diff --git a/.cache/huggingface/.gitignore b/.cache/huggingface/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..f59ec20aabf5842d237244ece8c81ab184faeac1 --- /dev/null +++ b/.cache/huggingface/.gitignore @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/.cache/huggingface/download/.gitattributes.lock b/.cache/huggingface/download/.gitattributes.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/.gitattributes.metadata b/.cache/huggingface/download/.gitattributes.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f70189bfaae814ae756b771da42e1ee0b34e475c --- /dev/null +++ b/.cache/huggingface/download/.gitattributes.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +955c68ac938e4ec763a4d51175c65c9989500b06 +1766572229.756323 diff --git a/.cache/huggingface/download/CONTRIBUTING.md.lock b/.cache/huggingface/download/CONTRIBUTING.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/CONTRIBUTING.md.metadata b/.cache/huggingface/download/CONTRIBUTING.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..7cac26e9fcad3172dc594b2096c021d2e792cd62 --- /dev/null +++ b/.cache/huggingface/download/CONTRIBUTING.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +797fbaaf978606e1991e51e05be7813862584c5e +1766572229.609531 diff --git a/.cache/huggingface/download/IOU_test.py.lock b/.cache/huggingface/download/IOU_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/IOU_test.py.metadata b/.cache/huggingface/download/IOU_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..5025580af62e699b86db17b3355f8d73bbde1455 --- /dev/null +++ b/.cache/huggingface/download/IOU_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +eeac3327d3bb17c7aa88d7022d4388e4c6975e0a +1766572229.9621246 diff --git a/.cache/huggingface/download/LICENSE.lock b/.cache/huggingface/download/LICENSE.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/LICENSE.metadata b/.cache/huggingface/download/LICENSE.metadata new file mode 100644 index 0000000000000000000000000000000000000000..1b646b22b747a6cdd60e5887db9e9d8cb30d18cf --- /dev/null +++ b/.cache/huggingface/download/LICENSE.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +d645695673349e3947e8e5ae42332d0ac3164cd7 +1766572229.6050847 diff --git a/.cache/huggingface/download/README.md.lock b/.cache/huggingface/download/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/README.md.metadata b/.cache/huggingface/download/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..541db172205eb613c2e107ca3ff58c4777e9888b --- /dev/null +++ b/.cache/huggingface/download/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +4aa107e4a89900a7f3faa873e6b07282b1c1ff7a +1766572230.513033 diff --git a/.cache/huggingface/download/__pycache__/owlv2_helper.cpython-310.pyc.lock b/.cache/huggingface/download/__pycache__/owlv2_helper.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/__pycache__/owlv2_helper.cpython-310.pyc.metadata b/.cache/huggingface/download/__pycache__/owlv2_helper.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9f067c0528e590f46e53604bf227a09d7d92f0f3 --- /dev/null +++ b/.cache/huggingface/download/__pycache__/owlv2_helper.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +b44736907c28f750366c6e79ae285077dcbf117a +1766572229.619236 diff --git a/.cache/huggingface/download/__pycache__/owlv2_helper_functions.cpython-310.pyc.lock b/.cache/huggingface/download/__pycache__/owlv2_helper_functions.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/__pycache__/owlv2_helper_functions.cpython-310.pyc.metadata b/.cache/huggingface/download/__pycache__/owlv2_helper_functions.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..decce7eb20f2919fd79168a277f555ea646d1649 --- /dev/null +++ b/.cache/huggingface/download/__pycache__/owlv2_helper_functions.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +99000791a4d0f83562b1cdba662dcbaac69325ca +1766572229.7906551 diff --git a/.cache/huggingface/download/auto_bbox.py.lock b/.cache/huggingface/download/auto_bbox.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/auto_bbox.py.metadata b/.cache/huggingface/download/auto_bbox.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f2b0d4b127d17c2ba63b1ee2c9c286059da0b3c3 --- /dev/null +++ b/.cache/huggingface/download/auto_bbox.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +4ceb1bd8dc03c5d3405e4086bd6c06dc498e09ba +1766572229.8030047 diff --git a/.cache/huggingface/download/big_vision/.gitignore.lock b/.cache/huggingface/download/big_vision/.gitignore.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/.gitignore.metadata b/.cache/huggingface/download/big_vision/.gitignore.metadata new file mode 100644 index 0000000000000000000000000000000000000000..175835d55646a37401acab7c596204d5a48f3b1e --- /dev/null +++ b/.cache/huggingface/download/big_vision/.gitignore.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +ed8ebf583f771da9150c35db3955987b7d757904 +1766572231.0332136 diff --git a/.cache/huggingface/download/big_vision/CONTRIBUTING.md.lock b/.cache/huggingface/download/big_vision/CONTRIBUTING.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/CONTRIBUTING.md.metadata b/.cache/huggingface/download/big_vision/CONTRIBUTING.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e2958f66c517064dbd8f9dd531f7d88187bc9f19 --- /dev/null +++ b/.cache/huggingface/download/big_vision/CONTRIBUTING.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +5e5644093c15ecd61b0d0308990855dcbb320a2e +1766572230.7782068 diff --git a/.cache/huggingface/download/big_vision/LICENSE.lock b/.cache/huggingface/download/big_vision/LICENSE.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/LICENSE.metadata b/.cache/huggingface/download/big_vision/LICENSE.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8291302a4ca0c3981070ff72072e9db28ec2b40d --- /dev/null +++ b/.cache/huggingface/download/big_vision/LICENSE.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +f49a4e16e68b128803cc2dcea614603632b04eac +1766572231.3465288 diff --git a/.cache/huggingface/download/big_vision/README.md.lock b/.cache/huggingface/download/big_vision/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/README.md.metadata b/.cache/huggingface/download/big_vision/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f298fbab93c761bb84e978b654eeff0922ad3d67 --- /dev/null +++ b/.cache/huggingface/download/big_vision/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +289fd7401a5ad6be14b6f7f8d8cf3b157a6dfc9f +1766572231.060915 diff --git a/.cache/huggingface/download/big_vision/__init__.py.lock b/.cache/huggingface/download/big_vision/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/__init__.py.metadata b/.cache/huggingface/download/big_vision/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..78dbb3ca77149476a6620515a6e39fe1aa5600a5 --- /dev/null +++ b/.cache/huggingface/download/big_vision/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572230.5796468 diff --git a/.cache/huggingface/download/big_vision/__pycache__/__init__.cpython-310.pyc.lock b/.cache/huggingface/download/big_vision/__pycache__/__init__.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/__pycache__/__init__.cpython-310.pyc.metadata b/.cache/huggingface/download/big_vision/__pycache__/__init__.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..57c0291baf0776192a3f78884c993ad62d78a6bc --- /dev/null +++ b/.cache/huggingface/download/big_vision/__pycache__/__init__.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +cd8350cbd6c74dc44e34b6366cf89b4b9706afd1 +1766572231.8039002 diff --git a/.cache/huggingface/download/big_vision/__pycache__/utils.cpython-310.pyc.lock b/.cache/huggingface/download/big_vision/__pycache__/utils.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/__pycache__/utils.cpython-310.pyc.metadata b/.cache/huggingface/download/big_vision/__pycache__/utils.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d5ecd26f51c11864616cd1943df49b7a41e0b86c --- /dev/null +++ b/.cache/huggingface/download/big_vision/__pycache__/utils.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +30f6c73dfa925c37278708b86b5563be17cc5070 +1766572231.4771862 diff --git a/.cache/huggingface/download/big_vision/configs/__init__.py.lock b/.cache/huggingface/download/big_vision/configs/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/configs/__init__.py.metadata b/.cache/huggingface/download/big_vision/configs/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..507e18393698aabdeabc8fe32ed259587d85ce84 --- /dev/null +++ b/.cache/huggingface/download/big_vision/configs/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572231.1584916 diff --git a/.cache/huggingface/download/big_vision/configs/bit_i1k.py.lock b/.cache/huggingface/download/big_vision/configs/bit_i1k.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/configs/bit_i1k.py.metadata b/.cache/huggingface/download/big_vision/configs/bit_i1k.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..cbbe3af3e5e4c590b92b03eff8edeabf4b178392 --- /dev/null +++ b/.cache/huggingface/download/big_vision/configs/bit_i1k.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +8bd53c318b108bab483923a95e8d3c0df42d709d +1766572232.3012204 diff --git a/.cache/huggingface/download/big_vision/configs/bit_i21k.py.lock b/.cache/huggingface/download/big_vision/configs/bit_i21k.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/configs/bit_i21k.py.metadata b/.cache/huggingface/download/big_vision/configs/bit_i21k.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..19b04b7db09e4868cc072896e18d6d4b394e4ed5 --- /dev/null +++ b/.cache/huggingface/download/big_vision/configs/bit_i21k.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +c42342e9ab8ff513211954efab79dd4309fbe101 +1766572232.159931 diff --git a/.cache/huggingface/download/big_vision/configs/common.py.lock b/.cache/huggingface/download/big_vision/configs/common.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/configs/common.py.metadata b/.cache/huggingface/download/big_vision/configs/common.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..32d2f8825450916dfda9030c8f678c33ed82f671 --- /dev/null +++ b/.cache/huggingface/download/big_vision/configs/common.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +c1628c3ccaa554eb5d2a39e2317fb06953542a6d +1766572232.3079183 diff --git a/.cache/huggingface/download/big_vision/configs/common_fewshot.py.lock b/.cache/huggingface/download/big_vision/configs/common_fewshot.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/configs/common_fewshot.py.metadata b/.cache/huggingface/download/big_vision/configs/common_fewshot.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..fb8bd9a4dad19ef9494858dbc6b5047f8572c943 --- /dev/null +++ b/.cache/huggingface/download/big_vision/configs/common_fewshot.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +c430383639adcf6103e0976b190eda5b2740321a +1766572232.5343983 diff --git a/.cache/huggingface/download/big_vision/configs/load_and_eval.py.lock b/.cache/huggingface/download/big_vision/configs/load_and_eval.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/configs/load_and_eval.py.metadata b/.cache/huggingface/download/big_vision/configs/load_and_eval.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8df0e70ad76426ead7e686a100fa2d36e856ac6f --- /dev/null +++ b/.cache/huggingface/download/big_vision/configs/load_and_eval.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +7e102b0f561f2cc6ec59439f831e9e289488b7b0 +1766572232.6357145 diff --git a/.cache/huggingface/download/big_vision/configs/mlp_mixer_i1k.py.lock b/.cache/huggingface/download/big_vision/configs/mlp_mixer_i1k.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/configs/mlp_mixer_i1k.py.metadata b/.cache/huggingface/download/big_vision/configs/mlp_mixer_i1k.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9076e07d19f9508cf8998b62fb4f0543d1ad7d7c --- /dev/null +++ b/.cache/huggingface/download/big_vision/configs/mlp_mixer_i1k.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +8afe9abfd31f4ecb4e53466ea3e2b2794e8af7e7 +1766572232.691157 diff --git a/.cache/huggingface/download/big_vision/configs/transfer.py.lock b/.cache/huggingface/download/big_vision/configs/transfer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/configs/transfer.py.metadata b/.cache/huggingface/download/big_vision/configs/transfer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b31d4f83e39f7dbcae1112a904accaaa4aab28d9 --- /dev/null +++ b/.cache/huggingface/download/big_vision/configs/transfer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +1ee64e43b274bdf5d462c7e3f3d9b5fc085c1796 +1766572232.5470724 diff --git a/.cache/huggingface/download/big_vision/configs/vit_i1k.py.lock b/.cache/huggingface/download/big_vision/configs/vit_i1k.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/configs/vit_i1k.py.metadata b/.cache/huggingface/download/big_vision/configs/vit_i1k.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..82b3503a7409293c3d7b9a2b1af064934c94f5f7 --- /dev/null +++ b/.cache/huggingface/download/big_vision/configs/vit_i1k.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +8e6dd8d18ba723175a7a0cf887352e3023a11ccc +1766572233.3847253 diff --git a/.cache/huggingface/download/big_vision/configs/vit_i21k.py.lock b/.cache/huggingface/download/big_vision/configs/vit_i21k.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/configs/vit_i21k.py.metadata b/.cache/huggingface/download/big_vision/configs/vit_i21k.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..885834e30f18d773432308a119b6dc24dab1114d --- /dev/null +++ b/.cache/huggingface/download/big_vision/configs/vit_i21k.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +adae41838736be4f4a9737e614152dc5c7fd329b +1766572233.3796833 diff --git a/.cache/huggingface/download/big_vision/configs/vit_s16_i1k.py.lock b/.cache/huggingface/download/big_vision/configs/vit_s16_i1k.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/configs/vit_s16_i1k.py.metadata b/.cache/huggingface/download/big_vision/configs/vit_s16_i1k.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8e9c0e0e112ee591979e1b4663fbe91c19bb0b28 --- /dev/null +++ b/.cache/huggingface/download/big_vision/configs/vit_s16_i1k.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +d50dd26508713b67c434f0e677e58fbef7d8af13 +1766572233.606576 diff --git a/.cache/huggingface/download/big_vision/datasets/ai2d/ai2d.py.lock b/.cache/huggingface/download/big_vision/datasets/ai2d/ai2d.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/ai2d/ai2d.py.metadata b/.cache/huggingface/download/big_vision/datasets/ai2d/ai2d.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d1eb6973d4e7ac8275f00c164dff0551635b5de6 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/ai2d/ai2d.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572233.4547029 diff --git a/.cache/huggingface/download/big_vision/datasets/aokvqa/aokvqa.py.lock b/.cache/huggingface/download/big_vision/datasets/aokvqa/aokvqa.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/aokvqa/aokvqa.py.metadata b/.cache/huggingface/download/big_vision/datasets/aokvqa/aokvqa.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..71ed5ae923781c79d043e7e617d685c7e5d2ced2 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/aokvqa/aokvqa.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572233.1301775 diff --git a/.cache/huggingface/download/big_vision/datasets/chartqa/chartqa.py.lock b/.cache/huggingface/download/big_vision/datasets/chartqa/chartqa.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/chartqa/chartqa.py.metadata b/.cache/huggingface/download/big_vision/datasets/chartqa/chartqa.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..3f12dfb823de47e4e234830af2bffca1a401a58a --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/chartqa/chartqa.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572233.884309 diff --git a/.cache/huggingface/download/big_vision/datasets/coco35l/coco35l.py.lock b/.cache/huggingface/download/big_vision/datasets/coco35l/coco35l.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/coco35l/coco35l.py.metadata b/.cache/huggingface/download/big_vision/datasets/coco35l/coco35l.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2f8a15e39f8fae2b3e2ca5f1e8244e45d44ec393 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/coco35l/coco35l.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572233.2316167 diff --git a/.cache/huggingface/download/big_vision/datasets/core.py.lock b/.cache/huggingface/download/big_vision/datasets/core.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/core.py.metadata b/.cache/huggingface/download/big_vision/datasets/core.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..059bcb1f1be1b10866da107b25644bc8991bb686 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/core.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +07d2a2c6814646908fc5133cb5a54aec6d3b57b3 +1766572234.2475116 diff --git a/.cache/huggingface/download/big_vision/datasets/countbenchqa/countbenchqa.py.lock b/.cache/huggingface/download/big_vision/datasets/countbenchqa/countbenchqa.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/countbenchqa/countbenchqa.py.metadata b/.cache/huggingface/download/big_vision/datasets/countbenchqa/countbenchqa.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..70932a20642a20888654c4444e820ede6a116aac --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/countbenchqa/countbenchqa.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572233.7433927 diff --git a/.cache/huggingface/download/big_vision/datasets/docvqa/docvqa.py.lock b/.cache/huggingface/download/big_vision/datasets/docvqa/docvqa.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/docvqa/docvqa.py.metadata b/.cache/huggingface/download/big_vision/datasets/docvqa/docvqa.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f212540df0c5bd109b1e3edeab00c3e2511c6298 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/docvqa/docvqa.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572233.8763509 diff --git a/.cache/huggingface/download/big_vision/datasets/gqa/gqa.py.lock b/.cache/huggingface/download/big_vision/datasets/gqa/gqa.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/gqa/gqa.py.metadata b/.cache/huggingface/download/big_vision/datasets/gqa/gqa.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..957e4ecee6c5ee18705bc408e52670ce01833048 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/gqa/gqa.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572234.0110948 diff --git a/.cache/huggingface/download/big_vision/datasets/imagenet/class_names.py.lock b/.cache/huggingface/download/big_vision/datasets/imagenet/class_names.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/imagenet/class_names.py.metadata b/.cache/huggingface/download/big_vision/datasets/imagenet/class_names.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8f1af2f2f4c94375eb892d6169a345bf72a092b2 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/imagenet/class_names.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572234.018591 diff --git a/.cache/huggingface/download/big_vision/datasets/infovqa/infovqa.py.lock b/.cache/huggingface/download/big_vision/datasets/infovqa/infovqa.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/infovqa/infovqa.py.metadata b/.cache/huggingface/download/big_vision/datasets/infovqa/infovqa.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ecd4175c73aa2d5d4f9b3d2ae7270345ec652879 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/infovqa/infovqa.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572234.0346677 diff --git a/.cache/huggingface/download/big_vision/datasets/jsonl.py.lock b/.cache/huggingface/download/big_vision/datasets/jsonl.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/jsonl.py.metadata b/.cache/huggingface/download/big_vision/datasets/jsonl.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a288109a81280b10625e0de7a81c70491a9ecd71 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/jsonl.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +719deba2b25987a4b9d58b56474e420cb5b1e706 +1766572235.0086596 diff --git a/.cache/huggingface/download/big_vision/datasets/nocaps/nocaps.py.lock b/.cache/huggingface/download/big_vision/datasets/nocaps/nocaps.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/nocaps/nocaps.py.metadata b/.cache/huggingface/download/big_vision/datasets/nocaps/nocaps.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0ffb070ee12256288445b85e7e8638d0e470f2d0 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/nocaps/nocaps.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572234.356741 diff --git a/.cache/huggingface/download/big_vision/datasets/okvqa/okvqa.py.lock b/.cache/huggingface/download/big_vision/datasets/okvqa/okvqa.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/okvqa/okvqa.py.metadata b/.cache/huggingface/download/big_vision/datasets/okvqa/okvqa.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..365b5172896b762372813e900135e5aa0394a7c6 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/okvqa/okvqa.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572234.531279 diff --git a/.cache/huggingface/download/big_vision/datasets/pope/pope.py.lock b/.cache/huggingface/download/big_vision/datasets/pope/pope.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/pope/pope.py.metadata b/.cache/huggingface/download/big_vision/datasets/pope/pope.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0c3c6c2d031eca4b85f26f141a2bf037995c7177 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/pope/pope.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572234.4914262 diff --git a/.cache/huggingface/download/big_vision/datasets/refcoco/refcoco.py.lock b/.cache/huggingface/download/big_vision/datasets/refcoco/refcoco.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/refcoco/refcoco.py.metadata b/.cache/huggingface/download/big_vision/datasets/refcoco/refcoco.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f14035dc49cade352f21686ab29e8b8eccc3b44e --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/refcoco/refcoco.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572234.6492152 diff --git a/.cache/huggingface/download/big_vision/datasets/rsvqa_hr/rsvqa_hr.py.lock b/.cache/huggingface/download/big_vision/datasets/rsvqa_hr/rsvqa_hr.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/rsvqa_hr/rsvqa_hr.py.metadata b/.cache/huggingface/download/big_vision/datasets/rsvqa_hr/rsvqa_hr.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..af5f2947cdcc660d12c887ca51584f9cd939562a --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/rsvqa_hr/rsvqa_hr.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572234.5921714 diff --git a/.cache/huggingface/download/big_vision/datasets/rsvqa_lr/rsvqa_lr.py.lock b/.cache/huggingface/download/big_vision/datasets/rsvqa_lr/rsvqa_lr.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/rsvqa_lr/rsvqa_lr.py.metadata b/.cache/huggingface/download/big_vision/datasets/rsvqa_lr/rsvqa_lr.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..02aad5e7bf8de5afed7768781ba862e5b9e469ed --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/rsvqa_lr/rsvqa_lr.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572234.656511 diff --git a/.cache/huggingface/download/big_vision/datasets/scicap/scicap.py.lock b/.cache/huggingface/download/big_vision/datasets/scicap/scicap.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/scicap/scicap.py.metadata b/.cache/huggingface/download/big_vision/datasets/scicap/scicap.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..555d097479e4f12ce7d5aa87ce248b845c7d514a --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/scicap/scicap.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572235.063992 diff --git a/.cache/huggingface/download/big_vision/datasets/science_qa/science_qa.py.lock b/.cache/huggingface/download/big_vision/datasets/science_qa/science_qa.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/science_qa/science_qa.py.metadata b/.cache/huggingface/download/big_vision/datasets/science_qa/science_qa.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f5c98e1e21fff3592215277fafd9bf9c5ec12f17 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/science_qa/science_qa.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572235.7375975 diff --git a/.cache/huggingface/download/big_vision/datasets/screen2words/screen2words.py.lock b/.cache/huggingface/download/big_vision/datasets/screen2words/screen2words.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/screen2words/screen2words.py.metadata b/.cache/huggingface/download/big_vision/datasets/screen2words/screen2words.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..093247de2777b374d6852db818290bce58266b80 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/screen2words/screen2words.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572235.1263263 diff --git a/.cache/huggingface/download/big_vision/datasets/sequence_packing.py.lock b/.cache/huggingface/download/big_vision/datasets/sequence_packing.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/sequence_packing.py.metadata b/.cache/huggingface/download/big_vision/datasets/sequence_packing.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9910578551ad129511106bd297bd968010a42cfc --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/sequence_packing.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +48966d3c488886b3ab0d0f061a1c88c57fdeabae +1766572235.6904843 diff --git a/.cache/huggingface/download/big_vision/datasets/stvqa/stvqa.py.lock b/.cache/huggingface/download/big_vision/datasets/stvqa/stvqa.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/stvqa/stvqa.py.metadata b/.cache/huggingface/download/big_vision/datasets/stvqa/stvqa.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..cd616afe06be7e553ea0872eab17cbce248c6990 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/stvqa/stvqa.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572235.1750934 diff --git a/.cache/huggingface/download/big_vision/datasets/tallyqa/tallyqa.py.lock b/.cache/huggingface/download/big_vision/datasets/tallyqa/tallyqa.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/tallyqa/tallyqa.py.metadata b/.cache/huggingface/download/big_vision/datasets/tallyqa/tallyqa.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9502265bf6f531b7361f97d7acc4691bccfc5eb7 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/tallyqa/tallyqa.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572235.350178 diff --git a/.cache/huggingface/download/big_vision/datasets/textcaps/textcaps.py.lock b/.cache/huggingface/download/big_vision/datasets/textcaps/textcaps.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/textcaps/textcaps.py.metadata b/.cache/huggingface/download/big_vision/datasets/textcaps/textcaps.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4fdd1a9b7d678e586998be5f658300790e1d68d4 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/textcaps/textcaps.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572235.3097434 diff --git a/.cache/huggingface/download/big_vision/datasets/textvqa/textvqa.py.lock b/.cache/huggingface/download/big_vision/datasets/textvqa/textvqa.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/textvqa/textvqa.py.metadata b/.cache/huggingface/download/big_vision/datasets/textvqa/textvqa.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..fa57a89973889db7a70106f161a298b9586552a5 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/textvqa/textvqa.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572235.636775 diff --git a/.cache/huggingface/download/big_vision/datasets/tfds.py.lock b/.cache/huggingface/download/big_vision/datasets/tfds.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/tfds.py.metadata b/.cache/huggingface/download/big_vision/datasets/tfds.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..1ae8a145421b6b1e18b8a6cfa8e96223e36e48d6 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/tfds.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +0c15dbc26f46e87d4df27027c1cca5a01b5e74fa +1766572236.3886127 diff --git a/.cache/huggingface/download/big_vision/datasets/vizwizvqa/vizwizvqa.py.lock b/.cache/huggingface/download/big_vision/datasets/vizwizvqa/vizwizvqa.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/vizwizvqa/vizwizvqa.py.metadata b/.cache/huggingface/download/big_vision/datasets/vizwizvqa/vizwizvqa.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..257ae20ea6383c716b13f2d075b5291473241e4c --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/vizwizvqa/vizwizvqa.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572236.0900905 diff --git a/.cache/huggingface/download/big_vision/datasets/vqa/vqa.py.lock b/.cache/huggingface/download/big_vision/datasets/vqa/vqa.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/vqa/vqa.py.metadata b/.cache/huggingface/download/big_vision/datasets/vqa/vqa.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..32dc23aa52d29b0ab7f33233fb572b26ab8dab70 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/vqa/vqa.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572235.751407 diff --git a/.cache/huggingface/download/big_vision/datasets/widgetcap/widgetcap.py.lock b/.cache/huggingface/download/big_vision/datasets/widgetcap/widgetcap.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/widgetcap/widgetcap.py.metadata b/.cache/huggingface/download/big_vision/datasets/widgetcap/widgetcap.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..01e8babbf20fddfc41654cecd9e4985d02e462c7 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/widgetcap/widgetcap.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572235.9800534 diff --git a/.cache/huggingface/download/big_vision/datasets/xgqa/xgqa.py.lock b/.cache/huggingface/download/big_vision/datasets/xgqa/xgqa.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/xgqa/xgqa.py.metadata b/.cache/huggingface/download/big_vision/datasets/xgqa/xgqa.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ee369c592cc3ee108da13c8eec2187c1f25d0f93 --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/xgqa/xgqa.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572235.9491906 diff --git a/.cache/huggingface/download/big_vision/datasets/xm3600/xm3600.py.lock b/.cache/huggingface/download/big_vision/datasets/xm3600/xm3600.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/datasets/xm3600/xm3600.py.metadata b/.cache/huggingface/download/big_vision/datasets/xm3600/xm3600.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8650672bb258796e7fea78db532a21d2c623540b --- /dev/null +++ b/.cache/huggingface/download/big_vision/datasets/xm3600/xm3600.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572236.7275956 diff --git a/.cache/huggingface/download/big_vision/evaluators/__init__.py.lock b/.cache/huggingface/download/big_vision/evaluators/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/evaluators/__init__.py.metadata b/.cache/huggingface/download/big_vision/evaluators/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f08084dc67bbded12fa52b4dee65b160419c61d8 --- /dev/null +++ b/.cache/huggingface/download/big_vision/evaluators/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572236.2861483 diff --git a/.cache/huggingface/download/big_vision/evaluators/classification.py.lock b/.cache/huggingface/download/big_vision/evaluators/classification.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/evaluators/classification.py.metadata b/.cache/huggingface/download/big_vision/evaluators/classification.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..1b29c8e2d00a290fd07777b5f572af788a0ef221 --- /dev/null +++ b/.cache/huggingface/download/big_vision/evaluators/classification.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +263ead8f5027f4b8e640b9ba42a72b3cbc33adf2 +1766572236.6940691 diff --git a/.cache/huggingface/download/big_vision/evaluators/common.py.lock b/.cache/huggingface/download/big_vision/evaluators/common.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/evaluators/common.py.metadata b/.cache/huggingface/download/big_vision/evaluators/common.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..cca4fac92b96c12f163e9c1048acaf7095b06a90 --- /dev/null +++ b/.cache/huggingface/download/big_vision/evaluators/common.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +42dcdbb4b52a5208673821b9c68df246709fcf6d +1766572236.7318685 diff --git a/.cache/huggingface/download/big_vision/evaluators/fewshot_lsr.py.lock b/.cache/huggingface/download/big_vision/evaluators/fewshot_lsr.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/evaluators/fewshot_lsr.py.metadata b/.cache/huggingface/download/big_vision/evaluators/fewshot_lsr.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e6eb7ebf4667489eb0aed643df5317cd71086172 --- /dev/null +++ b/.cache/huggingface/download/big_vision/evaluators/fewshot_lsr.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +1b7019ad3fa58936975b631206947b3b33ecdc67 +1766572236.944255 diff --git a/.cache/huggingface/download/big_vision/evaluators/mean.py.lock b/.cache/huggingface/download/big_vision/evaluators/mean.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/evaluators/mean.py.metadata b/.cache/huggingface/download/big_vision/evaluators/mean.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..86cefe9240f358f81757985b333e1f12ff311b50 --- /dev/null +++ b/.cache/huggingface/download/big_vision/evaluators/mean.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +a38fb21d3cd7ab7d37a5734c67640994c0956b36 +1766572237.2177145 diff --git a/.cache/huggingface/download/big_vision/evaluators/save.py.lock b/.cache/huggingface/download/big_vision/evaluators/save.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/evaluators/save.py.metadata b/.cache/huggingface/download/big_vision/evaluators/save.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a7f239e0ba88152f39b7e04da1c9355db0d2c43c --- /dev/null +++ b/.cache/huggingface/download/big_vision/evaluators/save.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +49bcfc59b9fd9c613611b1edcbd157b2d8c2d6d5 +1766572237.0227833 diff --git a/.cache/huggingface/download/big_vision/input_pipeline.py.lock b/.cache/huggingface/download/big_vision/input_pipeline.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/input_pipeline.py.metadata b/.cache/huggingface/download/big_vision/input_pipeline.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..7c957af9947be04906ebceee3d10812889c222e6 --- /dev/null +++ b/.cache/huggingface/download/big_vision/input_pipeline.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +afe20894c3ac5fee4e0ef6bd549151b79f4f224c +1766572237.2723804 diff --git a/.cache/huggingface/download/big_vision/models/__init__.py.lock b/.cache/huggingface/download/big_vision/models/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/models/__init__.py.metadata b/.cache/huggingface/download/big_vision/models/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2e81e0f7092e70c95b0418979e36b1615bde2e98 --- /dev/null +++ b/.cache/huggingface/download/big_vision/models/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572237.0228877 diff --git a/.cache/huggingface/download/big_vision/models/__pycache__/__init__.cpython-310.pyc.lock b/.cache/huggingface/download/big_vision/models/__pycache__/__init__.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/models/__pycache__/__init__.cpython-310.pyc.metadata b/.cache/huggingface/download/big_vision/models/__pycache__/__init__.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..20334835a69380f46f7ec94b1925be07fd147e1b --- /dev/null +++ b/.cache/huggingface/download/big_vision/models/__pycache__/__init__.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572237.2920938 diff --git a/.cache/huggingface/download/big_vision/models/__pycache__/bit.cpython-310.pyc.lock b/.cache/huggingface/download/big_vision/models/__pycache__/bit.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/models/__pycache__/bit.cpython-310.pyc.metadata b/.cache/huggingface/download/big_vision/models/__pycache__/bit.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..6116be0ca7e663fe4ec1ae77fe8c230978663f10 --- /dev/null +++ b/.cache/huggingface/download/big_vision/models/__pycache__/bit.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572237.464235 diff --git a/.cache/huggingface/download/big_vision/models/__pycache__/common.cpython-310.pyc.lock b/.cache/huggingface/download/big_vision/models/__pycache__/common.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/models/__pycache__/common.cpython-310.pyc.metadata b/.cache/huggingface/download/big_vision/models/__pycache__/common.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..224ac2f4807aac6243a14a6ed4169e85ef878fdf --- /dev/null +++ b/.cache/huggingface/download/big_vision/models/__pycache__/common.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572237.3222933 diff --git a/.cache/huggingface/download/big_vision/models/__pycache__/vit.cpython-310.pyc.lock b/.cache/huggingface/download/big_vision/models/__pycache__/vit.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/models/__pycache__/vit.cpython-310.pyc.metadata b/.cache/huggingface/download/big_vision/models/__pycache__/vit.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..193a72beb3d685b5e96c3b3246855d7ce90e26bb --- /dev/null +++ b/.cache/huggingface/download/big_vision/models/__pycache__/vit.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572237.9010623 diff --git a/.cache/huggingface/download/big_vision/models/bit.py.lock b/.cache/huggingface/download/big_vision/models/bit.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/models/bit.py.metadata b/.cache/huggingface/download/big_vision/models/bit.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..691f261e4d6f8e18c04e3d879cd743aa249a3717 --- /dev/null +++ b/.cache/huggingface/download/big_vision/models/bit.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +cd4235df9ec87549590396deb69739e310e6770d +1766572238.1947763 diff --git a/.cache/huggingface/download/big_vision/models/bit_paper.py.lock b/.cache/huggingface/download/big_vision/models/bit_paper.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/models/bit_paper.py.metadata b/.cache/huggingface/download/big_vision/models/bit_paper.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..7a9d096415a1fb38831879abff0125a92d95f5b0 --- /dev/null +++ b/.cache/huggingface/download/big_vision/models/bit_paper.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +26e5ba83616ce046a78d1a9b3fa32f8b4cbc1000 +1766572238.5565124 diff --git a/.cache/huggingface/download/big_vision/models/common.py.lock b/.cache/huggingface/download/big_vision/models/common.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/models/common.py.metadata b/.cache/huggingface/download/big_vision/models/common.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4d02890188291756e00abc359478f34701ae8af7 --- /dev/null +++ b/.cache/huggingface/download/big_vision/models/common.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +175dfa77a1360bc2a0276fa12245c8d357b39406 +1766572238.1279423 diff --git a/.cache/huggingface/download/big_vision/models/mlp_mixer.py.lock b/.cache/huggingface/download/big_vision/models/mlp_mixer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/models/mlp_mixer.py.metadata b/.cache/huggingface/download/big_vision/models/mlp_mixer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..569f59ae1f18be7ab5999a1d88d798e97010876b --- /dev/null +++ b/.cache/huggingface/download/big_vision/models/mlp_mixer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +58bd4b99d21f061693da007b26dd24013e341851 +1766572238.2126782 diff --git a/.cache/huggingface/download/big_vision/models/ppp/__init__.py.lock b/.cache/huggingface/download/big_vision/models/ppp/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/models/ppp/__init__.py.metadata b/.cache/huggingface/download/big_vision/models/ppp/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..02d43beeac8d13c593d1a09a27d27684656d2540 --- /dev/null +++ b/.cache/huggingface/download/big_vision/models/ppp/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572237.9841502 diff --git a/.cache/huggingface/download/big_vision/models/ppp/gemma.py.lock b/.cache/huggingface/download/big_vision/models/ppp/gemma.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/models/ppp/gemma.py.metadata b/.cache/huggingface/download/big_vision/models/ppp/gemma.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..6ab5bf6177bca6de6673bc0b04a269a33b5a2a09 --- /dev/null +++ b/.cache/huggingface/download/big_vision/models/ppp/gemma.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572237.9311087 diff --git a/.cache/huggingface/download/big_vision/models/vit.py.lock b/.cache/huggingface/download/big_vision/models/vit.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/models/vit.py.metadata b/.cache/huggingface/download/big_vision/models/vit.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a413978f93442909e129dbb01922ac8cbcd50259 --- /dev/null +++ b/.cache/huggingface/download/big_vision/models/vit.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +7f536cf3b17ee97ec0cac3cc1f282dc0a8a699c3 +1766572238.8102772 diff --git a/.cache/huggingface/download/big_vision/optax.py.lock b/.cache/huggingface/download/big_vision/optax.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/optax.py.metadata b/.cache/huggingface/download/big_vision/optax.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ed8b821ef8248aa257181a9c4b69c848e11281a5 --- /dev/null +++ b/.cache/huggingface/download/big_vision/optax.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +39ddb0fc3d8075985a75d7cdf150d430e141d681 +1766572239.4575303 diff --git a/.cache/huggingface/download/big_vision/optax_test.py.lock b/.cache/huggingface/download/big_vision/optax_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/optax_test.py.metadata b/.cache/huggingface/download/big_vision/optax_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..c2e029d8355c072a1f6d54f1fb50696de446cc44 --- /dev/null +++ b/.cache/huggingface/download/big_vision/optax_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +86f7bd9999079b393565ad5a718b4c1dbd815e79 +1766572239.0101378 diff --git a/.cache/huggingface/download/big_vision/pp/__init__.py.lock b/.cache/huggingface/download/big_vision/pp/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/__init__.py.metadata b/.cache/huggingface/download/big_vision/pp/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..57a24975b1dcf78bb1fd92fda72ca94792afbf71 --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572238.5785913 diff --git a/.cache/huggingface/download/big_vision/pp/__pycache__/__init__.cpython-310.pyc.lock b/.cache/huggingface/download/big_vision/pp/__pycache__/__init__.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/__pycache__/__init__.cpython-310.pyc.metadata b/.cache/huggingface/download/big_vision/pp/__pycache__/__init__.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..00f98d926ae43f132a6bd0c590e8274632baf363 --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/__pycache__/__init__.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572238.7428303 diff --git a/.cache/huggingface/download/big_vision/pp/__pycache__/registry.cpython-310.pyc.lock b/.cache/huggingface/download/big_vision/pp/__pycache__/registry.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/__pycache__/registry.cpython-310.pyc.metadata b/.cache/huggingface/download/big_vision/pp/__pycache__/registry.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2e0c953b48e18db0a24cd3c3b84ce615eae44429 --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/__pycache__/registry.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572238.814565 diff --git a/.cache/huggingface/download/big_vision/pp/archive/__init__.py.lock b/.cache/huggingface/download/big_vision/pp/archive/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/archive/__init__.py.metadata b/.cache/huggingface/download/big_vision/pp/archive/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..122cc541b9c445f59edc935076636569b5cd907a --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/archive/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572238.8742392 diff --git a/.cache/huggingface/download/big_vision/pp/archive/autoaugment.py.lock b/.cache/huggingface/download/big_vision/pp/archive/autoaugment.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/archive/autoaugment.py.metadata b/.cache/huggingface/download/big_vision/pp/archive/autoaugment.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ae05dfbf8b24ce6a4315131a12b629b28b095050 --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/archive/autoaugment.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572239.1373346 diff --git a/.cache/huggingface/download/big_vision/pp/archive/randaug.py.lock b/.cache/huggingface/download/big_vision/pp/archive/randaug.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/archive/randaug.py.metadata b/.cache/huggingface/download/big_vision/pp/archive/randaug.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..04b41b6fd8a3684c7b4fc37e60fb510f6ac8d897 --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/archive/randaug.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572239.5129864 diff --git a/.cache/huggingface/download/big_vision/pp/autoaugment.py.lock b/.cache/huggingface/download/big_vision/pp/autoaugment.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/autoaugment.py.metadata b/.cache/huggingface/download/big_vision/pp/autoaugment.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b92f9c87c40ec514aa40cc9865f04f4dc82752de --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/autoaugment.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +6cc45f14e5d8c49cb54c649104851e0729ebb180 +1766572239.7627783 diff --git a/.cache/huggingface/download/big_vision/pp/builder.py.lock b/.cache/huggingface/download/big_vision/pp/builder.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/builder.py.metadata b/.cache/huggingface/download/big_vision/pp/builder.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..33b282e54b13b08eaf52a686bc1b02107e14118f --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/builder.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +8e254cdfdd17c3b58e1c9522bbc2a5be1bb089b9 +1766572239.876524 diff --git a/.cache/huggingface/download/big_vision/pp/builder_test.py.lock b/.cache/huggingface/download/big_vision/pp/builder_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/builder_test.py.metadata b/.cache/huggingface/download/big_vision/pp/builder_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..1e91dfdd5988e02f4222b053ae89cd9b52facb38 --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/builder_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +f3a75cc05417a7f3ace70f97583d2e7b1ae4c432 +1766572239.9095106 diff --git a/.cache/huggingface/download/big_vision/pp/ops_general.py.lock b/.cache/huggingface/download/big_vision/pp/ops_general.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/ops_general.py.metadata b/.cache/huggingface/download/big_vision/pp/ops_general.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a46534c72ac08f6c86e2cfa44913336ef2dd8f46 --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/ops_general.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +2a5cebd07b34b9d4ba56e5da52d7a06125a04304 +1766572239.881502 diff --git a/.cache/huggingface/download/big_vision/pp/ops_general_test.py.lock b/.cache/huggingface/download/big_vision/pp/ops_general_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/ops_general_test.py.metadata b/.cache/huggingface/download/big_vision/pp/ops_general_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..aa581a8afbbc78d0c6a4bc4cb0f590898d207ff0 --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/ops_general_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +89f616e1690c6e83aff818cf0fff540dcad073fd +1766572240.1139946 diff --git a/.cache/huggingface/download/big_vision/pp/ops_image.py.lock b/.cache/huggingface/download/big_vision/pp/ops_image.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/ops_image.py.metadata b/.cache/huggingface/download/big_vision/pp/ops_image.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..eaf54e6ce54001c6990043e78635708e9435b928 --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/ops_image.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +bdc55a5659c3e0df0c209edef798bbd5c6a7f623 +1766572240.067721 diff --git a/.cache/huggingface/download/big_vision/pp/ops_image_test.py.lock b/.cache/huggingface/download/big_vision/pp/ops_image_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/ops_image_test.py.metadata b/.cache/huggingface/download/big_vision/pp/ops_image_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a7154cde9b2bea5c493bbf780ba4cf719be03fdd --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/ops_image_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +080fe673cf90f83b405106dd057870ee8e8f76a2 +1766572240.9085898 diff --git a/.cache/huggingface/download/big_vision/pp/ops_text.py.lock b/.cache/huggingface/download/big_vision/pp/ops_text.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/ops_text.py.metadata b/.cache/huggingface/download/big_vision/pp/ops_text.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0dec43c6f74ddc60167007370b388ca4c915ce72 --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/ops_text.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +5ff8bdc3dae1197c7796ec5416c23052d61bef4e +1766572240.5943134 diff --git a/.cache/huggingface/download/big_vision/pp/ops_text_test.py.lock b/.cache/huggingface/download/big_vision/pp/ops_text_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/ops_text_test.py.metadata b/.cache/huggingface/download/big_vision/pp/ops_text_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..22bc218a6f0514c339514fa0c4fc688e276b85af --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/ops_text_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +ccf09d8e35bab0a0e5daec1ead7583d4b02cb82f +1766572240.9618995 diff --git a/.cache/huggingface/download/big_vision/pp/registry.py.lock b/.cache/huggingface/download/big_vision/pp/registry.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/registry.py.metadata b/.cache/huggingface/download/big_vision/pp/registry.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..7a772aaf525e3c57a31e9e34fefc7778b28fd621 --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/registry.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +f5c7d996d756be16ba68a5fcb143f23129e1249d +1766572240.8585732 diff --git a/.cache/huggingface/download/big_vision/pp/registry_test.py.lock b/.cache/huggingface/download/big_vision/pp/registry_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/registry_test.py.metadata b/.cache/huggingface/download/big_vision/pp/registry_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..85593694c7b0948a705af82ba496653082fcd388 --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/registry_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +2296e7de91ce0495bade59e8e65417384507e58e +1766572240.7917647 diff --git a/.cache/huggingface/download/big_vision/pp/tokenizer.py.lock b/.cache/huggingface/download/big_vision/pp/tokenizer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/tokenizer.py.metadata b/.cache/huggingface/download/big_vision/pp/tokenizer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..055f805277c323bab6c2c3fb1c8f69bb6c5d2f46 --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/tokenizer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +681494e436aacd48d5d720e07d2df1a80c704eb2 +1766572240.9393702 diff --git a/.cache/huggingface/download/big_vision/pp/utils.py.lock b/.cache/huggingface/download/big_vision/pp/utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/utils.py.metadata b/.cache/huggingface/download/big_vision/pp/utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a99d670f7719c984da53ce2fddf59a74d83ebc4d --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +3ee834560246549c71f0a6d9785694fd1507ca9b +1766572240.9845703 diff --git a/.cache/huggingface/download/big_vision/pp/utils_test.py.lock b/.cache/huggingface/download/big_vision/pp/utils_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/pp/utils_test.py.metadata b/.cache/huggingface/download/big_vision/pp/utils_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..66551f3708dc85acb5f6e784870938dcba4a0f88 --- /dev/null +++ b/.cache/huggingface/download/big_vision/pp/utils_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +beec18cef62a9638ed143229d7aedc5e218a70b6 +1766572241.170336 diff --git a/.cache/huggingface/download/big_vision/requirements.txt.lock b/.cache/huggingface/download/big_vision/requirements.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/requirements.txt.metadata b/.cache/huggingface/download/big_vision/requirements.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..56195f2805a3febe8f86ec81b1e58e4f4455d6ba --- /dev/null +++ b/.cache/huggingface/download/big_vision/requirements.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +9ae71db5ac26e2746864c37959dfd28cb9fe70bf +1766572241.6499321 diff --git a/.cache/huggingface/download/big_vision/run_tpu.sh.lock b/.cache/huggingface/download/big_vision/run_tpu.sh.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/run_tpu.sh.metadata b/.cache/huggingface/download/big_vision/run_tpu.sh.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2bb0100b2f2a8972275f4d8015cce31fb39eda78 --- /dev/null +++ b/.cache/huggingface/download/big_vision/run_tpu.sh.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +3c3da2e44e7d2829a00188f5e6177ea9d6e3ba4d +1766572242.2511885 diff --git a/.cache/huggingface/download/big_vision/sharding.py.lock b/.cache/huggingface/download/big_vision/sharding.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/sharding.py.metadata b/.cache/huggingface/download/big_vision/sharding.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f81ff92306f4a279b7cd7129fbb4c91d98819c2f --- /dev/null +++ b/.cache/huggingface/download/big_vision/sharding.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +be76cb3a1f6b8bc0e494515bac2a54528a53494c +1766572242.1538455 diff --git a/.cache/huggingface/download/big_vision/tools/download_tfds_datasets.py.lock b/.cache/huggingface/download/big_vision/tools/download_tfds_datasets.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/tools/download_tfds_datasets.py.metadata b/.cache/huggingface/download/big_vision/tools/download_tfds_datasets.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..44872f0b96dfa8294823def87d97b87f9ec975bd --- /dev/null +++ b/.cache/huggingface/download/big_vision/tools/download_tfds_datasets.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +b64c33d51a7cb8df063d15e828e30b07007ff6b0 +1766572242.7125373 diff --git a/.cache/huggingface/download/big_vision/tools/eval_only.py.lock b/.cache/huggingface/download/big_vision/tools/eval_only.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/tools/eval_only.py.metadata b/.cache/huggingface/download/big_vision/tools/eval_only.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..39c1ccfef6a7af202c16d754ab328ca3ca2c19c2 --- /dev/null +++ b/.cache/huggingface/download/big_vision/tools/eval_only.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +abdde4a6c0aa656a2e8ec76ce645982a2a6723b3 +1766572242.311711 diff --git a/.cache/huggingface/download/big_vision/tools/lit_demo/README.md.lock b/.cache/huggingface/download/big_vision/tools/lit_demo/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/tools/lit_demo/README.md.metadata b/.cache/huggingface/download/big_vision/tools/lit_demo/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..c22a46d0820338f02696863d96a8b18830d0c329 --- /dev/null +++ b/.cache/huggingface/download/big_vision/tools/lit_demo/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572241.5579445 diff --git a/.cache/huggingface/download/big_vision/tools/lit_demo/build.js.lock b/.cache/huggingface/download/big_vision/tools/lit_demo/build.js.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/tools/lit_demo/build.js.metadata b/.cache/huggingface/download/big_vision/tools/lit_demo/build.js.metadata new file mode 100644 index 0000000000000000000000000000000000000000..c783540b83713e9cfe1d80f64ca252df6ec8a43d --- /dev/null +++ b/.cache/huggingface/download/big_vision/tools/lit_demo/build.js.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572241.5686953 diff --git a/.cache/huggingface/download/big_vision/tools/lit_demo/package.json.lock b/.cache/huggingface/download/big_vision/tools/lit_demo/package.json.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/tools/lit_demo/package.json.metadata b/.cache/huggingface/download/big_vision/tools/lit_demo/package.json.metadata new file mode 100644 index 0000000000000000000000000000000000000000..93e707611e895693ca78c2a7155c8631271c9732 --- /dev/null +++ b/.cache/huggingface/download/big_vision/tools/lit_demo/package.json.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572241.802294 diff --git a/.cache/huggingface/download/big_vision/train.py.lock b/.cache/huggingface/download/big_vision/train.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/train.py.metadata b/.cache/huggingface/download/big_vision/train.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f88d2ef533a421bbaa1ecc522e1f1ebb78f1e04a --- /dev/null +++ b/.cache/huggingface/download/big_vision/train.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +51f49cc75c59f27e6393c73b400420e2c89da9e0 +1766572242.647579 diff --git a/.cache/huggingface/download/big_vision/utils.py.lock b/.cache/huggingface/download/big_vision/utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/utils.py.metadata b/.cache/huggingface/download/big_vision/utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..84539e0a39f7891f2a55d96d59f55a5e3b2d0fb3 --- /dev/null +++ b/.cache/huggingface/download/big_vision/utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +a954300f9ac7e4ccce27c38eb1367d3233451532 +1766572242.618334 diff --git a/.cache/huggingface/download/big_vision/utils_test.py.lock b/.cache/huggingface/download/big_vision/utils_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/big_vision/utils_test.py.metadata b/.cache/huggingface/download/big_vision/utils_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..5b3c56c7bcf396d188b5c4b8933384ba33dfb7ec --- /dev/null +++ b/.cache/huggingface/download/big_vision/utils_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +20680ee689262ef10e7a69d0446cc35f0fcf08bf +1766572242.6758413 diff --git a/.cache/huggingface/download/build/lib/scenic/__init__.py.lock b/.cache/huggingface/download/build/lib/scenic/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/build/lib/scenic/__init__.py.metadata b/.cache/huggingface/download/build/lib/scenic/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d10e8c6b9da8f9ae7668866fc36972969d034a51 --- /dev/null +++ b/.cache/huggingface/download/build/lib/scenic/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572242.4661038 diff --git a/.cache/huggingface/download/build/lib/scenic/app.py.lock b/.cache/huggingface/download/build/lib/scenic/app.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/build/lib/scenic/app.py.metadata b/.cache/huggingface/download/build/lib/scenic/app.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8ce3111680a09d78e05f0ec7e11ca1543660013d --- /dev/null +++ b/.cache/huggingface/download/build/lib/scenic/app.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572242.786796 diff --git a/.cache/huggingface/download/build/lib/scenic/main.py.lock b/.cache/huggingface/download/build/lib/scenic/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/build/lib/scenic/main.py.metadata b/.cache/huggingface/download/build/lib/scenic/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..1af27567df56c32702b32884c20a2af1360adfd0 --- /dev/null +++ b/.cache/huggingface/download/build/lib/scenic/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572242.849235 diff --git a/.cache/huggingface/download/ckpts/clip_vit_l14_with_masks_6c17944.lock b/.cache/huggingface/download/ckpts/clip_vit_l14_with_masks_6c17944.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/ckpts/clip_vit_l14_with_masks_6c17944.metadata b/.cache/huggingface/download/ckpts/clip_vit_l14_with_masks_6c17944.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9d2cd67119159e6add55a226cdd61edf2af0cb69 --- /dev/null +++ b/.cache/huggingface/download/ckpts/clip_vit_l14_with_masks_6c17944.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +26bb25bb66e747705143a35f76f5294114746e531436949d96933019cd17b2e6 +1766572243.870447 diff --git a/.cache/huggingface/download/ckpts/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b.lock b/.cache/huggingface/download/ckpts/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/ckpts/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b.metadata b/.cache/huggingface/download/ckpts/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b.metadata new file mode 100644 index 0000000000000000000000000000000000000000..3ca77b7145131609ee88a7bb75b51499d829bcba --- /dev/null +++ b/.cache/huggingface/download/ckpts/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +a05870e6eaf244a52382fb6935b955ca7e6e873181a0583d552a8330d228b900 +1766572243.8590539 diff --git a/.cache/huggingface/download/ckpts/owl2-l14-1008-st-ngrams-ft-lvisbase-ens-cold-weight-04_8ca674c.lock b/.cache/huggingface/download/ckpts/owl2-l14-1008-st-ngrams-ft-lvisbase-ens-cold-weight-04_8ca674c.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/ckpts/owl2-l14-1008-st-ngrams-ft-lvisbase-ens-cold-weight-04_8ca674c.metadata b/.cache/huggingface/download/ckpts/owl2-l14-1008-st-ngrams-ft-lvisbase-ens-cold-weight-04_8ca674c.metadata new file mode 100644 index 0000000000000000000000000000000000000000..57fad04965895bd4c78e48978a188a5b98de0c82 --- /dev/null +++ b/.cache/huggingface/download/ckpts/owl2-l14-1008-st-ngrams-ft-lvisbase-ens-cold-weight-04_8ca674c.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +7a276d61fb7c1ec7bbf68fa7d5d34a8032b6aa4f15170c1125208f77133b9c17 +1766572243.9153705 diff --git a/.cache/huggingface/download/images/scenic_design.jpg.lock b/.cache/huggingface/download/images/scenic_design.jpg.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/images/scenic_design.jpg.metadata b/.cache/huggingface/download/images/scenic_design.jpg.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2c2d5ba0bc687a207e42762bf38b7b6cb0879c63 --- /dev/null +++ b/.cache/huggingface/download/images/scenic_design.jpg.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +1b341d7d1fa31b679c346834e568221da3616196040d302fd65aa7d417010ee6 +1766572244.0358913 diff --git a/.cache/huggingface/download/images/scenic_logo.jpg.lock b/.cache/huggingface/download/images/scenic_logo.jpg.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/images/scenic_logo.jpg.metadata b/.cache/huggingface/download/images/scenic_logo.jpg.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d43d53ea3fa7bb9e56a73863ad8b452dddb37464 --- /dev/null +++ b/.cache/huggingface/download/images/scenic_logo.jpg.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +1e74593754532c72b37f9c16b386609d794467e2baf0c5532266e69e8c0c954b +1766572243.8762906 diff --git a/.cache/huggingface/download/images/scenic_logo.pdf.lock b/.cache/huggingface/download/images/scenic_logo.pdf.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/images/scenic_logo.pdf.metadata b/.cache/huggingface/download/images/scenic_logo.pdf.metadata new file mode 100644 index 0000000000000000000000000000000000000000..30f277b415765b0ed1f3761097811b8d4da8a639 --- /dev/null +++ b/.cache/huggingface/download/images/scenic_logo.pdf.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +c22604a5800abf0712331c3d6e85543315b7ef7b +1766572244.207288 diff --git a/.cache/huggingface/download/images/scenic_logo.png.lock b/.cache/huggingface/download/images/scenic_logo.png.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/images/scenic_logo.png.metadata b/.cache/huggingface/download/images/scenic_logo.png.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b055b81ffd1bfc36bbfe22b93dbb9e11dd66bcac --- /dev/null +++ b/.cache/huggingface/download/images/scenic_logo.png.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +9fb1f0d03dc18fcbab60a6b01073e1997be6b81e +1766572244.0447223 diff --git a/.cache/huggingface/download/owlv2_helper.py.lock b/.cache/huggingface/download/owlv2_helper.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/owlv2_helper.py.metadata b/.cache/huggingface/download/owlv2_helper.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0f8a03dbabe5975b5424884ee9c6662fe0d4e2c1 --- /dev/null +++ b/.cache/huggingface/download/owlv2_helper.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +fb8768be029d2f4233d610d8756363885ba7fdb0 +1766572243.7620995 diff --git a/.cache/huggingface/download/owlv2_helper_functions.py.lock b/.cache/huggingface/download/owlv2_helper_functions.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/owlv2_helper_functions.py.metadata b/.cache/huggingface/download/owlv2_helper_functions.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ac23ddf71e92be1b31966b72685c608be829f626 --- /dev/null +++ b/.cache/huggingface/download/owlv2_helper_functions.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +cbf991db19325bfe6e777daba431b4877e3daa4e +1766572244.6961899 diff --git a/.cache/huggingface/download/owlv2_img_embeding.py.lock b/.cache/huggingface/download/owlv2_img_embeding.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/owlv2_img_embeding.py.metadata b/.cache/huggingface/download/owlv2_img_embeding.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9d285740c02e13241aecdab98e819c50385d1098 --- /dev/null +++ b/.cache/huggingface/download/owlv2_img_embeding.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +170312b227e391d4069e3d8d008dc3c81ad8cd5d +1766572245.5555916 diff --git a/.cache/huggingface/download/owlv2_img_embeding_2.py.lock b/.cache/huggingface/download/owlv2_img_embeding_2.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/owlv2_img_embeding_2.py.metadata b/.cache/huggingface/download/owlv2_img_embeding_2.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9e9963e985e1a4e1a0b53422661447aeab100f78 --- /dev/null +++ b/.cache/huggingface/download/owlv2_img_embeding_2.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +96fb0da8cf201cdef78cb47ae0bdaff1724f0642 +1766572244.8097386 diff --git a/.cache/huggingface/download/owlv2_inference.py.lock b/.cache/huggingface/download/owlv2_inference.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/owlv2_inference.py.metadata b/.cache/huggingface/download/owlv2_inference.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ad07a7430d98ccabaff63cec4be605be7e1adbba --- /dev/null +++ b/.cache/huggingface/download/owlv2_inference.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +a8ed9fa343c89d5c8b7c1dbd95b2a6dd106dad28 +1766572245.4472294 diff --git a/.cache/huggingface/download/pylintrc.lock b/.cache/huggingface/download/pylintrc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/pylintrc.metadata b/.cache/huggingface/download/pylintrc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8edb4cd7ad741dc2a77ee8f7d09ccfaad0ca0deb --- /dev/null +++ b/.cache/huggingface/download/pylintrc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +98037fc9c3181c961927ee0034afa8ef616e32e6 +1766572245.0349278 diff --git a/.cache/huggingface/download/scenic.egg-info/PKG-INFO.lock b/.cache/huggingface/download/scenic.egg-info/PKG-INFO.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic.egg-info/PKG-INFO.metadata b/.cache/huggingface/download/scenic.egg-info/PKG-INFO.metadata new file mode 100644 index 0000000000000000000000000000000000000000..23d9fbf8cd22d75d82f4b63719232ac23ddc963c --- /dev/null +++ b/.cache/huggingface/download/scenic.egg-info/PKG-INFO.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e33311b418782a60e7e5517671cab875d3b4c3c2 +1766572245.0605824 diff --git a/.cache/huggingface/download/scenic.egg-info/SOURCES.txt.lock b/.cache/huggingface/download/scenic.egg-info/SOURCES.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic.egg-info/SOURCES.txt.metadata b/.cache/huggingface/download/scenic.egg-info/SOURCES.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..140c46119a5884287d037fdb5f27a631097373b5 --- /dev/null +++ b/.cache/huggingface/download/scenic.egg-info/SOURCES.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +7c4d9f943c65b324da6ee008bb806439d22788f6 +1766572245.0523431 diff --git a/.cache/huggingface/download/scenic.egg-info/dependency_links.txt.lock b/.cache/huggingface/download/scenic.egg-info/dependency_links.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic.egg-info/dependency_links.txt.metadata b/.cache/huggingface/download/scenic.egg-info/dependency_links.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..fc828977064378feec0008a69480462904157812 --- /dev/null +++ b/.cache/huggingface/download/scenic.egg-info/dependency_links.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +8b137891791fe96927ad78e64b0aad7bded08bdc +1766572245.8774078 diff --git a/.cache/huggingface/download/scenic.egg-info/requires.txt.lock b/.cache/huggingface/download/scenic.egg-info/requires.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic.egg-info/requires.txt.metadata b/.cache/huggingface/download/scenic.egg-info/requires.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..59fd56378aa7bfcdc4e5f40b74911b885e8cb7e6 --- /dev/null +++ b/.cache/huggingface/download/scenic.egg-info/requires.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +c704e5f407c9042b151e6dc5a5dcb5b5c58041da +1766572245.9538095 diff --git a/.cache/huggingface/download/scenic.egg-info/top_level.txt.lock b/.cache/huggingface/download/scenic.egg-info/top_level.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic.egg-info/top_level.txt.metadata b/.cache/huggingface/download/scenic.egg-info/top_level.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4a103b572ca8fa8f55feab0abf9cbe6930c776f1 --- /dev/null +++ b/.cache/huggingface/download/scenic.egg-info/top_level.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +32e23e34877ac602f342a04b2f0ff52be2bede12 +1766572245.9638753 diff --git a/.cache/huggingface/download/scenic/__init__.py.lock b/.cache/huggingface/download/scenic/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/__init__.py.metadata b/.cache/huggingface/download/scenic/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..7acc1115ef0514e703acd9772b31dc17a8944165 --- /dev/null +++ b/.cache/huggingface/download/scenic/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572245.643304 diff --git a/.cache/huggingface/download/scenic/__pycache__/__init__.cpython-310.pyc.lock b/.cache/huggingface/download/scenic/__pycache__/__init__.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/__pycache__/__init__.cpython-310.pyc.metadata b/.cache/huggingface/download/scenic/__pycache__/__init__.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..676c99f8712f448d478566ddf86af642f06d4d78 --- /dev/null +++ b/.cache/huggingface/download/scenic/__pycache__/__init__.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +b2cc1dcd43e1ce70ee6a85dd48b33698638c3542 +1766572246.2502122 diff --git a/.cache/huggingface/download/scenic/app.py.lock b/.cache/huggingface/download/scenic/app.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/app.py.metadata b/.cache/huggingface/download/scenic/app.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..429ba41ab72915a4dce00370e8f410b11a0e7019 --- /dev/null +++ b/.cache/huggingface/download/scenic/app.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +7ccd83dbfae3ad7b0af718f7220c0ba989e10ddd +1766572246.112563 diff --git a/.cache/huggingface/download/scenic/common_lib/__init__.py.lock b/.cache/huggingface/download/scenic/common_lib/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/common_lib/__init__.py.metadata b/.cache/huggingface/download/scenic/common_lib/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..54ce3d1034a1fab8a33e8f6af5c48d443fd2295c --- /dev/null +++ b/.cache/huggingface/download/scenic/common_lib/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572246.12222 diff --git a/.cache/huggingface/download/scenic/common_lib/__pycache__/__init__.cpython-310.pyc.lock b/.cache/huggingface/download/scenic/common_lib/__pycache__/__init__.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/common_lib/__pycache__/__init__.cpython-310.pyc.metadata b/.cache/huggingface/download/scenic/common_lib/__pycache__/__init__.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0c9b9b3f2fbb8cf577c8c74250419a883d1a2199 --- /dev/null +++ b/.cache/huggingface/download/scenic/common_lib/__pycache__/__init__.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572246.323973 diff --git a/.cache/huggingface/download/scenic/common_lib/__pycache__/debug_utils.cpython-310.pyc.lock b/.cache/huggingface/download/scenic/common_lib/__pycache__/debug_utils.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/common_lib/__pycache__/debug_utils.cpython-310.pyc.metadata b/.cache/huggingface/download/scenic/common_lib/__pycache__/debug_utils.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2c5bd19da127685195f85d677911e1f117f421f7 --- /dev/null +++ b/.cache/huggingface/download/scenic/common_lib/__pycache__/debug_utils.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572246.5447176 diff --git a/.cache/huggingface/download/scenic/common_lib/colabs/__init__.py.lock b/.cache/huggingface/download/scenic/common_lib/colabs/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/common_lib/colabs/__init__.py.metadata b/.cache/huggingface/download/scenic/common_lib/colabs/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..858149d3c4218e108ea27870671eef78e24cdfe4 --- /dev/null +++ b/.cache/huggingface/download/scenic/common_lib/colabs/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572246.6037438 diff --git a/.cache/huggingface/download/scenic/common_lib/colabs/scenic_playground.ipynb.lock b/.cache/huggingface/download/scenic/common_lib/colabs/scenic_playground.ipynb.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/common_lib/colabs/scenic_playground.ipynb.metadata b/.cache/huggingface/download/scenic/common_lib/colabs/scenic_playground.ipynb.metadata new file mode 100644 index 0000000000000000000000000000000000000000..591cf4032887d684fa051dea8acb580bfbd534f2 --- /dev/null +++ b/.cache/huggingface/download/scenic/common_lib/colabs/scenic_playground.ipynb.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572246.598639 diff --git a/.cache/huggingface/download/scenic/common_lib/common_utils.py.lock b/.cache/huggingface/download/scenic/common_lib/common_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/common_lib/common_utils.py.metadata b/.cache/huggingface/download/scenic/common_lib/common_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..163dcf1f2ddd1d5bd3a37c4a55a3a59a6a0c34f7 --- /dev/null +++ b/.cache/huggingface/download/scenic/common_lib/common_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +bdc002dc1ec7667f636a871840ede66ae90c091e +1766572247.4306188 diff --git a/.cache/huggingface/download/scenic/common_lib/debug_utils.py.lock b/.cache/huggingface/download/scenic/common_lib/debug_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/common_lib/debug_utils.py.metadata b/.cache/huggingface/download/scenic/common_lib/debug_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4c263986f6ca8566c93b36b44031f1fcfd83b7de --- /dev/null +++ b/.cache/huggingface/download/scenic/common_lib/debug_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +1ef66f2dbba03166fe324c0bcbae9083e0cd4612 +1766572247.749859 diff --git a/.cache/huggingface/download/scenic/common_lib/export_utils.py.lock b/.cache/huggingface/download/scenic/common_lib/export_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/common_lib/export_utils.py.metadata b/.cache/huggingface/download/scenic/common_lib/export_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..79fda1843b8887f0aa4e02dc6dcbbfe81d0ff91a --- /dev/null +++ b/.cache/huggingface/download/scenic/common_lib/export_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +8dd6d87064c701ae7f553aed2ecbfbd2f4f22db2 +1766572247.7520707 diff --git a/.cache/huggingface/download/scenic/common_lib/image_utils.py.lock b/.cache/huggingface/download/scenic/common_lib/image_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/common_lib/image_utils.py.metadata b/.cache/huggingface/download/scenic/common_lib/image_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..bd2e466bd81929ad66f1ad5ba2c9eeaa92a2f2d2 --- /dev/null +++ b/.cache/huggingface/download/scenic/common_lib/image_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +be4866d52a16a79393b5b84f2431301eb770d083 +1766572247.4228349 diff --git a/.cache/huggingface/download/scenic/common_lib/tests/__init__.py.lock b/.cache/huggingface/download/scenic/common_lib/tests/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/common_lib/tests/__init__.py.metadata b/.cache/huggingface/download/scenic/common_lib/tests/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f4c6705f4dbac2bacd7cb2dd80d2693bdef0a2ca --- /dev/null +++ b/.cache/huggingface/download/scenic/common_lib/tests/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572246.9689522 diff --git a/.cache/huggingface/download/scenic/common_lib/tests/test_common_utils.py.lock b/.cache/huggingface/download/scenic/common_lib/tests/test_common_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/common_lib/tests/test_common_utils.py.metadata b/.cache/huggingface/download/scenic/common_lib/tests/test_common_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..46489c41f7835e4e71edc38aa3321a7c4e61f24c --- /dev/null +++ b/.cache/huggingface/download/scenic/common_lib/tests/test_common_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572247.128336 diff --git a/.cache/huggingface/download/scenic/common_lib/tests/test_debug_utils.py.lock b/.cache/huggingface/download/scenic/common_lib/tests/test_debug_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/common_lib/tests/test_debug_utils.py.metadata b/.cache/huggingface/download/scenic/common_lib/tests/test_debug_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4459306dec977db66d4f0d61108e616577368217 --- /dev/null +++ b/.cache/huggingface/download/scenic/common_lib/tests/test_debug_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572247.3689935 diff --git a/.cache/huggingface/download/scenic/common_lib/tests/test_image_utils.py.lock b/.cache/huggingface/download/scenic/common_lib/tests/test_image_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/common_lib/tests/test_image_utils.py.metadata b/.cache/huggingface/download/scenic/common_lib/tests/test_image_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..feee33871359deefa221746be0c294b72a5b1930 --- /dev/null +++ b/.cache/huggingface/download/scenic/common_lib/tests/test_image_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572247.220364 diff --git a/.cache/huggingface/download/scenic/common_lib/tests/test_video_utils.py.lock b/.cache/huggingface/download/scenic/common_lib/tests/test_video_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/common_lib/tests/test_video_utils.py.metadata b/.cache/huggingface/download/scenic/common_lib/tests/test_video_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2477ba7906ef15dbe4cc6de4cb78af32e5883ce8 --- /dev/null +++ b/.cache/huggingface/download/scenic/common_lib/tests/test_video_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572247.6207223 diff --git a/.cache/huggingface/download/scenic/common_lib/video_utils.py.lock b/.cache/huggingface/download/scenic/common_lib/video_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/common_lib/video_utils.py.metadata b/.cache/huggingface/download/scenic/common_lib/video_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ebefbf85510d2cea91ff97b24f4acc7207031cda --- /dev/null +++ b/.cache/huggingface/download/scenic/common_lib/video_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +5f705bb70e27e6edca0e6d933a308d61d9e29558 +1766572248.5369518 diff --git a/.cache/huggingface/download/scenic/dataset_lib/__init__.py.lock b/.cache/huggingface/download/scenic/dataset_lib/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/__init__.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..09e542546e5645bfb245fabb2ac13a7078942e0d --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572247.8738973 diff --git a/.cache/huggingface/download/scenic/dataset_lib/__pycache__/__init__.cpython-310.pyc.lock b/.cache/huggingface/download/scenic/dataset_lib/__pycache__/__init__.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/__pycache__/__init__.cpython-310.pyc.metadata b/.cache/huggingface/download/scenic/dataset_lib/__pycache__/__init__.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b2348c86e0311c0b97fd1355c5f24f2b0ddbb96e --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/__pycache__/__init__.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572248.0834563 diff --git a/.cache/huggingface/download/scenic/dataset_lib/__pycache__/dataset_utils.cpython-310.pyc.lock b/.cache/huggingface/download/scenic/dataset_lib/__pycache__/dataset_utils.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/__pycache__/dataset_utils.cpython-310.pyc.metadata b/.cache/huggingface/download/scenic/dataset_lib/__pycache__/dataset_utils.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ff9222e67ce5312736ee65055a5b70748d0433b8 --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/__pycache__/dataset_utils.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572248.0770168 diff --git a/.cache/huggingface/download/scenic/dataset_lib/__pycache__/datasets.cpython-310.pyc.lock b/.cache/huggingface/download/scenic/dataset_lib/__pycache__/datasets.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/__pycache__/datasets.cpython-310.pyc.metadata b/.cache/huggingface/download/scenic/dataset_lib/__pycache__/datasets.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b562d2d97c01e18535c70dc4dfa5a77f170bd31f --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/__pycache__/datasets.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572248.0769012 diff --git a/.cache/huggingface/download/scenic/dataset_lib/bair_dataset.py.lock b/.cache/huggingface/download/scenic/dataset_lib/bair_dataset.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/bair_dataset.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/bair_dataset.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b0d9a18257a312c5bfc34fac803ce855cc900686 --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/bair_dataset.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +ee4fc08d7440317a83656adcc7332348dbbb079c +1766572249.3695674 diff --git a/.cache/huggingface/download/scenic/dataset_lib/big_transfer/README.md.lock b/.cache/huggingface/download/scenic/dataset_lib/big_transfer/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/big_transfer/README.md.metadata b/.cache/huggingface/download/scenic/dataset_lib/big_transfer/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b5c0506404f97acf850cd6c8e275e52d7dc872a0 --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/big_transfer/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572248.3854592 diff --git a/.cache/huggingface/download/scenic/dataset_lib/big_transfer/__init__.py.lock b/.cache/huggingface/download/scenic/dataset_lib/big_transfer/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/big_transfer/__init__.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/big_transfer/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..314e4120e02f05287d85703b7b8f9cd44fa46b62 --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/big_transfer/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572248.3860343 diff --git a/.cache/huggingface/download/scenic/dataset_lib/big_transfer/bit.py.lock b/.cache/huggingface/download/scenic/dataset_lib/big_transfer/bit.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/big_transfer/bit.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/big_transfer/bit.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..125ace5f2f8dc060860cccb731ca888aeacebc1e --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/big_transfer/bit.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572248.457801 diff --git a/.cache/huggingface/download/scenic/dataset_lib/big_transfer/builder.py.lock b/.cache/huggingface/download/scenic/dataset_lib/big_transfer/builder.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/big_transfer/builder.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/big_transfer/builder.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..1f0781bac94d812227c29ac88d6730a2a17931f0 --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/big_transfer/builder.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572248.7622838 diff --git a/.cache/huggingface/download/scenic/dataset_lib/big_transfer/registry.py.lock b/.cache/huggingface/download/scenic/dataset_lib/big_transfer/registry.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/big_transfer/registry.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/big_transfer/registry.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d22048159f0df2885a285fc167865287cc662056 --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/big_transfer/registry.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572248.683913 diff --git a/.cache/huggingface/download/scenic/dataset_lib/cifar10_dataset.py.lock b/.cache/huggingface/download/scenic/dataset_lib/cifar10_dataset.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/cifar10_dataset.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/cifar10_dataset.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a1dbcfd67705a75fa2f7e76e8c21759874f7f845 --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/cifar10_dataset.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +d592b33b6e33e328a59d22011c8b151f01741ff1 +1766572249.3687124 diff --git a/.cache/huggingface/download/scenic/dataset_lib/cityscapes_dataset.py.lock b/.cache/huggingface/download/scenic/dataset_lib/cityscapes_dataset.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/cityscapes_dataset.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/cityscapes_dataset.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..3f002bd5544e7a62a6ad86bda7a169fb26afbd45 --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/cityscapes_dataset.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +a945db0850fc81f0d0730aff092494b75f2a996f +1766572250.1402655 diff --git a/.cache/huggingface/download/scenic/dataset_lib/coco_dataset/__init__.py.lock b/.cache/huggingface/download/scenic/dataset_lib/coco_dataset/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/coco_dataset/__init__.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/coco_dataset/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..60f0e513b8ea62bf4f43049f0d12d7cfa3c9fc2a --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/coco_dataset/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572249.3542771 diff --git a/.cache/huggingface/download/scenic/dataset_lib/coco_dataset/coco_eval.py.lock b/.cache/huggingface/download/scenic/dataset_lib/coco_dataset/coco_eval.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/coco_dataset/coco_eval.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/coco_dataset/coco_eval.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f7161070842eb9171092a003e57f95d4aed5ec6a --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/coco_dataset/coco_eval.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572249.0514321 diff --git a/.cache/huggingface/download/scenic/dataset_lib/coco_dataset/coco_utils.py.lock b/.cache/huggingface/download/scenic/dataset_lib/coco_dataset/coco_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/coco_dataset/coco_utils.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/coco_dataset/coco_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..29559cfb048b8b7f63c5dacd712354c1d95e240c --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/coco_dataset/coco_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572249.1234808 diff --git a/.cache/huggingface/download/scenic/dataset_lib/dataset_utils.py.lock b/.cache/huggingface/download/scenic/dataset_lib/dataset_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/dataset_utils.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/dataset_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ca9bd5069271673bbb9a9fa52f0ecbdcac314598 --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/dataset_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +14d94b2ce547deaa1a254de67ddb4a49d901f59c +1766572250.4829006 diff --git a/.cache/huggingface/download/scenic/dataset_lib/datasets.py.lock b/.cache/huggingface/download/scenic/dataset_lib/datasets.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/datasets.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/datasets.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f7e55e2ee5a995de55ac5000635f055463cdc02c --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/datasets.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +1882935bfb6d30957990f092ae4916c1889781fc +1766572250.0691948 diff --git a/.cache/huggingface/download/scenic/dataset_lib/fashion_mnist_dataset.py.lock b/.cache/huggingface/download/scenic/dataset_lib/fashion_mnist_dataset.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/fashion_mnist_dataset.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/fashion_mnist_dataset.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0cd255653435211695c581e864560df10ad658c5 --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/fashion_mnist_dataset.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +04bce164ba27fbf61f7f9637ee39b9c9521bad44 +1766572250.2728622 diff --git a/.cache/huggingface/download/scenic/dataset_lib/flexio/README.md.lock b/.cache/huggingface/download/scenic/dataset_lib/flexio/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/flexio/README.md.metadata b/.cache/huggingface/download/scenic/dataset_lib/flexio/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..6bf54788f20453fe9d5718d99bc96308b9282187 --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/flexio/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572249.8105276 diff --git a/.cache/huggingface/download/scenic/dataset_lib/flexio/flexio.py.lock b/.cache/huggingface/download/scenic/dataset_lib/flexio/flexio.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/flexio/flexio.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/flexio/flexio.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0f2f5828db8374e06cb5d4177dd88d4b0e62ba2a --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/flexio/flexio.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572250.3050315 diff --git a/.cache/huggingface/download/scenic/dataset_lib/imagenet_dataset.py.lock b/.cache/huggingface/download/scenic/dataset_lib/imagenet_dataset.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/imagenet_dataset.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/imagenet_dataset.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..49041d67a670a626771b04c0e2e546cafe23dcb7 --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/imagenet_dataset.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +bb76a459008914d20cf32a74bd5c3a1bd3eb78e1 +1766572250.7752256 diff --git a/.cache/huggingface/download/scenic/dataset_lib/mnist_dataset.py.lock b/.cache/huggingface/download/scenic/dataset_lib/mnist_dataset.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/mnist_dataset.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/mnist_dataset.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ba66c4f6fe69a318ea9ecfed198fe8b3dc9d6813 --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/mnist_dataset.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +c7362dd76796dab122a4d4fc0561ba4840b1e35f +1766572250.8388436 diff --git a/.cache/huggingface/download/scenic/dataset_lib/oxford_pets_dataset.py.lock b/.cache/huggingface/download/scenic/dataset_lib/oxford_pets_dataset.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/oxford_pets_dataset.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/oxford_pets_dataset.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d20bd7c4c1f22c0ae6aa91ca552f66035b235fc2 --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/oxford_pets_dataset.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e688ee2e57a6104c7adb2eec75ded481493a2386 +1766572250.9410481 diff --git a/.cache/huggingface/download/scenic/dataset_lib/svhn_dataset.py.lock b/.cache/huggingface/download/scenic/dataset_lib/svhn_dataset.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/svhn_dataset.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/svhn_dataset.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ac2cd639083c483ed6cfd898d2723d9e34d19b77 --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/svhn_dataset.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +3ea2e192d8c63fc2792ca260e8ef53d336127903 +1766572251.5759866 diff --git a/.cache/huggingface/download/scenic/dataset_lib/tests/__init__.py.lock b/.cache/huggingface/download/scenic/dataset_lib/tests/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/tests/__init__.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/tests/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..1b7d1867ab1bf6678002fe2a950b1c9d4899024b --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/tests/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572250.735476 diff --git a/.cache/huggingface/download/scenic/dataset_lib/tests/test_dataset_utils.py.lock b/.cache/huggingface/download/scenic/dataset_lib/tests/test_dataset_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/tests/test_dataset_utils.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/tests/test_dataset_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..c280d92eb947624081809a326adbc78686d4e2eb --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/tests/test_dataset_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572250.950624 diff --git a/.cache/huggingface/download/scenic/dataset_lib/video_ops.py.lock b/.cache/huggingface/download/scenic/dataset_lib/video_ops.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/dataset_lib/video_ops.py.metadata b/.cache/huggingface/download/scenic/dataset_lib/video_ops.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..06587ade4e7843c1be8ce4e912a3d0ce66625c16 --- /dev/null +++ b/.cache/huggingface/download/scenic/dataset_lib/video_ops.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +80683adcdb2a2bd0e227c9f1b95a61d8a50dce85 +1766572251.7325237 diff --git a/.cache/huggingface/download/scenic/main.py.lock b/.cache/huggingface/download/scenic/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/main.py.metadata b/.cache/huggingface/download/scenic/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..7f54ada08ab16237cdeec50ef1c518b4305eb835 --- /dev/null +++ b/.cache/huggingface/download/scenic/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +3f459e6c29331035755b7092fdbf195a84b96370 +1766572252.3304274 diff --git a/.cache/huggingface/download/scenic/model_lib/README.md.lock b/.cache/huggingface/download/scenic/model_lib/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/README.md.metadata b/.cache/huggingface/download/scenic/model_lib/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..afee398372b40846f53c6e9d687e45895190c4e4 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +ee79cd4d80610a3442897671d9f1a33b8d476594 +1766572252.2439666 diff --git a/.cache/huggingface/download/scenic/model_lib/__init__.py.lock b/.cache/huggingface/download/scenic/model_lib/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/__init__.py.metadata b/.cache/huggingface/download/scenic/model_lib/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..c6fde6734c5c9a8380705af4ae66a0ccaf608104 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572251.4816194 diff --git a/.cache/huggingface/download/scenic/model_lib/__pycache__/__init__.cpython-310.pyc.lock b/.cache/huggingface/download/scenic/model_lib/__pycache__/__init__.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/__pycache__/__init__.cpython-310.pyc.metadata b/.cache/huggingface/download/scenic/model_lib/__pycache__/__init__.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b27d972c00c7d497eaeacf2a4bd0b8f183f3e0f4 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/__pycache__/__init__.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572251.4375198 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/__init__.py.lock b/.cache/huggingface/download/scenic/model_lib/base_models/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/__init__.py.metadata b/.cache/huggingface/download/scenic/model_lib/base_models/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4254d631064981bfe351bbe9aa3be94567e26fea --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/base_models/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572251.5589156 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/base_model.py.lock b/.cache/huggingface/download/scenic/model_lib/base_models/base_model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/base_model.py.metadata b/.cache/huggingface/download/scenic/model_lib/base_models/base_model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f808230ef996d77aac53648f3cb1fce07fd1c03b --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/base_models/base_model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572251.832548 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/box_utils.py.lock b/.cache/huggingface/download/scenic/model_lib/base_models/box_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/box_utils.py.metadata b/.cache/huggingface/download/scenic/model_lib/base_models/box_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..3329e302506ad6a954ac9067b98cc921602c3bd1 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/base_models/box_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572252.4398148 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/classification_model.py.lock b/.cache/huggingface/download/scenic/model_lib/base_models/classification_model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/classification_model.py.metadata b/.cache/huggingface/download/scenic/model_lib/base_models/classification_model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..cb5fa0dc6c1ef06696a351f10fc5395ec3779edb --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/base_models/classification_model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572252.5674894 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/encoder_decoder_model.py.lock b/.cache/huggingface/download/scenic/model_lib/base_models/encoder_decoder_model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/encoder_decoder_model.py.metadata b/.cache/huggingface/download/scenic/model_lib/base_models/encoder_decoder_model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..64c3a4050cc473730c0d412b1672c2ec706ab351 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/base_models/encoder_decoder_model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572252.1499147 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/model_utils.py.lock b/.cache/huggingface/download/scenic/model_lib/base_models/model_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/model_utils.py.metadata b/.cache/huggingface/download/scenic/model_lib/base_models/model_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9322176d437ef4656ce4ddc91ddb9c2ec2297cc9 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/base_models/model_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572252.2363677 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/multilabel_classification_model.py.lock b/.cache/huggingface/download/scenic/model_lib/base_models/multilabel_classification_model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/multilabel_classification_model.py.metadata b/.cache/huggingface/download/scenic/model_lib/base_models/multilabel_classification_model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..88af8d3b0c88ee6bacbc6ada320809fd15f441a1 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/base_models/multilabel_classification_model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572252.3183718 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/regression_model.py.lock b/.cache/huggingface/download/scenic/model_lib/base_models/regression_model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/regression_model.py.metadata b/.cache/huggingface/download/scenic/model_lib/base_models/regression_model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..791bf1d16d3e43c153631bbdd7434c1c5cfbef25 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/base_models/regression_model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572252.423938 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/segmentation_model.py.lock b/.cache/huggingface/download/scenic/model_lib/base_models/segmentation_model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/base_models/segmentation_model.py.metadata b/.cache/huggingface/download/scenic/model_lib/base_models/segmentation_model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..7571a90aa91a4341e2407319f25e095021021c12 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/base_models/segmentation_model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572253.2731252 diff --git a/.cache/huggingface/download/scenic/model_lib/layers/__init__.py.lock b/.cache/huggingface/download/scenic/model_lib/layers/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/layers/__init__.py.metadata b/.cache/huggingface/download/scenic/model_lib/layers/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..7038a98beeb608573ea325af8f79fae99b6153ad --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/layers/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572252.8700147 diff --git a/.cache/huggingface/download/scenic/model_lib/layers/attention_layers.py.lock b/.cache/huggingface/download/scenic/model_lib/layers/attention_layers.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/layers/attention_layers.py.metadata b/.cache/huggingface/download/scenic/model_lib/layers/attention_layers.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9c382aca79016e519254fa706abb74f4b8c7ff62 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/layers/attention_layers.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572252.838404 diff --git a/.cache/huggingface/download/scenic/model_lib/layers/masked_layers.py.lock b/.cache/huggingface/download/scenic/model_lib/layers/masked_layers.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/layers/masked_layers.py.metadata b/.cache/huggingface/download/scenic/model_lib/layers/masked_layers.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..66e2c6c7bce182f0f821a2daa24b176f62bc7111 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/layers/masked_layers.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572253.2629504 diff --git a/.cache/huggingface/download/scenic/model_lib/layers/nn_layers.py.lock b/.cache/huggingface/download/scenic/model_lib/layers/nn_layers.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/layers/nn_layers.py.metadata b/.cache/huggingface/download/scenic/model_lib/layers/nn_layers.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..436ba930bcfcb7c831145a3aff5ffb99b503b29e --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/layers/nn_layers.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572253.0187287 diff --git a/.cache/huggingface/download/scenic/model_lib/layers/nn_ops.py.lock b/.cache/huggingface/download/scenic/model_lib/layers/nn_ops.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/layers/nn_ops.py.metadata b/.cache/huggingface/download/scenic/model_lib/layers/nn_ops.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..90a0b1fbc76b7e371dabcc8e9801cad27748e9b2 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/layers/nn_ops.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572253.037847 diff --git a/.cache/huggingface/download/scenic/model_lib/matchers/__init__.py.lock b/.cache/huggingface/download/scenic/model_lib/matchers/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/matchers/__init__.py.metadata b/.cache/huggingface/download/scenic/model_lib/matchers/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..97580ff2e17e3b65b8ecb2869f6f3e8b5dcf5091 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/matchers/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572253.3873572 diff --git a/.cache/huggingface/download/scenic/model_lib/matchers/common.py.lock b/.cache/huggingface/download/scenic/model_lib/matchers/common.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/matchers/common.py.metadata b/.cache/huggingface/download/scenic/model_lib/matchers/common.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..12cc16b64c0e5bd072c10776348d3ea690deb3ce --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/matchers/common.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572253.2809608 diff --git a/.cache/huggingface/download/scenic/model_lib/matchers/greedy.py.lock b/.cache/huggingface/download/scenic/model_lib/matchers/greedy.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/matchers/greedy.py.metadata b/.cache/huggingface/download/scenic/model_lib/matchers/greedy.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2e45f033378faf0fc291c4bc21d06ac2e0787d5a --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/matchers/greedy.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572253.7579806 diff --git a/.cache/huggingface/download/scenic/model_lib/matchers/hungarian.py.lock b/.cache/huggingface/download/scenic/model_lib/matchers/hungarian.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/matchers/hungarian.py.metadata b/.cache/huggingface/download/scenic/model_lib/matchers/hungarian.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d11f1fe3d556318d448e742182a69ee7257a748a --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/matchers/hungarian.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572253.5506802 diff --git a/.cache/huggingface/download/scenic/model_lib/matchers/hungarian_cover.py.lock b/.cache/huggingface/download/scenic/model_lib/matchers/hungarian_cover.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/matchers/hungarian_cover.py.metadata b/.cache/huggingface/download/scenic/model_lib/matchers/hungarian_cover.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a2f66fe528eccdecf82968fced4943559e32feac --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/matchers/hungarian_cover.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572253.8526883 diff --git a/.cache/huggingface/download/scenic/model_lib/matchers/hungarian_jax.py.lock b/.cache/huggingface/download/scenic/model_lib/matchers/hungarian_jax.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/matchers/hungarian_jax.py.metadata b/.cache/huggingface/download/scenic/model_lib/matchers/hungarian_jax.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..aac281968be9505fc0e173d361eab10327746637 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/matchers/hungarian_jax.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572253.985155 diff --git a/.cache/huggingface/download/scenic/model_lib/matchers/lazy.py.lock b/.cache/huggingface/download/scenic/model_lib/matchers/lazy.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/matchers/lazy.py.metadata b/.cache/huggingface/download/scenic/model_lib/matchers/lazy.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..6114aeab38a6bca82d2bbdb2759db07dfd363c8f --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/matchers/lazy.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572253.864447 diff --git a/.cache/huggingface/download/scenic/model_lib/matchers/sinkhorn.py.lock b/.cache/huggingface/download/scenic/model_lib/matchers/sinkhorn.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/matchers/sinkhorn.py.metadata b/.cache/huggingface/download/scenic/model_lib/matchers/sinkhorn.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2322ccc912118db94e7e6c806bd4e09810a918c2 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/matchers/sinkhorn.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572253.8950515 diff --git a/.cache/huggingface/download/scenic/model_lib/models.py.lock b/.cache/huggingface/download/scenic/model_lib/models.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/models.py.metadata b/.cache/huggingface/download/scenic/model_lib/models.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..010b403828dbb67c99889ff0729c3c5ba437a3d2 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/models.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +1e8e31176e75d890924a61bb3c3d53059784dd17 +1766572254.647331 diff --git a/.cache/huggingface/download/scenic/model_lib/tests/__init__.py.lock b/.cache/huggingface/download/scenic/model_lib/tests/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/tests/__init__.py.metadata b/.cache/huggingface/download/scenic/model_lib/tests/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..1c135fd862180f23a95c3629937b984654ccb3a4 --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/tests/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572254.0065207 diff --git a/.cache/huggingface/download/scenic/model_lib/tests/test_models.py.lock b/.cache/huggingface/download/scenic/model_lib/tests/test_models.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/model_lib/tests/test_models.py.metadata b/.cache/huggingface/download/scenic/model_lib/tests/test_models.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..19934c9888dd5a439f8fc4006d37f217fc93745a --- /dev/null +++ b/.cache/huggingface/download/scenic/model_lib/tests/test_models.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572254.217113 diff --git a/.cache/huggingface/download/scenic/projects/README.md.lock b/.cache/huggingface/download/scenic/projects/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/README.md.metadata b/.cache/huggingface/download/scenic/projects/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..446cc2fcb3438be5842b91b6b62634f5eb1b3e1a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +d5e06c0f2f0a654b7c83d8f43e54d31227831bbf +1766572254.8576052 diff --git a/.cache/huggingface/download/scenic/projects/__init__.py.lock b/.cache/huggingface/download/scenic/projects/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..7f90ef2e871ebd76a2ce379921e690ac996811ca --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572255.3132343 diff --git a/.cache/huggingface/download/scenic/projects/__pycache__/__init__.cpython-310.pyc.lock b/.cache/huggingface/download/scenic/projects/__pycache__/__init__.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/__pycache__/__init__.cpython-310.pyc.metadata b/.cache/huggingface/download/scenic/projects/__pycache__/__init__.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a913ace740e4007c40c6e034f8b3622ccd4713b8 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/__pycache__/__init__.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572254.5354722 diff --git a/.cache/huggingface/download/scenic/projects/adatape/README.md.lock b/.cache/huggingface/download/scenic/projects/adatape/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/adatape/README.md.metadata b/.cache/huggingface/download/scenic/projects/adatape/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..38eeda76a42bf2691c04a945eb475536854e3fd8 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/adatape/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572254.5562406 diff --git a/.cache/huggingface/download/scenic/projects/adatape/__init__.py.lock b/.cache/huggingface/download/scenic/projects/adatape/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/adatape/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/adatape/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..45fa092e211ff3f20d40613137a0797fe4b1c652 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/adatape/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572254.6087217 diff --git a/.cache/huggingface/download/scenic/projects/adatape/layers.py.lock b/.cache/huggingface/download/scenic/projects/adatape/layers.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/adatape/layers.py.metadata b/.cache/huggingface/download/scenic/projects/adatape/layers.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..599bb54379a658a766bdf2747aae730c49b45d32 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/adatape/layers.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572254.9517417 diff --git a/.cache/huggingface/download/scenic/projects/adatape/main.py.lock b/.cache/huggingface/download/scenic/projects/adatape/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/adatape/main.py.metadata b/.cache/huggingface/download/scenic/projects/adatape/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e8a8eb0970b44498dd366269a3ca29ca6e78c9d0 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/adatape/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572254.8523638 diff --git a/.cache/huggingface/download/scenic/projects/adversarialtraining/README.md.lock b/.cache/huggingface/download/scenic/projects/adversarialtraining/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/adversarialtraining/README.md.metadata b/.cache/huggingface/download/scenic/projects/adversarialtraining/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..1f114d55bc02e5788e46e96ecdc0293e4dc46ee2 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/adversarialtraining/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572255.1697457 diff --git a/.cache/huggingface/download/scenic/projects/adversarialtraining/classification_adversarialtraining_trainer.py.lock b/.cache/huggingface/download/scenic/projects/adversarialtraining/classification_adversarialtraining_trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/adversarialtraining/classification_adversarialtraining_trainer.py.metadata b/.cache/huggingface/download/scenic/projects/adversarialtraining/classification_adversarialtraining_trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..3dc47347539350a5e09acc3c7b4203d1b994e881 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/adversarialtraining/classification_adversarialtraining_trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572255.1777005 diff --git a/.cache/huggingface/download/scenic/projects/adversarialtraining/main.py.lock b/.cache/huggingface/download/scenic/projects/adversarialtraining/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/adversarialtraining/main.py.metadata b/.cache/huggingface/download/scenic/projects/adversarialtraining/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f96e92471e2b76ac1f67aa4f9be540b6f24512ad --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/adversarialtraining/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572255.2076085 diff --git a/.cache/huggingface/download/scenic/projects/adversarialtraining/train_utils.py.lock b/.cache/huggingface/download/scenic/projects/adversarialtraining/train_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/adversarialtraining/train_utils.py.metadata b/.cache/huggingface/download/scenic/projects/adversarialtraining/train_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e32b8d15a3a2dbe5af64577e3a99adb3c117c369 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/adversarialtraining/train_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572255.2982774 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/README.md.lock b/.cache/huggingface/download/scenic/projects/av_mae/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/README.md.metadata b/.cache/huggingface/download/scenic/projects/av_mae/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..5e270d4654084ef8100a05bbd95ab6b56adddefd --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/av_mae/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572255.45992 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/base_model.py.lock b/.cache/huggingface/download/scenic/projects/av_mae/base_model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/base_model.py.metadata b/.cache/huggingface/download/scenic/projects/av_mae/base_model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..6afe422f4a43398a744e8a1ffd7e333face4eb09 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/av_mae/base_model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572255.4850526 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/evaluation_lib.py.lock b/.cache/huggingface/download/scenic/projects/av_mae/evaluation_lib.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/evaluation_lib.py.metadata b/.cache/huggingface/download/scenic/projects/av_mae/evaluation_lib.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e4e393f572db7f4bd838d39b674a03e8173d93fc --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/av_mae/evaluation_lib.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572255.6907218 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/main.py.lock b/.cache/huggingface/download/scenic/projects/av_mae/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/main.py.metadata b/.cache/huggingface/download/scenic/projects/av_mae/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e7a28397ce2e9896506ace9f26a119879bccd533 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/av_mae/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572255.90582 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/mbt.py.lock b/.cache/huggingface/download/scenic/projects/av_mae/mbt.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/mbt.py.metadata b/.cache/huggingface/download/scenic/projects/av_mae/mbt.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..15dda01815c19473766b93d5330829aee5e7efa9 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/av_mae/mbt.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572255.8047216 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/model_utils.py.lock b/.cache/huggingface/download/scenic/projects/av_mae/model_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/model_utils.py.metadata b/.cache/huggingface/download/scenic/projects/av_mae/model_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..02f0fb4d3c5b78a4b32719fabd5316319c53598d --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/av_mae/model_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572255.7965806 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/optimizer_utils.py.lock b/.cache/huggingface/download/scenic/projects/av_mae/optimizer_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/optimizer_utils.py.metadata b/.cache/huggingface/download/scenic/projects/av_mae/optimizer_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0bc3c57759a5a5e54c5cd8a4d9c30a028db70c42 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/av_mae/optimizer_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572255.9351995 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/registry.py.lock b/.cache/huggingface/download/scenic/projects/av_mae/registry.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/registry.py.metadata b/.cache/huggingface/download/scenic/projects/av_mae/registry.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..09747fac4db1128d7619567c7de397151add98eb --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/av_mae/registry.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572256.355283 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/train_utils.py.lock b/.cache/huggingface/download/scenic/projects/av_mae/train_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/train_utils.py.metadata b/.cache/huggingface/download/scenic/projects/av_mae/train_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b245a2da342f5df95f6a814c36fde4c4ca9dfcfd --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/av_mae/train_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572256.0364661 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/trainer.py.lock b/.cache/huggingface/download/scenic/projects/av_mae/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/av_mae/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e70dad91f002026b8549746852c688ecedff2c74 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/av_mae/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572256.1103797 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/trainer_multimodal.py.lock b/.cache/huggingface/download/scenic/projects/av_mae/trainer_multimodal.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/trainer_multimodal.py.metadata b/.cache/huggingface/download/scenic/projects/av_mae/trainer_multimodal.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..30b2a5c0b9353d597e082030f0b597f7b9c113f2 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/av_mae/trainer_multimodal.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572256.3785844 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/transfer_trainer.py.lock b/.cache/huggingface/download/scenic/projects/av_mae/transfer_trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/transfer_trainer.py.metadata b/.cache/huggingface/download/scenic/projects/av_mae/transfer_trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8c906fe57057a9ffab7f630a23a8fe9ca3d71268 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/av_mae/transfer_trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572256.6078022 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/transfer_trainer_multimodal.py.lock b/.cache/huggingface/download/scenic/projects/av_mae/transfer_trainer_multimodal.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/transfer_trainer_multimodal.py.metadata b/.cache/huggingface/download/scenic/projects/av_mae/transfer_trainer_multimodal.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..00dfef59864e8b93522d5c688cbe702572e0f317 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/av_mae/transfer_trainer_multimodal.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572256.7536216 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/vit.py.lock b/.cache/huggingface/download/scenic/projects/av_mae/vit.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/vit.py.metadata b/.cache/huggingface/download/scenic/projects/av_mae/vit.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..60000591b518f3852a4e38303ebb0fe3ba68aa69 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/av_mae/vit.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572256.5785074 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/vivit.py.lock b/.cache/huggingface/download/scenic/projects/av_mae/vivit.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/vivit.py.metadata b/.cache/huggingface/download/scenic/projects/av_mae/vivit.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d6001eca339a3361d3389467503079c10bf9a364 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/av_mae/vivit.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572256.6007113 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/vivit_multimodal.py.lock b/.cache/huggingface/download/scenic/projects/av_mae/vivit_multimodal.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/av_mae/vivit_multimodal.py.metadata b/.cache/huggingface/download/scenic/projects/av_mae/vivit_multimodal.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8786c64ac4a573e108894fa5c395aea7a71e82d7 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/av_mae/vivit_multimodal.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572257.0175982 diff --git a/.cache/huggingface/download/scenic/projects/avatar/README.md.lock b/.cache/huggingface/download/scenic/projects/avatar/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/avatar/README.md.metadata b/.cache/huggingface/download/scenic/projects/avatar/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8d18924a4a7556a7358c5d5da3de8c34af0fbfd3 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/avatar/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572257.0689251 diff --git a/.cache/huggingface/download/scenic/projects/avatar/architecture_avatar.png.lock b/.cache/huggingface/download/scenic/projects/avatar/architecture_avatar.png.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/avatar/architecture_avatar.png.metadata b/.cache/huggingface/download/scenic/projects/avatar/architecture_avatar.png.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8838b1835a9be38c18a640398df2611f1b715ded --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/avatar/architecture_avatar.png.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572257.0910268 diff --git a/.cache/huggingface/download/scenic/projects/avatar/decode.py.lock b/.cache/huggingface/download/scenic/projects/avatar/decode.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/avatar/decode.py.metadata b/.cache/huggingface/download/scenic/projects/avatar/decode.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..090d9d37d3fb6e78a1656dea25cc5050822491b0 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/avatar/decode.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572257.3682957 diff --git a/.cache/huggingface/download/scenic/projects/avatar/generation_trainer.py.lock b/.cache/huggingface/download/scenic/projects/avatar/generation_trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/avatar/generation_trainer.py.metadata b/.cache/huggingface/download/scenic/projects/avatar/generation_trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..3de925109401fffe8e730e809e15022b57868e83 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/avatar/generation_trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572257.2046719 diff --git a/.cache/huggingface/download/scenic/projects/avatar/main.py.lock b/.cache/huggingface/download/scenic/projects/avatar/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/avatar/main.py.metadata b/.cache/huggingface/download/scenic/projects/avatar/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f1e0b7989090e6a8ae734dc70eb7d268e38a09ca --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/avatar/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572257.6315277 diff --git a/.cache/huggingface/download/scenic/projects/avatar/metrics_utils.py.lock b/.cache/huggingface/download/scenic/projects/avatar/metrics_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/avatar/metrics_utils.py.metadata b/.cache/huggingface/download/scenic/projects/avatar/metrics_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..3caa76831dfd68ba9888352f6c9381a0614294d4 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/avatar/metrics_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572257.2213724 diff --git a/.cache/huggingface/download/scenic/projects/avatar/model_utils.py.lock b/.cache/huggingface/download/scenic/projects/avatar/model_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/avatar/model_utils.py.metadata b/.cache/huggingface/download/scenic/projects/avatar/model_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b69ab088c3656d36adbd2525d343f150cf627ebe --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/avatar/model_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572257.494926 diff --git a/.cache/huggingface/download/scenic/projects/avatar/models.py.lock b/.cache/huggingface/download/scenic/projects/avatar/models.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/avatar/models.py.metadata b/.cache/huggingface/download/scenic/projects/avatar/models.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..956dfdcd65d7ce3bdf61867b004d01af76a756c5 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/avatar/models.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572257.6172283 diff --git a/.cache/huggingface/download/scenic/projects/baselines/README.md.lock b/.cache/huggingface/download/scenic/projects/baselines/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/baselines/README.md.metadata b/.cache/huggingface/download/scenic/projects/baselines/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e911621cbf3caa29eafbd34ad2bc6ab6856488b7 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/baselines/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572257.6873307 diff --git a/.cache/huggingface/download/scenic/projects/baselines/__init__.py.lock b/.cache/huggingface/download/scenic/projects/baselines/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/baselines/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/baselines/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..728b28f104e9ac5377e0b26e61013af4cabdb4e2 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/baselines/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572257.8122203 diff --git a/.cache/huggingface/download/scenic/projects/baselines/axial_resnet.py.lock b/.cache/huggingface/download/scenic/projects/baselines/axial_resnet.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/baselines/axial_resnet.py.metadata b/.cache/huggingface/download/scenic/projects/baselines/axial_resnet.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d9fff3ff8033c30784166d8d208e248a61a586aa --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/baselines/axial_resnet.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572257.8529766 diff --git a/.cache/huggingface/download/scenic/projects/baselines/bit_resnet.py.lock b/.cache/huggingface/download/scenic/projects/baselines/bit_resnet.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/baselines/bit_resnet.py.metadata b/.cache/huggingface/download/scenic/projects/baselines/bit_resnet.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0920536a3d9ca8e229c8cbbd1aca25e51dc21b0d --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/baselines/bit_resnet.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572257.8267548 diff --git a/.cache/huggingface/download/scenic/projects/baselines/fully_connected.py.lock b/.cache/huggingface/download/scenic/projects/baselines/fully_connected.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/baselines/fully_connected.py.metadata b/.cache/huggingface/download/scenic/projects/baselines/fully_connected.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4e033fe4052d0b9c21d2d0e9c4034b7c4304bd6a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/baselines/fully_connected.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572258.3664398 diff --git a/.cache/huggingface/download/scenic/projects/baselines/hybrid_vit.py.lock b/.cache/huggingface/download/scenic/projects/baselines/hybrid_vit.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/baselines/hybrid_vit.py.metadata b/.cache/huggingface/download/scenic/projects/baselines/hybrid_vit.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4417b0a5078ad3b5e2a4fe795f0c2c0deca321e4 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/baselines/hybrid_vit.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572258.097403 diff --git a/.cache/huggingface/download/scenic/projects/baselines/mixer.py.lock b/.cache/huggingface/download/scenic/projects/baselines/mixer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/baselines/mixer.py.metadata b/.cache/huggingface/download/scenic/projects/baselines/mixer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..5818337c656f92fe3ddc8bcb60a14f1174591af4 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/baselines/mixer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572258.2194462 diff --git a/.cache/huggingface/download/scenic/projects/baselines/resnet.py.lock b/.cache/huggingface/download/scenic/projects/baselines/resnet.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/baselines/resnet.py.metadata b/.cache/huggingface/download/scenic/projects/baselines/resnet.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a141ccdbfeee6ae9fee7330e1ac67bc49d5fd291 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/baselines/resnet.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572258.811707 diff --git a/.cache/huggingface/download/scenic/projects/baselines/simple_cnn.py.lock b/.cache/huggingface/download/scenic/projects/baselines/simple_cnn.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/baselines/simple_cnn.py.metadata b/.cache/huggingface/download/scenic/projects/baselines/simple_cnn.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..12f148281ad269d96d00d64dc93a390f85174fa9 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/baselines/simple_cnn.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572258.6696994 diff --git a/.cache/huggingface/download/scenic/projects/baselines/unet.py.lock b/.cache/huggingface/download/scenic/projects/baselines/unet.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/baselines/unet.py.metadata b/.cache/huggingface/download/scenic/projects/baselines/unet.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a6e50c499ecc1d2405c0c46c7350f33a498efb0f --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/baselines/unet.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572258.5573285 diff --git a/.cache/huggingface/download/scenic/projects/baselines/vit.py.lock b/.cache/huggingface/download/scenic/projects/baselines/vit.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/baselines/vit.py.metadata b/.cache/huggingface/download/scenic/projects/baselines/vit.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..48ff66905c741ffd383ef0f6ec92376bb1760b26 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/baselines/vit.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572258.4810078 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/README.md.lock b/.cache/huggingface/download/scenic/projects/boundary_attention/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/README.md.metadata b/.cache/huggingface/download/scenic/projects/boundary_attention/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..633d18fe9a3fa42da6fd14652c3b7cbed75d42b7 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/boundary_attention/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572258.5015368 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/__init__.py.lock b/.cache/huggingface/download/scenic/projects/boundary_attention/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/boundary_attention/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..15aaf2bf5cbcb1c641c243ce154f107e6d3f498b --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/boundary_attention/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572258.7324297 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/eval_main.py.lock b/.cache/huggingface/download/scenic/projects/boundary_attention/eval_main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/eval_main.py.metadata b/.cache/huggingface/download/scenic/projects/boundary_attention/eval_main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a651d58e7a4f1756917f4836150041fa176e7c28 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/boundary_attention/eval_main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572258.8275318 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/eval_manager.py.lock b/.cache/huggingface/download/scenic/projects/boundary_attention/eval_manager.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/eval_manager.py.metadata b/.cache/huggingface/download/scenic/projects/boundary_attention/eval_manager.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2ccd6fba0889c2dbc034bddc8e2a323b71e08607 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/boundary_attention/eval_manager.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572258.9766712 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/main.py.lock b/.cache/huggingface/download/scenic/projects/boundary_attention/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/main.py.metadata b/.cache/huggingface/download/scenic/projects/boundary_attention/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..123044c7e5b1f87fab5de92e9ffbaca257528508 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/boundary_attention/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572259.2264378 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/noisy_flower.png.lock b/.cache/huggingface/download/scenic/projects/boundary_attention/noisy_flower.png.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/noisy_flower.png.metadata b/.cache/huggingface/download/scenic/projects/boundary_attention/noisy_flower.png.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4fd9790b5e8b1222c6d525b787c33e712eae3560 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/boundary_attention/noisy_flower.png.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572259.1354702 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/requirements.txt.lock b/.cache/huggingface/download/scenic/projects/boundary_attention/requirements.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/requirements.txt.metadata b/.cache/huggingface/download/scenic/projects/boundary_attention/requirements.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..3c164b07fb8145149156d2942e291d13578e6412 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/boundary_attention/requirements.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572259.2365172 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/rm.png.lock b/.cache/huggingface/download/scenic/projects/boundary_attention/rm.png.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/rm.png.metadata b/.cache/huggingface/download/scenic/projects/boundary_attention/rm.png.metadata new file mode 100644 index 0000000000000000000000000000000000000000..fb3361f5c45dac6110d7fadc09edfdc708f206c3 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/boundary_attention/rm.png.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572259.2703266 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/train_utils.py.lock b/.cache/huggingface/download/scenic/projects/boundary_attention/train_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/train_utils.py.metadata b/.cache/huggingface/download/scenic/projects/boundary_attention/train_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..3c225153919ccd4a0960b824cc5fb40b3464590a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/boundary_attention/train_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572259.3066921 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/trainer.py.lock b/.cache/huggingface/download/scenic/projects/boundary_attention/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/boundary_attention/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2f7fe65494b772f4b5693001cab00e795ba83f7e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/boundary_attention/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572259.4953275 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/types.py.lock b/.cache/huggingface/download/scenic/projects/boundary_attention/types.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/boundary_attention/types.py.metadata b/.cache/huggingface/download/scenic/projects/boundary_attention/types.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..82f60ac740d9f175d09f9f3f41009b5f061b86f6 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/boundary_attention/types.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572259.4274058 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/README.md.lock b/.cache/huggingface/download/scenic/projects/densevoc/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/README.md.metadata b/.cache/huggingface/download/scenic/projects/densevoc/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..abb4d4ff0cd04c3bb4ba7f844298df7cfa2aaf20 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/densevoc/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572259.606564 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/__init__.py.lock b/.cache/huggingface/download/scenic/projects/densevoc/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/densevoc/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..57e4a872a21f9614a726fdb99eebe91591d7c7af --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/densevoc/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572259.7824013 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/chota.py.lock b/.cache/huggingface/download/scenic/projects/densevoc/chota.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/chota.py.metadata b/.cache/huggingface/download/scenic/projects/densevoc/chota.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..66be4c105ab3328ae4784f65106bc98162f0972b --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/densevoc/chota.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572260.0006917 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/densevoc_evaluator.py.lock b/.cache/huggingface/download/scenic/projects/densevoc/densevoc_evaluator.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/densevoc_evaluator.py.metadata b/.cache/huggingface/download/scenic/projects/densevoc/densevoc_evaluator.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..870b4ca3ac8ce25bc41c2d068431bba0bbb708ac --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/densevoc/densevoc_evaluator.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572260.2496998 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/densevoc_framework.png.lock b/.cache/huggingface/download/scenic/projects/densevoc/densevoc_framework.png.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/densevoc_framework.png.metadata b/.cache/huggingface/download/scenic/projects/densevoc/densevoc_framework.png.metadata new file mode 100644 index 0000000000000000000000000000000000000000..42f00d9c04c3966ab8111924e8e8783c26d8ce26 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/densevoc/densevoc_framework.png.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572260.2440376 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/densevoc_teaser.png.lock b/.cache/huggingface/download/scenic/projects/densevoc/densevoc_teaser.png.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/densevoc_teaser.png.metadata b/.cache/huggingface/download/scenic/projects/densevoc/densevoc_teaser.png.metadata new file mode 100644 index 0000000000000000000000000000000000000000..6514c1c1667f6b304ca220146d56d063acb00c56 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/densevoc/densevoc_teaser.png.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572260.3570397 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/evaluate.py.lock b/.cache/huggingface/download/scenic/projects/densevoc/evaluate.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/evaluate.py.metadata b/.cache/huggingface/download/scenic/projects/densevoc/evaluate.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b1502d0409d3b35a7b9217733d6caf57f38c7f1c --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/densevoc/evaluate.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572260.1129775 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/evaluation_utils.py.lock b/.cache/huggingface/download/scenic/projects/densevoc/evaluation_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/evaluation_utils.py.metadata b/.cache/huggingface/download/scenic/projects/densevoc/evaluation_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..7ebd0473b7172335495105c606f2039a9c8c1b68 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/densevoc/evaluation_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572260.1528027 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/input_pipeline.py.lock b/.cache/huggingface/download/scenic/projects/densevoc/input_pipeline.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/input_pipeline.py.metadata b/.cache/huggingface/download/scenic/projects/densevoc/input_pipeline.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d2274ef9862d26daa1594a99d9907a125b71fdc5 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/densevoc/input_pipeline.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572260.2493753 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/input_utils.py.lock b/.cache/huggingface/download/scenic/projects/densevoc/input_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/input_utils.py.metadata b/.cache/huggingface/download/scenic/projects/densevoc/input_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e351090117dbba1f98b0ad3a45f4324e2037467e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/densevoc/input_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572260.8239021 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/main.py.lock b/.cache/huggingface/download/scenic/projects/densevoc/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/main.py.metadata b/.cache/huggingface/download/scenic/projects/densevoc/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..879c71d8d66f9619d1e3aa59211e0aab568eba11 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/densevoc/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572260.6363988 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/requirements.txt.lock b/.cache/huggingface/download/scenic/projects/densevoc/requirements.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/requirements.txt.metadata b/.cache/huggingface/download/scenic/projects/densevoc/requirements.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..bc2ec267a01c2a16ad3e31fed553c4c6f9d6701c --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/densevoc/requirements.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572260.738459 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/trainer.py.lock b/.cache/huggingface/download/scenic/projects/densevoc/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/densevoc/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..6f5d62058b764c592e3d40011145b31ad9a24520 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/densevoc/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572261.2427368 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/transforms.py.lock b/.cache/huggingface/download/scenic/projects/densevoc/transforms.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/transforms.py.metadata b/.cache/huggingface/download/scenic/projects/densevoc/transforms.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d40142e896edc97ec471a52fd7d80728e6d1332a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/densevoc/transforms.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572261.6002276 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/vidstg_evaluator.py.lock b/.cache/huggingface/download/scenic/projects/densevoc/vidstg_evaluator.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/densevoc/vidstg_evaluator.py.metadata b/.cache/huggingface/download/scenic/projects/densevoc/vidstg_evaluator.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d2ab58d7c8dd6faf31fc9a3b62c9debf2ea8dfab --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/densevoc/vidstg_evaluator.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572261.3955417 diff --git a/.cache/huggingface/download/scenic/projects/fast_vit/README.md.lock b/.cache/huggingface/download/scenic/projects/fast_vit/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/fast_vit/README.md.metadata b/.cache/huggingface/download/scenic/projects/fast_vit/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f3d2d01a178d40cea6cff83aeb7dd0cd0e3e6ea0 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/fast_vit/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572260.872045 diff --git a/.cache/huggingface/download/scenic/projects/fast_vit/__init__.py.lock b/.cache/huggingface/download/scenic/projects/fast_vit/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/fast_vit/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/fast_vit/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..72de59ac033188b580cb1948efa90555d39bc397 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/fast_vit/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572260.951826 diff --git a/.cache/huggingface/download/scenic/projects/fast_vit/main.py.lock b/.cache/huggingface/download/scenic/projects/fast_vit/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/fast_vit/main.py.metadata b/.cache/huggingface/download/scenic/projects/fast_vit/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..75db3c4da84ddd7d37060ae66af7fbadd6aaa55b --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/fast_vit/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572261.2686777 diff --git a/.cache/huggingface/download/scenic/projects/fast_vit/model_utils.py.lock b/.cache/huggingface/download/scenic/projects/fast_vit/model_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/fast_vit/model_utils.py.metadata b/.cache/huggingface/download/scenic/projects/fast_vit/model_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..3fb612e8ef865aefe671aa3758a3073debbd7c49 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/fast_vit/model_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572261.3066301 diff --git a/.cache/huggingface/download/scenic/projects/fast_vit/xvit.py.lock b/.cache/huggingface/download/scenic/projects/fast_vit/xvit.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/fast_vit/xvit.py.metadata b/.cache/huggingface/download/scenic/projects/fast_vit/xvit.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..c961a7436259e01f017ceddd889b578b65377f56 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/fast_vit/xvit.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572261.8174877 diff --git a/.cache/huggingface/download/scenic/projects/gerald/README.md.lock b/.cache/huggingface/download/scenic/projects/gerald/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/gerald/README.md.metadata b/.cache/huggingface/download/scenic/projects/gerald/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..5e3b2a7352739e6c1c7edc6831d0e2ec3c4aff8d --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/gerald/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572261.8851843 diff --git a/.cache/huggingface/download/scenic/projects/gerald/__init__.py.lock b/.cache/huggingface/download/scenic/projects/gerald/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/gerald/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/gerald/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a87363b3db804cb9fbc0b62be8b85d3b779d8e9e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/gerald/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572261.5742838 diff --git a/.cache/huggingface/download/scenic/projects/gerald/ger_eval.py.lock b/.cache/huggingface/download/scenic/projects/gerald/ger_eval.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/gerald/ger_eval.py.metadata b/.cache/huggingface/download/scenic/projects/gerald/ger_eval.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..1987d164c3923891f59aeff20cd147ef6ad18fc2 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/gerald/ger_eval.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572262.0313756 diff --git a/.cache/huggingface/download/scenic/projects/gerald/ger_trainer.py.lock b/.cache/huggingface/download/scenic/projects/gerald/ger_trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/gerald/ger_trainer.py.metadata b/.cache/huggingface/download/scenic/projects/gerald/ger_trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..bd838bae31b0975ea83eb41769d0d91180e8cbeb --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/gerald/ger_trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572261.9057481 diff --git a/.cache/huggingface/download/scenic/projects/gerald/gerald_method.png.lock b/.cache/huggingface/download/scenic/projects/gerald/gerald_method.png.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/gerald/gerald_method.png.metadata b/.cache/huggingface/download/scenic/projects/gerald/gerald_method.png.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9c276ea1290e214ed4f7c24642a08de0da79a95f --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/gerald/gerald_method.png.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572261.916876 diff --git a/.cache/huggingface/download/scenic/projects/gerald/input_pipeline.py.lock b/.cache/huggingface/download/scenic/projects/gerald/input_pipeline.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/gerald/input_pipeline.py.metadata b/.cache/huggingface/download/scenic/projects/gerald/input_pipeline.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..266d5594bef7e7c27a16e789b1f495aa9cb469a9 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/gerald/input_pipeline.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572262.3521328 diff --git a/.cache/huggingface/download/scenic/projects/gerald/main.py.lock b/.cache/huggingface/download/scenic/projects/gerald/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/gerald/main.py.metadata b/.cache/huggingface/download/scenic/projects/gerald/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..c11df1d4c868014ac23571375e61f3db8a0a24f7 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/gerald/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572262.5053918 diff --git a/.cache/huggingface/download/scenic/projects/gerald/prepare_ald_codes.py.lock b/.cache/huggingface/download/scenic/projects/gerald/prepare_ald_codes.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/gerald/prepare_ald_codes.py.metadata b/.cache/huggingface/download/scenic/projects/gerald/prepare_ald_codes.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f79a9d2ad9976d895da9f5ff5d2562938deafe01 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/gerald/prepare_ald_codes.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572263.0930324 diff --git a/.cache/huggingface/download/scenic/projects/gerald/utils.py.lock b/.cache/huggingface/download/scenic/projects/gerald/utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/gerald/utils.py.metadata b/.cache/huggingface/download/scenic/projects/gerald/utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..20b8512257dd78a3363ba6b3375e6233d61447ad --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/gerald/utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572262.5188706 diff --git a/.cache/huggingface/download/scenic/projects/knowledge_visual_language/README.md.lock b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/knowledge_visual_language/README.md.metadata b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..65e6dd84c7bc943dd93d23633cfd64d3bfa42fa0 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572262.6386049 diff --git a/.cache/huggingface/download/scenic/projects/knowledge_visual_language/__init__.py.lock b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/knowledge_visual_language/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0e066af291ea99d3e1a489731083529e99d25971 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572262.5188007 diff --git a/.cache/huggingface/download/scenic/projects/knowledge_visual_language/main.py.lock b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/knowledge_visual_language/main.py.metadata b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ff6d7c02c9af09177e96fb45912fa33c20f0036a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572262.6092465 diff --git a/.cache/huggingface/download/scenic/projects/knowledge_visual_language/trainer.py.lock b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/knowledge_visual_language/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..749abcc5d8dc7ef1b545e409215f2972efb74cd1 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572262.7646055 diff --git a/.cache/huggingface/download/scenic/projects/knowledge_visual_language/trainer_memory.py.lock b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/trainer_memory.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/knowledge_visual_language/trainer_memory.py.metadata b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/trainer_memory.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0d78c7b74f4bfa51811988ef4a3865cba186fbda --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/trainer_memory.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572262.9554412 diff --git a/.cache/huggingface/download/scenic/projects/knowledge_visual_language/trainer_utils.py.lock b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/trainer_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/knowledge_visual_language/trainer_utils.py.metadata b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/trainer_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8a1b35c65fd14f9308a5ab4908da02e7afbef84d --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/knowledge_visual_language/trainer_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572263.093168 diff --git a/.cache/huggingface/download/scenic/projects/lang4video/__init__.py.lock b/.cache/huggingface/download/scenic/projects/lang4video/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/lang4video/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/lang4video/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..27a256c08c456ed4a5d87f0ecbece2054220fcdd --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/lang4video/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572263.674583 diff --git a/.cache/huggingface/download/scenic/projects/layout_denoise/README.md.lock b/.cache/huggingface/download/scenic/projects/layout_denoise/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/layout_denoise/README.md.metadata b/.cache/huggingface/download/scenic/projects/layout_denoise/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..64318c6f90d3f0178aa5391f116946cd1f5173ad --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/layout_denoise/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572263.1520486 diff --git a/.cache/huggingface/download/scenic/projects/layout_denoise/__init__.py.lock b/.cache/huggingface/download/scenic/projects/layout_denoise/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/layout_denoise/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/layout_denoise/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..03cd70dd876770fcadd57f50797bb3c82680adb7 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/layout_denoise/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572263.1863952 diff --git a/.cache/huggingface/download/scenic/projects/layout_denoise/base_model.py.lock b/.cache/huggingface/download/scenic/projects/layout_denoise/base_model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/layout_denoise/base_model.py.metadata b/.cache/huggingface/download/scenic/projects/layout_denoise/base_model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..467d7e57f577d79799986f8994d311d8e0581b25 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/layout_denoise/base_model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572263.3214169 diff --git a/.cache/huggingface/download/scenic/projects/layout_denoise/main.py.lock b/.cache/huggingface/download/scenic/projects/layout_denoise/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/layout_denoise/main.py.metadata b/.cache/huggingface/download/scenic/projects/layout_denoise/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ee11891f4f915301ba33b63935f55c5c84f45d76 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/layout_denoise/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572263.9464262 diff --git a/.cache/huggingface/download/scenic/projects/layout_denoise/model.py.lock b/.cache/huggingface/download/scenic/projects/layout_denoise/model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/layout_denoise/model.py.metadata b/.cache/huggingface/download/scenic/projects/layout_denoise/model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..06349cae25fa168c5ce105e5e96e047932c3852e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/layout_denoise/model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572264.0767574 diff --git a/.cache/huggingface/download/scenic/projects/layout_denoise/train_utils.py.lock b/.cache/huggingface/download/scenic/projects/layout_denoise/train_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/layout_denoise/train_utils.py.metadata b/.cache/huggingface/download/scenic/projects/layout_denoise/train_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..dd0602beb632af3e19af16b9bb69556b61d68661 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/layout_denoise/train_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572263.7341151 diff --git a/.cache/huggingface/download/scenic/projects/layout_denoise/trainer.py.lock b/.cache/huggingface/download/scenic/projects/layout_denoise/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/layout_denoise/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/layout_denoise/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..554581b3954404bcc9452c430a2738b32daf591a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/layout_denoise/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572263.7479436 diff --git a/.cache/huggingface/download/scenic/projects/loca/README.md.lock b/.cache/huggingface/download/scenic/projects/loca/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/loca/README.md.metadata b/.cache/huggingface/download/scenic/projects/loca/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..14d9c1f340e5175228e5c060196fc81fad0c26a2 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/loca/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572264.1920419 diff --git a/.cache/huggingface/download/scenic/projects/loca/__init__.py.lock b/.cache/huggingface/download/scenic/projects/loca/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/loca/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/loca/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..7769f61fdce925486ccf702932ad0190e474868e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/loca/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572264.2885907 diff --git a/.cache/huggingface/download/scenic/projects/loca/loca.png.lock b/.cache/huggingface/download/scenic/projects/loca/loca.png.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/loca/loca.png.metadata b/.cache/huggingface/download/scenic/projects/loca/loca.png.metadata new file mode 100644 index 0000000000000000000000000000000000000000..7fa48939e0eda994fc6c5d7a8a75f5315d4c9abf --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/loca/loca.png.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572264.4212148 diff --git a/.cache/huggingface/download/scenic/projects/loca/loca_dataset.py.lock b/.cache/huggingface/download/scenic/projects/loca/loca_dataset.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/loca/loca_dataset.py.metadata b/.cache/huggingface/download/scenic/projects/loca/loca_dataset.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a8992c08af3ac734b59e53ac4f66eb30e09aeb2d --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/loca/loca_dataset.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572264.293821 diff --git a/.cache/huggingface/download/scenic/projects/loca/main.py.lock b/.cache/huggingface/download/scenic/projects/loca/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/loca/main.py.metadata b/.cache/huggingface/download/scenic/projects/loca/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ab8e47deffcb304af90a258fbdcdf92032f01f54 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/loca/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572264.3308415 diff --git a/.cache/huggingface/download/scenic/projects/loca/ops.py.lock b/.cache/huggingface/download/scenic/projects/loca/ops.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/loca/ops.py.metadata b/.cache/huggingface/download/scenic/projects/loca/ops.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..744e7ac91487b2f9d8d2ef7518aff997e18c52f0 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/loca/ops.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572264.4417431 diff --git a/.cache/huggingface/download/scenic/projects/loca/trainer.py.lock b/.cache/huggingface/download/scenic/projects/loca/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/loca/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/loca/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9e336bf153d148cab8cdb6b55f24f0ff1897789e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/loca/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572265.0422914 diff --git a/.cache/huggingface/download/scenic/projects/loca/utils.py.lock b/.cache/huggingface/download/scenic/projects/loca/utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/loca/utils.py.metadata b/.cache/huggingface/download/scenic/projects/loca/utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e636f6ca9163e8f4db1837392a599fc404df7a9e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/loca/utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572265.184053 diff --git a/.cache/huggingface/download/scenic/projects/loca/vit.py.lock b/.cache/huggingface/download/scenic/projects/loca/vit.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/loca/vit.py.metadata b/.cache/huggingface/download/scenic/projects/loca/vit.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..23688c5aeb911f9d974f3ac996ed2b31782e45f5 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/loca/vit.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572264.87291 diff --git a/.cache/huggingface/download/scenic/projects/matvit/README.md.lock b/.cache/huggingface/download/scenic/projects/matvit/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/matvit/README.md.metadata b/.cache/huggingface/download/scenic/projects/matvit/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..97a8a62876dee247e8de49d62ffcb5d1b13e87f0 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/matvit/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572264.8819122 diff --git a/.cache/huggingface/download/scenic/projects/matvit/__init__.py.lock b/.cache/huggingface/download/scenic/projects/matvit/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/matvit/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/matvit/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e23f45a86b7bf37adddb0488369c5f4ec7a9c92c --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/matvit/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572265.2734215 diff --git a/.cache/huggingface/download/scenic/projects/matvit/classification_eval_main.py.lock b/.cache/huggingface/download/scenic/projects/matvit/classification_eval_main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/matvit/classification_eval_main.py.metadata b/.cache/huggingface/download/scenic/projects/matvit/classification_eval_main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..73d927c83d8ffc8af58bf88baffccd255b8cf380 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/matvit/classification_eval_main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572264.9679384 diff --git a/.cache/huggingface/download/scenic/projects/matvit/layers.py.lock b/.cache/huggingface/download/scenic/projects/matvit/layers.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/matvit/layers.py.metadata b/.cache/huggingface/download/scenic/projects/matvit/layers.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..dfe0809d0a0fb9ea280012193b3342b7b3eff451 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/matvit/layers.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572265.0854685 diff --git a/.cache/huggingface/download/scenic/projects/matvit/main.py.lock b/.cache/huggingface/download/scenic/projects/matvit/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/matvit/main.py.metadata b/.cache/huggingface/download/scenic/projects/matvit/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a3fabd099f3a7a4aa44140bf9881dee0b50b4bf6 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/matvit/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572265.0986528 diff --git a/.cache/huggingface/download/scenic/projects/matvit/matvit.py.lock b/.cache/huggingface/download/scenic/projects/matvit/matvit.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/matvit/matvit.py.metadata b/.cache/huggingface/download/scenic/projects/matvit/matvit.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..722a55b714c54e8e3577be2d7347b54146f099a2 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/matvit/matvit.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572265.5071104 diff --git a/.cache/huggingface/download/scenic/projects/matvit/trainer.py.lock b/.cache/huggingface/download/scenic/projects/matvit/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/matvit/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/matvit/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0ceed63f629f79d6829b753a42d0e583138e83cc --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/matvit/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572265.8674486 diff --git a/.cache/huggingface/download/scenic/projects/mbt/README.md.lock b/.cache/huggingface/download/scenic/projects/mbt/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mbt/README.md.metadata b/.cache/huggingface/download/scenic/projects/mbt/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ef65927517f3ba527d24229f6b36508dd882cc20 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mbt/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572265.8981504 diff --git a/.cache/huggingface/download/scenic/projects/mbt/__init__.py.lock b/.cache/huggingface/download/scenic/projects/mbt/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mbt/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/mbt/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2c6ec721e52d7b3b7c105ac0e429cf70f1ea37e4 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mbt/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572265.788412 diff --git a/.cache/huggingface/download/scenic/projects/mbt/bottlenecks.png.lock b/.cache/huggingface/download/scenic/projects/mbt/bottlenecks.png.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mbt/bottlenecks.png.metadata b/.cache/huggingface/download/scenic/projects/mbt/bottlenecks.png.metadata new file mode 100644 index 0000000000000000000000000000000000000000..32b3b752b8d7fd58cbf38d80f3d020bad2e4a8c7 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mbt/bottlenecks.png.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572266.4889276 diff --git a/.cache/huggingface/download/scenic/projects/mbt/main.py.lock b/.cache/huggingface/download/scenic/projects/mbt/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mbt/main.py.metadata b/.cache/huggingface/download/scenic/projects/mbt/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..42b0661b192485e2dda2ed725cd70536f76fa0fe --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mbt/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572265.7698197 diff --git a/.cache/huggingface/download/scenic/projects/mbt/model.py.lock b/.cache/huggingface/download/scenic/projects/mbt/model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mbt/model.py.metadata b/.cache/huggingface/download/scenic/projects/mbt/model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..cfcead1415bd0cc3ced869ccb8df118549698361 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mbt/model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572265.8165607 diff --git a/.cache/huggingface/download/scenic/projects/mbt/model_utils.py.lock b/.cache/huggingface/download/scenic/projects/mbt/model_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mbt/model_utils.py.metadata b/.cache/huggingface/download/scenic/projects/mbt/model_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..c9244df2daab5a5163fc0bf9c5915c76697ccac4 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mbt/model_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572266.0057256 diff --git a/.cache/huggingface/download/scenic/projects/mbt/requirements.txt.lock b/.cache/huggingface/download/scenic/projects/mbt/requirements.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mbt/requirements.txt.metadata b/.cache/huggingface/download/scenic/projects/mbt/requirements.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2106b32ed6f3aaa1cf9d37c45c92731829a23419 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mbt/requirements.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572266.142434 diff --git a/.cache/huggingface/download/scenic/projects/mbt/train_utils.py.lock b/.cache/huggingface/download/scenic/projects/mbt/train_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mbt/train_utils.py.metadata b/.cache/huggingface/download/scenic/projects/mbt/train_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..69792167c6b2c11984e3be8044a2bbbedfc7e2d9 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mbt/train_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572267.4409003 diff --git a/.cache/huggingface/download/scenic/projects/mbt/trainer.py.lock b/.cache/huggingface/download/scenic/projects/mbt/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mbt/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/mbt/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2d82e203fca8095be4cb0ba8bc6a2784cce4a21b --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mbt/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572266.6265616 diff --git a/.cache/huggingface/download/scenic/projects/mtv/README.md.lock b/.cache/huggingface/download/scenic/projects/mtv/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mtv/README.md.metadata b/.cache/huggingface/download/scenic/projects/mtv/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..aa061613629d7687702f59a14c731e18ebe863cb --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mtv/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572266.431634 diff --git a/.cache/huggingface/download/scenic/projects/mtv/__init__.py.lock b/.cache/huggingface/download/scenic/projects/mtv/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mtv/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/mtv/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..53d268d77d0cc54d28f6bad797ae2f6139eac17f --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mtv/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572266.4914086 diff --git a/.cache/huggingface/download/scenic/projects/mtv/config_utils.py.lock b/.cache/huggingface/download/scenic/projects/mtv/config_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mtv/config_utils.py.metadata b/.cache/huggingface/download/scenic/projects/mtv/config_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ea78ddb5b7e52bf535ae9c549ee5c63a54ab4dbe --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mtv/config_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572266.5634372 diff --git a/.cache/huggingface/download/scenic/projects/mtv/config_utils_test.py.lock b/.cache/huggingface/download/scenic/projects/mtv/config_utils_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mtv/config_utils_test.py.metadata b/.cache/huggingface/download/scenic/projects/mtv/config_utils_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..58d6ed705f56a4772eeb1cfddc633bf2b199c3d5 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mtv/config_utils_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572266.621613 diff --git a/.cache/huggingface/download/scenic/projects/mtv/main.py.lock b/.cache/huggingface/download/scenic/projects/mtv/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mtv/main.py.metadata b/.cache/huggingface/download/scenic/projects/mtv/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4f840ffb8e661660bf67a5ac6db77ce26f1979eb --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mtv/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572266.8847666 diff --git a/.cache/huggingface/download/scenic/projects/mtv/model.py.lock b/.cache/huggingface/download/scenic/projects/mtv/model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mtv/model.py.metadata b/.cache/huggingface/download/scenic/projects/mtv/model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..386b0919ed1654978aceb6ce4451c2adc2171912 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mtv/model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572267.5210345 diff --git a/.cache/huggingface/download/scenic/projects/mtv/model_test.py.lock b/.cache/huggingface/download/scenic/projects/mtv/model_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mtv/model_test.py.metadata b/.cache/huggingface/download/scenic/projects/mtv/model_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..84bc1a573b36f89ff4c3eafe46dba62b2d049621 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mtv/model_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572267.1423078 diff --git a/.cache/huggingface/download/scenic/projects/mtv/model_utils.py.lock b/.cache/huggingface/download/scenic/projects/mtv/model_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mtv/model_utils.py.metadata b/.cache/huggingface/download/scenic/projects/mtv/model_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..7845427133d24665b70056e15ad5026b79fab580 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mtv/model_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572267.1493006 diff --git a/.cache/huggingface/download/scenic/projects/mtv/model_utils_test.py.lock b/.cache/huggingface/download/scenic/projects/mtv/model_utils_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mtv/model_utils_test.py.metadata b/.cache/huggingface/download/scenic/projects/mtv/model_utils_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ed24dc939c9db407755a2ab098f7ca83e22b8d12 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mtv/model_utils_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572267.194377 diff --git a/.cache/huggingface/download/scenic/projects/mtv/mtv.png.lock b/.cache/huggingface/download/scenic/projects/mtv/mtv.png.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mtv/mtv.png.metadata b/.cache/huggingface/download/scenic/projects/mtv/mtv.png.metadata new file mode 100644 index 0000000000000000000000000000000000000000..cb0423272b07ac427e5cd944fd910f2b388b7b75 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mtv/mtv.png.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572267.32108 diff --git a/.cache/huggingface/download/scenic/projects/mtv/requirements.txt.lock b/.cache/huggingface/download/scenic/projects/mtv/requirements.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mtv/requirements.txt.metadata b/.cache/huggingface/download/scenic/projects/mtv/requirements.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..fdfa8d10d995bed96e86b55a1b6df5cc223682bd --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mtv/requirements.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572267.232938 diff --git a/.cache/huggingface/download/scenic/projects/mtv/train_utils.py.lock b/.cache/huggingface/download/scenic/projects/mtv/train_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mtv/train_utils.py.metadata b/.cache/huggingface/download/scenic/projects/mtv/train_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..10c219b1ff07f037c9055f1d82f96a18d7449215 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mtv/train_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572267.972931 diff --git a/.cache/huggingface/download/scenic/projects/mtv/trainer.py.lock b/.cache/huggingface/download/scenic/projects/mtv/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/mtv/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/mtv/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4aa8975b61b1f963450b793f799997286a29451d --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/mtv/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572267.876736 diff --git a/.cache/huggingface/download/scenic/projects/ncr/README.md.lock b/.cache/huggingface/download/scenic/projects/ncr/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/ncr/README.md.metadata b/.cache/huggingface/download/scenic/projects/ncr/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..89a2dca12fef49b661a0a0f20edd401e6a65cbb3 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/ncr/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572267.7778425 diff --git a/.cache/huggingface/download/scenic/projects/ncr/__init__.py.lock b/.cache/huggingface/download/scenic/projects/ncr/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/ncr/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/ncr/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9c43b7e276710cb11e7215bc9dcfd7085e1833f1 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/ncr/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572268.2281063 diff --git a/.cache/huggingface/download/scenic/projects/ncr/base_model.py.lock b/.cache/huggingface/download/scenic/projects/ncr/base_model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/ncr/base_model.py.metadata b/.cache/huggingface/download/scenic/projects/ncr/base_model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..755ba416ac1fe588ddfdd85943200959991a8f86 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/ncr/base_model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572267.8826833 diff --git a/.cache/huggingface/download/scenic/projects/ncr/classification_trainer.py.lock b/.cache/huggingface/download/scenic/projects/ncr/classification_trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/ncr/classification_trainer.py.metadata b/.cache/huggingface/download/scenic/projects/ncr/classification_trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0ca943fa34edfc3bb2d02b155f87210723e3e837 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/ncr/classification_trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572268.0550513 diff --git a/.cache/huggingface/download/scenic/projects/ncr/loss.py.lock b/.cache/huggingface/download/scenic/projects/ncr/loss.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/ncr/loss.py.metadata b/.cache/huggingface/download/scenic/projects/ncr/loss.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2e4be5813f4a82cdfbfe867adcced536e722e858 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/ncr/loss.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572268.7208889 diff --git a/.cache/huggingface/download/scenic/projects/ncr/main.py.lock b/.cache/huggingface/download/scenic/projects/ncr/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/ncr/main.py.metadata b/.cache/huggingface/download/scenic/projects/ncr/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..76e222e8cb7b52c95998884fb04717c07fa27584 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/ncr/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572268.1196153 diff --git a/.cache/huggingface/download/scenic/projects/ncr/requirements.txt.lock b/.cache/huggingface/download/scenic/projects/ncr/requirements.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/ncr/requirements.txt.metadata b/.cache/huggingface/download/scenic/projects/ncr/requirements.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..06253b8df948778ba4b2bd6fe6147744376747dd --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/ncr/requirements.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572268.905443 diff --git a/.cache/huggingface/download/scenic/projects/ncr/resnet.py.lock b/.cache/huggingface/download/scenic/projects/ncr/resnet.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/ncr/resnet.py.metadata b/.cache/huggingface/download/scenic/projects/ncr/resnet.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ec6a973c01ac129f825bfc1cace269a375492133 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/ncr/resnet.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572268.4770403 diff --git a/.cache/huggingface/download/scenic/projects/ncr/utils.py.lock b/.cache/huggingface/download/scenic/projects/ncr/utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/ncr/utils.py.metadata b/.cache/huggingface/download/scenic/projects/ncr/utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ff229984ee42ac0534384e712fc22797c3b33ba6 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/ncr/utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572268.527501 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/DATA.md.lock b/.cache/huggingface/download/scenic/projects/objectvivit/DATA.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/DATA.md.metadata b/.cache/huggingface/download/scenic/projects/objectvivit/DATA.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..5ea7dc85330b61a3347d802679ea03a528570dd8 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/objectvivit/DATA.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572269.152784 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/README.md.lock b/.cache/huggingface/download/scenic/projects/objectvivit/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/README.md.metadata b/.cache/huggingface/download/scenic/projects/objectvivit/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4ab5d6c90eb9968e6549f5ebb32cc7331584e198 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/objectvivit/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572268.7067869 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/__init__.py.lock b/.cache/huggingface/download/scenic/projects/objectvivit/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/objectvivit/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d37f29460d47449e1a3062a62d0c01778def73c8 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/objectvivit/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572268.7666595 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/dataset_utils.py.lock b/.cache/huggingface/download/scenic/projects/objectvivit/dataset_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/dataset_utils.py.metadata b/.cache/huggingface/download/scenic/projects/objectvivit/dataset_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0819bdf374f9820c7de011e11150b5ddfa0774bf --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/objectvivit/dataset_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572268.8095539 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/datasets.py.lock b/.cache/huggingface/download/scenic/projects/objectvivit/datasets.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/datasets.py.metadata b/.cache/huggingface/download/scenic/projects/objectvivit/datasets.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..dacbbd1d228fc0c123f3b1e1021211afacfc6707 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/objectvivit/datasets.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572269.4403613 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/main.py.lock b/.cache/huggingface/download/scenic/projects/objectvivit/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/main.py.metadata b/.cache/huggingface/download/scenic/projects/objectvivit/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..bd1847f62c6747b6f7e0ecd39e615431bc4697fb --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/objectvivit/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572269.1350627 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/model.py.lock b/.cache/huggingface/download/scenic/projects/objectvivit/model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/model.py.metadata b/.cache/huggingface/download/scenic/projects/objectvivit/model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ae025a0f026fba1518e895ad4060f6925e84ab20 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/objectvivit/model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572269.3722775 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/model_utils.py.lock b/.cache/huggingface/download/scenic/projects/objectvivit/model_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/model_utils.py.metadata b/.cache/huggingface/download/scenic/projects/objectvivit/model_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ca9eba39a2a5001b6be1546b83d9cc744c5e67cf --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/objectvivit/model_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572269.8656425 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/object_attention.py.lock b/.cache/huggingface/download/scenic/projects/objectvivit/object_attention.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/object_attention.py.metadata b/.cache/huggingface/download/scenic/projects/objectvivit/object_attention.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d051c5ed8b9da8829f33d2ff470af4525c30b1b0 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/objectvivit/object_attention.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572269.3890138 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/optimizer_utils.py.lock b/.cache/huggingface/download/scenic/projects/objectvivit/optimizer_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/optimizer_utils.py.metadata b/.cache/huggingface/download/scenic/projects/objectvivit/optimizer_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..c1e0c49a55eea5072aeb147188d67e4194b2b540 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/objectvivit/optimizer_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572269.428764 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/requirements.txt.lock b/.cache/huggingface/download/scenic/projects/objectvivit/requirements.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/requirements.txt.metadata b/.cache/huggingface/download/scenic/projects/objectvivit/requirements.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d43f5b8091fb7eb618e1d8bfb7067f46ec6b5c7e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/objectvivit/requirements.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572269.909453 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/train_utils.py.lock b/.cache/huggingface/download/scenic/projects/objectvivit/train_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/train_utils.py.metadata b/.cache/huggingface/download/scenic/projects/objectvivit/train_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0125e3af73104aab2a9ab564a9f7c07dadd39743 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/objectvivit/train_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572269.9594464 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/trainer.py.lock b/.cache/huggingface/download/scenic/projects/objectvivit/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/objectvivit/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/objectvivit/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..91b5718a63e779d07e91024fb33893ae78f579a2 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/objectvivit/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572269.8055675 diff --git a/.cache/huggingface/download/scenic/projects/omninet/__init__.py.lock b/.cache/huggingface/download/scenic/projects/omninet/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/omninet/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/omninet/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..086ecd254a2f619bca07bb989745b7b489c3c5c3 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/omninet/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572270.039464 diff --git a/.cache/huggingface/download/scenic/projects/omninet/main.py.lock b/.cache/huggingface/download/scenic/projects/omninet/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/omninet/main.py.metadata b/.cache/huggingface/download/scenic/projects/omninet/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..6bfd18f3d78df9a597c67df4d7fc626adaa372b9 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/omninet/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572270.3430955 diff --git a/.cache/huggingface/download/scenic/projects/omninet/model.py.lock b/.cache/huggingface/download/scenic/projects/omninet/model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/omninet/model.py.metadata b/.cache/huggingface/download/scenic/projects/omninet/model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b837db26ecf54b134f578ecae86a4168b88e1ff3 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/omninet/model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572270.7182271 diff --git a/.cache/huggingface/download/scenic/projects/omninet/model_utils.py.lock b/.cache/huggingface/download/scenic/projects/omninet/model_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/omninet/model_utils.py.metadata b/.cache/huggingface/download/scenic/projects/omninet/model_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..586538bd2de5b899ee80b735c2dacae92c56751d --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/omninet/model_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572270.0860963 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/README.md.lock b/.cache/huggingface/download/scenic/projects/owl_vit/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/README.md.metadata b/.cache/huggingface/download/scenic/projects/owl_vit/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ff74f19fc387e35ffe8e4a081e9f3e56adaf973e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/owl_vit/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572270.836807 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/__init__.py.lock b/.cache/huggingface/download/scenic/projects/owl_vit/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/owl_vit/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e809a8833a43eaf2c261cb346ea5dfdb5d049d8d --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/owl_vit/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572270.5455723 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/evaluator.py.lock b/.cache/huggingface/download/scenic/projects/owl_vit/evaluator.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/evaluator.py.metadata b/.cache/huggingface/download/scenic/projects/owl_vit/evaluator.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d622587dc60f23f1caa63ce53d35878b68dbf072 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/owl_vit/evaluator.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572270.576352 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/layers.py.lock b/.cache/huggingface/download/scenic/projects/owl_vit/layers.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/layers.py.metadata b/.cache/huggingface/download/scenic/projects/owl_vit/layers.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..eec69016c054596e9dc18eff83fe762138e2127f --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/owl_vit/layers.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572270.5464008 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/losses.py.lock b/.cache/huggingface/download/scenic/projects/owl_vit/losses.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/losses.py.metadata b/.cache/huggingface/download/scenic/projects/owl_vit/losses.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..dba23cae1e53e9104bfabbaa643669e05b4fd8f5 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/owl_vit/losses.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572270.6260333 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/main.py.lock b/.cache/huggingface/download/scenic/projects/owl_vit/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/main.py.metadata b/.cache/huggingface/download/scenic/projects/owl_vit/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e10f1c69f2778544ebedbf6e87a35fde658fb3df --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/owl_vit/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572270.726321 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/matching_base_models.py.lock b/.cache/huggingface/download/scenic/projects/owl_vit/matching_base_models.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/matching_base_models.py.metadata b/.cache/huggingface/download/scenic/projects/owl_vit/matching_base_models.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d492feb13d97bb70849a5d9aa943e4579a2d4ed4 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/owl_vit/matching_base_models.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572271.0099065 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/models.py.lock b/.cache/huggingface/download/scenic/projects/owl_vit/models.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/models.py.metadata b/.cache/huggingface/download/scenic/projects/owl_vit/models.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..de46afbf0c18003e21855901b2cf46db945b56e5 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/owl_vit/models.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572271.2191687 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/requirements.txt.lock b/.cache/huggingface/download/scenic/projects/owl_vit/requirements.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/requirements.txt.metadata b/.cache/huggingface/download/scenic/projects/owl_vit/requirements.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4429d9ff87f6752114fc1f1166d022e199beea04 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/owl_vit/requirements.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572271.1584122 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/trainer.py.lock b/.cache/huggingface/download/scenic/projects/owl_vit/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/owl_vit/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2c7baa8054a0e64f121e6bd01e9c2d1876cd45fa --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/owl_vit/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572271.2384076 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/utils.py.lock b/.cache/huggingface/download/scenic/projects/owl_vit/utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/owl_vit/utils.py.metadata b/.cache/huggingface/download/scenic/projects/owl_vit/utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a079185a3a4d63c3322fe338d41689c3c1e23e2e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/owl_vit/utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572271.7741897 diff --git a/.cache/huggingface/download/scenic/projects/performer/performer.py.lock b/.cache/huggingface/download/scenic/projects/performer/performer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/performer/performer.py.metadata b/.cache/huggingface/download/scenic/projects/performer/performer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..bfcb93120ef44731be72b1eac6f3a0349b905cc0 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/performer/performer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572271.3186488 diff --git a/.cache/huggingface/download/scenic/projects/performer/subquadratic_attention.py.lock b/.cache/huggingface/download/scenic/projects/performer/subquadratic_attention.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/performer/subquadratic_attention.py.metadata b/.cache/huggingface/download/scenic/projects/performer/subquadratic_attention.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..19709ae6c043ecd07c9539a901dc5b4830d6b5b5 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/performer/subquadratic_attention.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572271.3051853 diff --git a/.cache/huggingface/download/scenic/projects/performer/subquadratic_attention_test.py.lock b/.cache/huggingface/download/scenic/projects/performer/subquadratic_attention_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/performer/subquadratic_attention_test.py.metadata b/.cache/huggingface/download/scenic/projects/performer/subquadratic_attention_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..3c3ef9032b29e26a188fb4fc58b5ba3c49ae4205 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/performer/subquadratic_attention_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572271.509852 diff --git a/.cache/huggingface/download/scenic/projects/performer/utils.py.lock b/.cache/huggingface/download/scenic/projects/performer/utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/performer/utils.py.metadata b/.cache/huggingface/download/scenic/projects/performer/utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4a772ef62c364a18021d59de153b6b0f05164412 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/performer/utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572271.7582614 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/README.md.lock b/.cache/huggingface/download/scenic/projects/pixel_llm/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/README.md.metadata b/.cache/huggingface/download/scenic/projects/pixel_llm/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..86c600ea961bfb926fb2aa0da19f4a3534865e4b --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pixel_llm/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572271.919337 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/__init__.py.lock b/.cache/huggingface/download/scenic/projects/pixel_llm/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/pixel_llm/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9094a23203fcb184a6580def503cd0481d74a8fe --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pixel_llm/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572271.8667266 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/auto_regressive_decode.py.lock b/.cache/huggingface/download/scenic/projects/pixel_llm/auto_regressive_decode.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/auto_regressive_decode.py.metadata b/.cache/huggingface/download/scenic/projects/pixel_llm/auto_regressive_decode.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..09e77415bb4956c51865ffea40aba70919986fef --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pixel_llm/auto_regressive_decode.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572272.0295353 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/densecap_evaluator.py.lock b/.cache/huggingface/download/scenic/projects/pixel_llm/densecap_evaluator.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/densecap_evaluator.py.metadata b/.cache/huggingface/download/scenic/projects/pixel_llm/densecap_evaluator.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..cb8ea4268f88d55760dbadb7a59eaec078ec3faf --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pixel_llm/densecap_evaluator.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572271.9048824 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/evaluate.py.lock b/.cache/huggingface/download/scenic/projects/pixel_llm/evaluate.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/evaluate.py.metadata b/.cache/huggingface/download/scenic/projects/pixel_llm/evaluate.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..dee4e0465beff1eb858fd6b608d0ff005422e12e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pixel_llm/evaluate.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572272.3909729 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/evaluators.py.lock b/.cache/huggingface/download/scenic/projects/pixel_llm/evaluators.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/evaluators.py.metadata b/.cache/huggingface/download/scenic/projects/pixel_llm/evaluators.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..1a23c7a94ab79816d479005044552709cf39bcdf --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pixel_llm/evaluators.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572272.1997092 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/main.py.lock b/.cache/huggingface/download/scenic/projects/pixel_llm/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/main.py.metadata b/.cache/huggingface/download/scenic/projects/pixel_llm/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..1dae91eb66bf6f8e121c5bc44f28c558ba1cf1c0 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pixel_llm/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572615.3651452 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/partition_utils.py.lock b/.cache/huggingface/download/scenic/projects/pixel_llm/partition_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/partition_utils.py.metadata b/.cache/huggingface/download/scenic/projects/pixel_llm/partition_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..fc2608d64bc8e77fd9250a11ac705b13bda16031 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pixel_llm/partition_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572272.3546338 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/requirements.txt.lock b/.cache/huggingface/download/scenic/projects/pixel_llm/requirements.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/requirements.txt.metadata b/.cache/huggingface/download/scenic/projects/pixel_llm/requirements.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..718026191c664005258b73d062107bf46eb4186f --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pixel_llm/requirements.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572272.5544283 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/tokenizers.py.lock b/.cache/huggingface/download/scenic/projects/pixel_llm/tokenizers.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/tokenizers.py.metadata b/.cache/huggingface/download/scenic/projects/pixel_llm/tokenizers.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8fedc3507dfe5a4b2759f39ecfcc5731946b26fb --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pixel_llm/tokenizers.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572272.5822985 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/train_utils.py.lock b/.cache/huggingface/download/scenic/projects/pixel_llm/train_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/train_utils.py.metadata b/.cache/huggingface/download/scenic/projects/pixel_llm/train_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d263f1e3f6228ddd7425be8d35ea06e9193a168a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pixel_llm/train_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572272.5198948 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/trainer.py.lock b/.cache/huggingface/download/scenic/projects/pixel_llm/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pixel_llm/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/pixel_llm/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..dafa585e2a6701cc88765a18f6af2e51d32f3e5d --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pixel_llm/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572272.6894033 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/README.md.lock b/.cache/huggingface/download/scenic/projects/pointcloud/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/README.md.metadata b/.cache/huggingface/download/scenic/projects/pointcloud/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0854f9e0c8bbab9cc25c802f4f162d6e445f4ca4 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pointcloud/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572272.8313403 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/__init__.py.lock b/.cache/huggingface/download/scenic/projects/pointcloud/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/pointcloud/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..41c8b0f0d741c315a06d9b11c16749502a644a12 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pointcloud/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572272.9418414 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/main.py.lock b/.cache/huggingface/download/scenic/projects/pointcloud/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/main.py.metadata b/.cache/huggingface/download/scenic/projects/pointcloud/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0e6ddfd62fb81512e0ec742692dec73c551249ec --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pointcloud/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572273.0006208 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/main_s3dis.py.lock b/.cache/huggingface/download/scenic/projects/pointcloud/main_s3dis.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/main_s3dis.py.metadata b/.cache/huggingface/download/scenic/projects/pointcloud/main_s3dis.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a40ce50018231426552b7dace226c5c12243316b --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pointcloud/main_s3dis.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572273.1660473 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/main_seg.py.lock b/.cache/huggingface/download/scenic/projects/pointcloud/main_seg.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/main_seg.py.metadata b/.cache/huggingface/download/scenic/projects/pointcloud/main_seg.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..3d75aa22a03568ffba72154b83c76df2d2bee7ce --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pointcloud/main_seg.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572615.920672 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/models.py.lock b/.cache/huggingface/download/scenic/projects/pointcloud/models.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/models.py.metadata b/.cache/huggingface/download/scenic/projects/pointcloud/models.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4807e77ef0f091930c6439e707ea4afeca1a4261 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pointcloud/models.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572615.6337767 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/models_test.py.lock b/.cache/huggingface/download/scenic/projects/pointcloud/models_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/models_test.py.metadata b/.cache/huggingface/download/scenic/projects/pointcloud/models_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..16f2ae149574ba50de8dd75ea3f824f8cc59de5a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pointcloud/models_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572616.2438216 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/pointcloud_dataset.py.lock b/.cache/huggingface/download/scenic/projects/pointcloud/pointcloud_dataset.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/pointcloud_dataset.py.metadata b/.cache/huggingface/download/scenic/projects/pointcloud/pointcloud_dataset.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a3dc2ca8538e6cd575815ffaded69bc9dffe51b3 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pointcloud/pointcloud_dataset.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572615.6962173 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/s3dis_dataset.py.lock b/.cache/huggingface/download/scenic/projects/pointcloud/s3dis_dataset.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/s3dis_dataset.py.metadata b/.cache/huggingface/download/scenic/projects/pointcloud/s3dis_dataset.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..aa0bcf68f714f23368d7abed1ab22f249354be7b --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pointcloud/s3dis_dataset.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572615.7227592 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/segmentation_model.py.lock b/.cache/huggingface/download/scenic/projects/pointcloud/segmentation_model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/segmentation_model.py.metadata b/.cache/huggingface/download/scenic/projects/pointcloud/segmentation_model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..5caef3308f9df38e5b5bc841e246440d96a9f6dd --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pointcloud/segmentation_model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572615.7249038 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/segmentation_trainer.py.lock b/.cache/huggingface/download/scenic/projects/pointcloud/segmentation_trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/segmentation_trainer.py.metadata b/.cache/huggingface/download/scenic/projects/pointcloud/segmentation_trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f0298b1d93322479e69a47304a18b4c908435e73 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pointcloud/segmentation_trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572615.7334263 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/shapenet_dataset.py.lock b/.cache/huggingface/download/scenic/projects/pointcloud/shapenet_dataset.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/pointcloud/shapenet_dataset.py.metadata b/.cache/huggingface/download/scenic/projects/pointcloud/shapenet_dataset.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..baa106fe769b8090126861fbce9152a3661cd126 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/pointcloud/shapenet_dataset.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572615.9850738 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/README.md.lock b/.cache/huggingface/download/scenic/projects/polyvit/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/README.md.metadata b/.cache/huggingface/download/scenic/projects/polyvit/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e0c4324b36154303a6efcef5629e17eae9f96854 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/polyvit/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572616.2059836 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/__init__.py.lock b/.cache/huggingface/download/scenic/projects/polyvit/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/polyvit/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..90e976a6fad8f7a58b36802109fea11ddeb78946 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/polyvit/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572616.9778688 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/layers.py.lock b/.cache/huggingface/download/scenic/projects/polyvit/layers.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/layers.py.metadata b/.cache/huggingface/download/scenic/projects/polyvit/layers.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e2d658e4ee065b8bfeb0b8583be5b583d19772b2 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/polyvit/layers.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572617.144913 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/main.py.lock b/.cache/huggingface/download/scenic/projects/polyvit/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/main.py.metadata b/.cache/huggingface/download/scenic/projects/polyvit/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a943d12ad36c7c71590649e37d120b63b7ee6be1 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/polyvit/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572616.7627509 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/model.py.lock b/.cache/huggingface/download/scenic/projects/polyvit/model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/model.py.metadata b/.cache/huggingface/download/scenic/projects/polyvit/model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..76bf7489e95c1d70484c840ffaa331e70de88cc2 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/polyvit/model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572616.680161 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/model_utils.py.lock b/.cache/huggingface/download/scenic/projects/polyvit/model_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/model_utils.py.metadata b/.cache/huggingface/download/scenic/projects/polyvit/model_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9acb019448d7e93d76603776a69df91ac8217064 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/polyvit/model_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572616.590064 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/polyvit_base_model.py.lock b/.cache/huggingface/download/scenic/projects/polyvit/polyvit_base_model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/polyvit_base_model.py.metadata b/.cache/huggingface/download/scenic/projects/polyvit/polyvit_base_model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d09360f02b411b705ec2447f7df345c47a8c6cb9 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/polyvit/polyvit_base_model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572616.5760937 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/requirements.txt.lock b/.cache/huggingface/download/scenic/projects/polyvit/requirements.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/requirements.txt.metadata b/.cache/huggingface/download/scenic/projects/polyvit/requirements.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d151cbd79af0f7e7668d08122594cf4e316282d4 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/polyvit/requirements.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572616.8212113 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/train_utils.py.lock b/.cache/huggingface/download/scenic/projects/polyvit/train_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/train_utils.py.metadata b/.cache/huggingface/download/scenic/projects/polyvit/train_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..6106eb56758dc7a230825c288796ef3bfffe719a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/polyvit/train_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572616.8900702 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/trainer.py.lock b/.cache/huggingface/download/scenic/projects/polyvit/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/polyvit/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/polyvit/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..3da82f5de2cd52e443dda516ca9439e5f1c40dcf --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/polyvit/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572617.235395 diff --git a/.cache/huggingface/download/scenic/projects/robust_segvit/README.md.lock b/.cache/huggingface/download/scenic/projects/robust_segvit/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/robust_segvit/README.md.metadata b/.cache/huggingface/download/scenic/projects/robust_segvit/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8600fc2c2bc50a7875bf4f5b9eabc5e51390b7a9 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/robust_segvit/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572617.2100806 diff --git a/.cache/huggingface/download/scenic/projects/robust_segvit/__init__.py.lock b/.cache/huggingface/download/scenic/projects/robust_segvit/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/robust_segvit/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/robust_segvit/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4e481260d8631e5baf0004bf78fbf1f401ba9940 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/robust_segvit/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572617.7338424 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/README.md.lock b/.cache/huggingface/download/scenic/projects/streaming_dvc/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/README.md.metadata b/.cache/huggingface/download/scenic/projects/streaming_dvc/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..15d1dd646ff55061715cb049b51ea567c24d2302 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/streaming_dvc/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572617.3871994 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/__init__.py.lock b/.cache/huggingface/download/scenic/projects/streaming_dvc/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/streaming_dvc/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..55a9c49c3930a0655075140efac28da183028a20 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/streaming_dvc/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572617.4124253 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/caption_evaluator.py.lock b/.cache/huggingface/download/scenic/projects/streaming_dvc/caption_evaluator.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/caption_evaluator.py.metadata b/.cache/huggingface/download/scenic/projects/streaming_dvc/caption_evaluator.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..bf591ffa758cad0b358b182ea20802c86c1e499e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/streaming_dvc/caption_evaluator.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572617.5476205 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/cococap_eval.py.lock b/.cache/huggingface/download/scenic/projects/streaming_dvc/cococap_eval.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/cococap_eval.py.metadata b/.cache/huggingface/download/scenic/projects/streaming_dvc/cococap_eval.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ad6989c1ce3625797c4323eb2263a4d58b575b71 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/streaming_dvc/cococap_eval.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572617.9670305 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/densecap_evaluator.py.lock b/.cache/huggingface/download/scenic/projects/streaming_dvc/densecap_evaluator.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/densecap_evaluator.py.metadata b/.cache/huggingface/download/scenic/projects/streaming_dvc/densecap_evaluator.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..13fdc795efcbf497f79ceb934cee014b8fe8b669 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/streaming_dvc/densecap_evaluator.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572618.1366172 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/evaluate.py.lock b/.cache/huggingface/download/scenic/projects/streaming_dvc/evaluate.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/evaluate.py.metadata b/.cache/huggingface/download/scenic/projects/streaming_dvc/evaluate.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e47eafd44be9820394088c27d3f5e8842548e0a9 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/streaming_dvc/evaluate.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572617.8086703 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/main.py.lock b/.cache/huggingface/download/scenic/projects/streaming_dvc/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/main.py.metadata b/.cache/huggingface/download/scenic/projects/streaming_dvc/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..bea3a66fea9ee60ce2282e0ec8b0c1b8282044f1 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/streaming_dvc/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572618.222293 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/optimizer_utils.py.lock b/.cache/huggingface/download/scenic/projects/streaming_dvc/optimizer_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/optimizer_utils.py.metadata b/.cache/huggingface/download/scenic/projects/streaming_dvc/optimizer_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9bd30194cc0a57c09ce69807ef19ea16e817d514 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/streaming_dvc/optimizer_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572618.057707 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/partition_utils.py.lock b/.cache/huggingface/download/scenic/projects/streaming_dvc/partition_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/partition_utils.py.metadata b/.cache/huggingface/download/scenic/projects/streaming_dvc/partition_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a706fbab2d2e2930449d05ca27304c7e9bb0adf9 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/streaming_dvc/partition_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572618.3407512 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/post_processing_utils.py.lock b/.cache/huggingface/download/scenic/projects/streaming_dvc/post_processing_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/post_processing_utils.py.metadata b/.cache/huggingface/download/scenic/projects/streaming_dvc/post_processing_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e92cc226daf531568127f9414831a34b4986cd11 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/streaming_dvc/post_processing_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572618.6016324 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/requirements.txt.lock b/.cache/huggingface/download/scenic/projects/streaming_dvc/requirements.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/requirements.txt.metadata b/.cache/huggingface/download/scenic/projects/streaming_dvc/requirements.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a8463694cf7833da38bc25d5b51631e6d3548bcd --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/streaming_dvc/requirements.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572618.3320248 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/streaming_dvc_teaser.png.lock b/.cache/huggingface/download/scenic/projects/streaming_dvc/streaming_dvc_teaser.png.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/streaming_dvc_teaser.png.metadata b/.cache/huggingface/download/scenic/projects/streaming_dvc/streaming_dvc_teaser.png.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8c1924d5032ee6a5eecb82aaad25fd478eec865b --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/streaming_dvc/streaming_dvc_teaser.png.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572618.3752027 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/train_utils.py.lock b/.cache/huggingface/download/scenic/projects/streaming_dvc/train_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/train_utils.py.metadata b/.cache/huggingface/download/scenic/projects/streaming_dvc/train_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..76049ef96c22c7aa1ae96b8425c0d31dd6265a2e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/streaming_dvc/train_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572618.59427 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/trainer.py.lock b/.cache/huggingface/download/scenic/projects/streaming_dvc/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/streaming_dvc/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/streaming_dvc/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..acd3afe7f534d49de04aacacbe0b435fe94015f4 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/streaming_dvc/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572619.0469954 diff --git a/.cache/huggingface/download/scenic/projects/svvit/README.md.lock b/.cache/huggingface/download/scenic/projects/svvit/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/svvit/README.md.metadata b/.cache/huggingface/download/scenic/projects/svvit/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b7389f367a9a72566359f009338edd295add6153 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/svvit/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572618.8108802 diff --git a/.cache/huggingface/download/scenic/projects/svvit/__init__.py.lock b/.cache/huggingface/download/scenic/projects/svvit/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/svvit/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/svvit/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b7742b36bae620771471fc0d05e4202fdeaedf5a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/svvit/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572618.8332849 diff --git a/.cache/huggingface/download/scenic/projects/svvit/classification_trainer.py.lock b/.cache/huggingface/download/scenic/projects/svvit/classification_trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/svvit/classification_trainer.py.metadata b/.cache/huggingface/download/scenic/projects/svvit/classification_trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f4c7778f8954ce19b3d3672ae88dea8edde3122f --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/svvit/classification_trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572618.9315267 diff --git a/.cache/huggingface/download/scenic/projects/svvit/inference.py.lock b/.cache/huggingface/download/scenic/projects/svvit/inference.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/svvit/inference.py.metadata b/.cache/huggingface/download/scenic/projects/svvit/inference.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..bd6a03d0e8d0280e9552ca82ada533da5187125b --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/svvit/inference.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572618.9297583 diff --git a/.cache/huggingface/download/scenic/projects/svvit/main.py.lock b/.cache/huggingface/download/scenic/projects/svvit/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/svvit/main.py.metadata b/.cache/huggingface/download/scenic/projects/svvit/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..5b6b770fc1da469aba04268d49756baaceb10f99 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/svvit/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572619.2887285 diff --git a/.cache/huggingface/download/scenic/projects/svvit/metrics.py.lock b/.cache/huggingface/download/scenic/projects/svvit/metrics.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/svvit/metrics.py.metadata b/.cache/huggingface/download/scenic/projects/svvit/metrics.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..32ae02313a9a154d01caa72a179d116fe0c0da7e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/svvit/metrics.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572619.213799 diff --git a/.cache/huggingface/download/scenic/projects/svvit/transfer_trainer.py.lock b/.cache/huggingface/download/scenic/projects/svvit/transfer_trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/svvit/transfer_trainer.py.metadata b/.cache/huggingface/download/scenic/projects/svvit/transfer_trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..6fdd1262cd21c4bff61b4358b7247ebdcaa52ca2 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/svvit/transfer_trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572619.1973832 diff --git a/.cache/huggingface/download/scenic/projects/svvit/vit.py.lock b/.cache/huggingface/download/scenic/projects/svvit/vit.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/svvit/vit.py.metadata b/.cache/huggingface/download/scenic/projects/svvit/vit.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8d91921ae3bf4cfb5a4c522da6d69ddbcbdda734 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/svvit/vit.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572619.9135966 diff --git a/.cache/huggingface/download/scenic/projects/svvit/xvit.py.lock b/.cache/huggingface/download/scenic/projects/svvit/xvit.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/svvit/xvit.py.metadata b/.cache/huggingface/download/scenic/projects/svvit/xvit.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..3c1b602ccccb44f0f9d468f45b4bc3d24a480f9a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/svvit/xvit.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572619.431576 diff --git a/.cache/huggingface/download/scenic/projects/t5/README.md.lock b/.cache/huggingface/download/scenic/projects/t5/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/t5/README.md.metadata b/.cache/huggingface/download/scenic/projects/t5/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f04e379f4aad0ba65cf81528afe41d9914502e8b --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/t5/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572619.553724 diff --git a/.cache/huggingface/download/scenic/projects/t5/__init__.py.lock b/.cache/huggingface/download/scenic/projects/t5/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/t5/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/t5/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..494b0a21801fabe177ea0e81f02bf29aa4bf9c08 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/t5/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572619.8797243 diff --git a/.cache/huggingface/download/scenic/projects/t5/inspect_model.py.lock b/.cache/huggingface/download/scenic/projects/t5/inspect_model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/t5/inspect_model.py.metadata b/.cache/huggingface/download/scenic/projects/t5/inspect_model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9c7d112d8eb045112cd1cf69a1c02061d7f49b2a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/t5/inspect_model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572619.7157993 diff --git a/.cache/huggingface/download/scenic/projects/t5/layers.py.lock b/.cache/huggingface/download/scenic/projects/t5/layers.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/t5/layers.py.metadata b/.cache/huggingface/download/scenic/projects/t5/layers.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d27977ed541baf3c3a7ee54ad1d1a825afd5848e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/t5/layers.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572619.8494592 diff --git a/.cache/huggingface/download/scenic/projects/t5/model.py.lock b/.cache/huggingface/download/scenic/projects/t5/model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/t5/model.py.metadata b/.cache/huggingface/download/scenic/projects/t5/model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..18e33e9b773c3243c3b0b9b1984fb00f0c0c2ca3 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/t5/model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572619.8568811 diff --git a/.cache/huggingface/download/scenic/projects/t5/tokenizer.py.lock b/.cache/huggingface/download/scenic/projects/t5/tokenizer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/t5/tokenizer.py.metadata b/.cache/huggingface/download/scenic/projects/t5/tokenizer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a972917a7c7d9c45428c7f420926ff1e91bc66e9 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/t5/tokenizer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572620.2034976 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/README.md.lock b/.cache/huggingface/download/scenic/projects/tasseo/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/README.md.metadata b/.cache/huggingface/download/scenic/projects/tasseo/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..11269766ac220ad7264d2bc5a8c397a77726dc8f --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/tasseo/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572620.041922 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/classification_trainer.py.lock b/.cache/huggingface/download/scenic/projects/tasseo/classification_trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/classification_trainer.py.metadata b/.cache/huggingface/download/scenic/projects/tasseo/classification_trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2a844c71e22db19cfb336badf9bbe46cf38ab68a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/tasseo/classification_trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572620.1554768 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/dataset_utils.py.lock b/.cache/huggingface/download/scenic/projects/tasseo/dataset_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/dataset_utils.py.metadata b/.cache/huggingface/download/scenic/projects/tasseo/dataset_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..c77ac0e06762aa0ffe3b2b69496243d8ac32a2dd --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/tasseo/dataset_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572620.3984897 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/duplex_vit.py.lock b/.cache/huggingface/download/scenic/projects/tasseo/duplex_vit.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/duplex_vit.py.metadata b/.cache/huggingface/download/scenic/projects/tasseo/duplex_vit.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..19fbe18827754067b30bdfffc439b4c413d30de8 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/tasseo/duplex_vit.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572620.4517474 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/duplex_vit_classification_trainer.py.lock b/.cache/huggingface/download/scenic/projects/tasseo/duplex_vit_classification_trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/duplex_vit_classification_trainer.py.metadata b/.cache/huggingface/download/scenic/projects/tasseo/duplex_vit_classification_trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0918b26225305e6054b12a112700e9b9c04a98b1 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/tasseo/duplex_vit_classification_trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572620.5462887 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/inference.py.lock b/.cache/huggingface/download/scenic/projects/tasseo/inference.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/inference.py.metadata b/.cache/huggingface/download/scenic/projects/tasseo/inference.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e94881604f644fb5395934006bf4ef99022e6365 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/tasseo/inference.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572620.5046623 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/main.py.lock b/.cache/huggingface/download/scenic/projects/tasseo/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/main.py.metadata b/.cache/huggingface/download/scenic/projects/tasseo/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..70f43f8ae4211ef23aed699846b348dcf014458e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/tasseo/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572620.5390837 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/train_utils.py.lock b/.cache/huggingface/download/scenic/projects/tasseo/train_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/train_utils.py.metadata b/.cache/huggingface/download/scenic/projects/tasseo/train_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..570a2f52c4318e398a224977b7a95266646bbe0f --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/tasseo/train_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572620.6380439 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/transfer_trainer.py.lock b/.cache/huggingface/download/scenic/projects/tasseo/transfer_trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/transfer_trainer.py.metadata b/.cache/huggingface/download/scenic/projects/tasseo/transfer_trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..004805b8bdb35f5ed60099449d56569045d9f429 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/tasseo/transfer_trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572620.760869 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/vit.py.lock b/.cache/huggingface/download/scenic/projects/tasseo/vit.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/vit.py.metadata b/.cache/huggingface/download/scenic/projects/tasseo/vit.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4daa6f899a1aa7958c46bad80eb339c8bdd00f44 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/tasseo/vit.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572620.789134 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/xvit.py.lock b/.cache/huggingface/download/scenic/projects/tasseo/xvit.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/tasseo/xvit.py.metadata b/.cache/huggingface/download/scenic/projects/tasseo/xvit.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..dfb846c84ee247d959f3329a84719aa4e00d27dd --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/tasseo/xvit.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572621.0592797 diff --git a/.cache/huggingface/download/scenic/projects/token_learner/README.md.lock b/.cache/huggingface/download/scenic/projects/token_learner/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/token_learner/README.md.metadata b/.cache/huggingface/download/scenic/projects/token_learner/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..36e461767f8e9846c33a460a4655e4980166f13a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/token_learner/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572621.0262756 diff --git a/.cache/huggingface/download/scenic/projects/token_learner/__init__.py.lock b/.cache/huggingface/download/scenic/projects/token_learner/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/token_learner/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/token_learner/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a5b15741d75dcc80a55c6d105fb5559603d80407 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/token_learner/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572621.130252 diff --git a/.cache/huggingface/download/scenic/projects/token_learner/main.py.lock b/.cache/huggingface/download/scenic/projects/token_learner/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/token_learner/main.py.metadata b/.cache/huggingface/download/scenic/projects/token_learner/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2159159c5921278093c1efca3381abffa905ccc4 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/token_learner/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572621.1826131 diff --git a/.cache/huggingface/download/scenic/projects/token_learner/model.py.lock b/.cache/huggingface/download/scenic/projects/token_learner/model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/token_learner/model.py.metadata b/.cache/huggingface/download/scenic/projects/token_learner/model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..960898be1cd257879538624ace1ff0ae628b7dcf --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/token_learner/model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572621.1747563 diff --git a/.cache/huggingface/download/scenic/projects/token_turing/README.md.lock b/.cache/huggingface/download/scenic/projects/token_turing/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/token_turing/README.md.metadata b/.cache/huggingface/download/scenic/projects/token_turing/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..115c089183e5d554499466f378fda6b6c3c677c5 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/token_turing/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572621.6059108 diff --git a/.cache/huggingface/download/scenic/projects/token_turing/model.py.lock b/.cache/huggingface/download/scenic/projects/token_turing/model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/token_turing/model.py.metadata b/.cache/huggingface/download/scenic/projects/token_turing/model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..459780ee4520cfa29040b3b85f2db4e6534a53b7 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/token_turing/model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572622.1408665 diff --git a/.cache/huggingface/download/scenic/projects/univrd/README.md.lock b/.cache/huggingface/download/scenic/projects/univrd/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/univrd/README.md.metadata b/.cache/huggingface/download/scenic/projects/univrd/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..c9ceab785b311c3cd61cce75979f5c43351bab5c --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/univrd/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572621.3903017 diff --git a/.cache/huggingface/download/scenic/projects/unloc/README.md.lock b/.cache/huggingface/download/scenic/projects/unloc/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/README.md.metadata b/.cache/huggingface/download/scenic/projects/unloc/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f58dd67bd5ccc1bdb9f5aae1bbf348178310219d --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572621.6379583 diff --git a/.cache/huggingface/download/scenic/projects/unloc/action_segmentation_base_model.py.lock b/.cache/huggingface/download/scenic/projects/unloc/action_segmentation_base_model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/action_segmentation_base_model.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/action_segmentation_base_model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..6fb6f3d1f39cb9570e48c9db947d6f497ed4c55d --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/action_segmentation_base_model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572621.6940231 diff --git a/.cache/huggingface/download/scenic/projects/unloc/action_segmentation_base_model_test.py.lock b/.cache/huggingface/download/scenic/projects/unloc/action_segmentation_base_model_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/action_segmentation_base_model_test.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/action_segmentation_base_model_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a2ef3646d756973fd0b67e10cc55f8540073bc66 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/action_segmentation_base_model_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572622.267533 diff --git a/.cache/huggingface/download/scenic/projects/unloc/activity_net_eval.py.lock b/.cache/huggingface/download/scenic/projects/unloc/activity_net_eval.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/activity_net_eval.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/activity_net_eval.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..6750644b9b089acfa77f83de0698077595818348 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/activity_net_eval.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572621.8141427 diff --git a/.cache/huggingface/download/scenic/projects/unloc/config_utils.py.lock b/.cache/huggingface/download/scenic/projects/unloc/config_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/config_utils.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/config_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8a5917c3942de57307596d31b66fe6297e292b89 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/config_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572621.8027568 diff --git a/.cache/huggingface/download/scenic/projects/unloc/encoders.py.lock b/.cache/huggingface/download/scenic/projects/unloc/encoders.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/encoders.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/encoders.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..14ec0a90395c125ad8f183d4591ef0a2cf38237a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/encoders.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572622.0048044 diff --git a/.cache/huggingface/download/scenic/projects/unloc/encoders_test.py.lock b/.cache/huggingface/download/scenic/projects/unloc/encoders_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/encoders_test.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/encoders_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..35f0374eb0b7868a30c820f5e9a0a13109d0550e --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/encoders_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572622.2669814 diff --git a/.cache/huggingface/download/scenic/projects/unloc/eval_utils.py.lock b/.cache/huggingface/download/scenic/projects/unloc/eval_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/eval_utils.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/eval_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2e6013ffc2ca016e0b5dd19887f481e174464e3f --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/eval_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572622.2387266 diff --git a/.cache/huggingface/download/scenic/projects/unloc/eval_utils_test.py.lock b/.cache/huggingface/download/scenic/projects/unloc/eval_utils_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/eval_utils_test.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/eval_utils_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..faabeb3e845b837c947ee55bfb45908a1e69bace --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/eval_utils_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572622.898172 diff --git a/.cache/huggingface/download/scenic/projects/unloc/evaluator.py.lock b/.cache/huggingface/download/scenic/projects/unloc/evaluator.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/evaluator.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/evaluator.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..6373041cdf7d1174163433a0629e5ad913a00dc0 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/evaluator.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572622.4176128 diff --git a/.cache/huggingface/download/scenic/projects/unloc/heads.py.lock b/.cache/huggingface/download/scenic/projects/unloc/heads.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/heads.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/heads.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a43497346a03a1e5e6711f0c3192ae2b5e5fe371 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/heads.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572622.6832569 diff --git a/.cache/huggingface/download/scenic/projects/unloc/heads_test.py.lock b/.cache/huggingface/download/scenic/projects/unloc/heads_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/heads_test.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/heads_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e45af3e9625799e389df4257a7f10efa9de95c98 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/heads_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572623.0089138 diff --git a/.cache/huggingface/download/scenic/projects/unloc/main.py.lock b/.cache/huggingface/download/scenic/projects/unloc/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/main.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..99ef5d37d377989498fca4d2b60f7a860853e8fb --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572622.7847567 diff --git a/.cache/huggingface/download/scenic/projects/unloc/metrics.py.lock b/.cache/huggingface/download/scenic/projects/unloc/metrics.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/metrics.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/metrics.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a59c5e89d4de94a4f634b236e00abb21c1ac51e5 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/metrics.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572622.8553758 diff --git a/.cache/huggingface/download/scenic/projects/unloc/metrics_test.py.lock b/.cache/huggingface/download/scenic/projects/unloc/metrics_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/metrics_test.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/metrics_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..650bc1f1402e43d12558b1d35a0ff74f21f07bbd --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/metrics_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572622.949835 diff --git a/.cache/huggingface/download/scenic/projects/unloc/model.py.lock b/.cache/huggingface/download/scenic/projects/unloc/model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/model.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..5baa5b2e720ec78db80b829138ce79ba450715b9 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572622.879755 diff --git a/.cache/huggingface/download/scenic/projects/unloc/model_test.py.lock b/.cache/huggingface/download/scenic/projects/unloc/model_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/model_test.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/model_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..7c11cae977677d76c7d99ef96d716c67f44a84f9 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/model_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572623.0787354 diff --git a/.cache/huggingface/download/scenic/projects/unloc/model_utils.py.lock b/.cache/huggingface/download/scenic/projects/unloc/model_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/model_utils.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/model_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..642bab423628231996a6696b86e541954d07c253 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/model_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572623.3281627 diff --git a/.cache/huggingface/download/scenic/projects/unloc/model_utils_test.py.lock b/.cache/huggingface/download/scenic/projects/unloc/model_utils_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/model_utils_test.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/model_utils_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..f554c54348d1e65a37cdcd1a9a1c8a492d499fec --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/model_utils_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572623.4137752 diff --git a/.cache/huggingface/download/scenic/projects/unloc/moment_retrieval_base_model.py.lock b/.cache/huggingface/download/scenic/projects/unloc/moment_retrieval_base_model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/moment_retrieval_base_model.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/moment_retrieval_base_model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b044aad62e2eb9b25280e59b042d63209b283066 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/moment_retrieval_base_model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572623.778531 diff --git a/.cache/huggingface/download/scenic/projects/unloc/moment_retrieval_base_model_test.py.lock b/.cache/huggingface/download/scenic/projects/unloc/moment_retrieval_base_model_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/moment_retrieval_base_model_test.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/moment_retrieval_base_model_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..46df0b5d2180df464f8dc7af5e2717f4f8e6f420 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/moment_retrieval_base_model_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572623.8260236 diff --git a/.cache/huggingface/download/scenic/projects/unloc/optimizer_utils.py.lock b/.cache/huggingface/download/scenic/projects/unloc/optimizer_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/optimizer_utils.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/optimizer_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..5038dedd55dac95863ab0f7c81c5eb01b0f247a4 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/optimizer_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572623.5444098 diff --git a/.cache/huggingface/download/scenic/projects/unloc/optimizer_utils_test.py.lock b/.cache/huggingface/download/scenic/projects/unloc/optimizer_utils_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/optimizer_utils_test.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/optimizer_utils_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2e0d924a46c030c4621d9b70c82e0ccc236acab6 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/optimizer_utils_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572623.5513186 diff --git a/.cache/huggingface/download/scenic/projects/unloc/postprocessing_utils.py.lock b/.cache/huggingface/download/scenic/projects/unloc/postprocessing_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/postprocessing_utils.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/postprocessing_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ceaa079ceef0560cbc12736f608c38417cc0527c --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/postprocessing_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572623.5995097 diff --git a/.cache/huggingface/download/scenic/projects/unloc/postprocessing_utils_test.py.lock b/.cache/huggingface/download/scenic/projects/unloc/postprocessing_utils_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/postprocessing_utils_test.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/postprocessing_utils_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b32505796e4e1092c44edb1d3a14730817cc7b76 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/postprocessing_utils_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572623.7326078 diff --git a/.cache/huggingface/download/scenic/projects/unloc/single_task_trainer.py.lock b/.cache/huggingface/download/scenic/projects/unloc/single_task_trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/single_task_trainer.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/single_task_trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..6db16f89adccc211c3c82ab5ec0edb969173a4dd --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/single_task_trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572623.9698932 diff --git a/.cache/huggingface/download/scenic/projects/unloc/temporal_localization_base_model.py.lock b/.cache/huggingface/download/scenic/projects/unloc/temporal_localization_base_model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/temporal_localization_base_model.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/temporal_localization_base_model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..8ecbad915204363ebf37a67648bb7d28f43ef5e5 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/temporal_localization_base_model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572624.0551496 diff --git a/.cache/huggingface/download/scenic/projects/unloc/temporal_localization_base_model_test.py.lock b/.cache/huggingface/download/scenic/projects/unloc/temporal_localization_base_model_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/temporal_localization_base_model_test.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/temporal_localization_base_model_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..0bc8601a77117ea9b215fa1a06da8d3cba4f14b8 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/temporal_localization_base_model_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572624.2224154 diff --git a/.cache/huggingface/download/scenic/projects/unloc/train_utils.py.lock b/.cache/huggingface/download/scenic/projects/unloc/train_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/train_utils.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/train_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..c14a14fcc2cdb7da7ece23a7b97efc9a93886d61 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/train_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572624.2169042 diff --git a/.cache/huggingface/download/scenic/projects/unloc/unloc.png.lock b/.cache/huggingface/download/scenic/projects/unloc/unloc.png.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/unloc.png.metadata b/.cache/huggingface/download/scenic/projects/unloc/unloc.png.metadata new file mode 100644 index 0000000000000000000000000000000000000000..735656ccf83e74c3c1f0ffef2f2f9fa05d749ad7 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/unloc.png.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572624.2087257 diff --git a/.cache/huggingface/download/scenic/projects/unloc/video_text_fusion.py.lock b/.cache/huggingface/download/scenic/projects/unloc/video_text_fusion.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/video_text_fusion.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/video_text_fusion.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..cea087373978cec669a35b473b46f887237406e6 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/video_text_fusion.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572624.4642036 diff --git a/.cache/huggingface/download/scenic/projects/unloc/video_text_fusion_test.py.lock b/.cache/huggingface/download/scenic/projects/unloc/video_text_fusion_test.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/unloc/video_text_fusion_test.py.metadata b/.cache/huggingface/download/scenic/projects/unloc/video_text_fusion_test.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9fc2ed313c9aec213c69e0c04dcb3a992f1e908a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/unloc/video_text_fusion_test.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572624.8896236 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/README.md.lock b/.cache/huggingface/download/scenic/projects/verbs_in_action/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/README.md.metadata b/.cache/huggingface/download/scenic/projects/verbs_in_action/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a82075c7dbc9953bc503f7b67468b0a5a13d7195 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/verbs_in_action/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572624.4323692 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/__init__.py.lock b/.cache/huggingface/download/scenic/projects/verbs_in_action/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/verbs_in_action/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a6930b1d8bc7a76ad7a30245943567cc0eb0da6a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/verbs_in_action/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572624.6650262 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/clip4clip_model.py.lock b/.cache/huggingface/download/scenic/projects/verbs_in_action/clip4clip_model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/clip4clip_model.py.metadata b/.cache/huggingface/download/scenic/projects/verbs_in_action/clip4clip_model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..fd8a92f14327317a5364fd05386094f4e66118e4 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/verbs_in_action/clip4clip_model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572624.97578 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/kinetics-400-verb-classes.txt.lock b/.cache/huggingface/download/scenic/projects/verbs_in_action/kinetics-400-verb-classes.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/kinetics-400-verb-classes.txt.metadata b/.cache/huggingface/download/scenic/projects/verbs_in_action/kinetics-400-verb-classes.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..aa5d727875c85abd5d3819a5bf076b9f858aca2d --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/verbs_in_action/kinetics-400-verb-classes.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572624.8241687 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/losses.py.lock b/.cache/huggingface/download/scenic/projects/verbs_in_action/losses.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/losses.py.metadata b/.cache/huggingface/download/scenic/projects/verbs_in_action/losses.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..619e61eeda5f7a504ade5787e5b33ca9649061f9 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/verbs_in_action/losses.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572624.8172476 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/main.py.lock b/.cache/huggingface/download/scenic/projects/verbs_in_action/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/main.py.metadata b/.cache/huggingface/download/scenic/projects/verbs_in_action/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e47e79e601d810fd458ed2bfbca698ee0a0fa35a --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/verbs_in_action/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572624.9094079 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/tfrecord_dataset.py.lock b/.cache/huggingface/download/scenic/projects/verbs_in_action/tfrecord_dataset.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/tfrecord_dataset.py.metadata b/.cache/huggingface/download/scenic/projects/verbs_in_action/tfrecord_dataset.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..c531909eded9431b1a29b170adc7eb67fb0405d7 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/verbs_in_action/tfrecord_dataset.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572625.371207 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/trainer.py.lock b/.cache/huggingface/download/scenic/projects/verbs_in_action/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/verbs_in_action/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e8a45f2af4f490f055f72fe32a6ca67fc14eb439 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/verbs_in_action/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572625.1896923 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/utils.py.lock b/.cache/huggingface/download/scenic/projects/verbs_in_action/utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/utils.py.metadata b/.cache/huggingface/download/scenic/projects/verbs_in_action/utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..81ba6b3d0f2450a75165557fb0ac4de5725b4baf --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/verbs_in_action/utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572625.3096495 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/vfc.png.lock b/.cache/huggingface/download/scenic/projects/verbs_in_action/vfc.png.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/verbs_in_action/vfc.png.metadata b/.cache/huggingface/download/scenic/projects/verbs_in_action/vfc.png.metadata new file mode 100644 index 0000000000000000000000000000000000000000..305cc5873a7a022a365b6f015bc00b67a352a9c0 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/verbs_in_action/vfc.png.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572625.4158337 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/README.md.lock b/.cache/huggingface/download/scenic/projects/vid2seq/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/README.md.metadata b/.cache/huggingface/download/scenic/projects/vid2seq/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..1478e537bbcaf0c36aa6841db7210392024eab49 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vid2seq/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572625.4233665 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/__init__.py.lock b/.cache/huggingface/download/scenic/projects/vid2seq/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/vid2seq/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4fb49feaaa9bf897d8486a341b51c31974067c62 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vid2seq/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572625.473799 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/data_utils.py.lock b/.cache/huggingface/download/scenic/projects/vid2seq/data_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/data_utils.py.metadata b/.cache/huggingface/download/scenic/projects/vid2seq/data_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..984061f3df28b2b2571f81f8e9c87e5bfe569b45 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vid2seq/data_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572625.5346997 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/dvc_eval.py.lock b/.cache/huggingface/download/scenic/projects/vid2seq/dvc_eval.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/dvc_eval.py.metadata b/.cache/huggingface/download/scenic/projects/vid2seq/dvc_eval.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..717b2fe883b867015460fdbcddd1fb459969115b --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vid2seq/dvc_eval.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572625.5984352 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/generate_from_file.py.lock b/.cache/huggingface/download/scenic/projects/vid2seq/generate_from_file.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/generate_from_file.py.metadata b/.cache/huggingface/download/scenic/projects/vid2seq/generate_from_file.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a88fba69e1099daf1d04b28d73795f44f8d39362 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vid2seq/generate_from_file.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572625.8109896 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/load_utils.py.lock b/.cache/huggingface/download/scenic/projects/vid2seq/load_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/load_utils.py.metadata b/.cache/huggingface/download/scenic/projects/vid2seq/load_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..fbdd6cdaf1bae9b97951854cc3346d492f7d4fd9 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vid2seq/load_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572626.0120568 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/main.py.lock b/.cache/huggingface/download/scenic/projects/vid2seq/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/main.py.metadata b/.cache/huggingface/download/scenic/projects/vid2seq/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ee00bfa699d75d538a8f5f97566e66622666180c --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vid2seq/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572625.9589014 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/models.py.lock b/.cache/huggingface/download/scenic/projects/vid2seq/models.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/models.py.metadata b/.cache/huggingface/download/scenic/projects/vid2seq/models.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a7982e934b916a4b673ff1c53ac9fe14a8b40b54 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vid2seq/models.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572626.0249915 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/requirements.txt.lock b/.cache/huggingface/download/scenic/projects/vid2seq/requirements.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/requirements.txt.metadata b/.cache/huggingface/download/scenic/projects/vid2seq/requirements.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..e79c6d69e07e4375de0627722beeeb0d27ec01d7 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vid2seq/requirements.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572626.1631436 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/train_utils.py.lock b/.cache/huggingface/download/scenic/projects/vid2seq/train_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/train_utils.py.metadata b/.cache/huggingface/download/scenic/projects/vid2seq/train_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..83aaea5aff5796f91d21086ab7b5dd19887c5c89 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vid2seq/train_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572626.1075292 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/trainer.py.lock b/.cache/huggingface/download/scenic/projects/vid2seq/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/vid2seq/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..4b644b37bc3ab5cfd7bda822c7e2ddc89d0d4db5 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vid2seq/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572626.1827872 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/vid2seq.png.lock b/.cache/huggingface/download/scenic/projects/vid2seq/vid2seq.png.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vid2seq/vid2seq.png.metadata b/.cache/huggingface/download/scenic/projects/vid2seq/vid2seq.png.metadata new file mode 100644 index 0000000000000000000000000000000000000000..da86cfcc46a637baaa0f7650e262fef98906c9fe --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vid2seq/vid2seq.png.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572626.17518 diff --git a/.cache/huggingface/download/scenic/projects/vivit/README.md.lock b/.cache/huggingface/download/scenic/projects/vivit/README.md.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vivit/README.md.metadata b/.cache/huggingface/download/scenic/projects/vivit/README.md.metadata new file mode 100644 index 0000000000000000000000000000000000000000..bea202d7f854d6b14b1eacf6bd664676adbfe2ec --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vivit/README.md.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572627.3198228 diff --git a/.cache/huggingface/download/scenic/projects/vivit/__init__.py.lock b/.cache/huggingface/download/scenic/projects/vivit/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vivit/__init__.py.metadata b/.cache/huggingface/download/scenic/projects/vivit/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9e2fc0b51595f349c32214d8868491958351e359 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vivit/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572626.5431318 diff --git a/.cache/huggingface/download/scenic/projects/vivit/evaluation_lib.py.lock b/.cache/huggingface/download/scenic/projects/vivit/evaluation_lib.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vivit/evaluation_lib.py.metadata b/.cache/huggingface/download/scenic/projects/vivit/evaluation_lib.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..a6b8f39786d76da55f0172d9ea0b2996626444c0 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vivit/evaluation_lib.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572626.6961203 diff --git a/.cache/huggingface/download/scenic/projects/vivit/main.py.lock b/.cache/huggingface/download/scenic/projects/vivit/main.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vivit/main.py.metadata b/.cache/huggingface/download/scenic/projects/vivit/main.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..5856bee50ff97dc69018afdd9cf00db2a48f11d5 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vivit/main.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572626.6485767 diff --git a/.cache/huggingface/download/scenic/projects/vivit/model.py.lock b/.cache/huggingface/download/scenic/projects/vivit/model.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vivit/model.py.metadata b/.cache/huggingface/download/scenic/projects/vivit/model.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..b4d1f97269769de3a79c93162fd8d759720ea414 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vivit/model.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572626.7012248 diff --git a/.cache/huggingface/download/scenic/projects/vivit/model_utils.py.lock b/.cache/huggingface/download/scenic/projects/vivit/model_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vivit/model_utils.py.metadata b/.cache/huggingface/download/scenic/projects/vivit/model_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..20b2f82396e65e77fc6f9421a4652f1852606ea3 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vivit/model_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572626.916765 diff --git a/.cache/huggingface/download/scenic/projects/vivit/requirements.txt.lock b/.cache/huggingface/download/scenic/projects/vivit/requirements.txt.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vivit/requirements.txt.metadata b/.cache/huggingface/download/scenic/projects/vivit/requirements.txt.metadata new file mode 100644 index 0000000000000000000000000000000000000000..65cc9d2f7841b61c4ab2133dadb4e34f2d920de7 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vivit/requirements.txt.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572626.7553022 diff --git a/.cache/huggingface/download/scenic/projects/vivit/train_utils.py.lock b/.cache/huggingface/download/scenic/projects/vivit/train_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vivit/train_utils.py.metadata b/.cache/huggingface/download/scenic/projects/vivit/train_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..07547d185226ca29cb08ab86255d34dae9ea8952 --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vivit/train_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572627.1648846 diff --git a/.cache/huggingface/download/scenic/projects/vivit/trainer.py.lock b/.cache/huggingface/download/scenic/projects/vivit/trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/projects/vivit/trainer.py.metadata b/.cache/huggingface/download/scenic/projects/vivit/trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..7b37c2c4d201e8ce4aa5c38fb7cff97b2dfb0add --- /dev/null +++ b/.cache/huggingface/download/scenic/projects/vivit/trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572627.1904573 diff --git a/.cache/huggingface/download/scenic/train_lib/__init__.py.lock b/.cache/huggingface/download/scenic/train_lib/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/__init__.py.metadata b/.cache/huggingface/download/scenic/train_lib/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..dc1bca60ffcb4d9f0fd48672cda4efc90bfe2bcf --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572627.3192525 diff --git a/.cache/huggingface/download/scenic/train_lib/__pycache__/__init__.cpython-310.pyc.lock b/.cache/huggingface/download/scenic/train_lib/__pycache__/__init__.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/__pycache__/__init__.cpython-310.pyc.metadata b/.cache/huggingface/download/scenic/train_lib/__pycache__/__init__.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..eb5394e8066f9433cadf84e817f94398de53f2bf --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/__pycache__/__init__.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572627.3563895 diff --git a/.cache/huggingface/download/scenic/train_lib/__pycache__/optimizers.cpython-310.pyc.lock b/.cache/huggingface/download/scenic/train_lib/__pycache__/optimizers.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/__pycache__/optimizers.cpython-310.pyc.metadata b/.cache/huggingface/download/scenic/train_lib/__pycache__/optimizers.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..83704111de61e5793f099f1964e9c9fe84cbd924 --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/__pycache__/optimizers.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572627.3308346 diff --git a/.cache/huggingface/download/scenic/train_lib/__pycache__/train_utils.cpython-310.pyc.lock b/.cache/huggingface/download/scenic/train_lib/__pycache__/train_utils.cpython-310.pyc.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/__pycache__/train_utils.cpython-310.pyc.metadata b/.cache/huggingface/download/scenic/train_lib/__pycache__/train_utils.cpython-310.pyc.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ce9e1627fbf0ec2387f24da4eae3023cb2d8373e --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/__pycache__/train_utils.cpython-310.pyc.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572627.3704572 diff --git a/.cache/huggingface/download/scenic/train_lib/classification_trainer.py.lock b/.cache/huggingface/download/scenic/train_lib/classification_trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/classification_trainer.py.metadata b/.cache/huggingface/download/scenic/train_lib/classification_trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..fb3b98753365a3a471bbc149bcb20df21ff396b2 --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/classification_trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +adcd70946c16cbc9be1f7ae227422b1176f76fa9 +1766572628.4785411 diff --git a/.cache/huggingface/download/scenic/train_lib/lr_schedules.py.lock b/.cache/huggingface/download/scenic/train_lib/lr_schedules.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/lr_schedules.py.metadata b/.cache/huggingface/download/scenic/train_lib/lr_schedules.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ca40fb09b1ca1d6eab739ec4564aff23c23cf812 --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/lr_schedules.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +4e0f94404a0ac62c9172580b722ede6774c5d715 +1766572628.5513954 diff --git a/.cache/huggingface/download/scenic/train_lib/optax.py.lock b/.cache/huggingface/download/scenic/train_lib/optax.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/optax.py.metadata b/.cache/huggingface/download/scenic/train_lib/optax.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..ea96fc3c20972f8bc969829148189ebe46b7ca5a --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/optax.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +8066c7b94bf308cf7497baaff55d69b8c44ea637 +1766572628.353552 diff --git a/.cache/huggingface/download/scenic/train_lib/optimizers.py.lock b/.cache/huggingface/download/scenic/train_lib/optimizers.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/optimizers.py.metadata b/.cache/huggingface/download/scenic/train_lib/optimizers.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..90d13aece94b0772ca55189f5eacec035861735c --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/optimizers.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +46d8ebe6bf931adc991bad15ca42085be9bbfc72 +1766572628.625363 diff --git a/.cache/huggingface/download/scenic/train_lib/pretrain_utils.py.lock b/.cache/huggingface/download/scenic/train_lib/pretrain_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/pretrain_utils.py.metadata b/.cache/huggingface/download/scenic/train_lib/pretrain_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d15937ad2a3c36260e5080e84723bf9227d216d1 --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/pretrain_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +2610ed498888a1f92713006547104849138b58e0 +1766572629.2310963 diff --git a/.cache/huggingface/download/scenic/train_lib/tests/__init__.py.lock b/.cache/huggingface/download/scenic/train_lib/tests/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/tests/__init__.py.metadata b/.cache/huggingface/download/scenic/train_lib/tests/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..23f16902f32b8b7de9500dc400ea0036f31db620 --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/tests/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572627.972556 diff --git a/.cache/huggingface/download/scenic/train_lib/tests/test_classification_trainer.py.lock b/.cache/huggingface/download/scenic/train_lib/tests/test_classification_trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/tests/test_classification_trainer.py.metadata b/.cache/huggingface/download/scenic/train_lib/tests/test_classification_trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..d977f8ded6704370bc523c7ffa330136d04a2071 --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/tests/test_classification_trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572628.0310304 diff --git a/.cache/huggingface/download/scenic/train_lib/tests/test_lr_schedules.py.lock b/.cache/huggingface/download/scenic/train_lib/tests/test_lr_schedules.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/tests/test_lr_schedules.py.metadata b/.cache/huggingface/download/scenic/train_lib/tests/test_lr_schedules.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..2c067acb821234a4ced9ad5510eb3c8711da80c8 --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/tests/test_lr_schedules.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572628.3305984 diff --git a/.cache/huggingface/download/scenic/train_lib/tests/test_optax.py.lock b/.cache/huggingface/download/scenic/train_lib/tests/test_optax.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/tests/test_optax.py.metadata b/.cache/huggingface/download/scenic/train_lib/tests/test_optax.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..57e9d6b65163b5a17fcd616eaaff89de732c8a6a --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/tests/test_optax.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572628.6376233 diff --git a/.cache/huggingface/download/scenic/train_lib/tests/test_optimizers.py.lock b/.cache/huggingface/download/scenic/train_lib/tests/test_optimizers.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/tests/test_optimizers.py.metadata b/.cache/huggingface/download/scenic/train_lib/tests/test_optimizers.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..c8817aee14fa7e0771613d6e41dae189841f1108 --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/tests/test_optimizers.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572628.8105168 diff --git a/.cache/huggingface/download/scenic/train_lib/train_utils.py.lock b/.cache/huggingface/download/scenic/train_lib/train_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/train_utils.py.metadata b/.cache/huggingface/download/scenic/train_lib/train_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..3a040dbf636c74638d5a68e6b2fcb026361f108d --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/train_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +2db22feb8d18b05337dc7fe73a06b3bba73ede63 +1766572629.696987 diff --git a/.cache/huggingface/download/scenic/train_lib/trainers.py.lock b/.cache/huggingface/download/scenic/train_lib/trainers.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/trainers.py.metadata b/.cache/huggingface/download/scenic/train_lib/trainers.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..446458430036d1dfe8195c6650bace292d8f3d7d --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/trainers.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +4369a868b3b4895e6b3c897bcd02ed562d8ade7a +1766572629.690158 diff --git a/.cache/huggingface/download/scenic/train_lib/transfer/__init__.py.lock b/.cache/huggingface/download/scenic/train_lib/transfer/__init__.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/transfer/__init__.py.metadata b/.cache/huggingface/download/scenic/train_lib/transfer/__init__.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..9d2059b6af458d11b6c762ae3dbd9d4ce33d6212 --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/transfer/__init__.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572629.0646098 diff --git a/.cache/huggingface/download/scenic/train_lib/transfer/fewshot_utils.py.lock b/.cache/huggingface/download/scenic/train_lib/transfer/fewshot_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/transfer/fewshot_utils.py.metadata b/.cache/huggingface/download/scenic/train_lib/transfer/fewshot_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..1122d80495b265ea6e9297218d6f457e6bdb86be --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/transfer/fewshot_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572629.200604 diff --git a/.cache/huggingface/download/scenic/train_lib/transfer/linear_probe_utils.py.lock b/.cache/huggingface/download/scenic/train_lib/transfer/linear_probe_utils.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/transfer/linear_probe_utils.py.metadata b/.cache/huggingface/download/scenic/train_lib/transfer/linear_probe_utils.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..469913950a320d1c6f71205586d8a6a402d509da --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/transfer/linear_probe_utils.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572629.2225342 diff --git a/.cache/huggingface/download/scenic/train_lib/transfer/transfer_trainer.py.lock b/.cache/huggingface/download/scenic/train_lib/transfer/transfer_trainer.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/scenic/train_lib/transfer/transfer_trainer.py.metadata b/.cache/huggingface/download/scenic/train_lib/transfer/transfer_trainer.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..65fefe6df8e2e2b108464fa0c66eb6c40aa2cb6f --- /dev/null +++ b/.cache/huggingface/download/scenic/train_lib/transfer/transfer_trainer.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +1766572629.2085717 diff --git a/.cache/huggingface/download/setup.py.lock b/.cache/huggingface/download/setup.py.lock new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.cache/huggingface/download/setup.py.metadata b/.cache/huggingface/download/setup.py.metadata new file mode 100644 index 0000000000000000000000000000000000000000..30e8ba1f78e2ca9e7401f5c75afdc3896aa96196 --- /dev/null +++ b/.cache/huggingface/download/setup.py.metadata @@ -0,0 +1,3 @@ +742a3d13a11bd0aaa8a8eef0d4b3e2a6c089cd85 +8f1c0ee27fd22f373b755bbf142dd96358c5f1d6 +1766572630.0687525 diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..94fdf0d35dbb64cc9f722171e7845f65da78d44b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,39 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +ckpts/clip_vit_l14_with_masks_6c17944 filter=lfs diff=lfs merge=lfs -text +ckpts/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b filter=lfs diff=lfs merge=lfs -text +ckpts/owl2-l14-1008-st-ngrams-ft-lvisbase-ens-cold-weight-04_8ca674c filter=lfs diff=lfs merge=lfs -text +images/scenic_design.jpg filter=lfs diff=lfs merge=lfs -text +images/scenic_logo.jpg filter=lfs diff=lfs merge=lfs -text +owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b filter=lfs diff=lfs merge=lfs -text +scenic/dataset_lib/coco_dataset/data/instances_val2017.json filter=lfs diff=lfs merge=lfs -text +scenic/projects/adatape/fig/adatape_overview.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/adversarialtraining/images/pyramidat_fig1.gif filter=lfs diff=lfs merge=lfs -text +scenic/projects/adversarialtraining/images/pyramidat_table.gif filter=lfs diff=lfs merge=lfs -text +scenic/projects/avatar/architecture_avatar.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/baselines/universal_transformer/fig/AdaptiveUT.gif filter=lfs diff=lfs merge=lfs -text +scenic/projects/baselines/universal_transformer/fig/UTtransformer.gif filter=lfs diff=lfs merge=lfs -text +scenic/projects/boundary_attention/kaleidoshapes/rm.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/boundary_attention/noisy_flower.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/boundary_attention/rm.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/densevoc/densevoc_framework.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/densevoc/densevoc_teaser.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/gerald/gerald_method.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/knowledge_visual_language/data/vqa.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/loca/loca.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/mbt/bottlenecks.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/mtv/mtv.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/ncr/data/overview.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/owl_vit/data/image_cond_wiki_circuits_1.gif filter=lfs diff=lfs merge=lfs -text +scenic/projects/owl_vit/data/owl_vit_schematic.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/owl_vit/data/scaling_owl_figure_1.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/owl_vit/data/text_cond_wiki_stillife_1.gif filter=lfs diff=lfs merge=lfs -text +scenic/projects/polyvit/data/polyvit.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/streaming_dvc/streaming_dvc_teaser.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/token_learner/data/tokenlearner.gif filter=lfs diff=lfs merge=lfs -text +scenic/projects/token_turing/data/ttm.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/unloc/unloc.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/verbs_in_action/vfc.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/vid2seq/vid2seq.png filter=lfs diff=lfs merge=lfs -text +scenic/projects/vivit/data/vivit.png filter=lfs diff=lfs merge=lfs -text diff --git a/.ipynb_checkpoints/auto_bbox-checkpoint.py b/.ipynb_checkpoints/auto_bbox-checkpoint.py new file mode 100644 index 0000000000000000000000000000000000000000..0d0d695e515e8efda22e789f5ddf00b161ede54c --- /dev/null +++ b/.ipynb_checkpoints/auto_bbox-checkpoint.py @@ -0,0 +1,277 @@ +import os +import sys +import cv2 +import json +import glob +import argparse +import subprocess +from typing import List, Tuple, Dict, Any + +import numpy as np +from tqdm import tqdm + + +# ----------------- Args ----------------- +def parse_args(): + ap = argparse.ArgumentParser("OWLv2 detection on JPG folders (Top-K per image), multi-GPU.") + ap.add_argument("--input_dir", type=str, required=True, help="Root that contains subfolders of JPGs; if JPGs are directly under input_dir, it will be treated as a single set.") + ap.add_argument("--startswith", type=str, default="", help="Filter folder name prefix (or input_dir basename if no subfolders).") + ap.add_argument("--endswith", type=str, default="", help="Filter folder name ends (or input_dir basename if no subfolders).") + ap.add_argument("--output_dir", type=str, required=True) + ap.add_argument("--frame_stride", type=int, default=1, help="Sample every N-th image within a folder.") + ap.add_argument("--top_k", type=int, default=5) + ap.add_argument("--max_frames", type=int, default=0, help="Max processed images per folder; 0 means no limit.") + ap.add_argument("--num_workers", type=int, default=1, help="#GPUs/#workers") + ap.add_argument("--worker_idx", type=int, default=-1, help="internal; >=0 means child worker") + ap.add_argument("--shard_file", type=str, default="", help="internal; JSON with folder paths for this worker") + ap.add_argument("--scenic_root", type=str, default="/gz-data/Memory/owlv2/big_vision") + ap.add_argument("--checkpoint_path", type=str, default="/gz-data/Memory/owlv2/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b") + return ap.parse_args() + + +# ----------------- Utils ----------------- +def _has_jpgs(path: str) -> bool: + exts = ("*.jpg", "*.jpeg", "*.JPG", "*.JPEG") + for pat in exts: + if glob.glob(os.path.join(path, pat)): + return True + return False + + +def iter_image_dirs(input_dir: str, startswith: str, endswith: str) -> List[str]: + """ + Returns a list of directories to process. + - If input_dir contains subfolders: return subfolders that contain JPGs and match startswith. + - Else if input_dir itself contains JPGs and its basename matches startswith: return [input_dir]. + """ + input_dir = os.path.abspath(input_dir) + subs = sorted([p for p in glob.glob(os.path.join(input_dir, "*")) if os.path.isdir(p)]) + # Prefer subfolders if any exist and contain jpgs + dirs = [d for d in subs if os.path.basename(d).startswith(startswith) and os.path.basename(d).endswith(endswith) and _has_jpgs(d)] + if dirs: + return dirs + + # Fallback: treat input_dir itself as one set if it has jpgs + base_ok = os.path.basename(os.path.normpath(input_dir)).startswith(startswith) and os.path.basename(d).endswith(endswith) + if base_ok and _has_jpgs(input_dir): + return [input_dir] + return [] + + +def ensure_dir(p: str): + os.makedirs(p, exist_ok=True) + + +def draw_single_box(frame_bgr: np.ndarray, box: List[float], color=(0, 255, 0), thickness=2) -> np.ndarray: + x1, y1, x2, y2 = map(int, box) + out = frame_bgr.copy() + cv2.rectangle(out, (x1, y1), (x2, y2), color, thickness) + return out + + +def list_images_sorted(folder: str) -> List[str]: + pats = ["*.jpg", "*.jpeg", "*.JPG", "*.JPEG"] + files = [] + for pat in pats: + files.extend(glob.glob(os.path.join(folder, pat))) + # Sort by natural file name order + return sorted(files) + + +# ----------------- Worker logic (imports JAX/Scenic inside) ----------------- +def worker_run(args, dir_paths: List[str]): + import sys as _sys + if args.scenic_root not in _sys.path: + _sys.path.append(args.scenic_root) + + # Free TF GPU to JAX in this process (why: avoid TF reserving VRAM) + import tensorflow as tf + tf.config.experimental.set_visible_devices([], "GPU") + + from scenic.projects.owl_vit import configs + from scenic.projects.owl_vit import models + import jax + import functools + import owlv2_helper as helper # must be available in PYTHONPATH + + class OWLv2Objectness: + def __init__(self, top_k: int = 5): + self.top_k = top_k + self.config = configs.owl_v2_clip_b16.get_config(init_mode="canonical_checkpoint") + if args.checkpoint_path: + self.config.init_from.checkpoint_path = os.path.abspath(args.checkpoint_path) + + print("[OWLv2] checkpoint_path =", self.config.init_from.checkpoint_path) + + print("cp path:", self.config.init_from.checkpoint_path) + + self.module = models.TextZeroShotDetectionModule( + body_configs=self.config.model.body, + objectness_head_configs=self.config.model.objectness_head, + normalize=self.config.model.normalize, + box_bias=self.config.model.box_bias, + ) + self.variables = self.module.load_variables(self.config.init_from.checkpoint_path) + + + self.image_embedder = jax.jit( + functools.partial(self.module.apply, self.variables, train=False, method=self.module.image_embedder) + ) + self.objectness_predictor = jax.jit( + functools.partial(self.module.apply, self.variables, method=self.module.objectness_predictor) + ) + self.box_predictor = jax.jit( + functools.partial(self.module.apply, self.variables, method=self.module.box_predictor) + ) + + def detect(self, image_bgr: np.ndarray) -> List[Tuple[List[float], float]]: + image_rgb = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2RGB) + processed = helper.preprocess_images([image_rgb], self.config.dataset_configs.input_size)[0] + feature_map = self.image_embedder(processed[None, ...]) + b, h, w, d = feature_map.shape + image_features = feature_map.reshape(b, h * w, d) + + obj_logits = self.objectness_predictor(image_features)["objectness_logits"] + raw_boxes = self.box_predictor(image_features=image_features, feature_map=feature_map)["pred_boxes"] + + obj = np.array(obj_logits[0], dtype=np.float32) + raw_boxes = np.array(raw_boxes[0], dtype=np.float32) + boxes = helper.rescale_detection_box(raw_boxes, image_rgb) + + if len(obj) == 0: + return [] + + k = min(self.top_k, len(obj)) + thresh = np.partition(obj, -k)[-k] + + filtered: List[Tuple[List[float], float]] = [] + H, W = image_rgb.shape[:2] + for box, score in zip(boxes, obj): + if score < thresh: + continue + if helper.too_small(box) or helper.too_large(box, image_rgb): + continue + x1, y1, x2, y2 = box + x1 = max(0, min(float(x1), W - 1)) + y1 = max(0, min(float(y1), H - 1)) + x2 = max(0, min(float(x2), W - 1)) + y2 = max(0, min(float(y2), H - 1)) + filtered.append(([x1, y1, x2, y2], float(score))) + + kept_boxes = helper.remove_overlapping_bboxes([b for b, _ in filtered]) + + def _match_score(bb: List[float]) -> float: + arr = np.array([b for b, _ in filtered], dtype=np.float32) + idx = int(np.argmin(np.abs(arr - np.array(bb, dtype=np.float32)).sum(axis=1))) + return filtered[idx][1] + + return [(bb, _match_score(bb)) for bb in kept_boxes] + + detector = OWLv2Objectness(top_k=args.top_k) + + for dpath in tqdm(dir_paths, desc=f"Worker{args.worker_idx}", unit="set"): + stem = os.path.basename(os.path.normpath(dpath)) + images = list_images_sorted(dpath) + if not images: + print(f"[WARN][w{args.worker_idx}] No JPGs under: {dpath}") + continue + + saved_cnt = 0 + pbar = tqdm(total=len(images), desc=f"{stem}[w{args.worker_idx}]", unit="img", leave=False) + + for idx, ipath in enumerate(images): + pbar.update(1) + if args.frame_stride > 1 and (idx % args.frame_stride) != 0: + continue + + frame = cv2.imread(ipath, cv2.IMREAD_COLOR) + if frame is None: + print(f"[WARN][w{args.worker_idx}] Cannot read: {ipath}") + continue + + boxes_scores = detector.detect(frame) + if boxes_scores: + boxes_scores = sorted(boxes_scores, key=lambda x: x[1], reverse=True)[:args.top_k] + + fname = os.path.basename(ipath) + for i, (box, score) in enumerate(boxes_scores): + out_dir = os.path.join(args.output_dir, stem, f"object_{i}") + ensure_dir(out_dir) + vis = draw_single_box(frame, box, color=(0, 255, 0), thickness=2) + cv2.imwrite(os.path.join(out_dir, fname), vis) + + saved_cnt += 1 + if args.max_frames and saved_cnt >= args.max_frames: + break + + pbar.close() + + +# ----------------- Master ----------------- +def main(): + args = parse_args() + + # Child worker path + if args.worker_idx >= 0: + if not args.shard_file or not os.path.exists(args.shard_file): + raise RuntimeError("Worker requires --shard_file with JSON list of folder paths.") + with open(args.shard_file, "r", encoding="utf-8") as f: + dir_paths = json.load(f) + worker_run(args, dir_paths) + return + + # Master path + dir_paths = iter_image_dirs(args.input_dir, args.startswith, args.endswith) + if not dir_paths: + print(f"[INFO] No JPG folders (or JPGs) startwith '{args.startswith}' and endwith '{args.endswith}' under {args.input_dir}") + return + + num_workers = max(1, int(args.num_workers)) + shards: List[List[str]] = [[] for _ in range(num_workers)] + for i, d in enumerate(dir_paths): + shards[i % num_workers].append(d) + + procs = [] + tmp_dir = os.path.join(args.output_dir, "_shards_tmp") + ensure_dir(tmp_dir) + + for w in range(num_workers): + shard_path = os.path.join(tmp_dir, f"shard_{w}.json") + with open(shard_path, "w", encoding="utf-8") as f: + json.dump(shards[w], f, ensure_ascii=False, indent=0) + + # Bind GPU: cycle through available GPU ids [0..num_workers-1] + env = os.environ.copy() + env["CUDA_VISIBLE_DEVICES"] = str(w) # one GPU per worker + + cmd = [ + sys.executable, __file__, + "--input_dir", args.input_dir, + "--startswith", args.startswith, + "--output_dir", args.output_dir, + "--frame_stride", str(args.frame_stride), + "--top_k", str(args.top_k), + "--max_frames", str(args.max_frames), + "--num_workers", str(num_workers), + "--worker_idx", str(w), + "--shard_file", shard_path, + "--scenic_root", args.scenic_root, + "--checkpoint_path", args.checkpoint_path, + ] + print(f"[Master] Launch worker {w}: GPU={env['CUDA_VISIBLE_DEVICES']} folders={len(shards[w])}") + procs.append(subprocess.Popen(cmd, env=env)) + + # wait + rc = 0 + for p in procs: + p.wait() + rc |= p.returncode + + if rc != 0: + print("[Master] Some workers failed. Return code:", rc) + else: + print("[Master] All workers done. Output:", args.output_dir) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/.ipynb_checkpoints/setup-checkpoint.py b/.ipynb_checkpoints/setup-checkpoint.py new file mode 100644 index 0000000000000000000000000000000000000000..4ba8d4aeac0efeaa5fee8fcaa00dcec449ff6568 --- /dev/null +++ b/.ipynb_checkpoints/setup-checkpoint.py @@ -0,0 +1,120 @@ +# Copyright 2024 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""setup.py for Scenic. + +Install for development: + + pip intall -e . .[testing] +""" + +import os +import urllib.request + +from setuptools import Command +from setuptools import find_packages +from setuptools import setup +from setuptools.command import install + +SIMCLR_DIR = "simclr/tf2" +DATA_UTILS_URL = "https://raw.githubusercontent.com/google-research/simclr/master/tf2/data_util.py" + + +class DownloadSimCLRAugmentationCommand(Command): + """Downloads SimCLR data_utils.py as it's not built into an egg.""" + description = __doc__ + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + build_cmd = self.get_finalized_command("build") + dist_root = os.path.realpath(build_cmd.build_lib) + output_dir = os.path.join(dist_root, SIMCLR_DIR) + if not os.path.exists(output_dir): + os.makedirs(output_dir) + output_path = os.path.join(output_dir, "data_util.py") + downloader = urllib.request.URLopener() + downloader.retrieve(DATA_UTILS_URL, output_path) + + +class InstallCommand(install.install): + + def run(self): + self.run_command("simclr_download") + install.install.run(self) + + +install_requires_projects = [ + "ott-jax>=0.2.0", + "sklearn", + "lingvo==0.12.6", + "seaborn>=0.11.2", + "dmvr @ git+https://ghfast.top/https://github.com/google-deepmind/dmvr.git", +] + +install_requires_core = [ + "absl-py>=1.0.0", + "numpy>=1.12", + "jax>=0.4.3", + "jaxlib>=0.4.3", + "flax>=0.4.0", + "ml-collections>=0.1.1", + "tensorflow>=2.7", + "immutabledict>=2.2.1", + "clu>=0.0.6", + "tensorflow-datasets", + "optax @ git+https://ghfast.top/https://github.com/google-deepmind/optax.git@main", +] + +tests_require = [ + "pytest", + "shapely", +] + install_requires_projects + +setup( + name="scenic", + version="0.0.1", + description=("A Jax Library for Computer Vision Research and Beyond."), + author="Scenic Authors", + author_email="no-reply@google.com", + long_description=open("README.md").read(), + long_description_content_type="text/markdown", + url="http://github.com/google-research/scenic", + license="Apache 2.0", + packages=find_packages(), + include_package_data=True, + install_requires=install_requires_core, + cmdclass={ + "simclr_download": DownloadSimCLRAugmentationCommand, + "install": InstallCommand, + }, + tests_require=tests_require, + extras_require={ + "testing": tests_require, + }, + classifiers=[ + "Development Status :: 1 - Beta", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + ], + keywords="Scenic", +) diff --git a/=0.0.6 b/=0.0.6 new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/=0.1.1 b/=0.1.1 new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/=0.4.0 b/=0.4.0 new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/=0.4.3 b/=0.4.3 new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/=1.0.0 b/=1.0.0 new file mode 100644 index 0000000000000000000000000000000000000000..27414831c392279a0e8fe339e8235bc1026ce2c3 --- /dev/null +++ b/=1.0.0 @@ -0,0 +1,2 @@ +Looking in indexes: https://mirrors.aliyun.com/pypi/simple +Requirement already satisfied: absl-py in /usr/local/anaconda3/envs/owlv2/lib/python3.12/site-packages (2.3.1) diff --git a/=1.12 b/=1.12 new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/=2.2.1 b/=2.2.1 new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/=2.7 b/=2.7 new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000000000000000000000000000000000..797fbaaf978606e1991e51e05be7813862584c5e --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,32 @@ +# How to Contribute + +Scenic is a platform used for developing new methods and ideas by Google +researchers, mostly around attention-based models for computer vision or +multi-modal applications. We encourage forking the repository and continued +development. We welcome suggestions and contributions to improving Scenic. +There are a few small guidelines you need to follow. + +## Contributor License Agreement + +Contributions to this project must be accompanied by a Contributor License +Agreement (CLA). You (or your employer) retain the copyright to your +contribution; this simply gives us permission to use and redistribute your +contributions as part of the project. Head over to + to see your current agreements on file or +to sign a new one. + +You generally only need to submit a CLA once, so if you've already submitted one +(even if it was for a different project), you probably don't need to do it +again. + +## Code Reviews + +All submissions, including submissions by project members, require review. We +use GitHub pull requests for this purpose. Consult +[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more +information on using pull requests. + +## Community Guidelines + +This project follows +[Google's Open Source Community Guidelines](https://opensource.google/conduct/). diff --git a/IOU_test.py b/IOU_test.py new file mode 100644 index 0000000000000000000000000000000000000000..eeac3327d3bb17c7aa88d7022d4388e4c6975e0a --- /dev/null +++ b/IOU_test.py @@ -0,0 +1,21 @@ +from owlv2_helper_functions import get_iou, boxes_filter + +boxes = [ + (128.56, 4.57, 732.52, 476.05), + (569.65, 185.71, 740.31, 244.76), + (569.65, 185.71, 740.31, 244.76), + (569.65, 185.71, 740.31, 244.76), + (101.99, 99.00, 720.12, 88.63), + ] + +scores = [1.0, 0.99, 0.89, 1.0, 0.99] + +instances = ['cat', 'dog', 'dog', 'tiger', 'cat'] + + + +pred_bboxes, pred_scores, instances = boxes_filter(boxes, scores, instances) + +print(pred_bboxes) +print(pred_scores) +print(instances) \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..d645695673349e3947e8e5ae42332d0ac3164cd7 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..4aa107e4a89900a7f3faa873e6b07282b1c1ff7a --- /dev/null +++ b/README.md @@ -0,0 +1,217 @@ +# Scenic +
+scenic logo +
+ +*Scenic* is a codebase with a focus on research around attention-based models +for computer vision. Scenic has been successfully used to develop +classification, segmentation, and detection models for multiple modalities +including images, video, audio, and multimodal combinations of them. + +More precisely, *Scenic* is a (i) set of shared light-weight libraries solving +tasks commonly encountered tasks when training large-scale (i.e. multi-device, +multi-host) vision models; and (ii) several *projects* containing fully +fleshed out problem-specific training and evaluation loops using these +libraries. + +Scenic is developed in [JAX](https://github.com/jax-ml/jax) and uses +[Flax](https://github.com/google/flax). + +### Contents +* [What we offer](#what-we-offer) +* [SOTA models and baselines in Scenic](#sota-models-and-baselines-in-scenic) +* [Philosophy](#philosophy) +* [Getting started](#getting-started) +* [Scenic component design](#scenic-component-design) +* [Citing Scenic](#citing-scenic) + +## What we offer +Among others *Scenic* provides + +* Boilerplate code for launching experiments, summary writing, logging, + profiling, etc; +* Optimized training and evaluation loops, losses, metrics, bi-partite matchers, + etc; +* Input-pipelines for popular vision datasets; +* [Baseline models](https://github.com/google-research/scenic/tree/main/scenic/projects/baselines#scenic-baseline-models), +including strong non-attentional baselines. + + +## SOTA models and baselines in *Scenic* +There are some SOTA models and baselines in Scenic which were either developed +using Scenic, or have been reimplemented in Scenic: + +Projects that were developed in Scenic or used it for their experiments: + +* [ViViT: A Video Vision Transformer](https://arxiv.org/abs/2103.15691) +* [OmniNet: Omnidirectional Representations from Transformers](https://arxiv.org/abs/2103.01075) +* [Attention Bottlenecks for Multimodal Fusion](https://arxiv.org/abs/2107.00135) +* [TokenLearner: What Can 8 Learned Tokens Do for Images and Videos?](https://arxiv.org/abs/2106.11297) +* [Exploring the Limits of Large Scale Pre-training](https://arxiv.org/abs/2110.02095) +* [The Efficiency Misnomer](https://arxiv.org/abs/2110.12894) +* [Discrete Representations Strengthen Vision Transformer Robustness](https://arxiv.org/abs/2111.10493) +* [Pyramid Adversarial Training Improves ViT Performance](https://arxiv.org/abs/2111.15121) +* [VUT: Versatile UI Transformer for Multi-Modal Multi-Task User Interface Modeling](https://arxiv.org/abs/2112.05692) +* [CLAY: Learning to Denoise Raw Mobile UI Layouts for Improving Datasets at Scale](https://arxiv.org/abs/2201.04100) +* [Zero-Shot Text-Guided Object Generation with Dream Fields](https://arxiv.org/abs/2112.01455) +* [Multiview Transformers for Video Recognition](https://arxiv.org/abs/2201.04288) +* [PolyViT: Co-training Vision Transformers on Images, Videos and Audio](https://arxiv.org/abs/2111.12993) +* [Simple Open-Vocabulary Object Detection with Vision Transformers](https://arxiv.org/abs/2205.06230) +* [Learning with Neighbor Consistency for Noisy Labels](https://arxiv.org/abs/2202.02200) +* [Token Turing Machines](https://arxiv.org/pdf/2211.09119.pdf) +* [Vid2Seq: Large-Scale Pretraining of a Visual Language Model for Dense Video Captioning](https://arxiv.org/pdf/2302.14115.pdf) +* [AVATAR: Unconstrained Audiovisual Speech Recognition](https://arxiv.org/abs/2206.07684) +* [Adaptive Computation with Elastic Input Sequence](https://arxiv.org/abs/2301.13195) +* [Location-Aware Self-Supervised Transformers for Semantic Segmentation](https://arxiv.org/abs/2212.02400) +* [How can objects help action recognition?](https://openaccess.thecvf.com/content/CVPR2023/html/Zhou_How_Can_Objects_Help_Action_Recognition_CVPR_2023_paper.html) +* [Verbs in Action: Improving verb understanding in video-language models](https://arxiv.org/abs/2304.06708) +* [Unified Visual Relationship Detection with Vision and Language Models](https://arxiv.org/abs/2303.08998) +* [UnLoc: A Unified Framework for Video Localization Tasks](https://arxiv.org/abs/2308.11062) +* [REVEAL: Retrieval-Augmented Visual-Language Pre-Training with Multi-Source Multimodal Knowledge Memory](https://arxiv.org/abs/2212.05221) +* [Audiovisual Masked Autoencoders](https://arxiv.org/abs/2212.05922) +* [MatFormer: Nested Transformer for Elastic Inference](https://arxiv.org/abs/2310.07707) +* [Pixel Aligned Language Models](https://arxiv.org/abs/2312.09237) +* [A Generative Approach for Wikipedia-Scale Visual Entity Recognition](https://arxiv.org/abs/2403.02041) +* [Streaming Dense Video Captioning](https://arxiv.org/abs/2404.01297) +* [Dense Video Object Captioning from Disjoint Supervision](https://arxiv.org/abs/2306.11729) + +More information can be found in [projects](https://github.com/google-research/scenic/tree/main/scenic/projects#list-of-projects-hosted-in-scenic). + +Baselines that were reproduced in Scenic: + +* [(ViT) An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale](https://arxiv.org/abs/2010.11929) +* [(DETR) End-to-End Object Detection with Transformers](https://arxiv.org/abs/2005.12872) +* [Deformable DETR: Deformable Transformers for End-to-End Object Detection](https://arxiv.org/abs/2010.04159) +* [(CLIP) Learning Transferable Visual Models From Natural Language Supervision](https://arxiv.org/abs/2103.00020) +* [MLP-Mixer: An all-MLP Architecture for Vision](https://arxiv.org/abs/2105.01601) +* [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805) +* [How to train your ViT? Data, Augmentation, and Regularization in Vision Transformers](https://arxiv.org/abs/2106.10270) +* [Big Transfer (BiT): General Visual Representation Learning](https://arxiv.org/abs/1912.11370) +* [Deep Residual Learning for Image Recognition](https://arxiv.org/abs/1512.03385) +* [U-Net: Convolutional Networks for Biomedical Image Segmentation](https://arxiv.org/abs/1505.04597) +* [PCT: Point Cloud Transformer](https://arxiv.org/abs/2012.09688) +* [Universal Transformers](https://arxiv.org/abs/1807.03819) +* [PonderNet](https://arxiv.org/abs/2107.05407) +* [Masked Autoencoders Are Scalable Vision Learners](https://arxiv.org/abs/2111.06377) +* [Rethinking Attention with Performers](https://arxiv.org/abs/2009.14794) +* [(CenterNet) Objects as Points](https://arxiv.org/abs/1904.07850) +* [(SAM) Segment Anything](https://arxiv.org/abs/2304.02643) + + +More information can be found in [baseline models](https://github.com/google-research/scenic/tree/main/scenic/projects/baselines#scenic-baseline-models). + + +## Philosophy +*Scenic* aims to facilitate rapid prototyping of large-scale vision models. To +keep the code simple to understand and extend we prefer *forking and +copy-pasting over adding complexity or increasing abstraction*. Only when +functionality proves to be widely useful across many models and tasks it may be +upstreamed to Scenic's shared libraries. + + + +## Getting started +* See `projects/baselines/README.md` for a walk-through baseline models and + instructions on how to run the code. +* If you would like to contribute to *Scenic*, please check out the + [Philisophy](#philosophy), [Code structure](#code_structure) and + [Contributing](CONTRIBUTING.md) sections. + Should your contribution be a part of the shared libraries, please send us a + pull request! + + +### Quickstart +You will need Python 3.9 or later. Download the code from GitHub + +```shell +$ git clone https://github.com/google-research/scenic.git +$ cd scenic +$ pip install . +``` + +and run training for ViT on ImageNet: + +```shell +$ python scenic/main.py -- \ + --config=scenic/projects/baselines/configs/imagenet/imagenet_vit_config.py \ + --workdir=./ +``` + +Note that for specific projects and baselines, you might need to install extra +packages that are mentioned in their `README.md` or `requirements.txt` files. + +[Here](https://colab.research.google.com/github/google-research/scenic/blob/main/scenic/common_lib/colabs/scenic_playground.ipynb) +is also a minimal colab to train a simple feed-forward model using Scenic. + + +## Scenic component design +Scenic is designed to propose different levels of abstraction, to support +hosting projects that only require changing hyper-parameters by defining config +files, to those that need customization on the input pipeline, model +architecture, losses and metrics, and the training loop. To make this happen, +the code in Scenic is organized as either _project-level_ code, +which refers to customized code for specific projects or baselines or +_library-level_ code, which refers to common functionalities and general +patterns that are adapted by the majority of projects. The project-level +code lives in the `projects` directory. + +
+scenic design +
+ +### Library-level code +The goal is to keep the library-level code minimal and well-tested and to avoid +introducing extra abstractions to support minor use-cases. Shared libraries +provided by *Scenic* are split into: + +* `dataset_lib`: Implements IO pipelines for loading and pre-processing data + for common Computer Vision tasks and benchmarks (see "Tasks and Datasets" + section). All pipelines are designed to be scalable and support multi-host + and multi-device setups, taking care dividing data among multiple hosts, + incomplete batches, caching, pre-fetching, etc. +* `model_lib` : Provides + * several abstract model interfaces (e.g. `ClassificationModel` or + `SegmentationModel` in `model_lib.base_models`) with task-specific + losses and metrics; + * neural network layers in `model_lib.layers`, focusing on efficient + implementation of attention and transformer layers; + * accelerator-friendly implementations of bipartite matching + algorithms in `model_lib.matchers`. +* `train_lib`: Provides tools for constructing training loops and implements + several optimized trainers (classification trainer and segmentation trainer) + that can be forked for customization. +* `common_lib`: General utilities, like logging and debugging modules, + functionalities for processing raw data, etc. + +### Project-level code +Scenic supports the development of customized solutions for customized tasks and +data via the concept of "project". There is no one-fits-all recipe for how much +code should be re-used by a project. Projects can consist of only configs and +use the common models, trainers, task/data that live in library-level code, or +they can simply fork any of the mentioned functionalities and redefine, layers, +losses, metrics, logging methods, tasks, architectures, as well as training and +evaluation loops. The modularity of library-level code makes it flexible for +projects to fall placed on any spot in the "run-as-is" to "fully customized" +spectrum. + +Common baselines such as a ResNet and Vision Transformer (ViT) are implemented +in the [`projects/baselines`](https://github.com/google-research/scenic/tree/main/scenic/projects/baselines) +project. Forking models in this directory is a good starting point for new +projects. + + +## Citing Scenic +If you use Scenic, you can cite our [white paper](https://openaccess.thecvf.com/content/CVPR2022/html/Dehghani_Scenic_A_JAX_Library_for_Computer_Vision_Research_and_Beyond_CVPR_2022_paper.html). +Here is an example BibTeX entry: + +```bibtex +@InProceedings{dehghani2021scenic, + author = {Dehghani, Mostafa and Gritsenko, Alexey and Arnab, Anurag and Minderer, Matthias and Tay, Yi}, + title = {Scenic: A JAX Library for Computer Vision Research and Beyond}, + booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)}, + year = {2022}, + pages = {21393-21398} +} +``` + +_Disclaimer: This is not an official Google product._ diff --git a/__pycache__/owlv2_helper.cpython-310.pyc b/__pycache__/owlv2_helper.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac36385881d015df5b45ce98566c902cf791f321 Binary files /dev/null and b/__pycache__/owlv2_helper.cpython-310.pyc differ diff --git a/__pycache__/owlv2_helper.cpython-311.pyc b/__pycache__/owlv2_helper.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dca796e1a1f74a38fec9b06361c128d506f69819 Binary files /dev/null and b/__pycache__/owlv2_helper.cpython-311.pyc differ diff --git a/__pycache__/owlv2_helper_functions.cpython-310.pyc b/__pycache__/owlv2_helper_functions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99000791a4d0f83562b1cdba662dcbaac69325ca Binary files /dev/null and b/__pycache__/owlv2_helper_functions.cpython-310.pyc differ diff --git a/auto_bbox.py b/auto_bbox.py new file mode 100644 index 0000000000000000000000000000000000000000..0d0d695e515e8efda22e789f5ddf00b161ede54c --- /dev/null +++ b/auto_bbox.py @@ -0,0 +1,277 @@ +import os +import sys +import cv2 +import json +import glob +import argparse +import subprocess +from typing import List, Tuple, Dict, Any + +import numpy as np +from tqdm import tqdm + + +# ----------------- Args ----------------- +def parse_args(): + ap = argparse.ArgumentParser("OWLv2 detection on JPG folders (Top-K per image), multi-GPU.") + ap.add_argument("--input_dir", type=str, required=True, help="Root that contains subfolders of JPGs; if JPGs are directly under input_dir, it will be treated as a single set.") + ap.add_argument("--startswith", type=str, default="", help="Filter folder name prefix (or input_dir basename if no subfolders).") + ap.add_argument("--endswith", type=str, default="", help="Filter folder name ends (or input_dir basename if no subfolders).") + ap.add_argument("--output_dir", type=str, required=True) + ap.add_argument("--frame_stride", type=int, default=1, help="Sample every N-th image within a folder.") + ap.add_argument("--top_k", type=int, default=5) + ap.add_argument("--max_frames", type=int, default=0, help="Max processed images per folder; 0 means no limit.") + ap.add_argument("--num_workers", type=int, default=1, help="#GPUs/#workers") + ap.add_argument("--worker_idx", type=int, default=-1, help="internal; >=0 means child worker") + ap.add_argument("--shard_file", type=str, default="", help="internal; JSON with folder paths for this worker") + ap.add_argument("--scenic_root", type=str, default="/gz-data/Memory/owlv2/big_vision") + ap.add_argument("--checkpoint_path", type=str, default="/gz-data/Memory/owlv2/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b") + return ap.parse_args() + + +# ----------------- Utils ----------------- +def _has_jpgs(path: str) -> bool: + exts = ("*.jpg", "*.jpeg", "*.JPG", "*.JPEG") + for pat in exts: + if glob.glob(os.path.join(path, pat)): + return True + return False + + +def iter_image_dirs(input_dir: str, startswith: str, endswith: str) -> List[str]: + """ + Returns a list of directories to process. + - If input_dir contains subfolders: return subfolders that contain JPGs and match startswith. + - Else if input_dir itself contains JPGs and its basename matches startswith: return [input_dir]. + """ + input_dir = os.path.abspath(input_dir) + subs = sorted([p for p in glob.glob(os.path.join(input_dir, "*")) if os.path.isdir(p)]) + # Prefer subfolders if any exist and contain jpgs + dirs = [d for d in subs if os.path.basename(d).startswith(startswith) and os.path.basename(d).endswith(endswith) and _has_jpgs(d)] + if dirs: + return dirs + + # Fallback: treat input_dir itself as one set if it has jpgs + base_ok = os.path.basename(os.path.normpath(input_dir)).startswith(startswith) and os.path.basename(d).endswith(endswith) + if base_ok and _has_jpgs(input_dir): + return [input_dir] + return [] + + +def ensure_dir(p: str): + os.makedirs(p, exist_ok=True) + + +def draw_single_box(frame_bgr: np.ndarray, box: List[float], color=(0, 255, 0), thickness=2) -> np.ndarray: + x1, y1, x2, y2 = map(int, box) + out = frame_bgr.copy() + cv2.rectangle(out, (x1, y1), (x2, y2), color, thickness) + return out + + +def list_images_sorted(folder: str) -> List[str]: + pats = ["*.jpg", "*.jpeg", "*.JPG", "*.JPEG"] + files = [] + for pat in pats: + files.extend(glob.glob(os.path.join(folder, pat))) + # Sort by natural file name order + return sorted(files) + + +# ----------------- Worker logic (imports JAX/Scenic inside) ----------------- +def worker_run(args, dir_paths: List[str]): + import sys as _sys + if args.scenic_root not in _sys.path: + _sys.path.append(args.scenic_root) + + # Free TF GPU to JAX in this process (why: avoid TF reserving VRAM) + import tensorflow as tf + tf.config.experimental.set_visible_devices([], "GPU") + + from scenic.projects.owl_vit import configs + from scenic.projects.owl_vit import models + import jax + import functools + import owlv2_helper as helper # must be available in PYTHONPATH + + class OWLv2Objectness: + def __init__(self, top_k: int = 5): + self.top_k = top_k + self.config = configs.owl_v2_clip_b16.get_config(init_mode="canonical_checkpoint") + if args.checkpoint_path: + self.config.init_from.checkpoint_path = os.path.abspath(args.checkpoint_path) + + print("[OWLv2] checkpoint_path =", self.config.init_from.checkpoint_path) + + print("cp path:", self.config.init_from.checkpoint_path) + + self.module = models.TextZeroShotDetectionModule( + body_configs=self.config.model.body, + objectness_head_configs=self.config.model.objectness_head, + normalize=self.config.model.normalize, + box_bias=self.config.model.box_bias, + ) + self.variables = self.module.load_variables(self.config.init_from.checkpoint_path) + + + self.image_embedder = jax.jit( + functools.partial(self.module.apply, self.variables, train=False, method=self.module.image_embedder) + ) + self.objectness_predictor = jax.jit( + functools.partial(self.module.apply, self.variables, method=self.module.objectness_predictor) + ) + self.box_predictor = jax.jit( + functools.partial(self.module.apply, self.variables, method=self.module.box_predictor) + ) + + def detect(self, image_bgr: np.ndarray) -> List[Tuple[List[float], float]]: + image_rgb = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2RGB) + processed = helper.preprocess_images([image_rgb], self.config.dataset_configs.input_size)[0] + feature_map = self.image_embedder(processed[None, ...]) + b, h, w, d = feature_map.shape + image_features = feature_map.reshape(b, h * w, d) + + obj_logits = self.objectness_predictor(image_features)["objectness_logits"] + raw_boxes = self.box_predictor(image_features=image_features, feature_map=feature_map)["pred_boxes"] + + obj = np.array(obj_logits[0], dtype=np.float32) + raw_boxes = np.array(raw_boxes[0], dtype=np.float32) + boxes = helper.rescale_detection_box(raw_boxes, image_rgb) + + if len(obj) == 0: + return [] + + k = min(self.top_k, len(obj)) + thresh = np.partition(obj, -k)[-k] + + filtered: List[Tuple[List[float], float]] = [] + H, W = image_rgb.shape[:2] + for box, score in zip(boxes, obj): + if score < thresh: + continue + if helper.too_small(box) or helper.too_large(box, image_rgb): + continue + x1, y1, x2, y2 = box + x1 = max(0, min(float(x1), W - 1)) + y1 = max(0, min(float(y1), H - 1)) + x2 = max(0, min(float(x2), W - 1)) + y2 = max(0, min(float(y2), H - 1)) + filtered.append(([x1, y1, x2, y2], float(score))) + + kept_boxes = helper.remove_overlapping_bboxes([b for b, _ in filtered]) + + def _match_score(bb: List[float]) -> float: + arr = np.array([b for b, _ in filtered], dtype=np.float32) + idx = int(np.argmin(np.abs(arr - np.array(bb, dtype=np.float32)).sum(axis=1))) + return filtered[idx][1] + + return [(bb, _match_score(bb)) for bb in kept_boxes] + + detector = OWLv2Objectness(top_k=args.top_k) + + for dpath in tqdm(dir_paths, desc=f"Worker{args.worker_idx}", unit="set"): + stem = os.path.basename(os.path.normpath(dpath)) + images = list_images_sorted(dpath) + if not images: + print(f"[WARN][w{args.worker_idx}] No JPGs under: {dpath}") + continue + + saved_cnt = 0 + pbar = tqdm(total=len(images), desc=f"{stem}[w{args.worker_idx}]", unit="img", leave=False) + + for idx, ipath in enumerate(images): + pbar.update(1) + if args.frame_stride > 1 and (idx % args.frame_stride) != 0: + continue + + frame = cv2.imread(ipath, cv2.IMREAD_COLOR) + if frame is None: + print(f"[WARN][w{args.worker_idx}] Cannot read: {ipath}") + continue + + boxes_scores = detector.detect(frame) + if boxes_scores: + boxes_scores = sorted(boxes_scores, key=lambda x: x[1], reverse=True)[:args.top_k] + + fname = os.path.basename(ipath) + for i, (box, score) in enumerate(boxes_scores): + out_dir = os.path.join(args.output_dir, stem, f"object_{i}") + ensure_dir(out_dir) + vis = draw_single_box(frame, box, color=(0, 255, 0), thickness=2) + cv2.imwrite(os.path.join(out_dir, fname), vis) + + saved_cnt += 1 + if args.max_frames and saved_cnt >= args.max_frames: + break + + pbar.close() + + +# ----------------- Master ----------------- +def main(): + args = parse_args() + + # Child worker path + if args.worker_idx >= 0: + if not args.shard_file or not os.path.exists(args.shard_file): + raise RuntimeError("Worker requires --shard_file with JSON list of folder paths.") + with open(args.shard_file, "r", encoding="utf-8") as f: + dir_paths = json.load(f) + worker_run(args, dir_paths) + return + + # Master path + dir_paths = iter_image_dirs(args.input_dir, args.startswith, args.endswith) + if not dir_paths: + print(f"[INFO] No JPG folders (or JPGs) startwith '{args.startswith}' and endwith '{args.endswith}' under {args.input_dir}") + return + + num_workers = max(1, int(args.num_workers)) + shards: List[List[str]] = [[] for _ in range(num_workers)] + for i, d in enumerate(dir_paths): + shards[i % num_workers].append(d) + + procs = [] + tmp_dir = os.path.join(args.output_dir, "_shards_tmp") + ensure_dir(tmp_dir) + + for w in range(num_workers): + shard_path = os.path.join(tmp_dir, f"shard_{w}.json") + with open(shard_path, "w", encoding="utf-8") as f: + json.dump(shards[w], f, ensure_ascii=False, indent=0) + + # Bind GPU: cycle through available GPU ids [0..num_workers-1] + env = os.environ.copy() + env["CUDA_VISIBLE_DEVICES"] = str(w) # one GPU per worker + + cmd = [ + sys.executable, __file__, + "--input_dir", args.input_dir, + "--startswith", args.startswith, + "--output_dir", args.output_dir, + "--frame_stride", str(args.frame_stride), + "--top_k", str(args.top_k), + "--max_frames", str(args.max_frames), + "--num_workers", str(num_workers), + "--worker_idx", str(w), + "--shard_file", shard_path, + "--scenic_root", args.scenic_root, + "--checkpoint_path", args.checkpoint_path, + ] + print(f"[Master] Launch worker {w}: GPU={env['CUDA_VISIBLE_DEVICES']} folders={len(shards[w])}") + procs.append(subprocess.Popen(cmd, env=env)) + + # wait + rc = 0 + for p in procs: + p.wait() + rc |= p.returncode + + if rc != 0: + print("[Master] Some workers failed. Return code:", rc) + else: + print("[Master] All workers done. Output:", args.output_dir) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/big_vision/.gitignore b/big_vision/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ed8ebf583f771da9150c35db3955987b7d757904 --- /dev/null +++ b/big_vision/.gitignore @@ -0,0 +1 @@ +__pycache__ \ No newline at end of file diff --git a/big_vision/CONTRIBUTING.md b/big_vision/CONTRIBUTING.md new file mode 100644 index 0000000000000000000000000000000000000000..5e5644093c15ecd61b0d0308990855dcbb320a2e --- /dev/null +++ b/big_vision/CONTRIBUTING.md @@ -0,0 +1,26 @@ +# How to Contribute + +At this time we do not plan to accept non-trivial contributions. The main +purpose of this codebase is to allow the community to reproduce results from our +publications. + +You are however free to start a fork of the project for your purposes as +permitted by the license. + +## Contributor License Agreement + +Contributions to this project must be accompanied by a Contributor License +Agreement (CLA). You (or your employer) retain the copyright to your +contribution; this simply gives us permission to use and redistribute your +contributions as part of the project. Head over to + to see your current agreements on file or +to sign a new one. + +You generally only need to submit a CLA once, so if you've already submitted one +(even if it was for a different project), you probably don't need to do it +again. + +## Community Guidelines + +This project follows +[Google's Open Source Community Guidelines](https://opensource.google/conduct/). diff --git a/big_vision/LICENSE b/big_vision/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..f49a4e16e68b128803cc2dcea614603632b04eac --- /dev/null +++ b/big_vision/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/big_vision/README.md b/big_vision/README.md new file mode 100644 index 0000000000000000000000000000000000000000..289fd7401a5ad6be14b6f7f8d8cf3b157a6dfc9f --- /dev/null +++ b/big_vision/README.md @@ -0,0 +1,499 @@ +# Big Vision + +This codebase is designed for training large-scale vision models using +[Cloud TPU VMs](https://cloud.google.com/blog/products/compute/introducing-cloud-tpu-vms) +or GPU machines. It is based on [Jax](https://github.com/google/jax)/[Flax](https://github.com/google/flax) +libraries, and uses [tf.data](https://www.tensorflow.org/guide/data) and +[TensorFlow Datasets](https://www.tensorflow.org/datasets) for scalable and +reproducible input pipelines. + +The open-sourcing of this codebase has two main purposes: +1. Publishing the code of research projects developed in this codebase (see a + list below). +2. Providing a strong starting point for running large-scale vision experiments + on GPU machines and Google Cloud TPUs, which should scale seamlessly and + out-of-the box from a single TPU core to a distributed setup with up to 2048 + TPU cores. + +`big_vision` aims to support research projects at Google. We are unlikely to +work on feature requests or accept external contributions, unless they were +pre-approved (ask in an issue first). For a well-supported transfer-only +codebase, see also [vision_transformer](https://github.com/google-research/vision_transformer). + +Note that `big_vision` is quite dynamic codebase and, while we intend to keep +the core code fully-functional at all times, we can not guarantee timely updates +of the project-specific code that lives in the `.../proj/...` subfolders. +However, we provide a [table](#project-specific-commits) with last known +commits where specific projects were known to work. + +The following research projects were originally conducted in the `big_vision` +codebase: + +### Architecture research + +- [An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale](https://arxiv.org/abs/2010.11929), by + Alexey Dosovitskiy*, Lucas Beyer*, Alexander Kolesnikov*, Dirk Weissenborn*, + Xiaohua Zhai*, Thomas Unterthiner, Mostafa Dehghani, Matthias Minderer, + Georg Heigold, Sylvain Gelly, Jakob Uszkoreit, and Neil Houlsby* +- [Scaling Vision Transformers](https://arxiv.org/abs/2106.04560), by + Xiaohua Zhai*, Alexander Kolesnikov*, Neil Houlsby, and Lucas Beyer*\ + Resources: [config](big_vision/configs/proj/scaling_laws/train_vit_g.py). +- [How to train your ViT? Data, Augmentation, and Regularization in Vision Transformers](https://arxiv.org/abs/2106.10270), by + Andreas Steiner*, Alexander Kolesnikov*, Xiaohua Zhai*, Ross Wightman, + Jakob Uszkoreit, and Lucas Beyer* +- [MLP-Mixer: An all-MLP Architecture for Vision](https://arxiv.org/abs/2105.01601), by + Ilya Tolstikhin*, Neil Houlsby*, Alexander Kolesnikov*, Lucas Beyer*, + Xiaohua Zhai, Thomas Unterthiner, Jessica Yung, Andreas Steiner, + Daniel Keysers, Jakob Uszkoreit, Mario Lucic, Alexey Dosovitskiy\ + Resources: [config](big_vision/configs/mlp_mixer_i1k.py). +- [Better plain ViT baselines for ImageNet-1k](https://arxiv.org/abs/2205.01580), by + Lucas Beyer, Xiaohua Zhai, Alexander Kolesnikov\ + Resources: [config](big_vision/configs/vit_s16_i1k.py) +- [UViM: A Unified Modeling Approach for Vision with Learned Guiding Codes](https://arxiv.org/abs/2205.10337), by + Alexander Kolesnikov^*, André Susano Pinto^*, Lucas Beyer*, Xiaohua Zhai*, Jeremiah Harmsen*, Neil Houlsby*\ + Resources: [readme](big_vision/configs/proj/uvim/README.md), [configs](big_vision/configs/proj/uvim), [colabs](big_vision/configs/proj/uvim). +- [FlexiViT: One Model for All Patch Sizes](https://arxiv.org/abs/2212.08013), by + Lucas Beyer*, Pavel Izmailov*, Alexander Kolesnikov*, Mathilde Caron*, Simon + Kornblith*, Xiaohua Zhai*, Matthias Minderer*, Michael Tschannen*, Ibrahim + Alabdulmohsin*, Filip Pavetic*\ + Resources: [readme](big_vision/configs/proj/flexivit/README.md), [configs](big_vision/configs/proj/flexivit). +- [Dual PatchNorm](https://arxiv.org/abs/2302.01327), by Manoj Kumar, Mostafa Dehghani, Neil Houlsby. +- [Getting ViT in Shape: Scaling Laws for Compute-Optimal Model Design](https://arxiv.org/abs/2305.13035), by + Ibrahim Alabdulmohsin*, Xiaohua Zhai*, Alexander Kolesnikov, Lucas Beyer*. +- (partial) [Scaling Vision Transformers to 22 Billion Parameters](https://arxiv.org/abs/2302.05442), by + Mostafa Dehghani*, Josip Djolonga*, Basil Mustafa*, Piotr Padlewski*, Jonathan Heek*, *wow many middle authors*, Neil Houlsby*. +- (partial) [Finite Scalar Quantization: VQ-VAE Made Simple](https://arxiv.org/abs/2309.15505), by + Fabian Mentzer, David Minnen, Eirikur Agustsson, Michael Tschannen. +- [GIVT: Generative Infinite-Vocabulary Transformers](https://arxiv.org/abs/2312.02116), by + Michael Tschannen, Cian Eastwood, Fabian Mentzer.\ + Resources: [readme](big_vision/configs/proj/givt/README.md), [config](big_vision/configs/proj/givt/givt_imagenet2012.py), [colab](https://colab.research.google.com/github/google-research/big_vision/blob/main/big_vision/configs/proj/givt/givt_demo_colab.ipynb). +- [Unified Auto-Encoding with Masked Diffusion](https://arxiv.org/abs/2406.17688), by + Philippe Hansen-Estruch, Sriram Vishwanath, Amy Zhang, Manan Tomar. + + +### Multimodal research + +- [LiT: Zero-Shot Transfer with Locked-image Text Tuning](https://arxiv.org/abs/2111.07991), by + Xiaohua Zhai*, Xiao Wang*, Basil Mustafa*, Andreas Steiner*, Daniel Keysers, + Alexander Kolesnikov, and Lucas Beyer*\ + Resources: [trainer](big_vision/trainers/proj/image_text/contrastive.py), [config](big_vision/configs/proj/image_text/lit_coco.py), [colab](https://colab.research.google.com/github/google-research/big_vision/blob/main/big_vision/configs/proj/image_text/lit.ipynb). +- [Image-and-Language Understanding from Pixels Only](https://arxiv.org/abs/2212.08045), by + Michael Tschannen, Basil Mustafa, Neil Houlsby\ + Resources: [readme](big_vision/configs/proj/clippo/README.md), [config](big_vision/configs/proj/clippo/train_clippo.py), [colab](https://colab.research.google.com/github/google-research/big_vision/blob/main/big_vision/configs/proj/clippo/clippo_colab.ipynb). +- [Sigmoid Loss for Language Image Pre-Training](https://arxiv.org/abs/2303.15343), by + Xiaohua Zhai*, Basil Mustafa, Alexander Kolesnikov, Lucas Beyer*\ + Resources: [colab and models](https://colab.research.google.com/github/google-research/big_vision/blob/main/big_vision/configs/proj/image_text/SigLIP_demo.ipynb), code TODO. +- [A Study of Autoregressive Decoders for Multi-Tasking in Computer Vision](https://arxiv.org/abs/2303.17376), by + Lucas Beyer*, Bo Wan*, Gagan Madan*, Filip Pavetic*, Andreas Steiner*, Alexander Kolesnikov, André Susano Pinto, Emanuele Bugliarello, Xiao Wang, Qihang Yu, Liang-Chieh Chen, Xiaohua Zhai*. +- [Image Captioners Are Scalable Vision Learners Too](https://arxiv.org/abs/2306.07915), by + Michael Tschannen*, Manoj Kumar*, Andreas Steiner*, Xiaohua Zhai, Neil Houlsby, Lucas Beyer*.\ + Resources: [readme](big_vision/configs/proj/cappa/README.md), [config](big_vision/configs/proj/cappa/pretrain.py), [model](big_vision/models/proj/cappa/cappa.py). +- [Three Towers: Flexible Contrastive Learning with Pretrained Image Models](https://arxiv.org/abs/2305.16999), by Jannik Kossen, Mark Collier, Basil Mustafa, Xiao Wang, Xiaohua Zhai, Lucas Beyer, Andreas Steiner, Jesse Berent, Rodolphe Jenatton, Efi Kokiopoulou. +- (partial) [PaLI: A Jointly-Scaled Multilingual Language-Image Model](https://arxiv.org/abs/2209.06794), by Xi Chen, Xiao Wang, Soravit Changpinyo, *wow so many middle authors*, Anelia Angelova, Xiaohua Zhai, Neil Houlsby, Radu Soricut. +- (partial) [PaLI-3 Vision Language Models: Smaller, Faster, Stronger](https://arxiv.org/abs/2310.09199), by Xi Chen, Xiao Wang, Lucas Beyer, Alexander Kolesnikov, Jialin Wu, Paul Voigtlaender, Basil Mustafa, Sebastian Goodman, Ibrahim Alabdulmohsin, Piotr Padlewski, Daniel Salz, Xi Xiong, Daniel Vlasic, Filip Pavetic, Keran Rong, Tianli Yu, Daniel Keysers, Xiaohua Zhai, Radu Soricut. +- [LocCa](https://arxiv.org/abs/2403.19596), by + Bo Wan, Michael Tschannen, Yongqin Xian, Filip Pavetic, Ibrahim Alabdulmohsin, Xiao Wang, André Susano Pinto, Andreas Steiner, Lucas Beyer, Xiaohua Zhai. +- [PaliGemma](https://arxiv.org/abs/2407.07726), + [PaliGemma 2](https://arxiv.org/abs/2412.03555), by *wow many authors*.\ +- Resources: [readme](big_vision/configs/proj/paligemma/README.md), + [model](big_vision/models/proj/paligemma/paligemma.py), + [transfer configs](big_vision/configs/proj/paligemma/transfers), + [datasets](big_vision/datasets), + [CountBenchQA](big_vision/datasets/countbenchqa/data/countbench_paired_questions.json). + +### Training + +- [Knowledge distillation: A good teacher is patient and consistent](https://arxiv.org/abs/2106.05237), by + Lucas Beyer*, Xiaohua Zhai*, Amélie Royer*, Larisa Markeeva*, Rohan Anil, + and Alexander Kolesnikov*\ + Resources: [README](big_vision/configs/proj/distill/README.md), [trainer](big_vision/trainers/proj/distill/distill.py), [colab](https://colab.research.google.com/drive/1nMykzUzsfQ_uAxfj3k35DYsATnG_knPl?usp=sharing). +- [Sharpness-Aware Minimization for Efficiently Improving Generalization](https://arxiv.org/abs/2010.01412), by + Pierre Foret, Ariel Kleiner, Hossein Mobahi, Behnam Neyshabur +- [Surrogate Gap Minimization Improves Sharpness-Aware Training](https://arxiv.org/abs/2203.08065), by Juntang Zhuang, Boqing Gong, Liangzhe Yuan, Yin Cui, Hartwig Adam, Nicha Dvornek, Sekhar Tatikonda, James Duncan and Ting Liu \ + Resources: [trainer](big_vision/trainers/proj/gsam/gsam.py), [config](big_vision/configs/proj/gsam/vit_i1k_gsam_no_aug.py) [reproduced results](https://github.com/google-research/big_vision/pull/8#pullrequestreview-1078557411) +- [Tuning computer vision models with task rewards](https://arxiv.org/abs/2302.08242), by + André Susano Pinto*, Alexander Kolesnikov*, Yuge Shi, Lucas Beyer, Xiaohua Zhai. +- (partial) [VeLO: Training Versatile Learned Optimizers by Scaling Up](https://arxiv.org/abs/2211.09760) by + Luke Metz, James Harrison, C. Daniel Freeman, Amil Merchant, Lucas Beyer, James Bradbury, Naman Agrawal, Ben Poole, Igor Mordatch, Adam Roberts, Jascha Sohl-Dickstein. + +### Misc + +- [Are we done with ImageNet?](https://arxiv.org/abs/2006.07159), by + Lucas Beyer*, Olivier J. Hénaff*, Alexander Kolesnikov*, Xiaohua Zhai*, Aäron van den Oord*. +- [No Filter: Cultural and Socioeconomic Diversity in Contrastive Vision-Language Models](https://arxiv.org/abs/2405.13777), by + Angéline Pouget, Lucas Beyer, Emanuele Bugliarello, Xiao Wang, Andreas Peter Steiner, Xiaohua Zhai, Ibrahim Alabdulmohsin. + +# Codebase high-level organization and principles in a nutshell + +The main entry point is a trainer module, which typically does all the +boilerplate related to creating a model and an optimizer, loading the data, +checkpointing and training/evaluating the model inside a loop. We provide the +canonical trainer `train.py` in the root folder. Normally, individual projects +within `big_vision` fork and customize this trainer. + +All models, evaluators and preprocessing operations live in the corresponding +subdirectories and can often be reused between different projects. We encourage +compatible APIs within these directories to facilitate reusability, but it is +not strictly enforced, as individual projects may need to introduce their custom +APIs. + +We have a powerful configuration system, with the configs living in the +`configs/` directory. Custom trainers and modules can directly extend/modify +the configuration options. + +Project-specific code resides in the `.../proj/...` namespace. It is not always +possible to keep project-specific in sync with the core `big_vision` libraries, +Below we provide the [last known commit](#project-specific-commits) +for each project where the project code is expected to work. + +Training jobs are robust to interruptions and will resume seamlessly from the +last saved checkpoint (assuming a user provides the correct `--workdir` path). + +Each configuration file contains a comment at the top with a `COMMAND` snippet +to run it, and some hint of expected runtime and results. See below for more +details, but generally speaking, running on a GPU machine involves calling +`python -m COMMAND` while running on TPUs, including multi-host, involves + +``` +gcloud compute tpus tpu-vm ssh $NAME --zone=$ZONE --worker=all + --command "bash big_vision/run_tpu.sh COMMAND" +``` + +See instructions below for more details on how to run `big_vision` code on a +GPU machine or Google Cloud TPU. + +By default we write checkpoints and logfiles. The logfiles are a list of JSON +objects, and we provide a short and straightforward [example colab to read +and display the logs and checkpoints](https://colab.research.google.com/drive/1R_lvV542WUp8Q2y8sbyooZOGCplkn7KI?usp=sharing). + +# Current and future contents + +The first release contains the core part of pre-training, transferring, and +evaluating classification models at scale on Cloud TPU VMs. + +We have since added the following key features and projects: +- Contrastive Image-Text model training and evaluation as in LiT and CLIP. +- Patient and consistent distillation. +- Scaling ViT. +- MLP-Mixer. +- UViM. + +Features and projects we plan to release in the near future, in no particular +order: +- ImageNet-21k in TFDS. +- Loading misc public models used in our publications (NFNet, MoCov3, DINO). +- Memory-efficient Polyak-averaging implementation. +- Advanced JAX compute and memory profiling. We are using internal tools for + this, but may eventually add support for the publicly available ones. + +We will continue releasing code of our future publications developed within +`big_vision` here. + +### Non-content + +The following exist in the internal variant of this codebase, and there is no +plan for their release: +- Regular regression tests for both quality and speed. They rely heavily on + internal infrastructure. +- Advanced logging, monitoring, and plotting of experiments. This also relies + heavily on internal infrastructure. However, we are open to ideas on this + and may add some in the future, especially if implemented in a + self-contained manner. +- Not yet published, ongoing research projects. + + +# GPU Setup + +We first discuss how to setup and run `big_vision` on a (local) GPU machine, +and then discuss the setup for Cloud TPUs. Note that data preparation step for +(local) GPU setup can be largely reused for the Cloud TPU setup. While the +instructions skip this for brevity, we highly recommend using a +[virtual environment](https://docs.python.org/3/library/venv.html) when +installing python dependencies. + +## Setting up python packages + +The first step is to checkout `big_vision` and install relevant python +dependencies: + +``` +git clone https://github.com/google-research/big_vision +cd big_vision/ +pip3 install --upgrade pip +pip3 install -r big_vision/requirements.txt +``` + +The latest version of `jax` library can be fetched as + +``` +pip3 install --upgrade "jax[cuda]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html +``` + +You may need a different `jax` package, depending on CUDA and cuDNN libraries +installed on your machine. Please consult +[official jax documentation](https://github.com/google/jax#pip-installation-gpu-cuda) +for more information. + +## Preparing tfds data + +For unified and reproducible access to standard datasets we opted to use the +`tensorflow_datasets` (`tfds`) library. It requires each dataset to be +downloaded, preprocessed and then to be stored on a hard drive (or, if you use +"Google Cloud", preferably stored in a "GCP bucket".). + +Many datasets can be downloaded and preprocessed automatically when used +for the first time. Nevertheless, we intentionally disable this feature and +recommend doing dataset preparation step separately, ahead of the first run. It +will make debugging easier if problems arise and some datasets, like +`imagenet2012`, require manually downloaded data. + +Most of the datasets, e.g. `cifar100`, `oxford_iiit_pet` or `imagenet_v2` +can be fully automatically downloaded and prepared by running + +``` +cd big_vision/ +python3 -m big_vision.tools.download_tfds_datasets cifar100 oxford_iiit_pet imagenet_v2 +``` + +A full list of datasets is available at [this link](https://www.tensorflow.org/datasets/catalog/overview#all_datasets). + +Some datasets, like `imagenet2012` or `imagenet2012_real`, require the data to +be downloaded manually and placed into `$TFDS_DATA_DIR/downloads/manual/`, +which defaults to `~/tensorflow_datasets/downloads/manual/`. For example, for +`imagenet2012` and `imagenet2012_real` one needs to place the official +`ILSVRC2012_img_train.tar` and `ILSVRC2012_img_val.tar` files in that directory +and then run +`python3 -m big_vision.tools.download_tfds_datasets imagenet2012 imagenet2012_real` +(which may take ~1 hour). + +If you use `Google Cloud` and, TPUs in particular, you can then upload +the preprocessed data (stored in `$TFDS_DATA_DIR`) to +"Google Cloud Bucket" and use the bucket on any of your (TPU) virtual +machines to access the data. + +## Running on a GPU machine + +Finally, after installing all python dependencies and preparing `tfds` data, +the user can run the job using config of their choice, e.g. to train `ViT-S/16` +model on ImageNet data, one should run the following command: + +``` +python3 -m big_vision.train --config big_vision/configs/vit_s16_i1k.py --workdir workdirs/`date '+%m-%d_%H%M'` +``` + +or to train MLP-Mixer-B/16, run (note the `gpu8` config param that reduces the default batch size and epoch count): + +``` +python3 -m big_vision.train --config big_vision/configs/mlp_mixer_i1k.py:gpu8 --workdir workdirs/`date '+%m-%d_%H%M'` +``` + +# Cloud TPU VM setup + +## Create TPU VMs + +To create a single machine with 8 TPU cores, follow the following Cloud TPU JAX +document: +https://cloud.google.com/tpu/docs/run-calculation-jax + +To support large-scale vision research, more cores with multiple hosts are +recommended. Below we provide instructions on how to do it. + +First, create some useful variables, which we be reused: + +``` +export NAME= +export ZONE= +export GS_BUCKET_NAME= +``` + +The following command line will create TPU VMs with 32 cores, +4 hosts. + +``` +gcloud compute tpus tpu-vm create $NAME --zone $ZONE --accelerator-type v3-32 --version tpu-ubuntu2204-base +``` + +## Install `big_vision` on TPU VMs + +Fetch the `big_vision` repository, copy it to all TPU VM hosts, and install +dependencies. + +``` +git clone https://github.com/google-research/big_vision +gcloud compute tpus tpu-vm scp --recurse big_vision/big_vision $NAME: --zone=$ZONE --worker=all +gcloud compute tpus tpu-vm ssh $NAME --zone=$ZONE --worker=all --command "bash big_vision/run_tpu.sh" +``` + +## Download and prepare TFDS datasets + +We recommend preparing `tfds` data locally as described above and then uploading +the data to `Google Cloud` bucket. However, if you prefer, the datasets which +do not require manual downloads can be prepared automatically using a TPU +machine as described below. Note that TPU machines have only 100 GB of disk +space, and multihost TPU slices do not allow for external disks to be attached +in a write mode, so the instructions below may not work for preparing large +datasets. As yet another alternative, we provide instructions +[on how to prepare `tfds` data on CPU-only GCP machine](#preparing-tfds-data-on-a-standalone-gcp-cpu-machine). + +Specifically, the seven TFDS datasets used during evaluations will be generated +under `~/tensorflow_datasets` on TPU machine with this command: + +``` +gcloud compute tpus tpu-vm ssh $NAME --zone=$ZONE --worker=0 --command "TFDS_DATA_DIR=~/tensorflow_datasets bash big_vision/run_tpu.sh big_vision.tools.download_tfds_datasets cifar10 cifar100 oxford_iiit_pet oxford_flowers102 cars196 dtd uc_merced" +``` + +You can then copy the datasets to GS bucket, to make them accessible to all TPU workers. + +``` +gcloud compute tpus tpu-vm ssh $NAME --zone=$ZONE --worker=0 --command "rm -r ~/tensorflow_datasets/downloads && gsutil cp -r ~/tensorflow_datasets gs://$GS_BUCKET_NAME" +``` + +If you want to integrate other public or custom datasets, i.e. imagenet2012, +please follow [the official guideline](https://www.tensorflow.org/datasets/catalog/overview). + +## Pre-trained models + +For the full list of pre-trained models check out the `load` function defined in +the same module as the model code. And for example config on how to use these +models, see `configs/transfer.py`. + +## Run the transfer script on TPU VMs + +The following command line fine-tunes a pre-trained `vit-i21k-augreg-b/32` model +on `cifar10` dataset. + +``` +gcloud compute tpus tpu-vm ssh $NAME --zone=$ZONE --worker=all --command "TFDS_DATA_DIR=gs://$GS_BUCKET_NAME/tensorflow_datasets bash big_vision/run_tpu.sh big_vision.train --config big_vision/configs/transfer.py:model=vit-i21k-augreg-b/32,dataset=cifar10,crop=resmall_crop --workdir gs://$GS_BUCKET_NAME/big_vision/workdir/`date '+%m-%d_%H%M'` --config.lr=0.03" +``` + +## Run the train script on TPU VMs + +To train your own big_vision models on a large dataset, +e.g. `imagenet2012` ([prepare the TFDS dataset](https://www.tensorflow.org/datasets/catalog/imagenet2012)), +run the following command line. + +``` +gcloud compute tpus tpu-vm ssh $NAME --zone=$ZONE --worker=all --command "TFDS_DATA_DIR=gs://$GS_BUCKET_NAME/tensorflow_datasets bash big_vision/run_tpu.sh big_vision.train --config big_vision/configs/bit_i1k.py --workdir gs://$GS_BUCKET_NAME/big_vision/workdir/`date '+%m-%d_%H%M'`" +``` + +## FSDP training. + +`big_vision` supports flexible parameter and model sharding strategies. +Currently, we support a popular FSDP sharding via a simple config change, see [this config example](big_vision/configs/transfer.py). +For example, to run FSDP finetuning of a pretrained ViT-L model, run the following command (possible adjusting batch size depending on your hardware): + +``` +gcloud compute tpus tpu-vm ssh $NAME --zone=$ZONE --worker=all --command "TFDS_DATA_DIR=gs://$GS_BUCKET_NAME/tensorflow_datasets bash big_vision/run_tpu.sh big_vision.train --config big_vision/configs/transfer.py:model=vit-i21k-augreg-l/16,dataset=oxford_iiit_pet,crop=resmall_crop,fsdp=True,batch_size=256 --workdir gs://$GS_BUCKET_NAME/big_vision/workdir/`date '+%m-%d_%H%M'` --config.lr=0.03" +``` + +## Image-text training with SigLIP. + +A minimal example that uses public `coco` captions data: + +``` +gcloud compute tpus tpu-vm ssh $NAME --zone=$ZONE --worker=all --command "TFDS_DATA_DIR=gs://$GS_BUCKET_NAME/tensorflow_datasets bash big_vision/run_tpu.sh big_vision.trainers.proj.image_text.siglip --config big_vision/configs/proj/image_text/siglip_lit_coco.py --workdir gs://$GS_BUCKET_NAME/big_vision/`date '+%Y-%m-%d_%H%M'`" +``` + + + +## Sometimes useful gcloud commands + +- Destroy the TPU machines: `gcloud compute tpus tpu-vm delete $NAME --zone $ZONE` +- Remove all big_vision-related folders on all hosts: `gcloud compute tpus tpu-vm ssh $NAME --zone $ZONE --worker=all --command 'rm -rf ~/big_vision ~/bv_venv'` + +## Preparing `tfds` data on a standalone GCP CPU machine. + +First create a new machine and a disk (feel free to adjust exact machine type and disk settings/capacity): + +``` +export NAME_CPU_HOST= +export NAME_DISK= +gcloud compute instances create $NAME_CPU_HOST --machine-type c3-standard-22 --zone $ZONE --image-family ubuntu-2204-lts --image-project ubuntu-os-cloud +gcloud compute disks create $NAME_DISK --size 1000GB --zone $ZONE --type pd-balanced +``` + +Now attach the disk to the newly create machine: + +``` +gcloud compute instances attach-disk $NAME_CPU_HOST --disk $NAME_DISK --zone $ZONE +``` + +Next, `ssh` to the machine `gcloud compute ssh $NAME_CPU_HOST --zone=$ZONE` and +[follow instructions to format and mount the disk](https://cloud.google.com/compute/docs/disks/format-mount-disk-linux). +Let's assume it was mounted to `/mnt/disks/tfds`. + +Almost there, now clone and set up `big_vision`: + +``` +gcloud compute ssh $NAME_CPU_HOST --zone=$ZONE --command "git clone https://github.com/google-research/big_vision.git && cd big_vision && sh big_vision/run_tpu.sh" +``` + +Finally, prepare the dataset (e.g. `coco_captions`) using the utility script and +copy the result to you google cloud bucket: + +``` +gcloud compute ssh $NAME_CPU_HOST --zone=$ZONE --command "cd big_vision && TFDS_DATA_DIR=/mnt/disks/tfds/tensorflow_datasets bash big_vision/run_tpu.sh big_vision.tools.download_tfds_datasets coco_captions" +gcloud compute ssh $NAME_CPU_HOST --zone=$ZONE --command "rm -rf /mnt/disks/tfds/tensorflow_datasets/downloads && gsutil cp -r /mnt/disks/tfds/tensorflow_datasets gs://$GS_BUCKET_NAME" +``` + + +# ViT baseline + +We provide a well-tuned ViT-S/16 baseline in the config file named +`vit_s16_i1k.py`. It achieves 76.5% accuracy on ImageNet validation split in +90 epochs of training, being a strong and simple starting point for research +on the ViT models. + +Please see our [arXiv note](https://arxiv.org/abs/2205.01580) for more details +and if this baseline happens to by useful for your research, consider citing + +``` +@article{vit_baseline, + url = {https://arxiv.org/abs/2205.01580}, + author = {Beyer, Lucas and Zhai, Xiaohua and Kolesnikov, Alexander}, + title = {Better plain ViT baselines for ImageNet-1k}, + journal={arXiv preprint arXiv:2205.01580}, + year = {2022}, +} +``` + +# Project specific commits + +The last known commit where the specific project code is expected to work. The +core code and configs are expected to work at head. + +| Project | Commit | +|------------|-----------------------------------------------------------------------------------------------| +| UViM | https://github.com/google-research/big_vision/commit/21bd6ebe253f070f584d8b777ad76f4abce51bef | +| image_text | https://github.com/google-research/big_vision/commit/8921d5141504390a8a4f7b2dacb3b3c042237290 | +| distill | https://github.com/google-research/big_vision/commit/2f3f493af048dbfd97555ff6060f31a0e686f17f | +| GSAM | WIP | +| CLIPPO | https://github.com/google-research/big_vision/commit/fd2d3bd2efc9d89ea959f16cd2f58ae8a495cd44 | +| CapPa | https://github.com/google-research/big_vision/commit/7ace659452dee4b68547575352c022a2eef587a5 | +| GIVT | https://github.com/google-research/big_vision/commit/0cb70881dd33b3343b769347dc19793c4994b8cb | + +# Citing the codebase + +If you found this codebase useful for your research, please consider using +the following BibTEX to cite it: + +``` +@misc{big_vision, + author = {Beyer, Lucas and Zhai, Xiaohua and Kolesnikov, Alexander}, + title = {Big Vision}, + year = {2022}, + publisher = {GitHub}, + journal = {GitHub repository}, + howpublished = {\url{https://github.com/google-research/big_vision}} +} +``` + +# Disclaimer + +This is not an official Google Product. + +# License + +Unless explicitly noted otherwise, everything in the big_vision codebase +(including models and colabs) is released under the Apache2 license. +See the LICENSE file for the full license text. diff --git a/big_vision/__init__.py b/big_vision/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/__pycache__/__init__.cpython-310.pyc b/big_vision/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9fefff48059784f829cb5ea47e83db122346ab18 Binary files /dev/null and b/big_vision/__pycache__/__init__.cpython-310.pyc differ diff --git a/big_vision/__pycache__/__init__.cpython-311.pyc b/big_vision/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c08555e3b958664bf5f8d89dec1d6071bfeaed3b Binary files /dev/null and b/big_vision/__pycache__/__init__.cpython-311.pyc differ diff --git a/big_vision/__pycache__/__init__.cpython-312.pyc b/big_vision/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a2ae77ff4e09d02109eca22de56b5333c0646ee7 Binary files /dev/null and b/big_vision/__pycache__/__init__.cpython-312.pyc differ diff --git a/big_vision/__pycache__/utils.cpython-310.pyc b/big_vision/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2bba7a9fe1938cca410ff74937667e98bdffcdfd Binary files /dev/null and b/big_vision/__pycache__/utils.cpython-310.pyc differ diff --git a/big_vision/__pycache__/utils.cpython-311.pyc b/big_vision/__pycache__/utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3eb7c5e4f492dc216e6163d2fd2ecc046bb82574 Binary files /dev/null and b/big_vision/__pycache__/utils.cpython-311.pyc differ diff --git a/big_vision/__pycache__/utils.cpython-312.pyc b/big_vision/__pycache__/utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d8e9a5d9e49d6b8fcc1746decf2d01dce165cc2 Binary files /dev/null and b/big_vision/__pycache__/utils.cpython-312.pyc differ diff --git a/big_vision/configs/__init__.py b/big_vision/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/configs/bit_i1k.py b/big_vision/configs/bit_i1k.py new file mode 100644 index 0000000000000000000000000000000000000000..8bd53c318b108bab483923a95e8d3c0df42d709d --- /dev/null +++ b/big_vision/configs/bit_i1k.py @@ -0,0 +1,102 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Pre-training BiT on ILSVRC-2012 as in https://arxiv.org/abs/1912.11370 + +Run training of a BiT-ResNet-50x1 variant, which takes ~32min on v3-128: + +big_vision.train \ + --config big_vision/configs/bit_i1k.py \ + --workdir gs://[your_bucket]/big_vision/`date '+%m-%d_%H%M'` \ + --config.model.depth 50 --config.model.width 1 +""" + +# from big_vision.configs.common_fewshot import get_fewshot_lsr +import ml_collections as mlc + + +def get_config(runlocal=False): + """Config for training on ImageNet-1k.""" + config = mlc.ConfigDict() + + config.seed = 0 + config.total_epochs = 90 + config.num_classes = 1000 + config.loss = 'softmax_xent' + + config.input = dict() + config.input.data = dict( + name='imagenet2012', + split='train[:99%]', + ) + config.input.batch_size = 4096 + config.input.cache_raw = True # Needs up to 120GB of RAM! + config.input.shuffle_buffer_size = 250_000 # Per host. + + pp_common = '|onehot(1000, key="{lbl}", key_result="labels")' + pp_common += '|value_range(-1, 1)|keep("image", "labels")' + config.input.pp = 'decode_jpeg_and_inception_crop(224)|flip_lr' + pp_common.format(lbl='label') + pp_eval = 'decode|resize_small(256)|central_crop(224)' + pp_common + + config.log_training_steps = 50 + config.ckpt_steps = 1000 + + # Model section + config.model_name = 'bit' + config.model = dict( + depth=50, # You can also pass e.g. [3, 5, 10, 2] + width=1.0, + ) + + # Optimizer section + config.optax_name = 'big_vision.momentum_hp' + config.grad_clip_norm = 1.0 + + # linear scaling rule. Don't forget to sweep if sweeping batch_size. + config.wd = (1e-4 / 256) * config.input.batch_size + config.lr = (0.1 / 256) * config.input.batch_size + config.schedule = dict(decay_type='cosine', warmup_steps=1000) + + # Eval section + def get_eval(split, dataset='imagenet2012'): + return dict( + type='classification', + data=dict(name=dataset, split=split), + pp_fn=pp_eval.format(lbl='label'), + loss_name=config.loss, + log_steps=1000, # Very fast O(seconds) so it's fine to run it often. + cache='final_data', + ) + config.evals = {} + config.evals.train = get_eval('train[:2%]') + config.evals.minival = get_eval('train[99%:]') + config.evals.val = get_eval('validation') + config.evals.v2 = get_eval('test', dataset='imagenet_v2') + config.evals.real = get_eval('validation', dataset='imagenet2012_real') + config.evals.real.pp_fn = pp_eval.format(lbl='real_label') + + # config.evals.fewshot = get_fewshot_lsr(runlocal=runlocal) + # config.evals.fewshot.log_steps = 1000 + + if runlocal: + config.input.batch_size = 32 + config.input.cache_raw = False + config.input.shuffle_buffer_size = 100 + + local_eval = config.evals.val + config.evals = {'val': local_eval} + config.evals.val.cache = 'none' + + return config \ No newline at end of file diff --git a/big_vision/configs/bit_i21k.py b/big_vision/configs/bit_i21k.py new file mode 100644 index 0000000000000000000000000000000000000000..c42342e9ab8ff513211954efab79dd4309fbe101 --- /dev/null +++ b/big_vision/configs/bit_i21k.py @@ -0,0 +1,85 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""A config for pre-training BiT on ImageNet-21k. + +This config relies on the Imagenet-21k tfds dataset, which is not yet +available publicly in TFDS. We intend to add the dataset to public TFDS soon, +and this config will then be runnable. +""" + +from big_vision.configs.common_fewshot import get_fewshot_lsr +import ml_collections as mlc + + +def get_config(): + """Config for training on imagenet-21k.""" + config = mlc.ConfigDict() + + config.seed = 0 + config.total_epochs = 90 + config.num_classes = 21843 + config.init_head_bias = -10.0 + config.loss = 'sigmoid_xent' + + config.input = dict() + config.input.data = dict( + name='imagenet21k', + split='full[51200:]', + ) + config.input.batch_size = 4096 + config.input.shuffle_buffer_size = 250_000 # Per host, so small-ish is ok. + + pp_common = '|value_range(-1, 1)|onehot({onehot_args})|keep("image", "labels")' + pp_common_i21k = pp_common.format(onehot_args=f'{config.num_classes}') + pp_common_i1k = pp_common.format(onehot_args='1000, key="label", key_result="labels"') + config.input.pp = 'decode_jpeg_and_inception_crop(224)|flip_lr' + pp_common_i21k + pp_eval = 'decode|resize_small(256)|central_crop(224)' + + config.log_training_steps = 50 + config.ckpt_steps = 1000 + + # Model section + config.model_name = 'bit_paper' + config.model = dict(depth=50, width=1.0) + + # Optimizer section + config.optax_name = 'big_vision.momentum_hp' + config.grad_clip_norm = 1.0 + + # linear scaling rule. Don't forget to sweep if sweeping batch_size. + config.lr = (0.03 / 256) * config.input.batch_size + config.wd = (3e-5 / 256) * config.input.batch_size + config.schedule = dict(decay_type='cosine', warmup_steps=5000) + + # Evaluations on i21k itself. + def eval_i21k(split): + return dict( + type='classification', + data={**config.input.data, 'split': split}, + pp_fn=pp_eval + pp_common_i21k, + loss_name=config.loss, + log_steps=1000, # Very fast O(seconds) so it's fine to run it often. + ) + config.evals = {} + config.evals.test = eval_i21k('full[:25_600]') + config.evals.val = eval_i21k('full[25_600:51_200]') + config.evals.train = eval_i21k('full[51_200:76_800]') + + # Few-shot evaluators + config.evals.fewshot = get_fewshot_lsr() + config.evals.fewshot.log_steps = 25_000 + + return config \ No newline at end of file diff --git a/big_vision/configs/common.py b/big_vision/configs/common.py new file mode 100644 index 0000000000000000000000000000000000000000..c1628c3ccaa554eb5d2a39e2317fb06953542a6d --- /dev/null +++ b/big_vision/configs/common.py @@ -0,0 +1,188 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""A few things commonly used across A LOT of config files.""" + +import string + +import ml_collections as mlc + + +def input_for_quicktest(config_input, quicktest): + if quicktest: + config_input.batch_size = 8 + config_input.shuffle_buffer_size = 10 + config_input.cache_raw = False + + +def parse_arg(arg, lazy=False, **spec): + """Makes ConfigDict's get_config single-string argument more usable. + + Example use in the config file: + + import big_vision.configs.common as bvcc + def get_config(arg): + arg = bvcc.parse_arg(arg, + res=(224, int), + runlocal=False, + schedule='short', + ) + + # ... + + config.shuffle_buffer = 250_000 if not arg.runlocal else 50 + + Ways that values can be passed when launching: + + --config amazing.py:runlocal,schedule=long,res=128 + --config amazing.py:res=128 + --config amazing.py:runlocal # A boolean needs no value for "true". + --config amazing.py:runlocal=False # Explicit false boolean. + --config amazing.py:128 # The first spec entry may be passed unnamed alone. + + Uses strict bool conversion (converting 'True', 'true' to True, and 'False', + 'false', '' to False). + + Args: + arg: the string argument that's passed to get_config. + lazy: allow lazy parsing of arguments, which are not in spec. For these, + the type is auto-extracted in dependence of most complex possible type. + **spec: the name and default values of the expected options. + If the value is a tuple, the value's first element is the default value, + and the second element is a function called to convert the string. + Otherwise the type is automatically extracted from the default value. + + Returns: + ConfigDict object with extracted type-converted values. + """ + # Normalize arg and spec layout. + arg = arg or '' # Normalize None to empty string + spec = {k: get_type_with_default(v) for k, v in spec.items()} + + result = mlc.ConfigDict(type_safe=False) # For convenient dot-access only. + + # Expand convenience-cases for a single parameter without = sign. + if arg and ',' not in arg and '=' not in arg: + # (think :runlocal) If it's the name of sth in the spec (or there is no + # spec), it's that in bool. + if arg in spec or not spec: + arg = f'{arg}=True' + # Otherwise, it is the value for the first entry in the spec. + else: + arg = f'{list(spec.keys())[0]}={arg}' + # Yes, we rely on Py3.7 insertion order! + + # Now, expand the `arg` string into a dict of keys and values: + raw_kv = {raw_arg.split('=')[0]: + raw_arg.split('=', 1)[-1] if '=' in raw_arg else 'True' + for raw_arg in arg.split(',') if raw_arg} + + # And go through the spec, using provided or default value for each: + for name, (default, type_fn) in spec.items(): + val = raw_kv.pop(name, None) + result[name] = type_fn(val) if val is not None else default + + if raw_kv: + if lazy: # Process args which are not in spec. + for k, v in raw_kv.items(): + result[k] = autotype(v) + else: + raise ValueError(f'Unhandled config args remain: {raw_kv}') + + return result + + +def get_type_with_default(v): + """Returns (v, string_to_v_type) with lenient bool parsing.""" + # For bool, do safe string conversion. + if isinstance(v, bool): + def strict_bool(x): + assert x.lower() in {'true', 'false', ''} + return x.lower() == 'true' + return (v, strict_bool) + # If already a (default, type) tuple, use that. + if isinstance(v, (tuple, list)): + assert len(v) == 2 and isinstance(v[1], type), ( + 'List or tuple types are currently not supported because we use `,` as' + ' dumb delimiter. Contributions (probably using ast) welcome. You can' + ' unblock by using a string with eval(s.replace(";", ",")) or similar') + return (v[0], v[1]) + # Otherwise, derive the type from the default value. + return (v, type(v)) + + +def autotype(x): + """Auto-converts string to bool/int/float if possible.""" + assert isinstance(x, str) + if x.lower() in {'true', 'false'}: + return x.lower() == 'true' # Returns as bool. + try: + return int(x) # Returns as int. + except ValueError: + try: + return float(x) # Returns as float. + except ValueError: + return x # Returns as str. + + +def pack_arg(**kw): + """Packs key-word args as a string to be parsed by `parse_arg()`.""" + for v in kw.values(): + assert ',' not in f'{v}', f"Can't use `,` in config_arg value: {v}" + return ','.join([f'{k}={v}' for k, v in kw.items()]) + + +def arg(**kw): + """Use like `add(**bvcc.arg(res=256, foo=bar), lr=0.1)` to pass config_arg.""" + return {'config_arg': pack_arg(**kw), **kw} + + +def _get_field_ref(config_dict, field_name): + path = field_name.split('.') + for field in path[:-1]: + config_dict = getattr(config_dict, field) + return config_dict.get_ref(path[-1]) + + +def format_str(format_string, config): + """Format string with reference fields from config. + + This makes it easy to build preprocess strings that contain references to + fields tha are edited after. E.g.: + + ``` + config = mlc.ConficDict() + config.res = (256, 256) + config.pp = bvcc.format_str('resize({res})', config) + ... + # if config.res is modified (e.g. via sweeps) it will propagate to pp field: + config.res = (512, 512) + assert config.pp == 'resize((512, 512))' + ``` + + Args: + format_string: string to format with references. + config: ConfigDict to get references to format the string. + + Returns: + A reference field which renders a string using references to config fields. + """ + output = '' + parts = string.Formatter().parse(format_string) + for (literal_text, field_name, format_spec, conversion) in parts: + assert not format_spec and not conversion + output += literal_text + if field_name: + output += _get_field_ref(config, field_name).to_str() + return output diff --git a/big_vision/configs/common_fewshot.py b/big_vision/configs/common_fewshot.py new file mode 100644 index 0000000000000000000000000000000000000000..c430383639adcf6103e0976b190eda5b2740321a --- /dev/null +++ b/big_vision/configs/common_fewshot.py @@ -0,0 +1,60 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Most common few-shot eval configuration.""" + +import ml_collections as mlc + + +def get_fewshot_lsr(target_resolution=224, resize_resolution=256, + runlocal=False, pp=None, **kw): + """Returns a standard-ish fewshot eval configuration.""" + kw.setdefault('representation_layer', 'pre_logits') + kw.setdefault('shots', (1, 5, 10, 25)) + kw.setdefault('l2_reg', 2.0 ** 10) + kw.setdefault('num_seeds', 3) + kw.setdefault('prefix', '') # No prefix as we already use a/ z/ and zz/ + + # Backward-compatible default: + if not any(f'log_{x}' in kw for x in ['steps', 'percent', 'examples', 'epochs']): # pylint: disable=line-too-long + kw['log_steps'] = 25_000 + + config = mlc.ConfigDict(kw) + config.type = 'fewshot_lsr' + config.datasets = { + 'caltech': ('caltech101', 'train', 'test'), # copybara:srtip + 'cars': ('cars196:2.1.0', 'train', 'test'), + 'cifar100': ('cifar100', 'train', 'test'), + 'dtd': ('dtd', 'train', 'test'), + # The first 65000 ImageNet samples have at least 30 shots per any class. + # Commented out by default because needs manual download. + # 'imagenet': ('imagenet2012', 'train[:65000]', 'validation'), + 'pets': ('oxford_iiit_pet', 'train', 'test'), + 'uc_merced': ('uc_merced', 'train[:1000]', 'train[1000:]'), + } if not runlocal else { + 'pets': ('oxford_iiit_pet', 'train', 'test'), + } + + pp = pp or '|'.join([ + 'decode', + f'resize({resize_resolution})', + f'central_crop({target_resolution})', + 'value_range(-1,1)' + ]) + pp += '|keep("image", "label")' + config.pp_train = pp + config.pp_eval = pp + config.display_first = [('imagenet', 10)] if not runlocal else [('pets', 10)] + + return config diff --git a/big_vision/configs/load_and_eval.py b/big_vision/configs/load_and_eval.py new file mode 100644 index 0000000000000000000000000000000000000000..7e102b0f561f2cc6ec59439f831e9e289488b7b0 --- /dev/null +++ b/big_vision/configs/load_and_eval.py @@ -0,0 +1,143 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pytype: disable=not-writable,attribute-error +# pylint: disable=line-too-long,missing-function-docstring +r"""A config to load and eval key model using the core train.py. + +The runtime varies widely depending on the model, but each one should reproduce +the corresponding paper's numbers. +This configuration makes use of the "arg" to get_config to select which model +to run, so a few examples are given below: + +Run and evaluate a BiT-M ResNet-50x1 model that was transferred to i1k: + +big_vision.train \ + --config big_vision/configs/load_and_eval.py:name=bit_paper,batch_size=8 \ + --config.model_init M-imagenet2012 --config.model.width 1 --config.model.depth 50 + +Run and evaluate the recommended ViT-B/32 from "how to train your vit" paper: + +big_vision.train \ + --config big_vision/configs/load_and_eval.py:name=vit_i21k,batch_size=8 \ + --config.model.variant B/32 --config.model_init howto-i21k-B/32 +""" + +import big_vision.configs.common as bvcc +from big_vision.configs.common_fewshot import get_fewshot_lsr + + +def eval_only(config, batch_size, spec_for_init): + """Set a few configs that turn trainer into (almost) eval-only.""" + config.total_steps = 0 + config.input = {} + config.input.batch_size = batch_size + config.input.data = dict(name='bv:dummy', spec=spec_for_init) + config.optax_name = 'identity' + config.lr = 0.0 + + config.mesh = [('data', -1)] + config.sharding_strategy = [('params/.*', 'fsdp(axis="data")')] + config.sharding_rules = [('act_batch', ('data',))] + + return config + + +def get_config(arg=''): + config = bvcc.parse_arg(arg, name='bit_paper', batch_size=4) + + # Make the config eval-only by setting some dummies. + eval_only(config, config.batch_size, spec_for_init=dict( + image=dict(shape=(224, 224, 3), dtype='float32'), + )) + + config.evals = dict(fewshot=get_fewshot_lsr()) + + # Just calls the function with the name given as `config`. + # Could also be a giant if-block if you're into that kind of thing. + globals()[config.name](config) + return config + + +def bit_paper(config): + config.num_classes = 1000 + + config.model_name = 'bit_paper' + config.model_init = 'M-imagenet2012' # M = i21k, -imagenet2012 = fine-tuned + config.model = dict(width=1, depth=50) + + def get_eval(split, lbl, dataset='imagenet2012_real'): + return dict( + type='classification', + data=dict(name=dataset, split=split), + loss_name='softmax_xent', + cache='none', # Only run once, on low-mem machine. + pp_fn=( + 'decode|resize(384)|value_range(-1, 1)' + f'|onehot(1000, key="{lbl}", key_result="labels")' + '|keep("image", "labels")' + ), + ) + config.evals.test = get_eval('validation', 'original_label') + config.evals.real = get_eval('validation', 'real_label') + config.evals.v2 = get_eval('test', 'label', 'imagenet_v2') + + +def vit_i1k(config): + config.num_classes = 1000 + + config.model_name = 'vit' + config.model_init = '' # Will be set in sweep. + config.model = dict(variant='S/16', pool_type='gap', posemb='sincos2d', + rep_size=True) + + config.evals.val = dict( + type='classification', + data=dict(name='imagenet2012', split='validation'), + pp_fn='decode|resize_small(256)|central_crop(224)|value_range(-1, 1)|onehot(1000, key="label", key_result="labels")|keep("image", "labels")', + loss_name='softmax_xent', + cache='none', # Only run once, on low-mem machine. + ) + + +def mlp_mixer_i1k(config): + config.num_classes = 1000 + + config.model_name = 'mlp_mixer' + config.model_init = '' # Will be set in sweep. + config.model = dict(variant='L/16') + + config.evals.val = dict( + type='classification', + data=dict(name='imagenet2012', split='validation'), + pp_fn='decode|resize_small(256)|central_crop(224)|value_range(-1, 1)|onehot(1000, key="label", key_result="labels")|keep("image", "labels")', + loss_name='softmax_xent', + cache='none', # Only run once, on low-mem machine. + ) + + +def vit_i21k(config): + config.num_classes = 21843 + + config.model_name = 'vit' + config.model_init = '' # Will be set in sweep. + config.model = dict(variant='B/32', pool_type='tok') + + config.evals.val = dict( + type='classification', + data=dict(name='imagenet21k', split='full[:51200]'), + pp_fn='decode|resize_small(256)|central_crop(224)|value_range(-1, 1)|onehot(21843)|keep("image", "labels")', + loss_name='sigmoid_xent', + cache='none', # Only run once, on low-mem machine. + ) diff --git a/big_vision/configs/mlp_mixer_i1k.py b/big_vision/configs/mlp_mixer_i1k.py new file mode 100644 index 0000000000000000000000000000000000000000..8afe9abfd31f4ecb4e53466ea3e2b2794e8af7e7 --- /dev/null +++ b/big_vision/configs/mlp_mixer_i1k.py @@ -0,0 +1,120 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""A config for training MLP-Mixer-B/16 model on ILSVRC-2012 ("ImageNet-1k"). + +Achieves 76.3% top-1 accuracy on the test split in 2h11m on TPU v3-128 +with 300 epochs. A shorter 60 epochs run is expected to get to 70.5% in 27m. + +big_vision.train \ + --config big_vision/configs/mlp_mixer_i1k.py \ + --workdir gs://[your_bucket]/big_vision/`date '+%m-%d_%H%M'` \ +""" + +from big_vision.configs.common_fewshot import get_fewshot_lsr +import ml_collections as mlc + + +def get_config(mode=None): + """Config for training Mixer on i1k.""" + config = mlc.ConfigDict() + + config.seed = 0 + config.total_epochs = 300 + config.num_classes = 1000 + config.loss = 'sigmoid_xent' + config.init_head_bias = -6.9 + + config.input = dict() + config.input.data = dict( + name='imagenet2012', + split='train[:99%]', + ) + config.input.batch_size = 4096 + config.input.cache_raw = True # Needs up to 120GB of RAM! + config.input.shuffle_buffer_size = 250_000 + + config.input.pp = ( + 'decode_jpeg_and_inception_crop(224)' + '|flip_lr' + '|randaug(2,15)' + '|value_range(-1, 1)' + '|onehot(1000, key="label", key_result="labels")' + '|keep("image", "labels")' + ) + pp_eval = ( + 'decode' + '|resize_small(256)|central_crop(224)' + '|value_range(-1, 1)' + '|onehot(1000, key="{lbl}", key_result="labels")' + '|keep("image", "labels")' + ) + + # To continue using the near-defunct randaug op. + config.pp_modules = ['ops_general', 'ops_image', 'ops_text', 'archive.randaug'] + + config.log_training_steps = 50 + config.ckpt_steps = 1000 + + config.prefetch_to_device = 2 + + # Model section + config.model_name = 'mlp_mixer' + config.model = dict() + config.model.variant = 'B/16' + config.model.stoch_depth = 0.1 + + config.mixup = dict(fold_in=None, p=0.5) + + # Optimizer section + config.optax_name = 'scale_by_adam' + config.grad_clip_norm = 1. + + config.lr = 0.001 + config.wd = 1e-4 + config.schedule = dict( + decay_type='linear', + warmup_steps=10_000, + linear_end=1e-5, + ) + + # Eval section + def get_eval(split, dataset='imagenet2012'): + return dict( + type='classification', + data=dict(name=dataset, split=split), + pp_fn=pp_eval.format(lbl='label'), + loss_name=config.loss, + log_steps=2500, # Very fast O(seconds) so it's fine to run it often. + cache_final=mode != 'gpu8', + ) + config.evals = {} + config.evals.train = get_eval('train[:2%]') + config.evals.minival = get_eval('train[99%:]') + config.evals.val = get_eval('validation') + config.evals.v2 = get_eval('test', dataset='imagenet_v2') + config.evals.real = get_eval('validation', dataset='imagenet2012_real') + config.evals.real.pp_fn = pp_eval.format(lbl='real_label') + + config.fewshot = get_fewshot_lsr() + + if mode == 'gpu8': + config.total_epochs = 60 + config.input.batch_size = 512 + config.input.cache_raw = False + if mode == 'regression_test': + config.total_epochs = 60 + + return config diff --git a/big_vision/configs/transfer.py b/big_vision/configs/transfer.py new file mode 100644 index 0000000000000000000000000000000000000000..1ee64e43b274bdf5d462c7e3f3d9b5fc085c1796 --- /dev/null +++ b/big_vision/configs/transfer.py @@ -0,0 +1,186 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long,missing-function-docstring +r"""A config for transferring vit-augreg. + +Best HP selected on (mini)val, expected test results (repeated 5 times): + +ViT-Augreg-B/32: + Dataset, crop, learning rate, mean (%), range (%) + - ImageNet, inception_crop, 0.03, 83.27, [83.22...83.33] + - Cifar10, resmall_crop, 0.003, 98.55, [98.46...98.6] + - Cifar100, resmall_crop, 0.01, 91.35, [91.09...91.62] + - Pets, inception_crop, 0.003, 93.78, [93.62...94.00] + - Flowers, inception_crop, 0.003, 99.43, [99.42...99.45] + + +Command to run: +big_vision.train \ + --config big_vision/configs/transfer.py:model=vit-i21k-augreg-b/32,dataset=cifar10,crop=resmall_crop \ + --workdir gs://$GS_BUCKET_NAME/big_vision/workdir/`date '+%m-%d_%H%M'` --config.lr=0.03 +""" + +import big_vision.configs.common as bvcc +import ml_collections as mlc + + +def _set_model(config, model): + """Load pre-trained models: vit or bit.""" + # Reset the head to init (of zeros) when transferring. + config.model_load = dict(dont_load=['head/kernel', 'head/bias']) + + if model == 'vit-i21k-augreg-b/32': + # Load "recommended" upstream B/32 from https://arxiv.org/abs/2106.10270 + config.model_name = 'vit' + config.model_init = 'howto-i21k-B/32' + config.model = dict(variant='B/32', pool_type='tok') + elif model == 'vit-i21k-augreg-l/16': + config.model_name = 'vit' + config.model_init = 'howto-i21k-L/16' + config.model = dict(variant='L/16', pool_type='tok') + elif model == 'vit-s16': + config.model_name = 'vit' + config.model_init = 'i1k-s16-300ep' + config.model = dict(variant='S/16', pool_type='gap', posemb='sincos2d', + rep_size=True) + elif model == 'bit-m-r50x1': + config.model_name = 'bit_paper' + config.model_init = 'M' + config.model = dict(depth=50, width=1) + else: + raise ValueError(f'Unknown model: {model}, please define customized model.') + + +def _set_dataset(config, dataset, crop='inception_crop', h_res=448, l_res=384): + if dataset == 'cifar10': + _set_task(config, 'cifar10', 'train[:98%]', 'train[98%:]', 'test', 10, steps=10_000, warmup=500, crop=crop, h_res=h_res, l_res=l_res) + elif dataset == 'cifar100': + _set_task(config, 'cifar100', 'train[:98%]', 'train[98%:]', 'test', 100, steps=10_000, warmup=500, crop=crop, h_res=h_res, l_res=l_res) + elif dataset == 'imagenet2012': + _set_task(config, 'imagenet2012', 'train[:99%]', 'train[99%:]', 'validation', 1000, steps=20_000, warmup=500, crop=crop, h_res=h_res, l_res=l_res) + _set_imagenet_variants(config) + elif dataset == 'oxford_iiit_pet': + _set_task(config, 'oxford_iiit_pet', 'train[:90%]', 'train[90%:]', 'test', 37, steps=500, warmup=100, crop=crop, h_res=h_res, l_res=l_res) + elif dataset == 'oxford_flowers102': + _set_task(config, 'oxford_flowers102', 'train[:90%]', 'train[90%:]', 'test', 102, steps=500, warmup=100, crop=crop, h_res=h_res, l_res=l_res) + else: + raise ValueError( + f'Unknown dataset: {dataset}, please define customized dataset.') + + +def _set_task(config, dataset, train, val, test, n_cls, + steps=20_000, warmup=500, lbl='label', crop='resmall_crop', + flip=True, h_res=448, l_res=384): + """Vision task with val and test splits.""" + config.total_steps = steps + config.schedule = dict( + warmup_steps=warmup, + decay_type='cosine', + ) + + config.input.data = dict(name=dataset, split=train) + pp_common = ( + '|value_range(-1, 1)|' + f'onehot({n_cls}, key="{lbl}", key_result="labels")|' + 'keep("image", "labels")' + ) + + if crop == 'inception_crop': + pp_train = f'decode|inception_crop({l_res})' + elif crop == 'resmall_crop': + pp_train = f'decode|resize_small({h_res})|random_crop({l_res})' + elif crop == 'resize_crop': + pp_train = f'decode|resize({h_res})|random_crop({l_res})' + else: + raise ValueError(f'Unknown crop: {crop}. Must be one of: ' + 'inception_crop, resmall_crop, resize_crop') + if flip: + pp_train += '|flip_lr' + config.input.pp = pp_train + pp_common + + pp = f'decode|resize_small({h_res})|central_crop({l_res})' + pp_common + config.num_classes = n_cls + + def get_eval(split): + return dict( + type='classification', + data=dict(name=dataset, split=split), + loss_name='softmax_xent', + log_steps=100, + pp_fn=pp, + ) + config.evals = dict(val=get_eval(val), test=get_eval(test)) + + +def _set_imagenet_variants(config, h_res=448, l_res=384): + """Evaluation tasks on ImageNet variants: v2 and real.""" + pp = (f'decode|resize_small({h_res})|central_crop({l_res})' + '|value_range(-1, 1)|onehot(1000, key="{lbl}", key_result="labels")|' + 'keep("image", "labels")' + ) + + # Special-case rename for i1k (val+test -> minival+val) + config.evals.minival = config.evals.val + config.evals.val = config.evals.test + # NOTE: keep test == val for convenience in subsequent analysis. + + config.evals.real = dict(type='classification') + config.evals.real.data = dict(name='imagenet2012_real', split='validation') + config.evals.real.pp_fn = pp.format(lbl='real_label') + config.evals.real.loss_name = config.loss + config.evals.real.log_steps = 100 + + config.evals.v2 = dict(type='classification') + config.evals.v2.data = dict(name='imagenet_v2', split='test') + config.evals.v2.pp_fn = pp.format(lbl='label') + config.evals.v2.loss_name = config.loss + config.evals.v2.log_steps = 100 + + +def get_config(arg=None): + """Config for adaptation.""" + arg = bvcc.parse_arg(arg, model='vit', dataset='cifar10', crop='resmall_crop', + h_res=448, l_res=384, batch_size=512, fsdp=False, + runlocal=False) + config = mlc.ConfigDict() + + config.input = {} + config.input.batch_size = arg.batch_size if not arg.runlocal else 8 + config.input.shuffle_buffer_size = 50_000 if not arg.runlocal else 100 + + config.log_training_steps = 10 + config.ckpt_steps = 1000 + config.ckpt_timeout = 600 + + # Optimizer section + config.optax_name = 'big_vision.momentum_hp' + config.grad_clip_norm = 1.0 + config.wd = None # That's our default, but just being explicit here! + config.loss = 'softmax_xent' + config.lr = 0.01 + config.mixup = dict(p=0.0) + + config.seed = 0 + + _set_dataset(config, arg.dataset, arg.crop, arg.h_res, arg.l_res) + + _set_model(config, arg.model) + if arg.fsdp: + config.mesh = [('data', -1)] + config.sharding_strategy = [('.*', 'fsdp(axis="data")')] + config.sharding_rules = [('act_batch', ('data',))] + config.model.scan = True + + return config \ No newline at end of file diff --git a/big_vision/configs/vit_i1k.py b/big_vision/configs/vit_i1k.py new file mode 100644 index 0000000000000000000000000000000000000000..8e6dd8d18ba723175a7a0cf887352e3023a11ccc --- /dev/null +++ b/big_vision/configs/vit_i1k.py @@ -0,0 +1,177 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Pre-training ViT on ILSVRC-2012 as in https://arxiv.org/abs/2106.10270 + +This config does NOT include regularization (dropout, stochastic depth), which +was shown to help with B/32, B/16, L/16 models in the paper (Figure 4). + +This configuration makes use of the "arg" to get_config to select which model +to run, so a few examples are given below: + +Run training of a B/16 model: + +big_vision.train \ + --config big_vision/configs/vit_i1k.py:variant=B/16 \ + --workdir gs://[your_bucket]/big_vision/`date '+%m-%d_%H%M'` + +Run training of a B/32 model with custom aug-strenght and 300ep: + +big_vision.train \ + --config big_vision/configs/vit_i1k.py:variant=B/32,aug=light1 \ + --workdir gs://[your_bucket]/big_vision/`date '+%m-%d_%H%M'` \ + --config.total_epochs 300 +""" + +import big_vision.configs.common as bvcc +from big_vision.configs.common_fewshot import get_fewshot_lsr +import ml_collections as mlc + +MIXUP_DEF = { + 'none': dict(p=0.0, fold_in=None), + 'light1': dict(p=0.0, fold_in=None), + 'light2': dict(p=0.2, fold_in=None), + 'medium1': dict(p=0.2, fold_in=None), + 'medium2': dict(p=0.5, fold_in=None), + 'strong1': dict(p=0.5, fold_in=None), + 'strong2': dict(p=0.8, fold_in=None), +} + +RANDAUG_DEF = { + 'none': '', + 'light1': 'randaug(2,0)', # Actually not nothing! + 'light2': 'randaug(2,10)', + 'medium1': 'randaug(2,15)', + 'medium2': 'randaug(2,15)', + 'strong1': 'randaug(2,20)', + 'strong2': 'randaug(2,20)', +} + + +def get_config(arg=None): + """Config for training.""" + arg = bvcc.parse_arg(arg, variant='B/16', runlocal=False, aug='') + config = mlc.ConfigDict() + + config.seed = 0 + config.total_epochs = 300 + config.num_classes = 1000 + config.loss = 'sigmoid_xent' + config.init_head_bias = -6.9 + + # If this gives a KeyError, lookup Fig4 of the paper and add an entry. + # Note, this here is a good average between 30ep and 300ep, sometimes you coud + # find a slightly better setting for either of them. + aug_setting = arg.aug or { + 'Ti/16': 'light1', + 'S/32': 'medium1', + 'S/16': 'medium2', + 'B/32': 'medium2', + 'B/16': 'medium2', + 'L/16': 'medium2', + }[arg.variant] + + config.input = dict() + config.input.data = dict( + name='imagenet2012', + split='train[:99%]', + ) + config.input.batch_size = 4096 + config.input.cache = 'raw_data' if arg.runlocal else 'none' # Needs up to 120GB of RAM! + config.input.shuffle_buffer_size = 250_000 + + pp_common = ( + '|value_range(-1, 1)' + '|onehot(1000, key="{lbl}", key_result="labels")' + '|keep("image", "labels")' + ) + config.input.pp = ( + 'decode_jpeg_and_inception_crop(224)|flip_lr|' + + RANDAUG_DEF[aug_setting] + + pp_common.format(lbl='label') + ) + pp_eval = 'decode|resize_small(256)|central_crop(224)' + pp_common + + # To continue using the near-defunct randaug op. + config.pp_modules = ['ops_general', 'ops_image', 'ops_text', 'archive.randaug'] + + # Aggressive pre-fetching because our models here are small, so we not only + # can afford it, but we also need it for the smallest models to not be + # bottle-necked by the input pipeline. Play around with it for -L models tho. + config.input.prefetch = 8 + config.prefetch_to_device = 4 + + config.log_training_steps = 50 + config.ckpt_steps = 1000 + + # Model section + config.model_name = 'vit' + config.model = dict( + variant=arg.variant, + rep_size=True, + pool_type='tok', + ) + + # Optimizer section + config.grad_clip_norm = 1.0 + config.optax_name = 'scale_by_adam' + config.optax = dict(mu_dtype='bfloat16') + # The modified AdaFactor we introduced in https://arxiv.org/abs/2106.04560 + # almost always behaves exactly like adam, but at a fraction of the memory + # cost (specifically, adam_bf16 = +1.5M, adafactor = +0.5M), hence it is a + # good idea to try it when you are memory-bound! + # config.optax_name = 'big_vision.scale_by_adafactor' + # A good flag to play with when hitting instabilities, is the following: + # config.optax = dict(beta2_cap=0.95) + + config.lr = 0.001 + config.wd = 0.0001 + config.schedule = dict(warmup_steps=10_000, decay_type='cosine') + + config.mixup = MIXUP_DEF[aug_setting] + + # Eval section + def get_eval(split, dataset='imagenet2012'): + return dict( + type='classification', + data=dict(name=dataset, split=split), + pp_fn=pp_eval.format(lbl='label'), + loss_name=config.loss, + log_steps=2500, # Very fast O(seconds) so it's fine to run it often. + cache='final_data' if arg.runlocal else 'none', + ) + config.evals = {} + config.evals.train = get_eval('train[:2%]') + config.evals.minival = get_eval('train[99%:]') + config.evals.val = get_eval('validation') + config.evals.v2 = get_eval('test', dataset='imagenet_v2') + config.evals.real = get_eval('validation', dataset='imagenet2012_real') + config.evals.real.pp_fn = pp_eval.format(lbl='real_label') + + config.fewshot = get_fewshot_lsr(runlocal=arg.runlocal) + config.fewshot.log_steps = 10_000 + + # Make a few things much smaller for quick local debugging testruns. + if arg.runlocal: + config.input.shuffle_buffer_size = 10 + config.input.batch_size = 8 + config.input.cache_raw = False + config.evals.train.data.split = 'train[:16]' + config.evals.minival.data.split = 'train[:16]' + config.evals.val.data.split = 'validation[:16]' + config.evals.v2.data.split = 'test[:16]' + config.evals.real.data.split = 'validation[:16]' + + return config \ No newline at end of file diff --git a/big_vision/configs/vit_i21k.py b/big_vision/configs/vit_i21k.py new file mode 100644 index 0000000000000000000000000000000000000000..adae41838736be4f4a9737e614152dc5c7fd329b --- /dev/null +++ b/big_vision/configs/vit_i21k.py @@ -0,0 +1,145 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Pre-training ViT on ImageNet-21k as in https://arxiv.org/abs/2106.10270 + +This config relies on the Imagenet-21k tfds dataset, which is not yet +available publicly in TFDS. We intend to add the dataset to public TFDS soon, +and this config will then be runnable. + +Note that regularization (dropout, stochastic depth) is not currently +implemented. This was not beneficial for ImageNet-21k pre-trainning. +""" + +import big_vision.configs.common as bvcc +from big_vision.configs.common_fewshot import get_fewshot_lsr +import ml_collections as mlc + +MIXUP_DEF = { + 'none': dict(p=0.0, fold_in=None), + 'light1': dict(p=0.0, fold_in=None), + 'light2': dict(p=0.2, fold_in=None), + 'medium1': dict(p=0.2, fold_in=None), + 'medium2': dict(p=0.5, fold_in=None), + 'strong1': dict(p=0.5, fold_in=None), + 'strong2': dict(p=0.8, fold_in=None), +} + +RANDAUG_DEF = { + 'none': '', + 'light1': 'randaug(2,0)', # Actually not nothing! + 'light2': 'randaug(2,10)', + 'medium1': 'randaug(2,15)', + 'medium2': 'randaug(2,15)', + 'strong1': 'randaug(2,20)', + 'strong2': 'randaug(2,20)', +} + + +def get_config(arg=None): + """Config for training.""" + arg = bvcc.parse_arg(arg, variant='B/16', runlocal=False, aug=None) + config = mlc.ConfigDict() + + config.seed = 0 + config.total_epochs = 300 + config.num_classes = 21843 + config.init_head_bias = -10.0 + config.loss = 'sigmoid_xent' + + # If this gives a KeyError, lookup Fig4 of the paper and add an entry. + # Note, this here is a good average between 30ep and 300ep, sometimes you coud + # find a slightly better setting for either of them. + aug_setting = { + 'Ti/16': 'none', + 'S/32': 'none', + 'S/16': 'light1', + 'B/32': 'light2', + 'B/16': 'light2', + 'L/16': 'medium2', + }[arg.variant] + + config.input = dict() + config.input.data = dict( + name='imagenet21k', + split='full[51200:]', + ) + config.input.batch_size = 4096 + config.input.shuffle_buffer_size = 250_000 # Per host, so small-ish is ok. + + pp_common = '|value_range(-1, 1)|onehot({onehot_args})|keep("image", "labels")' + pp_common_i21k = pp_common.format(onehot_args=f'{config.num_classes}') + pp_common_i1k = pp_common.format(onehot_args='1000, key="label", key_result="labels"') + config.input.pp = f'decode_jpeg_and_inception_crop(224)|flip_lr|{RANDAUG_DEF[aug_setting]}' + pp_common_i21k + pp_eval = 'decode|resize_small(256)|central_crop(224)' + + # To continue using the near-defunct randaug op. + config.pp_modules = ['ops_general', 'ops_image', 'ops_text', 'archive.randaug'] + + # Aggressive pre-fetching because our models here are small, so we not only + # can afford it, but we also need it for the smallest models to not be + # bottle-necked by the input pipeline. Play around with it for -L models tho. + config.input.prefetch = 8 + config.prefetch_to_device = 4 + + config.log_training_steps = 50 + config.ckpt_steps = 1000 + + # Model section + config.model_name = 'vit' + config.model = dict(variant=arg.variant, pool_type='gap', posemb='learn') + + # Optimizer section + config.optax_name = 'scale_by_adam' + config.optax = dict(mu_dtype='bfloat16') + config.grad_clip_norm = 1.0 + + config.lr = 0.001 + config.wd = 0.0001 + config.schedule = dict(warmup_steps=10_000, decay_type='cosine') + + config.mixup = MIXUP_DEF[aug_setting] + + # Evaluations on i21k itself. + def eval_i21k(split): + return dict( + type='classification', + data={**config.input.data, 'split': split}, + pp_fn=pp_eval + pp_common_i21k, + loss_name=config.loss, + log_steps=1000, # Very fast O(seconds) so it's fine to run it often. + ) + config.evals = {} + config.evals.test = eval_i21k('full[:25_600]') + config.evals.val = eval_i21k('full[25_600:51_200]') + config.evals.train = eval_i21k('full[51_200:76_800]') + + # Few-shot evaluators + config.evals.fewshot = get_fewshot_lsr(runlocal=arg.runlocal) + config.evals.fewshot.log_steps = 25_000 + + # Make a few things much smaller for quick local debugging testruns. + if arg.runlocal: + config.input.shuffle_buffer_size = 10 + config.input.batch_size = 8 + config.evals.test.data.split = 'full[:16]' + config.evals.train.data.split = 'full[:16]' + config.evals.val.data.split = 'full[:16]' + config.evals.i1k_val.data.split = 'validation[:16]' + config.evals.i1k_v2.data.split = 'test[:16]' + config.evals.i1k_a.data.split = 'test[:16]' + config.evals.i1k_r.data.split = 'test[:16]' + + return config \ No newline at end of file diff --git a/big_vision/configs/vit_s16_i1k.py b/big_vision/configs/vit_s16_i1k.py new file mode 100644 index 0000000000000000000000000000000000000000..d50dd26508713b67c434f0e677e58fbef7d8af13 --- /dev/null +++ b/big_vision/configs/vit_s16_i1k.py @@ -0,0 +1,105 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Pre-training ViT-S/16 on ILSVRC-2012 following https://arxiv.org/abs/2205.01580. + +This should take 6-7h to finish 90ep on a TPU-v3-8 and reach 76.5%, +see the tech report for more details. + +Command to run: + +big_vision.train \ + --config big_vision/configs/vit_s16_i1k.py \ + --workdir gs://[your_bucket]/big_vision/`date '+%m-%d_%H%M'` + +To run for 300ep, add `--config.total_epochs 300` to the command. +""" + +import ml_collections as mlc + + +def get_config(): + """Config for training.""" + config = mlc.ConfigDict() + + config.seed = 0 + config.total_epochs = 90 + config.num_classes = 1000 + config.loss = 'softmax_xent' + + config.input = {} + config.input.data = dict( + name='imagenet2012', + split='train[:99%]', + ) + config.input.batch_size = 1024 + config.input.cache_raw = True # Needs up to 120GB of RAM! + config.input.shuffle_buffer_size = 250_000 + + pp_common = ( + '|value_range(-1, 1)' + '|onehot(1000, key="{lbl}", key_result="labels")' + '|keep("image", "labels")' + ) + config.input.pp = ( + 'decode_jpeg_and_inception_crop(224)|flip_lr|randaug(2,10)' + + pp_common.format(lbl='label') + ) + pp_eval = 'decode|resize_small(256)|central_crop(224)' + pp_common + + # To continue using the near-defunct randaug op. + config.pp_modules = ['ops_general', 'ops_image', 'ops_text', 'archive.randaug'] + + config.log_training_steps = 50 + config.ckpt_steps = 1000 + + # Model section + config.model_name = 'vit' + config.model = dict( + variant='S/16', + rep_size=True, + pool_type='gap', + posemb='sincos2d', + ) + + # Optimizer section + config.grad_clip_norm = 1.0 + config.optax_name = 'scale_by_adam' + config.optax = dict(mu_dtype='bfloat16') + + config.lr = 0.001 + config.wd = 0.0001 + config.schedule = dict(warmup_steps=10_000, decay_type='cosine') + + config.mixup = dict(p=0.2, fold_in=None) + + # Eval section + def get_eval(split, dataset='imagenet2012'): + return dict( + type='classification', + data=dict(name=dataset, split=split), + pp_fn=pp_eval.format(lbl='label'), + loss_name=config.loss, + log_steps=2500, # Very fast O(seconds) so it's fine to run it often. + ) + config.evals = {} + config.evals.train = get_eval('train[:2%]') + config.evals.minival = get_eval('train[99%:]') + config.evals.val = get_eval('validation') + config.evals.v2 = get_eval('test', dataset='imagenet_v2') + config.evals.real = get_eval('validation', dataset='imagenet2012_real') + config.evals.real.pp_fn = pp_eval.format(lbl='real_label') + + return config diff --git a/big_vision/datasets/ai2d/ai2d.py b/big_vision/datasets/ai2d/ai2d.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/aokvqa/aokvqa.py b/big_vision/datasets/aokvqa/aokvqa.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/chartqa/chartqa.py b/big_vision/datasets/chartqa/chartqa.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/coco35l/coco35l.py b/big_vision/datasets/coco35l/coco35l.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/core.py b/big_vision/datasets/core.py new file mode 100644 index 0000000000000000000000000000000000000000..07d2a2c6814646908fc5133cb5a54aec6d3b57b3 --- /dev/null +++ b/big_vision/datasets/core.py @@ -0,0 +1,77 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Core data functions, dispatch calls to the requested dataset.""" +import importlib + + +# Note: intentionally not using ABC to avoid forcing implementation of every +# method, since one can imagine train-only datasets for example. +class DataSource: + """The API that any data source should implement.""" + + def get_tfdata(self, ordered, *, process_split=True, allow_cache=True): + """Creates this data object as a tf.data.Dataset. + + This will be called separately in each process, and it is up to the dataset + implementation to shard it accordingly if desired! + + Args: + ordered: if True, the dataset should use deterministic ordering, if False + it may have undefined ordering. Think of True == val, False == train. + process_split: if False then every process receives the entire dataset + (e.g. for evaluators running in a single process). + allow_cache: whether to allow caching the opened data or not. + + Returns: + A tf.data.Dataset object. + + Raises: + RuntimeError: if not implemented by the dataset, but called. + """ + raise RuntimeError("not implemented for {self.__class__.__name__}") + + @property + def total_examples(self): + """Returns number of examples in the dataset, regardless of sharding.""" + raise RuntimeError("not implemented for {self.__class__.__name__}") + + def num_examples_per_process(self): + """Returns a list of the numer of examples for each process. + + This is only needed for datasets that should go through make_for_inference. + + Returns: + Returns a list of the numer of examples for each process. + + Ideally, this would always be `[total() / nprocess] * nprocess`, but in + reality we can almost never perfectly shard a dataset across arbitrary + number of processes. + + One alternative option that can work in some cases is to not even shard + the dataset and thus return `[num_examples()] * nprocess. + + Raises: + RuntimeError: if not implemented by the dataset, but called. + """ + raise RuntimeError("not implemented for {self.__class__.__name__}") + + +def get(name, **kw): + if name.startswith("bv:"): + mod = importlib.import_module(f"big_vision.datasets.{name[3:]}") + return mod.DataSource(**kw) + else: + mod = importlib.import_module("big_vision.datasets.tfds") + return mod.DataSource(name, **kw) diff --git a/big_vision/datasets/countbenchqa/countbenchqa.py b/big_vision/datasets/countbenchqa/countbenchqa.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/docvqa/docvqa.py b/big_vision/datasets/docvqa/docvqa.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/gqa/gqa.py b/big_vision/datasets/gqa/gqa.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/imagenet/class_names.py b/big_vision/datasets/imagenet/class_names.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/infovqa/infovqa.py b/big_vision/datasets/infovqa/infovqa.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/jsonl.py b/big_vision/datasets/jsonl.py new file mode 100644 index 0000000000000000000000000000000000000000..719deba2b25987a4b9d58b56474e420cb5b1e706 --- /dev/null +++ b/big_vision/datasets/jsonl.py @@ -0,0 +1,177 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Simple data input from .jsonl files.""" + +import hashlib +import json +from multiprocessing.pool import ThreadPool +import os +import tempfile +import urllib.request + +from absl import logging +import big_vision.datasets.core as ds_core +import jax +import numpy as np +import overrides +import tensorflow as tf + + +def cached_download(url, dest=None, verbose=True): + """Download `url` to local file and return path to that, but with caching.""" + # NOTE: there is a small chance of saving corrupted data if the process is + # interrupted in the middle of writing the file. Then, reading in the input + # pipeline will fail, and the fix is to nuke the temp folder. + + # Compute a temp name based on the URL, so we can check if we already + # downloaded it before. + dest = dest or os.path.join(tempfile.gettempdir(), "bv") + os.makedirs(dest, exist_ok=True) + dest = os.path.join(dest, hashlib.md5(url.encode()).hexdigest()) + + # NOTE: we should use last-modified header to know whether to re-download. + if os.path.isfile(dest): + return dest + + if verbose: + print(f"\rRetrieving {url} into {dest}", end="", flush=True) + + with urllib.request.urlopen(url) as f: + data = f.read() + with open(dest, "wb+") as f: + f.write(data) + return dest + + +class DataSource(ds_core.DataSource): + """.jsonl DataSource.""" + + def __init__(self, fname, *, fopen_keys=(), download_keys=(), + start=0, stop=float("inf")): + """Create data-source that's jsonl + data files (eg images). + + This correctly supports multi-host in that each host only reads a subset of + the dataset automatically. However, currently, all hosts download all items + if `download_keys` is specified. TODO: b/lbeyer - This can be improved. + + Args: + fname: str, the path to the jsonl file that holds the dataset. + fopen_keys: collection of str or dict, the keys in the dataset whose + string value actually is a file-path that should be opened and read, + and its content is what goes into the batch (eg image filenames + commonly ["image"]). + If a dict, the values are folders prefixed to the filenames. + Supports gs:// for reading from buckets. + download_keys: collection of str, the keys in the dataset whose string + value actually is a URL from which the file should be downloaded first. + files are downloaded to a persistent tmp folder using the URL hash as + filename. If the file already exists, the download is skipped. + Must be a subset of `fopen_keys`. + start: int, index of the first row to use; use for slicing the data. + stop: int or inf, index of the row after the last one to use. + + Note: + This simple data input does not allow for nested/hierarchical values, + or in any way more complicated values like vectors. Use TFDS for that. + + The way start/stop arguments are used is as in list slicing[start:stop]. + """ + self.examples = [] + + with tf.io.gfile.GFile(fname) as f: + for i, line in enumerate(f): + if (start or 0) <= i < (stop or float("inf")): + try: + self.examples.append(json.loads(line)) + except json.decoder.JSONDecodeError as e: + raise ValueError(f"Invalid JSON in line {i}:\n{line}") from e + + if download_keys: + for k in download_keys: + assert k in fopen_keys, ( + f"{k} in download_keys but missing from fopen_keys {fopen_keys}") + + # TODO: b/lbeyer - use info from trainer instead, move that to utils. + logging.info( # pylint: disable=logging-fstring-interpolation + f"\u001b[33mNOTE\u001b[0m: Downloading {download_keys} " + f"for dataset {fname} ({len(self.examples)} examples) ...") + + def _dl_one(ex): + for k in download_keys: + ex[k] = cached_download(ex[k]) + + ThreadPool(100).map(_dl_one, self.examples) + print("Done") + logging.info("\u001b[33mNOTE\u001b[0m: Done downloading.") + + # Normalize. + if isinstance(fopen_keys, (list, tuple)): + self.fopen_keys = {k: "" for k in fopen_keys} + else: + self.fopen_keys = fopen_keys or {} + + # We need to apply fopen path prefix here already, because doing so while + # actually reading the files in TF, things are symbolic :( + for ex in self.examples: + for k, dirname in self.fopen_keys.items(): + ex[k] = os.path.join(dirname, ex[k]) + + def _indices(self, *, process_split=True, process_index=None): + indices = np.arange(len(self.examples)) + + if not process_split: + return list(indices) + + pid = jax.process_index() if process_index is None else process_index + return list(np.array_split(indices, jax.process_count())[pid]) + + @overrides.overrides + def get_tfdata(self, ordered=False, *, process_split=True, allow_cache=True): + del allow_cache # We don't cache anything anyways. + assert not process_split or len(self.examples) >= jax.process_count(), ( + "Process splitting the data with fewer examples than processes!?") + + my_idxs = self._indices(process_split=process_split) + if not ordered: + np.random.shuffle(my_idxs) + + dataset = tf.data.Dataset.from_generator( + generator=lambda: ({"id": str(i), **self.examples[i]} for i in my_idxs), + output_signature={ + "id": _guess_signature("0"), + **{k: _guess_signature(v) for k, v in self.examples[0].items()}, + }) + + def _read_files(example): + for k in self.fopen_keys: + example[k] = tf.io.read_file(example[k]) + return example + dataset = dataset.map(_read_files) + + return dataset + + @property + @overrides.overrides + def total_examples(self): + return len(self.examples) + + @overrides.overrides + def num_examples_per_process(self): + return [len(self._indices(process_index=pid)) + for pid in range(jax.process_count())] + + +def _guess_signature(value): + return tf.TensorSpec.from_tensor(tf.constant(value)) diff --git a/big_vision/datasets/nocaps/nocaps.py b/big_vision/datasets/nocaps/nocaps.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/okvqa/okvqa.py b/big_vision/datasets/okvqa/okvqa.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/pope/pope.py b/big_vision/datasets/pope/pope.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/refcoco/refcoco.py b/big_vision/datasets/refcoco/refcoco.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/rsvqa_hr/rsvqa_hr.py b/big_vision/datasets/rsvqa_hr/rsvqa_hr.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/rsvqa_lr/rsvqa_lr.py b/big_vision/datasets/rsvqa_lr/rsvqa_lr.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/scicap/scicap.py b/big_vision/datasets/scicap/scicap.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/science_qa/science_qa.py b/big_vision/datasets/science_qa/science_qa.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/screen2words/screen2words.py b/big_vision/datasets/screen2words/screen2words.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/sequence_packing.py b/big_vision/datasets/sequence_packing.py new file mode 100644 index 0000000000000000000000000000000000000000..48966d3c488886b3ab0d0f061a1c88c57fdeabae --- /dev/null +++ b/big_vision/datasets/sequence_packing.py @@ -0,0 +1,77 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Packed Sequence Op.""" + +# Forked from +# https://github.com/google/maxtext/blob/main/MaxText/sequence_packing.py. + + +from typing import Dict, Optional, List, Union + +from flax import traverse_util +import tensorflow as tf + +AUTOTUNE = tf.data.experimental.AUTOTUNE +FLATTEN_SEPARATOR = "<|sep|>" + + +def pack_dataset( + dataset: tf.data.Dataset, + batch_size: int | None, + key2length: Union[int, Dict[str, int]], + keys: Optional[List[str | tuple[str, ...]]] = None) -> tf.data.Dataset: + """Creates a 'packed' version of a dataset on-the-fly. + + Wrap `tensorflow.grain` ops. + + This is meant to replace the irritation of having to create a separate + "packed" version of a dataset to train efficiently on TPU. + Each example in the output dataset represents several examples in the + input dataset. + + For each key in the input dataset, two additional keys are created: + _segment_ids: an int32 tensor identifying the parts + representing the original example. + _positions: an int32 tensor identifying the position within the original + example. + + Example: + Two input examples get combined to form an output example. + The input examples are: + {"inputs": [8, 7, 1, 0], "targets":[4, 1, 0]} + {"inputs": [2, 3, 4, 1], "targets":[5, 6, 1]} + The output example is: + { + "inputs": [8, 7, 1, 2, 3, 4, 1, 0, 0, 0] + "inputs_seg": [1, 1, 1, 2, 2, 2, 2, 0, 0, 0] + "inputs_pos": [0, 1, 2, 0, 1, 2, 3, 0, 0, 0] + "targets": [4, 1, 5, 6, 1, 0, 0, 0, 0, 0] + "targets_seg": [1, 1, 2, 2, 2, 0, 0, 0, 0, 0] + "targets_pos": [0, 1, 0, 1, 2, 0, 0, 0, 0, 0] + } + 0 represents padding in both the inputs and the outputs. + Sequences in the incoming examples are truncated to length "length", and the + sequences in the output examples all have fixed (padded) length "length". + + Args: + dataset: A `tf.data.Dataset`. + batch_size: Batch size of the packed dataset. + key2length: An integer, or a dict from feature-key to integer. + keys: A list of strings (e.g. ["inputs", "targets"]). + + Returns: + A `tf.data.Dataset`. + """ + raise ValueError("Not implemented in OSS yet.") diff --git a/big_vision/datasets/stvqa/stvqa.py b/big_vision/datasets/stvqa/stvqa.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/tallyqa/tallyqa.py b/big_vision/datasets/tallyqa/tallyqa.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/textcaps/textcaps.py b/big_vision/datasets/textcaps/textcaps.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/textvqa/textvqa.py b/big_vision/datasets/textvqa/textvqa.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/tfds.py b/big_vision/datasets/tfds.py new file mode 100644 index 0000000000000000000000000000000000000000..0c15dbc26f46e87d4df27027c1cca5a01b5e74fa --- /dev/null +++ b/big_vision/datasets/tfds.py @@ -0,0 +1,94 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""TensorFlow Datasets as data source for big_vision.""" +import functools + +import big_vision.datasets.core as ds_core +import jax +import numpy as np +import overrides +import tensorflow as tf +import tensorflow_datasets as tfds + + +class DataSource(ds_core.DataSource): + """Use TFDS as a data source.""" + + def __init__(self, name, split, data_dir=None, skip_decode=("image",)): + self.builder = _get_builder(name, data_dir) + self.split = split + # Each host is responsible for a fixed subset of data + process_splits = tfds.even_splits(split, jax.process_count()) + self.process_split = process_splits[jax.process_index()] + self.skip_decode = skip_decode + + @overrides.overrides + def get_tfdata( + self, ordered=False, *, process_split=True, allow_cache=True, **kw): + # The tf.data may use a lot of RAM, so we need to expose the option of not + # keeping this in memory when we use lots of input pipelines, such as when + # having many ephemeral evaluators. + return (_cached_get_dataset if allow_cache else _get_dataset)( + self.builder, self.skip_decode, + split=self.process_split if process_split else self.split, + shuffle_files=not ordered, + **kw) + + @property + @overrides.overrides + def total_examples(self): + return self.builder.info.splits[self.split].num_examples + + @overrides.overrides + def num_examples_per_process(self): + splits = tfds.even_splits(self.split, jax.process_count()) + return [self.builder.info.splits[s].num_examples for s in splits] + + +@functools.cache +def _get_builder(dataset, data_dir): + if dataset == "from_data_dir": + return tfds.builder_from_directory(data_dir) + else: + return tfds.builder(dataset, data_dir=data_dir, try_gcs=True) + + +# Cache as it may well take 1-2min on large datasets, and we may use the same +# multiple times (eg various evaluators). +def _get_dataset(builder, skip_decode, shuffle_files, split=None, **rckw): + """Returns a tf.data to be used.""" + ds = builder.as_dataset( + split=split, shuffle_files=shuffle_files, + read_config=tfds.ReadConfig( + skip_prefetch=True, # We prefetch after pipeline. + try_autocache=False, # We control this, esp. for few-shot. + add_tfds_id=True, + **rckw, + ), + decoders={ + f: tfds.decode.SkipDecoding() + for f in skip_decode if f in builder.info.features + }) + + def _hash_tfds_id(example): + id_ = tf.strings.to_hash_bucket_strong( + example["tfds_id"], + np.iinfo(np.uint32).max, # Max value + [3714561454027272724, 8800639020734831960]) # Magic. + example["_id"] = tf.bitcast(id_, tf.int32)[0] # good device dtype. + return example + + return ds.map(_hash_tfds_id) +_cached_get_dataset = functools.cache(_get_dataset) diff --git a/big_vision/datasets/vizwizvqa/vizwizvqa.py b/big_vision/datasets/vizwizvqa/vizwizvqa.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/vqa/vqa.py b/big_vision/datasets/vqa/vqa.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/widgetcap/widgetcap.py b/big_vision/datasets/widgetcap/widgetcap.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/xgqa/xgqa.py b/big_vision/datasets/xgqa/xgqa.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/datasets/xm3600/xm3600.py b/big_vision/datasets/xm3600/xm3600.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/evaluators/__init__.py b/big_vision/evaluators/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/evaluators/classification.py b/big_vision/evaluators/classification.py new file mode 100644 index 0000000000000000000000000000000000000000..263ead8f5027f4b8e640b9ba42a72b3cbc33adf2 --- /dev/null +++ b/big_vision/evaluators/classification.py @@ -0,0 +1,76 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Evaluator for the classfication task.""" +# pylint: disable=consider-using-from-import + +import functools + +from big_vision.evaluators import common +import big_vision.utils as u +import jax +import jax.numpy as jnp + + +# Temporary global flag to facilitate backwards compatability. Will be removed +# by the end of year 2023. +API = 'jit' + + +# To avoid re-compiling the function for every new instance of the same +# evaluator on a different dataset! +@functools.cache +def get_eval_fn(predict_fn, loss_name): + """Produces eval function, also applies pmap.""" + @jax.jit + def _eval_fn(train_state, batch, labels, mask): + logits, *_ = predict_fn(train_state, batch) + + # Ignore the entries with all zero labels for evaluation. + mask *= labels.max(axis=1) + + loss = getattr(u, loss_name)( + logits=logits, labels=labels, reduction=False) + loss = jnp.sum(loss * mask) + + top1_idx = jnp.argmax(logits, axis=1) + # Extracts the label at the highest logit index for each image. + top1_correct = jnp.take_along_axis( + labels, top1_idx[:, None], axis=1)[:, 0] + ncorrect = jnp.sum(top1_correct * mask) + nseen = jnp.sum(mask) + return ncorrect, loss, nseen + return _eval_fn + + +class Evaluator: + """Classification evaluator.""" + + def __init__(self, predict_fn, loss_name, label_key='labels', **kw): + self.get_data_iter, self.steps = common.eval_input_pipeline(**kw) + self.eval_fn = get_eval_fn(predict_fn, loss_name) + self.label_key = label_key + + def run(self, train_state): + """Computes all metrics.""" + ncorrect, loss, nseen = 0, 0, 0 + for _, batch in zip(range(self.steps), self.get_data_iter()): + labels, mask = batch.pop(self.label_key), batch.pop('_mask') + batch_ncorrect, batch_losses, batch_nseen = jax.device_get( + self.eval_fn(train_state, batch, labels, mask)) + ncorrect += batch_ncorrect + loss += batch_losses + nseen += batch_nseen + yield ('prec@1', ncorrect / nseen) + yield ('loss', loss / nseen) diff --git a/big_vision/evaluators/common.py b/big_vision/evaluators/common.py new file mode 100644 index 0000000000000000000000000000000000000000..42dcdbb4b52a5208673821b9c68df246709fcf6d --- /dev/null +++ b/big_vision/evaluators/common.py @@ -0,0 +1,228 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utils for evaluators in general.""" + +import dataclasses +import functools +import importlib +import json +import os +from typing import Any, Callable + +from absl import flags +from big_vision import input_pipeline +from big_vision.datasets import core as ds_core +from big_vision.pp import builder as pp_builder +import big_vision.utils as u +import flax +import jax +import numpy as np + +from tensorflow.io import gfile + + +def from_config(config, predict_fns, + write_note=lambda s: s, + get_steps=lambda key, cfg: cfg[f"{key}_steps"], + devices=None): + """Creates a list of evaluators based on `config`.""" + evaluators = [] + specs = config.get("evals", {}) + + for name, cfg in specs.items(): + write_note(name) + + # Pop all generic settings off so we're left with eval's kwargs in the end. + cfg = cfg.to_dict() + module = cfg.pop("type", name) + pred_key = cfg.pop("pred", "predict") + pred_kw = cfg.pop("pred_kw", None) + prefix = cfg.pop("prefix", f"{name}/") + cfg.pop("skip_first", None) + logsteps = get_steps("log", cfg) + for typ in ("steps", "epochs", "examples", "percent"): + cfg.pop(f"log_{typ}", None) + + # Use same batch_size as eval by default, to reduce fragmentation. + # TODO: eventually remove all the deprecated names... + cfg["batch_size"] = cfg.get("batch_size") or config.get("batch_size_eval") or config.get("input.batch_size") or config.get("batch_size") # pylint: disable=line-too-long + + module = importlib.import_module(f"big_vision.evaluators.{module}") + + if devices is not None: + cfg["devices"] = devices + + api_type = getattr(module, "API", "pmap") + if api_type == "pmap" and "devices" in cfg: + raise RuntimeError( + "You are seemingly using the old pmap-based evaluator, but with " + "jit-based train loop, see (internal link) for more details.") + if api_type == "jit" and "devices" not in cfg: + raise RuntimeError( + "You are seemingly using new jit-based evaluator, but with " + "old pmap-based train loop, see (internal link) for more details.") + + try: + predict_fn = predict_fns[pred_key] + except KeyError as e: + raise ValueError( + f"Unknown predict_fn '{pred_key}'. Available predict_fns are:\n" + + "\n".join(predict_fns)) from e + if pred_kw is not None: + predict_fn = _CacheablePartial(predict_fn, flax.core.freeze(pred_kw)) + evaluator = module.Evaluator(predict_fn, **cfg) + evaluators.append((name, evaluator, logsteps, prefix)) + + return evaluators + + +@dataclasses.dataclass(frozen=True, eq=True) +class _CacheablePartial: + """partial(fn, **kwargs) that defines hash and eq - to help with jit caches. + + This is particularly common in evaluators when one has many evaluator + instances that run on difference slices of data. + + Example: + + ``` + f1 = _CacheablePartial(fn, a=1) + jax.jit(f1)(...) + jax.jit(_CacheablePartial(fn, a=1))(...) # fn won't be retraced. + del f1 + jax.jit(_CacheablePartial(fn, a=1))(...) # fn will be retraced. + ``` + """ + fn: Callable[..., Any] + kwargs: flax.core.FrozenDict + + def __call__(self, *args, **kwargs): + return functools.partial(self.fn, **self.kwargs)(*args, **kwargs) + + +def eval_input_pipeline( + data, pp_fn, batch_size, devices, keep_on_cpu=(), + cache="pipeline", prefetch=1, warmup=False, +): + """Create an input pipeline in the way used by most evaluators. + + Args: + data: The configuration to create the data source (like for training). + pp_fn: A string representing the preprocessing to be performed. + batch_size: The batch size to use. + devices: The devices that the batches are sharded and pre-fetched onto. + keep_on_cpu: See input_pipeline.start_global. Entries in the batch that + should be kept on the CPU, hence could be ragged or of string type. + cache: One of "none", "pipeline", "raw_data", "final_data". Determines what + part of the input stream should be cached across evaluator runs. They use + more and more RAM, but make evals faster, in that order. + - "none": Entirely re-create and destroy the input pipeline each run. + - "pipeline": Keep the (tf.data) pipeline object alive across runs. + - "raw_data": Cache the full raw data before pre-processing. + - "final_data": Cache the full raw data after pre-processing. + prefetch: How many batches to fetch ahead. + warmup: Start fetching the first batch at creation time (right now), + instead of once the iteration starts. + + Returns: + A tuple (get_iter, steps), the first element is a function that returns + the iterator to be used for an evaluation, the second one is how many steps + should be iterated for doing one evaluation. + """ + assert ( + cache is None + or cache.lower() in ("none", "pipeline", "raw_data", "final_data") + ), f"Unknown value for cache: {cache}" + data_source = ds_core.get(**data) + tfdata, steps = input_pipeline.make_for_inference( + data_source.get_tfdata(ordered=True, allow_cache=cache.lower() != "none"), + batch_size=batch_size, + num_ex_per_process=data_source.num_examples_per_process(), + preprocess_fn=pp_builder.get_preprocess_fn(pp_fn, str(data)), + cache_final=cache == "raw_data", + cache_raw=cache == "final_data") + get_data_iter = lambda: input_pipeline.start_global( + tfdata, devices, prefetch, keep_on_cpu, warmup) + + # Possibly create one persistent iterator: + if cache in ("pipeline", "raw_data", "final_data"): + data_iter = get_data_iter() + get_data_iter = lambda: data_iter + + return get_data_iter, steps + + +def process_sum(tree): + """Sums the pytree across all processes.""" + if jax.process_count() == 1: # Avoids corner-cases on donuts. + return tree + + with jax.transfer_guard_device_to_host("allow"): + gathered = jax.experimental.multihost_utils.process_allgather(tree) + return jax.tree.map(functools.partial(np.sum, axis=0), gathered) + + +def resolve_outfile(outfile, split="", **kw): + if not outfile: + return None + + # A caveat: when workdir doesn't exist but is in the `outfile`, we should + # skip. This is common in small runs or runlocal debuggings. + if "{workdir}" in outfile and not flags.FLAGS.workdir: + return None + + return outfile.format( + workdir=flags.FLAGS.workdir, + split="".join(c if c not in "[]%:" else "_" for c in split), + step=getattr(u.chrono, "prev_step", None), + **kw, + ) + + +def multiprocess_write_json(outfile, jobj): # jobj = "json object" + """Write a single json file combining all processes' `jobj`s.""" + if not outfile: + return + + outfile = resolve_outfile(outfile) + gfile.makedirs(os.path.dirname(outfile)) + + if isinstance(jobj, list): + combine_fn = list.extend + elif isinstance(jobj, dict): + combine_fn = dict.update + else: + raise TypeError(f"Can only write list or dict jsons, but got {type(jobj)}") + + # First, each process writes its own file. + with gfile.GFile(outfile + f".p{jax.process_index()}", "w+") as f: + f.write(json.dumps(jobj)) + + u.sync() # Wait for all files to be written; `with` above does close/flush. + + # Have process 0 collect, concat, and write final output. + all_json = type(jobj)() + if jax.process_index() == 0: + for pid in range(jax.process_count()): + with gfile.GFile(outfile + f".p{pid}", "r") as f: + combine_fn(all_json, json.loads(f.read())) + with gfile.GFile(outfile, "w+") as f: + f.write(json.dumps(all_json)) + + # Cleanup time + u.sync() + gfile.remove(outfile + f".p{jax.process_index()}") + + return all_json diff --git a/big_vision/evaluators/fewshot_lsr.py b/big_vision/evaluators/fewshot_lsr.py new file mode 100644 index 0000000000000000000000000000000000000000..1b7019ad3fa58936975b631206947b3b33ecdc67 --- /dev/null +++ b/big_vision/evaluators/fewshot_lsr.py @@ -0,0 +1,245 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utils for few-shot evaluation.""" +# pylint: disable=consider-using-from-import,g-importing-member + +import functools + +import big_vision.datasets.core as ds_core +import big_vision.input_pipeline as input_pipeline +import big_vision.pp.builder as pp_builder +import big_vision.utils as u +import jax +import jax.numpy as jnp +from jax.sharding import NamedSharding as Sharding +from jax.sharding import PartitionSpec as P +import numpy as np + +BIAS_CONSTANT = 100.0 + +# Temporary global flag to facilitate backwards compatability. Will be removed +# by the end of year 2023. +API = "jit" + + +# Setup function for few-shot regression on CPU to avoid "polluting" the TPU. +@u.jit_cpu(static_argnums=(2,)) +def _precompute_cache(x, y, num_classes): + """Cache quantities to speed-up the computation of L2-regularized least-sq.""" + # Whiten + mean = jnp.mean(x, axis=0, keepdims=True) + std = jnp.std(x, axis=0, keepdims=True) + 1e-5 + x = (x - mean) / std + + # Add a constant feature for the bias, large so it's almost unregularized: + x = jnp.pad(x, ((0, 0), (0, 1)), constant_values=BIAS_CONSTANT) + + # To one-hot representation rescaled into {-1, 1} + y = 2.0 * jax.nn.one_hot(y, num_classes) - 1.0 + + num_points, dim = x.shape + # Let N be the number of points, D the dimension and C the number of classes. + # We have x of shape (N, D) and y of shape (N, C). + # For least-squares, we can compute + # + # (A) when N >= D, (x^T x + l2 Id)^{-1} x^T y + # (B) when D > N, x^T (x x^T + l2 Id)^{-1} y + # + # We pre-compute the eigen-decomposition of either x^T x or x x^T which + # becomes q diag(eigs) q^T with q unitary matrix either (D, D) or (N, N) + # and eigs a vector (D,) or (N,). + # + # For any l2 > 0, we can compute (x^T x + l2 Id)^{-1} or (x x^T + l2 Id)^{-1} + # by simply computing q (diag(eigs) + l2 Id)^{-1} q^T. + # (SVD would be more natural here, but it proved slower, so we use eigh) + # + # Both cases (A) and (B) can be viewed as lhs (diag(eigs) + l2 Id)^{-1} rhs, + # where lhs/rhs are pre-computed left/right-hand sides to specify. + # + # Detailed evaluation in terms of time and fewshot metrics can be found in + # (internal link) + # + # Implemented by Rodolphe Jenatton. + if num_points >= dim: + eigs, q = jnp.linalg.eigh(x.T @ x) + rhs = q.T @ (x.T @ y) + lhs = q + else: + eigs, q = jnp.linalg.eigh(x @ x.T) + rhs = q.T @ y + lhs = x.T @ q + + cache = { + "eigs": eigs, + "rhs": rhs, + "lhs": lhs, + "mean": mean, + "std": std + } + return cache + + +@u.jit_cpu() +def _eig_fewshot_acc_fn(cache, x_test, y_test, l2_reg): + """Computes (x,y) linear regression accuracy on (x_test, y_test).""" + + x_test = (x_test - cache["mean"]) / cache["std"] + x_test = jnp.pad(x_test, ((0, 0), (0, 1)), constant_values=BIAS_CONSTANT) + + rhs = cache["rhs"] + lhs = cache["lhs"] + eigs = cache["eigs"] + + # See comments in _precompute_cache for context about the formula. + scaling = 1.0 / (eigs + l2_reg * jnp.ones_like(eigs)) + scaling = scaling.reshape((1, -1)) + w = (lhs * scaling) @ rhs + # Predict test-set values and measure their accuracy + preds = jnp.argmax(x_test @ w, axis=1) + return jnp.mean(preds == y_test) + + +class Evaluator: + """Class for few-shot evaluation.""" + + def __init__(self, predict_fn, batch_size, + datasets, shots, l2_reg, + pp_train, pp_eval, display_first, + representation_layer=None, num_seeds=3, + label_key="label", mask_key="_mask", data_dir=None, *, + devices): + self.datasets = datasets + self.shots = shots + self.l2_reg = l2_reg + self.batch_size = batch_size + self.pp_tr = pp_train + self.pp_te = pp_eval + self.display_first = display_first + self._datasets = {} # Cache for tfds data. Persists while object is alive. + self._repr = {} # Cache for precomputed repr. Persists within the run call. + self.num_seeds = num_seeds + self.label_key = label_key + self.mask_key = mask_key + self.data_dir = data_dir + self.devices = devices + self.mesh = jax.sharding.Mesh(devices, ("devices",)) + self.repr_fn = self.get_representation_fn( + predict_fn, representation_layer) + + def get_representation_fn(self, predict_fn, representation_layer): + # `out_shardings=Sharding(self.mesh, P())` will "all_gather" the outputs. + @functools.partial(jax.jit, out_shardings=Sharding(self.mesh, P())) + def _repr_fn(train_state, batch, labels, mask): + zimg, *_, out = predict_fn(train_state, batch) + if representation_layer is not None: + rep = u.tree_get(out, representation_layer) + else: + rep = zimg + return rep, labels, mask + return _repr_fn + + # Setup input pipeline. + def _get_dataset(self, dataset, train_split, test_split): + """Lazy-loads given dataset.""" + key = (dataset, train_split, test_split) + try: + return self._datasets[key] + except KeyError: + # NOTE: only supporting TFDS data for now for bwd compat/lazyness. + train_data = ds_core.get( + name=dataset, split=train_split, data_dir=self.data_dir + ) + test_data = ds_core.get( + name=dataset, split=test_split, data_dir=self.data_dir + ) + train_ds, batches_tr = input_pipeline.make_for_inference( + train_data.get_tfdata(ordered=True), + num_ex_per_process=train_data.num_examples_per_process(), + batch_size=self.batch_size, + preprocess_fn=pp_builder.get_preprocess_fn(self.pp_tr)) + test_ds, batches_te = input_pipeline.make_for_inference( + test_data.get_tfdata(ordered=True), + num_ex_per_process=test_data.num_examples_per_process(), + batch_size=self.batch_size, + preprocess_fn=pp_builder.get_preprocess_fn(self.pp_te)) + + num_classes = train_data.builder.info.features[self.label_key].num_classes + return self._datasets.setdefault( + key, (train_ds, batches_tr, test_ds, batches_te, num_classes)) + + def _get_repr(self, params, data, steps): + """Compute representation for the whole dataset.""" + pre_logits_list = [] + labels_list = [] + for batch, _ in zip( + input_pipeline.start_global(data, self.devices, 0), range(steps)): + labels, mask = batch.pop(self.label_key), batch.pop(self.mask_key) + pre_logits, labels, mask = jax.device_get(self.repr_fn( + params, batch, labels, mask)) + mask = mask.astype(bool) + pre_logits_list.append(pre_logits[mask]) + labels_list.append(labels[mask]) + pre_logits = np.concatenate(pre_logits_list, axis=0) + labels = np.concatenate(labels_list, axis=0) + + return pre_logits, labels + + def compute_fewshot_metrics(self, train_state, seed, + dataset, train_split, test_split): + """Compute few-shot metrics on one dataset.""" + if dataset in self._repr: + repr_train, labels_train, repr_test, labels_test, num_classes = ( + self._repr[dataset]) + else: + train_ds, steps_tr, test_ds, steps_te, num_classes = self._get_dataset( + dataset, train_split, test_split) + repr_train, labels_train = self._get_repr(train_state, train_ds, steps_tr) + repr_test, labels_test = self._get_repr(train_state, test_ds, steps_te) + self._repr[dataset] = (repr_train, labels_train, + repr_test, labels_test, + num_classes) + + # Collect where we have samples of which classes. + rng = np.random.default_rng(seed) + class_indices = [rng.permutation(np.where(labels_train == cls_i)[0]) + for cls_i in range(num_classes)] + + results = {} + for shots in self.shots: + all_idx = [indices[:shots] for indices in class_indices] + all_idx = np.concatenate(all_idx, axis=0) + x = u.put_cpu(repr_train[all_idx]) + y = u.put_cpu(labels_train[all_idx]) + repr_test, labels_test = u.put_cpu((repr_test, labels_test)) + + # Note the code is optimized to solve multiple LSR tasks for changing l2 + # strength, even though we currently used the fixed l2_reg constant. + cache = _precompute_cache(x, y, num_classes) + acc = _eig_fewshot_acc_fn( + cache, repr_test, labels_test, u.put_cpu(self.l2_reg)) + results[shots] = jax.device_get(acc) + + return results + + def run(self, train_state): + """New API executed in terms of old API.""" + self._repr = {} + for seed in range(self.num_seeds): + for name, dataset_args in self.datasets.items(): + result = self.compute_fewshot_metrics(train_state, seed, *dataset_args) + for shots, v in result.items(): + prefix = "a/" if (name, shots) in self.display_first else "z/" + suffix = f"-seed-{seed}" + yield f"{prefix}{name}_{shots}shot{suffix}", v diff --git a/big_vision/evaluators/mean.py b/big_vision/evaluators/mean.py new file mode 100644 index 0000000000000000000000000000000000000000..a38fb21d3cd7ab7d37a5734c67640994c0956b36 --- /dev/null +++ b/big_vision/evaluators/mean.py @@ -0,0 +1,80 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Evaluator for computing mean of per-example metrics. + +This evaluator can be used in two ways: + 1. Create a new evaluator with reduced boilerplate by inheriting from it. + 2. For quick prototyping, use this with predict_fns which return the metrics. +""" +from functools import partial +from typing import Mapping + +from big_vision.evaluators import common + +import jax +import jax.numpy as jnp +import numpy as np + + +# Temporary global flag to facilitate backwards compatability. Will be removed +# by the end of year 2023. +API = 'jit' + + +# Note: global to avoid jax re-compiling across different evaluator instances. +@partial(jax.jit, static_argnums=0) +def _run_predict_fn(predict_fn, train_state, batch): + """Sum per-example metrics weighted by `_mask`.""" + metrics = predict_fn(train_state, batch) + mask = batch['_mask'] + # Sanity check output format of predict_fn. + assert isinstance(metrics, Mapping), 'predict_fn must return a dict' + for y in jax.tree.leaves(metrics): + if y.shape != mask.shape: + raise ValueError( + f'Expected per-example metrics of shape {mask.shape} found ' + f'{jax.tree.map(lambda x: x.shape, metrics)}.') + metrics = {**metrics, '_mask': mask} + return jax.tree.map(lambda x: jnp.sum(jnp.where(mask, x, 0)), metrics) + + +class Evaluator: + """Report the mean of per-example metrics computed by predict_fn. + + `predict_fn(params, batch)` must return a dict from metric name to + per-example metrics of shape [batch_size]. + """ + + def __init__(self, predict_fn, **kw): + self.get_data_iter, self.steps = common.eval_input_pipeline(**kw) + self.predict_fn = partial(_run_predict_fn, predict_fn) + + def run(self, train_state): + """Computes all metrics.""" + metrics = [] + + # Compute batch metrics without blocking. + for _, batch in zip(range(self.steps), self.get_data_iter()): + batch_metrics = self.predict_fn(train_state, batch) + metrics.append(batch_metrics) + + # Transfer metrics (blocking). + metrics = jax.device_get(metrics) + + # Accumulate metrics across batches. + metrics_sum = jax.tree.map(lambda *x: np.sum(x), *metrics) + mask_sum = metrics_sum.pop('_mask') + for key, value_sum in metrics_sum.items(): + yield (key, value_sum / mask_sum) diff --git a/big_vision/evaluators/save.py b/big_vision/evaluators/save.py new file mode 100644 index 0000000000000000000000000000000000000000..49bcfc59b9fd9c613611b1edcbd157b2d8c2d6d5 --- /dev/null +++ b/big_vision/evaluators/save.py @@ -0,0 +1,121 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Evaluator that save inputs and outputs of prediction functions.""" +import functools + +from absl import flags +from absl import logging + +from big_vision import input_pipeline +from big_vision import optax as bv_optax +from big_vision import utils +from big_vision.datasets import core as ds_core +from big_vision.pp import builder as pp_builder + +import jax +import numpy as np + +# Temporary global flag to facilitate backwards compatability. Will be removed +# by the end of year 2023. +API = 'jit' + + +# Note: global to avoid jax re-compiling across different evaluator instances. +def _run_predict_fn(predict_fn, train_state, batch): + """Run predict_fn and gather all outputs on all devices.""" + y = predict_fn(train_state, batch) + return {'inputs': batch, 'outputs': y} + + +class Evaluator: + """Evaluator that saves the inputs and outputs of a prediction function. + + Example configuration: + + ``` + config.evals.save_pred = { + 'type': 'save', + 'pred': 'inference', + 'outfile': '{workdir}/inference-{step:09d}.npz', + 'data': ..., 'pp_fn': ..., 'log_steps': ..., + } + ``` + + Results can then be easily inspected in a notebook such as: + + ``` + results = utils.load_checkpoint("") + inputs, outputs = (results["inputs"], results["outputs"]) + ``` + """ + + def __init__(self, predict_fn, data, pp_fn, batch_size, outfile, + cache_final=True, cache_raw=False, prefetch=1, *, devices): + replicate = jax.sharding.NamedSharding( + jax.sharding.Mesh(devices, ('devices',)), + jax.sharding.PartitionSpec() + ) + self.predict_fn = functools.partial( + jax.jit(_run_predict_fn, static_argnums=0, out_shardings=replicate), + predict_fn, + ) + + data = ds_core.get(**data) + self.dataset, self.steps = input_pipeline.make_for_inference( + data.get_tfdata(ordered=True), + batch_size=batch_size, + num_ex_per_process=data.num_examples_per_process(), + preprocess_fn=pp_builder.get_preprocess_fn(pp_fn), + cache_final=cache_final, + cache_raw=cache_raw, + ) + self.data_iter = input_pipeline.start_global( + self.dataset, devices, prefetch + ) + + self.outfile = outfile + + def run(self, train_state): + """Compute all predictions, gather in main host and save in outfile.""" + step = jax.device_get(bv_optax.get_count(train_state['opt'], jittable=True)) + outfile = self.outfile.format(workdir=flags.FLAGS.workdir, step=step) + + count = 0 + outputs = [] + for _, batch in zip(range(self.steps), self.data_iter): + out = self.predict_fn(train_state, batch) + if jax.process_index(): + continue + + out = jax.device_get(out) + mask = out['inputs']['_mask'] + out = jax.tree.map(lambda x: x[mask == 1], out) # pylint: disable=cell-var-from-loop + count += mask.shape[0] + out['inputs'].pop('_mask') + outputs.append(out) + + logging.log_every_n_seconds( + logging.INFO, 'Processed %i examples so far.', 60, + count) + + if jax.process_index(): + return + + logging.info('Saving %d examples in %s', count, outfile) + outputs = jax.tree.map(lambda *x: np.concatenate(x, axis=0), *outputs) + utils.save_checkpoint(outputs, outfile, compressed=True) + return + + yield None # pylint: disable=unreachable diff --git a/big_vision/input_pipeline.py b/big_vision/input_pipeline.py new file mode 100644 index 0000000000000000000000000000000000000000..afe20894c3ac5fee4e0ef6bd549151b79f4f224c --- /dev/null +++ b/big_vision/input_pipeline.py @@ -0,0 +1,357 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""ImageNet input pipeline.""" +import collections +import functools +import itertools +import math +import multiprocessing.pool + +from absl import logging +from big_vision.datasets import sequence_packing +import big_vision.datasets.core as ds_core +import big_vision.pp.builder as pp_builder +import big_vision.utils as u +import einops +import jax +import numpy as np +import tensorflow as tf + + +DEFAULT_NUM_PARALLEL_CALLS = 100 + + +def make_for_train( + data, preprocess_fn, batch_size, + shuffle_buffer_size=None, cache_raw=False, + num_parallel_calls=DEFAULT_NUM_PARALLEL_CALLS, prefetch=2, + *, + pre_filter_fn=None, post_filter_fn=None, + pack=None, skip_errors=False, +): + """Makes an input pipeline for training.""" + # Use data filtering at your own risk: the actual split sizes won't be known + # in advance, so epoch-based things won't work correctly. + + data = _add_tpu_host_options(data) + + data = data.filter(pre_filter_fn) if pre_filter_fn else data + data = data.cache() if cache_raw else data + + # First shuffle and then repeat (each with a different shuffle). This way + # the data for one epoch is all seen before the next one is processed and + # significantly affects the number of times each example is seen when + # processing for small number of epochs. + if shuffle_buffer_size: + data = data.shuffle(shuffle_buffer_size, reshuffle_each_iteration=True) + data = data.repeat(None) + + data = data.map(preprocess_fn, num_parallel_calls=num_parallel_calls) + data = data.filter(post_filter_fn) if post_filter_fn else data + + data = data.ignore_errors(log_warning=True) if skip_errors else data + + if pack: + data = sequence_packing.pack_dataset( + data, + batch_size // jax.process_count() if batch_size else None, + pack.to_dict()) + + # Drop remainder makes shape fully static, so we can later use it if needed. + if batch_size: + data = data.batch(batch_size // jax.process_count(), drop_remainder=True) + if prefetch: # None means autotune, but we never want that. + data = data.prefetch(prefetch) + return data + + +def training(input_config): + """Reads the data from a single dataset, or mixes it from multiple. + + The data is read either from one or mixed from multiple datasets, depending + on the `input_config`. + + Args: + input_config: Configures the input pipeline. See input_pipeline_test for + examples. + + Returns: + A tuple containing (possibly mixed) tf.data.Dataset and a total number of + training examples. + """ + per_pipeline_configs = ( + "shuffle_buffer_size", "cache_raw", "num_parallel_calls", + "pre_filter_fn", "post_filter_fn", "pack", "skip_errors") + def config_to_kw(config): + assert "filter_fn" not in config, "Deprecated; use `pre_filter_fn` instead." + return {k: config[k] for k in per_pipeline_configs if k in config} + + batch_size = input_config.batch_size + # Handle separately the common case when no mixing happens. + if isinstance(input_config.data.get("name"), str): + train_data = ds_core.get(**input_config.data) + train_ds = make_for_train( + data=train_data.get_tfdata(ordered=False, + **input_config.get("tfdata", {})), + batch_size=batch_size, + preprocess_fn=pp_builder.get_preprocess_fn(input_config.get("pp")), + prefetch=input_config.get("prefetch", 2), # Default 2 for bwd compat. + **config_to_kw(input_config) + ) + return train_ds, train_data.total_examples + + # A helpful error instead of silent ignore: + for k in per_pipeline_configs: + assert k not in input_config, f"{k} is per-dataset in multi-input." + + # Parallelize the loading of datasets when doing data mixture. + # For larger mixes, we sometimes spend >5min when doing sequentially. + # NOTE: functools.cache is thread-safe. + def _make(name_and_weight): + name, weight = name_and_weight + dataset = input_config[name] + train_data = ds_core.get(**dataset.data) + dataset = make_for_train( + data=train_data.get_tfdata(ordered=False, **dataset.get("tfdata", {})), + # Don't batch the data just yet, it will be done after + # mixing the different datasets below. + batch_size=None, + preprocess_fn=pp_builder.get_preprocess_fn(dataset.get("pp"), name), + prefetch=0, # Prefetching each pipeline leads to huge OOMs. + **config_to_kw(dataset) + ) + if keys := input_config.get("keep_only"): + dataset = dataset.map(lambda d, keys=keys: {k: d[k] for k in keys}) + return name, dataset, weight, train_data.total_examples + + names, datasets, weights, totals = [], [], [], [] + pool = multiprocessing.pool.ThreadPool( + input_config.get("thread_pool_size", len(input_config.data)) + ) + for name, dataset, weight, total in pool.map( + # Skip weight=0 datasets as a convenient optimization in sweeps. + _make, ((name, w) for name, w in input_config.data.items() if w)): + names.append(name) + datasets.append(dataset) + weights.append(weight) + totals.append(total) + + # Normalize the weights such that they sum up to 1. + weights = [x / sum(weights) for x in weights] + + logging.info( + "NOTE: Total dataset mix size: %d\nContributions:\n%s", sum(totals), + "\n".join(f"{ds}: {n} ({w * 100:.2g}%)" + for ds, n, w in zip(names, totals, weights)) + ) + + train_ds = tf.data.Dataset.sample_from_datasets( + datasets, weights, stop_on_empty_dataset=True) + if input_config.get("pack"): + train_ds = sequence_packing.pack_dataset( + train_ds, + input_config["batch_size"] // jax.process_count(), + input_config.pack.to_dict()) + + train_ds = train_ds.batch( + input_config["batch_size"] // jax.process_count(), drop_remainder=True) + if (pf := input_config.get("prefetch", 2)): + train_ds = train_ds.prefetch(pf) + + return train_ds, sum(totals) + + +# The pipeline below is used for evals in multi-{G,T}PU and multi-host settings. +# As the total number of examples may not be evenly divisible accross all +# devices, we use the `infinite tf.data padding` trick, which was suggested by +# Andreas Steiner and also implemented by him in the clu library: +# https://github.com/google/CommonLoopUtils/blob/84b777c42dfd3fb6685537138433bfeb5241a006/clu/deterministic_data.py#L304. +def make_for_inference( + data, preprocess_fn, batch_size, num_ex_per_process, + cache_raw=False, cache_final=False, + num_parallel_calls=DEFAULT_NUM_PARALLEL_CALLS, prefetch=1, +): + """Makes an input pipeline for inference.""" + + data = _add_tpu_host_options(data) + data = data.cache() if cache_raw else data + data = data.map(_add_internal_fields(preprocess_fn), + num_parallel_calls=num_parallel_calls) + data = data.concatenate(_get_pad_data(data)) + + local_batch_size = batch_size // jax.process_count() + # This is just like `batch`, but allows batching elements of different shapes + # into a tf.RaggedTensor. Elements of the same fixed shape remain tf.Tensors. + # Since we do 'infinite' padding it is safe to drop the remainder. + data = data.ragged_batch(batch_size=local_batch_size, drop_remainder=True) + + # We need to make sure that all hosts process all data and exactly the same + # number of batches. Below we take max per-host num examples and use it on all + # hosts to derive the number of batches. + num_batches = math.ceil(max(num_ex_per_process) / local_batch_size) + data = data.take(num_batches) + + # Note we cache data after a finite number of batches is taken. + data = data.cache() if cache_final else data + data = data.repeat() + data = data.prefetch(prefetch) if prefetch else data + return data, num_batches + + +def _get_pad_data(data): + def zeros_like_spec(spec): + # For unknown/flexible dimensions (None), just use 0 instead. + return tf.zeros([x or 0 for x in spec.shape], spec.dtype) + + zero = jax.tree.map(zeros_like_spec, data.element_spec) + return tf.data.Dataset.from_tensors(zero).repeat() + + +def _add_internal_fields(pp_fn): + """Wraps pp_fn to add _mask and _id keys.""" + # Adds internal keys, that we either, in this order of preference: + # 1. keep from result of pp_fn, + # 2. carry over from raw (not pp_fn'd) example, or + # 3. add, if that makes sense. + def _pp_fn(example): + result = pp_fn(example) + # _mask will be False on padded examples (see _get_pad_data). + result.setdefault("_mask", example.get("_mask", tf.constant(True))) + # Not all data-sources can provide an ID. Only carry-over if it can: + if "_id" in example and "_id" not in result: + result["_id"] = example["_id"] + return result + return _pp_fn + + +def _add_tpu_host_options(data): + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + options.threading.max_intra_op_parallelism = 1 + + # Stop a whole bunch of magic stuff that eats up all RAM: + options.experimental_optimization.inject_prefetch = False + + return data.with_options(options) + + +def prefetch_iterator(it, n): + """Runs iterator `it` ahead for `n` steps. Adapted from flax.""" + if not n: + yield from it + return + queue = collections.deque() + + def enqueue(n_steps): # Enqueues *up to* `n` elements from the iterator. + for data in itertools.islice(it, n_steps): + # Prefetching will parallelize any processing that happens in a different + # thread (like `jax.device_put()`), but it will be of no use for + # processing that happens in the same thread. + queue.append(data) + + enqueue(n) # Fill up the buffer. + while queue: + yield queue.popleft() + enqueue(1) + + +def threadstart_iterator(it): + """Starts an iterator right away in a background thread.""" + # We already want to "start" the iterator in order to start the underlying + # dataset prefetch mechanisms, so here we get the first element. But we don't + # want to lose it from training, so we yield that one afterwards. + # (internal link) + pool = multiprocessing.pool.ThreadPool(processes=1) + first_ex_promise = pool.apply_async(lambda: next(it)) + + yield first_ex_promise.get() + yield from it + + +def tf_to_numpy(x): + """Convert any TF types to numpy.""" + if isinstance(x, tf.Tensor): + if x.dtype != tf.string: # Dense, non-string tensor? Easy! + return x.numpy() + else: # A dense string tensor? Turn into actual strings, not bytes. + return np.vectorize(bytes.decode, otypes=[str])(x.numpy()) + + # The rest deals with RaggedTensors, for two main reasons: + # - For strings, recursively apply the above conversion + # - For common cases (eg batch of images), return more reasonable shapes. + + # Replace all None's in the shape by a fixed number, in the (somewhat common) + # case that they are marked ragged, but really all have the same shape. + real_shape = list(x.shape) + for i, s in enumerate(real_shape[1:]): + if s is not None: continue + rowlens = np.diff(x.nested_row_splits[i]) + if len(set(rowlens)) == 1: + real_shape[i + 1] = rowlens[0] + + if None not in real_shape: + return tf_to_numpy(x.flat_values).reshape(real_shape) + + # It's actually ragged, reconstruct the array from the variable length pieces. + splits = x.row_splits.numpy() + rows = [tf_to_numpy(x.values[splits[i]:splits[i + 1]]) + for i in range(len(splits) - 1)] + return np.fromiter(rows, dtype=object) + + +# Note that the order of global devices for sharding data is important and +# should be compatible with device order used for models params, state, etc. +def start_global( + data, global_devices, n_prefetch=1, keep_on_cpu=frozenset(), warmup=False): + """Starts the global input pipeline.""" + def maybe_shard(name, x): + if name in keep_on_cpu: + return tf_to_numpy(x) + return u.make_fsarray_from_local_slice(x, global_devices) + + it = iter(data) + if warmup: # actually pre-fill shuffle buffers etc. + it = threadstart_iterator(it) + + it = (u.tree_map_with_names(maybe_shard, elem) for elem in it) + return prefetch_iterator(it, n_prefetch) + + +########################################################################## +# The code below is pmap-specific and is deprecated, please switch to jit. +########################################################################## + + +def shard_and_put(x, shard=True, put=True): + x = np.asarray(memoryview(x)) # No-copy conversion: http://(internal link) + if shard: + x = einops.rearrange(x, "(d l) ... -> d l ...", d=jax.local_device_count()) + if shard and put: # Only works for pmap (for now). + x = jax.device_put_sharded(list(x), jax.local_devices()) + return x + + +def start_input_pipeline(data, n_prefetch=1, shard=True): + fn = functools.partial(shard_and_put, shard=shard, put=n_prefetch) + it = (jax.tree.map(fn, elem) for elem in iter(data)) + return prefetch_iterator(it, n_prefetch) + + +def start_ragged_input_pipeline(data, n_prefetch=1, shard=True, ragged=None): + def maybe_shard_and_put(name, x): + return x if name in (ragged or {}) else shard_and_put(x, shard) + + it = (u.tree_map_with_names(maybe_shard_and_put, elem) for elem in iter(data)) + return prefetch_iterator(it, n_prefetch) diff --git a/big_vision/models/__init__.py b/big_vision/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/models/__pycache__/__init__.cpython-310.pyc b/big_vision/models/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9748cf0b3d1b5cd9f51ba3b66e6c286fe4b92cf Binary files /dev/null and b/big_vision/models/__pycache__/__init__.cpython-310.pyc differ diff --git a/big_vision/models/__pycache__/__init__.cpython-311.pyc b/big_vision/models/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fae0171026676e103d9ef8eede471563b6dda5bd Binary files /dev/null and b/big_vision/models/__pycache__/__init__.cpython-311.pyc differ diff --git a/big_vision/models/__pycache__/__init__.cpython-312.pyc b/big_vision/models/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cafbfa7e6f2ef8f8858c129a56773b07eafdd2b2 Binary files /dev/null and b/big_vision/models/__pycache__/__init__.cpython-312.pyc differ diff --git a/big_vision/models/__pycache__/bit.cpython-310.pyc b/big_vision/models/__pycache__/bit.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4f8e354e9b5b803d61159cea38baacce8a02a731 Binary files /dev/null and b/big_vision/models/__pycache__/bit.cpython-310.pyc differ diff --git a/big_vision/models/__pycache__/bit.cpython-311.pyc b/big_vision/models/__pycache__/bit.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b6015a82b4f1ac173370e548f3fbf3711b0d1c6c Binary files /dev/null and b/big_vision/models/__pycache__/bit.cpython-311.pyc differ diff --git a/big_vision/models/__pycache__/bit.cpython-312.pyc b/big_vision/models/__pycache__/bit.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99b41d36fecc6d5f32edce875b53e72ab0a04104 Binary files /dev/null and b/big_vision/models/__pycache__/bit.cpython-312.pyc differ diff --git a/big_vision/models/__pycache__/common.cpython-310.pyc b/big_vision/models/__pycache__/common.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..af4d1b826c6b858a664602a85922a98c85d3d069 Binary files /dev/null and b/big_vision/models/__pycache__/common.cpython-310.pyc differ diff --git a/big_vision/models/__pycache__/common.cpython-311.pyc b/big_vision/models/__pycache__/common.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce19cb783f0a55deaf8116fa4d373dc02e3f8279 Binary files /dev/null and b/big_vision/models/__pycache__/common.cpython-311.pyc differ diff --git a/big_vision/models/__pycache__/common.cpython-312.pyc b/big_vision/models/__pycache__/common.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e6e3dae279e6163dc21bcd8854ae8fcda9d482d7 Binary files /dev/null and b/big_vision/models/__pycache__/common.cpython-312.pyc differ diff --git a/big_vision/models/__pycache__/vit.cpython-310.pyc b/big_vision/models/__pycache__/vit.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c889a8676541b38d002a3987118d68419d19b9b Binary files /dev/null and b/big_vision/models/__pycache__/vit.cpython-310.pyc differ diff --git a/big_vision/models/__pycache__/vit.cpython-311.pyc b/big_vision/models/__pycache__/vit.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..718e55046180f991dce228369df145f6f9751606 Binary files /dev/null and b/big_vision/models/__pycache__/vit.cpython-311.pyc differ diff --git a/big_vision/models/__pycache__/vit.cpython-312.pyc b/big_vision/models/__pycache__/vit.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c232f2a4a832344c4fe97f55e36ada8537f79bb4 Binary files /dev/null and b/big_vision/models/__pycache__/vit.cpython-312.pyc differ diff --git a/big_vision/models/bit.py b/big_vision/models/bit.py new file mode 100644 index 0000000000000000000000000000000000000000..cd4235df9ec87549590396deb69739e310e6770d --- /dev/null +++ b/big_vision/models/bit.py @@ -0,0 +1,162 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""ResNet V1 with GroupNorm.""" + +from typing import Optional, Sequence, Union + +from big_vision import utils +from big_vision.models import common +import flax +import flax.linen as nn +import flax.training.checkpoints +import jax.numpy as jnp +import numpy as np + + +def weight_standardize(w, axis, eps): + w = w - jnp.mean(w, axis=axis) + w = w / (jnp.std(w, axis=axis) + eps) + return w + + +class StdConv(nn.Conv): + + def param(self, name, *a, **kw): + param = super().param(name, *a, **kw) + if name == "kernel": + param = weight_standardize(param, axis=[0, 1, 2], eps=1e-5) + return param + + +class ResidualUnit(nn.Module): + """Bottleneck ResNet block.""" + nmid: Optional[int] = None + strides: Sequence[int] = (1, 1) + + @nn.compact + def __call__(self, x): + nmid = self.nmid or x.shape[-1] // 4 + nout = nmid * 4 + + residual = x + if x.shape[-1] != nout or self.strides != (1, 1): + residual = StdConv(nout, (1, 1), self.strides, use_bias=False, + name="conv_proj")(residual) + residual = nn.GroupNorm(name="gn_proj")(residual) + + y = StdConv(nmid, (1, 1), use_bias=False, name="conv1")(x) + y = nn.GroupNorm(name="gn1")(y) + y = nn.relu(y) + y = StdConv(nmid, (3, 3), self.strides, use_bias=False, name="conv2")(y) + y = nn.GroupNorm(name="gn2")(y) + y = nn.relu(y) + y = StdConv(nout, (1, 1), use_bias=False, name="conv3")(y) + + y = nn.GroupNorm(name="gn3", scale_init=nn.initializers.zeros)(y) + y = nn.relu(residual + y) + return y + + +class ResNetStage(nn.Module): + """One stage of ResNet.""" + block_size: int + first_stride: Sequence[int] = (1, 1) + nmid: Optional[int] = None + + @nn.compact + def __call__(self, x): + x = ResidualUnit(self.nmid, strides=self.first_stride, name="unit1")(x) + for i in range(1, self.block_size): + x = ResidualUnit(self.nmid, name=f"unit{i + 1}")(x) + return x + + +class Model(nn.Module): + """ResNetV1.""" + num_classes: Optional[int] = None + width: float = 1 + depth: Union[int, Sequence[int]] = 50 + + @nn.compact + def __call__(self, image, *, train=False): + del train # Unused + blocks = get_block_desc(self.depth) + width = int(64 * self.width) + + out = {} + + # Root block + x = StdConv(width, (7, 7), (2, 2), use_bias=False, name="conv_root")(image) + x = nn.GroupNorm(name="gn_root")(x) + x = nn.relu(x) + x = nn.max_pool(x, (3, 3), strides=(2, 2), padding="SAME") + out["stem"] = x + + # Stages + x = ResNetStage(blocks[0], nmid=width, name="block1")(x) + out["stage1"] = x + for i, block_size in enumerate(blocks[1:], 1): + x = ResNetStage(block_size, nmid=width * 2 ** i, + first_stride=(2, 2), name=f"block{i + 1}")(x) + out[f"stage{i + 1}"] = x + out["pre_logits_2d"] = x + + # Head + x = out["pre_logits"] = jnp.mean(x, axis=(1, 2)) + + if self.num_classes: + head = nn.Dense(self.num_classes, name="head", + kernel_init=nn.initializers.zeros) + out["logits_2d"] = head(out["pre_logits_2d"]) + x = out["logits"] = head(out["pre_logits"]) + + return x, out + + +# A dictionary mapping the number of layers in a resnet to the number of +# blocks in each stage of the model. +# NOTE: Does not include 18/34 as they also need non-bottleneck block! +def get_block_desc(depth): + if isinstance(depth, list): # Be robust to silly mistakes. + depth = tuple(depth) + return { + 26: [2, 2, 2, 2], # From timm, gets ~75% on ImageNet. + 50: [3, 4, 6, 3], + 101: [3, 4, 23, 3], + 152: [3, 8, 36, 3], + 200: [3, 24, 36, 3] + }.get(depth, depth) + + +def fix_old_checkpoints(params): + """Modifies params from old checkpoints to run with current implementation.""" + params = flax.core.unfreeze( + flax.training.checkpoints.convert_pre_linen(params)) + # Old linen used to store non-squeezed GN params. + params = flax.traverse_util.unflatten_dict({ + k: np.squeeze(v) if (set(k) + & {"gn_root", "gn_proj", "gn1", "gn2", "gn3"}) else v + for k, v in flax.traverse_util.flatten_dict(params).items() + }) + return params + + +def load(init_params, init_file, model_cfg, dont_load=()): + """Load init from checkpoint.""" + del model_cfg # Unused + params = utils.load_params(init_file) + params = common.merge_params(params, init_params, dont_load) + params = fix_old_checkpoints(params) + return params diff --git a/big_vision/models/bit_paper.py b/big_vision/models/bit_paper.py new file mode 100644 index 0000000000000000000000000000000000000000..26e5ba83616ce046a78d1a9b3fa32f8b4cbc1000 --- /dev/null +++ b/big_vision/models/bit_paper.py @@ -0,0 +1,260 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""BiT models as in the paper (ResNet V2) w/ loading of public weights. + +See reproduction proof: http://(internal link)/qY70qs6j944 +""" + +import functools +import re +from typing import Optional, Sequence, Union + +from big_vision import utils as u +from big_vision.models import bit +from big_vision.models import common +import flax.linen as nn +import jax.numpy as jnp + + +def standardize(x, axis, eps): + x = x - jnp.mean(x, axis=axis, keepdims=True) + x = x / jnp.sqrt(jnp.mean(jnp.square(x), axis=axis, keepdims=True) + eps) + return x + + +# Defined our own, because we compute normalizing variance slightly differently, +# which does affect performance when loading pre-trained weights! +class GroupNorm(nn.Module): + """Group normalization (arxiv.org/abs/1803.08494).""" + ngroups: int = 32 + + @nn.compact + def __call__(self, x): + + input_shape = x.shape + group_shape = x.shape[:-1] + (self.ngroups, x.shape[-1] // self.ngroups) + + x = x.reshape(group_shape) + + # Standardize along spatial and group dimensions + x = standardize(x, axis=[1, 2, 4], eps=1e-5) + x = x.reshape(input_shape) + + bias_scale_shape = tuple([1, 1, 1] + [input_shape[-1]]) + x = x * self.param('scale', nn.initializers.ones, bias_scale_shape) + x = x + self.param('bias', nn.initializers.zeros, bias_scale_shape) + return x + + +class StdConv(nn.Conv): + + def param(self, name, *a, **kw): + param = super().param(name, *a, **kw) + if name == 'kernel': + param = standardize(param, axis=[0, 1, 2], eps=1e-10) + return param + + +class RootBlock(nn.Module): + """Root block of ResNet.""" + width: int + + @nn.compact + def __call__(self, x): + x = StdConv(self.width, (7, 7), (2, 2), padding=[(3, 3), (3, 3)], + use_bias=False, name='conv_root')(x) + x = nn.max_pool(x, (3, 3), strides=(2, 2), padding=[(1, 1), (1, 1)]) + return x + + +class ResidualUnit(nn.Module): + """Bottleneck ResNet block.""" + nmid: Optional[int] = None + strides: Sequence[int] = (1, 1) + + @nn.compact + def __call__(self, x): + nmid = self.nmid or x.shape[-1] // 4 + nout = nmid * 4 + conv = functools.partial(StdConv, use_bias=False) + + residual = x + x = GroupNorm(name='gn1')(x) + x = nn.relu(x) + + if x.shape[-1] != nout or self.strides != (1, 1): + residual = conv(nout, (1, 1), self.strides, name='conv_proj')(x) + + x = conv(nmid, (1, 1), name='conv1')(x) + x = GroupNorm(name='gn2')(x) + x = nn.relu(x) + x = conv(nmid, (3, 3), self.strides, padding=[(1, 1), (1, 1)], + name='conv2')(x) + x = GroupNorm(name='gn3')(x) + x = nn.relu(x) + x = conv(nout, (1, 1), name='conv3')(x) + + return x + residual + + +class ResNetStage(nn.Module): + """A stage (sequence of same-resolution blocks).""" + block_size: int + nmid: Optional[int] = None + first_stride: Sequence[int] = (1, 1) + + @nn.compact + def __call__(self, x): + out = {} + x = out['unit01'] = ResidualUnit( + self.nmid, strides=self.first_stride, name='unit01')(x) + for i in range(1, self.block_size): + x = out[f'unit{i+1:02d}'] = ResidualUnit( + self.nmid, name=f'unit{i+1:02d}')(x) + return x, out + + +class Model(nn.Module): + """ResNetV2.""" + num_classes: Optional[int] = None + width: int = 1 + depth: Union[int, Sequence[int]] = 50 # 50/101/152, or list of block depths. + head_zeroinit: bool = True + + @nn.compact + def __call__(self, image, *, train=False): + blocks = bit.get_block_desc(self.depth) + width = int(64 * self.width) + out = {} + + x = out['stem'] = RootBlock(width=width, name='root_block')(image) + + # Blocks + x, out['stage1'] = ResNetStage(blocks[0], nmid=width, name='block1')(x) + for i, block_size in enumerate(blocks[1:], 1): + x, out[f'stage{i + 1}'] = ResNetStage( + block_size, width * 2 ** i, + first_stride=(2, 2), name=f'block{i + 1}')(x) + + # Pre-head + x = out['norm_pre_head'] = GroupNorm(name='norm-pre-head')(x) + x = out['pre_logits_2d'] = nn.relu(x) + x = out['pre_logits'] = jnp.mean(x, axis=(1, 2)) + + # Head + if self.num_classes: + kw = {'kernel_init': nn.initializers.zeros} if self.head_zeroinit else {} + head = nn.Dense(self.num_classes, name='head', **kw) + out['logits_2d'] = head(out['pre_logits_2d']) + x = out['logits'] = head(out['pre_logits']) + + return x, out + + +def load(init_params, init_file, model_cfg, dont_load=()): + """Loads the TF-dumped NumPy or big_vision checkpoint. + + Args: + init_params: random init params from which the new head is taken. + init_file: comes from `config.model_init`, can either be an absolute + path (ie starts with /) to the checkpoint, or a string like + "L-imagenet2012" describing one of the variants from the paper. + model_cfg: the model configuration. + dont_load: list of param names to be reset to init. + + Returns: + The loaded parameters. + """ + + # Support for vanity model names from the paper. + vanity = { + 'FunMatch-224px-i1k82.8': 'gs://bit_models/distill/R50x1_224.npz', + 'FunMatch-160px-i1k80.5': 'gs://bit_models/distill/R50x1_160.npz', + } + if init_file[0] in ('L', 'M', 'S'): # The models from the original paper. + # Supported names are of the following type: + # - 'M' or 'S': the original "upstream" model without fine-tuning. + # - 'M-ILSVRC2012': i21k model fine-tuned on i1k. + # - 'M-run0-caltech101': i21k model fine-tuned on VTAB's caltech101. + # each VTAB fine-tuning was run 3x, so there's run0, run1, run2. + if '-' in init_file: + up, down = init_file[0], init_file[1:] + else: + up, down = init_file, '' + down = {'-imagenet2012': '-ILSVRC2012'}.get(down, down) # normalize + fname = f'BiT-{up}-R{model_cfg.depth}x{model_cfg.width}{down}.npz' + fname = f'gs://bit_models/{fname}' + else: + fname = vanity.get(init_file, init_file) + + params = u.load_params(fname) + params = maybe_convert_big_transfer_format(params) + return common.merge_params(params, init_params, dont_load) + + +def maybe_convert_big_transfer_format(params_tf): + """If the checkpoint comes from legacy codebase, convert it.""" + + # Only do anything at all if we recognize the format. + if 'resnet' not in params_tf: + return params_tf + + # For ease of processing and backwards compatibility, flatten again: + params_tf = dict(u.tree_flatten_with_names(params_tf)[0]) + + # Works around some files containing weird naming of variables: + for k in list(params_tf): + k2 = re.sub('/standardized_conv2d_\\d+/', '/standardized_conv2d/', k) + if k2 != k: + params_tf[k2] = params_tf[k] + del params_tf[k] + + params = { + 'root_block': {'conv_root': {'kernel': params_tf[ + 'resnet/root_block/standardized_conv2d/kernel']}}, + 'norm-pre-head': { + 'bias': params_tf['resnet/group_norm/beta'][None, None, None], + 'scale': params_tf['resnet/group_norm/gamma'][None, None, None], + }, + 'head': { + 'kernel': params_tf['resnet/head/conv2d/kernel'][0, 0], + 'bias': params_tf['resnet/head/conv2d/bias'], + } + } + + for block in ('block1', 'block2', 'block3', 'block4'): + params[block] = {} + units = set([re.findall(r'unit\d+', p)[0] for p in params_tf.keys() + if p.find(block) >= 0]) + for unit in units: + params[block][unit] = {} + for i, group in enumerate('abc', 1): + params[block][unit][f'conv{i}'] = { + 'kernel': params_tf[f'resnet/{block}/{unit}/{group}/standardized_conv2d/kernel'] # pylint: disable=line-too-long + } + params[block][unit][f'gn{i}'] = { + 'bias': params_tf[f'resnet/{block}/{unit}/{group}/group_norm/beta'][None, None, None], # pylint: disable=line-too-long + 'scale': params_tf[f'resnet/{block}/{unit}/{group}/group_norm/gamma'][None, None, None], # pylint: disable=line-too-long + } + + projs = [p for p in params_tf.keys() + if p.find(f'{block}/{unit}/a/proj') >= 0] + assert len(projs) <= 1 + if projs: + params[block][unit]['conv_proj'] = { + 'kernel': params_tf[projs[0]] + } + + return params diff --git a/big_vision/models/common.py b/big_vision/models/common.py new file mode 100644 index 0000000000000000000000000000000000000000..175dfa77a1360bc2a0276fa12245c8d357b39406 --- /dev/null +++ b/big_vision/models/common.py @@ -0,0 +1,133 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities shared across models.""" + +from absl import logging +import big_vision.utils as u +import flax.linen as nn +import jax +import jax.numpy as jnp + + +def merge_params(loaded, inited, dont_load=(), match_dtype=False): + """Makes `loaded` pytree match `init`, warning or failing on mismatch. + + Args: + loaded: pytree of parameters, typically loaded from a checkpoint. + inited: pytree of parameter, typically coming from model init. + dont_load: List of regexes for parameters which shall not be taken + from `loaded`, either because they should remain at their init value, + or because they are missing on either side. + match_dtype: returned pytree as leaves converted to dtype from `inited`. + + Returns: + If successful, a new pytree which matches the structure of `init` + but contains values from `loaded`, except for `dont_load`. + + If structures don't match and mismatches are not covered by regexes in + `dont_load` argument, then raises an exception with more information. + """ + if inited is None: # A useful shortcut for example for colabs. + return loaded + + dont_load = u.check_and_compile_patterns(dont_load) + + def should_merge(name): + return not any(pattern.fullmatch(name) for pattern in dont_load) + + loaded_flat, _ = u.tree_flatten_with_names(loaded) + inited_flat, _ = u.tree_flatten_with_names(inited) + loaded_flat = {k: v for k, v in loaded_flat} + inited_flat = {k: v for k, v in inited_flat} + + # Let's first build the pytree from all common keys. + merged = {} + for name, init_val in inited_flat.items(): + # param is present in both. Load or ignore it! + if name in loaded_flat and should_merge(name): + merged[name] = loaded_flat[name] + if match_dtype: + merged[name] = loaded_flat[name].astype(init_val.dtype) + else: + logging.info("Ignoring checkpoint and using init value for %s", name) + merged[name] = init_val + + def pp(title, names, indent=" "): # Just pretty-printing + if names: + return f"{title}:\n" + "\n".join(f"{indent}{k}" for k in sorted(names)) + else: + return "" + + # Now, if there are keys that only exist in inited or loaded, be helpful: + not_in_loaded = inited_flat.keys() - loaded_flat.keys() + not_in_inited = loaded_flat.keys() - inited_flat.keys() + logging.info(pp("Parameters in model but not in checkpoint", not_in_loaded)) + logging.info(pp("Parameters in checkpoint but not in model", not_in_inited)) + + # And now see if any of them are not explicitly ignored => an error + not_in_loaded = {k for k in not_in_loaded if should_merge(k)} + not_in_inited = {k for k in not_in_inited if should_merge(k)} + + if not_in_loaded or not_in_inited: + raise ValueError( + pp("Params in checkpoint", loaded_flat.keys()) + "\n" + + pp("Params in model (code)", inited_flat.keys()) + "\n" + + pp("Params in model (code) but not in checkpoint and not `dont_load`ed", + not_in_loaded, indent=" - ") + "\n" + # Special indent for tests. + pp("Params in checkpoint but not in model (code) and not `dont_load`ed", + not_in_inited, indent=" + ")) # Special indent for tests. + + return u.recover_tree(merged.keys(), merged.values()) + + +class AddPositionEmbs(nn.Module): + """Adds positional embeddings to the inputs, supports caching for decode. + + Attributes: + decode: whether to run in single-position autoregressive mode. + """ + decode: bool = False + + @nn.compact + def __call__(self, inputs, posemb): + """Applies AddPositionEmbs module. + + Adds posemb to the inputs, supports single-position autoregressive mode. + + Args: + inputs: input data [batch_size, seq_len, emb_dim]. + posemb: positional embeddings. + + Returns: + output: inputs modulated by pos-embeddings [batch_size, seq_len, emb_dim]. + """ + assert inputs.ndim == 3, f"Unexpected inputs shape: {inputs.shape}" + _, seq_len, emb_dim = inputs.shape + pe = posemb[:, :seq_len, :] + + if self.decode: + is_initialized = self.has_variable("cache", "cache_index") + # We use a cache position index for tracking decoding position. + cache_index = self.variable("cache", "cache_index", + lambda: jnp.array(0, dtype=jnp.uint32)) + if is_initialized: + i = cache_index.value + cache_index.value = i + 1 + # Returns posemb[0, i, :], the positional embedding for the + # current decoding position. + pe = jax.lax.dynamic_slice(posemb, + start_indices=jnp.array((0, i, 0)), + slice_sizes=(1, 1, emb_dim)) + return inputs + pe diff --git a/big_vision/models/mlp_mixer.py b/big_vision/models/mlp_mixer.py new file mode 100644 index 0000000000000000000000000000000000000000..58bd4b99d21f061693da007b26dd24013e341851 --- /dev/null +++ b/big_vision/models/mlp_mixer.py @@ -0,0 +1,177 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""MLP-Mixer model.""" + +from typing import Optional, Tuple +from absl import logging + +from big_vision import utils +from big_vision.models import common + +import einops +import flax.linen as nn +import flax.training.checkpoints +import jax +import jax.numpy as jnp + + +class MlpBlock(nn.Module): + mlp_dim: int + + @nn.compact + def __call__(self, x): + y = nn.Dense(self.mlp_dim)(x) + y = nn.gelu(y) + return nn.Dense(x.shape[-1])(y) + + +class MixerBlock(nn.Module): + """Mixer block layer.""" + tokens_mlp_dim: int + channels_mlp_dim: int + drop_p: float + + @nn.compact + def __call__(self, x, *, train=False): + y = nn.LayerNorm()(x) + y = jnp.swapaxes(y, 1, 2) + y = MlpBlock(self.tokens_mlp_dim, name="token_mixing")(y) + y = jnp.swapaxes(y, 1, 2) + x = x + y * _stoch_depth_mask(x, self.drop_p, not train, self.make_rng) + y = nn.LayerNorm()(x) + y = MlpBlock(self.channels_mlp_dim, name="channel_mixing")(y) + return x + y * _stoch_depth_mask(x, self.drop_p, not train, self.make_rng) + + +class MlpMixer(nn.Module): + """Mixer architecture.""" + patch_size: Tuple[int, int] + num_classes: Optional[int] + num_blocks: int + hidden_dim: int + tokens_mlp_dim: int + channels_mlp_dim: int + model_name: Optional[str] = None + stoch_depth: float = 0.0 + + @nn.compact + def __call__(self, image, *, train=False): + out = {} + x = out["stem"] = nn.Conv(self.hidden_dim, self.patch_size, + strides=self.patch_size, name="stem")(image) + x = out["input_tokens"] = einops.rearrange(x, "n h w c -> n (h w) c") + for i in range(self.num_blocks): + drop_p = (i / max(self.num_blocks - 1, 1)) * self.stoch_depth + x = out[f"block_{i}"] = MixerBlock( + self.tokens_mlp_dim, self.channels_mlp_dim, drop_p)(x, train=train) + x = nn.LayerNorm(name="pre_head_layer_norm")(x) + x = out["pre_logits"] = jnp.mean(x, axis=1) + if self.num_classes: + x = out["logits"] = nn.Dense( + self.num_classes, kernel_init=nn.initializers.zeros, name="head")(x) + return x, out + + +def Model(num_classes=None, *, variant=None, **kw): # pylint: disable=invalid-name + """Factory function to easily create a Model variant like "L/16".""" + + if variant is not None: + model_size, patch = variant.split("/") + kw.setdefault("patch_size", (int(patch), int(patch))) + config = { + "S": { + "hidden_dim": 512, + "num_blocks": 8, + "channels_mlp_dim": 2048, + "tokens_mlp_dim": 256 + }, + "B": { + "hidden_dim": 768, + "num_blocks": 12, + "channels_mlp_dim": 3072, + "tokens_mlp_dim": 384 + }, + "L": { + "hidden_dim": 1024, + "num_blocks": 24, + "channels_mlp_dim": 4096, + "tokens_mlp_dim": 512 + }, + "H": { + "hidden_dim": 1280, + "num_blocks": 32, + "channels_mlp_dim": 5120, + "tokens_mlp_dim": 640 + }, + }[model_size] + + for k, v in config.items(): + kw.setdefault(k, v) + + logging.info("Mixer config: %s", kw) + return MlpMixer(num_classes=num_classes, **kw) + + +def load(init_params, init_file, model_cfg, dont_load=()): + """Load checkpoint.""" + + del model_cfg + # Shortcut names for some canonical paper checkpoints: + init_file = { + # pylint: disable=line-too-long + # Pretrained models from the MLP-Mixer paper: https://arxiv.org/abs/2105.01601. + "B-i1k/16": "gs://mixer_models/imagenet1k/Mixer-B_16.npz", + "L-i1k/16": "gs://mixer_models/imagenet1k/Mixer-L_16.npz", + "B-i21k/16": "gs://mixer_models/imagenet21k/Mixer-B_16.npz", + "L-i21k/16": "gs://mixer_models/imagenet21k/Mixer-L_16.npz", + # pylint: enable=line-too-long + }.get(init_file, init_file) + restored_params = utils.load_params(init_file) + restored_params = flax.training.checkpoints.convert_pre_linen(restored_params) + + if "Mixer" in restored_params: + restored_params["pre_head_layer_norm"] = restored_params["Mixer"].pop( + "encoder_norm" + ) + restored_params["stem"] = restored_params.pop("embedding") + def unflatten_dense(d): + return { + "Dense_0": { + "bias": d["bias1"].squeeze(), + "kernel": d["kernel1"].squeeze(), + }, + "Dense_1": { + "bias": d["bias2"].squeeze(), + "kernel": d["kernel2"].squeeze(), + }, + } + for k, v in restored_params["Mixer"].items(): + assert k.startswith("encoderblock_"), k + v["token_mixing"] = unflatten_dense(v.pop("token_mixing_phase_0")) + v["channel_mixing"] = unflatten_dense(v.pop("channel_mixing_phase_0")) + restored_params["MixerBlock_" + k[len("encoderblock_"):]] = v + del restored_params["Mixer"] + + # possibly use the random init for some of the params (such as, the head). + restored_params = common.merge_params(restored_params, init_params, dont_load) + + return restored_params + + +def _stoch_depth_mask(x, drop_p, deterministic, make_rng): + if not deterministic and drop_p: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + return 1.0 - jax.random.bernoulli(make_rng("dropout"), drop_p, shape) + return 1.0 diff --git a/big_vision/models/ppp/__init__.py b/big_vision/models/ppp/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/models/ppp/gemma.py b/big_vision/models/ppp/gemma.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/models/vit.py b/big_vision/models/vit.py new file mode 100644 index 0000000000000000000000000000000000000000..7f536cf3b17ee97ec0cac3cc1f282dc0a8a699c3 --- /dev/null +++ b/big_vision/models/vit.py @@ -0,0 +1,480 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""A refactored and simplified ViT. + +However, the names of modules are made to match the old ones for easy loading. +""" + +from typing import Optional, Sequence, Union + +from absl import logging +from big_vision import utils +from big_vision.models import common +import flax +import flax.linen as nn +import flax.training.checkpoints +import jax +import jax.numpy as jnp +import numpy as np +import scipy.ndimage + + +def posemb_sincos_2d(h, w, width, temperature=10_000., dtype=jnp.float32): + """Follows the MoCo v3 logic.""" + y, x = jnp.mgrid[:h, :w] + + assert width % 4 == 0, "Width must be mult of 4 for sincos posemb" + omega = jnp.arange(width // 4) / (width // 4 - 1) + omega = 1. / (temperature**omega) + y = jnp.einsum("m,d->md", y.flatten(), omega) + x = jnp.einsum("m,d->md", x.flatten(), omega) + pe = jnp.concatenate([jnp.sin(x), jnp.cos(x), jnp.sin(y), jnp.cos(y)], axis=1) + return jnp.asarray(pe, dtype)[None, :, :] + + +def get_posemb(self, typ, seqshape, width, name, dtype=jnp.float32): + if typ == "learn": + return self.param(name, nn.initializers.normal(stddev=1/np.sqrt(width)), + (1, np.prod(seqshape), width), dtype) + elif typ == "sincos2d": + return posemb_sincos_2d(*seqshape, width, dtype=dtype) + else: + raise ValueError(f"Unknown posemb type: {typ}") + + +class MlpBlock(nn.Module): + """Transformer MLP / feed-forward block.""" + mlp_dim: Optional[int] = None # Defaults to 4x input dim + dropout: float = 0.0 + dtype_mm: str = "float32" + + @nn.compact + def __call__(self, x, deterministic=True): + """Applies Transformer MlpBlock module.""" + inits = dict( + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6), + ) + + d = x.shape[-1] + x = nn.Dense(self.mlp_dim or 4 * d, dtype=self.dtype_mm, **inits)(x) + # In some extreme batch-size cases, this is needed as of Sept 2024: + x = nn.with_logical_constraint(x, ("act_batch", "act_len", "act_emb")) + x = nn.gelu(x) + x = nn.Dropout(rate=self.dropout)(x, deterministic) + x = nn.Dense(d, dtype=self.dtype_mm, **inits)(x) + return x + + +class Encoder1DBlock(nn.Module): + """Single transformer encoder block (MHSA + MLP).""" + mlp_dim: Optional[int] = None # Defaults to 4x input dim + num_heads: int = 12 + dropout: float = 0.0 + dtype_mm: str = "float32" + + @nn.compact + def __call__(self, x, deterministic=True): + out = {} + x = nn.with_logical_constraint(x, ("act_batch", "act_len", "act_emb")) + y = nn.LayerNorm()(x) + y = out["sa"] = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + kernel_init=nn.initializers.xavier_uniform(), + deterministic=deterministic, + dtype=self.dtype_mm, + )(y, y) + y = nn.with_logical_constraint(y, ("act_batch", "act_len", "act_emb")) + y = nn.Dropout(rate=self.dropout)(y, deterministic) + x = out["+sa"] = x + y + + y = nn.LayerNorm()(x) + y = out["mlp"] = MlpBlock( + mlp_dim=self.mlp_dim, dropout=self.dropout, + dtype_mm=self.dtype_mm, + )(y, deterministic) + y = nn.with_logical_constraint(y, ("act_batch", "act_len", "act_emb")) + y = nn.Dropout(rate=self.dropout)(y, deterministic) + x = out["+mlp"] = x + y + x = nn.with_logical_constraint(x, ("act_batch", "act_len", "act_emb")) + return x, out + + +class Encoder(nn.Module): + """Transformer Model Encoder for sequence to sequence translation.""" + depth: int + mlp_dim: Optional[int] = None # Defaults to 4x input dim + num_heads: int = 12 + dropout: float = 0.0 + scan: bool = False + remat_policy: str = "nothing_saveable" + dtype_mm: str = "float32" + + @nn.compact + def __call__(self, x, deterministic=True): + out = {} + + if self.scan: + block = nn.remat( + Encoder1DBlock, + prevent_cse=False, + static_argnums=(2,), # 0=self, 2=deterministic + policy=getattr(jax.checkpoint_policies, self.remat_policy, None), + ) + x, scan_out = nn.scan( + block, + variable_axes={"params": 0}, + split_rngs={"params": True, "dropout": True}, + in_axes=nn.broadcast, + length=self.depth)( + name="encoderblock", + dtype_mm=self.dtype_mm, + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout=self.dropout)(x, deterministic) + for lyr in range(self.depth): + out[f"block{lyr:02d}"] = jax.tree.map(lambda o, l=lyr: o[l], scan_out) + else: + # Input Encoder + for lyr in range(self.depth): + block_cur = Encoder1DBlock( + name=f"encoderblock_{lyr}", + dtype_mm=self.dtype_mm, + mlp_dim=self.mlp_dim, num_heads=self.num_heads, + dropout=self.dropout) + x, out[f"block{lyr:02d}"] = block_cur(x, deterministic) + out["pre_ln"] = x # Alias for last block, but without the number in it. + + return nn.LayerNorm(name="encoder_norm")(x), out + + +class MAPHead(nn.Module): + """Multihead Attention Pooling.""" + mlp_dim: Optional[int] = None # Defaults to 4x input dim + num_heads: int = 12 + + @nn.compact + def __call__(self, x): + # TODO + n, l, d = x.shape # pylint: disable=unused-variable + probe = self.param("probe", nn.initializers.xavier_uniform(), + (1, 1, d), x.dtype) + probe = jnp.tile(probe, [n, 1, 1]) + + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + kernel_init=nn.initializers.xavier_uniform())(probe, x) + + # TODO: dropout on head? + y = nn.LayerNorm()(x) + x = x + MlpBlock(mlp_dim=self.mlp_dim)(y) + return x[:, 0] + + +class _Model(nn.Module): + """ViT model.""" + + num_classes: Optional[int] = None + patch_size: Sequence[int] = (16, 16) + width: int = 768 + depth: int = 12 + mlp_dim: Optional[int] = None # Defaults to 4x input dim + num_heads: int = 12 + posemb: str = "learn" # Can also be "sincos2d" + rep_size: Union[int, bool] = False + dropout: float = 0.0 + pool_type: str = "gap" # Can also be "map" or "tok" + head_zeroinit: bool = True + scan: bool = False + # or "dots_with_no_batch_dims_saveable" for more speed (memory costly) + remat_policy: str = "nothing_saveable" + dtype_mm: str = "float32" + + @nn.compact + def __call__(self, image, *, train=False): + out = {} + + image = jnp.asarray(image, self.dtype_mm) + + # Patch extraction + x = out["stem"] = nn.Conv( + self.width, self.patch_size, strides=self.patch_size, + padding="VALID", name="embedding", dtype=self.dtype_mm)(image) + + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + + # Add posemb before adding extra token. + x = out["with_posemb"] = x + get_posemb( + self, self.posemb, (h, w), c, "pos_embedding", x.dtype) + + if self.pool_type == "tok": + cls = self.param("cls", nn.initializers.zeros, (1, 1, c), x.dtype) + x = jnp.concatenate([jnp.tile(cls, [n, 1, 1]), x], axis=1) + + n, l, c = x.shape # pylint: disable=unused-variable + x = nn.Dropout(rate=self.dropout)(x, not train) + + x, out["encoder"] = Encoder( + depth=self.depth, + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout=self.dropout, + scan=self.scan, + remat_policy=self.remat_policy, + dtype_mm=self.dtype_mm, + name="Transformer")( + x, deterministic=not train) + encoded = out["encoded"] = x + + if self.pool_type == "map": + x = out["head_input"] = MAPHead( + num_heads=self.num_heads, mlp_dim=self.mlp_dim)(x) + elif self.pool_type == "gap": + x = out["head_input"] = jnp.mean(x, axis=1) + elif self.pool_type == "0": + x = out["head_input"] = x[:, 0] + elif self.pool_type == "tok": + x = out["head_input"] = x[:, 0] + encoded = encoded[:, 1:] + elif self.pool_type == "none": + pass + else: + raise ValueError(f"Unknown pool type: '{self.pool_type}'") + + x_2d = jnp.reshape(encoded, [n, h, w, -1]) + + if self.rep_size: + rep_size = self.width if self.rep_size is True else self.rep_size + hid = nn.Dense(rep_size, name="pre_logits") + # NOTE: In the past we did not include tanh in pre_logits. + # For few-shot, it should not matter much, as it whitens anyways. + x_2d = nn.tanh(hid(x_2d)) + x = nn.tanh(hid(x)) + + out["pre_logits_2d"] = x_2d + out["pre_logits"] = x + + if self.num_classes: + kw = {"kernel_init": nn.initializers.zeros} if self.head_zeroinit else {} + head = nn.Dense(self.num_classes, name="head", **kw) + x_2d = out["logits_2d"] = head(x_2d) + x = out["logits"] = head(x) + + return x, out + + +def Model(num_classes=None, *, variant=None, **kw): # pylint: disable=invalid-name + """Factory function, because linen really don't like what I'm doing!""" + return _Model(num_classes, **{**decode_variant(variant), **kw}) + + +def decode_variant(variant): + """Converts a string like "B" or "B/32" into a params dict.""" + if variant is None: + return {} + + v, patch = variant, {} + if "/" in variant: + v, patch = variant.split("/") + patch = {"patch_size": (int(patch), int(patch))} + + return { + # pylint:disable=line-too-long + # Reference: Table 2 of https://arxiv.org/abs/2106.04560. + "width": {"mu": 32, "Ti": 192, "S": 384, "M": 512, "B": 768, "L": 1024, "So400m": 1152, "H": 1280, "g": 1408, "g-opt": 1536, "G": 1664, "G-opt": 1536, "e": 1792}[v], + "depth": {"mu": 1, "Ti": 12, "S": 12, "M": 12, "B": 12, "L": 24, "So400m": 27, "H": 32, "g": 40, "g-opt": 40, "G": 48, "G-opt": 48, "e": 56}[v], + "mlp_dim": {"mu": 128, "Ti": 768, "S": 1536, "M": 2048, "B": 3072, "L": 4096, "So400m": 4304, "H": 5120, "g": 6144, "g-opt": 6144, "G": 8192, "G-opt": 8192, "e": 15360}[v], + "num_heads": {"mu": 2, "Ti": 3, "S": 6, "M": 8, "B": 12, "L": 16, "So400m": 16, "H": 16, "g": 16, "g-opt": 16, "G": 16, "G-opt": 16, "e": 16}[v], + # pylint:enable=line-too-long + **patch + } + + +def resample_posemb(old, new): + """This function implements "high-res finetuning" for transformer models.""" + # Rescale the grid of position embeddings. Param shape is (1,N,1024) + if old.shape == new.shape: + return old + + logging.info("ViT: resize %s to %s", old.shape, new.shape) + gs_old = int(np.sqrt(old.shape[1])) + gs_new = int(np.sqrt(new.shape[1])) + logging.info("ViT: grid-size from %s to %s", gs_old, gs_new) + grid = old.reshape(gs_old, gs_old, -1) + + zoom = (gs_new/gs_old, gs_new/gs_old, 1) + grid = scipy.ndimage.zoom(grid, zoom, order=1) + grid = grid.reshape(1, gs_new*gs_new, -1) + return grid + + +def fix_old_checkpoints(params): + """Fix small bwd incompat that can't be resolved with names in model def.""" + + params = flax.core.unfreeze( + flax.training.checkpoints.convert_pre_linen(params)) + + # Original ViT paper variant had posemb in a module: + if "posembed_input" in params["Transformer"]: + logging.info("ViT: Loading and fixing VERY old posemb") + posemb = params["Transformer"].pop("posembed_input") + params["pos_embedding"] = posemb["pos_embedding"] + + # Widely used version before 2022 had posemb in Encoder: + if "pos_embedding" in params["Transformer"]: + logging.info("ViT: Loading and fixing old posemb") + params["pos_embedding"] = params["Transformer"].pop("pos_embedding") + + # Old vit.py used to first concat [cls] token, then add posemb. + # This means a B/32@224px would have 7x7+1 posembs. This is useless and clumsy + # so we changed to add posemb then concat [cls]. We can recover the old + # checkpoint by manually summing [cls] token and its posemb entry. + if "pos_embedding" in params: + pe = params["pos_embedding"] + if int(np.sqrt(pe.shape[1])) ** 2 + 1 == int(pe.shape[1]): + logging.info("ViT: Loading and fixing combined cls+posemb") + pe_cls, params["pos_embedding"] = pe[:, :1], pe[:, 1:] + if "cls" in params: + params["cls"] += pe_cls + + # MAP-head variants during ViT-G development had it inlined: + if "probe" in params: + params["MAPHead_0"] = { + k: params.pop(k) for k in + ["probe", "MlpBlock_0", "MultiHeadDotProductAttention_0", "LayerNorm_0"] + } + + return params + + +def pyloop_to_scan(params_pyloop): + """Converts a python for-loop ViT checkpoint to a lax.scan based one.""" + # On a high level, they are the same except that the for loop has separate + # array pytrees for each encoderblock, while the scan one has just one + # encoderblock pytree, with all block's params concatenated. + + params_scan = jax.tree.map(lambda x: x, params_pyloop) # Structural copy + t = params_scan["Transformer"] + + # Find highest index of encoderblocks in the checkpoint (they start at 0): + encoderblocks = {k for k in t if k.startswith("encoderblock_")} + depth = 1 + max({int(k.split("_")[-1]) for k in encoderblocks}) + + def stack(*values): + return np.stack(values) + + # Stack all encoderblocks into a single one: + t["encoderblock"] = jax.tree.map( + stack, *[t[f"encoderblock_{lyr}"] for lyr in range(depth)]) + + for lyr in range(depth): + del t[f"encoderblock_{lyr}"] + + return params_scan + + +def scan_to_pyloop(params_scan): + """Converts a lax.scan ViT checkpoint to a python for-loop based one.""" + # See comment in pyloop_to_scan. + + params_scan = jax.tree.map(lambda x: x, params_scan) # Structural copy + t = params_scan["Transformer"] + + # Find out how many encoderblocks there are + depth = len(t["encoderblock"]["LayerNorm_0"]["bias"]) + + # Create that many encoderblocks, each with their slice of their sub-pytree. + for lyr in range(depth): + block = jax.tree.map(lambda x, lyr=lyr: x[lyr], t["encoderblock"]) + t[f"encoderblock_{lyr}"] = block + + del t["encoderblock"] + return params_scan + + +def load(init_params, init_file, model_cfg, dont_load=()): # pylint: disable=invalid-name because we had to CamelCase above. + """Load init from checkpoint, both old model and this one. +Hi-res posemb.""" + init_file = VANITY_NAMES.get(init_file, init_file) + restored_params = utils.load_params(init_file) + + restored_params = fix_old_checkpoints(restored_params) + + # Detect attempts to load non-scan checkpoint into scan model. + if (model_cfg.get("scan") and + "encoderblock" not in restored_params["Transformer"]): + restored_params = pyloop_to_scan(restored_params) + if (not model_cfg.get("scan") + and "encoderblock" in restored_params["Transformer"]): + restored_params = scan_to_pyloop(restored_params) + + # possibly use the random init for some of the params (such as, the head). + restored_params = common.merge_params(restored_params, init_params, dont_load) + + # resample posemb if needed. + # TODO: Take this from model_cfg to avoid need for init_params. + if init_params and "pos_embedding" in init_params: + restored_params["pos_embedding"] = resample_posemb( + old=restored_params["pos_embedding"], + new=init_params["pos_embedding"]) + + return restored_params + + +# Shortcut names for some canonical paper checkpoints: +VANITY_NAMES = { + # pylint: disable=line-too-long + # Recommended models from https://arxiv.org/abs/2106.10270 + # Many more models at https://github.com/google-research/vision_transformer + "howto-i21k-Ti/16": "gs://vit_models/augreg/Ti_16-i21k-300ep-lr_0.001-aug_none-wd_0.03-do_0.0-sd_0.0.npz", + "howto-i21k-S/32": "gs://vit_models/augreg/S_32-i21k-300ep-lr_0.001-aug_none-wd_0.1-do_0.0-sd_0.0.npz", + "howto-i21k-S/16": "gs://vit_models/augreg/S_16-i21k-300ep-lr_0.001-aug_light1-wd_0.03-do_0.0-sd_0.0.npz", + "howto-i21k-B/32": "gs://vit_models/augreg/B_32-i21k-300ep-lr_0.001-aug_light1-wd_0.1-do_0.0-sd_0.0.npz", + "howto-i21k-B/16": "gs://vit_models/augreg/B_16-i21k-300ep-lr_0.001-aug_medium1-wd_0.1-do_0.0-sd_0.0.npz", + "howto-i21k-B/8": "gs://vit_models/augreg/B_8-i21k-300ep-lr_0.001-aug_medium2-wd_0.1-do_0.0-sd_0.0.npz", + "howto-i21k-L/16": "gs://vit_models/augreg/L_16-i21k-300ep-lr_0.001-aug_strong1-wd_0.1-do_0.0-sd_0.0.npz", + + # Better plain vit-s16 baselines from https://arxiv.org/abs/2205.01580 + "i1k-s16-90ep": "gs://big_vision/vit_s16_i1k_90ep.npz", + "i1k-s16-150ep": "gs://big_vision/vit_s16_i1k_150ep.npz", + "i1k-s16-300ep": "gs://big_vision/vit_s16_i1k_300ep.npz", + + # DeiT-3 checkpoints from https://github.com/facebookresearch/deit/blob/main/README_revenge.md + # First layer converted to take inputs in [-1,1] + "deit3_S_224_1k": "gs://big_vision/zoo/deit3/bv_deit_3_small_224_1k.npz", + "deit3_S_224_21k": "gs://big_vision/zoo/deit3/bv_deit_3_small_224_21k.npz", + "deit3_S_384_1k": "gs://big_vision/zoo/deit3/bv_deit_3_small_384_1k.npz", + "deit3_S_384_21k": "gs://big_vision/zoo/deit3/bv_deit_3_small_384_21k.npz", + "deit3_B_224_1k": "gs://big_vision/zoo/deit3/bv_deit_3_base_224_1k.npz", + "deit3_B_224_21k": "gs://big_vision/zoo/deit3/bv_deit_3_base_224_21k.npz", + "deit3_B_384_1k": "gs://big_vision/zoo/deit3/bv_deit_3_base_384_1k.npz", + "deit3_B_384_21k": "gs://big_vision/zoo/deit3/bv_deit_3_base_384_21k.npz", + "deit3_L_224_1k": "gs://big_vision/zoo/deit3/bv_deit_3_large_224_1k.npz", + "deit3_L_224_21k": "gs://big_vision/zoo/deit3/bv_deit_3_large_224_21k.npz", + "deit3_L_384_1k": "gs://big_vision/zoo/deit3/bv_deit_3_large_384_1k.npz", + "deit3_L_384_21k": "gs://big_vision/zoo/deit3/bv_deit_3_large_384_21k.npz", + + # SigLIP image encoder checkpoints from https://arxiv.org/abs/2303.15343 + "SigLIP B/16 224": "gs://big_vision/siglip/webli_en_b16_224_63724782.npz:img", + "SigLIP B/16 256": "gs://big_vision/siglip/webli_en_b16_256_60500360.npz:img", + "SigLIP B/16 384": "gs://big_vision/siglip/webli_en_b16_384_68578854.npz:img", + "SigLIP B/16 512": "gs://big_vision/siglip/webli_en_b16_512_68580893.npz:img", + "SigLIP L/16 256": "gs://big_vision/siglip/webli_en_l16_256_60552751.npz:img", + "SigLIP L/16 384": "gs://big_vision/siglip/webli_en_l16_384_63634585.npz:img", + "SigLIP So400m/14 224": "gs://big_vision/siglip/webli_en_so400m_224_57633886.npz:img", + "SigLIP So400m/14 384": "gs://big_vision/siglip/webli_en_so400m_384_58765454.npz:img", + "SigLIP B/16-i18n 256": "gs://big_vision/siglip/webli_i18n_b16_256_66117334.npz:img", + # pylint: enable=line-too-long +} diff --git a/big_vision/optax.py b/big_vision/optax.py new file mode 100644 index 0000000000000000000000000000000000000000..39ddb0fc3d8075985a75d7cdf150d430e141d681 --- /dev/null +++ b/big_vision/optax.py @@ -0,0 +1,225 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Gradient transformations and other optax utilities.""" + +import operator +import big_vision.utils as u +import jax +import jax.numpy as jnp +import optax + + +def find_states(opt_state, cls): + leaves = jax.tree.leaves( + opt_state, is_leaf=lambda node: isinstance(node, cls)) + return [leaf for leaf in leaves if isinstance(leaf, cls)] + + +def get_count(opt_state, jittable=False): + """Returns `ScaleByScheduleState.count` from `opt_state` as an integer.""" + counts = [ + state.count + for state in find_states(opt_state, optax.ScaleByScheduleState) + ] + if jittable: + return counts[0] + else: + counts = {int(c) for c in counts} + assert len(counts) == 1, f"Expected exactly 1 ScaleByScheduleState:{counts}" + return next(iter(counts)) + + +def replace_frozen(schedule, pytree, replacement, log=None): + """Replaces values matching frozen params in `pytree` with `replacement`.""" + if not isinstance(schedule, (list, tuple)): + return pytree + masks, scheds = _make_mask_trees(pytree, schedule, log=log) + frozen_mask, _, _ = _split_frozen(masks, scheds) + return jax.tree.map( + lambda v, f: replacement if f else v, pytree, frozen_mask) + + +def clip_by_per_example_global_norm( + max_norm: float, +) -> optax.GradientTransformation: + """Clips the norm of per-example gradients.""" + + def init_fn(params): + del params + return optax.EmptyState() + + def update_fn(updates, state, params=None): + del params + grads_flat, grads_treedef = jax.tree_util.tree_flatten(updates) + batch_size = grads_flat[0].shape[0] + clipped, _ = optax.per_example_global_norm_clip(grads_flat, max_norm) + grads_sum = jax.tree_util.tree_unflatten(grads_treedef, clipped) + grads_mean = jax.tree_util.tree_map(lambda x: x / batch_size, grads_sum) + return grads_mean, state + + return optax.GradientTransformation(init_fn, update_fn) + + +def make(config, params, *, sched_kw): + """Returns gradient transform and learning rate functions.""" + + # Global schedule. No schedule means frozen. + schedule = config.get("schedule", {}) + if not isinstance(schedule, (tuple, list)): + schedule = [(".*", schedule)] + masks, scheds = _make_mask_trees(params, schedule, "config.schedule") + frozen_mask, masks, scheds = _split_frozen(masks, scheds) + not_frozen_mask = jax.tree.map(operator.not_, frozen_mask) + def create_schedule(mult=1.0, **kw): + assert "base" not in kw, kw + return u.create_learning_rate_schedule(base=mult, **kw) + schedule_fns = [create_schedule(**sched_kw, **sched) for sched in scheds] + schedule_txs = [ + optax.masked(optax.scale_by_schedule(schedule_fn), mask) + for schedule_fn, mask in zip(schedule_fns, masks) + ] + [ + # Removes weight decay updates. Note that weight decay already has an + # independent mask (which cannot be combined easily with a second mask), + # so instead we multiply updates for frozen params with zero. + optax.masked(optax.set_to_zero(), frozen_mask) + ] + + # Gradient clipping. + if clip_norm := config.get("grad_clip_norm"): + if config.get("grad_clip_per_example"): + clip_tx = clip_by_per_example_global_norm(clip_norm) + else: + clip_tx = optax.clip_by_global_norm(clip_norm) + grad_clip_norm_tx = optax.masked(clip_tx, not_frozen_mask) + else: + grad_clip_norm_tx = optax.identity() + + # Optimizer updates. + tx_func = operator.attrgetter(config.optax_name)(optax) + opt_txs = [optax.masked(tx_func(**config.get("optax", {})), not_frozen_mask)] + assert "optim" not in config, "Deprecated option, use config.optax." + + # Learning rate multipliers. Defaults to 1.0. + lr_mult_txs = [optax.scale(config.lr)] + if config.get("lr_mults"): + masks, mults = _make_mask_trees(params, config.lr_mults, "config.lr_mults") + assert all(mult > 0 for mult in mults), ( + f"Use schedule=None for parameter freezing instead of lr_mults={mults}") + lr_mult_txs += [ + optax.masked(optax.scale(mult), mask) + for mult, mask in zip(mults, masks) + ] + + # Weight decay. Defaults to 0.0. + # Weight decay is not gradient-based but instead uses "params side-input". + # Hence, weight decay is additive and independent of previous gradient-based + # updates. + assert "weight_decay" not in config, "Deprecated option. Use wd and schedule." + assert config.get("weight_decay_decouple", True), ( + "Coupled weight decay not supported anymore.") + if config.get("wd"): + wd_mults = config.get("wd_mults", [(".*/kernel$", 1.0)]) + masks, mults = _make_mask_trees(params, wd_mults, "config.wd_mults") + weight_decay_txs = [ + optax.add_decayed_weights(config.wd * mult, mask) + for mult, mask in zip(mults, masks) + ] + else: + weight_decay_txs = [] + + # Combine gradient updates and learning rate schedules. + return optax.chain( + grad_clip_norm_tx, + *opt_txs, + *lr_mult_txs, + *weight_decay_txs, + *schedule_txs, + optax.scale(-1.0)), schedule_fns + + +def _make_mask_trees(params, patterns_values, log): + patterns, values = zip(*patterns_values) + masks = u.make_mask_trees(params, patterns, log=log) + return masks, values + + +def _split_frozen(masks, scheds): + """Computes `frozen_mask` and updates `masks` and `scheds`.""" + # Specifying `None` as a scheduler freezes params. + all_false = jax.tree.map(lambda *bools: not any(bools), *masks) + not_covered = [k for k, v in u.tree_flatten_with_names(all_false)[0] if v] + assert not not_covered, ( + f"All params must be covered (use `None` for freezing): {not_covered}") + frozen_masks = [ + mask for mask, sched in zip(masks, scheds) if sched is None] + frozen_mask = jax.tree.map( + lambda *bools: any(bools), *frozen_masks, + all_false) # `all_false` is required when `frozen_masks==[]`. + masks, scheds = zip(*( + (mask, sched) for mask, sched in zip(masks, scheds) if sched is not None)) + return frozen_mask, masks, scheds + + +############ Custom BigVision optimizers ####################################### +# Currently there's only one custom optimizer and we don't foresee new ones in +# the near future, we opt not to create a new optimizer folder/module for just +# one isolated case. If there will be more optimizers, we can consider moving +# them into individual files in a subfolder. + + +# A dummy object to allow for foo.bar access syntax, see +# https://stackoverflow.com/a/19476841/2366315 +optax.big_vision = type("", (), {})() + + +def scale_by_adafactor(min_dim_size_to_factor=32, + decay_rate=0.8, decay_offset=0, + beta2_cap=0.999, + clipping_threshold=None, + momentum=0.9, dtype_momentum=jnp.bfloat16, + eps=1e-30): + """The BigVision variant of Adafactor optimizer.""" + + def _decay_rate_pow(i, exponent): + """Second-order moment decay schedule.""" + t = jnp.array(i, jnp.float32) + 1.0 + return jnp.minimum(beta2_cap, 1.0 - t**(-exponent)) + + scale_by_rms = optax.scale_by_factored_rms( + factored=True, + decay_rate=decay_rate, + step_offset=decay_offset, + min_dim_size_to_factor=min_dim_size_to_factor, + epsilon=eps, + decay_rate_fn=_decay_rate_pow) + + clip = (optax.clip_by_block_rms(clipping_threshold) if clipping_threshold + else optax.identity()) + + mom = (optax.ema(momentum, debias=False, accumulator_dtype=dtype_momentum) + if momentum else optax.identity()) + + return optax.chain(scale_by_rms, clip, mom) + +optax.big_vision.scale_by_adafactor = scale_by_adafactor # pytype: disable=module-attr + + +# A few more aliases we use frequently: +def momentum_hp(momentum=0.9, dtype=jnp.bfloat16, nesterov=False): + """SGD-Momentum with half-precision accumulator.""" + return optax.trace(decay=momentum, accumulator_dtype=dtype, nesterov=nesterov) + +optax.big_vision.momentum_hp = momentum_hp # pytype: disable=module-attr +optax.big_vision.sgd = optax.identity # pytype: disable=module-attr diff --git a/big_vision/optax_test.py b/big_vision/optax_test.py new file mode 100644 index 0000000000000000000000000000000000000000..86f7bd9999079b393565ad5a718b4c1dbd815e79 --- /dev/null +++ b/big_vision/optax_test.py @@ -0,0 +1,341 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for optax.""" + +from absl.testing import absltest +from absl.testing import parameterized +from big_vision import optax as bv_optax +import chex +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +import optax + + +class OptaxTest(parameterized.TestCase): + + def test_get_count(self): + params = jax.tree.map(jnp.array, {"a": 1.}) + tx = optax.masked( + optax.scale_by_schedule(lambda step: step), + {"a": True}, + ) + opt_state = tx.init(params) + self.assertEqual(bv_optax.get_count(opt_state), 0) + _, opt_state = tx.update(params, opt_state) + self.assertEqual(bv_optax.get_count(opt_state), 1) + + def test_split_frozen(self): + params = jax.tree.map(jnp.array, { + "Dense_0": {"kernel": 1., "bias": 2.}, + }) # pyformat: disable + sched1 = dict(decay_type="cosine") + sched2 = dict(decay_type="linear") + schedule = [ + (".*/kernel", sched1), + (".*/bias", sched2), + ] + masks, scheds = bv_optax._make_mask_trees(params, schedule, log="schedule") + frozen_mask, masks, scheds = bv_optax._split_frozen(masks, scheds) + chex.assert_trees_all_equal( + frozen_mask, + {"Dense_0": {"kernel": False, "bias": False}}, + ) # pyformat: disable + chex.assert_trees_all_equal( + masks, + ( + {"Dense_0": {"kernel": True, "bias": False}}, + {"Dense_0": {"kernel": False, "bias": True}}, + ), + ) # pyformat: disable + self.assertEqual(scheds, (sched1, sched2)) + # freeze some + schedule = [ + (".*/bias", None), + ("Dense_0/.*", sched1), + (".*", None), + ] + masks, scheds = bv_optax._make_mask_trees(params, schedule, log="schedule") + frozen_mask, masks, scheds = bv_optax._split_frozen(masks, scheds) + chex.assert_trees_all_equal( + frozen_mask, + {"Dense_0": {"kernel": False, "bias": True}}, + ) # pyformat: disable + chex.assert_trees_all_equal( + masks, + ({"Dense_0": {"kernel": True, "bias": False}},), + ) # pyformat: disable + self.assertEqual(scheds, (sched1,)) + # does not cover all params - fails + schedule = [ + (".*/kernel", None), + ] + masks, scheds = bv_optax._make_mask_trees(params, schedule, log="schedule") + with self.assertRaisesRegex(AssertionError, "All params must be covered"): + _ = bv_optax._split_frozen(masks, scheds) + + def test_replace_frozen(self): + params = jax.tree.map(jnp.array, { + "Dense_0": {"kernel": 1., "bias": 2.}, + }) # pyformat: disable + schedule = [ + (".*/kernel", {}), + (".*", None), + ] + chex.assert_trees_all_equal( + bv_optax.replace_frozen(schedule, params, 0.), + {"Dense_0": {"kernel": 1., "bias": 0.}}, + ) # pyformat: disable + + def test_make_simple(self): + params = jax.tree.map(jnp.array, { + "Dense_0": {"kernel": 1., "bias": 2.}, + }) # pyformat: disable + + config = ml_collections.ConfigDict() + config.lr = 0.01 + config.schedule = dict(decay_type="linear") + config.optax_name = "scale" + config.optax = ml_collections.ConfigDict() + g_scale = 0.5 + config.optax.step_size = g_scale + + total_steps = 10 + sched_kw = dict(global_batch_size=1, total_steps=total_steps) + tx, (schedule_fn,) = bv_optax.make(config, params, sched_kw=sched_kw) + opt_state = tx.init(params) + grads = jax.tree.map(jnp.ones_like, params) + for step in range(total_steps): + updates, opt_state = tx.update(grads, opt_state) + self.assertEqual(bv_optax.get_count(opt_state), step + 1) + sched = schedule_fn(step) + np.testing.assert_almost_equal( + sched, 1.0 / total_steps * (total_steps - step)) + make_tx = lambda sched: lambda g: -sched * config.lr * g_scale * g + chex.assert_trees_all_close(updates, jax.tree.map(make_tx(sched), grads)) + + def test_make_wd(self): + params = jax.tree.map(jnp.array, { + "Dense_0": {"kernel": 1., "bias": 2., "other": 3.}, + }) # pyformat: disable + wds = jax.tree.map(jnp.array, { + "Dense_0": {"kernel": 2e-3, "bias": 5e-4, "other": 0.}, + }) # pyformat: disable + + config = ml_collections.ConfigDict() + config.lr = 0.01 + config.wd = 1e-3 + config.wd_mults = [ + (".*/kernel", 2.0), + (".*/bias", 0.5), + ] + config.schedule = dict(decay_type="linear") + config.optax_name = "scale" + config.optax = ml_collections.ConfigDict() + g_scale = 0.5 + config.optax.step_size = g_scale + + total_steps = 10 + sched_kw = dict(global_batch_size=1, total_steps=total_steps) + tx, (sched_fn,) = bv_optax.make(config, params, sched_kw=sched_kw) + opt_state = tx.init(params) + grads = jax.tree.map(jnp.ones_like, params) + for step in range(total_steps): + updates, opt_state = tx.update(grads, opt_state, params) + self.assertEqual(bv_optax.get_count(opt_state), step + 1) + sched = sched_fn(step) + np.testing.assert_almost_equal( + sched, 1.0 / total_steps * (total_steps - step)) + + def make_tx(sched): + def inner(p, g, wd): + return -sched * (config.lr * g_scale * g + p * wd) + return inner + + chex.assert_trees_all_close( + updates, jax.tree.map(make_tx(sched), params, grads, wds)) + + def test_make_clip_norm(self): + params = jax.tree.map(jnp.array, { + "Dense_0": {"kernel": 1., "bias": 2., "other": 3.}, + }) # pyformat: disable + + config = ml_collections.ConfigDict() + config.lr = 0.01 + config.schedule = dict(decay_type="linear") + config.optax_name = "scale" + config.grad_clip_norm = 1.0 + config.optax = ml_collections.ConfigDict() + g_scale = 0.5 + config.optax.step_size = g_scale + + total_steps = 10 + sched_kw = dict(global_batch_size=1, total_steps=total_steps) + tx, (sched_fn,) = bv_optax.make(config, params, sched_kw=sched_kw) + opt_state = tx.init(params) + + grads = jax.tree.map(jnp.ones_like, params) + gflat = jax.tree.leaves(grads) + l2_g = jnp.sqrt(sum([jnp.vdot(p, p) for p in gflat])) + grad_clip_factor = jnp.minimum(1.0, config.grad_clip_norm / l2_g) + grads_scaled = jax.tree.map(lambda p: grad_clip_factor * p, grads) + + for step in range(total_steps): + updates, opt_state = tx.update(grads, opt_state) + self.assertEqual(bv_optax.get_count(opt_state), step + 1) + sched = sched_fn(step) + np.testing.assert_almost_equal( + sched, 1.0 / total_steps * (total_steps - step)) + make_tx = lambda sched: lambda g: -sched * config.lr * g_scale * g + chex.assert_trees_all_close(updates, + jax.tree.map(make_tx(sched), grads_scaled)) + + def test_make_multi(self): + params = jax.tree.map( + jnp.array, { + "Dense_0": {"kernel": 1.0, "bias": 2.0, "other": 3.0}, + "Dense_1": {"kernel": 4.0, "bias": 5.0, "other": 6.0}, + "Dense_2": {"kernel": 7.0, "bias": 8.0, "other": 9.0}, + "Dense_3": {"kernel": 10., "bias": 11., "other": 12.}, + }) # pyformat: disable + + # Manually specify lr + wd for computing expected values. + lrb = 0.01 + lr1 = 2.0 + lr2 = 0.5 + lr_mults = { + "Dense_0": {"kernel": lr1, "bias": lr1, "other": lr1}, + "Dense_1": {"kernel": lr2, "bias": lr2, "other": lr2}, + "Dense_2": {"kernel": 1.0, "bias": 1.0, "other": 1.0}, + "Dense_3": {"kernel": 1.0, "bias": 1.0, "other": 1.0}, + } # pyformat: disable + wdb = 1e-3 + wd1 = 10.0 + wd2 = 0.1 + wds = jax.tree.map( + jnp.array, { + "Dense_0": {"kernel": wd1 * wdb, "bias": wd2 * wdb, "other": 0.}, + "Dense_1": {"kernel": wd1 * wdb, "bias": wd2 * wdb, "other": 0.}, + "Dense_2": {"kernel": wd1 * wdb, "bias": wd2 * wdb, "other": 0.}, + "Dense_3": {"kernel": 0.0 * wdb, "bias": 0.0 * wdb, "other": 0.}, + }) # pyformat: disable + + config = ml_collections.ConfigDict() + config.lr = lrb + config.lr_mults = [ + ("Dense_0/.*", lr1), + ("Dense_1/.*", lr2), + ] + config.wd = wdb + config.wd_mults = [ + (".*/kernel", wd1), + (".*/bias", wd2), + ] + mult1 = 1.0 + mult2 = 0.1 + config.schedule = [ + ("Dense_0/.*", dict(decay_type="linear", mult=mult1, linear_end=mult1)), + ("Dense_[12]/.*", dict(decay_type="linear", mult=mult2)), + (".*", None), + ] + config.optax_name = "scale" + config.grad_clip_norm = 1.0 + config.optax = ml_collections.ConfigDict() + g_scale = 0.5 + config.optax.step_size = g_scale + + total_steps = 10 + sched_kw = dict(global_batch_size=1, total_steps=total_steps) + tx, (sched_fn1, + sched_fn2) = bv_optax.make(config, params, sched_kw=sched_kw) + opt_state = tx.init(params) + + # Manually specify schedules for computing expected values. + frozen_fn = lambda _: jnp.array(0.) + sched_fns = { + "Dense_0": {"kernel": sched_fn1, "bias": sched_fn1, "other": sched_fn1}, + "Dense_1": {"kernel": sched_fn2, "bias": sched_fn2, "other": sched_fn2}, + "Dense_2": {"kernel": sched_fn2, "bias": sched_fn2, "other": sched_fn2}, + "Dense_3": {"kernel": frozen_fn, "bias": frozen_fn, "other": frozen_fn}, + } # pyformat: disable + + grads = jax.tree.map(jnp.ones_like, params) + gflat, _ = jax.tree.flatten( + # Don't count frozen params towards gradient norm. + jax.tree.map(lambda g, sched_fn: {frozen_fn: 0}.get(sched_fn, g), + grads, sched_fns)) + l2_g = jnp.sqrt(sum([jnp.vdot(p, p) for p in gflat])) + grad_clip_factor = jnp.minimum(1.0, config.grad_clip_norm / l2_g) + grads_scaled = jax.tree.map(lambda p: grad_clip_factor * p, grads) + + def make_tx(step): + def get_update(p, g, wd, sched_fn, lr_mult): + return -sched_fn(step) * (lrb * lr_mult * g_scale * g + p * wd) + return get_update + + for step in range(total_steps): + updates, opt_state = tx.update(grads, opt_state, params) + self.assertEqual(bv_optax.get_count(opt_state), step + 1) + sched1, sched2 = sched_fn1(step), sched_fn2(step) + np.testing.assert_almost_equal(sched1, mult1) + np.testing.assert_almost_equal(sched2, + mult2 * (total_steps - step) / total_steps) + chex.assert_trees_all_close( + updates, + jax.tree.map( + make_tx(step), params, grads_scaled, wds, sched_fns, lr_mults)) + + def test_frozen_no_state(self): + params = {"small": jnp.zeros([1]), "large": jnp.zeros([1000])} + config = ml_collections.ConfigDict() + config.lr = 0.01 + config.schedule = [ + ("small", dict(decay_type="cosine")), + ("large", None), + ] + config.optax_name = "scale_by_adam" + + sched_kw = dict(global_batch_size=1, total_steps=1) + tx, _ = bv_optax.make(config, params, sched_kw=sched_kw) + + opt_state = tx.init(params) + adam_state = bv_optax.find_states(opt_state, optax.ScaleByAdamState) + nbytes = sum( + jax.tree.flatten(jax.tree.map(lambda x: x.nbytes, adam_state))[0]) + self.assertLess(nbytes, 1_000) + + def test_adafactor(self): + params = {"Dense_0": {"kernel": jnp.zeros([1024, 1024])}} + + config = ml_collections.ConfigDict() + config.optax_name = "big_vision.scale_by_adafactor" + config.lr = 0.01 + config.schedule = dict(decay_type="linear") + sched_kw = dict(global_batch_size=1, total_steps=1) + + tx, _ = bv_optax.make(config, params, sched_kw=sched_kw) + + opt_state = tx.init(params) + adafactor_state = bv_optax.find_states(opt_state, optax.FactoredState) + n_state_params = sum( + jax.tree.flatten( + jax.tree.map(lambda x: np.prod( + x.shape if hasattr(x, "shape") else 0), adafactor_state))[0]) + self.assertEqual(n_state_params, 2 * 1024 + 2) + + +if __name__ == "__main__": + absltest.main() diff --git a/big_vision/pp/__init__.py b/big_vision/pp/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/pp/__pycache__/__init__.cpython-310.pyc b/big_vision/pp/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e685a7fe27aee792389a0e13f23654e9b36ac13 Binary files /dev/null and b/big_vision/pp/__pycache__/__init__.cpython-310.pyc differ diff --git a/big_vision/pp/__pycache__/__init__.cpython-311.pyc b/big_vision/pp/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..874fa2715f3e5148452b321e98a385b1b55c08b5 Binary files /dev/null and b/big_vision/pp/__pycache__/__init__.cpython-311.pyc differ diff --git a/big_vision/pp/__pycache__/__init__.cpython-312.pyc b/big_vision/pp/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d33e8b93b4667d6a400b838e69e5ee8668d3bc6 Binary files /dev/null and b/big_vision/pp/__pycache__/__init__.cpython-312.pyc differ diff --git a/big_vision/pp/__pycache__/registry.cpython-310.pyc b/big_vision/pp/__pycache__/registry.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21352299d8dfae1d2465b5634402f30ce1aa5957 Binary files /dev/null and b/big_vision/pp/__pycache__/registry.cpython-310.pyc differ diff --git a/big_vision/pp/__pycache__/registry.cpython-311.pyc b/big_vision/pp/__pycache__/registry.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac7ba3909e674bb666cb90d901e1ff782971334b Binary files /dev/null and b/big_vision/pp/__pycache__/registry.cpython-311.pyc differ diff --git a/big_vision/pp/__pycache__/registry.cpython-312.pyc b/big_vision/pp/__pycache__/registry.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf551423e198e82497db247c691a80c3ae1cdf46 Binary files /dev/null and b/big_vision/pp/__pycache__/registry.cpython-312.pyc differ diff --git a/big_vision/pp/archive/__init__.py b/big_vision/pp/archive/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/pp/archive/autoaugment.py b/big_vision/pp/archive/autoaugment.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/pp/archive/randaug.py b/big_vision/pp/archive/randaug.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/pp/autoaugment.py b/big_vision/pp/autoaugment.py new file mode 100644 index 0000000000000000000000000000000000000000..6cc45f14e5d8c49cb54c649104851e0729ebb180 --- /dev/null +++ b/big_vision/pp/autoaugment.py @@ -0,0 +1,700 @@ +# Copyright 2023 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""AutoAugment and RandAugment policies for enhanced image preprocessing. + +AutoAugment Reference: https://arxiv.org/abs/1805.09501 +RandAugment Reference: https://arxiv.org/abs/1909.13719 + +This code is forked from +https://github.com/tensorflow/tpu/blob/11d0db15cf1c3667f6e36fecffa111399e008acd/models/official/efficientnet/autoaugment.py +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import dataclasses +import inspect +import math +import tensorflow.compat.v1 as tf +from tensorflow_addons import image as contrib_image + +# This signifies the max integer that the controller RNN could predict for the +# augmentation scheme. +_MAX_LEVEL = 10. + + +@dataclasses.dataclass +class HParams: + """Parameters for AutoAugment and RandAugment.""" + cutout_const: int + translate_const: int + + +def policy_v0(): + """Autoaugment policy that was used in AutoAugment Paper.""" + # Each tuple is an augmentation operation of the form + # (operation, probability, magnitude). Each element in policy is a + # sub-policy that will be applied sequentially on the image. + policy = [ + [('Equalize', 0.8, 1), ('ShearY', 0.8, 4)], + [('Color', 0.4, 9), ('Equalize', 0.6, 3)], + [('Color', 0.4, 1), ('Rotate', 0.6, 8)], + [('Solarize', 0.8, 3), ('Equalize', 0.4, 7)], + [('Solarize', 0.4, 2), ('Solarize', 0.6, 2)], + [('Color', 0.2, 0), ('Equalize', 0.8, 8)], + [('Equalize', 0.4, 8), ('SolarizeAdd', 0.8, 3)], + [('ShearX', 0.2, 9), ('Rotate', 0.6, 8)], + [('Color', 0.6, 1), ('Equalize', 1.0, 2)], + [('Invert', 0.4, 9), ('Rotate', 0.6, 0)], + [('Equalize', 1.0, 9), ('ShearY', 0.6, 3)], + [('Color', 0.4, 7), ('Equalize', 0.6, 0)], + [('Posterize', 0.4, 6), ('AutoContrast', 0.4, 7)], + [('Solarize', 0.6, 8), ('Color', 0.6, 9)], + [('Solarize', 0.2, 4), ('Rotate', 0.8, 9)], + [('Rotate', 1.0, 7), ('TranslateY', 0.8, 9)], + [('ShearX', 0.0, 0), ('Solarize', 0.8, 4)], + [('ShearY', 0.8, 0), ('Color', 0.6, 4)], + [('Color', 1.0, 0), ('Rotate', 0.6, 2)], + [('Equalize', 0.8, 4), ('Equalize', 0.0, 8)], + [('Equalize', 1.0, 4), ('AutoContrast', 0.6, 2)], + [('ShearY', 0.4, 7), ('SolarizeAdd', 0.6, 7)], + [('Posterize', 0.8, 2), ('Solarize', 0.6, 10)], + [('Solarize', 0.6, 8), ('Equalize', 0.6, 1)], + [('Color', 0.8, 6), ('Rotate', 0.4, 5)], + ] + return policy + + +def policy_vtest(): + """Autoaugment test policy for debugging.""" + # Each tuple is an augmentation operation of the form + # (operation, probability, magnitude). Each element in policy is a + # sub-policy that will be applied sequentially on the image. + policy = [ + [('TranslateX', 1.0, 4), ('Equalize', 1.0, 10)], + ] + return policy + + +def blend(image1, image2, factor): + """Blend image1 and image2 using 'factor'. + Factor can be above 0.0. A value of 0.0 means only image1 is used. + A value of 1.0 means only image2 is used. A value between 0.0 and + 1.0 means we linearly interpolate the pixel values between the two + images. A value greater than 1.0 "extrapolates" the difference + between the two pixel values, and we clip the results to values + between 0 and 255. + Args: + image1: An image Tensor of type uint8. + image2: An image Tensor of type uint8. + factor: A floating point value above 0.0. + Returns: + A blended image Tensor of type uint8. + """ + if factor == 0.0: + return tf.convert_to_tensor(image1) + if factor == 1.0: + return tf.convert_to_tensor(image2) + + image1 = tf.to_float(image1) + image2 = tf.to_float(image2) + + difference = image2 - image1 + scaled = factor * difference + + # Do addition in float. + temp = tf.to_float(image1) + scaled + + # Interpolate + if factor > 0.0 and factor < 1.0: + # Interpolation means we always stay within 0 and 255. + return tf.cast(temp, tf.uint8) + + # Extrapolate: + # + # We need to clip and then cast. + return tf.cast(tf.clip_by_value(temp, 0.0, 255.0), tf.uint8) + + +def cutout(image, pad_size, replace=0): + """Apply cutout (https://arxiv.org/abs/1708.04552) to image. + This operation applies a (2*pad_size x 2*pad_size) mask of zeros to + a random location within `img`. The pixel values filled in will be of the + value `replace`. The located where the mask will be applied is randomly + chosen uniformly over the whole image. + Args: + image: An image Tensor of type uint8. + pad_size: Specifies how big the zero mask that will be generated is that + is applied to the image. The mask will be of size + (2*pad_size x 2*pad_size). + replace: What pixel value to fill in the image in the area that has + the cutout mask applied to it. + Returns: + An image Tensor that is of type uint8. + """ + image_height = tf.shape(image)[0] + image_width = tf.shape(image)[1] + + # Sample the center location in the image where the zero mask will be applied. + cutout_center_height = tf.random_uniform( + shape=[], minval=0, maxval=image_height, + dtype=tf.int32) + + cutout_center_width = tf.random_uniform( + shape=[], minval=0, maxval=image_width, + dtype=tf.int32) + + lower_pad = tf.maximum(0, cutout_center_height - pad_size) + upper_pad = tf.maximum(0, image_height - cutout_center_height - pad_size) + left_pad = tf.maximum(0, cutout_center_width - pad_size) + right_pad = tf.maximum(0, image_width - cutout_center_width - pad_size) + + cutout_shape = [image_height - (lower_pad + upper_pad), + image_width - (left_pad + right_pad)] + padding_dims = [[lower_pad, upper_pad], [left_pad, right_pad]] + mask = tf.pad( + tf.zeros(cutout_shape, dtype=image.dtype), + padding_dims, constant_values=1) + mask = tf.expand_dims(mask, -1) + mask = tf.tile(mask, [1, 1, 3]) + image = tf.where( + tf.equal(mask, 0), + tf.ones_like(image, dtype=image.dtype) * replace, + image) + return image + + +def solarize(image, threshold=128): + # For each pixel in the image, select the pixel + # if the value is less than the threshold. + # Otherwise, subtract 255 from the pixel. + return tf.where(image < threshold, image, 255 - image) + + +def solarize_add(image, addition=0, threshold=128): + # For each pixel in the image less than threshold + # we add 'addition' amount to it and then clip the + # pixel value to be between 0 and 255. The value + # of 'addition' is between -128 and 128. + added_image = tf.cast(image, tf.int64) + addition + added_image = tf.cast(tf.clip_by_value(added_image, 0, 255), tf.uint8) + return tf.where(image < threshold, added_image, image) + + +def color(image, factor): + """Equivalent of PIL Color.""" + degenerate = tf.image.grayscale_to_rgb(tf.image.rgb_to_grayscale(image)) + return blend(degenerate, image, factor) + + +def contrast(image, factor): + """Equivalent of PIL Contrast.""" + degenerate = tf.image.rgb_to_grayscale(image) + # Cast before calling tf.histogram. + degenerate = tf.cast(degenerate, tf.int32) + + # Compute the grayscale histogram, then compute the mean pixel value, + # and create a constant image size of that value. Use that as the + # blending degenerate target of the original image. + hist = tf.histogram_fixed_width(degenerate, [0, 255], nbins=256) + mean = tf.reduce_sum(tf.cast(hist, tf.float32)) / 256.0 + degenerate = tf.ones_like(degenerate, dtype=tf.float32) * mean + degenerate = tf.clip_by_value(degenerate, 0.0, 255.0) + degenerate = tf.image.grayscale_to_rgb(tf.cast(degenerate, tf.uint8)) + return blend(degenerate, image, factor) + + +def brightness(image, factor): + """Equivalent of PIL Brightness.""" + degenerate = tf.zeros_like(image) + return blend(degenerate, image, factor) + + +def posterize(image, bits): + """Equivalent of PIL Posterize.""" + shift = 8 - bits + return tf.bitwise.left_shift(tf.bitwise.right_shift(image, shift), shift) + + +def rotate(image, degrees, replace): + """Rotates the image by degrees either clockwise or counterclockwise. + Args: + image: An image Tensor of type uint8. + degrees: Float, a scalar angle in degrees to rotate all images by. If + degrees is positive the image will be rotated clockwise otherwise it will + be rotated counterclockwise. + replace: A one or three value 1D tensor to fill empty pixels caused by + the rotate operation. + Returns: + The rotated version of image. + """ + # Convert from degrees to radians. + degrees_to_radians = math.pi / 180.0 + radians = degrees * degrees_to_radians + + # In practice, we should randomize the rotation degrees by flipping + # it negatively half the time, but that's done on 'degrees' outside + # of the function. + image = contrib_image.rotate(wrap(image), radians) + return unwrap(image, replace) + + +def translate_x(image, pixels, replace): + """Equivalent of PIL Translate in X dimension.""" + image = contrib_image.translate(wrap(image), [-pixels, 0]) + return unwrap(image, replace) + + +def translate_y(image, pixels, replace): + """Equivalent of PIL Translate in Y dimension.""" + image = contrib_image.translate(wrap(image), [0, -pixels]) + return unwrap(image, replace) + + +def shear_x(image, level, replace): + """Equivalent of PIL Shearing in X dimension.""" + # Shear parallel to x axis is a projective transform + # with a matrix form of: + # [1 level + # 0 1]. + image = contrib_image.transform( + wrap(image), [1., level, 0., 0., 1., 0., 0., 0.]) + return unwrap(image, replace) + + +def shear_y(image, level, replace): + """Equivalent of PIL Shearing in Y dimension.""" + # Shear parallel to y axis is a projective transform + # with a matrix form of: + # [1 0 + # level 1]. + image = contrib_image.transform( + wrap(image), [1., 0., 0., level, 1., 0., 0., 0.]) + return unwrap(image, replace) + + +def autocontrast(image): + """Implements Autocontrast function from PIL using TF ops. + Args: + image: A 3D uint8 tensor. + Returns: + The image after it has had autocontrast applied to it and will be of type + uint8. + """ + + def scale_channel(image): + """Scale the 2D image using the autocontrast rule.""" + # A possibly cheaper version can be done using cumsum/unique_with_counts + # over the histogram values, rather than iterating over the entire image. + # to compute mins and maxes. + lo = tf.to_float(tf.reduce_min(image)) + hi = tf.to_float(tf.reduce_max(image)) + + # Scale the image, making the lowest value 0 and the highest value 255. + def scale_values(im): + scale = 255.0 / (hi - lo) + offset = -lo * scale + im = tf.to_float(im) * scale + offset + im = tf.clip_by_value(im, 0.0, 255.0) + return tf.cast(im, tf.uint8) + + result = tf.cond(hi > lo, lambda: scale_values(image), lambda: image) + return result + + # Assumes RGB for now. Scales each channel independently + # and then stacks the result. + s1 = scale_channel(image[:, :, 0]) + s2 = scale_channel(image[:, :, 1]) + s3 = scale_channel(image[:, :, 2]) + image = tf.stack([s1, s2, s3], 2) + return image + + +def sharpness(image, factor): + """Implements Sharpness function from PIL using TF ops.""" + orig_image = image + image = tf.cast(image, tf.float32) + # Make image 4D for conv operation. + image = tf.expand_dims(image, 0) + # SMOOTH PIL Kernel. + kernel = tf.constant( + [[1, 1, 1], [1, 5, 1], [1, 1, 1]], dtype=tf.float32, + shape=[3, 3, 1, 1]) / 13. + # Tile across channel dimension. + kernel = tf.tile(kernel, [1, 1, 3, 1]) + strides = [1, 1, 1, 1] + with tf.device('/cpu:0'): + # Some augmentation that uses depth-wise conv will cause crashing when + # training on GPU. See ((internal link)) for details. + degenerate = tf.nn.depthwise_conv2d( + image, kernel, strides, padding='VALID', rate=[1, 1]) + degenerate = tf.clip_by_value(degenerate, 0.0, 255.0) + degenerate = tf.squeeze(tf.cast(degenerate, tf.uint8), [0]) + + # For the borders of the resulting image, fill in the values of the + # original image. + mask = tf.ones_like(degenerate) + padded_mask = tf.pad(mask, [[1, 1], [1, 1], [0, 0]]) + padded_degenerate = tf.pad(degenerate, [[1, 1], [1, 1], [0, 0]]) + result = tf.where(tf.equal(padded_mask, 1), padded_degenerate, orig_image) + + # Blend the final result. + return blend(result, orig_image, factor) + + +def equalize(image): + """Implements Equalize function from PIL using TF ops.""" + def scale_channel(im, c): + """Scale the data in the channel to implement equalize.""" + im = tf.cast(im[:, :, c], tf.int32) + # Compute the histogram of the image channel. + histo = tf.histogram_fixed_width(im, [0, 255], nbins=256) + + # For the purposes of computing the step, filter out the nonzeros. + nonzero = tf.where(tf.not_equal(histo, 0)) + nonzero_histo = tf.reshape(tf.gather(histo, nonzero), [-1]) + step = (tf.reduce_sum(nonzero_histo) - nonzero_histo[-1]) // 255 + + def build_lut(histo, step): + # Compute the cumulative sum, shifting by step // 2 + # and then normalization by step. + lut = (tf.cumsum(histo) + (step // 2)) // step + # Shift lut, prepending with 0. + lut = tf.concat([[0], lut[:-1]], 0) + # Clip the counts to be in range. This is done + # in the C code for image.point. + return tf.clip_by_value(lut, 0, 255) + + # If step is zero, return the original image. Otherwise, build + # lut from the full histogram and step and then index from it. + result = tf.cond(tf.equal(step, 0), + lambda: im, + lambda: tf.gather(build_lut(histo, step), im)) + + return tf.cast(result, tf.uint8) + + # Assumes RGB for now. Scales each channel independently + # and then stacks the result. + s1 = scale_channel(image, 0) + s2 = scale_channel(image, 1) + s3 = scale_channel(image, 2) + image = tf.stack([s1, s2, s3], 2) + return image + + +def invert(image): + """Inverts the image pixels.""" + image = tf.convert_to_tensor(image) + return 255 - image + + +def wrap(image): + """Returns 'image' with an extra channel set to all 1s.""" + shape = tf.shape(image) + extended_channel = tf.ones([shape[0], shape[1], 1], image.dtype) + extended = tf.concat([image, extended_channel], 2) + return extended + + +def unwrap(image, replace): + """Unwraps an image produced by wrap. + Where there is a 0 in the last channel for every spatial position, + the rest of the three channels in that spatial dimension are grayed + (set to 128). Operations like translate and shear on a wrapped + Tensor will leave 0s in empty locations. Some transformations look + at the intensity of values to do preprocessing, and we want these + empty pixels to assume the 'average' value, rather than pure black. + Args: + image: A 3D Image Tensor with 4 channels. + replace: A one or three value 1D tensor to fill empty pixels. + Returns: + image: A 3D image Tensor with 3 channels. + """ + image_shape = tf.shape(image) + # Flatten the spatial dimensions. + flattened_image = tf.reshape(image, [-1, image_shape[2]]) + + # Find all pixels where the last channel is zero. + alpha_channel = flattened_image[:, 3] + + replace = tf.concat([replace, tf.ones([1], image.dtype)], 0) + + # Where they are zero, fill them in with 'replace'. + flattened_image = tf.where( + tf.equal(alpha_channel, 0), + tf.ones_like(flattened_image, dtype=image.dtype) * replace, + flattened_image) + + image = tf.reshape(flattened_image, image_shape) + image = tf.slice(image, [0, 0, 0], [image_shape[0], image_shape[1], 3]) + return image + + +NAME_TO_FUNC = { + 'AutoContrast': autocontrast, + 'Equalize': equalize, + 'Invert': invert, + 'Rotate': rotate, + 'Posterize': posterize, + 'Solarize': solarize, + 'SolarizeAdd': solarize_add, + 'Color': color, + 'Contrast': contrast, + 'Brightness': brightness, + 'Sharpness': sharpness, + 'ShearX': shear_x, + 'ShearY': shear_y, + 'TranslateX': translate_x, + 'TranslateY': translate_y, + 'Cutout': cutout, +} + + +def _randomly_negate_tensor(tensor): + """With 50% prob turn the tensor negative.""" + should_flip = tf.cast(tf.floor(tf.random_uniform([]) + 0.5), tf.bool) + final_tensor = tf.cond(should_flip, lambda: tensor, lambda: -tensor) + return final_tensor + + +def _rotate_level_to_arg(level): + level = (level/_MAX_LEVEL) * 30. + level = _randomly_negate_tensor(level) + return (level,) + + +def _shrink_level_to_arg(level): + """Converts level to ratio by which we shrink the image content.""" + if level == 0: + return (1.0,) # if level is zero, do not shrink the image + # Maximum shrinking ratio is 2.9. + level = 2. / (_MAX_LEVEL / level) + 0.9 + return (level,) + + +def _enhance_level_to_arg(level): + return ((level/_MAX_LEVEL) * 1.8 + 0.1,) + + +def _shear_level_to_arg(level): + level = (level/_MAX_LEVEL) * 0.3 + # Flip level to negative with 50% chance. + level = _randomly_negate_tensor(level) + return (level,) + + +def _translate_level_to_arg(level, translate_const): + level = (level/_MAX_LEVEL) * float(translate_const) + # Flip level to negative with 50% chance. + level = _randomly_negate_tensor(level) + return (level,) + + +def level_to_arg(hparams): + return { + 'AutoContrast': lambda level: (), + 'Equalize': lambda level: (), + 'Invert': lambda level: (), + 'Rotate': _rotate_level_to_arg, + 'Posterize': lambda level: (int((level/_MAX_LEVEL) * 4),), + 'Solarize': lambda level: (int((level/_MAX_LEVEL) * 256),), + 'SolarizeAdd': lambda level: (int((level/_MAX_LEVEL) * 110),), + 'Color': _enhance_level_to_arg, + 'Contrast': _enhance_level_to_arg, + 'Brightness': _enhance_level_to_arg, + 'Sharpness': _enhance_level_to_arg, + 'ShearX': _shear_level_to_arg, + 'ShearY': _shear_level_to_arg, + 'Cutout': lambda level: (int((level/_MAX_LEVEL) * hparams.cutout_const),), + 'TranslateX': lambda level: _translate_level_to_arg( + level, hparams.translate_const), + 'TranslateY': lambda level: _translate_level_to_arg( + level, hparams.translate_const), + # pylint:enable=g-long-lambda + } + + +def _parse_policy_info(name, prob, level, replace_value, augmentation_hparams): + """Return the function that corresponds to `name` and update `level` param.""" + func = NAME_TO_FUNC[name] + args = level_to_arg(augmentation_hparams)[name](level) + + # Check to see if prob is passed into function. This is used for operations + # where we alter bboxes independently. + # pytype:disable=wrong-arg-types + if 'prob' in inspect.getfullargspec(func).args: + args = tuple([prob] + list(args)) + # pytype:enable=wrong-arg-types + + # Add in replace arg if it is required for the function that is being called. + # pytype:disable=wrong-arg-types + if 'replace' in inspect.getfullargspec(func).args: + # Make sure replace is the final argument + assert 'replace' == inspect.getfullargspec(func).args[-1] + args = tuple(list(args) + [replace_value]) + # pytype:enable=wrong-arg-types + + return (func, prob, args) + + +def _apply_func_with_prob(func, image, args, prob): + """Apply `func` to image w/ `args` as input with probability `prob`.""" + assert isinstance(args, tuple) + + # If prob is a function argument, then this randomness is being handled + # inside the function, so make sure it is always called. + # pytype:disable=wrong-arg-types + if 'prob' in inspect.getfullargspec(func).args: + prob = 1.0 + # pytype:enable=wrong-arg-types + + # Apply the function with probability `prob`. + should_apply_op = tf.cast( + tf.floor(tf.random_uniform([], dtype=tf.float32) + prob), tf.bool) + augmented_image = tf.cond( + should_apply_op, + lambda: func(image, *args), + lambda: image) + return augmented_image + + +def select_and_apply_random_policy(policies, image): + """Select a random policy from `policies` and apply it to `image`.""" + policy_to_select = tf.random_uniform([], maxval=len(policies), dtype=tf.int32) + # Note that using tf.case instead of tf.conds would result in significantly + # larger graphs and would even break export for some larger policies. + for (i, policy) in enumerate(policies): + image = tf.cond( + tf.equal(i, policy_to_select), + lambda selected_policy=policy: selected_policy(image), + lambda: image) + return image + + +def build_and_apply_nas_policy(policies, image, + augmentation_hparams): + """Build a policy from the given policies passed in and apply to image. + Args: + policies: list of lists of tuples in the form `(func, prob, level)`, `func` + is a string name of the augmentation function, `prob` is the probability + of applying the `func` operation, `level` is the input argument for + `func`. + image: tf.Tensor that the resulting policy will be applied to. + augmentation_hparams: Hparams associated with the NAS learned policy. + Returns: + A version of image that now has data augmentation applied to it based on + the `policies` pass into the function. + """ + replace_value = [128, 128, 128] + + # func is the string name of the augmentation function, prob is the + # probability of applying the operation and level is the parameter associated + # with the tf op. + + # tf_policies are functions that take in an image and return an augmented + # image. + tf_policies = [] + for policy in policies: + tf_policy = [] + # Link string name to the correct python function and make sure the correct + # argument is passed into that function. + for policy_info in policy: + policy_info = list(policy_info) + [replace_value, augmentation_hparams] + + tf_policy.append(_parse_policy_info(*policy_info)) + # Now build the tf policy that will apply the augmentation procedue + # on image. + def make_final_policy(tf_policy_): + def final_policy(image_): + for func, prob, args in tf_policy_: + image_ = _apply_func_with_prob( + func, image_, args, prob) + return image_ + return final_policy + tf_policies.append(make_final_policy(tf_policy)) + + augmented_image = select_and_apply_random_policy( + tf_policies, image) + return augmented_image + + +def distort_image_with_autoaugment(image, augmentation_name): + """Applies the AutoAugment policy to `image`. + AutoAugment is from the paper: https://arxiv.org/abs/1805.09501. + Args: + image: `Tensor` of shape [height, width, 3] representing an image. + augmentation_name: The name of the AutoAugment policy to use. The available + options are `v0` and `test`. `v0` is the policy used for + all of the results in the paper and was found to achieve the best results + on the COCO dataset. `v1`, `v2` and `v3` are additional good policies + found on the COCO dataset that have slight variation in what operations + were used during the search procedure along with how many operations are + applied in parallel to a single image (2 vs 3). + Returns: + A tuple containing the augmented versions of `image`. + """ + available_policies = {'v0': policy_v0, + 'test': policy_vtest} + if augmentation_name not in available_policies: + raise ValueError('Invalid augmentation_name: {}'.format(augmentation_name)) + + policy = available_policies[augmentation_name]() + # Hparams that will be used for AutoAugment. + augmentation_hparams = HParams( + cutout_const=100, translate_const=250) + + return build_and_apply_nas_policy(policy, image, augmentation_hparams) + + +def distort_image_with_randaugment(image, num_layers, magnitude): + """Applies the RandAugment policy to `image`. + RandAugment is from the paper https://arxiv.org/abs/1909.13719, + Args: + image: `Tensor` of shape [height, width, 3] representing an image. + num_layers: Integer, the number of augmentation transformations to apply + sequentially to an image. Represented as (N) in the paper. Usually best + values will be in the range [1, 3]. + magnitude: Integer, shared magnitude across all augmentation operations. + Represented as (M) in the paper. Usually best values are in the range + [5, 30]. + Returns: + The augmented version of `image`. + """ + replace_value = [128] * 3 + tf.logging.info('Using RandAug.') + augmentation_hparams = HParams( + cutout_const=40, translate_const=100) + available_ops = [ + 'AutoContrast', 'Equalize', 'Invert', 'Rotate', 'Posterize', + 'Solarize', 'Color', 'Contrast', 'Brightness', 'Sharpness', + 'ShearX', 'ShearY', 'TranslateX', 'TranslateY', 'Cutout', 'SolarizeAdd'] + + for layer_num in range(num_layers): + op_to_select = tf.random_uniform( + [], maxval=len(available_ops), dtype=tf.int32) + random_magnitude = float(magnitude) + with tf.name_scope('randaug_layer_{}'.format(layer_num)): + for (i, op_name) in enumerate(available_ops): + prob = tf.random_uniform([], minval=0.2, maxval=0.8, dtype=tf.float32) + func, _, args = _parse_policy_info(op_name, prob, random_magnitude, + replace_value, augmentation_hparams) + image = tf.cond( + tf.equal(i, op_to_select), + lambda selected_func=func, selected_args=args: selected_func( + image, *selected_args), + # pylint:enable=g-long-lambda + lambda: image) + return image diff --git a/big_vision/pp/builder.py b/big_vision/pp/builder.py new file mode 100644 index 0000000000000000000000000000000000000000..8e254cdfdd17c3b58e1c9522bbc2a5be1bb089b9 --- /dev/null +++ b/big_vision/pp/builder.py @@ -0,0 +1,85 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Preprocessing builder.""" + +from absl import logging +from big_vision.pp import registry +import tensorflow as tf + + +def get_preprocess_fn(pp_pipeline, log_data=True, log_steps=False): + """Transform an input string into the preprocessing function. + + The minilanguage is as follows: + + fn1|fn2(arg, arg2,...)|... + + And describes the successive application of the various `fn`s to the input, + where each function can optionally have one or more arguments, which are + either positional or key/value, as dictated by the `fn`. + + The output preprocessing function expects a dictionary as input. This + dictionary should have a key "image" that corresponds to a 3D tensor + (height x width x channel). + + Args: + pp_pipeline: A string describing the pre-processing pipeline. If empty or + None, no preprocessing will be executed. + log_data: Whether to log the data before and after preprocessing. Can also + be a string to show in the log for debugging, for example dataset name. + log_steps: Whether to log the steps of the preprocessing pipeline. + + Returns: + preprocessing function. + + Raises: + ValueError: if preprocessing function name is unknown + """ + + names, ops, spec_strings = [], [], [] + if pp_pipeline: + for op_spec in pp_pipeline.split("|"): + if not op_spec: continue # Skip empty section instead of error. + try: + ops.append(registry.Registry.lookup(f"preprocess_ops.{op_spec}")()) + names.append(registry.parse_name(op_spec)[0]) + spec_strings.append(op_spec) + except SyntaxError as err: + raise ValueError(f"Syntax error on: {op_spec}") from err + + def _preprocess_fn(data): + """The preprocessing function that is returned.""" + nonlocal log_data, log_steps + + # Apply all the individual steps in sequence. + if log_data: + logging.info("Data before pre-processing (%s):\n%s", log_data, data) + for name, op, spec in zip(names, ops, spec_strings): + if log_steps: + logging.info("Pre-processing step (%s): %s\n%s", name, spec, data) + with tf.name_scope(name): + data = op(data) + + # Validate input + if not isinstance(data, dict): + raise ValueError("Argument `data` must be a dictionary, " + "not %s" % str(type(data))) + + if log_data: + logging.info("Data after pre-processing (%s):\n%s", log_data, data) + log_data = False # For eager&pygrain: only log first one of each pipeline. + return data + + return _preprocess_fn diff --git a/big_vision/pp/builder_test.py b/big_vision/pp/builder_test.py new file mode 100644 index 0000000000000000000000000000000000000000..f3a75cc05417a7f3ace70f97583d2e7b1ae4c432 --- /dev/null +++ b/big_vision/pp/builder_test.py @@ -0,0 +1,72 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for builder.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from big_vision.pp import builder +from big_vision.pp import ops_general # pylint: disable=unused-import +from big_vision.pp import ops_image # pylint: disable=unused-import +import numpy as np +import tensorflow.compat.v1 as tf + + +class BuilderTest(tf.test.TestCase): + + def testSingle(self): + pp_fn = builder.get_preprocess_fn("resize(256)") + x = np.random.randint(0, 256, [640, 480, 3]) + image = pp_fn({"image": x})["image"] + self.assertEqual(image.numpy().shape, (256, 256, 3)) + + def testEmpty(self): + pp_fn = builder.get_preprocess_fn("||inception_crop|||resize(256)||") + + # Typical image input + x = np.random.randint(0, 256, [640, 480, 3]) + image = pp_fn({"image": x})["image"] + self.assertEqual(image.numpy().shape, (256, 256, 3)) + + def testPreprocessingPipeline(self): + pp_str = ("inception_crop|resize(256)|resize((256, 256))|" + "central_crop((80, 120))|flip_lr|value_range(0,1)|" + "value_range(-1,1)") + pp_fn = builder.get_preprocess_fn(pp_str) + + # Typical image input + x = np.random.randint(0, 256, [640, 480, 3]) + image = pp_fn({"image": x})["image"] + self.assertEqual(image.numpy().shape, (80, 120, 3)) + self.assertLessEqual(np.max(image.numpy()), 1) + self.assertGreaterEqual(np.min(image.numpy()), -1) + + def testNumArgsException(self): + + x = np.random.randint(0, 256, [640, 480, 3]) + for pp_str in [ + "inception_crop(1)", + "resize()", + "resize(1, 1, 1)" + "flip_lr(1)", + "central_crop()", + ]: + with self.assertRaises(BaseException): + builder.get_preprocess_fn(pp_str)(x) + + +if __name__ == "__main__": + tf.test.main() diff --git a/big_vision/pp/ops_general.py b/big_vision/pp/ops_general.py new file mode 100644 index 0000000000000000000000000000000000000000..2a5cebd07b34b9d4ba56e5da52d7a06125a04304 --- /dev/null +++ b/big_vision/pp/ops_general.py @@ -0,0 +1,465 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Generic tensor preprocessing ops. + +All preprocessing ops should return a data processing functors. A data +is represented as a dictionary of (TF) tensors. The functors output a modified +dictionary. +""" + +import collections + +from big_vision.pp import utils +from big_vision.pp.registry import Registry +import big_vision.utils as bv_utils +import jax +import numpy as np +import tensorflow as tf + + +@Registry.register("preprocess_ops.value_range") +@utils.InKeyOutKey() +def get_value_range(vmin=-1, vmax=1, in_min=0, in_max=255.0, clip_values=False): + """Transforms a [in_min,in_max] image to [vmin,vmax] range. + + Input ranges in_min/in_max can be equal-size lists to rescale the invidudal + channels independently. + + Args: + vmin: A scalar. Output max value. + vmax: A scalar. Output min value. + in_min: A scalar or a list of input min values to scale. If a list, the + length should match to the number of channels in the image. + in_max: A scalar or a list of input max values to scale. If a list, the + length should match to the number of channels in the image. + clip_values: Whether to clip the output values to the provided ranges. + + Returns: + A function to rescale the values. + """ + + def _value_range(image): + """Scales values in given range.""" + in_min_t = tf.constant(in_min, tf.float32) + in_max_t = tf.constant(in_max, tf.float32) + image = tf.cast(image, tf.float32) + image = (image - in_min_t) / (in_max_t - in_min_t) + image = vmin + image * (vmax - vmin) + if clip_values: + image = tf.clip_by_value(image, vmin, vmax) + return image + + return _value_range + + +@Registry.register("preprocess_ops.lookup") +@utils.InKeyOutKey() +def get_lookup(mapping, npzkey="fnames", sep=None): + """Map string to number.""" + + # For NumPy files, we use the `npzkey` array in that file as the list of + # strings which are mapped to their index in that array. + # This is especially useful when other data (eg precomputed predictions) + # goes along with this mapping, to have everything in one place (the npz). + if mapping.endswith(".npz"): + with tf.io.gfile.GFile(mapping, "rb") as f: + keys = np.array(np.load(f, allow_pickle=False)[npzkey]) + vals = np.arange(len(keys)) + + # Otherwise, we simply use the file as a text file, with either of: + # - a string per line, mapped to its line-number + # - a pair, separated by `sep` per line, first value being the string, second + # value being the integer that the string is mapped to. + else: + with tf.io.gfile.GFile(mapping, "r") as f: + buf = f.read() + if sep is None: # values are the line numbers + keys = buf.splitlines() + vals = np.arange(len(keys)) + else: # each line is keyval, also make val int + keys, vals = zip(*[l.split(sep) for l in buf.splitlines()]) + vals = [int(v) for v in vals] + + def _do_the_mapping(needle): + """Map string to number.""" + with tf.init_scope(): # (Originally added for performance reasons.) + table = tf.lookup.StaticHashTable( + tf.lookup.KeyValueTensorInitializer(keys, vals), -1) + return table.lookup(needle) + + return _do_the_mapping + + +@Registry.register("preprocess_ops.onehot") +def get_onehot(depth, + key="labels", + key_result=None, + multi=True, + on=1.0, + off=0.0): + """One-hot encodes the input. + + Args: + depth: Length of the one-hot vector (how many classes). + key: Key of the data to be one-hot encoded. + key_result: Key under which to store the result (same as `key` if None). + multi: If there are multiple labels, whether to merge them into the same + "multi-hot" vector (True) or keep them as an extra dimension (False). + on: Value to fill in for the positive label (default: 1). + off: Value to fill in for negative labels (default: 0). + + Returns: + Data dictionary. + """ + + def _onehot(data): + # When there's more than one label, this is significantly more efficient + # than using tf.one_hot followed by tf.reduce_max; we tested. + labels = data[key] + labels = tf.cast(labels, tf.int64) # both scatter and one_hot expect this + if labels.shape.rank > 0 and multi: + x = tf.scatter_nd(labels[:, None], tf.ones(tf.shape(labels)[0]), (depth,)) + x = tf.clip_by_value(x, 0, 1) * (on - off) + off + else: + x = tf.one_hot(labels, depth, on_value=on, off_value=off) + data[key_result or key] = x + return data + + return _onehot + + +@Registry.register("preprocess_ops.keep") +def get_keep(*keys): + """Keeps only the given keys.""" + + def _keep(data): + return {k: v for k, v in data.items() if k in keys} + + return _keep + + +@Registry.register("preprocess_ops.drop") +def get_drop(*keys): + """Drops the given keys.""" + + def _drop(data): + return {k: v for k, v in data.items() if k not in keys} + + return _drop + + +@Registry.register("preprocess_ops.copy") +def get_copy(inkey, outkey): + """Copies value of `inkey` into `outkey`.""" + + def _copy(data): + # A "semi-deep" copy. deepcopy doesn't work when tf tensors are part of the + # game. What we want, is to only copy the python structure (dicts, lists) + # and keep tensors as they are, since we never modify them in-place anyways. + # The following achieves exactly that. + data[outkey] = jax.tree.map(lambda x: x, data[inkey]) + return data + + return _copy + + +@Registry.register("preprocess_ops.squeeze_last_dim") +@utils.InKeyOutKey() +def get_squeeze_last_dim(): + def _squeeze_last_dim(x): + return tf.squeeze(x, axis=-1) + return _squeeze_last_dim + + +@Registry.register("preprocess_ops.concat") +def get_concat(inkeys, outkey=None, axis=-1): + """Concatenates elements along some axis.""" + + def _concat(data): + data[outkey or inkeys[0]] = tf.concat([data[k] for k in inkeys], axis) + return data + + return _concat + + +@Registry.register("preprocess_ops.rag_tensor") +@utils.InKeyOutKey() +def get_rag_tensor(): + """Converts the specified feature to ragged tensor.""" + + def rag_tensor(raw_tensor): + # Note: Add one more dimension as `from_tensor` requires at least rank 2. + return tf.RaggedTensor.from_tensor(raw_tensor[None]) + + return rag_tensor + + +@Registry.register("preprocess_ops.pad_to_shape") +@utils.InKeyOutKey() +def get_pad_to_shape(shape, pad_value=0, where="after"): + """Pads tensor to specified `shape`.""" + + def _pads(cur, tgt): + if tgt is None: + return [0, 0] + diff = tgt - cur + return { + "before": [diff, 0], + "after": [0, diff], + "both": [diff // 2, diff - diff // 2], + }[where] + + def _pad_to_shape(x): + assert len(x.shape.as_list()) == len(shape) + paddings = [_pads(tgt=shape[i], cur=tf.shape(x)[i]) + for i in range(len(shape))] + constant_value = tf.constant(pad_value, x.dtype) + ret = tf.pad(x, paddings, constant_values=constant_value) + ret.set_shape(shape) + return ret + + return _pad_to_shape + + +@Registry.register("preprocess_ops.flatten") +def get_flatten(): + """Flattens the keys of data with separator '/'.""" + + def flatten(data): + flat, _ = bv_utils.tree_flatten_with_names(data) + return dict(flat) + + return flatten + + +@Registry.register("preprocess_ops.reshape") +@utils.InKeyOutKey() +def get_reshape(new_shape): + """Reshapes tensor to a given new shape. + + Args: + new_shape: new shape for the tensor. + + Returns: + A function for reshaping a tensor. + + """ + + def _reshape(tensor): + """Reshapes a tensor to a given shape.""" + dtype = tensor.dtype + tensor = tf.reshape(tensor, new_shape) + return tf.cast(tensor, dtype) + + return _reshape + + +@Registry.register("preprocess_ops.setdefault") +def get_setdefault(key, value): + """If `key` is an empty tensor or missing, set it to `value`.""" + def _setdefault(data): + x = data.get(key, tf.constant(value)) + v = tf.constant(value, dtype=x.dtype) + v = tf.broadcast_to(v, [s or 1 for s in x.shape]) + data[key] = tf.cond(tf.size(x) > 0, lambda: x, lambda: v) + return data + return _setdefault + + +@Registry.register("preprocess_ops.choice") +def get_choice(n="single", key=None, fewer_ok=False, inkey=None, outkey=None): + """Chooses the same `n` random entries of all `keys`. + + Args: + n: how many entries to randomly sample (without repeat). Possible values: + - int: that many entries (or fewer if there's fewer, see `fewer_ok`.) + - "single": The string "single" only chooses one and drop the leading dim. + - [min, max]: A pair means randomly take between min/max examples (incl.). + key: str or list of str: See Note. + fewer_ok: whether to fail when there's fewer than `n` elements to choose + from (and hence set static shape to `n`), or whether to allow it. + (and hence have unknown static shape). + inkey: str or list of str: See Note. + outkey: str or list of str: See Note. + + Note: + If key/inkey/outkey is a list, then the same random entries are chosen for + all of the keys. Other than that, they function the same as InKeyOutKey. + + The outkey can also contain the placeholder `{key}` that'll be . + + Examples: + choice(key="alt_text/text") + choice(n=128, key=["patches", "positions"]) + choice(inkey=["questions_i18n", "answers_i18n"], outkey=["q", "a"]) + + Returns: + The pp op. + """ + + # Normalize keys: + inkeys = utils.maybe_repeat(inkey or key, 1) + outkeys = utils.maybe_repeat(outkey or key, 1) + outkeys = [ok.format(key=ik) for ok, ik in zip(outkeys, inkeys)] + + # Let's DRY on this condition and give it a name. + is_varlen = isinstance(n, (list, tuple)) + min_n = n[0] if is_varlen else 1 if n == "single" else n + + def _choice(data): + # Catch a hard to identify/understand user error: + assert data[inkeys[0]].ndim > 0, ( + f"You're calling `choice_no_replacement` on {inkeys}, a scalar." + " That's probably a mistake ; double-check and then just don't." + ) + + nitems = tf.shape(data[inkeys[0]])[0] + + # Sanity check that all keys have same leading dimension, and that is at + # least as large as the minimum requested output. + lengths = [tf.shape(data[k])[0] for k in inkeys] + checks = [tf.debugging.assert_equal(l, nitems) for l in lengths] + if not fewer_ok: # Since we check for all-same, a single suffices here. + checks.append(tf.debugging.assert_greater_equal(nitems, min_n)) + with tf.control_dependencies(checks): + nitems = tf.identity(nitems) + + if n == "single": + index = tf.random.uniform([], 0, nitems, dtype=tf.int32) + else: + # Subsample by shuffling and taking first n, but... + indices = tf.random.shuffle(tf.range(nitems)) + end = n + if is_varlen: + end = tf.random.uniform([], n[0], n[1] + 1, dtype=tf.int32) + # ...keep the order while subsampling (it might have a meaning, eg boxes) + indices = tf.sort(indices[:end]) + + for ik, ok in zip(inkeys, outkeys): + if n == "single": + result = data[ik][index] + else: + result = tf.gather(data[ik], indices, axis=0) + if not is_varlen: # Give static shape when we can. + result = tf.ensure_shape(result, [n] + [None] * (result.ndim - 1)) + data[ok] = result + + return data + return _choice + + +def _shuffled_index(count, nitems, seed): + """Returns index from a shuffled sequence (items only repeat after epoch).""" + nitems = tf.cast(nitems, count.dtype) + item_epoch, item_offset = (count // nitems, count % nitems) + shuffled_indices = tf.random.experimental.stateless_shuffle( + tf.range(nitems), seed=tf.random.fold_in(seed, item_epoch)) + return shuffled_indices[item_offset] + + +@Registry.register("preprocess_ops.choice_no_replacement") +def get_choice_no_replacement(key=None, inkey=None, outkey=None): + """Chooses the same random (no replacement) entry of all `keys`. + + Note: Consider using this for iterating over small datasets with a small + number of epochs. It differs from `choice(n='single')` in that if an example, + as identified by its `_id` field, is seen N times then it will cycled through + all the inkeys values before repeating them. Additionally each repetition uses + a different order. + + Caveats: requires dataset to provide a _id field and uses host RAM to keep a + counter how often each id is seen. It is also not robust to preemptions. + + Args: + key: str or list of str: See Note. + inkey: str or list of str: See Note. + outkey: str or list of str: See Note. + + Note: + If key/inkey/outkey is a list, then the same random entries are chosen for + all of the keys. Other than that, they function the same as InKeyOutKey. + + The outkey can also contain the placeholder `{key}` that'll be replaced + by the inkey name. + + Examples: + choice(key="alt_text/text") + choice(key=["patches", "positions"]) + choice(inkey=["questions_i18n", "answers_i18n"], outkey=["q", "a"]) + + Returns: + The pp op. + """ + # Normalize keys: + inkeys = utils.maybe_repeat(inkey or key, 1) + outkeys = utils.maybe_repeat(outkey or key, 1) + outkeys = [ok.format(key=ik) for ok, ik in zip(outkeys, inkeys)] + + # TODO: Ideally the data pipeline should provide us with an epoch + # counter. For now count how often we see a given example id and don't worry + # on memory consumption. Counter returns 0 the first time an example is seen. + counter = collections.defaultdict(lambda: -1) + def _seen_count(example_id): + example_id = example_id.item() + counter[example_id] += 1 + return counter[example_id] + + # We need a seed to deterministically decide on a shuffled sequence and use + # the number of times an example was seen to iterate through it. The seed + # should be different for every instance of a create preprocessing function + # but it has to be fixed for each instance. + seed = tf.random.uniform( + [2], minval=tf.int32.min, maxval=tf.int32.max, dtype=tf.int32) + + def _choice(data): + # Catch a hard to identify/understand user error: + assert data[inkeys[0]].ndim > 0, ( + f"You're calling `choice` on {inkeys}, a scalar." + " That's probably a mistake ; double-check and then just don't." + ) + + nitems = tf.shape(data[inkeys[0]])[0] + + # Sanity check that all keys have same leading dimension. + checks = [ + tf.debugging.assert_equal(tf.shape(data[k])[0], nitems) + for k in inkeys + ] + with tf.control_dependencies(checks): + nitems = tf.identity(nitems) + + # Using the seed, example id and the number of times an example was seen + # pick an `index` such that items are only repeated after all items are seen + # an equal number of times. E.g. it could return indexes from this sequence: + # [0, 1, 2, 1, 2, 0, 2, 0, 1, 0, 2, 1, ...]. + count = tf.numpy_function( + _seen_count, (data["_id"],), Tout=tf.int64, stateful=True) + count = tf.cast(count, tf.int32) + nitems = tf.cast(nitems, tf.int32) + shuffle_epoch = count // nitems + shuffle_offset = count % nitems + + example_seed = tf.random.fold_in(seed, data["_id"]) + shuffle_seed = tf.random.fold_in(example_seed, shuffle_epoch) + shuffle = tf.random.experimental.stateless_shuffle( + tf.range(nitems), seed=shuffle_seed) + index = shuffle[shuffle_offset] + + # Select item[index] for all keys. + for ik, ok in zip(inkeys, outkeys): + data[ok] = data[ik][index] + return data + + return _choice diff --git a/big_vision/pp/ops_general_test.py b/big_vision/pp/ops_general_test.py new file mode 100644 index 0000000000000000000000000000000000000000..89f616e1690c6e83aff818cf0fff540dcad073fd --- /dev/null +++ b/big_vision/pp/ops_general_test.py @@ -0,0 +1,236 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for ops_general.""" + +import copy + +import big_vision.pp.ops_general as pp +import numpy as np +import tensorflow as tf + + +class PreprocessOpsTest(tf.test.TestCase): + + def tfrun(self, ppfn, data): + # Run once as standalone, as could happen eg in colab. + yield {k: np.array(v) for k, v in ppfn(copy.deepcopy(data)).items()} + + # And then once again as part of tfdata pipeline. + # You'd be surprised how much these two differ! + tfdata = tf.data.Dataset.from_tensors(copy.deepcopy(data)) + for npdata in tfdata.map(ppfn).as_numpy_iterator(): + yield npdata + + def test_value_range(self): + img = tf.random.uniform((640, 480, 3), 0, 255, tf.int32) + data = {"image": tf.cast(img, tf.uint8)} + for out in self.tfrun(pp.get_value_range(-0.5, 0.5), data): + self.assertLessEqual(np.max(out["image"]), 0.5) + self.assertGreaterEqual(np.min(out["image"]), -0.5) + + def test_value_range_custom_input_range(self): + img = tf.random.uniform((640, 480, 3), 0, 255, tf.int32) + data = {"image": tf.cast(img, tf.uint8)} + for out in self.tfrun(pp.get_value_range(-0.5, 0.5, -256, 255, True), data): + self.assertLessEqual(np.max(out["image"]), 0.5) + self.assertGreaterEqual(np.min(out["image"]), 0.0) + + def test_get_keep_drop(self): + data = {"image": 1, "labels": 2, "something": 3} + + for data_keep in self.tfrun(pp.get_keep("image", "labels"), data): + self.assertAllEqual(set(data_keep.keys()), {"image", "labels"}) + + for data_drop in self.tfrun(pp.get_drop("image", "labels"), data): + self.assertAllEqual(set(data_drop.keys()), {"something"}) + + def test_onehot(self): + data = {"labels": tf.constant(2, dtype=tf.int64)} + for out in self.tfrun(pp.get_onehot(4, "labels", multi=True), data): + self.assertAllClose(out["labels"], [0., 0., 1., 0.]) + + def test_onehot_multi(self): + data = {"labels": tf.constant([2, 3, 0], dtype=tf.int64)} + for out in self.tfrun(pp.get_onehot(4, "labels", multi=False), data): + self.assertAllClose(out["labels"], [ + [0., 0., 1., 0.], + [0., 0., 0., 1.], + [1., 0., 0., 0.]]) + + for out in self.tfrun(pp.get_onehot(4, "labels", multi=True), data): + self.assertAllClose(out["labels"], [1., 0., 1., 1.]) + + def test_onehot_2d(self): + data = {"labels": tf.constant([[2, 3], [0, 1]], dtype=tf.int64)} + for out in self.tfrun(pp.get_onehot(4, "labels", multi=False), data): + self.assertAllClose(out["labels"], [ + [[0., 0., 1., 0.], [0., 0., 0., 1.]], + [[1., 0., 0., 0.], [0., 1., 0., 0.]]]) + + def test_onehot_smoothing(self): + data = {"labels": tf.constant([2, 3, 0], dtype=tf.int64)} + for out in self.tfrun( + pp.get_onehot(4, "labels", multi=False, on=0.8, off=0.1), data): + self.assertAllClose(out["labels"], [ + [0.1, 0.1, 0.8, 0.1], + [0.1, 0.1, 0.1, 0.8], + [0.8, 0.1, 0.1, 0.1]]) + + for out in self.tfrun( + pp.get_onehot(4, "labels", multi=True, on=0.8, off=0.1), data): + self.assertAllClose(out["labels"], [0.8, 0.1, 0.8, 0.8]) + + def test_squeeze_last_dim(self): + data = {"image": tf.constant(np.zeros((32, 32, 3, 1)))} + for out in self.tfrun(pp.get_squeeze_last_dim(), data): + self.assertAllEqual(out["image"].shape, [32, 32, 3]) + + def test_pad_to_shape(self): + desired_shape = (8, 10) + for input_shape in [(8, 4), (8, 3), (8, 10), (8, 1)]: + data = {"x": tf.ones(input_shape, dtype=tf.float32)} + for out in self.tfrun( + pp.get_pad_to_shape(desired_shape, pad_value=-1, key="x"), data): + self.assertEqual( + tf.reduce_sum(out["x"]), + 2 * np.prod(input_shape) - np.prod(desired_shape)) + + def test_pad_to_shape_none(self): + data = {"x": tf.ones((8, 4), dtype=tf.float32)} + for out in self.tfrun( + pp.get_pad_to_shape((None, 6), pad_value=-1, key="x"), data): + self.assertEqual(out["x"].shape, (8, 6)) + self.assertEqual(tf.reduce_sum(out["x"]), 8*4 - 8*2) + + def test_pad_to_shape_which_side(self): + data = {"x": tf.ones((8, 4), dtype=tf.float32)} + for where, idxs in [("before", [0]), ("both", [0, -1]), ("after", [-1])]: + for out in self.tfrun( + pp.get_pad_to_shape((8, 6), key="x", where=where), data): + self.assertEqual(out["x"].shape, (8, 6)) + self.assertEqual(tf.reduce_sum(out["x"]), 8*4) + for i in idxs: + self.assertEqual(out["x"][0, i], 0) + + def test_flatten(self): + d = {"a": {"b": tf.constant([1, 2, 3])}, "c": "str"} + self.assertEqual(pp.get_flatten()(d), { + "a/b": tf.constant([1, 2, 3]), + "c": "str" + }) + + def test_reshape(self): + data = {"image": tf.constant(np.zeros((8, 32 * 32 * 3)))} + for out in self.tfrun(pp.get_reshape(new_shape=(8, 32, 32, 3)), data): + self.assertAllEqual(out["image"].shape, [8, 32, 32, 3]) + + def test_setdefault(self): + data = { + "empty_image": tf.zeros([0, 0, 0]), + "image": tf.constant(np.arange(9).reshape(3, 3)), + "empty_text": tf.zeros([0], tf.string), + "text": tf.constant(["Hello", "World"], tf.string), + } + for out in self.tfrun(pp.get_setdefault("empty_image", 1), data): + self.assertAllEqual(out["empty_image"], np.array([[[1]]])) + for out in self.tfrun(pp.get_setdefault("image", 1), data): + self.assertAllEqual(out["image"], data["image"]) + for out in self.tfrun(pp.get_setdefault("empty_text", "Lucas"), data): + self.assertAllEqual(out["empty_text"], np.array(["Lucas"])) + for out in self.tfrun(pp.get_setdefault("text", "Lucas"), data): + self.assertAllEqual(out["text"], data["text"]) + + def _data_for_choice(self): + return { + "one_f32": tf.constant([0.42], tf.float32), + "two_f32": tf.constant([3.14, 0.42], tf.float32), + "one_str": tf.constant(["Hi"], tf.string), + "two_str": tf.constant(["Hi", "Lucas"], tf.string), + "one_vec": tf.reshape(tf.range(2, dtype=tf.float32), (1, 2)), + "two_vec": tf.reshape(tf.range(4, dtype=tf.float32), (2, 2)), + } + + def test_choice(self): + # Test for the default call (n="single") + data = self._data_for_choice() + self.assertEqual( + pp.get_choice(inkey="one_f32", outkey="choice")(data)["choice"], 0.42) + self.assertEqual( + pp.get_choice(inkey="one_str", outkey="choice")(data)["choice"], "Hi") + self.assertIn( + pp.get_choice(inkey="two_f32", outkey="choice")(data)["choice"], + [3.14, 0.42]) + self.assertIn( + pp.get_choice(inkey="two_str", outkey="choice")(data)["choice"], + ["Hi", "Lucas"]) + + def test_choice_nmax(self): + # n == nelems should be identity (and keep ordering!) + data = self._data_for_choice() + for k in ("one_f32", "one_str", "one_vec"): + for out in self.tfrun(pp.get_choice(n=1, key=[k]), data): + self.assertAllEqual(out[k], data[k]) + for out in self.tfrun(pp.get_choice(n=[1, 1], key=[k]), data): + self.assertAllEqual(out[k], data[k]) + for k in ("two_f32", "two_str", "two_vec"): + for out in self.tfrun(pp.get_choice(n=2, key=[k]), data): + self.assertAllEqual(out[k], data[k]) + for out in self.tfrun(pp.get_choice(n=[2, 2], key=[k]), data): + self.assertAllEqual(out[k], data[k]) + + def test_choice_n(self): + # n < nelems should be one of them: + data = self._data_for_choice() + for k in ("two_f32", "two_str"): + for out in self.tfrun(pp.get_choice(n=1, key=[k]), data): + self.assertIn(out[k], data[k]) + + # Special testing for vectors. + for out in self.tfrun(pp.get_choice(n=1, key=["two_vec"]), data): + self.assertTrue(tf.logical_or( + tf.reduce_all(out["two_vec"][0] == data["two_vec"][0]), + tf.reduce_all(out["two_vec"][0] == data["two_vec"][1]), + )) + + def test_choice_multi(self): + # Select consistently across multiple keys. + data = self._data_for_choice() + op = pp.get_choice(n=1, key=["two_f32", "two_str"]) + for out in self.tfrun(op, data): + self.assertTrue(tf.logical_or( + tf.logical_and( + tf.reduce_all(out["two_f32"][0] == data["two_f32"][0]), + tf.reduce_all(out["two_str"][0] == data["two_str"][0]), + ), + tf.logical_and( + tf.reduce_all(out["two_f32"][0] == data["two_f32"][1]), + tf.reduce_all(out["two_str"][0] == data["two_str"][1]), + ), + )) + + def test_choice_n_range(self): + # n < nelems should be one of them: + data = self._data_for_choice() + for k in ("two_f32", "two_str", "two_vec"): + for out in self.tfrun(pp.get_choice(n=[1, 2], key=[k]), data): + self.assertTrue(tf.reduce_any([ + tf.reduce_all(out[k] == data[k][0:1]), + tf.reduce_all(out[k] == data[k][1:2]), + tf.reduce_all(out[k] == data[k][0:2]), + ])) + + +if __name__ == "__main__": + tf.test.main() diff --git a/big_vision/pp/ops_image.py b/big_vision/pp/ops_image.py new file mode 100644 index 0000000000000000000000000000000000000000..bdc55a5659c3e0df0c209edef798bbd5c6a7f623 --- /dev/null +++ b/big_vision/pp/ops_image.py @@ -0,0 +1,361 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Image-centric preprocessing ops. + +All preprocessing ops should return a data processing functors. A data +is represented as a dictionary of (TF) tensors. The functors output a modified +dictionary. + +The key named "image" is commonly used for the image, and is a 3D tensor of +shape (height x width x channels). +""" + +from big_vision.pp import utils +from big_vision.pp.registry import Registry + +import tensorflow as tf + + +@Registry.register("preprocess_ops.decode") +@utils.InKeyOutKey() +def get_decode(channels=3, precise=False): + """Decode an encoded image string, see tf.io.decode_image. + + Args: + channels: see tf.io.decode_image. + precise: if False, use default TF image decoding algorithm. + If True, change DCT method for JPEG decoding to match PIL/cv2/PyTorch. + See also (internal link) for a concrete example. + + Returns: + The decoded image. + """ + + def _decode(image): + if precise: + return tf.image.decode_jpeg( # Also supports png btw. + image, channels=channels, dct_method="INTEGER_ACCURATE") + else: + return tf.io.decode_image( + image, channels=channels, expand_animations=False) + + return _decode + + +@Registry.register("preprocess_ops.resize") +@utils.InKeyOutKey() +def get_resize(size, method="bilinear", antialias=False): + """Resizes image to a given size. + + Args: + size: either an integer H, where H is both the new height and width + of the resized image, or a list or tuple [H, W] of integers, where H and W + are new image"s height and width respectively. + method: resize method, see tf.image.resize docs for options. + antialias: see tf.image.resize. Ideally set to True for all new configs. + + Returns: + A function for resizing an image. + + """ + size = utils.maybe_repeat(size, 2) + + def _resize(image): + """Resizes image to a given size.""" + # Note: use TF-2 version of tf.image.resize as the version in TF-1 is + # buggy: https://github.com/tensorflow/tensorflow/issues/6720. + # In particular it was not equivariant with rotation and lead to the network + # to learn a shortcut in self-supervised rotation task, if rotation was + # applied after resize. + dtype = image.dtype + tf_dtype = tf.type_spec_from_value(image).dtype + image = tf.image.resize(image, size, method=method, antialias=antialias) + return tf.cast(tf.clip_by_value(image, tf_dtype.min, tf_dtype.max), dtype) + + return _resize + + +# This functionality is used by resize_small and resize_long. But we're not +# registering it as a pp op yet, as there is no need for it. However, it can +# probably be slightly generalized into "scale augmentation" eventually. +def _resize_factor(image, factor, method="area", antialias=True): + """Resizes the image by a (float) `factor`, keeping the aspect ratio fixed.""" + h, w = tf.shape(image)[0], tf.shape(image)[1] + + h = tf.cast(tf.round(tf.cast(h, tf.float32) * factor), tf.int32) + w = tf.cast(tf.round(tf.cast(w, tf.float32) * factor), tf.int32) + + dtype = image.dtype + tf_dtype = tf.type_spec_from_value(image).dtype + image = tf.image.resize(image, (h, w), method=method, antialias=antialias) + return tf.cast(tf.clip_by_value(image, tf_dtype.min, tf_dtype.max), dtype) + + +@Registry.register("preprocess_ops.resize_small") +@utils.InKeyOutKey() +def get_resize_small(smaller_size, method="area", antialias=False): + """Resizes the smaller side to `smaller_size` keeping aspect ratio. + + Args: + smaller_size: an integer, that represents a new size of the smaller side of + an input image. + method: the resize method. `area` is a meaningful, bwd-compat default. + antialias: see tf.image.resize. Ideally set to True for all new configs. + + Returns: + A function, that resizes an image and preserves its aspect ratio. + + Note: + backwards-compat for "area"+antialias tested here: + (internal link) + """ + + def _resize_small(image): # pylint: disable=missing-docstring + h, w = tf.shape(image)[0], tf.shape(image)[1] + factor = ( + tf.cast(smaller_size, tf.float32) / + tf.cast(tf.minimum(h, w), tf.float32)) + return _resize_factor(image, factor, method=method, antialias=antialias) + return _resize_small + + +@Registry.register("preprocess_ops.resize_long") +@utils.InKeyOutKey() +def get_resize_long(longer_size, method="area", antialias=True): + """Resizes the longer side to `longer_size` keeping aspect ratio. + + Args: + longer_size: an integer, that represents a new size of the longer side of + an input image. + method: the resize method. `area` is a meaningful, bwd-compat default. + antialias: see tf.image.resize. Ideally set to True for all new configs. + + Returns: + A function, that resizes an image and preserves its aspect ratio. + """ + + def _resize_long(image): # pylint: disable=missing-docstring + h, w = tf.shape(image)[0], tf.shape(image)[1] + factor = ( + tf.cast(longer_size, tf.float32) / + tf.cast(tf.maximum(h, w), tf.float32)) + return _resize_factor(image, factor, method=method, antialias=antialias) + return _resize_long + + +@Registry.register("preprocess_ops.inception_crop") +@utils.InKeyOutKey() +def get_inception_crop(size=None, area_min=5, area_max=100, + method="bilinear", antialias=False): + """Makes inception-style image crop. + + Inception-style crop is a random image crop (its size and aspect ratio are + random) that was used for training Inception models, see + https://www.cs.unc.edu/~wliu/papers/GoogLeNet.pdf. + + Args: + size: Resize image to [size, size] after crop. + area_min: minimal crop area. + area_max: maximal crop area. + method: rezied method, see tf.image.resize docs for options. + antialias: see tf.image.resize. Ideally set to True for all new configs. + + Returns: + A function, that applies inception crop. + """ + + def _inception_crop(image): # pylint: disable=missing-docstring + begin, crop_size, _ = tf.image.sample_distorted_bounding_box( + tf.shape(image), + tf.zeros([0, 0, 4], tf.float32), + area_range=(area_min / 100, area_max / 100), + min_object_covered=0, # Don't enforce a minimum area. + use_image_if_no_bounding_boxes=True) + crop = tf.slice(image, begin, crop_size) + # Unfortunately, the above operation loses the depth-dimension. So we need + # to restore it the manual way. + crop.set_shape([None, None, image.shape[-1]]) + if size: + crop = get_resize(size, method, antialias)({"image": crop})["image"] + return crop + + return _inception_crop + + +@Registry.register("preprocess_ops.decode_jpeg_and_inception_crop") +@utils.InKeyOutKey() +def get_decode_jpeg_and_inception_crop(size=None, area_min=5, area_max=100, + ratio_min=0.75, ratio_max=1.33, + method="bilinear", antialias=False): + """Decode jpeg string and make inception-style image crop. + + Inception-style crop is a random image crop (its size and aspect ratio are + random) that was used for training Inception models, see + https://www.cs.unc.edu/~wliu/papers/GoogLeNet.pdf. + + Args: + size: Resize image to [size, size] after crop. + area_min: minimal crop area. + area_max: maximal crop area. + ratio_min: minimal aspect ratio. + ratio_max: maximal aspect ratio. + method: rezied method, see tf.image.resize docs for options. + antialias: see tf.image.resize. Ideally set to True for all new configs. + + Returns: + A function, that applies inception crop. + """ + + def _inception_crop(image_data): # pylint: disable=missing-docstring + shape = tf.image.extract_jpeg_shape(image_data) + begin, crop_size, _ = tf.image.sample_distorted_bounding_box( + shape, + tf.zeros([0, 0, 4], tf.float32), + area_range=(area_min / 100, area_max / 100), + aspect_ratio_range=(ratio_min, ratio_max), + min_object_covered=0, # Don't enforce a minimum area. + use_image_if_no_bounding_boxes=True) + + # Crop the image to the specified bounding box. + offset_y, offset_x, _ = tf.unstack(begin) + target_height, target_width, _ = tf.unstack(crop_size) + crop_window = tf.stack([offset_y, offset_x, target_height, target_width]) + image = tf.image.decode_and_crop_jpeg(image_data, crop_window, channels=3) + + if size: + image = get_resize(size, method, antialias)({"image": image})["image"] + + return image + + return _inception_crop + + +@Registry.register("preprocess_ops.random_crop") +@utils.InKeyOutKey() +def get_random_crop(crop_size): + """Makes a random crop of a given size. + + Args: + crop_size: either an integer H, where H is both the height and width of the + random crop, or a list or tuple [H, W] of integers, where H and W are + height and width of the random crop respectively. + + Returns: + A function, that applies random crop. + """ + crop_size = utils.maybe_repeat(crop_size, 2) + + def _crop(image): + return tf.image.random_crop(image, (*crop_size, image.shape[-1])) + + return _crop + + +@Registry.register("preprocess_ops.central_crop") +@utils.InKeyOutKey() +def get_central_crop(crop_size=None): + """Makes central crop of a given size. + + Args: + crop_size: either an integer H, where H is both the height and width of the + central crop, or a list or tuple [H, W] of integers, where H and W are + height and width of the central crop respectively. If `crop_size` is not + specified, then the largest possible center crop will be taken. + + Returns: + A function, that applies central crop. + """ + if crop_size: + crop_size = utils.maybe_repeat(crop_size, 2) + + def _crop(image): + if crop_size: + h, w = crop_size[0], crop_size[1] + else: + h = w = tf.minimum(tf.shape(image)[0], tf.shape(image)[1]) + dy = (tf.shape(image)[0] - h) // 2 + dx = (tf.shape(image)[1] - w) // 2 + return tf.image.crop_to_bounding_box(image, dy, dx, h, w) + + return _crop + + +@Registry.register("preprocess_ops.flip_lr") +@utils.InKeyOutKey() +def get_random_flip_lr(): + """Flips an image horizontally with probability 50%.""" + + def _random_flip_lr_pp(image): + return tf.image.random_flip_left_right(image) + + return _random_flip_lr_pp + + +@Registry.register("preprocess_ops.vgg_value_range") +@utils.InKeyOutKey() +def get_vgg_value_range( + mean=(0.485 * 255, 0.456 * 255, 0.406 * 255), + std=(0.229 * 255, 0.224 * 255, 0.225 * 255), +): + """VGG-style preprocessing, subtracts mean and divides by stddev. + + This preprocessing is very common for ImageNet pre-trained models since VGG, + and to this day the standard for models coming from most PyTorch codes. + + Args: + mean: Tuple of values to be subtracted. Default to widespread VGG values. + std: Tuple of values to be divided by. Default to widespread VGG values. + + Returns: + A function to rescale the values. + """ + mean = tf.constant(mean, tf.float32) + std = tf.constant(std, tf.float32) + + def _vgg_value_range(image): + return (tf.cast(image, tf.float32) - mean) / std + return _vgg_value_range + + +@Registry.register("preprocess_ops.clip_value_range") +@utils.InKeyOutKey() +def get_clip_value_range(): + mean = (0.48145466 * 255, 0.4578275 * 255, 0.40821073 * 255) + std = (0.26862954 * 255, 0.26130258 * 255, 0.27577711 * 255) + + def _clip_value_range(image): + return (tf.cast(image, tf.float32) - mean) / std + return _clip_value_range + + +@Registry.register("preprocess_ops.convert_to_video") +@utils.InKeyOutKey() +def get_convert_to_video(num_frames): + """Converts an image to a video with zero padded frames. + + Args: + num_frames: total number of frames that the video should have. + + Returns: + A function for converting an image to a video. + """ + + def _convert_to_video(image): + return tf.pad( + tf.expand_dims(image, axis=0), + [[0, num_frames - 1], [0, 0], [0, 0], [0, 0]], + ) + + return _convert_to_video diff --git a/big_vision/pp/ops_image_test.py b/big_vision/pp/ops_image_test.py new file mode 100644 index 0000000000000000000000000000000000000000..080fe673cf90f83b405106dd057870ee8e8f76a2 --- /dev/null +++ b/big_vision/pp/ops_image_test.py @@ -0,0 +1,82 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for ops_image.""" + +import copy +import io + +import big_vision.pp.ops_image as pp +import matplotlib.pyplot as plt +import numpy as np +import tensorflow as tf + + +def get_image_data(): + img = tf.random.uniform((640, 480, 3), 0, 255, tf.int32) # Can't ask uint8!? + return {"image": tf.cast(img, tf.uint8)} + + +class PreprocessOpsTest(tf.test.TestCase): + + def tfrun(self, ppfn, data): + # Run once as standalone, as could happen eg in colab. + yield {k: np.array(v) for k, v in ppfn(copy.deepcopy(data)).items()} + + # And then once again as part of tfdata pipeline. + # You'd be surprised how much these two differ! + tfdata = tf.data.Dataset.from_tensors(copy.deepcopy(data)) + for npdata in tfdata.map(ppfn).as_numpy_iterator(): + yield npdata + + def test_resize(self): + for data in self.tfrun(pp.get_resize([120, 80]), get_image_data()): + self.assertEqual(data["image"].shape, (120, 80, 3)) + + def test_resize_small(self): + for data in self.tfrun(pp.get_resize_small(240), get_image_data()): + self.assertEqual(data["image"].shape, (320, 240, 3)) + + def test_resize_long(self): + for data in self.tfrun(pp.get_resize_long(320), get_image_data()): + self.assertEqual(data["image"].shape, (320, 240, 3)) + + def test_inception_crop(self): + for data in self.tfrun(pp.get_inception_crop(), get_image_data()): + self.assertEqual(data["image"].shape[-1], 3) + + def test_decode_jpeg_and_inception_crop(self): + f = io.BytesIO() + plt.imsave(f, get_image_data()["image"].numpy(), format="jpg") + data = {"image": tf.cast(f.getvalue(), tf.string)} + for data in self.tfrun(pp.get_decode_jpeg_and_inception_crop(), data): + self.assertEqual(data["image"].shape[-1], 3) + + def test_random_crop(self): + for data in self.tfrun(pp.get_random_crop([120, 80]), get_image_data()): + self.assertEqual(data["image"].shape, (120, 80, 3)) + + def test_central_crop(self): + for data in self.tfrun(pp.get_central_crop([20, 80]), get_image_data()): + self.assertEqual(data["image"].shape, (20, 80, 3)) + + def test_random_flip_lr(self): + data_orig = get_image_data() + for data in self.tfrun(pp.get_random_flip_lr(), data_orig): + self.assertTrue( + np.all(data_orig["image"].numpy() == data["image"]) or + np.all(data_orig["image"].numpy() == data["image"][:, ::-1])) + +if __name__ == "__main__": + tf.test.main() diff --git a/big_vision/pp/ops_text.py b/big_vision/pp/ops_text.py new file mode 100644 index 0000000000000000000000000000000000000000..5ff8bdc3dae1197c7796ec5416c23052d61bef4e --- /dev/null +++ b/big_vision/pp/ops_text.py @@ -0,0 +1,411 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Text-centric preprocessing ops. + +All preprocessing ops should return a data processing functors. A data +is represented as a dictionary of (TF) tensors. The functors output a modified +dictionary. + +A commonly used key for the tokenized output is "labels". +""" +import functools +import importlib +import string + +from absl import logging +from big_vision.datasets.imagenet import class_names as imagenet_class_names +from big_vision.pp import ops_general +from big_vision.pp import tokenizer as bv_tok +from big_vision.pp import utils +from big_vision.pp.registry import Registry +import tensorflow as tf + +from tensorflow.io import gfile + +import sentencepiece +SPProcessor = sentencepiece.SentencePieceProcessor + +import os +os.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] = 'python' +import sentencepiece.sentencepiece_model_pb2 +del os.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] +SPModelProto = sentencepiece.sentencepiece_model_pb2.ModelProto + + +# TODO: b/lbeyer - softly introduce and move to new tokenizer API. + +KNOWN_TOKENIZERS = { + "mc4": # used in multilingual models (mT5, PaLI), vocab_size=250_000 + "gs://t5-data/vocabs/mc4.250000.100extra/sentencepiece.model", + "cc_all": # vocab_size=32_000 + "gs://t5-data/vocabs/cc_all.32000/sentencepiece.model", + "c4_en": # vocab_size=32_000 + "gs://t5-data/vocabs/cc_en.32000/sentencepiece.model", + "t5": # same as cc_all, but with 100 extra dummy tokens used by T5 models + "gs://t5-data/vocabs/cc_all.32000.100extra/sentencepiece.model", + "mt5": # same as mc4, but with 100 extra dummy tokens used by T5 models + "gs://t5-data/vocabs/mc4.250000.100extra/sentencepiece.model", +} + + +def create_tokenizer(model="c4_en", add_eos=True, add_bos=False): + """Creates a tokenizer which can be used in tfds.""" + logging.info("Creating tokenizer: %s", model) + with gfile.GFile(KNOWN_TOKENIZERS.get(model, model), "rb") as f: + model = f.read() + + # Lazy import of tensorflow_text so it is an optional dependency for + # the users of this file. + import tensorflow_text + return tensorflow_text.SentencepieceTokenizer( + model=model, add_eos=add_eos, add_bos=add_bos + ) + + +def tokenize(input_text, tokenizer, max_len, *, pad_value, force_eos, + multi_text=False): + """Tokenizes string, and adds `pad_value` if longer than `max_len`.""" + + def pad(tokens): + # Truncate/pad to max_len. + if force_eos: + tokens = tf.cond( + tf.shape(tokens)[0] >= max_len, + lambda: tf.concat( + # For too long, cut them off, but do keep the final EOS token. + [tokens[:max_len - 1], tokens[-1:]], axis=0), + lambda: tf.pad( + tokens, [(0, max_len - tf.shape(tokens)[0])], + constant_values=pad_value), + ) + else: + tokens = tokens[:max_len] + tokens = tf.pad( + tokens, [(0, max_len - tf.shape(tokens)[0])], + constant_values=pad_value) + tokens.set_shape([max_len]) + return tokens + + tokens = tokenizer.tokenize(input_text) + + if multi_text: + tokens = tokens.to_tensor(pad_value) # tf.RaggedTensor to tf.Tensor + tokens = tf.reshape(tokens, [-1, tf.shape(tokens)[-1]]) + tokens = tf.map_fn(pad, tokens) # `map_fn` only maps on axis 0 + + final_shape = tf.concat([tf.shape(input_text), [max_len]], axis=0) + return tf.reshape(tokens, final_shape) + else: + return pad(tokens) + + +@Registry.register("preprocess_ops.tokenize") +@utils.InKeyOutKey(indefault=None, outdefault="labels") +def get_pp_tokenize( + max_len, + eos, + model="c4_en", + lower=True, + sample_if_multi=True, + pad_value="", + add_bos=False +): + """Tokenizes a text. + + Let's assume max_len=3 and id("")=1, id("a")=2, then we have + + 1. `eos="none", pad_value=0`: + - "a" -> [2, 0, 0] + - "aa" -> [2, 2, 0] + - "aaa" -> [2, 2, 2] + + 2. `eos="yes", pad_value=0`: + - "a" -> [2, 1, 0] + - "aa" -> [2, 2, 1] + - "aaa" -> [2, 2, 2] + + This is usually used with generative models that need to learn when to + properly predict a "" (when the sentence is finished) and when to + abstain (when the sentence is truncated). + + 3. `eos="sticky", pad_value=0`: + - "a" -> [2, 1, 0] + - "aa" -> [2, 2, 1] + - "aaa" -> [2, 2, 1] + + 4. `eos="sticky", pad_value=1`: + - "a" -> [2, 1, 1] + - "aa" -> [2, 2, 1] + - "aaa" -> [2, 2, 1] + + This is traditionally used with contrastive models that use the last token + for embeddings, similarly to "cls" tokens in BERT-style models. + + Args: + max_len: maximum length of the tokenized text. + eos: Whether to add an "" (end of sentence) token and whether to keep it + when the sequence is longer than `max_len - 1`. See examples above for + details. Valid values: "none", "yes", "sticky". + model: a path to the pretrained sentencepiece model. + lower: lowercase the text before tokenizing. + sample_if_multi: If there's more than one, randomly pick one if this is + True; otherwise pick all texts and keep the input's batch shape in result. + pad_value: which token to pad the sequence with. If a string (for example + `""`), tokenize it and use its first token. Note that there is no + guarantee to have any padding at the end of the sentence, if the sentence + is longer than `max_len`. + add_bos: adds beginning of sentence symbol. + + Returns: + an op that outputs tokenized text. + """ + + if eos not in ("yes", "none", "sticky"): + raise ValueError(f"Invalid value for eos: '{eos}'.") + + tokenizer = create_tokenizer(model, add_eos=eos != "none", add_bos=add_bos) + + if isinstance(pad_value, str): + pad_value = tokenizer.string_to_id(pad_value) + + def _pp_tokenize(txt): + if sample_if_multi and tf.convert_to_tensor(txt).ndim: + # TODO: I wish this code-path could die. + logging.warning("sample_if_multi is deprecated and will be removed." + "Call `choice` (and maybe `setdefault`) instead.") + txt = ops_general.get_choice(key="t")( + ops_general.get_setdefault("t", "")({"t": txt}))["t"] + + if lower: + txt = tf.strings.lower(txt) if sample_if_multi else tf.map_fn( + tf.strings.lower, txt) + + return tokenize( + txt, + tokenizer, + max_len, + pad_value=pad_value, + force_eos=eos == "sticky", + multi_text=not sample_if_multi) + + return _pp_tokenize + + +@Registry.register("preprocess_ops.coco_captions") +def get_coco_captions(outkey="captions"): + """Extracts coco's captions from nested dict.""" + + def _pp_coco_captions(data): + data[outkey] = data["captions"]["text"] + return data + + return _pp_coco_captions + + +@Registry.register("preprocess_ops.clip_i1k_label_names") +@utils.InKeyOutKey(indefault="label", outdefault="labels") +def get_pp_clip_i1k_label_names(): + """Convert i1k label numbers to strings, using CLIP's class names.""" + + def _pp_imagenet_labels(label): + return tf.gather(imagenet_class_names.CLIP_IMAGENET_CLASS_NAMES, label) + + return _pp_imagenet_labels + + +@Registry.register("preprocess_ops.i21k_label_names") +@utils.InKeyOutKey(indefault="label", outdefault="labels") +def get_pp_i21k_label_names(): + """Converts i21k label ids to strings.""" + + def _pp_imagenet_labels(label): + return tf.gather(imagenet_class_names.IMAGENET21k_CLASS_NAMES, label) + + return _pp_imagenet_labels + + +@Registry.register("preprocess_ops.lower") +@utils.InKeyOutKey(indefault="text", outdefault="text") +def get_lower(): + """Lowercases text feature.""" + + def _pp_lower(text): + return tf.strings.lower(text) + + return _pp_lower + + +@Registry.register("preprocess_ops.strfmt") +def get_strfmt(template, outkey="text"): + """Formats a string template with content form the data dict.""" + + def _template(data): + outputs = [] + parts = string.Formatter().parse(template) + for (literal_text, field_name, format_spec, conversion) in parts: + # For now, we keep it simple and don't support fancy format specs. + # But we can add support to that via py_func as soon as we need it. + assert not format_spec and not conversion + outputs.append(tf.constant(literal_text)) + if field_name: + value = data[field_name] + # Convert any non-strings (numbers, vectors) to a string. + if tf.convert_to_tensor(value).dtype != tf.string: + value = tf.strings.format("{}", value, summarize=-1) + outputs.append(value) + data[outkey] = tf.strings.join(outputs) + return data + + return _template + + +def _add_pieces(model_bytes, extra_pieces): + """Adds extra pieces to sentencpiece model specified by `model_bytes`.""" + + model = SPProcessor() + model.LoadFromSerializedProto(model_bytes) + unk_idx = model.PieceToId("") + assert model.IdToPiece(unk_idx) == "", model.IdToPiece(unk_idx) + + model_proto = SPModelProto.FromString(model_bytes) + idx_to_updated_piece = {} + for piece in extra_pieces: + # The SentencePieceModel proto stores whitespaces as the special + # character '▁'. We perform the conversion here. + piece = piece.replace(" ", "▁") + spiece = model_proto.SentencePiece( + piece=piece, + # We set the highest score to force priority on user defined tokens. + score=0.0, + type=model_proto.SentencePiece().Type.USER_DEFINED, + ) + existing_idx = model.PieceToId(piece) + if (existing_idx != unk_idx) ^ (piece == ""): + idx_to_updated_piece[existing_idx] = spiece + logging.info("Updating token at idx %d: %s", existing_idx, spiece.piece) + else: + model_proto.pieces.append(spiece) + + # Replace duplicated pieces with updated ones. + updated_pieces = [ + idx_to_updated_piece.get(i, piece) + for i, piece in enumerate(model_proto.pieces) + ] + del model_proto.pieces[:] + model_proto.pieces.extend(updated_pieces) + + return model_proto.SerializeToString() + + +def _iterable(x): + if isinstance(x, tf.RaggedTensor): + return True + if getattr(x, "ndim", 0) > 1: # np, jnp + return True + if isinstance(x, (list, tuple)) and not isinstance(x[0], (int, float)): + return True + return False + + +@Registry.register("tokenizers.sp") +class SentencepieceTokenizer(bv_tok.Tokenizer): + """Wraps a `tftext.SentencepieceTokenizer`. + + If you plan to use this tokenizer, please familiarize yourself with the test + cases first. This is likely to save you a lot of troubles down the road, trust + me! + """ + + def __init__(self, model, tokensets=()): + with gfile.GFile(KNOWN_TOKENIZERS.get(model, model), "rb") as f: + model_bytes = f.read() + extras = bv_tok.get_extra_tokens(tokensets) + model_bytes = _add_pieces(model_bytes, extras) + self._tok_sp = SPProcessor() + self._tok_sp.LoadFromSerializedProto(model_bytes) + self.extras = {self._tok_sp.PieceToId(x): x for x in extras} + + def to_int(self, text, *, bos=False, eos=False): + def _single(s): + return ( + ([self.bos_token] if bos else []) + + self._tok_sp.EncodeAsIds(s) + + ([self.eos_token] if eos else []) + ) + if isinstance(text, str): + return _single(text) + return type(text)([_single(s) for s in text]) + + def to_str(self, tokens, *, stop_at_eos=True): + def _single(toks): + toks = [int(t) for t in toks] # We really need this for DecodeIds. + if stop_at_eos: + try: # The SentencePiece strips eos, but does not stop at it, so we do. + toks = toks[:toks.index(self.eos_token)] + except ValueError: # No eos token found, nothing to do. + pass + return self._tok_sp.DecodeIds(toks) + if _iterable(tokens): + return [_single(toks) for toks in tokens] + return _single(tokens) + + def _check_known(self, piece): + if (id_ := self._tok_sp.PieceToId(piece)) == self._tok_sp.unk_id(): + logging.error("Piece '%s' is not known (unk=%s)!", piece, id_) + return id_ + + def to_piece(self, idx): + return self._tok_sp.IdToPiece(int(idx)) + + @property + def pad_token(self): + return self._tok_sp.pad_id() + + @property + def eos_token(self): + return self._tok_sp.eos_id() + + @property + def bos_token(self): + return self._tok_sp.bos_id() + + @property + def vocab_size(self): + return self._tok_sp.GetPieceSize() + + # For the _tf_op variants, we need a lot of wrapping boilerplate. + + def to_int_tf_op(self, text, *, bos=False, eos=False): + text = tf.convert_to_tensor(text) + if text.ndim == 0: + def fn(txt): + s = txt.numpy().decode() + return tf.constant(self.to_int(s, bos=bos, eos=eos), tf.int32) + return tf.py_function(fn, [text], tf.int32) + else: + def fn(txt): + strings = [s.decode() for s in txt.numpy().tolist()] + toks = self.to_int(strings, bos=bos, eos=eos) + return tf.ragged.constant(toks) + out_type = tf.RaggedTensorSpec([tf.shape(text)[0], None], tf.int32) + return tf.py_function(fn, [text], Tout=out_type) + + def to_str_tf_op(self, tokens, *, stop_at_eos=True): + def single(t): + fn = functools.partial(self.to_str, stop_at_eos=stop_at_eos) + return tf.numpy_function(fn, [t], tf.string, stateful=False) + if _iterable(tokens): + return tf.map_fn(single, tokens, tf.string) + return single(tokens) diff --git a/big_vision/pp/ops_text_test.py b/big_vision/pp/ops_text_test.py new file mode 100644 index 0000000000000000000000000000000000000000..ccf09d8e35bab0a0e5daec1ead7583d4b02cb82f --- /dev/null +++ b/big_vision/pp/ops_text_test.py @@ -0,0 +1,200 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for ops_text.""" + +import copy + +from absl.testing import parameterized +import big_vision.pp.ops_text as pp +from big_vision.pp.registry import Registry +import numpy as np +import tensorflow as tf + + +class PyToTfWrapper: + """Allows to use `to_{int,str}_tf()` via `to_{int,str}()`.""" + + def __init__(self, tok): + self.tok = tok + self.bos_token = tok.bos_token + self.eos_token = tok.eos_token + self.vocab_size = tok.vocab_size + + def to_int(self, text, *, bos=False, eos=False): + ret = self.tok.to_int_tf_op(text, bos=bos, eos=eos) + if isinstance(ret, tf.RaggedTensor): + return [t.numpy().tolist() for t in ret] + return ret.numpy().tolist() + + def to_str(self, tokens, stop_at_eos=True): + ret = self.tok.to_str_tf_op( + tf.ragged.constant(tokens), + stop_at_eos=stop_at_eos, + ) + if ret.ndim == 0: + return ret.numpy().decode() + return [t.numpy().decode() for t in ret] + + +class PpOpsTest(tf.test.TestCase, parameterized.TestCase): + + def tfrun(self, ppfn, data): + # Run once as standalone, as could happen eg in colab. + yield {k: np.array(v) for k, v in ppfn(copy.deepcopy(data)).items()} + + # And then once again as part of tfdata pipeline. + # You'd be surprised how much these two differ! + tfdata = tf.data.Dataset.from_tensors(copy.deepcopy(data)) + for npdata in tfdata.map(ppfn).as_numpy_iterator(): + yield npdata + + def testtok(self): + # https://github.com/google/sentencepiece/blob/master/python/test/test_model.model + return "test_model.model" # Should we just commit it? It's 200kB + + def test_get_pp_clip_i1k_label_names(self): + op = pp.get_pp_clip_i1k_label_names() + labels = op({"label": tf.constant([0, 1])})["labels"].numpy().tolist() + self.assertAllEqual(labels, ["tench", "goldfish"]) + + def test_get_pp_i21k_label_names(self): + op = pp.get_pp_i21k_label_names() + labels = op({"label": tf.constant([0, 1])})["labels"].numpy().tolist() + self.assertAllEqual(labels, ["organism", "benthos"]) + + @parameterized.parameters((b"Hello world ScAlAr!", b"hello world scalar!"), + (["Decoded Array!"], ["decoded array!"]), + ([b"aA", "bB"], [b"aa", "bb"])) + def test_get_lower(self, inputs, expected_output): + op = pp.get_lower() + out = op({"text": tf.constant(inputs)}) + self.assertAllEqual(out["text"].numpy(), np.array(expected_output)) + + @parameterized.named_parameters( + ("py", False), + ("tf", True), + ) + def test_sentencepiece_tokenizer(self, wrap_tok): + tok = pp.SentencepieceTokenizer(self.testtok()) + if wrap_tok: + tok = PyToTfWrapper(tok) + self.assertEqual(tok.vocab_size, 1000) + bos, eos = tok.bos_token, tok.eos_token + self.assertEqual(bos, 1) + self.assertEqual(eos, 2) + # Note: test model does NOT have a token (similar to e.g. "mistral"). + # `.to_int()` wraps `.to_int_tf_ops` which is thus also tested + self.assertEqual(tok.to_int("blah"), [80, 180, 60]) + self.assertEqual(tok.to_int("blah", bos=True), [bos, 80, 180, 60]) + self.assertEqual(tok.to_int("blah", eos=True), [80, 180, 60, eos]) + self.assertEqual( + tok.to_int("blah", bos=True, eos=True), [bos, 80, 180, 60, eos] + ) + self.assertEqual( + tok.to_int(["blah", "blah blah"]), + [[80, 180, 60], [80, 180, 60, 80, 180, 60]], + ) + # inverse of above + # `.to_str()` wraps `.to_str_tf_ops` which is thus also tested + self.assertEqual(tok.to_str([80, 180, 60]), "blah") + self.assertEqual(tok.to_str([1, 80, 180, 60]), "blah") + self.assertEqual(tok.to_str([80, 180, 60, 2]), "blah") + self.assertEqual( + tok.to_str([[80, 180, 60], [80, 180, 60, 80, 180, 60]]), + ["blah", "blah blah"], + ) + + def test_sentencepiece_tokenizer_tf_op_ndarray_input(self): + tok = pp.SentencepieceTokenizer(self.testtok()) + bos, eos = tok.bos_token, tok.eos_token + arr = np.array([[bos, 80, 180, 60, eos]] * 2, dtype=np.int32) + self.assertEqual(tok.to_str_tf_op(arr).numpy().tolist(), [b"blah"] * 2) + + def test_sentencepiece_tokenizer_tokensets(self): + tok = pp.SentencepieceTokenizer(self.testtok(), tokensets=["loc"]) + self.assertEqual(tok.vocab_size, 2024) + self.assertEqual( + tok.to_int("blah"), [80, 180, 60, 1000, 2023] + ) + + def test_sentencepiece_stop_at_eos(self): + tok = pp.SentencepieceTokenizer(self.testtok()) + self.assertEqual(tok.to_str([80, 180, 60], stop_at_eos=False), "blah") + eos = tok.eos_token + self.assertEqual(tok.to_str([80, eos, 180, 60], stop_at_eos=False), "blah") + self.assertEqual(tok.to_str([80, eos, 180, 60], stop_at_eos=True), "b") + self.assertEqual( + tok.to_str([[80, eos, 180, 60], [80, 180, eos, 60]], stop_at_eos=True), + ["b", "bla"] + ) + + def test_sentencepiece_extra_tokens(self): + tok = pp.SentencepieceTokenizer(self.testtok()) + self.assertEqual(tok.to_str([1, 80, 180, 60, 2], stop_at_eos=False), "blah") + tok = pp.SentencepieceTokenizer( + self.testtok(), tokensets=["sp_extra_tokens"] + ) + self.assertEqual(tok.vocab_size, 1001) # Also added the token. + self.assertEqual( + tok.to_str([1, 80, 180, 60, 2], stop_at_eos=False), " blah" + ) + + def test_strfmt(self): + data = { + "int": tf.constant(42, tf.uint8), + "float": tf.constant(3.14, tf.float32), + "vec": tf.range(3), + "empty_str": tf.constant(""), + "regex_problem1": tf.constant(r"no \replace pattern"), + "regex_problem2": tf.constant(r"yes \1 pattern"), + } + for out in self.tfrun(pp.get_strfmt("Nothing"), data): + self.assertEqual(out["text"], b"Nothing") + for out in self.tfrun(pp.get_strfmt("{int}"), data): + self.assertEqual(out["text"], b"42") + for out in self.tfrun(pp.get_strfmt("A{int}"), data): + self.assertEqual(out["text"], b"A42") + for out in self.tfrun(pp.get_strfmt("{int}A"), data): + self.assertEqual(out["text"], b"42A") + for out in self.tfrun(pp.get_strfmt("{int}{int}"), data): + self.assertEqual(out["text"], b"4242") + for out in self.tfrun(pp.get_strfmt("A{int}A{int}A"), data): + self.assertEqual(out["text"], b"A42A42A") + for out in self.tfrun(pp.get_strfmt("A{float}A"), data): + self.assertEqual(out["text"], b"A3.14A") + for out in self.tfrun(pp.get_strfmt("A{float}A{int}"), data): + self.assertEqual(out["text"], b"A3.14A42") + for out in self.tfrun(pp.get_strfmt("A{vec}A"), data): + self.assertEqual(out["text"], b"A[0 1 2]A") + for out in self.tfrun(pp.get_strfmt("A{empty_str}A"), data): + self.assertEqual(out["text"], b"AA") + for out in self.tfrun(pp.get_strfmt("{empty_str}"), data): + self.assertEqual(out["text"], b"") + for out in self.tfrun(pp.get_strfmt("A{regex_problem1}A"), data): + self.assertEqual(out["text"], br"Ano \replace patternA") + for out in self.tfrun(pp.get_strfmt("A{regex_problem2}A"), data): + self.assertEqual(out["text"], br"Ayes \1 patternA") + + +@Registry.register("tokensets.sp_extra_tokens") +def _get_sp_extra_tokens(): + # For sentencepiece, adding these tokens will make them visible when decoding. + # If a token is not found (e.g. "" is not found in "mistral"), then it is + # added to the vocabulary, increasing the vocab_size accordingly. + return ["", "", ""] + + +if __name__ == "__main__": + tf.test.main() diff --git a/big_vision/pp/registry.py b/big_vision/pp/registry.py new file mode 100644 index 0000000000000000000000000000000000000000..f5c7d996d756be16ba68a5fcb143f23129e1249d --- /dev/null +++ b/big_vision/pp/registry.py @@ -0,0 +1,163 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Global Registry for big_vision pp ops. + +Author: Joan Puigcerver (jpuigcerver@) +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import ast +import contextlib +import functools + + +def parse_name(string_to_parse): + """Parses input to the registry's lookup function. + + Args: + string_to_parse: can be either an arbitrary name or function call + (optionally with positional and keyword arguments). + e.g. "multiclass", "resnet50_v2(filters_factor=8)". + + Returns: + A tuple of input name, argument tuple and a keyword argument dictionary. + Examples: + "multiclass" -> ("multiclass", (), {}) + "resnet50_v2(9, filters_factor=4)" -> + ("resnet50_v2", (9,), {"filters_factor": 4}) + + Author: Joan Puigcerver (jpuigcerver@) + """ + expr = ast.parse(string_to_parse, mode="eval").body # pytype: disable=attribute-error + if not isinstance(expr, (ast.Attribute, ast.Call, ast.Name)): + raise ValueError( + "The given string should be a name or a call, but a {} was parsed from " + "the string {!r}".format(type(expr), string_to_parse)) + + # Notes: + # name="some_name" -> type(expr) = ast.Name + # name="module.some_name" -> type(expr) = ast.Attribute + # name="some_name()" -> type(expr) = ast.Call + # name="module.some_name()" -> type(expr) = ast.Call + + if isinstance(expr, ast.Name): + return string_to_parse, (), {} + elif isinstance(expr, ast.Attribute): + return string_to_parse, (), {} + + def _get_func_name(expr): + if isinstance(expr, ast.Attribute): + return _get_func_name(expr.value) + "." + expr.attr + elif isinstance(expr, ast.Name): + return expr.id + else: + raise ValueError( + "Type {!r} is not supported in a function name, the string to parse " + "was {!r}".format(type(expr), string_to_parse)) + + def _get_func_args_and_kwargs(call): + args = tuple([ast.literal_eval(arg) for arg in call.args]) + kwargs = { + kwarg.arg: ast.literal_eval(kwarg.value) for kwarg in call.keywords + } + return args, kwargs + + func_name = _get_func_name(expr.func) + func_args, func_kwargs = _get_func_args_and_kwargs(expr) + + return func_name, func_args, func_kwargs + + +class Registry(object): + """Implements global Registry. + + Authors: Joan Puigcerver (jpuigcerver@), Alexander Kolesnikov (akolesnikov@) + """ + + _GLOBAL_REGISTRY = {} + + @staticmethod + def global_registry(): + return Registry._GLOBAL_REGISTRY + + @staticmethod + def register(name, replace=False): + """Creates a function that registers its input.""" + + def _register(item): + if name in Registry.global_registry() and not replace: + raise KeyError("The name {!r} was already registered.".format(name)) + + Registry.global_registry()[name] = item + return item + + return _register + + @staticmethod + def lookup(lookup_string, kwargs_extra=None): + """Lookup a name in the registry.""" + + try: + name, args, kwargs = parse_name(lookup_string) + except ValueError as e: + raise ValueError(f"Error parsing:\n{lookup_string}") from e + if kwargs_extra: + kwargs.update(kwargs_extra) + item = Registry.global_registry()[name] + return functools.partial(item, *args, **kwargs) + + @staticmethod + def knows(lookup_string): + try: + name, _, _ = parse_name(lookup_string) + except ValueError as e: + raise ValueError(f"Error parsing:\n{lookup_string}") from e + return name in Registry.global_registry() + + +@contextlib.contextmanager +def temporary_ops(**kw): + """Registers specified pp ops for use in a `with` block. + + Example use: + + with pp_registry.remporary_ops( + pow=lambda alpha: lambda d: {k: v**alpha for k, v in d.items()}): + pp = pp_builder.get_preprocess_fn("pow(alpha=2.0)|pow(alpha=0.5)") + features = pp(features) + + Args: + **kw: Names are preprocess string function names to be used to specify the + preprocess function. Values are functions that can be called with params + (e.g. the `alpha` param in above example) and return functions to be used + to transform features. + + Yields: + A context manager to be used in a `with` statement. + """ + reg = Registry.global_registry() + kw = {f"preprocess_ops.{k}": v for k, v in kw.items()} + for k in kw: + assert k not in reg + for k, v in kw.items(): + reg[k] = v + try: + yield + finally: + for k in kw: + del reg[k] diff --git a/big_vision/pp/registry_test.py b/big_vision/pp/registry_test.py new file mode 100644 index 0000000000000000000000000000000000000000..2296e7de91ce0495bade59e8e65417384507e58e --- /dev/null +++ b/big_vision/pp/registry_test.py @@ -0,0 +1,128 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for registry.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from unittest import mock + +from absl.testing import absltest +from big_vision.pp import registry + + +class RegistryTest(absltest.TestCase): + + def setUp(self): + super(RegistryTest, self).setUp() + # Mock global registry in each test to keep them isolated and allow for + # concurrent tests. + self.addCleanup(mock.patch.stopall) + self.global_registry = dict() + self.mocked_method = mock.patch.object( + registry.Registry, "global_registry", + return_value=self.global_registry).start() + + def test_parse_name(self): + name, args, kwargs = registry.parse_name("f") + self.assertEqual(name, "f") + self.assertEqual(args, ()) + self.assertEqual(kwargs, {}) + + name, args, kwargs = registry.parse_name("f()") + self.assertEqual(name, "f") + self.assertEqual(args, ()) + self.assertEqual(kwargs, {}) + + name, args, kwargs = registry.parse_name("func(a=0,b=1,c='s')") + self.assertEqual(name, "func") + self.assertEqual(args, ()) + self.assertEqual(kwargs, {"a": 0, "b": 1, "c": "s"}) + + name, args, kwargs = registry.parse_name("func(1,'foo',3)") + self.assertEqual(name, "func") + self.assertEqual(args, (1, "foo", 3)) + self.assertEqual(kwargs, {}) + + name, args, kwargs = registry.parse_name("func(1,'2',a=3,foo='bar')") + self.assertEqual(name, "func") + self.assertEqual(args, (1, "2")) + self.assertEqual(kwargs, {"a": 3, "foo": "bar"}) + + name, args, kwargs = registry.parse_name("foo.bar.func(a=0,b=(1),c='s')") + self.assertEqual(name, "foo.bar.func") + self.assertEqual(kwargs, dict(a=0, b=1, c="s")) + + with self.assertRaises(SyntaxError): + registry.parse_name("func(0") + with self.assertRaises(SyntaxError): + registry.parse_name("func(a=0,,b=0)") + with self.assertRaises(SyntaxError): + registry.parse_name("func(a=0,b==1,c='s')") + with self.assertRaises(ValueError): + registry.parse_name("func(a=0,b=undefined_name,c='s')") + + def test_register(self): + # pylint: disable=unused-variable + @registry.Registry.register("func1") + def func1(): + pass + + self.assertLen(registry.Registry.global_registry(), 1) + + def test_lookup_function(self): + + @registry.Registry.register("func1") + def func1(arg1, arg2, arg3): # pylint: disable=unused-variable + return arg1, arg2, arg3 + + self.assertTrue(callable(registry.Registry.lookup("func1"))) + self.assertEqual(registry.Registry.lookup("func1")(1, 2, 3), (1, 2, 3)) + self.assertEqual( + registry.Registry.lookup("func1(arg3=9)")(1, 2), (1, 2, 9)) + self.assertEqual( + registry.Registry.lookup("func1(arg2=9,arg1=99)")(arg3=3), (99, 9, 3)) + self.assertEqual( + registry.Registry.lookup("func1(arg2=9,arg1=99)")(arg1=1, arg3=3), + (1, 9, 3)) + + self.assertEqual( + registry.Registry.lookup("func1(1)")(1, 2), (1, 1, 2)) + self.assertEqual( + registry.Registry.lookup("func1(1)")(arg3=3, arg2=2), (1, 2, 3)) + self.assertEqual( + registry.Registry.lookup("func1(1, 2)")(3), (1, 2, 3)) + self.assertEqual( + registry.Registry.lookup("func1(1, 2)")(arg3=3), (1, 2, 3)) + self.assertEqual( + registry.Registry.lookup("func1(1, arg2=2)")(arg3=3), (1, 2, 3)) + self.assertEqual( + registry.Registry.lookup("func1(1, arg3=2)")(arg2=3), (1, 3, 2)) + self.assertEqual( + registry.Registry.lookup("func1(1, arg3=2)")(3), (1, 3, 2)) + + with self.assertRaises(TypeError): + registry.Registry.lookup("func1(1, arg2=2)")(3) + with self.assertRaises(TypeError): + registry.Registry.lookup("func1(1, arg3=3)")(arg3=3) + with self.assertRaises(TypeError): + registry.Registry.lookup("func1(1, arg3=3)")(arg1=3) + with self.assertRaises(SyntaxError): + registry.Registry.lookup("func1(arg1=1, 3)")(arg2=3) + + +if __name__ == "__main__": + absltest.main() diff --git a/big_vision/pp/tokenizer.py b/big_vision/pp/tokenizer.py new file mode 100644 index 0000000000000000000000000000000000000000..681494e436aacd48d5d720e07d2df1a80c704eb2 --- /dev/null +++ b/big_vision/pp/tokenizer.py @@ -0,0 +1,103 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""The tokenizer API for big_vision, and central registration place.""" +import functools +import importlib +from typing import Protocol + +from absl import logging +from big_vision.pp import registry +import big_vision.utils as u +import numpy as np + + +class Tokenizer(Protocol): + """Just to unify on the API as we now have mmany different ones.""" + + def to_int(self, text, *, bos=False, eos=False): + """Tokenizes `text` into a list of integer tokens. + + Args: + text: can be a single string, or a list of strings. + bos: Whether a beginning-of-sentence token should be prepended. + eos: Whether an end-of-sentence token should be appended. + + Returns: + List or list-of-list of tokens. + """ + + def to_int_tf_op(self, text, *, bos=False, eos=False): + """Same as `to_int()`, but as TF ops to be used in pp.""" + + def to_str(self, tokens, *, stop_at_eos=True): + """Inverse of `to_int()`. + + Args: + tokens: list of tokens, or list of lists of tokens. + stop_at_eos: remove everything that may come after the first EOS. + + Returns: + A string (if `tokens` is a list of tokens), or a list of strings. + Note that most tokenizers strip select few control tokens like + eos/bos/pad/unk from the output string. + """ + + def to_str_tf_op(self, tokens, *, stop_at_eos=True): + """Same as `to_str()`, but as TF ops to be used in pp.""" + + @property + def pad_token(self): + """Token id of padding token.""" + + @property + def eos_token(self): + """Token id of end-of-sentence token.""" + + @property + def bos_token(self): + """Token id of beginning-of-sentence token.""" + + @property + def vocab_size(self): + """Returns the size of the vocabulary.""" + + +@functools.cache +def get_tokenizer(name): + with u.chrono.log_timing(f"z/secs/tokenizer/{name}"): + if not registry.Registry.knows(f"tokenizers.{name}"): + raw_name, *_ = registry.parse_name(name) + logging.info("Tokenizer %s not registered, " + "trying import big_vision.pp.%s", name, raw_name) + importlib.import_module(f"big_vision.pp.{raw_name}") + + return registry.Registry.lookup(f"tokenizers.{name}")() + + +def get_extra_tokens(tokensets): + extra_tokens = [] + for tokenset in tokensets: + extra_tokens.extend(registry.Registry.lookup(f"tokensets.{tokenset}")()) + return list(np.unique(extra_tokens)) # Preserves order. Dups make no sense. + + +@registry.Registry.register("tokensets.loc") +def _get_loc1024(n=1024): + return [f"" for i in range(n)] + + +@registry.Registry.register("tokensets.seg") +def _get_seg(n=128): + return [f"" for i in range(n)] diff --git a/big_vision/pp/utils.py b/big_vision/pp/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..3ee834560246549c71f0a6d9785694fd1507ca9b --- /dev/null +++ b/big_vision/pp/utils.py @@ -0,0 +1,53 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Preprocessing utils.""" + +from collections import abc + + +def maybe_repeat(arg, n_reps): + if not isinstance(arg, abc.Sequence) or isinstance(arg, str): + arg = (arg,) * n_reps + return arg + + +class InKeyOutKey(object): + """Decorator for preprocessing ops, which adds `inkey` and `outkey` arguments. + + Note: Only supports single-input single-output ops. + """ + + def __init__(self, indefault="image", outdefault="image", with_data=False): + self.indefault = indefault + self.outdefault = outdefault + self.with_data = with_data + + def __call__(self, orig_get_pp_fn): + + def get_ikok_pp_fn(*args, key=None, + inkey=self.indefault, outkey=self.outdefault, **kw): + + orig_pp_fn = orig_get_pp_fn(*args, **kw) + def _ikok_pp_fn(data): + # Optionally allow the function to get the full data dict as aux input. + if self.with_data: + data[key or outkey] = orig_pp_fn(data[key or inkey], data=data) + else: + data[key or outkey] = orig_pp_fn(data[key or inkey]) + return data + + return _ikok_pp_fn + + return get_ikok_pp_fn diff --git a/big_vision/pp/utils_test.py b/big_vision/pp/utils_test.py new file mode 100644 index 0000000000000000000000000000000000000000..beec18cef62a9638ed143229d7aedc5e218a70b6 --- /dev/null +++ b/big_vision/pp/utils_test.py @@ -0,0 +1,53 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for preprocessing utils.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from big_vision.pp import utils +import tensorflow.compat.v1 as tf + + +class UtilsTest(tf.test.TestCase): + + def test_maybe_repeat(self): + self.assertEqual((1, 1, 1), utils.maybe_repeat(1, 3)) + self.assertEqual((1, 2), utils.maybe_repeat((1, 2), 2)) + self.assertEqual([1, 2], utils.maybe_repeat([1, 2], 2)) + + def test_inkeyoutkey(self): + @utils.InKeyOutKey() + def get_pp_fn(shift, scale=0): + def _pp_fn(x): + return scale * x + shift + return _pp_fn + + data = {"k_in": 2, "other": 3} + ppfn = get_pp_fn(1, 2, inkey="k_in", outkey="k_out") # pylint: disable=unexpected-keyword-arg + self.assertEqual({"k_in": 2, "k_out": 5, "other": 3}, ppfn(data)) + + data = {"k": 6, "other": 3} + ppfn = get_pp_fn(1, inkey="k", outkey="k") # pylint: disable=unexpected-keyword-arg + self.assertEqual({"k": 1, "other": 3}, ppfn(data)) + + data = {"other": 6, "image": 3} + ppfn = get_pp_fn(5, 2) + self.assertEqual({"other": 6, "image": 11}, ppfn(data)) + + +if __name__ == "__main__": + tf.test.main() diff --git a/big_vision/requirements.txt b/big_vision/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..9ae71db5ac26e2746864c37959dfd28cb9fe70bf --- /dev/null +++ b/big_vision/requirements.txt @@ -0,0 +1,19 @@ +numpy>=1.26 +absl-py +git+https://github.com/google/CommonLoopUtils +distrax +editdistance +einops +flax +optax +git+https://github.com/google/flaxformer +git+https://github.com/akolesnikoff/panopticapi.git@mute +overrides +protobuf +sentencepiece +tensorflow-cpu +tfds-nightly +tensorflow-text +tensorflow-gan +psutil +pycocoevalcap diff --git a/big_vision/run_tpu.sh b/big_vision/run_tpu.sh new file mode 100644 index 0000000000000000000000000000000000000000..3c3da2e44e7d2829a00188f5e6177ea9d6e3ba4d --- /dev/null +++ b/big_vision/run_tpu.sh @@ -0,0 +1,35 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#!/bin/bash + +if [ ! -d "bv_venv" ] +then + sudo apt-get update + sudo apt install -y python3-venv + python3 -m venv bv_venv + . bv_venv/bin/activate + + pip install -U pip # Yes, really needed. + # NOTE: doesn't work when in requirements.txt -> cyclic dep + pip install "jax[tpu]>=0.4.25" -f https://storage.googleapis.com/jax-releases/libtpu_releases.html + pip install -r big_vision/requirements.txt +else + . bv_venv/bin/activate +fi + +if [ $# -ne 0 ] +then + env TFDS_DATA_DIR=$TFDS_DATA_DIR BV_JAX_INIT=1 python3 -m "$@" +fi diff --git a/big_vision/sharding.py b/big_vision/sharding.py new file mode 100644 index 0000000000000000000000000000000000000000..be76cb3a1f6b8bc0e494515bac2a54528a53494c --- /dev/null +++ b/big_vision/sharding.py @@ -0,0 +1,197 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Big vision sharding utilities.""" + +from absl import logging + +from big_vision.pp.registry import Registry +import big_vision.utils as u +import flax.linen as nn +import jax +import numpy as np + + +NamedSharding = jax.sharding.NamedSharding +P = jax.sharding.PartitionSpec + + +def _replicated(mesh): + return NamedSharding(mesh, P()) + + +def _shard_along_axis(mesh, i, axis_name): + return NamedSharding(mesh, P(*((None,) * i + (axis_name,)))) + + +def infer_sharding(params, strategy, mesh): + """Infers `params` sharding based on strategy. + + Args: + params: a pytree of arrays. + strategy: sharding strategy. + mesh: jax device mesh. + + Returns: + A pytree with shardings, that has the same shape as the `tree` argument. + """ + patterns, tactics = zip(*strategy) + + x_with_names, tree_def = u.tree_flatten_with_names(params) + names = tree_def.unflatten(list(zip(*x_with_names))[0]) + + # Follows big_vision conventions: each variable is matched at most once, + # early patterns get matching priority. + mask_trees = u.make_mask_trees(params, patterns) + + specs = jax.tree.map(lambda x: (None,) * x.ndim, params) + + for mask_tree, tactic in zip(mask_trees, tactics): + for op_str in tactic.split("|"): + op = Registry.lookup(f"shardings.{op_str}")() + specs = jax.tree.map( + lambda x, n, match, spec, op=op: op(spec, mesh, n, x) + if match else spec, + params, names, mask_tree, specs, + is_leaf=lambda v: isinstance(v, nn.Partitioned)) + + # Two-level tree_map to prevent it from doing traversal inside the spec. + specs = jax.tree.map(lambda _, spec: P(*spec), nn.unbox(params), specs) + return jax.tree.map(lambda spec: NamedSharding(mesh, spec), specs) + + +# Sharding rules +# +# Each rule needs to be added to the registry, can accept custom args, and +# returns a function that updates the current spec. The arguments are: +# 1. Variable name +# 2. Variable itself (or placeholder with .shape and .dtype properties) +# 3. The current sharing spec. + + +@Registry.register("shardings.replicate") +def replicate(): + """Full replication sharding rule. + + Note full replication is deafult, so this can be skipped and useful to + explicitly state in the config that certrain parameters are replicated. + TODO: can be generalized to support replication over a sub-mesh. + + Returns: + A function that updates the sharding spec. + """ + def _update_spec(cur_spec, mesh, name, x): + del x, mesh + if not all(axis is None for axis in cur_spec): + raise ValueError(f"Inconsistent sharding instructions: " + f"parameter {name} has spec {cur_spec}, " + f"so it can't be fully replicated.") + return cur_spec + return _update_spec + + +@Registry.register("shardings.fsdp") +def fsdp(axis, min_size_to_shard_mb=4): + """FSDP sharding rule. + + Shards the largest dimension that is not sharded already and is divisible + by the total device count. + + Args: + axis: mesh axis name for FSDP, or a collection of names. + min_size_to_shard_mb: minimal tensor size to bother with sharding. + + Returns: + A function that updates the sharding spec. + """ + axis = axis if isinstance(axis, str) else tuple(axis) + axis_tuple = axis if isinstance(axis, tuple) else (axis,) + def _update_spec(cur_spec, mesh, name, x): + shape = x.shape + axis_size = np.prod([mesh.shape[a] for a in axis_tuple]) + + if np.prod(shape) * x.dtype.itemsize <= min_size_to_shard_mb * (2 ** 20): + return cur_spec + + # Partition along largest axis that is divisible and not taken. + idx = np.argsort(shape)[::-1] + for i in idx: + if shape[i] % axis_size == 0: + if cur_spec[i] is None: + return cur_spec[:i] + (axis,) + cur_spec[i+1:] + + logging.info("Failed to apply `fsdp` rule to the parameter %s:%s, as all " + "its dimensions are not divisible by the requested axis: " + "%s:%i, or already occupied by other sharding rules: %s", + name, shape, axis, axis_size, cur_spec) + return cur_spec + return _update_spec + + +@Registry.register("shardings.logical_partitioning") +def logical_partitioning(): + """Manual sharding based on Flax's logical partitioning annotations. + + Uses logical sharding annotations added in model code with + `nn.with_logical_partitioning`. Respects logical to mesh name mapping rules + (typically defined in the dynamic context using + `with nn.logical_axis_rules(rules): ...`). + + Returns: + A function that outputs the sharding spec of `nn.LogicallyPartitioned` boxed + specs. + """ + def _update_spec(cur_spec, mesh, name, x): + del x, name, mesh + if isinstance(cur_spec, nn.LogicallyPartitioned): + return nn.logical_to_mesh_axes(cur_spec.names) + return cur_spec + return _update_spec + + +@Registry.register("shardings.shard_dim") +def shard_dim(axis, dim, ignore_ndim_error=False): + """Shards the given dimension along the given axis. + + Args: + axis: mesh axis name for sharding. + dim: dimension to shard (can be negative). + ignore_ndim_error: if True, a warning error is logged instead of raising an + exception when the given dimension is not compatible with the number of + dimensions of the array. + + Returns: + A function that updates the sharding spec. + """ + def _update_spec(cur_spec, mesh, name, x): + del mesh, x + if np.abs(dim) >= len(cur_spec): + msg = f"Cannot shard_dim({axis}, {dim}): name={name} cur_spec={cur_spec}" + if ignore_ndim_error: + logging.warning(msg) + return cur_spec + else: + raise ValueError(msg) + pos_dim = dim + if pos_dim < 0: + pos_dim += len(cur_spec) + if cur_spec[pos_dim] is not None: + raise ValueError( + f"Already sharded: shard_dim({axis}, {dim}):" + f" name={name} cur_spec={cur_spec}" + ) + new_spec = cur_spec[:pos_dim] + (axis,) + cur_spec[pos_dim + 1 :] + return new_spec + + return _update_spec diff --git a/big_vision/tools/download_tfds_datasets.py b/big_vision/tools/download_tfds_datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..b64c33d51a7cb8df063d15e828e30b07007ff6b0 --- /dev/null +++ b/big_vision/tools/download_tfds_datasets.py @@ -0,0 +1,44 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Download and prepare TFDS datasets for the big_vision codebase. + +This python script covers cifar10, cifar100, oxford_iiit_pet +and oxford_flowers10. + +If you want to integrate other public or custom datasets, please follow: +https://www.tensorflow.org/datasets/catalog/overview +""" + +from absl import app +import tensorflow_datasets as tfds + + +def main(argv): + if len(argv) > 1 and "download_tfds_datasets.py" in argv[0]: + datasets = argv[1:] + else: + datasets = [ + "cifar10", + "cifar100", + "oxford_iiit_pet", + "oxford_flowers102", + "imagenet_v2", + ] + for d in datasets: + tfds.load(name=d, download=True) + + +if __name__ == "__main__": + app.run(main) diff --git a/big_vision/tools/eval_only.py b/big_vision/tools/eval_only.py new file mode 100644 index 0000000000000000000000000000000000000000..abdde4a6c0aa656a2e8ec76ce645982a2a6723b3 --- /dev/null +++ b/big_vision/tools/eval_only.py @@ -0,0 +1,146 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Script that loads a model and only runs evaluators.""" + +from functools import partial +import importlib + +import os + +from absl import app +from absl import flags +from absl import logging +import big_vision.evaluators.common as eval_common +import big_vision.utils as u +from clu import parameter_overview +import flax +import flax.jax_utils as flax_utils +import jax +import jax.numpy as jnp +from ml_collections import config_flags +from tensorflow.io import gfile + + +config_flags.DEFINE_config_file( + "config", None, "Training configuration.", lock_config=True) + +flags.DEFINE_string("workdir", default=None, help="Work unit directory.") +flags.DEFINE_boolean("cleanup", default=False, + help="Delete workdir (only) after successful completion.") + +# Adds jax flags to the program. +jax.config.parse_flags_with_absl() + + +def main(argv): + del argv + + config = flags.FLAGS.config + workdir = flags.FLAGS.workdir + logging.info("Workdir: %s", workdir) + + # Here we register preprocessing ops from modules listed on `pp_modules`. + for m in config.get("pp_modules", ["ops_general", "ops_image"]): + importlib.import_module(f"big_vision.pp.{m}") + + # These functions do more stuff internally, for OSS release we mock them by + # trivial alternatives in order to minize disruptions in the code. + xid, wid = -1, -1 + def write_note(note): + if jax.process_index() == 0: + logging.info("NOTE: %s", note) + + mw = u.BigVisionMetricWriter(xid, wid, workdir, config) + u.chrono.inform(measure=mw.measure, write_note=write_note) + + write_note(f"Initializing {config.model_name} model...") + assert config.get("model.reinit") is None, ( + "I don't think you want any part of the model to be re-initialized.") + model_mod = importlib.import_module(f"big_vision.models.{config.model_name}") + model_kw = dict(config.get("model", {})) + if "num_classes" in config: # Make it work for regular + image_text. + model_kw["num_classes"] = config.num_classes + model = model_mod.Model(**model_kw) + + # We want all parameters to be created in host RAM, not on any device, they'll + # be sent there later as needed, otherwise we already encountered two + # situations where we allocate them twice. + @partial(jax.jit, backend="cpu") + def init(rng): + input_shapes = config.get("init_shapes", [(1, 224, 224, 3)]) + input_types = config.get("init_types", [jnp.float32] * len(input_shapes)) + dummy_inputs = [jnp.zeros(s, t) for s, t in zip(input_shapes, input_types)] + things = flax.core.unfreeze(model.init(rng, *dummy_inputs)) + return things.get("params", {}) + + with u.chrono.log_timing("z/secs/init"): + params_cpu = init(jax.random.PRNGKey(42)) + if jax.process_index() == 0: + parameter_overview.log_parameter_overview(params_cpu, msg="init params") + num_params = sum(p.size for p in jax.tree.leaves(params_cpu)) + mw.measure("num_params", num_params) + + # The use-case for not loading an init is testing and debugging. + if config.get("model_init"): + write_note(f"Initialize model from {config.model_init}...") + params_cpu = model_mod.load( + params_cpu, config.model_init, config.get("model"), + **config.get("model_load", {})) + if jax.process_index() == 0: + parameter_overview.log_parameter_overview(params_cpu, msg="loaded params") + + write_note("Replicating...") + params_repl = flax_utils.replicate(params_cpu) + + def predict_fn(params, *a, **kw): + return model.apply({"params": params}, *a, **kw) + + evaluators = eval_common.from_config( + config, {"predict": predict_fn, "model": model}, + lambda s: write_note(f"Initializing evaluator: {s}..."), + lambda key, cfg: 1, # Ignore log_steps, always run. + ) + + # Allow running for multiple steps can be useful for couple cases: + # 1. non-deterministic evaluators + # 2. warmup when timing evaluators (eg compile cache etc). + for s in range(config.get("eval_repeats", 1)): + mw.step_start(s) + for (name, evaluator, _, prefix) in evaluators: + write_note(f"{name} evaluation step {s}...") + with u.profile(name, noop=name in config.get("no_profile", [])): + with u.chrono.log_timing(f"z/secs/eval/{name}"): + for key, value in evaluator.run(params_repl): + mw.measure(f"{prefix}{key}", value) + u.sync() # sync barrier to get correct measurements + u.chrono.flush_timings() + mw.step_end() + + write_note("Done!") + mw.close() + + # Make sure all hosts stay up until the end of main. + u.sync() + + if workdir and flags.FLAGS.cleanup and jax.process_index() == 0: + gfile.rmtree(workdir) + try: # Only need this on the last work-unit, if already empty. + gfile.remove(os.path.join(workdir, "..")) + except tf.errors.OpError: + pass + + +if __name__ == "__main__": + app.run(main) diff --git a/big_vision/tools/lit_demo/README.md b/big_vision/tools/lit_demo/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/tools/lit_demo/build.js b/big_vision/tools/lit_demo/build.js new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/tools/lit_demo/package.json b/big_vision/tools/lit_demo/package.json new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/big_vision/train.py b/big_vision/train.py new file mode 100644 index 0000000000000000000000000000000000000000..51f49cc75c59f27e6393c73b400420e2c89da9e0 --- /dev/null +++ b/big_vision/train.py @@ -0,0 +1,517 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training loop example. + +This is a basic variant of a training loop, good starting point for fancy ones. +""" +# pylint: disable=consider-using-from-import +# pylint: disable=logging-fstring-interpolation + +import functools +import importlib +import multiprocessing.pool +import os + +from absl import app +from absl import flags +from absl import logging +import big_vision.evaluators.common as eval_common +import big_vision.input_pipeline as input_pipeline +import big_vision.optax as bv_optax +import big_vision.sharding as bv_sharding +import big_vision.utils as u +from clu import parameter_overview +import flax.linen as nn +import jax +from jax.experimental import multihost_utils +from jax.experimental.array_serialization import serialization as array_serial +from jax.experimental.shard_map import shard_map +import jax.numpy as jnp +from ml_collections import config_flags +import numpy as np +import optax +import tensorflow as tf + +from tensorflow.io import gfile + + +config_flags.DEFINE_config_file( + "config", None, "Training configuration.", lock_config=True) + +flags.DEFINE_string("workdir", default=None, help="Work unit directory.") +flags.DEFINE_boolean("cleanup", default=False, + help="Delete workdir (only) after successful completion.") + +# Adds jax flags to the program. +jax.config.parse_flags_with_absl() +# Transfer guard will fail the program whenever that data between a host and +# a device is transferred implicitly. This often catches subtle bugs that +# cause slowdowns and memory fragmentation. Explicit transfers are done +# with jax.device_put and jax.device_get. +jax.config.update("jax_transfer_guard", "disallow") +# Fixes design flaw in jax.random that may cause unnecessary d2d comms. +jax.config.update("jax_threefry_partitionable", True) + + +NamedSharding = jax.sharding.NamedSharding +P = jax.sharding.PartitionSpec + + +def main(argv): + del argv + + # This is needed on multihost systems, but crashes on non-TPU single-host. + if os.environ.get("BV_JAX_INIT"): + jax.distributed.initialize() + + # Make sure TF does not touch GPUs. + tf.config.set_visible_devices([], "GPU") + + config = flags.FLAGS.config + +################################################################################ +# # +# Set up logging # +# # +################################################################################ + + # Set up work directory and print welcome message. + workdir = flags.FLAGS.workdir + logging.info( + f"\u001b[33mHello from process {jax.process_index()} holding " + f"{jax.local_device_count()}/{jax.device_count()} devices and " + f"writing to workdir {workdir}.\u001b[0m") + logging.info(f"The config:\n{config}") + + save_ckpt_path = None + if workdir: # Always create if requested, even if we may not write into it. + gfile.makedirs(workdir) + save_ckpt_path = os.path.join(workdir, "checkpoint.bv") + + # The pool is used to perform misc operations such as logging in async way. + pool = multiprocessing.pool.ThreadPool(1) + + # Here we register preprocessing ops from modules listed on `pp_modules`. + for m in config.get("pp_modules", ["ops_general", "ops_image", "ops_text"]): + importlib.import_module(f"big_vision.pp.{m}") + + # Setup up logging and experiment manager. + xid, wid = -1, -1 + fillin = lambda s: s + def info(s, *a): + logging.info("\u001b[33mNOTE\u001b[0m: " + s, *a) + def write_note(note): + if jax.process_index() == 0: + info("%s", note) + + mw = u.BigVisionMetricWriter(xid, wid, workdir, config) + + # Allow for things like timings as early as possible! + u.chrono.inform(measure=mw.measure, write_note=write_note) + +################################################################################ +# # +# Set up Mesh # +# # +################################################################################ + + # We rely on jax mesh_utils to organize devices, such that communication + # speed is the fastest for the last dimension, second fastest for the + # penultimate dimension, etc. + config_mesh = config.get("mesh", [("data", jax.device_count())]) + + # Sharding rules with default + sharding_rules = config.get("sharding_rules", [("act_batch", "data")]) + + write_note("Creating device mesh...") + mesh = u.create_device_mesh( + config_mesh, + allow_split_physical_axes=config.get("mesh_allow_split_physical_axes", + False)) + repl_sharding = jax.sharding.NamedSharding(mesh, P()) + + # Consistent device order is important to ensure correctness of various train + # loop components, such as input pipeline, update step, evaluators. The + # order presribed by the `devices_flat` variable should be used throughout + # the program. + devices_flat = mesh.devices.flatten() + +################################################################################ +# # +# Input Pipeline # +# # +################################################################################ + + write_note("Initializing train dataset...") + batch_size = config.input.batch_size + if batch_size % jax.device_count() != 0: + raise ValueError(f"Batch size ({batch_size}) must " + f"be divisible by device number ({jax.device_count()})") + info("Global batch size %d on %d hosts results in %d local batch size. With " + "%d dev per host (%d dev total), that's a %d per-device batch size.", + batch_size, jax.process_count(), batch_size // jax.process_count(), + jax.local_device_count(), jax.device_count(), + batch_size // jax.device_count()) + + train_ds, ntrain_img = input_pipeline.training(config.input) + + total_steps = u.steps("total", config, ntrain_img, batch_size) + def get_steps(name, default=ValueError, cfg=config): + return u.steps(name, cfg, ntrain_img, batch_size, total_steps, default) + + u.chrono.inform(total_steps=total_steps, global_bs=batch_size, + steps_per_epoch=ntrain_img / batch_size) + + info("Running for %d steps, that means %f epochs", + total_steps, total_steps * batch_size / ntrain_img) + + # Start input pipeline as early as possible. + n_prefetch = config.get("prefetch_to_device", 1) + train_iter = input_pipeline.start_global(train_ds, devices_flat, n_prefetch) + +################################################################################ +# # +# Create Model & Optimizer # +# # +################################################################################ + + write_note("Creating model...") + model_mod = importlib.import_module(f"big_vision.models.{config.model_name}") + model = model_mod.Model( + num_classes=config.num_classes, **config.get("model", {})) + + def init(rng): + batch = jax.tree.map(lambda x: jnp.zeros(x.shape, x.dtype.as_numpy_dtype), + train_ds.element_spec) + params = model.init(rng, batch["image"])["params"] + + # Set bias in the head to a low value, such that loss is small initially. + if "init_head_bias" in config: + params["head"]["bias"] = jnp.full_like(params["head"]["bias"], + config["init_head_bias"]) + + return params + + # This seed makes the Jax part of things (like model init) deterministic. + # However, full training still won't be deterministic, for example due to the + # tf.data pipeline not being deterministic even if we would set TF seed. + # See (internal link) for a fun read on what it takes. + rng = jax.random.PRNGKey(u.put_cpu(config.get("seed", 0))) + + write_note("Inferring parameter shapes...") + rng, rng_init = jax.random.split(rng) + params_shape = jax.eval_shape(init, rng_init) + + write_note("Inferring optimizer state shapes...") + tx, sched_fns = bv_optax.make(config, nn.unbox(params_shape), sched_kw=dict( + total_steps=total_steps, batch_size=batch_size, data_size=ntrain_img)) + opt_shape = jax.eval_shape(tx.init, params_shape) + # We jit this, such that the arrays are created on the CPU, not device[0]. + sched_fns_cpu = [u.jit_cpu()(sched_fn) for sched_fn in sched_fns] + + if jax.process_index() == 0: + num_params = sum(np.prod(p.shape) for p in jax.tree.leaves(params_shape)) + mw.measure("num_params", num_params) + +################################################################################ +# # +# Shard & Transfer # +# # +################################################################################ + + write_note("Inferring shardings...") + train_state_shape = {"params": params_shape, "opt": opt_shape} + + strategy = config.get("sharding_strategy", [(".*", "replicate")]) + with nn.logical_axis_rules(sharding_rules): + train_state_sharding = bv_sharding.infer_sharding( + train_state_shape, strategy=strategy, mesh=mesh) + + write_note("Transferring train_state to devices...") + # RNG is always replicated + rng_init = u.reshard(rng_init, repl_sharding) + + # Parameters and the optimizer are now global (distributed) jax arrays. + params = jax.jit(init, out_shardings=train_state_sharding["params"])(rng_init) + opt = jax.jit(tx.init, out_shardings=train_state_sharding["opt"])(params) + + rng, rng_loop = jax.random.split(rng, 2) + rng_loop = u.reshard(rng_loop, repl_sharding) + del rng # not used anymore, so delete it. + + # At this point we have everything we need to form a train state. It contains + # all the parameters that are passed and updated by the main training step. + # From here on, we have no need for Flax AxisMetadata (such as partitioning). + train_state = nn.unbox({"params": params, "opt": opt}) + del params, opt # Delete to avoid memory leak or accidental reuse. + + write_note("Logging parameter overview...") + parameter_overview.log_parameter_overview( + train_state["params"], msg="Init params", + include_stats="global", jax_logging_process=0) + +################################################################################ +# # +# Update Step # +# # +################################################################################ + + @functools.partial( + jax.jit, + donate_argnums=(0,), + out_shardings=(train_state_sharding, repl_sharding)) + def update_fn(train_state, rng, batch): + """Update step.""" + + images, labels = batch["image"], batch["labels"] + + step_count = bv_optax.get_count(train_state["opt"], jittable=True) + rng = jax.random.fold_in(rng, step_count) + + if config.get("mixup") and config.mixup.p: + # The shard_map below makes mixup run on every device independently and + # thus avoids unnecessary communication. + sharded_mixup_fn = shard_map( + u.get_mixup(rng, config.mixup.p), + mesh=jax.sharding.Mesh(devices_flat, ("data",)), + in_specs=P("data"), out_specs=(P(), P("data"), P("data"))) + rng, (images, labels), _ = sharded_mixup_fn(images, labels) + + # Get device-specific loss rng. + rng, rng_model = jax.random.split(rng, 2) + + def loss_fn(params): + logits, _ = model.apply( + {"params": params}, images, + train=True, rngs={"dropout": rng_model}) + return getattr(u, config.get("loss", "sigmoid_xent"))( + logits=logits, labels=labels) + + params, opt = train_state["params"], train_state["opt"] + loss, grads = jax.value_and_grad(loss_fn)(params) + updates, opt = tx.update(grads, opt, params) + params = optax.apply_updates(params, updates) + + measurements = {"training_loss": loss} + gs = jax.tree.leaves(bv_optax.replace_frozen(config.schedule, grads, 0.)) + measurements["l2_grads"] = jnp.sqrt(sum([jnp.sum(g * g) for g in gs])) + ps = jax.tree.leaves(params) + measurements["l2_params"] = jnp.sqrt(sum([jnp.sum(p * p) for p in ps])) + us = jax.tree.leaves(updates) + measurements["l2_updates"] = jnp.sqrt(sum([jnp.sum(u * u) for u in us])) + + return {"params": params, "opt": opt}, measurements + +################################################################################ +# # +# Load Checkpoint # +# # +################################################################################ + + # Decide how to initialize training. The order is important. + # 1. Always resumes from the existing checkpoint, e.g. resumes a finetune job. + # 2. Resume from a previous checkpoint, e.g. start a cooldown training job. + # 3. Initialize model from something, e,g, start a fine-tuning job. + # 4. Train from scratch. + resume_ckpt_path = None + if save_ckpt_path and gfile.exists(f"{save_ckpt_path}-LAST"): + resume_ckpt_path = save_ckpt_path + elif config.get("resume"): + resume_ckpt_path = fillin(config.resume) + + ckpt_mngr = None + if save_ckpt_path or resume_ckpt_path: + ckpt_mngr = array_serial.GlobalAsyncCheckpointManager() + + if resume_ckpt_path: + write_note(f"Resuming training from checkpoint {resume_ckpt_path}...") + jax.tree.map(lambda x: x.delete(), train_state) + del train_state + shardings = { + **train_state_sharding, + "chrono": jax.tree.map(lambda _: repl_sharding, + u.chrono.save()), + } + loaded = u.load_checkpoint_ts( + resume_ckpt_path, tree=shardings, shardings=shardings) + train_state = {key: loaded[key] for key in train_state_sharding.keys()} + + u.chrono.load(jax.device_get(loaded["chrono"])) + del loaded + elif config.get("model_init"): + write_note(f"Initialize model from {config.model_init}...") + # TODO: when updating the `load` API soon, do pass and request the + # full `train_state` from it. Examples where useful: VQVAE, BN. + train_state["params"] = model_mod.load( + train_state["params"], config.model_init, config.get("model"), + **config.get("model_load", {})) + + # load has the freedom to return params not correctly sharded. Think of for + # example ViT resampling position embedings on CPU as numpy arrays. + train_state["params"] = u.reshard( + train_state["params"], train_state_sharding["params"]) + + parameter_overview.log_parameter_overview( + train_state["params"], msg="restored params", + include_stats="global", jax_logging_process=0) + + +################################################################################ +# # +# Setup Evals # +# # +################################################################################ + + # We do not jit/pmap this function, because it is passed to evaluator that + # does it later. We output as many intermediate tensors as possible for + # maximal flexibility. Later `jit` will prune out things that are not needed. + def eval_logits_fn(train_state, batch): + logits, out = model.apply({"params": train_state["params"]}, batch["image"]) + return logits, out + + def eval_loss_fn(train_state, batch): + logits, _ = model.apply({"params": train_state["params"]}, batch["image"]) + loss_fn = getattr(u, config.get("loss", "sigmoid_xent")) + return { + "loss": loss_fn(logits=logits, labels=batch["labels"], reduction=False) + } + + eval_fns = { + "predict": eval_logits_fn, + "loss": eval_loss_fn, + } + + # Only initialize evaluators when they are first needed. + @functools.lru_cache(maxsize=None) + def evaluators(): + return eval_common.from_config( + config, eval_fns, + lambda s: write_note(f"Init evaluator: {s}…\n{u.chrono.note}"), + lambda key, cfg: get_steps(key, default=None, cfg=cfg), + devices_flat, + ) + + # At this point we need to know the current step to see whether to run evals. + write_note("Inferring the first step number...") + first_step_device = bv_optax.get_count(train_state["opt"], jittable=True) + first_step = int(jax.device_get(first_step_device)) + u.chrono.inform(first_step=first_step) + + # Note that training can be pre-empted during the final evaluation (i.e. + # just after the final checkpoint has been written to disc), in which case we + # want to run the evals. + if first_step in (total_steps, 0): + write_note("Running initial or final evals...") + mw.step_start(first_step) + for (name, evaluator, _, prefix) in evaluators(): + if config.evals[name].get("skip_first") and first_step != total_steps: + continue + write_note(f"{name} evaluation...\n{u.chrono.note}") + with u.chrono.log_timing(f"z/secs/eval/{name}"): + with mesh, nn.logical_axis_rules(sharding_rules): + for key, value in evaluator.run(train_state): + mw.measure(f"{prefix}{key}", value) + +################################################################################ +# # +# Train Loop # +# # +################################################################################ + + prof = None # Keeps track of start/stop of profiler state. + + write_note("Starting training loop, compiling the first step...") + for step, batch in zip(range(first_step + 1, total_steps + 1), train_iter): + mw.step_start(step) + + with jax.profiler.StepTraceAnnotation("train_step", step_num=step): + with u.chrono.log_timing("z/secs/update0", noop=step > first_step + 1): + with mesh, nn.logical_axis_rules(sharding_rules): + train_state, measurements = update_fn(train_state, rng_loop, batch) + + # On the first host, let's always profile a handful of early steps. + if jax.process_index() == 0: + prof = u.startstop_prof(prof, step, first_step, get_steps("log_training")) + + # Report training progress + if (u.itstime(step, get_steps("log_training"), total_steps, host=0) + or u.chrono.warmup and jax.process_index() == 0): + for i, sched_fn_cpu in enumerate(sched_fns_cpu): + mw.measure(f"global_schedule{i if i else ''}", + sched_fn_cpu(u.put_cpu(step - 1))) + measurements = jax.device_get(measurements) + for name, value in measurements.items(): + mw.measure(name, value) + u.chrono.tick(step) + for k in ("training_loss", "l2_grads", "l2_updates", "l2_params"): + if not np.isfinite(measurements.get(k, 0.0)): + raise RuntimeError(f"{k} became nan or inf somewhere within steps " + f"[{step - get_steps('log_training')}, {step}]") + + # Checkpoint saving + keep_ckpt_steps = get_steps("keep_ckpt", None) or total_steps + if save_ckpt_path and ( + (keep := u.itstime(step, keep_ckpt_steps, total_steps, first=False)) + or u.itstime(step, get_steps("ckpt", None), total_steps, first=True) + ): + u.chrono.pause(wait_for=train_state) + + # Copy because we add extra stuff to the checkpoint. + ckpt = {**train_state} + + # To save chrono state correctly and safely in a multihost setup, we + # broadcast the state to all hosts and convert it to a global array. + with jax.transfer_guard("allow"): + chrono_ckpt = multihost_utils.broadcast_one_to_all(u.chrono.save()) + chrono_shardings = jax.tree.map(lambda _: repl_sharding, chrono_ckpt) + ckpt = ckpt | {"chrono": u.reshard(chrono_ckpt, chrono_shardings)} + + u.save_checkpoint_ts(ckpt_mngr, ckpt, save_ckpt_path, step, keep) + u.chrono.resume() + + for (name, evaluator, log_steps, prefix) in evaluators(): + if u.itstime(step, log_steps, total_steps, first=False, last=True): + u.chrono.pause(wait_for=train_state) + u.chrono.tick(step) # Record things like epoch number, core hours etc. + write_note(f"{name} evaluation...\n{u.chrono.note}") + with u.chrono.log_timing(f"z/secs/eval/{name}"): + with mesh, nn.logical_axis_rules(sharding_rules): + for key, value in evaluator.run(train_state): + mw.measure(f"{prefix}{key}", jax.device_get(value)) + u.chrono.resume() + mw.step_end() + + # Always give a chance to stop the profiler, no matter how things ended. + # TODO: can we also do this when dying of an exception like OOM? + if jax.process_index() == 0 and prof is not None: + u.startstop_prof(prof) + + # Last note needs to happen before the pool's closed =) + write_note(f"Done!\n{u.chrono.note}") + + pool.close() + pool.join() + mw.close() + if ckpt_mngr: + ckpt_mngr.wait_until_finished() + + # Make sure all hosts stay up until the end of main. + u.sync() + + u.maybe_cleanup_workdir(workdir, flags.FLAGS.cleanup, info) + + +if __name__ == "__main__": + app.run(main) diff --git a/big_vision/utils.py b/big_vision/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..a954300f9ac7e4ccce27c38eb1367d3233451532 --- /dev/null +++ b/big_vision/utils.py @@ -0,0 +1,1478 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utils very specific to this project, not generic.""" + +import collections +import contextlib +import dataclasses +import functools +import io +import json +import multiprocessing +import multiprocessing.pool +import os +import re +import sys +import time +from typing import Mapping + +from absl import flags +from absl import logging +from big_vision.pp import registry as pp_registry +import einops +import flax +import flax.jax_utils as flax_utils +import jax +from jax.experimental import mesh_utils +from jax.experimental.array_serialization import serialization as array_serial +import jax.numpy as jnp +import ml_collections as mlc +import numpy as np + +import tensorflow.io.gfile as gfile # pylint: disable=consider-using-from-import + + +Registry = pp_registry.Registry + + +# pylint: disable=logging-fstring-interpolation + + +def pad_shard_unpad(wrapped, static_argnums=(0,), static_argnames=()): + """Wraps a function with code that pads, shards, then un-shards, un-pads. + + Args: + wrapped: the function to be wrapped. Signature is `params, *args, *kwargs`. + static_argnums: indices of arguments to `wrapped` that should _not_ be + padded and sharded, but instead be forwarded as-is. The default is (0,) + because by far the most common use-case is to pass `params` first. + static_argnames: names of kwargs to `wrapped` that should _not_ be padded + and sharded, but instead be forwarded as-is. + + Returns: + A new function that pads and shards its arguments before passing them to + the wrapped function, and un-shards and un-pads the returned pytree. + + This is useful for calling a pmap'ed function with inputs that aren't + divisible by the number of devices. A typical use is: + @pad_shard_unpad + @jax.pmap + def forward(params, x): ... + + Notes: + The padding is done in host-memory before being passed to the function, and + the values returned by the function are transferred back to host memory. + + The returned function is augmented with a new keyword-only argument + `min_device_batch` that, if specified, forces padding inputs to at least + this size per device. This can be useful to avoid recompiles for the last + batch and reduce memory fragmentation. + """ + + def pad_shard_unpad_wrapper(*args, min_device_batch=None, **kw): + d = jax.local_device_count() # d = devices, b = batch + + # Find the batch-sizes of all non-static arguments. + def get_bs(x): + batch_sizes = jax.tree.map(lambda y: y.shape[0], x) + return jax.tree.flatten(batch_sizes)[0] + + bs_a = [get_bs(a) for i, a in enumerate(args) if i not in static_argnums] + bs_kw = [get_bs(v) for k, v in kw.items() if k not in static_argnames] + bs = set([n for b in (bs_a + bs_kw) for n in b]) + assert len(bs) == 1, f"Inconsistent batch-sizes: {bs}" + b = bs.pop() + + def pad(x): + _, *shape = x.shape + db, rest = divmod(b, d) + if rest: + x = np.concatenate([x, np.zeros((d - rest, *shape), x.dtype)], axis=0) + db += 1 + if min_device_batch and db < min_device_batch: + x = np.concatenate( + [x, np.zeros((d * (min_device_batch - db), *shape), x.dtype)]) + db = min_device_batch + return x.reshape(d, db, *shape) + + def maybe_pad(x, actually_pad=True): + if not actually_pad: return x # For call-site convenience below. + return jax.tree.map(pad, x) + + args = [maybe_pad(a, i not in static_argnums) for i, a in enumerate(args)] + kw = {k: maybe_pad(v, k not in static_argnames) for k, v in kw.items()} + out = wrapped(*args, **kw) + + def unpad(x): + # Transfer back before cutting, to reduce on-device shape diversity. + return einops.rearrange(jax.device_get(x), "d b ... -> (d b) ...")[:b] + return jax.tree.map(unpad, out) + + return pad_shard_unpad_wrapper + + +def onehot(labels, num_classes, on_value=1.0, off_value=0.0): + x = (labels[..., None] == jnp.arange(num_classes)[None]) + x = jax.lax.select(x, jnp.full(x.shape, on_value), + jnp.full(x.shape, off_value)) + return x.astype(jnp.float32) + + +def npload(fname): + """Loads `fname` and returns an np.ndarray or dict thereof.""" + # Load the data; use local paths directly if possible: + if os.path.exists(fname): + loaded = np.load(fname, allow_pickle=False) + else: + # For other (remote) paths go via gfile+BytesIO as np.load requires seeks. + with gfile.GFile(fname, "rb") as f: + data = f.read() + loaded = np.load(io.BytesIO(data), allow_pickle=False) + + # Support loading both single-array files (np.save) and zips (np.savez). + if isinstance(loaded, np.ndarray): + return loaded + else: + return dict(loaded) + + +def load_checkpoint_np(npz, tree=None): + """Loads a jax pytree from a npz file. + + Args: + npz: Either path to the checkpoint file (.npz), or a dict-like. + tree: deprecated, use None. + Bwd-compat for old format that only stored values: the pytree structure. + + Returns: + A pytree that is the checkpoint. + """ + if isinstance(npz, str): # If not already loaded, then load. + npz = npload(npz) + keys, values = zip(*list(npz.items())) + if tree: + checkpoint = tree.unflatten(values) + else: + checkpoint = recover_tree(keys, values) + return checkpoint + + +def load_params(ckpt, **kw): + """Loads the parameters of a big_vision checkpoint, both old or new format. + + Args: + ckpt: Path to the checkpoint (.npz, .ts) or dict-like. + **kw: forwarded to the underlying load function (_np or _ts). + + Returns: + A pytree that is the checkpoint, potentially sharded. + + Notes: + The `ckpt` string can contain an colon-separated "submodel" indicator, like + `img` in the example `/path/to/file.npz:img`. + This is used to load sub-parts of a model, for example the image load the + image encoder out of a two_tower (SigLIP) checkpoint, or distillation. + This way, ANY model that uses this function can load itself from a + checkpoint that contains multiple sub-models. + """ + key = None # Whether we want to extract only a sub-key of the model. + + if isinstance(ckpt, str): # Most common case of passing a checkpoint path. + # Potentially read out the sub-part to load from after the colon + # '/path/to/file:img/head' => '/path/to/file', 'img/head' + # 'gs://path/to/file' => 'gs://path/to/file', None + if match := re.match(r"^(.*?/.*?)(?::([\w/]+))?$", ckpt): + ckpt, key = match.groups() + else: + raise ValueError(f"Weird ckpt path: {ckpt} ; Maybe prepend ./ ?") + + # Use the checkpoint filename to detect when we're loading old-style .npz + # checkpoints, as opposed to new-style tensorstore checkpoint folders. + if ".npz" in ckpt: # Not a perfect heuristic, but good enough. + checkpoint = load_checkpoint_np(ckpt, **kw) + checkpoint = jax.tree.map(recover_dtype, checkpoint) + if "params" in checkpoint: + # Checkpoint with optax state (after (internal link)). + params = checkpoint["params"] + elif "opt" in checkpoint: + # Checkpoint with Flax optimizer. + params = checkpoint["opt"]["target"] + else: + # When open-sourcing, we often shared only the params directly. + params = checkpoint + else: + # Here we're now loading new-style tensorstore checkpoints. + # We can be a more efficient and load params and `key` only right away. + regex = f"params/{key}($|/.*)" if key else "params/.*" + assert "regex" not in kw, "For a custom regex, use tsload directly." + kw["regex"] = regex + checkpoint = load_checkpoint_ts(ckpt, **kw) + params = checkpoint["params"] + + if key is not None: + params = tree_get(params, key) + + return params + + +def prefetch_scalar(it, nprefetch=1, devices=None): + n_loc_dev = len(devices) if devices else jax.local_device_count() + repl_iter = (np.ones(n_loc_dev) * i for i in it) + return flax_utils.prefetch_to_device(repl_iter, nprefetch, devices) + + +def sigmoid_xent(*, logits, labels, reduction=True): + # NOTE: This implementation is stable, see these two: + # (internal link) + # https://github.com/google/jax/issues/2140 + log_p = jax.nn.log_sigmoid(logits) + log_not_p = jax.nn.log_sigmoid(-logits) + nll = -jnp.sum(labels * log_p + (1. - labels) * log_not_p, axis=-1) + return jnp.mean(nll) if reduction else nll + + +def bidirectional_contrastive_loss(zimg, ztxt, t, mask=None, reduction=False): + """Bidirectional contrastive loss (e.g. for contrastive trainer/evaluator).""" + # BF.FB = BB + logits = jnp.dot(zimg, ztxt.T) * t + + if mask is not None: + # Set to negative infinity where mask = 0. Masked examples will disappear + # under softmax, and be ignored by ncorrect (NINF will never win argmax). + exclude = jnp.logical_not(mask) # Now 1 if we don't want to keep. + exclude = jnp.logical_or(exclude[:, None], exclude[None, :]) + logits = jnp.where(exclude, -jnp.inf, logits) + + # Note: assumed t is in a good range e.g. already passed through exp/softplus. + l1 = -jnp.diag(jax.nn.log_softmax(logits, axis=1)) # NLL img->txt + l2 = -jnp.diag(jax.nn.log_softmax(logits, axis=0)) # NLL txt->img + l = 0.5 * (l1 + l2) + + if mask is not None: + l = jnp.where(mask, l, 0) + + redux = jnp.mean if reduction else lambda x: x + if reduction and mask is not None: + redux = lambda x: jnp.sum(x * mask) / (jnp.sum(mask) + 1e-8) + + # Also return extra measurements. + return redux(l), { + "ncorrect": redux(jnp.argmax(logits, axis=1) == jnp.arange(len(logits))), + } + + +def softmax_xent(*, logits, labels, reduction=True, kl=False, axis=-1): + log_p = jax.nn.log_softmax(logits, axis=axis) + nll = -jnp.sum(labels * log_p, axis=axis) + if kl: + nll += jnp.sum(labels * jnp.log(jnp.clip(labels, 1e-8)), axis=axis) + return jnp.mean(nll) if reduction else nll + + +def weighted_softmax_xent(*, + logits, + labels, + reduction=True, + weights=None, + label_smoothing=0.0, + normalize=True): + """Compute weighted cross entropy. + + Args: + logits: [batch, length, num_classes] float array. + labels: categorical targets [batch, length] int array. + reduction: reduce across batch dim. + weights: None or array of shape [batch, length]. + label_smoothing: label smoothing constant, used to determine the on and off + values. + normalize: normalize each "sentence" loss by the number of tokens in it. + + Returns: + Tuple of scalar loss and batch normalizing factor. + """ + if logits.ndim != labels.ndim + 1: + raise ValueError("Incorrect shapes. Got shape %s logits and %s targets" % + (str(logits.shape), str(labels.shape))) + vocab_size = logits.shape[-1] + confidence = 1.0 - label_smoothing + low_confidence = (1.0 - confidence) / (vocab_size - 1) + soft_targets = onehot( + labels, vocab_size, on_value=confidence, off_value=low_confidence) + + loss = -jnp.sum(soft_targets * jax.nn.log_softmax(logits), axis=-1) + + normalizing_factor = labels.shape[1] + if weights is not None: + loss = loss * weights + normalizing_factor = jnp.clip(weights.sum(axis=1), 2e-38) + + loss = loss.sum(axis=1) + if normalize: + loss = loss / normalizing_factor + + return loss.mean() if reduction else loss + + +def accumulate_gradient(loss_and_grad_fn, params, images, labels, accum_steps): + """Accumulate gradient over multiple steps to save on memory.""" + # See (internal link) for details and experiments. + if accum_steps and accum_steps > 1: + assert images.shape[0] % accum_steps == 0, ( + f"Bad accum_steps {accum_steps} for batch size {images.shape[0]}") + step_size = images.shape[0] // accum_steps + l, g = loss_and_grad_fn(params, images[:step_size], labels[:step_size]) + def acc_grad_and_loss(i, l_and_g): + imgs = jax.lax.dynamic_slice(images, (i*step_size, 0, 0, 0), + (step_size,) + images.shape[1:]) + lbls = jax.lax.dynamic_slice(labels, (i*step_size, 0), + (step_size, labels.shape[1])) + li, gi = loss_and_grad_fn(params, imgs, lbls) + l, g = l_and_g + return (l + li, jax.tree.map(lambda x, y: x + y, g, gi)) + l, g = jax.lax.fori_loop(1, accum_steps, acc_grad_and_loss, (l, g)) + return jax.tree.map(lambda x: x / accum_steps, (l, g)) + else: + return loss_and_grad_fn(params, images, labels) + + +def itstime(step, every_n_steps, total_steps, host=None, last=True, first=True, + drop_close_to_last=0.25): + """Returns True if it's time to execute an action. + + Args: + step: the current step representing "now". + every_n_steps: the action should run every this many steps. + total_steps: the step number of the last step of training. + host: host number. If provided, only run if we are this process. + last: whether to run on the last step or not. + first: whether to run on the first step or not. + drop_close_to_last: if a step would run, but is this close (in terms of + fraction of every_n_step) to the last one, skip. + + Returns: + True if the action should be executed, False if not. + """ + + # This logic avoids running `itstime` "a few" steps before the last step. + # Canonical example: don't save checkpoint 2 steps before the last, and then + # at the last again; it's pointless and checkpoint timing will time out. + close_to_last = False + if drop_close_to_last and every_n_steps: + close_to_last = abs(step - total_steps) < drop_close_to_last * every_n_steps + + is_host = host is None or jax.process_index() == host + is_step = every_n_steps and (step % every_n_steps == 0) and not close_to_last + is_last = every_n_steps and step == total_steps + is_first = every_n_steps and step == 1 + return is_host and (is_step or (last and is_last) or (first and is_first)) + + +def checkpointing_timeout(writer, timeout): + # Make sure checkpoint writing is not a bottleneck + if writer is not None: + try: + # Note: `writer` is a multiprocessing.AsyncResult, and + # timeout is in seconds. + writer.get(timeout=timeout) + except multiprocessing.TimeoutError as e: + raise TimeoutError( + "Checkpoint writing seems to be a bottleneck. Make sure you do " + "not do something wrong, like writing checkpoints to a distant " + "cell. In a case you are OK with checkpoint writing being a " + "bottleneck, you can configure `ckpt_timeout` parameter") from e + + +def hms(s): + """Format time in hours/minutes/seconds.""" + if s < 60: + return f"{s:.0f}s" + m, s = divmod(s, 60) + if m < 60: + return f"{m:.0f}m{s:.0f}s" + h, m = divmod(m, 60) + if h < 25: + return f"{h:.0f}h{m:.0f}m" # Seconds intentionally omitted. + d, h = divmod(h, 24) + return f"{d:.0f}d{h:.0f}h{m:.0f}m" # Seconds intentionally omitted. + + +class Chrono: + """Measures time and reports progress, hyper-specific to our train loops. + + Some concepts: + 1. This differentiates between three "types" of time: + - training time: the time spent on actual training (fprop/bprop/update) + - program time: overall time the program runs, including all overheads + - pause time: the chronometer can be paused (eg during evals). + 2. This handles a "warmup": the first step is skipped for training time + purposes, as it includes significant compilation overheads, which distort + estimates. + 3. `accum`ulates (i.e. integrates) timings, and save/load them across + restarts. + """ + + def __init__(self): + self._timing_history = collections.defaultdict(list) + self._measure = None + self._write_note = None + + self.program_start_time = time.monotonic() + self.train_start_time = None + self.train_start_step = None # When we started timing (after warmup) + + self.prev_time = None + self.prev_step = None + + self.pause_start = None + self.paused_time = 0 + + self.total_steps = None + self.global_bs = None + self.steps_per_epoch = None + + self.warmup = 2 # How many calls to `tick` to skip. + self.load() # Inits accum integrators. + self.note = "Chrono n/a" + + def inform(self, *, first_step=None, total_steps=None, global_bs=None, + steps_per_epoch=None, measure=None, write_note=None): + """Provide some extra info that's only known later in the program.""" + # The pattern of `self.x = x or self.x` allows one to call `inform` various + # times with various subset of information (args), as they become available. + # Except for `first_step` which can be 0 so is a bit more verbose. + self.prev_step = first_step if first_step is not None else self.prev_step + self.total_steps = total_steps or self.total_steps + self.steps_per_epoch = steps_per_epoch or self.steps_per_epoch + self.global_bs = global_bs or self.global_bs + self._measure = measure or self._measure + self._write_note = write_note or self._write_note + if self.total_steps and self.prev_step is not None: + self.note = (f"Steps:{self.prev_step}/{self.total_steps} " + f"[{self.prev_step/self.total_steps:.1%}]") + + def tick(self, step, measure=None, write_note=None): + """A chronometer tick.""" + if step == self.prev_step: return # Can happen from evals for example. + + measure = measure or self._measure + write_note = write_note or self._write_note + + now = time.monotonic() + measure("uptime", now - self.program_start_time) + self.flush_timings() + + # We do always count examples, regardless of the timing-related warmup that + # happens a few lines below. + ds = step - self.prev_step # Steps between ticks + self.prev_step = step + self.accum_examples_seen += ds * self.global_bs + measure("examples_seen", self.accum_examples_seen) + measure("progress", step / self.total_steps) + if self.steps_per_epoch: + measure("epoch", step / self.steps_per_epoch) + + # We take the start as the second time `tick` is called, so we avoid + # measuring the overhead of compilation and don't include it in time + # estimates. + if self.warmup > 1: + self.warmup -= 1 + write_note(self.note) # This can help debugging. + return + if self.warmup == 1: + self.train_start_time = self.prev_time = now + self.train_start_step = step + self.accum_program_time += now - self.program_start_time + self.paused_time = 0 # Drop pauses that happened before timing starts. + self.warmup = 0 + write_note(self.note) # This can help debugging. + return + + # Measurement with micro-timings of current training steps speed. + # Time between ticks (ignoring pause) + dt = now - self.prev_time - self.paused_time + ncores = jax.device_count() # Global device count + measure("img/sec/core", self.global_bs * ds / dt / ncores) + + # Accumulate (integrate) times, good for plots. + self.accum_train_time += dt + self.accum_pause_time += self.paused_time + self.accum_program_time += dt + self.paused_time + + # Convert to, and log as, core hours. + core_hours = self.accum_train_time * ncores / 60 / 60 + devtype = jax.devices()[0].device_kind + measure(f"core_hours_{devtype}", core_hours) + measure("core_hours", core_hours) # For convenience as x-axis in sweeps. + + # Progress note with "global" full-program average timings + # (eg in program-time minus warmup) + dt = now - self.train_start_time # Time elapsed since end of warmup. + steps_timed = step - self.train_start_step + steps_todo = self.total_steps - step + self.note = f"Steps:{step}/{self.total_steps} [{step/self.total_steps:.1%}]" + self.note += f"\nWalltime:{hms(self.accum_program_time)}" + self.note += f" ({hms(self.accum_pause_time)} eval)" + self.note += f"\nETA:{hms(dt / steps_timed*steps_todo)}" + self.note += f"\nTotal train time:{hms(dt / steps_timed*self.total_steps)}" + write_note(self.note) + + log_memory(measure) + + self.prev_time = now + self.paused_time = 0 + + def pause(self, wait_for=()): + assert self.pause_start is None, "Don't pause twice." + jax.block_until_ready(wait_for) + self.pause_start = time.monotonic() + + def resume(self): + self.paused_time += time.monotonic() - self.pause_start + self.pause_start = None + + def save(self): + return dict( + accum_program_time=self.accum_program_time, + accum_train_time=self.accum_train_time, + accum_pause_time=self.accum_pause_time, + accum_examples_seen=self.accum_examples_seen, + ) + + def load(self, ckpt={}): # pylint: disable=dangerous-default-value + self.accum_program_time = float(ckpt.get("accum_program_time", 0.0)) + self.accum_train_time = float(ckpt.get("accum_train_time", 0.0)) + self.accum_pause_time = float(ckpt.get("accum_pause_time", 0.0)) + self.accum_examples_seen = int(ckpt.get("accum_examples_seen", 0)) + + @contextlib.contextmanager + def log_timing(self, name, *, noop=False): + """Use this when you time sth once per step and want instant flushing.""" + t0 = time.monotonic() + yield + dt = time.monotonic() - t0 + if not noop: + if self._measure: # So that timed things still work in colab. + self._measure(name, dt) + logging.info("TIMING[%s]: %s", name, dt) + logging.flush() + + @contextlib.contextmanager + def log_timing_avg(self, name, *, noop=False): + """Use this when you time sth multiple times per step (eg in a loop).""" + t0 = time.monotonic() + yield + dt = time.monotonic() - t0 + if not noop: + self._timing_history[name].append(dt) + logging.info("TIMING[%s]: avg %s current %s", + name, np.mean(self._timing_history[name]), dt) + logging.flush() + + def flush_timings(self): + assert self._measure is not None + for name, times in self._timing_history.items(): + self._measure(name, np.mean(times)) + self._timing_history.clear() + + +# Singleton to use from everywhere. https://stackoverflow.com/a/6760726/2366315 +chrono = Chrono() + + +def log_memory(measure): + """Log a bunch of memory-related measurements.""" + try: + import psutil + except ImportError: + psutil = None + + if psutil is not None: + # Note that total != available + used, see psutil docs. + vmem = psutil.virtual_memory() + measure("y/hostmem/total", vmem.total) + measure("y/hostmem/available", vmem.available) + measure("y/hostmem/used", vmem.used) + + # We show only device 0 and 1 to avoid spam. The reason to show two and not + # just one, if multiple are available, is because a frequent mistake is to + # create arrays on the default device, which is device 0. + for i, d in zip([0, 1], jax.local_devices()): + for k, v in (d.memory_stats() or {}).items(): + measure(f"y/devmem/dev{i}/{k}", v) + + +def _traverse_with_names(tree, with_inner_nodes=False): + """Traverses nested dicts/dataclasses and emits (leaf_name, leaf_val).""" + if dataclasses.is_dataclass(tree): + tree = flax.serialization.to_state_dict(tree) + # Don't output the non-leaf nodes. If the optimizer doesn't have a state + # the tree leaves can be Nones which was interpreted as a leaf by this + # function but not by the other functions (like jax.tree.map). + if tree is None: + return + elif isinstance(tree, Mapping): + keys = sorted(tree.keys()) + for key in keys: + for path, v in _traverse_with_names(tree[key], with_inner_nodes): + yield (key + "/" + path).rstrip("/"), v + if with_inner_nodes: + yield "", tree + elif isinstance(tree, (list, tuple)): + for idx in range(len(tree)): + for path, v in _traverse_with_names(tree[idx], with_inner_nodes): + yield (str(idx) + "/" + path).rstrip("/"), v + if with_inner_nodes: + yield "", tree + else: + yield "", tree + + +def tree_flatten_with_names(tree): + """Populates tree_flatten with leaf names. + + This function populates output of tree_flatten with leaf names, using a + custom traversal that produces names is provided. The custom traversal does + NOT have to traverse tree in the same order as jax, as we take care of + automatically aligning jax' and custom traversals. + + Args: + tree: python tree. + + Returns: + A list of values with names: [(name, value), ...] + """ + vals, tree_def = jax.tree.flatten(tree) + + # "Fake" token tree that is use to track jax internal tree traversal and + # adjust our custom tree traversal to be compatible with it. + tokens = range(len(vals)) + token_tree = tree_def.unflatten(tokens) + val_names, perm = zip(*_traverse_with_names(token_tree)) + inv_perm = np.argsort(perm) + + # Custom traverasal should visit the same number of leaves. + assert len(val_names) == len(vals) + + return [(val_names[i], v) for i, v in zip(inv_perm, vals)], tree_def + + +def tree_unflatten(names_and_vals): + """Reverses `tree_flatten_with_names(tree)[0]`.""" + return recover_tree(*zip(*names_and_vals)) + + +def tree_map_with_names(f, tree, *rest): + """Like jax.tree.map but with a filter on the leaf path name. + + Args: + f: A function with first parameter `name` (path-like "a/b/c") and remaining + parameters values of `tree` and `*rest` corresponding to the given `name` + Should return a new value for parameter `name`. + tree: The tree of parameters `f` should be applied to. + *rest: more trees of the exact same structure. + + Returns: + A tree identical in structure to `tree` and `*rest` but with the leaves the + result of calling `f` on corresponding name/leaves in `tree` and `*rest`. + """ + names_and_vals, tree_def = tree_flatten_with_names(tree) + names, vals = zip(*names_and_vals) + rest_vals = [list(zip(*tree_flatten_with_names(t)[0]))[1] for t in rest] + vals = [f(*name_and_vals) for name_and_vals in zip(names, vals, *rest_vals)] + return tree_def.unflatten(vals) + + +def tree_map_with_regex(f, tree, regex_rules, not_f=lambda x: x, name=None): + """Apply jax-style tree_map based on regex rules. + + Args: + f: a function that is being applied to every variable. + tree: jax tree of arrays. + regex_rules: a list of tuples `(pattern, args)`, where `pattern` is a regex + which used for variable matching and `args` are positional arguments + passed to `f`. If some variable is not matched, we apply `not_f` transform + which is id by default. If multiple patterns match, then only the first + rule is applied. + not_f: optional function which is applied to variables that do not match any + pattern. + name: a name of transform for logging purposes. + + Returns: + a tree, transformed by `f` according to the given rules. + """ + def _f(vname, v): + for pattern, arg in regex_rules: + if re.fullmatch(pattern, vname): + if name and jax.process_index() == 0: + logging.info("Applying %s to %s with %s due to `%s`", + name, vname, arg, pattern) + return f(v, arg) + return not_f(v) + return tree_map_with_names(_f, tree) + + +def tree_get(tree, name): + """Get an entry of pytree by flattened key name, eg a/b/c, with nice error. + + Args: + tree: the pytree to be queried. + name: the path to extract from the tree, see below for examples. + + Returns: + A few examples: + tree = {'a': 1, 'b': {'c': 2, 'd': 3}} + tree_get(tree, 'a') == 1 + tree_get(tree, 'b/c') == 2 + tree_get(tree, 'b') == {'c': 2, 'd': 3} + """ + flattened = dict(_traverse_with_names(tree, with_inner_nodes=True)) + try: + return flattened[name] + except KeyError as e: + class Msg(str): # Reason: https://stackoverflow.com/a/70114007/2366315 + def __repr__(self): + return str(self) + msg = "\n".join([name, "Available keys:", *flattened, ""]) + # Turn into configdict to use its "did you mean?" error message! + msg = mlc.ConfigDict(flattened)._generate_did_you_mean_message(name, msg) # pylint: disable=protected-access + raise KeyError(Msg(msg)) from e + + +def tree_replace(tree, replacements): + """Renames/removes (nested) keys. + + Example usage: + + tree = {'a': {'b': 2, 'c': 3}, 'c': 4} + replacements = { + 'a/b': 'a/b/x', # replaces 'a/b' with 'a/b/x' + '.*c': 'C', # replaces 'c' with 'C' ('a/c' is removed) + 'C': 'D', # replaces 'C' (which was 'c') with 'D' + '.*/c': None, # removes 'a/c' + } + tree2 = rename_remove(tree, replacements) + assert tree2 == {'D': 4, 'a': {'b': {'x': 2}}} + + Args: + tree: A nested dictionary. + replacements: Rules specifying `regex` as keys and `replacement` as values + to be used with `m = re.match(regex, key)` and `m.expand(replacement)` + for every `key` independently. + + Note that: + 1. If any rule matches with `replacement=None`, then the key is removed. + 2. The rules are applied in order. It's possible to have multiple + transformations on a single key. + + Returns: + Updated `tree` according to rules defined in `replacements`. + """ + replacements = { + re.compile(kk): vv for kk, vv in replacements.items() + } + + def rename(k): + for kk, vv in replacements.items(): + m = kk.match(k) + if m: + k = k[:m.start()] + m.expand(vv) + k[m.end():] + return k + + def should_remove(k): + return any(vv is None and kk.match(k) for kk, vv in replacements.items()) + + names_and_vals, _ = tree_flatten_with_names(tree) + names_and_vals = [ + (rename(k), v) for k, v in names_and_vals if not should_remove(k) + ] + return tree_unflatten(names_and_vals) + + +def tree_compare(tree1, tree2): + """Returns `(tree1_only, tree2_only, dtype_shape_mismatch)`.""" + tree1 = flax.traverse_util.flatten_dict(tree1, sep="/") + tree2 = flax.traverse_util.flatten_dict(tree2, sep="/") + return set(tree1) - set(tree2), set(tree2) - set(tree1), { + k: [(v.dtype, v.shape), (tree2[k].dtype, tree2[k].shape)] + for k, v in tree1.items() + if k in tree2 and (v.dtype != tree2[k].dtype or v.shape != tree2[k].shape) + } + + +def tree_filter(tree, mask): + """Returns nested dict structure with only a subset of children.""" + # TODO: The code below only works for nested-dict and only when they + # have same structure. Consider relax this. + if not isinstance(tree, dict): + assert isinstance(mask, bool), f"Mask leaves must be boolean! {mask}" + return tree + assert sorted(tree.keys()) == sorted(mask.keys()), ( + f"Keys in tree and mask are not equal! {tree.keys()} != {mask.keys()}") + return {k: tree_filter(v, mask[k]) for k, v in tree.items() + if mask[k] is not False} + + +def recover_dtype(a): + """Numpy's `save` stores bfloat16 type as "void" type, so we recover it.""" + if hasattr(a, "dtype") and a.dtype.type is np.void: + assert a.itemsize == 2, "Unknown dtype!" + return a.view(jax.numpy.bfloat16) + else: + return a + + +def recover_tree(keys, values): + """Recovers a tree as a nested dict from flat names and values. + + This function is useful to analyze checkpoints that are saved by our programs + without need to access the exact source code of the experiment. In particular, + it can be used to extract an reuse various subtrees of the scheckpoint, e.g. + subtree of parameters. + + Args: + keys: a list of keys, where '/' is used as separator between nodes. + values: a list of leaf values. + + Returns: + A nested tree-like dict. + """ + tree = {} + sub_trees = collections.defaultdict(list) + for k, v in zip(keys, values): + if "/" not in k: + tree[k] = v + else: + k_left, k_right = k.split("/", 1) + sub_trees[k_left].append((k_right, v)) + for k, kv_pairs in sub_trees.items(): + k_subtree, v_subtree = zip(*kv_pairs) + tree[k] = recover_tree(k_subtree, v_subtree) + return tree + + +def tssave(mngr, pytree, path, on_commit=lambda *_, **__: None): + """Save pytree using jax tensorstore-based checkpoint manager. + + NOTE: When overwriting an existing checkpoint with a different pytree, the + result is, counterintuitively, the union of both, not only the new one. + + Args: + mngr: An instance of GlobalAsyncCheckpointManager. + pytree: What to store; any pytree of arrays. + path: Where to save the pytree. Creates subfolders as needed. + on_commit: A callback when writing is done, see `mngr.serialize`. + """ + names, vals = zip(*tree_flatten_with_names(pytree)[0]) + + for name in names: + if "~" in name: + raise ValueError(f"Symbol '~' is not allowed in names. Found in {name}.") + + gfile.makedirs(path) + with jax.transfer_guard("allow"): + names = [name.replace("/", "~") for name in names] + mngr.serialize_with_paths( + list(vals), [os.path.join(path, name) for name in names], + on_commit_callback=functools.partial(on_commit, array_names=names)) + + +def save_checkpoint_ts(mngr, checkpoint, path, step, keep=True): + """Preemption-safe saving of checkpoints using tssave.""" + # The tensorstore checkpoint format is a folder with (potentially) many files. + # On some file-systems, operations on these (copy, rename, delete) are slow, + # so we implement a flow that's both robust to pre-emptions/crashes during + # checkpointing and makes minimal use of these slow operations. + + # The logic goes as follows. It's infaillible :) + # (...if file move is atomic, which it is.) + # We always write the current checkpoint to a new folder, which contains the + # step number in its name. If we don't need to keep it indefinitely, we append + # "-tmp" to its name. + # After writing the next checkpoint, we remove the previous one if it had + # "-tmp" in its name. + # We also have a -LAST file that contains a pointer to the latest complete + # checkpoint. File operations are cheap to make atomic, that's why. + + def _on_commit_callback(array_names): # Runs after writing ckpt is done. + with gfile.GFile(f"{path}-CUR", "w") as f: + f.write(curr) + + last = "" + if gfile.exists(f"{path}-LAST"): + with gfile.GFile(f"{path}-LAST", "r") as f: + last = f.read().strip() + + gfile.rename(f"{path}-CUR", f"{path}-LAST", overwrite=True) + + if last.endswith("-tmp"): + # If pre-emption happens here, some old checkpoints may not be deleted. + multiprocessing.pool.ThreadPool().map( + gfile.rmtree, + [f"{path}-{last}/{name}" for name in array_names]) + gfile.rmtree(f"{path}-{last}") + + # NOTE: The jax checkpoint manager automatically waits for the previous save + # to be finished before writing again, so we don't need to do it here. + + # Always write to path with step number in it. + curr = f"{step:09d}{'-tmp' if not keep else ''}" + tssave(mngr, checkpoint, f"{path}-{curr}", _on_commit_callback) + + +def load_checkpoint_ts(path, **tsload_kw): + """Loads a big_vision checkpoint saved by `save_checkpoint_ts`.""" + to_load = path + + try: + # When passing a general path (not a specific step), get the last available. + with gfile.GFile(f"{path}-LAST", "r") as f: + to_load = f"{path}-{f.read().strip()}" + except Exception: # Differs based on backend, so blanket catch. pylint:disable=broad-exception-caught + pass + + return tsload(to_load, **tsload_kw) + + +def tsload(path, *, tree=None, shardings=None, regex=None): + """Loads tensorstore-based array-tree from disk. + + If `tree` argument is provided, then array names to load and target structure + is derived from the tree. If `tree` is None, then array names to load are + derived from array filenames on the disk, and, optionally, `regex` is applied + to filter these names. The`tree` argument is then automatically derived from + array names with `recover_tree` util. + + Arrays are loaded to CPU/TPU/GPU memory as specified by the `shardings` + argument, which is a pytree of CPU/TPU/GPU shardings (can be mixed within a + single pytree). `shardings` should a prefix tree of the `tree` argument. We + automatically broadcast `shardings` to a full `tree`. For example, a user can + specify `shardings=jax.sharding.SingleDeviceSharing(jax.devices('cpu')[0])`, + which will be broadcasted to a full tree. + + Args: + path: a directory where the checkpoint arrays are stored. + tree: a target pytree, which defines array names to load and the target tree + structure. If tree is None, then `tree` is inferred from the names of + arrays stored on the disk. + shardings: a prefix pytree (with respect to `tree`) of the target shardings. + regex: regex to filter array names from the disk, if `tree` is not provided. + + Returns: + A pytree of loaded arrays that has the same structure as `shardings` arg. + """ + if (tree is not None) and (regex is not None): + raise ValueError("If tree is specified, regex filtering is not allowed.") + + if tree is None: + # Some file-systems (gs://) list folders with a trailing /, get rid of it. + path_names = set([p.rstrip("/").replace("~", "/") + for p in gfile.listdir(path)]) + regex = re.compile(regex) if regex is not None else re.compile(".*") + path_names = [p for p in path_names if regex.match(p)] + tree = recover_tree(path_names, [0] * len(path_names)) + + names_and_vals, tree_def = tree_flatten_with_names(tree) + names_to_load, _ = zip(*names_and_vals) + + if shardings is None: + shardings = jax.sharding.SingleDeviceSharding( + jax.local_devices(backend="cpu")[0] + ) + shardings = list(jax.tree.leaves(tree_broadcast(shardings, tree))) + + names_to_load = [os.path.join(path, name.replace("/", "~")) + for name in names_to_load] + specs = [array_serial.get_tensorstore_spec(n) for n in names_to_load] + arrays = array_serial.run_deserialization(shardings, specs, concurrent_gb=64) + return tree_def.unflatten(arrays) + + +def steps(prefix, config, data_size=None, batch_size=None, total_steps=None, + default=ValueError): + """Gets duration named `prefix` out of `config` and converts it to steps. + + Using this function to access a configuration value that denotes some kind + of duration (eg training time, warmup, checkpoint frequency, ...) allows the + duration to be specified in terms of steps, epochs, examples, or percent of + training time, and converts any of these into steps, such that the training + code only deals with steps. + If the result is not an integer step number, it is rounded to the nearest one. + + Args: + prefix: The name of the duration to query. The actual config fields can + then be one of `prefix_steps`, `prefix_examples`, or `prefix_epochs`. + config: The dictionary (config) from which to read the duration. + data_size: The total number of training examples in one epoch. + batch_size: The number of examples processed per step. + total_steps: The total number of training steps to run. + default: The default value to return when no duration of the name `prefix` + is found in the `config`. Set to `ValueError` (the default) to raise an + error instead of returning a default value. + + Returns: + The number of steps from the config, or the default value. + + Raises: + ValueError if there is no such duration in the config and no default is set. + """ + # Be helpful and make sure only match one of the following suffixes. + suffixes = {"steps", "examples", "epochs", "percent"} + matches = { + f"{prefix}_{s}" + for s in suffixes + if (x := config.get(f"{prefix}_{s}")) is not None and x >= 0 + } + # Note that steps=0 is also a valid value (e.g. to only run evaluators). + assert len(matches) <= 1, f"Only one of '{matches}' should be defined." + + if f"{prefix}_steps" in matches: + return config[f"{prefix}_steps"] + + def to_integer(x): + # Round to nearest but always executed at least one step unless explictily + # asked for 0. E.g. total_epochs=0 vs total_epochs=0.0001 + return max(1, round(x)) if x else 0 + + if batch_size and f"{prefix}_examples" in matches: + return to_integer(config[f"{prefix}_examples"] / batch_size) + + if batch_size and data_size and f"{prefix}_epochs" in matches: + steps_per_epoch = data_size / batch_size + return to_integer(config[f"{prefix}_epochs"] * steps_per_epoch) + + if total_steps and f"{prefix}_percent" in matches: + pct = config[f"{prefix}_percent"] + assert 0.0 <= pct <= 1.0, ( # Be helpful, since it's not obvious. + f"Percents should lie in [0.0, 1.0], but {prefix}_percent is {pct}") + return to_integer(pct * total_steps) + + if default is ValueError: + raise ValueError( + f"Cannot convert {prefix} to steps, due to missing batch_size " + f"({batch_size}), data_size ({data_size}), total_steps ({total_steps})" + ", or corresponding entry in config:\n" + "\n".join(config.keys())) + + return default + + +def create_learning_rate_schedule( + total_steps, batch_size=None, data_size=None, + base=1.0, decay_type="stair", + scale_with_batchsize=False, **kw): + """Creates learning rate schedule, see (internal link). + + Args: + total_steps: The total number of steps to run. + batch_size: The global batch-size optionally used for scaling. + data_size: Number of examples in the training data (for epoch conversion). + base: The starting learning-rate (without warmup). + decay_type: 'linear' or 'cosine', 'rsqrt', 'stair'. + scale_with_batchsize: Whether or not to scale lr automatically. + **kw: extra arguments specific to individual decay_types. Also contains + declaration of `{warmup,cooldown}_{steps,epochs,examples}` that applies + on top of any/all decay_type. + + Returns: + A function learning_rate(step): float -> {"learning_rate": float}. + """ + + def to_steps(name, default=0): + return steps(name, kw, data_size, batch_size, total_steps, default=default) + + warmup_steps = to_steps("warmup") + cooldown_steps = to_steps("cooldown") + + # Early catch hard to backtrack errors due to warmup_steps >= total_steps, + # but let it run for 0 and 1 steps used to eval and debug runs. + assert (total_steps <= 1) or (warmup_steps < total_steps), ( + "warmup_steps is >= total_steps") + + def step_fn(step): + """Step to learning rate function.""" + lr = base + + # This implements the linear scaling rule following + # Goyal et al. at arxiv.org/abs/1706.02677. + # The reference batch size in literature is 256, so we scale the lr to + # adjust to the literature lr when bach_size changes. + if scale_with_batchsize: + lr = lr * batch_size / 256.0 + + progress = (step - warmup_steps) / float(total_steps - warmup_steps) + progress = jnp.clip(progress, 0.0, 1.0) + if decay_type in ("linear", "polynomial"): + power = kw.get("power", 1) + zero = kw.get("end", kw.get("linear_end", 0)) + lr = zero + (lr - zero) * (1.0 - progress) ** power + elif decay_type == "cosine": + lr = lr * 0.5 * (1. + jnp.cos(jnp.pi * progress)) + elif decay_type == "rsqrt": + # See (internal link) for details, especially how to set timescale + # and shift in order to continue smoothly when changing batch-size. + t = to_steps("timescale", default=kw.get("timescale", 10_000)) + shift = to_steps("shift", default=kw.get("shift", 0)) + lr = jnp.where( + warmup_steps <= step, + lr / jnp.sqrt(1 + (step + shift - warmup_steps) / t), # In decay + lr / jnp.sqrt(1 + shift / t)) # In warmup. + elif decay_type == "stair": + i = jnp.searchsorted(jnp.array(kw.get("steps", [])), step + 1) + lr = lr * jnp.take(jnp.array([1.0] + list(kw.get("mults", []))), i) + else: + raise ValueError(f"Unknown lr type {decay_type}") + + if warmup_steps: + lr = lr * jnp.minimum(1., step / warmup_steps) + if cooldown_steps: + lr = lr * jnp.minimum(1., (total_steps - step) / cooldown_steps) + + return jnp.asarray(lr, dtype=jnp.float32) + + return step_fn + + +def get_mixup(rng, p): + """Perform mixup https://arxiv.org/abs/1710.09412.""" + rng, rng_mixup = jax.random.split(rng) + a = jax.random.beta(rng_mixup, p, p) + a = jnp.maximum(a, 1.0 - a) # see (internal link) for the context. + def _mixup(*things, **more_things): + mix = lambda thing: a * thing + (1 - a) * jnp.roll(thing, shift=1, axis=0) + return rng, *jax.tree.map(mix, (things, more_things)) + return _mixup + + +# For backwards compatability with legacy code. +def mixup(rng, *things, p, **more_things): + return get_mixup(rng, p)(*things, **more_things) + + +def sync(): + """Syncs hosts and empties async computation queue.""" + x = reshard(np.ones(jax.device_count()), + jax.sharding.PositionalSharding(jax.devices())) + jax.jit(jnp.sum)(x).block_until_ready() + + +def check_and_compile_patterns(patterns): + """Validates and compiles a list of param-patterns. + + The validation consists of checking for common mistakes, currently only that + the pattern does not start with a slash, because unlike FLAX, our parameter + names don't start with a slash. + + Args: + patterns: a single (string) pattern (regex), or a list of patterns. + + Returns: + A list of compiled and verified regexes. + """ + if isinstance(patterns, str): + patterns = [patterns] + + assert isinstance(patterns, (list, tuple)), patterns + + def check_and_compile(pattern): + assert not pattern.startswith("/"), ( + f"Big vision parameter names never start with '/': '{pattern}") + return re.compile(pattern) + + return list(map(check_and_compile, patterns)) + + +def make_mask_trees(tree, patterns, *, log=None): + """Returns a boolean mask tree for every pattern (only first match).""" + compiled_patterns = check_and_compile_patterns(patterns) + + def matchfirst(name, _): + matches = [] + for pattern in compiled_patterns: + matches.append(not any(matches) and bool(pattern.fullmatch(name))) + if log is not None and True in matches and jax.process_index() == 0: + logging.info("%s: %s - matched by %s", log, name, + patterns[matches.index(True)]) + return np.array(matches) + + multimask = tree_map_with_names(matchfirst, tree) + return [ + jax.tree.map(lambda matches, i=idx: matches[i], multimask) + for idx in range(len(patterns)) + ] + + +@contextlib.contextmanager +def profile(name, ttl=3 * 365 * 24 * 3600, noop=False): + if not noop: + sess = startstop_prof_at_steps(None, name=name, ttl=ttl) + yield + if not noop: + startstop_prof_at_steps(sess, name=name, ttl=ttl) + + +def startstop_prof(sess, step=None, first_step=0, + log_steps=1, surround=10, **kw): + """Runs the profiler for `surround` steps around the next `log_steps`.""" + first_log = first_step + log_steps - (first_step % log_steps) + # don't start before first! + start = max(first_log - surround//2, first_step + 1) + return startstop_prof_at_steps(sess, step, start, start + surround, **kw) + + +def startstop_prof_at_steps( + sess, step=None, first_step=None, last_step=None, + name="steps", ttl=3 * 365 * 24 * 3600): + del sess, step, first_step, last_step, name, ttl + pass # TODO: implement using `jax.profiler` API. Needs workdir. + + +# This is a very minimal variant for open-sourcing. Our internal code makes use +# of multiple internal logging tools instead. +class BigVisionMetricWriter: + """A class for logging metrics.""" + + def __init__(self, xid=-1, wid=-1, workdir=None, config=None): + self.step_start(0) + if jax.process_index() != 0: return # Only one host shall write stuff. + + self.pool = multiprocessing.pool.ThreadPool(1) # 1 is important here. + self.fname = None + if workdir: + if xid != -1 and wid != -1: + self.fname = os.path.join(workdir, + f"big_vision_{xid}_{wid}_metrics.txt") + else: + self.fname = os.path.join(workdir, "big_vision_metrics.txt") + if config: + with gfile.GFile(os.path.join(workdir, "config.json"), "w") as f: + f.write(config.to_json()) + + def step_start(self, step): + self.step = step + self.step_metrics = {} + + def measure(self, name, value): + """Logs the metric value.""" + if jax.process_index() != 0: return # Only one host shall write stuff. + + # Convenience for accepting scalar np/DeviceArrays, as well as N-d single + # scalars, like [[[123]]] or similar, avoiding silly mistakes. + value = np.array(value).squeeze() + + # If the value is a scalar, we keep it in mind to append a line to the logs. + # If it has any structure, we instead just log its shape. + value = float(value) if value.ndim == 0 else value.shape + + logging.info(f"\u001b[35m[{self.step}]\u001b[0m {name} = {value}") + logging.flush() + self.step_metrics[name] = value + + return value # Just for convenience + + def step_end(self): + """Ends a training step, write its full row.""" + if not self.step_metrics: return + + def write(metrics): + with gfile.GFile(self.fname, "a") as f: + f.write(json.dumps({"step": self.step, **metrics}) + "\n") + + if self.fname: + self.pool.apply(lambda: None) # Potentially wait for past writes. + self.pool.apply_async(write, (self.step_metrics,)) + + def close(self): + self.step_end() + if jax.process_index() == 0: + self.pool.close() + self.pool.join() + + +def maybe_cleanup_workdir(workdir, cleanup, info): + """Potentially removes workdirs at end of run for cleanup.""" + if not workdir: + return + + if not cleanup: + info("Logs/checkpoints are in %s", workdir) + elif jax.process_index() == 0: + gfile.rmtree(workdir) + try: # Only need this on the last work-unit, if already empty. + gfile.remove(os.path.join(workdir, "..")) + except tf.errors.OpError: + pass + + +def tree_broadcast(prefix, target): + """Broadcasts a prefix tree to a full tree. + + Input-output examples: + 1. prefix: {"x": 10, "y": 20} + target: {"x": {"a": 1, "b": 2}, "y": 3} + + Result: {"x": {"a": 10, "b": 10}, "y": 20} + + 2. prefix: 100 + target: {"x": {"a": 1, "b": 2}, "y": 3} + + Result: {"x": {"a": 100, "b": 100}, "y": 100} + + 3. prefix: {"x": 10} + target: {"x": {"a": 1, "b": 2}, "y": 3} + + Result: ValueError + + Args: + prefix: prefix pytree. + target: boradcast target for a prefix tree. + + Returns: + prefix tree broadcasted to a target tree. + """ + def _broadcast(leaf, subtree): + return jax.tree.map(lambda _: leaf, subtree) + return jax.tree.map(_broadcast, prefix, target) + + +def reshard(tree, shardings): + """Take an arbitrarily* sharded pytree and shard it according to `shardings`. + + This is a no-op for tree elements which are already sharded as requested. + + *Arrays that are fully addressable (for example, CPU arrays) are assumed to be + identical (i.e. replicated) across hosts. + + *It does not work if an element of `tree` is not fully-addressable, unless its + sharding is already consistent with the target sharding. + If this is needed, please ping lbeyer@ or akolesnikov@. + + Args: + tree: a pytree of arrays. + shardings: a (prefix) pytree of jax array shardings. + Returns: + A pytree of global jax arrays that follows provided shardings. + """ + def _make_global_arr(x, shard, shape): + # Avoid unnecessary copies and transfers: + if hasattr(x, "sharding") and x.sharding.is_equivalent_to(shard, len(shape)): # pylint: disable=line-too-long + return x + if not getattr(x, "is_fully_addressable", True): + raise RuntimeError("Trying to reshard a non-fully-addressable array. " + "Please see the doc-comment for detailed explanation.") + x = jax.device_get(x) # Might be on local devices. + xs = [jax.device_put(x[s], device=d) + for d, s in shard.addressable_devices_indices_map(shape).items()] + return jax.make_array_from_single_device_arrays(shape, shard, xs) + + shapes = jax.tree.map(np.shape, tree) + shardings = tree_broadcast(shardings, tree) + return jax.tree.map(_make_global_arr, tree, shardings, shapes) + + +def put_cpu(x): + """Places array/pytree on a CPU device.""" + return jax.device_put(x, jax.local_devices(backend="cpu")[0]) + + +def make_fsarray_from_local_slice(local_slice, global_devices): + """Create a fully-sharded global device array from local host arrays. + + Args: + local_slice: Something convertible to a numpy array (eg also TF tensors) + that is this host's slice of the global array. + global_devices: The list of global devices. Needed for consistent ordering. + + Returns: + The global on-device array which consists of all local slices stacked + together in the order consistent with the devices. + """ + mesh = jax.sharding.Mesh(global_devices, ("devices",)) + sharding = jax.sharding.NamedSharding( + mesh, jax.sharding.PartitionSpec("devices")) + local_ds = mesh.local_devices + + x = np.asarray(memoryview(local_slice)) # No-copy: http://(internal link) + xs = jax.device_put(np.split(x, len(local_ds), axis=0), local_ds) + + global_shape = (x.shape[0] * jax.process_count(), *x.shape[1:]) + return jax.make_array_from_single_device_arrays(global_shape, sharding, xs) + + +def get_local_slice_from_fsarray(global_array): + """Return numpy array for the host-local slice of fully-sharded array. + + Args: + global_array: JAX array, globally sharded on devices across hosts. + + Returns: + NumPy array that holds the part of `global_array` that is held by the + devices on the host that calls this function. + """ + # For now, for simplicity, we only implement slicing along the first axis. + for shard in global_array.addressable_shards: + assert all(idx == slice(None) for idx in shard.index[1:]), ( + f"global_array is sharded along non-first dimensions:\n{shard.index}") + + # Get the shards back in the same order in which the global array was created + # in the first place. This makes sure it's consistent with other things in the + # batch, for example (assuming the whole batch is consistent). + m = {s.device: s for s in global_array.addressable_shards} + local_shards = [m[d] for d in global_array.sharding.mesh.local_devices] + return np.concatenate([jax.device_get(s.data) for s in local_shards], axis=0) + + +def assert_local_slices_same(*global_arrays): + """Check whether all `global_arrays` have local slices at the same indices.""" + slices = [ + tuple( + tuple((idx.start, idx.end, idx.step) for idx in s.index) + for s in a.addressable_shards) + for a in global_arrays] + assert len(set(slices)) == 1, f"Not all slices are the same: {slices}" + + +# TODO: remove this logic when the +# issue is github fixed https://github.com/google/jax/issues/15600. +def jit_cpu(**extra_kwargs): + def _decorator(fun): + def _wrapped(*args, **kwargs): + sh = jax.sharding.SingleDeviceSharding( + jax.local_devices(backend="cpu")[0] + ) + return jax.jit(fun, **extra_kwargs, out_shardings=sh)(*args, **kwargs) + return _wrapped + return _decorator + + +def create_device_mesh( + config_mesh, + *, + allow_split_physical_axes=False, +): + """Returns a JAX device mesh. + + Args: + config_mesh: A list of tuples of (axis_name, axis_size). It is advised to + sort the axis in increasing order of network communication intensity. + allow_split_physical_axes: Whether to allow splitting physical axes. + """ + devices = jax.devices() + mesh_axes, mesh_size = tuple(zip(*config_mesh)) + # Because jax.utils do not support `-1` shape size. + mesh_size = np.array(devices).reshape(mesh_size).shape + device_mesh = mesh_utils.create_device_mesh( + mesh_size, + devices=devices, + allow_split_physical_axes=allow_split_physical_axes) + return jax.sharding.Mesh(device_mesh, mesh_axes) diff --git a/big_vision/utils_test.py b/big_vision/utils_test.py new file mode 100644 index 0000000000000000000000000000000000000000..20680ee689262ef10e7a69d0446cc35f0fcf08bf --- /dev/null +++ b/big_vision/utils_test.py @@ -0,0 +1,360 @@ +# Copyright 2024 Big Vision Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for utils.""" + +from functools import partial +import os + +from absl.testing import parameterized +from big_vision import utils +import chex +import flax +import jax +from jax.experimental.array_serialization import serialization as array_serial +import jax.numpy as jnp +import numpy as np +import tensorflow as tf + +from tensorflow.io import gfile + + +NDEV = 4 + + +def setUpModule(): + chex.set_n_cpu_devices(NDEV) + + +class PadShardUnpadTest(chex.TestCase, tf.test.TestCase): + BATCH_SIZES = [NDEV, NDEV + 1, NDEV - 1, 5 * NDEV, 5 * NDEV + 1, 5 * NDEV - 1] + DTYPES = [np.float32, np.uint8, jax.numpy.bfloat16, np.int32] + + def tearDown(self): + chex.clear_trace_counter() + super().tearDown() + + @parameterized.product(dtype=DTYPES, bs=BATCH_SIZES) + def test_basics(self, dtype, bs): + # Just tests that basic calling works without exploring caveats. + @partial(utils.pad_shard_unpad, static_argnums=()) + def add(a, b): + return a + b + + x = jnp.arange(bs, dtype=dtype) + y = add(x, 10 * x) + chex.assert_type(y.dtype, x.dtype) + np.testing.assert_allclose(np.float64(y), np.float64(x + 10*x)) + + @parameterized.parameters(DTYPES) + def test_min_device_batch_avoids_recompile(self, dtype): + @partial(utils.pad_shard_unpad, static_argnums=()) + @jax.jit + @chex.assert_max_traces(n=1) + def add(a, b): + return a + b + + chex.clear_trace_counter() + + for bs in self.BATCH_SIZES: + x = jnp.arange(bs, dtype=dtype) + y = add(x, 10 * x, min_device_batch=9) # pylint: disable=unexpected-keyword-arg + chex.assert_type(y.dtype, x.dtype) + np.testing.assert_allclose(np.float64(y), np.float64(x + 10*x)) + + @parameterized.product(dtype=DTYPES, bs=BATCH_SIZES) + def test_static_argnum(self, dtype, bs): + @partial(utils.pad_shard_unpad, static_argnums=(1,)) + def add(a, b): + return a + b + + x = jnp.arange(bs, dtype=dtype) + y = add(x, dtype(10)) + chex.assert_type(y.dtype, x.dtype) + np.testing.assert_allclose(np.float64(y), np.float64(x + 10)) + + @parameterized.product(dtype=DTYPES, bs=BATCH_SIZES) + def test_static_argnames(self, dtype, bs): + # In this test, leave static_argnums at the default value too, in order to + # test the default/most canonical path where `params` are the first arg. + @partial(utils.pad_shard_unpad, static_argnames=('b',)) + def add(params, a, *, b): + return params * a + b + + x = jnp.arange(bs, dtype=dtype) + y = add(dtype(5), x, b=dtype(10)) + chex.assert_type(y.dtype, x.dtype) + np.testing.assert_allclose(np.float64(y), np.float64(5 * x + 10)) + + +class TreeTest(tf.test.TestCase): + + def setUp(self): + super().setUp() + + self.d1 = {'w1': 1, 'w2': 2, 'w34': (3, 4)} + self.d1_flat = [1, 2] + self.d1_flat_jax = jax.tree.flatten(self.d1)[0] + self.d1_named_flat = [('w1', 1), ('w2', 2), ('w34/0', 3), ('w34/1', 4)] + self.d1_named_flat_jax = [('w1', 1), ('w2', 2), ('w34/0', 3), ('w34/1', 4)] + + self.d2 = {'conv1': {'kernel': 0, 'bias': 1}, + 'conv2': {'kernel': 2, 'bias': 3}} + self.d2_flat = [1, 0, 3, 2] + self.d2_flat_jax = jax.tree.flatten(self.d2)[0] + self.d2_named_flat = [('conv1/bias', 1), ('conv1/kernel', 0), + ('conv2/bias', 3), ('conv2/kernel', 2)] + self.d2_named_flat_jax = [('conv1/bias', 1), ('conv1/kernel', 0), + ('conv2/bias', 3), ('conv2/kernel', 2)] + self.d2_named_flat_inner = [ + ('conv1/bias', 1), ('conv1/kernel', 0), ('conv1', self.d2['conv1']), + ('conv2/bias', 3), ('conv2/kernel', 2), ('conv2', self.d2['conv2']), + ('', self.d2), + ] + + # This is a very important testcase that checks whether we correctly + # recover jax' traversal order, even though our custom traversal may not + # be consistent with jax' traversal order. In particular, jax traverses + # FlaxStruct in the order of attribute definition, while our custom + # traversal is alphabetical. + @flax.struct.dataclass + class FlaxStruct(): + v3: float + v2: int + v1: str + self.d3 = {'a': 0, 'flax': FlaxStruct(2.0, 1, 's')} + self.d3_flat = [0, 1, 2.0, 's'] + self.d3_flat_jax = jax.tree.flatten(self.d3)[0] + self.d3_named_flat = [ + ('a', 0), ('flax/v1', 's'), ('flax/v2', 1), ('flax/v3', 2.0)] + self.d3_named_flat_jax = [ + ('a', 0), ('flax/v3', 2.0), ('flax/v2', 1), ('flax/v1', 's')] + + def test_traverse_with_names(self): + names_and_vals = list(utils._traverse_with_names(self.d1)) + self.assertEqual(names_and_vals, self.d1_named_flat) + + names_and_vals = list(utils._traverse_with_names(self.d2)) + self.assertEqual(names_and_vals, self.d2_named_flat) + + names_and_vals = list(utils._traverse_with_names( + self.d2, with_inner_nodes=True)) + self.assertEqual(names_and_vals, self.d2_named_flat_inner) + + names_and_vals = list(utils._traverse_with_names(self.d3)) + self.assertEqual(names_and_vals, self.d3_named_flat) + + def test_tree_flatten_with_names(self): + names_and_vals = utils.tree_flatten_with_names(self.d1)[0] + self.assertEqual(names_and_vals, self.d1_named_flat_jax) + self.assertEqual([x for _, x in names_and_vals], self.d1_flat_jax) + + names_and_vals = utils.tree_flatten_with_names(self.d2)[0] + self.assertEqual(names_and_vals, self.d2_named_flat_jax) + self.assertEqual([x for _, x in names_and_vals], self.d2_flat_jax) + + names_and_vals = utils.tree_flatten_with_names(self.d3)[0] + self.assertEqual(names_and_vals, self.d3_named_flat_jax) + self.assertEqual([x for _, x in names_and_vals], self.d3_flat_jax) + + def test_tree_map_with_names(self): + d1 = utils.tree_map_with_names( + lambda name, x: -x if 'w2' in name else x, self.d1) + self.assertEqual(d1, {'w1': 1, 'w2': -2, 'w34': (3, 4)}) + + d1 = utils.tree_map_with_names( + lambda name, x1, x2: x1 + x2 if 'w2' in name else x1, self.d1, self.d1) + self.assertEqual(d1, {'w1': 1, 'w2': 4, 'w34': (3, 4)}) + + def test_recover_tree(self): + keys = ['a/b', 'a/c/x', 'a/c/y', 'd'] + values = [0, 1, 2, 3] + self.assertEqual(utils.recover_tree(keys, values), + {'a': {'b': 0, 'c': {'x': 1, 'y': 2}}, 'd': 3}) + + def test_make_mask_trees(self): + F, T = False, True # pylint: disable=invalid-name + tree = {'a': {'b': 0, 'x': 1}, 'b': {'x': 2, 'y': 3}} + msk1 = {'a': {'b': F, 'x': T}, 'b': {'x': T, 'y': F}} + msk2 = {'a': {'b': F, 'x': F}, 'b': {'x': F, 'y': T}} + # Note that 'b' matches '^b' only and not '.*/b'. + # Also note that "b/x" is matched by rule 1 only (because it comes first). + self.assertEqual( + utils.make_mask_trees(tree, ('.*/x', 'b/.*')), [msk1, msk2]) + + def test_tree_get(self): + tree = {'a': {'b': 0, 'x': 1}, 'b': {'x': 2, 'y': 3}} + self.assertEqual(utils.tree_get(tree, 'a/b'), 0) + self.assertEqual(utils.tree_get(tree, 'a/x'), 1) + self.assertEqual(utils.tree_get(tree, 'b/x'), 2) + self.assertEqual(utils.tree_get(tree, 'b/y'), 3) + self.assertEqual(utils.tree_get(tree, 'a'), tree['a']) + self.assertEqual(utils.tree_get(tree, 'b'), tree['b']) + + def test_tree_replace(self): + tree = {'a': {'b': 2, 'c': 3}, 'c': 4} + replacements = { + 'a/b': 'a/b/x', # replaces 'a/b' with 'a/b/x' + '.*c': 'C', # replaces 'c' with 'C' ('a/c' is removed) + 'C': 'D', # replaces 'C' (which was 'c') with 'D' + '.*/c': None, # removes 'a/c' + } + tree2 = utils.tree_replace(tree, replacements) + self.assertEqual(tree2, {'D': 4, 'a': {'b': {'x': 2}}}) + + def test_tree_compare(self): + tree1_only, tree2_only, dtype_shape_mismatch = utils.tree_compare( + {'a': {'b': jnp.array(2), 'c': jnp.array(3)}}, + {'a': {'B': jnp.array(2), 'c': jnp.array(3.)}}, + ) + self.assertEqual(tree1_only, {'a/b'}) + self.assertEqual(tree2_only, {'a/B'}) + self.assertEqual( + dtype_shape_mismatch, + {'a/c': [(jnp.dtype('int32'), ()), (jnp.dtype('float32'), ())]}) + + +class StepConversionTest(parameterized.TestCase, tf.test.TestCase): + + @parameterized.named_parameters( + ('nice_steps', 1000, None, None, dict(foo_steps=3), 3), + ('nice_epochs', 1000, 100, None, dict(foo_epochs=3), 30), + ('nice_examples', None, 100, None, dict(foo_examples=300), 3), + ('nice_percent', None, None, 10, dict(foo_percent=0.30), 3), + ('ignore_neg', 1000, 100, 10, dict(foo_steps=-1, foo_epochs=-1, + foo_examples=-1, foo_percent=0.30), 3), + ('zero_steps', None, None, 10, dict(foo_percent=0.0), 0), + ('offbyone_steps', 1001, None, None, dict(foo_steps=3), 3), + ('offbyone_epochs', 1001, 100, None, dict(foo_epochs=3), 30), + ('offbyone_examples', None, 101, None, dict(foo_examples=300), 3), + ('offbyone_percent', None, None, 11, dict(foo_percent=0.30), 3), + ) + def test_steps(self, data_size, batch_size, total, cfg, expected): + # Correct default usage: + step = utils.steps('foo', cfg, data_size=data_size, batch_size=batch_size, + total_steps=total) + self.assertEqual(step, expected) + + # Inexitent entry: + with self.assertRaises(ValueError): + step = utils.steps('bar', cfg, data_size=data_size, batch_size=batch_size, + total_steps=total) + step = utils.steps('bar', cfg, data_size=data_size, batch_size=batch_size, + total_steps=total, default=1234) + self.assertEqual(step, 1234) + + +class CreateLearningRateScheduleTest(parameterized.TestCase, tf.test.TestCase): + + @parameterized.named_parameters( + ('linear', 'linear', {}, 13, .5), + ('polynomial', 'polynomial', {'end': .1, 'power': 2}, 13, .325), + ('cosine', 'cosine', {}, 13, .5), + ('rsqrt', 'rsqrt', {'timescale': 1}, 13, 0.3333333), + ('stair_5', 'stair', {'steps': [10], 'mults': [.5]}, 5, 1.), + ('stair_10', 'stair', {'steps': [10], 'mults': [.5]}, 10, .5), + ('warmup_before', 'rsqrt', {'timescale': 1}, 3, .6), + ('cooldown_after', 'rsqrt', {'timescale': 1}, 20, .05), + ) + def test_schedule(self, decay_type, extra_kwargs, step, expected_lr): + lr_fn = utils.create_learning_rate_schedule( + total_steps=21, + batch_size=512, + base=.5, + decay_type=decay_type, + scale_with_batchsize=True, + warmup_steps=5, + cooldown_steps=5, + **extra_kwargs) + lr = lr_fn(step) + self.assertAlmostEqual(lr, expected_lr) + + +class CheckpointTest(tf.test.TestCase): + + def setup(self): + gacm = array_serial.GlobalAsyncCheckpointManager() + + save_path = os.path.join(self.create_tempdir('workdir'), 'checkpoint.bv') + x = utils.put_cpu(np.array([1, 2, 3, 4])) + y = utils.put_cpu(np.array([5, 6, 7, 8])) + ckpt = {'x': x, 'y': {'z': y}} + + sharding = jax.sharding.SingleDeviceSharding( + jax.local_devices(backend='cpu')[0] + ) + shardings = jax.tree.map(lambda _: sharding, ckpt) + + return gacm, save_path, ckpt, shardings + + def test_save_and_load(self): + gacm, save_path, ckpt, shardings = self.setup() + step = 100 + utils.save_checkpoint_ts(gacm, ckpt, save_path, step, keep=True) + gacm.wait_until_finished() + ckpt_loaded = utils.load_checkpoint_ts(save_path, + tree=ckpt, shardings=shardings) + chex.assert_trees_all_equal(ckpt_loaded, ckpt) + + save_path_step = f'{save_path}-{step:09d}' + ckpt_loaded_step = utils.tsload(save_path_step, shardings=shardings) + chex.assert_trees_all_equal(ckpt_loaded_step, ckpt) + + def test_save_and_partial_load(self): + gacm, save_path, ckpt, shardings = self.setup() + utils.save_checkpoint_ts(gacm, ckpt, save_path, step=100) + gacm.wait_until_finished() + _ = shardings.pop('x'), ckpt.pop('x') + ckpt_loaded = utils.load_checkpoint_ts(save_path, + tree=ckpt, shardings=shardings) + chex.assert_trees_all_equal(ckpt_loaded, ckpt) + + def test_save_and_cpu_load(self): + gacm, save_path, ckpt, _ = self.setup() + utils.save_checkpoint_ts(gacm, ckpt, save_path, step=100) + gacm.wait_until_finished() + ckpt_loaded = utils.load_checkpoint_ts(save_path) + chex.assert_trees_all_equal(ckpt_loaded, ckpt) + + def test_save_and_partial_cpu_load(self): + gacm, save_path, ckpt, _ = self.setup() + utils.save_checkpoint_ts(gacm, ckpt, save_path, step=100) + gacm.wait_until_finished() + ckpt.pop('y') + ckpt_loaded = utils.load_checkpoint_ts(save_path, regex='x.*') + chex.assert_trees_all_equal(ckpt_loaded, ckpt) + + def test_keep_deletes(self): + def x(tree, factor): # x as in "times" for multiplying. + return jax.tree.map(lambda a: a * factor, tree) + + gacm, save_path, ckpt, _ = self.setup() + utils.save_checkpoint_ts(gacm, ckpt, save_path, step=100, keep=False) + utils.save_checkpoint_ts(gacm, x(ckpt, 2), save_path, step=200, keep=True) + utils.save_checkpoint_ts(gacm, x(ckpt, 3), save_path, step=300, keep=False) + gacm.wait_until_finished() + ckpt_loaded_200 = utils.tsload(f'{save_path}-{200:09d}') + chex.assert_trees_all_equal(ckpt_loaded_200, x(ckpt, 2)) + ckpt_loaded_300 = utils.tsload(f'{save_path}-{300:09d}-tmp') + chex.assert_trees_all_equal(ckpt_loaded_300, x(ckpt, 3)) + ckpt_loaded_last = utils.load_checkpoint_ts(save_path) + chex.assert_trees_all_equal(ckpt_loaded_last, x(ckpt, 3)) + with self.assertRaises(Exception): # Can different types depending on fs. + _ = utils.tsload(f'{save_path}-{100:09d}') + # Test that ckpt@100 was deleted + self.assertFalse(gfile.exists(f'{save_path}-{100:09d}-tmp')) + + +if __name__ == '__main__': + tf.test.main() diff --git a/build/lib/scenic/__init__.py b/build/lib/scenic/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/build/lib/scenic/app.py b/build/lib/scenic/app.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/build/lib/scenic/main.py b/build/lib/scenic/main.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/ckpts/clip_vit_l14_with_masks_6c17944 b/ckpts/clip_vit_l14_with_masks_6c17944 new file mode 100644 index 0000000000000000000000000000000000000000..215495e23ca242ae84b6ea1dc4a756c3a2ac602c --- /dev/null +++ b/ckpts/clip_vit_l14_with_masks_6c17944 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26bb25bb66e747705143a35f76f5294114746e531436949d96933019cd17b2e6 +size 1048576 diff --git a/ckpts/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b b/ckpts/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b new file mode 100644 index 0000000000000000000000000000000000000000..21d2912d4b08d035e8b5d16f2852288f3a67b559 --- /dev/null +++ b/ckpts/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a05870e6eaf244a52382fb6935b955ca7e6e873181a0583d552a8330d228b900 +size 1048576 diff --git a/ckpts/owl2-l14-1008-st-ngrams-ft-lvisbase-ens-cold-weight-04_8ca674c b/ckpts/owl2-l14-1008-st-ngrams-ft-lvisbase-ens-cold-weight-04_8ca674c new file mode 100644 index 0000000000000000000000000000000000000000..8e95f93bff54a951abaec26cad050ec874249a7d --- /dev/null +++ b/ckpts/owl2-l14-1008-st-ngrams-ft-lvisbase-ens-cold-weight-04_8ca674c @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a276d61fb7c1ec7bbf68fa7d5d34a8032b6aa4f15170c1125208f77133b9c17 +size 1048576 diff --git a/images/scenic_design.jpg b/images/scenic_design.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f330bf75c9a8433a833ca288a41c0f219a9d8ffb --- /dev/null +++ b/images/scenic_design.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b341d7d1fa31b679c346834e568221da3616196040d302fd65aa7d417010ee6 +size 668643 diff --git a/images/scenic_logo.jpg b/images/scenic_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76fbd8bfa116986e38b96293a7d4c7132589ad88 --- /dev/null +++ b/images/scenic_logo.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e74593754532c72b37f9c16b386609d794467e2baf0c5532266e69e8c0c954b +size 163943 diff --git a/images/scenic_logo.pdf b/images/scenic_logo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c22604a5800abf0712331c3d6e85543315b7ef7b Binary files /dev/null and b/images/scenic_logo.pdf differ diff --git a/images/scenic_logo.png b/images/scenic_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9fb1f0d03dc18fcbab60a6b01073e1997be6b81e Binary files /dev/null and b/images/scenic_logo.png differ diff --git a/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b b/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b new file mode 100644 index 0000000000000000000000000000000000000000..a04baaa889d69a1e5e275aed48577bb50abc3588 --- /dev/null +++ b/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2751b02a7ba86d4855ef73c9fa8df8e022d4223d2e42196bcab029e6f95d8b06 +size 618308102 diff --git a/owlv2_helper.py b/owlv2_helper.py new file mode 100644 index 0000000000000000000000000000000000000000..fb8768be029d2f4233d610d8756363885ba7fdb0 --- /dev/null +++ b/owlv2_helper.py @@ -0,0 +1,155 @@ +import os +from matplotlib import pyplot as plt +import skimage +from skimage import io as skimage_io +import numpy as np +import re +import cv2 + + +def rescale_detection_box(boxes, image): + h_img, w_img, _ = image.shape + size = max(h_img, w_img) + + pad_h = size - h_img + pad_w = size - w_img + + recovered_boxes = [] + for box in boxes: + cx, cy, w, h = box + cx = cx * size + cy = cy * size + w = w * size + h = h * size + + # if cx < 0 or cx > w_img or cy < 0 or cy > h_img: + # continue; + + x1 = cx - w / 2 + y1 = cy - h / 2 + x2 = cx + w / 2 + y2 = cy + h / 2 + recovered_boxes.append((x1, y1, x2, y2)) + return recovered_boxes + + + + +def read_images(image_dir): + images = [] + filenames = [p for p in os.listdir(image_dir) if os.path.splitext(p)[-1].lower() in [".png", ".jpg", ".jpeg",]] + filenames.sort(key=lambda p: os.path.splitext(p)[0]) + for filename in filenames: + file_path = os.path.join(image_dir, filename) + image_uint8 = skimage_io.imread(file_path) + image = image_uint8.astype(np.float32) / 255.0 + images.append(image) + return images, filenames + + + + +def preprocess_images(images, model_input_size): + processed_images = [] + for image in images: + # Pad image to square + h, w, d = image.shape + size = max(h, w) + image_padded = np.pad(image, ((0, size - h), (0, size - w), (0, 0)), constant_values=0.5) + # Resize image to fit model's input size + image_resized = skimage.transform.resize( + image_padded, + (model_input_size, model_input_size), + anti_aliasing=True, + ) + processed_images.append(image_resized) + # Shape: (b, h, w, d) + return np.array(processed_images, dtype=np.float32) + + + + +def too_small(bbox, threshold=400): + x1, y1, x2, y2 = bbox + width = max(0, x2 - x1) + height = max(0, y2 - y1) + area = width * height + # Return True if area is too small + return area < threshold + + +def too_large(bbox, image, threshold=0.9): + x1, y1, x2, y2 = bbox + + bbox_width = x2 - x1 + bbox_height = y2 - y1 + bbox_area = bbox_width * bbox_height + + image_height, image_width = image.shape[:2] + image_area = image_width * image_height + + area_ratio = bbox_area / image_area + return area_ratio >= threshold + + + + +def plot_bboxes_on_orig_image(image, boxes, output_path): + plt.clf() + plt.imshow(image) + plt.axis('off') + + for box in boxes: + x1, y1, x2, y2 = box + plt.plot( + [x1, x2, x2, x1, x1], + [y1, y1, y2, y2, y1], + linewidth=0.8, alpha=0.6 + ) + + plt.savefig(output_path, bbox_inches='tight', pad_inches=0.1, dpi=300) + plt.close() + print(f" Done! Visualization saved to {output_path}") + + + + +def compute_iou(box1, box2): + x1_inter = max(box1[0], box2[0]) + y1_inter = max(box1[1], box2[1]) + x2_inter = min(box1[2], box2[2]) + y2_inter = min(box1[3], box2[3]) + inter_width = max(0, x2_inter - x1_inter) + inter_height = max(0, y2_inter - y1_inter) + inter_area = inter_width * inter_height + box1_area = (box1[2] - box1[0]) * (box1[3] - box1[1]) + box2_area = (box2[2] - box2[0]) * (box2[3] - box2[1]) + union_area = box1_area + box2_area - inter_area + return inter_area / union_area if union_area > 0 else 0 + + + + +def remove_overlapping_bboxes(bboxes, iou_threshold=0.7): + if not bboxes: + return [] + bboxes = sorted(bboxes, key=lambda x: (x[2] - x[0]) * (x[3] - x[1]), reverse=True) + keep = [] + for bbox in bboxes: + should_keep = True + for kept_bbox in keep: + if compute_iou(bbox, kept_bbox) > iou_threshold: + should_keep = False + break + if should_keep: + keep.append(bbox) + return keep + + + + +def get_centroid(bbox): + x1, y1, x2, y2 = bbox + cx = (x1 + x2) / 2 + cy = (y1 + y2) / 2 + return (int(cx), int(cy)) \ No newline at end of file diff --git a/owlv2_helper_functions.py b/owlv2_helper_functions.py new file mode 100644 index 0000000000000000000000000000000000000000..cbf991db19325bfe6e777daba431b4877e3daa4e --- /dev/null +++ b/owlv2_helper_functions.py @@ -0,0 +1,290 @@ +import os +from matplotlib import pyplot as plt +import skimage +from skimage import io as skimage_io +import numpy as np +import re + + +def rescale_detection_box(boxes, image): + h_img, w_img, _ = image.shape + size = max(h_img, w_img) + + pad_h = size - h_img + pad_w = size - w_img + + recovered_boxes = [] + for box in boxes: + cx, cy, w, h = box + cx = cx * size + cy = cy * size + w = w * size + h = h * size + + # if cx < 0 or cx > w_img or cy < 0 or cy > h_img: + # continue; + + x1 = cx - w / 2 + y1 = cy - h / 2 + x2 = cx + w / 2 + y2 = cy + h / 2 + recovered_boxes.append((x1, y1, x2, y2)) + return recovered_boxes + + + +def plot_boxes_on_image(image, text_queries, + scores, boxes, labels, + filename, score_threshold, + output_dir): + + colors = ['red', 'green', 'blue', 'orange', 'purple', 'pink', 'cyan', 'magenta', 'lightblue', 'darkorange', 'darkgreen', 'darkred', 'lavender', 'brown', 'gray', 'black'] + + # 显示原始图片 + plt.clf() + plt.imshow(image) + plt.axis('off') + + # 绘制边界框 + for score, box, label in zip(scores, boxes, labels): + if score < score_threshold: + continue; + + x1, y1, x2, y2 = box + # print(f"box coord: {[x1, y1, x2, y2]}") + plt.plot( + [x1, x2, x2, x1, x1], [y1, y1, y2, y2, y1], + color=colors[label], linewidth=0.6, alpha=0.6 + ) + plt.text( + x1, y2 + 0.015, + f'{text_queries[label]}: {score:1.2f}', + ha='left', va='top', color=colors[label], fontsize=6, + bbox={'facecolor': 'white', 'edgecolor': colors[label], 'boxstyle': 'square,pad=.3', 'alpha': 0.5} + ) + # 保存图片到指定路径 OUTPUT_DIR + output_path = os.path.join(output_dir, filename) + plt.savefig(output_path, bbox_inches='tight', pad_inches=0.1, dpi=300) + print(f"Image with boxes saved to {output_path}") + + + +def image_based_plot_boxes_on_image(image, text_queries, scores, boxes, filename,output_dir): + colors = ['red', 'green', 'blue', 'orange', 'cyan', 'magenta', 'lightblue', 'darkorange', 'lavender'] + + plt.clf() + plt.imshow(image) + plt.axis('off') + for score, box, text_query, color in zip(scores, boxes, text_queries, colors): + x1, y1, x2, y2 = box + plt.plot( + [x1, x2, x2, x1, x1], + [y1, y1, y2, y2, y1], + color=color, linewidth=1 + ) + plt.text( + x1, y2 + 0.015, + f'{text_query}: {score:1.2f}', + ha='left', va='top', color=color, fontsize=6, + bbox={'facecolor': 'white', 'edgecolor': color, 'boxstyle': 'square,pad=.3','alpha': 0.5} + ) + output_path = os.path.join(output_dir, filename) + plt.savefig(output_path, bbox_inches='tight', pad_inches=0.1, dpi=300) + print(f"Image with boxes saved to {output_path}") + + + +def get_iou(bbox1, bbox2): + # 分别解包 bbox1 和 bbox2 的坐标 + x1_min, y1_min, x1_max, y1_max = bbox1 + x2_min, y2_min, x2_max, y2_max = bbox2 + + # 计算交集的顶点坐标 + inter_x_min = max(x1_min, x2_min) + inter_y_min = max(y1_min, y2_min) + inter_x_max = min(x1_max, x2_max) + inter_y_max = min(y1_max, y2_max) + + # 计算交集的宽度和高度(确保为非负值) + inter_width = max(0, inter_x_max - inter_x_min) + inter_height = max(0, inter_y_max - inter_y_min) + inter_area = inter_width * inter_height + + # 计算每个边界框的面积 + area1 = (x1_max - x1_min) * (y1_max - y1_min) + area2 = (x2_max - x2_min) * (y2_max - y2_min) + + # 计算并集面积 + union_area = area1 + area2 - inter_area + + # 计算 IOU + iou = inter_area / union_area if union_area > 0 else 0 + return iou + + + + +def read_images(image_dir): + images = [] + filenames = sorted(os.listdir(image_dir)) + for filename in filenames: + file_path = os.path.join(image_dir, filename) + image_uint8 = skimage_io.imread(file_path) + image = image_uint8.astype(np.float32) / 255.0 + images.append(image) + return images, filenames + + + +def preprocess_images(images, model_input_size): + processed_images = [] + for image in images: + # Pad image to square + h, w, d = image.shape + size = max(h, w) + image_padded = np.pad(image, ((0, size - h), (0, size - w), (0, 0)), constant_values=0.5,) + # Resize image to fit model's input size + image_resized = skimage.transform.resize( + image_padded, + (model_input_size, model_input_size), + anti_aliasing=True, + ) + processed_images.append(image_resized) + # Shape: (b, h, w, d) + return np.array(processed_images, dtype=np.float32) + + + +def prepare_images(image_dir, model_input_size): + filenames = sorted(os.listdir(image_dir)) + + images = [] + for filename in filenames: + file_path = os.path.join(image_dir, filename) + image_uint8 = skimage_io.imread(file_path) + image = image_uint8.astype(np.float32) / 255.0 + + # Pad image to square + h, w, d = image.shape + size = max(h, w) + image_padded = np.pad( + image, ((0, size - h), (0, size - w), (0, 0)), constant_values=0.5 + ) + + # Resize image to fit model's input size + image_resized = skimage.transform.resize( + image_padded, + (model_input_size, model_input_size), + anti_aliasing=True, + ) + images.append(image_resized) + + # Shape: (b, h, w, d) + return np.array(images, dtype=np.float32), filenames + + + +def plot_bbox_on_image(image, boxes, objectnesses, threshold, output_file): + fig, ax = plt.subplots(1, 1, figsize=(8, 8)) + ax.imshow(image, extent=(0, 1, 1, 0)) + ax.set_axis_off() + + for i, (box, objectness) in enumerate(zip(boxes, objectnesses)): + if objectness < threshold: + continue + + index = i + cx, cy, w, h = box + ax.plot( + [cx - w / 2, cx + w / 2, cx + w / 2, cx - w / 2, cx - w / 2], + [cy - h / 2, cy - h / 2, cy + h / 2, cy + h / 2, cy - h / 2], + color='lime', + ) + + ax.text( + cx - w / 2 + 0.015, + cy + h / 2 - 0.015, + f'Index {i}: {objectness:1.2f}', + ha='left', + va='bottom', + color='black', + bbox={ + 'facecolor': 'white', + 'edgecolor': 'lime', + 'boxstyle': 'square,pad=.3', + }, + ) + + ax.set_xlim(0, 1) + ax.set_ylim(1, 0) + ax.set_title(f'Top objects by objectness') + + # 保存图片到指定路径 + plt.savefig(output_file, bbox_inches='tight', dpi=300) + plt.close() # 关闭图像以释放内存 + print(f"结果图片已保存到: {output_file}") + return index + + +def top_object_index(objectnesses, threshold): + for i, objectness in enumerate(objectnesses): + if objectness < threshold: + continue + else: + return i + + + + +def boxes_filter(pred_bboxes, raw_bboxes, pred_scores, instances): + # Step 1: Filter by pred_scores + filtered_indices = [i for i, score in enumerate(pred_scores) if score >= 0.97] + + pred_bboxes = [pred_bboxes[i] for i in filtered_indices] + raw_bboxes = [raw_bboxes[i] for i in filtered_indices] + pred_scores = [pred_scores[i] for i in filtered_indices] + instances = [instances[i] for i in filtered_indices] + + # Step 2: Filter by IoU + keep_indices = set(range(len(pred_bboxes))) + for i in range(len(pred_bboxes)): + if i not in keep_indices: + continue + for j in range(i + 1, len(pred_bboxes)): + if j not in keep_indices: + continue + iou = get_iou(pred_bboxes[i], pred_bboxes[j]) + if iou > 0.9: + if pred_scores[i] >= pred_scores[j]: + keep_indices.discard(j) + else: + keep_indices.discard(i) + + pred_bboxes = [pred_bboxes[i] for i in sorted(keep_indices)] + raw_bboxes = [raw_bboxes[i] for i in sorted(keep_indices)] + pred_scores = [pred_scores[i] for i in sorted(keep_indices)] + instances = [instances[i] for i in sorted(keep_indices)] + + # Step 3: Filter by duplicate instances + instance_map = {} + for i in range(len(instances)): + instance = instances[i] + if instance not in instance_map or pred_scores[i] > pred_scores[instance_map[instance]]: + instance_map[instance] = i + + unique_indices = sorted(instance_map.values()) + pred_bboxes = [pred_bboxes[i] for i in unique_indices] + raw_bboxes = [raw_bboxes[i] for i in unique_indices] + pred_scores = [pred_scores[i] for i in unique_indices] + instances = [instances[i] for i in unique_indices] + + return pred_bboxes, raw_bboxes, pred_scores, instances + + + +def format_string(input_string: str) -> str: + # 大写 转 小写 + lowercased = input_string.lower() + # 空格 转 下划线 + transformed = re.sub(r"\s+", "_", lowercased) # \s+ 匹配一个或多个空白字符 + return transformed \ No newline at end of file diff --git a/owlv2_img_embeding.py b/owlv2_img_embeding.py new file mode 100644 index 0000000000000000000000000000000000000000..170312b227e391d4069e3d8d008dc3c81ad8cd5d --- /dev/null +++ b/owlv2_img_embeding.py @@ -0,0 +1,180 @@ +import os +import sys +import json + +# pip install ott-jax==0.2.0 +import jax +import numpy as np +import tensorflow as tf +from scipy.special import expit as sigmoid + +import skimage +from skimage import io as skimage_io +from skimage import transform as skimage_transform +import matplotlib as mpl +from matplotlib import pyplot as plt + +sys.path.append('/home/netzone22/bohanliu_2025/VisionModels/Scenic_OWLv2/big_vision') +tf.config.experimental.set_visible_devices([], 'GPU') + +from scenic.projects.owl_vit import configs +from scenic.projects.owl_vit import models + +# from owlv2_helper_functions import prepare_images +from owlv2_helper_functions import read_images, preprocess_images +from owlv2_helper_functions import plot_bbox_on_image, image_based_plot_boxes_on_image +from owlv2_helper_functions import top_object_index +from owlv2_helper_functions import rescale_detection_box +from owlv2_helper_functions import get_iou, boxes_filter + + + +""" +Prepare OWLv2 pretrained model +""" +config = configs.owl_v2_clip_l14.get_config(init_mode='canonical_checkpoint') +module = models.TextZeroShotDetectionModule( + body_configs=config.model.body, + objectness_head_configs=config.model.objectness_head, + normalize=config.model.normalize, + box_bias=config.model.box_bias) +variables = module.load_variables(config.init_from.checkpoint_path) + + + + +""" +Wrapped model components +""" +import functools + +image_embedder = jax.jit( + functools.partial(module.apply, variables, train=False, method=module.image_embedder)) + +objectness_predictor = jax.jit( + functools.partial(module.apply, variables, method=module.objectness_predictor)) + +box_predictor = jax.jit( + functools.partial(module.apply, variables, method=module.box_predictor)) + +class_predictor = jax.jit( + functools.partial(module.apply, variables, method=module.class_predictor)) + + + + +""" +Detect the main object on instances' images +""" +INSTANCE_DIR = '/home/netzone22/bohanliu_2025/DT_SPR/DT_SPR_instances' +INSTANCE_DETECTION = '/home/netzone22/bohanliu_2025/DT_SPR/DT_SPR_instances_detections' + +model_input_size = config.dataset_configs.input_size +images, source_images_names = read_images(INSTANCE_DIR) +source_images = preprocess_images(images, model_input_size) + + +instances, query_embeddings, indexes = [], [], [] +for source_image, source_image_name in zip(source_images, source_images_names): + feature_map = image_embedder(source_image[None, ...]) + b, h, w, d = feature_map.shape + image_features = feature_map.reshape(b, h * w, d) + + objectnesses = objectness_predictor(image_features)['objectness_logits'] + bboxes = box_predictor(image_features=image_features, feature_map=feature_map)['pred_boxes'] + all_class_embeddings = class_predictor(image_features=image_features)['class_embeddings'] + + # Remove batch dimension + objectnesses = np.array(objectnesses[0]) + bboxes = np.array(bboxes[0]) + all_class_embeddings = np.array(all_class_embeddings[0]) + + top_k = 1 + objectnesses = sigmoid(objectnesses) + objectness_threshold = np.partition(objectnesses, -top_k)[-top_k] + + index = top_object_index(objectnesses, objectness_threshold) + query_embedding = all_class_embeddings[index] + + indexes.append(index) + instances.append(source_image_name.split('_')[0]) + query_embeddings.append(query_embedding) + + # Plot instance detection + output_file = os.path.join(INSTANCE_DETECTION, source_image_name) + plot_bbox_on_image(source_image, bboxes, objectnesses, objectness_threshold, output_file) + + + + +# IMAGE_DIR = '/home/netzone22/bohanliu_2025/DT_SPR/data_sample' +# OUTPUT_DIR = '/home/netzone22/bohanliu_2025/VisionModels/Scenic_OWLv2/bliu75_output/test_output/batch_results' +IMAGE_DIR = '/home/netzone22/bohanliu_2025/DT_SPR/DT_SPR_video08' +OUTPUT_DIR = '/home/netzone22/bohanliu_2025/DT_SPR/DT_SPR_video08_detect' + +digital_twins = {} + +images, target_images_names = read_images(IMAGE_DIR) +target_images = preprocess_images(images, model_input_size) +h, w, d = images[0].shape +size = max(h, w) + +for target_image, target_image_name, image in zip(target_images, target_images_names, images): + + feature_map = image_embedder(target_image[None, ...]) + b, h, w, d = feature_map.shape + image_features = feature_map.reshape(b, h * w, d) + all_bboxes = box_predictor(image_features=image_features, feature_map=feature_map)['pred_boxes'] + + pred_scores, pred_bboxes = [], [] + for i, query_embedding in enumerate(query_embeddings): + target_class_predictions = class_predictor( + image_features=feature_map.reshape(b, h * w, d), + query_embeddings=query_embedding[None, None, ...], # [batch, queries, d] + ) + + # Remove batch dimension and convert to numpy: + logits = np.array(target_class_predictions['pred_logits'][0]) + bboxes = np.array(all_bboxes[0]) + + top_ind = np.argmax(logits[:, 0], axis=0) + score = logits[top_ind, 0] + bbox = bboxes[top_ind] + + pred_bboxes.append(bbox) + pred_scores.append(score) + + instances_dup = instances[:] + pred_scores = sigmoid(pred_scores) + rescaled_bboxes = rescale_detection_box(pred_bboxes, image) + + rescaled_bboxes, pred_bboxes, pred_scores, instances_dup = boxes_filter(rescaled_bboxes, pred_bboxes, pred_scores, instances_dup) + + + count = {} + for instance_name in instances_dup: + count[instance_name] = 0 + + digital_twins[target_image_name] = {} + for instance_i, (instance_name, instance_box, instance_raw_box, instance_score) in enumerate(zip(instances_dup, rescaled_bboxes, pred_bboxes, pred_scores)): + x1, y1, x2, y2 = map(float, instance_box) + cx, cy, box_w, box_h = map(float, instance_raw_box) + x = round(instance_score, 2) + + digital_twins[target_image_name][f'{instance_name}_{count[instance_name]}'] = { + 'detection_label': instance_name, + 'detection_box': [x1, y1, x2, y2], + 'detection_centroid': [cx*size, cy*size], + 'detection_score': round(float(instance_score), 2), + } + count[instance_name] += 1 + + + image_based_plot_boxes_on_image(image, instances_dup, pred_scores, rescaled_bboxes, target_image_name, OUTPUT_DIR) + + +JSON_OUT_PATH = "/home/netzone22/bohanliu_2025/DT_SPR_video08_detection.json" +if not os.path.exists(JSON_OUT_PATH): + os.makedirs(JSON_OUT_PATH) +with open(JSON_OUT_PATH, "w", encoding="utf-8") as json_f: + json.dump(digital_twins, json_f, indent=4) \ No newline at end of file diff --git a/owlv2_img_embeding_2.py b/owlv2_img_embeding_2.py new file mode 100644 index 0000000000000000000000000000000000000000..96fb0da8cf201cdef78cb47ae0bdaff1724f0642 --- /dev/null +++ b/owlv2_img_embeding_2.py @@ -0,0 +1,148 @@ +import os +import sys +import json + +# pip install ott-jax==0.2.0 +import jax +import numpy as np +import tensorflow as tf +from scipy.special import expit as sigmoid + +import skimage +from skimage import io as skimage_io +from skimage import transform as skimage_transform +import matplotlib as mpl +from matplotlib import pyplot as plt + +sys.path.append('/home/netzone22/bohanliu_2025/VisionModels/Scenic_OWLv2/big_vision') +tf.config.experimental.set_visible_devices([], 'GPU') + +from scenic.projects.owl_vit import configs +from scenic.projects.owl_vit import models + +# from owlv2_helper_functions import prepare_images +from owlv2_helper_functions import read_images, preprocess_images +from owlv2_helper_functions import plot_bbox_on_image, image_based_plot_boxes_on_image, plot_boxes_on_image +from owlv2_helper_functions import top_object_index +from owlv2_helper_functions import rescale_detection_box + + + + +""" +Prepare OWLv2 pretrained model +""" +config = configs.owl_v2_clip_l14.get_config(init_mode='canonical_checkpoint') +module = models.TextZeroShotDetectionModule( + body_configs=config.model.body, + objectness_head_configs=config.model.objectness_head, + normalize=config.model.normalize, + box_bias=config.model.box_bias) +variables = module.load_variables(config.init_from.checkpoint_path) + + + + +""" +Wrapped model components +""" +import functools + +image_embedder = jax.jit( + functools.partial(module.apply, variables, train=False, method=module.image_embedder)) +objectness_predictor = jax.jit( + functools.partial(module.apply, variables, method=module.objectness_predictor)) +box_predictor = jax.jit( + functools.partial(module.apply, variables, method=module.box_predictor)) +class_predictor = jax.jit( + functools.partial(module.apply, variables, method=module.class_predictor)) + + + + +""" +Detect the main object on instances' images +""" +INSTANCE_DIR = '/home/netzone22/bohanliu_2025/DT_SPR/DT_SPR_instances_0' +INSTANCE_DETECTION = '/home/netzone22/bohanliu_2025/DT_SPR/DT_SPR_instances_detections_0' + +model_input_size = config.dataset_configs.input_size +images, source_images_names = read_images(INSTANCE_DIR) +source_images = preprocess_images(images, model_input_size) + +feature_map = image_embedder(source_images) +b, h, w, d = feature_map.shape +image_features = feature_map.reshape(b, h * w, d) + +objectnesses = objectness_predictor(image_features)['objectness_logits'] +bboxes = box_predictor(image_features=image_features, feature_map=feature_map)['pred_boxes'] +source_class_embeddings = class_predictor(image_features=image_features)['class_embeddings'] + +# print(f"Debug: source instance detection") +# print(f" Source images features shape: {image_features.shape}") +# print(f" objectnesses shape: {objectnesses.shape}") +# print(f" bboxes shape: {bboxes.shape}") +# print(f" source_class_embeddings shape: {source_class_embeddings.shape}") + +objectnesses = sigmoid(objectnesses) +top_objectnesses = np.max(objectnesses, axis=1) + +instances, query_embeddings, indexes = [], [], [] +for i in range(len(source_images_names)): + index = top_object_index(objectnesses[i], top_objectnesses[i]) + query_embedding = source_class_embeddings[index] + + indexes.append(index) + instances.append(source_images_names[i].split('_')[0]) + query_embeddings.append(query_embedding) + + output_file = os.path.join(INSTANCE_DETECTION, source_images_names[i]) + plot_bbox_on_image(source_images[i], bboxes[i], objectnesses[i], top_objectnesses[i], output_file) + + + + + +IMAGE_DIR = '/home/netzone22/bohanliu_2025/DT_SPR/data_sample' +OUTPUT_DIR = '/home/netzone22/bohanliu_2025/VisionModels/Scenic_OWLv2/bliu75_output/test_output/batch_results' + +images, target_images_names = read_images(IMAGE_DIR) +target_images = preprocess_images(images, model_input_size) + +for target_image, target_image_name, image in zip(target_images, target_images_names, images): + + feature_map = image_embedder(target_image[None, ...]) + b, h, w, d = feature_map.shape + target_boxes = box_predictor(image_features=feature_map.reshape(b, h * w, d), feature_map=feature_map)['pred_boxes'] + + target_class_predictions = class_predictor( + image_features=feature_map.reshape(b, h * w, d), + query_embeddings=query_embedding[None, ...], # [batch, queries, d] + ) + + logits = np.array(target_class_predictions['pred_logits'][0]) + raw_boxes = np.array(target_boxes[0]) + + top_ind = np.argmax(logits[:, 0], axis=0) + score = sigmoid(logits[top_ind, 0]) + + # labels = np.argmax(target_class_predictions['pred_logits'][0], axis=-1) + # scores = sigmoid(np.max(logits, axis=-1)) + + boxes = rescale_detection_box(raw_boxes, image) + boxes = boxes[top_ind] + + score = np.array([score]) + boxes = np.array([boxes]) + + image_based_plot_boxes_on_image(image, instances, score, boxes, target_image_name, OUTPUT_DIR) + + print(f"Debug: traget instance detection") + # print(f" target_class_predictions' keys: {target_class_predictions.keys()}") + print(f" target_logits: {logits.shape}") + print(logits) + # print(f" target_scores: {scores.shape}") + # print(f" target_labels: {labels.shape}") + # print(f" target_boxes shape: {raw_boxes.shape}") + + # plot_boxes_on_image(image, instances, scores, boxes, labels, target_image_name, 0.5, OUTPUT_DIR) diff --git a/owlv2_inference.py b/owlv2_inference.py new file mode 100644 index 0000000000000000000000000000000000000000..a8ed9fa343c89d5c8b7c1dbd95b2a6dd106dad28 --- /dev/null +++ b/owlv2_inference.py @@ -0,0 +1,176 @@ +import os +import sys +import json + +# pip install ott-jax==0.2.0 +import jax +import numpy as np +import tensorflow as tf +from scipy.special import expit as sigmoid + +import skimage +from skimage import io as skimage_io +from skimage import transform as skimage_transform +import matplotlib as mpl +from matplotlib import pyplot as plt + +sys.path.append('/home/netzone22/bohanliu_2025/VisionModels/Scenic_OWLv2/big_vision') +tf.config.experimental.set_visible_devices([], 'GPU') + +from scenic.projects.owl_vit import configs +from scenic.projects.owl_vit import models + +from owlv2_helper_functions import plot_boxes_on_image, rescale_detection_box +from owlv2_helper_functions import format_string + + + +# IMAGE_DIR = '/home/netzone22/bohanliu_2025/HALO/case28/case_28' +# OUTPUT_DIR = '/home/netzone22/bohanliu_2025/HALO/case28/case_28_detection' +# JOSN_IN = '/home/netzone22/bohanliu_2025/structured_prompt.json' +# JSON_OUT = '/home/netzone22/bohanliu_2025/HALO/case28/case_28_detection.json' + + +# IMAGE_DIR = '/home/netzone22/bohanliu_2025/HALO_test/single_image' +# OUTPUT_DIR = '/home/netzone22/bohanliu_2025/HALO_test/single_image/detection' +# JOSN_IN = '/home/netzone22/bohanliu_2025/structured_prompt.json' +# JSON_OUT = '/home/netzone22/bohanliu_2025/HALO_test/single_image/detection.json' + +INSTANCE = 'machine' +IMAGE_DIR = f'/home/netzone22/bohanliu_2025/HALO_test/semantic/{INSTANCE}' +OUTPUT_DIR = f'/home/netzone22/bohanliu_2025/HALO_test/semantic_output/{INSTANCE}/detection' +JOSN_IN = f'/home/netzone22/bohanliu_2025/HALO_test/semantic_output/{INSTANCE}/structured_prompt.json' +JSON_OUT = f'/home/netzone22/bohanliu_2025/HALO_test/semantic_output/{INSTANCE}/metadata.json' + + +THRESHOLD = 0.12 + +TEXT = [] +with open(JOSN_IN, 'r') as file: + prompts = json.load(file) + +for target_obj in prompts['target_obj']: + TEXT.append(format_string(target_obj)) +if prompts['spacial_info'] == True: + for referred_obj in prompts['referred_obj'].keys(): + TEXT.append(format_string(referred_obj)) +print(f"\nQueries: {TEXT}\n") + + + +### Choose config +# config = configs.owl_v2_clip_b16.get_config(init_mode='canonical_checkpoint') +config = configs.owl_v2_clip_l14.get_config(init_mode='canonical_checkpoint') + + +### Load the model and variables +module = models.TextZeroShotDetectionModule( + body_configs=config.model.body, + objectness_head_configs=config.model.objectness_head, + normalize=config.model.normalize, + box_bias=config.model.box_bias) + +variables = module.load_variables(config.init_from.checkpoint_path) + + + +### Prepare text queries +text_queries = TEXT # ['machine', 'human'] +tokenized_queries = np.array([ + module.tokenize(q, config.dataset_configs.max_query_length) + for q in text_queries +]) +# Pad tokenized queries to avoid recompilation if number of queries changes: +tokenized_queries = np.pad( + tokenized_queries, + pad_width=((0, 100 - len(text_queries)), (0, 0)), + constant_values=0) + + + +### Prepare image +jitted = jax.jit(module.apply, static_argnames=('train',)) +digital_twins = {} +# filenames = sorted(tf.io.gfile.listdir(IMAGE_DIR)) + +extensions = {".jpg", ".jpeg", ".png"} +filenames = sorted([ + file + for file in tf.io.gfile.listdir(IMAGE_DIR) + if any(file.lower().endswith(ext) for ext in extensions) +]) + +for i, filename in enumerate(filenames): + file_path = os.path.join(IMAGE_DIR, filename) + image_uint8 = skimage_io.imread(file_path) + image = image_uint8.astype(np.float32) / 255.0 + # Pad to square with gray pixels on bottom and right: + h, w, _ = image.shape + # print(f"original img: {h} x {w}") + size = max(h, w) + image_padded = np.pad(image, ((0, size - h), (0, size - w), (0, 0)), constant_values=0.5) + # Resize to model input size: + input_image = skimage.transform.resize( + image_padded, + (config.dataset_configs.input_size, config.dataset_configs.input_size), + anti_aliasing=True + ) + + + ### Get predictions + # This will take a minute on the first execution due to model compilation. + # Subsequent executions will be faster. + # jitted = jax.jit(module.apply, static_argnames=('train',)) + + # Note: The model expects a batch dimension. + predictions = jitted( + variables, + input_image[None, ...], + tokenized_queries[None, ...], + train=False) + # Remove batch dimension and convert to numpy: + predictions = jax.tree_util.tree_map(lambda x: np.array(x[0]), predictions) + # print(predictions.keys()) + + ### Plot prediction + score_threshold = THRESHOLD # 0.1 + + logits = predictions['pred_logits'][..., :len(text_queries)] # Remove padding. + scores = sigmoid(np.max(logits, axis=-1)) + labels = np.argmax(predictions['pred_logits'], axis=-1) + raw_boxes = predictions['pred_boxes'] + boxes = rescale_detection_box(raw_boxes, image) + + + + ### Write results into JSON file. + digital_twins[filename] = {} + + count = {} + for label in labels: + count[text_queries[label]] = 0 + + for score, raw_box, box, label in zip(scores, raw_boxes, boxes, labels): + if score < score_threshold: + continue; + + # x1, y1, x2, y2 = box + x1, y1, x2, y2 = map(float, box) + cx, cy, box_w, box_h = map(float, raw_box) + x = round(score, 2) + + digital_twins[filename][f'{text_queries[label]}_{count[text_queries[label]]}'] = { + 'detection_label': text_queries[label], + 'detection_box': [x1, y1, x2, y2], + 'detection_centroid': [cx*size, cy*size], + 'detection_score': round(float(score), 2), + } + count[text_queries[label]]+=1 + + if not os.path.exists(OUTPUT_DIR): + os.makedirs(OUTPUT_DIR) + plot_boxes_on_image(image, text_queries, scores, boxes, labels, filename, score_threshold, OUTPUT_DIR) + + +with open(JSON_OUT, "w", encoding="utf-8") as json_f: + json.dump(digital_twins, json_f, indent=4) diff --git a/pylintrc b/pylintrc new file mode 100644 index 0000000000000000000000000000000000000000..98037fc9c3181c961927ee0034afa8ef616e32e6 --- /dev/null +++ b/pylintrc @@ -0,0 +1,372 @@ +[MASTER] + +# Specify a configuration file. +#rcfile= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Add files or directories to the blacklist. They should be base names, not +# paths. +ignore=CVS + +# Pickle collected data for later comparisons. +persistent=yes + +# List of plugins (as comma separated values of python modules names) to load, +# usually to register additional checkers. +load-plugins= + +# Use multiple processes to speed up Pylint. +jobs=1 + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code +extension-pkg-whitelist= + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED +confidence= + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time. See also the "--disable" option for examples. +enable=use-symbolic-message-instead,useless-supression,fixme + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once).You can also use "--disable=all" to +# disable everything first and then reenable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use"--disable=all --enable=classes +# --disable=W" + +disable= + attribute-defined-outside-init, + duplicate-code, + # invalid-name, + # missing-docstring, + protected-access, + too-few-public-methods, + # handled by black + format + + +[REPORTS] + +# Set the output format. Available formats are text, parseable, colorized, msvs +# (visual studio) and html. You can also give a reporter class, eg +# mypackage.mymodule.MyReporterClass. +output-format=text + +# Put messages in a separate file for each module / package specified on the +# command line instead of printing them on stdout. Reports (if any) will be +# written in a file name "pylint_global.[txt|html]". +files-output=no + +# Tells whether to display a full report or only the messages +reports=no + +# Python expression which should return a note less than 10 (10 is the highest +# note). You have access to the variables errors warning, statement which +# respectively contain the number of errors / warnings messages and the total +# number of statements analyzed. This is used by the global evaluation report +# (RP0004). +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details +#msg-template= + + +[LOGGING] + +# Logging modules to check that the string format arguments are in logging +# function parameter format +logging-modules=logging + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME,XXX,TODO + + +[SIMILARITIES] + +# Minimum lines number of a similarity. +min-similarity-lines=4 + +# Ignore comments when computing similarities. +ignore-comments=yes + +# Ignore docstrings when computing similarities. +ignore-docstrings=yes + +# Ignore imports when computing similarities. +ignore-imports=no + + +[VARIABLES] + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# A regular expression matching the name of dummy variables (i.e. expectedly +# not used). +dummy-variables-rgx=_$|dummy + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid defining new builtins when possible. +additional-builtins= + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_,_cb + + +[FORMAT] + +# Maximum number of characters on a single line. +max-line-length=80 + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + +# List of optional constructs for which whitespace checking is disabled +no-space-check=trailing-comma,dict-separator + +# Maximum number of lines in a module +max-module-lines=2000 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + + +[BASIC] + +# List of builtins function names that should not be used, separated by a comma +bad-functions=map,filter,input + +# Good variable names which should always be accepted, separated by a comma +good-names=i,j,k,ex,Run,_ + +# Bad variable names which should always be refused, separated by a comma +bad-names=foo,bar,baz,toto,tutu,tata + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Include a hint for the correct naming format with invalid-name +include-naming-hint=no + +# Regular expression matching correct function names +function-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Naming hint for function names +function-name-hint=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression matching correct variable names +variable-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Naming hint for variable names +variable-name-hint=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression matching correct constant names +const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ + +# Naming hint for constant names +const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$ + +# Regular expression matching correct attribute names +attr-rgx=[a-z_][a-z0-9_]{2,}$ + +# Naming hint for attribute names +attr-name-hint=[a-z_][a-z0-9_]{2,}$ + +# Regular expression matching correct argument names +argument-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Naming hint for argument names +argument-name-hint=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression matching correct class attribute names +class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ + +# Naming hint for class attribute names +class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ + +# Regular expression matching correct inline iteration names +inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ + +# Naming hint for inline iteration names +inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$ + +# Regular expression matching correct class names +class-rgx=[A-Z_][a-zA-Z0-9]+$ + +# Naming hint for class names +class-name-hint=[A-Z_][a-zA-Z0-9]+$ + +# Regular expression matching correct module names +module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ + +# Naming hint for module names +module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ + +# Regular expression matching correct method names +method-rgx=[a-z_][a-z0-9_]{2,}$ + +# Naming hint for method names +method-name-hint=[a-z_][a-z0-9_]{2,}$ + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=__.*__ + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# List of decorators that define properties, such as abc.abstractproperty. +property-classes=abc.abstractproperty + + +[TYPECHECK] + +# Tells whether missing members accessed in mixin class should be ignored. A +# mixin class is detected if its name ends with "mixin" (case insensitive). +ignore-mixin-members=yes + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis +ignored-modules= + +# List of classes names for which member attributes should not be checked +# (useful for classes with attributes dynamically set). +ignored-classes=SQLObject, optparse.Values, thread._local, _thread._local + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members=REQUEST,acl_users,aq_parent + +# List of decorators that create context managers from functions, such as +# contextlib.contextmanager. +contextmanager-decorators=contextlib.contextmanager + + +[SPELLING] + +# Spelling dictionary name. Available dictionaries: none. To make it working +# install python-enchant package. +spelling-dict= + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to indicated private dictionary in +# --spelling-private-dict-file option instead of raising a message. +spelling-store-unknown-words=no + + +[DESIGN] + +# Maximum number of arguments for function / method +max-args=10 + +# Argument names that match this expression will be ignored. Default to name +# with leading underscore +ignored-argument-names=_.* + +# Maximum number of locals for function / method body +max-locals=25 + +# Maximum number of return / yield for function / method body +max-returns=11 + +# Maximum number of branch for function / method body +max-branches=26 + +# Maximum number of statements in function / method body +max-statements=100 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of attributes for a class (see R0902). +max-attributes=11 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=25 + + +[CLASSES] + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__,__new__,setUp,__post_init__ + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=mcs + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict,_fields,_replace,_source,_make + + +[IMPORTS] + +# Deprecated modules which should not be used, separated by a comma +deprecated-modules=regsub,TERMIOS,Bastion,rexec + +# Create a graph of every (i.e. internal and external) dependencies in the +# given file (report RP0402 must not be disabled) +import-graph= + +# Create a graph of external dependencies in the given file (report RP0402 must +# not be disabled) +ext-import-graph= + +# Create a graph of internal dependencies in the given file (report RP0402 must +# not be disabled) +int-import-graph= + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when being caught. Defaults to +# "Exception" +overgeneral-exceptions=Exception diff --git a/scenic.egg-info/.ipynb_checkpoints/requires-checkpoint.txt b/scenic.egg-info/.ipynb_checkpoints/requires-checkpoint.txt new file mode 100644 index 0000000000000000000000000000000000000000..c704e5f407c9042b151e6dc5a5dcb5b5c58041da --- /dev/null +++ b/scenic.egg-info/.ipynb_checkpoints/requires-checkpoint.txt @@ -0,0 +1,20 @@ +absl-py>=1.0.0 +numpy>=1.12 +jax>=0.4.3 +jaxlib>=0.4.3 +flax>=0.4.0 +ml-collections>=0.1.1 +tensorflow>=2.7 +immutabledict>=2.2.1 +clu>=0.0.6 +tensorflow-datasets +optax@ git+https://github.com/google-deepmind/optax.git@main + +[testing] +pytest +shapely +ott-jax>=0.2.0 +sklearn +lingvo==0.12.6 +seaborn>=0.11.2 +dmvr@ git+https://github.com/google-deepmind/dmvr.git diff --git a/scenic.egg-info/PKG-INFO b/scenic.egg-info/PKG-INFO new file mode 100644 index 0000000000000000000000000000000000000000..15b617235f272c097e78c6769dd6d6c19d659e99 --- /dev/null +++ b/scenic.egg-info/PKG-INFO @@ -0,0 +1,266 @@ +Metadata-Version: 2.4 +Name: scenic +Version: 0.0.1 +Summary: A Jax Library for Computer Vision Research and Beyond. +Home-page: http://github.com/google-research/scenic +Author: Scenic Authors +Author-email: no-reply@google.com +License: Apache 2.0 +Keywords: Scenic +Classifier: Development Status :: 1 - Beta +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: Science/Research +Classifier: License :: OSI Approved :: Apache Software License +Classifier: Programming Language :: Python +Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence +Description-Content-Type: text/markdown +License-File: LICENSE +Requires-Dist: absl-py>=1.0.0 +Requires-Dist: numpy>=1.12 +Requires-Dist: jax>=0.4.3 +Requires-Dist: jaxlib>=0.4.3 +Requires-Dist: flax>=0.4.0 +Requires-Dist: ml-collections>=0.1.1 +Requires-Dist: tensorflow>=2.7 +Requires-Dist: immutabledict>=2.2.1 +Requires-Dist: clu>=0.0.6 +Requires-Dist: tensorflow-datasets +Requires-Dist: optax@ git+https://ghfast.top/https://github.com/google-deepmind/optax.git@main +Provides-Extra: testing +Requires-Dist: pytest; extra == "testing" +Requires-Dist: shapely; extra == "testing" +Requires-Dist: ott-jax>=0.2.0; extra == "testing" +Requires-Dist: sklearn; extra == "testing" +Requires-Dist: lingvo==0.12.6; extra == "testing" +Requires-Dist: seaborn>=0.11.2; extra == "testing" +Requires-Dist: dmvr@ git+https://ghfast.top/https://github.com/google-deepmind/dmvr.git ; extra == "testing" +Dynamic: author +Dynamic: author-email +Dynamic: classifier +Dynamic: description +Dynamic: description-content-type +Dynamic: home-page +Dynamic: keywords +Dynamic: license +Dynamic: license-file +Dynamic: provides-extra +Dynamic: requires-dist +Dynamic: summary + +# Scenic +
+scenic logo +
+ +*Scenic* is a codebase with a focus on research around attention-based models +for computer vision. Scenic has been successfully used to develop +classification, segmentation, and detection models for multiple modalities +including images, video, audio, and multimodal combinations of them. + +More precisely, *Scenic* is a (i) set of shared light-weight libraries solving +tasks commonly encountered tasks when training large-scale (i.e. multi-device, +multi-host) vision models; and (ii) several *projects* containing fully +fleshed out problem-specific training and evaluation loops using these +libraries. + +Scenic is developed in [JAX](https://github.com/jax-ml/jax) and uses +[Flax](https://github.com/google/flax). + +### Contents +* [What we offer](#what-we-offer) +* [SOTA models and baselines in Scenic](#sota-models-and-baselines-in-scenic) +* [Philosophy](#philosophy) +* [Getting started](#getting-started) +* [Scenic component design](#scenic-component-design) +* [Citing Scenic](#citing-scenic) + +## What we offer +Among others *Scenic* provides + +* Boilerplate code for launching experiments, summary writing, logging, + profiling, etc; +* Optimized training and evaluation loops, losses, metrics, bi-partite matchers, + etc; +* Input-pipelines for popular vision datasets; +* [Baseline models](https://github.com/google-research/scenic/tree/main/scenic/projects/baselines#scenic-baseline-models), +including strong non-attentional baselines. + + +## SOTA models and baselines in *Scenic* +There are some SOTA models and baselines in Scenic which were either developed +using Scenic, or have been reimplemented in Scenic: + +Projects that were developed in Scenic or used it for their experiments: + +* [ViViT: A Video Vision Transformer](https://arxiv.org/abs/2103.15691) +* [OmniNet: Omnidirectional Representations from Transformers](https://arxiv.org/abs/2103.01075) +* [Attention Bottlenecks for Multimodal Fusion](https://arxiv.org/abs/2107.00135) +* [TokenLearner: What Can 8 Learned Tokens Do for Images and Videos?](https://arxiv.org/abs/2106.11297) +* [Exploring the Limits of Large Scale Pre-training](https://arxiv.org/abs/2110.02095) +* [The Efficiency Misnomer](https://arxiv.org/abs/2110.12894) +* [Discrete Representations Strengthen Vision Transformer Robustness](https://arxiv.org/abs/2111.10493) +* [Pyramid Adversarial Training Improves ViT Performance](https://arxiv.org/abs/2111.15121) +* [VUT: Versatile UI Transformer for Multi-Modal Multi-Task User Interface Modeling](https://arxiv.org/abs/2112.05692) +* [CLAY: Learning to Denoise Raw Mobile UI Layouts for Improving Datasets at Scale](https://arxiv.org/abs/2201.04100) +* [Zero-Shot Text-Guided Object Generation with Dream Fields](https://arxiv.org/abs/2112.01455) +* [Multiview Transformers for Video Recognition](https://arxiv.org/abs/2201.04288) +* [PolyViT: Co-training Vision Transformers on Images, Videos and Audio](https://arxiv.org/abs/2111.12993) +* [Simple Open-Vocabulary Object Detection with Vision Transformers](https://arxiv.org/abs/2205.06230) +* [Learning with Neighbor Consistency for Noisy Labels](https://arxiv.org/abs/2202.02200) +* [Token Turing Machines](https://arxiv.org/pdf/2211.09119.pdf) +* [Vid2Seq: Large-Scale Pretraining of a Visual Language Model for Dense Video Captioning](https://arxiv.org/pdf/2302.14115.pdf) +* [AVATAR: Unconstrained Audiovisual Speech Recognition](https://arxiv.org/abs/2206.07684) +* [Adaptive Computation with Elastic Input Sequence](https://arxiv.org/abs/2301.13195) +* [Location-Aware Self-Supervised Transformers for Semantic Segmentation](https://arxiv.org/abs/2212.02400) +* [How can objects help action recognition?](https://openaccess.thecvf.com/content/CVPR2023/html/Zhou_How_Can_Objects_Help_Action_Recognition_CVPR_2023_paper.html) +* [Verbs in Action: Improving verb understanding in video-language models](https://arxiv.org/abs/2304.06708) +* [Unified Visual Relationship Detection with Vision and Language Models](https://arxiv.org/abs/2303.08998) +* [UnLoc: A Unified Framework for Video Localization Tasks](https://arxiv.org/abs/2308.11062) +* [REVEAL: Retrieval-Augmented Visual-Language Pre-Training with Multi-Source Multimodal Knowledge Memory](https://arxiv.org/abs/2212.05221) +* [Audiovisual Masked Autoencoders](https://arxiv.org/abs/2212.05922) +* [MatFormer: Nested Transformer for Elastic Inference](https://arxiv.org/abs/2310.07707) +* [Pixel Aligned Language Models](https://arxiv.org/abs/2312.09237) +* [A Generative Approach for Wikipedia-Scale Visual Entity Recognition](https://arxiv.org/abs/2403.02041) +* [Streaming Dense Video Captioning](https://arxiv.org/abs/2404.01297) +* [Dense Video Object Captioning from Disjoint Supervision](https://arxiv.org/abs/2306.11729) + +More information can be found in [projects](https://github.com/google-research/scenic/tree/main/scenic/projects#list-of-projects-hosted-in-scenic). + +Baselines that were reproduced in Scenic: + +* [(ViT) An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale](https://arxiv.org/abs/2010.11929) +* [(DETR) End-to-End Object Detection with Transformers](https://arxiv.org/abs/2005.12872) +* [Deformable DETR: Deformable Transformers for End-to-End Object Detection](https://arxiv.org/abs/2010.04159) +* [(CLIP) Learning Transferable Visual Models From Natural Language Supervision](https://arxiv.org/abs/2103.00020) +* [MLP-Mixer: An all-MLP Architecture for Vision](https://arxiv.org/abs/2105.01601) +* [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805) +* [How to train your ViT? Data, Augmentation, and Regularization in Vision Transformers](https://arxiv.org/abs/2106.10270) +* [Big Transfer (BiT): General Visual Representation Learning](https://arxiv.org/abs/1912.11370) +* [Deep Residual Learning for Image Recognition](https://arxiv.org/abs/1512.03385) +* [U-Net: Convolutional Networks for Biomedical Image Segmentation](https://arxiv.org/abs/1505.04597) +* [PCT: Point Cloud Transformer](https://arxiv.org/abs/2012.09688) +* [Universal Transformers](https://arxiv.org/abs/1807.03819) +* [PonderNet](https://arxiv.org/abs/2107.05407) +* [Masked Autoencoders Are Scalable Vision Learners](https://arxiv.org/abs/2111.06377) +* [Rethinking Attention with Performers](https://arxiv.org/abs/2009.14794) +* [(CenterNet) Objects as Points](https://arxiv.org/abs/1904.07850) +* [(SAM) Segment Anything](https://arxiv.org/abs/2304.02643) + + +More information can be found in [baseline models](https://github.com/google-research/scenic/tree/main/scenic/projects/baselines#scenic-baseline-models). + +
+## Philosophy +*Scenic* aims to facilitate rapid prototyping of large-scale vision models. To +keep the code simple to understand and extend we prefer *forking and +copy-pasting over adding complexity or increasing abstraction*. Only when +functionality proves to be widely useful across many models and tasks it may be +upstreamed to Scenic's shared libraries. + + + +## Getting started +* See `projects/baselines/README.md` for a walk-through baseline models and + instructions on how to run the code. +* If you would like to contribute to *Scenic*, please check out the + [Philisophy](#philosophy), [Code structure](#code_structure) and + [Contributing](CONTRIBUTING.md) sections. + Should your contribution be a part of the shared libraries, please send us a + pull request! + + +### Quickstart +You will need Python 3.9 or later. Download the code from GitHub + +```shell +$ git clone https://github.com/google-research/scenic.git +$ cd scenic +$ pip install . +``` + +and run training for ViT on ImageNet: + +```shell +$ python scenic/main.py -- \ + --config=scenic/projects/baselines/configs/imagenet/imagenet_vit_config.py \ + --workdir=./ +``` + +Note that for specific projects and baselines, you might need to install extra +packages that are mentioned in their `README.md` or `requirements.txt` files. + +[Here](https://colab.research.google.com/github/google-research/scenic/blob/main/scenic/common_lib/colabs/scenic_playground.ipynb) +is also a minimal colab to train a simple feed-forward model using Scenic. + + +## Scenic component design +Scenic is designed to propose different levels of abstraction, to support +hosting projects that only require changing hyper-parameters by defining config +files, to those that need customization on the input pipeline, model +architecture, losses and metrics, and the training loop. To make this happen, +the code in Scenic is organized as either _project-level_ code, +which refers to customized code for specific projects or baselines or +_library-level_ code, which refers to common functionalities and general +patterns that are adapted by the majority of projects. The project-level +code lives in the `projects` directory. + +
+scenic design +
+ +### Library-level code +The goal is to keep the library-level code minimal and well-tested and to avoid +introducing extra abstractions to support minor use-cases. Shared libraries +provided by *Scenic* are split into: + +* `dataset_lib`: Implements IO pipelines for loading and pre-processing data + for common Computer Vision tasks and benchmarks (see "Tasks and Datasets" + section). All pipelines are designed to be scalable and support multi-host + and multi-device setups, taking care dividing data among multiple hosts, + incomplete batches, caching, pre-fetching, etc. +* `model_lib` : Provides + * several abstract model interfaces (e.g. `ClassificationModel` or + `SegmentationModel` in `model_lib.base_models`) with task-specific + losses and metrics; + * neural network layers in `model_lib.layers`, focusing on efficient + implementation of attention and transformer layers; + * accelerator-friendly implementations of bipartite matching + algorithms in `model_lib.matchers`. +* `train_lib`: Provides tools for constructing training loops and implements + several optimized trainers (classification trainer and segmentation trainer) + that can be forked for customization. +* `common_lib`: General utilities, like logging and debugging modules, + functionalities for processing raw data, etc. + +### Project-level code +Scenic supports the development of customized solutions for customized tasks and +data via the concept of "project". There is no one-fits-all recipe for how much +code should be re-used by a project. Projects can consist of only configs and +use the common models, trainers, task/data that live in library-level code, or +they can simply fork any of the mentioned functionalities and redefine, layers, +losses, metrics, logging methods, tasks, architectures, as well as training and +evaluation loops. The modularity of library-level code makes it flexible for +projects to fall placed on any spot in the "run-as-is" to "fully customized" +spectrum. + +Common baselines such as a ResNet and Vision Transformer (ViT) are implemented +in the [`projects/baselines`](https://github.com/google-research/scenic/tree/main/scenic/projects/baselines) +project. Forking models in this directory is a good starting point for new +projects. + + +## Citing Scenic +If you use Scenic, you can cite our [white paper](https://openaccess.thecvf.com/content/CVPR2022/html/Dehghani_Scenic_A_JAX_Library_for_Computer_Vision_Research_and_Beyond_CVPR_2022_paper.html). +Here is an example BibTeX entry: + +```bibtex +@InProceedings{dehghani2021scenic, + author = {Dehghani, Mostafa and Gritsenko, Alexey and Arnab, Anurag and Minderer, Matthias and Tay, Yi}, + title = {Scenic: A JAX Library for Computer Vision Research and Beyond}, + booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)}, + year = {2022}, + pages = {21393-21398} +} +``` + +_Disclaimer: This is not an official Google product._ diff --git a/scenic.egg-info/SOURCES.txt b/scenic.egg-info/SOURCES.txt new file mode 100644 index 0000000000000000000000000000000000000000..900c44fb0d4d1ddcfe71eb52d811e8ba80893d21 --- /dev/null +++ b/scenic.egg-info/SOURCES.txt @@ -0,0 +1,753 @@ +LICENSE +README.md +setup.py +big_vision/__init__.py +big_vision/input_pipeline.py +big_vision/optax.py +big_vision/optax_test.py +big_vision/sharding.py +big_vision/train.py +big_vision/utils.py +big_vision/utils_test.py +big_vision/configs/__init__.py +big_vision/configs/bit_i1k.py +big_vision/configs/bit_i21k.py +big_vision/configs/common.py +big_vision/configs/common_fewshot.py +big_vision/configs/load_and_eval.py +big_vision/configs/mlp_mixer_i1k.py +big_vision/configs/transfer.py +big_vision/configs/vit_i1k.py +big_vision/configs/vit_i21k.py +big_vision/configs/vit_s16_i1k.py +big_vision/evaluators/__init__.py +big_vision/evaluators/classification.py +big_vision/evaluators/common.py +big_vision/evaluators/fewshot_lsr.py +big_vision/evaluators/mean.py +big_vision/evaluators/save.py +big_vision/models/__init__.py +big_vision/models/bit.py +big_vision/models/bit_paper.py +big_vision/models/common.py +big_vision/models/mlp_mixer.py +big_vision/models/vit.py +big_vision/models/ppp/__init__.py +big_vision/models/ppp/gemma.py +big_vision/pp/__init__.py +big_vision/pp/autoaugment.py +big_vision/pp/builder.py +big_vision/pp/builder_test.py +big_vision/pp/ops_general.py +big_vision/pp/ops_general_test.py +big_vision/pp/ops_image.py +big_vision/pp/ops_image_test.py +big_vision/pp/ops_text.py +big_vision/pp/ops_text_test.py +big_vision/pp/registry.py +big_vision/pp/registry_test.py +big_vision/pp/tokenizer.py +big_vision/pp/utils.py +big_vision/pp/utils_test.py +big_vision/pp/archive/__init__.py +big_vision/pp/archive/autoaugment.py +big_vision/pp/archive/randaug.py +scenic/__init__.py +scenic/app.py +scenic/main.py +scenic.egg-info/PKG-INFO +scenic.egg-info/SOURCES.txt +scenic.egg-info/dependency_links.txt +scenic.egg-info/requires.txt +scenic.egg-info/top_level.txt +scenic.egg-info/.ipynb_checkpoints/requires-checkpoint.txt +scenic/common_lib/__init__.py +scenic/common_lib/common_utils.py +scenic/common_lib/debug_utils.py +scenic/common_lib/export_utils.py +scenic/common_lib/image_utils.py +scenic/common_lib/video_utils.py +scenic/common_lib/colabs/__init__.py +scenic/common_lib/tests/__init__.py +scenic/common_lib/tests/test_common_utils.py +scenic/common_lib/tests/test_debug_utils.py +scenic/common_lib/tests/test_image_utils.py +scenic/common_lib/tests/test_video_utils.py +scenic/dataset_lib/__init__.py +scenic/dataset_lib/bair_dataset.py +scenic/dataset_lib/cifar10_dataset.py +scenic/dataset_lib/cityscapes_dataset.py +scenic/dataset_lib/dataset_utils.py +scenic/dataset_lib/datasets.py +scenic/dataset_lib/fashion_mnist_dataset.py +scenic/dataset_lib/imagenet_dataset.py +scenic/dataset_lib/mnist_dataset.py +scenic/dataset_lib/oxford_pets_dataset.py +scenic/dataset_lib/svhn_dataset.py +scenic/dataset_lib/video_ops.py +scenic/dataset_lib/big_transfer/__init__.py +scenic/dataset_lib/big_transfer/bit.py +scenic/dataset_lib/big_transfer/builder.py +scenic/dataset_lib/big_transfer/registry.py +scenic/dataset_lib/big_transfer/preprocessing/__init__.py +scenic/dataset_lib/big_transfer/preprocessing/autoaugment.py +scenic/dataset_lib/big_transfer/preprocessing/ops.py +scenic/dataset_lib/big_transfer/preprocessing/utils.py +scenic/dataset_lib/big_transfer/preprocessing/vtab_ops.py +scenic/dataset_lib/coco_dataset/__init__.py +scenic/dataset_lib/coco_dataset/coco_eval.py +scenic/dataset_lib/coco_dataset/coco_utils.py +scenic/dataset_lib/coco_dataset/data/__init__.py +scenic/dataset_lib/coco_dataset/data/images/__init__.py +scenic/dataset_lib/coco_dataset/tests/__init__.py +scenic/dataset_lib/coco_dataset/tests/test_coco_utils.py +scenic/dataset_lib/tests/__init__.py +scenic/dataset_lib/tests/test_dataset_utils.py +scenic/model_lib/__init__.py +scenic/model_lib/models.py +scenic/model_lib/base_models/__init__.py +scenic/model_lib/base_models/base_model.py +scenic/model_lib/base_models/box_utils.py +scenic/model_lib/base_models/classification_model.py +scenic/model_lib/base_models/encoder_decoder_model.py +scenic/model_lib/base_models/model_utils.py +scenic/model_lib/base_models/multilabel_classification_model.py +scenic/model_lib/base_models/regression_model.py +scenic/model_lib/base_models/segmentation_model.py +scenic/model_lib/base_models/tests/__init__.py +scenic/model_lib/base_models/tests/test_box_utils.py +scenic/model_lib/base_models/tests/test_classification_model.py +scenic/model_lib/base_models/tests/test_encoder_decoder_model.py +scenic/model_lib/base_models/tests/test_model_utils.py +scenic/model_lib/base_models/tests/test_multilabel_classification_model.py +scenic/model_lib/base_models/tests/test_regression_model.py +scenic/model_lib/base_models/tests/test_segmentation_model.py +scenic/model_lib/layers/__init__.py +scenic/model_lib/layers/attention_layers.py +scenic/model_lib/layers/masked_layers.py +scenic/model_lib/layers/nn_layers.py +scenic/model_lib/layers/nn_ops.py +scenic/model_lib/layers/tests/__init__.py +scenic/model_lib/layers/tests/test_attention_layers.py +scenic/model_lib/layers/tests/test_masked_layers.py +scenic/model_lib/layers/tests/test_nn_layers.py +scenic/model_lib/layers/tests/test_nn_ops.py +scenic/model_lib/matchers/__init__.py +scenic/model_lib/matchers/common.py +scenic/model_lib/matchers/greedy.py +scenic/model_lib/matchers/hungarian.py +scenic/model_lib/matchers/hungarian_cover.py +scenic/model_lib/matchers/hungarian_jax.py +scenic/model_lib/matchers/lazy.py +scenic/model_lib/matchers/sinkhorn.py +scenic/model_lib/matchers/tests/__init__.py +scenic/model_lib/matchers/tests/test_matchers.py +scenic/model_lib/tests/__init__.py +scenic/model_lib/tests/test_models.py +scenic/projects/__init__.py +scenic/projects/adatape/__init__.py +scenic/projects/adatape/layers.py +scenic/projects/adatape/main.py +scenic/projects/adatape/adatape_vit/__init__.py +scenic/projects/adatape/adatape_vit/adatape_classify_trainer.py +scenic/projects/adatape/adatape_vit/adatape_trainer.py +scenic/projects/adatape/adatape_vit/adatape_vit.py +scenic/projects/adatape/dataset/__init__.py +scenic/projects/adatape/dataset/parity_dataset.py +scenic/projects/baselines/__init__.py +scenic/projects/baselines/axial_resnet.py +scenic/projects/baselines/bit_resnet.py +scenic/projects/baselines/fully_connected.py +scenic/projects/baselines/hybrid_vit.py +scenic/projects/baselines/mixer.py +scenic/projects/baselines/resnet.py +scenic/projects/baselines/simple_cnn.py +scenic/projects/baselines/unet.py +scenic/projects/baselines/vit.py +scenic/projects/baselines/bert/__init__.py +scenic/projects/baselines/bert/bert_base_model.py +scenic/projects/baselines/bert/layers.py +scenic/projects/baselines/bert/main.py +scenic/projects/baselines/bert/model.py +scenic/projects/baselines/bert/train_utils.py +scenic/projects/baselines/bert/trainer.py +scenic/projects/baselines/bert/configs/__init__.py +scenic/projects/baselines/bert/configs/bert_pretraining_config.py +scenic/projects/baselines/bert/configs/glue/__init__.py +scenic/projects/baselines/bert/configs/glue/bert_glue_config.py +scenic/projects/baselines/bert/configs/glue/glue_common.py +scenic/projects/baselines/bert/configs/glue/glue_fewshot.py +scenic/projects/baselines/bert/configs/glue/tasks/__init__.py +scenic/projects/baselines/bert/configs/glue/tasks/bert_cola_config.py +scenic/projects/baselines/bert/configs/glue/tasks/bert_mnli_matched_config.py +scenic/projects/baselines/bert/configs/glue/tasks/bert_mnli_mismatched_config.py +scenic/projects/baselines/bert/configs/glue/tasks/bert_mrpc_config.py +scenic/projects/baselines/bert/configs/glue/tasks/bert_qnli_config.py +scenic/projects/baselines/bert/configs/glue/tasks/bert_qqp_config.py +scenic/projects/baselines/bert/configs/glue/tasks/bert_rte_config.py +scenic/projects/baselines/bert/configs/glue/tasks/bert_sst2_config.py +scenic/projects/baselines/bert/configs/glue/tasks/bert_stsb_config.py +scenic/projects/baselines/bert/configs/glue/tasks/bert_wnli_config.py +scenic/projects/baselines/bert/datasets/__init__.py +scenic/projects/baselines/bert/datasets/bert_glue_dataset.py +scenic/projects/baselines/bert/datasets/bert_wikibooks_dataset.py +scenic/projects/baselines/centernet/__init__.py +scenic/projects/baselines/centernet/evaluate.py +scenic/projects/baselines/centernet/evaluators.py +scenic/projects/baselines/centernet/input_pipeline.py +scenic/projects/baselines/centernet/main.py +scenic/projects/baselines/centernet/optimizer_utils.py +scenic/projects/baselines/centernet/train_utils.py +scenic/projects/baselines/centernet/trainer.py +scenic/projects/baselines/centernet/transforms.py +scenic/projects/baselines/centernet/configs/__init__.py +scenic/projects/baselines/centernet/configs/centernet2_CXT_LSJ_4x.py +scenic/projects/baselines/centernet/configs/centernet2_O365_ViTDetH_LSJ_75e.py +scenic/projects/baselines/centernet/configs/centernet2_ViTDetB_LSJ_4x.py +scenic/projects/baselines/centernet/configs/centernet2_ViTDetH_LSJ_25e_ftO365.py +scenic/projects/baselines/centernet/configs/centernet2_ViTDetH_LSJ_75e.py +scenic/projects/baselines/centernet/configs/centernet2_ViTDetL_LSJ_100e.py +scenic/projects/baselines/centernet/configs/centernet_ViTDetB_LSJ_4x.py +scenic/projects/baselines/centernet/configs/centernet_ViTDetB_S4_LSJ_4x.py +scenic/projects/baselines/centernet/modeling/__init__.py +scenic/projects/baselines/centernet/modeling/box_head.py +scenic/projects/baselines/centernet/modeling/centernet.py +scenic/projects/baselines/centernet/modeling/centernet2.py +scenic/projects/baselines/centernet/modeling/centernet_head.py +scenic/projects/baselines/centernet/modeling/centernet_utils.py +scenic/projects/baselines/centernet/modeling/convnext.py +scenic/projects/baselines/centernet/modeling/fpn.py +scenic/projects/baselines/centernet/modeling/iou_assignment.py +scenic/projects/baselines/centernet/modeling/nms.py +scenic/projects/baselines/centernet/modeling/roi_align.py +scenic/projects/baselines/centernet/modeling/roi_head_utils.py +scenic/projects/baselines/centernet/modeling/roi_heads.py +scenic/projects/baselines/centernet/modeling/vitdet.py +scenic/projects/baselines/clip/__init__.py +scenic/projects/baselines/clip/download.py +scenic/projects/baselines/clip/layers.py +scenic/projects/baselines/clip/model.py +scenic/projects/baselines/clip/tokenizer.py +scenic/projects/baselines/configs/__init__.py +scenic/projects/baselines/configs/cityscapes/__init__.py +scenic/projects/baselines/configs/cityscapes/cityscapes_config.py +scenic/projects/baselines/configs/imagenet/__init__.py +scenic/projects/baselines/configs/imagenet/imagenet_augreg_mixer_config.py +scenic/projects/baselines/configs/imagenet/imagenet_augreg_vit_config.py +scenic/projects/baselines/configs/imagenet/imagenet_axial_resnet_config.py +scenic/projects/baselines/configs/imagenet/imagenet_bit_resnet_config.py +scenic/projects/baselines/configs/imagenet/imagenet_resnet_config.py +scenic/projects/baselines/configs/imagenet/imagenet_resnet_randaug_config.py +scenic/projects/baselines/configs/imagenet/imagenet_vit_config.py +scenic/projects/baselines/configs/imagenet/optax_imagenet_augreg_vit_config.py +scenic/projects/baselines/configs/mnist/__init__.py +scenic/projects/baselines/configs/mnist/mnist_config.py +scenic/projects/baselines/detr/__init__.py +scenic/projects/baselines/detr/detr_base_model.py +scenic/projects/baselines/detr/input_pipeline_detection.py +scenic/projects/baselines/detr/main.py +scenic/projects/baselines/detr/model.py +scenic/projects/baselines/detr/train_utils.py +scenic/projects/baselines/detr/trainer.py +scenic/projects/baselines/detr/transforms.py +scenic/projects/baselines/detr/configs/__init__.py +scenic/projects/baselines/detr/configs/detr_config.py +scenic/projects/baselines/detr/configs/detr_sinkhorn_config.py +scenic/projects/baselines/detr/tests/__init__.py +scenic/projects/baselines/detr/tests/test_datasets.py +scenic/projects/baselines/detr/tests/test_detr_base_model.py +scenic/projects/baselines/detr/tests/test_model.py +scenic/projects/baselines/detr/tests/test_train_utils.py +scenic/projects/baselines/detr/tests/test_transforms.py +scenic/projects/baselines/detr/tests/test_util.py +scenic/projects/baselines/segment_anything/__init__.py +scenic/projects/baselines/segment_anything/demo_utils.py +scenic/projects/baselines/segment_anything/modeling/__init__.py +scenic/projects/baselines/segment_anything/modeling/image_encoder.py +scenic/projects/baselines/segment_anything/modeling/mask_decoder.py +scenic/projects/baselines/segment_anything/modeling/nms.py +scenic/projects/baselines/segment_anything/modeling/prompt_encoder.py +scenic/projects/baselines/segment_anything/modeling/sam.py +scenic/projects/baselines/segment_anything/modeling/transformer.py +scenic/projects/baselines/segment_anything/modeling/utils.py +scenic/projects/baselines/tests/__init__.py +scenic/projects/baselines/tests/test_axial_resnet.py +scenic/projects/baselines/tests/test_mixer.py +scenic/projects/baselines/tests/test_unet.py +scenic/projects/baselines/tests/test_vit.py +scenic/projects/boundary_attention/__init__.py +scenic/projects/boundary_attention/eval_main.py +scenic/projects/boundary_attention/eval_manager.py +scenic/projects/boundary_attention/main.py +scenic/projects/boundary_attention/train_utils.py +scenic/projects/boundary_attention/trainer.py +scenic/projects/boundary_attention/types.py +scenic/projects/boundary_attention/configs/__init__.py +scenic/projects/boundary_attention/configs/base_config.py +scenic/projects/boundary_attention/configs/boundary_attention_model_config.py +scenic/projects/boundary_attention/configs/dataset_configs.py +scenic/projects/boundary_attention/configs/deformable_boundary_attention_model_config.py +scenic/projects/boundary_attention/configs/kaleidoshapes_config.py +scenic/projects/boundary_attention/configs/model_configs.py +scenic/projects/boundary_attention/configs/training_config.py +scenic/projects/boundary_attention/dataset_lib/__init__.py +scenic/projects/boundary_attention/dataset_lib/dataloader.py +scenic/projects/boundary_attention/dataset_lib/datasets/__init__.py +scenic/projects/boundary_attention/dataset_lib/datasets/dataset_utils.py +scenic/projects/boundary_attention/dataset_lib/datasets/kaleidoshapes_dataset.py +scenic/projects/boundary_attention/dataset_lib/datasets/kaleidoshapes_dataset_utils.py +scenic/projects/boundary_attention/dataset_lib/datasets/pickled_dataset.py +scenic/projects/boundary_attention/field_of_junctions_jax/__init__.py +scenic/projects/boundary_attention/field_of_junctions_jax/field_of_junctions.py +scenic/projects/boundary_attention/field_of_junctions_jax/foj_helpers.py +scenic/projects/boundary_attention/helpers/__init__.py +scenic/projects/boundary_attention/helpers/additive_noise_model.py +scenic/projects/boundary_attention/helpers/get_input_opts.py +scenic/projects/boundary_attention/helpers/junction_functions.py +scenic/projects/boundary_attention/helpers/params2maps.py +scenic/projects/boundary_attention/helpers/perlin_noise.py +scenic/projects/boundary_attention/helpers/render_junctions.py +scenic/projects/boundary_attention/helpers/test_new_images.py +scenic/projects/boundary_attention/helpers/train_utils.py +scenic/projects/boundary_attention/helpers/viz_utils.py +scenic/projects/boundary_attention/kaleidoshapes/__init__.py +scenic/projects/boundary_attention/kaleidoshapes/kaleidoshapes.py +scenic/projects/boundary_attention/kaleidoshapes/make_kaleido_image.py +scenic/projects/boundary_attention/kaleidoshapes/plot_image.py +scenic/projects/boundary_attention/loss_lib/__init__.py +scenic/projects/boundary_attention/loss_lib/boundary_attention_loss.py +scenic/projects/boundary_attention/loss_lib/metrics.py +scenic/projects/boundary_attention/loss_lib/metrics_dict.py +scenic/projects/boundary_attention/models/__init__.py +scenic/projects/boundary_attention/models/all_models.py +scenic/projects/boundary_attention/models/boundary_attention.py +scenic/projects/boundary_attention/models/model_lib/__init__.py +scenic/projects/boundary_attention/models/model_lib/attention_blocks.py +scenic/projects/boundary_attention/models/model_lib/boundary_attention_model_base.py +scenic/projects/boundary_attention/models/model_lib/deformable_attention_blocks.py +scenic/projects/boundary_attention/models/model_lib/deformable_attention_utils.py +scenic/projects/boundary_attention/models/model_lib/deformable_refinement_blocks.py +scenic/projects/boundary_attention/models/model_lib/initialization_blocks.py +scenic/projects/boundary_attention/models/model_lib/misc_blocks.py +scenic/projects/boundary_attention/models/model_lib/model_utils.py +scenic/projects/boundary_attention/models/model_lib/patch_mixer_blocks.py +scenic/projects/boundary_attention/models/model_lib/refinement_blocks.py +scenic/projects/boundary_attention/models/model_lib/rope_embedding.py +scenic/projects/densevoc/__init__.py +scenic/projects/densevoc/chota.py +scenic/projects/densevoc/densevoc_evaluator.py +scenic/projects/densevoc/evaluate.py +scenic/projects/densevoc/evaluation_utils.py +scenic/projects/densevoc/input_pipeline.py +scenic/projects/densevoc/input_utils.py +scenic/projects/densevoc/main.py +scenic/projects/densevoc/trainer.py +scenic/projects/densevoc/transforms.py +scenic/projects/densevoc/vidstg_evaluator.py +scenic/projects/densevoc/configs/__init__.py +scenic/projects/densevoc/configs/common.py +scenic/projects/densevoc/configs/densevoc_disjoint_pretraining.py +scenic/projects/densevoc/configs/densevoc_vidstg.py +scenic/projects/densevoc/configs/densevoc_vidstg_ftgrit_hard_aggregation.py +scenic/projects/densevoc/configs/densevoc_vidstg_ftgrit_soft_aggregation.py +scenic/projects/densevoc/configs/densevoc_vidstg_videoeval.py +scenic/projects/densevoc/configs/densevoc_vln.py +scenic/projects/densevoc/configs/grit_vg_384.py +scenic/projects/densevoc/modeling/__init__.py +scenic/projects/densevoc/modeling/auto_regressive_decode.py +scenic/projects/densevoc/modeling/densevoc_model.py +scenic/projects/densevoc/modeling/grit.py +scenic/projects/densevoc/modeling/text_decoder.py +scenic/projects/densevoc/modeling/tracking_layers.py +scenic/projects/densevoc/modeling/tracking_utils.py +scenic/projects/fast_vit/__init__.py +scenic/projects/fast_vit/main.py +scenic/projects/fast_vit/model_utils.py +scenic/projects/fast_vit/xvit.py +scenic/projects/fast_vit/tests/__init__.py +scenic/projects/fast_vit/tests/test_model_utils.py +scenic/projects/gerald/__init__.py +scenic/projects/gerald/ger_eval.py +scenic/projects/gerald/ger_trainer.py +scenic/projects/gerald/input_pipeline.py +scenic/projects/gerald/main.py +scenic/projects/gerald/prepare_ald_codes.py +scenic/projects/gerald/utils.py +scenic/projects/gerald/configs/__init__.py +scenic/projects/gerald/configs/gerald_finetuning_config.py +scenic/projects/gerald/configs/gerald_pretraining_config.py +scenic/projects/gerald/models/__init__.py +scenic/projects/gerald/models/ger_model.py +scenic/projects/gerald/models/git_vit.py +scenic/projects/gerald/models/text_decoder.py +scenic/projects/knowledge_visual_language/__init__.py +scenic/projects/knowledge_visual_language/main.py +scenic/projects/knowledge_visual_language/trainer.py +scenic/projects/knowledge_visual_language/trainer_memory.py +scenic/projects/knowledge_visual_language/trainer_utils.py +scenic/projects/knowledge_visual_language/configs/__init__.py +scenic/projects/knowledge_visual_language/configs/finetune_okvqa_base.py +scenic/projects/knowledge_visual_language/configs/wit_memory_G.py +scenic/projects/knowledge_visual_language/configs/wit_memory_base.py +scenic/projects/knowledge_visual_language/configs/wit_memory_g.py +scenic/projects/knowledge_visual_language/configs/wit_memory_large.py +scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_G_froze_config.py +scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_base_config.py +scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_base_froze_config.py +scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_g_froze_config.py +scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_large_config.py +scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_large_froze_config.py +scenic/projects/knowledge_visual_language/data/__init__.py +scenic/projects/knowledge_visual_language/data/cc12m_generation_dataset.py +scenic/projects/knowledge_visual_language/data/cc12m_table_dataset.py +scenic/projects/knowledge_visual_language/data/data_utils.py +scenic/projects/knowledge_visual_language/data/okvqa_dataset.py +scenic/projects/knowledge_visual_language/data/vqa_dataset.py +scenic/projects/knowledge_visual_language/data/vqa_table_dataset.py +scenic/projects/knowledge_visual_language/data/web_image_text_generation_dataset.py +scenic/projects/knowledge_visual_language/data/wiki_image_text_generation_dataset.py +scenic/projects/knowledge_visual_language/data/wit_table_dataset.py +scenic/projects/lang4video/__init__.py +scenic/projects/lang4video/configs/__init__.py +scenic/projects/lang4video/configs/datasets/__init__.py +scenic/projects/lang4video/configs/train/__init__.py +scenic/projects/lang4video/configs/zero_shot/__init__.py +scenic/projects/lang4video/model/__init__.py +scenic/projects/lang4video/trainer/__init__.py +scenic/projects/layout_denoise/__init__.py +scenic/projects/layout_denoise/base_model.py +scenic/projects/layout_denoise/main.py +scenic/projects/layout_denoise/model.py +scenic/projects/layout_denoise/train_utils.py +scenic/projects/layout_denoise/trainer.py +scenic/projects/layout_denoise/configs/__init__.py +scenic/projects/layout_denoise/configs/dataset_config.py +scenic/projects/layout_denoise/configs/detr.py +scenic/projects/layout_denoise/datasets/__init__.py +scenic/projects/layout_denoise/datasets/dataset.py +scenic/projects/layout_denoise/datasets/parsers.py +scenic/projects/layout_denoise/layers/__init__.py +scenic/projects/layout_denoise/layers/common.py +scenic/projects/layout_denoise/layers/embedding.py +scenic/projects/layout_denoise/layers/predictor.py +scenic/projects/layout_denoise/layers/transformer.py +scenic/projects/loca/__init__.py +scenic/projects/loca/loca_dataset.py +scenic/projects/loca/main.py +scenic/projects/loca/ops.py +scenic/projects/loca/trainer.py +scenic/projects/loca/utils.py +scenic/projects/loca/vit.py +scenic/projects/loca/configs/__init__.py +scenic/projects/loca/configs/loca_imnet1k_base16.py +scenic/projects/matvit/__init__.py +scenic/projects/matvit/classification_eval_main.py +scenic/projects/matvit/layers.py +scenic/projects/matvit/main.py +scenic/projects/matvit/matvit.py +scenic/projects/matvit/trainer.py +scenic/projects/mbt/__init__.py +scenic/projects/mbt/main.py +scenic/projects/mbt/model.py +scenic/projects/mbt/model_utils.py +scenic/projects/mbt/train_utils.py +scenic/projects/mbt/trainer.py +scenic/projects/mbt/configs/__init__.py +scenic/projects/mbt/configs/audioset/__init__.py +scenic/projects/mbt/configs/audioset/balanced_audioset_base.py +scenic/projects/mbt/datasets/__init__.py +scenic/projects/mbt/datasets/audiovisual_tfrecord_dataset.py +scenic/projects/mbt/datasets/dataset_utils.py +scenic/projects/mtv/__init__.py +scenic/projects/mtv/config_utils.py +scenic/projects/mtv/config_utils_test.py +scenic/projects/mtv/main.py +scenic/projects/mtv/model.py +scenic/projects/mtv/model_test.py +scenic/projects/mtv/model_utils.py +scenic/projects/mtv/model_utils_test.py +scenic/projects/mtv/train_utils.py +scenic/projects/mtv/trainer.py +scenic/projects/mtv/configs/__init__.py +scenic/projects/mtv/configs/epic_kitchens/__init__.py +scenic/projects/mtv/configs/epic_kitchens/epic_mtv_b2_cva.py +scenic/projects/mtv/configs/kinetics/__init__.py +scenic/projects/mtv/configs/kinetics/k400_mtv_b2_cva.py +scenic/projects/mtv/configs/kinetics/k600_mtv_b2_cva.py +scenic/projects/mtv/configs/kinetics/k600_mtv_l2_cva.py +scenic/projects/mtv/configs/kinetics/k700_mtv_b2_cva.py +scenic/projects/mtv/configs/kinetics/k700_mtv_l2_cva.py +scenic/projects/mtv/configs/mit/__init__.py +scenic/projects/mtv/configs/mit/mit_mtv_l2_cva.py +scenic/projects/mtv/configs/ssv2/__init__.py +scenic/projects/mtv/configs/ssv2/ssv2_mtv_b2_cva.py +scenic/projects/ncr/__init__.py +scenic/projects/ncr/base_model.py +scenic/projects/ncr/classification_trainer.py +scenic/projects/ncr/loss.py +scenic/projects/ncr/main.py +scenic/projects/ncr/resnet.py +scenic/projects/ncr/utils.py +scenic/projects/ncr/configs/__init__.py +scenic/projects/ncr/configs/mini_imagenet_blue_baseline.py +scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train00.py +scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train20.py +scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train40.py +scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train80.py +scenic/projects/ncr/configs/mini_imagenet_red_baseline.py +scenic/projects/ncr/configs/mini_imagenet_red_ncr_train00.py +scenic/projects/ncr/configs/mini_imagenet_red_ncr_train20.py +scenic/projects/ncr/configs/mini_imagenet_red_ncr_train40.py +scenic/projects/ncr/configs/mini_imagenet_red_ncr_train80.py +scenic/projects/ncr/data/__init__.py +scenic/projects/objectvivit/__init__.py +scenic/projects/objectvivit/dataset_utils.py +scenic/projects/objectvivit/datasets.py +scenic/projects/objectvivit/main.py +scenic/projects/objectvivit/model.py +scenic/projects/objectvivit/model_utils.py +scenic/projects/objectvivit/object_attention.py +scenic/projects/objectvivit/optimizer_utils.py +scenic/projects/objectvivit/train_utils.py +scenic/projects/objectvivit/trainer.py +scenic/projects/objectvivit/configs/__init__.py +scenic/projects/objectvivit/configs/ssv2_B16_baseline.py +scenic/projects/objectvivit/configs/ssv2_B16_object.py +scenic/projects/objectvivit/configs/ssv2_B16_sampling.py +scenic/projects/omninet/__init__.py +scenic/projects/omninet/main.py +scenic/projects/omninet/model.py +scenic/projects/omninet/model_utils.py +scenic/projects/omninet/tests/__init__.py +scenic/projects/omninet/tests/test_model.py +scenic/projects/owl_vit/__init__.py +scenic/projects/owl_vit/evaluator.py +scenic/projects/owl_vit/layers.py +scenic/projects/owl_vit/losses.py +scenic/projects/owl_vit/main.py +scenic/projects/owl_vit/matching_base_models.py +scenic/projects/owl_vit/models.py +scenic/projects/owl_vit/trainer.py +scenic/projects/owl_vit/utils.py +scenic/projects/owl_vit/clip/__init__.py +scenic/projects/owl_vit/clip/layers.py +scenic/projects/owl_vit/clip/model.py +scenic/projects/owl_vit/clip/tokenizer.py +scenic/projects/owl_vit/configs/__init__.py +scenic/projects/owl_vit/configs/clip_b16.py +scenic/projects/owl_vit/configs/clip_b32.py +scenic/projects/owl_vit/configs/clip_b32_finetune.py +scenic/projects/owl_vit/configs/clip_l14.py +scenic/projects/owl_vit/configs/clip_l14_with_masks.py +scenic/projects/owl_vit/configs/owl_v2_clip_b16.py +scenic/projects/owl_vit/configs/owl_v2_clip_l14.py +scenic/projects/owl_vit/data/__init__.py +scenic/projects/owl_vit/notebooks/__init__.py +scenic/projects/owl_vit/notebooks/inference.py +scenic/projects/owl_vit/notebooks/interactive.py +scenic/projects/owl_vit/notebooks/numpy_cache.py +scenic/projects/owl_vit/notebooks/plotting.py +scenic/projects/owl_vit/notebooks/tests/__init__.py +scenic/projects/owl_vit/notebooks/tests/inference_test.py +scenic/projects/owl_vit/notebooks/tests/interactive_test.py +scenic/projects/owl_vit/notebooks/tests/numpy_cache_test.py +scenic/projects/owl_vit/notebooks/tests/plotting_test.py +scenic/projects/owl_vit/preprocessing/__init__.py +scenic/projects/owl_vit/preprocessing/image_ops.py +scenic/projects/owl_vit/preprocessing/input_pipeline.py +scenic/projects/owl_vit/preprocessing/label_ops.py +scenic/projects/owl_vit/preprocessing/modalities.py +scenic/projects/owl_vit/preprocessing/mosaic.py +scenic/projects/owl_vit/preprocessing/transforms.py +scenic/projects/owl_vit/tests/__init__.py +scenic/projects/owl_vit/tests/checkpoint_loading_test.py +scenic/projects/owl_vit/tests/layers_test.py +scenic/projects/owl_vit/tests/models_test.py +scenic/projects/owl_vit/tests/utils_test.py +scenic/projects/pixel_llm/__init__.py +scenic/projects/pixel_llm/auto_regressive_decode.py +scenic/projects/pixel_llm/densecap_evaluator.py +scenic/projects/pixel_llm/evaluate.py +scenic/projects/pixel_llm/evaluators.py +scenic/projects/pixel_llm/main.py +scenic/projects/pixel_llm/partition_utils.py +scenic/projects/pixel_llm/tokenizers.py +scenic/projects/pixel_llm/train_utils.py +scenic/projects/pixel_llm/trainer.py +scenic/projects/pixel_llm/configs/__init__.py +scenic/projects/pixel_llm/configs/common.py +scenic/projects/pointcloud/__init__.py +scenic/projects/pointcloud/main.py +scenic/projects/pointcloud/main_s3dis.py +scenic/projects/pointcloud/main_seg.py +scenic/projects/pointcloud/models.py +scenic/projects/pointcloud/models_test.py +scenic/projects/pointcloud/pointcloud_dataset.py +scenic/projects/pointcloud/s3dis_dataset.py +scenic/projects/pointcloud/segmentation_model.py +scenic/projects/pointcloud/segmentation_trainer.py +scenic/projects/pointcloud/shapenet_dataset.py +scenic/projects/pointcloud/configs/__init__.py +scenic/projects/pointcloud/configs/pct_config.py +scenic/projects/pointcloud/configs/pct_segmentation_s3dis.py +scenic/projects/pointcloud/configs/pct_segmentation_shapenet.py +scenic/projects/polyvit/__init__.py +scenic/projects/polyvit/layers.py +scenic/projects/polyvit/main.py +scenic/projects/polyvit/model.py +scenic/projects/polyvit/model_utils.py +scenic/projects/polyvit/polyvit_base_model.py +scenic/projects/polyvit/train_utils.py +scenic/projects/polyvit/trainer.py +scenic/projects/polyvit/configs/__init__.py +scenic/projects/polyvit/configs/polyvit_all.py +scenic/projects/polyvit/tests/__init__.py +scenic/projects/polyvit/tests/test_layers.py +scenic/projects/robust_segvit/__init__.py +scenic/projects/robust_segvit/datasets/__init__.py +scenic/projects/robust_segvit/datasets/cityscapes_variants.py +scenic/projects/robust_segvit/datasets/datasets_info.py +scenic/projects/robust_segvit/datasets/denoise_utils.py +scenic/projects/robust_segvit/datasets/segmentation_datasets.py +scenic/projects/robust_segvit/datasets/segmentation_variants.py +scenic/projects/robust_segvit/tests/__init__.py +scenic/projects/robust_segvit/tests/segmentation_datasets_test.py +scenic/projects/robust_segvit/tests/segmentation_variants_test.py +scenic/projects/streaming_dvc/__init__.py +scenic/projects/streaming_dvc/caption_evaluator.py +scenic/projects/streaming_dvc/cococap_eval.py +scenic/projects/streaming_dvc/densecap_evaluator.py +scenic/projects/streaming_dvc/evaluate.py +scenic/projects/streaming_dvc/main.py +scenic/projects/streaming_dvc/optimizer_utils.py +scenic/projects/streaming_dvc/partition_utils.py +scenic/projects/streaming_dvc/post_processing_utils.py +scenic/projects/streaming_dvc/train_utils.py +scenic/projects/streaming_dvc/trainer.py +scenic/projects/streaming_dvc/configs/__init__.py +scenic/projects/streaming_dvc/configs/common.py +scenic/projects/streaming_dvc/configs/git_anet_paragraph_streaming_input.py +scenic/projects/streaming_dvc/configs/git_anet_streaming_input_output.py +scenic/projects/streaming_dvc/configs/git_vitt_streaming_input_output.py +scenic/projects/streaming_dvc/configs/git_youcook2_paragraph_streaming_input.py +scenic/projects/streaming_dvc/configs/git_youcook2_streaming_input_output.py +scenic/projects/streaming_dvc/configs/vid2seq_anet_streaming_input_output.py +scenic/projects/streaming_dvc/configs/vid2seq_vitt_streaming_input_output.py +scenic/projects/streaming_dvc/configs/vid2seq_youcook2_streaming_input_output.py +scenic/projects/streaming_dvc/io/__init__.py +scenic/projects/streaming_dvc/io/densecap_ops.py +scenic/projects/streaming_dvc/io/flexio.py +scenic/projects/streaming_dvc/io/ops.py +scenic/projects/streaming_dvc/modeling/__init__.py +scenic/projects/streaming_dvc/modeling/auto_regressive_decode.py +scenic/projects/streaming_dvc/modeling/model.py +scenic/projects/streaming_dvc/modeling/streaming_model.py +scenic/projects/streaming_dvc/modeling/streaming_utils.py +scenic/projects/streaming_dvc/modeling/text_decoder.py +scenic/projects/streaming_dvc/modeling/vid2seq_model.py +scenic/projects/streaming_dvc/modeling/vit.py +scenic/projects/svvit/__init__.py +scenic/projects/svvit/classification_trainer.py +scenic/projects/svvit/inference.py +scenic/projects/svvit/main.py +scenic/projects/svvit/metrics.py +scenic/projects/svvit/transfer_trainer.py +scenic/projects/svvit/vit.py +scenic/projects/svvit/xvit.py +scenic/projects/svvit/configs/__init__.py +scenic/projects/svvit/configs/pileup_coverage_vit_config.py +scenic/projects/svvit/configs/pileup_coverage_xvit_config.py +scenic/projects/svvit/configs/vit_config.py +scenic/projects/svvit/configs/vit_finetuning_config.py +scenic/projects/svvit/configs/xvit_config.py +scenic/projects/svvit/configs/xvit_config_eval.py +scenic/projects/svvit/configs/xvit_finetuning_config.py +scenic/projects/svvit/datasets/__init__.py +scenic/projects/svvit/datasets/pileup_coverage_dataset.py +scenic/projects/svvit/datasets/pileup_window_dataset.py +scenic/projects/svvit/tests/__init__.py +scenic/projects/svvit/tests/metrics_test.py +scenic/projects/t5/__init__.py +scenic/projects/t5/inspect_model.py +scenic/projects/t5/layers.py +scenic/projects/t5/model.py +scenic/projects/t5/tokenizer.py +scenic/projects/token_learner/__init__.py +scenic/projects/token_learner/main.py +scenic/projects/token_learner/model.py +scenic/projects/token_learner/configs/__init__.py +scenic/projects/token_learner/configs/im1k_token_learner_config.py +scenic/projects/token_learner/data/__init__.py +scenic/projects/token_learner/tests/__init__.py +scenic/projects/token_learner/tests/test_model.py +scenic/projects/verbs_in_action/__init__.py +scenic/projects/verbs_in_action/clip4clip_model.py +scenic/projects/verbs_in_action/losses.py +scenic/projects/verbs_in_action/main.py +scenic/projects/verbs_in_action/tfrecord_dataset.py +scenic/projects/verbs_in_action/trainer.py +scenic/projects/verbs_in_action/utils.py +scenic/projects/verbs_in_action/configs/__init__.py +scenic/projects/verbs_in_action/configs/baseline.py +scenic/projects/verbs_in_action/configs/vfc.py +scenic/projects/vid2seq/__init__.py +scenic/projects/vid2seq/data_utils.py +scenic/projects/vid2seq/dvc_eval.py +scenic/projects/vid2seq/generate_from_file.py +scenic/projects/vid2seq/load_utils.py +scenic/projects/vid2seq/main.py +scenic/projects/vid2seq/models.py +scenic/projects/vid2seq/train_utils.py +scenic/projects/vid2seq/trainer.py +scenic/projects/vid2seq/configs/__init__.py +scenic/projects/vid2seq/configs/activitynet-captions.py +scenic/projects/vid2seq/configs/youcook2.py +scenic/projects/vid2seq/configs/yttemporal.py +scenic/projects/vid2seq/datasets/__init__.py +scenic/projects/vid2seq/datasets/dense_video_captioning_tfrecord_dataset.py +scenic/projects/vivit/__init__.py +scenic/projects/vivit/evaluation_lib.py +scenic/projects/vivit/main.py +scenic/projects/vivit/model.py +scenic/projects/vivit/model_utils.py +scenic/projects/vivit/train_utils.py +scenic/projects/vivit/trainer.py +scenic/projects/vivit/configs/__init__.py +scenic/projects/vivit/configs/epic_kitchens/__init__.py +scenic/projects/vivit/configs/epic_kitchens/vivit_large_factorised_encoder.py +scenic/projects/vivit/configs/kinetics400/__init__.py +scenic/projects/vivit/configs/kinetics400/vivit_base_factorised_encoder.py +scenic/projects/vivit/configs/kinetics400/vivit_base_k400.py +scenic/projects/vivit/configs/kinetics400/vivit_large_factorised_encoder.py +scenic/projects/vivit/configs/kinetics600/__init__.py +scenic/projects/vivit/configs/kinetics600/vivit_large_factorised_encoder.py +scenic/projects/vivit/configs/something_something_v2/__init__.py +scenic/projects/vivit/configs/something_something_v2/vivit_large_factorised_encoder.py +scenic/projects/vivit/data/__init__.py +scenic/projects/vivit/data/file_utils.py +scenic/projects/vivit/data/video_tfrecord_dataset.py +scenic/projects/vivit/data/tests/__init__.py +scenic/projects/vivit/data/tests/test_video_tfrecord_dataset.py +scenic/projects/vivit/tests/__init__.py +scenic/projects/vivit/tests/test_vivit_metrics.py +scenic/projects/vivit/tests/test_vivit_trainer.py +scenic/train_lib/__init__.py +scenic/train_lib/classification_trainer.py +scenic/train_lib/lr_schedules.py +scenic/train_lib/optax.py +scenic/train_lib/optimizers.py +scenic/train_lib/pretrain_utils.py +scenic/train_lib/train_utils.py +scenic/train_lib/trainers.py +scenic/train_lib/tests/__init__.py +scenic/train_lib/tests/test_classification_trainer.py +scenic/train_lib/tests/test_lr_schedules.py +scenic/train_lib/tests/test_optax.py +scenic/train_lib/tests/test_optimizers.py +scenic/train_lib/tests/test_train_utils.py +scenic/train_lib/transfer/__init__.py +scenic/train_lib/transfer/fewshot_utils.py +scenic/train_lib/transfer/linear_probe_utils.py +scenic/train_lib/transfer/transfer_trainer.py +scenic/train_lib/transfer/tests/__init__.py +scenic/train_lib/transfer/tests/test_fewshot_utils.py \ No newline at end of file diff --git a/scenic.egg-info/dependency_links.txt b/scenic.egg-info/dependency_links.txt new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/scenic.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/scenic.egg-info/requires.txt b/scenic.egg-info/requires.txt new file mode 100644 index 0000000000000000000000000000000000000000..41d6ef4b4f1be9950f08717dcb4b491f50bc5240 --- /dev/null +++ b/scenic.egg-info/requires.txt @@ -0,0 +1,20 @@ +absl-py>=1.0.0 +numpy>=1.12 +jax>=0.4.3 +jaxlib>=0.4.3 +flax>=0.4.0 +ml-collections>=0.1.1 +tensorflow>=2.7 +immutabledict>=2.2.1 +clu>=0.0.6 +tensorflow-datasets +optax@ git+https://ghfast.top/https://github.com/google-deepmind/optax.git@main + +[testing] +pytest +shapely +ott-jax>=0.2.0 +sklearn +lingvo==0.12.6 +seaborn>=0.11.2 +dmvr@ git+https://ghfast.top/https://github.com/google-deepmind/dmvr.git diff --git a/scenic.egg-info/top_level.txt b/scenic.egg-info/top_level.txt new file mode 100644 index 0000000000000000000000000000000000000000..8708e0a6f05616a7c2d499da0c057182818ffb0b --- /dev/null +++ b/scenic.egg-info/top_level.txt @@ -0,0 +1,2 @@ +big_vision +scenic diff --git a/scenic/__init__.py b/scenic/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/__pycache__/__init__.cpython-310.pyc b/scenic/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..203d266a56132248d8a866a56105fa2a0c8580ec Binary files /dev/null and b/scenic/__pycache__/__init__.cpython-310.pyc differ diff --git a/scenic/__pycache__/__init__.cpython-311.pyc b/scenic/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f19fad5c9fa5e2df76126a021900965199d93b86 Binary files /dev/null and b/scenic/__pycache__/__init__.cpython-311.pyc differ diff --git a/scenic/__pycache__/__init__.cpython-312.pyc b/scenic/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a6a7a6c1dcd3e7c45b0d49f8a0ccf758a5138a84 Binary files /dev/null and b/scenic/__pycache__/__init__.cpython-312.pyc differ diff --git a/scenic/app.py b/scenic/app.py new file mode 100644 index 0000000000000000000000000000000000000000..401292ef852dab52f9df835ae1d7bb7cc4360dfc --- /dev/null +++ b/scenic/app.py @@ -0,0 +1,109 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Generic entry point for Python application in Scenic. + +This provides run() which performs some initialization and then calls the +provided main with a JAX PRNGKey, the ConfigDict, the working directory +and a CLU MetricWriter. +We expect each scenic project to have its own main.py. It's very short but +makes it easier to maintain scenic as the number of projects grows. + +Usage in your main.py: + from scenic import app + + def main(rng: jnp.ndarray, + config: ml_collections.ConfigDict, + workdir: str, + writer: metric_writers.MetricWriter): + # Call the library that trains your model. + + if __name__ == '__main__': + app.run(main) +""" +import functools +import os + +from absl import app +from absl import flags +from absl import logging + +from clu import metric_writers +from clu import platform +import flax +import flax.linen as nn +import jax +from ml_collections import config_flags +import tensorflow as tf + +FLAGS = flags.FLAGS + +# These are general flags that are used across most of scenic projects. These +# flags can be accessed via `flags.FLAGS.` and projects can also +# define their own flags in their `main.py`. +config_flags.DEFINE_config_file( + 'config', None, 'Training configuration.', lock_config=False) +flags.DEFINE_string('workdir', None, 'Work unit directory.') +flags.DEFINE_string('dataset_service_address', None, + 'Address of the tf.data service') +flags.mark_flags_as_required(['config', 'workdir']) + +flax.config.update('flax_use_orbax_checkpointing', False) + + +def run(main): + # Provide access to --jax_backend_target and --jax_xla_backend flags. + jax.config.config_with_absl() + app.run(functools.partial(_run_main, main=main)) + + +def _run_main(argv, *, main): + """Runs the `main` method after some initial setup.""" + del argv + # Hide any GPUs form TensorFlow. Otherwise, TF might reserve memory and make + # it unavailable to JAX. + tf.config.experimental.set_visible_devices([], 'GPU') + + config = FLAGS.config + workdir = FLAGS.workdir + if 'workdir_suffix' in config: + workdir = os.path.join(workdir, config.workdir_suffix) + + # Enable wrapping of all module calls in a named_call for easier profiling: + nn.enable_named_call() + + if FLAGS.jax_backend_target: + logging.info('Using JAX backend target %s', FLAGS.jax_backend_target) + jax_xla_backend = ('None' if FLAGS.jax_xla_backend is None else + FLAGS.jax_xla_backend) + logging.info('Using JAX XLA backend %s', jax_xla_backend) + + logging.info('JAX host: %d / %d', jax.process_index(), jax.process_count()) + logging.info('JAX devices: %r', jax.devices()) + + # Add a note so that we can tell which task is which JAX host. + # (task 0 is not guaranteed to be the host 0) + platform.work_unit().set_task_status( + f'host_id: {jax.process_index()}, host_count: {jax.process_count()}') + if jax.process_index() == 0: + platform.work_unit().create_artifact(platform.ArtifactType.DIRECTORY, + workdir, 'Workdir') + + rng = jax.random.PRNGKey(config.rng_seed) + logging.info('RNG: %s', rng) + + writer = metric_writers.create_default_writer( + workdir, just_logging=jax.process_index() > 0, asynchronous=True) + + main(rng=rng, config=config, workdir=workdir, writer=writer) diff --git a/scenic/common_lib/__init__.py b/scenic/common_lib/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/common_lib/__pycache__/__init__.cpython-310.pyc b/scenic/common_lib/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0655aeb1434b7eb26900dc09b58591a25dc9c95b Binary files /dev/null and b/scenic/common_lib/__pycache__/__init__.cpython-310.pyc differ diff --git a/scenic/common_lib/__pycache__/__init__.cpython-311.pyc b/scenic/common_lib/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3a032d51c5263ae242ad07dd43f44c463cc10de2 Binary files /dev/null and b/scenic/common_lib/__pycache__/__init__.cpython-311.pyc differ diff --git a/scenic/common_lib/__pycache__/__init__.cpython-312.pyc b/scenic/common_lib/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5065d43648ec72b064229159d4208ec7b2bfe62 Binary files /dev/null and b/scenic/common_lib/__pycache__/__init__.cpython-312.pyc differ diff --git a/scenic/common_lib/__pycache__/debug_utils.cpython-310.pyc b/scenic/common_lib/__pycache__/debug_utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0bd145e9575ef99706a1f521779bff479ebab2f5 Binary files /dev/null and b/scenic/common_lib/__pycache__/debug_utils.cpython-310.pyc differ diff --git a/scenic/common_lib/__pycache__/debug_utils.cpython-311.pyc b/scenic/common_lib/__pycache__/debug_utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6808ea09b85e2c3177277074def4d7b30e0dd8cc Binary files /dev/null and b/scenic/common_lib/__pycache__/debug_utils.cpython-311.pyc differ diff --git a/scenic/common_lib/__pycache__/debug_utils.cpython-312.pyc b/scenic/common_lib/__pycache__/debug_utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..27fcf549f6ff25955831a00708ea9f87a3966152 Binary files /dev/null and b/scenic/common_lib/__pycache__/debug_utils.cpython-312.pyc differ diff --git a/scenic/common_lib/colabs/__init__.py b/scenic/common_lib/colabs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/common_lib/colabs/scenic_playground.ipynb b/scenic/common_lib/colabs/scenic_playground.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..ca75d66f836b6598a4e94c582b639a6c03fca73e --- /dev/null +++ b/scenic/common_lib/colabs/scenic_playground.ipynb @@ -0,0 +1,1098 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "scenic_playground.ipynb", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU" + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "5-Yta1B7rtWu" + }, + "source": [ + "# Download and install Scenic" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hx78r5ZZ___R", + "outputId": "3a685351-c24e-46b9-866e-20ddda788bd7" + }, + "source": [ + "!rm -rf *\n", + "!rm -rf .config\n", + "!rm -rf .git\n", + "!git clone https://github.com/google-research/scenic.git .\n", + "!python -m pip install -q ." + ], + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Cloning into '.'...\n", + "remote: Enumerating objects: 727, done.\u001b[K\n", + "remote: Counting objects: 100% (727/727), done.\u001b[K\n", + "remote: Compressing objects: 100% (467/467), done.\u001b[K\n", + "remote: Total 727 (delta 392), reused 578 (delta 244), pack-reused 0\u001b[K\n", + "Receiving objects: 100% (727/727), 8.28 MiB | 1.17 MiB/s, done.\n", + "Resolving deltas: 100% (392/392), done.\n", + "\u001b[33m DEPRECATION: A future pip version will change local packages to be built in-place without first copying to a temporary directory. We recommend you use --use-feature=in-tree-build to test your packages with this new behavior before it becomes the default.\n", + " pip 21.3 will remove support for this functionality. You can find discussion regarding this at https://github.com/pypa/pip/issues/7555.\u001b[0m\n", + " Building wheel for scenic (setup.py) ... \u001b[?25l\u001b[?25hdone\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9sNzeUPjv-QA" + }, + "source": [ + "# Train [a simple feedforward network on mnist](https://github.com/google-research/scenic/blob/main/scenic/projects/baselines/configs/mnist/mnist_config.py)" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "DZapHpw-yKCB", + "outputId": "b26043dc-8e5d-4aee-d1f9-804a6b6c05cb" + }, + "source": [ + "!PYTHONPATH=\"$(pwd)\":\"$PYTHON_PATH\" python scenic/main.py \\\n", + " --config=scenic/projects/baselines/configs/mnist/mnist_config.py \\\n", + " --workdir=./" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "I1011 13:37:22.330163 140122186418048 xla_bridge.py:226] Unable to initialize backend 'tpu_driver': NOT_FOUND: Unable to find driver in registry given worker: \n", + "I1011 13:37:22.470367 140122186418048 xla_bridge.py:226] Unable to initialize backend 'tpu': INVALID_ARGUMENT: TpuPlatform is not available.\n", + "I1011 13:37:22.470726 140122186418048 app.py:80] JAX host: 0 / 1\n", + "I1011 13:37:22.470875 140122186418048 app.py:81] JAX devices: [GpuDevice(id=0, process_index=0)]\n", + "I1011 13:37:22.471045 140122186418048 local.py:45] Setting task status: host_id: 0, host_count: 1\n", + "I1011 13:37:22.474154 140122186418048 local.py:51] Created artifact Workdir of type ArtifactType.DIRECTORY and value ./.\n", + "I1011 13:37:23.214558 140122186418048 app.py:91] RNG: [0 0]\n", + "I1011 13:37:24.043761 140122186418048 train_utils.py:149] device_count: 1\n", + "I1011 13:37:24.044039 140122186418048 train_utils.py:150] num_hosts : 1\n", + "I1011 13:37:24.044161 140122186418048 train_utils.py:151] host_id : 0\n", + "I1011 13:37:24.045577 140122186418048 datasets.py:91] On-demand import of dataset (mnist) from module (scenic.dataset_lib.mnist_dataset).\n", + "I1011 13:37:24.045974 140122186418048 train_utils.py:168] local_batch_size : 128\n", + "I1011 13:37:24.046089 140122186418048 train_utils.py:169] device_batch_size : 128\n", + "I1011 13:37:24.046446 140122186418048 mnist_dataset.py:73] Loading train split of the MNIST dataset.\n", + "I1011 13:37:24.047486 140122186418048 dataset_info.py:375] Load dataset info from /root/tensorflow_datasets/mnist/3.0.1\n", + "I1011 13:37:24.049653 140122186418048 dataset_info.py:430] Field info.citation from disk and from code do not match. Keeping the one from code.\n", + "I1011 13:37:24.049880 140122186418048 dataset_info.py:430] Field info.splits from disk and from code do not match. Keeping the one from code.\n", + "I1011 13:37:24.050011 140122186418048 dataset_info.py:430] Field info.supervised_keys from disk and from code do not match. Keeping the one from code.\n", + "I1011 13:37:24.050171 140122186418048 dataset_info.py:430] Field info.module_name from disk and from code do not match. Keeping the one from code.\n", + "I1011 13:37:24.050393 140122186418048 dataset_builder.py:352] Reusing dataset mnist (/root/tensorflow_datasets/mnist/3.0.1)\n", + "I1011 13:37:24.050624 140122186418048 dataset_utils.py:499] Host 0 data range: from 0 to 60000 (from split train)\n", + "I1011 13:37:24.050778 140122186418048 logging_logger.py:36] Constructing tf.data.Dataset mnist for split ReadInstruction('train[0:60000]'), from /root/tensorflow_datasets/mnist/3.0.1\n", + "I1011 13:37:24.237263 140122186418048 mnist_dataset.py:90] Loading test split of the MNIST dataset.\n", + "I1011 13:37:24.238183 140122186418048 dataset_info.py:375] Load dataset info from /root/tensorflow_datasets/mnist/3.0.1\n", + "I1011 13:37:24.240091 140122186418048 dataset_info.py:430] Field info.citation from disk and from code do not match. Keeping the one from code.\n", + "I1011 13:37:24.240290 140122186418048 dataset_info.py:430] Field info.splits from disk and from code do not match. Keeping the one from code.\n", + "I1011 13:37:24.240410 140122186418048 dataset_info.py:430] Field info.supervised_keys from disk and from code do not match. Keeping the one from code.\n", + "I1011 13:37:24.240530 140122186418048 dataset_info.py:430] Field info.module_name from disk and from code do not match. Keeping the one from code.\n", + "I1011 13:37:24.240723 140122186418048 dataset_builder.py:352] Reusing dataset mnist (/root/tensorflow_datasets/mnist/3.0.1)\n", + "I1011 13:37:24.240959 140122186418048 dataset_utils.py:499] Host 0 data range: from 0 to 10000 (from split test)\n", + "I1011 13:37:24.241099 140122186418048 logging_logger.py:36] Constructing tf.data.Dataset mnist for split ReadInstruction('test[0:10000]'), from /root/tensorflow_datasets/mnist/3.0.1\n", + "I1011 13:37:24.340181 140122186418048 dataset_info.py:375] Load dataset info from /root/tensorflow_datasets/mnist/3.0.1\n", + "I1011 13:37:24.341984 140122186418048 dataset_info.py:430] Field info.citation from disk and from code do not match. Keeping the one from code.\n", + "I1011 13:37:24.342200 140122186418048 dataset_info.py:430] Field info.splits from disk and from code do not match. Keeping the one from code.\n", + "I1011 13:37:24.342328 140122186418048 dataset_info.py:430] Field info.supervised_keys from disk and from code do not match. Keeping the one from code.\n", + "I1011 13:37:24.342463 140122186418048 dataset_info.py:430] Field info.module_name from disk and from code do not match. Keeping the one from code.\n", + "I1011 13:37:24.343276 140122186418048 dataset_info.py:375] Load dataset info from /root/tensorflow_datasets/mnist/3.0.1\n", + "I1011 13:37:24.344682 140122186418048 dataset_info.py:430] Field info.citation from disk and from code do not match. Keeping the one from code.\n", + "I1011 13:37:24.344892 140122186418048 dataset_info.py:430] Field info.splits from disk and from code do not match. Keeping the one from code.\n", + "I1011 13:37:24.345018 140122186418048 dataset_info.py:430] Field info.supervised_keys from disk and from code do not match. Keeping the one from code.\n", + "I1011 13:37:24.345163 140122186418048 dataset_info.py:430] Field info.module_name from disk and from code do not match. Keeping the one from code.\n", + "I1011 13:37:26.517037 140122186418048 parameter_overview.py:257] \n", + "+--------------------------+-----------+--------+-----------+--------+\n", + "| Name | Shape | Size | Mean | Std |\n", + "+--------------------------+-----------+--------+-----------+--------+\n", + "| Dense_0/bias | (64,) | 64 | 0.0 | 0.0 |\n", + "| Dense_0/kernel | (784, 64) | 50,176 | -0.000102 | 0.0357 |\n", + "| Dense_1/bias | (64,) | 64 | 0.0 | 0.0 |\n", + "| Dense_1/kernel | (64, 64) | 4,096 | 0.00208 | 0.125 |\n", + "| output_projection/bias | (10,) | 10 | 0.0 | 0.0 |\n", + "| output_projection/kernel | (64, 10) | 640 | -0.00915 | 0.127 |\n", + "+--------------------------+-----------+--------+-----------+--------+\n", + "Total: 55,050\n", + "I1011 13:37:26.517357 140122186418048 debug_utils.py:68] Total params: 55050\n", + "I1011 13:37:26.697683 140122186418048 debug_utils.py:122] GFLOPs 0.000 for input spec: [((-1, 28, 28, 1), )]\n", + "I1011 13:37:26.730629 140122186418048 checkpoints.py:249] Found no checkpoint files in .\n", + "I1011 13:37:26.751403 140122186418048 classification_trainer.py:314] Starting training loop at step 1.\n", + "I1011 13:37:26.751932 140116713731840 logging_writer.py:35] [1] gflops=0.000055, num_trainable_params=55050\n", + "/usr/local/lib/python3.7/dist-packages/jax/_src/profiler.py:167: UserWarning: StepTraceContext has been renamed to StepTraceAnnotation. This alias will eventually be removed; please update your code.\n", + " \"StepTraceContext has been renamed to StepTraceAnnotation. This alias \"\n", + "2021-10-11 13:37:27.683510: W external/org_tensorflow/tensorflow/compiler/xla/service/gpu/gemm_algorithm_picker.cc:211] Failed to find best cuBLAS algorithm, GEMM performance might be suboptimal: INTERNAL: All algorithms tried for %custom-call.1 = f32[128,64]{1,0} custom-call(f32[128,784]{1,0} %bitcast.7, f32[784,64]{1,0} %parameter.13, f32[128,64]{1,0} %broadcast), custom_call_target=\"__cublas$gemm\", metadata={op_type=\"add\" op_name=\"pmap()/add\" source_file=\"/usr/local/lib/python3.7/dist-packages/flax/linen/linear.py\" source_line=181}, backend_config=\"{\\\"alpha_real\\\":1,\\\"alpha_imag\\\":0,\\\"beta\\\":1,\\\"dot_dimension_numbers\\\":{\\\"lhs_contracting_dimensions\\\":[\\\"1\\\"],\\\"rhs_contracting_dimensions\\\":[\\\"0\\\"],\\\"lhs_batch_dimensions\\\":[],\\\"rhs_batch_dimensions\\\":[]},\\\"batch_size\\\":\\\"1\\\",\\\"lhs_stride\\\":\\\"100352\\\",\\\"rhs_stride\\\":\\\"50176\\\"}\" failed. Falling back to default algorithm. \n", + "2021-10-11 13:37:27.684329: W external/org_tensorflow/tensorflow/compiler/xla/service/gpu/gemm_algorithm_picker.cc:211] Failed to find best cuBLAS algorithm, GEMM performance might be suboptimal: INTERNAL: All algorithms tried for %custom-call.3 = f32[128,64]{1,0} custom-call(f32[128,64]{1,0} %maximum.101, f32[64,64]{1,0} %parameter.15, f32[128,64]{1,0} %broadcast.1), custom_call_target=\"__cublas$gemm\", metadata={op_type=\"add\" op_name=\"pmap()/add\" source_file=\"/usr/local/lib/python3.7/dist-packages/flax/linen/linear.py\" source_line=181}, backend_config=\"{\\\"alpha_real\\\":1,\\\"alpha_imag\\\":0,\\\"beta\\\":1,\\\"dot_dimension_numbers\\\":{\\\"lhs_contracting_dimensions\\\":[\\\"1\\\"],\\\"rhs_contracting_dimensions\\\":[\\\"0\\\"],\\\"lhs_batch_dimensions\\\":[],\\\"rhs_batch_dimensions\\\":[]},\\\"batch_size\\\":\\\"1\\\",\\\"lhs_stride\\\":\\\"8192\\\",\\\"rhs_stride\\\":\\\"4096\\\"}\" failed. Falling back to default algorithm. \n", + "2021-10-11 13:37:27.685097: W external/org_tensorflow/tensorflow/compiler/xla/service/gpu/gemm_algorithm_picker.cc:211] Failed to find best cuBLAS algorithm, GEMM performance might be suboptimal: INTERNAL: All algorithms tried for %custom-call.5 = f32[128,10]{1,0} custom-call(f32[128,64]{1,0} %maximum.140, f32[64,10]{1,0} %parameter.17, f32[128,10]{1,0} %broadcast.3), custom_call_target=\"__cublas$gemm\", metadata={op_type=\"add\" op_name=\"pmap()/add\" source_file=\"/usr/local/lib/python3.7/dist-packages/flax/linen/linear.py\" source_line=181}, backend_config=\"{\\\"alpha_real\\\":1,\\\"alpha_imag\\\":0,\\\"beta\\\":1,\\\"dot_dimension_numbers\\\":{\\\"lhs_contracting_dimensions\\\":[\\\"1\\\"],\\\"rhs_contracting_dimensions\\\":[\\\"0\\\"],\\\"lhs_batch_dimensions\\\":[],\\\"rhs_batch_dimensions\\\":[]},\\\"batch_size\\\":\\\"1\\\",\\\"lhs_stride\\\":\\\"8192\\\",\\\"rhs_stride\\\":\\\"640\\\"}\" failed. Falling back to default algorithm. \n", + "2021-10-11 13:37:27.685657: W external/org_tensorflow/tensorflow/compiler/xla/service/gpu/gemm_algorithm_picker.cc:211] Failed to find best cuBLAS algorithm, GEMM performance might be suboptimal: INTERNAL: All algorithms tried for %custom-call.6 = f32[128,64]{1,0} custom-call(f32[128,10]{1,0} %add.354, f32[64,10]{1,0} %parameter.17), custom_call_target=\"__cublas$gemm\", metadata={op_type=\"dot_general\" op_name=\"pmap()/dot_general[ dimension_numbers=(((1,), (1,)), ((), ()))\\n precision=None\\n preferred_element_type=None ]\" source_file=\"/usr/local/lib/python3.7/dist-packages/flax/linen/linear.py\" source_line=177}, backend_config=\"{\\\"alpha_real\\\":1,\\\"alpha_imag\\\":0,\\\"beta\\\":0,\\\"dot_dimension_numbers\\\":{\\\"lhs_contracting_dimensions\\\":[\\\"1\\\"],\\\"rhs_contracting_dimensions\\\":[\\\"1\\\"],\\\"lhs_batch_dimensions\\\":[],\\\"rhs_batch_dimensions\\\":[]},\\\"batch_size\\\":\\\"1\\\",\\\"lhs_stride\\\":\\\"1280\\\",\\\"rhs_stride\\\":\\\"640\\\"}\" failed. Falling back to default algorithm. \n", + "2021-10-11 13:37:27.686257: W external/org_tensorflow/tensorflow/compiler/xla/service/gpu/gemm_algorithm_picker.cc:211] Failed to find best cuBLAS algorithm, GEMM performance might be suboptimal: INTERNAL: All algorithms tried for %custom-call.7 = f32[128,64]{1,0} custom-call(f32[128,64]{1,0} %select.369, f32[64,64]{1,0} %parameter.15), custom_call_target=\"__cublas$gemm\", metadata={op_type=\"dot_general\" op_name=\"pmap()/dot_general[ dimension_numbers=(((1,), (1,)), ((), ()))\\n precision=None\\n preferred_element_type=None ]\" source_file=\"/usr/local/lib/python3.7/dist-packages/flax/linen/linear.py\" source_line=177}, backend_config=\"{\\\"alpha_real\\\":1,\\\"alpha_imag\\\":0,\\\"beta\\\":0,\\\"dot_dimension_numbers\\\":{\\\"lhs_contracting_dimensions\\\":[\\\"1\\\"],\\\"rhs_contracting_dimensions\\\":[\\\"1\\\"],\\\"lhs_batch_dimensions\\\":[],\\\"rhs_batch_dimensions\\\":[]},\\\"batch_size\\\":\\\"1\\\",\\\"lhs_stride\\\":\\\"8192\\\",\\\"rhs_stride\\\":\\\"4096\\\"}\" failed. Falling back to default algorithm. \n", + "2021-10-11 13:37:27.688724: W external/org_tensorflow/tensorflow/compiler/xla/service/gpu/gemm_algorithm_picker.cc:211] Failed to find best cuBLAS algorithm, GEMM performance might be suboptimal: INTERNAL: All algorithms tried for %custom-call.9 = f32[784,64]{1,0} custom-call(f32[128,784]{1,0} %bitcast.7, f32[128,64]{1,0} %select.384, f32[784,64]{1,0} %multiply.322), custom_call_target=\"__cublas$gemm\", metadata={op_type=\"add_any\" op_name=\"pmap()/add_any\" source_file=\"/content/scenic/train_lib_deprecated/classification_trainer.py\" source_line=120}, backend_config=\"{\\\"alpha_real\\\":1,\\\"alpha_imag\\\":0,\\\"beta\\\":1,\\\"dot_dimension_numbers\\\":{\\\"lhs_contracting_dimensions\\\":[\\\"0\\\"],\\\"rhs_contracting_dimensions\\\":[\\\"0\\\"],\\\"lhs_batch_dimensions\\\":[],\\\"rhs_batch_dimensions\\\":[]},\\\"batch_size\\\":\\\"1\\\",\\\"lhs_stride\\\":\\\"100352\\\",\\\"rhs_stride\\\":\\\"8192\\\"}\" failed. Falling back to default algorithm. \n", + "2021-10-11 13:37:27.690173: W external/org_tensorflow/tensorflow/compiler/xla/service/gpu/gemm_algorithm_picker.cc:211] Failed to find best cuBLAS algorithm, GEMM performance might be suboptimal: INTERNAL: All algorithms tried for %custom-call.11 = f32[64,64]{1,0} custom-call(f32[128,64]{1,0} %maximum.101, f32[128,64]{1,0} %select.369, f32[64,64]{1,0} %multiply.320), custom_call_target=\"__cublas$gemm\", metadata={op_type=\"add_any\" op_name=\"pmap()/add_any\" source_file=\"/content/scenic/train_lib_deprecated/classification_trainer.py\" source_line=120}, backend_config=\"{\\\"alpha_real\\\":1,\\\"alpha_imag\\\":0,\\\"beta\\\":1,\\\"dot_dimension_numbers\\\":{\\\"lhs_contracting_dimensions\\\":[\\\"0\\\"],\\\"rhs_contracting_dimensions\\\":[\\\"0\\\"],\\\"lhs_batch_dimensions\\\":[],\\\"rhs_batch_dimensions\\\":[]},\\\"batch_size\\\":\\\"1\\\",\\\"lhs_stride\\\":\\\"8192\\\",\\\"rhs_stride\\\":\\\"8192\\\"}\" failed. Falling back to default algorithm. \n", + "2021-10-11 13:37:27.690897: W external/org_tensorflow/tensorflow/compiler/xla/service/gpu/gemm_algorithm_picker.cc:211] Failed to find best cuBLAS algorithm, GEMM performance might be suboptimal: INTERNAL: All algorithms tried for %custom-call.13 = f32[64,10]{1,0} custom-call(f32[128,64]{1,0} %maximum.140, f32[128,10]{1,0} %add.354, f32[64,10]{1,0} %multiply.318), custom_call_target=\"__cublas$gemm\", metadata={op_type=\"add_any\" op_name=\"pmap()/add_any\" source_file=\"/content/scenic/train_lib_deprecated/classification_trainer.py\" source_line=120}, backend_config=\"{\\\"alpha_real\\\":1,\\\"alpha_imag\\\":0,\\\"beta\\\":1,\\\"dot_dimension_numbers\\\":{\\\"lhs_contracting_dimensions\\\":[\\\"0\\\"],\\\"rhs_contracting_dimensions\\\":[\\\"0\\\"],\\\"lhs_batch_dimensions\\\":[],\\\"rhs_batch_dimensions\\\":[]},\\\"batch_size\\\":\\\"1\\\",\\\"lhs_stride\\\":\\\"8192\\\",\\\"rhs_stride\\\":\\\"1280\\\"}\" failed. Falling back to default algorithm. \n", + "I1011 13:37:28.338377 140116713731840 logging_writer.py:35] [1] train_accuracy=0.031250, train_loss=2.367167\n", + "I1011 13:37:28.338600 140116713731840 logging_writer.py:35] [1] learning_rate=0.10000000149011612\n", + "I1011 13:37:29.061676 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.070312, valid_loss=2.317226\n", + "I1011 13:37:29.086503 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.078125, valid_loss=2.323468\n", + "I1011 13:37:29.096722 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.083333, valid_loss=2.310772\n", + "I1011 13:37:29.125261 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.083984, valid_loss=2.306300\n", + "I1011 13:37:29.155785 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.079687, valid_loss=2.310255\n", + "I1011 13:37:29.186198 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.083333, valid_loss=2.309690\n", + "I1011 13:37:29.216058 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.083705, valid_loss=2.307699\n", + "I1011 13:37:29.246399 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.090820, valid_loss=2.298871\n", + "I1011 13:37:29.280526 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.092014, valid_loss=2.298447\n", + "I1011 13:37:29.309807 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.098437, valid_loss=2.296714\n", + "I1011 13:37:29.339236 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.098722, valid_loss=2.296815\n", + "I1011 13:37:29.363693 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102214, valid_loss=2.295394\n", + "I1011 13:37:29.410041 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102764, valid_loss=2.296545\n", + "I1011 13:37:29.441876 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102679, valid_loss=2.296509\n", + "I1011 13:37:29.469475 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.101042, valid_loss=2.296526\n", + "I1011 13:37:29.497415 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.099609, valid_loss=2.298498\n", + "I1011 13:37:29.524138 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.101103, valid_loss=2.298337\n", + "I1011 13:37:29.547951 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.101562, valid_loss=2.298520\n", + "I1011 13:37:29.581416 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102385, valid_loss=2.298767\n", + "I1011 13:37:29.608180 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.104297, valid_loss=2.297799\n", + "I1011 13:37:29.635370 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.109003, valid_loss=2.295632\n", + "I1011 13:37:29.660868 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.107244, valid_loss=2.296778\n", + "I1011 13:37:29.694727 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.106997, valid_loss=2.297229\n", + "I1011 13:37:29.721502 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.106771, valid_loss=2.296281\n", + "I1011 13:37:29.751823 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.105937, valid_loss=2.296726\n", + "I1011 13:37:29.780170 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.104868, valid_loss=2.296996\n", + "I1011 13:37:29.806238 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103877, valid_loss=2.296737\n", + "I1011 13:37:29.833980 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102958, valid_loss=2.296254\n", + "I1011 13:37:29.862789 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.101832, valid_loss=2.297665\n", + "I1011 13:37:29.893026 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103125, valid_loss=2.297216\n", + "I1011 13:37:29.920401 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103831, valid_loss=2.297017\n", + "I1011 13:37:29.945014 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102295, valid_loss=2.298065\n", + "I1011 13:37:29.985043 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102509, valid_loss=2.297678\n", + "I1011 13:37:30.014860 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103171, valid_loss=2.297110\n", + "I1011 13:37:30.037876 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102679, valid_loss=2.297536\n", + "I1011 13:37:30.065467 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103082, valid_loss=2.297011\n", + "I1011 13:37:30.102349 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103252, valid_loss=2.297233\n", + "I1011 13:37:30.135100 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103207, valid_loss=2.297168\n", + "I1011 13:37:30.163512 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103165, valid_loss=2.297728\n", + "I1011 13:37:30.195191 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103125, valid_loss=2.297764\n", + "I1011 13:37:30.214009 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102706, valid_loss=2.297824\n", + "I1011 13:37:30.244026 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103237, valid_loss=2.297624\n", + "I1011 13:37:30.272275 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102653, valid_loss=2.298252\n", + "I1011 13:37:30.305942 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102983, valid_loss=2.297823\n", + "I1011 13:37:30.340119 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102951, valid_loss=2.298340\n", + "I1011 13:37:30.367739 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102751, valid_loss=2.298397\n", + "I1011 13:37:30.412262 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102394, valid_loss=2.298383\n", + "I1011 13:37:30.439724 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102539, valid_loss=2.298734\n", + "I1011 13:37:30.469190 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103635, valid_loss=2.298282\n", + "I1011 13:37:30.496141 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.104062, valid_loss=2.298273\n", + "I1011 13:37:30.531314 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103401, valid_loss=2.298804\n", + "I1011 13:37:30.554804 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103816, valid_loss=2.299096\n", + "I1011 13:37:30.592104 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.104216, valid_loss=2.298816\n", + "I1011 13:37:30.610923 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.104167, valid_loss=2.298651\n", + "I1011 13:37:30.645015 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.105398, valid_loss=2.298075\n", + "I1011 13:37:30.669055 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.104911, valid_loss=2.298440\n", + "I1011 13:37:30.705884 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.104441, valid_loss=2.298548\n", + "I1011 13:37:30.729547 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.104930, valid_loss=2.298330\n", + "I1011 13:37:30.753895 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.105403, valid_loss=2.298217\n", + "I1011 13:37:30.786985 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.105599, valid_loss=2.298111\n", + "I1011 13:37:30.809854 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.105661, valid_loss=2.297816\n", + "I1011 13:37:30.840849 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.105595, valid_loss=2.297686\n", + "I1011 13:37:30.875266 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.105035, valid_loss=2.298276\n", + "I1011 13:37:30.910569 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.104614, valid_loss=2.298463\n", + "I1011 13:37:30.936408 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.104687, valid_loss=2.298179\n", + "I1011 13:37:30.961055 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.104877, valid_loss=2.297972\n", + "I1011 13:37:30.997040 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.104128, valid_loss=2.298407\n", + "I1011 13:37:31.029308 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103975, valid_loss=2.298545\n", + "I1011 13:37:31.050748 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.104053, valid_loss=2.298754\n", + "I1011 13:37:31.080088 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103571, valid_loss=2.298868\n", + "I1011 13:37:31.111133 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102663, valid_loss=2.299425\n", + "I1011 13:37:31.134297 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102431, valid_loss=2.299564\n", + "I1011 13:37:31.169328 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102740, valid_loss=2.299219\n", + "I1011 13:37:31.189510 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102829, valid_loss=2.299457\n", + "I1011 13:37:31.234695 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102812, valid_loss=2.299351\n", + "I1011 13:37:31.257628 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102488, valid_loss=2.299209\n", + "I1011 13:37:31.281896 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.102780, valid_loss=2.299004\n", + "I1011 13:37:31.312210 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103065, valid_loss=2.299020\n", + "I1011 13:37:31.319868 140115538753280 logging_writer.py:35] [1] valid_accuracy=0.103000, valid_loss=2.299067\n", + "I1011 13:37:37.511965 140122186418048 local.py:51] Created artifact [10] Profile of type ArtifactType.URL and value None.\n", + "I1011 13:37:46.857614 140122186418048 checkpoints.py:120] Saving checkpoint at step: 468\n", + "I1011 13:37:46.860437 140122186418048 checkpoints.py:149] Saved checkpoint at ./checkpoint_468\n", + "I1011 13:37:46.864437 140115530360576 logging_writer.py:35] [469] core_hours_Tesla K80=0.005144, core_hours_approx_v3=0.005144, epoch=1.002137, img/sec=3234.817845, img/sec/core=3234.817845\n", + "I1011 13:37:47.344448 140115530360576 logging_writer.py:35] [469] train_accuracy=0.907602, train_loss=0.300405\n", + "I1011 13:37:47.344725 140115530360576 logging_writer.py:35] [469] learning_rate=0.10000002384185791\n", + "I1011 13:37:47.358852 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.968750, valid_loss=0.116311\n", + "I1011 13:37:47.364650 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.968750, valid_loss=0.117993\n", + "I1011 13:37:47.369975 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.963542, valid_loss=0.121681\n", + "I1011 13:37:47.374881 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.957031, valid_loss=0.143569\n", + "I1011 13:37:47.380566 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.960937, valid_loss=0.129825\n", + "I1011 13:37:47.386048 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.966146, valid_loss=0.117139\n", + "I1011 13:37:47.391285 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.963170, valid_loss=0.120103\n", + "I1011 13:37:47.396937 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.963867, valid_loss=0.123557\n", + "I1011 13:37:47.402757 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.963542, valid_loss=0.127855\n", + "I1011 13:37:47.408189 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.964062, valid_loss=0.127633\n", + "I1011 13:37:47.413595 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.964489, valid_loss=0.127041\n", + "I1011 13:37:47.419074 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.963542, valid_loss=0.128293\n", + "I1011 13:37:47.427630 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.962139, valid_loss=0.131549\n", + "I1011 13:37:47.435208 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.963728, valid_loss=0.126438\n", + "I1011 13:37:47.438154 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.961458, valid_loss=0.131181\n", + "I1011 13:37:47.443315 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.959961, valid_loss=0.135321\n", + "I1011 13:37:47.449507 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.961397, valid_loss=0.130797\n", + "I1011 13:37:47.454724 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.961372, valid_loss=0.130359\n", + "I1011 13:37:47.460091 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.960115, valid_loss=0.133501\n", + "I1011 13:37:47.465418 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.958594, valid_loss=0.139756\n", + "I1011 13:37:47.471124 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.959077, valid_loss=0.138922\n", + "I1011 13:37:47.476996 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.957741, valid_loss=0.142356\n", + "I1011 13:37:47.482487 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.957201, valid_loss=0.142952\n", + "I1011 13:37:47.487885 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.957031, valid_loss=0.142388\n", + "I1011 13:37:47.493303 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.956562, valid_loss=0.143729\n", + "I1011 13:37:47.499084 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.956130, valid_loss=0.142278\n", + "I1011 13:37:47.504204 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.956019, valid_loss=0.141809\n", + "I1011 13:37:47.509456 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955636, valid_loss=0.142516\n", + "I1011 13:37:47.515101 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955280, valid_loss=0.143011\n", + "I1011 13:37:47.520574 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955208, valid_loss=0.144394\n", + "I1011 13:37:47.526174 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955393, valid_loss=0.143564\n", + "I1011 13:37:47.531577 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.954102, valid_loss=0.146055\n", + "I1011 13:37:47.537061 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.953362, valid_loss=0.147283\n", + "I1011 13:37:47.542196 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.953355, valid_loss=0.147766\n", + "I1011 13:37:47.546571 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.953125, valid_loss=0.147623\n", + "I1011 13:37:47.553284 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.953125, valid_loss=0.149061\n", + "I1011 13:37:47.559092 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.953758, valid_loss=0.148340\n", + "I1011 13:37:47.565466 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.953742, valid_loss=0.149155\n", + "I1011 13:37:47.570961 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.954728, valid_loss=0.147582\n", + "I1011 13:37:47.576832 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955469, valid_loss=0.145357\n", + "I1011 13:37:47.582243 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955412, valid_loss=0.145500\n", + "I1011 13:37:47.587471 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.954985, valid_loss=0.145724\n", + "I1011 13:37:47.592967 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955850, valid_loss=0.144180\n", + "I1011 13:37:47.598690 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955966, valid_loss=0.144060\n", + "I1011 13:37:47.604397 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955903, valid_loss=0.143817\n", + "I1011 13:37:47.610249 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.956182, valid_loss=0.143977\n", + "I1011 13:37:47.615572 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.956117, valid_loss=0.145029\n", + "I1011 13:37:47.621106 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.956055, valid_loss=0.144888\n", + "I1011 13:37:47.626611 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955995, valid_loss=0.144292\n", + "I1011 13:37:47.632327 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955312, valid_loss=0.145765\n", + "I1011 13:37:47.637511 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955270, valid_loss=0.146169\n", + "I1011 13:37:47.643576 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955228, valid_loss=0.146444\n", + "I1011 13:37:47.652644 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955041, valid_loss=0.147016\n", + "I1011 13:37:47.659231 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955150, valid_loss=0.146859\n", + "I1011 13:37:47.666827 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.954972, valid_loss=0.147165\n", + "I1011 13:37:47.670330 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955218, valid_loss=0.147250\n", + "I1011 13:37:47.675548 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955455, valid_loss=0.148165\n", + "I1011 13:37:47.680941 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955011, valid_loss=0.149371\n", + "I1011 13:37:47.686234 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.954979, valid_loss=0.149376\n", + "I1011 13:37:47.691832 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.954948, valid_loss=0.149036\n", + "I1011 13:37:47.697730 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955302, valid_loss=0.148723\n", + "I1011 13:37:47.703434 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955519, valid_loss=0.148442\n", + "I1011 13:37:47.709276 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955109, valid_loss=0.148963\n", + "I1011 13:37:47.714902 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955566, valid_loss=0.147473\n", + "I1011 13:37:47.720798 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955769, valid_loss=0.147133\n", + "I1011 13:37:47.726675 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955966, valid_loss=0.146116\n", + "I1011 13:37:47.732175 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.956040, valid_loss=0.146471\n", + "I1011 13:37:47.738189 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955538, valid_loss=0.147247\n", + "I1011 13:37:47.743935 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955503, valid_loss=0.146953\n", + "I1011 13:37:47.750199 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955580, valid_loss=0.147137\n", + "I1011 13:37:47.755846 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955546, valid_loss=0.147675\n", + "I1011 13:37:47.761617 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955512, valid_loss=0.148347\n", + "I1011 13:37:47.767352 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955479, valid_loss=0.148210\n", + "I1011 13:37:47.773056 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955025, valid_loss=0.148907\n", + "I1011 13:37:47.778472 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.954792, valid_loss=0.148944\n", + "I1011 13:37:47.784536 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.954873, valid_loss=0.149048\n", + "I1011 13:37:47.789479 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.955053, valid_loss=0.148077\n", + "I1011 13:37:47.796241 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.954928, valid_loss=0.149086\n", + "I1011 13:37:47.802179 140115512289024 logging_writer.py:35] [469] valid_accuracy=0.954900, valid_loss=0.149295\n", + "I1011 13:37:49.117255 140122186418048 checkpoints.py:120] Saving checkpoint at step: 936\n", + "I1011 13:37:49.120733 140122186418048 checkpoints.py:149] Saved checkpoint at ./checkpoint_936\n", + "I1011 13:37:49.124776 140115530360576 logging_writer.py:35] [937] core_hours_Tesla K80=0.005508, core_hours_approx_v3=0.005508, epoch=2.002137, img/sec=45679.594868, img/sec/core=45679.594868\n", + "I1011 13:37:49.590364 140115530360576 logging_writer.py:35] [937] train_accuracy=0.957849, train_loss=0.136666\n", + "I1011 13:37:49.590580 140115530360576 logging_writer.py:35] [937] learning_rate=0.10000002384185791\n", + "I1011 13:37:49.603528 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.976562, valid_loss=0.047878\n", + "I1011 13:37:49.609658 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.972656, valid_loss=0.075906\n", + "I1011 13:37:49.614776 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.971354, valid_loss=0.081514\n", + "I1011 13:37:49.620380 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.964844, valid_loss=0.096503\n", + "I1011 13:37:49.625241 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965625, valid_loss=0.096622\n", + "I1011 13:37:49.630991 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.970052, valid_loss=0.088447\n", + "I1011 13:37:49.641466 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.973214, valid_loss=0.086058\n", + "I1011 13:37:49.647884 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.970703, valid_loss=0.094274\n", + "I1011 13:37:49.653186 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.967014, valid_loss=0.098868\n", + "I1011 13:37:49.659262 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.967969, valid_loss=0.093854\n", + "I1011 13:37:49.664444 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.968040, valid_loss=0.093558\n", + "I1011 13:37:49.672832 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.967448, valid_loss=0.097713\n", + "I1011 13:37:49.675593 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966947, valid_loss=0.099546\n", + "I1011 13:37:49.682296 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.968750, valid_loss=0.095636\n", + "I1011 13:37:49.688216 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.968750, valid_loss=0.095122\n", + "I1011 13:37:49.693304 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965820, valid_loss=0.103102\n", + "I1011 13:37:49.698425 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966912, valid_loss=0.100470\n", + "I1011 13:37:49.703822 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.967448, valid_loss=0.099352\n", + "I1011 13:37:49.709121 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.967516, valid_loss=0.100476\n", + "I1011 13:37:49.714523 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966406, valid_loss=0.101992\n", + "I1011 13:37:49.719710 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966518, valid_loss=0.103210\n", + "I1011 13:37:49.729898 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966264, valid_loss=0.102642\n", + "I1011 13:37:49.734998 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966712, valid_loss=0.101867\n", + "I1011 13:37:49.740329 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966471, valid_loss=0.101938\n", + "I1011 13:37:49.745519 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965625, valid_loss=0.104632\n", + "I1011 13:37:49.750709 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965445, valid_loss=0.103566\n", + "I1011 13:37:49.755815 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965278, valid_loss=0.104602\n", + "I1011 13:37:49.761245 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965681, valid_loss=0.103966\n", + "I1011 13:37:49.766862 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965248, valid_loss=0.104969\n", + "I1011 13:37:49.771949 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965365, valid_loss=0.106450\n", + "I1011 13:37:49.778104 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965474, valid_loss=0.106471\n", + "I1011 13:37:49.784733 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965332, valid_loss=0.107106\n", + "I1011 13:37:49.790340 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.964489, valid_loss=0.109863\n", + "I1011 13:37:49.796111 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.964614, valid_loss=0.110676\n", + "I1011 13:37:49.801396 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.964732, valid_loss=0.110210\n", + "I1011 13:37:49.807048 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.964627, valid_loss=0.111313\n", + "I1011 13:37:49.812555 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965372, valid_loss=0.110087\n", + "I1011 13:37:49.817957 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.964844, valid_loss=0.111982\n", + "I1011 13:37:49.823265 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.964944, valid_loss=0.111162\n", + "I1011 13:37:49.828632 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965820, valid_loss=0.109056\n", + "I1011 13:37:49.834273 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965701, valid_loss=0.109147\n", + "I1011 13:37:49.839479 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965588, valid_loss=0.109325\n", + "I1011 13:37:49.844783 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966206, valid_loss=0.107646\n", + "I1011 13:37:49.850199 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966264, valid_loss=0.107699\n", + "I1011 13:37:49.855256 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966146, valid_loss=0.107139\n", + "I1011 13:37:49.866571 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965863, valid_loss=0.107963\n", + "I1011 13:37:49.871456 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965592, valid_loss=0.108368\n", + "I1011 13:37:49.878300 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965658, valid_loss=0.108143\n", + "I1011 13:37:49.883790 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965880, valid_loss=0.108273\n", + "I1011 13:37:49.890274 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965469, valid_loss=0.109102\n", + "I1011 13:37:49.895750 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965686, valid_loss=0.108804\n", + "I1011 13:37:49.901224 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965895, valid_loss=0.108989\n", + "I1011 13:37:49.906872 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965949, valid_loss=0.108785\n", + "I1011 13:37:49.912834 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966146, valid_loss=0.108333\n", + "I1011 13:37:49.918477 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966051, valid_loss=0.108978\n", + "I1011 13:37:49.924092 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966099, valid_loss=0.109015\n", + "I1011 13:37:49.929715 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966009, valid_loss=0.109834\n", + "I1011 13:37:49.935353 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965921, valid_loss=0.110611\n", + "I1011 13:37:49.940646 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965704, valid_loss=0.110370\n", + "I1011 13:37:49.946998 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965885, valid_loss=0.109936\n", + "I1011 13:37:49.952596 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965932, valid_loss=0.109597\n", + "I1011 13:37:49.958917 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966104, valid_loss=0.108967\n", + "I1011 13:37:49.964379 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966022, valid_loss=0.108784\n", + "I1011 13:37:49.969743 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966064, valid_loss=0.108172\n", + "I1011 13:37:49.975721 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965986, valid_loss=0.108591\n", + "I1011 13:37:49.983355 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966146, valid_loss=0.107977\n", + "I1011 13:37:49.987543 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966185, valid_loss=0.107933\n", + "I1011 13:37:49.993048 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966108, valid_loss=0.107907\n", + "I1011 13:37:49.999556 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966259, valid_loss=0.107676\n", + "I1011 13:37:50.007040 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966518, valid_loss=0.107031\n", + "I1011 13:37:50.012663 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966219, valid_loss=0.107772\n", + "I1011 13:37:50.018155 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966254, valid_loss=0.108513\n", + "I1011 13:37:50.022249 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966182, valid_loss=0.108481\n", + "I1011 13:37:50.029265 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.966111, valid_loss=0.108782\n", + "I1011 13:37:50.032893 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965937, valid_loss=0.108945\n", + "I1011 13:37:50.040016 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965666, valid_loss=0.109031\n", + "I1011 13:37:50.047675 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965808, valid_loss=0.108192\n", + "I1011 13:37:50.051897 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965946, valid_loss=0.108089\n", + "I1011 13:37:50.057278 140115538753280 logging_writer.py:35] [937] valid_accuracy=0.965900, valid_loss=0.108384\n", + "I1011 13:37:51.397515 140122186418048 checkpoints.py:120] Saving checkpoint at step: 1404\n", + "I1011 13:37:51.400723 140122186418048 checkpoints.py:149] Saved checkpoint at ./checkpoint_1404\n", + "I1011 13:37:51.404632 140115530360576 logging_writer.py:35] [1405] core_hours_Tesla K80=0.005880, core_hours_approx_v3=0.005880, epoch=3.002137, img/sec=44820.327875, img/sec/core=44820.327875\n", + "I1011 13:37:51.876979 140115530360576 logging_writer.py:35] [1405] train_accuracy=0.966513, train_loss=0.109176\n", + "I1011 13:37:51.877257 140115530360576 logging_writer.py:35] [1405] learning_rate=0.10000002384185791\n", + "I1011 13:37:51.891464 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.976562, valid_loss=0.047212\n", + "I1011 13:37:51.897446 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.980469, valid_loss=0.067890\n", + "I1011 13:37:51.902668 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.973958, valid_loss=0.081291\n", + "I1011 13:37:51.908132 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.968750, valid_loss=0.095397\n", + "I1011 13:37:51.913722 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.971875, valid_loss=0.096281\n", + "I1011 13:37:51.919125 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.973958, valid_loss=0.092314\n", + "I1011 13:37:51.926215 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.974330, valid_loss=0.093098\n", + "I1011 13:37:51.929651 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.971680, valid_loss=0.104904\n", + "I1011 13:37:51.934859 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.969618, valid_loss=0.106936\n", + "I1011 13:37:51.939853 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.970312, valid_loss=0.103399\n", + "I1011 13:37:51.947282 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.969460, valid_loss=0.103375\n", + "I1011 13:37:51.952668 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.968099, valid_loss=0.105362\n", + "I1011 13:37:51.957997 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.966947, valid_loss=0.108332\n", + "I1011 13:37:51.963064 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.967076, valid_loss=0.106784\n", + "I1011 13:37:51.970000 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.967187, valid_loss=0.105699\n", + "I1011 13:37:51.975131 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965820, valid_loss=0.109543\n", + "I1011 13:37:51.980514 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.967371, valid_loss=0.105939\n", + "I1011 13:37:51.987952 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.967014, valid_loss=0.106832\n", + "I1011 13:37:51.991482 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.967105, valid_loss=0.107521\n", + "I1011 13:37:51.997149 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.966797, valid_loss=0.107724\n", + "I1011 13:37:52.002505 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.966518, valid_loss=0.109542\n", + "I1011 13:37:52.008096 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.966619, valid_loss=0.108260\n", + "I1011 13:37:52.018516 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.967052, valid_loss=0.106202\n", + "I1011 13:37:52.023424 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965495, valid_loss=0.108470\n", + "I1011 13:37:52.029059 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965000, valid_loss=0.111931\n", + "I1011 13:37:52.034542 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.964844, valid_loss=0.111311\n", + "I1011 13:37:52.040118 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.964120, valid_loss=0.112175\n", + "I1011 13:37:52.043402 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.964565, valid_loss=0.111221\n", + "I1011 13:37:52.049255 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.964440, valid_loss=0.111749\n", + "I1011 13:37:52.054611 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.964583, valid_loss=0.113564\n", + "I1011 13:37:52.060449 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.964718, valid_loss=0.113380\n", + "I1011 13:37:52.065858 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.964844, valid_loss=0.113990\n", + "I1011 13:37:52.072009 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.963778, valid_loss=0.116709\n", + "I1011 13:37:52.077472 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.963925, valid_loss=0.117006\n", + "I1011 13:37:52.082785 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.964509, valid_loss=0.115492\n", + "I1011 13:37:52.088794 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965061, valid_loss=0.116033\n", + "I1011 13:37:52.094407 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965372, valid_loss=0.116242\n", + "I1011 13:37:52.099886 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965461, valid_loss=0.117562\n", + "I1011 13:37:52.105360 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965345, valid_loss=0.116478\n", + "I1011 13:37:52.110801 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.966016, valid_loss=0.114414\n", + "I1011 13:37:52.116615 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965892, valid_loss=0.115442\n", + "I1011 13:37:52.122121 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965588, valid_loss=0.114829\n", + "I1011 13:37:52.127897 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.966025, valid_loss=0.113438\n", + "I1011 13:37:52.133476 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965732, valid_loss=0.113474\n", + "I1011 13:37:52.139017 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.966146, valid_loss=0.112518\n", + "I1011 13:37:52.144504 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965863, valid_loss=0.112139\n", + "I1011 13:37:52.150090 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965758, valid_loss=0.112231\n", + "I1011 13:37:52.155342 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965983, valid_loss=0.111950\n", + "I1011 13:37:52.161215 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965721, valid_loss=0.111933\n", + "I1011 13:37:52.166568 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965625, valid_loss=0.112934\n", + "I1011 13:37:52.179476 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965839, valid_loss=0.112683\n", + "I1011 13:37:52.185490 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965895, valid_loss=0.112679\n", + "I1011 13:37:52.191756 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965802, valid_loss=0.112281\n", + "I1011 13:37:52.197847 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965856, valid_loss=0.111644\n", + "I1011 13:37:52.205344 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965909, valid_loss=0.111622\n", + "I1011 13:37:52.210427 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.966099, valid_loss=0.111316\n", + "I1011 13:37:52.217742 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965872, valid_loss=0.111893\n", + "I1011 13:37:52.222396 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965652, valid_loss=0.112496\n", + "I1011 13:37:52.229200 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965440, valid_loss=0.111779\n", + "I1011 13:37:52.235358 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965625, valid_loss=0.111130\n", + "I1011 13:37:52.240765 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965932, valid_loss=0.110933\n", + "I1011 13:37:52.246458 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965852, valid_loss=0.110297\n", + "I1011 13:37:52.252342 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965402, valid_loss=0.111024\n", + "I1011 13:37:52.257919 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965576, valid_loss=0.110277\n", + "I1011 13:37:52.263857 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965144, valid_loss=0.110676\n", + "I1011 13:37:52.270178 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965436, valid_loss=0.109824\n", + "I1011 13:37:52.276753 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965602, valid_loss=0.109950\n", + "I1011 13:37:52.282358 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965648, valid_loss=0.109937\n", + "I1011 13:37:52.288483 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965806, valid_loss=0.109384\n", + "I1011 13:37:52.294321 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.966183, valid_loss=0.108799\n", + "I1011 13:37:52.299953 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.966109, valid_loss=0.109262\n", + "I1011 13:37:52.305844 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.966254, valid_loss=0.109835\n", + "I1011 13:37:52.311891 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.966182, valid_loss=0.110646\n", + "I1011 13:37:52.317973 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.966216, valid_loss=0.110878\n", + "I1011 13:37:52.326849 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965937, valid_loss=0.111331\n", + "I1011 13:37:52.335108 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965872, valid_loss=0.111206\n", + "I1011 13:37:52.344285 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.966011, valid_loss=0.110488\n", + "I1011 13:37:52.349681 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965645, valid_loss=0.110790\n", + "I1011 13:37:52.355180 140115512289024 logging_writer.py:35] [1405] valid_accuracy=0.965600, valid_loss=0.110748\n", + "I1011 13:37:53.684578 140122186418048 checkpoints.py:120] Saving checkpoint at step: 1872\n", + "I1011 13:37:53.687911 140122186418048 checkpoints.py:149] Saved checkpoint at ./checkpoint_1872\n", + "I1011 13:37:53.688028 140122186418048 checkpoints.py:174] Removing checkpoint at ./checkpoint_468\n", + "I1011 13:37:53.692822 140115530360576 logging_writer.py:35] [1873] core_hours_Tesla K80=0.006248, core_hours_approx_v3=0.006248, epoch=4.002137, img/sec=45152.245821, img/sec/core=45152.245821\n", + "I1011 13:37:54.182454 140115530360576 logging_writer.py:35] [1873] train_accuracy=0.971104, train_loss=0.094048\n", + "I1011 13:37:54.182729 140115530360576 logging_writer.py:35] [1873] learning_rate=0.10000002384185791\n", + "I1011 13:37:54.196289 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.976562, valid_loss=0.076963\n", + "I1011 13:37:54.203335 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.964844, valid_loss=0.090261\n", + "I1011 13:37:54.209955 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.958333, valid_loss=0.099855\n", + "I1011 13:37:54.213971 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.958984, valid_loss=0.111538\n", + "I1011 13:37:54.218877 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.960937, valid_loss=0.105064\n", + "I1011 13:37:54.224594 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.967448, valid_loss=0.093241\n", + "I1011 13:37:54.231449 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.968750, valid_loss=0.092362\n", + "I1011 13:37:54.234731 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.968750, valid_loss=0.095923\n", + "I1011 13:37:54.242402 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.965278, valid_loss=0.098190\n", + "I1011 13:37:54.246476 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.965625, valid_loss=0.094957\n", + "I1011 13:37:54.252227 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.965909, valid_loss=0.093884\n", + "I1011 13:37:54.261597 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.965495, valid_loss=0.099746\n", + "I1011 13:37:54.268741 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.965144, valid_loss=0.099629\n", + "I1011 13:37:54.275834 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.965960, valid_loss=0.095834\n", + "I1011 13:37:54.283298 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.964062, valid_loss=0.099937\n", + "I1011 13:37:54.288768 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.961914, valid_loss=0.104771\n", + "I1011 13:37:54.294876 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.962776, valid_loss=0.102474\n", + "I1011 13:37:54.302367 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.962674, valid_loss=0.102295\n", + "I1011 13:37:54.306643 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.962171, valid_loss=0.104261\n", + "I1011 13:37:54.312247 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.960156, valid_loss=0.109487\n", + "I1011 13:37:54.320043 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.960565, valid_loss=0.110308\n", + "I1011 13:37:54.325851 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.960582, valid_loss=0.111957\n", + "I1011 13:37:54.330261 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.960598, valid_loss=0.112838\n", + "I1011 13:37:54.335436 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.960612, valid_loss=0.112269\n", + "I1011 13:37:54.341583 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.960312, valid_loss=0.115078\n", + "I1011 13:37:54.346579 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.960036, valid_loss=0.115347\n", + "I1011 13:37:54.352993 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.960648, valid_loss=0.114955\n", + "I1011 13:37:54.361747 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.960937, valid_loss=0.115059\n", + "I1011 13:37:54.369620 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.961207, valid_loss=0.114897\n", + "I1011 13:37:54.375826 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.961198, valid_loss=0.115435\n", + "I1011 13:37:54.381249 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.962198, valid_loss=0.113333\n", + "I1011 13:37:54.387706 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.962158, valid_loss=0.114146\n", + "I1011 13:37:54.393301 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.961648, valid_loss=0.114777\n", + "I1011 13:37:54.399476 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.960937, valid_loss=0.115690\n", + "I1011 13:37:54.406092 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.961161, valid_loss=0.115314\n", + "I1011 13:37:54.413255 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.961155, valid_loss=0.115581\n", + "I1011 13:37:54.419315 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.961571, valid_loss=0.115496\n", + "I1011 13:37:54.426075 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.961965, valid_loss=0.116786\n", + "I1011 13:37:54.431396 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.962340, valid_loss=0.115199\n", + "I1011 13:37:54.437736 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.963281, valid_loss=0.112884\n", + "I1011 13:37:54.443224 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.963224, valid_loss=0.112870\n", + "I1011 13:37:54.448683 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.962984, valid_loss=0.113875\n", + "I1011 13:37:54.454181 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.963481, valid_loss=0.112338\n", + "I1011 13:37:54.459419 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.963423, valid_loss=0.112316\n", + "I1011 13:37:54.464879 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.963021, valid_loss=0.112112\n", + "I1011 13:37:54.469997 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.962976, valid_loss=0.113404\n", + "I1011 13:37:54.475103 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.963265, valid_loss=0.113327\n", + "I1011 13:37:54.484720 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.963542, valid_loss=0.112800\n", + "I1011 13:37:54.493990 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.963648, valid_loss=0.113037\n", + "I1011 13:37:54.499847 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.963281, valid_loss=0.113304\n", + "I1011 13:37:54.503942 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.963542, valid_loss=0.112354\n", + "I1011 13:37:54.509688 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.963792, valid_loss=0.112070\n", + "I1011 13:37:54.516190 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.963886, valid_loss=0.112263\n", + "I1011 13:37:54.522075 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.963686, valid_loss=0.112204\n", + "I1011 13:37:54.527330 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.964062, valid_loss=0.111515\n", + "I1011 13:37:54.532555 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.964146, valid_loss=0.112029\n", + "I1011 13:37:54.538170 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.964227, valid_loss=0.112714\n", + "I1011 13:37:54.543639 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.964170, valid_loss=0.113831\n", + "I1011 13:37:54.549257 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.964380, valid_loss=0.113366\n", + "I1011 13:37:54.554711 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.964714, valid_loss=0.112955\n", + "I1011 13:37:54.562455 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.964908, valid_loss=0.112131\n", + "I1011 13:37:54.566591 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.964970, valid_loss=0.111856\n", + "I1011 13:37:54.571851 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.965030, valid_loss=0.112015\n", + "I1011 13:37:54.577061 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.965210, valid_loss=0.111370\n", + "I1011 13:37:54.582843 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.965264, valid_loss=0.111397\n", + "I1011 13:37:54.589213 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.965672, valid_loss=0.110226\n", + "I1011 13:37:54.594686 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.965835, valid_loss=0.109671\n", + "I1011 13:37:54.600072 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.965648, valid_loss=0.109893\n", + "I1011 13:37:54.606545 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.965806, valid_loss=0.109168\n", + "I1011 13:37:54.613009 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.966183, valid_loss=0.108644\n", + "I1011 13:37:54.619420 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.966109, valid_loss=0.109305\n", + "I1011 13:37:54.625149 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.966254, valid_loss=0.109158\n", + "I1011 13:37:54.630772 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.966289, valid_loss=0.109210\n", + "I1011 13:37:54.636190 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.966111, valid_loss=0.109412\n", + "I1011 13:37:54.641564 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.966146, valid_loss=0.108942\n", + "I1011 13:37:54.647296 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.966283, valid_loss=0.108743\n", + "I1011 13:37:54.652360 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.966315, valid_loss=0.108060\n", + "I1011 13:37:54.658561 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.966046, valid_loss=0.108817\n", + "I1011 13:37:54.663917 140115538753280 logging_writer.py:35] [1873] valid_accuracy=0.966000, valid_loss=0.109136\n", + "I1011 13:37:56.009868 140122186418048 checkpoints.py:120] Saving checkpoint at step: 2340\n", + "I1011 13:37:56.013097 140122186418048 checkpoints.py:149] Saved checkpoint at ./checkpoint_2340\n", + "I1011 13:37:56.013273 140122186418048 checkpoints.py:174] Removing checkpoint at ./checkpoint_936\n", + "I1011 13:37:56.017515 140115530360576 logging_writer.py:35] [2341] core_hours_Tesla K80=0.006621, core_hours_approx_v3=0.006621, epoch=5.002137, img/sec=44651.450410, img/sec/core=44651.450410\n", + "I1011 13:37:56.492295 140115530360576 logging_writer.py:35] [2341] train_accuracy=0.973157, train_loss=0.085993\n", + "I1011 13:37:56.492524 140115530360576 logging_writer.py:35] [2341] learning_rate=0.10000002384185791\n", + "I1011 13:37:56.506742 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.968750, valid_loss=0.066349\n", + "I1011 13:37:56.512698 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.960937, valid_loss=0.080514\n", + "I1011 13:37:56.517704 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.958333, valid_loss=0.083485\n", + "I1011 13:37:56.523003 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.960937, valid_loss=0.091904\n", + "I1011 13:37:56.528127 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.960937, valid_loss=0.093689\n", + "I1011 13:37:56.532583 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966146, valid_loss=0.083513\n", + "I1011 13:37:56.537597 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.969866, valid_loss=0.080828\n", + "I1011 13:37:56.544224 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.969727, valid_loss=0.087027\n", + "I1011 13:37:56.549202 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.968750, valid_loss=0.090101\n", + "I1011 13:37:56.554475 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967969, valid_loss=0.090399\n", + "I1011 13:37:56.561301 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967330, valid_loss=0.092584\n", + "I1011 13:37:56.566468 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.968099, valid_loss=0.095135\n", + "I1011 13:37:56.572551 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967548, valid_loss=0.094757\n", + "I1011 13:37:56.578842 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.968192, valid_loss=0.091794\n", + "I1011 13:37:56.584013 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967708, valid_loss=0.091742\n", + "I1011 13:37:56.589307 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.965820, valid_loss=0.098140\n", + "I1011 13:37:56.594737 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.965993, valid_loss=0.095711\n", + "I1011 13:37:56.603116 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.965712, valid_loss=0.094805\n", + "I1011 13:37:56.609262 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.965872, valid_loss=0.098093\n", + "I1011 13:37:56.613099 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.963281, valid_loss=0.104271\n", + "I1011 13:37:56.617877 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.963542, valid_loss=0.104174\n", + "I1011 13:37:56.623847 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.964134, valid_loss=0.104527\n", + "I1011 13:37:56.630649 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.965014, valid_loss=0.102224\n", + "I1011 13:37:56.634696 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.964518, valid_loss=0.102431\n", + "I1011 13:37:56.639773 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.964375, valid_loss=0.105616\n", + "I1011 13:37:56.644879 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.964543, valid_loss=0.104342\n", + "I1011 13:37:56.650872 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.964410, valid_loss=0.103889\n", + "I1011 13:37:56.657687 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.964286, valid_loss=0.104603\n", + "I1011 13:37:56.661555 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.964709, valid_loss=0.105247\n", + "I1011 13:37:56.668311 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.964844, valid_loss=0.104762\n", + "I1011 13:37:56.673635 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.965222, valid_loss=0.103639\n", + "I1011 13:37:56.677365 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.965332, valid_loss=0.104283\n", + "I1011 13:37:56.682702 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.964489, valid_loss=0.106361\n", + "I1011 13:37:56.690272 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.964154, valid_loss=0.107185\n", + "I1011 13:37:56.694279 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.964062, valid_loss=0.106649\n", + "I1011 13:37:56.698407 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.964193, valid_loss=0.106139\n", + "I1011 13:37:56.716202 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.964738, valid_loss=0.105248\n", + "I1011 13:37:56.722152 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.964638, valid_loss=0.107486\n", + "I1011 13:37:56.728629 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.965144, valid_loss=0.105863\n", + "I1011 13:37:56.734668 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966016, valid_loss=0.103694\n", + "I1011 13:37:56.740427 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.965892, valid_loss=0.103646\n", + "I1011 13:37:56.746775 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.965960, valid_loss=0.103636\n", + "I1011 13:37:56.752173 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966206, valid_loss=0.102388\n", + "I1011 13:37:56.759035 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966442, valid_loss=0.101808\n", + "I1011 13:37:56.764965 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.965972, valid_loss=0.102390\n", + "I1011 13:37:56.770647 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.965863, valid_loss=0.102592\n", + "I1011 13:37:56.776385 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.965758, valid_loss=0.102987\n", + "I1011 13:37:56.782065 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966146, valid_loss=0.102326\n", + "I1011 13:37:56.787757 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966358, valid_loss=0.102192\n", + "I1011 13:37:56.796289 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966094, valid_loss=0.103621\n", + "I1011 13:37:56.800140 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966452, valid_loss=0.103111\n", + "I1011 13:37:56.805944 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966496, valid_loss=0.103220\n", + "I1011 13:37:56.811625 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966392, valid_loss=0.103226\n", + "I1011 13:37:56.821498 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966725, valid_loss=0.102418\n", + "I1011 13:37:56.828607 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966761, valid_loss=0.101532\n", + "I1011 13:37:56.834700 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966657, valid_loss=0.101955\n", + "I1011 13:37:56.842260 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966694, valid_loss=0.102593\n", + "I1011 13:37:56.847875 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966595, valid_loss=0.103743\n", + "I1011 13:37:56.854095 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966631, valid_loss=0.103784\n", + "I1011 13:37:56.859451 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966667, valid_loss=0.103421\n", + "I1011 13:37:56.865348 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966957, valid_loss=0.102482\n", + "I1011 13:37:56.871028 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966860, valid_loss=0.102218\n", + "I1011 13:37:56.876505 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966890, valid_loss=0.102218\n", + "I1011 13:37:56.882583 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967041, valid_loss=0.101608\n", + "I1011 13:37:56.888560 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.966947, valid_loss=0.101482\n", + "I1011 13:37:56.894108 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967211, valid_loss=0.100609\n", + "I1011 13:37:56.900089 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967351, valid_loss=0.100578\n", + "I1011 13:37:56.905466 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967256, valid_loss=0.100834\n", + "I1011 13:37:56.910783 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967618, valid_loss=0.099865\n", + "I1011 13:37:56.916261 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967522, valid_loss=0.099801\n", + "I1011 13:37:56.921833 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967320, valid_loss=0.100650\n", + "I1011 13:37:56.927609 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967339, valid_loss=0.100849\n", + "I1011 13:37:56.933133 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967466, valid_loss=0.100730\n", + "I1011 13:37:56.940493 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967272, valid_loss=0.100792\n", + "I1011 13:37:56.944714 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967396, valid_loss=0.100355\n", + "I1011 13:37:56.950650 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967311, valid_loss=0.100464\n", + "I1011 13:37:56.956397 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967431, valid_loss=0.099904\n", + "I1011 13:37:56.964500 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967548, valid_loss=0.099992\n", + "I1011 13:37:56.973144 140115512289024 logging_writer.py:35] [2341] valid_accuracy=0.967500, valid_loss=0.100134\n", + "I1011 13:37:58.301074 140122186418048 checkpoints.py:120] Saving checkpoint at step: 2808\n", + "I1011 13:37:58.305062 140122186418048 checkpoints.py:149] Saved checkpoint at ./checkpoint_2808\n", + "I1011 13:37:58.305190 140122186418048 checkpoints.py:174] Removing checkpoint at ./checkpoint_1404\n", + "I1011 13:37:58.309476 140115530360576 logging_writer.py:35] [2809] core_hours_Tesla K80=0.006989, core_hours_approx_v3=0.006989, epoch=6.002137, img/sec=45160.044865, img/sec/core=45160.044865\n", + "I1011 13:37:58.794518 140115530360576 logging_writer.py:35] [2809] train_accuracy=0.976329, train_loss=0.078176\n", + "I1011 13:37:58.795318 140115530360576 logging_writer.py:35] [2809] learning_rate=0.10000002384185791\n", + "I1011 13:37:58.809585 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.968750, valid_loss=0.082084\n", + "I1011 13:37:58.817958 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.976562, valid_loss=0.074323\n", + "I1011 13:37:58.823120 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.979167, valid_loss=0.065421\n", + "I1011 13:37:58.826139 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.974609, valid_loss=0.090876\n", + "I1011 13:37:58.831986 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.971875, valid_loss=0.087949\n", + "I1011 13:37:58.839206 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.975260, valid_loss=0.078232\n", + "I1011 13:37:58.845018 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.976562, valid_loss=0.076995\n", + "I1011 13:37:58.848865 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.974609, valid_loss=0.079070\n", + "I1011 13:37:58.856001 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973958, valid_loss=0.079639\n", + "I1011 13:37:58.858964 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.975000, valid_loss=0.075275\n", + "I1011 13:37:58.864884 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.974432, valid_loss=0.077012\n", + "I1011 13:37:58.872169 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.974609, valid_loss=0.076985\n", + "I1011 13:37:58.876502 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.974760, valid_loss=0.077853\n", + "I1011 13:37:58.881582 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.975446, valid_loss=0.077627\n", + "I1011 13:37:58.888202 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973958, valid_loss=0.082809\n", + "I1011 13:37:58.892370 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973633, valid_loss=0.084897\n", + "I1011 13:37:58.897367 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973805, valid_loss=0.082714\n", + "I1011 13:37:58.902779 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.972656, valid_loss=0.085408\n", + "I1011 13:37:58.909762 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973273, valid_loss=0.084314\n", + "I1011 13:37:58.913842 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973437, valid_loss=0.085496\n", + "I1011 13:37:58.919046 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973214, valid_loss=0.085469\n", + "I1011 13:37:58.923876 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973722, valid_loss=0.086373\n", + "I1011 13:37:58.929888 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973505, valid_loss=0.086996\n", + "I1011 13:37:58.935056 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.972982, valid_loss=0.087866\n", + "I1011 13:37:58.941602 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.972812, valid_loss=0.090532\n", + "I1011 13:37:58.947225 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.972656, valid_loss=0.089940\n", + "I1011 13:37:58.952681 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973090, valid_loss=0.089846\n", + "I1011 13:37:58.959593 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.972377, valid_loss=0.089911\n", + "I1011 13:37:58.963605 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.972252, valid_loss=0.089778\n", + "I1011 13:37:58.968741 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.972396, valid_loss=0.089721\n", + "I1011 13:37:58.975955 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973034, valid_loss=0.088724\n", + "I1011 13:37:58.981983 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.972412, valid_loss=0.090368\n", + "I1011 13:37:58.986999 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.972301, valid_loss=0.091547\n", + "I1011 13:37:58.992595 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.972426, valid_loss=0.090843\n", + "I1011 13:37:58.999296 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.972545, valid_loss=0.089553\n", + "I1011 13:37:59.003721 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.972439, valid_loss=0.089226\n", + "I1011 13:37:59.014349 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.972762, valid_loss=0.088485\n", + "I1011 13:37:59.023196 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.972656, valid_loss=0.089101\n", + "I1011 13:37:59.028627 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973357, valid_loss=0.087591\n", + "I1011 13:37:59.034016 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.974023, valid_loss=0.085951\n", + "I1011 13:37:59.038070 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973895, valid_loss=0.086213\n", + "I1011 13:37:59.043286 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973400, valid_loss=0.087229\n", + "I1011 13:37:59.048678 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973837, valid_loss=0.085749\n", + "I1011 13:37:59.053766 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.974077, valid_loss=0.085429\n", + "I1011 13:37:59.061197 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973958, valid_loss=0.086426\n", + "I1011 13:37:59.065279 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.974185, valid_loss=0.086445\n", + "I1011 13:37:59.070761 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973903, valid_loss=0.087476\n", + "I1011 13:37:59.076267 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.974284, valid_loss=0.086990\n", + "I1011 13:37:59.081938 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.974330, valid_loss=0.086819\n", + "I1011 13:37:59.087590 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.974531, valid_loss=0.086429\n", + "I1011 13:37:59.092964 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.974571, valid_loss=0.085937\n", + "I1011 13:37:59.098534 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.974609, valid_loss=0.085930\n", + "I1011 13:37:59.104070 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.974499, valid_loss=0.085919\n", + "I1011 13:37:59.110643 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.974248, valid_loss=0.086191\n", + "I1011 13:37:59.115685 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.974290, valid_loss=0.086140\n", + "I1011 13:37:59.121527 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973912, valid_loss=0.087401\n", + "I1011 13:37:59.127782 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973684, valid_loss=0.088853\n", + "I1011 13:37:59.133584 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973060, valid_loss=0.090731\n", + "I1011 13:37:59.139030 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973120, valid_loss=0.090704\n", + "I1011 13:37:59.144195 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973307, valid_loss=0.090473\n", + "I1011 13:37:59.149620 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973489, valid_loss=0.089691\n", + "I1011 13:37:59.154768 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973538, valid_loss=0.089338\n", + "I1011 13:37:59.159966 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973338, valid_loss=0.089880\n", + "I1011 13:37:59.165472 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973633, valid_loss=0.089314\n", + "I1011 13:37:59.171000 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973558, valid_loss=0.089393\n", + "I1011 13:37:59.176319 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973722, valid_loss=0.088515\n", + "I1011 13:37:59.182107 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973647, valid_loss=0.088719\n", + "I1011 13:37:59.187619 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973346, valid_loss=0.089468\n", + "I1011 13:37:59.192818 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973505, valid_loss=0.089078\n", + "I1011 13:37:59.198622 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973772, valid_loss=0.088966\n", + "I1011 13:37:59.204018 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973812, valid_loss=0.089161\n", + "I1011 13:37:59.210135 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973850, valid_loss=0.089307\n", + "I1011 13:37:59.215856 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973673, valid_loss=0.089601\n", + "I1011 13:37:59.221472 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973606, valid_loss=0.089486\n", + "I1011 13:37:59.226812 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973437, valid_loss=0.089804\n", + "I1011 13:37:59.234316 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973273, valid_loss=0.089846\n", + "I1011 13:37:59.242124 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973214, valid_loss=0.089485\n", + "I1011 13:37:59.246492 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973157, valid_loss=0.090398\n", + "I1011 13:37:59.251579 140115538753280 logging_writer.py:35] [2809] valid_accuracy=0.973100, valid_loss=0.090519\n", + "I1011 13:38:00.613862 140122186418048 checkpoints.py:120] Saving checkpoint at step: 3276\n", + "I1011 13:38:00.618399 140122186418048 checkpoints.py:149] Saved checkpoint at ./checkpoint_3276\n", + "I1011 13:38:00.618621 140122186418048 checkpoints.py:174] Removing checkpoint at ./checkpoint_1872\n", + "I1011 13:38:00.623572 140115530360576 logging_writer.py:35] [3277] core_hours_Tesla K80=0.007367, core_hours_approx_v3=0.007367, epoch=7.002137, img/sec=44081.636642, img/sec/core=44081.636642\n", + "I1011 13:38:01.104991 140115530360576 logging_writer.py:35] [3277] train_accuracy=0.976512, train_loss=0.074930\n", + "I1011 13:38:01.105236 140115530360576 logging_writer.py:35] [3277] learning_rate=0.10000002384185791\n", + "I1011 13:38:01.122182 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.945312, valid_loss=0.117502\n", + "I1011 13:38:01.128556 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.949219, valid_loss=0.104941\n", + "I1011 13:38:01.134241 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.945312, valid_loss=0.140586\n", + "I1011 13:38:01.141214 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.943359, valid_loss=0.151152\n", + "I1011 13:38:01.146738 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.946875, valid_loss=0.143278\n", + "I1011 13:38:01.151832 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.950521, valid_loss=0.132998\n", + "I1011 13:38:01.156847 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.952009, valid_loss=0.128076\n", + "I1011 13:38:01.162372 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.952148, valid_loss=0.131496\n", + "I1011 13:38:01.168592 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.950521, valid_loss=0.136335\n", + "I1011 13:38:01.171885 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.951562, valid_loss=0.130860\n", + "I1011 13:38:01.177707 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.952415, valid_loss=0.131717\n", + "I1011 13:38:01.183322 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.949219, valid_loss=0.139747\n", + "I1011 13:38:01.189529 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.947115, valid_loss=0.142734\n", + "I1011 13:38:01.195325 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.948103, valid_loss=0.139563\n", + "I1011 13:38:01.203352 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.948437, valid_loss=0.137438\n", + "I1011 13:38:01.206774 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.946777, valid_loss=0.141280\n", + "I1011 13:38:01.212934 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.948070, valid_loss=0.138849\n", + "I1011 13:38:01.219761 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.947917, valid_loss=0.140275\n", + "I1011 13:38:01.227852 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.947780, valid_loss=0.141544\n", + "I1011 13:38:01.234050 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.946875, valid_loss=0.143708\n", + "I1011 13:38:01.238238 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.947173, valid_loss=0.143607\n", + "I1011 13:38:01.244944 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.946023, valid_loss=0.147066\n", + "I1011 13:38:01.250746 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.946671, valid_loss=0.146161\n", + "I1011 13:38:01.258766 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.945964, valid_loss=0.146927\n", + "I1011 13:38:01.262576 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.946250, valid_loss=0.150263\n", + "I1011 13:38:01.268139 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.946514, valid_loss=0.148452\n", + "I1011 13:38:01.273505 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.946759, valid_loss=0.148187\n", + "I1011 13:38:01.279985 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.948103, valid_loss=0.146051\n", + "I1011 13:38:01.286100 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.948815, valid_loss=0.145488\n", + "I1011 13:38:01.291868 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.948958, valid_loss=0.146259\n", + "I1011 13:38:01.299026 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.948841, valid_loss=0.145988\n", + "I1011 13:38:01.306074 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.948975, valid_loss=0.145776\n", + "I1011 13:38:01.309904 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.948627, valid_loss=0.146638\n", + "I1011 13:38:01.315746 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.948070, valid_loss=0.146336\n", + "I1011 13:38:01.324244 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.947768, valid_loss=0.145837\n", + "I1011 13:38:01.333717 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.948351, valid_loss=0.144592\n", + "I1011 13:38:01.339652 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.948480, valid_loss=0.144773\n", + "I1011 13:38:01.347903 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.948396, valid_loss=0.145861\n", + "I1011 13:38:01.353675 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.948518, valid_loss=0.145434\n", + "I1011 13:38:01.359386 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.949023, valid_loss=0.143576\n", + "I1011 13:38:01.363189 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.948552, valid_loss=0.144303\n", + "I1011 13:38:01.369494 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.948661, valid_loss=0.143615\n", + "I1011 13:38:01.375206 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.949310, valid_loss=0.142400\n", + "I1011 13:38:01.384016 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.949219, valid_loss=0.143182\n", + "I1011 13:38:01.388168 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.949306, valid_loss=0.141684\n", + "I1011 13:38:01.394303 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.949558, valid_loss=0.142223\n", + "I1011 13:38:01.400595 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.949801, valid_loss=0.141311\n", + "I1011 13:38:01.406728 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.950358, valid_loss=0.140924\n", + "I1011 13:38:01.412918 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.950415, valid_loss=0.141025\n", + "I1011 13:38:01.420419 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.950625, valid_loss=0.140675\n", + "I1011 13:38:01.429324 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.950827, valid_loss=0.140251\n", + "I1011 13:38:01.435157 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.950571, valid_loss=0.141857\n", + "I1011 13:38:01.441242 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.950767, valid_loss=0.141450\n", + "I1011 13:38:01.447011 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.950955, valid_loss=0.140608\n", + "I1011 13:38:01.453398 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.950710, valid_loss=0.140310\n", + "I1011 13:38:01.459327 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.951032, valid_loss=0.139768\n", + "I1011 13:38:01.465294 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.951069, valid_loss=0.140011\n", + "I1011 13:38:01.480877 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.950835, valid_loss=0.140620\n", + "I1011 13:38:01.483645 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.951271, valid_loss=0.139568\n", + "I1011 13:38:01.490826 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.951432, valid_loss=0.138813\n", + "I1011 13:38:01.498445 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.952100, valid_loss=0.137419\n", + "I1011 13:38:01.503858 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.952369, valid_loss=0.136700\n", + "I1011 13:38:01.509551 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.952629, valid_loss=0.136151\n", + "I1011 13:38:01.515087 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.953003, valid_loss=0.135443\n", + "I1011 13:38:01.521224 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.952764, valid_loss=0.135635\n", + "I1011 13:38:01.526774 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.953125, valid_loss=0.134722\n", + "I1011 13:38:01.533524 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.953125, valid_loss=0.134428\n", + "I1011 13:38:01.537675 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.953470, valid_loss=0.134278\n", + "I1011 13:38:01.545023 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.953578, valid_loss=0.134113\n", + "I1011 13:38:01.548711 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.953795, valid_loss=0.133835\n", + "I1011 13:38:01.554462 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.953895, valid_loss=0.133795\n", + "I1011 13:38:01.559242 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.953776, valid_loss=0.134294\n", + "I1011 13:38:01.566561 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.953767, valid_loss=0.134722\n", + "I1011 13:38:01.570512 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.953864, valid_loss=0.134598\n", + "I1011 13:38:01.576580 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.953854, valid_loss=0.135166\n", + "I1011 13:38:01.584272 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.953639, valid_loss=0.135608\n", + "I1011 13:38:01.592287 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.953734, valid_loss=0.135254\n", + "I1011 13:38:01.593919 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.953826, valid_loss=0.135286\n", + "I1011 13:38:01.604132 140115512289024 logging_writer.py:35] [3277] valid_accuracy=0.953800, valid_loss=0.135605\n", + "I1011 13:38:02.934522 140122186418048 checkpoints.py:120] Saving checkpoint at step: 3744\n", + "I1011 13:38:02.937907 140122186418048 checkpoints.py:149] Saved checkpoint at ./checkpoint_3744\n", + "I1011 13:38:02.938031 140122186418048 checkpoints.py:174] Removing checkpoint at ./checkpoint_2340\n", + "I1011 13:38:02.942122 140115530360576 logging_writer.py:35] [3745] core_hours_Tesla K80=0.007735, core_hours_approx_v3=0.007735, epoch=8.002137, img/sec=45147.994407, img/sec/core=45147.994407\n", + "I1011 13:38:03.417119 140115530360576 logging_writer.py:35] [3745] train_accuracy=0.977481, train_loss=0.071040\n", + "I1011 13:38:03.417356 140115530360576 logging_writer.py:35] [3745] learning_rate=0.10000002384185791\n", + "I1011 13:38:03.432895 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.968750, valid_loss=0.095306\n", + "I1011 13:38:03.438857 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.972656, valid_loss=0.075193\n", + "I1011 13:38:03.443779 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.966146, valid_loss=0.093326\n", + "I1011 13:38:03.449697 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.964844, valid_loss=0.104934\n", + "I1011 13:38:03.454799 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.967187, valid_loss=0.099582\n", + "I1011 13:38:03.459833 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.972656, valid_loss=0.086857\n", + "I1011 13:38:03.465318 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975446, valid_loss=0.081806\n", + "I1011 13:38:03.470464 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974609, valid_loss=0.083552\n", + "I1011 13:38:03.475736 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974826, valid_loss=0.083464\n", + "I1011 13:38:03.481488 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.977344, valid_loss=0.077886\n", + "I1011 13:38:03.487509 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.977273, valid_loss=0.078080\n", + "I1011 13:38:03.494909 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.978516, valid_loss=0.077490\n", + "I1011 13:38:03.501472 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.979567, valid_loss=0.076337\n", + "I1011 13:38:03.510682 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.978237, valid_loss=0.075542\n", + "I1011 13:38:03.520038 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.978125, valid_loss=0.075324\n", + "I1011 13:38:03.526432 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.977539, valid_loss=0.077991\n", + "I1011 13:38:03.533637 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.977482, valid_loss=0.075818\n", + "I1011 13:38:03.538853 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.977865, valid_loss=0.074676\n", + "I1011 13:38:03.543889 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.977385, valid_loss=0.075325\n", + "I1011 13:38:03.549509 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975391, valid_loss=0.082318\n", + "I1011 13:38:03.554582 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974702, valid_loss=0.084481\n", + "I1011 13:38:03.560405 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974432, valid_loss=0.085803\n", + "I1011 13:38:03.566032 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974524, valid_loss=0.085079\n", + "I1011 13:38:03.571585 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974284, valid_loss=0.084777\n", + "I1011 13:38:03.577282 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974062, valid_loss=0.088246\n", + "I1011 13:38:03.584976 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974159, valid_loss=0.088185\n", + "I1011 13:38:03.588471 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974826, valid_loss=0.087113\n", + "I1011 13:38:03.594026 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974888, valid_loss=0.086380\n", + "I1011 13:38:03.599546 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974677, valid_loss=0.088969\n", + "I1011 13:38:03.604795 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974479, valid_loss=0.088684\n", + "I1011 13:38:03.610224 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974798, valid_loss=0.087262\n", + "I1011 13:38:03.615699 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974365, valid_loss=0.087987\n", + "I1011 13:38:03.621978 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.973248, valid_loss=0.089137\n", + "I1011 13:38:03.627655 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.972886, valid_loss=0.088339\n", + "I1011 13:38:03.635535 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.973214, valid_loss=0.087419\n", + "I1011 13:38:03.637625 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.973524, valid_loss=0.086857\n", + "I1011 13:38:03.644948 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974029, valid_loss=0.085905\n", + "I1011 13:38:03.652081 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.973890, valid_loss=0.088305\n", + "I1011 13:38:03.659312 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974359, valid_loss=0.087053\n", + "I1011 13:38:03.664676 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975000, valid_loss=0.085314\n", + "I1011 13:38:03.672773 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974848, valid_loss=0.085849\n", + "I1011 13:38:03.680775 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974702, valid_loss=0.086090\n", + "I1011 13:38:03.687053 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975109, valid_loss=0.084722\n", + "I1011 13:38:03.692812 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975142, valid_loss=0.084729\n", + "I1011 13:38:03.698583 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975174, valid_loss=0.083718\n", + "I1011 13:38:03.703978 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975374, valid_loss=0.083693\n", + "I1011 13:38:03.709794 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975233, valid_loss=0.084600\n", + "I1011 13:38:03.715899 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975098, valid_loss=0.084191\n", + "I1011 13:38:03.721684 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975287, valid_loss=0.083519\n", + "I1011 13:38:03.728486 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975156, valid_loss=0.083955\n", + "I1011 13:38:03.734764 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975031, valid_loss=0.084017\n", + "I1011 13:38:03.740734 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975210, valid_loss=0.084218\n", + "I1011 13:38:03.747100 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975088, valid_loss=0.084256\n", + "I1011 13:38:03.754283 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975260, valid_loss=0.083752\n", + "I1011 13:38:03.758471 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975284, valid_loss=0.083455\n", + "I1011 13:38:03.764793 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975307, valid_loss=0.084144\n", + "I1011 13:38:03.770865 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975329, valid_loss=0.084871\n", + "I1011 13:38:03.779090 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.974946, valid_loss=0.086632\n", + "I1011 13:38:03.784124 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975238, valid_loss=0.086393\n", + "I1011 13:38:03.789553 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975260, valid_loss=0.085906\n", + "I1011 13:38:03.796031 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975538, valid_loss=0.085013\n", + "I1011 13:38:03.802285 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975302, valid_loss=0.084879\n", + "I1011 13:38:03.811235 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975198, valid_loss=0.084739\n", + "I1011 13:38:03.815358 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975464, valid_loss=0.084123\n", + "I1011 13:38:03.828547 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975481, valid_loss=0.083932\n", + "I1011 13:38:03.837295 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975616, valid_loss=0.083170\n", + "I1011 13:38:03.846782 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975630, valid_loss=0.083244\n", + "I1011 13:38:03.852364 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975414, valid_loss=0.083403\n", + "I1011 13:38:03.858557 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975543, valid_loss=0.082818\n", + "I1011 13:38:03.864268 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975781, valid_loss=0.082401\n", + "I1011 13:38:03.870190 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975792, valid_loss=0.082697\n", + "I1011 13:38:03.875817 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975911, valid_loss=0.082708\n", + "I1011 13:38:03.881703 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975920, valid_loss=0.082868\n", + "I1011 13:38:03.890115 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975929, valid_loss=0.082560\n", + "I1011 13:38:03.895169 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975833, valid_loss=0.082376\n", + "I1011 13:38:03.899173 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975843, valid_loss=0.082452\n", + "I1011 13:38:03.906449 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975751, valid_loss=0.082457\n", + "I1011 13:38:03.911819 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975561, valid_loss=0.083070\n", + "I1011 13:38:03.916988 140115538753280 logging_writer.py:35] [3745] valid_accuracy=0.975500, valid_loss=0.083181\n", + "I1011 13:38:05.262078 140122186418048 checkpoints.py:120] Saving checkpoint at step: 4212\n", + "I1011 13:38:05.265500 140122186418048 checkpoints.py:149] Saved checkpoint at ./checkpoint_4212\n", + "I1011 13:38:05.265624 140122186418048 checkpoints.py:174] Removing checkpoint at ./checkpoint_2808\n", + "I1011 13:38:05.270427 140115530360576 logging_writer.py:35] [4213] core_hours_Tesla K80=0.008108, core_hours_approx_v3=0.008108, epoch=9.002137, img/sec=44647.102368, img/sec/core=44647.102368\n", + "I1011 13:38:05.764020 140115530360576 logging_writer.py:35] [4213] train_accuracy=0.977831, train_loss=0.071539\n", + "I1011 13:38:05.764275 140115530360576 logging_writer.py:35] [4213] learning_rate=0.10000002384185791\n", + "I1011 13:38:05.778188 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.960937, valid_loss=0.113638\n", + "I1011 13:38:05.783784 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.972656, valid_loss=0.090208\n", + "I1011 13:38:05.788844 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.971354, valid_loss=0.098020\n", + "I1011 13:38:05.794041 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970703, valid_loss=0.099812\n", + "I1011 13:38:05.799208 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.971875, valid_loss=0.091432\n", + "I1011 13:38:05.804344 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.975260, valid_loss=0.082986\n", + "I1011 13:38:05.809334 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.976562, valid_loss=0.081204\n", + "I1011 13:38:05.814722 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.973633, valid_loss=0.086868\n", + "I1011 13:38:05.820007 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.973958, valid_loss=0.085287\n", + "I1011 13:38:05.825003 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.974219, valid_loss=0.081874\n", + "I1011 13:38:05.829881 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.974432, valid_loss=0.080909\n", + "I1011 13:38:05.834875 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.973307, valid_loss=0.082818\n", + "I1011 13:38:05.842251 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.969952, valid_loss=0.086427\n", + "I1011 13:38:05.848839 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970424, valid_loss=0.085319\n", + "I1011 13:38:05.854368 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970312, valid_loss=0.085318\n", + "I1011 13:38:05.859839 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970215, valid_loss=0.087988\n", + "I1011 13:38:05.864885 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.971507, valid_loss=0.084751\n", + "I1011 13:38:05.871433 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970920, valid_loss=0.085757\n", + "I1011 13:38:05.874594 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.971628, valid_loss=0.086519\n", + "I1011 13:38:05.880397 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.969141, valid_loss=0.090048\n", + "I1011 13:38:05.885389 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.968378, valid_loss=0.092801\n", + "I1011 13:38:05.890399 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.967685, valid_loss=0.094082\n", + "I1011 13:38:05.895846 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.967391, valid_loss=0.092848\n", + "I1011 13:38:05.900855 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.967122, valid_loss=0.092793\n", + "I1011 13:38:05.906520 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.967187, valid_loss=0.095805\n", + "I1011 13:38:05.911562 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.966947, valid_loss=0.095011\n", + "I1011 13:38:05.916445 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.966725, valid_loss=0.095625\n", + "I1011 13:38:05.923708 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.967355, valid_loss=0.094464\n", + "I1011 13:38:05.927486 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.967672, valid_loss=0.095387\n", + "I1011 13:38:05.932719 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.967187, valid_loss=0.096729\n", + "I1011 13:38:05.938282 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.967490, valid_loss=0.094832\n", + "I1011 13:38:05.943478 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.967285, valid_loss=0.095331\n", + "I1011 13:38:05.948689 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.966856, valid_loss=0.096386\n", + "I1011 13:38:05.954242 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.967142, valid_loss=0.095434\n", + "I1011 13:38:05.959350 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.967634, valid_loss=0.093826\n", + "I1011 13:38:05.964190 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.967882, valid_loss=0.093970\n", + "I1011 13:38:05.969462 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.968539, valid_loss=0.093090\n", + "I1011 13:38:05.974731 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.968750, valid_loss=0.095150\n", + "I1011 13:38:05.980073 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.969351, valid_loss=0.093564\n", + "I1011 13:38:05.985012 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.969922, valid_loss=0.092102\n", + "I1011 13:38:05.990343 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970084, valid_loss=0.092533\n", + "I1011 13:38:05.995862 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970052, valid_loss=0.092659\n", + "I1011 13:38:06.000868 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970749, valid_loss=0.091031\n", + "I1011 13:38:06.006488 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970881, valid_loss=0.090761\n", + "I1011 13:38:06.011607 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970833, valid_loss=0.091244\n", + "I1011 13:38:06.016931 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970958, valid_loss=0.091209\n", + "I1011 13:38:06.022135 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.971077, valid_loss=0.091426\n", + "I1011 13:38:06.027334 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.971029, valid_loss=0.090969\n", + "I1011 13:38:06.033073 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970982, valid_loss=0.090910\n", + "I1011 13:38:06.038525 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970469, valid_loss=0.091013\n", + "I1011 13:38:06.043758 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970435, valid_loss=0.091209\n", + "I1011 13:38:06.049290 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970403, valid_loss=0.091271\n", + "I1011 13:38:06.062720 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970077, valid_loss=0.091584\n", + "I1011 13:38:06.066341 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970197, valid_loss=0.091573\n", + "I1011 13:38:06.073789 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970170, valid_loss=0.091077\n", + "I1011 13:38:06.081246 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970145, valid_loss=0.092126\n", + "I1011 13:38:06.086821 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.969984, valid_loss=0.093272\n", + "I1011 13:38:06.092870 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.969962, valid_loss=0.094702\n", + "I1011 13:38:06.098466 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970074, valid_loss=0.094425\n", + "I1011 13:38:06.103694 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970312, valid_loss=0.094238\n", + "I1011 13:38:06.109227 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970543, valid_loss=0.093195\n", + "I1011 13:38:06.115069 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970514, valid_loss=0.093044\n", + "I1011 13:38:06.120559 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.969990, valid_loss=0.094240\n", + "I1011 13:38:06.126372 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970215, valid_loss=0.093394\n", + "I1011 13:38:06.132068 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970312, valid_loss=0.093076\n", + "I1011 13:38:06.137678 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970644, valid_loss=0.091968\n", + "I1011 13:38:06.143204 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970732, valid_loss=0.092254\n", + "I1011 13:38:06.148824 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970703, valid_loss=0.092006\n", + "I1011 13:38:06.154938 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.971014, valid_loss=0.091225\n", + "I1011 13:38:06.161688 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.971094, valid_loss=0.091146\n", + "I1011 13:38:06.167883 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970951, valid_loss=0.091370\n", + "I1011 13:38:06.178336 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.971137, valid_loss=0.091616\n", + "I1011 13:38:06.181853 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.970997, valid_loss=0.091868\n", + "I1011 13:38:06.187443 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.971178, valid_loss=0.091383\n", + "I1011 13:38:06.195272 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.971042, valid_loss=0.091168\n", + "I1011 13:38:06.201219 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.971114, valid_loss=0.091171\n", + "I1011 13:38:06.209757 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.971287, valid_loss=0.090662\n", + "I1011 13:38:06.214083 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.971054, valid_loss=0.091685\n", + "I1011 13:38:06.219918 140115512289024 logging_writer.py:35] [4213] valid_accuracy=0.971000, valid_loss=0.092086\n", + "I1011 13:38:07.554414 140122186418048 local.py:41] Setting work unit notes: 119.3 steps/s, 100.0% (4680/4680), ETA: 0m (0m : 0.2% checkpoint, 17.1% eval)\n", + "I1011 13:38:07.554989 140115530360576 logging_writer.py:35] [4680] steps_per_sec=119.307813\n", + "I1011 13:38:07.557116 140115530360576 logging_writer.py:35] [4680] core_hours_Tesla K80=0.008478, core_hours_approx_v3=0.008478, epoch=10.000000, img/sec=44893.887851, img/sec/core=44893.887851\n", + "I1011 13:38:08.017058 140115530360576 logging_writer.py:35] [4680] train_accuracy=0.977248, train_loss=0.069586\n", + "I1011 13:38:08.017334 140115530360576 logging_writer.py:35] [4680] learning_rate=0.10000001639127731\n", + "I1011 13:38:08.030735 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968750, valid_loss=0.129273\n", + "I1011 13:38:08.036700 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968750, valid_loss=0.119689\n", + "I1011 13:38:08.044379 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.963542, valid_loss=0.110827\n", + "I1011 13:38:08.047333 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.960937, valid_loss=0.112190\n", + "I1011 13:38:08.052469 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.960937, valid_loss=0.110497\n", + "I1011 13:38:08.059280 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.966146, valid_loss=0.097484\n", + "I1011 13:38:08.064376 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968750, valid_loss=0.096808\n", + "I1011 13:38:08.073166 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969727, valid_loss=0.095618\n", + "I1011 13:38:08.078387 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.970486, valid_loss=0.097969\n", + "I1011 13:38:08.083570 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.971094, valid_loss=0.094341\n", + "I1011 13:38:08.089126 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.970170, valid_loss=0.094370\n", + "I1011 13:38:08.094645 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969401, valid_loss=0.095082\n", + "I1011 13:38:08.100213 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968149, valid_loss=0.096196\n", + "I1011 13:38:08.106033 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.967634, valid_loss=0.093719\n", + "I1011 13:38:08.111281 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968229, valid_loss=0.092721\n", + "I1011 13:38:08.117331 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.967773, valid_loss=0.097120\n", + "I1011 13:38:08.124916 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969210, valid_loss=0.095657\n", + "I1011 13:38:08.128839 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969618, valid_loss=0.094599\n", + "I1011 13:38:08.135871 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.970395, valid_loss=0.093650\n", + "I1011 13:38:08.139065 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969922, valid_loss=0.095227\n", + "I1011 13:38:08.144762 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969494, valid_loss=0.096057\n", + "I1011 13:38:08.150561 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968395, valid_loss=0.096656\n", + "I1011 13:38:08.156185 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969090, valid_loss=0.094797\n", + "I1011 13:38:08.163647 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968099, valid_loss=0.096582\n", + "I1011 13:38:08.167541 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968125, valid_loss=0.098467\n", + "I1011 13:38:08.172708 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.967849, valid_loss=0.097492\n", + "I1011 13:38:08.178109 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968461, valid_loss=0.096842\n", + "I1011 13:38:08.183527 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969029, valid_loss=0.094878\n", + "I1011 13:38:08.189237 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969289, valid_loss=0.095417\n", + "I1011 13:38:08.194396 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968490, valid_loss=0.096925\n", + "I1011 13:38:08.200157 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969002, valid_loss=0.095475\n", + "I1011 13:38:08.205457 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968994, valid_loss=0.095443\n", + "I1011 13:38:08.211004 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968750, valid_loss=0.097123\n", + "I1011 13:38:08.216576 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968520, valid_loss=0.097665\n", + "I1011 13:38:08.222098 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968527, valid_loss=0.097142\n", + "I1011 13:38:08.229448 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968533, valid_loss=0.097674\n", + "I1011 13:38:08.232575 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968539, valid_loss=0.097255\n", + "I1011 13:38:08.237780 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968339, valid_loss=0.100143\n", + "I1011 13:38:08.244685 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968750, valid_loss=0.098700\n", + "I1011 13:38:08.250061 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969336, valid_loss=0.097067\n", + "I1011 13:38:08.255380 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968941, valid_loss=0.098857\n", + "I1011 13:38:08.262145 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968750, valid_loss=0.099344\n", + "I1011 13:38:08.273759 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969295, valid_loss=0.098024\n", + "I1011 13:38:08.278054 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969105, valid_loss=0.098355\n", + "I1011 13:38:08.286692 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968924, valid_loss=0.098179\n", + "I1011 13:38:08.293039 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968750, valid_loss=0.098203\n", + "I1011 13:38:08.300283 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968584, valid_loss=0.098170\n", + "I1011 13:38:08.304478 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968587, valid_loss=0.098142\n", + "I1011 13:38:08.310145 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968750, valid_loss=0.098447\n", + "I1011 13:38:08.315885 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968281, valid_loss=0.098592\n", + "I1011 13:38:08.321719 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968290, valid_loss=0.098455\n", + "I1011 13:38:08.329766 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968149, valid_loss=0.099607\n", + "I1011 13:38:08.333369 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968160, valid_loss=0.099498\n", + "I1011 13:38:08.340982 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968461, valid_loss=0.099198\n", + "I1011 13:38:08.345071 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968466, valid_loss=0.098903\n", + "I1011 13:38:08.350618 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968890, valid_loss=0.098622\n", + "I1011 13:38:08.356155 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968887, valid_loss=0.100246\n", + "I1011 13:38:08.361375 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.968885, valid_loss=0.101238\n", + "I1011 13:38:08.368014 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969280, valid_loss=0.100312\n", + "I1011 13:38:08.373765 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969271, valid_loss=0.100155\n", + "I1011 13:38:08.379756 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969262, valid_loss=0.099782\n", + "I1011 13:38:08.386999 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969632, valid_loss=0.098748\n", + "I1011 13:38:08.391232 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969990, valid_loss=0.098391\n", + "I1011 13:38:08.397715 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969849, valid_loss=0.098284\n", + "I1011 13:38:08.403527 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969832, valid_loss=0.097746\n", + "I1011 13:38:08.410784 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.970052, valid_loss=0.096811\n", + "I1011 13:38:08.414635 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.970033, valid_loss=0.097143\n", + "I1011 13:38:08.420496 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.969784, valid_loss=0.097943\n", + "I1011 13:38:08.426122 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.970222, valid_loss=0.096861\n", + "I1011 13:38:08.433858 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.970424, valid_loss=0.096205\n", + "I1011 13:38:08.440110 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.970511, valid_loss=0.095806\n", + "I1011 13:38:08.446235 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.970703, valid_loss=0.095998\n", + "I1011 13:38:08.454037 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.970890, valid_loss=0.095648\n", + "I1011 13:38:08.457603 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.970861, valid_loss=0.095777\n", + "I1011 13:38:08.470597 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.970833, valid_loss=0.096168\n", + "I1011 13:38:08.477122 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.970909, valid_loss=0.096685\n", + "I1011 13:38:08.482476 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.970982, valid_loss=0.096081\n", + "I1011 13:38:08.488964 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.971054, valid_loss=0.095907\n", + "I1011 13:38:08.494513 140115512289024 logging_writer.py:35] [4680] valid_accuracy=0.971000, valid_loss=0.096360\n", + "I1011 13:38:08.500287 140122186418048 checkpoints.py:120] Saving checkpoint at step: 4680\n", + "I1011 13:38:08.504111 140122186418048 checkpoints.py:149] Saved checkpoint at ./checkpoint_4680\n", + "I1011 13:38:08.504275 140122186418048 checkpoints.py:174] Removing checkpoint at ./checkpoint_3276\n" + ] + } + ] + } + ] +} diff --git a/scenic/common_lib/common_utils.py b/scenic/common_lib/common_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..889bef9411b5c65262ef5fa3267a472e74225821 --- /dev/null +++ b/scenic/common_lib/common_utils.py @@ -0,0 +1,93 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utility functions that do not fit into other common_lib modules.""" + +import importlib +import types + +from absl import logging +import jax +import ml_collections + + +def recursive_reload(module: types.ModuleType, package_restrict: str): + """Recursively reload a module and the modules it imports. + + Args: + module: The module to reload. + + package_restrict: Only modules with this prefix will be reloaded. For + example, if package_restrict is "scenic.projects", only modules under + scenic.projects will be reloaded. package_restrict must always be set to + avoid reloading of built-in or unrelated packages that should not be + reloaded (e.g. Numpy). + + Returns: + The reloaded module object. + + Raises: + ValueError if package_restrict is empyt. + """ + reloaded = set() + if not package_restrict: + raise ValueError('package_restrict must be non-empty.') + + def reload(m): + if m in reloaded: + return m + reloaded.add(m) + for attribute_name in dir(m): + attribute = getattr(m, attribute_name) + if (isinstance(attribute, types.ModuleType) and + attribute.__name__.startswith(package_restrict)): + reload(attribute) + logging.info('Reloading %s', m.__name__) + return importlib.reload(m) + + return reload(module) + + +def to_config_dict_heuristic( + config: ml_collections.ConfigDict) -> ml_collections.ConfigDict: + """Heuristically converts dicts inside a ConfigDict into ConfigDicts. + + This function detects lists and tuples with dicts and converts those dicts + into ConfigDicts. This will address most failure cases, but the function will + not be able resolve nested cases (e.g. list(dict(list(....)))). + + Arguments: + config: Config to attempt fixing. + + Returns: + Probably fixed config. + """ + def maybe_config_dict(x): + if isinstance(x, dict): + return ml_collections.ConfigDict(x) + return x + + def maybe_config_dict_in_list(x): + if isinstance(x, (list, tuple)): + return jax.tree_util.tree_map( + maybe_config_dict, x, is_leaf=lambda y: isinstance(y, dict) + ) + return x + + config = jax.tree_util.tree_map( + maybe_config_dict_in_list, + config.to_dict(), + is_leaf=lambda x: isinstance(x, list), + ) + return ml_collections.ConfigDict(config) diff --git a/scenic/common_lib/debug_utils.py b/scenic/common_lib/debug_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..9781325a461de20d2236941c5233cd80d55dc179 --- /dev/null +++ b/scenic/common_lib/debug_utils.py @@ -0,0 +1,332 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for logging, debugging, profiling, testing, and visualization.""" + +from collections import abc +from concurrent import futures +import json +import operator +import threading +from typing import Any, Callable, Optional, Sequence, Set, Tuple, Union + +from absl import logging +from clu import parameter_overview +import jax +from jax.experimental import roofline +import jax.numpy as jnp +from jax.tree_util import tree_map +import ml_collections + +PyTree = Any + + +def enable_jax_debugging_flags(): + """Enables some of the global JAX flags for debugging.""" + + # Enable the NaN-checker behavior to cause JAX to hard-break on the first + # occurrence of a NaN. + jax.config.update('jax_debug_nans', True) + + # Enable the compilation logger to check whether or not we're accidentally + # causing a lot of re-compilation (inspect logs for excessive jitting). + jax.config.update('jax_log_compiles', True) + + # Detect numpy-style automatic rank promotion and force strict, explicit + # casts. We can use `raise` instead of warn to raise an error. + jax.config.update('jax_numpy_rank_promotion', 'warn') + + # Print global JAX flags in logs. + logging.info('Global JAX flags: %s', jax.config.values) + + +def log_param_shapes( + params: Any, + print_params_nested_dict: bool = False, + description: Optional[str] = None, + include_stats: bool = True, +) -> int: + """Prints out shape of parameters and total number of trainable parameters. + + Args: + params: PyTree of model parameters. + print_params_nested_dict: If True, it prints parameters in shape of a nested + dict. + description: Optional description to print out before logging the parameter + summary. + include_stats: Include parameter stats if True. + + Returns: + int; Total number of trainable parameters. + """ + if print_params_nested_dict: + shape_dict = tree_map(lambda x: str(x.shape), params) + # We use json.dumps for pretty printing nested dicts. + logging.info( + 'Printing model param shape:/n%s', + json.dumps(shape_dict, sort_keys=True, indent=4), + ) + parameter_overview.log_parameter_overview( + params, include_stats=include_stats, msg=description + ) + total_params = jax.tree_util.tree_reduce( + operator.add, tree_map(lambda x: x.size, params) + ) + logging.info('Total params: %d', total_params) + return total_params + + +def input_spec_to_jax_shape_dtype_struct( + spec: Union[Tuple[Tuple[int, ...], jnp.dtype], Tuple[int, ...]], + batch_size: Optional[int] = None, +) -> jax.ShapeDtypeStruct: + """Parse an input specs into a jax.ShapeDtypeStruct.""" + spec = tuple(spec) + if batch_size and len(spec) == 1: + raise ValueError('batch_size unsupported when len(spec) is 1.') + if len(spec) == 2 and isinstance(spec[0], abc.Iterable): + shape = (batch_size,) + tuple(spec[0][1:]) if batch_size else spec[0] + dtype = spec[1] + else: + shape = (batch_size,) + tuple(spec[1:]) if batch_size else spec + dtype = jnp.float32 + return jax.ShapeDtypeStruct(shape, dtype) + + +def compute_flops( + flax_model_apply_fn: Callable[[jnp.ndarray], Any], + input_spec: Sequence[ + Union[Tuple[Tuple[int, ...], jnp.dtype], Tuple[int, ...], None] + ], + fuse_multiply_add: bool, +) -> float: + """Performs static analysis of the graph to compute theoretical FLOPs. + + One can also use the XProf profiler to get the actual FLOPs at runtime + based on device counters. Theoretical FLOPs are more useful for comparing + models across different library implementations and is hardware-agnostic. + + Args: + flax_model_apply_fn: Apply function of the flax model to be analysed. + input_spec: An iterable of (shape, dtype) pairs specifying the shape and + dtype of the inputs. If unspecified the dtype is float32. + fuse_multiply_add: Bool; If true, count a multiply and add (also known as + "multiply-accumulate" or "MAC") as 1 FLOP rather than 2 (as done by the + HLO analysis). This is commonly used in literature. + + Returns: + flops: The total number of flops. + """ + dummy_input = [] + for spec in input_spec: + if spec is not None: + in_st = input_spec_to_jax_shape_dtype_struct(spec, batch_size=1) + dummy_input.append(jnp.zeros(in_st.shape, in_st.dtype)) + else: + dummy_input.append(None) + + _, analysis = roofline.roofline(flax_model_apply_fn)(*dummy_input) + flops = analysis.unfused_flops + if fuse_multiply_add: + flops = flops / 2 + logging.info('GFLOPs %0.3f for input spec: %s', flops / 10**9, input_spec) + return flops + + +def compute_flops_with_pytree( + flax_model_apply_fn: Callable[..., Any], + input_spec: PyTree, + unpack_input: bool = True, + fuse_multiply_add: bool = True, +) -> float: + """Performs static analysis of the graph to compute theoretical FLOPs. + + One can also use the XProf profiler to get the actual FLOPs at runtime + based on device counters. Theoretical FLOPs are more useful for comparing + models across different library implementations and is hardware-agnostic. + + Args: + flax_model_apply_fn: Apply function of the flax model to be analysed. + input_spec: A PyTree whose leaves are (shape, dtype) pairs specifying the + shape and dtype of the inputs. If unspecified the dtype is float32. + unpack_input: Unpack the pytree when feeding it to the model. + fuse_multiply_add: Bool; If true, count a multiply and add (also known as + "multiply-accumulate" or "MAC") as 1 FLOP rather than 2 (as done by the + HLO analysis). This is commonly used in literature. + + Returns: + flops: The total number of flops. + """ + + def check_leaf_spec(spec: Sequence[PyTree]) -> bool: + return ( + len(spec) == 2 + and isinstance(spec[0], abc.Sequence) + and all(isinstance(i, int) for i in spec[0]) + and isinstance(spec[1], jnp.dtype) + ) or (all(isinstance(i, int) for i in spec[0])) + + def create_dummy_input(spec: PyTree) -> PyTree: + if isinstance(spec, dict): + return {k: create_dummy_input(v) for k, v in spec.items()} + elif isinstance(spec, abc.Sequence): + if check_leaf_spec(spec): + in_st = input_spec_to_jax_shape_dtype_struct(spec, batch_size=1) + return jnp.zeros(in_st.shape, in_st.dtype) + else: + return tuple(create_dummy_input(child) for child in spec) + elif spec is None: + return None + else: + raise NotImplementedError('Unsupported spec type.', type(spec)) + + dummy_input = create_dummy_input(input_spec) + + if isinstance(dummy_input, dict) and unpack_input: + # We can't pass custom kwargs to roofline, so we have to use a lambda. + _, analysis = roofline.roofline( + lambda: flax_model_apply_fn(**dummy_input) + )() + elif isinstance(dummy_input, abc.Sequence) and unpack_input: + _, analysis = roofline.roofline(flax_model_apply_fn)(*dummy_input) + else: + _, analysis = roofline.roofline(flax_model_apply_fn)(dummy_input) + + flops = analysis.unfused_flops + if fuse_multiply_add: + flops = flops / 2 + logging.info('GFLOPs %0.3f for input spec: %s', flops / 10**9, input_spec) + return flops + + +class ConfigDictWithAccessRecord(ml_collections.ConfigDict): + """A wrapper for ConfigDicts that records access of any config field. + + ConfigDictWithAccessRecord behaves like a standard ConfigDict, except that it + records access to any config field (including nested instances of + ConfigDictWithAccessRecord). This allows testing for unused config fields. + + Example usage: + + def test_config_access(self): + with mock.patch('configs.my_config.ml_collections.ConfigDict', + test_utils.ConfigDictWithAccessRecord): + config = config_module.get_config() + config.reset_access_record() # Resets previous access records. + ... # Code that uses config. + self.assertEmpty(config.get_not_accessed()) + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.reset_access_record() + + def __getitem__(self, key: str): + self._access_record.add(key) + return super().__getitem__(key) + + def reset_access_record(self): + """Resets the record of config field accesses.""" + for value in self._fields.values(): + if isinstance(value, type(self)): + value.reset_access_record() + # object.__setattr__ avoids triggering ConfigDict's __getattr__: + object.__setattr__(self, '_access_record', set()) + + def get_not_accessed(self, prefix: str = 'config') -> Set[str]: + """Returns the set of fields that were not accessed since the last reset.""" + not_accessed = set() + for key, value in self._fields.items(): + path = f'{prefix}.{key}' + if isinstance(value, type(self)): + not_accessed |= value.get_not_accessed(prefix=path) + else: + if key not in self._access_record and key != '_access_record': + not_accessed.add(path) + return not_accessed + + +class DummyExecutor(futures.Executor): + """A mock executor that operates serially. + + Useful for debugging. + + Example usage: + + # Runs concurrently, difficult to debug: + pool = futures.ThreadPoolExecutor(max_workers=max_workers) + pool.submit(my_function) + + # For debugging: + pool = DummyExecutor() + pool.submit(my_function) # Will block and run serially. + """ + + def __init__(self): + self._shutdown = False + self._shutdown_lock = threading.Lock() + + def submit(self, fn: Callable[..., Any], *args, **kwargs) -> futures.Future: # pylint: disable=g-bare-generic + with self._shutdown_lock: + if self._shutdown: + raise RuntimeError('Cannot schedule new futures after shutdown.') + + future = futures.Future() + try: + result = fn(*args, **kwargs) + except BaseException as e: # pylint: disable=broad-except + future.set_exception(e) + else: + future.set_result(result) + return future + + def shutdown(self, wait: bool = True): # pytype: disable=signature-mismatch # overriding-parameter-name-checks + with self._shutdown_lock: + self._shutdown = True + + +class StepTraceContextHelper: + """Helper class to use jax.profiler.StepTraceAnnotation. + + This will cause a "name" event to show up on the trace timeline if the + event occurs while the process is being traced by TensorBoard. In addition, + if using accelerators, the device trace timeline will also show a "name" + event. Note that "step_num" can be set as a keyword argument to pass the + global step number to the profiler. See jax.profiler.StepTraceAnnotation. + + """ + + def __init__(self, name: str, init_step_num: int): + self.name = name + self.step_num = init_step_num + self.context = None + + def __enter__(self): + self.context = jax.profiler.StepTraceAnnotation( + self.name, step_num=self.step_num + ) + self.step_num += 1 + self.context.__enter__() + return self + + def __exit__(self, exc_type, exc_value, tb): + assert self.context is not None, 'Exited context without entering.' + self.context.__exit__(exc_type, exc_value, tb) + self.context = None + + def next_step(self): + if self.context is None: + raise ValueError('Must call next_step() within a context.') + self.__exit__(None, None, None) + self.__enter__() diff --git a/scenic/common_lib/export_utils.py b/scenic/common_lib/export_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..1efc3abbe8a128ee4910afe91f6dfa98e511ab23 --- /dev/null +++ b/scenic/common_lib/export_utils.py @@ -0,0 +1,187 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Helper functions for exporting JAX models to Tensorflow SavedModels.""" + +from typing import Any, Callable, Sequence, Optional, Union + +from jax.experimental import jax2tf +import tensorflow as tf +import tree as dm_tree + +# JAX team is working on type annotation for pytree: +# https://github.com/jax-ml/jax/issues/1555 +# A PyTree is a nested dictionary where the leaves are `jnp.ndarray`. +# TODO(aarnab): Fix type annotation once ready. +PyTree = Any + + +def convert_and_save_model( + jax_fn: Callable[[PyTree, PyTree], PyTree], + params: PyTree, + model_dir: str, + *, + input_signatures: Union[ + Sequence[tf.TensorSpec], + Sequence[Sequence[tf.TensorSpec]], + Sequence[dict[str, tf.TensorSpec]], + ], + polymorphic_shapes: Optional[ + Union[str, dict[str, str]] + ] = None, + with_gradient: bool = False, + enable_xla: bool = True, + compile_model: bool = True, + saved_model_options: Optional[tf.saved_model.SaveOptions] = None, + native_serialization: Optional[str | bool] = "default", + native_serialization_platforms: Sequence[str] | None = ("cpu", "tpu")): + """Converts a JAX function and saves a SavedModel. + + We assume that the JAX model consists of a prediction function and trained + parameters, and the computation graph of the function is saved separately from + the parameters. Saving the graph separately from the parameters reduces + the size of the Tensorflow `GraphDef`, and enables finetuning of model + parameters too. + + To use this function, a JAX model must be converted to a function of two + arguments, the model parameters and the input. + For a Scenic model, this corresponds to: + ``` + params = train_state.optimizer.target + flax_model = model.flax_model + def _predict_fn(params, input_data): + return flax_model.apply({'params': params}, input_data, train=False) + ``` + + Args: + jax_fn: A JAX function taking two arguments, the parameters and the inputs. + Both arguments may be (nested) tuples/lists/dictionaries of `np.ndarray`. + It is necessary to be able to JIT-compile this function (ie run + `jax.jit` on it). + params: The parameters, to be used as first argument for `jax_fn`. These + must be (nested) tuples/lists/dictionaries of `np.ndarray`, and will be + saved as the variables of the SavedModel. + model_dir: The directory where the model should be saved. + input_signatures: The input signatures for the second argument of `jax_fn` + (the input). A signature must be a `tensorflow.TensorSpec` instance, or a + (nested) tuple/list/dictionary thereof with a structure matching the + second argument of `jax_fn`. The first input_signature will be saved as + the default serving signature. The additional signatures will be used + only to ensure that the `jax_fn` is traced and converted to TF for the + corresponding input shapes. + polymorphic_shapes: If given then it will be used as the + `polymorphic_shapes` argument to `jax2tf.convert` for the second parameter + of `jax_fn`. In this case, a single `input_signatures` is supported, and + should have `None` in the polymorphic dimensions. This is required, for + example, to have models with dynamic batch sizes. + with_gradient: Whether the SavedModel should support gradients. If `True`, + then a custom gradient is saved. If `False`, then a + `tf.raw_ops.PreventGradient` is saved to error if a gradient is attempted. + (At the moment due to a bug in SavedModel, custom gradients are not + supported.) + enable_xla: Whether the jax2tf converter is allowed to use TF XLA ops. If + `False`, the conversion tries harder to use purely TF ops and raises an + exception if it is not possible. + compile_model: Use TensorFlow jit_compiler on the SavedModel. This + is needed if the SavedModel will be used for TensorFlow serving. + saved_model_options: Options to pass to `savedmodel.save`. + native_serialization: Serialize the JAX function natively to + StableHLO with compatibility guarantees. This makes it easier to have + confidence that the code executed when calling this function from + TensorFlow is exactly the same as JAX would run natively. See + jax2tf.convert() for details. + native_serialization_platforms: When the "native_serialization" flag is + used, the platforms that it will be serialised to. Must be a tuple of + strings, including a subset of: ['cpu', 'cuda', 'rocm', 'tpu']. + 'None', specifies the JAX default backend on the machine where the + lowering is done. + + Raises: + ValueError: If at least one input signature is not defined. However, if + `polymorphic_shapes` is given, then only one input signature is supported. + """ + if not input_signatures: + raise ValueError("At least one input_signature must be given.") + if polymorphic_shapes is not None and len(input_signatures) > 1: + raise ValueError("For shape-polymorphic conversion a single " + "input_signature is supported.") + tf_fn = jax2tf.convert( + jax_fn, + with_gradient=with_gradient, + polymorphic_shapes=[None, polymorphic_shapes], + enable_xla=enable_xla, + native_serialization=native_serialization, + native_serialization_platforms=native_serialization_platforms) + + def get_tf_variable(path, param): + return tf.Variable(param, trainable=with_gradient, name="/".join(path)) + + param_vars = dm_tree.map_structure_with_path( + # Due to a bug in SavedModel it is not possible to use `tf.GradientTape` + # on a function converted with jax2tf and loaded from SavedModel. Thus, we + # mark the variables as non-trainable to ensure that users of the + # SavedModel will not try to fine tune them. + get_tf_variable, params) + tf_graph = tf.function( + lambda inputs: tf_fn(param_vars, inputs), + autograph=False, + jit_compile=compile_model) + + # This signature is needed for TensorFlow Serving use. + signatures = { + tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY: + tf_graph.get_concrete_function(input_signatures[0]) + } + + for input_signature in input_signatures[1:]: + # If there are more signatures, trace and cache a TF function for each one. + tf_graph.get_concrete_function(input_signature) + wrapper = _ReusableSavedModelWrapper(tf_graph, param_vars) + + if saved_model_options: + saved_model_options.function_aliases = {"inference_func": tf_graph} + else: + saved_model_options = tf.saved_model.SaveOptions( + function_aliases={"inference_func": tf_graph} + ) + + if with_gradient: + saved_model_options.experimental_custom_gradients = True + + tf.saved_model.save( + wrapper, model_dir, signatures=signatures, options=saved_model_options + ) + + +class _ReusableSavedModelWrapper(tf.train.Checkpoint): + """Wraps a function and its parameters for saving to a SavedModel. + + Implements the interface described at + https://www.tensorflow.org/hub/reusable_saved_models. + """ + + def __init__(self, tf_graph: Callable[[PyTree], PyTree], param_vars: PyTree): + """Constructor. + + Args: + tf_graph: A `tf.function` taking one argument (the inputs), which can be + be tuples/lists/dictionaries of `np.ndarray` or tensors. The function + may have references to the `tf.Variables` in `param_vars`. + param_vars: The parameters, as tuples/lists/dictionaries of + `tf.Variable`, to be saved as the variables of the SavedModel. + """ + super().__init__() + self.variables = tf.nest.flatten(param_vars) + self.trainable_variables = [v for v in self.variables if v.trainable] + self.__call__ = tf_graph diff --git a/scenic/common_lib/image_utils.py b/scenic/common_lib/image_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..fe2eb82bae41e08797ba6ae4567d418073586bac --- /dev/null +++ b/scenic/common_lib/image_utils.py @@ -0,0 +1,99 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Image-related utility functions.""" + +from typing import Optional + +import jax +import jax.numpy as jnp +import numpy as np +from PIL import Image + + +def compress_masks(mask_probs, k=3): + """At each pixel, stores the largest k probabilities and their indices.""" + if mask_probs.ndim == 5: + mask_probs = jnp.squeeze(mask_probs, axis=-1) # Remove channel dim. + # Input shape should be [b, num_queries, out_h, out_w]. + assert mask_probs.ndim == 4, f'Expected 4-D input, got {mask_probs.shape}' + mask_probs = jnp.transpose(mask_probs, [0, 2, 3, 1]) + vals, inds = jax.lax.top_k(mask_probs, k=k) + # Back to [b, k, out_h, out_w] + vals = jnp.transpose(vals, [0, 3, 1, 2]) + inds = jnp.transpose(inds, [0, 3, 1, 2]) + return vals, inds + + +def decompress_masks(compressed_masks, num_queries): + """Reconstructs the uncompressed mask representation.""" + vals, inds = compressed_masks + b, _, h, w = vals.shape + mask_probs = np.zeros((b, num_queries, h, w)) + ib, _, ih, iw = np.meshgrid( + range(b), range(1), range(h), range(w), indexing='ij') + mask_probs[ib, inds, ih, iw] = vals + return mask_probs + + +def resize_pil(image_or_batch: np.ndarray, + *, + out_h: int, + out_w: int, + num_batch_dims: Optional[int] = None, + method: str = 'linear') -> np.ndarray: + """Resizes an image or batch of images using PIL. + + This function handles images with or without channel dimension, but requires + any leading batch dimensions to be specified explicitly to avoid ambiguities. + + Args: + image_or_batch: Image or batch of images. + out_h: Image height after resizing. + out_w: Image width after resizing. + num_batch_dims: Number of leading dimensions that are to be treated as batch + dimensions, e.g. 0 for single images or 1 for simple batches. If None, the + input is assumed to be a single image. + method: String indicating the resizing method. One of "linear" or "nearest". + + Returns: + Resized image or batch of images. + """ + if num_batch_dims is None: + num_batch_dims = 0 + if image_or_batch.ndim > 3 or (image_or_batch.ndim == 3 and + image_or_batch.shape[-1] not in [3, 4]): + raise ValueError('If a batch of images is supplied, num_batch_dims must ' + 'be specified.') + + if method == 'linear': + resample = Image.Resampling.BILINEAR + elif method == 'nearest': + resample = Image.Resampling.NEAREST + elif method == 'lanczos': + resample = Image.Resampling.LANCZOS + else: + raise NotImplementedError(f'Method not implemented: {method}') + + batch_dims = image_or_batch.shape[:num_batch_dims] + image_dims = image_or_batch.shape[num_batch_dims:] + batch = np.reshape(image_or_batch, (-1,) + image_dims) + + pil_size = [out_w, out_h] + resized = np.stack([ + np.asarray(Image.fromarray(image).resize(pil_size, resample)) # pytype: disable=wrong-arg-types # pillow-102-upgrade + for image in batch + ]) + + return np.reshape(resized, batch_dims + resized.shape[1:]) diff --git a/scenic/common_lib/tests/__init__.py b/scenic/common_lib/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/common_lib/tests/test_common_utils.py b/scenic/common_lib/tests/test_common_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..cbbb3ad8df892667283e91af411b2254d0e03b9c --- /dev/null +++ b/scenic/common_lib/tests/test_common_utils.py @@ -0,0 +1,33 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for functions in common_utils.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +from scenic.common_lib import common_utils +from scenic.model_lib.base_models import classification_model as test_model_module # pylint: disable=unused-import + + +class RecursiveReloadTest(parameterized.TestCase): + """Tests recursive_reload.""" + + def test_recursive_reload(self): + """Tests that recursive_reload returns without error.""" + global test_model_module + test_model_module = common_utils.recursive_reload( + test_model_module, package_restrict='scenic') + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/common_lib/tests/test_debug_utils.py b/scenic/common_lib/tests/test_debug_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..9abf204ce116c98c1257b384a2478f8aa438feb2 --- /dev/null +++ b/scenic/common_lib/tests/test_debug_utils.py @@ -0,0 +1,66 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for debug_utils.""" + +from absl.testing import absltest +from scenic.common_lib import debug_utils + + +class ConfigDictWithAccessRecordTest(absltest.TestCase): + """Tests for ConfigDictWithAccessRecord.""" + + def test_getattr_access(self): + config = debug_utils.ConfigDictWithAccessRecord() + config.a = None + config.b = None + config.reset_access_record() + _ = config.a # Performs config access that should be recorded. + self.assertSetEqual(config.get_not_accessed(), {'config.b'}) + + def test_getitem_access(self): + config = debug_utils.ConfigDictWithAccessRecord() + config.a = None + config.b = None + config.reset_access_record() + _ = config['a'] # Performs config access that should be recorded. + self.assertSetEqual(config.get_not_accessed(), {'config.b'}) + + def test_nested_access(self): + config = debug_utils.ConfigDictWithAccessRecord() + config.nested = debug_utils.ConfigDictWithAccessRecord() + config.nested.a = None + config.nested.b = None + config.reset_access_record() + _ = config.nested.a # Performs config access that should be recorded. + self.assertSetEqual(config.get_not_accessed(), {'config.nested.b'}) + + def test_reset_access_record(self): + config = debug_utils.ConfigDictWithAccessRecord() + config.a = None + _ = config.a # Performs config access that should be recorded. + config.reset_access_record() + self.assertSetEqual(config.get_not_accessed(), {'config.a'}) + + def test_reset_access_record_nested(self): + config = debug_utils.ConfigDictWithAccessRecord() + config.nested = debug_utils.ConfigDictWithAccessRecord() + config.nested.a = None + _ = config.nested.a # Performs config access that should be recorded. + config.reset_access_record() + self.assertSetEqual(config.get_not_accessed(), {'config.nested.a'}) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/common_lib/tests/test_image_utils.py b/scenic/common_lib/tests/test_image_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..c1e2551246156937ac645d89d3967728041f9702 --- /dev/null +++ b/scenic/common_lib/tests/test_image_utils.py @@ -0,0 +1,51 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for functions in image_utils.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +import numpy as np +from scenic.common_lib import image_utils + + +class ResizePilTest(parameterized.TestCase): + """Test resize_pil.""" + + @parameterized.parameters([ + # pylint: disable=line-too-long + # No batch dims: + {'input_shape': [4, 5], 'num_batch_dims': 0, 'h': 2, 'w': 3, 'output_shape': [2, 3]}, + {'input_shape': [4, 5, 3], 'num_batch_dims': 0, 'h': 2, 'w': 3, 'output_shape': [2, 3, 3]}, + # One batch dim: + {'input_shape': [7, 4, 5], 'num_batch_dims': 1, 'h': 2, 'w': 3, 'output_shape': [7, 2, 3]}, + {'input_shape': [7, 4, 5, 3], 'num_batch_dims': 1, 'h': 2, 'w': 3, 'output_shape': [7, 2, 3, 3]}, + # Two batch dims: + {'input_shape': [6, 7, 4, 5], 'num_batch_dims': 2, 'h': 2, 'w': 3, 'output_shape': [6, 7, 2, 3]}, + {'input_shape': [6, 7, 4, 5, 3], 'num_batch_dims': 2, 'h': 2, 'w': 3, 'output_shape': [6, 7, 2, 3, 3]}, + # pylint: enable=line-too-long + ]) + def test_resize_pil(self, input_shape, num_batch_dims, h, w, output_shape): + """Test image resizing.""" + self.assertSequenceEqual( + output_shape, + image_utils.resize_pil( + np.zeros(input_shape, dtype=np.uint8), + num_batch_dims=num_batch_dims, + out_h=h, + out_w=w).shape) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/common_lib/tests/test_video_utils.py b/scenic/common_lib/tests/test_video_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..0271965c9ca6b7e99fdbca7ec4c1f1d22cf4559a --- /dev/null +++ b/scenic/common_lib/tests/test_video_utils.py @@ -0,0 +1,40 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for functions in video_utils.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +import numpy as np +from scenic.common_lib import video_utils + + +class VideoUtilsTest(parameterized.TestCase): + """Test video utils.""" + + @parameterized.named_parameters([ + ('n_sampled_frames_32', 32, (32, 32, 224, 224, 3)), + ('n_sampled_frames_18', 18, (32, 19, 224, 224, 3)), + ]) + def test_sample_frames_uniformly(self, n_sampled_frames, output_shape): + """Test frame sampling.""" + input_shape = (32, 128, 224, 224, 3) + self.assertSequenceEqual( + output_shape, + video_utils.sample_frames_uniformly( + np.zeros(input_shape), n_sampled_frames).shape) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/common_lib/video_utils.py b/scenic/common_lib/video_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..41b1dc5185ae0c13a6b8255d2f11a6e42c60f5a3 --- /dev/null +++ b/scenic/common_lib/video_utils.py @@ -0,0 +1,36 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Video-related utility functions.""" + +import jax.numpy as jnp + + +def sample_frames_uniformly(x: jnp.ndarray, + n_sampled_frames: int) -> jnp.ndarray: + """Sample frames from the input video.""" + if x.ndim != 5: + raise ValueError('Input shape should be [bs, t, h, w, c].') + num_frames = x.shape[1] + if n_sampled_frames < num_frames: + t_start_idx = num_frames / (n_sampled_frames + 1) + t_step = t_start_idx + else: + t_start_idx = 0 + t_step = 1 + t_end_idx = num_frames + temporal_indices = jnp.arange(t_start_idx, t_end_idx, t_step) + temporal_indices = jnp.round(temporal_indices).astype(jnp.int32) + temporal_indices = jnp.minimum(temporal_indices, num_frames - 1) + return x[:, temporal_indices] # [n, t_s, in_h, in_w, c] diff --git a/scenic/dataset_lib/__init__.py b/scenic/dataset_lib/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/dataset_lib/__pycache__/__init__.cpython-310.pyc b/scenic/dataset_lib/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..70a26ba4cad63664329a6e0d887b30c65022db60 Binary files /dev/null and b/scenic/dataset_lib/__pycache__/__init__.cpython-310.pyc differ diff --git a/scenic/dataset_lib/__pycache__/__init__.cpython-311.pyc b/scenic/dataset_lib/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07dbdcb010d742eb7b09fa45ea01727bd6e73123 Binary files /dev/null and b/scenic/dataset_lib/__pycache__/__init__.cpython-311.pyc differ diff --git a/scenic/dataset_lib/__pycache__/__init__.cpython-312.pyc b/scenic/dataset_lib/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b207bd3031511cca16fa8175453c63b771d1d4b Binary files /dev/null and b/scenic/dataset_lib/__pycache__/__init__.cpython-312.pyc differ diff --git a/scenic/dataset_lib/__pycache__/dataset_utils.cpython-310.pyc b/scenic/dataset_lib/__pycache__/dataset_utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6812f674ae9355792f4e399d85de044695675ce8 Binary files /dev/null and b/scenic/dataset_lib/__pycache__/dataset_utils.cpython-310.pyc differ diff --git a/scenic/dataset_lib/__pycache__/dataset_utils.cpython-311.pyc b/scenic/dataset_lib/__pycache__/dataset_utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..64025dee92e8f4f9282d572cec27fc883306baab Binary files /dev/null and b/scenic/dataset_lib/__pycache__/dataset_utils.cpython-311.pyc differ diff --git a/scenic/dataset_lib/__pycache__/dataset_utils.cpython-312.pyc b/scenic/dataset_lib/__pycache__/dataset_utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fdd0aa729a691bcd8e2a423e1c9a045f6f099188 Binary files /dev/null and b/scenic/dataset_lib/__pycache__/dataset_utils.cpython-312.pyc differ diff --git a/scenic/dataset_lib/__pycache__/datasets.cpython-310.pyc b/scenic/dataset_lib/__pycache__/datasets.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8e4e8269338bfc0638cfa7f16a586a91590114e Binary files /dev/null and b/scenic/dataset_lib/__pycache__/datasets.cpython-310.pyc differ diff --git a/scenic/dataset_lib/__pycache__/datasets.cpython-311.pyc b/scenic/dataset_lib/__pycache__/datasets.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8375a62398e1107bfc7bcb5c2d0c12ea8a2b4ca9 Binary files /dev/null and b/scenic/dataset_lib/__pycache__/datasets.cpython-311.pyc differ diff --git a/scenic/dataset_lib/__pycache__/datasets.cpython-312.pyc b/scenic/dataset_lib/__pycache__/datasets.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bef8c28102ee42d90d176a4e6603abc1105e8f4e Binary files /dev/null and b/scenic/dataset_lib/__pycache__/datasets.cpython-312.pyc differ diff --git a/scenic/dataset_lib/bair_dataset.py b/scenic/dataset_lib/bair_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..05b837fc10e6480d0cefdc9c26af05367494b0a2 --- /dev/null +++ b/scenic/dataset_lib/bair_dataset.py @@ -0,0 +1,233 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the BAIR Robot dataset.""" + +import functools +from typing import Optional + +from absl import logging +from dmvr import processors +from flax import jax_utils +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf + + +def preprocess_train_example(example, + camera_name='image_main', + dtype=tf.float32, + zero_centering=True): + """Preprocesses the given video. + + Args: + example: dict; Example that has an 'image_main'. + camera_name: Name of the image sequence to use. + dtype: Tensorflow data type; Data type of the image. + zero_centering: If True, frames are normalized to values in [-1, 1]. + If False, values in [0, 1]. + + Returns: + dict; Example that has an 'inputs'. + """ + frames = example[camera_name] + frames = processors.normalize_image(frames, zero_centering, dtype) + return {'inputs': frames} + + +def augment_train_example(example, num_frames=30, stride=1): + """Augment the given video for training. + + Args: + example: dict; Example that has an 'inputs'. + num_frames: Number of frames per subclip. + stride: Temporal stride to sample frames. + + Returns: + dict; Example that has an 'inputs'. + """ + frames = example['inputs'] + frames = processors.sample_sequence(frames, num_frames, True, stride) + frames = processors.random_flip_left_right(frames) + return {'inputs': frames} + + +def preprocess_eval_example(example, + camera_name='image_main', + dtype=tf.float32, + num_frames=30, + stride=1, + num_clips=1, + zero_centering=True): + """Preprocesses the given video for evaluation. + + Args: + example: dict; Example that has an 'inputs'. + camera_name: Name of the image sequence to use. + dtype: Tensorflow data type; Data type of the image. + num_frames: Number of frames per subclip. + stride: Temporal stride to sample frames. + num_clips: Linearly spaced clips to sample from each example. + zero_centering: If True, frames are normalized to values in [-1, 1]. + If False, values in [0, 1]. + + Returns: + dict; Example that has an 'inputs'. + """ + frames = example[camera_name] + frames = processors.normalize_image(frames, zero_centering, dtype) + clips = processors.sample_linspace_sequence(frames, num_clips, num_frames, + stride) + return {'inputs': clips} + + +def postprocess_eval_batch(batch, num_frames=30): + """Postprocesses the given batch for evaluation. + + Reshapes the batch from [bs, num_clips * num_frames, ...] into + [bs * num_clips, num_frames, ...]. + + Args: + batch: dict; Batch that has an 'inputs'. + num_frames: Number of frames per subclip. + Returns: + dict; Example that has an 'inputs'. + """ + batch_clips = batch['inputs'] + batch_clips = tf.reshape(batch_clips, + (-1, num_frames, *batch_clips.shape[2:])) + return {'inputs': batch_clips} + + +@datasets.add_dataset('bair') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the BAIR train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + dtype = getattr(tf, dtype_str) + dataset_configs = dataset_configs or {} + camera_name = dataset_configs.get('camera_name', 'image_main') + num_frames = dataset_configs.get('num_frames', 30) + stride = dataset_configs.get('stride', 1) + zero_centering = dataset_configs.get('zero_centering', True) + num_eval_clips = dataset_configs.get('num_eval_clips', 1) + shuffle_buffer_size = dataset_configs.get('shuffle_buffer_size', None) + preprocess_train = functools.partial( + preprocess_train_example, + camera_name=camera_name, + dtype=dtype, + zero_centering=zero_centering) + augment_train = functools.partial( + augment_train_example, num_frames=num_frames, stride=stride) + preprocess_eval = functools.partial( + preprocess_eval_example, + camera_name=camera_name, + dtype=dtype, + num_frames=num_frames, + stride=stride, + num_clips=num_eval_clips, + zero_centering=zero_centering) + if num_eval_clips > 1: + postprocess_eval = functools.partial( + postprocess_eval_batch, num_frames=num_frames) + else: + postprocess_eval = None + + logging.info('Loading train split of the BAIR dataset.') + train_ds, _ = dataset_utils.load_split_from_tfds( + 'bair_robot_pushing_small', + batch_size, + split='train', + preprocess_example=preprocess_train, + augment_train_example=augment_train, + shuffle_buffer_size=shuffle_buffer_size, + shuffle_seed=shuffle_seed) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + logging.info('Loading test split of the BAIR dataset.') + eval_ds, _ = dataset_utils.load_split_from_tfds( + 'bair_robot_pushing_small', + eval_batch_size, + split='test', + preprocess_example=preprocess_eval, + postprocess_batch=postprocess_eval) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, + train=False, + batch_size=eval_batch_size * num_eval_clips) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + if dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + train_iter = jax_utils.prefetch_to_device( + train_iter, dataset_configs.get('prefetch_to_device')) + + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + eval_iter = map(shard_batches, eval_iter) + + input_shape = (-1, num_frames, 64, 64, 3) + num_train_examples = dataset_utils.get_num_examples( + 'bair_robot_pushing_small', 'train') + num_eval_examples = dataset_utils.get_num_examples('bair_robot_pushing_small', + 'test') * num_eval_clips + meta_data = { + 'num_classes': None, + 'input_shape': input_shape, + 'num_train_examples': num_train_examples, + 'num_eval_examples': num_eval_examples, + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': False, + } + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) diff --git a/scenic/dataset_lib/big_transfer/README.md b/scenic/dataset_lib/big_transfer/README.md new file mode 100644 index 0000000000000000000000000000000000000000..3ecd41c2b7758d2a22983df8e27a1abddeabaac6 --- /dev/null +++ b/scenic/dataset_lib/big_transfer/README.md @@ -0,0 +1,37 @@ +# Input pipeline from BigTransfer + +The code for preprocessing ops in this directory is ported to Scenic from +the implementation of the input pipeline in [Task Adaptation Benchmark](https://arxiv.org/pdf/1910.04867.pdf) +which was also used in the [BigTransfer](https://arxiv.org/abs/1912.11370) +paper. This code is maintained, and was originally implemented, by +[lbeyer@google.com](mailto:lbeyer@google.com) and +[akolesnikov@google.com](mailto:akolesnikov@google.com). + +This code allows the user to specify composite preprocessing functions using +strings. For instance, the following string: +`inception_crop|resize(256)|random_crop(240)|flip_lr|-1_to_1` will be +transformed to a function that makes inception-style crop of the input image, +resizes it to 256x256 size, makes a random crop of size 240x240, flips image +horizontally (with 50% chance) and, finally, transforms it to a range [-1, 1]. + +If you use this pipeline (i.e., Scenic `bit` datasets), please make sure to cite +the following papers: + +``` +@article{zhai2019large, + title={A large-scale study of representation learning with the visual task adaptation benchmark}, + author={Zhai, Xiaohua and Puigcerver, Joan and Kolesnikov, Alexander and Ruyssen, Pierre and Riquelme, Carlos and Lucic, Mario and Djolonga, Josip and Pinto, Andre Susano and Neumann, Maxim and Dosovitskiy, Alexey and others}, + journal={arXiv preprint arXiv:1910.04867}, + year={2019} +} +``` +and +``` +@inproceedings{kolesnikov2020big, + title={Big transfer (bit): General visual representation learning}, + author={Kolesnikov, Alexander and Beyer, Lucas and Zhai, Xiaohua and Puigcerver, Joan and Yung, Jessica and Gelly, Sylvain and Houlsby, Neil}, + booktitle={Computer Vision--ECCV 2020: 16th European Conference, Glasgow, UK, August 23--28, 2020, Proceedings, Part V 16}, + pages={491--507}, + year={2020}, +} +``` diff --git a/scenic/dataset_lib/big_transfer/__init__.py b/scenic/dataset_lib/big_transfer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/dataset_lib/big_transfer/bit.py b/scenic/dataset_lib/big_transfer/bit.py new file mode 100644 index 0000000000000000000000000000000000000000..6768bd32d7b8c1b25324bdbb84afb52ddd32cab0 --- /dev/null +++ b/scenic/dataset_lib/big_transfer/bit.py @@ -0,0 +1,218 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Scenic wrapper around BigTransfer dataset loaders.""" + +import functools +from typing import Optional +from absl import logging +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib.big_transfer import builder +# Unused imports are to register preprocessing ops: +from scenic.dataset_lib.big_transfer.preprocessing import vtab_ops # pylint: disable=unused-import + + +def tf_to_numpy(batch): + """Convert a input batch from tf Tensors to numpy arrays. + + Args: + batch: dict; A dictionary tha has items in a batch: image and labels. + + Returns: + Numpy arrays of the given tf Tensors. + """ + # Transforms x into read-only numpy array without copy if possible, see: + # https://github.com/tensorflow/tensorflow/issues/33254#issuecomment-542379165 + convert_data = lambda x: np.asarray(memoryview(x)) + return jax.tree_util.tree_map(convert_data, batch) + + +@datasets.add_dataset('bit') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None, + devices: Optional[np.ndarray] = None): + """Returns generators for train and validation sets for a specified dataset. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. Not used. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + devices: Numpy array of Jax devices with mesh_shape which is used for + sharding the data. Optional, and required for jit-based pipelines. Should + not be used for pmap-based data parallelism. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + assert dataset_configs is not None + logging.info('Loading train split of the %s' + 'from bit dataset.', dataset_configs.dataset) + target_is_onehot = 'onehot' in dataset_configs.pp_train + + def pp_fn(x, how): + pp = builder.get_preprocess_fn( + how, remove_tpu_dtypes=dataset_configs.get('remove_tpu_dtypes', True)) + example = pp(x) + # to scenic format + return_dict = {'inputs': example['image'], 'label': example['labels']} + if dataset_configs.dataset == 'imagenet2012' and 'file_name' in example: + return_dict['file_name'] = example['file_name'] + return return_dict + + # E.g. for testing with TAP. + shuffle_buffer_size = (1000 if num_shards == 1 else + dataset_configs.shuffle_buffer_size) + + # Whether to cache training data. None: no caching. 'loaded': + # cache right after loading a datapoint. 'batched': cache whole batches. + cache = dataset_configs.get('cache', 'loaded') + skip_decode = dataset_configs.get('skip_decode', ('image',)) + if isinstance(skip_decode, ml_collections.ConfigDict): + skip_decode = skip_decode.to_dict() + train_ds = dataset_utils.get_data( + dataset=dataset_configs.dataset, + split=dataset_configs.train_split, + data_dir=dataset_configs.get('dataset_dir'), + batch_size=batch_size, + preprocess_fn=functools.partial(pp_fn, how=dataset_configs.pp_train), + shuffle_buffer_size=shuffle_buffer_size, + prefetch=dataset_configs.get('prefetch_to_host', 2), + cache=cache, + ignore_errors=True, + skip_decode=skip_decode) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + assert shuffle_buffer_size is not None + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + n_train_ex = dataset_utils.get_num_examples( + dataset_configs.dataset, + dataset_configs.train_split, + data_dir=dataset_configs.get('dataset_dir')) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + if devices is None: + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + prefetch_fn = jax_utils.prefetch_to_device + else: + shard_batches = functools.partial(dataset_utils.shard_jit, + global_devices=devices) + prefetch_fn = dataset_utils.prefetch_iterator + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + if dataset_configs.get('prefetch_to_device'): + train_iter = prefetch_fn(train_iter, dataset_configs.prefetch_to_device) + + logging.info('Loading validation split of the %s' + 'from bit dataset.', dataset_configs.dataset) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + + def _get_eval_iter(dataset, split, pp_eval, dataset_dir): + val_ds = dataset_utils.get_data( + dataset=dataset, + split=split, + data_dir=dataset_dir, + batch_size=eval_batch_size, + preprocess_fn=functools.partial(pp_fn, how=pp_eval), + cache='batched', + repeat_after_batching=True, + drop_remainder=False, + skip_decode=skip_decode) + + valid_iter = iter(val_ds) + valid_iter = map(tf_to_numpy, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + valid_iter = map(shard_batches, valid_iter) + if dataset_configs.prefetch_to_device: + valid_iter = prefetch_fn(valid_iter, dataset_configs.prefetch_to_device) + + return valid_iter + + def _get_num_eval_examples(dataset, split, data_dir): + return dataset_utils.get_num_examples(dataset, split, data_dir) + + if isinstance(dataset_configs.val_split, str): + valid_iter = _get_eval_iter(dataset_configs.dataset, + dataset_configs.val_split, + dataset_configs.pp_eval, + dataset_configs.get('dataset_dir')) + n_eval_ex = _get_num_eval_examples( + dataset_configs.dataset, + dataset_configs.val_split, + data_dir=dataset_configs.get('dataset_dir')) + else: + valid_iter, n_eval_ex = {}, {} + for eval_spec in dataset_configs.val_split: + if len(eval_spec) == 4: + name, dataset, split, pp_eval = eval_spec + dataset_dir = dataset_configs.get('dataset_dir') + elif len(eval_spec) == 5: + name, dataset, split, pp_eval, dataset_dir = eval_spec + else: + raise ValueError(f'Unknown eval_spec {eval_spec}') + valid_iter[name] = _get_eval_iter(dataset, split, pp_eval, dataset_dir) + n_eval_ex[name] = _get_num_eval_examples( + dataset, split, data_dir=dataset_dir) + + input_shape = (-1,) + tuple(train_ds.element_spec['inputs'].shape[1:]) + + num_classes = dataset_configs.get('num_classes') + if num_classes is None: + logging.warning('For the BiT datasets, if the task is classification, ' + '`num_classes` should be specified in the config.') + + meta_data = { + 'num_classes': num_classes, + 'input_shape': input_shape, + 'num_train_examples': n_train_ex, + 'num_eval_examples': n_eval_ex, + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': target_is_onehot, + } + if dataset_configs.get('extra_meta_data'): + for k, v in dataset_configs.extra_meta_data.items(): + meta_data[k] = v + return dataset_utils.Dataset(train_iter, valid_iter, None, meta_data) diff --git a/scenic/dataset_lib/big_transfer/builder.py b/scenic/dataset_lib/big_transfer/builder.py new file mode 100644 index 0000000000000000000000000000000000000000..421cf8546cfafb277d23794a7278277f078384fe --- /dev/null +++ b/scenic/dataset_lib/big_transfer/builder.py @@ -0,0 +1,95 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Image preprocessing library. + +""" + +from absl import logging +from scenic.dataset_lib.big_transfer import registry +from scenic.dataset_lib.big_transfer.preprocessing import ops as pp_ops +import tensorflow.compat.v1 as tf + +TPU_SUPPORTED_DTYPES = [ + tf.bool, tf.int32, tf.int64, tf.bfloat16, tf.float32, tf.complex64, + tf.uint32, +] + + +def get_preprocess_fn(pp_pipeline, remove_tpu_dtypes=True, log_data=True): + """Transform an input string into the preprocessing function. + + The minilanguage is as follows: + + fn1|fn2(arg, arg2,...)|... + + And describes the successive application of the various `fn`s to the input, + where each function can optionally have one or more arguments, which are + either positional or key/value, as dictated by the `fn`. + + The output preprocessing function expects a dictinary as input. This + dictionary should have a key "image" that corresponds to a 3D tensor + (height x width x channel). + + Args: + pp_pipeline: A string describing the pre-processing pipeline. If empty or + None, no preprocessing will be executed, but removing unsupported TPU + dtypes will still be called if `remove_tpu_dtypes` is True. + remove_tpu_dtypes: Whether to remove TPU incompatible types of data. + log_data: Whether to log the data before and after preprocessing. Note: + Remember set to `False` in eager mode to avoid too many log messages. + + Returns: + preprocessing function. + + Raises: + ValueError: if preprocessing function name is unknown + """ + + ops = [] + if pp_pipeline: + for fn_name in pp_pipeline.split("|"): + try: + ops.append(registry.Registry.lookup(f"preprocess_ops.{fn_name}")()) + except SyntaxError as err: + raise ValueError(f"Syntax error on: {fn_name}") from err + + def _preprocess_fn(data): + """The preprocessing function that is returned.""" + + # Validate input + if not isinstance(data, dict): + raise ValueError("Argument `data` must be a dictionary, " + "not %s" % str(type(data))) + + # Apply all the individual steps in sequence. + if log_data: + logging.info("Data before pre-processing:\n%s", data) + for op in ops: + data = op(data) + + if remove_tpu_dtypes: + # Remove data that are TPU-incompatible (e.g. filename of type tf.string). + for key in list(data.keys()): + if data[key].dtype not in TPU_SUPPORTED_DTYPES: + tf.logging.warning( + "Removing key %s from data dict because its dtype %s is not in " + " the supported dtypes: %s", key, data[key].dtype, + TPU_SUPPORTED_DTYPES) + data = pp_ops.get_delete_field(key)(data) + if log_data: + logging.info("Data after pre-processing:\n%s", data) + return data + + return _preprocess_fn diff --git a/scenic/dataset_lib/big_transfer/preprocessing/__init__.py b/scenic/dataset_lib/big_transfer/preprocessing/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/dataset_lib/big_transfer/preprocessing/autoaugment.py b/scenic/dataset_lib/big_transfer/preprocessing/autoaugment.py new file mode 100644 index 0000000000000000000000000000000000000000..6d2cbe2f0f9dd3e4ab72fd0c7cd78df1471e9e02 --- /dev/null +++ b/scenic/dataset_lib/big_transfer/preprocessing/autoaugment.py @@ -0,0 +1,726 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""AutoAugment and RandAugment policies for enhanced image preprocessing. + +AutoAugment Reference: https://arxiv.org/abs/1805.09501 +RandAugment Reference: https://arxiv.org/abs/1909.13719 + +This code is forked from +https://github.com/tensorflow/tpu/blob/11d0db15cf1c3667f6e36fecffa111399e008acd/models/official/efficientnet/autoaugment.py +https://github.com/google-research/big_vision/blob/main/big_vision/pp/autoaugment.py +""" + +import dataclasses +import inspect +import math +import tensorflow.compat.v1 as tf +from tensorflow_addons import image as contrib_image + +# This signifies the max integer that the controller RNN could predict for the +# augmentation scheme. +_MAX_LEVEL = 10. + + +@dataclasses.dataclass +class HParams: + """Parameters for AutoAugment and RandAugment.""" + cutout_const: int + translate_const: int + + +def policy_v0(): + """Autoaugment policy that was used in AutoAugment Paper.""" + # Each tuple is an augmentation operation of the form + # (operation, probability, magnitude). Each element in policy is a + # sub-policy that will be applied sequentially on the image. + policy = [ + [('Equalize', 0.8, 1), ('ShearY', 0.8, 4)], + [('Color', 0.4, 9), ('Equalize', 0.6, 3)], + [('Color', 0.4, 1), ('Rotate', 0.6, 8)], + [('Solarize', 0.8, 3), ('Equalize', 0.4, 7)], + [('Solarize', 0.4, 2), ('Solarize', 0.6, 2)], + [('Color', 0.2, 0), ('Equalize', 0.8, 8)], + [('Equalize', 0.4, 8), ('SolarizeAdd', 0.8, 3)], + [('ShearX', 0.2, 9), ('Rotate', 0.6, 8)], + [('Color', 0.6, 1), ('Equalize', 1.0, 2)], + [('Invert', 0.4, 9), ('Rotate', 0.6, 0)], + [('Equalize', 1.0, 9), ('ShearY', 0.6, 3)], + [('Color', 0.4, 7), ('Equalize', 0.6, 0)], + [('Posterize', 0.4, 6), ('AutoContrast', 0.4, 7)], + [('Solarize', 0.6, 8), ('Color', 0.6, 9)], + [('Solarize', 0.2, 4), ('Rotate', 0.8, 9)], + [('Rotate', 1.0, 7), ('TranslateY', 0.8, 9)], + [('ShearX', 0.0, 0), ('Solarize', 0.8, 4)], + [('ShearY', 0.8, 0), ('Color', 0.6, 4)], + [('Color', 1.0, 0), ('Rotate', 0.6, 2)], + [('Equalize', 0.8, 4), ('Equalize', 0.0, 8)], + [('Equalize', 1.0, 4), ('AutoContrast', 0.6, 2)], + [('ShearY', 0.4, 7), ('SolarizeAdd', 0.6, 7)], + [('Posterize', 0.8, 2), ('Solarize', 0.6, 10)], + [('Solarize', 0.6, 8), ('Equalize', 0.6, 1)], + [('Color', 0.8, 6), ('Rotate', 0.4, 5)], + ] + return policy + + +def policy_vtest(): + """Autoaugment test policy for debugging.""" + # Each tuple is an augmentation operation of the form + # (operation, probability, magnitude). Each element in policy is a + # sub-policy that will be applied sequentially on the image. + policy = [ + [('TranslateX', 1.0, 4), ('Equalize', 1.0, 10)], + ] + return policy + + +def blend(image1, image2, factor): + """Blend image1 and image2 using 'factor'. + + Factor can be above 0.0. A value of 0.0 means only image1 is used. + A value of 1.0 means only image2 is used. A value between 0.0 and + 1.0 means we linearly interpolate the pixel values between the two + images. A value greater than 1.0 "extrapolates" the difference + between the two pixel values, and we clip the results to values + between 0 and 255. + Args: + image1: An image Tensor of type uint8. + image2: An image Tensor of type uint8. + factor: A floating point value above 0.0. + + Returns: + A blended image Tensor of type uint8. + """ + if factor == 0.0: + return tf.convert_to_tensor(image1) + if factor == 1.0: + return tf.convert_to_tensor(image2) + + image1 = tf.to_float(image1) + image2 = tf.to_float(image2) + + difference = image2 - image1 + scaled = factor * difference + + # Do addition in float. + temp = tf.to_float(image1) + scaled + + # Interpolate + if factor > 0.0 and factor < 1.0: + # Interpolation means we always stay within 0 and 255. + return tf.cast(temp, tf.uint8) + + # Extrapolate: + # + # We need to clip and then cast. + return tf.cast(tf.clip_by_value(temp, 0.0, 255.0), tf.uint8) + + +def cutout(image, pad_size, replace=0): + """Apply cutout (https://arxiv.org/abs/1708.04552) to image. + + This operation applies a (2*pad_size x 2*pad_size) mask of zeros to + a random location within `img`. The pixel values filled in will be of the + value `replace`. The located where the mask will be applied is randomly + chosen uniformly over the whole image. + Args: + image: An image Tensor of type uint8. + pad_size: Specifies how big the zero mask that will be generated is that is + applied to the image. The mask will be of size (2*pad_size x 2*pad_size). + replace: What pixel value to fill in the image in the area that has the + cutout mask applied to it. + + Returns: + An image Tensor that is of type uint8. + """ + image_height = tf.shape(image)[0] + image_width = tf.shape(image)[1] + + # Sample the center location in the image where the zero mask will be applied. + cutout_center_height = tf.random_uniform( + shape=[], minval=0, maxval=image_height, dtype=tf.int32) + + cutout_center_width = tf.random_uniform( + shape=[], minval=0, maxval=image_width, dtype=tf.int32) + + lower_pad = tf.maximum(0, cutout_center_height - pad_size) + upper_pad = tf.maximum(0, image_height - cutout_center_height - pad_size) + left_pad = tf.maximum(0, cutout_center_width - pad_size) + right_pad = tf.maximum(0, image_width - cutout_center_width - pad_size) + + cutout_shape = [ + image_height - (lower_pad + upper_pad), + image_width - (left_pad + right_pad) + ] + padding_dims = [[lower_pad, upper_pad], [left_pad, right_pad]] + mask = tf.pad( + tf.zeros(cutout_shape, dtype=image.dtype), + padding_dims, + constant_values=1) + mask = tf.expand_dims(mask, -1) + mask = tf.tile(mask, [1, 1, 3]) + image = tf.where( + tf.equal(mask, 0), + tf.ones_like(image, dtype=image.dtype) * replace, image) + return image + + +def solarize(image, threshold=128): + # For each pixel in the image, select the pixel + # if the value is less than the threshold. + # Otherwise, subtract 255 from the pixel. + return tf.where(image < threshold, image, 255 - image) + + +def solarize_add(image, addition=0, threshold=128): + # For each pixel in the image less than threshold + # we add 'addition' amount to it and then clip the + # pixel value to be between 0 and 255. The value + # of 'addition' is between -128 and 128. + added_image = tf.cast(image, tf.int64) + addition + added_image = tf.cast(tf.clip_by_value(added_image, 0, 255), tf.uint8) + return tf.where(image < threshold, added_image, image) + + +def color(image, factor): + """Equivalent of PIL Color.""" + degenerate = tf.image.grayscale_to_rgb(tf.image.rgb_to_grayscale(image)) + return blend(degenerate, image, factor) + + +def contrast(image, factor): + """Equivalent of PIL Contrast.""" + degenerate = tf.image.rgb_to_grayscale(image) + # Cast before calling tf.histogram. + degenerate = tf.cast(degenerate, tf.int32) + + # Compute the grayscale histogram, then compute the mean pixel value, + # and create a constant image size of that value. Use that as the + # blending degenerate target of the original image. + hist = tf.histogram_fixed_width(degenerate, [0, 255], nbins=256) + mean = tf.reduce_sum(tf.cast(hist, tf.float32)) / 256.0 + degenerate = tf.ones_like(degenerate, dtype=tf.float32) * mean + degenerate = tf.clip_by_value(degenerate, 0.0, 255.0) + degenerate = tf.image.grayscale_to_rgb(tf.cast(degenerate, tf.uint8)) + return blend(degenerate, image, factor) + + +def brightness(image, factor): + """Equivalent of PIL Brightness.""" + degenerate = tf.zeros_like(image) + return blend(degenerate, image, factor) + + +def posterize(image, bits): + """Equivalent of PIL Posterize.""" + shift = 8 - bits + return tf.bitwise.left_shift(tf.bitwise.right_shift(image, shift), shift) + + +def rotate(image, degrees, replace): + """Rotates the image by degrees either clockwise or counterclockwise. + + Args: + image: An image Tensor of type uint8. + degrees: Float, a scalar angle in degrees to rotate all images by. If + degrees is positive the image will be rotated clockwise otherwise it will + be rotated counterclockwise. + replace: A one or three value 1D tensor to fill empty pixels caused by the + rotate operation. + + Returns: + The rotated version of image. + """ + # Convert from degrees to radians. + degrees_to_radians = math.pi / 180.0 + radians = degrees * degrees_to_radians + + # In practice, we should randomize the rotation degrees by flipping + # it negatively half the time, but that's done on 'degrees' outside + # of the function. + image = contrib_image.rotate(wrap(image), radians) + return unwrap(image, replace) + + +def translate_x(image, pixels, replace): + """Equivalent of PIL Translate in X dimension.""" + image = contrib_image.translate(wrap(image), [-pixels, 0]) + return unwrap(image, replace) + + +def translate_y(image, pixels, replace): + """Equivalent of PIL Translate in Y dimension.""" + image = contrib_image.translate(wrap(image), [0, -pixels]) + return unwrap(image, replace) + + +def shear_x(image, level, replace): + """Equivalent of PIL Shearing in X dimension.""" + # Shear parallel to x axis is a projective transform + # with a matrix form of: + # [1 level + # 0 1]. + image = contrib_image.transform( + wrap(image), [1., level, 0., 0., 1., 0., 0., 0.]) + return unwrap(image, replace) + + +def shear_y(image, level, replace): + """Equivalent of PIL Shearing in Y dimension.""" + # Shear parallel to y axis is a projective transform + # with a matrix form of: + # [1 0 + # level 1]. + image = contrib_image.transform( + wrap(image), [1., 0., 0., level, 1., 0., 0., 0.]) + return unwrap(image, replace) + + +def autocontrast(image): + """Implements Autocontrast function from PIL using TF ops. + + Args: + image: A 3D uint8 tensor. + + Returns: + The image after it has had autocontrast applied to it and will be of type + uint8. + """ + + def scale_channel(image): + """Scale the 2D image using the autocontrast rule.""" + # A possibly cheaper version can be done using cumsum/unique_with_counts + # over the histogram values, rather than iterating over the entire image. + # to compute mins and maxes. + lo = tf.to_float(tf.reduce_min(image)) + hi = tf.to_float(tf.reduce_max(image)) + + # Scale the image, making the lowest value 0 and the highest value 255. + def scale_values(im): + scale = 255.0 / (hi - lo) + offset = -lo * scale + im = tf.to_float(im) * scale + offset + im = tf.clip_by_value(im, 0.0, 255.0) + return tf.cast(im, tf.uint8) + + result = tf.cond(hi > lo, lambda: scale_values(image), lambda: image) + return result + + # Assumes RGB for now. Scales each channel independently + # and then stacks the result. + s1 = scale_channel(image[:, :, 0]) + s2 = scale_channel(image[:, :, 1]) + s3 = scale_channel(image[:, :, 2]) + image = tf.stack([s1, s2, s3], 2) + return image + + +def sharpness(image, factor): + """Implements Sharpness function from PIL using TF ops.""" + orig_image = image + image = tf.cast(image, tf.float32) + # Make image 4D for conv operation. + image = tf.expand_dims(image, 0) + # SMOOTH PIL Kernel. + kernel = tf.constant([[1, 1, 1], [1, 5, 1], [1, 1, 1]], + dtype=tf.float32, + shape=[3, 3, 1, 1]) / 13. + # Tile across channel dimension. + kernel = tf.tile(kernel, [1, 1, 3, 1]) + strides = [1, 1, 1, 1] + with tf.device('/cpu:0'): + # Some augmentation that uses depth-wise conv will cause crashing when + # training on GPU. See (b/156242594) for details. + degenerate = tf.nn.depthwise_conv2d( + image, kernel, strides, padding='VALID', rate=[1, 1]) + degenerate = tf.clip_by_value(degenerate, 0.0, 255.0) + degenerate = tf.squeeze(tf.cast(degenerate, tf.uint8), [0]) + + # For the borders of the resulting image, fill in the values of the + # original image. + mask = tf.ones_like(degenerate) + padded_mask = tf.pad(mask, [[1, 1], [1, 1], [0, 0]]) + padded_degenerate = tf.pad(degenerate, [[1, 1], [1, 1], [0, 0]]) + result = tf.where(tf.equal(padded_mask, 1), padded_degenerate, orig_image) + + # Blend the final result. + return blend(result, orig_image, factor) + + +def equalize(image): + """Implements Equalize function from PIL using TF ops.""" + + def scale_channel(im, c): + """Scale the data in the channel to implement equalize.""" + im = tf.cast(im[:, :, c], tf.int32) + # Compute the histogram of the image channel. + histo = tf.histogram_fixed_width(im, [0, 255], nbins=256) + + # For the purposes of computing the step, filter out the nonzeros. + nonzero = tf.where(tf.not_equal(histo, 0)) + nonzero_histo = tf.reshape(tf.gather(histo, nonzero), [-1]) + step = (tf.reduce_sum(nonzero_histo) - nonzero_histo[-1]) // 255 + + def build_lut(histo, step): + # Compute the cumulative sum, shifting by step // 2 + # and then normalization by step. + lut = (tf.cumsum(histo) + (step // 2)) // step + # Shift lut, prepending with 0. + lut = tf.concat([[0], lut[:-1]], 0) + # Clip the counts to be in range. This is done + # in the C code for image.point. + return tf.clip_by_value(lut, 0, 255) + + # If step is zero, return the original image. Otherwise, build + # lut from the full histogram and step and then index from it. + result = tf.cond( + tf.equal(step, 0), lambda: im, + lambda: tf.gather(build_lut(histo, step), im)) + + return tf.cast(result, tf.uint8) + + # Assumes RGB for now. Scales each channel independently + # and then stacks the result. + s1 = scale_channel(image, 0) + s2 = scale_channel(image, 1) + s3 = scale_channel(image, 2) + image = tf.stack([s1, s2, s3], 2) + return image + + +def invert(image): + """Inverts the image pixels.""" + image = tf.convert_to_tensor(image) + return 255 - image + + +def wrap(image): + """Returns 'image' with an extra channel set to all 1s.""" + shape = tf.shape(image) + extended_channel = tf.ones([shape[0], shape[1], 1], image.dtype) + extended = tf.concat([image, extended_channel], 2) + return extended + + +def unwrap(image, replace): + """Unwraps an image produced by wrap. + + Where there is a 0 in the last channel for every spatial position, + the rest of the three channels in that spatial dimension are grayed + (set to 128). Operations like translate and shear on a wrapped + Tensor will leave 0s in empty locations. Some transformations look + at the intensity of values to do preprocessing, and we want these + empty pixels to assume the 'average' value, rather than pure black. + Args: + image: A 3D Image Tensor with 4 channels. + replace: A one or three value 1D tensor to fill empty pixels. + + Returns: + image: A 3D image Tensor with 3 channels. + """ + image_shape = tf.shape(image) + # Flatten the spatial dimensions. + flattened_image = tf.reshape(image, [-1, image_shape[2]]) + + # Find all pixels where the last channel is zero. + alpha_channel = flattened_image[:, 3] + + replace = tf.concat([replace, tf.ones([1], image.dtype)], 0) + + # Where they are zero, fill them in with 'replace'. + flattened_image = tf.where( + tf.equal(alpha_channel, 0), + tf.ones_like(flattened_image, dtype=image.dtype) * replace, + flattened_image) + + image = tf.reshape(flattened_image, image_shape) + image = tf.slice(image, [0, 0, 0], [image_shape[0], image_shape[1], 3]) + return image + + +NAME_TO_FUNC = { + 'AutoContrast': autocontrast, + 'Equalize': equalize, + 'Invert': invert, + 'Rotate': rotate, + 'Posterize': posterize, + 'Solarize': solarize, + 'SolarizeAdd': solarize_add, + 'Color': color, + 'Contrast': contrast, + 'Brightness': brightness, + 'Sharpness': sharpness, + 'ShearX': shear_x, + 'ShearY': shear_y, + 'TranslateX': translate_x, + 'TranslateY': translate_y, + 'Cutout': cutout, +} + + +def _randomly_negate_tensor(tensor): + """With 50% prob turn the tensor negative.""" + should_flip = tf.cast(tf.floor(tf.random_uniform([]) + 0.5), tf.bool) + final_tensor = tf.cond(should_flip, lambda: tensor, lambda: -tensor) + return final_tensor + + +def _rotate_level_to_arg(level): + level = (level / _MAX_LEVEL) * 30. + level = _randomly_negate_tensor(level) + return (level,) + + +def _shrink_level_to_arg(level): + """Converts level to ratio by which we shrink the image content.""" + if level == 0: + return (1.0,) # if level is zero, do not shrink the image + # Maximum shrinking ratio is 2.9. + level = 2. / (_MAX_LEVEL / level) + 0.9 + return (level,) + + +def _enhance_level_to_arg(level): + return ((level / _MAX_LEVEL) * 1.8 + 0.1,) + + +def _shear_level_to_arg(level): + level = (level / _MAX_LEVEL) * 0.3 + # Flip level to negative with 50% chance. + level = _randomly_negate_tensor(level) + return (level,) + + +def _translate_level_to_arg(level, translate_const): + level = (level / _MAX_LEVEL) * float(translate_const) + # Flip level to negative with 50% chance. + level = _randomly_negate_tensor(level) + return (level,) + + +def level_to_arg(hparams): + return { + 'AutoContrast': + lambda level: (), + 'Equalize': + lambda level: (), + 'Invert': + lambda level: (), + 'Rotate': + _rotate_level_to_arg, + 'Posterize': + lambda level: (int((level / _MAX_LEVEL) * 4),), + 'Solarize': + lambda level: (int((level / _MAX_LEVEL) * 256),), + 'SolarizeAdd': + lambda level: (int((level / _MAX_LEVEL) * 110),), + 'Color': + _enhance_level_to_arg, + 'Contrast': + _enhance_level_to_arg, + 'Brightness': + _enhance_level_to_arg, + 'Sharpness': + _enhance_level_to_arg, + 'ShearX': + _shear_level_to_arg, + 'ShearY': + _shear_level_to_arg, + 'Cutout': + lambda level: (int((level / _MAX_LEVEL) * hparams.cutout_const),), + # pylint:disable=g-long-lambda + 'TranslateX': + lambda level: _translate_level_to_arg(level, hparams.translate_const), + 'TranslateY': + lambda level: _translate_level_to_arg(level, hparams.translate_const), + # pylint:enable=g-long-lambda + } + + +def _parse_policy_info(name, prob, level, replace_value, augmentation_hparams): + """Return the function that corresponds to `name` and update `level` param.""" + func = NAME_TO_FUNC[name] + args = level_to_arg(augmentation_hparams)[name](level) + + # Check to see if prob is passed into function. This is used for operations + # where we alter bboxes independently. + # pytype:disable=wrong-arg-types + if 'prob' in inspect.getfullargspec(func).args: + args = tuple([prob] + list(args)) + # pytype:enable=wrong-arg-types + + # Add in replace arg if it is required for the function that is being called. + # pytype:disable=wrong-arg-types + if 'replace' in inspect.getfullargspec(func).args: + # Make sure replace is the final argument + assert 'replace' == inspect.getfullargspec(func).args[-1] + args = tuple(list(args) + [replace_value]) + # pytype:enable=wrong-arg-types + + return (func, prob, args) + + +def _apply_func_with_prob(func, image, args, prob): + """Apply `func` to image w/ `args` as input with probability `prob`.""" + assert isinstance(args, tuple) + + # If prob is a function argument, then this randomness is being handled + # inside the function, so make sure it is always called. + # pytype:disable=wrong-arg-types + if 'prob' in inspect.getfullargspec(func).args: + prob = 1.0 + # pytype:enable=wrong-arg-types + + # Apply the function with probability `prob`. + should_apply_op = tf.cast( + tf.floor(tf.random_uniform([], dtype=tf.float32) + prob), tf.bool) + augmented_image = tf.cond(should_apply_op, lambda: func(image, *args), + lambda: image) + return augmented_image + + +def select_and_apply_random_policy(policies, image): + """Select a random policy from `policies` and apply it to `image`.""" + policy_to_select = tf.random_uniform([], maxval=len(policies), dtype=tf.int32) + # Note that using tf.case instead of tf.conds would result in significantly + # larger graphs and would even break export for some larger policies. + for (i, policy) in enumerate(policies): + image = tf.cond( + tf.equal(i, policy_to_select), + lambda selected_policy=policy: selected_policy(image), + lambda: image) + return image + + +def build_and_apply_nas_policy(policies, image, augmentation_hparams): + """Build a policy from the given policies passed in and apply to image. + + Args: + policies: list of lists of tuples in the form `(func, prob, level)`, `func` + is a string name of the augmentation function, `prob` is the probability + of applying the `func` operation, `level` is the input argument for + `func`. + image: tf.Tensor that the resulting policy will be applied to. + augmentation_hparams: Hparams associated with the NAS learned policy. + + Returns: + A version of image that now has data augmentation applied to it based on + the `policies` pass into the function. + """ + replace_value = [128, 128, 128] + + # func is the string name of the augmentation function, prob is the + # probability of applying the operation and level is the parameter associated + # with the tf op. + + # tf_policies are functions that take in an image and return an augmented + # image. + tf_policies = [] + for policy in policies: + tf_policy = [] + # Link string name to the correct python function and make sure the correct + # argument is passed into that function. + for policy_info in policy: + policy_info = list(policy_info) + [replace_value, augmentation_hparams] + + tf_policy.append(_parse_policy_info(*policy_info)) + # Now build the tf policy that will apply the augmentation procedue + # on image. + def make_final_policy(tf_policy_): + + def final_policy(image_): + for func, prob, args in tf_policy_: + image_ = _apply_func_with_prob(func, image_, args, prob) + return image_ + + return final_policy + + tf_policies.append(make_final_policy(tf_policy)) + + augmented_image = select_and_apply_random_policy(tf_policies, image) + return augmented_image + + +def distort_image_with_autoaugment(image, augmentation_name): + """Applies the AutoAugment policy to `image`. + + AutoAugment is from the paper: https://arxiv.org/abs/1805.09501. + Args: + image: `Tensor` of shape [height, width, 3] representing an image. + augmentation_name: The name of the AutoAugment policy to use. The available + options are `v0` and `test`. `v0` is the policy used for all of the + results in the paper and was found to achieve the best results on the COCO + dataset. `v1`, `v2` and `v3` are additional good policies found on the + COCO dataset that have slight variation in what operations were used + during the search procedure along with how many operations are applied in + parallel to a single image (2 vs 3). + + Returns: + A tuple containing the augmented versions of `image`. + """ + available_policies = {'v0': policy_v0, 'test': policy_vtest} + if augmentation_name not in available_policies: + raise ValueError('Invalid augmentation_name: {}'.format(augmentation_name)) + + policy = available_policies[augmentation_name]() + # Hparams that will be used for AutoAugment. + augmentation_hparams = HParams(cutout_const=100, translate_const=250) + + return build_and_apply_nas_policy(policy, image, augmentation_hparams) + + +def distort_image_with_randaugment(image, num_layers, magnitude): + """Applies the RandAugment policy to `image`. + + RandAugment is from the paper https://arxiv.org/abs/1909.13719, + Args: + image: `Tensor` of shape [height, width, 3] representing an image. + num_layers: Integer, the number of augmentation transformations to apply + sequentially to an image. Represented as (N) in the paper. Usually best + values will be in the range [1, 3]. + magnitude: Integer, shared magnitude across all augmentation operations. + Represented as (M) in the paper. Usually best values are in the range [5, + 30]. + + Returns: + The augmented version of `image`. + """ + replace_value = [128] * 3 + tf.logging.info('Using RandAug.') + augmentation_hparams = HParams(cutout_const=40, translate_const=100) + available_ops = [ + 'AutoContrast', 'Equalize', 'Invert', 'Rotate', 'Posterize', 'Solarize', + 'Color', 'Contrast', 'Brightness', 'Sharpness', 'ShearX', 'ShearY', + 'TranslateX', 'TranslateY', 'Cutout', 'SolarizeAdd' + ] + + for layer_num in range(num_layers): + op_to_select = tf.random_uniform([], + maxval=len(available_ops), + dtype=tf.int32) + random_magnitude = float(magnitude) + with tf.name_scope('randaug_layer_{}'.format(layer_num)): + for (i, op_name) in enumerate(available_ops): + prob = tf.random_uniform([], minval=0.2, maxval=0.8, dtype=tf.float32) + func, _, args = _parse_policy_info(op_name, prob, random_magnitude, + replace_value, augmentation_hparams) + image = tf.cond( + tf.equal(i, op_to_select), + # pylint:disable=g-long-lambda + lambda selected_func=func, selected_args=args: selected_func( + image, *selected_args), + # pylint:enable=g-long-lambda + lambda: image) + return image diff --git a/scenic/dataset_lib/big_transfer/preprocessing/ops.py b/scenic/dataset_lib/big_transfer/preprocessing/ops.py new file mode 100644 index 0000000000000000000000000000000000000000..7f354b2f3794aa436502715799364351d922a86a --- /dev/null +++ b/scenic/dataset_lib/big_transfer/preprocessing/ops.py @@ -0,0 +1,835 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of data preprocessing ops. + +All preprocessing ops should return a data processing functors. A data +is represented as a dictionary of tensors, where field "image" is reserved +for 3D images (height x width x channels). The functors output dictionary with +field "image" being modified. Potentially, other fields can also be modified +or added. +""" +from typing import Optional, Tuple +import numpy as np + +from scenic.dataset_lib.big_transfer.preprocessing import autoaugment +from scenic.dataset_lib.big_transfer.preprocessing import utils +from scenic.dataset_lib.big_transfer.registry import Registry +import tensorflow.compat.v1 as tf +import tensorflow.compat.v2 as tf2 + +from tensorflow_addons import image as image_utils + + +@Registry.register("preprocess_ops.color_distort", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_color_distortion(): + """Applies random brigthness/saturation/hue/contrast transformations.""" + + def _color_distortion(image): + image = tf.image.random_brightness(image, max_delta=128. / 255.) + image = tf.image.random_saturation(image, lower=0.1, upper=2.0) + image = tf.image.random_hue(image, max_delta=0.5) + image = tf.image.random_contrast(image, lower=0.1, upper=2.0) + return image + + return _color_distortion + + +@Registry.register("preprocess_ops.random_brightness", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_random_brightness(max_delta=0.1): + """Applies random brigthness transformations.""" + + # A random value in [-max_delta, +max_delta] is added to the image values. + # Small max_delta <1.0 assumes that the image values are within [0, 1]. + def _random_brightness(image): + return tf.image.random_brightness(image, max_delta) + + return _random_brightness + + +@Registry.register("preprocess_ops.random_saturation", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_random_saturation(lower=0.5, upper=2.0): + """Applies random saturation transformations.""" + + # Multiplies saturation channel in HSV (with converting from/to RGB) with a + # random float value in [lower, upper]. + def _random_saturation(image): + return tf.image.random_saturation(image, lower=lower, upper=upper) + + return _random_saturation + + +@Registry.register("preprocess_ops.random_hue", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_random_hue(max_delta=0.1): + """Applies random hue transformations.""" + + # Adds to hue channel in HSV (with converting from/to RGB) a random offset + # in [-max_delta, +max_delta]. + def _random_hue(image): + return tf.image.random_hue(image, max_delta=max_delta) + + return _random_hue + + +@Registry.register("preprocess_ops.random_contrast", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_random_contrast(lower=0.5, upper=2.0): + """Applies random contrast transformations.""" + + # Stretches/shrinks value stddev (per channel) by multiplying with a random + # value in [lower, upper]. + def _random_contrast(image): + return tf.image.random_contrast(image, lower=lower, upper=upper) + + return _random_contrast + + +@Registry.register("preprocess_ops.decode", "function") +@utils.InKeyOutKey() +def get_decode(channels=3): + """Decode an encoded image string, see tf.io.decode_image.""" + + def _decode(image): # pylint: disable=missing-docstring + # tf.io.decode_image does not set the shape correctly, so we use + # tf.io.deocde_jpeg, which also works for png, see + # https://github.com/tensorflow/tensorflow/issues/8551 + return tf.io.decode_jpeg(image, channels=channels) + + return _decode + + +@Registry.register("preprocess_ops.decode_grayscale", "function") +@utils.InKeyOutKey() +def get_decode_grayscale(channels=1): + """Decode an encoded image string, see tf.io.decode_image.""" + + def _decode_gray(image): # pylint: disable=missing-docstring + # tf.io.decode_image does not set the shape correctly, so we use + # tf.io.deocde_jpeg, which also works for png, see + # https://github.com/tensorflow/tensorflow/issues/8551 + return tf.io.decode_jpeg(image, channels=channels) + + return _decode_gray + + +@Registry.register("preprocess_ops.pad", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_pad(pad_size): + """Pads an image. + + Args: + pad_size: either an integer u giving verticle and horizontal pad sizes u, or + a list or tuple [u, v] of integers where u and v are vertical and + horizontal pad sizes. + + Returns: + A function for padding an image. + + """ + pad_size = utils.maybe_repeat(pad_size, 2) + + def _pad(image): + return tf.pad( + image, [[pad_size[0], pad_size[0]], [pad_size[1], pad_size[1]], [0, 0]]) + + return _pad + + +@Registry.register("preprocess_ops.resize", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_resize(resize_size, method=tf2.image.ResizeMethod.BILINEAR, + antialias=False): + """Resizes image to a given size. + + Args: + resize_size: either an integer H, where H is both the new height and width + of the resized image, or a list or tuple [H, W] of integers, where H and W + are new image"s height and width respectively. + method: The type of interpolation to apply when resizing. + antialias: Whether to use an anti-aliasing filter when downsampling an + image. + + Returns: + A function for resizing an image. + + """ + resize_size = utils.maybe_repeat(resize_size, 2) + + def _resize(image): + """Resizes image to a given size.""" + # Note: use TF-2 version of tf.image.resize as the version in TF-1 is + # buggy: https://github.com/tensorflow/tensorflow/issues/6720. + # In particular it was not equivariant with rotation and lead to the network + # to learn a shortcut in self-supervised rotation task, if rotation was + # applied after resize. + dtype = image.dtype + image = tf2.image.resize( + images=image, size=resize_size, method=method, antialias=antialias) + return tf.cast(image, dtype) + + return _resize + + +@Registry.register("preprocess_ops.resize_small", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_resize_small(smaller_size, method="area", antialias=True): + """Resizes the smaller side to `smaller_size` keeping aspect ratio. + + Args: + smaller_size: an integer, that represents a new size of the smaller side of + an input image. + method: the resize method. `area` is a meaningful, bwd-compat default. + antialias: See TF's image.resize method. + + Returns: + A function, that resizes an image and preserves its aspect ratio. + + """ + + def _resize_small(image): # pylint: disable=missing-docstring + h, w = tf.shape(image)[0], tf.shape(image)[1] + + # Figure out the necessary h/w. + ratio = ( + tf.cast(smaller_size, tf.float32) / + tf.cast(tf.minimum(h, w), tf.float32)) + h = tf.cast(tf.round(tf.cast(h, tf.float32) * ratio), tf.int32) + w = tf.cast(tf.round(tf.cast(w, tf.float32) * ratio), tf.int32) + + dtype = image.dtype + image = tf2.image.resize(image, (h, w), method, antialias) + return tf.cast(image, dtype) + + return _resize_small + + +@Registry.register("preprocess_ops.inception_crop", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_inception_crop(resize_size=None, area_min=5, area_max=100, + resize_method=tf2.image.ResizeMethod.BILINEAR, + resize_antialias=False): + """Makes inception-style image crop. + + Inception-style crop is a random image crop (its size and aspect ratio are + random) that was used for training Inception models, see + https://www.cs.unc.edu/~wliu/papers/GoogLeNet.pdf. + + Args: + resize_size: Resize image to [resize_size, resize_size] after crop. + area_min: minimal crop area. + area_max: maximal crop area. + resize_method: The type of interpolation to apply when resizing. Valid + values those accepted by tf.image.resize. + resize_antialias: Whether to use an anti-aliasing filter when downsampling + an image. + + Returns: + A function, that applies inception crop. + """ + + def _inception_crop(image): # pylint: disable=missing-docstring + begin, size, _ = tf.image.sample_distorted_bounding_box( + tf.shape(image), + tf.zeros([0, 0, 4], tf.float32), + area_range=(area_min / 100, area_max / 100), + min_object_covered=0, # Don't enforce a minimum area. + use_image_if_no_bounding_boxes=True) + crop = tf.slice(image, begin, size) + # Unfortunately, the above operation loses the depth-dimension. So we need + # to restore it the manual way. + crop.set_shape([None, None, image.shape[-1]]) + if resize_size: + crop = get_resize( + [resize_size, resize_size], resize_method, resize_antialias)( + {"image": crop})["image"] + return crop + + return _inception_crop + + +@Registry.register("preprocess_ops.decode_jpeg_and_inception_crop", "function") +@utils.InKeyOutKey() +def get_decode_jpeg_and_inception_crop( + resize_size=None, + area_min=5, + area_max=100, + aspect_ratio_range=None, + resize_method=tf2.image.ResizeMethod.BILINEAR, + resize_antialias=False): + """Decode jpeg string and make inception-style image crop. + + Inception-style crop is a random image crop (its size and aspect ratio are + random) that was used for training Inception models, see + https://www.cs.unc.edu/~wliu/papers/GoogLeNet.pdf. + + Args: + resize_size: Resize image to [resize_size, resize_size] after crop. + area_min: minimal crop area. + area_max: maximal crop area. + aspect_ratio_range: An optional list of floats. Defaults to [0.75, 1.33]. + The cropped area of the image must have an aspect ratio = width / height + within this range. + resize_method: The type of interpolation to apply when resizing. Valid + values those accepted by tf.image.resize. + resize_antialias: Whether to use an anti-aliasing filter when downsampling + an image. + + Returns: + A function, that applies inception crop. + """ + + def _inception_crop(image_data): # pylint: disable=missing-docstring + shape = tf.image.extract_jpeg_shape(image_data) + begin, size, _ = tf.image.sample_distorted_bounding_box( + shape, + tf.zeros([0, 0, 4], tf.float32), + area_range=(area_min / 100, area_max / 100), + min_object_covered=0, # Don't enforce a minimum area. + aspect_ratio_range=aspect_ratio_range, + use_image_if_no_bounding_boxes=True) + + # Crop the image to the specified bounding box. + offset_y, offset_x, _ = tf.unstack(begin) + target_height, target_width, _ = tf.unstack(size) + crop_window = tf.stack([offset_y, offset_x, target_height, target_width]) + image = tf.image.decode_and_crop_jpeg(image_data, crop_window, channels=3) + + if resize_size: + image = get_resize( + [resize_size, resize_size], resize_method, resize_antialias)( + {"image": image})["image"] + + return image + + return _inception_crop + + +@Registry.register("preprocess_ops.decode_jpeg_and_center_crop", "function") +@utils.InKeyOutKey() +def get_decode_jpeg_and_center_crop(crop_size=None): + """Decode jpeg string and make a center image crop. + + Args: + crop_size: Crop image to [crop_size, crop_size]. + + Returns: + A function that applies center crop. + """ + + crop_size = utils.maybe_repeat(crop_size, 2) + + def _decode_and_center_crop(image_data): # pylint: disable=missing-docstring + shape = tf.image.extract_jpeg_shape(image_data) + target_height, target_width = crop_size + + offset_y = (shape[0] - target_height) // 2 + offset_x = (shape[1] - target_width) // 2 + + # Crop the image to the specified bounding box. + crop_window = tf.stack([offset_y, offset_x, target_height, target_width]) + image = tf.image.decode_and_crop_jpeg(image_data, crop_window, channels=3) + image.set_shape([target_height, target_width, 3]) + return image + + return _decode_and_center_crop + + +@Registry.register("preprocess_ops.decode_jpeg_and_random_crop", "function") +@utils.InKeyOutKey() +def get_decode_jpeg_and_random_crop(crop_size=None): + """Decode jpeg string and make a center image crop. + + Args: + crop_size: Crop image to [crop_size, crop_size]. + + Returns: + A function that applies center crop. + """ + + crop_size = utils.maybe_repeat(crop_size, 2) + + def _decode_and_random_crop(image_data): # pylint: disable=missing-docstring + shape = tf.image.extract_jpeg_shape(image_data)[:2] + target_height, target_width = crop_size + limit = shape - crop_size + 1 + offset = tf.random.uniform([2], 0, tf.int32.max, dtype=tf.int32) % limit + + # Crop the image to the specified bounding box. + crop_window = tf.stack([offset[0], offset[1], target_height, target_width]) + image = tf.image.decode_and_crop_jpeg(image_data, crop_window, channels=3) + image.set_shape([target_height, target_width, 3]) + return image + + return _decode_and_random_crop + + +@Registry.register("preprocess_ops.random_crop", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_random_crop(crop_size): + """Makes a random crop of a given size. + + Args: + crop_size: either an integer H, where H is both the height and width of the + random crop, or a list or tuple [H, W] of integers, where H and W are + height and width of the random crop respectively. + + Returns: + A function, that applies random crop. + """ + crop_size = utils.maybe_repeat(crop_size, 2) + + def _crop(image): + return tf.random_crop(image, [crop_size[0], crop_size[1], image.shape[-1]]) + + return _crop + + +@Registry.register("preprocess_ops.central_crop", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_central_crop(crop_size): + """Makes central crop of a given size. + + Args: + crop_size: either an integer H, where H is both the height and width of the + central crop, or a list or tuple [H, W] of integers, where H and W are + height and width of the central crop respectively. + + Returns: + A function, that applies central crop. + """ + crop_size = utils.maybe_repeat(crop_size, 2) + + def _crop(image): + h, w = crop_size[0], crop_size[1] + dy = (tf.shape(image)[0] - h) // 2 + dx = (tf.shape(image)[1] - w) // 2 + return tf.image.crop_to_bounding_box(image, dy, dx, h, w) + + return _crop + + +@Registry.register("preprocess_ops.central_crop_longer", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_central_crop_longer(): + """Center crop the longer side so that the image becomes a square. + + Args: + + Returns: + A function, that applies central crop. + """ + + def _crop(image): + shape = tf.shape(image) + h, w = shape[0], shape[1] + crop_fn = tf.image.crop_to_bounding_box + return tf.cond( + h > w, + lambda: crop_fn(image, h // 2 - w // 2, 0, w, w), + lambda: crop_fn(image, 0, w // 2 - h // 2, h, h)) + + return _crop + + +@Registry.register("preprocess_ops.flip_lr", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_random_flip_lr(): + """Flips an image horizontally with probability 50%.""" + + def _random_flip_lr_pp(image): + return tf.image.random_flip_left_right(image) + + return _random_flip_lr_pp + + +@Registry.register("preprocess_ops.flip_ud", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_random_flip_ud(): + """Flips an image vertically with probability 50%.""" + + def _random_flip_ud_pp(image): + return tf.image.random_flip_up_down(image) + + return _random_flip_ud_pp + + +@Registry.register("preprocess_ops.random_rotate", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_random_rotation(min_angle=0, max_angle=360): + """Randomly rotate an image.""" + if min_angle > max_angle: + raise ValueError("min_angle (%f) must be lower than max_angle (%f)" % + (min_angle, max_angle)) + # Convert to radians. + min_angle = np.radians(min_angle) + max_angle = np.radians(max_angle) + + def _random_rotation(image): + """Rotation function.""" + num_dims = len(image.shape) + if num_dims in [3, 4]: + batch_size = tf.shape(image)[0] if num_dims == 4 else 1 + else: + raise ValueError("Tensor \"image\" should have 3 or 4 dimensions.") + random_angles = tf.random.uniform( + shape=(batch_size,), minval=min_angle, maxval=max_angle) + return image_utils.rotate(images=image, angles=random_angles) + + return _random_rotation + + +@Registry.register("preprocess_ops.random_rotate90", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_random_rotation90(): + """Randomly rotate an image by multiples of 90 degrees.""" + + def _random_rotation90(image): + """Rotation function.""" + num_rotations = tf.random.uniform(shape=(), maxval=4, dtype=tf.int32) + return tf.image.rot90(image, k=num_rotations) + + return _random_rotation90 + + +@Registry.register("preprocess_ops.rotate", "function") +def get_rotate(create_labels=None): + """Returns a function that does 90deg rotations and sets according labels. + + Args: + create_labels: create new labels to the default label field in the input + dictionary. It should be set to one of ['rotation', 'supervised', None]. + + Returns: + A function, that applies rotation preprocess. + """ + + def _four_rots(img): + """Rotates an image four times, with 90 degrees between each rotation.""" + return tf.stack([ + img, + tf.transpose(tf.reverse_v2(img, [1]), [1, 0, 2]), + tf.reverse_v2(img, [0, 1]), + tf.reverse_v2(tf.transpose(img, [1, 0, 2]), [1]), + ]) + + def _rotate_pp(data): + """Rotate preprocessing function applied on data dictionary input.""" + assert create_labels in [ + "rotation", "supervised", None + ], ("create_labels:{} must be one of ['rotation', 'supervised', None]." + .format(create_labels)) + + # Creates labels in the same structure as images. + if create_labels == "rotation": + data["label"] = tf.constant([0, 1, 2, 3]) + # Duplicates the original supervised label four times. + elif create_labels == "supervised": + if "label" in data: + data["label"] = tf.stack(tf.tile([data["label"]], [4])) + # Creates rotated images and rot labels. + data["image"] = _four_rots(data["image"]) + data["rot_label"] = tf.constant([0, 1, 2, 3]) + + return data + + return _rotate_pp + + +@Registry.register("preprocess_ops.value_range", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing(output_dtype=tf.float32) +def get_value_range(vmin=-1, vmax=1, in_min=0, in_max=255.0, clip_values=False): + """Transforms a [in_min,in_max] image to [vmin,vmax] range. + + Input ranges in_min/in_max can be equal-size lists to rescale the invidudal + channels independently. + + Args: + vmin: A scalar. Output max value. + vmax: A scalar. Output min value. + in_min: A scalar or a list of input min values to scale. If a list, the + length should match to the number of channels in the image. + in_max: A scalar or a list of input max values to scale. If a list, the + length should match to the number of channels in the image. + clip_values: Whether to clip the output values to the provided ranges. + + Returns: + A function to rescale the values. + """ + + def _value_range(image): + """Scales values in given range.""" + in_min_t = tf.constant(in_min, tf.float32) + in_max_t = tf.constant(in_max, tf.float32) + image = tf.cast(image, tf.float32) + image = (image - in_min_t) / (in_max_t - in_min_t) + image = vmin + image * (vmax - vmin) + if clip_values: + image = tf.clip_by_value(image, vmin, vmax) + return image + + return _value_range + + +@Registry.register("preprocess_ops.value_range_mc", "function") +def get_value_range_mc(vmin, vmax, *args): + """Independent multi-channel rescaling.""" + if len(args) % 2: + raise ValueError("Additional args must be list of even length giving " + "`in_max` and `in_min` concatenated") + num_channels = len(args) // 2 + in_min = args[:num_channels] + in_max = args[-num_channels:] + + return get_value_range(vmin, vmax, in_min, in_max) + + +@Registry.register("preprocess_ops.delete_field", "function") +def get_delete_field(key): + + def _delete_field(datum): + if key in datum: + del datum[key] + return datum + + return _delete_field + + +@Registry.register("preprocess_ops.replicate", "function") +@utils.InKeyOutKey() +def get_replicate(num_replicas=2): + """Replicates an image `num_replicas` times along a new batch dimension.""" + + def _replicate(image): + tiles = [num_replicas] + [1] * len(image.shape) + return tf.tile(image[None], tiles) + + return _replicate + + +@Registry.register("preprocess_ops.standardize", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing(output_dtype=tf.float32) +def get_standardize(mean, std): + """Standardize an image with the given mean and standard deviation.""" + + def _standardize(image): + image = tf.cast(image, dtype=tf.float32) + return (image - mean) / std + + return _standardize + + +@Registry.register("preprocess_ops.select_channels", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def get_select_channels(channels): + """Returns function to select specified channels.""" + + def _select_channels(image): + """Returns a subset of available channels.""" + return tf.gather(image, channels, axis=-1) + + return _select_channels + + +@Registry.register("preprocess_ops.extract_patches", "function") +@utils.InKeyOutKey() +def get_extract_patches(patch_size, stride): + """Extracts image patches. + + Args: + patch_size: patch size. + stride: patches stride. + + Returns: + A function for extracting patches. + """ + + def _extract_patches(image): + """Extracts image patches.""" + h, w, c = image.get_shape().as_list() + + count_h = h // stride + count_w = w // stride + + # pyformat: disable + image = tf.extract_image_patches(image[None], + [1, patch_size, patch_size, 1], + [1, stride, stride, 1], + [1, 1, 1, 1], + padding="VALID") + # pyformat: enable + + return tf.reshape(image, [count_h * count_w, patch_size, patch_size, c]) + + return _extract_patches + + +@Registry.register("preprocess_ops.onehot", "function") +def get_onehot(depth, + key="labels", + key_result=None, + multi=True, + on=1.0, + off=0.0): + """One-hot encodes the input. + + Args: + depth: Length of the one-hot vector (how many classes). + key: Key of the data to be one-hot encoded. + key_result: Key under which to store the result (same as `key` if None). + multi: If there are multiple labels, whether to merge them into the same + "multi-hot" vector (True) or keep them as an extra dimension (False). + on: Value to fill in for the positive label (default: 1). + off: Value to fill in for negative labels (default: 0). + + Returns: + Data dictionary. + """ + + def _onehot(data): + # When there's more than one label, this is significantly more efficient + # than using tf.one_hot followed by tf.reduce_max; we tested. + labels = data[key] + if labels.shape.rank > 0 and multi: + # Currently, the assertion below is only used for datasets with single + # labels. In a multi-label dataset either `on` or `off` should be computed + # dynamically to yield the correct sum, when the number of labels varies. + x = tf.scatter_nd(labels[:, None], tf.ones(tf.shape(labels)[0]), (depth,)) + x = tf.clip_by_value(x, 0, 1) * (on - off) + off + else: + assert np.isclose(on + off * (depth - 1), 1), ( + "All on and off values must sum to 1") + x = tf.one_hot(labels, depth, on_value=on, off_value=off) + data[key_result or key] = x + return data + + return _onehot + + +@Registry.register("preprocess_ops.keep", "function") +def get_keep(*keys): + """Keeps only the given keys.""" + + def _keep(data): + return {k: v for k, v in data.items() if k in keys} + + return _keep + + +@Registry.register("preprocess_ops.drop", "function") +def get_drop(*keys): + """Drops the given keys.""" + + def _drop(data): + return {k: v for k, v in data.items() if k not in keys} + + return _drop + + +@Registry.register("preprocess_ops.copy", "function") +def get_copy(inkey, outkey): + """Copies value of `inkey` into `outkey`.""" + + def _copy(data): + data[outkey] = data[inkey] + return data + + return _copy + + +@Registry.register("preprocess_ops.randaug", "function") +@utils.InKeyOutKey() +def get_randaug(num_layers: int = 2, magnitude: int = 10): + """Creates a function that applies RandAugment. + + RandAugment is from the paper https://arxiv.org/abs/1909.13719, + + Args: + num_layers: Integer, the number of augmentation transformations to apply + sequentially to an image. Represented as (N) in the paper. Usually best + values will be in the range [1, 3]. + magnitude: Integer, shared magnitude across all augmentation operations. + Represented as (M) in the paper. Usually best values are in the range [5, + 30]. + + Returns: + A function that applies RandAugment. + """ + + def _randaug(image): + return autoaugment.distort_image_with_randaugment( + image=image, + num_layers=num_layers, + magnitude=magnitude, + ) + + return _randaug + + +@Registry.register("preprocess_ops.patchify", "function") +@utils.InKeyOutKey() +def patchify(patch_size: Tuple[int, int], stride: Tuple[int, int]): + """Patchifies image. + + If image is of size (h, w, c), patchify it into (h//p*w//p, p*p*c) + + Args: + patch_size: Integer. + stride: Integer. + + Returns: + A function that applies RandAugment. + """ + + def _extract_patches(image): + """Extracts image patches.""" + h, w, _ = image.get_shape().as_list() + + count_h = h // stride[0] + count_w = w // stride[1] + + # pyformat: disable + image = tf.extract_image_patches(image[None], + [1, patch_size[0], patch_size[1], 1], + [1, stride[0], stride[1], 1], + [1, 1, 1, 1], + padding="VALID") + # pyformat: enable + return tf.reshape(image, [count_h * count_w, -1]) + + return _extract_patches + + diff --git a/scenic/dataset_lib/big_transfer/preprocessing/utils.py b/scenic/dataset_lib/big_transfer/preprocessing/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..9d6b78def86f81e6848a8c7c2cb07d6685194f97 --- /dev/null +++ b/scenic/dataset_lib/big_transfer/preprocessing/utils.py @@ -0,0 +1,119 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Preprocessing utils. + +""" + +from collections import abc +import functools +import tensorflow.compat.v1 as tf + + +def maybe_repeat(arg, n_reps): + if not isinstance(arg, abc.Sequence): + arg = (arg,) * n_reps + return arg + + +def tf_apply_to_image_or_images(fn, image_or_images, **map_kw): + """Applies a function to a single image or each image in a batch of them. + + Args: + fn: the function to apply, receives an image, returns an image. + image_or_images: Either a single image, or a batch of images. + **map_kw: Arguments passed through to tf.map_fn if called. + + Returns: + The result of applying the function to the image or batch of images. + + Raises: + ValueError: if the input is not of rank 3 or 4. + """ + static_rank = len(image_or_images.get_shape().as_list()) + if static_rank == 3: # A single image: HWC + return fn(image_or_images) + elif static_rank == 4: # A batch of images: BHWC + return tf.map_fn(fn, image_or_images, **map_kw) + elif static_rank > 4: # A batch of images: ...HWC + input_shape = tf.shape(image_or_images) + h, w, c = image_or_images.get_shape().as_list()[-3:] + image_or_images = tf.reshape(image_or_images, [-1, h, w, c]) + image_or_images = tf.map_fn(fn, image_or_images, **map_kw) + return tf.reshape(image_or_images, input_shape) + else: + raise ValueError("Unsupported image rank: %d" % static_rank) + + +class BatchedImagePreprocessing(object): + """Decorator for preprocessing ops, which adds support for image batches. + + Note: Doesn't support decorating ops which add new fields in data. + """ + + def __init__(self, output_dtype=None): + self.output_dtype = output_dtype + + def __call__(self, get_pp_fn): + + def get_batch_pp_fn(*args, **kwargs): + """Preprocessing function that supports batched images.""" + + def _batch_pp_fn(image, *a, **kw): + orig_image_pp_fn = get_pp_fn(*args, **kwargs) + orig_image_pp_fn = functools.partial(orig_image_pp_fn, *a, **kw) + return tf_apply_to_image_or_images( + orig_image_pp_fn, image, dtype=self.output_dtype) + + return _batch_pp_fn + + return get_batch_pp_fn + + +class InKeyOutKey(object): + """Decorator for preprocessing ops, which adds `inkey` and `outkey` arguments. + + Note: Only supports single-input single-output ops. + """ + + def __init__(self, uses_rngkey=False, indefault="image", outdefault="image"): + self.uses_rngkey = uses_rngkey + self.indefault = indefault + self.outdefault = outdefault + + def __call__(self, orig_get_pp_fn): + + def get_ikok_pp_fn(*args, + key=None, + inkey=self.indefault, + outkey=self.outdefault, + **kw): + + # Support legacy arg from BatchedPreprocessing + key = kw.pop("data_key", key) + + orig_pp_fn = orig_get_pp_fn(*args, **kw) + + def _ikok_pp_fn(data): + if not self.uses_rngkey: + data[key or outkey] = orig_pp_fn(data[key or inkey]) + else: + data[key or + outkey], data["_rngkey"] = orig_pp_fn(data[key or inkey], + data["_rngkey"]) + return data + + return _ikok_pp_fn + + return get_ikok_pp_fn diff --git a/scenic/dataset_lib/big_transfer/preprocessing/vtab_ops.py b/scenic/dataset_lib/big_transfer/preprocessing/vtab_ops.py new file mode 100644 index 0000000000000000000000000000000000000000..2b9801388fbf21713f3269390e60c9cd6b7b1f63 --- /dev/null +++ b/scenic/dataset_lib/big_transfer/preprocessing/vtab_ops.py @@ -0,0 +1,111 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of data preprocessing ops for VTAB. + +All preprocessing ops should return a data processing functors. A data +is represented as a dictionary of tensors, where field "image" is reserved +for 3D images (height x width x channels). The functors output dictionary with +field "image" being modified. Potentially, other fields can also be modified +or added. +""" +import numpy as np +from scenic.dataset_lib.big_transfer.registry import Registry +import tensorflow.compat.v1 as tf + + +@Registry.register("preprocess_ops.dsprites_pp", "function") +def get_dsprites_pp(predicted_attribute, num_classes=None): + """Data preprocess function for dsprites dataset.""" + + attribute_to_classes = { + "label_shape": 3, + "label_scale": 6, + "label_orientation": 40, + "label_x_position": 32, + "label_y_position": 32, + } + + def _dsprites_pp(data): + # For consistency with other datasets, image needs to have three channels + # and be in [0, 255). # pylint: disable=unused-argument + # data["image"] = tf.tile(data["image"], [1, 1, 3]) * 255 + data["image"] = data["image"] * 255 + + # If num_classes is set, we group together nearby integer values to arrive + # at the desired number of classes. This is useful for example for grouping + # together different spatial positions. + num_original_classes = attribute_to_classes[predicted_attribute] + n_cls = num_original_classes if num_classes is None else num_classes + if not isinstance(n_cls, int) or n_cls <= 1 or n_cls > num_original_classes: + raise ValueError( + "The number of classes should be None or in [2, ..., num_classes].") + class_division_factor = float(num_original_classes) / n_cls + + data["label"] = tf.cast( + tf.math.floordiv( + tf.cast(data[predicted_attribute], tf.float32), + class_division_factor), data[predicted_attribute].dtype) + return data + + return _dsprites_pp + + +@Registry.register("preprocess_ops.clevr_pp", "function") +def get_clevr_pp(task, outkey="label"): + """Data preprocess function for clevr dataset.""" + + def _count_preprocess_fn(data): + data[outkey] = tf.size(data["objects"]["size"]) - 3 + return data + + def _closest_object_preprocess_fn(data): + dist = tf.reduce_min(data["objects"]["pixel_coords"][:, 2]) + # These thresholds are uniformly spaced and result in more or less balanced + # distribution of classes. + thrs = np.array([0.0, 8.0, 8.5, 9.0, 9.5, 10.0, 100.0]) + data[outkey] = tf.reduce_max(tf.where((thrs - dist) < 0)) + return data + + task_to_preprocess = { + "count_all": _count_preprocess_fn, + "closest_object_distance": _closest_object_preprocess_fn, + } + + return task_to_preprocess[task] + + +@Registry.register("preprocess_ops.kitti_pp", "function") +def get_kitti_pp(task): + """Data preprocess function for kitti dataset.""" + + def _closest_vehicle_distance_pp(data): + """Predict the distance to the closest vehicle.""" + # Location feature contains (x, y, z) in meters w.r.t. the camera. + vehicles = tf.where(data["objects"]["type"] < 3) # Car, Van, Truck. + vehicle_z = tf.gather( + params=data["objects"]["location"][:, 2], indices=vehicles) + vehicle_z = tf.concat([vehicle_z, tf.constant([[1000.0]])], axis=0) + dist = tf.reduce_min(vehicle_z) + # Results in a uniform distribution over three distances, plus one class for + # "no vehicle". + thrs = np.array([-100.0, 8.0, 20.0, 999.0]) + label = tf.reduce_max(tf.where((thrs - dist) < 0)) + return {"image": data["image"], "label": label} + + task_to_preprocess = { + "closest_vehicle_distance": _closest_vehicle_distance_pp, + } + + return task_to_preprocess[task] diff --git a/scenic/dataset_lib/big_transfer/registry.py b/scenic/dataset_lib/big_transfer/registry.py new file mode 100644 index 0000000000000000000000000000000000000000..6b8e74596c2d674ed605695019ddcacb3230253b --- /dev/null +++ b/scenic/dataset_lib/big_transfer/registry.py @@ -0,0 +1,196 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Global Registry for the task adaptation framework. + +""" + +import ast +import functools +import logging + + +def partialclass(cls, *base_args, **base_kwargs): + """Builds a subclass with partial application of the given args and keywords. + + Equivalent to functools.partial performance, base_args are preprended to the + positional arguments given during object initialization and base_kwargs are + updated with the kwargs given later. + + Args: + cls: The base class. + *base_args: Positional arguments to be applied to the subclass. + **base_kwargs: Keyword arguments to be applied to the subclass. + + Returns: + A subclass of the input class. + + Author: Joan Puigcerver (jpuigcerver@) + """ + + class _NewClass(cls): + + def __init__(self, *args, **kwargs): + bound_args = base_args + args + bound_kwargs = base_kwargs.copy() + bound_kwargs.update(kwargs) + super(_NewClass, self).__init__(*bound_args, **bound_kwargs) + + return _NewClass + + +def partialfactory(cls, lookup_string, *base_args, **base_kwargs): + """Builds a factory with partial application of given args and keywords. + + Equivalent to functools.partial, but with a warning to prevent potential + future headaches when overwriting keyword arguments. base_args are prepended + to the positional arguments given during initialization and base_kwargs are + updated with the kwargs given later. + + Args: + cls: The base class. + lookup_string: String for logging purposes. + *base_args: Positional arguments to be preprended to all factory calls. + **base_kwargs: Keyword arguments to be applied to all factory calls. These + may be overwritten by kwargs in factory calls. + + Returns: + A factory function creating objects of class `cls`. + + Author: Joan Puigcerver (jpuigcerver@), + modifications by Paul Rubenstein (paulrubenstein@) + """ + + def _factory_fn(*args, **kwargs): + """A factory function that creates objects of the registered class.""" + args = base_args + args + for k, v in base_kwargs.items(): + if k in kwargs: + # Warning to prevent future headaches. + logging.warning( + "The default kwarg %r=%r, used in the lookup string %r, " + "is overridden by the call to the resulting factory. " + "Notice that this may lead to some unexpected behavior.", k, v, + lookup_string) + else: + kwargs[k] = v + + return cls(*args, **kwargs) + + return _factory_fn + + +def parse_name(string_to_parse): + """Parses input to the registry's lookup function. + + Args: + string_to_parse: can be either an arbitrary name or function call + (optionally with positional and keyword arguments). e.g. "multiclass", + "resnet50_v2(filters_factor=8)". + + Returns: + A tuple of input name, argument tuple and a keyword argument dictionary. + Examples: + "multiclass" -> ("multiclass", (), {}) + "resnet50_v2(9, filters_factor=4)" -> + ("resnet50_v2", (9,), {"filters_factor": 4}) + + Author: Joan Puigcerver (jpuigcerver@) + """ + expr = ast.parse(string_to_parse, mode="eval").body # pytype: disable=attribute-error + if not isinstance(expr, (ast.Attribute, ast.Call, ast.Name)): + raise ValueError( + "The given string should be a name or a call, but a {} was parsed from " + "the string {!r}".format(type(expr), string_to_parse)) + + # Notes: + # name="some_name" -> type(expr) = ast.Name + # name="module.some_name" -> type(expr) = ast.Attribute + # name="some_name()" -> type(expr) = ast.Call + # name="module.some_name()" -> type(expr) = ast.Call + + if isinstance(expr, ast.Name): + return string_to_parse, (), {} + elif isinstance(expr, ast.Attribute): + return string_to_parse, (), {} + + def _get_func_name(expr): + if isinstance(expr, ast.Attribute): + return _get_func_name(expr.value) + "." + expr.attr + elif isinstance(expr, ast.Name): + return expr.id + else: + raise ValueError( + "Type {!r} is not supported in a function name, the string to parse " + "was {!r}".format(type(expr), string_to_parse)) + + def _get_func_args_and_kwargs(call): + args = tuple([ast.literal_eval(arg) for arg in call.args]) + kwargs = { + kwarg.arg: ast.literal_eval(kwarg.value) for kwarg in call.keywords + } + return args, kwargs + + func_name = _get_func_name(expr.func) + func_args, func_kwargs = _get_func_args_and_kwargs(expr) + + return func_name, func_args, func_kwargs + + +class Registry(object): + """Implements global Registry. + + Authors: Joan Puigcerver (jpuigcerver@), Alexander Kolesnikov (akolesnikov@) + """ + + _GLOBAL_REGISTRY = {} + + @staticmethod + def global_registry(): + return Registry._GLOBAL_REGISTRY + + @staticmethod + def register(name, item_type, replace=False): + """Creates a function that registers its input.""" + + if item_type not in ["object", "function", "factory", "class"]: + raise ValueError("Unknown item type: %s" % item_type) + + def _register(item): + if name in Registry.global_registry() and not replace: + raise KeyError( + "The name {!r} was already registered in with type {!r}".format( + name, item_type)) + + Registry.global_registry()[name] = (item, item_type) + return item + + return _register + + @staticmethod + def lookup(lookup_string, kwargs_extra=None): + """Lookup a name in the registry.""" + + name, args, kwargs = parse_name(lookup_string) + if kwargs_extra: + kwargs.update(kwargs_extra) + item, item_type = Registry.global_registry()[name] + if item_type == "function": + return functools.partial(item, *args, **kwargs) + elif item_type == "object": + return item(*args, **kwargs) + elif item_type == "factory": + return partialfactory(item, lookup_string, *args, **kwargs) + elif item_type == "class": + return partialclass(item, *args, **kwargs) diff --git a/scenic/dataset_lib/cifar10_dataset.py b/scenic/dataset_lib/cifar10_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..28db9c5f859f39ebe993dff12ae0b8706743a760 --- /dev/null +++ b/scenic/dataset_lib/cifar10_dataset.py @@ -0,0 +1,180 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the CIFAR10 dataset.""" + +import functools +from typing import Optional + +from absl import logging +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf + +HEIGHT = 32 +WIDTH = 32 +NUM_CHANNELS = 3 + +# Computed from the training set by taking the per-channel mean/std-dev +# over sample, height and width axes of all training samples. +MEAN_RGB = [0.4914 * 255, 0.4822 * 255, 0.4465 * 255] +STDDEV_RGB = [0.2470 * 255, 0.2435 * 255, 0.2616 * 255] + + +def preprocess_example(example, dtype=tf.float32): + """Preprocesses the given example. + + Args: + example: dict; Example that has an 'image' and a 'label'. + dtype: Tensorflow data type; Data type of the image. + + Returns: + A preprocessed example. + """ + image = tf.cast(example['image'], dtype=dtype) + if dtype not in [tf.int32, tf.int64, tf.uint32, tf.uint64]: + mean_rgb = tf.constant(MEAN_RGB, shape=[1, 1, 3], dtype=dtype) + std_rgb = tf.constant(STDDEV_RGB, shape=[1, 1, 3], dtype=dtype) + image = (image - mean_rgb) / std_rgb + return {'inputs': image, 'label': example['label']} + + +def augment_example(example, dtype=tf.float32, data_augmentations=None): + """Apply data augmentation on the given training example. + + Args: + example: dict; Example that has an 'image' and a 'label'. + dtype: Tensorflow data type; Data type of the image. + data_augmentations: list(str); Types of data augmentation applied on + training data. + + Returns: + An augmented training example. + """ + image = tf.cast(example['inputs'], dtype=dtype) + if data_augmentations is not None: + if 'cifar_default' in data_augmentations: + image = dataset_utils.augment_random_crop_flip( + image, HEIGHT, WIDTH, NUM_CHANNELS, crop_padding=4, flip=True) + image = tf.cast(image, dtype=dtype) + return {'inputs': image, 'label': example['label']} + + +@datasets.add_dataset('cifar10') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the CIFAR10 train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + dataset_configs = dataset_configs or {} + data_augmentations = dataset_configs.get('data_augmentations', []) + # alwayse include the default data augmentation + data_augmentations.append('cifar_default') + for da in data_augmentations: + if da not in ['mixup', 'cifar_default']: + raise ValueError(f'Data augmentation type {da} is not yet supported ' + f'in the CIFAR dataset.') + + dtype = getattr(tf, dtype_str) + target_is_onehot = False + preprocess_ex = functools.partial(preprocess_example, dtype=dtype) + + logging.info('Loading train split of the CIFAR10 dataset.') + augment_ex = functools.partial( + augment_example, dtype=dtype, data_augmentations=data_augmentations) + train_ds, train_ds_info = dataset_utils.load_split_from_tfds( + 'cifar10', + batch_size, + split='train', + preprocess_example=preprocess_ex, + augment_train_example=augment_ex, + shuffle_seed=shuffle_seed) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + logging.info('Loading test split of the CIFAR10 dataset.') + eval_ds, _ = dataset_utils.load_split_from_tfds( + 'cifar10', + eval_batch_size, + split='test', + preprocess_example=preprocess_ex) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + num_classes = train_ds_info.features['label'].num_classes + target_to_one_hot_batches = functools.partial( + dataset_utils.target_to_one_hot, num_classes=num_classes) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + mixup_batches = functools.partial(dataset_utils.mixup, alpha=1.0) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + if 'mixup' in data_augmentations: + train_iter = map(target_to_one_hot_batches, train_iter) + train_iter = map(mixup_batches, train_iter) + target_is_onehot = True + train_iter = map(shard_batches, train_iter) + + # Note: samples will be dropped if the number of test samples + # (EVAL_IMAGES=10000) is not divisible by the evaluation batch size + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + if target_is_onehot: + eval_iter = map(target_to_one_hot_batches, eval_iter) + eval_iter = map(shard_batches, eval_iter) + + input_shape = (-1, HEIGHT, WIDTH, NUM_CHANNELS) + meta_data = { + 'num_classes': num_classes, + 'input_shape': input_shape, + 'num_train_examples': dataset_utils.get_num_examples('cifar10', 'train'), + 'num_eval_examples': dataset_utils.get_num_examples('cifar10', 'test'), + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': target_is_onehot, + } + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) diff --git a/scenic/dataset_lib/cityscapes_dataset.py b/scenic/dataset_lib/cityscapes_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..153f2d3b954b1791d66dcd930d54c03914177f6a --- /dev/null +++ b/scenic/dataset_lib/cityscapes_dataset.py @@ -0,0 +1,363 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the Cityscapes dataset.""" + +import collections +import functools +from typing import Optional + +from absl import logging +import jax.numpy as jnp +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf + +# Based on https://github.com/mcordts/cityscapesScripts +CityscapesClass = collections.namedtuple( + 'CityscapesClass', + ['name', 'id', 'train_id', 'category', 'category_id', 'has_instances', + 'ignore_in_eval', 'color']) + +CLASSES = [ + CityscapesClass( + 'unlabeled', 0, 255, 'void', 0, False, True, (0, 0, 0)), + CityscapesClass( + 'ego vehicle', 1, 255, 'void', 0, False, True, (0, 0, 0)), + CityscapesClass( + 'rectification border', 2, 255, 'void', 0, False, True, (0, 0, 0)), + CityscapesClass( + 'out of roi', 3, 255, 'void', 0, False, True, (0, 0, 0)), + CityscapesClass( + 'static', 4, 255, 'void', 0, False, True, (0, 0, 0)), + CityscapesClass( + 'dynamic', 5, 255, 'void', 0, False, True, (111, 74, 0)), + CityscapesClass( + 'ground', 6, 255, 'void', 0, False, True, (81, 0, 81)), + CityscapesClass( + 'road', 7, 0, 'flat', 1, False, False, (128, 64, 128)), + CityscapesClass( + 'sidewalk', 8, 1, 'flat', 1, False, False, (244, 35, 232)), + CityscapesClass( + 'parking', 9, 255, 'flat', 1, False, True, (250, 170, 160)), + CityscapesClass( + 'rail track', 10, 255, 'flat', 1, False, True, (230, 150, 140)), + CityscapesClass( + 'building', 11, 2, 'construction', 2, False, False, (70, 70, 70)), + CityscapesClass( + 'wall', 12, 3, 'construction', 2, False, False, (102, 102, 156)), + CityscapesClass( + 'fence', 13, 4, 'construction', 2, False, False, (190, 153, 153)), + CityscapesClass( + 'guard rail', 14, 255, 'construction', 2, False, True, (180, 165, 180)), + CityscapesClass( + 'bridge', 15, 255, 'construction', 2, False, True, (150, 100, 100)), + CityscapesClass( + 'tunnel', 16, 255, 'construction', 2, False, True, (150, 120, 90)), + CityscapesClass( + 'pole', 17, 5, 'object', 3, False, False, (153, 153, 153)), + CityscapesClass( + 'polegroup', 18, 255, 'object', 3, False, True, (153, 153, 153)), + CityscapesClass( + 'traffic light', 19, 6, 'object', 3, False, False, (250, 170, 30)), + CityscapesClass( + 'traffic sign', 20, 7, 'object', 3, False, False, (220, 220, 0)), + CityscapesClass( + 'vegetation', 21, 8, 'nature', 4, False, False, (107, 142, 35)), + CityscapesClass( + 'terrain', 22, 9, 'nature', 4, False, False, (152, 251, 152)), + CityscapesClass( + 'sky', 23, 10, 'sky', 5, False, False, (70, 130, 180)), + CityscapesClass( + 'person', 24, 11, 'human', 6, True, False, (220, 20, 60)), + CityscapesClass( + 'rider', 25, 12, 'human', 6, True, False, (255, 0, 0)), + CityscapesClass( + 'car', 26, 13, 'vehicle', 7, True, False, (0, 0, 142)), + CityscapesClass( + 'truck', 27, 14, 'vehicle', 7, True, False, (0, 0, 70)), + CityscapesClass( + 'bus', 28, 15, 'vehicle', 7, True, False, (0, 60, 100)), + CityscapesClass( + 'caravan', 29, 255, 'vehicle', 7, True, True, (0, 0, 90)), + CityscapesClass( + 'trailer', 30, 255, 'vehicle', 7, True, True, (0, 0, 110)), + CityscapesClass( + 'train', 31, 16, 'vehicle', 7, True, False, (0, 80, 100)), + CityscapesClass( + 'motorcycle', 32, 17, 'vehicle', 7, True, False, (0, 0, 230)), + CityscapesClass( + 'bicycle', 33, 18, 'vehicle', 7, True, False, (119, 11, 32)), + CityscapesClass( + 'license plate', -1, -1, 'vehicle', 7, False, True, (0, 0, 142)), +] + +# Number of pixels per Cityscapes class ID in the training set: +PIXELS_PER_CID = { + 7: 3806423808, + 8: 629490880, + 11: 2354443008, + 12: 67089092, + 13: 91210616, + 17: 126753000, + 19: 21555918, + 20: 57031712, + 21: 1647446144, + 22: 119165328, + 23: 415038624, + 24: 126403824, + 25: 13856368, + 26: 725164864, + 27: 27588982, + 28: 24276994, + 31: 24195352, + 32: 10207740, + 33: 42616088 +} + + +def preprocess_example(example, train, dtype=tf.float32, resize=None): + """Preprocesses the given image. + + Args: + example: dict; Example coming from TFDS. + train: bool; Whether to apply training-specific preprocessing or not. + dtype: Tensorflow data type; Data type of the image. + resize: sequence; [H, W] to which image and labels should be resized. + + Returns: + An example dict as required by the model. + """ + image = dataset_utils.normalize(example['image_left'], dtype) + mask = example['segmentation_label'] + + # Resize test images (train images are cropped/resized during augmentation): + if not train: + if resize is not None: + image = tf.image.resize(image, resize, 'bilinear') + mask = tf.image.resize(mask, resize, 'nearest') + + image = tf.cast(image, dtype) + mask = tf.cast(mask, dtype) + mask = tf.squeeze(mask, axis=2) + return {'inputs': image, 'label': mask} + + +def augment_example( + example, dtype=tf.float32, resize=None, **inception_crop_kws): + """Augments the given train image. + + Args: + example: dict; Example coming from TFDS. + dtype: Tensorflow data type; Data type of the image. + resize: sequence; [H, W] to which image and labels should be resized. + **inception_crop_kws: Keyword arguments passed on to + inception_crop_with_mask. + + Returns: + An example dict as required by the model. + """ + image = example['inputs'] + mask = example['label'][..., tf.newaxis] + + # Random crop and resize ("Inception crop"): + image, mask = dataset_utils.inception_crop_with_mask( + image, + mask, + resize_size=image.shape[-3:-1] if resize is None else resize, + **inception_crop_kws) + + # Random LR flip: + seed = tf.random.uniform(shape=[2], maxval=2**31 - 1, dtype=tf.int32) + image = tf.image.stateless_random_flip_left_right(image, seed) + mask = tf.image.stateless_random_flip_left_right(mask, seed) + + image = tf.cast(image, dtype) + mask = tf.cast(mask, dtype) + mask = tf.squeeze(mask, axis=2) + return {'inputs': image, 'label': mask} + + +def get_post_exclusion_labels(): + """Determines new labels after excluding bad classes. + + See Figure 1 in https://arxiv.org/abs/1604.01685 for which classes are + excluded. Excluded classes get the new label -1. + + Returns: + An array of length num_old_classes, containing new labels. + """ + old_to_new_labels = np.array( + [-1 if c.ignore_in_eval else c.train_id for c in CLASSES]) + assert np.all(np.diff([i for i in old_to_new_labels if i >= 0]) == 1) + return old_to_new_labels + + +def get_class_colors(): + """Returns a [num_classes, 3] array of colors for the model output labels.""" + cm = np.stack([c.color for c in CLASSES if not c.ignore_in_eval], axis=0) + return cm / 255.0 + + +def get_class_names(): + """Returns a list with the class names of the model output labels.""" + return [c.name for c in CLASSES if not c.ignore_in_eval] + + +def get_class_proportions(): + """Returns a [num_classes] array of pixel frequency proportions.""" + p = [PIXELS_PER_CID[c.id] for c in CLASSES if not c.ignore_in_eval] + return np.array(p) / np.sum(p) + + +def exclude_bad_classes(batch, new_labels): + """Adjusts masks and batch_masks to exclude void and rare classes. + + This must be applied after dataset_utils.maybe_pad_batch() because we also + update the batch_mask. Note that the data is already converted to Numpy by + then. + + Args: + batch: dict; Batch of data examples. + new_labels: nd-array; array of length num_old_classes, containing new + labels. + + Returns: + Updated batch dict. + """ + # Convert old labels to new labels: + batch['label'] = new_labels[batch['label'].astype(np.int32)] + + # Set batch_mask to 0 at pixels that have an excluded label: + mask_dtype = batch['batch_mask'].dtype + batch['batch_mask'] = ( + batch['batch_mask'].astype(np.bool_) & (batch['label'] != -1)) + batch['batch_mask'] = batch['batch_mask'].astype(mask_dtype) + + return batch + + +@datasets.add_dataset('cityscapes') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the Cityscapes train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + dtype = getattr(tf, dtype_str) + dataset_configs = dataset_configs or {} + target_size = dataset_configs.get('target_size', None) + + logging.info('Loading train split of the Cityscapes dataset.') + preprocess_ex_train = functools.partial( + preprocess_example, train=True, dtype=dtype, resize=None) + augment_ex = functools.partial( + augment_example, dtype=dtype, resize=target_size, area_min=30, + area_max=100) + + train_split = dataset_configs.get('train_split', 'train') + train_ds, _ = dataset_utils.load_split_from_tfds( + 'cityscapes', + batch_size, + split=train_split, + preprocess_example=preprocess_ex_train, + augment_train_example=augment_ex, + shuffle_seed=shuffle_seed) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + logging.info('Loading validation split of the Cityscapes dataset.') + preprocess_ex_eval = functools.partial( + preprocess_example, train=False, dtype=dtype, resize=target_size) + eval_ds, _ = dataset_utils.load_split_from_tfds( + 'cityscapes', eval_batch_size, split='validation', + preprocess_example=preprocess_ex_eval) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size, + pixel_level=True) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size, + pixel_level=True) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + exclude_classes = functools.partial( + exclude_bad_classes, new_labels=get_post_exclusion_labels()) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(exclude_classes, train_iter) + train_iter = map(shard_batches, train_iter) + + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + eval_iter = map(exclude_classes, eval_iter) + eval_iter = map(shard_batches, eval_iter) + + if target_size is None: + input_shape = (-1, 1024, 2048, 3) + else: + input_shape = (-1,) + tuple(target_size) + (3,) + + meta_data = { + 'num_classes': + len([c.id for c in CLASSES if not c.ignore_in_eval]), + 'input_shape': + input_shape, + 'num_train_examples': + dataset_utils.get_num_examples('cityscapes', train_split), + 'num_eval_examples': + dataset_utils.get_num_examples('cityscapes', 'validation'), + 'input_dtype': + getattr(jnp, dtype_str), + 'target_is_onehot': + False, + 'class_names': + get_class_names(), + 'class_colors': + get_class_colors(), + 'class_proportions': + get_class_proportions(), + } + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) diff --git a/scenic/dataset_lib/coco_dataset/__init__.py b/scenic/dataset_lib/coco_dataset/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/dataset_lib/coco_dataset/coco_eval.py b/scenic/dataset_lib/coco_dataset/coco_eval.py new file mode 100644 index 0000000000000000000000000000000000000000..6d3690ab3421a8691a7b091774b49f37dfa21072 --- /dev/null +++ b/scenic/dataset_lib/coco_dataset/coco_eval.py @@ -0,0 +1,362 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""COCO evaluation metrics based on pycocotools. + +Implementation is based on +https://github.com/google/flax/blob/ac5e46ed448f4c6801c35d15eb15f4638167d8a1/examples/retinanet/coco_eval.py + +""" + +import collections +import contextlib +import functools +import io +import json +import os +import tempfile +from typing import Any, Dict, List, Optional, Set +import zipfile + +from absl import logging +import jax +import numpy as np +import PIL +from pycocotools.coco import COCO +from pycocotools.cocoeval import COCOeval + + +from tensorflow.io import gfile + +COCO_ANNOTATIONS_PATH = os.path.join( + os.path.dirname(__file__), + 'data', + 'instances_val2017.json') + +PANOPTIC_ANNOTATIONS_PATH = os.path.join( + os.path.dirname(__file__), + 'data', + 'panoptic_val2017.json') + +PANOPTIC_CATEGORIES_PATH = os.path.join( + os.path.dirname(__file__), + 'data', + 'panoptic_coco_categories.json') + +PANOPTIC_ANNOTATIONS_DIR = ( + 'panoptic_annotations_trainval2017') + + +@functools.lru_cache(maxsize=1) +def _load_json(path, mode='r'): + """Loading json file.""" + + + with gfile.GFile(path, mode) as f: + return json.load(f) + + +class UniversalCOCO(COCO): + """Extends the COCO API to (optionally) support panoptic annotations.""" + + def __init__(self, annotation_file: Optional[str] = None): + """Constructor of Microsoft COCO helper class. + + Args: + annotation_file: path to annotation file. + """ + self.annotation_file = annotation_file + self.reload_ground_truth() + + def reload_ground_truth(self, included_image_ids: Optional[List[int]] = None): + """Reload GT annotations, optionally just a subset.""" + self.dataset, self.anns, self.cats, self.imgs = {}, {}, {}, {} + self.imgToAnns = collections.defaultdict(list) # pylint: disable=invalid-name + self.catToImgs = collections.defaultdict(list) # pylint: disable=invalid-name + if self.annotation_file is not None: + dataset = _load_json(self.annotation_file) + assert isinstance( + dataset, dict), 'annotation file format {} not supported'.format( + type(dataset)) + + if 'segments_info' in dataset['annotations'][0]: + # Dataset is in panoptic format. Translate to standard format: + dataset['annotations'] = _panoptic_to_standard_annotations( + dataset['annotations']) + + if 'iscrowd' not in dataset['annotations'][0]: + # Dataset is in LVIS format. Add missing 'iscrowd' field": + for image_annotation in dataset['annotations']: + image_annotation['iscrowd'] = 0 + + # Subselect included image IDs: + if included_image_ids is not None: + included_image_ids = set(included_image_ids) + logging.warn('Using only a subset of validation set: %s of %s images.', + len(included_image_ids), len(dataset['images'])) + dataset['images'] = [ + a for a in dataset['images'] if a['id'] in included_image_ids] + dataset['annotations'] = [ + a for a in dataset['annotations'] + if a['image_id'] in included_image_ids] + + self.dataset = dataset + self.createIndex() + + +def _panoptic_to_standard_annotations(annotations): + """Translates panoptic annotations to standard annotations. + + Panoptic annotations have one extra level of nesting compared to + detection annotations (see https://cocodataset.org/#format-data), which + we remove here. Also see + pycocotools/panopticapi/converters/panoptic2detection_coco_format.py + for reference regarding the conversion. Here, we do not convert the + segmentation masks, since they are not required for the detection + metric. + + Args: + annotations: Dict with panoptic annotations loaded from JSON. + + Returns: + Updated annotations dict in standard COCO format. + """ + + object_annotations = [] + for image_annotation in annotations: + for object_annotation in image_annotation['segments_info']: + object_annotations.append({ + 'image_id': image_annotation['image_id'], + 'id': object_annotation['id'], + 'category_id': object_annotation['category_id'], + 'iscrowd': object_annotation['iscrowd'], + 'bbox': object_annotation['bbox'], + 'area': object_annotation['area'], + }) + return object_annotations + + +class DetectionEvaluator(): + """Main evaluator class.""" + + def __init__(self, + annotations_loc: Optional[str] = None, + threshold: float = 0.05, + disable_output: bool = True): + """Initializes a DetectionEvaluator object. + + Args: + annotations_loc: a path towards the .json files storing the COCO/2014 + ground truths for object detection. To get the annotations, please + download the relevant files from https://cocodataset.org/#download + threshold: a scalar which indicates the lower threshold (inclusive) for + the scores. Anything below this value will be removed. + disable_output: if True disables the output produced by the COCO API + """ + self.annotations = [] + self.annotated_img_ids = [] + self.threshold = threshold + self.disable_output = disable_output + if annotations_loc is None: + annotations_loc = COCO_ANNOTATIONS_PATH + + if self.disable_output: + with open(os.devnull, 'w') as devnull: + with contextlib.redirect_stdout(devnull): + self.coco = UniversalCOCO(annotations_loc) + else: + self.coco = UniversalCOCO(annotations_loc) + + # Dict to translate model labels to COCO category IDs: + self.label_to_coco_id = { + i: cat['id'] for i, cat in enumerate(self.coco.dataset['categories'])} + + @staticmethod + def construct_result_dict(coco_metrics): + """Packs the COCOEval results into a dictionary. + + Args: + coco_metrics: an array of length 12, as returned by `COCOeval.summarize()` + Returns: + A dictionary which contains all the COCO metrics. For more details, + visit: https://cocodataset.org/#detection-eval. + """ + return { + 'AP': coco_metrics[0], + 'AP_50': coco_metrics[1], + 'AP_75': coco_metrics[2], + 'AP_small': coco_metrics[3], + 'AP_medium': coco_metrics[4], + 'AP_large': coco_metrics[5], + 'AR_max_1': coco_metrics[6], + 'AR_max_10': coco_metrics[7], + 'AR_max_100': coco_metrics[8], + 'AR_small': coco_metrics[9], + 'AR_medium': coco_metrics[10], + 'AR_large': coco_metrics[11] + } + + def clear_annotations(self): + """Clears the annotations collected in this object. + + It is important to call this method either at the end or at the beginning + of a new evaluation round (or both). Otherwise, previous model inferences + will skew the results due to residual annotations. + """ + self.annotations.clear() + self.annotated_img_ids.clear() + + def extract_classifications(self, bboxes, scores): + """Extracts the label for each bbox, and sorts the results by score. + + More specifically, after extracting each bbox's label, the bboxes and + scores are sorted in descending order based on score. The scores which fall + below `threshold` are removed. + Args: + bboxes: a matrix of the shape (|B|, 4), where |B| is the number of + bboxes; each row contains the `[x1, y1, x2, y2]` of the bbox + scores: a matrix of the shape (|B|, K), where `K` is the number of + classes in the object detection task + Returns: + A tuple consisting of the bboxes, a vector of length |B| containing + the label of each of the anchors, and a vector of length |B| containing + the label score. All elements are sorted in descending order relative + to the score. + """ + # Extract the labels and max score for each anchor + labels = np.argmax(scores, axis=1) + + # Get the score associated to each anchor's label + scores = scores[np.arange(labels.shape[0]), labels] + + # Apply the threshold + kept_idx = np.where(scores >= self.threshold)[0] + scores = scores[kept_idx] + labels = labels[kept_idx] + bboxes = bboxes[kept_idx] + + # Sort everything in descending order and return + sorted_idx = np.flip(np.argsort(scores, axis=0)) + scores = scores[sorted_idx] + labels = labels[sorted_idx] + bboxes = bboxes[sorted_idx] + + return bboxes, labels, scores + + def add_annotation(self, bboxes, scores, img_id): + """Add a single inference example as COCO annotation for later evaluation. + + Labels should not include a background/padding class, but only valid object + classes. + + Note that this method raises an exception if the `threshold` is too + high and thus eliminates all detections. + + Args: + bboxes: [num_objects, 4] array of bboxes in COCO format [x, y, w, h] in + absolute image coorinates. + scores: [num_objects, num_classes] array of scores (softmax outputs). + img_id: scalar COCO image ID. + """ + + # Get the sorted bboxes, labels and scores (threshold is applied here): + i_bboxes, i_labels, i_scores = self.extract_classifications( + bboxes, scores) + + if not i_bboxes.size: + raise ValueError('All objects were thresholded out.') + + # Iterate through the thresholded predictions and pack them in COCO format: + for bbox, label, score in zip(i_bboxes, i_labels, i_scores): + single_classification = { + 'image_id': img_id, + 'category_id': self.label_to_coco_id[label], + 'bbox': bbox.tolist(), + 'score': score + } + self.annotations.append(single_classification) + self.annotated_img_ids.append(img_id) + + def get_annotations_and_ids(self): + """Returns copies of `self.annotations` and `self.annotated_img_ids`. + + Returns: + Copies of `self.annotations` and `self.annotated_img_ids`. + """ + return self.annotations.copy(), self.annotated_img_ids.copy() + + def set_annotations_and_ids(self, annotations, ids): + """Sets the `self.annotations` and `self.annotated_img_ids`. + + This method should only be used when trying to compute the metrics across + hosts, where one host captures the data from everyone in an effort to + produce the entire dataset metrics. + Args: + annotations: the new `annotations` + ids: the new `annotated_img_ids` + """ + self.annotations = annotations + self.annotated_img_ids = ids + + def compute_coco_metrics(self, clear_annotations=False): + """Compute the COCO metrics for the collected annotations. + + Args: + clear_annotations: if True, clears the `self.annotations` + parameter after obtaining the COCO metrics + + Returns: + The COCO metrics as a dictionary, defining the following entries: + ``` + Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] + Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] + Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] + Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] + Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] + Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] + Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] + Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] + Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] + Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] + Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] + Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] + ``` + """ + def _run_eval(): + # Create prediction object for producing mAP metric values + pred_object = self.coco.loadRes(self.annotations) + + # Compute mAP + coco_eval = COCOeval(self.coco, pred_object, 'bbox') + coco_eval.params.imgIds = self.annotated_img_ids + coco_eval.evaluate() + coco_eval.accumulate() + coco_eval.summarize() + return coco_eval + + if self.disable_output: + with open(os.devnull, 'w') as devnull: + with contextlib.redirect_stdout(devnull): + coco_eval = _run_eval() + else: + coco_eval = _run_eval() + + # Clear annotations if requested + if clear_annotations: + self.clear_annotations() + + # Pack the results + return self.construct_result_dict(coco_eval.stats) + + diff --git a/scenic/dataset_lib/coco_dataset/coco_utils.py b/scenic/dataset_lib/coco_dataset/coco_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..1f5a23d35679cf7338c73e7d101a29ef0ffd6aca --- /dev/null +++ b/scenic/dataset_lib/coco_dataset/coco_utils.py @@ -0,0 +1,285 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Common utils for coco dataset.""" + +import collections +import json +from typing import Dict, Optional + +import immutabledict + + +ImmutableDict = immutabledict.immutabledict + +OBJECTS365_LABEL_MAP_PATH = ( + 'scenic/dataset_lib/coco_dataset/data/objects365_class_names.txt') +LVIS_LABEL_MAP_PATH = ( + 'scenic/dataset_lib/coco_dataset/data/lvis_label_map.json') +OI_LABEL_MAP_PATH = { + 'open_images_v4': ( + 'scenic/dataset_lib/coco_dataset/data/open_images_v4-classes.csv'), + # For open_images_v5_boxes_with_masks, we use the subset of classes that has + # segmentations. + 'open_images_v5_boxes_with_masks': ( + 'scenic/dataset_lib/coco_dataset/data/' + 'open_images_v5-classes-segmentation.csv'), + 'open_images_v5': ( + 'scenic/dataset_lib/coco_dataset/data/open_images_v5-classes.csv'), +} + +COCO_2017_THINGS = { + 1: 'person', + 2: 'bicycle', + 3: 'car', + 4: 'motorcycle', + 5: 'airplane', + 6: 'bus', + 7: 'train', + 8: 'truck', + 9: 'boat', + 10: 'traffic light', + 11: 'fire hydrant', + 12: 'stop sign', + 13: 'parking meter', + 14: 'bench', + 15: 'bird', + 16: 'cat', + 17: 'dog', + 18: 'horse', + 19: 'sheep', + 20: 'cow', + 21: 'elephant', + 22: 'bear', + 23: 'zebra', + 24: 'giraffe', + 25: 'backpack', + 26: 'umbrella', + 27: 'handbag', + 28: 'tie', + 29: 'suitcase', + 30: 'frisbee', + 31: 'skis', + 32: 'snowboard', + 33: 'sports ball', + 34: 'kite', + 35: 'baseball bat', + 36: 'baseball glove', + 37: 'skateboard', + 38: 'surfboard', + 39: 'tennis racket', + 40: 'bottle', + 41: 'wine glass', + 42: 'cup', + 43: 'fork', + 44: 'knife', + 45: 'spoon', + 46: 'bowl', + 47: 'banana', + 48: 'apple', + 49: 'sandwich', + 50: 'orange', + 51: 'broccoli', + 52: 'carrot', + 53: 'hot dog', + 54: 'pizza', + 55: 'donut', + 56: 'cake', + 57: 'chair', + 58: 'couch', + 59: 'potted plant', + 60: 'bed', + 61: 'dining table', + 62: 'toilet', + 63: 'tv', + 64: 'laptop', + 65: 'mouse', + 66: 'remote', + 67: 'keyboard', + 68: 'cell phone', + 69: 'microwave', + 70: 'oven', + 71: 'toaster', + 72: 'sink', + 73: 'refrigerator', + 74: 'book', + 75: 'clock', + 76: 'vase', + 77: 'scissors', + 78: 'teddy bear', + 79: 'hair drier', + 80: 'toothbrush', +} + +COCO_2017_STUFF = { + 81: 'banner', + 82: 'blanket', + 83: 'bridge', + 84: 'cardboard', + 85: 'counter', + 86: 'curtain', + 87: 'door-stuff', + 88: 'floor-wood', + 89: 'flower', + 90: 'fruit', + 91: 'gravel', + 92: 'house', + 93: 'light', + 94: 'mirror-stuff', + 95: 'net', + 96: 'pillow', + 97: 'platform', + 98: 'playingfield', + 99: 'railroad', + 100: 'river', + 101: 'road', + 102: 'roof', + 103: 'sand', + 104: 'sea', + 105: 'shelf', + 106: 'snow', + 107: 'stairs', + 108: 'tent', + 109: 'towel', + 110: 'wall-brick', + 111: 'wall-stone', + 112: 'wall-tile', + 113: 'wall-wood', + 114: 'water-other', + 115: 'window-blind', + 116: 'window-other', + 117: 'tree-merged', + 118: 'fence-merged', + 119: 'ceiling-merged', + 120: 'sky-other-merged', + 121: 'cabinet-merged', + 122: 'table-merged', + 123: 'floor-other-merged', + 124: 'pavement-merged', + 125: 'mountain-merged', + 126: 'grass-merged', + 127: 'dirt-merged', + 128: 'paper-merged', + 129: 'food-other-merged', + 130: 'building-other-merged', + 131: 'rock-merged', + 132: 'wall-other-merged', + 133: 'rug-merged', +} + +# Obtained from https://bvisionweb1.cs.unc.edu/licheng/referit/data/refcoco.zip. +# (Also see dataset site at https://github.com/lichengunc/refer.) +REF_COCO = { + 1: 'person', + 2: 'bicycle', + 3: 'car', + 4: 'motorcycle', + 5: 'airplane', + 6: 'bus', + 7: 'train', + 8: 'truck', + 9: 'boat', + 10: 'traffic light', + 11: 'fire hydrant', + 13: 'stop sign', + 14: 'parking meter', + 15: 'bench', + 16: 'bird', + 17: 'cat', + 18: 'dog', + 19: 'horse', + 20: 'sheep', + 21: 'cow', + 22: 'elephant', + 23: 'bear', + 24: 'zebra', + 25: 'giraffe', + 27: 'backpack', + 28: 'umbrella', + 31: 'handbag', + 32: 'tie', + 33: 'suitcase', + 34: 'frisbee', + 35: 'skis', + 36: 'snowboard', + 37: 'sports ball', + 38: 'kite', + 39: 'baseball bat', + 40: 'baseball glove', + 41: 'skateboard', + 42: 'surfboard', + 43: 'tennis racket', + 44: 'bottle', + 46: 'wine glass', + 47: 'cup', + 48: 'fork', + 49: 'knife', + 50: 'spoon', + 51: 'bowl', + 52: 'banana', + 53: 'apple', + 54: 'sandwich', + 55: 'orange', + 56: 'broccoli', + 57: 'carrot', + 58: 'hot dog', + 59: 'pizza', + 60: 'donut', + 61: 'cake', + 62: 'chair', + 63: 'couch', + 64: 'potted plant', + 65: 'bed', + 67: 'dining table', + 70: 'toilet', + 72: 'tv', + 73: 'laptop', + 74: 'mouse', + 75: 'remote', + 76: 'keyboard', + 77: 'cell phone', + 78: 'microwave', + 79: 'oven', + 80: 'toaster', + 81: 'sink', + 82: 'refrigerator', + 84: 'book', + 85: 'clock', + 86: 'vase', + 87: 'scissors', + 88: 'teddy bear', + 89: 'hair drier', + 90: 'toothbrush', +} + + +def get_label_map(tfds_name: str) -> Dict[int, str]: + """Returns a {label: name} dict for the COCO dataset.""" + + if tfds_name == 'coco/2017': + return {0: 'padding', **COCO_2017_THINGS} + elif tfds_name == 'coco/2017_panoptic': + return {0: 'padding', **COCO_2017_THINGS, **COCO_2017_STUFF} + elif tfds_name == 'ref_coco': + return {0: 'padding', **REF_COCO} + elif tfds_name == 'lvis': + return get_lvis_label_map() + elif tfds_name in ['objects365', 'scenic:objects365']: + return get_objects365_label_map() + elif tfds_name.startswith('open_images'): + return get_openimages_label_map(tfds_name) + else: + raise ValueError(f'Unsupported TFDS name: {tfds_name}') + + diff --git a/scenic/dataset_lib/coco_dataset/data/__init__.py b/scenic/dataset_lib/coco_dataset/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/dataset_lib/coco_dataset/data/ade20k_panoptic_val.json b/scenic/dataset_lib/coco_dataset/data/ade20k_panoptic_val.json new file mode 100644 index 0000000000000000000000000000000000000000..0bc013833f38adc6a6082bdb088318e47cb2dd52 --- /dev/null +++ b/scenic/dataset_lib/coco_dataset/data/ade20k_panoptic_val.json @@ -0,0 +1 @@ +{"images": [{"id": "ADE_val_00000001", "file_name": "ADE_val_00000001.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000002", "file_name": "ADE_val_00000002.jpg", "width": 500, "height": 364}, {"id": "ADE_val_00000003", "file_name": "ADE_val_00000003.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00000004", "file_name": "ADE_val_00000004.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000005", "file_name": "ADE_val_00000005.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00000006", "file_name": "ADE_val_00000006.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000007", "file_name": "ADE_val_00000007.jpg", "width": 500, "height": 342}, {"id": "ADE_val_00000008", "file_name": "ADE_val_00000008.jpg", "width": 375, "height": 500}, {"id": "ADE_val_00000009", "file_name": "ADE_val_00000009.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000010", "file_name": "ADE_val_00000010.jpg", "width": 500, "height": 345}, {"id": "ADE_val_00000011", "file_name": "ADE_val_00000011.jpg", "width": 478, "height": 320}, {"id": "ADE_val_00000012", "file_name": "ADE_val_00000012.jpg", "width": 568, "height": 400}, {"id": "ADE_val_00000013", "file_name": "ADE_val_00000013.jpg", "width": 430, "height": 430}, {"id": "ADE_val_00000014", "file_name": "ADE_val_00000014.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000015", "file_name": "ADE_val_00000015.jpg", "width": 512, "height": 682}, {"id": "ADE_val_00000016", "file_name": "ADE_val_00000016.jpg", "width": 480, "height": 640}, {"id": "ADE_val_00000017", "file_name": "ADE_val_00000017.jpg", "width": 204, "height": 380}, {"id": "ADE_val_00000018", "file_name": "ADE_val_00000018.jpg", "width": 320, "height": 240}, {"id": "ADE_val_00000019", "file_name": "ADE_val_00000019.jpg", "width": 600, "height": 402}, {"id": "ADE_val_00000020", "file_name": "ADE_val_00000020.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000021", "file_name": "ADE_val_00000021.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000022", "file_name": "ADE_val_00000022.jpg", "width": 400, "height": 365}, {"id": "ADE_val_00000023", "file_name": "ADE_val_00000023.jpg", "width": 267, "height": 400}, {"id": "ADE_val_00000024", "file_name": "ADE_val_00000024.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000025", "file_name": "ADE_val_00000025.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000026", "file_name": "ADE_val_00000026.jpg", "width": 500, "height": 346}, {"id": "ADE_val_00000027", "file_name": "ADE_val_00000027.jpg", "width": 527, "height": 512}, {"id": "ADE_val_00000028", "file_name": "ADE_val_00000028.jpg", "width": 512, "height": 767}, {"id": "ADE_val_00000029", "file_name": "ADE_val_00000029.jpg", "width": 324, "height": 335}, {"id": "ADE_val_00000030", "file_name": "ADE_val_00000030.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000031", "file_name": "ADE_val_00000031.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000032", "file_name": "ADE_val_00000032.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000033", "file_name": "ADE_val_00000033.jpg", "width": 320, "height": 240}, {"id": "ADE_val_00000034", "file_name": "ADE_val_00000034.jpg", "width": 758, "height": 512}, {"id": "ADE_val_00000035", "file_name": "ADE_val_00000035.jpg", "width": 916, "height": 512}, {"id": "ADE_val_00000036", "file_name": "ADE_val_00000036.jpg", "width": 400, "height": 400}, {"id": "ADE_val_00000037", "file_name": "ADE_val_00000037.jpg", "width": 283, "height": 397}, {"id": "ADE_val_00000038", "file_name": "ADE_val_00000038.jpg", "width": 333, "height": 214}, {"id": "ADE_val_00000039", "file_name": "ADE_val_00000039.jpg", "width": 316, "height": 466}, {"id": "ADE_val_00000040", "file_name": "ADE_val_00000040.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000041", "file_name": "ADE_val_00000041.jpg", "width": 640, "height": 427}, {"id": "ADE_val_00000042", "file_name": "ADE_val_00000042.jpg", "width": 257, "height": 199}, {"id": "ADE_val_00000043", "file_name": "ADE_val_00000043.jpg", "width": 430, "height": 296}, {"id": "ADE_val_00000044", "file_name": "ADE_val_00000044.jpg", "width": 765, "height": 512}, {"id": "ADE_val_00000045", "file_name": "ADE_val_00000045.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000046", "file_name": "ADE_val_00000046.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000047", "file_name": "ADE_val_00000047.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000048", "file_name": "ADE_val_00000048.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000049", "file_name": "ADE_val_00000049.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000050", "file_name": "ADE_val_00000050.jpg", "width": 560, "height": 300}, {"id": "ADE_val_00000051", "file_name": "ADE_val_00000051.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000052", "file_name": "ADE_val_00000052.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000053", "file_name": "ADE_val_00000053.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000054", "file_name": "ADE_val_00000054.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000055", "file_name": "ADE_val_00000055.jpg", "width": 680, "height": 512}, {"id": "ADE_val_00000056", "file_name": "ADE_val_00000056.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000057", "file_name": "ADE_val_00000057.jpg", "width": 641, "height": 512}, {"id": "ADE_val_00000058", "file_name": "ADE_val_00000058.jpg", "width": 375, "height": 500}, {"id": "ADE_val_00000059", "file_name": "ADE_val_00000059.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000060", "file_name": "ADE_val_00000060.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000061", "file_name": "ADE_val_00000061.jpg", "width": 350, "height": 233}, {"id": "ADE_val_00000062", "file_name": "ADE_val_00000062.jpg", "width": 240, "height": 320}, {"id": "ADE_val_00000063", "file_name": "ADE_val_00000063.jpg", "width": 504, "height": 378}, {"id": "ADE_val_00000064", "file_name": "ADE_val_00000064.jpg", "width": 600, "height": 450}, {"id": "ADE_val_00000065", "file_name": "ADE_val_00000065.jpg", "width": 623, "height": 481}, {"id": "ADE_val_00000066", "file_name": "ADE_val_00000066.jpg", "width": 360, "height": 480}, {"id": "ADE_val_00000067", "file_name": "ADE_val_00000067.jpg", "width": 270, "height": 360}, {"id": "ADE_val_00000068", "file_name": "ADE_val_00000068.jpg", "width": 580, "height": 435}, {"id": "ADE_val_00000069", "file_name": "ADE_val_00000069.jpg", "width": 252, "height": 222}, {"id": "ADE_val_00000070", "file_name": "ADE_val_00000070.jpg", "width": 200, "height": 300}, {"id": "ADE_val_00000071", "file_name": "ADE_val_00000071.jpg", "width": 220, "height": 290}, {"id": "ADE_val_00000072", "file_name": "ADE_val_00000072.jpg", "width": 693, "height": 512}, {"id": "ADE_val_00000073", "file_name": "ADE_val_00000073.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000074", "file_name": "ADE_val_00000074.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000075", "file_name": "ADE_val_00000075.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000076", "file_name": "ADE_val_00000076.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000077", "file_name": "ADE_val_00000077.jpg", "width": 400, "height": 600}, {"id": "ADE_val_00000078", "file_name": "ADE_val_00000078.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000079", "file_name": "ADE_val_00000079.jpg", "width": 765, "height": 512}, {"id": "ADE_val_00000080", "file_name": "ADE_val_00000080.jpg", "width": 239, "height": 320}, {"id": "ADE_val_00000081", "file_name": "ADE_val_00000081.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000082", "file_name": "ADE_val_00000082.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000083", "file_name": "ADE_val_00000083.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000084", "file_name": "ADE_val_00000084.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000085", "file_name": "ADE_val_00000085.jpg", "width": 300, "height": 300}, {"id": "ADE_val_00000086", "file_name": "ADE_val_00000086.jpg", "width": 294, "height": 294}, {"id": "ADE_val_00000087", "file_name": "ADE_val_00000087.jpg", "width": 658, "height": 512}, {"id": "ADE_val_00000088", "file_name": "ADE_val_00000088.jpg", "width": 233, "height": 300}, {"id": "ADE_val_00000089", "file_name": "ADE_val_00000089.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00000090", "file_name": "ADE_val_00000090.jpg", "width": 282, "height": 512}, {"id": "ADE_val_00000091", "file_name": "ADE_val_00000091.jpg", "width": 512, "height": 771}, {"id": "ADE_val_00000092", "file_name": "ADE_val_00000092.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000093", "file_name": "ADE_val_00000093.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000094", "file_name": "ADE_val_00000094.jpg", "width": 512, "height": 763}, {"id": "ADE_val_00000095", "file_name": "ADE_val_00000095.jpg", "width": 298, "height": 449}, {"id": "ADE_val_00000096", "file_name": "ADE_val_00000096.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000097", "file_name": "ADE_val_00000097.jpg", "width": 512, "height": 768}, {"id": "ADE_val_00000098", "file_name": "ADE_val_00000098.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000099", "file_name": "ADE_val_00000099.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000100", "file_name": "ADE_val_00000100.jpg", "width": 512, "height": 689}, {"id": "ADE_val_00000101", "file_name": "ADE_val_00000101.jpg", "width": 512, "height": 781}, {"id": "ADE_val_00000102", "file_name": "ADE_val_00000102.jpg", "width": 400, "height": 600}, {"id": "ADE_val_00000103", "file_name": "ADE_val_00000103.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000104", "file_name": "ADE_val_00000104.jpg", "width": 512, "height": 767}, {"id": "ADE_val_00000105", "file_name": "ADE_val_00000105.jpg", "width": 710, "height": 512}, {"id": "ADE_val_00000106", "file_name": "ADE_val_00000106.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000107", "file_name": "ADE_val_00000107.jpg", "width": 688, "height": 512}, {"id": "ADE_val_00000108", "file_name": "ADE_val_00000108.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000109", "file_name": "ADE_val_00000109.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000110", "file_name": "ADE_val_00000110.jpg", "width": 346, "height": 231}, {"id": "ADE_val_00000111", "file_name": "ADE_val_00000111.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000112", "file_name": "ADE_val_00000112.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000113", "file_name": "ADE_val_00000113.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000114", "file_name": "ADE_val_00000114.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000115", "file_name": "ADE_val_00000115.jpg", "width": 600, "height": 450}, {"id": "ADE_val_00000116", "file_name": "ADE_val_00000116.jpg", "width": 273, "height": 204}, {"id": "ADE_val_00000117", "file_name": "ADE_val_00000117.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000118", "file_name": "ADE_val_00000118.jpg", "width": 725, "height": 512}, {"id": "ADE_val_00000119", "file_name": "ADE_val_00000119.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000120", "file_name": "ADE_val_00000120.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000121", "file_name": "ADE_val_00000121.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000122", "file_name": "ADE_val_00000122.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000123", "file_name": "ADE_val_00000123.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000124", "file_name": "ADE_val_00000124.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000125", "file_name": "ADE_val_00000125.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000126", "file_name": "ADE_val_00000126.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000127", "file_name": "ADE_val_00000127.jpg", "width": 785, "height": 512}, {"id": "ADE_val_00000128", "file_name": "ADE_val_00000128.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000129", "file_name": "ADE_val_00000129.jpg", "width": 750, "height": 496}, {"id": "ADE_val_00000130", "file_name": "ADE_val_00000130.jpg", "width": 769, "height": 512}, {"id": "ADE_val_00000131", "file_name": "ADE_val_00000131.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000132", "file_name": "ADE_val_00000132.jpg", "width": 769, "height": 512}, {"id": "ADE_val_00000133", "file_name": "ADE_val_00000133.jpg", "width": 512, "height": 682}, {"id": "ADE_val_00000134", "file_name": "ADE_val_00000134.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000135", "file_name": "ADE_val_00000135.jpg", "width": 773, "height": 512}, {"id": "ADE_val_00000136", "file_name": "ADE_val_00000136.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000137", "file_name": "ADE_val_00000137.jpg", "width": 450, "height": 300}, {"id": "ADE_val_00000138", "file_name": "ADE_val_00000138.jpg", "width": 512, "height": 768}, {"id": "ADE_val_00000139", "file_name": "ADE_val_00000139.jpg", "width": 750, "height": 495}, {"id": "ADE_val_00000140", "file_name": "ADE_val_00000140.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000141", "file_name": "ADE_val_00000141.jpg", "width": 760, "height": 512}, {"id": "ADE_val_00000142", "file_name": "ADE_val_00000142.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000143", "file_name": "ADE_val_00000143.jpg", "width": 771, "height": 512}, {"id": "ADE_val_00000144", "file_name": "ADE_val_00000144.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000145", "file_name": "ADE_val_00000145.jpg", "width": 240, "height": 320}, {"id": "ADE_val_00000146", "file_name": "ADE_val_00000146.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000147", "file_name": "ADE_val_00000147.jpg", "width": 782, "height": 512}, {"id": "ADE_val_00000148", "file_name": "ADE_val_00000148.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00000149", "file_name": "ADE_val_00000149.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000150", "file_name": "ADE_val_00000150.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000151", "file_name": "ADE_val_00000151.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000152", "file_name": "ADE_val_00000152.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000153", "file_name": "ADE_val_00000153.jpg", "width": 1128, "height": 512}, {"id": "ADE_val_00000154", "file_name": "ADE_val_00000154.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000155", "file_name": "ADE_val_00000155.jpg", "width": 338, "height": 254}, {"id": "ADE_val_00000156", "file_name": "ADE_val_00000156.jpg", "width": 928, "height": 512}, {"id": "ADE_val_00000157", "file_name": "ADE_val_00000157.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000158", "file_name": "ADE_val_00000158.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000159", "file_name": "ADE_val_00000159.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00000160", "file_name": "ADE_val_00000160.jpg", "width": 757, "height": 512}, {"id": "ADE_val_00000161", "file_name": "ADE_val_00000161.jpg", "width": 740, "height": 512}, {"id": "ADE_val_00000162", "file_name": "ADE_val_00000162.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000163", "file_name": "ADE_val_00000163.jpg", "width": 640, "height": 426}, {"id": "ADE_val_00000164", "file_name": "ADE_val_00000164.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000165", "file_name": "ADE_val_00000165.jpg", "width": 631, "height": 512}, {"id": "ADE_val_00000166", "file_name": "ADE_val_00000166.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000167", "file_name": "ADE_val_00000167.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000168", "file_name": "ADE_val_00000168.jpg", "width": 747, "height": 512}, {"id": "ADE_val_00000169", "file_name": "ADE_val_00000169.jpg", "width": 640, "height": 427}, {"id": "ADE_val_00000170", "file_name": "ADE_val_00000170.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000171", "file_name": "ADE_val_00000171.jpg", "width": 640, "height": 428}, {"id": "ADE_val_00000172", "file_name": "ADE_val_00000172.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000173", "file_name": "ADE_val_00000173.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000174", "file_name": "ADE_val_00000174.jpg", "width": 640, "height": 512}, {"id": "ADE_val_00000175", "file_name": "ADE_val_00000175.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000176", "file_name": "ADE_val_00000176.jpg", "width": 744, "height": 512}, {"id": "ADE_val_00000177", "file_name": "ADE_val_00000177.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000178", "file_name": "ADE_val_00000178.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000179", "file_name": "ADE_val_00000179.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000180", "file_name": "ADE_val_00000180.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000181", "file_name": "ADE_val_00000181.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000182", "file_name": "ADE_val_00000182.jpg", "width": 802, "height": 512}, {"id": "ADE_val_00000183", "file_name": "ADE_val_00000183.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000184", "file_name": "ADE_val_00000184.jpg", "width": 512, "height": 770}, {"id": "ADE_val_00000185", "file_name": "ADE_val_00000185.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000186", "file_name": "ADE_val_00000186.jpg", "width": 240, "height": 180}, {"id": "ADE_val_00000187", "file_name": "ADE_val_00000187.jpg", "width": 290, "height": 255}, {"id": "ADE_val_00000188", "file_name": "ADE_val_00000188.jpg", "width": 300, "height": 214}, {"id": "ADE_val_00000189", "file_name": "ADE_val_00000189.jpg", "width": 300, "height": 207}, {"id": "ADE_val_00000190", "file_name": "ADE_val_00000190.jpg", "width": 565, "height": 309}, {"id": "ADE_val_00000191", "file_name": "ADE_val_00000191.jpg", "width": 228, "height": 233}, {"id": "ADE_val_00000192", "file_name": "ADE_val_00000192.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00000193", "file_name": "ADE_val_00000193.jpg", "width": 530, "height": 360}, {"id": "ADE_val_00000194", "file_name": "ADE_val_00000194.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000195", "file_name": "ADE_val_00000195.jpg", "width": 616, "height": 462}, {"id": "ADE_val_00000196", "file_name": "ADE_val_00000196.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000197", "file_name": "ADE_val_00000197.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000198", "file_name": "ADE_val_00000198.jpg", "width": 914, "height": 512}, {"id": "ADE_val_00000199", "file_name": "ADE_val_00000199.jpg", "width": 350, "height": 233}, {"id": "ADE_val_00000200", "file_name": "ADE_val_00000200.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000201", "file_name": "ADE_val_00000201.jpg", "width": 1243, "height": 512}, {"id": "ADE_val_00000202", "file_name": "ADE_val_00000202.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000203", "file_name": "ADE_val_00000203.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000204", "file_name": "ADE_val_00000204.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000205", "file_name": "ADE_val_00000205.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000206", "file_name": "ADE_val_00000206.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000207", "file_name": "ADE_val_00000207.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000208", "file_name": "ADE_val_00000208.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000209", "file_name": "ADE_val_00000209.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000210", "file_name": "ADE_val_00000210.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000211", "file_name": "ADE_val_00000211.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000212", "file_name": "ADE_val_00000212.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000213", "file_name": "ADE_val_00000213.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000214", "file_name": "ADE_val_00000214.jpg", "width": 280, "height": 227}, {"id": "ADE_val_00000215", "file_name": "ADE_val_00000215.jpg", "width": 694, "height": 390}, {"id": "ADE_val_00000216", "file_name": "ADE_val_00000216.jpg", "width": 450, "height": 600}, {"id": "ADE_val_00000217", "file_name": "ADE_val_00000217.jpg", "width": 794, "height": 512}, {"id": "ADE_val_00000218", "file_name": "ADE_val_00000218.jpg", "width": 500, "height": 430}, {"id": "ADE_val_00000219", "file_name": "ADE_val_00000219.jpg", "width": 300, "height": 240}, {"id": "ADE_val_00000220", "file_name": "ADE_val_00000220.jpg", "width": 286, "height": 254}, {"id": "ADE_val_00000221", "file_name": "ADE_val_00000221.jpg", "width": 640, "height": 426}, {"id": "ADE_val_00000222", "file_name": "ADE_val_00000222.jpg", "width": 302, "height": 402}, {"id": "ADE_val_00000223", "file_name": "ADE_val_00000223.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000224", "file_name": "ADE_val_00000224.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000225", "file_name": "ADE_val_00000225.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000226", "file_name": "ADE_val_00000226.jpg", "width": 648, "height": 441}, {"id": "ADE_val_00000227", "file_name": "ADE_val_00000227.jpg", "width": 640, "height": 491}, {"id": "ADE_val_00000228", "file_name": "ADE_val_00000228.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00000229", "file_name": "ADE_val_00000229.jpg", "width": 512, "height": 756}, {"id": "ADE_val_00000230", "file_name": "ADE_val_00000230.jpg", "width": 400, "height": 266}, {"id": "ADE_val_00000231", "file_name": "ADE_val_00000231.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00000232", "file_name": "ADE_val_00000232.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00000233", "file_name": "ADE_val_00000233.jpg", "width": 512, "height": 740}, {"id": "ADE_val_00000234", "file_name": "ADE_val_00000234.jpg", "width": 1170, "height": 512}, {"id": "ADE_val_00000235", "file_name": "ADE_val_00000235.jpg", "width": 350, "height": 467}, {"id": "ADE_val_00000236", "file_name": "ADE_val_00000236.jpg", "width": 533, "height": 400}, {"id": "ADE_val_00000237", "file_name": "ADE_val_00000237.jpg", "width": 512, "height": 754}, {"id": "ADE_val_00000238", "file_name": "ADE_val_00000238.jpg", "width": 540, "height": 405}, {"id": "ADE_val_00000239", "file_name": "ADE_val_00000239.jpg", "width": 600, "height": 400}, {"id": "ADE_val_00000240", "file_name": "ADE_val_00000240.jpg", "width": 512, "height": 605}, {"id": "ADE_val_00000241", "file_name": "ADE_val_00000241.jpg", "width": 533, "height": 400}, {"id": "ADE_val_00000242", "file_name": "ADE_val_00000242.jpg", "width": 384, "height": 257}, {"id": "ADE_val_00000243", "file_name": "ADE_val_00000243.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000244", "file_name": "ADE_val_00000244.jpg", "width": 569, "height": 512}, {"id": "ADE_val_00000245", "file_name": "ADE_val_00000245.jpg", "width": 632, "height": 512}, {"id": "ADE_val_00000246", "file_name": "ADE_val_00000246.jpg", "width": 690, "height": 455}, {"id": "ADE_val_00000247", "file_name": "ADE_val_00000247.jpg", "width": 350, "height": 232}, {"id": "ADE_val_00000248", "file_name": "ADE_val_00000248.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000249", "file_name": "ADE_val_00000249.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000250", "file_name": "ADE_val_00000250.jpg", "width": 472, "height": 352}, {"id": "ADE_val_00000251", "file_name": "ADE_val_00000251.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000252", "file_name": "ADE_val_00000252.jpg", "width": 300, "height": 222}, {"id": "ADE_val_00000253", "file_name": "ADE_val_00000253.jpg", "width": 636, "height": 512}, {"id": "ADE_val_00000254", "file_name": "ADE_val_00000254.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000255", "file_name": "ADE_val_00000255.jpg", "width": 420, "height": 325}, {"id": "ADE_val_00000256", "file_name": "ADE_val_00000256.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000257", "file_name": "ADE_val_00000257.jpg", "width": 493, "height": 375}, {"id": "ADE_val_00000258", "file_name": "ADE_val_00000258.jpg", "width": 800, "height": 488}, {"id": "ADE_val_00000259", "file_name": "ADE_val_00000259.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000260", "file_name": "ADE_val_00000260.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000261", "file_name": "ADE_val_00000261.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000262", "file_name": "ADE_val_00000262.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000263", "file_name": "ADE_val_00000263.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000264", "file_name": "ADE_val_00000264.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000265", "file_name": "ADE_val_00000265.jpg", "width": 648, "height": 486}, {"id": "ADE_val_00000266", "file_name": "ADE_val_00000266.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000267", "file_name": "ADE_val_00000267.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000268", "file_name": "ADE_val_00000268.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000269", "file_name": "ADE_val_00000269.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000270", "file_name": "ADE_val_00000270.jpg", "width": 410, "height": 327}, {"id": "ADE_val_00000271", "file_name": "ADE_val_00000271.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000272", "file_name": "ADE_val_00000272.jpg", "width": 512, "height": 684}, {"id": "ADE_val_00000273", "file_name": "ADE_val_00000273.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000274", "file_name": "ADE_val_00000274.jpg", "width": 684, "height": 512}, {"id": "ADE_val_00000275", "file_name": "ADE_val_00000275.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000276", "file_name": "ADE_val_00000276.jpg", "width": 525, "height": 394}, {"id": "ADE_val_00000277", "file_name": "ADE_val_00000277.jpg", "width": 500, "height": 462}, {"id": "ADE_val_00000278", "file_name": "ADE_val_00000278.jpg", "width": 739, "height": 512}, {"id": "ADE_val_00000279", "file_name": "ADE_val_00000279.jpg", "width": 432, "height": 576}, {"id": "ADE_val_00000280", "file_name": "ADE_val_00000280.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000281", "file_name": "ADE_val_00000281.jpg", "width": 257, "height": 256}, {"id": "ADE_val_00000282", "file_name": "ADE_val_00000282.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000283", "file_name": "ADE_val_00000283.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000284", "file_name": "ADE_val_00000284.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000285", "file_name": "ADE_val_00000285.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000286", "file_name": "ADE_val_00000286.jpg", "width": 906, "height": 512}, {"id": "ADE_val_00000287", "file_name": "ADE_val_00000287.jpg", "width": 480, "height": 640}, {"id": "ADE_val_00000288", "file_name": "ADE_val_00000288.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000289", "file_name": "ADE_val_00000289.jpg", "width": 212, "height": 189}, {"id": "ADE_val_00000290", "file_name": "ADE_val_00000290.jpg", "width": 509, "height": 426}, {"id": "ADE_val_00000291", "file_name": "ADE_val_00000291.jpg", "width": 739, "height": 512}, {"id": "ADE_val_00000292", "file_name": "ADE_val_00000292.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000293", "file_name": "ADE_val_00000293.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000294", "file_name": "ADE_val_00000294.jpg", "width": 600, "height": 450}, {"id": "ADE_val_00000295", "file_name": "ADE_val_00000295.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000296", "file_name": "ADE_val_00000296.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000297", "file_name": "ADE_val_00000297.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000298", "file_name": "ADE_val_00000298.jpg", "width": 886, "height": 500}, {"id": "ADE_val_00000299", "file_name": "ADE_val_00000299.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000300", "file_name": "ADE_val_00000300.jpg", "width": 470, "height": 470}, {"id": "ADE_val_00000301", "file_name": "ADE_val_00000301.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000302", "file_name": "ADE_val_00000302.jpg", "width": 378, "height": 234}, {"id": "ADE_val_00000303", "file_name": "ADE_val_00000303.jpg", "width": 512, "height": 682}, {"id": "ADE_val_00000304", "file_name": "ADE_val_00000304.jpg", "width": 674, "height": 512}, {"id": "ADE_val_00000305", "file_name": "ADE_val_00000305.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000306", "file_name": "ADE_val_00000306.jpg", "width": 848, "height": 512}, {"id": "ADE_val_00000307", "file_name": "ADE_val_00000307.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000308", "file_name": "ADE_val_00000308.jpg", "width": 365, "height": 365}, {"id": "ADE_val_00000309", "file_name": "ADE_val_00000309.jpg", "width": 480, "height": 640}, {"id": "ADE_val_00000310", "file_name": "ADE_val_00000310.jpg", "width": 662, "height": 512}, {"id": "ADE_val_00000311", "file_name": "ADE_val_00000311.jpg", "width": 612, "height": 512}, {"id": "ADE_val_00000312", "file_name": "ADE_val_00000312.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000313", "file_name": "ADE_val_00000313.jpg", "width": 512, "height": 529}, {"id": "ADE_val_00000314", "file_name": "ADE_val_00000314.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000315", "file_name": "ADE_val_00000315.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000316", "file_name": "ADE_val_00000316.jpg", "width": 770, "height": 512}, {"id": "ADE_val_00000317", "file_name": "ADE_val_00000317.jpg", "width": 512, "height": 707}, {"id": "ADE_val_00000318", "file_name": "ADE_val_00000318.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000319", "file_name": "ADE_val_00000319.jpg", "width": 512, "height": 545}, {"id": "ADE_val_00000320", "file_name": "ADE_val_00000320.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000321", "file_name": "ADE_val_00000321.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000322", "file_name": "ADE_val_00000322.jpg", "width": 654, "height": 512}, {"id": "ADE_val_00000323", "file_name": "ADE_val_00000323.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000324", "file_name": "ADE_val_00000324.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000325", "file_name": "ADE_val_00000325.jpg", "width": 680, "height": 512}, {"id": "ADE_val_00000326", "file_name": "ADE_val_00000326.jpg", "width": 537, "height": 403}, {"id": "ADE_val_00000327", "file_name": "ADE_val_00000327.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000328", "file_name": "ADE_val_00000328.jpg", "width": 480, "height": 640}, {"id": "ADE_val_00000329", "file_name": "ADE_val_00000329.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000330", "file_name": "ADE_val_00000330.jpg", "width": 200, "height": 265}, {"id": "ADE_val_00000331", "file_name": "ADE_val_00000331.jpg", "width": 682, "height": 512}, {"id": "ADE_val_00000332", "file_name": "ADE_val_00000332.jpg", "width": 765, "height": 512}, {"id": "ADE_val_00000333", "file_name": "ADE_val_00000333.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00000334", "file_name": "ADE_val_00000334.jpg", "width": 240, "height": 320}, {"id": "ADE_val_00000335", "file_name": "ADE_val_00000335.jpg", "width": 290, "height": 243}, {"id": "ADE_val_00000336", "file_name": "ADE_val_00000336.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000337", "file_name": "ADE_val_00000337.jpg", "width": 400, "height": 711}, {"id": "ADE_val_00000338", "file_name": "ADE_val_00000338.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000339", "file_name": "ADE_val_00000339.jpg", "width": 308, "height": 430}, {"id": "ADE_val_00000340", "file_name": "ADE_val_00000340.jpg", "width": 399, "height": 600}, {"id": "ADE_val_00000341", "file_name": "ADE_val_00000341.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000342", "file_name": "ADE_val_00000342.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000343", "file_name": "ADE_val_00000343.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000344", "file_name": "ADE_val_00000344.jpg", "width": 270, "height": 250}, {"id": "ADE_val_00000345", "file_name": "ADE_val_00000345.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000346", "file_name": "ADE_val_00000346.jpg", "width": 400, "height": 280}, {"id": "ADE_val_00000347", "file_name": "ADE_val_00000347.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00000348", "file_name": "ADE_val_00000348.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000349", "file_name": "ADE_val_00000349.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000350", "file_name": "ADE_val_00000350.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000351", "file_name": "ADE_val_00000351.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000352", "file_name": "ADE_val_00000352.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000353", "file_name": "ADE_val_00000353.jpg", "width": 765, "height": 512}, {"id": "ADE_val_00000354", "file_name": "ADE_val_00000354.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000355", "file_name": "ADE_val_00000355.jpg", "width": 500, "height": 334}, {"id": "ADE_val_00000356", "file_name": "ADE_val_00000356.jpg", "width": 512, "height": 618}, {"id": "ADE_val_00000357", "file_name": "ADE_val_00000357.jpg", "width": 400, "height": 266}, {"id": "ADE_val_00000358", "file_name": "ADE_val_00000358.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000359", "file_name": "ADE_val_00000359.jpg", "width": 300, "height": 260}, {"id": "ADE_val_00000360", "file_name": "ADE_val_00000360.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000361", "file_name": "ADE_val_00000361.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000362", "file_name": "ADE_val_00000362.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000363", "file_name": "ADE_val_00000363.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000364", "file_name": "ADE_val_00000364.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000365", "file_name": "ADE_val_00000365.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000366", "file_name": "ADE_val_00000366.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000367", "file_name": "ADE_val_00000367.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000368", "file_name": "ADE_val_00000368.jpg", "width": 361, "height": 200}, {"id": "ADE_val_00000369", "file_name": "ADE_val_00000369.jpg", "width": 250, "height": 375}, {"id": "ADE_val_00000370", "file_name": "ADE_val_00000370.jpg", "width": 775, "height": 512}, {"id": "ADE_val_00000371", "file_name": "ADE_val_00000371.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000372", "file_name": "ADE_val_00000372.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000373", "file_name": "ADE_val_00000373.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000374", "file_name": "ADE_val_00000374.jpg", "width": 686, "height": 481}, {"id": "ADE_val_00000375", "file_name": "ADE_val_00000375.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000376", "file_name": "ADE_val_00000376.jpg", "width": 651, "height": 512}, {"id": "ADE_val_00000377", "file_name": "ADE_val_00000377.jpg", "width": 771, "height": 512}, {"id": "ADE_val_00000378", "file_name": "ADE_val_00000378.jpg", "width": 480, "height": 640}, {"id": "ADE_val_00000379", "file_name": "ADE_val_00000379.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000380", "file_name": "ADE_val_00000380.jpg", "width": 300, "height": 232}, {"id": "ADE_val_00000381", "file_name": "ADE_val_00000381.jpg", "width": 250, "height": 188}, {"id": "ADE_val_00000382", "file_name": "ADE_val_00000382.jpg", "width": 861, "height": 512}, {"id": "ADE_val_00000383", "file_name": "ADE_val_00000383.jpg", "width": 300, "height": 402}, {"id": "ADE_val_00000384", "file_name": "ADE_val_00000384.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000385", "file_name": "ADE_val_00000385.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000386", "file_name": "ADE_val_00000386.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000387", "file_name": "ADE_val_00000387.jpg", "width": 464, "height": 285}, {"id": "ADE_val_00000388", "file_name": "ADE_val_00000388.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000389", "file_name": "ADE_val_00000389.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000390", "file_name": "ADE_val_00000390.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00000391", "file_name": "ADE_val_00000391.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000392", "file_name": "ADE_val_00000392.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000393", "file_name": "ADE_val_00000393.jpg", "width": 320, "height": 240}, {"id": "ADE_val_00000394", "file_name": "ADE_val_00000394.jpg", "width": 225, "height": 300}, {"id": "ADE_val_00000395", "file_name": "ADE_val_00000395.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000396", "file_name": "ADE_val_00000396.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000397", "file_name": "ADE_val_00000397.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000398", "file_name": "ADE_val_00000398.jpg", "width": 450, "height": 293}, {"id": "ADE_val_00000399", "file_name": "ADE_val_00000399.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000400", "file_name": "ADE_val_00000400.jpg", "width": 450, "height": 256}, {"id": "ADE_val_00000401", "file_name": "ADE_val_00000401.jpg", "width": 257, "height": 256}, {"id": "ADE_val_00000402", "file_name": "ADE_val_00000402.jpg", "width": 664, "height": 512}, {"id": "ADE_val_00000403", "file_name": "ADE_val_00000403.jpg", "width": 688, "height": 512}, {"id": "ADE_val_00000404", "file_name": "ADE_val_00000404.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000405", "file_name": "ADE_val_00000405.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000406", "file_name": "ADE_val_00000406.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000407", "file_name": "ADE_val_00000407.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000408", "file_name": "ADE_val_00000408.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000409", "file_name": "ADE_val_00000409.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000410", "file_name": "ADE_val_00000410.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000411", "file_name": "ADE_val_00000411.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000412", "file_name": "ADE_val_00000412.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000413", "file_name": "ADE_val_00000413.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000414", "file_name": "ADE_val_00000414.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000415", "file_name": "ADE_val_00000415.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000416", "file_name": "ADE_val_00000416.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000417", "file_name": "ADE_val_00000417.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000418", "file_name": "ADE_val_00000418.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000419", "file_name": "ADE_val_00000419.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000420", "file_name": "ADE_val_00000420.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000421", "file_name": "ADE_val_00000421.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000422", "file_name": "ADE_val_00000422.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000423", "file_name": "ADE_val_00000423.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000424", "file_name": "ADE_val_00000424.jpg", "width": 975, "height": 975}, {"id": "ADE_val_00000425", "file_name": "ADE_val_00000425.jpg", "width": 684, "height": 512}, {"id": "ADE_val_00000426", "file_name": "ADE_val_00000426.jpg", "width": 633, "height": 416}, {"id": "ADE_val_00000427", "file_name": "ADE_val_00000427.jpg", "width": 719, "height": 512}, {"id": "ADE_val_00000428", "file_name": "ADE_val_00000428.jpg", "width": 598, "height": 512}, {"id": "ADE_val_00000429", "file_name": "ADE_val_00000429.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000430", "file_name": "ADE_val_00000430.jpg", "width": 300, "height": 300}, {"id": "ADE_val_00000431", "file_name": "ADE_val_00000431.jpg", "width": 352, "height": 230}, {"id": "ADE_val_00000432", "file_name": "ADE_val_00000432.jpg", "width": 448, "height": 299}, {"id": "ADE_val_00000433", "file_name": "ADE_val_00000433.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000434", "file_name": "ADE_val_00000434.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000435", "file_name": "ADE_val_00000435.jpg", "width": 479, "height": 319}, {"id": "ADE_val_00000436", "file_name": "ADE_val_00000436.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000437", "file_name": "ADE_val_00000437.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000438", "file_name": "ADE_val_00000438.jpg", "width": 488, "height": 325}, {"id": "ADE_val_00000439", "file_name": "ADE_val_00000439.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000440", "file_name": "ADE_val_00000440.jpg", "width": 580, "height": 385}, {"id": "ADE_val_00000441", "file_name": "ADE_val_00000441.jpg", "width": 569, "height": 386}, {"id": "ADE_val_00000442", "file_name": "ADE_val_00000442.jpg", "width": 402, "height": 397}, {"id": "ADE_val_00000443", "file_name": "ADE_val_00000443.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000444", "file_name": "ADE_val_00000444.jpg", "width": 468, "height": 352}, {"id": "ADE_val_00000445", "file_name": "ADE_val_00000445.jpg", "width": 510, "height": 344}, {"id": "ADE_val_00000446", "file_name": "ADE_val_00000446.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000447", "file_name": "ADE_val_00000447.jpg", "width": 633, "height": 512}, {"id": "ADE_val_00000448", "file_name": "ADE_val_00000448.jpg", "width": 336, "height": 450}, {"id": "ADE_val_00000449", "file_name": "ADE_val_00000449.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000450", "file_name": "ADE_val_00000450.jpg", "width": 228, "height": 211}, {"id": "ADE_val_00000451", "file_name": "ADE_val_00000451.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000452", "file_name": "ADE_val_00000452.jpg", "width": 319, "height": 239}, {"id": "ADE_val_00000453", "file_name": "ADE_val_00000453.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000454", "file_name": "ADE_val_00000454.jpg", "width": 784, "height": 512}, {"id": "ADE_val_00000455", "file_name": "ADE_val_00000455.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000456", "file_name": "ADE_val_00000456.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000457", "file_name": "ADE_val_00000457.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00000458", "file_name": "ADE_val_00000458.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000459", "file_name": "ADE_val_00000459.jpg", "width": 770, "height": 512}, {"id": "ADE_val_00000460", "file_name": "ADE_val_00000460.jpg", "width": 656, "height": 512}, {"id": "ADE_val_00000461", "file_name": "ADE_val_00000461.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000462", "file_name": "ADE_val_00000462.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00000463", "file_name": "ADE_val_00000463.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000464", "file_name": "ADE_val_00000464.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000465", "file_name": "ADE_val_00000465.jpg", "width": 512, "height": 571}, {"id": "ADE_val_00000466", "file_name": "ADE_val_00000466.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000467", "file_name": "ADE_val_00000467.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000468", "file_name": "ADE_val_00000468.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000469", "file_name": "ADE_val_00000469.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000470", "file_name": "ADE_val_00000470.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000471", "file_name": "ADE_val_00000471.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000472", "file_name": "ADE_val_00000472.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000473", "file_name": "ADE_val_00000473.jpg", "width": 739, "height": 512}, {"id": "ADE_val_00000474", "file_name": "ADE_val_00000474.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000475", "file_name": "ADE_val_00000475.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000476", "file_name": "ADE_val_00000476.jpg", "width": 512, "height": 431}, {"id": "ADE_val_00000477", "file_name": "ADE_val_00000477.jpg", "width": 512, "height": 361}, {"id": "ADE_val_00000478", "file_name": "ADE_val_00000478.jpg", "width": 225, "height": 300}, {"id": "ADE_val_00000479", "file_name": "ADE_val_00000479.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000480", "file_name": "ADE_val_00000480.jpg", "width": 769, "height": 512}, {"id": "ADE_val_00000481", "file_name": "ADE_val_00000481.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000482", "file_name": "ADE_val_00000482.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000483", "file_name": "ADE_val_00000483.jpg", "width": 512, "height": 340}, {"id": "ADE_val_00000484", "file_name": "ADE_val_00000484.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000485", "file_name": "ADE_val_00000485.jpg", "width": 662, "height": 512}, {"id": "ADE_val_00000486", "file_name": "ADE_val_00000486.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000487", "file_name": "ADE_val_00000487.jpg", "width": 576, "height": 432}, {"id": "ADE_val_00000488", "file_name": "ADE_val_00000488.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000489", "file_name": "ADE_val_00000489.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00000490", "file_name": "ADE_val_00000490.jpg", "width": 300, "height": 233}, {"id": "ADE_val_00000491", "file_name": "ADE_val_00000491.jpg", "width": 500, "height": 325}, {"id": "ADE_val_00000492", "file_name": "ADE_val_00000492.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000493", "file_name": "ADE_val_00000493.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000494", "file_name": "ADE_val_00000494.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00000495", "file_name": "ADE_val_00000495.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000496", "file_name": "ADE_val_00000496.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000497", "file_name": "ADE_val_00000497.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000498", "file_name": "ADE_val_00000498.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000499", "file_name": "ADE_val_00000499.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000500", "file_name": "ADE_val_00000500.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000501", "file_name": "ADE_val_00000501.jpg", "width": 667, "height": 512}, {"id": "ADE_val_00000502", "file_name": "ADE_val_00000502.jpg", "width": 512, "height": 771}, {"id": "ADE_val_00000503", "file_name": "ADE_val_00000503.jpg", "width": 770, "height": 512}, {"id": "ADE_val_00000504", "file_name": "ADE_val_00000504.jpg", "width": 600, "height": 395}, {"id": "ADE_val_00000505", "file_name": "ADE_val_00000505.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000506", "file_name": "ADE_val_00000506.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000507", "file_name": "ADE_val_00000507.jpg", "width": 600, "height": 450}, {"id": "ADE_val_00000508", "file_name": "ADE_val_00000508.jpg", "width": 300, "height": 224}, {"id": "ADE_val_00000509", "file_name": "ADE_val_00000509.jpg", "width": 757, "height": 512}, {"id": "ADE_val_00000510", "file_name": "ADE_val_00000510.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000511", "file_name": "ADE_val_00000511.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000512", "file_name": "ADE_val_00000512.jpg", "width": 600, "height": 400}, {"id": "ADE_val_00000513", "file_name": "ADE_val_00000513.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000514", "file_name": "ADE_val_00000514.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000515", "file_name": "ADE_val_00000515.jpg", "width": 770, "height": 512}, {"id": "ADE_val_00000516", "file_name": "ADE_val_00000516.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000517", "file_name": "ADE_val_00000517.jpg", "width": 770, "height": 512}, {"id": "ADE_val_00000518", "file_name": "ADE_val_00000518.jpg", "width": 693, "height": 512}, {"id": "ADE_val_00000519", "file_name": "ADE_val_00000519.jpg", "width": 711, "height": 471}, {"id": "ADE_val_00000520", "file_name": "ADE_val_00000520.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000521", "file_name": "ADE_val_00000521.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000522", "file_name": "ADE_val_00000522.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000523", "file_name": "ADE_val_00000523.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000524", "file_name": "ADE_val_00000524.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000525", "file_name": "ADE_val_00000525.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000526", "file_name": "ADE_val_00000526.jpg", "width": 512, "height": 768}, {"id": "ADE_val_00000527", "file_name": "ADE_val_00000527.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000528", "file_name": "ADE_val_00000528.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000529", "file_name": "ADE_val_00000529.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000530", "file_name": "ADE_val_00000530.jpg", "width": 590, "height": 512}, {"id": "ADE_val_00000531", "file_name": "ADE_val_00000531.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000532", "file_name": "ADE_val_00000532.jpg", "width": 778, "height": 512}, {"id": "ADE_val_00000533", "file_name": "ADE_val_00000533.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000534", "file_name": "ADE_val_00000534.jpg", "width": 350, "height": 230}, {"id": "ADE_val_00000535", "file_name": "ADE_val_00000535.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000536", "file_name": "ADE_val_00000536.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000537", "file_name": "ADE_val_00000537.jpg", "width": 210, "height": 310}, {"id": "ADE_val_00000538", "file_name": "ADE_val_00000538.jpg", "width": 500, "height": 315}, {"id": "ADE_val_00000539", "file_name": "ADE_val_00000539.jpg", "width": 746, "height": 512}, {"id": "ADE_val_00000540", "file_name": "ADE_val_00000540.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000541", "file_name": "ADE_val_00000541.jpg", "width": 348, "height": 316}, {"id": "ADE_val_00000542", "file_name": "ADE_val_00000542.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000543", "file_name": "ADE_val_00000543.jpg", "width": 512, "height": 897}, {"id": "ADE_val_00000544", "file_name": "ADE_val_00000544.jpg", "width": 640, "height": 433}, {"id": "ADE_val_00000545", "file_name": "ADE_val_00000545.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000546", "file_name": "ADE_val_00000546.jpg", "width": 512, "height": 684}, {"id": "ADE_val_00000547", "file_name": "ADE_val_00000547.jpg", "width": 680, "height": 443}, {"id": "ADE_val_00000548", "file_name": "ADE_val_00000548.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000549", "file_name": "ADE_val_00000549.jpg", "width": 300, "height": 234}, {"id": "ADE_val_00000550", "file_name": "ADE_val_00000550.jpg", "width": 611, "height": 413}, {"id": "ADE_val_00000551", "file_name": "ADE_val_00000551.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000552", "file_name": "ADE_val_00000552.jpg", "width": 600, "height": 400}, {"id": "ADE_val_00000553", "file_name": "ADE_val_00000553.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000554", "file_name": "ADE_val_00000554.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000555", "file_name": "ADE_val_00000555.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000556", "file_name": "ADE_val_00000556.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000557", "file_name": "ADE_val_00000557.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000558", "file_name": "ADE_val_00000558.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000559", "file_name": "ADE_val_00000559.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000560", "file_name": "ADE_val_00000560.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000561", "file_name": "ADE_val_00000561.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000562", "file_name": "ADE_val_00000562.jpg", "width": 500, "height": 384}, {"id": "ADE_val_00000563", "file_name": "ADE_val_00000563.jpg", "width": 598, "height": 333}, {"id": "ADE_val_00000564", "file_name": "ADE_val_00000564.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000565", "file_name": "ADE_val_00000565.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000566", "file_name": "ADE_val_00000566.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000567", "file_name": "ADE_val_00000567.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000568", "file_name": "ADE_val_00000568.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000569", "file_name": "ADE_val_00000569.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000570", "file_name": "ADE_val_00000570.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000571", "file_name": "ADE_val_00000571.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000572", "file_name": "ADE_val_00000572.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000573", "file_name": "ADE_val_00000573.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000574", "file_name": "ADE_val_00000574.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000575", "file_name": "ADE_val_00000575.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000576", "file_name": "ADE_val_00000576.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000577", "file_name": "ADE_val_00000577.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000578", "file_name": "ADE_val_00000578.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000579", "file_name": "ADE_val_00000579.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000580", "file_name": "ADE_val_00000580.jpg", "width": 512, "height": 768}, {"id": "ADE_val_00000581", "file_name": "ADE_val_00000581.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000582", "file_name": "ADE_val_00000582.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000583", "file_name": "ADE_val_00000583.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000584", "file_name": "ADE_val_00000584.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000585", "file_name": "ADE_val_00000585.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000586", "file_name": "ADE_val_00000586.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000587", "file_name": "ADE_val_00000587.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000588", "file_name": "ADE_val_00000588.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000589", "file_name": "ADE_val_00000589.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000590", "file_name": "ADE_val_00000590.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000591", "file_name": "ADE_val_00000591.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000592", "file_name": "ADE_val_00000592.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000593", "file_name": "ADE_val_00000593.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000594", "file_name": "ADE_val_00000594.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000595", "file_name": "ADE_val_00000595.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000596", "file_name": "ADE_val_00000596.jpg", "width": 784, "height": 512}, {"id": "ADE_val_00000597", "file_name": "ADE_val_00000597.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000598", "file_name": "ADE_val_00000598.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000599", "file_name": "ADE_val_00000599.jpg", "width": 437, "height": 283}, {"id": "ADE_val_00000600", "file_name": "ADE_val_00000600.jpg", "width": 497, "height": 372}, {"id": "ADE_val_00000601", "file_name": "ADE_val_00000601.jpg", "width": 700, "height": 429}, {"id": "ADE_val_00000602", "file_name": "ADE_val_00000602.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000603", "file_name": "ADE_val_00000603.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000604", "file_name": "ADE_val_00000604.jpg", "width": 622, "height": 512}, {"id": "ADE_val_00000605", "file_name": "ADE_val_00000605.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000606", "file_name": "ADE_val_00000606.jpg", "width": 496, "height": 768}, {"id": "ADE_val_00000607", "file_name": "ADE_val_00000607.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000608", "file_name": "ADE_val_00000608.jpg", "width": 680, "height": 512}, {"id": "ADE_val_00000609", "file_name": "ADE_val_00000609.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000610", "file_name": "ADE_val_00000610.jpg", "width": 400, "height": 267}, {"id": "ADE_val_00000611", "file_name": "ADE_val_00000611.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000612", "file_name": "ADE_val_00000612.jpg", "width": 600, "height": 450}, {"id": "ADE_val_00000613", "file_name": "ADE_val_00000613.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000614", "file_name": "ADE_val_00000614.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000615", "file_name": "ADE_val_00000615.jpg", "width": 600, "height": 396}, {"id": "ADE_val_00000616", "file_name": "ADE_val_00000616.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000617", "file_name": "ADE_val_00000617.jpg", "width": 320, "height": 239}, {"id": "ADE_val_00000618", "file_name": "ADE_val_00000618.jpg", "width": 512, "height": 431}, {"id": "ADE_val_00000619", "file_name": "ADE_val_00000619.jpg", "width": 295, "height": 261}, {"id": "ADE_val_00000620", "file_name": "ADE_val_00000620.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000621", "file_name": "ADE_val_00000621.jpg", "width": 319, "height": 425}, {"id": "ADE_val_00000622", "file_name": "ADE_val_00000622.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000623", "file_name": "ADE_val_00000623.jpg", "width": 302, "height": 275}, {"id": "ADE_val_00000624", "file_name": "ADE_val_00000624.jpg", "width": 682, "height": 512}, {"id": "ADE_val_00000625", "file_name": "ADE_val_00000625.jpg", "width": 500, "height": 333}, {"id": "ADE_val_00000626", "file_name": "ADE_val_00000626.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000627", "file_name": "ADE_val_00000627.jpg", "width": 337, "height": 500}, {"id": "ADE_val_00000628", "file_name": "ADE_val_00000628.jpg", "width": 484, "height": 296}, {"id": "ADE_val_00000629", "file_name": "ADE_val_00000629.jpg", "width": 260, "height": 350}, {"id": "ADE_val_00000630", "file_name": "ADE_val_00000630.jpg", "width": 288, "height": 210}, {"id": "ADE_val_00000631", "file_name": "ADE_val_00000631.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000632", "file_name": "ADE_val_00000632.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000633", "file_name": "ADE_val_00000633.jpg", "width": 267, "height": 200}, {"id": "ADE_val_00000634", "file_name": "ADE_val_00000634.jpg", "width": 764, "height": 512}, {"id": "ADE_val_00000635", "file_name": "ADE_val_00000635.jpg", "width": 480, "height": 640}, {"id": "ADE_val_00000636", "file_name": "ADE_val_00000636.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000637", "file_name": "ADE_val_00000637.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000638", "file_name": "ADE_val_00000638.jpg", "width": 500, "height": 327}, {"id": "ADE_val_00000639", "file_name": "ADE_val_00000639.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000640", "file_name": "ADE_val_00000640.jpg", "width": 360, "height": 239}, {"id": "ADE_val_00000641", "file_name": "ADE_val_00000641.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00000642", "file_name": "ADE_val_00000642.jpg", "width": 550, "height": 301}, {"id": "ADE_val_00000643", "file_name": "ADE_val_00000643.jpg", "width": 280, "height": 210}, {"id": "ADE_val_00000644", "file_name": "ADE_val_00000644.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000645", "file_name": "ADE_val_00000645.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000646", "file_name": "ADE_val_00000646.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000647", "file_name": "ADE_val_00000647.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000648", "file_name": "ADE_val_00000648.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000649", "file_name": "ADE_val_00000649.jpg", "width": 600, "height": 454}, {"id": "ADE_val_00000650", "file_name": "ADE_val_00000650.jpg", "width": 600, "height": 319}, {"id": "ADE_val_00000651", "file_name": "ADE_val_00000651.jpg", "width": 286, "height": 180}, {"id": "ADE_val_00000652", "file_name": "ADE_val_00000652.jpg", "width": 750, "height": 512}, {"id": "ADE_val_00000653", "file_name": "ADE_val_00000653.jpg", "width": 825, "height": 512}, {"id": "ADE_val_00000654", "file_name": "ADE_val_00000654.jpg", "width": 382, "height": 563}, {"id": "ADE_val_00000655", "file_name": "ADE_val_00000655.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000656", "file_name": "ADE_val_00000656.jpg", "width": 370, "height": 250}, {"id": "ADE_val_00000657", "file_name": "ADE_val_00000657.jpg", "width": 600, "height": 450}, {"id": "ADE_val_00000658", "file_name": "ADE_val_00000658.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000659", "file_name": "ADE_val_00000659.jpg", "width": 500, "height": 333}, {"id": "ADE_val_00000660", "file_name": "ADE_val_00000660.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000661", "file_name": "ADE_val_00000661.jpg", "width": 400, "height": 431}, {"id": "ADE_val_00000662", "file_name": "ADE_val_00000662.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000663", "file_name": "ADE_val_00000663.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000664", "file_name": "ADE_val_00000664.jpg", "width": 702, "height": 402}, {"id": "ADE_val_00000665", "file_name": "ADE_val_00000665.jpg", "width": 717, "height": 467}, {"id": "ADE_val_00000666", "file_name": "ADE_val_00000666.jpg", "width": 256, "height": 221}, {"id": "ADE_val_00000667", "file_name": "ADE_val_00000667.jpg", "width": 350, "height": 234}, {"id": "ADE_val_00000668", "file_name": "ADE_val_00000668.jpg", "width": 508, "height": 416}, {"id": "ADE_val_00000669", "file_name": "ADE_val_00000669.jpg", "width": 480, "height": 323}, {"id": "ADE_val_00000670", "file_name": "ADE_val_00000670.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000671", "file_name": "ADE_val_00000671.jpg", "width": 504, "height": 339}, {"id": "ADE_val_00000672", "file_name": "ADE_val_00000672.jpg", "width": 567, "height": 366}, {"id": "ADE_val_00000673", "file_name": "ADE_val_00000673.jpg", "width": 600, "height": 482}, {"id": "ADE_val_00000674", "file_name": "ADE_val_00000674.jpg", "width": 572, "height": 341}, {"id": "ADE_val_00000675", "file_name": "ADE_val_00000675.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000676", "file_name": "ADE_val_00000676.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00000677", "file_name": "ADE_val_00000677.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000678", "file_name": "ADE_val_00000678.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000679", "file_name": "ADE_val_00000679.jpg", "width": 512, "height": 418}, {"id": "ADE_val_00000680", "file_name": "ADE_val_00000680.jpg", "width": 675, "height": 503}, {"id": "ADE_val_00000681", "file_name": "ADE_val_00000681.jpg", "width": 600, "height": 400}, {"id": "ADE_val_00000682", "file_name": "ADE_val_00000682.jpg", "width": 392, "height": 264}, {"id": "ADE_val_00000683", "file_name": "ADE_val_00000683.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00000684", "file_name": "ADE_val_00000684.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00000685", "file_name": "ADE_val_00000685.jpg", "width": 729, "height": 392}, {"id": "ADE_val_00000686", "file_name": "ADE_val_00000686.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000687", "file_name": "ADE_val_00000687.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000688", "file_name": "ADE_val_00000688.jpg", "width": 400, "height": 437}, {"id": "ADE_val_00000689", "file_name": "ADE_val_00000689.jpg", "width": 360, "height": 287}, {"id": "ADE_val_00000690", "file_name": "ADE_val_00000690.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000691", "file_name": "ADE_val_00000691.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000692", "file_name": "ADE_val_00000692.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000693", "file_name": "ADE_val_00000693.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000694", "file_name": "ADE_val_00000694.jpg", "width": 420, "height": 315}, {"id": "ADE_val_00000695", "file_name": "ADE_val_00000695.jpg", "width": 563, "height": 459}, {"id": "ADE_val_00000696", "file_name": "ADE_val_00000696.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000697", "file_name": "ADE_val_00000697.jpg", "width": 399, "height": 600}, {"id": "ADE_val_00000698", "file_name": "ADE_val_00000698.jpg", "width": 640, "height": 415}, {"id": "ADE_val_00000699", "file_name": "ADE_val_00000699.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000700", "file_name": "ADE_val_00000700.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000701", "file_name": "ADE_val_00000701.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000702", "file_name": "ADE_val_00000702.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000703", "file_name": "ADE_val_00000703.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000704", "file_name": "ADE_val_00000704.jpg", "width": 350, "height": 243}, {"id": "ADE_val_00000705", "file_name": "ADE_val_00000705.jpg", "width": 350, "height": 265}, {"id": "ADE_val_00000706", "file_name": "ADE_val_00000706.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000707", "file_name": "ADE_val_00000707.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000708", "file_name": "ADE_val_00000708.jpg", "width": 375, "height": 500}, {"id": "ADE_val_00000709", "file_name": "ADE_val_00000709.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000710", "file_name": "ADE_val_00000710.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000711", "file_name": "ADE_val_00000711.jpg", "width": 363, "height": 230}, {"id": "ADE_val_00000712", "file_name": "ADE_val_00000712.jpg", "width": 313, "height": 204}, {"id": "ADE_val_00000713", "file_name": "ADE_val_00000713.jpg", "width": 597, "height": 448}, {"id": "ADE_val_00000714", "file_name": "ADE_val_00000714.jpg", "width": 288, "height": 216}, {"id": "ADE_val_00000715", "file_name": "ADE_val_00000715.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000716", "file_name": "ADE_val_00000716.jpg", "width": 450, "height": 298}, {"id": "ADE_val_00000717", "file_name": "ADE_val_00000717.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000718", "file_name": "ADE_val_00000718.jpg", "width": 312, "height": 234}, {"id": "ADE_val_00000719", "file_name": "ADE_val_00000719.jpg", "width": 512, "height": 742}, {"id": "ADE_val_00000720", "file_name": "ADE_val_00000720.jpg", "width": 765, "height": 512}, {"id": "ADE_val_00000721", "file_name": "ADE_val_00000721.jpg", "width": 350, "height": 249}, {"id": "ADE_val_00000722", "file_name": "ADE_val_00000722.jpg", "width": 612, "height": 412}, {"id": "ADE_val_00000723", "file_name": "ADE_val_00000723.jpg", "width": 283, "height": 217}, {"id": "ADE_val_00000724", "file_name": "ADE_val_00000724.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000725", "file_name": "ADE_val_00000725.jpg", "width": 300, "height": 300}, {"id": "ADE_val_00000726", "file_name": "ADE_val_00000726.jpg", "width": 400, "height": 270}, {"id": "ADE_val_00000727", "file_name": "ADE_val_00000727.jpg", "width": 356, "height": 266}, {"id": "ADE_val_00000728", "file_name": "ADE_val_00000728.jpg", "width": 500, "height": 334}, {"id": "ADE_val_00000729", "file_name": "ADE_val_00000729.jpg", "width": 350, "height": 300}, {"id": "ADE_val_00000730", "file_name": "ADE_val_00000730.jpg", "width": 320, "height": 251}, {"id": "ADE_val_00000731", "file_name": "ADE_val_00000731.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000732", "file_name": "ADE_val_00000732.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000733", "file_name": "ADE_val_00000733.jpg", "width": 748, "height": 512}, {"id": "ADE_val_00000734", "file_name": "ADE_val_00000734.jpg", "width": 360, "height": 270}, {"id": "ADE_val_00000735", "file_name": "ADE_val_00000735.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00000736", "file_name": "ADE_val_00000736.jpg", "width": 500, "height": 328}, {"id": "ADE_val_00000737", "file_name": "ADE_val_00000737.jpg", "width": 320, "height": 240}, {"id": "ADE_val_00000738", "file_name": "ADE_val_00000738.jpg", "width": 384, "height": 256}, {"id": "ADE_val_00000739", "file_name": "ADE_val_00000739.jpg", "width": 979, "height": 512}, {"id": "ADE_val_00000740", "file_name": "ADE_val_00000740.jpg", "width": 384, "height": 288}, {"id": "ADE_val_00000741", "file_name": "ADE_val_00000741.jpg", "width": 402, "height": 381}, {"id": "ADE_val_00000742", "file_name": "ADE_val_00000742.jpg", "width": 512, "height": 738}, {"id": "ADE_val_00000743", "file_name": "ADE_val_00000743.jpg", "width": 512, "height": 561}, {"id": "ADE_val_00000744", "file_name": "ADE_val_00000744.jpg", "width": 531, "height": 400}, {"id": "ADE_val_00000745", "file_name": "ADE_val_00000745.jpg", "width": 360, "height": 270}, {"id": "ADE_val_00000746", "file_name": "ADE_val_00000746.jpg", "width": 600, "height": 400}, {"id": "ADE_val_00000747", "file_name": "ADE_val_00000747.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000748", "file_name": "ADE_val_00000748.jpg", "width": 320, "height": 232}, {"id": "ADE_val_00000749", "file_name": "ADE_val_00000749.jpg", "width": 512, "height": 682}, {"id": "ADE_val_00000750", "file_name": "ADE_val_00000750.jpg", "width": 356, "height": 432}, {"id": "ADE_val_00000751", "file_name": "ADE_val_00000751.jpg", "width": 480, "height": 640}, {"id": "ADE_val_00000752", "file_name": "ADE_val_00000752.jpg", "width": 584, "height": 456}, {"id": "ADE_val_00000753", "file_name": "ADE_val_00000753.jpg", "width": 696, "height": 512}, {"id": "ADE_val_00000754", "file_name": "ADE_val_00000754.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000755", "file_name": "ADE_val_00000755.jpg", "width": 512, "height": 790}, {"id": "ADE_val_00000756", "file_name": "ADE_val_00000756.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000757", "file_name": "ADE_val_00000757.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000758", "file_name": "ADE_val_00000758.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000759", "file_name": "ADE_val_00000759.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000760", "file_name": "ADE_val_00000760.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000761", "file_name": "ADE_val_00000761.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000762", "file_name": "ADE_val_00000762.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000763", "file_name": "ADE_val_00000763.jpg", "width": 375, "height": 500}, {"id": "ADE_val_00000764", "file_name": "ADE_val_00000764.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000765", "file_name": "ADE_val_00000765.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000766", "file_name": "ADE_val_00000766.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000767", "file_name": "ADE_val_00000767.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000768", "file_name": "ADE_val_00000768.jpg", "width": 726, "height": 512}, {"id": "ADE_val_00000769", "file_name": "ADE_val_00000769.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000770", "file_name": "ADE_val_00000770.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000771", "file_name": "ADE_val_00000771.jpg", "width": 360, "height": 270}, {"id": "ADE_val_00000772", "file_name": "ADE_val_00000772.jpg", "width": 450, "height": 301}, {"id": "ADE_val_00000773", "file_name": "ADE_val_00000773.jpg", "width": 460, "height": 682}, {"id": "ADE_val_00000774", "file_name": "ADE_val_00000774.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000775", "file_name": "ADE_val_00000775.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000776", "file_name": "ADE_val_00000776.jpg", "width": 340, "height": 255}, {"id": "ADE_val_00000777", "file_name": "ADE_val_00000777.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000778", "file_name": "ADE_val_00000778.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000779", "file_name": "ADE_val_00000779.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000780", "file_name": "ADE_val_00000780.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000781", "file_name": "ADE_val_00000781.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000782", "file_name": "ADE_val_00000782.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000783", "file_name": "ADE_val_00000783.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000784", "file_name": "ADE_val_00000784.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000785", "file_name": "ADE_val_00000785.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000786", "file_name": "ADE_val_00000786.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000787", "file_name": "ADE_val_00000787.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000788", "file_name": "ADE_val_00000788.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000789", "file_name": "ADE_val_00000789.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000790", "file_name": "ADE_val_00000790.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000791", "file_name": "ADE_val_00000791.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000792", "file_name": "ADE_val_00000792.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000793", "file_name": "ADE_val_00000793.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000794", "file_name": "ADE_val_00000794.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000795", "file_name": "ADE_val_00000795.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000796", "file_name": "ADE_val_00000796.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000797", "file_name": "ADE_val_00000797.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000798", "file_name": "ADE_val_00000798.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000799", "file_name": "ADE_val_00000799.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000800", "file_name": "ADE_val_00000800.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000801", "file_name": "ADE_val_00000801.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000802", "file_name": "ADE_val_00000802.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000803", "file_name": "ADE_val_00000803.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000804", "file_name": "ADE_val_00000804.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000805", "file_name": "ADE_val_00000805.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000806", "file_name": "ADE_val_00000806.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000807", "file_name": "ADE_val_00000807.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000808", "file_name": "ADE_val_00000808.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000809", "file_name": "ADE_val_00000809.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000810", "file_name": "ADE_val_00000810.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000811", "file_name": "ADE_val_00000811.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000812", "file_name": "ADE_val_00000812.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000813", "file_name": "ADE_val_00000813.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000814", "file_name": "ADE_val_00000814.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000815", "file_name": "ADE_val_00000815.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000816", "file_name": "ADE_val_00000816.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000817", "file_name": "ADE_val_00000817.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000818", "file_name": "ADE_val_00000818.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000819", "file_name": "ADE_val_00000819.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000820", "file_name": "ADE_val_00000820.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000821", "file_name": "ADE_val_00000821.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000822", "file_name": "ADE_val_00000822.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000823", "file_name": "ADE_val_00000823.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000824", "file_name": "ADE_val_00000824.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000825", "file_name": "ADE_val_00000825.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000826", "file_name": "ADE_val_00000826.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000827", "file_name": "ADE_val_00000827.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000828", "file_name": "ADE_val_00000828.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000829", "file_name": "ADE_val_00000829.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000830", "file_name": "ADE_val_00000830.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000831", "file_name": "ADE_val_00000831.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000832", "file_name": "ADE_val_00000832.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000833", "file_name": "ADE_val_00000833.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000834", "file_name": "ADE_val_00000834.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000835", "file_name": "ADE_val_00000835.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000836", "file_name": "ADE_val_00000836.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000837", "file_name": "ADE_val_00000837.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000838", "file_name": "ADE_val_00000838.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000839", "file_name": "ADE_val_00000839.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000840", "file_name": "ADE_val_00000840.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000841", "file_name": "ADE_val_00000841.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000842", "file_name": "ADE_val_00000842.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000843", "file_name": "ADE_val_00000843.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000844", "file_name": "ADE_val_00000844.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000845", "file_name": "ADE_val_00000845.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000846", "file_name": "ADE_val_00000846.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000847", "file_name": "ADE_val_00000847.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000848", "file_name": "ADE_val_00000848.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000849", "file_name": "ADE_val_00000849.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000850", "file_name": "ADE_val_00000850.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000851", "file_name": "ADE_val_00000851.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000852", "file_name": "ADE_val_00000852.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000853", "file_name": "ADE_val_00000853.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000854", "file_name": "ADE_val_00000854.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000855", "file_name": "ADE_val_00000855.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000856", "file_name": "ADE_val_00000856.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000857", "file_name": "ADE_val_00000857.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000858", "file_name": "ADE_val_00000858.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000859", "file_name": "ADE_val_00000859.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000860", "file_name": "ADE_val_00000860.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000861", "file_name": "ADE_val_00000861.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000862", "file_name": "ADE_val_00000862.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000863", "file_name": "ADE_val_00000863.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000864", "file_name": "ADE_val_00000864.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000865", "file_name": "ADE_val_00000865.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000866", "file_name": "ADE_val_00000866.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000867", "file_name": "ADE_val_00000867.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000868", "file_name": "ADE_val_00000868.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000869", "file_name": "ADE_val_00000869.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000870", "file_name": "ADE_val_00000870.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000871", "file_name": "ADE_val_00000871.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000872", "file_name": "ADE_val_00000872.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000873", "file_name": "ADE_val_00000873.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000874", "file_name": "ADE_val_00000874.jpg", "width": 550, "height": 368}, {"id": "ADE_val_00000875", "file_name": "ADE_val_00000875.jpg", "width": 500, "height": 373}, {"id": "ADE_val_00000876", "file_name": "ADE_val_00000876.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000877", "file_name": "ADE_val_00000877.jpg", "width": 348, "height": 346}, {"id": "ADE_val_00000878", "file_name": "ADE_val_00000878.jpg", "width": 500, "height": 332}, {"id": "ADE_val_00000879", "file_name": "ADE_val_00000879.jpg", "width": 450, "height": 338}, {"id": "ADE_val_00000880", "file_name": "ADE_val_00000880.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000881", "file_name": "ADE_val_00000881.jpg", "width": 478, "height": 296}, {"id": "ADE_val_00000882", "file_name": "ADE_val_00000882.jpg", "width": 480, "height": 360}, {"id": "ADE_val_00000883", "file_name": "ADE_val_00000883.jpg", "width": 520, "height": 391}, {"id": "ADE_val_00000884", "file_name": "ADE_val_00000884.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000885", "file_name": "ADE_val_00000885.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000886", "file_name": "ADE_val_00000886.jpg", "width": 776, "height": 512}, {"id": "ADE_val_00000887", "file_name": "ADE_val_00000887.jpg", "width": 479, "height": 380}, {"id": "ADE_val_00000888", "file_name": "ADE_val_00000888.jpg", "width": 500, "height": 349}, {"id": "ADE_val_00000889", "file_name": "ADE_val_00000889.jpg", "width": 600, "height": 366}, {"id": "ADE_val_00000890", "file_name": "ADE_val_00000890.jpg", "width": 512, "height": 768}, {"id": "ADE_val_00000891", "file_name": "ADE_val_00000891.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000892", "file_name": "ADE_val_00000892.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00000893", "file_name": "ADE_val_00000893.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000894", "file_name": "ADE_val_00000894.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000895", "file_name": "ADE_val_00000895.jpg", "width": 357, "height": 336}, {"id": "ADE_val_00000896", "file_name": "ADE_val_00000896.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000897", "file_name": "ADE_val_00000897.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000898", "file_name": "ADE_val_00000898.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000899", "file_name": "ADE_val_00000899.jpg", "width": 600, "height": 399}, {"id": "ADE_val_00000900", "file_name": "ADE_val_00000900.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000901", "file_name": "ADE_val_00000901.jpg", "width": 420, "height": 315}, {"id": "ADE_val_00000902", "file_name": "ADE_val_00000902.jpg", "width": 500, "height": 333}, {"id": "ADE_val_00000903", "file_name": "ADE_val_00000903.jpg", "width": 512, "height": 584}, {"id": "ADE_val_00000904", "file_name": "ADE_val_00000904.jpg", "width": 375, "height": 500}, {"id": "ADE_val_00000905", "file_name": "ADE_val_00000905.jpg", "width": 384, "height": 256}, {"id": "ADE_val_00000906", "file_name": "ADE_val_00000906.jpg", "width": 769, "height": 512}, {"id": "ADE_val_00000907", "file_name": "ADE_val_00000907.jpg", "width": 271, "height": 218}, {"id": "ADE_val_00000908", "file_name": "ADE_val_00000908.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000909", "file_name": "ADE_val_00000909.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000910", "file_name": "ADE_val_00000910.jpg", "width": 320, "height": 240}, {"id": "ADE_val_00000911", "file_name": "ADE_val_00000911.jpg", "width": 375, "height": 234}, {"id": "ADE_val_00000912", "file_name": "ADE_val_00000912.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000913", "file_name": "ADE_val_00000913.jpg", "width": 332, "height": 241}, {"id": "ADE_val_00000914", "file_name": "ADE_val_00000914.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000915", "file_name": "ADE_val_00000915.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000916", "file_name": "ADE_val_00000916.jpg", "width": 300, "height": 400}, {"id": "ADE_val_00000917", "file_name": "ADE_val_00000917.jpg", "width": 886, "height": 512}, {"id": "ADE_val_00000918", "file_name": "ADE_val_00000918.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000919", "file_name": "ADE_val_00000919.jpg", "width": 690, "height": 512}, {"id": "ADE_val_00000920", "file_name": "ADE_val_00000920.jpg", "width": 496, "height": 374}, {"id": "ADE_val_00000921", "file_name": "ADE_val_00000921.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000922", "file_name": "ADE_val_00000922.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000923", "file_name": "ADE_val_00000923.jpg", "width": 400, "height": 279}, {"id": "ADE_val_00000924", "file_name": "ADE_val_00000924.jpg", "width": 391, "height": 522}, {"id": "ADE_val_00000925", "file_name": "ADE_val_00000925.jpg", "width": 300, "height": 400}, {"id": "ADE_val_00000926", "file_name": "ADE_val_00000926.jpg", "width": 320, "height": 218}, {"id": "ADE_val_00000927", "file_name": "ADE_val_00000927.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00000928", "file_name": "ADE_val_00000928.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000929", "file_name": "ADE_val_00000929.jpg", "width": 600, "height": 450}, {"id": "ADE_val_00000930", "file_name": "ADE_val_00000930.jpg", "width": 645, "height": 484}, {"id": "ADE_val_00000931", "file_name": "ADE_val_00000931.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00000932", "file_name": "ADE_val_00000932.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000933", "file_name": "ADE_val_00000933.jpg", "width": 512, "height": 768}, {"id": "ADE_val_00000934", "file_name": "ADE_val_00000934.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000935", "file_name": "ADE_val_00000935.jpg", "width": 320, "height": 229}, {"id": "ADE_val_00000936", "file_name": "ADE_val_00000936.jpg", "width": 780, "height": 512}, {"id": "ADE_val_00000937", "file_name": "ADE_val_00000937.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000938", "file_name": "ADE_val_00000938.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000939", "file_name": "ADE_val_00000939.jpg", "width": 764, "height": 512}, {"id": "ADE_val_00000940", "file_name": "ADE_val_00000940.jpg", "width": 771, "height": 512}, {"id": "ADE_val_00000941", "file_name": "ADE_val_00000941.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000942", "file_name": "ADE_val_00000942.jpg", "width": 681, "height": 512}, {"id": "ADE_val_00000943", "file_name": "ADE_val_00000943.jpg", "width": 225, "height": 305}, {"id": "ADE_val_00000944", "file_name": "ADE_val_00000944.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000945", "file_name": "ADE_val_00000945.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000946", "file_name": "ADE_val_00000946.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000947", "file_name": "ADE_val_00000947.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000948", "file_name": "ADE_val_00000948.jpg", "width": 300, "height": 450}, {"id": "ADE_val_00000949", "file_name": "ADE_val_00000949.jpg", "width": 771, "height": 512}, {"id": "ADE_val_00000950", "file_name": "ADE_val_00000950.jpg", "width": 699, "height": 512}, {"id": "ADE_val_00000951", "file_name": "ADE_val_00000951.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000952", "file_name": "ADE_val_00000952.jpg", "width": 337, "height": 450}, {"id": "ADE_val_00000953", "file_name": "ADE_val_00000953.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000954", "file_name": "ADE_val_00000954.jpg", "width": 338, "height": 450}, {"id": "ADE_val_00000955", "file_name": "ADE_val_00000955.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000956", "file_name": "ADE_val_00000956.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000957", "file_name": "ADE_val_00000957.jpg", "width": 499, "height": 700}, {"id": "ADE_val_00000958", "file_name": "ADE_val_00000958.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000959", "file_name": "ADE_val_00000959.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000960", "file_name": "ADE_val_00000960.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000961", "file_name": "ADE_val_00000961.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000962", "file_name": "ADE_val_00000962.jpg", "width": 763, "height": 512}, {"id": "ADE_val_00000963", "file_name": "ADE_val_00000963.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000964", "file_name": "ADE_val_00000964.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00000965", "file_name": "ADE_val_00000965.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000966", "file_name": "ADE_val_00000966.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000967", "file_name": "ADE_val_00000967.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000968", "file_name": "ADE_val_00000968.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000969", "file_name": "ADE_val_00000969.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00000970", "file_name": "ADE_val_00000970.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000971", "file_name": "ADE_val_00000971.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000972", "file_name": "ADE_val_00000972.jpg", "width": 512, "height": 513}, {"id": "ADE_val_00000973", "file_name": "ADE_val_00000973.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000974", "file_name": "ADE_val_00000974.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000975", "file_name": "ADE_val_00000975.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000976", "file_name": "ADE_val_00000976.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000977", "file_name": "ADE_val_00000977.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000978", "file_name": "ADE_val_00000978.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000979", "file_name": "ADE_val_00000979.jpg", "width": 465, "height": 331}, {"id": "ADE_val_00000980", "file_name": "ADE_val_00000980.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000981", "file_name": "ADE_val_00000981.jpg", "width": 328, "height": 500}, {"id": "ADE_val_00000982", "file_name": "ADE_val_00000982.jpg", "width": 703, "height": 512}, {"id": "ADE_val_00000983", "file_name": "ADE_val_00000983.jpg", "width": 295, "height": 230}, {"id": "ADE_val_00000984", "file_name": "ADE_val_00000984.jpg", "width": 555, "height": 416}, {"id": "ADE_val_00000985", "file_name": "ADE_val_00000985.jpg", "width": 891, "height": 512}, {"id": "ADE_val_00000986", "file_name": "ADE_val_00000986.jpg", "width": 250, "height": 174}, {"id": "ADE_val_00000987", "file_name": "ADE_val_00000987.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000988", "file_name": "ADE_val_00000988.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000989", "file_name": "ADE_val_00000989.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000990", "file_name": "ADE_val_00000990.jpg", "width": 267, "height": 200}, {"id": "ADE_val_00000991", "file_name": "ADE_val_00000991.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00000992", "file_name": "ADE_val_00000992.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000993", "file_name": "ADE_val_00000993.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000994", "file_name": "ADE_val_00000994.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000995", "file_name": "ADE_val_00000995.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000996", "file_name": "ADE_val_00000996.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00000997", "file_name": "ADE_val_00000997.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00000998", "file_name": "ADE_val_00000998.jpg", "width": 500, "height": 333}, {"id": "ADE_val_00000999", "file_name": "ADE_val_00000999.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001000", "file_name": "ADE_val_00001000.jpg", "width": 250, "height": 200}, {"id": "ADE_val_00001001", "file_name": "ADE_val_00001001.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001002", "file_name": "ADE_val_00001002.jpg", "width": 500, "height": 374}, {"id": "ADE_val_00001003", "file_name": "ADE_val_00001003.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001004", "file_name": "ADE_val_00001004.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001005", "file_name": "ADE_val_00001005.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001006", "file_name": "ADE_val_00001006.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001007", "file_name": "ADE_val_00001007.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001008", "file_name": "ADE_val_00001008.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00001009", "file_name": "ADE_val_00001009.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001010", "file_name": "ADE_val_00001010.jpg", "width": 769, "height": 512}, {"id": "ADE_val_00001011", "file_name": "ADE_val_00001011.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001012", "file_name": "ADE_val_00001012.jpg", "width": 550, "height": 550}, {"id": "ADE_val_00001013", "file_name": "ADE_val_00001013.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001014", "file_name": "ADE_val_00001014.jpg", "width": 259, "height": 504}, {"id": "ADE_val_00001015", "file_name": "ADE_val_00001015.jpg", "width": 512, "height": 682}, {"id": "ADE_val_00001016", "file_name": "ADE_val_00001016.jpg", "width": 397, "height": 590}, {"id": "ADE_val_00001017", "file_name": "ADE_val_00001017.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001018", "file_name": "ADE_val_00001018.jpg", "width": 347, "height": 260}, {"id": "ADE_val_00001019", "file_name": "ADE_val_00001019.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001020", "file_name": "ADE_val_00001020.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001021", "file_name": "ADE_val_00001021.jpg", "width": 371, "height": 320}, {"id": "ADE_val_00001022", "file_name": "ADE_val_00001022.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001023", "file_name": "ADE_val_00001023.jpg", "width": 300, "height": 277}, {"id": "ADE_val_00001024", "file_name": "ADE_val_00001024.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00001025", "file_name": "ADE_val_00001025.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001026", "file_name": "ADE_val_00001026.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001027", "file_name": "ADE_val_00001027.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001028", "file_name": "ADE_val_00001028.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001029", "file_name": "ADE_val_00001029.jpg", "width": 573, "height": 415}, {"id": "ADE_val_00001030", "file_name": "ADE_val_00001030.jpg", "width": 802, "height": 512}, {"id": "ADE_val_00001031", "file_name": "ADE_val_00001031.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001032", "file_name": "ADE_val_00001032.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001033", "file_name": "ADE_val_00001033.jpg", "width": 984, "height": 512}, {"id": "ADE_val_00001034", "file_name": "ADE_val_00001034.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001035", "file_name": "ADE_val_00001035.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001036", "file_name": "ADE_val_00001036.jpg", "width": 600, "height": 450}, {"id": "ADE_val_00001037", "file_name": "ADE_val_00001037.jpg", "width": 657, "height": 493}, {"id": "ADE_val_00001038", "file_name": "ADE_val_00001038.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00001039", "file_name": "ADE_val_00001039.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00001040", "file_name": "ADE_val_00001040.jpg", "width": 687, "height": 512}, {"id": "ADE_val_00001041", "file_name": "ADE_val_00001041.jpg", "width": 512, "height": 682}, {"id": "ADE_val_00001042", "file_name": "ADE_val_00001042.jpg", "width": 300, "height": 213}, {"id": "ADE_val_00001043", "file_name": "ADE_val_00001043.jpg", "width": 308, "height": 230}, {"id": "ADE_val_00001044", "file_name": "ADE_val_00001044.jpg", "width": 512, "height": 757}, {"id": "ADE_val_00001045", "file_name": "ADE_val_00001045.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001046", "file_name": "ADE_val_00001046.jpg", "width": 237, "height": 215}, {"id": "ADE_val_00001047", "file_name": "ADE_val_00001047.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001048", "file_name": "ADE_val_00001048.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001049", "file_name": "ADE_val_00001049.jpg", "width": 340, "height": 200}, {"id": "ADE_val_00001050", "file_name": "ADE_val_00001050.jpg", "width": 509, "height": 342}, {"id": "ADE_val_00001051", "file_name": "ADE_val_00001051.jpg", "width": 706, "height": 512}, {"id": "ADE_val_00001052", "file_name": "ADE_val_00001052.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001053", "file_name": "ADE_val_00001053.jpg", "width": 318, "height": 238}, {"id": "ADE_val_00001054", "file_name": "ADE_val_00001054.jpg", "width": 686, "height": 512}, {"id": "ADE_val_00001055", "file_name": "ADE_val_00001055.jpg", "width": 300, "height": 298}, {"id": "ADE_val_00001056", "file_name": "ADE_val_00001056.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001057", "file_name": "ADE_val_00001057.jpg", "width": 326, "height": 241}, {"id": "ADE_val_00001058", "file_name": "ADE_val_00001058.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001059", "file_name": "ADE_val_00001059.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00001060", "file_name": "ADE_val_00001060.jpg", "width": 755, "height": 512}, {"id": "ADE_val_00001061", "file_name": "ADE_val_00001061.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001062", "file_name": "ADE_val_00001062.jpg", "width": 320, "height": 240}, {"id": "ADE_val_00001063", "file_name": "ADE_val_00001063.jpg", "width": 300, "height": 215}, {"id": "ADE_val_00001064", "file_name": "ADE_val_00001064.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001065", "file_name": "ADE_val_00001065.jpg", "width": 400, "height": 235}, {"id": "ADE_val_00001066", "file_name": "ADE_val_00001066.jpg", "width": 796, "height": 512}, {"id": "ADE_val_00001067", "file_name": "ADE_val_00001067.jpg", "width": 434, "height": 274}, {"id": "ADE_val_00001068", "file_name": "ADE_val_00001068.jpg", "width": 300, "height": 214}, {"id": "ADE_val_00001069", "file_name": "ADE_val_00001069.jpg", "width": 568, "height": 512}, {"id": "ADE_val_00001070", "file_name": "ADE_val_00001070.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00001071", "file_name": "ADE_val_00001071.jpg", "width": 384, "height": 256}, {"id": "ADE_val_00001072", "file_name": "ADE_val_00001072.jpg", "width": 500, "height": 400}, {"id": "ADE_val_00001073", "file_name": "ADE_val_00001073.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001074", "file_name": "ADE_val_00001074.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001075", "file_name": "ADE_val_00001075.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001076", "file_name": "ADE_val_00001076.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001077", "file_name": "ADE_val_00001077.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001078", "file_name": "ADE_val_00001078.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001079", "file_name": "ADE_val_00001079.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001080", "file_name": "ADE_val_00001080.jpg", "width": 335, "height": 512}, {"id": "ADE_val_00001081", "file_name": "ADE_val_00001081.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001082", "file_name": "ADE_val_00001082.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001083", "file_name": "ADE_val_00001083.jpg", "width": 512, "height": 730}, {"id": "ADE_val_00001084", "file_name": "ADE_val_00001084.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001085", "file_name": "ADE_val_00001085.jpg", "width": 512, "height": 768}, {"id": "ADE_val_00001086", "file_name": "ADE_val_00001086.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001087", "file_name": "ADE_val_00001087.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001088", "file_name": "ADE_val_00001088.jpg", "width": 203, "height": 270}, {"id": "ADE_val_00001089", "file_name": "ADE_val_00001089.jpg", "width": 285, "height": 288}, {"id": "ADE_val_00001090", "file_name": "ADE_val_00001090.jpg", "width": 579, "height": 512}, {"id": "ADE_val_00001091", "file_name": "ADE_val_00001091.jpg", "width": 512, "height": 730}, {"id": "ADE_val_00001092", "file_name": "ADE_val_00001092.jpg", "width": 765, "height": 512}, {"id": "ADE_val_00001093", "file_name": "ADE_val_00001093.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001094", "file_name": "ADE_val_00001094.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001095", "file_name": "ADE_val_00001095.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001096", "file_name": "ADE_val_00001096.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001097", "file_name": "ADE_val_00001097.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001098", "file_name": "ADE_val_00001098.jpg", "width": 500, "height": 750}, {"id": "ADE_val_00001099", "file_name": "ADE_val_00001099.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001100", "file_name": "ADE_val_00001100.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001101", "file_name": "ADE_val_00001101.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001102", "file_name": "ADE_val_00001102.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001103", "file_name": "ADE_val_00001103.jpg", "width": 497, "height": 503}, {"id": "ADE_val_00001104", "file_name": "ADE_val_00001104.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001105", "file_name": "ADE_val_00001105.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001106", "file_name": "ADE_val_00001106.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001107", "file_name": "ADE_val_00001107.jpg", "width": 419, "height": 512}, {"id": "ADE_val_00001108", "file_name": "ADE_val_00001108.jpg", "width": 400, "height": 533}, {"id": "ADE_val_00001109", "file_name": "ADE_val_00001109.jpg", "width": 512, "height": 684}, {"id": "ADE_val_00001110", "file_name": "ADE_val_00001110.jpg", "width": 288, "height": 172}, {"id": "ADE_val_00001111", "file_name": "ADE_val_00001111.jpg", "width": 431, "height": 296}, {"id": "ADE_val_00001112", "file_name": "ADE_val_00001112.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001113", "file_name": "ADE_val_00001113.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001114", "file_name": "ADE_val_00001114.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001115", "file_name": "ADE_val_00001115.jpg", "width": 375, "height": 500}, {"id": "ADE_val_00001116", "file_name": "ADE_val_00001116.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001117", "file_name": "ADE_val_00001117.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001118", "file_name": "ADE_val_00001118.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001119", "file_name": "ADE_val_00001119.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001120", "file_name": "ADE_val_00001120.jpg", "width": 770, "height": 512}, {"id": "ADE_val_00001121", "file_name": "ADE_val_00001121.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001122", "file_name": "ADE_val_00001122.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001123", "file_name": "ADE_val_00001123.jpg", "width": 239, "height": 248}, {"id": "ADE_val_00001124", "file_name": "ADE_val_00001124.jpg", "width": 748, "height": 512}, {"id": "ADE_val_00001125", "file_name": "ADE_val_00001125.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001126", "file_name": "ADE_val_00001126.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001127", "file_name": "ADE_val_00001127.jpg", "width": 681, "height": 512}, {"id": "ADE_val_00001128", "file_name": "ADE_val_00001128.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001129", "file_name": "ADE_val_00001129.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001130", "file_name": "ADE_val_00001130.jpg", "width": 752, "height": 512}, {"id": "ADE_val_00001131", "file_name": "ADE_val_00001131.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001132", "file_name": "ADE_val_00001132.jpg", "width": 659, "height": 491}, {"id": "ADE_val_00001133", "file_name": "ADE_val_00001133.jpg", "width": 765, "height": 512}, {"id": "ADE_val_00001134", "file_name": "ADE_val_00001134.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001135", "file_name": "ADE_val_00001135.jpg", "width": 400, "height": 400}, {"id": "ADE_val_00001136", "file_name": "ADE_val_00001136.jpg", "width": 770, "height": 512}, {"id": "ADE_val_00001137", "file_name": "ADE_val_00001137.jpg", "width": 350, "height": 247}, {"id": "ADE_val_00001138", "file_name": "ADE_val_00001138.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001139", "file_name": "ADE_val_00001139.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001140", "file_name": "ADE_val_00001140.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001141", "file_name": "ADE_val_00001141.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001142", "file_name": "ADE_val_00001142.jpg", "width": 669, "height": 512}, {"id": "ADE_val_00001143", "file_name": "ADE_val_00001143.jpg", "width": 255, "height": 191}, {"id": "ADE_val_00001144", "file_name": "ADE_val_00001144.jpg", "width": 600, "height": 400}, {"id": "ADE_val_00001145", "file_name": "ADE_val_00001145.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001146", "file_name": "ADE_val_00001146.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001147", "file_name": "ADE_val_00001147.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001148", "file_name": "ADE_val_00001148.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001149", "file_name": "ADE_val_00001149.jpg", "width": 500, "height": 333}, {"id": "ADE_val_00001150", "file_name": "ADE_val_00001150.jpg", "width": 693, "height": 512}, {"id": "ADE_val_00001151", "file_name": "ADE_val_00001151.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001152", "file_name": "ADE_val_00001152.jpg", "width": 493, "height": 371}, {"id": "ADE_val_00001153", "file_name": "ADE_val_00001153.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001154", "file_name": "ADE_val_00001154.jpg", "width": 700, "height": 460}, {"id": "ADE_val_00001155", "file_name": "ADE_val_00001155.jpg", "width": 500, "height": 333}, {"id": "ADE_val_00001156", "file_name": "ADE_val_00001156.jpg", "width": 325, "height": 217}, {"id": "ADE_val_00001157", "file_name": "ADE_val_00001157.jpg", "width": 1600, "height": 1600}, {"id": "ADE_val_00001158", "file_name": "ADE_val_00001158.jpg", "width": 512, "height": 376}, {"id": "ADE_val_00001159", "file_name": "ADE_val_00001159.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001160", "file_name": "ADE_val_00001160.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001161", "file_name": "ADE_val_00001161.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001162", "file_name": "ADE_val_00001162.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001163", "file_name": "ADE_val_00001163.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001164", "file_name": "ADE_val_00001164.jpg", "width": 640, "height": 427}, {"id": "ADE_val_00001165", "file_name": "ADE_val_00001165.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001166", "file_name": "ADE_val_00001166.jpg", "width": 512, "height": 340}, {"id": "ADE_val_00001167", "file_name": "ADE_val_00001167.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001168", "file_name": "ADE_val_00001168.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001169", "file_name": "ADE_val_00001169.jpg", "width": 641, "height": 512}, {"id": "ADE_val_00001170", "file_name": "ADE_val_00001170.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001171", "file_name": "ADE_val_00001171.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001172", "file_name": "ADE_val_00001172.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001173", "file_name": "ADE_val_00001173.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001174", "file_name": "ADE_val_00001174.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001175", "file_name": "ADE_val_00001175.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001176", "file_name": "ADE_val_00001176.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001177", "file_name": "ADE_val_00001177.jpg", "width": 512, "height": 351}, {"id": "ADE_val_00001178", "file_name": "ADE_val_00001178.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001179", "file_name": "ADE_val_00001179.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001180", "file_name": "ADE_val_00001180.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001181", "file_name": "ADE_val_00001181.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001182", "file_name": "ADE_val_00001182.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001183", "file_name": "ADE_val_00001183.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001184", "file_name": "ADE_val_00001184.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001185", "file_name": "ADE_val_00001185.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001186", "file_name": "ADE_val_00001186.jpg", "width": 430, "height": 509}, {"id": "ADE_val_00001187", "file_name": "ADE_val_00001187.jpg", "width": 320, "height": 240}, {"id": "ADE_val_00001188", "file_name": "ADE_val_00001188.jpg", "width": 400, "height": 222}, {"id": "ADE_val_00001189", "file_name": "ADE_val_00001189.jpg", "width": 650, "height": 488}, {"id": "ADE_val_00001190", "file_name": "ADE_val_00001190.jpg", "width": 760, "height": 512}, {"id": "ADE_val_00001191", "file_name": "ADE_val_00001191.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001192", "file_name": "ADE_val_00001192.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001193", "file_name": "ADE_val_00001193.jpg", "width": 500, "height": 309}, {"id": "ADE_val_00001194", "file_name": "ADE_val_00001194.jpg", "width": 560, "height": 418}, {"id": "ADE_val_00001195", "file_name": "ADE_val_00001195.jpg", "width": 690, "height": 512}, {"id": "ADE_val_00001196", "file_name": "ADE_val_00001196.jpg", "width": 529, "height": 395}, {"id": "ADE_val_00001197", "file_name": "ADE_val_00001197.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001198", "file_name": "ADE_val_00001198.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001199", "file_name": "ADE_val_00001199.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001200", "file_name": "ADE_val_00001200.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001201", "file_name": "ADE_val_00001201.jpg", "width": 400, "height": 308}, {"id": "ADE_val_00001202", "file_name": "ADE_val_00001202.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001203", "file_name": "ADE_val_00001203.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001204", "file_name": "ADE_val_00001204.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001205", "file_name": "ADE_val_00001205.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001206", "file_name": "ADE_val_00001206.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001207", "file_name": "ADE_val_00001207.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001208", "file_name": "ADE_val_00001208.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001209", "file_name": "ADE_val_00001209.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001210", "file_name": "ADE_val_00001210.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001211", "file_name": "ADE_val_00001211.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001212", "file_name": "ADE_val_00001212.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001213", "file_name": "ADE_val_00001213.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001214", "file_name": "ADE_val_00001214.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001215", "file_name": "ADE_val_00001215.jpg", "width": 512, "height": 341}, {"id": "ADE_val_00001216", "file_name": "ADE_val_00001216.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00001217", "file_name": "ADE_val_00001217.jpg", "width": 425, "height": 282}, {"id": "ADE_val_00001218", "file_name": "ADE_val_00001218.jpg", "width": 350, "height": 224}, {"id": "ADE_val_00001219", "file_name": "ADE_val_00001219.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001220", "file_name": "ADE_val_00001220.jpg", "width": 375, "height": 234}, {"id": "ADE_val_00001221", "file_name": "ADE_val_00001221.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001222", "file_name": "ADE_val_00001222.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001223", "file_name": "ADE_val_00001223.jpg", "width": 500, "height": 379}, {"id": "ADE_val_00001224", "file_name": "ADE_val_00001224.jpg", "width": 765, "height": 512}, {"id": "ADE_val_00001225", "file_name": "ADE_val_00001225.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001226", "file_name": "ADE_val_00001226.jpg", "width": 500, "height": 394}, {"id": "ADE_val_00001227", "file_name": "ADE_val_00001227.jpg", "width": 700, "height": 512}, {"id": "ADE_val_00001228", "file_name": "ADE_val_00001228.jpg", "width": 480, "height": 329}, {"id": "ADE_val_00001229", "file_name": "ADE_val_00001229.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001230", "file_name": "ADE_val_00001230.jpg", "width": 400, "height": 272}, {"id": "ADE_val_00001231", "file_name": "ADE_val_00001231.jpg", "width": 216, "height": 350}, {"id": "ADE_val_00001232", "file_name": "ADE_val_00001232.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001233", "file_name": "ADE_val_00001233.jpg", "width": 384, "height": 256}, {"id": "ADE_val_00001234", "file_name": "ADE_val_00001234.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001235", "file_name": "ADE_val_00001235.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001236", "file_name": "ADE_val_00001236.jpg", "width": 508, "height": 340}, {"id": "ADE_val_00001237", "file_name": "ADE_val_00001237.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001238", "file_name": "ADE_val_00001238.jpg", "width": 320, "height": 240}, {"id": "ADE_val_00001239", "file_name": "ADE_val_00001239.jpg", "width": 456, "height": 433}, {"id": "ADE_val_00001240", "file_name": "ADE_val_00001240.jpg", "width": 400, "height": 298}, {"id": "ADE_val_00001241", "file_name": "ADE_val_00001241.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001242", "file_name": "ADE_val_00001242.jpg", "width": 440, "height": 398}, {"id": "ADE_val_00001243", "file_name": "ADE_val_00001243.jpg", "width": 620, "height": 512}, {"id": "ADE_val_00001244", "file_name": "ADE_val_00001244.jpg", "width": 690, "height": 499}, {"id": "ADE_val_00001245", "file_name": "ADE_val_00001245.jpg", "width": 686, "height": 457}, {"id": "ADE_val_00001246", "file_name": "ADE_val_00001246.jpg", "width": 235, "height": 349}, {"id": "ADE_val_00001247", "file_name": "ADE_val_00001247.jpg", "width": 500, "height": 333}, {"id": "ADE_val_00001248", "file_name": "ADE_val_00001248.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001249", "file_name": "ADE_val_00001249.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001250", "file_name": "ADE_val_00001250.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001251", "file_name": "ADE_val_00001251.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001252", "file_name": "ADE_val_00001252.jpg", "width": 284, "height": 412}, {"id": "ADE_val_00001253", "file_name": "ADE_val_00001253.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001254", "file_name": "ADE_val_00001254.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001255", "file_name": "ADE_val_00001255.jpg", "width": 680, "height": 512}, {"id": "ADE_val_00001256", "file_name": "ADE_val_00001256.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001257", "file_name": "ADE_val_00001257.jpg", "width": 396, "height": 308}, {"id": "ADE_val_00001258", "file_name": "ADE_val_00001258.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001259", "file_name": "ADE_val_00001259.jpg", "width": 384, "height": 255}, {"id": "ADE_val_00001260", "file_name": "ADE_val_00001260.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001261", "file_name": "ADE_val_00001261.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001262", "file_name": "ADE_val_00001262.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001263", "file_name": "ADE_val_00001263.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001264", "file_name": "ADE_val_00001264.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001265", "file_name": "ADE_val_00001265.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001266", "file_name": "ADE_val_00001266.jpg", "width": 769, "height": 512}, {"id": "ADE_val_00001267", "file_name": "ADE_val_00001267.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001268", "file_name": "ADE_val_00001268.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001269", "file_name": "ADE_val_00001269.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001270", "file_name": "ADE_val_00001270.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001271", "file_name": "ADE_val_00001271.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001272", "file_name": "ADE_val_00001272.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001273", "file_name": "ADE_val_00001273.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001274", "file_name": "ADE_val_00001274.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001275", "file_name": "ADE_val_00001275.jpg", "width": 760, "height": 512}, {"id": "ADE_val_00001276", "file_name": "ADE_val_00001276.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001277", "file_name": "ADE_val_00001277.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001278", "file_name": "ADE_val_00001278.jpg", "width": 288, "height": 206}, {"id": "ADE_val_00001279", "file_name": "ADE_val_00001279.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001280", "file_name": "ADE_val_00001280.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001281", "file_name": "ADE_val_00001281.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001282", "file_name": "ADE_val_00001282.jpg", "width": 450, "height": 301}, {"id": "ADE_val_00001283", "file_name": "ADE_val_00001283.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001284", "file_name": "ADE_val_00001284.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001285", "file_name": "ADE_val_00001285.jpg", "width": 357, "height": 256}, {"id": "ADE_val_00001286", "file_name": "ADE_val_00001286.jpg", "width": 550, "height": 435}, {"id": "ADE_val_00001287", "file_name": "ADE_val_00001287.jpg", "width": 600, "height": 450}, {"id": "ADE_val_00001288", "file_name": "ADE_val_00001288.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001289", "file_name": "ADE_val_00001289.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001290", "file_name": "ADE_val_00001290.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001291", "file_name": "ADE_val_00001291.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001292", "file_name": "ADE_val_00001292.jpg", "width": 769, "height": 512}, {"id": "ADE_val_00001293", "file_name": "ADE_val_00001293.jpg", "width": 300, "height": 400}, {"id": "ADE_val_00001294", "file_name": "ADE_val_00001294.jpg", "width": 422, "height": 281}, {"id": "ADE_val_00001295", "file_name": "ADE_val_00001295.jpg", "width": 333, "height": 250}, {"id": "ADE_val_00001296", "file_name": "ADE_val_00001296.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00001297", "file_name": "ADE_val_00001297.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001298", "file_name": "ADE_val_00001298.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001299", "file_name": "ADE_val_00001299.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001300", "file_name": "ADE_val_00001300.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001301", "file_name": "ADE_val_00001301.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001302", "file_name": "ADE_val_00001302.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001303", "file_name": "ADE_val_00001303.jpg", "width": 274, "height": 300}, {"id": "ADE_val_00001304", "file_name": "ADE_val_00001304.jpg", "width": 300, "height": 223}, {"id": "ADE_val_00001305", "file_name": "ADE_val_00001305.jpg", "width": 500, "height": 333}, {"id": "ADE_val_00001306", "file_name": "ADE_val_00001306.jpg", "width": 236, "height": 352}, {"id": "ADE_val_00001307", "file_name": "ADE_val_00001307.jpg", "width": 763, "height": 512}, {"id": "ADE_val_00001308", "file_name": "ADE_val_00001308.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001309", "file_name": "ADE_val_00001309.jpg", "width": 584, "height": 512}, {"id": "ADE_val_00001310", "file_name": "ADE_val_00001310.jpg", "width": 512, "height": 520}, {"id": "ADE_val_00001311", "file_name": "ADE_val_00001311.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001312", "file_name": "ADE_val_00001312.jpg", "width": 765, "height": 512}, {"id": "ADE_val_00001313", "file_name": "ADE_val_00001313.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001314", "file_name": "ADE_val_00001314.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001315", "file_name": "ADE_val_00001315.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001316", "file_name": "ADE_val_00001316.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001317", "file_name": "ADE_val_00001317.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001318", "file_name": "ADE_val_00001318.jpg", "width": 640, "height": 428}, {"id": "ADE_val_00001319", "file_name": "ADE_val_00001319.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001320", "file_name": "ADE_val_00001320.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001321", "file_name": "ADE_val_00001321.jpg", "width": 682, "height": 512}, {"id": "ADE_val_00001322", "file_name": "ADE_val_00001322.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001323", "file_name": "ADE_val_00001323.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001324", "file_name": "ADE_val_00001324.jpg", "width": 319, "height": 240}, {"id": "ADE_val_00001325", "file_name": "ADE_val_00001325.jpg", "width": 586, "height": 390}, {"id": "ADE_val_00001326", "file_name": "ADE_val_00001326.jpg", "width": 250, "height": 286}, {"id": "ADE_val_00001327", "file_name": "ADE_val_00001327.jpg", "width": 300, "height": 400}, {"id": "ADE_val_00001328", "file_name": "ADE_val_00001328.jpg", "width": 256, "height": 384}, {"id": "ADE_val_00001329", "file_name": "ADE_val_00001329.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00001330", "file_name": "ADE_val_00001330.jpg", "width": 684, "height": 512}, {"id": "ADE_val_00001331", "file_name": "ADE_val_00001331.jpg", "width": 771, "height": 512}, {"id": "ADE_val_00001332", "file_name": "ADE_val_00001332.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001333", "file_name": "ADE_val_00001333.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001334", "file_name": "ADE_val_00001334.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001335", "file_name": "ADE_val_00001335.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001336", "file_name": "ADE_val_00001336.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001337", "file_name": "ADE_val_00001337.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001338", "file_name": "ADE_val_00001338.jpg", "width": 512, "height": 771}, {"id": "ADE_val_00001339", "file_name": "ADE_val_00001339.jpg", "width": 300, "height": 228}, {"id": "ADE_val_00001340", "file_name": "ADE_val_00001340.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001341", "file_name": "ADE_val_00001341.jpg", "width": 425, "height": 319}, {"id": "ADE_val_00001342", "file_name": "ADE_val_00001342.jpg", "width": 210, "height": 281}, {"id": "ADE_val_00001343", "file_name": "ADE_val_00001343.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001344", "file_name": "ADE_val_00001344.jpg", "width": 690, "height": 512}, {"id": "ADE_val_00001345", "file_name": "ADE_val_00001345.jpg", "width": 663, "height": 512}, {"id": "ADE_val_00001346", "file_name": "ADE_val_00001346.jpg", "width": 634, "height": 478}, {"id": "ADE_val_00001347", "file_name": "ADE_val_00001347.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001348", "file_name": "ADE_val_00001348.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001349", "file_name": "ADE_val_00001349.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001350", "file_name": "ADE_val_00001350.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001351", "file_name": "ADE_val_00001351.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001352", "file_name": "ADE_val_00001352.jpg", "width": 212, "height": 300}, {"id": "ADE_val_00001353", "file_name": "ADE_val_00001353.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001354", "file_name": "ADE_val_00001354.jpg", "width": 239, "height": 320}, {"id": "ADE_val_00001355", "file_name": "ADE_val_00001355.jpg", "width": 488, "height": 639}, {"id": "ADE_val_00001356", "file_name": "ADE_val_00001356.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001357", "file_name": "ADE_val_00001357.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001358", "file_name": "ADE_val_00001358.jpg", "width": 320, "height": 232}, {"id": "ADE_val_00001359", "file_name": "ADE_val_00001359.jpg", "width": 300, "height": 220}, {"id": "ADE_val_00001360", "file_name": "ADE_val_00001360.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001361", "file_name": "ADE_val_00001361.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001362", "file_name": "ADE_val_00001362.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001363", "file_name": "ADE_val_00001363.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001364", "file_name": "ADE_val_00001364.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001365", "file_name": "ADE_val_00001365.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001366", "file_name": "ADE_val_00001366.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001367", "file_name": "ADE_val_00001367.jpg", "width": 469, "height": 744}, {"id": "ADE_val_00001368", "file_name": "ADE_val_00001368.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001369", "file_name": "ADE_val_00001369.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001370", "file_name": "ADE_val_00001370.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001371", "file_name": "ADE_val_00001371.jpg", "width": 307, "height": 230}, {"id": "ADE_val_00001372", "file_name": "ADE_val_00001372.jpg", "width": 400, "height": 287}, {"id": "ADE_val_00001373", "file_name": "ADE_val_00001373.jpg", "width": 690, "height": 462}, {"id": "ADE_val_00001374", "file_name": "ADE_val_00001374.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001375", "file_name": "ADE_val_00001375.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001376", "file_name": "ADE_val_00001376.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001377", "file_name": "ADE_val_00001377.jpg", "width": 303, "height": 399}, {"id": "ADE_val_00001378", "file_name": "ADE_val_00001378.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001379", "file_name": "ADE_val_00001379.jpg", "width": 512, "height": 779}, {"id": "ADE_val_00001380", "file_name": "ADE_val_00001380.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001381", "file_name": "ADE_val_00001381.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001382", "file_name": "ADE_val_00001382.jpg", "width": 483, "height": 349}, {"id": "ADE_val_00001383", "file_name": "ADE_val_00001383.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001384", "file_name": "ADE_val_00001384.jpg", "width": 437, "height": 296}, {"id": "ADE_val_00001385", "file_name": "ADE_val_00001385.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001386", "file_name": "ADE_val_00001386.jpg", "width": 310, "height": 207}, {"id": "ADE_val_00001387", "file_name": "ADE_val_00001387.jpg", "width": 250, "height": 194}, {"id": "ADE_val_00001388", "file_name": "ADE_val_00001388.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001389", "file_name": "ADE_val_00001389.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001390", "file_name": "ADE_val_00001390.jpg", "width": 766, "height": 512}, {"id": "ADE_val_00001391", "file_name": "ADE_val_00001391.jpg", "width": 450, "height": 290}, {"id": "ADE_val_00001392", "file_name": "ADE_val_00001392.jpg", "width": 448, "height": 256}, {"id": "ADE_val_00001393", "file_name": "ADE_val_00001393.jpg", "width": 480, "height": 363}, {"id": "ADE_val_00001394", "file_name": "ADE_val_00001394.jpg", "width": 480, "height": 360}, {"id": "ADE_val_00001395", "file_name": "ADE_val_00001395.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001396", "file_name": "ADE_val_00001396.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001397", "file_name": "ADE_val_00001397.jpg", "width": 432, "height": 576}, {"id": "ADE_val_00001398", "file_name": "ADE_val_00001398.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001399", "file_name": "ADE_val_00001399.jpg", "width": 702, "height": 423}, {"id": "ADE_val_00001400", "file_name": "ADE_val_00001400.jpg", "width": 311, "height": 244}, {"id": "ADE_val_00001401", "file_name": "ADE_val_00001401.jpg", "width": 771, "height": 512}, {"id": "ADE_val_00001402", "file_name": "ADE_val_00001402.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001403", "file_name": "ADE_val_00001403.jpg", "width": 353, "height": 249}, {"id": "ADE_val_00001404", "file_name": "ADE_val_00001404.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001405", "file_name": "ADE_val_00001405.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001406", "file_name": "ADE_val_00001406.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001407", "file_name": "ADE_val_00001407.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001408", "file_name": "ADE_val_00001408.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001409", "file_name": "ADE_val_00001409.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001410", "file_name": "ADE_val_00001410.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001411", "file_name": "ADE_val_00001411.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001412", "file_name": "ADE_val_00001412.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001413", "file_name": "ADE_val_00001413.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001414", "file_name": "ADE_val_00001414.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001415", "file_name": "ADE_val_00001415.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001416", "file_name": "ADE_val_00001416.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001417", "file_name": "ADE_val_00001417.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001418", "file_name": "ADE_val_00001418.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001419", "file_name": "ADE_val_00001419.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001420", "file_name": "ADE_val_00001420.jpg", "width": 500, "height": 390}, {"id": "ADE_val_00001421", "file_name": "ADE_val_00001421.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001422", "file_name": "ADE_val_00001422.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001423", "file_name": "ADE_val_00001423.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001424", "file_name": "ADE_val_00001424.jpg", "width": 383, "height": 234}, {"id": "ADE_val_00001425", "file_name": "ADE_val_00001425.jpg", "width": 399, "height": 571}, {"id": "ADE_val_00001426", "file_name": "ADE_val_00001426.jpg", "width": 485, "height": 361}, {"id": "ADE_val_00001427", "file_name": "ADE_val_00001427.jpg", "width": 250, "height": 250}, {"id": "ADE_val_00001428", "file_name": "ADE_val_00001428.jpg", "width": 355, "height": 317}, {"id": "ADE_val_00001429", "file_name": "ADE_val_00001429.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001430", "file_name": "ADE_val_00001430.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001431", "file_name": "ADE_val_00001431.jpg", "width": 350, "height": 234}, {"id": "ADE_val_00001432", "file_name": "ADE_val_00001432.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001433", "file_name": "ADE_val_00001433.jpg", "width": 888, "height": 512}, {"id": "ADE_val_00001434", "file_name": "ADE_val_00001434.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001435", "file_name": "ADE_val_00001435.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001436", "file_name": "ADE_val_00001436.jpg", "width": 680, "height": 512}, {"id": "ADE_val_00001437", "file_name": "ADE_val_00001437.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001438", "file_name": "ADE_val_00001438.jpg", "width": 401, "height": 289}, {"id": "ADE_val_00001439", "file_name": "ADE_val_00001439.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001440", "file_name": "ADE_val_00001440.jpg", "width": 500, "height": 340}, {"id": "ADE_val_00001441", "file_name": "ADE_val_00001441.jpg", "width": 384, "height": 256}, {"id": "ADE_val_00001442", "file_name": "ADE_val_00001442.jpg", "width": 634, "height": 512}, {"id": "ADE_val_00001443", "file_name": "ADE_val_00001443.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00001444", "file_name": "ADE_val_00001444.jpg", "width": 360, "height": 254}, {"id": "ADE_val_00001445", "file_name": "ADE_val_00001445.jpg", "width": 541, "height": 431}, {"id": "ADE_val_00001446", "file_name": "ADE_val_00001446.jpg", "width": 500, "height": 326}, {"id": "ADE_val_00001447", "file_name": "ADE_val_00001447.jpg", "width": 247, "height": 356}, {"id": "ADE_val_00001448", "file_name": "ADE_val_00001448.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001449", "file_name": "ADE_val_00001449.jpg", "width": 681, "height": 512}, {"id": "ADE_val_00001450", "file_name": "ADE_val_00001450.jpg", "width": 232, "height": 316}, {"id": "ADE_val_00001451", "file_name": "ADE_val_00001451.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001452", "file_name": "ADE_val_00001452.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001453", "file_name": "ADE_val_00001453.jpg", "width": 320, "height": 240}, {"id": "ADE_val_00001454", "file_name": "ADE_val_00001454.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001455", "file_name": "ADE_val_00001455.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001456", "file_name": "ADE_val_00001456.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001457", "file_name": "ADE_val_00001457.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001458", "file_name": "ADE_val_00001458.jpg", "width": 640, "height": 479}, {"id": "ADE_val_00001459", "file_name": "ADE_val_00001459.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001460", "file_name": "ADE_val_00001460.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001461", "file_name": "ADE_val_00001461.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001462", "file_name": "ADE_val_00001462.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001463", "file_name": "ADE_val_00001463.jpg", "width": 300, "height": 199}, {"id": "ADE_val_00001464", "file_name": "ADE_val_00001464.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001465", "file_name": "ADE_val_00001465.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001466", "file_name": "ADE_val_00001466.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001467", "file_name": "ADE_val_00001467.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001468", "file_name": "ADE_val_00001468.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001469", "file_name": "ADE_val_00001469.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001470", "file_name": "ADE_val_00001470.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001471", "file_name": "ADE_val_00001471.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001472", "file_name": "ADE_val_00001472.jpg", "width": 669, "height": 512}, {"id": "ADE_val_00001473", "file_name": "ADE_val_00001473.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001474", "file_name": "ADE_val_00001474.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001475", "file_name": "ADE_val_00001475.jpg", "width": 766, "height": 512}, {"id": "ADE_val_00001476", "file_name": "ADE_val_00001476.jpg", "width": 576, "height": 432}, {"id": "ADE_val_00001477", "file_name": "ADE_val_00001477.jpg", "width": 512, "height": 340}, {"id": "ADE_val_00001478", "file_name": "ADE_val_00001478.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001479", "file_name": "ADE_val_00001479.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001480", "file_name": "ADE_val_00001480.jpg", "width": 225, "height": 300}, {"id": "ADE_val_00001481", "file_name": "ADE_val_00001481.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001482", "file_name": "ADE_val_00001482.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001483", "file_name": "ADE_val_00001483.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001484", "file_name": "ADE_val_00001484.jpg", "width": 225, "height": 300}, {"id": "ADE_val_00001485", "file_name": "ADE_val_00001485.jpg", "width": 480, "height": 640}, {"id": "ADE_val_00001486", "file_name": "ADE_val_00001486.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001487", "file_name": "ADE_val_00001487.jpg", "width": 640, "height": 512}, {"id": "ADE_val_00001488", "file_name": "ADE_val_00001488.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001489", "file_name": "ADE_val_00001489.jpg", "width": 228, "height": 298}, {"id": "ADE_val_00001490", "file_name": "ADE_val_00001490.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001491", "file_name": "ADE_val_00001491.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001492", "file_name": "ADE_val_00001492.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001493", "file_name": "ADE_val_00001493.jpg", "width": 500, "height": 356}, {"id": "ADE_val_00001494", "file_name": "ADE_val_00001494.jpg", "width": 500, "height": 397}, {"id": "ADE_val_00001495", "file_name": "ADE_val_00001495.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001496", "file_name": "ADE_val_00001496.jpg", "width": 360, "height": 270}, {"id": "ADE_val_00001497", "file_name": "ADE_val_00001497.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001498", "file_name": "ADE_val_00001498.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001499", "file_name": "ADE_val_00001499.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001500", "file_name": "ADE_val_00001500.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001501", "file_name": "ADE_val_00001501.jpg", "width": 867, "height": 512}, {"id": "ADE_val_00001502", "file_name": "ADE_val_00001502.jpg", "width": 763, "height": 512}, {"id": "ADE_val_00001503", "file_name": "ADE_val_00001503.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001504", "file_name": "ADE_val_00001504.jpg", "width": 480, "height": 640}, {"id": "ADE_val_00001505", "file_name": "ADE_val_00001505.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001506", "file_name": "ADE_val_00001506.jpg", "width": 700, "height": 468}, {"id": "ADE_val_00001507", "file_name": "ADE_val_00001507.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001508", "file_name": "ADE_val_00001508.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001509", "file_name": "ADE_val_00001509.jpg", "width": 767, "height": 512}, {"id": "ADE_val_00001510", "file_name": "ADE_val_00001510.jpg", "width": 512, "height": 768}, {"id": "ADE_val_00001511", "file_name": "ADE_val_00001511.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001512", "file_name": "ADE_val_00001512.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001513", "file_name": "ADE_val_00001513.jpg", "width": 763, "height": 512}, {"id": "ADE_val_00001514", "file_name": "ADE_val_00001514.jpg", "width": 785, "height": 512}, {"id": "ADE_val_00001515", "file_name": "ADE_val_00001515.jpg", "width": 806, "height": 512}, {"id": "ADE_val_00001516", "file_name": "ADE_val_00001516.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001517", "file_name": "ADE_val_00001517.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001518", "file_name": "ADE_val_00001518.jpg", "width": 720, "height": 480}, {"id": "ADE_val_00001519", "file_name": "ADE_val_00001519.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001520", "file_name": "ADE_val_00001520.jpg", "width": 656, "height": 512}, {"id": "ADE_val_00001521", "file_name": "ADE_val_00001521.jpg", "width": 678, "height": 434}, {"id": "ADE_val_00001522", "file_name": "ADE_val_00001522.jpg", "width": 771, "height": 512}, {"id": "ADE_val_00001523", "file_name": "ADE_val_00001523.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001524", "file_name": "ADE_val_00001524.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001525", "file_name": "ADE_val_00001525.jpg", "width": 733, "height": 512}, {"id": "ADE_val_00001526", "file_name": "ADE_val_00001526.jpg", "width": 771, "height": 512}, {"id": "ADE_val_00001527", "file_name": "ADE_val_00001527.jpg", "width": 640, "height": 428}, {"id": "ADE_val_00001528", "file_name": "ADE_val_00001528.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001529", "file_name": "ADE_val_00001529.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001530", "file_name": "ADE_val_00001530.jpg", "width": 320, "height": 240}, {"id": "ADE_val_00001531", "file_name": "ADE_val_00001531.jpg", "width": 816, "height": 512}, {"id": "ADE_val_00001532", "file_name": "ADE_val_00001532.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001533", "file_name": "ADE_val_00001533.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001534", "file_name": "ADE_val_00001534.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001535", "file_name": "ADE_val_00001535.jpg", "width": 350, "height": 350}, {"id": "ADE_val_00001536", "file_name": "ADE_val_00001536.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00001537", "file_name": "ADE_val_00001537.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001538", "file_name": "ADE_val_00001538.jpg", "width": 341, "height": 239}, {"id": "ADE_val_00001539", "file_name": "ADE_val_00001539.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001540", "file_name": "ADE_val_00001540.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001541", "file_name": "ADE_val_00001541.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00001542", "file_name": "ADE_val_00001542.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001543", "file_name": "ADE_val_00001543.jpg", "width": 250, "height": 250}, {"id": "ADE_val_00001544", "file_name": "ADE_val_00001544.jpg", "width": 771, "height": 512}, {"id": "ADE_val_00001545", "file_name": "ADE_val_00001545.jpg", "width": 375, "height": 281}, {"id": "ADE_val_00001546", "file_name": "ADE_val_00001546.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001547", "file_name": "ADE_val_00001547.jpg", "width": 770, "height": 512}, {"id": "ADE_val_00001548", "file_name": "ADE_val_00001548.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00001549", "file_name": "ADE_val_00001549.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001550", "file_name": "ADE_val_00001550.jpg", "width": 447, "height": 290}, {"id": "ADE_val_00001551", "file_name": "ADE_val_00001551.jpg", "width": 385, "height": 301}, {"id": "ADE_val_00001552", "file_name": "ADE_val_00001552.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001553", "file_name": "ADE_val_00001553.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001554", "file_name": "ADE_val_00001554.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001555", "file_name": "ADE_val_00001555.jpg", "width": 716, "height": 512}, {"id": "ADE_val_00001556", "file_name": "ADE_val_00001556.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001557", "file_name": "ADE_val_00001557.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001558", "file_name": "ADE_val_00001558.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001559", "file_name": "ADE_val_00001559.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001560", "file_name": "ADE_val_00001560.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001561", "file_name": "ADE_val_00001561.jpg", "width": 335, "height": 250}, {"id": "ADE_val_00001562", "file_name": "ADE_val_00001562.jpg", "width": 500, "height": 334}, {"id": "ADE_val_00001563", "file_name": "ADE_val_00001563.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00001564", "file_name": "ADE_val_00001564.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001565", "file_name": "ADE_val_00001565.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001566", "file_name": "ADE_val_00001566.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001567", "file_name": "ADE_val_00001567.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001568", "file_name": "ADE_val_00001568.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001569", "file_name": "ADE_val_00001569.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001570", "file_name": "ADE_val_00001570.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001571", "file_name": "ADE_val_00001571.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001572", "file_name": "ADE_val_00001572.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001573", "file_name": "ADE_val_00001573.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001574", "file_name": "ADE_val_00001574.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001575", "file_name": "ADE_val_00001575.jpg", "width": 428, "height": 640}, {"id": "ADE_val_00001576", "file_name": "ADE_val_00001576.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001577", "file_name": "ADE_val_00001577.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001578", "file_name": "ADE_val_00001578.jpg", "width": 512, "height": 422}, {"id": "ADE_val_00001579", "file_name": "ADE_val_00001579.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001580", "file_name": "ADE_val_00001580.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001581", "file_name": "ADE_val_00001581.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001582", "file_name": "ADE_val_00001582.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001583", "file_name": "ADE_val_00001583.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001584", "file_name": "ADE_val_00001584.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001585", "file_name": "ADE_val_00001585.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001586", "file_name": "ADE_val_00001586.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001587", "file_name": "ADE_val_00001587.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001588", "file_name": "ADE_val_00001588.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001589", "file_name": "ADE_val_00001589.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001590", "file_name": "ADE_val_00001590.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001591", "file_name": "ADE_val_00001591.jpg", "width": 640, "height": 512}, {"id": "ADE_val_00001592", "file_name": "ADE_val_00001592.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001593", "file_name": "ADE_val_00001593.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001594", "file_name": "ADE_val_00001594.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001595", "file_name": "ADE_val_00001595.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001596", "file_name": "ADE_val_00001596.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001597", "file_name": "ADE_val_00001597.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001598", "file_name": "ADE_val_00001598.jpg", "width": 753, "height": 512}, {"id": "ADE_val_00001599", "file_name": "ADE_val_00001599.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001600", "file_name": "ADE_val_00001600.jpg", "width": 296, "height": 216}, {"id": "ADE_val_00001601", "file_name": "ADE_val_00001601.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001602", "file_name": "ADE_val_00001602.jpg", "width": 398, "height": 263}, {"id": "ADE_val_00001603", "file_name": "ADE_val_00001603.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001604", "file_name": "ADE_val_00001604.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001605", "file_name": "ADE_val_00001605.jpg", "width": 684, "height": 512}, {"id": "ADE_val_00001606", "file_name": "ADE_val_00001606.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001607", "file_name": "ADE_val_00001607.jpg", "width": 450, "height": 300}, {"id": "ADE_val_00001608", "file_name": "ADE_val_00001608.jpg", "width": 392, "height": 264}, {"id": "ADE_val_00001609", "file_name": "ADE_val_00001609.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001610", "file_name": "ADE_val_00001610.jpg", "width": 620, "height": 413}, {"id": "ADE_val_00001611", "file_name": "ADE_val_00001611.jpg", "width": 459, "height": 203}, {"id": "ADE_val_00001612", "file_name": "ADE_val_00001612.jpg", "width": 330, "height": 500}, {"id": "ADE_val_00001613", "file_name": "ADE_val_00001613.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001614", "file_name": "ADE_val_00001614.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001615", "file_name": "ADE_val_00001615.jpg", "width": 368, "height": 276}, {"id": "ADE_val_00001616", "file_name": "ADE_val_00001616.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001617", "file_name": "ADE_val_00001617.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001618", "file_name": "ADE_val_00001618.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001619", "file_name": "ADE_val_00001619.jpg", "width": 277, "height": 428}, {"id": "ADE_val_00001620", "file_name": "ADE_val_00001620.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001621", "file_name": "ADE_val_00001621.jpg", "width": 704, "height": 512}, {"id": "ADE_val_00001622", "file_name": "ADE_val_00001622.jpg", "width": 512, "height": 679}, {"id": "ADE_val_00001623", "file_name": "ADE_val_00001623.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001624", "file_name": "ADE_val_00001624.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001625", "file_name": "ADE_val_00001625.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001626", "file_name": "ADE_val_00001626.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00001627", "file_name": "ADE_val_00001627.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001628", "file_name": "ADE_val_00001628.jpg", "width": 700, "height": 467}, {"id": "ADE_val_00001629", "file_name": "ADE_val_00001629.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00001630", "file_name": "ADE_val_00001630.jpg", "width": 680, "height": 512}, {"id": "ADE_val_00001631", "file_name": "ADE_val_00001631.jpg", "width": 512, "height": 896}, {"id": "ADE_val_00001632", "file_name": "ADE_val_00001632.jpg", "width": 400, "height": 222}, {"id": "ADE_val_00001633", "file_name": "ADE_val_00001633.jpg", "width": 384, "height": 215}, {"id": "ADE_val_00001634", "file_name": "ADE_val_00001634.jpg", "width": 300, "height": 400}, {"id": "ADE_val_00001635", "file_name": "ADE_val_00001635.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001636", "file_name": "ADE_val_00001636.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001637", "file_name": "ADE_val_00001637.jpg", "width": 640, "height": 427}, {"id": "ADE_val_00001638", "file_name": "ADE_val_00001638.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001639", "file_name": "ADE_val_00001639.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001640", "file_name": "ADE_val_00001640.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001641", "file_name": "ADE_val_00001641.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001642", "file_name": "ADE_val_00001642.jpg", "width": 512, "height": 626}, {"id": "ADE_val_00001643", "file_name": "ADE_val_00001643.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001644", "file_name": "ADE_val_00001644.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001645", "file_name": "ADE_val_00001645.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001646", "file_name": "ADE_val_00001646.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001647", "file_name": "ADE_val_00001647.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001648", "file_name": "ADE_val_00001648.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001649", "file_name": "ADE_val_00001649.jpg", "width": 400, "height": 267}, {"id": "ADE_val_00001650", "file_name": "ADE_val_00001650.jpg", "width": 350, "height": 233}, {"id": "ADE_val_00001651", "file_name": "ADE_val_00001651.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001652", "file_name": "ADE_val_00001652.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001653", "file_name": "ADE_val_00001653.jpg", "width": 333, "height": 345}, {"id": "ADE_val_00001654", "file_name": "ADE_val_00001654.jpg", "width": 341, "height": 530}, {"id": "ADE_val_00001655", "file_name": "ADE_val_00001655.jpg", "width": 650, "height": 450}, {"id": "ADE_val_00001656", "file_name": "ADE_val_00001656.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001657", "file_name": "ADE_val_00001657.jpg", "width": 240, "height": 320}, {"id": "ADE_val_00001658", "file_name": "ADE_val_00001658.jpg", "width": 200, "height": 280}, {"id": "ADE_val_00001659", "file_name": "ADE_val_00001659.jpg", "width": 200, "height": 235}, {"id": "ADE_val_00001660", "file_name": "ADE_val_00001660.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001661", "file_name": "ADE_val_00001661.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001662", "file_name": "ADE_val_00001662.jpg", "width": 442, "height": 600}, {"id": "ADE_val_00001663", "file_name": "ADE_val_00001663.jpg", "width": 684, "height": 512}, {"id": "ADE_val_00001664", "file_name": "ADE_val_00001664.jpg", "width": 500, "height": 357}, {"id": "ADE_val_00001665", "file_name": "ADE_val_00001665.jpg", "width": 592, "height": 413}, {"id": "ADE_val_00001666", "file_name": "ADE_val_00001666.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001667", "file_name": "ADE_val_00001667.jpg", "width": 355, "height": 204}, {"id": "ADE_val_00001668", "file_name": "ADE_val_00001668.jpg", "width": 294, "height": 363}, {"id": "ADE_val_00001669", "file_name": "ADE_val_00001669.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001670", "file_name": "ADE_val_00001670.jpg", "width": 200, "height": 258}, {"id": "ADE_val_00001671", "file_name": "ADE_val_00001671.jpg", "width": 676, "height": 512}, {"id": "ADE_val_00001672", "file_name": "ADE_val_00001672.jpg", "width": 280, "height": 210}, {"id": "ADE_val_00001673", "file_name": "ADE_val_00001673.jpg", "width": 263, "height": 350}, {"id": "ADE_val_00001674", "file_name": "ADE_val_00001674.jpg", "width": 500, "height": 330}, {"id": "ADE_val_00001675", "file_name": "ADE_val_00001675.jpg", "width": 586, "height": 349}, {"id": "ADE_val_00001676", "file_name": "ADE_val_00001676.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001677", "file_name": "ADE_val_00001677.jpg", "width": 500, "height": 333}, {"id": "ADE_val_00001678", "file_name": "ADE_val_00001678.jpg", "width": 769, "height": 512}, {"id": "ADE_val_00001679", "file_name": "ADE_val_00001679.jpg", "width": 415, "height": 283}, {"id": "ADE_val_00001680", "file_name": "ADE_val_00001680.jpg", "width": 600, "height": 450}, {"id": "ADE_val_00001681", "file_name": "ADE_val_00001681.jpg", "width": 200, "height": 200}, {"id": "ADE_val_00001682", "file_name": "ADE_val_00001682.jpg", "width": 295, "height": 200}, {"id": "ADE_val_00001683", "file_name": "ADE_val_00001683.jpg", "width": 216, "height": 231}, {"id": "ADE_val_00001684", "file_name": "ADE_val_00001684.jpg", "width": 333, "height": 250}, {"id": "ADE_val_00001685", "file_name": "ADE_val_00001685.jpg", "width": 512, "height": 747}, {"id": "ADE_val_00001686", "file_name": "ADE_val_00001686.jpg", "width": 614, "height": 400}, {"id": "ADE_val_00001687", "file_name": "ADE_val_00001687.jpg", "width": 460, "height": 368}, {"id": "ADE_val_00001688", "file_name": "ADE_val_00001688.jpg", "width": 400, "height": 315}, {"id": "ADE_val_00001689", "file_name": "ADE_val_00001689.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001690", "file_name": "ADE_val_00001690.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001691", "file_name": "ADE_val_00001691.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001692", "file_name": "ADE_val_00001692.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001693", "file_name": "ADE_val_00001693.jpg", "width": 760, "height": 512}, {"id": "ADE_val_00001694", "file_name": "ADE_val_00001694.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00001695", "file_name": "ADE_val_00001695.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001696", "file_name": "ADE_val_00001696.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001697", "file_name": "ADE_val_00001697.jpg", "width": 740, "height": 493}, {"id": "ADE_val_00001698", "file_name": "ADE_val_00001698.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001699", "file_name": "ADE_val_00001699.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001700", "file_name": "ADE_val_00001700.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001701", "file_name": "ADE_val_00001701.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001702", "file_name": "ADE_val_00001702.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001703", "file_name": "ADE_val_00001703.jpg", "width": 600, "height": 480}, {"id": "ADE_val_00001704", "file_name": "ADE_val_00001704.jpg", "width": 798, "height": 512}, {"id": "ADE_val_00001705", "file_name": "ADE_val_00001705.jpg", "width": 300, "height": 200}, {"id": "ADE_val_00001706", "file_name": "ADE_val_00001706.jpg", "width": 512, "height": 676}, {"id": "ADE_val_00001707", "file_name": "ADE_val_00001707.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001708", "file_name": "ADE_val_00001708.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001709", "file_name": "ADE_val_00001709.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001710", "file_name": "ADE_val_00001710.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001711", "file_name": "ADE_val_00001711.jpg", "width": 594, "height": 472}, {"id": "ADE_val_00001712", "file_name": "ADE_val_00001712.jpg", "width": 320, "height": 240}, {"id": "ADE_val_00001713", "file_name": "ADE_val_00001713.jpg", "width": 444, "height": 300}, {"id": "ADE_val_00001714", "file_name": "ADE_val_00001714.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001715", "file_name": "ADE_val_00001715.jpg", "width": 687, "height": 454}, {"id": "ADE_val_00001716", "file_name": "ADE_val_00001716.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001717", "file_name": "ADE_val_00001717.jpg", "width": 430, "height": 500}, {"id": "ADE_val_00001718", "file_name": "ADE_val_00001718.jpg", "width": 290, "height": 290}, {"id": "ADE_val_00001719", "file_name": "ADE_val_00001719.jpg", "width": 480, "height": 374}, {"id": "ADE_val_00001720", "file_name": "ADE_val_00001720.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001721", "file_name": "ADE_val_00001721.jpg", "width": 350, "height": 262}, {"id": "ADE_val_00001722", "file_name": "ADE_val_00001722.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001723", "file_name": "ADE_val_00001723.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001724", "file_name": "ADE_val_00001724.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00001725", "file_name": "ADE_val_00001725.jpg", "width": 682, "height": 512}, {"id": "ADE_val_00001726", "file_name": "ADE_val_00001726.jpg", "width": 556, "height": 371}, {"id": "ADE_val_00001727", "file_name": "ADE_val_00001727.jpg", "width": 545, "height": 409}, {"id": "ADE_val_00001728", "file_name": "ADE_val_00001728.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001729", "file_name": "ADE_val_00001729.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001730", "file_name": "ADE_val_00001730.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001731", "file_name": "ADE_val_00001731.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001732", "file_name": "ADE_val_00001732.jpg", "width": 843, "height": 512}, {"id": "ADE_val_00001733", "file_name": "ADE_val_00001733.jpg", "width": 779, "height": 512}, {"id": "ADE_val_00001734", "file_name": "ADE_val_00001734.jpg", "width": 360, "height": 480}, {"id": "ADE_val_00001735", "file_name": "ADE_val_00001735.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001736", "file_name": "ADE_val_00001736.jpg", "width": 291, "height": 201}, {"id": "ADE_val_00001737", "file_name": "ADE_val_00001737.jpg", "width": 512, "height": 384}, {"id": "ADE_val_00001738", "file_name": "ADE_val_00001738.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001739", "file_name": "ADE_val_00001739.jpg", "width": 663, "height": 394}, {"id": "ADE_val_00001740", "file_name": "ADE_val_00001740.jpg", "width": 360, "height": 203}, {"id": "ADE_val_00001741", "file_name": "ADE_val_00001741.jpg", "width": 334, "height": 500}, {"id": "ADE_val_00001742", "file_name": "ADE_val_00001742.jpg", "width": 405, "height": 282}, {"id": "ADE_val_00001743", "file_name": "ADE_val_00001743.jpg", "width": 512, "height": 768}, {"id": "ADE_val_00001744", "file_name": "ADE_val_00001744.jpg", "width": 540, "height": 361}, {"id": "ADE_val_00001745", "file_name": "ADE_val_00001745.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001746", "file_name": "ADE_val_00001746.jpg", "width": 600, "height": 450}, {"id": "ADE_val_00001747", "file_name": "ADE_val_00001747.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001748", "file_name": "ADE_val_00001748.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001749", "file_name": "ADE_val_00001749.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00001750", "file_name": "ADE_val_00001750.jpg", "width": 630, "height": 512}, {"id": "ADE_val_00001751", "file_name": "ADE_val_00001751.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00001752", "file_name": "ADE_val_00001752.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001753", "file_name": "ADE_val_00001753.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001754", "file_name": "ADE_val_00001754.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001755", "file_name": "ADE_val_00001755.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001756", "file_name": "ADE_val_00001756.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001757", "file_name": "ADE_val_00001757.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001758", "file_name": "ADE_val_00001758.jpg", "width": 250, "height": 337}, {"id": "ADE_val_00001759", "file_name": "ADE_val_00001759.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001760", "file_name": "ADE_val_00001760.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001761", "file_name": "ADE_val_00001761.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001762", "file_name": "ADE_val_00001762.jpg", "width": 512, "height": 771}, {"id": "ADE_val_00001763", "file_name": "ADE_val_00001763.jpg", "width": 200, "height": 300}, {"id": "ADE_val_00001764", "file_name": "ADE_val_00001764.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001765", "file_name": "ADE_val_00001765.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001766", "file_name": "ADE_val_00001766.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001767", "file_name": "ADE_val_00001767.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001768", "file_name": "ADE_val_00001768.jpg", "width": 500, "height": 334}, {"id": "ADE_val_00001769", "file_name": "ADE_val_00001769.jpg", "width": 770, "height": 512}, {"id": "ADE_val_00001770", "file_name": "ADE_val_00001770.jpg", "width": 558, "height": 357}, {"id": "ADE_val_00001771", "file_name": "ADE_val_00001771.jpg", "width": 576, "height": 432}, {"id": "ADE_val_00001772", "file_name": "ADE_val_00001772.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001773", "file_name": "ADE_val_00001773.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001774", "file_name": "ADE_val_00001774.jpg", "width": 512, "height": 783}, {"id": "ADE_val_00001775", "file_name": "ADE_val_00001775.jpg", "width": 251, "height": 300}, {"id": "ADE_val_00001776", "file_name": "ADE_val_00001776.jpg", "width": 320, "height": 240}, {"id": "ADE_val_00001777", "file_name": "ADE_val_00001777.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001778", "file_name": "ADE_val_00001778.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001779", "file_name": "ADE_val_00001779.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001780", "file_name": "ADE_val_00001780.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001781", "file_name": "ADE_val_00001781.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001782", "file_name": "ADE_val_00001782.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001783", "file_name": "ADE_val_00001783.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001784", "file_name": "ADE_val_00001784.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001785", "file_name": "ADE_val_00001785.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001786", "file_name": "ADE_val_00001786.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001787", "file_name": "ADE_val_00001787.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001788", "file_name": "ADE_val_00001788.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001789", "file_name": "ADE_val_00001789.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001790", "file_name": "ADE_val_00001790.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001791", "file_name": "ADE_val_00001791.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001792", "file_name": "ADE_val_00001792.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001793", "file_name": "ADE_val_00001793.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001794", "file_name": "ADE_val_00001794.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001795", "file_name": "ADE_val_00001795.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001796", "file_name": "ADE_val_00001796.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001797", "file_name": "ADE_val_00001797.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001798", "file_name": "ADE_val_00001798.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001799", "file_name": "ADE_val_00001799.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001800", "file_name": "ADE_val_00001800.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001801", "file_name": "ADE_val_00001801.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001802", "file_name": "ADE_val_00001802.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001803", "file_name": "ADE_val_00001803.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001804", "file_name": "ADE_val_00001804.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001805", "file_name": "ADE_val_00001805.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001806", "file_name": "ADE_val_00001806.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001807", "file_name": "ADE_val_00001807.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001808", "file_name": "ADE_val_00001808.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001809", "file_name": "ADE_val_00001809.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001810", "file_name": "ADE_val_00001810.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001811", "file_name": "ADE_val_00001811.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001812", "file_name": "ADE_val_00001812.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001813", "file_name": "ADE_val_00001813.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001814", "file_name": "ADE_val_00001814.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001815", "file_name": "ADE_val_00001815.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001816", "file_name": "ADE_val_00001816.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001817", "file_name": "ADE_val_00001817.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001818", "file_name": "ADE_val_00001818.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001819", "file_name": "ADE_val_00001819.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001820", "file_name": "ADE_val_00001820.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001821", "file_name": "ADE_val_00001821.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001822", "file_name": "ADE_val_00001822.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001823", "file_name": "ADE_val_00001823.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001824", "file_name": "ADE_val_00001824.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001825", "file_name": "ADE_val_00001825.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001826", "file_name": "ADE_val_00001826.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001827", "file_name": "ADE_val_00001827.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001828", "file_name": "ADE_val_00001828.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001829", "file_name": "ADE_val_00001829.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001830", "file_name": "ADE_val_00001830.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001831", "file_name": "ADE_val_00001831.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001832", "file_name": "ADE_val_00001832.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001833", "file_name": "ADE_val_00001833.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001834", "file_name": "ADE_val_00001834.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001835", "file_name": "ADE_val_00001835.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001836", "file_name": "ADE_val_00001836.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001837", "file_name": "ADE_val_00001837.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001838", "file_name": "ADE_val_00001838.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001839", "file_name": "ADE_val_00001839.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001840", "file_name": "ADE_val_00001840.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001841", "file_name": "ADE_val_00001841.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001842", "file_name": "ADE_val_00001842.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001843", "file_name": "ADE_val_00001843.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001844", "file_name": "ADE_val_00001844.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001845", "file_name": "ADE_val_00001845.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001846", "file_name": "ADE_val_00001846.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001847", "file_name": "ADE_val_00001847.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001848", "file_name": "ADE_val_00001848.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001849", "file_name": "ADE_val_00001849.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001850", "file_name": "ADE_val_00001850.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001851", "file_name": "ADE_val_00001851.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001852", "file_name": "ADE_val_00001852.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001853", "file_name": "ADE_val_00001853.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001854", "file_name": "ADE_val_00001854.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001855", "file_name": "ADE_val_00001855.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001856", "file_name": "ADE_val_00001856.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001857", "file_name": "ADE_val_00001857.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001858", "file_name": "ADE_val_00001858.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001859", "file_name": "ADE_val_00001859.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001860", "file_name": "ADE_val_00001860.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001861", "file_name": "ADE_val_00001861.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001862", "file_name": "ADE_val_00001862.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001863", "file_name": "ADE_val_00001863.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001864", "file_name": "ADE_val_00001864.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001865", "file_name": "ADE_val_00001865.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001866", "file_name": "ADE_val_00001866.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001867", "file_name": "ADE_val_00001867.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001868", "file_name": "ADE_val_00001868.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001869", "file_name": "ADE_val_00001869.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001870", "file_name": "ADE_val_00001870.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001871", "file_name": "ADE_val_00001871.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001872", "file_name": "ADE_val_00001872.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001873", "file_name": "ADE_val_00001873.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001874", "file_name": "ADE_val_00001874.jpg", "width": 350, "height": 263}, {"id": "ADE_val_00001875", "file_name": "ADE_val_00001875.jpg", "width": 500, "height": 500}, {"id": "ADE_val_00001876", "file_name": "ADE_val_00001876.jpg", "width": 500, "height": 334}, {"id": "ADE_val_00001877", "file_name": "ADE_val_00001877.jpg", "width": 408, "height": 334}, {"id": "ADE_val_00001878", "file_name": "ADE_val_00001878.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001879", "file_name": "ADE_val_00001879.jpg", "width": 684, "height": 512}, {"id": "ADE_val_00001880", "file_name": "ADE_val_00001880.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001881", "file_name": "ADE_val_00001881.jpg", "width": 250, "height": 201}, {"id": "ADE_val_00001882", "file_name": "ADE_val_00001882.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001883", "file_name": "ADE_val_00001883.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001884", "file_name": "ADE_val_00001884.jpg", "width": 384, "height": 256}, {"id": "ADE_val_00001885", "file_name": "ADE_val_00001885.jpg", "width": 861, "height": 495}, {"id": "ADE_val_00001886", "file_name": "ADE_val_00001886.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001887", "file_name": "ADE_val_00001887.jpg", "width": 684, "height": 512}, {"id": "ADE_val_00001888", "file_name": "ADE_val_00001888.jpg", "width": 432, "height": 303}, {"id": "ADE_val_00001889", "file_name": "ADE_val_00001889.jpg", "width": 640, "height": 426}, {"id": "ADE_val_00001890", "file_name": "ADE_val_00001890.jpg", "width": 512, "height": 947}, {"id": "ADE_val_00001891", "file_name": "ADE_val_00001891.jpg", "width": 402, "height": 302}, {"id": "ADE_val_00001892", "file_name": "ADE_val_00001892.jpg", "width": 576, "height": 359}, {"id": "ADE_val_00001893", "file_name": "ADE_val_00001893.jpg", "width": 290, "height": 218}, {"id": "ADE_val_00001894", "file_name": "ADE_val_00001894.jpg", "width": 571, "height": 407}, {"id": "ADE_val_00001895", "file_name": "ADE_val_00001895.jpg", "width": 291, "height": 212}, {"id": "ADE_val_00001896", "file_name": "ADE_val_00001896.jpg", "width": 512, "height": 774}, {"id": "ADE_val_00001897", "file_name": "ADE_val_00001897.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001898", "file_name": "ADE_val_00001898.jpg", "width": 640, "height": 480}, {"id": "ADE_val_00001899", "file_name": "ADE_val_00001899.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001900", "file_name": "ADE_val_00001900.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001901", "file_name": "ADE_val_00001901.jpg", "width": 440, "height": 295}, {"id": "ADE_val_00001902", "file_name": "ADE_val_00001902.jpg", "width": 500, "height": 375}, {"id": "ADE_val_00001903", "file_name": "ADE_val_00001903.jpg", "width": 600, "height": 372}, {"id": "ADE_val_00001904", "file_name": "ADE_val_00001904.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001905", "file_name": "ADE_val_00001905.jpg", "width": 280, "height": 280}, {"id": "ADE_val_00001906", "file_name": "ADE_val_00001906.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001907", "file_name": "ADE_val_00001907.jpg", "width": 480, "height": 360}, {"id": "ADE_val_00001908", "file_name": "ADE_val_00001908.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001909", "file_name": "ADE_val_00001909.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001910", "file_name": "ADE_val_00001910.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001911", "file_name": "ADE_val_00001911.jpg", "width": 259, "height": 206}, {"id": "ADE_val_00001912", "file_name": "ADE_val_00001912.jpg", "width": 500, "height": 397}, {"id": "ADE_val_00001913", "file_name": "ADE_val_00001913.jpg", "width": 536, "height": 223}, {"id": "ADE_val_00001914", "file_name": "ADE_val_00001914.jpg", "width": 512, "height": 691}, {"id": "ADE_val_00001915", "file_name": "ADE_val_00001915.jpg", "width": 400, "height": 258}, {"id": "ADE_val_00001916", "file_name": "ADE_val_00001916.jpg", "width": 504, "height": 672}, {"id": "ADE_val_00001917", "file_name": "ADE_val_00001917.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001918", "file_name": "ADE_val_00001918.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001919", "file_name": "ADE_val_00001919.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001920", "file_name": "ADE_val_00001920.jpg", "width": 250, "height": 200}, {"id": "ADE_val_00001921", "file_name": "ADE_val_00001921.jpg", "width": 312, "height": 235}, {"id": "ADE_val_00001922", "file_name": "ADE_val_00001922.jpg", "width": 640, "height": 359}, {"id": "ADE_val_00001923", "file_name": "ADE_val_00001923.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001924", "file_name": "ADE_val_00001924.jpg", "width": 400, "height": 300}, {"id": "ADE_val_00001925", "file_name": "ADE_val_00001925.jpg", "width": 600, "height": 450}, {"id": "ADE_val_00001926", "file_name": "ADE_val_00001926.jpg", "width": 300, "height": 200}, {"id": "ADE_val_00001927", "file_name": "ADE_val_00001927.jpg", "width": 508, "height": 640}, {"id": "ADE_val_00001928", "file_name": "ADE_val_00001928.jpg", "width": 472, "height": 311}, {"id": "ADE_val_00001929", "file_name": "ADE_val_00001929.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001930", "file_name": "ADE_val_00001930.jpg", "width": 717, "height": 512}, {"id": "ADE_val_00001931", "file_name": "ADE_val_00001931.jpg", "width": 234, "height": 311}, {"id": "ADE_val_00001932", "file_name": "ADE_val_00001932.jpg", "width": 512, "height": 682}, {"id": "ADE_val_00001933", "file_name": "ADE_val_00001933.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001934", "file_name": "ADE_val_00001934.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001935", "file_name": "ADE_val_00001935.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001936", "file_name": "ADE_val_00001936.jpg", "width": 512, "height": 768}, {"id": "ADE_val_00001937", "file_name": "ADE_val_00001937.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001938", "file_name": "ADE_val_00001938.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001939", "file_name": "ADE_val_00001939.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001940", "file_name": "ADE_val_00001940.jpg", "width": 300, "height": 212}, {"id": "ADE_val_00001941", "file_name": "ADE_val_00001941.jpg", "width": 300, "height": 225}, {"id": "ADE_val_00001942", "file_name": "ADE_val_00001942.jpg", "width": 320, "height": 240}, {"id": "ADE_val_00001943", "file_name": "ADE_val_00001943.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001944", "file_name": "ADE_val_00001944.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001945", "file_name": "ADE_val_00001945.jpg", "width": 684, "height": 512}, {"id": "ADE_val_00001946", "file_name": "ADE_val_00001946.jpg", "width": 512, "height": 771}, {"id": "ADE_val_00001947", "file_name": "ADE_val_00001947.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001948", "file_name": "ADE_val_00001948.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001949", "file_name": "ADE_val_00001949.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001950", "file_name": "ADE_val_00001950.jpg", "width": 512, "height": 683}, {"id": "ADE_val_00001951", "file_name": "ADE_val_00001951.jpg", "width": 450, "height": 600}, {"id": "ADE_val_00001952", "file_name": "ADE_val_00001952.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001953", "file_name": "ADE_val_00001953.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001954", "file_name": "ADE_val_00001954.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001955", "file_name": "ADE_val_00001955.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001956", "file_name": "ADE_val_00001956.jpg", "width": 302, "height": 415}, {"id": "ADE_val_00001957", "file_name": "ADE_val_00001957.jpg", "width": 240, "height": 211}, {"id": "ADE_val_00001958", "file_name": "ADE_val_00001958.jpg", "width": 225, "height": 225}, {"id": "ADE_val_00001959", "file_name": "ADE_val_00001959.jpg", "width": 640, "height": 512}, {"id": "ADE_val_00001960", "file_name": "ADE_val_00001960.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001961", "file_name": "ADE_val_00001961.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001962", "file_name": "ADE_val_00001962.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001963", "file_name": "ADE_val_00001963.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001964", "file_name": "ADE_val_00001964.jpg", "width": 512, "height": 719}, {"id": "ADE_val_00001965", "file_name": "ADE_val_00001965.jpg", "width": 722, "height": 512}, {"id": "ADE_val_00001966", "file_name": "ADE_val_00001966.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001967", "file_name": "ADE_val_00001967.jpg", "width": 709, "height": 512}, {"id": "ADE_val_00001968", "file_name": "ADE_val_00001968.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001969", "file_name": "ADE_val_00001969.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001970", "file_name": "ADE_val_00001970.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001971", "file_name": "ADE_val_00001971.jpg", "width": 685, "height": 512}, {"id": "ADE_val_00001972", "file_name": "ADE_val_00001972.jpg", "width": 764, "height": 512}, {"id": "ADE_val_00001973", "file_name": "ADE_val_00001973.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001974", "file_name": "ADE_val_00001974.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001975", "file_name": "ADE_val_00001975.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001976", "file_name": "ADE_val_00001976.jpg", "width": 768, "height": 512}, {"id": "ADE_val_00001977", "file_name": "ADE_val_00001977.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001978", "file_name": "ADE_val_00001978.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001979", "file_name": "ADE_val_00001979.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001980", "file_name": "ADE_val_00001980.jpg", "width": 240, "height": 176}, {"id": "ADE_val_00001981", "file_name": "ADE_val_00001981.jpg", "width": 601, "height": 390}, {"id": "ADE_val_00001982", "file_name": "ADE_val_00001982.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001983", "file_name": "ADE_val_00001983.jpg", "width": 773, "height": 512}, {"id": "ADE_val_00001984", "file_name": "ADE_val_00001984.jpg", "width": 381, "height": 381}, {"id": "ADE_val_00001985", "file_name": "ADE_val_00001985.jpg", "width": 400, "height": 270}, {"id": "ADE_val_00001986", "file_name": "ADE_val_00001986.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001987", "file_name": "ADE_val_00001987.jpg", "width": 512, "height": 771}, {"id": "ADE_val_00001988", "file_name": "ADE_val_00001988.jpg", "width": 236, "height": 267}, {"id": "ADE_val_00001989", "file_name": "ADE_val_00001989.jpg", "width": 800, "height": 423}, {"id": "ADE_val_00001990", "file_name": "ADE_val_00001990.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001991", "file_name": "ADE_val_00001991.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001992", "file_name": "ADE_val_00001992.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001993", "file_name": "ADE_val_00001993.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001994", "file_name": "ADE_val_00001994.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001995", "file_name": "ADE_val_00001995.jpg", "width": 683, "height": 512}, {"id": "ADE_val_00001996", "file_name": "ADE_val_00001996.jpg", "width": 320, "height": 240}, {"id": "ADE_val_00001997", "file_name": "ADE_val_00001997.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00001998", "file_name": "ADE_val_00001998.jpg", "width": 257, "height": 256}, {"id": "ADE_val_00001999", "file_name": "ADE_val_00001999.jpg", "width": 256, "height": 256}, {"id": "ADE_val_00002000", "file_name": "ADE_val_00002000.jpg", "width": 400, "height": 300}], "annotations": [{"image_id": "ADE_val_00000001", "file_name": "ADE_val_00000001.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14538, "bbox": [0, 383, 348, 52], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 123406, "bbox": [166, 46, 517, 384], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 134492, "bbox": [0, 0, 682, 356], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 8784, "bbox": [1, 308, 170, 84], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 1755, "bbox": [522, 492, 160, 19], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 53099, "bbox": [0, 417, 682, 94], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 10009, "bbox": [504, 262, 177, 189], "iscrowd": 0}]}, {"image_id": "ADE_val_00000002", "file_name": "ADE_val_00000002.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 8309, "bbox": [2, 283, 194, 81], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 49211, "bbox": [20, 18, 464, 301], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 85997, "bbox": [2, 1, 496, 243], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 20293, "bbox": [2, 203, 496, 156], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 341, "bbox": [47, 343, 24, 21], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 569, "bbox": [2, 333, 23, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00000003", "file_name": "ADE_val_00000003.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 2901, "bbox": [0, 144, 106, 109], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 9024, "bbox": [1, 12, 399, 136], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 27749, "bbox": [0, 0, 400, 127], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2048, "bbox": [43, 118, 122, 38], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 30083, "bbox": [134, 140, 266, 160], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 22518, "bbox": [0, 144, 399, 155], "iscrowd": 0}, {"id": 10747648, "category_id": 97, "area": 17664, "bbox": [227, 1, 173, 189], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2281, "bbox": [0, 139, 85, 36], "iscrowd": 0}, {"id": 15039492, "category_id": 21, "area": 49, "bbox": [137, 138, 9, 7], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 81, "bbox": [231, 104, 10, 11], "iscrowd": 0}, {"id": 8847615, "category_id": 44, "area": 72, "bbox": [221, 103, 7, 17], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 1681, "bbox": [165, 120, 62, 31], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 113, "bbox": [240, 58, 37, 25], "iscrowd": 0}, {"id": 16726528, "category_id": 88, "area": 89, "bbox": [194, 91, 26, 29], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 1112, "bbox": [338, 124, 61, 32], "iscrowd": 0}, {"id": 58537, "category_id": 103, "area": 504, "bbox": [349, 110, 51, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00000004", "file_name": "ADE_val_00000004.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 153990, "bbox": [0, 1, 682, 248], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 24632, "bbox": [0, 211, 680, 66], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 117590, "bbox": [0, 265, 682, 246], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 1943, "bbox": [0, 211, 446, 46], "iscrowd": 0}, {"id": 65433, "category_id": 55, "area": 24578, "bbox": [1, 297, 681, 49], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1110, "bbox": [390, 313, 69, 60], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 14379, "bbox": [329, 313, 221, 108], "iscrowd": 0}, {"id": 5439232, "category_id": 91, "area": 5542, "bbox": [122, 230, 213, 80], "iscrowd": 0}]}, {"image_id": "ADE_val_00000005", "file_name": "ADE_val_00000005.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18836, "bbox": [2, 47, 398, 120], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5889, "bbox": [154, 134, 65, 165], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 13373, "bbox": [66, 1, 278, 103], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 99, "bbox": [188, 112, 6, 25], "iscrowd": 0}, {"id": 4005803, "category_id": 13, "area": 677, "bbox": [2, 146, 25, 34], "iscrowd": 0}, {"id": 2099845, "category_id": 13, "area": 154, "bbox": [112, 145, 21, 9], "iscrowd": 0}, {"id": 4853925, "category_id": 13, "area": 275, "bbox": [49, 124, 18, 18], "iscrowd": 0}, {"id": 4128925, "category_id": 13, "area": 152, "bbox": [88, 127, 17, 12], "iscrowd": 0}, {"id": 2752680, "category_id": 13, "area": 2719, "bbox": [262, 221, 137, 77], "iscrowd": 0}, {"id": 4137085, "category_id": 13, "area": 348, "bbox": [316, 148, 28, 16], "iscrowd": 0}, {"id": 4006572, "category_id": 13, "area": 268, "bbox": [205, 133, 22, 39], "iscrowd": 0}, {"id": 2556065, "category_id": 13, "area": 476, "bbox": [142, 126, 32, 62], "iscrowd": 0}, {"id": 4784288, "category_id": 13, "area": 399, "bbox": [266, 147, 26, 18], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 153, "bbox": [133, 231, 13, 15], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 213, "bbox": [180, 104, 22, 21], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 7677, "bbox": [195, 118, 205, 181], "iscrowd": 0}, {"id": 14483205, "category_id": 32, "area": 4337, "bbox": [0, 119, 188, 180], "iscrowd": 0}, {"id": 13103616, "category_id": 32, "area": 8225, "bbox": [31, 176, 122, 123], "iscrowd": 0}, {"id": 14475780, "category_id": 32, "area": 3057, "bbox": [81, 158, 81, 114], "iscrowd": 0}, {"id": 12903705, "category_id": 32, "area": 750, "bbox": [108, 154, 62, 82], "iscrowd": 0}, {"id": 15399680, "category_id": 32, "area": 1263, "bbox": [26, 155, 48, 42], "iscrowd": 0}, {"id": 13757453, "category_id": 32, "area": 745, "bbox": [51, 143, 48, 34], "iscrowd": 0}, {"id": 13757696, "category_id": 32, "area": 732, "bbox": [125, 140, 43, 57], "iscrowd": 0}, {"id": 14475808, "category_id": 32, "area": 346, "bbox": [85, 139, 34, 18], "iscrowd": 0}, {"id": 13827840, "category_id": 32, "area": 6519, "bbox": [0, 219, 92, 80], "iscrowd": 0}, {"id": 15202593, "category_id": 32, "area": 1399, "bbox": [0, 175, 30, 53], "iscrowd": 0}, {"id": 15859456, "category_id": 32, "area": 5248, "bbox": [223, 185, 131, 114], "iscrowd": 0}, {"id": 14673950, "category_id": 32, "area": 3381, "bbox": [214, 163, 91, 106], "iscrowd": 0}, {"id": 13758729, "category_id": 32, "area": 1609, "bbox": [311, 164, 65, 71], "iscrowd": 0}, {"id": 15597312, "category_id": 32, "area": 1999, "bbox": [356, 166, 43, 67], "iscrowd": 0}, {"id": 16644610, "category_id": 32, "area": 530, "bbox": [345, 154, 42, 31], "iscrowd": 0}, {"id": 16510976, "category_id": 32, "area": 1277, "bbox": [211, 150, 56, 72], "iscrowd": 0}, {"id": 14483200, "category_id": 32, "area": 803, "bbox": [208, 144, 49, 70], "iscrowd": 0}, {"id": 16449280, "category_id": 32, "area": 498, "bbox": [293, 153, 27, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00000006", "file_name": "ADE_val_00000006.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 3208, "bbox": [448, 388, 235, 39], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 285882, "bbox": [2, 1, 681, 436], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 56528, "bbox": [0, 408, 683, 104], "iscrowd": 0}, {"id": 65433, "category_id": 55, "area": 1190, "bbox": [0, 430, 413, 20], "iscrowd": 0}, {"id": 5439232, "category_id": 91, "area": 165, "bbox": [547, 409, 32, 7], "iscrowd": 0}, {"id": 5763864, "category_id": 91, "area": 137, "bbox": [300, 425, 31, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00000007", "file_name": "ADE_val_00000007.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 94373, "bbox": [0, 1, 499, 340], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 16925, "bbox": [114, 245, 280, 96], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 52959, "bbox": [1, 0, 496, 187], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 993, "bbox": [270, 206, 27, 68], "iscrowd": 0}, {"id": 3212165, "category_id": 13, "area": 263, "bbox": [257, 239, 15, 35], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 190, "bbox": [247, 114, 19, 10], "iscrowd": 0}, {"id": 10420479, "category_id": 44, "area": 45, "bbox": [318, 178, 5, 9], "iscrowd": 0}, {"id": 10291965, "category_id": 44, "area": 36, "bbox": [192, 181, 6, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00000008", "file_name": "ADE_val_00000008.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 67065, "bbox": [6, 9, 361, 481], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 48364, "bbox": [7, 319, 360, 171], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 54193, "bbox": [55, 9, 312, 254], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 908, "bbox": [9, 301, 144, 124], "iscrowd": 0}]}, {"image_id": "ADE_val_00000009", "file_name": "ADE_val_00000009.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 57895, "bbox": [0, 114, 767, 208], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 144200, "bbox": [1, 272, 766, 239], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 94667, "bbox": [1, 0, 723, 169], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 28, "bbox": [425, 254, 6, 7], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3951, "bbox": [649, 212, 88, 49], "iscrowd": 0}, {"id": 16311288, "category_id": 9, "area": 1237, "bbox": [742, 206, 25, 59], "iscrowd": 0}, {"id": 15584202, "category_id": 9, "area": 1288, "bbox": [253, 207, 34, 38], "iscrowd": 0}, {"id": 15857360, "category_id": 9, "area": 1145, "bbox": [289, 208, 33, 37], "iscrowd": 0}, {"id": 13369063, "category_id": 9, "area": 1154, "bbox": [551, 207, 26, 48], "iscrowd": 0}, {"id": 13620438, "category_id": 9, "area": 1173, "bbox": [581, 209, 26, 46], "iscrowd": 0}, {"id": 16777188, "category_id": 9, "area": 1106, "bbox": [615, 209, 25, 47], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 507, "bbox": [291, 238, 26, 42], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2902, "bbox": [139, 205, 37, 79], "iscrowd": 0}, {"id": 3145488, "category_id": 15, "area": 1961, "bbox": [219, 208, 31, 71], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5564, "bbox": [0, 263, 85, 80], "iscrowd": 0}, {"id": 6226150, "category_id": 16, "area": 17772, "bbox": [0, 327, 104, 182], "iscrowd": 0}, {"id": 3739366, "category_id": 16, "area": 138, "bbox": [226, 267, 39, 7], "iscrowd": 0}, {"id": 6489061, "category_id": 16, "area": 91, "bbox": [339, 273, 23, 6], "iscrowd": 0}, {"id": 4063473, "category_id": 16, "area": 180, "bbox": [404, 272, 23, 9], "iscrowd": 0}, {"id": 7209215, "category_id": 16, "area": 153, "bbox": [285, 263, 31, 7], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 356, "bbox": [204, 264, 29, 42], "iscrowd": 0}, {"id": 1132474, "category_id": 20, "area": 712, "bbox": [318, 271, 32, 46], "iscrowd": 0}, {"id": 1531059, "category_id": 20, "area": 109, "bbox": [263, 259, 8, 33], "iscrowd": 0}, {"id": 12734, "category_id": 20, "area": 304, "bbox": [269, 262, 24, 32], "iscrowd": 0}, {"id": 23014, "category_id": 20, "area": 439, "bbox": [389, 270, 28, 41], "iscrowd": 0}, {"id": 210363, "category_id": 20, "area": 208, "bbox": [344, 267, 21, 41], "iscrowd": 0}, {"id": 12735, "category_id": 20, "area": 228, "bbox": [351, 262, 22, 36], "iscrowd": 0}, {"id": 2178244, "category_id": 20, "area": 206, "bbox": [384, 263, 19, 35], "iscrowd": 0}, {"id": 1396457, "category_id": 20, "area": 864, "bbox": [236, 267, 24, 40], "iscrowd": 0}, {"id": 869312, "category_id": 20, "area": 719, "bbox": [419, 270, 30, 44], "iscrowd": 0}, {"id": 10951, "category_id": 20, "area": 396, "bbox": [468, 259, 23, 33], "iscrowd": 0}, {"id": 20671, "category_id": 20, "area": 441, "bbox": [446, 266, 18, 44], "iscrowd": 0}, {"id": 1134256, "category_id": 20, "area": 290, "bbox": [280, 265, 27, 38], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 371, "bbox": [665, 266, 61, 58], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 12853, "bbox": [660, 0, 107, 129], "iscrowd": 0}, {"id": 9306355, "category_id": 44, "area": 2372, "bbox": [216, 183, 105, 25], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 4112, "bbox": [0, 145, 108, 70], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 1614, "bbox": [408, 184, 56, 30], "iscrowd": 0}, {"id": 1048441, "category_id": 124, "area": 1659, "bbox": [549, 179, 77, 27], "iscrowd": 0}, {"id": 1245031, "category_id": 124, "area": 4187, "bbox": [640, 166, 126, 37], "iscrowd": 0}, {"id": 1507209, "category_id": 124, "area": 1638, "bbox": [122, 180, 70, 27], "iscrowd": 0}, {"id": 1635990, "category_id": 124, "area": 1097, "bbox": [7, 173, 54, 28], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 140, "bbox": [418, 261, 16, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000010", "file_name": "ADE_val_00000010.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 76817, "bbox": [2, 2, 497, 257], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 51122, "bbox": [2, 200, 496, 144], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 21476, "bbox": [3, 2, 495, 86], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 264, "bbox": [379, 199, 23, 30], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1455, "bbox": [437, 270, 34, 74], "iscrowd": 0}, {"id": 5439658, "category_id": 13, "area": 204, "bbox": [262, 213, 17, 22], "iscrowd": 0}, {"id": 2822037, "category_id": 13, "area": 452, "bbox": [328, 224, 16, 51], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 85, "bbox": [193, 97, 19, 10], "iscrowd": 0}, {"id": 3604732, "category_id": 16, "area": 66, "bbox": [244, 98, 20, 9], "iscrowd": 0}, {"id": 4525823, "category_id": 16, "area": 69, "bbox": [296, 99, 22, 15], "iscrowd": 0}, {"id": 4849919, "category_id": 16, "area": 73, "bbox": [343, 99, 24, 17], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 48, "bbox": [184, 95, 16, 19], "iscrowd": 0}, {"id": 18645, "category_id": 20, "area": 97, "bbox": [206, 94, 17, 20], "iscrowd": 0}, {"id": 24796, "category_id": 20, "area": 41, "bbox": [235, 94, 14, 19], "iscrowd": 0}, {"id": 1066687, "category_id": 20, "area": 61, "bbox": [259, 95, 15, 16], "iscrowd": 0}, {"id": 25534, "category_id": 20, "area": 138, "bbox": [286, 93, 19, 20], "iscrowd": 0}, {"id": 19638, "category_id": 20, "area": 60, "bbox": [315, 96, 13, 15], "iscrowd": 0}, {"id": 23984, "category_id": 20, "area": 62, "bbox": [339, 96, 15, 18], "iscrowd": 0}, {"id": 2187207, "category_id": 20, "area": 41, "bbox": [362, 98, 13, 15], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 242, "bbox": [410, 66, 15, 20], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 520, "bbox": [243, 228, 33, 20], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 189, "bbox": [189, 19, 9, 25], "iscrowd": 0}, {"id": 65529, "category_id": 37, "area": 214, "bbox": [331, 19, 9, 27], "iscrowd": 0}, {"id": 59373, "category_id": 37, "area": 214, "bbox": [138, 18, 9, 30], "iscrowd": 0}, {"id": 65517, "category_id": 37, "area": 68, "bbox": [250, 57, 7, 12], "iscrowd": 0}, {"id": 65496, "category_id": 37, "area": 240, "bbox": [238, 20, 10, 27], "iscrowd": 0}, {"id": 327629, "category_id": 37, "area": 263, "bbox": [396, 21, 11, 28], "iscrowd": 0}, {"id": 1900528, "category_id": 37, "area": 77, "bbox": [300, 58, 8, 11], "iscrowd": 0}, {"id": 2228218, "category_id": 37, "area": 41, "bbox": [188, 77, 5, 9], "iscrowd": 0}, {"id": 65510, "category_id": 37, "area": 41, "bbox": [214, 79, 6, 8], "iscrowd": 0}, {"id": 589791, "category_id": 37, "area": 40, "bbox": [288, 78, 5, 8], "iscrowd": 0}, {"id": 453104, "category_id": 37, "area": 59, "bbox": [351, 60, 7, 10], "iscrowd": 0}, {"id": 65495, "category_id": 37, "area": 56, "bbox": [401, 61, 7, 10], "iscrowd": 0}, {"id": 457701, "category_id": 37, "area": 77, "bbox": [198, 57, 8, 11], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 420, "bbox": [271, 243, 21, 23], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 3435, "bbox": [91, 11, 42, 107], "iscrowd": 0}, {"id": 3740643, "category_id": 43, "area": 2382, "bbox": [307, 184, 42, 69], "iscrowd": 0}, {"id": 1114367, "category_id": 43, "area": 1065, "bbox": [346, 184, 19, 73], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2420, "bbox": [248, 7, 81, 32], "iscrowd": 0}, {"id": 8786941, "category_id": 44, "area": 794, "bbox": [101, 49, 18, 53], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 105, "bbox": [135, 5, 15, 9], "iscrowd": 0}, {"id": 1875946, "category_id": 83, "area": 90, "bbox": [185, 5, 16, 7], "iscrowd": 0}, {"id": 47605, "category_id": 83, "area": 50, "bbox": [235, 4, 12, 5], "iscrowd": 0}, {"id": 40673, "category_id": 83, "area": 113, "bbox": [326, 6, 17, 8], "iscrowd": 0}, {"id": 43775, "category_id": 83, "area": 103, "bbox": [392, 8, 17, 8], "iscrowd": 0}, {"id": 1491178, "category_id": 83, "area": 94, "bbox": [455, 10, 16, 7], "iscrowd": 0}, {"id": 1544163, "category_id": 83, "area": 35, "bbox": [365, 28, 7, 6], "iscrowd": 0}, {"id": 171519, "category_id": 83, "area": 19, "bbox": [351, 39, 6, 5], "iscrowd": 0}, {"id": 891115, "category_id": 83, "area": 16, "bbox": [340, 49, 4, 5], "iscrowd": 0}, {"id": 432109, "category_id": 83, "area": 26, "bbox": [227, 26, 6, 6], "iscrowd": 0}, {"id": 1028859, "category_id": 83, "area": 26, "bbox": [227, 37, 5, 6], "iscrowd": 0}, {"id": 40191, "category_id": 83, "area": 23, "bbox": [181, 26, 5, 6], "iscrowd": 0}, {"id": 111359, "category_id": 83, "area": 15, "bbox": [185, 38, 4, 5], "iscrowd": 0}, {"id": 304111, "category_id": 83, "area": 24, "bbox": [188, 47, 5, 6], "iscrowd": 0}, {"id": 692223, "category_id": 83, "area": 17, "bbox": [226, 48, 5, 4], "iscrowd": 0}, {"id": 40166, "category_id": 83, "area": 15, "bbox": [226, 56, 5, 4], "iscrowd": 0}, {"id": 1154303, "category_id": 83, "area": 12, "bbox": [190, 56, 5, 4], "iscrowd": 0}, {"id": 40183, "category_id": 83, "area": 14, "bbox": [193, 63, 5, 4], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 199, "bbox": [384, 225, 11, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00000011", "file_name": "ADE_val_00000011.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 41048, "bbox": [0, 12, 478, 175], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 19469, "bbox": [0, 187, 478, 132], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 19396, "bbox": [0, 0, 477, 100], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 36396, "bbox": [0, 44, 189, 275], "iscrowd": 0}, {"id": 5963952, "category_id": 13, "area": 21003, "bbox": [187, 110, 145, 209], "iscrowd": 0}, {"id": 3023503, "category_id": 13, "area": 1900, "bbox": [335, 117, 45, 135], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 8635, "bbox": [365, 145, 113, 97], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1067, "bbox": [0, 0, 64, 64], "iscrowd": 0}, {"id": 37607, "category_id": 83, "area": 391, "bbox": [292, 7, 28, 19], "iscrowd": 0}, {"id": 45289, "category_id": 83, "area": 393, "bbox": [261, 15, 27, 20], "iscrowd": 0}, {"id": 47333, "category_id": 83, "area": 348, "bbox": [235, 24, 26, 18], "iscrowd": 0}, {"id": 48375, "category_id": 83, "area": 359, "bbox": [212, 30, 25, 19], "iscrowd": 0}, {"id": 114414, "category_id": 83, "area": 259, "bbox": [195, 37, 20, 16], "iscrowd": 0}, {"id": 1879792, "category_id": 83, "area": 243, "bbox": [179, 42, 19, 17], "iscrowd": 0}, {"id": 39167, "category_id": 83, "area": 360, "bbox": [327, 1, 34, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00000012", "file_name": "ADE_val_00000012.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 76346, "bbox": [0, 1, 567, 312], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1436, "bbox": [0, 326, 29, 73], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 15086, "bbox": [0, 0, 259, 114], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 10409, "bbox": [269, 121, 110, 169], "iscrowd": 0}, {"id": 3344516, "category_id": 13, "area": 10805, "bbox": [0, 136, 82, 239], "iscrowd": 0}, {"id": 5178270, "category_id": 13, "area": 15030, "bbox": [301, 138, 229, 180], "iscrowd": 0}, {"id": 4989870, "category_id": 13, "area": 42241, "bbox": [27, 100, 230, 298], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4330, "bbox": [257, 119, 50, 155], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 959, "bbox": [10, 44, 97, 45], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 2120, "bbox": [356, 66, 46, 52], "iscrowd": 0}, {"id": 16738314, "category_id": 144, "area": 2773, "bbox": [418, 54, 57, 57], "iscrowd": 0}]}, {"image_id": "ADE_val_00000013", "file_name": "ADE_val_00000013.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 75699, "bbox": [0, 1, 428, 428], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5941, "bbox": [42, 304, 288, 126], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 47749, "bbox": [47, 215, 337, 214], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 25246, "bbox": [23, 68, 120, 297], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2506, "bbox": [268, 151, 61, 43], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 4989, "bbox": [0, 1, 429, 46], "iscrowd": 0}, {"id": 3080433, "category_id": 25, "area": 4679, "bbox": [223, 45, 161, 89], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 182, "bbox": [170, 272, 14, 21], "iscrowd": 0}, {"id": 1834700, "category_id": 37, "area": 3783, "bbox": [37, 175, 58, 254], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 2501, "bbox": [226, 55, 96, 34], "iscrowd": 0}, {"id": 501242, "category_id": 68, "area": 1549, "bbox": [327, 47, 55, 35], "iscrowd": 0}, {"id": 569599, "category_id": 68, "area": 2717, "bbox": [228, 94, 95, 37], "iscrowd": 0}, {"id": 47103, "category_id": 68, "area": 1328, "bbox": [329, 91, 54, 35], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 264, "bbox": [11, 21, 35, 12], "iscrowd": 0}, {"id": 262376, "category_id": 109, "area": 404, "bbox": [50, 15, 46, 14], "iscrowd": 0}, {"id": 721125, "category_id": 109, "area": 767, "bbox": [101, 4, 74, 20], "iscrowd": 0}, {"id": 2621695, "category_id": 109, "area": 627, "bbox": [178, 1, 69, 14], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 489, "bbox": [150, 169, 36, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00000014", "file_name": "ADE_val_00000014.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 246945, "bbox": [1, 0, 682, 512], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9290, "bbox": [470, 1, 115, 140], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6889, "bbox": [476, 72, 110, 196], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 78031, "bbox": [65, 249, 618, 262], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 684, "bbox": [435, 282, 20, 65], "iscrowd": 0}, {"id": 4194470, "category_id": 13, "area": 935, "bbox": [453, 282, 24, 66], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 845, "bbox": [484, 248, 34, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00000015", "file_name": "ADE_val_00000015.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 206070, "bbox": [0, 0, 510, 590], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 31791, "bbox": [167, 0, 254, 252], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 76114, "bbox": [2, 2, 507, 677], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 22140, "bbox": [191, 481, 319, 198], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 207, "bbox": [250, 333, 5, 44], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 476, "bbox": [240, 299, 22, 31], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 96, "bbox": [215, 412, 9, 16], "iscrowd": 0}, {"id": 16396316, "category_id": 88, "area": 993, "bbox": [30, 327, 35, 58], "iscrowd": 0}, {"id": 16737289, "category_id": 88, "area": 350, "bbox": [137, 386, 20, 28], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 1697, "bbox": [199, 481, 79, 52], "iscrowd": 0}, {"id": 16711900, "category_id": 126, "area": 3823, "bbox": [155, 509, 78, 55], "iscrowd": 0}]}, {"image_id": "ADE_val_00000016", "file_name": "ADE_val_00000016.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 216526, "bbox": [0, 0, 479, 639], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 35097, "bbox": [80, 458, 398, 181], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 7077, "bbox": [115, 529, 163, 90], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1455, "bbox": [349, 440, 43, 66], "iscrowd": 0}, {"id": 2621561, "category_id": 13, "area": 1441, "bbox": [299, 409, 36, 90], "iscrowd": 0}, {"id": 2752644, "category_id": 13, "area": 1403, "bbox": [327, 397, 26, 99], "iscrowd": 0}, {"id": 4587695, "category_id": 13, "area": 994, "bbox": [293, 410, 18, 86], "iscrowd": 0}, {"id": 5381805, "category_id": 13, "area": 1613, "bbox": [248, 403, 42, 87], "iscrowd": 0}, {"id": 3211417, "category_id": 13, "area": 646, "bbox": [360, 394, 19, 52], "iscrowd": 0}, {"id": 2692774, "category_id": 13, "area": 610, "bbox": [343, 389, 19, 73], "iscrowd": 0}, {"id": 4003758, "category_id": 13, "area": 347, "bbox": [316, 391, 17, 33], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 4778, "bbox": [219, 191, 45, 118], "iscrowd": 0}, {"id": 10751468, "category_id": 44, "area": 6635, "bbox": [389, 129, 54, 142], "iscrowd": 0}, {"id": 8854527, "category_id": 44, "area": 19087, "bbox": [141, 0, 69, 315], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 2490, "bbox": [338, 63, 86, 61], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 4815, "bbox": [428, 484, 52, 154], "iscrowd": 0}]}, {"image_id": "ADE_val_00000017", "file_name": "ADE_val_00000017.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14398, "bbox": [0, 84, 106, 269], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 25889, "bbox": [106, 0, 97, 379], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 2730, "bbox": [102, 1, 55, 87], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 17459, "bbox": [0, 0, 129, 195], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 5856, "bbox": [2, 342, 182, 37], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2024, "bbox": [113, 9, 42, 175], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 7856, "bbox": [19, 252, 133, 93], "iscrowd": 0}]}, {"image_id": "ADE_val_00000018", "file_name": "ADE_val_00000018.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1089, "bbox": [119, 77, 121, 16], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 7447, "bbox": [170, 14, 150, 76], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 10128, "bbox": [12, 0, 308, 62], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 9611, "bbox": [0, 0, 320, 100], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 16037, "bbox": [0, 184, 319, 56], "iscrowd": 0}, {"id": 65311, "category_id": 52, "area": 29430, "bbox": [0, 79, 320, 116], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1847, "bbox": [229, 81, 88, 98], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 284, "bbox": [62, 145, 24, 45], "iscrowd": 0}, {"id": 16740885, "category_id": 96, "area": 137, "bbox": [43, 116, 15, 30], "iscrowd": 0}, {"id": 16740096, "category_id": 96, "area": 71, "bbox": [27, 96, 12, 29], "iscrowd": 0}, {"id": 16736768, "category_id": 96, "area": 44, "bbox": [201, 144, 18, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00000019", "file_name": "ADE_val_00000019.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14599, "bbox": [0, 40, 269, 174], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 11525, "bbox": [0, 0, 252, 68], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6588, "bbox": [181, 57, 104, 129], "iscrowd": 0}, {"id": 2031781, "category_id": 13, "area": 9980, "bbox": [150, 99, 196, 227], "iscrowd": 0}, {"id": 5119887, "category_id": 13, "area": 66579, "bbox": [2, 98, 388, 303], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 3300, "bbox": [0, 147, 50, 255], "iscrowd": 0}, {"id": 16318216, "category_id": 32, "area": 4219, "bbox": [137, 279, 129, 55], "iscrowd": 0}, {"id": 23807, "category_id": 79, "area": 99741, "bbox": [318, 0, 281, 401], "iscrowd": 0}, {"id": 685290, "category_id": 79, "area": 2122, "bbox": [246, 43, 44, 174], "iscrowd": 0}, {"id": 29665, "category_id": 79, "area": 17349, "bbox": [248, 1, 108, 220], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 750, "bbox": [53, 35, 43, 24], "iscrowd": 0}, {"id": 38399, "category_id": 83, "area": 329, "bbox": [213, 0, 34, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000020", "file_name": "ADE_val_00000020.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 16157, "bbox": [0, 77, 210, 179], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 14968, "bbox": [0, 0, 256, 96], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 743, "bbox": [219, 108, 36, 39], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 4258, "bbox": [1, 205, 155, 31], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 353, "bbox": [228, 10, 28, 32], "iscrowd": 0}, {"id": 15747587, "category_id": 88, "area": 88, "bbox": [0, 42, 7, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00000021", "file_name": "ADE_val_00000021.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 5728, "bbox": [1, 325, 681, 116], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 15180, "bbox": [1, 89, 681, 243], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 85761, "bbox": [1, 1, 681, 236], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 49818, "bbox": [1, 53, 681, 247], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 83273, "bbox": [1, 289, 682, 222], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2512, "bbox": [1, 293, 110, 47], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 4449, "bbox": [21, 327, 557, 152], "iscrowd": 0}, {"id": 2110452, "category_id": 39, "area": 12850, "bbox": [547, 213, 133, 132], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1815, "bbox": [108, 284, 101, 29], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1200, "bbox": [81, 205, 17, 154], "iscrowd": 0}, {"id": 16732949, "category_id": 88, "area": 247, "bbox": [25, 243, 14, 35], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 1428, "bbox": [111, 309, 62, 36], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1562, "bbox": [23, 316, 41, 51], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 59, "bbox": [265, 86, 8, 13], "iscrowd": 0}, {"id": 16711780, "category_id": 150, "area": 79, "bbox": [241, 73, 10, 14], "iscrowd": 0}, {"id": 16713792, "category_id": 150, "area": 54, "bbox": [219, 81, 13, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00000022", "file_name": "ADE_val_00000022.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 133790, "bbox": [0, 1, 398, 363], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 6390, "bbox": [0, 0, 399, 140], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3320, "bbox": [85, 121, 177, 242], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1093, "bbox": [187, 349, 105, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000023", "file_name": "ADE_val_00000023.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 55448, "bbox": [0, 1, 266, 339], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 11486, "bbox": [0, 0, 266, 229], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 19552, "bbox": [118, 1, 147, 320], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 10753, "bbox": [0, 334, 266, 65], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 8350, "bbox": [0, 311, 266, 69], "iscrowd": 0}]}, {"image_id": "ADE_val_00000024", "file_name": "ADE_val_00000024.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 306506, "bbox": [1, 0, 681, 511], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 40865, "bbox": [1, 0, 681, 194], "iscrowd": 0}]}, {"image_id": "ADE_val_00000025", "file_name": "ADE_val_00000025.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 32565, "bbox": [0, 35, 255, 183], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 2177, "bbox": [73, 233, 110, 23], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 2788, "bbox": [181, 218, 74, 38], "iscrowd": 0}, {"id": 16750102, "category_id": 96, "area": 2956, "bbox": [0, 214, 73, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00000026", "file_name": "ADE_val_00000026.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 28042, "bbox": [2, 1, 497, 282], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 26861, "bbox": [0, 271, 499, 74], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4475, "bbox": [217, 163, 65, 140], "iscrowd": 0}, {"id": 2687150, "category_id": 13, "area": 2278, "bbox": [412, 168, 36, 122], "iscrowd": 0}, {"id": 3284871, "category_id": 13, "area": 5908, "bbox": [371, 143, 59, 188], "iscrowd": 0}, {"id": 4391037, "category_id": 13, "area": 1988, "bbox": [177, 238, 51, 63], "iscrowd": 0}, {"id": 4784268, "category_id": 13, "area": 500, "bbox": [165, 255, 20, 42], "iscrowd": 0}, {"id": 4785321, "category_id": 13, "area": 791, "bbox": [136, 251, 28, 45], "iscrowd": 0}, {"id": 5439612, "category_id": 13, "area": 3262, "bbox": [105, 180, 43, 122], "iscrowd": 0}, {"id": 2752636, "category_id": 13, "area": 2708, "bbox": [68, 188, 41, 114], "iscrowd": 0}]}, {"image_id": "ADE_val_00000027", "file_name": "ADE_val_00000027.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 38929, "bbox": [135, 1, 390, 193], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 14262, "bbox": [117, 0, 409, 304], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 87221, "bbox": [0, 288, 526, 222], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 371, "bbox": [143, 365, 27, 19], "iscrowd": 0}, {"id": 9181183, "category_id": 44, "area": 82, "bbox": [335, 342, 12, 11], "iscrowd": 0}, {"id": 8785148, "category_id": 44, "area": 52, "bbox": [373, 328, 9, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00000028", "file_name": "ADE_val_00000028.png", "segments_info": [{"id": 4618360, "category_id": 14, "area": 323191, "bbox": [2, 0, 509, 765], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 1324, "bbox": [154, 335, 337, 92], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6364, "bbox": [94, 42, 104, 162], "iscrowd": 0}, {"id": 4325539, "category_id": 13, "area": 4124, "bbox": [54, 252, 102, 89], "iscrowd": 0}, {"id": 2228348, "category_id": 13, "area": 3564, "bbox": [230, 291, 77, 78], "iscrowd": 0}, {"id": 2949257, "category_id": 13, "area": 3690, "bbox": [261, 145, 78, 111], "iscrowd": 0}, {"id": 4325538, "category_id": 13, "area": 3643, "bbox": [379, 194, 73, 70], "iscrowd": 0}, {"id": 2629279, "category_id": 13, "area": 5805, "bbox": [368, 301, 77, 118], "iscrowd": 0}, {"id": 2037647, "category_id": 13, "area": 6511, "bbox": [247, 466, 86, 111], "iscrowd": 0}, {"id": 4784293, "category_id": 13, "area": 5308, "bbox": [120, 487, 95, 97], "iscrowd": 0}]}, {"image_id": "ADE_val_00000029", "file_name": "ADE_val_00000029.png", "segments_info": [{"id": 3999126, "category_id": 13, "area": 34646, "bbox": [44, 71, 238, 262], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3646, "bbox": [13, 283, 311, 52], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 2929, "bbox": [57, 31, 67, 47], "iscrowd": 0}, {"id": 779776, "category_id": 42, "area": 1814, "bbox": [59, 92, 43, 44], "iscrowd": 0}, {"id": 655104, "category_id": 42, "area": 4808, "bbox": [124, 26, 107, 49], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 8321, "bbox": [231, 1, 91, 286], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 3447, "bbox": [243, 35, 78, 49], "iscrowd": 0}, {"id": 44287, "category_id": 68, "area": 4009, "bbox": [243, 89, 77, 54], "iscrowd": 0}, {"id": 439295, "category_id": 68, "area": 4079, "bbox": [243, 147, 78, 55], "iscrowd": 0}, {"id": 46069, "category_id": 68, "area": 4161, "bbox": [243, 203, 79, 59], "iscrowd": 0}]}, {"image_id": "ADE_val_00000030", "file_name": "ADE_val_00000030.png", "segments_info": [{"id": 5273720, "category_id": 6, "area": 58720, "bbox": [0, 1, 682, 101], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 104645, "bbox": [0, 353, 682, 158], "iscrowd": 0}, {"id": 65311, "category_id": 52, "area": 169996, "bbox": [0, 55, 682, 308], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 5667, "bbox": [13, 77, 611, 272], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 91, "bbox": [263, 336, 8, 21], "iscrowd": 0}, {"id": 2695555, "category_id": 13, "area": 23, "bbox": [75, 176, 5, 9], "iscrowd": 0}, {"id": 5640884, "category_id": 13, "area": 22, "bbox": [83, 180, 6, 7], "iscrowd": 0}, {"id": 2949279, "category_id": 13, "area": 40, "bbox": [91, 179, 5, 14], "iscrowd": 0}, {"id": 2626690, "category_id": 13, "area": 36, "bbox": [147, 100, 6, 11], "iscrowd": 0}, {"id": 4989072, "category_id": 13, "area": 40, "bbox": [261, 127, 4, 13], "iscrowd": 0}, {"id": 3479196, "category_id": 13, "area": 38, "bbox": [617, 114, 4, 13], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 969, "bbox": [22, 259, 122, 10], "iscrowd": 0}, {"id": 20729, "category_id": 39, "area": 832, "bbox": [159, 262, 106, 11], "iscrowd": 0}, {"id": 348927, "category_id": 39, "area": 385, "bbox": [268, 266, 55, 7], "iscrowd": 0}, {"id": 146668, "category_id": 39, "area": 303, "bbox": [329, 266, 47, 7], "iscrowd": 0}, {"id": 11775, "category_id": 39, "area": 731, "bbox": [383, 264, 100, 9], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 572, "bbox": [323, 265, 76, 82], "iscrowd": 0}]}, {"image_id": "ADE_val_00000031", "file_name": "ADE_val_00000031.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 8879, "bbox": [0, 355, 683, 57], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 257142, "bbox": [0, 0, 683, 398], "iscrowd": 0}, {"id": 65433, "category_id": 55, "area": 63411, "bbox": [0, 404, 683, 106], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 72, "bbox": [252, 410, 12, 8], "iscrowd": 0}, {"id": 12149506, "category_id": 21, "area": 45, "bbox": [239, 405, 9, 5], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 260, "bbox": [95, 407, 25, 12], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 3592, "bbox": [552, 463, 96, 49], "iscrowd": 0}, {"id": 3283455, "category_id": 84, "area": 132, "bbox": [161, 409, 15, 10], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 438, "bbox": [560, 268, 17, 103], "iscrowd": 0}, {"id": 15355910, "category_id": 88, "area": 80, "bbox": [371, 337, 10, 50], "iscrowd": 0}, {"id": 15157022, "category_id": 88, "area": 63, "bbox": [53, 359, 5, 38], "iscrowd": 0}, {"id": 15359744, "category_id": 88, "area": 15, "bbox": [182, 366, 4, 12], "iscrowd": 0}, {"id": 16736768, "category_id": 88, "area": 19, "bbox": [130, 372, 2, 20], "iscrowd": 0}, {"id": 16723456, "category_id": 88, "area": 14, "bbox": [115, 375, 2, 13], "iscrowd": 0}, {"id": 16723712, "category_id": 88, "area": 7, "bbox": [123, 375, 3, 3], "iscrowd": 0}, {"id": 15358464, "category_id": 88, "area": 17, "bbox": [206, 378, 4, 11], "iscrowd": 0}, {"id": 15154178, "category_id": 88, "area": 7, "bbox": [251, 376, 3, 3], "iscrowd": 0}, {"id": 16726792, "category_id": 88, "area": 52, "bbox": [489, 354, 6, 28], "iscrowd": 0}, {"id": 14760721, "category_id": 88, "area": 119, "bbox": [610, 331, 8, 40], "iscrowd": 0}, {"id": 15870988, "category_id": 88, "area": 151, "bbox": [235, 336, 6, 73], "iscrowd": 0}, {"id": 16724992, "category_id": 88, "area": 90, "bbox": [161, 343, 5, 53], "iscrowd": 0}, {"id": 16734734, "category_id": 88, "area": 179, "bbox": [104, 334, 7, 73], "iscrowd": 0}, {"id": 16728576, "category_id": 88, "area": 34, "bbox": [101, 352, 4, 29], "iscrowd": 0}, {"id": 16204318, "category_id": 88, "area": 38, "bbox": [13, 364, 4, 35], "iscrowd": 0}, {"id": 15681809, "category_id": 88, "area": 63, "bbox": [557, 356, 4, 34], "iscrowd": 0}, {"id": 5439232, "category_id": 91, "area": 3968, "bbox": [446, 371, 195, 44], "iscrowd": 0}, {"id": 3602196, "category_id": 91, "area": 3270, "bbox": [313, 363, 157, 51], "iscrowd": 0}, {"id": 6743808, "category_id": 91, "area": 1088, "bbox": [269, 373, 70, 39], "iscrowd": 0}, {"id": 3532807, "category_id": 91, "area": 526, "bbox": [140, 382, 43, 30], "iscrowd": 0}, {"id": 3997442, "category_id": 91, "area": 482, "bbox": [35, 388, 68, 26], "iscrowd": 0}, {"id": 6946560, "category_id": 91, "area": 430, "bbox": [36, 381, 38, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000032", "file_name": "ADE_val_00000032.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 8729, "bbox": [0, 91, 557, 44], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 64345, "bbox": [1, 1, 682, 103], "iscrowd": 0}, {"id": 65433, "category_id": 55, "area": 172709, "bbox": [1, 133, 681, 379], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 274, "bbox": [413, 126, 59, 17], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 9964, "bbox": [231, 247, 129, 106], "iscrowd": 0}, {"id": 11622412, "category_id": 21, "area": 191, "bbox": [339, 132, 37, 7], "iscrowd": 0}, {"id": 13854233, "category_id": 21, "area": 186, "bbox": [376, 132, 29, 10], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 76, "bbox": [473, 147, 15, 6], "iscrowd": 0}, {"id": 11731199, "category_id": 44, "area": 66, "bbox": [500, 146, 11, 7], "iscrowd": 0}, {"id": 8330469, "category_id": 44, "area": 105, "bbox": [101, 153, 21, 7], "iscrowd": 0}, {"id": 5439232, "category_id": 91, "area": 9065, "bbox": [1, 60, 231, 106], "iscrowd": 0}, {"id": 5832448, "category_id": 91, "area": 3382, "bbox": [184, 89, 179, 57], "iscrowd": 0}, {"id": 4716544, "category_id": 91, "area": 1205, "bbox": [462, 91, 82, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00000033", "file_name": "ADE_val_00000033.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 29986, "bbox": [0, 0, 320, 239], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10084, "bbox": [158, 126, 162, 113], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4431, "bbox": [164, 0, 156, 50], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3430, "bbox": [0, 47, 43, 87], "iscrowd": 0}, {"id": 4785663, "category_id": 23, "area": 7436, "bbox": [58, 18, 68, 122], "iscrowd": 0}, {"id": 2425063, "category_id": 23, "area": 1707, "bbox": [149, 52, 35, 53], "iscrowd": 0}, {"id": 1966591, "category_id": 23, "area": 722, "bbox": [202, 37, 22, 39], "iscrowd": 0}, {"id": 1713407, "category_id": 23, "area": 452, "bbox": [227, 40, 17, 32], "iscrowd": 0}, {"id": 3277055, "category_id": 23, "area": 439, "bbox": [280, 56, 12, 45], "iscrowd": 0}, {"id": 4197607, "category_id": 23, "area": 1792, "bbox": [251, 67, 28, 74], "iscrowd": 0}, {"id": 4982271, "category_id": 23, "area": 6439, "bbox": [187, 83, 66, 128], "iscrowd": 0}, {"id": 1835263, "category_id": 23, "area": 580, "bbox": [292, 62, 11, 69], "iscrowd": 0}, {"id": 4329186, "category_id": 23, "area": 3107, "bbox": [134, 156, 57, 83], "iscrowd": 0}, {"id": 4331007, "category_id": 23, "area": 3584, "bbox": [69, 176, 79, 64], "iscrowd": 0}, {"id": 1573119, "category_id": 23, "area": 1298, "bbox": [0, 208, 66, 31], "iscrowd": 0}, {"id": 1774567, "category_id": 23, "area": 347, "bbox": [307, 61, 13, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000034", "file_name": "ADE_val_00000034.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 211164, "bbox": [0, 0, 757, 510], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 83290, "bbox": [498, 48, 256, 460], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 43107, "bbox": [2, 66, 188, 258], "iscrowd": 0}, {"id": 2824703, "category_id": 23, "area": 11104, "bbox": [215, 1, 74, 158], "iscrowd": 0}, {"id": 2753265, "category_id": 23, "area": 10447, "bbox": [217, 201, 72, 162], "iscrowd": 0}, {"id": 5308671, "category_id": 23, "area": 25522, "bbox": [308, 65, 122, 231], "iscrowd": 0}]}, {"image_id": "ADE_val_00000035", "file_name": "ADE_val_00000035.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 210129, "bbox": [0, 29, 915, 483], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 42082, "bbox": [318, 419, 597, 92], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 94148, "bbox": [0, 0, 915, 153], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 14796, "bbox": [523, 168, 64, 243], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 13279, "bbox": [767, 195, 104, 133], "iscrowd": 0}, {"id": 3866879, "category_id": 23, "area": 11380, "bbox": [644, 200, 94, 125], "iscrowd": 0}, {"id": 1573116, "category_id": 23, "area": 7069, "bbox": [420, 191, 53, 142], "iscrowd": 0}, {"id": 3277041, "category_id": 23, "area": 10965, "bbox": [335, 182, 71, 168], "iscrowd": 0}, {"id": 3735787, "category_id": 23, "area": 18568, "bbox": [211, 170, 101, 199], "iscrowd": 0}, {"id": 2621695, "category_id": 23, "area": 34675, "bbox": [24, 153, 153, 252], "iscrowd": 0}]}, {"image_id": "ADE_val_00000036", "file_name": "ADE_val_00000036.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 72638, "bbox": [0, 0, 399, 399], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2037, "bbox": [0, 361, 159, 38], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 23151, "bbox": [155, 64, 108, 334], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 8006, "bbox": [216, 305, 183, 94], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 986, "bbox": [268, 285, 77, 23], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 4566, "bbox": [2, 249, 91, 140], "iscrowd": 0}]}, {"image_id": "ADE_val_00000037", "file_name": "ADE_val_00000037.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 25225, "bbox": [2, 0, 280, 396], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5398, "bbox": [51, 229, 231, 167], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 48631, "bbox": [103, 4, 179, 393], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 29544, "bbox": [4, 20, 156, 275], "iscrowd": 0}]}, {"image_id": "ADE_val_00000038", "file_name": "ADE_val_00000038.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 28493, "bbox": [0, 0, 332, 180], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 18073, "bbox": [2, 134, 330, 80], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2338, "bbox": [42, 5, 33, 81], "iscrowd": 0}, {"id": 2097407, "category_id": 23, "area": 5595, "bbox": [142, 62, 83, 69], "iscrowd": 0}, {"id": 3277055, "category_id": 23, "area": 1040, "bbox": [79, 71, 41, 27], "iscrowd": 0}, {"id": 2162943, "category_id": 23, "area": 453, "bbox": [202, 42, 26, 19], "iscrowd": 0}, {"id": 4587775, "category_id": 23, "area": 222, "bbox": [35, 165, 14, 17], "iscrowd": 0}, {"id": 4391167, "category_id": 23, "area": 391, "bbox": [11, 163, 22, 20], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 1827, "bbox": [2, 42, 26, 85], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 2070, "bbox": [289, 138, 43, 55], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 4943, "bbox": [232, 32, 63, 114], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 635, "bbox": [90, 102, 36, 24], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 1621, "bbox": [232, 99, 54, 75], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 2711, "bbox": [52, 130, 55, 80], "iscrowd": 0}]}, {"image_id": "ADE_val_00000039", "file_name": "ADE_val_00000039.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 88710, "bbox": [0, 0, 316, 350], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 33004, "bbox": [0, 333, 314, 132], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3703, "bbox": [162, 165, 54, 86], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 10716, "bbox": [75, 248, 193, 191], "iscrowd": 0}, {"id": 6750440, "category_id": 16, "area": 2739, "bbox": [227, 272, 89, 94], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 796, "bbox": [79, 147, 109, 131], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 353, "bbox": [140, 217, 15, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00000040", "file_name": "ADE_val_00000040.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 132033, "bbox": [0, 0, 512, 634], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 71118, "bbox": [0, 425, 511, 258], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 28119, "bbox": [30, 59, 217, 157], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7926, "bbox": [342, 409, 155, 160], "iscrowd": 0}, {"id": 14942405, "category_id": 11, "area": 13351, "bbox": [37, 277, 98, 231], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 17826, "bbox": [55, 404, 220, 222], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3176, "bbox": [122, 242, 54, 67], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 13541, "bbox": [361, 285, 127, 126], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 2003, "bbox": [56, 147, 46, 67], "iscrowd": 0}]}, {"image_id": "ADE_val_00000041", "file_name": "ADE_val_00000041.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 157755, "bbox": [0, 0, 639, 424], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 43349, "bbox": [127, 314, 512, 112], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 27924, "bbox": [125, 0, 400, 89], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 28609, "bbox": [168, 93, 193, 157], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 5792, "bbox": [73, 111, 27, 312], "iscrowd": 0}, {"id": 3079936, "category_id": 15, "area": 2319, "bbox": [630, 85, 9, 316], "iscrowd": 0}]}, {"image_id": "ADE_val_00000042", "file_name": "ADE_val_00000042.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 13258, "bbox": [0, 92, 256, 103], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3531, "bbox": [0, 174, 257, 25], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 24440, "bbox": [0, 0, 256, 101], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1074, "bbox": [72, 109, 25, 47], "iscrowd": 0}, {"id": 13426895, "category_id": 9, "area": 1246, "bbox": [99, 108, 27, 49], "iscrowd": 0}, {"id": 16243660, "category_id": 9, "area": 1645, "bbox": [156, 106, 32, 53], "iscrowd": 0}, {"id": 15068877, "category_id": 9, "area": 1728, "bbox": [193, 105, 33, 55], "iscrowd": 0}, {"id": 16769772, "category_id": 9, "area": 1343, "bbox": [232, 105, 25, 55], "iscrowd": 0}, {"id": 13432558, "category_id": 9, "area": 465, "bbox": [11, 111, 12, 42], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 928, "bbox": [0, 98, 12, 89], "iscrowd": 0}, {"id": 2888683, "category_id": 43, "area": 1333, "bbox": [53, 86, 12, 112], "iscrowd": 0}]}, {"image_id": "ADE_val_00000043", "file_name": "ADE_val_00000043.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 24375, "bbox": [0, 85, 429, 97], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5006, "bbox": [225, 232, 204, 63], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 42515, "bbox": [0, 0, 429, 128], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 37308, "bbox": [2, 175, 427, 120], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5732, "bbox": [228, 86, 201, 57], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2428, "bbox": [385, 144, 37, 145], "iscrowd": 0}, {"id": 2433153, "category_id": 13, "area": 5010, "bbox": [325, 136, 61, 152], "iscrowd": 0}]}, {"image_id": "ADE_val_00000044", "file_name": "ADE_val_00000044.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 78685, "bbox": [1, 0, 764, 432], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 57862, "bbox": [0, 381, 765, 131], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 85670, "bbox": [0, 0, 763, 191], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 675, "bbox": [506, 213, 67, 104], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5195, "bbox": [335, 217, 70, 123], "iscrowd": 0}, {"id": 16641276, "category_id": 9, "area": 2163, "bbox": [625, 187, 51, 46], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2225, "bbox": [246, 248, 27, 103], "iscrowd": 0}, {"id": 5373731, "category_id": 15, "area": 2491, "bbox": [473, 250, 27, 101], "iscrowd": 0}, {"id": 2422040, "category_id": 15, "area": 4983, "bbox": [626, 233, 52, 172], "iscrowd": 0}, {"id": 2031104, "category_id": 15, "area": 3592, "bbox": [92, 232, 41, 118], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1723, "bbox": [400, 339, 52, 54], "iscrowd": 0}, {"id": 2117049, "category_id": 20, "area": 2554, "bbox": [255, 360, 64, 70], "iscrowd": 0}, {"id": 351157, "category_id": 20, "area": 1064, "bbox": [275, 340, 53, 52], "iscrowd": 0}, {"id": 12008, "category_id": 20, "area": 1593, "bbox": [234, 345, 67, 67], "iscrowd": 0}, {"id": 1137117, "category_id": 20, "area": 1134, "bbox": [444, 344, 67, 66], "iscrowd": 0}, {"id": 10430, "category_id": 20, "area": 2491, "bbox": [441, 358, 64, 70], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 444, "bbox": [361, 26, 29, 26], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 5675, "bbox": [216, 164, 28, 228], "iscrowd": 0}, {"id": 1712383, "category_id": 43, "area": 7699, "bbox": [180, 134, 34, 282], "iscrowd": 0}, {"id": 3277823, "category_id": 43, "area": 11850, "bbox": [122, 88, 51, 366], "iscrowd": 0}, {"id": 3670271, "category_id": 43, "area": 29196, "bbox": [22, 4, 78, 507], "iscrowd": 0}, {"id": 1704191, "category_id": 43, "area": 3239, "bbox": [302, 181, 24, 169], "iscrowd": 0}, {"id": 2105057, "category_id": 43, "area": 3222, "bbox": [418, 183, 25, 158], "iscrowd": 0}, {"id": 1507580, "category_id": 43, "area": 4620, "bbox": [501, 167, 29, 226], "iscrowd": 0}, {"id": 4070648, "category_id": 43, "area": 7277, "bbox": [534, 138, 40, 279], "iscrowd": 0}, {"id": 2890999, "category_id": 43, "area": 12934, "bbox": [581, 94, 54, 360], "iscrowd": 0}, {"id": 3211503, "category_id": 43, "area": 28515, "bbox": [664, 10, 86, 502], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 992, "bbox": [361, 369, 37, 38], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 580, "bbox": [336, 312, 27, 30], "iscrowd": 0}, {"id": 2027, "category_id": 67, "area": 664, "bbox": [385, 309, 29, 32], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 1646, "bbox": [358, 259, 28, 85], "iscrowd": 0}, {"id": 64255, "category_id": 133, "area": 5795, "bbox": [88, 290, 76, 190], "iscrowd": 0}, {"id": 60130, "category_id": 133, "area": 6851, "bbox": [611, 287, 68, 192], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 1586, "bbox": [260, 287, 45, 53], "iscrowd": 0}]}, {"image_id": "ADE_val_00000045", "file_name": "ADE_val_00000045.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 82448, "bbox": [0, 0, 682, 311], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 18051, "bbox": [473, 279, 209, 232], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 10204, "bbox": [0, 0, 682, 69], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 11157, "bbox": [550, 369, 132, 140], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 137409, "bbox": [1, 187, 581, 324], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 10848, "bbox": [307, 0, 115, 217], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 3386, "bbox": [33, 76, 44, 156], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 17778, "bbox": [293, 0, 85, 247], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 43906, "bbox": [428, 1, 180, 293], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 5334, "bbox": [34, 75, 90, 158], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 6532, "bbox": [1, 209, 99, 104], "iscrowd": 0}]}, {"image_id": "ADE_val_00000046", "file_name": "ADE_val_00000046.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 56300, "bbox": [0, 142, 500, 232], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 19491, "bbox": [0, 295, 369, 79], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 97752, "bbox": [0, 0, 500, 236], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4848, "bbox": [46, 170, 64, 97], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1961, "bbox": [200, 209, 24, 96], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 5371, "bbox": [0, 148, 141, 172], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 291, "bbox": [143, 104, 43, 11], "iscrowd": 0}, {"id": 49382, "category_id": 83, "area": 137, "bbox": [79, 143, 15, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00000047", "file_name": "ADE_val_00000047.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 65754, "bbox": [0, 91, 682, 303], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 81776, "bbox": [1, 337, 681, 174], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 145824, "bbox": [2, 0, 680, 307], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 2680, "bbox": [582, 313, 63, 48], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6344, "bbox": [581, 184, 64, 103], "iscrowd": 0}, {"id": 13948415, "category_id": 9, "area": 3890, "bbox": [193, 220, 51, 80], "iscrowd": 0}, {"id": 16178431, "category_id": 9, "area": 10242, "bbox": [238, 160, 81, 141], "iscrowd": 0}, {"id": 14341336, "category_id": 9, "area": 4205, "bbox": [318, 215, 53, 84], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 18193, "bbox": [38, 338, 205, 173], "iscrowd": 0}, {"id": 1330380, "category_id": 20, "area": 1904, "bbox": [1, 371, 60, 68], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 3568, "bbox": [181, 409, 133, 89], "iscrowd": 0}, {"id": 15723008, "category_id": 111, "area": 1277, "bbox": [137, 383, 63, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000048", "file_name": "ADE_val_00000048.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 146262, "bbox": [0, 0, 767, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 83183, "bbox": [0, 354, 670, 157], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 142966, "bbox": [0, 1, 709, 275], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 13673, "bbox": [228, 183, 96, 147], "iscrowd": 0}, {"id": 16775890, "category_id": 9, "area": 1509, "bbox": [23, 138, 134, 90], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 136, "bbox": [394, 95, 22, 8], "iscrowd": 0}, {"id": 1617384, "category_id": 83, "area": 69, "bbox": [330, 133, 15, 5], "iscrowd": 0}, {"id": 37869, "category_id": 83, "area": 149, "bbox": [233, 84, 23, 8], "iscrowd": 0}, {"id": 49661, "category_id": 83, "area": 89, "bbox": [222, 126, 16, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00000049", "file_name": "ADE_val_00000049.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 109195, "bbox": [0, 3, 682, 380], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 42166, "bbox": [0, 383, 682, 129], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 60535, "bbox": [167, 2, 514, 250], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 36575, "bbox": [316, 255, 366, 202], "iscrowd": 0}, {"id": 16711903, "category_id": 8, "area": 53197, "bbox": [81, 252, 351, 246], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 15295, "bbox": [506, 50, 176, 158], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 8127, "bbox": [1, 289, 76, 111], "iscrowd": 0}, {"id": 3539189, "category_id": 16, "area": 1977, "bbox": [467, 288, 84, 33], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3703, "bbox": [255, 90, 54, 75], "iscrowd": 0}, {"id": 2560255, "category_id": 23, "area": 600, "bbox": [104, 132, 30, 22], "iscrowd": 0}, {"id": 2556159, "category_id": 23, "area": 687, "bbox": [71, 167, 32, 23], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1203, "bbox": [22, 250, 50, 44], "iscrowd": 0}, {"id": 65002, "category_id": 37, "area": 638, "bbox": [485, 258, 32, 34], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 2146, "bbox": [125, 291, 121, 26], "iscrowd": 0}, {"id": 15065344, "category_id": 58, "area": 2085, "bbox": [348, 291, 123, 23], "iscrowd": 0}, {"id": 16776960, "category_id": 58, "area": 2844, "bbox": [344, 264, 132, 32], "iscrowd": 0}, {"id": 16770576, "category_id": 58, "area": 3808, "bbox": [122, 260, 135, 43], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 145, "bbox": [371, 19, 16, 12], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 347, "bbox": [362, 135, 36, 14], "iscrowd": 0}, {"id": 16662022, "category_id": 135, "area": 468, "bbox": [150, 117, 44, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000050", "file_name": "ADE_val_00000050.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 33877, "bbox": [0, 13, 559, 267], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 15773, "bbox": [0, 89, 559, 210], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 20836, "bbox": [0, 0, 558, 51], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 2119, "bbox": [266, 106, 134, 101], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 204, "bbox": [159, 69, 17, 21], "iscrowd": 0}, {"id": 3544458, "category_id": 13, "area": 494, "bbox": [528, 184, 15, 47], "iscrowd": 0}, {"id": 2424967, "category_id": 13, "area": 1504, "bbox": [504, 211, 36, 71], "iscrowd": 0}, {"id": 3872634, "category_id": 13, "area": 708, "bbox": [170, 171, 38, 37], "iscrowd": 0}, {"id": 4522155, "category_id": 13, "area": 1091, "bbox": [115, 131, 51, 56], "iscrowd": 0}, {"id": 4326548, "category_id": 13, "area": 432, "bbox": [56, 90, 22, 36], "iscrowd": 0}, {"id": 5313914, "category_id": 13, "area": 206, "bbox": [105, 71, 15, 22], "iscrowd": 0}, {"id": 4596103, "category_id": 13, "area": 226, "bbox": [229, 96, 18, 21], "iscrowd": 0}, {"id": 4261000, "category_id": 13, "area": 182, "bbox": [119, 70, 12, 21], "iscrowd": 0}, {"id": 2359426, "category_id": 13, "area": 255, "bbox": [131, 69, 18, 25], "iscrowd": 0}, {"id": 4591790, "category_id": 13, "area": 112, "bbox": [242, 82, 12, 15], "iscrowd": 0}, {"id": 5442680, "category_id": 13, "area": 99, "bbox": [231, 82, 11, 14], "iscrowd": 0}, {"id": 4456614, "category_id": 13, "area": 144, "bbox": [219, 82, 13, 17], "iscrowd": 0}, {"id": 4262289, "category_id": 13, "area": 198, "bbox": [203, 78, 12, 24], "iscrowd": 0}, {"id": 5837748, "category_id": 13, "area": 174, "bbox": [192, 83, 13, 20], "iscrowd": 0}, {"id": 5575593, "category_id": 13, "area": 159, "bbox": [180, 82, 12, 21], "iscrowd": 0}, {"id": 2692254, "category_id": 13, "area": 259, "bbox": [71, 93, 19, 29], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 500, "bbox": [250, 53, 13, 40], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 16227, "bbox": [446, 56, 113, 214], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 10182, "bbox": [2, 205, 236, 93], "iscrowd": 0}, {"id": 14413056, "category_id": 32, "area": 10572, "bbox": [23, 137, 310, 162], "iscrowd": 0}, {"id": 15196416, "category_id": 32, "area": 6077, "bbox": [100, 159, 288, 140], "iscrowd": 0}, {"id": 13369089, "category_id": 32, "area": 11035, "bbox": [162, 183, 396, 114], "iscrowd": 0}, {"id": 16184869, "category_id": 32, "area": 25346, "bbox": [2, 81, 362, 149], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 25, "bbox": [68, 3, 8, 4], "iscrowd": 0}, {"id": 37887, "category_id": 83, "area": 9, "bbox": [86, 16, 5, 2], "iscrowd": 0}, {"id": 51455, "category_id": 83, "area": 16, "bbox": [98, 24, 5, 4], "iscrowd": 0}, {"id": 47871, "category_id": 83, "area": 15, "bbox": [6, 14, 5, 4], "iscrowd": 0}, {"id": 440063, "category_id": 83, "area": 18, "bbox": [29, 23, 6, 4], "iscrowd": 0}, {"id": 41983, "category_id": 83, "area": 18, "bbox": [48, 29, 6, 4], "iscrowd": 0}, {"id": 39907, "category_id": 83, "area": 14, "bbox": [61, 35, 5, 4], "iscrowd": 0}]}, {"image_id": "ADE_val_00000051", "file_name": "ADE_val_00000051.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 58872, "bbox": [0, 52, 639, 142], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 75798, "bbox": [0, 163, 639, 316], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 36795, "bbox": [0, 0, 639, 72], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 795, "bbox": [116, 152, 25, 57], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 3467, "bbox": [2, 162, 73, 65], "iscrowd": 0}, {"id": 11814919, "category_id": 21, "area": 28042, "bbox": [124, 114, 218, 195], "iscrowd": 0}, {"id": 11304704, "category_id": 21, "area": 10154, "bbox": [474, 107, 162, 82], "iscrowd": 0}, {"id": 12219136, "category_id": 21, "area": 83177, "bbox": [271, 199, 367, 281], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2364, "bbox": [520, 33, 120, 41], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 405, "bbox": [300, 109, 17, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00000052", "file_name": "ADE_val_00000052.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 64315, "bbox": [0, 161, 682, 183], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 139529, "bbox": [0, 0, 681, 284], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2064, "bbox": [604, 265, 78, 44], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 105936, "bbox": [0, 318, 682, 193], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 16627, "bbox": [1, 310, 678, 57], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 8453, "bbox": [140, 236, 508, 95], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 914, "bbox": [648, 325, 24, 74], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 3150, "bbox": [441, 222, 115, 48], "iscrowd": 0}, {"id": 10888191, "category_id": 44, "area": 752, "bbox": [112, 216, 25, 32], "iscrowd": 0}, {"id": 11927807, "category_id": 44, "area": 733, "bbox": [391, 235, 26, 31], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 2168, "bbox": [607, 207, 67, 92], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 523, "bbox": [113, 205, 33, 114], "iscrowd": 0}, {"id": 15422464, "category_id": 88, "area": 585, "bbox": [380, 226, 40, 110], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 132, "bbox": [445, 319, 11, 12], "iscrowd": 0}, {"id": 15073521, "category_id": 126, "area": 107, "bbox": [522, 318, 10, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00000053", "file_name": "ADE_val_00000053.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 166717, "bbox": [1, 0, 766, 402], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 62719, "bbox": [0, 386, 767, 125], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 13484, "bbox": [138, 0, 557, 42], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 23226, "bbox": [562, 96, 103, 362], "iscrowd": 0}, {"id": 2825633, "category_id": 13, "area": 39261, "bbox": [115, 53, 164, 434], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 80123, "bbox": [210, 187, 386, 276], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 1910, "bbox": [633, 56, 47, 51], "iscrowd": 0}]}, {"image_id": "ADE_val_00000054", "file_name": "ADE_val_00000054.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 87116, "bbox": [1, 0, 510, 682], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3436, "bbox": [265, 645, 103, 37], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1713, "bbox": [0, 315, 47, 74], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 15062, "bbox": [0, 473, 113, 205], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 147446, "bbox": [0, 64, 483, 591], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 15849, "bbox": [0, 604, 265, 78], "iscrowd": 0}]}, {"image_id": "ADE_val_00000055", "file_name": "ADE_val_00000055.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 94387, "bbox": [0, 0, 679, 254], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 46278, "bbox": [0, 0, 564, 115], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 240, "bbox": [447, 188, 12, 41], "iscrowd": 0}, {"id": 2692252, "category_id": 13, "area": 714, "bbox": [43, 192, 31, 55], "iscrowd": 0}, {"id": 3735711, "category_id": 13, "area": 338, "bbox": [97, 191, 29, 41], "iscrowd": 0}, {"id": 2687127, "category_id": 13, "area": 312, "bbox": [367, 187, 21, 39], "iscrowd": 0}, {"id": 3541396, "category_id": 13, "area": 493, "bbox": [491, 194, 17, 50], "iscrowd": 0}, {"id": 4786297, "category_id": 13, "area": 283, "bbox": [537, 193, 13, 37], "iscrowd": 0}, {"id": 4725659, "category_id": 13, "area": 1618, "bbox": [422, 212, 32, 96], "iscrowd": 0}, {"id": 4718770, "category_id": 13, "area": 1987, "bbox": [141, 210, 49, 100], "iscrowd": 0}, {"id": 4325534, "category_id": 13, "area": 1845, "bbox": [277, 256, 44, 97], "iscrowd": 0}, {"id": 5708464, "category_id": 13, "area": 7409, "bbox": [326, 283, 86, 195], "iscrowd": 0}, {"id": 2495155, "category_id": 13, "area": 290, "bbox": [82, 185, 11, 39], "iscrowd": 0}, {"id": 4923518, "category_id": 13, "area": 1476, "bbox": [529, 216, 38, 85], "iscrowd": 0}, {"id": 3080831, "category_id": 13, "area": 3363, "bbox": [248, 245, 53, 145], "iscrowd": 0}, {"id": 3801259, "category_id": 13, "area": 610, "bbox": [128, 189, 21, 56], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 307, "bbox": [144, 37, 30, 20], "iscrowd": 0}, {"id": 1032191, "category_id": 83, "area": 667, "bbox": [172, 11, 50, 31], "iscrowd": 0}, {"id": 1022441, "category_id": 83, "area": 358, "bbox": [313, 52, 40, 16], "iscrowd": 0}, {"id": 1940223, "category_id": 83, "area": 707, "bbox": [359, 33, 71, 24], "iscrowd": 0}, {"id": 41727, "category_id": 83, "area": 913, "bbox": [439, 11, 71, 27], "iscrowd": 0}, {"id": 1292283, "category_id": 83, "area": 389, "bbox": [454, 66, 46, 14], "iscrowd": 0}, {"id": 173050, "category_id": 83, "area": 783, "bbox": [509, 51, 85, 20], "iscrowd": 0}, {"id": 47103, "category_id": 83, "area": 798, "bbox": [609, 36, 69, 21], "iscrowd": 0}, {"id": 498427, "category_id": 83, "area": 212, "bbox": [173, 38, 28, 19], "iscrowd": 0}, {"id": 1552127, "category_id": 83, "area": 410, "bbox": [202, 16, 49, 26], "iscrowd": 0}, {"id": 1484287, "category_id": 83, "area": 270, "bbox": [223, 1, 34, 13], "iscrowd": 0}, {"id": 957926, "category_id": 83, "area": 297, "bbox": [556, 0, 50, 11], "iscrowd": 0}, {"id": 40182, "category_id": 83, "area": 334, "bbox": [256, 0, 41, 17], "iscrowd": 0}, {"id": 50919, "category_id": 83, "area": 469, "bbox": [467, 17, 71, 23], "iscrowd": 0}, {"id": 41983, "category_id": 83, "area": 336, "bbox": [382, 38, 72, 20], "iscrowd": 0}, {"id": 762879, "category_id": 83, "area": 155, "bbox": [344, 56, 31, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000056", "file_name": "ADE_val_00000056.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 50109, "bbox": [0, 40, 682, 172], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 141855, "bbox": [0, 183, 682, 328], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 62123, "bbox": [0, 0, 682, 154], "iscrowd": 0}, {"id": 16711813, "category_id": 106, "area": 80131, "bbox": [6, 167, 662, 174], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 210, "bbox": [241, 175, 18, 14], "iscrowd": 0}, {"id": 1109016, "category_id": 42, "area": 283, "bbox": [283, 172, 23, 14], "iscrowd": 0}, {"id": 2752258, "category_id": 42, "area": 1733, "bbox": [297, 185, 49, 41], "iscrowd": 0}, {"id": 1500928, "category_id": 42, "area": 273, "bbox": [482, 179, 18, 16], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 769, "bbox": [377, 102, 64, 23], "iscrowd": 0}, {"id": 9240819, "category_id": 44, "area": 233, "bbox": [477, 115, 25, 10], "iscrowd": 0}, {"id": 8651007, "category_id": 44, "area": 261, "bbox": [645, 114, 29, 9], "iscrowd": 0}, {"id": 9109759, "category_id": 44, "area": 3333, "bbox": [199, 51, 117, 51], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 294, "bbox": [433, 22, 42, 34], "iscrowd": 0}, {"id": 695526, "category_id": 83, "area": 311, "bbox": [584, 16, 11, 39], "iscrowd": 0}, {"id": 38124, "category_id": 83, "area": 361, "bbox": [290, 30, 71, 31], "iscrowd": 0}, {"id": 45547, "category_id": 83, "area": 54, "bbox": [423, 89, 22, 9], "iscrowd": 0}, {"id": 40191, "category_id": 83, "area": 43, "bbox": [502, 87, 12, 9], "iscrowd": 0}, {"id": 41471, "category_id": 83, "area": 61, "bbox": [581, 85, 6, 11], "iscrowd": 0}, {"id": 43749, "category_id": 83, "area": 62, "bbox": [655, 84, 14, 11], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 3031, "bbox": [132, 143, 70, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00000057", "file_name": "ADE_val_00000057.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 28780, "bbox": [1, 1, 639, 214], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4137, "bbox": [215, 194, 389, 308], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 21584, "bbox": [0, 0, 603, 57], "iscrowd": 0}, {"id": 16711813, "category_id": 106, "area": 64336, "bbox": [0, 226, 617, 284], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 785, "bbox": [0, 147, 16, 83], "iscrowd": 0}, {"id": 3412373, "category_id": 13, "area": 2326, "bbox": [11, 110, 29, 122], "iscrowd": 0}, {"id": 5046417, "category_id": 13, "area": 5454, "bbox": [26, 98, 64, 140], "iscrowd": 0}, {"id": 3346065, "category_id": 13, "area": 6000, "bbox": [78, 103, 64, 134], "iscrowd": 0}, {"id": 4725158, "category_id": 13, "area": 5013, "bbox": [134, 84, 44, 165], "iscrowd": 0}, {"id": 2949249, "category_id": 13, "area": 10177, "bbox": [161, 43, 64, 251], "iscrowd": 0}, {"id": 4522117, "category_id": 13, "area": 761, "bbox": [221, 76, 27, 59], "iscrowd": 0}, {"id": 5963927, "category_id": 13, "area": 5500, "bbox": [220, 63, 64, 245], "iscrowd": 0}, {"id": 2949280, "category_id": 13, "area": 1130, "bbox": [307, 60, 32, 64], "iscrowd": 0}, {"id": 4657804, "category_id": 13, "area": 14805, "bbox": [242, 77, 90, 242], "iscrowd": 0}, {"id": 2687120, "category_id": 13, "area": 927, "bbox": [380, 61, 37, 99], "iscrowd": 0}, {"id": 5970333, "category_id": 13, "area": 10371, "bbox": [313, 48, 75, 328], "iscrowd": 0}, {"id": 5963936, "category_id": 13, "area": 14116, "bbox": [353, 104, 80, 304], "iscrowd": 0}, {"id": 3151226, "category_id": 13, "area": 6939, "bbox": [411, 64, 56, 361], "iscrowd": 0}, {"id": 4849837, "category_id": 13, "area": 14639, "bbox": [411, 96, 109, 363], "iscrowd": 0}, {"id": 4465284, "category_id": 13, "area": 4248, "bbox": [555, 36, 83, 121], "iscrowd": 0}, {"id": 2293910, "category_id": 13, "area": 29142, "bbox": [547, 81, 93, 430], "iscrowd": 0}, {"id": 3808637, "category_id": 13, "area": 1148, "bbox": [106, 81, 35, 66], "iscrowd": 0}, {"id": 4786595, "category_id": 13, "area": 31916, "bbox": [424, 17, 164, 480], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 2009, "bbox": [123, 239, 56, 54], "iscrowd": 0}]}, {"image_id": "ADE_val_00000058", "file_name": "ADE_val_00000058.png", "segments_info": [{"id": 16711680, "category_id": 56, "area": 119734, "bbox": [2, 1, 371, 498], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 1612, "bbox": [142, 384, 50, 88], "iscrowd": 0}, {"id": 1622014, "category_id": 121, "area": 1920, "bbox": [110, 387, 54, 88], "iscrowd": 0}, {"id": 58618, "category_id": 121, "area": 1990, "bbox": [87, 381, 53, 90], "iscrowd": 0}, {"id": 1167871, "category_id": 121, "area": 2332, "bbox": [59, 369, 64, 99], "iscrowd": 0}, {"id": 1956863, "category_id": 121, "area": 2131, "bbox": [47, 320, 68, 39], "iscrowd": 0}, {"id": 2017519, "category_id": 121, "area": 1947, "bbox": [123, 272, 48, 89], "iscrowd": 0}, {"id": 51686, "category_id": 121, "area": 4875, "bbox": [250, 157, 99, 75], "iscrowd": 0}, {"id": 1692645, "category_id": 121, "area": 4960, "bbox": [188, 139, 90, 80], "iscrowd": 0}, {"id": 57846, "category_id": 121, "area": 2620, "bbox": [297, 22, 76, 41], "iscrowd": 0}, {"id": 1887231, "category_id": 121, "area": 2369, "bbox": [297, 61, 76, 39], "iscrowd": 0}, {"id": 908543, "category_id": 121, "area": 2816, "bbox": [197, 21, 90, 43], "iscrowd": 0}, {"id": 59638, "category_id": 121, "area": 3194, "bbox": [186, 62, 112, 38], "iscrowd": 0}, {"id": 45055, "category_id": 121, "area": 4974, "bbox": [85, 48, 115, 51], "iscrowd": 0}, {"id": 49919, "category_id": 121, "area": 19842, "bbox": [154, 251, 219, 126], "iscrowd": 0}]}, {"image_id": "ADE_val_00000059", "file_name": "ADE_val_00000059.png", "segments_info": [{"id": 16711680, "category_id": 56, "area": 116445, "bbox": [2, 1, 497, 374], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 7814, "bbox": [292, 191, 204, 123], "iscrowd": 0}, {"id": 65345, "category_id": 113, "area": 2931, "bbox": [185, 192, 109, 78], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 922, "bbox": [74, 18, 47, 31], "iscrowd": 0}, {"id": 47078, "category_id": 121, "area": 1046, "bbox": [2, 32, 51, 25], "iscrowd": 0}, {"id": 898032, "category_id": 121, "area": 3484, "bbox": [136, 7, 125, 59], "iscrowd": 0}, {"id": 52223, "category_id": 121, "area": 4409, "bbox": [213, 2, 129, 71], "iscrowd": 0}, {"id": 702463, "category_id": 121, "area": 1444, "bbox": [444, 34, 51, 35], "iscrowd": 0}, {"id": 57587, "category_id": 121, "area": 5022, "bbox": [326, 27, 120, 52], "iscrowd": 0}, {"id": 1948652, "category_id": 121, "area": 3884, "bbox": [300, 196, 66, 75], "iscrowd": 0}, {"id": 1552127, "category_id": 121, "area": 3895, "bbox": [358, 218, 75, 66], "iscrowd": 0}, {"id": 837887, "category_id": 121, "area": 3858, "bbox": [424, 228, 71, 69], "iscrowd": 0}, {"id": 186365, "category_id": 121, "area": 2911, "bbox": [225, 198, 66, 56], "iscrowd": 0}, {"id": 1363942, "category_id": 121, "area": 1557, "bbox": [209, 176, 59, 56], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 2983, "bbox": [2, 15, 153, 51], "iscrowd": 0}, {"id": 65342, "category_id": 138, "area": 2041, "bbox": [124, 15, 221, 66], "iscrowd": 0}, {"id": 130836, "category_id": 138, "area": 3280, "bbox": [311, 26, 187, 69], "iscrowd": 0}]}, {"image_id": "ADE_val_00000060", "file_name": "ADE_val_00000060.png", "segments_info": [{"id": 3289680, "category_id": 4, "area": 287, "bbox": [476, 343, 24, 32], "iscrowd": 0}, {"id": 16711680, "category_id": 56, "area": 125328, "bbox": [0, 0, 499, 374], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 951, "bbox": [372, 256, 57, 46], "iscrowd": 0}, {"id": 58879, "category_id": 121, "area": 1744, "bbox": [332, 265, 77, 56], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 11460, "bbox": [2, 150, 167, 142], "iscrowd": 0}, {"id": 65340, "category_id": 138, "area": 1494, "bbox": [113, 146, 212, 86], "iscrowd": 0}, {"id": 60194, "category_id": 138, "area": 635, "bbox": [322, 176, 91, 24], "iscrowd": 0}, {"id": 1048382, "category_id": 138, "area": 1930, "bbox": [331, 255, 118, 71], "iscrowd": 0}, {"id": 65292, "category_id": 138, "area": 3382, "bbox": [245, 271, 145, 98], "iscrowd": 0}, {"id": 65341, "category_id": 138, "area": 424, "bbox": [412, 164, 67, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00000061", "file_name": "ADE_val_00000061.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 4419, "bbox": [0, 30, 48, 123], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 24153, "bbox": [0, 139, 349, 93], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 14775, "bbox": [47, 30, 303, 95], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 18669, "bbox": [0, 0, 350, 80], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1013, "bbox": [25, 91, 74, 75], "iscrowd": 0}, {"id": 5767321, "category_id": 13, "area": 2021, "bbox": [79, 91, 90, 89], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 108, "bbox": [43, 13, 12, 21], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 2795, "bbox": [218, 35, 37, 133], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 106, "bbox": [169, 29, 12, 11], "iscrowd": 0}, {"id": 48383, "category_id": 83, "area": 65, "bbox": [105, 40, 9, 10], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 6629, "bbox": [239, 111, 111, 81], "iscrowd": 0}, {"id": 16744960, "category_id": 96, "area": 2786, "bbox": [142, 118, 85, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00000062", "file_name": "ADE_val_00000062.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 26547, "bbox": [67, 1, 172, 319], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 1747, "bbox": [141, 0, 36, 60], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 3907, "bbox": [173, 1, 67, 62], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3104, "bbox": [113, 280, 106, 40], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 13634, "bbox": [126, 58, 113, 143], "iscrowd": 0}, {"id": 16575206, "category_id": 9, "area": 18482, "bbox": [0, 0, 74, 316], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 8466, "bbox": [2, 218, 120, 102], "iscrowd": 0}]}, {"image_id": "ADE_val_00000063", "file_name": "ADE_val_00000063.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 53035, "bbox": [2, 0, 502, 164], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 971, "bbox": [0, 144, 504, 233], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4787, "bbox": [416, 193, 76, 101], "iscrowd": 0}, {"id": 4194430, "category_id": 13, "area": 3655, "bbox": [217, 147, 75, 100], "iscrowd": 0}, {"id": 5314936, "category_id": 13, "area": 3857, "bbox": [116, 227, 84, 82], "iscrowd": 0}, {"id": 4789915, "category_id": 13, "area": 17197, "bbox": [48, 30, 170, 243], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 50570, "bbox": [0, 131, 504, 246], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 14263, "bbox": [346, 150, 156, 152], "iscrowd": 0}, {"id": 9634047, "category_id": 120, "area": 23098, "bbox": [33, 166, 290, 165], "iscrowd": 0}]}, {"image_id": "ADE_val_00000064", "file_name": "ADE_val_00000064.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 50569, "bbox": [1, 16, 599, 248], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 91112, "bbox": [2, 222, 597, 226], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 53742, "bbox": [2, 1, 597, 126], "iscrowd": 0}, {"id": 16711762, "category_id": 102, "area": 14839, "bbox": [359, 142, 204, 97], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 8578, "bbox": [301, 165, 52, 230], "iscrowd": 0}, {"id": 2031754, "category_id": 13, "area": 2805, "bbox": [243, 173, 29, 156], "iscrowd": 0}, {"id": 4263583, "category_id": 13, "area": 1795, "bbox": [343, 190, 26, 128], "iscrowd": 0}, {"id": 2031789, "category_id": 13, "area": 5160, "bbox": [517, 175, 83, 196], "iscrowd": 0}, {"id": 4919715, "category_id": 13, "area": 3415, "bbox": [568, 210, 29, 213], "iscrowd": 0}, {"id": 5182334, "category_id": 13, "area": 1371, "bbox": [143, 181, 37, 90], "iscrowd": 0}, {"id": 4198522, "category_id": 13, "area": 676, "bbox": [112, 186, 28, 87], "iscrowd": 0}, {"id": 4591228, "category_id": 13, "area": 858, "bbox": [137, 184, 19, 78], "iscrowd": 0}, {"id": 3801215, "category_id": 13, "area": 745, "bbox": [187, 192, 23, 64], "iscrowd": 0}, {"id": 2694295, "category_id": 13, "area": 1808, "bbox": [263, 190, 48, 126], "iscrowd": 0}, {"id": 3671960, "category_id": 13, "area": 961, "bbox": [267, 183, 28, 103], "iscrowd": 0}, {"id": 3609504, "category_id": 13, "area": 198, "bbox": [299, 194, 11, 25], "iscrowd": 0}, {"id": 4265903, "category_id": 13, "area": 3631, "bbox": [4, 179, 46, 125], "iscrowd": 0}, {"id": 2756018, "category_id": 13, "area": 6876, "bbox": [45, 170, 55, 190], "iscrowd": 0}, {"id": 3670139, "category_id": 13, "area": 5857, "bbox": [189, 180, 82, 173], "iscrowd": 0}, {"id": 5701762, "category_id": 13, "area": 1779, "bbox": [410, 188, 24, 108], "iscrowd": 0}, {"id": 2031762, "category_id": 13, "area": 1798, "bbox": [353, 182, 33, 119], "iscrowd": 0}, {"id": 2955440, "category_id": 13, "area": 259, "bbox": [509, 181, 14, 40], "iscrowd": 0}, {"id": 3014818, "category_id": 13, "area": 203, "bbox": [486, 184, 13, 32], "iscrowd": 0}, {"id": 4915380, "category_id": 13, "area": 1466, "bbox": [96, 191, 22, 99], "iscrowd": 0}, {"id": 2687155, "category_id": 13, "area": 1666, "bbox": [383, 184, 27, 100], "iscrowd": 0}, {"id": 3088556, "category_id": 13, "area": 401, "bbox": [173, 183, 15, 58], "iscrowd": 0}, {"id": 5767331, "category_id": 13, "area": 467, "bbox": [457, 198, 12, 54], "iscrowd": 0}, {"id": 4063389, "category_id": 13, "area": 938, "bbox": [536, 197, 24, 85], "iscrowd": 0}, {"id": 5243809, "category_id": 13, "area": 706, "bbox": [445, 195, 15, 70], "iscrowd": 0}]}, {"image_id": "ADE_val_00000065", "file_name": "ADE_val_00000065.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 36307, "bbox": [0, 0, 622, 434], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 69531, "bbox": [2, 247, 620, 233], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 21846, "bbox": [171, 1, 277, 117], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 153, "bbox": [348, 160, 20, 13], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 8731, "bbox": [145, 0, 32, 463], "iscrowd": 0}, {"id": 2162432, "category_id": 15, "area": 9660, "bbox": [442, 1, 26, 467], "iscrowd": 0}, {"id": 3604243, "category_id": 15, "area": 1002, "bbox": [428, 150, 17, 66], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 396, "bbox": [395, 216, 35, 44], "iscrowd": 0}, {"id": 1660138, "category_id": 20, "area": 959, "bbox": [60, 211, 42, 44], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1226, "bbox": [239, 180, 59, 22], "iscrowd": 0}, {"id": 2818281, "category_id": 23, "area": 881, "bbox": [341, 181, 44, 21], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 2394, "bbox": [190, 219, 92, 28], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 5081, "bbox": [242, 234, 89, 69], "iscrowd": 0}, {"id": 14346528, "category_id": 31, "area": 3495, "bbox": [111, 237, 58, 71], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1419, "bbox": [250, 38, 85, 26], "iscrowd": 0}, {"id": 1769462, "category_id": 37, "area": 81, "bbox": [218, 129, 7, 24], "iscrowd": 0}, {"id": 57804, "category_id": 37, "area": 81, "bbox": [313, 125, 8, 29], "iscrowd": 0}, {"id": 64748, "category_id": 37, "area": 984, "bbox": [48, 70, 72, 25], "iscrowd": 0}, {"id": 1245172, "category_id": 37, "area": 899, "bbox": [234, 86, 65, 19], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 4402, "bbox": [170, 56, 19, 261], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 8668, "bbox": [89, 85, 306, 36], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 5887, "bbox": [190, 203, 204, 46], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 2087, "bbox": [198, 259, 44, 52], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 74, "bbox": [182, 31, 19, 5], "iscrowd": 0}, {"id": 47854, "category_id": 83, "area": 50, "bbox": [236, 59, 10, 6], "iscrowd": 0}, {"id": 48866, "category_id": 83, "area": 91, "bbox": [84, 45, 19, 6], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 54, "bbox": [354, 173, 9, 8], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 799, "bbox": [301, 35, 94, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00000066", "file_name": "ADE_val_00000066.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 98116, "bbox": [0, 36, 360, 443], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 47506, "bbox": [0, 0, 359, 405], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 22692, "bbox": [0, 324, 358, 155], "iscrowd": 0}]}, {"image_id": "ADE_val_00000067", "file_name": "ADE_val_00000067.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 38294, "bbox": [0, 0, 269, 328], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7966, "bbox": [0, 304, 224, 55], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 605, "bbox": [69, 1, 71, 16], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 16820, "bbox": [123, 23, 101, 188], "iscrowd": 0}, {"id": 14942175, "category_id": 9, "area": 11639, "bbox": [13, 10, 65, 197], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2632, "bbox": [222, 296, 47, 63], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1396, "bbox": [229, 44, 40, 83], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 6333, "bbox": [121, 253, 146, 60], "iscrowd": 0}, {"id": 60838, "category_id": 70, "area": 4179, "bbox": [7, 253, 75, 75], "iscrowd": 0}]}, {"image_id": "ADE_val_00000068", "file_name": "ADE_val_00000068.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 69241, "bbox": [1, 0, 579, 245], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9592, "bbox": [47, 360, 277, 74], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 472, "bbox": [89, 1, 95, 9], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 86078, "bbox": [63, 210, 492, 224], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 30806, "bbox": [82, 1, 474, 109], "iscrowd": 0}, {"id": 16712398, "category_id": 11, "area": 11842, "bbox": [1, 105, 48, 330], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 8185, "bbox": [27, 141, 72, 225], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 630, "bbox": [263, 122, 21, 30], "iscrowd": 0}, {"id": 3801329, "category_id": 23, "area": 3438, "bbox": [425, 5, 66, 53], "iscrowd": 0}, {"id": 2955772, "category_id": 23, "area": 4339, "bbox": [179, 11, 68, 71], "iscrowd": 0}, {"id": 5243117, "category_id": 23, "area": 1518, "bbox": [107, 36, 38, 46], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 3787, "bbox": [275, 3, 70, 70], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 1305, "bbox": [41, 243, 21, 99], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 615, "bbox": [152, 33, 19, 57], "iscrowd": 0}, {"id": 15868179, "category_id": 135, "area": 686, "bbox": [245, 23, 18, 62], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 1178, "bbox": [457, 203, 41, 32], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 444, "bbox": [111, 116, 25, 24], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 1023, "bbox": [494, 94, 34, 38], "iscrowd": 0}]}, {"image_id": "ADE_val_00000069", "file_name": "ADE_val_00000069.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 20641, "bbox": [0, 0, 252, 222], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3796, "bbox": [88, 114, 163, 107], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 262, "bbox": [85, 34, 13, 28], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 12360, "bbox": [12, 85, 211, 135], "iscrowd": 0}, {"id": 6424063, "category_id": 16, "area": 10617, "bbox": [13, 53, 234, 140], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 473, "bbox": [127, 49, 15, 35], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 259, "bbox": [71, 28, 10, 43], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 2661, "bbox": [87, 126, 63, 92], "iscrowd": 0}, {"id": 16764435, "category_id": 111, "area": 2133, "bbox": [131, 112, 59, 106], "iscrowd": 0}]}, {"image_id": "ADE_val_00000070", "file_name": "ADE_val_00000070.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 19684, "bbox": [0, 21, 200, 240], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3503, "bbox": [0, 0, 199, 22], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 11610, "bbox": [0, 219, 200, 80], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 19266, "bbox": [19, 36, 161, 219], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 3411, "bbox": [155, 0, 36, 110], "iscrowd": 0}]}, {"image_id": "ADE_val_00000071", "file_name": "ADE_val_00000071.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 10714, "bbox": [0, 0, 219, 143], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10307, "bbox": [0, 223, 219, 66], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1379, "bbox": [0, 0, 146, 17], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 12256, "bbox": [0, 140, 220, 91], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 532, "bbox": [57, 78, 21, 28], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 4303, "bbox": [2, 23, 39, 117], "iscrowd": 0}, {"id": 14939895, "category_id": 28, "area": 11303, "bbox": [97, 10, 105, 131], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 456, "bbox": [43, 41, 39, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00000072", "file_name": "ADE_val_00000072.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 99537, "bbox": [3, 1, 690, 506], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 122848, "bbox": [3, 235, 687, 277], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6358, "bbox": [491, 199, 147, 156], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 115722, "bbox": [82, 42, 425, 287], "iscrowd": 0}]}, {"image_id": "ADE_val_00000073", "file_name": "ADE_val_00000073.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 5810, "bbox": [407, 138, 232, 124], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 50075, "bbox": [0, 0, 639, 118], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 78207, "bbox": [0, 42, 640, 187], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 9908, "bbox": [2, 166, 637, 93], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 203, "bbox": [572, 163, 58, 4], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 11313, "bbox": [96, 188, 421, 43], "iscrowd": 0}, {"id": 2344191, "category_id": 33, "area": 4126, "bbox": [519, 215, 120, 48], "iscrowd": 0}, {"id": 304895, "category_id": 33, "area": 25325, "bbox": [271, 342, 368, 137], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 804, "bbox": [516, 52, 27, 158], "iscrowd": 0}, {"id": 16727552, "category_id": 88, "area": 661, "bbox": [116, 92, 24, 91], "iscrowd": 0}, {"id": 16598016, "category_id": 88, "area": 217, "bbox": [237, 112, 11, 50], "iscrowd": 0}]}, {"image_id": "ADE_val_00000074", "file_name": "ADE_val_00000074.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 146807, "bbox": [2, 0, 610, 479], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 31078, "bbox": [193, 281, 255, 198], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 36664, "bbox": [50, 0, 463, 169], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1206, "bbox": [293, 168, 67, 18], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 5796, "bbox": [294, 188, 64, 94], "iscrowd": 0}, {"id": 3604224, "category_id": 15, "area": 4109, "bbox": [191, 125, 15, 295], "iscrowd": 0}, {"id": 2879247, "category_id": 15, "area": 665, "bbox": [283, 175, 6, 128], "iscrowd": 0}, {"id": 2031360, "category_id": 15, "area": 47456, "bbox": [38, 3, 116, 476], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2096, "bbox": [575, 171, 26, 85], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 392, "bbox": [314, 60, 38, 13], "iscrowd": 0}, {"id": 48127, "category_id": 83, "area": 135, "bbox": [320, 117, 23, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00000075", "file_name": "ADE_val_00000075.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 126949, "bbox": [0, 58, 682, 277], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 69976, "bbox": [0, 0, 682, 163], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1584, "bbox": [24, 274, 28, 61], "iscrowd": 0}]}, {"image_id": "ADE_val_00000076", "file_name": "ADE_val_00000076.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 167880, "bbox": [0, 64, 681, 322], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14415, "bbox": [0, 333, 682, 97], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 48301, "bbox": [0, 0, 682, 91], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 94326, "bbox": [0, 347, 682, 164], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4060, "bbox": [240, 228, 52, 86], "iscrowd": 0}, {"id": 14417913, "category_id": 9, "area": 4519, "bbox": [328, 227, 58, 87], "iscrowd": 0}, {"id": 14999013, "category_id": 9, "area": 4274, "bbox": [422, 227, 54, 86], "iscrowd": 0}, {"id": 14994418, "category_id": 9, "area": 1196, "bbox": [547, 209, 15, 109], "iscrowd": 0}, {"id": 16243705, "category_id": 9, "area": 738, "bbox": [523, 226, 10, 91], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 538, "bbox": [160, 291, 18, 70], "iscrowd": 0}, {"id": 262140, "category_id": 37, "area": 361, "bbox": [192, 293, 13, 58], "iscrowd": 0}, {"id": 1703897, "category_id": 37, "area": 315, "bbox": [296, 293, 12, 50], "iscrowd": 0}, {"id": 720865, "category_id": 37, "area": 270, "bbox": [411, 293, 11, 49], "iscrowd": 0}, {"id": 1303285, "category_id": 37, "area": 1257, "bbox": [30, 286, 31, 117], "iscrowd": 0}, {"id": 58332, "category_id": 37, "area": 236, "bbox": [260, 294, 11, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00000077", "file_name": "ADE_val_00000077.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 109684, "bbox": [2, 1, 398, 599], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3155, "bbox": [68, 556, 141, 44], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 11178, "bbox": [64, 443, 332, 156], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 21502, "bbox": [228, 1, 170, 143], "iscrowd": 0}, {"id": 12960248, "category_id": 28, "area": 2382, "bbox": [180, 195, 59, 59], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 21984, "bbox": [127, 272, 271, 130], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 38697, "bbox": [48, 284, 347, 246], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 9468, "bbox": [2, 262, 47, 229], "iscrowd": 0}, {"id": 6160639, "category_id": 82, "area": 15245, "bbox": [178, 502, 218, 98], "iscrowd": 0}]}, {"image_id": "ADE_val_00000078", "file_name": "ADE_val_00000078.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 174352, "bbox": [0, 0, 511, 682], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 48954, "bbox": [79, 498, 317, 184], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 692, "bbox": [92, 0, 218, 7], "iscrowd": 0}, {"id": 16745728, "category_id": 146, "area": 333, "bbox": [87, 122, 39, 34], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 19963, "bbox": [170, 85, 119, 182], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 4626, "bbox": [59, 463, 46, 172], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 47690, "bbox": [382, 0, 117, 682], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 371, "bbox": [111, 262, 37, 16], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 26998, "bbox": [108, 378, 283, 123], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 6220, "bbox": [50, 356, 74, 121], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 12425, "bbox": [95, 436, 126, 122], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 398, "bbox": [120, 233, 14, 34], "iscrowd": 0}, {"id": 2227981, "category_id": 99, "area": 581, "bbox": [363, 223, 16, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00000079", "file_name": "ADE_val_00000079.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 114487, "bbox": [0, 0, 763, 504], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1351, "bbox": [289, 486, 104, 25], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 58478, "bbox": [50, 0, 714, 141], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 21893, "bbox": [446, 149, 157, 166], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 49617, "bbox": [0, 344, 344, 167], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 958, "bbox": [300, 210, 74, 21], "iscrowd": 0}, {"id": 5701866, "category_id": 25, "area": 618, "bbox": [365, 256, 58, 15], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 56625, "bbox": [2, 87, 290, 240], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 35439, "bbox": [344, 357, 262, 154], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2698, "bbox": [20, 330, 149, 39], "iscrowd": 0}, {"id": 15511808, "category_id": 48, "area": 1898, "bbox": [191, 319, 114, 33], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 28556, "bbox": [604, 117, 159, 394], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 5112, "bbox": [0, 325, 347, 60], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 468, "bbox": [460, 80, 33, 18], "iscrowd": 0}, {"id": 50416, "category_id": 83, "area": 1017, "bbox": [702, 14, 57, 27], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 320, "bbox": [421, 322, 15, 41], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 6207, "bbox": [16, 56, 257, 92], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 249, "bbox": [331, 196, 16, 18], "iscrowd": 0}, {"id": 14348045, "category_id": 136, "area": 138, "bbox": [390, 242, 12, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000080", "file_name": "ADE_val_00000080.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 52165, "bbox": [0, 0, 239, 320], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2326, "bbox": [174, 257, 64, 62], "iscrowd": 0}, {"id": 16745728, "category_id": 146, "area": 64, "bbox": [78, 26, 8, 12], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3280, "bbox": [200, 155, 33, 115], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 8478, "bbox": [51, 9, 55, 311], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 113, "bbox": [125, 253, 7, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00000081", "file_name": "ADE_val_00000081.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 168428, "bbox": [0, 0, 505, 682], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5138, "bbox": [127, 631, 159, 52], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 44860, "bbox": [118, 1, 390, 145], "iscrowd": 0}, {"id": 16745728, "category_id": 146, "area": 1604, "bbox": [125, 167, 99, 221], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 19228, "bbox": [290, 499, 221, 184], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 15738, "bbox": [449, 164, 56, 309], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 881, "bbox": [466, 491, 37, 33], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 51520, "bbox": [118, 140, 132, 454], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 17992, "bbox": [281, 494, 133, 188], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 6330, "bbox": [294, 468, 211, 70], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 167, "bbox": [209, 116, 21, 10], "iscrowd": 0}, {"id": 39665, "category_id": 83, "area": 219, "bbox": [372, 81, 24, 12], "iscrowd": 0}, {"id": 38655, "category_id": 83, "area": 207, "bbox": [472, 67, 24, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00000082", "file_name": "ADE_val_00000082.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 29430, "bbox": [0, 0, 255, 199], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12914, "bbox": [0, 171, 256, 85], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4034, "bbox": [128, 1, 56, 74], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 448, "bbox": [15, 60, 64, 8], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 2629, "bbox": [11, 1, 71, 40], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 11272, "bbox": [123, 112, 119, 142], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2198, "bbox": [14, 82, 77, 62], "iscrowd": 0}]}, {"image_id": "ADE_val_00000083", "file_name": "ADE_val_00000083.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 275962, "bbox": [1, 0, 766, 511], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 17592, "bbox": [591, 0, 176, 104], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 9450, "bbox": [554, 143, 213, 62], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 53239, "bbox": [448, 263, 319, 248], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 29016, "bbox": [0, 292, 182, 219], "iscrowd": 0}]}, {"image_id": "ADE_val_00000084", "file_name": "ADE_val_00000084.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 151601, "bbox": [0, 0, 683, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 30734, "bbox": [63, 346, 227, 166], "iscrowd": 0}, {"id": 16745728, "category_id": 146, "area": 277, "bbox": [80, 110, 15, 36], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7975, "bbox": [212, 215, 65, 174], "iscrowd": 0}, {"id": 16515277, "category_id": 11, "area": 15378, "bbox": [276, 0, 61, 432], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 8913, "bbox": [105, 0, 45, 228], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 7779, "bbox": [59, 222, 104, 134], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 40978, "bbox": [257, 236, 395, 267], "iscrowd": 0}, {"id": 1752550, "category_id": 40, "area": 7727, "bbox": [557, 380, 126, 121], "iscrowd": 0}, {"id": 1629439, "category_id": 40, "area": 20525, "bbox": [276, 407, 406, 105], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1865, "bbox": [204, 197, 73, 33], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 12294, "bbox": [94, 185, 160, 178], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 9674, "bbox": [196, 253, 211, 137], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 838, "bbox": [288, 55, 16, 71], "iscrowd": 0}, {"id": 8258815, "category_id": 82, "area": 417, "bbox": [289, 1, 18, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00000085", "file_name": "ADE_val_00000085.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 26984, "bbox": [110, 0, 190, 224], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21504, "bbox": [0, 182, 299, 118], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 15904, "bbox": [0, 0, 110, 201], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 2670, "bbox": [194, 3, 32, 86], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 14610, "bbox": [7, 92, 153, 171], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2420, "bbox": [150, 100, 66, 96], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 4551, "bbox": [213, 130, 71, 98], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 209, "bbox": [149, 37, 26, 39], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 103, "bbox": [166, 75, 6, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00000086", "file_name": "ADE_val_00000086.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 24620, "bbox": [0, 27, 275, 207], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7075, "bbox": [0, 227, 175, 66], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7397, "bbox": [0, 0, 172, 79], "iscrowd": 0}, {"id": 16745728, "category_id": 146, "area": 442, "bbox": [169, 0, 30, 24], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 23746, "bbox": [160, 0, 133, 241], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 703, "bbox": [21, 102, 26, 29], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 1539, "bbox": [77, 85, 33, 53], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 3282, "bbox": [74, 175, 85, 97], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 10811, "bbox": [124, 201, 169, 92], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 905, "bbox": [104, 178, 38, 41], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 3556, "bbox": [55, 156, 67, 85], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 1327, "bbox": [123, 220, 45, 63], "iscrowd": 0}]}, {"image_id": "ADE_val_00000087", "file_name": "ADE_val_00000087.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 113434, "bbox": [0, 0, 657, 464], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 74184, "bbox": [1, 276, 655, 235], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 19695, "bbox": [128, 83, 219, 127], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 1073, "bbox": [363, 48, 157, 25], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 5202, "bbox": [176, 26, 141, 74], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 32320, "bbox": [249, 168, 248, 242], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 4546, "bbox": [323, 79, 64, 145], "iscrowd": 0}, {"id": 5243128, "category_id": 82, "area": 15036, "bbox": [10, 33, 83, 223], "iscrowd": 0}, {"id": 8388863, "category_id": 82, "area": 1413, "bbox": [413, 29, 58, 31], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 730, "bbox": [396, 1, 19, 52], "iscrowd": 0}]}, {"image_id": "ADE_val_00000088", "file_name": "ADE_val_00000088.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 26051, "bbox": [0, 0, 222, 299], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1961, "bbox": [15, 267, 126, 32], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 730, "bbox": [32, 1, 160, 9], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 6465, "bbox": [198, 0, 35, 299], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 9218, "bbox": [7, 25, 90, 110], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 5286, "bbox": [9, 153, 109, 98], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 14337, "bbox": [117, 0, 106, 298], "iscrowd": 0}]}, {"image_id": "ADE_val_00000089", "file_name": "ADE_val_00000089.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 36064, "bbox": [0, 0, 300, 224], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2065, "bbox": [153, 184, 76, 41], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 689, "bbox": [263, 110, 37, 26], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3190, "bbox": [163, 14, 33, 103], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2031, "bbox": [227, 122, 45, 82], "iscrowd": 0}, {"id": 16253141, "category_id": 11, "area": 3066, "bbox": [262, 137, 37, 88], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 297, "bbox": [268, 43, 9, 38], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 6465, "bbox": [25, 166, 139, 58], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 702, "bbox": [223, 122, 44, 19], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 10538, "bbox": [80, 27, 80, 160], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 1680, "bbox": [201, 196, 68, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000090", "file_name": "ADE_val_00000090.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 73754, "bbox": [2, 1, 278, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17737, "bbox": [19, 331, 207, 181], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1153, "bbox": [53, 1, 102, 23], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 10142, "bbox": [98, 396, 125, 115], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 11582, "bbox": [3, 57, 99, 141], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1255, "bbox": [13, 253, 32, 126], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2416, "bbox": [2, 214, 34, 297], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 7310, "bbox": [2, 1, 118, 106], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 462, "bbox": [125, 146, 21, 23], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2699, "bbox": [14, 286, 59, 78], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 10832, "bbox": [191, 92, 39, 310], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 379, "bbox": [142, 287, 16, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00000091", "file_name": "ADE_val_00000091.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 267102, "bbox": [0, 0, 511, 770], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12803, "bbox": [50, 630, 316, 140], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 12067, "bbox": [380, 149, 71, 231], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 11546, "bbox": [324, 479, 124, 156], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 38563, "bbox": [125, 37, 154, 733], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 6309, "bbox": [62, 644, 82, 117], "iscrowd": 0}]}, {"image_id": "ADE_val_00000092", "file_name": "ADE_val_00000092.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 52007, "bbox": [1, 0, 582, 367], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 29924, "bbox": [309, 0, 276, 140], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 10809, "bbox": [430, 154, 152, 77], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 36171, "bbox": [213, 0, 135, 315], "iscrowd": 0}, {"id": 15276797, "category_id": 11, "area": 43839, "bbox": [0, 286, 415, 225], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 51895, "bbox": [552, 0, 130, 509], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 2119, "bbox": [334, 167, 28, 87], "iscrowd": 0}, {"id": 14739696, "category_id": 28, "area": 45356, "bbox": [0, 1, 211, 268], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 3968, "bbox": [111, 306, 150, 53], "iscrowd": 0}, {"id": 14977564, "category_id": 48, "area": 296, "bbox": [336, 283, 46, 8], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 1310, "bbox": [414, 314, 32, 51], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 29956, "bbox": [0, 266, 416, 217], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 2060, "bbox": [506, 252, 34, 69], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 832, "bbox": [426, 14, 41, 27], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 675, "bbox": [336, 121, 30, 37], "iscrowd": 0}, {"id": 16718602, "category_id": 135, "area": 1202, "bbox": [129, 0, 48, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00000093", "file_name": "ADE_val_00000093.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 165537, "bbox": [0, 0, 511, 598], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9584, "bbox": [44, 575, 252, 108], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3301, "bbox": [130, 0, 212, 30], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 5859, "bbox": [122, 632, 171, 50], "iscrowd": 0}, {"id": 16745728, "category_id": 146, "area": 314, "bbox": [271, 172, 26, 32], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1116, "bbox": [124, 216, 12, 135], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 13676, "bbox": [436, 489, 75, 193], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 38217, "bbox": [0, 91, 131, 327], "iscrowd": 0}, {"id": 2241791, "category_id": 19, "area": 35189, "bbox": [125, 103, 128, 314], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 44565, "bbox": [180, 435, 256, 248], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 16238, "bbox": [0, 455, 133, 228], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 10521, "bbox": [0, 413, 143, 262], "iscrowd": 0}]}, {"image_id": "ADE_val_00000094", "file_name": "ADE_val_00000094.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 160755, "bbox": [56, 0, 455, 762], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 20321, "bbox": [71, 611, 232, 151], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 40292, "bbox": [56, 0, 340, 133], "iscrowd": 0}, {"id": 16745728, "category_id": 146, "area": 536, "bbox": [321, 158, 35, 36], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 6163, "bbox": [260, 250, 31, 366], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 41196, "bbox": [59, 132, 160, 275], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1275, "bbox": [66, 398, 33, 47], "iscrowd": 0}, {"id": 2424588, "category_id": 42, "area": 12755, "bbox": [88, 564, 127, 117], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2837, "bbox": [86, 388, 121, 71], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 5850, "bbox": [67, 426, 188, 60], "iscrowd": 0}]}, {"image_id": "ADE_val_00000095", "file_name": "ADE_val_00000095.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 47884, "bbox": [33, 1, 255, 357], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 24063, "bbox": [39, 303, 214, 146], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 18071, "bbox": [2, 1, 51, 448], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 15345, "bbox": [232, 1, 64, 447], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 6882, "bbox": [68, 1, 81, 90], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 4600, "bbox": [54, 160, 94, 66], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 9826, "bbox": [178, 194, 85, 167], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 651, "bbox": [42, 141, 13, 78], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 590, "bbox": [167, 10, 20, 35], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 202, "bbox": [129, 123, 12, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00000096", "file_name": "ADE_val_00000096.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 216822, "bbox": [1, 1, 682, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 56604, "bbox": [2, 336, 623, 176], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 68162, "bbox": [13, 80, 343, 403], "iscrowd": 0}]}, {"image_id": "ADE_val_00000097", "file_name": "ADE_val_00000097.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 129536, "bbox": [0, 0, 491, 583], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 16593, "bbox": [22, 575, 233, 192], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 13462, "bbox": [1, 0, 315, 71], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 8447, "bbox": [29, 641, 109, 126], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 47940, "bbox": [143, 490, 290, 277], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 10183, "bbox": [0, 103, 29, 662], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 5370, "bbox": [186, 182, 36, 162], "iscrowd": 0}, {"id": 2687231, "category_id": 23, "area": 8516, "bbox": [58, 180, 58, 156], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 57684, "bbox": [259, 143, 218, 327], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 3997, "bbox": [194, 445, 109, 67], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 12115, "bbox": [45, 428, 184, 209], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 2374, "bbox": [125, 331, 71, 72], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 30346, "bbox": [132, 428, 319, 231], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 2277, "bbox": [300, 33, 186, 62], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 751, "bbox": [158, 395, 24, 41], "iscrowd": 0}]}, {"image_id": "ADE_val_00000098", "file_name": "ADE_val_00000098.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 143333, "bbox": [1, 0, 682, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 52786, "bbox": [146, 347, 536, 164], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4265, "bbox": [101, 396, 138, 115], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 13606, "bbox": [1, 1, 119, 130], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 66787, "bbox": [245, 158, 382, 258], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 19115, "bbox": [37, 178, 204, 160], "iscrowd": 0}, {"id": 16747272, "category_id": 48, "area": 5821, "bbox": [2, 296, 67, 131], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 31361, "bbox": [2, 284, 309, 228], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 6032, "bbox": [212, 231, 119, 84], "iscrowd": 0}, {"id": 8650990, "category_id": 82, "area": 1865, "bbox": [106, 436, 67, 70], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 1346, "bbox": [9, 189, 33, 51], "iscrowd": 0}]}, {"image_id": "ADE_val_00000099", "file_name": "ADE_val_00000099.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 133415, "bbox": [39, 0, 643, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25440, "bbox": [253, 413, 413, 98], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 37567, "bbox": [1, 1, 111, 510], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 37064, "bbox": [93, 0, 147, 355], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 56555, "bbox": [131, 179, 471, 262], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 29859, "bbox": [480, 293, 202, 218], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 25463, "bbox": [80, 273, 218, 238], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 1328, "bbox": [654, 319, 27, 56], "iscrowd": 0}]}, {"image_id": "ADE_val_00000100", "file_name": "ADE_val_00000100.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 156923, "bbox": [1, 0, 510, 688], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 43777, "bbox": [0, 562, 478, 126], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 72225, "bbox": [146, 174, 206, 414], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 14211, "bbox": [386, 264, 107, 166], "iscrowd": 0}, {"id": 13626358, "category_id": 28, "area": 14976, "bbox": [1, 263, 104, 185], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 11993, "bbox": [155, 1, 126, 185], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 907, "bbox": [106, 428, 30, 41], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 11110, "bbox": [330, 424, 157, 202], "iscrowd": 0}, {"id": 16747799, "category_id": 48, "area": 14058, "bbox": [1, 439, 188, 231], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 827, "bbox": [136, 418, 20, 48], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 2770, "bbox": [11, 218, 102, 56], "iscrowd": 0}, {"id": 16264192, "category_id": 135, "area": 2427, "bbox": [394, 230, 101, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00000101", "file_name": "ADE_val_00000101.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 79436, "bbox": [57, 0, 395, 720], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 76672, "bbox": [62, 523, 388, 258], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 117922, "bbox": [72, 1, 380, 355], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 45514, "bbox": [0, 0, 76, 781], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 12558, "bbox": [368, 631, 119, 149], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1945, "bbox": [398, 402, 53, 55], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 46349, "bbox": [449, 0, 63, 780], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 7353, "bbox": [188, 408, 72, 146], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 9550, "bbox": [401, 311, 50, 267], "iscrowd": 0}]}, {"image_id": "ADE_val_00000102", "file_name": "ADE_val_00000102.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 57258, "bbox": [106, 31, 292, 414], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 61220, "bbox": [2, 369, 395, 229], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 20321, "bbox": [2, 2, 396, 67], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 14217, "bbox": [278, 69, 120, 137], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 8645, "bbox": [216, 319, 181, 154], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2946, "bbox": [228, 239, 107, 47], "iscrowd": 0}, {"id": 16759298, "category_id": 48, "area": 4313, "bbox": [301, 286, 97, 55], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 36822, "bbox": [2, 65, 123, 314], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 5584, "bbox": [1, 384, 93, 74], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 10694, "bbox": [202, 248, 197, 156], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 132, "bbox": [157, 7, 18, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000103", "file_name": "ADE_val_00000103.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 134386, "bbox": [1, 0, 682, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 68740, "bbox": [66, 224, 616, 288], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1387, "bbox": [203, 34, 61, 79], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 5558, "bbox": [614, 1, 69, 108], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 80412, "bbox": [1, 135, 285, 377], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 30089, "bbox": [508, 190, 174, 289], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 10452, "bbox": [230, 104, 109, 172], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 2827, "bbox": [140, 103, 75, 56], "iscrowd": 0}, {"id": 5576439, "category_id": 82, "area": 3396, "bbox": [465, 188, 78, 102], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 540, "bbox": [43, 114, 23, 39], "iscrowd": 0}, {"id": 1965056, "category_id": 99, "area": 352, "bbox": [61, 122, 18, 28], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 356, "bbox": [252, 66, 29, 18], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 367, "bbox": [220, 69, 39, 28], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 1256, "bbox": [1, 453, 42, 59], "iscrowd": 0}]}, {"image_id": "ADE_val_00000104", "file_name": "ADE_val_00000104.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 137451, "bbox": [0, 11, 512, 590], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 46378, "bbox": [0, 557, 271, 210], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 13953, "bbox": [1, 0, 494, 47], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 31538, "bbox": [253, 548, 259, 219], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 32732, "bbox": [0, 179, 93, 380], "iscrowd": 0}, {"id": 2948875, "category_id": 15, "area": 23994, "bbox": [155, 178, 66, 394], "iscrowd": 0}, {"id": 5046016, "category_id": 15, "area": 28998, "bbox": [0, 86, 263, 635], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 38090, "bbox": [414, 1, 98, 556], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 11135, "bbox": [294, 490, 158, 111], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 2705, "bbox": [460, 692, 52, 74], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 15808, "bbox": [249, 508, 263, 138], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 4841, "bbox": [427, 67, 85, 87], "iscrowd": 0}]}, {"image_id": "ADE_val_00000105", "file_name": "ADE_val_00000105.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 125243, "bbox": [1, 0, 650, 511], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 84974, "bbox": [88, 306, 429, 205], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 26296, "bbox": [638, 0, 71, 440], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 71946, "bbox": [160, 0, 300, 254], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2551, "bbox": [228, 235, 166, 56], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 25398, "bbox": [517, 310, 193, 201], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 3161, "bbox": [140, 201, 100, 73], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 17931, "bbox": [87, 250, 441, 60], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 733, "bbox": [162, 267, 56, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00000106", "file_name": "ADE_val_00000106.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 15963, "bbox": [0, 0, 255, 242], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6252, "bbox": [1, 198, 252, 58], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 2048, "bbox": [91, 233, 121, 22], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6808, "bbox": [54, 0, 109, 144], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1786, "bbox": [223, 0, 31, 65], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 11267, "bbox": [0, 116, 101, 139], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 3334, "bbox": [52, 0, 51, 114], "iscrowd": 0}, {"id": 71649, "category_id": 19, "area": 5687, "bbox": [112, 0, 61, 185], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 1005, "bbox": [0, 0, 21, 56], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1811, "bbox": [9, 45, 39, 72], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 5779, "bbox": [177, 139, 78, 114], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1286, "bbox": [196, 100, 60, 37], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 1260, "bbox": [91, 148, 34, 63], "iscrowd": 0}]}, {"image_id": "ADE_val_00000107", "file_name": "ADE_val_00000107.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 102817, "bbox": [1, 0, 533, 312], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 48716, "bbox": [200, 311, 487, 200], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 205, "bbox": [404, 157, 11, 39], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 13021, "bbox": [337, 228, 192, 102], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 10176, "bbox": [514, 253, 161, 235], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 9364, "bbox": [527, 0, 40, 325], "iscrowd": 0}, {"id": 15103, "category_id": 19, "area": 40818, "bbox": [561, 1, 127, 489], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 13235, "bbox": [365, 60, 133, 102], "iscrowd": 0}, {"id": 13493717, "category_id": 28, "area": 1331, "bbox": [563, 183, 37, 77], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 61332, "bbox": [1, 191, 283, 320], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 614, "bbox": [591, 247, 30, 28], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 4911, "bbox": [337, 166, 191, 63], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 406, "bbox": [326, 225, 11, 58], "iscrowd": 0}, {"id": 6422783, "category_id": 82, "area": 985, "bbox": [345, 286, 48, 23], "iscrowd": 0}, {"id": 7536895, "category_id": 82, "area": 1358, "bbox": [469, 278, 50, 31], "iscrowd": 0}, {"id": 7274751, "category_id": 82, "area": 1958, "bbox": [266, 190, 47, 44], "iscrowd": 0}, {"id": 6166527, "category_id": 82, "area": 1740, "bbox": [265, 123, 45, 41], "iscrowd": 0}, {"id": 8519935, "category_id": 82, "area": 1388, "bbox": [194, 253, 35, 53], "iscrowd": 0}, {"id": 7602943, "category_id": 82, "area": 1044, "bbox": [229, 274, 39, 68], "iscrowd": 0}, {"id": 7606009, "category_id": 82, "area": 321, "bbox": [346, 254, 27, 15], "iscrowd": 0}, {"id": 4915435, "category_id": 82, "area": 152, "bbox": [496, 259, 21, 10], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 22698, "bbox": [420, 310, 162, 176], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 101, "bbox": [403, 196, 13, 9], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 471, "bbox": [340, 89, 17, 35], "iscrowd": 0}, {"id": 16139008, "category_id": 135, "area": 435, "bbox": [508, 91, 16, 34], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 7911, "bbox": [255, 92, 66, 212], "iscrowd": 0}]}, {"image_id": "ADE_val_00000108", "file_name": "ADE_val_00000108.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 41777, "bbox": [54, 0, 202, 255], "iscrowd": 0}, {"id": 16745728, "category_id": 146, "area": 464, "bbox": [102, 109, 50, 17], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 17504, "bbox": [0, 0, 84, 256], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 5156, "bbox": [229, 0, 27, 256], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 388, "bbox": [115, 6, 20, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00000109", "file_name": "ADE_val_00000109.png", "segments_info": [{"id": 522756, "category_id": 10, "area": 146912, "bbox": [0, 0, 766, 510], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 200945, "bbox": [1, 198, 766, 312], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 12750, "bbox": [624, 89, 121, 233], "iscrowd": 0}, {"id": 2561416, "category_id": 13, "area": 12088, "bbox": [538, 170, 146, 170], "iscrowd": 0}, {"id": 3351439, "category_id": 13, "area": 15162, "bbox": [249, 91, 169, 241], "iscrowd": 0}]}, {"image_id": "ADE_val_00000110", "file_name": "ADE_val_00000110.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 30347, "bbox": [1, 0, 226, 215], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 5287, "bbox": [187, 36, 159, 68], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 8375, "bbox": [185, 0, 161, 70], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4240, "bbox": [244, 71, 102, 84], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 6306, "bbox": [206, 102, 106, 128], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6682, "bbox": [12, 120, 104, 110], "iscrowd": 0}, {"id": 3545772, "category_id": 13, "area": 9419, "bbox": [130, 91, 101, 140], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 6426, "bbox": [231, 94, 114, 136], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1443, "bbox": [0, 135, 26, 94], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 291, "bbox": [109, 215, 21, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000111", "file_name": "ADE_val_00000111.png", "segments_info": [{"id": 5273720, "category_id": 6, "area": 109856, "bbox": [0, 0, 767, 214], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 25376, "bbox": [0, 321, 348, 190], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2553, "bbox": [274, 193, 57, 73], "iscrowd": 0}, {"id": 4456577, "category_id": 13, "area": 1846, "bbox": [393, 200, 41, 71], "iscrowd": 0}, {"id": 3866790, "category_id": 13, "area": 1226, "bbox": [428, 216, 40, 54], "iscrowd": 0}, {"id": 3937187, "category_id": 13, "area": 1707, "bbox": [502, 218, 49, 59], "iscrowd": 0}, {"id": 4005286, "category_id": 13, "area": 1754, "bbox": [639, 195, 50, 55], "iscrowd": 0}, {"id": 5439628, "category_id": 13, "area": 361, "bbox": [213, 220, 18, 30], "iscrowd": 0}, {"id": 5316002, "category_id": 13, "area": 1360, "bbox": [181, 206, 38, 94], "iscrowd": 0}, {"id": 5571232, "category_id": 13, "area": 2286, "bbox": [160, 231, 51, 100], "iscrowd": 0}, {"id": 3014831, "category_id": 13, "area": 3187, "bbox": [87, 203, 58, 218], "iscrowd": 0}, {"id": 4718759, "category_id": 13, "area": 3932, "bbox": [23, 217, 45, 169], "iscrowd": 0}, {"id": 5505184, "category_id": 13, "area": 5102, "bbox": [1, 227, 33, 238], "iscrowd": 0}, {"id": 3220402, "category_id": 13, "area": 11463, "bbox": [119, 197, 83, 287], "iscrowd": 0}, {"id": 2756493, "category_id": 13, "area": 5681, "bbox": [79, 268, 64, 187], "iscrowd": 0}, {"id": 4393649, "category_id": 13, "area": 948, "bbox": [744, 189, 23, 63], "iscrowd": 0}, {"id": 5644944, "category_id": 13, "area": 822, "bbox": [716, 189, 23, 54], "iscrowd": 0}, {"id": 5772153, "category_id": 13, "area": 291, "bbox": [561, 223, 21, 28], "iscrowd": 0}, {"id": 2687366, "category_id": 13, "area": 511, "bbox": [734, 199, 19, 52], "iscrowd": 0}, {"id": 2887091, "category_id": 13, "area": 536, "bbox": [20, 381, 28, 48], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1555, "bbox": [406, 437, 98, 59], "iscrowd": 0}, {"id": 3269888, "category_id": 42, "area": 1818, "bbox": [446, 449, 100, 62], "iscrowd": 0}, {"id": 60172, "category_id": 42, "area": 1820, "bbox": [491, 463, 109, 48], "iscrowd": 0}, {"id": 65294, "category_id": 42, "area": 3617, "bbox": [578, 426, 105, 64], "iscrowd": 0}, {"id": 1638174, "category_id": 42, "area": 2391, "bbox": [513, 412, 105, 60], "iscrowd": 0}, {"id": 58376, "category_id": 42, "area": 1386, "bbox": [466, 400, 94, 51], "iscrowd": 0}, {"id": 786190, "category_id": 42, "area": 2692, "bbox": [617, 373, 96, 57], "iscrowd": 0}, {"id": 1965828, "category_id": 42, "area": 1576, "bbox": [565, 369, 85, 48], "iscrowd": 0}, {"id": 65044, "category_id": 42, "area": 1709, "bbox": [516, 361, 86, 50], "iscrowd": 0}, {"id": 1764352, "category_id": 42, "area": 4959, "bbox": [373, 391, 124, 82], "iscrowd": 0}, {"id": 385792, "category_id": 42, "area": 1151, "bbox": [550, 337, 56, 27], "iscrowd": 0}, {"id": 58112, "category_id": 42, "area": 1253, "bbox": [603, 330, 69, 26], "iscrowd": 0}, {"id": 786197, "category_id": 42, "area": 4203, "bbox": [319, 373, 109, 71], "iscrowd": 0}, {"id": 2490112, "category_id": 42, "area": 943, "bbox": [475, 355, 78, 43], "iscrowd": 0}, {"id": 327445, "category_id": 42, "area": 692, "bbox": [525, 330, 39, 26], "iscrowd": 0}, {"id": 2287104, "category_id": 42, "area": 631, "bbox": [663, 343, 46, 20], "iscrowd": 0}, {"id": 59392, "category_id": 42, "area": 759, "bbox": [655, 355, 73, 19], "iscrowd": 0}, {"id": 65280, "category_id": 42, "area": 634, "bbox": [683, 335, 57, 16], "iscrowd": 0}, {"id": 62720, "category_id": 42, "area": 441, "bbox": [655, 325, 44, 14], "iscrowd": 0}, {"id": 1965845, "category_id": 42, "area": 750, "bbox": [592, 309, 70, 20], "iscrowd": 0}, {"id": 655104, "category_id": 42, "area": 222, "bbox": [658, 317, 39, 9], "iscrowd": 0}, {"id": 647693, "category_id": 42, "area": 611, "bbox": [709, 342, 47, 24], "iscrowd": 0}, {"id": 716308, "category_id": 42, "area": 241, "bbox": [544, 324, 38, 13], "iscrowd": 0}, {"id": 63232, "category_id": 42, "area": 247, "bbox": [574, 329, 41, 10], "iscrowd": 0}, {"id": 2817792, "category_id": 42, "area": 209, "bbox": [601, 324, 35, 9], "iscrowd": 0}, {"id": 2948894, "category_id": 42, "area": 163, "bbox": [575, 321, 31, 9], "iscrowd": 0}, {"id": 458496, "category_id": 42, "area": 537, "bbox": [293, 370, 36, 27], "iscrowd": 0}, {"id": 1242112, "category_id": 42, "area": 679, "bbox": [49, 326, 23, 37], "iscrowd": 0}, {"id": 2883346, "category_id": 42, "area": 655, "bbox": [722, 299, 44, 18], "iscrowd": 0}, {"id": 2813440, "category_id": 42, "area": 662, "bbox": [719, 315, 48, 18], "iscrowd": 0}, {"id": 261888, "category_id": 42, "area": 1274, "bbox": [642, 466, 53, 44], "iscrowd": 0}, {"id": 60416, "category_id": 42, "area": 1863, "bbox": [551, 481, 109, 30], "iscrowd": 0}, {"id": 3145472, "category_id": 42, "area": 924, "bbox": [656, 374, 67, 24], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 349, "bbox": [81, 391, 20, 28], "iscrowd": 0}, {"id": 8562240, "category_id": 116, "area": 1105, "bbox": [434, 342, 52, 36], "iscrowd": 0}, {"id": 12304193, "category_id": 116, "area": 918, "bbox": [479, 328, 48, 37], "iscrowd": 0}, {"id": 9083985, "category_id": 116, "area": 745, "bbox": [401, 341, 38, 30], "iscrowd": 0}, {"id": 10596417, "category_id": 116, "area": 961, "bbox": [370, 329, 40, 36], "iscrowd": 0}, {"id": 12110948, "category_id": 116, "area": 2562, "bbox": [589, 256, 53, 61], "iscrowd": 0}, {"id": 11907425, "category_id": 116, "area": 974, "bbox": [258, 347, 44, 46], "iscrowd": 0}, {"id": 10402109, "category_id": 116, "area": 878, "bbox": [222, 339, 42, 42], "iscrowd": 0}, {"id": 9748020, "category_id": 116, "area": 297, "bbox": [214, 304, 26, 20], "iscrowd": 0}, {"id": 8625729, "category_id": 116, "area": 234, "bbox": [227, 310, 20, 21], "iscrowd": 0}, {"id": 10464824, "category_id": 116, "area": 234, "bbox": [241, 310, 19, 20], "iscrowd": 0}, {"id": 11191355, "category_id": 116, "area": 199, "bbox": [252, 308, 32, 25], "iscrowd": 0}, {"id": 9226593, "category_id": 116, "area": 322, "bbox": [267, 317, 23, 17], "iscrowd": 0}, {"id": 10340648, "category_id": 116, "area": 6774, "bbox": [684, 37, 37, 292], "iscrowd": 0}, {"id": 9283418, "category_id": 116, "area": 599, "bbox": [451, 322, 45, 23], "iscrowd": 0}, {"id": 11907676, "category_id": 116, "area": 261, "bbox": [527, 313, 37, 18], "iscrowd": 0}, {"id": 11642676, "category_id": 116, "area": 347, "bbox": [560, 305, 29, 20], "iscrowd": 0}, {"id": 9221724, "category_id": 116, "area": 201, "bbox": [496, 308, 14, 20], "iscrowd": 0}, {"id": 11581232, "category_id": 116, "area": 418, "bbox": [353, 328, 28, 27], "iscrowd": 0}, {"id": 9880648, "category_id": 116, "area": 215, "bbox": [361, 309, 17, 19], "iscrowd": 0}, {"id": 11453283, "category_id": 116, "area": 319, "bbox": [256, 255, 17, 26], "iscrowd": 0}, {"id": 12229440, "category_id": 116, "area": 724, "bbox": [346, 353, 47, 26], "iscrowd": 0}, {"id": 11247916, "category_id": 116, "area": 492, "bbox": [319, 348, 35, 22], "iscrowd": 0}, {"id": 10864986, "category_id": 116, "area": 160, "bbox": [414, 326, 15, 15], "iscrowd": 0}, {"id": 9677877, "category_id": 116, "area": 271, "bbox": [433, 304, 29, 20], "iscrowd": 0}, {"id": 12369998, "category_id": 116, "area": 132, "bbox": [459, 302, 23, 19], "iscrowd": 0}, {"id": 10277705, "category_id": 116, "area": 127, "bbox": [494, 297, 18, 11], "iscrowd": 0}, {"id": 11587391, "category_id": 116, "area": 191, "bbox": [524, 297, 18, 16], "iscrowd": 0}, {"id": 10531939, "category_id": 116, "area": 174, "bbox": [518, 282, 16, 14], "iscrowd": 0}, {"id": 11185722, "category_id": 116, "area": 192, "bbox": [485, 279, 17, 12], "iscrowd": 0}, {"id": 8574270, "category_id": 116, "area": 118, "bbox": [386, 315, 15, 14], "iscrowd": 0}, {"id": 9819702, "category_id": 116, "area": 171, "bbox": [413, 302, 21, 17], "iscrowd": 0}, {"id": 10146106, "category_id": 116, "area": 163, "bbox": [415, 285, 13, 17], "iscrowd": 0}, {"id": 10862690, "category_id": 116, "area": 301, "bbox": [331, 323, 26, 25], "iscrowd": 0}, {"id": 8565296, "category_id": 116, "area": 412, "bbox": [301, 318, 39, 22], "iscrowd": 0}, {"id": 8957796, "category_id": 116, "area": 259, "bbox": [290, 316, 24, 20], "iscrowd": 0}, {"id": 10076753, "category_id": 116, "area": 221, "bbox": [238, 265, 21, 14], "iscrowd": 0}, {"id": 11392591, "category_id": 116, "area": 101, "bbox": [237, 280, 12, 13], "iscrowd": 0}, {"id": 9546082, "category_id": 116, "area": 209, "bbox": [201, 296, 24, 14], "iscrowd": 0}, {"id": 10278443, "category_id": 116, "area": 130, "bbox": [220, 275, 19, 12], "iscrowd": 0}, {"id": 10466403, "category_id": 116, "area": 136, "bbox": [359, 269, 20, 14], "iscrowd": 0}, {"id": 10273578, "category_id": 116, "area": 130, "bbox": [355, 283, 22, 13], "iscrowd": 0}, {"id": 9348397, "category_id": 116, "area": 72, "bbox": [442, 284, 15, 20], "iscrowd": 0}, {"id": 12171308, "category_id": 116, "area": 131, "bbox": [418, 272, 17, 13], "iscrowd": 0}, {"id": 10736697, "category_id": 116, "area": 166, "bbox": [225, 247, 15, 13], "iscrowd": 0}, {"id": 10527588, "category_id": 116, "area": 128, "bbox": [359, 301, 18, 10], "iscrowd": 0}, {"id": 9096759, "category_id": 116, "area": 634, "bbox": [644, 251, 27, 31], "iscrowd": 0}, {"id": 9616967, "category_id": 116, "area": 612, "bbox": [664, 254, 24, 27], "iscrowd": 0}, {"id": 11782737, "category_id": 116, "area": 781, "bbox": [720, 253, 27, 33], "iscrowd": 0}, {"id": 11901755, "category_id": 116, "area": 559, "bbox": [242, 348, 25, 40], "iscrowd": 0}, {"id": 8629851, "category_id": 116, "area": 435, "bbox": [568, 281, 33, 39], "iscrowd": 0}, {"id": 10470983, "category_id": 116, "area": 593, "bbox": [276, 360, 45, 38], "iscrowd": 0}, {"id": 8694598, "category_id": 116, "area": 306, "bbox": [284, 299, 31, 19], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 4328, "bbox": [514, 98, 53, 116], "iscrowd": 0}, {"id": 1500665, "category_id": 121, "area": 1974, "bbox": [348, 126, 31, 111], "iscrowd": 0}, {"id": 635109, "category_id": 121, "area": 679, "bbox": [283, 151, 23, 39], "iscrowd": 0}, {"id": 578815, "category_id": 121, "area": 3235, "bbox": [727, 61, 37, 133], "iscrowd": 0}, {"id": 1298425, "category_id": 121, "area": 226, "bbox": [560, 296, 23, 16], "iscrowd": 0}, {"id": 58111, "category_id": 121, "area": 812, "bbox": [188, 294, 30, 46], "iscrowd": 0}, {"id": 248566, "category_id": 121, "area": 446, "bbox": [87, 188, 14, 46], "iscrowd": 0}, {"id": 54774, "category_id": 121, "area": 137, "bbox": [56, 197, 9, 20], "iscrowd": 0}, {"id": 1495039, "category_id": 121, "area": 258, "bbox": [227, 163, 16, 31], "iscrowd": 0}, {"id": 55012, "category_id": 121, "area": 1865, "bbox": [327, 126, 28, 106], "iscrowd": 0}, {"id": 1358073, "category_id": 121, "area": 5268, "bbox": [475, 91, 52, 145], "iscrowd": 0}, {"id": 59903, "category_id": 121, "area": 2809, "bbox": [244, 147, 37, 97], "iscrowd": 0}, {"id": 111100, "category_id": 121, "area": 1281, "bbox": [424, 99, 17, 119], "iscrowd": 0}, {"id": 1304303, "category_id": 121, "area": 6771, "bbox": [557, 67, 62, 181], "iscrowd": 0}, {"id": 48127, "category_id": 121, "area": 270, "bbox": [78, 214, 11, 31], "iscrowd": 0}, {"id": 56812, "category_id": 121, "area": 6865, "bbox": [628, 65, 61, 165], "iscrowd": 0}, {"id": 709612, "category_id": 121, "area": 171, "bbox": [256, 309, 25, 12], "iscrowd": 0}, {"id": 571135, "category_id": 121, "area": 149, "bbox": [100, 189, 8, 37], "iscrowd": 0}, {"id": 50923, "category_id": 121, "area": 656, "bbox": [475, 409, 57, 22], "iscrowd": 0}, {"id": 1106687, "category_id": 121, "area": 600, "bbox": [532, 364, 53, 23], "iscrowd": 0}, {"id": 1429754, "category_id": 121, "area": 475, "bbox": [584, 376, 47, 19], "iscrowd": 0}, {"id": 58616, "category_id": 121, "area": 594, "bbox": [631, 384, 60, 21], "iscrowd": 0}, {"id": 1501951, "category_id": 121, "area": 984, "bbox": [601, 439, 66, 25], "iscrowd": 0}, {"id": 187641, "category_id": 121, "area": 735, "bbox": [506, 481, 56, 25], "iscrowd": 0}, {"id": 1760501, "category_id": 121, "area": 752, "bbox": [454, 463, 60, 23], "iscrowd": 0}, {"id": 46847, "category_id": 121, "area": 713, "bbox": [415, 448, 54, 21], "iscrowd": 0}, {"id": 45823, "category_id": 121, "area": 515, "bbox": [529, 429, 56, 19], "iscrowd": 0}, {"id": 59366, "category_id": 121, "area": 139, "bbox": [443, 284, 13, 14], "iscrowd": 0}, {"id": 59884, "category_id": 121, "area": 111, "bbox": [464, 305, 16, 11], "iscrowd": 0}, {"id": 55527, "category_id": 121, "area": 323, "bbox": [482, 329, 37, 13], "iscrowd": 0}, {"id": 56809, "category_id": 121, "area": 138, "bbox": [443, 344, 28, 11], "iscrowd": 0}, {"id": 45799, "category_id": 121, "area": 650, "bbox": [489, 358, 57, 20], "iscrowd": 0}, {"id": 1357557, "category_id": 121, "area": 135, "bbox": [407, 345, 25, 7], "iscrowd": 0}, {"id": 48383, "category_id": 121, "area": 155, "bbox": [531, 313, 24, 9], "iscrowd": 0}, {"id": 1759999, "category_id": 121, "area": 1370, "bbox": [411, 103, 17, 136], "iscrowd": 0}, {"id": 1689854, "category_id": 121, "area": 724, "bbox": [187, 162, 17, 76], "iscrowd": 0}, {"id": 1948156, "category_id": 121, "area": 85, "bbox": [82, 201, 9, 14], "iscrowd": 0}, {"id": 1101823, "category_id": 121, "area": 213, "bbox": [281, 363, 28, 12], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 47, "bbox": [280, 401, 14, 8], "iscrowd": 0}, {"id": 13890055, "category_id": 143, "area": 69, "bbox": [260, 392, 16, 7], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 100, "bbox": [283, 391, 8, 14], "iscrowd": 0}, {"id": 13088296, "category_id": 148, "area": 89, "bbox": [265, 383, 8, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00000112", "file_name": "ADE_val_00000112.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 4584, "bbox": [0, 58, 255, 32], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 17029, "bbox": [2, 1, 254, 79], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 23965, "bbox": [3, 85, 253, 137], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 986, "bbox": [30, 190, 218, 48], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 17368, "bbox": [0, 85, 256, 171], "iscrowd": 0}]}, {"image_id": "ADE_val_00000113", "file_name": "ADE_val_00000113.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 37059, "bbox": [2, 1, 252, 163], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 4225, "bbox": [52, 158, 202, 39], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 15961, "bbox": [2, 165, 252, 90], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 3428, "bbox": [2, 115, 173, 51], "iscrowd": 0}]}, {"image_id": "ADE_val_00000114", "file_name": "ADE_val_00000114.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 129, "bbox": [48, 96, 50, 8], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 24853, "bbox": [2, 1, 254, 111], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 3449, "bbox": [2, 68, 185, 55], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 8533, "bbox": [52, 110, 204, 76], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 76, "bbox": [113, 135, 13, 9], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 26504, "bbox": [2, 116, 253, 139], "iscrowd": 0}, {"id": 60415, "category_id": 104, "area": 25, "bbox": [206, 108, 10, 3], "iscrowd": 0}]}, {"image_id": "ADE_val_00000115", "file_name": "ADE_val_00000115.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 115224, "bbox": [0, 1, 599, 379], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 70475, "bbox": [2, 262, 598, 187], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 35788, "bbox": [63, 0, 197, 186], "iscrowd": 0}, {"id": 13226743, "category_id": 28, "area": 20811, "bbox": [307, 0, 118, 179], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2691, "bbox": [125, 222, 122, 48], "iscrowd": 0}, {"id": 16755968, "category_id": 48, "area": 1640, "bbox": [354, 207, 93, 37], "iscrowd": 0}, {"id": 15566848, "category_id": 48, "area": 1233, "bbox": [455, 198, 81, 31], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 287, "bbox": [442, 193, 11, 31], "iscrowd": 0}, {"id": 2352896, "category_id": 99, "area": 299, "bbox": [342, 286, 12, 32], "iscrowd": 0}, {"id": 1373696, "category_id": 99, "area": 549, "bbox": [268, 204, 15, 45], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 3068, "bbox": [24, 346, 121, 42], "iscrowd": 0}, {"id": 65329, "category_id": 138, "area": 1279, "bbox": [301, 298, 81, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00000116", "file_name": "ADE_val_00000116.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 16852, "bbox": [0, 0, 272, 176], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7496, "bbox": [0, 115, 273, 89], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1635, "bbox": [128, 0, 145, 28], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1965, "bbox": [5, 106, 80, 94], "iscrowd": 0}, {"id": 5243058, "category_id": 13, "area": 6620, "bbox": [67, 49, 71, 155], "iscrowd": 0}, {"id": 5906840, "category_id": 13, "area": 1356, "bbox": [184, 58, 26, 93], "iscrowd": 0}, {"id": 3609778, "category_id": 13, "area": 632, "bbox": [199, 80, 40, 63], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 3949, "bbox": [0, 42, 53, 80], "iscrowd": 0}, {"id": 15199686, "category_id": 28, "area": 1142, "bbox": [65, 58, 33, 49], "iscrowd": 0}, {"id": 15846086, "category_id": 28, "area": 3116, "bbox": [120, 43, 62, 56], "iscrowd": 0}, {"id": 15259121, "category_id": 28, "area": 1153, "bbox": [219, 48, 32, 41], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1018, "bbox": [2, 125, 43, 31], "iscrowd": 0}, {"id": 16751887, "category_id": 48, "area": 265, "bbox": [174, 105, 24, 15], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 396, "bbox": [67, 38, 37, 18], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 2298, "bbox": [27, 153, 71, 50], "iscrowd": 0}, {"id": 16711719, "category_id": 76, "area": 1594, "bbox": [200, 107, 46, 67], "iscrowd": 0}, {"id": 16711708, "category_id": 76, "area": 819, "bbox": [246, 101, 27, 53], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 388, "bbox": [209, 0, 56, 13], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 168, "bbox": [167, 24, 21, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00000117", "file_name": "ADE_val_00000117.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 54244, "bbox": [1, 1, 681, 460], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 45909, "bbox": [1, 413, 576, 99], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 95559, "bbox": [1, 1, 671, 194], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3001, "bbox": [607, 145, 75, 90], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 3991, "bbox": [380, 212, 92, 48], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 19245, "bbox": [26, 57, 248, 85], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 60896, "bbox": [20, 202, 294, 230], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 25447, "bbox": [364, 247, 218, 264], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 806, "bbox": [655, 96, 27, 47], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 2106, "bbox": [95, 454, 48, 56], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3863, "bbox": [480, 333, 78, 69], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 30138, "bbox": [576, 212, 106, 300], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 454, "bbox": [484, 385, 66, 33], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 380, "bbox": [670, 178, 12, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00000118", "file_name": "ADE_val_00000118.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 117803, "bbox": [0, 0, 724, 381], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 97328, "bbox": [0, 301, 724, 210], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 10835, "bbox": [50, 0, 674, 47], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 10211, "bbox": [67, 373, 290, 53], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 9480, "bbox": [127, 45, 47, 258], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 12241, "bbox": [172, 195, 247, 178], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 43740, "bbox": [504, 146, 218, 241], "iscrowd": 0}, {"id": 16718839, "category_id": 11, "area": 5817, "bbox": [189, 210, 102, 89], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4315, "bbox": [415, 252, 73, 74], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 426, "bbox": [385, 190, 22, 21], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 20241, "bbox": [4, 150, 154, 212], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 817, "bbox": [458, 219, 25, 39], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 174, "bbox": [467, 296, 13, 16], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 2013, "bbox": [304, 228, 89, 29], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 6348, "bbox": [32, 193, 112, 151], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 34, "bbox": [240, 41, 13, 4], "iscrowd": 0}, {"id": 39679, "category_id": 83, "area": 42, "bbox": [374, 37, 15, 3], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 4655, "bbox": [540, 167, 84, 61], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 778, "bbox": [651, 97, 34, 50], "iscrowd": 0}]}, {"image_id": "ADE_val_00000119", "file_name": "ADE_val_00000119.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 148688, "bbox": [1, 0, 681, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7153, "bbox": [157, 464, 241, 47], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 56055, "bbox": [263, 247, 402, 265], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 20910, "bbox": [155, 45, 180, 240], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 5636, "bbox": [165, 169, 50, 123], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 21028, "bbox": [255, 33, 99, 366], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 75250, "bbox": [0, 16, 157, 495], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1343, "bbox": [173, 334, 52, 32], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 6096, "bbox": [309, 333, 134, 64], "iscrowd": 0}, {"id": 15989760, "category_id": 58, "area": 4493, "bbox": [407, 317, 113, 58], "iscrowd": 0}]}, {"image_id": "ADE_val_00000120", "file_name": "ADE_val_00000120.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 131864, "bbox": [0, 0, 681, 511], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 88153, "bbox": [38, 166, 644, 345], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 30303, "bbox": [1, 288, 214, 223], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 7195, "bbox": [266, 306, 177, 84], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 15077, "bbox": [567, 0, 115, 144], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 20707, "bbox": [0, 12, 102, 218], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 5152, "bbox": [104, 190, 74, 106], "iscrowd": 0}, {"id": 63990, "category_id": 37, "area": 6039, "bbox": [336, 167, 83, 159], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 12944, "bbox": [503, 276, 162, 138], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 12197, "bbox": [435, 227, 198, 134], "iscrowd": 0}, {"id": 16764702, "category_id": 58, "area": 5770, "bbox": [630, 241, 50, 158], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 7603, "bbox": [0, 223, 76, 113], "iscrowd": 0}]}, {"image_id": "ADE_val_00000121", "file_name": "ADE_val_00000121.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 55003, "bbox": [1, 41, 767, 241], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 43183, "bbox": [1, 279, 456, 233], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 62685, "bbox": [1, 0, 767, 149], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3903, "bbox": [234, 178, 102, 117], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 2455, "bbox": [6, 98, 169, 32], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 13815, "bbox": [44, 170, 261, 162], "iscrowd": 0}, {"id": 15473101, "category_id": 8, "area": 56533, "bbox": [259, 220, 508, 286], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4765, "bbox": [111, 127, 64, 81], "iscrowd": 0}, {"id": 14216909, "category_id": 9, "area": 8190, "bbox": [5, 117, 90, 110], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3165, "bbox": [450, 212, 140, 45], "iscrowd": 0}, {"id": 16388332, "category_id": 11, "area": 2279, "bbox": [486, 99, 44, 57], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4511, "bbox": [365, 129, 45, 114], "iscrowd": 0}, {"id": 2089984, "category_id": 15, "area": 18950, "bbox": [622, 91, 124, 186], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1332, "bbox": [273, 233, 45, 49], "iscrowd": 0}, {"id": 5838591, "category_id": 16, "area": 10938, "bbox": [596, 419, 172, 93], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 2791, "bbox": [175, 103, 29, 106], "iscrowd": 0}, {"id": 345343, "category_id": 19, "area": 2260, "bbox": [0, 79, 22, 210], "iscrowd": 0}, {"id": 18685, "category_id": 19, "area": 1112, "bbox": [425, 132, 15, 98], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 14197, "bbox": [451, 350, 150, 162], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2542, "bbox": [504, 154, 57, 48], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 25831, "bbox": [0, 305, 180, 207], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 305, "bbox": [513, 202, 20, 19], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 784, "bbox": [217, 177, 38, 34], "iscrowd": 0}, {"id": 16773898, "category_id": 58, "area": 870, "bbox": [237, 180, 49, 34], "iscrowd": 0}, {"id": 15981312, "category_id": 58, "area": 7592, "bbox": [698, 221, 69, 156], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 187, "bbox": [474, 194, 23, 12], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 733, "bbox": [324, 0, 43, 23], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 237, "bbox": [245, 292, 21, 15], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 354, "bbox": [202, 139, 27, 23], "iscrowd": 0}, {"id": 16716544, "category_id": 135, "area": 524, "bbox": [250, 132, 41, 30], "iscrowd": 0}, {"id": 16720128, "category_id": 135, "area": 1490, "bbox": [720, 82, 47, 57], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 85, "bbox": [483, 205, 9, 11], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 1297, "bbox": [210, 35, 114, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00000122", "file_name": "ADE_val_00000122.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 111865, "bbox": [0, 0, 682, 402], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6778, "bbox": [0, 390, 682, 122], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 138502, "bbox": [44, 211, 639, 301], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 23388, "bbox": [474, 22, 149, 196], "iscrowd": 0}, {"id": 15529182, "category_id": 9, "area": 25786, "bbox": [2, 6, 141, 196], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1460, "bbox": [311, 260, 92, 54], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 10971, "bbox": [404, 26, 78, 236], "iscrowd": 0}, {"id": 9189, "category_id": 19, "area": 17586, "bbox": [587, 12, 96, 252], "iscrowd": 0}, {"id": 1658083, "category_id": 19, "area": 11097, "bbox": [141, 19, 49, 246], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 605, "bbox": [330, 258, 46, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000123", "file_name": "ADE_val_00000123.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18863, "bbox": [0, 0, 256, 202], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 11109, "bbox": [0, 185, 256, 71], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3716, "bbox": [2, 0, 195, 37], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 12411, "bbox": [57, 137, 180, 95], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 8570, "bbox": [136, 22, 87, 113], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 2336, "bbox": [115, 30, 27, 116], "iscrowd": 0}, {"id": 1974527, "category_id": 19, "area": 3745, "bbox": [218, 1, 35, 146], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3060, "bbox": [0, 134, 61, 99], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 431, "bbox": [0, 57, 17, 41], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 378, "bbox": [16, 90, 17, 50], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 294, "bbox": [58, 139, 30, 14], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 222, "bbox": [1, 70, 13, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00000124", "file_name": "ADE_val_00000124.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 130403, "bbox": [1, 1, 681, 485], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2562, "bbox": [582, 482, 99, 29], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 14270, "bbox": [162, 0, 520, 45], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 85564, "bbox": [1, 256, 604, 256], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 44393, "bbox": [305, 59, 151, 311], "iscrowd": 0}, {"id": 15461596, "category_id": 9, "area": 55021, "bbox": [488, 47, 178, 340], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1429, "bbox": [184, 321, 82, 31], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 394, "bbox": [199, 273, 36, 54], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 7812, "bbox": [37, 302, 154, 79], "iscrowd": 0}, {"id": 15781120, "category_id": 58, "area": 3353, "bbox": [2, 332, 78, 67], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 130, "bbox": [181, 317, 22, 8], "iscrowd": 0}, {"id": 48639, "category_id": 68, "area": 322, "bbox": [189, 331, 50, 10], "iscrowd": 0}, {"id": 1483519, "category_id": 68, "area": 291, "bbox": [190, 320, 47, 12], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 231, "bbox": [247, 8, 22, 12], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 819, "bbox": [123, 172, 45, 32], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 308, "bbox": [237, 309, 16, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00000125", "file_name": "ADE_val_00000125.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 57888, "bbox": [0, 0, 767, 407], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 41655, "bbox": [230, 307, 536, 203], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 129532, "bbox": [53, 0, 714, 233], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 9543, "bbox": [326, 329, 202, 107], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 53085, "bbox": [2, 291, 546, 220], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 795, "bbox": [239, 231, 38, 23], "iscrowd": 0}, {"id": 16381940, "category_id": 9, "area": 13462, "bbox": [2, 110, 93, 218], "iscrowd": 0}, {"id": 13299913, "category_id": 9, "area": 3280, "bbox": [705, 221, 61, 56], "iscrowd": 0}, {"id": 15662574, "category_id": 9, "area": 4684, "bbox": [586, 227, 105, 50], "iscrowd": 0}, {"id": 16768975, "category_id": 9, "area": 2673, "bbox": [502, 234, 73, 40], "iscrowd": 0}, {"id": 14082509, "category_id": 9, "area": 3481, "bbox": [419, 235, 67, 72], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 848, "bbox": [272, 223, 15, 100], "iscrowd": 0}, {"id": 5236242, "category_id": 15, "area": 5715, "bbox": [173, 218, 62, 119], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 7960, "bbox": [0, 454, 180, 56], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 965, "bbox": [328, 235, 32, 32], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 1421, "bbox": [304, 290, 49, 40], "iscrowd": 0}, {"id": 12713728, "category_id": 31, "area": 1150, "bbox": [362, 287, 43, 38], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 194, "bbox": [316, 268, 16, 14], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 22149, "bbox": [449, 275, 318, 106], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 795, "bbox": [169, 300, 37, 47], "iscrowd": 0}, {"id": 46825, "category_id": 40, "area": 1169, "bbox": [147, 310, 55, 58], "iscrowd": 0}, {"id": 2271999, "category_id": 40, "area": 6586, "bbox": [98, 325, 106, 111], "iscrowd": 0}, {"id": 42751, "category_id": 40, "area": 629, "bbox": [207, 314, 22, 43], "iscrowd": 0}, {"id": 1359103, "category_id": 40, "area": 1640, "bbox": [189, 347, 46, 61], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 8771, "bbox": [37, 308, 108, 159], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 2296, "bbox": [27, 244, 73, 56], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 157, "bbox": [99, 152, 20, 10], "iscrowd": 0}, {"id": 51437, "category_id": 83, "area": 294, "bbox": [208, 94, 30, 13], "iscrowd": 0}, {"id": 41703, "category_id": 83, "area": 147, "bbox": [477, 133, 20, 11], "iscrowd": 0}, {"id": 48893, "category_id": 83, "area": 72, "bbox": [230, 175, 14, 6], "iscrowd": 0}, {"id": 568055, "category_id": 83, "area": 66, "bbox": [384, 185, 12, 8], "iscrowd": 0}, {"id": 313855, "category_id": 83, "area": 29, "bbox": [347, 207, 8, 5], "iscrowd": 0}, {"id": 639461, "category_id": 83, "area": 20, "bbox": [474, 221, 6, 5], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 899, "bbox": [44, 298, 40, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000126", "file_name": "ADE_val_00000126.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 135044, "bbox": [0, 0, 683, 408], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17558, "bbox": [445, 384, 237, 127], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1906, "bbox": [186, 0, 178, 20], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 75269, "bbox": [0, 347, 550, 164], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 23727, "bbox": [59, 58, 128, 226], "iscrowd": 0}, {"id": 13301740, "category_id": 9, "area": 29605, "bbox": [536, 4, 146, 239], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 6668, "bbox": [223, 43, 45, 233], "iscrowd": 0}, {"id": 1067236, "category_id": 19, "area": 9478, "bbox": [444, 12, 55, 264], "iscrowd": 0}, {"id": 607743, "category_id": 19, "area": 16890, "bbox": [6, 20, 89, 353], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 7649, "bbox": [241, 266, 122, 102], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 6292, "bbox": [325, 158, 72, 110], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 4314, "bbox": [91, 314, 157, 44], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 6751, "bbox": [296, 258, 153, 123], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1728, "bbox": [377, 190, 51, 81], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 421, "bbox": [305, 225, 14, 44], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 2247, "bbox": [566, 180, 89, 71], "iscrowd": 0}]}, {"image_id": "ADE_val_00000127", "file_name": "ADE_val_00000127.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 64563, "bbox": [0, 41, 773, 378], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 903, "bbox": [622, 233, 92, 18], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 4069, "bbox": [621, 193, 129, 55], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 44841, "bbox": [0, 327, 760, 185], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 413, "bbox": [645, 220, 105, 26], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 68858, "bbox": [0, 0, 769, 151], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 1085, "bbox": [622, 244, 129, 15], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 7517, "bbox": [621, 257, 130, 89], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 686, "bbox": [644, 271, 70, 24], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 96445, "bbox": [144, 222, 471, 290], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 10182, "bbox": [2, 126, 97, 181], "iscrowd": 0}, {"id": 13823470, "category_id": 9, "area": 2427, "bbox": [396, 186, 45, 92], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3384, "bbox": [741, 222, 32, 176], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 15544, "bbox": [519, 156, 103, 221], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 770, "bbox": [407, 276, 67, 21], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 5012, "bbox": [767, 0, 17, 373], "iscrowd": 0}, {"id": 1787366, "category_id": 19, "area": 6740, "bbox": [2, 77, 114, 108], "iscrowd": 0}, {"id": 20201, "category_id": 19, "area": 2109, "bbox": [391, 157, 63, 55], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 438, "bbox": [722, 282, 28, 43], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1164, "bbox": [464, 193, 30, 40], "iscrowd": 0}, {"id": 2687231, "category_id": 23, "area": 10930, "bbox": [218, 120, 124, 103], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 5010, "bbox": [0, 162, 74, 159], "iscrowd": 0}, {"id": 1572814, "category_id": 37, "area": 1337, "bbox": [414, 206, 44, 80], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 4022, "bbox": [744, 357, 40, 153], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1334, "bbox": [255, 262, 49, 45], "iscrowd": 0}, {"id": 57343, "category_id": 40, "area": 1829, "bbox": [288, 258, 57, 51], "iscrowd": 0}, {"id": 56300, "category_id": 40, "area": 2002, "bbox": [332, 258, 68, 45], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 393, "bbox": [54, 300, 41, 12], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 13261, "bbox": [0, 309, 100, 149], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 3599, "bbox": [182, 258, 123, 53], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 9157, "bbox": [319, 1, 274, 110], "iscrowd": 0}]}, {"image_id": "ADE_val_00000128", "file_name": "ADE_val_00000128.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 99122, "bbox": [0, 0, 683, 442], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 35771, "bbox": [0, 362, 422, 149], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 81764, "bbox": [0, 0, 531, 283], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 15443, "bbox": [376, 218, 307, 293], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 7957, "bbox": [1, 298, 160, 172], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 6135, "bbox": [1, 321, 118, 190], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 30012, "bbox": [177, 160, 142, 283], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 14776, "bbox": [329, 226, 144, 113], "iscrowd": 0}]}, {"image_id": "ADE_val_00000129", "file_name": "ADE_val_00000129.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 71781, "bbox": [54, 0, 695, 404], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 68217, "bbox": [83, 302, 666, 194], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 59635, "bbox": [157, 0, 592, 147], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 33390, "bbox": [264, 247, 258, 217], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3325, "bbox": [425, 171, 41, 108], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 70990, "bbox": [2, 0, 170, 495], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 995, "bbox": [408, 277, 55, 28], "iscrowd": 0}, {"id": 6422770, "category_id": 16, "area": 2603, "bbox": [223, 289, 56, 56], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 10390, "bbox": [171, 75, 63, 306], "iscrowd": 0}, {"id": 14844, "category_id": 19, "area": 2654, "bbox": [472, 145, 30, 116], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1990, "bbox": [465, 259, 48, 61], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 30232, "bbox": [603, 157, 146, 246], "iscrowd": 0}, {"id": 14466794, "category_id": 28, "area": 1622, "bbox": [375, 192, 45, 49], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1216, "bbox": [219, 220, 39, 77], "iscrowd": 0}, {"id": 2424830, "category_id": 37, "area": 906, "bbox": [423, 222, 34, 57], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1093, "bbox": [335, 264, 48, 32], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 1163, "bbox": [299, 261, 52, 35], "iscrowd": 0}, {"id": 16768013, "category_id": 58, "area": 660, "bbox": [352, 257, 48, 31], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 2670, "bbox": [366, 43, 158, 80], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 84, "bbox": [419, 271, 9, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000130", "file_name": "ADE_val_00000130.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 148276, "bbox": [2, 0, 766, 460], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 32837, "bbox": [0, 336, 768, 173], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 25478, "bbox": [31, 0, 737, 102], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 29034, "bbox": [2, 77, 237, 305], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 68774, "bbox": [239, 263, 435, 248], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 36601, "bbox": [228, 50, 192, 222], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 273, "bbox": [449, 309, 33, 23], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 19798, "bbox": [545, 191, 162, 220], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1930, "bbox": [431, 235, 62, 76], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1248, "bbox": [305, 301, 41, 38], "iscrowd": 0}, {"id": 45556, "category_id": 40, "area": 726, "bbox": [395, 298, 36, 35], "iscrowd": 0}, {"id": 828927, "category_id": 40, "area": 1153, "bbox": [349, 315, 58, 25], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 826, "bbox": [584, 305, 70, 16], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 3976, "bbox": [257, 262, 85, 73], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 753, "bbox": [634, 212, 28, 32], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 6119, "bbox": [2, 429, 119, 80], "iscrowd": 0}, {"id": 65347, "category_id": 113, "area": 6226, "bbox": [2, 380, 110, 85], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 1977, "bbox": [96, 375, 43, 65], "iscrowd": 0}]}, {"image_id": "ADE_val_00000131", "file_name": "ADE_val_00000131.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 30645, "bbox": [0, 0, 255, 255], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 16915, "bbox": [0, 140, 248, 115], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4391, "bbox": [165, 185, 70, 70], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 8881, "bbox": [0, 17, 60, 163], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 967, "bbox": [155, 30, 18, 58], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 969, "bbox": [61, 157, 66, 27], "iscrowd": 0}, {"id": 16774916, "category_id": 58, "area": 1573, "bbox": [98, 171, 80, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00000132", "file_name": "ADE_val_00000132.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 137741, "bbox": [1, 1, 767, 408], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 1120, "bbox": [464, 163, 31, 39], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 58214, "bbox": [0, 366, 768, 145], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1644, "bbox": [465, 238, 30, 58], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 51843, "bbox": [0, 0, 765, 130], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 1192, "bbox": [465, 200, 31, 44], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 5825, "bbox": [591, 204, 88, 131], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 43817, "bbox": [45, 169, 374, 276], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 13205, "bbox": [1, 316, 128, 121], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 7833, "bbox": [613, 330, 141, 138], "iscrowd": 0}, {"id": 12738, "category_id": 20, "area": 18347, "bbox": [544, 354, 176, 157], "iscrowd": 0}, {"id": 2187974, "category_id": 20, "area": 2300, "bbox": [693, 304, 75, 83], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1558, "bbox": [269, 213, 59, 91], "iscrowd": 0}, {"id": 982990, "category_id": 37, "area": 3583, "bbox": [12, 220, 61, 101], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 1033, "bbox": [465, 295, 31, 66], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1115, "bbox": [212, 279, 48, 36], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 3000, "bbox": [87, 263, 80, 64], "iscrowd": 0}, {"id": 16765184, "category_id": 58, "area": 768, "bbox": [144, 255, 63, 19], "iscrowd": 0}, {"id": 14939920, "category_id": 58, "area": 561, "bbox": [204, 261, 40, 18], "iscrowd": 0}, {"id": 16776989, "category_id": 58, "area": 2502, "bbox": [151, 270, 77, 48], "iscrowd": 0}, {"id": 16574208, "category_id": 58, "area": 589, "bbox": [245, 277, 37, 33], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 17802, "bbox": [285, 293, 199, 163], "iscrowd": 0}]}, {"image_id": "ADE_val_00000133", "file_name": "ADE_val_00000133.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 98025, "bbox": [2, 12, 509, 486], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 34815, "bbox": [0, 492, 511, 188], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 23431, "bbox": [0, 0, 511, 95], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 140620, "bbox": [20, 0, 491, 681], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1064, "bbox": [333, 341, 80, 29], "iscrowd": 0}, {"id": 4459775, "category_id": 16, "area": 813, "bbox": [0, 382, 12, 153], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 26354, "bbox": [99, 59, 135, 212], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 10560, "bbox": [46, 287, 169, 87], "iscrowd": 0}, {"id": 16252694, "category_id": 58, "area": 5618, "bbox": [196, 277, 123, 86], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 2908, "bbox": [317, 0, 193, 65], "iscrowd": 0}]}, {"image_id": "ADE_val_00000134", "file_name": "ADE_val_00000134.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 177352, "bbox": [0, 0, 682, 510], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 36440, "bbox": [133, 292, 549, 219], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 49475, "bbox": [1, 0, 167, 345], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 7544, "bbox": [431, 326, 171, 105], "iscrowd": 0}, {"id": 7343338, "category_id": 16, "area": 6804, "bbox": [224, 390, 192, 74], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 35306, "bbox": [126, 1, 106, 488], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1172, "bbox": [0, 488, 76, 23], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 9577, "bbox": [502, 219, 101, 142], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2286, "bbox": [465, 257, 55, 86], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 6182, "bbox": [609, 358, 71, 140], "iscrowd": 0}, {"id": 1759999, "category_id": 40, "area": 4997, "bbox": [571, 341, 110, 131], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 279, "bbox": [522, 291, 25, 21], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1029, "bbox": [339, 371, 45, 35], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 463, "bbox": [654, 127, 27, 26], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 292, "bbox": [526, 315, 15, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00000135", "file_name": "ADE_val_00000135.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 95365, "bbox": [0, 0, 772, 435], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 72837, "bbox": [0, 347, 771, 164], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 44596, "bbox": [166, 0, 606, 108], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1227, "bbox": [22, 231, 56, 40], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 83425, "bbox": [150, 121, 463, 390], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 8849, "bbox": [435, 132, 71, 159], "iscrowd": 0}, {"id": 16502783, "category_id": 9, "area": 24557, "bbox": [540, 104, 188, 202], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 23314, "bbox": [2, 288, 184, 168], "iscrowd": 0}, {"id": 5047277, "category_id": 16, "area": 419, "bbox": [403, 268, 36, 17], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 9648, "bbox": [418, 77, 351, 145], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1273, "bbox": [506, 249, 63, 32], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 8761, "bbox": [622, 246, 143, 129], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1374, "bbox": [731, 181, 41, 65], "iscrowd": 0}, {"id": 1310673, "category_id": 37, "area": 2279, "bbox": [64, 192, 59, 102], "iscrowd": 0}, {"id": 1900514, "category_id": 37, "area": 576, "bbox": [391, 218, 28, 50], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1329, "bbox": [687, 256, 67, 47], "iscrowd": 0}, {"id": 383999, "category_id": 40, "area": 1198, "bbox": [313, 244, 51, 53], "iscrowd": 0}, {"id": 251118, "category_id": 40, "area": 1181, "bbox": [338, 264, 52, 33], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1142, "bbox": [106, 255, 35, 38], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 1460, "bbox": [188, 245, 35, 70], "iscrowd": 0}, {"id": 15391496, "category_id": 58, "area": 1877, "bbox": [207, 242, 53, 58], "iscrowd": 0}, {"id": 16771328, "category_id": 58, "area": 2298, "bbox": [247, 246, 63, 53], "iscrowd": 0}, {"id": 15985408, "category_id": 58, "area": 1093, "bbox": [291, 242, 40, 57], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 772, "bbox": [31, 279, 49, 19], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 344, "bbox": [43, 263, 25, 17], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 1772, "bbox": [120, 203, 37, 85], "iscrowd": 0}]}, {"image_id": "ADE_val_00000136", "file_name": "ADE_val_00000136.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 8942, "bbox": [0, 0, 255, 141], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 20386, "bbox": [0, 139, 255, 116], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 4565, "bbox": [0, 120, 80, 84], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5669, "bbox": [16, 0, 63, 97], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7002, "bbox": [147, 84, 108, 111], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 3527, "bbox": [139, 1, 38, 139], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1994, "bbox": [78, 1, 23, 94], "iscrowd": 0}, {"id": 466936, "category_id": 19, "area": 1868, "bbox": [0, 0, 20, 106], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 4588, "bbox": [183, 0, 72, 68], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 3065, "bbox": [34, 92, 75, 82], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 2870, "bbox": [187, 125, 49, 71], "iscrowd": 0}]}, {"image_id": "ADE_val_00000137", "file_name": "ADE_val_00000137.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 38520, "bbox": [0, 0, 450, 222], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10260, "bbox": [152, 197, 201, 103], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 19213, "bbox": [53, 0, 341, 86], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 3945, "bbox": [213, 150, 133, 69], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2344, "bbox": [134, 56, 35, 87], "iscrowd": 0}, {"id": 14670333, "category_id": 9, "area": 6963, "bbox": [0, 0, 44, 176], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2202, "bbox": [104, 124, 50, 66], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3599, "bbox": [93, 183, 85, 68], "iscrowd": 0}, {"id": 5898483, "category_id": 16, "area": 669, "bbox": [336, 179, 21, 34], "iscrowd": 0}, {"id": 4328421, "category_id": 16, "area": 397, "bbox": [363, 204, 53, 10], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 992, "bbox": [117, 49, 16, 75], "iscrowd": 0}, {"id": 20735, "category_id": 19, "area": 2274, "bbox": [182, 72, 23, 126], "iscrowd": 0}, {"id": 1654271, "category_id": 19, "area": 3992, "bbox": [42, 0, 30, 149], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4201, "bbox": [29, 147, 74, 88], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 855, "bbox": [217, 118, 26, 33], "iscrowd": 0}, {"id": 1516773, "category_id": 23, "area": 514, "bbox": [376, 111, 17, 32], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 10366, "bbox": [335, 178, 115, 122], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 12733, "bbox": [0, 214, 279, 86], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 115, "bbox": [109, 115, 18, 9], "iscrowd": 0}, {"id": 1371361, "category_id": 37, "area": 599, "bbox": [390, 143, 22, 61], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 523, "bbox": [312, 151, 24, 27], "iscrowd": 0}, {"id": 112611, "category_id": 40, "area": 508, "bbox": [289, 150, 23, 25], "iscrowd": 0}, {"id": 2077695, "category_id": 40, "area": 300, "bbox": [273, 150, 17, 24], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 3024, "bbox": [228, 228, 74, 71], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1514, "bbox": [127, 126, 65, 51], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 845, "bbox": [236, 231, 63, 25], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 1178, "bbox": [202, 186, 52, 31], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 235, "bbox": [344, 122, 12, 25], "iscrowd": 0}, {"id": 16721680, "category_id": 135, "area": 144, "bbox": [265, 130, 10, 19], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 353, "bbox": [152, 169, 15, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00000138", "file_name": "ADE_val_00000138.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 67233, "bbox": [1, 190, 510, 440], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 129294, "bbox": [1, 1, 510, 358], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 21542, "bbox": [215, 659, 268, 108], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 29532, "bbox": [0, 466, 316, 297], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 25421, "bbox": [228, 233, 265, 139], "iscrowd": 0}, {"id": 16772809, "category_id": 9, "area": 19012, "bbox": [392, 365, 107, 273], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 34900, "bbox": [230, 374, 164, 254], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 451, "bbox": [121, 542, 45, 19], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1917, "bbox": [167, 435, 38, 53], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 7296, "bbox": [405, 513, 104, 153], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1233, "bbox": [104, 472, 42, 83], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1013, "bbox": [78, 545, 51, 31], "iscrowd": 0}, {"id": 1949695, "category_id": 40, "area": 1000, "bbox": [29, 553, 47, 32], "iscrowd": 0}, {"id": 1362431, "category_id": 40, "area": 582, "bbox": [24, 515, 73, 16], "iscrowd": 0}, {"id": 1814243, "category_id": 40, "area": 301, "bbox": [1, 518, 22, 18], "iscrowd": 0}, {"id": 52735, "category_id": 40, "area": 566, "bbox": [38, 521, 69, 18], "iscrowd": 0}, {"id": 48383, "category_id": 40, "area": 287, "bbox": [1, 530, 38, 13], "iscrowd": 0}, {"id": 2206975, "category_id": 40, "area": 1526, "bbox": [1, 539, 44, 50], "iscrowd": 0}, {"id": 49650, "category_id": 40, "area": 865, "bbox": [37, 535, 50, 40], "iscrowd": 0}, {"id": 51192, "category_id": 40, "area": 452, "bbox": [76, 531, 38, 16], "iscrowd": 0}, {"id": 51967, "category_id": 40, "area": 1415, "bbox": [440, 550, 61, 46], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 723, "bbox": [43, 51, 30, 30], "iscrowd": 0}, {"id": 44258, "category_id": 83, "area": 332, "bbox": [152, 159, 19, 23], "iscrowd": 0}, {"id": 42751, "category_id": 83, "area": 314, "bbox": [475, 72, 21, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00000139", "file_name": "ADE_val_00000139.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 69569, "bbox": [0, 94, 750, 303], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 23898, "bbox": [0, 306, 750, 188], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 88110, "bbox": [0, 1, 749, 153], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 51425, "bbox": [62, 347, 657, 145], "iscrowd": 0}, {"id": 6094592, "category_id": 107, "area": 37998, "bbox": [288, 149, 316, 333], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 32567, "bbox": [312, 238, 294, 216], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 19980, "bbox": [2, 157, 133, 182], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2163, "bbox": [160, 256, 54, 65], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1780, "bbox": [336, 271, 86, 30], "iscrowd": 0}, {"id": 5513727, "category_id": 16, "area": 3127, "bbox": [600, 314, 116, 95], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 7988, "bbox": [101, 154, 69, 215], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2957, "bbox": [685, 321, 64, 109], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3393, "bbox": [253, 191, 57, 65], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 9127, "bbox": [621, 158, 123, 108], "iscrowd": 0}, {"id": 15059390, "category_id": 28, "area": 732, "bbox": [160, 188, 18, 54], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3357, "bbox": [608, 223, 64, 108], "iscrowd": 0}, {"id": 1242084, "category_id": 37, "area": 1043, "bbox": [367, 222, 40, 57], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 518, "bbox": [654, 294, 36, 24], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 219, "bbox": [221, 52, 22, 14], "iscrowd": 0}, {"id": 49663, "category_id": 83, "area": 166, "bbox": [435, 65, 20, 11], "iscrowd": 0}, {"id": 51711, "category_id": 83, "area": 164, "bbox": [634, 96, 26, 10], "iscrowd": 0}, {"id": 37347, "category_id": 83, "area": 53, "bbox": [539, 108, 12, 7], "iscrowd": 0}, {"id": 47359, "category_id": 83, "area": 63, "bbox": [432, 121, 12, 8], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 377, "bbox": [163, 286, 26, 31], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 103, "bbox": [168, 206, 15, 15], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 274, "bbox": [665, 311, 17, 20], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 5884, "bbox": [248, 5, 184, 91], "iscrowd": 0}]}, {"image_id": "ADE_val_00000140", "file_name": "ADE_val_00000140.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 104395, "bbox": [2, 0, 638, 444], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17158, "bbox": [2, 304, 540, 176], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 42080, "bbox": [265, 307, 375, 172], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 8469, "bbox": [452, 219, 99, 108], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 25994, "bbox": [306, 3, 121, 398], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 8943, "bbox": [480, 82, 80, 123], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 58103, "bbox": [2, 235, 335, 244], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 301, "bbox": [473, 212, 47, 9], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 830, "bbox": [456, 209, 95, 23], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 18325, "bbox": [147, 124, 149, 137], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 1041, "bbox": [498, 51, 63, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00000141", "file_name": "ADE_val_00000141.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 143191, "bbox": [0, 0, 759, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 80330, "bbox": [68, 281, 691, 230], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 17095, "bbox": [110, 0, 471, 67], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 7691, "bbox": [235, 208, 217, 93], "iscrowd": 0}, {"id": 16711884, "category_id": 8, "area": 57496, "bbox": [263, 210, 422, 284], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 14375, "bbox": [1, 0, 54, 337], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 13156, "bbox": [653, 298, 107, 155], "iscrowd": 0}, {"id": 5965811, "category_id": 16, "area": 918, "bbox": [434, 236, 57, 25], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 21796, "bbox": [51, 0, 81, 469], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 4422, "bbox": [262, 74, 82, 64], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 17871, "bbox": [102, 100, 94, 231], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 280, "bbox": [463, 214, 19, 31], "iscrowd": 0}, {"id": 254713, "category_id": 37, "area": 917, "bbox": [694, 252, 33, 58], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 4767, "bbox": [540, 240, 120, 63], "iscrowd": 0}, {"id": 14810636, "category_id": 58, "area": 2285, "bbox": [482, 231, 82, 47], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 75, "bbox": [452, 235, 18, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00000142", "file_name": "ADE_val_00000142.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 20330, "bbox": [0, 6, 255, 209], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3929, "bbox": [0, 210, 238, 45], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7414, "bbox": [0, 0, 255, 50], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 3842, "bbox": [25, 42, 120, 55], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 15666, "bbox": [22, 143, 191, 112], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3165, "bbox": [99, 49, 48, 107], "iscrowd": 0}, {"id": 15138001, "category_id": 9, "area": 6176, "bbox": [15, 30, 74, 137], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 608, "bbox": [220, 220, 35, 35], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2444, "bbox": [206, 165, 49, 71], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1085, "bbox": [168, 84, 35, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00000143", "file_name": "ADE_val_00000143.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 110608, "bbox": [0, 43, 770, 408], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 40030, "bbox": [0, 376, 770, 135], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 68970, "bbox": [2, 0, 768, 131], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 8363, "bbox": [391, 170, 156, 157], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 58694, "bbox": [151, 253, 370, 258], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 14034, "bbox": [467, 155, 93, 211], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 41457, "bbox": [37, 157, 355, 302], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 13197, "bbox": [558, 308, 210, 149], "iscrowd": 0}, {"id": 4784383, "category_id": 16, "area": 7864, "bbox": [475, 424, 145, 87], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2210, "bbox": [196, 277, 47, 59], "iscrowd": 0}, {"id": 45311, "category_id": 40, "area": 1498, "bbox": [236, 276, 42, 54], "iscrowd": 0}, {"id": 1229819, "category_id": 40, "area": 1164, "bbox": [323, 269, 34, 50], "iscrowd": 0}, {"id": 2148607, "category_id": 40, "area": 297, "bbox": [274, 271, 54, 18], "iscrowd": 0}, {"id": 43758, "category_id": 40, "area": 2261, "bbox": [266, 282, 66, 48], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 1480, "bbox": [177, 264, 89, 64], "iscrowd": 0}, {"id": 15913984, "category_id": 58, "area": 847, "bbox": [262, 260, 64, 23], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 15733, "bbox": [576, 221, 180, 102], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 1434, "bbox": [320, 1, 179, 37], "iscrowd": 0}]}, {"image_id": "ADE_val_00000144", "file_name": "ADE_val_00000144.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 114659, "bbox": [1, 0, 767, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8324, "bbox": [195, 351, 296, 161], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 54158, "bbox": [41, 0, 721, 122], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 272, "bbox": [422, 257, 31, 11], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 20965, "bbox": [195, 366, 292, 145], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 51133, "bbox": [375, 345, 369, 166], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1052, "bbox": [509, 128, 43, 32], "iscrowd": 0}, {"id": 16645078, "category_id": 9, "area": 5441, "bbox": [566, 84, 174, 68], "iscrowd": 0}, {"id": 16704735, "category_id": 9, "area": 23183, "bbox": [516, 149, 185, 186], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 37104, "bbox": [1, 305, 197, 207], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 9462, "bbox": [52, 178, 104, 132], "iscrowd": 0}, {"id": 2683400, "category_id": 15, "area": 9261, "bbox": [281, 190, 56, 172], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 5940, "bbox": [474, 163, 44, 202], "iscrowd": 0}, {"id": 859879, "category_id": 19, "area": 7815, "bbox": [522, 157, 51, 203], "iscrowd": 0}, {"id": 16115, "category_id": 19, "area": 11929, "bbox": [693, 129, 62, 240], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2578, "bbox": [372, 216, 59, 56], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 4427, "bbox": [191, 300, 86, 115], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 627, "bbox": [366, 228, 29, 63], "iscrowd": 0}, {"id": 655087, "category_id": 37, "area": 5795, "bbox": [15, 155, 99, 165], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1628, "bbox": [202, 311, 49, 43], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 319, "bbox": [425, 267, 27, 18], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 374, "bbox": [44, 317, 62, 12], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 5875, "bbox": [340, 1, 205, 97], "iscrowd": 0}]}, {"image_id": "ADE_val_00000145", "file_name": "ADE_val_00000145.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 20973, "bbox": [0, 86, 240, 143], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2905, "bbox": [182, 254, 57, 65], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 21575, "bbox": [2, 1, 237, 109], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 6412, "bbox": [2, 228, 191, 66], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 4692, "bbox": [2, 204, 134, 115], "iscrowd": 0}, {"id": 15663328, "category_id": 8, "area": 7667, "bbox": [43, 212, 169, 107], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1148, "bbox": [143, 132, 29, 42], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 2150, "bbox": [3, 180, 63, 48], "iscrowd": 0}, {"id": 5249791, "category_id": 25, "area": 1858, "bbox": [205, 195, 35, 65], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 1298, "bbox": [42, 200, 87, 24], "iscrowd": 0}, {"id": 15400704, "category_id": 58, "area": 1645, "bbox": [122, 206, 90, 27], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 588, "bbox": [132, 159, 49, 38], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 88, "bbox": [142, 195, 15, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000146", "file_name": "ADE_val_00000146.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 94594, "bbox": [0, 1, 767, 378], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 70469, "bbox": [2, 354, 765, 157], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 50729, "bbox": [0, 1, 760, 111], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1372, "bbox": [2, 255, 421, 96], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 20312, "bbox": [295, 227, 448, 244], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 40799, "bbox": [55, 105, 303, 169], "iscrowd": 0}, {"id": 16055035, "category_id": 9, "area": 6853, "bbox": [409, 128, 51, 143], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4093, "bbox": [721, 325, 46, 111], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 9303, "bbox": [575, 98, 84, 123], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 2429, "bbox": [306, 256, 78, 67], "iscrowd": 0}, {"id": 14938391, "category_id": 31, "area": 14034, "bbox": [65, 259, 164, 138], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3780, "bbox": [18, 194, 67, 206], "iscrowd": 0}, {"id": 63953, "category_id": 37, "area": 1273, "bbox": [460, 226, 39, 67], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 937, "bbox": [322, 282, 55, 25], "iscrowd": 0}, {"id": 1944831, "category_id": 40, "area": 3882, "bbox": [558, 240, 103, 72], "iscrowd": 0}, {"id": 109560, "category_id": 40, "area": 687, "bbox": [494, 251, 48, 24], "iscrowd": 0}, {"id": 2077951, "category_id": 40, "area": 2296, "bbox": [541, 251, 60, 61], "iscrowd": 0}, {"id": 1156845, "category_id": 40, "area": 1561, "bbox": [489, 268, 56, 39], "iscrowd": 0}, {"id": 56553, "category_id": 40, "area": 1138, "bbox": [111, 290, 72, 27], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 2174, "bbox": [636, 261, 60, 52], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 1684, "bbox": [228, 296, 64, 78], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 2250, "bbox": [220, 229, 60, 59], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2056, "bbox": [365, 1, 68, 65], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 2482, "bbox": [258, 343, 95, 101], "iscrowd": 0}, {"id": 16773644, "category_id": 111, "area": 5454, "bbox": [302, 357, 126, 120], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 1136, "bbox": [0, 377, 28, 67], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 568, "bbox": [527, 137, 27, 57], "iscrowd": 0}, {"id": 16392960, "category_id": 135, "area": 1230, "bbox": [684, 107, 43, 75], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 405, "bbox": [240, 274, 24, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00000147", "file_name": "ADE_val_00000147.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 97451, "bbox": [2, 1, 450, 440], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 53470, "bbox": [2, 337, 780, 175], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 93076, "bbox": [134, 224, 572, 288], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 23069, "bbox": [5, 294, 155, 179], "iscrowd": 0}, {"id": 5311999, "category_id": 16, "area": 729, "bbox": [430, 231, 50, 30], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 83027, "bbox": [449, 1, 333, 304], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 13082, "bbox": [653, 221, 127, 179], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 13319, "bbox": [219, 1, 102, 137], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2639, "bbox": [37, 174, 84, 129], "iscrowd": 0}, {"id": 1371881, "category_id": 37, "area": 871, "bbox": [390, 165, 39, 75], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 8342, "bbox": [204, 233, 176, 84], "iscrowd": 0}, {"id": 16444672, "category_id": 58, "area": 5021, "bbox": [322, 223, 138, 63], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1878, "bbox": [80, 234, 69, 57], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 1124, "bbox": [87, 274, 35, 40], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 246, "bbox": [439, 225, 18, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00000148", "file_name": "ADE_val_00000148.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 26601, "bbox": [0, 0, 300, 213], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 108, "bbox": [2, 194, 8, 31], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 24966, "bbox": [3, 71, 297, 154], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 1360, "bbox": [183, 103, 41, 46], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 6171, "bbox": [261, 2, 39, 181], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 532, "bbox": [183, 72, 24, 39], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 1979, "bbox": [99, 111, 93, 32], "iscrowd": 0}, {"id": 15597312, "category_id": 58, "area": 3122, "bbox": [19, 117, 107, 49], "iscrowd": 0}, {"id": 15265792, "category_id": 58, "area": 452, "bbox": [118, 140, 71, 13], "iscrowd": 0}, {"id": 16770304, "category_id": 58, "area": 809, "bbox": [17, 144, 105, 36], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 244, "bbox": [198, 97, 19, 17], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 280, "bbox": [110, 40, 22, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00000149", "file_name": "ADE_val_00000149.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 155192, "bbox": [0, 0, 611, 364], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 117690, "bbox": [122, 186, 560, 325], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4032, "bbox": [428, 303, 143, 56], "iscrowd": 0}, {"id": 5439743, "category_id": 16, "area": 27229, "bbox": [0, 344, 178, 168], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 27038, "bbox": [602, 0, 81, 367], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3587, "bbox": [49, 257, 47, 99], "iscrowd": 0}, {"id": 589806, "category_id": 37, "area": 1463, "bbox": [481, 247, 29, 65], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 4005, "bbox": [312, 318, 169, 38], "iscrowd": 0}, {"id": 15389196, "category_id": 58, "area": 6859, "bbox": [169, 335, 205, 58], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 688, "bbox": [101, 329, 43, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00000150", "file_name": "ADE_val_00000150.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 146690, "bbox": [2, 0, 680, 471], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10426, "bbox": [0, 439, 682, 72], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 139559, "bbox": [58, 141, 582, 370], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 24559, "bbox": [588, 1, 94, 290], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2481, "bbox": [388, 279, 97, 54], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 16577, "bbox": [162, 1, 140, 126], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 5414, "bbox": [381, 186, 93, 110], "iscrowd": 0}]}, {"image_id": "ADE_val_00000151", "file_name": "ADE_val_00000151.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 76436, "bbox": [0, 30, 682, 403], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 39043, "bbox": [0, 381, 682, 130], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 58835, "bbox": [1, 0, 681, 141], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 63316, "bbox": [193, 251, 411, 260], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 21213, "bbox": [117, 127, 166, 162], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 428, "bbox": [341, 293, 39, 22], "iscrowd": 0}, {"id": 5833721, "category_id": 16, "area": 5992, "bbox": [603, 326, 79, 92], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 6216, "bbox": [276, 145, 47, 159], "iscrowd": 0}, {"id": 17919, "category_id": 19, "area": 17761, "bbox": [29, 84, 103, 244], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 11197, "bbox": [461, 97, 98, 131], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2436, "bbox": [628, 261, 54, 72], "iscrowd": 0}, {"id": 63478, "category_id": 37, "area": 744, "bbox": [360, 255, 32, 42], "iscrowd": 0}, {"id": 63173, "category_id": 37, "area": 1544, "bbox": [337, 1, 25, 80], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2412, "bbox": [434, 269, 67, 56], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 4247, "bbox": [488, 268, 113, 57], "iscrowd": 0}, {"id": 16770816, "category_id": 58, "area": 1938, "bbox": [378, 268, 92, 41], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 363, "bbox": [611, 319, 38, 14], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 4239, "bbox": [141, 299, 122, 69], "iscrowd": 0}]}, {"image_id": "ADE_val_00000152", "file_name": "ADE_val_00000152.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 13496, "bbox": [0, 0, 256, 221], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5876, "bbox": [0, 176, 256, 80], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 6617, "bbox": [69, 201, 186, 54], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 10150, "bbox": [103, 79, 149, 115], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 7096, "bbox": [95, 14, 61, 122], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 714, "bbox": [238, 132, 18, 49], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 224, "bbox": [51, 127, 17, 15], "iscrowd": 0}, {"id": 3604729, "category_id": 23, "area": 231, "bbox": [71, 126, 19, 13], "iscrowd": 0}, {"id": 4658923, "category_id": 23, "area": 162, "bbox": [90, 125, 13, 13], "iscrowd": 0}, {"id": 4788961, "category_id": 23, "area": 1293, "bbox": [184, 26, 31, 44], "iscrowd": 0}, {"id": 4718846, "category_id": 23, "area": 1363, "bbox": [224, 26, 31, 45], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 7371, "bbox": [12, 25, 80, 117], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 202, "bbox": [25, 134, 20, 12], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 10339, "bbox": [3, 137, 124, 106], "iscrowd": 0}]}, {"image_id": "ADE_val_00000153", "file_name": "ADE_val_00000153.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 149324, "bbox": [0, 0, 1127, 353], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14456, "bbox": [474, 353, 249, 158], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 55901, "bbox": [641, 197, 361, 314], "iscrowd": 0}, {"id": 16715206, "category_id": 8, "area": 59804, "bbox": [170, 207, 488, 227], "iscrowd": 0}, {"id": 16064950, "category_id": 8, "area": 85044, "bbox": [0, 314, 556, 196], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 25407, "bbox": [119, 0, 150, 204], "iscrowd": 0}, {"id": 15781859, "category_id": 9, "area": 41466, "bbox": [318, 0, 235, 190], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 48087, "bbox": [829, 326, 297, 185], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 20970, "bbox": [40, 0, 114, 245], "iscrowd": 0}, {"id": 2435814, "category_id": 19, "area": 10029, "bbox": [267, 1, 58, 191], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 24671, "bbox": [1046, 21, 81, 436], "iscrowd": 0}, {"id": 14470124, "category_id": 28, "area": 7737, "bbox": [686, 2, 81, 106], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 9019, "bbox": [637, 130, 84, 273], "iscrowd": 0}]}, {"image_id": "ADE_val_00000154", "file_name": "ADE_val_00000154.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 86711, "bbox": [0, 0, 683, 350], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 39795, "bbox": [0, 282, 681, 230], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 107439, "bbox": [1, 147, 452, 365], "iscrowd": 0}, {"id": 14942423, "category_id": 8, "area": 55734, "bbox": [295, 126, 385, 274], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3771, "bbox": [468, 156, 141, 50], "iscrowd": 0}, {"id": 5906687, "category_id": 16, "area": 2746, "bbox": [211, 220, 107, 54], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6314, "bbox": [338, 29, 78, 86], "iscrowd": 0}, {"id": 5182719, "category_id": 23, "area": 14537, "bbox": [1, 14, 140, 117], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 2358, "bbox": [564, 156, 88, 65], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 5935, "bbox": [90, 179, 112, 78], "iscrowd": 0}, {"id": 16768537, "category_id": 58, "area": 6236, "bbox": [6, 189, 108, 84], "iscrowd": 0}, {"id": 16710656, "category_id": 58, "area": 489, "bbox": [384, 141, 55, 22], "iscrowd": 0}, {"id": 16776960, "category_id": 58, "area": 655, "bbox": [313, 156, 69, 45], "iscrowd": 0}, {"id": 15332631, "category_id": 58, "area": 2809, "bbox": [396, 153, 79, 56], "iscrowd": 0}, {"id": 15924992, "category_id": 58, "area": 3961, "bbox": [319, 159, 97, 65], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 5321, "bbox": [206, 114, 115, 83], "iscrowd": 0}, {"id": 16721944, "category_id": 135, "area": 1620, "bbox": [492, 74, 60, 65], "iscrowd": 0}]}, {"image_id": "ADE_val_00000155", "file_name": "ADE_val_00000155.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 31361, "bbox": [26, 0, 311, 238], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4148, "bbox": [69, 0, 268, 27], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 16788, "bbox": [30, 148, 307, 105], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2139, "bbox": [311, 55, 26, 90], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2491, "bbox": [145, 18, 43, 63], "iscrowd": 0}, {"id": 16449740, "category_id": 11, "area": 3083, "bbox": [22, 0, 43, 77], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 7101, "bbox": [0, 0, 35, 254], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 2844, "bbox": [289, 9, 35, 144], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 307, "bbox": [67, 54, 20, 23], "iscrowd": 0}, {"id": 3934719, "category_id": 23, "area": 127, "bbox": [32, 119, 12, 14], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 549, "bbox": [28, 120, 142, 17], "iscrowd": 0}, {"id": 5701871, "category_id": 25, "area": 280, "bbox": [67, 75, 78, 6], "iscrowd": 0}, {"id": 3673831, "category_id": 25, "area": 369, "bbox": [66, 40, 85, 12], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 9225, "bbox": [169, 19, 66, 181], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 3792, "bbox": [32, 172, 162, 60], "iscrowd": 0}]}, {"image_id": "ADE_val_00000156", "file_name": "ADE_val_00000156.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 184265, "bbox": [0, 0, 926, 458], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 57943, "bbox": [0, 333, 619, 177], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 61183, "bbox": [2, 176, 394, 334], "iscrowd": 0}, {"id": 16122047, "category_id": 8, "area": 59932, "bbox": [576, 199, 349, 312], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 11167, "bbox": [528, 239, 100, 141], "iscrowd": 0}, {"id": 6751988, "category_id": 16, "area": 11779, "bbox": [388, 234, 105, 136], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 10275, "bbox": [83, 1, 79, 270], "iscrowd": 0}, {"id": 19711, "category_id": 19, "area": 30761, "bbox": [2, 1, 119, 333], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 8967, "bbox": [463, 0, 103, 88], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1014, "bbox": [584, 195, 38, 58], "iscrowd": 0}, {"id": 1703898, "category_id": 37, "area": 850, "bbox": [417, 189, 29, 55], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 8930, "bbox": [203, 179, 141, 79], "iscrowd": 0}, {"id": 16775952, "category_id": 58, "area": 1971, "bbox": [669, 199, 150, 21], "iscrowd": 0}, {"id": 16449283, "category_id": 58, "area": 10286, "bbox": [668, 210, 156, 81], "iscrowd": 0}, {"id": 15850496, "category_id": 58, "area": 1461, "bbox": [230, 173, 122, 75], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 5253, "bbox": [623, 379, 137, 68], "iscrowd": 0}, {"id": 7341311, "category_id": 82, "area": 4469, "bbox": [78, 340, 118, 63], "iscrowd": 0}]}, {"image_id": "ADE_val_00000157", "file_name": "ADE_val_00000157.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 87510, "bbox": [1, 0, 681, 389], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 52080, "bbox": [28, 333, 583, 179], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 87337, "bbox": [84, 3, 445, 272], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 37062, "bbox": [441, 327, 241, 184], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6654, "bbox": [68, 2, 464, 275], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 17793, "bbox": [200, 242, 213, 233], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 7890, "bbox": [1, 388, 78, 123], "iscrowd": 0}, {"id": 17374, "category_id": 20, "area": 23437, "bbox": [104, 170, 183, 302], "iscrowd": 0}, {"id": 736185, "category_id": 20, "area": 22729, "bbox": [325, 170, 188, 299], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3166, "bbox": [251, 1, 92, 72], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1763, "bbox": [280, 255, 67, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00000158", "file_name": "ADE_val_00000158.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 43043, "bbox": [3, 3, 630, 257], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 105282, "bbox": [3, 213, 634, 267], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 13795, "bbox": [551, 157, 86, 257], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 9820, "bbox": [517, 3, 120, 89], "iscrowd": 0}, {"id": 16708852, "category_id": 9, "area": 8789, "bbox": [217, 1, 132, 70], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5422, "bbox": [3, 134, 135, 103], "iscrowd": 0}, {"id": 4784368, "category_id": 16, "area": 69674, "bbox": [40, 130, 456, 328], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 543, "bbox": [84, 117, 30, 24], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 11378, "bbox": [329, 53, 200, 160], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2755, "bbox": [373, 76, 71, 57], "iscrowd": 0}, {"id": 54015, "category_id": 40, "area": 1822, "bbox": [424, 89, 57, 48], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 10096, "bbox": [2, 2, 74, 157], "iscrowd": 0}]}, {"image_id": "ADE_val_00000159", "file_name": "ADE_val_00000159.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 32846, "bbox": [2, 1, 297, 192], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9712, "bbox": [2, 162, 252, 63], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 645, "bbox": [173, 125, 44, 68], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1636, "bbox": [185, 113, 78, 48], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 2800, "bbox": [249, 1, 24, 181], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 3001, "bbox": [242, 154, 57, 71], "iscrowd": 0}]}, {"image_id": "ADE_val_00000160", "file_name": "ADE_val_00000160.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 178920, "bbox": [0, 0, 756, 463], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 22751, "bbox": [57, 399, 700, 112], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 22506, "bbox": [114, 0, 500, 90], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 66575, "bbox": [170, 250, 429, 261], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 48810, "bbox": [18, 107, 243, 234], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7887, "bbox": [0, 385, 89, 127], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1234, "bbox": [324, 300, 58, 54], "iscrowd": 0}, {"id": 6823408, "category_id": 16, "area": 6933, "bbox": [597, 322, 110, 153], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 860, "bbox": [611, 300, 34, 32], "iscrowd": 0}, {"id": 4325601, "category_id": 23, "area": 3788, "bbox": [449, 92, 29, 137], "iscrowd": 0}, {"id": 4915425, "category_id": 23, "area": 4886, "bbox": [515, 75, 34, 151], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2095, "bbox": [339, 219, 51, 82], "iscrowd": 0}, {"id": 458740, "category_id": 37, "area": 5187, "bbox": [619, 199, 88, 136], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1491, "bbox": [461, 310, 67, 64], "iscrowd": 0}, {"id": 2206975, "category_id": 40, "area": 990, "bbox": [396, 306, 51, 28], "iscrowd": 0}, {"id": 56575, "category_id": 40, "area": 3899, "bbox": [374, 325, 136, 49], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 1733, "bbox": [515, 333, 65, 35], "iscrowd": 0}, {"id": 16766464, "category_id": 58, "area": 253, "bbox": [441, 322, 27, 12], "iscrowd": 0}, {"id": 15326720, "category_id": 58, "area": 2219, "bbox": [461, 301, 121, 32], "iscrowd": 0}, {"id": 16776974, "category_id": 58, "area": 358, "bbox": [375, 312, 22, 27], "iscrowd": 0}, {"id": 16702464, "category_id": 58, "area": 1482, "bbox": [381, 293, 99, 30], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 151, "bbox": [345, 301, 35, 6], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 538, "bbox": [659, 306, 22, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000161", "file_name": "ADE_val_00000161.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 119417, "bbox": [0, 0, 739, 377], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25605, "bbox": [0, 362, 603, 150], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 34348, "bbox": [102, 0, 586, 108], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 73960, "bbox": [24, 221, 455, 291], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 17009, "bbox": [516, 121, 117, 194], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 392, "bbox": [286, 287, 31, 19], "iscrowd": 0}, {"id": 4915708, "category_id": 16, "area": 5370, "bbox": [1, 332, 41, 162], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 12440, "bbox": [508, 43, 145, 121], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1741, "bbox": [624, 259, 43, 55], "iscrowd": 0}, {"id": 2951909, "category_id": 23, "area": 3905, "bbox": [382, 169, 57, 71], "iscrowd": 0}, {"id": 3146983, "category_id": 23, "area": 2059, "bbox": [261, 166, 44, 74], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 5752, "bbox": [1, 112, 252, 68], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 3092, "bbox": [716, 79, 23, 153], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1545, "bbox": [249, 212, 50, 74], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 4598, "bbox": [24, 215, 97, 122], "iscrowd": 0}, {"id": 1101561, "category_id": 40, "area": 1112, "bbox": [121, 218, 63, 45], "iscrowd": 0}, {"id": 55551, "category_id": 40, "area": 1141, "bbox": [176, 219, 59, 33], "iscrowd": 0}, {"id": 1685759, "category_id": 40, "area": 716, "bbox": [166, 247, 76, 16], "iscrowd": 0}, {"id": 54241, "category_id": 40, "area": 1363, "bbox": [207, 257, 84, 61], "iscrowd": 0}, {"id": 440804, "category_id": 40, "area": 3260, "bbox": [50, 236, 117, 100], "iscrowd": 0}, {"id": 382975, "category_id": 40, "area": 7891, "bbox": [144, 259, 129, 79], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 27984, "bbox": [591, 280, 148, 232], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 5045, "bbox": [67, 269, 97, 82], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 4439, "bbox": [582, 151, 138, 107], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 209, "bbox": [313, 59, 21, 12], "iscrowd": 0}, {"id": 44799, "category_id": 83, "area": 360, "bbox": [549, 0, 33, 15], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 2509, "bbox": [664, 226, 75, 46], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 309, "bbox": [616, 264, 16, 25], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 2632, "bbox": [270, 1, 135, 50], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 1943, "bbox": [121, 94, 55, 52], "iscrowd": 0}]}, {"image_id": "ADE_val_00000162", "file_name": "ADE_val_00000162.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21555, "bbox": [0, 0, 256, 207], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3801, "bbox": [0, 142, 256, 113], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 846, "bbox": [42, 0, 85, 61], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 1506, "bbox": [0, 225, 98, 30], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 21594, "bbox": [36, 91, 220, 165], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4937, "bbox": [75, 35, 47, 121], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 739, "bbox": [144, 110, 27, 36], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3646, "bbox": [192, 23, 64, 62], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 190, "bbox": [156, 80, 10, 32], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 884, "bbox": [41, 104, 23, 40], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 761, "bbox": [188, 117, 38, 34], "iscrowd": 0}, {"id": 1943797, "category_id": 40, "area": 510, "bbox": [162, 125, 36, 28], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 2649, "bbox": [0, 125, 39, 79], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 595, "bbox": [176, 114, 58, 34], "iscrowd": 0}, {"id": 15073024, "category_id": 58, "area": 353, "bbox": [186, 111, 53, 36], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 370, "bbox": [6, 86, 15, 41], "iscrowd": 0}]}, {"image_id": "ADE_val_00000163", "file_name": "ADE_val_00000163.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 63564, "bbox": [2, 0, 437, 293], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 32101, "bbox": [1, 231, 639, 195], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 22466, "bbox": [138, 0, 501, 69], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 17623, "bbox": [158, 217, 299, 173], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 45614, "bbox": [78, 162, 412, 260], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6717, "bbox": [577, 279, 62, 144], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1165, "bbox": [475, 211, 54, 56], "iscrowd": 0}, {"id": 4457187, "category_id": 16, "area": 11477, "bbox": [1, 236, 97, 140], "iscrowd": 0}, {"id": 5112319, "category_id": 16, "area": 267, "bbox": [314, 201, 56, 14], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 32205, "bbox": [436, 38, 203, 235], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 11640, "bbox": [530, 212, 109, 190], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 817, "bbox": [350, 90, 24, 37], "iscrowd": 0}, {"id": 3022847, "category_id": 23, "area": 852, "bbox": [350, 135, 25, 37], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 2880, "bbox": [378, 187, 97, 43], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2967, "bbox": [0, 125, 58, 121], "iscrowd": 0}, {"id": 58070, "category_id": 37, "area": 977, "bbox": [307, 136, 37, 58], "iscrowd": 0}, {"id": 65484, "category_id": 37, "area": 1259, "bbox": [419, 117, 41, 75], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 4292, "bbox": [207, 161, 94, 60], "iscrowd": 0}, {"id": 16769280, "category_id": 58, "area": 7627, "bbox": [90, 163, 132, 77], "iscrowd": 0}, {"id": 16776960, "category_id": 58, "area": 779, "bbox": [79, 179, 23, 60], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 433, "bbox": [485, 183, 26, 26], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 2068, "bbox": [467, 231, 47, 63], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 124, "bbox": [334, 202, 26, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00000164", "file_name": "ADE_val_00000164.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 129420, "bbox": [1, 1, 681, 445], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 41426, "bbox": [133, 342, 550, 170], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 23850, "bbox": [1, 354, 192, 158], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 8411, "bbox": [252, 44, 90, 105], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 20194, "bbox": [2, 223, 150, 169], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 5017, "bbox": [150, 123, 88, 251], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 26260, "bbox": [444, 124, 171, 169], "iscrowd": 0}]}, {"image_id": "ADE_val_00000165", "file_name": "ADE_val_00000165.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 100513, "bbox": [0, 79, 631, 335], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 31063, "bbox": [0, 323, 630, 188], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 89554, "bbox": [0, 0, 630, 177], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 71876, "bbox": [0, 314, 462, 193], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 640, "bbox": [248, 326, 40, 27], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2423, "bbox": [51, 173, 48, 54], "iscrowd": 0}, {"id": 3874530, "category_id": 23, "area": 991, "bbox": [114, 192, 34, 32], "iscrowd": 0}, {"id": 1902591, "category_id": 23, "area": 1352, "bbox": [59, 233, 33, 43], "iscrowd": 0}, {"id": 3018236, "category_id": 23, "area": 1694, "bbox": [110, 234, 40, 45], "iscrowd": 0}, {"id": 2429183, "category_id": 23, "area": 124, "bbox": [579, 264, 14, 9], "iscrowd": 0}, {"id": 3148516, "category_id": 23, "area": 158, "bbox": [562, 241, 13, 13], "iscrowd": 0}, {"id": 3735805, "category_id": 23, "area": 156, "bbox": [575, 237, 13, 13], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 1798, "bbox": [595, 212, 36, 61], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 866, "bbox": [242, 271, 31, 66], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 3862, "bbox": [551, 281, 78, 55], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1390, "bbox": [338, 157, 92, 20], "iscrowd": 0}, {"id": 114431, "category_id": 83, "area": 28, "bbox": [323, 155, 8, 4], "iscrowd": 0}, {"id": 566527, "category_id": 83, "area": 28, "bbox": [355, 151, 11, 3], "iscrowd": 0}, {"id": 242431, "category_id": 83, "area": 32, "bbox": [441, 154, 9, 5], "iscrowd": 0}, {"id": 50158, "category_id": 83, "area": 21, "bbox": [455, 161, 7, 4], "iscrowd": 0}]}, {"image_id": "ADE_val_00000166", "file_name": "ADE_val_00000166.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 51534, "bbox": [1, 0, 681, 475], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 20161, "bbox": [1, 367, 681, 145], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 152859, "bbox": [106, 126, 572, 385], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 5929, "bbox": [655, 44, 27, 327], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 7743, "bbox": [1, 313, 134, 158], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 34438, "bbox": [95, 1, 213, 304], "iscrowd": 0}, {"id": 5887, "category_id": 19, "area": 9626, "bbox": [71, 0, 252, 120], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1331, "bbox": [542, 186, 63, 80], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6691, "bbox": [0, 29, 62, 160], "iscrowd": 0}, {"id": 1513715, "category_id": 23, "area": 5942, "bbox": [548, 57, 84, 75], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 35288, "bbox": [363, 32, 166, 245], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 8286, "bbox": [0, 147, 76, 198], "iscrowd": 0}, {"id": 65532, "category_id": 37, "area": 2629, "bbox": [322, 90, 66, 126], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1570, "bbox": [55, 295, 42, 51], "iscrowd": 0}]}, {"image_id": "ADE_val_00000167", "file_name": "ADE_val_00000167.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 7221, "bbox": [0, 26, 256, 143], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 15866, "bbox": [0, 149, 256, 107], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 8345, "bbox": [0, 0, 255, 35], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 3703, "bbox": [22, 93, 188, 106], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1225, "bbox": [239, 47, 16, 92], "iscrowd": 0}, {"id": 13826509, "category_id": 9, "area": 1137, "bbox": [181, 49, 27, 63], "iscrowd": 0}, {"id": 14142699, "category_id": 9, "area": 1253, "bbox": [13, 47, 29, 70], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1236, "bbox": [181, 115, 39, 41], "iscrowd": 0}, {"id": 4722924, "category_id": 16, "area": 1287, "bbox": [7, 116, 40, 46], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1660, "bbox": [223, 32, 16, 128], "iscrowd": 0}, {"id": 9471, "category_id": 19, "area": 1181, "bbox": [167, 38, 20, 98], "iscrowd": 0}, {"id": 15615, "category_id": 19, "area": 1356, "bbox": [196, 36, 26, 112], "iscrowd": 0}, {"id": 2114018, "category_id": 19, "area": 1438, "bbox": [34, 37, 25, 96], "iscrowd": 0}, {"id": 14056, "category_id": 19, "area": 1327, "bbox": [2, 38, 22, 112], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2743, "bbox": [82, 49, 63, 45], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 9721, "bbox": [26, 130, 187, 93], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 315, "bbox": [188, 74, 23, 44], "iscrowd": 0}, {"id": 64209, "category_id": 37, "area": 392, "bbox": [16, 74, 23, 49], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 445, "bbox": [98, 102, 32, 22], "iscrowd": 0}, {"id": 47103, "category_id": 40, "area": 1017, "bbox": [127, 91, 38, 33], "iscrowd": 0}, {"id": 2206185, "category_id": 40, "area": 962, "bbox": [62, 93, 36, 32], "iscrowd": 0}, {"id": 1159407, "category_id": 40, "area": 1145, "bbox": [56, 134, 50, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00000168", "file_name": "ADE_val_00000168.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 102586, "bbox": [0, 0, 747, 359], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 37793, "bbox": [25, 343, 721, 169], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 33746, "bbox": [184, 0, 563, 92], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 3830, "bbox": [500, 105, 219, 30], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 119273, "bbox": [199, 30, 495, 481], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 19039, "bbox": [497, 103, 224, 145], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 41284, "bbox": [0, 265, 231, 246], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2597, "bbox": [23, 234, 62, 59], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 684, "bbox": [387, 163, 41, 50], "iscrowd": 0}, {"id": 196574, "category_id": 37, "area": 5058, "bbox": [22, 170, 113, 61], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3018, "bbox": [319, 196, 67, 61], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 4625, "bbox": [220, 189, 121, 71], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 426, "bbox": [147, 259, 44, 13], "iscrowd": 0}, {"id": 1292530, "category_id": 68, "area": 1993, "bbox": [56, 228, 70, 51], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 410, "bbox": [479, 0, 44, 16], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 2769, "bbox": [378, 229, 131, 55], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 563, "bbox": [125, 249, 50, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00000169", "file_name": "ADE_val_00000169.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 41962, "bbox": [0, 37, 640, 329], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 13117, "bbox": [193, 334, 446, 92], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 63987, "bbox": [0, 0, 640, 171], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 52603, "bbox": [280, 202, 342, 224], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 723, "bbox": [336, 248, 55, 32], "iscrowd": 0}, {"id": 5249279, "category_id": 16, "area": 2922, "bbox": [593, 266, 47, 79], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 9952, "bbox": [411, 129, 149, 73], "iscrowd": 0}, {"id": 342775, "category_id": 19, "area": 44996, "bbox": [0, 55, 217, 256], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1468, "bbox": [266, 157, 33, 47], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 606, "bbox": [369, 203, 25, 51], "iscrowd": 0}, {"id": 720885, "category_id": 37, "area": 1109, "bbox": [593, 207, 38, 63], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1364, "bbox": [429, 230, 44, 38], "iscrowd": 0}, {"id": 56319, "category_id": 40, "area": 1551, "bbox": [471, 231, 49, 40], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 31036, "bbox": [0, 271, 236, 155], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 4225, "bbox": [322, 37, 172, 64], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 141, "bbox": [366, 240, 11, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00000170", "file_name": "ADE_val_00000170.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 151130, "bbox": [0, 0, 767, 512], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 122840, "bbox": [1, 109, 767, 403], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 19375, "bbox": [340, 97, 152, 138], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1748, "bbox": [222, 288, 70, 58], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 20727, "bbox": [318, 61, 262, 201], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 5653, "bbox": [602, 48, 81, 81], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2793, "bbox": [157, 191, 58, 91], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 443, "bbox": [711, 188, 39, 12], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 6864, "bbox": [667, 197, 101, 95], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 8561, "bbox": [85, 278, 201, 82], "iscrowd": 0}, {"id": 14869790, "category_id": 58, "area": 35880, "bbox": [68, 331, 276, 181], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 10195, "bbox": [578, 340, 144, 88], "iscrowd": 0}]}, {"image_id": "ADE_val_00000171", "file_name": "ADE_val_00000171.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 133260, "bbox": [0, 0, 637, 397], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14631, "bbox": [0, 319, 638, 109], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 18952, "bbox": [46, 0, 374, 101], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 23841, "bbox": [100, 114, 156, 185], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 22394, "bbox": [122, 342, 347, 85], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6019, "bbox": [293, 166, 68, 158], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3111, "bbox": [125, 287, 140, 70], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 21321, "bbox": [294, 262, 264, 149], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1942, "bbox": [477, 257, 95, 41], "iscrowd": 0}, {"id": 1489663, "category_id": 40, "area": 2438, "bbox": [393, 277, 58, 52], "iscrowd": 0}, {"id": 1223663, "category_id": 40, "area": 1731, "bbox": [351, 272, 53, 41], "iscrowd": 0}, {"id": 1289959, "category_id": 40, "area": 1082, "bbox": [320, 263, 49, 47], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 741, "bbox": [228, 309, 29, 30], "iscrowd": 0}, {"id": 65285, "category_id": 42, "area": 1078, "bbox": [150, 318, 35, 35], "iscrowd": 0}, {"id": 1244928, "category_id": 42, "area": 735, "bbox": [193, 312, 30, 30], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 4863, "bbox": [4, 252, 56, 97], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1439, "bbox": [4, 117, 53, 45], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 634, "bbox": [306, 236, 31, 26], "iscrowd": 0}, {"id": 36577, "category_id": 68, "area": 218, "bbox": [328, 173, 11, 24], "iscrowd": 0}, {"id": 42212, "category_id": 68, "area": 329, "bbox": [302, 265, 23, 21], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 782, "bbox": [16, 157, 21, 43], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 5776, "bbox": [204, 6, 206, 92], "iscrowd": 0}]}, {"image_id": "ADE_val_00000172", "file_name": "ADE_val_00000172.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 105776, "bbox": [1, 1, 682, 428], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 53124, "bbox": [1, 349, 682, 163], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 12551, "bbox": [1, 382, 120, 130], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 21837, "bbox": [385, 265, 223, 246], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 9068, "bbox": [361, 248, 139, 242], "iscrowd": 0}, {"id": 1795284, "category_id": 20, "area": 12916, "bbox": [509, 261, 160, 249], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 36649, "bbox": [431, 2, 202, 253], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 83224, "bbox": [39, 5, 231, 408], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 6378, "bbox": [434, 145, 85, 140], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1791, "bbox": [476, 288, 76, 28], "iscrowd": 0}, {"id": 627172, "category_id": 68, "area": 302, "bbox": [510, 280, 35, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00000173", "file_name": "ADE_val_00000173.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 98440, "bbox": [0, 0, 639, 441], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6479, "bbox": [0, 412, 639, 68], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 25960, "bbox": [114, 310, 310, 167], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 58750, "bbox": [73, 292, 566, 187], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 47877, "bbox": [86, 1, 216, 238], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 23033, "bbox": [295, 1, 103, 245], "iscrowd": 0}, {"id": 1324535, "category_id": 19, "area": 22116, "bbox": [2, 1, 97, 253], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 4328, "bbox": [548, 244, 88, 86], "iscrowd": 0}, {"id": 16776961, "category_id": 58, "area": 1724, "bbox": [458, 237, 92, 30], "iscrowd": 0}, {"id": 16774912, "category_id": 58, "area": 4230, "bbox": [477, 271, 131, 66], "iscrowd": 0}, {"id": 16382464, "category_id": 58, "area": 3135, "bbox": [433, 262, 103, 52], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 842, "bbox": [226, 300, 64, 23], "iscrowd": 0}, {"id": 7672575, "category_id": 82, "area": 1542, "bbox": [273, 304, 60, 39], "iscrowd": 0}, {"id": 7733503, "category_id": 82, "area": 2236, "bbox": [225, 318, 106, 42], "iscrowd": 0}, {"id": 8650979, "category_id": 82, "area": 801, "bbox": [193, 324, 48, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00000174", "file_name": "ADE_val_00000174.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 75695, "bbox": [0, 0, 639, 352], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7482, "bbox": [588, 346, 51, 165], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 202607, "bbox": [1, 72, 627, 439], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 3793, "bbox": [601, 89, 38, 206], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 5855, "bbox": [273, 118, 117, 75], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 14200, "bbox": [129, 71, 194, 119], "iscrowd": 0}, {"id": 16767748, "category_id": 58, "area": 16243, "bbox": [347, 100, 206, 120], "iscrowd": 0}]}, {"image_id": "ADE_val_00000175", "file_name": "ADE_val_00000175.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 112384, "bbox": [0, 45, 511, 571], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8517, "bbox": [199, 513, 255, 169], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 40227, "bbox": [1, 0, 510, 140], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 46901, "bbox": [1, 516, 370, 166], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 70815, "bbox": [1, 62, 217, 388], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 16158, "bbox": [286, 196, 57, 398], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 17905, "bbox": [213, 122, 76, 312], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 9158, "bbox": [378, 472, 133, 210], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 4132, "bbox": [191, 1, 92, 90], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 7358, "bbox": [455, 527, 56, 155], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 6658, "bbox": [359, 457, 94, 210], "iscrowd": 0}]}, {"image_id": "ADE_val_00000176", "file_name": "ADE_val_00000176.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 111517, "bbox": [0, 21, 744, 366], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 78555, "bbox": [1, 330, 742, 182], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 57004, "bbox": [2, 1, 741, 131], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 1602, "bbox": [183, 236, 296, 197], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 24696, "bbox": [528, 287, 215, 224], "iscrowd": 0}, {"id": 4791791, "category_id": 16, "area": 5948, "bbox": [119, 299, 80, 86], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 21950, "bbox": [543, 83, 123, 235], "iscrowd": 0}, {"id": 1318655, "category_id": 19, "area": 12108, "bbox": [440, 121, 75, 210], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 12394, "bbox": [553, 277, 190, 234], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 11945, "bbox": [196, 101, 123, 117], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1081, "bbox": [342, 190, 34, 83], "iscrowd": 0}, {"id": 913888, "category_id": 37, "area": 648, "bbox": [132, 272, 22, 32], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 1695, "bbox": [191, 235, 83, 49], "iscrowd": 0}, {"id": 16771072, "category_id": 58, "area": 404, "bbox": [268, 236, 61, 11], "iscrowd": 0}, {"id": 16770048, "category_id": 58, "area": 1501, "bbox": [224, 248, 58, 33], "iscrowd": 0}, {"id": 15063808, "category_id": 58, "area": 478, "bbox": [273, 246, 67, 26], "iscrowd": 0}, {"id": 16767248, "category_id": 58, "area": 1226, "bbox": [274, 253, 64, 28], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 869, "bbox": [369, 0, 49, 21], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 148, "bbox": [385, 268, 29, 7], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 350, "bbox": [154, 288, 29, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00000177", "file_name": "ADE_val_00000177.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 153214, "bbox": [0, 1, 512, 488], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 99515, "bbox": [123, 264, 388, 418], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 9069, "bbox": [35, 406, 93, 116], "iscrowd": 0}, {"id": 5243135, "category_id": 16, "area": 1068, "bbox": [427, 369, 66, 35], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2566, "bbox": [35, 325, 50, 99], "iscrowd": 0}, {"id": 524231, "category_id": 37, "area": 16105, "bbox": [383, 1, 122, 174], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 5362, "bbox": [193, 345, 124, 65], "iscrowd": 0}, {"id": 43519, "category_id": 40, "area": 4759, "bbox": [305, 337, 116, 60], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 3664, "bbox": [143, 281, 136, 36], "iscrowd": 0}, {"id": 16774405, "category_id": 58, "area": 3382, "bbox": [276, 277, 103, 40], "iscrowd": 0}, {"id": 16370952, "category_id": 58, "area": 7097, "bbox": [147, 313, 151, 95], "iscrowd": 0}, {"id": 15204102, "category_id": 58, "area": 4266, "bbox": [298, 301, 128, 75], "iscrowd": 0}]}, {"image_id": "ADE_val_00000178", "file_name": "ADE_val_00000178.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 150510, "bbox": [1, 1, 682, 511], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 146351, "bbox": [1, 155, 484, 357], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 22994, "bbox": [467, 365, 216, 147], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 25502, "bbox": [531, 108, 152, 315], "iscrowd": 0}]}, {"image_id": "ADE_val_00000179", "file_name": "ADE_val_00000179.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 84126, "bbox": [0, 0, 682, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 35974, "bbox": [165, 287, 465, 225], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 37671, "bbox": [64, 1, 619, 182], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 4701, "bbox": [361, 399, 116, 52], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 9258, "bbox": [397, 469, 286, 43], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 25264, "bbox": [276, 66, 248, 381], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5764, "bbox": [455, 449, 227, 38], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2106, "bbox": [635, 401, 47, 54], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 982, "bbox": [444, 210, 33, 35], "iscrowd": 0}, {"id": 1966326, "category_id": 23, "area": 960, "bbox": [404, 207, 32, 34], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 10499, "bbox": [388, 91, 110, 200], "iscrowd": 0}, {"id": 6490104, "category_id": 25, "area": 3200, "bbox": [28, 214, 127, 85], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 2921, "bbox": [154, 349, 41, 124], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 31162, "bbox": [147, 108, 137, 319], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 127, "bbox": [434, 223, 11, 21], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 2735, "bbox": [363, 207, 33, 122], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 3476, "bbox": [546, 168, 108, 35], "iscrowd": 0}, {"id": 8192255, "category_id": 44, "area": 2871, "bbox": [49, 152, 55, 83], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 2005, "bbox": [400, 245, 77, 36], "iscrowd": 0}, {"id": 1679090, "category_id": 68, "area": 904, "bbox": [405, 96, 35, 30], "iscrowd": 0}, {"id": 47095, "category_id": 68, "area": 1161, "bbox": [442, 139, 44, 30], "iscrowd": 0}, {"id": 703487, "category_id": 68, "area": 2377, "bbox": [402, 173, 82, 36], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 3032, "bbox": [161, 0, 58, 69], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 10201, "bbox": [546, 230, 112, 105], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 18829, "bbox": [47, 280, 128, 232], "iscrowd": 0}, {"id": 15034636, "category_id": 93, "area": 15037, "bbox": [297, 112, 66, 317], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 1298, "bbox": [101, 175, 49, 48], "iscrowd": 0}, {"id": 264959, "category_id": 109, "area": 2437, "bbox": [15, 183, 60, 74], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 5012, "bbox": [159, 253, 66, 166], "iscrowd": 0}]}, {"image_id": "ADE_val_00000180", "file_name": "ADE_val_00000180.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 125926, "bbox": [0, 0, 683, 433], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8690, "bbox": [0, 417, 682, 94], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 31012, "bbox": [5, 119, 667, 392], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1184, "bbox": [660, 321, 22, 146], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 20091, "bbox": [66, 22, 157, 145], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1538, "bbox": [289, 151, 52, 60], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3841, "bbox": [383, 147, 107, 57], "iscrowd": 0}, {"id": 1882087, "category_id": 40, "area": 5231, "bbox": [499, 153, 129, 55], "iscrowd": 0}, {"id": 311807, "category_id": 40, "area": 4679, "bbox": [300, 205, 88, 79], "iscrowd": 0}, {"id": 642559, "category_id": 40, "area": 7393, "bbox": [450, 211, 110, 102], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 3056, "bbox": [474, 194, 152, 108], "iscrowd": 0}, {"id": 16776711, "category_id": 58, "area": 1372, "bbox": [345, 185, 121, 89], "iscrowd": 0}, {"id": 16309518, "category_id": 58, "area": 7957, "bbox": [425, 205, 192, 114], "iscrowd": 0}, {"id": 16776192, "category_id": 58, "area": 6338, "bbox": [319, 177, 129, 107], "iscrowd": 0}]}, {"image_id": "ADE_val_00000181", "file_name": "ADE_val_00000181.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 16700, "bbox": [0, 4, 256, 201], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8521, "bbox": [0, 203, 256, 53], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3050, "bbox": [1, 0, 254, 21], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 6684, "bbox": [52, 164, 162, 71], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 5223, "bbox": [51, 132, 190, 106], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1367, "bbox": [145, 43, 46, 73], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1640, "bbox": [228, 150, 28, 63], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 3510, "bbox": [121, 39, 70, 120], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1251, "bbox": [224, 40, 23, 60], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 10157, "bbox": [23, 33, 86, 161], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 268, "bbox": [161, 150, 25, 16], "iscrowd": 0}, {"id": 2406140, "category_id": 40, "area": 426, "bbox": [179, 140, 33, 25], "iscrowd": 0}, {"id": 52466, "category_id": 40, "area": 411, "bbox": [142, 142, 33, 22], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 225, "bbox": [5, 120, 15, 17], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 3991, "bbox": [1, 133, 52, 86], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 83, "bbox": [132, 149, 17, 10], "iscrowd": 0}, {"id": 16775445, "category_id": 58, "area": 283, "bbox": [199, 151, 30, 14], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 686, "bbox": [8, 82, 35, 29], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 174, "bbox": [23, 111, 9, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00000182", "file_name": "ADE_val_00000182.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 169748, "bbox": [0, 0, 802, 433], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 15094, "bbox": [337, 392, 249, 119], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 57829, "bbox": [1, 332, 428, 179], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 27746, "bbox": [410, 17, 243, 240], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 27766, "bbox": [656, 109, 141, 232], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 36820, "bbox": [349, 1, 209, 388], "iscrowd": 0}, {"id": 17663, "category_id": 19, "area": 28889, "bbox": [560, 1, 225, 334], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3947, "bbox": [580, 258, 41, 156], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2258, "bbox": [251, 77, 45, 53], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 35266, "bbox": [552, 334, 250, 177], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2580, "bbox": [723, 259, 66, 99], "iscrowd": 0}]}, {"image_id": "ADE_val_00000183", "file_name": "ADE_val_00000183.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 64088, "bbox": [1, 1, 682, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 48767, "bbox": [37, 156, 646, 356], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 195184, "bbox": [113, 9, 533, 502], "iscrowd": 0}, {"id": 16720853, "category_id": 8, "area": 25254, "bbox": [562, 9, 120, 271], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6968, "bbox": [439, 103, 143, 94], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 3005, "bbox": [450, 2, 142, 76], "iscrowd": 0}]}, {"image_id": "ADE_val_00000184", "file_name": "ADE_val_00000184.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 108942, "bbox": [1, 25, 509, 476], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 47460, "bbox": [0, 535, 512, 234], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 43726, "bbox": [1, 1, 510, 137], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 95808, "bbox": [1, 412, 509, 356], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5600, "bbox": [374, 138, 135, 76], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 35775, "bbox": [367, 213, 144, 323], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 8637, "bbox": [63, 229, 92, 101], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 5285, "bbox": [337, 0, 86, 187], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 6685, "bbox": [20, 438, 126, 82], "iscrowd": 0}, {"id": 16580096, "category_id": 58, "area": 714, "bbox": [136, 438, 30, 53], "iscrowd": 0}, {"id": 16765184, "category_id": 58, "area": 4345, "bbox": [150, 429, 102, 59], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 6250, "bbox": [252, 398, 81, 94], "iscrowd": 0}]}, {"image_id": "ADE_val_00000185", "file_name": "ADE_val_00000185.png", "segments_info": [{"id": 3289680, "category_id": 4, "area": 22543, "bbox": [1, 397, 630, 114], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 29162, "bbox": [1, 110, 681, 95], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 77534, "bbox": [0, 0, 682, 117], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 110365, "bbox": [22, 255, 659, 256], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 20694, "bbox": [181, 113, 288, 84], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 3195, "bbox": [414, 292, 127, 40], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2432, "bbox": [549, 216, 39, 110], "iscrowd": 0}, {"id": 4128920, "category_id": 13, "area": 14243, "bbox": [1, 237, 155, 274], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1820, "bbox": [194, 280, 84, 68], "iscrowd": 0}, {"id": 5047807, "category_id": 16, "area": 76, "bbox": [231, 249, 13, 6], "iscrowd": 0}, {"id": 3932415, "category_id": 16, "area": 430, "bbox": [178, 262, 45, 12], "iscrowd": 0}, {"id": 6361319, "category_id": 16, "area": 375, "bbox": [445, 242, 40, 32], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1032, "bbox": [286, 283, 40, 63], "iscrowd": 0}, {"id": 21435, "category_id": 20, "area": 304, "bbox": [195, 242, 29, 16], "iscrowd": 0}, {"id": 995786, "category_id": 20, "area": 293, "bbox": [273, 248, 21, 24], "iscrowd": 0}, {"id": 19684, "category_id": 20, "area": 693, "bbox": [273, 277, 42, 61], "iscrowd": 0}, {"id": 11187, "category_id": 20, "area": 490, "bbox": [513, 245, 35, 38], "iscrowd": 0}, {"id": 1660124, "category_id": 20, "area": 469, "bbox": [488, 240, 27, 30], "iscrowd": 0}, {"id": 19645, "category_id": 20, "area": 468, "bbox": [431, 243, 24, 32], "iscrowd": 0}, {"id": 14530, "category_id": 20, "area": 747, "bbox": [244, 243, 31, 39], "iscrowd": 0}, {"id": 601556, "category_id": 20, "area": 435, "bbox": [208, 258, 40, 23], "iscrowd": 0}, {"id": 18882, "category_id": 20, "area": 207, "bbox": [222, 273, 38, 10], "iscrowd": 0}, {"id": 20198, "category_id": 20, "area": 1411, "bbox": [205, 290, 45, 61], "iscrowd": 0}, {"id": 1124824, "category_id": 20, "area": 562, "bbox": [172, 284, 31, 56], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 26389, "bbox": [181, 191, 501, 79], "iscrowd": 0}, {"id": 52991, "category_id": 33, "area": 11845, "bbox": [0, 189, 181, 103], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 4191, "bbox": [0, 357, 151, 98], "iscrowd": 0}, {"id": 655288, "category_id": 70, "area": 661, "bbox": [351, 277, 23, 46], "iscrowd": 0}, {"id": 65504, "category_id": 70, "area": 574, "bbox": [401, 271, 78, 24], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 198, "bbox": [56, 337, 16, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00000186", "file_name": "ADE_val_00000186.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 17505, "bbox": [0, 0, 240, 164], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9301, "bbox": [0, 108, 239, 72], "iscrowd": 0}]}, {"image_id": "ADE_val_00000187", "file_name": "ADE_val_00000187.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 26827, "bbox": [0, 0, 290, 255], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2670, "bbox": [190, 0, 100, 53], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 11721, "bbox": [47, 135, 156, 119], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2859, "bbox": [47, 66, 59, 62], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6729, "bbox": [49, 86, 142, 99], "iscrowd": 0}]}, {"image_id": "ADE_val_00000188", "file_name": "ADE_val_00000188.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 24728, "bbox": [0, 0, 300, 178], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14798, "bbox": [0, 118, 300, 96], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 697, "bbox": [150, 64, 34, 40], "iscrowd": 0}, {"id": 3873686, "category_id": 13, "area": 944, "bbox": [93, 62, 33, 52], "iscrowd": 0}, {"id": 2104244, "category_id": 13, "area": 1645, "bbox": [188, 63, 43, 85], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1418, "bbox": [268, 17, 19, 87], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1016, "bbox": [116, 103, 50, 66], "iscrowd": 0}, {"id": 5570787, "category_id": 16, "area": 2231, "bbox": [46, 127, 96, 76], "iscrowd": 0}, {"id": 4391159, "category_id": 16, "area": 439, "bbox": [0, 107, 62, 13], "iscrowd": 0}, {"id": 4855535, "category_id": 16, "area": 1921, "bbox": [92, 194, 149, 19], "iscrowd": 0}, {"id": 5115875, "category_id": 16, "area": 285, "bbox": [169, 94, 34, 11], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2167, "bbox": [16, 121, 65, 84], "iscrowd": 0}, {"id": 2175451, "category_id": 20, "area": 1054, "bbox": [10, 180, 62, 33], "iscrowd": 0}, {"id": 11968, "category_id": 20, "area": 1570, "bbox": [128, 126, 59, 72], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2731, "bbox": [46, 15, 57, 49], "iscrowd": 0}, {"id": 3409151, "category_id": 23, "area": 3162, "bbox": [151, 14, 64, 51], "iscrowd": 0}]}, {"image_id": "ADE_val_00000189", "file_name": "ADE_val_00000189.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 5794, "bbox": [2, 0, 251, 35], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 742, "bbox": [198, 0, 86, 11], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3062, "bbox": [10, 0, 289, 87], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 4719, "bbox": [0, 30, 300, 27], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 4889, "bbox": [0, 54, 147, 141], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 16725, "bbox": [0, 56, 299, 150], "iscrowd": 0}, {"id": 65311, "category_id": 52, "area": 21769, "bbox": [4, 50, 269, 147], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 258, "bbox": [40, 73, 16, 27], "iscrowd": 0}, {"id": 5184413, "category_id": 13, "area": 254, "bbox": [23, 81, 17, 34], "iscrowd": 0}, {"id": 2359462, "category_id": 13, "area": 128, "bbox": [158, 49, 8, 28], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 116, "bbox": [116, 27, 22, 8], "iscrowd": 0}, {"id": 14050816, "category_id": 21, "area": 163, "bbox": [225, 32, 23, 11], "iscrowd": 0}, {"id": 15100928, "category_id": 21, "area": 104, "bbox": [162, 24, 19, 9], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1980, "bbox": [43, 25, 68, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00000190", "file_name": "ADE_val_00000190.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 5034, "bbox": [171, 0, 392, 46], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 103698, "bbox": [0, 0, 564, 218], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 4016, "bbox": [320, 199, 165, 43], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 32424, "bbox": [0, 245, 564, 63], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 10857, "bbox": [106, 168, 223, 82], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 524, "bbox": [77, 202, 31, 35], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 4096, "bbox": [453, 207, 111, 47], "iscrowd": 0}, {"id": 914847, "category_id": 77, "area": 2309, "bbox": [327, 225, 116, 25], "iscrowd": 0}, {"id": 1245085, "category_id": 77, "area": 4174, "bbox": [116, 203, 119, 49], "iscrowd": 0}, {"id": 327587, "category_id": 77, "area": 186, "bbox": [88, 246, 45, 5], "iscrowd": 0}]}, {"image_id": "ADE_val_00000191", "file_name": "ADE_val_00000191.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 5812, "bbox": [87, 38, 45, 148], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2870, "bbox": [72, 183, 84, 49], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7031, "bbox": [0, 0, 228, 37], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 4895, "bbox": [58, 42, 36, 191], "iscrowd": 0}, {"id": 6429183, "category_id": 25, "area": 7239, "bbox": [0, 31, 68, 202], "iscrowd": 0}, {"id": 4784383, "category_id": 25, "area": 4699, "bbox": [132, 37, 30, 195], "iscrowd": 0}, {"id": 3080443, "category_id": 25, "area": 9881, "bbox": [167, 21, 61, 212], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 465, "bbox": [180, 44, 21, 26], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 3525, "bbox": [0, 117, 49, 115], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 170, "bbox": [103, 30, 11, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00000192", "file_name": "ADE_val_00000192.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 31392, "bbox": [1, 0, 398, 220], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17222, "bbox": [16, 198, 343, 102], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 472, "bbox": [247, 1, 117, 8], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1980, "bbox": [2, 199, 26, 101], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 8538, "bbox": [294, 123, 105, 139], "iscrowd": 0}, {"id": 14741760, "category_id": 63, "area": 7354, "bbox": [298, 46, 101, 100], "iscrowd": 0}, {"id": 14870294, "category_id": 63, "area": 9555, "bbox": [150, 48, 144, 86], "iscrowd": 0}, {"id": 16772123, "category_id": 63, "area": 8294, "bbox": [155, 123, 140, 106], "iscrowd": 0}, {"id": 16185600, "category_id": 63, "area": 5304, "bbox": [187, 213, 96, 87], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1587, "bbox": [20, 241, 49, 44], "iscrowd": 0}, {"id": 47083, "category_id": 68, "area": 339, "bbox": [214, 69, 17, 21], "iscrowd": 0}, {"id": 39668, "category_id": 68, "area": 315, "bbox": [167, 71, 15, 22], "iscrowd": 0}, {"id": 44536, "category_id": 68, "area": 137, "bbox": [252, 64, 9, 17], "iscrowd": 0}, {"id": 1084659, "category_id": 68, "area": 271, "bbox": [271, 63, 15, 19], "iscrowd": 0}, {"id": 366591, "category_id": 68, "area": 218, "bbox": [311, 66, 14, 17], "iscrowd": 0}, {"id": 35839, "category_id": 68, "area": 484, "bbox": [355, 57, 21, 30], "iscrowd": 0}, {"id": 42484, "category_id": 68, "area": 331, "bbox": [337, 89, 18, 22], "iscrowd": 0}, {"id": 49407, "category_id": 68, "area": 273, "bbox": [359, 91, 15, 23], "iscrowd": 0}, {"id": 40168, "category_id": 68, "area": 896, "bbox": [61, 109, 29, 35], "iscrowd": 0}, {"id": 898543, "category_id": 68, "area": 1083, "bbox": [53, 58, 32, 38], "iscrowd": 0}, {"id": 36095, "category_id": 68, "area": 824, "bbox": [82, 152, 31, 32], "iscrowd": 0}, {"id": 38911, "category_id": 68, "area": 598, "bbox": [35, 105, 19, 41], "iscrowd": 0}, {"id": 298751, "category_id": 68, "area": 511, "bbox": [96, 110, 19, 29], "iscrowd": 0}, {"id": 631807, "category_id": 68, "area": 874, "bbox": [40, 156, 32, 35], "iscrowd": 0}, {"id": 631777, "category_id": 68, "area": 392, "bbox": [97, 64, 15, 29], "iscrowd": 0}, {"id": 887807, "category_id": 68, "area": 501, "bbox": [30, 65, 20, 32], "iscrowd": 0}, {"id": 567295, "category_id": 68, "area": 934, "bbox": [157, 147, 42, 28], "iscrowd": 0}, {"id": 41471, "category_id": 68, "area": 812, "bbox": [316, 236, 39, 35], "iscrowd": 0}, {"id": 34297, "category_id": 68, "area": 793, "bbox": [364, 271, 35, 29], "iscrowd": 0}, {"id": 46079, "category_id": 68, "area": 680, "bbox": [206, 144, 36, 22], "iscrowd": 0}, {"id": 1216229, "category_id": 68, "area": 676, "bbox": [331, 254, 36, 30], "iscrowd": 0}, {"id": 36863, "category_id": 68, "area": 387, "bbox": [255, 154, 29, 18], "iscrowd": 0}, {"id": 889314, "category_id": 68, "area": 313, "bbox": [359, 264, 23, 28], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 4836, "bbox": [149, 100, 250, 199], "iscrowd": 0}]}, {"image_id": "ADE_val_00000193", "file_name": "ADE_val_00000193.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 11184, "bbox": [0, 135, 529, 167], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 19940, "bbox": [2, 233, 527, 125], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 22394, "bbox": [0, 0, 529, 147], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1961, "bbox": [89, 269, 335, 43], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 131513, "bbox": [4, 0, 502, 336], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 325, "bbox": [17, 219, 23, 22], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 170, "bbox": [149, 195, 15, 13], "iscrowd": 0}, {"id": 3145983, "category_id": 23, "area": 177, "bbox": [150, 211, 12, 16], "iscrowd": 0}, {"id": 2425079, "category_id": 23, "area": 210, "bbox": [352, 196, 15, 14], "iscrowd": 0}, {"id": 4791039, "category_id": 23, "area": 175, "bbox": [354, 213, 11, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00000194", "file_name": "ADE_val_00000194.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 11072, "bbox": [236, 0, 275, 121], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 177560, "bbox": [0, 0, 511, 417], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 7427, "bbox": [24, 378, 136, 112], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 148055, "bbox": [0, 343, 511, 339], "iscrowd": 0}]}, {"image_id": "ADE_val_00000195", "file_name": "ADE_val_00000195.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 89557, "bbox": [0, 0, 615, 461], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 18325, "bbox": [200, 377, 415, 84], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4477, "bbox": [262, 0, 201, 26], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 26129, "bbox": [274, 66, 131, 213], "iscrowd": 0}, {"id": 14537686, "category_id": 9, "area": 4939, "bbox": [435, 56, 25, 223], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 35351, "bbox": [178, 0, 90, 451], "iscrowd": 0}, {"id": 1449467, "category_id": 19, "area": 40546, "bbox": [450, 0, 107, 438], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 21973, "bbox": [51, 22, 96, 291], "iscrowd": 0}, {"id": 1905132, "category_id": 23, "area": 3718, "bbox": [2, 186, 52, 80], "iscrowd": 0}, {"id": 2361595, "category_id": 23, "area": 3442, "bbox": [2, 81, 46, 86], "iscrowd": 0}, {"id": 3213823, "category_id": 23, "area": 3157, "bbox": [2, 0, 47, 77], "iscrowd": 0}, {"id": 1704191, "category_id": 23, "area": 893, "bbox": [98, 3, 29, 45], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 10446, "bbox": [266, 308, 190, 107], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1690, "bbox": [264, 269, 46, 53], "iscrowd": 0}, {"id": 1165311, "category_id": 40, "area": 2163, "bbox": [294, 266, 62, 53], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 9327, "bbox": [84, 344, 117, 117], "iscrowd": 0}]}, {"image_id": "ADE_val_00000196", "file_name": "ADE_val_00000196.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 173344, "bbox": [0, 0, 639, 344], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 13102, "bbox": [453, 2, 181, 379], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 11014, "bbox": [0, 445, 639, 34], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 26053, "bbox": [2, 373, 637, 98], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 77874, "bbox": [3, 206, 635, 252], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 490, "bbox": [90, 128, 20, 39], "iscrowd": 0}]}, {"image_id": "ADE_val_00000197", "file_name": "ADE_val_00000197.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 98188, "bbox": [0, 0, 639, 277], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 56126, "bbox": [25, 211, 614, 159], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7647, "bbox": [275, 0, 364, 30], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3673, "bbox": [150, 40, 48, 95], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 10721, "bbox": [28, 81, 179, 225], "iscrowd": 0}, {"id": 3670664, "category_id": 13, "area": 454, "bbox": [441, 112, 26, 28], "iscrowd": 0}, {"id": 3866800, "category_id": 13, "area": 526, "bbox": [388, 116, 21, 38], "iscrowd": 0}, {"id": 5046441, "category_id": 13, "area": 3095, "bbox": [339, 116, 59, 104], "iscrowd": 0}, {"id": 4784259, "category_id": 13, "area": 580, "bbox": [493, 104, 24, 45], "iscrowd": 0}, {"id": 2883705, "category_id": 13, "area": 3447, "bbox": [421, 105, 79, 121], "iscrowd": 0}, {"id": 4261247, "category_id": 13, "area": 9544, "bbox": [509, 40, 93, 231], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1162, "bbox": [393, 149, 70, 63], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 690, "bbox": [328, 145, 26, 52], "iscrowd": 0}, {"id": 481223, "category_id": 20, "area": 848, "bbox": [463, 150, 43, 72], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1160, "bbox": [328, 55, 22, 58], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 3917, "bbox": [426, 63, 99, 41], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 633, "bbox": [510, 162, 30, 27], "iscrowd": 0}, {"id": 10558191, "category_id": 120, "area": 249, "bbox": [260, 186, 19, 17], "iscrowd": 0}, {"id": 12651510, "category_id": 120, "area": 178, "bbox": [246, 185, 14, 18], "iscrowd": 0}, {"id": 11731195, "category_id": 120, "area": 51, "bbox": [224, 184, 12, 6], "iscrowd": 0}, {"id": 11075839, "category_id": 120, "area": 34, "bbox": [237, 184, 14, 4], "iscrowd": 0}, {"id": 11930367, "category_id": 120, "area": 463, "bbox": [209, 188, 23, 23], "iscrowd": 0}, {"id": 10748159, "category_id": 120, "area": 354, "bbox": [231, 187, 19, 23], "iscrowd": 0}, {"id": 9765115, "category_id": 120, "area": 155, "bbox": [203, 185, 21, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00000198", "file_name": "ADE_val_00000198.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 103419, "bbox": [0, 98, 914, 244], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 160961, "bbox": [0, 304, 914, 207], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 112933, "bbox": [0, 0, 914, 181], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 374, "bbox": [419, 198, 29, 17], "iscrowd": 0}, {"id": 14216657, "category_id": 9, "area": 497, "bbox": [309, 193, 35, 20], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4275, "bbox": [57, 214, 48, 92], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 764, "bbox": [522, 299, 32, 28], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 8307, "bbox": [339, 284, 188, 68], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 428, "bbox": [56, 304, 48, 11], "iscrowd": 0}, {"id": 9502975, "category_id": 122, "area": 2811, "bbox": [250, 312, 70, 46], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 2042, "bbox": [188, 16, 151, 71], "iscrowd": 0}]}, {"image_id": "ADE_val_00000199", "file_name": "ADE_val_00000199.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 37163, "bbox": [0, 68, 350, 150], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 29766, "bbox": [0, 0, 350, 181], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 2958, "bbox": [0, 205, 350, 27], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2907, "bbox": [35, 207, 256, 25], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2047, "bbox": [113, 193, 172, 32], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2131, "bbox": [286, 170, 64, 46], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 104, "bbox": [61, 209, 5, 22], "iscrowd": 0}, {"id": 16718666, "category_id": 94, "area": 69, "bbox": [49, 203, 4, 18], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 3376, "bbox": [138, 49, 194, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00000200", "file_name": "ADE_val_00000200.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 7698, "bbox": [1, 1, 247, 55], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 12527, "bbox": [1, 2, 255, 95], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 540, "bbox": [0, 157, 32, 30], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 1724, "bbox": [124, 20, 64, 42], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 19898, "bbox": [1, 168, 255, 87], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 16877, "bbox": [1, 54, 254, 132], "iscrowd": 0}]}, {"image_id": "ADE_val_00000201", "file_name": "ADE_val_00000201.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 268849, "bbox": [0, 1, 1241, 351], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 79871, "bbox": [0, 219, 1242, 292], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 12162, "bbox": [1, 393, 1241, 118], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 5384, "bbox": [332, 327, 347, 79], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 22945, "bbox": [661, 420, 581, 91], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 231077, "bbox": [1, 187, 1241, 295], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 7769, "bbox": [57, 342, 346, 51], "iscrowd": 0}]}, {"image_id": "ADE_val_00000202", "file_name": "ADE_val_00000202.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 49608, "bbox": [2, 1, 254, 241], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 1051, "bbox": [3, 241, 252, 15], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 13433, "bbox": [42, 177, 214, 79], "iscrowd": 0}, {"id": 13329937, "category_id": 21, "area": 377, "bbox": [0, 215, 14, 38], "iscrowd": 0}]}, {"image_id": "ADE_val_00000203", "file_name": "ADE_val_00000203.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 32563, "bbox": [2, 0, 254, 256], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9121, "bbox": [52, 0, 204, 149], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 22773, "bbox": [70, 1, 142, 205], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 131, "bbox": [183, 233, 12, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00000204", "file_name": "ADE_val_00000204.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6409, "bbox": [23, 221, 233, 35], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 52788, "bbox": [0, 1, 256, 238], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4641, "bbox": [2, 1, 254, 33], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 460, "bbox": [2, 236, 40, 20], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 97, "bbox": [57, 212, 8, 22], "iscrowd": 0}, {"id": 4726410, "category_id": 13, "area": 111, "bbox": [82, 214, 9, 16], "iscrowd": 0}, {"id": 2953371, "category_id": 13, "area": 92, "bbox": [97, 211, 9, 17], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 83, "bbox": [149, 169, 6, 55], "iscrowd": 0}]}, {"image_id": "ADE_val_00000205", "file_name": "ADE_val_00000205.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 46634, "bbox": [0, 0, 256, 221], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 2493, "bbox": [96, 1, 106, 36], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 12671, "bbox": [2, 193, 254, 63], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 1000, "bbox": [0, 226, 47, 30], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 131, "bbox": [3, 248, 28, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00000206", "file_name": "ADE_val_00000206.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 41483, "bbox": [2, 1, 254, 178], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 20519, "bbox": [0, 168, 256, 88], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1229, "bbox": [0, 162, 251, 22], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 158, "bbox": [247, 159, 9, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00000207", "file_name": "ADE_val_00000207.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 52973, "bbox": [2, 0, 254, 254], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 4287, "bbox": [2, 222, 254, 34], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 92, "bbox": [121, 245, 12, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00000208", "file_name": "ADE_val_00000208.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 49902, "bbox": [2, 2, 254, 253], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 12535, "bbox": [2, 1, 254, 182], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 322, "bbox": [2, 244, 57, 12], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 1243, "bbox": [8, 248, 247, 8], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 462, "bbox": [103, 223, 44, 27], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 174, "bbox": [23, 192, 12, 61], "iscrowd": 0}]}, {"image_id": "ADE_val_00000209", "file_name": "ADE_val_00000209.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 42321, "bbox": [2, 1, 254, 234], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 328, "bbox": [226, 0, 30, 20], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 3804, "bbox": [113, 157, 143, 73], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6359, "bbox": [0, 27, 241, 206], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 7636, "bbox": [0, 185, 256, 71], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 423, "bbox": [117, 80, 18, 31], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1256, "bbox": [18, 175, 69, 49], "iscrowd": 0}, {"id": 57855, "category_id": 54, "area": 972, "bbox": [165, 158, 42, 37], "iscrowd": 0}]}, {"image_id": "ADE_val_00000210", "file_name": "ADE_val_00000210.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 25374, "bbox": [0, 8, 256, 200], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 23895, "bbox": [2, 1, 254, 117], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 9717, "bbox": [2, 214, 254, 42], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1493, "bbox": [0, 206, 256, 12], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1880, "bbox": [2, 193, 254, 17], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 846, "bbox": [65, 171, 121, 24], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 517, "bbox": [109, 207, 39, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00000211", "file_name": "ADE_val_00000211.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 49820, "bbox": [0, 0, 256, 223], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 191, "bbox": [73, 0, 119, 3], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 1620, "bbox": [0, 235, 92, 21], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 602, "bbox": [2, 221, 50, 15], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 153, "bbox": [189, 118, 9, 21], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1943, "bbox": [48, 208, 98, 39], "iscrowd": 0}, {"id": 13717780, "category_id": 21, "area": 257, "bbox": [236, 209, 20, 18], "iscrowd": 0}, {"id": 11432960, "category_id": 21, "area": 5919, "bbox": [89, 211, 167, 45], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 810, "bbox": [182, 168, 64, 15], "iscrowd": 0}, {"id": 5169409, "category_id": 87, "area": 1145, "bbox": [34, 151, 67, 20], "iscrowd": 0}, {"id": 2680064, "category_id": 87, "area": 630, "bbox": [2, 156, 32, 21], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 510, "bbox": [103, 140, 60, 10], "iscrowd": 0}, {"id": 1960559, "category_id": 124, "area": 1204, "bbox": [181, 145, 56, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00000212", "file_name": "ADE_val_00000212.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 61331, "bbox": [2, 1, 254, 255], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1977, "bbox": [149, 167, 106, 39], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 1412, "bbox": [189, 83, 33, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00000213", "file_name": "ADE_val_00000213.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 46121, "bbox": [0, 1, 256, 225], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7097, "bbox": [138, 97, 108, 117], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 1361, "bbox": [0, 224, 256, 32], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 414, "bbox": [0, 214, 37, 13], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 255, "bbox": [0, 35, 22, 15], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 484, "bbox": [235, 207, 21, 26], "iscrowd": 0}, {"id": 15102727, "category_id": 21, "area": 954, "bbox": [173, 212, 47, 27], "iscrowd": 0}, {"id": 14969600, "category_id": 21, "area": 1730, "bbox": [126, 239, 130, 17], "iscrowd": 0}, {"id": 13007124, "category_id": 21, "area": 223, "bbox": [151, 214, 24, 12], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 5968, "bbox": [33, 201, 147, 55], "iscrowd": 0}]}, {"image_id": "ADE_val_00000214", "file_name": "ADE_val_00000214.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 27865, "bbox": [0, 61, 279, 166], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 11820, "bbox": [17, 151, 239, 76], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 22715, "bbox": [0, 0, 279, 95], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 141, "bbox": [89, 156, 19, 13], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 519, "bbox": [131, 116, 18, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00000215", "file_name": "ADE_val_00000215.png", "segments_info": [{"id": 5273720, "category_id": 6, "area": 86014, "bbox": [0, 1, 693, 144], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 9759, "bbox": [79, 133, 282, 74], "iscrowd": 0}, {"id": 16315903, "category_id": 9, "area": 3508, "bbox": [0, 82, 90, 118], "iscrowd": 0}, {"id": 14537727, "category_id": 9, "area": 13674, "bbox": [361, 90, 333, 200], "iscrowd": 0}, {"id": 14995680, "category_id": 9, "area": 15711, "bbox": [455, 101, 220, 174], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4890, "bbox": [7, 134, 141, 111], "iscrowd": 0}, {"id": 4793267, "category_id": 13, "area": 27018, "bbox": [2, 195, 340, 194], "iscrowd": 0}, {"id": 4660346, "category_id": 13, "area": 12869, "bbox": [2, 304, 296, 86], "iscrowd": 0}, {"id": 4522136, "category_id": 13, "area": 5876, "bbox": [110, 236, 253, 135], "iscrowd": 0}, {"id": 3475879, "category_id": 13, "area": 8770, "bbox": [340, 147, 121, 191], "iscrowd": 0}, {"id": 3150758, "category_id": 13, "area": 8843, "bbox": [216, 143, 136, 161], "iscrowd": 0}, {"id": 2298277, "category_id": 13, "area": 6375, "bbox": [144, 132, 92, 123], "iscrowd": 0}, {"id": 2293908, "category_id": 13, "area": 4608, "bbox": [46, 146, 97, 92], "iscrowd": 0}, {"id": 3604653, "category_id": 13, "area": 12591, "bbox": [311, 288, 382, 99], "iscrowd": 0}, {"id": 4264834, "category_id": 13, "area": 2868, "bbox": [323, 168, 53, 97], "iscrowd": 0}, {"id": 5840789, "category_id": 13, "area": 12952, "bbox": [459, 129, 151, 137], "iscrowd": 0}, {"id": 5177508, "category_id": 13, "area": 1355, "bbox": [297, 193, 39, 58], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 13253, "bbox": [361, 263, 273, 107], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 6308, "bbox": [577, 273, 115, 84], "iscrowd": 0}, {"id": 9426252, "category_id": 116, "area": 6366, "bbox": [409, 298, 125, 71], "iscrowd": 0}]}, {"image_id": "ADE_val_00000216", "file_name": "ADE_val_00000216.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 25811, "bbox": [0, 105, 449, 383], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 71896, "bbox": [0, 325, 449, 274], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 76003, "bbox": [0, 0, 449, 218], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 903, "bbox": [371, 155, 32, 46], "iscrowd": 0}, {"id": 14864895, "category_id": 9, "area": 1724, "bbox": [409, 115, 39, 66], "iscrowd": 0}, {"id": 14998513, "category_id": 9, "area": 364, "bbox": [85, 197, 19, 28], "iscrowd": 0}, {"id": 15782911, "category_id": 9, "area": 516, "bbox": [59, 180, 24, 33], "iscrowd": 0}, {"id": 16766704, "category_id": 9, "area": 751, "bbox": [26, 159, 29, 42], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6787, "bbox": [245, 201, 128, 244], "iscrowd": 0}, {"id": 3677834, "category_id": 13, "area": 2053, "bbox": [243, 229, 63, 146], "iscrowd": 0}, {"id": 5447846, "category_id": 13, "area": 642, "bbox": [215, 241, 58, 56], "iscrowd": 0}, {"id": 5046449, "category_id": 13, "area": 8436, "bbox": [2, 185, 126, 189], "iscrowd": 0}, {"id": 3016347, "category_id": 13, "area": 6164, "bbox": [309, 244, 116, 176], "iscrowd": 0}, {"id": 3342472, "category_id": 13, "area": 2352, "bbox": [403, 197, 45, 70], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 10979, "bbox": [0, 269, 118, 203], "iscrowd": 0}, {"id": 13106960, "category_id": 32, "area": 4103, "bbox": [95, 268, 75, 94], "iscrowd": 0}, {"id": 16187150, "category_id": 32, "area": 15759, "bbox": [294, 258, 154, 327], "iscrowd": 0}, {"id": 16382487, "category_id": 32, "area": 11367, "bbox": [331, 271, 118, 278], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 671, "bbox": [160, 150, 6, 235], "iscrowd": 0}, {"id": 16716594, "category_id": 94, "area": 1363, "bbox": [275, 103, 7, 273], "iscrowd": 0}, {"id": 16711727, "category_id": 94, "area": 2941, "bbox": [124, 70, 12, 369], "iscrowd": 0}, {"id": 16715038, "category_id": 94, "area": 7705, "bbox": [339, 0, 20, 593], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 2133, "bbox": [260, 374, 39, 76], "iscrowd": 0}]}, {"image_id": "ADE_val_00000217", "file_name": "ADE_val_00000217.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 97130, "bbox": [0, 0, 793, 356], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 85272, "bbox": [0, 361, 793, 150], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 5634, "bbox": [0, 339, 177, 55], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 801, "bbox": [713, 178, 26, 51], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 182394, "bbox": [148, 62, 565, 376], "iscrowd": 0}, {"id": 15270143, "category_id": 81, "area": 22983, "bbox": [700, 59, 93, 316], "iscrowd": 0}]}, {"image_id": "ADE_val_00000218", "file_name": "ADE_val_00000218.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 7061, "bbox": [367, 358, 133, 72], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 17440, "bbox": [0, 71, 113, 276], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9199, "bbox": [0, 0, 473, 226], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17595, "bbox": [0, 291, 473, 139], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 937, "bbox": [435, 236, 45, 76], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 30809, "bbox": [109, 102, 387, 281], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 9988, "bbox": [2, 309, 169, 108], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 6166, "bbox": [25, 82, 51, 234], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2983, "bbox": [60, 240, 73, 71], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 5885, "bbox": [159, 237, 201, 81], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1789, "bbox": [46, 314, 67, 41], "iscrowd": 0}, {"id": 2478570, "category_id": 40, "area": 718, "bbox": [169, 238, 37, 33], "iscrowd": 0}, {"id": 2481124, "category_id": 40, "area": 1022, "bbox": [224, 249, 52, 25], "iscrowd": 0}, {"id": 51455, "category_id": 40, "area": 776, "bbox": [272, 250, 37, 25], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 14863, "bbox": [135, 349, 278, 76], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 780, "bbox": [109, 309, 59, 38], "iscrowd": 0}, {"id": 16048896, "category_id": 58, "area": 1051, "bbox": [104, 326, 49, 26], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 1919, "bbox": [217, 276, 78, 40], "iscrowd": 0}, {"id": 6749952, "category_id": 65, "area": 1728, "bbox": [147, 275, 72, 35], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 8544, "bbox": [466, 1, 33, 374], "iscrowd": 0}, {"id": 15952896, "category_id": 73, "area": 687, "bbox": [379, 0, 40, 22], "iscrowd": 0}, {"id": 16201731, "category_id": 73, "area": 794, "bbox": [245, 1, 33, 28], "iscrowd": 0}, {"id": 16732418, "category_id": 73, "area": 1195, "bbox": [185, 0, 45, 34], "iscrowd": 0}, {"id": 16736541, "category_id": 73, "area": 1160, "bbox": [106, 1, 44, 37], "iscrowd": 0}, {"id": 16725760, "category_id": 73, "area": 1244, "bbox": [57, 2, 38, 39], "iscrowd": 0}, {"id": 16398095, "category_id": 73, "area": 1490, "bbox": [7, 0, 41, 44], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 61903, "bbox": [5, 21, 478, 322], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 830, "bbox": [416, 309, 54, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00000219", "file_name": "ADE_val_00000219.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 19838, "bbox": [0, 0, 299, 76], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2374, "bbox": [0, 59, 87, 147], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 6644, "bbox": [0, 201, 299, 39], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 30477, "bbox": [0, 56, 299, 160], "iscrowd": 0}, {"id": 16711935, "category_id": 80, "area": 12025, "bbox": [89, 149, 186, 89], "iscrowd": 0}]}, {"image_id": "ADE_val_00000220", "file_name": "ADE_val_00000220.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 16295, "bbox": [0, 0, 286, 101], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5465, "bbox": [82, 148, 127, 106], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 39, "bbox": [122, 46, 8, 5], "iscrowd": 0}, {"id": 3080358, "category_id": 13, "area": 242, "bbox": [117, 82, 19, 23], "iscrowd": 0}, {"id": 5636257, "category_id": 13, "area": 816, "bbox": [166, 103, 33, 57], "iscrowd": 0}, {"id": 4855216, "category_id": 13, "area": 420, "bbox": [240, 114, 27, 24], "iscrowd": 0}, {"id": 5505197, "category_id": 13, "area": 154, "bbox": [67, 77, 15, 13], "iscrowd": 0}, {"id": 2687128, "category_id": 13, "area": 3090, "bbox": [73, 141, 50, 110], "iscrowd": 0}, {"id": 3742900, "category_id": 13, "area": 98, "bbox": [37, 69, 11, 11], "iscrowd": 0}, {"id": 2818196, "category_id": 13, "area": 94, "bbox": [7, 64, 11, 10], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1475, "bbox": [100, 184, 36, 70], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 1156, "bbox": [156, 121, 39, 73], "iscrowd": 0}, {"id": 13369599, "category_id": 89, "area": 9480, "bbox": [0, 88, 151, 165], "iscrowd": 0}, {"id": 11932664, "category_id": 89, "area": 578, "bbox": [4, 75, 50, 25], "iscrowd": 0}, {"id": 13112831, "category_id": 89, "area": 7576, "bbox": [0, 122, 78, 131], "iscrowd": 0}, {"id": 14811391, "category_id": 89, "area": 2555, "bbox": [220, 77, 66, 69], "iscrowd": 0}, {"id": 13697279, "category_id": 89, "area": 4266, "bbox": [150, 67, 105, 103], "iscrowd": 0}, {"id": 12124394, "category_id": 89, "area": 2247, "bbox": [95, 60, 99, 52], "iscrowd": 0}, {"id": 14031594, "category_id": 89, "area": 1451, "bbox": [57, 54, 91, 42], "iscrowd": 0}, {"id": 15139070, "category_id": 89, "area": 1126, "bbox": [26, 49, 80, 38], "iscrowd": 0}, {"id": 12124397, "category_id": 89, "area": 791, "bbox": [3, 46, 71, 33], "iscrowd": 0}, {"id": 13831679, "category_id": 89, "area": 64, "bbox": [56, 44, 28, 5], "iscrowd": 0}, {"id": 15075054, "category_id": 89, "area": 119, "bbox": [85, 45, 26, 9], "iscrowd": 0}, {"id": 15007976, "category_id": 89, "area": 114, "bbox": [113, 51, 31, 7], "iscrowd": 0}, {"id": 14950138, "category_id": 89, "area": 98, "bbox": [147, 56, 26, 7], "iscrowd": 0}, {"id": 14026239, "category_id": 89, "area": 235, "bbox": [195, 58, 31, 14], "iscrowd": 0}, {"id": 13962469, "category_id": 89, "area": 100, "bbox": [260, 68, 17, 10], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 232, "bbox": [137, 85, 14, 22], "iscrowd": 0}, {"id": 16467976, "category_id": 144, "area": 435, "bbox": [190, 97, 22, 22], "iscrowd": 0}, {"id": 16727573, "category_id": 144, "area": 453, "bbox": [257, 110, 26, 28], "iscrowd": 0}, {"id": 16737821, "category_id": 144, "area": 595, "bbox": [50, 133, 36, 38], "iscrowd": 0}]}, {"image_id": "ADE_val_00000221", "file_name": "ADE_val_00000221.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 56975, "bbox": [93, 82, 469, 218], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 71034, "bbox": [0, 1, 640, 228], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 54478, "bbox": [0, 22, 639, 311], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 44015, "bbox": [0, 302, 639, 123], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 4401, "bbox": [123, 352, 332, 21], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 34962, "bbox": [0, 239, 638, 133], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 1559, "bbox": [214, 321, 83, 32], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1124, "bbox": [516, 223, 21, 132], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 383, "bbox": [259, 197, 13, 121], "iscrowd": 0}]}, {"image_id": "ADE_val_00000222", "file_name": "ADE_val_00000222.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 2603, "bbox": [36, 151, 147, 40], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 39084, "bbox": [0, 1, 301, 149], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 20232, "bbox": [2, 56, 299, 232], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 20208, "bbox": [0, 173, 301, 228], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 25998, "bbox": [8, 194, 293, 207], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 9901, "bbox": [2, 316, 297, 84], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 172, "bbox": [66, 209, 13, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00000223", "file_name": "ADE_val_00000223.png", "segments_info": [{"id": 4655103, "category_id": 25, "area": 70318, "bbox": [1, 2, 509, 679], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 7118, "bbox": [83, 361, 330, 78], "iscrowd": 0}, {"id": 2160137, "category_id": 42, "area": 5911, "bbox": [44, 496, 383, 45], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 1425, "bbox": [3, 574, 29, 60], "iscrowd": 0}, {"id": 11780369, "category_id": 148, "area": 3618, "bbox": [443, 557, 63, 79], "iscrowd": 0}, {"id": 12435975, "category_id": 148, "area": 9524, "bbox": [55, 559, 163, 80], "iscrowd": 0}, {"id": 13357571, "category_id": 148, "area": 10545, "bbox": [239, 559, 175, 84], "iscrowd": 0}]}, {"image_id": "ADE_val_00000224", "file_name": "ADE_val_00000224.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 17487, "bbox": [0, 0, 256, 82], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 1343, "bbox": [115, 129, 56, 125], "iscrowd": 0}]}, {"image_id": "ADE_val_00000225", "file_name": "ADE_val_00000225.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 41284, "bbox": [0, 0, 682, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 30560, "bbox": [61, 210, 296, 301], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1912, "bbox": [610, 2, 71, 51], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 39771, "bbox": [305, 1, 293, 207], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 29987, "bbox": [145, 0, 186, 302], "iscrowd": 0}, {"id": 14286615, "category_id": 32, "area": 64016, "bbox": [1, 0, 150, 511], "iscrowd": 0}, {"id": 16377626, "category_id": 32, "area": 126264, "bbox": [201, 91, 479, 418], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 546, "bbox": [513, 128, 35, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00000226", "file_name": "ADE_val_00000226.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 150175, "bbox": [0, 39, 648, 304], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 59885, "bbox": [0, 0, 647, 150], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 68773, "bbox": [0, 317, 647, 123], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 234, "bbox": [73, 299, 11, 35], "iscrowd": 0}, {"id": 5972379, "category_id": 13, "area": 493, "bbox": [17, 293, 16, 49], "iscrowd": 0}, {"id": 3607683, "category_id": 13, "area": 563, "bbox": [1, 296, 18, 55], "iscrowd": 0}, {"id": 5245108, "category_id": 13, "area": 142, "bbox": [162, 295, 9, 24], "iscrowd": 0}, {"id": 2162833, "category_id": 13, "area": 113, "bbox": [120, 296, 8, 25], "iscrowd": 0}, {"id": 2628746, "category_id": 13, "area": 106, "bbox": [137, 294, 5, 26], "iscrowd": 0}, {"id": 4259996, "category_id": 13, "area": 99, "bbox": [85, 300, 6, 22], "iscrowd": 0}, {"id": 5704615, "category_id": 13, "area": 282, "bbox": [55, 302, 11, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00000227", "file_name": "ADE_val_00000227.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 93448, "bbox": [0, 64, 639, 315], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 124077, "bbox": [0, 234, 639, 255], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 68339, "bbox": [0, 0, 639, 163], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1512, "bbox": [249, 179, 32, 91], "iscrowd": 0}, {"id": 3152550, "category_id": 13, "area": 340, "bbox": [325, 194, 14, 43], "iscrowd": 0}, {"id": 3671961, "category_id": 13, "area": 331, "bbox": [305, 189, 15, 48], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 3194, "bbox": [557, 235, 79, 85], "iscrowd": 0}, {"id": 13494556, "category_id": 32, "area": 925, "bbox": [112, 224, 57, 45], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 3871, "bbox": [541, 332, 80, 61], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1145, "bbox": [526, 78, 58, 38], "iscrowd": 0}, {"id": 1022456, "category_id": 83, "area": 248, "bbox": [466, 119, 28, 16], "iscrowd": 0}, {"id": 1681633, "category_id": 83, "area": 162, "bbox": [439, 134, 21, 13], "iscrowd": 0}, {"id": 1559026, "category_id": 83, "area": 148, "bbox": [195, 130, 22, 13], "iscrowd": 0}, {"id": 1027327, "category_id": 83, "area": 213, "bbox": [168, 116, 23, 17], "iscrowd": 0}, {"id": 48895, "category_id": 83, "area": 1046, "bbox": [81, 73, 58, 38], "iscrowd": 0}, {"id": 112127, "category_id": 83, "area": 701, "bbox": [2, 33, 35, 35], "iscrowd": 0}, {"id": 1556735, "category_id": 83, "area": 109, "bbox": [402, 88, 15, 12], "iscrowd": 0}, {"id": 48127, "category_id": 83, "area": 132, "bbox": [237, 86, 17, 11], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 1477, "bbox": [567, 218, 51, 52], "iscrowd": 0}]}, {"image_id": "ADE_val_00000228", "file_name": "ADE_val_00000228.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 10861, "bbox": [0, 0, 253, 76], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 15421, "bbox": [2, 136, 298, 88], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3460, "bbox": [62, 74, 140, 76], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6937, "bbox": [0, 99, 259, 87], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 16346, "bbox": [0, 0, 300, 180], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 167, "bbox": [259, 180, 31, 7], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 4753, "bbox": [81, 105, 91, 69], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 498, "bbox": [196, 132, 20, 37], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 441, "bbox": [227, 181, 28, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00000229", "file_name": "ADE_val_00000229.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 78981, "bbox": [0, 0, 451, 476], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 8308, "bbox": [1, 688, 326, 67], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 130, "bbox": [310, 0, 14, 13], "iscrowd": 0}, {"id": 3744163, "category_id": 13, "area": 1475, "bbox": [43, 440, 35, 65], "iscrowd": 0}, {"id": 3735726, "category_id": 13, "area": 1396, "bbox": [0, 430, 23, 81], "iscrowd": 0}, {"id": 2363001, "category_id": 13, "area": 1123, "bbox": [168, 425, 41, 49], "iscrowd": 0}, {"id": 2490517, "category_id": 13, "area": 982, "bbox": [27, 435, 24, 73], "iscrowd": 0}, {"id": 2293917, "category_id": 13, "area": 843, "bbox": [17, 419, 21, 89], "iscrowd": 0}, {"id": 3410838, "category_id": 13, "area": 764, "bbox": [94, 469, 34, 32], "iscrowd": 0}, {"id": 5046445, "category_id": 13, "area": 716, "bbox": [151, 425, 30, 53], "iscrowd": 0}, {"id": 2825629, "category_id": 13, "area": 665, "bbox": [73, 468, 31, 35], "iscrowd": 0}, {"id": 2097304, "category_id": 13, "area": 657, "bbox": [87, 433, 25, 43], "iscrowd": 0}, {"id": 3998385, "category_id": 13, "area": 658, "bbox": [105, 440, 28, 50], "iscrowd": 0}, {"id": 4653214, "category_id": 13, "area": 526, "bbox": [69, 437, 21, 48], "iscrowd": 0}, {"id": 4587693, "category_id": 13, "area": 510, "bbox": [397, 424, 20, 42], "iscrowd": 0}, {"id": 2818218, "category_id": 13, "area": 492, "bbox": [124, 428, 18, 43], "iscrowd": 0}, {"id": 2424963, "category_id": 13, "area": 474, "bbox": [138, 438, 19, 39], "iscrowd": 0}, {"id": 4197240, "category_id": 13, "area": 445, "bbox": [217, 433, 31, 32], "iscrowd": 0}, {"id": 3604633, "category_id": 13, "area": 434, "bbox": [128, 469, 20, 30], "iscrowd": 0}, {"id": 5374076, "category_id": 13, "area": 445, "bbox": [406, 443, 22, 30], "iscrowd": 0}, {"id": 5115268, "category_id": 13, "area": 258, "bbox": [294, 420, 21, 20], "iscrowd": 0}, {"id": 5119867, "category_id": 13, "area": 229, "bbox": [376, 443, 15, 21], "iscrowd": 0}, {"id": 5965693, "category_id": 13, "area": 241, "bbox": [48, 424, 15, 27], "iscrowd": 0}, {"id": 2359434, "category_id": 13, "area": 203, "bbox": [310, 428, 20, 16], "iscrowd": 0}, {"id": 4261262, "category_id": 13, "area": 173, "bbox": [327, 430, 11, 34], "iscrowd": 0}, {"id": 3604623, "category_id": 13, "area": 121, "bbox": [151, 427, 11, 19], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 50559, "bbox": [0, 495, 512, 260], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 1855, "bbox": [44, 0, 300, 15], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 8878, "bbox": [0, 376, 264, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00000230", "file_name": "ADE_val_00000230.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 15391, "bbox": [0, 74, 398, 84], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9728, "bbox": [0, 127, 399, 138], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 30728, "bbox": [0, 0, 399, 94], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6571, "bbox": [8, 115, 116, 135], "iscrowd": 0}, {"id": 5308569, "category_id": 13, "area": 3225, "bbox": [81, 130, 84, 101], "iscrowd": 0}, {"id": 3145867, "category_id": 13, "area": 1742, "bbox": [55, 96, 40, 82], "iscrowd": 0}, {"id": 3415694, "category_id": 13, "area": 2278, "bbox": [149, 122, 50, 99], "iscrowd": 0}, {"id": 5186216, "category_id": 13, "area": 1563, "bbox": [204, 124, 51, 75], "iscrowd": 0}, {"id": 5898374, "category_id": 13, "area": 4958, "bbox": [312, 93, 50, 172], "iscrowd": 0}, {"id": 5701795, "category_id": 13, "area": 1714, "bbox": [277, 108, 39, 80], "iscrowd": 0}, {"id": 4063380, "category_id": 13, "area": 4855, "bbox": [366, 96, 33, 166], "iscrowd": 0}, {"id": 5119630, "category_id": 13, "area": 355, "bbox": [207, 112, 24, 36], "iscrowd": 0}, {"id": 5439870, "category_id": 13, "area": 826, "bbox": [186, 107, 28, 62], "iscrowd": 0}, {"id": 3801257, "category_id": 13, "area": 101, "bbox": [280, 122, 11, 15], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1221, "bbox": [76, 202, 48, 37], "iscrowd": 0}, {"id": 218321, "category_id": 20, "area": 299, "bbox": [196, 170, 9, 44], "iscrowd": 0}, {"id": 1322727, "category_id": 20, "area": 1239, "bbox": [206, 166, 41, 45], "iscrowd": 0}, {"id": 1333972, "category_id": 20, "area": 949, "bbox": [142, 184, 32, 42], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 14055, "bbox": [0, 166, 333, 99], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 2421, "bbox": [89, 7, 98, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00000231", "file_name": "ADE_val_00000231.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 5803, "bbox": [211, 1, 188, 66], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3699, "bbox": [225, 73, 175, 226], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 38584, "bbox": [76, 32, 323, 268], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 671, "bbox": [332, 3, 35, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00000232", "file_name": "ADE_val_00000232.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 2657, "bbox": [65, 76, 89, 53], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 31559, "bbox": [0, 1, 300, 123], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 593, "bbox": [96, 108, 145, 17], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 25966, "bbox": [0, 121, 300, 104], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 2192, "bbox": [0, 104, 300, 25], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 263, "bbox": [1, 128, 60, 12], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 1232, "bbox": [170, 202, 117, 22], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 2478, "bbox": [153, 123, 147, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00000233", "file_name": "ADE_val_00000233.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 162698, "bbox": [1, 36, 510, 703], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 1219, "bbox": [1, 251, 98, 25], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 42050, "bbox": [0, 0, 502, 116], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 19555, "bbox": [311, 1, 200, 395], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 38449, "bbox": [0, 114, 511, 378], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 87693, "bbox": [1, 91, 510, 521], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 17350, "bbox": [0, 111, 386, 477], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 2743, "bbox": [184, 714, 258, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00000234", "file_name": "ADE_val_00000234.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 81936, "bbox": [284, 71, 879, 343], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 74158, "bbox": [359, 0, 810, 230], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 270368, "bbox": [0, 0, 1170, 449], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 167601, "bbox": [1, 313, 1168, 198], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 57, "bbox": [350, 329, 10, 15], "iscrowd": 0}, {"id": 15883008, "category_id": 88, "area": 50, "bbox": [331, 320, 9, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000235", "file_name": "ADE_val_00000235.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 90312, "bbox": [0, 0, 349, 464], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 27374, "bbox": [96, 0, 212, 173], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 39505, "bbox": [88, 293, 261, 172], "iscrowd": 0}]}, {"image_id": "ADE_val_00000236", "file_name": "ADE_val_00000236.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 135636, "bbox": [0, 0, 533, 387], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3675, "bbox": [238, 311, 69, 89], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 17248, "bbox": [166, 0, 209, 133], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 8771, "bbox": [84, 10, 51, 329], "iscrowd": 0}, {"id": 3932415, "category_id": 43, "area": 8355, "bbox": [413, 11, 47, 325], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 692, "bbox": [236, 294, 74, 17], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 15806, "bbox": [0, 306, 265, 94], "iscrowd": 0}, {"id": 65452, "category_id": 70, "area": 15433, "bbox": [282, 305, 250, 94], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 145, "bbox": [267, 261, 10, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00000237", "file_name": "ADE_val_00000237.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 110182, "bbox": [2, 0, 509, 278], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 11798, "bbox": [359, 296, 152, 153], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 66309, "bbox": [146, 54, 186, 691], "iscrowd": 0}, {"id": 5184122, "category_id": 13, "area": 2135, "bbox": [448, 173, 62, 117], "iscrowd": 0}]}, {"image_id": "ADE_val_00000238", "file_name": "ADE_val_00000238.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 17773, "bbox": [0, 48, 539, 186], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 116741, "bbox": [0, 0, 539, 288], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3002, "bbox": [71, 1, 382, 42], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 65535, "bbox": [0, 268, 539, 136], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 6430, "bbox": [0, 214, 304, 124], "iscrowd": 0}]}, {"image_id": "ADE_val_00000239", "file_name": "ADE_val_00000239.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 24001, "bbox": [2, 0, 597, 81], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 123467, "bbox": [0, 43, 599, 356], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 6103, "bbox": [0, 88, 598, 51], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 324, "bbox": [245, 70, 21, 20], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 205, "bbox": [465, 55, 16, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000240", "file_name": "ADE_val_00000240.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 220718, "bbox": [0, 0, 510, 604], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9676, "bbox": [42, 519, 439, 85], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 36546, "bbox": [115, 0, 283, 202], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 11649, "bbox": [54, 524, 176, 71], "iscrowd": 0}, {"id": 16677405, "category_id": 96, "area": 11326, "bbox": [299, 526, 176, 68], "iscrowd": 0}]}, {"image_id": "ADE_val_00000241", "file_name": "ADE_val_00000241.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 95504, "bbox": [0, 0, 532, 399], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6617, "bbox": [0, 0, 316, 32], "iscrowd": 0}, {"id": 15466240, "category_id": 123, "area": 51956, "bbox": [0, 196, 327, 203], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 50904, "bbox": [173, 31, 273, 367], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 3000, "bbox": [458, 19, 60, 65], "iscrowd": 0}]}, {"image_id": "ADE_val_00000242", "file_name": "ADE_val_00000242.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 19347, "bbox": [2, 0, 381, 204], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 35009, "bbox": [2, 129, 381, 127], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4226, "bbox": [205, 1, 178, 26], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3532, "bbox": [70, 82, 61, 116], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 722, "bbox": [121, 138, 36, 52], "iscrowd": 0}]}, {"image_id": "ADE_val_00000243", "file_name": "ADE_val_00000243.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 9340, "bbox": [572, 230, 110, 136], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 54989, "bbox": [0, 0, 678, 213], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 102323, "bbox": [0, 2, 682, 263], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 113132, "bbox": [0, 278, 682, 232], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 13320, "bbox": [577, 306, 105, 201], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 12621, "bbox": [1, 238, 262, 59], "iscrowd": 0}, {"id": 2268649, "category_id": 33, "area": 6418, "bbox": [0, 377, 95, 134], "iscrowd": 0}, {"id": 46571, "category_id": 33, "area": 10085, "bbox": [347, 230, 275, 56], "iscrowd": 0}]}, {"image_id": "ADE_val_00000244", "file_name": "ADE_val_00000244.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 85815, "bbox": [2, 0, 566, 393], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 56323, "bbox": [2, 326, 566, 184], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 23164, "bbox": [70, 1, 496, 92], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 23092, "bbox": [73, 154, 307, 342], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 24853, "bbox": [394, 98, 157, 191], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 177, "bbox": [301, 265, 24, 41], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1782, "bbox": [369, 125, 25, 148], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2420, "bbox": [332, 251, 55, 85], "iscrowd": 0}, {"id": 942039, "category_id": 20, "area": 1023, "bbox": [251, 252, 52, 50], "iscrowd": 0}, {"id": 17841, "category_id": 20, "area": 3106, "bbox": [436, 260, 74, 135], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1367, "bbox": [523, 241, 38, 45], "iscrowd": 0}, {"id": 2425067, "category_id": 23, "area": 238, "bbox": [214, 236, 12, 22], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 2634, "bbox": [195, 189, 40, 100], "iscrowd": 0}, {"id": 3409912, "category_id": 25, "area": 12594, "bbox": [21, 173, 65, 229], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 8610, "bbox": [454, 270, 114, 129], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 291, "bbox": [210, 173, 18, 36], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 392, "bbox": [165, 256, 49, 13], "iscrowd": 0}, {"id": 49407, "category_id": 40, "area": 1041, "bbox": [187, 266, 41, 32], "iscrowd": 0}, {"id": 50430, "category_id": 40, "area": 865, "bbox": [151, 269, 39, 32], "iscrowd": 0}, {"id": 42751, "category_id": 40, "area": 382, "bbox": [263, 270, 21, 24], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 616, "bbox": [92, 245, 25, 51], "iscrowd": 0}, {"id": 16765184, "category_id": 58, "area": 630, "bbox": [106, 245, 28, 44], "iscrowd": 0}, {"id": 16769792, "category_id": 58, "area": 2113, "bbox": [119, 242, 75, 54], "iscrowd": 0}, {"id": 15061771, "category_id": 58, "area": 1094, "bbox": [87, 237, 99, 66], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 422, "bbox": [37, 270, 38, 13], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 2892, "bbox": [247, 2, 75, 86], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 346, "bbox": [349, 265, 30, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00000245", "file_name": "ADE_val_00000245.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 56126, "bbox": [0, 0, 631, 362], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 85076, "bbox": [1, 251, 630, 260], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 69823, "bbox": [119, 45, 430, 377], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 13809, "bbox": [16, 146, 126, 156], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 30256, "bbox": [308, 1, 221, 154], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 4903, "bbox": [28, 56, 76, 123], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 1031, "bbox": [169, 75, 99, 61], "iscrowd": 0}, {"id": 16776960, "category_id": 58, "area": 5928, "bbox": [176, 82, 143, 64], "iscrowd": 0}, {"id": 16764416, "category_id": 58, "area": 1345, "bbox": [146, 92, 40, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00000246", "file_name": "ADE_val_00000246.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 98574, "bbox": [0, 1, 688, 452], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 46822, "bbox": [2, 321, 684, 133], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 58501, "bbox": [2, 1, 641, 147], "iscrowd": 0}, {"id": 6094592, "category_id": 107, "area": 7048, "bbox": [296, 148, 90, 187], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 9292, "bbox": [299, 274, 119, 101], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 18486, "bbox": [386, 145, 142, 185], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1873, "bbox": [226, 289, 62, 66], "iscrowd": 0}, {"id": 7078143, "category_id": 16, "area": 10208, "bbox": [466, 324, 165, 129], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 2868, "bbox": [383, 145, 146, 42], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1185, "bbox": [530, 286, 54, 42], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3624, "bbox": [219, 185, 48, 82], "iscrowd": 0}, {"id": 1966316, "category_id": 23, "area": 2736, "bbox": [544, 187, 57, 53], "iscrowd": 0}, {"id": 4987389, "category_id": 23, "area": 893, "bbox": [158, 272, 35, 36], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 10311, "bbox": [44, 161, 104, 124], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 475, "bbox": [249, 258, 27, 35], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 28209, "bbox": [3, 149, 206, 295], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 1548, "bbox": [328, 42, 85, 111], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 2072, "bbox": [563, 246, 51, 74], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 1637, "bbox": [596, 238, 39, 75], "iscrowd": 0}, {"id": 786659, "category_id": 109, "area": 1321, "bbox": [217, 330, 41, 52], "iscrowd": 0}]}, {"image_id": "ADE_val_00000247", "file_name": "ADE_val_00000247.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 30665, "bbox": [0, 38, 350, 193], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3485, "bbox": [0, 205, 338, 26], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 32730, "bbox": [0, 0, 350, 160], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1592, "bbox": [149, 78, 47, 43], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 168, "bbox": [82, 169, 8, 29], "iscrowd": 0}, {"id": 4128543, "category_id": 15, "area": 108, "bbox": [255, 169, 6, 22], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 3556, "bbox": [84, 126, 177, 21], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 7681, "bbox": [50, 182, 251, 41], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 7, "bbox": [112, 152, 4, 2], "iscrowd": 0}, {"id": 48874, "category_id": 83, "area": 23, "bbox": [152, 151, 7, 4], "iscrowd": 0}, {"id": 42239, "category_id": 83, "area": 15, "bbox": [188, 151, 5, 4], "iscrowd": 0}, {"id": 50925, "category_id": 83, "area": 28, "bbox": [229, 151, 7, 5], "iscrowd": 0}]}, {"image_id": "ADE_val_00000248", "file_name": "ADE_val_00000248.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 31311, "bbox": [0, 0, 255, 201], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1084, "bbox": [21, 133, 199, 64], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 1081, "bbox": [51, 158, 34, 40], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 570, "bbox": [227, 169, 29, 33], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 968, "bbox": [0, 146, 22, 59], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 664, "bbox": [227, 133, 16, 50], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 15146, "bbox": [0, 189, 256, 66], "iscrowd": 0}]}, {"image_id": "ADE_val_00000249", "file_name": "ADE_val_00000249.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 221122, "bbox": [0, 13, 682, 498], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 119856, "bbox": [0, 0, 682, 383], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6724, "bbox": [0, 321, 81, 188], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 372, "bbox": [550, 50, 23, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00000250", "file_name": "ADE_val_00000250.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 65839, "bbox": [0, 0, 472, 351], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 15367, "bbox": [122, 247, 350, 104], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3351, "bbox": [218, 0, 252, 23], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 16198, "bbox": [268, 67, 160, 117], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3439, "bbox": [231, 110, 72, 49], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6416, "bbox": [127, 204, 133, 134], "iscrowd": 0}, {"id": 4587775, "category_id": 16, "area": 548, "bbox": [212, 190, 49, 14], "iscrowd": 0}, {"id": 3801343, "category_id": 16, "area": 886, "bbox": [327, 193, 55, 21], "iscrowd": 0}, {"id": 7210495, "category_id": 16, "area": 9405, "bbox": [265, 253, 126, 96], "iscrowd": 0}, {"id": 6035689, "category_id": 16, "area": 3384, "bbox": [289, 211, 99, 45], "iscrowd": 0}, {"id": 4923391, "category_id": 16, "area": 257, "bbox": [429, 197, 42, 10], "iscrowd": 0}, {"id": 7083503, "category_id": 16, "area": 871, "bbox": [433, 213, 39, 90], "iscrowd": 0}, {"id": 7147519, "category_id": 16, "area": 2080, "bbox": [439, 224, 33, 125], "iscrowd": 0}, {"id": 7015394, "category_id": 16, "area": 1189, "bbox": [457, 238, 14, 111], "iscrowd": 0}, {"id": 7210239, "category_id": 16, "area": 433, "bbox": [340, 182, 42, 13], "iscrowd": 0}, {"id": 6692607, "category_id": 16, "area": 1014, "bbox": [416, 185, 51, 71], "iscrowd": 0}, {"id": 4391146, "category_id": 16, "area": 549, "bbox": [428, 206, 42, 81], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 774, "bbox": [256, 233, 37, 55], "iscrowd": 0}, {"id": 15910931, "category_id": 111, "area": 471, "bbox": [385, 233, 20, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00000251", "file_name": "ADE_val_00000251.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 88044, "bbox": [0, 120, 767, 261], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8908, "bbox": [88, 377, 680, 135], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 106640, "bbox": [0, 0, 767, 178], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 1643, "bbox": [119, 176, 134, 18], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 14046, "bbox": [64, 170, 135, 151], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 808, "bbox": [394, 252, 29, 56], "iscrowd": 0}, {"id": 5439613, "category_id": 13, "area": 1412, "bbox": [369, 292, 45, 46], "iscrowd": 0}, {"id": 2621615, "category_id": 13, "area": 153, "bbox": [319, 284, 19, 11], "iscrowd": 0}, {"id": 4983450, "category_id": 13, "area": 918, "bbox": [330, 293, 48, 73], "iscrowd": 0}, {"id": 5505154, "category_id": 13, "area": 435, "bbox": [450, 289, 21, 29], "iscrowd": 0}, {"id": 2953366, "category_id": 13, "area": 731, "bbox": [407, 283, 54, 56], "iscrowd": 0}, {"id": 4006041, "category_id": 13, "area": 4752, "bbox": [391, 288, 63, 112], "iscrowd": 0}, {"id": 2032002, "category_id": 13, "area": 5096, "bbox": [288, 296, 87, 138], "iscrowd": 0}, {"id": 5243778, "category_id": 13, "area": 20144, "bbox": [172, 301, 204, 210], "iscrowd": 0}, {"id": 5769396, "category_id": 13, "area": 290, "bbox": [239, 281, 21, 22], "iscrowd": 0}, {"id": 4849784, "category_id": 13, "area": 729, "bbox": [217, 295, 38, 53], "iscrowd": 0}, {"id": 2300547, "category_id": 13, "area": 711, "bbox": [198, 283, 29, 44], "iscrowd": 0}, {"id": 5047205, "category_id": 13, "area": 799, "bbox": [128, 283, 37, 46], "iscrowd": 0}, {"id": 4262313, "category_id": 13, "area": 272, "bbox": [81, 282, 23, 26], "iscrowd": 0}, {"id": 5308571, "category_id": 13, "area": 2376, "bbox": [82, 290, 96, 125], "iscrowd": 0}, {"id": 3932339, "category_id": 13, "area": 3059, "bbox": [148, 279, 69, 86], "iscrowd": 0}, {"id": 5374122, "category_id": 13, "area": 2706, "bbox": [0, 278, 45, 92], "iscrowd": 0}, {"id": 3804312, "category_id": 13, "area": 18745, "bbox": [0, 286, 143, 226], "iscrowd": 0}, {"id": 4659109, "category_id": 13, "area": 614, "bbox": [546, 286, 42, 72], "iscrowd": 0}, {"id": 3801731, "category_id": 13, "area": 3503, "bbox": [506, 284, 69, 82], "iscrowd": 0}, {"id": 2621596, "category_id": 13, "area": 920, "bbox": [588, 296, 75, 63], "iscrowd": 0}, {"id": 3866799, "category_id": 13, "area": 8139, "bbox": [567, 301, 127, 111], "iscrowd": 0}, {"id": 4197784, "category_id": 13, "area": 4846, "bbox": [708, 339, 60, 154], "iscrowd": 0}, {"id": 4332958, "category_id": 13, "area": 26519, "bbox": [402, 311, 229, 200], "iscrowd": 0}, {"id": 2883707, "category_id": 13, "area": 322, "bbox": [625, 288, 40, 54], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2202, "bbox": [741, 209, 15, 161], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 146, "bbox": [352, 323, 18, 14], "iscrowd": 0}, {"id": 5767423, "category_id": 16, "area": 93, "bbox": [377, 352, 17, 7], "iscrowd": 0}, {"id": 6686463, "category_id": 16, "area": 850, "bbox": [342, 376, 57, 23], "iscrowd": 0}, {"id": 3409407, "category_id": 16, "area": 176, "bbox": [127, 331, 22, 16], "iscrowd": 0}, {"id": 5182719, "category_id": 16, "area": 100, "bbox": [193, 341, 17, 13], "iscrowd": 0}, {"id": 6817022, "category_id": 16, "area": 770, "bbox": [132, 362, 109, 19], "iscrowd": 0}, {"id": 6102527, "category_id": 16, "area": 2081, "bbox": [93, 414, 83, 50], "iscrowd": 0}, {"id": 4653311, "category_id": 16, "area": 15, "bbox": [588, 341, 5, 6], "iscrowd": 0}, {"id": 4784383, "category_id": 16, "area": 157, "bbox": [573, 358, 15, 19], "iscrowd": 0}, {"id": 7279103, "category_id": 16, "area": 904, "bbox": [689, 391, 51, 27], "iscrowd": 0}, {"id": 3742445, "category_id": 16, "area": 4295, "bbox": [571, 449, 197, 59], "iscrowd": 0}, {"id": 3938047, "category_id": 16, "area": 1426, "bbox": [343, 433, 67, 54], "iscrowd": 0}, {"id": 6291699, "category_id": 16, "area": 179, "bbox": [539, 385, 30, 11], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 422, "bbox": [365, 337, 43, 16], "iscrowd": 0}, {"id": 17118, "category_id": 20, "area": 315, "bbox": [371, 360, 23, 17], "iscrowd": 0}, {"id": 14560, "category_id": 20, "area": 1113, "bbox": [389, 395, 40, 41], "iscrowd": 0}, {"id": 10460, "category_id": 20, "area": 1714, "bbox": [282, 387, 63, 46], "iscrowd": 0}, {"id": 1127094, "category_id": 20, "area": 3776, "bbox": [175, 473, 172, 38], "iscrowd": 0}, {"id": 154308, "category_id": 20, "area": 32, "bbox": [216, 326, 6, 10], "iscrowd": 0}, {"id": 10940, "category_id": 20, "area": 233, "bbox": [123, 321, 26, 13], "iscrowd": 0}, {"id": 1264608, "category_id": 20, "area": 876, "bbox": [136, 339, 56, 25], "iscrowd": 0}, {"id": 538312, "category_id": 20, "area": 620, "bbox": [201, 345, 40, 22], "iscrowd": 0}, {"id": 1334486, "category_id": 20, "area": 2717, "bbox": [160, 371, 82, 45], "iscrowd": 0}, {"id": 1401560, "category_id": 20, "area": 3976, "bbox": [0, 450, 71, 62], "iscrowd": 0}, {"id": 745174, "category_id": 20, "area": 1080, "bbox": [514, 365, 60, 21], "iscrowd": 0}, {"id": 19886, "category_id": 20, "area": 4726, "bbox": [583, 401, 120, 51], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 4276, "bbox": [0, 0, 220, 44], "iscrowd": 0}, {"id": 38903, "category_id": 83, "area": 3651, "bbox": [1, 115, 291, 40], "iscrowd": 0}, {"id": 46591, "category_id": 83, "area": 2475, "bbox": [114, 155, 258, 24], "iscrowd": 0}, {"id": 51185, "category_id": 83, "area": 6135, "bbox": [413, 73, 349, 45], "iscrowd": 0}, {"id": 1165811, "category_id": 83, "area": 1701, "bbox": [589, 131, 138, 19], "iscrowd": 0}, {"id": 47601, "category_id": 83, "area": 145, "bbox": [669, 157, 21, 8], "iscrowd": 0}, {"id": 39912, "category_id": 83, "area": 161, "bbox": [545, 138, 20, 10], "iscrowd": 0}, {"id": 37887, "category_id": 83, "area": 92, "bbox": [81, 150, 18, 6], "iscrowd": 0}, {"id": 569855, "category_id": 83, "area": 211, "bbox": [61, 50, 27, 11], "iscrowd": 0}, {"id": 501247, "category_id": 83, "area": 108, "bbox": [357, 150, 17, 9], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 611, "bbox": [727, 361, 25, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00000252", "file_name": "ADE_val_00000252.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 17061, "bbox": [0, 0, 300, 222], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7650, "bbox": [6, 131, 292, 90], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 926, "bbox": [5, 16, 85, 15], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3300, "bbox": [5, 18, 86, 52], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2213, "bbox": [0, 131, 49, 91], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3751, "bbox": [54, 59, 74, 119], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1551, "bbox": [0, 82, 63, 76], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2020, "bbox": [164, 122, 68, 100], "iscrowd": 0}]}, {"image_id": "ADE_val_00000253", "file_name": "ADE_val_00000253.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 157116, "bbox": [0, 0, 635, 428], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 74629, "bbox": [0, 306, 635, 205], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 8117, "bbox": [108, 0, 436, 52], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 11267, "bbox": [49, 237, 94, 227], "iscrowd": 0}, {"id": 2557863, "category_id": 13, "area": 10916, "bbox": [129, 158, 81, 231], "iscrowd": 0}, {"id": 5701803, "category_id": 13, "area": 8161, "bbox": [223, 173, 57, 229], "iscrowd": 0}, {"id": 3411617, "category_id": 13, "area": 8430, "bbox": [324, 181, 65, 228], "iscrowd": 0}, {"id": 2949252, "category_id": 13, "area": 13653, "bbox": [446, 230, 156, 228], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2102, "bbox": [555, 296, 61, 153], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 906, "bbox": [446, 206, 21, 73], "iscrowd": 0}]}, {"image_id": "ADE_val_00000254", "file_name": "ADE_val_00000254.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 19724, "bbox": [2, 0, 253, 163], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6964, "bbox": [2, 142, 253, 93], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 7110, "bbox": [117, 23, 68, 190], "iscrowd": 0}, {"id": 4129011, "category_id": 43, "area": 5565, "bbox": [204, 8, 51, 225], "iscrowd": 0}, {"id": 1576955, "category_id": 43, "area": 1589, "bbox": [171, 72, 29, 78], "iscrowd": 0}, {"id": 2366177, "category_id": 43, "area": 3311, "bbox": [51, 33, 46, 165], "iscrowd": 0}, {"id": 2949362, "category_id": 43, "area": 4421, "bbox": [83, 39, 50, 147], "iscrowd": 0}, {"id": 1641195, "category_id": 43, "area": 1705, "bbox": [242, 38, 13, 164], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 11316, "bbox": [0, 183, 255, 73], "iscrowd": 0}]}, {"image_id": "ADE_val_00000255", "file_name": "ADE_val_00000255.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 11285, "bbox": [0, 0, 420, 295], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5154, "bbox": [2, 281, 298, 43], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 18624, "bbox": [303, 1, 71, 323], "iscrowd": 0}, {"id": 1898752, "category_id": 15, "area": 13339, "bbox": [5, 0, 44, 314], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4278, "bbox": [318, 247, 102, 77], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1427, "bbox": [398, 77, 21, 72], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 12501, "bbox": [144, 21, 102, 161], "iscrowd": 0}, {"id": 2690303, "category_id": 25, "area": 532, "bbox": [227, 20, 76, 9], "iscrowd": 0}, {"id": 3674357, "category_id": 25, "area": 737, "bbox": [228, 80, 75, 10], "iscrowd": 0}, {"id": 5643263, "category_id": 25, "area": 1178, "bbox": [59, 159, 84, 20], "iscrowd": 0}, {"id": 5508095, "category_id": 25, "area": 935, "bbox": [58, 29, 86, 15], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 41870, "bbox": [49, 0, 257, 324], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2667, "bbox": [328, 266, 89, 57], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 816, "bbox": [254, 57, 38, 22], "iscrowd": 0}, {"id": 2227459, "category_id": 42, "area": 850, "bbox": [74, 10, 42, 22], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 5647, "bbox": [251, 114, 46, 144], "iscrowd": 0}]}, {"image_id": "ADE_val_00000256", "file_name": "ADE_val_00000256.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 22980, "bbox": [10, 0, 501, 645], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10807, "bbox": [269, 603, 243, 80], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2747, "bbox": [184, 0, 205, 26], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 86432, "bbox": [219, 51, 292, 607], "iscrowd": 0}, {"id": 16711451, "category_id": 36, "area": 101702, "bbox": [1, 1, 282, 682], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 4486, "bbox": [215, 28, 106, 55], "iscrowd": 0}]}, {"image_id": "ADE_val_00000257", "file_name": "ADE_val_00000257.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 33195, "bbox": [0, 0, 492, 375], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14254, "bbox": [18, 339, 461, 36], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9816, "bbox": [4, 0, 483, 23], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 401, "bbox": [156, 44, 22, 22], "iscrowd": 0}, {"id": 3146751, "category_id": 23, "area": 440, "bbox": [182, 45, 23, 20], "iscrowd": 0}, {"id": 3022057, "category_id": 23, "area": 806, "bbox": [255, 182, 29, 31], "iscrowd": 0}, {"id": 1511423, "category_id": 23, "area": 360, "bbox": [340, 195, 20, 18], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 84029, "bbox": [5, 56, 483, 294], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1226, "bbox": [61, 44, 65, 21], "iscrowd": 0}, {"id": 3145472, "category_id": 42, "area": 188, "bbox": [126, 90, 22, 10], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 234, "bbox": [217, 174, 28, 13], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 128, "bbox": [214, 129, 11, 30], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 2234, "bbox": [95, 164, 24, 129], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 139, "bbox": [223, 187, 10, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00000258", "file_name": "ADE_val_00000258.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 79978, "bbox": [0, 0, 798, 487], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 35780, "bbox": [163, 377, 636, 110], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 15868, "bbox": [234, 402, 306, 79], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 17092, "bbox": [0, 355, 140, 132], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 158129, "bbox": [163, 0, 565, 430], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 14503, "bbox": [2, 123, 101, 249], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 345, "bbox": [303, 112, 33, 12], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 1408, "bbox": [178, 263, 21, 102], "iscrowd": 0}, {"id": 16734464, "category_id": 93, "area": 871, "bbox": [170, 259, 16, 94], "iscrowd": 0}, {"id": 15305757, "category_id": 93, "area": 557, "bbox": [164, 258, 11, 96], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 5620, "bbox": [376, 341, 142, 74], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 2594, "bbox": [683, 374, 44, 68], "iscrowd": 0}, {"id": 8700763, "category_id": 116, "area": 2670, "bbox": [250, 299, 38, 75], "iscrowd": 0}, {"id": 8694862, "category_id": 116, "area": 2845, "bbox": [209, 300, 41, 75], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 174, "bbox": [362, 101, 11, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00000259", "file_name": "ADE_val_00000259.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 25335, "bbox": [2, 0, 254, 164], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 11052, "bbox": [2, 157, 253, 99], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 12147, "bbox": [0, 63, 178, 192], "iscrowd": 0}]}, {"image_id": "ADE_val_00000260", "file_name": "ADE_val_00000260.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 19012, "bbox": [2, 0, 253, 82], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 3971, "bbox": [2, 68, 254, 28], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 39882, "bbox": [0, 90, 256, 166], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 743, "bbox": [183, 196, 15, 57], "iscrowd": 0}, {"id": 16716096, "category_id": 94, "area": 419, "bbox": [201, 231, 19, 24], "iscrowd": 0}, {"id": 16711706, "category_id": 94, "area": 95, "bbox": [48, 246, 12, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00000261", "file_name": "ADE_val_00000261.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 871, "bbox": [3, 120, 251, 19], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 31642, "bbox": [2, 1, 253, 134], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 2313, "bbox": [2, 119, 254, 21], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 29007, "bbox": [2, 138, 253, 117], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 111, "bbox": [39, 137, 18, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00000262", "file_name": "ADE_val_00000262.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 711, "bbox": [9, 115, 110, 25], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 17087, "bbox": [0, 1, 255, 75], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 13262, "bbox": [2, 149, 253, 106], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 6559, "bbox": [0, 61, 255, 98], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 467, "bbox": [0, 222, 41, 33], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 22417, "bbox": [2, 69, 253, 161], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 801, "bbox": [50, 139, 193, 22], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 1160, "bbox": [197, 205, 48, 50], "iscrowd": 0}]}, {"image_id": "ADE_val_00000263", "file_name": "ADE_val_00000263.png", "segments_info": [{"id": 15132390, "category_id": 9, "area": 46035, "bbox": [47, 0, 636, 194], "iscrowd": 0}]}, {"image_id": "ADE_val_00000264", "file_name": "ADE_val_00000264.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 62112, "bbox": [486, 0, 196, 510], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 32509, "bbox": [1, 74, 584, 85], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 19652, "bbox": [410, 118, 168, 292], "iscrowd": 0}, {"id": 4194468, "category_id": 13, "area": 24772, "bbox": [0, 111, 245, 324], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 45470, "bbox": [0, 195, 239, 315], "iscrowd": 0}, {"id": 15657984, "category_id": 32, "area": 13337, "bbox": [423, 233, 142, 277], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 3958, "bbox": [586, 2, 58, 87], "iscrowd": 0}]}, {"image_id": "ADE_val_00000265", "file_name": "ADE_val_00000265.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 108885, "bbox": [0, 44, 646, 316], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 59259, "bbox": [2, 0, 645, 159], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 33393, "bbox": [15, 349, 631, 136], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 8861, "bbox": [445, 326, 201, 103], "iscrowd": 0}, {"id": 15014373, "category_id": 11, "area": 2443, "bbox": [193, 347, 105, 39], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 10673, "bbox": [40, 260, 156, 137], "iscrowd": 0}, {"id": 2625458, "category_id": 13, "area": 8287, "bbox": [262, 233, 129, 159], "iscrowd": 0}, {"id": 3473553, "category_id": 13, "area": 13366, "bbox": [0, 268, 142, 217], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 828, "bbox": [56, 231, 110, 30], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 749, "bbox": [475, 68, 30, 65], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 3940, "bbox": [284, 378, 76, 67], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 522, "bbox": [481, 305, 48, 70], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2587, "bbox": [165, 54, 128, 39], "iscrowd": 0}, {"id": 956671, "category_id": 83, "area": 285, "bbox": [40, 25, 24, 16], "iscrowd": 0}, {"id": 1415423, "category_id": 83, "area": 243, "bbox": [525, 18, 22, 15], "iscrowd": 0}, {"id": 50663, "category_id": 83, "area": 98, "bbox": [311, 54, 14, 10], "iscrowd": 0}, {"id": 1153535, "category_id": 83, "area": 63, "bbox": [148, 87, 13, 6], "iscrowd": 0}, {"id": 51711, "category_id": 83, "area": 51, "bbox": [24, 112, 11, 6], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 2720, "bbox": [241, 283, 52, 79], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 23796, "bbox": [278, 118, 172, 165], "iscrowd": 0}]}, {"image_id": "ADE_val_00000266", "file_name": "ADE_val_00000266.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 81032, "bbox": [0, 70, 682, 293], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 19996, "bbox": [0, 326, 682, 185], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 55562, "bbox": [0, 0, 682, 101], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5423, "bbox": [64, 148, 104, 77], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 14883, "bbox": [403, 441, 277, 70], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5186, "bbox": [576, 363, 106, 99], "iscrowd": 0}, {"id": 5379827, "category_id": 16, "area": 4816, "bbox": [500, 323, 136, 120], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 2138, "bbox": [40, 144, 29, 98], "iscrowd": 0}, {"id": 13567, "category_id": 19, "area": 1972, "bbox": [134, 160, 35, 64], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3822, "bbox": [603, 414, 79, 60], "iscrowd": 0}, {"id": 18098, "category_id": 20, "area": 2183, "bbox": [407, 292, 77, 96], "iscrowd": 0}, {"id": 21207, "category_id": 20, "area": 5847, "bbox": [212, 328, 115, 178], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 16952, "bbox": [86, 264, 448, 156], "iscrowd": 0}, {"id": 4842016, "category_id": 34, "area": 41645, "bbox": [70, 295, 343, 206], "iscrowd": 0}, {"id": 4849408, "category_id": 34, "area": 24657, "bbox": [0, 348, 170, 160], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 4886, "bbox": [375, 231, 97, 64], "iscrowd": 0}, {"id": 10485504, "category_id": 75, "area": 8794, "bbox": [228, 237, 118, 94], "iscrowd": 0}, {"id": 12511261, "category_id": 75, "area": 3499, "bbox": [133, 224, 86, 55], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 6814, "bbox": [2, 223, 84, 103], "iscrowd": 0}]}, {"image_id": "ADE_val_00000267", "file_name": "ADE_val_00000267.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 103580, "bbox": [1, 0, 766, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 69695, "bbox": [0, 295, 744, 216], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 48508, "bbox": [1, 0, 738, 104], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 8461, "bbox": [240, 124, 71, 185], "iscrowd": 0}, {"id": 15000274, "category_id": 9, "area": 21435, "bbox": [416, 107, 115, 226], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 12250, "bbox": [355, 324, 182, 184], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 3097, "bbox": [307, 122, 27, 196], "iscrowd": 0}, {"id": 927999, "category_id": 19, "area": 3002, "bbox": [225, 128, 25, 166], "iscrowd": 0}, {"id": 1788927, "category_id": 19, "area": 5756, "bbox": [384, 114, 39, 219], "iscrowd": 0}, {"id": 937727, "category_id": 19, "area": 8672, "bbox": [512, 102, 52, 256], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 9838, "bbox": [492, 379, 156, 132], "iscrowd": 0}, {"id": 11201, "category_id": 20, "area": 4408, "bbox": [126, 291, 102, 137], "iscrowd": 0}, {"id": 1520852, "category_id": 20, "area": 6889, "bbox": [59, 307, 135, 122], "iscrowd": 0}, {"id": 17852, "category_id": 20, "area": 12458, "bbox": [0, 332, 148, 178], "iscrowd": 0}, {"id": 877763, "category_id": 20, "area": 2092, "bbox": [30, 282, 54, 79], "iscrowd": 0}, {"id": 17109, "category_id": 20, "area": 975, "bbox": [1, 293, 28, 47], "iscrowd": 0}, {"id": 11198, "category_id": 20, "area": 850, "bbox": [1, 271, 34, 55], "iscrowd": 0}, {"id": 14014, "category_id": 20, "area": 1746, "bbox": [142, 258, 58, 64], "iscrowd": 0}, {"id": 1720289, "category_id": 20, "area": 476, "bbox": [154, 245, 42, 41], "iscrowd": 0}, {"id": 16329, "category_id": 20, "area": 830, "bbox": [118, 249, 34, 46], "iscrowd": 0}, {"id": 18912, "category_id": 20, "area": 1647, "bbox": [73, 252, 59, 57], "iscrowd": 0}, {"id": 1588451, "category_id": 20, "area": 1032, "bbox": [16, 256, 49, 30], "iscrowd": 0}, {"id": 20413, "category_id": 20, "area": 3026, "bbox": [259, 272, 71, 99], "iscrowd": 0}, {"id": 21460, "category_id": 20, "area": 5212, "bbox": [521, 341, 120, 116], "iscrowd": 0}, {"id": 535484, "category_id": 20, "area": 2476, "bbox": [317, 269, 62, 93], "iscrowd": 0}, {"id": 550115, "category_id": 20, "area": 506, "bbox": [257, 261, 38, 39], "iscrowd": 0}, {"id": 273363, "category_id": 20, "area": 1907, "bbox": [368, 267, 56, 86], "iscrowd": 0}, {"id": 18650, "category_id": 20, "area": 2395, "bbox": [201, 264, 61, 74], "iscrowd": 0}, {"id": 1986742, "category_id": 20, "area": 571, "bbox": [305, 260, 34, 47], "iscrowd": 0}, {"id": 14046, "category_id": 20, "area": 418, "bbox": [196, 256, 38, 35], "iscrowd": 0}, {"id": 21433, "category_id": 20, "area": 621, "bbox": [243, 253, 36, 38], "iscrowd": 0}, {"id": 16084, "category_id": 20, "area": 2731, "bbox": [545, 292, 79, 100], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 3449, "bbox": [576, 191, 151, 27], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 5776, "bbox": [557, 286, 114, 129], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 2356, "bbox": [588, 247, 78, 56], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2736, "bbox": [1, 0, 154, 52], "iscrowd": 0}, {"id": 47333, "category_id": 83, "area": 1656, "bbox": [450, 1, 64, 66], "iscrowd": 0}, {"id": 1548017, "category_id": 83, "area": 920, "bbox": [326, 80, 142, 20], "iscrowd": 0}, {"id": 1741823, "category_id": 83, "area": 644, "bbox": [184, 99, 102, 17], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 10152, "bbox": [599, 88, 128, 99], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 648, "bbox": [394, 339, 15, 56], "iscrowd": 0}, {"id": 1179161, "category_id": 99, "area": 271, "bbox": [462, 298, 10, 37], "iscrowd": 0}, {"id": 16763904, "category_id": 131, "area": 8768, "bbox": [722, 18, 46, 351], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 249, "bbox": [408, 357, 9, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00000268", "file_name": "ADE_val_00000268.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 68792, "bbox": [2, 58, 681, 340], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 50226, "bbox": [260, 282, 421, 230], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 55360, "bbox": [2, 2, 681, 129], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 5738, "bbox": [221, 151, 57, 123], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 67556, "bbox": [0, 254, 435, 257], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4045, "bbox": [26, 257, 79, 91], "iscrowd": 0}, {"id": 21679, "category_id": 20, "area": 3677, "bbox": [336, 335, 60, 161], "iscrowd": 0}, {"id": 1392578, "category_id": 20, "area": 2470, "bbox": [391, 288, 65, 88], "iscrowd": 0}, {"id": 11445, "category_id": 20, "area": 4319, "bbox": [385, 305, 91, 175], "iscrowd": 0}, {"id": 25553, "category_id": 20, "area": 1261, "bbox": [386, 267, 44, 79], "iscrowd": 0}, {"id": 342714, "category_id": 20, "area": 551, "bbox": [426, 251, 20, 54], "iscrowd": 0}, {"id": 943321, "category_id": 20, "area": 635, "bbox": [356, 237, 44, 18], "iscrowd": 0}, {"id": 23237, "category_id": 20, "area": 1042, "bbox": [166, 263, 45, 36], "iscrowd": 0}, {"id": 13242, "category_id": 20, "area": 535, "bbox": [201, 254, 30, 30], "iscrowd": 0}, {"id": 15564, "category_id": 20, "area": 504, "bbox": [232, 244, 31, 28], "iscrowd": 0}, {"id": 1787614, "category_id": 20, "area": 1134, "bbox": [2, 296, 24, 70], "iscrowd": 0}, {"id": 469194, "category_id": 20, "area": 4527, "bbox": [0, 470, 132, 40], "iscrowd": 0}, {"id": 18385, "category_id": 20, "area": 5694, "bbox": [265, 387, 102, 125], "iscrowd": 0}, {"id": 739775, "category_id": 20, "area": 757, "bbox": [93, 246, 27, 43], "iscrowd": 0}, {"id": 10433, "category_id": 20, "area": 243, "bbox": [120, 258, 20, 24], "iscrowd": 0}, {"id": 745434, "category_id": 20, "area": 933, "bbox": [110, 278, 40, 37], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 530, "bbox": [491, 257, 28, 25], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2620, "bbox": [308, 3, 202, 17], "iscrowd": 0}, {"id": 37104, "category_id": 83, "area": 1863, "bbox": [357, 44, 147, 20], "iscrowd": 0}, {"id": 1491443, "category_id": 83, "area": 185, "bbox": [452, 34, 28, 9], "iscrowd": 0}, {"id": 45035, "category_id": 83, "area": 109, "bbox": [460, 71, 19, 7], "iscrowd": 0}, {"id": 1812204, "category_id": 83, "area": 640, "bbox": [406, 97, 93, 10], "iscrowd": 0}, {"id": 1748721, "category_id": 83, "area": 489, "bbox": [231, 102, 83, 9], "iscrowd": 0}, {"id": 37370, "category_id": 83, "area": 758, "bbox": [178, 84, 110, 13], "iscrowd": 0}, {"id": 47359, "category_id": 83, "area": 1615, "bbox": [94, 57, 145, 21], "iscrowd": 0}, {"id": 1877247, "category_id": 83, "area": 160, "bbox": [91, 56, 24, 8], "iscrowd": 0}, {"id": 1165567, "category_id": 83, "area": 2726, "bbox": [4, 14, 143, 30], "iscrowd": 0}, {"id": 43263, "category_id": 83, "area": 1121, "bbox": [386, 78, 112, 12], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 2822, "bbox": [477, 168, 51, 59], "iscrowd": 0}, {"id": 13696768, "category_id": 90, "area": 1915, "bbox": [527, 168, 30, 68], "iscrowd": 0}, {"id": 16763904, "category_id": 131, "area": 16781, "bbox": [312, 131, 152, 116], "iscrowd": 0}]}, {"image_id": "ADE_val_00000269", "file_name": "ADE_val_00000269.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6344, "bbox": [0, 0, 256, 130], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17508, "bbox": [0, 119, 256, 137], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4942, "bbox": [41, 100, 176, 60], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 8148, "bbox": [132, 16, 124, 134], "iscrowd": 0}, {"id": 14679808, "category_id": 63, "area": 8408, "bbox": [1, 30, 131, 102], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 454, "bbox": [202, 78, 26, 19], "iscrowd": 0}, {"id": 440802, "category_id": 68, "area": 383, "bbox": [210, 21, 31, 16], "iscrowd": 0}, {"id": 38143, "category_id": 68, "area": 219, "bbox": [180, 25, 23, 12], "iscrowd": 0}, {"id": 167925, "category_id": 68, "area": 221, "bbox": [151, 27, 22, 12], "iscrowd": 0}, {"id": 35327, "category_id": 68, "area": 176, "bbox": [132, 56, 17, 12], "iscrowd": 0}, {"id": 46571, "category_id": 68, "area": 244, "bbox": [131, 71, 18, 15], "iscrowd": 0}, {"id": 1025250, "category_id": 68, "area": 282, "bbox": [149, 72, 23, 17], "iscrowd": 0}, {"id": 1948159, "category_id": 68, "area": 56, "bbox": [54, 48, 12, 5], "iscrowd": 0}, {"id": 45311, "category_id": 68, "area": 202, "bbox": [69, 60, 37, 10], "iscrowd": 0}, {"id": 41444, "category_id": 68, "area": 107, "bbox": [108, 72, 10, 11], "iscrowd": 0}, {"id": 109311, "category_id": 68, "area": 121, "bbox": [71, 81, 34, 5], "iscrowd": 0}, {"id": 1018863, "category_id": 68, "area": 105, "bbox": [30, 83, 15, 7], "iscrowd": 0}, {"id": 38388, "category_id": 68, "area": 75, "bbox": [173, 49, 26, 3], "iscrowd": 0}, {"id": 36351, "category_id": 68, "area": 51, "bbox": [108, 36, 14, 4], "iscrowd": 0}, {"id": 36847, "category_id": 68, "area": 90, "bbox": [232, 57, 6, 18], "iscrowd": 0}, {"id": 1680895, "category_id": 68, "area": 202, "bbox": [172, 62, 29, 10], "iscrowd": 0}, {"id": 45055, "category_id": 68, "area": 90, "bbox": [131, 44, 17, 7], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 4928, "bbox": [73, 129, 89, 106], "iscrowd": 0}, {"id": 16190745, "category_id": 76, "area": 959, "bbox": [16, 97, 32, 60], "iscrowd": 0}, {"id": 16125696, "category_id": 76, "area": 359, "bbox": [51, 88, 30, 15], "iscrowd": 0}, {"id": 15466496, "category_id": 76, "area": 1232, "bbox": [54, 117, 46, 86], "iscrowd": 0}, {"id": 16580608, "category_id": 76, "area": 603, "bbox": [41, 107, 33, 74], "iscrowd": 0}, {"id": 16715040, "category_id": 76, "area": 5375, "bbox": [164, 129, 87, 105], "iscrowd": 0}, {"id": 15670818, "category_id": 76, "area": 309, "bbox": [105, 89, 26, 17], "iscrowd": 0}, {"id": 16718610, "category_id": 76, "area": 505, "bbox": [166, 103, 34, 24], "iscrowd": 0}, {"id": 16187413, "category_id": 76, "area": 783, "bbox": [208, 109, 45, 25], "iscrowd": 0}, {"id": 16711701, "category_id": 76, "area": 408, "bbox": [142, 98, 28, 21], "iscrowd": 0}, {"id": 16715284, "category_id": 76, "area": 315, "bbox": [121, 93, 28, 19], "iscrowd": 0}, {"id": 16763904, "category_id": 131, "area": 564, "bbox": [1, 0, 102, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00000270", "file_name": "ADE_val_00000270.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 32056, "bbox": [0, 0, 409, 185], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 18790, "bbox": [0, 133, 409, 193], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 29508, "bbox": [43, 102, 365, 189], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 435, "bbox": [7, 95, 19, 60], "iscrowd": 0}, {"id": 669400, "category_id": 20, "area": 745, "bbox": [71, 82, 38, 23], "iscrowd": 0}, {"id": 1125354, "category_id": 20, "area": 10693, "bbox": [250, 198, 159, 126], "iscrowd": 0}, {"id": 20142, "category_id": 20, "area": 705, "bbox": [164, 82, 30, 32], "iscrowd": 0}, {"id": 342236, "category_id": 20, "area": 1066, "bbox": [199, 90, 39, 37], "iscrowd": 0}, {"id": 2183646, "category_id": 20, "area": 1911, "bbox": [251, 97, 53, 49], "iscrowd": 0}, {"id": 737483, "category_id": 20, "area": 4352, "bbox": [320, 109, 83, 71], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1031, "bbox": [209, 6, 30, 38], "iscrowd": 0}, {"id": 5113326, "category_id": 23, "area": 5291, "bbox": [279, 5, 77, 79], "iscrowd": 0}, {"id": 4391157, "category_id": 23, "area": 1059, "bbox": [209, 50, 29, 38], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 12359, "bbox": [59, 142, 158, 183], "iscrowd": 0}, {"id": 16449536, "category_id": 76, "area": 3127, "bbox": [34, 116, 56, 170], "iscrowd": 0}, {"id": 16129055, "category_id": 76, "area": 1462, "bbox": [17, 102, 37, 132], "iscrowd": 0}, {"id": 16763904, "category_id": 131, "area": 5208, "bbox": [20, 16, 87, 64], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 389, "bbox": [285, 163, 18, 34], "iscrowd": 0}, {"id": 11066112, "category_id": 148, "area": 230, "bbox": [207, 149, 12, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00000271", "file_name": "ADE_val_00000271.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 16191, "bbox": [0, 44, 256, 115], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14327, "bbox": [0, 153, 256, 103], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 12038, "bbox": [0, 0, 256, 61], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 7090, "bbox": [49, 127, 206, 61], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 187, "bbox": [105, 124, 24, 10], "iscrowd": 0}, {"id": 16057105, "category_id": 76, "area": 118, "bbox": [197, 122, 16, 10], "iscrowd": 0}, {"id": 16716569, "category_id": 76, "area": 183, "bbox": [230, 124, 19, 13], "iscrowd": 0}, {"id": 16715781, "category_id": 76, "area": 123, "bbox": [213, 118, 12, 13], "iscrowd": 0}, {"id": 15794176, "category_id": 76, "area": 352, "bbox": [32, 131, 26, 56], "iscrowd": 0}, {"id": 16711716, "category_id": 76, "area": 226, "bbox": [44, 142, 12, 30], "iscrowd": 0}, {"id": 16715540, "category_id": 76, "area": 2131, "bbox": [57, 158, 67, 87], "iscrowd": 0}, {"id": 15340829, "category_id": 76, "area": 267, "bbox": [62, 126, 23, 14], "iscrowd": 0}, {"id": 15597578, "category_id": 76, "area": 181, "bbox": [141, 120, 21, 11], "iscrowd": 0}, {"id": 15801344, "category_id": 76, "area": 129, "bbox": [224, 120, 14, 15], "iscrowd": 0}, {"id": 15400969, "category_id": 76, "area": 101, "bbox": [246, 123, 10, 17], "iscrowd": 0}, {"id": 15079424, "category_id": 76, "area": 129, "bbox": [56, 148, 20, 20], "iscrowd": 0}, {"id": 15532072, "category_id": 76, "area": 3512, "bbox": [125, 162, 69, 94], "iscrowd": 0}, {"id": 16711680, "category_id": 76, "area": 2374, "bbox": [202, 152, 53, 80], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 49, "bbox": [179, 54, 11, 6], "iscrowd": 0}, {"id": 41215, "category_id": 83, "area": 71, "bbox": [228, 45, 13, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00000272", "file_name": "ADE_val_00000272.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 101922, "bbox": [0, 33, 512, 452], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 55370, "bbox": [0, 466, 512, 217], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 43234, "bbox": [0, 0, 511, 173], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 19550, "bbox": [260, 204, 115, 220], "iscrowd": 0}, {"id": 16243913, "category_id": 9, "area": 20628, "bbox": [421, 178, 90, 258], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 18145, "bbox": [49, 243, 114, 188], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 34725, "bbox": [33, 415, 419, 255], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2605, "bbox": [4, 418, 93, 139], "iscrowd": 0}, {"id": 941526, "category_id": 20, "area": 4949, "bbox": [31, 435, 73, 168], "iscrowd": 0}, {"id": 23778, "category_id": 20, "area": 1327, "bbox": [85, 396, 52, 32], "iscrowd": 0}, {"id": 1061832, "category_id": 20, "area": 2136, "bbox": [380, 412, 62, 45], "iscrowd": 0}, {"id": 15833, "category_id": 20, "area": 982, "bbox": [243, 396, 40, 31], "iscrowd": 0}, {"id": 16313, "category_id": 20, "area": 1327, "bbox": [301, 404, 46, 38], "iscrowd": 0}, {"id": 15076, "category_id": 20, "area": 12053, "bbox": [307, 456, 133, 210], "iscrowd": 0}, {"id": 940488, "category_id": 20, "area": 9705, "bbox": [89, 457, 127, 204], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 3161, "bbox": [315, 234, 49, 137], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 2654, "bbox": [1, 98, 70, 107], "iscrowd": 0}, {"id": 14760192, "category_id": 86, "area": 8404, "bbox": [60, 0, 147, 120], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 595, "bbox": [190, 395, 15, 52], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 429, "bbox": [0, 237, 28, 36], "iscrowd": 0}, {"id": 16716544, "category_id": 135, "area": 403, "bbox": [384, 240, 27, 27], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 311, "bbox": [174, 418, 15, 25], "iscrowd": 0}, {"id": 12768515, "category_id": 148, "area": 409, "bbox": [217, 424, 17, 29], "iscrowd": 0}, {"id": 11840816, "category_id": 148, "area": 283, "bbox": [205, 424, 13, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00000273", "file_name": "ADE_val_00000273.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 113702, "bbox": [0, 31, 767, 377], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21604, "bbox": [0, 346, 768, 166], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 80640, "bbox": [0, 0, 768, 143], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 572, "bbox": [254, 266, 293, 83], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3258, "bbox": [549, 249, 119, 74], "iscrowd": 0}, {"id": 16255972, "category_id": 11, "area": 7728, "bbox": [429, 159, 74, 113], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 103672, "bbox": [70, 264, 576, 248], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 11832, "bbox": [299, 142, 91, 160], "iscrowd": 0}, {"id": 345338, "category_id": 19, "area": 13553, "bbox": [1, 86, 44, 326], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 364, "bbox": [393, 258, 23, 26], "iscrowd": 0}, {"id": 78784, "category_id": 20, "area": 1040, "bbox": [306, 267, 40, 32], "iscrowd": 0}, {"id": 21442, "category_id": 20, "area": 2696, "bbox": [141, 284, 69, 47], "iscrowd": 0}, {"id": 20695, "category_id": 20, "area": 1901, "bbox": [634, 275, 96, 87], "iscrowd": 0}, {"id": 15331, "category_id": 20, "area": 5762, "bbox": [599, 299, 131, 154], "iscrowd": 0}, {"id": 1462196, "category_id": 20, "area": 13241, "bbox": [519, 352, 227, 160], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 230, "bbox": [535, 201, 28, 17], "iscrowd": 0}, {"id": 196863, "category_id": 67, "area": 877, "bbox": [407, 265, 58, 28], "iscrowd": 0}, {"id": 983267, "category_id": 67, "area": 392, "bbox": [492, 256, 47, 16], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 100, "bbox": [286, 66, 15, 9], "iscrowd": 0}, {"id": 1422075, "category_id": 83, "area": 130, "bbox": [450, 66, 17, 9], "iscrowd": 0}, {"id": 1492991, "category_id": 83, "area": 100, "bbox": [509, 99, 15, 9], "iscrowd": 0}, {"id": 496353, "category_id": 83, "area": 103, "bbox": [538, 79, 16, 8], "iscrowd": 0}, {"id": 38899, "category_id": 83, "area": 109, "bbox": [614, 88, 16, 8], "iscrowd": 0}, {"id": 40959, "category_id": 83, "area": 137, "bbox": [579, 46, 20, 9], "iscrowd": 0}, {"id": 43241, "category_id": 83, "area": 28, "bbox": [561, 158, 9, 4], "iscrowd": 0}, {"id": 40447, "category_id": 83, "area": 30, "bbox": [642, 154, 8, 4], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 1632, "bbox": [66, 119, 70, 48], "iscrowd": 0}, {"id": 16720915, "category_id": 135, "area": 555, "bbox": [270, 151, 37, 31], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 148, "bbox": [554, 213, 10, 18], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 593, "bbox": [411, 279, 59, 19], "iscrowd": 0}, {"id": 65308, "category_id": 138, "area": 359, "bbox": [493, 266, 43, 14], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 12, "bbox": [591, 245, 9, 2], "iscrowd": 0}, {"id": 12319488, "category_id": 143, "area": 17, "bbox": [577, 245, 10, 2], "iscrowd": 0}, {"id": 12320525, "category_id": 143, "area": 16, "bbox": [591, 250, 9, 3], "iscrowd": 0}, {"id": 12451584, "category_id": 143, "area": 14, "bbox": [577, 250, 10, 3], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 155, "bbox": [408, 288, 10, 17], "iscrowd": 0}, {"id": 13818880, "category_id": 148, "area": 84, "bbox": [505, 267, 7, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00000274", "file_name": "ADE_val_00000274.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 48617, "bbox": [0, 0, 683, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 118176, "bbox": [0, 190, 677, 321], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 66746, "bbox": [13, 1, 645, 162], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 35395, "bbox": [59, 130, 603, 180], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2483, "bbox": [479, 194, 93, 47], "iscrowd": 0}, {"id": 284137, "category_id": 20, "area": 1244, "bbox": [388, 137, 69, 45], "iscrowd": 0}, {"id": 936114, "category_id": 20, "area": 1694, "bbox": [440, 144, 74, 70], "iscrowd": 0}, {"id": 16062, "category_id": 20, "area": 2213, "bbox": [495, 152, 82, 50], "iscrowd": 0}, {"id": 1132482, "category_id": 20, "area": 4070, "bbox": [545, 157, 92, 95], "iscrowd": 0}, {"id": 14784, "category_id": 20, "area": 24057, "bbox": [469, 253, 163, 224], "iscrowd": 0}, {"id": 1263843, "category_id": 20, "area": 863, "bbox": [309, 152, 45, 31], "iscrowd": 0}, {"id": 24807, "category_id": 20, "area": 295, "bbox": [107, 123, 54, 12], "iscrowd": 0}, {"id": 24794, "category_id": 20, "area": 254, "bbox": [214, 127, 28, 20], "iscrowd": 0}, {"id": 1270480, "category_id": 20, "area": 553, "bbox": [224, 130, 33, 26], "iscrowd": 0}, {"id": 1720253, "category_id": 20, "area": 466, "bbox": [255, 144, 37, 21], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 5295, "bbox": [67, 148, 89, 131], "iscrowd": 0}, {"id": 16711698, "category_id": 76, "area": 2014, "bbox": [33, 126, 46, 106], "iscrowd": 0}, {"id": 16716556, "category_id": 76, "area": 948, "bbox": [380, 160, 42, 35], "iscrowd": 0}, {"id": 16719104, "category_id": 76, "area": 1742, "bbox": [412, 170, 65, 43], "iscrowd": 0}, {"id": 16718080, "category_id": 76, "area": 19598, "bbox": [202, 221, 154, 231], "iscrowd": 0}, {"id": 16124672, "category_id": 76, "area": 4685, "bbox": [167, 185, 77, 204], "iscrowd": 0}, {"id": 15079168, "category_id": 76, "area": 2942, "bbox": [149, 168, 61, 171], "iscrowd": 0}, {"id": 15535624, "category_id": 76, "area": 2972, "bbox": [119, 159, 59, 141], "iscrowd": 0}]}, {"image_id": "ADE_val_00000275", "file_name": "ADE_val_00000275.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 129827, "bbox": [0, 66, 683, 444], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 63471, "bbox": [0, 1, 681, 104], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 57350, "bbox": [0, 115, 665, 259], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 9821, "bbox": [1, 342, 680, 41], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 58507, "bbox": [1, 286, 681, 225], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 10108, "bbox": [149, 431, 346, 80], "iscrowd": 0}]}, {"image_id": "ADE_val_00000276", "file_name": "ADE_val_00000276.png", "segments_info": [{"id": 5273720, "category_id": 6, "area": 19301, "bbox": [2, 0, 522, 41], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 151902, "bbox": [0, 16, 524, 347], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 7942, "bbox": [193, 274, 111, 118], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 6280, "bbox": [7, 292, 96, 88], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 3402, "bbox": [324, 338, 81, 51], "iscrowd": 0}]}, {"image_id": "ADE_val_00000277", "file_name": "ADE_val_00000277.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 39164, "bbox": [65, 0, 423, 432], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1911, "bbox": [2, 0, 249, 10], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 13371, "bbox": [4, 1, 385, 459], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 157156, "bbox": [0, 10, 499, 451], "iscrowd": 0}, {"id": 65433, "category_id": 55, "area": 11560, "bbox": [2, 59, 495, 112], "iscrowd": 0}, {"id": 5439232, "category_id": 91, "area": 1109, "bbox": [105, 50, 91, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00000278", "file_name": "ADE_val_00000278.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 101724, "bbox": [0, 122, 739, 188], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 88681, "bbox": [0, 0, 739, 169], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1131, "bbox": [181, 90, 414, 55], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 97917, "bbox": [0, 300, 739, 212], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 3434, "bbox": [203, 325, 272, 25], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 28460, "bbox": [0, 316, 739, 173], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 371, "bbox": [257, 269, 14, 44], "iscrowd": 0}, {"id": 3872401, "category_id": 13, "area": 299, "bbox": [641, 270, 14, 40], "iscrowd": 0}, {"id": 2818225, "category_id": 13, "area": 166, "bbox": [284, 266, 19, 20], "iscrowd": 0}, {"id": 2556056, "category_id": 13, "area": 419, "bbox": [531, 274, 27, 47], "iscrowd": 0}, {"id": 2556047, "category_id": 13, "area": 526, "bbox": [282, 276, 16, 54], "iscrowd": 0}, {"id": 4849800, "category_id": 13, "area": 465, "bbox": [315, 269, 24, 45], "iscrowd": 0}, {"id": 5046399, "category_id": 13, "area": 134, "bbox": [634, 288, 10, 23], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 5186, "bbox": [108, 267, 99, 81], "iscrowd": 0}, {"id": 13007113, "category_id": 21, "area": 3131, "bbox": [412, 288, 110, 45], "iscrowd": 0}, {"id": 14642176, "category_id": 21, "area": 486, "bbox": [724, 299, 15, 43], "iscrowd": 0}, {"id": 14448156, "category_id": 21, "area": 10054, "bbox": [35, 347, 128, 100], "iscrowd": 0}, {"id": 12934144, "category_id": 21, "area": 2035, "bbox": [22, 273, 62, 45], "iscrowd": 0}, {"id": 13002781, "category_id": 21, "area": 1113, "bbox": [651, 277, 44, 33], "iscrowd": 0}, {"id": 13597952, "category_id": 21, "area": 1659, "bbox": [570, 276, 76, 33], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 21001, "bbox": [613, 31, 126, 419], "iscrowd": 0}, {"id": 9311475, "category_id": 44, "area": 820, "bbox": [460, 290, 36, 131], "iscrowd": 0}, {"id": 9371903, "category_id": 44, "area": 2425, "bbox": [252, 158, 48, 53], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1140, "bbox": [557, 143, 44, 184], "iscrowd": 0}]}, {"image_id": "ADE_val_00000279", "file_name": "ADE_val_00000279.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 85268, "bbox": [2, 180, 430, 396], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21419, "bbox": [14, 463, 291, 113], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 123959, "bbox": [2, 1, 430, 361], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6519, "bbox": [283, 307, 54, 160], "iscrowd": 0}, {"id": 13827035, "category_id": 9, "area": 982, "bbox": [62, 389, 42, 26], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 3272, "bbox": [199, 344, 23, 176], "iscrowd": 0}]}, {"image_id": "ADE_val_00000280", "file_name": "ADE_val_00000280.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 116843, "bbox": [1, 50, 681, 461], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 86514, "bbox": [23, 271, 659, 240], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 106820, "bbox": [0, 0, 682, 224], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2472, "bbox": [299, 224, 56, 48], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 15568, "bbox": [85, 170, 82, 202], "iscrowd": 0}, {"id": 2883360, "category_id": 15, "area": 765, "bbox": [487, 207, 10, 148], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 996, "bbox": [301, 273, 30, 37], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6141, "bbox": [1, 186, 57, 119], "iscrowd": 0}, {"id": 4400108, "category_id": 23, "area": 406, "bbox": [204, 222, 10, 60], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 497, "bbox": [211, 256, 26, 39], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2470, "bbox": [598, 312, 84, 68], "iscrowd": 0}, {"id": 16746772, "category_id": 48, "area": 1413, "bbox": [531, 335, 60, 36], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 114, "bbox": [293, 152, 48, 3], "iscrowd": 0}, {"id": 1029119, "category_id": 83, "area": 34, "bbox": [124, 155, 11, 5], "iscrowd": 0}, {"id": 37609, "category_id": 83, "area": 34, "bbox": [503, 178, 11, 5], "iscrowd": 0}, {"id": 51445, "category_id": 83, "area": 21, "bbox": [479, 187, 8, 3], "iscrowd": 0}, {"id": 695793, "category_id": 83, "area": 35, "bbox": [89, 139, 10, 4], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 40, "bbox": [382, 222, 10, 5], "iscrowd": 0}, {"id": 16729879, "category_id": 135, "area": 39, "bbox": [368, 226, 9, 6], "iscrowd": 0}, {"id": 15471382, "category_id": 135, "area": 698, "bbox": [51, 170, 47, 28], "iscrowd": 0}, {"id": 15732493, "category_id": 135, "area": 838, "bbox": [0, 152, 46, 36], "iscrowd": 0}, {"id": 16720404, "category_id": 135, "area": 156, "bbox": [198, 208, 19, 14], "iscrowd": 0}, {"id": 16715264, "category_id": 135, "area": 85, "bbox": [218, 214, 16, 10], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 299, "bbox": [362, 262, 12, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00000281", "file_name": "ADE_val_00000281.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6206, "bbox": [0, 0, 125, 230], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25148, "bbox": [2, 118, 255, 138], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 16146, "bbox": [21, 1, 236, 98], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 353, "bbox": [242, 57, 15, 27], "iscrowd": 0}, {"id": 14941433, "category_id": 9, "area": 327, "bbox": [226, 63, 16, 24], "iscrowd": 0}, {"id": 14342616, "category_id": 9, "area": 271, "bbox": [210, 67, 15, 22], "iscrowd": 0}, {"id": 13563135, "category_id": 9, "area": 772, "bbox": [8, 60, 45, 34], "iscrowd": 0}, {"id": 15063786, "category_id": 9, "area": 1271, "bbox": [240, 83, 17, 90], "iscrowd": 0}, {"id": 13362140, "category_id": 9, "area": 1173, "bbox": [222, 87, 20, 77], "iscrowd": 0}, {"id": 13363199, "category_id": 9, "area": 978, "bbox": [207, 89, 17, 69], "iscrowd": 0}, {"id": 13753053, "category_id": 9, "area": 105, "bbox": [107, 104, 15, 7], "iscrowd": 0}, {"id": 16044528, "category_id": 9, "area": 3721, "bbox": [125, 71, 86, 80], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 582, "bbox": [2, 81, 12, 60], "iscrowd": 0}, {"id": 1572608, "category_id": 15, "area": 208, "bbox": [35, 92, 7, 35], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 175, "bbox": [80, 109, 13, 23], "iscrowd": 0}, {"id": 804351, "category_id": 39, "area": 1128, "bbox": [14, 112, 65, 33], "iscrowd": 0}, {"id": 1193727, "category_id": 39, "area": 2933, "bbox": [2, 125, 47, 86], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 118, "bbox": [145, 122, 12, 16], "iscrowd": 0}, {"id": 65466, "category_id": 70, "area": 392, "bbox": [178, 133, 23, 29], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 108, "bbox": [160, 127, 6, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00000282", "file_name": "ADE_val_00000282.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 235567, "bbox": [1, 1, 682, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 62292, "bbox": [152, 216, 395, 296], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 26810, "bbox": [172, 1, 337, 141], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 15512, "bbox": [526, 50, 55, 462], "iscrowd": 0}, {"id": 2225931, "category_id": 15, "area": 4073, "bbox": [179, 85, 18, 338], "iscrowd": 0}, {"id": 2031362, "category_id": 15, "area": 1482, "bbox": [382, 131, 11, 163], "iscrowd": 0}, {"id": 3007491, "category_id": 15, "area": 1159, "bbox": [310, 155, 18, 70], "iscrowd": 0}, {"id": 2941728, "category_id": 15, "area": 291, "bbox": [291, 154, 7, 73], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 54, "bbox": [315, 147, 9, 6], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 128, "bbox": [310, 97, 24, 9], "iscrowd": 0}, {"id": 1156095, "category_id": 83, "area": 47, "bbox": [308, 129, 14, 4], "iscrowd": 0}, {"id": 1422079, "category_id": 83, "area": 39, "bbox": [307, 136, 12, 4], "iscrowd": 0}, {"id": 43775, "category_id": 83, "area": 54, "bbox": [324, 52, 15, 4], "iscrowd": 0}]}, {"image_id": "ADE_val_00000283", "file_name": "ADE_val_00000283.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 134826, "bbox": [0, 0, 682, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 82769, "bbox": [52, 255, 625, 256], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 56646, "bbox": [48, 0, 634, 180], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4464, "bbox": [298, 191, 71, 65], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 59719, "bbox": [85, 60, 177, 376], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 55, "bbox": [329, 180, 9, 7], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 3567, "bbox": [349, 0, 125, 34], "iscrowd": 0}, {"id": 1746943, "category_id": 83, "area": 796, "bbox": [336, 98, 65, 14], "iscrowd": 0}, {"id": 49151, "category_id": 83, "area": 302, "bbox": [331, 133, 42, 9], "iscrowd": 0}, {"id": 48107, "category_id": 83, "area": 129, "bbox": [328, 152, 33, 4], "iscrowd": 0}, {"id": 1683698, "category_id": 83, "area": 104, "bbox": [327, 163, 26, 4], "iscrowd": 0}, {"id": 234751, "category_id": 83, "area": 70, "bbox": [326, 170, 21, 4], "iscrowd": 0}, {"id": 1418489, "category_id": 83, "area": 53, "bbox": [325, 175, 18, 3], "iscrowd": 0}]}, {"image_id": "ADE_val_00000284", "file_name": "ADE_val_00000284.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 77916, "bbox": [2, 75, 680, 271], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 20899, "bbox": [549, 293, 132, 218], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 77095, "bbox": [1, 366, 635, 144], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 42610, "bbox": [1, 276, 562, 121], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 45253, "bbox": [183, 120, 357, 206], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 80558, "bbox": [0, 0, 682, 159], "iscrowd": 0}]}, {"image_id": "ADE_val_00000285", "file_name": "ADE_val_00000285.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 201637, "bbox": [0, 1, 511, 512], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 14633, "bbox": [0, 0, 511, 134], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 17475, "bbox": [193, 3, 314, 141], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 55473, "bbox": [0, 513, 509, 153], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 28282, "bbox": [1, 487, 510, 195], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 15149, "bbox": [1, 381, 373, 130], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 5044, "bbox": [405, 555, 57, 124], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 3922, "bbox": [147, 71, 34, 442], "iscrowd": 0}, {"id": 15145822, "category_id": 150, "area": 2966, "bbox": [95, 69, 24, 447], "iscrowd": 0}]}, {"image_id": "ADE_val_00000286", "file_name": "ADE_val_00000286.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 231924, "bbox": [0, 0, 905, 363], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17255, "bbox": [0, 359, 406, 151], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 110807, "bbox": [229, 245, 676, 265], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2245, "bbox": [115, 341, 103, 75], "iscrowd": 0}, {"id": 6430194, "category_id": 16, "area": 3027, "bbox": [360, 374, 175, 40], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 385, "bbox": [414, 241, 25, 18], "iscrowd": 0}, {"id": 19389, "category_id": 20, "area": 635, "bbox": [473, 234, 35, 23], "iscrowd": 0}, {"id": 1649859, "category_id": 20, "area": 777, "bbox": [518, 231, 40, 23], "iscrowd": 0}, {"id": 929754, "category_id": 20, "area": 601, "bbox": [624, 226, 38, 21], "iscrowd": 0}, {"id": 23508, "category_id": 20, "area": 876, "bbox": [672, 219, 40, 26], "iscrowd": 0}, {"id": 11452, "category_id": 20, "area": 2565, "bbox": [615, 472, 159, 38], "iscrowd": 0}, {"id": 25040, "category_id": 20, "area": 5606, "bbox": [703, 447, 169, 62], "iscrowd": 0}, {"id": 23504, "category_id": 20, "area": 4098, "bbox": [830, 419, 72, 88], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 2088, "bbox": [307, 271, 72, 43], "iscrowd": 0}, {"id": 404735, "category_id": 39, "area": 1105, "bbox": [202, 320, 33, 47], "iscrowd": 0}, {"id": 2382079, "category_id": 39, "area": 4261, "bbox": [4, 336, 69, 108], "iscrowd": 0}, {"id": 10239, "category_id": 39, "area": 19096, "bbox": [79, 374, 228, 135], "iscrowd": 0}, {"id": 1653247, "category_id": 39, "area": 3535, "bbox": [1, 325, 104, 58], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 3463, "bbox": [479, 363, 165, 31], "iscrowd": 0}, {"id": 16763904, "category_id": 131, "area": 26836, "bbox": [108, 45, 185, 151], "iscrowd": 0}]}, {"image_id": "ADE_val_00000287", "file_name": "ADE_val_00000287.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 222821, "bbox": [2, 0, 476, 532], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 69418, "bbox": [0, 463, 478, 176], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 9119, "bbox": [140, 210, 295, 112], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 1261, "bbox": [53, 453, 82, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00000288", "file_name": "ADE_val_00000288.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 184044, "bbox": [0, 2, 681, 509], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 38828, "bbox": [120, 374, 500, 137], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 9913, "bbox": [220, 280, 131, 95], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 112877, "bbox": [1, 1, 680, 272], "iscrowd": 0}]}, {"image_id": "ADE_val_00000289", "file_name": "ADE_val_00000289.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 5924, "bbox": [0, 0, 212, 40], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 9714, "bbox": [0, 27, 210, 152], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 7086, "bbox": [29, 44, 151, 145], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 16389, "bbox": [0, 23, 212, 166], "iscrowd": 0}]}, {"image_id": "ADE_val_00000290", "file_name": "ADE_val_00000290.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 1365, "bbox": [173, 1, 96, 19], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 26411, "bbox": [2, 3, 444, 123], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 140290, "bbox": [2, 0, 505, 425], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 991, "bbox": [284, 176, 130, 73], "iscrowd": 0}]}, {"image_id": "ADE_val_00000291", "file_name": "ADE_val_00000291.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 27181, "bbox": [36, 127, 702, 132], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 84032, "bbox": [0, 0, 738, 255], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 1615, "bbox": [685, 0, 52, 60], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 21612, "bbox": [0, 0, 654, 228], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 175204, "bbox": [0, 216, 738, 295], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 24998, "bbox": [0, 200, 588, 137], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 11434, "bbox": [38, 129, 700, 74], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1406, "bbox": [277, 167, 41, 83], "iscrowd": 0}, {"id": 3211401, "category_id": 13, "area": 512, "bbox": [535, 161, 18, 50], "iscrowd": 0}, {"id": 3145872, "category_id": 13, "area": 4858, "bbox": [372, 157, 85, 156], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2824, "bbox": [311, 152, 41, 80], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 3196, "bbox": [676, 170, 63, 62], "iscrowd": 0}, {"id": 14973211, "category_id": 21, "area": 3938, "bbox": [587, 171, 90, 59], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 499, "bbox": [681, 136, 14, 44], "iscrowd": 0}, {"id": 20465, "category_id": 39, "area": 869, "bbox": [587, 148, 37, 26], "iscrowd": 0}, {"id": 1259263, "category_id": 39, "area": 5451, "bbox": [371, 137, 146, 51], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 426, "bbox": [664, 108, 17, 81], "iscrowd": 0}, {"id": 9640191, "category_id": 44, "area": 1656, "bbox": [79, 161, 48, 35], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 607, "bbox": [76, 204, 16, 58], "iscrowd": 0}, {"id": 16711728, "category_id": 94, "area": 516, "bbox": [511, 172, 10, 64], "iscrowd": 0}, {"id": 16711704, "category_id": 94, "area": 595, "bbox": [27, 208, 17, 60], "iscrowd": 0}]}, {"image_id": "ADE_val_00000292", "file_name": "ADE_val_00000292.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 207492, "bbox": [0, 0, 682, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21105, "bbox": [136, 412, 281, 99], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 58075, "bbox": [0, 0, 680, 166], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3068, "bbox": [159, 81, 289, 80], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 9665, "bbox": [395, 324, 60, 187], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 430, "bbox": [253, 241, 29, 23], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 6337, "bbox": [132, 295, 322, 72], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 779, "bbox": [244, 300, 73, 20], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 9873, "bbox": [283, 229, 172, 120], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 14638, "bbox": [144, 266, 154, 217], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2904, "bbox": [164, 24, 148, 26], "iscrowd": 0}, {"id": 1348095, "category_id": 83, "area": 2598, "bbox": [351, 32, 145, 26], "iscrowd": 0}, {"id": 964095, "category_id": 83, "area": 1203, "bbox": [335, 94, 107, 17], "iscrowd": 0}, {"id": 2013951, "category_id": 83, "area": 1320, "bbox": [201, 88, 104, 17], "iscrowd": 0}, {"id": 45811, "category_id": 83, "area": 533, "bbox": [327, 130, 70, 12], "iscrowd": 0}, {"id": 51427, "category_id": 83, "area": 323, "bbox": [225, 128, 77, 9], "iscrowd": 0}, {"id": 47084, "category_id": 83, "area": 291, "bbox": [98, 24, 33, 20], "iscrowd": 0}, {"id": 46836, "category_id": 83, "area": 661, "bbox": [116, 88, 56, 14], "iscrowd": 0}, {"id": 46591, "category_id": 83, "area": 283, "bbox": [126, 124, 35, 11], "iscrowd": 0}, {"id": 50681, "category_id": 83, "area": 563, "bbox": [0, 22, 32, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00000293", "file_name": "ADE_val_00000293.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 88599, "bbox": [2, 0, 509, 291], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2110, "bbox": [37, 114, 37, 90], "iscrowd": 0}, {"id": 2293925, "category_id": 13, "area": 3471, "bbox": [3, 107, 43, 99], "iscrowd": 0}, {"id": 3738493, "category_id": 13, "area": 11871, "bbox": [55, 131, 97, 199], "iscrowd": 0}, {"id": 4456598, "category_id": 13, "area": 16490, "bbox": [3, 196, 104, 308], "iscrowd": 0}, {"id": 3145880, "category_id": 13, "area": 10794, "bbox": [2, 491, 92, 191], "iscrowd": 0}, {"id": 2032303, "category_id": 13, "area": 6634, "bbox": [9, 304, 140, 107], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 13202, "bbox": [61, 265, 448, 415], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 4075, "bbox": [189, 2, 106, 52], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 156571, "bbox": [37, 192, 474, 489], "iscrowd": 0}, {"id": 9502464, "category_id": 75, "area": 19550, "bbox": [56, 175, 254, 353], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 3473, "bbox": [171, 158, 108, 136], "iscrowd": 0}]}, {"image_id": "ADE_val_00000294", "file_name": "ADE_val_00000294.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 1110, "bbox": [357, 178, 117, 17], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 3164, "bbox": [356, 110, 123, 44], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 68007, "bbox": [104, 196, 495, 252], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3531, "bbox": [356, 125, 118, 53], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 79936, "bbox": [0, 0, 599, 152], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 18217, "bbox": [0, 128, 357, 73], "iscrowd": 0}, {"id": 16306166, "category_id": 9, "area": 6132, "bbox": [475, 133, 123, 63], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 4647, "bbox": [3, 274, 81, 121], "iscrowd": 0}, {"id": 6553855, "category_id": 127, "area": 6521, "bbox": [8, 220, 115, 90], "iscrowd": 0}, {"id": 7083517, "category_id": 127, "area": 3543, "bbox": [93, 203, 91, 69], "iscrowd": 0}, {"id": 9699583, "category_id": 127, "area": 2106, "bbox": [181, 205, 78, 48], "iscrowd": 0}, {"id": 9377023, "category_id": 127, "area": 837, "bbox": [269, 197, 32, 56], "iscrowd": 0}, {"id": 8914678, "category_id": 127, "area": 655, "bbox": [483, 207, 39, 31], "iscrowd": 0}, {"id": 7867135, "category_id": 127, "area": 1456, "bbox": [554, 241, 43, 54], "iscrowd": 0}, {"id": 6881535, "category_id": 127, "area": 1106, "bbox": [440, 188, 56, 35], "iscrowd": 0}, {"id": 9702911, "category_id": 127, "area": 1270, "bbox": [85, 303, 39, 52], "iscrowd": 0}, {"id": 6950655, "category_id": 127, "area": 1944, "bbox": [128, 225, 72, 60], "iscrowd": 0}, {"id": 6888161, "category_id": 127, "area": 681, "bbox": [220, 248, 36, 29], "iscrowd": 0}, {"id": 9705975, "category_id": 127, "area": 725, "bbox": [240, 205, 36, 38], "iscrowd": 0}, {"id": 8913149, "category_id": 127, "area": 493, "bbox": [259, 239, 26, 29], "iscrowd": 0}, {"id": 6029551, "category_id": 127, "area": 358, "bbox": [303, 214, 24, 22], "iscrowd": 0}, {"id": 7995625, "category_id": 127, "area": 536, "bbox": [294, 196, 37, 22], "iscrowd": 0}, {"id": 9705698, "category_id": 127, "area": 651, "bbox": [496, 226, 31, 40], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 713, "bbox": [282, 106, 31, 32], "iscrowd": 0}, {"id": 16766745, "category_id": 140, "area": 672, "bbox": [503, 108, 29, 30], "iscrowd": 0}, {"id": 15727890, "category_id": 140, "area": 137, "bbox": [357, 147, 13, 14], "iscrowd": 0}, {"id": 16776960, "category_id": 140, "area": 144, "bbox": [460, 148, 15, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00000295", "file_name": "ADE_val_00000295.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 24703, "bbox": [450, 43, 231, 167], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 211172, "bbox": [0, 183, 681, 328], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 23720, "bbox": [4, 0, 677, 65], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 4422, "bbox": [396, 57, 56, 128], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 70192, "bbox": [0, 1, 452, 214], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 7692, "bbox": [503, 142, 177, 71], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 285, "bbox": [449, 4, 44, 12], "iscrowd": 0}, {"id": 1086710, "category_id": 83, "area": 143, "bbox": [447, 43, 39, 7], "iscrowd": 0}, {"id": 1481215, "category_id": 83, "area": 260, "bbox": [493, 20, 48, 9], "iscrowd": 0}, {"id": 1544165, "category_id": 83, "area": 173, "bbox": [534, 31, 44, 7], "iscrowd": 0}, {"id": 40703, "category_id": 83, "area": 278, "bbox": [399, 32, 45, 12], "iscrowd": 0}, {"id": 39423, "category_id": 83, "area": 302, "bbox": [343, 21, 51, 12], "iscrowd": 0}, {"id": 1159143, "category_id": 83, "area": 348, "bbox": [285, 8, 48, 13], "iscrowd": 0}, {"id": 37358, "category_id": 83, "area": 466, "bbox": [614, 1, 57, 14], "iscrowd": 0}, {"id": 1351679, "category_id": 83, "area": 241, "bbox": [651, 17, 31, 13], "iscrowd": 0}, {"id": 37101, "category_id": 83, "area": 287, "bbox": [209, 1, 54, 9], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 723, "bbox": [449, 118, 24, 75], "iscrowd": 0}]}, {"image_id": "ADE_val_00000296", "file_name": "ADE_val_00000296.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 80088, "bbox": [1, 0, 682, 502], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 29378, "bbox": [0, 390, 682, 121], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 55047, "bbox": [469, 1, 213, 262], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 22197, "bbox": [1, 346, 375, 165], "iscrowd": 0}, {"id": 4587775, "category_id": 16, "area": 6611, "bbox": [468, 344, 212, 140], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2748, "bbox": [341, 322, 63, 95], "iscrowd": 0}, {"id": 1980898, "category_id": 20, "area": 1396, "bbox": [310, 362, 72, 138], "iscrowd": 0}, {"id": 1592770, "category_id": 20, "area": 3649, "bbox": [1, 437, 128, 74], "iscrowd": 0}, {"id": 217043, "category_id": 20, "area": 1517, "bbox": [478, 345, 36, 135], "iscrowd": 0}, {"id": 24750, "category_id": 20, "area": 377, "bbox": [204, 344, 43, 14], "iscrowd": 0}, {"id": 15534, "category_id": 20, "area": 6963, "bbox": [239, 387, 114, 125], "iscrowd": 0}, {"id": 16842, "category_id": 20, "area": 8062, "bbox": [126, 414, 120, 98], "iscrowd": 0}, {"id": 12259, "category_id": 20, "area": 6436, "bbox": [500, 372, 125, 140], "iscrowd": 0}, {"id": 2110663, "category_id": 20, "area": 5246, "bbox": [603, 381, 79, 129], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 922, "bbox": [147, 344, 54, 21], "iscrowd": 0}, {"id": 712966, "category_id": 42, "area": 1070, "bbox": [68, 352, 63, 24], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 298, "bbox": [638, 294, 13, 42], "iscrowd": 0}, {"id": 65280, "category_id": 99, "area": 516, "bbox": [647, 295, 16, 38], "iscrowd": 0}, {"id": 1441540, "category_id": 99, "area": 883, "bbox": [663, 297, 17, 60], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 7103, "bbox": [381, 316, 88, 100], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1313, "bbox": [496, 320, 71, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00000297", "file_name": "ADE_val_00000297.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 78421, "bbox": [0, 0, 500, 264], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 22588, "bbox": [160, 50, 203, 214], "iscrowd": 0}, {"id": 5774202, "category_id": 13, "area": 20344, "bbox": [2, 31, 131, 236], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 292, "bbox": [395, 34, 23, 16], "iscrowd": 0}, {"id": 2353363, "category_id": 37, "area": 307, "bbox": [131, 43, 23, 16], "iscrowd": 0}, {"id": 65479, "category_id": 37, "area": 386, "bbox": [383, 72, 17, 34], "iscrowd": 0}, {"id": 786403, "category_id": 37, "area": 188, "bbox": [373, 114, 14, 23], "iscrowd": 0}, {"id": 844798, "category_id": 37, "area": 95, "bbox": [368, 147, 9, 15], "iscrowd": 0}, {"id": 1376210, "category_id": 37, "area": 330, "bbox": [120, 76, 17, 41], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 42343, "bbox": [0, 255, 498, 119], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 361, "bbox": [346, 141, 24, 18], "iscrowd": 0}, {"id": 36854, "category_id": 83, "area": 179, "bbox": [345, 159, 23, 9], "iscrowd": 0}, {"id": 45054, "category_id": 83, "area": 114, "bbox": [130, 152, 22, 8], "iscrowd": 0}, {"id": 42736, "category_id": 83, "area": 150, "bbox": [346, 168, 19, 9], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 4745, "bbox": [130, 259, 174, 43], "iscrowd": 0}, {"id": 53985, "category_id": 121, "area": 3890, "bbox": [308, 266, 167, 36], "iscrowd": 0}, {"id": 47103, "category_id": 121, "area": 2608, "bbox": [3, 262, 161, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00000298", "file_name": "ADE_val_00000298.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 102435, "bbox": [0, 0, 885, 424], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 58503, "bbox": [0, 311, 838, 187], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 29972, "bbox": [441, 2, 215, 321], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 66128, "bbox": [423, 1, 347, 363], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 40590, "bbox": [1, 1, 223, 202], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 7334, "bbox": [784, 417, 101, 81], "iscrowd": 0}, {"id": 15066634, "category_id": 31, "area": 40916, "bbox": [620, 237, 234, 242], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 17095, "bbox": [372, 267, 158, 231], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 6914, "bbox": [514, 281, 96, 110], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 7059, "bbox": [312, 188, 85, 118], "iscrowd": 0}]}, {"image_id": "ADE_val_00000299", "file_name": "ADE_val_00000299.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 57449, "bbox": [0, 0, 767, 115], "iscrowd": 0}]}, {"image_id": "ADE_val_00000300", "file_name": "ADE_val_00000300.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 58459, "bbox": [3, 46, 466, 259], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25491, "bbox": [4, 305, 464, 163], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 37241, "bbox": [2, 0, 466, 118], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 31523, "bbox": [2, 238, 323, 227], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5750, "bbox": [322, 164, 73, 82], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6364, "bbox": [325, 414, 143, 54], "iscrowd": 0}, {"id": 6095091, "category_id": 16, "area": 3534, "bbox": [289, 313, 132, 101], "iscrowd": 0}, {"id": 6557951, "category_id": 16, "area": 774, "bbox": [375, 276, 74, 19], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 6161, "bbox": [279, 332, 95, 134], "iscrowd": 0}, {"id": 17895, "category_id": 20, "area": 984, "bbox": [336, 296, 57, 22], "iscrowd": 0}, {"id": 1977023, "category_id": 20, "area": 899, "bbox": [369, 283, 52, 34], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 5807, "bbox": [151, 160, 87, 81], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3330, "bbox": [232, 4, 52, 104], "iscrowd": 0}, {"id": 61682, "category_id": 37, "area": 1628, "bbox": [313, 45, 35, 82], "iscrowd": 0}, {"id": 65482, "category_id": 37, "area": 1100, "bbox": [353, 81, 30, 66], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 9043, "bbox": [282, 23, 32, 305], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 367, "bbox": [318, 276, 32, 17], "iscrowd": 0}, {"id": 15776011, "category_id": 111, "area": 3843, "bbox": [99, 369, 73, 97], "iscrowd": 0}, {"id": 16761600, "category_id": 111, "area": 3756, "bbox": [157, 341, 64, 126], "iscrowd": 0}, {"id": 15779072, "category_id": 111, "area": 2723, "bbox": [208, 320, 54, 111], "iscrowd": 0}, {"id": 15785985, "category_id": 111, "area": 1749, "bbox": [247, 307, 37, 96], "iscrowd": 0}, {"id": 15265280, "category_id": 111, "area": 284, "bbox": [334, 271, 29, 14], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 4816, "bbox": [37, 83, 109, 63], "iscrowd": 0}]}, {"image_id": "ADE_val_00000301", "file_name": "ADE_val_00000301.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 133078, "bbox": [13, 79, 669, 272], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 78731, "bbox": [0, 1, 682, 202], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2856, "bbox": [658, 133, 23, 176], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 129178, "bbox": [0, 268, 681, 243], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 750, "bbox": [623, 307, 58, 29], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 632, "bbox": [1, 216, 12, 53], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 161, "bbox": [0, 201, 13, 15], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 262, "bbox": [249, 159, 18, 23], "iscrowd": 0}, {"id": 16722688, "category_id": 135, "area": 315, "bbox": [329, 154, 20, 22], "iscrowd": 0}, {"id": 14949633, "category_id": 135, "area": 193, "bbox": [191, 167, 14, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00000302", "file_name": "ADE_val_00000302.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 17844, "bbox": [0, 0, 336, 205], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 23803, "bbox": [5, 136, 372, 98], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1474, "bbox": [61, 0, 209, 10], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 8075, "bbox": [0, 0, 51, 192], "iscrowd": 0}, {"id": 14080968, "category_id": 9, "area": 8850, "bbox": [113, 21, 105, 99], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2190, "bbox": [263, 35, 21, 116], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2675, "bbox": [114, 113, 120, 90], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 3009, "bbox": [85, 14, 28, 130], "iscrowd": 0}, {"id": 338686, "category_id": 19, "area": 2073, "bbox": [213, 18, 25, 108], "iscrowd": 0}, {"id": 465151, "category_id": 19, "area": 7393, "bbox": [333, 1, 44, 172], "iscrowd": 0}, {"id": 1264895, "category_id": 19, "area": 2186, "bbox": [48, 3, 19, 159], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 741, "bbox": [0, 205, 40, 29], "iscrowd": 0}, {"id": 1126862, "category_id": 20, "area": 3706, "bbox": [152, 125, 65, 104], "iscrowd": 0}, {"id": 1388499, "category_id": 20, "area": 442, "bbox": [151, 97, 32, 16], "iscrowd": 0}, {"id": 404961, "category_id": 20, "area": 1256, "bbox": [98, 105, 56, 85], "iscrowd": 0}, {"id": 11219, "category_id": 20, "area": 1090, "bbox": [217, 104, 37, 79], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 388, "bbox": [146, 1, 50, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00000303", "file_name": "ADE_val_00000303.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 102318, "bbox": [1, 0, 510, 584], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 91941, "bbox": [0, 439, 511, 242], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 27465, "bbox": [0, 0, 495, 74], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 4581, "bbox": [33, 132, 184, 25], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 25483, "bbox": [31, 129, 187, 164], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1033, "bbox": [505, 281, 6, 302], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 13315, "bbox": [193, 344, 200, 187], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 16157, "bbox": [320, 375, 178, 215], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3420, "bbox": [395, 143, 37, 106], "iscrowd": 0}, {"id": 1705968, "category_id": 23, "area": 5868, "bbox": [432, 128, 52, 132], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 11125, "bbox": [156, 294, 248, 183], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1358, "bbox": [163, 80, 61, 39], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 4058, "bbox": [162, 298, 77, 90], "iscrowd": 0}, {"id": 56822, "category_id": 40, "area": 2440, "bbox": [329, 305, 68, 58], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 14912, "bbox": [1, 304, 95, 265], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 3975, "bbox": [237, 236, 101, 113], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 2435, "bbox": [64, 367, 72, 137], "iscrowd": 0}, {"id": 16509441, "category_id": 111, "area": 5079, "bbox": [33, 393, 92, 164], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 454, "bbox": [268, 338, 28, 18], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 7692, "bbox": [50, 17, 292, 91], "iscrowd": 0}]}, {"image_id": "ADE_val_00000304", "file_name": "ADE_val_00000304.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 4155, "bbox": [1, 1, 38, 216], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9909, "bbox": [252, 431, 192, 80], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 20994, "bbox": [169, 0, 385, 74], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 45942, "bbox": [1, 105, 223, 281], "iscrowd": 0}, {"id": 13292287, "category_id": 9, "area": 27127, "bbox": [254, 171, 288, 142], "iscrowd": 0}, {"id": 13232857, "category_id": 9, "area": 8790, "bbox": [581, 130, 92, 236], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 29556, "bbox": [24, 0, 252, 170], "iscrowd": 0}, {"id": 15010244, "category_id": 11, "area": 23249, "bbox": [260, 72, 260, 98], "iscrowd": 0}, {"id": 15532233, "category_id": 11, "area": 17223, "bbox": [503, 0, 133, 168], "iscrowd": 0}, {"id": 16711934, "category_id": 11, "area": 6943, "bbox": [629, 1, 43, 203], "iscrowd": 0}, {"id": 16716539, "category_id": 11, "area": 16693, "bbox": [531, 385, 141, 126], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 9055, "bbox": [384, 217, 95, 145], "iscrowd": 0}, {"id": 3735724, "category_id": 13, "area": 19827, "bbox": [429, 215, 223, 297], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 20245, "bbox": [215, 352, 302, 159], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 10741, "bbox": [195, 161, 115, 171], "iscrowd": 0}, {"id": 1520101, "category_id": 19, "area": 6437, "bbox": [502, 158, 83, 119], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 21513, "bbox": [32, 315, 266, 196], "iscrowd": 0}, {"id": 14745344, "category_id": 32, "area": 9479, "bbox": [244, 312, 296, 81], "iscrowd": 0}, {"id": 13762332, "category_id": 32, "area": 1140, "bbox": [294, 428, 77, 17], "iscrowd": 0}, {"id": 13041408, "category_id": 32, "area": 5785, "bbox": [480, 302, 192, 209], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 19391, "bbox": [0, 385, 160, 126], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 306, "bbox": [459, 266, 13, 38], "iscrowd": 0}, {"id": 12370185, "category_id": 148, "area": 271, "bbox": [476, 264, 16, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00000305", "file_name": "ADE_val_00000305.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 58967, "bbox": [0, 0, 682, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 55546, "bbox": [51, 337, 455, 175], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 10062, "bbox": [206, 41, 169, 82], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 32550, "bbox": [1, 17, 210, 247], "iscrowd": 0}, {"id": 16711884, "category_id": 11, "area": 7677, "bbox": [610, 339, 72, 172], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 3863, "bbox": [64, 268, 51, 148], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 71909, "bbox": [228, 93, 307, 418], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 4121, "bbox": [628, 0, 54, 100], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 5077, "bbox": [200, 87, 65, 118], "iscrowd": 0}, {"id": 15267593, "category_id": 32, "area": 73717, "bbox": [440, 34, 242, 478], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 6013, "bbox": [1, 11, 178, 83], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 9041, "bbox": [1, 101, 59, 262], "iscrowd": 0}]}, {"image_id": "ADE_val_00000306", "file_name": "ADE_val_00000306.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 32516, "bbox": [0, 0, 847, 188], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 13205, "bbox": [488, 11, 126, 162], "iscrowd": 0}, {"id": 2228376, "category_id": 13, "area": 6579, "bbox": [590, 15, 86, 130], "iscrowd": 0}, {"id": 4659077, "category_id": 13, "area": 5367, "bbox": [649, 8, 93, 113], "iscrowd": 0}, {"id": 4128946, "category_id": 13, "area": 1736, "bbox": [507, 0, 76, 85], "iscrowd": 0}, {"id": 4981677, "category_id": 13, "area": 74312, "bbox": [298, 150, 302, 359], "iscrowd": 0}, {"id": 5701754, "category_id": 13, "area": 69171, "bbox": [574, 105, 273, 405], "iscrowd": 0}, {"id": 4718755, "category_id": 13, "area": 5604, "bbox": [790, 40, 57, 174], "iscrowd": 0}, {"id": 4391088, "category_id": 13, "area": 11419, "bbox": [371, 40, 224, 159], "iscrowd": 0}, {"id": 5577645, "category_id": 13, "area": 37584, "bbox": [0, 105, 257, 290], "iscrowd": 0}, {"id": 3871129, "category_id": 13, "area": 25385, "bbox": [159, 20, 215, 274], "iscrowd": 0}, {"id": 3018376, "category_id": 13, "area": 12981, "bbox": [2, 0, 113, 163], "iscrowd": 0}, {"id": 5570724, "category_id": 13, "area": 4793, "bbox": [349, 0, 88, 76], "iscrowd": 0}, {"id": 2424964, "category_id": 13, "area": 1765, "bbox": [317, 0, 35, 80], "iscrowd": 0}, {"id": 4262542, "category_id": 13, "area": 1681, "bbox": [228, 4, 77, 90], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 64108, "bbox": [0, 80, 847, 430], "iscrowd": 0}, {"id": 3604735, "category_id": 16, "area": 16238, "bbox": [2, 49, 444, 141], "iscrowd": 0}, {"id": 5644031, "category_id": 16, "area": 3324, "bbox": [145, 91, 112, 63], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1490, "bbox": [123, 72, 72, 36], "iscrowd": 0}, {"id": 1860565, "category_id": 20, "area": 1840, "bbox": [804, 413, 43, 96], "iscrowd": 0}, {"id": 287709, "category_id": 20, "area": 2077, "bbox": [339, 89, 59, 64], "iscrowd": 0}, {"id": 87254, "category_id": 20, "area": 1860, "bbox": [0, 187, 31, 123], "iscrowd": 0}, {"id": 24041, "category_id": 20, "area": 1412, "bbox": [93, 84, 59, 39], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 9027, "bbox": [66, 321, 263, 115], "iscrowd": 0}, {"id": 1569576, "category_id": 138, "area": 1920, "bbox": [520, 194, 77, 47], "iscrowd": 0}, {"id": 452148, "category_id": 138, "area": 1619, "bbox": [575, 160, 95, 39], "iscrowd": 0}, {"id": 582971, "category_id": 138, "area": 1184, "bbox": [663, 112, 68, 31], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 2753, "bbox": [568, 280, 108, 35], "iscrowd": 0}, {"id": 13561856, "category_id": 143, "area": 2444, "bbox": [120, 364, 92, 41], "iscrowd": 0}, {"id": 12844800, "category_id": 143, "area": 2409, "bbox": [189, 332, 134, 55], "iscrowd": 0}, {"id": 13102091, "category_id": 143, "area": 2829, "bbox": [204, 336, 101, 41], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 3582, "bbox": [190, 428, 56, 79], "iscrowd": 0}, {"id": 13678389, "category_id": 148, "area": 1412, "bbox": [566, 230, 32, 55], "iscrowd": 0}, {"id": 12962829, "category_id": 148, "area": 956, "bbox": [636, 190, 27, 46], "iscrowd": 0}, {"id": 13871648, "category_id": 148, "area": 485, "bbox": [652, 148, 23, 38], "iscrowd": 0}, {"id": 11787294, "category_id": 148, "area": 812, "bbox": [598, 173, 22, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00000307", "file_name": "ADE_val_00000307.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 11496, "bbox": [0, 0, 255, 196], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1379, "bbox": [0, 175, 256, 81], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 5578, "bbox": [193, 0, 63, 175], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 10586, "bbox": [1, 175, 254, 79], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 7999, "bbox": [66, 29, 83, 102], "iscrowd": 0}, {"id": 16777210, "category_id": 9, "area": 5715, "bbox": [162, 29, 75, 120], "iscrowd": 0}, {"id": 14343660, "category_id": 9, "area": 6469, "bbox": [1, 16, 49, 149], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4260, "bbox": [76, 130, 109, 95], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4478, "bbox": [169, 138, 75, 104], "iscrowd": 0}, {"id": 208561, "category_id": 20, "area": 4009, "bbox": [35, 127, 76, 95], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 441, "bbox": [178, 149, 34, 19], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 605, "bbox": [47, 137, 34, 26], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 1351, "bbox": [103, 1, 52, 32], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 142, "bbox": [134, 134, 24, 9], "iscrowd": 0}, {"id": 13041426, "category_id": 143, "area": 62, "bbox": [78, 136, 19, 4], "iscrowd": 0}]}, {"image_id": "ADE_val_00000308", "file_name": "ADE_val_00000308.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 27677, "bbox": [2, 1, 362, 212], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3377, "bbox": [2, 173, 362, 190], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1096, "bbox": [72, 1, 167, 14], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 24266, "bbox": [2, 187, 360, 176], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6587, "bbox": [7, 38, 106, 102], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1740, "bbox": [213, 75, 25, 87], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 10752, "bbox": [102, 154, 234, 129], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 4339, "bbox": [2, 3, 140, 42], "iscrowd": 0}, {"id": 994047, "category_id": 19, "area": 3400, "bbox": [85, 40, 55, 113], "iscrowd": 0}, {"id": 1711342, "category_id": 19, "area": 2282, "bbox": [3, 37, 40, 103], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 602, "bbox": [200, 134, 29, 27], "iscrowd": 0}, {"id": 1002170, "category_id": 20, "area": 1897, "bbox": [31, 136, 29, 105], "iscrowd": 0}, {"id": 18629, "category_id": 20, "area": 11128, "bbox": [70, 147, 114, 173], "iscrowd": 0}, {"id": 601818, "category_id": 20, "area": 1197, "bbox": [83, 126, 46, 34], "iscrowd": 0}, {"id": 17383, "category_id": 20, "area": 12227, "bbox": [264, 184, 100, 174], "iscrowd": 0}, {"id": 24809, "category_id": 20, "area": 3297, "bbox": [47, 140, 89, 132], "iscrowd": 0}, {"id": 1912540, "category_id": 20, "area": 3791, "bbox": [246, 140, 101, 119], "iscrowd": 0}, {"id": 1332657, "category_id": 20, "area": 1860, "bbox": [209, 136, 69, 113], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1945, "bbox": [329, 23, 35, 64], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 1680, "bbox": [4, 138, 80, 57], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 518, "bbox": [127, 106, 28, 52], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 3668, "bbox": [135, 1, 76, 73], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 320, "bbox": [311, 88, 16, 32], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 128, "bbox": [166, 185, 35, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00000309", "file_name": "ADE_val_00000309.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 65455, "bbox": [2, 2, 478, 363], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 48905, "bbox": [2, 361, 478, 279], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 15803, "bbox": [2, 1, 441, 62], "iscrowd": 0}, {"id": 28927, "category_id": 100, "area": 15364, "bbox": [382, 147, 98, 257], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 23512, "bbox": [303, 74, 103, 294], "iscrowd": 0}, {"id": 4908305, "category_id": 15, "area": 20434, "bbox": [132, 90, 121, 247], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 27411, "bbox": [83, 340, 369, 273], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1152, "bbox": [271, 315, 48, 44], "iscrowd": 0}, {"id": 21965, "category_id": 20, "area": 12336, "bbox": [338, 396, 142, 231], "iscrowd": 0}, {"id": 24772, "category_id": 20, "area": 2258, "bbox": [26, 337, 56, 180], "iscrowd": 0}, {"id": 15299, "category_id": 20, "area": 5183, "bbox": [53, 350, 79, 211], "iscrowd": 0}, {"id": 601059, "category_id": 20, "area": 1851, "bbox": [87, 308, 70, 47], "iscrowd": 0}, {"id": 21955, "category_id": 20, "area": 1994, "bbox": [377, 336, 58, 54], "iscrowd": 0}, {"id": 14310, "category_id": 20, "area": 9943, "bbox": [105, 368, 165, 244], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 865, "bbox": [363, 196, 39, 139], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 4667, "bbox": [194, 302, 88, 76], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 7187, "bbox": [176, 1, 94, 224], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 5318, "bbox": [16, 418, 91, 220], "iscrowd": 0}, {"id": 16059720, "category_id": 94, "area": 2880, "bbox": [318, 460, 24, 178], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 2259, "bbox": [63, 115, 69, 100], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 634, "bbox": [274, 355, 28, 43], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1000, "bbox": [204, 386, 65, 20], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 592, "bbox": [283, 415, 45, 19], "iscrowd": 0}, {"id": 12445440, "category_id": 143, "area": 868, "bbox": [358, 414, 58, 19], "iscrowd": 0}, {"id": 12904448, "category_id": 143, "area": 623, "bbox": [189, 406, 50, 16], "iscrowd": 0}, {"id": 12450586, "category_id": 143, "area": 594, "bbox": [250, 404, 49, 15], "iscrowd": 0}, {"id": 12320514, "category_id": 143, "area": 627, "bbox": [212, 420, 47, 20], "iscrowd": 0}, {"id": 10682112, "category_id": 143, "area": 299, "bbox": [347, 399, 33, 14], "iscrowd": 0}, {"id": 13626112, "category_id": 143, "area": 254, "bbox": [408, 406, 38, 14], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 264, "bbox": [389, 376, 14, 30], "iscrowd": 0}, {"id": 11783478, "category_id": 148, "area": 290, "bbox": [359, 371, 16, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00000310", "file_name": "ADE_val_00000310.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 50828, "bbox": [1, 0, 657, 342], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 78024, "bbox": [1, 209, 655, 303], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 16202, "bbox": [94, 0, 563, 44], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3812, "bbox": [109, 89, 345, 133], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 8006, "bbox": [169, 440, 161, 72], "iscrowd": 0}, {"id": 28927, "category_id": 100, "area": 32717, "bbox": [192, 50, 192, 204], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5332, "bbox": [491, 70, 67, 132], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 15073, "bbox": [47, 187, 126, 158], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 6563, "bbox": [439, 36, 47, 195], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 39076, "bbox": [256, 246, 373, 238], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 11983, "bbox": [44, 318, 140, 193], "iscrowd": 0}, {"id": 731585, "category_id": 20, "area": 2928, "bbox": [471, 160, 51, 96], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 14690, "bbox": [2, 23, 102, 150], "iscrowd": 0}, {"id": 1573089, "category_id": 23, "area": 2088, "bbox": [582, 60, 38, 58], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 2735, "bbox": [365, 153, 60, 94], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 4163, "bbox": [518, 121, 111, 88], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 302, "bbox": [472, 255, 28, 14], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 4770, "bbox": [180, 300, 167, 97], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 2232, "bbox": [404, 2, 96, 89], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 165, "bbox": [332, 229, 19, 21], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 673, "bbox": [426, 219, 30, 26], "iscrowd": 0}, {"id": 15663329, "category_id": 126, "area": 914, "bbox": [124, 157, 33, 36], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 1294, "bbox": [536, 203, 38, 63], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 437, "bbox": [376, 285, 43, 13], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 275, "bbox": [297, 260, 15, 39], "iscrowd": 0}, {"id": 11590405, "category_id": 148, "area": 212, "bbox": [327, 278, 15, 37], "iscrowd": 0}, {"id": 14474247, "category_id": 148, "area": 370, "bbox": [360, 272, 17, 43], "iscrowd": 0}, {"id": 14734643, "category_id": 148, "area": 418, "bbox": [317, 255, 15, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00000311", "file_name": "ADE_val_00000311.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 68037, "bbox": [2, 1, 609, 371], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 83916, "bbox": [1, 280, 609, 232], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 16596, "bbox": [2, 1, 485, 63], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7309, "bbox": [247, 152, 84, 112], "iscrowd": 0}, {"id": 16711920, "category_id": 11, "area": 31442, "bbox": [441, 133, 148, 257], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 22728, "bbox": [9, 72, 142, 225], "iscrowd": 0}, {"id": 3604240, "category_id": 15, "area": 7111, "bbox": [160, 117, 62, 136], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 17481, "bbox": [104, 246, 315, 235], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1175, "bbox": [122, 224, 51, 29], "iscrowd": 0}, {"id": 1135288, "category_id": 20, "area": 18414, "bbox": [320, 256, 139, 214], "iscrowd": 0}, {"id": 10464, "category_id": 20, "area": 1708, "bbox": [317, 232, 54, 41], "iscrowd": 0}, {"id": 603880, "category_id": 20, "area": 3608, "bbox": [109, 242, 64, 158], "iscrowd": 0}, {"id": 19376, "category_id": 20, "area": 9144, "bbox": [154, 255, 132, 192], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 7917, "bbox": [348, 104, 92, 110], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1373, "bbox": [206, 201, 49, 45], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 155, "bbox": [258, 29, 20, 10], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 5653, "bbox": [189, 1, 96, 145], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 3313, "bbox": [506, 50, 67, 87], "iscrowd": 0}, {"id": 13434648, "category_id": 136, "area": 947, "bbox": [221, 239, 34, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00000312", "file_name": "ADE_val_00000312.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 62473, "bbox": [2, 195, 507, 282], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 105937, "bbox": [2, 412, 509, 270], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 112656, "bbox": [2, 2, 509, 316], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 5615, "bbox": [195, 347, 173, 47], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 15257, "bbox": [174, 378, 254, 169], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 9769, "bbox": [454, 236, 58, 206], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 191, "bbox": [172, 385, 14, 25], "iscrowd": 0}, {"id": 1984986, "category_id": 20, "area": 3097, "bbox": [138, 397, 83, 137], "iscrowd": 0}, {"id": 17882, "category_id": 20, "area": 262, "bbox": [399, 379, 14, 26], "iscrowd": 0}, {"id": 804820, "category_id": 20, "area": 3627, "bbox": [360, 396, 84, 140], "iscrowd": 0}, {"id": 1782961, "category_id": 20, "area": 1987, "bbox": [49, 369, 62, 89], "iscrowd": 0}, {"id": 1467571, "category_id": 20, "area": 2672, "bbox": [3, 378, 70, 105], "iscrowd": 0}, {"id": 16579, "category_id": 20, "area": 10101, "bbox": [253, 423, 102, 170], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1999, "bbox": [62, 295, 32, 68], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1995, "bbox": [195, 271, 46, 81], "iscrowd": 0}, {"id": 1245133, "category_id": 37, "area": 2140, "bbox": [324, 270, 49, 82], "iscrowd": 0}, {"id": 1310706, "category_id": 37, "area": 2406, "bbox": [253, 88, 51, 90], "iscrowd": 0}, {"id": 57848, "category_id": 37, "area": 1230, "bbox": [264, 178, 36, 47], "iscrowd": 0}, {"id": 1966026, "category_id": 37, "area": 404, "bbox": [270, 224, 24, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00000313", "file_name": "ADE_val_00000313.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 35400, "bbox": [0, 1, 511, 282], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12113, "bbox": [0, 275, 511, 251], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5247, "bbox": [1, 0, 510, 12], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4036, "bbox": [456, 20, 54, 156], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 7676, "bbox": [375, 44, 93, 194], "iscrowd": 0}, {"id": 16119795, "category_id": 9, "area": 7837, "bbox": [136, 44, 89, 163], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 7201, "bbox": [247, 213, 107, 93], "iscrowd": 0}, {"id": 5570802, "category_id": 16, "area": 23657, "bbox": [189, 282, 322, 246], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 7246, "bbox": [117, 28, 55, 172], "iscrowd": 0}, {"id": 20985, "category_id": 19, "area": 8089, "bbox": [196, 28, 58, 212], "iscrowd": 0}, {"id": 7675, "category_id": 19, "area": 7717, "bbox": [351, 25, 55, 223], "iscrowd": 0}, {"id": 15338, "category_id": 19, "area": 5843, "bbox": [434, 24, 53, 201], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 52399, "bbox": [23, 254, 355, 273], "iscrowd": 0}, {"id": 20966, "category_id": 20, "area": 11685, "bbox": [409, 288, 102, 240], "iscrowd": 0}, {"id": 20166, "category_id": 20, "area": 5711, "bbox": [341, 183, 97, 103], "iscrowd": 0}, {"id": 2047966, "category_id": 20, "area": 8721, "bbox": [0, 224, 68, 215], "iscrowd": 0}, {"id": 483278, "category_id": 20, "area": 5531, "bbox": [408, 220, 102, 62], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1289, "bbox": [297, 99, 43, 30], "iscrowd": 0}, {"id": 3476978, "category_id": 23, "area": 327, "bbox": [263, 199, 17, 21], "iscrowd": 0}, {"id": 4459519, "category_id": 23, "area": 448, "bbox": [320, 198, 21, 26], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 8041, "bbox": [116, 201, 152, 107], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1426, "bbox": [254, 131, 49, 84], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2596, "bbox": [133, 220, 82, 62], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 564, "bbox": [307, 176, 40, 23], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 3344, "bbox": [176, 300, 87, 117], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 262, "bbox": [313, 194, 30, 31], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 1572, "bbox": [226, 304, 122, 36], "iscrowd": 0}, {"id": 10417408, "category_id": 143, "area": 1303, "bbox": [423, 347, 52, 38], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 104, "bbox": [290, 208, 9, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00000314", "file_name": "ADE_val_00000314.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 117523, "bbox": [1, 1, 767, 454], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 41741, "bbox": [1, 386, 766, 125], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 22823, "bbox": [126, 1, 549, 89], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1725, "bbox": [351, 257, 110, 55], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 5437, "bbox": [405, 137, 190, 68], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 15389, "bbox": [493, 123, 116, 230], "iscrowd": 0}, {"id": 13231870, "category_id": 9, "area": 7073, "bbox": [406, 146, 74, 165], "iscrowd": 0}, {"id": 15396095, "category_id": 9, "area": 8012, "bbox": [233, 63, 125, 91], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 30519, "bbox": [607, 171, 134, 277], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 30028, "bbox": [223, 50, 147, 361], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 8193, "bbox": [310, 331, 251, 81], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2608, "bbox": [507, 289, 59, 63], "iscrowd": 0}, {"id": 1333937, "category_id": 20, "area": 614, "bbox": [368, 290, 26, 44], "iscrowd": 0}, {"id": 24521, "category_id": 20, "area": 1142, "bbox": [271, 293, 51, 52], "iscrowd": 0}, {"id": 340145, "category_id": 20, "area": 15730, "bbox": [250, 306, 142, 205], "iscrowd": 0}, {"id": 24248, "category_id": 20, "area": 21446, "bbox": [392, 315, 125, 196], "iscrowd": 0}, {"id": 17631, "category_id": 20, "area": 10310, "bbox": [503, 298, 107, 213], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 41932, "bbox": [16, 91, 183, 257], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 4477, "bbox": [394, 1, 99, 189], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 840, "bbox": [382, 302, 65, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00000315", "file_name": "ADE_val_00000315.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 96813, "bbox": [1, 0, 681, 476], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7976, "bbox": [0, 426, 682, 85], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 37090, "bbox": [114, 268, 569, 244], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 7916, "bbox": [575, 164, 108, 125], "iscrowd": 0}, {"id": 739807, "category_id": 20, "area": 8851, "bbox": [240, 173, 136, 103], "iscrowd": 0}, {"id": 2181821, "category_id": 20, "area": 41539, "bbox": [1, 184, 287, 328], "iscrowd": 0}, {"id": 941759, "category_id": 20, "area": 7137, "bbox": [234, 405, 144, 106], "iscrowd": 0}, {"id": 1456070, "category_id": 20, "area": 6097, "bbox": [498, 367, 180, 134], "iscrowd": 0}, {"id": 21196, "category_id": 20, "area": 14230, "bbox": [476, 222, 207, 290], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 18001, "bbox": [11, 1, 150, 122], "iscrowd": 0}, {"id": 5311487, "category_id": 23, "area": 9619, "bbox": [388, 1, 112, 103], "iscrowd": 0}, {"id": 1835263, "category_id": 23, "area": 17450, "bbox": [203, 1, 149, 125], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 16758, "bbox": [325, 55, 173, 200], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 302, "bbox": [292, 274, 31, 16], "iscrowd": 0}, {"id": 583919, "category_id": 121, "area": 933, "bbox": [165, 275, 60, 22], "iscrowd": 0}, {"id": 47095, "category_id": 121, "area": 979, "bbox": [377, 301, 51, 26], "iscrowd": 0}, {"id": 45033, "category_id": 121, "area": 588, "bbox": [582, 267, 46, 16], "iscrowd": 0}, {"id": 970751, "category_id": 121, "area": 982, "bbox": [470, 304, 68, 20], "iscrowd": 0}, {"id": 973031, "category_id": 121, "area": 801, "bbox": [483, 290, 51, 21], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 5268, "bbox": [376, 197, 70, 107], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 2407, "bbox": [483, 257, 159, 46], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 1244, "bbox": [346, 289, 117, 27], "iscrowd": 0}, {"id": 13565716, "category_id": 143, "area": 2012, "bbox": [133, 293, 136, 31], "iscrowd": 0}, {"id": 12189445, "category_id": 143, "area": 391, "bbox": [344, 317, 40, 24], "iscrowd": 0}, {"id": 10419968, "category_id": 143, "area": 2669, "bbox": [426, 319, 158, 35], "iscrowd": 0}, {"id": 10216461, "category_id": 143, "area": 199, "bbox": [548, 306, 22, 13], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 1765, "bbox": [261, 233, 48, 51], "iscrowd": 0}, {"id": 11716911, "category_id": 148, "area": 2365, "bbox": [444, 239, 48, 72], "iscrowd": 0}]}, {"image_id": "ADE_val_00000316", "file_name": "ADE_val_00000316.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 142362, "bbox": [2, 19, 768, 493], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9462, "bbox": [99, 422, 583, 90], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 86043, "bbox": [2, 1, 766, 147], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6201, "bbox": [472, 267, 118, 118], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 31311, "bbox": [596, 125, 143, 277], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 9119, "bbox": [700, 374, 69, 136], "iscrowd": 0}, {"id": 16712168, "category_id": 11, "area": 14341, "bbox": [170, 265, 143, 199], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 26503, "bbox": [189, 355, 415, 155], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 9675, "bbox": [338, 216, 105, 142], "iscrowd": 0}, {"id": 1714942, "category_id": 19, "area": 3237, "bbox": [590, 226, 150, 208], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1756, "bbox": [476, 322, 36, 77], "iscrowd": 0}, {"id": 342484, "category_id": 20, "area": 4925, "bbox": [513, 347, 69, 120], "iscrowd": 0}, {"id": 798937, "category_id": 20, "area": 13824, "bbox": [269, 450, 261, 61], "iscrowd": 0}, {"id": 23999, "category_id": 20, "area": 784, "bbox": [345, 311, 21, 44], "iscrowd": 0}, {"id": 21465, "category_id": 20, "area": 1871, "bbox": [260, 321, 34, 85], "iscrowd": 0}, {"id": 1395400, "category_id": 20, "area": 4745, "bbox": [208, 345, 56, 129], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 11459, "bbox": [40, 189, 80, 163], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 6181, "bbox": [331, 16, 132, 204], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 248, "bbox": [274, 233, 10, 36], "iscrowd": 0}, {"id": 1769238, "category_id": 99, "area": 319, "bbox": [205, 229, 10, 42], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 1064, "bbox": [233, 218, 25, 47], "iscrowd": 0}, {"id": 12969487, "category_id": 136, "area": 5095, "bbox": [357, 308, 63, 98], "iscrowd": 0}]}, {"image_id": "ADE_val_00000317", "file_name": "ADE_val_00000317.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 142784, "bbox": [0, 116, 511, 409], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 22140, "bbox": [1, 499, 510, 207], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 75020, "bbox": [0, 0, 511, 185], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1569, "bbox": [118, 378, 61, 81], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 46040, "bbox": [1, 550, 509, 157], "iscrowd": 0}, {"id": 28927, "category_id": 100, "area": 16269, "bbox": [371, 422, 141, 162], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2964, "bbox": [73, 239, 21, 213], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 24847, "bbox": [1, 462, 332, 178], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 7817, "bbox": [190, 522, 118, 183], "iscrowd": 0}, {"id": 18377, "category_id": 20, "area": 2508, "bbox": [251, 473, 108, 148], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 382, "bbox": [94, 307, 79, 8], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1017, "bbox": [94, 292, 74, 17], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 7136, "bbox": [153, 9, 87, 125], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 258, "bbox": [482, 400, 15, 37], "iscrowd": 0}, {"id": 851712, "category_id": 99, "area": 232, "bbox": [469, 411, 14, 26], "iscrowd": 0}, {"id": 63232, "category_id": 99, "area": 327, "bbox": [450, 407, 19, 28], "iscrowd": 0}, {"id": 783104, "category_id": 99, "area": 289, "bbox": [437, 401, 14, 34], "iscrowd": 0}, {"id": 61979, "category_id": 99, "area": 87, "bbox": [464, 407, 9, 18], "iscrowd": 0}, {"id": 61974, "category_id": 99, "area": 91, "bbox": [451, 399, 6, 21], "iscrowd": 0}, {"id": 916756, "category_id": 99, "area": 87, "bbox": [447, 392, 6, 25], "iscrowd": 0}, {"id": 2226455, "category_id": 99, "area": 60, "bbox": [462, 400, 5, 16], "iscrowd": 0}, {"id": 2359040, "category_id": 99, "area": 39, "bbox": [474, 401, 7, 10], "iscrowd": 0}, {"id": 1769233, "category_id": 99, "area": 86, "bbox": [107, 362, 6, 20], "iscrowd": 0}, {"id": 58624, "category_id": 99, "area": 106, "bbox": [147, 357, 6, 24], "iscrowd": 0}, {"id": 65280, "category_id": 99, "area": 115, "bbox": [158, 356, 7, 25], "iscrowd": 0}, {"id": 65310, "category_id": 99, "area": 28, "bbox": [138, 369, 5, 10], "iscrowd": 0}, {"id": 1900300, "category_id": 99, "area": 28, "bbox": [119, 368, 3, 10], "iscrowd": 0}, {"id": 2621198, "category_id": 99, "area": 106, "bbox": [126, 362, 8, 18], "iscrowd": 0}, {"id": 1507074, "category_id": 99, "area": 122, "bbox": [94, 356, 6, 28], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 1983, "bbox": [119, 459, 55, 44], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 750, "bbox": [244, 292, 32, 41], "iscrowd": 0}, {"id": 15742464, "category_id": 135, "area": 442, "bbox": [0, 276, 16, 42], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 3021, "bbox": [1, 412, 53, 72], "iscrowd": 0}]}, {"image_id": "ADE_val_00000318", "file_name": "ADE_val_00000318.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 100626, "bbox": [0, 103, 741, 287], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 61043, "bbox": [0, 295, 767, 216], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 100537, "bbox": [0, 0, 767, 163], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2125, "bbox": [496, 181, 67, 137], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 2, "bbox": [434, 379, 2, 2], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4378, "bbox": [25, 194, 44, 107], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 18139, "bbox": [112, 161, 95, 209], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 21228, "bbox": [353, 337, 389, 172], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 2148, "bbox": [67, 191, 21, 107], "iscrowd": 0}, {"id": 2305023, "category_id": 19, "area": 10915, "bbox": [716, 76, 51, 331], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 6114, "bbox": [349, 304, 72, 138], "iscrowd": 0}, {"id": 1127092, "category_id": 20, "area": 3171, "bbox": [521, 287, 74, 53], "iscrowd": 0}, {"id": 10981, "category_id": 20, "area": 4435, "bbox": [724, 344, 42, 167], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1053, "bbox": [345, 187, 27, 40], "iscrowd": 0}, {"id": 2035967, "category_id": 23, "area": 2038, "bbox": [542, 172, 43, 51], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 8650, "bbox": [261, 260, 187, 107], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2102, "bbox": [239, 227, 30, 94], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1014, "bbox": [287, 272, 37, 35], "iscrowd": 0}, {"id": 49407, "category_id": 40, "area": 744, "bbox": [366, 285, 43, 30], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 5868, "bbox": [217, 319, 111, 99], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 1109, "bbox": [307, 71, 84, 59], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 3022, "bbox": [412, 317, 85, 61], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 2451, "bbox": [385, 400, 79, 41], "iscrowd": 0}, {"id": 10940416, "category_id": 143, "area": 2052, "bbox": [438, 357, 76, 34], "iscrowd": 0}, {"id": 10551040, "category_id": 143, "area": 7371, "bbox": [466, 415, 133, 75], "iscrowd": 0}, {"id": 13368599, "category_id": 143, "area": 3365, "bbox": [604, 412, 106, 48], "iscrowd": 0}, {"id": 12772352, "category_id": 143, "area": 861, "bbox": [592, 345, 58, 21], "iscrowd": 0}, {"id": 11205641, "category_id": 143, "area": 3157, "bbox": [589, 373, 112, 42], "iscrowd": 0}, {"id": 11203091, "category_id": 143, "area": 1066, "bbox": [522, 334, 60, 22], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 1144, "bbox": [576, 367, 34, 81], "iscrowd": 0}, {"id": 14070051, "category_id": 148, "area": 549, "bbox": [574, 327, 24, 39], "iscrowd": 0}, {"id": 13417487, "category_id": 148, "area": 890, "bbox": [510, 342, 28, 66], "iscrowd": 0}]}, {"image_id": "ADE_val_00000319", "file_name": "ADE_val_00000319.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 94268, "bbox": [0, 0, 511, 408], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 54859, "bbox": [0, 383, 511, 161], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 25183, "bbox": [2, 295, 397, 234], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 36454, "bbox": [289, 22, 160, 290], "iscrowd": 0}, {"id": 1190655, "category_id": 19, "area": 4393, "bbox": [1, 14, 53, 123], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 11040, "bbox": [169, 367, 107, 175], "iscrowd": 0}, {"id": 281271, "category_id": 20, "area": 7271, "bbox": [1, 367, 75, 175], "iscrowd": 0}, {"id": 936920, "category_id": 20, "area": 20517, "bbox": [339, 268, 172, 239], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 9791, "bbox": [89, 54, 169, 58], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 7558, "bbox": [46, 149, 182, 102], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 3248, "bbox": [115, 228, 49, 85], "iscrowd": 0}]}, {"image_id": "ADE_val_00000320", "file_name": "ADE_val_00000320.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6537, "bbox": [78, 0, 178, 122], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 19060, "bbox": [0, 111, 256, 144], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 504, "bbox": [219, 22, 37, 54], "iscrowd": 0}, {"id": 28927, "category_id": 100, "area": 3069, "bbox": [192, 73, 63, 93], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1876, "bbox": [82, 2, 34, 61], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5734, "bbox": [3, 86, 230, 58], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 6338, "bbox": [0, 0, 85, 87], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1901, "bbox": [0, 77, 33, 133], "iscrowd": 0}, {"id": 13268, "category_id": 20, "area": 455, "bbox": [79, 67, 22, 24], "iscrowd": 0}, {"id": 16814, "category_id": 20, "area": 606, "bbox": [116, 68, 27, 27], "iscrowd": 0}, {"id": 600283, "category_id": 20, "area": 389, "bbox": [0, 66, 23, 25], "iscrowd": 0}, {"id": 1519033, "category_id": 20, "area": 5921, "bbox": [23, 79, 98, 166], "iscrowd": 0}, {"id": 17614, "category_id": 20, "area": 7084, "bbox": [122, 79, 103, 173], "iscrowd": 0}, {"id": 12725, "category_id": 20, "area": 898, "bbox": [158, 70, 33, 34], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2990, "bbox": [188, 0, 68, 52], "iscrowd": 0}, {"id": 3277819, "category_id": 23, "area": 217, "bbox": [127, 12, 15, 20], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 908, "bbox": [122, 26, 40, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00000321", "file_name": "ADE_val_00000321.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 103565, "bbox": [2, 1, 766, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 46640, "bbox": [88, 328, 680, 184], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 92066, "bbox": [81, 1, 687, 196], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1236, "bbox": [149, 236, 304, 60], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 8827, "bbox": [105, 107, 43, 305], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 670, "bbox": [104, 104, 45, 320], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 44003, "bbox": [360, 115, 185, 308], "iscrowd": 0}, {"id": 14811358, "category_id": 11, "area": 4141, "bbox": [187, 193, 89, 55], "iscrowd": 0}, {"id": 15728884, "category_id": 11, "area": 2976, "bbox": [303, 197, 59, 60], "iscrowd": 0}, {"id": 14753776, "category_id": 11, "area": 4158, "bbox": [168, 283, 145, 68], "iscrowd": 0}, {"id": 15925476, "category_id": 11, "area": 1910, "bbox": [297, 280, 65, 50], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 18704, "bbox": [127, 323, 316, 143], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 631, "bbox": [159, 289, 21, 75], "iscrowd": 0}, {"id": 2046165, "category_id": 20, "area": 1111, "bbox": [145, 296, 27, 80], "iscrowd": 0}, {"id": 20667, "category_id": 20, "area": 1900, "bbox": [127, 303, 34, 106], "iscrowd": 0}, {"id": 865733, "category_id": 20, "area": 1387, "bbox": [241, 284, 37, 41], "iscrowd": 0}, {"id": 13008, "category_id": 20, "area": 862, "bbox": [346, 289, 24, 59], "iscrowd": 0}, {"id": 10727, "category_id": 20, "area": 1265, "bbox": [364, 291, 31, 74], "iscrowd": 0}, {"id": 2116534, "category_id": 20, "area": 2102, "bbox": [386, 297, 39, 89], "iscrowd": 0}, {"id": 24286, "category_id": 20, "area": 18250, "bbox": [226, 328, 130, 182], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3614, "bbox": [81, 144, 30, 133], "iscrowd": 0}, {"id": 2819572, "category_id": 23, "area": 8156, "bbox": [27, 107, 54, 174], "iscrowd": 0}, {"id": 4653311, "category_id": 23, "area": 9212, "bbox": [627, 166, 103, 97], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3454, "bbox": [287, 31, 87, 76], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 695, "bbox": [289, 281, 30, 36], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 97, "bbox": [293, 99, 19, 8], "iscrowd": 0}, {"id": 698099, "category_id": 83, "area": 35, "bbox": [247, 145, 8, 5], "iscrowd": 0}, {"id": 48639, "category_id": 83, "area": 31, "bbox": [195, 170, 6, 7], "iscrowd": 0}, {"id": 1296359, "category_id": 83, "area": 23, "bbox": [198, 180, 7, 4], "iscrowd": 0}, {"id": 1747454, "category_id": 83, "area": 29, "bbox": [449, 138, 6, 6], "iscrowd": 0}, {"id": 1100272, "category_id": 83, "area": 30, "bbox": [417, 154, 7, 6], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 63, "bbox": [195, 201, 8, 10], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 42, "bbox": [442, 286, 8, 6], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 1533, "bbox": [264, 195, 52, 41], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 1301, "bbox": [651, 262, 36, 55], "iscrowd": 0}, {"id": 13500168, "category_id": 136, "area": 110, "bbox": [196, 233, 11, 11], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 155, "bbox": [431, 289, 27, 12], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 296, "bbox": [154, 167, 12, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00000322", "file_name": "ADE_val_00000322.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 96034, "bbox": [1, 0, 653, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 506, "bbox": [539, 475, 83, 30], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 18775, "bbox": [184, 0, 469, 61], "iscrowd": 0}, {"id": 28927, "category_id": 100, "area": 105535, "bbox": [24, 22, 302, 490], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 39705, "bbox": [238, 363, 411, 149], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 32131, "bbox": [489, 144, 165, 252], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 7505, "bbox": [536, 316, 103, 186], "iscrowd": 0}, {"id": 1855165, "category_id": 20, "area": 4847, "bbox": [486, 394, 168, 118], "iscrowd": 0}, {"id": 10722, "category_id": 20, "area": 12771, "bbox": [132, 392, 145, 120], "iscrowd": 0}, {"id": 1986505, "category_id": 20, "area": 5239, "bbox": [279, 321, 88, 81], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 9021, "bbox": [382, 0, 142, 153], "iscrowd": 0}]}, {"image_id": "ADE_val_00000323", "file_name": "ADE_val_00000323.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 162608, "bbox": [3, 10, 765, 461], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 29273, "bbox": [1, 375, 647, 137], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 27398, "bbox": [1, 1, 766, 52], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2685, "bbox": [500, 276, 39, 104], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 19958, "bbox": [30, 141, 131, 177], "iscrowd": 0}, {"id": 14151626, "category_id": 9, "area": 11625, "bbox": [398, 171, 93, 134], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 19221, "bbox": [443, 425, 324, 87], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 12207, "bbox": [197, 321, 252, 118], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 4429, "bbox": [379, 109, 146, 141], "iscrowd": 0}, {"id": 2248166, "category_id": 19, "area": 6958, "bbox": [1, 102, 188, 173], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 7762, "bbox": [1, 278, 74, 167], "iscrowd": 0}, {"id": 14057, "category_id": 20, "area": 12136, "bbox": [147, 311, 135, 183], "iscrowd": 0}, {"id": 14031, "category_id": 20, "area": 2564, "bbox": [257, 280, 65, 46], "iscrowd": 0}, {"id": 1069250, "category_id": 20, "area": 8042, "bbox": [417, 296, 80, 170], "iscrowd": 0}, {"id": 482022, "category_id": 20, "area": 16476, "bbox": [292, 356, 137, 155], "iscrowd": 0}, {"id": 155337, "category_id": 20, "area": 7441, "bbox": [122, 269, 98, 150], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 19566, "bbox": [601, 129, 121, 195], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 2291, "bbox": [558, 303, 150, 43], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 2566, "bbox": [47, 317, 69, 94], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 9873, "bbox": [250, 1, 144, 241], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 2150, "bbox": [572, 450, 87, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00000324", "file_name": "ADE_val_00000324.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 45570, "bbox": [0, 0, 682, 505], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 22140, "bbox": [461, 285, 221, 226], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6418, "bbox": [0, 163, 99, 98], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 6192, "bbox": [573, 285, 109, 95], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 14798, "bbox": [0, 0, 115, 331], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 8033, "bbox": [138, 105, 74, 204], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 7175, "bbox": [191, 0, 45, 214], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 46403, "bbox": [1, 224, 575, 288], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 10284, "bbox": [10, 0, 85, 214], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 585, "bbox": [260, 142, 29, 70], "iscrowd": 0}, {"id": 539611, "category_id": 20, "area": 15883, "bbox": [131, 361, 261, 150], "iscrowd": 0}, {"id": 14016, "category_id": 20, "area": 4686, "bbox": [444, 167, 45, 175], "iscrowd": 0}, {"id": 1333964, "category_id": 20, "area": 7065, "bbox": [534, 251, 56, 236], "iscrowd": 0}, {"id": 738255, "category_id": 20, "area": 4824, "bbox": [67, 195, 53, 191], "iscrowd": 0}, {"id": 15790, "category_id": 20, "area": 2199, "bbox": [139, 160, 40, 147], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 8907, "bbox": [622, 107, 60, 212], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 7238, "bbox": [560, 166, 84, 118], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 49339, "bbox": [318, 41, 364, 245], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 11406, "bbox": [247, 131, 115, 185], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 5043, "bbox": [84, 348, 129, 71], "iscrowd": 0}, {"id": 58620, "category_id": 121, "area": 1733, "bbox": [406, 338, 41, 52], "iscrowd": 0}, {"id": 56575, "category_id": 121, "area": 1292, "bbox": [321, 430, 43, 45], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 2317, "bbox": [360, 1, 63, 44], "iscrowd": 0}, {"id": 12779264, "category_id": 143, "area": 2049, "bbox": [423, 3, 57, 42], "iscrowd": 0}, {"id": 12844800, "category_id": 143, "area": 1901, "bbox": [481, 1, 51, 45], "iscrowd": 0}, {"id": 10878728, "category_id": 143, "area": 4382, "bbox": [376, 335, 126, 66], "iscrowd": 0}, {"id": 12386048, "category_id": 143, "area": 3807, "bbox": [107, 312, 114, 45], "iscrowd": 0}, {"id": 11134212, "category_id": 143, "area": 1438, "bbox": [172, 244, 79, 27], "iscrowd": 0}, {"id": 11337472, "category_id": 143, "area": 3489, "bbox": [254, 424, 109, 59], "iscrowd": 0}, {"id": 13166868, "category_id": 143, "area": 1673, "bbox": [366, 245, 83, 30], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 2760, "bbox": [317, 316, 46, 114], "iscrowd": 0}, {"id": 13481472, "category_id": 148, "area": 1701, "bbox": [214, 277, 35, 94], "iscrowd": 0}, {"id": 14007089, "category_id": 148, "area": 1582, "bbox": [372, 263, 34, 90], "iscrowd": 0}, {"id": 11976483, "category_id": 148, "area": 802, "bbox": [247, 212, 26, 65], "iscrowd": 0}, {"id": 12888842, "category_id": 148, "area": 574, "bbox": [267, 191, 24, 50], "iscrowd": 0}]}, {"image_id": "ADE_val_00000325", "file_name": "ADE_val_00000325.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 8570, "bbox": [0, 176, 281, 85], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 146758, "bbox": [0, 0, 679, 257], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 486, "bbox": [571, 189, 21, 47], "iscrowd": 0}, {"id": 3147913, "category_id": 13, "area": 1131, "bbox": [538, 177, 22, 88], "iscrowd": 0}, {"id": 2034560, "category_id": 13, "area": 796, "bbox": [447, 120, 39, 75], "iscrowd": 0}, {"id": 3735717, "category_id": 13, "area": 702, "bbox": [347, 94, 41, 57], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 3754, "bbox": [92, 203, 96, 56], "iscrowd": 0}, {"id": 52479, "category_id": 33, "area": 3596, "bbox": [1, 235, 76, 87], "iscrowd": 0}, {"id": 372469, "category_id": 33, "area": 12647, "bbox": [552, 193, 127, 188], "iscrowd": 0}, {"id": 43007, "category_id": 33, "area": 295, "bbox": [525, 232, 14, 29], "iscrowd": 0}, {"id": 45823, "category_id": 33, "area": 2438, "bbox": [376, 410, 232, 100], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 1902, "bbox": [351, 127, 43, 74], "iscrowd": 0}, {"id": 14745742, "category_id": 117, "area": 1256, "bbox": [453, 152, 26, 73], "iscrowd": 0}]}, {"image_id": "ADE_val_00000326", "file_name": "ADE_val_00000326.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 43343, "bbox": [0, 1, 505, 100], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 32253, "bbox": [0, 0, 536, 401], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 34961, "bbox": [2, 282, 510, 120], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 87160, "bbox": [0, 110, 500, 282], "iscrowd": 0}, {"id": 16711751, "category_id": 141, "area": 13146, "bbox": [109, 192, 375, 124], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 788, "bbox": [242, 175, 51, 28], "iscrowd": 0}, {"id": 655287, "category_id": 70, "area": 845, "bbox": [133, 180, 48, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00000327", "file_name": "ADE_val_00000327.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 135277, "bbox": [1, 145, 460, 470], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 111984, "bbox": [0, 0, 511, 378], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 84905, "bbox": [0, 314, 511, 366], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 6516, "bbox": [303, 494, 208, 87], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 5123, "bbox": [367, 448, 67, 121], "iscrowd": 0}]}, {"image_id": "ADE_val_00000328", "file_name": "ADE_val_00000328.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 187199, "bbox": [0, 1, 479, 586], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 64067, "bbox": [2, 367, 477, 272], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1143, "bbox": [146, 59, 41, 42], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 45641, "bbox": [140, 39, 179, 475], "iscrowd": 0}]}, {"image_id": "ADE_val_00000329", "file_name": "ADE_val_00000329.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 12273, "bbox": [36, 26, 368, 310], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 23688, "bbox": [0, 0, 511, 679], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17259, "bbox": [23, 488, 122, 194], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 37514, "bbox": [41, 5, 224, 280], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12662, "bbox": [31, 335, 118, 153], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 224514, "bbox": [0, 0, 493, 683], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 4160, "bbox": [42, 525, 101, 86], "iscrowd": 0}]}, {"image_id": "ADE_val_00000330", "file_name": "ADE_val_00000330.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 12361, "bbox": [0, 0, 198, 171], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8440, "bbox": [0, 182, 178, 82], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2434, "bbox": [10, 0, 190, 16], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 5446, "bbox": [0, 138, 103, 101], "iscrowd": 0}, {"id": 16711880, "category_id": 8, "area": 3854, "bbox": [124, 148, 56, 102], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 525, "bbox": [82, 158, 21, 27], "iscrowd": 0}, {"id": 4657151, "category_id": 16, "area": 528, "bbox": [119, 158, 21, 30], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 4218, "bbox": [31, 15, 38, 125], "iscrowd": 0}, {"id": 344319, "category_id": 19, "area": 3598, "bbox": [63, 14, 33, 137], "iscrowd": 0}, {"id": 596479, "category_id": 19, "area": 5498, "bbox": [93, 11, 38, 172], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 4177, "bbox": [177, 14, 23, 251], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 85, "bbox": [26, 143, 9, 16], "iscrowd": 0}, {"id": 509158, "category_id": 40, "area": 630, "bbox": [35, 140, 28, 27], "iscrowd": 0}, {"id": 1221874, "category_id": 40, "area": 548, "bbox": [160, 137, 26, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00000331", "file_name": "ADE_val_00000331.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 169648, "bbox": [1, 0, 680, 469], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 13546, "bbox": [390, 348, 291, 162], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 104153, "bbox": [0, 197, 643, 314], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 31324, "bbox": [434, 220, 215, 223], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 916, "bbox": [465, 134, 27, 91], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 13471, "bbox": [84, 196, 185, 90], "iscrowd": 0}, {"id": 14863872, "category_id": 58, "area": 6320, "bbox": [1, 224, 92, 97], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 184, "bbox": [446, 186, 17, 20], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1767, "bbox": [498, 172, 56, 48], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 79, "bbox": [447, 210, 9, 11], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 228, "bbox": [498, 182, 15, 38], "iscrowd": 0}]}, {"image_id": "ADE_val_00000332", "file_name": "ADE_val_00000332.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 77190, "bbox": [1, 0, 763, 375], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 46958, "bbox": [0, 309, 765, 202], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 49850, "bbox": [2, 343, 595, 168], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 77995, "bbox": [485, 0, 278, 416], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 45457, "bbox": [0, 0, 201, 269], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3878, "bbox": [87, 214, 94, 146], "iscrowd": 0}, {"id": 11706, "category_id": 20, "area": 8983, "bbox": [365, 202, 111, 178], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 23040, "bbox": [291, 114, 199, 227], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2640, "bbox": [285, 25, 54, 107], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 10759, "bbox": [0, 296, 93, 147], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 1584, "bbox": [382, 261, 89, 31], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 158, "bbox": [429, 167, 10, 25], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 1533, "bbox": [299, 335, 58, 38], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 4042, "bbox": [0, 259, 97, 103], "iscrowd": 0}, {"id": 1751542, "category_id": 147, "area": 2591, "bbox": [164, 245, 57, 93], "iscrowd": 0}, {"id": 62449, "category_id": 147, "area": 6962, "bbox": [207, 233, 89, 102], "iscrowd": 0}]}, {"image_id": "ADE_val_00000333", "file_name": "ADE_val_00000333.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 11866, "bbox": [193, 57, 206, 102], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 1015, "bbox": [352, 31, 47, 35], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 2035, "bbox": [217, 0, 171, 57], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 42120, "bbox": [0, 0, 399, 160], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 52850, "bbox": [0, 125, 399, 174], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3808, "bbox": [69, 146, 107, 60], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 3961, "bbox": [213, 162, 135, 137], "iscrowd": 0}]}, {"image_id": "ADE_val_00000334", "file_name": "ADE_val_00000334.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 6966, "bbox": [2, 222, 237, 82], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 53539, "bbox": [0, 0, 239, 289], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 4690, "bbox": [0, 289, 238, 30], "iscrowd": 0}, {"id": 12105983, "category_id": 85, "area": 6114, "bbox": [135, 28, 42, 196], "iscrowd": 0}, {"id": 15466240, "category_id": 123, "area": 711, "bbox": [105, 240, 44, 19], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1107, "bbox": [97, 271, 42, 29], "iscrowd": 0}, {"id": 61198, "category_id": 42, "area": 125, "bbox": [46, 289, 15, 11], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 547, "bbox": [168, 247, 44, 39], "iscrowd": 0}]}, {"image_id": "ADE_val_00000335", "file_name": "ADE_val_00000335.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 9679, "bbox": [132, 0, 158, 77], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 9367, "bbox": [0, 0, 135, 75], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 32766, "bbox": [0, 86, 290, 157], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 1496, "bbox": [0, 68, 128, 18], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 11808, "bbox": [1, 52, 289, 191], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 234, "bbox": [73, 81, 55, 11], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 174, "bbox": [127, 73, 21, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000336", "file_name": "ADE_val_00000336.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 19488, "bbox": [0, 0, 165, 373], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 260, "bbox": [141, 359, 18, 15], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 27490, "bbox": [20, 127, 126, 248], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12837, "bbox": [1, 1, 54, 329], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 23648, "bbox": [160, 210, 195, 164], "iscrowd": 0}, {"id": 16714201, "category_id": 11, "area": 2867, "bbox": [466, 288, 34, 86], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 59913, "bbox": [166, 1, 334, 234], "iscrowd": 0}, {"id": 6291683, "category_id": 25, "area": 24055, "bbox": [293, 226, 196, 148], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 643, "bbox": [488, 234, 12, 55], "iscrowd": 0}, {"id": 2555648, "category_id": 42, "area": 306, "bbox": [288, 129, 34, 9], "iscrowd": 0}, {"id": 65308, "category_id": 42, "area": 304, "bbox": [288, 120, 35, 9], "iscrowd": 0}, {"id": 1965827, "category_id": 42, "area": 350, "bbox": [290, 169, 34, 11], "iscrowd": 0}, {"id": 2490137, "category_id": 42, "area": 315, "bbox": [290, 160, 35, 10], "iscrowd": 0}, {"id": 2225920, "category_id": 42, "area": 265, "bbox": [262, 144, 30, 10], "iscrowd": 0}, {"id": 2744579, "category_id": 42, "area": 638, "bbox": [462, 117, 26, 27], "iscrowd": 0}, {"id": 982814, "category_id": 42, "area": 446, "bbox": [407, 39, 22, 22], "iscrowd": 0}, {"id": 848920, "category_id": 42, "area": 595, "bbox": [428, 68, 23, 27], "iscrowd": 0}, {"id": 196363, "category_id": 42, "area": 681, "bbox": [291, 70, 30, 24], "iscrowd": 0}, {"id": 3008262, "category_id": 42, "area": 239, "bbox": [358, 45, 16, 15], "iscrowd": 0}, {"id": 3073280, "category_id": 42, "area": 212, "bbox": [376, 46, 15, 15], "iscrowd": 0}, {"id": 3014430, "category_id": 42, "area": 445, "bbox": [358, 73, 23, 21], "iscrowd": 0}, {"id": 65296, "category_id": 42, "area": 86, "bbox": [198, 119, 6, 17], "iscrowd": 0}, {"id": 1376017, "category_id": 42, "area": 119, "bbox": [250, 123, 8, 15], "iscrowd": 0}, {"id": 1244938, "category_id": 42, "area": 593, "bbox": [405, 119, 23, 26], "iscrowd": 0}, {"id": 2810647, "category_id": 42, "area": 598, "bbox": [457, 71, 32, 21], "iscrowd": 0}, {"id": 65280, "category_id": 42, "area": 264, "bbox": [436, 113, 9, 33], "iscrowd": 0}, {"id": 516879, "category_id": 42, "area": 257, "bbox": [428, 113, 9, 33], "iscrowd": 0}, {"id": 1113874, "category_id": 42, "area": 193, "bbox": [360, 150, 7, 28], "iscrowd": 0}, {"id": 1762315, "category_id": 42, "area": 363, "bbox": [368, 150, 13, 29], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 724, "bbox": [411, 178, 19, 48], "iscrowd": 0}, {"id": 655104, "category_id": 99, "area": 750, "bbox": [366, 179, 20, 41], "iscrowd": 0}]}, {"image_id": "ADE_val_00000337", "file_name": "ADE_val_00000337.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 45327, "bbox": [2, 0, 397, 141], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 129014, "bbox": [0, 130, 399, 580], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4121, "bbox": [356, 65, 42, 193], "iscrowd": 0}, {"id": 3087790, "category_id": 13, "area": 5248, "bbox": [221, 101, 86, 215], "iscrowd": 0}, {"id": 3080871, "category_id": 13, "area": 23902, "bbox": [1, 228, 143, 271], "iscrowd": 0}, {"id": 4003219, "category_id": 13, "area": 18821, "bbox": [268, 56, 108, 324], "iscrowd": 0}]}, {"image_id": "ADE_val_00000338", "file_name": "ADE_val_00000338.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 239293, "bbox": [0, 0, 682, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14592, "bbox": [152, 460, 410, 50], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 42246, "bbox": [114, 0, 485, 95], "iscrowd": 0}]}, {"image_id": "ADE_val_00000339", "file_name": "ADE_val_00000339.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 88316, "bbox": [0, 2, 307, 404], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 20515, "bbox": [2, 351, 304, 78], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 19946, "bbox": [2, 1, 304, 84], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 127, "bbox": [65, 18, 16, 11], "iscrowd": 0}, {"id": 1360379, "category_id": 83, "area": 91, "bbox": [83, 61, 14, 8], "iscrowd": 0}, {"id": 1884671, "category_id": 83, "area": 114, "bbox": [150, 21, 16, 9], "iscrowd": 0}, {"id": 1160703, "category_id": 83, "area": 104, "bbox": [150, 61, 16, 9], "iscrowd": 0}, {"id": 38911, "category_id": 83, "area": 110, "bbox": [236, 22, 14, 10], "iscrowd": 0}, {"id": 37109, "category_id": 83, "area": 80, "bbox": [219, 63, 15, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00000340", "file_name": "ADE_val_00000340.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 193250, "bbox": [0, 0, 397, 552], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1193, "bbox": [143, 48, 42, 43], "iscrowd": 0}, {"id": 4259584, "category_id": 15, "area": 2830, "bbox": [134, 103, 52, 74], "iscrowd": 0}, {"id": 3991302, "category_id": 15, "area": 10566, "bbox": [100, 209, 94, 142], "iscrowd": 0}]}, {"image_id": "ADE_val_00000341", "file_name": "ADE_val_00000341.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 65904, "bbox": [1, 1, 639, 479], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 62652, "bbox": [197, 1, 442, 477], "iscrowd": 0}]}, {"image_id": "ADE_val_00000342", "file_name": "ADE_val_00000342.png", "segments_info": [{"id": 3289680, "category_id": 4, "area": 19740, "bbox": [1, 381, 344, 130], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 35516, "bbox": [0, 2, 668, 110], "iscrowd": 0}, {"id": 10747648, "category_id": 97, "area": 167363, "bbox": [0, 42, 681, 468], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1320, "bbox": [116, 422, 54, 62], "iscrowd": 0}, {"id": 2564249, "category_id": 13, "area": 1231, "bbox": [1, 458, 43, 53], "iscrowd": 0}, {"id": 3342483, "category_id": 13, "area": 13986, "bbox": [569, 53, 112, 258], "iscrowd": 0}, {"id": 4784280, "category_id": 13, "area": 259, "bbox": [531, 186, 15, 29], "iscrowd": 0}, {"id": 2293894, "category_id": 13, "area": 191, "bbox": [524, 187, 13, 28], "iscrowd": 0}, {"id": 5573757, "category_id": 13, "area": 229, "bbox": [507, 190, 12, 29], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 2981, "bbox": [454, 153, 228, 66], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 100863, "bbox": [2, 1, 681, 299], "iscrowd": 0}]}, {"image_id": "ADE_val_00000343", "file_name": "ADE_val_00000343.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 95927, "bbox": [0, 0, 767, 205], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5408, "bbox": [667, 444, 100, 65], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 12957, "bbox": [0, 233, 521, 45], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 83245, "bbox": [0, 83, 767, 157], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 11701, "bbox": [483, 230, 284, 47], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 181592, "bbox": [0, 247, 767, 264], "iscrowd": 0}]}, {"image_id": "ADE_val_00000344", "file_name": "ADE_val_00000344.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 22973, "bbox": [0, 0, 270, 164], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 19036, "bbox": [0, 153, 270, 97], "iscrowd": 0}]}, {"image_id": "ADE_val_00000345", "file_name": "ADE_val_00000345.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1554, "bbox": [648, 380, 34, 94], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 85, "bbox": [458, 211, 13, 8], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 84843, "bbox": [1, 0, 681, 157], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 100428, "bbox": [0, 59, 682, 299], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 288, "bbox": [287, 204, 49, 30], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 124519, "bbox": [1, 206, 681, 305], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 3061, "bbox": [374, 248, 265, 81], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 5042, "bbox": [132, 120, 233, 46], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 9863, "bbox": [577, 206, 105, 195], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 152, "bbox": [329, 157, 48, 7], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 2580, "bbox": [535, 380, 123, 36], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 110, "bbox": [455, 217, 47, 10], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 12286, "bbox": [165, 223, 117, 234], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 317, "bbox": [93, 321, 24, 18], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 50, "bbox": [356, 424, 8, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00000346", "file_name": "ADE_val_00000346.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 47304, "bbox": [0, 0, 399, 279], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 13764, "bbox": [99, 182, 300, 98], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 20744, "bbox": [34, 0, 365, 99], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 3451, "bbox": [183, 145, 105, 53], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1654, "bbox": [184, 110, 50, 35], "iscrowd": 0}, {"id": 16436991, "category_id": 9, "area": 190, "bbox": [135, 117, 20, 15], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2909, "bbox": [333, 102, 55, 80], "iscrowd": 0}, {"id": 2293894, "category_id": 13, "area": 1609, "bbox": [368, 104, 31, 97], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1404, "bbox": [156, 109, 20, 76], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 576, "bbox": [47, 187, 42, 17], "iscrowd": 0}, {"id": 5906147, "category_id": 16, "area": 116, "bbox": [112, 173, 15, 10], "iscrowd": 0}, {"id": 4266235, "category_id": 16, "area": 22, "bbox": [138, 167, 4, 6], "iscrowd": 0}, {"id": 4915446, "category_id": 16, "area": 3354, "bbox": [259, 204, 140, 75], "iscrowd": 0}, {"id": 3604735, "category_id": 16, "area": 124, "bbox": [209, 170, 18, 9], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2279, "bbox": [225, 164, 47, 87], "iscrowd": 0}, {"id": 19899, "category_id": 20, "area": 3645, "bbox": [338, 205, 60, 72], "iscrowd": 0}, {"id": 21952, "category_id": 20, "area": 2217, "bbox": [275, 177, 93, 31], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 91, "bbox": [149, 180, 7, 20], "iscrowd": 0}, {"id": 13500190, "category_id": 32, "area": 59, "bbox": [149, 185, 4, 23], "iscrowd": 0}, {"id": 15138069, "category_id": 32, "area": 196, "bbox": [136, 190, 14, 26], "iscrowd": 0}, {"id": 16711429, "category_id": 32, "area": 461, "bbox": [114, 202, 20, 36], "iscrowd": 0}, {"id": 13500170, "category_id": 32, "area": 208, "bbox": [134, 197, 9, 30], "iscrowd": 0}, {"id": 15917824, "category_id": 32, "area": 350, "bbox": [112, 214, 10, 45], "iscrowd": 0}, {"id": 15925008, "category_id": 32, "area": 2520, "bbox": [48, 228, 64, 52], "iscrowd": 0}, {"id": 13827840, "category_id": 32, "area": 564, "bbox": [48, 256, 26, 24], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 135, "bbox": [147, 89, 15, 9], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 67, "bbox": [161, 29, 14, 7], "iscrowd": 0}, {"id": 1816810, "category_id": 83, "area": 78, "bbox": [259, 6, 11, 9], "iscrowd": 0}, {"id": 41727, "category_id": 83, "area": 45, "bbox": [241, 39, 10, 5], "iscrowd": 0}, {"id": 104437, "category_id": 83, "area": 15, "bbox": [169, 54, 6, 4], "iscrowd": 0}, {"id": 43519, "category_id": 83, "area": 23, "bbox": [233, 60, 8, 4], "iscrowd": 0}, {"id": 1096447, "category_id": 83, "area": 11, "bbox": [171, 70, 6, 3], "iscrowd": 0}, {"id": 496621, "category_id": 83, "area": 13, "bbox": [173, 80, 5, 4], "iscrowd": 0}]}, {"image_id": "ADE_val_00000347", "file_name": "ADE_val_00000347.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 41541, "bbox": [2, 1, 354, 299], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17199, "bbox": [45, 188, 311, 111], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 10422, "bbox": [51, 1, 304, 110], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 10226, "bbox": [52, 170, 173, 65], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 107, "bbox": [236, 146, 15, 14], "iscrowd": 0}, {"id": 2756483, "category_id": 13, "area": 2335, "bbox": [327, 178, 30, 92], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 12494, "bbox": [355, 2, 44, 297], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 328, "bbox": [217, 160, 75, 5], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 2446, "bbox": [0, 16, 17, 166], "iscrowd": 0}, {"id": 13164228, "category_id": 28, "area": 848, "bbox": [24, 68, 10, 103], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 7020, "bbox": [271, 185, 88, 112], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 208, "bbox": [318, 44, 13, 49], "iscrowd": 0}, {"id": 2293744, "category_id": 37, "area": 614, "bbox": [254, 7, 27, 36], "iscrowd": 0}, {"id": 61163, "category_id": 37, "area": 359, "bbox": [203, 42, 20, 29], "iscrowd": 0}, {"id": 976367, "category_id": 37, "area": 693, "bbox": [109, 2, 30, 30], "iscrowd": 0}, {"id": 1047003, "category_id": 37, "area": 176, "bbox": [219, 29, 12, 72], "iscrowd": 0}, {"id": 2419405, "category_id": 37, "area": 215, "bbox": [249, 29, 16, 60], "iscrowd": 0}, {"id": 2552008, "category_id": 37, "area": 353, "bbox": [296, 16, 19, 58], "iscrowd": 0}, {"id": 61691, "category_id": 37, "area": 440, "bbox": [266, 104, 22, 21], "iscrowd": 0}, {"id": 2293738, "category_id": 37, "area": 390, "bbox": [241, 111, 24, 17], "iscrowd": 0}, {"id": 1372157, "category_id": 37, "area": 131, "bbox": [277, 80, 12, 22], "iscrowd": 0}, {"id": 2031614, "category_id": 37, "area": 228, "bbox": [173, 69, 15, 19], "iscrowd": 0}, {"id": 1179622, "category_id": 37, "area": 377, "bbox": [99, 41, 20, 28], "iscrowd": 0}, {"id": 65499, "category_id": 37, "area": 300, "bbox": [90, 25, 18, 66], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 7780, "bbox": [72, 51, 130, 73], "iscrowd": 0}]}, {"image_id": "ADE_val_00000348", "file_name": "ADE_val_00000348.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 15823, "bbox": [1, 8, 682, 317], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 17710, "bbox": [0, 68, 683, 71], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 50123, "bbox": [0, 0, 682, 126], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 48632, "bbox": [0, 310, 683, 202], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1438, "bbox": [44, 96, 475, 40], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7850, "bbox": [0, 0, 396, 39], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 299, "bbox": [280, 126, 228, 13], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 344, "bbox": [409, 129, 98, 7], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 12467, "bbox": [1, 138, 681, 33], "iscrowd": 0}, {"id": 16711751, "category_id": 141, "area": 1081, "bbox": [1, 134, 620, 8], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 615, "bbox": [247, 145, 37, 73], "iscrowd": 0}, {"id": 2162868, "category_id": 13, "area": 8237, "bbox": [362, 124, 131, 143], "iscrowd": 0}, {"id": 4526241, "category_id": 13, "area": 29441, "bbox": [167, 108, 156, 360], "iscrowd": 0}, {"id": 4722307, "category_id": 13, "area": 5631, "bbox": [308, 133, 127, 164], "iscrowd": 0}, {"id": 4197758, "category_id": 13, "area": 7062, "bbox": [15, 131, 169, 106], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 51, "bbox": [420, 133, 14, 5], "iscrowd": 0}, {"id": 14698526, "category_id": 21, "area": 24, "bbox": [434, 133, 7, 5], "iscrowd": 0}, {"id": 13137408, "category_id": 21, "area": 40, "bbox": [439, 134, 12, 5], "iscrowd": 0}, {"id": 14116096, "category_id": 21, "area": 40, "bbox": [450, 134, 11, 5], "iscrowd": 0}, {"id": 13856790, "category_id": 21, "area": 48, "bbox": [467, 134, 12, 5], "iscrowd": 0}, {"id": 12876032, "category_id": 21, "area": 44, "bbox": [478, 133, 11, 5], "iscrowd": 0}, {"id": 14777365, "category_id": 21, "area": 11, "bbox": [464, 133, 4, 5], "iscrowd": 0}, {"id": 13330176, "category_id": 21, "area": 40, "bbox": [485, 132, 11, 5], "iscrowd": 0}, {"id": 12736531, "category_id": 21, "area": 22, "bbox": [460, 133, 5, 5], "iscrowd": 0}, {"id": 11172608, "category_id": 21, "area": 44, "bbox": [466, 130, 12, 6], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 3657, "bbox": [1, 166, 132, 43], "iscrowd": 0}, {"id": 19199, "category_id": 39, "area": 104, "bbox": [185, 167, 20, 11], "iscrowd": 0}, {"id": 1268223, "category_id": 39, "area": 7519, "bbox": [409, 167, 273, 42], "iscrowd": 0}, {"id": 1266943, "category_id": 39, "area": 1673, "bbox": [256, 168, 68, 34], "iscrowd": 0}, {"id": 873458, "category_id": 39, "area": 213, "bbox": [349, 168, 23, 26], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 2885, "bbox": [57, 10, 26, 195], "iscrowd": 0}, {"id": 2235135, "category_id": 43, "area": 5659, "bbox": [519, 0, 22, 259], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 11060, "bbox": [0, 219, 125, 158], "iscrowd": 0}, {"id": 655308, "category_id": 70, "area": 10033, "bbox": [86, 232, 137, 212], "iscrowd": 0}, {"id": 2031581, "category_id": 70, "area": 2776, "bbox": [0, 365, 94, 57], "iscrowd": 0}, {"id": 65499, "category_id": 70, "area": 17809, "bbox": [0, 381, 179, 130], "iscrowd": 0}, {"id": 59845, "category_id": 70, "area": 43684, "bbox": [443, 218, 240, 294], "iscrowd": 0}, {"id": 128933, "category_id": 70, "area": 20645, "bbox": [266, 215, 381, 296], "iscrowd": 0}, {"id": 717274, "category_id": 70, "area": 2244, "bbox": [277, 214, 112, 108], "iscrowd": 0}, {"id": 61898, "category_id": 70, "area": 655, "bbox": [0, 205, 53, 22], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 178, "bbox": [3, 86, 23, 21], "iscrowd": 0}, {"id": 16731909, "category_id": 73, "area": 174, "bbox": [26, 92, 21, 15], "iscrowd": 0}, {"id": 14898944, "category_id": 73, "area": 160, "bbox": [502, 97, 17, 18], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 41, "bbox": [569, 142, 12, 6], "iscrowd": 0}, {"id": 785093, "category_id": 77, "area": 383, "bbox": [621, 120, 61, 22], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 246, "bbox": [389, 234, 14, 25], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 2111, "bbox": [332, 295, 62, 78], "iscrowd": 0}]}, {"image_id": "ADE_val_00000349", "file_name": "ADE_val_00000349.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 901, "bbox": [2, 70, 216, 8], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9983, "bbox": [2, 1, 254, 48], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5337, "bbox": [2, 49, 254, 28], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 40664, "bbox": [2, 76, 254, 180], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 2935, "bbox": [10, 31, 246, 22], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 4594, "bbox": [2, 82, 252, 37], "iscrowd": 0}]}, {"image_id": "ADE_val_00000350", "file_name": "ADE_val_00000350.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 16836, "bbox": [2, 1, 254, 81], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5283, "bbox": [2, 60, 202, 66], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 5051, "bbox": [106, 60, 150, 64], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 37223, "bbox": [2, 88, 254, 168], "iscrowd": 0}]}, {"image_id": "ADE_val_00000351", "file_name": "ADE_val_00000351.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 42536, "bbox": [2, 1, 254, 178], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 16726, "bbox": [2, 177, 254, 78], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 3374, "bbox": [2, 160, 254, 28], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1198, "bbox": [8, 195, 177, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00000352", "file_name": "ADE_val_00000352.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 273390, "bbox": [0, 69, 682, 441], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 73346, "bbox": [0, 0, 682, 186], "iscrowd": 0}]}, {"image_id": "ADE_val_00000353", "file_name": "ADE_val_00000353.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 135974, "bbox": [0, 0, 764, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 70776, "bbox": [50, 190, 627, 172], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 75045, "bbox": [0, 0, 675, 122], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 104607, "bbox": [0, 346, 672, 165], "iscrowd": 0}]}, {"image_id": "ADE_val_00000354", "file_name": "ADE_val_00000354.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 12336, "bbox": [1, 0, 174, 79], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 20935, "bbox": [0, 74, 161, 272], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 3728, "bbox": [624, 4, 55, 83], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 750, "bbox": [594, 81, 28, 43], "iscrowd": 0}, {"id": 1047059, "category_id": 99, "area": 697, "bbox": [618, 81, 23, 42], "iscrowd": 0}, {"id": 655121, "category_id": 99, "area": 722, "bbox": [636, 82, 24, 43], "iscrowd": 0}, {"id": 65296, "category_id": 99, "area": 670, "bbox": [659, 85, 22, 44], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 11095, "bbox": [236, 19, 139, 139], "iscrowd": 0}, {"id": 10930236, "category_id": 116, "area": 11205, "bbox": [354, 0, 146, 120], "iscrowd": 0}, {"id": 9554511, "category_id": 116, "area": 14481, "bbox": [464, 14, 149, 132], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 13717, "bbox": [77, 141, 180, 107], "iscrowd": 0}, {"id": 45029, "category_id": 121, "area": 15402, "bbox": [247, 148, 184, 113], "iscrowd": 0}, {"id": 184831, "category_id": 121, "area": 18151, "bbox": [432, 143, 216, 146], "iscrowd": 0}, {"id": 1170403, "category_id": 121, "area": 102452, "bbox": [2, 237, 510, 256], "iscrowd": 0}, {"id": 1685247, "category_id": 121, "area": 4169, "bbox": [250, 26, 112, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00000355", "file_name": "ADE_val_00000355.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 80936, "bbox": [0, 0, 342, 334], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 53099, "bbox": [334, 0, 165, 333], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 20935, "bbox": [184, 30, 81, 303], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 2668, "bbox": [205, 302, 107, 32], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3539, "bbox": [95, 17, 65, 315], "iscrowd": 0}, {"id": 64505, "category_id": 37, "area": 3266, "bbox": [283, 24, 62, 309], "iscrowd": 0}]}, {"image_id": "ADE_val_00000356", "file_name": "ADE_val_00000356.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 109553, "bbox": [0, 0, 509, 494], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12202, "bbox": [1, 442, 150, 175], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4441, "bbox": [0, 0, 257, 72], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 47906, "bbox": [285, 62, 223, 427], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 7558, "bbox": [118, 172, 87, 154], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 980, "bbox": [54, 156, 21, 61], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1037, "bbox": [5, 167, 28, 38], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 15868, "bbox": [327, 340, 136, 174], "iscrowd": 0}, {"id": 1113856, "category_id": 42, "area": 2622, "bbox": [134, 401, 81, 58], "iscrowd": 0}, {"id": 58880, "category_id": 42, "area": 2788, "bbox": [138, 376, 69, 46], "iscrowd": 0}, {"id": 2883328, "category_id": 42, "area": 2672, "bbox": [114, 284, 54, 59], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1300, "bbox": [37, 277, 45, 41], "iscrowd": 0}, {"id": 2031393, "category_id": 138, "area": 1346, "bbox": [157, 472, 68, 33], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 875, "bbox": [196, 307, 26, 59], "iscrowd": 0}, {"id": 11992854, "category_id": 143, "area": 230, "bbox": [184, 318, 19, 16], "iscrowd": 0}, {"id": 13106944, "category_id": 143, "area": 82, "bbox": [173, 325, 14, 14], "iscrowd": 0}, {"id": 11205376, "category_id": 143, "area": 496, "bbox": [82, 286, 24, 29], "iscrowd": 0}, {"id": 10153984, "category_id": 143, "area": 1821, "bbox": [442, 167, 43, 57], "iscrowd": 0}, {"id": 10415872, "category_id": 143, "area": 245, "bbox": [79, 393, 43, 15], "iscrowd": 0}, {"id": 10219520, "category_id": 143, "area": 302, "bbox": [159, 329, 22, 23], "iscrowd": 0}, {"id": 12386048, "category_id": 143, "area": 1068, "bbox": [159, 336, 47, 35], "iscrowd": 0}, {"id": 13238043, "category_id": 143, "area": 374, "bbox": [119, 341, 22, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00000357", "file_name": "ADE_val_00000357.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 49131, "bbox": [2, 0, 397, 182], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 23897, "bbox": [200, 75, 199, 190], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 18629, "bbox": [2, 77, 199, 188], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 12737, "bbox": [97, 95, 149, 170], "iscrowd": 0}]}, {"image_id": "ADE_val_00000358", "file_name": "ADE_val_00000358.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 82194, "bbox": [2, 1, 507, 681], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 156536, "bbox": [5, 3, 506, 680], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 19660, "bbox": [3, 192, 505, 68], "iscrowd": 0}, {"id": 5441023, "category_id": 25, "area": 8179, "bbox": [6, 540, 498, 113], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 9712, "bbox": [27, 88, 120, 107], "iscrowd": 0}, {"id": 16719343, "category_id": 126, "area": 9396, "bbox": [152, 107, 123, 98], "iscrowd": 0}, {"id": 14752471, "category_id": 126, "area": 7941, "bbox": [261, 129, 118, 87], "iscrowd": 0}, {"id": 16711903, "category_id": 126, "area": 7151, "bbox": [362, 143, 104, 81], "iscrowd": 0}, {"id": 16719320, "category_id": 126, "area": 3246, "bbox": [463, 144, 46, 82], "iscrowd": 0}, {"id": 16717810, "category_id": 126, "area": 9981, "bbox": [13, 511, 99, 121], "iscrowd": 0}, {"id": 16063474, "category_id": 126, "area": 8058, "bbox": [116, 512, 91, 107], "iscrowd": 0}, {"id": 16652779, "category_id": 126, "area": 8608, "bbox": [218, 496, 93, 107], "iscrowd": 0}, {"id": 15007987, "category_id": 126, "area": 7488, "bbox": [313, 481, 80, 106], "iscrowd": 0}, {"id": 16716267, "category_id": 126, "area": 6434, "bbox": [391, 476, 79, 98], "iscrowd": 0}]}, {"image_id": "ADE_val_00000359", "file_name": "ADE_val_00000359.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 50247, "bbox": [0, 2, 299, 250], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9982, "bbox": [0, 0, 299, 110], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 422, "bbox": [272, 110, 27, 43], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 378, "bbox": [276, 163, 23, 22], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 15351, "bbox": [0, 151, 299, 108], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 400, "bbox": [113, 124, 22, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00000360", "file_name": "ADE_val_00000360.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 2375, "bbox": [125, 276, 146, 23], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 159673, "bbox": [0, 0, 682, 266], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 29301, "bbox": [0, 206, 682, 99], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 117961, "bbox": [0, 299, 682, 212], "iscrowd": 0}, {"id": 65311, "category_id": 52, "area": 13956, "bbox": [417, 235, 204, 80], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 851, "bbox": [511, 304, 171, 14], "iscrowd": 0}, {"id": 52460, "category_id": 33, "area": 1612, "bbox": [239, 294, 213, 17], "iscrowd": 0}, {"id": 43007, "category_id": 33, "area": 20412, "bbox": [1, 345, 679, 166], "iscrowd": 0}, {"id": 49919, "category_id": 33, "area": 747, "bbox": [0, 291, 124, 8], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 291, "bbox": [147, 288, 28, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000361", "file_name": "ADE_val_00000361.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 36896, "bbox": [2, 1, 253, 255], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 26312, "bbox": [25, 78, 231, 178], "iscrowd": 0}]}, {"image_id": "ADE_val_00000362", "file_name": "ADE_val_00000362.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 30203, "bbox": [2, 1, 254, 190], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 29352, "bbox": [2, 82, 254, 174], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 459, "bbox": [2, 121, 27, 33], "iscrowd": 0}, {"id": 7213567, "category_id": 127, "area": 516, "bbox": [33, 123, 44, 29], "iscrowd": 0}, {"id": 8591349, "category_id": 127, "area": 436, "bbox": [78, 130, 35, 23], "iscrowd": 0}, {"id": 8585446, "category_id": 127, "area": 134, "bbox": [110, 131, 13, 21], "iscrowd": 0}, {"id": 7406313, "category_id": 127, "area": 168, "bbox": [130, 136, 19, 16], "iscrowd": 0}, {"id": 7933439, "category_id": 127, "area": 412, "bbox": [150, 124, 30, 27], "iscrowd": 0}, {"id": 9248500, "category_id": 127, "area": 335, "bbox": [178, 125, 25, 28], "iscrowd": 0}, {"id": 8914159, "category_id": 127, "area": 383, "bbox": [200, 123, 27, 29], "iscrowd": 0}, {"id": 7733502, "category_id": 127, "area": 245, "bbox": [236, 124, 20, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00000363", "file_name": "ADE_val_00000363.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 62617, "bbox": [2, 1, 254, 255], "iscrowd": 0}]}, {"image_id": "ADE_val_00000364", "file_name": "ADE_val_00000364.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 877, "bbox": [42, 0, 21, 92], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 57188, "bbox": [0, 0, 256, 256], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 1113, "bbox": [0, 237, 62, 19], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 1794, "bbox": [136, 236, 120, 20], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3712, "bbox": [0, 193, 178, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00000365", "file_name": "ADE_val_00000365.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 8992, "bbox": [0, 1, 171, 70], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 43284, "bbox": [0, 0, 256, 227], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 11270, "bbox": [2, 192, 254, 64], "iscrowd": 0}]}, {"image_id": "ADE_val_00000366", "file_name": "ADE_val_00000366.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 44694, "bbox": [0, 1, 256, 211], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 15420, "bbox": [2, 153, 254, 103], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 3827, "bbox": [105, 181, 151, 75], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 353, "bbox": [112, 154, 16, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00000367", "file_name": "ADE_val_00000367.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 1494, "bbox": [110, 6, 28, 174], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 50991, "bbox": [0, 0, 255, 254], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 5285, "bbox": [94, 181, 86, 74], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 2985, "bbox": [0, 164, 219, 91], "iscrowd": 0}]}, {"image_id": "ADE_val_00000368", "file_name": "ADE_val_00000368.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 23544, "bbox": [33, 70, 313, 117], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 37692, "bbox": [0, 1, 360, 163], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 7395, "bbox": [0, 164, 360, 35], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 249, "bbox": [324, 163, 36, 15], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 694, "bbox": [0, 152, 51, 15], "iscrowd": 0}, {"id": 44781, "category_id": 33, "area": 510, "bbox": [120, 148, 32, 18], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 468, "bbox": [283, 175, 77, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00000369", "file_name": "ADE_val_00000369.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 4963, "bbox": [0, 82, 49, 177], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 22517, "bbox": [0, 0, 249, 172], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 12354, "bbox": [3, 1, 245, 246], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 26863, "bbox": [2, 241, 246, 133], "iscrowd": 0}]}, {"image_id": "ADE_val_00000370", "file_name": "ADE_val_00000370.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 36476, "bbox": [0, 118, 774, 238], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 193332, "bbox": [0, 1, 774, 339], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5475, "bbox": [17, 308, 547, 48], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 110428, "bbox": [0, 346, 773, 164], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 5280, "bbox": [378, 334, 396, 20], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 555, "bbox": [196, 338, 139, 12], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 136, "bbox": [134, 346, 21, 8], "iscrowd": 0}, {"id": 14315264, "category_id": 21, "area": 144, "bbox": [261, 344, 17, 12], "iscrowd": 0}, {"id": 14775808, "category_id": 21, "area": 64, "bbox": [281, 344, 9, 10], "iscrowd": 0}, {"id": 12803328, "category_id": 21, "area": 1539, "bbox": [334, 332, 50, 39], "iscrowd": 0}, {"id": 14770694, "category_id": 21, "area": 164, "bbox": [77, 347, 22, 11], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 4581, "bbox": [401, 350, 373, 24], "iscrowd": 0}, {"id": 40959, "category_id": 33, "area": 4144, "bbox": [1, 350, 242, 41], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 232, "bbox": [473, 311, 26, 9], "iscrowd": 0}, {"id": 10421218, "category_id": 44, "area": 603, "bbox": [410, 309, 57, 29], "iscrowd": 0}, {"id": 11409151, "category_id": 44, "area": 458, "bbox": [234, 322, 78, 14], "iscrowd": 0}, {"id": 8397823, "category_id": 44, "area": 239, "bbox": [188, 327, 32, 9], "iscrowd": 0}, {"id": 11668991, "category_id": 44, "area": 146, "bbox": [153, 327, 22, 7], "iscrowd": 0}, {"id": 9830655, "category_id": 44, "area": 23796, "bbox": [79, 204, 589, 150], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 46, "bbox": [381, 281, 26, 45], "iscrowd": 0}, {"id": 16727317, "category_id": 88, "area": 44, "bbox": [362, 293, 18, 36], "iscrowd": 0}, {"id": 15939606, "category_id": 88, "area": 1617, "bbox": [557, 118, 91, 234], "iscrowd": 0}]}, {"image_id": "ADE_val_00000371", "file_name": "ADE_val_00000371.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 178329, "bbox": [0, 0, 682, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 84349, "bbox": [63, 337, 619, 174], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 19712, "bbox": [571, 184, 109, 201], "iscrowd": 0}]}, {"image_id": "ADE_val_00000372", "file_name": "ADE_val_00000372.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 48278, "bbox": [0, 0, 590, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 151, "bbox": [272, 501, 27, 11], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 521, "bbox": [196, 0, 148, 6], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 12688, "bbox": [474, 0, 98, 220], "iscrowd": 0}, {"id": 16711913, "category_id": 11, "area": 15747, "bbox": [284, 0, 226, 78], "iscrowd": 0}, {"id": 16719578, "category_id": 11, "area": 12935, "bbox": [210, 3, 82, 175], "iscrowd": 0}, {"id": 14942438, "category_id": 11, "area": 2774, "bbox": [584, 0, 98, 33], "iscrowd": 0}, {"id": 16711879, "category_id": 11, "area": 32665, "bbox": [282, 313, 214, 199], "iscrowd": 0}, {"id": 15999952, "category_id": 11, "area": 19753, "bbox": [0, 312, 295, 199], "iscrowd": 0}, {"id": 16712142, "category_id": 11, "area": 33442, "bbox": [43, 1, 183, 234], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 13897, "bbox": [0, 1, 76, 222], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 8364, "bbox": [80, 259, 169, 99], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 70135, "bbox": [479, 28, 203, 483], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 6028, "bbox": [264, 265, 194, 73], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 23816, "bbox": [284, 68, 213, 138], "iscrowd": 0}]}, {"image_id": "ADE_val_00000373", "file_name": "ADE_val_00000373.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 112756, "bbox": [0, 0, 683, 329], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 98848, "bbox": [2, 273, 681, 238], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 15068, "bbox": [368, 46, 95, 172], "iscrowd": 0}, {"id": 13624037, "category_id": 9, "area": 22217, "bbox": [567, 13, 115, 219], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2662, "bbox": [447, 242, 116, 51], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 4945, "bbox": [248, 223, 145, 77], "iscrowd": 0}, {"id": 16733721, "category_id": 24, "area": 9384, "bbox": [302, 248, 164, 77], "iscrowd": 0}, {"id": 16731921, "category_id": 24, "area": 7137, "bbox": [587, 257, 96, 100], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 3103, "bbox": [476, 198, 64, 53], "iscrowd": 0}]}, {"image_id": "ADE_val_00000374", "file_name": "ADE_val_00000374.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 123668, "bbox": [0, 0, 684, 479], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 53384, "bbox": [0, 337, 685, 142], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 70278, "bbox": [2, 0, 683, 147], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 9269, "bbox": [376, 173, 61, 164], "iscrowd": 0}, {"id": 15459557, "category_id": 9, "area": 2840, "bbox": [318, 201, 35, 85], "iscrowd": 0}, {"id": 13694974, "category_id": 9, "area": 13738, "bbox": [188, 174, 100, 164], "iscrowd": 0}, {"id": 14483417, "category_id": 9, "area": 10279, "bbox": [0, 141, 65, 183], "iscrowd": 0}, {"id": 16772313, "category_id": 9, "area": 4256, "bbox": [111, 193, 50, 94], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1044, "bbox": [315, 175, 41, 30], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1742, "bbox": [506, 203, 22, 83], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2404, "bbox": [103, 75, 89, 128], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 19456, "bbox": [0, 291, 250, 139], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 1473, "bbox": [331, 332, 60, 51], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 205, "bbox": [494, 86, 22, 12], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 1527, "bbox": [413, 310, 83, 43], "iscrowd": 0}, {"id": 39157, "category_id": 98, "area": 9188, "bbox": [390, 327, 121, 105], "iscrowd": 0}]}, {"image_id": "ADE_val_00000375", "file_name": "ADE_val_00000375.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 102937, "bbox": [0, 0, 681, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 36531, "bbox": [46, 254, 608, 258], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6807, "bbox": [25, 1, 609, 21], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 18996, "bbox": [497, 10, 113, 181], "iscrowd": 0}, {"id": 13428196, "category_id": 9, "area": 6554, "bbox": [632, 1, 35, 282], "iscrowd": 0}, {"id": 13814237, "category_id": 9, "area": 1261, "bbox": [0, 44, 20, 73], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 15628, "bbox": [25, 3, 78, 295], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5338, "bbox": [216, 193, 101, 65], "iscrowd": 0}, {"id": 7083236, "category_id": 16, "area": 6670, "bbox": [20, 215, 165, 83], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 7426, "bbox": [423, 145, 105, 134], "iscrowd": 0}, {"id": 16355, "category_id": 20, "area": 938, "bbox": [0, 308, 60, 31], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 4273, "bbox": [313, 64, 101, 43], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 36002, "bbox": [414, 181, 231, 233], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 479, "bbox": [566, 171, 32, 26], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 5334, "bbox": [229, 131, 77, 78], "iscrowd": 0}]}, {"image_id": "ADE_val_00000376", "file_name": "ADE_val_00000376.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 32009, "bbox": [0, 151, 650, 179], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 81774, "bbox": [1, 327, 649, 185], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 103971, "bbox": [0, 0, 650, 207], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5267, "bbox": [1, 215, 118, 46], "iscrowd": 0}, {"id": 16510408, "category_id": 9, "area": 9124, "bbox": [307, 184, 104, 99], "iscrowd": 0}, {"id": 13822186, "category_id": 9, "area": 5693, "bbox": [138, 191, 80, 86], "iscrowd": 0}, {"id": 16187098, "category_id": 9, "area": 11106, "bbox": [560, 157, 90, 142], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 553, "bbox": [201, 259, 25, 32], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2699, "bbox": [169, 253, 54, 120], "iscrowd": 0}, {"id": 3607166, "category_id": 13, "area": 2097, "bbox": [341, 245, 45, 91], "iscrowd": 0}, {"id": 5571475, "category_id": 13, "area": 2570, "bbox": [412, 255, 80, 81], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 177, "bbox": [535, 308, 34, 7], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1142, "bbox": [484, 296, 56, 41], "iscrowd": 0}, {"id": 15048, "category_id": 20, "area": 979, "bbox": [314, 292, 33, 43], "iscrowd": 0}, {"id": 16086, "category_id": 20, "area": 72, "bbox": [100, 274, 15, 15], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 7433, "bbox": [534, 300, 117, 115], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 228, "bbox": [124, 263, 44, 24], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 3166, "bbox": [1, 261, 118, 31], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 11273, "bbox": [0, 268, 305, 77], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 3494, "bbox": [362, 294, 105, 41], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 181, "bbox": [51, 89, 30, 8], "iscrowd": 0}, {"id": 1489407, "category_id": 83, "area": 191, "bbox": [41, 186, 50, 7], "iscrowd": 0}, {"id": 50175, "category_id": 83, "area": 171, "bbox": [158, 183, 48, 6], "iscrowd": 0}, {"id": 50145, "category_id": 83, "area": 102, "bbox": [148, 120, 23, 6], "iscrowd": 0}, {"id": 1350143, "category_id": 83, "area": 85, "bbox": [212, 141, 21, 5], "iscrowd": 0}, {"id": 1152511, "category_id": 83, "area": 59, "bbox": [259, 155, 16, 5], "iscrowd": 0}, {"id": 1166335, "category_id": 83, "area": 40, "bbox": [56, 164, 14, 3], "iscrowd": 0}, {"id": 51455, "category_id": 83, "area": 1204, "bbox": [278, 94, 82, 23], "iscrowd": 0}, {"id": 901111, "category_id": 83, "area": 535, "bbox": [340, 132, 59, 13], "iscrowd": 0}, {"id": 239615, "category_id": 83, "area": 308, "bbox": [377, 155, 44, 9], "iscrowd": 0}, {"id": 50938, "category_id": 83, "area": 323, "bbox": [497, 153, 37, 9], "iscrowd": 0}, {"id": 47615, "category_id": 83, "area": 601, "bbox": [541, 127, 50, 14], "iscrowd": 0}, {"id": 241407, "category_id": 83, "area": 1463, "bbox": [546, 85, 70, 25], "iscrowd": 0}, {"id": 51181, "category_id": 83, "area": 4478, "bbox": [454, 1, 100, 51], "iscrowd": 0}, {"id": 47075, "category_id": 83, "area": 24, "bbox": [318, 175, 12, 3], "iscrowd": 0}, {"id": 45311, "category_id": 83, "area": 34, "bbox": [292, 167, 13, 3], "iscrowd": 0}, {"id": 45567, "category_id": 83, "area": 3644, "bbox": [160, 17, 132, 49], "iscrowd": 0}, {"id": 900595, "category_id": 83, "area": 22, "bbox": [267, 183, 12, 2], "iscrowd": 0}, {"id": 1350116, "category_id": 83, "area": 35, "bbox": [182, 176, 14, 3], "iscrowd": 0}, {"id": 40684, "category_id": 83, "area": 22, "bbox": [85, 178, 12, 2], "iscrowd": 0}, {"id": 1034751, "category_id": 83, "area": 70, "bbox": [0, 197, 25, 5], "iscrowd": 0}, {"id": 43263, "category_id": 83, "area": 93, "bbox": [89, 200, 30, 5], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 111, "bbox": [121, 257, 12, 12], "iscrowd": 0}, {"id": 9830632, "category_id": 120, "area": 16, "bbox": [398, 298, 4, 5], "iscrowd": 0}, {"id": 9240831, "category_id": 120, "area": 13, "bbox": [404, 300, 4, 4], "iscrowd": 0}, {"id": 9830655, "category_id": 120, "area": 16, "bbox": [393, 301, 4, 5], "iscrowd": 0}, {"id": 11997413, "category_id": 120, "area": 118, "bbox": [137, 257, 13, 12], "iscrowd": 0}, {"id": 11081958, "category_id": 120, "area": 107, "bbox": [153, 257, 13, 11], "iscrowd": 0}, {"id": 10160383, "category_id": 120, "area": 76, "bbox": [121, 276, 9, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00000377", "file_name": "ADE_val_00000377.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 60652, "bbox": [1, 166, 769, 345], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 16561, "bbox": [0, 409, 223, 102], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 128997, "bbox": [0, 0, 771, 213], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 11638, "bbox": [355, 238, 218, 63], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1648, "bbox": [707, 321, 63, 39], "iscrowd": 0}, {"id": 11978, "category_id": 20, "area": 1839, "bbox": [222, 243, 45, 70], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1808, "bbox": [477, 187, 20, 115], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 1597, "bbox": [153, 295, 168, 19], "iscrowd": 0}, {"id": 23807, "category_id": 79, "area": 35540, "bbox": [0, 142, 186, 285], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1175, "bbox": [305, 120, 113, 23], "iscrowd": 0}, {"id": 40959, "category_id": 83, "area": 1632, "bbox": [671, 92, 99, 31], "iscrowd": 0}, {"id": 2016255, "category_id": 83, "area": 650, "bbox": [651, 166, 88, 16], "iscrowd": 0}, {"id": 1289455, "category_id": 83, "area": 2925, "bbox": [430, 44, 163, 40], "iscrowd": 0}, {"id": 43005, "category_id": 83, "area": 716, "bbox": [496, 146, 98, 16], "iscrowd": 0}, {"id": 42226, "category_id": 83, "area": 4083, "bbox": [97, 1, 192, 37], "iscrowd": 0}, {"id": 39423, "category_id": 83, "area": 1582, "bbox": [69, 91, 126, 26], "iscrowd": 0}, {"id": 44274, "category_id": 83, "area": 493, "bbox": [197, 169, 73, 13], "iscrowd": 0}, {"id": 44796, "category_id": 83, "area": 403, "bbox": [52, 155, 58, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00000378", "file_name": "ADE_val_00000378.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 80921, "bbox": [0, 0, 479, 544], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 116413, "bbox": [0, 373, 479, 266], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 53210, "bbox": [12, 0, 467, 144], "iscrowd": 0}]}, {"image_id": "ADE_val_00000379", "file_name": "ADE_val_00000379.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 141451, "bbox": [2, 2, 679, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 48124, "bbox": [18, 357, 511, 154], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 15017, "bbox": [199, 1, 481, 41], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 9509, "bbox": [155, 119, 387, 99], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4134, "bbox": [452, 139, 90, 106], "iscrowd": 0}, {"id": 13756114, "category_id": 9, "area": 3489, "bbox": [152, 117, 61, 156], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 15478, "bbox": [285, 259, 141, 121], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 14607, "bbox": [28, 298, 246, 214], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 59013, "bbox": [511, 10, 169, 502], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 12468, "bbox": [19, 56, 101, 139], "iscrowd": 0}, {"id": 1376511, "category_id": 23, "area": 2222, "bbox": [164, 2, 43, 68], "iscrowd": 0}, {"id": 5311984, "category_id": 23, "area": 800, "bbox": [551, 132, 33, 25], "iscrowd": 0}, {"id": 3342591, "category_id": 23, "area": 458, "bbox": [228, 34, 15, 37], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 2219, "bbox": [144, 257, 140, 38], "iscrowd": 0}, {"id": 3801331, "category_id": 25, "area": 391, "bbox": [228, 136, 66, 10], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 4023, "bbox": [38, 366, 96, 55], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1284, "bbox": [433, 4, 42, 56], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 565, "bbox": [198, 238, 21, 43], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 948, "bbox": [124, 58, 26, 47], "iscrowd": 0}, {"id": 65358, "category_id": 149, "area": 606, "bbox": [319, 128, 28, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00000380", "file_name": "ADE_val_00000380.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 22208, "bbox": [0, 8, 299, 224], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 11013, "bbox": [64, 101, 167, 86], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7789, "bbox": [7, 185, 292, 47], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 18652, "bbox": [0, 0, 299, 80], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 791, "bbox": [63, 173, 32, 33], "iscrowd": 0}, {"id": 12014863, "category_id": 21, "area": 4150, "bbox": [101, 153, 109, 52], "iscrowd": 0}]}, {"image_id": "ADE_val_00000381", "file_name": "ADE_val_00000381.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 209, "bbox": [187, 0, 29, 11], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 8148, "bbox": [0, 0, 249, 78], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 6493, "bbox": [85, 129, 164, 59], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3280, "bbox": [43, 57, 207, 92], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 16315, "bbox": [65, 7, 185, 126], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 12093, "bbox": [0, 71, 131, 117], "iscrowd": 0}]}, {"image_id": "ADE_val_00000382", "file_name": "ADE_val_00000382.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6106, "bbox": [59, 249, 259, 32], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 14103, "bbox": [0, 135, 423, 136], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 121914, "bbox": [3, 2, 857, 223], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2695, "bbox": [4, 201, 492, 48], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 86234, "bbox": [0, 278, 571, 233], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 21773, "bbox": [0, 270, 540, 157], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 331, "bbox": [791, 246, 14, 43], "iscrowd": 0}, {"id": 2687120, "category_id": 13, "area": 347, "bbox": [738, 249, 11, 43], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 72604, "bbox": [501, 291, 359, 221], "iscrowd": 0}, {"id": 13007872, "category_id": 21, "area": 5536, "bbox": [4, 285, 144, 55], "iscrowd": 0}, {"id": 12408064, "category_id": 21, "area": 853, "bbox": [331, 258, 64, 27], "iscrowd": 0}, {"id": 14702080, "category_id": 21, "area": 2604, "bbox": [472, 254, 96, 38], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1435, "bbox": [0, 246, 60, 32], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1323, "bbox": [509, 285, 28, 51], "iscrowd": 0}, {"id": 8126712, "category_id": 44, "area": 8639, "bbox": [724, 17, 95, 284], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 485, "bbox": [206, 142, 12, 81], "iscrowd": 0}, {"id": 14815799, "category_id": 94, "area": 394, "bbox": [108, 138, 10, 84], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 3128, "bbox": [68, 198, 39, 89], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 426, "bbox": [138, 121, 14, 149], "iscrowd": 0}, {"id": 15862643, "category_id": 150, "area": 437, "bbox": [155, 101, 18, 165], "iscrowd": 0}]}, {"image_id": "ADE_val_00000383", "file_name": "ADE_val_00000383.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 82294, "bbox": [0, 0, 299, 347], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 1090, "bbox": [122, 153, 52, 50], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 35053, "bbox": [2, 247, 297, 154], "iscrowd": 0}]}, {"image_id": "ADE_val_00000384", "file_name": "ADE_val_00000384.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 27225, "bbox": [14, 277, 753, 234], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 917, "bbox": [353, 303, 75, 35], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 587, "bbox": [114, 0, 62, 66], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 185729, "bbox": [0, 0, 767, 511], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 862, "bbox": [362, 346, 121, 83], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 3304, "bbox": [14, 483, 145, 28], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 61827, "bbox": [14, 280, 753, 231], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 12835, "bbox": [22, 0, 142, 356], "iscrowd": 0}, {"id": 6094592, "category_id": 107, "area": 39485, "bbox": [269, 74, 237, 320], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 813, "bbox": [362, 338, 54, 44], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 374, "bbox": [386, 324, 38, 58], "iscrowd": 0}, {"id": 1191637, "category_id": 20, "area": 495, "bbox": [366, 325, 33, 53], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 13019, "bbox": [294, 435, 178, 76], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 584, "bbox": [291, 335, 46, 27], "iscrowd": 0}, {"id": 65449, "category_id": 70, "area": 451, "bbox": [459, 332, 23, 35], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 3169, "bbox": [585, 383, 71, 59], "iscrowd": 0}, {"id": 16522203, "category_id": 126, "area": 2810, "bbox": [708, 383, 59, 60], "iscrowd": 0}, {"id": 16716248, "category_id": 126, "area": 505, "bbox": [14, 386, 17, 48], "iscrowd": 0}, {"id": 16715775, "category_id": 126, "area": 2563, "bbox": [136, 386, 58, 54], "iscrowd": 0}, {"id": 14876918, "category_id": 126, "area": 366, "bbox": [48, 356, 39, 21], "iscrowd": 0}, {"id": 14945273, "category_id": 126, "area": 426, "bbox": [696, 363, 63, 16], "iscrowd": 0}, {"id": 16712959, "category_id": 126, "area": 146, "bbox": [678, 349, 19, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00000385", "file_name": "ADE_val_00000385.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 15880, "bbox": [181, 122, 501, 213], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 70549, "bbox": [113, 335, 569, 176], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 70639, "bbox": [0, 0, 682, 124], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 27490, "bbox": [494, 128, 110, 384], "iscrowd": 0}, {"id": 5111983, "category_id": 13, "area": 4780, "bbox": [64, 155, 67, 116], "iscrowd": 0}, {"id": 2621581, "category_id": 13, "area": 5481, "bbox": [239, 184, 60, 181], "iscrowd": 0}, {"id": 5906045, "category_id": 13, "area": 6355, "bbox": [195, 172, 61, 212], "iscrowd": 0}, {"id": 2032808, "category_id": 13, "area": 9474, "bbox": [117, 184, 82, 231], "iscrowd": 0}, {"id": 3670165, "category_id": 13, "area": 2733, "bbox": [476, 221, 32, 218], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 6055, "bbox": [599, 157, 76, 137], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 19717, "bbox": [1, 334, 126, 177], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 18153, "bbox": [0, 73, 184, 210], "iscrowd": 0}, {"id": 6553855, "category_id": 25, "area": 20531, "bbox": [182, 149, 340, 93], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 571, "bbox": [377, 187, 27, 23], "iscrowd": 0}, {"id": 1572629, "category_id": 42, "area": 489, "bbox": [404, 188, 22, 25], "iscrowd": 0}, {"id": 1502720, "category_id": 42, "area": 292, "bbox": [350, 185, 21, 14], "iscrowd": 0}, {"id": 1441042, "category_id": 42, "area": 174, "bbox": [365, 175, 19, 10], "iscrowd": 0}, {"id": 1048320, "category_id": 42, "area": 180, "bbox": [366, 165, 19, 11], "iscrowd": 0}, {"id": 2548756, "category_id": 42, "area": 344, "bbox": [347, 162, 19, 21], "iscrowd": 0}, {"id": 2158848, "category_id": 42, "area": 224, "bbox": [348, 224, 20, 13], "iscrowd": 0}, {"id": 589568, "category_id": 42, "area": 249, "bbox": [348, 212, 20, 14], "iscrowd": 0}, {"id": 195328, "category_id": 42, "area": 454, "bbox": [146, 120, 27, 21], "iscrowd": 0}, {"id": 2752256, "category_id": 42, "area": 307, "bbox": [103, 107, 20, 27], "iscrowd": 0}, {"id": 2293504, "category_id": 42, "area": 191, "bbox": [100, 113, 13, 19], "iscrowd": 0}, {"id": 917248, "category_id": 42, "area": 1142, "bbox": [33, 93, 46, 32], "iscrowd": 0}, {"id": 62208, "category_id": 42, "area": 543, "bbox": [69, 93, 27, 35], "iscrowd": 0}, {"id": 1175322, "category_id": 42, "area": 94, "bbox": [39, 143, 8, 13], "iscrowd": 0}, {"id": 65280, "category_id": 42, "area": 206, "bbox": [41, 138, 17, 19], "iscrowd": 0}, {"id": 979968, "category_id": 42, "area": 174, "bbox": [58, 139, 10, 19], "iscrowd": 0}, {"id": 1703680, "category_id": 42, "area": 266, "bbox": [68, 140, 14, 20], "iscrowd": 0}, {"id": 2488064, "category_id": 42, "area": 198, "bbox": [213, 153, 12, 22], "iscrowd": 0}, {"id": 653067, "category_id": 42, "area": 235, "bbox": [201, 153, 12, 22], "iscrowd": 0}, {"id": 1502976, "category_id": 42, "area": 232, "bbox": [23, 92, 10, 24], "iscrowd": 0}, {"id": 2162458, "category_id": 42, "area": 241, "bbox": [13, 90, 10, 25], "iscrowd": 0}, {"id": 65306, "category_id": 42, "area": 239, "bbox": [2, 87, 11, 26], "iscrowd": 0}, {"id": 2424585, "category_id": 42, "area": 108, "bbox": [338, 181, 6, 19], "iscrowd": 0}, {"id": 1108480, "category_id": 42, "area": 118, "bbox": [331, 181, 7, 19], "iscrowd": 0}, {"id": 1572638, "category_id": 42, "area": 108, "bbox": [325, 181, 6, 19], "iscrowd": 0}, {"id": 3272192, "category_id": 42, "area": 209, "bbox": [225, 152, 16, 23], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 11581, "bbox": [606, 247, 76, 204], "iscrowd": 0}, {"id": 16711905, "category_id": 46, "area": 18365, "bbox": [263, 241, 227, 108], "iscrowd": 0}, {"id": 16515288, "category_id": 46, "area": 13747, "bbox": [0, 246, 235, 160], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 501, "bbox": [309, 137, 33, 17], "iscrowd": 0}, {"id": 38127, "category_id": 68, "area": 94, "bbox": [343, 132, 6, 22], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 249, "bbox": [449, 131, 18, 18], "iscrowd": 0}, {"id": 2621184, "category_id": 99, "area": 265, "bbox": [468, 125, 15, 24], "iscrowd": 0}, {"id": 1242880, "category_id": 99, "area": 240, "bbox": [487, 128, 15, 20], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 799, "bbox": [9, 259, 38, 24], "iscrowd": 0}, {"id": 63832, "category_id": 113, "area": 297, "bbox": [650, 225, 21, 28], "iscrowd": 0}, {"id": 648255, "category_id": 113, "area": 341, "bbox": [289, 226, 28, 17], "iscrowd": 0}, {"id": 655219, "category_id": 113, "area": 472, "bbox": [41, 280, 34, 44], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 1607, "bbox": [122, 273, 32, 74], "iscrowd": 0}, {"id": 10407998, "category_id": 116, "area": 848, "bbox": [463, 248, 25, 70], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 1813, "bbox": [326, 39, 160, 38], "iscrowd": 0}]}, {"image_id": "ADE_val_00000386", "file_name": "ADE_val_00000386.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 211385, "bbox": [1, 29, 680, 482], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9879, "bbox": [317, 331, 211, 84], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25695, "bbox": [29, 455, 652, 56], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 20269, "bbox": [319, 336, 251, 133], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 40477, "bbox": [0, 0, 681, 176], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12879, "bbox": [0, 115, 139, 158], "iscrowd": 0}, {"id": 15852007, "category_id": 9, "area": 3804, "bbox": [503, 79, 99, 78], "iscrowd": 0}, {"id": 15523325, "category_id": 9, "area": 21961, "bbox": [1, 284, 127, 225], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 221, "bbox": [286, 459, 13, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00000387", "file_name": "ADE_val_00000387.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1673, "bbox": [342, 231, 73, 35], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 62349, "bbox": [16, 24, 326, 251], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 54739, "bbox": [2, 0, 461, 232], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 1065, "bbox": [0, 215, 31, 35], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 7120, "bbox": [0, 249, 463, 35], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 1440, "bbox": [415, 228, 48, 36], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 217, "bbox": [252, 211, 13, 26], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1019, "bbox": [358, 247, 61, 28], "iscrowd": 0}, {"id": 58879, "category_id": 54, "area": 1058, "bbox": [166, 258, 77, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000388", "file_name": "ADE_val_00000388.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 36550, "bbox": [33, 0, 648, 98], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 178466, "bbox": [2, 0, 680, 511], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 23589, "bbox": [4, 306, 441, 205], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 31452, "bbox": [491, 118, 135, 392], "iscrowd": 0}]}, {"image_id": "ADE_val_00000389", "file_name": "ADE_val_00000389.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 120293, "bbox": [0, 0, 682, 229], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 32580, "bbox": [0, 69, 242, 189], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 159239, "bbox": [0, 240, 682, 271], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 14434, "bbox": [0, 204, 681, 54], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3293, "bbox": [0, 222, 124, 47], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 12357, "bbox": [396, 256, 286, 94], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 2956, "bbox": [291, 263, 319, 49], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 2366, "bbox": [427, 248, 157, 39], "iscrowd": 0}]}, {"image_id": "ADE_val_00000390", "file_name": "ADE_val_00000390.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 2105, "bbox": [73, 0, 93, 50], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 41419, "bbox": [0, 0, 300, 194], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 11052, "bbox": [0, 135, 188, 90], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 8681, "bbox": [130, 138, 170, 87], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 71, "bbox": [234, 130, 6, 20], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 3494, "bbox": [0, 133, 229, 91], "iscrowd": 0}]}, {"image_id": "ADE_val_00000391", "file_name": "ADE_val_00000391.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 58212, "bbox": [2, 252, 507, 270], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 96005, "bbox": [0, 475, 509, 206], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 172751, "bbox": [0, 0, 510, 385], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1672, "bbox": [365, 438, 30, 96], "iscrowd": 0}, {"id": 2038950, "category_id": 13, "area": 1717, "bbox": [138, 443, 37, 101], "iscrowd": 0}, {"id": 5243021, "category_id": 13, "area": 281, "bbox": [110, 456, 14, 33], "iscrowd": 0}, {"id": 5243060, "category_id": 13, "area": 256, "bbox": [242, 454, 15, 34], "iscrowd": 0}, {"id": 4849791, "category_id": 13, "area": 316, "bbox": [284, 445, 13, 42], "iscrowd": 0}, {"id": 5570693, "category_id": 13, "area": 380, "bbox": [309, 448, 14, 45], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 4705, "bbox": [461, 321, 47, 131], "iscrowd": 0}, {"id": 4325616, "category_id": 23, "area": 2389, "bbox": [386, 354, 31, 99], "iscrowd": 0}, {"id": 5317375, "category_id": 23, "area": 1247, "bbox": [340, 375, 19, 81], "iscrowd": 0}, {"id": 2957540, "category_id": 23, "area": 896, "bbox": [306, 387, 17, 67], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 1546, "bbox": [155, 367, 54, 63], "iscrowd": 0}, {"id": 16720152, "category_id": 86, "area": 2719, "bbox": [187, 295, 83, 105], "iscrowd": 0}]}, {"image_id": "ADE_val_00000392", "file_name": "ADE_val_00000392.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 96351, "bbox": [0, 22, 639, 457], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 13892, "bbox": [0, 0, 639, 26], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 180305, "bbox": [0, 166, 639, 313], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 7112, "bbox": [199, 3, 34, 217], "iscrowd": 0}, {"id": 3932415, "category_id": 43, "area": 4874, "bbox": [559, 5, 28, 194], "iscrowd": 0}]}, {"image_id": "ADE_val_00000393", "file_name": "ADE_val_00000393.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1912, "bbox": [294, 79, 26, 79], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 17044, "bbox": [0, 0, 319, 122], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6093, "bbox": [0, 42, 320, 84], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 26250, "bbox": [0, 151, 319, 88], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 919, "bbox": [41, 96, 54, 24], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 3114, "bbox": [0, 112, 94, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00000394", "file_name": "ADE_val_00000394.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 8377, "bbox": [0, 0, 175, 81], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 51449, "bbox": [2, 0, 222, 299], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 6235, "bbox": [73, 181, 119, 118], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 88, "bbox": [99, 207, 14, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00000395", "file_name": "ADE_val_00000395.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 50690, "bbox": [0, 0, 500, 197], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 39694, "bbox": [0, 162, 499, 212], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5772, "bbox": [163, 40, 100, 66], "iscrowd": 0}, {"id": 15923692, "category_id": 9, "area": 7549, "bbox": [52, 35, 110, 72], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2810, "bbox": [452, 129, 47, 69], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 17438, "bbox": [296, 17, 153, 298], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 9004, "bbox": [387, 44, 112, 150], "iscrowd": 0}]}, {"image_id": "ADE_val_00000396", "file_name": "ADE_val_00000396.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 44737, "bbox": [27, 1, 612, 295], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 112414, "bbox": [0, 213, 639, 265], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 30218, "bbox": [0, 0, 504, 87], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 66488, "bbox": [2, 75, 499, 184], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 7098, "bbox": [481, 353, 158, 124], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 144, "bbox": [116, 20, 17, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000397", "file_name": "ADE_val_00000397.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 36916, "bbox": [0, 0, 256, 256], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12565, "bbox": [41, 136, 184, 120], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5207, "bbox": [69, 0, 127, 58], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4117, "bbox": [186, 0, 19, 244], "iscrowd": 0}, {"id": 4062977, "category_id": 15, "area": 4230, "bbox": [61, 0, 19, 244], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 1074, "bbox": [100, 109, 58, 30], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 618, "bbox": [108, 125, 40, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00000398", "file_name": "ADE_val_00000398.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 50031, "bbox": [0, 1, 449, 203], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 41323, "bbox": [0, 193, 449, 99], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 36489, "bbox": [50, 0, 399, 126], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 80, "bbox": [289, 133, 10, 8], "iscrowd": 0}, {"id": 15128796, "category_id": 9, "area": 78, "bbox": [323, 133, 10, 8], "iscrowd": 0}, {"id": 14149862, "category_id": 9, "area": 80, "bbox": [388, 133, 10, 8], "iscrowd": 0}, {"id": 15519188, "category_id": 9, "area": 115, "bbox": [422, 132, 13, 9], "iscrowd": 0}, {"id": 16764899, "category_id": 9, "area": 71, "bbox": [259, 134, 10, 8], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1437, "bbox": [374, 182, 46, 41], "iscrowd": 0}]}, {"image_id": "ADE_val_00000399", "file_name": "ADE_val_00000399.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 37567, "bbox": [1, 1, 682, 75], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 18660, "bbox": [1, 34, 441, 96], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 12234, "bbox": [141, 30, 542, 65], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 172432, "bbox": [1, 136, 681, 374], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1311, "bbox": [284, 295, 42, 55], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 57672, "bbox": [195, 85, 486, 178], "iscrowd": 0}, {"id": 1571234, "category_id": 77, "area": 2565, "bbox": [135, 168, 89, 64], "iscrowd": 0}, {"id": 458663, "category_id": 77, "area": 12304, "bbox": [195, 2, 225, 186], "iscrowd": 0}, {"id": 61342, "category_id": 77, "area": 3640, "bbox": [596, 22, 86, 157], "iscrowd": 0}, {"id": 58511, "category_id": 77, "area": 9706, "bbox": [1, 17, 224, 172], "iscrowd": 0}, {"id": 65466, "category_id": 77, "area": 10031, "bbox": [103, 303, 274, 68], "iscrowd": 0}]}, {"image_id": "ADE_val_00000400", "file_name": "ADE_val_00000400.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 49246, "bbox": [0, 0, 449, 253], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9021, "bbox": [2, 218, 447, 37], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 20729, "bbox": [3, 123, 207, 121], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 5990, "bbox": [229, 25, 73, 94], "iscrowd": 0}, {"id": 12569042, "category_id": 28, "area": 1344, "bbox": [44, 70, 33, 62], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 3822, "bbox": [207, 158, 61, 72], "iscrowd": 0}]}, {"image_id": "ADE_val_00000401", "file_name": "ADE_val_00000401.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 14363, "bbox": [0, 0, 256, 69], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 46899, "bbox": [0, 42, 256, 213], "iscrowd": 0}]}, {"image_id": "ADE_val_00000402", "file_name": "ADE_val_00000402.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 154574, "bbox": [0, 0, 662, 325], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 84442, "bbox": [0, 189, 662, 186], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 93532, "bbox": [0, 352, 662, 159], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4173, "bbox": [500, 362, 161, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00000403", "file_name": "ADE_val_00000403.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 38572, "bbox": [1, 256, 686, 125], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 72621, "bbox": [0, 0, 687, 140], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 72851, "bbox": [0, 85, 688, 208], "iscrowd": 0}, {"id": 65433, "category_id": 55, "area": 101073, "bbox": [1, 350, 686, 161], "iscrowd": 0}]}, {"image_id": "ADE_val_00000404", "file_name": "ADE_val_00000404.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3912, "bbox": [1, 393, 493, 61], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 60631, "bbox": [0, 205, 683, 206], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 202318, "bbox": [0, 0, 682, 392], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 11781, "bbox": [2, 330, 681, 83], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 42048, "bbox": [1, 403, 681, 109], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 247, "bbox": [115, 405, 61, 7], "iscrowd": 0}, {"id": 14045696, "category_id": 21, "area": 80, "bbox": [188, 408, 10, 9], "iscrowd": 0}, {"id": 14371072, "category_id": 21, "area": 232, "bbox": [172, 408, 18, 16], "iscrowd": 0}, {"id": 14178816, "category_id": 21, "area": 55, "bbox": [229, 409, 10, 9], "iscrowd": 0}, {"id": 14842112, "category_id": 21, "area": 79, "bbox": [235, 412, 10, 10], "iscrowd": 0}, {"id": 14436352, "category_id": 21, "area": 32, "bbox": [251, 406, 7, 5], "iscrowd": 0}, {"id": 14116608, "category_id": 21, "area": 284, "bbox": [242, 411, 21, 17], "iscrowd": 0}, {"id": 14700310, "category_id": 21, "area": 3018, "bbox": [277, 397, 72, 57], "iscrowd": 0}, {"id": 14058496, "category_id": 21, "area": 1311, "bbox": [192, 408, 46, 38], "iscrowd": 0}, {"id": 11491584, "category_id": 21, "area": 3971, "bbox": [37, 400, 88, 56], "iscrowd": 0}, {"id": 14447872, "category_id": 21, "area": 14, "bbox": [248, 407, 4, 4], "iscrowd": 0}, {"id": 14450710, "category_id": 21, "area": 431, "bbox": [347, 405, 27, 21], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 3115, "bbox": [374, 412, 307, 14], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 41, "bbox": [282, 398, 5, 12], "iscrowd": 0}, {"id": 11993576, "category_id": 44, "area": 114, "bbox": [218, 386, 20, 20], "iscrowd": 0}, {"id": 9050084, "category_id": 44, "area": 85, "bbox": [15, 390, 13, 14], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 94, "bbox": [276, 371, 13, 27], "iscrowd": 0}, {"id": 14903051, "category_id": 73, "area": 93, "bbox": [289, 353, 10, 31], "iscrowd": 0}, {"id": 15952152, "category_id": 73, "area": 59, "bbox": [320, 376, 10, 19], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 6, "bbox": [252, 391, 8, 3], "iscrowd": 0}, {"id": 15817216, "category_id": 88, "area": 27, "bbox": [287, 372, 15, 25], "iscrowd": 0}, {"id": 16732182, "category_id": 88, "area": 27, "bbox": [261, 382, 10, 24], "iscrowd": 0}, {"id": 14832139, "category_id": 88, "area": 50, "bbox": [300, 356, 26, 41], "iscrowd": 0}, {"id": 15554580, "category_id": 88, "area": 151, "bbox": [368, 316, 48, 97], "iscrowd": 0}, {"id": 16722953, "category_id": 88, "area": 94, "bbox": [20, 350, 34, 56], "iscrowd": 0}, {"id": 5439232, "category_id": 91, "area": 2, "bbox": [278, 224, 4, 2], "iscrowd": 0}]}, {"image_id": "ADE_val_00000405", "file_name": "ADE_val_00000405.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 1613, "bbox": [137, 108, 119, 47], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 34041, "bbox": [2, 1, 254, 143], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3673, "bbox": [0, 120, 137, 47], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 17943, "bbox": [0, 166, 256, 90], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 1518, "bbox": [75, 150, 163, 18], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 68, "bbox": [152, 162, 12, 9], "iscrowd": 0}, {"id": 11563776, "category_id": 21, "area": 323, "bbox": [178, 166, 23, 17], "iscrowd": 0}, {"id": 12278045, "category_id": 21, "area": 74, "bbox": [126, 165, 11, 9], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 751, "bbox": [0, 167, 151, 11], "iscrowd": 0}, {"id": 54007, "category_id": 33, "area": 806, "bbox": [221, 152, 35, 34], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 23, "bbox": [91, 100, 24, 2], "iscrowd": 0}, {"id": 16007168, "category_id": 88, "area": 22, "bbox": [208, 89, 19, 36], "iscrowd": 0}, {"id": 14771200, "category_id": 88, "area": 402, "bbox": [3, 45, 38, 120], "iscrowd": 0}, {"id": 16591872, "category_id": 88, "area": 16, "bbox": [211, 115, 12, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00000406", "file_name": "ADE_val_00000406.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 31091, "bbox": [2, 1, 254, 136], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 18606, "bbox": [2, 170, 254, 86], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 3598, "bbox": [0, 113, 122, 53], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 6244, "bbox": [22, 120, 234, 43], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 4500, "bbox": [2, 162, 254, 31], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 194, "bbox": [205, 9, 21, 118], "iscrowd": 0}]}, {"image_id": "ADE_val_00000407", "file_name": "ADE_val_00000407.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 29591, "bbox": [2, 1, 254, 126], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5029, "bbox": [2, 108, 222, 37], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 25855, "bbox": [0, 125, 256, 131], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 101, "bbox": [18, 120, 19, 13], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 15, "bbox": [236, 134, 5, 4], "iscrowd": 0}, {"id": 14186774, "category_id": 21, "area": 25, "bbox": [116, 141, 9, 4], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 2777, "bbox": [2, 125, 245, 52], "iscrowd": 0}, {"id": 633340, "category_id": 33, "area": 663, "bbox": [0, 141, 143, 12], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 39, "bbox": [192, 126, 9, 7], "iscrowd": 0}, {"id": 8528123, "category_id": 44, "area": 36, "bbox": [116, 131, 6, 7], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 35, "bbox": [69, 92, 20, 4], "iscrowd": 0}, {"id": 16722176, "category_id": 88, "area": 92, "bbox": [14, 74, 26, 69], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 9, "bbox": [133, 127, 1, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00000408", "file_name": "ADE_val_00000408.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 28758, "bbox": [2, 1, 254, 131], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 22337, "bbox": [2, 139, 253, 117], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 5805, "bbox": [2, 100, 252, 45], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 914, "bbox": [22, 107, 140, 37], "iscrowd": 0}, {"id": 9175291, "category_id": 44, "area": 28, "bbox": [183, 132, 7, 4], "iscrowd": 0}, {"id": 10625013, "category_id": 44, "area": 45, "bbox": [141, 133, 9, 5], "iscrowd": 0}]}, {"image_id": "ADE_val_00000409", "file_name": "ADE_val_00000409.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 29075, "bbox": [2, 1, 254, 128], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1683, "bbox": [0, 110, 172, 26], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 25879, "bbox": [2, 135, 254, 121], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 1870, "bbox": [144, 96, 112, 31], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 2832, "bbox": [141, 124, 115, 58], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 259, "bbox": [0, 133, 14, 35], "iscrowd": 0}, {"id": 11291924, "category_id": 21, "area": 123, "bbox": [117, 126, 14, 15], "iscrowd": 0}, {"id": 14709770, "category_id": 21, "area": 507, "bbox": [97, 131, 26, 23], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 814, "bbox": [6, 135, 90, 17], "iscrowd": 0}, {"id": 51690, "category_id": 33, "area": 981, "bbox": [143, 137, 113, 35], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 67, "bbox": [142, 130, 12, 6], "iscrowd": 0}]}, {"image_id": "ADE_val_00000410", "file_name": "ADE_val_00000410.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 8638, "bbox": [0, 21, 256, 49], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 7173, "bbox": [0, 1, 256, 44], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 485, "bbox": [232, 26, 24, 29], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 28008, "bbox": [2, 78, 254, 173], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 953, "bbox": [235, 81, 21, 68], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 2488, "bbox": [0, 70, 256, 98], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 583, "bbox": [169, 175, 28, 26], "iscrowd": 0}, {"id": 14961666, "category_id": 21, "area": 434, "bbox": [125, 155, 24, 22], "iscrowd": 0}, {"id": 13396244, "category_id": 21, "area": 372, "bbox": [72, 145, 23, 20], "iscrowd": 0}, {"id": 11560471, "category_id": 21, "area": 513, "bbox": [44, 167, 28, 24], "iscrowd": 0}, {"id": 12214276, "category_id": 21, "area": 743, "bbox": [90, 188, 33, 30], "iscrowd": 0}, {"id": 14380544, "category_id": 21, "area": 268, "bbox": [183, 136, 20, 18], "iscrowd": 0}, {"id": 13781276, "category_id": 21, "area": 134, "bbox": [188, 128, 19, 11], "iscrowd": 0}, {"id": 14316301, "category_id": 21, "area": 145, "bbox": [189, 119, 18, 9], "iscrowd": 0}, {"id": 12675358, "category_id": 21, "area": 189, "bbox": [122, 127, 18, 16], "iscrowd": 0}, {"id": 12747544, "category_id": 21, "area": 643, "bbox": [29, 232, 46, 17], "iscrowd": 0}, {"id": 15041024, "category_id": 21, "area": 260, "bbox": [127, 142, 22, 14], "iscrowd": 0}, {"id": 12143618, "category_id": 21, "area": 206, "bbox": [145, 126, 18, 16], "iscrowd": 0}, {"id": 11628552, "category_id": 21, "area": 181, "bbox": [137, 137, 20, 18], "iscrowd": 0}, {"id": 12021504, "category_id": 21, "area": 1026, "bbox": [156, 224, 47, 26], "iscrowd": 0}, {"id": 13390349, "category_id": 21, "area": 48, "bbox": [192, 114, 13, 6], "iscrowd": 0}, {"id": 14511626, "category_id": 21, "area": 100, "bbox": [199, 109, 13, 12], "iscrowd": 0}, {"id": 12474113, "category_id": 21, "area": 84, "bbox": [194, 103, 11, 10], "iscrowd": 0}, {"id": 13066248, "category_id": 21, "area": 142, "bbox": [155, 121, 16, 16], "iscrowd": 0}, {"id": 12339200, "category_id": 21, "area": 103, "bbox": [145, 117, 15, 9], "iscrowd": 0}, {"id": 14450702, "category_id": 21, "area": 132, "bbox": [166, 104, 14, 11], "iscrowd": 0}, {"id": 12737026, "category_id": 21, "area": 119, "bbox": [65, 111, 14, 12], "iscrowd": 0}, {"id": 13201408, "category_id": 21, "area": 96, "bbox": [53, 120, 14, 9], "iscrowd": 0}, {"id": 13658129, "category_id": 21, "area": 183, "bbox": [37, 123, 15, 13], "iscrowd": 0}, {"id": 14772481, "category_id": 21, "area": 181, "bbox": [25, 128, 14, 15], "iscrowd": 0}, {"id": 12537090, "category_id": 21, "area": 100, "bbox": [26, 115, 9, 12], "iscrowd": 0}, {"id": 13393945, "category_id": 21, "area": 134, "bbox": [32, 108, 15, 13], "iscrowd": 0}, {"id": 11755022, "category_id": 21, "area": 64, "bbox": [38, 98, 11, 8], "iscrowd": 0}, {"id": 11296279, "category_id": 21, "area": 200, "bbox": [107, 118, 18, 15], "iscrowd": 0}, {"id": 14506511, "category_id": 21, "area": 882, "bbox": [6, 183, 37, 32], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 525, "bbox": [231, 81, 25, 82], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 91, "bbox": [113, 2, 45, 78], "iscrowd": 0}, {"id": 16732928, "category_id": 88, "area": 56, "bbox": [121, 11, 41, 7], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 65, "bbox": [84, 12, 1, 103], "iscrowd": 0}, {"id": 16711743, "category_id": 94, "area": 1029, "bbox": [16, 54, 10, 117], "iscrowd": 0}, {"id": 16711719, "category_id": 94, "area": 28, "bbox": [52, 8, 2, 79], "iscrowd": 0}, {"id": 16711714, "category_id": 94, "area": 9, "bbox": [106, 7, 2, 56], "iscrowd": 0}]}, {"image_id": "ADE_val_00000411", "file_name": "ADE_val_00000411.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 29086, "bbox": [2, 1, 254, 142], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 8568, "bbox": [2, 12, 254, 174], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 15973, "bbox": [0, 181, 256, 75], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 2214, "bbox": [0, 178, 256, 37], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 703, "bbox": [2, 179, 92, 22], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2741, "bbox": [147, 144, 109, 41], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 4247, "bbox": [2, 128, 164, 54], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 58, "bbox": [101, 178, 10, 7], "iscrowd": 0}, {"id": 14844416, "category_id": 21, "area": 24, "bbox": [120, 179, 6, 5], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 241, "bbox": [187, 150, 18, 17], "iscrowd": 0}, {"id": 8651492, "category_id": 44, "area": 42, "bbox": [130, 172, 9, 5], "iscrowd": 0}, {"id": 11470335, "category_id": 44, "area": 83, "bbox": [49, 174, 10, 10], "iscrowd": 0}, {"id": 9765099, "category_id": 44, "area": 29, "bbox": [40, 170, 7, 16], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 40, "bbox": [185, 21, 11, 148], "iscrowd": 0}, {"id": 16723714, "category_id": 88, "area": 19, "bbox": [155, 106, 5, 48], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 47, "bbox": [110, 175, 7, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00000412", "file_name": "ADE_val_00000412.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 25352, "bbox": [2, 1, 254, 110], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4696, "bbox": [2, 78, 254, 54], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 31650, "bbox": [2, 120, 254, 136], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 517, "bbox": [64, 109, 102, 14], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 488, "bbox": [111, 124, 30, 23], "iscrowd": 0}, {"id": 13659648, "category_id": 21, "area": 104, "bbox": [83, 126, 13, 9], "iscrowd": 0}, {"id": 13663232, "category_id": 21, "area": 71, "bbox": [96, 126, 9, 8], "iscrowd": 0}, {"id": 11761169, "category_id": 21, "area": 315, "bbox": [16, 127, 25, 18], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 222, "bbox": [26, 94, 16, 15], "iscrowd": 0}, {"id": 10027243, "category_id": 44, "area": 271, "bbox": [166, 107, 19, 15], "iscrowd": 0}, {"id": 8388863, "category_id": 44, "area": 85, "bbox": [29, 116, 12, 8], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 35, "bbox": [50, 59, 19, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00000413", "file_name": "ADE_val_00000413.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 29395, "bbox": [2, 1, 254, 130], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4874, "bbox": [0, 100, 255, 47], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 25043, "bbox": [2, 140, 254, 116], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 320, "bbox": [218, 146, 38, 11], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 2045, "bbox": [0, 139, 80, 39], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 343, "bbox": [13, 131, 51, 8], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2181, "bbox": [161, 125, 58, 45], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 85, "bbox": [108, 134, 8, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00000414", "file_name": "ADE_val_00000414.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 571, "bbox": [136, 175, 119, 15], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 30465, "bbox": [2, 1, 254, 145], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 12817, "bbox": [2, 189, 254, 67], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 2819, "bbox": [2, 185, 254, 35], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 17214, "bbox": [2, 66, 254, 134], "iscrowd": 0}]}, {"image_id": "ADE_val_00000415", "file_name": "ADE_val_00000415.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 32895, "bbox": [0, 0, 256, 152], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1578, "bbox": [29, 124, 167, 38], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 18357, "bbox": [2, 151, 254, 105], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 2383, "bbox": [28, 129, 228, 33], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 133, "bbox": [92, 145, 17, 18], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 8129, "bbox": [2, 137, 129, 81], "iscrowd": 0}, {"id": 12216086, "category_id": 21, "area": 34, "bbox": [248, 154, 6, 6], "iscrowd": 0}, {"id": 13924864, "category_id": 21, "area": 341, "bbox": [193, 148, 22, 18], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 168, "bbox": [24, 56, 7, 73], "iscrowd": 0}]}, {"image_id": "ADE_val_00000416", "file_name": "ADE_val_00000416.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 27614, "bbox": [2, 1, 254, 132], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2783, "bbox": [200, 71, 56, 79], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 26466, "bbox": [2, 141, 254, 115], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 282, "bbox": [151, 133, 49, 11], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 5876, "bbox": [2, 92, 181, 57], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 65, "bbox": [14, 145, 14, 7], "iscrowd": 0}, {"id": 13128704, "category_id": 21, "area": 27, "bbox": [73, 144, 7, 5], "iscrowd": 0}]}, {"image_id": "ADE_val_00000417", "file_name": "ADE_val_00000417.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1849, "bbox": [5, 138, 152, 19], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 27932, "bbox": [2, 1, 254, 116], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1192, "bbox": [0, 109, 118, 29], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 27260, "bbox": [0, 136, 256, 120], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 1502, "bbox": [119, 113, 137, 15], "iscrowd": 0}, {"id": 16761344, "category_id": 95, "area": 1276, "bbox": [122, 127, 96, 19], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 1308, "bbox": [39, 94, 48, 33], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 292, "bbox": [0, 139, 12, 37], "iscrowd": 0}, {"id": 13062656, "category_id": 21, "area": 324, "bbox": [228, 126, 23, 21], "iscrowd": 0}, {"id": 13195264, "category_id": 21, "area": 155, "bbox": [218, 126, 15, 17], "iscrowd": 0}, {"id": 12407820, "category_id": 21, "area": 82, "bbox": [247, 126, 9, 12], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 889, "bbox": [12, 124, 88, 13], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 3, "bbox": [120, 132, 1, 3], "iscrowd": 0}]}, {"image_id": "ADE_val_00000418", "file_name": "ADE_val_00000418.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 261, "bbox": [61, 394, 31, 17], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 205135, "bbox": [0, 0, 682, 395], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 82895, "bbox": [0, 111, 682, 338], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 37546, "bbox": [0, 407, 628, 104], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 17596, "bbox": [0, 404, 682, 107], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 3058, "bbox": [0, 409, 307, 26], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 132, "bbox": [265, 419, 11, 12], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1069, "bbox": [578, 368, 24, 93], "iscrowd": 0}, {"id": 11731199, "category_id": 44, "area": 56, "bbox": [146, 404, 10, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000419", "file_name": "ADE_val_00000419.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 16984, "bbox": [28, 33, 228, 218], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 41120, "bbox": [0, 1, 256, 251], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 6155, "bbox": [2, 206, 254, 50], "iscrowd": 0}]}, {"image_id": "ADE_val_00000420", "file_name": "ADE_val_00000420.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 112412, "bbox": [1, 1, 681, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 36004, "bbox": [28, 402, 543, 109], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 36077, "bbox": [1, 1, 481, 99], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 4530, "bbox": [1, 417, 93, 94], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 20954, "bbox": [59, 148, 117, 208], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5485, "bbox": [305, 300, 171, 168], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 2521, "bbox": [60, 120, 43, 268], "iscrowd": 0}, {"id": 348391, "category_id": 19, "area": 4268, "bbox": [152, 124, 40, 247], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 11506, "bbox": [539, 396, 129, 116], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3367, "bbox": [425, 112, 56, 67], "iscrowd": 0}, {"id": 2169087, "category_id": 23, "area": 1624, "bbox": [407, 182, 33, 52], "iscrowd": 0}, {"id": 2557674, "category_id": 23, "area": 1892, "bbox": [465, 181, 31, 62], "iscrowd": 0}, {"id": 2492642, "category_id": 23, "area": 784, "bbox": [551, 270, 33, 32], "iscrowd": 0}, {"id": 3677155, "category_id": 23, "area": 977, "bbox": [508, 4, 38, 33], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1652, "bbox": [346, 380, 57, 48], "iscrowd": 0}, {"id": 3271424, "category_id": 42, "area": 1560, "bbox": [345, 353, 59, 46], "iscrowd": 0}, {"id": 2161925, "category_id": 42, "area": 1393, "bbox": [346, 329, 57, 38], "iscrowd": 0}, {"id": 58112, "category_id": 42, "area": 1941, "bbox": [402, 401, 73, 55], "iscrowd": 0}, {"id": 59648, "category_id": 42, "area": 1985, "bbox": [404, 369, 71, 53], "iscrowd": 0}, {"id": 3079963, "category_id": 42, "area": 1724, "bbox": [403, 343, 74, 43], "iscrowd": 0}, {"id": 65308, "category_id": 42, "area": 823, "bbox": [517, 276, 38, 25], "iscrowd": 0}, {"id": 65280, "category_id": 42, "area": 398, "bbox": [603, 298, 33, 16], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 62958, "bbox": [470, 1, 212, 508], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 2234, "bbox": [348, 282, 65, 43], "iscrowd": 0}, {"id": 1481452, "category_id": 68, "area": 7211, "bbox": [506, 103, 132, 68], "iscrowd": 0}, {"id": 44543, "category_id": 68, "area": 7480, "bbox": [502, 180, 133, 69], "iscrowd": 0}, {"id": 36351, "category_id": 68, "area": 615, "bbox": [517, 80, 68, 15], "iscrowd": 0}, {"id": 49663, "category_id": 68, "area": 307, "bbox": [626, 57, 17, 25], "iscrowd": 0}, {"id": 48880, "category_id": 83, "area": 159, "bbox": [340, 0, 39, 8], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 384, "bbox": [528, 253, 23, 23], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 2329, "bbox": [42, 412, 52, 58], "iscrowd": 0}]}, {"image_id": "ADE_val_00000421", "file_name": "ADE_val_00000421.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 8015, "bbox": [0, 0, 256, 134], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 18772, "bbox": [0, 159, 255, 96], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5125, "bbox": [141, 0, 92, 79], "iscrowd": 0}, {"id": 14732754, "category_id": 9, "area": 4350, "bbox": [23, 0, 93, 110], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3949, "bbox": [92, 109, 79, 70], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 1110, "bbox": [24, 104, 80, 32], "iscrowd": 0}, {"id": 4593919, "category_id": 25, "area": 302, "bbox": [194, 105, 61, 13], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 6291, "bbox": [0, 92, 254, 84], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 508, "bbox": [123, 67, 27, 29], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 197, "bbox": [160, 135, 16, 17], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1068, "bbox": [173, 89, 75, 19], "iscrowd": 0}, {"id": 44278, "category_id": 68, "area": 291, "bbox": [201, 157, 32, 11], "iscrowd": 0}, {"id": 1678079, "category_id": 68, "area": 1254, "bbox": [196, 111, 58, 33], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 4435, "bbox": [39, 51, 65, 101], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 1215, "bbox": [193, 48, 36, 41], "iscrowd": 0}]}, {"image_id": "ADE_val_00000422", "file_name": "ADE_val_00000422.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 135655, "bbox": [0, 0, 683, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 34901, "bbox": [326, 340, 347, 172], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 36813, "bbox": [189, 1, 180, 217], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 44148, "bbox": [55, 208, 280, 304], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 18885, "bbox": [250, 197, 162, 306], "iscrowd": 0}]}, {"image_id": "ADE_val_00000423", "file_name": "ADE_val_00000423.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 108489, "bbox": [1, 0, 681, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6727, "bbox": [447, 435, 194, 76], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 1313, "bbox": [405, 0, 107, 23], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 77973, "bbox": [403, 0, 280, 307], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2948, "bbox": [436, 340, 61, 105], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 27090, "bbox": [0, 24, 77, 487], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 27346, "bbox": [280, 353, 193, 158], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 31769, "bbox": [163, 1, 164, 217], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 26850, "bbox": [104, 302, 339, 209], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1554, "bbox": [444, 317, 66, 36], "iscrowd": 0}, {"id": 1834752, "category_id": 42, "area": 12767, "bbox": [538, 375, 130, 136], "iscrowd": 0}, {"id": 1507086, "category_id": 42, "area": 1699, "bbox": [641, 463, 41, 48], "iscrowd": 0}, {"id": 388608, "category_id": 42, "area": 2922, "bbox": [141, 357, 94, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00000424", "file_name": "ADE_val_00000424.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 393322, "bbox": [0, 2, 904, 892], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25691, "bbox": [2, 800, 913, 174], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 104740, "bbox": [2, 0, 718, 256], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 17198, "bbox": [781, 561, 123, 223], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 77489, "bbox": [2, 827, 863, 144], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 69906, "bbox": [564, 154, 218, 527], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 79842, "bbox": [830, 0, 143, 973], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 67003, "bbox": [515, 81, 306, 762], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 3542, "bbox": [385, 457, 79, 106], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 26561, "bbox": [191, 663, 411, 224], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2259, "bbox": [464, 531, 99, 139], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 782, "bbox": [339, 671, 63, 16], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 39984, "bbox": [231, 637, 229, 324], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 597, "bbox": [384, 12, 36, 23], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 10445, "bbox": [835, 768, 80, 176], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 3033, "bbox": [757, 817, 74, 59], "iscrowd": 0}]}, {"image_id": "ADE_val_00000425", "file_name": "ADE_val_00000425.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 145628, "bbox": [1, 16, 682, 456], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3808, "bbox": [0, 458, 91, 53], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 34993, "bbox": [0, 0, 683, 102], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 45908, "bbox": [455, 194, 228, 244], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 28863, "bbox": [81, 376, 394, 136], "iscrowd": 0}, {"id": 16545042, "category_id": 24, "area": 33163, "bbox": [312, 377, 371, 134], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 294, "bbox": [215, 61, 30, 13], "iscrowd": 0}, {"id": 16763904, "category_id": 131, "area": 38380, "bbox": [2, 188, 229, 186], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 6148, "bbox": [235, 6, 221, 88], "iscrowd": 0}]}, {"image_id": "ADE_val_00000426", "file_name": "ADE_val_00000426.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 78218, "bbox": [37, 86, 594, 218], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 90329, "bbox": [0, 0, 632, 244], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 9375, "bbox": [2, 181, 631, 114], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 61809, "bbox": [2, 298, 630, 117], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 3945, "bbox": [264, 302, 362, 22], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 13105, "bbox": [2, 275, 630, 59], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 594, "bbox": [20, 278, 66, 14], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 431, "bbox": [279, 57, 45, 251], "iscrowd": 0}]}, {"image_id": "ADE_val_00000427", "file_name": "ADE_val_00000427.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 947, "bbox": [426, 242, 42, 33], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 8947, "bbox": [420, 1, 153, 158], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 140536, "bbox": [0, 0, 717, 328], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 79684, "bbox": [1, 58, 717, 342], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 14504, "bbox": [1, 348, 298, 102], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 18775, "bbox": [305, 303, 245, 209], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 47798, "bbox": [0, 275, 456, 235], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 41247, "bbox": [442, 280, 276, 232], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2045, "bbox": [87, 380, 67, 58], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 3840, "bbox": [227, 218, 88, 119], "iscrowd": 0}]}, {"image_id": "ADE_val_00000428", "file_name": "ADE_val_00000428.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6239, "bbox": [0, 107, 32, 404], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 14912, "bbox": [0, 0, 597, 63], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 30053, "bbox": [166, 227, 431, 284], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 17017, "bbox": [109, 0, 326, 61], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 25079, "bbox": [78, 118, 519, 153], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 84032, "bbox": [0, 47, 597, 214], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 9794, "bbox": [9, 205, 161, 88], "iscrowd": 0}, {"id": 16711797, "category_id": 38, "area": 113523, "bbox": [16, 243, 576, 268], "iscrowd": 0}]}, {"image_id": "ADE_val_00000429", "file_name": "ADE_val_00000429.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 112918, "bbox": [0, 81, 682, 384], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 72271, "bbox": [0, 344, 682, 167], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 63546, "bbox": [0, 0, 682, 110], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 19236, "bbox": [603, 117, 79, 273], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3202, "bbox": [203, 291, 104, 128], "iscrowd": 0}, {"id": 6031594, "category_id": 16, "area": 873, "bbox": [371, 282, 102, 26], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3486, "bbox": [333, 257, 59, 119], "iscrowd": 0}, {"id": 21455, "category_id": 20, "area": 4975, "bbox": [383, 287, 68, 123], "iscrowd": 0}, {"id": 13756, "category_id": 20, "area": 6894, "bbox": [241, 299, 86, 140], "iscrowd": 0}, {"id": 540113, "category_id": 20, "area": 5326, "bbox": [448, 264, 84, 132], "iscrowd": 0}, {"id": 23004, "category_id": 20, "area": 3921, "bbox": [131, 291, 89, 145], "iscrowd": 0}, {"id": 798153, "category_id": 20, "area": 1229, "bbox": [275, 266, 47, 36], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 10621, "bbox": [422, 135, 100, 112], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1754, "bbox": [558, 90, 44, 44], "iscrowd": 0}, {"id": 23807, "category_id": 79, "area": 35488, "bbox": [1, 202, 146, 297], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 296, "bbox": [433, 53, 33, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000430", "file_name": "ADE_val_00000430.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 31457, "bbox": [0, 0, 299, 162], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 11427, "bbox": [0, 214, 299, 85], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 481, "bbox": [59, 0, 99, 9], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 9074, "bbox": [2, 97, 256, 194], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2146, "bbox": [0, 21, 17, 144], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2097, "bbox": [251, 153, 48, 69], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1414, "bbox": [266, 194, 33, 67], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 884, "bbox": [151, 51, 26, 35], "iscrowd": 0}, {"id": 1445887, "category_id": 23, "area": 994, "bbox": [183, 48, 28, 37], "iscrowd": 0}, {"id": 2694126, "category_id": 23, "area": 1121, "bbox": [217, 45, 31, 38], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 540, "bbox": [87, 97, 30, 41], "iscrowd": 0}, {"id": 786385, "category_id": 37, "area": 735, "bbox": [275, 96, 25, 62], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 1225, "bbox": [170, 112, 55, 27], "iscrowd": 0}, {"id": 15194127, "category_id": 58, "area": 719, "bbox": [117, 113, 45, 19], "iscrowd": 0}, {"id": 16774157, "category_id": 58, "area": 319, "bbox": [221, 107, 15, 34], "iscrowd": 0}, {"id": 16766208, "category_id": 58, "area": 572, "bbox": [236, 114, 19, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00000431", "file_name": "ADE_val_00000431.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 16063, "bbox": [0, 0, 352, 192], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5664, "bbox": [205, 171, 146, 59], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 17232, "bbox": [0, 83, 213, 147], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 513, "bbox": [39, 128, 49, 18], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 12704, "bbox": [157, 4, 123, 126], "iscrowd": 0}, {"id": 2181865, "category_id": 19, "area": 6551, "bbox": [139, 0, 171, 133], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2386, "bbox": [195, 111, 65, 72], "iscrowd": 0}, {"id": 13007, "category_id": 20, "area": 3629, "bbox": [281, 123, 71, 94], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 11117, "bbox": [56, 2, 85, 151], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 282, "bbox": [53, 113, 20, 20], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 751, "bbox": [1, 119, 38, 28], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 1884, "bbox": [228, 135, 67, 87], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 1062, "bbox": [164, 125, 37, 37], "iscrowd": 0}]}, {"image_id": "ADE_val_00000432", "file_name": "ADE_val_00000432.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 65225, "bbox": [2, 0, 445, 246], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 13990, "bbox": [57, 203, 390, 96], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 1670, "bbox": [290, 275, 100, 24], "iscrowd": 0}, {"id": 6094592, "category_id": 107, "area": 15824, "bbox": [128, 4, 231, 267], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 17191, "bbox": [135, 154, 214, 145], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2130, "bbox": [387, 76, 25, 143], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3118, "bbox": [85, 179, 53, 74], "iscrowd": 0}, {"id": 4202212, "category_id": 16, "area": 578, "bbox": [238, 160, 37, 25], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 6156, "bbox": [0, 198, 94, 101], "iscrowd": 0}, {"id": 16733223, "category_id": 24, "area": 1245, "bbox": [413, 164, 34, 49], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 450, "bbox": [104, 155, 25, 31], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1080, "bbox": [4, 204, 56, 36], "iscrowd": 0}, {"id": 842751, "category_id": 40, "area": 322, "bbox": [1, 225, 18, 32], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 1062, "bbox": [145, 163, 61, 26], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 567, "bbox": [271, 195, 37, 23], "iscrowd": 0}, {"id": 5767935, "category_id": 82, "area": 779, "bbox": [226, 206, 44, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00000433", "file_name": "ADE_val_00000433.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 120841, "bbox": [0, 0, 682, 337], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 24581, "bbox": [1, 252, 208, 260], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 38055, "bbox": [109, 163, 573, 301], "iscrowd": 0}, {"id": 15335649, "category_id": 8, "area": 81676, "bbox": [127, 321, 555, 190], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 27138, "bbox": [106, 0, 98, 287], "iscrowd": 0}, {"id": 1703694, "category_id": 15, "area": 3951, "bbox": [87, 1, 19, 253], "iscrowd": 0}, {"id": 3538688, "category_id": 15, "area": 10239, "bbox": [60, 0, 40, 382], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1745, "bbox": [464, 245, 97, 42], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 836, "bbox": [452, 228, 53, 37], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1475, "bbox": [466, 28, 47, 217], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 13352, "bbox": [245, 187, 185, 102], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 7178, "bbox": [467, 267, 181, 70], "iscrowd": 0}, {"id": 15724817, "category_id": 58, "area": 5355, "bbox": [576, 318, 105, 88], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 279, "bbox": [349, 188, 33, 12], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 1671, "bbox": [494, 136, 66, 54], "iscrowd": 0}]}, {"image_id": "ADE_val_00000434", "file_name": "ADE_val_00000434.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 106979, "bbox": [0, 0, 682, 359], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 89292, "bbox": [1, 242, 682, 269], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1762, "bbox": [0, 0, 160, 14], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 100113, "bbox": [33, 118, 501, 341], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 10859, "bbox": [516, 251, 106, 129], "iscrowd": 0}, {"id": 6750439, "category_id": 16, "area": 2776, "bbox": [158, 200, 92, 50], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 16518, "bbox": [324, 0, 166, 108], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 13810, "bbox": [33, 149, 137, 143], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 2248, "bbox": [547, 99, 55, 73], "iscrowd": 0}, {"id": 16260352, "category_id": 135, "area": 1577, "bbox": [210, 87, 48, 58], "iscrowd": 0}]}, {"image_id": "ADE_val_00000435", "file_name": "ADE_val_00000435.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 40721, "bbox": [2, 0, 476, 262], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6340, "bbox": [0, 109, 478, 182], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 13704, "bbox": [2, 270, 339, 48], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 7208, "bbox": [274, 269, 204, 49], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4285, "bbox": [13, 237, 461, 52], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 78929, "bbox": [0, 53, 468, 225], "iscrowd": 0}]}, {"image_id": "ADE_val_00000436", "file_name": "ADE_val_00000436.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 62950, "bbox": [0, 0, 681, 323], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 56912, "bbox": [0, 107, 681, 312], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 42326, "bbox": [0, 399, 676, 112], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1498, "bbox": [257, 415, 190, 27], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 167372, "bbox": [99, 15, 479, 444], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 5326, "bbox": [322, 457, 184, 54], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 2821, "bbox": [308, 420, 94, 36], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 6241, "bbox": [658, 0, 24, 511], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 731, "bbox": [264, 432, 46, 22], "iscrowd": 0}, {"id": 16719359, "category_id": 126, "area": 1010, "bbox": [403, 430, 42, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00000437", "file_name": "ADE_val_00000437.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 1201, "bbox": [0, 225, 90, 14], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 42954, "bbox": [0, 0, 600, 211], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 58758, "bbox": [0, 0, 683, 336], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 105764, "bbox": [0, 305, 683, 205], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 19544, "bbox": [1, 302, 437, 82], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 112331, "bbox": [22, 84, 661, 260], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 6970, "bbox": [0, 239, 90, 86], "iscrowd": 0}]}, {"image_id": "ADE_val_00000438", "file_name": "ADE_val_00000438.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 26536, "bbox": [2, 0, 485, 216], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 50200, "bbox": [2, 0, 485, 323], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 20646, "bbox": [29, 195, 458, 129], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 38296, "bbox": [62, 22, 365, 244], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 4697, "bbox": [278, 252, 209, 46], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 7926, "bbox": [1, 210, 97, 115], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 947, "bbox": [279, 230, 46, 25], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 3450, "bbox": [189, 199, 96, 56], "iscrowd": 0}, {"id": 16737792, "category_id": 96, "area": 2990, "bbox": [313, 198, 88, 52], "iscrowd": 0}]}, {"image_id": "ADE_val_00000439", "file_name": "ADE_val_00000439.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 87536, "bbox": [0, 0, 681, 364], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 34098, "bbox": [0, 345, 394, 165], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3825, "bbox": [30, 0, 216, 28], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1903, "bbox": [218, 118, 68, 63], "iscrowd": 0}, {"id": 4988310, "category_id": 13, "area": 17411, "bbox": [44, 116, 100, 310], "iscrowd": 0}, {"id": 16711680, "category_id": 56, "area": 155180, "bbox": [58, 169, 623, 342], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 714, "bbox": [378, 149, 17, 50], "iscrowd": 0}, {"id": 2613760, "category_id": 99, "area": 749, "bbox": [394, 141, 18, 58], "iscrowd": 0}, {"id": 1172480, "category_id": 99, "area": 586, "bbox": [366, 142, 16, 55], "iscrowd": 0}, {"id": 65280, "category_id": 99, "area": 874, "bbox": [347, 147, 20, 51], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 7397, "bbox": [255, 29, 87, 92], "iscrowd": 0}, {"id": 1239463, "category_id": 145, "area": 12365, "bbox": [383, 11, 123, 111], "iscrowd": 0}, {"id": 455377, "category_id": 145, "area": 16261, "bbox": [541, 0, 140, 123], "iscrowd": 0}]}, {"image_id": "ADE_val_00000440", "file_name": "ADE_val_00000440.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 23246, "bbox": [0, 165, 579, 67], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 69346, "bbox": [2, 0, 576, 151], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1288, "bbox": [135, 242, 29, 76], "iscrowd": 0}, {"id": 3866784, "category_id": 13, "area": 480, "bbox": [37, 218, 21, 48], "iscrowd": 0}, {"id": 3086479, "category_id": 13, "area": 1568, "bbox": [253, 242, 35, 84], "iscrowd": 0}, {"id": 2490540, "category_id": 13, "area": 330, "bbox": [174, 213, 20, 40], "iscrowd": 0}, {"id": 5898406, "category_id": 13, "area": 1454, "bbox": [338, 249, 41, 77], "iscrowd": 0}, {"id": 4720284, "category_id": 13, "area": 473, "bbox": [368, 239, 26, 60], "iscrowd": 0}, {"id": 3802261, "category_id": 13, "area": 1002, "bbox": [458, 239, 28, 78], "iscrowd": 0}, {"id": 4327809, "category_id": 13, "area": 234, "bbox": [401, 209, 12, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00000441", "file_name": "ADE_val_00000441.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 8540, "bbox": [345, 50, 222, 71], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 24298, "bbox": [69, 0, 499, 96], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 774, "bbox": [343, 46, 225, 56], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 38654, "bbox": [0, 0, 346, 172], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 5765, "bbox": [96, 69, 61, 174], "iscrowd": 0}, {"id": 4460455, "category_id": 13, "area": 2781, "bbox": [258, 142, 48, 108], "iscrowd": 0}, {"id": 2295929, "category_id": 13, "area": 4427, "bbox": [358, 70, 51, 140], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 518, "bbox": [499, 101, 40, 22], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 72, "bbox": [398, 42, 23, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00000442", "file_name": "ADE_val_00000442.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 13289, "bbox": [21, 3, 380, 68], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 47985, "bbox": [2, 2, 399, 187], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 28484, "bbox": [0, 170, 401, 183], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 10342, "bbox": [105, 196, 224, 98], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 9361, "bbox": [160, 23, 74, 185], "iscrowd": 0}]}, {"image_id": "ADE_val_00000443", "file_name": "ADE_val_00000443.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 24445, "bbox": [0, 0, 256, 171], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 17312, "bbox": [0, 161, 256, 82], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 4260, "bbox": [0, 235, 255, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00000444", "file_name": "ADE_val_00000444.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 47370, "bbox": [0, 1, 468, 350], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 19928, "bbox": [0, 234, 465, 117], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 597, "bbox": [390, 196, 45, 25], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 10565, "bbox": [263, 1, 81, 163], "iscrowd": 0}, {"id": 14479854, "category_id": 9, "area": 14440, "bbox": [81, 3, 100, 159], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1500, "bbox": [47, 111, 38, 66], "iscrowd": 0}, {"id": 5701791, "category_id": 13, "area": 1404, "bbox": [186, 115, 30, 86], "iscrowd": 0}, {"id": 3347370, "category_id": 13, "area": 5408, "bbox": [182, 122, 97, 112], "iscrowd": 0}, {"id": 2293914, "category_id": 13, "area": 6139, "bbox": [308, 111, 81, 122], "iscrowd": 0}, {"id": 3211392, "category_id": 13, "area": 316, "bbox": [74, 143, 18, 24], "iscrowd": 0}, {"id": 3217811, "category_id": 13, "area": 2877, "bbox": [113, 139, 75, 147], "iscrowd": 0}, {"id": 4197800, "category_id": 13, "area": 10339, "bbox": [223, 140, 149, 209], "iscrowd": 0}, {"id": 3214504, "category_id": 13, "area": 5349, "bbox": [5, 120, 85, 163], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 15097, "bbox": [137, 229, 323, 122], "iscrowd": 0}, {"id": 4587765, "category_id": 16, "area": 2462, "bbox": [396, 200, 72, 109], "iscrowd": 0}, {"id": 5184511, "category_id": 16, "area": 6071, "bbox": [26, 165, 141, 121], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 917, "bbox": [0, 159, 38, 124], "iscrowd": 0}, {"id": 417755, "category_id": 20, "area": 885, "bbox": [142, 167, 51, 117], "iscrowd": 0}, {"id": 1988586, "category_id": 20, "area": 7815, "bbox": [255, 229, 95, 121], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1050, "bbox": [202, 70, 37, 30], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1420, "bbox": [394, 151, 54, 47], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 904, "bbox": [208, 21, 44, 30], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 199, "bbox": [116, 185, 29, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00000445", "file_name": "ADE_val_00000445.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 26788, "bbox": [0, 124, 494, 134], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9347, "bbox": [2, 0, 507, 37], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 78252, "bbox": [0, 1, 509, 267], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 41087, "bbox": [0, 219, 509, 124], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 9081, "bbox": [0, 20, 250, 95], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 7602, "bbox": [0, 250, 213, 67], "iscrowd": 0}]}, {"image_id": "ADE_val_00000446", "file_name": "ADE_val_00000446.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 95594, "bbox": [0, 1, 682, 180], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 106282, "bbox": [0, 175, 682, 336], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 27250, "bbox": [0, 97, 682, 96], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 95754, "bbox": [1, 199, 681, 226], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 1280, "bbox": [96, 451, 325, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00000447", "file_name": "ADE_val_00000447.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 134717, "bbox": [0, 0, 633, 424], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 53832, "bbox": [0, 330, 633, 181], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 13838, "bbox": [135, 396, 340, 56], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 15837, "bbox": [539, 13, 80, 232], "iscrowd": 0}, {"id": 16578015, "category_id": 9, "area": 9354, "bbox": [458, 31, 56, 190], "iscrowd": 0}, {"id": 15520253, "category_id": 9, "area": 22145, "bbox": [314, 39, 131, 172], "iscrowd": 0}, {"id": 14217930, "category_id": 9, "area": 25103, "bbox": [103, 35, 143, 179], "iscrowd": 0}, {"id": 15324153, "category_id": 9, "area": 5198, "bbox": [0, 31, 33, 186], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 10400, "bbox": [46, 1, 35, 458], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 2430, "bbox": [449, 339, 113, 102], "iscrowd": 0}]}, {"image_id": "ADE_val_00000448", "file_name": "ADE_val_00000448.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 7190, "bbox": [13, 126, 322, 186], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 31707, "bbox": [19, 310, 316, 139], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 37778, "bbox": [0, 0, 335, 143], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3805, "bbox": [68, 200, 229, 114], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 39033, "bbox": [8, 77, 307, 192], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3536, "bbox": [12, 254, 63, 105], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4108, "bbox": [2, 48, 20, 401], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1000, "bbox": [310, 143, 25, 53], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 811, "bbox": [11, 177, 36, 45], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 853, "bbox": [125, 309, 50, 27], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 58, "bbox": [172, 50, 10, 8], "iscrowd": 0}, {"id": 2004213, "category_id": 83, "area": 116, "bbox": [17, 108, 16, 9], "iscrowd": 0}, {"id": 1419775, "category_id": 83, "area": 81, "bbox": [42, 126, 13, 8], "iscrowd": 0}, {"id": 38143, "category_id": 83, "area": 47, "bbox": [299, 122, 10, 6], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 1299, "bbox": [27, 302, 39, 47], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 763, "bbox": [126, 313, 50, 42], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 232, "bbox": [324, 325, 11, 23], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 210, "bbox": [92, 297, 14, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00000449", "file_name": "ADE_val_00000449.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 457, "bbox": [0, 86, 13, 58], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 16304, "bbox": [0, 144, 256, 112], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 583, "bbox": [0, 0, 38, 24], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 244, "bbox": [8, 98, 9, 50], "iscrowd": 0}, {"id": 1699095, "category_id": 15, "area": 8519, "bbox": [189, 72, 56, 163], "iscrowd": 0}, {"id": 2023961, "category_id": 15, "area": 2845, "bbox": [117, 88, 29, 105], "iscrowd": 0}, {"id": 2293539, "category_id": 15, "area": 1113, "bbox": [50, 95, 17, 70], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 598, "bbox": [84, 139, 33, 42], "iscrowd": 0}, {"id": 1070513, "category_id": 20, "area": 128, "bbox": [15, 125, 13, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00000450", "file_name": "ADE_val_00000450.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 28095, "bbox": [0, 0, 228, 206], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 11475, "bbox": [0, 127, 228, 84], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 5047, "bbox": [11, 66, 155, 59], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 786, "bbox": [140, 92, 67, 75], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 175, "bbox": [150, 95, 20, 11], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 1023, "bbox": [131, 141, 45, 69], "iscrowd": 0}]}, {"image_id": "ADE_val_00000451", "file_name": "ADE_val_00000451.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 2899, "bbox": [0, 171, 57, 83], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 15487, "bbox": [0, 0, 413, 189], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 110481, "bbox": [1, 0, 681, 354], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 89877, "bbox": [1, 163, 681, 348], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 15573, "bbox": [0, 349, 562, 102], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 42226, "bbox": [2, 331, 626, 180], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3070, "bbox": [0, 231, 43, 129], "iscrowd": 0}]}, {"image_id": "ADE_val_00000452", "file_name": "ADE_val_00000452.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 45495, "bbox": [0, 0, 291, 195], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 6711, "bbox": [39, 0, 277, 58], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6974, "bbox": [0, 190, 318, 35], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6477, "bbox": [0, 0, 318, 191], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 7519, "bbox": [0, 165, 318, 74], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 190, "bbox": [300, 182, 18, 12], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 2288, "bbox": [0, 162, 215, 58], "iscrowd": 0}]}, {"image_id": "ADE_val_00000453", "file_name": "ADE_val_00000453.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 3223, "bbox": [190, 0, 394, 58], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 68708, "bbox": [2, 0, 680, 310], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 68414, "bbox": [0, 236, 681, 275], "iscrowd": 0}]}, {"image_id": "ADE_val_00000454", "file_name": "ADE_val_00000454.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 31444, "bbox": [0, 276, 783, 174], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 61713, "bbox": [0, 178, 784, 165], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 167329, "bbox": [0, 0, 783, 283], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1213, "bbox": [591, 297, 192, 41], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 61857, "bbox": [1, 271, 783, 241], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 32726, "bbox": [0, 303, 769, 208], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 26073, "bbox": [0, 366, 634, 145], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 15, "bbox": [23, 281, 3, 7], "iscrowd": 0}, {"id": 4984709, "category_id": 13, "area": 14, "bbox": [28, 281, 4, 7], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 12354, "bbox": [645, 247, 126, 249], "iscrowd": 0}, {"id": 16333583, "category_id": 73, "area": 501, "bbox": [392, 302, 29, 42], "iscrowd": 0}, {"id": 15623168, "category_id": 73, "area": 1167, "bbox": [387, 273, 53, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00000455", "file_name": "ADE_val_00000455.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 55059, "bbox": [0, 0, 681, 121], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 10328, "bbox": [0, 35, 402, 111], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 98956, "bbox": [0, 229, 682, 282], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 3025, "bbox": [0, 234, 43, 76], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 59571, "bbox": [1, 71, 682, 149], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 918, "bbox": [0, 203, 41, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00000456", "file_name": "ADE_val_00000456.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 43083, "bbox": [0, 38, 500, 185], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 46938, "bbox": [0, 189, 500, 185], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 27200, "bbox": [0, 0, 499, 85], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 13496, "bbox": [0, 53, 151, 113], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7244, "bbox": [111, 230, 130, 89], "iscrowd": 0}, {"id": 15925956, "category_id": 11, "area": 13062, "bbox": [0, 180, 104, 157], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1026, "bbox": [159, 114, 23, 47], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2199, "bbox": [132, 209, 117, 55], "iscrowd": 0}, {"id": 5767423, "category_id": 16, "area": 9630, "bbox": [88, 297, 155, 78], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1969, "bbox": [0, 46, 157, 114], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1843, "bbox": [68, 290, 42, 84], "iscrowd": 0}, {"id": 16814, "category_id": 20, "area": 946, "bbox": [194, 341, 76, 32], "iscrowd": 0}, {"id": 15314, "category_id": 20, "area": 890, "bbox": [195, 278, 37, 35], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 2140, "bbox": [138, 160, 52, 46], "iscrowd": 0}, {"id": 6357998, "category_id": 25, "area": 5859, "bbox": [220, 165, 88, 86], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2009, "bbox": [381, 0, 67, 76], "iscrowd": 0}, {"id": 37873, "category_id": 83, "area": 3462, "bbox": [120, 0, 214, 85], "iscrowd": 0}, {"id": 39657, "category_id": 83, "area": 3245, "bbox": [0, 19, 228, 66], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 239, "bbox": [354, 89, 27, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00000457", "file_name": "ADE_val_00000457.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 7565, "bbox": [0, 0, 300, 113], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 7505, "bbox": [0, 160, 300, 65], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 2911, "bbox": [139, 143, 100, 81], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 261, "bbox": [257, 132, 19, 20], "iscrowd": 0}, {"id": 789236, "category_id": 67, "area": 730, "bbox": [256, 110, 42, 27], "iscrowd": 0}, {"id": 1245439, "category_id": 67, "area": 504, "bbox": [147, 116, 28, 25], "iscrowd": 0}, {"id": 239, "category_id": 67, "area": 422, "bbox": [173, 114, 24, 28], "iscrowd": 0}, {"id": 1376497, "category_id": 67, "area": 398, "bbox": [191, 116, 30, 23], "iscrowd": 0}, {"id": 6143, "category_id": 67, "area": 331, "bbox": [273, 155, 26, 21], "iscrowd": 0}, {"id": 137471, "category_id": 67, "area": 614, "bbox": [154, 70, 31, 41], "iscrowd": 0}, {"id": 3583, "category_id": 67, "area": 330, "bbox": [235, 94, 26, 19], "iscrowd": 0}, {"id": 4607, "category_id": 67, "area": 500, "bbox": [146, 137, 34, 24], "iscrowd": 0}, {"id": 1050879, "category_id": 67, "area": 658, "bbox": [180, 138, 40, 24], "iscrowd": 0}, {"id": 1179903, "category_id": 67, "area": 489, "bbox": [168, 168, 33, 25], "iscrowd": 0}, {"id": 13369599, "category_id": 89, "area": 34520, "bbox": [29, 3, 271, 222], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 3984, "bbox": [0, 69, 43, 95], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 4262, "bbox": [128, 5, 147, 46], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 175, "bbox": [263, 151, 10, 24], "iscrowd": 0}, {"id": 11534106, "category_id": 136, "area": 240, "bbox": [155, 162, 13, 21], "iscrowd": 0}, {"id": 12189202, "category_id": 136, "area": 231, "bbox": [191, 157, 16, 19], "iscrowd": 0}, {"id": 13303576, "category_id": 136, "area": 185, "bbox": [182, 192, 13, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00000458", "file_name": "ADE_val_00000458.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 42235, "bbox": [1, 69, 403, 261], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 20945, "bbox": [473, 78, 188, 119], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 127260, "bbox": [1, 274, 682, 238], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 53909, "bbox": [0, 0, 682, 95], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 1868, "bbox": [472, 194, 184, 17], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 428, "bbox": [471, 179, 37, 16], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3906, "bbox": [248, 91, 34, 119], "iscrowd": 0}, {"id": 16179156, "category_id": 9, "area": 25086, "bbox": [400, 71, 282, 281], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6034, "bbox": [54, 104, 89, 71], "iscrowd": 0}, {"id": 16318686, "category_id": 11, "area": 3385, "bbox": [155, 111, 58, 61], "iscrowd": 0}, {"id": 16714190, "category_id": 11, "area": 4612, "bbox": [64, 224, 213, 90], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 14570, "bbox": [281, 92, 74, 234], "iscrowd": 0}, {"id": 2752256, "category_id": 74, "area": 20903, "bbox": [97, 253, 204, 123], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 13412, "bbox": [470, 203, 185, 83], "iscrowd": 0}]}, {"image_id": "ADE_val_00000459", "file_name": "ADE_val_00000459.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 53304, "bbox": [0, 0, 753, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 127411, "bbox": [20, 294, 749, 218], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4356, "bbox": [336, 1, 65, 106], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 9963, "bbox": [65, 0, 119, 86], "iscrowd": 0}, {"id": 15340774, "category_id": 11, "area": 8567, "bbox": [430, 0, 81, 111], "iscrowd": 0}, {"id": 15407605, "category_id": 11, "area": 9084, "bbox": [508, 1, 104, 113], "iscrowd": 0}, {"id": 16711916, "category_id": 11, "area": 11399, "bbox": [604, 0, 107, 119], "iscrowd": 0}, {"id": 16718800, "category_id": 11, "area": 17585, "bbox": [188, 174, 140, 133], "iscrowd": 0}, {"id": 15073526, "category_id": 11, "area": 18870, "bbox": [327, 171, 153, 130], "iscrowd": 0}, {"id": 14883558, "category_id": 11, "area": 31949, "bbox": [477, 171, 218, 195], "iscrowd": 0}, {"id": 15672012, "category_id": 11, "area": 4970, "bbox": [184, 0, 142, 38], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 17472, "bbox": [711, 0, 57, 496], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 22196, "bbox": [1, 0, 87, 329], "iscrowd": 0}, {"id": 10982, "category_id": 19, "area": 4462, "bbox": [314, 0, 45, 125], "iscrowd": 0}, {"id": 2245631, "category_id": 19, "area": 3975, "bbox": [398, 1, 36, 126], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 12399, "bbox": [76, 196, 116, 115], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 916, "bbox": [502, 154, 99, 28], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 1584, "bbox": [190, 157, 133, 15], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 11529, "bbox": [74, 84, 114, 113], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 4051, "bbox": [184, 32, 141, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00000460", "file_name": "ADE_val_00000460.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 78043, "bbox": [0, 0, 656, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21140, "bbox": [11, 362, 496, 150], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 35141, "bbox": [67, 0, 391, 117], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2166, "bbox": [2, 286, 56, 70], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 22323, "bbox": [153, 386, 276, 125], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 22276, "bbox": [65, 144, 246, 103], "iscrowd": 0}, {"id": 14747641, "category_id": 11, "area": 6044, "bbox": [27, 299, 75, 141], "iscrowd": 0}, {"id": 16712946, "category_id": 11, "area": 5511, "bbox": [335, 105, 75, 138], "iscrowd": 0}, {"id": 15990991, "category_id": 11, "area": 6494, "bbox": [373, 74, 52, 148], "iscrowd": 0}, {"id": 14876875, "category_id": 11, "area": 7158, "bbox": [422, 50, 43, 188], "iscrowd": 0}, {"id": 16711901, "category_id": 11, "area": 15569, "bbox": [83, 288, 214, 87], "iscrowd": 0}, {"id": 16253144, "category_id": 11, "area": 3719, "bbox": [297, 295, 41, 109], "iscrowd": 0}, {"id": 16716750, "category_id": 11, "area": 12177, "bbox": [335, 310, 131, 174], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 3297, "bbox": [6, 1, 71, 114], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 5950, "bbox": [40, 375, 92, 136], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 66643, "bbox": [465, 73, 164, 438], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1706, "bbox": [34, 242, 63, 42], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 751, "bbox": [352, 289, 92, 15], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 115, "bbox": [110, 80, 17, 9], "iscrowd": 0}, {"id": 44270, "category_id": 83, "area": 104, "bbox": [189, 88, 17, 8], "iscrowd": 0}, {"id": 1559527, "category_id": 83, "area": 83, "bbox": [268, 97, 16, 6], "iscrowd": 0}, {"id": 1353727, "category_id": 83, "area": 262, "bbox": [344, 16, 26, 14], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 892, "bbox": [21, 435, 25, 49], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 4767, "bbox": [335, 302, 48, 118], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 557, "bbox": [10, 338, 23, 31], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 573, "bbox": [56, 279, 32, 26], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 383, "bbox": [96, 121, 24, 22], "iscrowd": 0}, {"id": 10223360, "category_id": 143, "area": 353, "bbox": [120, 122, 22, 22], "iscrowd": 0}, {"id": 11075338, "category_id": 143, "area": 265, "bbox": [142, 130, 20, 17], "iscrowd": 0}, {"id": 11861776, "category_id": 143, "area": 226, "bbox": [163, 131, 17, 16], "iscrowd": 0}, {"id": 12383744, "category_id": 143, "area": 212, "bbox": [180, 133, 16, 17], "iscrowd": 0}, {"id": 10482712, "category_id": 143, "area": 242, "bbox": [198, 133, 18, 17], "iscrowd": 0}, {"id": 12189454, "category_id": 143, "area": 182, "bbox": [218, 137, 17, 15], "iscrowd": 0}, {"id": 11920384, "category_id": 143, "area": 261, "bbox": [236, 134, 17, 18], "iscrowd": 0}, {"id": 11330048, "category_id": 143, "area": 227, "bbox": [254, 138, 17, 17], "iscrowd": 0}, {"id": 13238016, "category_id": 143, "area": 190, "bbox": [271, 140, 18, 14], "iscrowd": 0}, {"id": 13827843, "category_id": 143, "area": 232, "bbox": [285, 139, 19, 16], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 1362, "bbox": [24, 198, 22, 75], "iscrowd": 0}]}, {"image_id": "ADE_val_00000461", "file_name": "ADE_val_00000461.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 109526, "bbox": [0, 0, 683, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 36417, "bbox": [0, 319, 683, 193], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 19438, "bbox": [0, 0, 634, 57], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 17759, "bbox": [415, 11, 142, 143], "iscrowd": 0}, {"id": 16711883, "category_id": 11, "area": 4076, "bbox": [352, 34, 65, 71], "iscrowd": 0}, {"id": 16711896, "category_id": 11, "area": 5341, "bbox": [296, 45, 56, 107], "iscrowd": 0}, {"id": 15532235, "category_id": 11, "area": 9180, "bbox": [197, 41, 99, 112], "iscrowd": 0}, {"id": 15663355, "category_id": 11, "area": 5389, "bbox": [121, 28, 77, 79], "iscrowd": 0}, {"id": 16720373, "category_id": 11, "area": 1283, "bbox": [297, 198, 33, 44], "iscrowd": 0}, {"id": 16718567, "category_id": 11, "area": 3543, "bbox": [219, 198, 77, 57], "iscrowd": 0}, {"id": 16711910, "category_id": 11, "area": 7536, "bbox": [69, 105, 51, 217], "iscrowd": 0}, {"id": 15207649, "category_id": 11, "area": 3485, "bbox": [70, 17, 51, 88], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 27555, "bbox": [346, 281, 204, 230], "iscrowd": 0}, {"id": 1390532, "category_id": 20, "area": 12436, "bbox": [536, 246, 93, 265], "iscrowd": 0}, {"id": 25542, "category_id": 20, "area": 7659, "bbox": [550, 226, 127, 210], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6437, "bbox": [637, 29, 45, 149], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 462, "bbox": [226, 179, 32, 18], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1288, "bbox": [391, 195, 90, 45], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 16876, "bbox": [119, 104, 103, 217], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 941, "bbox": [39, 54, 28, 101], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 4141, "bbox": [330, 170, 104, 66], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1601, "bbox": [228, 18, 76, 27], "iscrowd": 0}, {"id": 44790, "category_id": 83, "area": 123, "bbox": [44, 38, 22, 7], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 127, "bbox": [306, 165, 7, 25], "iscrowd": 0}, {"id": 61952, "category_id": 99, "area": 478, "bbox": [579, 176, 15, 46], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 238, "bbox": [220, 158, 8, 39], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 3342, "bbox": [347, 102, 70, 50], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 2804, "bbox": [30, 155, 47, 80], "iscrowd": 0}, {"id": 11986176, "category_id": 136, "area": 435, "bbox": [519, 88, 21, 30], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 553, "bbox": [283, 157, 23, 32], "iscrowd": 0}, {"id": 458522, "category_id": 138, "area": 602, "bbox": [525, 163, 53, 31], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 494, "bbox": [454, 240, 63, 17], "iscrowd": 0}, {"id": 12184090, "category_id": 143, "area": 801, "bbox": [344, 267, 76, 25], "iscrowd": 0}, {"id": 11664148, "category_id": 143, "area": 285, "bbox": [533, 223, 53, 12], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 86, "bbox": [280, 173, 8, 20], "iscrowd": 0}, {"id": 14657796, "category_id": 148, "area": 236, "bbox": [478, 205, 14, 34], "iscrowd": 0}, {"id": 11905056, "category_id": 148, "area": 375, "bbox": [376, 221, 15, 44], "iscrowd": 0}, {"id": 12242712, "category_id": 148, "area": 212, "bbox": [556, 192, 12, 29], "iscrowd": 0}, {"id": 12243221, "category_id": 148, "area": 166, "bbox": [545, 192, 10, 28], "iscrowd": 0}, {"id": 12172308, "category_id": 148, "area": 160, "bbox": [509, 129, 18, 23], "iscrowd": 0}, {"id": 11065114, "category_id": 148, "area": 147, "bbox": [529, 129, 17, 23], "iscrowd": 0}, {"id": 11055366, "category_id": 148, "area": 128, "bbox": [536, 69, 10, 14], "iscrowd": 0}, {"id": 13217792, "category_id": 148, "area": 126, "bbox": [519, 70, 12, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00000462", "file_name": "ADE_val_00000462.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 22209, "bbox": [0, 25, 300, 200], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9276, "bbox": [0, 0, 299, 46], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2440, "bbox": [49, 35, 38, 69], "iscrowd": 0}, {"id": 16057291, "category_id": 11, "area": 2954, "bbox": [102, 35, 43, 71], "iscrowd": 0}, {"id": 16717803, "category_id": 11, "area": 2280, "bbox": [145, 29, 49, 50], "iscrowd": 0}, {"id": 16711929, "category_id": 11, "area": 7254, "bbox": [194, 21, 78, 97], "iscrowd": 0}, {"id": 14811900, "category_id": 11, "area": 4555, "bbox": [172, 174, 100, 51], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1916, "bbox": [287, 74, 13, 149], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 1980, "bbox": [133, 171, 39, 54], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 323, "bbox": [220, 147, 44, 30], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 4477, "bbox": [50, 104, 38, 121], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 103, "bbox": [183, 9, 16, 8], "iscrowd": 0}, {"id": 1422587, "category_id": 83, "area": 47, "bbox": [75, 27, 9, 6], "iscrowd": 0}, {"id": 16711864, "category_id": 108, "area": 2537, "bbox": [88, 167, 45, 58], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 1867, "bbox": [144, 78, 50, 38], "iscrowd": 0}]}, {"image_id": "ADE_val_00000463", "file_name": "ADE_val_00000463.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 111885, "bbox": [0, 0, 767, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 384, "bbox": [355, 340, 54, 12], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 30167, "bbox": [293, 0, 474, 191], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 775, "bbox": [341, 210, 17, 47], "iscrowd": 0}, {"id": 16257014, "category_id": 11, "area": 1625, "bbox": [341, 284, 28, 64], "iscrowd": 0}, {"id": 16713667, "category_id": 11, "area": 19090, "bbox": [416, 150, 245, 109], "iscrowd": 0}, {"id": 15664381, "category_id": 11, "area": 6795, "bbox": [651, 112, 82, 145], "iscrowd": 0}, {"id": 16129498, "category_id": 11, "area": 8039, "bbox": [713, 92, 54, 168], "iscrowd": 0}, {"id": 16713687, "category_id": 11, "area": 3337, "bbox": [409, 304, 65, 57], "iscrowd": 0}, {"id": 15795920, "category_id": 11, "area": 5609, "bbox": [474, 307, 101, 64], "iscrowd": 0}, {"id": 16711900, "category_id": 11, "area": 5930, "bbox": [575, 311, 97, 71], "iscrowd": 0}, {"id": 16711882, "category_id": 11, "area": 1311, "bbox": [701, 342, 57, 48], "iscrowd": 0}, {"id": 15143409, "category_id": 11, "area": 2116, "bbox": [310, 181, 15, 163], "iscrowd": 0}, {"id": 16711909, "category_id": 11, "area": 11081, "bbox": [146, 148, 164, 159], "iscrowd": 0}, {"id": 15930057, "category_id": 11, "area": 13607, "bbox": [38, 127, 131, 131], "iscrowd": 0}, {"id": 16646596, "category_id": 11, "area": 9711, "bbox": [27, 312, 168, 107], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4233, "bbox": [377, 206, 37, 137], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 10741, "bbox": [154, 466, 256, 45], "iscrowd": 0}, {"id": 13290, "category_id": 20, "area": 14885, "bbox": [1, 411, 169, 100], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 517, "bbox": [46, 229, 25, 26], "iscrowd": 0}, {"id": 2884345, "category_id": 23, "area": 309, "bbox": [53, 192, 21, 22], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 386, "bbox": [733, 342, 33, 24], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 6391, "bbox": [256, 221, 56, 122], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 3242, "bbox": [52, 25, 106, 65], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 769, "bbox": [478, 295, 100, 12], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 24, "bbox": [341, 179, 8, 4], "iscrowd": 0}, {"id": 37094, "category_id": 83, "area": 117, "bbox": [611, 72, 16, 10], "iscrowd": 0}, {"id": 1819374, "category_id": 83, "area": 138, "bbox": [520, 46, 16, 11], "iscrowd": 0}, {"id": 44287, "category_id": 83, "area": 236, "bbox": [436, 7, 23, 14], "iscrowd": 0}, {"id": 43263, "category_id": 83, "area": 85, "bbox": [396, 12, 11, 9], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 381, "bbox": [608, 106, 13, 46], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 4031, "bbox": [193, 278, 64, 74], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 3853, "bbox": [192, 217, 65, 62], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 1472, "bbox": [671, 319, 28, 65], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 2412, "bbox": [476, 211, 100, 26], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 1353, "bbox": [99, 85, 28, 54], "iscrowd": 0}, {"id": 11599646, "category_id": 136, "area": 589, "bbox": [53, 146, 24, 30], "iscrowd": 0}, {"id": 15264789, "category_id": 136, "area": 345, "bbox": [65, 329, 23, 25], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 3811, "bbox": [234, 108, 78, 66], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 126, "bbox": [669, 168, 8, 23], "iscrowd": 0}, {"id": 13487407, "category_id": 148, "area": 135, "bbox": [678, 167, 9, 24], "iscrowd": 0}, {"id": 11777804, "category_id": 148, "area": 125, "bbox": [671, 200, 9, 22], "iscrowd": 0}, {"id": 14275848, "category_id": 148, "area": 145, "bbox": [682, 198, 10, 22], "iscrowd": 0}, {"id": 12836650, "category_id": 148, "area": 125, "bbox": [679, 144, 9, 16], "iscrowd": 0}, {"id": 12495914, "category_id": 148, "area": 144, "bbox": [669, 145, 9, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00000464", "file_name": "ADE_val_00000464.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 40377, "bbox": [0, 0, 396, 399], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2655, "bbox": [108, 394, 155, 85], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 6092, "bbox": [131, 391, 132, 89], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12748, "bbox": [84, 48, 73, 187], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 26001, "bbox": [240, 1, 156, 208], "iscrowd": 0}, {"id": 15734005, "category_id": 11, "area": 4258, "bbox": [0, 432, 117, 47], "iscrowd": 0}, {"id": 16711874, "category_id": 11, "area": 3497, "bbox": [184, 0, 58, 64], "iscrowd": 0}, {"id": 16714957, "category_id": 11, "area": 4719, "bbox": [241, 0, 147, 63], "iscrowd": 0}, {"id": 16253132, "category_id": 11, "area": 63225, "bbox": [393, 0, 246, 479], "iscrowd": 0}, {"id": 16711926, "category_id": 11, "area": 14735, "bbox": [158, 272, 153, 207], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 20104, "bbox": [1, 30, 77, 324], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 6449, "bbox": [184, 59, 57, 143], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 3772, "bbox": [174, 280, 35, 132], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2541, "bbox": [232, 219, 135, 91], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 1846, "bbox": [246, 318, 35, 73], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 95, "bbox": [206, 113, 9, 15], "iscrowd": 0}, {"id": 851719, "category_id": 99, "area": 41, "bbox": [198, 115, 5, 13], "iscrowd": 0}, {"id": 16711864, "category_id": 108, "area": 10455, "bbox": [308, 338, 88, 142], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 46825, "bbox": [395, 82, 149, 398], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 1287, "bbox": [187, 122, 60, 38], "iscrowd": 0}]}, {"image_id": "ADE_val_00000465", "file_name": "ADE_val_00000465.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 40958, "bbox": [0, 0, 491, 571], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 30429, "bbox": [97, 459, 392, 112], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 8341, "bbox": [189, 1, 300, 48], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6879, "bbox": [37, 38, 39, 206], "iscrowd": 0}, {"id": 16711912, "category_id": 11, "area": 17970, "bbox": [168, 26, 99, 202], "iscrowd": 0}, {"id": 16719097, "category_id": 11, "area": 18713, "bbox": [264, 41, 124, 181], "iscrowd": 0}, {"id": 16715489, "category_id": 11, "area": 3517, "bbox": [362, 31, 128, 130], "iscrowd": 0}, {"id": 16711888, "category_id": 11, "area": 8737, "bbox": [291, 312, 64, 153], "iscrowd": 0}, {"id": 16711896, "category_id": 11, "area": 21085, "bbox": [354, 315, 137, 167], "iscrowd": 0}, {"id": 14818001, "category_id": 11, "area": 30284, "bbox": [46, 57, 443, 514], "iscrowd": 0}, {"id": 15597786, "category_id": 11, "area": 11595, "bbox": [68, 29, 106, 122], "iscrowd": 0}, {"id": 16714463, "category_id": 11, "area": 9377, "bbox": [230, 313, 65, 175], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1747, "bbox": [363, 270, 128, 41], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 19915, "bbox": [44, 310, 193, 232], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 8371, "bbox": [77, 149, 97, 93], "iscrowd": 0}]}, {"image_id": "ADE_val_00000466", "file_name": "ADE_val_00000466.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 23568, "bbox": [0, 55, 559, 308], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 80661, "bbox": [0, 0, 766, 150], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 28031, "bbox": [57, 74, 112, 279], "iscrowd": 0}, {"id": 15999435, "category_id": 11, "area": 8821, "bbox": [168, 126, 100, 105], "iscrowd": 0}, {"id": 16719849, "category_id": 11, "area": 5837, "bbox": [235, 150, 84, 102], "iscrowd": 0}, {"id": 16712440, "category_id": 11, "area": 10942, "bbox": [319, 138, 126, 112], "iscrowd": 0}, {"id": 16711925, "category_id": 11, "area": 8340, "bbox": [423, 121, 138, 122], "iscrowd": 0}, {"id": 16711881, "category_id": 11, "area": 10662, "bbox": [555, 88, 194, 74], "iscrowd": 0}, {"id": 15733735, "category_id": 11, "area": 2523, "bbox": [520, 296, 40, 71], "iscrowd": 0}, {"id": 15013359, "category_id": 11, "area": 4980, "bbox": [749, 85, 18, 298], "iscrowd": 0}, {"id": 15073520, "category_id": 11, "area": 3656, "bbox": [331, 303, 78, 53], "iscrowd": 0}, {"id": 15925492, "category_id": 11, "area": 2111, "bbox": [282, 304, 50, 46], "iscrowd": 0}, {"id": 16711918, "category_id": 11, "area": 3351, "bbox": [167, 306, 116, 40], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 5411, "bbox": [2, 93, 39, 157], "iscrowd": 0}, {"id": 3282431, "category_id": 23, "area": 589, "bbox": [316, 264, 21, 29], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 20990, "bbox": [336, 307, 396, 134], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 41230, "bbox": [560, 150, 192, 229], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 491, "bbox": [224, 238, 24, 27], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 5631, "bbox": [405, 296, 130, 68], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 105, "bbox": [239, 119, 16, 8], "iscrowd": 0}, {"id": 1355771, "category_id": 83, "area": 59, "bbox": [348, 130, 13, 6], "iscrowd": 0}, {"id": 888831, "category_id": 83, "area": 94, "bbox": [451, 118, 15, 7], "iscrowd": 0}, {"id": 52212, "category_id": 83, "area": 3547, "bbox": [260, 20, 83, 65], "iscrowd": 0}, {"id": 48383, "category_id": 83, "area": 2799, "bbox": [579, 0, 111, 35], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 756, "bbox": [170, 247, 34, 33], "iscrowd": 0}, {"id": 62814, "category_id": 113, "area": 931, "bbox": [169, 270, 44, 34], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 6718, "bbox": [423, 173, 108, 67], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 273, "bbox": [228, 264, 17, 35], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 2643, "bbox": [461, 251, 61, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00000467", "file_name": "ADE_val_00000467.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 69020, "bbox": [1, 116, 681, 257], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 346, "bbox": [339, 1, 76, 8], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 15562, "bbox": [7, 357, 121, 154], "iscrowd": 0}, {"id": 16122094, "category_id": 11, "area": 35390, "bbox": [379, 1, 203, 218], "iscrowd": 0}, {"id": 16711915, "category_id": 11, "area": 25499, "bbox": [224, 0, 156, 210], "iscrowd": 0}, {"id": 15139059, "category_id": 11, "area": 18861, "bbox": [92, 0, 175, 113], "iscrowd": 0}, {"id": 16715515, "category_id": 11, "area": 18937, "bbox": [1, 1, 92, 211], "iscrowd": 0}, {"id": 16711931, "category_id": 11, "area": 19064, "bbox": [520, 0, 163, 124], "iscrowd": 0}, {"id": 15663313, "category_id": 11, "area": 16581, "bbox": [439, 387, 181, 125], "iscrowd": 0}, {"id": 16711910, "category_id": 11, "area": 10926, "bbox": [359, 359, 85, 152], "iscrowd": 0}, {"id": 14881534, "category_id": 11, "area": 6602, "bbox": [315, 358, 46, 154], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 8648, "bbox": [469, 319, 214, 102], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 49512, "bbox": [73, 240, 243, 271], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 2594, "bbox": [20, 344, 80, 40], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 9800, "bbox": [315, 242, 127, 88], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 3359, "bbox": [616, 446, 66, 65], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 8361, "bbox": [91, 106, 171, 55], "iscrowd": 0}]}, {"image_id": "ADE_val_00000468", "file_name": "ADE_val_00000468.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 119594, "bbox": [0, 0, 767, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 46716, "bbox": [1, 374, 644, 137], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4521, "bbox": [96, 0, 267, 18], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 17537, "bbox": [418, 72, 127, 144], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3679, "bbox": [76, 0, 44, 93], "iscrowd": 0}, {"id": 14753011, "category_id": 11, "area": 10119, "bbox": [119, 27, 102, 125], "iscrowd": 0}, {"id": 16712142, "category_id": 11, "area": 8781, "bbox": [211, 32, 124, 73], "iscrowd": 0}, {"id": 16713202, "category_id": 11, "area": 8269, "bbox": [333, 32, 88, 123], "iscrowd": 0}, {"id": 16449780, "category_id": 11, "area": 20222, "bbox": [362, 0, 284, 72], "iscrowd": 0}, {"id": 16715208, "category_id": 11, "area": 779, "bbox": [319, 243, 138, 11], "iscrowd": 0}, {"id": 16254410, "category_id": 11, "area": 7220, "bbox": [145, 242, 57, 132], "iscrowd": 0}, {"id": 16711930, "category_id": 11, "area": 61578, "bbox": [304, 277, 331, 205], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 22924, "bbox": [623, 0, 71, 511], "iscrowd": 0}, {"id": 2948886, "category_id": 15, "area": 2107, "bbox": [753, 229, 14, 282], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1149, "bbox": [408, 222, 143, 23], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 20758, "bbox": [76, 85, 70, 342], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 10810, "bbox": [201, 225, 133, 107], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 3107, "bbox": [216, 105, 118, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00000469", "file_name": "ADE_val_00000469.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 38496, "bbox": [98, 2, 585, 280], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1998, "bbox": [286, 1, 213, 23], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 23799, "bbox": [74, 119, 212, 207], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 27355, "bbox": [1, 336, 231, 176], "iscrowd": 0}, {"id": 16456431, "category_id": 11, "area": 5011, "bbox": [336, 286, 92, 105], "iscrowd": 0}, {"id": 16719562, "category_id": 11, "area": 40572, "bbox": [301, 5, 212, 270], "iscrowd": 0}, {"id": 16059897, "category_id": 11, "area": 3509, "bbox": [427, 286, 71, 66], "iscrowd": 0}, {"id": 16716755, "category_id": 11, "area": 4790, "bbox": [231, 356, 110, 81], "iscrowd": 0}, {"id": 16058582, "category_id": 11, "area": 22725, "bbox": [0, 1, 109, 258], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 7602, "bbox": [98, 81, 195, 63], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 6672, "bbox": [190, 286, 149, 101], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 3830, "bbox": [155, 149, 56, 121], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 7886, "bbox": [495, 268, 174, 62], "iscrowd": 0}, {"id": 2752256, "category_id": 74, "area": 36929, "bbox": [81, 320, 602, 192], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 978, "bbox": [28, 265, 21, 69], "iscrowd": 0}, {"id": 982784, "category_id": 99, "area": 448, "bbox": [63, 286, 14, 44], "iscrowd": 0}, {"id": 982528, "category_id": 99, "area": 1550, "bbox": [362, 309, 27, 110], "iscrowd": 0}, {"id": 65280, "category_id": 99, "area": 484, "bbox": [338, 227, 13, 53], "iscrowd": 0}, {"id": 2486277, "category_id": 99, "area": 299, "bbox": [352, 224, 13, 41], "iscrowd": 0}, {"id": 64515, "category_id": 99, "area": 495, "bbox": [367, 243, 19, 37], "iscrowd": 0}, {"id": 2555648, "category_id": 99, "area": 331, "bbox": [350, 258, 20, 26], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 9133, "bbox": [486, 354, 120, 98], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 631, "bbox": [35, 327, 91, 14], "iscrowd": 0}, {"id": 60133, "category_id": 121, "area": 1628, "bbox": [179, 436, 40, 55], "iscrowd": 0}, {"id": 56563, "category_id": 121, "area": 1683, "bbox": [216, 458, 44, 46], "iscrowd": 0}, {"id": 580087, "category_id": 121, "area": 4892, "bbox": [228, 414, 107, 74], "iscrowd": 0}, {"id": 57855, "category_id": 121, "area": 924, "bbox": [2, 336, 88, 15], "iscrowd": 0}, {"id": 114943, "category_id": 121, "area": 1799, "bbox": [389, 357, 103, 28], "iscrowd": 0}, {"id": 911871, "category_id": 121, "area": 2623, "bbox": [487, 432, 54, 64], "iscrowd": 0}, {"id": 51199, "category_id": 121, "area": 2496, "bbox": [410, 430, 72, 62], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 34999, "bbox": [465, 1, 218, 187], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 717, "bbox": [167, 264, 31, 34], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 3513, "bbox": [389, 434, 165, 66], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 1165, "bbox": [373, 369, 30, 74], "iscrowd": 0}, {"id": 12238616, "category_id": 148, "area": 1301, "bbox": [398, 361, 32, 70], "iscrowd": 0}]}, {"image_id": "ADE_val_00000470", "file_name": "ADE_val_00000470.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 179852, "bbox": [1, 0, 682, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21252, "bbox": [273, 401, 231, 110], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 12417, "bbox": [283, 45, 151, 85], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 22319, "bbox": [281, 45, 155, 231], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 11362, "bbox": [495, 15, 113, 171], "iscrowd": 0}, {"id": 16711875, "category_id": 11, "area": 13395, "bbox": [484, 307, 96, 204], "iscrowd": 0}, {"id": 16580855, "category_id": 11, "area": 26753, "bbox": [40, 281, 246, 230], "iscrowd": 0}, {"id": 16711912, "category_id": 11, "area": 2779, "bbox": [436, 259, 26, 164], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2952, "bbox": [150, 233, 118, 58], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 7273, "bbox": [454, 267, 136, 208], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 618, "bbox": [332, 1, 60, 16], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 250, "bbox": [544, 235, 14, 25], "iscrowd": 0}, {"id": 64001, "category_id": 99, "area": 458, "bbox": [125, 223, 22, 68], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 2900, "bbox": [490, 111, 81, 44], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 267, "bbox": [181, 207, 12, 31], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 454, "bbox": [173, 273, 19, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00000471", "file_name": "ADE_val_00000471.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 83951, "bbox": [1, 1, 766, 299], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 23694, "bbox": [1, 418, 766, 93], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 28080, "bbox": [0, 0, 656, 77], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6834, "bbox": [316, 100, 104, 129], "iscrowd": 0}, {"id": 15335672, "category_id": 11, "area": 14860, "bbox": [420, 80, 122, 146], "iscrowd": 0}, {"id": 16716280, "category_id": 11, "area": 12580, "bbox": [690, 40, 77, 171], "iscrowd": 0}, {"id": 15537620, "category_id": 11, "area": 382, "bbox": [290, 280, 24, 20], "iscrowd": 0}, {"id": 16326130, "category_id": 11, "area": 398, "bbox": [400, 291, 27, 16], "iscrowd": 0}, {"id": 16711934, "category_id": 11, "area": 37460, "bbox": [517, 295, 250, 183], "iscrowd": 0}, {"id": 16717049, "category_id": 11, "area": 2812, "bbox": [135, 281, 96, 98], "iscrowd": 0}, {"id": 14943194, "category_id": 11, "area": 9399, "bbox": [109, 97, 96, 132], "iscrowd": 0}, {"id": 16719570, "category_id": 11, "area": 7237, "bbox": [0, 67, 109, 90], "iscrowd": 0}, {"id": 16716763, "category_id": 11, "area": 20690, "bbox": [529, 52, 161, 150], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1180, "bbox": [180, 0, 30, 115], "iscrowd": 0}, {"id": 1966061, "category_id": 37, "area": 1648, "bbox": [368, 0, 39, 68], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1150, "bbox": [541, 257, 133, 35], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 34504, "bbox": [1, 139, 141, 317], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 4441, "bbox": [311, 246, 125, 60], "iscrowd": 0}, {"id": 2752256, "category_id": 74, "area": 65603, "bbox": [138, 299, 403, 212], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 8031, "bbox": [49, 368, 150, 143], "iscrowd": 0}, {"id": 16773652, "category_id": 111, "area": 8304, "bbox": [181, 425, 189, 85], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 4781, "bbox": [334, 160, 86, 63], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 1408, "bbox": [428, 293, 89, 19], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 322, "bbox": [688, 284, 43, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00000472", "file_name": "ADE_val_00000472.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 44497, "bbox": [2, 1, 665, 260], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 13098, "bbox": [0, 240, 659, 271], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 15616, "bbox": [137, 0, 546, 64], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3080, "bbox": [482, 105, 46, 92], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 11435, "bbox": [509, 89, 150, 119], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 5225, "bbox": [305, 205, 75, 79], "iscrowd": 0}, {"id": 16711933, "category_id": 11, "area": 3213, "bbox": [306, 27, 60, 60], "iscrowd": 0}, {"id": 16715476, "category_id": 11, "area": 3415, "bbox": [383, 30, 43, 87], "iscrowd": 0}, {"id": 15146442, "category_id": 11, "area": 2850, "bbox": [648, 287, 35, 90], "iscrowd": 0}, {"id": 16711928, "category_id": 11, "area": 2682, "bbox": [648, 15, 35, 155], "iscrowd": 0}, {"id": 16715751, "category_id": 11, "area": 8834, "bbox": [0, 265, 82, 188], "iscrowd": 0}, {"id": 16711874, "category_id": 11, "area": 22781, "bbox": [0, 0, 160, 163], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2329, "bbox": [657, 90, 24, 170], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3232, "bbox": [482, 204, 145, 108], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1528, "bbox": [575, 203, 79, 101], "iscrowd": 0}, {"id": 15313, "category_id": 20, "area": 4041, "bbox": [538, 223, 87, 106], "iscrowd": 0}, {"id": 1725925, "category_id": 20, "area": 1614, "bbox": [464, 204, 60, 83], "iscrowd": 0}, {"id": 741349, "category_id": 20, "area": 406, "bbox": [491, 192, 42, 14], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 8075, "bbox": [84, 246, 104, 103], "iscrowd": 0}, {"id": 65283, "category_id": 51, "area": 27106, "bbox": [193, 33, 113, 284], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1479, "bbox": [527, 157, 55, 39], "iscrowd": 0}, {"id": 1704181, "category_id": 67, "area": 1670, "bbox": [584, 160, 57, 41], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 188, "bbox": [358, 108, 7, 33], "iscrowd": 0}, {"id": 47871, "category_id": 68, "area": 1657, "bbox": [1, 191, 44, 47], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 18990, "bbox": [297, 300, 356, 153], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 123, "bbox": [329, 3, 21, 7], "iscrowd": 0}, {"id": 49151, "category_id": 83, "area": 58, "bbox": [407, 21, 16, 4], "iscrowd": 0}, {"id": 571366, "category_id": 83, "area": 116, "bbox": [500, 5, 23, 7], "iscrowd": 0}, {"id": 372223, "category_id": 83, "area": 58, "bbox": [478, 46, 16, 6], "iscrowd": 0}, {"id": 891135, "category_id": 83, "area": 35, "bbox": [563, 39, 14, 3], "iscrowd": 0}, {"id": 575231, "category_id": 83, "area": 25, "bbox": [595, 49, 10, 3], "iscrowd": 0}, {"id": 1875169, "category_id": 83, "area": 36, "bbox": [518, 54, 12, 4], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 517, "bbox": [73, 187, 16, 44], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 5231, "bbox": [4, 425, 101, 87], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 3543, "bbox": [381, 119, 47, 86], "iscrowd": 0}, {"id": 458581, "category_id": 119, "area": 2773, "bbox": [380, 200, 49, 75], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 166, "bbox": [48, 231, 20, 12], "iscrowd": 0}, {"id": 55542, "category_id": 121, "area": 889, "bbox": [250, 280, 59, 34], "iscrowd": 0}, {"id": 1754105, "category_id": 121, "area": 555, "bbox": [267, 472, 25, 27], "iscrowd": 0}, {"id": 1305087, "category_id": 121, "area": 1394, "bbox": [224, 287, 66, 29], "iscrowd": 0}, {"id": 55281, "category_id": 121, "area": 183, "bbox": [116, 398, 16, 13], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 2176, "bbox": [306, 96, 51, 46], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 181, "bbox": [547, 184, 14, 32], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1006, "bbox": [305, 162, 39, 37], "iscrowd": 0}, {"id": 60437, "category_id": 138, "area": 897, "bbox": [62, 221, 81, 19], "iscrowd": 0}, {"id": 60476, "category_id": 138, "area": 888, "bbox": [11, 10, 38, 31], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 6335, "bbox": [205, 437, 163, 75], "iscrowd": 0}, {"id": 13041417, "category_id": 143, "area": 825, "bbox": [0, 58, 34, 31], "iscrowd": 0}, {"id": 10940954, "category_id": 143, "area": 396, "bbox": [546, 211, 50, 17], "iscrowd": 0}, {"id": 12254224, "category_id": 143, "area": 235, "bbox": [522, 199, 24, 15], "iscrowd": 0}, {"id": 13427712, "category_id": 143, "area": 404, "bbox": [581, 208, 45, 15], "iscrowd": 0}, {"id": 12382464, "category_id": 143, "area": 48, "bbox": [496, 211, 23, 3], "iscrowd": 0}, {"id": 11075355, "category_id": 143, "area": 116, "bbox": [489, 210, 34, 7], "iscrowd": 0}, {"id": 12517120, "category_id": 143, "area": 2506, "bbox": [100, 372, 90, 47], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 77, "bbox": [92, 191, 15, 15], "iscrowd": 0}, {"id": 14199088, "category_id": 148, "area": 173, "bbox": [546, 197, 11, 23], "iscrowd": 0}, {"id": 13879566, "category_id": 148, "area": 308, "bbox": [26, 107, 12, 36], "iscrowd": 0}, {"id": 13943043, "category_id": 148, "area": 299, "bbox": [2, 106, 10, 37], "iscrowd": 0}, {"id": 11654176, "category_id": 148, "area": 319, "bbox": [122, 194, 15, 38], "iscrowd": 0}, {"id": 11391792, "category_id": 148, "area": 256, "bbox": [112, 191, 13, 41], "iscrowd": 0}, {"id": 12362760, "category_id": 148, "area": 290, "bbox": [97, 194, 14, 39], "iscrowd": 0}, {"id": 12826626, "category_id": 148, "area": 75, "bbox": [514, 193, 10, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00000473", "file_name": "ADE_val_00000473.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 58918, "bbox": [0, 0, 739, 417], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 20173, "bbox": [1, 416, 737, 95], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 10997, "bbox": [181, 1, 441, 37], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4461, "bbox": [12, 13, 639, 96], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 19841, "bbox": [293, 123, 145, 143], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7142, "bbox": [222, 88, 75, 142], "iscrowd": 0}, {"id": 16718053, "category_id": 11, "area": 14029, "bbox": [5, 56, 103, 179], "iscrowd": 0}, {"id": 15204602, "category_id": 11, "area": 8652, "bbox": [434, 82, 98, 150], "iscrowd": 0}, {"id": 16715507, "category_id": 11, "area": 34192, "bbox": [517, 26, 222, 412], "iscrowd": 0}, {"id": 16718819, "category_id": 11, "area": 9970, "bbox": [13, 298, 115, 133], "iscrowd": 0}, {"id": 16711910, "category_id": 11, "area": 686, "bbox": [260, 285, 39, 21], "iscrowd": 0}, {"id": 16714708, "category_id": 11, "area": 3166, "bbox": [298, 282, 165, 25], "iscrowd": 0}, {"id": 16711886, "category_id": 11, "area": 67359, "bbox": [97, 348, 540, 163], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1295, "bbox": [207, 1, 29, 115], "iscrowd": 0}, {"id": 655329, "category_id": 37, "area": 1269, "bbox": [353, 1, 29, 109], "iscrowd": 0}, {"id": 59334, "category_id": 37, "area": 1237, "bbox": [502, 0, 28, 118], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1559, "bbox": [294, 254, 148, 63], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 33296, "bbox": [533, 128, 157, 307], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 217, "bbox": [61, 266, 23, 14], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 4524, "bbox": [94, 274, 167, 42], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 39, "bbox": [361, 31, 14, 4], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 242, "bbox": [425, 237, 10, 37], "iscrowd": 0}, {"id": 1371392, "category_id": 99, "area": 179, "bbox": [294, 236, 8, 37], "iscrowd": 0}, {"id": 1834763, "category_id": 99, "area": 366, "bbox": [435, 232, 14, 42], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 4844, "bbox": [400, 425, 112, 86], "iscrowd": 0}, {"id": 16768798, "category_id": 111, "area": 5561, "bbox": [191, 418, 113, 93], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 3554, "bbox": [468, 173, 64, 60], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 1240, "bbox": [463, 286, 70, 23], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 22440, "bbox": [89, 1, 169, 189], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 150, "bbox": [67, 276, 14, 14], "iscrowd": 0}, {"id": 12844288, "category_id": 136, "area": 212, "bbox": [360, 250, 15, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00000474", "file_name": "ADE_val_00000474.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 132325, "bbox": [0, 0, 510, 682], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 38254, "bbox": [1, 480, 458, 202], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 27510, "bbox": [0, 0, 511, 164], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 2248, "bbox": [86, 216, 91, 32], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 26013, "bbox": [93, 201, 193, 191], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6568, "bbox": [8, 281, 84, 101], "iscrowd": 0}, {"id": 15073501, "category_id": 11, "area": 14014, "bbox": [0, 381, 137, 165], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 14344, "bbox": [470, 247, 41, 435], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2327, "bbox": [65, 378, 137, 39], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 45344, "bbox": [194, 412, 231, 270], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 63, "bbox": [132, 113, 11, 7], "iscrowd": 0}, {"id": 1021183, "category_id": 83, "area": 110, "bbox": [50, 31, 16, 9], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 1534, "bbox": [1, 281, 33, 57], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 2672, "bbox": [6, 242, 72, 39], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 9368, "bbox": [134, 426, 77, 184], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 17505, "bbox": [214, 95, 216, 213], "iscrowd": 0}]}, {"image_id": "ADE_val_00000475", "file_name": "ADE_val_00000475.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 56356, "bbox": [0, 0, 682, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 61946, "bbox": [117, 324, 551, 187], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1117, "bbox": [253, 0, 398, 8], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 13263, "bbox": [58, 259, 140, 136], "iscrowd": 0}, {"id": 16711925, "category_id": 11, "area": 23468, "bbox": [291, 256, 184, 135], "iscrowd": 0}, {"id": 15663313, "category_id": 11, "area": 17591, "bbox": [464, 0, 181, 114], "iscrowd": 0}, {"id": 14754502, "category_id": 11, "area": 10251, "bbox": [397, 6, 73, 175], "iscrowd": 0}, {"id": 16714493, "category_id": 11, "area": 17207, "bbox": [289, 1, 122, 152], "iscrowd": 0}, {"id": 15471851, "category_id": 11, "area": 17844, "bbox": [188, 0, 101, 181], "iscrowd": 0}, {"id": 15407067, "category_id": 11, "area": 13943, "bbox": [48, 0, 141, 107], "iscrowd": 0}, {"id": 16711905, "category_id": 11, "area": 8262, "bbox": [54, 338, 70, 173], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4220, "bbox": [25, 76, 35, 225], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6561, "bbox": [592, 352, 78, 159], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1047, "bbox": [307, 203, 85, 46], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 41817, "bbox": [451, 110, 178, 283], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 2113, "bbox": [66, 232, 132, 20], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 13284, "bbox": [0, 249, 69, 262], "iscrowd": 0}, {"id": 63067, "category_id": 119, "area": 3605, "bbox": [0, 151, 39, 114], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 8729, "bbox": [63, 107, 129, 72], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 12641, "bbox": [192, 257, 99, 133], "iscrowd": 0}]}, {"image_id": "ADE_val_00000476", "file_name": "ADE_val_00000476.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 38811, "bbox": [2, 1, 510, 353], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3661, "bbox": [2, 1, 228, 26], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 13055, "bbox": [7, 43, 115, 138], "iscrowd": 0}, {"id": 16714451, "category_id": 11, "area": 10659, "bbox": [119, 42, 86, 137], "iscrowd": 0}, {"id": 16646351, "category_id": 11, "area": 9839, "bbox": [206, 22, 129, 90], "iscrowd": 0}, {"id": 16711881, "category_id": 11, "area": 24798, "bbox": [334, 4, 152, 182], "iscrowd": 0}, {"id": 16516037, "category_id": 11, "area": 4246, "bbox": [478, 1, 32, 148], "iscrowd": 0}, {"id": 15007969, "category_id": 11, "area": 6944, "bbox": [447, 314, 63, 116], "iscrowd": 0}, {"id": 14811343, "category_id": 11, "area": 6530, "bbox": [39, 270, 82, 92], "iscrowd": 0}, {"id": 16718019, "category_id": 11, "area": 5232, "bbox": [300, 296, 47, 120], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 4139, "bbox": [121, 275, 46, 98], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 18265, "bbox": [2, 344, 395, 86], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 661, "bbox": [476, 278, 34, 33], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 3226, "bbox": [16, 129, 24, 216], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 22079, "bbox": [166, 214, 186, 192], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 10434, "bbox": [199, 108, 137, 82], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 12003, "bbox": [348, 302, 103, 129], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1954, "bbox": [123, 188, 50, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00000477", "file_name": "ADE_val_00000477.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 40271, "bbox": [2, 8, 510, 352], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 26100, "bbox": [15, 246, 497, 115], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 33918, "bbox": [3, 1, 507, 94], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 5109, "bbox": [76, 292, 383, 57], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2842, "bbox": [337, 87, 33, 92], "iscrowd": 0}, {"id": 16383964, "category_id": 9, "area": 5327, "bbox": [62, 93, 69, 97], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 5949, "bbox": [206, 77, 116, 71], "iscrowd": 0}, {"id": 15664374, "category_id": 11, "area": 6073, "bbox": [20, 181, 98, 74], "iscrowd": 0}, {"id": 16716512, "category_id": 11, "area": 719, "bbox": [17, 161, 36, 21], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 16595, "bbox": [418, 57, 88, 249], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3489, "bbox": [457, 254, 53, 102], "iscrowd": 0}, {"id": 5374207, "category_id": 16, "area": 7295, "bbox": [193, 213, 166, 125], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 466, "bbox": [148, 108, 18, 26], "iscrowd": 0}, {"id": 3014889, "category_id": 23, "area": 465, "bbox": [148, 140, 18, 26], "iscrowd": 0}, {"id": 4391167, "category_id": 23, "area": 574, "bbox": [16, 106, 22, 29], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 2574, "bbox": [186, 135, 56, 65], "iscrowd": 0}, {"id": 2752256, "category_id": 74, "area": 15642, "bbox": [144, 191, 200, 137], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 265, "bbox": [108, 70, 26, 12], "iscrowd": 0}, {"id": 1022179, "category_id": 83, "area": 55, "bbox": [184, 55, 16, 4], "iscrowd": 0}, {"id": 375783, "category_id": 83, "area": 37, "bbox": [324, 68, 14, 4], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 651, "bbox": [113, 218, 33, 31], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 834, "bbox": [219, 163, 42, 21], "iscrowd": 0}, {"id": 16122111, "category_id": 125, "area": 555, "bbox": [55, 164, 35, 18], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 526, "bbox": [240, 113, 42, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00000478", "file_name": "ADE_val_00000478.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 16347, "bbox": [2, 1, 221, 293], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14085, "bbox": [64, 152, 160, 148], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1644, "bbox": [102, 1, 113, 18], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 494, "bbox": [138, 153, 35, 18], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2708, "bbox": [144, 43, 48, 59], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 4051, "bbox": [64, 14, 66, 75], "iscrowd": 0}, {"id": 16715726, "category_id": 11, "area": 819, "bbox": [65, 146, 49, 72], "iscrowd": 0}, {"id": 15733956, "category_id": 11, "area": 2602, "bbox": [73, 103, 74, 96], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 677, "bbox": [2, 56, 17, 46], "iscrowd": 0}, {"id": 1839859, "category_id": 23, "area": 835, "bbox": [6, 125, 30, 51], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 14764, "bbox": [0, 17, 69, 283], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 4771, "bbox": [61, 157, 50, 143], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 44, "bbox": [158, 9, 9, 5], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 666, "bbox": [162, 117, 22, 41], "iscrowd": 0}]}, {"image_id": "ADE_val_00000479", "file_name": "ADE_val_00000479.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 59586, "bbox": [0, 1, 613, 364], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 61207, "bbox": [147, 0, 402, 157], "iscrowd": 0}, {"id": 15665350, "category_id": 11, "area": 17175, "bbox": [0, 0, 155, 161], "iscrowd": 0}, {"id": 15540179, "category_id": 11, "area": 33177, "bbox": [249, 400, 314, 111], "iscrowd": 0}, {"id": 16711903, "category_id": 11, "area": 2369, "bbox": [197, 429, 58, 81], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 6050, "bbox": [407, 255, 100, 89], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 64677, "bbox": [542, 1, 140, 511], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 21283, "bbox": [2, 382, 212, 130], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 10117, "bbox": [0, 86, 133, 115], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 2582, "bbox": [173, 320, 90, 39], "iscrowd": 0}]}, {"image_id": "ADE_val_00000480", "file_name": "ADE_val_00000480.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 100546, "bbox": [0, 0, 768, 414], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 27901, "bbox": [134, 384, 317, 128], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 43931, "bbox": [0, 0, 498, 127], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7248, "bbox": [355, 99, 75, 133], "iscrowd": 0}, {"id": 15207900, "category_id": 11, "area": 17805, "bbox": [420, 0, 348, 221], "iscrowd": 0}, {"id": 16711885, "category_id": 11, "area": 43236, "bbox": [538, 0, 229, 208], "iscrowd": 0}, {"id": 16653562, "category_id": 11, "area": 2267, "bbox": [113, 332, 30, 179], "iscrowd": 0}, {"id": 16652003, "category_id": 11, "area": 1170, "bbox": [280, 149, 31, 55], "iscrowd": 0}, {"id": 16580853, "category_id": 11, "area": 5764, "bbox": [342, 316, 52, 140], "iscrowd": 0}, {"id": 16061917, "category_id": 11, "area": 23607, "bbox": [479, 353, 179, 158], "iscrowd": 0}, {"id": 15007990, "category_id": 11, "area": 10664, "bbox": [656, 400, 112, 111], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 25559, "bbox": [77, 158, 140, 239], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 4987, "bbox": [2, 166, 36, 148], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 10018, "bbox": [1, 340, 117, 124], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 6568, "bbox": [271, 201, 40, 204], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 2399, "bbox": [407, 309, 145, 31], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 11048, "bbox": [391, 339, 91, 171], "iscrowd": 0}]}, {"image_id": "ADE_val_00000481", "file_name": "ADE_val_00000481.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 46098, "bbox": [271, 1, 411, 420], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 104606, "bbox": [1, 283, 682, 228], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 10363, "bbox": [451, 167, 126, 168], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3473, "bbox": [262, 0, 28, 161], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 18715, "bbox": [39, 200, 307, 279], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 69358, "bbox": [0, 0, 274, 487], "iscrowd": 0}, {"id": 1911269, "category_id": 19, "area": 49135, "bbox": [286, 0, 193, 305], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 21863, "bbox": [27, 234, 193, 225], "iscrowd": 0}, {"id": 1263548, "category_id": 20, "area": 4397, "bbox": [179, 171, 119, 201], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 4899, "bbox": [145, 231, 156, 37], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 5249, "bbox": [636, 151, 45, 204], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 4449, "bbox": [463, 196, 98, 53], "iscrowd": 0}]}, {"image_id": "ADE_val_00000482", "file_name": "ADE_val_00000482.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 16333, "bbox": [0, 0, 256, 179], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1101, "bbox": [2, 229, 252, 27], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 999, "bbox": [137, 0, 74, 27], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 1889, "bbox": [27, 231, 152, 24], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 12304, "bbox": [137, 13, 98, 139], "iscrowd": 0}, {"id": 15139558, "category_id": 11, "area": 12448, "bbox": [0, 153, 150, 102], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2778, "bbox": [194, 180, 60, 75], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 653, "bbox": [106, 50, 23, 31], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 5760, "bbox": [20, 9, 54, 118], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 3936, "bbox": [150, 153, 83, 94], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 394, "bbox": [32, 137, 40, 19], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 2638, "bbox": [0, 134, 234, 30], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 1770, "bbox": [195, 171, 60, 60], "iscrowd": 0}, {"id": 5183998, "category_id": 82, "area": 402, "bbox": [0, 129, 27, 30], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 77, "bbox": [111, 130, 10, 14], "iscrowd": 0}, {"id": 521502, "category_id": 99, "area": 56, "bbox": [147, 132, 6, 13], "iscrowd": 0}, {"id": 458496, "category_id": 99, "area": 52, "bbox": [124, 130, 5, 16], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 461, "bbox": [83, 48, 18, 31], "iscrowd": 0}, {"id": 16330752, "category_id": 135, "area": 221, "bbox": [0, 38, 10, 34], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 109, "bbox": [96, 144, 40, 4], "iscrowd": 0}]}, {"image_id": "ADE_val_00000483", "file_name": "ADE_val_00000483.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 24149, "bbox": [1, 1, 511, 339], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5005, "bbox": [4, 287, 365, 52], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 402, "bbox": [129, 323, 49, 17], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 9895, "bbox": [2, 1, 165, 87], "iscrowd": 0}, {"id": 16711881, "category_id": 11, "area": 5624, "bbox": [166, 1, 70, 83], "iscrowd": 0}, {"id": 16713931, "category_id": 11, "area": 11023, "bbox": [366, 1, 146, 79], "iscrowd": 0}, {"id": 16711901, "category_id": 11, "area": 5984, "bbox": [94, 166, 57, 142], "iscrowd": 0}, {"id": 14876907, "category_id": 11, "area": 7403, "bbox": [141, 166, 68, 152], "iscrowd": 0}, {"id": 16253153, "category_id": 11, "area": 5826, "bbox": [322, 206, 46, 134], "iscrowd": 0}, {"id": 15663318, "category_id": 11, "area": 1564, "bbox": [491, 241, 19, 99], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 23972, "bbox": [2, 34, 105, 297], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 25627, "bbox": [194, 116, 195, 224], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 11267, "bbox": [236, 1, 133, 88], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 13609, "bbox": [369, 215, 126, 125], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1579, "bbox": [187, 90, 39, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00000484", "file_name": "ADE_val_00000484.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 10410, "bbox": [0, 151, 256, 61], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 558, "bbox": [75, 100, 89, 37], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 28939, "bbox": [34, 0, 192, 173], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 6359, "bbox": [0, 0, 44, 152], "iscrowd": 0}, {"id": 5439741, "category_id": 25, "area": 5891, "bbox": [218, 0, 38, 156], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 8570, "bbox": [18, 181, 216, 74], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 371, "bbox": [77, 134, 22, 20], "iscrowd": 0}, {"id": 15007999, "category_id": 126, "area": 254, "bbox": [147, 137, 19, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00000485", "file_name": "ADE_val_00000485.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 56172, "bbox": [0, 16, 662, 195], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 79949, "bbox": [1, 187, 661, 325], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 22750, "bbox": [0, 0, 662, 55], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1092, "bbox": [593, 183, 68, 32], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 903, "bbox": [282, 81, 21, 54], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6189, "bbox": [0, 6, 55, 124], "iscrowd": 0}, {"id": 16716747, "category_id": 11, "area": 7996, "bbox": [123, 24, 91, 98], "iscrowd": 0}, {"id": 16711923, "category_id": 11, "area": 4700, "bbox": [213, 24, 58, 97], "iscrowd": 0}, {"id": 16580812, "category_id": 11, "area": 822, "bbox": [155, 165, 38, 28], "iscrowd": 0}, {"id": 16711919, "category_id": 11, "area": 412, "bbox": [193, 165, 18, 27], "iscrowd": 0}, {"id": 16711930, "category_id": 11, "area": 4854, "bbox": [251, 173, 152, 48], "iscrowd": 0}, {"id": 15532280, "category_id": 11, "area": 7684, "bbox": [0, 183, 78, 112], "iscrowd": 0}, {"id": 16714457, "category_id": 11, "area": 1437, "bbox": [274, 142, 144, 77], "iscrowd": 0}, {"id": 16716519, "category_id": 11, "area": 327, "bbox": [288, 134, 50, 12], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1047, "bbox": [210, 168, 41, 32], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1198, "bbox": [414, 152, 113, 46], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4011, "bbox": [558, 229, 104, 188], "iscrowd": 0}, {"id": 1658047, "category_id": 20, "area": 166, "bbox": [420, 132, 22, 9], "iscrowd": 0}, {"id": 285364, "category_id": 20, "area": 217, "bbox": [364, 132, 15, 17], "iscrowd": 0}, {"id": 25544, "category_id": 20, "area": 296, "bbox": [387, 138, 25, 14], "iscrowd": 0}, {"id": 17336, "category_id": 20, "area": 1997, "bbox": [420, 141, 37, 76], "iscrowd": 0}, {"id": 17640, "category_id": 20, "area": 2128, "bbox": [455, 143, 46, 72], "iscrowd": 0}, {"id": 218553, "category_id": 20, "area": 785, "bbox": [510, 141, 39, 61], "iscrowd": 0}, {"id": 25276, "category_id": 20, "area": 532, "bbox": [483, 135, 27, 23], "iscrowd": 0}, {"id": 151492, "category_id": 20, "area": 199, "bbox": [451, 134, 23, 10], "iscrowd": 0}, {"id": 542679, "category_id": 20, "area": 12206, "bbox": [222, 263, 119, 227], "iscrowd": 0}, {"id": 23761, "category_id": 20, "area": 15632, "bbox": [375, 288, 128, 224], "iscrowd": 0}, {"id": 1324232, "category_id": 20, "area": 14025, "bbox": [500, 273, 134, 222], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 516, "bbox": [326, 1, 37, 99], "iscrowd": 0}, {"id": 2162659, "category_id": 37, "area": 571, "bbox": [491, 0, 33, 101], "iscrowd": 0}, {"id": 393192, "category_id": 37, "area": 868, "bbox": [206, 0, 25, 102], "iscrowd": 0}, {"id": 65507, "category_id": 37, "area": 155, "bbox": [446, 140, 9, 21], "iscrowd": 0}, {"id": 1572827, "category_id": 37, "area": 1197, "bbox": [429, 20, 39, 67], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 701, "bbox": [267, 128, 75, 47], "iscrowd": 0}, {"id": 2752256, "category_id": 74, "area": 68175, "bbox": [91, 188, 519, 250], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 100, "bbox": [100, 12, 21, 7], "iscrowd": 0}, {"id": 1154785, "category_id": 83, "area": 99, "bbox": [190, 9, 20, 6], "iscrowd": 0}, {"id": 37375, "category_id": 83, "area": 85, "bbox": [260, 0, 21, 5], "iscrowd": 0}, {"id": 43750, "category_id": 83, "area": 89, "bbox": [310, 14, 20, 6], "iscrowd": 0}, {"id": 48639, "category_id": 83, "area": 55, "bbox": [375, 29, 15, 5], "iscrowd": 0}, {"id": 1483519, "category_id": 83, "area": 60, "bbox": [473, 20, 14, 6], "iscrowd": 0}, {"id": 1414399, "category_id": 83, "area": 47, "bbox": [430, 42, 11, 6], "iscrowd": 0}, {"id": 1952498, "category_id": 83, "area": 26, "bbox": [363, 47, 9, 4], "iscrowd": 0}, {"id": 1484772, "category_id": 83, "area": 37, "bbox": [282, 38, 8, 6], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 3713, "bbox": [78, 166, 78, 102], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 224, "bbox": [621, 201, 24, 16], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 3860, "bbox": [53, 17, 91, 85], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 185, "bbox": [314, 117, 15, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00000486", "file_name": "ADE_val_00000486.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 2565, "bbox": [143, 18, 112, 54], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3824, "bbox": [180, 198, 76, 58], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6371, "bbox": [7, 1, 86, 89], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1886, "bbox": [144, 1, 111, 17], "iscrowd": 0}, {"id": 16122841, "category_id": 11, "area": 11980, "bbox": [0, 87, 191, 117], "iscrowd": 0}, {"id": 16386017, "category_id": 11, "area": 7672, "bbox": [190, 86, 66, 127], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1167, "bbox": [0, 0, 19, 92], "iscrowd": 0}, {"id": 140799, "category_id": 19, "area": 3489, "bbox": [93, 1, 50, 76], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2272, "bbox": [26, 80, 115, 42], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 7424, "bbox": [0, 158, 178, 96], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 1529, "bbox": [112, 212, 71, 43], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 2929, "bbox": [143, 34, 70, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00000487", "file_name": "ADE_val_00000487.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 72875, "bbox": [0, 0, 575, 274], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 68919, "bbox": [197, 27, 231, 405], "iscrowd": 0}, {"id": 15270090, "category_id": 11, "area": 16359, "bbox": [0, 271, 149, 160], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 27471, "bbox": [77, 135, 158, 296], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 851, "bbox": [177, 21, 19, 64], "iscrowd": 0}, {"id": 196359, "category_id": 99, "area": 1161, "bbox": [145, 21, 25, 62], "iscrowd": 0}, {"id": 1631488, "category_id": 99, "area": 1456, "bbox": [39, 101, 26, 68], "iscrowd": 0}, {"id": 1310464, "category_id": 99, "area": 519, "bbox": [117, 42, 26, 35], "iscrowd": 0}, {"id": 16711864, "category_id": 108, "area": 34112, "bbox": [353, 270, 222, 161], "iscrowd": 0}]}, {"image_id": "ADE_val_00000488", "file_name": "ADE_val_00000488.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 10575, "bbox": [0, 12, 255, 147], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4176, "bbox": [29, 221, 206, 34], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7871, "bbox": [0, 0, 255, 50], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3493, "bbox": [0, 22, 33, 114], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 4203, "bbox": [33, 56, 61, 75], "iscrowd": 0}, {"id": 16711927, "category_id": 11, "area": 2669, "bbox": [91, 66, 52, 65], "iscrowd": 0}, {"id": 16711900, "category_id": 11, "area": 1819, "bbox": [137, 57, 52, 40], "iscrowd": 0}, {"id": 15931642, "category_id": 11, "area": 3198, "bbox": [189, 45, 66, 86], "iscrowd": 0}, {"id": 16646344, "category_id": 11, "area": 6995, "bbox": [106, 161, 104, 82], "iscrowd": 0}, {"id": 15794370, "category_id": 11, "area": 6447, "bbox": [0, 160, 107, 95], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1397, "bbox": [0, 186, 51, 41], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 384, "bbox": [0, 143, 49, 22], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 7680, "bbox": [208, 85, 47, 169], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 59, "bbox": [11, 2, 13, 6], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 1798, "bbox": [135, 95, 55, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00000489", "file_name": "ADE_val_00000489.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18837, "bbox": [0, 24, 295, 117], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6228, "bbox": [0, 137, 290, 88], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9269, "bbox": [0, 0, 297, 42], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1733, "bbox": [97, 56, 36, 56], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1880, "bbox": [287, 0, 13, 225], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 254, "bbox": [88, 123, 20, 23], "iscrowd": 0}, {"id": 1065688, "category_id": 20, "area": 165, "bbox": [40, 119, 16, 18], "iscrowd": 0}, {"id": 19668, "category_id": 20, "area": 118, "bbox": [184, 114, 16, 10], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 696, "bbox": [47, 102, 70, 16], "iscrowd": 0}, {"id": 5177116, "category_id": 34, "area": 1111, "bbox": [129, 107, 104, 19], "iscrowd": 0}, {"id": 3604224, "category_id": 34, "area": 1337, "bbox": [191, 98, 99, 19], "iscrowd": 0}, {"id": 5504768, "category_id": 34, "area": 1728, "bbox": [232, 116, 58, 47], "iscrowd": 0}, {"id": 2817814, "category_id": 34, "area": 7724, "bbox": [94, 118, 165, 82], "iscrowd": 0}, {"id": 4317442, "category_id": 34, "area": 2269, "bbox": [0, 110, 120, 35], "iscrowd": 0}, {"id": 3145486, "category_id": 34, "area": 10575, "bbox": [0, 131, 152, 92], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 594, "bbox": [152, 129, 30, 58], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 291, "bbox": [0, 5, 55, 11], "iscrowd": 0}, {"id": 47359, "category_id": 83, "area": 235, "bbox": [82, 20, 51, 9], "iscrowd": 0}, {"id": 1224447, "category_id": 83, "area": 167, "bbox": [142, 31, 42, 7], "iscrowd": 0}, {"id": 831487, "category_id": 83, "area": 368, "bbox": [168, 12, 60, 11], "iscrowd": 0}, {"id": 1350651, "category_id": 83, "area": 245, "bbox": [219, 27, 50, 8], "iscrowd": 0}, {"id": 1218798, "category_id": 83, "area": 74, "bbox": [281, 9, 16, 7], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1322, "bbox": [96, 192, 49, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00000490", "file_name": "ADE_val_00000490.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 1371, "bbox": [0, 0, 185, 37], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 24243, "bbox": [0, 0, 300, 107], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 34916, "bbox": [0, 99, 300, 133], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 675, "bbox": [247, 53, 18, 61], "iscrowd": 0}, {"id": 3539104, "category_id": 13, "area": 3523, "bbox": [175, 36, 46, 120], "iscrowd": 0}, {"id": 4587676, "category_id": 13, "area": 2287, "bbox": [133, 36, 33, 138], "iscrowd": 0}, {"id": 3276929, "category_id": 13, "area": 466, "bbox": [109, 66, 16, 50], "iscrowd": 0}, {"id": 2359420, "category_id": 13, "area": 910, "bbox": [27, 53, 30, 68], "iscrowd": 0}]}, {"image_id": "ADE_val_00000491", "file_name": "ADE_val_00000491.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 447, "bbox": [2, 155, 34, 20], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 8570, "bbox": [239, 106, 260, 70], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 13705, "bbox": [21, 0, 474, 72], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 50897, "bbox": [2, 0, 496, 191], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 17165, "bbox": [0, 156, 499, 63], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 9102, "bbox": [44, 99, 158, 88], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 272, "bbox": [44, 165, 32, 19], "iscrowd": 0}, {"id": 13942282, "category_id": 129, "area": 51620, "bbox": [0, 206, 499, 119], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 633, "bbox": [194, 144, 43, 21], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 1334, "bbox": [0, 208, 58, 30], "iscrowd": 0}, {"id": 65459, "category_id": 77, "area": 914, "bbox": [290, 188, 45, 33], "iscrowd": 0}, {"id": 1703828, "category_id": 77, "area": 927, "bbox": [323, 188, 43, 34], "iscrowd": 0}, {"id": 1310663, "category_id": 77, "area": 882, "bbox": [353, 190, 43, 34], "iscrowd": 0}, {"id": 65425, "category_id": 77, "area": 973, "bbox": [384, 190, 48, 31], "iscrowd": 0}, {"id": 63662, "category_id": 77, "area": 1043, "bbox": [423, 185, 47, 33], "iscrowd": 0}, {"id": 1375935, "category_id": 77, "area": 950, "bbox": [457, 188, 42, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00000492", "file_name": "ADE_val_00000492.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 14686, "bbox": [0, 0, 255, 74], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3660, "bbox": [174, 0, 81, 95], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 24535, "bbox": [0, 132, 255, 122], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 9416, "bbox": [0, 53, 237, 91], "iscrowd": 0}, {"id": 13942282, "category_id": 129, "area": 12104, "bbox": [39, 89, 216, 98], "iscrowd": 0}]}, {"image_id": "ADE_val_00000493", "file_name": "ADE_val_00000493.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 110381, "bbox": [0, 0, 637, 474], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 39817, "bbox": [190, 324, 446, 187], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 85436, "bbox": [62, 0, 620, 251], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 8904, "bbox": [128, 206, 287, 305], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 622, "bbox": [241, 300, 18, 64], "iscrowd": 0}, {"id": 2040709, "category_id": 13, "area": 129, "bbox": [264, 303, 9, 28], "iscrowd": 0}, {"id": 4851873, "category_id": 13, "area": 340, "bbox": [268, 306, 14, 43], "iscrowd": 0}, {"id": 5505173, "category_id": 13, "area": 2181, "bbox": [420, 286, 34, 121], "iscrowd": 0}, {"id": 5180032, "category_id": 13, "area": 685, "bbox": [498, 307, 15, 63], "iscrowd": 0}, {"id": 3735717, "category_id": 13, "area": 1762, "bbox": [455, 305, 28, 107], "iscrowd": 0}, {"id": 3806383, "category_id": 13, "area": 1639, "bbox": [480, 302, 19, 108], "iscrowd": 0}, {"id": 5052306, "category_id": 13, "area": 1465, "bbox": [578, 305, 30, 90], "iscrowd": 0}, {"id": 4587665, "category_id": 13, "area": 539, "bbox": [610, 306, 20, 62], "iscrowd": 0}, {"id": 2359962, "category_id": 13, "area": 500, "bbox": [179, 301, 16, 61], "iscrowd": 0}, {"id": 2097311, "category_id": 13, "area": 334, "bbox": [449, 308, 13, 60], "iscrowd": 0}, {"id": 5898398, "category_id": 13, "area": 332, "bbox": [443, 304, 12, 63], "iscrowd": 0}, {"id": 5111982, "category_id": 13, "area": 357, "bbox": [253, 297, 9, 60], "iscrowd": 0}, {"id": 2494115, "category_id": 13, "area": 581, "bbox": [282, 301, 12, 62], "iscrowd": 0}, {"id": 5046445, "category_id": 13, "area": 387, "bbox": [552, 306, 12, 49], "iscrowd": 0}, {"id": 5439659, "category_id": 13, "area": 344, "bbox": [353, 194, 13, 39], "iscrowd": 0}, {"id": 5246885, "category_id": 13, "area": 245, "bbox": [369, 192, 10, 38], "iscrowd": 0}, {"id": 3085967, "category_id": 13, "area": 340, "bbox": [379, 198, 14, 39], "iscrowd": 0}, {"id": 5636241, "category_id": 13, "area": 558, "bbox": [164, 299, 19, 66], "iscrowd": 0}, {"id": 3670192, "category_id": 13, "area": 2704, "bbox": [362, 303, 35, 116], "iscrowd": 0}, {"id": 3349918, "category_id": 13, "area": 1359, "bbox": [387, 306, 24, 108], "iscrowd": 0}, {"id": 5243043, "category_id": 13, "area": 839, "bbox": [406, 301, 19, 81], "iscrowd": 0}, {"id": 3145889, "category_id": 13, "area": 470, "bbox": [510, 306, 11, 61], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1619, "bbox": [201, 281, 23, 77], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 32145, "bbox": [0, 337, 427, 174], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 22551, "bbox": [635, 6, 47, 504], "iscrowd": 0}, {"id": 1114343, "category_id": 43, "area": 5485, "bbox": [521, 172, 28, 220], "iscrowd": 0}, {"id": 1247208, "category_id": 43, "area": 8714, "bbox": [84, 0, 33, 422], "iscrowd": 0}, {"id": 1704161, "category_id": 43, "area": 1360, "bbox": [507, 212, 15, 105], "iscrowd": 0}, {"id": 1114338, "category_id": 43, "area": 922, "bbox": [494, 229, 12, 89], "iscrowd": 0}, {"id": 2825978, "category_id": 43, "area": 571, "bbox": [478, 239, 9, 68], "iscrowd": 0}, {"id": 3674111, "category_id": 43, "area": 371, "bbox": [461, 245, 7, 63], "iscrowd": 0}, {"id": 2432998, "category_id": 43, "area": 272, "bbox": [443, 249, 6, 57], "iscrowd": 0}, {"id": 4064739, "category_id": 43, "area": 2615, "bbox": [264, 95, 17, 217], "iscrowd": 0}, {"id": 1446143, "category_id": 43, "area": 1117, "bbox": [333, 145, 12, 153], "iscrowd": 0}, {"id": 1769727, "category_id": 43, "area": 144, "bbox": [365, 172, 8, 23], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 30, "bbox": [583, 209, 7, 5], "iscrowd": 0}, {"id": 1221631, "category_id": 83, "area": 21, "bbox": [469, 220, 6, 4], "iscrowd": 0}, {"id": 1623295, "category_id": 83, "area": 57, "bbox": [535, 147, 14, 5], "iscrowd": 0}, {"id": 46079, "category_id": 83, "area": 37, "bbox": [400, 80, 10, 5], "iscrowd": 0}, {"id": 45311, "category_id": 83, "area": 31, "bbox": [418, 114, 9, 4], "iscrowd": 0}, {"id": 236543, "category_id": 83, "area": 19, "bbox": [408, 154, 7, 4], "iscrowd": 0}, {"id": 1551615, "category_id": 83, "area": 22, "bbox": [367, 114, 8, 3], "iscrowd": 0}, {"id": 1297383, "category_id": 83, "area": 28, "bbox": [368, 136, 8, 5], "iscrowd": 0}, {"id": 51442, "category_id": 83, "area": 13, "bbox": [403, 169, 6, 3], "iscrowd": 0}, {"id": 41706, "category_id": 83, "area": 6, "bbox": [400, 179, 4, 2], "iscrowd": 0}, {"id": 1425151, "category_id": 83, "area": 10, "bbox": [403, 187, 5, 3], "iscrowd": 0}, {"id": 1886463, "category_id": 83, "area": 15, "bbox": [471, 206, 7, 3], "iscrowd": 0}, {"id": 48639, "category_id": 83, "area": 16, "bbox": [495, 214, 6, 4], "iscrowd": 0}, {"id": 39423, "category_id": 83, "area": 13, "bbox": [484, 227, 6, 3], "iscrowd": 0}, {"id": 48127, "category_id": 83, "area": 9, "bbox": [572, 232, 5, 2], "iscrowd": 0}, {"id": 506623, "category_id": 83, "area": 39, "bbox": [628, 95, 10, 5], "iscrowd": 0}, {"id": 570361, "category_id": 83, "area": 25, "bbox": [628, 157, 9, 4], "iscrowd": 0}, {"id": 44031, "category_id": 83, "area": 12, "bbox": [518, 178, 5, 3], "iscrowd": 0}, {"id": 958452, "category_id": 83, "area": 19, "bbox": [609, 226, 7, 4], "iscrowd": 0}, {"id": 1095679, "category_id": 83, "area": 5, "bbox": [452, 232, 5, 1], "iscrowd": 0}, {"id": 764395, "category_id": 83, "area": 9, "bbox": [600, 230, 5, 2], "iscrowd": 0}, {"id": 40703, "category_id": 83, "area": 15, "bbox": [622, 224, 7, 3], "iscrowd": 0}]}, {"image_id": "ADE_val_00000494", "file_name": "ADE_val_00000494.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 37904, "bbox": [0, 0, 400, 116], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 7902, "bbox": [0, 113, 400, 36], "iscrowd": 0}, {"id": 65433, "category_id": 55, "area": 54110, "bbox": [0, 126, 400, 174], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6203, "bbox": [131, 206, 132, 93], "iscrowd": 0}, {"id": 4463277, "category_id": 13, "area": 5185, "bbox": [19, 212, 101, 88], "iscrowd": 0}]}, {"image_id": "ADE_val_00000495", "file_name": "ADE_val_00000495.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 73035, "bbox": [0, 0, 682, 339], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 43019, "bbox": [331, 279, 351, 232], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 28587, "bbox": [195, 0, 487, 73], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 26472, "bbox": [59, 3, 132, 215], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2718, "bbox": [382, 88, 54, 52], "iscrowd": 0}, {"id": 16777215, "category_id": 9, "area": 2898, "bbox": [498, 92, 61, 53], "iscrowd": 0}, {"id": 14614475, "category_id": 9, "area": 2829, "bbox": [438, 90, 58, 52], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 12849, "bbox": [240, 139, 123, 249], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 9476, "bbox": [346, 157, 115, 253], "iscrowd": 0}, {"id": 5579415, "category_id": 13, "area": 3281, "bbox": [463, 172, 77, 118], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 10975, "bbox": [513, 281, 169, 191], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 712, "bbox": [642, 72, 38, 20], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 1117, "bbox": [625, 246, 30, 51], "iscrowd": 0}, {"id": 16711864, "category_id": 108, "area": 6880, "bbox": [173, 209, 165, 209], "iscrowd": 0}, {"id": 15663259, "category_id": 108, "area": 9143, "bbox": [123, 224, 213, 205], "iscrowd": 0}, {"id": 16058781, "category_id": 108, "area": 21834, "bbox": [47, 244, 284, 267], "iscrowd": 0}, {"id": 16257948, "category_id": 108, "area": 43759, "bbox": [0, 324, 321, 187], "iscrowd": 0}, {"id": 14812618, "category_id": 108, "area": 6005, "bbox": [507, 168, 71, 127], "iscrowd": 0}, {"id": 16714404, "category_id": 108, "area": 4985, "bbox": [452, 165, 65, 130], "iscrowd": 0}, {"id": 16719522, "category_id": 108, "area": 4675, "bbox": [363, 161, 97, 131], "iscrowd": 0}, {"id": 16718289, "category_id": 108, "area": 9420, "bbox": [212, 218, 202, 149], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 831, "bbox": [649, 253, 31, 40], "iscrowd": 0}, {"id": 452717, "category_id": 113, "area": 532, "bbox": [454, 314, 20, 38], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 2460, "bbox": [562, 457, 72, 54], "iscrowd": 0}, {"id": 11183961, "category_id": 116, "area": 1694, "bbox": [632, 471, 49, 39], "iscrowd": 0}, {"id": 8962869, "category_id": 116, "area": 3144, "bbox": [461, 350, 76, 57], "iscrowd": 0}, {"id": 10274916, "category_id": 116, "area": 1784, "bbox": [610, 283, 52, 51], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 3590, "bbox": [311, 75, 57, 65], "iscrowd": 0}]}, {"image_id": "ADE_val_00000496", "file_name": "ADE_val_00000496.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 1701, "bbox": [297, 237, 77, 32], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 52360, "bbox": [127, 0, 384, 242], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 128620, "bbox": [0, 0, 681, 312], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 155157, "bbox": [0, 268, 681, 243], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 342, "bbox": [118, 310, 13, 44], "iscrowd": 0}, {"id": 3277224, "category_id": 13, "area": 140, "bbox": [77, 336, 11, 19], "iscrowd": 0}, {"id": 4259999, "category_id": 13, "area": 133, "bbox": [52, 296, 10, 20], "iscrowd": 0}, {"id": 4660876, "category_id": 13, "area": 180, "bbox": [122, 294, 15, 21], "iscrowd": 0}, {"id": 5898398, "category_id": 13, "area": 486, "bbox": [488, 319, 18, 54], "iscrowd": 0}, {"id": 5120406, "category_id": 13, "area": 544, "bbox": [512, 321, 19, 49], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 3068, "bbox": [12, 256, 209, 30], "iscrowd": 0}, {"id": 2366695, "category_id": 43, "area": 3759, "bbox": [487, 247, 195, 55], "iscrowd": 0}]}, {"image_id": "ADE_val_00000497", "file_name": "ADE_val_00000497.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 109223, "bbox": [2, 1, 637, 265], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 57529, "bbox": [2, 204, 636, 276], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 14006, "bbox": [341, 350, 263, 130], "iscrowd": 0}, {"id": 5504796, "category_id": 34, "area": 3729, "bbox": [371, 230, 122, 130], "iscrowd": 0}, {"id": 3473185, "category_id": 34, "area": 3933, "bbox": [419, 173, 132, 55], "iscrowd": 0}, {"id": 6480168, "category_id": 34, "area": 22717, "bbox": [2, 170, 373, 166], "iscrowd": 0}, {"id": 4386072, "category_id": 34, "area": 20155, "bbox": [458, 198, 180, 223], "iscrowd": 0}, {"id": 3866132, "category_id": 34, "area": 4527, "bbox": [399, 426, 122, 54], "iscrowd": 0}, {"id": 6551056, "category_id": 34, "area": 4907, "bbox": [274, 254, 159, 161], "iscrowd": 0}, {"id": 5042176, "category_id": 34, "area": 22302, "bbox": [2, 178, 481, 236], "iscrowd": 0}, {"id": 4450062, "category_id": 34, "area": 8263, "bbox": [173, 282, 193, 197], "iscrowd": 0}, {"id": 5963530, "category_id": 34, "area": 16723, "bbox": [2, 329, 262, 150], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 1496, "bbox": [508, 140, 36, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00000498", "file_name": "ADE_val_00000498.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 29538, "bbox": [99, 165, 412, 517], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 3255, "bbox": [363, 173, 147, 30], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 80259, "bbox": [0, 0, 511, 187], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 13692, "bbox": [0, 115, 511, 116], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 26772, "bbox": [0, 269, 107, 412], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 1890, "bbox": [3, 230, 106, 41], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2455, "bbox": [267, 198, 243, 27], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 90084, "bbox": [188, 215, 323, 466], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 72681, "bbox": [127, 270, 308, 412], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 16100, "bbox": [38, 219, 87, 463], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 723, "bbox": [0, 219, 17, 52], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2806, "bbox": [231, 104, 48, 61], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 88, "bbox": [469, 106, 16, 53], "iscrowd": 0}]}, {"image_id": "ADE_val_00000499", "file_name": "ADE_val_00000499.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6571, "bbox": [0, 50, 255, 89], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 26967, "bbox": [0, 111, 256, 145], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 13569, "bbox": [0, 0, 255, 80], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 82, "bbox": [207, 99, 11, 12], "iscrowd": 0}, {"id": 2818207, "category_id": 13, "area": 52, "bbox": [218, 98, 10, 11], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 396, "bbox": [160, 124, 57, 38], "iscrowd": 0}, {"id": 6032639, "category_id": 16, "area": 204, "bbox": [174, 117, 47, 25], "iscrowd": 0}, {"id": 4456703, "category_id": 16, "area": 807, "bbox": [124, 134, 85, 59], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 794, "bbox": [131, 136, 33, 55], "iscrowd": 0}, {"id": 1454291, "category_id": 20, "area": 845, "bbox": [163, 138, 32, 56], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1470, "bbox": [131, 43, 16, 106], "iscrowd": 0}, {"id": 1900787, "category_id": 43, "area": 1729, "bbox": [43, 0, 26, 193], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 723, "bbox": [0, 73, 23, 35], "iscrowd": 0}, {"id": 16776982, "category_id": 63, "area": 1179, "bbox": [84, 81, 30, 43], "iscrowd": 0}, {"id": 14352128, "category_id": 63, "area": 680, "bbox": [113, 83, 18, 38], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 310, "bbox": [44, 135, 19, 20], "iscrowd": 0}, {"id": 833004, "category_id": 68, "area": 360, "bbox": [59, 105, 21, 22], "iscrowd": 0}, {"id": 1949695, "category_id": 68, "area": 352, "bbox": [33, 105, 21, 20], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 286, "bbox": [212, 18, 37, 10], "iscrowd": 0}, {"id": 1493230, "category_id": 83, "area": 137, "bbox": [220, 39, 27, 6], "iscrowd": 0}, {"id": 51439, "category_id": 83, "area": 272, "bbox": [122, 8, 45, 10], "iscrowd": 0}, {"id": 40703, "category_id": 83, "area": 216, "bbox": [153, 30, 35, 9], "iscrowd": 0}, {"id": 1230576, "category_id": 83, "area": 203, "bbox": [77, 26, 39, 8], "iscrowd": 0}, {"id": 1023230, "category_id": 83, "area": 60, "bbox": [90, 51, 22, 4], "iscrowd": 0}, {"id": 38399, "category_id": 83, "area": 62, "bbox": [225, 51, 20, 4], "iscrowd": 0}, {"id": 43750, "category_id": 83, "area": 53, "bbox": [227, 58, 18, 3], "iscrowd": 0}, {"id": 438777, "category_id": 83, "area": 161, "bbox": [0, 20, 27, 9], "iscrowd": 0}, {"id": 38911, "category_id": 83, "area": 63, "bbox": [28, 8, 14, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00000500", "file_name": "ADE_val_00000500.png", "segments_info": [{"id": 15075081, "category_id": 27, "area": 42867, "bbox": [2, 0, 680, 147], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 173, "bbox": [569, 120, 15, 24], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 246, "bbox": [536, 160, 18, 19], "iscrowd": 0}, {"id": 22976, "category_id": 20, "area": 283, "bbox": [560, 168, 21, 22], "iscrowd": 0}, {"id": 11478, "category_id": 20, "area": 305, "bbox": [583, 177, 23, 22], "iscrowd": 0}, {"id": 19410, "category_id": 20, "area": 286, "bbox": [606, 187, 20, 19], "iscrowd": 0}, {"id": 20192, "category_id": 20, "area": 376, "bbox": [628, 193, 25, 23], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 1442, "bbox": [295, 184, 59, 41], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 53, "bbox": [392, 5, 16, 7], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 283, "bbox": [447, 77, 19, 69], "iscrowd": 0}, {"id": 16730141, "category_id": 88, "area": 285, "bbox": [383, 61, 14, 69], "iscrowd": 0}, {"id": 60415, "category_id": 104, "area": 263217, "bbox": [1, 0, 680, 511], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 368, "bbox": [600, 79, 32, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00000501", "file_name": "ADE_val_00000501.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 147958, "bbox": [0, 1, 666, 264], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 29158, "bbox": [0, 242, 667, 99], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 4964, "bbox": [0, 311, 356, 30], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 17117, "bbox": [0, 379, 666, 109], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 36401, "bbox": [1, 324, 665, 76], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 17572, "bbox": [1, 478, 665, 33], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 30402, "bbox": [70, 88, 429, 253], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 46069, "bbox": [0, 382, 667, 103], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 663, "bbox": [182, 278, 19, 39], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 4044, "bbox": [258, 220, 66, 65], "iscrowd": 0}, {"id": 11993328, "category_id": 44, "area": 39, "bbox": [281, 304, 6, 14], "iscrowd": 0}, {"id": 10289407, "category_id": 44, "area": 47, "bbox": [110, 303, 6, 8], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 76, "bbox": [183, 316, 16, 5], "iscrowd": 0}]}, {"image_id": "ADE_val_00000502", "file_name": "ADE_val_00000502.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1525, "bbox": [0, 637, 250, 23], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 680, "bbox": [0, 614, 33, 26], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 234281, "bbox": [1, 0, 511, 618], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 8479, "bbox": [395, 216, 114, 404], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 55430, "bbox": [0, 606, 511, 165], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 66, "bbox": [434, 608, 11, 7], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 28865, "bbox": [33, 465, 478, 199], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 7460, "bbox": [84, 627, 427, 144], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 143, "bbox": [402, 599, 11, 17], "iscrowd": 0}, {"id": 13918998, "category_id": 21, "area": 170, "bbox": [499, 588, 13, 18], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 310, "bbox": [155, 642, 26, 14], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 615, "bbox": [433, 409, 42, 189], "iscrowd": 0}]}, {"image_id": "ADE_val_00000503", "file_name": "ADE_val_00000503.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 91075, "bbox": [0, 329, 767, 183], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 32369, "bbox": [313, 236, 310, 179], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 214551, "bbox": [0, 0, 769, 312], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 2779, "bbox": [630, 471, 139, 40], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 7036, "bbox": [452, 452, 317, 59], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 1487, "bbox": [539, 291, 186, 19], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 11708, "bbox": [589, 314, 180, 105], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 18192, "bbox": [0, 306, 769, 60], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 4473, "bbox": [204, 279, 565, 83], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 881, "bbox": [635, 403, 22, 67], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 505, "bbox": [330, 312, 35, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00000504", "file_name": "ADE_val_00000504.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 173497, "bbox": [0, 0, 599, 346], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 5304, "bbox": [0, 377, 465, 17], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 32368, "bbox": [0, 313, 599, 81], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2665, "bbox": [265, 112, 32, 248], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 21132, "bbox": [61, 3, 408, 56], "iscrowd": 0}]}, {"image_id": "ADE_val_00000505", "file_name": "ADE_val_00000505.png", "segments_info": [{"id": 3289680, "category_id": 4, "area": 43864, "bbox": [1, 1, 681, 320], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 69421, "bbox": [1, 97, 681, 414], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 20529, "bbox": [77, 2, 353, 100], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 2452, "bbox": [1, 1, 65, 46], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 16555, "bbox": [106, 152, 165, 130], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 14189, "bbox": [412, 153, 155, 118], "iscrowd": 0}, {"id": 14082560, "category_id": 143, "area": 22723, "bbox": [237, 250, 184, 161], "iscrowd": 0}, {"id": 13106944, "category_id": 143, "area": 10735, "bbox": [0, 278, 89, 159], "iscrowd": 0}, {"id": 10223390, "category_id": 143, "area": 553, "bbox": [104, 151, 168, 131], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 5721, "bbox": [532, 259, 91, 114], "iscrowd": 0}, {"id": 11512878, "category_id": 148, "area": 2422, "bbox": [2, 167, 58, 116], "iscrowd": 0}]}, {"image_id": "ADE_val_00000506", "file_name": "ADE_val_00000506.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 155408, "bbox": [1, 1, 767, 374], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 78756, "bbox": [1, 253, 767, 259], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 27318, "bbox": [319, 380, 304, 131], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 18213, "bbox": [1, 200, 187, 134], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 14016, "bbox": [437, 232, 322, 201], "iscrowd": 0}, {"id": 3737343, "category_id": 16, "area": 6254, "bbox": [214, 207, 100, 101], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 37945, "bbox": [1, 352, 376, 159], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 10606, "bbox": [379, 148, 93, 164], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 5267, "bbox": [329, 52, 96, 247], "iscrowd": 0}, {"id": 1507299, "category_id": 37, "area": 1704, "bbox": [1, 143, 38, 87], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1548, "bbox": [228, 90, 61, 95], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 7831, "bbox": [703, 317, 65, 181], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 14751, "bbox": [548, 143, 147, 121], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 673, "bbox": [253, 179, 23, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00000507", "file_name": "ADE_val_00000507.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 85385, "bbox": [0, 0, 600, 363], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 26194, "bbox": [167, 277, 432, 173], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 265, "bbox": [366, 174, 16, 29], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 31864, "bbox": [0, 0, 584, 96], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1981, "bbox": [395, 249, 85, 48], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 2290, "bbox": [338, 175, 43, 104], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 13812, "bbox": [168, 355, 280, 94], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 5750, "bbox": [30, 259, 172, 47], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 24221, "bbox": [29, 105, 169, 165], "iscrowd": 0}, {"id": 16508665, "category_id": 9, "area": 1468, "bbox": [0, 100, 10, 172], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4821, "bbox": [309, 165, 79, 155], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 4670, "bbox": [249, 112, 61, 87], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 32664, "bbox": [0, 257, 292, 193], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 341, "bbox": [337, 247, 9, 47], "iscrowd": 0}, {"id": 798463, "category_id": 39, "area": 16711, "bbox": [395, 129, 205, 180], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1199, "bbox": [196, 265, 46, 38], "iscrowd": 0}, {"id": 841708, "category_id": 40, "area": 1462, "bbox": [24, 280, 43, 55], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1624, "bbox": [343, 176, 16, 119], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 8084, "bbox": [198, 329, 134, 92], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 151, "bbox": [62, 29, 21, 11], "iscrowd": 0}, {"id": 2012671, "category_id": 83, "area": 234, "bbox": [185, 51, 26, 11], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 285, "bbox": [265, 297, 10, 40], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 1366, "bbox": [410, 291, 40, 48], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 782, "bbox": [239, 325, 64, 26], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 97, "bbox": [275, 311, 10, 18], "iscrowd": 0}, {"id": 11973120, "category_id": 148, "area": 167, "bbox": [281, 314, 11, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00000508", "file_name": "ADE_val_00000508.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 10920, "bbox": [1, 1, 299, 133], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 22351, "bbox": [1, 99, 299, 125], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 7931, "bbox": [18, 1, 174, 47], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 519, "bbox": [242, 81, 50, 20], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 14471, "bbox": [11, 47, 235, 113], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 954, "bbox": [158, 59, 44, 35], "iscrowd": 0}, {"id": 647140, "category_id": 40, "area": 739, "bbox": [46, 63, 52, 33], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 7622, "bbox": [114, 92, 183, 93], "iscrowd": 0}]}, {"image_id": "ADE_val_00000509", "file_name": "ADE_val_00000509.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 68484, "bbox": [0, 1, 756, 436], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 24697, "bbox": [0, 324, 757, 188], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 49163, "bbox": [0, 0, 678, 137], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2324, "bbox": [315, 204, 344, 54], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 64308, "bbox": [1, 349, 555, 163], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 31668, "bbox": [19, 119, 197, 188], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 14341, "bbox": [1, 83, 236, 240], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1610, "bbox": [322, 261, 29, 66], "iscrowd": 0}, {"id": 15401214, "category_id": 11, "area": 4563, "bbox": [517, 266, 193, 145], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 7220, "bbox": [393, 89, 90, 103], "iscrowd": 0}, {"id": 3997933, "category_id": 23, "area": 684, "bbox": [251, 177, 26, 29], "iscrowd": 0}, {"id": 3412991, "category_id": 23, "area": 734, "bbox": [249, 208, 27, 29], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 3169, "bbox": [323, 126, 28, 136], "iscrowd": 0}, {"id": 4722405, "category_id": 25, "area": 40787, "bbox": [531, 1, 180, 277], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 4719, "bbox": [230, 260, 98, 74], "iscrowd": 0}, {"id": 13693204, "category_id": 31, "area": 30575, "bbox": [463, 269, 253, 188], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1542, "bbox": [516, 307, 76, 36], "iscrowd": 0}, {"id": 1222116, "category_id": 40, "area": 543, "bbox": [265, 279, 34, 21], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 15529, "bbox": [365, 193, 121, 156], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 12873, "bbox": [113, 323, 214, 136], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 156, "bbox": [266, 85, 19, 10], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 810, "bbox": [584, 246, 44, 22], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 3255, "bbox": [186, 0, 118, 50], "iscrowd": 0}]}, {"image_id": "ADE_val_00000510", "file_name": "ADE_val_00000510.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 100907, "bbox": [2, 1, 765, 338], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9796, "bbox": [2, 274, 765, 197], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 43248, "bbox": [0, 0, 767, 147], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 38048, "bbox": [280, 333, 488, 178], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 7794, "bbox": [488, 152, 72, 147], "iscrowd": 0}, {"id": 15715566, "category_id": 9, "area": 10902, "bbox": [560, 150, 113, 124], "iscrowd": 0}, {"id": 15658480, "category_id": 9, "area": 11859, "bbox": [670, 130, 96, 155], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 17940, "bbox": [52, 117, 194, 172], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2012, "bbox": [747, 144, 20, 203], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 446, "bbox": [484, 299, 14, 39], "iscrowd": 0}, {"id": 3473663, "category_id": 16, "area": 4427, "bbox": [2, 362, 155, 86], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 371, "bbox": [216, 163, 22, 19], "iscrowd": 0}, {"id": 5249791, "category_id": 23, "area": 274, "bbox": [194, 187, 16, 18], "iscrowd": 0}, {"id": 2562303, "category_id": 23, "area": 209, "bbox": [196, 212, 17, 13], "iscrowd": 0}, {"id": 1777151, "category_id": 23, "area": 230, "bbox": [221, 214, 19, 14], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 13386, "bbox": [2, 274, 281, 178], "iscrowd": 0}, {"id": 16738588, "category_id": 24, "area": 21859, "bbox": [495, 263, 271, 155], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 2643, "bbox": [0, 124, 28, 150], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 37309, "bbox": [0, 388, 488, 124], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 19731, "bbox": [0, 130, 167, 264], "iscrowd": 0}, {"id": 851947, "category_id": 37, "area": 1196, "bbox": [561, 191, 50, 73], "iscrowd": 0}, {"id": 2419192, "category_id": 37, "area": 1238, "bbox": [494, 221, 41, 69], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 8760, "bbox": [136, 410, 193, 100], "iscrowd": 0}, {"id": 2478335, "category_id": 40, "area": 443, "bbox": [234, 283, 31, 39], "iscrowd": 0}, {"id": 1361151, "category_id": 40, "area": 633, "bbox": [182, 282, 72, 44], "iscrowd": 0}, {"id": 2216447, "category_id": 40, "area": 2147, "bbox": [170, 286, 74, 58], "iscrowd": 0}, {"id": 2212857, "category_id": 40, "area": 1858, "bbox": [157, 305, 66, 67], "iscrowd": 0}, {"id": 46847, "category_id": 40, "area": 2541, "bbox": [136, 314, 71, 67], "iscrowd": 0}, {"id": 46314, "category_id": 40, "area": 1500, "bbox": [654, 289, 68, 46], "iscrowd": 0}, {"id": 56575, "category_id": 40, "area": 1559, "bbox": [623, 289, 54, 46], "iscrowd": 0}, {"id": 48895, "category_id": 40, "area": 409, "bbox": [515, 278, 18, 29], "iscrowd": 0}, {"id": 48365, "category_id": 40, "area": 668, "bbox": [529, 274, 23, 35], "iscrowd": 0}, {"id": 1037823, "category_id": 40, "area": 1859, "bbox": [549, 274, 55, 47], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 5926, "bbox": [314, 243, 106, 68], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 506, "bbox": [189, 154, 22, 26], "iscrowd": 0}, {"id": 47871, "category_id": 68, "area": 264, "bbox": [211, 194, 27, 12], "iscrowd": 0}, {"id": 1223665, "category_id": 68, "area": 779, "bbox": [189, 263, 44, 24], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1105, "bbox": [392, 312, 63, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00000511", "file_name": "ADE_val_00000511.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 74264, "bbox": [0, 6, 640, 409], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 54286, "bbox": [93, 317, 546, 162], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 43430, "bbox": [0, 0, 640, 105], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 25349, "bbox": [352, 92, 203, 141], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6739, "bbox": [491, 291, 112, 91], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 9308, "bbox": [230, 99, 58, 177], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 7683, "bbox": [310, 94, 53, 237], "iscrowd": 0}, {"id": 2112993, "category_id": 19, "area": 7187, "bbox": [538, 63, 57, 173], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1709, "bbox": [607, 105, 33, 69], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 48480, "bbox": [1, 227, 294, 243], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 947, "bbox": [118, 159, 99, 17], "iscrowd": 0}, {"id": 6619389, "category_id": 25, "area": 990, "bbox": [115, 122, 102, 21], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 7666, "bbox": [2, 427, 286, 52], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1363, "bbox": [138, 134, 74, 31], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 7619, "bbox": [501, 232, 111, 80], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 7141, "bbox": [355, 254, 146, 57], "iscrowd": 0}]}, {"image_id": "ADE_val_00000512", "file_name": "ADE_val_00000512.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 54106, "bbox": [0, 67, 600, 229], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 57054, "bbox": [0, 263, 599, 137], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 66743, "bbox": [0, 0, 600, 133], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2794, "bbox": [466, 208, 65, 60], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 8032, "bbox": [127, 275, 246, 44], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 11920, "bbox": [2, 134, 140, 119], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4818, "bbox": [0, 263, 82, 103], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 5316, "bbox": [0, 101, 192, 50], "iscrowd": 0}, {"id": 793086, "category_id": 19, "area": 4654, "bbox": [148, 148, 41, 123], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 5535, "bbox": [182, 207, 150, 71], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 2845, "bbox": [2, 215, 110, 105], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1860, "bbox": [9, 186, 57, 89], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 551, "bbox": [192, 214, 38, 25], "iscrowd": 0}, {"id": 774655, "category_id": 40, "area": 510, "bbox": [241, 215, 32, 25], "iscrowd": 0}, {"id": 1754623, "category_id": 40, "area": 515, "bbox": [289, 214, 33, 25], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 9408, "bbox": [528, 193, 72, 156], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 1622, "bbox": [223, 248, 71, 53], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 513, "bbox": [556, 162, 17, 37], "iscrowd": 0}]}, {"image_id": "ADE_val_00000513", "file_name": "ADE_val_00000513.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18292, "bbox": [0, 8, 256, 192], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17597, "bbox": [0, 164, 256, 92], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 10924, "bbox": [0, 0, 256, 56], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3019, "bbox": [0, 139, 42, 86], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 8443, "bbox": [102, 68, 94, 96], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 3626, "bbox": [192, 129, 64, 79], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 1402, "bbox": [49, 122, 35, 47], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 770, "bbox": [150, 158, 50, 44], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 63, "bbox": [79, 29, 12, 7], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 838, "bbox": [41, 155, 61, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00000514", "file_name": "ADE_val_00000514.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 117056, "bbox": [0, 0, 768, 452], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 16502, "bbox": [1, 325, 766, 187], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 30456, "bbox": [0, 0, 722, 174], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6162, "bbox": [49, 254, 463, 162], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 8233, "bbox": [211, 446, 440, 66], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 2674, "bbox": [462, 261, 62, 93], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 5700, "bbox": [50, 334, 344, 82], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6240, "bbox": [330, 270, 90, 100], "iscrowd": 0}, {"id": 15933416, "category_id": 11, "area": 71205, "bbox": [523, 97, 236, 380], "iscrowd": 0}, {"id": 16516843, "category_id": 11, "area": 1212, "bbox": [257, 270, 69, 35], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 3408, "bbox": [189, 188, 52, 111], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1963, "bbox": [19, 350, 105, 29], "iscrowd": 0}, {"id": 5243135, "category_id": 16, "area": 384, "bbox": [94, 288, 29, 23], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1388, "bbox": [113, 283, 56, 43], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 502, "bbox": [324, 380, 24, 22], "iscrowd": 0}, {"id": 5308671, "category_id": 23, "area": 3625, "bbox": [355, 194, 59, 69], "iscrowd": 0}, {"id": 4260095, "category_id": 23, "area": 4891, "bbox": [48, 208, 96, 58], "iscrowd": 0}, {"id": 5177599, "category_id": 23, "area": 486, "bbox": [76, 333, 34, 22], "iscrowd": 0}, {"id": 4522239, "category_id": 23, "area": 212, "bbox": [95, 344, 20, 15], "iscrowd": 0}, {"id": 4325629, "category_id": 23, "area": 381, "bbox": [402, 409, 27, 42], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 27025, "bbox": [132, 293, 243, 175], "iscrowd": 0}, {"id": 16277531, "category_id": 24, "area": 20752, "bbox": [0, 382, 259, 130], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 945, "bbox": [206, 197, 10, 102], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1283, "bbox": [134, 0, 38, 127], "iscrowd": 0}, {"id": 64245, "category_id": 37, "area": 1402, "bbox": [271, 217, 48, 78], "iscrowd": 0}, {"id": 62444, "category_id": 37, "area": 1320, "bbox": [124, 218, 49, 64], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 774, "bbox": [461, 123, 32, 45], "iscrowd": 0}, {"id": 11490, "category_id": 39, "area": 14384, "bbox": [71, 1, 293, 121], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 456, "bbox": [496, 346, 43, 27], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 71, "bbox": [14, 143, 13, 7], "iscrowd": 0}, {"id": 50943, "category_id": 83, "area": 35, "bbox": [151, 154, 9, 4], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 1066, "bbox": [462, 190, 69, 82], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1520, "bbox": [511, 347, 28, 69], "iscrowd": 0}, {"id": 65395, "category_id": 113, "area": 1267, "bbox": [564, 94, 56, 32], "iscrowd": 0}, {"id": 65365, "category_id": 113, "area": 2410, "bbox": [627, 61, 84, 50], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 820, "bbox": [450, 408, 43, 28], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 176, "bbox": [368, 183, 23, 11], "iscrowd": 0}, {"id": 16720645, "category_id": 135, "area": 183, "bbox": [255, 208, 13, 22], "iscrowd": 0}, {"id": 16138240, "category_id": 135, "area": 150, "bbox": [309, 212, 13, 18], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 538, "bbox": [108, 254, 20, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00000515", "file_name": "ADE_val_00000515.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 66950, "bbox": [0, 17, 769, 333], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 31380, "bbox": [203, 361, 362, 151], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 73814, "bbox": [0, 0, 770, 119], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 22549, "bbox": [60, 71, 708, 215], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12697, "bbox": [84, 89, 110, 204], "iscrowd": 0}, {"id": 14544083, "category_id": 9, "area": 14084, "bbox": [2, 43, 79, 261], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3053, "bbox": [0, 377, 68, 133], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1595, "bbox": [699, 265, 57, 40], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6806, "bbox": [341, 146, 82, 83], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 60140, "bbox": [457, 273, 312, 239], "iscrowd": 0}, {"id": 15429392, "category_id": 24, "area": 55922, "bbox": [0, 276, 306, 235], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 8550, "bbox": [214, 173, 80, 128], "iscrowd": 0}, {"id": 13223150, "category_id": 28, "area": 9859, "bbox": [472, 171, 84, 132], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 628, "bbox": [238, 243, 35, 52], "iscrowd": 0}, {"id": 1962693, "category_id": 37, "area": 2893, "bbox": [0, 206, 58, 198], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 9846, "bbox": [323, 241, 120, 94], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 10821, "bbox": [304, 329, 155, 112], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 182, "bbox": [309, 53, 20, 12], "iscrowd": 0}, {"id": 42751, "category_id": 83, "area": 198, "bbox": [434, 53, 21, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00000516", "file_name": "ADE_val_00000516.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 44164, "bbox": [1, 66, 702, 297], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 216, "bbox": [348, 195, 11, 23], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21749, "bbox": [0, 282, 615, 229], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 499, "bbox": [348, 218, 9, 63], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 58466, "bbox": [0, 1, 578, 152], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 389, "bbox": [560, 241, 28, 27], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 16967, "bbox": [49, 429, 361, 82], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 3559, "bbox": [703, 164, 25, 162], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 11851, "bbox": [0, 124, 57, 288], "iscrowd": 0}, {"id": 14077671, "category_id": 9, "area": 15463, "bbox": [172, 163, 108, 199], "iscrowd": 0}, {"id": 13358297, "category_id": 9, "area": 933, "bbox": [408, 207, 21, 61], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 598, "bbox": [438, 246, 19, 35], "iscrowd": 0}, {"id": 16253172, "category_id": 11, "area": 183, "bbox": [409, 266, 12, 17], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 8160, "bbox": [281, 167, 184, 125], "iscrowd": 0}, {"id": 2355712, "category_id": 15, "area": 4244, "bbox": [359, 196, 51, 87], "iscrowd": 0}, {"id": 1962788, "category_id": 15, "area": 2680, "bbox": [538, 192, 21, 160], "iscrowd": 0}, {"id": 3079956, "category_id": 15, "area": 8954, "bbox": [465, 167, 62, 200], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 10933, "bbox": [31, 131, 57, 271], "iscrowd": 0}, {"id": 10239, "category_id": 19, "area": 6787, "bbox": [136, 164, 46, 177], "iscrowd": 0}, {"id": 204799, "category_id": 19, "area": 784, "bbox": [271, 177, 11, 113], "iscrowd": 0}, {"id": 1657085, "category_id": 19, "area": 886, "bbox": [410, 207, 28, 77], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1096, "bbox": [93, 150, 37, 35], "iscrowd": 0}, {"id": 3735807, "category_id": 23, "area": 1094, "bbox": [93, 183, 37, 32], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 22553, "bbox": [238, 277, 273, 147], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 33884, "bbox": [399, 317, 327, 194], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 58350, "bbox": [495, 1, 273, 510], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1331, "bbox": [284, 290, 43, 38], "iscrowd": 0}, {"id": 1096447, "category_id": 40, "area": 1207, "bbox": [343, 292, 38, 41], "iscrowd": 0}, {"id": 448767, "category_id": 40, "area": 789, "bbox": [413, 299, 43, 46], "iscrowd": 0}, {"id": 767732, "category_id": 40, "area": 3710, "bbox": [609, 334, 77, 67], "iscrowd": 0}, {"id": 1038071, "category_id": 40, "area": 7599, "bbox": [519, 397, 161, 73], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 19972, "bbox": [120, 354, 231, 146], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 949, "bbox": [209, 328, 54, 28], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 233, "bbox": [399, 180, 20, 14], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 3691, "bbox": [88, 337, 92, 66], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 573, "bbox": [221, 353, 25, 26], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 6589, "bbox": [212, 1, 185, 113], "iscrowd": 0}]}, {"image_id": "ADE_val_00000517", "file_name": "ADE_val_00000517.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 89946, "bbox": [0, 1, 770, 442], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 33680, "bbox": [1, 331, 581, 181], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 95414, "bbox": [0, 0, 748, 191], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 10346, "bbox": [29, 236, 461, 159], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 16980, "bbox": [287, 380, 277, 130], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 27158, "bbox": [99, 162, 195, 188], "iscrowd": 0}, {"id": 14667464, "category_id": 9, "area": 12713, "bbox": [302, 191, 132, 112], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 12690, "bbox": [456, 293, 252, 74], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 16330, "bbox": [2, 155, 70, 287], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 18507, "bbox": [201, 292, 249, 137], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 6233, "bbox": [581, 330, 189, 73], "iscrowd": 0}, {"id": 12253725, "category_id": 31, "area": 29075, "bbox": [503, 368, 267, 143], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 714, "bbox": [644, 263, 50, 50], "iscrowd": 0}, {"id": 65475, "category_id": 37, "area": 353, "bbox": [470, 263, 30, 37], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 486, "bbox": [671, 353, 34, 26], "iscrowd": 0}, {"id": 52991, "category_id": 40, "area": 2109, "bbox": [639, 397, 55, 60], "iscrowd": 0}, {"id": 1684478, "category_id": 40, "area": 620, "bbox": [387, 298, 37, 30], "iscrowd": 0}, {"id": 48622, "category_id": 40, "area": 1277, "bbox": [226, 309, 55, 47], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 8220, "bbox": [397, 345, 141, 91], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 2614, "bbox": [131, 379, 69, 64], "iscrowd": 0}, {"id": 16522751, "category_id": 126, "area": 5141, "bbox": [49, 346, 70, 104], "iscrowd": 0}, {"id": 16716537, "category_id": 126, "area": 160, "bbox": [466, 346, 12, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00000518", "file_name": "ADE_val_00000518.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 77801, "bbox": [0, 0, 693, 318], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 36126, "bbox": [1, 258, 691, 253], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 21046, "bbox": [70, 38, 612, 473], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 28204, "bbox": [64, 267, 629, 201], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 19061, "bbox": [394, 63, 146, 153], "iscrowd": 0}, {"id": 16187340, "category_id": 9, "area": 14313, "bbox": [88, 46, 103, 165], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2795, "bbox": [168, 210, 81, 83], "iscrowd": 0}, {"id": 4849919, "category_id": 16, "area": 12881, "bbox": [36, 267, 191, 186], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 12350, "bbox": [538, 29, 51, 273], "iscrowd": 0}, {"id": 10751, "category_id": 19, "area": 8633, "bbox": [42, 6, 55, 200], "iscrowd": 0}, {"id": 664058, "category_id": 19, "area": 1508, "bbox": [363, 63, 32, 122], "iscrowd": 0}, {"id": 1129215, "category_id": 19, "area": 5027, "bbox": [187, 34, 45, 177], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 58652, "bbox": [167, 305, 357, 207], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 362, "bbox": [176, 193, 27, 24], "iscrowd": 0}, {"id": 3671295, "category_id": 23, "area": 4372, "bbox": [249, 87, 59, 78], "iscrowd": 0}, {"id": 3014883, "category_id": 23, "area": 5766, "bbox": [607, 95, 84, 73], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 7599, "bbox": [249, 192, 211, 102], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 8451, "bbox": [1, 202, 211, 107], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1010, "bbox": [362, 141, 50, 58], "iscrowd": 0}, {"id": 1173954, "category_id": 37, "area": 4133, "bbox": [0, 77, 75, 249], "iscrowd": 0}, {"id": 786411, "category_id": 37, "area": 1867, "bbox": [188, 133, 59, 85], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1842, "bbox": [379, 191, 63, 49], "iscrowd": 0}, {"id": 377332, "category_id": 40, "area": 1371, "bbox": [266, 193, 53, 42], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 6400, "bbox": [273, 249, 159, 62], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 3908, "bbox": [606, 260, 86, 69], "iscrowd": 0}, {"id": 2786, "category_id": 67, "area": 1228, "bbox": [314, 211, 65, 38], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 817, "bbox": [653, 318, 40, 34], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 226, "bbox": [471, 268, 22, 17], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 551, "bbox": [332, 244, 34, 25], "iscrowd": 0}, {"id": 12117504, "category_id": 136, "area": 2669, "bbox": [76, 217, 47, 94], "iscrowd": 0}]}, {"image_id": "ADE_val_00000519", "file_name": "ADE_val_00000519.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 104609, "bbox": [0, 1, 711, 365], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 69997, "bbox": [0, 303, 711, 167], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 41383, "bbox": [19, 0, 692, 97], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1546, "bbox": [44, 153, 66, 53], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 5001, "bbox": [492, 135, 79, 67], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 30418, "bbox": [366, 229, 302, 205], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 20370, "bbox": [12, 64, 115, 298], "iscrowd": 0}, {"id": 3997951, "category_id": 25, "area": 7270, "bbox": [272, 121, 46, 191], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1403, "bbox": [657, 170, 46, 125], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 8060, "bbox": [423, 300, 125, 87], "iscrowd": 0}, {"id": 2273258, "category_id": 40, "area": 1803, "bbox": [20, 288, 96, 26], "iscrowd": 0}, {"id": 46335, "category_id": 40, "area": 1781, "bbox": [16, 308, 96, 28], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 282, "bbox": [28, 178, 23, 14], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 13332, "bbox": [148, 210, 118, 127], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1539, "bbox": [149, 111, 48, 68], "iscrowd": 0}, {"id": 655615, "category_id": 67, "area": 173, "bbox": [419, 274, 25, 11], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 424, "bbox": [62, 213, 17, 26], "iscrowd": 0}, {"id": 1490943, "category_id": 68, "area": 201, "bbox": [33, 232, 30, 8], "iscrowd": 0}, {"id": 40185, "category_id": 68, "area": 237, "bbox": [286, 190, 19, 15], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 288, "bbox": [167, 9, 26, 15], "iscrowd": 0}, {"id": 1755903, "category_id": 83, "area": 168, "bbox": [321, 68, 19, 12], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 6546, "bbox": [410, 368, 127, 80], "iscrowd": 0}, {"id": 64366, "category_id": 113, "area": 2043, "bbox": [16, 244, 63, 41], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 290, "bbox": [153, 176, 21, 18], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 454, "bbox": [38, 125, 29, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00000520", "file_name": "ADE_val_00000520.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 48840, "bbox": [0, 1, 767, 394], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 52025, "bbox": [1, 305, 767, 206], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 66757, "bbox": [88, 1, 680, 152], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 985, "bbox": [296, 265, 52, 28], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 37143, "bbox": [73, 329, 400, 181], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 8108, "bbox": [434, 146, 89, 111], "iscrowd": 0}, {"id": 14212296, "category_id": 9, "area": 14726, "bbox": [561, 154, 177, 120], "iscrowd": 0}, {"id": 15920849, "category_id": 9, "area": 62713, "bbox": [36, 32, 293, 279], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1162, "bbox": [654, 264, 46, 70], "iscrowd": 0}, {"id": 4721394, "category_id": 16, "area": 8608, "bbox": [311, 346, 153, 166], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 264, "bbox": [509, 243, 23, 14], "iscrowd": 0}, {"id": 21430, "category_id": 20, "area": 432, "bbox": [555, 249, 42, 20], "iscrowd": 0}, {"id": 1004729, "category_id": 20, "area": 768, "bbox": [653, 244, 23, 78], "iscrowd": 0}, {"id": 1716457, "category_id": 20, "area": 1774, "bbox": [606, 245, 62, 87], "iscrowd": 0}, {"id": 13272, "category_id": 20, "area": 2383, "bbox": [690, 246, 60, 91], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2404, "bbox": [346, 161, 41, 67], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 3405, "bbox": [347, 249, 211, 56], "iscrowd": 0}, {"id": 16744704, "category_id": 24, "area": 33859, "bbox": [365, 260, 284, 213], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 22564, "bbox": [1, 265, 203, 176], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1819, "bbox": [549, 217, 51, 50], "iscrowd": 0}, {"id": 455378, "category_id": 37, "area": 657, "bbox": [382, 200, 29, 50], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 643, "bbox": [363, 255, 27, 33], "iscrowd": 0}, {"id": 56319, "category_id": 40, "area": 1169, "bbox": [385, 255, 41, 38], "iscrowd": 0}, {"id": 49407, "category_id": 40, "area": 2663, "bbox": [36, 265, 80, 50], "iscrowd": 0}, {"id": 1300223, "category_id": 40, "area": 226, "bbox": [462, 274, 17, 22], "iscrowd": 0}, {"id": 2337791, "category_id": 40, "area": 92, "bbox": [425, 284, 48, 40], "iscrowd": 0}, {"id": 638719, "category_id": 40, "area": 1176, "bbox": [426, 285, 45, 38], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 385, "bbox": [347, 289, 28, 15], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 4051, "bbox": [518, 140, 50, 115], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 3858, "bbox": [268, 294, 160, 59], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 2021, "bbox": [350, 346, 91, 33], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 284, "bbox": [310, 286, 24, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00000521", "file_name": "ADE_val_00000521.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 103599, "bbox": [0, 1, 768, 460], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 20134, "bbox": [12, 313, 756, 198], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 64112, "bbox": [1, 0, 764, 189], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 309, "bbox": [502, 217, 31, 17], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 13346, "bbox": [266, 352, 501, 158], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1501, "bbox": [441, 173, 42, 43], "iscrowd": 0}, {"id": 16706006, "category_id": 9, "area": 2691, "bbox": [500, 153, 60, 58], "iscrowd": 0}, {"id": 15982819, "category_id": 9, "area": 6220, "bbox": [587, 122, 95, 81], "iscrowd": 0}, {"id": 16176880, "category_id": 9, "area": 2902, "bbox": [731, 101, 36, 87], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3137, "bbox": [83, 170, 44, 144], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 308, "bbox": [333, 303, 39, 9], "iscrowd": 0}, {"id": 7340799, "category_id": 16, "area": 17235, "bbox": [79, 360, 193, 151], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 2045, "bbox": [114, 202, 40, 85], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 701, "bbox": [176, 286, 55, 53], "iscrowd": 0}, {"id": 17336, "category_id": 20, "area": 1239, "bbox": [288, 285, 45, 53], "iscrowd": 0}, {"id": 16816, "category_id": 20, "area": 1453, "bbox": [346, 281, 50, 93], "iscrowd": 0}, {"id": 21204, "category_id": 20, "area": 1172, "bbox": [121, 290, 54, 72], "iscrowd": 0}, {"id": 1134014, "category_id": 20, "area": 10880, "bbox": [469, 315, 115, 112], "iscrowd": 0}, {"id": 13781, "category_id": 20, "area": 12561, "bbox": [0, 345, 193, 167], "iscrowd": 0}, {"id": 18664, "category_id": 20, "area": 326, "bbox": [180, 279, 37, 24], "iscrowd": 0}, {"id": 11467, "category_id": 20, "area": 697, "bbox": [259, 278, 37, 27], "iscrowd": 0}, {"id": 407246, "category_id": 20, "area": 15153, "bbox": [209, 292, 182, 203], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 12819, "bbox": [566, 219, 142, 106], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 10848, "bbox": [242, 155, 116, 195], "iscrowd": 0}, {"id": 5182207, "category_id": 25, "area": 355, "bbox": [506, 257, 32, 33], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 5534, "bbox": [73, 191, 139, 170], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 5338, "bbox": [0, 389, 82, 106], "iscrowd": 0}, {"id": 2213348, "category_id": 40, "area": 3137, "bbox": [241, 329, 81, 52], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 5740, "bbox": [438, 399, 76, 96], "iscrowd": 0}, {"id": 2686722, "category_id": 42, "area": 375, "bbox": [589, 293, 22, 24], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 14415, "bbox": [324, 415, 264, 96], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 762, "bbox": [165, 361, 61, 21], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 24974, "bbox": [353, 0, 237, 179], "iscrowd": 0}, {"id": 15534360, "category_id": 86, "area": 4170, "bbox": [223, 37, 78, 189], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 532, "bbox": [366, 207, 26, 40], "iscrowd": 0}, {"id": 15746572, "category_id": 135, "area": 331, "bbox": [200, 203, 19, 39], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 349, "bbox": [508, 232, 20, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00000522", "file_name": "ADE_val_00000522.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 142873, "bbox": [0, 0, 767, 391], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 67280, "bbox": [0, 364, 767, 148], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 32135, "bbox": [2, 1, 646, 102], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6934, "bbox": [254, 128, 56, 131], "iscrowd": 0}, {"id": 15912920, "category_id": 9, "area": 10859, "bbox": [338, 126, 69, 180], "iscrowd": 0}, {"id": 16442837, "category_id": 9, "area": 18416, "bbox": [6, 72, 111, 214], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3331, "bbox": [537, 311, 115, 83], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 16394, "bbox": [482, 97, 149, 129], "iscrowd": 0}, {"id": 2429693, "category_id": 23, "area": 4154, "bbox": [158, 123, 65, 73], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 44498, "bbox": [0, 252, 451, 192], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1959, "bbox": [0, 124, 119, 42], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1694, "bbox": [310, 250, 42, 57], "iscrowd": 0}, {"id": 1491455, "category_id": 40, "area": 824, "bbox": [233, 275, 46, 42], "iscrowd": 0}, {"id": 54526, "category_id": 40, "area": 2470, "bbox": [178, 262, 75, 57], "iscrowd": 0}, {"id": 1428223, "category_id": 40, "area": 2206, "bbox": [58, 260, 66, 71], "iscrowd": 0}, {"id": 1688831, "category_id": 40, "area": 589, "bbox": [266, 295, 59, 15], "iscrowd": 0}, {"id": 973815, "category_id": 40, "area": 1966, "bbox": [112, 294, 88, 33], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 29109, "bbox": [290, 344, 318, 164], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 82, "bbox": [314, 45, 16, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00000523", "file_name": "ADE_val_00000523.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6736, "bbox": [0, 54, 256, 117], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3133, "bbox": [0, 168, 255, 87], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 13863, "bbox": [1, 0, 254, 56], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2158, "bbox": [167, 62, 88, 72], "iscrowd": 0}, {"id": 13754594, "category_id": 9, "area": 4884, "bbox": [2, 63, 84, 90], "iscrowd": 0}, {"id": 16776179, "category_id": 9, "area": 1473, "bbox": [172, 68, 26, 63], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 976, "bbox": [1, 85, 28, 45], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 722, "bbox": [208, 81, 16, 52], "iscrowd": 0}, {"id": 3145474, "category_id": 15, "area": 846, "bbox": [237, 83, 19, 50], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 4452, "bbox": [177, 130, 79, 70], "iscrowd": 0}, {"id": 15753984, "category_id": 24, "area": 4692, "bbox": [1, 129, 82, 71], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 3604, "bbox": [182, 193, 72, 60], "iscrowd": 0}, {"id": 13759488, "category_id": 31, "area": 4298, "bbox": [0, 184, 80, 70], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 3053, "bbox": [94, 106, 72, 50], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 4259, "bbox": [78, 162, 109, 54], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 354, "bbox": [101, 135, 29, 18], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 254, "bbox": [138, 162, 31, 10], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 2665, "bbox": [103, 204, 63, 51], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 91, "bbox": [91, 71, 5, 24], "iscrowd": 0}, {"id": 16654358, "category_id": 135, "area": 75, "bbox": [159, 70, 5, 23], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 257, "bbox": [99, 88, 18, 18], "iscrowd": 0}, {"id": 15400721, "category_id": 136, "area": 295, "bbox": [130, 84, 19, 21], "iscrowd": 0}, {"id": 14483200, "category_id": 136, "area": 111, "bbox": [148, 95, 13, 11], "iscrowd": 0}, {"id": 12182285, "category_id": 136, "area": 195, "bbox": [2, 117, 14, 18], "iscrowd": 0}, {"id": 14286592, "category_id": 136, "area": 330, "bbox": [109, 153, 17, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00000524", "file_name": "ADE_val_00000524.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 36598, "bbox": [0, 0, 683, 232], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 24646, "bbox": [0, 295, 683, 216], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 35028, "bbox": [49, 334, 409, 176], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 22594, "bbox": [275, 0, 408, 93], "iscrowd": 0}, {"id": 16772845, "category_id": 9, "area": 43248, "bbox": [0, 67, 268, 271], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 81877, "bbox": [272, 57, 410, 258], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 9642, "bbox": [366, 434, 163, 77], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 28152, "bbox": [21, 231, 287, 156], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 48012, "bbox": [351, 280, 323, 231], "iscrowd": 0}, {"id": 14220800, "category_id": 31, "area": 6266, "bbox": [470, 268, 213, 153], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1364, "bbox": [260, 149, 32, 82], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 7176, "bbox": [228, 305, 174, 104], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1115, "bbox": [298, 251, 55, 46], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 951, "bbox": [306, 286, 28, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00000525", "file_name": "ADE_val_00000525.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 47690, "bbox": [213, 0, 554, 457], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 22776, "bbox": [0, 284, 768, 228], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 80176, "bbox": [2, 0, 753, 177], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 21099, "bbox": [104, 292, 310, 219], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 15712, "bbox": [688, 35, 79, 379], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2160, "bbox": [458, 156, 64, 34], "iscrowd": 0}, {"id": 16711934, "category_id": 11, "area": 2112, "bbox": [435, 154, 23, 95], "iscrowd": 0}, {"id": 16711883, "category_id": 11, "area": 3340, "bbox": [434, 248, 101, 51], "iscrowd": 0}, {"id": 16713167, "category_id": 11, "area": 808, "bbox": [303, 251, 74, 38], "iscrowd": 0}, {"id": 16714707, "category_id": 11, "area": 59825, "bbox": [0, 21, 214, 445], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 500, "bbox": [301, 254, 30, 56], "iscrowd": 0}, {"id": 6947045, "category_id": 16, "area": 7054, "bbox": [532, 447, 234, 64], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1306, "bbox": [263, 241, 47, 73], "iscrowd": 0}, {"id": 21184, "category_id": 20, "area": 1371, "bbox": [316, 241, 41, 72], "iscrowd": 0}, {"id": 2049228, "category_id": 20, "area": 699, "bbox": [279, 239, 34, 38], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1802, "bbox": [219, 180, 25, 80], "iscrowd": 0}, {"id": 2883815, "category_id": 23, "area": 332, "bbox": [400, 172, 8, 58], "iscrowd": 0}, {"id": 2625791, "category_id": 23, "area": 1352, "bbox": [84, 178, 28, 54], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 45673, "bbox": [392, 263, 342, 248], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 3140, "bbox": [458, 190, 57, 59], "iscrowd": 0}, {"id": 15455679, "category_id": 28, "area": 2688, "bbox": [296, 190, 71, 43], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 173, "bbox": [359, 217, 14, 33], "iscrowd": 0}, {"id": 521961, "category_id": 37, "area": 180, "bbox": [284, 219, 16, 17], "iscrowd": 0}, {"id": 1572841, "category_id": 37, "area": 366, "bbox": [300, 154, 27, 56], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1951, "bbox": [452, 294, 57, 66], "iscrowd": 0}, {"id": 56063, "category_id": 40, "area": 3665, "bbox": [486, 310, 88, 62], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 156, "bbox": [474, 229, 28, 23], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 18492, "bbox": [141, 355, 219, 148], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 20150, "bbox": [527, 1, 239, 354], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 5211, "bbox": [85, 246, 74, 83], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 111, "bbox": [455, 223, 5, 27], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 673, "bbox": [88, 97, 48, 30], "iscrowd": 0}, {"id": 1566555, "category_id": 113, "area": 430, "bbox": [128, 121, 43, 20], "iscrowd": 0}, {"id": 65378, "category_id": 113, "area": 630, "bbox": [86, 146, 66, 21], "iscrowd": 0}, {"id": 850506, "category_id": 113, "area": 329, "bbox": [167, 342, 27, 26], "iscrowd": 0}, {"id": 1567062, "category_id": 113, "area": 580, "bbox": [122, 362, 39, 34], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 11638, "bbox": [624, 342, 78, 169], "iscrowd": 0}, {"id": 12320521, "category_id": 136, "area": 224, "bbox": [310, 236, 13, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00000526", "file_name": "ADE_val_00000526.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 94083, "bbox": [0, 0, 512, 567], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 31636, "bbox": [96, 443, 416, 324], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 61861, "bbox": [0, 0, 512, 267], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 651, "bbox": [155, 471, 39, 35], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 35225, "bbox": [110, 456, 378, 309], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 22462, "bbox": [65, 182, 226, 272], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 6588, "bbox": [336, 445, 160, 113], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1072, "bbox": [247, 92, 33, 42], "iscrowd": 0}, {"id": 14870756, "category_id": 9, "area": 438, "bbox": [361, 414, 16, 31], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1513, "bbox": [383, 416, 46, 36], "iscrowd": 0}, {"id": 16187592, "category_id": 11, "area": 254, "bbox": [457, 434, 15, 21], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2569, "bbox": [243, 380, 37, 75], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5360, "bbox": [144, 547, 64, 128], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 21361, "bbox": [0, 543, 160, 225], "iscrowd": 0}, {"id": 20705, "category_id": 20, "area": 1939, "bbox": [336, 454, 50, 92], "iscrowd": 0}, {"id": 1529775, "category_id": 20, "area": 2525, "bbox": [380, 460, 57, 103], "iscrowd": 0}, {"id": 1912538, "category_id": 20, "area": 2939, "bbox": [437, 469, 56, 110], "iscrowd": 0}, {"id": 1333471, "category_id": 20, "area": 16241, "bbox": [220, 509, 134, 225], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 968, "bbox": [9, 374, 22, 49], "iscrowd": 0}, {"id": 3408127, "category_id": 23, "area": 283, "bbox": [1, 374, 6, 50], "iscrowd": 0}, {"id": 1376511, "category_id": 23, "area": 698, "bbox": [425, 193, 20, 47], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 14308, "bbox": [0, 442, 178, 148], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 393, "bbox": [30, 398, 23, 53], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 901, "bbox": [216, 64, 33, 68], "iscrowd": 0}, {"id": 470512, "category_id": 39, "area": 27116, "bbox": [73, 205, 429, 217], "iscrowd": 0}, {"id": 1188078, "category_id": 39, "area": 6850, "bbox": [59, 435, 195, 87], "iscrowd": 0}, {"id": 14587, "category_id": 39, "area": 11727, "bbox": [74, 134, 218, 149], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 5690, "bbox": [26, 566, 74, 128], "iscrowd": 0}, {"id": 644329, "category_id": 40, "area": 396, "bbox": [1, 442, 31, 35], "iscrowd": 0}, {"id": 1168383, "category_id": 40, "area": 172, "bbox": [3, 450, 20, 31], "iscrowd": 0}, {"id": 55551, "category_id": 40, "area": 1230, "bbox": [8, 446, 43, 39], "iscrowd": 0}, {"id": 1877995, "category_id": 40, "area": 251, "bbox": [43, 482, 38, 29], "iscrowd": 0}, {"id": 1881848, "category_id": 40, "area": 170, "bbox": [81, 470, 26, 17], "iscrowd": 0}, {"id": 1230832, "category_id": 40, "area": 871, "bbox": [91, 465, 37, 38], "iscrowd": 0}, {"id": 964321, "category_id": 40, "area": 3641, "bbox": [252, 538, 75, 72], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 229, "bbox": [471, 436, 24, 16], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 71, "bbox": [392, 182, 10, 9], "iscrowd": 0}, {"id": 49663, "category_id": 83, "area": 53, "bbox": [345, 200, 9, 7], "iscrowd": 0}, {"id": 1222143, "category_id": 83, "area": 47, "bbox": [305, 213, 9, 8], "iscrowd": 0}, {"id": 48639, "category_id": 83, "area": 42, "bbox": [272, 224, 7, 8], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 1163, "bbox": [296, 395, 21, 64], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 574, "bbox": [429, 417, 34, 19], "iscrowd": 0}, {"id": 63300, "category_id": 119, "area": 509, "bbox": [429, 435, 29, 20], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 254, "bbox": [176, 500, 16, 35], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 280, "bbox": [429, 341, 28, 24], "iscrowd": 0}, {"id": 16729608, "category_id": 135, "area": 260, "bbox": [375, 345, 22, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00000527", "file_name": "ADE_val_00000527.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 58677, "bbox": [2, 73, 680, 285], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 2142, "bbox": [493, 180, 59, 49], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 32341, "bbox": [0, 287, 546, 225], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1425, "bbox": [493, 191, 33, 73], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 79304, "bbox": [0, 0, 683, 181], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1908, "bbox": [493, 260, 62, 42], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 10960, "bbox": [103, 335, 250, 177], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 765, "bbox": [194, 152, 38, 24], "iscrowd": 0}, {"id": 16585204, "category_id": 11, "area": 2672, "bbox": [414, 160, 31, 98], "iscrowd": 0}, {"id": 16717763, "category_id": 11, "area": 2330, "bbox": [444, 164, 24, 136], "iscrowd": 0}, {"id": 15736539, "category_id": 11, "area": 940, "bbox": [416, 264, 35, 41], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 15535, "bbox": [155, 131, 148, 221], "iscrowd": 0}, {"id": 3466276, "category_id": 15, "area": 592, "bbox": [487, 186, 6, 99], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 364, "bbox": [415, 257, 61, 10], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 765, "bbox": [434, 259, 34, 47], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1386, "bbox": [517, 229, 37, 44], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 524, "bbox": [588, 254, 28, 28], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 63648, "bbox": [209, 270, 474, 242], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 35003, "bbox": [0, 90, 132, 308], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2375, "bbox": [600, 186, 53, 90], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1416, "bbox": [532, 288, 78, 50], "iscrowd": 0}, {"id": 2336765, "category_id": 40, "area": 957, "bbox": [559, 288, 57, 50], "iscrowd": 0}, {"id": 514559, "category_id": 40, "area": 455, "bbox": [605, 291, 43, 27], "iscrowd": 0}, {"id": 56829, "category_id": 40, "area": 1118, "bbox": [562, 307, 52, 48], "iscrowd": 0}, {"id": 44031, "category_id": 40, "area": 334, "bbox": [610, 305, 41, 16], "iscrowd": 0}, {"id": 972265, "category_id": 40, "area": 1120, "bbox": [578, 314, 72, 46], "iscrowd": 0}, {"id": 1943269, "category_id": 40, "area": 835, "bbox": [545, 348, 56, 28], "iscrowd": 0}, {"id": 1165822, "category_id": 40, "area": 307, "bbox": [550, 372, 40, 20], "iscrowd": 0}, {"id": 1167103, "category_id": 40, "area": 10164, "bbox": [385, 358, 191, 92], "iscrowd": 0}, {"id": 50943, "category_id": 40, "area": 230, "bbox": [649, 301, 31, 16], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 4600, "bbox": [192, 174, 39, 120], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 5995, "bbox": [348, 301, 138, 63], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 85, "bbox": [451, 66, 14, 7], "iscrowd": 0}, {"id": 965631, "category_id": 83, "area": 84, "bbox": [445, 94, 13, 7], "iscrowd": 0}, {"id": 41727, "category_id": 83, "area": 65, "bbox": [516, 78, 13, 6], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 4323, "bbox": [304, 266, 78, 69], "iscrowd": 0}]}, {"image_id": "ADE_val_00000528", "file_name": "ADE_val_00000528.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 56180, "bbox": [1, 1, 682, 342], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 34698, "bbox": [3, 359, 680, 153], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 10383, "bbox": [1, 158, 162, 232], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 11580, "bbox": [73, 278, 361, 223], "iscrowd": 0}, {"id": 3473661, "category_id": 16, "area": 2291, "bbox": [447, 187, 97, 154], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6366, "bbox": [118, 52, 87, 74], "iscrowd": 0}, {"id": 3997949, "category_id": 23, "area": 15522, "bbox": [265, 1, 172, 94], "iscrowd": 0}, {"id": 3277049, "category_id": 23, "area": 3297, "bbox": [165, 1, 86, 42], "iscrowd": 0}, {"id": 5051376, "category_id": 23, "area": 1746, "bbox": [92, 1, 59, 32], "iscrowd": 0}, {"id": 4006128, "category_id": 23, "area": 37008, "bbox": [520, 1, 161, 242], "iscrowd": 0}, {"id": 5316839, "category_id": 23, "area": 3267, "bbox": [445, 245, 60, 90], "iscrowd": 0}, {"id": 4129507, "category_id": 23, "area": 1049, "bbox": [475, 135, 47, 50], "iscrowd": 0}, {"id": 1775103, "category_id": 23, "area": 6288, "bbox": [1, 1, 61, 106], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 38198, "bbox": [1, 147, 457, 241], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 9794, "bbox": [478, 324, 205, 71], "iscrowd": 0}, {"id": 1359871, "category_id": 40, "area": 10887, "bbox": [480, 376, 203, 87], "iscrowd": 0}, {"id": 703999, "category_id": 40, "area": 12302, "bbox": [276, 386, 258, 78], "iscrowd": 0}, {"id": 842982, "category_id": 40, "area": 19350, "bbox": [253, 431, 329, 81], "iscrowd": 0}, {"id": 1690100, "category_id": 40, "area": 5286, "bbox": [310, 197, 112, 90], "iscrowd": 0}, {"id": 51696, "category_id": 40, "area": 1768, "bbox": [2, 214, 27, 99], "iscrowd": 0}, {"id": 57087, "category_id": 40, "area": 12182, "bbox": [283, 329, 241, 72], "iscrowd": 0}, {"id": 51450, "category_id": 40, "area": 5167, "bbox": [19, 213, 86, 96], "iscrowd": 0}, {"id": 1750015, "category_id": 40, "area": 1137, "bbox": [73, 207, 52, 86], "iscrowd": 0}, {"id": 2144482, "category_id": 40, "area": 4948, "bbox": [522, 284, 141, 49], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 844, "bbox": [408, 39, 57, 112], "iscrowd": 0}, {"id": 1769711, "category_id": 67, "area": 9543, "bbox": [174, 169, 186, 99], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 4801, "bbox": [3, 439, 90, 69], "iscrowd": 0}, {"id": 39911, "category_id": 68, "area": 1636, "bbox": [311, 276, 93, 27], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 2240, "bbox": [491, 276, 78, 62], "iscrowd": 0}, {"id": 57942, "category_id": 113, "area": 1477, "bbox": [444, 150, 55, 41], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 3011, "bbox": [235, 243, 63, 56], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 947, "bbox": [1, 408, 70, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00000529", "file_name": "ADE_val_00000529.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 68531, "bbox": [2, 1, 636, 352], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 28571, "bbox": [2, 291, 616, 188], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 56983, "bbox": [2, 2, 635, 132], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 14907, "bbox": [118, 339, 265, 134], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 9539, "bbox": [347, 144, 99, 106], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 10517, "bbox": [460, 196, 144, 115], "iscrowd": 0}, {"id": 15865304, "category_id": 11, "area": 18188, "bbox": [496, 112, 142, 368], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6274, "bbox": [2, 400, 96, 80], "iscrowd": 0}, {"id": 5570815, "category_id": 16, "area": 5958, "bbox": [458, 303, 159, 51], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1840, "bbox": [329, 142, 20, 105], "iscrowd": 0}, {"id": 1265407, "category_id": 19, "area": 2774, "bbox": [438, 140, 31, 113], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4799, "bbox": [491, 338, 128, 73], "iscrowd": 0}, {"id": 21981, "category_id": 20, "area": 5489, "bbox": [51, 350, 69, 128], "iscrowd": 0}, {"id": 15043, "category_id": 20, "area": 1352, "bbox": [554, 284, 58, 36], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6074, "bbox": [57, 143, 82, 84], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 10842, "bbox": [251, 238, 210, 91], "iscrowd": 0}, {"id": 16217856, "category_id": 24, "area": 16415, "bbox": [1, 249, 211, 154], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1492, "bbox": [136, 187, 54, 90], "iscrowd": 0}, {"id": 1834986, "category_id": 37, "area": 706, "bbox": [555, 145, 37, 65], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 804, "bbox": [129, 260, 44, 38], "iscrowd": 0}, {"id": 53759, "category_id": 40, "area": 1781, "bbox": [104, 267, 46, 42], "iscrowd": 0}, {"id": 179956, "category_id": 40, "area": 1010, "bbox": [5, 291, 58, 41], "iscrowd": 0}, {"id": 44287, "category_id": 40, "area": 1161, "bbox": [27, 283, 57, 49], "iscrowd": 0}, {"id": 51953, "category_id": 40, "area": 1313, "bbox": [276, 252, 60, 43], "iscrowd": 0}, {"id": 48127, "category_id": 40, "area": 1370, "bbox": [385, 260, 66, 44], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 9015, "bbox": [144, 321, 145, 102], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 6126, "bbox": [406, 296, 97, 128], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 440, "bbox": [216, 3, 34, 17], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 2997, "bbox": [510, 239, 60, 62], "iscrowd": 0}]}, {"image_id": "ADE_val_00000530", "file_name": "ADE_val_00000530.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 130484, "bbox": [0, 0, 589, 415], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21800, "bbox": [1, 354, 517, 156], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 8309, "bbox": [84, 0, 360, 46], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 17511, "bbox": [296, 205, 292, 231], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 16354, "bbox": [1, 432, 395, 79], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6705, "bbox": [241, 266, 125, 96], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 22545, "bbox": [0, 268, 282, 220], "iscrowd": 0}, {"id": 16740890, "category_id": 24, "area": 7412, "bbox": [515, 389, 74, 122], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2860, "bbox": [234, 179, 75, 97], "iscrowd": 0}, {"id": 1310203, "category_id": 37, "area": 542, "bbox": [240, 229, 30, 44], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1319, "bbox": [369, 385, 49, 35], "iscrowd": 0}, {"id": 1113088, "category_id": 42, "area": 548, "bbox": [375, 370, 40, 17], "iscrowd": 0}, {"id": 2221323, "category_id": 42, "area": 727, "bbox": [369, 352, 49, 22], "iscrowd": 0}, {"id": 1371673, "category_id": 42, "area": 1025, "bbox": [372, 331, 42, 28], "iscrowd": 0}, {"id": 1441549, "category_id": 42, "area": 323, "bbox": [448, 132, 30, 12], "iscrowd": 0}, {"id": 458496, "category_id": 42, "area": 578, "bbox": [442, 144, 35, 18], "iscrowd": 0}, {"id": 982785, "category_id": 42, "area": 1295, "bbox": [432, 161, 45, 31], "iscrowd": 0}, {"id": 2877184, "category_id": 42, "area": 466, "bbox": [483, 141, 38, 14], "iscrowd": 0}, {"id": 1441030, "category_id": 42, "area": 1782, "bbox": [474, 153, 63, 38], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 2689, "bbox": [358, 251, 42, 116], "iscrowd": 0}, {"id": 722159, "category_id": 43, "area": 2147, "bbox": [408, 320, 34, 109], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 18315, "bbox": [35, 349, 319, 162], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 4605, "bbox": [100, 249, 98, 76], "iscrowd": 0}, {"id": 852479, "category_id": 67, "area": 607, "bbox": [183, 315, 29, 33], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 251, "bbox": [285, 273, 38, 9], "iscrowd": 0}, {"id": 436210, "category_id": 68, "area": 2452, "bbox": [216, 350, 100, 36], "iscrowd": 0}, {"id": 49151, "category_id": 68, "area": 1702, "bbox": [216, 320, 81, 36], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 2474, "bbox": [490, 392, 64, 69], "iscrowd": 0}, {"id": 15471609, "category_id": 126, "area": 566, "bbox": [322, 251, 25, 28], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 2182, "bbox": [138, 310, 40, 84], "iscrowd": 0}, {"id": 15204096, "category_id": 136, "area": 604, "bbox": [192, 339, 28, 53], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 833, "bbox": [65, 334, 27, 50], "iscrowd": 0}, {"id": 11525938, "category_id": 148, "area": 592, "bbox": [89, 336, 22, 45], "iscrowd": 0}, {"id": 12891442, "category_id": 148, "area": 734, "bbox": [112, 330, 26, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00000531", "file_name": "ADE_val_00000531.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 55615, "bbox": [1, 74, 681, 355], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 18741, "bbox": [55, 167, 329, 173], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 27542, "bbox": [1, 348, 548, 163], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 91534, "bbox": [0, 0, 682, 169], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1720, "bbox": [247, 225, 241, 86], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 14432, "bbox": [127, 349, 333, 94], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 14175, "bbox": [53, 123, 191, 250], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 11896, "bbox": [621, 75, 61, 198], "iscrowd": 0}, {"id": 16384970, "category_id": 11, "area": 514, "bbox": [460, 329, 15, 77], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1778, "bbox": [147, 231, 32, 90], "iscrowd": 0}, {"id": 5115024, "category_id": 13, "area": 822, "bbox": [190, 247, 21, 64], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 9202, "bbox": [278, 164, 109, 187], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5383, "bbox": [0, 339, 189, 172], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2084, "bbox": [482, 339, 42, 90], "iscrowd": 0}, {"id": 1463993, "category_id": 20, "area": 3680, "bbox": [375, 301, 80, 70], "iscrowd": 0}, {"id": 23255, "category_id": 20, "area": 5447, "bbox": [438, 363, 59, 148], "iscrowd": 0}, {"id": 20172, "category_id": 20, "area": 8993, "bbox": [66, 359, 127, 152], "iscrowd": 0}, {"id": 11958, "category_id": 20, "area": 1985, "bbox": [0, 406, 27, 93], "iscrowd": 0}, {"id": 1850079, "category_id": 20, "area": 9051, "bbox": [33, 336, 104, 132], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 4426, "bbox": [408, 189, 64, 70], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 4026, "bbox": [108, 309, 167, 64], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 2032, "bbox": [475, 198, 132, 21], "iscrowd": 0}, {"id": 3806207, "category_id": 25, "area": 1689, "bbox": [476, 298, 132, 20], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 853, "bbox": [16, 35, 24, 160], "iscrowd": 0}, {"id": 58055, "category_id": 37, "area": 449, "bbox": [0, 45, 15, 152], "iscrowd": 0}, {"id": 59895, "category_id": 37, "area": 698, "bbox": [43, 30, 20, 163], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 3751, "bbox": [310, 269, 75, 61], "iscrowd": 0}, {"id": 9215, "category_id": 39, "area": 1372, "bbox": [55, 274, 174, 62], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 706, "bbox": [197, 310, 34, 27], "iscrowd": 0}, {"id": 42751, "category_id": 40, "area": 722, "bbox": [229, 311, 34, 24], "iscrowd": 0}, {"id": 1485055, "category_id": 40, "area": 240, "bbox": [135, 325, 44, 27], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 3519, "bbox": [287, 179, 24, 155], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 17734, "bbox": [472, 329, 210, 182], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1231, "bbox": [645, 311, 37, 119], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 3796, "bbox": [219, 335, 105, 49], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 117, "bbox": [536, 115, 18, 8], "iscrowd": 0}, {"id": 40703, "category_id": 83, "area": 115, "bbox": [535, 214, 19, 7], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 1271, "bbox": [655, 395, 27, 78], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1956, "bbox": [584, 455, 98, 46], "iscrowd": 0}, {"id": 65350, "category_id": 138, "area": 519, "bbox": [0, 343, 68, 14], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 2625, "bbox": [520, 391, 105, 36], "iscrowd": 0}, {"id": 10223387, "category_id": 143, "area": 1337, "bbox": [546, 361, 79, 22], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 124, "bbox": [640, 335, 8, 22], "iscrowd": 0}, {"id": 11777307, "category_id": 148, "area": 737, "bbox": [642, 387, 25, 68], "iscrowd": 0}, {"id": 13548835, "category_id": 148, "area": 509, "bbox": [620, 411, 26, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00000532", "file_name": "ADE_val_00000532.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 55531, "bbox": [0, 61, 777, 273], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 117058, "bbox": [0, 284, 777, 227], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 53253, "bbox": [0, 0, 778, 80], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1775, "bbox": [164, 168, 571, 55], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 22588, "bbox": [90, 323, 481, 97], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 1405, "bbox": [190, 232, 57, 53], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 13146, "bbox": [626, 94, 123, 133], "iscrowd": 0}, {"id": 14797823, "category_id": 9, "area": 43895, "bbox": [165, 85, 353, 158], "iscrowd": 0}, {"id": 15529726, "category_id": 9, "area": 5777, "bbox": [1, 81, 54, 169], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 10933, "bbox": [531, 94, 69, 168], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1590, "bbox": [164, 285, 90, 42], "iscrowd": 0}, {"id": 4523263, "category_id": 16, "area": 1078, "bbox": [662, 235, 90, 86], "iscrowd": 0}, {"id": 4985588, "category_id": 16, "area": 2545, "bbox": [455, 239, 63, 85], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 980, "bbox": [726, 206, 40, 98], "iscrowd": 0}, {"id": 17898, "category_id": 20, "area": 2032, "bbox": [746, 210, 31, 98], "iscrowd": 0}, {"id": 17856, "category_id": 20, "area": 1635, "bbox": [666, 205, 54, 95], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 604, "bbox": [218, 209, 26, 26], "iscrowd": 0}, {"id": 3541503, "category_id": 23, "area": 1293, "bbox": [262, 201, 42, 32], "iscrowd": 0}, {"id": 2949363, "category_id": 23, "area": 1289, "bbox": [320, 199, 43, 32], "iscrowd": 0}, {"id": 4194535, "category_id": 23, "area": 1255, "bbox": [379, 189, 32, 41], "iscrowd": 0}, {"id": 2097380, "category_id": 23, "area": 757, "bbox": [447, 195, 26, 33], "iscrowd": 0}, {"id": 3735807, "category_id": 23, "area": 1796, "bbox": [7, 200, 46, 47], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 15647, "bbox": [202, 230, 275, 100], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 9320, "bbox": [84, 277, 142, 135], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 645, "bbox": [722, 68, 36, 113], "iscrowd": 0}, {"id": 983024, "category_id": 37, "area": 740, "bbox": [482, 178, 18, 50], "iscrowd": 0}, {"id": 327643, "category_id": 37, "area": 293, "bbox": [149, 183, 42, 101], "iscrowd": 0}, {"id": 2225379, "category_id": 37, "area": 4601, "bbox": [47, 139, 46, 192], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1000, "bbox": [236, 253, 49, 41], "iscrowd": 0}, {"id": 1559526, "category_id": 40, "area": 1885, "bbox": [287, 242, 47, 46], "iscrowd": 0}, {"id": 51199, "category_id": 40, "area": 1127, "bbox": [399, 239, 51, 46], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 2043, "bbox": [1, 256, 56, 50], "iscrowd": 0}, {"id": 1572608, "category_id": 51, "area": 1068, "bbox": [636, 233, 32, 36], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 181, "bbox": [493, 238, 20, 14], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2334, "bbox": [467, 24, 68, 69], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 5309, "bbox": [393, 298, 100, 66], "iscrowd": 0}, {"id": 35327, "category_id": 98, "area": 4414, "bbox": [232, 325, 68, 72], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 176, "bbox": [428, 214, 14, 16], "iscrowd": 0}, {"id": 16125934, "category_id": 126, "area": 204, "bbox": [184, 223, 14, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000533", "file_name": "ADE_val_00000533.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 133681, "bbox": [1, 74, 648, 273], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 108039, "bbox": [0, 316, 683, 196], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 52696, "bbox": [0, 1, 683, 92], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 16447, "bbox": [444, 339, 238, 171], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 7367, "bbox": [647, 121, 36, 228], "iscrowd": 0}, {"id": 4259584, "category_id": 15, "area": 7670, "bbox": [173, 157, 49, 173], "iscrowd": 0}, {"id": 4389632, "category_id": 15, "area": 5970, "bbox": [443, 159, 43, 163], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1610, "bbox": [460, 260, 75, 75], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1405, "bbox": [299, 0, 71, 43], "iscrowd": 0}, {"id": 1900491, "category_id": 37, "area": 794, "bbox": [303, 43, 54, 39], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 2537, "bbox": [517, 270, 41, 68], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 261, "bbox": [502, 246, 15, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00000534", "file_name": "ADE_val_00000534.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14046, "bbox": [0, 43, 349, 113], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 24130, "bbox": [0, 132, 350, 98], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4621, "bbox": [1, 54, 81, 128], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 15653, "bbox": [0, 0, 350, 118], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 1081, "bbox": [193, 157, 93, 24], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 857, "bbox": [322, 161, 28, 44], "iscrowd": 0}, {"id": 5317617, "category_id": 16, "area": 120, "bbox": [201, 139, 10, 17], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 446, "bbox": [178, 134, 24, 25], "iscrowd": 0}, {"id": 11491, "category_id": 20, "area": 473, "bbox": [140, 139, 27, 30], "iscrowd": 0}, {"id": 1190372, "category_id": 20, "area": 1415, "bbox": [0, 143, 38, 44], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 946, "bbox": [84, 141, 41, 31], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 240, "bbox": [81, 122, 19, 20], "iscrowd": 0}, {"id": 65530, "category_id": 37, "area": 164, "bbox": [191, 120, 16, 14], "iscrowd": 0}, {"id": 65248, "category_id": 37, "area": 1049, "bbox": [321, 112, 29, 57], "iscrowd": 0}, {"id": 327667, "category_id": 37, "area": 397, "bbox": [124, 120, 22, 30], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1388, "bbox": [4, 45, 34, 110], "iscrowd": 0}, {"id": 3080447, "category_id": 43, "area": 909, "bbox": [142, 107, 29, 39], "iscrowd": 0}, {"id": 4201727, "category_id": 43, "area": 409, "bbox": [211, 111, 16, 27], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 386, "bbox": [116, 148, 39, 26], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 8304, "bbox": [153, 0, 180, 71], "iscrowd": 0}, {"id": 16721432, "category_id": 86, "area": 1914, "bbox": [241, 56, 100, 39], "iscrowd": 0}]}, {"image_id": "ADE_val_00000535", "file_name": "ADE_val_00000535.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 85635, "bbox": [1, 83, 681, 261], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 106860, "bbox": [0, 285, 682, 226], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 55160, "bbox": [0, 1, 682, 110], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 35154, "bbox": [3, 142, 625, 181], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6860, "bbox": [0, 205, 69, 106], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 5898, "bbox": [304, 211, 114, 143], "iscrowd": 0}, {"id": 4587264, "category_id": 15, "area": 10650, "bbox": [505, 215, 91, 129], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 3422, "bbox": [67, 138, 50, 189], "iscrowd": 0}, {"id": 2237429, "category_id": 19, "area": 4666, "bbox": [641, 148, 31, 171], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 468, "bbox": [544, 181, 21, 24], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 736, "bbox": [366, 284, 46, 20], "iscrowd": 0}, {"id": 61939, "category_id": 54, "area": 11479, "bbox": [560, 318, 123, 142], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 3772, "bbox": [96, 315, 143, 36], "iscrowd": 0}, {"id": 65487, "category_id": 70, "area": 3467, "bbox": [0, 324, 74, 61], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 10880, "bbox": [348, 1, 137, 143], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 127, "bbox": [476, 214, 10, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00000536", "file_name": "ADE_val_00000536.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6227, "bbox": [1, 0, 508, 21], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 48681, "bbox": [297, 7, 93, 673], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 16074, "bbox": [229, 162, 73, 394], "iscrowd": 0}]}, {"image_id": "ADE_val_00000537", "file_name": "ADE_val_00000537.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 7085, "bbox": [26, 251, 164, 58], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 39604, "bbox": [2, 0, 207, 297], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5965, "bbox": [0, 195, 209, 115], "iscrowd": 0}, {"id": 12105983, "category_id": 85, "area": 11045, "bbox": [76, 1, 65, 252], "iscrowd": 0}]}, {"image_id": "ADE_val_00000538", "file_name": "ADE_val_00000538.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 28024, "bbox": [0, 0, 499, 223], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 14401, "bbox": [0, 15, 92, 220], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 33587, "bbox": [0, 74, 472, 241], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 79361, "bbox": [0, 0, 499, 314], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 290, "bbox": [297, 133, 33, 15], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 226, "bbox": [299, 145, 30, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00000539", "file_name": "ADE_val_00000539.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 96845, "bbox": [0, 0, 745, 282], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1260, "bbox": [0, 259, 33, 50], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 218, "bbox": [0, 308, 32, 11], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 56562, "bbox": [0, 319, 745, 192], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 217997, "bbox": [32, 46, 713, 435], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 76, "bbox": [11, 308, 20, 7], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 6581, "bbox": [56, 385, 119, 85], "iscrowd": 0}]}, {"image_id": "ADE_val_00000540", "file_name": "ADE_val_00000540.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 132048, "bbox": [1, 0, 682, 303], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 4688, "bbox": [314, 1, 227, 35], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 73290, "bbox": [1, 294, 682, 217], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4728, "bbox": [55, 270, 52, 168], "iscrowd": 0}, {"id": 2627250, "category_id": 13, "area": 746, "bbox": [619, 261, 23, 59], "iscrowd": 0}, {"id": 2098811, "category_id": 13, "area": 952, "bbox": [586, 266, 21, 75], "iscrowd": 0}, {"id": 4720796, "category_id": 13, "area": 830, "bbox": [503, 267, 22, 62], "iscrowd": 0}, {"id": 3939972, "category_id": 13, "area": 1100, "bbox": [461, 263, 30, 78], "iscrowd": 0}, {"id": 5774742, "category_id": 13, "area": 4692, "bbox": [219, 269, 47, 152], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 159, "bbox": [43, 311, 15, 16], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 85, "bbox": [606, 204, 7, 18], "iscrowd": 0}, {"id": 15157248, "category_id": 88, "area": 65, "bbox": [513, 210, 6, 14], "iscrowd": 0}, {"id": 16076800, "category_id": 88, "area": 1910, "bbox": [426, 115, 71, 105], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 650, "bbox": [97, 370, 25, 37], "iscrowd": 0}, {"id": 9937226, "category_id": 116, "area": 689, "bbox": [70, 300, 41, 72], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 222, "bbox": [669, 283, 11, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00000541", "file_name": "ADE_val_00000541.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 26642, "bbox": [0, 1, 347, 83], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2737, "bbox": [0, 70, 229, 20], "iscrowd": 0}, {"id": 16761344, "category_id": 95, "area": 27667, "bbox": [0, 83, 347, 232], "iscrowd": 0}]}, {"image_id": "ADE_val_00000542", "file_name": "ADE_val_00000542.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 158080, "bbox": [0, 1, 682, 385], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 126858, "bbox": [1, 298, 681, 213], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 43541, "bbox": [1, 147, 395, 122], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 920, "bbox": [481, 58, 40, 32], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 12056, "bbox": [56, 39, 140, 95], "iscrowd": 0}]}, {"image_id": "ADE_val_00000543", "file_name": "ADE_val_00000543.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 91634, "bbox": [0, 0, 250, 788], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 128049, "bbox": [231, 0, 279, 709], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 77101, "bbox": [50, 0, 371, 361], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 60615, "bbox": [203, 491, 307, 404], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 96863, "bbox": [0, 462, 350, 433], "iscrowd": 0}]}, {"image_id": "ADE_val_00000544", "file_name": "ADE_val_00000544.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 85532, "bbox": [0, 1, 639, 431], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 30795, "bbox": [89, 305, 550, 128], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 41398, "bbox": [81, 0, 558, 225], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1184, "bbox": [580, 227, 19, 77], "iscrowd": 0}, {"id": 16769751, "category_id": 9, "area": 2543, "bbox": [338, 171, 24, 141], "iscrowd": 0}, {"id": 16772600, "category_id": 9, "area": 2203, "bbox": [32, 136, 20, 133], "iscrowd": 0}, {"id": 16771547, "category_id": 9, "area": 694, "bbox": [79, 169, 8, 104], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2244, "bbox": [552, 382, 87, 50], "iscrowd": 0}, {"id": 7020543, "category_id": 16, "area": 1674, "bbox": [547, 351, 89, 35], "iscrowd": 0}, {"id": 6365166, "category_id": 16, "area": 904, "bbox": [547, 335, 89, 16], "iscrowd": 0}, {"id": 3544063, "category_id": 16, "area": 556, "bbox": [430, 357, 38, 30], "iscrowd": 0}, {"id": 6296319, "category_id": 16, "area": 228, "bbox": [411, 345, 31, 14], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 464, "bbox": [561, 14, 30, 126], "iscrowd": 0}, {"id": 65499, "category_id": 37, "area": 156, "bbox": [419, 150, 16, 46], "iscrowd": 0}, {"id": 585925, "category_id": 37, "area": 112, "bbox": [416, 222, 13, 12], "iscrowd": 0}, {"id": 980220, "category_id": 37, "area": 77, "bbox": [413, 239, 11, 9], "iscrowd": 0}, {"id": 2292429, "category_id": 37, "area": 904, "bbox": [204, 1, 39, 91], "iscrowd": 0}, {"id": 65488, "category_id": 37, "area": 401, "bbox": [190, 134, 27, 23], "iscrowd": 0}, {"id": 1507297, "category_id": 37, "area": 268, "bbox": [184, 161, 22, 29], "iscrowd": 0}, {"id": 2555855, "category_id": 37, "area": 185, "bbox": [181, 197, 17, 15], "iscrowd": 0}, {"id": 1179600, "category_id": 37, "area": 84, "bbox": [178, 213, 13, 9], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1552, "bbox": [604, 227, 26, 91], "iscrowd": 0}, {"id": 1769727, "category_id": 43, "area": 1066, "bbox": [559, 234, 21, 78], "iscrowd": 0}, {"id": 3476735, "category_id": 43, "area": 32557, "bbox": [438, 0, 117, 433], "iscrowd": 0}, {"id": 786687, "category_id": 43, "area": 15735, "bbox": [346, 102, 79, 330], "iscrowd": 0}, {"id": 1185791, "category_id": 43, "area": 510, "bbox": [207, 252, 8, 80], "iscrowd": 0}, {"id": 2752767, "category_id": 43, "area": 528, "bbox": [212, 248, 9, 84], "iscrowd": 0}, {"id": 4653309, "category_id": 43, "area": 469, "bbox": [217, 241, 10, 98], "iscrowd": 0}, {"id": 3938028, "category_id": 43, "area": 812, "bbox": [223, 232, 12, 110], "iscrowd": 0}, {"id": 2556159, "category_id": 43, "area": 1228, "bbox": [231, 228, 14, 120], "iscrowd": 0}, {"id": 3932402, "category_id": 43, "area": 1923, "bbox": [242, 220, 17, 137], "iscrowd": 0}, {"id": 3803903, "category_id": 43, "area": 3146, "bbox": [253, 205, 27, 162], "iscrowd": 0}, {"id": 786684, "category_id": 43, "area": 5418, "bbox": [272, 187, 39, 194], "iscrowd": 0}, {"id": 2757119, "category_id": 43, "area": 9153, "bbox": [298, 155, 58, 252], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 345, "bbox": [444, 392, 18, 39], "iscrowd": 0}, {"id": 16773917, "category_id": 111, "area": 315, "bbox": [429, 388, 18, 41], "iscrowd": 0}]}, {"image_id": "ADE_val_00000545", "file_name": "ADE_val_00000545.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 108031, "bbox": [0, 84, 682, 328], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 96438, "bbox": [0, 0, 682, 189], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 54478, "bbox": [2, 313, 680, 198], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 551, "bbox": [196, 189, 61, 17], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 11404, "bbox": [73, 235, 82, 233], "iscrowd": 0}, {"id": 4200351, "category_id": 13, "area": 12928, "bbox": [163, 257, 87, 252], "iscrowd": 0}, {"id": 3475322, "category_id": 13, "area": 619, "bbox": [239, 251, 37, 57], "iscrowd": 0}, {"id": 4457087, "category_id": 13, "area": 6666, "bbox": [240, 267, 54, 233], "iscrowd": 0}, {"id": 5570979, "category_id": 13, "area": 11890, "bbox": [273, 273, 74, 237], "iscrowd": 0}, {"id": 2760344, "category_id": 13, "area": 6101, "bbox": [319, 239, 51, 254], "iscrowd": 0}, {"id": 5046398, "category_id": 13, "area": 3494, "bbox": [399, 249, 60, 236], "iscrowd": 0}, {"id": 2560906, "category_id": 13, "area": 11142, "bbox": [372, 264, 72, 245], "iscrowd": 0}, {"id": 3872388, "category_id": 13, "area": 13428, "bbox": [543, 257, 81, 252], "iscrowd": 0}, {"id": 3150456, "category_id": 13, "area": 9690, "bbox": [628, 253, 54, 256], "iscrowd": 0}]}, {"image_id": "ADE_val_00000546", "file_name": "ADE_val_00000546.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 126, "bbox": [210, 504, 98, 77], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 59076, "bbox": [0, 0, 510, 143], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 254435, "bbox": [1, 35, 509, 648], "iscrowd": 0}, {"id": 16714240, "category_id": 92, "area": 18389, "bbox": [124, 539, 267, 144], "iscrowd": 0}]}, {"image_id": "ADE_val_00000547", "file_name": "ADE_val_00000547.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 23837, "bbox": [51, 215, 628, 178], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 109129, "bbox": [91, 58, 493, 346], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 69286, "bbox": [2, 0, 677, 255], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 36902, "bbox": [2, 2, 176, 312], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 49868, "bbox": [2, 167, 677, 275], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 5232, "bbox": [0, 235, 100, 82], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 2095, "bbox": [0, 386, 60, 53], "iscrowd": 0}]}, {"image_id": "ADE_val_00000548", "file_name": "ADE_val_00000548.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1618, "bbox": [653, 403, 29, 108], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 142583, "bbox": [0, 0, 617, 351], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 62261, "bbox": [67, 0, 615, 247], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 138233, "bbox": [0, 277, 682, 234], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 797, "bbox": [619, 246, 63, 14], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 1140, "bbox": [617, 260, 65, 18], "iscrowd": 0}, {"id": 12105983, "category_id": 85, "area": 951, "bbox": [231, 19, 32, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00000549", "file_name": "ADE_val_00000549.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 40267, "bbox": [0, 9, 299, 187], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 10155, "bbox": [0, 0, 299, 48], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3279, "bbox": [0, 25, 269, 162], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 15465, "bbox": [2, 169, 297, 65], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 275, "bbox": [272, 187, 24, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00000550", "file_name": "ADE_val_00000550.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 16564, "bbox": [0, 0, 609, 44], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 200983, "bbox": [0, 52, 609, 360], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 28427, "bbox": [2, 12, 608, 127], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 879, "bbox": [371, 53, 120, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00000551", "file_name": "ADE_val_00000551.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 152367, "bbox": [0, 0, 682, 305], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 106032, "bbox": [0, 274, 682, 236], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 12766, "bbox": [175, 374, 347, 81], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 24417, "bbox": [263, 214, 176, 228], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 9417, "bbox": [458, 151, 77, 130], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 34298, "bbox": [206, 110, 253, 272], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 4652, "bbox": [104, 107, 61, 81], "iscrowd": 0}]}, {"image_id": "ADE_val_00000552", "file_name": "ADE_val_00000552.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 67226, "bbox": [0, 104, 599, 189], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 56843, "bbox": [0, 0, 598, 122], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 11887, "bbox": [0, 54, 503, 86], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 86908, "bbox": [0, 215, 598, 184], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 6714, "bbox": [0, 205, 599, 104], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 250, "bbox": [433, 198, 28, 13], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 127, "bbox": [461, 199, 15, 16], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 4477, "bbox": [527, 237, 73, 86], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 119, "bbox": [180, 57, 22, 74], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 3045, "bbox": [399, 41, 172, 85], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 184, "bbox": [549, 199, 11, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00000553", "file_name": "ADE_val_00000553.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 23017, "bbox": [2, 1, 254, 135], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 17464, "bbox": [2, 154, 254, 102], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 15934, "bbox": [2, 53, 253, 123], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 7900, "bbox": [2, 128, 251, 113], "iscrowd": 0}]}, {"image_id": "ADE_val_00000554", "file_name": "ADE_val_00000554.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 17991, "bbox": [2, 1, 216, 149], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 11629, "bbox": [2, 32, 254, 223], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 34960, "bbox": [2, 1, 254, 255], "iscrowd": 0}]}, {"image_id": "ADE_val_00000555", "file_name": "ADE_val_00000555.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 174317, "bbox": [0, 1, 767, 320], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 88028, "bbox": [0, 329, 767, 181], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 67137, "bbox": [2, 157, 764, 237], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 19454, "bbox": [271, 146, 278, 130], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 15244, "bbox": [425, 343, 142, 168], "iscrowd": 0}, {"id": 3279748, "category_id": 13, "area": 25665, "bbox": [0, 253, 130, 258], "iscrowd": 0}]}, {"image_id": "ADE_val_00000556", "file_name": "ADE_val_00000556.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 86935, "bbox": [0, 0, 682, 182], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 13840, "bbox": [124, 159, 495, 113], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 80535, "bbox": [0, 38, 682, 297], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 128754, "bbox": [0, 206, 682, 305], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 33981, "bbox": [132, 213, 238, 298], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2441, "bbox": [289, 223, 40, 114], "iscrowd": 0}]}, {"image_id": "ADE_val_00000557", "file_name": "ADE_val_00000557.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 4884, "bbox": [2, 1, 254, 23], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 44716, "bbox": [2, 16, 254, 240], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 5907, "bbox": [162, 155, 94, 100], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 408, "bbox": [162, 180, 20, 48], "iscrowd": 0}, {"id": 5832838, "category_id": 13, "area": 1809, "bbox": [68, 140, 46, 102], "iscrowd": 0}, {"id": 3804578, "category_id": 13, "area": 6748, "bbox": [9, 114, 99, 142], "iscrowd": 0}]}, {"image_id": "ADE_val_00000558", "file_name": "ADE_val_00000558.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 13978, "bbox": [0, 0, 255, 104], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 3559, "bbox": [0, 21, 255, 141], "iscrowd": 0}]}, {"image_id": "ADE_val_00000559", "file_name": "ADE_val_00000559.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 16646, "bbox": [2, 1, 254, 78], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 30482, "bbox": [0, 109, 255, 147], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 16791, "bbox": [2, 44, 254, 116], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 16, "bbox": [23, 239, 4, 10], "iscrowd": 0}, {"id": 5181824, "category_id": 13, "area": 24, "bbox": [27, 241, 4, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000560", "file_name": "ADE_val_00000560.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 3083, "bbox": [2, 228, 215, 28], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 22807, "bbox": [2, 1, 254, 132], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6841, "bbox": [139, 129, 117, 123], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 27325, "bbox": [2, 31, 254, 221], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 3566, "bbox": [208, 153, 48, 103], "iscrowd": 0}]}, {"image_id": "ADE_val_00000561", "file_name": "ADE_val_00000561.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 93262, "bbox": [0, 0, 683, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 31497, "bbox": [10, 249, 668, 261], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7557, "bbox": [149, 0, 530, 24], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 5978, "bbox": [389, 285, 105, 121], "iscrowd": 0}, {"id": 13041424, "category_id": 32, "area": 3052, "bbox": [443, 284, 80, 95], "iscrowd": 0}, {"id": 13434629, "category_id": 32, "area": 18836, "bbox": [54, 267, 160, 197], "iscrowd": 0}, {"id": 12778752, "category_id": 32, "area": 6650, "bbox": [1, 259, 107, 178], "iscrowd": 0}, {"id": 15525632, "category_id": 32, "area": 9292, "bbox": [0, 345, 78, 166], "iscrowd": 0}, {"id": 14542848, "category_id": 32, "area": 36288, "bbox": [0, 218, 609, 147], "iscrowd": 0}, {"id": 16053505, "category_id": 32, "area": 12806, "bbox": [307, 281, 146, 152], "iscrowd": 0}, {"id": 13565696, "category_id": 32, "area": 28239, "bbox": [170, 283, 209, 204], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 33358, "bbox": [387, 300, 281, 211], "iscrowd": 0}, {"id": 16763904, "category_id": 131, "area": 55311, "bbox": [295, 11, 359, 172], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 180, "bbox": [40, 104, 15, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00000562", "file_name": "ADE_val_00000562.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 89376, "bbox": [2, 0, 497, 226], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 74816, "bbox": [2, 221, 497, 162], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1428, "bbox": [246, 166, 35, 55], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6237, "bbox": [351, 93, 64, 99], "iscrowd": 0}, {"id": 3081701, "category_id": 23, "area": 7877, "bbox": [75, 86, 74, 108], "iscrowd": 0}, {"id": 2297599, "category_id": 23, "area": 4076, "bbox": [221, 100, 59, 86], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 2660, "bbox": [148, 220, 103, 54], "iscrowd": 0}, {"id": 16448543, "category_id": 32, "area": 2746, "bbox": [251, 220, 99, 55], "iscrowd": 0}]}, {"image_id": "ADE_val_00000563", "file_name": "ADE_val_00000563.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 90503, "bbox": [123, 1, 474, 332], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1727, "bbox": [241, 164, 42, 67], "iscrowd": 0}, {"id": 3676035, "category_id": 13, "area": 1911, "bbox": [204, 159, 45, 71], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 5442, "bbox": [175, 0, 26, 234], "iscrowd": 0}, {"id": 2687231, "category_id": 43, "area": 14331, "bbox": [122, 1, 58, 278], "iscrowd": 0}, {"id": 1052665, "category_id": 43, "area": 27980, "bbox": [41, 1, 89, 332], "iscrowd": 0}, {"id": 3087096, "category_id": 43, "area": 13305, "bbox": [0, 0, 42, 333], "iscrowd": 0}]}, {"image_id": "ADE_val_00000564", "file_name": "ADE_val_00000564.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 155215, "bbox": [2, 59, 680, 412], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 126629, "bbox": [1, 0, 681, 250], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 19161, "bbox": [0, 7, 682, 350], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 22257, "bbox": [1, 455, 681, 56], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 16070, "bbox": [2, 402, 674, 108], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 631, "bbox": [443, 407, 23, 57], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 239, "bbox": [383, 461, 25, 11], "iscrowd": 0}, {"id": 16646399, "category_id": 126, "area": 258, "bbox": [628, 455, 27, 11], "iscrowd": 0}, {"id": 16715226, "category_id": 126, "area": 356, "bbox": [272, 462, 27, 17], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 853, "bbox": [487, 97, 33, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00000565", "file_name": "ADE_val_00000565.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18383, "bbox": [2, 41, 254, 169], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 16012, "bbox": [0, 184, 256, 72], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 13853, "bbox": [0, 0, 255, 71], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3100, "bbox": [83, 93, 73, 54], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 6463, "bbox": [166, 69, 90, 123], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 768, "bbox": [67, 9, 39, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000566", "file_name": "ADE_val_00000566.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 145998, "bbox": [310, 1, 372, 511], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 159739, "bbox": [1, 1, 318, 511], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 41498, "bbox": [355, 125, 207, 213], "iscrowd": 0}]}, {"image_id": "ADE_val_00000567", "file_name": "ADE_val_00000567.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 295569, "bbox": [1, 0, 682, 450], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 46544, "bbox": [1, 434, 682, 78], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 940, "bbox": [173, 392, 42, 64], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2288, "bbox": [613, 389, 70, 42], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 129, "bbox": [569, 340, 9, 17], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 790, "bbox": [518, 430, 60, 21], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 139, "bbox": [572, 357, 6, 71], "iscrowd": 0}, {"id": 15269918, "category_id": 94, "area": 200, "bbox": [649, 424, 14, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00000568", "file_name": "ADE_val_00000568.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 28198, "bbox": [0, 83, 602, 135], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 68712, "bbox": [1, 1, 681, 125], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 12880, "bbox": [109, 62, 573, 111], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 82821, "bbox": [2, 368, 679, 144], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 11506, "bbox": [33, 103, 383, 53], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 470, "bbox": [311, 228, 264, 20], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 97822, "bbox": [1, 156, 682, 253], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 514, "bbox": [463, 220, 124, 11], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 38390, "bbox": [0, 182, 682, 104], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 995, "bbox": [424, 192, 33, 42], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 66, "bbox": [468, 201, 27, 18], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 481, "bbox": [454, 93, 26, 29], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 472, "bbox": [311, 244, 35, 17], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 178, "bbox": [133, 181, 11, 21], "iscrowd": 0}, {"id": 14752943, "category_id": 139, "area": 314, "bbox": [143, 180, 18, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00000569", "file_name": "ADE_val_00000569.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 20440, "bbox": [120, 268, 563, 131], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 204185, "bbox": [0, 0, 683, 385], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 51241, "bbox": [0, 244, 670, 204], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 50046, "bbox": [0, 404, 637, 108], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 5023, "bbox": [193, 383, 490, 100], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 927, "bbox": [201, 376, 66, 23], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 8290, "bbox": [469, 410, 214, 102], "iscrowd": 0}, {"id": 112639, "category_id": 33, "area": 7939, "bbox": [0, 398, 498, 28], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 3, "bbox": [345, 378, 2, 2], "iscrowd": 0}, {"id": 16732439, "category_id": 88, "area": 429, "bbox": [229, 248, 16, 150], "iscrowd": 0}, {"id": 15682304, "category_id": 88, "area": 143, "bbox": [395, 314, 7, 83], "iscrowd": 0}, {"id": 15617024, "category_id": 88, "area": 21, "bbox": [437, 377, 3, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00000570", "file_name": "ADE_val_00000570.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 1586, "bbox": [1, 15, 438, 118], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 25041, "bbox": [1, 1, 682, 63], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 10768, "bbox": [60, 6, 622, 155], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 152471, "bbox": [1, 208, 604, 303], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 13281, "bbox": [1, 233, 680, 278], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 91707, "bbox": [1, 114, 682, 395], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 49697, "bbox": [1, 23, 682, 112], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 316, "bbox": [427, 130, 21, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00000571", "file_name": "ADE_val_00000571.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 122435, "bbox": [1, 1, 682, 381], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 88600, "bbox": [1, 0, 427, 268], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 22250, "bbox": [1, 0, 415, 364], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 31363, "bbox": [0, 347, 683, 132], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 51277, "bbox": [1, 336, 681, 176], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 22542, "bbox": [1, 346, 471, 166], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 458, "bbox": [102, 359, 50, 12], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 304, "bbox": [377, 349, 73, 25], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 84, "bbox": [80, 334, 18, 7], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2042, "bbox": [444, 220, 38, 56], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 2528, "bbox": [469, 159, 30, 256], "iscrowd": 0}, {"id": 16737536, "category_id": 88, "area": 306, "bbox": [328, 295, 8, 72], "iscrowd": 0}, {"id": 16600346, "category_id": 88, "area": 196, "bbox": [311, 302, 9, 53], "iscrowd": 0}, {"id": 14830608, "category_id": 88, "area": 139, "bbox": [60, 295, 7, 45], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 82, "bbox": [380, 338, 57, 33], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 572, "bbox": [260, 334, 39, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00000572", "file_name": "ADE_val_00000572.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 15032, "bbox": [281, 124, 402, 92], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 92211, "bbox": [1, 1, 682, 207], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 89919, "bbox": [1, 21, 682, 371], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 44042, "bbox": [1, 267, 681, 244], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 82694, "bbox": [1, 273, 638, 238], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 20, "bbox": [438, 247, 4, 8], "iscrowd": 0}, {"id": 2234546, "category_id": 13, "area": 107, "bbox": [436, 252, 9, 25], "iscrowd": 0}, {"id": 5111974, "category_id": 13, "area": 590, "bbox": [387, 246, 20, 52], "iscrowd": 0}, {"id": 3548051, "category_id": 13, "area": 1774, "bbox": [348, 242, 42, 109], "iscrowd": 0}, {"id": 2037159, "category_id": 13, "area": 2261, "bbox": [473, 248, 33, 108], "iscrowd": 0}, {"id": 2951086, "category_id": 13, "area": 335, "bbox": [423, 247, 15, 40], "iscrowd": 0}, {"id": 3276938, "category_id": 13, "area": 205, "bbox": [418, 247, 11, 40], "iscrowd": 0}, {"id": 5898399, "category_id": 13, "area": 583, "bbox": [404, 241, 18, 58], "iscrowd": 0}, {"id": 4325552, "category_id": 13, "area": 3275, "bbox": [441, 233, 64, 121], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 301, "bbox": [476, 233, 18, 26], "iscrowd": 0}, {"id": 4267007, "category_id": 43, "area": 242, "bbox": [402, 229, 18, 20], "iscrowd": 0}, {"id": 1639423, "category_id": 43, "area": 152, "bbox": [418, 236, 13, 16], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 149, "bbox": [491, 212, 11, 32], "iscrowd": 0}, {"id": 16736256, "category_id": 88, "area": 165, "bbox": [482, 191, 9, 39], "iscrowd": 0}, {"id": 16001308, "category_id": 88, "area": 66, "bbox": [477, 207, 7, 26], "iscrowd": 0}, {"id": 14835968, "category_id": 88, "area": 80, "bbox": [422, 208, 6, 27], "iscrowd": 0}, {"id": 15620352, "category_id": 88, "area": 3394, "bbox": [127, 47, 33, 282], "iscrowd": 0}, {"id": 15416064, "category_id": 88, "area": 169, "bbox": [385, 213, 11, 37], "iscrowd": 0}, {"id": 16728092, "category_id": 88, "area": 161, "bbox": [405, 192, 9, 37], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 580, "bbox": [613, 382, 9, 84], "iscrowd": 0}, {"id": 16646455, "category_id": 94, "area": 429, "bbox": [573, 348, 12, 63], "iscrowd": 0}, {"id": 16711720, "category_id": 94, "area": 238, "bbox": [554, 330, 7, 49], "iscrowd": 0}, {"id": 16711705, "category_id": 94, "area": 238, "bbox": [541, 317, 6, 45], "iscrowd": 0}, {"id": 16714014, "category_id": 94, "area": 173, "bbox": [529, 306, 6, 37], "iscrowd": 0}, {"id": 15603279, "category_id": 94, "area": 849, "bbox": [58, 369, 14, 84], "iscrowd": 0}, {"id": 16714806, "category_id": 94, "area": 485, "bbox": [147, 344, 10, 66], "iscrowd": 0}, {"id": 16715554, "category_id": 94, "area": 343, "bbox": [205, 326, 8, 54], "iscrowd": 0}, {"id": 16389934, "category_id": 94, "area": 223, "bbox": [245, 315, 6, 44], "iscrowd": 0}, {"id": 14877489, "category_id": 94, "area": 172, "bbox": [274, 306, 6, 38], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 547, "bbox": [430, 302, 21, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00000573", "file_name": "ADE_val_00000573.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 876, "bbox": [296, 261, 387, 16], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 64634, "bbox": [0, 50, 682, 257], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 102350, "bbox": [0, 0, 683, 239], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 17481, "bbox": [1, 161, 682, 152], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 143914, "bbox": [0, 272, 683, 240], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 4687, "bbox": [0, 282, 683, 53], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 2329, "bbox": [0, 307, 313, 19], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 239, "bbox": [279, 232, 159, 10], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 8262, "bbox": [42, 262, 321, 55], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 78, "bbox": [523, 202, 7, 12], "iscrowd": 0}, {"id": 15259606, "category_id": 9, "area": 60, "bbox": [524, 224, 6, 10], "iscrowd": 0}, {"id": 16121058, "category_id": 9, "area": 77, "bbox": [524, 246, 7, 11], "iscrowd": 0}, {"id": 16504546, "category_id": 9, "area": 66, "bbox": [501, 194, 6, 11], "iscrowd": 0}, {"id": 14741238, "category_id": 9, "area": 70, "bbox": [501, 237, 7, 10], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 51, "bbox": [503, 262, 5, 12], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 370, "bbox": [437, 267, 40, 13], "iscrowd": 0}, {"id": 11160576, "category_id": 21, "area": 260, "bbox": [636, 261, 25, 13], "iscrowd": 0}, {"id": 11170063, "category_id": 21, "area": 154, "bbox": [476, 267, 22, 11], "iscrowd": 0}, {"id": 13060608, "category_id": 21, "area": 49, "bbox": [440, 265, 11, 7], "iscrowd": 0}, {"id": 13594126, "category_id": 21, "area": 68, "bbox": [404, 268, 10, 8], "iscrowd": 0}, {"id": 12476928, "category_id": 21, "area": 77, "bbox": [429, 266, 11, 9], "iscrowd": 0}, {"id": 11886864, "category_id": 21, "area": 71, "bbox": [360, 269, 12, 8], "iscrowd": 0}, {"id": 12479518, "category_id": 21, "area": 81, "bbox": [417, 267, 12, 8], "iscrowd": 0}, {"id": 13069824, "category_id": 21, "area": 306, "bbox": [505, 266, 37, 12], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 112, "bbox": [587, 266, 16, 7], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 38, "bbox": [418, 262, 6, 18], "iscrowd": 0}, {"id": 8915960, "category_id": 44, "area": 113, "bbox": [387, 259, 7, 30], "iscrowd": 0}, {"id": 10951925, "category_id": 44, "area": 78, "bbox": [562, 246, 8, 20], "iscrowd": 0}, {"id": 10095331, "category_id": 44, "area": 243, "bbox": [478, 244, 10, 44], "iscrowd": 0}, {"id": 8782079, "category_id": 44, "area": 138, "bbox": [469, 243, 4, 58], "iscrowd": 0}, {"id": 9699583, "category_id": 44, "area": 13, "bbox": [518, 259, 2, 18], "iscrowd": 0}, {"id": 11272447, "category_id": 44, "area": 324, "bbox": [280, 239, 21, 73], "iscrowd": 0}, {"id": 10027263, "category_id": 44, "area": 32, "bbox": [328, 262, 5, 15], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 35, "bbox": [235, 235, 5, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00000574", "file_name": "ADE_val_00000574.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 169, "bbox": [143, 411, 22, 13], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 199535, "bbox": [1, 2, 682, 343], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 43165, "bbox": [1, 297, 682, 192], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 25370, "bbox": [64, 255, 611, 89], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 77338, "bbox": [1, 364, 682, 146], "iscrowd": 0}]}, {"image_id": "ADE_val_00000575", "file_name": "ADE_val_00000575.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 117435, "bbox": [1, 0, 682, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 70201, "bbox": [1, 133, 598, 379], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 28438, "bbox": [226, 337, 308, 174], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 15438, "bbox": [227, 1, 400, 152], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 24158, "bbox": [200, 290, 375, 222], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 2084, "bbox": [421, 175, 51, 86], "iscrowd": 0}, {"id": 8722406, "category_id": 122, "area": 5696, "bbox": [427, 211, 130, 109], "iscrowd": 0}, {"id": 9306367, "category_id": 122, "area": 4798, "bbox": [453, 249, 159, 103], "iscrowd": 0}]}, {"image_id": "ADE_val_00000576", "file_name": "ADE_val_00000576.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 205433, "bbox": [1, 1, 681, 381], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 97972, "bbox": [0, 238, 682, 273], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 11109, "bbox": [491, 129, 82, 225], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4783, "bbox": [299, 267, 103, 152], "iscrowd": 0}, {"id": 667110, "category_id": 20, "area": 8250, "bbox": [239, 270, 119, 180], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 168, "bbox": [345, 191, 8, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00000577", "file_name": "ADE_val_00000577.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 74853, "bbox": [2, 0, 625, 278], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 10917, "bbox": [288, 1, 272, 65], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 78415, "bbox": [351, 1, 332, 316], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 52780, "bbox": [127, 359, 514, 153], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 14620, "bbox": [1, 294, 682, 218], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 3135, "bbox": [1, 420, 179, 40], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 82275, "bbox": [1, 215, 682, 215], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 15916, "bbox": [423, 248, 183, 148], "iscrowd": 0}]}, {"image_id": "ADE_val_00000578", "file_name": "ADE_val_00000578.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 176326, "bbox": [1, 115, 511, 568], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 80863, "bbox": [1, 1, 511, 206], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 37337, "bbox": [95, 439, 239, 243], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 8403, "bbox": [320, 203, 71, 179], "iscrowd": 0}, {"id": 4196607, "category_id": 23, "area": 11377, "bbox": [438, 389, 73, 184], "iscrowd": 0}, {"id": 3670266, "category_id": 23, "area": 3831, "bbox": [263, 159, 49, 121], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 9441, "bbox": [68, 390, 52, 293], "iscrowd": 0}]}, {"image_id": "ADE_val_00000579", "file_name": "ADE_val_00000579.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 19766, "bbox": [1, 362, 362, 251], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 63445, "bbox": [116, 39, 396, 414], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 104732, "bbox": [0, 0, 512, 369], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 35773, "bbox": [1, 141, 422, 308], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 1774, "bbox": [1, 483, 79, 53], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 16892, "bbox": [1, 608, 445, 75], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 328, "bbox": [0, 483, 40, 17], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3607, "bbox": [350, 411, 79, 110], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 88265, "bbox": [16, 397, 496, 285], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 168, "bbox": [133, 488, 14, 12], "iscrowd": 0}, {"id": 1289215, "category_id": 83, "area": 65, "bbox": [290, 408, 7, 10], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 265, "bbox": [367, 366, 18, 19], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 880, "bbox": [5, 353, 359, 174], "iscrowd": 0}, {"id": 15175698, "category_id": 96, "area": 2143, "bbox": [268, 403, 130, 225], "iscrowd": 0}, {"id": 16744220, "category_id": 96, "area": 724, "bbox": [419, 349, 50, 93], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 173, "bbox": [382, 182, 15, 15], "iscrowd": 0}, {"id": 65409, "category_id": 149, "area": 83, "bbox": [364, 185, 7, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000580", "file_name": "ADE_val_00000580.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 203811, "bbox": [2, 0, 510, 551], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 109505, "bbox": [1, 546, 510, 221], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 39168, "bbox": [169, 0, 234, 220], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 25450, "bbox": [182, 239, 140, 371], "iscrowd": 0}]}, {"image_id": "ADE_val_00000581", "file_name": "ADE_val_00000581.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 298664, "bbox": [1, 1, 682, 511], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 2825, "bbox": [1, 1, 23, 159], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 27051, "bbox": [1, 359, 458, 153], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 18454, "bbox": [98, 370, 248, 117], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 823, "bbox": [70, 286, 149, 136], "iscrowd": 0}, {"id": 16735749, "category_id": 96, "area": 342, "bbox": [200, 290, 105, 195], "iscrowd": 0}]}, {"image_id": "ADE_val_00000582", "file_name": "ADE_val_00000582.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 12086, "bbox": [41, 263, 642, 97], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 163395, "bbox": [1, 1, 681, 275], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 34045, "bbox": [1, 204, 681, 156], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 63740, "bbox": [1, 339, 682, 129], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 18771, "bbox": [2, 221, 569, 68], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 6713, "bbox": [2, 408, 681, 104], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 37388, "bbox": [1, 440, 682, 72], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 537, "bbox": [249, 337, 39, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000583", "file_name": "ADE_val_00000583.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 190098, "bbox": [3, 0, 509, 607], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9548, "bbox": [2, 0, 366, 305], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 73006, "bbox": [0, 1, 411, 549], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 63, "bbox": [0, 515, 22, 11], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 56655, "bbox": [0, 519, 511, 164], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 873, "bbox": [38, 228, 119, 109], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4764, "bbox": [314, 401, 38, 137], "iscrowd": 0}, {"id": 15130829, "category_id": 9, "area": 8764, "bbox": [400, 382, 61, 165], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 342, "bbox": [153, 248, 28, 24], "iscrowd": 0}, {"id": 2493830, "category_id": 13, "area": 1486, "bbox": [352, 537, 51, 51], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 365, "bbox": [4, 498, 20, 24], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 308, "bbox": [213, 373, 13, 63], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 114, "bbox": [254, 223, 17, 17], "iscrowd": 0}, {"id": 15621120, "category_id": 88, "area": 79, "bbox": [222, 247, 15, 15], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 80, "bbox": [257, 545, 9, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000584", "file_name": "ADE_val_00000584.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 13911, "bbox": [1, 462, 601, 50], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 222144, "bbox": [1, 1, 681, 489], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 58187, "bbox": [1, 1, 682, 331], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 32312, "bbox": [1, 391, 682, 120], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 1533, "bbox": [443, 342, 111, 53], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1286, "bbox": [240, 447, 34, 63], "iscrowd": 0}, {"id": 2890876, "category_id": 13, "area": 3128, "bbox": [188, 431, 57, 79], "iscrowd": 0}, {"id": 3803304, "category_id": 13, "area": 3313, "bbox": [7, 396, 44, 115], "iscrowd": 0}, {"id": 2496133, "category_id": 13, "area": 4455, "bbox": [115, 421, 64, 91], "iscrowd": 0}, {"id": 3477124, "category_id": 13, "area": 1654, "bbox": [284, 441, 32, 69], "iscrowd": 0}, {"id": 3342504, "category_id": 13, "area": 1676, "bbox": [598, 467, 48, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00000585", "file_name": "ADE_val_00000585.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 137154, "bbox": [1, 1, 681, 406], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 8674, "bbox": [1, 1, 673, 201], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 60730, "bbox": [2, 1, 388, 268], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 80492, "bbox": [1, 275, 681, 236], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 5429, "bbox": [1, 404, 117, 92], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 355, "bbox": [50, 249, 20, 54], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 4916, "bbox": [1, 297, 239, 30], "iscrowd": 0}, {"id": 58879, "category_id": 54, "area": 17966, "bbox": [1, 352, 213, 159], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 707, "bbox": [244, 259, 45, 21], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 474, "bbox": [119, 281, 32, 18], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 6757, "bbox": [605, 401, 77, 104], "iscrowd": 0}, {"id": 61434, "category_id": 128, "area": 21482, "bbox": [443, 290, 239, 162], "iscrowd": 0}]}, {"image_id": "ADE_val_00000586", "file_name": "ADE_val_00000586.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 44004, "bbox": [0, 183, 683, 135], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 157311, "bbox": [0, 0, 682, 279], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 15577, "bbox": [0, 270, 683, 57], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 126988, "bbox": [1, 317, 681, 194], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 22, "bbox": [283, 345, 4, 9], "iscrowd": 0}, {"id": 3735678, "category_id": 13, "area": 4, "bbox": [268, 342, 2, 2], "iscrowd": 0}, {"id": 2951288, "category_id": 13, "area": 6, "bbox": [260, 341, 3, 3], "iscrowd": 0}, {"id": 5439636, "category_id": 13, "area": 7, "bbox": [274, 342, 2, 6], "iscrowd": 0}, {"id": 4133271, "category_id": 13, "area": 15, "bbox": [264, 349, 3, 6], "iscrowd": 0}, {"id": 4522147, "category_id": 13, "area": 14, "bbox": [270, 348, 3, 7], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 43, "bbox": [55, 319, 7, 17], "iscrowd": 0}, {"id": 979125, "category_id": 77, "area": 371, "bbox": [255, 299, 32, 48], "iscrowd": 0}, {"id": 1441731, "category_id": 77, "area": 49, "bbox": [656, 318, 7, 16], "iscrowd": 0}, {"id": 1441721, "category_id": 77, "area": 92, "bbox": [664, 322, 12, 17], "iscrowd": 0}, {"id": 1703855, "category_id": 77, "area": 74, "bbox": [580, 317, 11, 17], "iscrowd": 0}, {"id": 61621, "category_id": 77, "area": 69, "bbox": [346, 315, 9, 15], "iscrowd": 0}, {"id": 62921, "category_id": 77, "area": 286, "bbox": [384, 310, 27, 43], "iscrowd": 0}, {"id": 655273, "category_id": 77, "area": 384, "bbox": [420, 304, 29, 41], "iscrowd": 0}, {"id": 65454, "category_id": 77, "area": 229, "bbox": [461, 304, 18, 31], "iscrowd": 0}, {"id": 1441705, "category_id": 77, "area": 50, "bbox": [413, 313, 6, 15], "iscrowd": 0}, {"id": 393115, "category_id": 77, "area": 121, "bbox": [65, 311, 24, 8], "iscrowd": 0}, {"id": 61114, "category_id": 77, "area": 104, "bbox": [240, 305, 11, 21], "iscrowd": 0}, {"id": 2031530, "category_id": 77, "area": 66, "bbox": [191, 313, 8, 15], "iscrowd": 0}, {"id": 1172633, "category_id": 77, "area": 28, "bbox": [564, 319, 7, 14], "iscrowd": 0}, {"id": 65482, "category_id": 77, "area": 460, "bbox": [251, 299, 44, 60], "iscrowd": 0}, {"id": 1114011, "category_id": 77, "area": 44, "bbox": [460, 314, 7, 14], "iscrowd": 0}, {"id": 582819, "category_id": 77, "area": 23, "bbox": [421, 316, 4, 11], "iscrowd": 0}, {"id": 128422, "category_id": 77, "area": 55, "bbox": [92, 312, 7, 16], "iscrowd": 0}, {"id": 586934, "category_id": 77, "area": 38, "bbox": [59, 312, 6, 10], "iscrowd": 0}, {"id": 59585, "category_id": 77, "area": 24, "bbox": [15, 310, 6, 9], "iscrowd": 0}, {"id": 65444, "category_id": 77, "area": 51, "bbox": [671, 318, 6, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00000587", "file_name": "ADE_val_00000587.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 251195, "bbox": [1, 1, 682, 383], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1813, "bbox": [393, 252, 37, 50], "iscrowd": 0}, {"id": 11341817, "category_id": 44, "area": 1545, "bbox": [647, 259, 36, 49], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 90626, "bbox": [1, 374, 682, 138], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1483, "bbox": [405, 132, 28, 98], "iscrowd": 0}, {"id": 15482880, "category_id": 88, "area": 1474, "bbox": [653, 151, 29, 89], "iscrowd": 0}]}, {"image_id": "ADE_val_00000588", "file_name": "ADE_val_00000588.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 86754, "bbox": [1, 276, 511, 406], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 74540, "bbox": [1, 57, 490, 321], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 48989, "bbox": [156, 1, 355, 201], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 34844, "bbox": [1, 1, 203, 269], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 46103, "bbox": [1, 570, 479, 112], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3556, "bbox": [72, 32, 168, 290], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 3255, "bbox": [483, 197, 28, 129], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 41450, "bbox": [106, 377, 347, 201], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 27, "bbox": [176, 55, 41, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00000589", "file_name": "ADE_val_00000589.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 220263, "bbox": [3, 1, 680, 398], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 23155, "bbox": [388, 388, 292, 123], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 15192, "bbox": [2, 340, 585, 172], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 23896, "bbox": [2, 147, 221, 225], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 51476, "bbox": [1, 358, 554, 154], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1068, "bbox": [510, 348, 25, 58], "iscrowd": 0}, {"id": 15402024, "category_id": 94, "area": 1953, "bbox": [451, 365, 28, 79], "iscrowd": 0}, {"id": 16714790, "category_id": 94, "area": 3620, "bbox": [335, 397, 43, 110], "iscrowd": 0}, {"id": 16521246, "category_id": 94, "area": 1991, "bbox": [109, 469, 64, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00000590", "file_name": "ADE_val_00000590.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 1803, "bbox": [57, 347, 182, 34], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 190109, "bbox": [0, 0, 683, 351], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 61015, "bbox": [0, 208, 683, 181], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 67535, "bbox": [0, 379, 683, 132], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 11122, "bbox": [59, 379, 624, 64], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 4465, "bbox": [190, 379, 493, 23], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 5272, "bbox": [38, 331, 204, 35], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 39, "bbox": [234, 369, 5, 15], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 142, "bbox": [152, 376, 15, 12], "iscrowd": 0}, {"id": 11368192, "category_id": 21, "area": 1328, "bbox": [88, 371, 45, 36], "iscrowd": 0}, {"id": 14176268, "category_id": 21, "area": 2616, "bbox": [0, 370, 68, 50], "iscrowd": 0}, {"id": 11687168, "category_id": 21, "area": 22, "bbox": [72, 378, 6, 6], "iscrowd": 0}, {"id": 12078080, "category_id": 21, "area": 61, "bbox": [76, 377, 11, 7], "iscrowd": 0}, {"id": 13855232, "category_id": 21, "area": 75, "bbox": [85, 376, 9, 15], "iscrowd": 0}, {"id": 14050841, "category_id": 21, "area": 84, "bbox": [128, 376, 8, 19], "iscrowd": 0}, {"id": 14373908, "category_id": 21, "area": 40, "bbox": [145, 377, 7, 6], "iscrowd": 0}, {"id": 12082196, "category_id": 21, "area": 30, "bbox": [167, 376, 6, 5], "iscrowd": 0}, {"id": 14119185, "category_id": 21, "area": 7, "bbox": [165, 376, 2, 4], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 85, "bbox": [60, 353, 11, 26], "iscrowd": 0}, {"id": 16737792, "category_id": 73, "area": 76, "bbox": [70, 360, 11, 16], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 47, "bbox": [157, 313, 24, 69], "iscrowd": 0}, {"id": 16726528, "category_id": 88, "area": 154, "bbox": [168, 283, 33, 101], "iscrowd": 0}, {"id": 15740672, "category_id": 88, "area": 33, "bbox": [53, 334, 17, 20], "iscrowd": 0}, {"id": 16737280, "category_id": 88, "area": 38, "bbox": [216, 354, 4, 28], "iscrowd": 0}, {"id": 14899712, "category_id": 88, "area": 58, "bbox": [81, 341, 13, 36], "iscrowd": 0}, {"id": 16726809, "category_id": 88, "area": 71, "bbox": [10, 321, 25, 54], "iscrowd": 0}, {"id": 16722963, "category_id": 88, "area": 689, "bbox": [622, 262, 21, 133], "iscrowd": 0}, {"id": 16736025, "category_id": 88, "area": 166, "bbox": [380, 320, 8, 68], "iscrowd": 0}, {"id": 16734208, "category_id": 88, "area": 602, "bbox": [213, 221, 61, 169], "iscrowd": 0}]}, {"image_id": "ADE_val_00000591", "file_name": "ADE_val_00000591.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 20855, "bbox": [2, 91, 592, 276], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 90495, "bbox": [1, 357, 681, 153], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 102507, "bbox": [1, 1, 680, 231], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 5282, "bbox": [249, 20, 274, 84], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 27521, "bbox": [578, 94, 103, 278], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 3025, "bbox": [15, 94, 527, 130], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 2607, "bbox": [2, 308, 55, 53], "iscrowd": 0}]}, {"image_id": "ADE_val_00000592", "file_name": "ADE_val_00000592.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 106102, "bbox": [0, 20, 682, 287], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 78570, "bbox": [1, 1, 682, 170], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 123839, "bbox": [1, 304, 682, 206], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 21985, "bbox": [201, 236, 481, 79], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 7470, "bbox": [405, 306, 255, 108], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3672, "bbox": [653, 329, 29, 182], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1632, "bbox": [423, 158, 29, 211], "iscrowd": 0}]}, {"image_id": "ADE_val_00000593", "file_name": "ADE_val_00000593.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 11043, "bbox": [407, 224, 276, 60], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 43785, "bbox": [28, 64, 655, 319], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 82660, "bbox": [28, 1, 655, 178], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 26717, "bbox": [1, 0, 679, 359], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 1613, "bbox": [478, 287, 204, 91], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2018, "bbox": [81, 301, 73, 48], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1592, "bbox": [135, 256, 40, 94], "iscrowd": 0}, {"id": 3739807, "category_id": 13, "area": 684, "bbox": [176, 276, 30, 73], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2136, "bbox": [651, 288, 32, 86], "iscrowd": 0}, {"id": 11164422, "category_id": 21, "area": 424, "bbox": [638, 274, 45, 13], "iscrowd": 0}, {"id": 11882506, "category_id": 21, "area": 282, "bbox": [599, 276, 38, 10], "iscrowd": 0}, {"id": 12941584, "category_id": 21, "area": 445, "bbox": [552, 274, 45, 16], "iscrowd": 0}, {"id": 12677376, "category_id": 21, "area": 349, "bbox": [519, 274, 33, 14], "iscrowd": 0}, {"id": 12994816, "category_id": 21, "area": 658, "bbox": [487, 275, 42, 21], "iscrowd": 0}, {"id": 11819028, "category_id": 21, "area": 1316, "bbox": [628, 287, 40, 59], "iscrowd": 0}, {"id": 12156439, "category_id": 21, "area": 1217, "bbox": [599, 284, 42, 48], "iscrowd": 0}, {"id": 12416793, "category_id": 21, "area": 394, "bbox": [585, 286, 26, 34], "iscrowd": 0}, {"id": 11293214, "category_id": 21, "area": 311, "bbox": [577, 282, 31, 27], "iscrowd": 0}, {"id": 13074176, "category_id": 21, "area": 185, "bbox": [459, 275, 29, 13], "iscrowd": 0}, {"id": 12812561, "category_id": 21, "area": 158, "bbox": [409, 265, 28, 10], "iscrowd": 0}, {"id": 14446856, "category_id": 21, "area": 381, "bbox": [453, 277, 35, 22], "iscrowd": 0}, {"id": 13065740, "category_id": 21, "area": 131, "bbox": [409, 271, 18, 11], "iscrowd": 0}, {"id": 12812050, "category_id": 21, "area": 1256, "bbox": [202, 286, 53, 31], "iscrowd": 0}, {"id": 14438160, "category_id": 21, "area": 1073, "bbox": [397, 276, 63, 24], "iscrowd": 0}, {"id": 12997120, "category_id": 21, "area": 1030, "bbox": [81, 287, 49, 26], "iscrowd": 0}, {"id": 14382618, "category_id": 21, "area": 662, "bbox": [264, 287, 34, 24], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 34504, "bbox": [0, 132, 410, 229], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 106, "bbox": [478, 254, 9, 24], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 1047, "bbox": [112, 329, 68, 42], "iscrowd": 0}, {"id": 1703861, "category_id": 70, "area": 346, "bbox": [316, 305, 27, 24], "iscrowd": 0}, {"id": 588224, "category_id": 70, "area": 249, "bbox": [212, 316, 41, 28], "iscrowd": 0}, {"id": 65482, "category_id": 70, "area": 106, "bbox": [275, 312, 28, 23], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 2405, "bbox": [403, 166, 137, 143], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 177, "bbox": [368, 284, 9, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00000594", "file_name": "ADE_val_00000594.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 24225, "bbox": [0, 155, 683, 147], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 158627, "bbox": [0, 0, 682, 267], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7121, "bbox": [1, 261, 682, 35], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 145040, "bbox": [1, 293, 681, 219], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 6762, "bbox": [32, 215, 479, 81], "iscrowd": 0}, {"id": 16711751, "category_id": 141, "area": 701, "bbox": [137, 288, 124, 9], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 443, "bbox": [520, 296, 29, 44], "iscrowd": 0}, {"id": 1565636, "category_id": 77, "area": 86, "bbox": [590, 298, 8, 19], "iscrowd": 0}, {"id": 59322, "category_id": 77, "area": 363, "bbox": [8, 280, 26, 34], "iscrowd": 0}, {"id": 65465, "category_id": 77, "area": 900, "bbox": [44, 288, 103, 17], "iscrowd": 0}, {"id": 458675, "category_id": 77, "area": 64, "bbox": [1, 300, 16, 6], "iscrowd": 0}, {"id": 458652, "category_id": 77, "area": 5, "bbox": [325, 301, 5, 1], "iscrowd": 0}, {"id": 1309346, "category_id": 77, "area": 44, "bbox": [482, 290, 8, 12], "iscrowd": 0}, {"id": 1572778, "category_id": 77, "area": 86, "bbox": [522, 296, 9, 19], "iscrowd": 0}, {"id": 61358, "category_id": 77, "area": 142, "bbox": [654, 290, 27, 9], "iscrowd": 0}, {"id": 126886, "category_id": 77, "area": 48, "bbox": [633, 291, 7, 12], "iscrowd": 0}, {"id": 1507229, "category_id": 77, "area": 44, "bbox": [518, 284, 5, 18], "iscrowd": 0}, {"id": 65472, "category_id": 77, "area": 11, "bbox": [539, 291, 4, 8], "iscrowd": 0}, {"id": 65446, "category_id": 77, "area": 20, "bbox": [570, 290, 6, 11], "iscrowd": 0}, {"id": 62147, "category_id": 77, "area": 19, "bbox": [565, 290, 5, 8], "iscrowd": 0}, {"id": 65463, "category_id": 77, "area": 24, "bbox": [589, 291, 4, 10], "iscrowd": 0}, {"id": 65481, "category_id": 77, "area": 17, "bbox": [598, 291, 3, 10], "iscrowd": 0}, {"id": 65441, "category_id": 77, "area": 9, "bbox": [604, 293, 3, 7], "iscrowd": 0}, {"id": 65477, "category_id": 77, "area": 14, "bbox": [644, 297, 4, 6], "iscrowd": 0}, {"id": 61104, "category_id": 77, "area": 74, "bbox": [155, 288, 7, 20], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 23, "bbox": [25, 273, 8, 16], "iscrowd": 0}, {"id": 16605952, "category_id": 88, "area": 4, "bbox": [45, 273, 6, 2], "iscrowd": 0}, {"id": 16727558, "category_id": 88, "area": 16, "bbox": [87, 273, 5, 14], "iscrowd": 0}, {"id": 15813888, "category_id": 88, "area": 14, "bbox": [157, 274, 5, 12], "iscrowd": 0}, {"id": 16723728, "category_id": 88, "area": 14, "bbox": [252, 275, 2, 13], "iscrowd": 0}, {"id": 16724736, "category_id": 88, "area": 15, "bbox": [205, 274, 2, 14], "iscrowd": 0}, {"id": 16010515, "category_id": 88, "area": 5, "bbox": [180, 275, 4, 2], "iscrowd": 0}]}, {"image_id": "ADE_val_00000595", "file_name": "ADE_val_00000595.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6133, "bbox": [1, 352, 681, 54], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 121547, "bbox": [1, 1, 681, 221], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 99180, "bbox": [1, 2, 682, 379], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 67238, "bbox": [1, 375, 682, 137], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 10162, "bbox": [1, 361, 681, 76], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 2565, "bbox": [575, 203, 80, 50], "iscrowd": 0}]}, {"image_id": "ADE_val_00000596", "file_name": "ADE_val_00000596.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 223119, "bbox": [0, 60, 784, 452], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 52804, "bbox": [234, 1, 550, 171], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5171, "bbox": [331, 303, 421, 133], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 113842, "bbox": [1, 0, 783, 316], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 2132, "bbox": [81, 299, 320, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00000597", "file_name": "ADE_val_00000597.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 127961, "bbox": [2, 0, 680, 449], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 95507, "bbox": [2, 1, 584, 252], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 26293, "bbox": [115, 5, 477, 333], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 26967, "bbox": [1, 372, 395, 140], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 52344, "bbox": [1, 364, 682, 148], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1737, "bbox": [504, 330, 30, 96], "iscrowd": 0}, {"id": 4849813, "category_id": 13, "area": 197, "bbox": [500, 353, 7, 42], "iscrowd": 0}, {"id": 4791448, "category_id": 13, "area": 193, "bbox": [258, 351, 12, 36], "iscrowd": 0}, {"id": 5963932, "category_id": 13, "area": 216, "bbox": [270, 350, 13, 36], "iscrowd": 0}, {"id": 2424999, "category_id": 13, "area": 341, "bbox": [35, 343, 12, 43], "iscrowd": 0}, {"id": 4791940, "category_id": 13, "area": 465, "bbox": [474, 347, 12, 56], "iscrowd": 0}, {"id": 4259988, "category_id": 13, "area": 411, "bbox": [482, 345, 15, 55], "iscrowd": 0}, {"id": 5439613, "category_id": 13, "area": 255, "bbox": [490, 345, 11, 47], "iscrowd": 0}, {"id": 5898401, "category_id": 13, "area": 341, "bbox": [286, 344, 14, 42], "iscrowd": 0}, {"id": 2165894, "category_id": 13, "area": 871, "bbox": [439, 340, 22, 65], "iscrowd": 0}, {"id": 5047719, "category_id": 13, "area": 735, "bbox": [460, 342, 16, 68], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 623, "bbox": [150, 287, 26, 29], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 582, "bbox": [413, 173, 16, 191], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 318, "bbox": [87, 376, 11, 43], "iscrowd": 0}, {"id": 16713791, "category_id": 94, "area": 276, "bbox": [134, 372, 9, 38], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 1774, "bbox": [355, 377, 73, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00000598", "file_name": "ADE_val_00000598.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 5287, "bbox": [56, 336, 470, 73], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 167985, "bbox": [1, 1, 681, 334], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 52012, "bbox": [2, 14, 679, 362], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 39731, "bbox": [1, 336, 403, 175], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 41120, "bbox": [1, 332, 681, 180], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 32395, "bbox": [258, 286, 425, 159], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 3958, "bbox": [512, 373, 170, 137], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 37, "bbox": [217, 337, 8, 6], "iscrowd": 0}]}, {"image_id": "ADE_val_00000599", "file_name": "ADE_val_00000599.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 23174, "bbox": [0, 0, 436, 116], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 21253, "bbox": [65, 0, 371, 221], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 8690, "bbox": [188, 214, 248, 68], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 18887, "bbox": [0, 190, 436, 93], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 12710, "bbox": [0, 171, 436, 76], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3478, "bbox": [170, 150, 240, 60], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 34167, "bbox": [0, 55, 436, 140], "iscrowd": 0}]}, {"image_id": "ADE_val_00000600", "file_name": "ADE_val_00000600.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 57343, "bbox": [0, 4, 497, 242], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25952, "bbox": [0, 174, 496, 197], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 13033, "bbox": [0, 0, 497, 50], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 51776, "bbox": [63, 59, 433, 312], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2207, "bbox": [138, 79, 47, 93], "iscrowd": 0}, {"id": 5642651, "category_id": 13, "area": 11835, "bbox": [136, 178, 145, 183], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 199, "bbox": [313, 151, 44, 6], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 923, "bbox": [134, 4, 93, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00000601", "file_name": "ADE_val_00000601.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 20975, "bbox": [9, 0, 689, 156], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 86216, "bbox": [94, 153, 508, 275], "iscrowd": 0}]}, {"image_id": "ADE_val_00000602", "file_name": "ADE_val_00000602.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 141723, "bbox": [30, 50, 480, 514], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 43373, "bbox": [17, 367, 281, 314], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 64053, "bbox": [28, 2, 482, 197], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 15955, "bbox": [184, 505, 314, 165], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4299, "bbox": [131, 201, 24, 244], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 39181, "bbox": [225, 385, 285, 297], "iscrowd": 0}]}, {"image_id": "ADE_val_00000603", "file_name": "ADE_val_00000603.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 2381, "bbox": [92, 173, 94, 47], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 4021, "bbox": [2, 1, 254, 37], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 3824, "bbox": [0, 231, 256, 25], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 7616, "bbox": [0, 170, 256, 79], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 39617, "bbox": [0, 1, 256, 234], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 3901, "bbox": [2, 175, 90, 71], "iscrowd": 0}]}, {"image_id": "ADE_val_00000604", "file_name": "ADE_val_00000604.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 1255, "bbox": [194, 19, 114, 23], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 55121, "bbox": [0, 0, 620, 423], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 29670, "bbox": [0, 422, 620, 88], "iscrowd": 0}, {"id": 16711935, "category_id": 80, "area": 127668, "bbox": [79, 65, 543, 423], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 4513, "bbox": [361, 366, 77, 82], "iscrowd": 0}, {"id": 4718847, "category_id": 23, "area": 3495, "bbox": [393, 283, 47, 80], "iscrowd": 0}, {"id": 3086590, "category_id": 23, "area": 5490, "bbox": [294, 286, 59, 146], "iscrowd": 0}, {"id": 2294015, "category_id": 23, "area": 2170, "bbox": [181, 365, 44, 67], "iscrowd": 0}, {"id": 1904383, "category_id": 23, "area": 1471, "bbox": [193, 299, 33, 66], "iscrowd": 0}, {"id": 1576419, "category_id": 23, "area": 4477, "bbox": [552, 261, 70, 93], "iscrowd": 0}, {"id": 3604735, "category_id": 23, "area": 4063, "bbox": [543, 356, 79, 87], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 6800, "bbox": [43, 330, 121, 113], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 4482, "bbox": [72, 353, 61, 94], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 6316, "bbox": [2, 181, 65, 259], "iscrowd": 0}, {"id": 16204295, "category_id": 73, "area": 26450, "bbox": [53, 1, 256, 451], "iscrowd": 0}]}, {"image_id": "ADE_val_00000605", "file_name": "ADE_val_00000605.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18971, "bbox": [0, 0, 256, 174], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6779, "bbox": [0, 168, 256, 88], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4582, "bbox": [1, 0, 233, 33], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 561, "bbox": [124, 114, 97, 33], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 4073, "bbox": [16, 175, 129, 59], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 802, "bbox": [126, 146, 23, 61], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4191, "bbox": [174, 45, 59, 94], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1823, "bbox": [185, 169, 70, 56], "iscrowd": 0}, {"id": 5447935, "category_id": 16, "area": 922, "bbox": [65, 158, 36, 60], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 3040, "bbox": [228, 13, 28, 137], "iscrowd": 0}, {"id": 930547, "category_id": 19, "area": 1138, "bbox": [163, 37, 18, 107], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 642, "bbox": [228, 142, 24, 32], "iscrowd": 0}, {"id": 741844, "category_id": 20, "area": 5333, "bbox": [142, 163, 110, 93], "iscrowd": 0}, {"id": 25298, "category_id": 20, "area": 912, "bbox": [175, 148, 37, 34], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 2881, "bbox": [79, 139, 142, 74], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 1761, "bbox": [14, 127, 59, 56], "iscrowd": 0}, {"id": 14412322, "category_id": 31, "area": 492, "bbox": [138, 119, 31, 25], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 264, "bbox": [10, 99, 19, 29], "iscrowd": 0}, {"id": 458223, "category_id": 37, "area": 355, "bbox": [216, 109, 23, 27], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 304, "bbox": [90, 138, 35, 14], "iscrowd": 0}, {"id": 2089204, "category_id": 40, "area": 67, "bbox": [179, 137, 21, 6], "iscrowd": 0}, {"id": 506353, "category_id": 40, "area": 408, "bbox": [30, 134, 25, 21], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 635, "bbox": [69, 129, 40, 37], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 372, "bbox": [57, 63, 27, 22], "iscrowd": 0}, {"id": 65791, "category_id": 67, "area": 205, "bbox": [92, 69, 25, 17], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 1692, "bbox": [97, 4, 41, 79], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 166, "bbox": [62, 84, 14, 21], "iscrowd": 0}, {"id": 15007488, "category_id": 136, "area": 183, "bbox": [106, 83, 13, 22], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 169, "bbox": [74, 88, 14, 14], "iscrowd": 0}, {"id": 13361920, "category_id": 143, "area": 118, "bbox": [209, 174, 29, 10], "iscrowd": 0}, {"id": 11859220, "category_id": 143, "area": 129, "bbox": [200, 194, 28, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00000606", "file_name": "ADE_val_00000606.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 237715, "bbox": [0, 0, 494, 704], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 37385, "bbox": [0, 682, 495, 85], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6572, "bbox": [224, 155, 92, 91], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 4166, "bbox": [72, 367, 46, 98], "iscrowd": 0}, {"id": 2556130, "category_id": 23, "area": 2411, "bbox": [72, 471, 44, 58], "iscrowd": 0}, {"id": 1639167, "category_id": 23, "area": 4632, "bbox": [432, 333, 47, 112], "iscrowd": 0}, {"id": 5179135, "category_id": 23, "area": 2540, "bbox": [437, 453, 43, 65], "iscrowd": 0}]}, {"image_id": "ADE_val_00000607", "file_name": "ADE_val_00000607.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 74361, "bbox": [0, 78, 639, 194], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 64047, "bbox": [0, 242, 639, 154], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 80228, "bbox": [2, 1, 637, 161], "iscrowd": 0}, {"id": 16711762, "category_id": 102, "area": 55862, "bbox": [0, 339, 640, 140], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2774, "bbox": [492, 309, 64, 88], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1511, "bbox": [435, 196, 28, 58], "iscrowd": 0}, {"id": 4842514, "category_id": 15, "area": 367, "bbox": [399, 198, 9, 49], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 154, "bbox": [18, 11, 16, 14], "iscrowd": 0}, {"id": 172543, "category_id": 83, "area": 474, "bbox": [136, 24, 26, 25], "iscrowd": 0}, {"id": 45823, "category_id": 83, "area": 226, "bbox": [545, 31, 17, 20], "iscrowd": 0}, {"id": 44277, "category_id": 83, "area": 191, "bbox": [261, 72, 14, 21], "iscrowd": 0}, {"id": 104959, "category_id": 83, "area": 75, "bbox": [310, 90, 12, 11], "iscrowd": 0}, {"id": 1950207, "category_id": 83, "area": 144, "bbox": [440, 11, 17, 17], "iscrowd": 0}, {"id": 373247, "category_id": 83, "area": 91, "bbox": [420, 88, 11, 12], "iscrowd": 0}, {"id": 1614591, "category_id": 83, "area": 135, "bbox": [336, 112, 11, 17], "iscrowd": 0}, {"id": 48639, "category_id": 83, "area": 112, "bbox": [46, 65, 14, 11], "iscrowd": 0}, {"id": 40422, "category_id": 83, "area": 156, "bbox": [86, 121, 14, 16], "iscrowd": 0}, {"id": 49407, "category_id": 83, "area": 147, "bbox": [94, 144, 15, 12], "iscrowd": 0}, {"id": 41983, "category_id": 83, "area": 104, "bbox": [188, 92, 12, 11], "iscrowd": 0}, {"id": 50687, "category_id": 83, "area": 94, "bbox": [206, 63, 12, 12], "iscrowd": 0}, {"id": 1556223, "category_id": 83, "area": 74, "bbox": [359, 61, 9, 11], "iscrowd": 0}, {"id": 51959, "category_id": 83, "area": 97, "bbox": [60, 96, 14, 9], "iscrowd": 0}, {"id": 1357028, "category_id": 83, "area": 125, "bbox": [491, 63, 15, 12], "iscrowd": 0}, {"id": 38644, "category_id": 83, "area": 101, "bbox": [524, 89, 12, 11], "iscrowd": 0}, {"id": 39417, "category_id": 83, "area": 94, "bbox": [612, 66, 11, 11], "iscrowd": 0}, {"id": 1559551, "category_id": 83, "area": 94, "bbox": [23, 145, 13, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000608", "file_name": "ADE_val_00000608.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 98033, "bbox": [0, 0, 679, 159], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 4853, "bbox": [190, 239, 206, 44], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 181631, "bbox": [0, 117, 677, 394], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 4845, "bbox": [84, 261, 85, 89], "iscrowd": 0}]}, {"image_id": "ADE_val_00000609", "file_name": "ADE_val_00000609.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 28528, "bbox": [0, 0, 255, 208], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3779, "bbox": [1, 219, 254, 37], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 888, "bbox": [75, 201, 73, 19], "iscrowd": 0}, {"id": 25032, "category_id": 20, "area": 1539, "bbox": [196, 184, 59, 45], "iscrowd": 0}, {"id": 10964, "category_id": 20, "area": 1856, "bbox": [29, 184, 58, 50], "iscrowd": 0}, {"id": 14281, "category_id": 20, "area": 1279, "bbox": [1, 208, 45, 34], "iscrowd": 0}, {"id": 25290, "category_id": 20, "area": 1243, "bbox": [100, 180, 73, 32], "iscrowd": 0}, {"id": 1922739, "category_id": 20, "area": 303, "bbox": [241, 206, 14, 28], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 941, "bbox": [131, 224, 91, 31], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 9618, "bbox": [1, 47, 146, 121], "iscrowd": 0}]}, {"image_id": "ADE_val_00000610", "file_name": "ADE_val_00000610.png", "segments_info": [{"id": 3999126, "category_id": 13, "area": 7428, "bbox": [262, 76, 92, 138], "iscrowd": 0}, {"id": 3678099, "category_id": 13, "area": 7415, "bbox": [132, 14, 77, 211], "iscrowd": 0}, {"id": 2627508, "category_id": 13, "area": 14670, "bbox": [156, 66, 142, 175], "iscrowd": 0}, {"id": 4522138, "category_id": 13, "area": 19768, "bbox": [6, 66, 145, 201], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5239, "bbox": [45, 188, 354, 78], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 25202, "bbox": [1, 0, 398, 266], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 3058, "bbox": [31, 20, 97, 34], "iscrowd": 0}, {"id": 2010616, "category_id": 68, "area": 1519, "bbox": [33, 62, 53, 32], "iscrowd": 0}, {"id": 112097, "category_id": 68, "area": 3346, "bbox": [244, 17, 104, 34], "iscrowd": 0}, {"id": 1094399, "category_id": 68, "area": 1362, "bbox": [354, 57, 44, 33], "iscrowd": 0}, {"id": 960225, "category_id": 68, "area": 1497, "bbox": [353, 95, 44, 35], "iscrowd": 0}, {"id": 244971, "category_id": 68, "area": 3948, "bbox": [138, 221, 107, 45], "iscrowd": 0}, {"id": 435199, "category_id": 68, "area": 1611, "bbox": [277, 235, 71, 32], "iscrowd": 0}, {"id": 2014719, "category_id": 68, "area": 1793, "bbox": [301, 218, 71, 42], "iscrowd": 0}, {"id": 308223, "category_id": 68, "area": 615, "bbox": [16, 129, 27, 43], "iscrowd": 0}, {"id": 2009599, "category_id": 68, "area": 1073, "bbox": [310, 58, 37, 32], "iscrowd": 0}, {"id": 36863, "category_id": 68, "area": 1107, "bbox": [133, 18, 42, 34], "iscrowd": 0}, {"id": 48127, "category_id": 68, "area": 1161, "bbox": [200, 19, 38, 34], "iscrowd": 0}, {"id": 1815014, "category_id": 68, "area": 1538, "bbox": [353, 132, 46, 36], "iscrowd": 0}, {"id": 43253, "category_id": 68, "area": 1607, "bbox": [243, 55, 67, 37], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 705, "bbox": [372, 202, 16, 53], "iscrowd": 0}]}, {"image_id": "ADE_val_00000611", "file_name": "ADE_val_00000611.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 103912, "bbox": [0, 0, 638, 203], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 13905, "bbox": [0, 146, 639, 83], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 136341, "bbox": [2, 164, 637, 314], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 9857, "bbox": [230, 69, 69, 211], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 39780, "bbox": [2, 182, 424, 170], "iscrowd": 0}]}, {"image_id": "ADE_val_00000612", "file_name": "ADE_val_00000612.png", "segments_info": [{"id": 522756, "category_id": 10, "area": 56099, "bbox": [0, 0, 598, 150], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 153594, "bbox": [2, 121, 597, 328], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 11869, "bbox": [10, 268, 552, 174], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1552, "bbox": [427, 1, 172, 17], "iscrowd": 0}, {"id": 44265, "category_id": 33, "area": 20177, "bbox": [2, 0, 597, 118], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 8973, "bbox": [36, 222, 169, 89], "iscrowd": 0}, {"id": 7274730, "category_id": 127, "area": 3864, "bbox": [306, 148, 90, 75], "iscrowd": 0}, {"id": 7733484, "category_id": 127, "area": 3688, "bbox": [468, 175, 74, 83], "iscrowd": 0}, {"id": 6881535, "category_id": 127, "area": 3031, "bbox": [172, 119, 74, 65], "iscrowd": 0}, {"id": 6296319, "category_id": 127, "area": 2279, "bbox": [71, 84, 79, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00000613", "file_name": "ADE_val_00000613.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 19131, "bbox": [0, 0, 255, 227], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12930, "bbox": [8, 129, 206, 127], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 884, "bbox": [174, 70, 15, 60], "iscrowd": 0}, {"id": 16711896, "category_id": 11, "area": 283, "bbox": [182, 129, 7, 45], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2567, "bbox": [203, 61, 18, 184], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 2846, "bbox": [88, 5, 20, 207], "iscrowd": 0}, {"id": 16776960, "category_id": 36, "area": 9566, "bbox": [187, 46, 68, 209], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 4281, "bbox": [0, 9, 71, 76], "iscrowd": 0}, {"id": 917277, "category_id": 42, "area": 612, "bbox": [0, 65, 15, 49], "iscrowd": 0}, {"id": 65307, "category_id": 42, "area": 890, "bbox": [0, 163, 13, 92], "iscrowd": 0}, {"id": 1177862, "category_id": 42, "area": 458, "bbox": [12, 207, 32, 42], "iscrowd": 0}, {"id": 65280, "category_id": 42, "area": 1311, "bbox": [44, 93, 33, 90], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 1763, "bbox": [145, 64, 29, 65], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 175, "bbox": [139, 23, 12, 20], "iscrowd": 0}, {"id": 41983, "category_id": 83, "area": 93, "bbox": [155, 10, 11, 11], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1950, "bbox": [7, 150, 35, 81], "iscrowd": 0}]}, {"image_id": "ADE_val_00000614", "file_name": "ADE_val_00000614.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 25379, "bbox": [0, 0, 256, 235], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 38158, "bbox": [2, 18, 254, 238], "iscrowd": 0}]}, {"image_id": "ADE_val_00000615", "file_name": "ADE_val_00000615.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 113196, "bbox": [2, 0, 596, 339], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 61417, "bbox": [2, 266, 596, 128], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 51724, "bbox": [121, 94, 364, 188], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 443, "bbox": [404, 268, 41, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00000616", "file_name": "ADE_val_00000616.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 78112, "bbox": [2, 1, 498, 266], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 29189, "bbox": [0, 213, 500, 161], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 21359, "bbox": [19, 8, 170, 301], "iscrowd": 0}, {"id": 2949286, "category_id": 13, "area": 12573, "bbox": [372, 48, 122, 168], "iscrowd": 0}, {"id": 4724876, "category_id": 13, "area": 4988, "bbox": [422, 202, 75, 101], "iscrowd": 0}, {"id": 5442436, "category_id": 13, "area": 5491, "bbox": [402, 288, 86, 85], "iscrowd": 0}, {"id": 5769372, "category_id": 13, "area": 11200, "bbox": [2, 226, 109, 148], "iscrowd": 0}, {"id": 5308589, "category_id": 13, "area": 18003, "bbox": [146, 184, 242, 190], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2248, "bbox": [186, 142, 144, 129], "iscrowd": 0}, {"id": 7274744, "category_id": 16, "area": 1344, "bbox": [304, 151, 86, 25], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 847, "bbox": [140, 84, 30, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00000617", "file_name": "ADE_val_00000617.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 49974, "bbox": [0, 0, 306, 225], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 17991, "bbox": [0, 0, 320, 181], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 3104, "bbox": [0, 220, 207, 19], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 5055, "bbox": [193, 181, 127, 57], "iscrowd": 0}]}, {"image_id": "ADE_val_00000618", "file_name": "ADE_val_00000618.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 60327, "bbox": [0, 1, 511, 334], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 24475, "bbox": [0, 276, 511, 154], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 19126, "bbox": [3, 0, 508, 80], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4867, "bbox": [158, 138, 53, 95], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1939, "bbox": [73, 186, 65, 84], "iscrowd": 0}, {"id": 4784301, "category_id": 13, "area": 896, "bbox": [205, 219, 35, 38], "iscrowd": 0}, {"id": 3809405, "category_id": 13, "area": 2063, "bbox": [291, 238, 68, 68], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 9726, "bbox": [50, 249, 261, 145], "iscrowd": 0}, {"id": 3997938, "category_id": 16, "area": 24828, "bbox": [193, 274, 317, 156], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2949, "bbox": [206, 367, 82, 63], "iscrowd": 0}, {"id": 676274, "category_id": 20, "area": 2503, "bbox": [446, 317, 40, 111], "iscrowd": 0}, {"id": 1530851, "category_id": 20, "area": 1489, "bbox": [486, 294, 25, 100], "iscrowd": 0}, {"id": 13245, "category_id": 20, "area": 3317, "bbox": [114, 289, 72, 96], "iscrowd": 0}, {"id": 10952, "category_id": 20, "area": 1774, "bbox": [202, 276, 50, 59], "iscrowd": 0}, {"id": 15044, "category_id": 20, "area": 2740, "bbox": [376, 360, 71, 69], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 488, "bbox": [106, 240, 43, 42], "iscrowd": 0}, {"id": 1895162, "category_id": 37, "area": 247, "bbox": [239, 229, 25, 31], "iscrowd": 0}, {"id": 65522, "category_id": 37, "area": 1304, "bbox": [296, 276, 59, 76], "iscrowd": 0}, {"id": 1827544, "category_id": 37, "area": 878, "bbox": [359, 257, 55, 58], "iscrowd": 0}, {"id": 65518, "category_id": 37, "area": 478, "bbox": [408, 244, 42, 46], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 14545, "bbox": [24, 110, 113, 222], "iscrowd": 0}, {"id": 15924992, "category_id": 63, "area": 24358, "bbox": [257, 118, 227, 167], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 598, "bbox": [46, 170, 42, 16], "iscrowd": 0}, {"id": 39679, "category_id": 68, "area": 437, "bbox": [45, 224, 32, 18], "iscrowd": 0}, {"id": 39911, "category_id": 68, "area": 585, "bbox": [44, 206, 43, 15], "iscrowd": 0}, {"id": 1290993, "category_id": 68, "area": 1087, "bbox": [408, 129, 62, 21], "iscrowd": 0}, {"id": 1352953, "category_id": 68, "area": 1121, "bbox": [408, 153, 64, 18], "iscrowd": 0}, {"id": 42977, "category_id": 68, "area": 1224, "bbox": [407, 176, 65, 20], "iscrowd": 0}, {"id": 42991, "category_id": 68, "area": 445, "bbox": [265, 143, 35, 16], "iscrowd": 0}, {"id": 36863, "category_id": 68, "area": 561, "bbox": [265, 179, 35, 17], "iscrowd": 0}, {"id": 44788, "category_id": 68, "area": 510, "bbox": [265, 215, 36, 17], "iscrowd": 0}, {"id": 38911, "category_id": 68, "area": 797, "bbox": [328, 305, 63, 24], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 4261, "bbox": [174, 5, 117, 85], "iscrowd": 0}]}, {"image_id": "ADE_val_00000619", "file_name": "ADE_val_00000619.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 8161, "bbox": [0, 0, 294, 154], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 3123, "bbox": [84, 0, 146, 104], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 33782, "bbox": [0, 0, 293, 260], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 12918, "bbox": [49, 135, 245, 126], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 8063, "bbox": [36, 149, 187, 112], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 7853, "bbox": [0, 137, 294, 124], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 46, "bbox": [13, 139, 5, 15], "iscrowd": 0}, {"id": 2752654, "category_id": 13, "area": 96, "bbox": [268, 140, 9, 20], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 127, "bbox": [102, 140, 16, 11], "iscrowd": 0}, {"id": 13722368, "category_id": 21, "area": 84, "bbox": [118, 140, 8, 13], "iscrowd": 0}, {"id": 11749381, "category_id": 21, "area": 59, "bbox": [85, 138, 10, 9], "iscrowd": 0}, {"id": 12935936, "category_id": 21, "area": 478, "bbox": [158, 139, 31, 21], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 822, "bbox": [53, 96, 18, 77], "iscrowd": 0}]}, {"image_id": "ADE_val_00000620", "file_name": "ADE_val_00000620.png", "segments_info": [{"id": 3289680, "category_id": 4, "area": 33998, "bbox": [0, 435, 683, 76], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 7096, "bbox": [77, 269, 528, 132], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 19813, "bbox": [245, 250, 120, 257], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 623, "bbox": [628, 217, 39, 26], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 21412, "bbox": [0, 342, 221, 124], "iscrowd": 0}, {"id": 8913151, "category_id": 122, "area": 21120, "bbox": [464, 338, 219, 123], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 11654, "bbox": [154, 122, 71, 234], "iscrowd": 0}, {"id": 786424, "category_id": 133, "area": 10901, "bbox": [440, 121, 69, 233], "iscrowd": 0}]}, {"image_id": "ADE_val_00000621", "file_name": "ADE_val_00000621.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14320, "bbox": [2, 1, 315, 89], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12365, "bbox": [2, 87, 315, 338], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2157, "bbox": [92, 1, 225, 16], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 19935, "bbox": [214, 50, 104, 265], "iscrowd": 0}, {"id": 2162838, "category_id": 13, "area": 795, "bbox": [167, 54, 28, 43], "iscrowd": 0}, {"id": 4003719, "category_id": 13, "area": 722, "bbox": [193, 60, 31, 39], "iscrowd": 0}, {"id": 2495902, "category_id": 13, "area": 842, "bbox": [210, 43, 27, 59], "iscrowd": 0}, {"id": 5182073, "category_id": 13, "area": 675, "bbox": [291, 21, 26, 63], "iscrowd": 0}, {"id": 3678115, "category_id": 13, "area": 581, "bbox": [253, 23, 35, 31], "iscrowd": 0}, {"id": 3213213, "category_id": 13, "area": 10094, "bbox": [63, 13, 97, 188], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 28332, "bbox": [2, 119, 316, 306], "iscrowd": 0}, {"id": 6750463, "category_id": 16, "area": 3262, "bbox": [51, 95, 187, 105], "iscrowd": 0}, {"id": 4130303, "category_id": 16, "area": 716, "bbox": [6, 79, 85, 53], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1736, "bbox": [154, 261, 74, 40], "iscrowd": 0}, {"id": 105727, "category_id": 68, "area": 953, "bbox": [110, 230, 54, 29], "iscrowd": 0}, {"id": 37631, "category_id": 68, "area": 1244, "bbox": [79, 215, 72, 32], "iscrowd": 0}, {"id": 48127, "category_id": 68, "area": 3642, "bbox": [41, 339, 100, 67], "iscrowd": 0}, {"id": 1087735, "category_id": 68, "area": 2404, "bbox": [188, 292, 94, 49], "iscrowd": 0}, {"id": 43511, "category_id": 68, "area": 3857, "bbox": [210, 362, 95, 62], "iscrowd": 0}, {"id": 1153023, "category_id": 68, "area": 943, "bbox": [78, 265, 57, 28], "iscrowd": 0}, {"id": 39163, "category_id": 68, "area": 1534, "bbox": [22, 326, 67, 44], "iscrowd": 0}, {"id": 41186, "category_id": 68, "area": 1550, "bbox": [126, 320, 64, 42], "iscrowd": 0}, {"id": 1941759, "category_id": 68, "area": 543, "bbox": [74, 194, 45, 19], "iscrowd": 0}, {"id": 35324, "category_id": 68, "area": 917, "bbox": [17, 183, 50, 28], "iscrowd": 0}, {"id": 768997, "category_id": 68, "area": 1120, "bbox": [2, 208, 46, 36], "iscrowd": 0}, {"id": 36095, "category_id": 68, "area": 228, "bbox": [177, 99, 24, 13], "iscrowd": 0}, {"id": 1215743, "category_id": 68, "area": 228, "bbox": [168, 127, 37, 11], "iscrowd": 0}, {"id": 38655, "category_id": 68, "area": 805, "bbox": [7, 78, 79, 19], "iscrowd": 0}, {"id": 500479, "category_id": 68, "area": 1221, "bbox": [41, 253, 72, 35], "iscrowd": 0}, {"id": 1685247, "category_id": 68, "area": 377, "bbox": [38, 175, 47, 15], "iscrowd": 0}, {"id": 37098, "category_id": 68, "area": 620, "bbox": [21, 164, 48, 23], "iscrowd": 0}, {"id": 34303, "category_id": 68, "area": 642, "bbox": [41, 210, 48, 22], "iscrowd": 0}, {"id": 39678, "category_id": 68, "area": 331, "bbox": [17, 157, 40, 13], "iscrowd": 0}, {"id": 35582, "category_id": 68, "area": 2378, "bbox": [236, 320, 82, 49], "iscrowd": 0}, {"id": 1476607, "category_id": 68, "area": 1713, "bbox": [0, 305, 73, 48], "iscrowd": 0}, {"id": 1225727, "category_id": 68, "area": 4706, "bbox": [138, 327, 112, 83], "iscrowd": 0}, {"id": 238847, "category_id": 68, "area": 1983, "bbox": [65, 282, 71, 47], "iscrowd": 0}, {"id": 501503, "category_id": 68, "area": 1425, "bbox": [15, 231, 68, 33], "iscrowd": 0}, {"id": 47615, "category_id": 68, "area": 382, "bbox": [45, 89, 40, 24], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 78, "bbox": [144, 2, 18, 7], "iscrowd": 0}, {"id": 901631, "category_id": 83, "area": 79, "bbox": [120, 2, 19, 7], "iscrowd": 0}, {"id": 835327, "category_id": 83, "area": 67, "bbox": [101, 3, 18, 8], "iscrowd": 0}, {"id": 42997, "category_id": 83, "area": 142, "bbox": [171, 2, 29, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00000622", "file_name": "ADE_val_00000622.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 100566, "bbox": [71, 1, 429, 370], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 16715, "bbox": [91, 304, 406, 70], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12461, "bbox": [267, 1, 107, 119], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 28576, "bbox": [0, 0, 101, 374], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 18379, "bbox": [206, 15, 84, 335], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2059, "bbox": [23, 23, 34, 76], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 4815, "bbox": [334, 263, 73, 93], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 755, "bbox": [291, 146, 18, 114], "iscrowd": 0}, {"id": 15831808, "category_id": 96, "area": 672, "bbox": [136, 148, 62, 42], "iscrowd": 0}, {"id": 14903808, "category_id": 96, "area": 476, "bbox": [417, 188, 60, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00000623", "file_name": "ADE_val_00000623.png", "segments_info": [{"id": 3999126, "category_id": 13, "area": 5426, "bbox": [180, 110, 77, 135], "iscrowd": 0}, {"id": 5972351, "category_id": 13, "area": 8949, "bbox": [105, 103, 84, 153], "iscrowd": 0}, {"id": 2692758, "category_id": 13, "area": 8256, "bbox": [2, 91, 107, 149], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 40134, "bbox": [0, 0, 301, 253], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 6429, "bbox": [0, 173, 115, 101], "iscrowd": 0}, {"id": 718104, "category_id": 42, "area": 1515, "bbox": [145, 76, 53, 42], "iscrowd": 0}, {"id": 453140, "category_id": 42, "area": 2374, "bbox": [58, 62, 74, 49], "iscrowd": 0}, {"id": 2752284, "category_id": 42, "area": 4796, "bbox": [220, 190, 81, 82], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 4166, "bbox": [34, 202, 267, 72], "iscrowd": 0}]}, {"image_id": "ADE_val_00000624", "file_name": "ADE_val_00000624.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 174764, "bbox": [0, 1, 679, 298], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 22118, "bbox": [3, 131, 226, 187], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 133082, "bbox": [2, 284, 678, 226], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 10574, "bbox": [399, 309, 281, 50], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 2932, "bbox": [348, 290, 84, 59], "iscrowd": 0}, {"id": 8651007, "category_id": 127, "area": 825, "bbox": [316, 292, 37, 39], "iscrowd": 0}, {"id": 6815976, "category_id": 127, "area": 436, "bbox": [267, 280, 30, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00000625", "file_name": "ADE_val_00000625.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 42811, "bbox": [2, 1, 497, 155], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 52614, "bbox": [0, 30, 499, 186], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 26920, "bbox": [0, 165, 499, 133], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 41133, "bbox": [0, 225, 499, 107], "iscrowd": 0}]}, {"image_id": "ADE_val_00000626", "file_name": "ADE_val_00000626.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 20282, "bbox": [13, 1, 243, 243], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 39223, "bbox": [2, 2, 254, 254], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 3554, "bbox": [40, 131, 123, 125], "iscrowd": 0}, {"id": 16769024, "category_id": 114, "area": 231, "bbox": [92, 73, 13, 52], "iscrowd": 0}]}, {"image_id": "ADE_val_00000627", "file_name": "ADE_val_00000627.png", "segments_info": [{"id": 4655103, "category_id": 25, "area": 71329, "bbox": [2, 0, 334, 499], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 20024, "bbox": [124, 46, 117, 206], "iscrowd": 0}, {"id": 1157114, "category_id": 68, "area": 26084, "bbox": [2, 300, 178, 165], "iscrowd": 0}, {"id": 301311, "category_id": 68, "area": 15490, "bbox": [2, 107, 123, 156], "iscrowd": 0}, {"id": 38911, "category_id": 68, "area": 13041, "bbox": [229, 93, 104, 152], "iscrowd": 0}, {"id": 43519, "category_id": 68, "area": 20398, "bbox": [189, 279, 145, 172], "iscrowd": 0}]}, {"image_id": "ADE_val_00000628", "file_name": "ADE_val_00000628.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1048, "bbox": [203, 166, 75, 16], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 2182, "bbox": [224, 101, 50, 66], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 103091, "bbox": [2, 0, 481, 293], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 33305, "bbox": [2, 182, 478, 113], "iscrowd": 0}]}, {"image_id": "ADE_val_00000629", "file_name": "ADE_val_00000629.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 32254, "bbox": [0, 8, 259, 222], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 18871, "bbox": [0, 0, 259, 104], "iscrowd": 0}, {"id": 16711762, "category_id": 102, "area": 7691, "bbox": [2, 210, 257, 50], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1634, "bbox": [93, 152, 29, 61], "iscrowd": 0}, {"id": 3538688, "category_id": 15, "area": 1666, "bbox": [38, 149, 24, 76], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 26764, "bbox": [0, 234, 259, 115], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 80, "bbox": [48, 133, 10, 8], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 65, "bbox": [85, 13, 8, 11], "iscrowd": 0}, {"id": 1873135, "category_id": 83, "area": 62, "bbox": [118, 16, 13, 7], "iscrowd": 0}, {"id": 627189, "category_id": 83, "area": 41, "bbox": [191, 1, 11, 5], "iscrowd": 0}, {"id": 1289193, "category_id": 83, "area": 32, "bbox": [62, 32, 10, 4], "iscrowd": 0}, {"id": 1493759, "category_id": 83, "area": 25, "bbox": [111, 61, 8, 5], "iscrowd": 0}, {"id": 103679, "category_id": 83, "area": 33, "bbox": [164, 52, 8, 6], "iscrowd": 0}, {"id": 1940479, "category_id": 83, "area": 30, "bbox": [225, 43, 8, 5], "iscrowd": 0}, {"id": 37603, "category_id": 83, "area": 23, "bbox": [145, 93, 6, 5], "iscrowd": 0}, {"id": 50687, "category_id": 83, "area": 22, "bbox": [192, 88, 7, 5], "iscrowd": 0}, {"id": 48895, "category_id": 83, "area": 29, "bbox": [246, 83, 10, 5], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 68, "bbox": [146, 199, 18, 23], "iscrowd": 0}, {"id": 16772352, "category_id": 111, "area": 111, "bbox": [226, 204, 20, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00000630", "file_name": "ADE_val_00000630.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 27467, "bbox": [0, 0, 288, 198], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 718, "bbox": [107, 196, 62, 14], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5180, "bbox": [1, 0, 286, 23], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 11065, "bbox": [82, 32, 135, 84], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 6898, "bbox": [169, 94, 119, 116], "iscrowd": 0}, {"id": 14614305, "category_id": 32, "area": 8431, "bbox": [0, 91, 115, 118], "iscrowd": 0}]}, {"image_id": "ADE_val_00000631", "file_name": "ADE_val_00000631.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 62804, "bbox": [0, 1, 500, 373], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 56349, "bbox": [0, 108, 468, 266], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9371, "bbox": [0, 0, 273, 50], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2544, "bbox": [84, 80, 48, 119], "iscrowd": 0}, {"id": 3604645, "category_id": 13, "area": 2076, "bbox": [189, 77, 33, 117], "iscrowd": 0}, {"id": 2102929, "category_id": 13, "area": 3491, "bbox": [256, 114, 69, 100], "iscrowd": 0}, {"id": 5512851, "category_id": 13, "area": 8805, "bbox": [222, 154, 100, 165], "iscrowd": 0}, {"id": 2097329, "category_id": 13, "area": 408, "bbox": [131, 69, 23, 57], "iscrowd": 0}, {"id": 4784299, "category_id": 13, "area": 17991, "bbox": [283, 181, 196, 193], "iscrowd": 0}, {"id": 3677826, "category_id": 13, "area": 6776, "bbox": [137, 57, 66, 230], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 828, "bbox": [5, 43, 22, 104], "iscrowd": 0}, {"id": 4194061, "category_id": 15, "area": 1059, "bbox": [120, 56, 39, 51], "iscrowd": 0}, {"id": 2485760, "category_id": 15, "area": 1095, "bbox": [235, 34, 14, 106], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3386, "bbox": [360, 241, 131, 132], "iscrowd": 0}, {"id": 1785564, "category_id": 20, "area": 3044, "bbox": [284, 186, 88, 118], "iscrowd": 0}, {"id": 1396173, "category_id": 20, "area": 1164, "bbox": [320, 167, 20, 74], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2265, "bbox": [51, 1, 128, 24], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 438, "bbox": [269, 21, 14, 36], "iscrowd": 0}, {"id": 16729600, "category_id": 135, "area": 68, "bbox": [45, 60, 9, 12], "iscrowd": 0}, {"id": 16725527, "category_id": 135, "area": 82, "bbox": [204, 51, 9, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000632", "file_name": "ADE_val_00000632.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 17003, "bbox": [18, 0, 237, 93], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 10165, "bbox": [18, 69, 238, 187], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 688, "bbox": [135, 52, 70, 53], "iscrowd": 0}, {"id": 13942282, "category_id": 129, "area": 30251, "bbox": [28, 99, 227, 155], "iscrowd": 0}, {"id": 16711751, "category_id": 141, "area": 1288, "bbox": [101, 89, 155, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00000633", "file_name": "ADE_val_00000633.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 12574, "bbox": [0, 0, 267, 112], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 10027, "bbox": [0, 31, 267, 95], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 14253, "bbox": [0, 139, 267, 60], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 512, "bbox": [233, 123, 34, 20], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 166, "bbox": [198, 0, 3, 147], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 745, "bbox": [0, 128, 43, 25], "iscrowd": 0}, {"id": 11554560, "category_id": 21, "area": 830, "bbox": [165, 122, 48, 24], "iscrowd": 0}, {"id": 14051598, "category_id": 21, "area": 397, "bbox": [147, 124, 32, 20], "iscrowd": 0}, {"id": 11629312, "category_id": 21, "area": 412, "bbox": [119, 120, 28, 28], "iscrowd": 0}, {"id": 13264640, "category_id": 21, "area": 262, "bbox": [133, 121, 22, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00000634", "file_name": "ADE_val_00000634.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 13541, "bbox": [2, 1, 761, 125], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 10423, "bbox": [0, 0, 460, 108], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 19356, "bbox": [2, 0, 407, 75], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 198239, "bbox": [0, 96, 762, 414], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 3674, "bbox": [5, 214, 72, 97], "iscrowd": 0}, {"id": 1376192, "category_id": 77, "area": 2654, "bbox": [597, 278, 62, 117], "iscrowd": 0}, {"id": 1632190, "category_id": 77, "area": 1372, "bbox": [670, 123, 35, 92], "iscrowd": 0}, {"id": 60415, "category_id": 104, "area": 6352, "bbox": [186, 153, 111, 173], "iscrowd": 0}, {"id": 1298171, "category_id": 104, "area": 5948, "bbox": [417, 210, 93, 175], "iscrowd": 0}]}, {"image_id": "ADE_val_00000635", "file_name": "ADE_val_00000635.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 214142, "bbox": [0, 0, 475, 638], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 29833, "bbox": [2, 416, 206, 223], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 47428, "bbox": [387, 0, 91, 638], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 10408, "bbox": [72, 358, 137, 126], "iscrowd": 0}]}, {"image_id": "ADE_val_00000636", "file_name": "ADE_val_00000636.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 64317, "bbox": [0, 0, 682, 141], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 38561, "bbox": [2, 411, 680, 99], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 4332, "bbox": [108, 121, 76, 59], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 28822, "bbox": [85, 234, 126, 247], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 15085, "bbox": [472, 329, 210, 182], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 2663, "bbox": [60, 186, 164, 38], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 3749, "bbox": [508, 213, 102, 96], "iscrowd": 0}, {"id": 11402006, "category_id": 75, "area": 6441, "bbox": [241, 219, 107, 98], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 4858, "bbox": [628, 233, 54, 100], "iscrowd": 0}, {"id": 16711712, "category_id": 76, "area": 8264, "bbox": [0, 270, 55, 188], "iscrowd": 0}, {"id": 14811136, "category_id": 76, "area": 19937, "bbox": [316, 254, 151, 242], "iscrowd": 0}, {"id": 13369599, "category_id": 89, "area": 11795, "bbox": [2, 117, 59, 373], "iscrowd": 0}, {"id": 11868910, "category_id": 89, "area": 22777, "bbox": [50, 119, 183, 362], "iscrowd": 0}, {"id": 13959400, "category_id": 89, "area": 56688, "bbox": [222, 115, 270, 359], "iscrowd": 0}, {"id": 14352621, "category_id": 89, "area": 33047, "bbox": [492, 117, 190, 340], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 6331, "bbox": [199, 10, 85, 78], "iscrowd": 0}, {"id": 16730368, "category_id": 144, "area": 6237, "bbox": [301, 12, 85, 76], "iscrowd": 0}, {"id": 16475392, "category_id": 144, "area": 5545, "bbox": [402, 17, 79, 73], "iscrowd": 0}, {"id": 15876864, "category_id": 144, "area": 5145, "bbox": [495, 20, 78, 72], "iscrowd": 0}]}, {"image_id": "ADE_val_00000637", "file_name": "ADE_val_00000637.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 117661, "bbox": [0, 4, 682, 226], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 138626, "bbox": [1, 260, 681, 251], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 11229, "bbox": [0, 0, 682, 25], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 5848, "bbox": [483, 228, 199, 54], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2989, "bbox": [562, 205, 52, 136], "iscrowd": 0}, {"id": 4456595, "category_id": 13, "area": 1153, "bbox": [414, 207, 21, 103], "iscrowd": 0}, {"id": 5702036, "category_id": 13, "area": 2856, "bbox": [431, 195, 26, 150], "iscrowd": 0}, {"id": 4199562, "category_id": 13, "area": 4065, "bbox": [453, 207, 43, 150], "iscrowd": 0}, {"id": 2818218, "category_id": 13, "area": 1368, "bbox": [388, 206, 35, 73], "iscrowd": 0}, {"id": 3736223, "category_id": 13, "area": 2673, "bbox": [367, 205, 45, 118], "iscrowd": 0}, {"id": 5311666, "category_id": 13, "area": 3455, "bbox": [0, 201, 114, 90], "iscrowd": 0}, {"id": 2163123, "category_id": 13, "area": 260, "bbox": [158, 201, 17, 31], "iscrowd": 0}, {"id": 3473537, "category_id": 13, "area": 4582, "bbox": [129, 200, 56, 162], "iscrowd": 0}, {"id": 5968011, "category_id": 13, "area": 5693, "bbox": [163, 195, 65, 166], "iscrowd": 0}, {"id": 4128903, "category_id": 13, "area": 1199, "bbox": [210, 201, 21, 106], "iscrowd": 0}, {"id": 3154859, "category_id": 13, "area": 3587, "bbox": [223, 202, 40, 144], "iscrowd": 0}, {"id": 3546272, "category_id": 13, "area": 2048, "bbox": [253, 195, 36, 110], "iscrowd": 0}, {"id": 4718730, "category_id": 13, "area": 178, "bbox": [243, 205, 16, 16], "iscrowd": 0}, {"id": 3539067, "category_id": 13, "area": 985, "bbox": [281, 205, 18, 98], "iscrowd": 0}, {"id": 5047672, "category_id": 13, "area": 1770, "bbox": [294, 210, 27, 97], "iscrowd": 0}, {"id": 3866748, "category_id": 13, "area": 257, "bbox": [290, 202, 15, 30], "iscrowd": 0}, {"id": 3211403, "category_id": 13, "area": 2501, "bbox": [320, 209, 39, 112], "iscrowd": 0}, {"id": 3414657, "category_id": 13, "area": 1733, "bbox": [341, 204, 39, 94], "iscrowd": 0}, {"id": 3280542, "category_id": 13, "area": 1964, "bbox": [106, 203, 25, 104], "iscrowd": 0}, {"id": 5112702, "category_id": 13, "area": 2918, "bbox": [54, 204, 41, 124], "iscrowd": 0}, {"id": 5046412, "category_id": 13, "area": 4640, "bbox": [15, 202, 40, 149], "iscrowd": 0}, {"id": 3604626, "category_id": 13, "area": 467, "bbox": [316, 207, 18, 43], "iscrowd": 0}, {"id": 3997823, "category_id": 13, "area": 1072, "bbox": [530, 206, 23, 85], "iscrowd": 0}, {"id": 5836458, "category_id": 13, "area": 1106, "bbox": [554, 204, 23, 88], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 14648, "bbox": [104, 1, 179, 114], "iscrowd": 0}]}, {"image_id": "ADE_val_00000638", "file_name": "ADE_val_00000638.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1397, "bbox": [0, 192, 499, 32], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 43916, "bbox": [26, 75, 473, 167], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 65826, "bbox": [0, 0, 499, 194], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 46791, "bbox": [2, 209, 497, 118], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 3346, "bbox": [0, 118, 499, 85], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 469, "bbox": [331, 201, 16, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00000639", "file_name": "ADE_val_00000639.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 101134, "bbox": [1, 1, 681, 384], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 108451, "bbox": [0, 280, 682, 231], "iscrowd": 0}, {"id": 16711833, "category_id": 118, "area": 61792, "bbox": [156, 87, 344, 315], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1982, "bbox": [46, 279, 59, 48], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 24116, "bbox": [558, 152, 124, 246], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 2905, "bbox": [389, 113, 81, 64], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 3459, "bbox": [583, 67, 77, 79], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 3338, "bbox": [601, 103, 79, 60], "iscrowd": 0}]}, {"image_id": "ADE_val_00000640", "file_name": "ADE_val_00000640.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 38659, "bbox": [12, 0, 348, 237], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6188, "bbox": [100, 187, 259, 52], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6184, "bbox": [16, 0, 336, 30], "iscrowd": 0}, {"id": 16711833, "category_id": 118, "area": 11023, "bbox": [97, 114, 144, 124], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 7106, "bbox": [300, 34, 59, 153], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4922, "bbox": [0, 0, 30, 239], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 4334, "bbox": [264, 155, 88, 83], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 544, "bbox": [311, 192, 27, 29], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 5408, "bbox": [25, 159, 79, 80], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 890, "bbox": [279, 170, 34, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00000641", "file_name": "ADE_val_00000641.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 61137, "bbox": [0, 0, 399, 276], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14483, "bbox": [2, 218, 398, 81], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 3722, "bbox": [153, 266, 145, 33], "iscrowd": 0}, {"id": 16711833, "category_id": 118, "area": 23178, "bbox": [0, 109, 158, 175], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 697, "bbox": [18, 17, 31, 30], "iscrowd": 0}, {"id": 3473663, "category_id": 23, "area": 445, "bbox": [241, 55, 20, 25], "iscrowd": 0}, {"id": 5115895, "category_id": 23, "area": 343, "bbox": [265, 66, 17, 23], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1691, "bbox": [120, 62, 54, 74], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 12092, "bbox": [273, 150, 127, 138], "iscrowd": 0}]}, {"image_id": "ADE_val_00000642", "file_name": "ADE_val_00000642.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 31533, "bbox": [103, 48, 237, 224], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 24252, "bbox": [0, 1, 549, 74], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 106087, "bbox": [0, 14, 549, 286], "iscrowd": 0}]}, {"image_id": "ADE_val_00000643", "file_name": "ADE_val_00000643.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 14619, "bbox": [87, 46, 178, 124], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 21665, "bbox": [0, 0, 280, 115], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1773, "bbox": [242, 84, 38, 79], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 3677, "bbox": [45, 162, 235, 48], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 7679, "bbox": [0, 170, 280, 40], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 3648, "bbox": [0, 69, 133, 61], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 712, "bbox": [0, 152, 46, 21], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 3979, "bbox": [0, 107, 96, 63], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 172, "bbox": [195, 117, 16, 14], "iscrowd": 0}, {"id": 16774089, "category_id": 9, "area": 71, "bbox": [102, 123, 10, 9], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 231, "bbox": [102, 143, 10, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00000644", "file_name": "ADE_val_00000644.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 130511, "bbox": [0, 2, 683, 352], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 55844, "bbox": [1, 306, 682, 206], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 41614, "bbox": [304, 314, 277, 198], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 26693, "bbox": [0, 187, 566, 110], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 15672, "bbox": [554, 259, 126, 178], "iscrowd": 0}, {"id": 10612736, "category_id": 75, "area": 40294, "bbox": [48, 79, 241, 390], "iscrowd": 0}, {"id": 10674461, "category_id": 75, "area": 35242, "bbox": [247, 70, 289, 363], "iscrowd": 0}]}, {"image_id": "ADE_val_00000645", "file_name": "ADE_val_00000645.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 64680, "bbox": [35, 0, 647, 317], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21373, "bbox": [66, 420, 566, 91], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 12801, "bbox": [490, 245, 138, 107], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 22369, "bbox": [1, 240, 150, 272], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 31587, "bbox": [50, 290, 591, 181], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 5946, "bbox": [630, 316, 53, 119], "iscrowd": 0}, {"id": 1898503, "category_id": 42, "area": 585, "bbox": [369, 91, 52, 13], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 56609, "bbox": [119, 1, 564, 119], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 3655, "bbox": [632, 435, 51, 77], "iscrowd": 0}, {"id": 10745088, "category_id": 75, "area": 71876, "bbox": [84, 145, 334, 285], "iscrowd": 0}]}, {"image_id": "ADE_val_00000646", "file_name": "ADE_val_00000646.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 11978, "bbox": [0, 0, 216, 139], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 20308, "bbox": [0, 96, 256, 160], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 7454, "bbox": [84, 1, 96, 86], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2559, "bbox": [218, 151, 38, 98], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2382, "bbox": [7, 1, 44, 59], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 11357, "bbox": [69, 86, 187, 162], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 472, "bbox": [206, 56, 43, 61], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 2324, "bbox": [216, 0, 40, 105], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 270, "bbox": [221, 29, 17, 16], "iscrowd": 0}, {"id": 49149, "category_id": 68, "area": 614, "bbox": [125, 117, 56, 18], "iscrowd": 0}, {"id": 43007, "category_id": 68, "area": 220, "bbox": [240, 32, 16, 16], "iscrowd": 0}, {"id": 41471, "category_id": 68, "area": 507, "bbox": [228, 47, 27, 26], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 2870, "bbox": [31, 73, 67, 118], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 157, "bbox": [241, 4, 10, 17], "iscrowd": 0}, {"id": 14548736, "category_id": 136, "area": 160, "bbox": [227, 0, 10, 20], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 218, "bbox": [187, 87, 19, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00000647", "file_name": "ADE_val_00000647.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 19351, "bbox": [0, 0, 255, 211], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9351, "bbox": [0, 167, 255, 89], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1350, "bbox": [15, 1, 223, 12], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 423, "bbox": [1, 130, 22, 29], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2435, "bbox": [0, 43, 26, 113], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2064, "bbox": [0, 165, 58, 90], "iscrowd": 0}, {"id": 5767414, "category_id": 16, "area": 1741, "bbox": [218, 201, 38, 54], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4566, "bbox": [24, 169, 72, 86], "iscrowd": 0}, {"id": 11467, "category_id": 20, "area": 685, "bbox": [19, 147, 39, 19], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 6125, "bbox": [81, 121, 139, 91], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 278, "bbox": [227, 28, 28, 19], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 1430, "bbox": [47, 60, 36, 52], "iscrowd": 0}, {"id": 15002880, "category_id": 63, "area": 5031, "bbox": [221, 46, 33, 158], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 84, "bbox": [123, 151, 27, 4], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 2292, "bbox": [94, 138, 67, 95], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 1212, "bbox": [170, 89, 38, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00000648", "file_name": "ADE_val_00000648.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 10153, "bbox": [0, 0, 250, 167], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21432, "bbox": [0, 80, 256, 176], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4958, "bbox": [22, 1, 57, 96], "iscrowd": 0}, {"id": 14543075, "category_id": 9, "area": 3819, "bbox": [90, 1, 49, 84], "iscrowd": 0}, {"id": 15977950, "category_id": 9, "area": 844, "bbox": [0, 1, 12, 104], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 5501, "bbox": [134, 76, 104, 97], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 195, "bbox": [186, 73, 54, 21], "iscrowd": 0}, {"id": 4325624, "category_id": 25, "area": 89, "bbox": [144, 54, 39, 12], "iscrowd": 0}, {"id": 6100735, "category_id": 25, "area": 127, "bbox": [146, 34, 37, 10], "iscrowd": 0}, {"id": 3014895, "category_id": 25, "area": 293, "bbox": [188, 48, 54, 19], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 7420, "bbox": [10, 105, 148, 142], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 622, "bbox": [80, 84, 33, 46], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 32, "bbox": [192, 45, 10, 4], "iscrowd": 0}, {"id": 2948864, "category_id": 42, "area": 157, "bbox": [54, 168, 18, 11], "iscrowd": 0}, {"id": 651279, "category_id": 42, "area": 336, "bbox": [70, 150, 15, 25], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 414, "bbox": [152, 18, 26, 20], "iscrowd": 0}, {"id": 42210, "category_id": 68, "area": 525, "bbox": [147, 38, 28, 24], "iscrowd": 0}, {"id": 42751, "category_id": 68, "area": 784, "bbox": [195, 56, 36, 30], "iscrowd": 0}, {"id": 1019135, "category_id": 68, "area": 457, "bbox": [204, 37, 27, 23], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 1296, "bbox": [91, 117, 55, 38], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 1966, "bbox": [17, 92, 45, 56], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 42, "bbox": [13, 15, 5, 14], "iscrowd": 0}, {"id": 14949376, "category_id": 135, "area": 82, "bbox": [80, 9, 8, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00000649", "file_name": "ADE_val_00000649.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 82960, "bbox": [2, 0, 598, 325], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 40756, "bbox": [1, 262, 468, 192], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 16520, "bbox": [63, 1, 487, 61], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 3978, "bbox": [167, 95, 182, 55], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 7750, "bbox": [369, 81, 90, 92], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2714, "bbox": [1, 217, 31, 130], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 6403, "bbox": [459, 74, 68, 145], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1280, "bbox": [418, 214, 64, 29], "iscrowd": 0}, {"id": 18884, "category_id": 20, "area": 25845, "bbox": [182, 219, 227, 235], "iscrowd": 0}, {"id": 24273, "category_id": 20, "area": 1198, "bbox": [328, 211, 55, 28], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 13387, "bbox": [13, 190, 168, 146], "iscrowd": 0}, {"id": 4842240, "category_id": 34, "area": 24181, "bbox": [274, 232, 325, 222], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 251, "bbox": [482, 46, 24, 13], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 607, "bbox": [36, 197, 55, 26], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 10706, "bbox": [357, 162, 231, 178], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1489, "bbox": [174, 13, 97, 32], "iscrowd": 0}, {"id": 50914, "category_id": 83, "area": 847, "bbox": [418, 1, 64, 18], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 685, "bbox": [384, 212, 34, 27], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 510, "bbox": [4, 13, 25, 27], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 584, "bbox": [427, 186, 21, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00000650", "file_name": "ADE_val_00000650.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 79371, "bbox": [0, 18, 599, 231], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 52019, "bbox": [0, 0, 599, 146], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 10934, "bbox": [2, 65, 527, 185], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 31855, "bbox": [0, 248, 599, 70], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 10937, "bbox": [35, 240, 549, 30], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 566, "bbox": [109, 198, 20, 49], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1160, "bbox": [0, 214, 38, 40], "iscrowd": 0}, {"id": 11950102, "category_id": 21, "area": 1108, "bbox": [568, 217, 31, 48], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 541, "bbox": [453, 157, 21, 101], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 1178, "bbox": [341, 121, 21, 137], "iscrowd": 0}]}, {"image_id": "ADE_val_00000651", "file_name": "ADE_val_00000651.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 24885, "bbox": [0, 2, 286, 163], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5764, "bbox": [0, 139, 286, 41], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4109, "bbox": [0, 0, 286, 30], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2144, "bbox": [76, 59, 32, 104], "iscrowd": 0}, {"id": 4328104, "category_id": 13, "area": 2326, "bbox": [46, 60, 38, 111], "iscrowd": 0}, {"id": 4522117, "category_id": 13, "area": 708, "bbox": [237, 71, 27, 41], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 301, "bbox": [165, 7, 59, 11], "iscrowd": 0}, {"id": 371440, "category_id": 83, "area": 489, "bbox": [95, 0, 73, 13], "iscrowd": 0}, {"id": 47871, "category_id": 83, "area": 235, "bbox": [28, 0, 67, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00000652", "file_name": "ADE_val_00000652.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 223038, "bbox": [0, 0, 749, 408], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 136559, "bbox": [0, 279, 749, 232], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 4706, "bbox": [38, 285, 199, 102], "iscrowd": 0}, {"id": 8388845, "category_id": 127, "area": 3478, "bbox": [232, 251, 150, 57], "iscrowd": 0}, {"id": 8519935, "category_id": 127, "area": 7054, "bbox": [236, 254, 252, 63], "iscrowd": 0}, {"id": 8788223, "category_id": 127, "area": 6136, "bbox": [646, 213, 103, 106], "iscrowd": 0}]}, {"image_id": "ADE_val_00000653", "file_name": "ADE_val_00000653.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 37361, "bbox": [264, 0, 336, 243], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 130149, "bbox": [0, 0, 824, 278], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 172592, "bbox": [0, 264, 824, 247], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 3822, "bbox": [0, 272, 148, 33], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 9551, "bbox": [0, 267, 824, 112], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 41771, "bbox": [121, 165, 604, 133], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 122, "bbox": [461, 258, 13, 11], "iscrowd": 0}, {"id": 13789184, "category_id": 21, "area": 315, "bbox": [261, 253, 45, 15], "iscrowd": 0}, {"id": 11361296, "category_id": 21, "area": 4531, "bbox": [698, 259, 125, 50], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2046, "bbox": [742, 96, 32, 236], "iscrowd": 0}, {"id": 11737599, "category_id": 44, "area": 199, "bbox": [417, 183, 18, 12], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 360, "bbox": [427, 248, 21, 20], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 2054, "bbox": [574, 15, 55, 280], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 549, "bbox": [248, 153, 11, 140], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 1612, "bbox": [1, 117, 202, 48], "iscrowd": 0}, {"id": 15735846, "category_id": 137, "area": 663, "bbox": [524, 154, 71, 35], "iscrowd": 0}, {"id": 16711694, "category_id": 137, "area": 194, "bbox": [233, 232, 16, 15], "iscrowd": 0}, {"id": 16711735, "category_id": 137, "area": 378, "bbox": [351, 214, 44, 55], "iscrowd": 0}, {"id": 16583968, "category_id": 137, "area": 129, "bbox": [523, 229, 12, 24], "iscrowd": 0}, {"id": 16716864, "category_id": 137, "area": 2611, "bbox": [723, 146, 53, 183], "iscrowd": 0}]}, {"image_id": "ADE_val_00000654", "file_name": "ADE_val_00000654.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 43961, "bbox": [2, 1, 379, 413], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 33629, "bbox": [0, 353, 381, 209], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 8086, "bbox": [220, 481, 159, 67], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 4926, "bbox": [0, 492, 205, 56], "iscrowd": 0}, {"id": 6094592, "category_id": 107, "area": 105615, "bbox": [4, 26, 366, 473], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 15456, "bbox": [0, 296, 226, 176], "iscrowd": 0}]}, {"image_id": "ADE_val_00000655", "file_name": "ADE_val_00000655.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 117593, "bbox": [0, 73, 639, 317], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 35412, "bbox": [2, 323, 637, 156], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 44979, "bbox": [0, 0, 639, 124], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 9237, "bbox": [474, 168, 66, 152], "iscrowd": 0}, {"id": 16570585, "category_id": 9, "area": 12648, "bbox": [542, 164, 87, 168], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 27227, "bbox": [19, 279, 445, 166], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 5317, "bbox": [152, 373, 109, 100], "iscrowd": 0}, {"id": 20443, "category_id": 20, "area": 1949, "bbox": [415, 331, 56, 57], "iscrowd": 0}, {"id": 351957, "category_id": 20, "area": 5035, "bbox": [199, 411, 133, 67], "iscrowd": 0}, {"id": 25030, "category_id": 20, "area": 4945, "bbox": [332, 388, 93, 88], "iscrowd": 0}, {"id": 2185958, "category_id": 20, "area": 3842, "bbox": [420, 366, 81, 91], "iscrowd": 0}, {"id": 279775, "category_id": 20, "area": 2600, "bbox": [492, 351, 67, 78], "iscrowd": 0}, {"id": 17357, "category_id": 20, "area": 494, "bbox": [428, 459, 45, 19], "iscrowd": 0}, {"id": 24786, "category_id": 20, "area": 2145, "bbox": [471, 421, 83, 55], "iscrowd": 0}, {"id": 22721, "category_id": 20, "area": 3590, "bbox": [544, 395, 85, 81], "iscrowd": 0}, {"id": 216036, "category_id": 20, "area": 3634, "bbox": [260, 357, 87, 68], "iscrowd": 0}, {"id": 1922004, "category_id": 20, "area": 2581, "bbox": [347, 343, 69, 63], "iscrowd": 0}, {"id": 871638, "category_id": 20, "area": 1454, "bbox": [523, 307, 71, 80], "iscrowd": 0}]}, {"image_id": "ADE_val_00000656", "file_name": "ADE_val_00000656.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 73779, "bbox": [0, 0, 370, 249], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1017, "bbox": [12, 135, 353, 31], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 363, "bbox": [167, 144, 26, 25], "iscrowd": 0}, {"id": 3539116, "category_id": 13, "area": 504, "bbox": [232, 139, 25, 31], "iscrowd": 0}, {"id": 2493840, "category_id": 13, "area": 780, "bbox": [149, 148, 41, 59], "iscrowd": 0}, {"id": 2950576, "category_id": 13, "area": 457, "bbox": [197, 147, 39, 30], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 641, "bbox": [130, 163, 47, 54], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 13447, "bbox": [11, 36, 332, 72], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 283, "bbox": [332, 149, 30, 13], "iscrowd": 0}, {"id": 16189409, "category_id": 126, "area": 338, "bbox": [259, 157, 39, 13], "iscrowd": 0}, {"id": 16711922, "category_id": 126, "area": 296, "bbox": [15, 165, 34, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00000657", "file_name": "ADE_val_00000657.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 131366, "bbox": [2, 4, 594, 383], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 24797, "bbox": [3, 300, 595, 148], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 5727, "bbox": [349, 205, 91, 98], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 59438, "bbox": [7, 118, 245, 304], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 6122, "bbox": [266, 2, 130, 364], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 12163, "bbox": [480, 319, 116, 129], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 4194, "bbox": [236, 233, 70, 107], "iscrowd": 0}, {"id": 8894047, "category_id": 116, "area": 9616, "bbox": [368, 332, 132, 104], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 4150, "bbox": [353, 301, 70, 82], "iscrowd": 0}]}, {"image_id": "ADE_val_00000658", "file_name": "ADE_val_00000658.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 128808, "bbox": [0, 0, 500, 374], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 56749, "bbox": [0, 135, 436, 239], "iscrowd": 0}]}, {"image_id": "ADE_val_00000659", "file_name": "ADE_val_00000659.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 74119, "bbox": [2, 1, 497, 295], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 20000, "bbox": [0, 219, 499, 113], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1254, "bbox": [143, 192, 57, 37], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6930, "bbox": [90, 134, 95, 189], "iscrowd": 0}, {"id": 5115036, "category_id": 13, "area": 9235, "bbox": [279, 85, 117, 247], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 992, "bbox": [78, 177, 124, 23], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1317, "bbox": [180, 163, 65, 93], "iscrowd": 0}, {"id": 1265362, "category_id": 20, "area": 2775, "bbox": [38, 204, 108, 127], "iscrowd": 0}, {"id": 23011, "category_id": 20, "area": 3799, "bbox": [162, 185, 84, 123], "iscrowd": 0}, {"id": 1728176, "category_id": 20, "area": 1198, "bbox": [44, 163, 36, 43], "iscrowd": 0}, {"id": 14798, "category_id": 20, "area": 2134, "bbox": [0, 185, 50, 124], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 1028, "bbox": [185, 307, 68, 25], "iscrowd": 0}, {"id": 9226329, "category_id": 116, "area": 3763, "bbox": [51, 204, 57, 74], "iscrowd": 0}]}, {"image_id": "ADE_val_00000660", "file_name": "ADE_val_00000660.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 2090, "bbox": [91, 293, 137, 48], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 167, "bbox": [602, 210, 18, 13], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 78414, "bbox": [0, 0, 639, 205], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 556, "bbox": [612, 189, 27, 32], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 68538, "bbox": [0, 241, 639, 238], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 40365, "bbox": [1, 269, 638, 210], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 345, "bbox": [599, 233, 40, 11], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 109772, "bbox": [13, 72, 608, 258], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 2064, "bbox": [0, 204, 639, 65], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 480, "bbox": [599, 259, 40, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00000661", "file_name": "ADE_val_00000661.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 42583, "bbox": [2, 2, 396, 274], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21565, "bbox": [28, 87, 371, 343], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 55120, "bbox": [1, 22, 383, 408], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 5273, "bbox": [28, 260, 121, 153], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 6342, "bbox": [70, 270, 67, 160], "iscrowd": 0}, {"id": 1702408, "category_id": 99, "area": 5410, "bbox": [29, 273, 57, 158], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 12059, "bbox": [136, 225, 159, 110], "iscrowd": 0}, {"id": 59134, "category_id": 121, "area": 5236, "bbox": [182, 152, 155, 47], "iscrowd": 0}, {"id": 58870, "category_id": 121, "area": 4258, "bbox": [55, 171, 108, 50], "iscrowd": 0}, {"id": 1166320, "category_id": 121, "area": 2107, "bbox": [169, 97, 93, 34], "iscrowd": 0}, {"id": 47615, "category_id": 121, "area": 1756, "bbox": [178, 127, 74, 31], "iscrowd": 0}, {"id": 48895, "category_id": 121, "area": 952, "bbox": [258, 114, 68, 21], "iscrowd": 0}, {"id": 1487585, "category_id": 121, "area": 809, "bbox": [192, 75, 63, 22], "iscrowd": 0}, {"id": 1236472, "category_id": 121, "area": 786, "bbox": [172, 189, 42, 24], "iscrowd": 0}, {"id": 57343, "category_id": 121, "area": 678, "bbox": [107, 157, 62, 20], "iscrowd": 0}, {"id": 251647, "category_id": 121, "area": 472, "bbox": [270, 92, 51, 13], "iscrowd": 0}, {"id": 48383, "category_id": 121, "area": 236, "bbox": [239, 46, 21, 15], "iscrowd": 0}, {"id": 54271, "category_id": 121, "area": 213, "bbox": [133, 147, 32, 10], "iscrowd": 0}, {"id": 54783, "category_id": 121, "area": 182, "bbox": [337, 36, 31, 8], "iscrowd": 0}, {"id": 1236218, "category_id": 121, "area": 154, "bbox": [155, 130, 30, 8], "iscrowd": 0}, {"id": 57087, "category_id": 121, "area": 133, "bbox": [261, 31, 20, 9], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 565, "bbox": [320, 17, 41, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00000662", "file_name": "ADE_val_00000662.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 13392, "bbox": [171, 333, 512, 100], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 144862, "bbox": [0, 0, 682, 293], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 86228, "bbox": [0, 128, 683, 249], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 78393, "bbox": [0, 292, 683, 220], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 6015, "bbox": [77, 371, 211, 81], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 338, "bbox": [246, 271, 42, 25], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 9896, "bbox": [0, 290, 178, 147], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1487, "bbox": [92, 367, 30, 70], "iscrowd": 0}, {"id": 8326911, "category_id": 44, "area": 266, "bbox": [219, 360, 19, 18], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 2143, "bbox": [181, 80, 104, 290], "iscrowd": 0}, {"id": 16737024, "category_id": 88, "area": 253, "bbox": [191, 273, 23, 118], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 14, "bbox": [216, 337, 3, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00000663", "file_name": "ADE_val_00000663.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 22794, "bbox": [1, 1, 253, 121], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 14858, "bbox": [0, 150, 229, 104], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 10077, "bbox": [0, 142, 255, 112], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 1165, "bbox": [0, 147, 94, 26], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 13845, "bbox": [1, 70, 253, 80], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 425, "bbox": [35, 161, 31, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00000664", "file_name": "ADE_val_00000664.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 13642, "bbox": [75, 165, 497, 64], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 97905, "bbox": [0, 0, 701, 160], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 32307, "bbox": [1, 125, 699, 94], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 12846, "bbox": [1, 173, 603, 58], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 91553, "bbox": [0, 213, 702, 165], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 31364, "bbox": [1, 342, 701, 60], "iscrowd": 0}]}, {"image_id": "ADE_val_00000665", "file_name": "ADE_val_00000665.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 61778, "bbox": [148, 2, 568, 464], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 58680, "bbox": [2, 117, 690, 348], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 26930, "bbox": [66, 109, 351, 339], "iscrowd": 0}, {"id": 2097302, "category_id": 13, "area": 12220, "bbox": [290, 8, 185, 236], "iscrowd": 0}, {"id": 2956159, "category_id": 13, "area": 36507, "bbox": [444, 147, 251, 247], "iscrowd": 0}]}, {"image_id": "ADE_val_00000666", "file_name": "ADE_val_00000666.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 11712, "bbox": [98, 1, 156, 164], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 1366, "bbox": [123, 1, 41, 36], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5804, "bbox": [2, 165, 252, 55], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1847, "bbox": [145, 66, 59, 86], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 3402, "bbox": [0, 67, 69, 52], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 12005, "bbox": [0, 0, 99, 192], "iscrowd": 0}]}, {"image_id": "ADE_val_00000667", "file_name": "ADE_val_00000667.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 35721, "bbox": [183, 0, 166, 233], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 15189, "bbox": [2, 0, 274, 111], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 810, "bbox": [0, 101, 44, 32], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 10758, "bbox": [0, 121, 199, 112], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 145, "bbox": [31, 126, 12, 18], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 17864, "bbox": [42, 27, 170, 198], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 57, "bbox": [33, 85, 13, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00000668", "file_name": "ADE_val_00000668.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 38693, "bbox": [2, 0, 461, 180], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 82620, "bbox": [2, 0, 506, 410], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 43955, "bbox": [0, 166, 507, 248], "iscrowd": 0}]}, {"image_id": "ADE_val_00000669", "file_name": "ADE_val_00000669.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 33164, "bbox": [0, 0, 414, 135], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 19288, "bbox": [2, 0, 477, 151], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 55472, "bbox": [2, 149, 477, 173], "iscrowd": 0}, {"id": 16711935, "category_id": 80, "area": 44316, "bbox": [0, 66, 479, 185], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 259, "bbox": [308, 150, 21, 16], "iscrowd": 0}, {"id": 11828762, "category_id": 21, "area": 258, "bbox": [284, 152, 20, 16], "iscrowd": 0}, {"id": 13921536, "category_id": 21, "area": 162, "bbox": [269, 151, 13, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000670", "file_name": "ADE_val_00000670.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 722, "bbox": [20, 242, 61, 17], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 150612, "bbox": [0, 0, 682, 228], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 11, "bbox": [137, 247, 8, 9], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 33133, "bbox": [0, 230, 683, 90], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 10314, "bbox": [0, 217, 681, 30], "iscrowd": 0}, {"id": 65433, "category_id": 55, "area": 148099, "bbox": [2, 233, 681, 278], "iscrowd": 0}, {"id": 5439232, "category_id": 91, "area": 879, "bbox": [21, 305, 101, 39], "iscrowd": 0}, {"id": 3538688, "category_id": 91, "area": 403, "bbox": [321, 259, 56, 18], "iscrowd": 0}, {"id": 6160154, "category_id": 91, "area": 314, "bbox": [456, 255, 49, 17], "iscrowd": 0}, {"id": 5373721, "category_id": 91, "area": 274, "bbox": [430, 253, 49, 17], "iscrowd": 0}, {"id": 7077639, "category_id": 91, "area": 206, "bbox": [409, 251, 43, 14], "iscrowd": 0}, {"id": 7339776, "category_id": 91, "area": 184, "bbox": [389, 247, 41, 14], "iscrowd": 0}, {"id": 4652820, "category_id": 91, "area": 1029, "bbox": [151, 292, 126, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00000671", "file_name": "ADE_val_00000671.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 11026, "bbox": [0, 287, 503, 50], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 49330, "bbox": [43, 55, 460, 169], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 36003, "bbox": [2, 0, 501, 151], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 17904, "bbox": [0, 0, 503, 227], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 8459, "bbox": [0, 272, 503, 51], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 41872, "bbox": [2, 186, 501, 124], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 1636, "bbox": [2, 223, 144, 97], "iscrowd": 0}, {"id": 18943, "category_id": 39, "area": 1610, "bbox": [180, 231, 235, 80], "iscrowd": 0}, {"id": 2378239, "category_id": 39, "area": 343, "bbox": [444, 250, 58, 53], "iscrowd": 0}]}, {"image_id": "ADE_val_00000672", "file_name": "ADE_val_00000672.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14894, "bbox": [0, 66, 566, 231], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 70874, "bbox": [0, 45, 566, 253], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 62419, "bbox": [0, 0, 566, 151], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 52199, "bbox": [0, 107, 565, 257], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1092, "bbox": [322, 290, 26, 74], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 973, "bbox": [407, 195, 59, 40], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 135, "bbox": [214, 284, 19, 13], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 205, "bbox": [341, 325, 11, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000673", "file_name": "ADE_val_00000673.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 125019, "bbox": [0, 0, 598, 453], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21205, "bbox": [0, 344, 599, 137], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 16406, "bbox": [155, 2, 378, 66], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1604, "bbox": [336, 206, 65, 49], "iscrowd": 0}, {"id": 28927, "category_id": 100, "area": 19678, "bbox": [81, 170, 138, 182], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 8640, "bbox": [334, 118, 72, 164], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 6801, "bbox": [310, 66, 58, 233], "iscrowd": 0}, {"id": 2307826, "category_id": 19, "area": 9913, "bbox": [368, 58, 70, 298], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3332, "bbox": [448, 191, 62, 56], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 13891, "bbox": [475, 296, 124, 184], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 5193, "bbox": [246, 278, 100, 97], "iscrowd": 0}, {"id": 13238042, "category_id": 31, "area": 26500, "bbox": [73, 323, 228, 159], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 687, "bbox": [232, 223, 35, 27], "iscrowd": 0}, {"id": 458697, "category_id": 37, "area": 733, "bbox": [482, 258, 38, 51], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2256, "bbox": [510, 306, 77, 50], "iscrowd": 0}, {"id": 1354239, "category_id": 40, "area": 794, "bbox": [277, 285, 35, 33], "iscrowd": 0}, {"id": 1034239, "category_id": 40, "area": 574, "bbox": [567, 333, 32, 21], "iscrowd": 0}, {"id": 52463, "category_id": 40, "area": 311, "bbox": [256, 286, 26, 20], "iscrowd": 0}, {"id": 49919, "category_id": 40, "area": 1864, "bbox": [152, 342, 52, 66], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 1435, "bbox": [441, 309, 77, 67], "iscrowd": 0}, {"id": 7858433, "category_id": 65, "area": 9788, "bbox": [290, 337, 134, 124], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 213, "bbox": [471, 292, 21, 14], "iscrowd": 0}, {"id": 1317092, "category_id": 67, "area": 2755, "bbox": [47, 248, 72, 94], "iscrowd": 0}, {"id": 4351, "category_id": 67, "area": 877, "bbox": [344, 320, 54, 36], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 270, "bbox": [351, 251, 13, 27], "iscrowd": 0}, {"id": 14745344, "category_id": 136, "area": 249, "bbox": [378, 250, 14, 28], "iscrowd": 0}, {"id": 15004445, "category_id": 136, "area": 491, "bbox": [355, 342, 29, 31], "iscrowd": 0}, {"id": 11927310, "category_id": 136, "area": 88, "bbox": [476, 305, 12, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00000674", "file_name": "ADE_val_00000674.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 44900, "bbox": [2, 0, 569, 99], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 8339, "bbox": [0, 30, 126, 120], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 119194, "bbox": [2, 85, 569, 256], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 16436, "bbox": [91, 80, 481, 67], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 3863, "bbox": [0, 189, 567, 142], "iscrowd": 0}]}, {"image_id": "ADE_val_00000675", "file_name": "ADE_val_00000675.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 184104, "bbox": [0, 0, 767, 247], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5835, "bbox": [58, 266, 383, 43], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 180359, "bbox": [0, 242, 766, 268], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6616, "bbox": [77, 296, 682, 35], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 12271, "bbox": [82, 225, 564, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00000676", "file_name": "ADE_val_00000676.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 4343, "bbox": [233, 0, 167, 55], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1731, "bbox": [305, 1, 79, 80], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 358, "bbox": [185, 0, 48, 13], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 85016, "bbox": [0, 0, 400, 299], "iscrowd": 0}, {"id": 16769136, "category_id": 115, "area": 26607, "bbox": [22, 43, 248, 176], "iscrowd": 0}]}, {"image_id": "ADE_val_00000677", "file_name": "ADE_val_00000677.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 11415, "bbox": [378, 297, 133, 131], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 55239, "bbox": [0, 0, 511, 328], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 144477, "bbox": [0, 1, 490, 530], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 99168, "bbox": [0, 408, 511, 272], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 26141, "bbox": [284, 412, 183, 270], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 5454, "bbox": [0, 412, 254, 92], "iscrowd": 0}]}, {"image_id": "ADE_val_00000678", "file_name": "ADE_val_00000678.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 11564, "bbox": [146, 1, 475, 92], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 134194, "bbox": [0, 0, 640, 261], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 102696, "bbox": [2, 264, 637, 214], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 285, "bbox": [237, 254, 31, 12], "iscrowd": 0}, {"id": 14839317, "category_id": 21, "area": 3960, "bbox": [224, 267, 83, 58], "iscrowd": 0}, {"id": 13782528, "category_id": 21, "area": 1114, "bbox": [291, 255, 44, 37], "iscrowd": 0}]}, {"image_id": "ADE_val_00000679", "file_name": "ADE_val_00000679.png", "segments_info": [{"id": 3289680, "category_id": 4, "area": 50953, "bbox": [95, 143, 417, 274], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 626, "bbox": [430, 58, 23, 89], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3787, "bbox": [342, 154, 43, 148], "iscrowd": 0}, {"id": 3735727, "category_id": 13, "area": 1786, "bbox": [402, 159, 48, 114], "iscrowd": 0}, {"id": 2231177, "category_id": 13, "area": 4606, "bbox": [451, 201, 46, 154], "iscrowd": 0}, {"id": 4001173, "category_id": 13, "area": 5713, "bbox": [296, 217, 49, 182], "iscrowd": 0}, {"id": 5440379, "category_id": 13, "area": 4135, "bbox": [251, 240, 46, 166], "iscrowd": 0}, {"id": 3671706, "category_id": 13, "area": 2288, "bbox": [310, 86, 32, 110], "iscrowd": 0}, {"id": 4001667, "category_id": 13, "area": 1892, "bbox": [348, 87, 33, 87], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 8303, "bbox": [455, 1, 57, 149], "iscrowd": 0}, {"id": 4128512, "category_id": 15, "area": 12198, "bbox": [324, 3, 107, 146], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1101, "bbox": [431, 3, 24, 55], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 5275, "bbox": [377, 200, 57, 169], "iscrowd": 0}, {"id": 9699565, "category_id": 44, "area": 2220, "bbox": [416, 73, 39, 108], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 4396, "bbox": [13, 5, 97, 142], "iscrowd": 0}, {"id": 16726534, "category_id": 88, "area": 964, "bbox": [147, 0, 65, 51], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 7983, "bbox": [107, 94, 136, 100], "iscrowd": 0}, {"id": 1830760, "category_id": 124, "area": 5127, "bbox": [190, 20, 117, 92], "iscrowd": 0}, {"id": 1310590, "category_id": 124, "area": 10149, "bbox": [2, 278, 113, 95], "iscrowd": 0}, {"id": 63627, "category_id": 124, "area": 1832, "bbox": [250, 8, 66, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00000680", "file_name": "ADE_val_00000680.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 86349, "bbox": [0, 0, 674, 498], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 45809, "bbox": [53, 312, 602, 189], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1058, "bbox": [161, 154, 45, 33], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 13917, "bbox": [181, 42, 105, 146], "iscrowd": 0}, {"id": 16777199, "category_id": 9, "area": 13490, "bbox": [295, 44, 106, 147], "iscrowd": 0}, {"id": 16240872, "category_id": 9, "area": 14565, "bbox": [404, 46, 109, 145], "iscrowd": 0}, {"id": 14274763, "category_id": 9, "area": 3702, "bbox": [142, 41, 32, 163], "iscrowd": 0}, {"id": 15912683, "category_id": 9, "area": 12494, "bbox": [0, 14, 63, 280], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6593, "bbox": [0, 264, 110, 235], "iscrowd": 0}, {"id": 16711911, "category_id": 11, "area": 6031, "bbox": [146, 203, 59, 140], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 24317, "bbox": [42, 9, 107, 302], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 7665, "bbox": [287, 214, 149, 140], "iscrowd": 0}, {"id": 5177583, "category_id": 16, "area": 7729, "bbox": [490, 300, 112, 88], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4225, "bbox": [451, 207, 83, 122], "iscrowd": 0}, {"id": 339916, "category_id": 20, "area": 5656, "bbox": [241, 221, 98, 150], "iscrowd": 0}, {"id": 15848, "category_id": 20, "area": 38465, "bbox": [2, 290, 287, 207], "iscrowd": 0}, {"id": 15059, "category_id": 20, "area": 24237, "bbox": [433, 323, 230, 177], "iscrowd": 0}, {"id": 1726148, "category_id": 20, "area": 5941, "bbox": [369, 225, 110, 146], "iscrowd": 0}, {"id": 21719, "category_id": 20, "area": 3205, "bbox": [190, 201, 78, 130], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2812, "bbox": [592, 2, 34, 97], "iscrowd": 0}, {"id": 1443569, "category_id": 23, "area": 3070, "bbox": [638, 1, 36, 97], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1222, "bbox": [324, 140, 58, 38], "iscrowd": 0}, {"id": 655594, "category_id": 67, "area": 866, "bbox": [22, 244, 45, 28], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 358, "bbox": [174, 187, 20, 20], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 252, "bbox": [40, 271, 19, 18], "iscrowd": 0}, {"id": 13827349, "category_id": 136, "area": 307, "bbox": [341, 177, 20, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00000681", "file_name": "ADE_val_00000681.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 18443, "bbox": [0, 0, 599, 89], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 60686, "bbox": [2, 63, 596, 335], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3428, "bbox": [31, 29, 47, 130], "iscrowd": 0}, {"id": 4726922, "category_id": 13, "area": 1422, "bbox": [113, 54, 39, 54], "iscrowd": 0}, {"id": 5046446, "category_id": 13, "area": 25199, "bbox": [84, 84, 176, 303], "iscrowd": 0}, {"id": 2228400, "category_id": 13, "area": 1552, "bbox": [313, 24, 46, 65], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 10748, "bbox": [146, 226, 144, 122], "iscrowd": 0}]}, {"image_id": "ADE_val_00000682", "file_name": "ADE_val_00000682.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3326, "bbox": [282, 86, 109, 56], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 3435, "bbox": [141, 52, 74, 72], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 7588, "bbox": [0, 1, 281, 71], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 38988, "bbox": [0, 0, 391, 174], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 2204, "bbox": [0, 240, 313, 23], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 14290, "bbox": [0, 124, 367, 117], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 7003, "bbox": [298, 138, 93, 120], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 16607, "bbox": [0, 113, 391, 150], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 2123, "bbox": [100, 142, 71, 78], "iscrowd": 0}, {"id": 498661, "category_id": 33, "area": 3659, "bbox": [211, 140, 91, 98], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1838, "bbox": [39, 155, 31, 63], "iscrowd": 0}]}, {"image_id": "ADE_val_00000683", "file_name": "ADE_val_00000683.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 2849, "bbox": [0, 77, 57, 58], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 38931, "bbox": [0, 0, 400, 176], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 31178, "bbox": [0, 127, 400, 172], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 13531, "bbox": [247, 121, 152, 152], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 5779, "bbox": [111, 84, 118, 150], "iscrowd": 0}]}, {"image_id": "ADE_val_00000684", "file_name": "ADE_val_00000684.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 30282, "bbox": [2, 17, 397, 213], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 26818, "bbox": [2, 190, 397, 110], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 18474, "bbox": [2, 1, 396, 63], "iscrowd": 0}, {"id": 15466240, "category_id": 123, "area": 39601, "bbox": [86, 57, 250, 214], "iscrowd": 0}]}, {"image_id": "ADE_val_00000685", "file_name": "ADE_val_00000685.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 93515, "bbox": [0, 0, 726, 349], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 512, "bbox": [410, 351, 91, 15], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 437, "bbox": [199, 325, 34, 25], "iscrowd": 0}, {"id": 2097308, "category_id": 13, "area": 460, "bbox": [295, 315, 32, 34], "iscrowd": 0}, {"id": 2097281, "category_id": 13, "area": 882, "bbox": [658, 353, 46, 36], "iscrowd": 0}, {"id": 3342500, "category_id": 13, "area": 707, "bbox": [82, 317, 37, 38], "iscrowd": 0}, {"id": 4134041, "category_id": 13, "area": 1070, "bbox": [118, 355, 44, 35], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 32557, "bbox": [0, 333, 728, 58], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 879, "bbox": [605, 360, 39, 25], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 34193, "bbox": [2, 19, 218, 162], "iscrowd": 0}, {"id": 16738816, "category_id": 144, "area": 35278, "bbox": [246, 19, 227, 159], "iscrowd": 0}, {"id": 16668928, "category_id": 144, "area": 35893, "bbox": [500, 17, 227, 164], "iscrowd": 0}, {"id": 16728064, "category_id": 144, "area": 12943, "bbox": [497, 211, 138, 100], "iscrowd": 0}, {"id": 16603648, "category_id": 144, "area": 20091, "bbox": [250, 210, 220, 95], "iscrowd": 0}, {"id": 15289623, "category_id": 144, "area": 12682, "bbox": [86, 211, 137, 100], "iscrowd": 0}]}, {"image_id": "ADE_val_00000686", "file_name": "ADE_val_00000686.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3982, "bbox": [221, 208, 211, 38], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 12933, "bbox": [55, 164, 444, 65], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 92139, "bbox": [0, 0, 500, 200], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3250, "bbox": [2, 195, 171, 30], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 67423, "bbox": [0, 232, 500, 142], "iscrowd": 0}, {"id": 16711751, "category_id": 141, "area": 1857, "bbox": [2, 222, 226, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00000687", "file_name": "ADE_val_00000687.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 774, "bbox": [633, 236, 37, 35], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 110210, "bbox": [0, 89, 682, 278], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 95849, "bbox": [0, 0, 682, 169], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3959, "bbox": [545, 141, 137, 128], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 1303, "bbox": [1, 287, 670, 97], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 81808, "bbox": [0, 298, 682, 213], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 38166, "bbox": [0, 218, 682, 282], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 140, "bbox": [591, 246, 9, 29], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1576, "bbox": [208, 282, 38, 83], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 9314, "bbox": [182, 300, 266, 60], "iscrowd": 0}, {"id": 64255, "category_id": 54, "area": 1638, "bbox": [576, 277, 86, 31], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 423, "bbox": [184, 348, 25, 20], "iscrowd": 0}, {"id": 15270117, "category_id": 126, "area": 231, "bbox": [463, 313, 19, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00000688", "file_name": "ADE_val_00000688.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 9068, "bbox": [99, 0, 223, 380], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8367, "bbox": [149, 383, 250, 54], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4179, "bbox": [177, 0, 221, 29], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 576, "bbox": [310, 206, 36, 25], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 11772, "bbox": [315, 24, 84, 144], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5862, "bbox": [315, 22, 85, 226], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 63458, "bbox": [0, 0, 150, 436], "iscrowd": 0}, {"id": 15536325, "category_id": 11, "area": 42884, "bbox": [148, 8, 148, 423], "iscrowd": 0}, {"id": 16717252, "category_id": 11, "area": 13433, "bbox": [298, 252, 102, 136], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1237, "bbox": [170, 87, 30, 46], "iscrowd": 0}, {"id": 1310464, "category_id": 42, "area": 784, "bbox": [148, 88, 25, 46], "iscrowd": 0}, {"id": 2555667, "category_id": 42, "area": 566, "bbox": [231, 200, 19, 31], "iscrowd": 0}, {"id": 2096896, "category_id": 42, "area": 582, "bbox": [209, 200, 20, 32], "iscrowd": 0}, {"id": 65280, "category_id": 42, "area": 554, "bbox": [191, 201, 18, 31], "iscrowd": 0}, {"id": 60701, "category_id": 42, "area": 574, "bbox": [165, 204, 22, 28], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 614, "bbox": [221, 360, 21, 36], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 186, "bbox": [317, 226, 19, 12], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 222, "bbox": [331, 249, 69, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00000689", "file_name": "ADE_val_00000689.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6884, "bbox": [2, 0, 358, 26], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9629, "bbox": [0, 240, 360, 47], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 69155, "bbox": [2, 12, 357, 268], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 169, "bbox": [144, 95, 10, 17], "iscrowd": 0}, {"id": 1828608, "category_id": 42, "area": 178, "bbox": [133, 94, 10, 19], "iscrowd": 0}, {"id": 2162452, "category_id": 42, "area": 171, "bbox": [122, 95, 10, 19], "iscrowd": 0}, {"id": 2359046, "category_id": 42, "area": 209, "bbox": [170, 93, 13, 19], "iscrowd": 0}, {"id": 1701888, "category_id": 42, "area": 183, "bbox": [185, 94, 11, 19], "iscrowd": 0}, {"id": 1048320, "category_id": 42, "area": 229, "bbox": [198, 94, 13, 19], "iscrowd": 0}, {"id": 1960705, "category_id": 42, "area": 283, "bbox": [167, 182, 14, 23], "iscrowd": 0}, {"id": 1179392, "category_id": 42, "area": 312, "bbox": [183, 184, 16, 23], "iscrowd": 0}, {"id": 193559, "category_id": 42, "area": 309, "bbox": [140, 181, 14, 23], "iscrowd": 0}, {"id": 1569792, "category_id": 42, "area": 135, "bbox": [165, 65, 8, 17], "iscrowd": 0}, {"id": 713472, "category_id": 42, "area": 142, "bbox": [177, 64, 8, 18], "iscrowd": 0}, {"id": 1699584, "category_id": 42, "area": 160, "bbox": [190, 64, 8, 20], "iscrowd": 0}, {"id": 655119, "category_id": 42, "area": 144, "bbox": [203, 64, 8, 18], "iscrowd": 0}, {"id": 2286595, "category_id": 42, "area": 534, "bbox": [92, 105, 20, 29], "iscrowd": 0}, {"id": 1244928, "category_id": 42, "area": 610, "bbox": [68, 105, 21, 30], "iscrowd": 0}, {"id": 62469, "category_id": 42, "area": 201, "bbox": [137, 69, 16, 13], "iscrowd": 0}, {"id": 59648, "category_id": 42, "area": 276, "bbox": [195, 223, 18, 20], "iscrowd": 0}, {"id": 128256, "category_id": 42, "area": 300, "bbox": [178, 218, 33, 20], "iscrowd": 0}, {"id": 65280, "category_id": 42, "area": 326, "bbox": [160, 215, 35, 19], "iscrowd": 0}, {"id": 3336470, "category_id": 42, "area": 350, "bbox": [122, 217, 37, 19], "iscrowd": 0}, {"id": 61467, "category_id": 42, "area": 243, "bbox": [122, 222, 19, 17], "iscrowd": 0}, {"id": 2621184, "category_id": 42, "area": 333, "bbox": [122, 42, 32, 11], "iscrowd": 0}, {"id": 2227968, "category_id": 42, "area": 225, "bbox": [161, 42, 21, 12], "iscrowd": 0}, {"id": 3342083, "category_id": 42, "area": 189, "bbox": [183, 41, 17, 13], "iscrowd": 0}, {"id": 2286848, "category_id": 42, "area": 175, "bbox": [200, 39, 14, 13], "iscrowd": 0}, {"id": 786183, "category_id": 42, "area": 437, "bbox": [89, 162, 20, 25], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 936, "bbox": [15, 160, 27, 38], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 134, "bbox": [283, 99, 7, 27], "iscrowd": 0}, {"id": 63239, "category_id": 99, "area": 324, "bbox": [291, 99, 16, 28], "iscrowd": 0}, {"id": 1832716, "category_id": 99, "area": 307, "bbox": [78, 155, 12, 32], "iscrowd": 0}, {"id": 982798, "category_id": 99, "area": 277, "bbox": [66, 157, 11, 32], "iscrowd": 0}, {"id": 59392, "category_id": 99, "area": 292, "bbox": [17, 112, 17, 26], "iscrowd": 0}, {"id": 779803, "category_id": 99, "area": 272, "bbox": [35, 112, 16, 26], "iscrowd": 0}, {"id": 64000, "category_id": 99, "area": 300, "bbox": [26, 59, 15, 24], "iscrowd": 0}, {"id": 65297, "category_id": 99, "area": 119, "bbox": [236, 116, 26, 11], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 518, "bbox": [221, 224, 44, 22], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 552, "bbox": [29, 209, 15, 44], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 125, "bbox": [282, 35, 9, 17], "iscrowd": 0}, {"id": 12172309, "category_id": 148, "area": 134, "bbox": [295, 35, 9, 17], "iscrowd": 0}, {"id": 11516684, "category_id": 148, "area": 151, "bbox": [307, 35, 10, 17], "iscrowd": 0}, {"id": 12443173, "category_id": 148, "area": 159, "bbox": [320, 34, 11, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00000690", "file_name": "ADE_val_00000690.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 44237, "bbox": [1, 0, 566, 261], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 1543, "bbox": [95, 1, 57, 41], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 132852, "bbox": [1, 1, 682, 458], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 16635, "bbox": [1, 253, 523, 136], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 108364, "bbox": [1, 248, 682, 264], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1618, "bbox": [1, 240, 129, 22], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 2257, "bbox": [605, 250, 78, 45], "iscrowd": 0}, {"id": 59069, "category_id": 70, "area": 6112, "bbox": [161, 292, 149, 82], "iscrowd": 0}, {"id": 1703895, "category_id": 70, "area": 3202, "bbox": [311, 276, 112, 50], "iscrowd": 0}, {"id": 1174457, "category_id": 70, "area": 16399, "bbox": [8, 309, 196, 105], "iscrowd": 0}, {"id": 1376210, "category_id": 70, "area": 3519, "bbox": [360, 266, 96, 47], "iscrowd": 0}, {"id": 655317, "category_id": 70, "area": 899, "bbox": [522, 245, 49, 22], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 5148, "bbox": [497, 289, 52, 107], "iscrowd": 0}, {"id": 15859864, "category_id": 139, "area": 542, "bbox": [477, 244, 22, 33], "iscrowd": 0}, {"id": 15663279, "category_id": 139, "area": 2922, "bbox": [256, 272, 49, 68], "iscrowd": 0}, {"id": 16449729, "category_id": 139, "area": 871, "bbox": [417, 251, 28, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00000691", "file_name": "ADE_val_00000691.png", "segments_info": [{"id": 522756, "category_id": 10, "area": 240566, "bbox": [0, 105, 683, 407], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 78372, "bbox": [0, 0, 683, 125], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 5730, "bbox": [536, 224, 58, 160], "iscrowd": 0}, {"id": 2888620, "category_id": 13, "area": 5376, "bbox": [299, 246, 68, 154], "iscrowd": 0}, {"id": 2359436, "category_id": 13, "area": 5689, "bbox": [51, 259, 76, 155], "iscrowd": 0}, {"id": 2494111, "category_id": 13, "area": 2527, "bbox": [111, 183, 38, 113], "iscrowd": 0}, {"id": 5374108, "category_id": 13, "area": 2412, "bbox": [69, 118, 62, 101], "iscrowd": 0}, {"id": 2630008, "category_id": 13, "area": 3751, "bbox": [181, 153, 94, 129], "iscrowd": 0}, {"id": 5184428, "category_id": 13, "area": 2913, "bbox": [251, 150, 59, 123], "iscrowd": 0}, {"id": 3670148, "category_id": 13, "area": 1945, "bbox": [483, 166, 45, 111], "iscrowd": 0}]}, {"image_id": "ADE_val_00000692", "file_name": "ADE_val_00000692.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 64233, "bbox": [199, 1, 483, 271], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 169486, "bbox": [1, 1, 682, 390], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 108161, "bbox": [1, 343, 680, 169], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1294, "bbox": [120, 332, 57, 31], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 1160, "bbox": [395, 275, 30, 63], "iscrowd": 0}]}, {"image_id": "ADE_val_00000693", "file_name": "ADE_val_00000693.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 17350, "bbox": [1, 2, 531, 121], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 8775, "bbox": [1, 1, 411, 57], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 58746, "bbox": [2, 2, 680, 248], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 49828, "bbox": [49, 114, 632, 287], "iscrowd": 0}, {"id": 13942282, "category_id": 129, "area": 201089, "bbox": [3, 140, 679, 371], "iscrowd": 0}]}, {"image_id": "ADE_val_00000694", "file_name": "ADE_val_00000694.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 29637, "bbox": [0, 65, 419, 137], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 48339, "bbox": [0, 139, 420, 175], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 23754, "bbox": [0, 0, 419, 79], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1442, "bbox": [29, 86, 16, 100], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 12907, "bbox": [89, 120, 252, 94], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 10325, "bbox": [107, 25, 52, 220], "iscrowd": 0}]}, {"image_id": "ADE_val_00000695", "file_name": "ADE_val_00000695.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 134489, "bbox": [2, 1, 560, 366], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 50607, "bbox": [2, 1, 560, 256], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 9175, "bbox": [22, 98, 539, 296], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 35921, "bbox": [2, 313, 560, 146], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 12533, "bbox": [0, 350, 562, 109], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 11153, "bbox": [373, 312, 122, 104], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 354, "bbox": [61, 61, 24, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00000696", "file_name": "ADE_val_00000696.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 18866, "bbox": [77, 134, 606, 58], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 82007, "bbox": [0, 0, 683, 147], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 16444, "bbox": [0, 24, 197, 220], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 142860, "bbox": [0, 188, 683, 324], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 34284, "bbox": [0, 226, 683, 71], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 27590, "bbox": [0, 261, 683, 84], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 7486, "bbox": [341, 116, 342, 32], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 8790, "bbox": [459, 168, 193, 61], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1672, "bbox": [23, 197, 87, 29], "iscrowd": 0}, {"id": 14765568, "category_id": 21, "area": 772, "bbox": [15, 190, 47, 30], "iscrowd": 0}, {"id": 13198100, "category_id": 21, "area": 1246, "bbox": [384, 186, 66, 29], "iscrowd": 0}, {"id": 13859075, "category_id": 21, "area": 599, "bbox": [222, 182, 41, 20], "iscrowd": 0}, {"id": 12419072, "category_id": 21, "area": 207, "bbox": [439, 187, 23, 13], "iscrowd": 0}, {"id": 12872721, "category_id": 21, "area": 301, "bbox": [653, 184, 21, 18], "iscrowd": 0}, {"id": 11961373, "category_id": 21, "area": 188, "bbox": [188, 186, 20, 14], "iscrowd": 0}, {"id": 12668928, "category_id": 21, "area": 499, "bbox": [87, 184, 31, 29], "iscrowd": 0}, {"id": 13263104, "category_id": 21, "area": 55, "bbox": [361, 180, 10, 8], "iscrowd": 0}, {"id": 14580480, "category_id": 21, "area": 140, "bbox": [265, 184, 17, 12], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 242, "bbox": [255, 98, 15, 91], "iscrowd": 0}, {"id": 16724224, "category_id": 88, "area": 196, "bbox": [504, 95, 16, 82], "iscrowd": 0}, {"id": 16731650, "category_id": 88, "area": 73, "bbox": [348, 117, 8, 27], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 247, "bbox": [231, 224, 11, 25], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 662, "bbox": [281, 181, 43, 21], "iscrowd": 0}, {"id": 1638325, "category_id": 103, "area": 456, "bbox": [331, 182, 33, 21], "iscrowd": 0}, {"id": 65456, "category_id": 103, "area": 927, "bbox": [292, 180, 144, 50], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 320, "bbox": [451, 163, 34, 11], "iscrowd": 0}, {"id": 1048424, "category_id": 124, "area": 302, "bbox": [397, 162, 31, 10], "iscrowd": 0}, {"id": 589705, "category_id": 124, "area": 235, "bbox": [348, 163, 35, 7], "iscrowd": 0}, {"id": 60289, "category_id": 124, "area": 177, "bbox": [547, 165, 25, 8], "iscrowd": 0}, {"id": 1507225, "category_id": 124, "area": 156, "bbox": [661, 166, 22, 8], "iscrowd": 0}, {"id": 1044123, "category_id": 124, "area": 221, "bbox": [255, 164, 29, 8], "iscrowd": 0}, {"id": 65440, "category_id": 124, "area": 196, "bbox": [506, 164, 25, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00000697", "file_name": "ADE_val_00000697.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 72075, "bbox": [0, 0, 398, 429], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 46770, "bbox": [0, 409, 398, 190], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 35035, "bbox": [0, 0, 398, 174], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3955, "bbox": [270, 282, 74, 133], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 13135, "bbox": [80, 169, 80, 189], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 11216, "bbox": [339, 210, 56, 221], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2248, "bbox": [2, 362, 77, 47], "iscrowd": 0}, {"id": 6493692, "category_id": 16, "area": 946, "bbox": [208, 372, 59, 40], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1738, "bbox": [9, 232, 42, 43], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 25174, "bbox": [0, 352, 239, 205], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 1778, "bbox": [205, 219, 45, 58], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1137, "bbox": [159, 383, 44, 39], "iscrowd": 0}, {"id": 44276, "category_id": 40, "area": 1172, "bbox": [30, 427, 68, 37], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1282, "bbox": [296, 325, 40, 107], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 9976, "bbox": [157, 294, 137, 125], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 4829, "bbox": [180, 422, 128, 135], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 2786, "bbox": [29, 281, 68, 82], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 277, "bbox": [198, 274, 15, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00000698", "file_name": "ADE_val_00000698.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 92989, "bbox": [0, 0, 638, 300], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 32182, "bbox": [2, 273, 637, 141], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3797, "bbox": [66, 184, 82, 58], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 17593, "bbox": [582, 8, 57, 375], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 11254, "bbox": [2, 311, 143, 102], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 4150, "bbox": [6, 1, 25, 237], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1296, "bbox": [271, 195, 32, 56], "iscrowd": 0}, {"id": 25797, "category_id": 20, "area": 7276, "bbox": [69, 235, 80, 137], "iscrowd": 0}, {"id": 13242, "category_id": 20, "area": 1197, "bbox": [0, 195, 44, 101], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 11996, "bbox": [326, 28, 119, 108], "iscrowd": 0}, {"id": 4718823, "category_id": 23, "area": 3125, "bbox": [221, 105, 59, 57], "iscrowd": 0}, {"id": 3280121, "category_id": 23, "area": 2211, "bbox": [63, 106, 41, 58], "iscrowd": 0}, {"id": 5177577, "category_id": 23, "area": 3095, "bbox": [541, 96, 54, 64], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 14420, "bbox": [36, 221, 250, 121], "iscrowd": 0}, {"id": 16743168, "category_id": 24, "area": 27283, "bbox": [294, 235, 220, 179], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 5955, "bbox": [478, 212, 111, 94], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1246, "bbox": [165, 147, 48, 77], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 16257, "bbox": [302, 153, 171, 136], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 2837, "bbox": [269, 252, 73, 74], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 1946, "bbox": [490, 166, 50, 47], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 703, "bbox": [195, 209, 60, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000699", "file_name": "ADE_val_00000699.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 109262, "bbox": [0, 0, 768, 385], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 32985, "bbox": [2, 298, 766, 213], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 7135, "bbox": [217, 134, 118, 145], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 70141, "bbox": [151, 336, 539, 174], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 22572, "bbox": [332, 16, 153, 281], "iscrowd": 0}, {"id": 2621192, "category_id": 15, "area": 16496, "bbox": [133, 0, 88, 368], "iscrowd": 0}, {"id": 3273765, "category_id": 15, "area": 23414, "bbox": [534, 1, 128, 309], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2260, "bbox": [366, 237, 85, 78], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 11603, "bbox": [360, 50, 95, 253], "iscrowd": 0}, {"id": 11753, "category_id": 19, "area": 9556, "bbox": [152, 15, 77, 342], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1087, "bbox": [91, 195, 37, 41], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 29842, "bbox": [582, 268, 186, 228], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 10779, "bbox": [0, 72, 91, 164], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 5387, "bbox": [445, 225, 84, 106], "iscrowd": 0}, {"id": 14019584, "category_id": 31, "area": 4411, "bbox": [307, 220, 70, 106], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 31523, "bbox": [0, 228, 151, 282], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 715, "bbox": [392, 184, 35, 34], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 865, "bbox": [251, 276, 30, 40], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 253, "bbox": [405, 217, 12, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00000700", "file_name": "ADE_val_00000700.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 99494, "bbox": [0, 0, 682, 391], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 52498, "bbox": [0, 349, 646, 161], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9249, "bbox": [294, 0, 387, 40], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 31346, "bbox": [321, 62, 165, 310], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4613, "bbox": [0, 387, 66, 99], "iscrowd": 0}, {"id": 6815999, "category_id": 16, "area": 8459, "bbox": [362, 324, 160, 174], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 3630, "bbox": [636, 108, 45, 287], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 10406, "bbox": [439, 258, 115, 189], "iscrowd": 0}, {"id": 22737, "category_id": 20, "area": 4270, "bbox": [552, 267, 64, 126], "iscrowd": 0}, {"id": 810961, "category_id": 20, "area": 3541, "bbox": [283, 259, 69, 131], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 11571, "bbox": [100, 7, 120, 125], "iscrowd": 0}, {"id": 4915433, "category_id": 23, "area": 6966, "bbox": [489, 86, 98, 75], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1136, "bbox": [155, 53, 24, 95], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 15767, "bbox": [435, 377, 247, 135], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 74186, "bbox": [1, 140, 299, 313], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1088, "bbox": [388, 244, 80, 22], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 616, "bbox": [47, 106, 36, 37], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 2189, "bbox": [14, 67, 41, 74], "iscrowd": 0}, {"id": 11990279, "category_id": 136, "area": 1085, "bbox": [261, 99, 26, 56], "iscrowd": 0}]}, {"image_id": "ADE_val_00000701", "file_name": "ADE_val_00000701.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 19978, "bbox": [2, 1, 254, 109], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 10330, "bbox": [2, 47, 253, 83], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 32183, "bbox": [2, 114, 254, 142], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 1879, "bbox": [2, 217, 94, 39], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 153, "bbox": [157, 150, 5, 39], "iscrowd": 0}, {"id": 15340881, "category_id": 94, "area": 15, "bbox": [80, 144, 3, 27], "iscrowd": 0}, {"id": 16450100, "category_id": 94, "area": 2, "bbox": [24, 155, 1, 2], "iscrowd": 0}]}, {"image_id": "ADE_val_00000702", "file_name": "ADE_val_00000702.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 34639, "bbox": [2, 1, 254, 146], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 18598, "bbox": [2, 165, 254, 91], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 11350, "bbox": [2, 128, 254, 77], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 21, "bbox": [239, 171, 7, 4], "iscrowd": 0}, {"id": 8979199, "category_id": 127, "area": 22, "bbox": [219, 166, 6, 5], "iscrowd": 0}, {"id": 6950904, "category_id": 127, "area": 24, "bbox": [207, 174, 7, 4], "iscrowd": 0}, {"id": 8651007, "category_id": 127, "area": 21, "bbox": [201, 166, 10, 3], "iscrowd": 0}]}, {"image_id": "ADE_val_00000703", "file_name": "ADE_val_00000703.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 20306, "bbox": [0, 0, 682, 47], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 264959, "bbox": [0, 38, 682, 473], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 8375, "bbox": [0, 20, 516, 27], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 131, "bbox": [502, 40, 41, 7], "iscrowd": 0}, {"id": 7276003, "category_id": 127, "area": 55, "bbox": [597, 40, 15, 7], "iscrowd": 0}, {"id": 8130041, "category_id": 127, "area": 52118, "bbox": [208, 96, 331, 249], "iscrowd": 0}, {"id": 6029567, "category_id": 127, "area": 364, "bbox": [336, 62, 34, 18], "iscrowd": 0}, {"id": 6095103, "category_id": 127, "area": 110, "bbox": [321, 62, 10, 11], "iscrowd": 0}, {"id": 8192247, "category_id": 127, "area": 107, "bbox": [267, 62, 12, 9], "iscrowd": 0}, {"id": 7405823, "category_id": 127, "area": 360, "bbox": [383, 65, 31, 18], "iscrowd": 0}, {"id": 7799039, "category_id": 127, "area": 241, "bbox": [425, 66, 18, 19], "iscrowd": 0}, {"id": 8126691, "category_id": 127, "area": 222, "bbox": [497, 72, 18, 15], "iscrowd": 0}, {"id": 9830630, "category_id": 127, "area": 317, "bbox": [637, 40, 39, 9], "iscrowd": 0}, {"id": 9968365, "category_id": 127, "area": 119, "bbox": [565, 39, 20, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00000704", "file_name": "ADE_val_00000704.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 20722, "bbox": [0, 0, 350, 141], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4279, "bbox": [49, 134, 260, 109], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4792, "bbox": [81, 0, 194, 33], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 3904, "bbox": [121, 135, 105, 105], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 987, "bbox": [76, 7, 209, 47], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 379, "bbox": [143, 104, 18, 42], "iscrowd": 0}, {"id": 3410811, "category_id": 13, "area": 56, "bbox": [159, 103, 7, 10], "iscrowd": 0}, {"id": 5768579, "category_id": 13, "area": 2390, "bbox": [111, 103, 32, 122], "iscrowd": 0}, {"id": 2949246, "category_id": 13, "area": 1283, "bbox": [196, 114, 29, 88], "iscrowd": 0}, {"id": 2363563, "category_id": 13, "area": 1725, "bbox": [229, 111, 41, 85], "iscrowd": 0}, {"id": 5446558, "category_id": 13, "area": 7291, "bbox": [232, 106, 86, 136], "iscrowd": 0}, {"id": 2099110, "category_id": 13, "area": 1068, "bbox": [321, 172, 29, 70], "iscrowd": 0}, {"id": 4653230, "category_id": 13, "area": 1961, "bbox": [63, 122, 51, 104], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 280, "bbox": [143, 74, 15, 24], "iscrowd": 0}, {"id": 6164198, "category_id": 25, "area": 327, "bbox": [164, 74, 17, 25], "iscrowd": 0}, {"id": 5308671, "category_id": 25, "area": 247, "bbox": [188, 93, 16, 25], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 160, "bbox": [158, 108, 15, 21], "iscrowd": 0}, {"id": 1048346, "category_id": 42, "area": 136, "bbox": [174, 110, 17, 19], "iscrowd": 0}, {"id": 2162443, "category_id": 42, "area": 3268, "bbox": [166, 168, 48, 73], "iscrowd": 0}, {"id": 589568, "category_id": 42, "area": 550, "bbox": [137, 180, 29, 45], "iscrowd": 0}, {"id": 16711680, "category_id": 56, "area": 14391, "bbox": [2, 54, 95, 189], "iscrowd": 0}, {"id": 16712192, "category_id": 56, "area": 12280, "bbox": [212, 50, 138, 193], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 36, "bbox": [148, 6, 8, 6], "iscrowd": 0}, {"id": 46079, "category_id": 83, "area": 34, "bbox": [199, 7, 10, 5], "iscrowd": 0}, {"id": 44523, "category_id": 83, "area": 20, "bbox": [152, 24, 8, 4], "iscrowd": 0}, {"id": 374015, "category_id": 83, "area": 12, "bbox": [195, 24, 5, 3], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 80, "bbox": [147, 79, 6, 17], "iscrowd": 0}, {"id": 982784, "category_id": 99, "area": 98, "bbox": [169, 79, 6, 18], "iscrowd": 0}, {"id": 65280, "category_id": 99, "area": 116, "bbox": [192, 96, 9, 20], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 1080, "bbox": [150, 41, 45, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00000705", "file_name": "ADE_val_00000705.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 16424, "bbox": [0, 20, 350, 213], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25683, "bbox": [0, 124, 313, 141], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 13194, "bbox": [0, 0, 349, 58], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 14179, "bbox": [0, 11, 224, 119], "iscrowd": 0}, {"id": 15195365, "category_id": 9, "area": 692, "bbox": [267, 65, 30, 26], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4232, "bbox": [301, 161, 49, 104], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 622, "bbox": [248, 66, 22, 61], "iscrowd": 0}, {"id": 15992833, "category_id": 76, "area": 5991, "bbox": [148, 73, 102, 175], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 188, "bbox": [179, 19, 28, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00000706", "file_name": "ADE_val_00000706.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 119398, "bbox": [0, 50, 682, 327], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 115259, "bbox": [0, 0, 682, 315], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 10344, "bbox": [20, 222, 662, 157], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 39896, "bbox": [1, 391, 681, 120], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1938, "bbox": [562, 373, 120, 18], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 49751, "bbox": [0, 351, 569, 107], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 880, "bbox": [115, 211, 32, 150], "iscrowd": 0}, {"id": 15215104, "category_id": 88, "area": 779, "bbox": [488, 213, 30, 154], "iscrowd": 0}]}, {"image_id": "ADE_val_00000707", "file_name": "ADE_val_00000707.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 17787, "bbox": [59, 84, 603, 184], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 3303, "bbox": [607, 0, 75, 75], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 139478, "bbox": [0, 0, 682, 297], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 35, "bbox": [681, 227, 1, 35], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 28041, "bbox": [0, 219, 682, 292], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 993, "bbox": [625, 205, 57, 23], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 132787, "bbox": [0, 282, 682, 229], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 426, "bbox": [632, 176, 49, 28], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3883, "bbox": [432, 247, 70, 139], "iscrowd": 0}, {"id": 2950022, "category_id": 13, "area": 3070, "bbox": [96, 299, 83, 106], "iscrowd": 0}, {"id": 2228355, "category_id": 13, "area": 2952, "bbox": [335, 225, 40, 138], "iscrowd": 0}, {"id": 5574017, "category_id": 13, "area": 2716, "bbox": [181, 177, 48, 117], "iscrowd": 0}, {"id": 3219380, "category_id": 13, "area": 1687, "bbox": [495, 210, 33, 97], "iscrowd": 0}, {"id": 5841073, "category_id": 13, "area": 1344, "bbox": [426, 129, 53, 44], "iscrowd": 0}, {"id": 5510038, "category_id": 13, "area": 1305, "bbox": [416, 219, 31, 81], "iscrowd": 0}, {"id": 4721788, "category_id": 13, "area": 1291, "bbox": [290, 181, 53, 68], "iscrowd": 0}, {"id": 5243031, "category_id": 13, "area": 826, "bbox": [221, 240, 21, 78], "iscrowd": 0}, {"id": 4391044, "category_id": 13, "area": 659, "bbox": [375, 222, 24, 42], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 4785, "bbox": [39, 207, 125, 60], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 406, "bbox": [560, 263, 49, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000708", "file_name": "ADE_val_00000708.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 84723, "bbox": [0, 0, 374, 301], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 57993, "bbox": [0, 294, 374, 204], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6790, "bbox": [0, 0, 305, 41], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2856, "bbox": [341, 221, 25, 121], "iscrowd": 0}, {"id": 14876895, "category_id": 11, "area": 2116, "bbox": [199, 259, 62, 44], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5159, "bbox": [33, 250, 143, 106], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1542, "bbox": [47, 290, 61, 54], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 9935, "bbox": [309, 1, 65, 463], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 3999, "bbox": [319, 341, 54, 82], "iscrowd": 0}, {"id": 60437, "category_id": 42, "area": 1406, "bbox": [197, 229, 46, 38], "iscrowd": 0}, {"id": 2553106, "category_id": 42, "area": 1028, "bbox": [83, 241, 58, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00000709", "file_name": "ADE_val_00000709.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 206399, "bbox": [2, 0, 765, 476], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 70742, "bbox": [2, 358, 765, 153], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 32295, "bbox": [0, 0, 684, 85], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 3318, "bbox": [1, 414, 87, 75], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 9801, "bbox": [287, 90, 64, 166], "iscrowd": 0}, {"id": 13425618, "category_id": 9, "area": 12603, "bbox": [362, 79, 79, 188], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3017, "bbox": [197, 305, 124, 97], "iscrowd": 0}, {"id": 6357739, "category_id": 16, "area": 9742, "bbox": [312, 341, 279, 171], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 4662, "bbox": [0, 287, 62, 112], "iscrowd": 0}, {"id": 13891077, "category_id": 31, "area": 7342, "bbox": [22, 276, 114, 107], "iscrowd": 0}, {"id": 12516117, "category_id": 31, "area": 4328, "bbox": [90, 269, 102, 97], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 448, "bbox": [292, 237, 33, 17], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1081, "bbox": [368, 228, 51, 34], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 5508, "bbox": [161, 310, 106, 108], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1416, "bbox": [3, 1, 79, 32], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 5846, "bbox": [703, 5, 63, 107], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 1037, "bbox": [208, 290, 68, 24], "iscrowd": 0}, {"id": 3346431, "category_id": 109, "area": 605, "bbox": [245, 306, 53, 18], "iscrowd": 0}, {"id": 2556141, "category_id": 109, "area": 8855, "bbox": [340, 347, 230, 59], "iscrowd": 0}]}, {"image_id": "ADE_val_00000710", "file_name": "ADE_val_00000710.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 230909, "bbox": [0, 0, 683, 420], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 60721, "bbox": [1, 380, 682, 132], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4295, "bbox": [17, 339, 49, 142], "iscrowd": 0}, {"id": 3604654, "category_id": 13, "area": 734, "bbox": [393, 348, 22, 55], "iscrowd": 0}, {"id": 2883714, "category_id": 13, "area": 617, "bbox": [207, 345, 23, 59], "iscrowd": 0}, {"id": 2031745, "category_id": 13, "area": 562, "bbox": [356, 349, 21, 49], "iscrowd": 0}, {"id": 4849798, "category_id": 13, "area": 272, "bbox": [352, 349, 11, 44], "iscrowd": 0}, {"id": 2424995, "category_id": 13, "area": 1294, "bbox": [158, 345, 24, 87], "iscrowd": 0}, {"id": 3801239, "category_id": 13, "area": 306, "bbox": [372, 348, 12, 45], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1111, "bbox": [84, 67, 26, 49], "iscrowd": 0}, {"id": 3142169, "category_id": 15, "area": 1123, "bbox": [107, 65, 25, 51], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 183, "bbox": [431, 375, 29, 23], "iscrowd": 0}, {"id": 6037503, "category_id": 16, "area": 136, "bbox": [420, 373, 39, 21], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 181, "bbox": [444, 378, 16, 18], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 672, "bbox": [386, 242, 35, 26], "iscrowd": 0}, {"id": 1575665, "category_id": 67, "area": 724, "bbox": [214, 239, 33, 30], "iscrowd": 0}, {"id": 226, "category_id": 67, "area": 758, "bbox": [72, 238, 33, 30], "iscrowd": 0}, {"id": 248, "category_id": 67, "area": 939, "bbox": [531, 234, 39, 35], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 693, "bbox": [400, 308, 58, 31], "iscrowd": 0}, {"id": 5242651, "category_id": 87, "area": 56, "bbox": [375, 342, 15, 6], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 37, "bbox": [383, 306, 6, 9], "iscrowd": 0}, {"id": 16734976, "category_id": 88, "area": 93, "bbox": [428, 282, 16, 20], "iscrowd": 0}, {"id": 15817502, "category_id": 88, "area": 262, "bbox": [520, 211, 15, 30], "iscrowd": 0}, {"id": 16140544, "category_id": 88, "area": 24, "bbox": [359, 319, 4, 7], "iscrowd": 0}, {"id": 16731136, "category_id": 88, "area": 463, "bbox": [308, 156, 17, 60], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 142, "bbox": [373, 313, 17, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00000711", "file_name": "ADE_val_00000711.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 30130, "bbox": [0, 24, 363, 205], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 37021, "bbox": [0, 0, 363, 137], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 11963, "bbox": [65, 180, 298, 49], "iscrowd": 0}, {"id": 12105983, "category_id": 85, "area": 3931, "bbox": [0, 16, 49, 90], "iscrowd": 0}]}, {"image_id": "ADE_val_00000712", "file_name": "ADE_val_00000712.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 881, "bbox": [247, 90, 66, 32], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 17650, "bbox": [0, 0, 313, 91], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7751, "bbox": [0, 143, 312, 61], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 1133, "bbox": [0, 90, 57, 21], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 4994, "bbox": [0, 104, 312, 65], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3812, "bbox": [40, 55, 56, 145], "iscrowd": 0}, {"id": 2097279, "category_id": 13, "area": 4703, "bbox": [143, 16, 68, 132], "iscrowd": 0}, {"id": 4202128, "category_id": 13, "area": 4338, "bbox": [195, 23, 75, 131], "iscrowd": 0}, {"id": 3015078, "category_id": 13, "area": 2440, "bbox": [271, 66, 36, 110], "iscrowd": 0}, {"id": 2294700, "category_id": 13, "area": 5537, "bbox": [94, 3, 67, 140], "iscrowd": 0}, {"id": 3153312, "category_id": 13, "area": 258, "bbox": [2, 129, 11, 31], "iscrowd": 0}, {"id": 2691229, "category_id": 13, "area": 88, "bbox": [11, 126, 8, 32], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 416, "bbox": [141, 90, 21, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000713", "file_name": "ADE_val_00000713.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 46768, "bbox": [0, 0, 596, 271], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 62431, "bbox": [2, 182, 594, 265], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4840, "bbox": [257, 0, 44, 120], "iscrowd": 0}, {"id": 14680019, "category_id": 9, "area": 7209, "bbox": [174, 0, 63, 129], "iscrowd": 0}, {"id": 16698345, "category_id": 9, "area": 9970, "bbox": [64, 0, 83, 139], "iscrowd": 0}, {"id": 14930158, "category_id": 9, "area": 3531, "bbox": [2, 0, 31, 151], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 758, "bbox": [325, 16, 29, 29], "iscrowd": 0}, {"id": 2565375, "category_id": 23, "area": 898, "bbox": [359, 13, 31, 31], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 21034, "bbox": [0, 165, 289, 186], "iscrowd": 0}, {"id": 1059583, "category_id": 57, "area": 70536, "bbox": [129, 184, 416, 264], "iscrowd": 0}, {"id": 15354, "category_id": 57, "area": 3108, "bbox": [494, 139, 102, 58], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 362, "bbox": [59, 197, 47, 14], "iscrowd": 0}, {"id": 10158335, "category_id": 120, "area": 55, "bbox": [194, 183, 8, 9], "iscrowd": 0}, {"id": 11141375, "category_id": 120, "area": 1043, "bbox": [223, 257, 69, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00000714", "file_name": "ADE_val_00000714.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 28775, "bbox": [0, 0, 288, 215], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14742, "bbox": [15, 142, 272, 74], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7506, "bbox": [18, 0, 269, 38], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 874, "bbox": [217, 49, 39, 26], "iscrowd": 0}, {"id": 2231293, "category_id": 23, "area": 168, "bbox": [114, 52, 13, 13], "iscrowd": 0}, {"id": 1575669, "category_id": 23, "area": 169, "bbox": [114, 70, 13, 13], "iscrowd": 0}, {"id": 2688249, "category_id": 23, "area": 154, "bbox": [131, 52, 12, 13], "iscrowd": 0}, {"id": 4718847, "category_id": 23, "area": 156, "bbox": [131, 70, 12, 13], "iscrowd": 0}, {"id": 4265983, "category_id": 23, "area": 134, "bbox": [147, 70, 12, 12], "iscrowd": 0}, {"id": 2621695, "category_id": 23, "area": 378, "bbox": [18, 37, 6, 68], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 758, "bbox": [149, 6, 36, 61], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 5961, "bbox": [112, 111, 132, 97], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 149, "bbox": [184, 3, 23, 9], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 1387, "bbox": [26, 47, 43, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00000715", "file_name": "ADE_val_00000715.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 139286, "bbox": [0, 42, 682, 383], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 31084, "bbox": [0, 377, 681, 134], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 34944, "bbox": [1, 0, 681, 85], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3010, "bbox": [436, 127, 214, 94], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 42623, "bbox": [479, 151, 198, 360], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 18589, "bbox": [460, 97, 217, 120], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 343, "bbox": [404, 124, 17, 21], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 64070, "bbox": [126, 296, 546, 215], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2214, "bbox": [1, 21, 110, 30], "iscrowd": 0}, {"id": 39423, "category_id": 83, "area": 2580, "bbox": [263, 51, 158, 32], "iscrowd": 0}, {"id": 45560, "category_id": 83, "area": 4832, "bbox": [496, 1, 186, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00000716", "file_name": "ADE_val_00000716.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 35171, "bbox": [2, 49, 447, 153], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 35055, "bbox": [0, 182, 449, 115], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 25636, "bbox": [0, 0, 449, 77], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2913, "bbox": [394, 61, 36, 120], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1484, "bbox": [335, 104, 42, 61], "iscrowd": 0}, {"id": 3744398, "category_id": 13, "area": 1282, "bbox": [114, 127, 58, 41], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1903, "bbox": [94, 101, 34, 69], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 20931, "bbox": [47, 158, 340, 139], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 8299, "bbox": [111, 1, 220, 119], "iscrowd": 0}]}, {"image_id": "ADE_val_00000717", "file_name": "ADE_val_00000717.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 55429, "bbox": [1, 1, 681, 276], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 72334, "bbox": [1, 204, 681, 307], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4112, "bbox": [263, 49, 44, 134], "iscrowd": 0}, {"id": 14666185, "category_id": 9, "area": 1965, "bbox": [228, 67, 22, 116], "iscrowd": 0}, {"id": 14478334, "category_id": 9, "area": 21038, "bbox": [1, 1, 90, 239], "iscrowd": 0}, {"id": 14020305, "category_id": 9, "area": 8792, "bbox": [420, 31, 75, 147], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 52542, "bbox": [117, 0, 301, 259], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5942, "bbox": [402, 199, 206, 139], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 2190, "bbox": [265, 21, 44, 78], "iscrowd": 0}, {"id": 1120247, "category_id": 19, "area": 1554, "bbox": [231, 17, 25, 80], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 792, "bbox": [574, 190, 43, 29], "iscrowd": 0}, {"id": 483011, "category_id": 20, "area": 761, "bbox": [439, 177, 42, 22], "iscrowd": 0}, {"id": 11985, "category_id": 20, "area": 4980, "bbox": [447, 219, 107, 132], "iscrowd": 0}, {"id": 1916855, "category_id": 20, "area": 3334, "bbox": [544, 219, 76, 131], "iscrowd": 0}, {"id": 1921469, "category_id": 20, "area": 1831, "bbox": [605, 213, 62, 124], "iscrowd": 0}, {"id": 1196264, "category_id": 20, "area": 884, "bbox": [442, 231, 56, 28], "iscrowd": 0}, {"id": 25790, "category_id": 20, "area": 561, "bbox": [548, 238, 32, 23], "iscrowd": 0}, {"id": 1922269, "category_id": 20, "area": 1181, "bbox": [406, 164, 40, 36], "iscrowd": 0}, {"id": 10685, "category_id": 20, "area": 2169, "bbox": [389, 183, 75, 117], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 238, "bbox": [584, 111, 18, 44], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 91629, "bbox": [27, 248, 521, 264], "iscrowd": 0}]}, {"image_id": "ADE_val_00000718", "file_name": "ADE_val_00000718.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 12373, "bbox": [154, 17, 157, 216], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 4586, "bbox": [0, 29, 116, 58], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 20967, "bbox": [12, 97, 298, 137], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 15904, "bbox": [0, 0, 312, 78], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 3667, "bbox": [0, 87, 115, 51], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1945, "bbox": [247, 143, 65, 77], "iscrowd": 0}, {"id": 11982, "category_id": 20, "area": 1003, "bbox": [236, 134, 59, 69], "iscrowd": 0}, {"id": 1918430, "category_id": 20, "area": 750, "bbox": [226, 127, 52, 61], "iscrowd": 0}, {"id": 344762, "category_id": 20, "area": 502, "bbox": [222, 122, 44, 48], "iscrowd": 0}, {"id": 18132, "category_id": 20, "area": 351, "bbox": [216, 118, 41, 44], "iscrowd": 0}, {"id": 221876, "category_id": 20, "area": 266, "bbox": [213, 114, 34, 34], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 9972, "bbox": [0, 65, 156, 168], "iscrowd": 0}]}, {"image_id": "ADE_val_00000719", "file_name": "ADE_val_00000719.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 165421, "bbox": [0, 1, 511, 738], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 9211, "bbox": [325, 5, 112, 189], "iscrowd": 0}, {"id": 3604242, "category_id": 15, "area": 1350, "bbox": [0, 545, 24, 113], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1536, "bbox": [337, 79, 78, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00000720", "file_name": "ADE_val_00000720.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 189133, "bbox": [0, 0, 765, 306], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 122867, "bbox": [0, 229, 764, 282], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1609, "bbox": [564, 150, 21, 121], "iscrowd": 0}, {"id": 11188232, "category_id": 105, "area": 73846, "bbox": [101, 294, 551, 176], "iscrowd": 0}]}, {"image_id": "ADE_val_00000721", "file_name": "ADE_val_00000721.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 8134, "bbox": [0, 0, 349, 39], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2036, "bbox": [260, 0, 90, 29], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 20682, "bbox": [0, 26, 350, 223], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 22379, "bbox": [2, 25, 216, 177], "iscrowd": 0}, {"id": 13055, "category_id": 39, "area": 18660, "bbox": [56, 22, 290, 225], "iscrowd": 0}]}, {"image_id": "ADE_val_00000722", "file_name": "ADE_val_00000722.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 79728, "bbox": [0, 0, 612, 271], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 16386, "bbox": [0, 342, 612, 69], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 29982, "bbox": [2, 299, 601, 93], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 120519, "bbox": [0, 36, 612, 315], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 2582, "bbox": [517, 353, 95, 30], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 66, "bbox": [347, 198, 13, 7], "iscrowd": 0}, {"id": 509682, "category_id": 83, "area": 53, "bbox": [469, 192, 8, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00000723", "file_name": "ADE_val_00000723.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1692, "bbox": [129, 0, 90, 77], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17264, "bbox": [0, 92, 282, 125], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 240, "bbox": [141, 41, 16, 16], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 329, "bbox": [67, 45, 24, 29], "iscrowd": 0}, {"id": 2889871, "category_id": 13, "area": 3767, "bbox": [116, 72, 63, 126], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 8672, "bbox": [33, 71, 250, 144], "iscrowd": 0}, {"id": 6291709, "category_id": 16, "area": 683, "bbox": [0, 174, 32, 42], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 191, "bbox": [131, 63, 20, 13], "iscrowd": 0}, {"id": 16842, "category_id": 20, "area": 198, "bbox": [165, 72, 22, 13], "iscrowd": 0}, {"id": 998119, "category_id": 20, "area": 399, "bbox": [244, 85, 32, 18], "iscrowd": 0}, {"id": 2053294, "category_id": 20, "area": 807, "bbox": [123, 138, 52, 76], "iscrowd": 0}, {"id": 25006, "category_id": 20, "area": 79, "bbox": [58, 66, 11, 9], "iscrowd": 0}, {"id": 21166, "category_id": 20, "area": 1030, "bbox": [56, 79, 38, 68], "iscrowd": 0}, {"id": 872925, "category_id": 20, "area": 552, "bbox": [22, 72, 36, 55], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 191, "bbox": [130, 57, 30, 12], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 7771, "bbox": [0, 0, 131, 106], "iscrowd": 0}, {"id": 15657735, "category_id": 63, "area": 4994, "bbox": [161, 0, 122, 106], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 407, "bbox": [11, 29, 37, 11], "iscrowd": 0}, {"id": 559335, "category_id": 68, "area": 342, "bbox": [55, 29, 35, 10], "iscrowd": 0}, {"id": 41215, "category_id": 68, "area": 270, "bbox": [96, 28, 27, 11], "iscrowd": 0}, {"id": 1423103, "category_id": 68, "area": 252, "bbox": [95, 41, 28, 9], "iscrowd": 0}, {"id": 1218811, "category_id": 68, "area": 199, "bbox": [164, 30, 20, 10], "iscrowd": 0}, {"id": 38385, "category_id": 68, "area": 286, "bbox": [187, 30, 25, 12], "iscrowd": 0}, {"id": 1745135, "category_id": 68, "area": 264, "bbox": [187, 44, 25, 12], "iscrowd": 0}, {"id": 49661, "category_id": 68, "area": 307, "bbox": [215, 46, 27, 13], "iscrowd": 0}, {"id": 2010623, "category_id": 68, "area": 263, "bbox": [186, 56, 24, 14], "iscrowd": 0}, {"id": 765439, "category_id": 68, "area": 333, "bbox": [215, 59, 30, 16], "iscrowd": 0}, {"id": 35583, "category_id": 68, "area": 336, "bbox": [214, 73, 30, 15], "iscrowd": 0}, {"id": 49149, "category_id": 68, "area": 224, "bbox": [189, 70, 22, 14], "iscrowd": 0}, {"id": 1673727, "category_id": 68, "area": 372, "bbox": [249, 33, 33, 13], "iscrowd": 0}, {"id": 42495, "category_id": 68, "area": 320, "bbox": [216, 31, 31, 13], "iscrowd": 0}, {"id": 48634, "category_id": 68, "area": 362, "bbox": [216, 17, 30, 13], "iscrowd": 0}, {"id": 508129, "category_id": 68, "area": 399, "bbox": [249, 17, 33, 13], "iscrowd": 0}, {"id": 955647, "category_id": 68, "area": 250, "bbox": [188, 18, 25, 11], "iscrowd": 0}, {"id": 1544191, "category_id": 68, "area": 220, "bbox": [163, 18, 22, 10], "iscrowd": 0}, {"id": 1806072, "category_id": 68, "area": 199, "bbox": [163, 42, 20, 11], "iscrowd": 0}, {"id": 40700, "category_id": 68, "area": 196, "bbox": [164, 54, 19, 12], "iscrowd": 0}, {"id": 49151, "category_id": 68, "area": 441, "bbox": [247, 63, 34, 17], "iscrowd": 0}, {"id": 45294, "category_id": 68, "area": 459, "bbox": [248, 48, 34, 16], "iscrowd": 0}, {"id": 433919, "category_id": 68, "area": 314, "bbox": [95, 15, 30, 12], "iscrowd": 0}, {"id": 762357, "category_id": 68, "area": 343, "bbox": [55, 16, 36, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000724", "file_name": "ADE_val_00000724.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 163282, "bbox": [1, 0, 681, 497], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 38230, "bbox": [42, 367, 386, 144], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 28158, "bbox": [37, 1, 440, 212], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 1116, "bbox": [355, 296, 167, 45], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 18739, "bbox": [122, 218, 193, 108], "iscrowd": 0}, {"id": 16252885, "category_id": 9, "area": 1600, "bbox": [458, 221, 20, 88], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3398, "bbox": [43, 247, 41, 113], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 869, "bbox": [42, 328, 64, 75], "iscrowd": 0}, {"id": 11978, "category_id": 20, "area": 1993, "bbox": [35, 337, 76, 106], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 1068, "bbox": [342, 252, 50, 57], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2204, "bbox": [164, 115, 31, 74], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 62254, "bbox": [297, 303, 385, 208], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 355, "bbox": [309, 287, 28, 24], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 3657, "bbox": [0, 429, 152, 82], "iscrowd": 0}, {"id": 65445, "category_id": 70, "area": 3753, "bbox": [183, 311, 96, 68], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 6284, "bbox": [357, 25, 323, 128], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 1856, "bbox": [339, 205, 51, 38], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 305, "bbox": [343, 253, 13, 27], "iscrowd": 0}, {"id": 8966486, "category_id": 116, "area": 257, "bbox": [356, 253, 12, 26], "iscrowd": 0}, {"id": 9549872, "category_id": 116, "area": 290, "bbox": [369, 257, 15, 23], "iscrowd": 0}, {"id": 10333236, "category_id": 116, "area": 303, "bbox": [344, 283, 14, 24], "iscrowd": 0}, {"id": 10984277, "category_id": 116, "area": 246, "bbox": [358, 283, 13, 23], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 767, "bbox": [508, 196, 18, 49], "iscrowd": 0}, {"id": 16726808, "category_id": 135, "area": 432, "bbox": [394, 213, 13, 36], "iscrowd": 0}, {"id": 16714496, "category_id": 135, "area": 2923, "bbox": [3, 121, 28, 114], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 222, "bbox": [315, 302, 20, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00000725", "file_name": "ADE_val_00000725.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 24261, "bbox": [0, 102, 299, 148], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8095, "bbox": [0, 217, 299, 82], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 34340, "bbox": [2, 0, 297, 132], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 307, "bbox": [139, 188, 21, 24], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1018, "bbox": [246, 159, 33, 44], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 18502, "bbox": [3, 192, 289, 103], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 221, "bbox": [8, 192, 21, 16], "iscrowd": 0}, {"id": 4095, "category_id": 67, "area": 230, "bbox": [38, 183, 21, 28], "iscrowd": 0}, {"id": 1966308, "category_id": 67, "area": 228, "bbox": [262, 165, 25, 13], "iscrowd": 0}, {"id": 2047, "category_id": 67, "area": 651, "bbox": [11, 161, 50, 28], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 21, "bbox": [158, 53, 6, 4], "iscrowd": 0}, {"id": 961791, "category_id": 83, "area": 35, "bbox": [187, 42, 7, 6], "iscrowd": 0}, {"id": 49654, "category_id": 83, "area": 31, "bbox": [231, 44, 7, 6], "iscrowd": 0}, {"id": 894449, "category_id": 83, "area": 19, "bbox": [228, 75, 5, 5], "iscrowd": 0}, {"id": 237567, "category_id": 83, "area": 25, "bbox": [150, 70, 8, 4], "iscrowd": 0}, {"id": 51960, "category_id": 83, "area": 25, "bbox": [199, 81, 6, 6], "iscrowd": 0}, {"id": 36863, "category_id": 83, "area": 24, "bbox": [244, 63, 7, 5], "iscrowd": 0}, {"id": 696831, "category_id": 83, "area": 23, "bbox": [170, 80, 6, 5], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 230, "bbox": [27, 182, 13, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00000726", "file_name": "ADE_val_00000726.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 30974, "bbox": [0, 0, 400, 222], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 29443, "bbox": [0, 120, 400, 149], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5194, "bbox": [0, 0, 327, 27], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 262, "bbox": [235, 123, 37, 11], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 899, "bbox": [166, 91, 45, 40], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 937, "bbox": [118, 40, 15, 70], "iscrowd": 0}, {"id": 1831453, "category_id": 15, "area": 2237, "bbox": [140, 40, 30, 84], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 208, "bbox": [201, 107, 17, 21], "iscrowd": 0}, {"id": 17345, "category_id": 20, "area": 131, "bbox": [267, 123, 19, 11], "iscrowd": 0}, {"id": 21208, "category_id": 20, "area": 650, "bbox": [23, 96, 29, 38], "iscrowd": 0}, {"id": 24795, "category_id": 20, "area": 503, "bbox": [62, 94, 30, 34], "iscrowd": 0}, {"id": 1459668, "category_id": 20, "area": 91, "bbox": [138, 104, 9, 15], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 857, "bbox": [81, 41, 27, 35], "iscrowd": 0}, {"id": 2106355, "category_id": 23, "area": 4718, "bbox": [185, 35, 86, 64], "iscrowd": 0}, {"id": 4720125, "category_id": 23, "area": 9218, "bbox": [270, 32, 129, 79], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 19740, "bbox": [113, 109, 217, 145], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 505, "bbox": [44, 113, 38, 24], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 44, "bbox": [64, 12, 12, 4], "iscrowd": 0}, {"id": 39423, "category_id": 83, "area": 58, "bbox": [131, 9, 13, 5], "iscrowd": 0}]}, {"image_id": "ADE_val_00000727", "file_name": "ADE_val_00000727.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 35322, "bbox": [0, 25, 355, 197], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 5003, "bbox": [167, 0, 188, 44], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 17602, "bbox": [0, 0, 207, 141], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 12071, "bbox": [26, 133, 328, 87], "iscrowd": 0}]}, {"image_id": "ADE_val_00000728", "file_name": "ADE_val_00000728.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 34420, "bbox": [0, 0, 500, 134], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 33141, "bbox": [0, 103, 499, 230], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2046, "bbox": [71, 0, 142, 24], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 7073, "bbox": [323, 75, 94, 153], "iscrowd": 0}, {"id": 4263805, "category_id": 13, "area": 9011, "bbox": [126, 89, 87, 202], "iscrowd": 0}, {"id": 5439906, "category_id": 13, "area": 3097, "bbox": [206, 77, 62, 92], "iscrowd": 0}, {"id": 4325518, "category_id": 13, "area": 1559, "bbox": [110, 84, 44, 75], "iscrowd": 0}, {"id": 2757802, "category_id": 13, "area": 588, "bbox": [147, 81, 22, 38], "iscrowd": 0}, {"id": 4456588, "category_id": 13, "area": 295, "bbox": [179, 67, 22, 27], "iscrowd": 0}, {"id": 2031736, "category_id": 13, "area": 1158, "bbox": [198, 58, 29, 62], "iscrowd": 0}, {"id": 3153025, "category_id": 13, "area": 494, "bbox": [303, 63, 20, 41], "iscrowd": 0}, {"id": 4460720, "category_id": 13, "area": 383, "bbox": [0, 98, 21, 33], "iscrowd": 0}, {"id": 4915346, "category_id": 13, "area": 288, "bbox": [130, 54, 18, 24], "iscrowd": 0}, {"id": 3216558, "category_id": 13, "area": 462, "bbox": [347, 58, 27, 37], "iscrowd": 0}, {"id": 5247872, "category_id": 13, "area": 17299, "bbox": [250, 100, 139, 233], "iscrowd": 0}, {"id": 2167930, "category_id": 13, "area": 526, "bbox": [15, 81, 17, 50], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 3117, "bbox": [250, 8, 40, 99], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 8671, "bbox": [167, 146, 135, 163], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 474, "bbox": [280, 78, 25, 25], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 5978, "bbox": [303, 266, 158, 67], "iscrowd": 0}, {"id": 10288896, "category_id": 66, "area": 3589, "bbox": [385, 218, 98, 59], "iscrowd": 0}, {"id": 7798538, "category_id": 66, "area": 7052, "bbox": [0, 264, 159, 69], "iscrowd": 0}, {"id": 8716032, "category_id": 66, "area": 5124, "bbox": [0, 215, 84, 96], "iscrowd": 0}, {"id": 7012103, "category_id": 66, "area": 1364, "bbox": [410, 157, 56, 46], "iscrowd": 0}, {"id": 9240320, "category_id": 66, "area": 1766, "bbox": [418, 129, 66, 41], "iscrowd": 0}, {"id": 7864064, "category_id": 66, "area": 1232, "bbox": [18, 151, 54, 41], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 1405, "bbox": [240, 177, 60, 37], "iscrowd": 0}]}, {"image_id": "ADE_val_00000729", "file_name": "ADE_val_00000729.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 4971, "bbox": [2, 154, 111, 78], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 44532, "bbox": [2, 1, 347, 136], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 20694, "bbox": [0, 208, 349, 91], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1695, "bbox": [33, 125, 312, 94], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 13966, "bbox": [2, 131, 347, 90], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6268, "bbox": [125, 180, 86, 94], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3025, "bbox": [212, 175, 73, 93], "iscrowd": 0}, {"id": 11705, "category_id": 20, "area": 2736, "bbox": [62, 181, 69, 97], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1018, "bbox": [179, 54, 24, 126], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 1566, "bbox": [0, 137, 348, 91], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 265, "bbox": [165, 151, 11, 35], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 898, "bbox": [303, 217, 45, 27], "iscrowd": 0}, {"id": 15405042, "category_id": 126, "area": 562, "bbox": [220, 139, 47, 13], "iscrowd": 0}, {"id": 16713471, "category_id": 126, "area": 414, "bbox": [112, 141, 41, 13], "iscrowd": 0}, {"id": 16122879, "category_id": 126, "area": 669, "bbox": [30, 143, 52, 16], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 84, "bbox": [142, 164, 7, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00000730", "file_name": "ADE_val_00000730.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21372, "bbox": [22, 0, 298, 235], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6304, "bbox": [32, 217, 288, 33], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 6477, "bbox": [0, 1, 32, 249], "iscrowd": 0}, {"id": 3407628, "category_id": 15, "area": 15231, "bbox": [42, 65, 98, 168], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 580, "bbox": [208, 15, 40, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000731", "file_name": "ADE_val_00000731.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 87687, "bbox": [1, 0, 510, 221], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 64674, "bbox": [0, 99, 511, 260], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 3696, "bbox": [0, 333, 509, 35], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 165865, "bbox": [0, 340, 511, 342], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 1873, "bbox": [371, 292, 53, 44], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 870, "bbox": [450, 247, 60, 83], "iscrowd": 0}, {"id": 16733454, "category_id": 73, "area": 2153, "bbox": [404, 191, 62, 142], "iscrowd": 0}, {"id": 15154188, "category_id": 73, "area": 2604, "bbox": [262, 141, 79, 204], "iscrowd": 0}, {"id": 15284758, "category_id": 73, "area": 2816, "bbox": [216, 209, 69, 138], "iscrowd": 0}, {"id": 14763264, "category_id": 73, "area": 1271, "bbox": [144, 134, 56, 68], "iscrowd": 0}, {"id": 16726533, "category_id": 73, "area": 2607, "bbox": [282, 230, 59, 105], "iscrowd": 0}, {"id": 14826767, "category_id": 73, "area": 4432, "bbox": [149, 185, 81, 119], "iscrowd": 0}, {"id": 16015616, "category_id": 73, "area": 4843, "bbox": [29, 164, 102, 185], "iscrowd": 0}]}, {"image_id": "ADE_val_00000732", "file_name": "ADE_val_00000732.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 50103, "bbox": [0, 0, 255, 255], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 304, "bbox": [147, 178, 28, 16], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 14029, "bbox": [1, 135, 255, 121], "iscrowd": 0}]}, {"image_id": "ADE_val_00000733", "file_name": "ADE_val_00000733.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 78148, "bbox": [0, 0, 747, 384], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 21849, "bbox": [1, 289, 299, 222], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 52447, "bbox": [0, 265, 642, 245], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 5884, "bbox": [311, 389, 405, 120], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 220596, "bbox": [0, 23, 747, 487], "iscrowd": 0}]}, {"image_id": "ADE_val_00000734", "file_name": "ADE_val_00000734.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 47727, "bbox": [0, 1, 359, 268], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21240, "bbox": [0, 147, 304, 123], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 15547, "bbox": [0, 0, 357, 86], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2202, "bbox": [249, 39, 39, 66], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 606, "bbox": [90, 102, 15, 54], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4339, "bbox": [0, 84, 40, 111], "iscrowd": 0}, {"id": 5171972, "category_id": 15, "area": 445, "bbox": [109, 85, 8, 80], "iscrowd": 0}, {"id": 4652810, "category_id": 15, "area": 2591, "bbox": [60, 80, 31, 93], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 555, "bbox": [58, 172, 81, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00000735", "file_name": "ADE_val_00000735.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 248, "bbox": [19, 142, 62, 15], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 18351, "bbox": [0, 4, 300, 153], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 14410, "bbox": [1, 1, 299, 72], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7311, "bbox": [0, 71, 288, 88], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 13474, "bbox": [1, 95, 286, 130], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2183, "bbox": [247, 127, 53, 98], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 1071, "bbox": [0, 202, 83, 23], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 65, "bbox": [128, 206, 14, 7], "iscrowd": 0}, {"id": 14250522, "category_id": 21, "area": 68, "bbox": [189, 209, 11, 8], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 190, "bbox": [155, 205, 26, 10], "iscrowd": 0}, {"id": 15794414, "category_id": 81, "area": 39, "bbox": [53, 156, 10, 6], "iscrowd": 0}, {"id": 11188232, "category_id": 105, "area": 7937, "bbox": [53, 136, 186, 70], "iscrowd": 0}]}, {"image_id": "ADE_val_00000736", "file_name": "ADE_val_00000736.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 641, "bbox": [131, 60, 148, 33], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 10275, "bbox": [0, 1, 209, 74], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 1709, "bbox": [98, 0, 364, 20], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 10320, "bbox": [34, 0, 465, 79], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 56909, "bbox": [0, 63, 499, 264], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 4654, "bbox": [0, 61, 499, 267], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3802, "bbox": [143, 65, 164, 41], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2048, "bbox": [40, 67, 92, 36], "iscrowd": 0}, {"id": 15036160, "category_id": 21, "area": 105, "bbox": [307, 66, 14, 11], "iscrowd": 0}, {"id": 14569742, "category_id": 21, "area": 199, "bbox": [289, 70, 20, 13], "iscrowd": 0}, {"id": 13324288, "category_id": 21, "area": 25817, "bbox": [168, 156, 262, 158], "iscrowd": 0}, {"id": 14440717, "category_id": 21, "area": 218, "bbox": [472, 115, 20, 21], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 25982, "bbox": [313, 7, 186, 318], "iscrowd": 0}]}, {"image_id": "ADE_val_00000737", "file_name": "ADE_val_00000737.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 174, "bbox": [150, 0, 63, 6], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 22133, "bbox": [0, 0, 319, 80], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 30664, "bbox": [6, 80, 313, 160], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 4173, "bbox": [2, 59, 290, 46], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 9723, "bbox": [15, 92, 237, 148], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2090, "bbox": [102, 80, 162, 27], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1603, "bbox": [250, 74, 69, 34], "iscrowd": 0}, {"id": 14114050, "category_id": 21, "area": 2015, "bbox": [266, 105, 53, 51], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 539, "bbox": [173, 60, 44, 39], "iscrowd": 0}, {"id": 8592114, "category_id": 44, "area": 185, "bbox": [230, 55, 16, 28], "iscrowd": 0}, {"id": 11075817, "category_id": 44, "area": 170, "bbox": [113, 80, 20, 10], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1702, "bbox": [0, 86, 21, 154], "iscrowd": 0}]}, {"image_id": "ADE_val_00000738", "file_name": "ADE_val_00000738.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 2839, "bbox": [20, 5, 363, 34], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 7620, "bbox": [0, 0, 383, 27], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 8223, "bbox": [2, 23, 380, 44], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 319, "bbox": [0, 23, 49, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00000739", "file_name": "ADE_val_00000739.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 200788, "bbox": [1, 1, 978, 296], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 26824, "bbox": [1, 263, 978, 80], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 57682, "bbox": [55, 92, 575, 207], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 13836, "bbox": [3, 333, 976, 45], "iscrowd": 0}, {"id": 65433, "category_id": 55, "area": 151496, "bbox": [0, 321, 975, 189], "iscrowd": 0}, {"id": 5439232, "category_id": 91, "area": 43507, "bbox": [320, 188, 575, 155], "iscrowd": 0}]}, {"image_id": "ADE_val_00000740", "file_name": "ADE_val_00000740.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 16095, "bbox": [0, 0, 383, 85], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 16998, "bbox": [0, 0, 383, 91], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 55802, "bbox": [0, 85, 384, 202], "iscrowd": 0}]}, {"image_id": "ADE_val_00000741", "file_name": "ADE_val_00000741.png", "segments_info": [{"id": 1349280, "category_id": 47, "area": 86183, "bbox": [0, 4, 402, 376], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 9791, "bbox": [210, 60, 146, 159], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 4938, "bbox": [1, 0, 400, 35], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 37423, "bbox": [2, 9, 399, 371], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 2825, "bbox": [150, 195, 66, 68], "iscrowd": 0}, {"id": 3151843, "category_id": 109, "area": 3969, "bbox": [2, 122, 71, 76], "iscrowd": 0}, {"id": 2818303, "category_id": 109, "area": 1951, "bbox": [163, 110, 51, 45], "iscrowd": 0}, {"id": 1841663, "category_id": 109, "area": 783, "bbox": [103, 69, 30, 31], "iscrowd": 0}, {"id": 2235391, "category_id": 109, "area": 989, "bbox": [176, 55, 38, 37], "iscrowd": 0}, {"id": 2818291, "category_id": 109, "area": 757, "bbox": [237, 50, 48, 26], "iscrowd": 0}, {"id": 3080440, "category_id": 109, "area": 1053, "bbox": [243, 185, 39, 38], "iscrowd": 0}]}, {"image_id": "ADE_val_00000742", "file_name": "ADE_val_00000742.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 179349, "bbox": [0, 0, 511, 738], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 88194, "bbox": [0, 421, 457, 316], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 93290, "bbox": [0, 317, 511, 420], "iscrowd": 0}, {"id": 1043118, "category_id": 70, "area": 14009, "bbox": [1, 192, 359, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00000743", "file_name": "ADE_val_00000743.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 124767, "bbox": [22, 26, 461, 510], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 113384, "bbox": [0, 1, 510, 473], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 18642, "bbox": [0, 1, 510, 499], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 13193, "bbox": [0, 492, 510, 68], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 7797, "bbox": [43, 452, 413, 85], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 2900, "bbox": [0, 524, 309, 31], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1470, "bbox": [229, 452, 34, 71], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1014, "bbox": [3, 487, 41, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00000744", "file_name": "ADE_val_00000744.png", "segments_info": [{"id": 15075081, "category_id": 27, "area": 28161, "bbox": [0, 0, 531, 130], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 28568, "bbox": [0, 35, 531, 81], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 142257, "bbox": [2, 99, 529, 300], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4064, "bbox": [287, 144, 44, 155], "iscrowd": 0}, {"id": 5837968, "category_id": 13, "area": 2839, "bbox": [100, 142, 40, 128], "iscrowd": 0}, {"id": 3807135, "category_id": 13, "area": 3384, "bbox": [5, 134, 55, 138], "iscrowd": 0}, {"id": 4587685, "category_id": 13, "area": 292, "bbox": [95, 77, 12, 39], "iscrowd": 0}, {"id": 4268196, "category_id": 13, "area": 176, "bbox": [162, 78, 9, 28], "iscrowd": 0}, {"id": 5837704, "category_id": 13, "area": 173, "bbox": [460, 97, 16, 30], "iscrowd": 0}, {"id": 2755496, "category_id": 13, "area": 94, "bbox": [474, 113, 12, 17], "iscrowd": 0}, {"id": 2953592, "category_id": 13, "area": 143, "bbox": [239, 36, 8, 29], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 288, "bbox": [178, 34, 15, 27], "iscrowd": 0}, {"id": 11936511, "category_id": 44, "area": 233, "bbox": [378, 72, 11, 59], "iscrowd": 0}]}, {"image_id": "ADE_val_00000745", "file_name": "ADE_val_00000745.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 25569, "bbox": [2, 0, 357, 269], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1860, "bbox": [111, 0, 248, 13], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 11128, "bbox": [276, 23, 82, 140], "iscrowd": 0}, {"id": 16644855, "category_id": 9, "area": 9435, "bbox": [2, 0, 43, 238], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2921, "bbox": [266, 214, 93, 54], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2792, "bbox": [2, 198, 133, 69], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 420, "bbox": [156, 236, 25, 26], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 255, "bbox": [47, 160, 11, 30], "iscrowd": 0}, {"id": 2031388, "category_id": 99, "area": 495, "bbox": [297, 203, 14, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00000746", "file_name": "ADE_val_00000746.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 16538, "bbox": [0, 0, 52, 398], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 32215, "bbox": [105, 277, 419, 122], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 182, "bbox": [136, 0, 48, 8], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 125906, "bbox": [164, 0, 436, 365], "iscrowd": 0}, {"id": 4134911, "category_id": 25, "area": 27373, "bbox": [33, 1, 137, 291], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 3128, "bbox": [97, 232, 67, 65], "iscrowd": 0}, {"id": 1965824, "category_id": 42, "area": 461, "bbox": [433, 191, 44, 13], "iscrowd": 0}, {"id": 2162453, "category_id": 42, "area": 12154, "bbox": [46, 211, 126, 187], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 2927, "bbox": [513, 348, 85, 50], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 1472, "bbox": [526, 160, 30, 59], "iscrowd": 0}, {"id": 65309, "category_id": 99, "area": 366, "bbox": [316, 65, 15, 35], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 1037, "bbox": [446, 71, 44, 34], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 3123, "bbox": [294, 185, 71, 52], "iscrowd": 0}]}, {"image_id": "ADE_val_00000747", "file_name": "ADE_val_00000747.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 60307, "bbox": [2, 1, 497, 325], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21096, "bbox": [2, 246, 497, 129], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 48287, "bbox": [8, 1, 450, 136], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 20774, "bbox": [2, 95, 431, 280], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 2750, "bbox": [84, 122, 283, 60], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3642, "bbox": [280, 219, 46, 135], "iscrowd": 0}, {"id": 2883713, "category_id": 13, "area": 2742, "bbox": [347, 199, 31, 150], "iscrowd": 0}, {"id": 2822028, "category_id": 13, "area": 681, "bbox": [52, 208, 21, 70], "iscrowd": 0}, {"id": 2037927, "category_id": 13, "area": 172, "bbox": [376, 215, 12, 23], "iscrowd": 0}, {"id": 3021205, "category_id": 13, "area": 171, "bbox": [262, 213, 14, 23], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 9275, "bbox": [68, 293, 252, 81], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 1071, "bbox": [320, 280, 36, 56], "iscrowd": 0}, {"id": 16580379, "category_id": 32, "area": 521, "bbox": [64, 251, 36, 28], "iscrowd": 0}, {"id": 14214912, "category_id": 32, "area": 1306, "bbox": [106, 278, 51, 44], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 202, "bbox": [217, 209, 21, 15], "iscrowd": 0}, {"id": 921343, "category_id": 67, "area": 134, "bbox": [135, 209, 18, 11], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 156, "bbox": [356, 64, 12, 32], "iscrowd": 0}, {"id": 48611, "category_id": 83, "area": 214, "bbox": [91, 61, 17, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000748", "file_name": "ADE_val_00000748.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 29737, "bbox": [0, 0, 319, 185], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10488, "bbox": [98, 155, 222, 76], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 3823, "bbox": [0, 184, 165, 48], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3978, "bbox": [157, 48, 78, 98], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 464, "bbox": [104, 115, 42, 35], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 7498, "bbox": [77, 52, 115, 106], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 5490, "bbox": [145, 87, 147, 122], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 802, "bbox": [226, 29, 83, 13], "iscrowd": 0}, {"id": 4003583, "category_id": 25, "area": 647, "bbox": [225, 60, 85, 12], "iscrowd": 0}, {"id": 4260095, "category_id": 25, "area": 576, "bbox": [228, 92, 83, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00000749", "file_name": "ADE_val_00000749.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 64125, "bbox": [44, 1, 431, 543], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4936, "bbox": [41, 633, 386, 49], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2706, "bbox": [238, 519, 50, 112], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 125178, "bbox": [0, 0, 510, 593], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 5628, "bbox": [219, 587, 79, 93], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 23151, "bbox": [180, 102, 181, 155], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2813, "bbox": [421, 604, 55, 77], "iscrowd": 0}, {"id": 5505146, "category_id": 13, "area": 608, "bbox": [357, 613, 14, 67], "iscrowd": 0}, {"id": 5898379, "category_id": 13, "area": 574, "bbox": [176, 615, 15, 63], "iscrowd": 0}, {"id": 5178033, "category_id": 13, "area": 1048, "bbox": [131, 609, 26, 71], "iscrowd": 0}, {"id": 5570702, "category_id": 13, "area": 1658, "bbox": [20, 625, 52, 56], "iscrowd": 0}, {"id": 3276975, "category_id": 13, "area": 994, "bbox": [109, 613, 27, 68], "iscrowd": 0}, {"id": 2424992, "category_id": 13, "area": 1116, "bbox": [394, 622, 25, 59], "iscrowd": 0}, {"id": 2103705, "category_id": 13, "area": 1390, "bbox": [278, 614, 28, 67], "iscrowd": 0}, {"id": 4265596, "category_id": 13, "area": 697, "bbox": [90, 619, 22, 62], "iscrowd": 0}, {"id": 3866799, "category_id": 13, "area": 527, "bbox": [327, 615, 18, 53], "iscrowd": 0}, {"id": 3415676, "category_id": 13, "area": 508, "bbox": [344, 614, 15, 53], "iscrowd": 0}, {"id": 4134294, "category_id": 13, "area": 1096, "bbox": [487, 615, 24, 66], "iscrowd": 0}, {"id": 2689447, "category_id": 13, "area": 392, "bbox": [387, 611, 13, 54], "iscrowd": 0}, {"id": 4852144, "category_id": 13, "area": 776, "bbox": [304, 612, 21, 63], "iscrowd": 0}, {"id": 2752643, "category_id": 13, "area": 760, "bbox": [190, 616, 20, 64], "iscrowd": 0}, {"id": 4456572, "category_id": 13, "area": 484, "bbox": [371, 618, 15, 49], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 3102, "bbox": [199, 493, 122, 27], "iscrowd": 0}, {"id": 474343, "category_id": 39, "area": 28938, "bbox": [2, 74, 201, 467], "iscrowd": 0}, {"id": 13823, "category_id": 39, "area": 28095, "bbox": [321, 85, 189, 456], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 211, "bbox": [57, 92, 16, 16], "iscrowd": 0}, {"id": 40447, "category_id": 83, "area": 122, "bbox": [92, 187, 14, 12], "iscrowd": 0}, {"id": 49151, "category_id": 83, "area": 91, "bbox": [118, 254, 11, 10], "iscrowd": 0}, {"id": 309501, "category_id": 83, "area": 67, "bbox": [137, 304, 10, 8], "iscrowd": 0}, {"id": 37622, "category_id": 83, "area": 137, "bbox": [20, 386, 17, 11], "iscrowd": 0}, {"id": 50943, "category_id": 83, "area": 90, "bbox": [71, 436, 12, 9], "iscrowd": 0}, {"id": 48632, "category_id": 83, "area": 89, "bbox": [105, 470, 11, 10], "iscrowd": 0}, {"id": 42239, "category_id": 83, "area": 31, "bbox": [128, 492, 6, 6], "iscrowd": 0}, {"id": 37887, "category_id": 83, "area": 30, "bbox": [144, 508, 8, 5], "iscrowd": 0}, {"id": 37366, "category_id": 83, "area": 63, "bbox": [151, 341, 9, 9], "iscrowd": 0}, {"id": 1355499, "category_id": 83, "area": 51, "bbox": [162, 370, 9, 7], "iscrowd": 0}, {"id": 1361893, "category_id": 83, "area": 39, "bbox": [172, 395, 7, 7], "iscrowd": 0}, {"id": 45036, "category_id": 83, "area": 27, "bbox": [180, 415, 6, 6], "iscrowd": 0}, {"id": 44770, "category_id": 83, "area": 49, "bbox": [44, 459, 12, 6], "iscrowd": 0}, {"id": 300031, "category_id": 83, "area": 39, "bbox": [79, 485, 10, 5], "iscrowd": 0}, {"id": 637951, "category_id": 83, "area": 28, "bbox": [39, 485, 9, 4], "iscrowd": 0}, {"id": 440550, "category_id": 83, "area": 36, "bbox": [70, 504, 9, 5], "iscrowd": 0}, {"id": 1808639, "category_id": 83, "area": 26, "bbox": [105, 504, 8, 4], "iscrowd": 0}, {"id": 47615, "category_id": 83, "area": 22, "bbox": [94, 518, 7, 4], "iscrowd": 0}, {"id": 1158143, "category_id": 83, "area": 35, "bbox": [435, 481, 9, 5], "iscrowd": 0}, {"id": 900863, "category_id": 83, "area": 31, "bbox": [410, 500, 9, 4], "iscrowd": 0}, {"id": 47074, "category_id": 83, "area": 24, "bbox": [391, 514, 7, 5], "iscrowd": 0}, {"id": 50431, "category_id": 83, "area": 59, "bbox": [468, 454, 13, 5], "iscrowd": 0}, {"id": 46591, "category_id": 83, "area": 161, "bbox": [446, 83, 16, 13], "iscrowd": 0}, {"id": 51710, "category_id": 83, "area": 119, "bbox": [413, 180, 13, 12], "iscrowd": 0}, {"id": 509951, "category_id": 83, "area": 78, "bbox": [388, 248, 12, 9], "iscrowd": 0}, {"id": 1555455, "category_id": 83, "area": 50, "bbox": [371, 300, 10, 7], "iscrowd": 0}, {"id": 46335, "category_id": 83, "area": 80, "bbox": [442, 432, 13, 9], "iscrowd": 0}, {"id": 49891, "category_id": 83, "area": 67, "bbox": [409, 465, 12, 8], "iscrowd": 0}, {"id": 41983, "category_id": 83, "area": 53, "bbox": [388, 487, 9, 8], "iscrowd": 0}, {"id": 47871, "category_id": 83, "area": 10, "bbox": [221, 351, 5, 3], "iscrowd": 0}, {"id": 639477, "category_id": 83, "area": 24, "bbox": [238, 350, 7, 4], "iscrowd": 0}, {"id": 1428479, "category_id": 83, "area": 11, "bbox": [289, 350, 4, 3], "iscrowd": 0}, {"id": 42212, "category_id": 83, "area": 16, "bbox": [306, 349, 6, 3], "iscrowd": 0}, {"id": 43765, "category_id": 83, "area": 22, "bbox": [122, 519, 9, 3], "iscrowd": 0}, {"id": 1877998, "category_id": 83, "area": 24, "bbox": [111, 528, 8, 4], "iscrowd": 0}, {"id": 52208, "category_id": 83, "area": 20, "bbox": [138, 529, 8, 4], "iscrowd": 0}, {"id": 1427427, "category_id": 83, "area": 18, "bbox": [125, 536, 7, 4], "iscrowd": 0}, {"id": 42723, "category_id": 83, "area": 17, "bbox": [150, 537, 6, 4], "iscrowd": 0}, {"id": 47610, "category_id": 83, "area": 25, "bbox": [475, 479, 8, 4], "iscrowd": 0}, {"id": 1095935, "category_id": 83, "area": 31, "bbox": [443, 499, 9, 4], "iscrowd": 0}, {"id": 1873645, "category_id": 83, "area": 28, "bbox": [420, 512, 9, 5], "iscrowd": 0}, {"id": 1742839, "category_id": 83, "area": 19, "bbox": [403, 524, 7, 4], "iscrowd": 0}, {"id": 1094399, "category_id": 83, "area": 25, "bbox": [376, 525, 8, 4], "iscrowd": 0}, {"id": 50175, "category_id": 83, "area": 26, "bbox": [389, 532, 7, 5], "iscrowd": 0}, {"id": 960767, "category_id": 83, "area": 16, "bbox": [364, 535, 6, 3], "iscrowd": 0}]}, {"image_id": "ADE_val_00000750", "file_name": "ADE_val_00000750.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 30368, "bbox": [0, 0, 355, 431], "iscrowd": 0}, {"id": 16745728, "category_id": 146, "area": 1032, "bbox": [85, 52, 38, 155], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2275, "bbox": [2, 106, 34, 67], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 3703, "bbox": [0, 235, 27, 147], "iscrowd": 0}]}, {"image_id": "ADE_val_00000751", "file_name": "ADE_val_00000751.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 81037, "bbox": [0, 0, 479, 408], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7033, "bbox": [0, 455, 479, 152], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 3716, "bbox": [359, 279, 74, 89], "iscrowd": 0}, {"id": 262399, "category_id": 67, "area": 5026, "bbox": [82, 320, 88, 134], "iscrowd": 0}, {"id": 852205, "category_id": 67, "area": 6251, "bbox": [277, 309, 106, 133], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 15427, "bbox": [2, 308, 476, 171], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 1340, "bbox": [324, 411, 22, 80], "iscrowd": 0}, {"id": 11992832, "category_id": 136, "area": 1456, "bbox": [118, 430, 35, 83], "iscrowd": 0}]}, {"image_id": "ADE_val_00000752", "file_name": "ADE_val_00000752.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 71656, "bbox": [76, 54, 506, 239], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 34039, "bbox": [2, 1, 578, 103], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 56718, "bbox": [9, 1, 532, 445], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 6974, "bbox": [2, 328, 142, 126], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 6387, "bbox": [2, 263, 133, 81], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 10900, "bbox": [2, 89, 96, 178], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1810, "bbox": [76, 270, 118, 61], "iscrowd": 0}, {"id": 13917184, "category_id": 21, "area": 7804, "bbox": [102, 284, 240, 69], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2606, "bbox": [395, 306, 53, 69], "iscrowd": 0}]}, {"image_id": "ADE_val_00000753", "file_name": "ADE_val_00000753.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 987, "bbox": [610, 1, 84, 23], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 20147, "bbox": [250, 256, 161, 253], "iscrowd": 0}, {"id": 2693767, "category_id": 13, "area": 2794, "bbox": [179, 246, 60, 95], "iscrowd": 0}, {"id": 4718772, "category_id": 13, "area": 841, "bbox": [190, 162, 37, 59], "iscrowd": 0}, {"id": 5774491, "category_id": 13, "area": 766, "bbox": [489, 172, 35, 55], "iscrowd": 0}, {"id": 4063374, "category_id": 13, "area": 366, "bbox": [495, 130, 20, 41], "iscrowd": 0}, {"id": 2163092, "category_id": 13, "area": 187, "bbox": [486, 60, 21, 28], "iscrowd": 0}, {"id": 3145883, "category_id": 13, "area": 154, "bbox": [496, 95, 21, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00000754", "file_name": "ADE_val_00000754.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 247, "bbox": [0, 206, 12, 24], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 25000, "bbox": [1, 1, 255, 205], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 4637, "bbox": [0, 229, 255, 26], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 33701, "bbox": [11, 40, 244, 197], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 42, "bbox": [132, 227, 4, 17], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 96, "bbox": [98, 208, 8, 33], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 396, "bbox": [9, 230, 36, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00000755", "file_name": "ADE_val_00000755.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 28829, "bbox": [0, 92, 510, 697], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 153112, "bbox": [0, 0, 510, 742], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 57690, "bbox": [1, 603, 509, 184], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 154950, "bbox": [87, 1, 363, 733], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 5340, "bbox": [290, 502, 111, 201], "iscrowd": 0}]}, {"image_id": "ADE_val_00000756", "file_name": "ADE_val_00000756.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 18696, "bbox": [2, 100, 254, 133], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 16723, "bbox": [2, 1, 254, 172], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 997, "bbox": [2, 227, 224, 12], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 21948, "bbox": [17, 10, 219, 191], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 5301, "bbox": [2, 231, 254, 25], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 189, "bbox": [225, 227, 31, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00000757", "file_name": "ADE_val_00000757.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 25001, "bbox": [2, 110, 254, 146], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 20348, "bbox": [2, 1, 254, 255], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 12839, "bbox": [98, 0, 126, 256], "iscrowd": 0}, {"id": 12105983, "category_id": 85, "area": 5492, "bbox": [137, 1, 49, 174], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 540, "bbox": [146, 12, 26, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00000758", "file_name": "ADE_val_00000758.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 11036, "bbox": [2, 150, 254, 106], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 20505, "bbox": [1, 1, 255, 151], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 1459, "bbox": [0, 187, 220, 69], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 31368, "bbox": [1, 5, 255, 244], "iscrowd": 0}]}, {"image_id": "ADE_val_00000759", "file_name": "ADE_val_00000759.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 15382, "bbox": [2, 132, 254, 124], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 37211, "bbox": [1, 1, 255, 230], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1805, "bbox": [2, 219, 241, 37], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 10058, "bbox": [43, 66, 157, 190], "iscrowd": 0}]}, {"image_id": "ADE_val_00000760", "file_name": "ADE_val_00000760.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 22863, "bbox": [0, 110, 256, 146], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 24335, "bbox": [1, 1, 255, 197], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 16715, "bbox": [7, 22, 207, 185], "iscrowd": 0}]}, {"image_id": "ADE_val_00000761", "file_name": "ADE_val_00000761.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 2787, "bbox": [2, 119, 181, 137], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 29056, "bbox": [0, 0, 256, 238], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 14685, "bbox": [46, 117, 210, 139], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 17910, "bbox": [24, 0, 86, 253], "iscrowd": 0}]}, {"image_id": "ADE_val_00000762", "file_name": "ADE_val_00000762.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 26129, "bbox": [2, 55, 254, 201], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 22569, "bbox": [2, 1, 254, 201], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 15438, "bbox": [87, 0, 77, 234], "iscrowd": 0}]}, {"image_id": "ADE_val_00000763", "file_name": "ADE_val_00000763.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 119680, "bbox": [30, 17, 311, 454], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 38686, "bbox": [2, 0, 372, 441], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 25560, "bbox": [0, 386, 373, 112], "iscrowd": 0}]}, {"image_id": "ADE_val_00000764", "file_name": "ADE_val_00000764.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 18174, "bbox": [2, 1, 254, 254], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 45627, "bbox": [2, 1, 254, 255], "iscrowd": 0}]}, {"image_id": "ADE_val_00000765", "file_name": "ADE_val_00000765.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 15346, "bbox": [38, 163, 218, 93], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 24090, "bbox": [45, 1, 211, 245], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 25044, "bbox": [0, 1, 224, 255], "iscrowd": 0}]}, {"image_id": "ADE_val_00000766", "file_name": "ADE_val_00000766.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 41491, "bbox": [2, 10, 254, 246], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 23058, "bbox": [2, 1, 254, 163], "iscrowd": 0}]}, {"image_id": "ADE_val_00000767", "file_name": "ADE_val_00000767.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 31545, "bbox": [107, 1, 149, 255], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 15696, "bbox": [2, 0, 254, 256], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 17327, "bbox": [2, 0, 101, 256], "iscrowd": 0}]}, {"image_id": "ADE_val_00000768", "file_name": "ADE_val_00000768.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 84986, "bbox": [0, 0, 725, 162], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1356, "bbox": [1, 151, 231, 17], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 16474, "bbox": [1, 164, 265, 132], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 570, "bbox": [390, 124, 22, 28], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 415, "bbox": [550, 112, 17, 41], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1455, "bbox": [435, 185, 48, 58], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 3624, "bbox": [0, 155, 94, 56], "iscrowd": 0}, {"id": 62867, "category_id": 77, "area": 1649, "bbox": [86, 172, 53, 42], "iscrowd": 0}, {"id": 1632931, "category_id": 77, "area": 5306, "bbox": [74, 155, 167, 58], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 119, "bbox": [522, 43, 28, 54], "iscrowd": 0}]}, {"image_id": "ADE_val_00000769", "file_name": "ADE_val_00000769.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 20224, "bbox": [2, 1, 254, 106], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7618, "bbox": [2, 0, 253, 170], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 33430, "bbox": [0, 76, 256, 180], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 2977, "bbox": [2, 61, 79, 95], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 99, "bbox": [115, 132, 7, 24], "iscrowd": 0}, {"id": 2359676, "category_id": 13, "area": 40, "bbox": [127, 134, 4, 16], "iscrowd": 0}, {"id": 2359441, "category_id": 13, "area": 71, "bbox": [139, 129, 5, 26], "iscrowd": 0}, {"id": 2031781, "category_id": 13, "area": 182, "bbox": [147, 126, 11, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00000770", "file_name": "ADE_val_00000770.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 61137, "bbox": [154, 111, 484, 367], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 37179, "bbox": [53, 1, 426, 148], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 131974, "bbox": [2, 0, 637, 478], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 71847, "bbox": [199, 150, 440, 328], "iscrowd": 0}]}, {"image_id": "ADE_val_00000771", "file_name": "ADE_val_00000771.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 1875, "bbox": [142, 1, 84, 37], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 3152, "bbox": [236, 0, 124, 45], "iscrowd": 0}, {"id": 65311, "category_id": 52, "area": 47279, "bbox": [0, 0, 359, 270], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 789, "bbox": [268, 164, 29, 59], "iscrowd": 0}, {"id": 2031740, "category_id": 13, "area": 1313, "bbox": [146, 224, 54, 46], "iscrowd": 0}, {"id": 4718762, "category_id": 13, "area": 1231, "bbox": [133, 209, 33, 61], "iscrowd": 0}, {"id": 2955389, "category_id": 13, "area": 1400, "bbox": [73, 223, 58, 46], "iscrowd": 0}, {"id": 2564505, "category_id": 13, "area": 1164, "bbox": [286, 229, 45, 41], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 78, "bbox": [293, 10, 14, 8], "iscrowd": 0}, {"id": 844440, "category_id": 77, "area": 47, "bbox": [299, 20, 15, 5], "iscrowd": 0}]}, {"image_id": "ADE_val_00000772", "file_name": "ADE_val_00000772.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 64447, "bbox": [0, 1, 449, 298], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 19431, "bbox": [50, 1, 395, 82], "iscrowd": 0}, {"id": 16711762, "category_id": 102, "area": 17315, "bbox": [43, 227, 371, 57], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6795, "bbox": [81, 177, 194, 59], "iscrowd": 0}, {"id": 2490528, "category_id": 13, "area": 271, "bbox": [224, 204, 21, 32], "iscrowd": 0}, {"id": 3801219, "category_id": 13, "area": 368, "bbox": [278, 200, 21, 41], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 8437, "bbox": [43, 270, 406, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00000773", "file_name": "ADE_val_00000773.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 32371, "bbox": [0, 166, 459, 313], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 126359, "bbox": [2, 3, 455, 403], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 41058, "bbox": [85, 479, 320, 201], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2302, "bbox": [203, 425, 48, 51], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 210, "bbox": [371, 326, 16, 18], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 11555, "bbox": [367, 194, 92, 238], "iscrowd": 0}, {"id": 17663, "category_id": 39, "area": 35454, "bbox": [0, 396, 176, 285], "iscrowd": 0}, {"id": 13311, "category_id": 39, "area": 36252, "bbox": [278, 395, 180, 285], "iscrowd": 0}, {"id": 545535, "category_id": 39, "area": 9392, "bbox": [0, 232, 85, 203], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 4542, "bbox": [323, 278, 134, 403], "iscrowd": 0}, {"id": 4654591, "category_id": 43, "area": 5281, "bbox": [3, 273, 133, 408], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 156, "bbox": [109, 380, 17, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00000774", "file_name": "ADE_val_00000774.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 34253, "bbox": [0, 18, 255, 223], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12581, "bbox": [0, 173, 255, 82], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6621, "bbox": [0, 0, 255, 108], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 6069, "bbox": [62, 61, 148, 171], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 4753, "bbox": [2, 21, 156, 179], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 258, "bbox": [80, 48, 124, 51], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 97, "bbox": [176, 44, 10, 18], "iscrowd": 0}, {"id": 14946823, "category_id": 135, "area": 37, "bbox": [96, 22, 7, 9], "iscrowd": 0}, {"id": 14889992, "category_id": 135, "area": 37, "bbox": [36, 130, 8, 7], "iscrowd": 0}, {"id": 16723712, "category_id": 135, "area": 37, "bbox": [18, 131, 10, 6], "iscrowd": 0}]}, {"image_id": "ADE_val_00000775", "file_name": "ADE_val_00000775.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21936, "bbox": [0, 0, 256, 203], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9056, "bbox": [0, 189, 167, 66], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3082, "bbox": [0, 14, 81, 93], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 26120, "bbox": [0, 0, 256, 256], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 195, "bbox": [2, 166, 35, 7], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 169, "bbox": [25, 160, 12, 24], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 168, "bbox": [22, 135, 14, 13], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 3824, "bbox": [151, 0, 50, 255], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 28, "bbox": [35, 65, 9, 5], "iscrowd": 0}]}, {"image_id": "ADE_val_00000776", "file_name": "ADE_val_00000776.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 5464, "bbox": [0, 216, 339, 39], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 33759, "bbox": [0, 0, 340, 147], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3614, "bbox": [0, 206, 194, 33], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 3186, "bbox": [163, 219, 176, 36], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 285, "bbox": [194, 216, 37, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000777", "file_name": "ADE_val_00000777.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 122204, "bbox": [1, 1, 682, 329], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 59277, "bbox": [310, 0, 373, 228], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 886, "bbox": [345, 172, 301, 75], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 111472, "bbox": [1, 250, 682, 262], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 19226, "bbox": [0, 250, 452, 115], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3211, "bbox": [443, 250, 48, 135], "iscrowd": 0}, {"id": 4850575, "category_id": 13, "area": 612, "bbox": [317, 244, 21, 53], "iscrowd": 0}, {"id": 4849815, "category_id": 13, "area": 64, "bbox": [312, 243, 6, 18], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 17472, "bbox": [517, 242, 165, 126], "iscrowd": 0}, {"id": 14122496, "category_id": 21, "area": 109, "bbox": [392, 247, 14, 10], "iscrowd": 0}, {"id": 14051584, "category_id": 21, "area": 101, "bbox": [354, 245, 13, 13], "iscrowd": 0}, {"id": 12741120, "category_id": 21, "area": 87, "bbox": [362, 249, 15, 10], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 606, "bbox": [376, 127, 18, 36], "iscrowd": 0}, {"id": 11010303, "category_id": 44, "area": 857, "bbox": [408, 154, 27, 36], "iscrowd": 0}, {"id": 9504255, "category_id": 44, "area": 72, "bbox": [500, 224, 5, 15], "iscrowd": 0}, {"id": 10560511, "category_id": 44, "area": 714, "bbox": [313, 188, 36, 21], "iscrowd": 0}, {"id": 9044212, "category_id": 44, "area": 790, "bbox": [182, 150, 21, 42], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 1722, "bbox": [420, 232, 46, 39], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 157, "bbox": [375, 66, 62, 39], "iscrowd": 0}, {"id": 16735504, "category_id": 88, "area": 110, "bbox": [301, 206, 14, 17], "iscrowd": 0}, {"id": 15476992, "category_id": 88, "area": 3213, "bbox": [134, 75, 29, 270], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 606, "bbox": [368, 102, 6, 157], "iscrowd": 0}, {"id": 16125479, "category_id": 94, "area": 1243, "bbox": [402, 192, 23, 135], "iscrowd": 0}, {"id": 16714779, "category_id": 94, "area": 1730, "bbox": [185, 193, 25, 153], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 55, "bbox": [347, 241, 9, 8], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 618, "bbox": [288, 263, 21, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00000778", "file_name": "ADE_val_00000778.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 132072, "bbox": [2, 1, 766, 418], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 113012, "bbox": [0, 0, 768, 452], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 11763, "bbox": [1, 339, 766, 172], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 75592, "bbox": [1, 303, 767, 197], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2618, "bbox": [95, 277, 34, 129], "iscrowd": 0}, {"id": 2234027, "category_id": 13, "area": 1246, "bbox": [147, 277, 20, 121], "iscrowd": 0}, {"id": 2097298, "category_id": 13, "area": 914, "bbox": [191, 287, 22, 112], "iscrowd": 0}, {"id": 5177487, "category_id": 13, "area": 3135, "bbox": [167, 277, 39, 133], "iscrowd": 0}, {"id": 2097277, "category_id": 13, "area": 2751, "bbox": [208, 280, 35, 128], "iscrowd": 0}, {"id": 5243000, "category_id": 13, "area": 2160, "bbox": [352, 283, 34, 107], "iscrowd": 0}, {"id": 2359468, "category_id": 13, "area": 2099, "bbox": [128, 293, 27, 115], "iscrowd": 0}, {"id": 5573286, "category_id": 13, "area": 442, "bbox": [64, 299, 24, 42], "iscrowd": 0}, {"id": 3154557, "category_id": 13, "area": 491, "bbox": [48, 279, 23, 36], "iscrowd": 0}, {"id": 4063393, "category_id": 13, "area": 251, "bbox": [64, 276, 15, 33], "iscrowd": 0}, {"id": 4915340, "category_id": 13, "area": 274, "bbox": [118, 276, 14, 51], "iscrowd": 0}, {"id": 2359470, "category_id": 13, "area": 304, "bbox": [83, 276, 16, 32], "iscrowd": 0}, {"id": 4391056, "category_id": 13, "area": 890, "bbox": [226, 280, 19, 124], "iscrowd": 0}, {"id": 5374362, "category_id": 13, "area": 116, "bbox": [234, 276, 9, 24], "iscrowd": 0}, {"id": 5832876, "category_id": 13, "area": 126, "bbox": [240, 277, 19, 26], "iscrowd": 0}, {"id": 2033306, "category_id": 13, "area": 116, "bbox": [138, 277, 10, 18], "iscrowd": 0}, {"id": 5775540, "category_id": 13, "area": 2924, "bbox": [486, 288, 42, 122], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 527, "bbox": [46, 323, 31, 38], "iscrowd": 0}, {"id": 403673, "category_id": 20, "area": 49, "bbox": [71, 314, 21, 31], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 3673, "bbox": [231, 174, 62, 76], "iscrowd": 0}, {"id": 9634037, "category_id": 44, "area": 1153, "bbox": [12, 183, 38, 40], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 332, "bbox": [164, 208, 12, 92], "iscrowd": 0}, {"id": 16725504, "category_id": 88, "area": 2860, "bbox": [19, 116, 29, 271], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 1861, "bbox": [455, 340, 55, 65], "iscrowd": 0}, {"id": 456161, "category_id": 128, "area": 1925, "bbox": [519, 339, 60, 68], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 10808, "bbox": [265, 71, 82, 404], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 3773, "bbox": [633, 357, 51, 111], "iscrowd": 0}]}, {"image_id": "ADE_val_00000779", "file_name": "ADE_val_00000779.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 118723, "bbox": [0, 0, 639, 319], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 30761, "bbox": [0, 1, 151, 261], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 44984, "bbox": [395, 22, 243, 258], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 76084, "bbox": [44, 310, 595, 170], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2370, "bbox": [1, 304, 478, 41], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 264, "bbox": [137, 297, 15, 38], "iscrowd": 0}, {"id": 3473567, "category_id": 13, "area": 242, "bbox": [108, 298, 16, 36], "iscrowd": 0}, {"id": 2297752, "category_id": 13, "area": 435, "bbox": [458, 289, 16, 48], "iscrowd": 0}, {"id": 5180333, "category_id": 13, "area": 261, "bbox": [427, 296, 15, 38], "iscrowd": 0}, {"id": 3473550, "category_id": 13, "area": 261, "bbox": [154, 299, 15, 36], "iscrowd": 0}, {"id": 3014779, "category_id": 13, "area": 173, "bbox": [58, 303, 11, 32], "iscrowd": 0}, {"id": 4657532, "category_id": 13, "area": 296, "bbox": [86, 300, 12, 42], "iscrowd": 0}, {"id": 3676295, "category_id": 13, "area": 215, "bbox": [285, 302, 16, 30], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 6619, "bbox": [2, 316, 93, 114], "iscrowd": 0}, {"id": 13199616, "category_id": 21, "area": 6930, "bbox": [2, 366, 108, 114], "iscrowd": 0}, {"id": 14773504, "category_id": 21, "area": 2633, "bbox": [178, 300, 73, 45], "iscrowd": 0}, {"id": 14967821, "category_id": 21, "area": 2321, "bbox": [343, 308, 90, 35], "iscrowd": 0}, {"id": 11757824, "category_id": 21, "area": 6311, "bbox": [473, 301, 165, 55], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 514, "bbox": [261, 271, 27, 21], "iscrowd": 0}, {"id": 3669760, "category_id": 87, "area": 162, "bbox": [261, 246, 23, 9], "iscrowd": 0}, {"id": 2817792, "category_id": 87, "area": 206, "bbox": [296, 275, 24, 15], "iscrowd": 0}, {"id": 5367581, "category_id": 87, "area": 331, "bbox": [358, 239, 28, 14], "iscrowd": 0}, {"id": 5373704, "category_id": 87, "area": 383, "bbox": [358, 273, 28, 16], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 645, "bbox": [338, 199, 23, 120], "iscrowd": 0}, {"id": 16735488, "category_id": 88, "area": 260, "bbox": [186, 247, 15, 55], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 102, "bbox": [208, 266, 6, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00000780", "file_name": "ADE_val_00000780.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3064, "bbox": [549, 331, 134, 26], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 85177, "bbox": [1, 1, 681, 368], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 123004, "bbox": [2, 1, 677, 380], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 80554, "bbox": [0, 376, 683, 136], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 9998, "bbox": [261, 356, 422, 39], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 12347, "bbox": [343, 242, 339, 112], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 1028, "bbox": [107, 297, 320, 28], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2307, "bbox": [280, 305, 50, 52], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 14295, "bbox": [52, 319, 237, 86], "iscrowd": 0}, {"id": 14058496, "category_id": 21, "area": 2682, "bbox": [1, 331, 50, 67], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 1859, "bbox": [1, 311, 63, 54], "iscrowd": 0}, {"id": 21759, "category_id": 39, "area": 3395, "bbox": [101, 289, 178, 56], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 565, "bbox": [520, 285, 17, 43], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1054, "bbox": [181, 192, 26, 126], "iscrowd": 0}]}, {"image_id": "ADE_val_00000781", "file_name": "ADE_val_00000781.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 153076, "bbox": [1, 1, 682, 459], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 24863, "bbox": [142, 1, 209, 204], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 13377, "bbox": [1, 148, 301, 140], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 123, "bbox": [26, 259, 16, 17], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 121356, "bbox": [1, 215, 681, 296], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1825, "bbox": [198, 216, 30, 91], "iscrowd": 0}, {"id": 4267938, "category_id": 13, "area": 2508, "bbox": [235, 218, 36, 104], "iscrowd": 0}, {"id": 3152529, "category_id": 13, "area": 1812, "bbox": [268, 229, 36, 89], "iscrowd": 0}, {"id": 3873163, "category_id": 13, "area": 572, "bbox": [338, 229, 17, 65], "iscrowd": 0}, {"id": 4849787, "category_id": 13, "area": 410, "bbox": [303, 225, 14, 58], "iscrowd": 0}, {"id": 3671704, "category_id": 13, "area": 1505, "bbox": [309, 224, 34, 95], "iscrowd": 0}, {"id": 5114246, "category_id": 13, "area": 209, "bbox": [266, 222, 13, 26], "iscrowd": 0}, {"id": 3211419, "category_id": 13, "area": 3759, "bbox": [398, 225, 63, 133], "iscrowd": 0}, {"id": 2818222, "category_id": 13, "area": 452, "bbox": [369, 221, 22, 49], "iscrowd": 0}, {"id": 5178527, "category_id": 13, "area": 427, "bbox": [356, 221, 15, 46], "iscrowd": 0}, {"id": 3866796, "category_id": 13, "area": 209, "bbox": [368, 223, 11, 37], "iscrowd": 0}, {"id": 4063362, "category_id": 13, "area": 150, "bbox": [334, 221, 21, 26], "iscrowd": 0}, {"id": 2428066, "category_id": 13, "area": 455, "bbox": [392, 223, 19, 53], "iscrowd": 0}, {"id": 4593576, "category_id": 13, "area": 321, "bbox": [288, 220, 17, 41], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 340, "bbox": [21, 223, 17, 35], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 277, "bbox": [238, 153, 17, 17], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 359, "bbox": [213, 207, 31, 17], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 172, "bbox": [81, 133, 32, 87], "iscrowd": 0}, {"id": 14963712, "category_id": 88, "area": 11, "bbox": [307, 194, 10, 2], "iscrowd": 0}, {"id": 16732434, "category_id": 88, "area": 585, "bbox": [188, 49, 60, 170], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 351, "bbox": [20, 214, 31, 21], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 392, "bbox": [313, 239, 22, 38], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 3435, "bbox": [1, 285, 53, 98], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 118, "bbox": [146, 180, 23, 37], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 248, "bbox": [150, 138, 15, 33], "iscrowd": 0}, {"id": 16711765, "category_id": 150, "area": 189, "bbox": [207, 164, 18, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00000782", "file_name": "ADE_val_00000782.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 174726, "bbox": [1, 1, 682, 340], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 39337, "bbox": [3, 1, 284, 380], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 82105, "bbox": [1, 388, 681, 123], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 31904, "bbox": [1, 335, 682, 57], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2718, "bbox": [384, 236, 72, 112], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 10435, "bbox": [225, 83, 240, 47], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 6091, "bbox": [94, 277, 71, 91], "iscrowd": 0}]}, {"image_id": "ADE_val_00000783", "file_name": "ADE_val_00000783.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 81499, "bbox": [1, 0, 682, 234], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 13726, "bbox": [69, 0, 359, 76], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 35610, "bbox": [135, 26, 478, 191], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 161331, "bbox": [0, 231, 683, 281], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 505, "bbox": [202, 221, 59, 12], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 8175, "bbox": [1, 151, 467, 100], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6354, "bbox": [227, 184, 110, 174], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 3267, "bbox": [344, 214, 80, 49], "iscrowd": 0}, {"id": 12807680, "category_id": 21, "area": 1234, "bbox": [118, 216, 53, 44], "iscrowd": 0}, {"id": 12799232, "category_id": 21, "area": 649, "bbox": [305, 210, 35, 25], "iscrowd": 0}, {"id": 12154383, "category_id": 21, "area": 6460, "bbox": [453, 207, 116, 87], "iscrowd": 0}, {"id": 13987345, "category_id": 21, "area": 1306, "bbox": [20, 218, 38, 50], "iscrowd": 0}, {"id": 11626759, "category_id": 21, "area": 426, "bbox": [99, 213, 24, 33], "iscrowd": 0}, {"id": 12212232, "category_id": 21, "area": 11741, "bbox": [524, 215, 159, 101], "iscrowd": 0}, {"id": 13007368, "category_id": 21, "area": 1410, "bbox": [152, 213, 46, 35], "iscrowd": 0}, {"id": 14251264, "category_id": 21, "area": 446, "bbox": [330, 215, 31, 35], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 976, "bbox": [1, 216, 20, 54], "iscrowd": 0}, {"id": 1351423, "category_id": 33, "area": 2198, "bbox": [174, 195, 98, 26], "iscrowd": 0}, {"id": 46847, "category_id": 33, "area": 2416, "bbox": [300, 193, 126, 28], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 182, "bbox": [429, 237, 17, 23], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1963, "bbox": [102, 0, 29, 222], "iscrowd": 0}, {"id": 15205941, "category_id": 94, "area": 1039, "bbox": [361, 37, 11, 176], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 464, "bbox": [129, 239, 21, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00000784", "file_name": "ADE_val_00000784.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 221141, "bbox": [1, 1, 682, 511], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 40023, "bbox": [329, 0, 307, 269], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 36300, "bbox": [378, 301, 305, 211], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 33684, "bbox": [171, 302, 512, 209], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 5462, "bbox": [519, 293, 71, 175], "iscrowd": 0}, {"id": 2624651, "category_id": 13, "area": 145, "bbox": [368, 293, 7, 26], "iscrowd": 0}, {"id": 3608442, "category_id": 13, "area": 193, "bbox": [530, 291, 16, 25], "iscrowd": 0}, {"id": 4653202, "category_id": 13, "area": 199, "bbox": [575, 291, 14, 30], "iscrowd": 0}, {"id": 4849815, "category_id": 13, "area": 254, "bbox": [354, 290, 13, 27], "iscrowd": 0}, {"id": 4592786, "category_id": 13, "area": 134, "bbox": [336, 289, 12, 19], "iscrowd": 0}, {"id": 2563486, "category_id": 13, "area": 121, "bbox": [346, 292, 8, 20], "iscrowd": 0}, {"id": 2752644, "category_id": 13, "area": 160, "bbox": [374, 297, 9, 24], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1653, "bbox": [318, 300, 63, 42], "iscrowd": 0}, {"id": 13857792, "category_id": 21, "area": 693, "bbox": [399, 295, 33, 27], "iscrowd": 0}, {"id": 11888896, "category_id": 21, "area": 1865, "bbox": [446, 299, 57, 43], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 249, "bbox": [374, 282, 17, 24], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 160, "bbox": [468, 233, 18, 65], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 3558, "bbox": [515, 366, 74, 145], "iscrowd": 0}]}, {"image_id": "ADE_val_00000785", "file_name": "ADE_val_00000785.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 200136, "bbox": [0, 0, 767, 385], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 41076, "bbox": [492, 0, 275, 223], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 68430, "bbox": [0, 347, 768, 165], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 27789, "bbox": [1, 353, 767, 159], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3597, "bbox": [393, 344, 142, 33], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 954, "bbox": [269, 46, 42, 39], "iscrowd": 0}, {"id": 15914488, "category_id": 9, "area": 859, "bbox": [194, 27, 47, 28], "iscrowd": 0}, {"id": 15916747, "category_id": 9, "area": 357, "bbox": [315, 76, 28, 23], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1984, "bbox": [1, 315, 38, 107], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 379, "bbox": [245, 341, 20, 28], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2350, "bbox": [651, 347, 64, 52], "iscrowd": 0}, {"id": 14182400, "category_id": 21, "area": 7117, "bbox": [537, 346, 124, 79], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 232, "bbox": [313, 346, 22, 17], "iscrowd": 0}, {"id": 15400734, "category_id": 31, "area": 673, "bbox": [284, 346, 26, 43], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 3615, "bbox": [539, 328, 197, 31], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 322, "bbox": [372, 137, 114, 53], "iscrowd": 0}, {"id": 936959, "category_id": 39, "area": 2157, "bbox": [176, 149, 178, 45], "iscrowd": 0}, {"id": 81136, "category_id": 39, "area": 2504, "bbox": [184, 58, 173, 59], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 690, "bbox": [260, 301, 17, 43], "iscrowd": 0}, {"id": 11477503, "category_id": 44, "area": 380, "bbox": [363, 331, 19, 35], "iscrowd": 0}, {"id": 11017215, "category_id": 44, "area": 100, "bbox": [622, 301, 11, 12], "iscrowd": 0}, {"id": 11143920, "category_id": 44, "area": 30, "bbox": [725, 317, 5, 6], "iscrowd": 0}, {"id": 10488319, "category_id": 44, "area": 213, "bbox": [581, 290, 12, 37], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 781, "bbox": [399, 101, 28, 39], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 72, "bbox": [702, 264, 22, 51], "iscrowd": 0}, {"id": 16725504, "category_id": 88, "area": 248, "bbox": [603, 281, 26, 16], "iscrowd": 0}, {"id": 16526853, "category_id": 88, "area": 1793, "bbox": [272, 160, 23, 232], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 106, "bbox": [742, 333, 12, 13], "iscrowd": 0}, {"id": 15143582, "category_id": 117, "area": 74, "bbox": [736, 330, 7, 16], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 115, "bbox": [664, 309, 24, 5], "iscrowd": 0}, {"id": 851872, "category_id": 124, "area": 121, "bbox": [694, 308, 23, 6], "iscrowd": 0}, {"id": 65411, "category_id": 124, "area": 638, "bbox": [393, 302, 59, 13], "iscrowd": 0}, {"id": 589695, "category_id": 124, "area": 734, "bbox": [177, 288, 54, 17], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 385, "bbox": [507, 368, 33, 15], "iscrowd": 0}, {"id": 16515327, "category_id": 126, "area": 110, "bbox": [494, 370, 11, 14], "iscrowd": 0}, {"id": 15337978, "category_id": 126, "area": 164, "bbox": [482, 371, 14, 15], "iscrowd": 0}, {"id": 16718847, "category_id": 126, "area": 153, "bbox": [471, 372, 12, 15], "iscrowd": 0}, {"id": 16711909, "category_id": 126, "area": 160, "bbox": [458, 373, 13, 16], "iscrowd": 0}, {"id": 16718317, "category_id": 126, "area": 186, "bbox": [447, 373, 13, 17], "iscrowd": 0}, {"id": 16711907, "category_id": 126, "area": 259, "bbox": [430, 375, 17, 18], "iscrowd": 0}, {"id": 15991039, "category_id": 126, "area": 276, "bbox": [412, 376, 18, 18], "iscrowd": 0}, {"id": 16713983, "category_id": 126, "area": 315, "bbox": [392, 377, 22, 19], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 91, "bbox": [633, 304, 7, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00000786", "file_name": "ADE_val_00000786.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 131092, "bbox": [1, 1, 682, 511], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 62828, "bbox": [1, 1, 606, 193], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 38811, "bbox": [395, 50, 218, 353], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 66418, "bbox": [0, 307, 552, 205], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 29703, "bbox": [1, 305, 654, 206], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1119, "bbox": [73, 301, 24, 77], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 5675, "bbox": [204, 310, 123, 67], "iscrowd": 0}, {"id": 14051611, "category_id": 21, "area": 1760, "bbox": [347, 314, 65, 38], "iscrowd": 0}, {"id": 13727001, "category_id": 21, "area": 61, "bbox": [543, 300, 10, 7], "iscrowd": 0}, {"id": 12019971, "category_id": 21, "area": 139, "bbox": [539, 311, 18, 10], "iscrowd": 0}, {"id": 11164928, "category_id": 21, "area": 339, "bbox": [495, 315, 23, 25], "iscrowd": 0}, {"id": 14634764, "category_id": 21, "area": 4732, "bbox": [472, 321, 142, 52], "iscrowd": 0}, {"id": 14117376, "category_id": 21, "area": 69, "bbox": [529, 314, 10, 11], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 215, "bbox": [6, 292, 39, 78], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 41, "bbox": [490, 291, 7, 20], "iscrowd": 0}, {"id": 10094571, "category_id": 44, "area": 132, "bbox": [508, 248, 9, 20], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 85, "bbox": [335, 139, 40, 11], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1021, "bbox": [320, 99, 10, 232], "iscrowd": 0}]}, {"image_id": "ADE_val_00000787", "file_name": "ADE_val_00000787.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 368, "bbox": [243, 294, 80, 20], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 160688, "bbox": [1, 0, 681, 370], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 19178, "bbox": [267, 2, 192, 129], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 39822, "bbox": [5, 76, 676, 311], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 18316, "bbox": [0, 311, 395, 139], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 98739, "bbox": [0, 308, 683, 203], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 194, "bbox": [336, 302, 19, 13], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1738, "bbox": [247, 348, 26, 86], "iscrowd": 0}, {"id": 10092776, "category_id": 44, "area": 338, "bbox": [274, 286, 9, 73], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1197, "bbox": [134, 301, 75, 21], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 470, "bbox": [76, 223, 20, 121], "iscrowd": 0}, {"id": 16727054, "category_id": 88, "area": 2442, "bbox": [279, 121, 47, 276], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 406, "bbox": [466, 300, 12, 39], "iscrowd": 0}]}, {"image_id": "ADE_val_00000788", "file_name": "ADE_val_00000788.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 68486, "bbox": [0, 1, 682, 369], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 145277, "bbox": [0, 0, 618, 303], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5330, "bbox": [16, 173, 619, 210], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 81439, "bbox": [52, 336, 631, 176], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 5699, "bbox": [65, 333, 618, 63], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 995, "bbox": [92, 326, 45, 28], "iscrowd": 0}, {"id": 14319872, "category_id": 21, "area": 3758, "bbox": [184, 327, 101, 50], "iscrowd": 0}, {"id": 14373888, "category_id": 21, "area": 5794, "bbox": [331, 328, 153, 55], "iscrowd": 0}, {"id": 11166731, "category_id": 21, "area": 14535, "bbox": [1, 312, 93, 191], "iscrowd": 0}, {"id": 13918485, "category_id": 21, "area": 389, "bbox": [552, 318, 29, 30], "iscrowd": 0}, {"id": 12152832, "category_id": 21, "area": 3317, "bbox": [460, 319, 116, 45], "iscrowd": 0}, {"id": 13860352, "category_id": 21, "area": 441, "bbox": [429, 320, 46, 15], "iscrowd": 0}, {"id": 14507794, "category_id": 21, "area": 1284, "bbox": [321, 318, 52, 35], "iscrowd": 0}, {"id": 11949568, "category_id": 21, "area": 247, "bbox": [134, 328, 19, 19], "iscrowd": 0}, {"id": 14045721, "category_id": 21, "area": 258, "bbox": [302, 329, 20, 22], "iscrowd": 0}, {"id": 12871424, "category_id": 21, "area": 38, "bbox": [44, 322, 9, 8], "iscrowd": 0}, {"id": 12091136, "category_id": 21, "area": 125, "bbox": [52, 325, 15, 11], "iscrowd": 0}, {"id": 13598987, "category_id": 21, "area": 145, "bbox": [85, 326, 17, 15], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 183, "bbox": [371, 303, 172, 52], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 59, "bbox": [248, 296, 12, 5], "iscrowd": 0}, {"id": 11927796, "category_id": 44, "area": 89, "bbox": [294, 291, 15, 6], "iscrowd": 0}, {"id": 9699580, "category_id": 44, "area": 110, "bbox": [296, 297, 8, 15], "iscrowd": 0}, {"id": 9896191, "category_id": 44, "area": 69, "bbox": [265, 290, 7, 10], "iscrowd": 0}, {"id": 11469311, "category_id": 44, "area": 29, "bbox": [188, 296, 9, 5], "iscrowd": 0}, {"id": 8126719, "category_id": 44, "area": 816, "bbox": [314, 285, 34, 55], "iscrowd": 0}, {"id": 10095615, "category_id": 44, "area": 141, "bbox": [167, 294, 14, 12], "iscrowd": 0}, {"id": 10944767, "category_id": 44, "area": 83, "bbox": [248, 301, 7, 12], "iscrowd": 0}, {"id": 10158317, "category_id": 44, "area": 466, "bbox": [420, 271, 20, 57], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 756, "bbox": [480, 278, 49, 24], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 33, "bbox": [358, 214, 20, 6], "iscrowd": 0}, {"id": 16736539, "category_id": 88, "area": 83, "bbox": [71, 262, 24, 64], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 631, "bbox": [542, 202, 10, 157], "iscrowd": 0}, {"id": 15073304, "category_id": 94, "area": 145, "bbox": [514, 212, 28, 38], "iscrowd": 0}, {"id": 15007777, "category_id": 94, "area": 468, "bbox": [378, 195, 11, 127], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 402, "bbox": [410, 311, 50, 12], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 609, "bbox": [495, 252, 34, 21], "iscrowd": 0}, {"id": 1896312, "category_id": 124, "area": 636, "bbox": [550, 258, 29, 25], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 274, "bbox": [203, 233, 9, 38], "iscrowd": 0}]}, {"image_id": "ADE_val_00000789", "file_name": "ADE_val_00000789.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18498, "bbox": [0, 225, 558, 51], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 83876, "bbox": [0, 0, 682, 329], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 71923, "bbox": [1, 0, 500, 330], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 29678, "bbox": [2, 284, 431, 197], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 115818, "bbox": [1, 271, 681, 238], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2560, "bbox": [555, 214, 42, 110], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 4074, "bbox": [240, 245, 85, 57], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 177, "bbox": [451, 227, 19, 19], "iscrowd": 0}, {"id": 8783090, "category_id": 44, "area": 361, "bbox": [24, 210, 13, 86], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 317, "bbox": [546, 207, 6, 79], "iscrowd": 0}, {"id": 14942251, "category_id": 94, "area": 438, "bbox": [76, 154, 14, 138], "iscrowd": 0}, {"id": 16711742, "category_id": 94, "area": 970, "bbox": [543, 122, 38, 154], "iscrowd": 0}, {"id": 16716055, "category_id": 94, "area": 3042, "bbox": [650, 269, 27, 125], "iscrowd": 0}, {"id": 16712780, "category_id": 94, "area": 4449, "bbox": [205, 0, 36, 350], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 2757, "bbox": [598, 264, 55, 65], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 1150, "bbox": [2, 251, 44, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00000790", "file_name": "ADE_val_00000790.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 257364, "bbox": [1, 0, 682, 474], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 8325, "bbox": [0, 0, 112, 122], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 54724, "bbox": [0, 285, 497, 227], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 21189, "bbox": [97, 329, 586, 183], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 243, "bbox": [22, 280, 14, 33], "iscrowd": 0}, {"id": 3088558, "category_id": 13, "area": 94, "bbox": [43, 285, 15, 22], "iscrowd": 0}, {"id": 4464526, "category_id": 13, "area": 441, "bbox": [46, 290, 15, 47], "iscrowd": 0}, {"id": 2368153, "category_id": 13, "area": 46, "bbox": [12, 270, 5, 19], "iscrowd": 0}, {"id": 5904808, "category_id": 13, "area": 73, "bbox": [14, 273, 6, 19], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1347, "bbox": [1, 276, 16, 97], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1262, "bbox": [204, 142, 44, 35], "iscrowd": 0}, {"id": 8984319, "category_id": 44, "area": 454, "bbox": [55, 192, 14, 40], "iscrowd": 0}, {"id": 10815999, "category_id": 44, "area": 188, "bbox": [134, 257, 7, 81], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 74, "bbox": [70, 220, 8, 15], "iscrowd": 0}, {"id": 16528396, "category_id": 88, "area": 471, "bbox": [188, 166, 32, 39], "iscrowd": 0}, {"id": 15098132, "category_id": 88, "area": 182, "bbox": [125, 212, 22, 24], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 1326, "bbox": [202, 220, 73, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00000791", "file_name": "ADE_val_00000791.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 31420, "bbox": [0, 150, 683, 177], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 141303, "bbox": [0, 0, 683, 263], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 38696, "bbox": [0, 105, 510, 242], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 100673, "bbox": [0, 320, 683, 192], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 1050, "bbox": [61, 325, 257, 13], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 10361, "bbox": [0, 320, 683, 66], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 11669, "bbox": [214, 319, 469, 47], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2477, "bbox": [5, 306, 577, 29], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1154, "bbox": [321, 174, 109, 36], "iscrowd": 0}, {"id": 15788520, "category_id": 9, "area": 914, "bbox": [323, 206, 108, 30], "iscrowd": 0}, {"id": 13368317, "category_id": 9, "area": 988, "bbox": [332, 239, 99, 23], "iscrowd": 0}, {"id": 16704229, "category_id": 9, "area": 871, "bbox": [330, 270, 102, 18], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 66, "bbox": [448, 317, 9, 13], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 354, "bbox": [345, 319, 31, 14], "iscrowd": 0}, {"id": 15032576, "category_id": 21, "area": 1133, "bbox": [606, 305, 51, 31], "iscrowd": 0}, {"id": 12287761, "category_id": 21, "area": 386, "bbox": [424, 316, 38, 17], "iscrowd": 0}, {"id": 13926680, "category_id": 21, "area": 163, "bbox": [494, 313, 21, 11], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 670, "bbox": [90, 319, 44, 16], "iscrowd": 0}, {"id": 9114879, "category_id": 44, "area": 281, "bbox": [171, 289, 15, 66], "iscrowd": 0}, {"id": 9176319, "category_id": 44, "area": 156, "bbox": [387, 283, 12, 71], "iscrowd": 0}, {"id": 11337966, "category_id": 44, "area": 228, "bbox": [226, 308, 9, 41], "iscrowd": 0}, {"id": 9373930, "category_id": 44, "area": 349, "bbox": [368, 300, 18, 56], "iscrowd": 0}, {"id": 10159871, "category_id": 44, "area": 19, "bbox": [419, 307, 4, 11], "iscrowd": 0}, {"id": 11796712, "category_id": 44, "area": 114, "bbox": [170, 281, 18, 8], "iscrowd": 0}, {"id": 11731199, "category_id": 44, "area": 323, "bbox": [338, 277, 11, 88], "iscrowd": 0}, {"id": 8192255, "category_id": 44, "area": 116, "bbox": [472, 304, 7, 28], "iscrowd": 0}, {"id": 10752255, "category_id": 44, "area": 83, "bbox": [511, 300, 7, 20], "iscrowd": 0}, {"id": 11862271, "category_id": 44, "area": 67, "bbox": [578, 304, 8, 19], "iscrowd": 0}, {"id": 9699559, "category_id": 44, "area": 33, "bbox": [492, 308, 5, 7], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 32, "bbox": [585, 221, 20, 30], "iscrowd": 0}, {"id": 15939350, "category_id": 88, "area": 192, "bbox": [368, 132, 35, 163], "iscrowd": 0}, {"id": 16728581, "category_id": 88, "area": 198, "bbox": [350, 223, 13, 96], "iscrowd": 0}, {"id": 15554071, "category_id": 88, "area": 135, "bbox": [464, 245, 11, 78], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 50, "bbox": [20, 325, 6, 9], "iscrowd": 0}, {"id": 16719602, "category_id": 126, "area": 144, "bbox": [0, 325, 19, 9], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 105, "bbox": [453, 315, 41, 6], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 73, "bbox": [564, 268, 4, 41], "iscrowd": 0}]}, {"image_id": "ADE_val_00000792", "file_name": "ADE_val_00000792.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1286, "bbox": [619, 328, 63, 47], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 20370, "bbox": [155, 223, 351, 149], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 95496, "bbox": [141, 1, 542, 251], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 114814, "bbox": [1, 1, 681, 391], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 25134, "bbox": [295, 383, 388, 128], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 2582, "bbox": [1, 363, 199, 62], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 48293, "bbox": [1, 335, 681, 176], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 7017, "bbox": [17, 347, 611, 74], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 212, "bbox": [161, 365, 11, 33], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 153, "bbox": [420, 355, 21, 15], "iscrowd": 0}, {"id": 11755776, "category_id": 21, "area": 1135, "bbox": [437, 353, 53, 29], "iscrowd": 0}, {"id": 15099664, "category_id": 21, "area": 2875, "bbox": [484, 346, 101, 41], "iscrowd": 0}, {"id": 14700318, "category_id": 21, "area": 692, "bbox": [204, 368, 42, 33], "iscrowd": 0}, {"id": 13271296, "category_id": 21, "area": 368, "bbox": [227, 373, 21, 30], "iscrowd": 0}, {"id": 12933376, "category_id": 21, "area": 1223, "bbox": [239, 366, 40, 42], "iscrowd": 0}, {"id": 13782044, "category_id": 21, "area": 7230, "bbox": [324, 353, 148, 76], "iscrowd": 0}, {"id": 12872216, "category_id": 21, "area": 23, "bbox": [168, 346, 5, 6], "iscrowd": 0}, {"id": 11961088, "category_id": 21, "area": 78, "bbox": [188, 362, 13, 9], "iscrowd": 0}, {"id": 13400323, "category_id": 21, "area": 74, "bbox": [153, 376, 9, 9], "iscrowd": 0}, {"id": 13264904, "category_id": 21, "area": 79, "bbox": [168, 379, 9, 12], "iscrowd": 0}, {"id": 13856020, "category_id": 21, "area": 135, "bbox": [175, 373, 18, 18], "iscrowd": 0}, {"id": 11946496, "category_id": 21, "area": 66, "bbox": [182, 377, 8, 16], "iscrowd": 0}, {"id": 11294232, "category_id": 21, "area": 84, "bbox": [187, 375, 13, 17], "iscrowd": 0}, {"id": 13324811, "category_id": 21, "area": 180, "bbox": [191, 375, 14, 21], "iscrowd": 0}, {"id": 14121984, "category_id": 21, "area": 39, "bbox": [175, 352, 7, 8], "iscrowd": 0}, {"id": 11891968, "category_id": 21, "area": 42, "bbox": [179, 356, 9, 7], "iscrowd": 0}, {"id": 13467142, "category_id": 21, "area": 46, "bbox": [183, 359, 9, 8], "iscrowd": 0}, {"id": 12997632, "category_id": 21, "area": 47, "bbox": [149, 365, 7, 8], "iscrowd": 0}, {"id": 13392138, "category_id": 21, "area": 21, "bbox": [163, 340, 5, 5], "iscrowd": 0}, {"id": 13658880, "category_id": 21, "area": 26, "bbox": [146, 361, 7, 4], "iscrowd": 0}, {"id": 12937472, "category_id": 21, "area": 3227, "bbox": [276, 350, 76, 65], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2595, "bbox": [355, 234, 49, 199], "iscrowd": 0}, {"id": 11141375, "category_id": 44, "area": 466, "bbox": [280, 284, 19, 131], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 5260, "bbox": [593, 14, 81, 366], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 833, "bbox": [653, 344, 24, 38], "iscrowd": 0}]}, {"image_id": "ADE_val_00000793", "file_name": "ADE_val_00000793.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 241616, "bbox": [2, 1, 679, 422], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 23934, "bbox": [2, 378, 478, 134], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2375, "bbox": [450, 415, 87, 47], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 508, "bbox": [330, 324, 24, 34], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 37087, "bbox": [88, 348, 376, 152], "iscrowd": 0}, {"id": 13587721, "category_id": 21, "area": 7870, "bbox": [2, 342, 171, 88], "iscrowd": 0}, {"id": 13200896, "category_id": 21, "area": 24149, "bbox": [446, 345, 236, 167], "iscrowd": 0}, {"id": 12549657, "category_id": 21, "area": 1335, "bbox": [1, 329, 46, 48], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1603, "bbox": [506, 264, 40, 52], "iscrowd": 0}, {"id": 9176831, "category_id": 44, "area": 338, "bbox": [33, 276, 9, 66], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 875, "bbox": [110, 109, 33, 48], "iscrowd": 0}, {"id": 16726024, "category_id": 88, "area": 1287, "bbox": [376, 1, 35, 43], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 1454, "bbox": [212, 41, 30, 156], "iscrowd": 0}]}, {"image_id": "ADE_val_00000794", "file_name": "ADE_val_00000794.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 243648, "bbox": [1, 1, 682, 434], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 45698, "bbox": [1, 387, 595, 125], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 18167, "bbox": [1, 348, 681, 129], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2004, "bbox": [329, 302, 40, 98], "iscrowd": 0}, {"id": 5771665, "category_id": 13, "area": 1852, "bbox": [281, 314, 29, 103], "iscrowd": 0}, {"id": 5245620, "category_id": 13, "area": 1084, "bbox": [517, 305, 31, 73], "iscrowd": 0}, {"id": 5251735, "category_id": 13, "area": 1099, "bbox": [555, 305, 30, 73], "iscrowd": 0}, {"id": 5636265, "category_id": 13, "area": 448, "bbox": [657, 293, 15, 49], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 238, "bbox": [649, 247, 16, 15], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1229, "bbox": [361, 120, 54, 80], "iscrowd": 0}, {"id": 15937280, "category_id": 88, "area": 592, "bbox": [609, 179, 43, 48], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 3224, "bbox": [194, 200, 116, 42], "iscrowd": 0}, {"id": 65440, "category_id": 124, "area": 730, "bbox": [488, 227, 40, 24], "iscrowd": 0}, {"id": 65386, "category_id": 124, "area": 1757, "bbox": [350, 208, 58, 33], "iscrowd": 0}, {"id": 1833608, "category_id": 124, "area": 662, "bbox": [540, 244, 44, 18], "iscrowd": 0}, {"id": 65403, "category_id": 124, "area": 9100, "bbox": [120, 103, 243, 88], "iscrowd": 0}]}, {"image_id": "ADE_val_00000795", "file_name": "ADE_val_00000795.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 165587, "bbox": [2, 2, 638, 315], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6130, "bbox": [3, 78, 114, 146], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 91093, "bbox": [2, 331, 638, 149], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2938, "bbox": [21, 315, 334, 20], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 5558, "bbox": [65, 286, 160, 51], "iscrowd": 0}, {"id": 12083466, "category_id": 21, "area": 6406, "bbox": [350, 286, 171, 54], "iscrowd": 0}, {"id": 13391872, "category_id": 21, "area": 6438, "bbox": [519, 273, 121, 85], "iscrowd": 0}, {"id": 14188800, "category_id": 21, "area": 1867, "bbox": [2, 274, 42, 56], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 3944, "bbox": [5, 201, 169, 26], "iscrowd": 0}, {"id": 3276544, "category_id": 87, "area": 3735, "bbox": [507, 188, 132, 30], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 5265, "bbox": [254, 153, 153, 45], "iscrowd": 0}, {"id": 61041, "category_id": 124, "area": 2733, "bbox": [252, 197, 167, 19], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 247, "bbox": [235, 293, 14, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00000796", "file_name": "ADE_val_00000796.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 34802, "bbox": [247, 253, 436, 146], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 188612, "bbox": [2, 1, 680, 439], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 22813, "bbox": [2, 381, 681, 131], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 37018, "bbox": [2, 366, 681, 125], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 3117, "bbox": [2, 341, 247, 42], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2051, "bbox": [55, 320, 63, 125], "iscrowd": 0}, {"id": 5570719, "category_id": 13, "area": 2520, "bbox": [73, 329, 40, 117], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 6746, "bbox": [26, 270, 114, 88], "iscrowd": 0}, {"id": 11337983, "category_id": 44, "area": 1347, "bbox": [159, 226, 13, 246], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 1196, "bbox": [2, 382, 73, 47], "iscrowd": 0}, {"id": 1638358, "category_id": 70, "area": 3501, "bbox": [260, 381, 130, 58], "iscrowd": 0}, {"id": 1634241, "category_id": 70, "area": 792, "bbox": [531, 376, 50, 71], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 822, "bbox": [38, 357, 10, 83], "iscrowd": 0}, {"id": 16716873, "category_id": 94, "area": 891, "bbox": [126, 353, 11, 89], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 1708, "bbox": [172, 364, 47, 46], "iscrowd": 0}, {"id": 64511, "category_id": 128, "area": 1430, "bbox": [267, 401, 94, 33], "iscrowd": 0}, {"id": 65508, "category_id": 128, "area": 6181, "bbox": [492, 370, 126, 78], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 7218, "bbox": [68, 117, 62, 355], "iscrowd": 0}]}, {"image_id": "ADE_val_00000797", "file_name": "ADE_val_00000797.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 181224, "bbox": [1, 1, 682, 358], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 20225, "bbox": [275, 1, 408, 84], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 24990, "bbox": [94, 112, 421, 241], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 92908, "bbox": [1, 331, 682, 181], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 11964, "bbox": [1, 338, 436, 58], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2712, "bbox": [600, 447, 83, 65], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1078, "bbox": [513, 319, 83, 17], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 3453, "bbox": [438, 319, 99, 47], "iscrowd": 0}, {"id": 11764746, "category_id": 21, "area": 1171, "bbox": [599, 310, 59, 25], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 196, "bbox": [276, 266, 12, 18], "iscrowd": 0}, {"id": 9306346, "category_id": 44, "area": 160, "bbox": [603, 281, 14, 14], "iscrowd": 0}, {"id": 8920831, "category_id": 44, "area": 31, "bbox": [597, 300, 10, 4], "iscrowd": 0}, {"id": 11410935, "category_id": 44, "area": 30, "bbox": [447, 297, 3, 10], "iscrowd": 0}, {"id": 10291444, "category_id": 44, "area": 55, "bbox": [420, 296, 5, 11], "iscrowd": 0}, {"id": 8067575, "category_id": 44, "area": 55, "bbox": [392, 296, 5, 11], "iscrowd": 0}, {"id": 11997695, "category_id": 44, "area": 72, "bbox": [366, 296, 6, 12], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 411, "bbox": [571, 227, 12, 93], "iscrowd": 0}]}, {"image_id": "ADE_val_00000798", "file_name": "ADE_val_00000798.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1384, "bbox": [130, 476, 215, 29], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 260702, "bbox": [0, 0, 682, 488], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 26784, "bbox": [420, 1, 262, 274], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5353, "bbox": [628, 275, 55, 128], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 2514, "bbox": [509, 483, 173, 28], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 15853, "bbox": [0, 457, 682, 54], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 520, "bbox": [667, 426, 16, 48], "iscrowd": 0}, {"id": 4391058, "category_id": 13, "area": 2265, "bbox": [6, 416, 47, 95], "iscrowd": 0}, {"id": 2293883, "category_id": 13, "area": 1204, "bbox": [92, 408, 35, 77], "iscrowd": 0}, {"id": 2953620, "category_id": 13, "area": 464, "bbox": [645, 419, 17, 53], "iscrowd": 0}, {"id": 4259999, "category_id": 13, "area": 513, "bbox": [635, 424, 18, 56], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1769, "bbox": [37, 390, 40, 73], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 624, "bbox": [630, 318, 26, 38], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 9302, "bbox": [370, 427, 265, 59], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1661, "bbox": [579, 40, 103, 50], "iscrowd": 0}, {"id": 16726528, "category_id": 88, "area": 2228, "bbox": [490, 261, 33, 237], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 3439, "bbox": [8, 352, 106, 42], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 1724, "bbox": [506, 193, 44, 65], "iscrowd": 0}, {"id": 16518520, "category_id": 150, "area": 403, "bbox": [517, 255, 29, 20], "iscrowd": 0}, {"id": 15599981, "category_id": 150, "area": 762, "bbox": [473, 205, 33, 55], "iscrowd": 0}]}, {"image_id": "ADE_val_00000799", "file_name": "ADE_val_00000799.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 150083, "bbox": [1, 1, 682, 345], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 63142, "bbox": [1, 1, 682, 293], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1163, "bbox": [447, 261, 50, 47], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 109216, "bbox": [1, 307, 682, 205], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2975, "bbox": [238, 313, 445, 43], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 93, "bbox": [389, 313, 7, 18], "iscrowd": 0}, {"id": 3868588, "category_id": 13, "area": 12, "bbox": [425, 312, 4, 6], "iscrowd": 0}, {"id": 5374100, "category_id": 13, "area": 107, "bbox": [338, 317, 7, 23], "iscrowd": 0}, {"id": 2228402, "category_id": 13, "area": 139, "bbox": [327, 314, 10, 26], "iscrowd": 0}, {"id": 5636218, "category_id": 13, "area": 127, "bbox": [245, 313, 5, 31], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 5651, "bbox": [445, 308, 133, 58], "iscrowd": 0}, {"id": 12616448, "category_id": 21, "area": 364, "bbox": [431, 320, 19, 31], "iscrowd": 0}, {"id": 13132032, "category_id": 21, "area": 187, "bbox": [558, 317, 18, 14], "iscrowd": 0}, {"id": 14703112, "category_id": 21, "area": 157, "bbox": [534, 315, 24, 11], "iscrowd": 0}, {"id": 12878356, "category_id": 21, "area": 221, "bbox": [591, 315, 18, 15], "iscrowd": 0}, {"id": 14515204, "category_id": 21, "area": 72, "bbox": [584, 316, 9, 11], "iscrowd": 0}, {"id": 14910208, "category_id": 21, "area": 49, "bbox": [562, 309, 8, 7], "iscrowd": 0}, {"id": 14054144, "category_id": 21, "area": 108, "bbox": [563, 313, 23, 9], "iscrowd": 0}, {"id": 15104259, "category_id": 21, "area": 32, "bbox": [553, 315, 6, 9], "iscrowd": 0}, {"id": 13979904, "category_id": 21, "area": 7224, "bbox": [103, 307, 144, 69], "iscrowd": 0}, {"id": 14645760, "category_id": 21, "area": 402, "bbox": [422, 312, 31, 27], "iscrowd": 0}, {"id": 11367707, "category_id": 21, "area": 26, "bbox": [565, 307, 7, 7], "iscrowd": 0}, {"id": 14318592, "category_id": 21, "area": 56, "bbox": [578, 307, 10, 7], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 89, "bbox": [86, 321, 9, 11], "iscrowd": 0}, {"id": 10558463, "category_id": 44, "area": 79, "bbox": [315, 194, 9, 12], "iscrowd": 0}, {"id": 8654577, "category_id": 44, "area": 133, "bbox": [256, 290, 11, 13], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 79, "bbox": [425, 281, 6, 33], "iscrowd": 0}, {"id": 15422464, "category_id": 88, "area": 88, "bbox": [345, 266, 8, 28], "iscrowd": 0}, {"id": 16722432, "category_id": 88, "area": 65, "bbox": [361, 269, 8, 30], "iscrowd": 0}, {"id": 16409600, "category_id": 88, "area": 54, "bbox": [374, 272, 8, 23], "iscrowd": 0}, {"id": 15621658, "category_id": 88, "area": 56, "bbox": [387, 275, 6, 20], "iscrowd": 0}, {"id": 16736789, "category_id": 88, "area": 150, "bbox": [457, 252, 20, 59], "iscrowd": 0}, {"id": 16661248, "category_id": 88, "area": 114, "bbox": [462, 258, 9, 51], "iscrowd": 0}, {"id": 16735249, "category_id": 88, "area": 152, "bbox": [641, 158, 42, 10], "iscrowd": 0}, {"id": 15554048, "category_id": 88, "area": 34, "bbox": [625, 266, 8, 29], "iscrowd": 0}, {"id": 15019008, "category_id": 88, "area": 74, "bbox": [608, 254, 12, 51], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 112, "bbox": [251, 291, 3, 60], "iscrowd": 0}, {"id": 16711961, "category_id": 94, "area": 12, "bbox": [90, 332, 1, 12], "iscrowd": 0}, {"id": 16711739, "category_id": 94, "area": 191, "bbox": [256, 286, 11, 63], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 112, "bbox": [534, 309, 20, 9], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 2177, "bbox": [1, 61, 572, 173], "iscrowd": 0}, {"id": 16711713, "category_id": 137, "area": 939, "bbox": [548, 194, 135, 42], "iscrowd": 0}, {"id": 15007793, "category_id": 137, "area": 192, "bbox": [256, 265, 11, 84], "iscrowd": 0}, {"id": 16060946, "category_id": 137, "area": 241, "bbox": [563, 278, 56, 39], "iscrowd": 0}, {"id": 16711735, "category_id": 137, "area": 113, "bbox": [487, 282, 49, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00000800", "file_name": "ADE_val_00000800.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 191063, "bbox": [0, 3, 683, 471], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 8127, "bbox": [0, 0, 84, 232], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 35976, "bbox": [7, 2, 297, 287], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 85221, "bbox": [1, 295, 681, 217], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 14800, "bbox": [1, 253, 106, 259], "iscrowd": 0}, {"id": 3539088, "category_id": 13, "area": 1964, "bbox": [107, 273, 39, 99], "iscrowd": 0}, {"id": 3999392, "category_id": 13, "area": 1393, "bbox": [208, 274, 31, 75], "iscrowd": 0}, {"id": 3480217, "category_id": 13, "area": 708, "bbox": [175, 277, 19, 59], "iscrowd": 0}, {"id": 4851078, "category_id": 13, "area": 284, "bbox": [160, 281, 13, 44], "iscrowd": 0}, {"id": 4596618, "category_id": 13, "area": 120, "bbox": [232, 281, 11, 26], "iscrowd": 0}, {"id": 3539070, "category_id": 13, "area": 487, "bbox": [197, 277, 18, 53], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 320, "bbox": [1, 279, 16, 34], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 290, "bbox": [409, 66, 30, 14], "iscrowd": 0}, {"id": 1098216, "category_id": 83, "area": 103, "bbox": [290, 191, 16, 9], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 974, "bbox": [275, 306, 38, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00000801", "file_name": "ADE_val_00000801.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 196189, "bbox": [1, 0, 682, 320], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 107288, "bbox": [1, 322, 682, 190], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 9112, "bbox": [1, 311, 682, 60], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 484, "bbox": [163, 276, 18, 43], "iscrowd": 0}, {"id": 4396954, "category_id": 13, "area": 321, "bbox": [184, 273, 14, 36], "iscrowd": 0}, {"id": 5641876, "category_id": 13, "area": 225, "bbox": [652, 279, 11, 35], "iscrowd": 0}, {"id": 4063363, "category_id": 13, "area": 246, "bbox": [670, 283, 12, 34], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2832, "bbox": [637, 329, 46, 79], "iscrowd": 0}, {"id": 11620613, "category_id": 21, "area": 13565, "bbox": [156, 273, 211, 92], "iscrowd": 0}, {"id": 13072150, "category_id": 21, "area": 9259, "bbox": [472, 274, 153, 81], "iscrowd": 0}, {"id": 12477203, "category_id": 21, "area": 6388, "bbox": [364, 279, 146, 69], "iscrowd": 0}, {"id": 12540688, "category_id": 21, "area": 323, "bbox": [625, 298, 13, 33], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1400, "bbox": [304, 150, 68, 30], "iscrowd": 0}, {"id": 11469034, "category_id": 44, "area": 403, "bbox": [190, 239, 34, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00000802", "file_name": "ADE_val_00000802.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 2511, "bbox": [122, 376, 561, 25], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 84945, "bbox": [0, 153, 683, 242], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 164803, "bbox": [0, 0, 683, 365], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1169, "bbox": [119, 331, 73, 51], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 71900, "bbox": [0, 385, 683, 127], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 6825, "bbox": [0, 381, 683, 72], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 21, "bbox": [136, 377, 2, 11], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 21, "bbox": [219, 382, 6, 5], "iscrowd": 0}, {"id": 13336320, "category_id": 21, "area": 17, "bbox": [224, 381, 7, 3], "iscrowd": 0}, {"id": 14708480, "category_id": 21, "area": 11, "bbox": [231, 381, 3, 4], "iscrowd": 0}, {"id": 13074183, "category_id": 21, "area": 10, "bbox": [189, 378, 4, 4], "iscrowd": 0}, {"id": 12209694, "category_id": 21, "area": 104, "bbox": [180, 382, 11, 15], "iscrowd": 0}, {"id": 11624728, "category_id": 21, "area": 777, "bbox": [186, 375, 34, 28], "iscrowd": 0}, {"id": 11622679, "category_id": 21, "area": 159, "bbox": [105, 378, 18, 11], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 479, "bbox": [0, 374, 36, 14], "iscrowd": 0}, {"id": 40959, "category_id": 33, "area": 4657, "bbox": [486, 366, 197, 28], "iscrowd": 0}, {"id": 444415, "category_id": 33, "area": 154, "bbox": [153, 377, 29, 8], "iscrowd": 0}, {"id": 45821, "category_id": 33, "area": 1797, "bbox": [245, 374, 116, 20], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 75, "bbox": [139, 377, 14, 8], "iscrowd": 0}, {"id": 1460735, "category_id": 39, "area": 107, "bbox": [113, 376, 21, 8], "iscrowd": 0}, {"id": 14335, "category_id": 39, "area": 2322, "bbox": [361, 371, 126, 24], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 8, "bbox": [243, 378, 3, 3], "iscrowd": 0}, {"id": 11603966, "category_id": 44, "area": 22, "bbox": [242, 373, 6, 4], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 12, "bbox": [176, 348, 6, 39], "iscrowd": 0}, {"id": 15226624, "category_id": 88, "area": 1084, "bbox": [71, 179, 56, 235], "iscrowd": 0}, {"id": 15351040, "category_id": 88, "area": 72, "bbox": [112, 317, 13, 46], "iscrowd": 0}, {"id": 16728320, "category_id": 88, "area": 44, "bbox": [239, 345, 4, 43], "iscrowd": 0}, {"id": 15350022, "category_id": 88, "area": 156, "bbox": [0, 315, 53, 13], "iscrowd": 0}, {"id": 16737302, "category_id": 88, "area": 19, "bbox": [151, 336, 9, 45], "iscrowd": 0}, {"id": 16526080, "category_id": 88, "area": 386, "bbox": [375, 228, 13, 174], "iscrowd": 0}, {"id": 14822912, "category_id": 88, "area": 197, "bbox": [225, 288, 13, 109], "iscrowd": 0}, {"id": 15877910, "category_id": 88, "area": 68, "bbox": [231, 328, 8, 62], "iscrowd": 0}, {"id": 16731158, "category_id": 88, "area": 14, "bbox": [191, 355, 5, 19], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 311, "bbox": [390, 395, 52, 7], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 547, "bbox": [401, 309, 58, 13], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 147, "bbox": [108, 354, 11, 44], "iscrowd": 0}, {"id": 16715535, "category_id": 137, "area": 70, "bbox": [246, 359, 5, 40], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 21, "bbox": [246, 340, 2, 12], "iscrowd": 0}, {"id": 16384075, "category_id": 150, "area": 15, "bbox": [248, 334, 1, 15], "iscrowd": 0}, {"id": 15601778, "category_id": 150, "area": 8, "bbox": [250, 346, 1, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00000803", "file_name": "ADE_val_00000803.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6284, "bbox": [39, 379, 562, 45], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 37984, "bbox": [549, 2, 133, 447], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 170900, "bbox": [0, 1, 594, 356], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 33771, "bbox": [2, 255, 569, 169], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 47996, "bbox": [0, 398, 606, 113], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 12246, "bbox": [434, 431, 248, 79], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1893, "bbox": [35, 355, 117, 48], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 460, "bbox": [516, 384, 18, 42], "iscrowd": 0}, {"id": 4855732, "category_id": 13, "area": 550, "bbox": [546, 378, 21, 47], "iscrowd": 0}, {"id": 4133521, "category_id": 13, "area": 139, "bbox": [360, 386, 9, 23], "iscrowd": 0}, {"id": 5245096, "category_id": 13, "area": 96, "bbox": [372, 388, 8, 20], "iscrowd": 0}, {"id": 3344278, "category_id": 13, "area": 100, "bbox": [380, 384, 7, 25], "iscrowd": 0}, {"id": 4331664, "category_id": 13, "area": 106, "bbox": [389, 385, 7, 23], "iscrowd": 0}, {"id": 3211406, "category_id": 13, "area": 101, "bbox": [396, 385, 7, 22], "iscrowd": 0}, {"id": 5505199, "category_id": 13, "area": 93, "bbox": [405, 386, 7, 22], "iscrowd": 0}, {"id": 4395395, "category_id": 13, "area": 98, "bbox": [412, 384, 7, 24], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1549, "bbox": [0, 397, 48, 41], "iscrowd": 0}, {"id": 14766848, "category_id": 21, "area": 793, "bbox": [485, 383, 64, 30], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 856, "bbox": [607, 393, 32, 44], "iscrowd": 0}, {"id": 9568485, "category_id": 44, "area": 4627, "bbox": [608, 122, 73, 73], "iscrowd": 0}, {"id": 11346416, "category_id": 44, "area": 1844, "bbox": [640, 217, 40, 61], "iscrowd": 0}, {"id": 9634047, "category_id": 44, "area": 736, "bbox": [643, 200, 33, 29], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 708, "bbox": [550, 205, 39, 196], "iscrowd": 0}, {"id": 16736000, "category_id": 88, "area": 2722, "bbox": [403, 14, 87, 445], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 1391, "bbox": [138, 313, 158, 104], "iscrowd": 0}, {"id": 16714543, "category_id": 137, "area": 3809, "bbox": [443, 234, 53, 221], "iscrowd": 0}]}, {"image_id": "ADE_val_00000804", "file_name": "ADE_val_00000804.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 260966, "bbox": [0, 0, 683, 512], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 10162, "bbox": [331, 0, 72, 229], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 302, "bbox": [332, 221, 16, 24], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 45688, "bbox": [292, 281, 390, 230], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 21573, "bbox": [163, 294, 520, 218], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 138, "bbox": [332, 272, 6, 31], "iscrowd": 0}, {"id": 3543432, "category_id": 13, "area": 55, "bbox": [339, 274, 5, 17], "iscrowd": 0}, {"id": 5513901, "category_id": 13, "area": 25, "bbox": [344, 274, 3, 12], "iscrowd": 0}, {"id": 2818189, "category_id": 13, "area": 31, "bbox": [348, 274, 4, 12], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 181, "bbox": [325, 250, 12, 56], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 52, "bbox": [331, 206, 16, 10], "iscrowd": 0}, {"id": 16735501, "category_id": 88, "area": 146, "bbox": [324, 147, 21, 19], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 2538, "bbox": [350, 261, 62, 50], "iscrowd": 0}]}, {"image_id": "ADE_val_00000805", "file_name": "ADE_val_00000805.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 159083, "bbox": [57, 0, 625, 403], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 55441, "bbox": [0, 0, 546, 235], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 30046, "bbox": [1, 186, 270, 142], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 62681, "bbox": [0, 324, 673, 187], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 3392, "bbox": [61, 313, 210, 36], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 15061, "bbox": [47, 323, 568, 131], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 779, "bbox": [22, 330, 33, 28], "iscrowd": 0}, {"id": 14764800, "category_id": 21, "area": 105, "bbox": [19, 325, 14, 12], "iscrowd": 0}, {"id": 12546304, "category_id": 21, "area": 14325, "bbox": [535, 381, 148, 131], "iscrowd": 0}, {"id": 13264135, "category_id": 21, "area": 3337, "bbox": [130, 329, 72, 54], "iscrowd": 0}, {"id": 13656064, "category_id": 21, "area": 918, "bbox": [197, 337, 49, 26], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 663, "bbox": [368, 249, 21, 45], "iscrowd": 0}, {"id": 11665639, "category_id": 44, "area": 500, "bbox": [277, 275, 13, 114], "iscrowd": 0}, {"id": 11340267, "category_id": 44, "area": 266, "bbox": [190, 274, 14, 19], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 612, "bbox": [121, 138, 80, 197], "iscrowd": 0}]}, {"image_id": "ADE_val_00000806", "file_name": "ADE_val_00000806.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 125607, "bbox": [0, 39, 683, 390], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 80358, "bbox": [122, 1, 561, 318], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 60810, "bbox": [1, 0, 227, 367], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 30609, "bbox": [48, 422, 509, 90], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1272, "bbox": [266, 411, 151, 16], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 86, "bbox": [412, 396, 7, 24], "iscrowd": 0}, {"id": 5379477, "category_id": 13, "area": 111, "bbox": [418, 395, 8, 21], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1111, "bbox": [416, 395, 72, 45], "iscrowd": 0}, {"id": 11427328, "category_id": 21, "area": 5249, "bbox": [545, 386, 138, 116], "iscrowd": 0}, {"id": 14904576, "category_id": 21, "area": 1254, "bbox": [221, 388, 47, 49], "iscrowd": 0}, {"id": 11361024, "category_id": 21, "area": 3309, "bbox": [162, 386, 78, 64], "iscrowd": 0}, {"id": 14118400, "category_id": 21, "area": 3910, "bbox": [92, 382, 93, 90], "iscrowd": 0}, {"id": 14381568, "category_id": 21, "area": 15573, "bbox": [1, 359, 131, 152], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1306, "bbox": [428, 409, 45, 60], "iscrowd": 0}, {"id": 1744378, "category_id": 33, "area": 4218, "bbox": [476, 414, 82, 90], "iscrowd": 0}, {"id": 2141951, "category_id": 33, "area": 9952, "bbox": [556, 430, 127, 82], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 254, "bbox": [198, 354, 16, 32], "iscrowd": 0}, {"id": 11671030, "category_id": 44, "area": 79, "bbox": [189, 365, 8, 21], "iscrowd": 0}, {"id": 8328447, "category_id": 44, "area": 49, "bbox": [451, 382, 7, 9], "iscrowd": 0}, {"id": 8782053, "category_id": 44, "area": 198, "bbox": [483, 365, 17, 49], "iscrowd": 0}, {"id": 9701631, "category_id": 44, "area": 194, "bbox": [571, 370, 16, 22], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 198, "bbox": [170, 333, 10, 53], "iscrowd": 0}]}, {"image_id": "ADE_val_00000807", "file_name": "ADE_val_00000807.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 12102, "bbox": [2, 95, 680, 225], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 108737, "bbox": [2, 1, 675, 271], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 68741, "bbox": [1, 1, 681, 376], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 13049, "bbox": [1, 288, 301, 138], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 4044, "bbox": [1, 296, 682, 82], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 110094, "bbox": [1, 291, 682, 220], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2739, "bbox": [588, 277, 47, 121], "iscrowd": 0}, {"id": 4129918, "category_id": 13, "area": 1200, "bbox": [530, 280, 33, 77], "iscrowd": 0}, {"id": 2753656, "category_id": 13, "area": 985, "bbox": [568, 278, 26, 78], "iscrowd": 0}, {"id": 4522363, "category_id": 13, "area": 1952, "bbox": [443, 270, 35, 102], "iscrowd": 0}, {"id": 5111939, "category_id": 13, "area": 48, "bbox": [343, 285, 4, 17], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 279, "bbox": [34, 292, 28, 14], "iscrowd": 0}, {"id": 12804881, "category_id": 21, "area": 280, "bbox": [1, 294, 23, 17], "iscrowd": 0}, {"id": 15097344, "category_id": 21, "area": 932, "bbox": [73, 291, 73, 40], "iscrowd": 0}, {"id": 12091392, "category_id": 21, "area": 175, "bbox": [137, 291, 45, 6], "iscrowd": 0}, {"id": 12877824, "category_id": 21, "area": 97, "bbox": [198, 290, 25, 6], "iscrowd": 0}, {"id": 11174158, "category_id": 21, "area": 149, "bbox": [253, 289, 15, 11], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 894, "bbox": [174, 220, 31, 141], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 785, "bbox": [134, 211, 33, 98], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 432, "bbox": [24, 282, 41, 18], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 2062, "bbox": [223, 103, 28, 235], "iscrowd": 0}, {"id": 16734976, "category_id": 88, "area": 10094, "bbox": [72, 2, 72, 420], "iscrowd": 0}, {"id": 15739409, "category_id": 88, "area": 1083, "bbox": [53, 72, 42, 246], "iscrowd": 0}]}, {"image_id": "ADE_val_00000808", "file_name": "ADE_val_00000808.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 162217, "bbox": [1, 1, 682, 421], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 17825, "bbox": [477, 1, 134, 211], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 62180, "bbox": [111, 56, 525, 406], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 34149, "bbox": [62, 351, 501, 161], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 39390, "bbox": [0, 359, 682, 153], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 3522, "bbox": [413, 333, 74, 61], "iscrowd": 0}, {"id": 13137152, "category_id": 21, "area": 1252, "bbox": [484, 339, 36, 45], "iscrowd": 0}, {"id": 11955968, "category_id": 21, "area": 307, "bbox": [508, 339, 25, 24], "iscrowd": 0}, {"id": 14378269, "category_id": 21, "area": 3921, "bbox": [536, 359, 81, 67], "iscrowd": 0}, {"id": 11434496, "category_id": 21, "area": 64, "bbox": [529, 340, 9, 12], "iscrowd": 0}, {"id": 13723904, "category_id": 21, "area": 839, "bbox": [588, 350, 41, 45], "iscrowd": 0}, {"id": 13265664, "category_id": 21, "area": 71, "bbox": [511, 331, 11, 8], "iscrowd": 0}, {"id": 13793536, "category_id": 21, "area": 222, "bbox": [522, 331, 25, 20], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 2991, "bbox": [234, 351, 109, 37], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 4326, "bbox": [28, 192, 132, 81], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 203, "bbox": [391, 256, 12, 71], "iscrowd": 0}, {"id": 16733444, "category_id": 88, "area": 1195, "bbox": [623, 238, 16, 187], "iscrowd": 0}, {"id": 16733212, "category_id": 88, "area": 633, "bbox": [641, 270, 10, 122], "iscrowd": 0}, {"id": 16726528, "category_id": 88, "area": 465, "bbox": [649, 286, 9, 92], "iscrowd": 0}, {"id": 16471808, "category_id": 88, "area": 192, "bbox": [465, 276, 9, 57], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 463, "bbox": [512, 416, 8, 63], "iscrowd": 0}, {"id": 16711755, "category_id": 94, "area": 519, "bbox": [650, 466, 13, 45], "iscrowd": 0}, {"id": 16712223, "category_id": 94, "area": 520, "bbox": [116, 404, 14, 56], "iscrowd": 0}, {"id": 16121936, "category_id": 94, "area": 782, "bbox": [51, 414, 16, 69], "iscrowd": 0}, {"id": 16711704, "category_id": 94, "area": 216, "bbox": [508, 398, 6, 50], "iscrowd": 0}, {"id": 16653364, "category_id": 94, "area": 175, "bbox": [517, 391, 6, 43], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 935, "bbox": [2, 386, 29, 39], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1915, "bbox": [336, 334, 37, 66], "iscrowd": 0}, {"id": 15139006, "category_id": 139, "area": 1281, "bbox": [369, 336, 25, 63], "iscrowd": 0}, {"id": 16718507, "category_id": 139, "area": 977, "bbox": [390, 337, 23, 58], "iscrowd": 0}]}, {"image_id": "ADE_val_00000809", "file_name": "ADE_val_00000809.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 221678, "bbox": [1, 1, 682, 370], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 98838, "bbox": [1, 337, 682, 174], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 9849, "bbox": [1, 326, 681, 67], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1312, "bbox": [202, 126, 58, 49], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 338, "bbox": [90, 340, 20, 30], "iscrowd": 0}, {"id": 4262809, "category_id": 13, "area": 358, "bbox": [158, 308, 11, 49], "iscrowd": 0}, {"id": 2621565, "category_id": 13, "area": 272, "bbox": [574, 308, 20, 25], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2271, "bbox": [389, 207, 32, 79], "iscrowd": 0}, {"id": 11993343, "category_id": 44, "area": 373, "bbox": [355, 321, 17, 25], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 8101, "bbox": [258, 204, 131, 83], "iscrowd": 0}]}, {"image_id": "ADE_val_00000810", "file_name": "ADE_val_00000810.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 32175, "bbox": [1, 289, 535, 223], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 187430, "bbox": [1, 1, 682, 511], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 13891, "bbox": [392, 1, 291, 222], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 52512, "bbox": [331, 1, 350, 426], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 23527, "bbox": [555, 284, 128, 228], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 31632, "bbox": [267, 296, 323, 216], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 34, "bbox": [604, 290, 10, 4], "iscrowd": 0}, {"id": 12547840, "category_id": 21, "area": 965, "bbox": [629, 271, 41, 31], "iscrowd": 0}, {"id": 14242051, "category_id": 21, "area": 80, "bbox": [669, 276, 10, 19], "iscrowd": 0}, {"id": 11829765, "category_id": 21, "area": 199, "bbox": [672, 274, 11, 25], "iscrowd": 0}, {"id": 12737024, "category_id": 21, "area": 67, "bbox": [620, 285, 9, 8], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1884, "bbox": [438, 321, 71, 38], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 637, "bbox": [336, 172, 29, 35], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 289, "bbox": [245, 161, 17, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00000811", "file_name": "ADE_val_00000811.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1120, "bbox": [0, 228, 114, 23], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 35177, "bbox": [114, 107, 526, 140], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 45759, "bbox": [2, 1, 638, 207], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 66291, "bbox": [2, 1, 433, 421], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 27975, "bbox": [2, 262, 638, 129], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 64346, "bbox": [2, 222, 638, 258], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 711, "bbox": [518, 249, 121, 11], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 6451, "bbox": [349, 221, 172, 54], "iscrowd": 0}, {"id": 14702864, "category_id": 21, "area": 50054, "bbox": [2, 245, 462, 148], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 793, "bbox": [220, 144, 9, 101], "iscrowd": 0}]}, {"image_id": "ADE_val_00000812", "file_name": "ADE_val_00000812.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 101728, "bbox": [1, 120, 680, 218], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 103664, "bbox": [1, 2, 681, 183], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 62739, "bbox": [1, 337, 682, 175], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 716, "bbox": [130, 338, 83, 14], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 278, "bbox": [365, 284, 17, 31], "iscrowd": 0}, {"id": 4333702, "category_id": 13, "area": 374, "bbox": [454, 301, 37, 25], "iscrowd": 0}, {"id": 5901211, "category_id": 13, "area": 314, "bbox": [634, 300, 16, 31], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 24118, "bbox": [311, 294, 319, 104], "iscrowd": 0}, {"id": 13198360, "category_id": 21, "area": 6043, "bbox": [204, 299, 185, 61], "iscrowd": 0}, {"id": 13652224, "category_id": 21, "area": 7356, "bbox": [2, 286, 156, 67], "iscrowd": 0}, {"id": 14910464, "category_id": 21, "area": 2155, "bbox": [625, 317, 58, 52], "iscrowd": 0}]}, {"image_id": "ADE_val_00000813", "file_name": "ADE_val_00000813.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 299, "bbox": [303, 288, 32, 13], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 97887, "bbox": [0, 0, 683, 345], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 100003, "bbox": [84, 0, 599, 282], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3155, "bbox": [278, 187, 160, 104], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 126413, "bbox": [0, 299, 683, 213], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 468, "bbox": [326, 299, 35, 26], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 3020, "bbox": [0, 308, 683, 50], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2805, "bbox": [355, 284, 70, 48], "iscrowd": 0}, {"id": 13656586, "category_id": 21, "area": 995, "bbox": [188, 287, 52, 24], "iscrowd": 0}, {"id": 11560448, "category_id": 21, "area": 3650, "bbox": [1, 271, 104, 47], "iscrowd": 0}, {"id": 14308864, "category_id": 21, "area": 377, "bbox": [99, 282, 18, 35], "iscrowd": 0}, {"id": 12870144, "category_id": 21, "area": 586, "bbox": [107, 283, 32, 33], "iscrowd": 0}, {"id": 12472601, "category_id": 21, "area": 468, "bbox": [160, 284, 35, 23], "iscrowd": 0}, {"id": 12747520, "category_id": 21, "area": 65, "bbox": [274, 292, 12, 12], "iscrowd": 0}, {"id": 13331200, "category_id": 21, "area": 33, "bbox": [275, 295, 6, 10], "iscrowd": 0}, {"id": 13401114, "category_id": 21, "area": 134, "bbox": [261, 292, 16, 14], "iscrowd": 0}, {"id": 13858326, "category_id": 21, "area": 193, "bbox": [248, 293, 20, 13], "iscrowd": 0}, {"id": 12538382, "category_id": 21, "area": 89, "bbox": [240, 292, 11, 14], "iscrowd": 0}, {"id": 14122244, "category_id": 21, "area": 64, "bbox": [237, 291, 7, 17], "iscrowd": 0}, {"id": 13715989, "category_id": 21, "area": 892, "bbox": [106, 276, 53, 37], "iscrowd": 0}, {"id": 11686663, "category_id": 21, "area": 129, "bbox": [180, 284, 21, 11], "iscrowd": 0}, {"id": 13400594, "category_id": 21, "area": 165, "bbox": [282, 289, 21, 15], "iscrowd": 0}, {"id": 12020502, "category_id": 21, "area": 68, "bbox": [283, 293, 11, 11], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 428, "bbox": [76, 187, 31, 17], "iscrowd": 0}, {"id": 9379307, "category_id": 44, "area": 310, "bbox": [77, 209, 31, 10], "iscrowd": 0}, {"id": 11206908, "category_id": 44, "area": 232, "bbox": [400, 266, 15, 17], "iscrowd": 0}, {"id": 8132607, "category_id": 44, "area": 151, "bbox": [139, 232, 13, 17], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 385, "bbox": [24, 251, 42, 19], "iscrowd": 0}, {"id": 4580634, "category_id": 87, "area": 406, "bbox": [0, 247, 31, 20], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 19, "bbox": [386, 242, 13, 12], "iscrowd": 0}, {"id": 16730112, "category_id": 88, "area": 28, "bbox": [359, 206, 17, 7], "iscrowd": 0}, {"id": 15740171, "category_id": 88, "area": 1605, "bbox": [465, 27, 64, 312], "iscrowd": 0}, {"id": 16735769, "category_id": 88, "area": 355, "bbox": [331, 160, 34, 139], "iscrowd": 0}, {"id": 16724749, "category_id": 88, "area": 73, "bbox": [657, 241, 9, 13], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 160, "bbox": [155, 291, 12, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00000814", "file_name": "ADE_val_00000814.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 204442, "bbox": [1, 1, 682, 420], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 10367, "bbox": [40, 1, 643, 167], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 25278, "bbox": [1, 1, 217, 332], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 18631, "bbox": [1, 429, 676, 82], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 17833, "bbox": [391, 416, 292, 94], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 53174, "bbox": [1, 322, 396, 183], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2417, "bbox": [374, 191, 36, 192], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 6029, "bbox": [534, 316, 80, 102], "iscrowd": 0}]}, {"image_id": "ADE_val_00000815", "file_name": "ADE_val_00000815.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 188115, "bbox": [0, 0, 681, 509], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 115958, "bbox": [1, 281, 681, 230], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2496, "bbox": [16, 22, 562, 138], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 9829, "bbox": [1, 2, 514, 165], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3567, "bbox": [467, 298, 39, 136], "iscrowd": 0}, {"id": 2823051, "category_id": 13, "area": 1792, "bbox": [421, 248, 30, 94], "iscrowd": 0}, {"id": 4527745, "category_id": 13, "area": 2016, "bbox": [346, 245, 36, 94], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 2868, "bbox": [440, 185, 103, 31], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 422, "bbox": [531, 105, 41, 39], "iscrowd": 0}, {"id": 14768128, "category_id": 88, "area": 325, "bbox": [289, 112, 20, 39], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 695, "bbox": [280, 291, 18, 46], "iscrowd": 0}, {"id": 15602765, "category_id": 94, "area": 3065, "bbox": [56, 327, 37, 92], "iscrowd": 0}, {"id": 15342108, "category_id": 94, "area": 1333, "bbox": [206, 302, 23, 62], "iscrowd": 0}, {"id": 16711986, "category_id": 94, "area": 1925, "bbox": [145, 312, 28, 73], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 7287, "bbox": [115, 262, 155, 94], "iscrowd": 0}, {"id": 15275713, "category_id": 117, "area": 1272, "bbox": [195, 251, 74, 42], "iscrowd": 0}, {"id": 16056511, "category_id": 117, "area": 534, "bbox": [110, 259, 46, 30], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 393, "bbox": [607, 130, 10, 50], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 64, "bbox": [119, 134, 8, 9], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 337, "bbox": [135, 263, 21, 41], "iscrowd": 0}]}, {"image_id": "ADE_val_00000816", "file_name": "ADE_val_00000816.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 217518, "bbox": [1, 1, 680, 510], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 55792, "bbox": [139, 1, 364, 312], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 37968, "bbox": [1, 367, 606, 145], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 14894, "bbox": [1, 380, 606, 111], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 654, "bbox": [449, 353, 17, 59], "iscrowd": 0}, {"id": 3348624, "category_id": 13, "area": 399, "bbox": [463, 369, 20, 43], "iscrowd": 0}, {"id": 4328115, "category_id": 13, "area": 772, "bbox": [473, 350, 28, 61], "iscrowd": 0}, {"id": 3084436, "category_id": 13, "area": 122, "bbox": [469, 351, 11, 20], "iscrowd": 0}, {"id": 4128915, "category_id": 13, "area": 66, "bbox": [460, 351, 8, 18], "iscrowd": 0}, {"id": 3801254, "category_id": 13, "area": 15, "bbox": [347, 354, 5, 5], "iscrowd": 0}, {"id": 5311114, "category_id": 13, "area": 51, "bbox": [337, 352, 9, 10], "iscrowd": 0}, {"id": 2101132, "category_id": 13, "area": 163, "bbox": [312, 351, 12, 25], "iscrowd": 0}, {"id": 2228389, "category_id": 13, "area": 84, "bbox": [304, 352, 9, 14], "iscrowd": 0}, {"id": 4259976, "category_id": 13, "area": 57, "bbox": [295, 353, 8, 11], "iscrowd": 0}, {"id": 3678886, "category_id": 13, "area": 82, "bbox": [271, 352, 10, 12], "iscrowd": 0}, {"id": 4854196, "category_id": 13, "area": 136, "bbox": [241, 350, 15, 16], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 793, "bbox": [385, 358, 38, 31], "iscrowd": 0}, {"id": 14057216, "category_id": 21, "area": 2650, "bbox": [323, 360, 67, 48], "iscrowd": 0}, {"id": 11367424, "category_id": 21, "area": 11770, "bbox": [181, 364, 151, 105], "iscrowd": 0}, {"id": 11493120, "category_id": 21, "area": 245, "bbox": [411, 357, 20, 18], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 916, "bbox": [475, 306, 29, 53], "iscrowd": 0}]}, {"image_id": "ADE_val_00000817", "file_name": "ADE_val_00000817.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 275986, "bbox": [1, 1, 682, 511], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 21788, "bbox": [1, 1, 187, 213], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 22882, "bbox": [1, 388, 406, 124], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 13860, "bbox": [43, 392, 587, 120], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2642, "bbox": [109, 347, 42, 142], "iscrowd": 0}, {"id": 4526988, "category_id": 13, "area": 3317, "bbox": [179, 349, 55, 144], "iscrowd": 0}, {"id": 3148694, "category_id": 13, "area": 725, "bbox": [155, 351, 17, 69], "iscrowd": 0}, {"id": 2235279, "category_id": 13, "area": 534, "bbox": [143, 356, 12, 68], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2748, "bbox": [609, 245, 28, 266], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1761, "bbox": [528, 1, 82, 43], "iscrowd": 0}, {"id": 15611904, "category_id": 88, "area": 74, "bbox": [33, 297, 9, 14], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 248, "bbox": [133, 434, 15, 30], "iscrowd": 0}, {"id": 10332496, "category_id": 116, "area": 569, "bbox": [104, 430, 25, 36], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 402, "bbox": [177, 406, 39, 97], "iscrowd": 0}]}, {"image_id": "ADE_val_00000818", "file_name": "ADE_val_00000818.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 199195, "bbox": [2, 1, 680, 487], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 66407, "bbox": [38, 1, 395, 278], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 37317, "bbox": [15, 358, 523, 154], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 7515, "bbox": [1, 368, 600, 144], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 181, "bbox": [64, 324, 23, 9], "iscrowd": 0}, {"id": 13467151, "category_id": 21, "area": 1104, "bbox": [58, 333, 41, 35], "iscrowd": 0}, {"id": 14514688, "category_id": 21, "area": 2688, "bbox": [557, 482, 125, 29], "iscrowd": 0}, {"id": 15029504, "category_id": 21, "area": 1769, "bbox": [185, 341, 58, 57], "iscrowd": 0}, {"id": 12090910, "category_id": 21, "area": 5623, "bbox": [215, 338, 127, 95], "iscrowd": 0}, {"id": 11890432, "category_id": 21, "area": 22093, "bbox": [267, 351, 209, 139], "iscrowd": 0}]}, {"image_id": "ADE_val_00000819", "file_name": "ADE_val_00000819.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 189357, "bbox": [1, 0, 511, 480], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 22321, "bbox": [109, 1, 403, 228], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 19242, "bbox": [0, 453, 512, 110], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 68972, "bbox": [1, 452, 510, 230], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 40, "bbox": [360, 450, 15, 7], "iscrowd": 0}, {"id": 15466240, "category_id": 123, "area": 181, "bbox": [458, 248, 17, 14], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 41, "bbox": [409, 232, 6, 8], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 36, "bbox": [429, 445, 5, 11], "iscrowd": 0}, {"id": 2229376, "category_id": 13, "area": 12, "bbox": [275, 448, 3, 7], "iscrowd": 0}, {"id": 4594306, "category_id": 13, "area": 29, "bbox": [192, 450, 6, 9], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1219, "bbox": [312, 458, 58, 31], "iscrowd": 0}, {"id": 12868352, "category_id": 21, "area": 1991, "bbox": [50, 453, 83, 46], "iscrowd": 0}, {"id": 13199872, "category_id": 21, "area": 1245, "bbox": [0, 458, 36, 52], "iscrowd": 0}, {"id": 14246417, "category_id": 21, "area": 70, "bbox": [169, 470, 11, 15], "iscrowd": 0}, {"id": 12023319, "category_id": 21, "area": 60, "bbox": [504, 446, 8, 9], "iscrowd": 0}, {"id": 11294464, "category_id": 21, "area": 1929, "bbox": [174, 455, 75, 37], "iscrowd": 0}, {"id": 11894273, "category_id": 21, "area": 202, "bbox": [134, 453, 46, 19], "iscrowd": 0}, {"id": 11817728, "category_id": 21, "area": 155, "bbox": [293, 451, 27, 16], "iscrowd": 0}, {"id": 13391637, "category_id": 21, "area": 143, "bbox": [257, 448, 36, 13], "iscrowd": 0}, {"id": 11815702, "category_id": 21, "area": 34, "bbox": [292, 456, 17, 8], "iscrowd": 0}, {"id": 11758089, "category_id": 21, "area": 154, "bbox": [227, 454, 31, 13], "iscrowd": 0}, {"id": 13072896, "category_id": 21, "area": 2367, "bbox": [239, 455, 87, 39], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 155, "bbox": [460, 399, 8, 71], "iscrowd": 0}, {"id": 9965823, "category_id": 44, "area": 2825, "bbox": [101, 179, 51, 65], "iscrowd": 0}, {"id": 10551550, "category_id": 44, "area": 1114, "bbox": [145, 236, 35, 40], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 894, "bbox": [436, 431, 36, 29], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 978, "bbox": [377, 433, 36, 31], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 123, "bbox": [409, 393, 9, 47], "iscrowd": 0}, {"id": 16010768, "category_id": 88, "area": 59, "bbox": [433, 399, 6, 33], "iscrowd": 0}, {"id": 16725773, "category_id": 88, "area": 69, "bbox": [476, 409, 4, 44], "iscrowd": 0}, {"id": 16141317, "category_id": 88, "area": 6002, "bbox": [76, 0, 117, 374], "iscrowd": 0}, {"id": 16730139, "category_id": 88, "area": 929, "bbox": [199, 337, 28, 117], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 241, "bbox": [487, 440, 17, 17], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 117, "bbox": [365, 421, 13, 9], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 47, "bbox": [359, 457, 8, 7], "iscrowd": 0}, {"id": 16714751, "category_id": 126, "area": 43, "bbox": [368, 456, 7, 7], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 288, "bbox": [482, 415, 11, 72], "iscrowd": 0}, {"id": 16646714, "category_id": 137, "area": 30, "bbox": [491, 423, 15, 7], "iscrowd": 0}, {"id": 16516660, "category_id": 137, "area": 199, "bbox": [300, 390, 16, 15], "iscrowd": 0}, {"id": 15532090, "category_id": 137, "area": 143, "bbox": [327, 421, 12, 29], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 11057, "bbox": [0, 510, 135, 139], "iscrowd": 0}, {"id": 16253335, "category_id": 139, "area": 318, "bbox": [464, 471, 15, 24], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 2438, "bbox": [109, 458, 51, 68], "iscrowd": 0}, {"id": 63915, "category_id": 145, "area": 1364, "bbox": [146, 456, 45, 65], "iscrowd": 0}]}, {"image_id": "ADE_val_00000820", "file_name": "ADE_val_00000820.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 220731, "bbox": [1, 1, 682, 482], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 38776, "bbox": [208, 1, 475, 305], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 33071, "bbox": [215, 1, 365, 224], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 28463, "bbox": [33, 386, 650, 126], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 13755, "bbox": [1, 380, 682, 132], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 85, "bbox": [547, 396, 5, 21], "iscrowd": 0}, {"id": 15532077, "category_id": 94, "area": 42, "bbox": [604, 391, 3, 14], "iscrowd": 0}, {"id": 16711717, "category_id": 94, "area": 24, "bbox": [636, 386, 3, 10], "iscrowd": 0}, {"id": 16719414, "category_id": 94, "area": 19, "bbox": [658, 382, 3, 9], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 2804, "bbox": [603, 405, 79, 84], "iscrowd": 0}, {"id": 16717961, "category_id": 117, "area": 4715, "bbox": [546, 412, 126, 100], "iscrowd": 0}]}, {"image_id": "ADE_val_00000821", "file_name": "ADE_val_00000821.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 52481, "bbox": [0, 0, 683, 237], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 13855, "bbox": [2, 1, 150, 193], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 71136, "bbox": [126, 0, 557, 194], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 122475, "bbox": [10, 207, 673, 305], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 348, "bbox": [220, 198, 25, 17], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 12093, "bbox": [563, 194, 80, 267], "iscrowd": 0}, {"id": 5179792, "category_id": 13, "area": 9133, "bbox": [607, 188, 75, 267], "iscrowd": 0}, {"id": 4194446, "category_id": 13, "area": 7115, "bbox": [438, 236, 63, 198], "iscrowd": 0}, {"id": 2818202, "category_id": 13, "area": 7327, "bbox": [355, 227, 68, 226], "iscrowd": 0}, {"id": 2424988, "category_id": 13, "area": 823, "bbox": [320, 220, 21, 82], "iscrowd": 0}, {"id": 2752647, "category_id": 13, "area": 3154, "bbox": [333, 213, 48, 131], "iscrowd": 0}, {"id": 5505159, "category_id": 13, "area": 1245, "bbox": [420, 216, 30, 86], "iscrowd": 0}, {"id": 3547549, "category_id": 13, "area": 2086, "bbox": [251, 206, 38, 106], "iscrowd": 0}, {"id": 5702550, "category_id": 13, "area": 4079, "bbox": [47, 209, 59, 141], "iscrowd": 0}, {"id": 4849809, "category_id": 13, "area": 3039, "bbox": [102, 215, 32, 128], "iscrowd": 0}, {"id": 3083687, "category_id": 13, "area": 923, "bbox": [49, 215, 21, 106], "iscrowd": 0}, {"id": 2759800, "category_id": 13, "area": 1567, "bbox": [21, 200, 32, 125], "iscrowd": 0}, {"id": 4003988, "category_id": 13, "area": 8702, "bbox": [1, 177, 42, 334], "iscrowd": 0}, {"id": 3932336, "category_id": 13, "area": 544, "bbox": [568, 206, 23, 61], "iscrowd": 0}, {"id": 4194447, "category_id": 13, "area": 527, "bbox": [230, 213, 15, 49], "iscrowd": 0}, {"id": 5701787, "category_id": 13, "area": 452, "bbox": [375, 211, 20, 50], "iscrowd": 0}, {"id": 5836977, "category_id": 13, "area": 443, "bbox": [463, 219, 24, 50], "iscrowd": 0}, {"id": 5638537, "category_id": 13, "area": 733, "bbox": [662, 221, 20, 128], "iscrowd": 0}, {"id": 4064153, "category_id": 13, "area": 440, "bbox": [535, 226, 21, 42], "iscrowd": 0}, {"id": 4915321, "category_id": 13, "area": 475, "bbox": [168, 210, 14, 50], "iscrowd": 0}, {"id": 5898393, "category_id": 13, "area": 278, "bbox": [208, 211, 19, 39], "iscrowd": 0}, {"id": 4659873, "category_id": 13, "area": 223, "bbox": [247, 215, 14, 34], "iscrowd": 0}, {"id": 3939499, "category_id": 13, "area": 293, "bbox": [130, 215, 13, 40], "iscrowd": 0}, {"id": 3285163, "category_id": 13, "area": 331, "bbox": [138, 207, 14, 50], "iscrowd": 0}, {"id": 5832865, "category_id": 13, "area": 55, "bbox": [105, 215, 5, 13], "iscrowd": 0}, {"id": 3545218, "category_id": 13, "area": 132, "bbox": [199, 219, 14, 21], "iscrowd": 0}, {"id": 4128925, "category_id": 13, "area": 155, "bbox": [203, 213, 12, 25], "iscrowd": 0}, {"id": 4391297, "category_id": 13, "area": 556, "bbox": [521, 212, 20, 77], "iscrowd": 0}, {"id": 4718735, "category_id": 13, "area": 1102, "bbox": [504, 214, 26, 81], "iscrowd": 0}, {"id": 3473570, "category_id": 13, "area": 586, "bbox": [494, 227, 15, 62], "iscrowd": 0}, {"id": 4718999, "category_id": 13, "area": 547, "bbox": [318, 199, 28, 71], "iscrowd": 0}, {"id": 3997828, "category_id": 13, "area": 290, "bbox": [363, 208, 17, 30], "iscrowd": 0}, {"id": 5641855, "category_id": 13, "area": 162, "bbox": [416, 210, 7, 35], "iscrowd": 0}, {"id": 3672465, "category_id": 13, "area": 735, "bbox": [553, 221, 19, 66], "iscrowd": 0}, {"id": 4262562, "category_id": 13, "area": 387, "bbox": [673, 209, 9, 107], "iscrowd": 0}, {"id": 2630567, "category_id": 13, "area": 166, "bbox": [535, 226, 11, 29], "iscrowd": 0}, {"id": 5446827, "category_id": 13, "area": 453, "bbox": [479, 215, 17, 52], "iscrowd": 0}, {"id": 3342482, "category_id": 13, "area": 145, "bbox": [303, 211, 8, 31], "iscrowd": 0}, {"id": 4784543, "category_id": 13, "area": 124, "bbox": [404, 211, 12, 18], "iscrowd": 0}, {"id": 4989363, "category_id": 13, "area": 296, "bbox": [447, 226, 15, 39], "iscrowd": 0}, {"id": 2361990, "category_id": 13, "area": 51, "bbox": [495, 216, 8, 10], "iscrowd": 0}, {"id": 3145868, "category_id": 13, "area": 86, "bbox": [513, 206, 10, 19], "iscrowd": 0}, {"id": 3673744, "category_id": 13, "area": 84, "bbox": [496, 205, 11, 17], "iscrowd": 0}, {"id": 2559617, "category_id": 13, "area": 48, "bbox": [469, 209, 9, 10], "iscrowd": 0}, {"id": 2425012, "category_id": 13, "area": 65, "bbox": [487, 214, 6, 14], "iscrowd": 0}, {"id": 4785562, "category_id": 13, "area": 64, "bbox": [489, 207, 9, 15], "iscrowd": 0}, {"id": 3936398, "category_id": 13, "area": 94, "bbox": [542, 212, 10, 14], "iscrowd": 0}, {"id": 4129446, "category_id": 13, "area": 55, "bbox": [535, 213, 8, 15], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 346, "bbox": [151, 213, 19, 24], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 89, "bbox": [153, 189, 7, 23], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 262, "bbox": [36, 118, 15, 82], "iscrowd": 0}, {"id": 16208128, "category_id": 88, "area": 1029, "bbox": [68, 52, 25, 155], "iscrowd": 0}, {"id": 16732416, "category_id": 88, "area": 206, "bbox": [26, 141, 11, 58], "iscrowd": 0}, {"id": 16343558, "category_id": 88, "area": 122, "bbox": [18, 155, 9, 34], "iscrowd": 0}, {"id": 16726034, "category_id": 88, "area": 108, "bbox": [120, 154, 6, 60], "iscrowd": 0}, {"id": 16724992, "category_id": 88, "area": 90, "bbox": [102, 158, 6, 56], "iscrowd": 0}, {"id": 15215360, "category_id": 88, "area": 76, "bbox": [67, 168, 4, 37], "iscrowd": 0}, {"id": 16729883, "category_id": 88, "area": 40, "bbox": [52, 171, 3, 35], "iscrowd": 0}, {"id": 16403219, "category_id": 88, "area": 45, "bbox": [132, 162, 8, 11], "iscrowd": 0}, {"id": 15023646, "category_id": 88, "area": 36, "bbox": [107, 165, 7, 10], "iscrowd": 0}, {"id": 16734230, "category_id": 88, "area": 48, "bbox": [147, 160, 9, 12], "iscrowd": 0}, {"id": 16727070, "category_id": 88, "area": 30, "bbox": [104, 73, 5, 8], "iscrowd": 0}, {"id": 14966547, "category_id": 88, "area": 43, "bbox": [115, 66, 5, 11], "iscrowd": 0}, {"id": 15881472, "category_id": 88, "area": 52, "bbox": [127, 59, 6, 12], "iscrowd": 0}, {"id": 16267520, "category_id": 88, "area": 40, "bbox": [141, 49, 7, 11], "iscrowd": 0}, {"id": 16729088, "category_id": 88, "area": 76, "bbox": [156, 40, 9, 16], "iscrowd": 0}, {"id": 16728832, "category_id": 88, "area": 5455, "bbox": [173, 0, 38, 331], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 159, "bbox": [99, 283, 8, 32], "iscrowd": 0}, {"id": 10472749, "category_id": 116, "area": 1908, "bbox": [411, 353, 37, 72], "iscrowd": 0}, {"id": 11320900, "category_id": 116, "area": 858, "bbox": [359, 263, 42, 60], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 430, "bbox": [533, 171, 29, 18], "iscrowd": 0}, {"id": 1965966, "category_id": 124, "area": 257, "bbox": [574, 175, 19, 16], "iscrowd": 0}, {"id": 196475, "category_id": 124, "area": 447, "bbox": [477, 172, 33, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00000822", "file_name": "ADE_val_00000822.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 92390, "bbox": [1, 0, 682, 241], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 35153, "bbox": [10, 2, 633, 237], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 163699, "bbox": [1, 191, 682, 321], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 18120, "bbox": [1, 203, 565, 76], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 9593, "bbox": [273, 215, 74, 220], "iscrowd": 0}, {"id": 4194476, "category_id": 13, "area": 2359, "bbox": [356, 193, 38, 108], "iscrowd": 0}, {"id": 3408021, "category_id": 13, "area": 314, "bbox": [395, 179, 8, 70], "iscrowd": 0}, {"id": 4596634, "category_id": 13, "area": 129, "bbox": [401, 180, 7, 29], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1668, "bbox": [563, 186, 59, 35], "iscrowd": 0}, {"id": 13985024, "category_id": 21, "area": 2235, "bbox": [618, 185, 65, 44], "iscrowd": 0}, {"id": 14240512, "category_id": 21, "area": 148, "bbox": [458, 181, 12, 17], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 184, "bbox": [460, 146, 8, 79], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 808, "bbox": [121, 218, 59, 29], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 4166, "bbox": [470, 146, 108, 66], "iscrowd": 0}, {"id": 231, "category_id": 84, "area": 543, "bbox": [431, 167, 20, 33], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 526, "bbox": [67, 36, 64, 220], "iscrowd": 0}, {"id": 16408343, "category_id": 88, "area": 101, "bbox": [648, 41, 34, 14], "iscrowd": 0}, {"id": 14893312, "category_id": 88, "area": 1278, "bbox": [0, 49, 65, 204], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 705, "bbox": [281, 195, 35, 38], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 501, "bbox": [174, 202, 41, 43], "iscrowd": 0}, {"id": 60671, "category_id": 128, "area": 987, "bbox": [252, 194, 36, 47], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 3159, "bbox": [359, 0, 38, 262], "iscrowd": 0}, {"id": 15532071, "category_id": 137, "area": 2144, "bbox": [518, 66, 23, 185], "iscrowd": 0}]}, {"image_id": "ADE_val_00000823", "file_name": "ADE_val_00000823.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 205340, "bbox": [0, 1, 683, 390], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 31824, "bbox": [1, 1, 682, 196], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 55343, "bbox": [1, 381, 682, 131], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2873, "bbox": [95, 336, 59, 116], "iscrowd": 0}, {"id": 2752649, "category_id": 13, "area": 745, "bbox": [300, 332, 23, 64], "iscrowd": 0}, {"id": 2952331, "category_id": 13, "area": 414, "bbox": [340, 339, 29, 34], "iscrowd": 0}, {"id": 2556069, "category_id": 13, "area": 1302, "bbox": [184, 337, 27, 81], "iscrowd": 0}, {"id": 4784274, "category_id": 13, "area": 403, "bbox": [278, 335, 22, 63], "iscrowd": 0}, {"id": 5048996, "category_id": 13, "area": 2389, "bbox": [247, 340, 48, 105], "iscrowd": 0}, {"id": 3803264, "category_id": 13, "area": 1594, "bbox": [211, 336, 27, 86], "iscrowd": 0}, {"id": 5701808, "category_id": 13, "area": 146, "bbox": [256, 332, 16, 29], "iscrowd": 0}, {"id": 4391837, "category_id": 13, "area": 453, "bbox": [243, 334, 14, 66], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 30880, "bbox": [327, 347, 319, 137], "iscrowd": 0}, {"id": 14312448, "category_id": 21, "area": 3023, "bbox": [498, 348, 170, 81], "iscrowd": 0}, {"id": 11890432, "category_id": 21, "area": 2830, "bbox": [32, 342, 84, 58], "iscrowd": 0}, {"id": 13200896, "category_id": 21, "area": 2609, "bbox": [0, 346, 57, 59], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 234, "bbox": [430, 313, 12, 20], "iscrowd": 0}, {"id": 11665663, "category_id": 44, "area": 346, "bbox": [400, 316, 25, 14], "iscrowd": 0}, {"id": 8854015, "category_id": 44, "area": 243, "bbox": [252, 320, 21, 12], "iscrowd": 0}, {"id": 10164991, "category_id": 44, "area": 214, "bbox": [157, 380, 16, 23], "iscrowd": 0}, {"id": 10625535, "category_id": 44, "area": 414, "bbox": [524, 306, 18, 23], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1022, "bbox": [104, 236, 22, 120], "iscrowd": 0}, {"id": 16726784, "category_id": 88, "area": 1367, "bbox": [515, 197, 27, 150], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 112, "bbox": [239, 374, 10, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00000824", "file_name": "ADE_val_00000824.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 13140, "bbox": [1, 350, 680, 108], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 57769, "bbox": [1, 37, 682, 344], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 74403, "bbox": [1, 2, 682, 162], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1313, "bbox": [385, 40, 37, 88], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 41067, "bbox": [1, 404, 681, 108], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 19628, "bbox": [1, 381, 682, 119], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 131874, "bbox": [2, 130, 679, 323], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1789, "bbox": [205, 158, 37, 258], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 327, "bbox": [166, 385, 24, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00000825", "file_name": "ADE_val_00000825.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 48897, "bbox": [0, 3, 533, 216], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 42151, "bbox": [2, 0, 681, 224], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 35002, "bbox": [107, 1, 576, 331], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 16585, "bbox": [3, 213, 680, 221], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 90571, "bbox": [1, 222, 682, 290], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 51, "bbox": [656, 214, 4, 19], "iscrowd": 0}, {"id": 3736713, "category_id": 13, "area": 339, "bbox": [206, 187, 22, 30], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 46473, "bbox": [292, 221, 385, 180], "iscrowd": 0}, {"id": 12152832, "category_id": 21, "area": 4311, "bbox": [467, 206, 128, 51], "iscrowd": 0}, {"id": 12668416, "category_id": 21, "area": 564, "bbox": [595, 217, 32, 22], "iscrowd": 0}, {"id": 14253584, "category_id": 21, "area": 287, "bbox": [567, 211, 30, 20], "iscrowd": 0}, {"id": 15098880, "category_id": 21, "area": 1387, "bbox": [293, 198, 57, 35], "iscrowd": 0}, {"id": 14776064, "category_id": 21, "area": 630, "bbox": [417, 204, 48, 18], "iscrowd": 0}, {"id": 14058496, "category_id": 21, "area": 166, "bbox": [384, 207, 27, 11], "iscrowd": 0}, {"id": 14970112, "category_id": 21, "area": 317, "bbox": [347, 205, 37, 12], "iscrowd": 0}, {"id": 13851146, "category_id": 21, "area": 142, "bbox": [329, 204, 25, 8], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 53, "bbox": [598, 197, 9, 12], "iscrowd": 0}, {"id": 9700351, "category_id": 44, "area": 2142, "bbox": [204, 17, 97, 39], "iscrowd": 0}, {"id": 9504767, "category_id": 44, "area": 469, "bbox": [28, 113, 23, 32], "iscrowd": 0}, {"id": 11412223, "category_id": 44, "area": 402, "bbox": [31, 161, 24, 19], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 15629, "bbox": [1, 140, 249, 132], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 57, "bbox": [633, 184, 5, 34], "iscrowd": 0}, {"id": 15679496, "category_id": 88, "area": 27, "bbox": [655, 194, 4, 21], "iscrowd": 0}, {"id": 16731655, "category_id": 88, "area": 67, "bbox": [573, 161, 33, 52], "iscrowd": 0}, {"id": 16734728, "category_id": 88, "area": 132, "bbox": [500, 133, 46, 69], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 13646, "bbox": [9, 0, 82, 431], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 825, "bbox": [260, 130, 28, 33], "iscrowd": 0}, {"id": 15929381, "category_id": 137, "area": 317, "bbox": [397, 157, 11, 67], "iscrowd": 0}, {"id": 16711729, "category_id": 137, "area": 120, "bbox": [405, 166, 38, 41], "iscrowd": 0}]}, {"image_id": "ADE_val_00000826", "file_name": "ADE_val_00000826.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 157535, "bbox": [0, 0, 682, 313], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 238, "bbox": [23, 0, 37, 12], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3968, "bbox": [1, 146, 77, 99], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 107092, "bbox": [1, 288, 681, 224], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 350, "bbox": [435, 312, 89, 11], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 697, "bbox": [456, 274, 18, 57], "iscrowd": 0}, {"id": 3938950, "category_id": 13, "area": 683, "bbox": [485, 275, 20, 57], "iscrowd": 0}, {"id": 4915354, "category_id": 13, "area": 95, "bbox": [484, 273, 10, 22], "iscrowd": 0}, {"id": 3342478, "category_id": 13, "area": 21, "bbox": [180, 266, 6, 6], "iscrowd": 0}, {"id": 4002735, "category_id": 13, "area": 662, "bbox": [500, 278, 17, 55], "iscrowd": 0}, {"id": 3997861, "category_id": 13, "area": 1211, "bbox": [183, 269, 23, 79], "iscrowd": 0}, {"id": 5898393, "category_id": 13, "area": 1468, "bbox": [147, 265, 30, 81], "iscrowd": 0}, {"id": 2818210, "category_id": 13, "area": 37, "bbox": [275, 279, 7, 9], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 446, "bbox": [1, 272, 44, 17], "iscrowd": 0}, {"id": 13067776, "category_id": 21, "area": 5674, "bbox": [304, 265, 130, 61], "iscrowd": 0}, {"id": 11291136, "category_id": 21, "area": 4946, "bbox": [1, 284, 81, 83], "iscrowd": 0}, {"id": 13264128, "category_id": 21, "area": 2791, "bbox": [212, 279, 98, 40], "iscrowd": 0}, {"id": 12221184, "category_id": 21, "area": 3411, "bbox": [37, 279, 118, 49], "iscrowd": 0}, {"id": 13589266, "category_id": 21, "area": 1026, "bbox": [130, 268, 83, 45], "iscrowd": 0}, {"id": 12929292, "category_id": 21, "area": 10509, "bbox": [522, 271, 161, 82], "iscrowd": 0}, {"id": 14579712, "category_id": 21, "area": 295, "bbox": [74, 276, 55, 17], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 25548, "bbox": [527, 1, 101, 507], "iscrowd": 0}, {"id": 8980976, "category_id": 44, "area": 553, "bbox": [97, 187, 24, 36], "iscrowd": 0}, {"id": 10488063, "category_id": 44, "area": 535, "bbox": [124, 193, 28, 26], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 776, "bbox": [155, 71, 61, 197], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1308, "bbox": [350, 424, 19, 88], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 352, "bbox": [10, 265, 39, 14], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 724, "bbox": [272, 225, 102, 11], "iscrowd": 0}, {"id": 65411, "category_id": 124, "area": 756, "bbox": [187, 230, 57, 14], "iscrowd": 0}, {"id": 1703789, "category_id": 124, "area": 552, "bbox": [493, 221, 44, 13], "iscrowd": 0}, {"id": 60031, "category_id": 124, "area": 523, "bbox": [61, 236, 72, 8], "iscrowd": 0}, {"id": 65408, "category_id": 124, "area": 316, "bbox": [298, 226, 50, 8], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 7210, "bbox": [458, 400, 224, 111], "iscrowd": 0}, {"id": 1310693, "category_id": 128, "area": 488, "bbox": [430, 289, 27, 28], "iscrowd": 0}, {"id": 588287, "category_id": 128, "area": 1749, "bbox": [522, 381, 132, 129], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 716, "bbox": [470, 208, 15, 116], "iscrowd": 0}, {"id": 14813757, "category_id": 137, "area": 2002, "bbox": [121, 149, 27, 179], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 297, "bbox": [148, 113, 7, 85], "iscrowd": 0}]}, {"image_id": "ADE_val_00000827", "file_name": "ADE_val_00000827.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 43755, "bbox": [1, 1, 601, 467], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 128502, "bbox": [97, 1, 586, 416], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 59004, "bbox": [101, 1, 547, 214], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7128, "bbox": [461, 238, 182, 98], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 64976, "bbox": [22, 326, 661, 185], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 13463, "bbox": [0, 367, 416, 145], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 3698, "bbox": [521, 202, 119, 58], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 1434, "bbox": [545, 287, 61, 37], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 4993, "bbox": [414, 312, 98, 67], "iscrowd": 0}, {"id": 12018176, "category_id": 21, "area": 585, "bbox": [548, 317, 33, 23], "iscrowd": 0}, {"id": 12089856, "category_id": 21, "area": 99, "bbox": [545, 316, 13, 16], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 536, "bbox": [439, 223, 19, 35], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 10882, "bbox": [371, 78, 174, 191], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 2211, "bbox": [93, 72, 75, 79], "iscrowd": 0}]}, {"image_id": "ADE_val_00000828", "file_name": "ADE_val_00000828.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 165321, "bbox": [0, 0, 683, 343], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 22126, "bbox": [527, 0, 156, 164], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5451, "bbox": [484, 26, 150, 346], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 28288, "bbox": [1, 316, 682, 196], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 40894, "bbox": [105, 326, 578, 186], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3047, "bbox": [542, 356, 141, 92], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1637, "bbox": [462, 294, 24, 105], "iscrowd": 0}, {"id": 2818175, "category_id": 13, "area": 118, "bbox": [385, 298, 11, 20], "iscrowd": 0}, {"id": 5181607, "category_id": 13, "area": 33, "bbox": [407, 299, 8, 9], "iscrowd": 0}, {"id": 4654200, "category_id": 13, "area": 1512, "bbox": [349, 301, 46, 100], "iscrowd": 0}, {"id": 4522142, "category_id": 13, "area": 2213, "bbox": [16, 308, 56, 103], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2367, "bbox": [388, 320, 46, 68], "iscrowd": 0}, {"id": 14899968, "category_id": 21, "area": 1005, "bbox": [479, 311, 32, 64], "iscrowd": 0}, {"id": 13715997, "category_id": 21, "area": 805, "bbox": [544, 315, 38, 42], "iscrowd": 0}, {"id": 11234560, "category_id": 21, "area": 276, "bbox": [560, 314, 22, 23], "iscrowd": 0}, {"id": 15104256, "category_id": 21, "area": 157, "bbox": [639, 310, 21, 11], "iscrowd": 0}, {"id": 14838302, "category_id": 21, "area": 2752, "bbox": [57, 315, 90, 53], "iscrowd": 0}, {"id": 11495947, "category_id": 21, "area": 5711, "bbox": [289, 309, 108, 98], "iscrowd": 0}, {"id": 14966276, "category_id": 21, "area": 382, "bbox": [391, 310, 43, 13], "iscrowd": 0}, {"id": 11499010, "category_id": 21, "area": 629, "bbox": [290, 294, 50, 16], "iscrowd": 0}, {"id": 12670739, "category_id": 21, "area": 1936, "bbox": [475, 294, 56, 71], "iscrowd": 0}, {"id": 13718293, "category_id": 21, "area": 124, "bbox": [263, 300, 14, 17], "iscrowd": 0}, {"id": 13008128, "category_id": 21, "area": 1280, "bbox": [2, 315, 29, 57], "iscrowd": 0}, {"id": 13716224, "category_id": 21, "area": 73, "bbox": [426, 305, 9, 14], "iscrowd": 0}, {"id": 11496468, "category_id": 21, "area": 594, "bbox": [575, 303, 43, 16], "iscrowd": 0}, {"id": 12015891, "category_id": 21, "area": 357, "bbox": [584, 290, 32, 15], "iscrowd": 0}, {"id": 12875264, "category_id": 21, "area": 279, "bbox": [543, 300, 29, 13], "iscrowd": 0}, {"id": 12738816, "category_id": 21, "area": 176, "bbox": [619, 304, 14, 15], "iscrowd": 0}, {"id": 11949056, "category_id": 21, "area": 130, "bbox": [645, 308, 20, 12], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 161, "bbox": [391, 269, 9, 34], "iscrowd": 0}, {"id": 9510399, "category_id": 44, "area": 1125, "bbox": [266, 177, 25, 45], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 17163, "bbox": [91, 318, 233, 113], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1020, "bbox": [221, 105, 57, 208], "iscrowd": 0}, {"id": 16731392, "category_id": 88, "area": 1803, "bbox": [470, 37, 90, 330], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 4520, "bbox": [269, 0, 30, 430], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 1129, "bbox": [17, 358, 36, 62], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 14769, "bbox": [412, 0, 84, 481], "iscrowd": 0}, {"id": 16715325, "category_id": 137, "area": 2134, "bbox": [465, 81, 27, 80], "iscrowd": 0}]}, {"image_id": "ADE_val_00000829", "file_name": "ADE_val_00000829.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 7055, "bbox": [80, 301, 601, 80], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 47963, "bbox": [147, 164, 535, 165], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 97812, "bbox": [4, 1, 679, 257], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 53080, "bbox": [3, 2, 236, 383], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 74421, "bbox": [54, 315, 629, 197], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 12904, "bbox": [2, 312, 444, 198], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 4432, "bbox": [130, 207, 170, 74], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 18356, "bbox": [214, 226, 469, 156], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 593, "bbox": [508, 327, 71, 10], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 22789, "bbox": [444, 338, 239, 130], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 535, "bbox": [323, 240, 16, 127], "iscrowd": 0}]}, {"image_id": "ADE_val_00000830", "file_name": "ADE_val_00000830.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 12307, "bbox": [601, 334, 81, 178], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 185843, "bbox": [1, 19, 681, 453], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 64373, "bbox": [1, 1, 682, 218], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 35430, "bbox": [1, 315, 422, 197], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 12308, "bbox": [9, 317, 525, 195], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 14646, "bbox": [97, 61, 583, 311], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 398, "bbox": [123, 332, 14, 34], "iscrowd": 0}, {"id": 3010048, "category_id": 15, "area": 2679, "bbox": [448, 328, 155, 164], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 204, "bbox": [1, 290, 10, 28], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 397, "bbox": [103, 336, 18, 25], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 8805, "bbox": [457, 377, 147, 118], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 133, "bbox": [68, 234, 12, 26], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 262, "bbox": [4, 203, 11, 86], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 1494, "bbox": [304, 157, 309, 115], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 1027, "bbox": [17, 325, 59, 37], "iscrowd": 0}, {"id": 16712846, "category_id": 117, "area": 972, "bbox": [54, 336, 50, 39], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 3053, "bbox": [442, 469, 184, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00000831", "file_name": "ADE_val_00000831.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 69871, "bbox": [1, 0, 682, 304], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 17222, "bbox": [1, 2, 252, 163], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 62694, "bbox": [0, 1, 683, 340], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 93627, "bbox": [0, 271, 683, 241], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 32, "bbox": [599, 292, 5, 8], "iscrowd": 0}, {"id": 4135579, "category_id": 13, "area": 29, "bbox": [605, 291, 5, 9], "iscrowd": 0}, {"id": 3735726, "category_id": 13, "area": 60, "bbox": [377, 276, 7, 13], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1710, "bbox": [495, 275, 55, 38], "iscrowd": 0}, {"id": 14905617, "category_id": 21, "area": 952, "bbox": [427, 279, 44, 28], "iscrowd": 0}, {"id": 12350976, "category_id": 21, "area": 1019, "bbox": [377, 280, 52, 26], "iscrowd": 0}, {"id": 13979417, "category_id": 21, "area": 670, "bbox": [350, 276, 28, 27], "iscrowd": 0}, {"id": 12208154, "category_id": 21, "area": 187, "bbox": [1, 275, 17, 14], "iscrowd": 0}, {"id": 12475164, "category_id": 21, "area": 110, "bbox": [8, 273, 15, 15], "iscrowd": 0}, {"id": 12482069, "category_id": 21, "area": 78, "bbox": [594, 286, 9, 14], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 150, "bbox": [13, 256, 12, 14], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 11629, "bbox": [75, 0, 105, 338], "iscrowd": 0}, {"id": 16333568, "category_id": 73, "area": 8634, "bbox": [9, 40, 77, 288], "iscrowd": 0}, {"id": 16726558, "category_id": 73, "area": 3235, "bbox": [181, 0, 70, 227], "iscrowd": 0}, {"id": 16398848, "category_id": 73, "area": 1578, "bbox": [70, 102, 27, 135], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 248, "bbox": [623, 229, 9, 78], "iscrowd": 0}, {"id": 15819776, "category_id": 88, "area": 22, "bbox": [368, 242, 5, 6], "iscrowd": 0}, {"id": 15286272, "category_id": 88, "area": 406, "bbox": [349, 112, 15, 164], "iscrowd": 0}, {"id": 15425280, "category_id": 88, "area": 365, "bbox": [432, 192, 11, 94], "iscrowd": 0}, {"id": 16728064, "category_id": 88, "area": 170, "bbox": [197, 151, 12, 76], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 6297, "bbox": [470, 0, 27, 396], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 111, "bbox": [595, 280, 13, 12], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 209, "bbox": [366, 249, 11, 23], "iscrowd": 0}, {"id": 16715846, "category_id": 137, "area": 108, "bbox": [397, 258, 9, 22], "iscrowd": 0}, {"id": 14942269, "category_id": 137, "area": 351, "bbox": [296, 200, 73, 48], "iscrowd": 0}, {"id": 16718659, "category_id": 137, "area": 293, "bbox": [56, 201, 88, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00000832", "file_name": "ADE_val_00000832.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 193587, "bbox": [55, 0, 628, 380], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 21797, "bbox": [2, 2, 166, 252], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4499, "bbox": [1, 197, 58, 109], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 113670, "bbox": [1, 305, 681, 206], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 134, "bbox": [307, 325, 23, 9], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2046, "bbox": [369, 286, 38, 87], "iscrowd": 0}, {"id": 2557309, "category_id": 13, "area": 644, "bbox": [107, 289, 18, 58], "iscrowd": 0}, {"id": 2162867, "category_id": 13, "area": 309, "bbox": [119, 288, 11, 54], "iscrowd": 0}, {"id": 3604631, "category_id": 13, "area": 512, "bbox": [129, 287, 16, 59], "iscrowd": 0}, {"id": 4989355, "category_id": 13, "area": 532, "bbox": [215, 287, 17, 52], "iscrowd": 0}, {"id": 4456573, "category_id": 13, "area": 564, "bbox": [427, 294, 14, 64], "iscrowd": 0}, {"id": 3473577, "category_id": 13, "area": 1197, "bbox": [440, 285, 24, 77], "iscrowd": 0}, {"id": 5374113, "category_id": 13, "area": 2081, "bbox": [594, 273, 26, 115], "iscrowd": 0}, {"id": 5710223, "category_id": 13, "area": 2533, "bbox": [638, 278, 37, 110], "iscrowd": 0}, {"id": 5701769, "category_id": 13, "area": 92, "bbox": [141, 293, 7, 25], "iscrowd": 0}, {"id": 5243009, "category_id": 13, "area": 967, "bbox": [410, 283, 20, 79], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 208, "bbox": [37, 297, 32, 8], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 398, "bbox": [308, 333, 21, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00000833", "file_name": "ADE_val_00000833.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 183051, "bbox": [1, 1, 682, 312], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 118338, "bbox": [1, 313, 682, 198], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 17261, "bbox": [1, 289, 682, 63], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1710, "bbox": [284, 234, 44, 87], "iscrowd": 0}, {"id": 4725902, "category_id": 13, "area": 477, "bbox": [408, 257, 22, 39], "iscrowd": 0}, {"id": 2818219, "category_id": 13, "area": 462, "bbox": [600, 236, 16, 53], "iscrowd": 0}, {"id": 3670195, "category_id": 13, "area": 644, "bbox": [656, 237, 22, 57], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 3597, "bbox": [407, 156, 89, 45], "iscrowd": 0}, {"id": 8651002, "category_id": 44, "area": 529, "bbox": [532, 174, 26, 29], "iscrowd": 0}, {"id": 11342079, "category_id": 44, "area": 355, "bbox": [576, 176, 19, 29], "iscrowd": 0}, {"id": 11469055, "category_id": 44, "area": 311, "bbox": [613, 178, 22, 30], "iscrowd": 0}, {"id": 11670783, "category_id": 44, "area": 286, "bbox": [647, 181, 19, 27], "iscrowd": 0}, {"id": 9634047, "category_id": 44, "area": 377, "bbox": [634, 215, 21, 18], "iscrowd": 0}, {"id": 10363391, "category_id": 44, "area": 2165, "bbox": [69, 17, 21, 127], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 3448, "bbox": [80, 2, 18, 309], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 1690, "bbox": [492, 263, 56, 49], "iscrowd": 0}, {"id": 16455613, "category_id": 117, "area": 1469, "bbox": [434, 249, 55, 51], "iscrowd": 0}, {"id": 16711832, "category_id": 117, "area": 1360, "bbox": [551, 269, 62, 39], "iscrowd": 0}, {"id": 16449720, "category_id": 117, "area": 974, "bbox": [568, 257, 67, 49], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 3107, "bbox": [1, 153, 75, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00000834", "file_name": "ADE_val_00000834.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14009, "bbox": [2, 207, 401, 64], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 67339, "bbox": [1, 1, 682, 240], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 17962, "bbox": [1, 1, 259, 121], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 50974, "bbox": [2, 1, 681, 230], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 159881, "bbox": [2, 245, 681, 267], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 4258, "bbox": [2, 237, 681, 65], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 170, "bbox": [22, 225, 14, 40], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 11456, "bbox": [314, 206, 196, 81], "iscrowd": 0}, {"id": 11304448, "category_id": 21, "area": 7309, "bbox": [500, 207, 149, 68], "iscrowd": 0}, {"id": 14640146, "category_id": 21, "area": 1239, "bbox": [643, 218, 40, 46], "iscrowd": 0}, {"id": 13334290, "category_id": 21, "area": 377, "bbox": [18, 223, 40, 28], "iscrowd": 0}, {"id": 12026880, "category_id": 21, "area": 989, "bbox": [35, 233, 45, 28], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 8700, "bbox": [192, 153, 306, 59], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 72, "bbox": [4, 218, 8, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00000835", "file_name": "ADE_val_00000835.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 1432, "bbox": [639, 13, 43, 39], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 3141, "bbox": [205, 0, 477, 41], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 8892, "bbox": [146, 0, 523, 45], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 49396, "bbox": [1, 115, 682, 397], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 56210, "bbox": [214, 268, 469, 244], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 145052, "bbox": [29, 97, 617, 333], "iscrowd": 0}, {"id": 13004053, "category_id": 21, "area": 10875, "bbox": [554, 92, 128, 144], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 67449, "bbox": [1, 4, 682, 209], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 335, "bbox": [450, 9, 20, 19], "iscrowd": 0}, {"id": 11141347, "category_id": 44, "area": 379, "bbox": [513, 20, 21, 20], "iscrowd": 0}, {"id": 11408895, "category_id": 44, "area": 369, "bbox": [471, 11, 22, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00000836", "file_name": "ADE_val_00000836.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 125219, "bbox": [1, 1, 678, 504], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 19814, "bbox": [196, 1, 260, 143], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5103, "bbox": [250, 8, 286, 432], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 29564, "bbox": [350, 193, 294, 275], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 85126, "bbox": [0, 221, 607, 291], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 54, "bbox": [374, 224, 7, 9], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2757, "bbox": [228, 186, 46, 119], "iscrowd": 0}, {"id": 5513622, "category_id": 13, "area": 2956, "bbox": [194, 173, 31, 136], "iscrowd": 0}, {"id": 2954653, "category_id": 13, "area": 759, "bbox": [219, 176, 20, 79], "iscrowd": 0}, {"id": 3145848, "category_id": 13, "area": 1483, "bbox": [276, 172, 30, 95], "iscrowd": 0}, {"id": 2753920, "category_id": 13, "area": 164, "bbox": [237, 179, 14, 25], "iscrowd": 0}, {"id": 2162852, "category_id": 13, "area": 88, "bbox": [408, 180, 5, 29], "iscrowd": 0}, {"id": 3605406, "category_id": 13, "area": 132, "bbox": [353, 179, 11, 23], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1504, "bbox": [522, 190, 56, 35], "iscrowd": 0}, {"id": 14242048, "category_id": 21, "area": 360, "bbox": [483, 187, 20, 31], "iscrowd": 0}, {"id": 14503424, "category_id": 21, "area": 706, "bbox": [460, 178, 47, 28], "iscrowd": 0}, {"id": 11557376, "category_id": 21, "area": 5594, "bbox": [572, 170, 95, 84], "iscrowd": 0}, {"id": 11565312, "category_id": 21, "area": 81, "bbox": [264, 181, 14, 13], "iscrowd": 0}, {"id": 12024320, "category_id": 21, "area": 349, "bbox": [272, 178, 20, 48], "iscrowd": 0}, {"id": 12735511, "category_id": 21, "area": 126, "bbox": [299, 179, 17, 11], "iscrowd": 0}, {"id": 11692288, "category_id": 21, "area": 283, "bbox": [445, 180, 26, 21], "iscrowd": 0}, {"id": 12345600, "category_id": 21, "area": 6874, "bbox": [385, 203, 120, 85], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1096, "bbox": [352, 214, 24, 52], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1855, "bbox": [370, 73, 36, 59], "iscrowd": 0}, {"id": 9634046, "category_id": 44, "area": 3605, "bbox": [178, 48, 77, 66], "iscrowd": 0}, {"id": 11474175, "category_id": 44, "area": 312, "bbox": [482, 92, 13, 25], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 645, "bbox": [196, 121, 27, 37], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 22011, "bbox": [595, 1, 87, 510], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 2209, "bbox": [317, 1, 14, 185], "iscrowd": 0}, {"id": 15532102, "category_id": 94, "area": 1399, "bbox": [380, 131, 10, 209], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 1960, "bbox": [496, 169, 64, 52], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 85, "bbox": [376, 233, 4, 23], "iscrowd": 0}, {"id": 15860190, "category_id": 126, "area": 8019, "bbox": [16, 391, 100, 101], "iscrowd": 0}, {"id": 15925503, "category_id": 126, "area": 3803, "bbox": [134, 330, 71, 66], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 2841, "bbox": [397, 312, 73, 134], "iscrowd": 0}]}, {"image_id": "ADE_val_00000837", "file_name": "ADE_val_00000837.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 89057, "bbox": [0, 114, 683, 282], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 138341, "bbox": [0, 0, 683, 269], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 25394, "bbox": [0, 211, 682, 198], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 60231, "bbox": [0, 376, 683, 136], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 1265, "bbox": [203, 389, 250, 18], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 17879, "bbox": [0, 372, 682, 87], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2393, "bbox": [58, 366, 625, 35], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 205, "bbox": [165, 363, 11, 32], "iscrowd": 0}, {"id": 3997826, "category_id": 13, "area": 80, "bbox": [137, 368, 6, 24], "iscrowd": 0}, {"id": 5111932, "category_id": 13, "area": 81, "bbox": [203, 370, 9, 16], "iscrowd": 0}, {"id": 3604645, "category_id": 13, "area": 14, "bbox": [222, 367, 3, 5], "iscrowd": 0}, {"id": 4063365, "category_id": 13, "area": 59, "bbox": [212, 371, 10, 14], "iscrowd": 0}, {"id": 5636237, "category_id": 13, "area": 19, "bbox": [86, 364, 3, 8], "iscrowd": 0}, {"id": 5181817, "category_id": 13, "area": 8, "bbox": [91, 366, 3, 4], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 150, "bbox": [191, 367, 25, 11], "iscrowd": 0}, {"id": 12343040, "category_id": 21, "area": 77, "bbox": [0, 364, 12, 11], "iscrowd": 0}, {"id": 12278272, "category_id": 21, "area": 347, "bbox": [25, 369, 29, 15], "iscrowd": 0}, {"id": 12418048, "category_id": 21, "area": 301, "bbox": [613, 365, 28, 20], "iscrowd": 0}, {"id": 11818246, "category_id": 21, "area": 122, "bbox": [7, 364, 18, 10], "iscrowd": 0}, {"id": 11749660, "category_id": 21, "area": 73, "bbox": [50, 367, 12, 9], "iscrowd": 0}, {"id": 13917184, "category_id": 21, "area": 102, "bbox": [126, 367, 14, 11], "iscrowd": 0}, {"id": 14451712, "category_id": 21, "area": 159, "bbox": [149, 363, 20, 17], "iscrowd": 0}, {"id": 13403136, "category_id": 21, "area": 77, "bbox": [65, 367, 20, 6], "iscrowd": 0}, {"id": 12878336, "category_id": 21, "area": 97, "bbox": [144, 364, 15, 15], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 39, "bbox": [219, 372, 7, 8], "iscrowd": 0}, {"id": 10949119, "category_id": 44, "area": 26, "bbox": [218, 352, 4, 7], "iscrowd": 0}, {"id": 8259839, "category_id": 44, "area": 16, "bbox": [133, 358, 4, 5], "iscrowd": 0}, {"id": 11405823, "category_id": 44, "area": 1328, "bbox": [425, 297, 41, 125], "iscrowd": 0}, {"id": 10554111, "category_id": 44, "area": 64, "bbox": [60, 356, 7, 24], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 33, "bbox": [198, 376, 8, 9], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 216, "bbox": [68, 352, 29, 10], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 2257, "bbox": [541, 13, 59, 359], "iscrowd": 0}, {"id": 16732936, "category_id": 88, "area": 237, "bbox": [322, 230, 32, 91], "iscrowd": 0}, {"id": 15090710, "category_id": 88, "area": 626, "bbox": [234, 181, 11, 149], "iscrowd": 0}, {"id": 16723456, "category_id": 88, "area": 613, "bbox": [621, 189, 18, 174], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 177, "bbox": [25, 362, 25, 11], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 396, "bbox": [96, 289, 66, 100], "iscrowd": 0}, {"id": 16650519, "category_id": 137, "area": 74, "bbox": [143, 348, 5, 35], "iscrowd": 0}, {"id": 16711732, "category_id": 137, "area": 47, "bbox": [213, 346, 5, 24], "iscrowd": 0}, {"id": 16713522, "category_id": 137, "area": 203, "bbox": [18, 304, 48, 71], "iscrowd": 0}, {"id": 15539013, "category_id": 137, "area": 44, "bbox": [90, 332, 24, 22], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 422, "bbox": [453, 382, 16, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000838", "file_name": "ADE_val_00000838.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 61465, "bbox": [1, 40, 681, 231], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 28653, "bbox": [1, 1, 682, 167], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 55559, "bbox": [25, 1, 642, 253], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 143270, "bbox": [0, 253, 683, 259], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 10292, "bbox": [0, 275, 683, 34], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 18582, "bbox": [179, 224, 283, 96], "iscrowd": 0}, {"id": 14700058, "category_id": 21, "area": 6317, "bbox": [130, 213, 162, 66], "iscrowd": 0}, {"id": 14897152, "category_id": 21, "area": 365, "bbox": [243, 214, 51, 18], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 2612, "bbox": [576, 229, 98, 42], "iscrowd": 0}, {"id": 47871, "category_id": 33, "area": 5114, "bbox": [1, 226, 98, 54], "iscrowd": 0}, {"id": 45819, "category_id": 33, "area": 1799, "bbox": [100, 218, 58, 60], "iscrowd": 0}, {"id": 54783, "category_id": 33, "area": 1247, "bbox": [277, 212, 141, 18], "iscrowd": 0}, {"id": 49151, "category_id": 33, "area": 3597, "bbox": [415, 200, 105, 54], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 179, "bbox": [409, 146, 7, 27], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 585, "bbox": [624, 242, 22, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000839", "file_name": "ADE_val_00000839.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 136096, "bbox": [1, 1, 767, 510], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 119544, "bbox": [0, 0, 605, 371], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 38387, "bbox": [1, 364, 607, 137], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 36675, "bbox": [1, 410, 646, 102], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 2372, "bbox": [415, 327, 191, 25], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 30515, "bbox": [1, 302, 606, 95], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 1897, "bbox": [528, 276, 50, 43], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 4437, "bbox": [290, 319, 299, 58], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 104, "bbox": [213, 263, 8, 38], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 367, "bbox": [575, 352, 33, 14], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1894, "bbox": [260, 16, 31, 315], "iscrowd": 0}, {"id": 15682331, "category_id": 88, "area": 2160, "bbox": [257, 1, 113, 335], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 580, "bbox": [55, 269, 41, 15], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 908, "bbox": [570, 246, 26, 114], "iscrowd": 0}, {"id": 15140148, "category_id": 137, "area": 405, "bbox": [34, 270, 17, 59], "iscrowd": 0}]}, {"image_id": "ADE_val_00000840", "file_name": "ADE_val_00000840.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 147002, "bbox": [0, 76, 683, 349], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 75776, "bbox": [1, 1, 682, 141], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 30817, "bbox": [1, 131, 432, 310], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 42417, "bbox": [1, 423, 680, 87], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 24867, "bbox": [1, 385, 680, 79], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 9070, "bbox": [256, 314, 315, 48], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 4416, "bbox": [336, 378, 123, 55], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1385, "bbox": [125, 277, 25, 165], "iscrowd": 0}, {"id": 9898483, "category_id": 44, "area": 887, "bbox": [228, 254, 28, 40], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 4161, "bbox": [475, 362, 206, 35], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 550, "bbox": [234, 3, 9, 111], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 2475, "bbox": [434, 240, 47, 185], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 90, "bbox": [282, 314, 9, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00000841", "file_name": "ADE_val_00000841.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 147461, "bbox": [1, 0, 767, 327], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 70038, "bbox": [2, 1, 765, 310], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 53221, "bbox": [17, 346, 605, 166], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1515, "bbox": [87, 327, 63, 30], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 393, "bbox": [278, 69, 469, 41], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6250, "bbox": [1, 300, 49, 212], "iscrowd": 0}, {"id": 4919474, "category_id": 13, "area": 747, "bbox": [53, 313, 21, 68], "iscrowd": 0}, {"id": 3997867, "category_id": 13, "area": 105, "bbox": [468, 291, 10, 17], "iscrowd": 0}, {"id": 3541139, "category_id": 13, "area": 129, "bbox": [448, 300, 9, 21], "iscrowd": 0}, {"id": 5963953, "category_id": 13, "area": 149, "bbox": [455, 291, 10, 22], "iscrowd": 0}, {"id": 2300044, "category_id": 13, "area": 109, "bbox": [496, 294, 11, 16], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 12372, "bbox": [170, 322, 167, 101], "iscrowd": 0}, {"id": 12932608, "category_id": 21, "area": 46205, "bbox": [448, 330, 320, 182], "iscrowd": 0}, {"id": 14515717, "category_id": 21, "area": 1674, "bbox": [446, 307, 61, 45], "iscrowd": 0}, {"id": 13323803, "category_id": 21, "area": 2158, "bbox": [382, 311, 65, 41], "iscrowd": 0}, {"id": 12409600, "category_id": 21, "area": 2595, "bbox": [316, 307, 71, 46], "iscrowd": 0}, {"id": 13531392, "category_id": 21, "area": 436, "bbox": [268, 315, 50, 20], "iscrowd": 0}, {"id": 14640648, "category_id": 21, "area": 1858, "bbox": [152, 316, 96, 66], "iscrowd": 0}, {"id": 14176798, "category_id": 21, "area": 268, "bbox": [6, 311, 32, 15], "iscrowd": 0}, {"id": 11819520, "category_id": 21, "area": 1206, "bbox": [14, 315, 50, 42], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 3364, "bbox": [3, 159, 60, 75], "iscrowd": 0}, {"id": 8201198, "category_id": 44, "area": 321, "bbox": [92, 285, 15, 63], "iscrowd": 0}, {"id": 8791031, "category_id": 44, "area": 551, "bbox": [392, 245, 19, 31], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 483, "bbox": [363, 102, 55, 208], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 18971, "bbox": [476, 261, 292, 133], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 452, "bbox": [58, 358, 30, 34], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 6445, "bbox": [64, 121, 43, 382], "iscrowd": 0}, {"id": 16715027, "category_id": 137, "area": 254, "bbox": [104, 275, 9, 77], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 7752, "bbox": [118, 411, 86, 99], "iscrowd": 0}]}, {"image_id": "ADE_val_00000842", "file_name": "ADE_val_00000842.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 190676, "bbox": [0, 0, 683, 342], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7178, "bbox": [168, 150, 98, 181], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 75082, "bbox": [0, 356, 682, 141], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 31319, "bbox": [1, 322, 682, 189], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 87, "bbox": [208, 318, 13, 10], "iscrowd": 0}, {"id": 4590499, "category_id": 13, "area": 80, "bbox": [86, 302, 9, 18], "iscrowd": 0}, {"id": 4326313, "category_id": 13, "area": 60, "bbox": [40, 303, 6, 17], "iscrowd": 0}, {"id": 4259977, "category_id": 13, "area": 88, "bbox": [34, 303, 7, 18], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 4665, "bbox": [180, 320, 146, 47], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 676, "bbox": [19, 323, 26, 30], "iscrowd": 0}, {"id": 2299377, "category_id": 43, "area": 598, "bbox": [125, 326, 24, 29], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 196, "bbox": [137, 322, 34, 12], "iscrowd": 0}, {"id": 326852, "category_id": 70, "area": 401, "bbox": [45, 319, 41, 16], "iscrowd": 0}, {"id": 61629, "category_id": 70, "area": 155, "bbox": [172, 321, 23, 13], "iscrowd": 0}, {"id": 1436120, "category_id": 70, "area": 200, "bbox": [85, 322, 29, 18], "iscrowd": 0}, {"id": 65450, "category_id": 70, "area": 68, "bbox": [202, 322, 12, 12], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 630, "bbox": [74, 252, 16, 101], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 2082, "bbox": [336, 3, 7, 372], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 7166, "bbox": [623, 276, 60, 182], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 4690, "bbox": [558, 237, 124, 39], "iscrowd": 0}, {"id": 61569, "category_id": 124, "area": 2936, "bbox": [291, 238, 80, 41], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 333, "bbox": [377, 326, 22, 19], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 152, "bbox": [406, 327, 14, 27], "iscrowd": 0}, {"id": 65527, "category_id": 128, "area": 240, "bbox": [426, 323, 17, 33], "iscrowd": 0}, {"id": 655352, "category_id": 128, "area": 261, "bbox": [468, 318, 27, 37], "iscrowd": 0}, {"id": 1699815, "category_id": 128, "area": 211, "bbox": [495, 323, 20, 34], "iscrowd": 0}, {"id": 65516, "category_id": 128, "area": 113, "bbox": [444, 337, 34, 19], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 3788, "bbox": [98, 1, 73, 137], "iscrowd": 0}, {"id": 16714579, "category_id": 150, "area": 2783, "bbox": [342, 90, 27, 143], "iscrowd": 0}, {"id": 15997251, "category_id": 150, "area": 2074, "bbox": [224, 95, 27, 139], "iscrowd": 0}]}, {"image_id": "ADE_val_00000843", "file_name": "ADE_val_00000843.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 218125, "bbox": [0, 0, 512, 581], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 27928, "bbox": [229, 0, 145, 403], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 28956, "bbox": [0, 523, 377, 160], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 6000, "bbox": [291, 521, 221, 117], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 820, "bbox": [354, 528, 26, 62], "iscrowd": 0}, {"id": 2431122, "category_id": 13, "area": 1244, "bbox": [381, 541, 25, 87], "iscrowd": 0}, {"id": 5375611, "category_id": 13, "area": 2053, "bbox": [406, 547, 42, 75], "iscrowd": 0}, {"id": 2949265, "category_id": 13, "area": 316, "bbox": [382, 530, 28, 38], "iscrowd": 0}, {"id": 2228374, "category_id": 13, "area": 457, "bbox": [345, 522, 14, 51], "iscrowd": 0}, {"id": 3276937, "category_id": 13, "area": 302, "bbox": [337, 529, 10, 44], "iscrowd": 0}, {"id": 2956921, "category_id": 13, "area": 1530, "bbox": [309, 532, 31, 93], "iscrowd": 0}, {"id": 4261243, "category_id": 13, "area": 428, "bbox": [301, 535, 17, 71], "iscrowd": 0}, {"id": 3413381, "category_id": 13, "area": 656, "bbox": [293, 526, 18, 76], "iscrowd": 0}, {"id": 3477665, "category_id": 13, "area": 393, "bbox": [329, 525, 14, 50], "iscrowd": 0}, {"id": 3735695, "category_id": 13, "area": 40, "bbox": [329, 524, 7, 11], "iscrowd": 0}, {"id": 3866802, "category_id": 13, "area": 61, "bbox": [314, 526, 11, 10], "iscrowd": 0}, {"id": 4849785, "category_id": 13, "area": 116, "bbox": [244, 525, 13, 15], "iscrowd": 0}, {"id": 4325543, "category_id": 13, "area": 113, "bbox": [229, 532, 11, 19], "iscrowd": 0}, {"id": 2228910, "category_id": 13, "area": 1156, "bbox": [445, 533, 32, 85], "iscrowd": 0}, {"id": 4784289, "category_id": 13, "area": 724, "bbox": [159, 532, 32, 83], "iscrowd": 0}, {"id": 3342499, "category_id": 13, "area": 1261, "bbox": [179, 538, 22, 83], "iscrowd": 0}, {"id": 2949269, "category_id": 13, "area": 1417, "bbox": [110, 534, 38, 81], "iscrowd": 0}, {"id": 4526480, "category_id": 13, "area": 350, "bbox": [404, 528, 14, 36], "iscrowd": 0}, {"id": 2302620, "category_id": 13, "area": 395, "bbox": [419, 528, 25, 30], "iscrowd": 0}, {"id": 4391085, "category_id": 13, "area": 122, "bbox": [416, 525, 10, 21], "iscrowd": 0}, {"id": 4329624, "category_id": 13, "area": 896, "bbox": [473, 521, 23, 63], "iscrowd": 0}, {"id": 5374130, "category_id": 13, "area": 280, "bbox": [443, 519, 14, 37], "iscrowd": 0}, {"id": 5840774, "category_id": 13, "area": 71, "bbox": [466, 525, 10, 13], "iscrowd": 0}, {"id": 5308594, "category_id": 13, "area": 75, "bbox": [392, 529, 12, 14], "iscrowd": 0}, {"id": 5316738, "category_id": 13, "area": 64, "bbox": [196, 514, 7, 17], "iscrowd": 0}, {"id": 4063395, "category_id": 13, "area": 67, "bbox": [186, 516, 8, 14], "iscrowd": 0}, {"id": 3086995, "category_id": 13, "area": 58, "bbox": [165, 516, 9, 10], "iscrowd": 0}, {"id": 4915355, "category_id": 13, "area": 52, "bbox": [152, 517, 9, 10], "iscrowd": 0}, {"id": 5903761, "category_id": 13, "area": 35, "bbox": [146, 519, 6, 7], "iscrowd": 0}, {"id": 5248416, "category_id": 13, "area": 38, "bbox": [138, 519, 8, 7], "iscrowd": 0}, {"id": 4332460, "category_id": 13, "area": 710, "bbox": [442, 539, 19, 77], "iscrowd": 0}, {"id": 4072056, "category_id": 13, "area": 122, "bbox": [450, 526, 14, 16], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 9307, "bbox": [359, 592, 153, 91], "iscrowd": 0}, {"id": 12147968, "category_id": 21, "area": 3139, "bbox": [0, 575, 71, 63], "iscrowd": 0}, {"id": 11296268, "category_id": 21, "area": 3706, "bbox": [218, 540, 79, 65], "iscrowd": 0}, {"id": 13847571, "category_id": 21, "area": 43, "bbox": [290, 517, 10, 6], "iscrowd": 0}, {"id": 14972439, "category_id": 21, "area": 740, "bbox": [198, 518, 37, 27], "iscrowd": 0}, {"id": 14502656, "category_id": 21, "area": 248, "bbox": [163, 526, 35, 14], "iscrowd": 0}, {"id": 11688206, "category_id": 21, "area": 753, "bbox": [138, 527, 40, 29], "iscrowd": 0}, {"id": 12476443, "category_id": 21, "area": 1246, "bbox": [86, 517, 60, 48], "iscrowd": 0}, {"id": 12155904, "category_id": 21, "area": 575, "bbox": [49, 521, 64, 42], "iscrowd": 0}, {"id": 13192704, "category_id": 21, "area": 858, "bbox": [1, 506, 49, 24], "iscrowd": 0}, {"id": 12282629, "category_id": 21, "area": 5880, "bbox": [0, 527, 113, 73], "iscrowd": 0}, {"id": 11883294, "category_id": 21, "area": 239, "bbox": [298, 517, 30, 15], "iscrowd": 0}, {"id": 14578689, "category_id": 21, "area": 111, "bbox": [229, 522, 16, 15], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 981, "bbox": [82, 388, 21, 52], "iscrowd": 0}, {"id": 9111027, "category_id": 44, "area": 406, "bbox": [187, 439, 14, 33], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 669, "bbox": [301, 498, 38, 25], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 119, "bbox": [227, 492, 10, 17], "iscrowd": 0}, {"id": 4783872, "category_id": 87, "area": 158, "bbox": [215, 488, 11, 18], "iscrowd": 0}, {"id": 3538704, "category_id": 87, "area": 105, "bbox": [207, 485, 8, 20], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 105, "bbox": [187, 411, 42, 13], "iscrowd": 0}, {"id": 16728832, "category_id": 88, "area": 220, "bbox": [85, 348, 64, 20], "iscrowd": 0}, {"id": 16531456, "category_id": 88, "area": 316, "bbox": [181, 393, 10, 133], "iscrowd": 0}, {"id": 16730112, "category_id": 88, "area": 1029, "bbox": [70, 318, 20, 202], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 516, "bbox": [264, 600, 14, 47], "iscrowd": 0}, {"id": 16711726, "category_id": 94, "area": 688, "bbox": [303, 606, 14, 52], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 1092, "bbox": [253, 522, 65, 41], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 409, "bbox": [371, 557, 21, 31], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 449, "bbox": [359, 469, 22, 25], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 235, "bbox": [213, 456, 31, 38], "iscrowd": 0}, {"id": 16715591, "category_id": 150, "area": 139, "bbox": [243, 463, 11, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00000844", "file_name": "ADE_val_00000844.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 250598, "bbox": [2, 0, 681, 512], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 45925, "bbox": [337, 0, 346, 254], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 15658, "bbox": [481, 136, 182, 260], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 19357, "bbox": [364, 419, 319, 93], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 8183, "bbox": [234, 414, 449, 98], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 618, "bbox": [63, 385, 500, 62], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 931, "bbox": [502, 391, 58, 30], "iscrowd": 0}, {"id": 12809472, "category_id": 21, "area": 234, "bbox": [505, 407, 15, 19], "iscrowd": 0}, {"id": 13796381, "category_id": 21, "area": 1211, "bbox": [632, 374, 46, 33], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1489, "bbox": [591, 395, 92, 21], "iscrowd": 0}, {"id": 250876, "category_id": 33, "area": 793, "bbox": [528, 395, 64, 20], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 188, "bbox": [205, 398, 42, 78], "iscrowd": 0}, {"id": 16736000, "category_id": 96, "area": 68, "bbox": [454, 387, 29, 49], "iscrowd": 0}, {"id": 14775813, "category_id": 96, "area": 198, "bbox": [118, 398, 49, 94], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 28, "bbox": [621, 390, 9, 4], "iscrowd": 0}]}, {"image_id": "ADE_val_00000845", "file_name": "ADE_val_00000845.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 129335, "bbox": [0, 0, 683, 371], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 7919, "bbox": [1, 1, 195, 75], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 89247, "bbox": [3, 0, 680, 334], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 87174, "bbox": [1, 359, 682, 153], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 6032, "bbox": [233, 362, 450, 38], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 120, "bbox": [409, 306, 6, 27], "iscrowd": 0}, {"id": 4000941, "category_id": 13, "area": 870, "bbox": [459, 305, 27, 73], "iscrowd": 0}, {"id": 2560381, "category_id": 13, "area": 424, "bbox": [493, 305, 25, 70], "iscrowd": 0}, {"id": 3154863, "category_id": 13, "area": 857, "bbox": [503, 309, 24, 72], "iscrowd": 0}, {"id": 4522124, "category_id": 13, "area": 800, "bbox": [551, 308, 25, 72], "iscrowd": 0}, {"id": 4128889, "category_id": 13, "area": 203, "bbox": [394, 307, 14, 25], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 11574, "bbox": [261, 312, 200, 83], "iscrowd": 0}, {"id": 14698752, "category_id": 21, "area": 3880, "bbox": [14, 315, 100, 56], "iscrowd": 0}, {"id": 11552768, "category_id": 21, "area": 230, "bbox": [1, 337, 13, 22], "iscrowd": 0}, {"id": 13659136, "category_id": 21, "area": 590, "bbox": [1, 471, 25, 40], "iscrowd": 0}, {"id": 14640896, "category_id": 21, "area": 5244, "bbox": [105, 327, 139, 53], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 21, "bbox": [221, 339, 7, 10], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 143, "bbox": [63, 267, 21, 15], "iscrowd": 0}, {"id": 5300736, "category_id": 87, "area": 106, "bbox": [34, 270, 19, 12], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 298, "bbox": [107, 244, 15, 45], "iscrowd": 0}, {"id": 16730650, "category_id": 88, "area": 1454, "bbox": [519, 203, 22, 183], "iscrowd": 0}]}, {"image_id": "ADE_val_00000846", "file_name": "ADE_val_00000846.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 230990, "bbox": [1, 0, 682, 511], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 2874, "bbox": [376, 0, 59, 90], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 85613, "bbox": [52, 255, 631, 257], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 856, "bbox": [382, 245, 22, 61], "iscrowd": 0}, {"id": 4259994, "category_id": 13, "area": 903, "bbox": [407, 248, 26, 58], "iscrowd": 0}, {"id": 2949527, "category_id": 13, "area": 201, "bbox": [457, 248, 18, 22], "iscrowd": 0}, {"id": 3276937, "category_id": 13, "area": 173, "bbox": [396, 242, 13, 27], "iscrowd": 0}, {"id": 2559366, "category_id": 13, "area": 163, "bbox": [372, 243, 7, 41], "iscrowd": 0}, {"id": 3938951, "category_id": 13, "area": 119, "bbox": [403, 243, 9, 37], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2863, "bbox": [453, 99, 71, 52], "iscrowd": 0}, {"id": 10690038, "category_id": 44, "area": 1865, "bbox": [269, 162, 52, 38], "iscrowd": 0}, {"id": 9112807, "category_id": 44, "area": 4110, "bbox": [237, 244, 94, 45], "iscrowd": 0}, {"id": 11476723, "category_id": 44, "area": 201, "bbox": [374, 163, 11, 21], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 13003, "bbox": [0, 0, 212, 165], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 107, "bbox": [456, 169, 12, 19], "iscrowd": 0}, {"id": 15353623, "category_id": 88, "area": 526, "bbox": [566, 48, 57, 70], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 323, "bbox": [484, 202, 23, 15], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 240, "bbox": [481, 279, 16, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00000847", "file_name": "ADE_val_00000847.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 205193, "bbox": [0, 0, 683, 407], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 7003, "bbox": [404, 0, 129, 129], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 39836, "bbox": [47, 299, 445, 213], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 56090, "bbox": [1, 301, 681, 211], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 5764, "bbox": [464, 300, 56, 158], "iscrowd": 0}, {"id": 4072361, "category_id": 13, "area": 3902, "bbox": [518, 301, 40, 144], "iscrowd": 0}, {"id": 2757811, "category_id": 13, "area": 5672, "bbox": [554, 277, 57, 161], "iscrowd": 0}, {"id": 2297729, "category_id": 13, "area": 5453, "bbox": [611, 288, 56, 154], "iscrowd": 0}, {"id": 2228374, "category_id": 13, "area": 979, "bbox": [639, 279, 30, 136], "iscrowd": 0}, {"id": 3735720, "category_id": 13, "area": 403, "bbox": [434, 290, 15, 46], "iscrowd": 0}, {"id": 2031775, "category_id": 13, "area": 262, "bbox": [428, 294, 10, 43], "iscrowd": 0}, {"id": 2752689, "category_id": 13, "area": 379, "bbox": [417, 290, 12, 48], "iscrowd": 0}, {"id": 5638810, "category_id": 13, "area": 490, "bbox": [382, 289, 16, 49], "iscrowd": 0}, {"id": 2359449, "category_id": 13, "area": 352, "bbox": [397, 294, 12, 43], "iscrowd": 0}, {"id": 5776030, "category_id": 13, "area": 826, "bbox": [327, 293, 32, 59], "iscrowd": 0}, {"id": 2630571, "category_id": 13, "area": 45, "bbox": [412, 290, 6, 12], "iscrowd": 0}, {"id": 3019178, "category_id": 13, "area": 124, "bbox": [413, 295, 8, 34], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 560, "bbox": [444, 310, 39, 24], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 577, "bbox": [524, 244, 25, 25], "iscrowd": 0}, {"id": 10491898, "category_id": 44, "area": 1113, "bbox": [229, 176, 76, 16], "iscrowd": 0}, {"id": 11406335, "category_id": 44, "area": 444, "bbox": [524, 221, 24, 23], "iscrowd": 0}, {"id": 8067815, "category_id": 44, "area": 2135, "bbox": [67, 165, 45, 51], "iscrowd": 0}, {"id": 8847609, "category_id": 44, "area": 657, "bbox": [199, 204, 25, 33], "iscrowd": 0}, {"id": 11075837, "category_id": 44, "area": 1242, "bbox": [228, 199, 77, 17], "iscrowd": 0}, {"id": 9244671, "category_id": 44, "area": 1129, "bbox": [228, 224, 77, 16], "iscrowd": 0}, {"id": 9634047, "category_id": 44, "area": 1197, "bbox": [228, 247, 76, 17], "iscrowd": 0}, {"id": 10162147, "category_id": 44, "area": 39, "bbox": [461, 277, 6, 8], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 745, "bbox": [403, 259, 32, 31], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 178, "bbox": [395, 109, 52, 15], "iscrowd": 0}, {"id": 15345936, "category_id": 88, "area": 52, "bbox": [576, 156, 18, 7], "iscrowd": 0}, {"id": 16728320, "category_id": 88, "area": 208, "bbox": [534, 1, 38, 9], "iscrowd": 0}, {"id": 14759168, "category_id": 88, "area": 55, "bbox": [461, 184, 26, 12], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 1080, "bbox": [509, 286, 62, 33], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 247, "bbox": [540, 301, 18, 22], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 456, "bbox": [413, 213, 23, 51], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1017, "bbox": [53, 320, 30, 59], "iscrowd": 0}]}, {"image_id": "ADE_val_00000848", "file_name": "ADE_val_00000848.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 99961, "bbox": [2, 2, 639, 281], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 89454, "bbox": [4, 0, 678, 284], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 112665, "bbox": [0, 330, 683, 182], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 6832, "bbox": [0, 321, 683, 38], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 80, "bbox": [378, 290, 12, 10], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 3064, "bbox": [486, 299, 108, 42], "iscrowd": 0}, {"id": 14314240, "category_id": 21, "area": 5425, "bbox": [291, 300, 154, 51], "iscrowd": 0}, {"id": 13850112, "category_id": 21, "area": 2156, "bbox": [608, 289, 74, 42], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 24917, "bbox": [0, 281, 682, 58], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 443, "bbox": [29, 242, 12, 87], "iscrowd": 0}, {"id": 8720895, "category_id": 44, "area": 341, "bbox": [49, 301, 15, 45], "iscrowd": 0}, {"id": 9898495, "category_id": 44, "area": 269, "bbox": [260, 301, 12, 42], "iscrowd": 0}, {"id": 11209192, "category_id": 44, "area": 180, "bbox": [453, 300, 9, 37], "iscrowd": 0}, {"id": 11404786, "category_id": 44, "area": 278, "bbox": [644, 201, 12, 26], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 661, "bbox": [636, 109, 45, 182], "iscrowd": 0}]}, {"image_id": "ADE_val_00000849", "file_name": "ADE_val_00000849.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 147189, "bbox": [0, 1, 650, 417], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 57961, "bbox": [167, 1, 516, 239], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 35244, "bbox": [268, 4, 414, 402], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 42601, "bbox": [1, 380, 682, 132], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 6898, "bbox": [2, 355, 681, 125], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 106, "bbox": [620, 345, 30, 10], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 276, "bbox": [202, 362, 16, 27], "iscrowd": 0}, {"id": 5570694, "category_id": 13, "area": 115, "bbox": [240, 372, 12, 13], "iscrowd": 0}, {"id": 2760582, "category_id": 13, "area": 182, "bbox": [396, 356, 9, 34], "iscrowd": 0}, {"id": 5505412, "category_id": 13, "area": 116, "bbox": [431, 351, 7, 27], "iscrowd": 0}, {"id": 3017112, "category_id": 13, "area": 48, "bbox": [441, 351, 5, 17], "iscrowd": 0}, {"id": 4131461, "category_id": 13, "area": 138, "bbox": [440, 355, 14, 19], "iscrowd": 0}, {"id": 5898625, "category_id": 13, "area": 129, "bbox": [670, 346, 8, 25], "iscrowd": 0}, {"id": 4915365, "category_id": 13, "area": 52, "bbox": [522, 355, 8, 12], "iscrowd": 0}, {"id": 2621578, "category_id": 13, "area": 641, "bbox": [243, 396, 37, 30], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 20864, "bbox": [87, 385, 269, 121], "iscrowd": 0}, {"id": 13128984, "category_id": 21, "area": 1504, "bbox": [430, 359, 97, 51], "iscrowd": 0}, {"id": 11238146, "category_id": 21, "area": 6540, "bbox": [434, 367, 135, 68], "iscrowd": 0}, {"id": 15106835, "category_id": 21, "area": 1717, "bbox": [535, 356, 67, 45], "iscrowd": 0}, {"id": 12804110, "category_id": 21, "area": 782, "bbox": [590, 357, 42, 28], "iscrowd": 0}, {"id": 11892736, "category_id": 21, "area": 175, "bbox": [607, 354, 28, 21], "iscrowd": 0}, {"id": 12602112, "category_id": 21, "area": 102, "bbox": [617, 352, 20, 18], "iscrowd": 0}, {"id": 13720320, "category_id": 21, "area": 37, "bbox": [630, 351, 9, 13], "iscrowd": 0}, {"id": 14306070, "category_id": 21, "area": 31, "bbox": [565, 353, 11, 3], "iscrowd": 0}, {"id": 14243842, "category_id": 21, "area": 60, "bbox": [567, 349, 16, 7], "iscrowd": 0}, {"id": 11557888, "category_id": 21, "area": 84, "bbox": [580, 349, 14, 9], "iscrowd": 0}, {"id": 12147978, "category_id": 21, "area": 114, "bbox": [593, 349, 19, 7], "iscrowd": 0}, {"id": 11304205, "category_id": 21, "area": 39, "bbox": [612, 349, 11, 5], "iscrowd": 0}, {"id": 11226112, "category_id": 21, "area": 48, "bbox": [633, 346, 10, 8], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 2794, "bbox": [1, 403, 75, 47], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 32, "bbox": [500, 331, 4, 13], "iscrowd": 0}, {"id": 9377533, "category_id": 44, "area": 80, "bbox": [514, 323, 5, 36], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1650, "bbox": [378, 208, 33, 206], "iscrowd": 0}, {"id": 16729628, "category_id": 88, "area": 32, "bbox": [585, 326, 5, 15], "iscrowd": 0}, {"id": 16207109, "category_id": 88, "area": 385, "bbox": [553, 251, 22, 103], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 29, "bbox": [392, 370, 8, 5], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 1400, "bbox": [69, 314, 61, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00000850", "file_name": "ADE_val_00000850.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 5015, "bbox": [0, 0, 451, 30], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 5225, "bbox": [529, 147, 152, 165], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 228184, "bbox": [0, 63, 682, 447], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6330, "bbox": [0, 55, 241, 62], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 452, "bbox": [325, 30, 15, 59], "iscrowd": 0}, {"id": 3932284, "category_id": 13, "area": 70, "bbox": [350, 30, 13, 22], "iscrowd": 0}, {"id": 4657290, "category_id": 13, "area": 632, "bbox": [369, 30, 20, 68], "iscrowd": 0}, {"id": 4788122, "category_id": 13, "area": 104, "bbox": [380, 34, 12, 31], "iscrowd": 0}, {"id": 5243017, "category_id": 13, "area": 1333, "bbox": [392, 28, 32, 74], "iscrowd": 0}, {"id": 5570704, "category_id": 13, "area": 637, "bbox": [423, 32, 15, 68], "iscrowd": 0}, {"id": 2162824, "category_id": 13, "area": 326, "bbox": [443, 35, 14, 51], "iscrowd": 0}, {"id": 3014825, "category_id": 13, "area": 2801, "bbox": [285, 21, 44, 113], "iscrowd": 0}, {"id": 3088799, "category_id": 13, "area": 1072, "bbox": [350, 31, 25, 71], "iscrowd": 0}, {"id": 3014814, "category_id": 13, "area": 375, "bbox": [69, 29, 20, 40], "iscrowd": 0}, {"id": 4003499, "category_id": 13, "area": 760, "bbox": [242, 27, 35, 41], "iscrowd": 0}, {"id": 3476862, "category_id": 13, "area": 233, "bbox": [334, 32, 11, 49], "iscrowd": 0}, {"id": 2491037, "category_id": 13, "area": 2784, "bbox": [134, 17, 41, 117], "iscrowd": 0}, {"id": 5046408, "category_id": 13, "area": 2574, "bbox": [166, 20, 40, 119], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 233, "bbox": [341, 46, 12, 27], "iscrowd": 0}, {"id": 12352768, "category_id": 21, "area": 643, "bbox": [211, 45, 76, 26], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 4884, "bbox": [273, 9, 187, 64], "iscrowd": 0}, {"id": 16718847, "category_id": 81, "area": 3579, "bbox": [116, 14, 155, 41], "iscrowd": 0}, {"id": 15274211, "category_id": 81, "area": 20325, "bbox": [456, 0, 226, 161], "iscrowd": 0}, {"id": 15998719, "category_id": 81, "area": 7114, "bbox": [0, 6, 132, 64], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 33576, "bbox": [528, 0, 153, 508], "iscrowd": 0}]}, {"image_id": "ADE_val_00000851", "file_name": "ADE_val_00000851.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 115628, "bbox": [0, 2, 682, 348], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 53151, "bbox": [0, 0, 605, 222], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 34916, "bbox": [3, 1, 558, 384], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 81872, "bbox": [19, 292, 664, 220], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 25390, "bbox": [0, 294, 226, 218], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 69, "bbox": [182, 294, 11, 9], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 2857, "bbox": [447, 153, 61, 149], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 14, "bbox": [22, 295, 2, 9], "iscrowd": 0}, {"id": 5249165, "category_id": 13, "area": 34, "bbox": [17, 295, 4, 14], "iscrowd": 0}, {"id": 2693812, "category_id": 13, "area": 2321, "bbox": [95, 285, 41, 122], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 11633, "bbox": [421, 305, 205, 84], "iscrowd": 0}, {"id": 11697152, "category_id": 21, "area": 5342, "bbox": [313, 303, 119, 63], "iscrowd": 0}, {"id": 12739329, "category_id": 21, "area": 2085, "bbox": [265, 300, 65, 48], "iscrowd": 0}, {"id": 14764549, "category_id": 21, "area": 1382, "bbox": [224, 299, 51, 38], "iscrowd": 0}, {"id": 12088081, "category_id": 21, "area": 1314, "bbox": [190, 292, 48, 39], "iscrowd": 0}, {"id": 11170571, "category_id": 21, "area": 463, "bbox": [133, 298, 29, 20], "iscrowd": 0}, {"id": 14055428, "category_id": 21, "area": 61, "bbox": [105, 296, 14, 14], "iscrowd": 0}, {"id": 12281600, "category_id": 21, "area": 64, "bbox": [101, 297, 12, 13], "iscrowd": 0}, {"id": 13598976, "category_id": 21, "area": 56, "bbox": [96, 297, 10, 11], "iscrowd": 0}, {"id": 14967069, "category_id": 21, "area": 80, "bbox": [90, 296, 11, 14], "iscrowd": 0}, {"id": 12014080, "category_id": 21, "area": 2374, "bbox": [631, 331, 51, 76], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 121, "bbox": [234, 267, 9, 27], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 170, "bbox": [334, 288, 20, 20], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 67, "bbox": [579, 66, 8, 11], "iscrowd": 0}, {"id": 15676160, "category_id": 88, "area": 2123, "bbox": [392, 1, 106, 303], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 63, "bbox": [170, 300, 11, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000852", "file_name": "ADE_val_00000852.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 112487, "bbox": [1, 24, 682, 252], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 48241, "bbox": [1, 0, 682, 158], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1814, "bbox": [40, 118, 288, 122], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 91358, "bbox": [0, 241, 682, 271], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 48838, "bbox": [1, 262, 682, 250], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 28263, "bbox": [87, 241, 264, 152], "iscrowd": 0}, {"id": 13327872, "category_id": 21, "area": 1558, "bbox": [239, 238, 71, 36], "iscrowd": 0}, {"id": 13332480, "category_id": 21, "area": 737, "bbox": [637, 244, 31, 36], "iscrowd": 0}, {"id": 11632645, "category_id": 21, "area": 180, "bbox": [1, 229, 16, 14], "iscrowd": 0}, {"id": 12800769, "category_id": 21, "area": 450, "bbox": [29, 229, 33, 24], "iscrowd": 0}, {"id": 12547072, "category_id": 21, "area": 848, "bbox": [50, 232, 47, 24], "iscrowd": 0}, {"id": 12542976, "category_id": 21, "area": 139, "bbox": [95, 228, 16, 15], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 4436, "bbox": [295, 236, 177, 31], "iscrowd": 0}, {"id": 768248, "category_id": 33, "area": 635, "bbox": [667, 244, 16, 42], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 252, "bbox": [393, 196, 9, 28], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1580, "bbox": [473, 236, 72, 35], "iscrowd": 0}, {"id": 1043956, "category_id": 54, "area": 138, "bbox": [106, 235, 20, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00000853", "file_name": "ADE_val_00000853.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 116572, "bbox": [0, 37, 683, 320], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 56503, "bbox": [2, 2, 681, 211], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 48258, "bbox": [3, 1, 536, 360], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 81191, "bbox": [0, 362, 683, 150], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 17171, "bbox": [0, 341, 683, 70], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3221, "bbox": [37, 294, 413, 56], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 472, "bbox": [291, 312, 23, 50], "iscrowd": 0}, {"id": 3866803, "category_id": 13, "area": 140, "bbox": [360, 312, 12, 21], "iscrowd": 0}, {"id": 5184166, "category_id": 13, "area": 182, "bbox": [539, 312, 10, 28], "iscrowd": 0}, {"id": 5439652, "category_id": 13, "area": 173, "bbox": [137, 321, 11, 23], "iscrowd": 0}, {"id": 3608212, "category_id": 13, "area": 148, "bbox": [307, 315, 9, 37], "iscrowd": 0}, {"id": 3997839, "category_id": 13, "area": 143, "bbox": [341, 317, 13, 26], "iscrowd": 0}, {"id": 2228378, "category_id": 13, "area": 146, "bbox": [351, 316, 10, 24], "iscrowd": 0}, {"id": 2162863, "category_id": 13, "area": 73, "bbox": [407, 314, 10, 13], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 4503, "bbox": [311, 326, 144, 47], "iscrowd": 0}, {"id": 12022784, "category_id": 21, "area": 7368, "bbox": [88, 327, 191, 56], "iscrowd": 0}, {"id": 12155136, "category_id": 21, "area": 4416, "bbox": [527, 320, 133, 46], "iscrowd": 0}, {"id": 14115342, "category_id": 21, "area": 3380, "bbox": [1, 322, 98, 52], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 198, "bbox": [330, 259, 11, 18], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 927, "bbox": [314, 74, 24, 271], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 189, "bbox": [469, 348, 17, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00000854", "file_name": "ADE_val_00000854.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 104919, "bbox": [1, 1, 681, 254], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 41380, "bbox": [51, 0, 630, 254], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 154610, "bbox": [1, 256, 682, 256], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 3868, "bbox": [110, 251, 127, 44], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 121, "bbox": [477, 199, 12, 15], "iscrowd": 0}, {"id": 3415715, "category_id": 13, "area": 214, "bbox": [449, 195, 23, 19], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 12921, "bbox": [223, 210, 200, 87], "iscrowd": 0}, {"id": 14315777, "category_id": 21, "area": 7766, "bbox": [0, 216, 131, 98], "iscrowd": 0}, {"id": 11760921, "category_id": 21, "area": 7485, "bbox": [411, 215, 152, 68], "iscrowd": 0}, {"id": 13793536, "category_id": 21, "area": 4817, "bbox": [531, 214, 131, 59], "iscrowd": 0}, {"id": 14058502, "category_id": 21, "area": 1457, "bbox": [634, 216, 49, 50], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 762, "bbox": [621, 146, 34, 24], "iscrowd": 0}, {"id": 9049594, "category_id": 44, "area": 1236, "bbox": [547, 90, 47, 33], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 417, "bbox": [542, 149, 31, 16], "iscrowd": 0}, {"id": 196500, "category_id": 124, "area": 1566, "bbox": [142, 106, 77, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00000855", "file_name": "ADE_val_00000855.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 2817, "bbox": [342, 260, 197, 35], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 150294, "bbox": [0, 0, 683, 328], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 11891, "bbox": [96, 0, 85, 221], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1665, "bbox": [131, 150, 110, 109], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 94385, "bbox": [128, 250, 555, 262], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 36725, "bbox": [1, 250, 514, 262], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 5283, "bbox": [1, 226, 47, 186], "iscrowd": 0}, {"id": 2168194, "category_id": 13, "area": 1570, "bbox": [47, 247, 35, 87], "iscrowd": 0}, {"id": 4129434, "category_id": 13, "area": 264, "bbox": [638, 239, 16, 24], "iscrowd": 0}, {"id": 5505151, "category_id": 13, "area": 277, "bbox": [606, 238, 26, 22], "iscrowd": 0}, {"id": 5441683, "category_id": 13, "area": 306, "bbox": [94, 245, 13, 38], "iscrowd": 0}, {"id": 5706399, "category_id": 13, "area": 343, "bbox": [0, 238, 20, 44], "iscrowd": 0}, {"id": 2031778, "category_id": 13, "area": 95, "bbox": [82, 247, 7, 22], "iscrowd": 0}, {"id": 4857493, "category_id": 13, "area": 71, "bbox": [396, 242, 10, 11], "iscrowd": 0}, {"id": 3866766, "category_id": 13, "area": 61, "bbox": [411, 241, 9, 12], "iscrowd": 0}, {"id": 4985249, "category_id": 13, "area": 114, "bbox": [435, 241, 14, 14], "iscrowd": 0}, {"id": 5439661, "category_id": 13, "area": 80, "bbox": [456, 241, 10, 13], "iscrowd": 0}, {"id": 3801260, "category_id": 13, "area": 141, "bbox": [478, 241, 18, 14], "iscrowd": 0}, {"id": 2031787, "category_id": 13, "area": 108, "bbox": [497, 242, 10, 14], "iscrowd": 0}, {"id": 5640109, "category_id": 13, "area": 131, "bbox": [513, 241, 16, 15], "iscrowd": 0}, {"id": 2818227, "category_id": 13, "area": 135, "bbox": [575, 241, 13, 18], "iscrowd": 0}, {"id": 4980892, "category_id": 13, "area": 302, "bbox": [655, 240, 27, 23], "iscrowd": 0}, {"id": 4459646, "category_id": 13, "area": 39, "bbox": [278, 245, 7, 8], "iscrowd": 0}, {"id": 2687108, "category_id": 13, "area": 21, "bbox": [290, 247, 5, 7], "iscrowd": 0}, {"id": 2425010, "category_id": 13, "area": 205, "bbox": [233, 247, 17, 28], "iscrowd": 0}, {"id": 3219880, "category_id": 13, "area": 34, "bbox": [220, 247, 5, 10], "iscrowd": 0}, {"id": 4653176, "category_id": 13, "area": 34, "bbox": [211, 247, 5, 10], "iscrowd": 0}, {"id": 2102927, "category_id": 13, "area": 250, "bbox": [362, 246, 12, 33], "iscrowd": 0}, {"id": 5507742, "category_id": 13, "area": 184, "bbox": [350, 247, 9, 33], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 39, "bbox": [523, 253, 12, 4], "iscrowd": 0}, {"id": 22491, "category_id": 20, "area": 51, "bbox": [535, 252, 11, 6], "iscrowd": 0}, {"id": 10416, "category_id": 20, "area": 24, "bbox": [591, 256, 10, 3], "iscrowd": 0}, {"id": 1721027, "category_id": 20, "area": 26, "bbox": [628, 257, 10, 3], "iscrowd": 0}, {"id": 18354, "category_id": 20, "area": 24, "bbox": [427, 250, 8, 4], "iscrowd": 0}, {"id": 2184398, "category_id": 20, "area": 29, "bbox": [544, 253, 8, 5], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 7811, "bbox": [149, 256, 117, 85], "iscrowd": 0}, {"id": 13982720, "category_id": 21, "area": 1219, "bbox": [120, 243, 42, 34], "iscrowd": 0}, {"id": 13656064, "category_id": 21, "area": 2206, "bbox": [284, 251, 71, 39], "iscrowd": 0}, {"id": 14184465, "category_id": 21, "area": 11954, "bbox": [511, 260, 172, 96], "iscrowd": 0}, {"id": 11820800, "category_id": 21, "area": 506, "bbox": [265, 254, 28, 28], "iscrowd": 0}, {"id": 14252051, "category_id": 21, "area": 226, "bbox": [171, 245, 18, 14], "iscrowd": 0}, {"id": 14899200, "category_id": 21, "area": 694, "bbox": [241, 245, 36, 29], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 99, "bbox": [115, 242, 11, 14], "iscrowd": 0}, {"id": 1182975, "category_id": 84, "area": 422, "bbox": [138, 235, 31, 33], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 642, "bbox": [244, 225, 60, 12], "iscrowd": 0}, {"id": 2159881, "category_id": 87, "area": 370, "bbox": [314, 210, 61, 13], "iscrowd": 0}, {"id": 5111559, "category_id": 87, "area": 172, "bbox": [374, 207, 27, 8], "iscrowd": 0}, {"id": 5107206, "category_id": 87, "area": 188, "bbox": [408, 203, 31, 10], "iscrowd": 0}, {"id": 2942208, "category_id": 87, "area": 354, "bbox": [452, 197, 44, 12], "iscrowd": 0}, {"id": 4974080, "category_id": 87, "area": 424, "bbox": [513, 188, 56, 13], "iscrowd": 0}, {"id": 3473152, "category_id": 87, "area": 965, "bbox": [596, 176, 81, 19], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 604, "bbox": [106, 108, 70, 171], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1850, "bbox": [154, 366, 21, 96], "iscrowd": 0}, {"id": 16716830, "category_id": 94, "area": 786, "bbox": [140, 342, 19, 75], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 2865, "bbox": [342, 251, 228, 25], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 20, "bbox": [601, 249, 3, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00000856", "file_name": "ADE_val_00000856.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 138729, "bbox": [1, 31, 631, 378], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 47585, "bbox": [1, 1, 681, 244], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 66172, "bbox": [2, 1, 681, 409], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 71754, "bbox": [2, 388, 681, 124], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 9215, "bbox": [1, 363, 682, 59], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 330, "bbox": [387, 298, 23, 28], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 536, "bbox": [34, 363, 19, 47], "iscrowd": 0}, {"id": 3414417, "category_id": 13, "area": 755, "bbox": [355, 329, 25, 67], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1170, "bbox": [409, 317, 212, 60], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 457, "bbox": [569, 120, 17, 44], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1993, "bbox": [233, 367, 81, 32], "iscrowd": 0}, {"id": 52223, "category_id": 54, "area": 1228, "bbox": [370, 340, 40, 48], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 632, "bbox": [245, 292, 58, 14], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 2849, "bbox": [555, 23, 54, 358], "iscrowd": 0}, {"id": 16711989, "category_id": 94, "area": 244, "bbox": [443, 357, 9, 38], "iscrowd": 0}, {"id": 16711744, "category_id": 94, "area": 257, "bbox": [400, 360, 9, 37], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 127, "bbox": [384, 310, 73, 70], "iscrowd": 0}, {"id": 16485888, "category_id": 96, "area": 88, "bbox": [282, 344, 16, 54], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 1865, "bbox": [502, 2, 76, 172], "iscrowd": 0}]}, {"image_id": "ADE_val_00000857", "file_name": "ADE_val_00000857.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 116799, "bbox": [0, 0, 683, 291], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 29631, "bbox": [475, 0, 207, 250], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 122397, "bbox": [0, 322, 683, 190], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 30200, "bbox": [2, 279, 681, 65], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 116, "bbox": [528, 239, 9, 28], "iscrowd": 0}, {"id": 3080324, "category_id": 13, "area": 456, "bbox": [382, 211, 15, 61], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 2796, "bbox": [38, 182, 80, 39], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 4091, "bbox": [285, 238, 83, 65], "iscrowd": 0}, {"id": 12876288, "category_id": 21, "area": 4598, "bbox": [180, 237, 101, 63], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 2832, "bbox": [645, 213, 37, 78], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 20278, "bbox": [236, 49, 236, 88], "iscrowd": 0}, {"id": 10289379, "category_id": 44, "area": 165, "bbox": [592, 204, 15, 11], "iscrowd": 0}, {"id": 10944767, "category_id": 44, "area": 104, "bbox": [593, 195, 13, 8], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 41, "bbox": [471, 195, 17, 4], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 4362, "bbox": [138, 0, 21, 301], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 246, "bbox": [403, 242, 15, 28], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 620, "bbox": [584, 251, 42, 26], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 320, "bbox": [631, 254, 14, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00000858", "file_name": "ADE_val_00000858.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 139107, "bbox": [41, 26, 642, 351], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 69482, "bbox": [1, 0, 682, 219], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 19690, "bbox": [2, 122, 629, 238], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 73378, "bbox": [1, 387, 682, 125], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 9317, "bbox": [0, 346, 682, 68], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4386, "bbox": [21, 344, 305, 46], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 11633, "bbox": [47, 343, 228, 75], "iscrowd": 0}, {"id": 11827456, "category_id": 21, "area": 12403, "bbox": [310, 325, 213, 85], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 517, "bbox": [496, 276, 15, 41], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 3917, "bbox": [344, 3, 58, 349], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 200, "bbox": [578, 361, 16, 16], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 341, "bbox": [579, 279, 20, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00000859", "file_name": "ADE_val_00000859.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 119194, "bbox": [1, 1, 682, 396], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 11997, "bbox": [109, 1, 573, 110], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 112502, "bbox": [4, 2, 679, 510], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 2950, "bbox": [298, 441, 183, 33], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 73199, "bbox": [1, 374, 682, 138], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 368, "bbox": [435, 196, 23, 23], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 307, "bbox": [347, 361, 17, 42], "iscrowd": 0}, {"id": 2102139, "category_id": 13, "area": 526, "bbox": [331, 364, 27, 48], "iscrowd": 0}, {"id": 3080314, "category_id": 13, "area": 630, "bbox": [309, 361, 35, 51], "iscrowd": 0}, {"id": 3016577, "category_id": 13, "area": 667, "bbox": [285, 361, 43, 53], "iscrowd": 0}, {"id": 5440433, "category_id": 13, "area": 347, "bbox": [410, 339, 15, 39], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 171, "bbox": [31, 287, 11, 19], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 744, "bbox": [271, 380, 38, 34], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 2105, "bbox": [577, 326, 49, 55], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 1534, "bbox": [476, 311, 90, 29], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 52, "bbox": [422, 255, 13, 7], "iscrowd": 0}, {"id": 16140044, "category_id": 88, "area": 1574, "bbox": [538, 190, 52, 240], "iscrowd": 0}, {"id": 16727812, "category_id": 88, "area": 4403, "bbox": [168, 113, 91, 378], "iscrowd": 0}, {"id": 13369599, "category_id": 89, "area": 11883, "bbox": [422, 296, 170, 107], "iscrowd": 0}]}, {"image_id": "ADE_val_00000860", "file_name": "ADE_val_00000860.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 24614, "bbox": [212, 210, 355, 119], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 138190, "bbox": [0, 0, 683, 326], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 27799, "bbox": [1, 1, 490, 174], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5328, "bbox": [356, 112, 114, 99], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 106384, "bbox": [1, 346, 681, 166], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 8592, "bbox": [1, 313, 682, 48], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 8359, "bbox": [333, 221, 105, 96], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 14450, "bbox": [68, 273, 221, 91], "iscrowd": 0}, {"id": 12797952, "category_id": 21, "area": 10566, "bbox": [319, 292, 197, 74], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 427, "bbox": [138, 181, 21, 27], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 371, "bbox": [586, 211, 17, 29], "iscrowd": 0}, {"id": 9964019, "category_id": 44, "area": 757, "bbox": [570, 292, 29, 47], "iscrowd": 0}, {"id": 8199935, "category_id": 44, "area": 571, "bbox": [57, 190, 22, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000861", "file_name": "ADE_val_00000861.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 32444, "bbox": [2, 0, 254, 198], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 3241, "bbox": [88, 1, 124, 54], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 17301, "bbox": [2, 131, 254, 125], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2793, "bbox": [2, 140, 254, 97], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 1853, "bbox": [2, 85, 27, 89], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 198, "bbox": [52, 125, 15, 26], "iscrowd": 0}, {"id": 4400039, "category_id": 13, "area": 201, "bbox": [116, 130, 10, 39], "iscrowd": 0}, {"id": 3342476, "category_id": 13, "area": 361, "bbox": [128, 125, 12, 45], "iscrowd": 0}, {"id": 4397722, "category_id": 13, "area": 212, "bbox": [143, 125, 8, 46], "iscrowd": 0}, {"id": 4461691, "category_id": 13, "area": 431, "bbox": [149, 121, 13, 54], "iscrowd": 0}, {"id": 4325548, "category_id": 13, "area": 945, "bbox": [161, 133, 21, 72], "iscrowd": 0}, {"id": 4261772, "category_id": 13, "area": 1841, "bbox": [34, 132, 33, 101], "iscrowd": 0}, {"id": 3540363, "category_id": 13, "area": 1723, "bbox": [81, 131, 31, 97], "iscrowd": 0}, {"id": 5709195, "category_id": 13, "area": 267, "bbox": [178, 125, 17, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00000862", "file_name": "ADE_val_00000862.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 26458, "bbox": [2, 0, 254, 255], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 19812, "bbox": [85, 1, 171, 171], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 2543, "bbox": [156, 181, 85, 75], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 3441, "bbox": [2, 202, 163, 54], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1484, "bbox": [155, 178, 36, 77], "iscrowd": 0}, {"id": 3344508, "category_id": 13, "area": 1679, "bbox": [70, 195, 42, 61], "iscrowd": 0}, {"id": 5570708, "category_id": 13, "area": 443, "bbox": [117, 182, 13, 53], "iscrowd": 0}, {"id": 3604650, "category_id": 13, "area": 350, "bbox": [130, 183, 13, 48], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 184, "bbox": [231, 182, 25, 13], "iscrowd": 0}, {"id": 11557888, "category_id": 21, "area": 209, "bbox": [194, 182, 21, 25], "iscrowd": 0}, {"id": 13392128, "category_id": 21, "area": 699, "bbox": [213, 189, 37, 40], "iscrowd": 0}, {"id": 13859600, "category_id": 21, "area": 1372, "bbox": [227, 195, 29, 61], "iscrowd": 0}, {"id": 12342016, "category_id": 21, "area": 383, "bbox": [204, 183, 37, 32], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 127, "bbox": [180, 153, 16, 15], "iscrowd": 0}, {"id": 9830635, "category_id": 44, "area": 288, "bbox": [119, 110, 9, 32], "iscrowd": 0}, {"id": 10223871, "category_id": 44, "area": 251, "bbox": [132, 99, 8, 38], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 382, "bbox": [110, 144, 26, 22], "iscrowd": 0}, {"id": 2621192, "category_id": 87, "area": 1608, "bbox": [40, 104, 66, 60], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 52, "bbox": [186, 92, 27, 51], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 2026, "bbox": [2, 90, 55, 57], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 470, "bbox": [116, 9, 23, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000863", "file_name": "ADE_val_00000863.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 31335, "bbox": [2, 0, 254, 183], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 5634, "bbox": [67, 1, 86, 124], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 18977, "bbox": [2, 140, 254, 116], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 3187, "bbox": [131, 140, 125, 91], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1012, "bbox": [200, 13, 55, 55], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 284, "bbox": [89, 135, 25, 16], "iscrowd": 0}, {"id": 12930816, "category_id": 21, "area": 334, "bbox": [68, 140, 27, 24], "iscrowd": 0}, {"id": 11554054, "category_id": 21, "area": 1334, "bbox": [30, 140, 52, 38], "iscrowd": 0}, {"id": 11434258, "category_id": 21, "area": 2348, "bbox": [0, 147, 50, 73], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 2, "bbox": [196, 174, 1, 2], "iscrowd": 0}, {"id": 16449586, "category_id": 94, "area": 14, "bbox": [171, 145, 1, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00000864", "file_name": "ADE_val_00000864.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 24114, "bbox": [2, 0, 254, 200], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 18503, "bbox": [2, 1, 229, 148], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 15571, "bbox": [30, 160, 226, 96], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 3761, "bbox": [2, 159, 254, 97], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 31, "bbox": [108, 158, 3, 12], "iscrowd": 0}, {"id": 4718748, "category_id": 13, "area": 25, "bbox": [122, 156, 3, 13], "iscrowd": 0}, {"id": 3670171, "category_id": 13, "area": 103, "bbox": [73, 156, 7, 26], "iscrowd": 0}, {"id": 4522140, "category_id": 13, "area": 105, "bbox": [84, 156, 6, 26], "iscrowd": 0}, {"id": 5906341, "category_id": 13, "area": 214, "bbox": [29, 154, 9, 34], "iscrowd": 0}, {"id": 2622113, "category_id": 13, "area": 562, "bbox": [39, 156, 24, 50], "iscrowd": 0}, {"id": 3014780, "category_id": 13, "area": 907, "bbox": [7, 162, 22, 65], "iscrowd": 0}, {"id": 2825103, "category_id": 13, "area": 221, "bbox": [173, 157, 12, 32], "iscrowd": 0}, {"id": 3546531, "category_id": 13, "area": 255, "bbox": [156, 160, 13, 33], "iscrowd": 0}, {"id": 3408049, "category_id": 13, "area": 138, "bbox": [207, 160, 9, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000865", "file_name": "ADE_val_00000865.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 36049, "bbox": [2, 0, 254, 226], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 951, "bbox": [84, 1, 125, 19], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 8563, "bbox": [94, 180, 161, 76], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 4656, "bbox": [2, 177, 177, 79], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 7301, "bbox": [64, 1, 147, 125], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 950, "bbox": [5, 17, 124, 125], "iscrowd": 0}, {"id": 12105983, "category_id": 85, "area": 1192, "bbox": [117, 0, 24, 69], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 143, "bbox": [242, 126, 12, 14], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 107, "bbox": [219, 86, 10, 20], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 759, "bbox": [180, 155, 36, 48], "iscrowd": 0}, {"id": 1834889, "category_id": 103, "area": 3112, "bbox": [199, 155, 56, 65], "iscrowd": 0}]}, {"image_id": "ADE_val_00000866", "file_name": "ADE_val_00000866.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 9057, "bbox": [98, 0, 158, 151], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9861, "bbox": [32, 2, 187, 93], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 15033, "bbox": [2, 0, 254, 161], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 25484, "bbox": [0, 128, 256, 128], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1318, "bbox": [188, 140, 68, 33], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 57, "bbox": [145, 128, 11, 10], "iscrowd": 0}, {"id": 14766592, "category_id": 21, "area": 60, "bbox": [57, 136, 10, 9], "iscrowd": 0}, {"id": 13925632, "category_id": 21, "area": 182, "bbox": [25, 138, 20, 15], "iscrowd": 0}, {"id": 12548096, "category_id": 21, "area": 375, "bbox": [0, 139, 28, 18], "iscrowd": 0}, {"id": 11492352, "category_id": 21, "area": 67, "bbox": [165, 135, 11, 9], "iscrowd": 0}, {"id": 11290626, "category_id": 21, "area": 43, "bbox": [169, 139, 12, 8], "iscrowd": 0}, {"id": 11895040, "category_id": 21, "area": 126, "bbox": [175, 141, 15, 11], "iscrowd": 0}, {"id": 15099648, "category_id": 21, "area": 140, "bbox": [81, 131, 28, 10], "iscrowd": 0}, {"id": 14311189, "category_id": 21, "area": 74, "bbox": [65, 136, 12, 7], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 26, "bbox": [106, 107, 5, 10], "iscrowd": 0}, {"id": 16462082, "category_id": 88, "area": 26, "bbox": [120, 116, 3, 23], "iscrowd": 0}, {"id": 16538112, "category_id": 88, "area": 527, "bbox": [73, 60, 11, 110], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 177, "bbox": [39, 135, 22, 12], "iscrowd": 0}, {"id": 262041, "category_id": 103, "area": 89, "bbox": [155, 132, 11, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00000867", "file_name": "ADE_val_00000867.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 16123, "bbox": [2, 1, 254, 145], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 17040, "bbox": [6, 1, 250, 115], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 3490, "bbox": [0, 129, 210, 66], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 6278, "bbox": [20, 134, 236, 122], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3196, "bbox": [201, 160, 55, 96], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 37, "bbox": [82, 126, 9, 9], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 95, "bbox": [188, 127, 12, 11], "iscrowd": 0}, {"id": 12870656, "category_id": 21, "area": 283, "bbox": [166, 132, 25, 16], "iscrowd": 0}, {"id": 15037184, "category_id": 21, "area": 1041, "bbox": [98, 132, 54, 27], "iscrowd": 0}, {"id": 13596672, "category_id": 21, "area": 1409, "bbox": [28, 129, 67, 30], "iscrowd": 0}, {"id": 11293184, "category_id": 21, "area": 374, "bbox": [2, 140, 19, 26], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 12556, "bbox": [2, 137, 242, 119], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 617, "bbox": [209, 119, 29, 25], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 165, "bbox": [161, 129, 29, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00000868", "file_name": "ADE_val_00000868.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 29501, "bbox": [2, 1, 254, 188], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 12552, "bbox": [78, 1, 178, 131], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 16794, "bbox": [2, 162, 253, 94], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 4264, "bbox": [2, 161, 254, 94], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 117, "bbox": [193, 100, 8, 18], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 99, "bbox": [157, 149, 9, 24], "iscrowd": 0}, {"id": 5701753, "category_id": 13, "area": 147, "bbox": [95, 151, 10, 28], "iscrowd": 0}, {"id": 5636218, "category_id": 13, "area": 106, "bbox": [185, 147, 8, 24], "iscrowd": 0}, {"id": 2097292, "category_id": 13, "area": 59, "bbox": [199, 150, 6, 20], "iscrowd": 0}, {"id": 3670161, "category_id": 13, "area": 74, "bbox": [248, 155, 6, 18], "iscrowd": 0}, {"id": 5505951, "category_id": 13, "area": 168, "bbox": [235, 146, 8, 38], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 379, "bbox": [68, 98, 18, 23], "iscrowd": 0}, {"id": 11804415, "category_id": 44, "area": 129, "bbox": [228, 124, 13, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000869", "file_name": "ADE_val_00000869.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 25602, "bbox": [2, 0, 254, 159], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 5543, "bbox": [79, 1, 89, 123], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 23454, "bbox": [0, 124, 256, 132], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 328, "bbox": [159, 128, 39, 20], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 35, "bbox": [168, 123, 4, 15], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 91, "bbox": [128, 128, 12, 9], "iscrowd": 0}, {"id": 12806419, "category_id": 21, "area": 94, "bbox": [148, 127, 12, 10], "iscrowd": 0}, {"id": 11495168, "category_id": 21, "area": 452, "bbox": [94, 128, 33, 20], "iscrowd": 0}, {"id": 14451477, "category_id": 21, "area": 3340, "bbox": [12, 129, 78, 58], "iscrowd": 0}, {"id": 13585152, "category_id": 21, "area": 1107, "bbox": [0, 152, 24, 66], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 3552, "bbox": [198, 110, 58, 75], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 613, "bbox": [37, 88, 40, 26], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 214, "bbox": [81, 128, 22, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00000870", "file_name": "ADE_val_00000870.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 28717, "bbox": [1, 0, 255, 185], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 13401, "bbox": [91, 1, 164, 166], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1046, "bbox": [82, 156, 83, 22], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 9132, "bbox": [3, 179, 253, 74], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 209, "bbox": [237, 184, 19, 27], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 211, "bbox": [57, 180, 24, 18], "iscrowd": 0}, {"id": 14775298, "category_id": 21, "area": 167, "bbox": [208, 175, 20, 13], "iscrowd": 0}, {"id": 14503168, "category_id": 21, "area": 473, "bbox": [222, 173, 31, 22], "iscrowd": 0}, {"id": 11430912, "category_id": 21, "area": 159, "bbox": [89, 180, 28, 7], "iscrowd": 0}, {"id": 11820800, "category_id": 21, "area": 58, "bbox": [127, 178, 9, 10], "iscrowd": 0}, {"id": 14255110, "category_id": 21, "area": 96, "bbox": [133, 178, 14, 11], "iscrowd": 0}, {"id": 14713611, "category_id": 21, "area": 2414, "bbox": [151, 167, 63, 51], "iscrowd": 0}, {"id": 14449664, "category_id": 21, "area": 4273, "bbox": [0, 161, 76, 78], "iscrowd": 0}, {"id": 12545029, "category_id": 21, "area": 3133, "bbox": [2, 240, 253, 16], "iscrowd": 0}, {"id": 12614403, "category_id": 21, "area": 46, "bbox": [147, 178, 8, 6], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 157, "bbox": [56, 175, 28, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00000871", "file_name": "ADE_val_00000871.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 18621, "bbox": [0, 10, 256, 165], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 21222, "bbox": [2, 1, 254, 148], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 19698, "bbox": [2, 157, 254, 99], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 665, "bbox": [0, 163, 83, 20], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 276, "bbox": [246, 162, 10, 38], "iscrowd": 0}, {"id": 3347070, "category_id": 13, "area": 170, "bbox": [233, 167, 8, 31], "iscrowd": 0}, {"id": 2951804, "category_id": 13, "area": 220, "bbox": [222, 164, 11, 36], "iscrowd": 0}, {"id": 4852632, "category_id": 13, "area": 178, "bbox": [210, 163, 11, 35], "iscrowd": 0}, {"id": 4660633, "category_id": 13, "area": 163, "bbox": [186, 163, 11, 28], "iscrowd": 0}, {"id": 4849831, "category_id": 13, "area": 127, "bbox": [37, 158, 7, 26], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 46, "bbox": [195, 158, 9, 9], "iscrowd": 0}, {"id": 12417024, "category_id": 21, "area": 290, "bbox": [165, 158, 30, 14], "iscrowd": 0}, {"id": 14776064, "category_id": 21, "area": 160, "bbox": [152, 161, 13, 15], "iscrowd": 0}, {"id": 13397527, "category_id": 21, "area": 155, "bbox": [115, 160, 17, 12], "iscrowd": 0}, {"id": 13727772, "category_id": 21, "area": 332, "bbox": [129, 162, 24, 18], "iscrowd": 0}, {"id": 11423232, "category_id": 21, "area": 636, "bbox": [74, 161, 43, 21], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 281, "bbox": [190, 80, 15, 20], "iscrowd": 0}, {"id": 11731199, "category_id": 44, "area": 260, "bbox": [213, 90, 18, 16], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 345, "bbox": [20, 29, 43, 129], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 484, "bbox": [153, 57, 101, 54], "iscrowd": 0}]}, {"image_id": "ADE_val_00000872", "file_name": "ADE_val_00000872.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 15229, "bbox": [2, 25, 254, 148], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 19641, "bbox": [0, 140, 256, 116], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 287, "bbox": [47, 161, 34, 16], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 22380, "bbox": [2, 1, 254, 140], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 92, "bbox": [109, 147, 9, 22], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 129, "bbox": [117, 140, 19, 16], "iscrowd": 0}, {"id": 12607748, "category_id": 21, "area": 323, "bbox": [82, 148, 25, 21], "iscrowd": 0}, {"id": 13585938, "category_id": 21, "area": 16, "bbox": [138, 148, 5, 4], "iscrowd": 0}, {"id": 11759360, "category_id": 21, "area": 260, "bbox": [163, 148, 20, 17], "iscrowd": 0}, {"id": 13722880, "category_id": 21, "area": 1277, "bbox": [200, 147, 31, 61], "iscrowd": 0}, {"id": 14249994, "category_id": 21, "area": 2385, "bbox": [222, 143, 34, 101], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 2326, "bbox": [2, 140, 46, 64], "iscrowd": 0}]}, {"image_id": "ADE_val_00000873", "file_name": "ADE_val_00000873.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 19996, "bbox": [39, 85, 217, 160], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 20935, "bbox": [2, 1, 254, 115], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 7982, "bbox": [0, 179, 256, 77], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 10425, "bbox": [2, 61, 139, 129], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 68, "bbox": [117, 197, 5, 21], "iscrowd": 0}, {"id": 2237096, "category_id": 13, "area": 41, "bbox": [130, 201, 5, 17], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 321, "bbox": [145, 206, 26, 20], "iscrowd": 0}, {"id": 12413440, "category_id": 21, "area": 770, "bbox": [159, 206, 46, 25], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 480, "bbox": [38, 100, 16, 33], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 532, "bbox": [6, 35, 89, 191], "iscrowd": 0}]}, {"image_id": "ADE_val_00000874", "file_name": "ADE_val_00000874.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 14416, "bbox": [0, 0, 549, 35], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1302, "bbox": [2, 29, 219, 8], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 106389, "bbox": [0, 38, 486, 329], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 60184, "bbox": [211, 9, 338, 357], "iscrowd": 0}, {"id": 16714240, "category_id": 92, "area": 3291, "bbox": [185, 58, 148, 77], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 157, "bbox": [213, 65, 15, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00000875", "file_name": "ADE_val_00000875.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 62322, "bbox": [0, 0, 499, 372], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 41338, "bbox": [41, 152, 383, 220], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 18554, "bbox": [34, 0, 398, 109], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2930, "bbox": [67, 85, 45, 107], "iscrowd": 0}, {"id": 14022358, "category_id": 9, "area": 2293, "bbox": [370, 85, 32, 104], "iscrowd": 0}, {"id": 16638717, "category_id": 9, "area": 568, "bbox": [140, 101, 19, 57], "iscrowd": 0}, {"id": 13757394, "category_id": 9, "area": 1369, "bbox": [109, 94, 30, 82], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 10853, "bbox": [433, 11, 64, 253], "iscrowd": 0}, {"id": 5039630, "category_id": 15, "area": 312, "bbox": [162, 101, 14, 52], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 10205, "bbox": [69, 156, 147, 98], "iscrowd": 0}, {"id": 14017290, "category_id": 32, "area": 9733, "bbox": [268, 156, 131, 97], "iscrowd": 0}, {"id": 14221080, "category_id": 32, "area": 821, "bbox": [182, 139, 50, 31], "iscrowd": 0}, {"id": 13762308, "category_id": 32, "area": 812, "bbox": [257, 139, 46, 32], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2507, "bbox": [56, 1, 165, 105], "iscrowd": 0}, {"id": 900078, "category_id": 83, "area": 2109, "bbox": [265, 1, 161, 102], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1752, "bbox": [232, 17, 12, 314], "iscrowd": 0}, {"id": 16320562, "category_id": 94, "area": 3595, "bbox": [394, 0, 25, 371], "iscrowd": 0}, {"id": 16318509, "category_id": 94, "area": 199, "bbox": [252, 111, 4, 52], "iscrowd": 0}, {"id": 16713014, "category_id": 94, "area": 3936, "bbox": [45, 0, 25, 371], "iscrowd": 0}, {"id": 16711744, "category_id": 94, "area": 1988, "bbox": [120, 15, 20, 343], "iscrowd": 0}, {"id": 14876720, "category_id": 94, "area": 421, "bbox": [301, 50, 9, 131], "iscrowd": 0}, {"id": 16716835, "category_id": 94, "area": 151, "bbox": [199, 81, 2, 76], "iscrowd": 0}, {"id": 16711725, "category_id": 94, "area": 2450, "bbox": [334, 16, 19, 344], "iscrowd": 0}]}, {"image_id": "ADE_val_00000876", "file_name": "ADE_val_00000876.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 33536, "bbox": [0, 118, 499, 168], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 64230, "bbox": [0, 211, 499, 163], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 78914, "bbox": [0, 0, 499, 185], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 408, "bbox": [187, 194, 19, 49], "iscrowd": 0}, {"id": 2036637, "category_id": 13, "area": 792, "bbox": [240, 173, 20, 68], "iscrowd": 0}, {"id": 5768876, "category_id": 13, "area": 7229, "bbox": [283, 135, 98, 219], "iscrowd": 0}, {"id": 3080326, "category_id": 13, "area": 699, "bbox": [216, 180, 24, 63], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 242, "bbox": [232, 13, 25, 15], "iscrowd": 0}, {"id": 43751, "category_id": 83, "area": 91, "bbox": [198, 60, 17, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00000877", "file_name": "ADE_val_00000877.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 19954, "bbox": [0, 71, 347, 145], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9432, "bbox": [49, 0, 298, 80], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 55622, "bbox": [2, 161, 345, 184], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 8207, "bbox": [0, 0, 184, 80], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1898, "bbox": [139, 82, 87, 25], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4734, "bbox": [197, 80, 91, 109], "iscrowd": 0}, {"id": 2174408, "category_id": 20, "area": 4267, "bbox": [73, 94, 87, 95], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 3959, "bbox": [2, 53, 84, 66], "iscrowd": 0}, {"id": 2310904, "category_id": 39, "area": 3395, "bbox": [280, 50, 67, 71], "iscrowd": 0}]}, {"image_id": "ADE_val_00000878", "file_name": "ADE_val_00000878.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 17376, "bbox": [0, 0, 499, 95], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1973, "bbox": [339, 10, 49, 43], "iscrowd": 0}, {"id": 8919035, "category_id": 44, "area": 2538, "bbox": [431, 1, 56, 48], "iscrowd": 0}, {"id": 8782060, "category_id": 44, "area": 4745, "bbox": [17, 116, 134, 44], "iscrowd": 0}, {"id": 9437439, "category_id": 44, "area": 1293, "bbox": [254, 113, 61, 27], "iscrowd": 0}, {"id": 11075830, "category_id": 44, "area": 1475, "bbox": [265, 255, 64, 48], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 3887, "bbox": [259, 198, 120, 78], "iscrowd": 0}, {"id": 65344, "category_id": 113, "area": 10313, "bbox": [2, 227, 265, 102], "iscrowd": 0}, {"id": 59236, "category_id": 113, "area": 1459, "bbox": [372, 177, 65, 52], "iscrowd": 0}, {"id": 977735, "category_id": 113, "area": 978, "bbox": [435, 152, 44, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00000879", "file_name": "ADE_val_00000879.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 59852, "bbox": [2, 0, 448, 225], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 23617, "bbox": [0, 213, 427, 124], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 19069, "bbox": [0, 0, 450, 142], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 35591, "bbox": [44, 182, 405, 155], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3924, "bbox": [22, 7, 81, 63], "iscrowd": 0}, {"id": 124391, "category_id": 37, "area": 927, "bbox": [0, 66, 31, 37], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 7, "bbox": [81, 135, 4, 2], "iscrowd": 0}, {"id": 1100263, "category_id": 83, "area": 9, "bbox": [92, 132, 4, 3], "iscrowd": 0}, {"id": 702719, "category_id": 83, "area": 13, "bbox": [105, 129, 5, 3], "iscrowd": 0}, {"id": 50941, "category_id": 83, "area": 10, "bbox": [153, 107, 4, 3], "iscrowd": 0}, {"id": 37878, "category_id": 83, "area": 10, "bbox": [174, 102, 4, 3], "iscrowd": 0}, {"id": 43495, "category_id": 83, "area": 14, "bbox": [199, 95, 5, 3], "iscrowd": 0}, {"id": 45311, "category_id": 83, "area": 14, "bbox": [229, 87, 6, 4], "iscrowd": 0}, {"id": 1227775, "category_id": 83, "area": 20, "bbox": [266, 77, 6, 4], "iscrowd": 0}, {"id": 895998, "category_id": 83, "area": 31, "bbox": [309, 65, 9, 5], "iscrowd": 0}, {"id": 1941247, "category_id": 83, "area": 27, "bbox": [368, 50, 8, 4], "iscrowd": 0}, {"id": 40184, "category_id": 83, "area": 11, "bbox": [375, 109, 4, 4], "iscrowd": 0}, {"id": 39159, "category_id": 83, "area": 12, "bbox": [335, 115, 5, 3], "iscrowd": 0}, {"id": 46063, "category_id": 83, "area": 13, "bbox": [302, 119, 5, 3], "iscrowd": 0}, {"id": 169464, "category_id": 83, "area": 10, "bbox": [274, 124, 5, 3], "iscrowd": 0}, {"id": 45033, "category_id": 83, "area": 6, "bbox": [248, 128, 4, 2], "iscrowd": 0}, {"id": 693247, "category_id": 83, "area": 6, "bbox": [226, 131, 4, 2], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 35, "bbox": [285, 152, 5, 12], "iscrowd": 0}, {"id": 2359049, "category_id": 99, "area": 29, "bbox": [255, 152, 3, 13], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 400, "bbox": [80, 199, 31, 59], "iscrowd": 0}, {"id": 16773382, "category_id": 111, "area": 429, "bbox": [100, 202, 33, 66], "iscrowd": 0}, {"id": 16768768, "category_id": 111, "area": 670, "bbox": [122, 202, 38, 75], "iscrowd": 0}, {"id": 15332123, "category_id": 111, "area": 953, "bbox": [153, 208, 42, 82], "iscrowd": 0}, {"id": 16760577, "category_id": 111, "area": 1148, "bbox": [192, 209, 51, 96], "iscrowd": 0}, {"id": 15714560, "category_id": 111, "area": 1887, "bbox": [243, 217, 60, 112], "iscrowd": 0}, {"id": 15908617, "category_id": 111, "area": 1770, "bbox": [313, 223, 77, 112], "iscrowd": 0}]}, {"image_id": "ADE_val_00000880", "file_name": "ADE_val_00000880.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 59669, "bbox": [0, 1, 639, 298], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 60480, "bbox": [0, 227, 639, 252], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 65947, "bbox": [2, 1, 636, 129], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6313, "bbox": [30, 133, 444, 100], "iscrowd": 0}, {"id": 16758784, "category_id": 110, "area": 88218, "bbox": [0, 230, 536, 248], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4169, "bbox": [21, 143, 86, 99], "iscrowd": 0}, {"id": 16315124, "category_id": 9, "area": 3696, "bbox": [146, 155, 54, 74], "iscrowd": 0}, {"id": 16708846, "category_id": 9, "area": 1297, "bbox": [222, 160, 26, 56], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 1839, "bbox": [589, 29, 43, 55], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 248, "bbox": [553, 25, 16, 19], "iscrowd": 0}, {"id": 45823, "category_id": 83, "area": 121, "bbox": [561, 64, 11, 12], "iscrowd": 0}, {"id": 565490, "category_id": 83, "area": 80, "bbox": [565, 89, 9, 9], "iscrowd": 0}, {"id": 764927, "category_id": 83, "area": 97, "bbox": [261, 104, 21, 9], "iscrowd": 0}, {"id": 44014, "category_id": 83, "area": 130, "bbox": [206, 88, 24, 11], "iscrowd": 0}, {"id": 1883647, "category_id": 83, "area": 220, "bbox": [127, 65, 34, 14], "iscrowd": 0}, {"id": 1285119, "category_id": 83, "area": 234, "bbox": [11, 34, 47, 16], "iscrowd": 0}, {"id": 37887, "category_id": 83, "area": 62, "bbox": [366, 120, 16, 7], "iscrowd": 0}, {"id": 41727, "category_id": 83, "area": 53, "bbox": [414, 116, 14, 6], "iscrowd": 0}, {"id": 41707, "category_id": 83, "area": 50, "bbox": [465, 111, 12, 6], "iscrowd": 0}, {"id": 378367, "category_id": 83, "area": 41, "bbox": [514, 107, 11, 5], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 6389, "bbox": [265, 302, 161, 177], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 116, "bbox": [588, 220, 8, 15], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 211, "bbox": [412, 152, 14, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00000881", "file_name": "ADE_val_00000881.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 20849, "bbox": [0, 89, 477, 89], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 32708, "bbox": [0, 0, 477, 75], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 13518, "bbox": [2, 128, 475, 101], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 10097, "bbox": [2, 73, 475, 35], "iscrowd": 0}, {"id": 16758784, "category_id": 110, "area": 49203, "bbox": [2, 152, 475, 144], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 121, "bbox": [206, 159, 32, 13], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 534, "bbox": [314, 109, 41, 47], "iscrowd": 0}, {"id": 2178488, "category_id": 20, "area": 775, "bbox": [296, 111, 42, 50], "iscrowd": 0}]}, {"image_id": "ADE_val_00000882", "file_name": "ADE_val_00000882.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 66734, "bbox": [0, 26, 479, 311], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 64363, "bbox": [0, 0, 480, 225], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 28233, "bbox": [33, 121, 353, 233], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 1608, "bbox": [339, 337, 141, 22], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 218, "bbox": [192, 315, 10, 35], "iscrowd": 0}, {"id": 5374073, "category_id": 13, "area": 138, "bbox": [204, 318, 12, 31], "iscrowd": 0}, {"id": 4589745, "category_id": 13, "area": 82, "bbox": [401, 317, 9, 18], "iscrowd": 0}, {"id": 5439654, "category_id": 13, "area": 64, "bbox": [365, 320, 7, 17], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 68, "bbox": [439, 125, 13, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00000883", "file_name": "ADE_val_00000883.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 63948, "bbox": [2, 1, 517, 245], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 15196, "bbox": [2, 214, 517, 176], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 950, "bbox": [92, 122, 17, 58], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 16193, "bbox": [99, 180, 404, 210], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 784, "bbox": [107, 61, 30, 30], "iscrowd": 0}, {"id": 15393018, "category_id": 9, "area": 418, "bbox": [7, 78, 19, 24], "iscrowd": 0}, {"id": 15124956, "category_id": 9, "area": 2419, "bbox": [2, 125, 41, 70], "iscrowd": 0}, {"id": 14285771, "category_id": 9, "area": 1392, "bbox": [132, 121, 30, 62], "iscrowd": 0}, {"id": 16765142, "category_id": 9, "area": 14959, "bbox": [242, 81, 136, 129], "iscrowd": 0}, {"id": 13303757, "category_id": 9, "area": 12498, "bbox": [416, 65, 104, 136], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 405, "bbox": [126, 155, 28, 27], "iscrowd": 0}, {"id": 4784299, "category_id": 13, "area": 807, "bbox": [50, 154, 35, 44], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 336, "bbox": [86, 124, 8, 56], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 994, "bbox": [323, 196, 82, 38], "iscrowd": 0}, {"id": 4265700, "category_id": 16, "area": 11292, "bbox": [361, 242, 159, 141], "iscrowd": 0}, {"id": 5898495, "category_id": 16, "area": 1514, "bbox": [221, 206, 65, 28], "iscrowd": 0}, {"id": 3542518, "category_id": 16, "area": 1902, "bbox": [47, 199, 57, 79], "iscrowd": 0}, {"id": 6947071, "category_id": 16, "area": 12953, "bbox": [0, 335, 453, 55], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 377, "bbox": [400, 191, 40, 15], "iscrowd": 0}, {"id": 20166, "category_id": 20, "area": 218, "bbox": [417, 200, 44, 6], "iscrowd": 0}, {"id": 672955, "category_id": 20, "area": 2363, "bbox": [374, 206, 77, 39], "iscrowd": 0}, {"id": 1067209, "category_id": 20, "area": 266, "bbox": [346, 186, 38, 14], "iscrowd": 0}, {"id": 1323215, "category_id": 20, "area": 1085, "bbox": [283, 196, 44, 41], "iscrowd": 0}, {"id": 16312, "category_id": 20, "area": 321, "bbox": [231, 181, 23, 25], "iscrowd": 0}, {"id": 350425, "category_id": 20, "area": 384, "bbox": [173, 179, 23, 20], "iscrowd": 0}, {"id": 2118581, "category_id": 20, "area": 6378, "bbox": [293, 221, 145, 159], "iscrowd": 0}, {"id": 17088, "category_id": 20, "area": 1337, "bbox": [476, 353, 44, 37], "iscrowd": 0}, {"id": 19917, "category_id": 20, "area": 3078, "bbox": [157, 196, 68, 91], "iscrowd": 0}, {"id": 1598641, "category_id": 20, "area": 12611, "bbox": [180, 237, 172, 113], "iscrowd": 0}, {"id": 1000631, "category_id": 20, "area": 1605, "bbox": [136, 188, 34, 88], "iscrowd": 0}, {"id": 18385, "category_id": 20, "area": 180, "bbox": [137, 181, 34, 8], "iscrowd": 0}, {"id": 153047, "category_id": 20, "area": 364, "bbox": [82, 181, 26, 20], "iscrowd": 0}, {"id": 12518, "category_id": 20, "area": 2501, "bbox": [74, 185, 63, 94], "iscrowd": 0}, {"id": 16826, "category_id": 20, "area": 220, "bbox": [56, 183, 27, 16], "iscrowd": 0}, {"id": 25558, "category_id": 20, "area": 940, "bbox": [2, 185, 24, 44], "iscrowd": 0}, {"id": 12979, "category_id": 20, "area": 3017, "bbox": [2, 194, 57, 144], "iscrowd": 0}, {"id": 19887, "category_id": 20, "area": 389, "bbox": [495, 187, 22, 22], "iscrowd": 0}, {"id": 12488, "category_id": 20, "area": 445, "bbox": [462, 195, 39, 13], "iscrowd": 0}, {"id": 25015, "category_id": 20, "area": 104, "bbox": [210, 183, 20, 15], "iscrowd": 0}, {"id": 1394647, "category_id": 20, "area": 233, "bbox": [31, 181, 20, 16], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 971, "bbox": [170, 119, 33, 30], "iscrowd": 0}, {"id": 5177597, "category_id": 23, "area": 875, "bbox": [380, 105, 27, 34], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 341, "bbox": [213, 183, 28, 20], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 614, "bbox": [455, 226, 29, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00000884", "file_name": "ADE_val_00000884.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 16946, "bbox": [0, 0, 256, 172], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 2048, "bbox": [0, 211, 255, 30], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 171, "bbox": [170, 195, 27, 8], "iscrowd": 0}, {"id": 4915362, "category_id": 13, "area": 57, "bbox": [160, 209, 4, 18], "iscrowd": 0}, {"id": 3342516, "category_id": 13, "area": 164, "bbox": [39, 214, 10, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00000885", "file_name": "ADE_val_00000885.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 104240, "bbox": [0, 31, 682, 480], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 188698, "bbox": [11, 201, 671, 310], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 35206, "bbox": [1, 0, 681, 72], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3474, "bbox": [402, 66, 37, 102], "iscrowd": 0}, {"id": 13500397, "category_id": 9, "area": 7100, "bbox": [500, 52, 65, 131], "iscrowd": 0}, {"id": 15990262, "category_id": 9, "area": 1707, "bbox": [663, 37, 19, 161], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1137, "bbox": [69, 173, 31, 42], "iscrowd": 0}, {"id": 3342080, "category_id": 15, "area": 786, "bbox": [269, 168, 24, 35], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 129, "bbox": [280, 54, 34, 7], "iscrowd": 0}, {"id": 43007, "category_id": 83, "area": 117, "bbox": [71, 46, 23, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00000886", "file_name": "ADE_val_00000886.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 171581, "bbox": [0, 37, 775, 297], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 23639, "bbox": [402, 282, 373, 227], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 63843, "bbox": [0, 1, 775, 107], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1124, "bbox": [281, 268, 22, 59], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 128924, "bbox": [0, 320, 775, 191], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 134, "bbox": [48, 212, 16, 11], "iscrowd": 0}, {"id": 9635839, "category_id": 44, "area": 121, "bbox": [302, 251, 12, 12], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 15, "bbox": [334, 92, 5, 3], "iscrowd": 0}, {"id": 39935, "category_id": 83, "area": 17, "bbox": [358, 97, 5, 4], "iscrowd": 0}, {"id": 1347580, "category_id": 83, "area": 16, "bbox": [375, 89, 4, 4], "iscrowd": 0}, {"id": 44531, "category_id": 83, "area": 17, "bbox": [397, 94, 5, 5], "iscrowd": 0}, {"id": 433662, "category_id": 83, "area": 16, "bbox": [438, 93, 5, 4], "iscrowd": 0}, {"id": 39167, "category_id": 83, "area": 24, "bbox": [459, 84, 7, 4], "iscrowd": 0}, {"id": 40422, "category_id": 83, "area": 18, "bbox": [481, 89, 5, 5], "iscrowd": 0}, {"id": 107519, "category_id": 83, "area": 22, "bbox": [527, 88, 6, 5], "iscrowd": 0}, {"id": 1740799, "category_id": 83, "area": 15, "bbox": [576, 86, 4, 4], "iscrowd": 0}, {"id": 41983, "category_id": 83, "area": 20, "bbox": [610, 78, 5, 4], "iscrowd": 0}, {"id": 47103, "category_id": 83, "area": 20, "bbox": [626, 84, 5, 5], "iscrowd": 0}, {"id": 45800, "category_id": 83, "area": 20, "bbox": [679, 83, 5, 5], "iscrowd": 0}, {"id": 1354721, "category_id": 83, "area": 20, "bbox": [666, 75, 6, 4], "iscrowd": 0}, {"id": 46335, "category_id": 83, "area": 21, "bbox": [711, 64, 6, 4], "iscrowd": 0}, {"id": 1557503, "category_id": 83, "area": 24, "bbox": [724, 72, 6, 5], "iscrowd": 0}, {"id": 46847, "category_id": 83, "area": 16, "bbox": [734, 81, 6, 4], "iscrowd": 0}, {"id": 1688312, "category_id": 83, "area": 19, "bbox": [593, 69, 6, 4], "iscrowd": 0}, {"id": 44287, "category_id": 83, "area": 18, "bbox": [559, 79, 5, 5], "iscrowd": 0}, {"id": 41704, "category_id": 83, "area": 24, "bbox": [540, 72, 6, 4], "iscrowd": 0}, {"id": 893160, "category_id": 83, "area": 22, "bbox": [550, 48, 6, 5], "iscrowd": 0}, {"id": 366079, "category_id": 83, "area": 22, "bbox": [613, 45, 7, 4], "iscrowd": 0}, {"id": 1618943, "category_id": 83, "area": 22, "bbox": [679, 41, 6, 5], "iscrowd": 0}, {"id": 692223, "category_id": 83, "area": 26, "bbox": [661, 27, 7, 5], "iscrowd": 0}, {"id": 38910, "category_id": 83, "area": 28, "bbox": [638, 10, 6, 5], "iscrowd": 0}, {"id": 170751, "category_id": 83, "area": 30, "bbox": [590, 31, 7, 6], "iscrowd": 0}, {"id": 1090288, "category_id": 83, "area": 23, "bbox": [524, 37, 7, 4], "iscrowd": 0}, {"id": 1417215, "category_id": 83, "area": 22, "bbox": [17, 24, 6, 5], "iscrowd": 0}, {"id": 301306, "category_id": 83, "area": 24, "bbox": [61, 16, 7, 5], "iscrowd": 0}, {"id": 825599, "category_id": 83, "area": 25, "bbox": [78, 36, 6, 5], "iscrowd": 0}, {"id": 430591, "category_id": 83, "area": 31, "bbox": [121, 29, 7, 5], "iscrowd": 0}, {"id": 510186, "category_id": 83, "area": 23, "bbox": [129, 47, 5, 5], "iscrowd": 0}, {"id": 898047, "category_id": 83, "area": 21, "bbox": [174, 57, 5, 5], "iscrowd": 0}, {"id": 1490419, "category_id": 83, "area": 27, "bbox": [172, 41, 6, 5], "iscrowd": 0}, {"id": 1351935, "category_id": 83, "area": 26, "bbox": [213, 65, 6, 5], "iscrowd": 0}, {"id": 51199, "category_id": 83, "area": 22, "bbox": [217, 52, 6, 4], "iscrowd": 0}, {"id": 1020652, "category_id": 83, "area": 24, "bbox": [248, 72, 6, 5], "iscrowd": 0}, {"id": 50426, "category_id": 83, "area": 21, "bbox": [256, 60, 6, 5], "iscrowd": 0}, {"id": 891391, "category_id": 83, "area": 22, "bbox": [263, 46, 7, 4], "iscrowd": 0}, {"id": 42994, "category_id": 83, "area": 21, "bbox": [290, 69, 6, 4], "iscrowd": 0}, {"id": 49653, "category_id": 83, "area": 23, "bbox": [301, 56, 6, 5], "iscrowd": 0}, {"id": 244479, "category_id": 83, "area": 25, "bbox": [335, 64, 6, 5], "iscrowd": 0}, {"id": 765439, "category_id": 83, "area": 21, "bbox": [350, 83, 5, 5], "iscrowd": 0}, {"id": 48639, "category_id": 83, "area": 23, "bbox": [393, 80, 6, 5], "iscrowd": 0}, {"id": 49151, "category_id": 83, "area": 19, "bbox": [488, 74, 5, 4], "iscrowd": 0}, {"id": 1623551, "category_id": 83, "area": 26, "bbox": [110, 7, 6, 5], "iscrowd": 0}, {"id": 967423, "category_id": 83, "area": 27, "bbox": [168, 22, 8, 5], "iscrowd": 0}, {"id": 49895, "category_id": 83, "area": 23, "bbox": [219, 35, 6, 4], "iscrowd": 0}, {"id": 45567, "category_id": 83, "area": 24, "bbox": [270, 27, 7, 6], "iscrowd": 0}, {"id": 1684223, "category_id": 83, "area": 24, "bbox": [313, 40, 6, 5], "iscrowd": 0}, {"id": 313087, "category_id": 83, "area": 21, "bbox": [351, 51, 6, 5], "iscrowd": 0}, {"id": 437503, "category_id": 83, "area": 15, "bbox": [384, 61, 4, 4], "iscrowd": 0}, {"id": 1417190, "category_id": 83, "area": 23, "bbox": [405, 46, 6, 4], "iscrowd": 0}, {"id": 42990, "category_id": 83, "area": 23, "bbox": [428, 29, 6, 4], "iscrowd": 0}, {"id": 38389, "category_id": 83, "area": 21, "bbox": [436, 56, 5, 5], "iscrowd": 0}, {"id": 46311, "category_id": 83, "area": 18, "bbox": [463, 41, 5, 4], "iscrowd": 0}, {"id": 240893, "category_id": 83, "area": 19, "bbox": [491, 52, 5, 5], "iscrowd": 0}, {"id": 569845, "category_id": 83, "area": 24, "bbox": [493, 22, 6, 5], "iscrowd": 0}, {"id": 46313, "category_id": 83, "area": 21, "bbox": [563, 16, 5, 5], "iscrowd": 0}, {"id": 110079, "category_id": 83, "area": 26, "bbox": [457, 6, 6, 5], "iscrowd": 0}, {"id": 764671, "category_id": 83, "area": 27, "bbox": [529, 0, 8, 4], "iscrowd": 0}, {"id": 39679, "category_id": 83, "area": 30, "bbox": [389, 13, 7, 6], "iscrowd": 0}, {"id": 1219071, "category_id": 83, "area": 34, "bbox": [219, 14, 8, 5], "iscrowd": 0}, {"id": 36836, "category_id": 83, "area": 33, "bbox": [279, 5, 8, 5], "iscrowd": 0}, {"id": 51183, "category_id": 83, "area": 29, "bbox": [327, 20, 7, 5], "iscrowd": 0}, {"id": 568319, "category_id": 83, "area": 30, "bbox": [369, 33, 7, 6], "iscrowd": 0}]}, {"image_id": "ADE_val_00000887", "file_name": "ADE_val_00000887.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 42539, "bbox": [0, 0, 479, 318], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 31099, "bbox": [73, 0, 322, 147], "iscrowd": 0}, {"id": 16711762, "category_id": 102, "area": 4881, "bbox": [116, 293, 231, 27], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 1986, "bbox": [157, 258, 153, 14], "iscrowd": 0}, {"id": 14613008, "category_id": 32, "area": 29003, "bbox": [2, 310, 476, 69], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 9893, "bbox": [0, 83, 165, 163], "iscrowd": 0}, {"id": 3211008, "category_id": 42, "area": 8547, "bbox": [0, 181, 166, 94], "iscrowd": 0}, {"id": 1179392, "category_id": 42, "area": 14166, "bbox": [297, 0, 181, 218], "iscrowd": 0}, {"id": 1503744, "category_id": 42, "area": 12014, "bbox": [297, 73, 182, 175], "iscrowd": 0}, {"id": 1638165, "category_id": 42, "area": 9770, "bbox": [297, 181, 181, 103], "iscrowd": 0}, {"id": 1638153, "category_id": 42, "area": 10093, "bbox": [0, 0, 169, 217], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 9, "bbox": [212, 304, 3, 5], "iscrowd": 0}]}, {"image_id": "ADE_val_00000888", "file_name": "ADE_val_00000888.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 76325, "bbox": [0, 0, 499, 346], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17408, "bbox": [2, 298, 497, 50], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 42885, "bbox": [3, 1, 495, 119], "iscrowd": 0}, {"id": 6094592, "category_id": 107, "area": 3105, "bbox": [224, 196, 51, 90], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2859, "bbox": [67, 205, 29, 116], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 6502, "bbox": [452, 101, 47, 233], "iscrowd": 0}, {"id": 6390, "category_id": 19, "area": 6177, "bbox": [388, 141, 60, 161], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 579, "bbox": [421, 290, 34, 37], "iscrowd": 0}, {"id": 14155547, "category_id": 31, "area": 597, "bbox": [43, 296, 33, 33], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 7674, "bbox": [190, 15, 120, 175], "iscrowd": 0}, {"id": 14890752, "category_id": 86, "area": 1326, "bbox": [321, 66, 51, 156], "iscrowd": 0}, {"id": 16719892, "category_id": 86, "area": 1288, "bbox": [130, 150, 51, 74], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 199, "bbox": [391, 298, 27, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000889", "file_name": "ADE_val_00000889.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 24775, "bbox": [0, 0, 564, 65], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 76184, "bbox": [0, 1, 599, 261], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 67644, "bbox": [2, 188, 564, 177], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 5189, "bbox": [47, 222, 551, 115], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 701, "bbox": [430, 218, 37, 25], "iscrowd": 0}, {"id": 13265664, "category_id": 21, "area": 747, "bbox": [164, 215, 35, 27], "iscrowd": 0}, {"id": 11818520, "category_id": 21, "area": 1049, "bbox": [353, 212, 40, 34], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 5300, "bbox": [466, 231, 109, 133], "iscrowd": 0}, {"id": 1616895, "category_id": 33, "area": 481, "bbox": [400, 227, 28, 24], "iscrowd": 0}, {"id": 836606, "category_id": 33, "area": 892, "bbox": [2, 221, 64, 19], "iscrowd": 0}, {"id": 644607, "category_id": 33, "area": 358, "bbox": [31, 215, 66, 8], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1179, "bbox": [560, 324, 39, 41], "iscrowd": 0}, {"id": 11862271, "category_id": 44, "area": 354, "bbox": [211, 213, 22, 17], "iscrowd": 0}, {"id": 11796735, "category_id": 44, "area": 2848, "bbox": [181, 109, 144, 21], "iscrowd": 0}, {"id": 10092793, "category_id": 44, "area": 185, "bbox": [347, 196, 16, 14], "iscrowd": 0}, {"id": 11011297, "category_id": 44, "area": 325, "bbox": [197, 181, 14, 41], "iscrowd": 0}, {"id": 9441279, "category_id": 44, "area": 8192, "bbox": [311, 101, 237, 143], "iscrowd": 0}, {"id": 11275263, "category_id": 44, "area": 733, "bbox": [557, 181, 23, 32], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 401, "bbox": [385, 64, 10, 160], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1294, "bbox": [568, 1, 8, 275], "iscrowd": 0}, {"id": 16716608, "category_id": 94, "area": 1776, "bbox": [586, 2, 8, 273], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 114, "bbox": [486, 208, 8, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00000890", "file_name": "ADE_val_00000890.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 32259, "bbox": [0, 458, 510, 207], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 193103, "bbox": [0, 0, 510, 607], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 51270, "bbox": [0, 635, 510, 132], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 161, "bbox": [87, 589, 390, 54], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 1116, "bbox": [361, 621, 32, 35], "iscrowd": 0}, {"id": 12105983, "category_id": 85, "area": 91497, "bbox": [91, 78, 295, 607], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2369, "bbox": [233, 567, 42, 74], "iscrowd": 0}, {"id": 16245239, "category_id": 9, "area": 1220, "bbox": [155, 437, 18, 84], "iscrowd": 0}, {"id": 14798564, "category_id": 9, "area": 1677, "bbox": [203, 431, 22, 88], "iscrowd": 0}, {"id": 15138781, "category_id": 9, "area": 1663, "bbox": [239, 433, 22, 86], "iscrowd": 0}, {"id": 13225459, "category_id": 9, "area": 1878, "bbox": [273, 431, 26, 87], "iscrowd": 0}, {"id": 16699082, "category_id": 9, "area": 617, "bbox": [321, 442, 9, 77], "iscrowd": 0}, {"id": 15129083, "category_id": 9, "area": 1507, "bbox": [235, 303, 23, 71], "iscrowd": 0}, {"id": 13957842, "category_id": 9, "area": 559, "bbox": [313, 313, 10, 65], "iscrowd": 0}, {"id": 14541006, "category_id": 9, "area": 865, "bbox": [160, 306, 16, 68], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 531, "bbox": [488, 599, 19, 57], "iscrowd": 0}, {"id": 3214969, "category_id": 13, "area": 69, "bbox": [377, 609, 10, 11], "iscrowd": 0}, {"id": 3670163, "category_id": 13, "area": 184, "bbox": [352, 611, 13, 29], "iscrowd": 0}, {"id": 3670160, "category_id": 13, "area": 403, "bbox": [91, 617, 17, 52], "iscrowd": 0}, {"id": 3546243, "category_id": 13, "area": 1077, "bbox": [5, 615, 30, 73], "iscrowd": 0}, {"id": 2688405, "category_id": 13, "area": 964, "bbox": [34, 621, 23, 66], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2272, "bbox": [165, 554, 62, 137], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 684, "bbox": [0, 555, 27, 51], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 111, "bbox": [465, 603, 14, 11], "iscrowd": 0}, {"id": 16711922, "category_id": 126, "area": 157, "bbox": [86, 644, 12, 17], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 2139, "bbox": [209, 168, 50, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00000891", "file_name": "ADE_val_00000891.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 119535, "bbox": [57, 91, 398, 420], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 175848, "bbox": [0, 0, 682, 511], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 46931, "bbox": [401, 66, 235, 444], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 3952, "bbox": [174, 149, 73, 73], "iscrowd": 0}]}, {"image_id": "ADE_val_00000892", "file_name": "ADE_val_00000892.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 33472, "bbox": [0, 19, 300, 172], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 16338, "bbox": [0, 0, 300, 97], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2457, "bbox": [58, 24, 203, 155], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 606, "bbox": [246, 206, 53, 19], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 4999, "bbox": [0, 161, 278, 63], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 4831, "bbox": [47, 184, 244, 41], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2042, "bbox": [0, 168, 229, 42], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 742, "bbox": [279, 157, 21, 50], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 720, "bbox": [27, 190, 59, 17], "iscrowd": 0}, {"id": 10030079, "category_id": 122, "area": 191, "bbox": [109, 184, 30, 12], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 107, "bbox": [262, 112, 12, 23], "iscrowd": 0}, {"id": 16716865, "category_id": 150, "area": 144, "bbox": [264, 95, 12, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00000893", "file_name": "ADE_val_00000893.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 34935, "bbox": [0, 1, 499, 267], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 22429, "bbox": [0, 281, 499, 93], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 77100, "bbox": [2, 83, 498, 288], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 3276, "bbox": [4, 36, 76, 49], "iscrowd": 0}, {"id": 65307, "category_id": 42, "area": 3011, "bbox": [101, 44, 71, 46], "iscrowd": 0}, {"id": 124928, "category_id": 42, "area": 3227, "bbox": [182, 43, 72, 50], "iscrowd": 0}, {"id": 2555648, "category_id": 42, "area": 1948, "bbox": [255, 56, 54, 41], "iscrowd": 0}, {"id": 2617105, "category_id": 42, "area": 3532, "bbox": [120, 90, 55, 66], "iscrowd": 0}, {"id": 3272206, "category_id": 42, "area": 3546, "bbox": [67, 87, 53, 70], "iscrowd": 0}, {"id": 458519, "category_id": 42, "area": 3736, "bbox": [3, 83, 64, 76], "iscrowd": 0}, {"id": 319774, "category_id": 42, "area": 10157, "bbox": [108, 249, 118, 106], "iscrowd": 0}, {"id": 2359048, "category_id": 42, "area": 2489, "bbox": [283, 274, 55, 52], "iscrowd": 0}, {"id": 1834496, "category_id": 42, "area": 4272, "bbox": [389, 243, 87, 62], "iscrowd": 0}, {"id": 65280, "category_id": 42, "area": 3188, "bbox": [220, 157, 44, 83], "iscrowd": 0}, {"id": 2424577, "category_id": 42, "area": 4270, "bbox": [34, 192, 79, 58], "iscrowd": 0}, {"id": 2029824, "category_id": 42, "area": 3545, "bbox": [250, 108, 93, 47], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 824, "bbox": [322, 53, 25, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00000894", "file_name": "ADE_val_00000894.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 1881, "bbox": [0, 103, 256, 52], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 26389, "bbox": [0, 0, 255, 116], "iscrowd": 0}]}, {"image_id": "ADE_val_00000895", "file_name": "ADE_val_00000895.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 31352, "bbox": [2, 2, 354, 160], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 884, "bbox": [169, 80, 33, 37], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 35352, "bbox": [2, 111, 353, 223], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4179, "bbox": [4, 1, 349, 32], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1828, "bbox": [3, 14, 20, 104], "iscrowd": 0}, {"id": 15584239, "category_id": 9, "area": 1391, "bbox": [321, 23, 19, 106], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1446, "bbox": [138, 102, 30, 89], "iscrowd": 0}, {"id": 4982410, "category_id": 13, "area": 1099, "bbox": [117, 102, 23, 86], "iscrowd": 0}, {"id": 3808136, "category_id": 13, "area": 797, "bbox": [82, 101, 21, 72], "iscrowd": 0}, {"id": 4915324, "category_id": 13, "area": 5534, "bbox": [28, 100, 62, 170], "iscrowd": 0}, {"id": 4858523, "category_id": 13, "area": 1769, "bbox": [17, 104, 27, 122], "iscrowd": 0}, {"id": 3670153, "category_id": 13, "area": 964, "bbox": [275, 136, 48, 60], "iscrowd": 0}, {"id": 5638550, "category_id": 13, "area": 416, "bbox": [248, 127, 29, 33], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 16711, "bbox": [223, 163, 132, 141], "iscrowd": 0}, {"id": 14679829, "category_id": 32, "area": 5433, "bbox": [205, 123, 150, 75], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 592, "bbox": [239, 9, 35, 37], "iscrowd": 0}, {"id": 59635, "category_id": 37, "area": 481, "bbox": [69, 2, 35, 39], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 638, "bbox": [64, 50, 25, 36], "iscrowd": 0}, {"id": 14824704, "category_id": 135, "area": 645, "bbox": [265, 54, 25, 39], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 4003, "bbox": [176, 196, 52, 86], "iscrowd": 0}, {"id": 16717754, "category_id": 139, "area": 976, "bbox": [186, 160, 29, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00000896", "file_name": "ADE_val_00000896.png", "segments_info": [{"id": 4618360, "category_id": 14, "area": 219523, "bbox": [0, 0, 682, 511], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 57523, "bbox": [351, 43, 282, 438], "iscrowd": 0}]}, {"image_id": "ADE_val_00000897", "file_name": "ADE_val_00000897.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 32232, "bbox": [0, 0, 256, 183], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 3324, "bbox": [21, 0, 199, 19], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2680, "bbox": [67, 102, 114, 43], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 19441, "bbox": [0, 155, 256, 101], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1347, "bbox": [175, 166, 81, 43], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 5755, "bbox": [0, 119, 80, 88], "iscrowd": 0}]}, {"image_id": "ADE_val_00000898", "file_name": "ADE_val_00000898.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14935, "bbox": [0, 4, 255, 251], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3748, "bbox": [0, 0, 255, 28], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 13595, "bbox": [141, 15, 107, 143], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6023, "bbox": [104, 197, 151, 58], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 770, "bbox": [133, 177, 114, 24], "iscrowd": 0}, {"id": 16711864, "category_id": 108, "area": 14831, "bbox": [15, 52, 116, 140], "iscrowd": 0}, {"id": 16318669, "category_id": 108, "area": 6589, "bbox": [17, 178, 112, 77], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 686, "bbox": [139, 162, 44, 23], "iscrowd": 0}, {"id": 786243, "category_id": 113, "area": 594, "bbox": [188, 165, 42, 25], "iscrowd": 0}, {"id": 195193, "category_id": 113, "area": 256, "bbox": [2, 238, 16, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00000899", "file_name": "ADE_val_00000899.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 84068, "bbox": [0, 0, 599, 398], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21331, "bbox": [128, 302, 272, 96], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 20131, "bbox": [12, 1, 103, 258], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1087, "bbox": [351, 194, 24, 115], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 41447, "bbox": [140, 18, 157, 297], "iscrowd": 0}, {"id": 3342107, "category_id": 15, "area": 5743, "bbox": [0, 89, 50, 309], "iscrowd": 0}, {"id": 16711864, "category_id": 108, "area": 14918, "bbox": [440, 266, 159, 132], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 9088, "bbox": [443, 151, 134, 81], "iscrowd": 0}]}, {"image_id": "ADE_val_00000900", "file_name": "ADE_val_00000900.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 7967, "bbox": [2, 1, 254, 34], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7492, "bbox": [2, 62, 253, 193], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 49285, "bbox": [2, 31, 254, 225], "iscrowd": 0}]}, {"image_id": "ADE_val_00000901", "file_name": "ADE_val_00000901.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 17919, "bbox": [0, 87, 420, 227], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14032, "bbox": [70, 217, 335, 97], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 35923, "bbox": [0, 1, 420, 93], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4759, "bbox": [2, 94, 54, 111], "iscrowd": 0}, {"id": 13814527, "category_id": 9, "area": 2646, "bbox": [78, 93, 60, 79], "iscrowd": 0}, {"id": 16774911, "category_id": 9, "area": 2154, "bbox": [366, 96, 40, 76], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 385, "bbox": [232, 85, 33, 16], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 12807, "bbox": [92, 126, 129, 160], "iscrowd": 0}, {"id": 14548752, "category_id": 32, "area": 1146, "bbox": [2, 296, 87, 18], "iscrowd": 0}, {"id": 14545178, "category_id": 32, "area": 14296, "bbox": [256, 136, 130, 163], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 511, "bbox": [220, 1, 32, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00000902", "file_name": "ADE_val_00000902.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 34681, "bbox": [0, 0, 499, 86], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17676, "bbox": [0, 112, 160, 175], "iscrowd": 0}, {"id": 65311, "category_id": 52, "area": 18685, "bbox": [165, 65, 334, 113], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 136, "bbox": [296, 57, 10, 15], "iscrowd": 0}, {"id": 5240856, "category_id": 15, "area": 126, "bbox": [352, 61, 9, 15], "iscrowd": 0}, {"id": 1892642, "category_id": 15, "area": 117, "bbox": [397, 63, 8, 16], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 8353, "bbox": [0, 97, 172, 236], "iscrowd": 0}]}, {"image_id": "ADE_val_00000903", "file_name": "ADE_val_00000903.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 138516, "bbox": [0, 0, 511, 525], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 83799, "bbox": [92, 31, 402, 497], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 26268, "bbox": [2, 519, 509, 64], "iscrowd": 0}]}, {"image_id": "ADE_val_00000904", "file_name": "ADE_val_00000904.png", "segments_info": [{"id": 3289680, "category_id": 4, "area": 31411, "bbox": [2, 219, 227, 280], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 2118, "bbox": [10, 0, 64, 87], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 106281, "bbox": [0, 0, 374, 498], "iscrowd": 0}]}, {"image_id": "ADE_val_00000905", "file_name": "ADE_val_00000905.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 521, "bbox": [131, 98, 46, 18], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 20237, "bbox": [0, 35, 384, 122], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 14856, "bbox": [0, 0, 383, 74], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5384, "bbox": [0, 33, 383, 120], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 11516, "bbox": [152, 15, 231, 71], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 44077, "bbox": [0, 69, 383, 186], "iscrowd": 0}]}, {"image_id": "ADE_val_00000906", "file_name": "ADE_val_00000906.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 108187, "bbox": [0, 40, 761, 311], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 119721, "bbox": [2, 330, 766, 181], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 88154, "bbox": [0, 0, 719, 185], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 8469, "bbox": [642, 228, 125, 190], "iscrowd": 0}, {"id": 5308547, "category_id": 13, "area": 1348, "bbox": [365, 287, 42, 84], "iscrowd": 0}, {"id": 4850839, "category_id": 13, "area": 4066, "bbox": [399, 264, 70, 148], "iscrowd": 0}, {"id": 5177486, "category_id": 13, "area": 1601, "bbox": [134, 278, 42, 99], "iscrowd": 0}, {"id": 2563204, "category_id": 13, "area": 5386, "bbox": [0, 273, 82, 148], "iscrowd": 0}, {"id": 2821812, "category_id": 13, "area": 1844, "bbox": [493, 222, 30, 151], "iscrowd": 0}, {"id": 4987058, "category_id": 13, "area": 1060, "bbox": [482, 270, 28, 101], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 159, "bbox": [114, 103, 16, 39], "iscrowd": 0}, {"id": 1633509, "category_id": 37, "area": 196, "bbox": [222, 87, 15, 42], "iscrowd": 0}, {"id": 2423535, "category_id": 37, "area": 198, "bbox": [345, 74, 12, 41], "iscrowd": 0}, {"id": 65480, "category_id": 37, "area": 170, "bbox": [477, 59, 14, 39], "iscrowd": 0}]}, {"image_id": "ADE_val_00000907", "file_name": "ADE_val_00000907.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 29517, "bbox": [0, 27, 270, 148], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10174, "bbox": [0, 125, 270, 92], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9505, "bbox": [0, 0, 271, 52], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1727, "bbox": [107, 198, 124, 19], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1627, "bbox": [158, 176, 90, 41], "iscrowd": 0}, {"id": 2055621, "category_id": 20, "area": 1659, "bbox": [45, 185, 79, 32], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 4145, "bbox": [43, 123, 218, 54], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 42, "bbox": [240, 27, 11, 4], "iscrowd": 0}]}, {"image_id": "ADE_val_00000908", "file_name": "ADE_val_00000908.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 132778, "bbox": [1, 20, 682, 379], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 67995, "bbox": [1, 326, 666, 186], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 26542, "bbox": [0, 0, 683, 65], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 14668, "bbox": [272, 118, 388, 299], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 6925, "bbox": [0, 270, 88, 149], "iscrowd": 0}, {"id": 674273, "category_id": 20, "area": 7098, "bbox": [69, 261, 105, 134], "iscrowd": 0}, {"id": 1525217, "category_id": 20, "area": 5684, "bbox": [140, 253, 99, 126], "iscrowd": 0}, {"id": 21209, "category_id": 20, "area": 4794, "bbox": [200, 247, 93, 115], "iscrowd": 0}, {"id": 21443, "category_id": 20, "area": 8786, "bbox": [533, 432, 149, 80], "iscrowd": 0}, {"id": 603831, "category_id": 20, "area": 2161, "bbox": [621, 398, 62, 53], "iscrowd": 0}, {"id": 20146, "category_id": 20, "area": 1071, "bbox": [419, 259, 65, 23], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 22691, "bbox": [413, 80, 176, 140], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 33016, "bbox": [283, 266, 274, 177], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 3872, "bbox": [333, 0, 207, 35], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 2374, "bbox": [555, 387, 58, 63], "iscrowd": 0}]}, {"image_id": "ADE_val_00000909", "file_name": "ADE_val_00000909.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 7637, "bbox": [26, 1, 230, 111], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 18550, "bbox": [0, 119, 256, 137], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 749, "bbox": [124, 42, 23, 34], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 308, "bbox": [58, 117, 35, 11], "iscrowd": 0}, {"id": 3866879, "category_id": 16, "area": 3164, "bbox": [137, 187, 93, 68], "iscrowd": 0}, {"id": 6229229, "category_id": 16, "area": 625, "bbox": [60, 127, 44, 38], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 208, "bbox": [88, 33, 13, 16], "iscrowd": 0}, {"id": 1573099, "category_id": 23, "area": 153, "bbox": [40, 52, 9, 17], "iscrowd": 0}, {"id": 4129023, "category_id": 23, "area": 169, "bbox": [88, 71, 13, 13], "iscrowd": 0}, {"id": 3342591, "category_id": 23, "area": 187, "bbox": [47, 31, 12, 18], "iscrowd": 0}, {"id": 1384676, "category_id": 23, "area": 110, "bbox": [48, 73, 11, 10], "iscrowd": 0}, {"id": 2102271, "category_id": 23, "area": 90, "bbox": [33, 73, 9, 10], "iscrowd": 0}, {"id": 3804927, "category_id": 23, "area": 172, "bbox": [79, 52, 11, 17], "iscrowd": 0}, {"id": 4391167, "category_id": 23, "area": 121, "bbox": [56, 52, 8, 18], "iscrowd": 0}, {"id": 3342576, "category_id": 23, "area": 146, "bbox": [32, 30, 9, 18], "iscrowd": 0}, {"id": 4398325, "category_id": 23, "area": 152, "bbox": [26, 51, 8, 19], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 1720, "bbox": [105, 96, 77, 45], "iscrowd": 0}, {"id": 16735269, "category_id": 24, "area": 2490, "bbox": [183, 92, 73, 50], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 1013, "bbox": [87, 88, 50, 46], "iscrowd": 0}, {"id": 15204133, "category_id": 31, "area": 1221, "bbox": [34, 91, 52, 45], "iscrowd": 0}, {"id": 12772868, "category_id": 31, "area": 387, "bbox": [0, 96, 39, 22], "iscrowd": 0}, {"id": 15396386, "category_id": 31, "area": 3041, "bbox": [115, 105, 75, 67], "iscrowd": 0}, {"id": 14941952, "category_id": 31, "area": 2224, "bbox": [210, 157, 46, 80], "iscrowd": 0}, {"id": 12975907, "category_id": 31, "area": 4291, "bbox": [0, 116, 79, 74], "iscrowd": 0}, {"id": 12843008, "category_id": 31, "area": 590, "bbox": [218, 84, 37, 27], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 907, "bbox": [75, 84, 72, 27], "iscrowd": 0}, {"id": 2380260, "category_id": 39, "area": 637, "bbox": [164, 81, 48, 23], "iscrowd": 0}, {"id": 2372600, "category_id": 39, "area": 611, "bbox": [18, 83, 45, 29], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 332, "bbox": [106, 2, 26, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00000910", "file_name": "ADE_val_00000910.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 26845, "bbox": [0, 16, 319, 192], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14305, "bbox": [2, 176, 318, 64], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6816, "bbox": [2, 1, 318, 33], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 1627, "bbox": [10, 55, 34, 49], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5358, "bbox": [63, 57, 69, 86], "iscrowd": 0}, {"id": 15921641, "category_id": 9, "area": 1690, "bbox": [215, 28, 36, 79], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1530, "bbox": [13, 169, 64, 53], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 2678, "bbox": [193, 22, 36, 123], "iscrowd": 0}, {"id": 212715, "category_id": 19, "area": 3276, "bbox": [238, 17, 37, 136], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 3466, "bbox": [68, 139, 73, 73], "iscrowd": 0}, {"id": 15000064, "category_id": 31, "area": 2136, "bbox": [183, 128, 55, 69], "iscrowd": 0}, {"id": 13953045, "category_id": 31, "area": 3130, "bbox": [242, 134, 67, 82], "iscrowd": 0}, {"id": 12187136, "category_id": 31, "area": 2236, "bbox": [116, 133, 68, 64], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 651, "bbox": [11, 0, 70, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000911", "file_name": "ADE_val_00000911.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 53195, "bbox": [0, 0, 374, 197], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10028, "bbox": [2, 192, 317, 42], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4189, "bbox": [292, 150, 82, 84], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1756, "bbox": [341, 107, 34, 60], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 689, "bbox": [294, 160, 62, 42], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2101, "bbox": [0, 134, 76, 68], "iscrowd": 0}, {"id": 409034, "category_id": 20, "area": 817, "bbox": [117, 134, 58, 71], "iscrowd": 0}, {"id": 12264, "category_id": 20, "area": 1612, "bbox": [56, 136, 69, 70], "iscrowd": 0}, {"id": 14826, "category_id": 20, "area": 2640, "bbox": [174, 134, 59, 73], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3747, "bbox": [198, 29, 56, 68], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 619, "bbox": [10, 5, 29, 23], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 3192, "bbox": [8, 166, 165, 67], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1497, "bbox": [107, 136, 65, 38], "iscrowd": 0}]}, {"image_id": "ADE_val_00000912", "file_name": "ADE_val_00000912.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 19414, "bbox": [2, 22, 253, 92], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 37010, "bbox": [2, 103, 253, 153], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6124, "bbox": [0, 0, 255, 33], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 1060, "bbox": [34, 85, 52, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00000913", "file_name": "ADE_val_00000913.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 28434, "bbox": [0, 0, 331, 175], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 13167, "bbox": [2, 149, 329, 92], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1534, "bbox": [0, 1, 101, 25], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 5779, "bbox": [23, 11, 131, 218], "iscrowd": 0}, {"id": 6097151, "category_id": 25, "area": 627, "bbox": [270, 58, 28, 75], "iscrowd": 0}, {"id": 5898467, "category_id": 25, "area": 3986, "bbox": [178, 34, 97, 156], "iscrowd": 0}]}, {"image_id": "ADE_val_00000914", "file_name": "ADE_val_00000914.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 65112, "bbox": [2, 26, 636, 357], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 93782, "bbox": [2, 262, 637, 218], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 47415, "bbox": [2, 1, 637, 98], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 9099, "bbox": [452, 157, 89, 104], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 3060, "bbox": [55, 323, 69, 53], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 100, "bbox": [491, 145, 11, 10], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 199, "bbox": [409, 145, 15, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00000915", "file_name": "ADE_val_00000915.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 27809, "bbox": [0, 316, 500, 58], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 136821, "bbox": [0, 0, 500, 322], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 885, "bbox": [279, 169, 43, 26], "iscrowd": 0}, {"id": 13756107, "category_id": 9, "area": 441, "bbox": [239, 173, 21, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00000916", "file_name": "ADE_val_00000916.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 69291, "bbox": [0, 0, 299, 313], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 20997, "bbox": [2, 151, 296, 224], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 8938, "bbox": [2, 350, 296, 48], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 186, "bbox": [136, 351, 9, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00000917", "file_name": "ADE_val_00000917.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 60350, "bbox": [0, 0, 885, 277], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 11801, "bbox": [189, 140, 177, 113], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 55546, "bbox": [0, 0, 881, 144], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 27160, "bbox": [0, 65, 247, 171], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 55059, "bbox": [318, 117, 567, 137], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 37758, "bbox": [0, 374, 551, 137], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 16592, "bbox": [155, 65, 340, 92], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 52561, "bbox": [56, 269, 828, 113], "iscrowd": 0}, {"id": 15466240, "category_id": 123, "area": 132578, "bbox": [0, 250, 885, 261], "iscrowd": 0}]}, {"image_id": "ADE_val_00000918", "file_name": "ADE_val_00000918.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 153892, "bbox": [0, 0, 511, 675], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 97022, "bbox": [3, 107, 506, 572], "iscrowd": 0}, {"id": 16769024, "category_id": 114, "area": 92532, "bbox": [0, 118, 460, 564], "iscrowd": 0}]}, {"image_id": "ADE_val_00000919", "file_name": "ADE_val_00000919.png", "segments_info": [{"id": 9240463, "category_id": 17, "area": 143539, "bbox": [0, 0, 689, 366], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 58416, "bbox": [1, 3, 684, 155], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 113973, "bbox": [1, 292, 688, 219], "iscrowd": 0}, {"id": 16769024, "category_id": 114, "area": 11490, "bbox": [307, 0, 56, 299], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2932, "bbox": [651, 356, 38, 153], "iscrowd": 0}, {"id": 5513643, "category_id": 13, "area": 5006, "bbox": [360, 320, 77, 121], "iscrowd": 0}, {"id": 5046432, "category_id": 13, "area": 2307, "bbox": [318, 284, 47, 79], "iscrowd": 0}, {"id": 3154057, "category_id": 13, "area": 3528, "bbox": [229, 352, 81, 94], "iscrowd": 0}, {"id": 4784308, "category_id": 13, "area": 5882, "bbox": [104, 318, 81, 126], "iscrowd": 0}, {"id": 2949264, "category_id": 13, "area": 2609, "bbox": [63, 291, 63, 80], "iscrowd": 0}]}, {"image_id": "ADE_val_00000920", "file_name": "ADE_val_00000920.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14367, "bbox": [0, 125, 165, 145], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 38696, "bbox": [105, 31, 390, 221], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 58013, "bbox": [0, 0, 495, 190], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 411, "bbox": [466, 191, 23, 21], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 37931, "bbox": [0, 208, 494, 165], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 4015, "bbox": [74, 137, 89, 112], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 660, "bbox": [310, 204, 49, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00000921", "file_name": "ADE_val_00000921.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 87912, "bbox": [0, 0, 683, 423], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 52796, "bbox": [1, 341, 393, 170], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 9166, "bbox": [313, 28, 57, 196], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 35488, "bbox": [0, 222, 284, 148], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 17616, "bbox": [308, 1, 76, 410], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 26873, "bbox": [9, 27, 220, 137], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1782, "bbox": [143, 2, 95, 66], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 566, "bbox": [46, 179, 58, 46], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 98294, "bbox": [366, 137, 317, 375], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 11551, "bbox": [310, 423, 221, 88], "iscrowd": 0}]}, {"image_id": "ADE_val_00000922", "file_name": "ADE_val_00000922.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 265762, "bbox": [0, 0, 767, 479], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 41532, "bbox": [0, 387, 767, 124], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 46033, "bbox": [0, 0, 767, 180], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3965, "bbox": [418, 176, 103, 106], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 24709, "bbox": [650, 90, 92, 420], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 76, "bbox": [486, 121, 22, 5], "iscrowd": 0}, {"id": 37363, "category_id": 83, "area": 77, "bbox": [157, 128, 17, 6], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 315, "bbox": [446, 251, 31, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00000923", "file_name": "ADE_val_00000923.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 60053, "bbox": [2, 1, 397, 278], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 34897, "bbox": [31, 61, 321, 218], "iscrowd": 0}]}, {"image_id": "ADE_val_00000924", "file_name": "ADE_val_00000924.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 100581, "bbox": [2, 1, 388, 475], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 15299, "bbox": [0, 461, 390, 60], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 886, "bbox": [0, 474, 111, 17], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 464, "bbox": [370, 411, 20, 46], "iscrowd": 0}, {"id": 3016850, "category_id": 13, "area": 317, "bbox": [310, 444, 22, 27], "iscrowd": 0}, {"id": 4784277, "category_id": 13, "area": 243, "bbox": [329, 451, 17, 20], "iscrowd": 0}, {"id": 4325552, "category_id": 13, "area": 151, "bbox": [345, 451, 15, 19], "iscrowd": 0}, {"id": 4394406, "category_id": 13, "area": 64, "bbox": [359, 459, 9, 10], "iscrowd": 0}, {"id": 3872643, "category_id": 13, "area": 189, "bbox": [97, 446, 12, 39], "iscrowd": 0}, {"id": 4267384, "category_id": 13, "area": 786, "bbox": [79, 427, 18, 66], "iscrowd": 0}, {"id": 3014803, "category_id": 13, "area": 478, "bbox": [65, 434, 14, 50], "iscrowd": 0}, {"id": 2433189, "category_id": 13, "area": 275, "bbox": [57, 437, 10, 46], "iscrowd": 0}, {"id": 4718772, "category_id": 13, "area": 488, "bbox": [45, 430, 14, 57], "iscrowd": 0}, {"id": 4527263, "category_id": 13, "area": 612, "bbox": [27, 441, 17, 49], "iscrowd": 0}, {"id": 2424966, "category_id": 13, "area": 293, "bbox": [5, 451, 11, 39], "iscrowd": 0}]}, {"image_id": "ADE_val_00000925", "file_name": "ADE_val_00000925.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 43141, "bbox": [0, 1, 298, 398], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5671, "bbox": [63, 366, 202, 33], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 10903, "bbox": [29, 0, 269, 54], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 25987, "bbox": [60, 49, 172, 225], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 9032, "bbox": [59, 50, 178, 62], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2031, "bbox": [267, 71, 30, 74], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 16853, "bbox": [59, 273, 196, 101], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1966, "bbox": [59, 222, 45, 70], "iscrowd": 0}, {"id": 53735, "category_id": 40, "area": 2116, "bbox": [204, 228, 47, 66], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 423, "bbox": [142, 11, 40, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00000926", "file_name": "ADE_val_00000926.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 17623, "bbox": [56, 0, 263, 174], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1708, "bbox": [92, 196, 122, 21], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 9261, "bbox": [108, 1, 168, 64], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 4527, "bbox": [213, 161, 107, 56], "iscrowd": 0}, {"id": 16056084, "category_id": 31, "area": 9261, "bbox": [0, 10, 97, 207], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 13639, "bbox": [56, 110, 237, 99], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 503, "bbox": [214, 71, 45, 18], "iscrowd": 0}, {"id": 42495, "category_id": 40, "area": 955, "bbox": [255, 74, 27, 56], "iscrowd": 0}, {"id": 48639, "category_id": 40, "area": 3079, "bbox": [188, 74, 81, 68], "iscrowd": 0}, {"id": 46570, "category_id": 40, "area": 3026, "bbox": [0, 68, 56, 88], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 610, "bbox": [131, 4, 37, 80], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 274, "bbox": [154, 81, 12, 26], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 77, "bbox": [141, 113, 23, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00000927", "file_name": "ADE_val_00000927.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 12145, "bbox": [0, 135, 500, 67], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 15253, "bbox": [270, 193, 229, 182], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 75551, "bbox": [0, 0, 499, 172], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 93, "bbox": [448, 181, 14, 15], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 2517, "bbox": [32, 141, 38, 72], "iscrowd": 0}, {"id": 2040831, "category_id": 43, "area": 889, "bbox": [117, 156, 22, 43], "iscrowd": 0}, {"id": 3408123, "category_id": 43, "area": 2737, "bbox": [402, 148, 35, 85], "iscrowd": 0}, {"id": 4260859, "category_id": 43, "area": 854, "bbox": [351, 162, 21, 43], "iscrowd": 0}, {"id": 7340287, "category_id": 112, "area": 2066, "bbox": [329, 216, 42, 57], "iscrowd": 0}]}, {"image_id": "ADE_val_00000928", "file_name": "ADE_val_00000928.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 84764, "bbox": [0, 0, 682, 402], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 89469, "bbox": [0, 349, 682, 162], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 35844, "bbox": [0, 0, 431, 138], "iscrowd": 0}, {"id": 15466240, "category_id": 123, "area": 106531, "bbox": [251, 51, 431, 383], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1558, "bbox": [562, 12, 51, 46], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 710, "bbox": [2, 293, 59, 53], "iscrowd": 0}]}, {"image_id": "ADE_val_00000929", "file_name": "ADE_val_00000929.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 166607, "bbox": [2, 0, 597, 449], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 33634, "bbox": [435, 1, 164, 215], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 20191, "bbox": [149, 343, 370, 106], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 321, "bbox": [301, 156, 17, 23], "iscrowd": 0}, {"id": 3022335, "category_id": 23, "area": 381, "bbox": [262, 162, 21, 20], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 9724, "bbox": [183, 114, 78, 151], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 6216, "bbox": [49, 398, 197, 51], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 2611, "bbox": [377, 369, 62, 78], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 1761, "bbox": [400, 230, 51, 48], "iscrowd": 0}, {"id": 16713184, "category_id": 126, "area": 3649, "bbox": [338, 349, 81, 77], "iscrowd": 0}]}, {"image_id": "ADE_val_00000930", "file_name": "ADE_val_00000930.png", "segments_info": [{"id": 3289680, "category_id": 4, "area": 82550, "bbox": [2, 237, 641, 246], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 50718, "bbox": [0, 0, 643, 94], "iscrowd": 0}, {"id": 65311, "category_id": 52, "area": 70230, "bbox": [0, 42, 643, 216], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 60, "bbox": [284, 6, 10, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00000931", "file_name": "ADE_val_00000931.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 26138, "bbox": [71, 116, 415, 149], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 67120, "bbox": [0, 1, 639, 162], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 63614, "bbox": [2, 3, 637, 276], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 109621, "bbox": [2, 297, 637, 182], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 28915, "bbox": [0, 233, 639, 87], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 1091, "bbox": [418, 245, 35, 60], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 638, "bbox": [116, 255, 15, 59], "iscrowd": 0}, {"id": 5837186, "category_id": 13, "area": 617, "bbox": [195, 254, 15, 56], "iscrowd": 0}, {"id": 3866770, "category_id": 13, "area": 751, "bbox": [143, 255, 23, 60], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1023, "bbox": [130, 283, 65, 23], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 2178, "bbox": [82, 227, 142, 86], "iscrowd": 0}]}, {"image_id": "ADE_val_00000932", "file_name": "ADE_val_00000932.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 105540, "bbox": [0, 0, 767, 358], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 40312, "bbox": [0, 283, 766, 228], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 43628, "bbox": [316, 131, 441, 304], "iscrowd": 0}, {"id": 14819782, "category_id": 8, "area": 114452, "bbox": [0, 185, 637, 325], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 23425, "bbox": [513, 0, 193, 164], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 10773, "bbox": [210, 220, 162, 104], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 6725, "bbox": [472, 0, 98, 170], "iscrowd": 0}, {"id": 2431999, "category_id": 19, "area": 15171, "bbox": [645, 0, 120, 201], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 2713, "bbox": [353, 203, 108, 46], "iscrowd": 0}, {"id": 16121600, "category_id": 58, "area": 8341, "bbox": [41, 255, 201, 80], "iscrowd": 0}]}, {"image_id": "ADE_val_00000933", "file_name": "ADE_val_00000933.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 127503, "bbox": [1, 0, 508, 714], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 81839, "bbox": [0, 505, 511, 262], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 11221, "bbox": [0, 1, 282, 57], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 125803, "bbox": [29, 87, 441, 649], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12001, "bbox": [1, 44, 42, 375], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 4892, "bbox": [60, 397, 161, 41], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 2743, "bbox": [139, 330, 60, 55], "iscrowd": 0}]}, {"image_id": "ADE_val_00000934", "file_name": "ADE_val_00000934.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 52601, "bbox": [0, 0, 681, 272], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2753, "bbox": [538, 233, 81, 61], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 69794, "bbox": [0, 1, 681, 294], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 116468, "bbox": [0, 203, 682, 307], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 30526, "bbox": [13, 159, 218, 205], "iscrowd": 0}, {"id": 7274751, "category_id": 127, "area": 56575, "bbox": [223, 141, 282, 295], "iscrowd": 0}, {"id": 6886911, "category_id": 127, "area": 15623, "bbox": [430, 140, 148, 222], "iscrowd": 0}]}, {"image_id": "ADE_val_00000935", "file_name": "ADE_val_00000935.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 60444, "bbox": [0, 0, 319, 228], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1842, "bbox": [128, 208, 191, 20], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 8477, "bbox": [93, 0, 227, 59], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1819, "bbox": [173, 165, 45, 62], "iscrowd": 0}]}, {"image_id": "ADE_val_00000936", "file_name": "ADE_val_00000936.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 167534, "bbox": [2, 0, 777, 220], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 15771, "bbox": [299, 379, 334, 127], "iscrowd": 0}, {"id": 16761344, "category_id": 95, "area": 96354, "bbox": [2, 214, 778, 296], "iscrowd": 0}]}, {"image_id": "ADE_val_00000937", "file_name": "ADE_val_00000937.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 82899, "bbox": [1, 1, 511, 568], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 20126, "bbox": [155, 543, 356, 140], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 14135, "bbox": [233, 611, 279, 71], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 27454, "bbox": [230, 401, 282, 202], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 76902, "bbox": [271, 1, 240, 334], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 6139, "bbox": [358, 288, 153, 115], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 62489, "bbox": [90, 1, 134, 660], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 12401, "bbox": [227, 356, 285, 79], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 4222, "bbox": [328, 474, 92, 59], "iscrowd": 0}, {"id": 7673087, "category_id": 82, "area": 870, "bbox": [328, 524, 83, 20], "iscrowd": 0}, {"id": 4915455, "category_id": 82, "area": 552, "bbox": [329, 536, 81, 14], "iscrowd": 0}, {"id": 5052657, "category_id": 82, "area": 3635, "bbox": [416, 476, 81, 53], "iscrowd": 0}, {"id": 5964026, "category_id": 82, "area": 907, "bbox": [416, 509, 84, 32], "iscrowd": 0}, {"id": 7405822, "category_id": 82, "area": 623, "bbox": [416, 533, 80, 17], "iscrowd": 0}, {"id": 7478527, "category_id": 82, "area": 947, "bbox": [415, 540, 77, 19], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 6369, "bbox": [223, 77, 46, 170], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 101, "bbox": [252, 339, 8, 16], "iscrowd": 0}, {"id": 917248, "category_id": 99, "area": 120, "bbox": [265, 338, 9, 17], "iscrowd": 0}, {"id": 65308, "category_id": 99, "area": 109, "bbox": [278, 336, 9, 17], "iscrowd": 0}, {"id": 261130, "category_id": 99, "area": 110, "bbox": [293, 335, 8, 17], "iscrowd": 0}, {"id": 655104, "category_id": 99, "area": 119, "bbox": [305, 333, 10, 17], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1429, "bbox": [241, 337, 88, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00000938", "file_name": "ADE_val_00000938.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 269, "bbox": [63, 121, 45, 13], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 25896, "bbox": [0, 0, 255, 133], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 3000, "bbox": [1, 128, 255, 22], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 27461, "bbox": [1, 141, 254, 115], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 4087, "bbox": [1, 30, 64, 113], "iscrowd": 0}, {"id": 16737792, "category_id": 73, "area": 2114, "bbox": [221, 0, 33, 96], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 44, "bbox": [184, 123, 7, 9], "iscrowd": 0}, {"id": 60308, "category_id": 77, "area": 65, "bbox": [138, 132, 11, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00000939", "file_name": "ADE_val_00000939.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 103419, "bbox": [1, 1, 762, 414], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 44350, "bbox": [111, 318, 653, 194], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 16087, "bbox": [266, 1, 497, 78], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 120731, "bbox": [127, 1, 518, 510], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6417, "bbox": [619, 152, 70, 151], "iscrowd": 0}, {"id": 16776913, "category_id": 9, "area": 6690, "bbox": [422, 151, 72, 142], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 9462, "bbox": [0, 396, 116, 116], "iscrowd": 0}, {"id": 16715724, "category_id": 11, "area": 745, "bbox": [695, 281, 13, 62], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 15400, "bbox": [38, 331, 140, 180], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 10462, "bbox": [570, 128, 142, 201], "iscrowd": 0}, {"id": 670452, "category_id": 19, "area": 8572, "bbox": [395, 129, 121, 168], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3183, "bbox": [63, 252, 71, 103], "iscrowd": 0}, {"id": 63944, "category_id": 37, "area": 427, "bbox": [334, 226, 27, 27], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 603, "bbox": [351, 263, 25, 31], "iscrowd": 0}, {"id": 1040127, "category_id": 40, "area": 1231, "bbox": [312, 261, 45, 44], "iscrowd": 0}, {"id": 47103, "category_id": 40, "area": 485, "bbox": [239, 248, 68, 16], "iscrowd": 0}, {"id": 120319, "category_id": 40, "area": 2493, "bbox": [232, 295, 93, 31], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 846, "bbox": [198, 410, 51, 26], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 5285, "bbox": [338, 206, 87, 81], "iscrowd": 0}, {"id": 15739136, "category_id": 45, "area": 6311, "bbox": [704, 252, 59, 143], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 892, "bbox": [313, 238, 39, 46], "iscrowd": 0}, {"id": 16775957, "category_id": 58, "area": 783, "bbox": [179, 281, 29, 40], "iscrowd": 0}, {"id": 15259392, "category_id": 58, "area": 4779, "bbox": [195, 258, 136, 70], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1532, "bbox": [674, 100, 89, 125], "iscrowd": 0}, {"id": 233, "category_id": 67, "area": 2444, "bbox": [344, 133, 98, 57], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 172, "bbox": [754, 228, 9, 30], "iscrowd": 0}, {"id": 13893389, "category_id": 136, "area": 776, "bbox": [378, 166, 28, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00000940", "file_name": "ADE_val_00000940.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 59682, "bbox": [1, 0, 584, 179], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 68157, "bbox": [12, 202, 759, 310], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 6666, "bbox": [515, 82, 62, 120], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 163300, "bbox": [0, 103, 552, 409], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1356, "bbox": [380, 175, 78, 48], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 31172, "bbox": [444, 0, 252, 297], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3726, "bbox": [356, 38, 68, 147], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 7735, "bbox": [455, 72, 123, 136], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 23689, "bbox": [656, 125, 115, 264], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 8196, "bbox": [157, 98, 162, 61], "iscrowd": 0}, {"id": 16179735, "category_id": 58, "area": 8355, "bbox": [1, 104, 158, 67], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 548, "bbox": [398, 164, 40, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00000941", "file_name": "ADE_val_00000941.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 15095, "bbox": [0, 0, 256, 81], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6377, "bbox": [28, 115, 156, 68], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 9462, "bbox": [0, 211, 256, 45], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 9519, "bbox": [18, 177, 238, 50], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 24788, "bbox": [0, 38, 256, 179], "iscrowd": 0}]}, {"image_id": "ADE_val_00000942", "file_name": "ADE_val_00000942.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 239026, "bbox": [0, 0, 680, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 57013, "bbox": [125, 316, 436, 196], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 51041, "bbox": [113, 0, 515, 156], "iscrowd": 0}]}, {"image_id": "ADE_val_00000943", "file_name": "ADE_val_00000943.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14818, "bbox": [0, 0, 224, 154], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 922, "bbox": [0, 150, 224, 68], "iscrowd": 0}, {"id": 15466240, "category_id": 123, "area": 33240, "bbox": [0, 119, 224, 185], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2484, "bbox": [194, 43, 29, 166], "iscrowd": 0}, {"id": 3606670, "category_id": 13, "area": 9684, "bbox": [52, 1, 107, 214], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1277, "bbox": [2, 41, 33, 77], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 223, "bbox": [51, 60, 12, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00000944", "file_name": "ADE_val_00000944.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 130512, "bbox": [0, 0, 682, 511], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 22129, "bbox": [0, 91, 114, 417], "iscrowd": 0}, {"id": 58458, "category_id": 149, "area": 8763, "bbox": [633, 144, 49, 283], "iscrowd": 0}]}, {"image_id": "ADE_val_00000945", "file_name": "ADE_val_00000945.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 6314, "bbox": [2, 180, 254, 33], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 46688, "bbox": [2, 1, 254, 190], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 11061, "bbox": [2, 209, 254, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00000946", "file_name": "ADE_val_00000946.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 138662, "bbox": [1, 0, 682, 360], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 11974, "bbox": [1, 360, 510, 152], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 8869, "bbox": [0, 0, 503, 35], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 8074, "bbox": [354, 163, 96, 130], "iscrowd": 0}, {"id": 4330898, "category_id": 13, "area": 10834, "bbox": [439, 176, 149, 148], "iscrowd": 0}, {"id": 5836714, "category_id": 13, "area": 17349, "bbox": [13, 202, 189, 257], "iscrowd": 0}, {"id": 5439650, "category_id": 13, "area": 7419, "bbox": [213, 106, 69, 164], "iscrowd": 0}, {"id": 5768327, "category_id": 13, "area": 5843, "bbox": [94, 189, 114, 122], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 49588, "bbox": [136, 270, 547, 242], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 16132, "bbox": [410, 302, 272, 194], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 1495, "bbox": [326, 217, 39, 61], "iscrowd": 0}, {"id": 14815773, "category_id": 76, "area": 308, "bbox": [456, 287, 28, 13], "iscrowd": 0}, {"id": 16711714, "category_id": 76, "area": 626, "bbox": [2, 261, 34, 46], "iscrowd": 0}, {"id": 16711682, "category_id": 76, "area": 15453, "bbox": [2, 319, 192, 193], "iscrowd": 0}, {"id": 16711704, "category_id": 76, "area": 26055, "bbox": [163, 361, 295, 151], "iscrowd": 0}, {"id": 16713984, "category_id": 76, "area": 248, "bbox": [508, 504, 58, 8], "iscrowd": 0}, {"id": 14947840, "category_id": 76, "area": 3196, "bbox": [133, 222, 71, 56], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1182, "bbox": [174, 2, 107, 19], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 12896, "bbox": [73, 31, 142, 97], "iscrowd": 0}]}, {"image_id": "ADE_val_00000947", "file_name": "ADE_val_00000947.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 147984, "bbox": [1, 1, 682, 484], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 29736, "bbox": [1, 267, 682, 245], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 51519, "bbox": [103, 1, 560, 176], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 71184, "bbox": [94, 296, 557, 213], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 669, "bbox": [381, 239, 24, 30], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 310, "bbox": [323, 239, 18, 37], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2432, "bbox": [606, 181, 18, 200], "iscrowd": 0}, {"id": 2227993, "category_id": 15, "area": 1349, "bbox": [515, 195, 13, 137], "iscrowd": 0}, {"id": 4652800, "category_id": 15, "area": 1364, "bbox": [139, 177, 12, 132], "iscrowd": 0}, {"id": 3665946, "category_id": 15, "area": 1812, "bbox": [351, 208, 29, 64], "iscrowd": 0}, {"id": 3275538, "category_id": 15, "area": 582, "bbox": [230, 194, 11, 60], "iscrowd": 0}, {"id": 5235968, "category_id": 15, "area": 294, "bbox": [265, 201, 8, 46], "iscrowd": 0}, {"id": 4913408, "category_id": 15, "area": 167, "bbox": [296, 207, 5, 34], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 340, "bbox": [289, 248, 41, 31], "iscrowd": 0}, {"id": 4063487, "category_id": 16, "area": 444, "bbox": [254, 268, 57, 23], "iscrowd": 0}, {"id": 4920063, "category_id": 16, "area": 1380, "bbox": [210, 277, 81, 59], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 647, "bbox": [473, 264, 34, 56], "iscrowd": 0}, {"id": 20702, "category_id": 20, "area": 1208, "bbox": [292, 281, 39, 62], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 4507, "bbox": [326, 0, 115, 66], "iscrowd": 0}, {"id": 1636827, "category_id": 37, "area": 1066, "bbox": [318, 129, 122, 58], "iscrowd": 0}, {"id": 1567715, "category_id": 37, "area": 952, "bbox": [357, 74, 44, 87], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 195, "bbox": [312, 235, 18, 17], "iscrowd": 0}, {"id": 11401735, "category_id": 75, "area": 288, "bbox": [294, 236, 19, 19], "iscrowd": 0}, {"id": 12254976, "category_id": 75, "area": 666, "bbox": [255, 243, 29, 29], "iscrowd": 0}, {"id": 11985172, "category_id": 75, "area": 933, "bbox": [221, 248, 33, 36], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 786, "bbox": [330, 265, 23, 58], "iscrowd": 0}]}, {"image_id": "ADE_val_00000948", "file_name": "ADE_val_00000948.png", "segments_info": [{"id": 9240463, "category_id": 17, "area": 78316, "bbox": [0, 0, 299, 449], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2271, "bbox": [39, 110, 82, 85], "iscrowd": 0}]}, {"image_id": "ADE_val_00000949", "file_name": "ADE_val_00000949.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 133210, "bbox": [1, 0, 770, 459], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 35661, "bbox": [1, 284, 770, 228], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 16154, "bbox": [78, 333, 601, 179], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 23628, "bbox": [159, 230, 393, 281], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2401, "bbox": [319, 142, 69, 98], "iscrowd": 0}, {"id": 25275, "category_id": 20, "area": 3235, "bbox": [357, 192, 60, 79], "iscrowd": 0}, {"id": 15801, "category_id": 20, "area": 5497, "bbox": [431, 224, 87, 97], "iscrowd": 0}, {"id": 862944, "category_id": 20, "area": 20159, "bbox": [364, 345, 246, 167], "iscrowd": 0}, {"id": 24754, "category_id": 20, "area": 6174, "bbox": [118, 227, 75, 228], "iscrowd": 0}, {"id": 1072362, "category_id": 20, "area": 18412, "bbox": [159, 274, 198, 238], "iscrowd": 0}, {"id": 20679, "category_id": 20, "area": 3245, "bbox": [179, 176, 77, 62], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6396, "bbox": [75, 1, 80, 92], "iscrowd": 0}, {"id": 3087871, "category_id": 23, "area": 5078, "bbox": [178, 4, 65, 84], "iscrowd": 0}, {"id": 3671806, "category_id": 23, "area": 2342, "bbox": [266, 23, 54, 59], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 21373, "bbox": [443, 34, 211, 136], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 6906, "bbox": [572, 113, 74, 144], "iscrowd": 0}, {"id": 1827821, "category_id": 37, "area": 1319, "bbox": [159, 114, 43, 81], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1191, "bbox": [336, 168, 41, 38], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 2354, "bbox": [509, 288, 79, 92], "iscrowd": 0}, {"id": 2948352, "category_id": 42, "area": 739, "bbox": [503, 269, 42, 57], "iscrowd": 0}, {"id": 3271168, "category_id": 42, "area": 425, "bbox": [412, 249, 22, 33], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1499, "bbox": [100, 111, 65, 46], "iscrowd": 0}, {"id": 1245439, "category_id": 67, "area": 2794, "bbox": [268, 204, 82, 62], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 4247, "bbox": [243, 0, 125, 58], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 500, "bbox": [581, 323, 43, 33], "iscrowd": 0}, {"id": 2224143, "category_id": 99, "area": 447, "bbox": [608, 332, 31, 27], "iscrowd": 0}, {"id": 2096896, "category_id": 99, "area": 547, "bbox": [616, 339, 41, 34], "iscrowd": 0}, {"id": 2555648, "category_id": 99, "area": 314, "bbox": [634, 346, 42, 35], "iscrowd": 0}, {"id": 655121, "category_id": 99, "area": 194, "bbox": [626, 388, 23, 24], "iscrowd": 0}, {"id": 257026, "category_id": 99, "area": 400, "bbox": [610, 380, 34, 23], "iscrowd": 0}, {"id": 261888, "category_id": 99, "area": 124, "bbox": [539, 318, 17, 13], "iscrowd": 0}, {"id": 65290, "category_id": 99, "area": 117, "bbox": [511, 307, 20, 10], "iscrowd": 0}, {"id": 2490112, "category_id": 99, "area": 110, "bbox": [538, 334, 17, 11], "iscrowd": 0}, {"id": 2293268, "category_id": 99, "area": 122, "bbox": [512, 320, 17, 12], "iscrowd": 0}, {"id": 190208, "category_id": 99, "area": 82, "bbox": [416, 259, 17, 8], "iscrowd": 0}, {"id": 589578, "category_id": 99, "area": 1179, "bbox": [360, 256, 20, 78], "iscrowd": 0}, {"id": 65280, "category_id": 99, "area": 236, "bbox": [272, 198, 11, 51], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 510, "bbox": [399, 0, 31, 21], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 584, "bbox": [132, 157, 19, 41], "iscrowd": 0}, {"id": 14089216, "category_id": 136, "area": 453, "bbox": [255, 213, 17, 32], "iscrowd": 0}, {"id": 13034496, "category_id": 136, "area": 652, "bbox": [296, 252, 27, 40], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 341, "bbox": [228, 223, 29, 14], "iscrowd": 0}, {"id": 12320512, "category_id": 143, "area": 366, "bbox": [324, 240, 35, 16], "iscrowd": 0}, {"id": 13893401, "category_id": 143, "area": 142, "bbox": [325, 255, 25, 7], "iscrowd": 0}, {"id": 12844288, "category_id": 143, "area": 2743, "bbox": [408, 359, 80, 44], "iscrowd": 0}, {"id": 11337224, "category_id": 143, "area": 1777, "bbox": [241, 318, 70, 32], "iscrowd": 0}, {"id": 12451328, "category_id": 143, "area": 1486, "bbox": [399, 355, 100, 54], "iscrowd": 0}, {"id": 10419978, "category_id": 143, "area": 1248, "bbox": [335, 397, 52, 30], "iscrowd": 0}, {"id": 13500160, "category_id": 143, "area": 913, "bbox": [391, 285, 61, 26], "iscrowd": 0}, {"id": 11334400, "category_id": 143, "area": 837, "bbox": [234, 317, 84, 40], "iscrowd": 0}, {"id": 13238025, "category_id": 143, "area": 818, "bbox": [191, 260, 50, 21], "iscrowd": 0}, {"id": 10551040, "category_id": 143, "area": 503, "bbox": [228, 301, 38, 17], "iscrowd": 0}, {"id": 13563136, "category_id": 143, "area": 425, "bbox": [380, 288, 47, 29], "iscrowd": 0}, {"id": 11796224, "category_id": 143, "area": 390, "bbox": [468, 315, 26, 18], "iscrowd": 0}, {"id": 12123916, "category_id": 143, "area": 349, "bbox": [184, 265, 60, 22], "iscrowd": 0}, {"id": 10286857, "category_id": 143, "area": 283, "bbox": [183, 252, 31, 12], "iscrowd": 0}, {"id": 11075348, "category_id": 143, "area": 140, "bbox": [226, 233, 32, 9], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 4347, "bbox": [206, 157, 128, 61], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 98, "bbox": [223, 214, 9, 35], "iscrowd": 0}, {"id": 12434963, "category_id": 148, "area": 370, "bbox": [213, 214, 16, 41], "iscrowd": 0}, {"id": 11262497, "category_id": 148, "area": 377, "bbox": [201, 219, 14, 33], "iscrowd": 0}, {"id": 12236041, "category_id": 148, "area": 440, "bbox": [350, 245, 17, 47], "iscrowd": 0}, {"id": 11460364, "category_id": 148, "area": 179, "bbox": [367, 246, 15, 19], "iscrowd": 0}, {"id": 14338865, "category_id": 148, "area": 813, "bbox": [313, 312, 22, 58], "iscrowd": 0}, {"id": 13555219, "category_id": 148, "area": 785, "bbox": [425, 293, 23, 57], "iscrowd": 0}, {"id": 14201381, "category_id": 148, "area": 734, "bbox": [332, 332, 20, 43], "iscrowd": 0}, {"id": 11117831, "category_id": 148, "area": 630, "bbox": [444, 302, 21, 54], "iscrowd": 0}, {"id": 12178176, "category_id": 148, "area": 608, "bbox": [334, 304, 25, 29], "iscrowd": 0}, {"id": 13491214, "category_id": 148, "area": 483, "bbox": [238, 252, 17, 46], "iscrowd": 0}, {"id": 11522083, "category_id": 148, "area": 440, "bbox": [253, 269, 17, 31], "iscrowd": 0}, {"id": 13029404, "category_id": 148, "area": 400, "bbox": [447, 301, 21, 46], "iscrowd": 0}, {"id": 11918592, "category_id": 148, "area": 332, "bbox": [255, 247, 18, 21], "iscrowd": 0}, {"id": 10930483, "category_id": 148, "area": 96, "bbox": [359, 260, 8, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00000950", "file_name": "ADE_val_00000950.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 158461, "bbox": [1, 1, 698, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 35084, "bbox": [1, 371, 665, 141], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 5097, "bbox": [240, 135, 132, 176], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 13844, "bbox": [385, 105, 129, 201], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 7653, "bbox": [384, 1, 133, 68], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 15553, "bbox": [159, 300, 323, 211], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 7858, "bbox": [363, 52, 192, 66], "iscrowd": 0}, {"id": 2238440, "category_id": 19, "area": 14632, "bbox": [463, 105, 89, 283], "iscrowd": 0}, {"id": 1125375, "category_id": 19, "area": 6793, "bbox": [355, 105, 77, 201], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2110, "bbox": [387, 268, 63, 42], "iscrowd": 0}, {"id": 21692, "category_id": 20, "area": 2144, "bbox": [242, 275, 64, 56], "iscrowd": 0}, {"id": 1264318, "category_id": 20, "area": 4038, "bbox": [170, 288, 81, 77], "iscrowd": 0}, {"id": 2108130, "category_id": 20, "area": 2627, "bbox": [411, 301, 111, 156], "iscrowd": 0}, {"id": 10946, "category_id": 20, "area": 16577, "bbox": [129, 367, 213, 144], "iscrowd": 0}, {"id": 1585082, "category_id": 20, "area": 8735, "bbox": [367, 352, 125, 160], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 20424, "bbox": [40, 107, 155, 154], "iscrowd": 0}, {"id": 1769727, "category_id": 23, "area": 4833, "bbox": [664, 116, 35, 178], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 3074, "bbox": [317, 244, 66, 96], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 11954, "bbox": [274, 1, 136, 233], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 275, "bbox": [404, 323, 50, 19], "iscrowd": 0}, {"id": 10812446, "category_id": 143, "area": 371, "bbox": [361, 364, 59, 11], "iscrowd": 0}, {"id": 10944257, "category_id": 143, "area": 327, "bbox": [244, 338, 52, 15], "iscrowd": 0}, {"id": 13172480, "category_id": 143, "area": 749, "bbox": [235, 369, 70, 29], "iscrowd": 0}, {"id": 10288896, "category_id": 143, "area": 329, "bbox": [386, 302, 32, 14], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 394, "bbox": [375, 308, 18, 34], "iscrowd": 0}, {"id": 11521813, "category_id": 148, "area": 750, "bbox": [310, 335, 22, 55], "iscrowd": 0}, {"id": 10855701, "category_id": 148, "area": 489, "bbox": [264, 315, 21, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00000951", "file_name": "ADE_val_00000951.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 89061, "bbox": [1, 190, 511, 398], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10097, "bbox": [0, 512, 512, 171], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 105579, "bbox": [1, 1, 510, 256], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 25795, "bbox": [2, 576, 509, 106], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 7817, "bbox": [109, 474, 299, 101], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 838, "bbox": [258, 421, 81, 53], "iscrowd": 0}, {"id": 13018, "category_id": 20, "area": 293, "bbox": [339, 427, 40, 10], "iscrowd": 0}, {"id": 670681, "category_id": 20, "area": 4532, "bbox": [137, 427, 105, 132], "iscrowd": 0}, {"id": 670183, "category_id": 20, "area": 4010, "bbox": [42, 425, 132, 204], "iscrowd": 0}, {"id": 211125, "category_id": 20, "area": 11966, "bbox": [55, 426, 154, 254], "iscrowd": 0}, {"id": 475598, "category_id": 20, "area": 26483, "bbox": [206, 434, 177, 245], "iscrowd": 0}, {"id": 868541, "category_id": 20, "area": 10455, "bbox": [363, 427, 85, 231], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 366, "bbox": [414, 361, 16, 25], "iscrowd": 0}, {"id": 4719596, "category_id": 23, "area": 375, "bbox": [415, 393, 15, 25], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 12460, "bbox": [84, 310, 142, 106], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 14176, "bbox": [341, 199, 77, 298], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 504, "bbox": [438, 446, 11, 69], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 6590, "bbox": [169, 342, 130, 96], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 8836, "bbox": [182, 100, 122, 210], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 1401, "bbox": [218, 438, 33, 53], "iscrowd": 0}]}, {"image_id": "ADE_val_00000952", "file_name": "ADE_val_00000952.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18569, "bbox": [2, 0, 334, 449], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1682, "bbox": [270, 51, 18, 98], "iscrowd": 0}, {"id": 9182207, "category_id": 44, "area": 892, "bbox": [81, 151, 27, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00000953", "file_name": "ADE_val_00000953.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 17060, "bbox": [1, 0, 255, 76], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6701, "bbox": [0, 55, 227, 96], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 40971, "bbox": [0, 71, 256, 185], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 50, "bbox": [89, 60, 5, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00000954", "file_name": "ADE_val_00000954.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 71154, "bbox": [0, 0, 337, 373], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 15044, "bbox": [0, 337, 211, 112], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1895, "bbox": [0, 0, 104, 35], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 18122, "bbox": [151, 83, 65, 364], "iscrowd": 0}, {"id": 2029568, "category_id": 15, "area": 43141, "bbox": [219, 76, 118, 373], "iscrowd": 0}]}, {"image_id": "ADE_val_00000955", "file_name": "ADE_val_00000955.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 23164, "bbox": [1, 0, 255, 207], "iscrowd": 0}]}, {"image_id": "ADE_val_00000956", "file_name": "ADE_val_00000956.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 7782, "bbox": [9, 1, 113, 130], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 38008, "bbox": [8, 1, 246, 232], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 6078, "bbox": [8, 165, 136, 90], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4292, "bbox": [177, 169, 78, 86], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 5728, "bbox": [106, 153, 132, 103], "iscrowd": 0}]}, {"image_id": "ADE_val_00000957", "file_name": "ADE_val_00000957.png", "segments_info": [{"id": 4618360, "category_id": 14, "area": 9279, "bbox": [218, 273, 68, 205], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 335619, "bbox": [0, 0, 497, 699], "iscrowd": 0}]}, {"image_id": "ADE_val_00000958", "file_name": "ADE_val_00000958.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 41006, "bbox": [2, 1, 254, 165], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 15390, "bbox": [0, 170, 256, 86], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 1241, "bbox": [38, 155, 218, 14], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 7020, "bbox": [2, 166, 254, 56], "iscrowd": 0}]}, {"image_id": "ADE_val_00000959", "file_name": "ADE_val_00000959.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 162853, "bbox": [1, 1, 681, 359], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 731, "bbox": [576, 484, 65, 28], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 13792, "bbox": [223, 1, 460, 61], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 102404, "bbox": [0, 277, 589, 235], "iscrowd": 0}, {"id": 16715448, "category_id": 8, "area": 42230, "bbox": [428, 268, 255, 244], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2278, "bbox": [345, 348, 114, 37], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 13862, "bbox": [301, 104, 132, 112], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 2835, "bbox": [504, 152, 97, 69], "iscrowd": 0}, {"id": 16521728, "category_id": 135, "area": 4835, "bbox": [15, 140, 117, 80], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 309, "bbox": [385, 342, 31, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000960", "file_name": "ADE_val_00000960.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 136016, "bbox": [1, 1, 681, 453], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8446, "bbox": [183, 387, 500, 125], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 12323, "bbox": [226, 1, 456, 40], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 107969, "bbox": [74, 217, 575, 294], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 19435, "bbox": [459, 62, 170, 230], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7749, "bbox": [1, 446, 220, 66], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1650, "bbox": [327, 278, 82, 33], "iscrowd": 0}, {"id": 5046518, "category_id": 16, "area": 17328, "bbox": [19, 350, 164, 145], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 9990, "bbox": [437, 62, 60, 215], "iscrowd": 0}, {"id": 1457919, "category_id": 19, "area": 13103, "bbox": [578, 54, 63, 235], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6816, "bbox": [192, 52, 61, 119], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2726, "bbox": [62, 258, 65, 106], "iscrowd": 0}, {"id": 1769430, "category_id": 37, "area": 1158, "bbox": [329, 218, 38, 70], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1491, "bbox": [95, 325, 55, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00000961", "file_name": "ADE_val_00000961.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 118254, "bbox": [1, 1, 681, 289], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 34489, "bbox": [1, 274, 682, 238], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6315, "bbox": [1, 1, 413, 21], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 31282, "bbox": [197, 150, 326, 172], "iscrowd": 0}, {"id": 16720338, "category_id": 8, "area": 36174, "bbox": [468, 161, 215, 283], "iscrowd": 0}, {"id": 16713945, "category_id": 8, "area": 31474, "bbox": [1, 202, 223, 299], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 8581, "bbox": [49, 207, 135, 97], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 10600, "bbox": [224, 260, 156, 169], "iscrowd": 0}, {"id": 13239, "category_id": 20, "area": 20377, "bbox": [325, 324, 224, 188], "iscrowd": 0}, {"id": 12256, "category_id": 20, "area": 22802, "bbox": [86, 361, 246, 151], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 4188, "bbox": [408, 37, 58, 80], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 2856, "bbox": [508, 188, 82, 56], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3013, "bbox": [47, 137, 72, 93], "iscrowd": 0}, {"id": 2289629, "category_id": 37, "area": 2936, "bbox": [515, 114, 71, 93], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 13126, "bbox": [238, 314, 198, 101], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 126, "bbox": [519, 196, 19, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00000962", "file_name": "ADE_val_00000962.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 75850, "bbox": [0, 0, 762, 374], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 84423, "bbox": [0, 349, 763, 163], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 30922, "bbox": [120, 0, 642, 92], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4019, "bbox": [462, 118, 73, 63], "iscrowd": 0}, {"id": 13759189, "category_id": 9, "area": 8095, "bbox": [618, 101, 111, 80], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 22048, "bbox": [27, 30, 182, 359], "iscrowd": 0}, {"id": 16719854, "category_id": 11, "area": 1358, "bbox": [188, 82, 94, 122], "iscrowd": 0}, {"id": 16056547, "category_id": 11, "area": 18688, "bbox": [260, 78, 161, 176], "iscrowd": 0}, {"id": 16711881, "category_id": 11, "area": 3030, "bbox": [406, 120, 50, 88], "iscrowd": 0}, {"id": 16717770, "category_id": 11, "area": 2407, "bbox": [196, 262, 73, 103], "iscrowd": 0}, {"id": 15925447, "category_id": 11, "area": 9563, "bbox": [566, 256, 149, 118], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 10793, "bbox": [0, 89, 42, 283], "iscrowd": 0}, {"id": 3079936, "category_id": 15, "area": 3404, "bbox": [231, 104, 37, 100], "iscrowd": 0}, {"id": 3538688, "category_id": 15, "area": 4037, "bbox": [190, 96, 43, 108], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 5838, "bbox": [551, 248, 81, 170], "iscrowd": 0}, {"id": 22723, "category_id": 20, "area": 10244, "bbox": [392, 250, 113, 210], "iscrowd": 0}, {"id": 608700, "category_id": 20, "area": 8602, "bbox": [475, 247, 103, 186], "iscrowd": 0}, {"id": 1201379, "category_id": 20, "area": 13067, "bbox": [299, 252, 125, 232], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1742, "bbox": [463, 188, 63, 30], "iscrowd": 0}, {"id": 3997951, "category_id": 23, "area": 3070, "bbox": [623, 189, 93, 35], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 983, "bbox": [519, 0, 22, 167], "iscrowd": 0}, {"id": 1633504, "category_id": 37, "area": 1069, "bbox": [434, 0, 27, 159], "iscrowd": 0}, {"id": 520159, "category_id": 37, "area": 1162, "bbox": [330, 0, 29, 150], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 28346, "bbox": [70, 148, 126, 246], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 1525, "bbox": [315, 222, 74, 38], "iscrowd": 0}, {"id": 2752256, "category_id": 74, "area": 28597, "bbox": [208, 250, 360, 207], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 139, "bbox": [291, 6, 22, 8], "iscrowd": 0}, {"id": 364532, "category_id": 83, "area": 121, "bbox": [375, 31, 21, 8], "iscrowd": 0}, {"id": 40959, "category_id": 83, "area": 70, "bbox": [453, 55, 11, 7], "iscrowd": 0}, {"id": 828914, "category_id": 83, "area": 97, "bbox": [537, 39, 17, 7], "iscrowd": 0}, {"id": 1808618, "category_id": 83, "area": 91, "bbox": [556, 51, 19, 6], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 725, "bbox": [406, 219, 27, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00000963", "file_name": "ADE_val_00000963.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 74882, "bbox": [0, 0, 682, 416], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 52526, "bbox": [1, 370, 681, 142], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 31268, "bbox": [0, 0, 557, 108], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 475, "bbox": [347, 204, 27, 31], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1437, "bbox": [231, 159, 42, 50], "iscrowd": 0}, {"id": 16777166, "category_id": 9, "area": 3248, "bbox": [132, 143, 59, 62], "iscrowd": 0}, {"id": 14536924, "category_id": 9, "area": 4914, "bbox": [0, 124, 75, 72], "iscrowd": 0}, {"id": 16773887, "category_id": 9, "area": 1813, "bbox": [342, 164, 35, 85], "iscrowd": 0}, {"id": 16763593, "category_id": 9, "area": 9563, "bbox": [429, 131, 102, 119], "iscrowd": 0}, {"id": 13170917, "category_id": 9, "area": 5073, "bbox": [627, 96, 55, 158], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 12480, "bbox": [0, 274, 109, 130], "iscrowd": 0}, {"id": 16711885, "category_id": 11, "area": 10941, "bbox": [109, 269, 127, 110], "iscrowd": 0}, {"id": 15794404, "category_id": 11, "area": 1127, "bbox": [297, 262, 38, 33], "iscrowd": 0}, {"id": 16712656, "category_id": 11, "area": 6427, "bbox": [417, 273, 101, 125], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 36179, "bbox": [209, 288, 273, 224], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 44120, "bbox": [511, 0, 144, 434], "iscrowd": 0}, {"id": 214015, "category_id": 19, "area": 9319, "bbox": [370, 65, 53, 223], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 836, "bbox": [335, 260, 36, 32], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 611, "bbox": [219, 54, 13, 150], "iscrowd": 0}, {"id": 262106, "category_id": 37, "area": 902, "bbox": [73, 5, 19, 192], "iscrowd": 0}, {"id": 58323, "category_id": 37, "area": 2688, "bbox": [632, 148, 51, 102], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 984, "bbox": [443, 230, 57, 19], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 395, "bbox": [121, 234, 66, 32], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 458, "bbox": [464, 266, 52, 12], "iscrowd": 0}, {"id": 1946359, "category_id": 68, "area": 1002, "bbox": [398, 288, 83, 17], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 628, "bbox": [213, 253, 76, 11], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 1171, "bbox": [308, 222, 38, 33], "iscrowd": 0}, {"id": 12975872, "category_id": 90, "area": 4885, "bbox": [441, 56, 73, 88], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 2020, "bbox": [236, 264, 62, 38], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 276, "bbox": [350, 234, 22, 13], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 2067, "bbox": [380, 410, 75, 35], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 1469, "bbox": [143, 73, 45, 65], "iscrowd": 0}]}, {"image_id": "ADE_val_00000964", "file_name": "ADE_val_00000964.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 1880, "bbox": [0, 0, 290, 34], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 16803, "bbox": [0, 0, 300, 88], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 26880, "bbox": [0, 55, 300, 170], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1222, "bbox": [0, 77, 252, 34], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 19288, "bbox": [0, 73, 294, 126], "iscrowd": 0}]}, {"image_id": "ADE_val_00000965", "file_name": "ADE_val_00000965.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 86608, "bbox": [54, 1, 713, 425], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 34255, "bbox": [1, 297, 549, 215], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 41566, "bbox": [113, 1, 474, 149], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 22282, "bbox": [206, 295, 323, 216], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 8380, "bbox": [502, 89, 50, 196], "iscrowd": 0}, {"id": 16181492, "category_id": 9, "area": 2893, "bbox": [426, 138, 25, 137], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 690, "bbox": [232, 253, 45, 33], "iscrowd": 0}, {"id": 15665867, "category_id": 11, "area": 763, "bbox": [363, 252, 40, 23], "iscrowd": 0}, {"id": 15533301, "category_id": 11, "area": 16486, "bbox": [557, 247, 210, 116], "iscrowd": 0}, {"id": 16718794, "category_id": 11, "area": 11100, "bbox": [86, 256, 90, 149], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1441, "bbox": [220, 169, 12, 126], "iscrowd": 0}, {"id": 4783129, "category_id": 15, "area": 1131, "bbox": [301, 177, 15, 88], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1268, "bbox": [280, 283, 49, 56], "iscrowd": 0}, {"id": 5374207, "category_id": 16, "area": 361, "bbox": [451, 278, 27, 28], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 5825, "bbox": [493, 67, 72, 276], "iscrowd": 0}, {"id": 5887, "category_id": 19, "area": 905, "bbox": [358, 157, 12, 117], "iscrowd": 0}, {"id": 2039791, "category_id": 19, "area": 2465, "bbox": [420, 127, 43, 151], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 302, "bbox": [428, 262, 23, 18], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 11648, "bbox": [323, 270, 159, 110], "iscrowd": 0}, {"id": 16738304, "category_id": 24, "area": 51837, "bbox": [414, 306, 353, 206], "iscrowd": 0}, {"id": 16737809, "category_id": 24, "area": 874, "bbox": [253, 264, 72, 20], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 1162, "bbox": [239, 186, 32, 64], "iscrowd": 0}, {"id": 13236206, "category_id": 28, "area": 1479, "bbox": [373, 159, 23, 82], "iscrowd": 0}, {"id": 14147551, "category_id": 28, "area": 19476, "bbox": [592, 21, 123, 205], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 1464, "bbox": [240, 267, 43, 49], "iscrowd": 0}, {"id": 15530769, "category_id": 31, "area": 1326, "bbox": [471, 264, 51, 73], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 3750, "bbox": [400, 343, 150, 69], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 266, "bbox": [367, 239, 28, 14], "iscrowd": 0}, {"id": 1120255, "category_id": 67, "area": 294, "bbox": [343, 227, 20, 26], "iscrowd": 0}, {"id": 484, "category_id": 67, "area": 606, "bbox": [163, 220, 36, 36], "iscrowd": 0}, {"id": 6655, "category_id": 67, "area": 305, "bbox": [240, 233, 26, 22], "iscrowd": 0}, {"id": 792314, "category_id": 67, "area": 1024, "bbox": [305, 238, 48, 45], "iscrowd": 0}, {"id": 131327, "category_id": 67, "area": 3911, "bbox": [568, 212, 180, 81], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 7718, "bbox": [418, 0, 135, 77], "iscrowd": 0}, {"id": 16721423, "category_id": 86, "area": 507, "bbox": [243, 188, 31, 28], "iscrowd": 0}, {"id": 16725522, "category_id": 86, "area": 1780, "bbox": [269, 100, 42, 93], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 381, "bbox": [221, 286, 22, 21], "iscrowd": 0}, {"id": 46564, "category_id": 98, "area": 708, "bbox": [541, 340, 61, 24], "iscrowd": 0}, {"id": 1416953, "category_id": 98, "area": 6648, "bbox": [284, 375, 89, 95], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 439, "bbox": [564, 162, 24, 47], "iscrowd": 0}, {"id": 15602944, "category_id": 135, "area": 1149, "bbox": [709, 125, 41, 65], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 1216, "bbox": [464, 307, 35, 51], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1317, "bbox": [438, 342, 92, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00000966", "file_name": "ADE_val_00000966.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 126776, "bbox": [0, 0, 767, 410], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 20707, "bbox": [43, 330, 533, 182], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9013, "bbox": [74, 0, 376, 177], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 8284, "bbox": [126, 61, 130, 92], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 5126, "bbox": [0, 50, 29, 357], "iscrowd": 0}, {"id": 1965316, "category_id": 15, "area": 22411, "bbox": [128, 137, 132, 214], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 15016, "bbox": [485, 17, 133, 142], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 3823, "bbox": [341, 273, 76, 102], "iscrowd": 0}, {"id": 15204096, "category_id": 31, "area": 15078, "bbox": [100, 303, 193, 156], "iscrowd": 0}, {"id": 13892129, "category_id": 31, "area": 467, "bbox": [741, 330, 25, 53], "iscrowd": 0}, {"id": 15458577, "category_id": 31, "area": 24841, "bbox": [525, 351, 243, 161], "iscrowd": 0}, {"id": 14941952, "category_id": 31, "area": 3169, "bbox": [0, 402, 291, 110], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 8390, "bbox": [2, 69, 108, 148], "iscrowd": 0}, {"id": 2293490, "category_id": 37, "area": 762, "bbox": [232, 22, 23, 109], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3429, "bbox": [148, 312, 76, 66], "iscrowd": 0}, {"id": 575217, "category_id": 40, "area": 5228, "bbox": [2, 402, 148, 55], "iscrowd": 0}, {"id": 51937, "category_id": 40, "area": 11741, "bbox": [20, 447, 211, 64], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 77991, "bbox": [366, 130, 400, 289], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 10637, "bbox": [228, 383, 284, 129], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1993, "bbox": [336, 394, 103, 33], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 7637, "bbox": [366, 343, 288, 103], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 1731, "bbox": [70, 381, 82, 68], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 2158, "bbox": [310, 329, 48, 73], "iscrowd": 0}]}, {"image_id": "ADE_val_00000967", "file_name": "ADE_val_00000967.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 61146, "bbox": [1, 1, 767, 509], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12188, "bbox": [2, 329, 764, 183], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 77555, "bbox": [2, 1, 766, 133], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3489, "bbox": [605, 232, 120, 86], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 65227, "bbox": [160, 339, 608, 172], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 3286, "bbox": [2, 78, 162, 82], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 2786, "bbox": [320, 326, 100, 69], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 26248, "bbox": [1, 78, 163, 323], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6815, "bbox": [601, 306, 114, 120], "iscrowd": 0}, {"id": 6099441, "category_id": 16, "area": 8348, "bbox": [2, 393, 150, 118], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 5487, "bbox": [625, 154, 76, 82], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 19916, "bbox": [62, 271, 205, 185], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 18615, "bbox": [180, 123, 121, 220], "iscrowd": 0}, {"id": 4325612, "category_id": 25, "area": 18227, "bbox": [445, 127, 116, 212], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 10492, "bbox": [482, 266, 140, 120], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 7998, "bbox": [31, 244, 98, 169], "iscrowd": 0}, {"id": 386522, "category_id": 37, "area": 3861, "bbox": [709, 167, 57, 284], "iscrowd": 0}, {"id": 65482, "category_id": 37, "area": 280, "bbox": [465, 147, 20, 23], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1406, "bbox": [180, 284, 60, 45], "iscrowd": 0}, {"id": 1877997, "category_id": 40, "area": 1040, "bbox": [159, 313, 47, 38], "iscrowd": 0}, {"id": 52727, "category_id": 40, "area": 1105, "bbox": [131, 309, 48, 45], "iscrowd": 0}, {"id": 43263, "category_id": 40, "area": 1871, "bbox": [516, 273, 52, 47], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 153, "bbox": [360, 218, 22, 7], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 15034, "bbox": [299, 226, 151, 110], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1197, "bbox": [38, 406, 74, 32], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 750, "bbox": [326, 115, 111, 27], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 6224, "bbox": [323, 143, 102, 63], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 3600, "bbox": [325, 322, 83, 86], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 80, "bbox": [435, 202, 7, 23], "iscrowd": 0}, {"id": 1179394, "category_id": 99, "area": 183, "bbox": [496, 144, 12, 26], "iscrowd": 0}, {"id": 65305, "category_id": 99, "area": 184, "bbox": [518, 144, 12, 26], "iscrowd": 0}, {"id": 65293, "category_id": 99, "area": 184, "bbox": [207, 178, 12, 23], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 561, "bbox": [641, 287, 33, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00000968", "file_name": "ADE_val_00000968.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 94021, "bbox": [1, 1, 682, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 13072, "bbox": [10, 369, 649, 143], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 35676, "bbox": [1, 1, 517, 88], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 20034, "bbox": [182, 425, 428, 86], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 34794, "bbox": [6, 94, 270, 216], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2067, "bbox": [301, 309, 105, 97], "iscrowd": 0}, {"id": 5112047, "category_id": 16, "area": 5675, "bbox": [1, 378, 96, 133], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 13926, "bbox": [16, 85, 247, 71], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 47643, "bbox": [48, 262, 303, 240], "iscrowd": 0}, {"id": 16740898, "category_id": 24, "area": 45194, "bbox": [374, 261, 293, 230], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 6836, "bbox": [548, 116, 118, 95], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 11836, "bbox": [505, 114, 147, 128], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2724, "bbox": [0, 274, 48, 109], "iscrowd": 0}, {"id": 65526, "category_id": 37, "area": 1936, "bbox": [308, 230, 53, 82], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2851, "bbox": [175, 319, 67, 67], "iscrowd": 0}, {"id": 1038826, "category_id": 40, "area": 2687, "bbox": [422, 300, 69, 58], "iscrowd": 0}, {"id": 763647, "category_id": 40, "area": 1495, "bbox": [581, 332, 58, 57], "iscrowd": 0}, {"id": 1883135, "category_id": 40, "area": 2124, "bbox": [616, 322, 46, 82], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 503, "bbox": [2, 378, 36, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00000969", "file_name": "ADE_val_00000969.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 65571, "bbox": [252, 0, 515, 382], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 50380, "bbox": [0, 355, 666, 157], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4434, "bbox": [257, 0, 222, 39], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 46786, "bbox": [471, 104, 274, 211], "iscrowd": 0}, {"id": 15334898, "category_id": 9, "area": 6170, "bbox": [474, 0, 277, 41], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 13868, "bbox": [608, 394, 159, 118], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 14797, "bbox": [457, 47, 309, 70], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 5844, "bbox": [318, 92, 80, 89], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 7253, "bbox": [2, 127, 266, 37], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 17747, "bbox": [358, 224, 204, 173], "iscrowd": 0}, {"id": 14089988, "category_id": 31, "area": 10255, "bbox": [646, 314, 121, 116], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3465, "bbox": [299, 162, 86, 227], "iscrowd": 0}, {"id": 1310713, "category_id": 37, "area": 4394, "bbox": [695, 213, 73, 93], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3190, "bbox": [418, 251, 83, 57], "iscrowd": 0}, {"id": 56575, "category_id": 40, "area": 969, "bbox": [737, 306, 30, 44], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1956, "bbox": [1, 359, 61, 46], "iscrowd": 0}, {"id": 3079947, "category_id": 42, "area": 1369, "bbox": [1, 335, 56, 34], "iscrowd": 0}, {"id": 3276544, "category_id": 42, "area": 1120, "bbox": [0, 313, 50, 30], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 76193, "bbox": [1, 1, 277, 362], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 20197, "bbox": [406, 338, 190, 128], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 3030, "bbox": [242, 285, 65, 71], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 26392, "bbox": [0, 343, 311, 135], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 2426, "bbox": [91, 70, 48, 62], "iscrowd": 0}]}, {"image_id": "ADE_val_00000970", "file_name": "ADE_val_00000970.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 103924, "bbox": [1, 1, 682, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 26410, "bbox": [233, 354, 449, 158], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 26814, "bbox": [117, 1, 566, 62], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 12142, "bbox": [31, 157, 518, 305], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 20621, "bbox": [1, 64, 110, 295], "iscrowd": 0}, {"id": 16501482, "category_id": 9, "area": 3103, "bbox": [622, 128, 61, 149], "iscrowd": 0}, {"id": 14339053, "category_id": 9, "area": 5809, "bbox": [139, 123, 81, 74], "iscrowd": 0}, {"id": 15794175, "category_id": 9, "area": 3907, "bbox": [472, 135, 66, 70], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1167, "bbox": [134, 280, 49, 33], "iscrowd": 0}, {"id": 4391167, "category_id": 16, "area": 7676, "bbox": [480, 306, 141, 93], "iscrowd": 0}, {"id": 5250813, "category_id": 16, "area": 14107, "bbox": [24, 417, 220, 95], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 20496, "bbox": [364, 399, 319, 113], "iscrowd": 0}, {"id": 15289344, "category_id": 24, "area": 17459, "bbox": [17, 275, 224, 168], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 2016, "bbox": [657, 287, 26, 100], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1595, "bbox": [126, 218, 53, 70], "iscrowd": 0}, {"id": 1376246, "category_id": 37, "area": 5853, "bbox": [0, 120, 38, 392], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 9086, "bbox": [619, 128, 63, 269], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 36635, "bbox": [215, 198, 270, 167], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 13198, "bbox": [311, 352, 205, 128], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 458, "bbox": [243, 188, 40, 15], "iscrowd": 0}, {"id": 45311, "category_id": 68, "area": 430, "bbox": [563, 336, 41, 14], "iscrowd": 0}, {"id": 44012, "category_id": 68, "area": 521, "bbox": [516, 332, 51, 20], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 4360, "bbox": [490, 255, 82, 64], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 379, "bbox": [245, 173, 31, 17], "iscrowd": 0}, {"id": 61530, "category_id": 113, "area": 1485, "bbox": [422, 312, 48, 77], "iscrowd": 0}, {"id": 261960, "category_id": 113, "area": 2061, "bbox": [90, 338, 73, 115], "iscrowd": 0}, {"id": 59982, "category_id": 113, "area": 824, "bbox": [444, 166, 39, 39], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 121, "bbox": [279, 187, 12, 12], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 117, "bbox": [528, 253, 13, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00000971", "file_name": "ADE_val_00000971.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 139150, "bbox": [1, 9, 680, 365], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9129, "bbox": [54, 394, 628, 118], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 26118, "bbox": [1, 1, 682, 61], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 33831, "bbox": [68, 412, 524, 100], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6097, "bbox": [23, 316, 77, 131], "iscrowd": 0}, {"id": 16122075, "category_id": 11, "area": 10319, "bbox": [581, 352, 102, 137], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 7191, "bbox": [1, 377, 76, 133], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2288, "bbox": [312, 125, 42, 57], "iscrowd": 0}, {"id": 1769727, "category_id": 23, "area": 9899, "bbox": [190, 103, 90, 114], "iscrowd": 0}, {"id": 2033124, "category_id": 23, "area": 3390, "bbox": [92, 117, 53, 65], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 56144, "bbox": [74, 249, 581, 215], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1242, "bbox": [422, 97, 36, 155], "iscrowd": 0}, {"id": 65521, "category_id": 37, "area": 3344, "bbox": [10, 208, 82, 124], "iscrowd": 0}, {"id": 786420, "category_id": 37, "area": 3330, "bbox": [621, 241, 61, 123], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3226, "bbox": [412, 259, 66, 66], "iscrowd": 0}, {"id": 575998, "category_id": 40, "area": 1898, "bbox": [378, 261, 44, 50], "iscrowd": 0}, {"id": 49639, "category_id": 40, "area": 2153, "bbox": [559, 286, 70, 64], "iscrowd": 0}, {"id": 1358313, "category_id": 40, "area": 1934, "bbox": [533, 278, 51, 75], "iscrowd": 0}, {"id": 1169401, "category_id": 40, "area": 1590, "bbox": [304, 267, 47, 59], "iscrowd": 0}, {"id": 1747688, "category_id": 40, "area": 2806, "bbox": [253, 270, 71, 61], "iscrowd": 0}, {"id": 1097698, "category_id": 40, "area": 1690, "bbox": [139, 282, 61, 66], "iscrowd": 0}, {"id": 45311, "category_id": 40, "area": 1881, "bbox": [106, 282, 63, 71], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 17268, "bbox": [213, 353, 251, 156], "iscrowd": 0}]}, {"image_id": "ADE_val_00000972", "file_name": "ADE_val_00000972.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 53326, "bbox": [0, 1, 512, 309], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21172, "bbox": [0, 278, 512, 235], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 58219, "bbox": [0, 1, 512, 246], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 193, "bbox": [251, 246, 18, 18], "iscrowd": 0}, {"id": 4980874, "category_id": 13, "area": 190, "bbox": [299, 243, 13, 21], "iscrowd": 0}, {"id": 5968016, "category_id": 13, "area": 146, "bbox": [13, 267, 16, 16], "iscrowd": 0}, {"id": 5311615, "category_id": 13, "area": 142, "bbox": [0, 267, 13, 15], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 244, "bbox": [114, 249, 8, 41], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1698, "bbox": [346, 284, 92, 39], "iscrowd": 0}, {"id": 3605232, "category_id": 16, "area": 221, "bbox": [465, 276, 46, 10], "iscrowd": 0}, {"id": 7283947, "category_id": 16, "area": 1014, "bbox": [285, 307, 50, 43], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 580, "bbox": [87, 280, 32, 40], "iscrowd": 0}, {"id": 2188508, "category_id": 20, "area": 720, "bbox": [55, 282, 31, 42], "iscrowd": 0}, {"id": 473277, "category_id": 20, "area": 650, "bbox": [0, 289, 29, 42], "iscrowd": 0}, {"id": 1006011, "category_id": 20, "area": 53, "bbox": [3, 281, 15, 9], "iscrowd": 0}, {"id": 2110402, "category_id": 20, "area": 80, "bbox": [0, 283, 10, 11], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 30864, "bbox": [0, 339, 508, 174], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 10720, "bbox": [377, 285, 135, 124], "iscrowd": 0}, {"id": 14090003, "category_id": 31, "area": 6620, "bbox": [167, 286, 101, 103], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 214, "bbox": [217, 239, 20, 25], "iscrowd": 0}, {"id": 719076, "category_id": 37, "area": 201, "bbox": [323, 239, 17, 24], "iscrowd": 0}, {"id": 2420695, "category_id": 37, "area": 64, "bbox": [274, 251, 11, 9], "iscrowd": 0}, {"id": 2286309, "category_id": 37, "area": 75, "bbox": [308, 247, 11, 16], "iscrowd": 0}, {"id": 1966048, "category_id": 37, "area": 21404, "bbox": [0, 139, 119, 359], "iscrowd": 0}, {"id": 911567, "category_id": 37, "area": 93, "bbox": [481, 257, 9, 21], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 934, "bbox": [352, 153, 159, 34], "iscrowd": 0}, {"id": 219647, "category_id": 39, "area": 192, "bbox": [317, 184, 33, 6], "iscrowd": 0}, {"id": 2054399, "category_id": 39, "area": 181, "bbox": [313, 122, 35, 7], "iscrowd": 0}, {"id": 411135, "category_id": 39, "area": 508, "bbox": [347, 77, 126, 51], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 9050, "bbox": [165, 410, 202, 87], "iscrowd": 0}, {"id": 43758, "category_id": 40, "area": 493, "bbox": [1, 342, 23, 25], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 313, "bbox": [348, 99, 18, 25], "iscrowd": 0}, {"id": 730623, "category_id": 43, "area": 425, "bbox": [350, 158, 18, 28], "iscrowd": 0}, {"id": 2097407, "category_id": 43, "area": 1119, "bbox": [344, 230, 34, 58], "iscrowd": 0}, {"id": 3735789, "category_id": 43, "area": 5136, "bbox": [120, 190, 45, 127], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 5284, "bbox": [179, 263, 164, 39], "iscrowd": 0}, {"id": 16711680, "category_id": 56, "area": 686, "bbox": [165, 240, 20, 42], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 8398, "bbox": [209, 346, 225, 94], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 3641, "bbox": [359, 179, 78, 105], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 44, "bbox": [276, 260, 12, 4], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 25, "bbox": [117, 160, 9, 4], "iscrowd": 0}, {"id": 1154559, "category_id": 83, "area": 57, "bbox": [341, 6, 11, 8], "iscrowd": 0}, {"id": 1810943, "category_id": 83, "area": 16, "bbox": [377, 53, 6, 3], "iscrowd": 0}, {"id": 47858, "category_id": 83, "area": 14, "bbox": [303, 78, 6, 3], "iscrowd": 0}, {"id": 693503, "category_id": 83, "area": 17, "bbox": [234, 202, 7, 4], "iscrowd": 0}, {"id": 37887, "category_id": 83, "area": 7, "bbox": [392, 88, 3, 3], "iscrowd": 0}, {"id": 37112, "category_id": 83, "area": 9, "bbox": [443, 74, 5, 2], "iscrowd": 0}, {"id": 38903, "category_id": 83, "area": 3, "bbox": [240, 213, 2, 2], "iscrowd": 0}, {"id": 37089, "category_id": 83, "area": 4, "bbox": [275, 212, 3, 2], "iscrowd": 0}, {"id": 41448, "category_id": 83, "area": 4, "bbox": [277, 223, 2, 2], "iscrowd": 0}, {"id": 1753343, "category_id": 83, "area": 7, "bbox": [284, 214, 5, 2], "iscrowd": 0}, {"id": 51711, "category_id": 83, "area": 5, "bbox": [284, 220, 4, 2], "iscrowd": 0}, {"id": 2010879, "category_id": 83, "area": 4, "bbox": [278, 226, 4, 1], "iscrowd": 0}, {"id": 39155, "category_id": 83, "area": 4, "bbox": [271, 228, 2, 2], "iscrowd": 0}, {"id": 110847, "category_id": 83, "area": 3, "bbox": [291, 232, 2, 2], "iscrowd": 0}, {"id": 1032681, "category_id": 83, "area": 4, "bbox": [301, 233, 4, 1], "iscrowd": 0}, {"id": 48112, "category_id": 83, "area": 3, "bbox": [304, 239, 3, 1], "iscrowd": 0}, {"id": 48107, "category_id": 83, "area": 3, "bbox": [299, 240, 2, 2], "iscrowd": 0}, {"id": 1818367, "category_id": 83, "area": 3, "bbox": [319, 240, 2, 2], "iscrowd": 0}, {"id": 1152511, "category_id": 83, "area": 2, "bbox": [343, 243, 2, 1], "iscrowd": 0}, {"id": 50431, "category_id": 83, "area": 3, "bbox": [344, 245, 2, 2], "iscrowd": 0}, {"id": 40959, "category_id": 83, "area": 17, "bbox": [197, 187, 9, 2], "iscrowd": 0}, {"id": 39679, "category_id": 83, "area": 10, "bbox": [253, 215, 7, 2], "iscrowd": 0}, {"id": 41727, "category_id": 83, "area": 6, "bbox": [227, 215, 3, 2], "iscrowd": 0}, {"id": 311295, "category_id": 83, "area": 2, "bbox": [284, 234, 2, 1], "iscrowd": 0}, {"id": 52221, "category_id": 83, "area": 1, "bbox": [313, 242, 1, 1], "iscrowd": 0}, {"id": 46071, "category_id": 83, "area": 2, "bbox": [278, 235, 1, 2], "iscrowd": 0}, {"id": 42495, "category_id": 83, "area": 2, "bbox": [271, 237, 2, 1], "iscrowd": 0}, {"id": 1353727, "category_id": 83, "area": 3, "bbox": [327, 233, 3, 1], "iscrowd": 0}, {"id": 377599, "category_id": 83, "area": 5, "bbox": [344, 182, 3, 2], "iscrowd": 0}, {"id": 837116, "category_id": 83, "area": 3, "bbox": [319, 182, 3, 1], "iscrowd": 0}, {"id": 508132, "category_id": 83, "area": 3, "bbox": [328, 176, 3, 1], "iscrowd": 0}, {"id": 510198, "category_id": 83, "area": 3, "bbox": [338, 169, 3, 1], "iscrowd": 0}, {"id": 1358580, "category_id": 83, "area": 6, "bbox": [379, 161, 4, 2], "iscrowd": 0}, {"id": 1361894, "category_id": 83, "area": 3, "bbox": [395, 153, 3, 1], "iscrowd": 0}, {"id": 966911, "category_id": 83, "area": 3, "bbox": [408, 163, 3, 1], "iscrowd": 0}, {"id": 1807871, "category_id": 83, "area": 5, "bbox": [426, 154, 4, 2], "iscrowd": 0}, {"id": 48615, "category_id": 83, "area": 2, "bbox": [445, 150, 2, 1], "iscrowd": 0}, {"id": 1749745, "category_id": 83, "area": 1, "bbox": [463, 142, 1, 1], "iscrowd": 0}, {"id": 1619453, "category_id": 83, "area": 10, "bbox": [418, 148, 5, 3], "iscrowd": 0}, {"id": 39661, "category_id": 83, "area": 6, "bbox": [335, 113, 4, 2], "iscrowd": 0}, {"id": 1688575, "category_id": 83, "area": 64, "bbox": [206, 106, 7, 12], "iscrowd": 0}, {"id": 445439, "category_id": 83, "area": 263, "bbox": [37, 16, 19, 21], "iscrowd": 0}, {"id": 49635, "category_id": 83, "area": 163, "bbox": [113, 55, 13, 17], "iscrowd": 0}, {"id": 1875703, "category_id": 83, "area": 104, "bbox": [167, 83, 9, 15], "iscrowd": 0}, {"id": 1677311, "category_id": 83, "area": 44, "bbox": [235, 123, 6, 11], "iscrowd": 0}, {"id": 571113, "category_id": 83, "area": 33, "bbox": [258, 137, 4, 11], "iscrowd": 0}, {"id": 1284351, "category_id": 83, "area": 21, "bbox": [274, 150, 3, 8], "iscrowd": 0}, {"id": 40447, "category_id": 83, "area": 20, "bbox": [287, 160, 3, 8], "iscrowd": 0}, {"id": 2006261, "category_id": 83, "area": 12, "bbox": [297, 169, 2, 7], "iscrowd": 0}, {"id": 45567, "category_id": 83, "area": 9, "bbox": [303, 177, 2, 5], "iscrowd": 0}, {"id": 1544703, "category_id": 83, "area": 9, "bbox": [308, 183, 2, 5], "iscrowd": 0}, {"id": 37375, "category_id": 83, "area": 2, "bbox": [453, 225, 2, 1], "iscrowd": 0}, {"id": 48639, "category_id": 83, "area": 1, "bbox": [475, 222, 1, 1], "iscrowd": 0}, {"id": 180464, "category_id": 83, "area": 2, "bbox": [367, 170, 2, 1], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 141, "bbox": [466, 237, 13, 18], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 51, "bbox": [151, 220, 10, 8], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 555, "bbox": [383, 267, 33, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00000973", "file_name": "ADE_val_00000973.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 190210, "bbox": [0, 29, 683, 483], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 135909, "bbox": [0, 0, 683, 303], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12422, "bbox": [85, 476, 533, 35], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 261, "bbox": [607, 274, 21, 23], "iscrowd": 0}, {"id": 12105983, "category_id": 85, "area": 494, "bbox": [122, 20, 15, 72], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1361, "bbox": [371, 410, 25, 91], "iscrowd": 0}, {"id": 3604651, "category_id": 13, "area": 3408, "bbox": [548, 394, 52, 117], "iscrowd": 0}, {"id": 3473530, "category_id": 13, "area": 202, "bbox": [15, 421, 17, 18], "iscrowd": 0}, {"id": 5707668, "category_id": 13, "area": 235, "bbox": [36, 421, 19, 16], "iscrowd": 0}, {"id": 3738531, "category_id": 13, "area": 998, "bbox": [337, 418, 22, 73], "iscrowd": 0}, {"id": 3807120, "category_id": 13, "area": 889, "bbox": [355, 408, 21, 80], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 604, "bbox": [48, 267, 38, 38], "iscrowd": 0}]}, {"image_id": "ADE_val_00000974", "file_name": "ADE_val_00000974.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 4374, "bbox": [90, 1, 166, 47], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 1831, "bbox": [24, 181, 232, 75], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 58101, "bbox": [2, 0, 254, 256], "iscrowd": 0}]}, {"image_id": "ADE_val_00000975", "file_name": "ADE_val_00000975.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 14087, "bbox": [2, 1, 254, 86], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 12312, "bbox": [3, 100, 238, 148], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 37807, "bbox": [2, 17, 254, 237], "iscrowd": 0}]}, {"image_id": "ADE_val_00000976", "file_name": "ADE_val_00000976.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 2031, "bbox": [163, 1, 93, 45], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 1198, "bbox": [196, 200, 60, 43], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 61019, "bbox": [2, 0, 254, 256], "iscrowd": 0}]}, {"image_id": "ADE_val_00000977", "file_name": "ADE_val_00000977.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 596, "bbox": [607, 278, 76, 13], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 50324, "bbox": [0, 114, 683, 203], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 96930, "bbox": [0, 0, 683, 177], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3275, "bbox": [203, 83, 283, 210], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 48427, "bbox": [0, 242, 355, 270], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 833, "bbox": [67, 259, 116, 15], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 15240, "bbox": [0, 116, 683, 126], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 241, "bbox": [55, 243, 12, 33], "iscrowd": 0}, {"id": 3080320, "category_id": 13, "area": 377, "bbox": [127, 258, 16, 41], "iscrowd": 0}, {"id": 5963943, "category_id": 13, "area": 510, "bbox": [108, 252, 19, 47], "iscrowd": 0}, {"id": 4980873, "category_id": 13, "area": 137, "bbox": [116, 239, 13, 22], "iscrowd": 0}, {"id": 4265604, "category_id": 13, "area": 84, "bbox": [106, 246, 7, 19], "iscrowd": 0}, {"id": 3604648, "category_id": 13, "area": 30, "bbox": [90, 254, 5, 10], "iscrowd": 0}, {"id": 4130472, "category_id": 13, "area": 33, "bbox": [86, 252, 5, 11], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 53, "bbox": [533, 249, 16, 12], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 8520, "bbox": [243, 198, 200, 68], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2686, "bbox": [0, 108, 46, 70], "iscrowd": 0}, {"id": 9380838, "category_id": 44, "area": 1356, "bbox": [635, 184, 21, 74], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 2037, "bbox": [56, 270, 100, 31], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 73, "bbox": [577, 243, 9, 24], "iscrowd": 0}, {"id": 15225600, "category_id": 88, "area": 30, "bbox": [543, 241, 14, 7], "iscrowd": 0}, {"id": 14889740, "category_id": 88, "area": 6, "bbox": [603, 239, 4, 6], "iscrowd": 0}, {"id": 16723457, "category_id": 88, "area": 7, "bbox": [559, 240, 4, 4], "iscrowd": 0}, {"id": 16472320, "category_id": 88, "area": 13, "bbox": [161, 222, 5, 8], "iscrowd": 0}, {"id": 16005661, "category_id": 88, "area": 14, "bbox": [124, 222, 5, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00000978", "file_name": "ADE_val_00000978.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 37865, "bbox": [0, 0, 256, 150], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 25918, "bbox": [2, 149, 253, 106], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 598, "bbox": [2, 241, 92, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00000979", "file_name": "ADE_val_00000979.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 63712, "bbox": [2, 1, 462, 165], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 12522, "bbox": [68, 110, 396, 61], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 54193, "bbox": [0, 164, 464, 167], "iscrowd": 0}]}, {"image_id": "ADE_val_00000980", "file_name": "ADE_val_00000980.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 32525, "bbox": [0, 0, 256, 130], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 14431, "bbox": [2, 128, 254, 60], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 17884, "bbox": [2, 184, 254, 72], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 56, "bbox": [41, 120, 7, 17], "iscrowd": 0}, {"id": 1893048, "category_id": 77, "area": 93, "bbox": [111, 124, 13, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00000981", "file_name": "ADE_val_00000981.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 122172, "bbox": [0, 1, 327, 462], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17453, "bbox": [0, 422, 327, 77], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 9407, "bbox": [149, 188, 80, 279], "iscrowd": 0}, {"id": 4263560, "category_id": 13, "area": 12002, "bbox": [66, 296, 137, 182], "iscrowd": 0}]}, {"image_id": "ADE_val_00000982", "file_name": "ADE_val_00000982.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 85060, "bbox": [0, 0, 702, 261], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 57542, "bbox": [0, 381, 701, 130], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 6048, "bbox": [660, 204, 42, 208], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 136329, "bbox": [0, 167, 702, 309], "iscrowd": 0}]}, {"image_id": "ADE_val_00000983", "file_name": "ADE_val_00000983.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21011, "bbox": [0, 1, 294, 228], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 10144, "bbox": [26, 57, 118, 172], "iscrowd": 0}, {"id": 3342505, "category_id": 13, "area": 7878, "bbox": [159, 58, 114, 132], "iscrowd": 0}, {"id": 2883760, "category_id": 13, "area": 1412, "bbox": [137, 57, 27, 94], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3414, "bbox": [102, 0, 107, 58], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 8379, "bbox": [65, 165, 224, 64], "iscrowd": 0}]}, {"image_id": "ADE_val_00000984", "file_name": "ADE_val_00000984.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 140303, "bbox": [0, 0, 554, 320], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 52141, "bbox": [0, 317, 554, 97], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 7184, "bbox": [85, 252, 141, 69], "iscrowd": 0}]}, {"image_id": "ADE_val_00000985", "file_name": "ADE_val_00000985.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 179216, "bbox": [2, 1, 888, 216], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 24112, "bbox": [2, 170, 888, 74], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 107238, "bbox": [0, 223, 889, 287], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 3939, "bbox": [265, 209, 333, 21], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 132122, "bbox": [227, 246, 663, 264], "iscrowd": 0}]}, {"image_id": "ADE_val_00000986", "file_name": "ADE_val_00000986.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 6084, "bbox": [0, 0, 249, 44], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 8743, "bbox": [2, 72, 247, 64], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 14722, "bbox": [0, 11, 249, 79], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 13066, "bbox": [2, 106, 247, 67], "iscrowd": 0}]}, {"image_id": "ADE_val_00000987", "file_name": "ADE_val_00000987.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 36113, "bbox": [2, 1, 254, 171], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1481, "bbox": [2, 119, 223, 63], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 27176, "bbox": [2, 127, 254, 129], "iscrowd": 0}]}, {"image_id": "ADE_val_00000988", "file_name": "ADE_val_00000988.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 164190, "bbox": [1, 1, 682, 498], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 42283, "bbox": [0, 401, 683, 111], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 25562, "bbox": [0, 0, 648, 91], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1966, "bbox": [433, 159, 24, 89], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 4398, "bbox": [379, 256, 75, 74], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 16025, "bbox": [20, 183, 155, 259], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 17270, "bbox": [590, 88, 93, 204], "iscrowd": 0}, {"id": 4063477, "category_id": 23, "area": 7665, "bbox": [81, 111, 92, 99], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 711, "bbox": [403, 242, 52, 20], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 7364, "bbox": [229, 0, 152, 141], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 50285, "bbox": [112, 297, 423, 215], "iscrowd": 0}]}, {"image_id": "ADE_val_00000989", "file_name": "ADE_val_00000989.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 11973, "bbox": [0, 0, 256, 63], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 2911, "bbox": [60, 38, 194, 51], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 30213, "bbox": [2, 53, 253, 202], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 2272, "bbox": [7, 208, 248, 48], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 16590, "bbox": [1, 37, 255, 167], "iscrowd": 0}]}, {"image_id": "ADE_val_00000990", "file_name": "ADE_val_00000990.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 11294, "bbox": [0, 0, 267, 58], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 14506, "bbox": [0, 56, 267, 144], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 3549, "bbox": [190, 40, 77, 88], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 23814, "bbox": [0, 19, 256, 144], "iscrowd": 0}]}, {"image_id": "ADE_val_00000991", "file_name": "ADE_val_00000991.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 9358, "bbox": [2, 178, 164, 78], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 31271, "bbox": [2, 1, 254, 213], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 16375, "bbox": [54, 19, 100, 193], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 7479, "bbox": [160, 74, 96, 182], "iscrowd": 0}]}, {"image_id": "ADE_val_00000992", "file_name": "ADE_val_00000992.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 147672, "bbox": [0, 0, 683, 358], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 68371, "bbox": [0, 0, 677, 239], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 472, "bbox": [56, 263, 33, 24], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 97146, "bbox": [0, 343, 681, 169], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 199, "bbox": [0, 306, 55, 9], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 7077, "bbox": [0, 313, 682, 74], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 460, "bbox": [7, 292, 17, 40], "iscrowd": 0}, {"id": 2883716, "category_id": 13, "area": 79, "bbox": [296, 299, 10, 13], "iscrowd": 0}, {"id": 5773697, "category_id": 13, "area": 113, "bbox": [287, 297, 10, 16], "iscrowd": 0}, {"id": 3021708, "category_id": 13, "area": 507, "bbox": [391, 303, 16, 51], "iscrowd": 0}, {"id": 4265086, "category_id": 13, "area": 298, "bbox": [357, 298, 17, 35], "iscrowd": 0}, {"id": 4260998, "category_id": 13, "area": 349, "bbox": [409, 299, 16, 40], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 6698, "bbox": [205, 313, 169, 57], "iscrowd": 0}, {"id": 14182937, "category_id": 21, "area": 8186, "bbox": [398, 320, 188, 62], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 854, "bbox": [53, 282, 35, 40], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 348, "bbox": [328, 226, 16, 85], "iscrowd": 0}, {"id": 16725766, "category_id": 88, "area": 134, "bbox": [35, 261, 11, 51], "iscrowd": 0}, {"id": 16727552, "category_id": 88, "area": 705, "bbox": [640, 215, 15, 159], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 2646, "bbox": [112, 314, 84, 42], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 1587, "bbox": [78, 249, 111, 15], "iscrowd": 0}, {"id": 2026352, "category_id": 124, "area": 1324, "bbox": [207, 266, 120, 12], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 508, "bbox": [85, 312, 18, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00000993", "file_name": "ADE_val_00000993.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1330, "bbox": [110, 281, 34, 48], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 167609, "bbox": [0, 0, 683, 298], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 17000, "bbox": [0, 23, 683, 259], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 121402, "bbox": [0, 292, 683, 220], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 6289, "bbox": [121, 286, 416, 65], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 31, "bbox": [633, 275, 8, 7], "iscrowd": 0}, {"id": 5111972, "category_id": 13, "area": 68, "bbox": [618, 273, 10, 11], "iscrowd": 0}, {"id": 2818178, "category_id": 13, "area": 178, "bbox": [493, 276, 10, 30], "iscrowd": 0}, {"id": 4784287, "category_id": 13, "area": 38, "bbox": [565, 273, 6, 9], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 12688, "bbox": [0, 258, 131, 124], "iscrowd": 0}, {"id": 11491604, "category_id": 21, "area": 1722, "bbox": [161, 281, 81, 34], "iscrowd": 0}, {"id": 11365888, "category_id": 21, "area": 1298, "bbox": [107, 269, 70, 41], "iscrowd": 0}, {"id": 15026690, "category_id": 21, "area": 5154, "bbox": [531, 283, 152, 52], "iscrowd": 0}, {"id": 14703616, "category_id": 21, "area": 1569, "bbox": [286, 276, 76, 27], "iscrowd": 0}, {"id": 15037440, "category_id": 21, "area": 399, "bbox": [161, 266, 36, 19], "iscrowd": 0}, {"id": 14905088, "category_id": 21, "area": 540, "bbox": [631, 281, 41, 20], "iscrowd": 0}, {"id": 13722880, "category_id": 21, "area": 190, "bbox": [671, 280, 12, 21], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 915, "bbox": [505, 281, 71, 18], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 592, "bbox": [352, 175, 54, 14], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1774, "bbox": [231, 74, 40, 235], "iscrowd": 0}, {"id": 15355675, "category_id": 88, "area": 126, "bbox": [19, 210, 9, 47], "iscrowd": 0}, {"id": 16725252, "category_id": 88, "area": 589, "bbox": [562, 163, 33, 122], "iscrowd": 0}, {"id": 15226390, "category_id": 88, "area": 34, "bbox": [581, 259, 4, 24], "iscrowd": 0}, {"id": 16395279, "category_id": 88, "area": 114, "bbox": [528, 257, 5, 36], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 1350, "bbox": [248, 163, 226, 41], "iscrowd": 0}, {"id": 16711691, "category_id": 137, "area": 340, "bbox": [478, 239, 17, 65], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 109, "bbox": [476, 291, 10, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00000994", "file_name": "ADE_val_00000994.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 40422, "bbox": [1, 119, 681, 193], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 77129, "bbox": [1, 1, 682, 204], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 68994, "bbox": [1, 1, 682, 286], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 81752, "bbox": [6, 305, 677, 207], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2643, "bbox": [333, 274, 152, 39], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 4720, "bbox": [476, 279, 113, 55], "iscrowd": 0}, {"id": 14318592, "category_id": 21, "area": 48961, "bbox": [7, 300, 462, 149], "iscrowd": 0}, {"id": 15037712, "category_id": 21, "area": 1459, "bbox": [214, 276, 119, 31], "iscrowd": 0}, {"id": 13195548, "category_id": 21, "area": 1019, "bbox": [167, 289, 199, 32], "iscrowd": 0}, {"id": 14320384, "category_id": 21, "area": 424, "bbox": [105, 315, 61, 19], "iscrowd": 0}, {"id": 13851648, "category_id": 21, "area": 1012, "bbox": [340, 287, 44, 31], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 15495, "bbox": [1, 200, 230, 311], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 505, "bbox": [445, 171, 20, 138], "iscrowd": 0}, {"id": 15228694, "category_id": 88, "area": 261, "bbox": [118, 166, 45, 103], "iscrowd": 0}]}, {"image_id": "ADE_val_00000995", "file_name": "ADE_val_00000995.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 28199, "bbox": [1, 187, 682, 99], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 117642, "bbox": [0, 0, 683, 252], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 32630, "bbox": [36, 26, 647, 261], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 122334, "bbox": [0, 286, 683, 226], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 202, "bbox": [575, 276, 37, 16], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 10570, "bbox": [45, 283, 638, 96], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 28, "bbox": [574, 274, 4, 13], "iscrowd": 0}, {"id": 2228652, "category_id": 13, "area": 48, "bbox": [568, 274, 6, 14], "iscrowd": 0}, {"id": 3408043, "category_id": 13, "area": 132, "bbox": [538, 270, 9, 26], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 4140, "bbox": [0, 237, 48, 116], "iscrowd": 0}, {"id": 11621381, "category_id": 21, "area": 441, "bbox": [309, 277, 33, 20], "iscrowd": 0}, {"id": 12936990, "category_id": 21, "area": 3754, "bbox": [147, 262, 100, 51], "iscrowd": 0}, {"id": 13926664, "category_id": 21, "area": 214, "bbox": [138, 271, 32, 11], "iscrowd": 0}, {"id": 14897152, "category_id": 21, "area": 78, "bbox": [121, 273, 25, 7], "iscrowd": 0}, {"id": 12220928, "category_id": 21, "area": 96, "bbox": [52, 272, 13, 10], "iscrowd": 0}, {"id": 13336840, "category_id": 21, "area": 51, "bbox": [62, 271, 13, 10], "iscrowd": 0}, {"id": 12408578, "category_id": 21, "area": 62, "bbox": [69, 270, 11, 10], "iscrowd": 0}, {"id": 11883520, "category_id": 21, "area": 2631, "bbox": [333, 269, 65, 56], "iscrowd": 0}, {"id": 14436353, "category_id": 21, "area": 399, "bbox": [385, 273, 29, 22], "iscrowd": 0}, {"id": 13660190, "category_id": 21, "area": 30, "bbox": [559, 279, 5, 8], "iscrowd": 0}, {"id": 14775296, "category_id": 21, "area": 43, "bbox": [550, 278, 8, 12], "iscrowd": 0}, {"id": 12411136, "category_id": 21, "area": 50, "bbox": [549, 278, 5, 13], "iscrowd": 0}, {"id": 11824128, "category_id": 21, "area": 376, "bbox": [501, 276, 30, 27], "iscrowd": 0}, {"id": 14907392, "category_id": 21, "area": 242, "bbox": [500, 280, 17, 27], "iscrowd": 0}, {"id": 12866072, "category_id": 21, "area": 675, "bbox": [460, 280, 48, 30], "iscrowd": 0}, {"id": 11753472, "category_id": 21, "area": 962, "bbox": [608, 272, 75, 15], "iscrowd": 0}, {"id": 14707994, "category_id": 21, "area": 51, "bbox": [75, 270, 11, 9], "iscrowd": 0}, {"id": 13133824, "category_id": 21, "area": 33, "bbox": [332, 272, 13, 5], "iscrowd": 0}, {"id": 12409856, "category_id": 21, "area": 43, "bbox": [562, 277, 8, 8], "iscrowd": 0}, {"id": 11168524, "category_id": 21, "area": 36, "bbox": [551, 277, 10, 12], "iscrowd": 0}, {"id": 13394432, "category_id": 21, "area": 81, "bbox": [115, 272, 21, 7], "iscrowd": 0}, {"id": 14448157, "category_id": 21, "area": 463, "bbox": [509, 269, 40, 29], "iscrowd": 0}, {"id": 11698688, "category_id": 21, "area": 28, "bbox": [478, 275, 14, 5], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 1701, "bbox": [56, 279, 94, 23], "iscrowd": 0}, {"id": 1136639, "category_id": 39, "area": 5731, "bbox": [574, 283, 109, 64], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 242, "bbox": [64, 242, 11, 65], "iscrowd": 0}, {"id": 9961698, "category_id": 44, "area": 225, "bbox": [528, 247, 12, 55], "iscrowd": 0}, {"id": 8716527, "category_id": 44, "area": 204, "bbox": [482, 206, 31, 9], "iscrowd": 0}, {"id": 8585459, "category_id": 44, "area": 180, "bbox": [238, 236, 9, 33], "iscrowd": 0}, {"id": 10879211, "category_id": 44, "area": 128, "bbox": [475, 240, 9, 16], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 565, "bbox": [274, 262, 45, 18], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 84, "bbox": [28, 210, 12, 48], "iscrowd": 0}, {"id": 16604185, "category_id": 88, "area": 178, "bbox": [329, 189, 34, 86], "iscrowd": 0}, {"id": 16734992, "category_id": 88, "area": 17, "bbox": [531, 220, 12, 2], "iscrowd": 0}, {"id": 16735744, "category_id": 88, "area": 1665, "bbox": [380, 62, 111, 262], "iscrowd": 0}, {"id": 15675648, "category_id": 88, "area": 63, "bbox": [237, 202, 10, 21], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 4883, "bbox": [301, 111, 203, 211], "iscrowd": 0}]}, {"image_id": "ADE_val_00000996", "file_name": "ADE_val_00000996.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 30132, "bbox": [209, 291, 473, 99], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 192140, "bbox": [1, 0, 682, 340], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 11422, "bbox": [0, 0, 415, 81], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 80070, "bbox": [0, 392, 683, 120], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1277, "bbox": [296, 386, 387, 11], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2434, "bbox": [330, 362, 96, 33], "iscrowd": 0}, {"id": 13261312, "category_id": 21, "area": 2866, "bbox": [440, 361, 113, 34], "iscrowd": 0}, {"id": 14375936, "category_id": 21, "area": 2318, "bbox": [571, 361, 92, 34], "iscrowd": 0}, {"id": 12143360, "category_id": 21, "area": 694, "bbox": [279, 363, 35, 31], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 22394, "bbox": [0, 308, 282, 87], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 98, "bbox": [355, 117, 18, 21], "iscrowd": 0}, {"id": 16730368, "category_id": 88, "area": 33, "bbox": [211, 261, 6, 8], "iscrowd": 0}, {"id": 16722435, "category_id": 88, "area": 25, "bbox": [263, 258, 4, 8], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 914, "bbox": [272, 239, 93, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00000997", "file_name": "ADE_val_00000997.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 54834, "bbox": [79, 26, 154, 551], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 198747, "bbox": [0, 0, 511, 574], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 89875, "bbox": [0, 471, 511, 211], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1512, "bbox": [166, 99, 41, 58], "iscrowd": 0}, {"id": 15980278, "category_id": 9, "area": 934, "bbox": [124, 103, 28, 58], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 1003, "bbox": [170, 164, 35, 41], "iscrowd": 0}, {"id": 1507167, "category_id": 149, "area": 693, "bbox": [118, 169, 27, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00000998", "file_name": "ADE_val_00000998.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 55199, "bbox": [2, 0, 496, 254], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 33529, "bbox": [1, 254, 498, 79], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 19309, "bbox": [70, 0, 429, 86], "iscrowd": 0}, {"id": 65311, "category_id": 52, "area": 9118, "bbox": [0, 214, 384, 46], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 875, "bbox": [259, 145, 39, 31], "iscrowd": 0}, {"id": 13358306, "category_id": 9, "area": 3499, "bbox": [69, 126, 61, 71], "iscrowd": 0}, {"id": 16768503, "category_id": 9, "area": 3846, "bbox": [2, 120, 58, 74], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2339, "bbox": [200, 138, 48, 65], "iscrowd": 0}, {"id": 5374082, "category_id": 13, "area": 3164, "bbox": [139, 133, 53, 67], "iscrowd": 0}, {"id": 2236072, "category_id": 13, "area": 132, "bbox": [119, 201, 14, 18], "iscrowd": 0}, {"id": 3543949, "category_id": 13, "area": 1181, "bbox": [375, 185, 31, 102], "iscrowd": 0}, {"id": 4923002, "category_id": 13, "area": 5788, "bbox": [309, 100, 79, 217], "iscrowd": 0}, {"id": 4720780, "category_id": 13, "area": 3338, "bbox": [426, 158, 42, 143], "iscrowd": 0}, {"id": 4128915, "category_id": 13, "area": 1210, "bbox": [299, 194, 28, 82], "iscrowd": 0}, {"id": 2491806, "category_id": 13, "area": 510, "bbox": [228, 171, 15, 56], "iscrowd": 0}, {"id": 3604647, "category_id": 13, "area": 1072, "bbox": [108, 206, 41, 64], "iscrowd": 0}, {"id": 2490509, "category_id": 13, "area": 3499, "bbox": [0, 180, 112, 118], "iscrowd": 0}, {"id": 3604642, "category_id": 13, "area": 213, "bbox": [182, 216, 14, 24], "iscrowd": 0}, {"id": 3735731, "category_id": 13, "area": 175, "bbox": [172, 215, 11, 25], "iscrowd": 0}, {"id": 4720009, "category_id": 13, "area": 164, "bbox": [205, 218, 11, 22], "iscrowd": 0}, {"id": 3866797, "category_id": 13, "area": 223, "bbox": [158, 217, 13, 24], "iscrowd": 0}, {"id": 5114768, "category_id": 13, "area": 153, "bbox": [164, 202, 12, 22], "iscrowd": 0}, {"id": 2883745, "category_id": 13, "area": 130, "bbox": [110, 199, 9, 22], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1457, "bbox": [400, 207, 30, 51], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 270, "bbox": [335, 85, 19, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00000999", "file_name": "ADE_val_00000999.png", "segments_info": [{"id": 9240463, "category_id": 17, "area": 43182, "bbox": [0, 0, 256, 256], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6250, "bbox": [0, 66, 162, 189], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 11347, "bbox": [0, 102, 149, 153], "iscrowd": 0}, {"id": 16769024, "category_id": 114, "area": 4008, "bbox": [50, 132, 84, 115], "iscrowd": 0}]}, {"image_id": "ADE_val_00001000", "file_name": "ADE_val_00001000.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 16975, "bbox": [32, 19, 218, 117], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9264, "bbox": [28, 1, 221, 104], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 502, "bbox": [35, 61, 24, 38], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 12837, "bbox": [28, 134, 221, 65], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 228, "bbox": [28, 104, 22, 38], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 2896, "bbox": [112, 86, 59, 57], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 107, "bbox": [184, 125, 4, 28], "iscrowd": 0}, {"id": 16715846, "category_id": 94, "area": 96, "bbox": [68, 124, 4, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001001", "file_name": "ADE_val_00001001.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 210607, "bbox": [1, 0, 511, 683], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 116106, "bbox": [1, 1, 511, 439], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 20255, "bbox": [0, 218, 512, 272], "iscrowd": 0}]}, {"image_id": "ADE_val_00001002", "file_name": "ADE_val_00001002.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 74828, "bbox": [0, 0, 500, 217], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 37466, "bbox": [70, 154, 430, 219], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 20712, "bbox": [2, 190, 498, 183], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 19751, "bbox": [2, 166, 473, 184], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1129, "bbox": [296, 228, 40, 37], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 4862, "bbox": [2, 223, 292, 51], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 641, "bbox": [190, 307, 13, 65], "iscrowd": 0}, {"id": 9181930, "category_id": 44, "area": 602, "bbox": [163, 284, 11, 76], "iscrowd": 0}, {"id": 10885879, "category_id": 44, "area": 48, "bbox": [123, 223, 10, 10], "iscrowd": 0}, {"id": 11603711, "category_id": 44, "area": 11011, "bbox": [3, 36, 183, 194], "iscrowd": 0}, {"id": 11934975, "category_id": 44, "area": 1319, "bbox": [215, 146, 42, 74], "iscrowd": 0}, {"id": 10682617, "category_id": 44, "area": 450, "bbox": [114, 135, 26, 39], "iscrowd": 0}, {"id": 10951423, "category_id": 44, "area": 280, "bbox": [324, 155, 13, 24], "iscrowd": 0}, {"id": 11602431, "category_id": 44, "area": 230, "bbox": [263, 160, 23, 10], "iscrowd": 0}, {"id": 11010290, "category_id": 44, "area": 191, "bbox": [161, 148, 20, 29], "iscrowd": 0}, {"id": 10619391, "category_id": 44, "area": 184, "bbox": [279, 173, 16, 17], "iscrowd": 0}, {"id": 11211256, "category_id": 44, "area": 173, "bbox": [52, 136, 22, 12], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 810, "bbox": [342, 195, 29, 35], "iscrowd": 0}, {"id": 2359542, "category_id": 84, "area": 218, "bbox": [429, 181, 29, 15], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 708, "bbox": [439, 85, 24, 116], "iscrowd": 0}, {"id": 16731149, "category_id": 88, "area": 317, "bbox": [371, 100, 25, 107], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 344, "bbox": [388, 204, 18, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00001003", "file_name": "ADE_val_00001003.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 4277, "bbox": [81, 220, 601, 31], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 113818, "bbox": [0, 0, 683, 192], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 13232, "bbox": [0, 180, 682, 56], "iscrowd": 0}, {"id": 65433, "category_id": 55, "area": 160748, "bbox": [1, 246, 680, 265], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 27563, "bbox": [215, 66, 113, 399], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 153, "bbox": [404, 153, 12, 30], "iscrowd": 0}, {"id": 16730882, "category_id": 88, "area": 105, "bbox": [84, 171, 11, 25], "iscrowd": 0}, {"id": 15422720, "category_id": 88, "area": 376, "bbox": [655, 142, 14, 92], "iscrowd": 0}, {"id": 5439232, "category_id": 91, "area": 2568, "bbox": [0, 189, 94, 62], "iscrowd": 0}, {"id": 6815488, "category_id": 91, "area": 295, "bbox": [130, 180, 106, 71], "iscrowd": 0}, {"id": 6483220, "category_id": 91, "area": 15608, "bbox": [130, 101, 371, 157], "iscrowd": 0}, {"id": 7008512, "category_id": 91, "area": 6348, "bbox": [369, 168, 230, 84], "iscrowd": 0}]}, {"image_id": "ADE_val_00001004", "file_name": "ADE_val_00001004.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 4020, "bbox": [0, 0, 300, 75], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6900, "bbox": [127, 35, 70, 190], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3287, "bbox": [6, 0, 262, 23], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2859, "bbox": [182, 19, 117, 42], "iscrowd": 0}, {"id": 13892335, "category_id": 9, "area": 3471, "bbox": [2, 24, 128, 48], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 3918, "bbox": [0, 31, 154, 194], "iscrowd": 0}, {"id": 15531776, "category_id": 32, "area": 2435, "bbox": [160, 32, 140, 192], "iscrowd": 0}, {"id": 13303552, "category_id": 32, "area": 5144, "bbox": [217, 111, 82, 112], "iscrowd": 0}, {"id": 15924480, "category_id": 32, "area": 2638, "bbox": [193, 84, 74, 139], "iscrowd": 0}, {"id": 13493505, "category_id": 32, "area": 739, "bbox": [268, 84, 31, 30], "iscrowd": 0}, {"id": 13037316, "category_id": 32, "area": 135, "bbox": [247, 72, 50, 31], "iscrowd": 0}, {"id": 16116770, "category_id": 32, "area": 6318, "bbox": [6, 114, 97, 109], "iscrowd": 0}, {"id": 16318223, "category_id": 32, "area": 2316, "bbox": [51, 86, 76, 138], "iscrowd": 0}, {"id": 14155520, "category_id": 32, "area": 411, "bbox": [2, 88, 46, 61], "iscrowd": 0}, {"id": 12772098, "category_id": 32, "area": 199, "bbox": [22, 73, 49, 40], "iscrowd": 0}, {"id": 13041408, "category_id": 32, "area": 1066, "bbox": [73, 71, 59, 114], "iscrowd": 0}, {"id": 13827860, "category_id": 32, "area": 305, "bbox": [9, 66, 35, 18], "iscrowd": 0}, {"id": 14018560, "category_id": 32, "area": 107, "bbox": [47, 64, 38, 23], "iscrowd": 0}, {"id": 12903174, "category_id": 32, "area": 511, "bbox": [90, 62, 47, 89], "iscrowd": 0}, {"id": 14024483, "category_id": 32, "area": 584, "bbox": [103, 56, 40, 76], "iscrowd": 0}, {"id": 14482721, "category_id": 32, "area": 227, "bbox": [65, 58, 33, 13], "iscrowd": 0}, {"id": 16645888, "category_id": 32, "area": 677, "bbox": [181, 60, 45, 99], "iscrowd": 0}, {"id": 14876438, "category_id": 32, "area": 424, "bbox": [230, 61, 39, 22], "iscrowd": 0}, {"id": 13106971, "category_id": 32, "area": 262, "bbox": [271, 62, 28, 17], "iscrowd": 0}, {"id": 15859460, "category_id": 32, "area": 614, "bbox": [174, 55, 38, 71], "iscrowd": 0}, {"id": 15265290, "category_id": 32, "area": 200, "bbox": [173, 51, 30, 37], "iscrowd": 0}, {"id": 13500160, "category_id": 32, "area": 208, "bbox": [222, 55, 25, 15], "iscrowd": 0}, {"id": 14352128, "category_id": 32, "area": 244, "bbox": [256, 55, 32, 15], "iscrowd": 0}, {"id": 14743077, "category_id": 32, "area": 145, "bbox": [246, 50, 21, 11], "iscrowd": 0}, {"id": 14082308, "category_id": 32, "area": 173, "bbox": [211, 50, 23, 12], "iscrowd": 0}, {"id": 14672384, "category_id": 32, "area": 1223, "bbox": [186, 70, 57, 119], "iscrowd": 0}, {"id": 15464209, "category_id": 32, "area": 249, "bbox": [0, 75, 22, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001005", "file_name": "ADE_val_00001005.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 22958, "bbox": [0, 221, 683, 75], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 155174, "bbox": [0, 0, 683, 257], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 2625, "bbox": [158, 239, 475, 25], "iscrowd": 0}, {"id": 65433, "category_id": 55, "area": 136508, "bbox": [0, 292, 682, 219], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 724, "bbox": [612, 338, 27, 60], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 156, "bbox": [477, 283, 22, 9], "iscrowd": 0}, {"id": 14640640, "category_id": 21, "area": 343, "bbox": [527, 284, 34, 13], "iscrowd": 0}, {"id": 14582528, "category_id": 21, "area": 3428, "bbox": [442, 354, 94, 52], "iscrowd": 0}, {"id": 13913344, "category_id": 21, "area": 261, "bbox": [436, 284, 32, 12], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 41, "bbox": [471, 281, 9, 8], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 22, "bbox": [178, 249, 3, 8], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 68, "bbox": [614, 192, 7, 39], "iscrowd": 0}, {"id": 16727552, "category_id": 88, "area": 73, "bbox": [545, 202, 13, 34], "iscrowd": 0}, {"id": 16727808, "category_id": 88, "area": 3, "bbox": [262, 242, 3, 1], "iscrowd": 0}, {"id": 16272896, "category_id": 88, "area": 3, "bbox": [211, 241, 3, 1], "iscrowd": 0}, {"id": 15346944, "category_id": 88, "area": 18, "bbox": [159, 241, 3, 15], "iscrowd": 0}, {"id": 16734464, "category_id": 88, "area": 4, "bbox": [166, 251, 2, 12], "iscrowd": 0}, {"id": 16724503, "category_id": 88, "area": 2, "bbox": [233, 247, 2, 1], "iscrowd": 0}, {"id": 16667393, "category_id": 88, "area": 18, "bbox": [205, 241, 2, 17], "iscrowd": 0}, {"id": 16737536, "category_id": 88, "area": 17, "bbox": [187, 245, 3, 15], "iscrowd": 0}, {"id": 5439232, "category_id": 91, "area": 3431, "bbox": [458, 232, 153, 60], "iscrowd": 0}]}, {"image_id": "ADE_val_00001006", "file_name": "ADE_val_00001006.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 139264, "bbox": [0, 0, 682, 274], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 24932, "bbox": [362, 0, 320, 143], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 24332, "bbox": [2, 229, 670, 156], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 130952, "bbox": [0, 243, 683, 269], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1806, "bbox": [113, 247, 37, 89], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 1057, "bbox": [1, 224, 26, 46], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 3652, "bbox": [240, 91, 178, 47], "iscrowd": 0}, {"id": 194410, "category_id": 124, "area": 1957, "bbox": [426, 125, 96, 36], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 10593, "bbox": [65, 325, 122, 106], "iscrowd": 0}, {"id": 16716025, "category_id": 126, "area": 3803, "bbox": [299, 286, 71, 62], "iscrowd": 0}, {"id": 16714239, "category_id": 126, "area": 1192, "bbox": [448, 264, 42, 33], "iscrowd": 0}, {"id": 16318719, "category_id": 126, "area": 854, "bbox": [494, 255, 35, 29], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 177, "bbox": [432, 229, 14, 14], "iscrowd": 0}, {"id": 16711838, "category_id": 139, "area": 129, "bbox": [499, 226, 13, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001007", "file_name": "ADE_val_00001007.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 11220, "bbox": [1, 121, 681, 115], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 129028, "bbox": [1, 227, 681, 284], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 50016, "bbox": [0, 1, 682, 110], "iscrowd": 0}, {"id": 10747648, "category_id": 97, "area": 31930, "bbox": [96, 285, 514, 116], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 21216, "bbox": [2, 171, 678, 64], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 98, "bbox": [466, 333, 10, 18], "iscrowd": 0}, {"id": 2891939, "category_id": 13, "area": 1235, "bbox": [119, 219, 36, 58], "iscrowd": 0}, {"id": 5835912, "category_id": 13, "area": 53, "bbox": [13, 211, 11, 9], "iscrowd": 0}, {"id": 5243011, "category_id": 13, "area": 32, "bbox": [204, 217, 10, 7], "iscrowd": 0}, {"id": 2366622, "category_id": 13, "area": 186, "bbox": [455, 220, 20, 16], "iscrowd": 0}, {"id": 3941003, "category_id": 13, "area": 206, "bbox": [473, 204, 13, 33], "iscrowd": 0}, {"id": 4587643, "category_id": 13, "area": 23, "bbox": [495, 215, 7, 6], "iscrowd": 0}, {"id": 3604606, "category_id": 13, "area": 36, "bbox": [569, 214, 4, 10], "iscrowd": 0}, {"id": 2232447, "category_id": 13, "area": 81, "bbox": [662, 221, 13, 12], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 68, "bbox": [51, 224, 14, 17], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 926, "bbox": [595, 233, 84, 23], "iscrowd": 0}, {"id": 14808832, "category_id": 32, "area": 930, "bbox": [628, 239, 54, 25], "iscrowd": 0}, {"id": 13565719, "category_id": 32, "area": 374, "bbox": [204, 223, 43, 14], "iscrowd": 0}, {"id": 15924993, "category_id": 32, "area": 220, "bbox": [142, 224, 26, 12], "iscrowd": 0}, {"id": 15597312, "category_id": 32, "area": 181, "bbox": [483, 222, 24, 14], "iscrowd": 0}, {"id": 14876447, "category_id": 32, "area": 172, "bbox": [538, 222, 17, 13], "iscrowd": 0}, {"id": 15466274, "category_id": 32, "area": 575, "bbox": [607, 221, 54, 12], "iscrowd": 0}, {"id": 15920646, "category_id": 32, "area": 373, "bbox": [454, 235, 19, 24], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 12398, "bbox": [110, 238, 483, 126], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 895, "bbox": [98, 72, 26, 41], "iscrowd": 0}, {"id": 3679487, "category_id": 43, "area": 800, "bbox": [575, 69, 27, 61], "iscrowd": 0}, {"id": 3802601, "category_id": 43, "area": 1663, "bbox": [99, 176, 27, 81], "iscrowd": 0}, {"id": 723684, "category_id": 43, "area": 1750, "bbox": [574, 175, 25, 81], "iscrowd": 0}, {"id": 2818538, "category_id": 43, "area": 889, "bbox": [166, 181, 18, 58], "iscrowd": 0}, {"id": 1836520, "category_id": 43, "area": 853, "bbox": [516, 178, 17, 60], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 24377, "bbox": [164, 63, 380, 67], "iscrowd": 0}, {"id": 9306352, "category_id": 44, "area": 1139, "bbox": [313, 287, 67, 17], "iscrowd": 0}, {"id": 9379049, "category_id": 44, "area": 946, "bbox": [314, 337, 68, 16], "iscrowd": 0}, {"id": 10034942, "category_id": 44, "area": 630, "bbox": [225, 157, 35, 18], "iscrowd": 0}, {"id": 9502975, "category_id": 44, "area": 614, "bbox": [438, 154, 35, 18], "iscrowd": 0}, {"id": 11281397, "category_id": 44, "area": 4242, "bbox": [579, 93, 93, 47], "iscrowd": 0}, {"id": 8454389, "category_id": 44, "area": 1269, "bbox": [170, 140, 50, 26], "iscrowd": 0}, {"id": 11601912, "category_id": 44, "area": 16112, "bbox": [248, 183, 205, 81], "iscrowd": 0}, {"id": 11732723, "category_id": 44, "area": 691, "bbox": [82, 215, 18, 43], "iscrowd": 0}, {"id": 9830643, "category_id": 44, "area": 401, "bbox": [555, 209, 14, 49], "iscrowd": 0}, {"id": 8978687, "category_id": 44, "area": 327, "bbox": [100, 212, 17, 21], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 1252, "bbox": [0, 218, 46, 35], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 28, "bbox": [345, 37, 9, 4], "iscrowd": 0}, {"id": 51967, "category_id": 83, "area": 29, "bbox": [234, 39, 9, 4], "iscrowd": 0}, {"id": 1685503, "category_id": 83, "area": 27, "bbox": [455, 37, 8, 4], "iscrowd": 0}, {"id": 1089519, "category_id": 83, "area": 25, "bbox": [114, 34, 8, 4], "iscrowd": 0}, {"id": 1947618, "category_id": 83, "area": 20, "bbox": [21, 63, 9, 3], "iscrowd": 0}, {"id": 51199, "category_id": 83, "area": 38, "bbox": [84, 15, 12, 4], "iscrowd": 0}, {"id": 50175, "category_id": 83, "area": 28, "bbox": [77, 9, 9, 4], "iscrowd": 0}, {"id": 1022719, "category_id": 83, "area": 28, "bbox": [135, 50, 10, 3], "iscrowd": 0}, {"id": 1550843, "category_id": 83, "area": 27, "bbox": [206, 1, 10, 4], "iscrowd": 0}, {"id": 238335, "category_id": 83, "area": 26, "bbox": [554, 47, 10, 3], "iscrowd": 0}, {"id": 47103, "category_id": 83, "area": 23, "bbox": [578, 31, 7, 4], "iscrowd": 0}, {"id": 44277, "category_id": 83, "area": 16, "bbox": [550, 51, 6, 3], "iscrowd": 0}, {"id": 704490, "category_id": 83, "area": 16, "bbox": [616, 81, 8, 3], "iscrowd": 0}, {"id": 1748991, "category_id": 83, "area": 21, "bbox": [668, 58, 9, 3], "iscrowd": 0}, {"id": 1220594, "category_id": 83, "area": 11, "bbox": [75, 84, 6, 3], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 396, "bbox": [669, 248, 13, 34], "iscrowd": 0}, {"id": 16582559, "category_id": 139, "area": 745, "bbox": [1, 251, 23, 36], "iscrowd": 0}, {"id": 16715411, "category_id": 139, "area": 275, "bbox": [20, 251, 13, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001008", "file_name": "ADE_val_00001008.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 69553, "bbox": [2, 1, 496, 359], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8493, "bbox": [6, 261, 486, 114], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 24030, "bbox": [2, 1, 403, 134], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 7629, "bbox": [81, 219, 74, 156], "iscrowd": 0}, {"id": 2886297, "category_id": 13, "area": 797, "bbox": [34, 208, 28, 51], "iscrowd": 0}, {"id": 4128938, "category_id": 13, "area": 5125, "bbox": [2, 223, 65, 151], "iscrowd": 0}, {"id": 4194456, "category_id": 13, "area": 314, "bbox": [201, 252, 21, 40], "iscrowd": 0}, {"id": 2302587, "category_id": 13, "area": 492, "bbox": [9, 232, 22, 45], "iscrowd": 0}, {"id": 5636261, "category_id": 13, "area": 4782, "bbox": [395, 221, 51, 154], "iscrowd": 0}, {"id": 4391080, "category_id": 13, "area": 4574, "bbox": [300, 219, 59, 156], "iscrowd": 0}, {"id": 5383082, "category_id": 13, "area": 2353, "bbox": [337, 221, 42, 122], "iscrowd": 0}, {"id": 3152001, "category_id": 13, "area": 259, "bbox": [445, 225, 23, 31], "iscrowd": 0}, {"id": 4264328, "category_id": 13, "area": 9303, "bbox": [216, 206, 140, 169], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2508, "bbox": [249, 56, 58, 56], "iscrowd": 0}, {"id": 8192241, "category_id": 44, "area": 1874, "bbox": [155, 266, 31, 69], "iscrowd": 0}, {"id": 11206911, "category_id": 44, "area": 5351, "bbox": [280, 120, 202, 50], "iscrowd": 0}, {"id": 11927793, "category_id": 44, "area": 548, "bbox": [459, 231, 23, 27], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 7401, "bbox": [434, 256, 65, 119], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 3276, "bbox": [0, 0, 88, 44], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 1186, "bbox": [179, 290, 42, 62], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 826, "bbox": [116, 161, 54, 21], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 360, "bbox": [39, 153, 18, 30], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 302, "bbox": [16, 138, 14, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00001009", "file_name": "ADE_val_00001009.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 52116, "bbox": [0, 213, 682, 299], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 12827, "bbox": [111, 409, 451, 102], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 142670, "bbox": [0, 0, 682, 290], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 33802, "bbox": [342, 287, 340, 189], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 5043, "bbox": [0, 348, 183, 92], "iscrowd": 0}, {"id": 10747648, "category_id": 97, "area": 6143, "bbox": [268, 311, 414, 200], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 16709, "bbox": [389, 185, 293, 70], "iscrowd": 0}, {"id": 15265019, "category_id": 9, "area": 180, "bbox": [0, 286, 39, 9], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 43, "bbox": [157, 311, 10, 7], "iscrowd": 0}, {"id": 4789124, "category_id": 13, "area": 116, "bbox": [239, 303, 13, 15], "iscrowd": 0}, {"id": 4259989, "category_id": 13, "area": 82, "bbox": [590, 305, 9, 14], "iscrowd": 0}, {"id": 4130709, "category_id": 13, "area": 1295, "bbox": [532, 413, 50, 41], "iscrowd": 0}, {"id": 4396686, "category_id": 13, "area": 2368, "bbox": [436, 409, 99, 34], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 243, "bbox": [637, 302, 20, 15], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 17331, "bbox": [0, 387, 682, 94], "iscrowd": 0}, {"id": 12783, "category_id": 39, "area": 14770, "bbox": [0, 317, 664, 63], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 334, "bbox": [176, 382, 29, 12], "iscrowd": 0}, {"id": 10289393, "category_id": 44, "area": 131, "bbox": [137, 387, 24, 6], "iscrowd": 0}, {"id": 9441256, "category_id": 44, "area": 157, "bbox": [171, 293, 26, 7], "iscrowd": 0}, {"id": 10099711, "category_id": 44, "area": 5129, "bbox": [34, 333, 155, 35], "iscrowd": 0}, {"id": 10819558, "category_id": 44, "area": 160, "bbox": [607, 281, 27, 7], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 808, "bbox": [53, 272, 71, 12], "iscrowd": 0}, {"id": 58001, "category_id": 124, "area": 500, "bbox": [257, 359, 36, 14], "iscrowd": 0}, {"id": 524171, "category_id": 124, "area": 1049, "bbox": [206, 272, 71, 15], "iscrowd": 0}, {"id": 1503351, "category_id": 124, "area": 1005, "bbox": [560, 273, 63, 19], "iscrowd": 0}, {"id": 786286, "category_id": 124, "area": 415, "bbox": [317, 281, 27, 16], "iscrowd": 0}, {"id": 64407, "category_id": 124, "area": 714, "bbox": [277, 271, 46, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001010", "file_name": "ADE_val_00001010.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 74305, "bbox": [44, 110, 724, 293], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 116517, "bbox": [3, 314, 765, 197], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 137362, "bbox": [0, 0, 768, 283], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 9250, "bbox": [672, 125, 61, 228], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 115, "bbox": [29, 294, 10, 21], "iscrowd": 0}, {"id": 5571984, "category_id": 13, "area": 204, "bbox": [11, 290, 12, 26], "iscrowd": 0}, {"id": 5701768, "category_id": 13, "area": 258, "bbox": [1, 283, 11, 33], "iscrowd": 0}, {"id": 2497192, "category_id": 13, "area": 1570, "bbox": [190, 262, 37, 84], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 18684, "bbox": [344, 197, 154, 141], "iscrowd": 0}, {"id": 4264959, "category_id": 23, "area": 6610, "bbox": [234, 231, 77, 95], "iscrowd": 0}, {"id": 3743471, "category_id": 23, "area": 1925, "bbox": [171, 248, 43, 73], "iscrowd": 0}, {"id": 4456687, "category_id": 23, "area": 1662, "bbox": [130, 257, 31, 60], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 2120, "bbox": [1, 314, 20, 197], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 3614, "bbox": [522, 202, 98, 49], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 6027, "bbox": [526, 0, 186, 116], "iscrowd": 0}, {"id": 1486570, "category_id": 83, "area": 3070, "bbox": [164, 71, 244, 75], "iscrowd": 0}, {"id": 370408, "category_id": 83, "area": 1141, "bbox": [57, 178, 168, 28], "iscrowd": 0}, {"id": 39423, "category_id": 83, "area": 473, "bbox": [301, 172, 76, 18], "iscrowd": 0}, {"id": 1882879, "category_id": 83, "area": 895, "bbox": [0, 112, 102, 28], "iscrowd": 0}, {"id": 52211, "category_id": 83, "area": 1189, "bbox": [2, 201, 225, 28], "iscrowd": 0}, {"id": 1550312, "category_id": 83, "area": 206, "bbox": [77, 98, 27, 10], "iscrowd": 0}, {"id": 37119, "category_id": 83, "area": 83, "bbox": [359, 162, 18, 6], "iscrowd": 0}, {"id": 182780, "category_id": 83, "area": 202, "bbox": [538, 108, 25, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00001011", "file_name": "ADE_val_00001011.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 148471, "bbox": [2, 2, 679, 430], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 47659, "bbox": [1, 364, 680, 148], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 37690, "bbox": [2, 1, 679, 301], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 403, "bbox": [285, 329, 32, 21], "iscrowd": 0}, {"id": 3149969, "category_id": 13, "area": 2163, "bbox": [621, 379, 50, 67], "iscrowd": 0}, {"id": 3473566, "category_id": 13, "area": 531, "bbox": [235, 323, 32, 27], "iscrowd": 0}, {"id": 3342494, "category_id": 13, "area": 2602, "bbox": [502, 322, 37, 114], "iscrowd": 0}, {"id": 2037374, "category_id": 13, "area": 2290, "bbox": [537, 320, 47, 122], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3256, "bbox": [545, 407, 76, 94], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 12762, "bbox": [381, 226, 120, 286], "iscrowd": 0}, {"id": 2162943, "category_id": 43, "area": 5801, "bbox": [138, 256, 80, 194], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 152, "bbox": [625, 319, 16, 11], "iscrowd": 0}, {"id": 10032383, "category_id": 44, "area": 206, "bbox": [582, 323, 23, 9], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 12255, "bbox": [135, 345, 197, 81], "iscrowd": 0}, {"id": 16711930, "category_id": 46, "area": 11839, "bbox": [382, 349, 237, 87], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 495, "bbox": [623, 220, 59, 15], "iscrowd": 0}, {"id": 1424127, "category_id": 83, "area": 166, "bbox": [523, 256, 49, 6], "iscrowd": 0}, {"id": 1751015, "category_id": 83, "area": 208, "bbox": [343, 261, 42, 6], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 3838, "bbox": [36, 136, 82, 62], "iscrowd": 0}]}, {"image_id": "ADE_val_00001012", "file_name": "ADE_val_00001012.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 124212, "bbox": [2, 1, 547, 489], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 19441, "bbox": [2, 449, 521, 100], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 8719, "bbox": [0, 1, 90, 103], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 13248, "bbox": [2, 100, 63, 221], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 26250, "bbox": [284, 396, 265, 153], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3653, "bbox": [398, 331, 88, 68], "iscrowd": 0}, {"id": 346596, "category_id": 20, "area": 7575, "bbox": [215, 400, 90, 149], "iscrowd": 0}, {"id": 15569, "category_id": 20, "area": 10727, "bbox": [69, 292, 142, 244], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 659, "bbox": [375, 213, 27, 38], "iscrowd": 0}, {"id": 5249023, "category_id": 23, "area": 499, "bbox": [202, 182, 26, 38], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 5318, "bbox": [144, 131, 276, 22], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 27813, "bbox": [36, 305, 387, 222], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 400, "bbox": [387, 267, 24, 28], "iscrowd": 0}, {"id": 65522, "category_id": 37, "area": 372, "bbox": [183, 247, 23, 61], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3512, "bbox": [292, 459, 69, 90], "iscrowd": 0}, {"id": 44287, "category_id": 40, "area": 849, "bbox": [408, 371, 56, 24], "iscrowd": 0}, {"id": 57599, "category_id": 40, "area": 1807, "bbox": [102, 321, 43, 92], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1667, "bbox": [154, 107, 73, 26], "iscrowd": 0}, {"id": 1244935, "category_id": 42, "area": 1503, "bbox": [159, 82, 71, 25], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 419, "bbox": [356, 299, 33, 23], "iscrowd": 0}, {"id": 657407, "category_id": 67, "area": 2988, "bbox": [456, 307, 90, 56], "iscrowd": 0}, {"id": 1769727, "category_id": 67, "area": 831, "bbox": [174, 28, 38, 33], "iscrowd": 0}, {"id": 1316607, "category_id": 67, "area": 391, "bbox": [45, 260, 27, 22], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1755, "bbox": [291, 66, 28, 66], "iscrowd": 0}, {"id": 1025023, "category_id": 68, "area": 1264, "bbox": [225, 86, 33, 44], "iscrowd": 0}, {"id": 35560, "category_id": 68, "area": 570, "bbox": [244, 118, 46, 15], "iscrowd": 0}, {"id": 39679, "category_id": 68, "area": 421, "bbox": [263, 327, 45, 14], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 60, "bbox": [56, 280, 10, 36], "iscrowd": 0}, {"id": 13696792, "category_id": 136, "area": 122, "bbox": [363, 316, 19, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001013", "file_name": "ADE_val_00001013.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 229299, "bbox": [1, 1, 682, 511], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 1501, "bbox": [341, 1, 44, 69], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 96362, "bbox": [1, 226, 569, 286], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 530, "bbox": [302, 51, 28, 122], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 485, "bbox": [299, 202, 16, 61], "iscrowd": 0}, {"id": 3212716, "category_id": 13, "area": 157, "bbox": [357, 204, 8, 33], "iscrowd": 0}, {"id": 5963921, "category_id": 13, "area": 241, "bbox": [372, 208, 15, 34], "iscrowd": 0}, {"id": 2694054, "category_id": 13, "area": 2912, "bbox": [393, 206, 44, 118], "iscrowd": 0}, {"id": 3413144, "category_id": 13, "area": 132, "bbox": [329, 207, 7, 32], "iscrowd": 0}, {"id": 2949252, "category_id": 13, "area": 123, "bbox": [324, 205, 17, 33], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 403, "bbox": [423, 60, 23, 34], "iscrowd": 0}, {"id": 16725248, "category_id": 88, "area": 916, "bbox": [259, 14, 56, 56], "iscrowd": 0}, {"id": 16728079, "category_id": 88, "area": 305, "bbox": [364, 107, 32, 29], "iscrowd": 0}, {"id": 16734469, "category_id": 88, "area": 129, "bbox": [324, 140, 20, 19], "iscrowd": 0}, {"id": 16592640, "category_id": 88, "area": 29, "bbox": [380, 164, 8, 9], "iscrowd": 0}, {"id": 14763269, "category_id": 88, "area": 27, "bbox": [365, 174, 9, 9], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1376, "bbox": [475, 326, 30, 55], "iscrowd": 0}, {"id": 16121921, "category_id": 94, "area": 868, "bbox": [460, 309, 26, 47], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 3288, "bbox": [87, 31, 74, 84], "iscrowd": 0}, {"id": 587386, "category_id": 124, "area": 1471, "bbox": [414, 104, 32, 51], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 25, "bbox": [300, 150, 5, 6], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 3458, "bbox": [460, 256, 59, 96], "iscrowd": 0}]}, {"image_id": "ADE_val_00001014", "file_name": "ADE_val_00001014.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 23615, "bbox": [2, 0, 256, 362], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 20762, "bbox": [9, 1, 189, 246], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 17452, "bbox": [0, 0, 193, 280], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 44100, "bbox": [0, 275, 257, 227], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 16742, "bbox": [0, 223, 259, 208], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 181, "bbox": [78, 94, 33, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00001015", "file_name": "ADE_val_00001015.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 237290, "bbox": [0, 0, 510, 681], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 56409, "bbox": [163, 1, 229, 390], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 49542, "bbox": [132, 464, 378, 217], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 159, "bbox": [331, 471, 12, 26], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 474, "bbox": [184, 519, 28, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00001016", "file_name": "ADE_val_00001016.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 130530, "bbox": [0, 0, 396, 589], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 15706, "bbox": [161, 1, 172, 153], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6285, "bbox": [160, 7, 107, 133], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 75614, "bbox": [0, 305, 361, 284], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 988, "bbox": [55, 332, 34, 66], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 721, "bbox": [51, 396, 32, 29], "iscrowd": 0}, {"id": 15600895, "category_id": 126, "area": 397, "bbox": [57, 334, 24, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00001017", "file_name": "ADE_val_00001017.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 30071, "bbox": [172, 117, 511, 184], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 4425, "bbox": [102, 10, 505, 43], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 1985, "bbox": [0, 0, 117, 47], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 33667, "bbox": [11, 0, 666, 125], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 57663, "bbox": [210, 38, 473, 314], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 11853, "bbox": [236, 120, 447, 108], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 5113, "bbox": [375, 59, 136, 70], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 263, "bbox": [554, 84, 85, 242], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 2472, "bbox": [288, 62, 382, 69], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1621, "bbox": [398, 372, 47, 63], "iscrowd": 0}, {"id": 3014831, "category_id": 13, "area": 2407, "bbox": [462, 333, 48, 92], "iscrowd": 0}, {"id": 5380773, "category_id": 13, "area": 758, "bbox": [294, 314, 24, 72], "iscrowd": 0}, {"id": 5841314, "category_id": 13, "area": 640, "bbox": [271, 276, 22, 55], "iscrowd": 0}, {"id": 2622096, "category_id": 13, "area": 378, "bbox": [299, 229, 18, 47], "iscrowd": 0}, {"id": 2228371, "category_id": 13, "area": 326, "bbox": [293, 186, 21, 39], "iscrowd": 0}, {"id": 3080314, "category_id": 13, "area": 251, "bbox": [245, 218, 17, 23], "iscrowd": 0}, {"id": 5505183, "category_id": 13, "area": 201, "bbox": [257, 212, 15, 25], "iscrowd": 0}, {"id": 5383091, "category_id": 13, "area": 13, "bbox": [260, 65, 4, 6], "iscrowd": 0}, {"id": 4522109, "category_id": 13, "area": 10, "bbox": [277, 66, 4, 5], "iscrowd": 0}, {"id": 4456590, "category_id": 13, "area": 8, "bbox": [264, 66, 2, 5], "iscrowd": 0}, {"id": 4522156, "category_id": 13, "area": 8, "bbox": [266, 66, 2, 5], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 274, "bbox": [610, 29, 49, 7], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1645, "bbox": [359, 43, 302, 33], "iscrowd": 0}, {"id": 2346751, "category_id": 33, "area": 595, "bbox": [348, 36, 258, 23], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 282, "bbox": [210, 71, 57, 12], "iscrowd": 0}, {"id": 20991, "category_id": 39, "area": 1032, "bbox": [511, 63, 159, 31], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 87, "bbox": [402, 119, 7, 15], "iscrowd": 0}, {"id": 3019007, "category_id": 43, "area": 990, "bbox": [616, 75, 21, 88], "iscrowd": 0}, {"id": 2890239, "category_id": 43, "area": 701, "bbox": [573, 74, 18, 81], "iscrowd": 0}, {"id": 4260087, "category_id": 43, "area": 630, "bbox": [494, 75, 16, 72], "iscrowd": 0}, {"id": 3478497, "category_id": 43, "area": 581, "bbox": [532, 88, 15, 63], "iscrowd": 0}, {"id": 1446392, "category_id": 43, "area": 550, "bbox": [458, 73, 16, 70], "iscrowd": 0}, {"id": 2037484, "category_id": 43, "area": 194, "bbox": [431, 115, 8, 26], "iscrowd": 0}, {"id": 2955497, "category_id": 43, "area": 63, "bbox": [348, 111, 6, 20], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 315, "bbox": [428, 394, 15, 38], "iscrowd": 0}, {"id": 12108599, "category_id": 116, "area": 154, "bbox": [463, 347, 10, 24], "iscrowd": 0}, {"id": 10736977, "category_id": 116, "area": 257, "bbox": [298, 325, 17, 26], "iscrowd": 0}, {"id": 9028677, "category_id": 116, "area": 45, "bbox": [282, 300, 10, 8], "iscrowd": 0}, {"id": 11187036, "category_id": 116, "area": 49, "bbox": [306, 238, 10, 18], "iscrowd": 0}, {"id": 11650608, "category_id": 116, "area": 13, "bbox": [293, 201, 4, 4], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 296, "bbox": [186, 327, 25, 15], "iscrowd": 0}, {"id": 16711929, "category_id": 126, "area": 237, "bbox": [141, 303, 24, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00001018", "file_name": "ADE_val_00001018.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14050, "bbox": [0, 0, 346, 206], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17881, "bbox": [0, 140, 346, 120], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9005, "bbox": [50, 0, 296, 48], "iscrowd": 0}, {"id": 23807, "category_id": 79, "area": 15424, "bbox": [208, 35, 128, 221], "iscrowd": 0}, {"id": 1466085, "category_id": 79, "area": 2739, "bbox": [2, 164, 42, 94], "iscrowd": 0}, {"id": 608511, "category_id": 79, "area": 11267, "bbox": [2, 51, 85, 169], "iscrowd": 0}, {"id": 25855, "category_id": 79, "area": 4554, "bbox": [80, 50, 38, 155], "iscrowd": 0}, {"id": 26105, "category_id": 79, "area": 6188, "bbox": [119, 59, 61, 113], "iscrowd": 0}, {"id": 742116, "category_id": 79, "area": 5916, "bbox": [180, 55, 61, 160], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 215, "bbox": [202, 30, 35, 10], "iscrowd": 0}, {"id": 47601, "category_id": 83, "area": 391, "bbox": [132, 0, 52, 11], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 615, "bbox": [35, 1, 30, 50], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 1119, "bbox": [250, 161, 38, 72], "iscrowd": 0}]}, {"image_id": "ADE_val_00001019", "file_name": "ADE_val_00001019.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 92576, "bbox": [0, 136, 768, 375], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 44343, "bbox": [0, 0, 767, 64], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 103152, "bbox": [0, 180, 767, 306], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 15872, "bbox": [0, 210, 755, 216], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 97410, "bbox": [0, 53, 767, 162], "iscrowd": 0}, {"id": 12105983, "category_id": 85, "area": 11900, "bbox": [91, 43, 110, 187], "iscrowd": 0}, {"id": 15466240, "category_id": 123, "area": 1054, "bbox": [1, 323, 745, 189], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1416, "bbox": [25, 233, 55, 37], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 562, "bbox": [11, 403, 30, 21], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 40, "bbox": [540, 181, 6, 17], "iscrowd": 0}, {"id": 16347164, "category_id": 73, "area": 77, "bbox": [268, 184, 10, 20], "iscrowd": 0}, {"id": 16727835, "category_id": 73, "area": 32, "bbox": [516, 179, 5, 14], "iscrowd": 0}, {"id": 15747855, "category_id": 73, "area": 42, "bbox": [472, 243, 8, 25], "iscrowd": 0}, {"id": 15552797, "category_id": 73, "area": 30, "bbox": [478, 182, 6, 14], "iscrowd": 0}, {"id": 14890503, "category_id": 73, "area": 1215, "bbox": [712, 418, 43, 77], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 48, "bbox": [588, 163, 16, 5], "iscrowd": 0}, {"id": 851904, "category_id": 77, "area": 39, "bbox": [473, 138, 12, 5], "iscrowd": 0}, {"id": 458667, "category_id": 77, "area": 39, "bbox": [749, 151, 11, 6], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 357, "bbox": [370, 432, 52, 21], "iscrowd": 0}, {"id": 2948892, "category_id": 87, "area": 45, "bbox": [443, 443, 15, 4], "iscrowd": 0}, {"id": 4652800, "category_id": 87, "area": 26, "bbox": [433, 444, 12, 3], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 14, "bbox": [715, 188, 7, 3], "iscrowd": 0}, {"id": 16736774, "category_id": 88, "area": 39, "bbox": [293, 173, 4, 31], "iscrowd": 0}, {"id": 16730624, "category_id": 88, "area": 93, "bbox": [514, 264, 10, 34], "iscrowd": 0}, {"id": 16727040, "category_id": 88, "area": 80, "bbox": [429, 261, 12, 35], "iscrowd": 0}, {"id": 14889230, "category_id": 88, "area": 72, "bbox": [352, 258, 9, 45], "iscrowd": 0}, {"id": 14771200, "category_id": 88, "area": 116, "bbox": [248, 254, 9, 52], "iscrowd": 0}, {"id": 16735003, "category_id": 88, "area": 87, "bbox": [232, 264, 7, 37], "iscrowd": 0}, {"id": 15745562, "category_id": 88, "area": 108, "bbox": [616, 253, 9, 50], "iscrowd": 0}, {"id": 15746586, "category_id": 88, "area": 132, "bbox": [274, 255, 12, 42], "iscrowd": 0}, {"id": 15873536, "category_id": 88, "area": 59, "bbox": [90, 233, 6, 25], "iscrowd": 0}, {"id": 15818752, "category_id": 88, "area": 157, "bbox": [119, 367, 19, 44], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 243, "bbox": [130, 444, 22, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001020", "file_name": "ADE_val_00001020.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 18076, "bbox": [0, 0, 256, 92], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2623, "bbox": [0, 84, 233, 86], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 9460, "bbox": [0, 128, 188, 127], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 9435, "bbox": [0, 159, 256, 97], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 47, "bbox": [238, 228, 5, 14], "iscrowd": 0}, {"id": 5772440, "category_id": 13, "area": 78, "bbox": [194, 217, 7, 18], "iscrowd": 0}, {"id": 3997860, "category_id": 13, "area": 52, "bbox": [190, 216, 6, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001021", "file_name": "ADE_val_00001021.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 103421, "bbox": [0, 0, 370, 319], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 872, "bbox": [0, 307, 143, 12], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3478, "bbox": [0, 0, 147, 33], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 1585, "bbox": [73, 180, 39, 51], "iscrowd": 0}]}, {"image_id": "ADE_val_00001022", "file_name": "ADE_val_00001022.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 8128, "bbox": [0, 363, 185, 47], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 123404, "bbox": [0, 114, 682, 295], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 119869, "bbox": [0, 0, 682, 346], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7184, "bbox": [49, 275, 608, 147], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 11127, "bbox": [1, 397, 681, 34], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 60915, "bbox": [0, 378, 682, 133], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 14301, "bbox": [0, 144, 126, 197], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 158, "bbox": [203, 129, 266, 273], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 56, "bbox": [216, 277, 7, 14], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 133, "bbox": [662, 381, 9, 17], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1701, "bbox": [558, 369, 75, 34], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 216, "bbox": [276, 383, 6, 36], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 46, "bbox": [462, 400, 8, 7], "iscrowd": 0}, {"id": 16646654, "category_id": 126, "area": 41, "bbox": [404, 402, 6, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00001023", "file_name": "ADE_val_00001023.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 212, "bbox": [112, 203, 188, 25], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 27865, "bbox": [0, 6, 265, 224], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 8490, "bbox": [0, 0, 300, 128], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 28004, "bbox": [0, 0, 299, 241], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 5098, "bbox": [0, 211, 300, 55], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 4818, "bbox": [0, 219, 300, 57], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 4206, "bbox": [0, 221, 299, 55], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 344, "bbox": [24, 212, 182, 24], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 456, "bbox": [14, 232, 286, 33], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 1086, "bbox": [182, 204, 67, 20], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 543, "bbox": [257, 170, 18, 104], "iscrowd": 0}, {"id": 16725269, "category_id": 88, "area": 291, "bbox": [245, 160, 10, 80], "iscrowd": 0}]}, {"image_id": "ADE_val_00001024", "file_name": "ADE_val_00001024.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 83835, "bbox": [0, 0, 237, 374], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 101281, "bbox": [205, 0, 295, 374], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1369, "bbox": [243, 335, 246, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00001025", "file_name": "ADE_val_00001025.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 209528, "bbox": [1, 0, 681, 438], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 84404, "bbox": [0, 0, 577, 315], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 52066, "bbox": [0, 429, 681, 81], "iscrowd": 0}]}, {"image_id": "ADE_val_00001026", "file_name": "ADE_val_00001026.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 38492, "bbox": [1, 30, 680, 481], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 1007, "bbox": [514, 1, 57, 24], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 8142, "bbox": [570, 1, 111, 147], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6735, "bbox": [553, 100, 130, 109], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 82045, "bbox": [93, 294, 590, 218], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1310, "bbox": [549, 42, 24, 70], "iscrowd": 0}, {"id": 3869324, "category_id": 13, "area": 1205, "bbox": [437, 125, 44, 64], "iscrowd": 0}, {"id": 3670169, "category_id": 13, "area": 507, "bbox": [455, 128, 27, 55], "iscrowd": 0}, {"id": 3408048, "category_id": 13, "area": 981, "bbox": [454, 102, 50, 64], "iscrowd": 0}, {"id": 3866797, "category_id": 13, "area": 717, "bbox": [420, 87, 25, 63], "iscrowd": 0}, {"id": 4330649, "category_id": 13, "area": 1261, "bbox": [351, 199, 44, 71], "iscrowd": 0}, {"id": 4268665, "category_id": 13, "area": 558, "bbox": [327, 210, 23, 38], "iscrowd": 0}, {"id": 4722820, "category_id": 13, "area": 577, "bbox": [352, 232, 18, 48], "iscrowd": 0}, {"id": 3211390, "category_id": 13, "area": 463, "bbox": [304, 295, 27, 30], "iscrowd": 0}, {"id": 5840259, "category_id": 13, "area": 753, "bbox": [215, 127, 32, 62], "iscrowd": 0}, {"id": 3866747, "category_id": 13, "area": 984, "bbox": [230, 121, 34, 55], "iscrowd": 0}, {"id": 3346066, "category_id": 13, "area": 1360, "bbox": [248, 112, 58, 72], "iscrowd": 0}, {"id": 4653222, "category_id": 13, "area": 990, "bbox": [271, 162, 30, 63], "iscrowd": 0}, {"id": 4326052, "category_id": 13, "area": 750, "bbox": [257, 170, 31, 61], "iscrowd": 0}, {"id": 3147931, "category_id": 13, "area": 795, "bbox": [243, 172, 25, 61], "iscrowd": 0}, {"id": 4987300, "category_id": 13, "area": 869, "bbox": [140, 307, 54, 81], "iscrowd": 0}, {"id": 4851885, "category_id": 13, "area": 1005, "bbox": [119, 220, 49, 73], "iscrowd": 0}, {"id": 2228380, "category_id": 13, "area": 2113, "bbox": [84, 247, 51, 93], "iscrowd": 0}, {"id": 3743142, "category_id": 13, "area": 1706, "bbox": [1, 172, 38, 85], "iscrowd": 0}, {"id": 4526246, "category_id": 13, "area": 479, "bbox": [71, 166, 27, 59], "iscrowd": 0}, {"id": 3086999, "category_id": 13, "area": 1115, "bbox": [63, 176, 33, 74], "iscrowd": 0}, {"id": 5439634, "category_id": 13, "area": 538, "bbox": [46, 178, 29, 61], "iscrowd": 0}, {"id": 3999664, "category_id": 13, "area": 220, "bbox": [21, 273, 14, 22], "iscrowd": 0}, {"id": 2629031, "category_id": 13, "area": 1661, "bbox": [84, 150, 45, 73], "iscrowd": 0}, {"id": 5381765, "category_id": 13, "area": 1738, "bbox": [215, 160, 42, 82], "iscrowd": 0}, {"id": 5639041, "category_id": 13, "area": 1695, "bbox": [289, 202, 40, 77], "iscrowd": 0}, {"id": 2298498, "category_id": 13, "area": 1254, "bbox": [332, 235, 30, 73], "iscrowd": 0}, {"id": 2564777, "category_id": 13, "area": 1549, "bbox": [362, 256, 59, 76], "iscrowd": 0}, {"id": 5052286, "category_id": 13, "area": 1745, "bbox": [415, 194, 51, 73], "iscrowd": 0}, {"id": 4587683, "category_id": 13, "area": 1777, "bbox": [449, 183, 46, 82], "iscrowd": 0}, {"id": 4456595, "category_id": 13, "area": 3227, "bbox": [115, 301, 64, 101], "iscrowd": 0}, {"id": 4980908, "category_id": 13, "area": 2160, "bbox": [6, 299, 47, 93], "iscrowd": 0}, {"id": 3408046, "category_id": 13, "area": 1261, "bbox": [36, 275, 41, 69], "iscrowd": 0}, {"id": 4785072, "category_id": 13, "area": 1424, "bbox": [62, 268, 46, 73], "iscrowd": 0}, {"id": 3211431, "category_id": 13, "area": 1617, "bbox": [124, 248, 50, 88], "iscrowd": 0}, {"id": 2690451, "category_id": 13, "area": 2536, "bbox": [22, 195, 62, 85], "iscrowd": 0}, {"id": 5177477, "category_id": 13, "area": 2121, "bbox": [526, 247, 46, 69], "iscrowd": 0}, {"id": 4857748, "category_id": 13, "area": 829, "bbox": [479, 273, 32, 51], "iscrowd": 0}, {"id": 5900922, "category_id": 13, "area": 1383, "bbox": [594, 247, 46, 56], "iscrowd": 0}, {"id": 5311125, "category_id": 13, "area": 1401, "bbox": [394, 87, 43, 73], "iscrowd": 0}, {"id": 5308571, "category_id": 13, "area": 1223, "bbox": [327, 106, 52, 73], "iscrowd": 0}, {"id": 5508990, "category_id": 13, "area": 851, "bbox": [308, 126, 33, 56], "iscrowd": 0}, {"id": 3280508, "category_id": 13, "area": 490, "bbox": [343, 320, 25, 29], "iscrowd": 0}, {"id": 4391067, "category_id": 13, "area": 506, "bbox": [264, 283, 34, 30], "iscrowd": 0}, {"id": 2297750, "category_id": 13, "area": 202, "bbox": [552, 243, 12, 26], "iscrowd": 0}, {"id": 3482283, "category_id": 13, "area": 606, "bbox": [562, 245, 31, 50], "iscrowd": 0}, {"id": 3153580, "category_id": 13, "area": 126, "bbox": [315, 320, 15, 13], "iscrowd": 0}, {"id": 2031780, "category_id": 13, "area": 161, "bbox": [114, 258, 12, 28], "iscrowd": 0}, {"id": 3605152, "category_id": 13, "area": 312, "bbox": [153, 265, 16, 43], "iscrowd": 0}, {"id": 2293880, "category_id": 13, "area": 1802, "bbox": [176, 302, 52, 83], "iscrowd": 0}, {"id": 3145904, "category_id": 13, "area": 627, "bbox": [208, 334, 37, 40], "iscrowd": 0}, {"id": 4849832, "category_id": 13, "area": 134, "bbox": [290, 307, 19, 16], "iscrowd": 0}, {"id": 3670165, "category_id": 13, "area": 1804, "bbox": [364, 105, 43, 77], "iscrowd": 0}, {"id": 2818169, "category_id": 13, "area": 358, "bbox": [330, 117, 19, 29], "iscrowd": 0}, {"id": 5119411, "category_id": 13, "area": 312, "bbox": [476, 110, 15, 37], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 11400, "bbox": [0, 0, 346, 41], "iscrowd": 0}, {"id": 731110, "category_id": 39, "area": 2640, "bbox": [0, 111, 63, 47], "iscrowd": 0}, {"id": 15359, "category_id": 39, "area": 9068, "bbox": [93, 95, 294, 59], "iscrowd": 0}, {"id": 12287, "category_id": 39, "area": 1320, "bbox": [378, 0, 65, 30], "iscrowd": 0}, {"id": 2053375, "category_id": 39, "area": 6152, "bbox": [515, 83, 168, 167], "iscrowd": 0}, {"id": 16626, "category_id": 39, "area": 3461, "bbox": [0, 5, 120, 108], "iscrowd": 0}, {"id": 19193, "category_id": 39, "area": 3639, "bbox": [279, 3, 138, 98], "iscrowd": 0}, {"id": 2240255, "category_id": 39, "area": 1639, "bbox": [248, 14, 93, 88], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 11212, "bbox": [481, 119, 201, 178], "iscrowd": 0}, {"id": 1963003, "category_id": 54, "area": 2600, "bbox": [281, 0, 140, 138], "iscrowd": 0}, {"id": 256767, "category_id": 54, "area": 9254, "bbox": [103, 159, 290, 186], "iscrowd": 0}, {"id": 62971, "category_id": 54, "area": 4817, "bbox": [0, 365, 129, 91], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 352, "bbox": [151, 167, 76, 23], "iscrowd": 0}, {"id": 983005, "category_id": 70, "area": 151, "bbox": [292, 161, 27, 16], "iscrowd": 0}, {"id": 2025910, "category_id": 70, "area": 1030, "bbox": [300, 172, 151, 29], "iscrowd": 0}, {"id": 1507276, "category_id": 70, "area": 263, "bbox": [181, 191, 34, 19], "iscrowd": 0}, {"id": 65495, "category_id": 70, "area": 1238, "bbox": [311, 185, 226, 29], "iscrowd": 0}, {"id": 61908, "category_id": 70, "area": 355, "bbox": [247, 230, 42, 23], "iscrowd": 0}, {"id": 1761739, "category_id": 70, "area": 564, "bbox": [484, 204, 78, 21], "iscrowd": 0}, {"id": 60894, "category_id": 70, "area": 332, "bbox": [381, 218, 38, 22], "iscrowd": 0}, {"id": 1958596, "category_id": 70, "area": 679, "bbox": [493, 225, 95, 27], "iscrowd": 0}, {"id": 65497, "category_id": 70, "area": 367, "bbox": [391, 242, 41, 20], "iscrowd": 0}, {"id": 1703852, "category_id": 70, "area": 854, "bbox": [386, 255, 152, 29], "iscrowd": 0}, {"id": 65501, "category_id": 70, "area": 715, "bbox": [393, 287, 91, 28], "iscrowd": 0}, {"id": 1179578, "category_id": 70, "area": 182, "bbox": [496, 282, 31, 9], "iscrowd": 0}, {"id": 1568934, "category_id": 70, "area": 769, "bbox": [386, 315, 112, 26], "iscrowd": 0}, {"id": 65473, "category_id": 70, "area": 348, "bbox": [573, 246, 40, 21], "iscrowd": 0}, {"id": 64427, "category_id": 70, "area": 181, "bbox": [280, 256, 26, 20], "iscrowd": 0}, {"id": 1245125, "category_id": 70, "area": 185, "bbox": [316, 279, 23, 19], "iscrowd": 0}, {"id": 2031563, "category_id": 70, "area": 811, "bbox": [62, 374, 72, 34], "iscrowd": 0}, {"id": 60638, "category_id": 70, "area": 455, "bbox": [52, 340, 62, 31], "iscrowd": 0}, {"id": 59079, "category_id": 70, "area": 452, "bbox": [170, 290, 83, 16], "iscrowd": 0}, {"id": 458718, "category_id": 70, "area": 221, "bbox": [153, 242, 29, 20], "iscrowd": 0}, {"id": 61662, "category_id": 70, "area": 256, "bbox": [0, 256, 45, 25], "iscrowd": 0}, {"id": 63415, "category_id": 70, "area": 221, "bbox": [9, 356, 20, 22], "iscrowd": 0}, {"id": 65471, "category_id": 70, "area": 289, "bbox": [168, 266, 48, 23], "iscrowd": 0}, {"id": 65479, "category_id": 70, "area": 194, "bbox": [96, 221, 39, 8], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 79, "bbox": [308, 269, 6, 17], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 658, "bbox": [389, 54, 36, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00001027", "file_name": "ADE_val_00001027.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 51434, "bbox": [47, 40, 406, 181], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 109647, "bbox": [13, 308, 428, 374], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 66460, "bbox": [42, 184, 400, 221], "iscrowd": 0}]}, {"image_id": "ADE_val_00001028", "file_name": "ADE_val_00001028.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 24519, "bbox": [0, 69, 323, 409], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6525, "bbox": [37, 388, 110, 90], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3057, "bbox": [0, 0, 80, 70], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 5074, "bbox": [2, 326, 41, 153], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 2684, "bbox": [13, 310, 168, 71], "iscrowd": 0}, {"id": 3473663, "category_id": 25, "area": 12273, "bbox": [139, 369, 351, 110], "iscrowd": 0}]}, {"image_id": "ADE_val_00001029", "file_name": "ADE_val_00001029.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18354, "bbox": [0, 0, 572, 188], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2752, "bbox": [406, 357, 166, 57], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 16226, "bbox": [34, 0, 538, 55], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6418, "bbox": [2, 317, 117, 97], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 16260, "bbox": [154, 134, 106, 232], "iscrowd": 0}, {"id": 2563466, "category_id": 13, "area": 15584, "bbox": [50, 160, 120, 226], "iscrowd": 0}, {"id": 4202665, "category_id": 13, "area": 6477, "bbox": [292, 147, 128, 150], "iscrowd": 0}, {"id": 5505162, "category_id": 13, "area": 17706, "bbox": [480, 127, 84, 287], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 13576, "bbox": [258, 76, 93, 197], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5706, "bbox": [193, 332, 246, 82], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 17852, "bbox": [2, 71, 263, 278], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1038, "bbox": [227, 62, 31, 39], "iscrowd": 0}, {"id": 65298, "category_id": 42, "area": 926, "bbox": [200, 56, 29, 40], "iscrowd": 0}, {"id": 1638144, "category_id": 42, "area": 1735, "bbox": [154, 48, 47, 44], "iscrowd": 0}, {"id": 850457, "category_id": 42, "area": 3294, "bbox": [36, 18, 61, 62], "iscrowd": 0}, {"id": 2948352, "category_id": 42, "area": 2278, "bbox": [0, 5, 39, 69], "iscrowd": 0}, {"id": 2031360, "category_id": 42, "area": 4094, "bbox": [266, 265, 100, 70], "iscrowd": 0}, {"id": 1572608, "category_id": 42, "area": 1816, "bbox": [350, 125, 63, 34], "iscrowd": 0}, {"id": 3272960, "category_id": 42, "area": 1275, "bbox": [542, 142, 30, 46], "iscrowd": 0}, {"id": 59136, "category_id": 42, "area": 1732, "bbox": [100, 112, 40, 49], "iscrowd": 0}, {"id": 3205138, "category_id": 42, "area": 2697, "bbox": [49, 108, 56, 55], "iscrowd": 0}, {"id": 2487813, "category_id": 42, "area": 2633, "bbox": [2, 106, 50, 57], "iscrowd": 0}, {"id": 851722, "category_id": 42, "area": 2902, "bbox": [2, 175, 53, 64], "iscrowd": 0}, {"id": 2091269, "category_id": 42, "area": 755, "bbox": [239, 260, 24, 40], "iscrowd": 0}, {"id": 917248, "category_id": 42, "area": 3532, "bbox": [0, 245, 55, 77], "iscrowd": 0}, {"id": 587520, "category_id": 42, "area": 2391, "bbox": [143, 114, 55, 51], "iscrowd": 0}, {"id": 65280, "category_id": 42, "area": 590, "bbox": [225, 169, 28, 37], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 14128, "bbox": [441, 0, 46, 414], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 968, "bbox": [251, 334, 57, 26], "iscrowd": 0}, {"id": 1480959, "category_id": 68, "area": 1455, "bbox": [230, 350, 73, 32], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2726, "bbox": [144, 2, 157, 33], "iscrowd": 0}, {"id": 50431, "category_id": 83, "area": 1502, "bbox": [488, 0, 84, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00001030", "file_name": "ADE_val_00001030.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 53849, "bbox": [0, 0, 801, 249], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5695, "bbox": [0, 0, 158, 60], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 136904, "bbox": [183, 7, 510, 503], "iscrowd": 0}]}, {"image_id": "ADE_val_00001031", "file_name": "ADE_val_00001031.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 7132, "bbox": [0, 28, 683, 180], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 112296, "bbox": [1, 0, 682, 195], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 169392, "bbox": [0, 204, 683, 308], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 261, "bbox": [278, 243, 12, 37], "iscrowd": 0}, {"id": 2621617, "category_id": 13, "area": 313, "bbox": [182, 252, 16, 37], "iscrowd": 0}, {"id": 4522675, "category_id": 13, "area": 320, "bbox": [247, 249, 14, 40], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 238, "bbox": [533, 242, 26, 17], "iscrowd": 0}, {"id": 14122496, "category_id": 21, "area": 417, "bbox": [657, 258, 26, 25], "iscrowd": 0}, {"id": 13268480, "category_id": 21, "area": 3, "bbox": [58, 202, 3, 1], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 3217, "bbox": [381, 386, 83, 67], "iscrowd": 0}, {"id": 50429, "category_id": 33, "area": 4245, "bbox": [538, 392, 87, 71], "iscrowd": 0}, {"id": 2010598, "category_id": 33, "area": 2594, "bbox": [394, 361, 97, 47], "iscrowd": 0}, {"id": 44031, "category_id": 33, "area": 647, "bbox": [516, 391, 53, 56], "iscrowd": 0}, {"id": 42722, "category_id": 33, "area": 370, "bbox": [524, 372, 44, 28], "iscrowd": 0}, {"id": 42235, "category_id": 33, "area": 634, "bbox": [434, 382, 40, 58], "iscrowd": 0}, {"id": 54006, "category_id": 33, "area": 666, "bbox": [446, 366, 47, 45], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 431, "bbox": [593, 192, 28, 18], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 1191, "bbox": [619, 231, 56, 36], "iscrowd": 0}, {"id": 327905, "category_id": 84, "area": 20, "bbox": [74, 214, 6, 4], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 7134, "bbox": [474, 42, 54, 382], "iscrowd": 0}, {"id": 5439232, "category_id": 91, "area": 36, "bbox": [248, 199, 14, 7], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 2760, "bbox": [558, 240, 97, 41], "iscrowd": 0}, {"id": 1900459, "category_id": 103, "area": 8, "bbox": [53, 201, 4, 2], "iscrowd": 0}]}, {"image_id": "ADE_val_00001032", "file_name": "ADE_val_00001032.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 166479, "bbox": [0, 0, 510, 547], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 77744, "bbox": [0, 386, 512, 297], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9337, "bbox": [81, 0, 258, 65], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 47879, "bbox": [184, 376, 260, 304], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 7232, "bbox": [159, 262, 75, 110], "iscrowd": 0}, {"id": 13497290, "category_id": 9, "area": 3410, "bbox": [328, 1, 49, 109], "iscrowd": 0}, {"id": 16777163, "category_id": 9, "area": 2514, "bbox": [34, 1, 50, 99], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2218, "bbox": [250, 296, 28, 103], "iscrowd": 0}, {"id": 16711887, "category_id": 11, "area": 2221, "bbox": [114, 294, 25, 106], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1754, "bbox": [52, 276, 14, 161], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 156, "bbox": [209, 356, 18, 20], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1098, "bbox": [383, 285, 15, 79], "iscrowd": 0}, {"id": 4791536, "category_id": 23, "area": 1322, "bbox": [405, 295, 28, 50], "iscrowd": 0}, {"id": 2494463, "category_id": 23, "area": 2462, "bbox": [441, 267, 26, 105], "iscrowd": 0}, {"id": 4723945, "category_id": 23, "area": 1055, "bbox": [19, 280, 13, 84], "iscrowd": 0}, {"id": 4464895, "category_id": 23, "area": 999, "bbox": [1, 273, 11, 92], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 691, "bbox": [236, 363, 26, 37], "iscrowd": 0}, {"id": 15925017, "category_id": 31, "area": 1218, "bbox": [131, 362, 49, 34], "iscrowd": 0}, {"id": 13492736, "category_id": 31, "area": 188, "bbox": [144, 359, 39, 22], "iscrowd": 0}, {"id": 12648217, "category_id": 31, "area": 223, "bbox": [226, 360, 25, 12], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 176, "bbox": [178, 414, 7, 46], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 8293, "bbox": [161, 4, 122, 95], "iscrowd": 0}, {"id": 15795214, "category_id": 86, "area": 983, "bbox": [176, 212, 46, 32], "iscrowd": 0}, {"id": 16724224, "category_id": 86, "area": 3971, "bbox": [167, 6, 84, 168], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 2106, "bbox": [234, 414, 55, 53], "iscrowd": 0}, {"id": 60159, "category_id": 133, "area": 482, "bbox": [212, 373, 24, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00001033", "file_name": "ADE_val_00001033.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 228085, "bbox": [0, 0, 983, 465], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 100597, "bbox": [0, 386, 984, 126], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 88213, "bbox": [2, 0, 981, 113], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 10728, "bbox": [509, 226, 128, 200], "iscrowd": 0}, {"id": 4784267, "category_id": 13, "area": 7145, "bbox": [447, 209, 79, 135], "iscrowd": 0}, {"id": 2040717, "category_id": 13, "area": 6664, "bbox": [176, 234, 103, 175], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 7668, "bbox": [293, 159, 97, 80], "iscrowd": 0}, {"id": 4391935, "category_id": 23, "area": 5212, "bbox": [61, 111, 51, 116], "iscrowd": 0}, {"id": 1581035, "category_id": 23, "area": 7295, "bbox": [573, 159, 96, 79], "iscrowd": 0}, {"id": 1906402, "category_id": 23, "area": 3446, "bbox": [802, 139, 41, 94], "iscrowd": 0}, {"id": 2759167, "category_id": 23, "area": 6199, "bbox": [443, 150, 77, 98], "iscrowd": 0}, {"id": 4327671, "category_id": 23, "area": 3101, "bbox": [124, 94, 38, 100], "iscrowd": 0}, {"id": 2228479, "category_id": 23, "area": 3161, "bbox": [124, 188, 37, 93], "iscrowd": 0}, {"id": 4531447, "category_id": 23, "area": 5376, "bbox": [860, 116, 55, 112], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 10676, "bbox": [406, 340, 164, 84], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 117, "bbox": [472, 37, 23, 6], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 646, "bbox": [210, 330, 71, 81], "iscrowd": 0}]}, {"image_id": "ADE_val_00001034", "file_name": "ADE_val_00001034.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 44778, "bbox": [0, 0, 300, 225], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5135, "bbox": [149, 177, 151, 48], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1105, "bbox": [178, 43, 104, 22], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2079, "bbox": [52, 125, 54, 40], "iscrowd": 0}, {"id": 1835263, "category_id": 23, "area": 2479, "bbox": [111, 88, 66, 39], "iscrowd": 0}, {"id": 1443327, "category_id": 23, "area": 2779, "bbox": [55, 61, 48, 59], "iscrowd": 0}, {"id": 4656895, "category_id": 23, "area": 2154, "bbox": [1, 52, 51, 43], "iscrowd": 0}, {"id": 4522233, "category_id": 23, "area": 974, "bbox": [192, 93, 27, 37], "iscrowd": 0}, {"id": 4063487, "category_id": 23, "area": 447, "bbox": [224, 80, 18, 25], "iscrowd": 0}, {"id": 2427375, "category_id": 23, "area": 1627, "bbox": [2, 100, 45, 37], "iscrowd": 0}, {"id": 3021309, "category_id": 23, "area": 1284, "bbox": [3, 143, 40, 33], "iscrowd": 0}, {"id": 4393465, "category_id": 23, "area": 487, "bbox": [224, 109, 18, 28], "iscrowd": 0}, {"id": 2427898, "category_id": 23, "area": 343, "bbox": [245, 102, 18, 20], "iscrowd": 0}, {"id": 3679487, "category_id": 23, "area": 280, "bbox": [178, 73, 9, 35], "iscrowd": 0}, {"id": 4325631, "category_id": 23, "area": 238, "bbox": [179, 109, 7, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001035", "file_name": "ADE_val_00001035.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 115240, "bbox": [0, 93, 682, 268], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 117461, "bbox": [0, 312, 682, 200], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 72841, "bbox": [1, 0, 682, 135], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 15484, "bbox": [18, 182, 118, 141], "iscrowd": 0}, {"id": 1838079, "category_id": 23, "area": 8115, "bbox": [290, 189, 77, 112], "iscrowd": 0}, {"id": 3021817, "category_id": 23, "area": 10387, "bbox": [578, 175, 87, 127], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 71, "bbox": [434, 119, 15, 6], "iscrowd": 0}, {"id": 432613, "category_id": 83, "area": 62, "bbox": [479, 118, 14, 6], "iscrowd": 0}, {"id": 38115, "category_id": 83, "area": 60, "bbox": [526, 108, 14, 5], "iscrowd": 0}, {"id": 693985, "category_id": 83, "area": 76, "bbox": [580, 96, 15, 6], "iscrowd": 0}, {"id": 1027575, "category_id": 83, "area": 91, "bbox": [644, 81, 17, 7], "iscrowd": 0}, {"id": 1946101, "category_id": 83, "area": 77, "bbox": [388, 114, 14, 7], "iscrowd": 0}, {"id": 48110, "category_id": 83, "area": 57, "bbox": [335, 110, 14, 5], "iscrowd": 0}, {"id": 38398, "category_id": 83, "area": 66, "bbox": [275, 103, 14, 6], "iscrowd": 0}, {"id": 239336, "category_id": 83, "area": 79, "bbox": [208, 95, 17, 7], "iscrowd": 0}, {"id": 1742587, "category_id": 83, "area": 90, "bbox": [134, 87, 17, 7], "iscrowd": 0}, {"id": 44014, "category_id": 83, "area": 92, "bbox": [50, 79, 19, 7], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 4180, "bbox": [298, 344, 147, 84], "iscrowd": 0}]}, {"image_id": "ADE_val_00001036", "file_name": "ADE_val_00001036.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 80150, "bbox": [2, 1, 596, 418], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 44963, "bbox": [2, 311, 597, 139], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 10583, "bbox": [9, 1, 561, 38], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 15016, "bbox": [10, 51, 106, 153], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 12303, "bbox": [12, 207, 114, 118], "iscrowd": 0}, {"id": 16516335, "category_id": 11, "area": 3685, "bbox": [0, 349, 68, 101], "iscrowd": 0}, {"id": 16711901, "category_id": 11, "area": 10544, "bbox": [143, 184, 111, 136], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6740, "bbox": [270, 224, 265, 75], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 5637, "bbox": [194, 219, 102, 168], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 238, "bbox": [206, 100, 17, 16], "iscrowd": 0}, {"id": 3737855, "category_id": 23, "area": 224, "bbox": [151, 76, 14, 21], "iscrowd": 0}, {"id": 3867107, "category_id": 23, "area": 174, "bbox": [204, 81, 14, 15], "iscrowd": 0}, {"id": 4264445, "category_id": 23, "area": 176, "bbox": [184, 81, 16, 19], "iscrowd": 0}, {"id": 4000762, "category_id": 23, "area": 124, "bbox": [194, 88, 13, 17], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 2122, "bbox": [325, 48, 242, 17], "iscrowd": 0}, {"id": 5510387, "category_id": 25, "area": 1522, "bbox": [344, 105, 220, 17], "iscrowd": 0}, {"id": 3539199, "category_id": 25, "area": 13726, "bbox": [250, 78, 96, 241], "iscrowd": 0}, {"id": 5505279, "category_id": 25, "area": 7636, "bbox": [321, 142, 88, 100], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1197, "bbox": [468, 148, 88, 50], "iscrowd": 0}, {"id": 60659, "category_id": 37, "area": 1248, "bbox": [258, 129, 37, 196], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1274, "bbox": [409, 367, 48, 42], "iscrowd": 0}, {"id": 2621185, "category_id": 42, "area": 1394, "bbox": [451, 23, 62, 26], "iscrowd": 0}, {"id": 3211016, "category_id": 42, "area": 4342, "bbox": [444, 190, 67, 74], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 14382, "bbox": [453, 275, 114, 170], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 9538, "bbox": [259, 249, 122, 196], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 204, "bbox": [227, 1, 25, 11], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 138, "bbox": [270, 57, 11, 21], "iscrowd": 0}, {"id": 65306, "category_id": 99, "area": 265, "bbox": [483, 72, 13, 28], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 671, "bbox": [358, 129, 44, 18], "iscrowd": 0}, {"id": 130907, "category_id": 113, "area": 553, "bbox": [380, 79, 45, 22], "iscrowd": 0}, {"id": 57690, "category_id": 113, "area": 180, "bbox": [324, 127, 14, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001037", "file_name": "ADE_val_00001037.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 61917, "bbox": [2, 1, 653, 273], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 40944, "bbox": [2, 210, 654, 283], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 4194, "bbox": [560, 213, 90, 63], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12059, "bbox": [73, 60, 136, 117], "iscrowd": 0}, {"id": 13296639, "category_id": 9, "area": 8813, "bbox": [231, 61, 111, 101], "iscrowd": 0}, {"id": 14212066, "category_id": 9, "area": 4020, "bbox": [481, 63, 74, 83], "iscrowd": 0}, {"id": 13945335, "category_id": 9, "area": 2954, "bbox": [603, 70, 50, 69], "iscrowd": 0}, {"id": 15792844, "category_id": 9, "area": 1593, "bbox": [488, 1, 62, 28], "iscrowd": 0}, {"id": 16515068, "category_id": 9, "area": 1371, "bbox": [611, 1, 44, 34], "iscrowd": 0}, {"id": 15722961, "category_id": 9, "area": 2077, "bbox": [227, 0, 110, 21], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 11653, "bbox": [289, 128, 125, 203], "iscrowd": 0}, {"id": 3806594, "category_id": 13, "area": 8227, "bbox": [97, 111, 115, 206], "iscrowd": 0}, {"id": 3147934, "category_id": 13, "area": 6657, "bbox": [388, 91, 73, 222], "iscrowd": 0}, {"id": 2295419, "category_id": 13, "area": 3342, "bbox": [457, 110, 96, 164], "iscrowd": 0}, {"id": 3932317, "category_id": 13, "area": 36752, "bbox": [61, 220, 205, 272], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 22410, "bbox": [212, 324, 336, 169], "iscrowd": 0}, {"id": 5832932, "category_id": 16, "area": 5713, "bbox": [363, 328, 143, 96], "iscrowd": 0}, {"id": 6366463, "category_id": 16, "area": 883, "bbox": [569, 149, 72, 68], "iscrowd": 0}, {"id": 6881532, "category_id": 16, "area": 11243, "bbox": [415, 163, 169, 157], "iscrowd": 0}, {"id": 5374198, "category_id": 16, "area": 5526, "bbox": [175, 192, 182, 138], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4482, "bbox": [12, 367, 57, 126], "iscrowd": 0}, {"id": 1138385, "category_id": 20, "area": 340, "bbox": [553, 169, 22, 21], "iscrowd": 0}, {"id": 13259, "category_id": 20, "area": 992, "bbox": [76, 189, 30, 66], "iscrowd": 0}, {"id": 16317, "category_id": 20, "area": 357, "bbox": [343, 243, 60, 90], "iscrowd": 0}, {"id": 875227, "category_id": 20, "area": 7039, "bbox": [471, 361, 147, 132], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3829, "bbox": [419, 26, 56, 83], "iscrowd": 0}, {"id": 1835263, "category_id": 23, "area": 1245, "bbox": [366, 43, 33, 39], "iscrowd": 0}, {"id": 4194559, "category_id": 23, "area": 1479, "bbox": [568, 53, 40, 42], "iscrowd": 0}, {"id": 3611375, "category_id": 23, "area": 2157, "bbox": [2, 15, 52, 45], "iscrowd": 0}, {"id": 4522239, "category_id": 23, "area": 1240, "bbox": [576, 1, 34, 44], "iscrowd": 0}, {"id": 3089407, "category_id": 23, "area": 2645, "bbox": [615, 355, 41, 95], "iscrowd": 0}, {"id": 5184767, "category_id": 23, "area": 675, "bbox": [436, 130, 26, 37], "iscrowd": 0}, {"id": 1509631, "category_id": 23, "area": 963, "bbox": [215, 110, 34, 37], "iscrowd": 0}, {"id": 4198393, "category_id": 23, "area": 1737, "bbox": [200, 147, 43, 53], "iscrowd": 0}, {"id": 4856827, "category_id": 23, "area": 3007, "bbox": [271, 147, 44, 102], "iscrowd": 0}, {"id": 1966335, "category_id": 23, "area": 1065, "bbox": [485, 115, 34, 37], "iscrowd": 0}, {"id": 4463081, "category_id": 23, "area": 4981, "bbox": [232, 228, 68, 142], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 6866, "bbox": [2, 248, 54, 223], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 8870, "bbox": [2, 171, 90, 174], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 489, "bbox": [17, 86, 30, 93], "iscrowd": 0}, {"id": 2487254, "category_id": 37, "area": 266, "bbox": [576, 116, 14, 37], "iscrowd": 0}, {"id": 1829071, "category_id": 37, "area": 346, "bbox": [293, 110, 49, 50], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 2036, "bbox": [618, 168, 39, 121], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 266, "bbox": [595, 119, 13, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001038", "file_name": "ADE_val_00001038.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 89196, "bbox": [0, 0, 399, 300], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2874, "bbox": [2, 260, 153, 40], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1835, "bbox": [0, 0, 129, 23], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 14863, "bbox": [101, 69, 140, 231], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1495, "bbox": [25, 212, 71, 88], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 512, "bbox": [0, 259, 27, 41], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 4261, "bbox": [20, 165, 59, 106], "iscrowd": 0}]}, {"image_id": "ADE_val_00001039", "file_name": "ADE_val_00001039.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 24971, "bbox": [2, 1, 498, 344], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21128, "bbox": [2, 268, 498, 107], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 11961, "bbox": [431, 1, 68, 293], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 9057, "bbox": [2, 74, 87, 135], "iscrowd": 0}, {"id": 1769727, "category_id": 23, "area": 20202, "bbox": [54, 119, 133, 165], "iscrowd": 0}, {"id": 2818303, "category_id": 23, "area": 13044, "bbox": [184, 52, 109, 126], "iscrowd": 0}, {"id": 3670256, "category_id": 23, "area": 4910, "bbox": [293, 64, 81, 68], "iscrowd": 0}, {"id": 3083749, "category_id": 23, "area": 9765, "bbox": [287, 129, 99, 132], "iscrowd": 0}, {"id": 4923634, "category_id": 23, "area": 3820, "bbox": [87, 318, 70, 57], "iscrowd": 0}, {"id": 2431999, "category_id": 23, "area": 12864, "bbox": [365, 66, 113, 129], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 19036, "bbox": [2, 1, 332, 123], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 798, "bbox": [116, 90, 54, 16], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1202, "bbox": [18, 286, 49, 66], "iscrowd": 0}, {"id": 1477108, "category_id": 68, "area": 876, "bbox": [27, 1, 45, 26], "iscrowd": 0}, {"id": 46844, "category_id": 68, "area": 654, "bbox": [60, 7, 52, 22], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1084, "bbox": [111, 8, 57, 21], "iscrowd": 0}, {"id": 63816, "category_id": 113, "area": 1415, "bbox": [199, 2, 50, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00001040", "file_name": "ADE_val_00001040.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 75992, "bbox": [0, 0, 686, 511], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 17722, "bbox": [595, 0, 91, 353], "iscrowd": 0}, {"id": 13294079, "category_id": 9, "area": 57633, "bbox": [0, 0, 271, 232], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 71591, "bbox": [190, 132, 384, 380], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 21462, "bbox": [1, 338, 191, 173], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 887, "bbox": [568, 491, 75, 20], "iscrowd": 0}, {"id": 1125351, "category_id": 20, "area": 10281, "bbox": [123, 403, 147, 109], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 773, "bbox": [115, 370, 68, 17], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 2850, "bbox": [184, 200, 82, 86], "iscrowd": 0}, {"id": 1288191, "category_id": 68, "area": 14245, "bbox": [68, 233, 141, 150], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 4309, "bbox": [568, 0, 44, 167], "iscrowd": 0}]}, {"image_id": "ADE_val_00001041", "file_name": "ADE_val_00001041.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 81355, "bbox": [0, 83, 511, 369], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 110809, "bbox": [0, 390, 511, 291], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 55926, "bbox": [1, 1, 510, 195], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1114, "bbox": [84, 200, 22, 81], "iscrowd": 0}, {"id": 3539190, "category_id": 23, "area": 1034, "bbox": [1, 237, 18, 66], "iscrowd": 0}, {"id": 2823167, "category_id": 23, "area": 525, "bbox": [0, 173, 10, 62], "iscrowd": 0}, {"id": 3212284, "category_id": 23, "area": 2714, "bbox": [482, 180, 29, 96], "iscrowd": 0}, {"id": 1442047, "category_id": 23, "area": 2260, "bbox": [482, 287, 29, 86], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 126, "bbox": [282, 287, 17, 9], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 17470, "bbox": [294, 100, 57, 405], "iscrowd": 0}, {"id": 3408127, "category_id": 43, "area": 32368, "bbox": [370, 45, 61, 553], "iscrowd": 0}, {"id": 1835515, "category_id": 43, "area": 28230, "bbox": [21, 70, 106, 517], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 57, "bbox": [228, 187, 16, 4], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 396, "bbox": [277, 383, 27, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00001042", "file_name": "ADE_val_00001042.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 10281, "bbox": [0, 0, 299, 93], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 18962, "bbox": [0, 22, 299, 191], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 998, "bbox": [241, 19, 16, 82], "iscrowd": 0}, {"id": 3342482, "category_id": 13, "area": 132, "bbox": [104, 24, 12, 24], "iscrowd": 0}, {"id": 5177499, "category_id": 13, "area": 222, "bbox": [96, 27, 16, 24], "iscrowd": 0}, {"id": 5705888, "category_id": 13, "area": 146, "bbox": [81, 32, 16, 14], "iscrowd": 0}, {"id": 3021443, "category_id": 13, "area": 153, "bbox": [122, 21, 18, 17], "iscrowd": 0}, {"id": 5243021, "category_id": 13, "area": 3241, "bbox": [155, 144, 68, 69], "iscrowd": 0}, {"id": 3021182, "category_id": 13, "area": 2811, "bbox": [183, 106, 54, 106], "iscrowd": 0}, {"id": 3739818, "category_id": 13, "area": 1129, "bbox": [198, 69, 41, 80], "iscrowd": 0}, {"id": 5046401, "category_id": 13, "area": 417, "bbox": [215, 69, 26, 62], "iscrowd": 0}, {"id": 4400047, "category_id": 13, "area": 530, "bbox": [211, 51, 28, 54], "iscrowd": 0}, {"id": 4071306, "category_id": 13, "area": 448, "bbox": [226, 43, 19, 54], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 4349, "bbox": [28, 45, 74, 64], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 4904, "bbox": [27, 124, 62, 88], "iscrowd": 0}]}, {"image_id": "ADE_val_00001043", "file_name": "ADE_val_00001043.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 39497, "bbox": [0, 12, 308, 218], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2751, "bbox": [44, 177, 264, 53], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7698, "bbox": [0, 0, 308, 55], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 3010, "bbox": [231, 25, 30, 170], "iscrowd": 0}, {"id": 3604735, "category_id": 43, "area": 1508, "bbox": [207, 90, 19, 105], "iscrowd": 0}, {"id": 3866859, "category_id": 43, "area": 909, "bbox": [148, 91, 14, 78], "iscrowd": 0}, {"id": 3277055, "category_id": 43, "area": 571, "bbox": [105, 104, 12, 56], "iscrowd": 0}, {"id": 1839871, "category_id": 43, "area": 951, "bbox": [51, 81, 18, 88], "iscrowd": 0}, {"id": 3080447, "category_id": 43, "area": 1598, "bbox": [281, 80, 23, 99], "iscrowd": 0}, {"id": 917759, "category_id": 43, "area": 1162, "bbox": [260, 163, 31, 48], "iscrowd": 0}, {"id": 4327918, "category_id": 43, "area": 6673, "bbox": [106, 0, 51, 230], "iscrowd": 0}, {"id": 3080426, "category_id": 43, "area": 3103, "bbox": [2, 30, 38, 161], "iscrowd": 0}]}, {"image_id": "ADE_val_00001044", "file_name": "ADE_val_00001044.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 190072, "bbox": [0, 2, 510, 754], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10348, "bbox": [81, 513, 402, 243], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 39761, "bbox": [13, 0, 496, 134], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 4338, "bbox": [213, 664, 76, 92], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1253, "bbox": [446, 185, 43, 33], "iscrowd": 0}, {"id": 16767743, "category_id": 9, "area": 1030, "bbox": [398, 192, 37, 29], "iscrowd": 0}, {"id": 16570588, "category_id": 9, "area": 900, "bbox": [352, 196, 34, 29], "iscrowd": 0}, {"id": 14603218, "category_id": 9, "area": 816, "bbox": [310, 199, 33, 27], "iscrowd": 0}, {"id": 14679039, "category_id": 9, "area": 280, "bbox": [234, 208, 27, 28], "iscrowd": 0}, {"id": 14340827, "category_id": 9, "area": 832, "bbox": [449, 137, 39, 27], "iscrowd": 0}, {"id": 16569343, "category_id": 9, "area": 880, "bbox": [399, 143, 37, 28], "iscrowd": 0}, {"id": 13421010, "category_id": 9, "area": 824, "bbox": [353, 147, 36, 28], "iscrowd": 0}, {"id": 16771555, "category_id": 9, "area": 205, "bbox": [315, 158, 11, 22], "iscrowd": 0}, {"id": 14021099, "category_id": 9, "area": 147, "bbox": [336, 157, 8, 20], "iscrowd": 0}, {"id": 13885176, "category_id": 9, "area": 283, "bbox": [282, 163, 19, 22], "iscrowd": 0}, {"id": 13360634, "category_id": 9, "area": 314, "bbox": [241, 167, 20, 22], "iscrowd": 0}, {"id": 14081495, "category_id": 9, "area": 228, "bbox": [204, 173, 18, 19], "iscrowd": 0}, {"id": 16056051, "category_id": 9, "area": 378, "bbox": [445, 444, 21, 20], "iscrowd": 0}, {"id": 13302225, "category_id": 9, "area": 371, "bbox": [399, 442, 20, 21], "iscrowd": 0}, {"id": 13696992, "category_id": 9, "area": 425, "bbox": [354, 437, 21, 22], "iscrowd": 0}, {"id": 13688815, "category_id": 9, "area": 387, "bbox": [314, 435, 22, 20], "iscrowd": 0}, {"id": 16240890, "category_id": 9, "area": 253, "bbox": [280, 431, 16, 23], "iscrowd": 0}, {"id": 14734046, "category_id": 9, "area": 343, "bbox": [207, 426, 18, 21], "iscrowd": 0}, {"id": 15193599, "category_id": 9, "area": 73, "bbox": [242, 429, 9, 18], "iscrowd": 0}, {"id": 16241871, "category_id": 9, "area": 99, "bbox": [319, 302, 9, 11], "iscrowd": 0}, {"id": 16767955, "category_id": 9, "area": 848, "bbox": [58, 353, 24, 41], "iscrowd": 0}, {"id": 14341861, "category_id": 9, "area": 513, "bbox": [102, 349, 16, 36], "iscrowd": 0}, {"id": 14941403, "category_id": 9, "area": 364, "bbox": [134, 346, 14, 32], "iscrowd": 0}, {"id": 15397578, "category_id": 9, "area": 288, "bbox": [161, 342, 11, 30], "iscrowd": 0}, {"id": 15134941, "category_id": 9, "area": 237, "bbox": [183, 340, 10, 28], "iscrowd": 0}, {"id": 16632792, "category_id": 9, "area": 1210, "bbox": [2, 359, 32, 46], "iscrowd": 0}, {"id": 15328714, "category_id": 9, "area": 377, "bbox": [206, 339, 15, 27], "iscrowd": 0}, {"id": 14080713, "category_id": 9, "area": 270, "bbox": [137, 397, 12, 29], "iscrowd": 0}, {"id": 13230844, "category_id": 9, "area": 187, "bbox": [143, 489, 11, 24], "iscrowd": 0}, {"id": 16700641, "category_id": 9, "area": 306, "bbox": [140, 444, 13, 31], "iscrowd": 0}, {"id": 16375278, "category_id": 9, "area": 566, "bbox": [68, 475, 22, 35], "iscrowd": 0}, {"id": 13817586, "category_id": 9, "area": 901, "bbox": [16, 491, 29, 46], "iscrowd": 0}, {"id": 13428459, "category_id": 9, "area": 298, "bbox": [316, 472, 18, 19], "iscrowd": 0}, {"id": 14084341, "category_id": 9, "area": 289, "bbox": [357, 475, 17, 19], "iscrowd": 0}, {"id": 13946103, "category_id": 9, "area": 361, "bbox": [398, 480, 19, 20], "iscrowd": 0}, {"id": 15978707, "category_id": 9, "area": 384, "bbox": [318, 387, 16, 25], "iscrowd": 0}, {"id": 16700664, "category_id": 9, "area": 464, "bbox": [358, 388, 18, 27], "iscrowd": 0}, {"id": 16508922, "category_id": 9, "area": 525, "bbox": [400, 390, 21, 26], "iscrowd": 0}, {"id": 14082003, "category_id": 9, "area": 559, "bbox": [446, 391, 21, 28], "iscrowd": 0}, {"id": 16708350, "category_id": 9, "area": 630, "bbox": [402, 338, 21, 32], "iscrowd": 0}, {"id": 13500415, "category_id": 9, "area": 295, "bbox": [358, 339, 19, 30], "iscrowd": 0}, {"id": 16698111, "category_id": 9, "area": 303, "bbox": [318, 339, 17, 29], "iscrowd": 0}, {"id": 15780332, "category_id": 9, "area": 618, "bbox": [449, 339, 21, 31], "iscrowd": 0}, {"id": 14088945, "category_id": 9, "area": 156, "bbox": [319, 339, 10, 18], "iscrowd": 0}, {"id": 14737902, "category_id": 9, "area": 262, "bbox": [358, 339, 15, 19], "iscrowd": 0}, {"id": 13749716, "category_id": 9, "area": 634, "bbox": [269, 206, 30, 25], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 194, "bbox": [233, 726, 13, 23], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 526, "bbox": [42, 194, 37, 24], "iscrowd": 0}, {"id": 1518591, "category_id": 39, "area": 301, "bbox": [91, 208, 24, 18], "iscrowd": 0}, {"id": 998652, "category_id": 39, "area": 268, "bbox": [125, 218, 23, 17], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 819, "bbox": [243, 594, 57, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00001045", "file_name": "ADE_val_00001045.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 83453, "bbox": [0, 98, 681, 339], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 33027, "bbox": [79, 440, 591, 71], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 86914, "bbox": [1, 0, 681, 173], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 51794, "bbox": [199, 198, 301, 177], "iscrowd": 0}, {"id": 16763889, "category_id": 9, "area": 8237, "bbox": [213, 104, 133, 73], "iscrowd": 0}, {"id": 15653853, "category_id": 9, "area": 8532, "bbox": [345, 103, 137, 74], "iscrowd": 0}, {"id": 16377071, "category_id": 9, "area": 11227, "bbox": [607, 175, 60, 217], "iscrowd": 0}, {"id": 15978445, "category_id": 9, "area": 11221, "bbox": [33, 176, 58, 213], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 4276, "bbox": [613, 380, 46, 131], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1398, "bbox": [40, 458, 102, 53], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 10593, "bbox": [0, 379, 99, 132], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 148, "bbox": [177, 93, 20, 11], "iscrowd": 0}, {"id": 572152, "category_id": 83, "area": 138, "bbox": [500, 91, 18, 12], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 1229, "bbox": [139, 440, 70, 24], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 30378, "bbox": [93, 389, 589, 122], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 3335, "bbox": [269, 10, 155, 89], "iscrowd": 0}]}, {"image_id": "ADE_val_00001046", "file_name": "ADE_val_00001046.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 23362, "bbox": [0, 0, 236, 150], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1717, "bbox": [0, 148, 235, 67], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 15447, "bbox": [0, 101, 220, 113], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3431, "bbox": [85, 17, 83, 72], "iscrowd": 0}, {"id": 16505599, "category_id": 9, "area": 2655, "bbox": [194, 14, 43, 81], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1115, "bbox": [0, 166, 29, 48], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 439, "bbox": [215, 149, 21, 31], "iscrowd": 0}, {"id": 55801, "category_id": 40, "area": 660, "bbox": [11, 108, 38, 33], "iscrowd": 0}, {"id": 43239, "category_id": 40, "area": 546, "bbox": [44, 101, 24, 34], "iscrowd": 0}, {"id": 438498, "category_id": 40, "area": 295, "bbox": [52, 102, 29, 28], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 624, "bbox": [0, 114, 31, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00001047", "file_name": "ADE_val_00001047.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 172079, "bbox": [0, 1, 680, 462], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 58241, "bbox": [0, 383, 683, 129], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 23587, "bbox": [104, 105, 305, 253], "iscrowd": 0}, {"id": 13824201, "category_id": 9, "area": 38861, "bbox": [211, 28, 336, 310], "iscrowd": 0}, {"id": 14081535, "category_id": 9, "area": 48155, "bbox": [422, 1, 260, 302], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 448, "bbox": [160, 391, 41, 53], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 4308, "bbox": [70, 375, 81, 65], "iscrowd": 0}]}, {"image_id": "ADE_val_00001048", "file_name": "ADE_val_00001048.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 59703, "bbox": [1, 2, 681, 366], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 40594, "bbox": [1, 310, 681, 201], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 115062, "bbox": [0, 0, 682, 309], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 44176, "bbox": [1, 312, 679, 149], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 3442, "bbox": [216, 190, 152, 55], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 9269, "bbox": [467, 82, 183, 125], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2911, "bbox": [208, 182, 70, 87], "iscrowd": 0}, {"id": 14076148, "category_id": 9, "area": 5017, "bbox": [309, 181, 69, 87], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 10744, "bbox": [414, 207, 102, 143], "iscrowd": 0}, {"id": 16714186, "category_id": 11, "area": 7176, "bbox": [307, 360, 155, 65], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 15944, "bbox": [269, 410, 208, 101], "iscrowd": 0}, {"id": 22727, "category_id": 20, "area": 10001, "bbox": [110, 268, 139, 136], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 3032, "bbox": [438, 328, 77, 51], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 719, "bbox": [436, 258, 15, 58], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 958, "bbox": [285, 164, 19, 66], "iscrowd": 0}, {"id": 65280, "category_id": 99, "area": 418, "bbox": [163, 68, 13, 41], "iscrowd": 0}, {"id": 188697, "category_id": 99, "area": 337, "bbox": [177, 54, 17, 36], "iscrowd": 0}, {"id": 655104, "category_id": 99, "area": 325, "bbox": [181, 92, 12, 35], "iscrowd": 0}, {"id": 1703705, "category_id": 99, "area": 170, "bbox": [186, 127, 8, 24], "iscrowd": 0}, {"id": 851735, "category_id": 99, "area": 199, "bbox": [192, 129, 10, 29], "iscrowd": 0}, {"id": 981760, "category_id": 99, "area": 161, "bbox": [201, 113, 9, 35], "iscrowd": 0}, {"id": 2686741, "category_id": 99, "area": 102, "bbox": [209, 143, 8, 19], "iscrowd": 0}, {"id": 65295, "category_id": 99, "area": 84, "bbox": [222, 135, 6, 17], "iscrowd": 0}, {"id": 1113856, "category_id": 99, "area": 72, "bbox": [199, 123, 5, 21], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 560, "bbox": [418, 343, 34, 28], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 2727, "bbox": [526, 300, 99, 118], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 195, "bbox": [348, 341, 10, 32], "iscrowd": 0}, {"id": 12307456, "category_id": 148, "area": 218, "bbox": [358, 339, 11, 31], "iscrowd": 0}, {"id": 14398258, "category_id": 148, "area": 204, "bbox": [374, 353, 13, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001049", "file_name": "ADE_val_00001049.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 36382, "bbox": [0, 0, 339, 193], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6707, "bbox": [0, 1, 265, 49], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 995, "bbox": [97, 131, 107, 69], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 826, "bbox": [112, 86, 39, 28], "iscrowd": 0}, {"id": 13892859, "category_id": 9, "area": 749, "bbox": [156, 93, 36, 26], "iscrowd": 0}, {"id": 14010859, "category_id": 9, "area": 488, "bbox": [131, 40, 31, 22], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 8585, "bbox": [106, 120, 234, 79], "iscrowd": 0}, {"id": 15073024, "category_id": 32, "area": 11046, "bbox": [0, 109, 184, 90], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 130, "bbox": [151, 19, 26, 11], "iscrowd": 0}, {"id": 573439, "category_id": 83, "area": 137, "bbox": [115, 11, 28, 11], "iscrowd": 0}, {"id": 40703, "category_id": 83, "area": 149, "bbox": [168, 2, 29, 12], "iscrowd": 0}, {"id": 48104, "category_id": 83, "area": 163, "bbox": [77, 1, 28, 13], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 33, "bbox": [245, 104, 8, 5], "iscrowd": 0}, {"id": 16203264, "category_id": 135, "area": 49, "bbox": [312, 115, 8, 7], "iscrowd": 0}, {"id": 15341312, "category_id": 135, "area": 33, "bbox": [200, 94, 7, 6], "iscrowd": 0}]}, {"image_id": "ADE_val_00001050", "file_name": "ADE_val_00001050.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 49529, "bbox": [0, 1, 508, 209], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 16638, "bbox": [112, 207, 285, 134], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 17380, "bbox": [0, 0, 423, 59], "iscrowd": 0}, {"id": 16711762, "category_id": 102, "area": 20698, "bbox": [68, 53, 232, 130], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 516, "bbox": [366, 152, 17, 33], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 5798, "bbox": [91, 78, 186, 101], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 8263, "bbox": [314, 198, 108, 125], "iscrowd": 0}, {"id": 15027, "category_id": 20, "area": 11821, "bbox": [396, 183, 104, 151], "iscrowd": 0}, {"id": 19431, "category_id": 20, "area": 4361, "bbox": [263, 209, 86, 93], "iscrowd": 0}, {"id": 478648, "category_id": 20, "area": 1480, "bbox": [413, 193, 60, 43], "iscrowd": 0}, {"id": 2046684, "category_id": 20, "area": 2195, "bbox": [237, 211, 58, 79], "iscrowd": 0}, {"id": 408253, "category_id": 20, "area": 1242, "bbox": [215, 215, 37, 64], "iscrowd": 0}, {"id": 1716423, "category_id": 20, "area": 911, "bbox": [202, 210, 46, 59], "iscrowd": 0}, {"id": 1847745, "category_id": 20, "area": 8550, "bbox": [0, 183, 132, 151], "iscrowd": 0}, {"id": 1652683, "category_id": 20, "area": 5218, "bbox": [13, 206, 109, 101], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 10274, "bbox": [144, 182, 364, 159], "iscrowd": 0}, {"id": 15728407, "category_id": 32, "area": 3754, "bbox": [1, 183, 131, 159], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 761, "bbox": [9, 183, 51, 17], "iscrowd": 0}, {"id": 63487, "category_id": 54, "area": 497, "bbox": [319, 172, 37, 21], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 196, "bbox": [235, 18, 19, 15], "iscrowd": 0}, {"id": 172537, "category_id": 83, "area": 236, "bbox": [138, 11, 19, 16], "iscrowd": 0}, {"id": 40703, "category_id": 83, "area": 279, "bbox": [26, 4, 20, 17], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 176, "bbox": [342, 148, 24, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00001051", "file_name": "ADE_val_00001051.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 11090, "bbox": [0, 0, 705, 250], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 79265, "bbox": [0, 297, 705, 213], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3172, "bbox": [30, 213, 45, 73], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 77248, "bbox": [169, 167, 343, 277], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 28253, "bbox": [0, 26, 232, 332], "iscrowd": 0}, {"id": 43257, "category_id": 33, "area": 1453, "bbox": [504, 197, 19, 106], "iscrowd": 0}, {"id": 961523, "category_id": 33, "area": 21338, "bbox": [616, 9, 89, 439], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 2694, "bbox": [0, 248, 28, 114], "iscrowd": 0}]}, {"image_id": "ADE_val_00001052", "file_name": "ADE_val_00001052.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 29414, "bbox": [0, 88, 639, 143], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 55335, "bbox": [203, 265, 431, 214], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 52814, "bbox": [0, 0, 639, 133], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 1800, "bbox": [77, 104, 81, 54], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 5374, "bbox": [617, 134, 22, 345], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1938, "bbox": [73, 166, 34, 62], "iscrowd": 0}, {"id": 1638144, "category_id": 15, "area": 1441, "bbox": [130, 166, 32, 55], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1200, "bbox": [2, 204, 37, 49], "iscrowd": 0}, {"id": 14244096, "category_id": 21, "area": 24770, "bbox": [11, 195, 412, 106], "iscrowd": 0}, {"id": 13061888, "category_id": 21, "area": 55122, "bbox": [0, 253, 339, 226], "iscrowd": 0}, {"id": 12807184, "category_id": 21, "area": 31329, "bbox": [433, 155, 199, 210], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 599, "bbox": [408, 118, 25, 26], "iscrowd": 0}, {"id": 3940607, "category_id": 23, "area": 528, "bbox": [464, 130, 24, 23], "iscrowd": 0}, {"id": 2294015, "category_id": 23, "area": 534, "bbox": [48, 176, 20, 28], "iscrowd": 0}, {"id": 3866850, "category_id": 23, "area": 436, "bbox": [354, 135, 21, 21], "iscrowd": 0}, {"id": 3014911, "category_id": 23, "area": 115, "bbox": [226, 126, 11, 12], "iscrowd": 0}, {"id": 3741951, "category_id": 23, "area": 120, "bbox": [226, 138, 11, 11], "iscrowd": 0}, {"id": 2889727, "category_id": 23, "area": 242, "bbox": [114, 162, 13, 21], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 8246, "bbox": [10, 0, 526, 89], "iscrowd": 0}, {"id": 758015, "category_id": 83, "area": 6139, "bbox": [181, 55, 456, 53], "iscrowd": 0}, {"id": 1420541, "category_id": 83, "area": 3410, "bbox": [294, 92, 344, 32], "iscrowd": 0}, {"id": 238569, "category_id": 83, "area": 166, "bbox": [18, 113, 20, 9], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 186, "bbox": [184, 132, 15, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001053", "file_name": "ADE_val_00001053.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21157, "bbox": [0, 0, 318, 122], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25540, "bbox": [0, 140, 317, 98], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2898, "bbox": [165, 1, 152, 38], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1555, "bbox": [0, 55, 32, 56], "iscrowd": 0}, {"id": 15911394, "category_id": 9, "area": 1481, "bbox": [189, 85, 52, 38], "iscrowd": 0}, {"id": 13432566, "category_id": 9, "area": 1612, "bbox": [253, 93, 65, 32], "iscrowd": 0}, {"id": 15190750, "category_id": 9, "area": 166, "bbox": [225, 42, 15, 17], "iscrowd": 0}, {"id": 14801631, "category_id": 9, "area": 408, "bbox": [250, 46, 37, 14], "iscrowd": 0}, {"id": 14811100, "category_id": 9, "area": 4864, "bbox": [51, 63, 127, 85], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 402, "bbox": [111, 92, 29, 18], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2001, "bbox": [232, 116, 86, 35], "iscrowd": 0}, {"id": 13794824, "category_id": 21, "area": 104, "bbox": [299, 116, 18, 10], "iscrowd": 0}, {"id": 12280859, "category_id": 21, "area": 653, "bbox": [194, 117, 41, 29], "iscrowd": 0}, {"id": 12867595, "category_id": 21, "area": 4916, "bbox": [87, 107, 122, 59], "iscrowd": 0}, {"id": 11888384, "category_id": 21, "area": 4745, "bbox": [0, 109, 85, 69], "iscrowd": 0}, {"id": 13007368, "category_id": 21, "area": 182, "bbox": [229, 118, 33, 15], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 69, "bbox": [129, 62, 8, 11], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 577, "bbox": [213, 12, 20, 31], "iscrowd": 0}, {"id": 16711792, "category_id": 150, "area": 791, "bbox": [289, 0, 23, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00001054", "file_name": "ADE_val_00001054.png", "segments_info": [{"id": 4618360, "category_id": 14, "area": 129108, "bbox": [0, 194, 685, 317], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 128305, "bbox": [0, 0, 685, 218], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 22652, "bbox": [260, 307, 238, 186], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 3497, "bbox": [476, 112, 141, 281], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 17380, "bbox": [0, 280, 685, 137], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 19334, "bbox": [54, 77, 154, 435], "iscrowd": 0}, {"id": 2949277, "category_id": 13, "area": 17336, "bbox": [103, 283, 98, 227], "iscrowd": 0}, {"id": 4069779, "category_id": 13, "area": 12169, "bbox": [53, 168, 139, 219], "iscrowd": 0}]}, {"image_id": "ADE_val_00001055", "file_name": "ADE_val_00001055.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 24834, "bbox": [0, 0, 300, 113], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 52551, "bbox": [0, 110, 300, 187], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2694, "bbox": [9, 61, 45, 126], "iscrowd": 0}, {"id": 4723597, "category_id": 13, "area": 1285, "bbox": [220, 67, 40, 84], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 31, "bbox": [144, 34, 7, 6], "iscrowd": 0}]}, {"image_id": "ADE_val_00001056", "file_name": "ADE_val_00001056.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 56208, "bbox": [0, 92, 682, 262], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7986, "bbox": [0, 374, 252, 136], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 78530, "bbox": [0, 0, 682, 202], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 3446, "bbox": [91, 323, 103, 95], "iscrowd": 0}, {"id": 16711813, "category_id": 106, "area": 75260, "bbox": [1, 276, 681, 235], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 10402, "bbox": [184, 314, 100, 197], "iscrowd": 0}, {"id": 2752661, "category_id": 13, "area": 6792, "bbox": [10, 255, 75, 174], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6054, "bbox": [354, 155, 66, 102], "iscrowd": 0}, {"id": 4391151, "category_id": 23, "area": 2795, "bbox": [218, 181, 41, 75], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 37416, "bbox": [509, 1, 118, 349], "iscrowd": 0}, {"id": 4459775, "category_id": 43, "area": 11580, "bbox": [127, 72, 66, 228], "iscrowd": 0}, {"id": 1442030, "category_id": 43, "area": 4575, "bbox": [11, 139, 43, 142], "iscrowd": 0}, {"id": 2500095, "category_id": 43, "area": 3698, "bbox": [279, 153, 37, 121], "iscrowd": 0}, {"id": 4269306, "category_id": 43, "area": 5613, "bbox": [472, 117, 40, 165], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 3569, "bbox": [619, 103, 63, 71], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 272, "bbox": [241, 79, 53, 15], "iscrowd": 0}, {"id": 2012159, "category_id": 83, "area": 397, "bbox": [290, 60, 60, 18], "iscrowd": 0}, {"id": 1744121, "category_id": 83, "area": 464, "bbox": [354, 36, 63, 22], "iscrowd": 0}, {"id": 38399, "category_id": 83, "area": 497, "bbox": [112, 19, 75, 21], "iscrowd": 0}, {"id": 45055, "category_id": 83, "area": 461, "bbox": [74, 44, 66, 20], "iscrowd": 0}, {"id": 823807, "category_id": 83, "area": 341, "bbox": [37, 73, 58, 16], "iscrowd": 0}, {"id": 43519, "category_id": 83, "area": 298, "bbox": [16, 90, 53, 13], "iscrowd": 0}, {"id": 1872353, "category_id": 83, "area": 178, "bbox": [83, 140, 35, 10], "iscrowd": 0}, {"id": 40703, "category_id": 83, "area": 673, "bbox": [432, 8, 69, 27], "iscrowd": 0}, {"id": 46335, "category_id": 83, "area": 224, "bbox": [1, 104, 43, 12], "iscrowd": 0}, {"id": 637951, "category_id": 83, "area": 206, "bbox": [191, 100, 47, 12], "iscrowd": 0}, {"id": 1484268, "category_id": 83, "area": 185, "bbox": [104, 132, 32, 10], "iscrowd": 0}, {"id": 44031, "category_id": 83, "area": 288, "bbox": [195, 0, 50, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00001057", "file_name": "ADE_val_00001057.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 43090, "bbox": [0, 0, 326, 231], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1781, "bbox": [132, 153, 193, 88], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 933, "bbox": [126, 0, 102, 15], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 332, "bbox": [195, 17, 14, 26], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 5959, "bbox": [155, 43, 136, 145], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 14586, "bbox": [0, 152, 264, 89], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 218, "bbox": [15, 113, 12, 30], "iscrowd": 0}, {"id": 65308, "category_id": 99, "area": 299, "bbox": [304, 184, 13, 42], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 448, "bbox": [83, 167, 28, 20], "iscrowd": 0}, {"id": 53234, "category_id": 121, "area": 362, "bbox": [49, 172, 27, 16], "iscrowd": 0}, {"id": 58623, "category_id": 121, "area": 254, "bbox": [96, 160, 28, 15], "iscrowd": 0}, {"id": 1885685, "category_id": 121, "area": 220, "bbox": [72, 160, 23, 17], "iscrowd": 0}, {"id": 57324, "category_id": 121, "area": 194, "bbox": [128, 162, 23, 12], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1061, "bbox": [200, 133, 102, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001058", "file_name": "ADE_val_00001058.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21329, "bbox": [0, 0, 255, 147], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1398, "bbox": [0, 193, 74, 63], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5743, "bbox": [0, 0, 193, 53], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 1539, "bbox": [127, 101, 97, 18], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 1045, "bbox": [0, 120, 54, 69], "iscrowd": 0}, {"id": 16711680, "category_id": 56, "area": 26046, "bbox": [0, 128, 255, 128], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 59, "bbox": [68, 15, 13, 6], "iscrowd": 0}, {"id": 51967, "category_id": 83, "area": 51, "bbox": [74, 38, 11, 5], "iscrowd": 0}, {"id": 38399, "category_id": 83, "area": 67, "bbox": [127, 0, 16, 5], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 95, "bbox": [172, 95, 27, 6], "iscrowd": 0}, {"id": 48895, "category_id": 121, "area": 157, "bbox": [135, 92, 31, 8], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 2652, "bbox": [114, 18, 95, 51], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 2379, "bbox": [2, 45, 53, 55], "iscrowd": 0}]}, {"image_id": "ADE_val_00001059", "file_name": "ADE_val_00001059.png", "segments_info": [{"id": 16711680, "category_id": 56, "area": 126198, "bbox": [0, 0, 499, 374], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 3506, "bbox": [413, 201, 80, 54], "iscrowd": 0}, {"id": 1298175, "category_id": 121, "area": 1716, "bbox": [393, 183, 75, 49], "iscrowd": 0}, {"id": 635647, "category_id": 121, "area": 1330, "bbox": [379, 169, 61, 45], "iscrowd": 0}, {"id": 50687, "category_id": 121, "area": 6787, "bbox": [243, 154, 121, 112], "iscrowd": 0}, {"id": 1561595, "category_id": 121, "area": 3675, "bbox": [325, 179, 93, 79], "iscrowd": 0}, {"id": 50175, "category_id": 121, "area": 4963, "bbox": [207, 159, 103, 113], "iscrowd": 0}, {"id": 50926, "category_id": 121, "area": 4241, "bbox": [172, 196, 80, 82], "iscrowd": 0}, {"id": 50669, "category_id": 121, "area": 4782, "bbox": [118, 189, 72, 93], "iscrowd": 0}, {"id": 54769, "category_id": 121, "area": 5948, "bbox": [61, 164, 61, 122], "iscrowd": 0}, {"id": 376063, "category_id": 121, "area": 4594, "bbox": [2, 192, 64, 86], "iscrowd": 0}, {"id": 2019327, "category_id": 121, "area": 1057, "bbox": [0, 165, 68, 25], "iscrowd": 0}, {"id": 52978, "category_id": 121, "area": 1091, "bbox": [255, 77, 60, 44], "iscrowd": 0}, {"id": 52991, "category_id": 121, "area": 6710, "bbox": [281, 61, 185, 61], "iscrowd": 0}, {"id": 52223, "category_id": 121, "area": 1612, "bbox": [108, 65, 41, 49], "iscrowd": 0}, {"id": 1165545, "category_id": 121, "area": 1615, "bbox": [205, 1, 131, 29], "iscrowd": 0}, {"id": 840703, "category_id": 121, "area": 4144, "bbox": [149, 61, 89, 66], "iscrowd": 0}]}, {"image_id": "ADE_val_00001060", "file_name": "ADE_val_00001060.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 354461, "bbox": [0, 1, 754, 509], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 5536, "bbox": [1, 0, 753, 46], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 205, "bbox": [262, 109, 16, 15], "iscrowd": 0}, {"id": 3014818, "category_id": 13, "area": 164, "bbox": [121, 116, 14, 14], "iscrowd": 0}, {"id": 4456627, "category_id": 13, "area": 191, "bbox": [89, 117, 18, 15], "iscrowd": 0}, {"id": 2559916, "category_id": 13, "area": 449, "bbox": [56, 110, 32, 22], "iscrowd": 0}, {"id": 5179539, "category_id": 13, "area": 352, "bbox": [377, 100, 25, 22], "iscrowd": 0}, {"id": 4194460, "category_id": 13, "area": 456, "bbox": [531, 95, 31, 23], "iscrowd": 0}, {"id": 4720295, "category_id": 13, "area": 740, "bbox": [282, 268, 55, 33], "iscrowd": 0}, {"id": 5701780, "category_id": 13, "area": 906, "bbox": [254, 268, 38, 35], "iscrowd": 0}, {"id": 2621593, "category_id": 13, "area": 883, "bbox": [226, 265, 29, 40], "iscrowd": 0}, {"id": 4325530, "category_id": 13, "area": 808, "bbox": [5, 282, 47, 32], "iscrowd": 0}, {"id": 5906348, "category_id": 13, "area": 212, "bbox": [1, 117, 16, 17], "iscrowd": 0}, {"id": 2102186, "category_id": 13, "area": 230, "bbox": [23, 117, 20, 16], "iscrowd": 0}, {"id": 5308561, "category_id": 13, "area": 157, "bbox": [43, 118, 15, 14], "iscrowd": 0}, {"id": 3803819, "category_id": 13, "area": 67, "bbox": [167, 123, 17, 6], "iscrowd": 0}, {"id": 5120651, "category_id": 13, "area": 112, "bbox": [314, 102, 10, 15], "iscrowd": 0}, {"id": 5309319, "category_id": 13, "area": 196, "bbox": [401, 97, 17, 22], "iscrowd": 0}, {"id": 5963949, "category_id": 13, "area": 189, "bbox": [460, 104, 16, 14], "iscrowd": 0}, {"id": 4596372, "category_id": 13, "area": 107, "bbox": [480, 106, 12, 11], "iscrowd": 0}, {"id": 3407994, "category_id": 13, "area": 212, "bbox": [567, 101, 18, 14], "iscrowd": 0}, {"id": 2293914, "category_id": 13, "area": 349, "bbox": [604, 94, 25, 21], "iscrowd": 0}, {"id": 4259988, "category_id": 13, "area": 356, "bbox": [727, 92, 25, 20], "iscrowd": 0}, {"id": 4522106, "category_id": 13, "area": 244, "bbox": [698, 271, 24, 13], "iscrowd": 0}, {"id": 3080344, "category_id": 13, "area": 83, "bbox": [524, 283, 12, 9], "iscrowd": 0}, {"id": 4070780, "category_id": 13, "area": 424, "bbox": [467, 262, 25, 32], "iscrowd": 0}, {"id": 4063401, "category_id": 13, "area": 346, "bbox": [127, 291, 23, 19], "iscrowd": 0}, {"id": 3343777, "category_id": 13, "area": 478, "bbox": [187, 101, 33, 28], "iscrowd": 0}, {"id": 2296973, "category_id": 13, "area": 263, "bbox": [221, 115, 20, 17], "iscrowd": 0}, {"id": 2097553, "category_id": 13, "area": 251, "bbox": [244, 110, 17, 21], "iscrowd": 0}, {"id": 5963939, "category_id": 13, "area": 656, "bbox": [283, 98, 38, 31], "iscrowd": 0}, {"id": 5378218, "category_id": 13, "area": 401, "bbox": [347, 102, 33, 24], "iscrowd": 0}, {"id": 3351200, "category_id": 13, "area": 180, "bbox": [409, 105, 18, 14], "iscrowd": 0}, {"id": 3216506, "category_id": 13, "area": 497, "bbox": [433, 100, 23, 40], "iscrowd": 0}, {"id": 4456581, "category_id": 13, "area": 480, "bbox": [490, 97, 22, 28], "iscrowd": 0}, {"id": 5839792, "category_id": 13, "area": 819, "bbox": [627, 87, 37, 50], "iscrowd": 0}, {"id": 2818198, "category_id": 13, "area": 537, "bbox": [659, 94, 36, 45], "iscrowd": 0}, {"id": 2883748, "category_id": 13, "area": 1551, "bbox": [618, 249, 54, 83], "iscrowd": 0}, {"id": 4587700, "category_id": 13, "area": 822, "bbox": [593, 256, 39, 56], "iscrowd": 0}, {"id": 5505166, "category_id": 13, "area": 754, "bbox": [541, 264, 32, 37], "iscrowd": 0}, {"id": 3342507, "category_id": 13, "area": 1482, "bbox": [386, 269, 60, 40], "iscrowd": 0}, {"id": 3213179, "category_id": 13, "area": 466, "bbox": [437, 276, 30, 31], "iscrowd": 0}, {"id": 4989092, "category_id": 13, "area": 1189, "bbox": [182, 276, 43, 44], "iscrowd": 0}, {"id": 3997822, "category_id": 13, "area": 847, "bbox": [154, 282, 31, 42], "iscrowd": 0}, {"id": 5247911, "category_id": 13, "area": 1625, "bbox": [42, 284, 50, 66], "iscrowd": 0}, {"id": 5309067, "category_id": 13, "area": 791, "bbox": [721, 234, 34, 57], "iscrowd": 0}, {"id": 2824069, "category_id": 13, "area": 706, "bbox": [652, 267, 38, 28], "iscrowd": 0}, {"id": 4201906, "category_id": 13, "area": 616, "bbox": [488, 280, 37, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00001061", "file_name": "ADE_val_00001061.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 21035, "bbox": [1, 1, 401, 80], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 104472, "bbox": [0, 245, 682, 265], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 21065, "bbox": [178, 0, 503, 75], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6549, "bbox": [239, 135, 263, 246], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 6658, "bbox": [530, 119, 152, 190], "iscrowd": 0}, {"id": 1785546, "category_id": 20, "area": 45810, "bbox": [331, 195, 351, 316], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 116562, "bbox": [1, 38, 681, 313], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 5629, "bbox": [2, 308, 98, 85], "iscrowd": 0}, {"id": 15270143, "category_id": 126, "area": 2296, "bbox": [641, 182, 41, 84], "iscrowd": 0}, {"id": 15863039, "category_id": 126, "area": 3327, "bbox": [419, 202, 64, 60], "iscrowd": 0}]}, {"image_id": "ADE_val_00001062", "file_name": "ADE_val_00001062.png", "segments_info": [{"id": 3289680, "category_id": 4, "area": 9281, "bbox": [0, 0, 319, 240], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 14227, "bbox": [7, 58, 231, 181], "iscrowd": 0}, {"id": 4259976, "category_id": 13, "area": 7091, "bbox": [202, 71, 117, 123], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 29354, "bbox": [8, 0, 311, 240], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 381, "bbox": [143, 98, 22, 21], "iscrowd": 0}, {"id": 11469055, "category_id": 120, "area": 377, "bbox": [164, 106, 24, 21], "iscrowd": 0}, {"id": 11474924, "category_id": 120, "area": 425, "bbox": [182, 117, 23, 24], "iscrowd": 0}, {"id": 11410150, "category_id": 120, "area": 355, "bbox": [169, 86, 21, 21], "iscrowd": 0}, {"id": 11272447, "category_id": 120, "area": 325, "bbox": [126, 72, 20, 21], "iscrowd": 0}, {"id": 8850431, "category_id": 120, "area": 297, "bbox": [121, 47, 20, 19], "iscrowd": 0}, {"id": 9639151, "category_id": 120, "area": 307, "bbox": [141, 44, 20, 21], "iscrowd": 0}, {"id": 10032895, "category_id": 120, "area": 320, "bbox": [185, 61, 21, 21], "iscrowd": 0}, {"id": 9771007, "category_id": 120, "area": 312, "bbox": [176, 34, 21, 20], "iscrowd": 0}, {"id": 9899756, "category_id": 120, "area": 292, "bbox": [229, 50, 18, 19], "iscrowd": 0}, {"id": 11796724, "category_id": 120, "area": 273, "bbox": [191, 45, 20, 18], "iscrowd": 0}, {"id": 11337975, "category_id": 120, "area": 312, "bbox": [166, 70, 22, 18], "iscrowd": 0}, {"id": 9113065, "category_id": 120, "area": 566, "bbox": [243, 192, 27, 26], "iscrowd": 0}, {"id": 11600125, "category_id": 120, "area": 530, "bbox": [217, 194, 26, 25], "iscrowd": 0}, {"id": 9181695, "category_id": 120, "area": 605, "bbox": [263, 209, 28, 28], "iscrowd": 0}, {"id": 12583166, "category_id": 120, "area": 448, "bbox": [286, 145, 24, 25], "iscrowd": 0}, {"id": 10619628, "category_id": 120, "area": 331, "bbox": [283, 59, 23, 20], "iscrowd": 0}, {"id": 9765119, "category_id": 120, "area": 226, "bbox": [247, 35, 18, 17], "iscrowd": 0}, {"id": 11862271, "category_id": 120, "area": 309, "bbox": [206, 102, 21, 19], "iscrowd": 0}, {"id": 12517628, "category_id": 120, "area": 521, "bbox": [177, 202, 26, 26], "iscrowd": 0}, {"id": 10491375, "category_id": 120, "area": 556, "bbox": [150, 197, 27, 27], "iscrowd": 0}, {"id": 12388863, "category_id": 120, "area": 279, "bbox": [159, 29, 19, 19], "iscrowd": 0}, {"id": 11338986, "category_id": 120, "area": 255, "bbox": [201, 34, 19, 19], "iscrowd": 0}, {"id": 10289400, "category_id": 120, "area": 274, "bbox": [211, 49, 18, 20], "iscrowd": 0}, {"id": 9306339, "category_id": 120, "area": 287, "bbox": [254, 58, 22, 19], "iscrowd": 0}, {"id": 8719103, "category_id": 120, "area": 310, "bbox": [271, 44, 20, 20], "iscrowd": 0}, {"id": 11862244, "category_id": 120, "area": 495, "bbox": [293, 178, 25, 25], "iscrowd": 0}, {"id": 9437412, "category_id": 120, "area": 240, "bbox": [232, 28, 19, 17], "iscrowd": 0}, {"id": 10623999, "category_id": 120, "area": 371, "bbox": [127, 114, 23, 20], "iscrowd": 0}, {"id": 11206910, "category_id": 120, "area": 310, "bbox": [190, 82, 20, 19], "iscrowd": 0}, {"id": 9896166, "category_id": 120, "area": 267, "bbox": [158, 55, 21, 18], "iscrowd": 0}, {"id": 9044223, "category_id": 120, "area": 280, "bbox": [103, 52, 19, 20], "iscrowd": 0}, {"id": 9968383, "category_id": 120, "area": 396, "bbox": [73, 80, 22, 22], "iscrowd": 0}, {"id": 10555903, "category_id": 120, "area": 286, "bbox": [168, 135, 23, 16], "iscrowd": 0}, {"id": 9044198, "category_id": 120, "area": 208, "bbox": [141, 32, 19, 14], "iscrowd": 0}, {"id": 8718079, "category_id": 120, "area": 323, "bbox": [205, 118, 22, 21], "iscrowd": 0}, {"id": 12653055, "category_id": 120, "area": 369, "bbox": [256, 177, 25, 23], "iscrowd": 0}, {"id": 8913407, "category_id": 120, "area": 286, "bbox": [196, 136, 20, 23], "iscrowd": 0}, {"id": 11928036, "category_id": 120, "area": 224, "bbox": [146, 71, 21, 17], "iscrowd": 0}, {"id": 11997183, "category_id": 120, "area": 278, "bbox": [141, 83, 22, 16], "iscrowd": 0}, {"id": 10485997, "category_id": 120, "area": 301, "bbox": [288, 92, 21, 19], "iscrowd": 0}, {"id": 10551550, "category_id": 120, "area": 165, "bbox": [293, 78, 14, 14], "iscrowd": 0}, {"id": 12255487, "category_id": 120, "area": 327, "bbox": [150, 120, 23, 21], "iscrowd": 0}, {"id": 9896191, "category_id": 120, "area": 238, "bbox": [186, 102, 20, 16], "iscrowd": 0}, {"id": 9114865, "category_id": 120, "area": 399, "bbox": [278, 120, 23, 22], "iscrowd": 0}, {"id": 9044991, "category_id": 120, "area": 329, "bbox": [229, 70, 20, 20], "iscrowd": 0}, {"id": 11337982, "category_id": 120, "area": 277, "bbox": [113, 106, 21, 19], "iscrowd": 0}, {"id": 10816511, "category_id": 120, "area": 403, "bbox": [94, 94, 24, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00001063", "file_name": "ADE_val_00001063.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21974, "bbox": [0, 21, 299, 193], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 23652, "bbox": [0, 123, 287, 91], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 8692, "bbox": [0, 0, 299, 32], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 544, "bbox": [66, 82, 21, 31], "iscrowd": 0}, {"id": 15530699, "category_id": 9, "area": 558, "bbox": [133, 81, 20, 32], "iscrowd": 0}, {"id": 13355742, "category_id": 9, "area": 580, "bbox": [199, 80, 22, 32], "iscrowd": 0}, {"id": 16580583, "category_id": 9, "area": 140, "bbox": [197, 39, 10, 14], "iscrowd": 0}, {"id": 13888721, "category_id": 9, "area": 180, "bbox": [211, 38, 13, 14], "iscrowd": 0}, {"id": 15062781, "category_id": 9, "area": 165, "bbox": [128, 40, 12, 14], "iscrowd": 0}, {"id": 15854810, "category_id": 9, "area": 299, "bbox": [272, 39, 11, 29], "iscrowd": 0}, {"id": 16642251, "category_id": 9, "area": 149, "bbox": [255, 38, 7, 23], "iscrowd": 0}, {"id": 14349278, "category_id": 9, "area": 115, "bbox": [247, 37, 6, 20], "iscrowd": 0}, {"id": 13694201, "category_id": 9, "area": 341, "bbox": [261, 95, 22, 96], "iscrowd": 0}, {"id": 15728639, "category_id": 9, "area": 418, "bbox": [246, 80, 16, 80], "iscrowd": 0}, {"id": 16769764, "category_id": 9, "area": 274, "bbox": [236, 73, 13, 64], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 272, "bbox": [25, 106, 16, 18], "iscrowd": 0}, {"id": 1441574, "category_id": 15, "area": 284, "bbox": [159, 103, 14, 21], "iscrowd": 0}, {"id": 2424064, "category_id": 15, "area": 295, "bbox": [115, 103, 15, 20], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 750, "bbox": [127, 70, 31, 51], "iscrowd": 0}, {"id": 872421, "category_id": 19, "area": 1192, "bbox": [260, 98, 22, 95], "iscrowd": 0}, {"id": 999675, "category_id": 19, "area": 449, "bbox": [245, 82, 13, 74], "iscrowd": 0}, {"id": 9706, "category_id": 19, "area": 299, "bbox": [237, 75, 11, 47], "iscrowd": 0}, {"id": 1395454, "category_id": 19, "area": 832, "bbox": [192, 70, 33, 50], "iscrowd": 0}, {"id": 6911, "category_id": 19, "area": 586, "bbox": [62, 72, 28, 49], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 205, "bbox": [116, 21, 15, 30], "iscrowd": 0}, {"id": 323041, "category_id": 37, "area": 553, "bbox": [65, 10, 22, 50], "iscrowd": 0}, {"id": 1241060, "category_id": 37, "area": 103, "bbox": [140, 25, 10, 21], "iscrowd": 0}, {"id": 64252, "category_id": 37, "area": 80, "bbox": [24, 38, 11, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00001064", "file_name": "ADE_val_00001064.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 132597, "bbox": [0, 0, 683, 368], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 95217, "bbox": [0, 292, 682, 220], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 40809, "bbox": [3, 0, 680, 139], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 18336, "bbox": [520, 173, 79, 332], "iscrowd": 0}, {"id": 5309074, "category_id": 13, "area": 18781, "bbox": [1, 189, 71, 322], "iscrowd": 0}, {"id": 3801223, "category_id": 13, "area": 588, "bbox": [658, 210, 23, 97], "iscrowd": 0}, {"id": 3671455, "category_id": 13, "area": 8032, "bbox": [238, 182, 100, 232], "iscrowd": 0}, {"id": 4924052, "category_id": 13, "area": 8303, "bbox": [235, 186, 81, 222], "iscrowd": 0}, {"id": 4589717, "category_id": 13, "area": 393, "bbox": [1, 271, 27, 28], "iscrowd": 0}, {"id": 2754440, "category_id": 13, "area": 6489, "bbox": [339, 177, 58, 194], "iscrowd": 0}, {"id": 5505182, "category_id": 13, "area": 5488, "bbox": [347, 195, 86, 179], "iscrowd": 0}, {"id": 3936142, "category_id": 13, "area": 4181, "bbox": [438, 193, 54, 156], "iscrowd": 0}, {"id": 4721054, "category_id": 13, "area": 3804, "bbox": [448, 206, 73, 143], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2266, "bbox": [494, 186, 46, 109], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 640, "bbox": [596, 256, 78, 46], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 150, "bbox": [506, 164, 15, 10], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 72, "bbox": [439, 38, 15, 6], "iscrowd": 0}, {"id": 1161727, "category_id": 83, "area": 33, "bbox": [496, 65, 11, 5], "iscrowd": 0}, {"id": 966143, "category_id": 83, "area": 62, "bbox": [310, 59, 14, 6], "iscrowd": 0}, {"id": 366079, "category_id": 83, "area": 59, "bbox": [381, 80, 13, 6], "iscrowd": 0}, {"id": 1815807, "category_id": 83, "area": 31, "bbox": [435, 97, 9, 4], "iscrowd": 0}, {"id": 51683, "category_id": 83, "area": 36, "bbox": [466, 129, 10, 4], "iscrowd": 0}, {"id": 1296127, "category_id": 83, "area": 31, "bbox": [561, 121, 10, 4], "iscrowd": 0}, {"id": 1546988, "category_id": 83, "area": 36, "bbox": [666, 113, 10, 4], "iscrowd": 0}, {"id": 1096191, "category_id": 83, "area": 38, "bbox": [538, 86, 11, 4], "iscrowd": 0}, {"id": 1020159, "category_id": 83, "area": 126, "bbox": [656, 3, 19, 10], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 82, "bbox": [625, 160, 15, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00001065", "file_name": "ADE_val_00001065.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 47753, "bbox": [0, 4, 399, 212], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 27607, "bbox": [0, 0, 399, 137], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1700, "bbox": [0, 116, 400, 61], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 6073, "bbox": [0, 193, 363, 41], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2102, "bbox": [75, 200, 271, 21], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 276, "bbox": [191, 182, 11, 36], "iscrowd": 0}, {"id": 4792456, "category_id": 13, "area": 188, "bbox": [246, 185, 9, 31], "iscrowd": 0}, {"id": 2621577, "category_id": 13, "area": 185, "bbox": [327, 184, 11, 30], "iscrowd": 0}, {"id": 5898639, "category_id": 13, "area": 77, "bbox": [346, 184, 8, 14], "iscrowd": 0}, {"id": 4392095, "category_id": 13, "area": 25, "bbox": [364, 183, 6, 6], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 477, "bbox": [340, 189, 36, 28], "iscrowd": 0}, {"id": 13133568, "category_id": 21, "area": 881, "bbox": [363, 184, 37, 36], "iscrowd": 0}, {"id": 14246400, "category_id": 21, "area": 788, "bbox": [358, 208, 42, 26], "iscrowd": 0}, {"id": 11367680, "category_id": 21, "area": 205, "bbox": [0, 179, 17, 16], "iscrowd": 0}, {"id": 14968599, "category_id": 21, "area": 143, "bbox": [12, 177, 15, 19], "iscrowd": 0}, {"id": 13792000, "category_id": 21, "area": 1765, "bbox": [0, 187, 75, 33], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 58, "bbox": [346, 69, 7, 11], "iscrowd": 0}, {"id": 16737536, "category_id": 88, "area": 407, "bbox": [369, 94, 13, 95], "iscrowd": 0}, {"id": 16724480, "category_id": 88, "area": 141, "bbox": [114, 54, 40, 46], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 592, "bbox": [74, 125, 81, 13], "iscrowd": 0}, {"id": 65388, "category_id": 124, "area": 274, "bbox": [264, 123, 36, 14], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 1021, "bbox": [129, 61, 30, 154], "iscrowd": 0}, {"id": 16717887, "category_id": 137, "area": 273, "bbox": [311, 114, 12, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00001066", "file_name": "ADE_val_00001066.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 57841, "bbox": [1, 1, 795, 196], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 143638, "bbox": [1, 98, 795, 414], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1105, "bbox": [147, 277, 30, 60], "iscrowd": 0}, {"id": 5049780, "category_id": 13, "area": 651, "bbox": [168, 261, 27, 48], "iscrowd": 0}, {"id": 4329381, "category_id": 13, "area": 625, "bbox": [203, 244, 26, 38], "iscrowd": 0}, {"id": 5512843, "category_id": 13, "area": 875, "bbox": [112, 313, 30, 44], "iscrowd": 0}, {"id": 2162856, "category_id": 13, "area": 1293, "bbox": [83, 325, 44, 51], "iscrowd": 0}, {"id": 3940224, "category_id": 13, "area": 1931, "bbox": [53, 357, 49, 80], "iscrowd": 0}, {"id": 4136111, "category_id": 13, "area": 603, "bbox": [286, 227, 29, 44], "iscrowd": 0}, {"id": 2162827, "category_id": 13, "area": 1092, "bbox": [312, 330, 34, 56], "iscrowd": 0}, {"id": 4856230, "category_id": 13, "area": 3856, "bbox": [486, 315, 71, 126], "iscrowd": 0}, {"id": 4456574, "category_id": 13, "area": 2857, "bbox": [525, 407, 49, 89], "iscrowd": 0}, {"id": 2228346, "category_id": 13, "area": 2841, "bbox": [657, 420, 51, 88], "iscrowd": 0}, {"id": 5309588, "category_id": 13, "area": 1192, "bbox": [643, 363, 49, 58], "iscrowd": 0}, {"id": 2752658, "category_id": 13, "area": 908, "bbox": [334, 308, 35, 50], "iscrowd": 0}, {"id": 5776258, "category_id": 13, "area": 694, "bbox": [369, 259, 39, 45], "iscrowd": 0}, {"id": 5177466, "category_id": 13, "area": 3365, "bbox": [238, 410, 53, 100], "iscrowd": 0}, {"id": 5571992, "category_id": 13, "area": 1575, "bbox": [155, 456, 48, 54], "iscrowd": 0}, {"id": 2559874, "category_id": 13, "area": 1181, "bbox": [203, 462, 48, 48], "iscrowd": 0}, {"id": 3673506, "category_id": 13, "area": 405, "bbox": [21, 210, 24, 31], "iscrowd": 0}, {"id": 5767830, "category_id": 13, "area": 532, "bbox": [1, 219, 24, 33], "iscrowd": 0}, {"id": 4132232, "category_id": 13, "area": 771, "bbox": [185, 252, 31, 47], "iscrowd": 0}, {"id": 5510315, "category_id": 13, "area": 629, "bbox": [222, 218, 28, 47], "iscrowd": 0}, {"id": 5378973, "category_id": 13, "area": 445, "bbox": [158, 219, 23, 35], "iscrowd": 0}, {"id": 5900978, "category_id": 13, "area": 894, "bbox": [130, 225, 31, 50], "iscrowd": 0}, {"id": 3604653, "category_id": 13, "area": 530, "bbox": [107, 248, 23, 36], "iscrowd": 0}, {"id": 3609976, "category_id": 13, "area": 666, "bbox": [82, 258, 30, 40], "iscrowd": 0}, {"id": 2622131, "category_id": 13, "area": 1042, "bbox": [51, 270, 34, 48], "iscrowd": 0}, {"id": 2949246, "category_id": 13, "area": 679, "bbox": [3, 305, 30, 36], "iscrowd": 0}, {"id": 3539064, "category_id": 13, "area": 565, "bbox": [85, 208, 26, 39], "iscrowd": 0}, {"id": 2887558, "category_id": 13, "area": 739, "bbox": [66, 220, 31, 39], "iscrowd": 0}, {"id": 2490488, "category_id": 13, "area": 776, "bbox": [46, 228, 27, 42], "iscrowd": 0}, {"id": 2818189, "category_id": 13, "area": 521, "bbox": [1, 261, 24, 38], "iscrowd": 0}, {"id": 3478182, "category_id": 13, "area": 751, "bbox": [111, 169, 39, 44], "iscrowd": 0}, {"id": 5244059, "category_id": 13, "area": 184, "bbox": [133, 162, 23, 24], "iscrowd": 0}, {"id": 3211418, "category_id": 13, "area": 228, "bbox": [143, 158, 19, 25], "iscrowd": 0}, {"id": 4128904, "category_id": 13, "area": 292, "bbox": [171, 146, 21, 25], "iscrowd": 0}, {"id": 3150713, "category_id": 13, "area": 201, "bbox": [193, 140, 16, 22], "iscrowd": 0}, {"id": 4391052, "category_id": 13, "area": 99, "bbox": [273, 108, 10, 15], "iscrowd": 0}, {"id": 3934886, "category_id": 13, "area": 76, "bbox": [277, 84, 12, 10], "iscrowd": 0}, {"id": 4194478, "category_id": 13, "area": 119, "bbox": [303, 82, 14, 13], "iscrowd": 0}, {"id": 4260989, "category_id": 13, "area": 100, "bbox": [316, 85, 15, 12], "iscrowd": 0}, {"id": 3082145, "category_id": 13, "area": 82, "bbox": [331, 87, 13, 11], "iscrowd": 0}, {"id": 4659342, "category_id": 13, "area": 81, "bbox": [346, 86, 13, 11], "iscrowd": 0}, {"id": 2752935, "category_id": 13, "area": 109, "bbox": [364, 87, 15, 11], "iscrowd": 0}, {"id": 3801250, "category_id": 13, "area": 146, "bbox": [385, 88, 31, 10], "iscrowd": 0}, {"id": 3342492, "category_id": 13, "area": 119, "bbox": [418, 89, 15, 12], "iscrowd": 0}, {"id": 2032301, "category_id": 13, "area": 108, "bbox": [434, 89, 15, 12], "iscrowd": 0}, {"id": 5767340, "category_id": 13, "area": 161, "bbox": [450, 88, 18, 14], "iscrowd": 0}, {"id": 3351459, "category_id": 13, "area": 114, "bbox": [468, 89, 11, 14], "iscrowd": 0}, {"id": 4391068, "category_id": 13, "area": 106, "bbox": [483, 92, 14, 13], "iscrowd": 0}, {"id": 3543949, "category_id": 13, "area": 125, "bbox": [497, 91, 14, 14], "iscrowd": 0}, {"id": 5636274, "category_id": 13, "area": 81, "bbox": [510, 93, 12, 13], "iscrowd": 0}, {"id": 2424997, "category_id": 13, "area": 119, "bbox": [530, 92, 13, 14], "iscrowd": 0}, {"id": 4267145, "category_id": 13, "area": 92, "bbox": [548, 94, 12, 12], "iscrowd": 0}, {"id": 3866772, "category_id": 13, "area": 86, "bbox": [561, 96, 12, 11], "iscrowd": 0}, {"id": 5439658, "category_id": 13, "area": 141, "bbox": [577, 94, 15, 15], "iscrowd": 0}, {"id": 5904560, "category_id": 13, "area": 127, "bbox": [593, 95, 14, 14], "iscrowd": 0}, {"id": 3874220, "category_id": 13, "area": 242, "bbox": [606, 95, 35, 15], "iscrowd": 0}, {"id": 4785561, "category_id": 13, "area": 92, "bbox": [641, 98, 13, 12], "iscrowd": 0}, {"id": 5767336, "category_id": 13, "area": 127, "bbox": [659, 99, 16, 14], "iscrowd": 0}, {"id": 3807367, "category_id": 13, "area": 119, "bbox": [675, 99, 14, 14], "iscrowd": 0}, {"id": 3145905, "category_id": 13, "area": 150, "bbox": [691, 100, 14, 14], "iscrowd": 0}, {"id": 4587644, "category_id": 13, "area": 230, "bbox": [605, 176, 22, 26], "iscrowd": 0}, {"id": 5768602, "category_id": 13, "area": 194, "bbox": [603, 159, 19, 22], "iscrowd": 0}, {"id": 2621600, "category_id": 13, "area": 469, "bbox": [657, 162, 21, 35], "iscrowd": 0}, {"id": 4259971, "category_id": 13, "area": 133, "bbox": [555, 148, 15, 17], "iscrowd": 0}, {"id": 2162850, "category_id": 13, "area": 114, "bbox": [551, 157, 15, 15], "iscrowd": 0}, {"id": 3868804, "category_id": 13, "area": 185, "bbox": [565, 164, 12, 21], "iscrowd": 0}, {"id": 5380772, "category_id": 13, "area": 279, "bbox": [555, 171, 19, 32], "iscrowd": 0}, {"id": 3089275, "category_id": 13, "area": 305, "bbox": [551, 184, 13, 32], "iscrowd": 0}, {"id": 5574539, "category_id": 13, "area": 721, "bbox": [481, 194, 27, 48], "iscrowd": 0}, {"id": 4070015, "category_id": 13, "area": 218, "bbox": [498, 170, 18, 25], "iscrowd": 0}, {"id": 3808689, "category_id": 13, "area": 220, "bbox": [496, 157, 16, 24], "iscrowd": 0}, {"id": 5316225, "category_id": 13, "area": 144, "bbox": [509, 153, 11, 21], "iscrowd": 0}, {"id": 4006557, "category_id": 13, "area": 138, "bbox": [448, 157, 13, 19], "iscrowd": 0}, {"id": 3080325, "category_id": 13, "area": 287, "bbox": [443, 162, 25, 24], "iscrowd": 0}, {"id": 5381766, "category_id": 13, "area": 279, "bbox": [436, 179, 16, 28], "iscrowd": 0}, {"id": 3806643, "category_id": 13, "area": 192, "bbox": [426, 188, 16, 28], "iscrowd": 0}, {"id": 2752908, "category_id": 13, "area": 609, "bbox": [360, 136, 19, 51], "iscrowd": 0}, {"id": 4001959, "category_id": 13, "area": 546, "bbox": [355, 189, 20, 46], "iscrowd": 0}, {"id": 3937150, "category_id": 13, "area": 225, "bbox": [359, 181, 26, 30], "iscrowd": 0}, {"id": 3801248, "category_id": 13, "area": 291, "bbox": [372, 173, 19, 30], "iscrowd": 0}, {"id": 5702807, "category_id": 13, "area": 264, "bbox": [383, 163, 18, 27], "iscrowd": 0}, {"id": 5702813, "category_id": 13, "area": 204, "bbox": [389, 156, 17, 23], "iscrowd": 0}, {"id": 4915364, "category_id": 13, "area": 122, "bbox": [400, 156, 13, 15], "iscrowd": 0}, {"id": 4849811, "category_id": 13, "area": 66, "bbox": [395, 149, 10, 9], "iscrowd": 0}, {"id": 5181083, "category_id": 13, "area": 202, "bbox": [405, 139, 15, 23], "iscrowd": 0}, {"id": 4718763, "category_id": 13, "area": 93, "bbox": [304, 134, 11, 22], "iscrowd": 0}, {"id": 3539070, "category_id": 13, "area": 185, "bbox": [280, 142, 32, 30], "iscrowd": 0}, {"id": 3282072, "category_id": 13, "area": 159, "bbox": [274, 158, 14, 20], "iscrowd": 0}, {"id": 3149185, "category_id": 13, "area": 368, "bbox": [257, 164, 23, 26], "iscrowd": 0}, {"id": 5111955, "category_id": 13, "area": 415, "bbox": [237, 174, 22, 34], "iscrowd": 0}, {"id": 2558380, "category_id": 13, "area": 333, "bbox": [401, 104, 13, 42], "iscrowd": 0}, {"id": 4068777, "category_id": 13, "area": 235, "bbox": [331, 120, 16, 25], "iscrowd": 0}, {"id": 2297481, "category_id": 13, "area": 111, "bbox": [440, 104, 14, 14], "iscrowd": 0}, {"id": 4523414, "category_id": 13, "area": 73, "bbox": [430, 106, 10, 14], "iscrowd": 0}, {"id": 5898374, "category_id": 13, "area": 118, "bbox": [426, 114, 16, 17], "iscrowd": 0}, {"id": 2302851, "category_id": 13, "area": 121, "bbox": [347, 113, 11, 17], "iscrowd": 0}, {"id": 4459688, "category_id": 13, "area": 108, "bbox": [354, 110, 12, 15], "iscrowd": 0}, {"id": 3543716, "category_id": 13, "area": 104, "bbox": [414, 120, 12, 19], "iscrowd": 0}, {"id": 3416468, "category_id": 13, "area": 118, "bbox": [475, 123, 9, 19], "iscrowd": 0}, {"id": 4915374, "category_id": 13, "area": 389, "bbox": [512, 117, 54, 32], "iscrowd": 0}, {"id": 5767816, "category_id": 13, "area": 151, "bbox": [561, 120, 11, 22], "iscrowd": 0}, {"id": 3744171, "category_id": 13, "area": 330, "bbox": [643, 136, 17, 30], "iscrowd": 0}, {"id": 4463242, "category_id": 13, "area": 194, "bbox": [692, 135, 16, 21], "iscrowd": 0}, {"id": 5505146, "category_id": 13, "area": 344, "bbox": [702, 140, 21, 32], "iscrowd": 0}, {"id": 5510542, "category_id": 13, "area": 276, "bbox": [743, 143, 23, 28], "iscrowd": 0}, {"id": 4587688, "category_id": 13, "area": 150, "bbox": [742, 139, 20, 19], "iscrowd": 0}, {"id": 4595858, "category_id": 13, "area": 123, "bbox": [739, 135, 18, 21], "iscrowd": 0}, {"id": 2036373, "category_id": 13, "area": 135, "bbox": [731, 133, 19, 19], "iscrowd": 0}, {"id": 2951299, "category_id": 13, "area": 667, "bbox": [728, 117, 52, 54], "iscrowd": 0}, {"id": 3342467, "category_id": 13, "area": 126, "bbox": [726, 123, 17, 19], "iscrowd": 0}, {"id": 3145861, "category_id": 13, "area": 207, "bbox": [597, 126, 15, 25], "iscrowd": 0}, {"id": 4522121, "category_id": 13, "area": 428, "bbox": [462, 235, 24, 35], "iscrowd": 0}, {"id": 3604647, "category_id": 13, "area": 1407, "bbox": [635, 305, 33, 67], "iscrowd": 0}, {"id": 3416215, "category_id": 13, "area": 540, "bbox": [630, 293, 38, 51], "iscrowd": 0}, {"id": 2759347, "category_id": 13, "area": 496, "bbox": [628, 276, 22, 42], "iscrowd": 0}, {"id": 2951578, "category_id": 13, "area": 414, "bbox": [623, 265, 16, 41], "iscrowd": 0}, {"id": 2359447, "category_id": 13, "area": 1523, "bbox": [646, 398, 54, 63], "iscrowd": 0}, {"id": 5441188, "category_id": 13, "area": 1261, "bbox": [285, 342, 51, 68], "iscrowd": 0}, {"id": 3083396, "category_id": 13, "area": 646, "bbox": [433, 306, 29, 37], "iscrowd": 0}, {"id": 3473533, "category_id": 13, "area": 619, "bbox": [456, 250, 115, 41], "iscrowd": 0}, {"id": 3673744, "category_id": 13, "area": 586, "bbox": [537, 268, 25, 47], "iscrowd": 0}, {"id": 2891164, "category_id": 13, "area": 449, "bbox": [542, 283, 32, 43], "iscrowd": 0}, {"id": 2630269, "category_id": 13, "area": 1598, "bbox": [734, 341, 51, 72], "iscrowd": 0}, {"id": 3276928, "category_id": 13, "area": 783, "bbox": [724, 325, 36, 46], "iscrowd": 0}, {"id": 3539081, "category_id": 13, "area": 234, "bbox": [713, 257, 29, 30], "iscrowd": 0}, {"id": 5046446, "category_id": 13, "area": 574, "bbox": [707, 269, 27, 40], "iscrowd": 0}, {"id": 3213477, "category_id": 13, "area": 800, "bbox": [717, 290, 39, 48], "iscrowd": 0}, {"id": 5767313, "category_id": 13, "area": 743, "bbox": [727, 283, 35, 60], "iscrowd": 0}, {"id": 2883750, "category_id": 13, "area": 835, "bbox": [750, 212, 30, 64], "iscrowd": 0}, {"id": 3932335, "category_id": 13, "area": 478, "bbox": [722, 178, 27, 33], "iscrowd": 0}, {"id": 4264340, "category_id": 13, "area": 183, "bbox": [715, 158, 19, 26], "iscrowd": 0}, {"id": 5507457, "category_id": 13, "area": 186, "bbox": [719, 166, 18, 24], "iscrowd": 0}, {"id": 3146648, "category_id": 13, "area": 310, "bbox": [381, 252, 23, 28], "iscrowd": 0}, {"id": 3611277, "category_id": 13, "area": 341, "bbox": [392, 245, 19, 28], "iscrowd": 0}, {"id": 3219843, "category_id": 13, "area": 217, "bbox": [738, 200, 15, 22], "iscrowd": 0}, {"id": 4333707, "category_id": 13, "area": 164, "bbox": [743, 207, 17, 26], "iscrowd": 0}, {"id": 3080352, "category_id": 13, "area": 861, "bbox": [273, 258, 28, 43], "iscrowd": 0}, {"id": 5111974, "category_id": 13, "area": 1078, "bbox": [233, 271, 40, 49], "iscrowd": 0}, {"id": 5310126, "category_id": 13, "area": 925, "bbox": [190, 324, 42, 55], "iscrowd": 0}, {"id": 4849819, "category_id": 13, "area": 1148, "bbox": [190, 345, 32, 57], "iscrowd": 0}, {"id": 2425009, "category_id": 13, "area": 2089, "bbox": [146, 361, 41, 79], "iscrowd": 0}, {"id": 3412647, "category_id": 13, "area": 3162, "bbox": [272, 366, 59, 113], "iscrowd": 0}, {"id": 5111949, "category_id": 13, "area": 2733, "bbox": [369, 386, 67, 96], "iscrowd": 0}, {"id": 2035364, "category_id": 13, "area": 1847, "bbox": [513, 223, 37, 99], "iscrowd": 0}, {"id": 5440401, "category_id": 13, "area": 1230, "bbox": [415, 318, 39, 50], "iscrowd": 0}, {"id": 3739570, "category_id": 13, "area": 375, "bbox": [273, 241, 31, 36], "iscrowd": 0}, {"id": 3670139, "category_id": 13, "area": 339, "bbox": [158, 178, 20, 27], "iscrowd": 0}, {"id": 3089058, "category_id": 13, "area": 203, "bbox": [184, 142, 16, 25], "iscrowd": 0}, {"id": 4265390, "category_id": 13, "area": 324, "bbox": [205, 158, 21, 26], "iscrowd": 0}, {"id": 2498218, "category_id": 13, "area": 729, "bbox": [216, 139, 30, 58], "iscrowd": 0}, {"id": 5505171, "category_id": 13, "area": 444, "bbox": [250, 130, 18, 40], "iscrowd": 0}, {"id": 2034573, "category_id": 13, "area": 268, "bbox": [277, 120, 17, 30], "iscrowd": 0}, {"id": 5701789, "category_id": 13, "area": 210, "bbox": [296, 113, 13, 26], "iscrowd": 0}, {"id": 2293883, "category_id": 13, "area": 724, "bbox": [536, 202, 38, 42], "iscrowd": 0}, {"id": 3873203, "category_id": 13, "area": 1021, "bbox": [412, 184, 104, 48], "iscrowd": 0}, {"id": 5900940, "category_id": 13, "area": 433, "bbox": [280, 180, 22, 32], "iscrowd": 0}, {"id": 3607944, "category_id": 13, "area": 216, "bbox": [293, 178, 15, 25], "iscrowd": 0}, {"id": 5707690, "category_id": 13, "area": 252, "bbox": [301, 170, 17, 30], "iscrowd": 0}, {"id": 5701755, "category_id": 13, "area": 324, "bbox": [315, 161, 16, 33], "iscrowd": 0}, {"id": 2165644, "category_id": 13, "area": 203, "bbox": [325, 155, 15, 26], "iscrowd": 0}, {"id": 2885496, "category_id": 13, "area": 640, "bbox": [335, 144, 25, 56], "iscrowd": 0}, {"id": 4194477, "category_id": 13, "area": 278, "bbox": [291, 144, 19, 24], "iscrowd": 0}, {"id": 3997858, "category_id": 13, "area": 163, "bbox": [379, 120, 13, 21], "iscrowd": 0}, {"id": 3999103, "category_id": 13, "area": 107, "bbox": [340, 114, 13, 19], "iscrowd": 0}, {"id": 4067761, "category_id": 13, "area": 271, "bbox": [603, 133, 18, 25], "iscrowd": 0}, {"id": 2821037, "category_id": 13, "area": 1442, "bbox": [548, 386, 49, 65], "iscrowd": 0}, {"id": 5177481, "category_id": 13, "area": 1062, "bbox": [629, 344, 60, 62], "iscrowd": 0}, {"id": 5708168, "category_id": 13, "area": 347, "bbox": [631, 249, 20, 34], "iscrowd": 0}, {"id": 4858271, "category_id": 13, "area": 345, "bbox": [451, 261, 22, 35], "iscrowd": 0}, {"id": 5906071, "category_id": 13, "area": 525, "bbox": [445, 270, 24, 45], "iscrowd": 0}, {"id": 2752936, "category_id": 13, "area": 426, "bbox": [437, 283, 27, 41], "iscrowd": 0}, {"id": 4128934, "category_id": 13, "area": 442, "bbox": [360, 280, 35, 40], "iscrowd": 0}, {"id": 5310618, "category_id": 13, "area": 749, "bbox": [346, 290, 36, 50], "iscrowd": 0}, {"id": 3212175, "category_id": 13, "area": 294, "bbox": [388, 234, 29, 25], "iscrowd": 0}, {"id": 5374084, "category_id": 13, "area": 182, "bbox": [749, 190, 13, 26], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1083, "bbox": [100, 88, 26, 55], "iscrowd": 0}, {"id": 3014406, "category_id": 15, "area": 546, "bbox": [230, 59, 13, 51], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1867, "bbox": [67, 146, 60, 41], "iscrowd": 0}, {"id": 6228223, "category_id": 16, "area": 1644, "bbox": [162, 105, 67, 39], "iscrowd": 0}, {"id": 6887405, "category_id": 16, "area": 9332, "bbox": [75, 246, 209, 208], "iscrowd": 0}, {"id": 5637095, "category_id": 16, "area": 2065, "bbox": [120, 142, 131, 90], "iscrowd": 0}, {"id": 3670271, "category_id": 16, "area": 735, "bbox": [260, 110, 69, 43], "iscrowd": 0}, {"id": 7340282, "category_id": 16, "area": 652, "bbox": [339, 111, 62, 31], "iscrowd": 0}, {"id": 4391167, "category_id": 16, "area": 3474, "bbox": [239, 112, 240, 130], "iscrowd": 0}, {"id": 6291711, "category_id": 16, "area": 2817, "bbox": [371, 155, 79, 93], "iscrowd": 0}, {"id": 6295033, "category_id": 16, "area": 3175, "bbox": [503, 148, 49, 112], "iscrowd": 0}, {"id": 3544063, "category_id": 16, "area": 1332, "bbox": [606, 110, 35, 58], "iscrowd": 0}, {"id": 4659455, "category_id": 16, "area": 3450, "bbox": [622, 169, 59, 99], "iscrowd": 0}, {"id": 5439733, "category_id": 16, "area": 10138, "bbox": [319, 253, 139, 229], "iscrowd": 0}, {"id": 4333567, "category_id": 16, "area": 12386, "bbox": [561, 269, 93, 238], "iscrowd": 0}, {"id": 3608063, "category_id": 16, "area": 4713, "bbox": [264, 97, 450, 40], "iscrowd": 0}, {"id": 5570793, "category_id": 16, "area": 646, "bbox": [697, 130, 49, 46], "iscrowd": 0}, {"id": 4002785, "category_id": 16, "area": 2128, "bbox": [742, 174, 54, 104], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 29070, "bbox": [339, 1, 354, 91], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 639, "bbox": [679, 229, 32, 42], "iscrowd": 0}, {"id": 22240, "category_id": 20, "area": 910, "bbox": [34, 382, 30, 67], "iscrowd": 0}, {"id": 19667, "category_id": 20, "area": 354, "bbox": [307, 252, 17, 44], "iscrowd": 0}, {"id": 21719, "category_id": 20, "area": 396, "bbox": [277, 274, 31, 51], "iscrowd": 0}, {"id": 10953, "category_id": 20, "area": 510, "bbox": [257, 302, 36, 39], "iscrowd": 0}, {"id": 25273, "category_id": 20, "area": 461, "bbox": [222, 322, 46, 41], "iscrowd": 0}, {"id": 929741, "category_id": 20, "area": 996, "bbox": [223, 358, 27, 58], "iscrowd": 0}, {"id": 1391300, "category_id": 20, "area": 1049, "bbox": [174, 399, 35, 53], "iscrowd": 0}, {"id": 603325, "category_id": 20, "area": 419, "bbox": [609, 224, 23, 38], "iscrowd": 0}, {"id": 13486, "category_id": 20, "area": 174, "bbox": [666, 197, 24, 16], "iscrowd": 0}, {"id": 1845935, "category_id": 20, "area": 149, "bbox": [669, 205, 21, 14], "iscrowd": 0}, {"id": 939973, "category_id": 20, "area": 152, "bbox": [672, 212, 21, 15], "iscrowd": 0}, {"id": 353222, "category_id": 20, "area": 212, "bbox": [673, 219, 25, 19], "iscrowd": 0}, {"id": 2113256, "category_id": 20, "area": 291, "bbox": [415, 213, 26, 34], "iscrowd": 0}, {"id": 1334249, "category_id": 20, "area": 273, "bbox": [347, 206, 20, 36], "iscrowd": 0}, {"id": 16343, "category_id": 20, "area": 398, "bbox": [281, 204, 29, 30], "iscrowd": 0}, {"id": 2181856, "category_id": 20, "area": 217, "bbox": [698, 155, 16, 26], "iscrowd": 0}, {"id": 14261, "category_id": 20, "area": 243, "bbox": [684, 150, 14, 26], "iscrowd": 0}, {"id": 1266394, "category_id": 20, "area": 96, "bbox": [748, 159, 17, 15], "iscrowd": 0}, {"id": 1457381, "category_id": 20, "area": 137, "bbox": [477, 261, 11, 35], "iscrowd": 0}, {"id": 417726, "category_id": 20, "area": 171, "bbox": [465, 302, 11, 39], "iscrowd": 0}, {"id": 548032, "category_id": 20, "area": 1033, "bbox": [727, 375, 32, 71], "iscrowd": 0}, {"id": 20447, "category_id": 20, "area": 363, "bbox": [746, 235, 23, 39], "iscrowd": 0}, {"id": 11719, "category_id": 20, "area": 613, "bbox": [113, 274, 26, 38], "iscrowd": 0}, {"id": 14043, "category_id": 20, "area": 309, "bbox": [448, 350, 14, 39], "iscrowd": 0}, {"id": 2050246, "category_id": 20, "area": 1149, "bbox": [408, 424, 149, 86], "iscrowd": 0}, {"id": 928442, "category_id": 20, "area": 220, "bbox": [165, 244, 16, 27], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 96, "bbox": [102, 78, 12, 10], "iscrowd": 0}, {"id": 9961721, "category_id": 44, "area": 49, "bbox": [232, 50, 7, 8], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 136, "bbox": [599, 390, 7, 24], "iscrowd": 0}, {"id": 2227968, "category_id": 99, "area": 85, "bbox": [228, 274, 6, 19], "iscrowd": 0}, {"id": 2288643, "category_id": 99, "area": 83, "bbox": [219, 280, 6, 20], "iscrowd": 0}, {"id": 59650, "category_id": 99, "area": 66, "bbox": [602, 313, 4, 19], "iscrowd": 0}, {"id": 62208, "category_id": 99, "area": 78, "bbox": [609, 315, 5, 19], "iscrowd": 0}, {"id": 1769216, "category_id": 99, "area": 41, "bbox": [612, 264, 4, 17], "iscrowd": 0}, {"id": 1507088, "category_id": 99, "area": 136, "bbox": [356, 393, 8, 24], "iscrowd": 0}, {"id": 2226176, "category_id": 99, "area": 100, "bbox": [361, 358, 6, 21], "iscrowd": 0}, {"id": 1828104, "category_id": 99, "area": 71, "bbox": [408, 287, 5, 19], "iscrowd": 0}, {"id": 65280, "category_id": 99, "area": 100, "bbox": [608, 392, 7, 22], "iscrowd": 0}, {"id": 65308, "category_id": 99, "area": 61, "bbox": [423, 277, 4, 18], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 124, "bbox": [577, 370, 18, 9], "iscrowd": 0}, {"id": 14022912, "category_id": 143, "area": 110, "bbox": [581, 347, 13, 12], "iscrowd": 0}, {"id": 13230592, "category_id": 143, "area": 117, "bbox": [577, 437, 15, 9], "iscrowd": 0}, {"id": 11140864, "category_id": 143, "area": 127, "bbox": [616, 354, 19, 9], "iscrowd": 0}, {"id": 11596043, "category_id": 143, "area": 101, "bbox": [625, 434, 16, 9], "iscrowd": 0}, {"id": 11468544, "category_id": 143, "area": 114, "bbox": [625, 464, 15, 11], "iscrowd": 0}, {"id": 12640775, "category_id": 143, "area": 281, "bbox": [321, 367, 87, 52], "iscrowd": 0}, {"id": 11726080, "category_id": 143, "area": 82, "bbox": [331, 401, 13, 7], "iscrowd": 0}, {"id": 11068686, "category_id": 143, "area": 72, "bbox": [365, 341, 12, 7], "iscrowd": 0}, {"id": 14024448, "category_id": 143, "area": 57, "bbox": [574, 285, 13, 5], "iscrowd": 0}, {"id": 11336960, "category_id": 143, "area": 83, "bbox": [575, 329, 15, 7], "iscrowd": 0}, {"id": 11403008, "category_id": 143, "area": 95, "bbox": [627, 407, 13, 9], "iscrowd": 0}, {"id": 10419968, "category_id": 143, "area": 27, "bbox": [612, 296, 9, 3], "iscrowd": 0}, {"id": 11398656, "category_id": 143, "area": 49, "bbox": [613, 310, 12, 5], "iscrowd": 0}, {"id": 11927296, "category_id": 143, "area": 73, "bbox": [423, 299, 13, 7], "iscrowd": 0}, {"id": 12058368, "category_id": 143, "area": 125, "bbox": [392, 267, 26, 32], "iscrowd": 0}, {"id": 10551040, "category_id": 143, "area": 53, "bbox": [436, 271, 10, 7], "iscrowd": 0}, {"id": 12317184, "category_id": 143, "area": 63, "bbox": [576, 297, 13, 7], "iscrowd": 0}, {"id": 10419993, "category_id": 143, "area": 88, "bbox": [373, 414, 15, 8], "iscrowd": 0}, {"id": 10807296, "category_id": 143, "area": 71, "bbox": [136, 354, 12, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00001067", "file_name": "ADE_val_00001067.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 54306, "bbox": [0, 2, 432, 255], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 49111, "bbox": [0, 0, 433, 226], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 6145, "bbox": [2, 244, 337, 30], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4658, "bbox": [328, 188, 92, 84], "iscrowd": 0}, {"id": 3408012, "category_id": 13, "area": 297, "bbox": [413, 243, 20, 31], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 2489, "bbox": [2, 211, 331, 62], "iscrowd": 0}]}, {"image_id": "ADE_val_00001068", "file_name": "ADE_val_00001068.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14015, "bbox": [0, 0, 161, 214], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 9638, "bbox": [64, 125, 235, 88], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 5655, "bbox": [8, 64, 58, 149], "iscrowd": 0}, {"id": 3604641, "category_id": 13, "area": 3071, "bbox": [163, 43, 92, 91], "iscrowd": 0}, {"id": 4391044, "category_id": 13, "area": 7621, "bbox": [72, 45, 99, 168], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3086, "bbox": [210, 149, 90, 65], "iscrowd": 0}, {"id": 25527, "category_id": 20, "area": 3171, "bbox": [43, 143, 99, 71], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 785, "bbox": [1, 29, 18, 53], "iscrowd": 0}, {"id": 2818303, "category_id": 23, "area": 432, "bbox": [25, 37, 17, 34], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 11241, "bbox": [158, 0, 141, 132], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 181, "bbox": [251, 67, 9, 28], "iscrowd": 0}, {"id": 2555648, "category_id": 99, "area": 148, "bbox": [274, 66, 7, 29], "iscrowd": 0}, {"id": 327424, "category_id": 99, "area": 206, "bbox": [184, 68, 9, 30], "iscrowd": 0}, {"id": 2225930, "category_id": 99, "area": 147, "bbox": [183, 40, 10, 23], "iscrowd": 0}, {"id": 917255, "category_id": 99, "area": 137, "bbox": [227, 39, 9, 23], "iscrowd": 0}, {"id": 59675, "category_id": 99, "area": 86, "bbox": [250, 41, 7, 20], "iscrowd": 0}, {"id": 2096911, "category_id": 99, "area": 261, "bbox": [185, 1, 19, 15], "iscrowd": 0}, {"id": 2682909, "category_id": 99, "area": 353, "bbox": [207, 0, 26, 15], "iscrowd": 0}, {"id": 851724, "category_id": 99, "area": 121, "bbox": [283, 69, 7, 27], "iscrowd": 0}, {"id": 2353152, "category_id": 99, "area": 486, "bbox": [255, 96, 18, 39], "iscrowd": 0}, {"id": 65306, "category_id": 99, "area": 121, "bbox": [194, 71, 6, 27], "iscrowd": 0}, {"id": 1568259, "category_id": 99, "area": 138, "bbox": [263, 75, 10, 21], "iscrowd": 0}, {"id": 130816, "category_id": 99, "area": 97, "bbox": [237, 44, 7, 18], "iscrowd": 0}, {"id": 2686733, "category_id": 99, "area": 73, "bbox": [233, 0, 6, 15], "iscrowd": 0}, {"id": 256020, "category_id": 99, "area": 89, "bbox": [289, 68, 5, 27], "iscrowd": 0}, {"id": 455168, "category_id": 99, "area": 61, "bbox": [262, 2, 6, 12], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 534, "bbox": [134, 44, 21, 27], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 77, "bbox": [135, 110, 8, 13], "iscrowd": 0}, {"id": 12035096, "category_id": 148, "area": 201, "bbox": [192, 108, 13, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00001069", "file_name": "ADE_val_00001069.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 42192, "bbox": [2, 1, 565, 297], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 976, "bbox": [2, 298, 19, 212], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 192335, "bbox": [2, 106, 565, 405], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 7131, "bbox": [359, 16, 147, 78], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 6137, "bbox": [251, 1, 128, 109], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1894, "bbox": [156, 120, 107, 63], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 1331, "bbox": [74, 84, 27, 70], "iscrowd": 0}, {"id": 2358537, "category_id": 99, "area": 511, "bbox": [184, 55, 12, 64], "iscrowd": 0}, {"id": 524039, "category_id": 99, "area": 814, "bbox": [98, 68, 18, 81], "iscrowd": 0}, {"id": 261888, "category_id": 99, "area": 422, "bbox": [214, 77, 16, 40], "iscrowd": 0}, {"id": 786176, "category_id": 99, "area": 467, "bbox": [230, 66, 14, 44], "iscrowd": 0}, {"id": 2031378, "category_id": 99, "area": 529, "bbox": [526, 60, 20, 38], "iscrowd": 0}, {"id": 2615040, "category_id": 99, "area": 658, "bbox": [445, 107, 21, 49], "iscrowd": 0}, {"id": 65280, "category_id": 99, "area": 649, "bbox": [467, 110, 21, 47], "iscrowd": 0}, {"id": 1703680, "category_id": 99, "area": 572, "bbox": [493, 112, 18, 46], "iscrowd": 0}, {"id": 1440768, "category_id": 99, "area": 693, "bbox": [524, 111, 21, 49], "iscrowd": 0}, {"id": 2488599, "category_id": 99, "area": 1345, "bbox": [97, 122, 29, 71], "iscrowd": 0}, {"id": 2490132, "category_id": 99, "area": 685, "bbox": [196, 74, 17, 69], "iscrowd": 0}, {"id": 1703682, "category_id": 99, "area": 633, "bbox": [278, 108, 18, 53], "iscrowd": 0}, {"id": 1894422, "category_id": 99, "area": 619, "bbox": [509, 102, 18, 56], "iscrowd": 0}, {"id": 1572609, "category_id": 99, "area": 648, "bbox": [458, 68, 16, 62], "iscrowd": 0}, {"id": 61952, "category_id": 99, "area": 380, "bbox": [429, 111, 16, 47], "iscrowd": 0}, {"id": 655104, "category_id": 99, "area": 516, "bbox": [488, 86, 14, 69], "iscrowd": 0}, {"id": 1572631, "category_id": 99, "area": 511, "bbox": [436, 85, 17, 47], "iscrowd": 0}, {"id": 65290, "category_id": 99, "area": 244, "bbox": [448, 67, 8, 40], "iscrowd": 0}, {"id": 1499648, "category_id": 99, "area": 346, "bbox": [505, 73, 10, 56], "iscrowd": 0}, {"id": 392989, "category_id": 99, "area": 309, "bbox": [470, 44, 13, 45], "iscrowd": 0}, {"id": 2031366, "category_id": 99, "area": 313, "bbox": [454, 44, 9, 50], "iscrowd": 0}, {"id": 2155031, "category_id": 99, "area": 291, "bbox": [480, 87, 13, 40], "iscrowd": 0}, {"id": 720649, "category_id": 99, "area": 483, "bbox": [551, 110, 15, 49], "iscrowd": 0}, {"id": 1179395, "category_id": 99, "area": 439, "bbox": [301, 119, 16, 43], "iscrowd": 0}, {"id": 65288, "category_id": 99, "area": 204, "bbox": [470, 73, 10, 35], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 699, "bbox": [283, 255, 24, 33], "iscrowd": 0}, {"id": 12639272, "category_id": 148, "area": 326, "bbox": [50, 171, 14, 28], "iscrowd": 0}, {"id": 14399793, "category_id": 148, "area": 303, "bbox": [68, 170, 12, 28], "iscrowd": 0}, {"id": 14344241, "category_id": 148, "area": 333, "bbox": [218, 201, 15, 25], "iscrowd": 0}, {"id": 11189266, "category_id": 148, "area": 457, "bbox": [258, 134, 16, 32], "iscrowd": 0}, {"id": 14601264, "category_id": 148, "area": 438, "bbox": [241, 137, 17, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00001070", "file_name": "ADE_val_00001070.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 36838, "bbox": [0, 27, 400, 187], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9467, "bbox": [0, 214, 399, 85], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 13714, "bbox": [0, 0, 399, 46], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 35450, "bbox": [10, 136, 390, 146], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 2885, "bbox": [192, 36, 68, 46], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 159, "bbox": [90, 119, 10, 22], "iscrowd": 0}, {"id": 58137, "category_id": 99, "area": 109, "bbox": [205, 95, 7, 24], "iscrowd": 0}, {"id": 65280, "category_id": 99, "area": 167, "bbox": [104, 117, 10, 24], "iscrowd": 0}, {"id": 1764870, "category_id": 99, "area": 131, "bbox": [119, 119, 8, 22], "iscrowd": 0}, {"id": 652057, "category_id": 99, "area": 89, "bbox": [136, 122, 7, 19], "iscrowd": 0}, {"id": 2287872, "category_id": 99, "area": 108, "bbox": [148, 120, 8, 20], "iscrowd": 0}, {"id": 458496, "category_id": 99, "area": 53, "bbox": [35, 96, 6, 17], "iscrowd": 0}, {"id": 59674, "category_id": 99, "area": 71, "bbox": [41, 96, 6, 17], "iscrowd": 0}, {"id": 1507077, "category_id": 99, "area": 75, "bbox": [48, 96, 7, 17], "iscrowd": 0}, {"id": 65306, "category_id": 99, "area": 93, "bbox": [54, 94, 8, 19], "iscrowd": 0}, {"id": 1173003, "category_id": 99, "area": 98, "bbox": [62, 93, 7, 20], "iscrowd": 0}, {"id": 63002, "category_id": 99, "area": 69, "bbox": [69, 96, 6, 16], "iscrowd": 0}, {"id": 1959196, "category_id": 99, "area": 92, "bbox": [75, 95, 7, 18], "iscrowd": 0}, {"id": 1310478, "category_id": 99, "area": 82, "bbox": [82, 95, 6, 18], "iscrowd": 0}, {"id": 65300, "category_id": 99, "area": 99, "bbox": [71, 118, 6, 23], "iscrowd": 0}, {"id": 327439, "category_id": 99, "area": 121, "bbox": [63, 120, 7, 22], "iscrowd": 0}, {"id": 1178653, "category_id": 99, "area": 82, "bbox": [228, 97, 5, 19], "iscrowd": 0}, {"id": 60693, "category_id": 99, "area": 80, "bbox": [234, 96, 5, 20], "iscrowd": 0}, {"id": 1113856, "category_id": 99, "area": 75, "bbox": [240, 96, 5, 20], "iscrowd": 0}, {"id": 1507072, "category_id": 99, "area": 66, "bbox": [246, 96, 5, 19], "iscrowd": 0}, {"id": 65288, "category_id": 99, "area": 109, "bbox": [257, 97, 7, 21], "iscrowd": 0}, {"id": 2359063, "category_id": 99, "area": 88, "bbox": [190, 97, 7, 20], "iscrowd": 0}, {"id": 65299, "category_id": 99, "area": 82, "bbox": [213, 99, 7, 18], "iscrowd": 0}, {"id": 1959452, "category_id": 99, "area": 100, "bbox": [162, 96, 7, 21], "iscrowd": 0}, {"id": 2686722, "category_id": 99, "area": 71, "bbox": [325, 122, 6, 16], "iscrowd": 0}, {"id": 2614528, "category_id": 99, "area": 61, "bbox": [330, 122, 6, 15], "iscrowd": 0}, {"id": 2679818, "category_id": 99, "area": 71, "bbox": [336, 119, 5, 18], "iscrowd": 0}, {"id": 1769244, "category_id": 99, "area": 43, "bbox": [333, 97, 5, 16], "iscrowd": 0}, {"id": 910848, "category_id": 99, "area": 48, "bbox": [331, 109, 6, 13], "iscrowd": 0}, {"id": 124928, "category_id": 99, "area": 48, "bbox": [311, 98, 5, 14], "iscrowd": 0}, {"id": 451584, "category_id": 99, "area": 82, "bbox": [245, 110, 6, 17], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 3463, "bbox": [79, 172, 60, 124], "iscrowd": 0}, {"id": 15129856, "category_id": 111, "area": 3794, "bbox": [150, 168, 54, 130], "iscrowd": 0}, {"id": 15583771, "category_id": 111, "area": 3666, "bbox": [237, 165, 64, 132], "iscrowd": 0}, {"id": 16767241, "category_id": 111, "area": 2846, "bbox": [313, 162, 69, 123], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 202, "bbox": [138, 60, 15, 24], "iscrowd": 0}, {"id": 15154688, "category_id": 135, "area": 211, "bbox": [289, 64, 12, 27], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 1645, "bbox": [102, 49, 36, 48], "iscrowd": 0}, {"id": 61354, "category_id": 145, "area": 1016, "bbox": [301, 57, 28, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00001071", "file_name": "ADE_val_00001071.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 18422, "bbox": [137, 76, 203, 118], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 39632, "bbox": [0, 0, 384, 131], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 11188, "bbox": [0, 99, 383, 98], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 23831, "bbox": [0, 187, 383, 67], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 3391, "bbox": [0, 117, 147, 33], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 440, "bbox": [265, 173, 38, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00001072", "file_name": "ADE_val_00001072.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 32396, "bbox": [0, 57, 499, 279], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 40066, "bbox": [45, 209, 454, 190], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 44528, "bbox": [0, 0, 499, 160], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 9719, "bbox": [2, 161, 43, 238], "iscrowd": 0}, {"id": 16711867, "category_id": 8, "area": 417, "bbox": [176, 176, 6, 92], "iscrowd": 0}, {"id": 16715238, "category_id": 8, "area": 2557, "bbox": [368, 174, 30, 147], "iscrowd": 0}, {"id": 16711877, "category_id": 8, "area": 1562, "bbox": [137, 172, 11, 147], "iscrowd": 0}, {"id": 15532215, "category_id": 8, "area": 1069, "bbox": [491, 168, 8, 137], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6764, "bbox": [385, 302, 114, 97], "iscrowd": 0}, {"id": 4784371, "category_id": 16, "area": 1056, "bbox": [295, 222, 54, 59], "iscrowd": 0}, {"id": 6750434, "category_id": 16, "area": 2422, "bbox": [315, 242, 78, 96], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2701, "bbox": [375, 321, 66, 77], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 21796, "bbox": [0, 110, 127, 250], "iscrowd": 0}, {"id": 16776960, "category_id": 36, "area": 4278, "bbox": [136, 141, 40, 152], "iscrowd": 0}, {"id": 16776969, "category_id": 36, "area": 1728, "bbox": [175, 152, 23, 109], "iscrowd": 0}, {"id": 15990540, "category_id": 36, "area": 15382, "bbox": [413, 109, 86, 196], "iscrowd": 0}, {"id": 16056069, "category_id": 36, "area": 2993, "bbox": [353, 135, 51, 108], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 469, "bbox": [2, 134, 26, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001073", "file_name": "ADE_val_00001073.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 120948, "bbox": [2, 0, 563, 478], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 34186, "bbox": [120, 133, 346, 346], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 19193, "bbox": [159, 0, 253, 95], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 25247, "bbox": [124, 347, 350, 98], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 86223, "bbox": [2, 0, 637, 479], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5551, "bbox": [229, 103, 99, 113], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 474, "bbox": [324, 101, 25, 92], "iscrowd": 0}, {"id": 15847, "category_id": 20, "area": 2063, "bbox": [259, 140, 46, 84], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 6954, "bbox": [347, 58, 204, 208], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 116, "bbox": [255, 245, 13, 11], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 1810, "bbox": [141, 20, 50, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00001074", "file_name": "ADE_val_00001074.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 113041, "bbox": [0, 0, 682, 466], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 77150, "bbox": [0, 297, 682, 214], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 33287, "bbox": [53, 0, 629, 93], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4957, "bbox": [609, 233, 74, 154], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1457, "bbox": [81, 121, 42, 43], "iscrowd": 0}, {"id": 5177593, "category_id": 23, "area": 625, "bbox": [442, 139, 15, 50], "iscrowd": 0}, {"id": 4332543, "category_id": 23, "area": 685, "bbox": [502, 145, 18, 40], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 67235, "bbox": [206, 111, 237, 324], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 18359, "bbox": [43, 194, 176, 281], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1349, "bbox": [67, 175, 86, 18], "iscrowd": 0}, {"id": 46847, "category_id": 68, "area": 1506, "bbox": [61, 163, 129, 12], "iscrowd": 0}, {"id": 44017, "category_id": 68, "area": 921, "bbox": [69, 191, 96, 12], "iscrowd": 0}, {"id": 1151204, "category_id": 68, "area": 388, "bbox": [76, 222, 16, 52], "iscrowd": 0}, {"id": 1939967, "category_id": 68, "area": 545, "bbox": [85, 220, 18, 53], "iscrowd": 0}, {"id": 47103, "category_id": 68, "area": 412, "bbox": [98, 228, 13, 44], "iscrowd": 0}, {"id": 40191, "category_id": 68, "area": 1041, "bbox": [105, 215, 25, 56], "iscrowd": 0}, {"id": 44031, "category_id": 68, "area": 578, "bbox": [129, 221, 16, 46], "iscrowd": 0}, {"id": 1477887, "category_id": 68, "area": 755, "bbox": [140, 214, 19, 53], "iscrowd": 0}, {"id": 1157878, "category_id": 68, "area": 681, "bbox": [73, 283, 20, 56], "iscrowd": 0}, {"id": 34559, "category_id": 68, "area": 473, "bbox": [87, 287, 18, 52], "iscrowd": 0}, {"id": 1421567, "category_id": 68, "area": 950, "bbox": [103, 283, 28, 53], "iscrowd": 0}, {"id": 47359, "category_id": 68, "area": 303, "bbox": [122, 275, 19, 52], "iscrowd": 0}, {"id": 1871871, "category_id": 68, "area": 682, "bbox": [125, 282, 25, 47], "iscrowd": 0}, {"id": 39914, "category_id": 68, "area": 480, "bbox": [173, 275, 12, 46], "iscrowd": 0}, {"id": 1425393, "category_id": 68, "area": 789, "bbox": [76, 352, 21, 53], "iscrowd": 0}, {"id": 103167, "category_id": 68, "area": 500, "bbox": [84, 345, 26, 53], "iscrowd": 0}, {"id": 44799, "category_id": 68, "area": 541, "bbox": [97, 343, 18, 51], "iscrowd": 0}, {"id": 508415, "category_id": 68, "area": 381, "bbox": [113, 349, 13, 45], "iscrowd": 0}, {"id": 46571, "category_id": 68, "area": 632, "bbox": [116, 337, 21, 54], "iscrowd": 0}, {"id": 37873, "category_id": 68, "area": 572, "bbox": [134, 339, 15, 48], "iscrowd": 0}, {"id": 36095, "category_id": 68, "area": 633, "bbox": [146, 335, 17, 50], "iscrowd": 0}, {"id": 759295, "category_id": 68, "area": 468, "bbox": [188, 325, 20, 46], "iscrowd": 0}, {"id": 1025515, "category_id": 68, "area": 559, "bbox": [81, 414, 17, 49], "iscrowd": 0}, {"id": 40447, "category_id": 68, "area": 510, "bbox": [186, 377, 21, 44], "iscrowd": 0}, {"id": 1160954, "category_id": 68, "area": 689, "bbox": [171, 386, 24, 42], "iscrowd": 0}, {"id": 437759, "category_id": 68, "area": 535, "bbox": [154, 388, 27, 43], "iscrowd": 0}, {"id": 49407, "category_id": 68, "area": 388, "bbox": [146, 393, 23, 45], "iscrowd": 0}, {"id": 45311, "category_id": 68, "area": 424, "bbox": [137, 395, 22, 44], "iscrowd": 0}, {"id": 34815, "category_id": 68, "area": 492, "bbox": [128, 399, 20, 46], "iscrowd": 0}, {"id": 1678591, "category_id": 68, "area": 286, "bbox": [191, 223, 8, 36], "iscrowd": 0}, {"id": 1818107, "category_id": 68, "area": 198, "bbox": [186, 334, 5, 41], "iscrowd": 0}, {"id": 1286911, "category_id": 68, "area": 423, "bbox": [174, 333, 12, 47], "iscrowd": 0}, {"id": 45823, "category_id": 68, "area": 276, "bbox": [179, 217, 10, 46], "iscrowd": 0}, {"id": 42239, "category_id": 68, "area": 521, "bbox": [165, 215, 14, 50], "iscrowd": 0}, {"id": 1217535, "category_id": 68, "area": 381, "bbox": [157, 215, 11, 50], "iscrowd": 0}, {"id": 2002687, "category_id": 68, "area": 419, "bbox": [162, 273, 11, 50], "iscrowd": 0}, {"id": 100863, "category_id": 68, "area": 310, "bbox": [156, 278, 10, 47], "iscrowd": 0}, {"id": 1346559, "category_id": 68, "area": 286, "bbox": [148, 285, 12, 44], "iscrowd": 0}, {"id": 42470, "category_id": 68, "area": 314, "bbox": [125, 406, 11, 41], "iscrowd": 0}, {"id": 434670, "category_id": 68, "area": 158, "bbox": [119, 407, 7, 42], "iscrowd": 0}, {"id": 40950, "category_id": 68, "area": 369, "bbox": [112, 407, 10, 48], "iscrowd": 0}, {"id": 2002913, "category_id": 68, "area": 395, "bbox": [103, 405, 11, 51], "iscrowd": 0}, {"id": 768236, "category_id": 68, "area": 393, "bbox": [93, 410, 12, 47], "iscrowd": 0}, {"id": 40959, "category_id": 68, "area": 391, "bbox": [179, 268, 14, 52], "iscrowd": 0}, {"id": 39935, "category_id": 68, "area": 226, "bbox": [191, 269, 8, 49], "iscrowd": 0}, {"id": 38884, "category_id": 68, "area": 324, "bbox": [197, 273, 11, 44], "iscrowd": 0}, {"id": 824822, "category_id": 68, "area": 384, "bbox": [166, 333, 11, 49], "iscrowd": 0}, {"id": 36607, "category_id": 68, "area": 323, "bbox": [158, 331, 11, 50], "iscrowd": 0}, {"id": 38399, "category_id": 68, "area": 626, "bbox": [68, 220, 17, 55], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 194, "bbox": [549, 84, 26, 11], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 1505, "bbox": [258, 74, 46, 40], "iscrowd": 0}, {"id": 10748150, "category_id": 120, "area": 1381, "bbox": [437, 338, 42, 42], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 271, "bbox": [339, 96, 13, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00001075", "file_name": "ADE_val_00001075.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3844, "bbox": [1, 201, 184, 25], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 3219, "bbox": [30, 0, 303, 63], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21436, "bbox": [433, 339, 249, 172], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 127913, "bbox": [0, 0, 681, 221], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 4505, "bbox": [1, 216, 220, 41], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 22939, "bbox": [222, 184, 460, 92], "iscrowd": 0}, {"id": 631784, "category_id": 33, "area": 1259, "bbox": [184, 180, 56, 40], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 375, "bbox": [322, 187, 21, 20], "iscrowd": 0}, {"id": 9044203, "category_id": 44, "area": 489, "bbox": [342, 187, 23, 25], "iscrowd": 0}, {"id": 9242367, "category_id": 44, "area": 760, "bbox": [473, 192, 32, 25], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1147, "bbox": [77, 3, 12, 241], "iscrowd": 0}]}, {"image_id": "ADE_val_00001076", "file_name": "ADE_val_00001076.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 173281, "bbox": [134, 1, 549, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5989, "bbox": [296, 440, 267, 72], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 39209, "bbox": [1, 1, 147, 297], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 26629, "bbox": [339, 326, 237, 185], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 24370, "bbox": [0, 0, 156, 472], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 18136, "bbox": [479, 1, 121, 183], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 39060, "bbox": [1, 320, 329, 192], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 7854, "bbox": [412, 278, 168, 75], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 8858, "bbox": [346, 257, 238, 131], "iscrowd": 0}]}, {"image_id": "ADE_val_00001077", "file_name": "ADE_val_00001077.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 151751, "bbox": [35, 0, 476, 574], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 40321, "bbox": [109, 518, 402, 164], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 32640, "bbox": [251, 1, 186, 234], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 45325, "bbox": [0, 357, 240, 325], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 24066, "bbox": [366, 294, 144, 324], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 34167, "bbox": [0, 0, 84, 601], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 10379, "bbox": [216, 424, 151, 183], "iscrowd": 0}]}, {"image_id": "ADE_val_00001078", "file_name": "ADE_val_00001078.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 194829, "bbox": [0, 0, 511, 563], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 20275, "bbox": [303, 540, 209, 143], "iscrowd": 0}, {"id": 16745728, "category_id": 146, "area": 891, "bbox": [251, 1, 50, 128], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3501, "bbox": [0, 0, 53, 70], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 93071, "bbox": [1, 376, 384, 307], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 30747, "bbox": [303, 0, 72, 474], "iscrowd": 0}]}, {"image_id": "ADE_val_00001079", "file_name": "ADE_val_00001079.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 201775, "bbox": [1, 0, 682, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21092, "bbox": [242, 381, 440, 131], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1718, "bbox": [35, 0, 382, 39], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 7663, "bbox": [277, 388, 161, 103], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 30036, "bbox": [325, 283, 230, 207], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 24665, "bbox": [204, 71, 115, 316], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 5076, "bbox": [414, 128, 42, 141], "iscrowd": 0}, {"id": 15194063, "category_id": 28, "area": 7871, "bbox": [473, 117, 60, 170], "iscrowd": 0}, {"id": 14283966, "category_id": 28, "area": 29247, "bbox": [1, 195, 122, 316], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 848, "bbox": [366, 262, 59, 26], "iscrowd": 0}, {"id": 16753920, "category_id": 48, "area": 1349, "bbox": [418, 278, 78, 31], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 4420, "bbox": [324, 269, 233, 66], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 466, "bbox": [392, 200, 13, 50], "iscrowd": 0}, {"id": 5767423, "category_id": 82, "area": 1056, "bbox": [519, 209, 22, 68], "iscrowd": 0}, {"id": 5702377, "category_id": 82, "area": 250, "bbox": [452, 307, 41, 9], "iscrowd": 0}, {"id": 8454399, "category_id": 82, "area": 112, "bbox": [343, 272, 28, 7], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 1654, "bbox": [462, 100, 59, 46], "iscrowd": 0}, {"id": 16334357, "category_id": 135, "area": 999, "bbox": [400, 112, 43, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00001080", "file_name": "ADE_val_00001080.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 11685, "bbox": [242, 1, 91, 463], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 15726, "bbox": [28, 398, 304, 114], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 6585, "bbox": [307, 17, 25, 494], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 95161, "bbox": [2, 1, 247, 444], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 15022, "bbox": [248, 1, 83, 209], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 2947, "bbox": [32, 383, 211, 76], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 8662, "bbox": [175, 243, 141, 96], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 5576, "bbox": [212, 440, 95, 71], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 3035, "bbox": [2, 390, 36, 122], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 2187, "bbox": [225, 393, 45, 59], "iscrowd": 0}]}, {"image_id": "ADE_val_00001081", "file_name": "ADE_val_00001081.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 206041, "bbox": [1, 0, 681, 511], "iscrowd": 0}, {"id": 16745728, "category_id": 146, "area": 835, "bbox": [60, 1, 47, 42], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 67494, "bbox": [234, 1, 309, 242], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 9723, "bbox": [16, 399, 140, 112], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 12149, "bbox": [217, 328, 193, 105], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 235, "bbox": [508, 465, 15, 24], "iscrowd": 0}, {"id": 9240327, "category_id": 66, "area": 8689, "bbox": [524, 433, 156, 77], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 23694, "bbox": [116, 347, 566, 134], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 653, "bbox": [226, 337, 45, 21], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 765, "bbox": [626, 364, 33, 40], "iscrowd": 0}, {"id": 12899381, "category_id": 148, "area": 630, "bbox": [531, 356, 31, 39], "iscrowd": 0}, {"id": 13283106, "category_id": 148, "area": 1514, "bbox": [620, 388, 35, 51], "iscrowd": 0}, {"id": 14396983, "category_id": 148, "area": 1228, "bbox": [525, 374, 30, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00001082", "file_name": "ADE_val_00001082.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 80520, "bbox": [0, 1, 682, 411], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 886, "bbox": [166, 491, 156, 21], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9948, "bbox": [0, 1, 265, 52], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 13401, "bbox": [319, 427, 317, 84], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 90075, "bbox": [0, 73, 254, 439], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 72432, "bbox": [406, 39, 277, 308], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 9517, "bbox": [447, 361, 164, 101], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 11062, "bbox": [201, 383, 135, 129], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 5187, "bbox": [266, 121, 79, 98], "iscrowd": 0}, {"id": 4095, "category_id": 67, "area": 4990, "bbox": [382, 269, 119, 73], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 20474, "bbox": [307, 366, 375, 145], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 9749, "bbox": [0, 299, 82, 212], "iscrowd": 0}, {"id": 5248255, "category_id": 82, "area": 2639, "bbox": [273, 251, 42, 71], "iscrowd": 0}, {"id": 7871723, "category_id": 82, "area": 1558, "bbox": [633, 365, 49, 51], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 328, "bbox": [442, 1, 232, 38], "iscrowd": 0}, {"id": 16728832, "category_id": 135, "area": 6815, "bbox": [446, 0, 236, 50], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 909, "bbox": [422, 340, 26, 41], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1161, "bbox": [632, 390, 50, 51], "iscrowd": 0}]}, {"image_id": "ADE_val_00001083", "file_name": "ADE_val_00001083.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 126664, "bbox": [0, 0, 467, 628], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4507, "bbox": [159, 0, 160, 55], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 61844, "bbox": [293, 416, 218, 313], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 8175, "bbox": [125, 124, 82, 121], "iscrowd": 0}, {"id": 2494967, "category_id": 23, "area": 6924, "bbox": [1, 43, 58, 138], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 71591, "bbox": [267, 0, 244, 361], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 4564, "bbox": [361, 364, 148, 53], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 19065, "bbox": [160, 388, 143, 251], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 13267, "bbox": [241, 356, 270, 105], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 9038, "bbox": [1, 191, 65, 156], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 5605, "bbox": [291, 1, 164, 109], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 382, "bbox": [304, 357, 20, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00001084", "file_name": "ADE_val_00001084.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 104982, "bbox": [33, 0, 735, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 43030, "bbox": [1, 274, 658, 236], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 16184, "bbox": [1, 1, 81, 293], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 42457, "bbox": [71, 1, 192, 269], "iscrowd": 0}, {"id": 15580928, "category_id": 59, "area": 79946, "bbox": [253, 1, 277, 378], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 44051, "bbox": [407, 266, 303, 245], "iscrowd": 0}]}, {"image_id": "ADE_val_00001085", "file_name": "ADE_val_00001085.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 137475, "bbox": [0, 0, 447, 755], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7214, "bbox": [190, 692, 232, 75], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 40481, "bbox": [228, 147, 195, 226], "iscrowd": 0}, {"id": 16713165, "category_id": 11, "area": 25002, "bbox": [112, 538, 115, 229], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 15152, "bbox": [115, 183, 86, 184], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1285, "bbox": [115, 489, 65, 46], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 30216, "bbox": [229, 504, 180, 263], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 4184, "bbox": [114, 480, 120, 63], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 3629, "bbox": [117, 106, 86, 67], "iscrowd": 0}]}, {"image_id": "ADE_val_00001086", "file_name": "ADE_val_00001086.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 168295, "bbox": [1, 1, 511, 682], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 16655, "bbox": [169, 554, 343, 129], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 21283, "bbox": [419, 33, 93, 255], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 44570, "bbox": [1, 1, 145, 338], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 43118, "bbox": [1, 385, 286, 237], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 32651, "bbox": [189, 388, 254, 294], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 12256, "bbox": [186, 248, 114, 139], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 5223, "bbox": [458, 496, 54, 112], "iscrowd": 0}]}, {"image_id": "ADE_val_00001087", "file_name": "ADE_val_00001087.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 666, "bbox": [179, 47, 9, 94], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7945, "bbox": [0, 190, 227, 66], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3113, "bbox": [105, 0, 151, 45], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 10667, "bbox": [185, 25, 71, 180], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 24693, "bbox": [0, 0, 194, 235], "iscrowd": 0}, {"id": 14942445, "category_id": 11, "area": 9765, "bbox": [1, 147, 192, 87], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 842, "bbox": [33, 83, 25, 36], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 4016, "bbox": [163, 195, 93, 61], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 221, "bbox": [107, 133, 47, 17], "iscrowd": 0}, {"id": 16165632, "category_id": 48, "area": 427, "bbox": [14, 135, 54, 24], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 1390, "bbox": [1, 142, 190, 20], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 460, "bbox": [149, 160, 15, 36], "iscrowd": 0}, {"id": 6357247, "category_id": 82, "area": 218, "bbox": [0, 175, 5, 54], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 23, "bbox": [132, 49, 7, 5], "iscrowd": 0}]}, {"image_id": "ADE_val_00001088", "file_name": "ADE_val_00001088.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21205, "bbox": [0, 0, 178, 228], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6029, "bbox": [0, 211, 165, 59], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 8144, "bbox": [165, 0, 37, 270], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 7177, "bbox": [80, 0, 97, 79], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 7179, "bbox": [55, 137, 117, 123], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 1144, "bbox": [46, 135, 23, 78], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 2826, "bbox": [0, 157, 38, 83], "iscrowd": 0}]}, {"image_id": "ADE_val_00001089", "file_name": "ADE_val_00001089.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 20933, "bbox": [0, 0, 284, 196], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2210, "bbox": [172, 258, 112, 29], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 9670, "bbox": [0, 179, 141, 108], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 19976, "bbox": [133, 0, 92, 261], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1648, "bbox": [81, 76, 32, 55], "iscrowd": 0}, {"id": 2891004, "category_id": 23, "area": 1745, "bbox": [81, 8, 34, 60], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 6303, "bbox": [0, 0, 47, 142], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 5165, "bbox": [207, 183, 77, 98], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 385, "bbox": [81, 134, 33, 24], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 4016, "bbox": [0, 144, 84, 71], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 3288, "bbox": [123, 157, 74, 130], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 4665, "bbox": [2, 139, 145, 117], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 543, "bbox": [74, 137, 60, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001090", "file_name": "ADE_val_00001090.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 97551, "bbox": [0, 0, 577, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25471, "bbox": [0, 404, 556, 107], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 20914, "bbox": [0, 0, 72, 295], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 24050, "bbox": [314, 90, 97, 365], "iscrowd": 0}, {"id": 3086572, "category_id": 25, "area": 20118, "bbox": [112, 69, 142, 355], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 23242, "bbox": [456, 10, 109, 239], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 7905, "bbox": [1, 369, 93, 139], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 610, "bbox": [349, 195, 27, 26], "iscrowd": 0}, {"id": 3211037, "category_id": 42, "area": 329, "bbox": [489, 265, 27, 13], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 16131, "bbox": [380, 186, 148, 315], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 12054, "bbox": [125, 270, 130, 177], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 651, "bbox": [141, 263, 75, 11], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 2222, "bbox": [63, 336, 112, 31], "iscrowd": 0}, {"id": 6750463, "category_id": 82, "area": 2794, "bbox": [65, 311, 109, 34], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 295, "bbox": [77, 257, 12, 35], "iscrowd": 0}, {"id": 61972, "category_id": 99, "area": 722, "bbox": [87, 250, 21, 45], "iscrowd": 0}, {"id": 2359040, "category_id": 99, "area": 830, "bbox": [368, 307, 21, 55], "iscrowd": 0}, {"id": 62465, "category_id": 99, "area": 462, "bbox": [375, 189, 16, 38], "iscrowd": 0}, {"id": 655104, "category_id": 99, "area": 309, "bbox": [348, 330, 24, 32], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 10101, "bbox": [509, 354, 68, 158], "iscrowd": 0}, {"id": 65353, "category_id": 113, "area": 5959, "bbox": [94, 385, 87, 81], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 1024, "bbox": [190, 55, 44, 47], "iscrowd": 0}, {"id": 13366016, "category_id": 136, "area": 1291, "bbox": [346, 369, 37, 61], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1447, "bbox": [133, 202, 101, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00001091", "file_name": "ADE_val_00001091.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 156566, "bbox": [0, 2, 512, 635], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 31861, "bbox": [246, 0, 266, 158], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 65982, "bbox": [1, 458, 284, 271], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 15174, "bbox": [43, 139, 111, 247], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 15102, "bbox": [2, 100, 82, 305], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 6498, "bbox": [0, 421, 190, 84], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 24196, "bbox": [447, 154, 65, 424], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 11226, "bbox": [279, 538, 105, 141], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 6554, "bbox": [0, 445, 301, 82], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 14701, "bbox": [287, 226, 92, 176], "iscrowd": 0}, {"id": 6095103, "category_id": 82, "area": 1530, "bbox": [381, 219, 40, 42], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 210, "bbox": [478, 81, 23, 12], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 601, "bbox": [163, 353, 24, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00001092", "file_name": "ADE_val_00001092.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 130041, "bbox": [0, 0, 764, 511], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 42711, "bbox": [19, 0, 546, 123], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1855, "bbox": [27, 87, 48, 156], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 39719, "bbox": [76, 115, 236, 195], "iscrowd": 0}, {"id": 16248539, "category_id": 9, "area": 5732, "bbox": [327, 135, 35, 174], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 19393, "bbox": [1, 412, 266, 99], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 882, "bbox": [374, 156, 24, 42], "iscrowd": 0}, {"id": 2950905, "category_id": 23, "area": 1219, "bbox": [429, 106, 27, 50], "iscrowd": 0}, {"id": 3609580, "category_id": 23, "area": 1836, "bbox": [489, 124, 35, 59], "iscrowd": 0}, {"id": 1844479, "category_id": 23, "area": 2845, "bbox": [563, 161, 48, 65], "iscrowd": 0}, {"id": 1900799, "category_id": 23, "area": 984, "bbox": [405, 194, 25, 42], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 8471, "bbox": [196, 294, 180, 113], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 14167, "bbox": [10, 218, 186, 163], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 61515, "bbox": [627, 4, 137, 507], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 17060, "bbox": [413, 326, 146, 186], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 17295, "bbox": [1, 340, 281, 123], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 124, "bbox": [232, 46, 16, 10], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 6694, "bbox": [267, 390, 141, 76], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 2156, "bbox": [43, 244, 38, 64], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 726, "bbox": [371, 339, 20, 56], "iscrowd": 0}]}, {"image_id": "ADE_val_00001093", "file_name": "ADE_val_00001093.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 24560, "bbox": [0, 0, 256, 256], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3472, "bbox": [26, 213, 158, 43], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 335, "bbox": [199, 0, 51, 12], "iscrowd": 0}, {"id": 16745728, "category_id": 146, "area": 11938, "bbox": [0, 25, 83, 231], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 9796, "bbox": [114, 36, 92, 124], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 4576, "bbox": [0, 165, 78, 89], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1317, "bbox": [105, 148, 60, 35], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 4999, "bbox": [82, 150, 120, 90], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 1819, "bbox": [200, 161, 34, 70], "iscrowd": 0}, {"id": 5311231, "category_id": 82, "area": 490, "bbox": [0, 209, 23, 29], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 337, "bbox": [90, 75, 21, 20], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 376, "bbox": [181, 231, 19, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001094", "file_name": "ADE_val_00001094.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 44635, "bbox": [19, 10, 445, 540], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12294, "bbox": [88, 542, 364, 141], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 24331, "bbox": [14, 0, 450, 70], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 20957, "bbox": [97, 565, 352, 117], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 9989, "bbox": [315, 128, 65, 164], "iscrowd": 0}, {"id": 15473368, "category_id": 11, "area": 7857, "bbox": [392, 107, 70, 155], "iscrowd": 0}, {"id": 16056542, "category_id": 11, "area": 38884, "bbox": [138, 389, 262, 221], "iscrowd": 0}, {"id": 16714744, "category_id": 11, "area": 11783, "bbox": [393, 380, 66, 269], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 36181, "bbox": [0, 0, 97, 683], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 60924, "bbox": [26, 117, 270, 263], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 2102, "bbox": [412, 420, 45, 65], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 3603, "bbox": [206, 349, 118, 56], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 2491, "bbox": [62, 429, 43, 181], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 16615, "bbox": [57, 336, 346, 105], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 2724, "bbox": [432, 243, 29, 106], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 8265, "bbox": [20, 71, 259, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00001095", "file_name": "ADE_val_00001095.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 148019, "bbox": [32, 0, 479, 671], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2968, "bbox": [122, 644, 277, 39], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2528, "bbox": [253, 0, 200, 25], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 19048, "bbox": [213, 0, 78, 304], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 19324, "bbox": [0, 471, 122, 211], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 66384, "bbox": [2, 1, 172, 417], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 39287, "bbox": [216, 470, 296, 213], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 9504, "bbox": [0, 413, 115, 121], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 21835, "bbox": [116, 422, 236, 261], "iscrowd": 0}]}, {"image_id": "ADE_val_00001096", "file_name": "ADE_val_00001096.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 172437, "bbox": [1, 0, 503, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 41046, "bbox": [75, 344, 607, 168], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 5258, "bbox": [187, 448, 158, 64], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 9598, "bbox": [0, 311, 90, 199], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 76257, "bbox": [501, 0, 181, 447], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 24253, "bbox": [80, 265, 206, 231], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 6501, "bbox": [16, 92, 60, 194], "iscrowd": 0}]}, {"image_id": "ADE_val_00001097", "file_name": "ADE_val_00001097.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 167147, "bbox": [0, 0, 511, 681], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 43083, "bbox": [62, 529, 448, 153], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 18140, "bbox": [32, 1, 125, 152], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 76132, "bbox": [340, 76, 172, 540], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 19677, "bbox": [51, 401, 113, 238], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 8456, "bbox": [237, 285, 75, 138], "iscrowd": 0}]}, {"image_id": "ADE_val_00001098", "file_name": "ADE_val_00001098.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 280971, "bbox": [0, 0, 499, 749], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 22454, "bbox": [263, 587, 237, 162], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 8104, "bbox": [459, 92, 40, 252], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1858, "bbox": [478, 537, 20, 100], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 20847, "bbox": [360, 440, 117, 247], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 15622, "bbox": [253, 175, 73, 323], "iscrowd": 0}, {"id": 7537402, "category_id": 82, "area": 13151, "bbox": [166, 441, 90, 247], "iscrowd": 0}]}, {"image_id": "ADE_val_00001099", "file_name": "ADE_val_00001099.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 27861, "bbox": [0, 0, 256, 227], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3772, "bbox": [80, 218, 175, 37], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2168, "bbox": [197, 64, 56, 54], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3096, "bbox": [1, 176, 108, 79], "iscrowd": 0}, {"id": 16646372, "category_id": 11, "area": 506, "bbox": [85, 112, 26, 40], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 881, "bbox": [93, 13, 34, 26], "iscrowd": 0}, {"id": 4069631, "category_id": 23, "area": 412, "bbox": [170, 85, 25, 18], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 7611, "bbox": [1, 136, 112, 87], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 12439, "bbox": [127, 112, 116, 143], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 700, "bbox": [35, 54, 23, 58], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 3425, "bbox": [30, 93, 226, 47], "iscrowd": 0}, {"id": 15175181, "category_id": 71, "area": 785, "bbox": [0, 207, 32, 46], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 492, "bbox": [76, 69, 23, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00001100", "file_name": "ADE_val_00001100.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 120464, "bbox": [1, 1, 451, 528], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 60524, "bbox": [1, 474, 386, 209], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 1133, "bbox": [238, 488, 65, 23], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 69386, "bbox": [370, 1, 142, 682], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 14046, "bbox": [1, 1, 183, 79], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 3532, "bbox": [311, 176, 56, 67], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 3474, "bbox": [2, 222, 70, 67], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 47767, "bbox": [171, 266, 185, 367], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 14072, "bbox": [2, 224, 418, 95], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1999, "bbox": [178, 222, 132, 38], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 1086, "bbox": [275, 210, 30, 42], "iscrowd": 0}, {"id": 12565268, "category_id": 148, "area": 1077, "bbox": [183, 209, 31, 43], "iscrowd": 0}, {"id": 13622063, "category_id": 148, "area": 496, "bbox": [273, 192, 29, 30], "iscrowd": 0}, {"id": 13421605, "category_id": 148, "area": 444, "bbox": [181, 192, 29, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001101", "file_name": "ADE_val_00001101.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 22161, "bbox": [0, 0, 256, 227], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3052, "bbox": [0, 208, 112, 48], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 30525, "bbox": [5, 58, 251, 198], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 8940, "bbox": [99, 160, 148, 96], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 553, "bbox": [102, 17, 14, 50], "iscrowd": 0}]}, {"image_id": "ADE_val_00001102", "file_name": "ADE_val_00001102.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 138579, "bbox": [6, 0, 505, 660], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 28316, "bbox": [55, 571, 409, 112], "iscrowd": 0}, {"id": 16745728, "category_id": 146, "area": 182, "bbox": [383, 209, 16, 15], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6740, "bbox": [463, 501, 48, 182], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 20160, "bbox": [0, 1, 57, 681], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 28389, "bbox": [386, 0, 91, 396], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 62707, "bbox": [103, 347, 369, 239], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 3402, "bbox": [469, 424, 42, 119], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 31593, "bbox": [292, 356, 220, 306], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 8551, "bbox": [34, 243, 82, 182], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 16960, "bbox": [24, 238, 94, 445], "iscrowd": 0}]}, {"image_id": "ADE_val_00001103", "file_name": "ADE_val_00001103.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 138224, "bbox": [0, 1, 495, 501], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4734, "bbox": [123, 1, 238, 39], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 39730, "bbox": [0, 0, 147, 310], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 2801, "bbox": [7, 392, 52, 67], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 10924, "bbox": [2, 317, 163, 122], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 21130, "bbox": [390, 0, 44, 502], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 3512, "bbox": [285, 457, 104, 42], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 4638, "bbox": [221, 239, 55, 104], "iscrowd": 0}, {"id": 5638385, "category_id": 82, "area": 4626, "bbox": [267, 231, 58, 109], "iscrowd": 0}, {"id": 6424048, "category_id": 82, "area": 4927, "bbox": [199, 77, 67, 97], "iscrowd": 0}, {"id": 5380578, "category_id": 82, "area": 5403, "bbox": [258, 68, 71, 101], "iscrowd": 0}]}, {"image_id": "ADE_val_00001104", "file_name": "ADE_val_00001104.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 25163, "bbox": [0, 0, 255, 198], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17314, "bbox": [0, 173, 256, 83], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1801, "bbox": [64, 57, 56, 51], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 638, "bbox": [1, 92, 12, 83], "iscrowd": 0}, {"id": 16635386, "category_id": 9, "area": 3829, "bbox": [19, 52, 47, 88], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1736, "bbox": [0, 47, 73, 94], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 40, "bbox": [78, 132, 21, 4], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 3188, "bbox": [195, 39, 47, 83], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 4158, "bbox": [15, 141, 117, 48], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 851, "bbox": [146, 43, 19, 88], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1814, "bbox": [202, 125, 54, 72], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 604, "bbox": [167, 96, 42, 26], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 326, "bbox": [122, 154, 16, 27], "iscrowd": 0}, {"id": 6949631, "category_id": 82, "area": 460, "bbox": [182, 145, 19, 33], "iscrowd": 0}, {"id": 7210495, "category_id": 82, "area": 213, "bbox": [244, 148, 11, 23], "iscrowd": 0}, {"id": 5836543, "category_id": 82, "area": 272, "bbox": [137, 100, 10, 30], "iscrowd": 0}, {"id": 7012597, "category_id": 82, "area": 501, "bbox": [124, 96, 15, 41], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 430, "bbox": [78, 99, 24, 24], "iscrowd": 0}, {"id": 16711911, "category_id": 126, "area": 141, "bbox": [184, 118, 13, 13], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 277, "bbox": [181, 61, 10, 36], "iscrowd": 0}, {"id": 16729885, "category_id": 135, "area": 344, "bbox": [244, 58, 11, 43], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 565, "bbox": [6, 1, 68, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001105", "file_name": "ADE_val_00001105.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 154651, "bbox": [0, 0, 510, 461], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10044, "bbox": [155, 617, 330, 66], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 44077, "bbox": [277, 41, 235, 216], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 43374, "bbox": [281, 411, 231, 269], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 53411, "bbox": [1, 421, 286, 261], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 10439, "bbox": [283, 341, 202, 121], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 4598, "bbox": [458, 566, 53, 116], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 2298, "bbox": [259, 445, 27, 121], "iscrowd": 0}, {"id": 7209215, "category_id": 82, "area": 910, "bbox": [132, 114, 81, 17], "iscrowd": 0}, {"id": 7536895, "category_id": 82, "area": 986, "bbox": [133, 102, 79, 16], "iscrowd": 0}, {"id": 5054207, "category_id": 82, "area": 1116, "bbox": [211, 99, 58, 29], "iscrowd": 0}, {"id": 7209209, "category_id": 82, "area": 1149, "bbox": [201, 76, 58, 28], "iscrowd": 0}, {"id": 7012599, "category_id": 82, "area": 6248, "bbox": [135, 475, 92, 119], "iscrowd": 0}]}, {"image_id": "ADE_val_00001106", "file_name": "ADE_val_00001106.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 145584, "bbox": [0, 0, 682, 511], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 88183, "bbox": [444, 1, 239, 450], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 59339, "bbox": [66, 326, 616, 185], "iscrowd": 0}]}, {"image_id": "ADE_val_00001107", "file_name": "ADE_val_00001107.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 33446, "bbox": [21, 1, 395, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8663, "bbox": [122, 437, 234, 75], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 13807, "bbox": [2, 1, 39, 510], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 92264, "bbox": [173, 1, 244, 502], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 26743, "bbox": [32, 13, 137, 222], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 6555, "bbox": [164, 369, 218, 142], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 681, "bbox": [183, 2, 137, 11], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 11462, "bbox": [70, 258, 174, 108], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 6765, "bbox": [35, 355, 125, 156], "iscrowd": 0}]}, {"image_id": "ADE_val_00001108", "file_name": "ADE_val_00001108.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 61758, "bbox": [32, 0, 354, 501], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 11970, "bbox": [112, 415, 210, 118], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5460, "bbox": [92, 0, 295, 25], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 10644, "bbox": [32, 28, 83, 255], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 12349, "bbox": [360, 0, 39, 532], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 7312, "bbox": [33, 43, 59, 153], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 1526, "bbox": [320, 195, 45, 61], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 6089, "bbox": [279, 359, 93, 173], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 48477, "bbox": [233, 44, 151, 429], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 2473, "bbox": [52, 493, 69, 40], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 735, "bbox": [331, 400, 39, 71], "iscrowd": 0}, {"id": 6758143, "category_id": 82, "area": 2761, "bbox": [324, 430, 42, 103], "iscrowd": 0}, {"id": 4784383, "category_id": 82, "area": 1936, "bbox": [190, 139, 33, 164], "iscrowd": 0}, {"id": 5051903, "category_id": 82, "area": 3667, "bbox": [196, 137, 43, 161], "iscrowd": 0}, {"id": 7996159, "category_id": 82, "area": 3535, "bbox": [44, 334, 52, 100], "iscrowd": 0}, {"id": 7671807, "category_id": 82, "area": 2289, "bbox": [72, 315, 49, 90], "iscrowd": 0}, {"id": 8003327, "category_id": 82, "area": 830, "bbox": [102, 309, 29, 68], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 224, "bbox": [138, 362, 8, 35], "iscrowd": 0}, {"id": 58120, "category_id": 99, "area": 157, "bbox": [147, 359, 7, 31], "iscrowd": 0}, {"id": 1833228, "category_id": 99, "area": 308, "bbox": [64, 230, 10, 34], "iscrowd": 0}, {"id": 1766656, "category_id": 99, "area": 321, "bbox": [85, 223, 12, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001109", "file_name": "ADE_val_00001109.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 163730, "bbox": [0, 0, 510, 498], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 41264, "bbox": [0, 376, 510, 307], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 57061, "bbox": [0, 397, 452, 285], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 19268, "bbox": [166, 239, 125, 288], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1534, "bbox": [465, 3, 44, 39], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 335, "bbox": [354, 607, 20, 22], "iscrowd": 0}, {"id": 10748130, "category_id": 120, "area": 338, "bbox": [427, 622, 17, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001110", "file_name": "ADE_val_00001110.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 28181, "bbox": [0, 0, 288, 121], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2921, "bbox": [0, 99, 287, 27], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 667, "bbox": [161, 118, 36, 25], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 9542, "bbox": [2, 122, 286, 49], "iscrowd": 0}, {"id": 16761344, "category_id": 95, "area": 3282, "bbox": [2, 117, 286, 51], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 1258, "bbox": [176, 52, 56, 63], "iscrowd": 0}, {"id": 16599560, "category_id": 73, "area": 922, "bbox": [138, 51, 35, 85], "iscrowd": 0}, {"id": 16735488, "category_id": 73, "area": 694, "bbox": [120, 56, 26, 81], "iscrowd": 0}, {"id": 15556614, "category_id": 73, "area": 315, "bbox": [112, 69, 18, 63], "iscrowd": 0}, {"id": 16731932, "category_id": 73, "area": 335, "bbox": [101, 78, 24, 56], "iscrowd": 0}, {"id": 15555840, "category_id": 73, "area": 140, "bbox": [85, 91, 13, 41], "iscrowd": 0}, {"id": 16536064, "category_id": 73, "area": 290, "bbox": [94, 86, 18, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00001111", "file_name": "ADE_val_00001111.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 41156, "bbox": [2, 1, 428, 247], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 2970, "bbox": [157, 0, 69, 90], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 298, "bbox": [166, 75, 24, 21], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 27343, "bbox": [0, 108, 348, 186], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 277, "bbox": [164, 96, 17, 24], "iscrowd": 0}, {"id": 5118867, "category_id": 13, "area": 3408, "bbox": [170, 93, 48, 149], "iscrowd": 0}, {"id": 5838492, "category_id": 13, "area": 7137, "bbox": [118, 95, 67, 189], "iscrowd": 0}, {"id": 4727218, "category_id": 13, "area": 443, "bbox": [43, 105, 20, 42], "iscrowd": 0}, {"id": 5053339, "category_id": 13, "area": 2715, "bbox": [2, 105, 36, 127], "iscrowd": 0}, {"id": 4980867, "category_id": 13, "area": 5854, "bbox": [52, 97, 60, 172], "iscrowd": 0}, {"id": 2228859, "category_id": 13, "area": 1221, "bbox": [111, 96, 35, 90], "iscrowd": 0}, {"id": 5507485, "category_id": 13, "area": 1570, "bbox": [212, 101, 25, 105], "iscrowd": 0}, {"id": 3670149, "category_id": 13, "area": 1437, "bbox": [273, 108, 38, 78], "iscrowd": 0}, {"id": 4587681, "category_id": 13, "area": 226, "bbox": [308, 95, 11, 28], "iscrowd": 0}, {"id": 4460665, "category_id": 13, "area": 212, "bbox": [30, 103, 18, 20], "iscrowd": 0}, {"id": 2692514, "category_id": 13, "area": 79, "bbox": [238, 110, 7, 21], "iscrowd": 0}, {"id": 3735678, "category_id": 13, "area": 177, "bbox": [229, 112, 12, 26], "iscrowd": 0}, {"id": 5117830, "category_id": 13, "area": 1888, "bbox": [240, 120, 41, 96], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 481, "bbox": [267, 64, 23, 21], "iscrowd": 0}, {"id": 11796709, "category_id": 44, "area": 358, "bbox": [254, 34, 22, 17], "iscrowd": 0}, {"id": 8591615, "category_id": 44, "area": 528, "bbox": [248, 10, 26, 21], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 1821, "bbox": [0, 20, 78, 71], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 364, "bbox": [120, 67, 15, 32], "iscrowd": 0}, {"id": 16743680, "category_id": 93, "area": 467, "bbox": [103, 65, 15, 41], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 3925, "bbox": [341, 220, 89, 71], "iscrowd": 0}, {"id": 1572714, "category_id": 113, "area": 2264, "bbox": [360, 261, 70, 34], "iscrowd": 0}, {"id": 65356, "category_id": 113, "area": 1428, "bbox": [320, 206, 57, 67], "iscrowd": 0}]}, {"image_id": "ADE_val_00001112", "file_name": "ADE_val_00001112.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 34939, "bbox": [0, 0, 256, 191], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1336, "bbox": [0, 168, 73, 25], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 8237, "bbox": [115, 113, 141, 104], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 6554, "bbox": [0, 189, 160, 66], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 7437, "bbox": [70, 202, 186, 54], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 1090, "bbox": [89, 102, 69, 64], "iscrowd": 0}, {"id": 15361561, "category_id": 73, "area": 4379, "bbox": [166, 34, 89, 106], "iscrowd": 0}, {"id": 16473088, "category_id": 73, "area": 665, "bbox": [212, 7, 42, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00001113", "file_name": "ADE_val_00001113.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 35204, "bbox": [2, 1, 254, 144], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 379, "bbox": [0, 147, 111, 7], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 2108, "bbox": [2, 130, 254, 21], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 22338, "bbox": [0, 148, 256, 91], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 4329, "bbox": [0, 239, 256, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001114", "file_name": "ADE_val_00001114.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 85438, "bbox": [0, 0, 767, 147], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 43146, "bbox": [0, 138, 767, 122], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 34059, "bbox": [1, 87, 766, 111], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 16405, "bbox": [1, 227, 765, 49], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 14676, "bbox": [119, 126, 240, 119], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 33770, "bbox": [0, 311, 768, 97], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 81324, "bbox": [0, 354, 767, 157], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 6097, "bbox": [1, 220, 767, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00001115", "file_name": "ADE_val_00001115.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 20279, "bbox": [0, 171, 320, 190], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 43462, "bbox": [2, 346, 373, 153], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 53237, "bbox": [0, 0, 375, 212], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3349, "bbox": [228, 227, 59, 143], "iscrowd": 0}, {"id": 16719333, "category_id": 11, "area": 10923, "bbox": [307, 145, 67, 272], "iscrowd": 0}, {"id": 16720069, "category_id": 11, "area": 7788, "bbox": [71, 148, 106, 238], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2314, "bbox": [237, 243, 43, 64], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 272, "bbox": [26, 231, 16, 20], "iscrowd": 0}, {"id": 3408097, "category_id": 23, "area": 247, "bbox": [209, 252, 15, 19], "iscrowd": 0}, {"id": 2359521, "category_id": 23, "area": 231, "bbox": [293, 264, 15, 18], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 1430, "bbox": [54, 221, 31, 64], "iscrowd": 0}, {"id": 16045256, "category_id": 28, "area": 4577, "bbox": [329, 173, 44, 118], "iscrowd": 0}, {"id": 16119774, "category_id": 28, "area": 6270, "bbox": [85, 172, 81, 128], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 2135, "bbox": [2, 282, 39, 68], "iscrowd": 0}, {"id": 16724737, "category_id": 45, "area": 5708, "bbox": [155, 282, 62, 115], "iscrowd": 0}, {"id": 16731160, "category_id": 45, "area": 981, "bbox": [210, 304, 21, 65], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 867, "bbox": [53, 290, 23, 64], "iscrowd": 0}, {"id": 14746625, "category_id": 76, "area": 1925, "bbox": [244, 305, 49, 74], "iscrowd": 0}, {"id": 16717339, "category_id": 76, "area": 6468, "bbox": [73, 259, 82, 144], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 3316, "bbox": [0, 51, 72, 62], "iscrowd": 0}, {"id": 41468, "category_id": 83, "area": 1492, "bbox": [23, 127, 103, 27], "iscrowd": 0}, {"id": 45055, "category_id": 83, "area": 1564, "bbox": [177, 149, 104, 29], "iscrowd": 0}, {"id": 1621247, "category_id": 83, "area": 2035, "bbox": [254, 120, 120, 30], "iscrowd": 0}, {"id": 1032681, "category_id": 83, "area": 1298, "bbox": [323, 33, 51, 39], "iscrowd": 0}, {"id": 41959, "category_id": 83, "area": 2879, "bbox": [0, 1, 153, 29], "iscrowd": 0}, {"id": 1096167, "category_id": 83, "area": 270, "bbox": [12, 29, 26, 14], "iscrowd": 0}, {"id": 43263, "category_id": 83, "area": 65, "bbox": [47, 151, 15, 6], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 247, "bbox": [199, 254, 10, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00001116", "file_name": "ADE_val_00001116.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 10331, "bbox": [2, 0, 297, 202], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 11413, "bbox": [0, 152, 299, 73], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6398, "bbox": [0, 0, 269, 33], "iscrowd": 0}, {"id": 6094592, "category_id": 107, "area": 18408, "bbox": [114, 32, 159, 176], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 4032, "bbox": [124, 122, 111, 86], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1339, "bbox": [71, 50, 21, 68], "iscrowd": 0}, {"id": 14017265, "category_id": 9, "area": 408, "bbox": [290, 62, 9, 81], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 4228, "bbox": [2, 40, 42, 121], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 319, "bbox": [12, 162, 21, 39], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 3953, "bbox": [51, 33, 59, 123], "iscrowd": 0}, {"id": 6117, "category_id": 19, "area": 4040, "bbox": [269, 7, 30, 192], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 607, "bbox": [46, 115, 24, 45], "iscrowd": 0}, {"id": 12221, "category_id": 20, "area": 922, "bbox": [2, 150, 29, 74], "iscrowd": 0}]}, {"image_id": "ADE_val_00001117", "file_name": "ADE_val_00001117.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 106361, "bbox": [1, 0, 518, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 26325, "bbox": [52, 344, 630, 167], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 8608, "bbox": [4, 48, 50, 275], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 108187, "bbox": [183, 211, 481, 301], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5245, "bbox": [1, 11, 64, 348], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4814, "bbox": [102, 234, 92, 144], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 14211, "bbox": [222, 8, 133, 113], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 58041, "bbox": [494, 0, 189, 411], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 4898, "bbox": [79, 151, 90, 99], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 9205, "bbox": [254, 176, 139, 86], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 847, "bbox": [152, 197, 21, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00001118", "file_name": "ADE_val_00001118.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 169853, "bbox": [0, 1, 682, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6327, "bbox": [553, 283, 129, 228], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 4740, "bbox": [554, 286, 127, 225], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 22495, "bbox": [32, 152, 607, 359], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 21250, "bbox": [141, 15, 154, 160], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 6803, "bbox": [299, 225, 176, 69], "iscrowd": 0}, {"id": 16775680, "category_id": 58, "area": 8355, "bbox": [416, 249, 187, 73], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 3932, "bbox": [545, 61, 89, 74], "iscrowd": 0}]}, {"image_id": "ADE_val_00001119", "file_name": "ADE_val_00001119.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 116649, "bbox": [0, 0, 511, 682], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 67547, "bbox": [39, 432, 472, 250], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 15116, "bbox": [10, 1, 501, 62], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 25827, "bbox": [30, 146, 209, 133], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 101957, "bbox": [23, 271, 446, 334], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6626, "bbox": [19, 133, 228, 158], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3568, "bbox": [430, 184, 47, 80], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3204, "bbox": [323, 19, 106, 50], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 590, "bbox": [246, 231, 35, 38], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 5546, "bbox": [229, 1, 282, 61], "iscrowd": 0}]}, {"image_id": "ADE_val_00001120", "file_name": "ADE_val_00001120.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 135810, "bbox": [0, 0, 768, 495], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 32633, "bbox": [0, 319, 768, 192], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 22811, "bbox": [0, 0, 471, 85], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 13659, "bbox": [168, 1, 544, 151], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 47291, "bbox": [1, 317, 399, 194], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 19799, "bbox": [434, 257, 245, 212], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 12869, "bbox": [227, 255, 174, 141], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5405, "bbox": [159, 81, 86, 78], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 30347, "bbox": [5, 128, 165, 245], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 5531, "bbox": [1, 88, 36, 294], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 14052, "bbox": [568, 325, 181, 183], "iscrowd": 0}, {"id": 15032, "category_id": 20, "area": 5029, "bbox": [364, 258, 80, 176], "iscrowd": 0}, {"id": 18123, "category_id": 20, "area": 12088, "bbox": [432, 305, 121, 205], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3417, "bbox": [489, 206, 75, 55], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 2150, "bbox": [194, 194, 48, 54], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3308, "bbox": [593, 214, 79, 77], "iscrowd": 0}, {"id": 451290, "category_id": 37, "area": 905, "bbox": [240, 220, 42, 39], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1058, "bbox": [237, 252, 48, 39], "iscrowd": 0}, {"id": 50425, "category_id": 40, "area": 811, "bbox": [326, 291, 50, 40], "iscrowd": 0}, {"id": 708351, "category_id": 40, "area": 411, "bbox": [284, 255, 36, 21], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 666, "bbox": [314, 129, 30, 41], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1134, "bbox": [504, 260, 89, 26], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 257, "bbox": [515, 254, 12, 22], "iscrowd": 0}, {"id": 14205236, "category_id": 148, "area": 231, "bbox": [532, 257, 12, 24], "iscrowd": 0}, {"id": 13488138, "category_id": 148, "area": 269, "bbox": [564, 257, 13, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00001121", "file_name": "ADE_val_00001121.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21999, "bbox": [0, 0, 256, 174], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 15409, "bbox": [0, 152, 255, 104], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 307, "bbox": [124, 0, 68, 9], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 15354, "bbox": [97, 71, 158, 166], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1264, "bbox": [140, 58, 31, 65], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 171, "bbox": [175, 113, 34, 9], "iscrowd": 0}, {"id": 4199423, "category_id": 16, "area": 254, "bbox": [28, 130, 29, 42], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 4111, "bbox": [0, 0, 27, 176], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2289, "bbox": [52, 53, 58, 43], "iscrowd": 0}, {"id": 1835258, "category_id": 23, "area": 155, "bbox": [183, 100, 13, 12], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 660, "bbox": [188, 69, 27, 46], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 567, "bbox": [93, 107, 26, 26], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 427, "bbox": [226, 106, 29, 18], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 1942, "bbox": [52, 102, 77, 67], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 198, "bbox": [236, 25, 14, 17], "iscrowd": 0}, {"id": 13893382, "category_id": 143, "area": 190, "bbox": [236, 46, 14, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001122", "file_name": "ADE_val_00001122.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 89887, "bbox": [0, 0, 683, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 38786, "bbox": [1, 343, 393, 168], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 44421, "bbox": [1, 195, 346, 248], "iscrowd": 0}, {"id": 15794390, "category_id": 8, "area": 49345, "bbox": [257, 247, 426, 264], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12259, "bbox": [385, 13, 106, 227], "iscrowd": 0}, {"id": 13165281, "category_id": 9, "area": 9081, "bbox": [0, 0, 44, 250], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 8723, "bbox": [346, 428, 305, 83], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 20259, "bbox": [324, 220, 170, 156], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 17348, "bbox": [34, 0, 85, 260], "iscrowd": 0}, {"id": 15098, "category_id": 19, "area": 14202, "bbox": [459, 0, 72, 278], "iscrowd": 0}, {"id": 1581823, "category_id": 19, "area": 11416, "bbox": [348, 0, 78, 227], "iscrowd": 0}, {"id": 10213, "category_id": 19, "area": 1080, "bbox": [0, 167, 18, 106], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 7154, "bbox": [588, 0, 88, 88], "iscrowd": 0}, {"id": 4131071, "category_id": 23, "area": 3578, "bbox": [277, 4, 55, 69], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2135, "bbox": [399, 144, 52, 99], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 8199, "bbox": [528, 250, 154, 86], "iscrowd": 0}, {"id": 16766992, "category_id": 58, "area": 4167, "bbox": [219, 196, 117, 59], "iscrowd": 0}]}, {"image_id": "ADE_val_00001123", "file_name": "ADE_val_00001123.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 23846, "bbox": [0, 0, 238, 169], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 578, "bbox": [202, 216, 36, 32], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 6415, "bbox": [0, 0, 87, 105], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 2153, "bbox": [0, 199, 68, 48], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 16803, "bbox": [26, 109, 212, 139], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 258, "bbox": [0, 236, 57, 12], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 198, "bbox": [125, 41, 10, 20], "iscrowd": 0}, {"id": 3611903, "category_id": 23, "area": 98, "bbox": [118, 21, 7, 14], "iscrowd": 0}, {"id": 4465407, "category_id": 23, "area": 774, "bbox": [89, 18, 18, 46], "iscrowd": 0}, {"id": 1576703, "category_id": 23, "area": 117, "bbox": [136, 1, 9, 13], "iscrowd": 0}, {"id": 4526335, "category_id": 23, "area": 120, "bbox": [138, 40, 9, 15], "iscrowd": 0}, {"id": 1974783, "category_id": 23, "area": 45, "bbox": [113, 44, 6, 9], "iscrowd": 0}, {"id": 3473663, "category_id": 23, "area": 149, "bbox": [138, 17, 8, 21], "iscrowd": 0}, {"id": 2105851, "category_id": 23, "area": 170, "bbox": [90, 2, 15, 13], "iscrowd": 0}, {"id": 2490623, "category_id": 23, "area": 116, "bbox": [56, 38, 13, 17], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 5048, "bbox": [0, 135, 145, 68], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 1723, "bbox": [131, 117, 62, 52], "iscrowd": 0}]}, {"image_id": "ADE_val_00001124", "file_name": "ADE_val_00001124.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 139962, "bbox": [0, 0, 746, 424], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5569, "bbox": [0, 407, 746, 104], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6697, "bbox": [40, 0, 707, 11], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1826, "bbox": [11, 310, 75, 60], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 8081, "bbox": [1, 437, 746, 74], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 118373, "bbox": [19, 214, 637, 297], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1510, "bbox": [503, 312, 103, 47], "iscrowd": 0}, {"id": 5970919, "category_id": 16, "area": 1520, "bbox": [86, 310, 102, 51], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 11078, "bbox": [284, 96, 97, 115], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 9978, "bbox": [111, 94, 96, 145], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 48157, "bbox": [578, 103, 169, 323], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 4866, "bbox": [104, 220, 83, 95], "iscrowd": 0}, {"id": 65476, "category_id": 37, "area": 5255, "bbox": [504, 220, 79, 98], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3165, "bbox": [267, 244, 79, 64], "iscrowd": 0}, {"id": 2349311, "category_id": 40, "area": 2667, "bbox": [343, 251, 81, 60], "iscrowd": 0}, {"id": 46847, "category_id": 40, "area": 2698, "bbox": [319, 261, 66, 49], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 3404, "bbox": [352, 243, 123, 61], "iscrowd": 0}, {"id": 16118272, "category_id": 58, "area": 774, "bbox": [357, 229, 104, 15], "iscrowd": 0}, {"id": 16640772, "category_id": 58, "area": 2927, "bbox": [226, 241, 112, 63], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 195, "bbox": [103, 303, 22, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00001125", "file_name": "ADE_val_00001125.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 110536, "bbox": [1, 0, 681, 434], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25725, "bbox": [0, 371, 682, 140], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 271, "bbox": [568, 0, 76, 7], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 4098, "bbox": [656, 29, 25, 182], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 8855, "bbox": [340, 146, 342, 257], "iscrowd": 0}, {"id": 16718291, "category_id": 8, "area": 35856, "bbox": [6, 143, 570, 368], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 964, "bbox": [653, 27, 29, 192], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1180, "bbox": [0, 310, 11, 171], "iscrowd": 0}, {"id": 5185023, "category_id": 16, "area": 543, "bbox": [323, 263, 61, 18], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1111, "bbox": [642, 1, 39, 34], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 10476, "bbox": [114, 10, 97, 127], "iscrowd": 0}, {"id": 3997924, "category_id": 23, "area": 4681, "bbox": [386, 45, 57, 95], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1370, "bbox": [497, 158, 45, 71], "iscrowd": 0}, {"id": 65476, "category_id": 37, "area": 2933, "bbox": [293, 162, 63, 113], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 6148, "bbox": [165, 197, 121, 70], "iscrowd": 0}, {"id": 15458304, "category_id": 58, "area": 10304, "bbox": [28, 207, 155, 106], "iscrowd": 0}, {"id": 16514826, "category_id": 58, "area": 2258, "bbox": [431, 186, 65, 42], "iscrowd": 0}, {"id": 15465990, "category_id": 58, "area": 4096, "bbox": [350, 186, 88, 70], "iscrowd": 0}]}, {"image_id": "ADE_val_00001126", "file_name": "ADE_val_00001126.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 102584, "bbox": [0, 0, 501, 462], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 35949, "bbox": [2, 399, 765, 113], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 38063, "bbox": [103, 0, 665, 127], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 82086, "bbox": [165, 227, 458, 285], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 78474, "bbox": [481, 34, 287, 383], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 17241, "bbox": [4, 329, 159, 166], "iscrowd": 0}, {"id": 4982015, "category_id": 16, "area": 1109, "bbox": [408, 297, 59, 25], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3058, "bbox": [265, 269, 64, 75], "iscrowd": 0}, {"id": 378598, "category_id": 40, "area": 4914, "bbox": [310, 268, 106, 76], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 2538, "bbox": [201, 285, 76, 52], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1030, "bbox": [413, 214, 68, 85], "iscrowd": 0}, {"id": 464895, "category_id": 67, "area": 4285, "bbox": [2, 147, 81, 184], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 618, "bbox": [101, 324, 36, 22], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 8121, "bbox": [374, 0, 137, 128], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 4491, "bbox": [571, 342, 117, 70], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 1296, "bbox": [131, 187, 50, 97], "iscrowd": 0}, {"id": 16583936, "category_id": 135, "area": 377, "bbox": [388, 238, 17, 36], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 368, "bbox": [431, 265, 17, 35], "iscrowd": 0}, {"id": 11726336, "category_id": 136, "area": 1114, "bbox": [84, 292, 32, 48], "iscrowd": 0}, {"id": 11861760, "category_id": 136, "area": 2408, "bbox": [18, 270, 46, 79], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 999, "bbox": [54, 312, 32, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001127", "file_name": "ADE_val_00001127.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 125960, "bbox": [0, 0, 681, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 16006, "bbox": [63, 314, 562, 198], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9644, "bbox": [38, 0, 361, 100], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2409, "bbox": [295, 74, 72, 73], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 73489, "bbox": [0, 268, 475, 244], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1321, "bbox": [78, 247, 22, 72], "iscrowd": 0}, {"id": 16711913, "category_id": 11, "area": 1723, "bbox": [135, 260, 34, 70], "iscrowd": 0}, {"id": 15073510, "category_id": 11, "area": 36146, "bbox": [213, 146, 221, 253], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 5086, "bbox": [171, 106, 28, 200], "iscrowd": 0}, {"id": 3866395, "category_id": 15, "area": 35467, "bbox": [478, 46, 196, 466], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1981, "bbox": [633, 0, 42, 65], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 12123, "bbox": [503, 265, 104, 133], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 14351, "bbox": [506, 126, 106, 175], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 179, "bbox": [87, 200, 11, 18], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 4469, "bbox": [281, 180, 55, 92], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 856, "bbox": [137, 231, 32, 34], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 118, "bbox": [331, 132, 17, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001128", "file_name": "ADE_val_00001128.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 175915, "bbox": [0, 0, 767, 379], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 959, "bbox": [727, 463, 40, 48], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 43345, "bbox": [1, 0, 230, 198], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 134185, "bbox": [0, 204, 767, 307], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 7555, "bbox": [372, 223, 112, 105], "iscrowd": 0}, {"id": 2415597, "category_id": 40, "area": 5946, "bbox": [462, 228, 85, 109], "iscrowd": 0}, {"id": 1687551, "category_id": 40, "area": 12399, "bbox": [541, 233, 128, 106], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 7386, "bbox": [542, 223, 207, 122], "iscrowd": 0}, {"id": 15460608, "category_id": 58, "area": 3294, "bbox": [390, 204, 161, 60], "iscrowd": 0}]}, {"image_id": "ADE_val_00001129", "file_name": "ADE_val_00001129.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 197167, "bbox": [2, 1, 681, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 13111, "bbox": [232, 400, 274, 112], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 86083, "bbox": [1, 91, 250, 421], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 35912, "bbox": [209, 251, 217, 240], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 6530, "bbox": [245, 51, 98, 94], "iscrowd": 0}]}, {"image_id": "ADE_val_00001130", "file_name": "ADE_val_00001130.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 106836, "bbox": [1, 1, 750, 455], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 84405, "bbox": [0, 346, 752, 166], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 67554, "bbox": [0, 1, 690, 134], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 559, "bbox": [578, 226, 48, 30], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 31524, "bbox": [95, 246, 327, 195], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4318, "bbox": [432, 292, 79, 66], "iscrowd": 0}, {"id": 5571316, "category_id": 16, "area": 909, "bbox": [182, 294, 65, 25], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6860, "bbox": [299, 153, 91, 80], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 3327, "bbox": [624, 105, 28, 159], "iscrowd": 0}, {"id": 15978459, "category_id": 28, "area": 9781, "bbox": [679, 41, 44, 239], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 20316, "bbox": [29, 157, 124, 209], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1607, "bbox": [194, 222, 45, 75], "iscrowd": 0}, {"id": 65506, "category_id": 37, "area": 2120, "bbox": [450, 210, 52, 86], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1332, "bbox": [263, 277, 52, 33], "iscrowd": 0}, {"id": 1622253, "category_id": 40, "area": 1331, "bbox": [310, 276, 49, 36], "iscrowd": 0}, {"id": 898559, "category_id": 40, "area": 1356, "bbox": [350, 276, 49, 36], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 660, "bbox": [658, 265, 41, 19], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 26618, "bbox": [561, 268, 179, 185], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 712, "bbox": [245, 272, 84, 36], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 231, "bbox": [265, 96, 25, 12], "iscrowd": 0}, {"id": 1021695, "category_id": 83, "area": 233, "bbox": [357, 85, 25, 13], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 459, "bbox": [584, 256, 33, 17], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 973, "bbox": [632, 229, 28, 44], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 4993, "bbox": [163, 0, 215, 91], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 188, "bbox": [228, 285, 19, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00001131", "file_name": "ADE_val_00001131.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 118771, "bbox": [0, 0, 682, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 32502, "bbox": [1, 324, 681, 188], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2545, "bbox": [432, 0, 232, 29], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 10199, "bbox": [7, 403, 573, 108], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 74965, "bbox": [62, 196, 454, 315], "iscrowd": 0}, {"id": 16711868, "category_id": 8, "area": 30149, "bbox": [334, 179, 349, 242], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 22937, "bbox": [541, 30, 137, 190], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4084, "bbox": [238, 273, 122, 63], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 12620, "bbox": [491, 41, 70, 242], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1892, "bbox": [450, 208, 43, 59], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 4206, "bbox": [349, 91, 64, 68], "iscrowd": 0}, {"id": 1842170, "category_id": 23, "area": 5060, "bbox": [248, 112, 59, 92], "iscrowd": 0}, {"id": 4194530, "category_id": 23, "area": 7851, "bbox": [100, 86, 96, 86], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1148, "bbox": [303, 210, 33, 71], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 1780, "bbox": [106, 299, 129, 35], "iscrowd": 0}, {"id": 16769792, "category_id": 58, "area": 3103, "bbox": [98, 275, 125, 44], "iscrowd": 0}, {"id": 15064086, "category_id": 58, "area": 2586, "bbox": [354, 230, 108, 40], "iscrowd": 0}, {"id": 16776979, "category_id": 58, "area": 492, "bbox": [349, 261, 44, 19], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 1330, "bbox": [11, 28, 60, 30], "iscrowd": 0}, {"id": 16717056, "category_id": 135, "area": 727, "bbox": [304, 51, 39, 23], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 206, "bbox": [284, 273, 25, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00001132", "file_name": "ADE_val_00001132.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 99664, "bbox": [0, 7, 658, 431], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9872, "bbox": [2, 399, 656, 91], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 29671, "bbox": [2, 1, 655, 64], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 91771, "bbox": [12, 199, 580, 291], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6662, "bbox": [570, 346, 89, 122], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 53882, "bbox": [24, 49, 216, 288], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 454, "bbox": [238, 237, 22, 56], "iscrowd": 0}, {"id": 65533, "category_id": 37, "area": 1219, "bbox": [607, 257, 37, 103], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3194, "bbox": [316, 253, 84, 72], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 4479, "bbox": [411, 198, 116, 116], "iscrowd": 0}, {"id": 14800406, "category_id": 58, "area": 1967, "bbox": [322, 206, 96, 62], "iscrowd": 0}, {"id": 16770560, "category_id": 58, "area": 8642, "bbox": [369, 246, 130, 89], "iscrowd": 0}, {"id": 15399424, "category_id": 58, "area": 4785, "bbox": [250, 245, 117, 71], "iscrowd": 0}, {"id": 16314624, "category_id": 58, "area": 2184, "bbox": [405, 231, 113, 90], "iscrowd": 0}, {"id": 16776979, "category_id": 58, "area": 1510, "bbox": [295, 229, 92, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001133", "file_name": "ADE_val_00001133.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 53040, "bbox": [0, 70, 764, 327], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 83895, "bbox": [0, 315, 764, 196], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 98748, "bbox": [0, 0, 764, 162], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 65489, "bbox": [2, 117, 755, 196], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 55679, "bbox": [324, 244, 339, 267], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3722, "bbox": [1, 154, 287, 167], "iscrowd": 0}, {"id": 15658235, "category_id": 9, "area": 5501, "bbox": [431, 105, 332, 156], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 82, "bbox": [427, 283, 28, 5], "iscrowd": 0}, {"id": 5181935, "category_id": 16, "area": 2130, "bbox": [659, 307, 86, 101], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4721, "bbox": [10, 281, 142, 105], "iscrowd": 0}, {"id": 24239, "category_id": 20, "area": 1040, "bbox": [276, 272, 43, 65], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 786, "bbox": [386, 186, 27, 32], "iscrowd": 0}, {"id": 4587758, "category_id": 23, "area": 308, "bbox": [338, 220, 15, 22], "iscrowd": 0}, {"id": 4069887, "category_id": 23, "area": 216, "bbox": [309, 222, 14, 16], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 116, "bbox": [334, 194, 13, 18], "iscrowd": 0}, {"id": 14809581, "category_id": 28, "area": 77, "bbox": [323, 182, 8, 12], "iscrowd": 0}, {"id": 15134689, "category_id": 28, "area": 215, "bbox": [311, 196, 14, 20], "iscrowd": 0}, {"id": 15851214, "category_id": 28, "area": 92, "bbox": [325, 216, 9, 14], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 2195, "bbox": [274, 265, 81, 76], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 542, "bbox": [437, 236, 27, 49], "iscrowd": 0}, {"id": 60107, "category_id": 37, "area": 1582, "bbox": [679, 236, 56, 79], "iscrowd": 0}, {"id": 1895389, "category_id": 37, "area": 372, "bbox": [288, 231, 21, 37], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1941, "bbox": [501, 241, 64, 52], "iscrowd": 0}, {"id": 50943, "category_id": 40, "area": 1241, "bbox": [60, 303, 54, 36], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 4935, "bbox": [465, 246, 174, 57], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 216, "bbox": [96, 117, 27, 11], "iscrowd": 0}, {"id": 50428, "category_id": 83, "area": 116, "bbox": [235, 139, 18, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00001134", "file_name": "ADE_val_00001134.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 25676, "bbox": [0, 0, 256, 215], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1049, "bbox": [0, 203, 100, 52], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 864, "bbox": [166, 0, 90, 18], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 17496, "bbox": [75, 124, 181, 132], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 5420, "bbox": [207, 30, 41, 150], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5237, "bbox": [2, 169, 83, 85], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 5024, "bbox": [101, 49, 74, 72], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1214, "bbox": [23, 100, 46, 73], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1443, "bbox": [108, 135, 52, 38], "iscrowd": 0}, {"id": 109823, "category_id": 40, "area": 598, "bbox": [151, 132, 34, 31], "iscrowd": 0}, {"id": 51967, "category_id": 40, "area": 921, "bbox": [178, 135, 45, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00001135", "file_name": "ADE_val_00001135.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21931, "bbox": [150, 1, 249, 202], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7945, "bbox": [2, 313, 195, 86], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 39524, "bbox": [0, 63, 372, 317], "iscrowd": 0}, {"id": 14745782, "category_id": 8, "area": 2505, "bbox": [179, 245, 220, 146], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1297, "bbox": [100, 156, 73, 24], "iscrowd": 0}, {"id": 5505279, "category_id": 16, "area": 3938, "bbox": [308, 206, 90, 70], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 25717, "bbox": [2, 0, 151, 199], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 666, "bbox": [75, 149, 28, 38], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2173, "bbox": [353, 113, 44, 99], "iscrowd": 0}, {"id": 1114063, "category_id": 37, "area": 409, "bbox": [117, 103, 35, 57], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2879, "bbox": [169, 126, 72, 61], "iscrowd": 0}, {"id": 2020834, "category_id": 40, "area": 4506, "bbox": [219, 134, 98, 68], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 731, "bbox": [301, 148, 40, 36], "iscrowd": 0}, {"id": 16771328, "category_id": 58, "area": 548, "bbox": [301, 175, 39, 20], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 360, "bbox": [141, 140, 23, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001136", "file_name": "ADE_val_00001136.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 104326, "bbox": [1, 0, 768, 418], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 2832, "bbox": [202, 156, 59, 85], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 53747, "bbox": [1, 312, 768, 199], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 981, "bbox": [206, 216, 40, 36], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 51764, "bbox": [0, 1, 735, 122], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 51389, "bbox": [268, 209, 381, 302], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 22194, "bbox": [115, 131, 173, 218], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 592, "bbox": [372, 275, 44, 21], "iscrowd": 0}, {"id": 4984043, "category_id": 16, "area": 6954, "bbox": [637, 306, 105, 124], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 20141, "bbox": [28, 67, 96, 281], "iscrowd": 0}, {"id": 534783, "category_id": 19, "area": 7597, "bbox": [289, 121, 59, 185], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2168, "bbox": [103, 238, 53, 58], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 3712, "bbox": [319, 196, 47, 103], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 760, "bbox": [401, 216, 271, 80], "iscrowd": 0}, {"id": 63714, "category_id": 37, "area": 1536, "bbox": [640, 208, 58, 104], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 2356, "bbox": [206, 252, 40, 64], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 580, "bbox": [581, 287, 38, 25], "iscrowd": 0}, {"id": 16699136, "category_id": 58, "area": 1479, "bbox": [506, 252, 84, 21], "iscrowd": 0}, {"id": 15978266, "category_id": 58, "area": 1526, "bbox": [438, 243, 70, 26], "iscrowd": 0}, {"id": 16773632, "category_id": 58, "area": 2590, "bbox": [402, 262, 93, 45], "iscrowd": 0}, {"id": 15925013, "category_id": 58, "area": 4197, "bbox": [483, 269, 111, 52], "iscrowd": 0}, {"id": 16645916, "category_id": 58, "area": 314, "bbox": [585, 265, 25, 29], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 143, "bbox": [351, 72, 17, 11], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 32120, "bbox": [171, 323, 265, 188], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 123, "bbox": [654, 303, 17, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001137", "file_name": "ADE_val_00001137.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 38349, "bbox": [0, 0, 349, 247], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 25172, "bbox": [79, 108, 271, 139], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7267, "bbox": [189, 102, 151, 58], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5244, "bbox": [38, 176, 81, 71], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 5563, "bbox": [226, 15, 78, 87], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 503, "bbox": [176, 120, 28, 25], "iscrowd": 0}, {"id": 62685, "category_id": 37, "area": 1823, "bbox": [43, 118, 58, 65], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 935, "bbox": [197, 44, 50, 36], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 269, "bbox": [123, 0, 33, 18], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 351, "bbox": [213, 79, 18, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00001138", "file_name": "ADE_val_00001138.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 12417, "bbox": [0, 0, 256, 170], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4597, "bbox": [0, 160, 256, 96], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1285, "bbox": [18, 20, 23, 99], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 9439, "bbox": [0, 203, 255, 52], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 9142, "bbox": [1, 50, 113, 173], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2565, "bbox": [73, 1, 57, 123], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 3191, "bbox": [72, 1, 60, 116], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 7135, "bbox": [156, 21, 83, 104], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 4753, "bbox": [31, 47, 59, 86], "iscrowd": 0}, {"id": 16728832, "category_id": 45, "area": 9307, "bbox": [121, 120, 135, 82], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 67, "bbox": [1, 134, 8, 10], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 101, "bbox": [39, 21, 16, 11], "iscrowd": 0}, {"id": 1056255, "category_id": 67, "area": 376, "bbox": [130, 87, 25, 22], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 86, "bbox": [44, 29, 6, 16], "iscrowd": 0}, {"id": 15007496, "category_id": 136, "area": 331, "bbox": [212, 94, 14, 34], "iscrowd": 0}, {"id": 15400711, "category_id": 136, "area": 213, "bbox": [225, 102, 11, 26], "iscrowd": 0}, {"id": 12706322, "category_id": 136, "area": 90, "bbox": [141, 105, 6, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00001139", "file_name": "ADE_val_00001139.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 66837, "bbox": [0, 0, 682, 375], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5495, "bbox": [165, 391, 425, 121], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 13026, "bbox": [0, 0, 337, 70], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 25480, "bbox": [166, 391, 353, 121], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 57663, "bbox": [0, 222, 378, 290], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 8628, "bbox": [570, 410, 112, 102], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 66732, "bbox": [293, 81, 236, 326], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3829, "bbox": [108, 282, 94, 56], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 37439, "bbox": [522, 47, 130, 353], "iscrowd": 0}, {"id": 19455, "category_id": 19, "area": 21005, "bbox": [202, 89, 94, 253], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 345, "bbox": [132, 261, 20, 23], "iscrowd": 0}, {"id": 3217125, "category_id": 23, "area": 252, "bbox": [151, 268, 19, 18], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 904, "bbox": [107, 232, 32, 60], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 7103, "bbox": [0, 283, 145, 84], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 15527, "bbox": [515, 291, 168, 196], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 156, "bbox": [162, 278, 17, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00001140", "file_name": "ADE_val_00001140.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 124388, "bbox": [0, 0, 768, 408], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2146, "bbox": [202, 445, 145, 67], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5680, "bbox": [434, 0, 334, 26], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 933, "bbox": [274, 490, 72, 21], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 39184, "bbox": [0, 0, 435, 177], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 105736, "bbox": [203, 266, 564, 244], "iscrowd": 0}, {"id": 16711884, "category_id": 8, "area": 23278, "bbox": [0, 344, 286, 167], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 13168, "bbox": [622, 74, 107, 166], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 22233, "bbox": [517, 17, 98, 305], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 16849, "bbox": [25, 304, 190, 156], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 7475, "bbox": [608, 22, 160, 60], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 8762, "bbox": [431, 224, 158, 97], "iscrowd": 0}, {"id": 16329, "category_id": 20, "area": 7798, "bbox": [650, 255, 117, 122], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 4511, "bbox": [78, 213, 73, 107], "iscrowd": 0}, {"id": 981718, "category_id": 37, "area": 3865, "bbox": [610, 111, 73, 215], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 971, "bbox": [383, 269, 42, 39], "iscrowd": 0}, {"id": 45055, "category_id": 40, "area": 2097, "bbox": [327, 271, 72, 45], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 532, "bbox": [125, 307, 38, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00001141", "file_name": "ADE_val_00001141.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 28565, "bbox": [1, 0, 255, 203], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 13394, "bbox": [0, 180, 256, 76], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5254, "bbox": [0, 0, 224, 44], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 3145, "bbox": [64, 127, 100, 71], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 821, "bbox": [179, 128, 25, 37], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 4131, "bbox": [49, 55, 79, 122], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 1436, "bbox": [11, 100, 31, 79], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 3520, "bbox": [0, 159, 40, 95], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 288, "bbox": [80, 137, 26, 13], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 512, "bbox": [161, 126, 17, 31], "iscrowd": 0}, {"id": 16776973, "category_id": 63, "area": 1275, "bbox": [214, 127, 23, 60], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 106, "bbox": [49, 126, 9, 20], "iscrowd": 0}, {"id": 1507572, "category_id": 67, "area": 285, "bbox": [1, 104, 21, 21], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 203, "bbox": [178, 170, 25, 11], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 94, "bbox": [39, 109, 8, 14], "iscrowd": 0}, {"id": 16724744, "category_id": 135, "area": 101, "bbox": [129, 115, 10, 17], "iscrowd": 0}, {"id": 16726533, "category_id": 135, "area": 67, "bbox": [1, 51, 5, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00001142", "file_name": "ADE_val_00001142.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 115990, "bbox": [1, 0, 667, 485], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6762, "bbox": [1, 442, 209, 69], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 8616, "bbox": [4, 63, 191, 76], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 109666, "bbox": [123, 147, 545, 364], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 43643, "bbox": [3, 63, 219, 280], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3951, "bbox": [286, 286, 132, 61], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 14606, "bbox": [1, 1, 219, 87], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 20429, "bbox": [508, 35, 156, 141], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 4319, "bbox": [317, 188, 73, 112], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 334, "bbox": [383, 283, 24, 18], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 4697, "bbox": [410, 279, 161, 53], "iscrowd": 0}, {"id": 16773376, "category_id": 58, "area": 5690, "bbox": [517, 296, 151, 75], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 323, "bbox": [310, 275, 17, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00001143", "file_name": "ADE_val_00001143.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 15300, "bbox": [0, 0, 255, 141], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 938, "bbox": [5, 133, 214, 58], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9471, "bbox": [4, 0, 250, 59], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 7202, "bbox": [45, 115, 210, 76], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 356, "bbox": [106, 107, 40, 17], "iscrowd": 0}, {"id": 4727551, "category_id": 16, "area": 404, "bbox": [168, 116, 47, 29], "iscrowd": 0}, {"id": 6687224, "category_id": 16, "area": 106, "bbox": [219, 135, 23, 9], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1068, "bbox": [154, 63, 29, 75], "iscrowd": 0}, {"id": 10981, "category_id": 19, "area": 1500, "bbox": [190, 61, 39, 76], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 407, "bbox": [174, 109, 25, 36], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1155, "bbox": [29, 68, 30, 45], "iscrowd": 0}, {"id": 3612159, "category_id": 23, "area": 76, "bbox": [234, 73, 5, 19], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 495, "bbox": [136, 112, 26, 26], "iscrowd": 0}, {"id": 12320527, "category_id": 31, "area": 1164, "bbox": [73, 115, 37, 41], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 494, "bbox": [216, 98, 32, 42], "iscrowd": 0}, {"id": 63704, "category_id": 37, "area": 1115, "bbox": [0, 81, 37, 52], "iscrowd": 0}, {"id": 1966054, "category_id": 37, "area": 94, "bbox": [170, 95, 9, 22], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 316, "bbox": [210, 143, 37, 16], "iscrowd": 0}, {"id": 42735, "category_id": 40, "area": 467, "bbox": [214, 150, 39, 23], "iscrowd": 0}, {"id": 1694975, "category_id": 40, "area": 585, "bbox": [225, 157, 29, 34], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 3856, "bbox": [0, 121, 77, 69], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 310, "bbox": [115, 124, 28, 18], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 164, "bbox": [125, 82, 14, 19], "iscrowd": 0}, {"id": 232, "category_id": 67, "area": 162, "bbox": [113, 77, 13, 23], "iscrowd": 0}, {"id": 1573115, "category_id": 67, "area": 151, "bbox": [199, 94, 17, 15], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 497, "bbox": [56, 152, 25, 26], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 104, "bbox": [34, 60, 28, 10], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 88, "bbox": [115, 97, 9, 12], "iscrowd": 0}, {"id": 12254976, "category_id": 136, "area": 89, "bbox": [123, 97, 10, 11], "iscrowd": 0}, {"id": 14021403, "category_id": 136, "area": 53, "bbox": [205, 108, 6, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00001144", "file_name": "ADE_val_00001144.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 62468, "bbox": [0, 0, 599, 347], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10206, "bbox": [2, 317, 597, 82], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 19611, "bbox": [23, 1, 576, 64], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1050, "bbox": [24, 186, 53, 32], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 7692, "bbox": [3, 46, 545, 71], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 84594, "bbox": [111, 89, 488, 310], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12060, "bbox": [435, 59, 123, 137], "iscrowd": 0}, {"id": 14153951, "category_id": 9, "area": 6723, "bbox": [313, 72, 97, 120], "iscrowd": 0}, {"id": 14800639, "category_id": 9, "area": 10076, "bbox": [2, 35, 93, 168], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1269, "bbox": [323, 214, 56, 37], "iscrowd": 0}, {"id": 4790527, "category_id": 16, "area": 5528, "bbox": [38, 232, 75, 127], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4055, "bbox": [393, 198, 81, 78], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2453, "bbox": [51, 149, 62, 90], "iscrowd": 0}, {"id": 192494, "category_id": 37, "area": 2261, "bbox": [313, 138, 59, 82], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 2329, "bbox": [155, 221, 105, 35], "iscrowd": 0}, {"id": 16309777, "category_id": 58, "area": 1945, "bbox": [247, 215, 89, 32], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1743, "bbox": [46, 288, 51, 42], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 706, "bbox": [39, 208, 34, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00001145", "file_name": "ADE_val_00001145.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 185859, "bbox": [0, 0, 681, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1315, "bbox": [667, 321, 14, 162], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 103263, "bbox": [30, 228, 653, 282], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 8164, "bbox": [464, 328, 155, 117], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 25472, "bbox": [154, 17, 177, 153], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 6083, "bbox": [501, 184, 108, 156], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 4768, "bbox": [143, 304, 198, 55], "iscrowd": 0}, {"id": 16769793, "category_id": 58, "area": 7359, "bbox": [151, 265, 180, 66], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 1119, "bbox": [550, 279, 20, 65], "iscrowd": 0}]}, {"image_id": "ADE_val_00001146", "file_name": "ADE_val_00001146.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 116960, "bbox": [0, 0, 682, 473], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 33981, "bbox": [198, 396, 485, 115], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 16676, "bbox": [0, 0, 558, 44], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 1814, "bbox": [371, 143, 37, 55], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 1944, "bbox": [111, 310, 64, 40], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 19120, "bbox": [0, 402, 308, 109], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 12911, "bbox": [151, 282, 164, 181], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 96788, "bbox": [315, 10, 331, 455], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3784, "bbox": [209, 152, 81, 140], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 8576, "bbox": [79, 340, 109, 120], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1484, "bbox": [116, 280, 55, 36], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 22601, "bbox": [499, 114, 143, 188], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 604, "bbox": [627, 20, 13, 55], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1243, "bbox": [56, 399, 65, 40], "iscrowd": 0}, {"id": 60261, "category_id": 113, "area": 4101, "bbox": [573, 361, 71, 80], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 84, "bbox": [225, 164, 14, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00001147", "file_name": "ADE_val_00001147.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 133900, "bbox": [1, 1, 511, 517], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 34328, "bbox": [1, 517, 456, 166], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 56659, "bbox": [342, 1, 170, 682], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 70956, "bbox": [71, 335, 328, 326], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 42308, "bbox": [125, 59, 285, 325], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 6289, "bbox": [228, 363, 150, 89], "iscrowd": 0}]}, {"image_id": "ADE_val_00001148", "file_name": "ADE_val_00001148.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 19391, "bbox": [2, 1, 297, 189], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14776, "bbox": [2, 118, 297, 106], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 10726, "bbox": [2, 147, 175, 78], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6791, "bbox": [87, 1, 84, 86], "iscrowd": 0}, {"id": 14282210, "category_id": 9, "area": 4288, "bbox": [191, 1, 57, 100], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 5735, "bbox": [211, 74, 73, 107], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1560, "bbox": [173, 1, 24, 119], "iscrowd": 0}]}, {"image_id": "ADE_val_00001149", "file_name": "ADE_val_00001149.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 71249, "bbox": [0, 0, 499, 332], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 23520, "bbox": [27, 223, 466, 109], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9759, "bbox": [108, 0, 242, 53], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 11066, "bbox": [209, 169, 243, 154], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 350, "bbox": [309, 130, 10, 45], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 431, "bbox": [107, 169, 12, 76], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 3853, "bbox": [190, 126, 47, 99], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5048, "bbox": [414, 237, 85, 96], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 858, "bbox": [319, 97, 16, 59], "iscrowd": 0}, {"id": 2175487, "category_id": 19, "area": 354, "bbox": [301, 111, 13, 45], "iscrowd": 0}, {"id": 1977337, "category_id": 19, "area": 1937, "bbox": [235, 111, 26, 83], "iscrowd": 0}, {"id": 16630, "category_id": 19, "area": 2923, "bbox": [162, 109, 32, 122], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 549, "bbox": [130, 126, 23, 24], "iscrowd": 0}, {"id": 2752759, "category_id": 23, "area": 667, "bbox": [127, 153, 29, 23], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 892, "bbox": [276, 157, 32, 42], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 1651, "bbox": [112, 180, 45, 60], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 266, "bbox": [316, 156, 22, 15], "iscrowd": 0}, {"id": 589806, "category_id": 37, "area": 2594, "bbox": [438, 135, 60, 114], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 351, "bbox": [285, 192, 24, 21], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 10255, "bbox": [24, 155, 93, 169], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 670, "bbox": [395, 186, 28, 35], "iscrowd": 0}, {"id": 16776960, "category_id": 58, "area": 990, "bbox": [376, 171, 30, 45], "iscrowd": 0}, {"id": 16774912, "category_id": 58, "area": 261, "bbox": [308, 171, 33, 12], "iscrowd": 0}, {"id": 15982863, "category_id": 58, "area": 1244, "bbox": [336, 167, 44, 55], "iscrowd": 0}, {"id": 15727367, "category_id": 58, "area": 175, "bbox": [287, 182, 23, 12], "iscrowd": 0}, {"id": 14930959, "category_id": 58, "area": 1574, "bbox": [306, 182, 54, 45], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 29, "bbox": [288, 34, 7, 5], "iscrowd": 0}, {"id": 828159, "category_id": 83, "area": 44, "bbox": [157, 24, 8, 7], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 1481, "bbox": [199, 6, 49, 76], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 2908, "bbox": [61, 81, 48, 75], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 271, "bbox": [438, 224, 23, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00001150", "file_name": "ADE_val_00001150.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 116384, "bbox": [0, 0, 691, 386], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 71948, "bbox": [0, 327, 692, 184], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 14074, "bbox": [207, 0, 477, 59], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 16513, "bbox": [263, 194, 339, 292], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4372, "bbox": [373, 94, 54, 119], "iscrowd": 0}, {"id": 15587275, "category_id": 9, "area": 9407, "bbox": [2, 10, 40, 249], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1073, "bbox": [330, 243, 81, 24], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 16246, "bbox": [42, 1, 75, 241], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2431, "bbox": [669, 257, 23, 170], "iscrowd": 0}, {"id": 25811, "category_id": 20, "area": 12223, "bbox": [10, 235, 159, 204], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 588, "bbox": [355, 220, 28, 29], "iscrowd": 0}, {"id": 5179135, "category_id": 23, "area": 7251, "bbox": [215, 106, 68, 114], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 7713, "bbox": [447, 115, 115, 74], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 4476, "bbox": [599, 269, 75, 129], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 144, "bbox": [625, 164, 36, 118], "iscrowd": 0}, {"id": 62945, "category_id": 37, "area": 3316, "bbox": [613, 158, 47, 120], "iscrowd": 0}, {"id": 1507284, "category_id": 37, "area": 137, "bbox": [383, 164, 35, 89], "iscrowd": 0}, {"id": 65485, "category_id": 37, "area": 1796, "bbox": [384, 161, 36, 90], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2921, "bbox": [483, 207, 74, 67], "iscrowd": 0}, {"id": 1881840, "category_id": 40, "area": 3728, "bbox": [421, 216, 89, 62], "iscrowd": 0}, {"id": 1879551, "category_id": 40, "area": 1284, "bbox": [409, 202, 75, 55], "iscrowd": 0}, {"id": 2469631, "category_id": 40, "area": 8263, "bbox": [25, 237, 142, 92], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 2341, "bbox": [507, 195, 79, 77], "iscrowd": 0}, {"id": 16769536, "category_id": 58, "area": 479, "bbox": [440, 192, 65, 20], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 1622, "bbox": [0, 294, 17, 130], "iscrowd": 0}]}, {"image_id": "ADE_val_00001151", "file_name": "ADE_val_00001151.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14867, "bbox": [0, 105, 510, 307], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12374, "bbox": [0, 409, 299, 273], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 15424, "bbox": [0, 0, 510, 113], "iscrowd": 0}, {"id": 6094592, "category_id": 107, "area": 92526, "bbox": [32, 0, 478, 673], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 28622, "bbox": [61, 338, 263, 228], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 106966, "bbox": [62, 343, 449, 339], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 35268, "bbox": [14, 140, 301, 272], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2124, "bbox": [399, 337, 112, 27], "iscrowd": 0}, {"id": 16515325, "category_id": 11, "area": 2279, "bbox": [0, 268, 20, 157], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 742, "bbox": [263, 322, 44, 22], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 8207, "bbox": [434, 179, 75, 122], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 20932, "bbox": [307, 84, 102, 270], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 2017, "bbox": [409, 267, 45, 77], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 2555, "bbox": [1, 468, 38, 127], "iscrowd": 0}]}, {"image_id": "ADE_val_00001152", "file_name": "ADE_val_00001152.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 37147, "bbox": [88, 0, 405, 370], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2370, "bbox": [2, 232, 489, 138], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 14098, "bbox": [54, 0, 328, 48], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 592, "bbox": [239, 194, 75, 8], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 469, "bbox": [127, 110, 68, 68], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 21058, "bbox": [0, 235, 421, 135], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 7637, "bbox": [123, 151, 329, 197], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 8948, "bbox": [235, 84, 81, 121], "iscrowd": 0}, {"id": 14277592, "category_id": 9, "area": 1069, "bbox": [41, 76, 9, 133], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 9807, "bbox": [410, 233, 82, 136], "iscrowd": 0}, {"id": 16646384, "category_id": 11, "area": 705, "bbox": [343, 175, 30, 35], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 728, "bbox": [369, 80, 10, 97], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2808, "bbox": [98, 183, 81, 71], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1069, "bbox": [167, 163, 52, 67], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 2566, "bbox": [2, 215, 54, 90], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 4871, "bbox": [432, 99, 60, 154], "iscrowd": 0}, {"id": 851959, "category_id": 37, "area": 1554, "bbox": [93, 131, 48, 58], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 2573, "bbox": [355, 158, 68, 77], "iscrowd": 0}, {"id": 16773376, "category_id": 58, "area": 2474, "bbox": [393, 164, 60, 71], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 13905, "bbox": [0, 0, 89, 277], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 432, "bbox": [340, 138, 37, 21], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 551, "bbox": [421, 224, 40, 18], "iscrowd": 0}, {"id": 1681892, "category_id": 68, "area": 838, "bbox": [0, 3, 37, 39], "iscrowd": 0}, {"id": 1416703, "category_id": 68, "area": 449, "bbox": [41, 25, 33, 32], "iscrowd": 0}, {"id": 37872, "category_id": 68, "area": 642, "bbox": [2, 48, 37, 28], "iscrowd": 0}, {"id": 1087717, "category_id": 68, "area": 683, "bbox": [2, 87, 35, 25], "iscrowd": 0}, {"id": 39935, "category_id": 68, "area": 699, "bbox": [0, 127, 36, 21], "iscrowd": 0}, {"id": 1412351, "category_id": 68, "area": 822, "bbox": [0, 161, 37, 26], "iscrowd": 0}, {"id": 40959, "category_id": 68, "area": 118, "bbox": [79, 73, 8, 20], "iscrowd": 0}, {"id": 1350140, "category_id": 68, "area": 62, "bbox": [79, 104, 5, 16], "iscrowd": 0}, {"id": 172269, "category_id": 68, "area": 146, "bbox": [78, 131, 9, 18], "iscrowd": 0}, {"id": 40703, "category_id": 68, "area": 105, "bbox": [78, 162, 8, 15], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 197, "bbox": [355, 155, 13, 23], "iscrowd": 0}, {"id": 12839168, "category_id": 136, "area": 172, "bbox": [149, 171, 13, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001153", "file_name": "ADE_val_00001153.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 127337, "bbox": [1, 0, 681, 390], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 41802, "bbox": [1, 351, 671, 160], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 29023, "bbox": [35, 114, 565, 397], "iscrowd": 0}, {"id": 16586216, "category_id": 8, "area": 6501, "bbox": [554, 403, 128, 107], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 11306, "bbox": [550, 255, 132, 158], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 8831, "bbox": [412, 0, 94, 98], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 6481, "bbox": [607, 105, 76, 182], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 3652, "bbox": [301, 185, 119, 43], "iscrowd": 0}, {"id": 16776704, "category_id": 58, "area": 3636, "bbox": [409, 219, 158, 54], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 1411, "bbox": [102, 285, 78, 31], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 739, "bbox": [604, 242, 45, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001154", "file_name": "ADE_val_00001154.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 65692, "bbox": [0, 14, 699, 372], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 39889, "bbox": [0, 326, 699, 133], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 57747, "bbox": [0, 0, 699, 146], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 1320, "bbox": [447, 308, 194, 80], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 52428, "bbox": [206, 150, 372, 309], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4164, "bbox": [395, 149, 45, 103], "iscrowd": 0}, {"id": 16767465, "category_id": 9, "area": 24878, "bbox": [2, 59, 107, 251], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 10194, "bbox": [455, 308, 170, 151], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 9331, "bbox": [113, 274, 117, 106], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 323, "bbox": [480, 159, 17, 20], "iscrowd": 0}, {"id": 5115647, "category_id": 23, "area": 390, "bbox": [251, 106, 20, 24], "iscrowd": 0}, {"id": 1638655, "category_id": 23, "area": 309, "bbox": [285, 115, 18, 21], "iscrowd": 0}, {"id": 4784378, "category_id": 23, "area": 263, "bbox": [315, 122, 15, 21], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 1677, "bbox": [439, 227, 52, 38], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 850, "bbox": [428, 52, 44, 31], "iscrowd": 0}, {"id": 1572820, "category_id": 37, "area": 1756, "bbox": [129, 191, 63, 92], "iscrowd": 0}, {"id": 1900511, "category_id": 37, "area": 373, "bbox": [372, 217, 34, 37], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1470, "bbox": [283, 231, 63, 31], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 24982, "bbox": [502, 114, 194, 227], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 2290, "bbox": [229, 221, 78, 50], "iscrowd": 0}, {"id": 15790106, "category_id": 58, "area": 940, "bbox": [305, 220, 61, 37], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 5770, "bbox": [340, 0, 232, 96], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 245, "bbox": [178, 268, 33, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00001155", "file_name": "ADE_val_00001155.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 62280, "bbox": [2, 0, 497, 264], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17992, "bbox": [0, 239, 499, 94], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 17575, "bbox": [0, 1, 489, 61], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 709, "bbox": [0, 143, 24, 107], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 5612, "bbox": [197, 248, 159, 82], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 21094, "bbox": [131, 138, 274, 192], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2963, "bbox": [281, 76, 37, 101], "iscrowd": 0}, {"id": 15129567, "category_id": 9, "area": 7326, "bbox": [31, 68, 58, 147], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3271, "bbox": [61, 192, 63, 70], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3876, "bbox": [384, 66, 60, 72], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 557, "bbox": [76, 148, 31, 50], "iscrowd": 0}, {"id": 1043408, "category_id": 37, "area": 504, "bbox": [281, 140, 35, 36], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 500, "bbox": [177, 168, 29, 27], "iscrowd": 0}, {"id": 2339056, "category_id": 40, "area": 962, "bbox": [199, 164, 48, 31], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 835, "bbox": [207, 153, 55, 32], "iscrowd": 0}, {"id": 15396874, "category_id": 58, "area": 1391, "bbox": [146, 156, 61, 38], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 223, "bbox": [309, 9, 22, 13], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 15493, "bbox": [211, 233, 240, 100], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 788, "bbox": [0, 255, 25, 40], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 194, "bbox": [244, 70, 15, 21], "iscrowd": 0}, {"id": 16531201, "category_id": 135, "area": 273, "bbox": [121, 66, 15, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001156", "file_name": "ADE_val_00001156.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 23331, "bbox": [0, 0, 254, 216], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 25958, "bbox": [39, 63, 286, 154], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 11404, "bbox": [251, 0, 74, 189], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 279, "bbox": [191, 129, 41, 15], "iscrowd": 0}, {"id": 6231282, "category_id": 16, "area": 761, "bbox": [2, 165, 51, 27], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 199, "bbox": [197, 103, 16, 33], "iscrowd": 0}, {"id": 127178, "category_id": 37, "area": 713, "bbox": [2, 129, 26, 49], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 2604, "bbox": [57, 132, 139, 48], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 316, "bbox": [191, 54, 11, 39], "iscrowd": 0}, {"id": 16714499, "category_id": 135, "area": 1135, "bbox": [7, 46, 24, 64], "iscrowd": 0}]}, {"image_id": "ADE_val_00001157", "file_name": "ADE_val_00001157.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 238879, "bbox": [0, 4, 1599, 1133], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 203158, "bbox": [0, 994, 1599, 605], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 263766, "bbox": [121, 1262, 1475, 335], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 234852, "bbox": [2, 3, 1597, 356], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 780141, "bbox": [372, 402, 1152, 1091], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 96147, "bbox": [970, 1, 629, 772], "iscrowd": 0}, {"id": 13170941, "category_id": 9, "area": 116777, "bbox": [0, 0, 350, 843], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 270149, "bbox": [1047, 358, 521, 711], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 117637, "bbox": [63, 756, 319, 463], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 68816, "bbox": [508, 1, 305, 234], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 49097, "bbox": [83, 320, 272, 466], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 8151, "bbox": [1365, 296, 122, 69], "iscrowd": 0}, {"id": 3079953, "category_id": 42, "area": 5096, "bbox": [193, 857, 85, 68], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 43664, "bbox": [546, 629, 364, 147], "iscrowd": 0}, {"id": 16775946, "category_id": 58, "area": 11580, "bbox": [888, 639, 124, 126], "iscrowd": 0}, {"id": 15130880, "category_id": 58, "area": 11308, "bbox": [450, 722, 134, 130], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 5683, "bbox": [1097, 202, 152, 49], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 6836, "bbox": [1277, 279, 82, 88], "iscrowd": 0}]}, {"image_id": "ADE_val_00001158", "file_name": "ADE_val_00001158.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 27847, "bbox": [2, 1, 508, 369], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4352, "bbox": [2, 272, 508, 104], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 30366, "bbox": [2, 2, 364, 95], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 4955, "bbox": [17, 106, 135, 44], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 43990, "bbox": [2, 151, 394, 224], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1037, "bbox": [230, 210, 66, 44], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 154, "bbox": [388, 62, 15, 14], "iscrowd": 0}, {"id": 2099177, "category_id": 23, "area": 588, "bbox": [343, 64, 29, 22], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 4571, "bbox": [324, 87, 79, 225], "iscrowd": 0}, {"id": 5964031, "category_id": 25, "area": 23801, "bbox": [390, 1, 120, 370], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 338, "bbox": [216, 159, 44, 55], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1659, "bbox": [106, 145, 93, 33], "iscrowd": 0}, {"id": 902911, "category_id": 40, "area": 581, "bbox": [14, 150, 51, 23], "iscrowd": 0}, {"id": 1812983, "category_id": 40, "area": 1118, "bbox": [21, 162, 111, 44], "iscrowd": 0}, {"id": 54758, "category_id": 40, "area": 9050, "bbox": [5, 167, 130, 109], "iscrowd": 0}, {"id": 46847, "category_id": 40, "area": 5646, "bbox": [129, 168, 93, 83], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 2551, "bbox": [450, 170, 57, 60], "iscrowd": 0}, {"id": 1965824, "category_id": 42, "area": 2430, "bbox": [444, 287, 51, 63], "iscrowd": 0}, {"id": 2686720, "category_id": 42, "area": 2206, "bbox": [447, 234, 49, 59], "iscrowd": 0}, {"id": 2948864, "category_id": 42, "area": 1824, "bbox": [457, 115, 49, 44], "iscrowd": 0}, {"id": 588567, "category_id": 42, "area": 387, "bbox": [352, 274, 27, 22], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 475, "bbox": [252, 203, 35, 21], "iscrowd": 0}, {"id": 1611263, "category_id": 68, "area": 2450, "bbox": [328, 196, 65, 60], "iscrowd": 0}, {"id": 1153276, "category_id": 68, "area": 2472, "bbox": [334, 96, 66, 46], "iscrowd": 0}, {"id": 2012392, "category_id": 68, "area": 1124, "bbox": [336, 246, 53, 54], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 1261, "bbox": [324, 139, 46, 48], "iscrowd": 0}, {"id": 5701880, "category_id": 82, "area": 1718, "bbox": [352, 143, 44, 54], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 1594, "bbox": [469, 32, 39, 54], "iscrowd": 0}, {"id": 16733952, "category_id": 93, "area": 1313, "bbox": [414, 48, 40, 40], "iscrowd": 0}, {"id": 16743169, "category_id": 93, "area": 788, "bbox": [422, 114, 26, 36], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 165, "bbox": [332, 252, 9, 24], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 400, "bbox": [369, 37, 22, 49], "iscrowd": 0}, {"id": 723169, "category_id": 109, "area": 2822, "bbox": [2, 275, 99, 49], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1782, "bbox": [293, 198, 31, 69], "iscrowd": 0}, {"id": 1376089, "category_id": 113, "area": 592, "bbox": [266, 191, 48, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00001159", "file_name": "ADE_val_00001159.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 16860, "bbox": [0, 21, 256, 178], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3928, "bbox": [0, 199, 256, 57], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4445, "bbox": [0, 0, 256, 21], "iscrowd": 0}, {"id": 6094592, "category_id": 107, "area": 19389, "bbox": [29, 16, 227, 239], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 13997, "bbox": [59, 131, 186, 119], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 947, "bbox": [192, 137, 48, 24], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 613, "bbox": [24, 107, 25, 42], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 582, "bbox": [89, 137, 34, 28], "iscrowd": 0}, {"id": 435711, "category_id": 40, "area": 921, "bbox": [121, 130, 36, 35], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 3002, "bbox": [0, 141, 54, 72], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 397, "bbox": [195, 112, 31, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00001160", "file_name": "ADE_val_00001160.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 82613, "bbox": [0, 0, 683, 446], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25797, "bbox": [0, 397, 683, 115], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 10571, "bbox": [129, 0, 553, 56], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1983, "bbox": [0, 134, 48, 144], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 1868, "bbox": [468, 480, 116, 31], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 91288, "bbox": [21, 149, 503, 363], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6873, "bbox": [102, 86, 82, 129], "iscrowd": 0}, {"id": 14864091, "category_id": 9, "area": 10427, "bbox": [524, 111, 110, 136], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2728, "bbox": [287, 271, 84, 51], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 32127, "bbox": [12, 14, 243, 240], "iscrowd": 0}, {"id": 598015, "category_id": 19, "area": 44809, "bbox": [462, 57, 221, 399], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 5173, "bbox": [381, 137, 59, 94], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2670, "bbox": [279, 173, 60, 103], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 6604, "bbox": [150, 259, 119, 82], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 1160, "bbox": [26, 296, 52, 58], "iscrowd": 0}, {"id": 16252680, "category_id": 58, "area": 6656, "bbox": [38, 248, 166, 103], "iscrowd": 0}, {"id": 16771867, "category_id": 58, "area": 2974, "bbox": [160, 254, 150, 61], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 2196, "bbox": [0, 318, 19, 139], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 8563, "bbox": [262, 1, 311, 57], "iscrowd": 0}]}, {"image_id": "ADE_val_00001161", "file_name": "ADE_val_00001161.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 238673, "bbox": [0, 0, 683, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2697, "bbox": [0, 433, 44, 79], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1578, "bbox": [0, 0, 44, 52], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 25300, "bbox": [400, 323, 283, 188], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12495, "bbox": [0, 141, 42, 322], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 22827, "bbox": [148, 45, 53, 466], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 9289, "bbox": [217, 449, 167, 63], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 4282, "bbox": [141, 13, 61, 499], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 9014, "bbox": [540, 393, 142, 117], "iscrowd": 0}, {"id": 52479, "category_id": 40, "area": 2209, "bbox": [619, 466, 63, 43], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 13397, "bbox": [434, 375, 178, 117], "iscrowd": 0}, {"id": 16771590, "category_id": 58, "area": 1390, "bbox": [617, 377, 65, 51], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 4238, "bbox": [368, 63, 117, 44], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 154, "bbox": [341, 474, 21, 9], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 253, "bbox": [356, 451, 17, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00001162", "file_name": "ADE_val_00001162.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 31648, "bbox": [2, 1, 298, 195], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4503, "bbox": [19, 171, 233, 53], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1000, "bbox": [81, 1, 124, 16], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 7693, "bbox": [56, 135, 168, 89], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3785, "bbox": [145, 34, 40, 102], "iscrowd": 0}, {"id": 16108757, "category_id": 9, "area": 5794, "bbox": [252, 27, 48, 132], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1030, "bbox": [2, 192, 38, 33], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4559, "bbox": [4, 39, 32, 151], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4097, "bbox": [214, 157, 85, 68], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 81, "bbox": [80, 68, 10, 9], "iscrowd": 0}, {"id": 3806975, "category_id": 23, "area": 63, "bbox": [95, 88, 9, 7], "iscrowd": 0}, {"id": 2821375, "category_id": 23, "area": 90, "bbox": [96, 51, 10, 10], "iscrowd": 0}, {"id": 5181938, "category_id": 23, "area": 117, "bbox": [95, 67, 10, 13], "iscrowd": 0}, {"id": 3021823, "category_id": 23, "area": 56, "bbox": [110, 72, 8, 7], "iscrowd": 0}, {"id": 2228473, "category_id": 23, "area": 377, "bbox": [209, 66, 20, 19], "iscrowd": 0}, {"id": 4587762, "category_id": 23, "area": 130, "bbox": [213, 90, 10, 13], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 326, "bbox": [47, 89, 23, 110], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 509, "bbox": [86, 146, 31, 31], "iscrowd": 0}, {"id": 115199, "category_id": 40, "area": 282, "bbox": [111, 147, 24, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001163", "file_name": "ADE_val_00001163.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 75939, "bbox": [1, 0, 682, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 63699, "bbox": [95, 282, 314, 230], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 11534, "bbox": [73, 12, 74, 192], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 29870, "bbox": [214, 26, 324, 282], "iscrowd": 0}, {"id": 16718027, "category_id": 8, "area": 42421, "bbox": [0, 0, 109, 512], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 7989, "bbox": [426, 0, 113, 195], "iscrowd": 0}, {"id": 14800364, "category_id": 9, "area": 3832, "bbox": [70, 1, 89, 212], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 39971, "bbox": [404, 183, 133, 329], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 7336, "bbox": [108, 202, 109, 147], "iscrowd": 0}]}, {"image_id": "ADE_val_00001164", "file_name": "ADE_val_00001164.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 101045, "bbox": [0, 0, 620, 299], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 29585, "bbox": [0, 235, 640, 192], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 22403, "bbox": [78, 1, 558, 93], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 48197, "bbox": [1, 176, 369, 250], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1668, "bbox": [323, 119, 34, 54], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 9267, "bbox": [549, 250, 91, 134], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 8100, "bbox": [554, 89, 63, 162], "iscrowd": 0}, {"id": 3730724, "category_id": 15, "area": 1486, "bbox": [381, 100, 16, 151], "iscrowd": 0}, {"id": 1638179, "category_id": 15, "area": 2373, "bbox": [296, 92, 66, 161], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3764, "bbox": [75, 238, 98, 54], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4576, "bbox": [451, 209, 69, 103], "iscrowd": 0}, {"id": 2056395, "category_id": 20, "area": 7605, "bbox": [526, 304, 113, 122], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 5683, "bbox": [606, 1, 34, 252], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 4411, "bbox": [161, 206, 103, 80], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 3920, "bbox": [379, 98, 42, 157], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2567, "bbox": [129, 128, 44, 110], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 1624, "bbox": [303, 199, 48, 37], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 567, "bbox": [191, 227, 38, 29], "iscrowd": 0}, {"id": 44258, "category_id": 40, "area": 1987, "bbox": [1, 308, 60, 63], "iscrowd": 0}, {"id": 2347768, "category_id": 40, "area": 595, "bbox": [1, 297, 25, 35], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 547, "bbox": [611, 235, 28, 24], "iscrowd": 0}, {"id": 1898781, "category_id": 42, "area": 207, "bbox": [626, 157, 13, 18], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 4573, "bbox": [1, 240, 105, 73], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 2947, "bbox": [203, 259, 93, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00001165", "file_name": "ADE_val_00001165.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 117566, "bbox": [0, 0, 682, 512], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 16396, "bbox": [0, 1, 564, 47], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 19857, "bbox": [35, 281, 450, 229], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 38166, "bbox": [162, 315, 442, 197], "iscrowd": 0}, {"id": 15925480, "category_id": 8, "area": 62943, "bbox": [17, 237, 423, 274], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4269, "bbox": [384, 322, 130, 67], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 37645, "bbox": [368, 24, 152, 298], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 42484, "bbox": [1, 51, 196, 266], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2209, "bbox": [493, 267, 53, 76], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 191, "bbox": [447, 314, 21, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00001166", "file_name": "ADE_val_00001166.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 77495, "bbox": [1, 1, 511, 338], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6622, "bbox": [243, 197, 269, 143], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1068, "bbox": [334, 26, 55, 20], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 3778, "bbox": [257, 227, 117, 48], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 39852, "bbox": [2, 183, 459, 157], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 18163, "bbox": [430, 10, 80, 286], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1670, "bbox": [93, 200, 62, 47], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 6902, "bbox": [330, 48, 55, 137], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1085, "bbox": [287, 73, 35, 31], "iscrowd": 0}, {"id": 5118969, "category_id": 23, "area": 1924, "bbox": [66, 89, 42, 50], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 8672, "bbox": [241, 1, 40, 259], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1447, "bbox": [85, 156, 45, 58], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 781, "bbox": [328, 181, 54, 19], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1429, "bbox": [150, 216, 48, 39], "iscrowd": 0}]}, {"image_id": "ADE_val_00001167", "file_name": "ADE_val_00001167.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 78177, "bbox": [0, 0, 550, 463], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14432, "bbox": [139, 425, 506, 86], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4089, "bbox": [30, 0, 284, 28], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 14999, "bbox": [0, 459, 488, 52], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 17502, "bbox": [333, 310, 219, 172], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 41081, "bbox": [0, 52, 112, 438], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 22539, "bbox": [379, 179, 173, 136], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 87727, "bbox": [152, 18, 236, 453], "iscrowd": 0}, {"id": 16775694, "category_id": 36, "area": 66673, "bbox": [547, 0, 135, 511], "iscrowd": 0}]}, {"image_id": "ADE_val_00001168", "file_name": "ADE_val_00001168.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 105097, "bbox": [0, 0, 768, 512], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 29206, "bbox": [22, 1, 575, 106], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 33878, "bbox": [85, 353, 423, 158], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 50836, "bbox": [0, 265, 592, 247], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 14403, "bbox": [715, 1, 52, 307], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 477, "bbox": [274, 301, 37, 18], "iscrowd": 0}, {"id": 4522475, "category_id": 16, "area": 2925, "bbox": [548, 334, 128, 156], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 11948, "bbox": [685, 0, 35, 510], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2153, "bbox": [610, 290, 60, 59], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 15460, "bbox": [352, 108, 196, 106], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 81125, "bbox": [0, 13, 283, 391], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1453, "bbox": [163, 0, 177, 53], "iscrowd": 0}, {"id": 1703901, "category_id": 37, "area": 1553, "bbox": [572, 252, 45, 88], "iscrowd": 0}, {"id": 388573, "category_id": 37, "area": 587, "bbox": [314, 253, 34, 39], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1788, "bbox": [378, 274, 47, 60], "iscrowd": 0}, {"id": 52735, "category_id": 40, "area": 1742, "bbox": [329, 271, 57, 69], "iscrowd": 0}, {"id": 56063, "category_id": 40, "area": 3428, "bbox": [485, 283, 64, 77], "iscrowd": 0}, {"id": 54015, "category_id": 40, "area": 2711, "bbox": [418, 275, 78, 83], "iscrowd": 0}, {"id": 45041, "category_id": 40, "area": 3760, "bbox": [386, 306, 94, 63], "iscrowd": 0}, {"id": 2083327, "category_id": 40, "area": 2567, "bbox": [304, 292, 66, 56], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 521, "bbox": [616, 333, 26, 23], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 1021, "bbox": [431, 273, 124, 72], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 673, "bbox": [562, 334, 43, 21], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 8316, "bbox": [709, 340, 58, 171], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 569, "bbox": [563, 310, 29, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001169", "file_name": "ADE_val_00001169.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 122535, "bbox": [0, 87, 641, 416], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10172, "bbox": [0, 403, 428, 109], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 57207, "bbox": [1, 0, 640, 98], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 3865, "bbox": [293, 415, 118, 91], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 44226, "bbox": [62, 297, 323, 215], "iscrowd": 0}, {"id": 16711897, "category_id": 8, "area": 39051, "bbox": [350, 329, 291, 183], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 17726, "bbox": [59, 120, 141, 148], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 12204, "bbox": [381, 282, 126, 131], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 14237, "bbox": [408, 116, 102, 155], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1065, "bbox": [428, 224, 42, 71], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2588, "bbox": [237, 239, 79, 63], "iscrowd": 0}, {"id": 838399, "category_id": 40, "area": 538, "bbox": [622, 297, 19, 53], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1896, "bbox": [240, 51, 120, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001170", "file_name": "ADE_val_00001170.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 87871, "bbox": [0, 0, 683, 463], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 94969, "bbox": [1, 245, 594, 266], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1106, "bbox": [247, 296, 85, 29], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 86201, "bbox": [377, 0, 305, 311], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 33169, "bbox": [0, 0, 170, 204], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1245, "bbox": [259, 222, 29, 85], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 6017, "bbox": [135, 252, 106, 85], "iscrowd": 0}, {"id": 16176136, "category_id": 58, "area": 8128, "bbox": [23, 271, 128, 93], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 14553, "bbox": [412, 281, 212, 127], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 157, "bbox": [282, 294, 15, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001171", "file_name": "ADE_val_00001171.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 69768, "bbox": [1, 0, 682, 303], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 59267, "bbox": [210, 302, 458, 209], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 133745, "bbox": [1, 108, 530, 403], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 11300, "bbox": [450, 46, 130, 107], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 22014, "bbox": [158, 0, 117, 210], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 453, "bbox": [173, 188, 43, 20], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 27019, "bbox": [410, 1, 243, 322], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3787, "bbox": [309, 38, 66, 59], "iscrowd": 0}, {"id": 5119999, "category_id": 23, "area": 3899, "bbox": [59, 1, 67, 64], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1124, "bbox": [140, 127, 45, 59], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 6540, "bbox": [640, 227, 42, 284], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 7647, "bbox": [463, 177, 101, 102], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 197, "bbox": [495, 120, 8, 25], "iscrowd": 0}, {"id": 13750316, "category_id": 148, "area": 135, "bbox": [541, 123, 7, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00001172", "file_name": "ADE_val_00001172.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 90607, "bbox": [0, 1, 683, 314], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 84533, "bbox": [0, 216, 683, 296], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 23703, "bbox": [1, 179, 162, 203], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 27120, "bbox": [98, 303, 231, 190], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 2959, "bbox": [657, 276, 26, 235], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 21390, "bbox": [317, 1, 207, 109], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 84146, "bbox": [158, 128, 428, 287], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 14048, "bbox": [568, 19, 115, 372], "iscrowd": 0}]}, {"image_id": "ADE_val_00001173", "file_name": "ADE_val_00001173.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 167637, "bbox": [0, 0, 768, 458], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 32282, "bbox": [405, 360, 363, 151], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 34470, "bbox": [101, 0, 667, 140], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2681, "bbox": [579, 257, 71, 126], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 67038, "bbox": [1, 284, 428, 227], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4739, "bbox": [333, 97, 32, 174], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 17940, "bbox": [380, 58, 72, 274], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 11067, "bbox": [429, 344, 114, 137], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 5626, "bbox": [249, 292, 92, 80], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 10764, "bbox": [101, 157, 150, 88], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 785, "bbox": [321, 194, 22, 81], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 3841, "bbox": [100, 282, 104, 50], "iscrowd": 0}, {"id": 16710912, "category_id": 58, "area": 5798, "bbox": [1, 284, 108, 66], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 9135, "bbox": [724, 159, 44, 231], "iscrowd": 0}, {"id": 8781568, "category_id": 66, "area": 2755, "bbox": [658, 259, 42, 103], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 89, "bbox": [269, 32, 13, 9], "iscrowd": 0}, {"id": 44031, "category_id": 83, "area": 151, "bbox": [702, 10, 19, 11], "iscrowd": 0}, {"id": 52223, "category_id": 83, "area": 65, "bbox": [727, 101, 13, 7], "iscrowd": 0}, {"id": 1424127, "category_id": 83, "area": 42, "bbox": [666, 127, 10, 5], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 1797, "bbox": [586, 376, 48, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00001174", "file_name": "ADE_val_00001174.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 9728, "bbox": [0, 18, 256, 162], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17722, "bbox": [0, 154, 256, 102], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6799, "bbox": [1, 0, 254, 36], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 1575, "bbox": [23, 148, 85, 56], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 3668, "bbox": [3, 117, 125, 84], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 626, "bbox": [188, 69, 41, 32], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1625, "bbox": [177, 53, 51, 67], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1037, "bbox": [201, 125, 51, 64], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1213, "bbox": [13, 62, 33, 37], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 4649, "bbox": [131, 44, 48, 112], "iscrowd": 0}, {"id": 16776994, "category_id": 36, "area": 3057, "bbox": [226, 36, 29, 143], "iscrowd": 0}, {"id": 15003648, "category_id": 36, "area": 6284, "bbox": [63, 28, 63, 121], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 2213, "bbox": [171, 121, 57, 49], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 219, "bbox": [52, 133, 27, 10], "iscrowd": 0}, {"id": 15453968, "category_id": 58, "area": 321, "bbox": [7, 127, 26, 19], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 407, "bbox": [199, 98, 26, 19], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 48, "bbox": [211, 117, 6, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00001175", "file_name": "ADE_val_00001175.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 92543, "bbox": [0, 0, 768, 488], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5741, "bbox": [102, 457, 199, 55], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9142, "bbox": [290, 0, 444, 41], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 38746, "bbox": [4, 123, 344, 137], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 109727, "bbox": [228, 188, 539, 323], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 7457, "bbox": [2, 123, 360, 156], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2532, "bbox": [68, 386, 62, 82], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 36963, "bbox": [0, 16, 375, 129], "iscrowd": 0}, {"id": 401900, "category_id": 19, "area": 29736, "bbox": [393, 37, 119, 276], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 905, "bbox": [0, 391, 25, 72], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2410, "bbox": [500, 220, 62, 75], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2041, "bbox": [582, 244, 67, 45], "iscrowd": 0}, {"id": 1418977, "category_id": 40, "area": 5161, "bbox": [643, 245, 92, 85], "iscrowd": 0}, {"id": 1420543, "category_id": 40, "area": 3706, "bbox": [562, 279, 113, 51], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 7827, "bbox": [0, 406, 112, 105], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 2147, "bbox": [562, 227, 111, 64], "iscrowd": 0}, {"id": 14810880, "category_id": 58, "area": 4422, "bbox": [674, 235, 94, 99], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 11235, "bbox": [0, 285, 101, 141], "iscrowd": 0}]}, {"image_id": "ADE_val_00001176", "file_name": "ADE_val_00001176.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 95033, "bbox": [0, 0, 629, 413], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 23856, "bbox": [1, 392, 681, 120], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 14022, "bbox": [456, 8, 150, 243], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 102490, "bbox": [121, 78, 561, 433], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 19549, "bbox": [1, 269, 146, 176], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 5326, "bbox": [14, 93, 82, 192], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3624, "bbox": [201, 216, 99, 50], "iscrowd": 0}, {"id": 48624, "category_id": 40, "area": 3378, "bbox": [292, 209, 103, 44], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 7892, "bbox": [150, 166, 149, 109], "iscrowd": 0}, {"id": 16766976, "category_id": 58, "area": 4768, "bbox": [280, 167, 136, 74], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 406, "bbox": [81, 259, 30, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00001177", "file_name": "ADE_val_00001177.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 80139, "bbox": [2, 1, 508, 334], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12349, "bbox": [1, 223, 511, 128], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 28114, "bbox": [240, 152, 271, 198], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7624, "bbox": [367, 291, 143, 59], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 8976, "bbox": [253, 45, 55, 197], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 645, "bbox": [338, 189, 58, 31], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3194, "bbox": [9, 201, 89, 147], "iscrowd": 0}, {"id": 18113, "category_id": 20, "area": 585, "bbox": [240, 181, 30, 79], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 4129, "bbox": [117, 22, 60, 77], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 549, "bbox": [360, 155, 22, 43], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 739, "bbox": [397, 189, 33, 32], "iscrowd": 0}, {"id": 1163007, "category_id": 40, "area": 1180, "bbox": [423, 184, 44, 38], "iscrowd": 0}, {"id": 48353, "category_id": 40, "area": 686, "bbox": [450, 201, 48, 35], "iscrowd": 0}, {"id": 1431533, "category_id": 40, "area": 883, "bbox": [469, 190, 41, 42], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 25087, "bbox": [81, 139, 160, 186], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 827, "bbox": [135, 88, 54, 44], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 569, "bbox": [470, 121, 41, 35], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 159, "bbox": [158, 122, 11, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00001178", "file_name": "ADE_val_00001178.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 26102, "bbox": [1, 1, 298, 224], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7835, "bbox": [2, 164, 293, 61], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 6594, "bbox": [2, 15, 297, 83], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 7829, "bbox": [79, 114, 155, 107], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2959, "bbox": [247, 42, 52, 122], "iscrowd": 0}, {"id": 16378066, "category_id": 9, "area": 2875, "bbox": [4, 71, 57, 61], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1838, "bbox": [2, 125, 81, 56], "iscrowd": 0}, {"id": 4461547, "category_id": 16, "area": 980, "bbox": [252, 185, 45, 38], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1891, "bbox": [188, 141, 58, 73], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 897, "bbox": [161, 43, 28, 33], "iscrowd": 0}, {"id": 2425087, "category_id": 23, "area": 573, "bbox": [93, 48, 25, 23], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 2344, "bbox": [7, 155, 63, 65], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 328, "bbox": [36, 92, 27, 45], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 916, "bbox": [206, 161, 31, 31], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 144, "bbox": [207, 66, 13, 13], "iscrowd": 0}, {"id": 16718352, "category_id": 135, "area": 119, "bbox": [73, 67, 11, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001179", "file_name": "ADE_val_00001179.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 92777, "bbox": [2, 2, 637, 302], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 33134, "bbox": [2, 301, 637, 178], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 24596, "bbox": [98, 114, 535, 365], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6358, "bbox": [537, 1, 65, 164], "iscrowd": 0}, {"id": 14536149, "category_id": 9, "area": 1244, "bbox": [551, 12, 29, 48], "iscrowd": 0}, {"id": 16767179, "category_id": 9, "area": 1527, "bbox": [544, 96, 32, 54], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 14556, "bbox": [2, 252, 120, 151], "iscrowd": 0}, {"id": 4653311, "category_id": 16, "area": 3169, "bbox": [361, 196, 103, 54], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 13056, "bbox": [443, 1, 94, 169], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 9059, "bbox": [154, 1, 126, 75], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1532, "bbox": [384, 154, 51, 51], "iscrowd": 0}, {"id": 2097092, "category_id": 37, "area": 3056, "bbox": [9, 199, 73, 71], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3577, "bbox": [233, 200, 102, 66], "iscrowd": 0}]}, {"image_id": "ADE_val_00001180", "file_name": "ADE_val_00001180.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 116516, "bbox": [2, 1, 638, 319], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 79546, "bbox": [2, 222, 638, 258], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 10751, "bbox": [127, 330, 215, 103], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 57998, "bbox": [138, 179, 501, 229], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 564, "bbox": [533, 1, 107, 125], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6959, "bbox": [374, 85, 92, 124], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5438, "bbox": [4, 253, 129, 77], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 12142, "bbox": [534, 2, 105, 123], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 182, "bbox": [421, 69, 17, 17], "iscrowd": 0}, {"id": 2810136, "category_id": 42, "area": 740, "bbox": [65, 243, 48, 21], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 3076, "bbox": [222, 191, 116, 47], "iscrowd": 0}, {"id": 15657984, "category_id": 58, "area": 3111, "bbox": [291, 181, 121, 49], "iscrowd": 0}, {"id": 16182528, "category_id": 58, "area": 1122, "bbox": [189, 209, 70, 31], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1055, "bbox": [44, 279, 62, 28], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 1776, "bbox": [449, 104, 26, 109], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 2101, "bbox": [21, 167, 36, 100], "iscrowd": 0}]}, {"image_id": "ADE_val_00001181", "file_name": "ADE_val_00001181.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 109669, "bbox": [0, 1, 767, 424], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17998, "bbox": [0, 372, 768, 140], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 45950, "bbox": [0, 1, 756, 114], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 40168, "bbox": [0, 393, 725, 118], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 53252, "bbox": [253, 222, 390, 289], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 13071, "bbox": [242, 144, 87, 164], "iscrowd": 0}, {"id": 16773339, "category_id": 9, "area": 32967, "bbox": [2, 98, 155, 235], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 15250, "bbox": [640, 286, 127, 138], "iscrowd": 0}, {"id": 5374207, "category_id": 16, "area": 3014, "bbox": [330, 276, 81, 48], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 4346, "bbox": [474, 152, 101, 54], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 7009, "bbox": [351, 134, 81, 136], "iscrowd": 0}, {"id": 14411711, "category_id": 28, "area": 19409, "bbox": [632, 61, 134, 225], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1426, "bbox": [348, 205, 44, 76], "iscrowd": 0}, {"id": 1966046, "category_id": 37, "area": 4549, "bbox": [684, 167, 83, 129], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2236, "bbox": [400, 261, 68, 53], "iscrowd": 0}, {"id": 1694459, "category_id": 40, "area": 2572, "bbox": [456, 264, 77, 54], "iscrowd": 0}, {"id": 55039, "category_id": 40, "area": 3703, "bbox": [521, 261, 90, 68], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 9855, "bbox": [239, 367, 215, 144], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1608, "bbox": [451, 335, 104, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00001182", "file_name": "ADE_val_00001182.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 100004, "bbox": [1, 32, 510, 476], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 923, "bbox": [0, 504, 511, 179], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 19162, "bbox": [0, 0, 512, 67], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 138512, "bbox": [1, 298, 511, 384], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6285, "bbox": [2, 401, 105, 111], "iscrowd": 0}, {"id": 6422783, "category_id": 16, "area": 5286, "bbox": [416, 409, 93, 94], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 4480, "bbox": [22, 160, 75, 62], "iscrowd": 0}, {"id": 2106111, "category_id": 23, "area": 6300, "bbox": [215, 163, 72, 92], "iscrowd": 0}, {"id": 4399359, "category_id": 23, "area": 4329, "bbox": [410, 164, 75, 62], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 571, "bbox": [243, 3, 67, 15], "iscrowd": 0}, {"id": 65522, "category_id": 37, "area": 1511, "bbox": [39, 332, 34, 79], "iscrowd": 0}, {"id": 1966047, "category_id": 37, "area": 1429, "bbox": [480, 338, 30, 79], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 5533, "bbox": [130, 363, 104, 89], "iscrowd": 0}, {"id": 1025535, "category_id": 40, "area": 4819, "bbox": [214, 362, 106, 85], "iscrowd": 0}, {"id": 188386, "category_id": 40, "area": 5673, "bbox": [282, 368, 121, 84], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 3356, "bbox": [341, 496, 114, 50], "iscrowd": 0}, {"id": 8392443, "category_id": 82, "area": 2544, "bbox": [358, 467, 79, 46], "iscrowd": 0}, {"id": 5702651, "category_id": 82, "area": 3637, "bbox": [83, 491, 118, 52], "iscrowd": 0}, {"id": 6160626, "category_id": 82, "area": 2768, "bbox": [96, 464, 90, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00001183", "file_name": "ADE_val_00001183.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 60688, "bbox": [180, 0, 502, 320], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 55145, "bbox": [0, 329, 682, 183], "iscrowd": 0}, {"id": 16711833, "category_id": 118, "area": 28809, "bbox": [0, 163, 143, 251], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 121529, "bbox": [200, 117, 482, 394], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1326, "bbox": [171, 1, 18, 182], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1152, "bbox": [380, 198, 88, 34], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 39511, "bbox": [0, 1, 192, 343], "iscrowd": 0}, {"id": 466156, "category_id": 19, "area": 34236, "bbox": [177, 1, 142, 330], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3383, "bbox": [410, 67, 53, 135], "iscrowd": 0}]}, {"image_id": "ADE_val_00001184", "file_name": "ADE_val_00001184.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 146051, "bbox": [0, 0, 682, 465], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2881, "bbox": [1, 415, 681, 96], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1629, "bbox": [23, 0, 649, 10], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 134304, "bbox": [19, 154, 662, 357], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 10352, "bbox": [25, 307, 130, 136], "iscrowd": 0}, {"id": 5832938, "category_id": 16, "area": 8886, "bbox": [531, 301, 140, 126], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 4570, "bbox": [1, 62, 30, 305], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 5114, "bbox": [390, 69, 63, 84], "iscrowd": 0}, {"id": 3080433, "category_id": 23, "area": 5451, "bbox": [233, 69, 66, 84], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 4815, "bbox": [63, 153, 74, 163], "iscrowd": 0}, {"id": 1439475, "category_id": 37, "area": 4332, "bbox": [566, 153, 70, 158], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 4919, "bbox": [223, 259, 95, 65], "iscrowd": 0}, {"id": 56573, "category_id": 40, "area": 4502, "bbox": [369, 265, 89, 62], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 3689, "bbox": [345, 255, 148, 62], "iscrowd": 0}, {"id": 16764672, "category_id": 58, "area": 4370, "bbox": [187, 245, 161, 74], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 511, "bbox": [28, 306, 51, 19], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 310, "bbox": [34, 301, 33, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00001185", "file_name": "ADE_val_00001185.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 85615, "bbox": [0, 0, 511, 568], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 30297, "bbox": [0, 408, 511, 274], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 59385, "bbox": [132, 0, 379, 259], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 5168, "bbox": [469, 392, 41, 161], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1672, "bbox": [451, 326, 34, 90], "iscrowd": 0}, {"id": 3736712, "category_id": 13, "area": 4587, "bbox": [341, 304, 99, 113], "iscrowd": 0}, {"id": 5642907, "category_id": 13, "area": 4704, "bbox": [243, 335, 90, 120], "iscrowd": 0}, {"id": 5901475, "category_id": 13, "area": 981, "bbox": [137, 332, 45, 66], "iscrowd": 0}, {"id": 2752663, "category_id": 13, "area": 4480, "bbox": [65, 311, 61, 121], "iscrowd": 0}, {"id": 3670182, "category_id": 13, "area": 2927, "bbox": [19, 302, 57, 83], "iscrowd": 0}, {"id": 5243553, "category_id": 13, "area": 7679, "bbox": [388, 261, 71, 248], "iscrowd": 0}, {"id": 5906058, "category_id": 13, "area": 360, "bbox": [472, 329, 20, 42], "iscrowd": 0}, {"id": 4653202, "category_id": 13, "area": 54780, "bbox": [46, 262, 252, 418], "iscrowd": 0}, {"id": 4128890, "category_id": 13, "area": 4770, "bbox": [1, 276, 89, 166], "iscrowd": 0}, {"id": 5117619, "category_id": 13, "area": 4283, "bbox": [1, 434, 58, 249], "iscrowd": 0}, {"id": 3808888, "category_id": 13, "area": 7655, "bbox": [284, 306, 105, 137], "iscrowd": 0}, {"id": 3801233, "category_id": 13, "area": 749, "bbox": [262, 298, 27, 38], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 10983, "bbox": [0, 401, 199, 164], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2995, "bbox": [334, 210, 41, 80], "iscrowd": 0}, {"id": 2958049, "category_id": 23, "area": 6503, "bbox": [87, 125, 56, 136], "iscrowd": 0}, {"id": 5185023, "category_id": 23, "area": 1685, "bbox": [445, 236, 27, 66], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 30908, "bbox": [184, 398, 245, 281], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 4133, "bbox": [3, 139, 62, 90], "iscrowd": 0}, {"id": 15542528, "category_id": 135, "area": 1486, "bbox": [237, 223, 45, 48], "iscrowd": 0}, {"id": 15351572, "category_id": 135, "area": 310, "bbox": [493, 270, 12, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00001186", "file_name": "ADE_val_00001186.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 97366, "bbox": [0, 0, 429, 508], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 31746, "bbox": [206, 88, 160, 289], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 65245, "bbox": [2, 177, 407, 330], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3071, "bbox": [201, 83, 167, 300], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 13704, "bbox": [2, 197, 185, 116], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 892, "bbox": [176, 136, 20, 57], "iscrowd": 0}, {"id": 16395008, "category_id": 135, "area": 2829, "bbox": [392, 230, 36, 111], "iscrowd": 0}]}, {"image_id": "ADE_val_00001187", "file_name": "ADE_val_00001187.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 10851, "bbox": [0, 0, 268, 115], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 12943, "bbox": [0, 0, 320, 226], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 21369, "bbox": [2, 94, 317, 146], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 2561, "bbox": [240, 103, 80, 73], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 22820, "bbox": [0, 51, 320, 130], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 3258, "bbox": [124, 123, 169, 100], "iscrowd": 0}, {"id": 1638383, "category_id": 128, "area": 2051, "bbox": [11, 126, 155, 99], "iscrowd": 0}]}, {"image_id": "ADE_val_00001188", "file_name": "ADE_val_00001188.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 15127, "bbox": [0, 0, 399, 89], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 24297, "bbox": [0, 70, 399, 152], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1593, "bbox": [286, 0, 113, 16], "iscrowd": 0}, {"id": 65311, "category_id": 52, "area": 29200, "bbox": [4, 56, 383, 143], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1617, "bbox": [109, 26, 60, 29], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 514, "bbox": [27, 47, 20, 49], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 682, "bbox": [247, 19, 16, 53], "iscrowd": 0}, {"id": 2744832, "category_id": 15, "area": 500, "bbox": [311, 19, 12, 50], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 1170, "bbox": [105, 65, 252, 17], "iscrowd": 0}, {"id": 65460, "category_id": 70, "area": 1536, "bbox": [71, 81, 248, 26], "iscrowd": 0}, {"id": 65463, "category_id": 70, "area": 1944, "bbox": [34, 96, 245, 38], "iscrowd": 0}, {"id": 1245125, "category_id": 70, "area": 2215, "bbox": [1, 114, 233, 50], "iscrowd": 0}, {"id": 59584, "category_id": 70, "area": 1336, "bbox": [144, 52, 245, 10], "iscrowd": 0}, {"id": 23807, "category_id": 79, "area": 581, "bbox": [339, 23, 26, 32], "iscrowd": 0}, {"id": 20735, "category_id": 79, "area": 910, "bbox": [361, 22, 25, 50], "iscrowd": 0}, {"id": 24063, "category_id": 79, "area": 694, "bbox": [384, 21, 15, 53], "iscrowd": 0}]}, {"image_id": "ADE_val_00001189", "file_name": "ADE_val_00001189.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 1555, "bbox": [596, 193, 53, 54], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 27827, "bbox": [190, 292, 245, 195], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 204173, "bbox": [0, 0, 649, 486], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 4737, "bbox": [145, 287, 117, 200], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 33632, "bbox": [307, 212, 342, 185], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 41812, "bbox": [302, 259, 346, 228], "iscrowd": 0}]}, {"image_id": "ADE_val_00001190", "file_name": "ADE_val_00001190.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 52499, "bbox": [0, 0, 759, 175], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 139344, "bbox": [1, 0, 758, 366], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3364, "bbox": [592, 346, 165, 33], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 98946, "bbox": [0, 365, 758, 145], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 85454, "bbox": [196, 89, 563, 300], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 125, "bbox": [303, 354, 12, 17], "iscrowd": 0}, {"id": 1131968, "category_id": 20, "area": 96, "bbox": [326, 356, 17, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00001191", "file_name": "ADE_val_00001191.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18284, "bbox": [0, 0, 299, 222], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3425, "bbox": [0, 131, 103, 94], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 154, "bbox": [35, 94, 16, 18], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 19032, "bbox": [40, 93, 254, 132], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 8577, "bbox": [53, 40, 83, 184], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2236, "bbox": [234, 128, 65, 94], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1821, "bbox": [54, 1, 32, 70], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 2604, "bbox": [2, 31, 41, 96], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 827, "bbox": [3, 108, 38, 60], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 190, "bbox": [139, 76, 41, 40], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 632, "bbox": [4, 128, 33, 51], "iscrowd": 0}]}, {"image_id": "ADE_val_00001192", "file_name": "ADE_val_00001192.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 5384, "bbox": [29, 48, 186, 48], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5633, "bbox": [0, 124, 255, 132], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2302, "bbox": [28, 0, 227, 60], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 228, "bbox": [228, 79, 27, 14], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2714, "bbox": [185, 90, 38, 135], "iscrowd": 0}, {"id": 2949281, "category_id": 13, "area": 746, "bbox": [234, 90, 18, 54], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4851, "bbox": [136, 132, 119, 124], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 2194, "bbox": [2, 1, 26, 93], "iscrowd": 0}, {"id": 3277055, "category_id": 43, "area": 1341, "bbox": [106, 0, 24, 92], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 9214, "bbox": [2, 95, 76, 161], "iscrowd": 0}, {"id": 15400704, "category_id": 63, "area": 7499, "bbox": [74, 93, 76, 120], "iscrowd": 0}, {"id": 15919104, "category_id": 63, "area": 2123, "bbox": [151, 97, 33, 84], "iscrowd": 0}, {"id": 16776960, "category_id": 63, "area": 1302, "bbox": [183, 90, 72, 58], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 609, "bbox": [39, 141, 20, 33], "iscrowd": 0}, {"id": 1282798, "category_id": 68, "area": 369, "bbox": [62, 139, 14, 30], "iscrowd": 0}, {"id": 1351933, "category_id": 68, "area": 645, "bbox": [39, 175, 22, 33], "iscrowd": 0}, {"id": 48383, "category_id": 68, "area": 286, "bbox": [62, 208, 16, 30], "iscrowd": 0}, {"id": 34786, "category_id": 68, "area": 239, "bbox": [54, 217, 15, 27], "iscrowd": 0}, {"id": 1745407, "category_id": 68, "area": 454, "bbox": [41, 217, 21, 34], "iscrowd": 0}, {"id": 36852, "category_id": 68, "area": 183, "bbox": [120, 140, 12, 19], "iscrowd": 0}, {"id": 165347, "category_id": 68, "area": 258, "bbox": [107, 138, 14, 20], "iscrowd": 0}, {"id": 1019391, "category_id": 68, "area": 239, "bbox": [105, 162, 15, 18], "iscrowd": 0}, {"id": 430846, "category_id": 68, "area": 637, "bbox": [144, 235, 48, 20], "iscrowd": 0}, {"id": 37615, "category_id": 68, "area": 582, "bbox": [221, 184, 23, 59], "iscrowd": 0}, {"id": 35327, "category_id": 68, "area": 163, "bbox": [154, 111, 11, 15], "iscrowd": 0}, {"id": 47871, "category_id": 68, "area": 109, "bbox": [159, 128, 10, 13], "iscrowd": 0}, {"id": 493286, "category_id": 68, "area": 104, "bbox": [160, 144, 8, 14], "iscrowd": 0}, {"id": 38655, "category_id": 68, "area": 117, "bbox": [159, 160, 9, 14], "iscrowd": 0}, {"id": 890879, "category_id": 68, "area": 193, "bbox": [83, 160, 13, 18], "iscrowd": 0}, {"id": 49407, "category_id": 68, "area": 273, "bbox": [221, 143, 15, 20], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 123, "bbox": [73, 42, 28, 10], "iscrowd": 0}, {"id": 434431, "category_id": 83, "area": 22, "bbox": [227, 10, 7, 4], "iscrowd": 0}, {"id": 47089, "category_id": 83, "area": 12, "bbox": [250, 3, 4, 3], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 2837, "bbox": [151, 0, 43, 79], "iscrowd": 0}, {"id": 16384078, "category_id": 150, "area": 1801, "bbox": [193, 6, 27, 75], "iscrowd": 0}]}, {"image_id": "ADE_val_00001193", "file_name": "ADE_val_00001193.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 51620, "bbox": [2, 1, 497, 208], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 68923, "bbox": [0, 12, 499, 259], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 28993, "bbox": [2, 229, 497, 79], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2089, "bbox": [0, 261, 200, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00001194", "file_name": "ADE_val_00001194.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 60717, "bbox": [0, 0, 558, 417], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1066, "bbox": [0, 0, 80, 23], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 18859, "bbox": [91, 112, 84, 270], "iscrowd": 0}, {"id": 13425385, "category_id": 9, "area": 37041, "bbox": [192, 110, 159, 255], "iscrowd": 0}, {"id": 14733304, "category_id": 9, "area": 16954, "bbox": [375, 106, 85, 212], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 74891, "bbox": [19, 11, 517, 405], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3193, "bbox": [2, 347, 65, 69], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 16767, "bbox": [278, 312, 224, 105], "iscrowd": 0}]}, {"image_id": "ADE_val_00001195", "file_name": "ADE_val_00001195.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 154808, "bbox": [0, 0, 689, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 48610, "bbox": [103, 315, 586, 195], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 17015, "bbox": [28, 1, 635, 58], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 81007, "bbox": [9, 189, 495, 291], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6580, "bbox": [297, 131, 57, 119], "iscrowd": 0}, {"id": 16638443, "category_id": 9, "area": 7059, "bbox": [229, 128, 60, 124], "iscrowd": 0}, {"id": 13683158, "category_id": 9, "area": 7122, "bbox": [156, 128, 67, 124], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 10965, "bbox": [551, 103, 59, 243], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4025, "bbox": [30, 453, 78, 58], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3906, "bbox": [45, 179, 71, 108], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 1570, "bbox": [141, 225, 43, 42], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 5858, "bbox": [221, 1, 241, 61], "iscrowd": 0}]}, {"image_id": "ADE_val_00001196", "file_name": "ADE_val_00001196.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3168, "bbox": [0, 212, 528, 182], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 23420, "bbox": [0, 0, 528, 98], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1307, "bbox": [0, 0, 36, 212], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 1519, "bbox": [2, 262, 526, 131], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 43539, "bbox": [29, 173, 499, 220], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 131897, "bbox": [0, 1, 528, 393], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2034, "bbox": [245, 43, 37, 59], "iscrowd": 0}]}, {"image_id": "ADE_val_00001197", "file_name": "ADE_val_00001197.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 63832, "bbox": [0, 31, 639, 193], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 75359, "bbox": [2, 294, 637, 184], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 58616, "bbox": [0, 0, 639, 120], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 8670, "bbox": [139, 159, 108, 196], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 16, "bbox": [281, 38, 4, 5], "iscrowd": 0}, {"id": 52223, "category_id": 83, "area": 13, "bbox": [264, 64, 5, 3], "iscrowd": 0}, {"id": 43757, "category_id": 83, "area": 24, "bbox": [384, 59, 7, 4], "iscrowd": 0}, {"id": 1818623, "category_id": 83, "area": 17, "bbox": [295, 86, 5, 5], "iscrowd": 0}, {"id": 107745, "category_id": 83, "area": 15, "bbox": [208, 91, 5, 4], "iscrowd": 0}, {"id": 576246, "category_id": 83, "area": 16, "bbox": [137, 71, 5, 5], "iscrowd": 0}, {"id": 49654, "category_id": 83, "area": 16, "bbox": [120, 46, 6, 5], "iscrowd": 0}, {"id": 1680638, "category_id": 83, "area": 16, "bbox": [28, 102, 5, 5], "iscrowd": 0}, {"id": 50943, "category_id": 83, "area": 18, "bbox": [9, 81, 5, 5], "iscrowd": 0}, {"id": 239087, "category_id": 83, "area": 25, "bbox": [91, 3, 6, 5], "iscrowd": 0}, {"id": 47871, "category_id": 83, "area": 19, "bbox": [432, 34, 6, 4], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 453, "bbox": [238, 292, 23, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001198", "file_name": "ADE_val_00001198.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 134793, "bbox": [0, 1, 682, 466], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 44317, "bbox": [0, 370, 682, 141], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 13639, "bbox": [277, 22, 160, 131], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 27055, "bbox": [1, 269, 404, 242], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 15991, "bbox": [349, 383, 179, 128], "iscrowd": 0}, {"id": 16873, "category_id": 20, "area": 9556, "bbox": [419, 245, 92, 152], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1401, "bbox": [145, 173, 32, 51], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 57394, "bbox": [490, 85, 192, 340], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 3221, "bbox": [146, 267, 56, 90], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 12868, "bbox": [126, 202, 168, 107], "iscrowd": 0}]}, {"image_id": "ADE_val_00001199", "file_name": "ADE_val_00001199.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 19400, "bbox": [0, 0, 255, 90], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3269, "bbox": [0, 72, 175, 183], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 478, "bbox": [0, 110, 28, 30], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 20745, "bbox": [0, 137, 256, 119], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 21007, "bbox": [0, 65, 256, 112], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 51, "bbox": [181, 61, 5, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00001200", "file_name": "ADE_val_00001200.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 23739, "bbox": [75, 113, 535, 181], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 72704, "bbox": [1, 0, 681, 150], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 53723, "bbox": [0, 85, 682, 212], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 34375, "bbox": [23, 25, 659, 226], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 138501, "bbox": [0, 303, 682, 208], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 20956, "bbox": [171, 249, 511, 63], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 117, "bbox": [173, 264, 9, 26], "iscrowd": 0}, {"id": 3941299, "category_id": 13, "area": 31, "bbox": [185, 265, 4, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00001201", "file_name": "ADE_val_00001201.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 2690, "bbox": [280, 233, 120, 74], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 37577, "bbox": [2, 78, 380, 165], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 55007, "bbox": [0, 0, 400, 215], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1944, "bbox": [2, 184, 398, 62], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6143, "bbox": [13, 241, 272, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00001202", "file_name": "ADE_val_00001202.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 54217, "bbox": [2, 1, 254, 219], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 10175, "bbox": [0, 209, 256, 47], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 189, "bbox": [156, 199, 14, 17], "iscrowd": 0}, {"id": 11851067, "category_id": 116, "area": 98, "bbox": [168, 202, 11, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001203", "file_name": "ADE_val_00001203.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 39011, "bbox": [2, 0, 254, 198], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 11122, "bbox": [0, 202, 256, 54], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 4689, "bbox": [0, 188, 256, 34], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 238, "bbox": [65, 159, 23, 16], "iscrowd": 0}, {"id": 11735, "category_id": 20, "area": 292, "bbox": [84, 158, 24, 19], "iscrowd": 0}, {"id": 1522392, "category_id": 20, "area": 308, "bbox": [101, 159, 27, 17], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 131, "bbox": [32, 64, 25, 7], "iscrowd": 0}, {"id": 2017023, "category_id": 83, "area": 121, "bbox": [220, 51, 27, 6], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 4710, "bbox": [2, 1, 142, 50], "iscrowd": 0}]}, {"image_id": "ADE_val_00001204", "file_name": "ADE_val_00001204.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 35885, "bbox": [2, 15, 254, 197], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 10309, "bbox": [2, 1, 254, 69], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 11469, "bbox": [2, 208, 254, 48], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 353, "bbox": [134, 145, 13, 66], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 4150, "bbox": [27, 118, 209, 32], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 575, "bbox": [112, 53, 35, 159], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 365, "bbox": [179, 87, 20, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00001205", "file_name": "ADE_val_00001205.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 52094, "bbox": [0, 0, 256, 231], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 350, "bbox": [235, 170, 19, 53], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 4336, "bbox": [0, 231, 256, 25], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 3612, "bbox": [0, 220, 256, 28], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 946, "bbox": [67, 141, 64, 21], "iscrowd": 0}, {"id": 5307392, "category_id": 87, "area": 641, "bbox": [147, 145, 54, 20], "iscrowd": 0}, {"id": 3407616, "category_id": 87, "area": 829, "bbox": [2, 134, 46, 24], "iscrowd": 0}, {"id": 5111326, "category_id": 87, "area": 661, "bbox": [214, 149, 41, 21], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1277, "bbox": [161, 7, 40, 225], "iscrowd": 0}]}, {"image_id": "ADE_val_00001206", "file_name": "ADE_val_00001206.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 7515, "bbox": [31, 197, 225, 59], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 29374, "bbox": [0, 3, 244, 224], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 22947, "bbox": [2, 1, 254, 197], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1966, "bbox": [55, 212, 196, 43], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 866, "bbox": [0, 220, 256, 11], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 106, "bbox": [50, 232, 7, 17], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 400, "bbox": [70, 249, 66, 7], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 809, "bbox": [0, 230, 38, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00001207", "file_name": "ADE_val_00001207.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 43444, "bbox": [2, 0, 254, 178], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 21485, "bbox": [0, 167, 256, 89], "iscrowd": 0}]}, {"image_id": "ADE_val_00001208", "file_name": "ADE_val_00001208.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 56823, "bbox": [0, 0, 256, 256], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 1230, "bbox": [148, 1, 108, 24], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 190, "bbox": [149, 228, 10, 27], "iscrowd": 0}, {"id": 3220372, "category_id": 13, "area": 129, "bbox": [10, 235, 17, 19], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 936, "bbox": [0, 236, 77, 20], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 1216, "bbox": [126, 202, 76, 18], "iscrowd": 0}, {"id": 5046044, "category_id": 87, "area": 1202, "bbox": [0, 174, 55, 24], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 278, "bbox": [151, 60, 21, 26], "iscrowd": 0}, {"id": 16733955, "category_id": 88, "area": 222, "bbox": [101, 112, 16, 24], "iscrowd": 0}, {"id": 16734467, "category_id": 88, "area": 267, "bbox": [118, 145, 16, 23], "iscrowd": 0}, {"id": 16733965, "category_id": 88, "area": 303, "bbox": [99, 171, 16, 28], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 771, "bbox": [127, 180, 68, 14], "iscrowd": 0}, {"id": 387459, "category_id": 124, "area": 1652, "bbox": [198, 186, 57, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00001209", "file_name": "ADE_val_00001209.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 27070, "bbox": [0, 19, 256, 209], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 13271, "bbox": [2, 1, 254, 60], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 5593, "bbox": [0, 231, 256, 25], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2309, "bbox": [0, 221, 256, 16], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 362, "bbox": [85, 179, 17, 51], "iscrowd": 0}, {"id": 4718751, "category_id": 13, "area": 280, "bbox": [115, 185, 18, 39], "iscrowd": 0}, {"id": 5179030, "category_id": 13, "area": 273, "bbox": [137, 186, 10, 43], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 268, "bbox": [149, 127, 8, 34], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 2119, "bbox": [15, 152, 120, 19], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 4017, "bbox": [38, 56, 206, 23], "iscrowd": 0}, {"id": 1505383, "category_id": 124, "area": 3526, "bbox": [10, 123, 133, 27], "iscrowd": 0}, {"id": 59516, "category_id": 124, "area": 2501, "bbox": [145, 124, 102, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00001210", "file_name": "ADE_val_00001210.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 30604, "bbox": [0, 56, 256, 160], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 19030, "bbox": [2, 1, 254, 94], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 6352, "bbox": [2, 225, 254, 31], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2375, "bbox": [2, 208, 254, 24], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 192, "bbox": [78, 169, 13, 16], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 200, "bbox": [237, 182, 18, 29], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 3997, "bbox": [102, 195, 136, 45], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 1411, "bbox": [85, 124, 66, 25], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 283, "bbox": [98, 80, 19, 20], "iscrowd": 0}, {"id": 1960315, "category_id": 149, "area": 203, "bbox": [196, 101, 15, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001211", "file_name": "ADE_val_00001211.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 20131, "bbox": [2, 80, 253, 110], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 21652, "bbox": [1, 1, 255, 131], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 9630, "bbox": [2, 180, 254, 76], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 1263, "bbox": [99, 64, 157, 27], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6498, "bbox": [3, 165, 253, 91], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 2768, "bbox": [66, 95, 168, 22], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 2541, "bbox": [146, 214, 72, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00001212", "file_name": "ADE_val_00001212.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 889, "bbox": [206, 202, 50, 26], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 53862, "bbox": [2, 0, 254, 232], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 2139, "bbox": [119, 225, 137, 31], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2419, "bbox": [2, 205, 204, 41], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 131, "bbox": [207, 180, 10, 24], "iscrowd": 0}, {"id": 3611553, "category_id": 13, "area": 119, "bbox": [224, 180, 9, 21], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 4445, "bbox": [2, 216, 235, 40], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 347, "bbox": [31, 197, 14, 26], "iscrowd": 0}, {"id": 16719004, "category_id": 139, "area": 135, "bbox": [137, 197, 9, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001213", "file_name": "ADE_val_00001213.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 302652, "bbox": [0, 0, 768, 512], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 33257, "bbox": [169, 0, 515, 97], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 598, "bbox": [624, 65, 42, 30], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 278, "bbox": [474, 308, 13, 39], "iscrowd": 0}, {"id": 3547804, "category_id": 13, "area": 209, "bbox": [502, 406, 22, 62], "iscrowd": 0}, {"id": 2949269, "category_id": 13, "area": 1063, "bbox": [507, 411, 34, 75], "iscrowd": 0}, {"id": 3866761, "category_id": 13, "area": 228, "bbox": [581, 269, 17, 32], "iscrowd": 0}, {"id": 4263554, "category_id": 13, "area": 174, "bbox": [607, 268, 13, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00001214", "file_name": "ADE_val_00001214.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 42613, "bbox": [0, 31, 682, 222], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 56236, "bbox": [0, 0, 682, 137], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 147923, "bbox": [0, 249, 682, 262], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 11971, "bbox": [42, 151, 97, 138], "iscrowd": 0}, {"id": 16713983, "category_id": 81, "area": 19861, "bbox": [129, 138, 137, 162], "iscrowd": 0}, {"id": 16714725, "category_id": 81, "area": 65642, "bbox": [261, 113, 400, 210], "iscrowd": 0}, {"id": 14813694, "category_id": 81, "area": 1332, "bbox": [662, 189, 20, 77], "iscrowd": 0}]}, {"image_id": "ADE_val_00001215", "file_name": "ADE_val_00001215.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 15213, "bbox": [0, 0, 511, 205], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5314, "bbox": [200, 154, 98, 186], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3091, "bbox": [72, 0, 370, 23], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3289, "bbox": [56, 3, 46, 107], "iscrowd": 0}, {"id": 16183498, "category_id": 9, "area": 1997, "bbox": [109, 10, 27, 86], "iscrowd": 0}, {"id": 13617875, "category_id": 9, "area": 9372, "bbox": [179, 3, 204, 71], "iscrowd": 0}, {"id": 14873069, "category_id": 9, "area": 3814, "bbox": [440, 3, 47, 110], "iscrowd": 0}, {"id": 13496798, "category_id": 9, "area": 2084, "bbox": [396, 7, 43, 90], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2437, "bbox": [2, 83, 62, 84], "iscrowd": 0}, {"id": 4657813, "category_id": 13, "area": 5418, "bbox": [270, 39, 143, 191], "iscrowd": 0}, {"id": 3281578, "category_id": 13, "area": 7034, "bbox": [167, 73, 92, 256], "iscrowd": 0}, {"id": 4128947, "category_id": 13, "area": 12895, "bbox": [98, 97, 112, 241], "iscrowd": 0}, {"id": 4784290, "category_id": 13, "area": 17418, "bbox": [248, 83, 181, 257], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1504, "bbox": [82, 7, 25, 109], "iscrowd": 0}, {"id": 9215, "category_id": 19, "area": 1247, "bbox": [432, 3, 24, 112], "iscrowd": 0}, {"id": 994019, "category_id": 19, "area": 683, "bbox": [408, 10, 14, 76], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 1077, "bbox": [171, 53, 49, 29], "iscrowd": 0}, {"id": 15658752, "category_id": 32, "area": 555, "bbox": [280, 55, 27, 43], "iscrowd": 0}, {"id": 15070208, "category_id": 32, "area": 728, "bbox": [338, 56, 51, 19], "iscrowd": 0}, {"id": 15138060, "category_id": 32, "area": 1179, "bbox": [206, 82, 43, 77], "iscrowd": 0}, {"id": 15660800, "category_id": 32, "area": 615, "bbox": [93, 97, 38, 26], "iscrowd": 0}, {"id": 15859479, "category_id": 32, "area": 3508, "bbox": [109, 117, 107, 184], "iscrowd": 0}, {"id": 13106975, "category_id": 32, "area": 3325, "bbox": [21, 116, 86, 51], "iscrowd": 0}, {"id": 16121600, "category_id": 32, "area": 24552, "bbox": [2, 166, 148, 172], "iscrowd": 0}, {"id": 13827840, "category_id": 32, "area": 1031, "bbox": [296, 99, 57, 28], "iscrowd": 0}, {"id": 13041440, "category_id": 32, "area": 489, "bbox": [413, 99, 35, 19], "iscrowd": 0}, {"id": 16645893, "category_id": 32, "area": 1740, "bbox": [299, 116, 51, 47], "iscrowd": 0}, {"id": 13958931, "category_id": 32, "area": 2918, "bbox": [422, 118, 84, 40], "iscrowd": 0}, {"id": 14090014, "category_id": 32, "area": 8536, "bbox": [294, 152, 160, 122], "iscrowd": 0}, {"id": 15400704, "category_id": 32, "area": 6352, "bbox": [447, 158, 63, 113], "iscrowd": 0}, {"id": 15793920, "category_id": 32, "area": 14558, "bbox": [284, 270, 227, 70], "iscrowd": 0}, {"id": 14477600, "category_id": 32, "area": 3291, "bbox": [221, 55, 56, 103], "iscrowd": 0}, {"id": 16314395, "category_id": 32, "area": 617, "bbox": [135, 82, 39, 20], "iscrowd": 0}, {"id": 15924992, "category_id": 32, "area": 694, "bbox": [206, 96, 31, 37], "iscrowd": 0}]}, {"image_id": "ADE_val_00001216", "file_name": "ADE_val_00001216.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 57945, "bbox": [0, 0, 500, 144], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 21869, "bbox": [0, 328, 500, 46], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 15284, "bbox": [0, 296, 499, 37], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 11911, "bbox": [2, 129, 81, 170], "iscrowd": 0}, {"id": 46847, "category_id": 33, "area": 4855, "bbox": [467, 143, 33, 156], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1292, "bbox": [457, 166, 11, 138], "iscrowd": 0}, {"id": 4129016, "category_id": 43, "area": 1286, "bbox": [269, 173, 11, 135], "iscrowd": 0}, {"id": 4064737, "category_id": 43, "area": 1279, "bbox": [80, 171, 12, 135], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 1248, "bbox": [180, 274, 190, 35], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1584, "bbox": [29, 56, 27, 232], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1971, "bbox": [99, 245, 36, 61], "iscrowd": 0}]}, {"image_id": "ADE_val_00001217", "file_name": "ADE_val_00001217.png", "segments_info": [{"id": 3289680, "category_id": 4, "area": 7352, "bbox": [243, 202, 181, 80], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 75203, "bbox": [0, 1, 424, 280], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1505, "bbox": [341, 61, 66, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00001218", "file_name": "ADE_val_00001218.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 5515, "bbox": [146, 0, 204, 60], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 20700, "bbox": [0, 0, 350, 145], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 25353, "bbox": [0, 121, 350, 102], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4983, "bbox": [0, 104, 349, 110], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 2127, "bbox": [115, 189, 211, 34], "iscrowd": 0}, {"id": 16711935, "category_id": 80, "area": 17829, "bbox": [41, 39, 238, 111], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 710, "bbox": [136, 128, 40, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00001219", "file_name": "ADE_val_00001219.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 42664, "bbox": [0, 159, 766, 117], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 79939, "bbox": [1, 239, 767, 272], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 120951, "bbox": [1, 0, 766, 196], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2516, "bbox": [314, 263, 449, 29], "iscrowd": 0}, {"id": 6823679, "category_id": 16, "area": 393, "bbox": [142, 256, 92, 11], "iscrowd": 0}, {"id": 5506024, "category_id": 16, "area": 3107, "bbox": [1, 303, 142, 43], "iscrowd": 0}, {"id": 6489581, "category_id": 16, "area": 22805, "bbox": [50, 325, 516, 187], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3160, "bbox": [712, 331, 54, 120], "iscrowd": 0}, {"id": 342479, "category_id": 20, "area": 330, "bbox": [147, 265, 30, 39], "iscrowd": 0}, {"id": 2119601, "category_id": 20, "area": 7508, "bbox": [406, 412, 149, 100], "iscrowd": 0}, {"id": 605924, "category_id": 20, "area": 1080, "bbox": [192, 381, 101, 129], "iscrowd": 0}, {"id": 877486, "category_id": 20, "area": 3081, "bbox": [84, 352, 53, 156], "iscrowd": 0}, {"id": 15848, "category_id": 20, "area": 2834, "bbox": [46, 338, 87, 150], "iscrowd": 0}, {"id": 1653449, "category_id": 20, "area": 12676, "bbox": [192, 381, 239, 131], "iscrowd": 0}, {"id": 1793992, "category_id": 20, "area": 679, "bbox": [490, 294, 51, 72], "iscrowd": 0}, {"id": 21972, "category_id": 20, "area": 489, "bbox": [567, 299, 46, 98], "iscrowd": 0}, {"id": 12264, "category_id": 20, "area": 727, "bbox": [400, 290, 54, 86], "iscrowd": 0}, {"id": 286397, "category_id": 20, "area": 166, "bbox": [216, 333, 38, 10], "iscrowd": 0}, {"id": 15587, "category_id": 20, "area": 1628, "bbox": [1, 337, 50, 119], "iscrowd": 0}, {"id": 1590967, "category_id": 20, "area": 110, "bbox": [336, 283, 28, 6], "iscrowd": 0}, {"id": 14524, "category_id": 20, "area": 9551, "bbox": [315, 239, 453, 44], "iscrowd": 0}, {"id": 89777, "category_id": 20, "area": 304, "bbox": [122, 314, 30, 13], "iscrowd": 0}, {"id": 23264, "category_id": 20, "area": 123, "bbox": [81, 311, 21, 9], "iscrowd": 0}, {"id": 1260220, "category_id": 20, "area": 116, "bbox": [271, 278, 26, 6], "iscrowd": 0}, {"id": 18917, "category_id": 20, "area": 100, "bbox": [298, 279, 20, 6], "iscrowd": 0}, {"id": 1059297, "category_id": 20, "area": 273, "bbox": [316, 265, 19, 22], "iscrowd": 0}, {"id": 25024, "category_id": 20, "area": 278, "bbox": [337, 267, 22, 17], "iscrowd": 0}, {"id": 1395921, "category_id": 20, "area": 321, "bbox": [377, 269, 22, 18], "iscrowd": 0}, {"id": 609968, "category_id": 20, "area": 314, "bbox": [400, 270, 23, 19], "iscrowd": 0}, {"id": 668882, "category_id": 20, "area": 358, "bbox": [422, 271, 25, 18], "iscrowd": 0}, {"id": 2043109, "category_id": 20, "area": 407, "bbox": [475, 273, 26, 23], "iscrowd": 0}, {"id": 17377, "category_id": 20, "area": 464, "bbox": [513, 275, 31, 26], "iscrowd": 0}, {"id": 14002, "category_id": 20, "area": 688, "bbox": [620, 282, 37, 27], "iscrowd": 0}, {"id": 1846732, "category_id": 20, "area": 728, "bbox": [703, 287, 37, 31], "iscrowd": 0}, {"id": 672451, "category_id": 20, "area": 4003, "bbox": [614, 317, 80, 123], "iscrowd": 0}, {"id": 10670, "category_id": 20, "area": 3404, "bbox": [535, 314, 74, 111], "iscrowd": 0}, {"id": 13781, "category_id": 20, "area": 2312, "bbox": [446, 303, 68, 68], "iscrowd": 0}, {"id": 23990, "category_id": 20, "area": 1584, "bbox": [309, 293, 44, 67], "iscrowd": 0}, {"id": 1783515, "category_id": 20, "area": 1765, "bbox": [350, 297, 60, 66], "iscrowd": 0}, {"id": 14772, "category_id": 20, "area": 902, "bbox": [269, 287, 42, 53], "iscrowd": 0}, {"id": 16837, "category_id": 20, "area": 1090, "bbox": [232, 285, 41, 59], "iscrowd": 0}, {"id": 20683, "category_id": 20, "area": 1262, "bbox": [652, 306, 75, 119], "iscrowd": 0}, {"id": 1986014, "category_id": 20, "area": 996, "bbox": [129, 355, 67, 153], "iscrowd": 0}, {"id": 12768, "category_id": 20, "area": 1478, "bbox": [442, 364, 76, 29], "iscrowd": 0}, {"id": 1198767, "category_id": 20, "area": 1391, "bbox": [248, 336, 62, 108], "iscrowd": 0}, {"id": 25527, "category_id": 20, "area": 5208, "bbox": [128, 356, 303, 155], "iscrowd": 0}, {"id": 483025, "category_id": 20, "area": 430, "bbox": [163, 320, 45, 15], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 9510, "bbox": [256, 138, 67, 185], "iscrowd": 0}, {"id": 794111, "category_id": 43, "area": 16879, "bbox": [47, 113, 88, 212], "iscrowd": 0}, {"id": 3941367, "category_id": 43, "area": 1194, "bbox": [463, 193, 23, 54], "iscrowd": 0}, {"id": 2818303, "category_id": 43, "area": 784, "bbox": [403, 195, 17, 48], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 775, "bbox": [534, 230, 40, 22], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2117, "bbox": [644, 35, 92, 47], "iscrowd": 0}, {"id": 1484287, "category_id": 83, "area": 1065, "bbox": [215, 103, 107, 24], "iscrowd": 0}, {"id": 246271, "category_id": 83, "area": 1272, "bbox": [2, 29, 87, 26], "iscrowd": 0}, {"id": 1819135, "category_id": 83, "area": 424, "bbox": [164, 151, 92, 11], "iscrowd": 0}, {"id": 49889, "category_id": 83, "area": 1712, "bbox": [371, 129, 278, 40], "iscrowd": 0}, {"id": 46079, "category_id": 83, "area": 1324, "bbox": [322, 162, 214, 23], "iscrowd": 0}, {"id": 630504, "category_id": 83, "area": 196, "bbox": [321, 179, 83, 6], "iscrowd": 0}, {"id": 38630, "category_id": 83, "area": 380, "bbox": [134, 169, 121, 9], "iscrowd": 0}, {"id": 43263, "category_id": 83, "area": 224, "bbox": [744, 96, 24, 15], "iscrowd": 0}, {"id": 760575, "category_id": 83, "area": 125, "bbox": [23, 141, 24, 7], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 129, "bbox": [539, 220, 15, 10], "iscrowd": 0}, {"id": 15794411, "category_id": 125, "area": 88, "bbox": [557, 222, 12, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00001220", "file_name": "ADE_val_00001220.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 17294, "bbox": [0, 0, 374, 81], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 10327, "bbox": [2, 13, 372, 125], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 23674, "bbox": [0, 123, 374, 110], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 13456, "bbox": [2, 19, 372, 86], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1118, "bbox": [267, 132, 100, 21], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 3956, "bbox": [89, 103, 285, 24], "iscrowd": 0}, {"id": 16769136, "category_id": 115, "area": 16297, "bbox": [13, 106, 223, 111], "iscrowd": 0}]}, {"image_id": "ADE_val_00001221", "file_name": "ADE_val_00001221.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 99356, "bbox": [0, 55, 657, 275], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 97208, "bbox": [1, 0, 766, 253], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 78058, "bbox": [0, 214, 766, 291], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 31490, "bbox": [257, 331, 510, 180], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 23107, "bbox": [0, 314, 767, 197], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 42333, "bbox": [0, 307, 767, 204], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 3971, "bbox": [0, 291, 531, 85], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1103, "bbox": [400, 201, 116, 13], "iscrowd": 0}, {"id": 15919063, "category_id": 9, "area": 1311, "bbox": [400, 220, 115, 13], "iscrowd": 0}, {"id": 15585264, "category_id": 9, "area": 291, "bbox": [572, 193, 43, 9], "iscrowd": 0}, {"id": 14076159, "category_id": 9, "area": 299, "bbox": [571, 206, 43, 8], "iscrowd": 0}, {"id": 13826021, "category_id": 9, "area": 325, "bbox": [571, 219, 44, 8], "iscrowd": 0}, {"id": 14613451, "category_id": 9, "area": 387, "bbox": [571, 233, 43, 9], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1352, "bbox": [636, 409, 131, 102], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 243, "bbox": [502, 442, 12, 32], "iscrowd": 0}, {"id": 9765119, "category_id": 44, "area": 124, "bbox": [749, 372, 8, 43], "iscrowd": 0}, {"id": 10813695, "category_id": 44, "area": 244, "bbox": [396, 483, 16, 21], "iscrowd": 0}, {"id": 8388856, "category_id": 44, "area": 74, "bbox": [678, 372, 10, 14], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 624, "bbox": [188, 414, 60, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00001222", "file_name": "ADE_val_00001222.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 24964, "bbox": [0, 0, 256, 214], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 3175, "bbox": [0, 0, 123, 34], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3663, "bbox": [96, 0, 50, 103], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 22822, "bbox": [0, 120, 256, 136], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 41, "bbox": [11, 101, 5, 11], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 651, "bbox": [122, 129, 36, 25], "iscrowd": 0}, {"id": 64423, "category_id": 77, "area": 947, "bbox": [0, 157, 28, 44], "iscrowd": 0}, {"id": 60348, "category_id": 77, "area": 400, "bbox": [6, 147, 34, 21], "iscrowd": 0}, {"id": 65463, "category_id": 77, "area": 1679, "bbox": [1, 231, 110, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001223", "file_name": "ADE_val_00001223.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 59459, "bbox": [0, 0, 499, 378], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7066, "bbox": [0, 326, 496, 52], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 49912, "bbox": [2, 164, 337, 214], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 4893, "bbox": [0, 155, 68, 75], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 787, "bbox": [345, 79, 34, 25], "iscrowd": 0}, {"id": 1568768, "category_id": 42, "area": 661, "bbox": [381, 78, 34, 24], "iscrowd": 0}, {"id": 3014400, "category_id": 42, "area": 566, "bbox": [441, 76, 26, 25], "iscrowd": 0}, {"id": 458523, "category_id": 42, "area": 2277, "bbox": [107, 263, 69, 59], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 16273, "bbox": [66, 0, 82, 250], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 129, "bbox": [186, 333, 15, 11], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 238, "bbox": [340, 273, 14, 25], "iscrowd": 0}, {"id": 524536, "category_id": 109, "area": 229, "bbox": [448, 284, 11, 29], "iscrowd": 0}, {"id": 2687231, "category_id": 109, "area": 517, "bbox": [247, 145, 22, 27], "iscrowd": 0}, {"id": 1835263, "category_id": 109, "area": 317, "bbox": [267, 145, 15, 27], "iscrowd": 0}, {"id": 2556143, "category_id": 109, "area": 221, "bbox": [405, 121, 12, 31], "iscrowd": 0}, {"id": 917756, "category_id": 109, "area": 582, "bbox": [161, 322, 24, 38], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 294, "bbox": [194, 147, 31, 17], "iscrowd": 0}, {"id": 523877, "category_id": 113, "area": 651, "bbox": [439, 228, 25, 32], "iscrowd": 0}, {"id": 58461, "category_id": 113, "area": 634, "bbox": [413, 229, 28, 30], "iscrowd": 0}, {"id": 65349, "category_id": 113, "area": 505, "bbox": [342, 228, 29, 24], "iscrowd": 0}, {"id": 60530, "category_id": 113, "area": 614, "bbox": [368, 226, 28, 27], "iscrowd": 0}, {"id": 65394, "category_id": 113, "area": 846, "bbox": [384, 163, 40, 42], "iscrowd": 0}, {"id": 64116, "category_id": 113, "area": 973, "bbox": [9, 334, 36, 34], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 598, "bbox": [89, 204, 30, 45], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 1213, "bbox": [68, 68, 31, 70], "iscrowd": 0}, {"id": 589652, "category_id": 149, "area": 1211, "bbox": [118, 102, 27, 73], "iscrowd": 0}]}, {"image_id": "ADE_val_00001224", "file_name": "ADE_val_00001224.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 180053, "bbox": [0, 0, 764, 405], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 81560, "bbox": [17, 0, 747, 305], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5056, "bbox": [450, 283, 170, 50], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 71075, "bbox": [0, 325, 764, 186], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 13364, "bbox": [0, 381, 477, 43], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1637, "bbox": [467, 316, 249, 60], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1044, "bbox": [445, 330, 22, 70], "iscrowd": 0}, {"id": 2359442, "category_id": 13, "area": 995, "bbox": [424, 326, 19, 74], "iscrowd": 0}, {"id": 5511338, "category_id": 13, "area": 225, "bbox": [456, 330, 16, 49], "iscrowd": 0}, {"id": 4001196, "category_id": 13, "area": 182, "bbox": [413, 335, 8, 54], "iscrowd": 0}, {"id": 3801259, "category_id": 13, "area": 673, "bbox": [233, 326, 38, 66], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 13034, "bbox": [460, 350, 246, 83], "iscrowd": 0}, {"id": 11627538, "category_id": 21, "area": 319, "bbox": [732, 353, 32, 17], "iscrowd": 0}, {"id": 12550924, "category_id": 21, "area": 5483, "bbox": [624, 350, 140, 80], "iscrowd": 0}, {"id": 12999936, "category_id": 21, "area": 7227, "bbox": [243, 322, 134, 75], "iscrowd": 0}, {"id": 11292165, "category_id": 21, "area": 94, "bbox": [756, 366, 8, 21], "iscrowd": 0}, {"id": 12737280, "category_id": 21, "area": 82, "bbox": [499, 361, 22, 10], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 879, "bbox": [395, 323, 16, 61], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 45, "bbox": [80, 173, 10, 6], "iscrowd": 0}, {"id": 636158, "category_id": 83, "area": 43, "bbox": [105, 159, 11, 5], "iscrowd": 0}, {"id": 767479, "category_id": 83, "area": 30, "bbox": [179, 186, 9, 5], "iscrowd": 0}, {"id": 376567, "category_id": 83, "area": 38, "bbox": [209, 174, 10, 5], "iscrowd": 0}, {"id": 49405, "category_id": 83, "area": 26, "bbox": [265, 197, 9, 4], "iscrowd": 0}, {"id": 167935, "category_id": 83, "area": 21, "bbox": [301, 187, 8, 3], "iscrowd": 0}, {"id": 41953, "category_id": 83, "area": 27, "bbox": [380, 197, 8, 5], "iscrowd": 0}, {"id": 1362425, "category_id": 83, "area": 13, "bbox": [516, 217, 7, 3], "iscrowd": 0}, {"id": 1677311, "category_id": 83, "area": 11, "bbox": [473, 224, 6, 2], "iscrowd": 0}, {"id": 38143, "category_id": 83, "area": 13, "bbox": [342, 208, 7, 2], "iscrowd": 0}, {"id": 173823, "category_id": 83, "area": 14, "bbox": [451, 208, 8, 2], "iscrowd": 0}, {"id": 45311, "category_id": 83, "area": 8, "bbox": [479, 239, 5, 2], "iscrowd": 0}, {"id": 52201, "category_id": 83, "area": 11, "bbox": [528, 232, 6, 2], "iscrowd": 0}, {"id": 1553651, "category_id": 83, "area": 11, "bbox": [572, 225, 7, 2], "iscrowd": 0}, {"id": 176895, "category_id": 83, "area": 10, "bbox": [410, 216, 7, 2], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 2299, "bbox": [493, 331, 129, 22], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 95, "bbox": [511, 270, 10, 63], "iscrowd": 0}, {"id": 16723222, "category_id": 88, "area": 23, "bbox": [719, 296, 7, 6], "iscrowd": 0}, {"id": 16331022, "category_id": 88, "area": 26, "bbox": [707, 295, 8, 7], "iscrowd": 0}, {"id": 15748631, "category_id": 88, "area": 275, "bbox": [709, 249, 32, 103], "iscrowd": 0}, {"id": 16733967, "category_id": 88, "area": 271, "bbox": [708, 254, 12, 96], "iscrowd": 0}, {"id": 15680270, "category_id": 88, "area": 22, "bbox": [519, 303, 6, 6], "iscrowd": 0}, {"id": 16727808, "category_id": 88, "area": 9, "bbox": [512, 303, 4, 4], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 1688, "bbox": [585, 169, 80, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00001225", "file_name": "ADE_val_00001225.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 20742, "bbox": [308, 0, 374, 213], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3615, "bbox": [581, 447, 101, 62], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 123764, "bbox": [113, 6, 558, 505], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 106618, "bbox": [0, 0, 614, 487], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 31590, "bbox": [0, 99, 139, 412], "iscrowd": 0}]}, {"image_id": "ADE_val_00001226", "file_name": "ADE_val_00001226.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 109942, "bbox": [2, 1, 498, 391], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 38256, "bbox": [0, 271, 398, 121], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 39212, "bbox": [3, 1, 350, 176], "iscrowd": 0}]}, {"image_id": "ADE_val_00001227", "file_name": "ADE_val_00001227.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6028, "bbox": [521, 463, 178, 48], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 14005, "bbox": [54, 1, 568, 73], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 27898, "bbox": [0, 0, 569, 265], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 57366, "bbox": [0, 299, 530, 212], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 95778, "bbox": [0, 227, 699, 252], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 88442, "bbox": [35, 0, 664, 251], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 16889, "bbox": [354, 320, 173, 126], "iscrowd": 0}]}, {"image_id": "ADE_val_00001228", "file_name": "ADE_val_00001228.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 25109, "bbox": [0, 0, 479, 209], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 8223, "bbox": [247, 0, 232, 86], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2737, "bbox": [361, 128, 73, 86], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 18444, "bbox": [0, 199, 479, 129], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 9736, "bbox": [361, 118, 118, 155], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1279, "bbox": [298, 195, 39, 60], "iscrowd": 0}, {"id": 3080360, "category_id": 13, "area": 969, "bbox": [290, 175, 32, 73], "iscrowd": 0}, {"id": 3014791, "category_id": 13, "area": 1539, "bbox": [196, 208, 37, 59], "iscrowd": 0}, {"id": 5571472, "category_id": 13, "area": 650, "bbox": [42, 163, 22, 49], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 5436, "bbox": [120, 239, 129, 65], "iscrowd": 0}, {"id": 3349474, "category_id": 109, "area": 1615, "bbox": [294, 245, 72, 50], "iscrowd": 0}, {"id": 590066, "category_id": 109, "area": 596, "bbox": [268, 252, 44, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00001229", "file_name": "ADE_val_00001229.png", "segments_info": [{"id": 16713184, "category_id": 11, "area": 27930, "bbox": [2, 2, 182, 240], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 38779, "bbox": [2, 287, 678, 223], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 76259, "bbox": [178, 2, 502, 312], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 18375, "bbox": [2, 156, 159, 145], "iscrowd": 0}, {"id": 15070998, "category_id": 31, "area": 39866, "bbox": [345, 41, 315, 244], "iscrowd": 0}]}, {"image_id": "ADE_val_00001230", "file_name": "ADE_val_00001230.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 5148, "bbox": [0, 56, 336, 61], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 22837, "bbox": [2, 104, 316, 168], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 24059, "bbox": [0, 0, 399, 78], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1846, "bbox": [182, 84, 34, 93], "iscrowd": 0}, {"id": 2949254, "category_id": 13, "area": 1020, "bbox": [228, 92, 20, 84], "iscrowd": 0}, {"id": 3934111, "category_id": 13, "area": 1080, "bbox": [120, 102, 38, 64], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 601, "bbox": [99, 141, 17, 47], "iscrowd": 0}, {"id": 1456307, "category_id": 20, "area": 1371, "bbox": [365, 203, 34, 69], "iscrowd": 0}, {"id": 17359, "category_id": 20, "area": 955, "bbox": [117, 131, 30, 62], "iscrowd": 0}]}, {"image_id": "ADE_val_00001231", "file_name": "ADE_val_00001231.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 36116, "bbox": [26, 51, 188, 298], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 34385, "bbox": [0, 0, 215, 272], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 765, "bbox": [0, 279, 26, 32], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 736, "bbox": [0, 270, 215, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001232", "file_name": "ADE_val_00001232.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 42945, "bbox": [15, 60, 616, 190], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 72238, "bbox": [0, 0, 682, 191], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 44928, "bbox": [0, 73, 682, 188], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 186832, "bbox": [0, 209, 682, 302], "iscrowd": 0}]}, {"image_id": "ADE_val_00001233", "file_name": "ADE_val_00001233.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 227, "bbox": [94, 175, 28, 20], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 8418, "bbox": [0, 118, 384, 83], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 51814, "bbox": [0, 0, 383, 154], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 22563, "bbox": [0, 151, 384, 104], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 3255, "bbox": [0, 156, 293, 58], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 3488, "bbox": [0, 125, 383, 39], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 164, "bbox": [100, 171, 24, 19], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 6803, "bbox": [198, 152, 186, 103], "iscrowd": 0}]}, {"image_id": "ADE_val_00001234", "file_name": "ADE_val_00001234.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 27429, "bbox": [447, 154, 185, 186], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 37224, "bbox": [12, 150, 414, 241], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 127811, "bbox": [0, 0, 683, 304], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 10801, "bbox": [0, 107, 76, 283], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 126081, "bbox": [1, 218, 682, 293], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 19117, "bbox": [78, 275, 605, 135], "iscrowd": 0}]}, {"image_id": "ADE_val_00001235", "file_name": "ADE_val_00001235.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 10367, "bbox": [0, 85, 255, 170], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 18496, "bbox": [29, 0, 224, 189], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2818, "bbox": [99, 155, 44, 73], "iscrowd": 0}]}, {"image_id": "ADE_val_00001236", "file_name": "ADE_val_00001236.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 58397, "bbox": [20, 86, 427, 215], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 66403, "bbox": [0, 1, 507, 260], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 28786, "bbox": [0, 1, 507, 336], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 15453, "bbox": [0, 290, 507, 49], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 717, "bbox": [377, 273, 41, 32], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 552, "bbox": [0, 294, 43, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00001237", "file_name": "ADE_val_00001237.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 276361, "bbox": [0, 0, 682, 512], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 48539, "bbox": [11, 290, 671, 221], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 177, "bbox": [329, 385, 12, 22], "iscrowd": 0}, {"id": 3742356, "category_id": 13, "area": 245, "bbox": [432, 365, 11, 35], "iscrowd": 0}, {"id": 5967507, "category_id": 13, "area": 311, "bbox": [454, 365, 21, 35], "iscrowd": 0}, {"id": 4915334, "category_id": 13, "area": 539, "bbox": [526, 332, 24, 53], "iscrowd": 0}]}, {"image_id": "ADE_val_00001238", "file_name": "ADE_val_00001238.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 17279, "bbox": [0, 0, 319, 75], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 13983, "bbox": [0, 9, 319, 96], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 32682, "bbox": [0, 94, 319, 145], "iscrowd": 0}]}, {"image_id": "ADE_val_00001239", "file_name": "ADE_val_00001239.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 7558, "bbox": [51, 0, 403, 44], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 85757, "bbox": [0, 0, 456, 345], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 52270, "bbox": [0, 216, 455, 216], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 49610, "bbox": [30, 102, 386, 199], "iscrowd": 0}]}, {"image_id": "ADE_val_00001240", "file_name": "ADE_val_00001240.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 13337, "bbox": [129, 37, 250, 135], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1727, "bbox": [152, 109, 64, 66], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 10560, "bbox": [2, 0, 398, 45], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 2784, "bbox": [215, 122, 94, 78], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 8357, "bbox": [328, 27, 70, 210], "iscrowd": 0}, {"id": 3610017, "category_id": 13, "area": 8658, "bbox": [112, 61, 104, 236], "iscrowd": 0}, {"id": 3870331, "category_id": 13, "area": 33628, "bbox": [18, 2, 237, 295], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 3029, "bbox": [165, 48, 53, 71], "iscrowd": 0}, {"id": 2956027, "category_id": 25, "area": 7201, "bbox": [0, 20, 43, 277], "iscrowd": 0}, {"id": 4260095, "category_id": 25, "area": 582, "bbox": [93, 87, 24, 53], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 15453, "bbox": [175, 142, 224, 155], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 192, "bbox": [123, 12, 33, 7], "iscrowd": 0}, {"id": 51940, "category_id": 83, "area": 115, "bbox": [131, 21, 24, 5], "iscrowd": 0}, {"id": 243967, "category_id": 83, "area": 138, "bbox": [314, 14, 35, 7], "iscrowd": 0}, {"id": 240633, "category_id": 83, "area": 110, "bbox": [291, 23, 28, 6], "iscrowd": 0}, {"id": 50420, "category_id": 83, "area": 184, "bbox": [346, 5, 43, 5], "iscrowd": 0}, {"id": 38643, "category_id": 83, "area": 199, "bbox": [117, 1, 40, 5], "iscrowd": 0}, {"id": 38381, "category_id": 83, "area": 115, "bbox": [344, 25, 30, 4], "iscrowd": 0}, {"id": 44287, "category_id": 83, "area": 62, "bbox": [253, 14, 16, 5], "iscrowd": 0}, {"id": 1749227, "category_id": 83, "area": 51, "bbox": [253, 23, 13, 4], "iscrowd": 0}, {"id": 300779, "category_id": 83, "area": 46, "bbox": [386, 17, 9, 6], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 4483, "bbox": [338, 182, 61, 115], "iscrowd": 0}]}, {"image_id": "ADE_val_00001241", "file_name": "ADE_val_00001241.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 52234, "bbox": [0, 1, 639, 240], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 40330, "bbox": [0, 140, 639, 339], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12250, "bbox": [423, 2, 104, 121], "iscrowd": 0}, {"id": 15856878, "category_id": 9, "area": 3876, "bbox": [605, 3, 34, 118], "iscrowd": 0}, {"id": 16175091, "category_id": 9, "area": 19963, "bbox": [133, 3, 170, 131], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 8611, "bbox": [315, 21, 103, 89], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2100, "bbox": [533, 93, 58, 63], "iscrowd": 0}, {"id": 5701774, "category_id": 13, "area": 35091, "bbox": [26, 85, 148, 394], "iscrowd": 0}, {"id": 4595079, "category_id": 13, "area": 15049, "bbox": [252, 146, 126, 192], "iscrowd": 0}, {"id": 4063365, "category_id": 13, "area": 40100, "bbox": [272, 130, 252, 348], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 581, "bbox": [244, 159, 16, 47], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 3446, "bbox": [250, 319, 65, 159], "iscrowd": 0}, {"id": 16773888, "category_id": 111, "area": 4028, "bbox": [391, 390, 98, 90], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1679, "bbox": [5, 222, 48, 66], "iscrowd": 0}, {"id": 15073456, "category_id": 139, "area": 1057, "bbox": [197, 256, 26, 69], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 372, "bbox": [566, 17, 19, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001242", "file_name": "ADE_val_00001242.png", "segments_info": [{"id": 522756, "category_id": 10, "area": 89525, "bbox": [0, 0, 440, 397], "iscrowd": 0}]}, {"image_id": "ADE_val_00001243", "file_name": "ADE_val_00001243.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 110181, "bbox": [0, 0, 618, 470], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 51294, "bbox": [0, 349, 619, 162], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 17566, "bbox": [66, 0, 415, 72], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 7871, "bbox": [99, 29, 200, 95], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 5342, "bbox": [335, 300, 157, 65], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 33320, "bbox": [236, 284, 292, 219], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 30646, "bbox": [104, 71, 184, 198], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 9208, "bbox": [17, 275, 129, 174], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 8833, "bbox": [16, 108, 70, 136], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 1710, "bbox": [307, 124, 118, 29], "iscrowd": 0}, {"id": 4920316, "category_id": 25, "area": 2344, "bbox": [421, 159, 195, 24], "iscrowd": 0}, {"id": 3342591, "category_id": 25, "area": 1161, "bbox": [370, 163, 52, 33], "iscrowd": 0}, {"id": 3547877, "category_id": 25, "area": 1778, "bbox": [494, 82, 62, 37], "iscrowd": 0}, {"id": 4790776, "category_id": 25, "area": 3986, "bbox": [532, 212, 85, 59], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 5524, "bbox": [2, 269, 234, 110], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1079, "bbox": [176, 213, 37, 62], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1676, "bbox": [319, 248, 52, 47], "iscrowd": 0}, {"id": 1755618, "category_id": 40, "area": 515, "bbox": [278, 227, 63, 19], "iscrowd": 0}, {"id": 1943295, "category_id": 40, "area": 1049, "bbox": [239, 243, 64, 42], "iscrowd": 0}, {"id": 382719, "category_id": 40, "area": 610, "bbox": [305, 237, 46, 15], "iscrowd": 0}, {"id": 1289966, "category_id": 40, "area": 2082, "bbox": [259, 252, 69, 44], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 775, "bbox": [441, 139, 38, 30], "iscrowd": 0}, {"id": 137956, "category_id": 109, "area": 735, "bbox": [477, 128, 33, 38], "iscrowd": 0}, {"id": 1114367, "category_id": 109, "area": 1175, "bbox": [512, 124, 45, 39], "iscrowd": 0}, {"id": 3670271, "category_id": 109, "area": 2222, "bbox": [557, 110, 59, 53], "iscrowd": 0}, {"id": 3674367, "category_id": 109, "area": 1125, "bbox": [311, 93, 39, 44], "iscrowd": 0}, {"id": 858339, "category_id": 109, "area": 510, "bbox": [505, 49, 30, 39], "iscrowd": 0}, {"id": 925182, "category_id": 109, "area": 2099, "bbox": [293, 291, 88, 36], "iscrowd": 0}, {"id": 3414245, "category_id": 109, "area": 604, "bbox": [350, 110, 59, 22], "iscrowd": 0}, {"id": 2097407, "category_id": 109, "area": 408, "bbox": [372, 166, 18, 29], "iscrowd": 0}, {"id": 200447, "category_id": 109, "area": 1326, "bbox": [248, 280, 55, 37], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1954, "bbox": [164, 327, 53, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00001244", "file_name": "ADE_val_00001244.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 130291, "bbox": [2, 0, 688, 364], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 53340, "bbox": [15, 318, 674, 181], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 18130, "bbox": [161, 0, 496, 61], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 61637, "bbox": [36, 173, 418, 326], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 29565, "bbox": [363, 73, 196, 172], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 5160, "bbox": [401, 241, 76, 93], "iscrowd": 0}, {"id": 16717560, "category_id": 11, "area": 15641, "bbox": [0, 237, 81, 260], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2893, "bbox": [477, 235, 74, 115], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1714, "bbox": [394, 41, 105, 93], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 592, "bbox": [350, 293, 44, 18], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 8905, "bbox": [646, 190, 44, 288], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 2283, "bbox": [60, 257, 56, 70], "iscrowd": 0}, {"id": 16446978, "category_id": 58, "area": 5957, "bbox": [80, 240, 130, 80], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 563, "bbox": [365, 274, 33, 26], "iscrowd": 0}, {"id": 2228479, "category_id": 109, "area": 939, "bbox": [499, 256, 41, 34], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 609, "bbox": [558, 201, 18, 51], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 234, "bbox": [453, 227, 16, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00001245", "file_name": "ADE_val_00001245.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 104447, "bbox": [0, 0, 685, 455], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3415, "bbox": [51, 388, 634, 68], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9002, "bbox": [259, 0, 378, 52], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 64218, "bbox": [141, 235, 524, 221], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 28630, "bbox": [518, 35, 166, 249], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 15831, "bbox": [434, 269, 251, 133], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 638, "bbox": [386, 290, 60, 23], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 10090, "bbox": [508, 20, 176, 100], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 414, "bbox": [512, 258, 19, 23], "iscrowd": 0}, {"id": 2494200, "category_id": 23, "area": 5849, "bbox": [332, 113, 76, 82], "iscrowd": 0}, {"id": 1644280, "category_id": 23, "area": 7936, "bbox": [210, 37, 98, 95], "iscrowd": 0}, {"id": 2031871, "category_id": 23, "area": 9412, "bbox": [210, 135, 99, 103], "iscrowd": 0}, {"id": 4849919, "category_id": 23, "area": 15545, "bbox": [38, 53, 154, 115], "iscrowd": 0}, {"id": 2097407, "category_id": 23, "area": 594, "bbox": [490, 252, 23, 27], "iscrowd": 0}, {"id": 3876069, "category_id": 23, "area": 194, "bbox": [415, 281, 16, 17], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1281, "bbox": [371, 195, 55, 108], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2428, "bbox": [251, 263, 53, 63], "iscrowd": 0}, {"id": 2142463, "category_id": 40, "area": 825, "bbox": [297, 258, 65, 52], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1009, "bbox": [561, 256, 39, 34], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 3597, "bbox": [147, 243, 120, 96], "iscrowd": 0}, {"id": 16765440, "category_id": 58, "area": 1141, "bbox": [267, 234, 97, 31], "iscrowd": 0}, {"id": 15726592, "category_id": 58, "area": 4264, "bbox": [192, 249, 95, 79], "iscrowd": 0}, {"id": 15073024, "category_id": 58, "area": 2022, "bbox": [298, 244, 87, 57], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1405, "bbox": [449, 160, 44, 83], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1634, "bbox": [81, 381, 54, 41], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 831, "bbox": [465, 0, 49, 25], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 3447, "bbox": [69, 393, 86, 62], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 1832, "bbox": [301, 273, 49, 48], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 613, "bbox": [462, 242, 20, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00001246", "file_name": "ADE_val_00001246.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 29695, "bbox": [0, 1, 235, 189], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3339, "bbox": [0, 257, 235, 92], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4532, "bbox": [0, 1, 189, 36], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 3822, "bbox": [0, 80, 38, 110], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 6012, "bbox": [0, 148, 164, 110], "iscrowd": 0}, {"id": 15466719, "category_id": 8, "area": 27376, "bbox": [5, 154, 229, 195], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 445, "bbox": [137, 194, 34, 19], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 946, "bbox": [2, 48, 38, 35], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 388, "bbox": [156, 170, 20, 29], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 1131, "bbox": [104, 166, 45, 37], "iscrowd": 0}, {"id": 15593216, "category_id": 58, "area": 1713, "bbox": [172, 173, 63, 54], "iscrowd": 0}, {"id": 15196928, "category_id": 58, "area": 290, "bbox": [86, 160, 25, 27], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 413, "bbox": [81, 169, 28, 27], "iscrowd": 0}, {"id": 65791, "category_id": 109, "area": 1087, "bbox": [175, 184, 46, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00001247", "file_name": "ADE_val_00001247.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 30994, "bbox": [38, 0, 461, 143], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 24589, "bbox": [0, 118, 499, 215], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6785, "bbox": [157, 58, 68, 159], "iscrowd": 0}, {"id": 2628227, "category_id": 13, "area": 6176, "bbox": [106, 32, 49, 178], "iscrowd": 0}, {"id": 2628474, "category_id": 13, "area": 808, "bbox": [382, 58, 35, 57], "iscrowd": 0}, {"id": 2627728, "category_id": 13, "area": 5249, "bbox": [397, 46, 73, 175], "iscrowd": 0}, {"id": 2758299, "category_id": 13, "area": 13653, "bbox": [339, 109, 115, 223], "iscrowd": 0}, {"id": 2558355, "category_id": 13, "area": 5736, "bbox": [414, 153, 81, 151], "iscrowd": 0}, {"id": 5636274, "category_id": 13, "area": 590, "bbox": [325, 66, 20, 42], "iscrowd": 0}, {"id": 4718732, "category_id": 13, "area": 31743, "bbox": [38, 56, 329, 253], "iscrowd": 0}, {"id": 2236300, "category_id": 13, "area": 6294, "bbox": [0, 92, 46, 210], "iscrowd": 0}, {"id": 5832875, "category_id": 13, "area": 4547, "bbox": [438, 104, 60, 185], "iscrowd": 0}, {"id": 4195968, "category_id": 13, "area": 8691, "bbox": [59, 179, 117, 134], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 5674, "bbox": [0, 0, 63, 167], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 574, "bbox": [58, 127, 37, 26], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 596, "bbox": [327, 109, 28, 31], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 904, "bbox": [40, 149, 329, 167], "iscrowd": 0}]}, {"image_id": "ADE_val_00001248", "file_name": "ADE_val_00001248.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 27328, "bbox": [0, 0, 240, 240], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 23033, "bbox": [0, 0, 256, 165], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7591, "bbox": [0, 63, 256, 179], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 1938, "bbox": [77, 236, 122, 20], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 99, "bbox": [127, 208, 8, 15], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2349, "bbox": [0, 226, 85, 30], "iscrowd": 0}, {"id": 14384384, "category_id": 21, "area": 1184, "bbox": [199, 226, 57, 30], "iscrowd": 0}, {"id": 12668928, "category_id": 21, "area": 375, "bbox": [193, 227, 39, 21], "iscrowd": 0}, {"id": 12667136, "category_id": 21, "area": 282, "bbox": [181, 225, 22, 19], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 689, "bbox": [86, 224, 83, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001249", "file_name": "ADE_val_00001249.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3182, "bbox": [43, 274, 639, 57], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 807, "bbox": [614, 261, 50, 34], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 123636, "bbox": [0, 0, 682, 294], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 39715, "bbox": [0, 126, 606, 179], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 41853, "bbox": [0, 340, 682, 110], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 465, "bbox": [637, 329, 44, 12], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 73365, "bbox": [0, 276, 682, 235], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 429, "bbox": [443, 145, 12, 56], "iscrowd": 0}, {"id": 16711730, "category_id": 94, "area": 329, "bbox": [285, 158, 9, 49], "iscrowd": 0}, {"id": 16712258, "category_id": 94, "area": 236, "bbox": [321, 315, 5, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00001250", "file_name": "ADE_val_00001250.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 25146, "bbox": [0, 0, 255, 172], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 13077, "bbox": [0, 154, 255, 101], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 820, "bbox": [131, 200, 58, 54], "iscrowd": 0}, {"id": 23993, "category_id": 20, "area": 673, "bbox": [55, 160, 44, 44], "iscrowd": 0}, {"id": 738517, "category_id": 20, "area": 849, "bbox": [97, 162, 46, 58], "iscrowd": 0}, {"id": 1922522, "category_id": 20, "area": 363, "bbox": [161, 157, 22, 19], "iscrowd": 0}, {"id": 932304, "category_id": 20, "area": 329, "bbox": [206, 150, 22, 20], "iscrowd": 0}, {"id": 1521116, "category_id": 20, "area": 249, "bbox": [238, 147, 17, 18], "iscrowd": 0}, {"id": 23258, "category_id": 20, "area": 1434, "bbox": [200, 202, 54, 52], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 632, "bbox": [205, 8, 19, 35], "iscrowd": 0}, {"id": 4461040, "category_id": 23, "area": 495, "bbox": [170, 7, 17, 31], "iscrowd": 0}, {"id": 3022845, "category_id": 23, "area": 574, "bbox": [151, 5, 18, 32], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 4718, "bbox": [0, 115, 106, 61], "iscrowd": 0}, {"id": 5505279, "category_id": 25, "area": 2211, "bbox": [105, 97, 54, 48], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 383, "bbox": [158, 112, 68, 11], "iscrowd": 0}, {"id": 5242652, "category_id": 34, "area": 4132, "bbox": [56, 134, 199, 88], "iscrowd": 0}, {"id": 6287374, "category_id": 34, "area": 5245, "bbox": [129, 163, 127, 92], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 524, "bbox": [187, 92, 27, 24], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 1288, "bbox": [19, 47, 30, 44], "iscrowd": 0}, {"id": 65453, "category_id": 145, "area": 680, "bbox": [0, 47, 16, 45], "iscrowd": 0}, {"id": 65472, "category_id": 145, "area": 798, "bbox": [237, 46, 19, 45], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 410, "bbox": [26, 12, 23, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00001251", "file_name": "ADE_val_00001251.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 25458, "bbox": [2, 0, 253, 155], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17249, "bbox": [2, 141, 253, 115], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 643, "bbox": [152, 98, 45, 18], "iscrowd": 0}, {"id": 16122877, "category_id": 11, "area": 1049, "bbox": [69, 105, 37, 32], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2663, "bbox": [212, 35, 33, 90], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 751, "bbox": [76, 150, 46, 56], "iscrowd": 0}, {"id": 1456362, "category_id": 20, "area": 724, "bbox": [55, 142, 39, 52], "iscrowd": 0}, {"id": 1002159, "category_id": 20, "area": 912, "bbox": [107, 161, 43, 68], "iscrowd": 0}, {"id": 17101, "category_id": 20, "area": 649, "bbox": [25, 132, 38, 61], "iscrowd": 0}, {"id": 1069262, "category_id": 20, "area": 435, "bbox": [5, 126, 32, 58], "iscrowd": 0}, {"id": 407985, "category_id": 20, "area": 1364, "bbox": [147, 179, 72, 72], "iscrowd": 0}, {"id": 24032, "category_id": 20, "area": 385, "bbox": [209, 128, 31, 27], "iscrowd": 0}, {"id": 20449, "category_id": 20, "area": 727, "bbox": [216, 173, 39, 73], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 562, "bbox": [0, 52, 97, 8], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 2571, "bbox": [138, 164, 98, 92], "iscrowd": 0}, {"id": 4456221, "category_id": 34, "area": 3306, "bbox": [142, 111, 109, 49], "iscrowd": 0}, {"id": 5109794, "category_id": 34, "area": 2369, "bbox": [2, 117, 199, 53], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 532, "bbox": [2, 44, 84, 9], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 288, "bbox": [205, 190, 16, 47], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 247, "bbox": [229, 1, 16, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00001252", "file_name": "ADE_val_00001252.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 24778, "bbox": [0, 0, 282, 106], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 78019, "bbox": [2, 74, 281, 336], "iscrowd": 0}, {"id": 16761344, "category_id": 95, "area": 11458, "bbox": [209, 137, 75, 190], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 103, "bbox": [28, 55, 10, 23], "iscrowd": 0}, {"id": 3737522, "category_id": 13, "area": 54, "bbox": [69, 65, 5, 15], "iscrowd": 0}, {"id": 2953620, "category_id": 13, "area": 68, "bbox": [38, 63, 8, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001253", "file_name": "ADE_val_00001253.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 29336, "bbox": [2, 1, 253, 222], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 22832, "bbox": [2, 124, 253, 132], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 10745, "bbox": [80, 0, 175, 97], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 835, "bbox": [56, 114, 18, 69], "iscrowd": 0}, {"id": 3280612, "category_id": 43, "area": 478, "bbox": [30, 112, 12, 80], "iscrowd": 0}]}, {"image_id": "ADE_val_00001254", "file_name": "ADE_val_00001254.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 146532, "bbox": [1, 0, 681, 432], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 110227, "bbox": [0, 0, 569, 250], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 72533, "bbox": [0, 367, 682, 143], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 771, "bbox": [15, 348, 60, 28], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 14644, "bbox": [0, 369, 682, 96], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 78, "bbox": [314, 350, 8, 22], "iscrowd": 0}, {"id": 3742618, "category_id": 13, "area": 133, "bbox": [295, 348, 9, 26], "iscrowd": 0}, {"id": 4785318, "category_id": 13, "area": 209, "bbox": [284, 347, 11, 30], "iscrowd": 0}, {"id": 4464280, "category_id": 13, "area": 65, "bbox": [392, 352, 5, 19], "iscrowd": 0}, {"id": 4980907, "category_id": 13, "area": 68, "bbox": [253, 347, 9, 19], "iscrowd": 0}, {"id": 3019388, "category_id": 13, "area": 56, "bbox": [384, 352, 5, 18], "iscrowd": 0}, {"id": 3473543, "category_id": 13, "area": 36, "bbox": [379, 352, 3, 16], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 341, "bbox": [301, 325, 12, 44], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 131, "bbox": [362, 347, 6, 22], "iscrowd": 0}, {"id": 10816511, "category_id": 44, "area": 66, "bbox": [95, 355, 15, 21], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 252, "bbox": [226, 344, 13, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001255", "file_name": "ADE_val_00001255.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 33187, "bbox": [16, 0, 650, 377], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 68207, "bbox": [0, 286, 680, 225], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2067, "bbox": [456, 85, 72, 89], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 1055, "bbox": [210, 23, 57, 21], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 5851, "bbox": [351, 168, 109, 150], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3585, "bbox": [350, 66, 35, 110], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 5763, "bbox": [465, 116, 51, 210], "iscrowd": 0}, {"id": 4988581, "category_id": 13, "area": 5935, "bbox": [433, 128, 54, 207], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1050, "bbox": [505, 236, 22, 50], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2494, "bbox": [408, 109, 64, 53], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 47328, "bbox": [2, 0, 333, 461], "iscrowd": 0}, {"id": 16776960, "category_id": 36, "area": 17978, "bbox": [569, 0, 111, 437], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 714, "bbox": [509, 174, 18, 62], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1728, "bbox": [169, 1, 45, 45], "iscrowd": 0}, {"id": 240356, "category_id": 40, "area": 285, "bbox": [157, 126, 22, 22], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1072, "bbox": [268, 23, 58, 22], "iscrowd": 0}, {"id": 2551042, "category_id": 42, "area": 546, "bbox": [150, 18, 24, 28], "iscrowd": 0}, {"id": 261888, "category_id": 42, "area": 514, "bbox": [586, 1, 20, 31], "iscrowd": 0}, {"id": 1507072, "category_id": 42, "area": 543, "bbox": [295, 195, 29, 26], "iscrowd": 0}, {"id": 385537, "category_id": 42, "area": 555, "bbox": [240, 207, 42, 14], "iscrowd": 0}, {"id": 1501700, "category_id": 42, "area": 1048, "bbox": [174, 148, 47, 23], "iscrowd": 0}, {"id": 3339008, "category_id": 42, "area": 436, "bbox": [159, 205, 18, 25], "iscrowd": 0}, {"id": 2418949, "category_id": 42, "area": 392, "bbox": [159, 182, 18, 23], "iscrowd": 0}, {"id": 917252, "category_id": 42, "area": 525, "bbox": [162, 255, 21, 31], "iscrowd": 0}, {"id": 65280, "category_id": 42, "area": 390, "bbox": [150, 263, 16, 27], "iscrowd": 0}, {"id": 2883328, "category_id": 42, "area": 243, "bbox": [148, 242, 15, 22], "iscrowd": 0}, {"id": 1310482, "category_id": 42, "area": 345, "bbox": [157, 148, 18, 23], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 43703, "bbox": [260, 221, 182, 269], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 4658, "bbox": [644, 45, 35, 302], "iscrowd": 0}, {"id": 14964736, "category_id": 93, "area": 3456, "bbox": [631, 42, 49, 303], "iscrowd": 0}, {"id": 15890688, "category_id": 93, "area": 3040, "bbox": [632, 54, 25, 282], "iscrowd": 0}, {"id": 14779404, "category_id": 93, "area": 2090, "bbox": [617, 39, 55, 299], "iscrowd": 0}, {"id": 16208649, "category_id": 93, "area": 1532, "bbox": [610, 40, 55, 266], "iscrowd": 0}, {"id": 16739084, "category_id": 93, "area": 860, "bbox": [607, 59, 28, 221], "iscrowd": 0}, {"id": 16471042, "category_id": 93, "area": 1683, "bbox": [608, 58, 23, 242], "iscrowd": 0}, {"id": 16743187, "category_id": 93, "area": 1590, "bbox": [598, 60, 21, 206], "iscrowd": 0}, {"id": 14977792, "category_id": 93, "area": 517, "bbox": [586, 74, 15, 118], "iscrowd": 0}, {"id": 16737027, "category_id": 93, "area": 1390, "bbox": [594, 105, 16, 138], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 123, "bbox": [581, 220, 11, 17], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 2089, "bbox": [172, 298, 52, 47], "iscrowd": 0}, {"id": 65388, "category_id": 113, "area": 1710, "bbox": [104, 314, 34, 82], "iscrowd": 0}]}, {"image_id": "ADE_val_00001256", "file_name": "ADE_val_00001256.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3201, "bbox": [0, 0, 202, 17], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9456, "bbox": [0, 203, 216, 52], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 343, "bbox": [93, 77, 22, 21], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 32400, "bbox": [0, 0, 255, 256], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 218, "bbox": [72, 27, 18, 13], "iscrowd": 0}, {"id": 61464, "category_id": 42, "area": 179, "bbox": [12, 24, 20, 10], "iscrowd": 0}, {"id": 130845, "category_id": 42, "area": 153, "bbox": [41, 31, 17, 9], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 38, "bbox": [103, 31, 7, 9], "iscrowd": 0}, {"id": 652288, "category_id": 99, "area": 56, "bbox": [100, 55, 8, 10], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 178, "bbox": [41, 87, 21, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00001257", "file_name": "ADE_val_00001257.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 32439, "bbox": [2, 0, 393, 282], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 19343, "bbox": [2, 188, 394, 119], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3238, "bbox": [153, 1, 239, 27], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 2100, "bbox": [342, 29, 52, 47], "iscrowd": 0}, {"id": 215807, "category_id": 19, "area": 3582, "bbox": [345, 74, 50, 143], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 876, "bbox": [52, 1, 35, 31], "iscrowd": 0}, {"id": 4653301, "category_id": 23, "area": 759, "bbox": [196, 22, 25, 39], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 12689, "bbox": [232, 157, 163, 150], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 2786, "bbox": [359, 108, 35, 102], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 7044, "bbox": [251, 88, 94, 105], "iscrowd": 0}]}, {"image_id": "ADE_val_00001258", "file_name": "ADE_val_00001258.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 17261, "bbox": [0, 0, 256, 229], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6627, "bbox": [0, 194, 256, 62], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4473, "bbox": [0, 0, 250, 30], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 19841, "bbox": [2, 65, 253, 189], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 316, "bbox": [64, 143, 17, 21], "iscrowd": 0}, {"id": 637695, "category_id": 68, "area": 234, "bbox": [76, 112, 22, 13], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 343, "bbox": [65, 9, 49, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001259", "file_name": "ADE_val_00001259.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 36471, "bbox": [2, 1, 381, 196], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 24520, "bbox": [0, 155, 383, 99], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 375, "bbox": [232, 38, 92, 5], "iscrowd": 0}, {"id": 2756607, "category_id": 25, "area": 193, "bbox": [114, 72, 48, 5], "iscrowd": 0}, {"id": 5112046, "category_id": 25, "area": 291, "bbox": [115, 81, 70, 6], "iscrowd": 0}, {"id": 4719359, "category_id": 25, "area": 358, "bbox": [174, 102, 52, 9], "iscrowd": 0}, {"id": 4718821, "category_id": 25, "area": 287, "bbox": [63, 96, 49, 8], "iscrowd": 0}, {"id": 2883839, "category_id": 25, "area": 250, "bbox": [22, 78, 58, 6], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 1581, "bbox": [183, 20, 40, 60], "iscrowd": 0}, {"id": 16732674, "category_id": 93, "area": 1028, "bbox": [126, 17, 25, 54], "iscrowd": 0}, {"id": 15098112, "category_id": 93, "area": 1251, "bbox": [157, 17, 28, 59], "iscrowd": 0}, {"id": 14971904, "category_id": 93, "area": 1066, "bbox": [200, 125, 24, 64], "iscrowd": 0}, {"id": 16737024, "category_id": 93, "area": 213, "bbox": [198, 124, 9, 62], "iscrowd": 0}]}, {"image_id": "ADE_val_00001260", "file_name": "ADE_val_00001260.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 2925, "bbox": [0, 117, 237, 138], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 23281, "bbox": [0, 0, 255, 95], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 9982, "bbox": [29, 185, 226, 70], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 6720, "bbox": [0, 86, 255, 61], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 811, "bbox": [2, 181, 249, 54], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 19158, "bbox": [2, 103, 254, 118], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 199, "bbox": [224, 144, 31, 16], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 61, "bbox": [194, 161, 14, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00001261", "file_name": "ADE_val_00001261.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 11010, "bbox": [2, 2, 254, 45], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4106, "bbox": [3, 142, 187, 112], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 8810, "bbox": [2, 194, 253, 62], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 37728, "bbox": [2, 45, 253, 191], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 1751, "bbox": [2, 113, 131, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00001262", "file_name": "ADE_val_00001262.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21952, "bbox": [83, 184, 323, 327], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 7019, "bbox": [185, 48, 278, 51], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 37172, "bbox": [150, 0, 532, 90], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 834, "bbox": [210, 77, 57, 23], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 37834, "bbox": [2, 175, 396, 336], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 2112, "bbox": [235, 77, 258, 26], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 65265, "bbox": [0, 0, 369, 325], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 72184, "bbox": [243, 86, 439, 424], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 99703, "bbox": [204, 183, 473, 327], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 46, "bbox": [429, 104, 6, 12], "iscrowd": 0}, {"id": 1834910, "category_id": 77, "area": 63, "bbox": [467, 105, 8, 13], "iscrowd": 0}, {"id": 60050, "category_id": 77, "area": 52, "bbox": [616, 108, 6, 14], "iscrowd": 0}, {"id": 1309379, "category_id": 77, "area": 35, "bbox": [542, 102, 7, 13], "iscrowd": 0}, {"id": 1507262, "category_id": 77, "area": 26, "bbox": [509, 103, 6, 12], "iscrowd": 0}, {"id": 65194, "category_id": 77, "area": 18, "bbox": [401, 106, 5, 7], "iscrowd": 0}, {"id": 1308328, "category_id": 77, "area": 13, "bbox": [301, 102, 5, 6], "iscrowd": 0}, {"id": 64182, "category_id": 77, "area": 25, "bbox": [278, 102, 6, 8], "iscrowd": 0}, {"id": 62405, "category_id": 77, "area": 29, "bbox": [336, 102, 6, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00001263", "file_name": "ADE_val_00001263.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 52932, "bbox": [0, 0, 682, 105], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 25486, "bbox": [0, 269, 135, 241], "iscrowd": 0}, {"id": 13433093, "category_id": 32, "area": 10422, "bbox": [566, 396, 117, 115], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 22894, "bbox": [147, 379, 217, 132], "iscrowd": 0}]}, {"image_id": "ADE_val_00001264", "file_name": "ADE_val_00001264.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 9517, "bbox": [664, 315, 103, 195], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 84000, "bbox": [0, 0, 767, 339], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 16342, "bbox": [550, 151, 160, 125], "iscrowd": 0}, {"id": 14482167, "category_id": 9, "area": 14283, "bbox": [295, 151, 230, 94], "iscrowd": 0}, {"id": 13291763, "category_id": 9, "area": 10918, "bbox": [32, 134, 232, 111], "iscrowd": 0}, {"id": 14665981, "category_id": 9, "area": 1000, "bbox": [750, 218, 16, 98], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 26970, "bbox": [358, 173, 242, 284], "iscrowd": 0}, {"id": 3933322, "category_id": 13, "area": 13245, "bbox": [33, 137, 235, 272], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 61155, "bbox": [0, 244, 266, 267], "iscrowd": 0}, {"id": 14155548, "category_id": 32, "area": 51390, "bbox": [417, 268, 337, 243], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1849, "bbox": [614, 0, 78, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00001265", "file_name": "ADE_val_00001265.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 150839, "bbox": [0, 0, 682, 431], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 38495, "bbox": [0, 257, 682, 254], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2649, "bbox": [120, 0, 260, 20], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2743, "bbox": [597, 375, 85, 128], "iscrowd": 0}, {"id": 607153, "category_id": 20, "area": 547, "bbox": [350, 219, 32, 78], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 7051, "bbox": [504, 295, 178, 160], "iscrowd": 0}, {"id": 5437184, "category_id": 34, "area": 5369, "bbox": [156, 446, 356, 65], "iscrowd": 0}, {"id": 6487808, "category_id": 34, "area": 3706, "bbox": [411, 254, 109, 45], "iscrowd": 0}, {"id": 3079936, "category_id": 34, "area": 802, "bbox": [326, 218, 53, 28], "iscrowd": 0}, {"id": 5963560, "category_id": 34, "area": 4143, "bbox": [1, 323, 346, 52], "iscrowd": 0}, {"id": 4718345, "category_id": 34, "area": 401, "bbox": [304, 205, 29, 27], "iscrowd": 0}, {"id": 3275285, "category_id": 34, "area": 1516, "bbox": [365, 237, 61, 77], "iscrowd": 0}, {"id": 4980480, "category_id": 34, "area": 3519, "bbox": [25, 265, 248, 31], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 758, "bbox": [210, 188, 29, 29], "iscrowd": 0}, {"id": 12713741, "category_id": 75, "area": 4231, "bbox": [182, 201, 121, 65], "iscrowd": 0}, {"id": 9564676, "category_id": 75, "area": 1204, "bbox": [51, 178, 88, 40], "iscrowd": 0}, {"id": 11464448, "category_id": 75, "area": 16945, "bbox": [51, 317, 97, 194], "iscrowd": 0}, {"id": 13369109, "category_id": 75, "area": 11818, "bbox": [515, 220, 158, 105], "iscrowd": 0}, {"id": 12713758, "category_id": 75, "area": 47888, "bbox": [24, 300, 487, 211], "iscrowd": 0}, {"id": 10223382, "category_id": 75, "area": 15136, "bbox": [149, 233, 188, 136], "iscrowd": 0}, {"id": 13302280, "category_id": 75, "area": 5575, "bbox": [425, 198, 112, 71], "iscrowd": 0}, {"id": 12386069, "category_id": 75, "area": 2308, "bbox": [332, 177, 78, 50], "iscrowd": 0}, {"id": 12844800, "category_id": 75, "area": 2554, "bbox": [23, 190, 111, 61], "iscrowd": 0}, {"id": 11075353, "category_id": 75, "area": 7322, "bbox": [0, 238, 130, 140], "iscrowd": 0}, {"id": 10813184, "category_id": 75, "area": 3107, "bbox": [378, 186, 100, 64], "iscrowd": 0}, {"id": 11861780, "category_id": 75, "area": 4908, "bbox": [37, 205, 133, 89], "iscrowd": 0}]}, {"image_id": "ADE_val_00001266", "file_name": "ADE_val_00001266.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 82032, "bbox": [0, 0, 769, 196], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 116579, "bbox": [1, 158, 768, 353], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 23819, "bbox": [0, 28, 166, 204], "iscrowd": 0}, {"id": 1504778, "category_id": 15, "area": 8317, "bbox": [495, 56, 95, 117], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 184, "bbox": [651, 152, 117, 10], "iscrowd": 0}, {"id": 7019519, "category_id": 16, "area": 659, "bbox": [615, 160, 152, 18], "iscrowd": 0}, {"id": 3801343, "category_id": 16, "area": 1007, "bbox": [557, 181, 212, 24], "iscrowd": 0}, {"id": 4325625, "category_id": 16, "area": 421, "bbox": [249, 143, 123, 10], "iscrowd": 0}, {"id": 3613437, "category_id": 16, "area": 68074, "bbox": [1, 254, 346, 256], "iscrowd": 0}, {"id": 5441514, "category_id": 16, "area": 3567, "bbox": [161, 191, 230, 141], "iscrowd": 0}, {"id": 4334335, "category_id": 16, "area": 806, "bbox": [149, 153, 143, 44], "iscrowd": 0}, {"id": 4202495, "category_id": 16, "area": 252, "bbox": [319, 136, 103, 18], "iscrowd": 0}, {"id": 4718830, "category_id": 16, "area": 1278, "bbox": [318, 164, 177, 58], "iscrowd": 0}, {"id": 3738349, "category_id": 16, "area": 757, "bbox": [404, 151, 144, 45], "iscrowd": 0}, {"id": 3997951, "category_id": 16, "area": 444, "bbox": [467, 144, 109, 38], "iscrowd": 0}, {"id": 6690043, "category_id": 16, "area": 6794, "bbox": [455, 218, 314, 195], "iscrowd": 0}, {"id": 6562815, "category_id": 16, "area": 2206, "bbox": [0, 173, 137, 88], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 308, "bbox": [645, 137, 28, 15], "iscrowd": 0}, {"id": 543969, "category_id": 20, "area": 366, "bbox": [687, 139, 32, 15], "iscrowd": 0}, {"id": 2122442, "category_id": 20, "area": 299, "bbox": [733, 140, 30, 16], "iscrowd": 0}, {"id": 24000, "category_id": 20, "area": 349, "bbox": [624, 148, 33, 14], "iscrowd": 0}, {"id": 278201, "category_id": 20, "area": 4693, "bbox": [498, 184, 85, 158], "iscrowd": 0}, {"id": 798920, "category_id": 20, "area": 862, "bbox": [191, 141, 50, 52], "iscrowd": 0}, {"id": 1991872, "category_id": 20, "area": 778, "bbox": [220, 143, 60, 49], "iscrowd": 0}, {"id": 2176958, "category_id": 20, "area": 721, "bbox": [284, 146, 33, 56], "iscrowd": 0}, {"id": 804311, "category_id": 20, "area": 196, "bbox": [299, 134, 21, 12], "iscrowd": 0}, {"id": 601039, "category_id": 20, "area": 164, "bbox": [358, 127, 18, 11], "iscrowd": 0}, {"id": 676800, "category_id": 20, "area": 224, "bbox": [386, 127, 19, 25], "iscrowd": 0}, {"id": 11186, "category_id": 20, "area": 332, "bbox": [411, 129, 24, 23], "iscrowd": 0}, {"id": 866762, "category_id": 20, "area": 466, "bbox": [360, 150, 48, 54], "iscrowd": 0}, {"id": 1003752, "category_id": 20, "area": 1481, "bbox": [413, 152, 42, 95], "iscrowd": 0}, {"id": 81375, "category_id": 20, "area": 1759, "bbox": [441, 155, 63, 92], "iscrowd": 0}, {"id": 1465523, "category_id": 20, "area": 2560, "bbox": [225, 167, 85, 119], "iscrowd": 0}, {"id": 22205, "category_id": 20, "area": 2970, "bbox": [273, 171, 88, 129], "iscrowd": 0}, {"id": 21222, "category_id": 20, "area": 4325, "bbox": [326, 174, 94, 141], "iscrowd": 0}, {"id": 15592, "category_id": 20, "area": 187, "bbox": [440, 140, 30, 14], "iscrowd": 0}, {"id": 13543, "category_id": 20, "area": 345, "bbox": [671, 151, 36, 15], "iscrowd": 0}, {"id": 21736, "category_id": 20, "area": 453, "bbox": [723, 150, 35, 19], "iscrowd": 0}, {"id": 17077, "category_id": 20, "area": 1122, "bbox": [701, 168, 58, 78], "iscrowd": 0}, {"id": 2115043, "category_id": 20, "area": 1498, "bbox": [643, 164, 45, 64], "iscrowd": 0}, {"id": 15552, "category_id": 20, "area": 5719, "bbox": [661, 195, 91, 179], "iscrowd": 0}, {"id": 18126, "category_id": 20, "area": 5270, "bbox": [574, 190, 89, 165], "iscrowd": 0}, {"id": 994739, "category_id": 20, "area": 1586, "bbox": [29, 154, 82, 105], "iscrowd": 0}, {"id": 22210, "category_id": 20, "area": 1874, "bbox": [62, 157, 83, 102], "iscrowd": 0}, {"id": 2056387, "category_id": 20, "area": 2856, "bbox": [99, 160, 84, 103], "iscrowd": 0}, {"id": 614115, "category_id": 20, "area": 578, "bbox": [550, 134, 28, 38], "iscrowd": 0}, {"id": 933819, "category_id": 20, "area": 242, "bbox": [513, 133, 20, 23], "iscrowd": 0}, {"id": 1462247, "category_id": 20, "area": 169, "bbox": [481, 131, 26, 14], "iscrowd": 0}, {"id": 1852336, "category_id": 20, "area": 6754, "bbox": [0, 400, 93, 109], "iscrowd": 0}, {"id": 17630, "category_id": 20, "area": 1146, "bbox": [582, 161, 47, 61], "iscrowd": 0}, {"id": 1062597, "category_id": 20, "area": 176, "bbox": [333, 135, 20, 12], "iscrowd": 0}, {"id": 18615, "category_id": 20, "area": 514, "bbox": [360, 137, 27, 30], "iscrowd": 0}, {"id": 15294, "category_id": 20, "area": 1034, "bbox": [504, 144, 48, 65], "iscrowd": 0}, {"id": 22481, "category_id": 20, "area": 190, "bbox": [479, 141, 32, 15], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 529, "bbox": [421, 74, 27, 21], "iscrowd": 0}, {"id": 3935231, "category_id": 23, "area": 786, "bbox": [199, 69, 29, 29], "iscrowd": 0}, {"id": 1840639, "category_id": 23, "area": 533, "bbox": [273, 70, 21, 26], "iscrowd": 0}, {"id": 4659937, "category_id": 23, "area": 352, "bbox": [329, 72, 16, 22], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 4177, "bbox": [126, 236, 110, 62], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 56, "bbox": [721, 140, 6, 14], "iscrowd": 0}, {"id": 1375232, "category_id": 99, "area": 69, "bbox": [673, 138, 6, 16], "iscrowd": 0}, {"id": 261904, "category_id": 99, "area": 36, "bbox": [380, 127, 4, 12], "iscrowd": 0}, {"id": 63232, "category_id": 99, "area": 43, "bbox": [459, 130, 6, 13], "iscrowd": 0}, {"id": 61952, "category_id": 99, "area": 86, "bbox": [609, 145, 7, 18], "iscrowd": 0}, {"id": 60696, "category_id": 99, "area": 47, "bbox": [631, 136, 5, 13], "iscrowd": 0}, {"id": 65290, "category_id": 99, "area": 181, "bbox": [570, 161, 8, 27], "iscrowd": 0}, {"id": 62720, "category_id": 99, "area": 90, "bbox": [664, 147, 7, 18], "iscrowd": 0}, {"id": 1507080, "category_id": 99, "area": 58, "bbox": [258, 130, 5, 16], "iscrowd": 0}, {"id": 1699102, "category_id": 99, "area": 68, "bbox": [288, 131, 5, 17], "iscrowd": 0}, {"id": 65291, "category_id": 99, "area": 41, "bbox": [532, 133, 5, 11], "iscrowd": 0}, {"id": 717072, "category_id": 99, "area": 191, "bbox": [635, 165, 9, 28], "iscrowd": 0}, {"id": 323869, "category_id": 99, "area": 170, "bbox": [715, 170, 10, 22], "iscrowd": 0}, {"id": 57862, "category_id": 99, "area": 101, "bbox": [717, 150, 7, 18], "iscrowd": 0}, {"id": 2158613, "category_id": 99, "area": 105, "bbox": [197, 141, 7, 20], "iscrowd": 0}, {"id": 1048320, "category_id": 99, "area": 94, "bbox": [235, 142, 6, 21], "iscrowd": 0}, {"id": 65280, "category_id": 99, "area": 48, "bbox": [320, 125, 4, 14], "iscrowd": 0}, {"id": 1703680, "category_id": 99, "area": 47, "bbox": [349, 126, 4, 14], "iscrowd": 0}, {"id": 1179399, "category_id": 99, "area": 83, "bbox": [411, 136, 6, 19], "iscrowd": 0}, {"id": 1767168, "category_id": 99, "area": 144, "bbox": [429, 154, 7, 24], "iscrowd": 0}, {"id": 326400, "category_id": 99, "area": 80, "bbox": [452, 139, 5, 18], "iscrowd": 0}, {"id": 851712, "category_id": 99, "area": 33, "bbox": [493, 132, 5, 9], "iscrowd": 0}, {"id": 58377, "category_id": 99, "area": 133, "bbox": [330, 148, 8, 22], "iscrowd": 0}, {"id": 1638164, "category_id": 99, "area": 72, "bbox": [325, 134, 6, 16], "iscrowd": 0}, {"id": 1373440, "category_id": 99, "area": 91, "bbox": [160, 139, 6, 19], "iscrowd": 0}, {"id": 2621202, "category_id": 99, "area": 256, "bbox": [290, 179, 9, 34], "iscrowd": 0}, {"id": 2293534, "category_id": 99, "area": 250, "bbox": [234, 175, 9, 33], "iscrowd": 0}, {"id": 392192, "category_id": 99, "area": 211, "bbox": [182, 172, 8, 30], "iscrowd": 0}, {"id": 65294, "category_id": 99, "area": 94, "bbox": [494, 140, 7, 20], "iscrowd": 0}, {"id": 62237, "category_id": 99, "area": 142, "bbox": [378, 151, 8, 23], "iscrowd": 0}, {"id": 65287, "category_id": 99, "area": 149, "bbox": [58, 162, 8, 26], "iscrowd": 0}, {"id": 2096896, "category_id": 99, "area": 146, "bbox": [18, 159, 8, 26], "iscrowd": 0}, {"id": 58112, "category_id": 99, "area": 514, "bbox": [677, 211, 14, 44], "iscrowd": 0}, {"id": 849920, "category_id": 99, "area": 451, "bbox": [580, 203, 13, 42], "iscrowd": 0}, {"id": 61452, "category_id": 99, "area": 385, "bbox": [488, 195, 12, 40], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 729, "bbox": [398, 127, 83, 24], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 40, "bbox": [680, 144, 6, 7], "iscrowd": 0}, {"id": 13480465, "category_id": 148, "area": 36, "bbox": [637, 142, 6, 6], "iscrowd": 0}, {"id": 13741075, "category_id": 148, "area": 20, "bbox": [325, 130, 4, 6], "iscrowd": 0}, {"id": 11120671, "category_id": 148, "area": 33, "bbox": [465, 136, 4, 9], "iscrowd": 0}, {"id": 13096753, "category_id": 148, "area": 31, "bbox": [728, 146, 7, 5], "iscrowd": 0}, {"id": 11057173, "category_id": 148, "area": 73, "bbox": [617, 153, 6, 13], "iscrowd": 0}, {"id": 13280276, "category_id": 148, "area": 109, "bbox": [580, 171, 8, 18], "iscrowd": 0}, {"id": 13744651, "category_id": 148, "area": 35, "bbox": [538, 138, 6, 6], "iscrowd": 0}, {"id": 11327232, "category_id": 148, "area": 37, "bbox": [263, 136, 5, 8], "iscrowd": 0}, {"id": 14335775, "category_id": 148, "area": 57, "bbox": [293, 137, 6, 10], "iscrowd": 0}, {"id": 13484044, "category_id": 148, "area": 146, "bbox": [646, 175, 9, 18], "iscrowd": 0}, {"id": 13742595, "category_id": 148, "area": 185, "bbox": [726, 179, 11, 20], "iscrowd": 0}, {"id": 13879552, "category_id": 148, "area": 73, "bbox": [726, 158, 8, 11], "iscrowd": 0}, {"id": 11582218, "category_id": 148, "area": 96, "bbox": [672, 155, 8, 14], "iscrowd": 0}, {"id": 10802487, "category_id": 148, "area": 112, "bbox": [437, 162, 7, 16], "iscrowd": 0}, {"id": 14399253, "category_id": 148, "area": 104, "bbox": [338, 155, 7, 16], "iscrowd": 0}, {"id": 14207496, "category_id": 148, "area": 102, "bbox": [386, 159, 7, 15], "iscrowd": 0}, {"id": 12627474, "category_id": 148, "area": 75, "bbox": [458, 145, 6, 13], "iscrowd": 0}, {"id": 13083934, "category_id": 148, "area": 19, "bbox": [499, 137, 4, 5], "iscrowd": 0}, {"id": 13281066, "category_id": 148, "area": 74, "bbox": [166, 146, 6, 13], "iscrowd": 0}, {"id": 13160461, "category_id": 148, "area": 73, "bbox": [203, 147, 6, 14], "iscrowd": 0}, {"id": 14473220, "category_id": 148, "area": 92, "bbox": [240, 149, 7, 14], "iscrowd": 0}, {"id": 11195164, "category_id": 148, "area": 45, "bbox": [354, 131, 5, 9], "iscrowd": 0}, {"id": 12759591, "category_id": 148, "area": 48, "bbox": [384, 131, 6, 10], "iscrowd": 0}, {"id": 10859521, "category_id": 148, "area": 72, "bbox": [417, 143, 6, 12], "iscrowd": 0}, {"id": 11652649, "category_id": 148, "area": 158, "bbox": [25, 167, 9, 18], "iscrowd": 0}, {"id": 11654400, "category_id": 148, "area": 161, "bbox": [64, 171, 9, 19], "iscrowd": 0}, {"id": 11453977, "category_id": 148, "area": 205, "bbox": [190, 182, 10, 21], "iscrowd": 0}, {"id": 13614635, "category_id": 148, "area": 222, "bbox": [243, 186, 11, 22], "iscrowd": 0}, {"id": 11713035, "category_id": 148, "area": 225, "bbox": [299, 191, 10, 23], "iscrowd": 0}, {"id": 12499712, "category_id": 148, "area": 87, "bbox": [501, 146, 7, 14], "iscrowd": 0}, {"id": 11976993, "category_id": 148, "area": 347, "bbox": [500, 209, 14, 27], "iscrowd": 0}, {"id": 11974705, "category_id": 148, "area": 390, "bbox": [596, 217, 14, 30], "iscrowd": 0}, {"id": 13359119, "category_id": 148, "area": 455, "bbox": [693, 226, 16, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00001267", "file_name": "ADE_val_00001267.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 25593, "bbox": [0, 0, 256, 170], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4600, "bbox": [0, 169, 256, 87], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1099, "bbox": [86, 87, 32, 51], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1394, "bbox": [120, 112, 135, 32], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 10915, "bbox": [21, 136, 234, 119], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2823, "bbox": [209, 43, 46, 64], "iscrowd": 0}, {"id": 3875327, "category_id": 23, "area": 1356, "bbox": [161, 51, 32, 44], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1284, "bbox": [151, 1, 68, 41], "iscrowd": 0}, {"id": 1503732, "category_id": 37, "area": 945, "bbox": [61, 0, 55, 46], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 1024, "bbox": [9, 121, 45, 45], "iscrowd": 0}, {"id": 16711712, "category_id": 76, "area": 1904, "bbox": [1, 144, 44, 92], "iscrowd": 0}, {"id": 15990787, "category_id": 76, "area": 4613, "bbox": [35, 160, 102, 96], "iscrowd": 0}, {"id": 16712704, "category_id": 76, "area": 5574, "bbox": [140, 186, 100, 69], "iscrowd": 0}, {"id": 16712714, "category_id": 76, "area": 918, "bbox": [178, 125, 43, 29], "iscrowd": 0}, {"id": 16715277, "category_id": 76, "area": 1098, "bbox": [115, 114, 59, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00001268", "file_name": "ADE_val_00001268.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 8592, "bbox": [0, 108, 255, 59], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4271, "bbox": [31, 146, 224, 108], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 4811, "bbox": [19, 139, 227, 28], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6167, "bbox": [1, 166, 255, 37], "iscrowd": 0}, {"id": 5112063, "category_id": 16, "area": 2190, "bbox": [0, 101, 255, 33], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 23915, "bbox": [0, 0, 254, 96], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1999, "bbox": [0, 184, 44, 71], "iscrowd": 0}, {"id": 18380, "category_id": 20, "area": 144, "bbox": [194, 95, 22, 8], "iscrowd": 0}, {"id": 1921205, "category_id": 20, "area": 183, "bbox": [230, 96, 21, 12], "iscrowd": 0}, {"id": 1925296, "category_id": 20, "area": 5029, "bbox": [183, 178, 73, 78], "iscrowd": 0}, {"id": 15815, "category_id": 20, "area": 5316, "bbox": [58, 185, 85, 70], "iscrowd": 0}, {"id": 20961, "category_id": 20, "area": 186, "bbox": [76, 93, 23, 9], "iscrowd": 0}, {"id": 1722321, "category_id": 20, "area": 228, "bbox": [112, 92, 24, 10], "iscrowd": 0}, {"id": 2049741, "category_id": 20, "area": 163, "bbox": [148, 94, 24, 7], "iscrowd": 0}, {"id": 1063875, "category_id": 20, "area": 163, "bbox": [34, 95, 24, 9], "iscrowd": 0}, {"id": 20695, "category_id": 20, "area": 196, "bbox": [1, 97, 22, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00001269", "file_name": "ADE_val_00001269.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 7861, "bbox": [0, 12, 255, 100], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17491, "bbox": [0, 110, 256, 145], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3919, "bbox": [1, 0, 253, 21], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6466, "bbox": [103, 17, 110, 65], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 686, "bbox": [66, 17, 14, 55], "iscrowd": 0}, {"id": 16713188, "category_id": 11, "area": 842, "bbox": [237, 15, 16, 60], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 14424, "bbox": [21, 82, 234, 74], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 7608, "bbox": [0, 113, 119, 134], "iscrowd": 0}, {"id": 932271, "category_id": 20, "area": 223, "bbox": [69, 72, 17, 17], "iscrowd": 0}, {"id": 18149, "category_id": 20, "area": 433, "bbox": [16, 76, 22, 31], "iscrowd": 0}, {"id": 12506, "category_id": 20, "area": 353, "bbox": [0, 76, 19, 36], "iscrowd": 0}, {"id": 15314, "category_id": 20, "area": 252, "bbox": [208, 72, 20, 15], "iscrowd": 0}, {"id": 1267423, "category_id": 20, "area": 262, "bbox": [232, 74, 19, 18], "iscrowd": 0}, {"id": 931258, "category_id": 20, "area": 2590, "bbox": [197, 179, 58, 65], "iscrowd": 0}, {"id": 1587158, "category_id": 20, "area": 243, "bbox": [90, 72, 20, 14], "iscrowd": 0}, {"id": 865481, "category_id": 20, "area": 352, "bbox": [31, 74, 21, 24], "iscrowd": 0}, {"id": 18098, "category_id": 20, "area": 297, "bbox": [49, 72, 19, 21], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 402, "bbox": [144, 57, 28, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001270", "file_name": "ADE_val_00001270.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21654, "bbox": [0, 0, 255, 147], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10402, "bbox": [0, 137, 255, 118], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 5001, "bbox": [199, 7, 56, 97], "iscrowd": 0}, {"id": 16711907, "category_id": 11, "area": 3507, "bbox": [3, 82, 119, 67], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 10904, "bbox": [46, 107, 209, 103], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3292, "bbox": [185, 199, 70, 55], "iscrowd": 0}, {"id": 25304, "category_id": 20, "area": 4144, "bbox": [98, 166, 91, 83], "iscrowd": 0}, {"id": 1859804, "category_id": 20, "area": 289, "bbox": [153, 107, 30, 14], "iscrowd": 0}, {"id": 807087, "category_id": 20, "area": 1756, "bbox": [15, 125, 61, 77], "iscrowd": 0}, {"id": 10435, "category_id": 20, "area": 3557, "bbox": [48, 139, 77, 98], "iscrowd": 0}, {"id": 2046157, "category_id": 20, "area": 428, "bbox": [197, 116, 40, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001271", "file_name": "ADE_val_00001271.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 12110, "bbox": [0, 0, 256, 171], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17929, "bbox": [0, 123, 256, 133], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2487, "bbox": [2, 0, 247, 22], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 3083, "bbox": [174, 36, 45, 89], "iscrowd": 0}, {"id": 4194072, "category_id": 15, "area": 4796, "bbox": [94, 17, 61, 92], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6007, "bbox": [60, 107, 195, 143], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 5520, "bbox": [140, 136, 90, 119], "iscrowd": 0}, {"id": 10690, "category_id": 20, "area": 354, "bbox": [226, 110, 24, 20], "iscrowd": 0}, {"id": 16851, "category_id": 20, "area": 164, "bbox": [153, 100, 15, 15], "iscrowd": 0}, {"id": 16563, "category_id": 20, "area": 121, "bbox": [138, 100, 13, 11], "iscrowd": 0}, {"id": 12500, "category_id": 20, "area": 200, "bbox": [73, 98, 23, 11], "iscrowd": 0}, {"id": 18666, "category_id": 20, "area": 170, "bbox": [221, 95, 17, 14], "iscrowd": 0}, {"id": 15080, "category_id": 20, "area": 135, "bbox": [244, 97, 11, 19], "iscrowd": 0}, {"id": 22998, "category_id": 20, "area": 1808, "bbox": [108, 126, 80, 104], "iscrowd": 0}, {"id": 1915604, "category_id": 20, "area": 1101, "bbox": [88, 119, 70, 89], "iscrowd": 0}, {"id": 472272, "category_id": 20, "area": 987, "bbox": [74, 114, 61, 78], "iscrowd": 0}, {"id": 20157, "category_id": 20, "area": 605, "bbox": [59, 113, 55, 65], "iscrowd": 0}, {"id": 21197, "category_id": 20, "area": 533, "bbox": [45, 107, 46, 62], "iscrowd": 0}, {"id": 995030, "category_id": 20, "area": 306, "bbox": [194, 106, 23, 19], "iscrowd": 0}, {"id": 20432, "category_id": 20, "area": 225, "bbox": [171, 103, 19, 17], "iscrowd": 0}, {"id": 2184136, "category_id": 20, "area": 322, "bbox": [35, 102, 42, 57], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 49, "bbox": [123, 61, 7, 8], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 168, "bbox": [153, 2, 50, 9], "iscrowd": 0}, {"id": 48127, "category_id": 83, "area": 201, "bbox": [130, 7, 47, 10], "iscrowd": 0}, {"id": 1420031, "category_id": 83, "area": 259, "bbox": [39, 1, 57, 9], "iscrowd": 0}, {"id": 16763904, "category_id": 131, "area": 5322, "bbox": [12, 9, 76, 77], "iscrowd": 0}]}, {"image_id": "ADE_val_00001272", "file_name": "ADE_val_00001272.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 122624, "bbox": [1, 33, 681, 435], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 57600, "bbox": [0, 301, 682, 210], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 46301, "bbox": [0, 0, 682, 83], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 8831, "bbox": [264, 143, 394, 155], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 19763, "bbox": [382, 91, 172, 119], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 22692, "bbox": [162, 264, 302, 206], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 761, "bbox": [385, 254, 65, 15], "iscrowd": 0}, {"id": 15570, "category_id": 20, "area": 764, "bbox": [278, 253, 37, 30], "iscrowd": 0}, {"id": 17632, "category_id": 20, "area": 1067, "bbox": [235, 263, 49, 36], "iscrowd": 0}, {"id": 1855681, "category_id": 20, "area": 1721, "bbox": [186, 274, 58, 49], "iscrowd": 0}, {"id": 17877, "category_id": 20, "area": 7254, "bbox": [96, 294, 100, 180], "iscrowd": 0}, {"id": 13505, "category_id": 20, "area": 18796, "bbox": [151, 346, 170, 165], "iscrowd": 0}, {"id": 10462, "category_id": 20, "area": 15308, "bbox": [334, 325, 152, 187], "iscrowd": 0}, {"id": 17584, "category_id": 20, "area": 3391, "bbox": [384, 305, 112, 137], "iscrowd": 0}, {"id": 1327801, "category_id": 20, "area": 2532, "bbox": [414, 289, 96, 123], "iscrowd": 0}, {"id": 933593, "category_id": 20, "area": 1632, "bbox": [439, 274, 79, 111], "iscrowd": 0}, {"id": 23761, "category_id": 20, "area": 2911, "bbox": [556, 449, 126, 62], "iscrowd": 0}, {"id": 14286, "category_id": 20, "area": 1715, "bbox": [454, 263, 82, 102], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1705, "bbox": [215, 127, 27, 66], "iscrowd": 0}, {"id": 1909489, "category_id": 23, "area": 2995, "bbox": [121, 119, 40, 82], "iscrowd": 0}, {"id": 4725738, "category_id": 23, "area": 3019, "bbox": [0, 111, 32, 102], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 909, "bbox": [612, 292, 31, 34], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 425, "bbox": [64, 116, 43, 18], "iscrowd": 0}, {"id": 15870725, "category_id": 135, "area": 315, "bbox": [178, 124, 34, 16], "iscrowd": 0}, {"id": 16715776, "category_id": 135, "area": 216, "bbox": [254, 129, 27, 13], "iscrowd": 0}, {"id": 16660225, "category_id": 135, "area": 240, "bbox": [335, 134, 32, 11], "iscrowd": 0}, {"id": 16332035, "category_id": 135, "area": 179, "bbox": [640, 133, 24, 12], "iscrowd": 0}, {"id": 16723968, "category_id": 135, "area": 77, "bbox": [672, 90, 11, 11], "iscrowd": 0}, {"id": 16723987, "category_id": 135, "area": 319, "bbox": [656, 112, 27, 20], "iscrowd": 0}, {"id": 14889245, "category_id": 135, "area": 254, "bbox": [575, 135, 35, 12], "iscrowd": 0}, {"id": 16716572, "category_id": 135, "area": 244, "bbox": [648, 127, 26, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001273", "file_name": "ADE_val_00001273.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 104989, "bbox": [0, 72, 683, 309], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 81747, "bbox": [0, 284, 683, 228], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 58872, "bbox": [0, 0, 683, 106], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 24173, "bbox": [204, 90, 165, 158], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 5176, "bbox": [160, 157, 79, 173], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 34123, "bbox": [214, 260, 468, 223], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 6810, "bbox": [452, 418, 162, 92], "iscrowd": 0}, {"id": 15271438, "category_id": 76, "area": 1262, "bbox": [476, 251, 66, 84], "iscrowd": 0}, {"id": 15338270, "category_id": 76, "area": 1274, "bbox": [514, 257, 66, 90], "iscrowd": 0}, {"id": 15466498, "category_id": 76, "area": 1949, "bbox": [555, 264, 83, 99], "iscrowd": 0}, {"id": 16718883, "category_id": 76, "area": 1360, "bbox": [411, 250, 62, 76], "iscrowd": 0}, {"id": 16714009, "category_id": 76, "area": 347, "bbox": [345, 251, 35, 15], "iscrowd": 0}, {"id": 15997696, "category_id": 76, "area": 485, "bbox": [292, 254, 40, 15], "iscrowd": 0}, {"id": 16712198, "category_id": 76, "area": 7538, "bbox": [365, 363, 135, 148], "iscrowd": 0}, {"id": 15274246, "category_id": 76, "area": 2205, "bbox": [232, 298, 79, 129], "iscrowd": 0}, {"id": 16515086, "category_id": 76, "area": 2384, "bbox": [198, 283, 80, 119], "iscrowd": 0}, {"id": 16715266, "category_id": 76, "area": 1352, "bbox": [183, 273, 58, 101], "iscrowd": 0}, {"id": 14745600, "category_id": 76, "area": 5680, "bbox": [303, 338, 119, 172], "iscrowd": 0}, {"id": 16712212, "category_id": 76, "area": 4093, "bbox": [259, 313, 94, 147], "iscrowd": 0}, {"id": 16711714, "category_id": 76, "area": 620, "bbox": [228, 258, 46, 16], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 161, "bbox": [337, 28, 29, 7], "iscrowd": 0}, {"id": 1021183, "category_id": 83, "area": 83, "bbox": [263, 58, 22, 5], "iscrowd": 0}, {"id": 1290226, "category_id": 83, "area": 118, "bbox": [577, 52, 24, 6], "iscrowd": 0}, {"id": 49145, "category_id": 83, "area": 61, "bbox": [472, 72, 18, 5], "iscrowd": 0}, {"id": 2003199, "category_id": 83, "area": 19, "bbox": [564, 71, 9, 3], "iscrowd": 0}, {"id": 1876976, "category_id": 83, "area": 90, "bbox": [528, 76, 21, 6], "iscrowd": 0}, {"id": 37887, "category_id": 83, "area": 171, "bbox": [108, 48, 28, 9], "iscrowd": 0}, {"id": 47871, "category_id": 83, "area": 29, "bbox": [256, 79, 11, 3], "iscrowd": 0}, {"id": 109567, "category_id": 83, "area": 60, "bbox": [126, 40, 15, 5], "iscrowd": 0}, {"id": 50933, "category_id": 83, "area": 39, "bbox": [98, 63, 13, 4], "iscrowd": 0}, {"id": 1687039, "category_id": 83, "area": 28, "bbox": [479, 84, 12, 3], "iscrowd": 0}, {"id": 45305, "category_id": 83, "area": 78, "bbox": [166, 1, 20, 5], "iscrowd": 0}, {"id": 1221631, "category_id": 83, "area": 55, "bbox": [501, 80, 17, 4], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 894, "bbox": [400, 329, 65, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00001274", "file_name": "ADE_val_00001274.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3125, "bbox": [1, 321, 111, 90], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 179387, "bbox": [95, 54, 587, 387], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 81606, "bbox": [0, 0, 682, 332], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 29876, "bbox": [0, 411, 556, 99], "iscrowd": 0}]}, {"image_id": "ADE_val_00001275", "file_name": "ADE_val_00001275.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 28145, "bbox": [304, 0, 455, 279], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 18385, "bbox": [528, 280, 231, 230], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 27286, "bbox": [332, 0, 427, 89], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 41425, "bbox": [538, 85, 193, 425], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 47, "bbox": [645, 32, 10, 6], "iscrowd": 0}, {"id": 46328, "category_id": 83, "area": 40, "bbox": [731, 41, 10, 6], "iscrowd": 0}, {"id": 833250, "category_id": 83, "area": 46, "bbox": [543, 21, 10, 6], "iscrowd": 0}, {"id": 107007, "category_id": 83, "area": 30, "bbox": [565, 68, 8, 5], "iscrowd": 0}, {"id": 1744102, "category_id": 83, "area": 59, "bbox": [416, 7, 12, 6], "iscrowd": 0}, {"id": 1819903, "category_id": 83, "area": 24, "bbox": [479, 61, 8, 4], "iscrowd": 0}]}, {"image_id": "ADE_val_00001276", "file_name": "ADE_val_00001276.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 15031, "bbox": [246, 439, 437, 71], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 204332, "bbox": [0, 1, 683, 510], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 112728, "bbox": [0, 0, 683, 343], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 6311, "bbox": [285, 122, 106, 102], "iscrowd": 0}, {"id": 1045408, "category_id": 124, "area": 1282, "bbox": [536, 404, 93, 19], "iscrowd": 0}, {"id": 123528, "category_id": 124, "area": 2090, "bbox": [283, 12, 93, 73], "iscrowd": 0}, {"id": 65432, "category_id": 124, "area": 2862, "bbox": [134, 125, 53, 84], "iscrowd": 0}, {"id": 786322, "category_id": 124, "area": 1534, "bbox": [151, 4, 53, 59], "iscrowd": 0}]}, {"image_id": "ADE_val_00001277", "file_name": "ADE_val_00001277.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 49478, "bbox": [0, 0, 682, 169], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5224, "bbox": [382, 0, 300, 30], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 148518, "bbox": [0, 167, 681, 343], "iscrowd": 0}, {"id": 5703906, "category_id": 25, "area": 5155, "bbox": [585, 125, 97, 68], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 1927, "bbox": [502, 33, 50, 49], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1565, "bbox": [74, 237, 60, 27], "iscrowd": 0}, {"id": 1441559, "category_id": 42, "area": 769, "bbox": [22, 236, 34, 28], "iscrowd": 0}, {"id": 1106714, "category_id": 42, "area": 907, "bbox": [0, 225, 28, 43], "iscrowd": 0}, {"id": 391936, "category_id": 42, "area": 7118, "bbox": [0, 318, 153, 70], "iscrowd": 0}, {"id": 2424320, "category_id": 42, "area": 5533, "bbox": [116, 308, 164, 59], "iscrowd": 0}, {"id": 63508, "category_id": 42, "area": 3064, "bbox": [227, 297, 127, 49], "iscrowd": 0}, {"id": 327424, "category_id": 42, "area": 626, "bbox": [129, 234, 34, 25], "iscrowd": 0}, {"id": 3079962, "category_id": 42, "area": 545, "bbox": [146, 233, 39, 26], "iscrowd": 0}, {"id": 65304, "category_id": 42, "area": 374, "bbox": [185, 237, 23, 19], "iscrowd": 0}, {"id": 2422533, "category_id": 42, "area": 353, "bbox": [194, 235, 34, 18], "iscrowd": 0}, {"id": 524032, "category_id": 42, "area": 301, "bbox": [227, 237, 25, 16], "iscrowd": 0}, {"id": 2752256, "category_id": 42, "area": 338, "bbox": [234, 235, 38, 16], "iscrowd": 0}, {"id": 2423296, "category_id": 42, "area": 326, "bbox": [260, 232, 31, 17], "iscrowd": 0}, {"id": 59138, "category_id": 42, "area": 225, "bbox": [285, 233, 24, 15], "iscrowd": 0}, {"id": 849664, "category_id": 42, "area": 255, "bbox": [296, 231, 30, 15], "iscrowd": 0}, {"id": 1900316, "category_id": 42, "area": 223, "bbox": [318, 230, 25, 14], "iscrowd": 0}, {"id": 60672, "category_id": 42, "area": 204, "bbox": [331, 229, 28, 14], "iscrowd": 0}, {"id": 392960, "category_id": 42, "area": 180, "bbox": [346, 228, 27, 14], "iscrowd": 0}, {"id": 649472, "category_id": 42, "area": 208, "bbox": [361, 227, 27, 14], "iscrowd": 0}, {"id": 65282, "category_id": 42, "area": 215, "bbox": [380, 226, 25, 14], "iscrowd": 0}, {"id": 57867, "category_id": 42, "area": 237, "bbox": [395, 224, 25, 16], "iscrowd": 0}, {"id": 2162449, "category_id": 42, "area": 192, "bbox": [591, 212, 23, 10], "iscrowd": 0}, {"id": 524043, "category_id": 42, "area": 155, "bbox": [527, 218, 30, 10], "iscrowd": 0}, {"id": 3208960, "category_id": 42, "area": 207, "bbox": [352, 279, 27, 15], "iscrowd": 0}, {"id": 847104, "category_id": 42, "area": 248, "bbox": [364, 276, 29, 16], "iscrowd": 0}, {"id": 1959438, "category_id": 42, "area": 223, "bbox": [378, 274, 28, 16], "iscrowd": 0}, {"id": 65280, "category_id": 42, "area": 209, "bbox": [392, 272, 25, 17], "iscrowd": 0}, {"id": 2353180, "category_id": 42, "area": 167, "bbox": [416, 274, 13, 16], "iscrowd": 0}, {"id": 2031361, "category_id": 42, "area": 485, "bbox": [167, 293, 43, 20], "iscrowd": 0}, {"id": 2031360, "category_id": 42, "area": 2205, "bbox": [10, 277, 63, 52], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1785, "bbox": [337, 1, 35, 56], "iscrowd": 0}, {"id": 10888178, "category_id": 44, "area": 2597, "bbox": [285, 0, 53, 54], "iscrowd": 0}, {"id": 10289403, "category_id": 44, "area": 1887, "bbox": [240, 1, 44, 47], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 48845, "bbox": [1, 63, 550, 116], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 1032, "bbox": [568, 448, 24, 64], "iscrowd": 0}, {"id": 720666, "category_id": 99, "area": 1501, "bbox": [588, 447, 39, 65], "iscrowd": 0}, {"id": 65281, "category_id": 99, "area": 1319, "bbox": [619, 437, 25, 74], "iscrowd": 0}, {"id": 2490134, "category_id": 99, "area": 380, "bbox": [491, 445, 17, 29], "iscrowd": 0}, {"id": 65283, "category_id": 99, "area": 695, "bbox": [463, 460, 21, 43], "iscrowd": 0}, {"id": 65307, "category_id": 99, "area": 683, "bbox": [440, 450, 20, 61], "iscrowd": 0}, {"id": 1244942, "category_id": 99, "area": 443, "bbox": [527, 434, 18, 55], "iscrowd": 0}, {"id": 256512, "category_id": 99, "area": 848, "bbox": [551, 441, 19, 71], "iscrowd": 0}, {"id": 65301, "category_id": 99, "area": 584, "bbox": [550, 390, 16, 51], "iscrowd": 0}, {"id": 61952, "category_id": 99, "area": 550, "bbox": [568, 394, 19, 53], "iscrowd": 0}, {"id": 60689, "category_id": 99, "area": 364, "bbox": [597, 402, 15, 44], "iscrowd": 0}, {"id": 2548480, "category_id": 99, "area": 802, "bbox": [587, 427, 21, 71], "iscrowd": 0}, {"id": 2162443, "category_id": 99, "area": 727, "bbox": [518, 456, 20, 55], "iscrowd": 0}, {"id": 60690, "category_id": 99, "area": 655, "bbox": [416, 442, 24, 70], "iscrowd": 0}, {"id": 62720, "category_id": 99, "area": 569, "bbox": [403, 434, 20, 67], "iscrowd": 0}, {"id": 62998, "category_id": 99, "area": 752, "bbox": [398, 463, 20, 48], "iscrowd": 0}, {"id": 584448, "category_id": 99, "area": 881, "bbox": [378, 454, 20, 58], "iscrowd": 0}, {"id": 391703, "category_id": 99, "area": 944, "bbox": [363, 447, 19, 64], "iscrowd": 0}, {"id": 1964032, "category_id": 99, "area": 95, "bbox": [631, 164, 7, 21], "iscrowd": 0}, {"id": 64000, "category_id": 99, "area": 108, "bbox": [637, 164, 7, 22], "iscrowd": 0}, {"id": 62466, "category_id": 99, "area": 76, "bbox": [614, 163, 6, 19], "iscrowd": 0}, {"id": 58888, "category_id": 99, "area": 105, "bbox": [615, 115, 9, 16], "iscrowd": 0}, {"id": 60438, "category_id": 99, "area": 104, "bbox": [624, 115, 10, 16], "iscrowd": 0}, {"id": 589598, "category_id": 99, "area": 110, "bbox": [650, 115, 10, 17], "iscrowd": 0}, {"id": 652032, "category_id": 99, "area": 93, "bbox": [598, 114, 9, 16], "iscrowd": 0}, {"id": 1304576, "category_id": 99, "area": 99, "bbox": [607, 115, 9, 16], "iscrowd": 0}, {"id": 783386, "category_id": 99, "area": 94, "bbox": [633, 115, 8, 17], "iscrowd": 0}, {"id": 1965834, "category_id": 99, "area": 104, "bbox": [641, 115, 8, 17], "iscrowd": 0}, {"id": 62748, "category_id": 99, "area": 107, "bbox": [659, 116, 10, 16], "iscrowd": 0}, {"id": 1900032, "category_id": 99, "area": 69, "bbox": [602, 136, 6, 20], "iscrowd": 0}, {"id": 2555648, "category_id": 99, "area": 70, "bbox": [607, 136, 6, 20], "iscrowd": 0}, {"id": 1238272, "category_id": 99, "area": 65, "bbox": [639, 138, 6, 20], "iscrowd": 0}, {"id": 65305, "category_id": 99, "area": 75, "bbox": [599, 161, 6, 21], "iscrowd": 0}, {"id": 65308, "category_id": 99, "area": 79, "bbox": [609, 162, 6, 21], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 4022, "bbox": [351, 358, 63, 93], "iscrowd": 0}, {"id": 10796623, "category_id": 116, "area": 5501, "bbox": [287, 371, 75, 103], "iscrowd": 0}, {"id": 11780702, "category_id": 116, "area": 6640, "bbox": [210, 387, 87, 114], "iscrowd": 0}, {"id": 10596669, "category_id": 116, "area": 6310, "bbox": [29, 178, 227, 33], "iscrowd": 0}, {"id": 10008629, "category_id": 116, "area": 7258, "bbox": [99, 415, 95, 97], "iscrowd": 0}]}, {"image_id": "ADE_val_00001278", "file_name": "ADE_val_00001278.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 4682, "bbox": [0, 0, 264, 36], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 15284, "bbox": [0, 0, 288, 76], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 17602, "bbox": [0, 124, 288, 81], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 7352, "bbox": [169, 71, 118, 78], "iscrowd": 0}, {"id": 830463, "category_id": 33, "area": 2823, "bbox": [0, 74, 68, 62], "iscrowd": 0}, {"id": 52223, "category_id": 33, "area": 1032, "bbox": [70, 122, 73, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00001279", "file_name": "ADE_val_00001279.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 218684, "bbox": [1, 0, 681, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 77528, "bbox": [178, 190, 409, 321], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 18534, "bbox": [341, 0, 260, 134], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3561, "bbox": [587, 146, 31, 168], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 876, "bbox": [524, 147, 20, 45], "iscrowd": 0}, {"id": 2359040, "category_id": 15, "area": 8343, "bbox": [330, 99, 42, 272], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 13064, "bbox": [3, 15, 59, 247], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 2952, "bbox": [382, 74, 26, 134], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 120, "bbox": [400, 23, 20, 8], "iscrowd": 0}, {"id": 44799, "category_id": 83, "area": 54, "bbox": [443, 69, 12, 5], "iscrowd": 0}, {"id": 1686778, "category_id": 83, "area": 48, "bbox": [474, 96, 11, 5], "iscrowd": 0}, {"id": 1690367, "category_id": 83, "area": 55, "bbox": [546, 68, 14, 5], "iscrowd": 0}, {"id": 2012415, "category_id": 83, "area": 47, "bbox": [544, 96, 11, 5], "iscrowd": 0}, {"id": 48100, "category_id": 83, "area": 24, "bbox": [543, 106, 8, 4], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 905, "bbox": [311, 70, 22, 47], "iscrowd": 0}, {"id": 15548674, "category_id": 135, "area": 211, "bbox": [438, 119, 11, 21], "iscrowd": 0}, {"id": 16721948, "category_id": 135, "area": 300, "bbox": [562, 106, 13, 27], "iscrowd": 0}, {"id": 15013144, "category_id": 135, "area": 65, "bbox": [487, 138, 7, 11], "iscrowd": 0}, {"id": 15545344, "category_id": 135, "area": 1060, "bbox": [233, 61, 23, 52], "iscrowd": 0}]}, {"image_id": "ADE_val_00001280", "file_name": "ADE_val_00001280.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 35355, "bbox": [1, 1, 255, 255], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14603, "bbox": [35, 121, 198, 135], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 8944, "bbox": [50, 1, 178, 91], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 2705, "bbox": [230, 23, 25, 122], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1479, "bbox": [194, 54, 13, 152], "iscrowd": 0}, {"id": 5242624, "category_id": 15, "area": 583, "bbox": [102, 69, 8, 88], "iscrowd": 0}, {"id": 1965840, "category_id": 15, "area": 189, "bbox": [134, 99, 9, 21], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 79, "bbox": [136, 66, 10, 8], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 84, "bbox": [131, 28, 17, 7], "iscrowd": 0}, {"id": 37375, "category_id": 83, "area": 26, "bbox": [136, 57, 8, 5], "iscrowd": 0}, {"id": 43263, "category_id": 83, "area": 9, "bbox": [138, 79, 5, 2], "iscrowd": 0}, {"id": 51941, "category_id": 83, "area": 4, "bbox": [136, 82, 4, 1], "iscrowd": 0}, {"id": 1684735, "category_id": 83, "area": 5, "bbox": [139, 84, 4, 2], "iscrowd": 0}, {"id": 45036, "category_id": 83, "area": 8, "bbox": [141, 87, 5, 2], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 110, "bbox": [215, 37, 7, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00001281", "file_name": "ADE_val_00001281.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 27876, "bbox": [2, 55, 254, 201], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9527, "bbox": [51, 161, 174, 95], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 20273, "bbox": [2, 2, 254, 133], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 3006, "bbox": [2, 13, 254, 14], "iscrowd": 0}, {"id": 1819903, "category_id": 83, "area": 1466, "bbox": [32, 68, 204, 10], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 918, "bbox": [2, 164, 112, 58], "iscrowd": 0}, {"id": 16741394, "category_id": 96, "area": 618, "bbox": [175, 162, 81, 58], "iscrowd": 0}]}, {"image_id": "ADE_val_00001282", "file_name": "ADE_val_00001282.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 73466, "bbox": [0, 0, 449, 301], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10922, "bbox": [0, 176, 169, 125], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 18473, "bbox": [0, 0, 261, 129], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 10415, "bbox": [212, 62, 49, 239], "iscrowd": 0}, {"id": 2877714, "category_id": 15, "area": 3653, "bbox": [142, 90, 21, 189], "iscrowd": 0}, {"id": 4844544, "category_id": 15, "area": 388, "bbox": [47, 120, 7, 80], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 16375, "bbox": [305, 0, 89, 203], "iscrowd": 0}, {"id": 2758893, "category_id": 23, "area": 653, "bbox": [94, 101, 12, 62], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 123, "bbox": [93, 3, 14, 12], "iscrowd": 0}, {"id": 40959, "category_id": 83, "area": 44, "bbox": [37, 74, 8, 7], "iscrowd": 0}, {"id": 1682175, "category_id": 83, "area": 19, "bbox": [19, 99, 5, 4], "iscrowd": 0}, {"id": 575231, "category_id": 83, "area": 19, "bbox": [9, 110, 5, 5], "iscrowd": 0}, {"id": 1158127, "category_id": 83, "area": 14, "bbox": [4, 117, 5, 4], "iscrowd": 0}, {"id": 45311, "category_id": 83, "area": 7, "bbox": [0, 123, 4, 2], "iscrowd": 0}]}, {"image_id": "ADE_val_00001283", "file_name": "ADE_val_00001283.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 39469, "bbox": [0, 0, 256, 255], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 19687, "bbox": [0, 120, 225, 136], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3530, "bbox": [48, 0, 98, 45], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2258, "bbox": [77, 51, 32, 77], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 36, "bbox": [93, 12, 10, 5], "iscrowd": 0}]}, {"image_id": "ADE_val_00001284", "file_name": "ADE_val_00001284.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3005, "bbox": [0, 110, 106, 59], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 338, "bbox": [48, 56, 57, 20], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 71500, "bbox": [0, 343, 681, 168], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 245135, "bbox": [0, 0, 682, 502], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 1688, "bbox": [458, 0, 118, 20], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 11460, "bbox": [591, 252, 91, 213], "iscrowd": 0}, {"id": 4863, "category_id": 67, "area": 1217, "bbox": [156, 160, 37, 47], "iscrowd": 0}, {"id": 239, "category_id": 67, "area": 843, "bbox": [281, 315, 37, 32], "iscrowd": 0}, {"id": 590079, "category_id": 67, "area": 924, "bbox": [383, 297, 35, 38], "iscrowd": 0}, {"id": 254, "category_id": 67, "area": 1439, "bbox": [222, 268, 47, 44], "iscrowd": 0}, {"id": 3071, "category_id": 67, "area": 358, "bbox": [452, 326, 20, 23], "iscrowd": 0}, {"id": 199411, "category_id": 67, "area": 957, "bbox": [254, 203, 40, 37], "iscrowd": 0}, {"id": 1535, "category_id": 67, "area": 437, "bbox": [349, 266, 26, 25], "iscrowd": 0}, {"id": 983271, "category_id": 67, "area": 562, "bbox": [371, 239, 31, 26], "iscrowd": 0}, {"id": 4351, "category_id": 67, "area": 610, "bbox": [412, 260, 32, 31], "iscrowd": 0}, {"id": 1966335, "category_id": 67, "area": 425, "bbox": [426, 234, 23, 24], "iscrowd": 0}, {"id": 4071, "category_id": 67, "area": 797, "bbox": [306, 356, 35, 34], "iscrowd": 0}, {"id": 2815, "category_id": 67, "area": 227, "bbox": [50, 239, 17, 23], "iscrowd": 0}, {"id": 131325, "category_id": 67, "area": 439, "bbox": [74, 161, 26, 25], "iscrowd": 0}, {"id": 238, "category_id": 67, "area": 206, "bbox": [217, 349, 24, 21], "iscrowd": 0}, {"id": 1279, "category_id": 67, "area": 1157, "bbox": [97, 136, 40, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00001285", "file_name": "ADE_val_00001285.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 71435, "bbox": [0, 13, 356, 243], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 4411, "bbox": [0, 0, 357, 37], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6024, "bbox": [0, 0, 354, 133], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 3078, "bbox": [0, 230, 357, 26], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1811, "bbox": [0, 202, 356, 36], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 2840, "bbox": [8, 228, 334, 28], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 218, "bbox": [232, 195, 15, 51], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 366, "bbox": [113, 205, 42, 50], "iscrowd": 0}, {"id": 16750086, "category_id": 96, "area": 297, "bbox": [189, 204, 44, 51], "iscrowd": 0}]}, {"image_id": "ADE_val_00001286", "file_name": "ADE_val_00001286.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 155062, "bbox": [0, 0, 549, 369], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 17981, "bbox": [29, 0, 486, 41], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 9019, "bbox": [54, 337, 439, 24], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 131, "bbox": [204, 326, 13, 11], "iscrowd": 0}, {"id": 549847, "category_id": 20, "area": 169, "bbox": [265, 326, 17, 12], "iscrowd": 0}, {"id": 18638, "category_id": 20, "area": 182, "bbox": [326, 323, 16, 13], "iscrowd": 0}, {"id": 1781453, "category_id": 20, "area": 197, "bbox": [150, 323, 16, 13], "iscrowd": 0}, {"id": 808890, "category_id": 20, "area": 167, "bbox": [177, 324, 15, 12], "iscrowd": 0}, {"id": 1915322, "category_id": 20, "area": 125, "bbox": [242, 325, 14, 11], "iscrowd": 0}, {"id": 25571, "category_id": 20, "area": 112, "bbox": [292, 327, 14, 9], "iscrowd": 0}, {"id": 13534, "category_id": 20, "area": 169, "bbox": [354, 325, 15, 12], "iscrowd": 0}, {"id": 18359, "category_id": 20, "area": 161, "bbox": [381, 325, 17, 10], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 3541, "bbox": [353, 182, 38, 156], "iscrowd": 0}, {"id": 2426877, "category_id": 43, "area": 3316, "bbox": [289, 182, 33, 155], "iscrowd": 0}, {"id": 1839871, "category_id": 43, "area": 3405, "bbox": [222, 179, 34, 157], "iscrowd": 0}, {"id": 725223, "category_id": 43, "area": 3334, "bbox": [153, 181, 35, 157], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 38064, "bbox": [2, 363, 547, 71], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 30, "bbox": [80, 2, 7, 6], "iscrowd": 0}, {"id": 702975, "category_id": 83, "area": 33, "bbox": [155, 2, 8, 5], "iscrowd": 0}, {"id": 41192, "category_id": 83, "area": 28, "bbox": [232, 2, 7, 5], "iscrowd": 0}, {"id": 500735, "category_id": 83, "area": 34, "bbox": [306, 2, 7, 6], "iscrowd": 0}, {"id": 49151, "category_id": 83, "area": 34, "bbox": [382, 3, 8, 5], "iscrowd": 0}, {"id": 38143, "category_id": 83, "area": 40, "bbox": [457, 3, 8, 6], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 296, "bbox": [264, 213, 19, 20], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 535, "bbox": [64, 221, 11, 84], "iscrowd": 0}, {"id": 16711768, "category_id": 150, "area": 502, "bbox": [464, 222, 16, 104], "iscrowd": 0}]}, {"image_id": "ADE_val_00001287", "file_name": "ADE_val_00001287.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 51866, "bbox": [0, 0, 599, 286], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 48177, "bbox": [0, 0, 598, 327], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 77456, "bbox": [0, 245, 599, 203], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1671, "bbox": [4, 216, 22, 101], "iscrowd": 0}]}, {"image_id": "ADE_val_00001288", "file_name": "ADE_val_00001288.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 11903, "bbox": [0, 0, 255, 100], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 12221, "bbox": [0, 27, 255, 190], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 26190, "bbox": [0, 24, 256, 231], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 14091, "bbox": [0, 46, 256, 201], "iscrowd": 0}]}, {"image_id": "ADE_val_00001289", "file_name": "ADE_val_00001289.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 11959, "bbox": [128, 18, 127, 227], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 21821, "bbox": [0, 0, 251, 212], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 30435, "bbox": [0, 0, 256, 256], "iscrowd": 0}]}, {"image_id": "ADE_val_00001290", "file_name": "ADE_val_00001290.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 72144, "bbox": [106, 0, 575, 185], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 3138, "bbox": [565, 245, 117, 44], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 250819, "bbox": [0, 0, 681, 511], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 534, "bbox": [494, 229, 16, 60], "iscrowd": 0}, {"id": 2752653, "category_id": 13, "area": 3780, "bbox": [455, 196, 48, 135], "iscrowd": 0}, {"id": 4194460, "category_id": 13, "area": 23, "bbox": [612, 276, 5, 8], "iscrowd": 0}, {"id": 4137379, "category_id": 13, "area": 18, "bbox": [615, 275, 3, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00001291", "file_name": "ADE_val_00001291.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 103645, "bbox": [0, 0, 682, 255], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 14344, "bbox": [1, 1, 289, 201], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 119966, "bbox": [0, 245, 682, 266], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 2936, "bbox": [0, 264, 158, 25], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 50500, "bbox": [0, 208, 683, 161], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1435, "bbox": [1, 196, 668, 47], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2565, "bbox": [556, 147, 33, 84], "iscrowd": 0}, {"id": 15266543, "category_id": 9, "area": 1485, "bbox": [650, 163, 24, 68], "iscrowd": 0}, {"id": 16774861, "category_id": 9, "area": 2061, "bbox": [554, 1, 118, 23], "iscrowd": 0}, {"id": 14798044, "category_id": 9, "area": 11705, "bbox": [552, 18, 120, 144], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1482, "bbox": [21, 206, 133, 38], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 211, "bbox": [389, 110, 10, 23], "iscrowd": 0}, {"id": 10223854, "category_id": 44, "area": 125, "bbox": [143, 202, 10, 37], "iscrowd": 0}, {"id": 11534588, "category_id": 44, "area": 83, "bbox": [271, 202, 6, 28], "iscrowd": 0}, {"id": 10813695, "category_id": 44, "area": 2819, "bbox": [274, 140, 54, 54], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 280, "bbox": [424, 236, 40, 11], "iscrowd": 0}, {"id": 16711915, "category_id": 126, "area": 602, "bbox": [546, 231, 43, 17], "iscrowd": 0}, {"id": 16718335, "category_id": 126, "area": 256, "bbox": [635, 234, 24, 14], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 10333, "bbox": [246, 0, 113, 340], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 2104, "bbox": [252, 230, 35, 70], "iscrowd": 0}]}, {"image_id": "ADE_val_00001292", "file_name": "ADE_val_00001292.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 182349, "bbox": [0, 0, 768, 354], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 77245, "bbox": [1, 109, 766, 402], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5984, "bbox": [127, 2, 82, 82], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 20042, "bbox": [569, 287, 156, 180], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 89330, "bbox": [0, 177, 708, 333], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 6537, "bbox": [495, 307, 78, 115], "iscrowd": 0}, {"id": 14811322, "category_id": 139, "area": 6760, "bbox": [235, 317, 69, 123], "iscrowd": 0}]}, {"image_id": "ADE_val_00001293", "file_name": "ADE_val_00001293.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 11396, "bbox": [2, 1, 298, 58], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 5252, "bbox": [1, 329, 141, 68], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 51926, "bbox": [0, 18, 299, 199], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 48288, "bbox": [0, 217, 299, 182], "iscrowd": 0}, {"id": 15466240, "category_id": 123, "area": 994, "bbox": [189, 203, 53, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00001294", "file_name": "ADE_val_00001294.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 24224, "bbox": [0, 0, 421, 74], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 12579, "bbox": [0, 34, 421, 63], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 53932, "bbox": [0, 87, 421, 193], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3983, "bbox": [0, 85, 81, 101], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 359, "bbox": [44, 75, 30, 13], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 328, "bbox": [142, 71, 31, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00001295", "file_name": "ADE_val_00001295.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 10472, "bbox": [0, 0, 132, 135], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 22381, "bbox": [0, 111, 332, 138], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 24537, "bbox": [126, 1, 206, 135], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 793, "bbox": [1, 132, 26, 38], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 3349, "bbox": [7, 0, 40, 160], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1889, "bbox": [125, 116, 105, 67], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1281, "bbox": [179, 141, 49, 51], "iscrowd": 0}, {"id": 1461428, "category_id": 20, "area": 1411, "bbox": [110, 135, 58, 59], "iscrowd": 0}, {"id": 25027, "category_id": 20, "area": 471, "bbox": [100, 118, 25, 50], "iscrowd": 0}, {"id": 1069501, "category_id": 20, "area": 184, "bbox": [144, 108, 21, 10], "iscrowd": 0}, {"id": 148967, "category_id": 20, "area": 714, "bbox": [223, 118, 35, 51], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 359, "bbox": [53, 36, 22, 17], "iscrowd": 0}, {"id": 1444861, "category_id": 23, "area": 312, "bbox": [76, 35, 20, 17], "iscrowd": 0}, {"id": 2103029, "category_id": 23, "area": 377, "bbox": [54, 58, 17, 26], "iscrowd": 0}, {"id": 3672063, "category_id": 23, "area": 332, "bbox": [83, 56, 15, 24], "iscrowd": 0}, {"id": 5313017, "category_id": 23, "area": 78, "bbox": [73, 63, 8, 11], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 5494, "bbox": [254, 128, 78, 119], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 2940, "bbox": [213, 185, 53, 64], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 1069, "bbox": [71, 91, 40, 37], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 592, "bbox": [43, 117, 31, 31], "iscrowd": 0}, {"id": 595434, "category_id": 109, "area": 156, "bbox": [145, 126, 18, 12], "iscrowd": 0}, {"id": 1048815, "category_id": 109, "area": 631, "bbox": [174, 114, 34, 27], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1273, "bbox": [294, 167, 38, 45], "iscrowd": 0}, {"id": 718455, "category_id": 113, "area": 917, "bbox": [291, 219, 40, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00001296", "file_name": "ADE_val_00001296.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3380, "bbox": [0, 122, 65, 140], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 37548, "bbox": [2, 0, 396, 127], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 20102, "bbox": [50, 0, 449, 168], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 3470, "bbox": [15, 154, 48, 107], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 57605, "bbox": [26, 80, 473, 294], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 15255, "bbox": [0, 304, 496, 70], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 546, "bbox": [387, 44, 29, 29], "iscrowd": 0}, {"id": 249, "category_id": 67, "area": 469, "bbox": [419, 75, 28, 28], "iscrowd": 0}, {"id": 1791, "category_id": 67, "area": 610, "bbox": [456, 0, 43, 21], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 276, "bbox": [306, 110, 10, 38], "iscrowd": 0}, {"id": 2614016, "category_id": 99, "area": 297, "bbox": [322, 109, 10, 39], "iscrowd": 0}, {"id": 62740, "category_id": 99, "area": 263, "bbox": [337, 113, 10, 33], "iscrowd": 0}, {"id": 452100, "category_id": 99, "area": 279, "bbox": [352, 106, 10, 40], "iscrowd": 0}, {"id": 60687, "category_id": 99, "area": 312, "bbox": [367, 109, 11, 36], "iscrowd": 0}, {"id": 1762571, "category_id": 99, "area": 293, "bbox": [383, 105, 10, 40], "iscrowd": 0}, {"id": 2286848, "category_id": 99, "area": 231, "bbox": [293, 114, 8, 35], "iscrowd": 0}, {"id": 917270, "category_id": 99, "area": 222, "bbox": [280, 117, 8, 33], "iscrowd": 0}, {"id": 1900061, "category_id": 99, "area": 144, "bbox": [99, 179, 7, 28], "iscrowd": 0}, {"id": 1441536, "category_id": 99, "area": 141, "bbox": [92, 179, 7, 28], "iscrowd": 0}, {"id": 57856, "category_id": 99, "area": 180, "bbox": [207, 175, 7, 33], "iscrowd": 0}, {"id": 1965824, "category_id": 99, "area": 141, "bbox": [67, 179, 8, 27], "iscrowd": 0}, {"id": 65280, "category_id": 99, "area": 168, "bbox": [197, 180, 9, 27], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 1933, "bbox": [0, 260, 39, 54], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 722, "bbox": [398, 280, 45, 19], "iscrowd": 0}, {"id": 56575, "category_id": 121, "area": 531, "bbox": [414, 261, 29, 22], "iscrowd": 0}, {"id": 2011647, "category_id": 121, "area": 450, "bbox": [416, 242, 27, 18], "iscrowd": 0}, {"id": 44799, "category_id": 121, "area": 634, "bbox": [352, 275, 46, 20], "iscrowd": 0}, {"id": 59123, "category_id": 121, "area": 659, "bbox": [377, 259, 38, 24], "iscrowd": 0}, {"id": 1099237, "category_id": 121, "area": 650, "bbox": [374, 240, 41, 24], "iscrowd": 0}, {"id": 47615, "category_id": 121, "area": 542, "bbox": [309, 275, 43, 16], "iscrowd": 0}, {"id": 55529, "category_id": 121, "area": 649, "bbox": [337, 256, 41, 19], "iscrowd": 0}, {"id": 54768, "category_id": 121, "area": 522, "bbox": [339, 240, 35, 18], "iscrowd": 0}, {"id": 1498623, "category_id": 121, "area": 570, "bbox": [306, 256, 34, 21], "iscrowd": 0}, {"id": 44782, "category_id": 121, "area": 510, "bbox": [271, 272, 39, 16], "iscrowd": 0}, {"id": 46828, "category_id": 121, "area": 651, "bbox": [270, 252, 44, 21], "iscrowd": 0}, {"id": 49407, "category_id": 121, "area": 344, "bbox": [279, 240, 27, 16], "iscrowd": 0}, {"id": 643071, "category_id": 121, "area": 1043, "bbox": [205, 134, 29, 53], "iscrowd": 0}, {"id": 47599, "category_id": 121, "area": 807, "bbox": [162, 132, 30, 51], "iscrowd": 0}, {"id": 1356287, "category_id": 121, "area": 810, "bbox": [125, 137, 26, 49], "iscrowd": 0}, {"id": 177147, "category_id": 121, "area": 790, "bbox": [101, 138, 29, 51], "iscrowd": 0}, {"id": 55526, "category_id": 121, "area": 596, "bbox": [83, 144, 26, 45], "iscrowd": 0}, {"id": 58879, "category_id": 121, "area": 602, "bbox": [66, 141, 25, 49], "iscrowd": 0}, {"id": 772863, "category_id": 121, "area": 648, "bbox": [153, 291, 26, 31], "iscrowd": 0}, {"id": 56831, "category_id": 121, "area": 497, "bbox": [178, 293, 26, 27], "iscrowd": 0}, {"id": 57580, "category_id": 121, "area": 485, "bbox": [197, 298, 25, 26], "iscrowd": 0}, {"id": 57596, "category_id": 121, "area": 781, "bbox": [226, 306, 32, 33], "iscrowd": 0}, {"id": 1892351, "category_id": 121, "area": 276, "bbox": [260, 207, 28, 16], "iscrowd": 0}, {"id": 55039, "category_id": 121, "area": 1262, "bbox": [266, 209, 70, 28], "iscrowd": 0}, {"id": 507372, "category_id": 121, "area": 288, "bbox": [327, 171, 20, 18], "iscrowd": 0}, {"id": 60159, "category_id": 121, "area": 338, "bbox": [304, 172, 23, 16], "iscrowd": 0}, {"id": 1368063, "category_id": 121, "area": 784, "bbox": [104, 297, 38, 30], "iscrowd": 0}, {"id": 45567, "category_id": 121, "area": 713, "bbox": [357, 212, 34, 26], "iscrowd": 0}, {"id": 640750, "category_id": 121, "area": 506, "bbox": [334, 210, 25, 25], "iscrowd": 0}, {"id": 57851, "category_id": 121, "area": 1537, "bbox": [295, 322, 53, 36], "iscrowd": 0}, {"id": 52223, "category_id": 121, "area": 2070, "bbox": [380, 329, 71, 38], "iscrowd": 0}, {"id": 57335, "category_id": 121, "area": 110, "bbox": [260, 168, 12, 12], "iscrowd": 0}, {"id": 965605, "category_id": 121, "area": 99, "bbox": [271, 167, 13, 11], "iscrowd": 0}, {"id": 50411, "category_id": 121, "area": 128, "bbox": [276, 176, 12, 12], "iscrowd": 0}, {"id": 115711, "category_id": 121, "area": 176, "bbox": [287, 176, 17, 12], "iscrowd": 0}, {"id": 1822719, "category_id": 121, "area": 116, "bbox": [253, 179, 12, 11], "iscrowd": 0}, {"id": 59119, "category_id": 121, "area": 100, "bbox": [265, 179, 12, 11], "iscrowd": 0}, {"id": 58349, "category_id": 121, "area": 364, "bbox": [425, 212, 17, 25], "iscrowd": 0}, {"id": 715006, "category_id": 121, "area": 205, "bbox": [120, 189, 17, 18], "iscrowd": 0}, {"id": 1094117, "category_id": 121, "area": 835, "bbox": [181, 139, 30, 47], "iscrowd": 0}, {"id": 46590, "category_id": 121, "area": 639, "bbox": [55, 230, 35, 22], "iscrowd": 0}, {"id": 700140, "category_id": 121, "area": 456, "bbox": [120, 236, 28, 19], "iscrowd": 0}, {"id": 55551, "category_id": 121, "area": 104, "bbox": [280, 211, 15, 10], "iscrowd": 0}, {"id": 964351, "category_id": 121, "area": 1644, "bbox": [45, 263, 40, 56], "iscrowd": 0}]}, {"image_id": "ADE_val_00001297", "file_name": "ADE_val_00001297.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 159990, "bbox": [0, 1, 682, 472], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 40592, "bbox": [0, 350, 682, 161], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 20798, "bbox": [55, 0, 626, 68], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 14562, "bbox": [1, 251, 128, 166], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 25582, "bbox": [122, 161, 125, 330], "iscrowd": 0}, {"id": 5832858, "category_id": 13, "area": 9200, "bbox": [244, 172, 100, 171], "iscrowd": 0}, {"id": 4792460, "category_id": 13, "area": 11341, "bbox": [366, 134, 82, 266], "iscrowd": 0}, {"id": 2694776, "category_id": 13, "area": 25402, "bbox": [423, 135, 91, 374], "iscrowd": 0}, {"id": 5701771, "category_id": 13, "area": 11604, "bbox": [198, 292, 211, 149], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 375, "bbox": [49, 248, 22, 19], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2641, "bbox": [433, 0, 165, 33], "iscrowd": 0}, {"id": 44799, "category_id": 83, "area": 1601, "bbox": [516, 18, 149, 31], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 447, "bbox": [11, 227, 15, 47], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 2451, "bbox": [50, 334, 49, 64], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 329, "bbox": [119, 133, 23, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001298", "file_name": "ADE_val_00001298.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 80897, "bbox": [0, 60, 682, 264], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 51661, "bbox": [0, 299, 682, 211], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 68655, "bbox": [0, 0, 682, 142], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 22257, "bbox": [147, 130, 247, 277], "iscrowd": 0}, {"id": 4527005, "category_id": 13, "area": 9318, "bbox": [527, 256, 151, 186], "iscrowd": 0}, {"id": 3612036, "category_id": 13, "area": 4798, "bbox": [502, 133, 49, 248], "iscrowd": 0}, {"id": 3735673, "category_id": 13, "area": 447, "bbox": [350, 262, 24, 45], "iscrowd": 0}, {"id": 2691730, "category_id": 13, "area": 196, "bbox": [271, 201, 13, 22], "iscrowd": 0}, {"id": 4588194, "category_id": 13, "area": 1097, "bbox": [1, 84, 32, 51], "iscrowd": 0}, {"id": 5446776, "category_id": 13, "area": 209, "bbox": [340, 265, 15, 28], "iscrowd": 0}, {"id": 2364841, "category_id": 13, "area": 65, "bbox": [338, 262, 10, 18], "iscrowd": 0}, {"id": 3539588, "category_id": 13, "area": 3624, "bbox": [630, 192, 52, 103], "iscrowd": 0}, {"id": 3153290, "category_id": 13, "area": 11706, "bbox": [457, 166, 121, 234], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 32779, "bbox": [1, 399, 356, 111], "iscrowd": 0}, {"id": 1521075, "category_id": 20, "area": 24801, "bbox": [0, 274, 327, 163], "iscrowd": 0}, {"id": 2046686, "category_id": 20, "area": 16090, "bbox": [1, 122, 307, 248], "iscrowd": 0}, {"id": 546232, "category_id": 20, "area": 7769, "bbox": [58, 152, 242, 191], "iscrowd": 0}, {"id": 338884, "category_id": 20, "area": 3355, "bbox": [114, 181, 187, 144], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 704, "bbox": [362, 275, 44, 39], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 517, "bbox": [260, 215, 42, 26], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 22, "bbox": [539, 30, 9, 3], "iscrowd": 0}, {"id": 52209, "category_id": 83, "area": 20, "bbox": [556, 95, 7, 4], "iscrowd": 0}, {"id": 38634, "category_id": 83, "area": 19, "bbox": [398, 72, 8, 4], "iscrowd": 0}, {"id": 49663, "category_id": 83, "area": 41, "bbox": [502, 59, 12, 4], "iscrowd": 0}, {"id": 897791, "category_id": 83, "area": 16, "bbox": [230, 50, 7, 3], "iscrowd": 0}, {"id": 39423, "category_id": 83, "area": 45, "bbox": [130, 14, 12, 5], "iscrowd": 0}, {"id": 1282294, "category_id": 83, "area": 22, "bbox": [58, 32, 7, 4], "iscrowd": 0}, {"id": 1031933, "category_id": 83, "area": 29, "bbox": [334, 1, 9, 5], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 4784, "bbox": [509, 338, 77, 96], "iscrowd": 0}]}, {"image_id": "ADE_val_00001299", "file_name": "ADE_val_00001299.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 22117, "bbox": [2, 1, 254, 92], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 30459, "bbox": [0, 102, 256, 154], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 7226, "bbox": [2, 101, 231, 153], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 5115, "bbox": [0, 81, 256, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00001300", "file_name": "ADE_val_00001300.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 123857, "bbox": [0, 139, 681, 323], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 103556, "bbox": [0, 0, 681, 318], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1428, "bbox": [1, 283, 191, 57], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 49511, "bbox": [0, 361, 681, 150], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2419, "bbox": [569, 325, 63, 119], "iscrowd": 0}, {"id": 3145902, "category_id": 13, "area": 708, "bbox": [76, 338, 26, 67], "iscrowd": 0}, {"id": 5177752, "category_id": 13, "area": 24577, "bbox": [459, 289, 174, 221], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 552, "bbox": [157, 343, 36, 25], "iscrowd": 0}, {"id": 12878848, "category_id": 21, "area": 575, "bbox": [126, 345, 53, 25], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1292, "bbox": [1, 221, 33, 42], "iscrowd": 0}, {"id": 10486010, "category_id": 44, "area": 4584, "bbox": [434, 275, 83, 61], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 24284, "bbox": [41, 32, 163, 243], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 1749, "bbox": [37, 117, 37, 184], "iscrowd": 0}]}, {"image_id": "ADE_val_00001301", "file_name": "ADE_val_00001301.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 22822, "bbox": [0, 0, 299, 211], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9234, "bbox": [0, 175, 299, 49], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 687, "bbox": [131, 0, 136, 10], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5194, "bbox": [23, 42, 53, 113], "iscrowd": 0}, {"id": 15597567, "category_id": 9, "area": 5362, "bbox": [93, 43, 77, 99], "iscrowd": 0}, {"id": 15069426, "category_id": 9, "area": 3566, "bbox": [187, 44, 47, 103], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4254, "bbox": [80, 139, 146, 83], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 9448, "bbox": [5, 9, 240, 72], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 541, "bbox": [119, 119, 37, 23], "iscrowd": 0}, {"id": 1326545, "category_id": 20, "area": 2006, "bbox": [128, 130, 56, 93], "iscrowd": 0}, {"id": 1267384, "category_id": 20, "area": 1248, "bbox": [177, 122, 54, 92], "iscrowd": 0}, {"id": 24264, "category_id": 20, "area": 1282, "bbox": [64, 125, 61, 98], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 806, "bbox": [134, 0, 45, 80], "iscrowd": 0}]}, {"image_id": "ADE_val_00001302", "file_name": "ADE_val_00001302.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 60065, "bbox": [0, 20, 767, 489], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 65537, "bbox": [0, 308, 743, 202], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 34806, "bbox": [0, 0, 767, 69], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1860, "bbox": [5, 182, 703, 105], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 39717, "bbox": [224, 339, 509, 172], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 49960, "bbox": [31, 121, 641, 140], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 10273, "bbox": [19, 78, 282, 213], "iscrowd": 0}, {"id": 16501992, "category_id": 9, "area": 16046, "bbox": [379, 72, 304, 236], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 8140, "bbox": [315, 262, 187, 51], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1841, "bbox": [244, 100, 50, 58], "iscrowd": 0}, {"id": 19455, "category_id": 19, "area": 2481, "bbox": [185, 96, 60, 64], "iscrowd": 0}, {"id": 16626, "category_id": 19, "area": 3258, "bbox": [112, 93, 73, 72], "iscrowd": 0}, {"id": 1119743, "category_id": 19, "area": 4240, "bbox": [27, 89, 89, 77], "iscrowd": 0}, {"id": 1451007, "category_id": 19, "area": 3880, "bbox": [591, 81, 84, 73], "iscrowd": 0}, {"id": 1775359, "category_id": 19, "area": 3436, "bbox": [512, 86, 78, 71], "iscrowd": 0}, {"id": 18175, "category_id": 19, "area": 2827, "bbox": [445, 90, 67, 66], "iscrowd": 0}, {"id": 1782527, "category_id": 19, "area": 994, "bbox": [410, 95, 35, 61], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4703, "bbox": [464, 237, 116, 170], "iscrowd": 0}, {"id": 2181343, "category_id": 20, "area": 531, "bbox": [434, 226, 23, 37], "iscrowd": 0}, {"id": 17374, "category_id": 20, "area": 4050, "bbox": [266, 234, 97, 166], "iscrowd": 0}, {"id": 17371, "category_id": 20, "area": 7125, "bbox": [343, 259, 101, 181], "iscrowd": 0}, {"id": 23269, "category_id": 20, "area": 8648, "bbox": [0, 280, 50, 230], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2571, "bbox": [323, 104, 51, 53], "iscrowd": 0}, {"id": 3804669, "category_id": 23, "area": 2454, "bbox": [326, 166, 49, 53], "iscrowd": 0}, {"id": 5046783, "category_id": 23, "area": 832, "bbox": [720, 176, 28, 33], "iscrowd": 0}, {"id": 3148534, "category_id": 23, "area": 404, "bbox": [287, 224, 19, 25], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 4671, "bbox": [219, 241, 114, 99], "iscrowd": 0}, {"id": 5055486, "category_id": 25, "area": 9157, "bbox": [44, 273, 151, 130], "iscrowd": 0}, {"id": 4129023, "category_id": 25, "area": 11642, "bbox": [623, 94, 134, 311], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 593, "bbox": [296, 176, 26, 74], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1194, "bbox": [100, 338, 45, 38], "iscrowd": 0}, {"id": 2490141, "category_id": 42, "area": 1215, "bbox": [149, 324, 43, 39], "iscrowd": 0}, {"id": 1376004, "category_id": 42, "area": 732, "bbox": [240, 302, 36, 28], "iscrowd": 0}, {"id": 2421525, "category_id": 42, "area": 819, "bbox": [239, 271, 36, 28], "iscrowd": 0}, {"id": 260608, "category_id": 42, "area": 1070, "bbox": [146, 292, 43, 32], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 3691, "bbox": [371, 196, 75, 66], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 681, "bbox": [101, 311, 37, 25], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 2379, "bbox": [373, 10, 48, 147], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 3202, "bbox": [686, 228, 62, 61], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 3054, "bbox": [665, 315, 76, 61], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 742, "bbox": [36, 278, 43, 26], "iscrowd": 0}, {"id": 16719359, "category_id": 126, "area": 121, "bbox": [689, 195, 15, 11], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 2966, "bbox": [684, 108, 71, 48], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 532, "bbox": [1, 156, 15, 52], "iscrowd": 0}]}, {"image_id": "ADE_val_00001303", "file_name": "ADE_val_00001303.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 15470, "bbox": [27, 0, 247, 239], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12787, "bbox": [2, 216, 272, 83], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 16387, "bbox": [111, 1, 153, 119], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7515, "bbox": [0, 0, 30, 297], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6914, "bbox": [88, 147, 166, 137], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 17818, "bbox": [24, 117, 244, 139], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 3699, "bbox": [142, 209, 68, 83], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 197, "bbox": [197, 163, 31, 9], "iscrowd": 0}, {"id": 13172491, "category_id": 143, "area": 131, "bbox": [172, 154, 23, 8], "iscrowd": 0}, {"id": 11271952, "category_id": 143, "area": 272, "bbox": [117, 152, 40, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00001304", "file_name": "ADE_val_00001304.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 10685, "bbox": [0, 0, 300, 213], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1046, "bbox": [97, 210, 105, 13], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 9266, "bbox": [43, 1, 231, 43], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 9420, "bbox": [43, 0, 231, 89], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 10265, "bbox": [56, 105, 183, 117], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 481, "bbox": [268, 74, 24, 31], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 3559, "bbox": [25, 84, 258, 28], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 7873, "bbox": [0, 74, 99, 149], "iscrowd": 0}, {"id": 14416896, "category_id": 32, "area": 7201, "bbox": [200, 79, 100, 144], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1448, "bbox": [16, 66, 59, 34], "iscrowd": 0}, {"id": 227, "category_id": 67, "area": 281, "bbox": [244, 79, 26, 21], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 369, "bbox": [252, 66, 22, 34], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 106, "bbox": [249, 94, 14, 11], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 1187, "bbox": [75, 123, 71, 28], "iscrowd": 0}, {"id": 13106944, "category_id": 143, "area": 823, "bbox": [152, 116, 53, 20], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 412, "bbox": [123, 91, 17, 34], "iscrowd": 0}, {"id": 13819934, "category_id": 148, "area": 305, "bbox": [167, 86, 15, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00001305", "file_name": "ADE_val_00001305.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 49376, "bbox": [2, 0, 497, 332], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25764, "bbox": [7, 149, 493, 183], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 16024, "bbox": [74, 0, 363, 63], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 3563, "bbox": [72, 65, 380, 39], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 944, "bbox": [149, 84, 25, 56], "iscrowd": 0}, {"id": 13953235, "category_id": 9, "area": 3601, "bbox": [70, 68, 64, 104], "iscrowd": 0}, {"id": 16114899, "category_id": 9, "area": 2722, "bbox": [2, 55, 25, 153], "iscrowd": 0}, {"id": 13884918, "category_id": 9, "area": 982, "bbox": [342, 81, 26, 58], "iscrowd": 0}, {"id": 15916792, "category_id": 9, "area": 4328, "bbox": [384, 62, 69, 104], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 243, "bbox": [184, 136, 29, 18], "iscrowd": 0}, {"id": 3997951, "category_id": 16, "area": 1333, "bbox": [111, 154, 75, 61], "iscrowd": 0}, {"id": 3935231, "category_id": 16, "area": 1877, "bbox": [270, 151, 112, 50], "iscrowd": 0}, {"id": 4138239, "category_id": 16, "area": 7186, "bbox": [0, 206, 102, 126], "iscrowd": 0}, {"id": 5180671, "category_id": 16, "area": 113, "bbox": [311, 138, 9, 14], "iscrowd": 0}, {"id": 3869183, "category_id": 16, "area": 17379, "bbox": [295, 200, 204, 111], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 183, "bbox": [262, 128, 29, 8], "iscrowd": 0}, {"id": 674013, "category_id": 20, "area": 163, "bbox": [315, 126, 20, 12], "iscrowd": 0}, {"id": 13032, "category_id": 20, "area": 325, "bbox": [321, 133, 30, 17], "iscrowd": 0}, {"id": 1333706, "category_id": 20, "area": 311, "bbox": [261, 136, 51, 19], "iscrowd": 0}, {"id": 82878, "category_id": 20, "area": 1697, "bbox": [334, 139, 56, 63], "iscrowd": 0}, {"id": 2110906, "category_id": 20, "area": 710, "bbox": [350, 156, 89, 45], "iscrowd": 0}, {"id": 76000, "category_id": 20, "area": 1321, "bbox": [261, 155, 75, 69], "iscrowd": 0}, {"id": 1588180, "category_id": 20, "area": 2541, "bbox": [397, 166, 83, 38], "iscrowd": 0}, {"id": 1328103, "category_id": 20, "area": 230, "bbox": [182, 128, 24, 11], "iscrowd": 0}, {"id": 17081, "category_id": 20, "area": 561, "bbox": [145, 139, 37, 17], "iscrowd": 0}, {"id": 802492, "category_id": 20, "area": 2541, "bbox": [156, 145, 65, 95], "iscrowd": 0}, {"id": 1717724, "category_id": 20, "area": 11781, "bbox": [233, 180, 147, 152], "iscrowd": 0}, {"id": 416976, "category_id": 20, "area": 3986, "bbox": [52, 163, 102, 133], "iscrowd": 0}, {"id": 145592, "category_id": 20, "area": 506, "bbox": [271, 140, 40, 16], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 1594, "bbox": [234, 98, 40, 68], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 239, "bbox": [213, 129, 16, 19], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 81, "bbox": [194, 28, 16, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00001306", "file_name": "ADE_val_00001306.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 20850, "bbox": [2, 63, 234, 168], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17997, "bbox": [2, 216, 234, 136], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 18630, "bbox": [2, 1, 234, 86], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1271, "bbox": [213, 107, 18, 81], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6053, "bbox": [47, 182, 146, 117], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 534, "bbox": [44, 172, 24, 46], "iscrowd": 0}, {"id": 1386696, "category_id": 20, "area": 942, "bbox": [27, 176, 30, 62], "iscrowd": 0}, {"id": 542408, "category_id": 20, "area": 240, "bbox": [157, 168, 14, 28], "iscrowd": 0}, {"id": 211414, "category_id": 20, "area": 468, "bbox": [164, 172, 20, 38], "iscrowd": 0}, {"id": 1914293, "category_id": 20, "area": 974, "bbox": [176, 174, 29, 55], "iscrowd": 0}, {"id": 346853, "category_id": 20, "area": 5458, "bbox": [143, 183, 92, 137], "iscrowd": 0}, {"id": 1332447, "category_id": 20, "area": 338, "bbox": [57, 167, 17, 39], "iscrowd": 0}, {"id": 14542, "category_id": 20, "area": 5353, "bbox": [2, 184, 87, 136], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 1199, "bbox": [88, 45, 62, 64], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 318, "bbox": [62, 211, 34, 11], "iscrowd": 0}, {"id": 11534080, "category_id": 143, "area": 302, "bbox": [145, 211, 32, 13], "iscrowd": 0}, {"id": 10157824, "category_id": 143, "area": 163, "bbox": [165, 224, 23, 10], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 196, "bbox": [92, 198, 13, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00001307", "file_name": "ADE_val_00001307.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 58213, "bbox": [1, 86, 759, 382], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 24463, "bbox": [2, 349, 760, 163], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 111479, "bbox": [2, 1, 758, 191], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1220, "bbox": [651, 285, 88, 81], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 24467, "bbox": [3, 163, 95, 292], "iscrowd": 0}, {"id": 16566522, "category_id": 9, "area": 12165, "bbox": [201, 178, 116, 159], "iscrowd": 0}, {"id": 13762515, "category_id": 9, "area": 6795, "bbox": [349, 198, 75, 113], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 36036, "bbox": [143, 328, 488, 184], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3161, "bbox": [150, 289, 76, 58], "iscrowd": 0}, {"id": 15069, "category_id": 20, "area": 16157, "bbox": [175, 325, 158, 187], "iscrowd": 0}, {"id": 83663, "category_id": 20, "area": 12295, "bbox": [84, 305, 120, 207], "iscrowd": 0}, {"id": 804293, "category_id": 20, "area": 5681, "bbox": [457, 300, 93, 79], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3884, "bbox": [129, 189, 55, 74], "iscrowd": 0}, {"id": 5181694, "category_id": 23, "area": 5472, "bbox": [652, 215, 72, 79], "iscrowd": 0}, {"id": 3739364, "category_id": 23, "area": 370, "bbox": [538, 204, 24, 17], "iscrowd": 0}, {"id": 1975278, "category_id": 23, "area": 208, "bbox": [573, 204, 16, 13], "iscrowd": 0}, {"id": 2950399, "category_id": 23, "area": 419, "bbox": [605, 198, 26, 19], "iscrowd": 0}, {"id": 4719101, "category_id": 23, "area": 284, "bbox": [542, 225, 20, 15], "iscrowd": 0}, {"id": 1972715, "category_id": 23, "area": 195, "bbox": [563, 228, 14, 15], "iscrowd": 0}, {"id": 3545327, "category_id": 23, "area": 217, "bbox": [601, 227, 15, 16], "iscrowd": 0}, {"id": 2235903, "category_id": 23, "area": 173, "bbox": [622, 225, 12, 17], "iscrowd": 0}, {"id": 2753535, "category_id": 23, "area": 155, "bbox": [539, 256, 14, 12], "iscrowd": 0}, {"id": 4325631, "category_id": 23, "area": 200, "bbox": [594, 252, 20, 17], "iscrowd": 0}, {"id": 3670249, "category_id": 23, "area": 113, "bbox": [605, 257, 10, 13], "iscrowd": 0}, {"id": 4194539, "category_id": 23, "area": 142, "bbox": [537, 277, 11, 13], "iscrowd": 0}, {"id": 2498559, "category_id": 23, "area": 154, "bbox": [553, 282, 14, 11], "iscrowd": 0}, {"id": 3737599, "category_id": 23, "area": 288, "bbox": [591, 279, 20, 17], "iscrowd": 0}, {"id": 3735807, "category_id": 23, "area": 194, "bbox": [616, 282, 17, 13], "iscrowd": 0}, {"id": 3804641, "category_id": 23, "area": 224, "bbox": [558, 300, 14, 16], "iscrowd": 0}, {"id": 2364927, "category_id": 23, "area": 161, "bbox": [594, 308, 16, 11], "iscrowd": 0}, {"id": 3866865, "category_id": 23, "area": 128, "bbox": [575, 308, 14, 10], "iscrowd": 0}, {"id": 4195564, "category_id": 23, "area": 176, "bbox": [571, 274, 16, 11], "iscrowd": 0}, {"id": 4718847, "category_id": 23, "area": 183, "bbox": [579, 229, 14, 14], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 16888, "bbox": [451, 189, 192, 134], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 12023, "bbox": [545, 306, 168, 152], "iscrowd": 0}, {"id": 12251684, "category_id": 31, "area": 4641, "bbox": [374, 290, 87, 66], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 225, "bbox": [428, 265, 19, 34], "iscrowd": 0}, {"id": 2228208, "category_id": 37, "area": 3612, "bbox": [314, 279, 61, 80], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 6006, "bbox": [208, 29, 143, 204], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 134, "bbox": [490, 266, 13, 18], "iscrowd": 0}, {"id": 2096905, "category_id": 99, "area": 191, "bbox": [480, 271, 20, 20], "iscrowd": 0}, {"id": 65281, "category_id": 99, "area": 180, "bbox": [511, 274, 19, 17], "iscrowd": 0}, {"id": 327443, "category_id": 99, "area": 126, "bbox": [505, 254, 22, 7], "iscrowd": 0}, {"id": 2155019, "category_id": 99, "area": 87, "bbox": [490, 242, 12, 14], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 2069, "bbox": [257, 332, 125, 58], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 1507, "bbox": [505, 155, 90, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00001308", "file_name": "ADE_val_00001308.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 94353, "bbox": [1, 1, 765, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 18084, "bbox": [55, 410, 711, 102], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 57525, "bbox": [54, 1, 712, 106], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6811, "bbox": [60, 236, 365, 186], "iscrowd": 0}, {"id": 28927, "category_id": 100, "area": 48490, "bbox": [560, 130, 200, 348], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 16086, "bbox": [58, 98, 68, 342], "iscrowd": 0}, {"id": 16776697, "category_id": 9, "area": 29815, "bbox": [181, 114, 147, 233], "iscrowd": 0}, {"id": 13886412, "category_id": 9, "area": 18692, "bbox": [384, 105, 114, 245], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 16513, "bbox": [158, 336, 398, 176], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1764, "bbox": [394, 306, 50, 43], "iscrowd": 0}, {"id": 1857200, "category_id": 20, "area": 2345, "bbox": [459, 311, 64, 43], "iscrowd": 0}, {"id": 14023, "category_id": 20, "area": 725, "bbox": [225, 306, 52, 26], "iscrowd": 0}, {"id": 21975, "category_id": 20, "area": 12002, "bbox": [136, 306, 90, 190], "iscrowd": 0}, {"id": 13487, "category_id": 20, "area": 12017, "bbox": [216, 323, 97, 189], "iscrowd": 0}, {"id": 1991107, "category_id": 20, "area": 6086, "bbox": [586, 323, 55, 189], "iscrowd": 0}, {"id": 212409, "category_id": 20, "area": 14909, "bbox": [451, 328, 157, 184], "iscrowd": 0}, {"id": 19178, "category_id": 20, "area": 17053, "bbox": [296, 326, 140, 186], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 312, "bbox": [507, 15, 35, 12], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 12706, "bbox": [316, 11, 117, 248], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 2311, "bbox": [57, 400, 53, 57], "iscrowd": 0}, {"id": 16580847, "category_id": 126, "area": 872, "bbox": [366, 326, 35, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00001309", "file_name": "ADE_val_00001309.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 72043, "bbox": [2, 1, 582, 438], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 20014, "bbox": [2, 287, 581, 225], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 22517, "bbox": [38, 1, 546, 140], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 64723, "bbox": [54, 289, 529, 222], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 878, "bbox": [150, 146, 17, 70], "iscrowd": 0}, {"id": 14342862, "category_id": 9, "area": 3211, "bbox": [218, 76, 69, 59], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 9292, "bbox": [220, 127, 68, 169], "iscrowd": 0}, {"id": 1507073, "category_id": 15, "area": 17274, "bbox": [428, 110, 120, 222], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 11203, "bbox": [324, 257, 153, 217], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 18163, "bbox": [361, 48, 223, 295], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 808, "bbox": [348, 226, 29, 45], "iscrowd": 0}, {"id": 275151, "category_id": 20, "area": 1013, "bbox": [316, 231, 28, 49], "iscrowd": 0}, {"id": 2122217, "category_id": 20, "area": 1048, "bbox": [268, 235, 41, 40], "iscrowd": 0}, {"id": 23765, "category_id": 20, "area": 1396, "bbox": [438, 226, 44, 41], "iscrowd": 0}, {"id": 1063141, "category_id": 20, "area": 2280, "bbox": [487, 246, 26, 165], "iscrowd": 0}, {"id": 1323479, "category_id": 20, "area": 5412, "bbox": [387, 256, 114, 209], "iscrowd": 0}, {"id": 1977576, "category_id": 20, "area": 1215, "bbox": [504, 237, 28, 146], "iscrowd": 0}, {"id": 1137864, "category_id": 20, "area": 15757, "bbox": [245, 262, 138, 249], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2077, "bbox": [41, 168, 31, 75], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2425, "bbox": [119, 31, 57, 79], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 7601, "bbox": [38, 233, 130, 76], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 158, "bbox": [341, 33, 20, 10], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 5291, "bbox": [358, 2, 100, 154], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 437, "bbox": [133, 194, 17, 36], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 174, "bbox": [407, 299, 41, 12], "iscrowd": 0}, {"id": 10877696, "category_id": 143, "area": 246, "bbox": [410, 296, 34, 11], "iscrowd": 0}, {"id": 12640512, "category_id": 143, "area": 153, "bbox": [328, 302, 34, 9], "iscrowd": 0}, {"id": 11927300, "category_id": 143, "area": 233, "bbox": [328, 296, 30, 10], "iscrowd": 0}, {"id": 12648192, "category_id": 143, "area": 168, "bbox": [437, 284, 35, 11], "iscrowd": 0}, {"id": 12254976, "category_id": 143, "area": 201, "bbox": [441, 281, 30, 10], "iscrowd": 0}, {"id": 12383768, "category_id": 143, "area": 63, "bbox": [376, 303, 23, 7], "iscrowd": 0}, {"id": 10682140, "category_id": 143, "area": 31, "bbox": [405, 290, 18, 5], "iscrowd": 0}]}, {"image_id": "ADE_val_00001310", "file_name": "ADE_val_00001310.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 47026, "bbox": [1, 0, 510, 318], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 58597, "bbox": [0, 265, 511, 254], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 17510, "bbox": [410, 15, 101, 233], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 8579, "bbox": [221, 76, 78, 151], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 613, "bbox": [93, 201, 68, 24], "iscrowd": 0}, {"id": 6684927, "category_id": 16, "area": 34769, "bbox": [148, 188, 321, 325], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 16099, "bbox": [122, 204, 181, 313], "iscrowd": 0}, {"id": 2181597, "category_id": 20, "area": 12334, "bbox": [374, 177, 134, 280], "iscrowd": 0}, {"id": 1912278, "category_id": 20, "area": 3128, "bbox": [162, 158, 64, 72], "iscrowd": 0}, {"id": 24790, "category_id": 20, "area": 1919, "bbox": [370, 150, 70, 43], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 15960, "bbox": [1, 1, 86, 199], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 17638, "bbox": [1, 189, 151, 213], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1552, "bbox": [299, 156, 37, 99], "iscrowd": 0}, {"id": 2357501, "category_id": 37, "area": 903, "bbox": [370, 142, 33, 78], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3431, "bbox": [389, 290, 102, 39], "iscrowd": 0}, {"id": 55791, "category_id": 40, "area": 5504, "bbox": [150, 328, 145, 56], "iscrowd": 0}, {"id": 56319, "category_id": 40, "area": 2145, "bbox": [30, 232, 93, 42], "iscrowd": 0}, {"id": 1427955, "category_id": 40, "area": 1794, "bbox": [13, 253, 64, 39], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 281, "bbox": [331, 233, 20, 17], "iscrowd": 0}, {"id": 1766667, "category_id": 42, "area": 131, "bbox": [346, 232, 14, 16], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 2209, "bbox": [349, 95, 61, 74], "iscrowd": 0}, {"id": 1769727, "category_id": 67, "area": 2615, "bbox": [297, 84, 64, 89], "iscrowd": 0}, {"id": 987647, "category_id": 67, "area": 1922, "bbox": [102, 120, 58, 60], "iscrowd": 0}, {"id": 6143, "category_id": 67, "area": 211, "bbox": [243, 129, 35, 37], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 413, "bbox": [128, 179, 18, 27], "iscrowd": 0}, {"id": 14611998, "category_id": 136, "area": 388, "bbox": [239, 165, 23, 25], "iscrowd": 0}, {"id": 12975886, "category_id": 136, "area": 695, "bbox": [337, 173, 25, 45], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 1893, "bbox": [223, 4, 40, 58], "iscrowd": 0}, {"id": 13565719, "category_id": 143, "area": 869, "bbox": [277, 217, 88, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00001311", "file_name": "ADE_val_00001311.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 47190, "bbox": [2, 1, 765, 342], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 27065, "bbox": [2, 360, 766, 152], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 65368, "bbox": [2, 1, 721, 120], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 893, "bbox": [27, 71, 62, 55], "iscrowd": 0}, {"id": 28927, "category_id": 100, "area": 82015, "bbox": [2, 124, 581, 311], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6020, "bbox": [622, 136, 68, 183], "iscrowd": 0}, {"id": 14862591, "category_id": 9, "area": 6449, "bbox": [721, 110, 46, 232], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 47683, "bbox": [180, 330, 408, 181], "iscrowd": 0}, {"id": 7012607, "category_id": 16, "area": 141, "bbox": [143, 334, 28, 10], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 3853, "bbox": [623, 138, 65, 70], "iscrowd": 0}, {"id": 1068543, "category_id": 19, "area": 3343, "bbox": [717, 117, 49, 90], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2658, "bbox": [602, 285, 79, 50], "iscrowd": 0}, {"id": 875218, "category_id": 20, "area": 1951, "bbox": [516, 305, 38, 80], "iscrowd": 0}, {"id": 13021, "category_id": 20, "area": 4318, "bbox": [551, 312, 58, 110], "iscrowd": 0}, {"id": 1462244, "category_id": 20, "area": 11271, "bbox": [593, 328, 102, 184], "iscrowd": 0}, {"id": 1200314, "category_id": 20, "area": 10957, "bbox": [379, 409, 257, 103], "iscrowd": 0}, {"id": 22747, "category_id": 20, "area": 1348, "bbox": [252, 301, 31, 71], "iscrowd": 0}, {"id": 1982680, "category_id": 20, "area": 3620, "bbox": [210, 309, 54, 110], "iscrowd": 0}, {"id": 12477, "category_id": 20, "area": 8437, "bbox": [135, 325, 85, 185], "iscrowd": 0}, {"id": 2120406, "category_id": 20, "area": 945, "bbox": [111, 324, 33, 84], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 5312, "bbox": [106, 124, 70, 93], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1066, "bbox": [681, 247, 42, 60], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 348, "bbox": [284, 270, 19, 22], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 10822, "bbox": [104, 228, 95, 150], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 4157, "bbox": [673, 336, 70, 98], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1150, "bbox": [160, 164, 35, 50], "iscrowd": 0}, {"id": 254, "category_id": 67, "area": 4869, "bbox": [348, 261, 124, 81], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 159, "bbox": [173, 82, 21, 11], "iscrowd": 0}, {"id": 48127, "category_id": 83, "area": 141, "bbox": [499, 91, 19, 9], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 11662, "bbox": [336, 2, 158, 183], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 265, "bbox": [73, 266, 11, 31], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 370, "bbox": [166, 212, 29, 15], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 173, "bbox": [41, 117, 16, 16], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 257, "bbox": [479, 270, 13, 22], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 597, "bbox": [54, 112, 30, 31], "iscrowd": 0}, {"id": 1179432, "category_id": 138, "area": 469, "bbox": [537, 264, 30, 26], "iscrowd": 0}, {"id": 2031429, "category_id": 138, "area": 423, "bbox": [218, 267, 32, 23], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 853, "bbox": [495, 255, 35, 33], "iscrowd": 0}, {"id": 11466775, "category_id": 143, "area": 712, "bbox": [252, 256, 33, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00001312", "file_name": "ADE_val_00001312.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 131862, "bbox": [1, 5, 764, 423], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 85904, "bbox": [60, 335, 704, 176], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 52584, "bbox": [1, 1, 764, 112], "iscrowd": 0}, {"id": 28927, "category_id": 100, "area": 7549, "bbox": [1, 380, 70, 132], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 9169, "bbox": [216, 149, 94, 123], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 14989, "bbox": [312, 282, 261, 206], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 14983, "bbox": [187, 100, 151, 254], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1001, "bbox": [446, 261, 40, 36], "iscrowd": 0}, {"id": 24751, "category_id": 20, "area": 3629, "bbox": [457, 268, 98, 161], "iscrowd": 0}, {"id": 19133, "category_id": 20, "area": 3910, "bbox": [280, 269, 63, 159], "iscrowd": 0}, {"id": 1136825, "category_id": 20, "area": 7228, "bbox": [323, 283, 103, 198], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 5032, "bbox": [72, 120, 81, 74], "iscrowd": 0}, {"id": 4587775, "category_id": 23, "area": 1925, "bbox": [365, 158, 41, 50], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 13903, "bbox": [503, 141, 128, 123], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 20777, "bbox": [1, 1, 112, 459], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 2037, "bbox": [385, 218, 71, 49], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 4750, "bbox": [356, 6, 121, 128], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 435, "bbox": [461, 168, 28, 36], "iscrowd": 0}, {"id": 16598016, "category_id": 135, "area": 947, "bbox": [637, 144, 38, 52], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 866, "bbox": [407, 265, 27, 39], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 1623, "bbox": [7, 351, 37, 80], "iscrowd": 0}]}, {"image_id": "ADE_val_00001313", "file_name": "ADE_val_00001313.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 36297, "bbox": [2, 0, 253, 254], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 580, "bbox": [2, 237, 94, 19], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4789, "bbox": [39, 0, 217, 41], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2308, "bbox": [112, 165, 76, 61], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 6258, "bbox": [188, 84, 56, 129], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3690, "bbox": [69, 210, 187, 46], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1208, "bbox": [150, 177, 35, 45], "iscrowd": 0}, {"id": 736967, "category_id": 20, "area": 1999, "bbox": [83, 182, 46, 56], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 3058, "bbox": [23, 144, 84, 74], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1328, "bbox": [46, 38, 42, 41], "iscrowd": 0}, {"id": 655118, "category_id": 138, "area": 1592, "bbox": [154, 224, 97, 31], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 47, "bbox": [162, 231, 21, 6], "iscrowd": 0}, {"id": 11664896, "category_id": 143, "area": 90, "bbox": [174, 239, 22, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00001314", "file_name": "ADE_val_00001314.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 23127, "bbox": [0, 0, 255, 202], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3893, "bbox": [0, 190, 255, 66], "iscrowd": 0}, {"id": 28927, "category_id": 100, "area": 4422, "bbox": [77, 112, 145, 62], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 410, "bbox": [224, 80, 25, 17], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2778, "bbox": [21, 39, 33, 103], "iscrowd": 0}, {"id": 16772559, "category_id": 9, "area": 1008, "bbox": [0, 36, 11, 111], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 14506, "bbox": [3, 149, 219, 106], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 4802, "bbox": [0, 0, 79, 145], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1782, "bbox": [189, 202, 67, 54], "iscrowd": 0}, {"id": 996020, "category_id": 20, "area": 1166, "bbox": [27, 120, 32, 51], "iscrowd": 0}, {"id": 14046, "category_id": 20, "area": 955, "bbox": [129, 132, 46, 28], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 2197, "bbox": [130, 44, 92, 32], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1394, "bbox": [87, 47, 28, 71], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 242, "bbox": [27, 182, 26, 10], "iscrowd": 0}, {"id": 64262, "category_id": 42, "area": 303, "bbox": [57, 169, 20, 23], "iscrowd": 0}, {"id": 3211024, "category_id": 42, "area": 165, "bbox": [192, 121, 26, 10], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 218, "bbox": [113, 189, 35, 13], "iscrowd": 0}, {"id": 625919, "category_id": 68, "area": 201, "bbox": [160, 164, 27, 13], "iscrowd": 0}, {"id": 891391, "category_id": 68, "area": 171, "bbox": [122, 175, 29, 11], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 313, "bbox": [149, 99, 19, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00001315", "file_name": "ADE_val_00001315.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 200802, "bbox": [2, 1, 766, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9489, "bbox": [138, 436, 630, 76], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 13119, "bbox": [259, 1, 505, 78], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 33462, "bbox": [176, 96, 178, 232], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 18263, "bbox": [324, 333, 281, 179], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 5776, "bbox": [344, 124, 39, 218], "iscrowd": 0}, {"id": 599272, "category_id": 19, "area": 29071, "bbox": [109, 43, 72, 450], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3141, "bbox": [428, 297, 74, 53], "iscrowd": 0}, {"id": 25052, "category_id": 20, "area": 11255, "bbox": [504, 322, 173, 189], "iscrowd": 0}, {"id": 1270716, "category_id": 20, "area": 13830, "bbox": [184, 325, 115, 186], "iscrowd": 0}, {"id": 15065, "category_id": 20, "area": 19206, "bbox": [263, 333, 179, 177], "iscrowd": 0}, {"id": 547555, "category_id": 20, "area": 2978, "bbox": [265, 297, 77, 55], "iscrowd": 0}, {"id": 15037, "category_id": 20, "area": 4993, "bbox": [509, 301, 98, 65], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 13458, "bbox": [372, 2, 179, 128], "iscrowd": 0}]}, {"image_id": "ADE_val_00001316", "file_name": "ADE_val_00001316.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 15908, "bbox": [0, 0, 256, 197], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14186, "bbox": [2, 182, 254, 73], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 132, "bbox": [12, 1, 84, 3], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 7450, "bbox": [32, 14, 65, 119], "iscrowd": 0}, {"id": 16777166, "category_id": 9, "area": 6983, "bbox": [103, 12, 61, 120], "iscrowd": 0}, {"id": 14614474, "category_id": 9, "area": 7998, "bbox": [170, 11, 67, 123], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3084, "bbox": [51, 139, 157, 84], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2558, "bbox": [4, 113, 61, 105], "iscrowd": 0}, {"id": 1452243, "category_id": 20, "area": 338, "bbox": [132, 108, 37, 27], "iscrowd": 0}, {"id": 940719, "category_id": 20, "area": 2036, "bbox": [188, 113, 53, 113], "iscrowd": 0}, {"id": 1072320, "category_id": 20, "area": 3991, "bbox": [88, 122, 54, 120], "iscrowd": 0}]}, {"image_id": "ADE_val_00001317", "file_name": "ADE_val_00001317.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 12394, "bbox": [0, 22, 255, 141], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4631, "bbox": [0, 161, 255, 94], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6579, "bbox": [0, 0, 256, 48], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 1267, "bbox": [219, 104, 37, 53], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 963, "bbox": [1, 58, 23, 42], "iscrowd": 0}, {"id": 13158642, "category_id": 9, "area": 1070, "bbox": [173, 60, 22, 54], "iscrowd": 0}, {"id": 16764916, "category_id": 9, "area": 492, "bbox": [215, 67, 21, 32], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2353, "bbox": [33, 48, 61, 46], "iscrowd": 0}, {"id": 16715981, "category_id": 11, "area": 1661, "bbox": [0, 114, 63, 55], "iscrowd": 0}, {"id": 16720070, "category_id": 11, "area": 589, "bbox": [63, 113, 57, 21], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 8207, "bbox": [32, 173, 224, 82], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2101, "bbox": [0, 180, 48, 74], "iscrowd": 0}, {"id": 1859543, "category_id": 20, "area": 2534, "bbox": [51, 133, 66, 51], "iscrowd": 0}, {"id": 13507, "category_id": 20, "area": 667, "bbox": [201, 104, 22, 67], "iscrowd": 0}, {"id": 23777, "category_id": 20, "area": 1387, "bbox": [87, 213, 49, 41], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 488, "bbox": [146, 62, 19, 27], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 545, "bbox": [204, 82, 37, 61], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1655, "bbox": [84, 34, 32, 99], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 5643, "bbox": [81, 113, 122, 69], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 3010, "bbox": [155, 1, 92, 58], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1237, "bbox": [170, 182, 54, 49], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 1314, "bbox": [13, 122, 32, 45], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 205, "bbox": [76, 79, 18, 14], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 478, "bbox": [142, 231, 39, 17], "iscrowd": 0}, {"id": 13106958, "category_id": 143, "area": 253, "bbox": [90, 177, 35, 9], "iscrowd": 0}, {"id": 10543372, "category_id": 143, "area": 125, "bbox": [73, 190, 20, 9], "iscrowd": 0}, {"id": 11992832, "category_id": 143, "area": 65, "bbox": [65, 186, 20, 5], "iscrowd": 0}, {"id": 13754880, "category_id": 143, "area": 98, "bbox": [126, 213, 26, 8], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 236, "bbox": [130, 181, 14, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001318", "file_name": "ADE_val_00001318.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 105528, "bbox": [2, 1, 638, 426], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 57722, "bbox": [18, 304, 622, 124], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 14159, "bbox": [19, 1, 394, 113], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5114, "bbox": [146, 84, 50, 119], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 25850, "bbox": [425, 27, 204, 162], "iscrowd": 0}, {"id": 16711894, "category_id": 11, "area": 14687, "bbox": [370, 73, 78, 257], "iscrowd": 0}, {"id": 16060915, "category_id": 11, "area": 11058, "bbox": [410, 244, 215, 109], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 8823, "bbox": [98, 239, 258, 154], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 595, "bbox": [257, 224, 33, 25], "iscrowd": 0}, {"id": 18356, "category_id": 20, "area": 2714, "bbox": [275, 224, 68, 119], "iscrowd": 0}, {"id": 13272, "category_id": 20, "area": 1547, "bbox": [90, 223, 47, 104], "iscrowd": 0}, {"id": 21216, "category_id": 20, "area": 2220, "bbox": [119, 225, 42, 130], "iscrowd": 0}, {"id": 23241, "category_id": 20, "area": 5320, "bbox": [144, 227, 120, 159], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 961, "bbox": [186, 189, 58, 33], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 286, "bbox": [526, 146, 29, 12], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 70, "bbox": [439, 61, 15, 7], "iscrowd": 0}, {"id": 1615103, "category_id": 83, "area": 135, "bbox": [576, 23, 19, 9], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 4133, "bbox": [171, 5, 86, 103], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 2880, "bbox": [420, 278, 54, 59], "iscrowd": 0}, {"id": 1611519, "category_id": 98, "area": 5061, "bbox": [549, 289, 76, 76], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 273, "bbox": [510, 131, 12, 29], "iscrowd": 0}, {"id": 11534096, "category_id": 136, "area": 862, "bbox": [192, 205, 31, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00001319", "file_name": "ADE_val_00001319.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 16970, "bbox": [2, 37, 254, 181], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2816, "bbox": [0, 172, 256, 84], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 14531, "bbox": [1, 1, 255, 74], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1788, "bbox": [84, 90, 63, 43], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 7996, "bbox": [18, 189, 237, 67], "iscrowd": 0}, {"id": 28927, "category_id": 100, "area": 861, "bbox": [41, 145, 31, 41], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4010, "bbox": [83, 151, 119, 88], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 262, "bbox": [164, 141, 19, 19], "iscrowd": 0}, {"id": 15069, "category_id": 20, "area": 3548, "bbox": [144, 148, 68, 106], "iscrowd": 0}, {"id": 1193148, "category_id": 20, "area": 2191, "bbox": [80, 144, 57, 94], "iscrowd": 0}, {"id": 798425, "category_id": 20, "area": 229, "bbox": [147, 139, 14, 19], "iscrowd": 0}, {"id": 20449, "category_id": 20, "area": 901, "bbox": [69, 142, 18, 76], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2168, "bbox": [169, 86, 43, 57], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 4338, "bbox": [16, 78, 103, 63], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 695, "bbox": [103, 126, 39, 26], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 1039, "bbox": [98, 35, 45, 69], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 146, "bbox": [119, 149, 15, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001320", "file_name": "ADE_val_00001320.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 105388, "bbox": [2, 1, 680, 437], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 76224, "bbox": [2, 211, 678, 301], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 487, "bbox": [198, 101, 65, 42], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 26871, "bbox": [546, 7, 137, 262], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 53932, "bbox": [167, 140, 437, 371], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4805, "bbox": [358, 103, 90, 77], "iscrowd": 0}, {"id": 23473, "category_id": 20, "area": 7166, "bbox": [455, 129, 117, 92], "iscrowd": 0}, {"id": 287978, "category_id": 20, "area": 6485, "bbox": [429, 293, 111, 195], "iscrowd": 0}, {"id": 17892, "category_id": 20, "area": 17417, "bbox": [99, 142, 120, 334], "iscrowd": 0}, {"id": 12220, "category_id": 20, "area": 35582, "bbox": [190, 168, 258, 344], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 4683, "bbox": [198, 25, 62, 81], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 1093, "bbox": [221, 120, 39, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00001321", "file_name": "ADE_val_00001321.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 66275, "bbox": [0, 0, 681, 329], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17934, "bbox": [0, 228, 681, 283], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 82982, "bbox": [31, 124, 642, 388], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 45868, "bbox": [396, 205, 284, 305], "iscrowd": 0}, {"id": 1991904, "category_id": 20, "area": 42809, "bbox": [0, 62, 333, 441], "iscrowd": 0}, {"id": 1522625, "category_id": 20, "area": 12792, "bbox": [505, 43, 141, 218], "iscrowd": 0}, {"id": 348362, "category_id": 20, "area": 11886, "bbox": [181, 49, 113, 146], "iscrowd": 0}, {"id": 14295, "category_id": 20, "area": 11010, "bbox": [529, 251, 139, 97], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 22438, "bbox": [1, 226, 342, 285], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 8304, "bbox": [330, 0, 254, 128], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 914, "bbox": [341, 192, 74, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00001322", "file_name": "ADE_val_00001322.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 219653, "bbox": [1, 1, 682, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 31736, "bbox": [64, 368, 563, 144], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 19393, "bbox": [185, 393, 346, 118], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 7661, "bbox": [263, 300, 201, 212], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 5706, "bbox": [558, 72, 108, 67], "iscrowd": 0}, {"id": 11775, "category_id": 19, "area": 30061, "bbox": [535, 127, 127, 334], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4399, "bbox": [247, 295, 104, 192], "iscrowd": 0}, {"id": 1723334, "category_id": 20, "area": 13191, "bbox": [317, 334, 130, 177], "iscrowd": 0}, {"id": 1261020, "category_id": 20, "area": 1975, "bbox": [286, 265, 68, 39], "iscrowd": 0}, {"id": 673769, "category_id": 20, "area": 1807, "bbox": [418, 287, 49, 65], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2506, "bbox": [289, 1, 86, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00001323", "file_name": "ADE_val_00001323.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 114267, "bbox": [0, 38, 683, 369], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17245, "bbox": [203, 325, 480, 186], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 43739, "bbox": [0, 0, 683, 135], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 312, "bbox": [360, 117, 47, 10], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 26588, "bbox": [235, 405, 445, 105], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 9443, "bbox": [1, 323, 136, 132], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 16591, "bbox": [337, 128, 120, 176], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2838, "bbox": [602, 148, 17, 225], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 11533, "bbox": [92, 437, 248, 74], "iscrowd": 0}, {"id": 3539199, "category_id": 16, "area": 10231, "bbox": [294, 300, 315, 68], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 5915, "bbox": [603, 131, 79, 140], "iscrowd": 0}, {"id": 16639, "category_id": 19, "area": 2021, "bbox": [604, 132, 77, 33], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 6420, "bbox": [480, 252, 113, 210], "iscrowd": 0}, {"id": 18917, "category_id": 20, "area": 6935, "bbox": [271, 275, 103, 174], "iscrowd": 0}, {"id": 735452, "category_id": 20, "area": 14236, "bbox": [345, 276, 151, 233], "iscrowd": 0}, {"id": 1529018, "category_id": 20, "area": 2556, "bbox": [440, 250, 65, 57], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2457, "bbox": [141, 152, 78, 34], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 22426, "bbox": [0, 320, 216, 192], "iscrowd": 0}, {"id": 16732445, "category_id": 24, "area": 4928, "bbox": [615, 244, 68, 84], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 13804, "bbox": [156, 203, 133, 279], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 8816, "bbox": [401, 9, 153, 150], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 209, "bbox": [412, 253, 17, 15], "iscrowd": 0}, {"id": 11141369, "category_id": 120, "area": 154, "bbox": [394, 257, 18, 11], "iscrowd": 0}, {"id": 8981228, "category_id": 120, "area": 179, "bbox": [373, 256, 18, 13], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 660, "bbox": [359, 269, 78, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00001324", "file_name": "ADE_val_00001324.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 23280, "bbox": [0, 0, 319, 231], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7801, "bbox": [25, 167, 293, 73], "iscrowd": 0}, {"id": 28927, "category_id": 100, "area": 13340, "bbox": [190, 16, 99, 201], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4556, "bbox": [55, 40, 89, 112], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6505, "bbox": [78, 132, 162, 108], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 3585, "bbox": [0, 40, 37, 200], "iscrowd": 0}, {"id": 2043361, "category_id": 19, "area": 3400, "bbox": [41, 40, 56, 110], "iscrowd": 0}, {"id": 598778, "category_id": 19, "area": 2645, "bbox": [102, 41, 55, 99], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 686, "bbox": [161, 116, 29, 35], "iscrowd": 0}, {"id": 1859510, "category_id": 20, "area": 939, "bbox": [189, 126, 35, 40], "iscrowd": 0}, {"id": 1069755, "category_id": 20, "area": 715, "bbox": [66, 123, 27, 103], "iscrowd": 0}, {"id": 212435, "category_id": 20, "area": 1720, "bbox": [79, 139, 57, 101], "iscrowd": 0}, {"id": 14768, "category_id": 20, "area": 1619, "bbox": [16, 109, 49, 78], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1290, "bbox": [105, 0, 69, 39], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 372, "bbox": [215, 110, 39, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00001325", "file_name": "ADE_val_00001325.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 55592, "bbox": [2, 1, 460, 344], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 31868, "bbox": [2, 236, 565, 152], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5333, "bbox": [148, 0, 131, 84], "iscrowd": 0}, {"id": 7340287, "category_id": 112, "area": 2132, "bbox": [0, 273, 31, 85], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 13745, "bbox": [159, 159, 147, 125], "iscrowd": 0}]}, {"image_id": "ADE_val_00001326", "file_name": "ADE_val_00001326.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 10513, "bbox": [0, 0, 249, 102], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 6294, "bbox": [0, 249, 249, 36], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 17677, "bbox": [0, 29, 249, 223], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 36326, "bbox": [26, 31, 203, 240], "iscrowd": 0}]}, {"image_id": "ADE_val_00001327", "file_name": "ADE_val_00001327.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 26413, "bbox": [0, 0, 300, 399], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10894, "bbox": [67, 322, 210, 77], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 25802, "bbox": [69, 148, 150, 179], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 18692, "bbox": [2, 48, 283, 101], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 14411, "bbox": [10, 147, 67, 252], "iscrowd": 0}, {"id": 3407373, "category_id": 15, "area": 12603, "bbox": [216, 146, 54, 253], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1967, "bbox": [270, 321, 30, 77], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 998, "bbox": [273, 270, 27, 50], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 6048, "bbox": [80, 0, 144, 141], "iscrowd": 0}]}, {"image_id": "ADE_val_00001328", "file_name": "ADE_val_00001328.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14117, "bbox": [0, 227, 255, 156], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 60487, "bbox": [0, 0, 254, 289], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3855, "bbox": [38, 88, 182, 126], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 465, "bbox": [122, 90, 22, 43], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 15133, "bbox": [36, 287, 188, 96], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 949, "bbox": [13, 241, 51, 139], "iscrowd": 0}, {"id": 16479257, "category_id": 96, "area": 1082, "bbox": [192, 239, 59, 143], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 358, "bbox": [187, 107, 20, 22], "iscrowd": 0}, {"id": 15272703, "category_id": 126, "area": 367, "bbox": [58, 105, 20, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00001329", "file_name": "ADE_val_00001329.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 35741, "bbox": [0, 0, 500, 258], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 28532, "bbox": [108, 229, 343, 145], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 29660, "bbox": [326, 43, 174, 331], "iscrowd": 0}, {"id": 16711900, "category_id": 8, "area": 26209, "bbox": [4, 63, 165, 282], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 22590, "bbox": [167, 2, 136, 175], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 17941, "bbox": [0, 221, 133, 153], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 5314, "bbox": [301, 8, 43, 225], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 4068, "bbox": [2, 66, 57, 193], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 16285, "bbox": [312, 121, 128, 148], "iscrowd": 0}]}, {"image_id": "ADE_val_00001330", "file_name": "ADE_val_00001330.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 179814, "bbox": [0, 0, 682, 508], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 203, "bbox": [445, 502, 64, 8], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 36237, "bbox": [1, 0, 372, 191], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 70661, "bbox": [0, 298, 446, 213], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 14020, "bbox": [503, 235, 156, 220], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 7061, "bbox": [449, 328, 85, 182], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 10202, "bbox": [507, 385, 175, 126], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 3613, "bbox": [199, 347, 158, 44], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 841, "bbox": [534, 432, 83, 35], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 8836, "bbox": [619, 299, 63, 147], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 2239, "bbox": [542, 440, 55, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00001331", "file_name": "ADE_val_00001331.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 79125, "bbox": [0, 0, 490, 474], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 7099, "bbox": [371, 24, 69, 110], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 32177, "bbox": [0, 338, 392, 173], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 43707, "bbox": [483, 0, 157, 303], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 5021, "bbox": [196, 336, 225, 123], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 39389, "bbox": [634, 0, 137, 310], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 14877, "bbox": [524, 410, 244, 101], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 5240, "bbox": [302, 55, 57, 96], "iscrowd": 0}, {"id": 3735789, "category_id": 23, "area": 642, "bbox": [192, 198, 28, 25], "iscrowd": 0}, {"id": 3539191, "category_id": 23, "area": 541, "bbox": [221, 199, 22, 26], "iscrowd": 0}, {"id": 3349228, "category_id": 23, "area": 764, "bbox": [242, 198, 32, 26], "iscrowd": 0}, {"id": 2687231, "category_id": 23, "area": 694, "bbox": [273, 200, 32, 24], "iscrowd": 0}, {"id": 3737343, "category_id": 23, "area": 748, "bbox": [303, 199, 31, 27], "iscrowd": 0}, {"id": 1510121, "category_id": 23, "area": 925, "bbox": [334, 198, 36, 28], "iscrowd": 0}, {"id": 1515519, "category_id": 23, "area": 970, "bbox": [369, 199, 27, 38], "iscrowd": 0}, {"id": 1900799, "category_id": 23, "area": 890, "bbox": [396, 200, 25, 39], "iscrowd": 0}, {"id": 3145982, "category_id": 23, "area": 400, "bbox": [407, 261, 18, 24], "iscrowd": 0}, {"id": 5185012, "category_id": 23, "area": 849, "bbox": [370, 273, 31, 30], "iscrowd": 0}, {"id": 4194555, "category_id": 23, "area": 838, "bbox": [337, 274, 33, 27], "iscrowd": 0}, {"id": 2368241, "category_id": 23, "area": 826, "bbox": [302, 273, 35, 25], "iscrowd": 0}, {"id": 4654335, "category_id": 23, "area": 713, "bbox": [272, 271, 30, 25], "iscrowd": 0}, {"id": 4325631, "category_id": 23, "area": 618, "bbox": [245, 269, 27, 25], "iscrowd": 0}, {"id": 1843174, "category_id": 23, "area": 502, "bbox": [224, 269, 21, 24], "iscrowd": 0}, {"id": 1507583, "category_id": 23, "area": 633, "bbox": [195, 268, 29, 24], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 20971, "bbox": [190, 197, 255, 158], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 45151, "bbox": [417, 298, 353, 213], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 13580, "bbox": [167, 337, 197, 102], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 758, "bbox": [284, 182, 77, 14], "iscrowd": 0}, {"id": 369137, "category_id": 68, "area": 2096, "bbox": [280, 309, 86, 32], "iscrowd": 0}, {"id": 1555455, "category_id": 68, "area": 1313, "bbox": [223, 233, 41, 34], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 685, "bbox": [754, 261, 16, 52], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 44337, "bbox": [0, 37, 190, 268], "iscrowd": 0}, {"id": 16711750, "category_id": 150, "area": 4952, "bbox": [236, 14, 148, 67], "iscrowd": 0}]}, {"image_id": "ADE_val_00001332", "file_name": "ADE_val_00001332.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 49189, "bbox": [1, 168, 668, 228], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 124220, "bbox": [37, 0, 645, 351], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 62056, "bbox": [1, 1, 676, 403], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 34067, "bbox": [0, 385, 681, 127], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 13645, "bbox": [89, 382, 593, 130], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3550, "bbox": [315, 426, 368, 83], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 61, "bbox": [412, 387, 5, 16], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 611, "bbox": [0, 381, 30, 31], "iscrowd": 0}, {"id": 11691776, "category_id": 21, "area": 348, "bbox": [376, 391, 36, 24], "iscrowd": 0}, {"id": 13849088, "category_id": 21, "area": 3234, "bbox": [457, 388, 113, 43], "iscrowd": 0}, {"id": 13523200, "category_id": 21, "area": 532, "bbox": [534, 389, 42, 22], "iscrowd": 0}, {"id": 13652736, "category_id": 21, "area": 77, "bbox": [567, 389, 11, 12], "iscrowd": 0}, {"id": 12541462, "category_id": 21, "area": 54, "bbox": [571, 385, 10, 14], "iscrowd": 0}, {"id": 14841600, "category_id": 21, "area": 1101, "bbox": [417, 384, 53, 31], "iscrowd": 0}, {"id": 11626261, "category_id": 21, "area": 40, "bbox": [615, 389, 8, 7], "iscrowd": 0}, {"id": 13982720, "category_id": 21, "area": 10870, "bbox": [233, 380, 186, 91], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 409, "bbox": [427, 425, 19, 57], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 5125, "bbox": [498, 466, 128, 45], "iscrowd": 0}, {"id": 9699583, "category_id": 44, "area": 10367, "bbox": [492, 231, 178, 227], "iscrowd": 0}, {"id": 10289387, "category_id": 44, "area": 1772, "bbox": [224, 285, 22, 225], "iscrowd": 0}, {"id": 9240831, "category_id": 44, "area": 255, "bbox": [601, 360, 16, 42], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 914, "bbox": [182, 386, 72, 21], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 11311, "bbox": [621, 0, 61, 413], "iscrowd": 0}, {"id": 16737805, "category_id": 73, "area": 357, "bbox": [533, 343, 30, 43], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 4169, "bbox": [0, 358, 98, 54], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 242, "bbox": [569, 380, 22, 21], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 148, "bbox": [281, 281, 15, 56], "iscrowd": 0}, {"id": 16341527, "category_id": 88, "area": 116, "bbox": [425, 320, 10, 66], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 3867, "bbox": [312, 442, 78, 66], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 500, "bbox": [280, 338, 13, 40], "iscrowd": 0}, {"id": 16711744, "category_id": 137, "area": 1760, "bbox": [141, 302, 63, 107], "iscrowd": 0}]}, {"image_id": "ADE_val_00001333", "file_name": "ADE_val_00001333.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 45920, "bbox": [1, 0, 681, 464], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 85887, "bbox": [0, 102, 682, 408], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2047, "bbox": [8, 35, 45, 124], "iscrowd": 0}, {"id": 5574807, "category_id": 13, "area": 89898, "bbox": [126, 0, 306, 511], "iscrowd": 0}, {"id": 3866745, "category_id": 13, "area": 24866, "bbox": [333, 20, 158, 267], "iscrowd": 0}, {"id": 4063393, "category_id": 13, "area": 2057, "bbox": [399, 9, 55, 66], "iscrowd": 0}, {"id": 3801209, "category_id": 13, "area": 6372, "bbox": [308, 146, 89, 132], "iscrowd": 0}, {"id": 3604640, "category_id": 13, "area": 3008, "bbox": [296, 0, 53, 147], "iscrowd": 0}, {"id": 3014792, "category_id": 13, "area": 34017, "bbox": [348, 253, 224, 259], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 476, "bbox": [131, 70, 33, 42], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 7407, "bbox": [559, 14, 83, 183], "iscrowd": 0}, {"id": 13695205, "category_id": 28, "area": 4476, "bbox": [526, 14, 63, 159], "iscrowd": 0}, {"id": 14538687, "category_id": 28, "area": 2540, "bbox": [494, 15, 47, 128], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 351, "bbox": [584, 334, 27, 19], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 24317, "bbox": [480, 114, 202, 288], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 739, "bbox": [526, 215, 20, 51], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 3956, "bbox": [1, 292, 86, 72], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 271, "bbox": [656, 11, 18, 19], "iscrowd": 0}, {"id": 16721683, "category_id": 135, "area": 143, "bbox": [489, 18, 13, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001334", "file_name": "ADE_val_00001334.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 79136, "bbox": [0, 0, 682, 201], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 55567, "bbox": [100, 29, 582, 287], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 85152, "bbox": [0, 298, 582, 212], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 13460, "bbox": [1, 319, 363, 111], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 62673, "bbox": [0, 221, 682, 288], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 37798, "bbox": [0, 115, 643, 205], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 10618, "bbox": [291, 113, 150, 183], "iscrowd": 0}]}, {"image_id": "ADE_val_00001335", "file_name": "ADE_val_00001335.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 141099, "bbox": [0, 0, 682, 250], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 134537, "bbox": [0, 194, 681, 316], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 16, "bbox": [663, 510, 16, 1], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 13245, "bbox": [2, 166, 65, 285], "iscrowd": 0}, {"id": 5705630, "category_id": 13, "area": 1948, "bbox": [120, 201, 46, 108], "iscrowd": 0}, {"id": 2490540, "category_id": 13, "area": 3915, "bbox": [154, 193, 42, 142], "iscrowd": 0}, {"id": 3613058, "category_id": 13, "area": 7818, "bbox": [230, 177, 85, 189], "iscrowd": 0}, {"id": 5638826, "category_id": 13, "area": 21804, "bbox": [423, 154, 124, 309], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 986, "bbox": [316, 346, 35, 38], "iscrowd": 0}, {"id": 1375315, "category_id": 113, "area": 414, "bbox": [196, 318, 20, 24], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 34, "bbox": [304, 364, 8, 6], "iscrowd": 0}]}, {"image_id": "ADE_val_00001336", "file_name": "ADE_val_00001336.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 96432, "bbox": [0, 63, 682, 250], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 21244, "bbox": [0, 0, 682, 80], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8897, "bbox": [0, 295, 682, 30], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 128554, "bbox": [0, 319, 682, 192], "iscrowd": 0}, {"id": 65311, "category_id": 52, "area": 41483, "bbox": [0, 22, 604, 127], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 7274, "bbox": [376, 271, 181, 44], "iscrowd": 0}, {"id": 1354751, "category_id": 33, "area": 6553, "bbox": [130, 277, 183, 37], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 7766, "bbox": [372, 89, 175, 52], "iscrowd": 0}, {"id": 11745, "category_id": 39, "area": 10293, "bbox": [120, 82, 199, 61], "iscrowd": 0}, {"id": 1319910, "category_id": 39, "area": 2329, "bbox": [61, 25, 112, 40], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1477, "bbox": [468, 0, 32, 48], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 2428, "bbox": [590, 83, 91, 57], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 975, "bbox": [551, 43, 62, 63], "iscrowd": 0}, {"id": 16745985, "category_id": 96, "area": 2374, "bbox": [572, 48, 110, 61], "iscrowd": 0}, {"id": 16747779, "category_id": 96, "area": 642, "bbox": [500, 17, 40, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00001337", "file_name": "ADE_val_00001337.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 154664, "bbox": [1, 0, 766, 504], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25455, "bbox": [54, 432, 711, 79], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 12119, "bbox": [82, 1, 647, 37], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 13205, "bbox": [262, 298, 197, 87], "iscrowd": 0}, {"id": 16763904, "category_id": 131, "area": 49499, "bbox": [185, 39, 288, 194], "iscrowd": 0}]}, {"image_id": "ADE_val_00001338", "file_name": "ADE_val_00001338.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 228683, "bbox": [0, 0, 510, 770], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8812, "bbox": [333, 546, 178, 223], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2446, "bbox": [494, 0, 16, 157], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1174, "bbox": [482, 489, 28, 67], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1564, "bbox": [2, 162, 12, 244], "iscrowd": 0}]}, {"image_id": "ADE_val_00001339", "file_name": "ADE_val_00001339.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 32852, "bbox": [0, 0, 300, 228], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 16153, "bbox": [0, 147, 278, 80], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7770, "bbox": [77, 0, 201, 66], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 372, "bbox": [247, 99, 24, 17], "iscrowd": 0}, {"id": 5243130, "category_id": 23, "area": 246, "bbox": [41, 90, 15, 18], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 6932, "bbox": [14, 68, 61, 131], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 99, "bbox": [190, 62, 22, 6], "iscrowd": 0}, {"id": 41471, "category_id": 83, "area": 50, "bbox": [156, 2, 10, 6], "iscrowd": 0}, {"id": 1024252, "category_id": 83, "area": 39, "bbox": [147, 31, 9, 6], "iscrowd": 0}, {"id": 495863, "category_id": 83, "area": 56, "bbox": [197, 11, 10, 8], "iscrowd": 0}, {"id": 823786, "category_id": 83, "area": 14, "bbox": [238, 29, 7, 3], "iscrowd": 0}, {"id": 1489662, "category_id": 83, "area": 15, "bbox": [272, 6, 4, 4], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 162, "bbox": [171, 134, 10, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001340", "file_name": "ADE_val_00001340.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 44937, "bbox": [0, 314, 639, 96], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 97296, "bbox": [0, 21, 639, 309], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 82411, "bbox": [0, 0, 639, 292], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 26398, "bbox": [29, 113, 610, 210], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 32216, "bbox": [0, 418, 639, 61], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 12850, "bbox": [0, 400, 639, 32], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2751, "bbox": [35, 333, 45, 66], "iscrowd": 0}, {"id": 4194080, "category_id": 15, "area": 3717, "bbox": [327, 333, 53, 74], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 676, "bbox": [90, 351, 29, 25], "iscrowd": 0}, {"id": 11206911, "category_id": 44, "area": 412, "bbox": [293, 352, 18, 23], "iscrowd": 0}, {"id": 9044202, "category_id": 44, "area": 287, "bbox": [215, 298, 9, 79], "iscrowd": 0}]}, {"image_id": "ADE_val_00001341", "file_name": "ADE_val_00001341.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 41245, "bbox": [0, 0, 425, 159], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12362, "bbox": [314, 68, 110, 250], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 598, "bbox": [383, 10, 42, 34], "iscrowd": 0}, {"id": 10747648, "category_id": 97, "area": 54957, "bbox": [0, 134, 400, 184], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3850, "bbox": [65, 0, 161, 37], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 308, "bbox": [264, 109, 33, 39], "iscrowd": 0}, {"id": 5046416, "category_id": 13, "area": 10691, "bbox": [47, 70, 117, 193], "iscrowd": 0}, {"id": 3348637, "category_id": 13, "area": 4942, "bbox": [152, 102, 51, 149], "iscrowd": 0}, {"id": 2427313, "category_id": 13, "area": 1850, "bbox": [203, 108, 51, 72], "iscrowd": 0}, {"id": 5708723, "category_id": 13, "area": 1363, "bbox": [237, 115, 39, 60], "iscrowd": 0}, {"id": 5708682, "category_id": 13, "area": 579, "bbox": [273, 128, 17, 45], "iscrowd": 0}, {"id": 3935873, "category_id": 13, "area": 594, "bbox": [287, 136, 22, 39], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 841, "bbox": [359, 48, 23, 56], "iscrowd": 0}]}, {"image_id": "ADE_val_00001342", "file_name": "ADE_val_00001342.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 9963, "bbox": [0, 0, 210, 156], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9688, "bbox": [32, 0, 149, 89], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5046, "bbox": [0, 78, 77, 110], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 11835, "bbox": [0, 176, 209, 104], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 5038, "bbox": [68, 86, 75, 134], "iscrowd": 0}, {"id": 10747648, "category_id": 97, "area": 15418, "bbox": [0, 68, 198, 179], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 79, "bbox": [126, 74, 10, 14], "iscrowd": 0}, {"id": 4653235, "category_id": 13, "area": 511, "bbox": [149, 106, 19, 55], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 585, "bbox": [181, 156, 28, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00001343", "file_name": "ADE_val_00001343.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 132966, "bbox": [0, 0, 682, 464], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 109998, "bbox": [0, 258, 682, 253], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6585, "bbox": [444, 117, 112, 139], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 975, "bbox": [0, 275, 67, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00001344", "file_name": "ADE_val_00001344.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 243807, "bbox": [0, 0, 689, 401], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 82943, "bbox": [0, 351, 689, 160], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4360, "bbox": [54, 258, 52, 182], "iscrowd": 0}, {"id": 3277435, "category_id": 13, "area": 6242, "bbox": [91, 253, 78, 184], "iscrowd": 0}, {"id": 2162865, "category_id": 13, "area": 7338, "bbox": [356, 266, 90, 185], "iscrowd": 0}, {"id": 3736496, "category_id": 13, "area": 6600, "bbox": [483, 289, 70, 164], "iscrowd": 0}]}, {"image_id": "ADE_val_00001345", "file_name": "ADE_val_00001345.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 34145, "bbox": [102, 195, 250, 167], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 178377, "bbox": [0, 1, 662, 324], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4508, "bbox": [26, 257, 524, 71], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 108590, "bbox": [0, 304, 662, 207], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 9255, "bbox": [3, 321, 395, 60], "iscrowd": 0}]}, {"image_id": "ADE_val_00001346", "file_name": "ADE_val_00001346.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 70691, "bbox": [0, 24, 633, 452], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 45887, "bbox": [0, 0, 633, 112], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 15149, "bbox": [110, 277, 522, 62], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 7530, "bbox": [208, 177, 83, 147], "iscrowd": 0}, {"id": 5055361, "category_id": 13, "area": 17905, "bbox": [45, 173, 121, 302], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 79774, "bbox": [20, 296, 613, 181], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 19053, "bbox": [333, 149, 131, 151], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2688, "bbox": [18, 50, 177, 32], "iscrowd": 0}, {"id": 703999, "category_id": 83, "area": 4121, "bbox": [284, 2, 237, 34], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 3745, "bbox": [483, 201, 112, 37], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1170, "bbox": [144, 308, 76, 20], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 9474, "bbox": [522, 65, 111, 88], "iscrowd": 0}, {"id": 65446, "category_id": 145, "area": 21763, "bbox": [135, 70, 311, 106], "iscrowd": 0}]}, {"image_id": "ADE_val_00001347", "file_name": "ADE_val_00001347.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 47115, "bbox": [0, 0, 523, 166], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 11049, "bbox": [0, 84, 336, 89], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 57203, "bbox": [0, 264, 370, 247], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 7359, "bbox": [0, 133, 205, 137], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3051, "bbox": [1, 263, 50, 103], "iscrowd": 0}, {"id": 23217, "category_id": 20, "area": 6428, "bbox": [2, 285, 90, 223], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 212338, "bbox": [49, 0, 632, 511], "iscrowd": 0}]}, {"image_id": "ADE_val_00001348", "file_name": "ADE_val_00001348.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1617, "bbox": [19, 59, 237, 15], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 11659, "bbox": [2, 1, 254, 56], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4316, "bbox": [2, 38, 254, 34], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 7684, "bbox": [0, 61, 256, 50], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 5541, "bbox": [0, 94, 256, 31], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 4574, "bbox": [2, 123, 254, 20], "iscrowd": 0}, {"id": 250, "category_id": 67, "area": 28930, "bbox": [2, 142, 254, 114], "iscrowd": 0}]}, {"image_id": "ADE_val_00001349", "file_name": "ADE_val_00001349.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 16195, "bbox": [0, 0, 256, 75], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 41040, "bbox": [0, 49, 256, 206], "iscrowd": 0}, {"id": 16714240, "category_id": 92, "area": 7607, "bbox": [0, 75, 255, 180], "iscrowd": 0}]}, {"image_id": "ADE_val_00001350", "file_name": "ADE_val_00001350.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 22058, "bbox": [2, 1, 254, 89], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 8649, "bbox": [9, 106, 223, 135], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 33805, "bbox": [2, 86, 254, 170], "iscrowd": 0}]}, {"image_id": "ADE_val_00001351", "file_name": "ADE_val_00001351.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 42511, "bbox": [0, 0, 255, 169], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 239, "bbox": [2, 161, 54, 8], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 10856, "bbox": [0, 168, 255, 85], "iscrowd": 0}, {"id": 16714240, "category_id": 92, "area": 10782, "bbox": [0, 167, 255, 88], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 154, "bbox": [178, 183, 14, 13], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 4, "bbox": [155, 162, 4, 1], "iscrowd": 0}]}, {"image_id": "ADE_val_00001352", "file_name": "ADE_val_00001352.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 54828, "bbox": [2, 1, 210, 289], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 4115, "bbox": [15, 0, 197, 159], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2860, "bbox": [0, 267, 212, 32], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 297, "bbox": [50, 66, 34, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00001353", "file_name": "ADE_val_00001353.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 4682, "bbox": [133, 2, 549, 72], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 11076, "bbox": [1, 0, 681, 41], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6943, "bbox": [6, 3, 676, 42], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 173068, "bbox": [0, 68, 682, 443], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 76430, "bbox": [0, 22, 302, 488], "iscrowd": 0}]}, {"image_id": "ADE_val_00001354", "file_name": "ADE_val_00001354.png", "segments_info": [{"id": 327628, "category_id": 18, "area": 14743, "bbox": [0, 0, 239, 80], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 37778, "bbox": [2, 81, 237, 238], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 21085, "bbox": [0, 48, 239, 187], "iscrowd": 0}]}, {"image_id": "ADE_val_00001355", "file_name": "ADE_val_00001355.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 86025, "bbox": [0, 1, 486, 224], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 43702, "bbox": [0, 83, 486, 291], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 44965, "bbox": [2, 369, 241, 267], "iscrowd": 0}, {"id": 16711751, "category_id": 141, "area": 1430, "bbox": [0, 351, 39, 50], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 123413, "bbox": [168, 33, 318, 605], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 6347, "bbox": [3, 597, 483, 41], "iscrowd": 0}]}, {"image_id": "ADE_val_00001356", "file_name": "ADE_val_00001356.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 30012, "bbox": [0, 0, 255, 206], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 7238, "bbox": [13, 56, 179, 174], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3301, "bbox": [20, 90, 170, 105], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 435, "bbox": [82, 41, 42, 19], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 416, "bbox": [36, 187, 35, 17], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 3616, "bbox": [14, 226, 167, 29], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 1482, "bbox": [0, 167, 23, 88], "iscrowd": 0}, {"id": 18927, "category_id": 39, "area": 6872, "bbox": [153, 157, 102, 98], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 10241, "bbox": [25, 63, 150, 173], "iscrowd": 0}]}, {"image_id": "ADE_val_00001357", "file_name": "ADE_val_00001357.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 1992, "bbox": [507, 103, 130, 31], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 47728, "bbox": [0, 0, 639, 158], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 3900, "bbox": [114, 145, 329, 24], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2331, "bbox": [56, 123, 556, 47], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 158743, "bbox": [0, 154, 639, 324], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 36486, "bbox": [0, 0, 486, 160], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 261, "bbox": [486, 111, 23, 15], "iscrowd": 0}, {"id": 12339456, "category_id": 21, "area": 645, "bbox": [493, 126, 48, 27], "iscrowd": 0}, {"id": 14570757, "category_id": 21, "area": 3647, "bbox": [580, 127, 59, 83], "iscrowd": 0}, {"id": 14245660, "category_id": 21, "area": 1795, "bbox": [524, 130, 71, 38], "iscrowd": 0}, {"id": 11161104, "category_id": 21, "area": 2050, "bbox": [439, 123, 74, 40], "iscrowd": 0}, {"id": 14382080, "category_id": 21, "area": 20999, "bbox": [425, 188, 213, 154], "iscrowd": 0}, {"id": 13599488, "category_id": 21, "area": 17490, "bbox": [172, 189, 303, 96], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 3730, "bbox": [0, 103, 59, 68], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 1030, "bbox": [331, 152, 79, 21], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 127, "bbox": [182, 159, 8, 19], "iscrowd": 0}, {"id": 16717102, "category_id": 94, "area": 90, "bbox": [216, 163, 6, 18], "iscrowd": 0}, {"id": 16711748, "category_id": 94, "area": 157, "bbox": [255, 163, 8, 21], "iscrowd": 0}, {"id": 16515102, "category_id": 94, "area": 144, "bbox": [298, 166, 8, 19], "iscrowd": 0}, {"id": 15794235, "category_id": 94, "area": 105, "bbox": [353, 170, 8, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001358", "file_name": "ADE_val_00001358.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 22776, "bbox": [0, 0, 320, 151], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5754, "bbox": [0, 139, 273, 92], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1034, "bbox": [154, 0, 110, 20], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 7626, "bbox": [237, 71, 83, 160], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 5260, "bbox": [164, 10, 98, 140], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 799, "bbox": [136, 51, 30, 31], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 180, "bbox": [197, 134, 30, 18], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 2228, "bbox": [96, 168, 59, 63], "iscrowd": 0}, {"id": 1442047, "category_id": 67, "area": 756, "bbox": [142, 208, 40, 23], "iscrowd": 0}, {"id": 758, "category_id": 67, "area": 2726, "bbox": [134, 167, 80, 64], "iscrowd": 0}, {"id": 655615, "category_id": 67, "area": 623, "bbox": [188, 205, 31, 26], "iscrowd": 0}, {"id": 1442290, "category_id": 67, "area": 389, "bbox": [28, 17, 26, 30], "iscrowd": 0}, {"id": 5375, "category_id": 67, "area": 3745, "bbox": [6, 102, 64, 117], "iscrowd": 0}, {"id": 3583, "category_id": 67, "area": 4676, "bbox": [76, 102, 78, 122], "iscrowd": 0}, {"id": 1573103, "category_id": 67, "area": 715, "bbox": [148, 7, 25, 40], "iscrowd": 0}, {"id": 852198, "category_id": 67, "area": 459, "bbox": [169, 11, 20, 35], "iscrowd": 0}, {"id": 786687, "category_id": 67, "area": 6153, "bbox": [217, 103, 87, 129], "iscrowd": 0}, {"id": 724730, "category_id": 67, "area": 1277, "bbox": [183, 147, 52, 45], "iscrowd": 0}, {"id": 1448183, "category_id": 67, "area": 3140, "bbox": [49, 2, 81, 70], "iscrowd": 0}, {"id": 1835242, "category_id": 67, "area": 2351, "bbox": [47, 103, 48, 119], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 580, "bbox": [80, 48, 30, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00001359", "file_name": "ADE_val_00001359.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 32075, "bbox": [0, 4, 299, 200], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4462, "bbox": [0, 203, 299, 17], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2005, "bbox": [0, 0, 299, 16], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 691, "bbox": [91, 99, 27, 42], "iscrowd": 0}, {"id": 2886790, "category_id": 13, "area": 273, "bbox": [119, 101, 15, 37], "iscrowd": 0}, {"id": 2623641, "category_id": 13, "area": 131, "bbox": [136, 105, 12, 19], "iscrowd": 0}, {"id": 3145854, "category_id": 13, "area": 343, "bbox": [161, 96, 30, 27], "iscrowd": 0}, {"id": 5112234, "category_id": 13, "area": 2081, "bbox": [53, 97, 46, 114], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 797, "bbox": [267, 16, 27, 43], "iscrowd": 0}, {"id": 10223871, "category_id": 44, "area": 1069, "bbox": [129, 4, 37, 37], "iscrowd": 0}, {"id": 9706751, "category_id": 44, "area": 4413, "bbox": [1, 87, 42, 125], "iscrowd": 0}, {"id": 10887167, "category_id": 44, "area": 652, "bbox": [8, 22, 23, 41], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 2586, "bbox": [52, 142, 71, 61], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 776, "bbox": [191, 102, 38, 21], "iscrowd": 0}, {"id": 16711680, "category_id": 56, "area": 7051, "bbox": [121, 123, 132, 59], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 392, "bbox": [78, 145, 26, 25], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 3444, "bbox": [82, 40, 136, 28], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 1015, "bbox": [163, 71, 66, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001360", "file_name": "ADE_val_00001360.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 30494, "bbox": [2, 1, 254, 145], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 28456, "bbox": [2, 102, 253, 154], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 1560, "bbox": [2, 190, 69, 64], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 2440, "bbox": [107, 165, 49, 91], "iscrowd": 0}]}, {"image_id": "ADE_val_00001361", "file_name": "ADE_val_00001361.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 12699, "bbox": [46, 1, 210, 81], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 50854, "bbox": [0, 1, 256, 255], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 640, "bbox": [117, 113, 51, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001362", "file_name": "ADE_val_00001362.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 6713, "bbox": [2, 3, 253, 47], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 36715, "bbox": [3, 4, 252, 237], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 4882, "bbox": [2, 229, 254, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001363", "file_name": "ADE_val_00001363.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 47435, "bbox": [2, 1, 254, 235], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 15401, "bbox": [0, 161, 255, 94], "iscrowd": 0}]}, {"image_id": "ADE_val_00001364", "file_name": "ADE_val_00001364.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 3358, "bbox": [0, 0, 194, 104], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 45467, "bbox": [0, 0, 256, 202], "iscrowd": 0}]}, {"image_id": "ADE_val_00001365", "file_name": "ADE_val_00001365.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 23875, "bbox": [28, 1, 228, 174], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 32528, "bbox": [2, 1, 253, 255], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 7348, "bbox": [60, 126, 196, 129], "iscrowd": 0}]}, {"image_id": "ADE_val_00001366", "file_name": "ADE_val_00001366.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 46638, "bbox": [0, 0, 255, 244], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 9000, "bbox": [80, 143, 144, 113], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 8801, "bbox": [0, 149, 256, 107], "iscrowd": 0}]}, {"image_id": "ADE_val_00001367", "file_name": "ADE_val_00001367.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 46219, "bbox": [0, 90, 392, 302], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 23633, "bbox": [0, 0, 337, 145], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 101906, "bbox": [0, 1, 468, 412], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 115619, "bbox": [0, 332, 467, 411], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 37198, "bbox": [92, 406, 286, 337], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 5113, "bbox": [269, 447, 55, 150], "iscrowd": 0}, {"id": 3545260, "category_id": 13, "area": 590, "bbox": [239, 379, 21, 56], "iscrowd": 0}, {"id": 3080313, "category_id": 13, "area": 386, "bbox": [222, 386, 14, 44], "iscrowd": 0}, {"id": 5443725, "category_id": 13, "area": 325, "bbox": [194, 388, 19, 34], "iscrowd": 0}, {"id": 4325502, "category_id": 13, "area": 2231, "bbox": [385, 432, 46, 76], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 2583, "bbox": [186, 371, 103, 37], "iscrowd": 0}]}, {"image_id": "ADE_val_00001368", "file_name": "ADE_val_00001368.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 179963, "bbox": [0, 22, 767, 450], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 125714, "bbox": [0, 0, 767, 314], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 950, "bbox": [3, 331, 66, 27], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 1759, "bbox": [0, 362, 73, 27], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 63205, "bbox": [2, 380, 765, 131], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 4800, "bbox": [0, 264, 767, 102], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 12808, "bbox": [2, 387, 470, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00001369", "file_name": "ADE_val_00001369.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 58715, "bbox": [0, 0, 682, 511], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1192, "bbox": [0, 216, 53, 49], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 11297, "bbox": [1, 0, 240, 65], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1074, "bbox": [5, 91, 36, 78], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 11682, "bbox": [1, 69, 223, 152], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 2107, "bbox": [1, 0, 268, 137], "iscrowd": 0}, {"id": 11188232, "category_id": 105, "area": 239217, "bbox": [13, 1, 641, 510], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 21366, "bbox": [0, 185, 141, 325], "iscrowd": 0}]}, {"image_id": "ADE_val_00001370", "file_name": "ADE_val_00001370.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 118846, "bbox": [0, 40, 639, 317], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21074, "bbox": [197, 356, 301, 124], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 73067, "bbox": [0, 0, 639, 219], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2367, "bbox": [489, 245, 40, 62], "iscrowd": 0}, {"id": 16711374, "category_id": 9, "area": 2304, "bbox": [147, 250, 39, 62], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 241, "bbox": [378, 272, 18, 79], "iscrowd": 0}, {"id": 1507297, "category_id": 37, "area": 279, "bbox": [261, 273, 19, 59], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 620, "bbox": [225, 297, 32, 34], "iscrowd": 0}, {"id": 238, "category_id": 67, "area": 304, "bbox": [399, 297, 31, 17], "iscrowd": 0}, {"id": 196841, "category_id": 67, "area": 149, "bbox": [234, 266, 16, 19], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 2475, "bbox": [3, 446, 156, 33], "iscrowd": 0}, {"id": 714939, "category_id": 70, "area": 9304, "bbox": [2, 405, 197, 75], "iscrowd": 0}, {"id": 63953, "category_id": 70, "area": 6972, "bbox": [0, 381, 223, 99], "iscrowd": 0}, {"id": 1310650, "category_id": 70, "area": 5683, "bbox": [1, 366, 240, 107], "iscrowd": 0}, {"id": 1632436, "category_id": 70, "area": 4150, "bbox": [0, 354, 255, 91], "iscrowd": 0}, {"id": 58564, "category_id": 70, "area": 2428, "bbox": [1, 345, 261, 80], "iscrowd": 0}, {"id": 58560, "category_id": 70, "area": 2265, "bbox": [54, 337, 215, 68], "iscrowd": 0}, {"id": 62160, "category_id": 70, "area": 1218, "bbox": [81, 332, 194, 62], "iscrowd": 0}, {"id": 65469, "category_id": 70, "area": 2374, "bbox": [542, 442, 98, 38], "iscrowd": 0}, {"id": 65501, "category_id": 70, "area": 7011, "bbox": [495, 401, 145, 79], "iscrowd": 0}, {"id": 1114042, "category_id": 70, "area": 6156, "bbox": [467, 379, 173, 101], "iscrowd": 0}, {"id": 64426, "category_id": 70, "area": 4825, "bbox": [444, 363, 196, 108], "iscrowd": 0}, {"id": 58543, "category_id": 70, "area": 3704, "bbox": [431, 352, 209, 92], "iscrowd": 0}, {"id": 62674, "category_id": 70, "area": 2887, "bbox": [420, 343, 220, 80], "iscrowd": 0}, {"id": 64436, "category_id": 70, "area": 2115, "bbox": [410, 335, 230, 73], "iscrowd": 0}, {"id": 65502, "category_id": 70, "area": 1818, "bbox": [402, 330, 237, 65], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 44, "bbox": [65, 139, 10, 6], "iscrowd": 0}, {"id": 37631, "category_id": 83, "area": 66, "bbox": [242, 47, 11, 8], "iscrowd": 0}, {"id": 1941759, "category_id": 83, "area": 63, "bbox": [418, 44, 11, 8], "iscrowd": 0}, {"id": 47871, "category_id": 83, "area": 60, "bbox": [599, 132, 11, 7], "iscrowd": 0}, {"id": 41471, "category_id": 83, "area": 249, "bbox": [475, 26, 23, 15], "iscrowd": 0}, {"id": 1164771, "category_id": 83, "area": 188, "bbox": [451, 71, 20, 13], "iscrowd": 0}, {"id": 51193, "category_id": 83, "area": 174, "bbox": [175, 31, 20, 14], "iscrowd": 0}, {"id": 48127, "category_id": 83, "area": 152, "bbox": [201, 75, 20, 12], "iscrowd": 0}, {"id": 900607, "category_id": 83, "area": 25, "bbox": [229, 205, 8, 4], "iscrowd": 0}, {"id": 1291769, "category_id": 83, "area": 35, "bbox": [275, 200, 10, 4], "iscrowd": 0}, {"id": 1413367, "category_id": 83, "area": 30, "bbox": [332, 202, 8, 5], "iscrowd": 0}, {"id": 963056, "category_id": 83, "area": 33, "bbox": [388, 199, 9, 4], "iscrowd": 0}, {"id": 49891, "category_id": 83, "area": 34, "bbox": [434, 201, 9, 5], "iscrowd": 0}, {"id": 49648, "category_id": 83, "area": 20, "bbox": [264, 213, 6, 4], "iscrowd": 0}, {"id": 1491199, "category_id": 83, "area": 22, "bbox": [333, 212, 6, 4], "iscrowd": 0}, {"id": 570353, "category_id": 83, "area": 12, "bbox": [403, 211, 5, 3], "iscrowd": 0}, {"id": 39663, "category_id": 83, "area": 15, "bbox": [500, 198, 9, 2], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 1476, "bbox": [104, 68, 48, 118], "iscrowd": 0}, {"id": 16268288, "category_id": 86, "area": 1573, "bbox": [521, 93, 52, 87], "iscrowd": 0}, {"id": 15074816, "category_id": 86, "area": 2453, "bbox": [0, 66, 59, 74], "iscrowd": 0}, {"id": 16724992, "category_id": 86, "area": 689, "bbox": [621, 63, 18, 61], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 1001, "bbox": [103, 7, 111, 149], "iscrowd": 0}, {"id": 14866432, "category_id": 140, "area": 781, "bbox": [472, 8, 113, 134], "iscrowd": 0}, {"id": 16115712, "category_id": 140, "area": 3295, "bbox": [2, 0, 123, 68], "iscrowd": 0}]}, {"image_id": "ADE_val_00001371", "file_name": "ADE_val_00001371.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18948, "bbox": [0, 0, 306, 97], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 12577, "bbox": [37, 110, 149, 120], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 7027, "bbox": [0, 75, 146, 82], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 16593, "bbox": [186, 69, 120, 160], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 271, "bbox": [88, 45, 13, 30], "iscrowd": 0}, {"id": 61450, "category_id": 99, "area": 211, "bbox": [100, 47, 13, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001372", "file_name": "ADE_val_00001372.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 41044, "bbox": [0, 46, 400, 193], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 28705, "bbox": [0, 193, 400, 93], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 21636, "bbox": [0, 0, 400, 119], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 488, "bbox": [115, 166, 55, 13], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 930, "bbox": [365, 211, 29, 52], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1890, "bbox": [31, 111, 54, 38], "iscrowd": 0}, {"id": 1645311, "category_id": 23, "area": 841, "bbox": [119, 118, 33, 28], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 59, "bbox": [143, 154, 11, 14], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 304, "bbox": [173, 156, 21, 17], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 1140, "bbox": [303, 232, 58, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00001373", "file_name": "ADE_val_00001373.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 86954, "bbox": [0, 0, 688, 460], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 42374, "bbox": [237, 222, 340, 239], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 17009, "bbox": [147, 0, 382, 60], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 65908, "bbox": [0, 201, 331, 260], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4453, "bbox": [486, 101, 37, 132], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 25601, "bbox": [146, 34, 178, 187], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 6038, "bbox": [414, 102, 67, 113], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 120, "bbox": [440, 186, 24, 7], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1009, "bbox": [339, 157, 37, 41], "iscrowd": 0}, {"id": 23992, "category_id": 20, "area": 453, "bbox": [445, 179, 35, 33], "iscrowd": 0}, {"id": 14534, "category_id": 20, "area": 448, "bbox": [422, 183, 21, 26], "iscrowd": 0}, {"id": 1200612, "category_id": 20, "area": 1603, "bbox": [269, 203, 55, 41], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 15527, "bbox": [3, 59, 120, 140], "iscrowd": 0}, {"id": 2036726, "category_id": 23, "area": 258, "bbox": [211, 67, 13, 20], "iscrowd": 0}, {"id": 2360827, "category_id": 23, "area": 311, "bbox": [189, 63, 17, 22], "iscrowd": 0}, {"id": 3670758, "category_id": 23, "area": 371, "bbox": [169, 61, 16, 26], "iscrowd": 0}, {"id": 1770234, "category_id": 23, "area": 293, "bbox": [211, 140, 15, 23], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1108, "bbox": [13, 198, 75, 64], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 11432, "bbox": [242, 192, 255, 132], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 118, "bbox": [222, 26, 19, 8], "iscrowd": 0}, {"id": 1871871, "category_id": 83, "area": 64, "bbox": [405, 40, 16, 6], "iscrowd": 0}, {"id": 40191, "category_id": 83, "area": 80, "bbox": [494, 29, 16, 6], "iscrowd": 0}, {"id": 1031664, "category_id": 83, "area": 52, "bbox": [310, 52, 13, 5], "iscrowd": 0}, {"id": 41215, "category_id": 83, "area": 32, "bbox": [441, 35, 9, 5], "iscrowd": 0}, {"id": 39935, "category_id": 83, "area": 29, "bbox": [319, 27, 8, 5], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 2868, "bbox": [308, 14, 109, 120], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 257, "bbox": [134, 181, 11, 35], "iscrowd": 0}, {"id": 196357, "category_id": 99, "area": 470, "bbox": [214, 195, 14, 48], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 264, "bbox": [396, 215, 32, 12], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 799, "bbox": [199, 229, 70, 19], "iscrowd": 0}, {"id": 65305, "category_id": 138, "area": 3375, "bbox": [0, 295, 147, 65], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 472, "bbox": [233, 196, 16, 46], "iscrowd": 0}, {"id": 13216768, "category_id": 148, "area": 1090, "bbox": [37, 286, 24, 59], "iscrowd": 0}, {"id": 10932241, "category_id": 148, "area": 1167, "bbox": [81, 278, 27, 61], "iscrowd": 0}, {"id": 13412915, "category_id": 148, "area": 963, "bbox": [51, 276, 25, 61], "iscrowd": 0}]}, {"image_id": "ADE_val_00001374", "file_name": "ADE_val_00001374.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 174418, "bbox": [1, 0, 682, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 60945, "bbox": [23, 330, 659, 182], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 8669, "bbox": [171, 0, 485, 56], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 16710, "bbox": [474, 108, 79, 223], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 6633, "bbox": [521, 258, 104, 161], "iscrowd": 0}, {"id": 16098, "category_id": 20, "area": 4427, "bbox": [622, 391, 61, 120], "iscrowd": 0}, {"id": 1585593, "category_id": 20, "area": 6834, "bbox": [587, 283, 95, 194], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3011, "bbox": [122, 112, 36, 93], "iscrowd": 0}, {"id": 1972474, "category_id": 23, "area": 7013, "bbox": [42, 77, 52, 160], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 48, "bbox": [261, 1, 19, 4], "iscrowd": 0}]}, {"image_id": "ADE_val_00001375", "file_name": "ADE_val_00001375.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 82252, "bbox": [1, 0, 681, 421], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 93051, "bbox": [0, 229, 682, 282], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 39244, "bbox": [46, 0, 636, 104], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2717, "bbox": [432, 111, 34, 87], "iscrowd": 0}, {"id": 13685978, "category_id": 9, "area": 5057, "bbox": [321, 120, 68, 84], "iscrowd": 0}, {"id": 14547172, "category_id": 9, "area": 5853, "bbox": [153, 117, 75, 89], "iscrowd": 0}, {"id": 15455979, "category_id": 9, "area": 5366, "bbox": [238, 117, 72, 85], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 456, "bbox": [407, 139, 8, 91], "iscrowd": 0}, {"id": 5308173, "category_id": 15, "area": 1952, "bbox": [483, 131, 24, 107], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 96, "bbox": [332, 197, 25, 6], "iscrowd": 0}, {"id": 5767396, "category_id": 16, "area": 210, "bbox": [180, 196, 43, 12], "iscrowd": 0}, {"id": 4260089, "category_id": 16, "area": 106, "bbox": [255, 195, 45, 8], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 37, "bbox": [219, 193, 15, 3], "iscrowd": 0}, {"id": 10470, "category_id": 20, "area": 159, "bbox": [176, 195, 29, 26], "iscrowd": 0}, {"id": 679606, "category_id": 20, "area": 217, "bbox": [171, 197, 29, 33], "iscrowd": 0}, {"id": 666567, "category_id": 20, "area": 68, "bbox": [329, 192, 17, 6], "iscrowd": 0}, {"id": 145886, "category_id": 20, "area": 108, "bbox": [315, 196, 17, 7], "iscrowd": 0}, {"id": 23272, "category_id": 20, "area": 75, "bbox": [354, 198, 17, 5], "iscrowd": 0}, {"id": 151008, "category_id": 20, "area": 229, "bbox": [131, 197, 31, 40], "iscrowd": 0}, {"id": 10937, "category_id": 20, "area": 146, "bbox": [111, 209, 42, 30], "iscrowd": 0}, {"id": 409011, "category_id": 20, "area": 1154, "bbox": [59, 233, 72, 87], "iscrowd": 0}, {"id": 1136873, "category_id": 20, "area": 1352, "bbox": [45, 240, 77, 90], "iscrowd": 0}, {"id": 10676, "category_id": 20, "area": 1762, "bbox": [29, 248, 85, 97], "iscrowd": 0}, {"id": 869299, "category_id": 20, "area": 2208, "bbox": [7, 257, 99, 109], "iscrowd": 0}, {"id": 1203654, "category_id": 20, "area": 2994, "bbox": [3, 266, 97, 120], "iscrowd": 0}, {"id": 84701, "category_id": 20, "area": 2541, "bbox": [0, 332, 87, 112], "iscrowd": 0}, {"id": 18122, "category_id": 20, "area": 2501, "bbox": [2, 370, 61, 132], "iscrowd": 0}, {"id": 805860, "category_id": 20, "area": 796, "bbox": [0, 421, 28, 90], "iscrowd": 0}, {"id": 1918896, "category_id": 20, "area": 747, "bbox": [535, 221, 46, 57], "iscrowd": 0}, {"id": 13509, "category_id": 20, "area": 273, "bbox": [557, 254, 22, 24], "iscrowd": 0}, {"id": 148678, "category_id": 20, "area": 131, "bbox": [218, 197, 22, 7], "iscrowd": 0}, {"id": 22212, "category_id": 20, "area": 46, "bbox": [266, 191, 17, 3], "iscrowd": 0}, {"id": 21979, "category_id": 20, "area": 140, "bbox": [267, 195, 24, 8], "iscrowd": 0}, {"id": 1784241, "category_id": 20, "area": 40, "bbox": [376, 195, 7, 13], "iscrowd": 0}, {"id": 680114, "category_id": 20, "area": 577, "bbox": [109, 211, 45, 58], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 56424, "bbox": [297, 276, 386, 228], "iscrowd": 0}, {"id": 1454079, "category_id": 57, "area": 14746, "bbox": [247, 229, 270, 110], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 512, "bbox": [202, 63, 63, 20], "iscrowd": 0}, {"id": 47871, "category_id": 83, "area": 705, "bbox": [201, 44, 78, 23], "iscrowd": 0}, {"id": 773102, "category_id": 83, "area": 1114, "bbox": [202, 18, 95, 29], "iscrowd": 0}, {"id": 44799, "category_id": 83, "area": 522, "bbox": [294, 64, 63, 24], "iscrowd": 0}, {"id": 1941729, "category_id": 83, "area": 767, "bbox": [315, 45, 75, 28], "iscrowd": 0}, {"id": 568315, "category_id": 83, "area": 1077, "bbox": [340, 21, 91, 35], "iscrowd": 0}, {"id": 633585, "category_id": 83, "area": 1312, "bbox": [389, 0, 102, 31], "iscrowd": 0}, {"id": 43775, "category_id": 83, "area": 727, "bbox": [204, 0, 86, 16], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 924, "bbox": [494, 205, 29, 62], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 97, "bbox": [268, 92, 10, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00001376", "file_name": "ADE_val_00001376.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 44233, "bbox": [0, 81, 682, 245], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 112175, "bbox": [1, 226, 668, 285], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 83830, "bbox": [0, 0, 682, 157], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 503, "bbox": [432, 193, 22, 30], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 8612, "bbox": [224, 273, 228, 50], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 1040, "bbox": [239, 181, 65, 42], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 152, "bbox": [338, 201, 11, 21], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 185, "bbox": [386, 206, 9, 26], "iscrowd": 0}, {"id": 16711913, "category_id": 11, "area": 569, "bbox": [449, 220, 33, 30], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 376, "bbox": [127, 139, 6, 77], "iscrowd": 0}, {"id": 2096896, "category_id": 15, "area": 4170, "bbox": [165, 143, 44, 115], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 167, "bbox": [344, 205, 20, 17], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 5029, "bbox": [612, 275, 70, 194], "iscrowd": 0}, {"id": 10683, "category_id": 20, "area": 7437, "bbox": [622, 315, 60, 196], "iscrowd": 0}, {"id": 1857244, "category_id": 20, "area": 5027, "bbox": [40, 215, 109, 58], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2372, "bbox": [43, 123, 32, 81], "iscrowd": 0}, {"id": 4393727, "category_id": 23, "area": 1559, "bbox": [5, 124, 26, 63], "iscrowd": 0}, {"id": 2691839, "category_id": 23, "area": 419, "bbox": [111, 143, 9, 62], "iscrowd": 0}, {"id": 1900773, "category_id": 23, "area": 127, "bbox": [468, 153, 7, 21], "iscrowd": 0}, {"id": 2818303, "category_id": 23, "area": 128, "bbox": [478, 175, 8, 18], "iscrowd": 0}, {"id": 5247737, "category_id": 23, "area": 531, "bbox": [489, 181, 13, 45], "iscrowd": 0}, {"id": 3149311, "category_id": 23, "area": 1224, "bbox": [508, 149, 22, 65], "iscrowd": 0}, {"id": 2034943, "category_id": 23, "area": 2406, "bbox": [532, 147, 44, 65], "iscrowd": 0}, {"id": 4130040, "category_id": 23, "area": 1536, "bbox": [580, 144, 26, 66], "iscrowd": 0}, {"id": 3417069, "category_id": 23, "area": 349, "bbox": [614, 185, 16, 24], "iscrowd": 0}, {"id": 1508863, "category_id": 23, "area": 531, "bbox": [638, 181, 17, 34], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 2320, "bbox": [113, 215, 76, 58], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 2413, "bbox": [486, 247, 50, 60], "iscrowd": 0}, {"id": 15135521, "category_id": 31, "area": 2647, "bbox": [447, 217, 84, 72], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 814, "bbox": [315, 103, 41, 63], "iscrowd": 0}, {"id": 65474, "category_id": 37, "area": 161, "bbox": [522, 208, 22, 10], "iscrowd": 0}, {"id": 65495, "category_id": 37, "area": 307, "bbox": [341, 174, 18, 33], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 3647, "bbox": [251, 135, 87, 87], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 7151, "bbox": [269, 222, 139, 89], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 264, "bbox": [460, 189, 21, 20], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 86, "bbox": [454, 85, 18, 6], "iscrowd": 0}, {"id": 38655, "category_id": 83, "area": 59, "bbox": [413, 105, 14, 5], "iscrowd": 0}, {"id": 631807, "category_id": 83, "area": 42, "bbox": [382, 119, 12, 4], "iscrowd": 0}, {"id": 42751, "category_id": 83, "area": 98, "bbox": [230, 77, 19, 6], "iscrowd": 0}, {"id": 763382, "category_id": 83, "area": 63, "bbox": [238, 99, 16, 5], "iscrowd": 0}, {"id": 1227261, "category_id": 83, "area": 42, "bbox": [245, 115, 12, 4], "iscrowd": 0}, {"id": 47609, "category_id": 83, "area": 67, "bbox": [48, 76, 10, 7], "iscrowd": 0}, {"id": 1622015, "category_id": 83, "area": 78, "bbox": [85, 93, 11, 8], "iscrowd": 0}, {"id": 1026047, "category_id": 83, "area": 86, "bbox": [111, 101, 10, 11], "iscrowd": 0}, {"id": 40191, "category_id": 83, "area": 54, "bbox": [133, 111, 7, 8], "iscrowd": 0}, {"id": 51711, "category_id": 83, "area": 43, "bbox": [147, 117, 8, 8], "iscrowd": 0}, {"id": 1349631, "category_id": 83, "area": 502, "bbox": [398, 11, 44, 14], "iscrowd": 0}, {"id": 45026, "category_id": 83, "area": 23, "bbox": [272, 134, 9, 3], "iscrowd": 0}, {"id": 47854, "category_id": 83, "area": 14, "bbox": [271, 138, 6, 3], "iscrowd": 0}, {"id": 40447, "category_id": 83, "area": 18, "bbox": [341, 136, 8, 3], "iscrowd": 0}, {"id": 48638, "category_id": 83, "area": 20, "bbox": [344, 130, 6, 4], "iscrowd": 0}, {"id": 41700, "category_id": 83, "area": 21, "bbox": [160, 126, 6, 5], "iscrowd": 0}, {"id": 47098, "category_id": 83, "area": 24, "bbox": [605, 113, 9, 4], "iscrowd": 0}, {"id": 1413887, "category_id": 83, "area": 20, "bbox": [560, 120, 6, 4], "iscrowd": 0}, {"id": 48365, "category_id": 83, "area": 29, "bbox": [524, 125, 6, 6], "iscrowd": 0}, {"id": 572927, "category_id": 83, "area": 19, "bbox": [496, 131, 7, 4], "iscrowd": 0}, {"id": 43519, "category_id": 83, "area": 21, "bbox": [474, 135, 6, 4], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 877, "bbox": [87, 120, 24, 40], "iscrowd": 0}, {"id": 13303552, "category_id": 90, "area": 554, "bbox": [482, 144, 22, 27], "iscrowd": 0}, {"id": 10813184, "category_id": 90, "area": 1964, "bbox": [607, 123, 47, 46], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 502, "bbox": [430, 222, 18, 33], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 93, "bbox": [466, 207, 8, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001377", "file_name": "ADE_val_00001377.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 32819, "bbox": [0, 1, 302, 126], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 28781, "bbox": [0, 116, 302, 211], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 929, "bbox": [2, 327, 15, 71], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 524, "bbox": [159, 126, 21, 48], "iscrowd": 0}, {"id": 4005541, "category_id": 13, "area": 921, "bbox": [186, 135, 22, 64], "iscrowd": 0}, {"id": 5637022, "category_id": 13, "area": 712, "bbox": [144, 159, 24, 67], "iscrowd": 0}, {"id": 2429572, "category_id": 13, "area": 770, "bbox": [167, 178, 19, 62], "iscrowd": 0}, {"id": 3735701, "category_id": 13, "area": 3072, "bbox": [183, 220, 46, 115], "iscrowd": 0}, {"id": 3351458, "category_id": 13, "area": 3591, "bbox": [119, 204, 48, 129], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 286, "bbox": [132, 108, 30, 14], "iscrowd": 0}, {"id": 14183965, "category_id": 21, "area": 294, "bbox": [178, 111, 24, 14], "iscrowd": 0}, {"id": 12411136, "category_id": 21, "area": 249, "bbox": [227, 116, 23, 14], "iscrowd": 0}, {"id": 14185478, "category_id": 21, "area": 596, "bbox": [254, 105, 30, 25], "iscrowd": 0}, {"id": 11955468, "category_id": 21, "area": 227, "bbox": [289, 105, 13, 23], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 710, "bbox": [105, 123, 23, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00001378", "file_name": "ADE_val_00001378.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 102298, "bbox": [0, 0, 767, 363], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 139039, "bbox": [0, 265, 767, 246], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 16346, "bbox": [326, 0, 440, 78], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 7489, "bbox": [260, 78, 62, 132], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3358, "bbox": [333, 91, 49, 72], "iscrowd": 0}, {"id": 15401214, "category_id": 11, "area": 9384, "bbox": [363, 94, 79, 175], "iscrowd": 0}, {"id": 15602413, "category_id": 11, "area": 11084, "bbox": [235, 216, 161, 91], "iscrowd": 0}, {"id": 16711926, "category_id": 11, "area": 56106, "bbox": [25, 45, 210, 305], "iscrowd": 0}, {"id": 16720602, "category_id": 11, "area": 1907, "bbox": [234, 77, 23, 83], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4054, "bbox": [746, 89, 21, 201], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3421, "bbox": [311, 342, 138, 130], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1669, "bbox": [386, 336, 66, 92], "iscrowd": 0}, {"id": 798935, "category_id": 20, "area": 895, "bbox": [323, 368, 61, 70], "iscrowd": 0}, {"id": 89041, "category_id": 20, "area": 2504, "bbox": [415, 364, 65, 121], "iscrowd": 0}, {"id": 17584, "category_id": 20, "area": 2370, "bbox": [242, 358, 63, 119], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1152, "bbox": [320, 324, 35, 38], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 268, "bbox": [602, 156, 19, 17], "iscrowd": 0}, {"id": 12517631, "category_id": 120, "area": 237, "bbox": [621, 157, 18, 17], "iscrowd": 0}, {"id": 12124415, "category_id": 120, "area": 20, "bbox": [657, 259, 6, 5], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 406, "bbox": [740, 290, 27, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00001379", "file_name": "ADE_val_00001379.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 75674, "bbox": [0, 168, 510, 454], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 97654, "bbox": [2, 538, 509, 240], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 101364, "bbox": [0, 0, 455, 281], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 5113, "bbox": [205, 464, 72, 108], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 7639, "bbox": [129, 526, 128, 107], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 17253, "bbox": [436, 0, 74, 298], "iscrowd": 0}, {"id": 6291685, "category_id": 25, "area": 43426, "bbox": [172, 251, 339, 194], "iscrowd": 0}, {"id": 3081215, "category_id": 25, "area": 1857, "bbox": [1, 243, 93, 52], "iscrowd": 0}, {"id": 2752761, "category_id": 25, "area": 1179, "bbox": [6, 179, 86, 64], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 385, "bbox": [396, 290, 58, 17], "iscrowd": 0}, {"id": 2091464, "category_id": 37, "area": 346, "bbox": [272, 301, 25, 27], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 275, "bbox": [422, 328, 18, 18], "iscrowd": 0}, {"id": 3276564, "category_id": 42, "area": 160, "bbox": [441, 331, 15, 13], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 17384, "bbox": [270, 441, 153, 132], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 291, "bbox": [376, 271, 13, 30], "iscrowd": 0}, {"id": 2490142, "category_id": 99, "area": 244, "bbox": [347, 278, 12, 27], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 3728, "bbox": [429, 440, 83, 139], "iscrowd": 0}]}, {"image_id": "ADE_val_00001380", "file_name": "ADE_val_00001380.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 118802, "bbox": [1, 46, 681, 407], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 31417, "bbox": [1, 372, 589, 139], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 58239, "bbox": [0, 0, 682, 119], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 9396, "bbox": [330, 120, 132, 180], "iscrowd": 0}, {"id": 15466240, "category_id": 123, "area": 2256, "bbox": [507, 379, 35, 86], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3241, "bbox": [52, 121, 58, 83], "iscrowd": 0}, {"id": 15990988, "category_id": 11, "area": 5844, "bbox": [0, 103, 71, 90], "iscrowd": 0}, {"id": 16720119, "category_id": 11, "area": 444, "bbox": [161, 307, 31, 29], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1845, "bbox": [250, 279, 82, 77], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 30873, "bbox": [360, 175, 160, 295], "iscrowd": 0}, {"id": 5636332, "category_id": 25, "area": 1469, "bbox": [115, 138, 214, 23], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 841, "bbox": [580, 381, 26, 38], "iscrowd": 0}, {"id": 65283, "category_id": 42, "area": 1995, "bbox": [583, 317, 74, 67], "iscrowd": 0}, {"id": 3014400, "category_id": 42, "area": 2670, "bbox": [600, 335, 79, 37], "iscrowd": 0}, {"id": 3143168, "category_id": 42, "area": 4028, "bbox": [606, 369, 72, 63], "iscrowd": 0}, {"id": 720665, "category_id": 42, "area": 4939, "bbox": [590, 413, 90, 76], "iscrowd": 0}, {"id": 2752256, "category_id": 42, "area": 2765, "bbox": [584, 475, 96, 36], "iscrowd": 0}, {"id": 1244672, "category_id": 42, "area": 2149, "bbox": [79, 353, 48, 56], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 3727, "bbox": [417, 189, 104, 47], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 43252, "bbox": [163, 237, 247, 274], "iscrowd": 0}]}, {"image_id": "ADE_val_00001381", "file_name": "ADE_val_00001381.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 64441, "bbox": [1, 0, 681, 150], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 5742, "bbox": [1, 438, 165, 74], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 44196, "bbox": [157, 63, 154, 448], "iscrowd": 0}, {"id": 3604659, "category_id": 13, "area": 32098, "bbox": [293, 119, 132, 391], "iscrowd": 0}]}, {"image_id": "ADE_val_00001382", "file_name": "ADE_val_00001382.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 42583, "bbox": [2, 26, 299, 256], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 35875, "bbox": [0, 1, 482, 196], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 11374, "bbox": [282, 35, 199, 201], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 2239, "bbox": [420, 214, 62, 81], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 227, "bbox": [397, 229, 40, 13], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2901, "bbox": [21, 255, 117, 39], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1211, "bbox": [302, 214, 62, 24], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 5422, "bbox": [2, 280, 123, 58], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 1152, "bbox": [365, 188, 24, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00001383", "file_name": "ADE_val_00001383.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 108998, "bbox": [0, 1, 682, 242], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 15039, "bbox": [0, 88, 682, 277], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 91039, "bbox": [0, 294, 676, 217], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1578, "bbox": [28, 287, 584, 77], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 17511, "bbox": [0, 191, 638, 133], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 13500, "bbox": [620, 247, 63, 264], "iscrowd": 0}]}, {"image_id": "ADE_val_00001384", "file_name": "ADE_val_00001384.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 17134, "bbox": [0, 1, 436, 171], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 12966, "bbox": [0, 21, 436, 196], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 5689, "bbox": [364, 191, 72, 104], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 18997, "bbox": [2, 214, 412, 81], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1112, "bbox": [76, 134, 42, 43], "iscrowd": 0}, {"id": 2162853, "category_id": 13, "area": 153, "bbox": [132, 159, 17, 15], "iscrowd": 0}, {"id": 5046432, "category_id": 13, "area": 2003, "bbox": [176, 119, 57, 57], "iscrowd": 0}, {"id": 2883716, "category_id": 13, "area": 1302, "bbox": [261, 123, 42, 48], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 542, "bbox": [393, 178, 35, 22], "iscrowd": 0}, {"id": 14904576, "category_id": 21, "area": 340, "bbox": [364, 185, 29, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001385", "file_name": "ADE_val_00001385.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 59100, "bbox": [2, 23, 626, 295], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 107539, "bbox": [0, 0, 682, 267], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6471, "bbox": [252, 169, 430, 110], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 717, "bbox": [292, 272, 30, 32], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 112830, "bbox": [0, 264, 682, 247], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 1896, "bbox": [316, 233, 80, 62], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 24807, "bbox": [270, 250, 250, 146], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 3063, "bbox": [593, 133, 48, 150], "iscrowd": 0}, {"id": 9502975, "category_id": 44, "area": 1265, "bbox": [231, 271, 60, 23], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 8005, "bbox": [0, 301, 295, 51], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 2617, "bbox": [340, 65, 89, 188], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 4566, "bbox": [41, 191, 215, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00001386", "file_name": "ADE_val_00001386.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 22558, "bbox": [0, 0, 310, 90], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 14857, "bbox": [0, 60, 310, 105], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 16077, "bbox": [0, 128, 310, 79], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1019, "bbox": [180, 98, 21, 53], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 280, "bbox": [103, 145, 43, 37], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 78, "bbox": [92, 155, 20, 22], "iscrowd": 0}, {"id": 12211, "category_id": 20, "area": 315, "bbox": [146, 143, 26, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00001387", "file_name": "ADE_val_00001387.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 9827, "bbox": [0, 15, 250, 110], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5744, "bbox": [0, 124, 250, 70], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3357, "bbox": [0, 0, 250, 18], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 10076, "bbox": [0, 79, 113, 114], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1040, "bbox": [140, 34, 37, 47], "iscrowd": 0}, {"id": 3541645, "category_id": 13, "area": 1900, "bbox": [110, 38, 33, 104], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 457, "bbox": [98, 2, 69, 7], "iscrowd": 0}, {"id": 237297, "category_id": 83, "area": 205, "bbox": [0, 2, 39, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00001388", "file_name": "ADE_val_00001388.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 92149, "bbox": [0, 0, 682, 172], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 46775, "bbox": [18, 110, 663, 150], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 207697, "bbox": [0, 171, 682, 339], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 261, "bbox": [352, 258, 12, 39], "iscrowd": 0}]}, {"image_id": "ADE_val_00001389", "file_name": "ADE_val_00001389.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 420, "bbox": [243, 0, 31, 25], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 32791, "bbox": [0, 0, 683, 100], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 313844, "bbox": [0, 26, 683, 486], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 912, "bbox": [77, 38, 164, 16], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 51, "bbox": [211, 47, 4, 17], "iscrowd": 0}, {"id": 5572257, "category_id": 13, "area": 73, "bbox": [204, 47, 7, 18], "iscrowd": 0}, {"id": 5375627, "category_id": 13, "area": 42, "bbox": [475, 39, 6, 10], "iscrowd": 0}, {"id": 5898416, "category_id": 13, "area": 72, "bbox": [216, 45, 6, 19], "iscrowd": 0}, {"id": 5051266, "category_id": 13, "area": 41, "bbox": [193, 44, 5, 11], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 184, "bbox": [184, 46, 23, 18], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 333, "bbox": [350, 137, 18, 80], "iscrowd": 0}]}, {"image_id": "ADE_val_00001390", "file_name": "ADE_val_00001390.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 33822, "bbox": [0, 206, 764, 117], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 173968, "bbox": [0, 0, 765, 275], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 14706, "bbox": [0, 196, 592, 98], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 152255, "bbox": [2, 286, 763, 224], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 12245, "bbox": [645, 2, 86, 318], "iscrowd": 0}]}, {"image_id": "ADE_val_00001391", "file_name": "ADE_val_00001391.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 24621, "bbox": [0, 0, 449, 161], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3045, "bbox": [0, 152, 116, 128], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 71795, "bbox": [0, 21, 449, 268], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 20712, "bbox": [2, 79, 447, 210], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 666, "bbox": [308, 97, 48, 18], "iscrowd": 0}, {"id": 65134, "category_id": 113, "area": 652, "bbox": [309, 79, 49, 21], "iscrowd": 0}, {"id": 63338, "category_id": 113, "area": 379, "bbox": [360, 86, 29, 16], "iscrowd": 0}, {"id": 716912, "category_id": 113, "area": 525, "bbox": [298, 109, 48, 17], "iscrowd": 0}, {"id": 714086, "category_id": 113, "area": 4428, "bbox": [49, 169, 121, 59], "iscrowd": 0}, {"id": 63307, "category_id": 113, "area": 831, "bbox": [221, 107, 38, 26], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 125, "bbox": [34, 247, 12, 12], "iscrowd": 0}, {"id": 16056575, "category_id": 126, "area": 126, "bbox": [51, 238, 12, 12], "iscrowd": 0}, {"id": 16711929, "category_id": 126, "area": 166, "bbox": [17, 242, 13, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001392", "file_name": "ADE_val_00001392.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 13706, "bbox": [46, 1, 400, 104], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 13045, "bbox": [60, 105, 164, 150], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 14959, "bbox": [0, 0, 323, 77], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 70939, "bbox": [1, 5, 447, 251], "iscrowd": 0}]}, {"image_id": "ADE_val_00001393", "file_name": "ADE_val_00001393.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 3062, "bbox": [0, 0, 479, 93], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 32630, "bbox": [0, 1, 479, 170], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 1000, "bbox": [0, 190, 170, 12], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 40466, "bbox": [0, 165, 479, 197], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 6806, "bbox": [337, 234, 142, 128], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 8800, "bbox": [144, 182, 199, 150], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 52098, "bbox": [46, 1, 433, 266], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 5199, "bbox": [72, 213, 104, 77], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2013, "bbox": [379, 148, 37, 84], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1075, "bbox": [446, 196, 32, 59], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 42, "bbox": [455, 167, 14, 5], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2677, "bbox": [192, 102, 63, 44], "iscrowd": 0}, {"id": 10420477, "category_id": 44, "area": 1722, "bbox": [407, 195, 38, 54], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1341, "bbox": [102, 281, 38, 50], "iscrowd": 0}, {"id": 922111, "category_id": 67, "area": 1201, "bbox": [35, 274, 51, 47], "iscrowd": 0}, {"id": 1249535, "category_id": 67, "area": 860, "bbox": [2, 288, 35, 34], "iscrowd": 0}, {"id": 1049339, "category_id": 67, "area": 794, "bbox": [45, 322, 49, 21], "iscrowd": 0}, {"id": 1181695, "category_id": 67, "area": 508, "bbox": [360, 230, 46, 18], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 80, "bbox": [413, 106, 13, 8], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 791, "bbox": [26, 1, 16, 202], "iscrowd": 0}]}, {"image_id": "ADE_val_00001394", "file_name": "ADE_val_00001394.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 30470, "bbox": [0, 107, 479, 210], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 47232, "bbox": [2, 178, 477, 181], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 58114, "bbox": [0, 0, 479, 137], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2094, "bbox": [329, 147, 85, 94], "iscrowd": 0}, {"id": 14083839, "category_id": 9, "area": 555, "bbox": [186, 148, 39, 52], "iscrowd": 0}, {"id": 15913202, "category_id": 9, "area": 136, "bbox": [118, 148, 17, 12], "iscrowd": 0}, {"id": 16765949, "category_id": 9, "area": 62, "bbox": [79, 146, 11, 8], "iscrowd": 0}, {"id": 16763389, "category_id": 9, "area": 63, "bbox": [52, 144, 10, 10], "iscrowd": 0}, {"id": 15191268, "category_id": 9, "area": 51, "bbox": [32, 141, 8, 9], "iscrowd": 0}, {"id": 14405361, "category_id": 9, "area": 44, "bbox": [17, 139, 6, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00001395", "file_name": "ADE_val_00001395.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 5189, "bbox": [2, 18, 253, 162], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17133, "bbox": [2, 153, 253, 103], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 11335, "bbox": [0, 0, 255, 66], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 9060, "bbox": [132, 37, 122, 112], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 617, "bbox": [196, 128, 37, 46], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 5951, "bbox": [2, 67, 113, 93], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 69, "bbox": [143, 9, 11, 8], "iscrowd": 0}, {"id": 51455, "category_id": 83, "area": 15, "bbox": [212, 23, 6, 3], "iscrowd": 0}, {"id": 571375, "category_id": 83, "area": 10, "bbox": [160, 43, 5, 3], "iscrowd": 0}, {"id": 2017761, "category_id": 83, "area": 9, "bbox": [129, 55, 4, 3], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1094, "bbox": [225, 141, 29, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00001396", "file_name": "ADE_val_00001396.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 13662, "bbox": [0, 0, 300, 118], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 769, "bbox": [16, 6, 284, 77], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 22069, "bbox": [0, 123, 300, 102], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 30656, "bbox": [0, 27, 300, 137], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 71, "bbox": [118, 82, 9, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00001397", "file_name": "ADE_val_00001397.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 133427, "bbox": [0, 0, 431, 575], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 27875, "bbox": [2, 421, 327, 154], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 28116, "bbox": [0, 0, 368, 136], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 27389, "bbox": [339, 24, 65, 551], "iscrowd": 0}, {"id": 4909568, "category_id": 15, "area": 2269, "bbox": [304, 159, 13, 308], "iscrowd": 0}, {"id": 4648192, "category_id": 15, "area": 23875, "bbox": [183, 170, 98, 252], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 110, "bbox": [216, 70, 17, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00001398", "file_name": "ADE_val_00001398.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 65952, "bbox": [0, 136, 671, 185], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 129298, "bbox": [0, 1, 682, 267], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5620, "bbox": [518, 185, 150, 69], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 128428, "bbox": [0, 311, 683, 200], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 510, "bbox": [158, 275, 16, 49], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1792, "bbox": [46, 282, 63, 40], "iscrowd": 0}, {"id": 12418318, "category_id": 21, "area": 4156, "bbox": [0, 285, 62, 82], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 6124, "bbox": [509, 245, 106, 84], "iscrowd": 0}]}, {"image_id": "ADE_val_00001399", "file_name": "ADE_val_00001399.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 8975, "bbox": [8, 148, 693, 54], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 108947, "bbox": [0, 0, 701, 190], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 3405, "bbox": [562, 151, 139, 32], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 73341, "bbox": [0, 193, 701, 229], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 967, "bbox": [573, 181, 37, 52], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 818, "bbox": [440, 18, 49, 86], "iscrowd": 0}, {"id": 60415, "category_id": 104, "area": 20298, "bbox": [386, 1, 180, 246], "iscrowd": 0}]}, {"image_id": "ADE_val_00001400", "file_name": "ADE_val_00001400.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14023, "bbox": [0, 0, 310, 139], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 428, "bbox": [97, 216, 72, 28], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6793, "bbox": [226, 45, 84, 122], "iscrowd": 0}, {"id": 4718725, "category_id": 13, "area": 11415, "bbox": [6, 32, 80, 210], "iscrowd": 0}, {"id": 3807388, "category_id": 13, "area": 11036, "bbox": [81, 43, 94, 200], "iscrowd": 0}]}, {"image_id": "ADE_val_00001401", "file_name": "ADE_val_00001401.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 12118, "bbox": [0, 127, 770, 163], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 60677, "bbox": [0, 252, 770, 256], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 96940, "bbox": [1, 0, 769, 175], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 633, "bbox": [678, 175, 27, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00001402", "file_name": "ADE_val_00001402.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 189, "bbox": [559, 195, 23, 9], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 88056, "bbox": [0, 0, 767, 147], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 15235, "bbox": [62, 72, 539, 105], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 37283, "bbox": [1, 450, 766, 61], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 59956, "bbox": [0, 115, 767, 108], "iscrowd": 0}]}, {"image_id": "ADE_val_00001403", "file_name": "ADE_val_00001403.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 17038, "bbox": [0, 0, 353, 56], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 7232, "bbox": [0, 43, 353, 74], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 28722, "bbox": [0, 79, 352, 169], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 23093, "bbox": [0, 29, 352, 204], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3561, "bbox": [59, 46, 77, 110], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 328, "bbox": [202, 152, 23, 18], "iscrowd": 0}, {"id": 15338462, "category_id": 126, "area": 146, "bbox": [181, 93, 14, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001404", "file_name": "ADE_val_00001404.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 8360, "bbox": [2, 263, 282, 71], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 1033, "bbox": [274, 235, 95, 20], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 56667, "bbox": [1, 1, 682, 242], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 44124, "bbox": [2, 6, 680, 279], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 148684, "bbox": [1, 260, 682, 251], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 3186, "bbox": [437, 252, 246, 65], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 1499, "bbox": [245, 224, 144, 26], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 53754, "bbox": [1, 113, 620, 183], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 366, "bbox": [179, 243, 20, 22], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 3373, "bbox": [335, 264, 348, 33], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 497, "bbox": [235, 216, 25, 23], "iscrowd": 0}, {"id": 10690042, "category_id": 44, "area": 175, "bbox": [439, 226, 18, 33], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1631, "bbox": [590, 1, 19, 285], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 20174, "bbox": [1, 80, 627, 39], "iscrowd": 0}]}, {"image_id": "ADE_val_00001405", "file_name": "ADE_val_00001405.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 16082, "bbox": [0, 0, 256, 76], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 21987, "bbox": [0, 32, 256, 224], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 354, "bbox": [0, 224, 39, 31], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 19425, "bbox": [0, 102, 256, 99], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 376, "bbox": [172, 230, 33, 17], "iscrowd": 0}, {"id": 13786368, "category_id": 21, "area": 339, "bbox": [215, 231, 30, 17], "iscrowd": 0}, {"id": 15095552, "category_id": 21, "area": 106, "bbox": [134, 91, 18, 8], "iscrowd": 0}, {"id": 13978890, "category_id": 21, "area": 90, "bbox": [194, 93, 19, 6], "iscrowd": 0}, {"id": 13790464, "category_id": 21, "area": 89, "bbox": [228, 77, 17, 6], "iscrowd": 0}, {"id": 14385920, "category_id": 21, "area": 139, "bbox": [109, 89, 21, 8], "iscrowd": 0}, {"id": 13787412, "category_id": 21, "area": 81, "bbox": [181, 85, 19, 5], "iscrowd": 0}, {"id": 11493888, "category_id": 21, "area": 90, "bbox": [216, 92, 15, 9], "iscrowd": 0}, {"id": 12681216, "category_id": 21, "area": 486, "bbox": [73, 148, 48, 15], "iscrowd": 0}, {"id": 14241051, "category_id": 21, "area": 357, "bbox": [24, 145, 37, 14], "iscrowd": 0}, {"id": 11564032, "category_id": 21, "area": 276, "bbox": [133, 114, 36, 11], "iscrowd": 0}, {"id": 12215823, "category_id": 21, "area": 241, "bbox": [174, 130, 35, 10], "iscrowd": 0}, {"id": 13004032, "category_id": 21, "area": 169, "bbox": [173, 114, 28, 10], "iscrowd": 0}, {"id": 14377472, "category_id": 21, "area": 180, "bbox": [235, 108, 21, 15], "iscrowd": 0}, {"id": 14965760, "category_id": 21, "area": 197, "bbox": [2, 142, 21, 13], "iscrowd": 0}, {"id": 13461785, "category_id": 21, "area": 215, "bbox": [207, 126, 28, 11], "iscrowd": 0}, {"id": 13467159, "category_id": 21, "area": 313, "bbox": [208, 136, 39, 12], "iscrowd": 0}, {"id": 15032320, "category_id": 21, "area": 110, "bbox": [2, 130, 13, 10], "iscrowd": 0}, {"id": 12080384, "category_id": 21, "area": 369, "bbox": [202, 144, 37, 15], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1220, "bbox": [4, 220, 83, 35], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 115, "bbox": [0, 197, 5, 24], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 243, "bbox": [154, 180, 24, 74], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 795, "bbox": [94, 133, 52, 21], "iscrowd": 0}, {"id": 65438, "category_id": 103, "area": 271, "bbox": [40, 124, 33, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001406", "file_name": "ADE_val_00001406.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 22449, "bbox": [2, 1, 254, 113], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5956, "bbox": [0, 30, 256, 98], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 28222, "bbox": [2, 119, 254, 136], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 1411, "bbox": [2, 80, 125, 33], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 3233, "bbox": [37, 111, 80, 51], "iscrowd": 0}, {"id": 14319616, "category_id": 21, "area": 30, "bbox": [185, 118, 9, 6], "iscrowd": 0}, {"id": 13465369, "category_id": 21, "area": 142, "bbox": [234, 111, 15, 16], "iscrowd": 0}, {"id": 12216320, "category_id": 21, "area": 723, "bbox": [209, 115, 33, 28], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 945, "bbox": [2, 127, 36, 31], "iscrowd": 0}, {"id": 898039, "category_id": 33, "area": 654, "bbox": [111, 123, 73, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001407", "file_name": "ADE_val_00001407.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 31364, "bbox": [2, 1, 254, 127], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 25787, "bbox": [0, 136, 256, 120], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 2631, "bbox": [0, 118, 253, 25], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 836, "bbox": [203, 119, 53, 31], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 725, "bbox": [2, 136, 132, 14], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 5, "bbox": [59, 106, 1, 5], "iscrowd": 0}]}, {"image_id": "ADE_val_00001408", "file_name": "ADE_val_00001408.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 32358, "bbox": [2, 1, 254, 145], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1734, "bbox": [16, 139, 240, 19], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 24789, "bbox": [0, 145, 256, 111], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 1625, "bbox": [2, 133, 254, 20], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1582, "bbox": [0, 143, 39, 62], "iscrowd": 0}, {"id": 14767879, "category_id": 21, "area": 156, "bbox": [104, 152, 17, 13], "iscrowd": 0}, {"id": 13656064, "category_id": 21, "area": 32, "bbox": [159, 152, 7, 6], "iscrowd": 0}, {"id": 13728260, "category_id": 21, "area": 27, "bbox": [179, 150, 5, 6], "iscrowd": 0}, {"id": 15096832, "category_id": 21, "area": 25, "bbox": [189, 151, 6, 5], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1335, "bbox": [2, 128, 254, 8], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 132, "bbox": [4, 144, 17, 11], "iscrowd": 0}, {"id": 11149541, "category_id": 44, "area": 109, "bbox": [40, 141, 11, 11], "iscrowd": 0}, {"id": 11736545, "category_id": 44, "area": 30, "bbox": [221, 145, 8, 7], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 131, "bbox": [104, 140, 15, 11], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 30, "bbox": [237, 84, 6, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00001409", "file_name": "ADE_val_00001409.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 812, "bbox": [2, 158, 84, 14], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 32552, "bbox": [2, 1, 254, 153], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2002, "bbox": [141, 135, 115, 39], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 18961, "bbox": [2, 165, 254, 91], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 2056, "bbox": [157, 162, 99, 59], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 5979, "bbox": [1, 93, 255, 76], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 79, "bbox": [104, 168, 12, 10], "iscrowd": 0}, {"id": 13330944, "category_id": 21, "area": 41, "bbox": [123, 169, 9, 6], "iscrowd": 0}, {"id": 13915654, "category_id": 21, "area": 44, "bbox": [90, 169, 8, 8], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 194, "bbox": [88, 146, 53, 24], "iscrowd": 0}, {"id": 10950653, "category_id": 44, "area": 62, "bbox": [110, 155, 9, 7], "iscrowd": 0}, {"id": 8069375, "category_id": 44, "area": 53, "bbox": [230, 165, 9, 11], "iscrowd": 0}, {"id": 11018495, "category_id": 44, "area": 29, "bbox": [199, 158, 9, 12], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 70, "bbox": [51, 74, 11, 83], "iscrowd": 0}, {"id": 16342286, "category_id": 88, "area": 84, "bbox": [184, 121, 11, 34], "iscrowd": 0}, {"id": 16737302, "category_id": 88, "area": 141, "bbox": [210, 108, 8, 64], "iscrowd": 0}, {"id": 14964509, "category_id": 88, "area": 104, "bbox": [84, 120, 7, 34], "iscrowd": 0}, {"id": 16074257, "category_id": 88, "area": 90, "bbox": [233, 134, 5, 30], "iscrowd": 0}, {"id": 15088896, "category_id": 88, "area": 45, "bbox": [155, 139, 7, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001410", "file_name": "ADE_val_00001410.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 25712, "bbox": [2, 1, 254, 128], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 8958, "bbox": [0, 51, 256, 94], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 27769, "bbox": [2, 130, 254, 126], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1222, "bbox": [118, 131, 43, 36], "iscrowd": 0}, {"id": 14382336, "category_id": 21, "area": 598, "bbox": [177, 132, 32, 26], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 7, "bbox": [212, 85, 2, 13], "iscrowd": 0}, {"id": 16732416, "category_id": 88, "area": 28, "bbox": [189, 87, 7, 15], "iscrowd": 0}, {"id": 16737024, "category_id": 88, "area": 20, "bbox": [174, 103, 4, 15], "iscrowd": 0}, {"id": 16730641, "category_id": 88, "area": 20, "bbox": [60, 89, 4, 13], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 24, "bbox": [173, 109, 3, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00001411", "file_name": "ADE_val_00001411.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 25957, "bbox": [2, 1, 254, 146], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3694, "bbox": [0, 85, 256, 79], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 22541, "bbox": [0, 153, 256, 103], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 4465, "bbox": [0, 118, 237, 40], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 68, "bbox": [119, 114, 14, 6], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 444, "bbox": [0, 153, 75, 10], "iscrowd": 0}, {"id": 42751, "category_id": 33, "area": 4758, "bbox": [0, 97, 243, 28], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 56, "bbox": [67, 143, 35, 6], "iscrowd": 0}]}, {"image_id": "ADE_val_00001412", "file_name": "ADE_val_00001412.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 32226, "bbox": [2, 1, 253, 147], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6519, "bbox": [2, 93, 254, 69], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 19442, "bbox": [2, 148, 254, 108], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 319, "bbox": [231, 153, 25, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001413", "file_name": "ADE_val_00001413.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 21412, "bbox": [0, 1, 256, 100], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 35934, "bbox": [2, 85, 254, 171], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1356, "bbox": [153, 167, 47, 35], "iscrowd": 0}, {"id": 13324807, "category_id": 21, "area": 1319, "bbox": [59, 170, 48, 34], "iscrowd": 0}, {"id": 15040520, "category_id": 21, "area": 962, "bbox": [135, 140, 39, 28], "iscrowd": 0}, {"id": 11952390, "category_id": 21, "area": 965, "bbox": [159, 118, 38, 32], "iscrowd": 0}, {"id": 14975764, "category_id": 21, "area": 469, "bbox": [205, 108, 27, 21], "iscrowd": 0}, {"id": 12221696, "category_id": 21, "area": 227, "bbox": [246, 116, 10, 26], "iscrowd": 0}, {"id": 15028240, "category_id": 21, "area": 272, "bbox": [2, 114, 15, 20], "iscrowd": 0}, {"id": 12538368, "category_id": 21, "area": 299, "bbox": [111, 79, 20, 17], "iscrowd": 0}, {"id": 12929295, "category_id": 21, "area": 186, "bbox": [163, 81, 17, 13], "iscrowd": 0}, {"id": 14582528, "category_id": 21, "area": 81, "bbox": [156, 80, 9, 12], "iscrowd": 0}, {"id": 12285972, "category_id": 21, "area": 110, "bbox": [227, 79, 15, 10], "iscrowd": 0}, {"id": 11825683, "category_id": 21, "area": 154, "bbox": [194, 80, 18, 11], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 590, "bbox": [13, 55, 31, 20], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 504, "bbox": [176, 64, 24, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001414", "file_name": "ADE_val_00001414.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 33723, "bbox": [2, 1, 254, 148], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4849, "bbox": [2, 124, 254, 43], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 20580, "bbox": [2, 159, 254, 97], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 2123, "bbox": [53, 129, 164, 30], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 1505, "bbox": [151, 162, 105, 29], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1542, "bbox": [2, 161, 129, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001415", "file_name": "ADE_val_00001415.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 17269, "bbox": [2, 1, 254, 77], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5081, "bbox": [2, 53, 254, 89], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 24221, "bbox": [2, 144, 254, 112], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 6109, "bbox": [2, 129, 254, 44], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 5095, "bbox": [0, 94, 256, 48], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 5895, "bbox": [0, 65, 256, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00001416", "file_name": "ADE_val_00001416.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 2485, "bbox": [209, 153, 47, 103], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 26902, "bbox": [2, 1, 254, 115], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 21802, "bbox": [2, 144, 254, 112], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2334, "bbox": [2, 92, 50, 58], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 6882, "bbox": [2, 111, 222, 68], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 3957, "bbox": [60, 105, 196, 40], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 27, "bbox": [245, 142, 7, 4], "iscrowd": 0}]}, {"image_id": "ADE_val_00001417", "file_name": "ADE_val_00001417.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 738, "bbox": [77, 393, 509, 20], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 235672, "bbox": [0, 0, 682, 405], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1593, "bbox": [565, 365, 117, 40], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 37817, "bbox": [0, 410, 682, 101], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 262, "bbox": [470, 383, 113, 19], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 15504, "bbox": [0, 375, 498, 72], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 24, "bbox": [550, 410, 6, 5], "iscrowd": 0}, {"id": 13985818, "category_id": 21, "area": 90, "bbox": [558, 411, 13, 10], "iscrowd": 0}, {"id": 11492884, "category_id": 21, "area": 312, "bbox": [570, 407, 20, 22], "iscrowd": 0}, {"id": 13387776, "category_id": 21, "area": 1244, "bbox": [587, 399, 42, 38], "iscrowd": 0}, {"id": 12548864, "category_id": 21, "area": 2481, "bbox": [624, 402, 59, 50], "iscrowd": 0}, {"id": 14378752, "category_id": 21, "area": 116, "bbox": [652, 399, 31, 13], "iscrowd": 0}, {"id": 14771712, "category_id": 21, "area": 187, "bbox": [526, 403, 24, 26], "iscrowd": 0}, {"id": 11955223, "category_id": 21, "area": 1130, "bbox": [506, 408, 42, 33], "iscrowd": 0}, {"id": 12611072, "category_id": 21, "area": 9875, "bbox": [242, 399, 133, 94], "iscrowd": 0}, {"id": 11488771, "category_id": 21, "area": 1290, "bbox": [122, 411, 63, 27], "iscrowd": 0}, {"id": 12218112, "category_id": 21, "area": 131, "bbox": [488, 413, 14, 11], "iscrowd": 0}, {"id": 12021504, "category_id": 21, "area": 32, "bbox": [555, 411, 5, 8], "iscrowd": 0}, {"id": 13788683, "category_id": 21, "area": 52, "bbox": [548, 411, 6, 13], "iscrowd": 0}, {"id": 12547606, "category_id": 21, "area": 173, "bbox": [622, 397, 21, 14], "iscrowd": 0}, {"id": 14055424, "category_id": 21, "area": 81, "bbox": [416, 413, 14, 7], "iscrowd": 0}, {"id": 12470272, "category_id": 21, "area": 79, "bbox": [426, 410, 13, 9], "iscrowd": 0}, {"id": 12086784, "category_id": 21, "area": 96, "bbox": [398, 415, 17, 8], "iscrowd": 0}, {"id": 14114304, "category_id": 21, "area": 119, "bbox": [380, 415, 18, 8], "iscrowd": 0}, {"id": 14177536, "category_id": 21, "area": 120, "bbox": [358, 412, 18, 7], "iscrowd": 0}, {"id": 14174994, "category_id": 21, "area": 121, "bbox": [365, 404, 16, 10], "iscrowd": 0}, {"id": 14179584, "category_id": 21, "area": 25, "bbox": [392, 414, 9, 5], "iscrowd": 0}, {"id": 14373888, "category_id": 21, "area": 1841, "bbox": [9, 412, 74, 33], "iscrowd": 0}, {"id": 14449181, "category_id": 21, "area": 130, "bbox": [2, 421, 9, 23], "iscrowd": 0}, {"id": 13454848, "category_id": 21, "area": 53, "bbox": [499, 412, 9, 8], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 9545, "bbox": [0, 411, 508, 72], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 23310, "bbox": [0, 236, 326, 181], "iscrowd": 0}, {"id": 11206911, "category_id": 44, "area": 826, "bbox": [489, 389, 75, 16], "iscrowd": 0}, {"id": 10095075, "category_id": 44, "area": 677, "bbox": [609, 376, 32, 22], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 68, "bbox": [590, 395, 16, 10], "iscrowd": 0}, {"id": 1835254, "category_id": 84, "area": 177, "bbox": [572, 397, 18, 12], "iscrowd": 0}, {"id": 749, "category_id": 84, "area": 121, "bbox": [406, 406, 16, 10], "iscrowd": 0}, {"id": 2234339, "category_id": 84, "area": 51, "bbox": [438, 408, 9, 7], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 26, "bbox": [582, 367, 22, 6], "iscrowd": 0}, {"id": 16737280, "category_id": 88, "area": 71, "bbox": [265, 368, 28, 36], "iscrowd": 0}, {"id": 16731648, "category_id": 88, "area": 67, "bbox": [315, 371, 23, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00001418", "file_name": "ADE_val_00001418.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 24412, "bbox": [2, 1, 254, 113], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 444, "bbox": [42, 88, 214, 93], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 2472, "bbox": [0, 196, 81, 60], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 23284, "bbox": [2, 148, 254, 108], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 14071, "bbox": [2, 87, 254, 85], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 2, "bbox": [167, 202, 1, 2], "iscrowd": 0}]}, {"image_id": "ADE_val_00001419", "file_name": "ADE_val_00001419.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 23308, "bbox": [2, 1, 254, 103], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 10064, "bbox": [2, 77, 247, 179], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 31310, "bbox": [2, 90, 254, 166], "iscrowd": 0}]}, {"image_id": "ADE_val_00001420", "file_name": "ADE_val_00001420.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 33559, "bbox": [2, 1, 478, 285], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 34697, "bbox": [66, 252, 330, 138], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 15950, "bbox": [80, 1, 298, 63], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1678, "bbox": [327, 155, 53, 47], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 9211, "bbox": [2, 3, 307, 95], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12076, "bbox": [165, 94, 141, 94], "iscrowd": 0}, {"id": 16511966, "category_id": 9, "area": 9139, "bbox": [2, 8, 85, 196], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 23592, "bbox": [327, 192, 173, 198], "iscrowd": 0}, {"id": 16711926, "category_id": 11, "area": 5231, "bbox": [480, 1, 19, 299], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 8180, "bbox": [2, 240, 76, 150], "iscrowd": 0}, {"id": 16048, "category_id": 20, "area": 6764, "bbox": [145, 207, 108, 146], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6966, "bbox": [423, 1, 57, 143], "iscrowd": 0}, {"id": 3088383, "category_id": 23, "area": 3250, "bbox": [378, 48, 39, 101], "iscrowd": 0}, {"id": 2171106, "category_id": 23, "area": 1027, "bbox": [314, 106, 34, 31], "iscrowd": 0}, {"id": 3408127, "category_id": 23, "area": 1566, "bbox": [129, 100, 31, 52], "iscrowd": 0}, {"id": 5177577, "category_id": 23, "area": 513, "bbox": [98, 85, 17, 35], "iscrowd": 0}, {"id": 1769723, "category_id": 23, "area": 616, "bbox": [98, 121, 19, 36], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 8442, "bbox": [2, 185, 322, 75], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 302, "bbox": [217, 179, 26, 13], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 3340, "bbox": [36, 157, 110, 68], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 134, "bbox": [223, 40, 18, 10], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 1024, "bbox": [280, 227, 31, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00001421", "file_name": "ADE_val_00001421.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 67090, "bbox": [0, 0, 670, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 58778, "bbox": [0, 351, 470, 160], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 30026, "bbox": [579, 0, 103, 510], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1429, "bbox": [101, 117, 48, 51], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 3694, "bbox": [0, 255, 46, 175], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 72869, "bbox": [29, 179, 633, 328], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 105151, "bbox": [101, 37, 536, 474], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 2652, "bbox": [67, 385, 63, 94], "iscrowd": 0}]}, {"image_id": "ADE_val_00001422", "file_name": "ADE_val_00001422.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 142795, "bbox": [0, 0, 511, 552], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 73877, "bbox": [0, 461, 510, 222], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 36526, "bbox": [326, 314, 182, 316], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 27087, "bbox": [13, 340, 197, 267], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 26788, "bbox": [0, 195, 367, 384], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 17444, "bbox": [110, 233, 224, 304], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 1348, "bbox": [162, 65, 39, 46], "iscrowd": 0}, {"id": 65381, "category_id": 149, "area": 1376, "bbox": [220, 62, 39, 47], "iscrowd": 0}, {"id": 62817, "category_id": 149, "area": 1700, "bbox": [288, 52, 44, 50], "iscrowd": 0}]}, {"image_id": "ADE_val_00001423", "file_name": "ADE_val_00001423.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 65673, "bbox": [0, 0, 400, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 22237, "bbox": [89, 359, 361, 152], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 38612, "bbox": [59, 0, 623, 85], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 50428, "bbox": [316, 321, 366, 190], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 34247, "bbox": [100, 108, 214, 189], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 5034, "bbox": [450, 295, 102, 73], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 9423, "bbox": [75, 251, 63, 203], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 21858, "bbox": [143, 275, 298, 161], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 450, "bbox": [225, 215, 28, 83], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 554, "bbox": [295, 273, 29, 24], "iscrowd": 0}, {"id": 3342080, "category_id": 42, "area": 542, "bbox": [252, 270, 27, 24], "iscrowd": 0}, {"id": 655130, "category_id": 42, "area": 1386, "bbox": [264, 380, 60, 31], "iscrowd": 0}, {"id": 458500, "category_id": 42, "area": 154, "bbox": [336, 275, 18, 11], "iscrowd": 0}, {"id": 1833728, "category_id": 42, "area": 537, "bbox": [354, 355, 36, 19], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 3025, "bbox": [521, 321, 135, 44], "iscrowd": 0}, {"id": 16767246, "category_id": 58, "area": 1611, "bbox": [622, 342, 60, 38], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 666, "bbox": [147, 289, 41, 22], "iscrowd": 0}, {"id": 38135, "category_id": 68, "area": 842, "bbox": [330, 246, 30, 34], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 4715, "bbox": [195, 307, 82, 129], "iscrowd": 0}, {"id": 16717838, "category_id": 76, "area": 2507, "bbox": [366, 291, 68, 88], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 3525, "bbox": [68, 170, 46, 89], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1092, "bbox": [139, 389, 29, 47], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 2049, "bbox": [360, 234, 56, 49], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 395, "bbox": [480, 287, 36, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00001424", "file_name": "ADE_val_00001424.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 26683, "bbox": [0, 0, 382, 172], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7070, "bbox": [0, 147, 382, 87], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 8656, "bbox": [84, 1, 298, 46], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 15886, "bbox": [26, 21, 156, 117], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 222, "bbox": [227, 126, 22, 11], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2937, "bbox": [0, 148, 49, 84], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2441, "bbox": [314, 49, 43, 64], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 20464, "bbox": [107, 118, 276, 115], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 316, "bbox": [241, 93, 24, 31], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 492, "bbox": [266, 117, 25, 26], "iscrowd": 0}, {"id": 310271, "category_id": 40, "area": 488, "bbox": [290, 120, 34, 27], "iscrowd": 0}, {"id": 55295, "category_id": 40, "area": 478, "bbox": [213, 159, 53, 21], "iscrowd": 0}, {"id": 1236973, "category_id": 40, "area": 203, "bbox": [264, 160, 28, 10], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 2302, "bbox": [151, 139, 122, 33], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 55, "bbox": [240, 1, 15, 5], "iscrowd": 0}]}, {"image_id": "ADE_val_00001425", "file_name": "ADE_val_00001425.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 42917, "bbox": [0, 0, 396, 299], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 90540, "bbox": [0, 221, 399, 349], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6231, "bbox": [243, 374, 78, 183], "iscrowd": 0}]}, {"image_id": "ADE_val_00001426", "file_name": "ADE_val_00001426.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 27223, "bbox": [0, 26, 484, 334], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6270, "bbox": [123, 306, 253, 54], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 32308, "bbox": [0, 0, 484, 110], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 8909, "bbox": [162, 123, 110, 83], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 795, "bbox": [273, 195, 37, 22], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 7541, "bbox": [3, 93, 69, 128], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7629, "bbox": [0, 280, 123, 80], "iscrowd": 0}, {"id": 16711887, "category_id": 11, "area": 9493, "bbox": [385, 87, 99, 119], "iscrowd": 0}, {"id": 15993563, "category_id": 11, "area": 12716, "bbox": [371, 230, 113, 130], "iscrowd": 0}, {"id": 14816718, "category_id": 11, "area": 9792, "bbox": [125, 230, 248, 80], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 117, "bbox": [320, 247, 16, 15], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 9942, "bbox": [73, 74, 53, 206], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 3321, "bbox": [286, 147, 83, 56], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1042, "bbox": [278, 97, 59, 35], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1822, "bbox": [399, 62, 83, 53], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1616, "bbox": [228, 55, 77, 22], "iscrowd": 0}, {"id": 1295103, "category_id": 83, "area": 2250, "bbox": [220, 2, 113, 22], "iscrowd": 0}, {"id": 1557488, "category_id": 83, "area": 2179, "bbox": [19, 1, 122, 22], "iscrowd": 0}, {"id": 46079, "category_id": 83, "area": 1229, "bbox": [87, 55, 87, 18], "iscrowd": 0}, {"id": 963813, "category_id": 83, "area": 636, "bbox": [130, 90, 62, 12], "iscrowd": 0}, {"id": 1090550, "category_id": 83, "area": 664, "bbox": [231, 90, 56, 12], "iscrowd": 0}, {"id": 47615, "category_id": 83, "area": 719, "bbox": [325, 90, 68, 14], "iscrowd": 0}, {"id": 40958, "category_id": 83, "area": 1235, "bbox": [356, 55, 88, 18], "iscrowd": 0}, {"id": 1547506, "category_id": 83, "area": 1404, "bbox": [406, 2, 78, 21], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 808, "bbox": [141, 269, 40, 62], "iscrowd": 0}]}, {"image_id": "ADE_val_00001427", "file_name": "ADE_val_00001427.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 9595, "bbox": [37, 0, 213, 54], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8922, "bbox": [0, 108, 250, 141], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 11369, "bbox": [0, 0, 250, 247], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 1129, "bbox": [49, 101, 137, 14], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1037, "bbox": [28, 66, 49, 38], "iscrowd": 0}, {"id": 5835131, "category_id": 13, "area": 809, "bbox": [70, 67, 40, 38], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 21671, "bbox": [5, 87, 242, 126], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 3891, "bbox": [66, 53, 125, 40], "iscrowd": 0}, {"id": 251135, "category_id": 54, "area": 3428, "bbox": [155, 167, 82, 60], "iscrowd": 0}]}, {"image_id": "ADE_val_00001428", "file_name": "ADE_val_00001428.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 50769, "bbox": [0, 25, 355, 252], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 24251, "bbox": [0, 0, 354, 111], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 16971, "bbox": [0, 136, 354, 180], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 8565, "bbox": [0, 251, 337, 66], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 1200, "bbox": [110, 282, 59, 29], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 4211, "bbox": [0, 257, 322, 59], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 251, "bbox": [25, 255, 39, 8], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 271, "bbox": [4, 255, 25, 15], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 55, "bbox": [74, 281, 15, 6], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 3398, "bbox": [112, 210, 117, 37], "iscrowd": 0}, {"id": 5308160, "category_id": 87, "area": 383, "bbox": [246, 233, 22, 20], "iscrowd": 0}, {"id": 5497600, "category_id": 87, "area": 265, "bbox": [270, 234, 16, 19], "iscrowd": 0}, {"id": 11188232, "category_id": 105, "area": 764, "bbox": [26, 263, 49, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00001429", "file_name": "ADE_val_00001429.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 75807, "bbox": [1, 1, 343, 494], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 79535, "bbox": [0, 303, 683, 209], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 33056, "bbox": [113, 192, 422, 315], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 26237, "bbox": [587, 1, 96, 335], "iscrowd": 0}, {"id": 1584362, "category_id": 19, "area": 57352, "bbox": [341, 1, 275, 329], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 7083, "bbox": [339, 158, 115, 271], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 18552, "bbox": [61, 2, 195, 181], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 32965, "bbox": [157, 214, 237, 295], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 10523, "bbox": [142, 40, 119, 195], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 898, "bbox": [349, 221, 60, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001430", "file_name": "ADE_val_00001430.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 86481, "bbox": [0, 0, 683, 380], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 13854, "bbox": [157, 379, 222, 132], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 20591, "bbox": [167, 0, 515, 58], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 37980, "bbox": [297, 205, 386, 276], "iscrowd": 0}, {"id": 15664570, "category_id": 8, "area": 13498, "bbox": [379, 378, 304, 133], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 20556, "bbox": [282, 80, 117, 190], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 11750, "bbox": [473, 53, 66, 264], "iscrowd": 0}, {"id": 141287, "category_id": 19, "area": 18783, "bbox": [388, 47, 93, 287], "iscrowd": 0}, {"id": 6378, "category_id": 19, "area": 10724, "bbox": [253, 33, 37, 365], "iscrowd": 0}, {"id": 19455, "category_id": 19, "area": 10474, "bbox": [222, 28, 35, 372], "iscrowd": 0}, {"id": 1252856, "category_id": 19, "area": 5722, "bbox": [201, 26, 24, 317], "iscrowd": 0}, {"id": 1782524, "category_id": 19, "area": 8544, "bbox": [171, 23, 36, 324], "iscrowd": 0}, {"id": 20735, "category_id": 19, "area": 8614, "bbox": [145, 0, 39, 353], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2870, "bbox": [438, 270, 83, 54], "iscrowd": 0}, {"id": 11467, "category_id": 20, "area": 7623, "bbox": [153, 343, 101, 168], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 20494, "bbox": [0, 317, 168, 194], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 6072, "bbox": [0, 262, 99, 166], "iscrowd": 0}, {"id": 393180, "category_id": 37, "area": 1287, "bbox": [486, 137, 54, 134], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 3073, "bbox": [582, 317, 99, 47], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 1400, "bbox": [388, 286, 78, 41], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 7330, "bbox": [63, 247, 103, 96], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 3810, "bbox": [157, 336, 86, 72], "iscrowd": 0}, {"id": 12244552, "category_id": 116, "area": 2446, "bbox": [32, 339, 59, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00001431", "file_name": "ADE_val_00001431.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 20090, "bbox": [0, 15, 349, 160], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8695, "bbox": [0, 169, 181, 64], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 14592, "bbox": [0, 0, 350, 60], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 14463, "bbox": [171, 120, 178, 113], "iscrowd": 0}, {"id": 14813132, "category_id": 8, "area": 7366, "bbox": [99, 115, 144, 90], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 462, "bbox": [224, 153, 49, 18], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 9151, "bbox": [1, 69, 138, 105], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 743, "bbox": [200, 76, 27, 30], "iscrowd": 0}, {"id": 2562295, "category_id": 23, "area": 1623, "bbox": [310, 61, 38, 47], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 1148, "bbox": [2, 126, 35, 53], "iscrowd": 0}, {"id": 14609179, "category_id": 31, "area": 1097, "bbox": [72, 122, 36, 50], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 711, "bbox": [74, 43, 25, 48], "iscrowd": 0}, {"id": 65511, "category_id": 37, "area": 434, "bbox": [241, 117, 23, 43], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 546, "bbox": [32, 138, 42, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00001432", "file_name": "ADE_val_00001432.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 46655, "bbox": [1, 1, 681, 332], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 42360, "bbox": [353, 342, 329, 169], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 46310, "bbox": [2, 0, 680, 95], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 54496, "bbox": [0, 279, 400, 232], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2894, "bbox": [75, 326, 114, 45], "iscrowd": 0}, {"id": 5314559, "category_id": 16, "area": 8718, "bbox": [514, 303, 168, 138], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 18169, "bbox": [302, 100, 96, 241], "iscrowd": 0}, {"id": 17912, "category_id": 19, "area": 42191, "bbox": [395, 93, 182, 261], "iscrowd": 0}, {"id": 12263, "category_id": 19, "area": 23494, "bbox": [570, 90, 112, 272], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1921, "bbox": [621, 352, 61, 63], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2415, "bbox": [183, 106, 38, 69], "iscrowd": 0}, {"id": 4522221, "category_id": 23, "area": 1753, "bbox": [225, 115, 31, 61], "iscrowd": 0}, {"id": 3022335, "category_id": 23, "area": 2294, "bbox": [184, 185, 38, 65], "iscrowd": 0}, {"id": 5046527, "category_id": 23, "area": 1765, "bbox": [225, 185, 31, 61], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 13427, "bbox": [134, 255, 204, 121], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 14900, "bbox": [40, 53, 75, 268], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2387, "bbox": [283, 189, 54, 111], "iscrowd": 0}, {"id": 2228185, "category_id": 37, "area": 7495, "bbox": [68, 205, 95, 137], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2185, "bbox": [247, 259, 64, 71], "iscrowd": 0}, {"id": 1883108, "category_id": 40, "area": 1453, "bbox": [170, 283, 51, 73], "iscrowd": 0}, {"id": 47842, "category_id": 40, "area": 2932, "bbox": [2, 331, 75, 56], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 847, "bbox": [317, 294, 34, 45], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 6271, "bbox": [295, 331, 127, 88], "iscrowd": 0}]}, {"image_id": "ADE_val_00001433", "file_name": "ADE_val_00001433.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 110793, "bbox": [0, 0, 887, 478], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3208, "bbox": [441, 370, 406, 141], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 25349, "bbox": [28, 0, 614, 95], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1884, "bbox": [339, 131, 58, 89], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 8830, "bbox": [86, 29, 203, 66], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 82523, "bbox": [0, 333, 679, 178], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 29068, "bbox": [101, 80, 167, 195], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2954, "bbox": [176, 274, 121, 72], "iscrowd": 0}, {"id": 6684927, "category_id": 16, "area": 891, "bbox": [21, 326, 49, 47], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 5626, "bbox": [283, 59, 37, 214], "iscrowd": 0}, {"id": 13819, "category_id": 19, "area": 20789, "bbox": [1, 16, 85, 355], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 4730, "bbox": [251, 247, 109, 94], "iscrowd": 0}, {"id": 12316160, "category_id": 31, "area": 6122, "bbox": [98, 256, 131, 109], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 5649, "bbox": [1, 185, 71, 157], "iscrowd": 0}, {"id": 1763289, "category_id": 37, "area": 12605, "bbox": [815, 89, 72, 422], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 12222, "bbox": [320, 226, 162, 118], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1442, "bbox": [289, 278, 53, 42], "iscrowd": 0}, {"id": 1498879, "category_id": 40, "area": 1565, "bbox": [121, 287, 55, 55], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 63109, "bbox": [528, 257, 330, 254], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 3262, "bbox": [1, 336, 58, 75], "iscrowd": 0}, {"id": 15787290, "category_id": 58, "area": 7280, "bbox": [1, 399, 77, 111], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 368, "bbox": [459, 166, 23, 49], "iscrowd": 0}, {"id": 6383, "category_id": 67, "area": 1561, "bbox": [751, 228, 85, 48], "iscrowd": 0}, {"id": 5971199, "category_id": 82, "area": 240, "bbox": [454, 220, 26, 10], "iscrowd": 0}, {"id": 5964020, "category_id": 82, "area": 229, "bbox": [333, 232, 25, 11], "iscrowd": 0}, {"id": 8454399, "category_id": 82, "area": 217, "bbox": [452, 230, 29, 8], "iscrowd": 0}, {"id": 6947071, "category_id": 82, "area": 197, "bbox": [338, 222, 23, 12], "iscrowd": 0}, {"id": 7733744, "category_id": 82, "area": 73, "bbox": [357, 234, 9, 10], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 29817, "bbox": [576, 124, 214, 161], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 274, "bbox": [195, 234, 25, 29], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 5970, "bbox": [381, 320, 147, 55], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 557, "bbox": [354, 215, 30, 26], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 992, "bbox": [778, 257, 32, 40], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 518, "bbox": [231, 279, 54, 12], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 181, "bbox": [266, 243, 8, 36], "iscrowd": 0}, {"id": 12504064, "category_id": 148, "area": 172, "bbox": [274, 244, 8, 37], "iscrowd": 0}]}, {"image_id": "ADE_val_00001434", "file_name": "ADE_val_00001434.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 166440, "bbox": [0, 1, 682, 443], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 43233, "bbox": [0, 353, 682, 159], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 114530, "bbox": [51, 148, 579, 364], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 8292, "bbox": [514, 285, 110, 93], "iscrowd": 0}, {"id": 5898495, "category_id": 16, "area": 1041, "bbox": [285, 234, 67, 30], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 1965, "bbox": [303, 246, 105, 34], "iscrowd": 0}, {"id": 15134465, "category_id": 58, "area": 4287, "bbox": [366, 257, 159, 46], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 1372, "bbox": [119, 299, 77, 34], "iscrowd": 0}, {"id": 8257790, "category_id": 82, "area": 1461, "bbox": [121, 284, 76, 27], "iscrowd": 0}, {"id": 4915426, "category_id": 82, "area": 846, "bbox": [131, 266, 56, 22], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 1077, "bbox": [434, 2, 29, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00001435", "file_name": "ADE_val_00001435.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 11163, "bbox": [0, 0, 256, 105], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 545, "bbox": [0, 222, 48, 19], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1236, "bbox": [0, 243, 255, 13], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2210, "bbox": [85, 225, 140, 29], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 46949, "bbox": [0, 0, 256, 248], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1626, "bbox": [41, 211, 85, 36], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 190, "bbox": [83, 92, 23, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00001436", "file_name": "ADE_val_00001436.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 1897, "bbox": [635, 268, 45, 95], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 50064, "bbox": [0, 0, 680, 242], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 51870, "bbox": [0, 0, 679, 353], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 21183, "bbox": [0, 449, 680, 62], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 5976, "bbox": [0, 410, 318, 65], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 2006, "bbox": [99, 233, 61, 49], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 7187, "bbox": [40, 362, 175, 82], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 185174, "bbox": [0, 37, 680, 464], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 437, "bbox": [381, 420, 57, 41], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 575, "bbox": [405, 426, 40, 39], "iscrowd": 0}, {"id": 208560, "category_id": 20, "area": 495, "bbox": [365, 423, 38, 40], "iscrowd": 0}, {"id": 547289, "category_id": 20, "area": 284, "bbox": [439, 421, 18, 35], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 5984, "bbox": [0, 348, 142, 64], "iscrowd": 0}, {"id": 45805, "category_id": 33, "area": 3026, "bbox": [635, 361, 45, 69], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 151, "bbox": [117, 419, 15, 22], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 647, "bbox": [224, 405, 39, 32], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1557, "bbox": [510, 237, 29, 264], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 58, "bbox": [161, 349, 6, 11], "iscrowd": 0}, {"id": 16729088, "category_id": 135, "area": 61, "bbox": [192, 204, 6, 11], "iscrowd": 0}, {"id": 16716058, "category_id": 135, "area": 69, "bbox": [292, 196, 6, 12], "iscrowd": 0}, {"id": 16456962, "category_id": 135, "area": 51, "bbox": [340, 195, 6, 12], "iscrowd": 0}, {"id": 16727040, "category_id": 135, "area": 85, "bbox": [320, 355, 8, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001437", "file_name": "ADE_val_00001437.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 114522, "bbox": [0, 0, 639, 478], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 53138, "bbox": [107, 317, 532, 162], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 21022, "bbox": [92, 1, 533, 67], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 10002, "bbox": [113, 2, 154, 461], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 36987, "bbox": [405, 12, 142, 329], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 4193, "bbox": [352, 193, 66, 94], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 24807, "bbox": [482, 224, 158, 203], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 37233, "bbox": [175, 141, 255, 318], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 1927, "bbox": [291, 73, 48, 51], "iscrowd": 0}]}, {"image_id": "ADE_val_00001438", "file_name": "ADE_val_00001438.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 54945, "bbox": [2, 1, 398, 212], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1104, "bbox": [360, 175, 39, 53], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 19763, "bbox": [2, 209, 398, 78], "iscrowd": 0}, {"id": 16711935, "category_id": 80, "area": 32619, "bbox": [130, 89, 266, 175], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 1286, "bbox": [201, 53, 73, 46], "iscrowd": 0}, {"id": 15554816, "category_id": 73, "area": 3244, "bbox": [283, 37, 114, 90], "iscrowd": 0}]}, {"image_id": "ADE_val_00001439", "file_name": "ADE_val_00001439.png", "segments_info": [{"id": 15075081, "category_id": 27, "area": 248607, "bbox": [1, 2, 679, 509], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 2929, "bbox": [349, 180, 86, 65], "iscrowd": 0}]}, {"image_id": "ADE_val_00001440", "file_name": "ADE_val_00001440.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 39945, "bbox": [2, 0, 497, 154], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5069, "bbox": [36, 0, 463, 15], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 90, "bbox": [189, 91, 12, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001441", "file_name": "ADE_val_00001441.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 34060, "bbox": [0, 1, 383, 142], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 1147, "bbox": [333, 117, 50, 40], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 34960, "bbox": [0, 152, 383, 103], "iscrowd": 0}, {"id": 16761344, "category_id": 95, "area": 655, "bbox": [0, 134, 45, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00001442", "file_name": "ADE_val_00001442.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 93044, "bbox": [0, 0, 633, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2740, "bbox": [363, 460, 238, 51], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 185969, "bbox": [54, 7, 474, 504], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 15513, "bbox": [423, 392, 152, 116], "iscrowd": 0}]}, {"image_id": "ADE_val_00001443", "file_name": "ADE_val_00001443.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 50878, "bbox": [0, 63, 399, 164], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 34304, "bbox": [0, 0, 400, 131], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 33377, "bbox": [2, 200, 397, 99], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 501, "bbox": [368, 198, 31, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00001444", "file_name": "ADE_val_00001444.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 12732, "bbox": [0, 0, 360, 103], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 20773, "bbox": [0, 23, 359, 230], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6130, "bbox": [30, 224, 329, 30], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 43002, "bbox": [19, 0, 321, 245], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 6776, "bbox": [209, 118, 93, 119], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 538, "bbox": [287, 107, 43, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00001445", "file_name": "ADE_val_00001445.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 29423, "bbox": [0, 0, 540, 60], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1951, "bbox": [121, 50, 268, 18], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 125345, "bbox": [0, 50, 540, 379], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 73016, "bbox": [0, 62, 428, 367], "iscrowd": 0}]}, {"image_id": "ADE_val_00001446", "file_name": "ADE_val_00001446.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 55949, "bbox": [0, 0, 499, 163], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 676, "bbox": [0, 122, 39, 24], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4888, "bbox": [3, 1, 121, 122], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3878, "bbox": [77, 76, 187, 70], "iscrowd": 0}, {"id": 5308579, "category_id": 13, "area": 3987, "bbox": [246, 94, 127, 81], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 689, "bbox": [40, 112, 59, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00001447", "file_name": "ADE_val_00001447.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 9221, "bbox": [0, 32, 246, 118], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 627, "bbox": [98, 78, 45, 22], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 364, "bbox": [102, 54, 35, 18], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 27632, "bbox": [0, 106, 246, 249], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1503, "bbox": [88, 53, 64, 38], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7834, "bbox": [0, 0, 246, 32], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3548, "bbox": [0, 59, 245, 73], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 22507, "bbox": [8, 170, 222, 131], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4139, "bbox": [24, 54, 69, 71], "iscrowd": 0}, {"id": 16763116, "category_id": 9, "area": 4145, "bbox": [151, 53, 67, 73], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 429, "bbox": [91, 87, 12, 53], "iscrowd": 0}, {"id": 1979623, "category_id": 39, "area": 325, "bbox": [143, 89, 9, 51], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 348, "bbox": [160, 134, 45, 68], "iscrowd": 0}, {"id": 15627545, "category_id": 96, "area": 305, "bbox": [125, 127, 42, 52], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 372, "bbox": [8, 127, 23, 23], "iscrowd": 0}, {"id": 15599103, "category_id": 126, "area": 335, "bbox": [211, 129, 20, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00001448", "file_name": "ADE_val_00001448.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21925, "bbox": [0, 109, 682, 124], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 6162, "bbox": [1, 0, 80, 115], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 41518, "bbox": [44, 0, 638, 110], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 120130, "bbox": [0, 162, 682, 349], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 11839, "bbox": [145, 0, 461, 159], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 29700, "bbox": [0, 87, 682, 146], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 46725, "bbox": [47, 225, 625, 154], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 4709, "bbox": [48, 101, 543, 23], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1177, "bbox": [84, 125, 45, 33], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 2213, "bbox": [411, 2, 43, 123], "iscrowd": 0}, {"id": 16735244, "category_id": 73, "area": 5875, "bbox": [454, 0, 117, 133], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 1639, "bbox": [1, 249, 157, 105], "iscrowd": 0}, {"id": 15437568, "category_id": 96, "area": 1111, "bbox": [558, 178, 86, 83], "iscrowd": 0}]}, {"image_id": "ADE_val_00001449", "file_name": "ADE_val_00001449.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 166138, "bbox": [0, 77, 680, 378], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 102850, "bbox": [0, 0, 680, 270], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 32208, "bbox": [0, 440, 680, 71], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 8518, "bbox": [0, 433, 679, 41], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 3264, "bbox": [453, 426, 183, 29], "iscrowd": 0}, {"id": 836587, "category_id": 33, "area": 16456, "bbox": [2, 397, 450, 54], "iscrowd": 0}, {"id": 1887999, "category_id": 33, "area": 4972, "bbox": [459, 404, 220, 30], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 596, "bbox": [632, 225, 47, 21], "iscrowd": 0}, {"id": 9240808, "category_id": 44, "area": 2148, "bbox": [157, 398, 63, 36], "iscrowd": 0}, {"id": 8132336, "category_id": 44, "area": 923, "bbox": [259, 400, 26, 36], "iscrowd": 0}, {"id": 9110768, "category_id": 44, "area": 817, "bbox": [356, 403, 24, 36], "iscrowd": 0}, {"id": 9836287, "category_id": 44, "area": 658, "bbox": [334, 401, 21, 37], "iscrowd": 0}, {"id": 11606527, "category_id": 44, "area": 606, "bbox": [291, 318, 28, 32], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 3031, "bbox": [226, 85, 87, 368], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 993, "bbox": [609, 218, 25, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00001450", "file_name": "ADE_val_00001450.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 16714, "bbox": [116, 27, 116, 288], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 13568, "bbox": [0, 173, 211, 142], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 9288, "bbox": [0, 0, 231, 182], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 2545, "bbox": [119, 144, 49, 130], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 745, "bbox": [190, 133, 25, 57], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 1329, "bbox": [135, 58, 27, 52], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 465, "bbox": [133, 185, 29, 46], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 89, "bbox": [135, 126, 23, 6], "iscrowd": 0}]}, {"image_id": "ADE_val_00001451", "file_name": "ADE_val_00001451.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14067, "bbox": [0, 39, 255, 131], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5191, "bbox": [0, 113, 255, 142], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 11658, "bbox": [0, 0, 255, 73], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 2033, "bbox": [17, 133, 84, 102], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 213, "bbox": [168, 115, 87, 5], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 482, "bbox": [230, 118, 18, 53], "iscrowd": 0}, {"id": 1245439, "category_id": 43, "area": 404, "bbox": [201, 118, 14, 49], "iscrowd": 0}, {"id": 2623231, "category_id": 43, "area": 904, "bbox": [168, 118, 23, 55], "iscrowd": 0}, {"id": 3481575, "category_id": 43, "area": 4608, "bbox": [128, 34, 44, 141], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 5476, "bbox": [141, 193, 115, 62], "iscrowd": 0}, {"id": 16711680, "category_id": 56, "area": 5136, "bbox": [4, 61, 62, 105], "iscrowd": 0}, {"id": 14942208, "category_id": 56, "area": 11669, "bbox": [34, 152, 140, 103], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 35, "bbox": [139, 13, 10, 4], "iscrowd": 0}, {"id": 769791, "category_id": 83, "area": 22, "bbox": [203, 30, 8, 3], "iscrowd": 0}, {"id": 1676793, "category_id": 83, "area": 41, "bbox": [228, 22, 10, 5], "iscrowd": 0}, {"id": 826111, "category_id": 83, "area": 29, "bbox": [68, 18, 8, 4], "iscrowd": 0}, {"id": 895219, "category_id": 83, "area": 36, "bbox": [28, 14, 9, 5], "iscrowd": 0}, {"id": 50172, "category_id": 83, "area": 15, "bbox": [179, 38, 8, 2], "iscrowd": 0}, {"id": 49663, "category_id": 83, "area": 14, "bbox": [106, 19, 6, 3], "iscrowd": 0}, {"id": 1806581, "category_id": 83, "area": 12, "bbox": [97, 25, 6, 3], "iscrowd": 0}, {"id": 37858, "category_id": 83, "area": 17, "bbox": [90, 29, 6, 3], "iscrowd": 0}, {"id": 500991, "category_id": 83, "area": 29, "bbox": [102, 8, 9, 4], "iscrowd": 0}, {"id": 42984, "category_id": 83, "area": 15, "bbox": [82, 11, 6, 3], "iscrowd": 0}, {"id": 39423, "category_id": 83, "area": 20, "bbox": [55, 10, 9, 3], "iscrowd": 0}, {"id": 49407, "category_id": 83, "area": 19, "bbox": [34, 5, 7, 3], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 695, "bbox": [12, 37, 49, 24], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 266, "bbox": [174, 73, 15, 32], "iscrowd": 0}, {"id": 16728320, "category_id": 135, "area": 235, "bbox": [201, 75, 13, 36], "iscrowd": 0}, {"id": 15146752, "category_id": 135, "area": 228, "bbox": [236, 78, 15, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001452", "file_name": "ADE_val_00001452.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 27646, "bbox": [0, 0, 662, 92], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 175340, "bbox": [1, 0, 681, 359], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 78200, "bbox": [0, 290, 682, 221], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 1614, "bbox": [0, 245, 40, 73], "iscrowd": 0}, {"id": 16711935, "category_id": 80, "area": 2255, "bbox": [70, 274, 60, 57], "iscrowd": 0}, {"id": 16761344, "category_id": 95, "area": 9098, "bbox": [225, 295, 303, 41], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 576, "bbox": [77, 286, 16, 37], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1984, "bbox": [129, 292, 79, 30], "iscrowd": 0}, {"id": 47103, "category_id": 33, "area": 1002, "bbox": [21, 287, 48, 28], "iscrowd": 0}, {"id": 50402, "category_id": 33, "area": 1801, "bbox": [362, 294, 166, 15], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 845, "bbox": [209, 286, 17, 57], "iscrowd": 0}]}, {"image_id": "ADE_val_00001453", "file_name": "ADE_val_00001453.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 29020, "bbox": [0, 0, 320, 157], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 630, "bbox": [0, 214, 51, 26], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 134, "bbox": [5, 0, 44, 6], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2706, "bbox": [263, 67, 57, 78], "iscrowd": 0}, {"id": 2949260, "category_id": 13, "area": 1751, "bbox": [144, 65, 55, 83], "iscrowd": 0}, {"id": 5767326, "category_id": 13, "area": 2155, "bbox": [146, 94, 66, 63], "iscrowd": 0}, {"id": 3604656, "category_id": 13, "area": 2289, "bbox": [87, 90, 63, 68], "iscrowd": 0}, {"id": 2301862, "category_id": 13, "area": 2140, "bbox": [40, 82, 53, 63], "iscrowd": 0}, {"id": 5118874, "category_id": 13, "area": 1213, "bbox": [9, 85, 41, 52], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1782, "bbox": [211, 107, 50, 43], "iscrowd": 0}, {"id": 22706, "category_id": 20, "area": 513, "bbox": [89, 99, 28, 37], "iscrowd": 0}, {"id": 1659575, "category_id": 20, "area": 275, "bbox": [135, 100, 20, 20], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 862, "bbox": [147, 11, 31, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00001454", "file_name": "ADE_val_00001454.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18258, "bbox": [0, 0, 388, 287], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 23769, "bbox": [0, 366, 682, 145], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 20479, "bbox": [0, 170, 108, 227], "iscrowd": 0}]}, {"image_id": "ADE_val_00001455", "file_name": "ADE_val_00001455.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 34702, "bbox": [0, 33, 682, 273], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 50627, "bbox": [3, 267, 680, 244], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 75966, "bbox": [0, 0, 683, 157], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12799, "bbox": [609, 98, 70, 207], "iscrowd": 0}, {"id": 14479847, "category_id": 9, "area": 7278, "bbox": [541, 121, 55, 151], "iscrowd": 0}, {"id": 14211071, "category_id": 9, "area": 3093, "bbox": [499, 141, 35, 106], "iscrowd": 0}, {"id": 15653104, "category_id": 9, "area": 1823, "bbox": [470, 153, 25, 80], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2669, "bbox": [43, 129, 35, 90], "iscrowd": 0}, {"id": 4194054, "category_id": 15, "area": 1623, "bbox": [187, 170, 43, 41], "iscrowd": 0}, {"id": 5242660, "category_id": 15, "area": 1951, "bbox": [10, 124, 24, 95], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2353, "bbox": [284, 339, 120, 21], "iscrowd": 0}, {"id": 6881509, "category_id": 16, "area": 31009, "bbox": [237, 364, 269, 147], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 267, "bbox": [277, 237, 21, 34], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 43203, "bbox": [0, 217, 183, 294], "iscrowd": 0}, {"id": 2687214, "category_id": 25, "area": 7090, "bbox": [169, 208, 70, 138], "iscrowd": 0}, {"id": 3480063, "category_id": 25, "area": 17916, "bbox": [526, 306, 157, 127], "iscrowd": 0}, {"id": 2951423, "category_id": 25, "area": 9863, "bbox": [412, 310, 117, 100], "iscrowd": 0}, {"id": 5118956, "category_id": 25, "area": 7229, "bbox": [357, 268, 194, 64], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 143, "bbox": [206, 148, 13, 11], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 6852, "bbox": [345, 2, 104, 144], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 2600, "bbox": [427, 218, 74, 54], "iscrowd": 0}, {"id": 2301183, "category_id": 109, "area": 1117, "bbox": [560, 279, 49, 26], "iscrowd": 0}, {"id": 3084031, "category_id": 109, "area": 1041, "bbox": [509, 233, 31, 39], "iscrowd": 0}, {"id": 3408100, "category_id": 109, "area": 781, "bbox": [385, 275, 48, 24], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 862, "bbox": [582, 346, 48, 21], "iscrowd": 0}, {"id": 65346, "category_id": 113, "area": 519, "bbox": [431, 279, 31, 19], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 157, "bbox": [58, 141, 10, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00001456", "file_name": "ADE_val_00001456.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 44447, "bbox": [0, 68, 510, 314], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 69982, "bbox": [0, 299, 511, 383], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 53310, "bbox": [0, 1, 510, 190], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 86289, "bbox": [79, 121, 409, 490], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 11861, "bbox": [343, 258, 105, 269], "iscrowd": 0}, {"id": 4526255, "category_id": 13, "area": 993, "bbox": [398, 245, 30, 58], "iscrowd": 0}, {"id": 2884474, "category_id": 13, "area": 1350, "bbox": [442, 256, 28, 84], "iscrowd": 0}, {"id": 5771142, "category_id": 13, "area": 1927, "bbox": [19, 256, 52, 108], "iscrowd": 0}, {"id": 4718755, "category_id": 13, "area": 15655, "bbox": [0, 293, 94, 389], "iscrowd": 0}, {"id": 5574036, "category_id": 13, "area": 878, "bbox": [65, 250, 19, 72], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 6517, "bbox": [61, 219, 71, 114], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 430, "bbox": [128, 332, 26, 83], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 3449, "bbox": [223, 467, 115, 35], "iscrowd": 0}, {"id": 1107214, "category_id": 42, "area": 4005, "bbox": [151, 444, 73, 60], "iscrowd": 0}, {"id": 456219, "category_id": 42, "area": 611, "bbox": [122, 420, 27, 27], "iscrowd": 0}, {"id": 62464, "category_id": 42, "area": 2562, "bbox": [343, 446, 61, 49], "iscrowd": 0}, {"id": 1372949, "category_id": 42, "area": 576, "bbox": [355, 429, 26, 25], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1837, "bbox": [216, 42, 26, 77], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 133, "bbox": [158, 97, 21, 9], "iscrowd": 0}, {"id": 51938, "category_id": 83, "area": 243, "bbox": [379, 0, 30, 10], "iscrowd": 0}, {"id": 561919, "category_id": 83, "area": 105, "bbox": [59, 109, 16, 8], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 3669, "bbox": [96, 536, 106, 41], "iscrowd": 0}, {"id": 11977313, "category_id": 116, "area": 2389, "bbox": [201, 541, 88, 32], "iscrowd": 0}, {"id": 11646018, "category_id": 116, "area": 2387, "bbox": [288, 536, 94, 31], "iscrowd": 0}, {"id": 11974981, "category_id": 116, "area": 2763, "bbox": [371, 527, 103, 36], "iscrowd": 0}, {"id": 10147371, "category_id": 116, "area": 1745, "bbox": [254, 414, 37, 50], "iscrowd": 0}, {"id": 10070611, "category_id": 116, "area": 1545, "bbox": [299, 414, 35, 48], "iscrowd": 0}, {"id": 9675577, "category_id": 116, "area": 1773, "bbox": [255, 361, 37, 51], "iscrowd": 0}, {"id": 11388501, "category_id": 116, "area": 1783, "bbox": [299, 360, 41, 54], "iscrowd": 0}, {"id": 9809982, "category_id": 116, "area": 1973, "bbox": [304, 312, 36, 58], "iscrowd": 0}, {"id": 10078284, "category_id": 116, "area": 2185, "bbox": [257, 248, 39, 58], "iscrowd": 0}, {"id": 12237156, "category_id": 116, "area": 2053, "bbox": [303, 247, 40, 60], "iscrowd": 0}, {"id": 9490775, "category_id": 116, "area": 415, "bbox": [135, 335, 15, 39], "iscrowd": 0}, {"id": 11905379, "category_id": 116, "area": 1688, "bbox": [256, 314, 37, 48], "iscrowd": 0}, {"id": 11060316, "category_id": 116, "area": 2067, "bbox": [218, 326, 37, 59], "iscrowd": 0}]}, {"image_id": "ADE_val_00001457", "file_name": "ADE_val_00001457.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 90075, "bbox": [1, 0, 680, 295], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 19289, "bbox": [170, 356, 512, 156], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 25755, "bbox": [541, 69, 141, 295], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 38893, "bbox": [0, 0, 215, 186], "iscrowd": 0}, {"id": 16449746, "category_id": 11, "area": 41943, "bbox": [390, 289, 238, 213], "iscrowd": 0}, {"id": 16711907, "category_id": 11, "area": 19841, "bbox": [214, 0, 152, 133], "iscrowd": 0}, {"id": 16712147, "category_id": 11, "area": 29515, "bbox": [222, 288, 172, 191], "iscrowd": 0}, {"id": 15274740, "category_id": 11, "area": 10290, "bbox": [168, 294, 64, 208], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2714, "bbox": [505, 214, 64, 49], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 633, "bbox": [417, 107, 28, 29], "iscrowd": 0}, {"id": 60409, "category_id": 37, "area": 638, "bbox": [573, 109, 26, 30], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2289, "bbox": [246, 204, 108, 77], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 8077, "bbox": [1, 335, 56, 176], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 5520, "bbox": [629, 310, 54, 180], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 21805, "bbox": [46, 319, 135, 193], "iscrowd": 0}]}, {"image_id": "ADE_val_00001458", "file_name": "ADE_val_00001458.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 95097, "bbox": [0, 0, 639, 478], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 23239, "bbox": [411, 349, 228, 130], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 42920, "bbox": [404, 1, 233, 196], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2380, "bbox": [512, 0, 127, 202], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2979, "bbox": [292, 230, 143, 69], "iscrowd": 0}, {"id": 16711928, "category_id": 11, "area": 6184, "bbox": [291, 310, 57, 168], "iscrowd": 0}, {"id": 16716542, "category_id": 11, "area": 7191, "bbox": [291, 16, 68, 121], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 83367, "bbox": [74, 1, 196, 477], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 19534, "bbox": [291, 245, 138, 234], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 11681, "bbox": [327, 201, 148, 227], "iscrowd": 0}]}, {"image_id": "ADE_val_00001459", "file_name": "ADE_val_00001459.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 161711, "bbox": [0, 0, 639, 479], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 23580, "bbox": [0, 0, 543, 93], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 37592, "bbox": [66, 80, 382, 168], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 17686, "bbox": [372, 176, 127, 158], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 7950, "bbox": [219, 253, 154, 87], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 7850, "bbox": [290, 2, 212, 68], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 6706, "bbox": [246, 151, 101, 73], "iscrowd": 0}]}, {"image_id": "ADE_val_00001460", "file_name": "ADE_val_00001460.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 8784, "bbox": [0, 3, 256, 154], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5884, "bbox": [0, 0, 254, 32], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3143, "bbox": [0, 23, 245, 146], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 4757, "bbox": [185, 51, 60, 115], "iscrowd": 0}, {"id": 14945231, "category_id": 11, "area": 3310, "bbox": [113, 62, 78, 53], "iscrowd": 0}, {"id": 16712658, "category_id": 11, "area": 891, "bbox": [4, 51, 73, 95], "iscrowd": 0}, {"id": 16582634, "category_id": 11, "area": 481, "bbox": [159, 140, 33, 25], "iscrowd": 0}, {"id": 15210201, "category_id": 11, "area": 1290, "bbox": [40, 149, 124, 24], "iscrowd": 0}, {"id": 16711882, "category_id": 11, "area": 3845, "bbox": [23, 51, 53, 94], "iscrowd": 0}, {"id": 16391931, "category_id": 11, "area": 2584, "bbox": [72, 58, 42, 85], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3111, "bbox": [83, 197, 75, 58], "iscrowd": 0}, {"id": 339683, "category_id": 20, "area": 3165, "bbox": [0, 187, 52, 68], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 663, "bbox": [141, 30, 25, 28], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 560, "bbox": [226, 81, 30, 30], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 22, "bbox": [23, 11, 7, 4], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 1207, "bbox": [84, 1, 39, 80], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 124, "bbox": [145, 135, 11, 15], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 513, "bbox": [160, 153, 35, 25], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 161, "bbox": [194, 27, 12, 18], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 337, "bbox": [237, 108, 19, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00001461", "file_name": "ADE_val_00001461.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 80828, "bbox": [0, 0, 768, 321], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12244, "bbox": [200, 458, 383, 54], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6691, "bbox": [176, 0, 420, 50], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 9061, "bbox": [1, 0, 49, 202], "iscrowd": 0}, {"id": 16717784, "category_id": 11, "area": 25530, "bbox": [366, 40, 177, 154], "iscrowd": 0}, {"id": 15728885, "category_id": 11, "area": 37433, "bbox": [539, 19, 228, 179], "iscrowd": 0}, {"id": 16713928, "category_id": 11, "area": 16849, "bbox": [231, 295, 117, 180], "iscrowd": 0}, {"id": 14944455, "category_id": 11, "area": 22768, "bbox": [0, 334, 149, 178], "iscrowd": 0}, {"id": 16384232, "category_id": 11, "area": 28459, "bbox": [160, 48, 206, 151], "iscrowd": 0}, {"id": 16712146, "category_id": 11, "area": 22701, "bbox": [518, 311, 130, 201], "iscrowd": 0}, {"id": 14878924, "category_id": 11, "area": 12917, "bbox": [633, 322, 88, 190], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 30628, "bbox": [347, 297, 180, 200], "iscrowd": 0}, {"id": 16725274, "category_id": 45, "area": 7054, "bbox": [701, 336, 67, 175], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 687, "bbox": [138, 240, 20, 49], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 17943, "bbox": [135, 309, 109, 203], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 15874, "bbox": [50, 1, 154, 185], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 193, "bbox": [146, 286, 20, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001462", "file_name": "ADE_val_00001462.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 42271, "bbox": [1, 0, 681, 300], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 15872, "bbox": [0, 364, 682, 148], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 44086, "bbox": [1, 0, 548, 104], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 16451, "bbox": [393, 365, 288, 146], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 20054, "bbox": [596, 135, 87, 276], "iscrowd": 0}, {"id": 16766931, "category_id": 9, "area": 18554, "bbox": [518, 1, 165, 136], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 11146, "bbox": [1, 106, 177, 81], "iscrowd": 0}, {"id": 16717043, "category_id": 11, "area": 17280, "bbox": [167, 115, 236, 106], "iscrowd": 0}, {"id": 16580822, "category_id": 11, "area": 2160, "bbox": [71, 282, 116, 86], "iscrowd": 0}, {"id": 16714201, "category_id": 11, "area": 857, "bbox": [355, 272, 57, 18], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 19160, "bbox": [521, 123, 161, 263], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2237, "bbox": [632, 346, 50, 96], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 9249, "bbox": [143, 306, 131, 143], "iscrowd": 0}, {"id": 2178751, "category_id": 20, "area": 8150, "bbox": [292, 300, 135, 158], "iscrowd": 0}, {"id": 1322455, "category_id": 20, "area": 8534, "bbox": [419, 292, 132, 192], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2684, "bbox": [457, 155, 37, 75], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 8219, "bbox": [73, 401, 323, 110], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 7356, "bbox": [114, 434, 150, 77], "iscrowd": 0}, {"id": 1227007, "category_id": 40, "area": 7022, "bbox": [243, 401, 114, 110], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 16140, "bbox": [0, 167, 73, 249], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 4891, "bbox": [246, 234, 110, 62], "iscrowd": 0}, {"id": 2752256, "category_id": 74, "area": 34703, "bbox": [81, 285, 447, 177], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 101, "bbox": [301, 83, 23, 6], "iscrowd": 0}, {"id": 1675256, "category_id": 83, "area": 122, "bbox": [72, 64, 27, 6], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 142, "bbox": [91, 251, 10, 21], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 4277, "bbox": [253, 170, 87, 51], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 796, "bbox": [211, 279, 55, 19], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 212, "bbox": [418, 160, 25, 13], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 755, "bbox": [288, 108, 73, 16], "iscrowd": 0}, {"id": 65298, "category_id": 138, "area": 2380, "bbox": [156, 87, 115, 32], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 5903, "bbox": [39, 367, 65, 136], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 288, "bbox": [224, 277, 22, 37], "iscrowd": 0}, {"id": 13491225, "category_id": 148, "area": 253, "bbox": [408, 258, 13, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00001463", "file_name": "ADE_val_00001463.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 13223, "bbox": [16, 0, 284, 198], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4344, "bbox": [24, 165, 175, 34], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4841, "bbox": [13, 0, 229, 28], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1375, "bbox": [103, 41, 28, 52], "iscrowd": 0}, {"id": 16776447, "category_id": 9, "area": 1524, "bbox": [67, 41, 30, 52], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3735, "bbox": [51, 120, 75, 52], "iscrowd": 0}, {"id": 15535339, "category_id": 11, "area": 1586, "bbox": [16, 30, 41, 43], "iscrowd": 0}, {"id": 15079645, "category_id": 11, "area": 537, "bbox": [162, 117, 13, 52], "iscrowd": 0}, {"id": 16718807, "category_id": 11, "area": 1084, "bbox": [198, 136, 21, 63], "iscrowd": 0}, {"id": 16711919, "category_id": 11, "area": 2733, "bbox": [216, 144, 63, 55], "iscrowd": 0}, {"id": 15597814, "category_id": 11, "area": 2308, "bbox": [139, 40, 45, 54], "iscrowd": 0}, {"id": 16712392, "category_id": 11, "area": 1022, "bbox": [183, 35, 32, 60], "iscrowd": 0}, {"id": 16384728, "category_id": 11, "area": 4193, "bbox": [229, 8, 55, 84], "iscrowd": 0}, {"id": 15139048, "category_id": 11, "area": 1306, "bbox": [198, 22, 32, 49], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 3842, "bbox": [0, 0, 25, 198], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 3520, "bbox": [20, 73, 36, 113], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 1827, "bbox": [173, 118, 47, 79], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 2246, "bbox": [221, 112, 59, 46], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 1731, "bbox": [126, 117, 36, 50], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 288, "bbox": [198, 68, 30, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00001464", "file_name": "ADE_val_00001464.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 103332, "bbox": [3, 3, 641, 342], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12342, "bbox": [2, 2, 63, 239], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 21968, "bbox": [526, 2, 137, 181], "iscrowd": 0}, {"id": 16716004, "category_id": 11, "area": 21386, "bbox": [293, 0, 235, 97], "iscrowd": 0}, {"id": 16713187, "category_id": 11, "area": 25740, "bbox": [156, 0, 185, 176], "iscrowd": 0}, {"id": 16713968, "category_id": 11, "area": 23071, "bbox": [176, 306, 172, 206], "iscrowd": 0}, {"id": 16711912, "category_id": 11, "area": 22257, "bbox": [1, 323, 186, 175], "iscrowd": 0}, {"id": 16711886, "category_id": 11, "area": 23763, "bbox": [496, 323, 139, 189], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 4384, "bbox": [2, 308, 153, 59], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 17669, "bbox": [632, 49, 48, 463], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 38335, "bbox": [310, 299, 209, 213], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 10368, "bbox": [317, 90, 211, 56], "iscrowd": 0}]}, {"image_id": "ADE_val_00001465", "file_name": "ADE_val_00001465.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 56814, "bbox": [0, 19, 682, 355], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 105308, "bbox": [0, 277, 682, 234], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 28651, "bbox": [0, 1, 682, 64], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1261, "bbox": [87, 180, 89, 91], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 8515, "bbox": [376, 82, 89, 117], "iscrowd": 0}, {"id": 16055009, "category_id": 9, "area": 13674, "bbox": [581, 74, 101, 148], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 12662, "bbox": [448, 54, 142, 104], "iscrowd": 0}, {"id": 16714186, "category_id": 11, "area": 19682, "bbox": [1, 55, 205, 112], "iscrowd": 0}, {"id": 16521928, "category_id": 11, "area": 8515, "bbox": [328, 217, 91, 114], "iscrowd": 0}, {"id": 15532247, "category_id": 11, "area": 14748, "bbox": [557, 250, 125, 147], "iscrowd": 0}, {"id": 16711888, "category_id": 11, "area": 858, "bbox": [0, 335, 23, 74], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 12343, "bbox": [202, 81, 89, 204], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 10709, "bbox": [61, 247, 215, 189], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4155, "bbox": [186, 217, 85, 180], "iscrowd": 0}, {"id": 16327, "category_id": 20, "area": 930, "bbox": [174, 212, 23, 47], "iscrowd": 0}, {"id": 481231, "category_id": 20, "area": 4031, "bbox": [26, 238, 81, 150], "iscrowd": 0}, {"id": 415965, "category_id": 20, "area": 7068, "bbox": [80, 253, 139, 182], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 687, "bbox": [317, 139, 27, 28], "iscrowd": 0}, {"id": 3017197, "category_id": 23, "area": 662, "bbox": [306, 100, 24, 29], "iscrowd": 0}, {"id": 3866879, "category_id": 23, "area": 524, "bbox": [507, 161, 20, 28], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 1614, "bbox": [2, 206, 211, 45], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 8103, "bbox": [490, 239, 82, 127], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2134, "bbox": [560, 225, 122, 32], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 547, "bbox": [316, 33, 24, 31], "iscrowd": 0}, {"id": 1884415, "category_id": 83, "area": 1013, "bbox": [581, 1, 35, 36], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 216, "bbox": [137, 260, 24, 17], "iscrowd": 0}, {"id": 16716521, "category_id": 126, "area": 213, "bbox": [92, 207, 17, 16], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 8346, "bbox": [415, 230, 81, 120], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 2593, "bbox": [12, 282, 51, 79], "iscrowd": 0}]}, {"image_id": "ADE_val_00001466", "file_name": "ADE_val_00001466.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 68153, "bbox": [0, 0, 682, 354], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14221, "bbox": [265, 353, 317, 158], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 23277, "bbox": [117, 27, 152, 164], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 5318, "bbox": [331, 1, 81, 74], "iscrowd": 0}, {"id": 16711876, "category_id": 11, "area": 21990, "bbox": [411, 1, 141, 201], "iscrowd": 0}, {"id": 16717046, "category_id": 11, "area": 8646, "bbox": [507, 1, 125, 72], "iscrowd": 0}, {"id": 16711911, "category_id": 11, "area": 12461, "bbox": [359, 250, 90, 179], "iscrowd": 0}, {"id": 16719858, "category_id": 11, "area": 24214, "bbox": [549, 305, 134, 206], "iscrowd": 0}, {"id": 16581826, "category_id": 11, "area": 64145, "bbox": [0, 239, 364, 272], "iscrowd": 0}, {"id": 15794419, "category_id": 11, "area": 12360, "bbox": [620, 1, 62, 224], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 7672, "bbox": [33, 252, 176, 79], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 18127, "bbox": [273, 99, 72, 289], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 424, "bbox": [152, 85, 79, 66], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 32649, "bbox": [441, 201, 220, 296], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 5349, "bbox": [396, 188, 101, 65], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 4981, "bbox": [490, 71, 136, 40], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 231, "bbox": [181, 145, 16, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00001467", "file_name": "ADE_val_00001467.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 94325, "bbox": [0, 74, 682, 268], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 87161, "bbox": [0, 261, 683, 250], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 61345, "bbox": [1, 1, 681, 124], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 14303, "bbox": [572, 48, 111, 156], "iscrowd": 0}, {"id": 16719350, "category_id": 11, "area": 7754, "bbox": [570, 270, 112, 123], "iscrowd": 0}, {"id": 15407328, "category_id": 11, "area": 45663, "bbox": [333, 287, 287, 223], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 5326, "bbox": [266, 144, 41, 150], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1241, "bbox": [401, 0, 30, 181], "iscrowd": 0}, {"id": 2293733, "category_id": 37, "area": 1047, "bbox": [411, 19, 25, 183], "iscrowd": 0}, {"id": 262120, "category_id": 37, "area": 863, "bbox": [476, 32, 25, 149], "iscrowd": 0}, {"id": 1307618, "category_id": 37, "area": 740, "bbox": [533, 44, 21, 152], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 4469, "bbox": [339, 218, 206, 47], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 816, "bbox": [496, 216, 67, 70], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 63, "bbox": [237, 104, 11, 7], "iscrowd": 0}, {"id": 41444, "category_id": 83, "area": 63, "bbox": [308, 93, 13, 6], "iscrowd": 0}, {"id": 961000, "category_id": 83, "area": 82, "bbox": [376, 81, 13, 7], "iscrowd": 0}, {"id": 46329, "category_id": 83, "area": 98, "bbox": [459, 68, 16, 8], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 3234, "bbox": [128, 35, 76, 109], "iscrowd": 0}, {"id": 16721166, "category_id": 86, "area": 964, "bbox": [480, 77, 46, 69], "iscrowd": 0}]}, {"image_id": "ADE_val_00001468", "file_name": "ADE_val_00001468.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 147934, "bbox": [0, 1, 638, 477], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 61497, "bbox": [1, 21, 341, 202], "iscrowd": 0}, {"id": 16715252, "category_id": 11, "area": 1880, "bbox": [622, 77, 16, 268], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 65646, "bbox": [305, 50, 330, 313], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 2833, "bbox": [510, 212, 49, 117], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 16119, "bbox": [356, 239, 184, 101], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1476, "bbox": [427, 108, 66, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00001469", "file_name": "ADE_val_00001469.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 86265, "bbox": [1, 0, 681, 447], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17032, "bbox": [178, 410, 224, 102], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 42055, "bbox": [191, 34, 189, 267], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 32595, "bbox": [485, 1, 197, 196], "iscrowd": 0}, {"id": 16122110, "category_id": 11, "area": 32629, "bbox": [391, 304, 291, 208], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 36449, "bbox": [367, 23, 149, 405], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 12493, "bbox": [89, 0, 93, 150], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 7223, "bbox": [196, 279, 175, 69], "iscrowd": 0}, {"id": 4792801, "category_id": 25, "area": 1011, "bbox": [1, 132, 36, 35], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 2995, "bbox": [273, 196, 84, 58], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 21241, "bbox": [0, 383, 208, 129], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 639, "bbox": [1, 60, 9, 88], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 431, "bbox": [102, 274, 27, 62], "iscrowd": 0}]}, {"image_id": "ADE_val_00001470", "file_name": "ADE_val_00001470.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 145072, "bbox": [3, 1, 680, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 19367, "bbox": [2, 430, 315, 82], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 53984, "bbox": [20, 3, 217, 272], "iscrowd": 0}, {"id": 14995967, "category_id": 9, "area": 4344, "bbox": [2, 3, 27, 203], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 46200, "bbox": [284, 1, 349, 157], "iscrowd": 0}, {"id": 14942426, "category_id": 11, "area": 30514, "bbox": [243, 279, 358, 233], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 14499, "bbox": [382, 312, 228, 130], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 4865, "bbox": [247, 256, 151, 97], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 1496, "bbox": [484, 270, 28, 67], "iscrowd": 0}, {"id": 713483, "category_id": 99, "area": 289, "bbox": [345, 215, 10, 50], "iscrowd": 0}, {"id": 65280, "category_id": 99, "area": 509, "bbox": [351, 216, 14, 53], "iscrowd": 0}, {"id": 1048320, "category_id": 99, "area": 917, "bbox": [364, 220, 22, 61], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 11334, "bbox": [253, 89, 183, 131], "iscrowd": 0}]}, {"image_id": "ADE_val_00001471", "file_name": "ADE_val_00001471.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 55519, "bbox": [0, 38, 682, 474], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 52506, "bbox": [243, 344, 439, 168], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 38367, "bbox": [138, 0, 544, 93], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 8672, "bbox": [269, 141, 82, 113], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2297, "bbox": [39, 228, 60, 57], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 36385, "bbox": [0, 0, 171, 229], "iscrowd": 0}, {"id": 15604198, "category_id": 11, "area": 23774, "bbox": [15, 401, 243, 110], "iscrowd": 0}, {"id": 15139031, "category_id": 11, "area": 7472, "bbox": [368, 248, 74, 112], "iscrowd": 0}, {"id": 16711905, "category_id": 11, "area": 25051, "bbox": [463, 36, 209, 158], "iscrowd": 0}, {"id": 16711908, "category_id": 11, "area": 762, "bbox": [170, 80, 14, 62], "iscrowd": 0}, {"id": 16714971, "category_id": 11, "area": 9725, "bbox": [363, 87, 101, 104], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 14247, "bbox": [252, 107, 109, 244], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 2298, "bbox": [259, 117, 96, 27], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 20428, "bbox": [522, 280, 141, 167], "iscrowd": 0}, {"id": 16730915, "category_id": 45, "area": 2384, "bbox": [440, 254, 25, 113], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 6482, "bbox": [63, 287, 162, 63], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 12994, "bbox": [461, 214, 150, 206], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1420, "bbox": [338, 46, 69, 32], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 1615, "bbox": [501, 124, 72, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00001472", "file_name": "ADE_val_00001472.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 27027, "bbox": [2, 91, 510, 302], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7982, "bbox": [0, 365, 564, 147], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 55706, "bbox": [0, 0, 533, 144], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3902, "bbox": [3, 154, 21, 207], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 4326, "bbox": [133, 304, 125, 52], "iscrowd": 0}, {"id": 16714183, "category_id": 11, "area": 15803, "bbox": [140, 89, 113, 149], "iscrowd": 0}, {"id": 16716232, "category_id": 11, "area": 9905, "bbox": [324, 112, 82, 127], "iscrowd": 0}, {"id": 15663585, "category_id": 11, "area": 14299, "bbox": [406, 55, 107, 184], "iscrowd": 0}, {"id": 15991004, "category_id": 11, "area": 33295, "bbox": [512, 1, 156, 510], "iscrowd": 0}, {"id": 15663341, "category_id": 11, "area": 8819, "bbox": [252, 103, 73, 128], "iscrowd": 0}, {"id": 16711879, "category_id": 11, "area": 4367, "bbox": [393, 300, 54, 128], "iscrowd": 0}, {"id": 16580831, "category_id": 11, "area": 2765, "bbox": [336, 300, 57, 61], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 16394, "bbox": [43, 170, 90, 198], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 28101, "bbox": [2, 345, 441, 166], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1459, "bbox": [365, 341, 47, 50], "iscrowd": 0}, {"id": 15280, "category_id": 20, "area": 2655, "bbox": [13, 364, 65, 78], "iscrowd": 0}, {"id": 1848028, "category_id": 20, "area": 13189, "bbox": [171, 421, 201, 90], "iscrowd": 0}, {"id": 13742, "category_id": 20, "area": 1759, "bbox": [178, 330, 85, 25], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 604, "bbox": [421, 248, 59, 54], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 45498, "bbox": [506, 86, 121, 425], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 3475, "bbox": [254, 292, 82, 56], "iscrowd": 0}, {"id": 1376025, "category_id": 72, "area": 564, "bbox": [257, 292, 77, 11], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 40, "bbox": [56, 100, 10, 5], "iscrowd": 0}, {"id": 372735, "category_id": 83, "area": 21, "bbox": [80, 129, 7, 4], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 220, "bbox": [318, 264, 10, 29], "iscrowd": 0}, {"id": 2619911, "category_id": 99, "area": 94, "bbox": [328, 269, 5, 23], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 1208, "bbox": [486, 173, 26, 51], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 8852, "bbox": [446, 307, 67, 165], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 462, "bbox": [253, 230, 71, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00001473", "file_name": "ADE_val_00001473.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 12561, "bbox": [0, 0, 255, 180], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2449, "bbox": [0, 0, 184, 24], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 184, "bbox": [245, 104, 10, 29], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3469, "bbox": [228, 6, 28, 158], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2700, "bbox": [2, 161, 35, 95], "iscrowd": 0}, {"id": 16718039, "category_id": 11, "area": 7563, "bbox": [108, 160, 147, 96], "iscrowd": 0}, {"id": 16384221, "category_id": 11, "area": 7075, "bbox": [163, 30, 67, 114], "iscrowd": 0}, {"id": 16715772, "category_id": 11, "area": 11383, "bbox": [3, 49, 162, 94], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1123, "bbox": [0, 62, 12, 193], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1564, "bbox": [175, 187, 79, 32], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 8556, "bbox": [32, 150, 86, 105], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 505, "bbox": [0, 0, 63, 9], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 176, "bbox": [242, 133, 13, 18], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 1039, "bbox": [34, 107, 80, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001474", "file_name": "ADE_val_00001474.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 81475, "bbox": [0, 21, 653, 437], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2686, "bbox": [133, 337, 95, 88], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 70715, "bbox": [1, 0, 738, 165], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 313, "bbox": [290, 271, 22, 22], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3578, "bbox": [614, 160, 31, 132], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1118, "bbox": [508, 304, 27, 50], "iscrowd": 0}, {"id": 16711887, "category_id": 11, "area": 3423, "bbox": [535, 303, 57, 87], "iscrowd": 0}, {"id": 16711928, "category_id": 11, "area": 1208, "bbox": [633, 332, 17, 95], "iscrowd": 0}, {"id": 15597822, "category_id": 11, "area": 10593, "bbox": [0, 63, 67, 199], "iscrowd": 0}, {"id": 16715717, "category_id": 11, "area": 3901, "bbox": [0, 352, 27, 159], "iscrowd": 0}, {"id": 15864012, "category_id": 11, "area": 9976, "bbox": [650, 0, 118, 134], "iscrowd": 0}, {"id": 15601109, "category_id": 11, "area": 2339, "bbox": [258, 305, 135, 36], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 84083, "bbox": [10, 339, 758, 173], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2439, "bbox": [164, 208, 37, 72], "iscrowd": 0}, {"id": 4981492, "category_id": 23, "area": 1182, "bbox": [588, 190, 18, 66], "iscrowd": 0}, {"id": 3281385, "category_id": 23, "area": 576, "bbox": [571, 191, 9, 65], "iscrowd": 0}, {"id": 4330239, "category_id": 23, "area": 1353, "bbox": [63, 194, 42, 33], "iscrowd": 0}, {"id": 2628861, "category_id": 23, "area": 261, "bbox": [298, 216, 9, 33], "iscrowd": 0}, {"id": 3738087, "category_id": 23, "area": 743, "bbox": [267, 196, 15, 54], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 3356, "bbox": [386, 0, 98, 152], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 716, "bbox": [566, 279, 74, 35], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 42376, "bbox": [643, 87, 125, 415], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 374, "bbox": [172, 277, 36, 20], "iscrowd": 0}, {"id": 7423, "category_id": 67, "area": 160, "bbox": [373, 270, 19, 14], "iscrowd": 0}, {"id": 136191, "category_id": 67, "area": 1382, "bbox": [0, 276, 60, 38], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 9383, "bbox": [391, 249, 117, 90], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 66, "bbox": [499, 105, 13, 6], "iscrowd": 0}, {"id": 40959, "category_id": 83, "area": 55, "bbox": [385, 104, 11, 6], "iscrowd": 0}, {"id": 43519, "category_id": 83, "area": 78, "bbox": [454, 79, 16, 7], "iscrowd": 0}, {"id": 40172, "category_id": 83, "area": 68, "bbox": [294, 110, 12, 8], "iscrowd": 0}, {"id": 51944, "category_id": 83, "area": 38, "bbox": [315, 148, 10, 5], "iscrowd": 0}, {"id": 39935, "category_id": 83, "area": 309, "bbox": [241, 22, 27, 15], "iscrowd": 0}, {"id": 44532, "category_id": 83, "area": 190, "bbox": [387, 6, 22, 11], "iscrowd": 0}, {"id": 1295103, "category_id": 83, "area": 218, "bbox": [577, 6, 25, 12], "iscrowd": 0}, {"id": 2007537, "category_id": 83, "area": 48, "bbox": [642, 134, 11, 5], "iscrowd": 0}, {"id": 43746, "category_id": 83, "area": 78, "bbox": [612, 147, 15, 6], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 352, "bbox": [177, 293, 27, 15], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 3022, "bbox": [333, 353, 112, 39], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 140, "bbox": [376, 283, 14, 12], "iscrowd": 0}, {"id": 15865343, "category_id": 126, "area": 567, "bbox": [13, 305, 26, 24], "iscrowd": 0}, {"id": 16715263, "category_id": 126, "area": 167, "bbox": [294, 292, 15, 13], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 3271, "bbox": [588, 319, 45, 97], "iscrowd": 0}, {"id": 1638351, "category_id": 130, "area": 8980, "bbox": [19, 333, 77, 167], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 4273, "bbox": [387, 162, 125, 63], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 1164, "bbox": [327, 369, 118, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00001475", "file_name": "ADE_val_00001475.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 23679, "bbox": [300, 0, 465, 497], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 38447, "bbox": [1, 379, 764, 132], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 8545, "bbox": [0, 413, 111, 98], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 11723, "bbox": [432, 4, 111, 117], "iscrowd": 0}, {"id": 16711921, "category_id": 11, "area": 79579, "bbox": [352, 272, 410, 239], "iscrowd": 0}, {"id": 15532239, "category_id": 11, "area": 23504, "bbox": [606, 1, 148, 193], "iscrowd": 0}, {"id": 15014370, "category_id": 11, "area": 80001, "bbox": [142, 1, 293, 389], "iscrowd": 0}, {"id": 16122853, "category_id": 11, "area": 14251, "bbox": [1, 1, 149, 100], "iscrowd": 0}, {"id": 15270869, "category_id": 11, "area": 30576, "bbox": [1, 171, 143, 221], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 3037, "bbox": [559, 38, 34, 109], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 718, "bbox": [537, 347, 62, 18], "iscrowd": 0}, {"id": 1025776, "category_id": 68, "area": 501, "bbox": [534, 360, 62, 13], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 1297, "bbox": [591, 386, 34, 69], "iscrowd": 0}, {"id": 456960, "category_id": 99, "area": 639, "bbox": [609, 318, 21, 46], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 6660, "bbox": [217, 312, 95, 198], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1485, "bbox": [146, 176, 47, 42], "iscrowd": 0}, {"id": 62029, "category_id": 113, "area": 636, "bbox": [411, 225, 41, 21], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 10666, "bbox": [432, 115, 98, 121], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 9919, "bbox": [3, 97, 135, 79], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 1121, "bbox": [736, 2, 30, 75], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 231, "bbox": [282, 213, 39, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00001476", "file_name": "ADE_val_00001476.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 105752, "bbox": [2, 1, 574, 391], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 65211, "bbox": [1, 285, 575, 147], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 24701, "bbox": [23, 1, 553, 91], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 17188, "bbox": [216, 60, 179, 110], "iscrowd": 0}, {"id": 16719575, "category_id": 11, "area": 1235, "bbox": [189, 222, 16, 91], "iscrowd": 0}, {"id": 16712898, "category_id": 11, "area": 4661, "bbox": [320, 228, 70, 84], "iscrowd": 0}, {"id": 16711891, "category_id": 11, "area": 5580, "bbox": [260, 228, 69, 90], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 12074, "bbox": [479, 114, 79, 177], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 768, "bbox": [272, 194, 88, 37], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 5229, "bbox": [204, 215, 80, 97], "iscrowd": 0}]}, {"image_id": "ADE_val_00001477", "file_name": "ADE_val_00001477.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 45554, "bbox": [1, 1, 511, 273], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 16007, "bbox": [101, 224, 312, 116], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6648, "bbox": [2, 1, 53, 141], "iscrowd": 0}, {"id": 15524601, "category_id": 9, "area": 8050, "bbox": [160, 14, 75, 121], "iscrowd": 0}, {"id": 14078456, "category_id": 9, "area": 3727, "bbox": [283, 1, 40, 127], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 11187, "bbox": [348, 1, 162, 117], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1167, "bbox": [200, 150, 156, 20], "iscrowd": 0}, {"id": 6358767, "category_id": 16, "area": 11377, "bbox": [1, 242, 176, 98], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1910, "bbox": [285, 1, 58, 35], "iscrowd": 0}, {"id": 865511, "category_id": 19, "area": 1896, "bbox": [145, 1, 111, 24], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2722, "bbox": [170, 173, 56, 107], "iscrowd": 0}, {"id": 11960, "category_id": 20, "area": 2775, "bbox": [82, 219, 57, 84], "iscrowd": 0}, {"id": 11192, "category_id": 20, "area": 1548, "bbox": [279, 142, 68, 96], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 173, "bbox": [267, 79, 12, 19], "iscrowd": 0}, {"id": 2434047, "category_id": 23, "area": 172, "bbox": [267, 102, 12, 19], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 10759, "bbox": [88, 153, 178, 139], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 824, "bbox": [124, 129, 35, 61], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 14389, "bbox": [313, 166, 145, 173], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 9139, "bbox": [331, 34, 118, 94], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 14437, "bbox": [411, 183, 99, 157], "iscrowd": 0}]}, {"image_id": "ADE_val_00001478", "file_name": "ADE_val_00001478.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 55546, "bbox": [0, 0, 682, 375], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 42733, "bbox": [102, 369, 580, 142], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 18138, "bbox": [113, 1, 550, 54], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12205, "bbox": [381, 73, 90, 144], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 9547, "bbox": [255, 76, 115, 136], "iscrowd": 0}, {"id": 16711931, "category_id": 11, "area": 57218, "bbox": [0, 8, 226, 503], "iscrowd": 0}, {"id": 16065493, "category_id": 11, "area": 5645, "bbox": [216, 285, 44, 160], "iscrowd": 0}, {"id": 16719845, "category_id": 11, "area": 6504, "bbox": [209, 61, 91, 88], "iscrowd": 0}, {"id": 16711908, "category_id": 11, "area": 2845, "bbox": [426, 272, 112, 107], "iscrowd": 0}, {"id": 16712152, "category_id": 11, "area": 4951, "bbox": [330, 271, 96, 122], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 20173, "bbox": [567, 122, 87, 255], "iscrowd": 0}, {"id": 3604234, "category_id": 15, "area": 7877, "bbox": [646, 122, 36, 264], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 703, "bbox": [344, 236, 75, 29], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 44619, "bbox": [55, 162, 151, 349], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 12879, "bbox": [215, 230, 115, 201], "iscrowd": 0}, {"id": 2752256, "category_id": 74, "area": 29680, "bbox": [357, 286, 171, 207], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 225, "bbox": [371, 25, 23, 13], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 4159, "bbox": [216, 150, 77, 59], "iscrowd": 0}]}, {"image_id": "ADE_val_00001479", "file_name": "ADE_val_00001479.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 22997, "bbox": [0, 0, 256, 193], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4383, "bbox": [2, 192, 254, 64], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2823, "bbox": [1, 1, 112, 40], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 232, "bbox": [112, 129, 20, 16], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1601, "bbox": [137, 90, 36, 50], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 8551, "bbox": [10, 170, 178, 85], "iscrowd": 0}, {"id": 16711917, "category_id": 11, "area": 2669, "bbox": [172, 69, 84, 59], "iscrowd": 0}, {"id": 16717053, "category_id": 11, "area": 1129, "bbox": [15, 91, 31, 39], "iscrowd": 0}, {"id": 16320250, "category_id": 11, "area": 689, "bbox": [116, 94, 22, 33], "iscrowd": 0}, {"id": 16719563, "category_id": 11, "area": 1471, "bbox": [65, 149, 120, 28], "iscrowd": 0}, {"id": 15401453, "category_id": 11, "area": 295, "bbox": [77, 96, 11, 31], "iscrowd": 0}, {"id": 14753020, "category_id": 11, "area": 771, "bbox": [245, 166, 11, 71], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 138, "bbox": [37, 151, 28, 8], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 7256, "bbox": [185, 102, 60, 139], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 1147, "bbox": [46, 157, 93, 27], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 1242, "bbox": [49, 103, 28, 48], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 381, "bbox": [88, 115, 27, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001480", "file_name": "ADE_val_00001480.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 12553, "bbox": [1, 45, 223, 253], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1920, "bbox": [2, 248, 218, 52], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 12900, "bbox": [7, 1, 218, 65], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 3153, "bbox": [48, 264, 105, 34], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2430, "bbox": [5, 64, 36, 78], "iscrowd": 0}, {"id": 16711915, "category_id": 11, "area": 4327, "bbox": [44, 67, 60, 75], "iscrowd": 0}, {"id": 16713186, "category_id": 11, "area": 4450, "bbox": [103, 67, 62, 75], "iscrowd": 0}, {"id": 16720110, "category_id": 11, "area": 1790, "bbox": [196, 223, 27, 76], "iscrowd": 0}, {"id": 16715494, "category_id": 11, "area": 2904, "bbox": [23, 193, 40, 85], "iscrowd": 0}, {"id": 15208951, "category_id": 11, "area": 2250, "bbox": [64, 193, 33, 71], "iscrowd": 0}, {"id": 14812914, "category_id": 11, "area": 578, "bbox": [157, 193, 11, 74], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 226, "bbox": [22, 178, 34, 10], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 3398, "bbox": [3, 132, 28, 165], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 3658, "bbox": [164, 195, 55, 104], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 251, "bbox": [79, 2, 26, 13], "iscrowd": 0}, {"id": 103935, "category_id": 83, "area": 101, "bbox": [90, 42, 17, 7], "iscrowd": 0}, {"id": 567287, "category_id": 83, "area": 102, "bbox": [23, 33, 15, 8], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 134, "bbox": [41, 157, 7, 21], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 1367, "bbox": [164, 157, 52, 29], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 4253, "bbox": [98, 193, 61, 73], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 618, "bbox": [193, 120, 29, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001481", "file_name": "ADE_val_00001481.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 24628, "bbox": [2, 1, 296, 223], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7837, "bbox": [3, 154, 295, 71], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1823, "bbox": [83, 1, 197, 14], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5061, "bbox": [201, 29, 60, 92], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1275, "bbox": [198, 127, 78, 72], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1387, "bbox": [23, 143, 61, 54], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2182, "bbox": [1, 167, 62, 57], "iscrowd": 0}, {"id": 77783, "category_id": 20, "area": 2107, "bbox": [62, 129, 46, 72], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6436, "bbox": [2, 1, 64, 118], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 3419, "bbox": [87, 74, 54, 95], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 8504, "bbox": [202, 113, 98, 111], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 929, "bbox": [92, 118, 25, 61], "iscrowd": 0}]}, {"image_id": "ADE_val_00001482", "file_name": "ADE_val_00001482.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 7638, "bbox": [1, 23, 255, 116], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7184, "bbox": [0, 205, 203, 50], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7410, "bbox": [0, 0, 256, 44], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1560, "bbox": [0, 27, 169, 109], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2642, "bbox": [157, 56, 46, 65], "iscrowd": 0}, {"id": 14470109, "category_id": 9, "area": 2627, "bbox": [101, 56, 45, 66], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7180, "bbox": [0, 25, 103, 79], "iscrowd": 0}, {"id": 15405543, "category_id": 11, "area": 3103, "bbox": [206, 33, 48, 71], "iscrowd": 0}, {"id": 16719849, "category_id": 11, "area": 869, "bbox": [198, 160, 58, 39], "iscrowd": 0}, {"id": 15009498, "category_id": 11, "area": 7535, "bbox": [108, 139, 148, 79], "iscrowd": 0}, {"id": 16718567, "category_id": 11, "area": 3361, "bbox": [198, 181, 57, 75], "iscrowd": 0}, {"id": 16714968, "category_id": 11, "area": 5317, "bbox": [0, 147, 61, 100], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 449, "bbox": [128, 128, 56, 11], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 134, "bbox": [74, 135, 32, 7], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 277, "bbox": [228, 162, 28, 19], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 60, "bbox": [164, 15, 10, 7], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 451, "bbox": [32, 11, 27, 24], "iscrowd": 0}, {"id": 61558, "category_id": 113, "area": 343, "bbox": [61, 16, 30, 20], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 79, "bbox": [65, 121, 9, 9], "iscrowd": 0}, {"id": 16711931, "category_id": 126, "area": 74, "bbox": [48, 131, 10, 8], "iscrowd": 0}, {"id": 16712409, "category_id": 126, "area": 88, "bbox": [29, 131, 11, 9], "iscrowd": 0}, {"id": 15728869, "category_id": 126, "area": 56, "bbox": [15, 135, 8, 7], "iscrowd": 0}, {"id": 16711920, "category_id": 126, "area": 44, "bbox": [0, 137, 6, 8], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 3528, "bbox": [58, 143, 50, 84], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 580, "bbox": [218, 14, 31, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001483", "file_name": "ADE_val_00001483.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 25340, "bbox": [0, 0, 255, 186], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 4374, "bbox": [130, 206, 125, 50], "iscrowd": 0}, {"id": 15663333, "category_id": 11, "area": 362, "bbox": [0, 236, 25, 19], "iscrowd": 0}, {"id": 15013827, "category_id": 11, "area": 6492, "bbox": [114, 0, 142, 116], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 1243, "bbox": [2, 25, 111, 22], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 8632, "bbox": [134, 18, 113, 84], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 3203, "bbox": [24, 211, 108, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00001484", "file_name": "ADE_val_00001484.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 34388, "bbox": [2, 1, 222, 299], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7431, "bbox": [74, 222, 150, 77], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 4743, "bbox": [126, 135, 52, 110], "iscrowd": 0}, {"id": 16711921, "category_id": 11, "area": 3837, "bbox": [133, 2, 53, 84], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 324, "bbox": [29, 71, 49, 7], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 10739, "bbox": [31, 87, 60, 213], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 2091, "bbox": [176, 180, 40, 60], "iscrowd": 0}]}, {"image_id": "ADE_val_00001485", "file_name": "ADE_val_00001485.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 70751, "bbox": [2, 1, 476, 639], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 29720, "bbox": [2, 473, 323, 167], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 32822, "bbox": [2, 1, 463, 110], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 20575, "bbox": [83, 153, 132, 199], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 31631, "bbox": [223, 42, 254, 214], "iscrowd": 0}, {"id": 16711913, "category_id": 11, "area": 11060, "bbox": [1, 355, 86, 151], "iscrowd": 0}, {"id": 14811342, "category_id": 11, "area": 9957, "bbox": [82, 354, 88, 138], "iscrowd": 0}, {"id": 15272666, "category_id": 11, "area": 55723, "bbox": [162, 378, 317, 262], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1413, "bbox": [192, 342, 91, 46], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 4035, "bbox": [273, 402, 167, 37], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 7743, "bbox": [296, 189, 180, 66], "iscrowd": 0}]}, {"image_id": "ADE_val_00001486", "file_name": "ADE_val_00001486.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 119836, "bbox": [1, 0, 638, 480], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 946, "bbox": [265, 0, 113, 16], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 31497, "bbox": [475, 1, 164, 217], "iscrowd": 0}, {"id": 16061667, "category_id": 11, "area": 4527, "bbox": [393, 415, 164, 64], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 31191, "bbox": [352, 88, 111, 392], "iscrowd": 0}, {"id": 3735302, "category_id": 15, "area": 5425, "bbox": [239, 174, 63, 90], "iscrowd": 0}, {"id": 2352640, "category_id": 15, "area": 57033, "bbox": [56, 83, 147, 396], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 22340, "bbox": [1, 21, 53, 457], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 14134, "bbox": [475, 228, 165, 97], "iscrowd": 0}]}, {"image_id": "ADE_val_00001487", "file_name": "ADE_val_00001487.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 35691, "bbox": [0, 61, 640, 229], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 24169, "bbox": [0, 390, 640, 122], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 51023, "bbox": [0, 0, 640, 167], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1665, "bbox": [293, 176, 24, 74], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 15763, "bbox": [0, 94, 119, 179], "iscrowd": 0}, {"id": 16716488, "category_id": 11, "area": 2390, "bbox": [353, 134, 29, 118], "iscrowd": 0}, {"id": 15597795, "category_id": 11, "area": 6069, "bbox": [188, 113, 112, 136], "iscrowd": 0}, {"id": 15728849, "category_id": 11, "area": 9785, "bbox": [374, 113, 139, 186], "iscrowd": 0}, {"id": 16583400, "category_id": 11, "area": 17633, "bbox": [491, 103, 149, 152], "iscrowd": 0}, {"id": 16718027, "category_id": 11, "area": 13508, "bbox": [472, 286, 168, 129], "iscrowd": 0}, {"id": 15865047, "category_id": 11, "area": 13688, "bbox": [0, 299, 134, 131], "iscrowd": 0}, {"id": 15073524, "category_id": 11, "area": 1418, "bbox": [337, 264, 45, 37], "iscrowd": 0}, {"id": 16715212, "category_id": 11, "area": 1812, "bbox": [226, 284, 76, 32], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1393, "bbox": [386, 135, 34, 44], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 1110, "bbox": [293, 246, 24, 59], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 1528, "bbox": [126, 400, 65, 50], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1369, "bbox": [212, 0, 44, 176], "iscrowd": 0}, {"id": 1568461, "category_id": 37, "area": 1422, "bbox": [329, 0, 38, 182], "iscrowd": 0}, {"id": 583420, "category_id": 37, "area": 1206, "bbox": [419, 25, 34, 161], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1456, "bbox": [271, 162, 33, 117], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1072, "bbox": [328, 272, 88, 48], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 7311, "bbox": [382, 188, 73, 109], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 669, "bbox": [172, 370, 18, 54], "iscrowd": 0}, {"id": 44537, "category_id": 68, "area": 2130, "bbox": [148, 428, 42, 70], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 4116, "bbox": [107, 275, 119, 50], "iscrowd": 0}, {"id": 2752256, "category_id": 74, "area": 37844, "bbox": [99, 313, 450, 199], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 192, "bbox": [35, 36, 26, 10], "iscrowd": 0}, {"id": 45055, "category_id": 83, "area": 149, "bbox": [178, 56, 22, 8], "iscrowd": 0}, {"id": 1487843, "category_id": 83, "area": 103, "bbox": [293, 74, 18, 7], "iscrowd": 0}, {"id": 48102, "category_id": 83, "area": 94, "bbox": [397, 81, 17, 9], "iscrowd": 0}, {"id": 703743, "category_id": 83, "area": 118, "bbox": [486, 70, 18, 9], "iscrowd": 0}, {"id": 50943, "category_id": 83, "area": 70, "bbox": [353, 97, 15, 5], "iscrowd": 0}, {"id": 762101, "category_id": 83, "area": 94, "bbox": [623, 47, 16, 7], "iscrowd": 0}, {"id": 38909, "category_id": 83, "area": 218, "bbox": [263, 21, 26, 11], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 235, "bbox": [503, 249, 11, 27], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 4849, "bbox": [486, 348, 103, 158], "iscrowd": 0}, {"id": 16762884, "category_id": 111, "area": 6541, "bbox": [411, 372, 116, 139], "iscrowd": 0}, {"id": 16570368, "category_id": 111, "area": 6292, "bbox": [268, 405, 112, 107], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 758, "bbox": [146, 370, 26, 40], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 2177, "bbox": [222, 175, 55, 43], "iscrowd": 0}, {"id": 16750848, "category_id": 134, "area": 13516, "bbox": [85, 59, 145, 134], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1736, "bbox": [567, 250, 48, 42], "iscrowd": 0}, {"id": 65297, "category_id": 138, "area": 306, "bbox": [495, 273, 50, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00001488", "file_name": "ADE_val_00001488.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 80684, "bbox": [0, 0, 682, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21231, "bbox": [149, 378, 533, 133], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 13258, "bbox": [388, 408, 237, 103], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 22808, "bbox": [507, 0, 175, 177], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 69503, "bbox": [12, 0, 549, 143], "iscrowd": 0}, {"id": 16515272, "category_id": 11, "area": 17076, "bbox": [34, 328, 115, 183], "iscrowd": 0}, {"id": 15532257, "category_id": 11, "area": 73801, "bbox": [107, 244, 414, 267], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2340, "bbox": [327, 196, 138, 54], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 11628, "bbox": [504, 230, 91, 176], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 351, "bbox": [321, 200, 14, 33], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 4148, "bbox": [488, 60, 71, 66], "iscrowd": 0}]}, {"image_id": "ADE_val_00001489", "file_name": "ADE_val_00001489.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18155, "bbox": [0, 0, 227, 137], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4878, "bbox": [0, 62, 227, 235], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 450, "bbox": [26, 132, 14, 47], "iscrowd": 0}, {"id": 4128941, "category_id": 13, "area": 379, "bbox": [148, 125, 14, 43], "iscrowd": 0}, {"id": 2561419, "category_id": 13, "area": 636, "bbox": [189, 146, 17, 59], "iscrowd": 0}, {"id": 2424993, "category_id": 13, "area": 615, "bbox": [105, 158, 18, 51], "iscrowd": 0}, {"id": 5963926, "category_id": 13, "area": 982, "bbox": [51, 229, 22, 67], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 5569, "bbox": [6, 62, 98, 80], "iscrowd": 0}, {"id": 61391, "category_id": 70, "area": 5694, "bbox": [113, 61, 103, 80], "iscrowd": 0}]}, {"image_id": "ADE_val_00001490", "file_name": "ADE_val_00001490.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 33565, "bbox": [1, 105, 681, 250], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 15620, "bbox": [0, 0, 682, 49], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 37615, "bbox": [436, 14, 246, 282], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 84857, "bbox": [0, 136, 683, 374], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 171709, "bbox": [0, 12, 682, 476], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 1221, "bbox": [198, 148, 336, 161], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 1128, "bbox": [153, 135, 115, 16], "iscrowd": 0}, {"id": 59291, "category_id": 77, "area": 331, "bbox": [64, 22, 42, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00001491", "file_name": "ADE_val_00001491.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 8380, "bbox": [30, 1, 226, 79], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 23520, "bbox": [2, 0, 254, 255], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 1721, "bbox": [107, 46, 149, 32], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 29830, "bbox": [2, 112, 254, 144], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 272, "bbox": [229, 229, 12, 26], "iscrowd": 0}, {"id": 16324146, "category_id": 94, "area": 285, "bbox": [176, 234, 15, 21], "iscrowd": 0}, {"id": 16714286, "category_id": 94, "area": 266, "bbox": [114, 235, 15, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00001492", "file_name": "ADE_val_00001492.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 1288, "bbox": [165, 91, 84, 32], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9148, "bbox": [2, 1, 254, 57], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 19761, "bbox": [2, 17, 254, 107], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2758, "bbox": [131, 196, 125, 59], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 31317, "bbox": [0, 120, 256, 136], "iscrowd": 0}]}, {"image_id": "ADE_val_00001493", "file_name": "ADE_val_00001493.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 53101, "bbox": [0, 0, 498, 204], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 4293, "bbox": [220, 200, 279, 23], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 24630, "bbox": [9, 113, 303, 238], "iscrowd": 0}, {"id": 5439232, "category_id": 91, "area": 43110, "bbox": [0, 24, 481, 212], "iscrowd": 0}]}, {"image_id": "ADE_val_00001494", "file_name": "ADE_val_00001494.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 40688, "bbox": [0, 0, 499, 101], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 27261, "bbox": [0, 330, 499, 67], "iscrowd": 0}, {"id": 16711864, "category_id": 108, "area": 12126, "bbox": [2, 99, 58, 234], "iscrowd": 0}, {"id": 15079117, "category_id": 108, "area": 32327, "bbox": [51, 99, 141, 240], "iscrowd": 0}, {"id": 15007952, "category_id": 108, "area": 34722, "bbox": [192, 99, 148, 245], "iscrowd": 0}, {"id": 15273671, "category_id": 108, "area": 35645, "bbox": [333, 99, 156, 249], "iscrowd": 0}, {"id": 16711863, "category_id": 108, "area": 3781, "bbox": [475, 98, 23, 255], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 8717, "bbox": [142, 1, 187, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00001495", "file_name": "ADE_val_00001495.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 30694, "bbox": [1, 41, 552, 124], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 40704, "bbox": [272, 315, 410, 196], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 47236, "bbox": [2, 0, 679, 108], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 7575, "bbox": [307, 367, 202, 70], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 47642, "bbox": [548, 50, 134, 419], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 8990, "bbox": [287, 264, 221, 114], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2810, "bbox": [3, 0, 87, 49], "iscrowd": 0}, {"id": 11665663, "category_id": 44, "area": 5668, "bbox": [580, 151, 93, 64], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1301, "bbox": [197, 55, 95, 23], "iscrowd": 0}, {"id": 233983, "category_id": 83, "area": 699, "bbox": [261, 86, 71, 16], "iscrowd": 0}, {"id": 174591, "category_id": 83, "area": 1786, "bbox": [494, 30, 88, 27], "iscrowd": 0}, {"id": 37875, "category_id": 83, "area": 604, "bbox": [507, 73, 46, 15], "iscrowd": 0}, {"id": 16711864, "category_id": 108, "area": 75148, "bbox": [0, 102, 195, 410], "iscrowd": 0}, {"id": 16715972, "category_id": 108, "area": 5687, "bbox": [428, 163, 73, 83], "iscrowd": 0}, {"id": 16518822, "category_id": 108, "area": 4970, "bbox": [365, 164, 64, 81], "iscrowd": 0}, {"id": 16191440, "category_id": 108, "area": 4612, "bbox": [304, 165, 61, 79], "iscrowd": 0}, {"id": 16711844, "category_id": 108, "area": 1699, "bbox": [280, 165, 24, 77], "iscrowd": 0}, {"id": 16717522, "category_id": 108, "area": 654, "bbox": [279, 242, 25, 34], "iscrowd": 0}, {"id": 16716987, "category_id": 108, "area": 4213, "bbox": [499, 161, 53, 86], "iscrowd": 0}, {"id": 16711867, "category_id": 108, "area": 4166, "bbox": [497, 247, 52, 85], "iscrowd": 0}, {"id": 16718796, "category_id": 108, "area": 2552, "bbox": [426, 245, 73, 81], "iscrowd": 0}, {"id": 16711893, "category_id": 108, "area": 3899, "bbox": [363, 242, 64, 82], "iscrowd": 0}, {"id": 16715931, "category_id": 108, "area": 2659, "bbox": [303, 242, 61, 77], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 2444, "bbox": [277, 282, 59, 95], "iscrowd": 0}, {"id": 59765, "category_id": 113, "area": 1962, "bbox": [438, 285, 50, 82], "iscrowd": 0}, {"id": 65360, "category_id": 113, "area": 574, "bbox": [277, 275, 24, 89], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 7836, "bbox": [150, 420, 160, 92], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 530, "bbox": [169, 99, 22, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00001496", "file_name": "ADE_val_00001496.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 10229, "bbox": [2, 0, 288, 204], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 17225, "bbox": [2, 148, 343, 121], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 43949, "bbox": [0, 0, 360, 269], "iscrowd": 0}]}, {"image_id": "ADE_val_00001497", "file_name": "ADE_val_00001497.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 75559, "bbox": [0, 0, 682, 241], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 87718, "bbox": [1, 194, 681, 317], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 23543, "bbox": [0, 1, 145, 178], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 4341, "bbox": [129, 137, 87, 67], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 5882, "bbox": [279, 1, 31, 211], "iscrowd": 0}, {"id": 16763904, "category_id": 131, "area": 29264, "bbox": [370, 12, 243, 129], "iscrowd": 0}]}, {"image_id": "ADE_val_00001498", "file_name": "ADE_val_00001498.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 4567, "bbox": [0, 42, 109, 155], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7950, "bbox": [0, 160, 255, 96], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9321, "bbox": [0, 0, 256, 45], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 5705, "bbox": [0, 203, 146, 51], "iscrowd": 0}, {"id": 16711912, "category_id": 11, "area": 2646, "bbox": [24, 119, 64, 60], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2599, "bbox": [89, 146, 161, 77], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 349, "bbox": [187, 142, 38, 11], "iscrowd": 0}, {"id": 549342, "category_id": 20, "area": 256, "bbox": [147, 139, 30, 10], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 3070, "bbox": [128, 162, 73, 83], "iscrowd": 0}, {"id": 13434644, "category_id": 31, "area": 1806, "bbox": [85, 156, 45, 60], "iscrowd": 0}, {"id": 13038852, "category_id": 31, "area": 1679, "bbox": [205, 159, 51, 83], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 1049, "bbox": [0, 138, 49, 58], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 10594, "bbox": [73, 31, 183, 155], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 729, "bbox": [155, 35, 46, 26], "iscrowd": 0}, {"id": 46335, "category_id": 68, "area": 919, "bbox": [204, 33, 50, 25], "iscrowd": 0}, {"id": 36087, "category_id": 68, "area": 889, "bbox": [205, 60, 49, 21], "iscrowd": 0}, {"id": 573416, "category_id": 68, "area": 825, "bbox": [155, 63, 46, 21], "iscrowd": 0}, {"id": 693247, "category_id": 68, "area": 543, "bbox": [117, 67, 33, 18], "iscrowd": 0}, {"id": 1096447, "category_id": 68, "area": 557, "bbox": [117, 90, 36, 16], "iscrowd": 0}, {"id": 428773, "category_id": 68, "area": 747, "bbox": [157, 86, 45, 20], "iscrowd": 0}, {"id": 1612287, "category_id": 68, "area": 764, "bbox": [159, 109, 43, 20], "iscrowd": 0}, {"id": 2008063, "category_id": 68, "area": 810, "bbox": [206, 112, 47, 19], "iscrowd": 0}, {"id": 46316, "category_id": 68, "area": 933, "bbox": [206, 86, 49, 22], "iscrowd": 0}, {"id": 49391, "category_id": 68, "area": 391, "bbox": [79, 72, 28, 15], "iscrowd": 0}, {"id": 40948, "category_id": 68, "area": 501, "bbox": [112, 49, 37, 17], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 1372, "bbox": [28, 138, 50, 75], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 88, "bbox": [7, 26, 27, 6], "iscrowd": 0}, {"id": 50934, "category_id": 83, "area": 783, "bbox": [60, 2, 65, 16], "iscrowd": 0}, {"id": 375295, "category_id": 83, "area": 85, "bbox": [117, 35, 19, 6], "iscrowd": 0}]}, {"image_id": "ADE_val_00001499", "file_name": "ADE_val_00001499.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 223118, "bbox": [0, 43, 510, 623], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 92006, "bbox": [0, 0, 510, 425], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 6772, "bbox": [187, 636, 322, 45], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 567, "bbox": [81, 552, 19, 46], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 12491, "bbox": [0, 602, 205, 81], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 7690, "bbox": [326, 604, 183, 64], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 707, "bbox": [53, 521, 17, 77], "iscrowd": 0}, {"id": 10092799, "category_id": 44, "area": 1374, "bbox": [287, 496, 31, 186], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 1089, "bbox": [47, 330, 71, 56], "iscrowd": 0}]}, {"image_id": "ADE_val_00001500", "file_name": "ADE_val_00001500.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 22872, "bbox": [0, 0, 300, 128], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 13260, "bbox": [2, 1, 297, 173], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 18026, "bbox": [0, 145, 300, 79], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 12568, "bbox": [60, 55, 239, 116], "iscrowd": 0}]}, {"image_id": "ADE_val_00001501", "file_name": "ADE_val_00001501.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 38077, "bbox": [0, 294, 665, 145], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 307825, "bbox": [0, 0, 866, 474], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1620, "bbox": [238, 402, 627, 67], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 63226, "bbox": [0, 431, 866, 80], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 324, "bbox": [420, 417, 33, 15], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1772, "bbox": [158, 405, 82, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001502", "file_name": "ADE_val_00001502.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 216732, "bbox": [0, 0, 762, 328], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 4, "bbox": [98, 470, 17, 2], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 941, "bbox": [237, 316, 525, 12], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 57575, "bbox": [0, 326, 762, 185], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 77293, "bbox": [0, 348, 761, 163], "iscrowd": 0}, {"id": 16761344, "category_id": 95, "area": 6709, "bbox": [0, 310, 762, 26], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1654, "bbox": [297, 373, 67, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00001503", "file_name": "ADE_val_00001503.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14979, "bbox": [0, 0, 299, 225], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 908, "bbox": [0, 0, 76, 22], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1184, "bbox": [276, 82, 24, 142], "iscrowd": 0}, {"id": 2629796, "category_id": 13, "area": 4173, "bbox": [63, 93, 109, 103], "iscrowd": 0}, {"id": 3407999, "category_id": 13, "area": 9045, "bbox": [176, 59, 99, 166], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 22681, "bbox": [0, 32, 209, 193], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 5273, "bbox": [72, 174, 129, 51], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 95, "bbox": [52, 16, 6, 21], "iscrowd": 0}, {"id": 1376000, "category_id": 99, "area": 99, "bbox": [64, 17, 8, 20], "iscrowd": 0}, {"id": 65280, "category_id": 99, "area": 89, "bbox": [75, 15, 6, 21], "iscrowd": 0}, {"id": 2093056, "category_id": 99, "area": 87, "bbox": [88, 13, 5, 22], "iscrowd": 0}, {"id": 1900293, "category_id": 99, "area": 833, "bbox": [93, 10, 62, 24], "iscrowd": 0}, {"id": 2155784, "category_id": 99, "area": 160, "bbox": [122, 46, 7, 27], "iscrowd": 0}, {"id": 982784, "category_id": 99, "area": 145, "bbox": [129, 46, 7, 28], "iscrowd": 0}, {"id": 1634078, "category_id": 99, "area": 150, "bbox": [136, 46, 7, 28], "iscrowd": 0}, {"id": 517888, "category_id": 99, "area": 187, "bbox": [160, 47, 11, 27], "iscrowd": 0}, {"id": 458496, "category_id": 99, "area": 158, "bbox": [170, 47, 10, 26], "iscrowd": 0}, {"id": 456222, "category_id": 99, "area": 207, "bbox": [174, 84, 9, 31], "iscrowd": 0}, {"id": 2287882, "category_id": 99, "area": 207, "bbox": [183, 86, 9, 29], "iscrowd": 0}, {"id": 65289, "category_id": 99, "area": 175, "bbox": [170, 122, 7, 30], "iscrowd": 0}, {"id": 520960, "category_id": 99, "area": 253, "bbox": [183, 123, 10, 34], "iscrowd": 0}, {"id": 1892633, "category_id": 99, "area": 182, "bbox": [149, 129, 10, 26], "iscrowd": 0}, {"id": 65295, "category_id": 99, "area": 131, "bbox": [97, 87, 8, 26], "iscrowd": 0}, {"id": 124426, "category_id": 99, "area": 171, "bbox": [80, 91, 10, 23], "iscrowd": 0}, {"id": 2029824, "category_id": 99, "area": 126, "bbox": [61, 89, 7, 25], "iscrowd": 0}, {"id": 58112, "category_id": 99, "area": 154, "bbox": [32, 123, 8, 26], "iscrowd": 0}, {"id": 2490112, "category_id": 99, "area": 114, "bbox": [63, 126, 6, 25], "iscrowd": 0}, {"id": 714505, "category_id": 99, "area": 176, "bbox": [46, 123, 8, 27], "iscrowd": 0}, {"id": 65310, "category_id": 99, "area": 145, "bbox": [69, 124, 8, 27], "iscrowd": 0}, {"id": 321044, "category_id": 99, "area": 175, "bbox": [99, 47, 8, 26], "iscrowd": 0}, {"id": 2359040, "category_id": 99, "area": 118, "bbox": [30, 54, 8, 22], "iscrowd": 0}, {"id": 62976, "category_id": 99, "area": 104, "bbox": [37, 55, 7, 20], "iscrowd": 0}, {"id": 62744, "category_id": 99, "area": 146, "bbox": [48, 51, 7, 25], "iscrowd": 0}, {"id": 62720, "category_id": 99, "area": 141, "bbox": [56, 52, 7, 24], "iscrowd": 0}, {"id": 2162451, "category_id": 99, "area": 121, "bbox": [63, 53, 8, 22], "iscrowd": 0}, {"id": 1178114, "category_id": 99, "area": 163, "bbox": [30, 87, 8, 26], "iscrowd": 0}, {"id": 58880, "category_id": 99, "area": 141, "bbox": [45, 88, 7, 25], "iscrowd": 0}, {"id": 782336, "category_id": 99, "area": 310, "bbox": [67, 85, 15, 29], "iscrowd": 0}, {"id": 1635602, "category_id": 99, "area": 125, "bbox": [18, 88, 6, 24], "iscrowd": 0}, {"id": 2554889, "category_id": 99, "area": 119, "bbox": [11, 88, 7, 25], "iscrowd": 0}, {"id": 2621184, "category_id": 99, "area": 109, "bbox": [34, 160, 6, 23], "iscrowd": 0}, {"id": 65301, "category_id": 99, "area": 127, "bbox": [36, 195, 8, 22], "iscrowd": 0}, {"id": 719901, "category_id": 99, "area": 109, "bbox": [45, 165, 7, 20], "iscrowd": 0}, {"id": 64768, "category_id": 99, "area": 110, "bbox": [72, 56, 8, 19], "iscrowd": 0}, {"id": 60160, "category_id": 99, "area": 86, "bbox": [80, 57, 7, 17], "iscrowd": 0}, {"id": 61466, "category_id": 99, "area": 150, "bbox": [91, 46, 8, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00001504", "file_name": "ADE_val_00001504.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 62189, "bbox": [5, 1, 474, 439], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 65635, "bbox": [4, 383, 475, 256], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 529, "bbox": [359, 44, 95, 149], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5356, "bbox": [2, 1, 53, 210], "iscrowd": 0}, {"id": 14940670, "category_id": 9, "area": 33871, "bbox": [297, 2, 183, 203], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 18947, "bbox": [355, 402, 125, 237], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 73512, "bbox": [85, 180, 381, 353], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 10763, "bbox": [251, 218, 139, 113], "iscrowd": 0}, {"id": 771327, "category_id": 40, "area": 8352, "bbox": [143, 216, 134, 121], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 1307, "bbox": [408, 157, 31, 49], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 14679, "bbox": [2, 217, 108, 257], "iscrowd": 0}]}, {"image_id": "ADE_val_00001505", "file_name": "ADE_val_00001505.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 154838, "bbox": [1, 1, 682, 489], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 37997, "bbox": [2, 392, 681, 120], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7945, "bbox": [116, 1, 460, 34], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1260, "bbox": [48, 346, 53, 100], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 13539, "bbox": [456, 427, 226, 84], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 54920, "bbox": [424, 57, 198, 306], "iscrowd": 0}, {"id": 15394765, "category_id": 9, "area": 35025, "bbox": [2, 40, 114, 357], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 33916, "bbox": [209, 216, 186, 234], "iscrowd": 0}, {"id": 609222, "category_id": 20, "area": 5086, "bbox": [638, 279, 45, 201], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 3025, "bbox": [61, 427, 58, 67], "iscrowd": 0}]}, {"image_id": "ADE_val_00001506", "file_name": "ADE_val_00001506.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 81571, "bbox": [2, 17, 695, 329], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 68991, "bbox": [1, 273, 699, 195], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 31514, "bbox": [2, 2, 693, 66], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 22776, "bbox": [29, 212, 210, 145], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 23315, "bbox": [420, 86, 140, 186], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6647, "bbox": [200, 296, 187, 96], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 11774, "bbox": [338, 61, 68, 231], "iscrowd": 0}, {"id": 1460991, "category_id": 19, "area": 10920, "bbox": [639, 37, 58, 289], "iscrowd": 0}, {"id": 20716, "category_id": 19, "area": 16843, "bbox": [550, 46, 84, 275], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 32158, "bbox": [357, 243, 235, 225], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1273, "bbox": [279, 155, 35, 120], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1608, "bbox": [463, 261, 60, 42], "iscrowd": 0}, {"id": 1101286, "category_id": 40, "area": 1431, "bbox": [385, 306, 96, 34], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 4105, "bbox": [357, 408, 89, 58], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 86, "bbox": [317, 33, 12, 10], "iscrowd": 0}, {"id": 47102, "category_id": 83, "area": 60, "bbox": [577, 6, 11, 6], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 2797, "bbox": [147, 157, 65, 46], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 365, "bbox": [415, 264, 51, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001507", "file_name": "ADE_val_00001507.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21525, "bbox": [0, 0, 255, 256], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2780, "bbox": [17, 2, 238, 14], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 7361, "bbox": [2, 60, 108, 145], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 358, "bbox": [19, 206, 33, 21], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 7643, "bbox": [60, 12, 68, 180], "iscrowd": 0}, {"id": 2372075, "category_id": 19, "area": 805, "bbox": [248, 14, 7, 180], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 6030, "bbox": [26, 198, 230, 57], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 1745, "bbox": [50, 159, 66, 50], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1192, "bbox": [188, 208, 67, 20], "iscrowd": 0}, {"id": 312302, "category_id": 40, "area": 1048, "bbox": [122, 207, 66, 21], "iscrowd": 0}, {"id": 513023, "category_id": 40, "area": 905, "bbox": [64, 211, 57, 19], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 2440, "bbox": [156, 133, 67, 39], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 1743, "bbox": [131, 186, 112, 20], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 30, "bbox": [65, 2, 12, 4], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 6840, "bbox": [144, 33, 92, 78], "iscrowd": 0}]}, {"image_id": "ADE_val_00001508", "file_name": "ADE_val_00001508.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 60509, "bbox": [0, 92, 768, 265], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 49078, "bbox": [0, 301, 768, 210], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 109031, "bbox": [1, 0, 767, 186], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6308, "bbox": [0, 201, 767, 154], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 5052, "bbox": [253, 278, 105, 59], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 10771, "bbox": [343, 168, 97, 144], "iscrowd": 0}, {"id": 15073, "category_id": 19, "area": 40222, "bbox": [1, 104, 240, 233], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 41427, "bbox": [458, 300, 302, 211], "iscrowd": 0}, {"id": 16733192, "category_id": 24, "area": 45414, "bbox": [9, 296, 294, 215], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1256, "bbox": [584, 320, 66, 61], "iscrowd": 0}, {"id": 54527, "category_id": 40, "area": 304, "bbox": [662, 302, 33, 24], "iscrowd": 0}, {"id": 577777, "category_id": 40, "area": 565, "bbox": [113, 294, 30, 34], "iscrowd": 0}, {"id": 42495, "category_id": 40, "area": 2767, "bbox": [112, 314, 65, 78], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 5446, "bbox": [399, 317, 158, 104], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 996, "bbox": [451, 218, 49, 53], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 48, "bbox": [527, 115, 9, 7], "iscrowd": 0}, {"id": 45034, "category_id": 83, "area": 40, "bbox": [338, 118, 9, 6], "iscrowd": 0}, {"id": 50913, "category_id": 83, "area": 47, "bbox": [433, 70, 9, 7], "iscrowd": 0}, {"id": 1357540, "category_id": 83, "area": 16, "bbox": [429, 145, 6, 3], "iscrowd": 0}, {"id": 41215, "category_id": 83, "area": 8, "bbox": [491, 173, 5, 2], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 4183, "bbox": [253, 200, 85, 55], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 803, "bbox": [0, 335, 35, 44], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 525, "bbox": [469, 271, 17, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00001509", "file_name": "ADE_val_00001509.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 82095, "bbox": [0, 0, 767, 279], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17135, "bbox": [50, 384, 624, 128], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7695, "bbox": [427, 0, 187, 81], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 11738, "bbox": [531, 27, 236, 135], "iscrowd": 0}, {"id": 14804938, "category_id": 9, "area": 25136, "bbox": [529, 125, 119, 280], "iscrowd": 0}, {"id": 15466458, "category_id": 9, "area": 13360, "bbox": [402, 128, 83, 212], "iscrowd": 0}, {"id": 15328723, "category_id": 9, "area": 33408, "bbox": [0, 33, 194, 204], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 27811, "bbox": [0, 333, 246, 179], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 30948, "bbox": [646, 87, 120, 326], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 424, "bbox": [331, 175, 21, 23], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 20941, "bbox": [389, 347, 377, 165], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 13131, "bbox": [434, 278, 140, 145], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1148, "bbox": [471, 181, 36, 97], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 7693, "bbox": [680, 359, 86, 152], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 601, "bbox": [383, 443, 31, 24], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 36355, "bbox": [196, 184, 217, 213], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 28798, "bbox": [229, 362, 305, 150], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 2234, "bbox": [280, 453, 95, 50], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 26246, "bbox": [2, 223, 199, 159], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1101, "bbox": [402, 338, 39, 33], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 1099, "bbox": [206, 107, 25, 77], "iscrowd": 0}]}, {"image_id": "ADE_val_00001510", "file_name": "ADE_val_00001510.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 51605, "bbox": [0, 190, 512, 302], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 37354, "bbox": [0, 497, 511, 270], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 107312, "bbox": [2, 0, 509, 262], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 42997, "bbox": [1, 539, 510, 164], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6862, "bbox": [143, 328, 61, 132], "iscrowd": 0}, {"id": 14404843, "category_id": 9, "area": 3790, "bbox": [219, 330, 63, 66], "iscrowd": 0}, {"id": 16639186, "category_id": 9, "area": 3389, "bbox": [299, 329, 61, 68], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7176, "bbox": [32, 425, 105, 102], "iscrowd": 0}, {"id": 15208940, "category_id": 11, "area": 1744, "bbox": [207, 396, 136, 14], "iscrowd": 0}, {"id": 16711922, "category_id": 11, "area": 6306, "bbox": [196, 410, 168, 42], "iscrowd": 0}, {"id": 16713963, "category_id": 11, "area": 5043, "bbox": [362, 422, 105, 71], "iscrowd": 0}, {"id": 16256494, "category_id": 11, "area": 497, "bbox": [495, 443, 16, 99], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 381, "bbox": [36, 364, 21, 27], "iscrowd": 0}, {"id": 4002815, "category_id": 23, "area": 213, "bbox": [86, 410, 16, 16], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 8968, "bbox": [134, 440, 259, 69], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 9723, "bbox": [32, 287, 93, 144], "iscrowd": 0}, {"id": 3475711, "category_id": 25, "area": 9450, "bbox": [372, 284, 93, 144], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 19373, "bbox": [48, 497, 170, 185], "iscrowd": 0}, {"id": 13499149, "category_id": 31, "area": 27006, "bbox": [323, 458, 189, 218], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 763, "bbox": [234, 312, 32, 28], "iscrowd": 0}, {"id": 458691, "category_id": 37, "area": 737, "bbox": [321, 311, 32, 29], "iscrowd": 0}, {"id": 1566693, "category_id": 37, "area": 1766, "bbox": [361, 356, 53, 107], "iscrowd": 0}, {"id": 60118, "category_id": 37, "area": 632, "bbox": [148, 314, 31, 25], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2007, "bbox": [167, 444, 56, 43], "iscrowd": 0}, {"id": 1291005, "category_id": 40, "area": 1791, "bbox": [312, 443, 52, 44], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 216, "bbox": [400, 370, 24, 11], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 6028, "bbox": [182, 505, 187, 43], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 773, "bbox": [84, 368, 38, 25], "iscrowd": 0}, {"id": 45565, "category_id": 68, "area": 663, "bbox": [38, 328, 26, 32], "iscrowd": 0}, {"id": 34303, "category_id": 68, "area": 411, "bbox": [73, 347, 33, 13], "iscrowd": 0}, {"id": 40959, "category_id": 68, "area": 448, "bbox": [443, 409, 22, 23], "iscrowd": 0}, {"id": 37631, "category_id": 68, "area": 390, "bbox": [445, 335, 19, 24], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 15092, "bbox": [164, 23, 175, 261], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 211, "bbox": [389, 304, 10, 25], "iscrowd": 0}, {"id": 65280, "category_id": 99, "area": 119, "bbox": [401, 312, 12, 15], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 508, "bbox": [77, 259, 27, 51], "iscrowd": 0}, {"id": 15804160, "category_id": 135, "area": 475, "bbox": [399, 257, 26, 51], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 284, "bbox": [416, 298, 14, 27], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 650, "bbox": [341, 378, 23, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00001511", "file_name": "ADE_val_00001511.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 56824, "bbox": [1, 85, 766, 386], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 22784, "bbox": [0, 359, 612, 153], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 93626, "bbox": [2, 0, 765, 177], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2137, "bbox": [350, 193, 151, 172], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12478, "bbox": [0, 129, 54, 255], "iscrowd": 0}, {"id": 13299199, "category_id": 9, "area": 6823, "bbox": [321, 185, 50, 150], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 26652, "bbox": [129, 155, 155, 245], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 581, "bbox": [287, 325, 47, 44], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 576, "bbox": [613, 180, 26, 25], "iscrowd": 0}, {"id": 2696443, "category_id": 23, "area": 343, "bbox": [641, 185, 23, 17], "iscrowd": 0}, {"id": 4260094, "category_id": 23, "area": 223, "bbox": [665, 183, 16, 16], "iscrowd": 0}, {"id": 1835258, "category_id": 23, "area": 230, "bbox": [590, 194, 20, 13], "iscrowd": 0}, {"id": 2824934, "category_id": 23, "area": 110, "bbox": [578, 196, 10, 11], "iscrowd": 0}, {"id": 1968895, "category_id": 23, "area": 398, "bbox": [660, 210, 22, 20], "iscrowd": 0}, {"id": 4260093, "category_id": 23, "area": 90, "bbox": [435, 237, 9, 10], "iscrowd": 0}, {"id": 3997951, "category_id": 23, "area": 314, "bbox": [575, 293, 19, 19], "iscrowd": 0}, {"id": 3014894, "category_id": 23, "area": 285, "bbox": [658, 243, 22, 13], "iscrowd": 0}, {"id": 3084031, "category_id": 23, "area": 204, "bbox": [410, 211, 17, 12], "iscrowd": 0}, {"id": 2425323, "category_id": 23, "area": 173, "bbox": [430, 207, 12, 16], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 37672, "bbox": [0, 355, 411, 157], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 56864, "bbox": [395, 139, 300, 265], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 8694, "bbox": [189, 305, 135, 118], "iscrowd": 0}, {"id": 15924992, "category_id": 31, "area": 15562, "bbox": [565, 365, 203, 147], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 844, "bbox": [294, 275, 34, 56], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 5914, "bbox": [684, 361, 83, 126], "iscrowd": 0}, {"id": 2350057, "category_id": 40, "area": 2343, "bbox": [222, 306, 60, 50], "iscrowd": 0}, {"id": 645365, "category_id": 40, "area": 901, "bbox": [137, 378, 57, 39], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 541, "bbox": [331, 341, 27, 24], "iscrowd": 0}, {"id": 2227207, "category_id": 42, "area": 353, "bbox": [486, 204, 35, 13], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 14586, "bbox": [290, 359, 253, 153], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1284, "bbox": [597, 216, 62, 24], "iscrowd": 0}, {"id": 41457, "category_id": 68, "area": 1203, "bbox": [576, 255, 61, 21], "iscrowd": 0}, {"id": 307455, "category_id": 68, "area": 647, "bbox": [407, 255, 37, 19], "iscrowd": 0}, {"id": 39415, "category_id": 68, "area": 660, "bbox": [409, 279, 35, 23], "iscrowd": 0}, {"id": 38881, "category_id": 68, "area": 1432, "bbox": [592, 288, 66, 26], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 124, "bbox": [215, 107, 19, 9], "iscrowd": 0}, {"id": 43005, "category_id": 83, "area": 151, "bbox": [531, 104, 20, 10], "iscrowd": 0}, {"id": 51693, "category_id": 83, "area": 361, "bbox": [645, 67, 34, 16], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 655, "bbox": [382, 360, 28, 29], "iscrowd": 0}, {"id": 16580857, "category_id": 126, "area": 174, "bbox": [468, 205, 18, 12], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 8668, "bbox": [303, 0, 199, 140], "iscrowd": 0}]}, {"image_id": "ADE_val_00001512", "file_name": "ADE_val_00001512.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 130883, "bbox": [2, 21, 681, 326], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 91022, "bbox": [23, 308, 660, 203], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 27076, "bbox": [0, 0, 683, 55], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 9413, "bbox": [231, 151, 172, 213], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4277, "bbox": [2, 230, 37, 281], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1501, "bbox": [400, 255, 56, 68], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2647, "bbox": [3, 103, 33, 89], "iscrowd": 0}, {"id": 4790015, "category_id": 23, "area": 4410, "bbox": [164, 113, 69, 70], "iscrowd": 0}, {"id": 3018476, "category_id": 23, "area": 2335, "bbox": [331, 102, 38, 66], "iscrowd": 0}, {"id": 3937791, "category_id": 23, "area": 7193, "bbox": [530, 97, 102, 74], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 11370, "bbox": [5, 245, 139, 171], "iscrowd": 0}, {"id": 14898949, "category_id": 24, "area": 19114, "bbox": [449, 217, 234, 128], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 146, "bbox": [460, 104, 41, 5], "iscrowd": 0}, {"id": 3608063, "category_id": 25, "area": 177, "bbox": [460, 169, 43, 6], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1683, "bbox": [79, 153, 62, 131], "iscrowd": 0}, {"id": 720844, "category_id": 37, "area": 1912, "bbox": [411, 193, 52, 70], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3064, "bbox": [30, 269, 77, 54], "iscrowd": 0}, {"id": 897023, "category_id": 40, "area": 1179, "bbox": [467, 235, 51, 42], "iscrowd": 0}, {"id": 178663, "category_id": 40, "area": 931, "bbox": [617, 244, 55, 38], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 6780, "bbox": [450, 297, 199, 93], "iscrowd": 0}, {"id": 6618112, "category_id": 65, "area": 10946, "bbox": [62, 323, 219, 142], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 4817, "bbox": [621, 421, 62, 90], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 540, "bbox": [293, 356, 35, 23], "iscrowd": 0}, {"id": 15859967, "category_id": 126, "area": 155, "bbox": [280, 362, 14, 13], "iscrowd": 0}, {"id": 16719319, "category_id": 126, "area": 787, "bbox": [326, 345, 40, 29], "iscrowd": 0}, {"id": 14745855, "category_id": 126, "area": 134, "bbox": [317, 335, 17, 11], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 202, "bbox": [483, 84, 13, 21], "iscrowd": 0}, {"id": 14084864, "category_id": 136, "area": 129, "bbox": [484, 148, 7, 22], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 345, "bbox": [124, 356, 36, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00001513", "file_name": "ADE_val_00001513.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 108942, "bbox": [0, 0, 762, 436], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 33339, "bbox": [0, 324, 629, 187], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 66296, "bbox": [0, 0, 750, 144], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 5610, "bbox": [570, 142, 117, 161], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 14976, "bbox": [26, 124, 245, 81], "iscrowd": 0}, {"id": 15400191, "category_id": 9, "area": 6389, "bbox": [209, 203, 64, 115], "iscrowd": 0}, {"id": 14339542, "category_id": 9, "area": 15063, "bbox": [28, 190, 115, 153], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2253, "bbox": [626, 279, 54, 92], "iscrowd": 0}, {"id": 15406050, "category_id": 11, "area": 1839, "bbox": [309, 284, 54, 45], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2972, "bbox": [364, 208, 72, 86], "iscrowd": 0}, {"id": 1900317, "category_id": 15, "area": 7713, "bbox": [140, 198, 72, 121], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 672, "bbox": [291, 316, 38, 39], "iscrowd": 0}, {"id": 4922606, "category_id": 16, "area": 1893, "bbox": [403, 282, 155, 73], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 365, "bbox": [499, 272, 36, 13], "iscrowd": 0}, {"id": 14035, "category_id": 20, "area": 257, "bbox": [454, 273, 31, 9], "iscrowd": 0}, {"id": 602306, "category_id": 20, "area": 408, "bbox": [421, 280, 35, 16], "iscrowd": 0}, {"id": 1860323, "category_id": 20, "area": 1795, "bbox": [472, 283, 53, 77], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1779, "bbox": [481, 200, 68, 32], "iscrowd": 0}, {"id": 2953457, "category_id": 23, "area": 1691, "bbox": [482, 232, 67, 28], "iscrowd": 0}, {"id": 5047551, "category_id": 23, "area": 225, "bbox": [686, 194, 9, 30], "iscrowd": 0}, {"id": 1507580, "category_id": 23, "area": 197, "bbox": [687, 226, 8, 29], "iscrowd": 0}, {"id": 2692093, "category_id": 23, "area": 195, "bbox": [314, 239, 12, 17], "iscrowd": 0}, {"id": 4917220, "category_id": 23, "area": 192, "bbox": [327, 239, 12, 16], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 13245, "bbox": [310, 289, 181, 142], "iscrowd": 0}, {"id": 16739584, "category_id": 24, "area": 13566, "bbox": [388, 347, 374, 164], "iscrowd": 0}, {"id": 16730909, "category_id": 24, "area": 14819, "bbox": [12, 303, 285, 177], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 718, "bbox": [406, 221, 24, 32], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2584, "bbox": [651, 262, 67, 54], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 520, "bbox": [389, 299, 38, 46], "iscrowd": 0}, {"id": 1159420, "category_id": 40, "area": 1196, "bbox": [373, 307, 41, 40], "iscrowd": 0}, {"id": 2010618, "category_id": 40, "area": 1372, "bbox": [609, 351, 62, 54], "iscrowd": 0}, {"id": 312807, "category_id": 40, "area": 2424, "bbox": [549, 347, 77, 77], "iscrowd": 0}, {"id": 2344959, "category_id": 40, "area": 3068, "bbox": [622, 379, 102, 72], "iscrowd": 0}, {"id": 2339313, "category_id": 40, "area": 8175, "bbox": [604, 409, 116, 102], "iscrowd": 0}, {"id": 1498367, "category_id": 40, "area": 9573, "bbox": [514, 388, 112, 123], "iscrowd": 0}, {"id": 776447, "category_id": 40, "area": 4914, "bbox": [469, 394, 82, 116], "iscrowd": 0}, {"id": 48127, "category_id": 40, "area": 865, "bbox": [223, 303, 32, 38], "iscrowd": 0}, {"id": 1761270, "category_id": 40, "area": 305, "bbox": [191, 307, 39, 35], "iscrowd": 0}, {"id": 702207, "category_id": 40, "area": 1372, "bbox": [162, 308, 61, 43], "iscrowd": 0}, {"id": 575999, "category_id": 40, "area": 1057, "bbox": [116, 317, 50, 49], "iscrowd": 0}, {"id": 51185, "category_id": 40, "area": 1277, "bbox": [81, 325, 44, 49], "iscrowd": 0}, {"id": 1885951, "category_id": 40, "area": 1903, "bbox": [30, 329, 71, 53], "iscrowd": 0}, {"id": 54783, "category_id": 40, "area": 1849, "bbox": [136, 322, 61, 46], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 126, "bbox": [333, 280, 14, 10], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 17961, "bbox": [117, 352, 261, 159], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 2827, "bbox": [642, 310, 92, 53], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 329, "bbox": [318, 272, 25, 19], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 49, "bbox": [399, 68, 9, 7], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 1229, "bbox": [657, 348, 50, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00001514", "file_name": "ADE_val_00001514.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 78173, "bbox": [0, 0, 785, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 28075, "bbox": [0, 381, 714, 130], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 83489, "bbox": [0, 1, 741, 148], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 2896, "bbox": [591, 335, 122, 156], "iscrowd": 0}, {"id": 16718846, "category_id": 11, "area": 5626, "bbox": [0, 325, 46, 148], "iscrowd": 0}, {"id": 14946002, "category_id": 11, "area": 841, "bbox": [153, 313, 43, 80], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4043, "bbox": [21, 160, 24, 222], "iscrowd": 0}, {"id": 4519436, "category_id": 15, "area": 25265, "bbox": [7, 103, 133, 299], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 8415, "bbox": [341, 154, 109, 82], "iscrowd": 0}, {"id": 2823165, "category_id": 23, "area": 703, "bbox": [160, 199, 27, 29], "iscrowd": 0}, {"id": 2490623, "category_id": 23, "area": 635, "bbox": [161, 234, 26, 26], "iscrowd": 0}, {"id": 3673068, "category_id": 23, "area": 582, "bbox": [553, 207, 30, 21], "iscrowd": 0}, {"id": 4201215, "category_id": 23, "area": 445, "bbox": [519, 205, 21, 23], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 22751, "bbox": [475, 117, 168, 246], "iscrowd": 0}, {"id": 5834751, "category_id": 25, "area": 19257, "bbox": [201, 143, 121, 222], "iscrowd": 0}, {"id": 5772031, "category_id": 25, "area": 2646, "bbox": [311, 238, 166, 18], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 26030, "bbox": [155, 313, 207, 195], "iscrowd": 0}, {"id": 14742528, "category_id": 31, "area": 41392, "bbox": [396, 343, 299, 169], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 7964, "bbox": [616, 189, 119, 323], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 409, "bbox": [166, 295, 21, 22], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 18287, "bbox": [316, 268, 159, 144], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 926, "bbox": [489, 234, 69, 30], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 3026, "bbox": [484, 129, 150, 29], "iscrowd": 0}, {"id": 365818, "category_id": 68, "area": 737, "bbox": [484, 200, 31, 28], "iscrowd": 0}, {"id": 44523, "category_id": 68, "area": 4426, "bbox": [484, 274, 148, 38], "iscrowd": 0}, {"id": 36607, "category_id": 68, "area": 334, "bbox": [577, 256, 36, 12], "iscrowd": 0}, {"id": 46079, "category_id": 68, "area": 827, "bbox": [281, 272, 33, 30], "iscrowd": 0}, {"id": 966377, "category_id": 68, "area": 500, "bbox": [608, 240, 25, 27], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 209, "bbox": [198, 94, 24, 11], "iscrowd": 0}, {"id": 833535, "category_id": 83, "area": 369, "bbox": [334, 75, 31, 16], "iscrowd": 0}, {"id": 2017514, "category_id": 83, "area": 320, "bbox": [507, 55, 27, 16], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 1113, "bbox": [218, 227, 39, 30], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 267, "bbox": [511, 253, 28, 14], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1325, "bbox": [613, 331, 95, 33], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 618, "bbox": [492, 167, 29, 28], "iscrowd": 0}, {"id": 11531529, "category_id": 143, "area": 690, "bbox": [537, 166, 33, 27], "iscrowd": 0}, {"id": 11331074, "category_id": 143, "area": 764, "bbox": [589, 162, 33, 27], "iscrowd": 0}, {"id": 13172484, "category_id": 143, "area": 432, "bbox": [284, 197, 23, 23], "iscrowd": 0}, {"id": 13500182, "category_id": 143, "area": 429, "bbox": [268, 233, 23, 24], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 310, "bbox": [580, 238, 23, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001515", "file_name": "ADE_val_00001515.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 157104, "bbox": [0, 1, 806, 458], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7839, "bbox": [2, 337, 804, 174], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 39649, "bbox": [0, 0, 564, 137], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 47188, "bbox": [0, 364, 530, 147], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3194, "bbox": [172, 142, 51, 66], "iscrowd": 0}, {"id": 16711892, "category_id": 11, "area": 4943, "bbox": [95, 136, 77, 72], "iscrowd": 0}, {"id": 15401174, "category_id": 11, "area": 6930, "bbox": [2, 121, 93, 84], "iscrowd": 0}, {"id": 15605712, "category_id": 11, "area": 5863, "bbox": [98, 261, 73, 91], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 639, "bbox": [244, 179, 20, 34], "iscrowd": 0}, {"id": 1704191, "category_id": 23, "area": 7761, "bbox": [404, 133, 70, 115], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 98730, "bbox": [170, 259, 605, 252], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 4140, "bbox": [714, 110, 82, 258], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 517, "bbox": [634, 306, 37, 72], "iscrowd": 0}, {"id": 1688830, "category_id": 40, "area": 7079, "bbox": [642, 310, 104, 107], "iscrowd": 0}, {"id": 2209279, "category_id": 40, "area": 797, "bbox": [259, 282, 21, 49], "iscrowd": 0}, {"id": 1039359, "category_id": 40, "area": 2918, "bbox": [195, 285, 66, 54], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 2537, "bbox": [0, 273, 27, 100], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 234, "bbox": [177, 253, 46, 7], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 67, "bbox": [79, 98, 11, 8], "iscrowd": 0}, {"id": 46066, "category_id": 83, "area": 67, "bbox": [159, 116, 12, 7], "iscrowd": 0}, {"id": 65351, "category_id": 119, "area": 2258, "bbox": [170, 260, 55, 57], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 6483, "bbox": [22, 267, 77, 101], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 466, "bbox": [37, 254, 52, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00001516", "file_name": "ADE_val_00001516.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 19039, "bbox": [0, 3, 255, 176], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4488, "bbox": [0, 159, 256, 97], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5912, "bbox": [0, 0, 256, 36], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 140, "bbox": [192, 139, 34, 14], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 10522, "bbox": [60, 170, 195, 86], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 2905, "bbox": [144, 109, 77, 72], "iscrowd": 0}, {"id": 15333136, "category_id": 31, "area": 2311, "bbox": [193, 114, 63, 67], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1436, "bbox": [5, 170, 59, 47], "iscrowd": 0}, {"id": 2215423, "category_id": 40, "area": 182, "bbox": [173, 130, 29, 12], "iscrowd": 0}, {"id": 2084577, "category_id": 40, "area": 308, "bbox": [229, 140, 27, 19], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 4554, "bbox": [59, 160, 127, 75], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 63, "bbox": [124, 13, 12, 7], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 8246, "bbox": [1, 24, 108, 85], "iscrowd": 0}]}, {"image_id": "ADE_val_00001517", "file_name": "ADE_val_00001517.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 72566, "bbox": [0, 16, 767, 394], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 119094, "bbox": [0, 299, 768, 213], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 90208, "bbox": [0, 0, 767, 187], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3751, "bbox": [320, 183, 40, 107], "iscrowd": 0}, {"id": 14742520, "category_id": 9, "area": 10915, "bbox": [477, 183, 157, 124], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 26715, "bbox": [20, 263, 223, 161], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 3952, "bbox": [313, 161, 75, 147], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 773, "bbox": [404, 281, 40, 28], "iscrowd": 0}, {"id": 6751468, "category_id": 16, "area": 1868, "bbox": [612, 291, 75, 41], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 5958, "bbox": [458, 157, 216, 135], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 795, "bbox": [707, 157, 21, 47], "iscrowd": 0}, {"id": 3805421, "category_id": 23, "area": 1007, "bbox": [743, 134, 23, 55], "iscrowd": 0}, {"id": 4653281, "category_id": 23, "area": 3451, "bbox": [131, 151, 89, 54], "iscrowd": 0}, {"id": 3997921, "category_id": 23, "area": 1333, "bbox": [245, 155, 51, 38], "iscrowd": 0}, {"id": 2819817, "category_id": 23, "area": 1366, "bbox": [237, 200, 48, 32], "iscrowd": 0}, {"id": 2752767, "category_id": 23, "area": 524, "bbox": [400, 203, 19, 30], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 8691, "bbox": [442, 254, 169, 76], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 8970, "bbox": [249, 258, 123, 99], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 11521, "bbox": [26, 120, 102, 153], "iscrowd": 0}, {"id": 589769, "category_id": 37, "area": 1725, "bbox": [613, 225, 62, 71], "iscrowd": 0}, {"id": 65513, "category_id": 37, "area": 759, "bbox": [409, 236, 35, 48], "iscrowd": 0}, {"id": 1769449, "category_id": 37, "area": 668, "bbox": [495, 137, 36, 52], "iscrowd": 0}, {"id": 1179590, "category_id": 37, "area": 4446, "bbox": [357, 19, 88, 86], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 6143, "bbox": [425, 299, 126, 96], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1365, "bbox": [154, 203, 71, 34], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 422, "bbox": [184, 233, 23, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001518", "file_name": "ADE_val_00001518.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 82473, "bbox": [2, 8, 717, 369], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 33595, "bbox": [0, 337, 720, 142], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 44390, "bbox": [0, 0, 719, 117], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 24125, "bbox": [383, 116, 183, 163], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 31465, "bbox": [602, 102, 118, 302], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1571, "bbox": [329, 285, 39, 61], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 9472, "bbox": [378, 68, 197, 120], "iscrowd": 0}, {"id": 1260031, "category_id": 19, "area": 2086, "bbox": [613, 113, 106, 30], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 19910, "bbox": [80, 120, 163, 140], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 21334, "bbox": [360, 270, 236, 160], "iscrowd": 0}, {"id": 16734230, "category_id": 24, "area": 30480, "bbox": [0, 270, 323, 197], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 981, "bbox": [405, 273, 31, 39], "iscrowd": 0}, {"id": 2476287, "category_id": 40, "area": 2033, "bbox": [433, 271, 50, 50], "iscrowd": 0}, {"id": 698622, "category_id": 40, "area": 2289, "bbox": [478, 270, 55, 58], "iscrowd": 0}, {"id": 120831, "category_id": 40, "area": 730, "bbox": [517, 288, 38, 46], "iscrowd": 0}, {"id": 54783, "category_id": 40, "area": 1622, "bbox": [234, 282, 56, 42], "iscrowd": 0}, {"id": 2018535, "category_id": 40, "area": 3232, "bbox": [15, 296, 79, 70], "iscrowd": 0}, {"id": 1289457, "category_id": 40, "area": 1993, "bbox": [34, 286, 78, 55], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 28338, "bbox": [89, 348, 296, 131], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 816, "bbox": [335, 246, 36, 36], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 77, "bbox": [347, 279, 10, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00001519", "file_name": "ADE_val_00001519.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 76461, "bbox": [2, 0, 766, 353], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 27641, "bbox": [196, 326, 557, 186], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 53479, "bbox": [21, 0, 746, 102], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 4783, "bbox": [475, 274, 139, 76], "iscrowd": 0}, {"id": 14946802, "category_id": 11, "area": 3080, "bbox": [162, 269, 127, 78], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 8752, "bbox": [723, 140, 44, 212], "iscrowd": 0}, {"id": 4390670, "category_id": 15, "area": 23116, "bbox": [0, 60, 114, 243], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6683, "bbox": [524, 336, 154, 115], "iscrowd": 0}, {"id": 5112042, "category_id": 16, "area": 2465, "bbox": [0, 355, 35, 157], "iscrowd": 0}, {"id": 5898495, "category_id": 16, "area": 332, "bbox": [243, 293, 20, 22], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 4691, "bbox": [111, 77, 28, 206], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 12989, "bbox": [469, 439, 298, 73], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 393, "bbox": [489, 181, 23, 18], "iscrowd": 0}, {"id": 1774591, "category_id": 23, "area": 411, "bbox": [488, 205, 24, 18], "iscrowd": 0}, {"id": 3871743, "category_id": 23, "area": 715, "bbox": [487, 237, 25, 31], "iscrowd": 0}, {"id": 4063487, "category_id": 23, "area": 335, "bbox": [252, 181, 22, 17], "iscrowd": 0}, {"id": 3087103, "category_id": 23, "area": 441, "bbox": [251, 205, 25, 20], "iscrowd": 0}, {"id": 3874290, "category_id": 23, "area": 779, "bbox": [250, 231, 26, 31], "iscrowd": 0}, {"id": 1384959, "category_id": 23, "area": 337, "bbox": [198, 266, 27, 30], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 40020, "bbox": [0, 280, 278, 232], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 13623, "bbox": [152, 139, 134, 135], "iscrowd": 0}, {"id": 6490111, "category_id": 25, "area": 14580, "bbox": [472, 140, 146, 136], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 5578, "bbox": [339, 115, 84, 85], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 4662, "bbox": [490, 285, 111, 121], "iscrowd": 0}, {"id": 12320542, "category_id": 31, "area": 11859, "bbox": [581, 330, 187, 151], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2236, "bbox": [127, 207, 63, 74], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3026, "bbox": [156, 294, 77, 60], "iscrowd": 0}, {"id": 961535, "category_id": 40, "area": 3739, "bbox": [89, 302, 80, 87], "iscrowd": 0}, {"id": 2152703, "category_id": 40, "area": 4691, "bbox": [35, 304, 94, 83], "iscrowd": 0}, {"id": 1424639, "category_id": 40, "area": 1351, "bbox": [180, 287, 72, 52], "iscrowd": 0}, {"id": 1034473, "category_id": 40, "area": 5490, "bbox": [682, 354, 86, 97], "iscrowd": 0}, {"id": 709631, "category_id": 40, "area": 859, "bbox": [538, 301, 40, 28], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 18326, "bbox": [284, 223, 197, 132], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 15734, "bbox": [312, 350, 162, 149], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 4286, "bbox": [324, 286, 109, 65], "iscrowd": 0}, {"id": 721121, "category_id": 67, "area": 96, "bbox": [510, 208, 17, 9], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 666, "bbox": [393, 358, 37, 26], "iscrowd": 0}, {"id": 897509, "category_id": 68, "area": 543, "bbox": [512, 246, 25, 28], "iscrowd": 0}, {"id": 43256, "category_id": 68, "area": 213, "bbox": [207, 156, 15, 17], "iscrowd": 0}, {"id": 36351, "category_id": 68, "area": 444, "bbox": [579, 155, 24, 20], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 216, "bbox": [154, 14, 22, 13], "iscrowd": 0}, {"id": 1483263, "category_id": 83, "area": 198, "bbox": [363, 14, 20, 12], "iscrowd": 0}, {"id": 45567, "category_id": 83, "area": 207, "bbox": [591, 13, 23, 13], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 1801, "bbox": [322, 327, 138, 60], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 1652, "bbox": [593, 279, 29, 74], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 1456, "bbox": [357, 347, 40, 51], "iscrowd": 0}, {"id": 13886976, "category_id": 136, "area": 57, "bbox": [514, 215, 9, 8], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 254, "bbox": [557, 182, 18, 17], "iscrowd": 0}, {"id": 12713246, "category_id": 143, "area": 221, "bbox": [189, 181, 17, 16], "iscrowd": 0}, {"id": 11134731, "category_id": 143, "area": 209, "bbox": [492, 156, 16, 16], "iscrowd": 0}, {"id": 12116736, "category_id": 143, "area": 42, "bbox": [497, 169, 16, 3], "iscrowd": 0}]}, {"image_id": "ADE_val_00001520", "file_name": "ADE_val_00001520.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 123947, "bbox": [0, 0, 656, 362], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14041, "bbox": [83, 346, 440, 166], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 10965, "bbox": [97, 0, 489, 96], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 24324, "bbox": [159, 377, 337, 134], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 36462, "bbox": [55, 80, 192, 215], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3543, "bbox": [347, 293, 124, 81], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 3545, "bbox": [43, 90, 24, 233], "iscrowd": 0}, {"id": 343271, "category_id": 19, "area": 5446, "bbox": [242, 112, 38, 196], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1789, "bbox": [425, 173, 37, 53], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 29149, "bbox": [299, 369, 357, 143], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 7485, "bbox": [8, 320, 170, 104], "iscrowd": 0}, {"id": 14417699, "category_id": 31, "area": 20407, "bbox": [0, 345, 168, 167], "iscrowd": 0}, {"id": 12843803, "category_id": 31, "area": 7298, "bbox": [500, 322, 156, 98], "iscrowd": 0}, {"id": 15662885, "category_id": 31, "area": 2752, "bbox": [293, 291, 62, 82], "iscrowd": 0}, {"id": 14677248, "category_id": 31, "area": 2856, "bbox": [469, 289, 59, 82], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 7439, "bbox": [87, 312, 210, 45], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1666, "bbox": [380, 214, 41, 137], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 19506, "bbox": [523, 173, 133, 192], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 2042, "bbox": [556, 284, 84, 75], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 5558, "bbox": [295, 0, 119, 74], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 3599, "bbox": [169, 341, 139, 49], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 318, "bbox": [612, 146, 19, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00001521", "file_name": "ADE_val_00001521.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 110217, "bbox": [0, 22, 659, 323], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 33831, "bbox": [124, 309, 554, 125], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 41162, "bbox": [0, 0, 677, 111], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6624, "bbox": [0, 156, 273, 103], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 9639, "bbox": [269, 353, 177, 81], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 10081, "bbox": [600, 90, 78, 148], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1766, "bbox": [216, 266, 59, 68], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 516, "bbox": [611, 223, 44, 14], "iscrowd": 0}, {"id": 1329600, "category_id": 20, "area": 131, "bbox": [550, 225, 22, 9], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 5740, "bbox": [112, 157, 92, 65], "iscrowd": 0}, {"id": 2165247, "category_id": 23, "area": 2049, "bbox": [388, 153, 44, 51], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 11872, "bbox": [0, 248, 203, 114], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 23625, "bbox": [0, 312, 259, 122], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 6571, "bbox": [540, 233, 138, 99], "iscrowd": 0}, {"id": 23292, "category_id": 39, "area": 6685, "bbox": [539, 239, 73, 107], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1546, "bbox": [62, 252, 45, 56], "iscrowd": 0}, {"id": 2149113, "category_id": 40, "area": 1482, "bbox": [25, 254, 62, 54], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 13289, "bbox": [323, 222, 163, 118], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 3596, "bbox": [168, 344, 132, 90], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 676, "bbox": [225, 243, 36, 27], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 756, "bbox": [544, 154, 17, 49], "iscrowd": 0}, {"id": 15278850, "category_id": 135, "area": 417, "bbox": [254, 146, 16, 36], "iscrowd": 0}, {"id": 16720896, "category_id": 135, "area": 387, "bbox": [27, 137, 20, 24], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 472, "bbox": [350, 249, 22, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00001522", "file_name": "ADE_val_00001522.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 96522, "bbox": [0, 110, 770, 262], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 36893, "bbox": [1, 313, 579, 198], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 104266, "bbox": [0, 1, 770, 167], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 798, "bbox": [176, 222, 49, 42], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1795, "bbox": [425, 186, 28, 68], "iscrowd": 0}, {"id": 16646101, "category_id": 9, "area": 19879, "bbox": [558, 148, 156, 147], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1976, "bbox": [425, 254, 27, 75], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3024, "bbox": [528, 288, 242, 91], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 5541, "bbox": [522, 164, 39, 183], "iscrowd": 0}, {"id": 603135, "category_id": 19, "area": 6898, "bbox": [709, 134, 53, 159], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3268, "bbox": [550, 291, 77, 93], "iscrowd": 0}, {"id": 1792969, "category_id": 20, "area": 326, "bbox": [590, 285, 58, 9], "iscrowd": 0}, {"id": 1853885, "category_id": 20, "area": 489, "bbox": [697, 289, 72, 11], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 51963, "bbox": [263, 297, 508, 215], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 6468, "bbox": [145, 266, 115, 112], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2750, "bbox": [439, 355, 112, 153], "iscrowd": 0}, {"id": 2413549, "category_id": 40, "area": 4112, "bbox": [612, 310, 146, 65], "iscrowd": 0}, {"id": 513791, "category_id": 40, "area": 1056, "bbox": [178, 266, 57, 50], "iscrowd": 0}, {"id": 1427199, "category_id": 40, "area": 1571, "bbox": [184, 276, 46, 41], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 31495, "bbox": [92, 352, 288, 159], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 842, "bbox": [621, 87, 51, 22], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 295, "bbox": [292, 165, 21, 19], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 1530, "bbox": [225, 330, 41, 56], "iscrowd": 0}]}, {"image_id": "ADE_val_00001523", "file_name": "ADE_val_00001523.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 72230, "bbox": [0, 0, 768, 385], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 48681, "bbox": [222, 300, 459, 212], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 68882, "bbox": [106, 0, 662, 134], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3600, "bbox": [397, 169, 87, 110], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5720, "bbox": [505, 122, 60, 150], "iscrowd": 0}, {"id": 14276095, "category_id": 9, "area": 9497, "bbox": [564, 110, 62, 169], "iscrowd": 0}, {"id": 14417878, "category_id": 9, "area": 12837, "bbox": [626, 90, 74, 198], "iscrowd": 0}, {"id": 14416616, "category_id": 9, "area": 12254, "bbox": [701, 70, 66, 225], "iscrowd": 0}, {"id": 16776688, "category_id": 9, "area": 3793, "bbox": [79, 56, 54, 102], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 36345, "bbox": [0, 295, 235, 217], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1088, "bbox": [433, 269, 44, 41], "iscrowd": 0}, {"id": 4653303, "category_id": 16, "area": 7762, "bbox": [677, 396, 91, 116], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 6382, "bbox": [473, 103, 69, 195], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1015, "bbox": [391, 253, 42, 61], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 470, "bbox": [104, 308, 26, 36], "iscrowd": 0}, {"id": 4260094, "category_id": 23, "area": 1104, "bbox": [739, 373, 29, 64], "iscrowd": 0}, {"id": 4728038, "category_id": 23, "area": 1936, "bbox": [22, 293, 47, 75], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 5229, "bbox": [156, 263, 137, 92], "iscrowd": 0}, {"id": 16731392, "category_id": 24, "area": 14037, "bbox": [458, 265, 203, 115], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 15856, "bbox": [0, 139, 153, 267], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 531, "bbox": [186, 279, 36, 21], "iscrowd": 0}, {"id": 52962, "category_id": 40, "area": 985, "bbox": [494, 271, 48, 36], "iscrowd": 0}, {"id": 47094, "category_id": 40, "area": 219, "bbox": [154, 277, 18, 20], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 9626, "bbox": [255, 225, 127, 92], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 781, "bbox": [397, 275, 41, 30], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 442, "bbox": [173, 13, 33, 18], "iscrowd": 0}, {"id": 1877503, "category_id": 83, "area": 149, "bbox": [309, 41, 15, 12], "iscrowd": 0}, {"id": 1218807, "category_id": 83, "area": 124, "bbox": [407, 63, 14, 11], "iscrowd": 0}, {"id": 1297151, "category_id": 83, "area": 142, "bbox": [477, 82, 22, 10], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 9921, "bbox": [351, 309, 161, 102], "iscrowd": 0}, {"id": 46049, "category_id": 98, "area": 19720, "bbox": [459, 420, 279, 92], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 537, "bbox": [252, 168, 24, 42], "iscrowd": 0}, {"id": 15082504, "category_id": 135, "area": 300, "bbox": [363, 177, 18, 36], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 3486, "bbox": [86, 239, 72, 90], "iscrowd": 0}, {"id": 11534099, "category_id": 136, "area": 322, "bbox": [407, 304, 15, 24], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 717, "bbox": [398, 313, 52, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00001524", "file_name": "ADE_val_00001524.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18945, "bbox": [2, 1, 297, 126], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5856, "bbox": [69, 111, 207, 79], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3847, "bbox": [83, 3, 54, 77], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 4727, "bbox": [147, 62, 112, 64], "iscrowd": 0}, {"id": 16718822, "category_id": 11, "area": 2511, "bbox": [263, 70, 36, 83], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 7670, "bbox": [0, 88, 88, 136], "iscrowd": 0}, {"id": 16739328, "category_id": 24, "area": 8996, "bbox": [66, 142, 233, 83], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2286, "bbox": [81, 174, 96, 42], "iscrowd": 0}, {"id": 765439, "category_id": 40, "area": 683, "bbox": [275, 141, 22, 41], "iscrowd": 0}, {"id": 46590, "category_id": 40, "area": 858, "bbox": [2, 82, 45, 31], "iscrowd": 0}, {"id": 45823, "category_id": 40, "area": 1067, "bbox": [2, 130, 53, 32], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 2217, "bbox": [177, 23, 49, 48], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 4221, "bbox": [83, 93, 80, 67], "iscrowd": 0}, {"id": 37887, "category_id": 98, "area": 2548, "bbox": [172, 133, 68, 52], "iscrowd": 0}]}, {"image_id": "ADE_val_00001525", "file_name": "ADE_val_00001525.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 85744, "bbox": [1, 62, 732, 274], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 72162, "bbox": [0, 293, 683, 219], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 80835, "bbox": [0, 0, 733, 164], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 4363, "bbox": [655, 379, 73, 133], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1330, "bbox": [135, 277, 88, 81], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2061, "bbox": [328, 170, 40, 55], "iscrowd": 0}, {"id": 4197887, "category_id": 23, "area": 6016, "bbox": [376, 146, 64, 100], "iscrowd": 0}, {"id": 2162943, "category_id": 23, "area": 2285, "bbox": [455, 165, 53, 45], "iscrowd": 0}, {"id": 4325631, "category_id": 23, "area": 171, "bbox": [181, 264, 17, 16], "iscrowd": 0}, {"id": 3801343, "category_id": 23, "area": 238, "bbox": [167, 267, 19, 15], "iscrowd": 0}, {"id": 2166015, "category_id": 23, "area": 365, "bbox": [136, 265, 25, 19], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 1554, "bbox": [541, 248, 40, 55], "iscrowd": 0}, {"id": 16220928, "category_id": 24, "area": 2040, "bbox": [586, 252, 43, 81], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 10710, "bbox": [235, 225, 124, 131], "iscrowd": 0}, {"id": 14152980, "category_id": 31, "area": 30002, "bbox": [0, 224, 207, 226], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1602, "bbox": [134, 199, 45, 82], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1946, "bbox": [265, 250, 53, 48], "iscrowd": 0}, {"id": 1295094, "category_id": 40, "area": 4284, "bbox": [30, 273, 101, 65], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2126, "bbox": [200, 0, 136, 28], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 22695, "bbox": [657, 101, 76, 411], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 10921, "bbox": [377, 268, 159, 111], "iscrowd": 0}, {"id": 38399, "category_id": 98, "area": 2329, "bbox": [279, 344, 69, 92], "iscrowd": 0}, {"id": 696063, "category_id": 98, "area": 484, "bbox": [359, 334, 60, 18], "iscrowd": 0}, {"id": 634343, "category_id": 98, "area": 6366, "bbox": [374, 352, 88, 103], "iscrowd": 0}, {"id": 38131, "category_id": 98, "area": 11018, "bbox": [297, 368, 102, 122], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 24, "bbox": [625, 201, 4, 10], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1637, "bbox": [322, 338, 79, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00001526", "file_name": "ADE_val_00001526.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 119023, "bbox": [0, 1, 769, 401], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 71811, "bbox": [2, 333, 768, 178], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 43285, "bbox": [51, 1, 719, 128], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 62215, "bbox": [12, 77, 331, 262], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6635, "bbox": [380, 241, 72, 99], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3738, "bbox": [377, 394, 111, 117], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 6306, "bbox": [650, 297, 119, 124], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 49075, "bbox": [108, 285, 351, 226], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 5087, "bbox": [362, 1, 83, 103], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1253, "bbox": [240, 289, 50, 36], "iscrowd": 0}, {"id": 49642, "category_id": 40, "area": 572, "bbox": [284, 288, 30, 35], "iscrowd": 0}, {"id": 704739, "category_id": 40, "area": 228, "bbox": [169, 296, 31, 14], "iscrowd": 0}, {"id": 43007, "category_id": 40, "area": 393, "bbox": [294, 335, 22, 33], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 16627, "bbox": [463, 229, 154, 149], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 150, "bbox": [484, 208, 10, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00001527", "file_name": "ADE_val_00001527.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 126617, "bbox": [1, 1, 639, 389], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9074, "bbox": [1, 349, 638, 79], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 6312, "bbox": [302, 186, 175, 52], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2407, "bbox": [272, 58, 44, 56], "iscrowd": 0}, {"id": 2752749, "category_id": 23, "area": 2547, "bbox": [339, 59, 44, 58], "iscrowd": 0}, {"id": 1573107, "category_id": 23, "area": 3162, "bbox": [408, 56, 52, 63], "iscrowd": 0}, {"id": 1573119, "category_id": 23, "area": 3839, "bbox": [485, 56, 62, 67], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 85842, "bbox": [153, 186, 459, 242], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 26160, "bbox": [2, 185, 155, 241], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2027, "bbox": [194, 6, 66, 247], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3692, "bbox": [24, 311, 82, 54], "iscrowd": 0}]}, {"image_id": "ADE_val_00001528", "file_name": "ADE_val_00001528.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 11025, "bbox": [0, 33, 256, 158], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2434, "bbox": [0, 146, 256, 109], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 11607, "bbox": [1, 0, 255, 50], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2689, "bbox": [23, 68, 229, 70], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 253, "bbox": [92, 168, 86, 13], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1669, "bbox": [184, 74, 29, 73], "iscrowd": 0}, {"id": 16507889, "category_id": 9, "area": 1751, "bbox": [59, 75, 33, 71], "iscrowd": 0}, {"id": 13228503, "category_id": 9, "area": 850, "bbox": [7, 70, 27, 72], "iscrowd": 0}, {"id": 15194837, "category_id": 9, "area": 3770, "bbox": [110, 63, 56, 79], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1220, "bbox": [0, 80, 23, 58], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1050, "bbox": [0, 190, 23, 63], "iscrowd": 0}, {"id": 6227448, "category_id": 16, "area": 6129, "bbox": [41, 211, 170, 43], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 6894, "bbox": [22, 174, 234, 81], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 1239, "bbox": [30, 143, 62, 34], "iscrowd": 0}, {"id": 14022685, "category_id": 31, "area": 923, "bbox": [151, 120, 43, 42], "iscrowd": 0}, {"id": 14155531, "category_id": 31, "area": 921, "bbox": [79, 120, 40, 41], "iscrowd": 0}, {"id": 12449024, "category_id": 31, "area": 1680, "bbox": [178, 142, 57, 50], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1216, "bbox": [1, 136, 31, 61], "iscrowd": 0}, {"id": 983038, "category_id": 37, "area": 1021, "bbox": [225, 138, 30, 61], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 171, "bbox": [52, 149, 21, 17], "iscrowd": 0}, {"id": 50431, "category_id": 40, "area": 496, "bbox": [30, 174, 48, 16], "iscrowd": 0}, {"id": 1423100, "category_id": 40, "area": 343, "bbox": [163, 125, 27, 20], "iscrowd": 0}, {"id": 1882111, "category_id": 40, "area": 340, "bbox": [82, 126, 24, 19], "iscrowd": 0}, {"id": 52986, "category_id": 40, "area": 137, "bbox": [194, 150, 16, 16], "iscrowd": 0}, {"id": 45311, "category_id": 40, "area": 501, "bbox": [186, 177, 47, 21], "iscrowd": 0}, {"id": 569832, "category_id": 40, "area": 339, "bbox": [84, 175, 32, 18], "iscrowd": 0}, {"id": 51443, "category_id": 40, "area": 471, "bbox": [139, 177, 44, 21], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 890, "bbox": [105, 163, 56, 18], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 452, "bbox": [126, 136, 22, 24], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 159, "bbox": [36, 134, 21, 10], "iscrowd": 0}, {"id": 16647927, "category_id": 126, "area": 101, "bbox": [221, 136, 16, 8], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 506, "bbox": [105, 14, 60, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00001529", "file_name": "ADE_val_00001529.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 17644, "bbox": [0, 0, 255, 238], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9297, "bbox": [0, 147, 256, 109], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5455, "bbox": [18, 1, 228, 35], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 7327, "bbox": [64, 145, 170, 87], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2209, "bbox": [205, 39, 41, 60], "iscrowd": 0}, {"id": 13628638, "category_id": 9, "area": 1895, "bbox": [94, 53, 48, 41], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 702, "bbox": [238, 134, 16, 69], "iscrowd": 0}, {"id": 7279077, "category_id": 16, "area": 275, "bbox": [142, 118, 16, 28], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1049, "bbox": [7, 27, 22, 62], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 5875, "bbox": [152, 104, 102, 83], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 2450, "bbox": [15, 118, 64, 71], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 276, "bbox": [164, 80, 20, 37], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 6637, "bbox": [0, 0, 62, 253], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 1549, "bbox": [102, 138, 52, 47], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 353, "bbox": [119, 4, 22, 24], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 875, "bbox": [51, 91, 38, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001530", "file_name": "ADE_val_00001530.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 30279, "bbox": [0, 0, 320, 240], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5926, "bbox": [16, 164, 304, 76], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 12509, "bbox": [0, 0, 320, 73], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3774, "bbox": [40, 71, 46, 90], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1092, "bbox": [77, 147, 57, 44], "iscrowd": 0}, {"id": 1990322, "category_id": 20, "area": 1722, "bbox": [46, 161, 72, 66], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 9624, "bbox": [124, 153, 195, 87], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 357, "bbox": [236, 153, 28, 27], "iscrowd": 0}, {"id": 48383, "category_id": 40, "area": 435, "bbox": [259, 191, 51, 20], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 1599, "bbox": [146, 165, 40, 46], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 35, "bbox": [223, 47, 8, 6], "iscrowd": 0}, {"id": 1623551, "category_id": 83, "area": 90, "bbox": [293, 18, 13, 8], "iscrowd": 0}, {"id": 44799, "category_id": 83, "area": 27, "bbox": [133, 47, 7, 5], "iscrowd": 0}, {"id": 44769, "category_id": 83, "area": 87, "bbox": [99, 17, 13, 9], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 196, "bbox": [123, 160, 26, 21], "iscrowd": 0}, {"id": 16763904, "category_id": 131, "area": 6558, "bbox": [118, 74, 107, 63], "iscrowd": 0}]}, {"image_id": "ADE_val_00001531", "file_name": "ADE_val_00001531.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 124050, "bbox": [0, 0, 815, 384], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 43966, "bbox": [0, 324, 815, 187], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7924, "bbox": [6, 0, 517, 31], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 72281, "bbox": [0, 358, 706, 153], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 18532, "bbox": [0, 0, 63, 385], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 593, "bbox": [714, 294, 55, 70], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 25128, "bbox": [38, 11, 128, 360], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2448, "bbox": [775, 178, 41, 169], "iscrowd": 0}, {"id": 1457842, "category_id": 20, "area": 7371, "bbox": [751, 184, 64, 327], "iscrowd": 0}, {"id": 941014, "category_id": 20, "area": 10729, "bbox": [55, 242, 129, 148], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 40974, "bbox": [339, 40, 327, 142], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 39697, "bbox": [265, 240, 443, 134], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2900, "bbox": [319, 0, 111, 62], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2301, "bbox": [87, 284, 70, 39], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 13281, "bbox": [257, 319, 229, 103], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 708, "bbox": [359, 289, 27, 52], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 383, "bbox": [725, 254, 11, 44], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 2087, "bbox": [217, 224, 26, 118], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 255, "bbox": [747, 259, 15, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00001532", "file_name": "ADE_val_00001532.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 262792, "bbox": [0, 1, 681, 510], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 5618, "bbox": [266, 0, 416, 279], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 23441, "bbox": [219, 407, 462, 104], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 16724, "bbox": [341, 86, 162, 252], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 13622, "bbox": [514, 3, 102, 273], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 4775, "bbox": [469, 185, 172, 91], "iscrowd": 0}, {"id": 58098, "category_id": 128, "area": 12241, "bbox": [313, 161, 134, 285], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 4867, "bbox": [167, 183, 87, 73], "iscrowd": 0}]}, {"image_id": "ADE_val_00001533", "file_name": "ADE_val_00001533.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 134303, "bbox": [0, 0, 639, 430], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 83247, "bbox": [0, 323, 639, 156], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 24454, "bbox": [0, 53, 431, 106], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6236, "bbox": [3, 188, 77, 82], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 10301, "bbox": [485, 187, 59, 190], "iscrowd": 0}, {"id": 4582400, "category_id": 15, "area": 7071, "bbox": [286, 197, 57, 130], "iscrowd": 0}, {"id": 1768960, "category_id": 15, "area": 7467, "bbox": [221, 196, 58, 132], "iscrowd": 0}, {"id": 3211008, "category_id": 15, "area": 7208, "bbox": [84, 190, 54, 139], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 460, "bbox": [495, 155, 26, 21], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 846, "bbox": [130, 86, 105, 21], "iscrowd": 0}, {"id": 47871, "category_id": 83, "area": 326, "bbox": [2, 114, 47, 13], "iscrowd": 0}, {"id": 1874149, "category_id": 83, "area": 294, "bbox": [313, 70, 53, 12], "iscrowd": 0}, {"id": 1231871, "category_id": 83, "area": 491, "bbox": [286, 97, 75, 15], "iscrowd": 0}, {"id": 368639, "category_id": 83, "area": 613, "bbox": [145, 116, 81, 18], "iscrowd": 0}, {"id": 38143, "category_id": 83, "area": 389, "bbox": [0, 141, 82, 17], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 336, "bbox": [501, 127, 18, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00001534", "file_name": "ADE_val_00001534.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 15528, "bbox": [0, 127, 768, 78], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 50211, "bbox": [0, 188, 767, 323], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 108150, "bbox": [0, 0, 768, 193], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 14067, "bbox": [66, 124, 702, 337], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 46146, "bbox": [42, 233, 624, 278], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 149, "bbox": [572, 172, 17, 18], "iscrowd": 0}, {"id": 3083951, "category_id": 13, "area": 149, "bbox": [614, 170, 20, 20], "iscrowd": 0}, {"id": 4987299, "category_id": 13, "area": 211, "bbox": [612, 193, 25, 22], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 202, "bbox": [582, 182, 32, 13], "iscrowd": 0}, {"id": 4792824, "category_id": 16, "area": 3654, "bbox": [482, 216, 80, 78], "iscrowd": 0}, {"id": 4456681, "category_id": 16, "area": 983, "bbox": [615, 227, 33, 43], "iscrowd": 0}, {"id": 4920825, "category_id": 16, "area": 3651, "bbox": [594, 331, 118, 129], "iscrowd": 0}, {"id": 3608575, "category_id": 16, "area": 2787, "bbox": [171, 276, 89, 97], "iscrowd": 0}, {"id": 5571817, "category_id": 16, "area": 1744, "bbox": [322, 253, 62, 63], "iscrowd": 0}, {"id": 5636341, "category_id": 16, "area": 100, "bbox": [628, 214, 24, 8], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 185, "bbox": [444, 153, 17, 12], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 2066, "bbox": [526, 190, 88, 40], "iscrowd": 0}, {"id": 15491328, "category_id": 24, "area": 39730, "bbox": [205, 303, 310, 208], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 103, "bbox": [546, 183, 16, 11], "iscrowd": 0}, {"id": 12576256, "category_id": 31, "area": 2493, "bbox": [435, 200, 59, 61], "iscrowd": 0}, {"id": 13564687, "category_id": 31, "area": 490, "bbox": [620, 197, 44, 18], "iscrowd": 0}, {"id": 13172480, "category_id": 31, "area": 2567, "bbox": [550, 216, 74, 67], "iscrowd": 0}, {"id": 12779285, "category_id": 31, "area": 11139, "bbox": [550, 260, 157, 147], "iscrowd": 0}, {"id": 15196440, "category_id": 31, "area": 898, "bbox": [626, 208, 43, 58], "iscrowd": 0}, {"id": 15662880, "category_id": 31, "area": 5027, "bbox": [248, 237, 107, 74], "iscrowd": 0}, {"id": 14745370, "category_id": 31, "area": 4186, "bbox": [370, 221, 84, 91], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 4618, "bbox": [621, 156, 117, 196], "iscrowd": 0}, {"id": 524266, "category_id": 37, "area": 352, "bbox": [471, 159, 24, 52], "iscrowd": 0}, {"id": 62191, "category_id": 37, "area": 167, "bbox": [397, 145, 15, 15], "iscrowd": 0}, {"id": 1966060, "category_id": 37, "area": 117, "bbox": [639, 160, 20, 10], "iscrowd": 0}, {"id": 2026440, "category_id": 37, "area": 81, "bbox": [558, 160, 12, 26], "iscrowd": 0}, {"id": 1174491, "category_id": 37, "area": 1267, "bbox": [53, 110, 38, 68], "iscrowd": 0}, {"id": 58848, "category_id": 37, "area": 2128, "bbox": [174, 153, 73, 134], "iscrowd": 0}, {"id": 2162631, "category_id": 37, "area": 161, "bbox": [520, 158, 19, 35], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 1418, "bbox": [0, 198, 29, 59], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1047, "bbox": [316, 127, 38, 34], "iscrowd": 0}, {"id": 2106623, "category_id": 43, "area": 3118, "bbox": [182, 111, 63, 78], "iscrowd": 0}, {"id": 2031871, "category_id": 43, "area": 1692, "bbox": [484, 136, 37, 76], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 197, "bbox": [456, 162, 10, 40], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 14704, "bbox": [20, 176, 190, 100], "iscrowd": 0}, {"id": 16061695, "category_id": 46, "area": 7999, "bbox": [198, 179, 204, 58], "iscrowd": 0}, {"id": 16587768, "category_id": 46, "area": 695, "bbox": [400, 179, 33, 29], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 239, "bbox": [545, 228, 23, 17], "iscrowd": 0}, {"id": 8907776, "category_id": 65, "area": 4369, "bbox": [392, 290, 114, 70], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 519, "bbox": [27, 145, 38, 19], "iscrowd": 0}, {"id": 226, "category_id": 67, "area": 26, "bbox": [602, 171, 10, 4], "iscrowd": 0}, {"id": 1003, "category_id": 67, "area": 30, "bbox": [587, 171, 8, 6], "iscrowd": 0}, {"id": 334564, "category_id": 67, "area": 176, "bbox": [528, 188, 25, 9], "iscrowd": 0}, {"id": 596213, "category_id": 67, "area": 135, "bbox": [488, 188, 24, 9], "iscrowd": 0}, {"id": 786687, "category_id": 67, "area": 572, "bbox": [30, 170, 46, 21], "iscrowd": 0}, {"id": 233, "category_id": 67, "area": 946, "bbox": [114, 113, 85, 58], "iscrowd": 0}, {"id": 6127, "category_id": 67, "area": 217, "bbox": [441, 285, 23, 16], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 161, "bbox": [649, 36, 25, 9], "iscrowd": 0}, {"id": 445425, "category_id": 83, "area": 74, "bbox": [648, 66, 16, 6], "iscrowd": 0}, {"id": 48127, "category_id": 83, "area": 40, "bbox": [647, 97, 10, 5], "iscrowd": 0}, {"id": 571882, "category_id": 83, "area": 53, "bbox": [434, 83, 13, 5], "iscrowd": 0}, {"id": 1741055, "category_id": 83, "area": 94, "bbox": [384, 63, 15, 8], "iscrowd": 0}, {"id": 38391, "category_id": 83, "area": 53, "bbox": [521, 65, 10, 7], "iscrowd": 0}, {"id": 1614335, "category_id": 83, "area": 20, "bbox": [493, 105, 7, 4], "iscrowd": 0}, {"id": 769778, "category_id": 83, "area": 25, "bbox": [197, 92, 9, 3], "iscrowd": 0}, {"id": 699903, "category_id": 83, "area": 21, "bbox": [227, 107, 8, 3], "iscrowd": 0}, {"id": 51199, "category_id": 83, "area": 19, "bbox": [264, 109, 7, 3], "iscrowd": 0}, {"id": 1546210, "category_id": 83, "area": 29, "bbox": [32, 92, 11, 4], "iscrowd": 0}, {"id": 50431, "category_id": 83, "area": 18, "bbox": [82, 99, 10, 2], "iscrowd": 0}, {"id": 1426175, "category_id": 83, "area": 9, "bbox": [128, 104, 7, 2], "iscrowd": 0}, {"id": 48895, "category_id": 83, "area": 21, "bbox": [183, 104, 8, 3], "iscrowd": 0}, {"id": 503019, "category_id": 83, "area": 96, "bbox": [533, 83, 21, 5], "iscrowd": 0}, {"id": 175080, "category_id": 83, "area": 27, "bbox": [645, 114, 10, 3], "iscrowd": 0}, {"id": 45795, "category_id": 83, "area": 20, "bbox": [645, 122, 8, 3], "iscrowd": 0}, {"id": 629498, "category_id": 83, "area": 19, "bbox": [296, 111, 6, 4], "iscrowd": 0}, {"id": 47871, "category_id": 83, "area": 23, "bbox": [331, 112, 8, 4], "iscrowd": 0}, {"id": 1942011, "category_id": 83, "area": 4, "bbox": [299, 119, 4, 1], "iscrowd": 0}, {"id": 766200, "category_id": 83, "area": 10, "bbox": [322, 120, 5, 3], "iscrowd": 0}, {"id": 570110, "category_id": 83, "area": 8, "bbox": [370, 113, 5, 2], "iscrowd": 0}, {"id": 1947892, "category_id": 83, "area": 12, "bbox": [411, 120, 5, 3], "iscrowd": 0}, {"id": 49650, "category_id": 83, "area": 4, "bbox": [425, 131, 3, 2], "iscrowd": 0}, {"id": 43519, "category_id": 83, "area": 5, "bbox": [449, 141, 3, 2], "iscrowd": 0}, {"id": 42239, "category_id": 83, "area": 6, "bbox": [456, 141, 4, 2], "iscrowd": 0}, {"id": 38655, "category_id": 83, "area": 6, "bbox": [481, 140, 3, 3], "iscrowd": 0}, {"id": 45311, "category_id": 83, "area": 15, "bbox": [527, 118, 8, 3], "iscrowd": 0}, {"id": 44799, "category_id": 83, "area": 4, "bbox": [551, 126, 3, 2], "iscrowd": 0}, {"id": 37348, "category_id": 83, "area": 6, "bbox": [557, 128, 4, 2], "iscrowd": 0}, {"id": 50411, "category_id": 83, "area": 4, "bbox": [600, 126, 3, 2], "iscrowd": 0}, {"id": 38399, "category_id": 83, "area": 3, "bbox": [616, 139, 3, 1], "iscrowd": 0}, {"id": 40417, "category_id": 83, "area": 5, "bbox": [531, 140, 3, 2], "iscrowd": 0}, {"id": 52223, "category_id": 83, "area": 4, "bbox": [573, 140, 4, 1], "iscrowd": 0}, {"id": 771839, "category_id": 83, "area": 1, "bbox": [598, 140, 1, 1], "iscrowd": 0}, {"id": 46839, "category_id": 83, "area": 7, "bbox": [645, 131, 4, 2], "iscrowd": 0}, {"id": 43248, "category_id": 83, "area": 9, "bbox": [748, 119, 6, 2], "iscrowd": 0}, {"id": 39167, "category_id": 83, "area": 14, "bbox": [758, 115, 7, 3], "iscrowd": 0}, {"id": 47615, "category_id": 83, "area": 25, "bbox": [692, 136, 13, 2], "iscrowd": 0}, {"id": 117491, "category_id": 83, "area": 83, "bbox": [726, 114, 28, 4], "iscrowd": 0}, {"id": 240879, "category_id": 83, "area": 19, "bbox": [700, 130, 18, 2], "iscrowd": 0}, {"id": 41727, "category_id": 83, "area": 2, "bbox": [404, 124, 2, 1], "iscrowd": 0}, {"id": 1415679, "category_id": 83, "area": 3, "bbox": [398, 126, 3, 1], "iscrowd": 0}, {"id": 499199, "category_id": 83, "area": 2, "bbox": [402, 134, 2, 1], "iscrowd": 0}, {"id": 1482495, "category_id": 83, "area": 4, "bbox": [405, 141, 3, 2], "iscrowd": 0}, {"id": 1093358, "category_id": 83, "area": 3, "bbox": [398, 138, 3, 1], "iscrowd": 0}, {"id": 45055, "category_id": 83, "area": 4, "bbox": [552, 140, 2, 2], "iscrowd": 0}, {"id": 1885695, "category_id": 83, "area": 9, "bbox": [288, 122, 5, 2], "iscrowd": 0}, {"id": 37631, "category_id": 83, "area": 8, "bbox": [371, 131, 4, 3], "iscrowd": 0}, {"id": 45045, "category_id": 83, "area": 9, "bbox": [409, 135, 5, 2], "iscrowd": 0}, {"id": 1086463, "category_id": 83, "area": 7, "bbox": [569, 132, 3, 3], "iscrowd": 0}, {"id": 43493, "category_id": 83, "area": 9, "bbox": [341, 123, 5, 2], "iscrowd": 0}, {"id": 1153252, "category_id": 83, "area": 7, "bbox": [247, 137, 4, 2], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 12664, "bbox": [615, 406, 153, 106], "iscrowd": 0}, {"id": 15139583, "category_id": 126, "area": 10127, "bbox": [60, 306, 119, 114], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 561, "bbox": [245, 160, 38, 29], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 30, "bbox": [428, 150, 7, 6], "iscrowd": 0}, {"id": 15666964, "category_id": 135, "area": 26, "bbox": [471, 150, 7, 6], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 178, "bbox": [40, 163, 21, 11], "iscrowd": 0}, {"id": 11795215, "category_id": 136, "area": 355, "bbox": [532, 197, 15, 28], "iscrowd": 0}, {"id": 13762316, "category_id": 136, "area": 504, "bbox": [513, 178, 14, 46], "iscrowd": 0}, {"id": 11796224, "category_id": 136, "area": 356, "bbox": [492, 196, 14, 27], "iscrowd": 0}, {"id": 11534091, "category_id": 136, "area": 27, "bbox": [605, 176, 3, 9], "iscrowd": 0}, {"id": 13167616, "category_id": 136, "area": 67, "bbox": [596, 167, 5, 18], "iscrowd": 0}, {"id": 13756416, "category_id": 136, "area": 24, "bbox": [589, 176, 3, 8], "iscrowd": 0}, {"id": 13565704, "category_id": 136, "area": 128, "bbox": [47, 187, 18, 8], "iscrowd": 0}, {"id": 12123920, "category_id": 136, "area": 208, "bbox": [445, 298, 14, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001535", "file_name": "ADE_val_00001535.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 4941, "bbox": [2, 88, 347, 203], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 28690, "bbox": [0, 196, 334, 153], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 16052, "bbox": [29, 0, 270, 92], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3164, "bbox": [206, 112, 36, 148], "iscrowd": 0}, {"id": 4855197, "category_id": 13, "area": 3564, "bbox": [74, 116, 68, 146], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 4162, "bbox": [2, 220, 108, 123], "iscrowd": 0}, {"id": 65498, "category_id": 70, "area": 405, "bbox": [128, 190, 80, 7], "iscrowd": 0}, {"id": 64456, "category_id": 70, "area": 5779, "bbox": [223, 204, 126, 145], "iscrowd": 0}, {"id": 1114031, "category_id": 70, "area": 81, "bbox": [117, 196, 26, 9], "iscrowd": 0}, {"id": 1900503, "category_id": 70, "area": 41, "bbox": [201, 195, 10, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00001536", "file_name": "ADE_val_00001536.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6835, "bbox": [0, 118, 280, 120], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 13450, "bbox": [1, 198, 277, 102], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1091, "bbox": [222, 0, 178, 10], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 19419, "bbox": [0, 0, 129, 168], "iscrowd": 0}, {"id": 16502231, "category_id": 9, "area": 9707, "bbox": [126, 1, 84, 122], "iscrowd": 0}, {"id": 14087384, "category_id": 9, "area": 15199, "bbox": [211, 1, 118, 148], "iscrowd": 0}, {"id": 13424100, "category_id": 9, "area": 9215, "bbox": [322, 5, 78, 134], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 16372, "bbox": [264, 129, 136, 170], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5055, "bbox": [0, 157, 136, 142], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4990, "bbox": [2, 213, 92, 86], "iscrowd": 0}, {"id": 12761, "category_id": 20, "area": 3936, "bbox": [182, 158, 91, 135], "iscrowd": 0}, {"id": 1920695, "category_id": 20, "area": 1319, "bbox": [74, 142, 68, 108], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 5167, "bbox": [155, 148, 103, 83], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 591, "bbox": [343, 186, 18, 53], "iscrowd": 0}, {"id": 2420992, "category_id": 99, "area": 492, "bbox": [298, 232, 18, 42], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 234, "bbox": [273, 26, 18, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001537", "file_name": "ADE_val_00001537.png", "segments_info": [{"id": 9211020, "category_id": 7, "area": 171206, "bbox": [0, 0, 639, 479], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 38239, "bbox": [200, 173, 284, 224], "iscrowd": 0}]}, {"image_id": "ADE_val_00001538", "file_name": "ADE_val_00001538.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 5525, "bbox": [58, 0, 283, 81], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 23946, "bbox": [0, 0, 341, 220], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 78, "bbox": [321, 211, 20, 7], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 4310, "bbox": [0, 213, 341, 26], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4181, "bbox": [0, 185, 183, 40], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 38040, "bbox": [42, 0, 299, 217], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 612, "bbox": [0, 209, 220, 30], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 672, "bbox": [271, 177, 29, 34], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 2927, "bbox": [206, 207, 135, 29], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 322, "bbox": [49, 189, 24, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001539", "file_name": "ADE_val_00001539.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3776, "bbox": [1, 82, 270, 123], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10732, "bbox": [91, 275, 128, 271], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 45274, "bbox": [0, 0, 361, 183], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 139, "bbox": [215, 203, 10, 24], "iscrowd": 0}, {"id": 4063367, "category_id": 13, "area": 516, "bbox": [221, 196, 18, 47], "iscrowd": 0}, {"id": 3997817, "category_id": 13, "area": 928, "bbox": [198, 205, 23, 126], "iscrowd": 0}, {"id": 2162858, "category_id": 13, "area": 1374, "bbox": [208, 211, 45, 114], "iscrowd": 0}, {"id": 4130478, "category_id": 13, "area": 4222, "bbox": [116, 193, 42, 177], "iscrowd": 0}, {"id": 3413128, "category_id": 13, "area": 6687, "bbox": [152, 195, 69, 182], "iscrowd": 0}, {"id": 3605170, "category_id": 13, "area": 661, "bbox": [93, 220, 14, 87], "iscrowd": 0}, {"id": 2170772, "category_id": 13, "area": 164, "bbox": [89, 202, 11, 19], "iscrowd": 0}, {"id": 3211397, "category_id": 13, "area": 734, "bbox": [69, 237, 28, 84], "iscrowd": 0}, {"id": 5444237, "category_id": 13, "area": 46188, "bbox": [0, 153, 129, 530], "iscrowd": 0}, {"id": 2759579, "category_id": 13, "area": 265, "bbox": [234, 200, 31, 20], "iscrowd": 0}, {"id": 3740848, "category_id": 13, "area": 161, "bbox": [199, 193, 15, 16], "iscrowd": 0}, {"id": 4391048, "category_id": 13, "area": 141, "bbox": [115, 184, 10, 22], "iscrowd": 0}, {"id": 4718758, "category_id": 13, "area": 223, "bbox": [147, 202, 16, 30], "iscrowd": 0}, {"id": 5444754, "category_id": 13, "area": 561, "bbox": [217, 252, 21, 70], "iscrowd": 0}, {"id": 3473547, "category_id": 13, "area": 206, "bbox": [163, 197, 20, 25], "iscrowd": 0}, {"id": 2564217, "category_id": 13, "area": 94, "bbox": [161, 194, 8, 14], "iscrowd": 0}, {"id": 3866744, "category_id": 13, "area": 287, "bbox": [1, 231, 12, 34], "iscrowd": 0}, {"id": 4985489, "category_id": 13, "area": 678, "bbox": [108, 211, 23, 72], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 370, "bbox": [101, 238, 14, 39], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 219, "bbox": [97, 216, 19, 23], "iscrowd": 0}, {"id": 125184, "category_id": 42, "area": 7386, "bbox": [40, 388, 127, 77], "iscrowd": 0}, {"id": 392977, "category_id": 42, "area": 111, "bbox": [300, 203, 13, 12], "iscrowd": 0}, {"id": 3140870, "category_id": 42, "area": 2603, "bbox": [325, 187, 89, 50], "iscrowd": 0}, {"id": 1767424, "category_id": 42, "area": 387, "bbox": [282, 215, 31, 20], "iscrowd": 0}, {"id": 585995, "category_id": 42, "area": 1730, "bbox": [355, 239, 86, 40], "iscrowd": 0}, {"id": 2029828, "category_id": 42, "area": 661, "bbox": [206, 335, 46, 47], "iscrowd": 0}, {"id": 589593, "category_id": 42, "area": 1343, "bbox": [394, 275, 63, 30], "iscrowd": 0}, {"id": 3273472, "category_id": 42, "area": 476, "bbox": [198, 400, 28, 22], "iscrowd": 0}, {"id": 516352, "category_id": 42, "area": 2910, "bbox": [85, 453, 95, 229], "iscrowd": 0}, {"id": 2490128, "category_id": 42, "area": 21718, "bbox": [114, 498, 397, 185], "iscrowd": 0}, {"id": 196352, "category_id": 42, "area": 97, "bbox": [304, 223, 19, 16], "iscrowd": 0}, {"id": 1638154, "category_id": 42, "area": 169, "bbox": [257, 214, 25, 9], "iscrowd": 0}, {"id": 786188, "category_id": 42, "area": 81, "bbox": [199, 373, 14, 33], "iscrowd": 0}, {"id": 64795, "category_id": 42, "area": 323, "bbox": [187, 422, 27, 18], "iscrowd": 0}, {"id": 1635840, "category_id": 42, "area": 216, "bbox": [177, 440, 20, 26], "iscrowd": 0}, {"id": 2811136, "category_id": 42, "area": 972, "bbox": [233, 234, 72, 57], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 717, "bbox": [145, 293, 26, 50], "iscrowd": 0}, {"id": 10924386, "category_id": 116, "area": 3042, "bbox": [89, 502, 42, 164], "iscrowd": 0}, {"id": 8824667, "category_id": 116, "area": 717, "bbox": [355, 271, 46, 28], "iscrowd": 0}, {"id": 8704098, "category_id": 116, "area": 927, "bbox": [355, 287, 52, 32], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 1518, "bbox": [217, 289, 92, 48], "iscrowd": 0}, {"id": 56575, "category_id": 121, "area": 2203, "bbox": [211, 308, 108, 56], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 335, "bbox": [151, 85, 62, 44], "iscrowd": 0}, {"id": 14804224, "category_id": 140, "area": 55, "bbox": [211, 145, 28, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00001540", "file_name": "ADE_val_00001540.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 2297, "bbox": [2, 0, 297, 28], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 890, "bbox": [2, 15, 297, 23], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 333, "bbox": [262, 1, 17, 32], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1129, "bbox": [150, 193, 103, 32], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 4196, "bbox": [2, 81, 153, 67], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 1787, "bbox": [17, 37, 117, 40], "iscrowd": 0}, {"id": 768255, "category_id": 121, "area": 1374, "bbox": [51, 160, 43, 43], "iscrowd": 0}, {"id": 387322, "category_id": 121, "area": 580, "bbox": [226, 78, 40, 22], "iscrowd": 0}, {"id": 59391, "category_id": 121, "area": 1114, "bbox": [170, 148, 40, 35], "iscrowd": 0}, {"id": 53228, "category_id": 121, "area": 1107, "bbox": [166, 104, 49, 34], "iscrowd": 0}, {"id": 46591, "category_id": 121, "area": 1027, "bbox": [132, 112, 39, 32], "iscrowd": 0}, {"id": 1436159, "category_id": 121, "area": 1102, "bbox": [86, 146, 37, 41], "iscrowd": 0}, {"id": 308991, "category_id": 121, "area": 1314, "bbox": [49, 97, 48, 39], "iscrowd": 0}, {"id": 50428, "category_id": 121, "area": 1076, "bbox": [127, 143, 40, 37], "iscrowd": 0}, {"id": 48895, "category_id": 121, "area": 747, "bbox": [112, 167, 35, 33], "iscrowd": 0}, {"id": 47074, "category_id": 121, "area": 1278, "bbox": [84, 190, 49, 34], "iscrowd": 0}, {"id": 574179, "category_id": 121, "area": 1485, "bbox": [185, 59, 40, 60], "iscrowd": 0}, {"id": 2017279, "category_id": 121, "area": 982, "bbox": [194, 169, 39, 34], "iscrowd": 0}, {"id": 1552127, "category_id": 121, "area": 743, "bbox": [60, 136, 37, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00001541", "file_name": "ADE_val_00001541.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 45459, "bbox": [2, 0, 397, 255], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10495, "bbox": [0, 183, 398, 116], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4174, "bbox": [0, 76, 57, 120], "iscrowd": 0}, {"id": 5708722, "category_id": 13, "area": 12081, "bbox": [220, 46, 114, 220], "iscrowd": 0}, {"id": 3014784, "category_id": 13, "area": 9740, "bbox": [149, 70, 177, 212], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 604, "bbox": [151, 146, 44, 52], "iscrowd": 0}, {"id": 19681, "category_id": 20, "area": 708, "bbox": [316, 156, 27, 38], "iscrowd": 0}, {"id": 469463, "category_id": 20, "area": 1248, "bbox": [318, 158, 52, 80], "iscrowd": 0}, {"id": 21737, "category_id": 20, "area": 1424, "bbox": [327, 160, 73, 87], "iscrowd": 0}, {"id": 876007, "category_id": 20, "area": 410, "bbox": [360, 202, 40, 50], "iscrowd": 0}, {"id": 10946, "category_id": 20, "area": 426, "bbox": [126, 145, 49, 53], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 6840, "bbox": [94, 75, 61, 121], "iscrowd": 0}]}, {"image_id": "ADE_val_00001542", "file_name": "ADE_val_00001542.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 2494, "bbox": [21, 437, 159, 36], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 126559, "bbox": [161, 7, 439, 472], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 55520, "bbox": [0, 0, 639, 240], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 112617, "bbox": [0, 0, 639, 479], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 4325, "bbox": [2, 446, 242, 32], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 2775, "bbox": [225, 444, 283, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00001543", "file_name": "ADE_val_00001543.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 18745, "bbox": [0, 0, 250, 121], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 11989, "bbox": [0, 156, 250, 94], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 11193, "bbox": [0, 86, 250, 111], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 20066, "bbox": [60, 13, 173, 219], "iscrowd": 0}]}, {"image_id": "ADE_val_00001544", "file_name": "ADE_val_00001544.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 58662, "bbox": [0, 97, 770, 294], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 72722, "bbox": [0, 204, 769, 306], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 89725, "bbox": [0, 1, 768, 176], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 32301, "bbox": [292, 195, 325, 283], "iscrowd": 0}, {"id": 16187600, "category_id": 8, "area": 11315, "bbox": [0, 319, 128, 167], "iscrowd": 0}, {"id": 15862488, "category_id": 8, "area": 4824, "bbox": [273, 229, 196, 118], "iscrowd": 0}, {"id": 15997894, "category_id": 8, "area": 5294, "bbox": [25, 215, 167, 90], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6026, "bbox": [600, 130, 84, 100], "iscrowd": 0}, {"id": 13361151, "category_id": 9, "area": 2688, "bbox": [533, 138, 60, 69], "iscrowd": 0}, {"id": 15256805, "category_id": 9, "area": 720, "bbox": [394, 148, 33, 36], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 885, "bbox": [233, 161, 25, 68], "iscrowd": 0}, {"id": 4784265, "category_id": 13, "area": 1999, "bbox": [137, 154, 34, 90], "iscrowd": 0}, {"id": 3276953, "category_id": 13, "area": 9350, "bbox": [302, 203, 224, 114], "iscrowd": 0}, {"id": 5046916, "category_id": 13, "area": 2280, "bbox": [280, 235, 185, 36], "iscrowd": 0}, {"id": 3415978, "category_id": 13, "area": 465, "bbox": [281, 170, 27, 28], "iscrowd": 0}, {"id": 4264093, "category_id": 13, "area": 8081, "bbox": [569, 253, 127, 138], "iscrowd": 0}, {"id": 3737475, "category_id": 13, "area": 22239, "bbox": [572, 327, 193, 182], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2003, "bbox": [0, 272, 110, 48], "iscrowd": 0}, {"id": 5907703, "category_id": 16, "area": 469, "bbox": [278, 271, 93, 20], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 22025, "bbox": [361, 359, 407, 152], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1137, "bbox": [307, 263, 54, 23], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 1007, "bbox": [11, 227, 27, 63], "iscrowd": 0}, {"id": 2490112, "category_id": 99, "area": 602, "bbox": [307, 217, 20, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00001545", "file_name": "ADE_val_00001545.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 15764, "bbox": [1, 1, 373, 117], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 22014, "bbox": [106, 0, 268, 89], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 38908, "bbox": [0, 152, 374, 128], "iscrowd": 0}]}, {"image_id": "ADE_val_00001546", "file_name": "ADE_val_00001546.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 17667, "bbox": [0, 0, 455, 124], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 95816, "bbox": [0, 0, 682, 250], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 393, "bbox": [143, 243, 23, 27], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 39207, "bbox": [0, 163, 649, 241], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 3135, "bbox": [228, 133, 275, 161], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 18105, "bbox": [135, 112, 507, 152], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 5933, "bbox": [144, 246, 163, 117], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 21705, "bbox": [407, 174, 111, 335], "iscrowd": 0}, {"id": 5177749, "category_id": 13, "area": 9990, "bbox": [626, 69, 57, 308], "iscrowd": 0}, {"id": 4398201, "category_id": 13, "area": 11394, "bbox": [165, 153, 86, 241], "iscrowd": 0}, {"id": 2359422, "category_id": 13, "area": 7132, "bbox": [71, 221, 59, 202], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 41, "bbox": [145, 420, 7, 8], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 1602, "bbox": [313, 43, 30, 370], "iscrowd": 0}]}, {"image_id": "ADE_val_00001547", "file_name": "ADE_val_00001547.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 80446, "bbox": [0, 241, 770, 270], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 62864, "bbox": [0, 56, 770, 333], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 74847, "bbox": [0, 0, 679, 185], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 57456, "bbox": [388, 0, 381, 247], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 33811, "bbox": [141, 231, 629, 174], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 41048, "bbox": [569, 168, 186, 343], "iscrowd": 0}, {"id": 3607943, "category_id": 13, "area": 37906, "bbox": [12, 198, 234, 313], "iscrowd": 0}, {"id": 5379466, "category_id": 13, "area": 242, "bbox": [0, 373, 23, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001548", "file_name": "ADE_val_00001548.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 67258, "bbox": [2, 0, 497, 373], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 27883, "bbox": [2, 245, 409, 129], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 39405, "bbox": [79, 1, 333, 187], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 552, "bbox": [294, 221, 20, 29], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 175, "bbox": [298, 199, 16, 14], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1736, "bbox": [227, 222, 31, 60], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2456, "bbox": [115, 170, 29, 148], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2740, "bbox": [72, 97, 39, 91], "iscrowd": 0}, {"id": 3279359, "category_id": 23, "area": 1487, "bbox": [185, 144, 20, 82], "iscrowd": 0}, {"id": 1582325, "category_id": 23, "area": 244, "bbox": [264, 189, 8, 38], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 4891, "bbox": [63, 207, 72, 75], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 134, "bbox": [287, 148, 20, 9], "iscrowd": 0}, {"id": 58590, "category_id": 37, "area": 44, "bbox": [309, 177, 9, 7], "iscrowd": 0}, {"id": 65488, "category_id": 37, "area": 690, "bbox": [211, 12, 44, 39], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 14595, "bbox": [27, 0, 57, 373], "iscrowd": 0}, {"id": 4196863, "category_id": 43, "area": 11993, "bbox": [404, 0, 46, 374], "iscrowd": 0}, {"id": 4596710, "category_id": 43, "area": 2359, "bbox": [382, 111, 18, 208], "iscrowd": 0}, {"id": 2362879, "category_id": 43, "area": 2908, "bbox": [161, 115, 22, 197], "iscrowd": 0}, {"id": 1119231, "category_id": 43, "area": 1418, "bbox": [213, 147, 14, 140], "iscrowd": 0}]}, {"image_id": "ADE_val_00001549", "file_name": "ADE_val_00001549.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 419, "bbox": [1, 0, 261, 9], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 33865, "bbox": [0, 0, 683, 59], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 120440, "bbox": [0, 49, 682, 462], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 307, "bbox": [133, 22, 116, 29], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 63, "bbox": [146, 43, 7, 17], "iscrowd": 0}, {"id": 5047419, "category_id": 13, "area": 1297, "bbox": [223, 70, 46, 51], "iscrowd": 0}, {"id": 2102428, "category_id": 13, "area": 2190, "bbox": [363, 62, 38, 86], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 169, "bbox": [103, 0, 6, 56], "iscrowd": 0}]}, {"image_id": "ADE_val_00001550", "file_name": "ADE_val_00001550.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 37924, "bbox": [0, 0, 446, 289], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 28524, "bbox": [0, 103, 420, 187], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 46927, "bbox": [56, 36, 381, 254], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1714, "bbox": [2, 83, 50, 43], "iscrowd": 0}, {"id": 15831319, "category_id": 48, "area": 765, "bbox": [71, 50, 76, 20], "iscrowd": 0}, {"id": 16358149, "category_id": 48, "area": 1586, "bbox": [112, 28, 94, 60], "iscrowd": 0}, {"id": 14855680, "category_id": 48, "area": 6597, "bbox": [163, 89, 210, 74], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 3549, "bbox": [384, 215, 62, 74], "iscrowd": 0}]}, {"image_id": "ADE_val_00001551", "file_name": "ADE_val_00001551.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 23768, "bbox": [42, 8, 342, 268], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 60399, "bbox": [0, 0, 385, 233], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 19788, "bbox": [2, 108, 383, 192], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 5840, "bbox": [0, 270, 350, 30], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 4435, "bbox": [134, 266, 250, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001552", "file_name": "ADE_val_00001552.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 9666, "bbox": [59, 1, 197, 79], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 14496, "bbox": [0, 166, 256, 90], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 27189, "bbox": [0, 0, 256, 256], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 12645, "bbox": [0, 82, 255, 153], "iscrowd": 0}]}, {"image_id": "ADE_val_00001553", "file_name": "ADE_val_00001553.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 15671, "bbox": [2, 1, 254, 101], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 10115, "bbox": [2, 105, 249, 119], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 38812, "bbox": [0, 38, 256, 218], "iscrowd": 0}]}, {"image_id": "ADE_val_00001554", "file_name": "ADE_val_00001554.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 21903, "bbox": [2, 1, 254, 104], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 38747, "bbox": [2, 49, 254, 207], "iscrowd": 0}]}, {"image_id": "ADE_val_00001555", "file_name": "ADE_val_00001555.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 199, "bbox": [389, 162, 176, 23], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 19583, "bbox": [240, 0, 475, 46], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 50779, "bbox": [268, 135, 447, 254], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 233423, "bbox": [0, 0, 715, 510], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 10384, "bbox": [100, 382, 132, 128], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 43459, "bbox": [248, 58, 467, 152], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 773, "bbox": [403, 294, 28, 87], "iscrowd": 0}, {"id": 1950945, "category_id": 33, "area": 379, "bbox": [365, 220, 28, 52], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 66, "bbox": [529, 87, 13, 7], "iscrowd": 0}]}, {"image_id": "ADE_val_00001556", "file_name": "ADE_val_00001556.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 59940, "bbox": [0, 0, 448, 204], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 70881, "bbox": [1, 348, 680, 163], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 185135, "bbox": [0, 0, 682, 392], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 26972, "bbox": [0, 352, 478, 112], "iscrowd": 0}, {"id": 43754, "category_id": 33, "area": 2807, "bbox": [544, 354, 137, 69], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 109, "bbox": [545, 331, 11, 10], "iscrowd": 0}, {"id": 9635315, "category_id": 44, "area": 34, "bbox": [515, 338, 7, 6], "iscrowd": 0}]}, {"image_id": "ADE_val_00001557", "file_name": "ADE_val_00001557.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 16932, "bbox": [2, 1, 254, 132], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 46582, "bbox": [0, 7, 256, 249], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 548, "bbox": [2, 211, 254, 9], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 46, "bbox": [47, 201, 7, 15], "iscrowd": 0}, {"id": 5577116, "category_id": 13, "area": 53, "bbox": [61, 199, 7, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00001558", "file_name": "ADE_val_00001558.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 15321, "bbox": [2, 1, 254, 81], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5930, "bbox": [2, 134, 214, 80], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 10349, "bbox": [2, 197, 254, 59], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 765, "bbox": [199, 180, 57, 21], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 27365, "bbox": [0, 51, 256, 152], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 26, "bbox": [230, 177, 5, 6], "iscrowd": 0}]}, {"image_id": "ADE_val_00001559", "file_name": "ADE_val_00001559.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 9442, "bbox": [2, 1, 254, 73], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 10260, "bbox": [2, 26, 175, 174], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 44393, "bbox": [2, 20, 254, 236], "iscrowd": 0}]}, {"image_id": "ADE_val_00001560", "file_name": "ADE_val_00001560.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 27738, "bbox": [0, 0, 300, 223], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1424, "bbox": [245, 160, 53, 65], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2309, "bbox": [99, 0, 172, 21], "iscrowd": 0}, {"id": 16711762, "category_id": 102, "area": 14683, "bbox": [1, 140, 279, 65], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 858, "bbox": [166, 103, 25, 60], "iscrowd": 0}, {"id": 3539066, "category_id": 13, "area": 610, "bbox": [133, 93, 23, 55], "iscrowd": 0}, {"id": 3342505, "category_id": 13, "area": 801, "bbox": [111, 104, 26, 50], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 214, "bbox": [236, 120, 18, 16], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 670, "bbox": [141, 214, 83, 11], "iscrowd": 0}, {"id": 15593229, "category_id": 32, "area": 1059, "bbox": [54, 207, 74, 18], "iscrowd": 0}, {"id": 14084645, "category_id": 32, "area": 966, "bbox": [0, 201, 54, 24], "iscrowd": 0}, {"id": 16187152, "category_id": 32, "area": 317, "bbox": [208, 156, 32, 11], "iscrowd": 0}, {"id": 16645911, "category_id": 32, "area": 874, "bbox": [152, 164, 40, 38], "iscrowd": 0}, {"id": 14614304, "category_id": 32, "area": 892, "bbox": [199, 167, 49, 35], "iscrowd": 0}, {"id": 14090009, "category_id": 32, "area": 260, "bbox": [1, 174, 12, 28], "iscrowd": 0}, {"id": 15793945, "category_id": 32, "area": 1515, "bbox": [13, 174, 52, 49], "iscrowd": 0}, {"id": 16056072, "category_id": 32, "area": 1562, "bbox": [64, 177, 56, 34], "iscrowd": 0}, {"id": 14742532, "category_id": 32, "area": 2071, "bbox": [120, 180, 63, 45], "iscrowd": 0}, {"id": 14876438, "category_id": 32, "area": 2175, "bbox": [182, 183, 64, 42], "iscrowd": 0}, {"id": 16763904, "category_id": 131, "area": 11293, "bbox": [136, 29, 132, 99], "iscrowd": 0}]}, {"image_id": "ADE_val_00001561", "file_name": "ADE_val_00001561.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 63466, "bbox": [0, 3, 334, 244], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 12380, "bbox": [0, 0, 334, 143], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2065, "bbox": [0, 238, 334, 12], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 408, "bbox": [42, 208, 44, 21], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 146, "bbox": [213, 215, 10, 27], "iscrowd": 0}, {"id": 5380750, "category_id": 13, "area": 124, "bbox": [255, 216, 8, 27], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 150, "bbox": [179, 199, 7, 50], "iscrowd": 0}, {"id": 9047545, "category_id": 44, "area": 51, "bbox": [14, 210, 6, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00001562", "file_name": "ADE_val_00001562.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 74641, "bbox": [2, 0, 497, 314], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12518, "bbox": [0, 304, 499, 29], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1410, "bbox": [409, 162, 37, 102], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 760, "bbox": [239, 266, 20, 40], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 8798, "bbox": [57, 91, 83, 146], "iscrowd": 0}, {"id": 2760688, "category_id": 43, "area": 3375, "bbox": [122, 160, 49, 99], "iscrowd": 0}, {"id": 3545846, "category_id": 43, "area": 1459, "bbox": [160, 194, 28, 71], "iscrowd": 0}]}, {"image_id": "ADE_val_00001563", "file_name": "ADE_val_00001563.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 106097, "bbox": [2, 0, 497, 331], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8714, "bbox": [2, 312, 497, 62], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 736, "bbox": [123, 112, 72, 13], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2983, "bbox": [323, 135, 40, 122], "iscrowd": 0}, {"id": 1638646, "category_id": 23, "area": 2699, "bbox": [467, 142, 32, 100], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 717, "bbox": [171, 224, 28, 63], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 12805, "bbox": [35, 324, 372, 50], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 48719, "bbox": [66, 83, 314, 259], "iscrowd": 0}, {"id": 60398, "category_id": 133, "area": 668, "bbox": [28, 169, 23, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00001564", "file_name": "ADE_val_00001564.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 23388, "bbox": [1, 30, 255, 196], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10055, "bbox": [0, 151, 256, 104], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 10786, "bbox": [0, 1, 256, 47], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 11886, "bbox": [1, 158, 185, 97], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 941, "bbox": [38, 78, 39, 30], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 3297, "bbox": [216, 57, 38, 95], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 621, "bbox": [72, 145, 33, 62], "iscrowd": 0}]}, {"image_id": "ADE_val_00001565", "file_name": "ADE_val_00001565.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 26074, "bbox": [0, 139, 683, 160], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 137220, "bbox": [0, 0, 683, 275], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 17183, "bbox": [219, 168, 464, 125], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 109214, "bbox": [1, 287, 682, 224], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 22, "bbox": [389, 288, 9, 4], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 32062, "bbox": [1, 294, 682, 185], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6768, "bbox": [163, 243, 520, 70], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 117, "bbox": [416, 268, 12, 16], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 206, "bbox": [436, 286, 39, 9], "iscrowd": 0}, {"id": 11622656, "category_id": 21, "area": 573, "bbox": [290, 284, 56, 15], "iscrowd": 0}, {"id": 14704640, "category_id": 21, "area": 56, "bbox": [482, 288, 7, 10], "iscrowd": 0}, {"id": 12801280, "category_id": 21, "area": 32, "bbox": [475, 283, 15, 3], "iscrowd": 0}, {"id": 14902784, "category_id": 21, "area": 70, "bbox": [413, 286, 15, 9], "iscrowd": 0}, {"id": 11363605, "category_id": 21, "area": 47, "bbox": [398, 285, 13, 9], "iscrowd": 0}, {"id": 12603136, "category_id": 21, "area": 42, "bbox": [398, 283, 17, 6], "iscrowd": 0}, {"id": 11421723, "category_id": 21, "area": 26, "bbox": [378, 284, 6, 6], "iscrowd": 0}, {"id": 13266176, "category_id": 21, "area": 47, "bbox": [372, 282, 12, 7], "iscrowd": 0}, {"id": 15104512, "category_id": 21, "area": 15, "bbox": [370, 282, 4, 7], "iscrowd": 0}, {"id": 13071616, "category_id": 21, "area": 527, "bbox": [488, 282, 54, 16], "iscrowd": 0}, {"id": 15104768, "category_id": 21, "area": 38, "bbox": [542, 283, 11, 5], "iscrowd": 0}, {"id": 14436352, "category_id": 21, "area": 76, "bbox": [447, 283, 26, 6], "iscrowd": 0}, {"id": 12996096, "category_id": 21, "area": 73, "bbox": [404, 285, 13, 10], "iscrowd": 0}, {"id": 11422726, "category_id": 21, "area": 150, "bbox": [423, 286, 24, 10], "iscrowd": 0}, {"id": 13193228, "category_id": 21, "area": 23, "bbox": [418, 284, 13, 3], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 230, "bbox": [226, 293, 18, 19], "iscrowd": 0}, {"id": 10167039, "category_id": 44, "area": 231, "bbox": [247, 288, 13, 20], "iscrowd": 0}, {"id": 9181687, "category_id": 44, "area": 91, "bbox": [383, 266, 5, 41], "iscrowd": 0}, {"id": 11403519, "category_id": 44, "area": 70, "bbox": [426, 266, 5, 42], "iscrowd": 0}, {"id": 10232312, "category_id": 44, "area": 122, "bbox": [256, 262, 9, 26], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 20, "bbox": [542, 276, 4, 8], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 481, "bbox": [295, 296, 45, 16], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 8152, "bbox": [1, 154, 93, 151], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 150, "bbox": [497, 223, 10, 69], "iscrowd": 0}, {"id": 15871232, "category_id": 88, "area": 152, "bbox": [630, 221, 11, 57], "iscrowd": 0}, {"id": 14901504, "category_id": 88, "area": 16, "bbox": [248, 266, 3, 19], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 70, "bbox": [117, 289, 7, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00001566", "file_name": "ADE_val_00001566.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 199384, "bbox": [1, 111, 682, 401], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 125227, "bbox": [1, 1, 682, 266], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 7682, "bbox": [11, 191, 242, 160], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 206, "bbox": [229, 336, 13, 21], "iscrowd": 0}, {"id": 25039, "category_id": 20, "area": 210, "bbox": [404, 340, 21, 20], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 6409, "bbox": [595, 148, 88, 84], "iscrowd": 0}]}, {"image_id": "ADE_val_00001567", "file_name": "ADE_val_00001567.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 8164, "bbox": [2, 318, 432, 60], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 76757, "bbox": [1, 5, 680, 356], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 80863, "bbox": [1, 1, 680, 188], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 58695, "bbox": [2, 73, 679, 260], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 78412, "bbox": [1, 357, 682, 154], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 11456, "bbox": [1, 343, 681, 59], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1876, "bbox": [205, 305, 95, 35], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3969, "bbox": [142, 292, 74, 120], "iscrowd": 0}, {"id": 3940730, "category_id": 13, "area": 863, "bbox": [334, 312, 23, 56], "iscrowd": 0}, {"id": 4259962, "category_id": 13, "area": 850, "bbox": [360, 308, 28, 64], "iscrowd": 0}, {"id": 4854146, "category_id": 13, "area": 880, "bbox": [392, 308, 18, 70], "iscrowd": 0}, {"id": 3674764, "category_id": 13, "area": 1325, "bbox": [485, 312, 24, 85], "iscrowd": 0}, {"id": 2892203, "category_id": 13, "area": 1463, "bbox": [453, 310, 26, 87], "iscrowd": 0}, {"id": 4653201, "category_id": 13, "area": 1046, "bbox": [542, 299, 24, 77], "iscrowd": 0}, {"id": 2031770, "category_id": 13, "area": 485, "bbox": [474, 305, 19, 65], "iscrowd": 0}, {"id": 4072076, "category_id": 13, "area": 615, "bbox": [501, 302, 20, 70], "iscrowd": 0}, {"id": 5111988, "category_id": 13, "area": 738, "bbox": [516, 302, 22, 66], "iscrowd": 0}, {"id": 5970605, "category_id": 13, "area": 569, "bbox": [407, 311, 19, 62], "iscrowd": 0}, {"id": 3343992, "category_id": 13, "area": 455, "bbox": [92, 315, 16, 44], "iscrowd": 0}, {"id": 4000174, "category_id": 13, "area": 74, "bbox": [119, 319, 13, 12], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 885, "bbox": [103, 327, 45, 25], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 629, "bbox": [612, 253, 27, 114], "iscrowd": 0}, {"id": 8913142, "category_id": 44, "area": 459, "bbox": [423, 255, 33, 16], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 71, "bbox": [510, 319, 14, 13], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 6264, "bbox": [109, 339, 137, 107], "iscrowd": 0}, {"id": 59135, "category_id": 128, "area": 576, "bbox": [595, 327, 24, 44], "iscrowd": 0}, {"id": 57599, "category_id": 128, "area": 872, "bbox": [643, 328, 38, 39], "iscrowd": 0}, {"id": 58111, "category_id": 128, "area": 342, "bbox": [632, 331, 14, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00001568", "file_name": "ADE_val_00001568.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 101056, "bbox": [0, 0, 683, 182], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 11528, "bbox": [299, 223, 384, 64], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 155046, "bbox": [0, 240, 683, 272], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 67932, "bbox": [0, 100, 683, 168], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 88, "bbox": [287, 265, 14, 9], "iscrowd": 0}, {"id": 8061159, "category_id": 127, "area": 91, "bbox": [302, 265, 14, 9], "iscrowd": 0}, {"id": 7143679, "category_id": 127, "area": 96, "bbox": [334, 268, 18, 8], "iscrowd": 0}, {"id": 9638398, "category_id": 127, "area": 1414, "bbox": [236, 267, 63, 40], "iscrowd": 0}, {"id": 6823423, "category_id": 127, "area": 869, "bbox": [201, 261, 48, 26], "iscrowd": 0}, {"id": 8263935, "category_id": 127, "area": 687, "bbox": [189, 290, 34, 30], "iscrowd": 0}, {"id": 7541730, "category_id": 127, "area": 237, "bbox": [89, 252, 16, 20], "iscrowd": 0}, {"id": 6684927, "category_id": 127, "area": 634, "bbox": [67, 247, 48, 28], "iscrowd": 0}, {"id": 6561279, "category_id": 127, "area": 132, "bbox": [152, 283, 25, 11], "iscrowd": 0}, {"id": 7078122, "category_id": 127, "area": 62, "bbox": [139, 267, 13, 7], "iscrowd": 0}, {"id": 9963495, "category_id": 127, "area": 193, "bbox": [2, 269, 20, 16], "iscrowd": 0}, {"id": 9109746, "category_id": 127, "area": 204, "bbox": [16, 272, 21, 12], "iscrowd": 0}, {"id": 7209215, "category_id": 127, "area": 281, "bbox": [4, 250, 19, 18], "iscrowd": 0}, {"id": 6881535, "category_id": 127, "area": 473, "bbox": [21, 247, 31, 23], "iscrowd": 0}, {"id": 7536876, "category_id": 127, "area": 78, "bbox": [49, 254, 12, 9], "iscrowd": 0}, {"id": 8257791, "category_id": 127, "area": 117, "bbox": [181, 271, 21, 12], "iscrowd": 0}, {"id": 9830655, "category_id": 127, "area": 1114, "bbox": [39, 287, 53, 39], "iscrowd": 0}, {"id": 7012607, "category_id": 127, "area": 400, "bbox": [313, 268, 25, 24], "iscrowd": 0}, {"id": 8324863, "category_id": 127, "area": 145, "bbox": [379, 280, 33, 13], "iscrowd": 0}, {"id": 8978673, "category_id": 127, "area": 444, "bbox": [375, 287, 34, 22], "iscrowd": 0}, {"id": 7541759, "category_id": 127, "area": 2134, "bbox": [416, 281, 66, 48], "iscrowd": 0}, {"id": 6553855, "category_id": 127, "area": 119, "bbox": [467, 273, 15, 12], "iscrowd": 0}, {"id": 7078889, "category_id": 127, "area": 233, "bbox": [475, 285, 16, 27], "iscrowd": 0}, {"id": 7736801, "category_id": 127, "area": 381, "bbox": [492, 301, 33, 22], "iscrowd": 0}, {"id": 9109759, "category_id": 127, "area": 334, "bbox": [593, 304, 19, 30], "iscrowd": 0}, {"id": 6493439, "category_id": 127, "area": 895, "bbox": [614, 311, 49, 29], "iscrowd": 0}, {"id": 8848639, "category_id": 127, "area": 89, "bbox": [479, 276, 15, 9], "iscrowd": 0}, {"id": 6888931, "category_id": 127, "area": 136, "bbox": [509, 285, 22, 9], "iscrowd": 0}, {"id": 6947061, "category_id": 127, "area": 36, "bbox": [527, 284, 14, 4], "iscrowd": 0}, {"id": 9109749, "category_id": 127, "area": 58, "bbox": [634, 282, 14, 7], "iscrowd": 0}, {"id": 7930082, "category_id": 127, "area": 80, "bbox": [675, 288, 7, 20], "iscrowd": 0}, {"id": 7536895, "category_id": 127, "area": 49, "bbox": [588, 292, 7, 10], "iscrowd": 0}, {"id": 6357228, "category_id": 127, "area": 58, "bbox": [594, 292, 8, 10], "iscrowd": 0}, {"id": 7864575, "category_id": 127, "area": 83, "bbox": [605, 291, 16, 8], "iscrowd": 0}, {"id": 9902591, "category_id": 127, "area": 116, "bbox": [658, 290, 14, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00001569", "file_name": "ADE_val_00001569.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 587, "bbox": [374, 291, 77, 16], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 142627, "bbox": [1, 2, 680, 257], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 16514, "bbox": [1, 267, 681, 56], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 14833, "bbox": [1, 306, 680, 71], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 114257, "bbox": [0, 301, 683, 211], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 33885, "bbox": [1, 200, 681, 100], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 3334, "bbox": [202, 274, 377, 23], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 301, "bbox": [176, 317, 26, 14], "iscrowd": 0}, {"id": 8587243, "category_id": 44, "area": 11754, "bbox": [127, 83, 77, 378], "iscrowd": 0}, {"id": 10160639, "category_id": 44, "area": 317, "bbox": [416, 300, 9, 60], "iscrowd": 0}, {"id": 10880766, "category_id": 44, "area": 1558, "bbox": [40, 270, 30, 120], "iscrowd": 0}, {"id": 10363647, "category_id": 44, "area": 74, "bbox": [492, 287, 6, 34], "iscrowd": 0}, {"id": 11993343, "category_id": 44, "area": 70, "bbox": [230, 302, 4, 31], "iscrowd": 0}, {"id": 9636596, "category_id": 44, "area": 33, "bbox": [88, 332, 5, 10], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 691, "bbox": [335, 372, 21, 38], "iscrowd": 0}]}, {"image_id": "ADE_val_00001570", "file_name": "ADE_val_00001570.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 2249, "bbox": [152, 323, 523, 28], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 193710, "bbox": [0, 0, 682, 329], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 31218, "bbox": [0, 210, 683, 146], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 87161, "bbox": [0, 339, 682, 173], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 2044, "bbox": [0, 353, 135, 27], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 3461, "bbox": [0, 344, 281, 69], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 1844, "bbox": [321, 323, 288, 20], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 712, "bbox": [70, 311, 41, 25], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 549, "bbox": [344, 340, 65, 14], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1864, "bbox": [129, 348, 69, 36], "iscrowd": 0}, {"id": 13917458, "category_id": 21, "area": 927, "bbox": [203, 342, 41, 27], "iscrowd": 0}, {"id": 12024089, "category_id": 21, "area": 5445, "bbox": [573, 348, 109, 73], "iscrowd": 0}, {"id": 11892506, "category_id": 21, "area": 1662, "bbox": [485, 348, 61, 54], "iscrowd": 0}, {"id": 12475666, "category_id": 21, "area": 249, "bbox": [236, 341, 19, 21], "iscrowd": 0}, {"id": 11763976, "category_id": 21, "area": 587, "bbox": [446, 348, 44, 25], "iscrowd": 0}, {"id": 13265408, "category_id": 21, "area": 3786, "bbox": [535, 341, 123, 65], "iscrowd": 0}, {"id": 14372125, "category_id": 21, "area": 408, "bbox": [451, 342, 45, 16], "iscrowd": 0}, {"id": 14636032, "category_id": 21, "area": 799, "bbox": [502, 339, 56, 25], "iscrowd": 0}, {"id": 11233280, "category_id": 21, "area": 833, "bbox": [69, 334, 44, 23], "iscrowd": 0}, {"id": 13723648, "category_id": 21, "area": 314, "bbox": [433, 345, 25, 20], "iscrowd": 0}, {"id": 13978368, "category_id": 21, "area": 399, "bbox": [483, 344, 26, 27], "iscrowd": 0}, {"id": 12870931, "category_id": 21, "area": 229, "bbox": [279, 339, 37, 9], "iscrowd": 0}, {"id": 13720576, "category_id": 21, "area": 61, "bbox": [428, 347, 7, 14], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 824, "bbox": [111, 314, 40, 21], "iscrowd": 0}, {"id": 11600127, "category_id": 44, "area": 675, "bbox": [111, 337, 40, 21], "iscrowd": 0}, {"id": 10944758, "category_id": 44, "area": 224, "bbox": [54, 335, 20, 18], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 461, "bbox": [165, 188, 55, 159], "iscrowd": 0}]}, {"image_id": "ADE_val_00001571", "file_name": "ADE_val_00001571.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6362, "bbox": [1, 362, 669, 67], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 42617, "bbox": [1, 146, 681, 214], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 185365, "bbox": [1, 1, 681, 338], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 13322, "bbox": [1, 337, 680, 44], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 73029, "bbox": [1, 370, 681, 142], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 566, "bbox": [657, 422, 25, 39], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 3086, "bbox": [1, 377, 209, 32], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 582, "bbox": [669, 361, 14, 77], "iscrowd": 0}, {"id": 3544231, "category_id": 13, "area": 122, "bbox": [553, 346, 10, 24], "iscrowd": 0}, {"id": 3088560, "category_id": 13, "area": 88, "bbox": [564, 348, 7, 21], "iscrowd": 0}, {"id": 4522115, "category_id": 13, "area": 58, "bbox": [583, 347, 5, 15], "iscrowd": 0}, {"id": 4064397, "category_id": 13, "area": 24, "bbox": [637, 346, 6, 7], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 3692, "bbox": [451, 362, 94, 53], "iscrowd": 0}, {"id": 12285952, "category_id": 21, "area": 3079, "bbox": [187, 365, 118, 50], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 448, "bbox": [553, 358, 129, 11], "iscrowd": 0}, {"id": 770303, "category_id": 33, "area": 1261, "bbox": [284, 352, 398, 26], "iscrowd": 0}, {"id": 53217, "category_id": 33, "area": 1065, "bbox": [1, 369, 218, 33], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 96, "bbox": [659, 276, 22, 42], "iscrowd": 0}, {"id": 16730368, "category_id": 88, "area": 2118, "bbox": [26, 105, 71, 301], "iscrowd": 0}, {"id": 16724224, "category_id": 88, "area": 469, "bbox": [490, 230, 36, 128], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 2966, "bbox": [12, 371, 451, 35], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 1498, "bbox": [321, 122, 25, 61], "iscrowd": 0}, {"id": 14942254, "category_id": 137, "area": 1738, "bbox": [504, 110, 29, 65], "iscrowd": 0}]}, {"image_id": "ADE_val_00001572", "file_name": "ADE_val_00001572.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 23721, "bbox": [1, 335, 236, 177], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 98479, "bbox": [1, 0, 682, 501], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 58453, "bbox": [1, 1, 450, 314], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 116778, "bbox": [1, 11, 657, 449], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 20441, "bbox": [220, 399, 356, 113], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 17383, "bbox": [119, 393, 563, 119], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 8871, "bbox": [1, 361, 469, 75], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 1329, "bbox": [146, 480, 89, 32], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 402, "bbox": [279, 387, 14, 47], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 281, "bbox": [184, 461, 21, 16], "iscrowd": 0}, {"id": 696808, "category_id": 83, "area": 223, "bbox": [87, 502, 27, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00001573", "file_name": "ADE_val_00001573.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14117, "bbox": [58, 351, 625, 161], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 158396, "bbox": [69, 69, 614, 357], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 49880, "bbox": [1, 0, 682, 90], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 27749, "bbox": [1, 422, 430, 90], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 71379, "bbox": [0, 1, 678, 511], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1454, "bbox": [262, 284, 36, 49], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 11411, "bbox": [53, 373, 214, 76], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 461, "bbox": [429, 142, 26, 32], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 126, "bbox": [352, 283, 13, 12], "iscrowd": 0}, {"id": 16711931, "category_id": 126, "area": 532, "bbox": [393, 270, 30, 27], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 269, "bbox": [476, 339, 16, 20], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 236, "bbox": [114, 290, 37, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00001574", "file_name": "ADE_val_00001574.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 48108, "bbox": [3, 1, 634, 260], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6276, "bbox": [309, 155, 215, 92], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 116719, "bbox": [0, 222, 640, 258], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 38071, "bbox": [5, 39, 327, 237], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 20054, "bbox": [410, 23, 227, 274], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3353, "bbox": [110, 54, 52, 112], "iscrowd": 0}, {"id": 314867, "category_id": 40, "area": 13266, "bbox": [452, 126, 182, 130], "iscrowd": 0}]}, {"image_id": "ADE_val_00001575", "file_name": "ADE_val_00001575.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 115061, "bbox": [2, 1, 426, 415], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 97368, "bbox": [2, 308, 426, 332], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5351, "bbox": [2, 48, 38, 273], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 7600, "bbox": [191, 196, 167, 85], "iscrowd": 0}, {"id": 16145408, "category_id": 93, "area": 5560, "bbox": [56, 233, 146, 69], "iscrowd": 0}, {"id": 16745472, "category_id": 93, "area": 4858, "bbox": [54, 283, 61, 157], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 4866, "bbox": [227, 530, 99, 82], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 7771, "bbox": [26, 291, 126, 122], "iscrowd": 0}]}, {"image_id": "ADE_val_00001576", "file_name": "ADE_val_00001576.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14494, "bbox": [278, 298, 405, 70], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 152558, "bbox": [1, 1, 682, 264], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 24739, "bbox": [0, 133, 667, 209], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 1310, "bbox": [441, 330, 153, 9], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 99276, "bbox": [0, 340, 683, 172], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1792, "bbox": [292, 283, 26, 83], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 8003, "bbox": [110, 314, 176, 69], "iscrowd": 0}, {"id": 13927168, "category_id": 21, "area": 3245, "bbox": [0, 361, 48, 84], "iscrowd": 0}, {"id": 12479510, "category_id": 21, "area": 6618, "bbox": [0, 316, 113, 82], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 3580, "bbox": [356, 283, 239, 18], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 846, "bbox": [317, 302, 39, 24], "iscrowd": 0}, {"id": 13043, "category_id": 39, "area": 2693, "bbox": [100, 294, 94, 39], "iscrowd": 0}, {"id": 13287, "category_id": 39, "area": 1237, "bbox": [232, 290, 62, 38], "iscrowd": 0}, {"id": 1718523, "category_id": 39, "area": 1897, "bbox": [595, 272, 37, 55], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2718, "bbox": [165, 206, 45, 75], "iscrowd": 0}, {"id": 9961727, "category_id": 44, "area": 258, "bbox": [362, 317, 21, 29], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 2691, "bbox": [635, 200, 48, 100], "iscrowd": 0}, {"id": 15618059, "category_id": 73, "area": 5391, "bbox": [1, 168, 105, 153], "iscrowd": 0}, {"id": 14833692, "category_id": 73, "area": 4132, "bbox": [71, 213, 88, 119], "iscrowd": 0}, {"id": 16725259, "category_id": 73, "area": 4843, "bbox": [213, 155, 106, 169], "iscrowd": 0}, {"id": 16733726, "category_id": 73, "area": 3179, "bbox": [181, 245, 81, 71], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 818, "bbox": [614, 153, 25, 112], "iscrowd": 0}, {"id": 16726016, "category_id": 88, "area": 514, "bbox": [303, 185, 18, 115], "iscrowd": 0}]}, {"image_id": "ADE_val_00001577", "file_name": "ADE_val_00001577.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 91551, "bbox": [0, 256, 512, 343], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 78964, "bbox": [0, 0, 512, 458], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 116327, "bbox": [22, 0, 489, 672], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 10109, "bbox": [1, 592, 132, 90], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1834, "bbox": [1, 564, 94, 28], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2443, "bbox": [399, 361, 51, 73], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 3458, "bbox": [64, 234, 42, 445], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 42849, "bbox": [121, 551, 391, 132], "iscrowd": 0}]}, {"image_id": "ADE_val_00001578", "file_name": "ADE_val_00001578.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 87595, "bbox": [2, 1, 457, 420], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 19092, "bbox": [205, 229, 306, 193], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 13638, "bbox": [256, 232, 245, 190], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6443, "bbox": [244, 57, 52, 131], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 39123, "bbox": [21, 247, 276, 174], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 15280, "bbox": [446, 1, 66, 291], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 7040, "bbox": [248, 21, 75, 213], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 8537, "bbox": [80, 1, 83, 127], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 9975, "bbox": [2, 106, 101, 215], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 915, "bbox": [154, 201, 54, 29], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 1086, "bbox": [168, 229, 35, 37], "iscrowd": 0}]}, {"image_id": "ADE_val_00001579", "file_name": "ADE_val_00001579.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1292, "bbox": [47, 211, 61, 38], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 91603, "bbox": [1, 1, 681, 404], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 117230, "bbox": [1, 1, 666, 261], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 832, "bbox": [420, 277, 40, 44], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 21648, "bbox": [106, 208, 392, 115], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 192, "bbox": [338, 331, 10, 34], "iscrowd": 0}, {"id": 3670193, "category_id": 13, "area": 211, "bbox": [357, 333, 11, 33], "iscrowd": 0}, {"id": 3281564, "category_id": 13, "area": 2594, "bbox": [425, 330, 33, 115], "iscrowd": 0}, {"id": 2104477, "category_id": 13, "area": 2350, "bbox": [535, 324, 45, 90], "iscrowd": 0}, {"id": 3276979, "category_id": 13, "area": 1082, "bbox": [405, 335, 22, 74], "iscrowd": 0}, {"id": 5636224, "category_id": 13, "area": 673, "bbox": [375, 330, 20, 52], "iscrowd": 0}, {"id": 5834414, "category_id": 13, "area": 402, "bbox": [482, 329, 18, 42], "iscrowd": 0}, {"id": 5768592, "category_id": 13, "area": 328, "bbox": [500, 335, 15, 36], "iscrowd": 0}, {"id": 5046393, "category_id": 13, "area": 2213, "bbox": [589, 328, 42, 92], "iscrowd": 0}, {"id": 2949299, "category_id": 13, "area": 1020, "bbox": [632, 361, 43, 61], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 539, "bbox": [293, 326, 28, 29], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 4848, "bbox": [1, 184, 47, 246], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1109, "bbox": [123, 377, 53, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001580", "file_name": "ADE_val_00001580.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 9665, "bbox": [226, 246, 370, 227], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 16983, "bbox": [0, 169, 577, 82], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 128649, "bbox": [1, 0, 682, 228], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 15360, "bbox": [3, 201, 679, 74], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 19141, "bbox": [221, 236, 405, 187], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 3877, "bbox": [0, 247, 204, 26], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 62086, "bbox": [130, 239, 463, 272], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 13953, "bbox": [1, 273, 175, 142], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 84, "bbox": [180, 248, 13, 9], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 20482, "bbox": [588, 216, 94, 295], "iscrowd": 0}, {"id": 4267682, "category_id": 13, "area": 85, "bbox": [218, 239, 7, 21], "iscrowd": 0}, {"id": 4987286, "category_id": 13, "area": 1949, "bbox": [237, 224, 34, 95], "iscrowd": 0}, {"id": 2425002, "category_id": 13, "area": 1345, "bbox": [280, 232, 27, 88], "iscrowd": 0}, {"id": 4131985, "category_id": 13, "area": 72, "bbox": [209, 239, 6, 21], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 4530, "bbox": [351, 232, 85, 63], "iscrowd": 0}, {"id": 12145152, "category_id": 21, "area": 145, "bbox": [304, 237, 14, 13], "iscrowd": 0}, {"id": 11426841, "category_id": 21, "area": 31, "bbox": [274, 240, 8, 4], "iscrowd": 0}, {"id": 13657600, "category_id": 21, "area": 44, "bbox": [1, 255, 13, 4], "iscrowd": 0}, {"id": 11368215, "category_id": 21, "area": 45, "bbox": [17, 255, 14, 4], "iscrowd": 0}, {"id": 14246656, "category_id": 21, "area": 33, "bbox": [108, 259, 10, 4], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 5232, "bbox": [305, 271, 310, 163], "iscrowd": 0}, {"id": 1102591, "category_id": 33, "area": 36, "bbox": [436, 242, 62, 6], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 25607, "bbox": [1, 245, 207, 267], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 80, "bbox": [233, 165, 23, 47], "iscrowd": 0}, {"id": 16725760, "category_id": 88, "area": 26, "bbox": [223, 201, 8, 19], "iscrowd": 0}, {"id": 16734208, "category_id": 88, "area": 16, "bbox": [220, 214, 8, 13], "iscrowd": 0}, {"id": 16145684, "category_id": 88, "area": 372, "bbox": [536, 122, 29, 137], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 14809, "bbox": [486, 1, 71, 480], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 48, "bbox": [281, 280, 6, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00001581", "file_name": "ADE_val_00001581.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 107018, "bbox": [2, 1, 680, 405], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 46092, "bbox": [0, 1, 512, 277], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 106443, "bbox": [1, 0, 509, 418], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 41102, "bbox": [1, 385, 682, 127], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 8811, "bbox": [1, 383, 506, 127], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 7621, "bbox": [1, 387, 200, 68], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2164, "bbox": [406, 351, 103, 31], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 445, "bbox": [223, 364, 21, 25], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1897, "bbox": [96, 148, 105, 268], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 3472, "bbox": [331, 382, 69, 85], "iscrowd": 0}, {"id": 1441791, "category_id": 128, "area": 2048, "bbox": [546, 362, 48, 114], "iscrowd": 0}, {"id": 1898751, "category_id": 128, "area": 1687, "bbox": [632, 373, 51, 84], "iscrowd": 0}]}, {"image_id": "ADE_val_00001582", "file_name": "ADE_val_00001582.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 37649, "bbox": [4, 130, 653, 248], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 80317, "bbox": [2, 1, 679, 271], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 112425, "bbox": [6, 1, 676, 398], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 52455, "bbox": [1, 372, 522, 140], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 24648, "bbox": [399, 369, 284, 143], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 18831, "bbox": [492, 265, 190, 156], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 413, "bbox": [463, 346, 18, 46], "iscrowd": 0}, {"id": 5832869, "category_id": 13, "area": 187, "bbox": [277, 354, 10, 28], "iscrowd": 0}, {"id": 5441425, "category_id": 13, "area": 181, "bbox": [288, 354, 9, 29], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 262, "bbox": [298, 362, 26, 15], "iscrowd": 0}, {"id": 12805888, "category_id": 21, "area": 94, "bbox": [198, 362, 11, 14], "iscrowd": 0}, {"id": 11362326, "category_id": 21, "area": 166, "bbox": [184, 365, 16, 11], "iscrowd": 0}, {"id": 12023052, "category_id": 21, "area": 277, "bbox": [129, 360, 18, 19], "iscrowd": 0}, {"id": 11236352, "category_id": 21, "area": 659, "bbox": [32, 361, 35, 23], "iscrowd": 0}, {"id": 14377472, "category_id": 21, "area": 746, "bbox": [1, 357, 33, 30], "iscrowd": 0}, {"id": 13256960, "category_id": 21, "area": 70, "bbox": [1, 366, 5, 21], "iscrowd": 0}, {"id": 14309893, "category_id": 21, "area": 2254, "bbox": [321, 355, 61, 47], "iscrowd": 0}, {"id": 13525504, "category_id": 21, "area": 359, "bbox": [207, 364, 56, 10], "iscrowd": 0}, {"id": 12156957, "category_id": 21, "area": 1129, "bbox": [399, 358, 56, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00001583", "file_name": "ADE_val_00001583.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 8897, "bbox": [124, 275, 559, 55], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 8684, "bbox": [109, 218, 574, 36], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 155879, "bbox": [1, 1, 682, 246], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 9412, "bbox": [77, 228, 604, 37], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 121609, "bbox": [1, 287, 682, 225], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 11631, "bbox": [112, 262, 570, 46], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 294, "bbox": [320, 247, 20, 38], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 25306, "bbox": [0, 228, 198, 182], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 2041, "bbox": [118, 266, 563, 40], "iscrowd": 0}, {"id": 17909, "category_id": 39, "area": 2095, "bbox": [103, 254, 580, 51], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 177, "bbox": [272, 212, 13, 15], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 225, "bbox": [3, 120, 11, 106], "iscrowd": 0}]}, {"image_id": "ADE_val_00001584", "file_name": "ADE_val_00001584.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 2071, "bbox": [77, 286, 404, 86], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 110214, "bbox": [1, 1, 511, 312], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1219, "bbox": [7, 269, 272, 46], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 143660, "bbox": [1, 354, 509, 328], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 34012, "bbox": [1, 275, 511, 112], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 5702, "bbox": [146, 446, 364, 95], "iscrowd": 0}]}, {"image_id": "ADE_val_00001585", "file_name": "ADE_val_00001585.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 10147, "bbox": [251, 241, 430, 106], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 42343, "bbox": [1, 165, 372, 214], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 106953, "bbox": [2, 1, 681, 181], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 32741, "bbox": [175, 121, 508, 176], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 42345, "bbox": [2, 317, 639, 172], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 42257, "bbox": [1, 362, 681, 150], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 5671, "bbox": [361, 393, 236, 72], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 3960, "bbox": [1, 150, 414, 46], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 21318, "bbox": [465, 270, 218, 233], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 27652, "bbox": [427, 94, 162, 355], "iscrowd": 0}]}, {"image_id": "ADE_val_00001586", "file_name": "ADE_val_00001586.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 2843, "bbox": [1, 343, 681, 29], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 207499, "bbox": [1, 1, 682, 349], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 29642, "bbox": [95, 122, 238, 269], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 54079, "bbox": [2, 349, 557, 162], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 50509, "bbox": [2, 341, 680, 170], "iscrowd": 0}]}, {"image_id": "ADE_val_00001587", "file_name": "ADE_val_00001587.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 216846, "bbox": [1, 1, 627, 511], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 14563, "bbox": [435, 0, 229, 313], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 47076, "bbox": [396, 0, 287, 350], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 27016, "bbox": [373, 347, 310, 165], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 829, "bbox": [648, 349, 35, 33], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 18311, "bbox": [173, 348, 463, 164], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 231, "bbox": [520, 355, 20, 22], "iscrowd": 0}, {"id": 4591237, "category_id": 13, "area": 33, "bbox": [619, 336, 5, 11], "iscrowd": 0}, {"id": 5898405, "category_id": 13, "area": 30, "bbox": [575, 337, 4, 13], "iscrowd": 0}, {"id": 3801236, "category_id": 13, "area": 50, "bbox": [558, 340, 5, 14], "iscrowd": 0}, {"id": 5963941, "category_id": 13, "area": 44, "bbox": [679, 341, 4, 17], "iscrowd": 0}, {"id": 4595342, "category_id": 13, "area": 18, "bbox": [635, 339, 3, 9], "iscrowd": 0}, {"id": 4718713, "category_id": 13, "area": 33, "bbox": [642, 337, 4, 12], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1026, "bbox": [419, 373, 90, 51], "iscrowd": 0}, {"id": 252927, "category_id": 54, "area": 14249, "bbox": [26, 398, 231, 113], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1192, "bbox": [280, 182, 24, 147], "iscrowd": 0}, {"id": 16734464, "category_id": 88, "area": 339, "bbox": [398, 239, 28, 30], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 2567, "bbox": [107, 310, 178, 183], "iscrowd": 0}, {"id": 16743424, "category_id": 96, "area": 613, "bbox": [435, 336, 84, 78], "iscrowd": 0}, {"id": 15433472, "category_id": 96, "area": 2419, "bbox": [16, 308, 140, 198], "iscrowd": 0}, {"id": 16740358, "category_id": 96, "area": 310, "bbox": [419, 338, 70, 88], "iscrowd": 0}]}, {"image_id": "ADE_val_00001588", "file_name": "ADE_val_00001588.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 137836, "bbox": [1, 1, 680, 363], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 45355, "bbox": [0, 305, 682, 206], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 30952, "bbox": [26, 377, 537, 132], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 19269, "bbox": [216, 0, 104, 211], "iscrowd": 0}, {"id": 15663079, "category_id": 9, "area": 13953, "bbox": [1, 0, 69, 249], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 27606, "bbox": [69, 219, 432, 292], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 8825, "bbox": [100, 189, 106, 291], "iscrowd": 0}, {"id": 1860550, "category_id": 20, "area": 3725, "bbox": [253, 176, 76, 63], "iscrowd": 0}, {"id": 80829, "category_id": 20, "area": 24380, "bbox": [208, 241, 210, 266], "iscrowd": 0}, {"id": 276910, "category_id": 20, "area": 17804, "bbox": [370, 211, 161, 273], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1510, "bbox": [126, 86, 41, 40], "iscrowd": 0}, {"id": 5316857, "category_id": 23, "area": 1583, "bbox": [121, 0, 41, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00001589", "file_name": "ADE_val_00001589.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 29392, "bbox": [1, 193, 681, 133], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 166500, "bbox": [1, 1, 681, 281], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 100917, "bbox": [1, 298, 682, 214], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 39003, "bbox": [1, 271, 682, 139], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 51, "bbox": [259, 238, 6, 10], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 5089, "bbox": [534, 284, 148, 84], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 39, "bbox": [363, 275, 6, 7], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 27, "bbox": [308, 262, 4, 21], "iscrowd": 0}, {"id": 15084288, "category_id": 88, "area": 21, "bbox": [399, 264, 4, 17], "iscrowd": 0}, {"id": 16729094, "category_id": 88, "area": 59, "bbox": [26, 256, 5, 28], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 464, "bbox": [129, 341, 21, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00001590", "file_name": "ADE_val_00001590.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 190909, "bbox": [1, 1, 510, 583], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 82193, "bbox": [1, 1, 499, 228], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 8653, "bbox": [369, 356, 130, 176], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 5964, "bbox": [1, 668, 510, 15], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 4768, "bbox": [2, 567, 510, 31], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 37967, "bbox": [1, 575, 511, 96], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 7564, "bbox": [1, 525, 510, 56], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1720, "bbox": [165, 533, 31, 91], "iscrowd": 0}, {"id": 2424987, "category_id": 13, "area": 1303, "bbox": [129, 533, 34, 76], "iscrowd": 0}, {"id": 2359472, "category_id": 13, "area": 314, "bbox": [277, 559, 20, 23], "iscrowd": 0}, {"id": 5111960, "category_id": 13, "area": 4269, "bbox": [412, 526, 64, 129], "iscrowd": 0}]}, {"image_id": "ADE_val_00001591", "file_name": "ADE_val_00001591.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 98038, "bbox": [7, 3, 632, 409], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 61953, "bbox": [6, 364, 632, 146], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 11872, "bbox": [2, 2, 62, 260], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 52036, "bbox": [335, 6, 245, 227], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 10983, "bbox": [3, 305, 78, 202], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 2971, "bbox": [130, 270, 76, 77], "iscrowd": 0}, {"id": 16770064, "category_id": 58, "area": 3657, "bbox": [175, 266, 76, 79], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 22100, "bbox": [97, 1, 151, 175], "iscrowd": 0}, {"id": 16515189, "category_id": 150, "area": 1823, "bbox": [94, 101, 44, 91], "iscrowd": 0}]}, {"image_id": "ADE_val_00001592", "file_name": "ADE_val_00001592.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 46888, "bbox": [0, 244, 513, 127], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 178315, "bbox": [1, 1, 682, 283], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 31380, "bbox": [3, 452, 680, 60], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 10954, "bbox": [429, 269, 252, 55], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 5321, "bbox": [432, 315, 251, 34], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 11585, "bbox": [1, 344, 681, 61], "iscrowd": 0}, {"id": 1487608, "category_id": 33, "area": 199, "bbox": [549, 332, 27, 17], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 533, "bbox": [92, 143, 5, 222], "iscrowd": 0}]}, {"image_id": "ADE_val_00001593", "file_name": "ADE_val_00001593.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 270940, "bbox": [1, 1, 511, 669], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 5148, "bbox": [145, 1, 294, 38], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 21246, "bbox": [1, 586, 511, 97], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1069, "bbox": [432, 30, 25, 68], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1441, "bbox": [353, 514, 41, 73], "iscrowd": 0}, {"id": 4330108, "category_id": 13, "area": 12121, "bbox": [362, 500, 117, 183], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 31848, "bbox": [1, 435, 151, 239], "iscrowd": 0}]}, {"image_id": "ADE_val_00001594", "file_name": "ADE_val_00001594.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 91439, "bbox": [1, 218, 682, 205], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 168400, "bbox": [1, 1, 680, 330], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3921, "bbox": [1, 270, 439, 240], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 54161, "bbox": [1, 410, 682, 102], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6595, "bbox": [4, 371, 676, 135], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 3625, "bbox": [211, 420, 472, 47], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 2771, "bbox": [120, 400, 458, 25], "iscrowd": 0}, {"id": 12105983, "category_id": 85, "area": 9371, "bbox": [14, 111, 62, 252], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 85, "bbox": [625, 351, 8, 36], "iscrowd": 0}, {"id": 15487252, "category_id": 88, "area": 37, "bbox": [216, 373, 2, 20], "iscrowd": 0}, {"id": 16730637, "category_id": 88, "area": 46, "bbox": [563, 349, 6, 28], "iscrowd": 0}, {"id": 16722688, "category_id": 88, "area": 35, "bbox": [560, 356, 4, 21], "iscrowd": 0}, {"id": 16731655, "category_id": 88, "area": 108, "bbox": [455, 362, 7, 38], "iscrowd": 0}, {"id": 16725512, "category_id": 88, "area": 36, "bbox": [93, 369, 5, 36], "iscrowd": 0}, {"id": 16728339, "category_id": 88, "area": 150, "bbox": [573, 353, 14, 55], "iscrowd": 0}, {"id": 15216649, "category_id": 88, "area": 90, "bbox": [445, 357, 8, 41], "iscrowd": 0}, {"id": 16734720, "category_id": 88, "area": 20, "bbox": [155, 379, 4, 11], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 951, "bbox": [231, 400, 68, 19], "iscrowd": 0}, {"id": 16736520, "category_id": 96, "area": 652, "bbox": [563, 388, 88, 21], "iscrowd": 0}, {"id": 16736027, "category_id": 96, "area": 525, "bbox": [575, 407, 81, 19], "iscrowd": 0}, {"id": 16027392, "category_id": 96, "area": 730, "bbox": [351, 413, 82, 16], "iscrowd": 0}, {"id": 16745984, "category_id": 96, "area": 968, "bbox": [386, 397, 79, 17], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 267, "bbox": [31, 203, 17, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00001595", "file_name": "ADE_val_00001595.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18898, "bbox": [286, 260, 333, 105], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 43524, "bbox": [44, 157, 639, 211], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 136907, "bbox": [1, 1, 682, 320], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 18485, "bbox": [128, 23, 284, 301], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 76122, "bbox": [1, 341, 682, 170], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 4252, "bbox": [321, 354, 291, 55], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 4082, "bbox": [1, 307, 44, 109], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1062, "bbox": [61, 313, 33, 60], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2604, "bbox": [235, 265, 51, 60], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 23297, "bbox": [42, 324, 282, 124], "iscrowd": 0}, {"id": 12084499, "category_id": 21, "area": 2448, "bbox": [610, 323, 67, 52], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 781, "bbox": [43, 351, 64, 30], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 783, "bbox": [102, 90, 29, 129], "iscrowd": 0}, {"id": 16727832, "category_id": 88, "area": 792, "bbox": [293, 153, 60, 199], "iscrowd": 0}]}, {"image_id": "ADE_val_00001596", "file_name": "ADE_val_00001596.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 264319, "bbox": [1, 1, 682, 393], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 81995, "bbox": [1, 388, 682, 124], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 762, "bbox": [574, 347, 54, 56], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 266, "bbox": [277, 219, 21, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001597", "file_name": "ADE_val_00001597.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 15362, "bbox": [1, 359, 149, 153], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 10550, "bbox": [322, 279, 360, 73], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 208695, "bbox": [1, 1, 681, 351], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6137, "bbox": [122, 311, 192, 50], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 14758, "bbox": [1, 353, 634, 76], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 19991, "bbox": [322, 395, 360, 116], "iscrowd": 0}, {"id": 16711751, "category_id": 141, "area": 32955, "bbox": [105, 348, 562, 164], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 392, "bbox": [139, 345, 27, 45], "iscrowd": 0}, {"id": 5963899, "category_id": 13, "area": 655, "bbox": [161, 346, 20, 58], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 169, "bbox": [189, 356, 71, 39], "iscrowd": 0}, {"id": 1946605, "category_id": 33, "area": 6346, "bbox": [325, 376, 356, 134], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 262, "bbox": [289, 336, 23, 30], "iscrowd": 0}, {"id": 63907, "category_id": 77, "area": 679, "bbox": [322, 347, 37, 22], "iscrowd": 0}, {"id": 1179590, "category_id": 77, "area": 1690, "bbox": [483, 337, 73, 46], "iscrowd": 0}, {"id": 786325, "category_id": 77, "area": 7589, "bbox": [521, 316, 151, 78], "iscrowd": 0}, {"id": 1310623, "category_id": 77, "area": 2603, "bbox": [609, 264, 73, 166], "iscrowd": 0}, {"id": 1440951, "category_id": 77, "area": 1456, "bbox": [357, 301, 102, 77], "iscrowd": 0}, {"id": 59839, "category_id": 77, "area": 622, "bbox": [474, 298, 33, 79], "iscrowd": 0}, {"id": 58779, "category_id": 77, "area": 1007, "bbox": [359, 346, 53, 25], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 139, "bbox": [147, 390, 12, 14], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 399, "bbox": [245, 172, 21, 47], "iscrowd": 0}, {"id": 16384121, "category_id": 150, "area": 509, "bbox": [236, 207, 20, 35], "iscrowd": 0}, {"id": 16711797, "category_id": 150, "area": 238, "bbox": [223, 230, 14, 29], "iscrowd": 0}, {"id": 15994201, "category_id": 150, "area": 90, "bbox": [212, 250, 8, 24], "iscrowd": 0}, {"id": 16649793, "category_id": 150, "area": 28, "bbox": [203, 266, 5, 16], "iscrowd": 0}, {"id": 16711753, "category_id": 150, "area": 117, "bbox": [192, 273, 9, 28], "iscrowd": 0}, {"id": 15663171, "category_id": 150, "area": 97, "bbox": [189, 284, 8, 37], "iscrowd": 0}, {"id": 16715365, "category_id": 150, "area": 1451, "bbox": [314, 29, 27, 82], "iscrowd": 0}]}, {"image_id": "ADE_val_00001598", "file_name": "ADE_val_00001598.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 193827, "bbox": [0, 23, 751, 488], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 19391, "bbox": [154, 462, 578, 49], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 66022, "bbox": [0, 0, 752, 130], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 56287, "bbox": [558, 97, 167, 380], "iscrowd": 0}, {"id": 3341329, "category_id": 15, "area": 21690, "bbox": [434, 219, 89, 261], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 2192, "bbox": [288, 402, 56, 66], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 13753, "bbox": [147, 247, 140, 241], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 8784, "bbox": [468, 1, 181, 105], "iscrowd": 0}]}, {"image_id": "ADE_val_00001599", "file_name": "ADE_val_00001599.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 37279, "bbox": [0, 0, 256, 218], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9375, "bbox": [15, 1, 241, 104], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4486, "bbox": [0, 1, 52, 156], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 3585, "bbox": [34, 198, 222, 58], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 7235, "bbox": [0, 195, 256, 61], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 1641, "bbox": [67, 159, 142, 57], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 212, "bbox": [131, 179, 11, 21], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 72, "bbox": [34, 188, 10, 9], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 149, "bbox": [2, 225, 7, 30], "iscrowd": 0}, {"id": 16711715, "category_id": 94, "area": 127, "bbox": [52, 221, 6, 29], "iscrowd": 0}, {"id": 14753318, "category_id": 94, "area": 100, "bbox": [92, 218, 4, 25], "iscrowd": 0}, {"id": 16716057, "category_id": 94, "area": 115, "bbox": [121, 215, 5, 23], "iscrowd": 0}, {"id": 16717611, "category_id": 94, "area": 60, "bbox": [146, 213, 3, 20], "iscrowd": 0}, {"id": 15011114, "category_id": 94, "area": 2, "bbox": [212, 220, 1, 2], "iscrowd": 0}, {"id": 15400992, "category_id": 94, "area": 40, "bbox": [167, 211, 3, 19], "iscrowd": 0}, {"id": 16711716, "category_id": 94, "area": 16, "bbox": [199, 210, 2, 14], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 50, "bbox": [67, 142, 49, 56], "iscrowd": 0}, {"id": 16738560, "category_id": 96, "area": 71, "bbox": [129, 141, 59, 72], "iscrowd": 0}]}, {"image_id": "ADE_val_00001600", "file_name": "ADE_val_00001600.png", "segments_info": [{"id": 555775, "category_id": 41, "area": 5544, "bbox": [227, 0, 68, 216], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 1473, "bbox": [113, 151, 48, 46], "iscrowd": 0}, {"id": 1887475, "category_id": 121, "area": 1715, "bbox": [164, 63, 44, 51], "iscrowd": 0}, {"id": 52213, "category_id": 121, "area": 1641, "bbox": [106, 97, 54, 47], "iscrowd": 0}, {"id": 315391, "category_id": 121, "area": 1877, "bbox": [27, 74, 45, 56], "iscrowd": 0}, {"id": 1498871, "category_id": 121, "area": 1361, "bbox": [137, 14, 62, 39], "iscrowd": 0}, {"id": 58870, "category_id": 121, "area": 1766, "bbox": [56, 129, 48, 47], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 5931, "bbox": [234, 55, 62, 161], "iscrowd": 0}]}, {"image_id": "ADE_val_00001601", "file_name": "ADE_val_00001601.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 16471, "bbox": [0, 42, 256, 102], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 12572, "bbox": [2, 1, 254, 61], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1061, "bbox": [190, 29, 66, 44], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 30373, "bbox": [2, 130, 253, 126], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 1284, "bbox": [206, 96, 47, 33], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 1491, "bbox": [46, 65, 89, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00001602", "file_name": "ADE_val_00001602.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 4020, "bbox": [275, 161, 122, 76], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 3504, "bbox": [0, 46, 293, 63], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 1274, "bbox": [7, 0, 93, 22], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 38061, "bbox": [0, 0, 397, 135], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 26054, "bbox": [1, 143, 396, 120], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 2631, "bbox": [0, 124, 112, 47], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 9899, "bbox": [0, 97, 397, 104], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 392, "bbox": [79, 98, 18, 49], "iscrowd": 0}, {"id": 3613360, "category_id": 13, "area": 286, "bbox": [110, 110, 22, 31], "iscrowd": 0}, {"id": 5705895, "category_id": 13, "area": 685, "bbox": [286, 103, 18, 62], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2198, "bbox": [214, 105, 68, 59], "iscrowd": 0}, {"id": 11829761, "category_id": 21, "area": 381, "bbox": [270, 110, 25, 32], "iscrowd": 0}, {"id": 12739330, "category_id": 21, "area": 12994, "bbox": [70, 113, 174, 99], "iscrowd": 0}]}, {"image_id": "ADE_val_00001603", "file_name": "ADE_val_00001603.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 36513, "bbox": [0, 26, 256, 176], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9884, "bbox": [2, 1, 254, 55], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 14710, "bbox": [0, 186, 256, 70], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 2340, "bbox": [98, 99, 89, 32], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1159, "bbox": [2, 179, 32, 47], "iscrowd": 0}, {"id": 16122020, "category_id": 139, "area": 194, "bbox": [153, 184, 12, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00001604", "file_name": "ADE_val_00001604.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 33304, "bbox": [0, 0, 255, 132], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 7909, "bbox": [1, 210, 255, 46], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 21559, "bbox": [0, 130, 255, 115], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 702, "bbox": [220, 134, 35, 60], "iscrowd": 0}]}, {"image_id": "ADE_val_00001605", "file_name": "ADE_val_00001605.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 88188, "bbox": [1, 1, 681, 151], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 98204, "bbox": [1, 110, 681, 168], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 15629, "bbox": [118, 446, 453, 66], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 49707, "bbox": [1, 310, 681, 201], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 59583, "bbox": [1, 274, 681, 207], "iscrowd": 0}, {"id": 16711751, "category_id": 141, "area": 19405, "bbox": [279, 347, 204, 129], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 7352, "bbox": [226, 330, 77, 131], "iscrowd": 0}, {"id": 65465, "category_id": 77, "area": 7447, "bbox": [406, 324, 141, 121], "iscrowd": 0}]}, {"image_id": "ADE_val_00001606", "file_name": "ADE_val_00001606.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 44229, "bbox": [0, 0, 256, 256], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5307, "bbox": [0, 171, 108, 85], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1282, "bbox": [0, 0, 79, 27], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6283, "bbox": [83, 20, 65, 109], "iscrowd": 0}, {"id": 4587763, "category_id": 23, "area": 4136, "bbox": [222, 3, 33, 137], "iscrowd": 0}, {"id": 2498542, "category_id": 23, "area": 2602, "bbox": [1, 41, 28, 98], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 437, "bbox": [0, 147, 47, 30], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 547, "bbox": [22, 125, 18, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00001607", "file_name": "ADE_val_00001607.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 26818, "bbox": [1, 18, 448, 205], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 32484, "bbox": [2, 171, 447, 128], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 9884, "bbox": [0, 0, 449, 44], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 9250, "bbox": [186, 13, 263, 130], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1568, "bbox": [57, 199, 89, 29], "iscrowd": 0}, {"id": 6947046, "category_id": 16, "area": 583, "bbox": [5, 167, 58, 13], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 17786, "bbox": [185, 14, 263, 89], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 7663, "bbox": [0, 183, 177, 109], "iscrowd": 0}, {"id": 23807, "category_id": 79, "area": 4350, "bbox": [37, 90, 53, 102], "iscrowd": 0}, {"id": 1075455, "category_id": 79, "area": 4343, "bbox": [79, 93, 63, 94], "iscrowd": 0}, {"id": 17407, "category_id": 79, "area": 2839, "bbox": [125, 90, 46, 88], "iscrowd": 0}, {"id": 22783, "category_id": 79, "area": 5486, "bbox": [366, 207, 83, 91], "iscrowd": 0}, {"id": 23023, "category_id": 79, "area": 1960, "bbox": [168, 102, 52, 56], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 786, "bbox": [139, 3, 82, 18], "iscrowd": 0}, {"id": 47359, "category_id": 83, "area": 638, "bbox": [288, 1, 70, 17], "iscrowd": 0}, {"id": 46847, "category_id": 83, "area": 173, "bbox": [0, 4, 25, 11], "iscrowd": 0}, {"id": 45041, "category_id": 83, "area": 424, "bbox": [79, 27, 63, 11], "iscrowd": 0}, {"id": 1224696, "category_id": 83, "area": 449, "bbox": [118, 17, 65, 16], "iscrowd": 0}, {"id": 45055, "category_id": 83, "area": 495, "bbox": [215, 14, 66, 14], "iscrowd": 0}, {"id": 38143, "category_id": 83, "area": 341, "bbox": [182, 26, 57, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00001608", "file_name": "ADE_val_00001608.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 22167, "bbox": [18, 43, 370, 178], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 29558, "bbox": [0, 163, 391, 100], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 20287, "bbox": [0, 1, 391, 96], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 15571, "bbox": [0, 16, 391, 242], "iscrowd": 0}, {"id": 10495, "category_id": 19, "area": 4083, "bbox": [345, 49, 43, 168], "iscrowd": 0}, {"id": 8181, "category_id": 19, "area": 1287, "bbox": [146, 99, 31, 43], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2037, "bbox": [30, 169, 61, 74], "iscrowd": 0}, {"id": 283356, "category_id": 20, "area": 402, "bbox": [87, 152, 29, 43], "iscrowd": 0}, {"id": 1918135, "category_id": 20, "area": 198, "bbox": [164, 139, 13, 25], "iscrowd": 0}, {"id": 941530, "category_id": 20, "area": 496, "bbox": [242, 132, 29, 29], "iscrowd": 0}, {"id": 13528, "category_id": 20, "area": 280, "bbox": [144, 142, 16, 26], "iscrowd": 0}, {"id": 16870, "category_id": 20, "area": 642, "bbox": [313, 152, 40, 58], "iscrowd": 0}, {"id": 18152, "category_id": 20, "area": 496, "bbox": [302, 150, 36, 52], "iscrowd": 0}, {"id": 15034, "category_id": 20, "area": 332, "bbox": [286, 145, 29, 42], "iscrowd": 0}, {"id": 10467, "category_id": 20, "area": 1256, "bbox": [341, 159, 48, 75], "iscrowd": 0}, {"id": 1194939, "category_id": 20, "area": 834, "bbox": [325, 155, 47, 65], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 483, "bbox": [87, 109, 24, 21], "iscrowd": 0}, {"id": 1908735, "category_id": 23, "area": 198, "bbox": [283, 100, 10, 23], "iscrowd": 0}, {"id": 2097391, "category_id": 23, "area": 350, "bbox": [199, 108, 17, 24], "iscrowd": 0}, {"id": 5243135, "category_id": 23, "area": 221, "bbox": [338, 85, 10, 25], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 104, "bbox": [175, 53, 21, 6], "iscrowd": 0}]}, {"image_id": "ADE_val_00001609", "file_name": "ADE_val_00001609.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 539, "bbox": [0, 83, 105, 14], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 20096, "bbox": [2, 0, 254, 94], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 6195, "bbox": [0, 59, 255, 68], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 36240, "bbox": [2, 90, 253, 166], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 307, "bbox": [56, 124, 28, 19], "iscrowd": 0}, {"id": 126140, "category_id": 77, "area": 154, "bbox": [149, 111, 18, 11], "iscrowd": 0}, {"id": 65460, "category_id": 77, "area": 240, "bbox": [231, 96, 17, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00001610", "file_name": "ADE_val_00001610.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 108377, "bbox": [0, 0, 619, 183], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 20736, "bbox": [0, 175, 318, 115], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 101667, "bbox": [0, 155, 618, 258], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 9638, "bbox": [308, 181, 201, 73], "iscrowd": 0}, {"id": 16714240, "category_id": 92, "area": 11910, "bbox": [0, 214, 408, 110], "iscrowd": 0}]}, {"image_id": "ADE_val_00001611", "file_name": "ADE_val_00001611.png", "segments_info": [{"id": 3289680, "category_id": 4, "area": 22734, "bbox": [30, 0, 428, 202], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1538, "bbox": [2, 97, 152, 106], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 22168, "bbox": [2, 1, 398, 202], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 2762, "bbox": [36, 5, 128, 52], "iscrowd": 0}, {"id": 49140, "category_id": 68, "area": 2752, "bbox": [36, 29, 130, 57], "iscrowd": 0}, {"id": 442602, "category_id": 68, "area": 2381, "bbox": [39, 52, 126, 61], "iscrowd": 0}, {"id": 1743869, "category_id": 68, "area": 1518, "bbox": [172, 2, 98, 41], "iscrowd": 0}, {"id": 41215, "category_id": 68, "area": 1484, "bbox": [172, 14, 100, 48], "iscrowd": 0}, {"id": 47359, "category_id": 68, "area": 1544, "bbox": [169, 29, 103, 55], "iscrowd": 0}, {"id": 44287, "category_id": 68, "area": 1396, "bbox": [153, 48, 118, 62], "iscrowd": 0}, {"id": 1616127, "category_id": 68, "area": 296, "bbox": [293, 20, 35, 21], "iscrowd": 0}, {"id": 44799, "category_id": 68, "area": 2734, "bbox": [274, 108, 58, 61], "iscrowd": 0}, {"id": 1086703, "category_id": 68, "area": 1211, "bbox": [223, 113, 38, 40], "iscrowd": 0}, {"id": 42751, "category_id": 68, "area": 349, "bbox": [303, 91, 32, 22], "iscrowd": 0}, {"id": 369663, "category_id": 68, "area": 587, "bbox": [346, 79, 36, 23], "iscrowd": 0}, {"id": 38897, "category_id": 68, "area": 665, "bbox": [258, 74, 36, 30], "iscrowd": 0}, {"id": 956648, "category_id": 68, "area": 802, "bbox": [376, 37, 28, 37], "iscrowd": 0}, {"id": 44521, "category_id": 68, "area": 1163, "bbox": [189, 155, 55, 46], "iscrowd": 0}, {"id": 298490, "category_id": 68, "area": 5725, "bbox": [2, 94, 151, 92], "iscrowd": 0}]}, {"image_id": "ADE_val_00001612", "file_name": "ADE_val_00001612.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 35093, "bbox": [80, 14, 248, 413], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 43019, "bbox": [2, 304, 326, 195], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 36421, "bbox": [57, 0, 272, 216], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 878, "bbox": [182, 260, 20, 44], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1699, "bbox": [144, 205, 18, 109], "iscrowd": 0}, {"id": 2687231, "category_id": 43, "area": 7865, "bbox": [99, 162, 45, 179], "iscrowd": 0}, {"id": 2949352, "category_id": 43, "area": 34356, "bbox": [2, 0, 81, 448], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 282, "bbox": [214, 122, 26, 12], "iscrowd": 0}, {"id": 109567, "category_id": 83, "area": 803, "bbox": [226, 47, 41, 22], "iscrowd": 0}, {"id": 1815551, "category_id": 83, "area": 146, "bbox": [208, 159, 21, 8], "iscrowd": 0}, {"id": 1087999, "category_id": 83, "area": 121, "bbox": [204, 180, 17, 9], "iscrowd": 0}, {"id": 51942, "category_id": 83, "area": 56, "bbox": [203, 196, 12, 6], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 879, "bbox": [221, 285, 95, 138], "iscrowd": 0}]}, {"image_id": "ADE_val_00001613", "file_name": "ADE_val_00001613.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 168807, "bbox": [0, 0, 766, 229], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6568, "bbox": [2, 206, 764, 27], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 73354, "bbox": [0, 227, 767, 229], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 141114, "bbox": [0, 230, 766, 281], "iscrowd": 0}]}, {"image_id": "ADE_val_00001614", "file_name": "ADE_val_00001614.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18096, "bbox": [0, 1, 255, 149], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14777, "bbox": [0, 136, 255, 120], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1996, "bbox": [2, 0, 243, 16], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2430, "bbox": [99, 46, 42, 62], "iscrowd": 0}, {"id": 15072991, "category_id": 9, "area": 3676, "bbox": [148, 43, 55, 73], "iscrowd": 0}, {"id": 16053759, "category_id": 9, "area": 3593, "bbox": [210, 40, 45, 83], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 3049, "bbox": [44, 48, 43, 92], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1194, "bbox": [116, 140, 62, 76], "iscrowd": 0}, {"id": 937140, "category_id": 20, "area": 365, "bbox": [105, 132, 24, 26], "iscrowd": 0}, {"id": 19631, "category_id": 20, "area": 377, "bbox": [162, 112, 30, 38], "iscrowd": 0}, {"id": 22460, "category_id": 20, "area": 141, "bbox": [24, 109, 29, 31], "iscrowd": 0}, {"id": 600500, "category_id": 20, "area": 163, "bbox": [27, 117, 16, 14], "iscrowd": 0}, {"id": 10686, "category_id": 20, "area": 494, "bbox": [4, 205, 52, 24], "iscrowd": 0}, {"id": 78306, "category_id": 20, "area": 453, "bbox": [2, 214, 32, 22], "iscrowd": 0}, {"id": 21728, "category_id": 20, "area": 755, "bbox": [192, 149, 53, 69], "iscrowd": 0}, {"id": 539074, "category_id": 20, "area": 255, "bbox": [62, 120, 32, 27], "iscrowd": 0}, {"id": 13506, "category_id": 20, "area": 434, "bbox": [172, 140, 39, 63], "iscrowd": 0}, {"id": 18642, "category_id": 20, "area": 329, "bbox": [95, 118, 20, 28], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 1348, "bbox": [195, 135, 60, 61], "iscrowd": 0}, {"id": 5892371, "category_id": 34, "area": 2997, "bbox": [0, 221, 150, 35], "iscrowd": 0}, {"id": 3800870, "category_id": 34, "area": 452, "bbox": [2, 126, 37, 32], "iscrowd": 0}, {"id": 5695000, "category_id": 34, "area": 5949, "bbox": [0, 146, 159, 99], "iscrowd": 0}, {"id": 3866393, "category_id": 34, "area": 1151, "bbox": [85, 114, 93, 49], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 217, "bbox": [59, 1, 48, 8], "iscrowd": 0}]}, {"image_id": "ADE_val_00001615", "file_name": "ADE_val_00001615.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 32908, "bbox": [0, 0, 367, 201], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 5369, "bbox": [105, 118, 263, 157], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 4076, "bbox": [143, 12, 129, 35], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6385, "bbox": [0, 167, 107, 108], "iscrowd": 0}, {"id": 4727193, "category_id": 13, "area": 1719, "bbox": [117, 85, 45, 89], "iscrowd": 0}, {"id": 5839791, "category_id": 13, "area": 3993, "bbox": [70, 100, 62, 107], "iscrowd": 0}, {"id": 2301312, "category_id": 13, "area": 5749, "bbox": [247, 153, 87, 122], "iscrowd": 0}, {"id": 3276945, "category_id": 13, "area": 390, "bbox": [115, 30, 17, 44], "iscrowd": 0}, {"id": 2558613, "category_id": 13, "area": 409, "bbox": [174, 45, 29, 31], "iscrowd": 0}, {"id": 5308553, "category_id": 13, "area": 908, "bbox": [140, 81, 29, 55], "iscrowd": 0}, {"id": 2032268, "category_id": 13, "area": 1455, "bbox": [220, 82, 43, 68], "iscrowd": 0}, {"id": 5046927, "category_id": 13, "area": 2533, "bbox": [200, 122, 100, 116], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 7526, "bbox": [125, 119, 125, 124], "iscrowd": 0}, {"id": 4980967, "category_id": 16, "area": 4286, "bbox": [88, 243, 184, 32], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 2207, "bbox": [230, 81, 91, 40], "iscrowd": 0}, {"id": 15868907, "category_id": 46, "area": 418, "bbox": [117, 75, 42, 31], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 3183, "bbox": [0, 120, 102, 127], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 1351, "bbox": [91, 196, 53, 47], "iscrowd": 0}, {"id": 9152835, "category_id": 116, "area": 183, "bbox": [205, 108, 23, 12], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 139, "bbox": [308, 74, 16, 11], "iscrowd": 0}, {"id": 1636410, "category_id": 138, "area": 194, "bbox": [286, 77, 23, 10], "iscrowd": 0}, {"id": 1305899, "category_id": 138, "area": 238, "bbox": [124, 75, 23, 11], "iscrowd": 0}, {"id": 65292, "category_id": 138, "area": 745, "bbox": [210, 183, 37, 24], "iscrowd": 0}, {"id": 65325, "category_id": 138, "area": 511, "bbox": [129, 151, 36, 18], "iscrowd": 0}, {"id": 783940, "category_id": 138, "area": 243, "bbox": [146, 136, 27, 12], "iscrowd": 0}, {"id": 917310, "category_id": 138, "area": 221, "bbox": [185, 120, 26, 10], "iscrowd": 0}, {"id": 62220, "category_id": 138, "area": 212, "bbox": [158, 119, 26, 11], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 377, "bbox": [171, 166, 36, 13], "iscrowd": 0}, {"id": 11271690, "category_id": 143, "area": 223, "bbox": [199, 173, 22, 13], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 271, "bbox": [204, 235, 13, 23], "iscrowd": 0}, {"id": 13805855, "category_id": 148, "area": 252, "bbox": [124, 235, 12, 22], "iscrowd": 0}, {"id": 14406925, "category_id": 148, "area": 144, "bbox": [177, 142, 10, 17], "iscrowd": 0}, {"id": 12497941, "category_id": 148, "area": 152, "bbox": [142, 180, 11, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001616", "file_name": "ADE_val_00001616.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 17789, "bbox": [2, 0, 253, 87], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 8631, "bbox": [0, 59, 255, 51], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 24046, "bbox": [0, 106, 255, 114], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 13103, "bbox": [0, 185, 255, 70], "iscrowd": 0}]}, {"image_id": "ADE_val_00001617", "file_name": "ADE_val_00001617.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 77611, "bbox": [1, 176, 681, 241], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 112450, "bbox": [0, 0, 682, 324], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5922, "bbox": [0, 384, 682, 81], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 964, "bbox": [79, 382, 603, 107], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 36184, "bbox": [0, 400, 557, 111], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 59425, "bbox": [157, 1, 489, 452], "iscrowd": 0}, {"id": 12105983, "category_id": 85, "area": 798, "bbox": [363, 177, 23, 68], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1323, "bbox": [312, 396, 30, 84], "iscrowd": 0}, {"id": 4464562, "category_id": 13, "area": 1278, "bbox": [285, 402, 30, 75], "iscrowd": 0}, {"id": 2691478, "category_id": 13, "area": 1253, "bbox": [345, 406, 26, 76], "iscrowd": 0}, {"id": 2430852, "category_id": 13, "area": 76, "bbox": [513, 401, 7, 22], "iscrowd": 0}, {"id": 2364297, "category_id": 13, "area": 285, "bbox": [409, 400, 13, 40], "iscrowd": 0}, {"id": 3148461, "category_id": 13, "area": 291, "bbox": [419, 400, 12, 40], "iscrowd": 0}, {"id": 2430633, "category_id": 13, "area": 92, "bbox": [437, 401, 5, 24], "iscrowd": 0}, {"id": 3739538, "category_id": 13, "area": 79, "bbox": [430, 401, 7, 23], "iscrowd": 0}, {"id": 3735726, "category_id": 13, "area": 184, "bbox": [241, 404, 11, 32], "iscrowd": 0}, {"id": 4849813, "category_id": 13, "area": 126, "bbox": [449, 400, 8, 26], "iscrowd": 0}, {"id": 4464048, "category_id": 13, "area": 123, "bbox": [456, 400, 9, 26], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 8842, "bbox": [525, 402, 157, 108], "iscrowd": 0}, {"id": 23274, "category_id": 39, "area": 670, "bbox": [1, 415, 26, 44], "iscrowd": 0}, {"id": 12287, "category_id": 39, "area": 5433, "bbox": [51, 411, 208, 41], "iscrowd": 0}, {"id": 1136383, "category_id": 39, "area": 539, "bbox": [283, 404, 95, 24], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 55, "bbox": [455, 425, 15, 11], "iscrowd": 0}, {"id": 255915, "category_id": 70, "area": 113, "bbox": [446, 432, 15, 13], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 932, "bbox": [151, 400, 106, 11], "iscrowd": 0}, {"id": 2357770, "category_id": 87, "area": 588, "bbox": [92, 399, 58, 12], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 13401, "bbox": [11, 96, 91, 413], "iscrowd": 0}, {"id": 16730117, "category_id": 88, "area": 1634, "bbox": [368, 307, 28, 177], "iscrowd": 0}, {"id": 16725265, "category_id": 88, "area": 432, "bbox": [434, 346, 17, 76], "iscrowd": 0}, {"id": 16722437, "category_id": 88, "area": 19, "bbox": [412, 383, 5, 11], "iscrowd": 0}, {"id": 15685400, "category_id": 88, "area": 607, "bbox": [202, 349, 15, 96], "iscrowd": 0}, {"id": 15740929, "category_id": 88, "area": 1544, "bbox": [0, 318, 25, 152], "iscrowd": 0}, {"id": 15487518, "category_id": 88, "area": 98, "bbox": [485, 377, 7, 45], "iscrowd": 0}, {"id": 15680512, "category_id": 88, "area": 199, "bbox": [462, 362, 11, 62], "iscrowd": 0}, {"id": 15352833, "category_id": 88, "area": 195, "bbox": [475, 371, 9, 56], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 333, "bbox": [179, 424, 16, 23], "iscrowd": 0}, {"id": 16711874, "category_id": 139, "area": 370, "bbox": [430, 427, 16, 25], "iscrowd": 0}, {"id": 14811339, "category_id": 139, "area": 77, "bbox": [470, 418, 6, 14], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 904, "bbox": [125, 233, 24, 105], "iscrowd": 0}, {"id": 16711747, "category_id": 150, "area": 1099, "bbox": [520, 254, 25, 84], "iscrowd": 0}, {"id": 15466616, "category_id": 150, "area": 345, "bbox": [524, 305, 12, 59], "iscrowd": 0}, {"id": 16713278, "category_id": 150, "area": 1194, "bbox": [58, 209, 27, 123], "iscrowd": 0}, {"id": 15401053, "category_id": 150, "area": 364, "bbox": [525, 174, 33, 146], "iscrowd": 0}, {"id": 16712787, "category_id": 150, "area": 2075, "bbox": [526, 177, 32, 144], "iscrowd": 0}, {"id": 16717907, "category_id": 150, "area": 766, "bbox": [178, 291, 21, 55], "iscrowd": 0}]}, {"image_id": "ADE_val_00001618", "file_name": "ADE_val_00001618.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 41707, "bbox": [0, 0, 256, 256], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 7706, "bbox": [2, 173, 179, 83], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 15252, "bbox": [0, 117, 256, 139], "iscrowd": 0}]}, {"image_id": "ADE_val_00001619", "file_name": "ADE_val_00001619.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 6507, "bbox": [0, 0, 258, 84], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 26740, "bbox": [0, 0, 276, 209], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 43935, "bbox": [0, 206, 276, 221], "iscrowd": 0}, {"id": 16711935, "category_id": 80, "area": 30345, "bbox": [2, 37, 227, 248], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 570, "bbox": [0, 155, 13, 65], "iscrowd": 0}, {"id": 42751, "category_id": 33, "area": 4231, "bbox": [207, 174, 69, 132], "iscrowd": 0}]}, {"image_id": "ADE_val_00001620", "file_name": "ADE_val_00001620.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 24631, "bbox": [0, 95, 256, 108], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 24979, "bbox": [2, 1, 254, 177], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 300, "bbox": [6, 149, 65, 91], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 11276, "bbox": [2, 199, 254, 57], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 202, "bbox": [2, 237, 42, 8], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 2116, "bbox": [147, 197, 109, 46], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 26, "bbox": [18, 69, 6, 34], "iscrowd": 0}, {"id": 16722200, "category_id": 88, "area": 59, "bbox": [32, 63, 6, 33], "iscrowd": 0}, {"id": 16723200, "category_id": 88, "area": 49, "bbox": [48, 57, 4, 29], "iscrowd": 0}, {"id": 16737024, "category_id": 88, "area": 34, "bbox": [85, 50, 5, 27], "iscrowd": 0}, {"id": 16724736, "category_id": 88, "area": 28, "bbox": [113, 50, 5, 33], "iscrowd": 0}, {"id": 14961164, "category_id": 88, "area": 19, "bbox": [140, 50, 3, 7], "iscrowd": 0}, {"id": 16728576, "category_id": 88, "area": 63, "bbox": [194, 53, 5, 39], "iscrowd": 0}, {"id": 15414542, "category_id": 88, "area": 24, "bbox": [222, 53, 4, 28], "iscrowd": 0}, {"id": 16010260, "category_id": 88, "area": 69, "bbox": [246, 55, 6, 41], "iscrowd": 0}, {"id": 16730135, "category_id": 88, "area": 244, "bbox": [214, 128, 8, 71], "iscrowd": 0}, {"id": 15938048, "category_id": 88, "area": 98, "bbox": [170, 160, 5, 49], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 80, "bbox": [164, 147, 10, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00001621", "file_name": "ADE_val_00001621.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 1798, "bbox": [73, 150, 100, 32], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 98736, "bbox": [0, 0, 702, 176], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 25621, "bbox": [0, 106, 703, 134], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 85839, "bbox": [0, 181, 703, 330], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 67136, "bbox": [0, 135, 703, 271], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1774, "bbox": [298, 178, 53, 50], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 3265, "bbox": [363, 81, 66, 77], "iscrowd": 0}, {"id": 16738048, "category_id": 73, "area": 648, "bbox": [423, 109, 42, 50], "iscrowd": 0}]}, {"image_id": "ADE_val_00001622", "file_name": "ADE_val_00001622.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 140830, "bbox": [0, 108, 510, 569], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 39625, "bbox": [1, 456, 494, 220], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 87396, "bbox": [1, 0, 508, 213], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 6521, "bbox": [3, 264, 43, 193], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 11751, "bbox": [257, 530, 254, 149], "iscrowd": 0}, {"id": 6029567, "category_id": 16, "area": 5532, "bbox": [119, 466, 278, 189], "iscrowd": 0}, {"id": 5578239, "category_id": 16, "area": 2692, "bbox": [47, 433, 208, 134], "iscrowd": 0}, {"id": 6168048, "category_id": 16, "area": 1900, "bbox": [0, 410, 169, 105], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 7461, "bbox": [179, 500, 117, 169], "iscrowd": 0}, {"id": 20670, "category_id": 20, "area": 2032, "bbox": [313, 485, 72, 55], "iscrowd": 0}, {"id": 11206, "category_id": 20, "area": 576, "bbox": [234, 457, 61, 16], "iscrowd": 0}, {"id": 23214, "category_id": 20, "area": 2691, "bbox": [136, 466, 73, 159], "iscrowd": 0}, {"id": 24263, "category_id": 20, "area": 1121, "bbox": [175, 446, 63, 24], "iscrowd": 0}, {"id": 18134, "category_id": 20, "area": 3164, "bbox": [80, 445, 78, 119], "iscrowd": 0}, {"id": 12235, "category_id": 20, "area": 383, "bbox": [68, 403, 55, 10], "iscrowd": 0}, {"id": 22734, "category_id": 20, "area": 3691, "bbox": [405, 514, 105, 165], "iscrowd": 0}, {"id": 1334975, "category_id": 20, "area": 6378, "bbox": [275, 522, 147, 157], "iscrowd": 0}, {"id": 20967, "category_id": 20, "area": 398, "bbox": [129, 426, 53, 11], "iscrowd": 0}, {"id": 801995, "category_id": 20, "area": 1223, "bbox": [53, 430, 57, 120], "iscrowd": 0}, {"id": 2175929, "category_id": 20, "area": 1586, "bbox": [17, 417, 64, 97], "iscrowd": 0}, {"id": 11471, "category_id": 20, "area": 264, "bbox": [128, 418, 47, 10], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 467, "bbox": [148, 288, 19, 26], "iscrowd": 0}, {"id": 15412224, "category_id": 135, "area": 651, "bbox": [239, 286, 21, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00001623", "file_name": "ADE_val_00001623.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 18202, "bbox": [2, 1, 254, 78], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 28460, "bbox": [2, 77, 253, 179], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 16856, "bbox": [2, 51, 254, 205], "iscrowd": 0}]}, {"image_id": "ADE_val_00001624", "file_name": "ADE_val_00001624.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 47359, "bbox": [1, 1, 255, 202], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 14321, "bbox": [2, 176, 253, 79], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 1483, "bbox": [197, 219, 47, 37], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 727, "bbox": [111, 185, 42, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00001625", "file_name": "ADE_val_00001625.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 26471, "bbox": [2, 1, 254, 116], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1579, "bbox": [12, 77, 186, 41], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 327, "bbox": [2, 102, 41, 12], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 31898, "bbox": [2, 117, 254, 139], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 1907, "bbox": [90, 154, 128, 25], "iscrowd": 0}, {"id": 16761344, "category_id": 95, "area": 1463, "bbox": [2, 97, 224, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00001626", "file_name": "ADE_val_00001626.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21452, "bbox": [2, 19, 398, 247], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17280, "bbox": [0, 224, 400, 75], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3724, "bbox": [2, 1, 307, 147], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2272, "bbox": [2, 139, 32, 120], "iscrowd": 0}, {"id": 3605659, "category_id": 13, "area": 2083, "bbox": [16, 140, 53, 123], "iscrowd": 0}, {"id": 3211430, "category_id": 13, "area": 2658, "bbox": [210, 147, 41, 130], "iscrowd": 0}, {"id": 5767315, "category_id": 13, "area": 3815, "bbox": [239, 124, 50, 152], "iscrowd": 0}, {"id": 2302115, "category_id": 13, "area": 391, "bbox": [280, 197, 23, 30], "iscrowd": 0}, {"id": 3866784, "category_id": 13, "area": 6355, "bbox": [57, 110, 99, 176], "iscrowd": 0}, {"id": 2031785, "category_id": 13, "area": 6450, "bbox": [164, 90, 59, 204], "iscrowd": 0}, {"id": 5840028, "category_id": 13, "area": 8970, "bbox": [302, 79, 97, 161], "iscrowd": 0}, {"id": 2628753, "category_id": 13, "area": 2366, "bbox": [335, 1, 41, 91], "iscrowd": 0}, {"id": 5046444, "category_id": 13, "area": 1552, "bbox": [269, 10, 41, 86], "iscrowd": 0}, {"id": 3416986, "category_id": 13, "area": 2097, "bbox": [240, 21, 47, 80], "iscrowd": 0}, {"id": 3345574, "category_id": 13, "area": 1108, "bbox": [178, 25, 26, 76], "iscrowd": 0}, {"id": 3868298, "category_id": 13, "area": 1127, "bbox": [149, 42, 30, 73], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1464, "bbox": [122, 26, 49, 50], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 3281, "bbox": [46, 212, 114, 60], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 2425, "bbox": [92, 70, 68, 52], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 505, "bbox": [86, 2, 52, 69], "iscrowd": 0}, {"id": 16642579, "category_id": 140, "area": 577, "bbox": [287, 1, 71, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00001627", "file_name": "ADE_val_00001627.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 42581, "bbox": [0, 0, 256, 179], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 14868, "bbox": [0, 161, 256, 95], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 5294, "bbox": [2, 193, 181, 63], "iscrowd": 0}]}, {"image_id": "ADE_val_00001628", "file_name": "ADE_val_00001628.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 69279, "bbox": [0, 0, 699, 188], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 1556, "bbox": [489, 0, 97, 20], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6978, "bbox": [27, 1, 243, 241], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 123832, "bbox": [2, 78, 697, 388], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 39852, "bbox": [2, 84, 505, 282], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 107, "bbox": [483, 87, 11, 23], "iscrowd": 0}, {"id": 3145850, "category_id": 13, "area": 330, "bbox": [314, 86, 14, 35], "iscrowd": 0}, {"id": 3480998, "category_id": 13, "area": 2382, "bbox": [80, 86, 38, 102], "iscrowd": 0}, {"id": 5837474, "category_id": 13, "area": 470, "bbox": [269, 87, 18, 39], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 834, "bbox": [564, 78, 35, 33], "iscrowd": 0}, {"id": 12405504, "category_id": 21, "area": 658, "bbox": [650, 80, 49, 21], "iscrowd": 0}, {"id": 13925376, "category_id": 21, "area": 337, "bbox": [547, 80, 17, 24], "iscrowd": 0}, {"id": 12614144, "category_id": 21, "area": 350, "bbox": [628, 78, 36, 16], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 275, "bbox": [520, 45, 14, 24], "iscrowd": 0}, {"id": 10230526, "category_id": 44, "area": 1919, "bbox": [276, 3, 41, 166], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 948, "bbox": [122, 159, 15, 90], "iscrowd": 0}, {"id": 16715808, "category_id": 94, "area": 1810, "bbox": [662, 190, 24, 134], "iscrowd": 0}, {"id": 16125777, "category_id": 94, "area": 1212, "bbox": [631, 163, 18, 101], "iscrowd": 0}, {"id": 15665454, "category_id": 94, "area": 2518, "bbox": [614, 0, 17, 253], "iscrowd": 0}, {"id": 15532064, "category_id": 94, "area": 595, "bbox": [595, 131, 10, 71], "iscrowd": 0}, {"id": 15597626, "category_id": 94, "area": 355, "bbox": [584, 123, 9, 59], "iscrowd": 0}, {"id": 16711761, "category_id": 94, "area": 357, "bbox": [550, 118, 10, 52], "iscrowd": 0}, {"id": 16711721, "category_id": 94, "area": 277, "bbox": [529, 116, 8, 46], "iscrowd": 0}, {"id": 16256307, "category_id": 94, "area": 428, "bbox": [274, 124, 11, 57], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 216, "bbox": [561, 71, 27, 14], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 52, "bbox": [488, 101, 4, 17], "iscrowd": 0}, {"id": 16711692, "category_id": 137, "area": 543, "bbox": [427, 33, 12, 86], "iscrowd": 0}, {"id": 16711723, "category_id": 137, "area": 831, "bbox": [405, 21, 14, 109], "iscrowd": 0}, {"id": 15014162, "category_id": 137, "area": 236, "bbox": [560, 32, 10, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00001629", "file_name": "ADE_val_00001629.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 618, "bbox": [0, 135, 60, 14], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 68953, "bbox": [0, 0, 500, 155], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4809, "bbox": [2, 125, 301, 25], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 3793, "bbox": [2, 151, 456, 25], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 58390, "bbox": [0, 147, 499, 227], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 28244, "bbox": [25, 154, 409, 220], "iscrowd": 0}]}, {"image_id": "ADE_val_00001630", "file_name": "ADE_val_00001630.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 51717, "bbox": [0, 0, 678, 512], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9658, "bbox": [0, 407, 230, 103], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 39620, "bbox": [0, 0, 636, 154], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 172538, "bbox": [90, 77, 551, 435], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 6161, "bbox": [110, 95, 108, 72], "iscrowd": 0}, {"id": 1703680, "category_id": 42, "area": 11717, "bbox": [217, 34, 167, 119], "iscrowd": 0}, {"id": 1507072, "category_id": 42, "area": 7993, "bbox": [402, 0, 123, 98], "iscrowd": 0}, {"id": 524035, "category_id": 42, "area": 9207, "bbox": [459, 108, 158, 73], "iscrowd": 0}, {"id": 784129, "category_id": 42, "area": 3309, "bbox": [362, 138, 97, 45], "iscrowd": 0}, {"id": 3276566, "category_id": 42, "area": 1618, "bbox": [246, 171, 99, 24], "iscrowd": 0}, {"id": 2490127, "category_id": 42, "area": 1990, "bbox": [265, 290, 54, 40], "iscrowd": 0}, {"id": 1569280, "category_id": 42, "area": 1687, "bbox": [477, 225, 44, 41], "iscrowd": 0}, {"id": 1048326, "category_id": 42, "area": 8150, "bbox": [364, 190, 123, 76], "iscrowd": 0}, {"id": 2484224, "category_id": 42, "area": 5225, "bbox": [128, 347, 97, 80], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 651, "bbox": [17, 365, 45, 84], "iscrowd": 0}]}, {"image_id": "ADE_val_00001631", "file_name": "ADE_val_00001631.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 319322, "bbox": [0, 47, 509, 847], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 16166, "bbox": [87, 0, 422, 123], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 63937, "bbox": [0, 0, 509, 207], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 9631, "bbox": [0, 757, 504, 55], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 38486, "bbox": [5, 791, 500, 93], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 2084, "bbox": [107, 739, 102, 44], "iscrowd": 0}, {"id": 16740110, "category_id": 96, "area": 2008, "bbox": [229, 741, 85, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00001632", "file_name": "ADE_val_00001632.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 21215, "bbox": [2, 1, 382, 221], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5291, "bbox": [5, 72, 394, 150], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 11055, "bbox": [2, 71, 397, 151], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 29598, "bbox": [2, 5, 397, 217], "iscrowd": 0}, {"id": 16761344, "category_id": 95, "area": 17355, "bbox": [58, 1, 341, 125], "iscrowd": 0}]}, {"image_id": "ADE_val_00001633", "file_name": "ADE_val_00001633.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 36107, "bbox": [2, 0, 381, 114], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 912, "bbox": [104, 113, 89, 30], "iscrowd": 0}, {"id": 65433, "category_id": 55, "area": 24924, "bbox": [2, 114, 381, 100], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3752, "bbox": [2, 99, 110, 53], "iscrowd": 0}, {"id": 5579391, "category_id": 13, "area": 7905, "bbox": [219, 97, 163, 66], "iscrowd": 0}, {"id": 3932298, "category_id": 13, "area": 554, "bbox": [172, 102, 22, 32], "iscrowd": 0}, {"id": 5708723, "category_id": 13, "area": 833, "bbox": [8, 88, 29, 69], "iscrowd": 0}, {"id": 5243018, "category_id": 13, "area": 162, "bbox": [135, 91, 10, 27], "iscrowd": 0}, {"id": 5701788, "category_id": 13, "area": 486, "bbox": [158, 92, 16, 47], "iscrowd": 0}, {"id": 4199559, "category_id": 13, "area": 2468, "bbox": [193, 83, 35, 123], "iscrowd": 0}]}, {"image_id": "ADE_val_00001634", "file_name": "ADE_val_00001634.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 57972, "bbox": [0, 1, 299, 348], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 39339, "bbox": [0, 215, 299, 184], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5649, "bbox": [2, 0, 297, 88], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3270, "bbox": [7, 89, 39, 127], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2839, "bbox": [260, 113, 36, 127], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6820, "bbox": [145, 80, 88, 93], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1082, "bbox": [210, 1, 75, 25], "iscrowd": 0}, {"id": 1027327, "category_id": 83, "area": 54, "bbox": [143, 258, 8, 8], "iscrowd": 0}, {"id": 2013183, "category_id": 83, "area": 22, "bbox": [221, 231, 5, 5], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 820, "bbox": [70, 169, 26, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00001635", "file_name": "ADE_val_00001635.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 103309, "bbox": [0, 0, 510, 419], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12286, "bbox": [0, 436, 511, 245], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 20330, "bbox": [0, 0, 512, 290], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3216, "bbox": [31, 307, 62, 73], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 100, "bbox": [58, 180, 13, 13], "iscrowd": 0}, {"id": 3415176, "category_id": 13, "area": 26009, "bbox": [86, 403, 278, 260], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 112, "bbox": [59, 283, 16, 21], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 36949, "bbox": [0, 347, 511, 330], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 2804, "bbox": [447, 244, 42, 104], "iscrowd": 0}, {"id": 3736319, "category_id": 43, "area": 3196, "bbox": [7, 244, 38, 168], "iscrowd": 0}, {"id": 1442023, "category_id": 43, "area": 2388, "bbox": [121, 265, 26, 125], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 24312, "bbox": [0, 376, 277, 167], "iscrowd": 0}, {"id": 7930111, "category_id": 122, "area": 11310, "bbox": [0, 525, 209, 117], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 1891, "bbox": [287, 64, 34, 84], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 620, "bbox": [65, 255, 31, 38], "iscrowd": 0}]}, {"image_id": "ADE_val_00001636", "file_name": "ADE_val_00001636.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 41716, "bbox": [1, 174, 509, 316], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 30415, "bbox": [0, 1, 510, 381], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 113146, "bbox": [1, 1, 507, 535], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 2390, "bbox": [0, 486, 156, 53], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 57328, "bbox": [1, 486, 510, 196], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 524, "bbox": [490, 452, 21, 33], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 533, "bbox": [29, 450, 18, 58], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1149, "bbox": [71, 464, 78, 35], "iscrowd": 0}, {"id": 11239424, "category_id": 21, "area": 214, "bbox": [144, 461, 14, 27], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 1778, "bbox": [1, 403, 74, 30], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 141, "bbox": [85, 263, 27, 12], "iscrowd": 0}, {"id": 13369599, "category_id": 89, "area": 82869, "bbox": [149, 233, 292, 378], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 1440, "bbox": [0, 577, 26, 89], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 829, "bbox": [1, 478, 27, 64], "iscrowd": 0}]}, {"image_id": "ADE_val_00001637", "file_name": "ADE_val_00001637.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 2306, "bbox": [531, 360, 108, 35], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 156626, "bbox": [2, 0, 637, 393], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1965, "bbox": [434, 360, 114, 31], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 20849, "bbox": [2, 391, 637, 35], "iscrowd": 0}, {"id": 12105983, "category_id": 85, "area": 55406, "bbox": [208, 46, 226, 347], "iscrowd": 0}]}, {"image_id": "ADE_val_00001638", "file_name": "ADE_val_00001638.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 123724, "bbox": [104, 0, 561, 413], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25102, "bbox": [224, 380, 406, 130], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 11202, "bbox": [271, 433, 238, 76], "iscrowd": 0}, {"id": 16711833, "category_id": 118, "area": 22051, "bbox": [252, 224, 308, 233], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 24711, "bbox": [299, 247, 168, 179], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 17539, "bbox": [627, 1, 54, 508], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 33512, "bbox": [558, 1, 103, 414], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 19147, "bbox": [122, 353, 157, 158], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 58401, "bbox": [0, 0, 127, 511], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 6141, "bbox": [431, 235, 123, 107], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 1390, "bbox": [149, 320, 51, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00001639", "file_name": "ADE_val_00001639.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 176184, "bbox": [0, 17, 682, 493], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 14824, "bbox": [202, 423, 480, 89], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 39082, "bbox": [0, 0, 682, 90], "iscrowd": 0}, {"id": 16711833, "category_id": 118, "area": 38618, "bbox": [271, 278, 298, 233], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 10065, "bbox": [403, 317, 143, 111], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 13089, "bbox": [628, 55, 54, 273], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 12386, "bbox": [575, 120, 57, 329], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 31957, "bbox": [0, 276, 147, 235], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 6805, "bbox": [336, 286, 111, 97], "iscrowd": 0}, {"id": 3277055, "category_id": 109, "area": 3270, "bbox": [35, 183, 63, 105], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1605, "bbox": [2, 249, 42, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00001640", "file_name": "ADE_val_00001640.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 42069, "bbox": [0, 0, 256, 239], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8138, "bbox": [0, 209, 256, 47], "iscrowd": 0}, {"id": 16711833, "category_id": 118, "area": 9367, "bbox": [137, 114, 118, 132], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1902, "bbox": [171, 120, 43, 84], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2174, "bbox": [73, 168, 66, 61], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 354, "bbox": [100, 173, 26, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00001641", "file_name": "ADE_val_00001641.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 56846, "bbox": [0, 0, 682, 99], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 12972, "bbox": [208, 249, 329, 144], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 99605, "bbox": [0, 99, 682, 412], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 5136, "bbox": [247, 83, 434, 22], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 23412, "bbox": [75, 268, 598, 243], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 47902, "bbox": [18, 287, 664, 225], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 65738, "bbox": [0, 69, 531, 214], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4910, "bbox": [326, 299, 41, 180], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 306, "bbox": [193, 211, 18, 32], "iscrowd": 0}, {"id": 16728064, "category_id": 73, "area": 219, "bbox": [143, 209, 20, 24], "iscrowd": 0}, {"id": 16736512, "category_id": 73, "area": 711, "bbox": [233, 236, 30, 56], "iscrowd": 0}, {"id": 15617041, "category_id": 73, "area": 735, "bbox": [270, 251, 36, 52], "iscrowd": 0}, {"id": 15488279, "category_id": 73, "area": 536, "bbox": [377, 255, 27, 54], "iscrowd": 0}, {"id": 15616282, "category_id": 73, "area": 600, "bbox": [304, 240, 30, 65], "iscrowd": 0}, {"id": 15355648, "category_id": 73, "area": 370, "bbox": [325, 253, 23, 43], "iscrowd": 0}, {"id": 15030784, "category_id": 73, "area": 4055, "bbox": [80, 266, 69, 155], "iscrowd": 0}, {"id": 15288832, "category_id": 73, "area": 1655, "bbox": [139, 275, 30, 143], "iscrowd": 0}, {"id": 16400384, "category_id": 73, "area": 1141, "bbox": [99, 242, 57, 37], "iscrowd": 0}, {"id": 16725526, "category_id": 73, "area": 1045, "bbox": [146, 239, 52, 46], "iscrowd": 0}, {"id": 16726016, "category_id": 73, "area": 2957, "bbox": [166, 268, 59, 121], "iscrowd": 0}, {"id": 16532480, "category_id": 73, "area": 733, "bbox": [209, 226, 30, 71], "iscrowd": 0}, {"id": 16013824, "category_id": 73, "area": 821, "bbox": [190, 249, 37, 40], "iscrowd": 0}, {"id": 15821824, "category_id": 73, "area": 727, "bbox": [1, 215, 23, 54], "iscrowd": 0}, {"id": 16733184, "category_id": 73, "area": 3202, "bbox": [3, 337, 66, 97], "iscrowd": 0}, {"id": 15483392, "category_id": 73, "area": 3645, "bbox": [1, 269, 65, 85], "iscrowd": 0}, {"id": 16726785, "category_id": 73, "area": 1594, "bbox": [51, 325, 42, 100], "iscrowd": 0}, {"id": 16734720, "category_id": 73, "area": 731, "bbox": [345, 244, 29, 61], "iscrowd": 0}]}, {"image_id": "ADE_val_00001642", "file_name": "ADE_val_00001642.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 42356, "bbox": [0, 248, 510, 377], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 88295, "bbox": [0, 0, 510, 300], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 76711, "bbox": [157, 160, 283, 462], "iscrowd": 0}]}, {"image_id": "ADE_val_00001643", "file_name": "ADE_val_00001643.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 26555, "bbox": [2, 1, 254, 112], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 31057, "bbox": [2, 109, 254, 127], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 5347, "bbox": [0, 233, 256, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00001644", "file_name": "ADE_val_00001644.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 161856, "bbox": [0, 0, 682, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1384, "bbox": [449, 469, 52, 42], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 7617, "bbox": [347, 110, 87, 92], "iscrowd": 0}, {"id": 15131628, "category_id": 9, "area": 6660, "bbox": [216, 113, 79, 87], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 32876, "bbox": [96, 242, 226, 269], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 7840, "bbox": [10, 405, 221, 106], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 4508, "bbox": [599, 115, 83, 57], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 18080, "bbox": [494, 373, 187, 138], "iscrowd": 0}, {"id": 2810379, "category_id": 34, "area": 11779, "bbox": [31, 328, 455, 177], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 4190, "bbox": [403, 280, 59, 110], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 18541, "bbox": [210, 386, 270, 125], "iscrowd": 0}, {"id": 15675136, "category_id": 45, "area": 2958, "bbox": [29, 377, 88, 65], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 12664, "bbox": [2, 0, 185, 206], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1322, "bbox": [513, 238, 57, 25], "iscrowd": 0}, {"id": 758783, "category_id": 68, "area": 8004, "bbox": [3, 34, 120, 79], "iscrowd": 0}, {"id": 1743359, "category_id": 68, "area": 1674, "bbox": [77, 136, 41, 52], "iscrowd": 0}, {"id": 41195, "category_id": 68, "area": 4560, "bbox": [3, 118, 74, 75], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 21682, "bbox": [110, 225, 277, 159], "iscrowd": 0}]}, {"image_id": "ADE_val_00001645", "file_name": "ADE_val_00001645.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 56934, "bbox": [0, 0, 682, 206], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 91960, "bbox": [0, 141, 682, 370], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6610, "bbox": [432, 0, 250, 33], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3934, "bbox": [225, 81, 95, 74], "iscrowd": 0}, {"id": 3802256, "category_id": 13, "area": 1858, "bbox": [488, 142, 63, 61], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1184, "bbox": [446, 91, 141, 42], "iscrowd": 0}, {"id": 4718847, "category_id": 16, "area": 1834, "bbox": [309, 174, 69, 103], "iscrowd": 0}, {"id": 6291711, "category_id": 16, "area": 1493, "bbox": [547, 153, 64, 77], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 6577, "bbox": [485, 182, 95, 96], "iscrowd": 0}, {"id": 22454, "category_id": 20, "area": 12571, "bbox": [488, 373, 194, 138], "iscrowd": 0}, {"id": 13024, "category_id": 20, "area": 3276, "bbox": [48, 215, 107, 48], "iscrowd": 0}, {"id": 14310, "category_id": 20, "area": 948, "bbox": [108, 186, 35, 36], "iscrowd": 0}, {"id": 477128, "category_id": 20, "area": 2887, "bbox": [309, 186, 40, 80], "iscrowd": 0}, {"id": 14798, "category_id": 20, "area": 811, "bbox": [604, 170, 34, 43], "iscrowd": 0}, {"id": 678606, "category_id": 20, "area": 731, "bbox": [121, 149, 70, 60], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 599, "bbox": [593, 71, 89, 11], "iscrowd": 0}, {"id": 3342586, "category_id": 25, "area": 501, "bbox": [590, 124, 62, 9], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 2992, "bbox": [447, 132, 135, 62], "iscrowd": 0}, {"id": 2751232, "category_id": 34, "area": 30776, "bbox": [334, 276, 320, 234], "iscrowd": 0}, {"id": 2948867, "category_id": 34, "area": 28539, "bbox": [0, 275, 353, 235], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 501, "bbox": [497, 68, 20, 26], "iscrowd": 0}, {"id": 12837889, "category_id": 75, "area": 35718, "bbox": [143, 153, 196, 359], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 3013, "bbox": [377, 150, 67, 90], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 209, "bbox": [560, 14, 44, 7], "iscrowd": 0}, {"id": 1416176, "category_id": 83, "area": 367, "bbox": [602, 1, 57, 10], "iscrowd": 0}, {"id": 1882879, "category_id": 83, "area": 94, "bbox": [440, 11, 20, 7], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 632, "bbox": [508, 108, 40, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001646", "file_name": "ADE_val_00001646.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 11320, "bbox": [0, 0, 256, 140], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 20795, "bbox": [0, 114, 256, 142], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3043, "bbox": [33, 1, 50, 64], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2166, "bbox": [164, 1, 75, 40], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 1711, "bbox": [0, 86, 98, 41], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 2631, "bbox": [129, 109, 89, 77], "iscrowd": 0}, {"id": 5701376, "category_id": 34, "area": 5242, "bbox": [0, 108, 127, 103], "iscrowd": 0}, {"id": 4718336, "category_id": 34, "area": 479, "bbox": [15, 80, 88, 12], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 209, "bbox": [0, 56, 22, 12], "iscrowd": 0}, {"id": 911075, "category_id": 37, "area": 469, "bbox": [1, 63, 55, 21], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 283, "bbox": [40, 85, 35, 14], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 6405, "bbox": [134, 31, 116, 110], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 279, "bbox": [140, 65, 16, 23], "iscrowd": 0}, {"id": 46591, "category_id": 68, "area": 336, "bbox": [213, 80, 17, 24], "iscrowd": 0}, {"id": 438271, "category_id": 68, "area": 126, "bbox": [143, 91, 10, 13], "iscrowd": 0}, {"id": 1545471, "category_id": 68, "area": 275, "bbox": [211, 111, 17, 25], "iscrowd": 0}, {"id": 1156863, "category_id": 68, "area": 346, "bbox": [54, 121, 34, 17], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 2280, "bbox": [137, 75, 75, 97], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 3796, "bbox": [39, 141, 75, 108], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 171, "bbox": [115, 87, 9, 22], "iscrowd": 0}, {"id": 13238016, "category_id": 136, "area": 215, "bbox": [174, 8, 11, 28], "iscrowd": 0}, {"id": 13565700, "category_id": 136, "area": 182, "bbox": [183, 14, 12, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00001647", "file_name": "ADE_val_00001647.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 12518, "bbox": [0, 0, 255, 188], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3361, "bbox": [0, 175, 213, 81], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 4846, "bbox": [2, 192, 203, 63], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 5334, "bbox": [0, 113, 80, 105], "iscrowd": 0}, {"id": 16711910, "category_id": 11, "area": 2285, "bbox": [203, 89, 53, 96], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3512, "bbox": [198, 168, 57, 87], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4079, "bbox": [129, 105, 82, 116], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 679, "bbox": [64, 1, 34, 24], "iscrowd": 0}, {"id": 4918015, "category_id": 23, "area": 755, "bbox": [113, 0, 31, 26], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 11301, "bbox": [26, 25, 176, 90], "iscrowd": 0}, {"id": 2693887, "category_id": 25, "area": 745, "bbox": [219, 5, 36, 23], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 2560, "bbox": [71, 107, 114, 99], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 53, "bbox": [61, 108, 31, 6], "iscrowd": 0}, {"id": 2001151, "category_id": 68, "area": 30, "bbox": [79, 38, 7, 10], "iscrowd": 0}, {"id": 178170, "category_id": 68, "area": 124, "bbox": [69, 106, 23, 7], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 1912, "bbox": [92, 68, 65, 60], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 3434, "bbox": [37, 211, 91, 44], "iscrowd": 0}, {"id": 522065, "category_id": 113, "area": 369, "bbox": [156, 36, 30, 14], "iscrowd": 0}, {"id": 261993, "category_id": 113, "area": 161, "bbox": [55, 38, 17, 11], "iscrowd": 0}, {"id": 62803, "category_id": 113, "area": 57, "bbox": [67, 81, 8, 8], "iscrowd": 0}, {"id": 57688, "category_id": 113, "area": 118, "bbox": [54, 80, 11, 12], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 349, "bbox": [160, 1, 21, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00001648", "file_name": "ADE_val_00001648.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 24085, "bbox": [1, 0, 255, 256], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4790, "bbox": [0, 0, 254, 255], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 11358, "bbox": [15, 0, 241, 145], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 434, "bbox": [0, 186, 12, 43], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3920, "bbox": [11, 172, 84, 84], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 655, "bbox": [102, 122, 30, 22], "iscrowd": 0}, {"id": 4915427, "category_id": 23, "area": 194, "bbox": [133, 164, 13, 16], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 3375, "bbox": [110, 193, 145, 62], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 407, "bbox": [193, 235, 28, 20], "iscrowd": 0}, {"id": 655104, "category_id": 42, "area": 343, "bbox": [207, 202, 21, 27], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 216, "bbox": [115, 193, 26, 9], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 3269, "bbox": [135, 134, 87, 122], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 341, "bbox": [186, 186, 28, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001649", "file_name": "ADE_val_00001649.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 81806, "bbox": [0, 1, 399, 211], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 1085, "bbox": [0, 0, 399, 46], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 6515, "bbox": [0, 208, 230, 58], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 5244, "bbox": [85, 199, 315, 63], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 10830, "bbox": [42, 204, 358, 62], "iscrowd": 0}]}, {"image_id": "ADE_val_00001650", "file_name": "ADE_val_00001650.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 5350, "bbox": [140, 0, 210, 108], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 6908, "bbox": [0, 206, 350, 26], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 2987, "bbox": [0, 104, 342, 110], "iscrowd": 0}, {"id": 15466240, "category_id": 123, "area": 62852, "bbox": [0, 0, 350, 214], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 318, "bbox": [38, 133, 10, 43], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 2382, "bbox": [140, 13, 191, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00001651", "file_name": "ADE_val_00001651.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 53025, "bbox": [0, 1, 639, 338], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7667, "bbox": [0, 358, 70, 121], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 2583, "bbox": [0, 21, 190, 30], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 3207, "bbox": [122, 142, 72, 64], "iscrowd": 0}, {"id": 16711762, "category_id": 102, "area": 24239, "bbox": [433, 0, 206, 203], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 975, "bbox": [470, 108, 25, 81], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 3715, "bbox": [92, 61, 49, 81], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1896, "bbox": [413, 259, 45, 53], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 11795, "bbox": [86, 193, 210, 122], "iscrowd": 0}, {"id": 82943, "category_id": 19, "area": 10751, "bbox": [456, 0, 71, 185], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 976, "bbox": [337, 350, 39, 37], "iscrowd": 0}, {"id": 22490, "category_id": 20, "area": 933, "bbox": [255, 354, 31, 39], "iscrowd": 0}, {"id": 17114, "category_id": 20, "area": 636, "bbox": [468, 314, 41, 62], "iscrowd": 0}, {"id": 18917, "category_id": 20, "area": 852, "bbox": [319, 294, 30, 52], "iscrowd": 0}, {"id": 19402, "category_id": 20, "area": 482, "bbox": [268, 280, 23, 50], "iscrowd": 0}, {"id": 18368, "category_id": 20, "area": 378, "bbox": [279, 269, 21, 45], "iscrowd": 0}, {"id": 21170, "category_id": 20, "area": 369, "bbox": [293, 262, 19, 39], "iscrowd": 0}, {"id": 18636, "category_id": 20, "area": 1637, "bbox": [349, 374, 51, 55], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 2396, "bbox": [0, 137, 120, 24], "iscrowd": 0}, {"id": 15989017, "category_id": 32, "area": 11940, "bbox": [0, 189, 141, 175], "iscrowd": 0}, {"id": 13887488, "category_id": 32, "area": 1093, "bbox": [256, 138, 89, 21], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 24075, "bbox": [56, 202, 205, 276], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 26142, "bbox": [193, 0, 195, 200], "iscrowd": 0}, {"id": 2943242, "category_id": 42, "area": 8075, "bbox": [249, 53, 97, 108], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 10141, "bbox": [382, 0, 69, 188], "iscrowd": 0}, {"id": 2031841, "category_id": 43, "area": 787, "bbox": [48, 63, 16, 73], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 38, "bbox": [88, 33, 9, 5], "iscrowd": 0}, {"id": 2007807, "category_id": 83, "area": 25, "bbox": [166, 38, 7, 4], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 197, "bbox": [4, 70, 21, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00001652", "file_name": "ADE_val_00001652.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 136611, "bbox": [0, 0, 682, 510], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 53992, "bbox": [9, 346, 673, 165], "iscrowd": 0}, {"id": 16711935, "category_id": 80, "area": 136839, "bbox": [71, 15, 500, 450], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 996, "bbox": [101, 223, 19, 60], "iscrowd": 0}, {"id": 14993908, "category_id": 9, "area": 1604, "bbox": [139, 216, 24, 69], "iscrowd": 0}, {"id": 15388927, "category_id": 9, "area": 3502, "bbox": [253, 216, 77, 73], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 6678, "bbox": [153, 253, 100, 186], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 7237, "bbox": [388, 231, 49, 168], "iscrowd": 0}]}, {"image_id": "ADE_val_00001653", "file_name": "ADE_val_00001653.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 30430, "bbox": [0, 98, 331, 159], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 38990, "bbox": [0, 0, 332, 166], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 17649, "bbox": [2, 242, 281, 102], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 2354, "bbox": [271, 297, 61, 47], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 23372, "bbox": [0, 191, 332, 112], "iscrowd": 0}]}, {"image_id": "ADE_val_00001654", "file_name": "ADE_val_00001654.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 81576, "bbox": [2, 0, 338, 494], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21518, "bbox": [0, 421, 340, 107], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 18727, "bbox": [2, 0, 193, 221], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 547, "bbox": [91, 71, 16, 45], "iscrowd": 0}, {"id": 14548444, "category_id": 9, "area": 2639, "bbox": [200, 185, 44, 71], "iscrowd": 0}, {"id": 14739656, "category_id": 9, "area": 4510, "bbox": [265, 155, 63, 87], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 6816, "bbox": [75, 232, 41, 191], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 10579, "bbox": [169, 375, 165, 137], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 13098, "bbox": [0, 193, 76, 315], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1656, "bbox": [40, 209, 34, 58], "iscrowd": 0}, {"id": 38655, "category_id": 68, "area": 1854, "bbox": [3, 197, 33, 66], "iscrowd": 0}, {"id": 45050, "category_id": 68, "area": 1229, "bbox": [26, 279, 43, 36], "iscrowd": 0}, {"id": 42733, "category_id": 68, "area": 1312, "bbox": [42, 368, 30, 47], "iscrowd": 0}, {"id": 49402, "category_id": 68, "area": 957, "bbox": [2, 376, 24, 48], "iscrowd": 0}, {"id": 48356, "category_id": 68, "area": 1351, "bbox": [0, 345, 61, 29], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 382, "bbox": [69, 334, 16, 29], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 62, "bbox": [80, 237, 9, 8], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 305, "bbox": [212, 362, 26, 37], "iscrowd": 0}, {"id": 13827842, "category_id": 136, "area": 2008, "bbox": [258, 313, 40, 87], "iscrowd": 0}]}, {"image_id": "ADE_val_00001655", "file_name": "ADE_val_00001655.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 816, "bbox": [2, 186, 39, 22], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 43742, "bbox": [31, 104, 618, 148], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 89528, "bbox": [0, 0, 647, 188], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 151058, "bbox": [0, 203, 649, 245], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 3647, "bbox": [396, 133, 102, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00001656", "file_name": "ADE_val_00001656.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 82151, "bbox": [2, 19, 637, 434], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 40806, "bbox": [2, 359, 637, 120], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 24813, "bbox": [0, 0, 639, 55], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 20601, "bbox": [80, 104, 93, 276], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 7482, "bbox": [0, 365, 114, 85], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3724, "bbox": [53, 387, 125, 90], "iscrowd": 0}, {"id": 24495, "category_id": 20, "area": 4506, "bbox": [30, 313, 110, 128], "iscrowd": 0}]}, {"image_id": "ADE_val_00001657", "file_name": "ADE_val_00001657.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 40052, "bbox": [0, 1, 239, 318], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6623, "bbox": [75, 1, 147, 192], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 18775, "bbox": [0, 140, 139, 179], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 788, "bbox": [74, 49, 11, 92], "iscrowd": 0}, {"id": 3733534, "category_id": 15, "area": 535, "bbox": [183, 233, 14, 65], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 8171, "bbox": [124, 100, 75, 219], "iscrowd": 0}]}, {"image_id": "ADE_val_00001658", "file_name": "ADE_val_00001658.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 42388, "bbox": [0, 0, 200, 279], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 5504, "bbox": [20, 0, 180, 38], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5229, "bbox": [20, 27, 180, 94], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 2128, "bbox": [22, 45, 177, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00001659", "file_name": "ADE_val_00001659.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 21334, "bbox": [0, 0, 199, 152], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 5321, "bbox": [9, 0, 178, 73], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 19830, "bbox": [0, 130, 199, 105], "iscrowd": 0}]}, {"image_id": "ADE_val_00001660", "file_name": "ADE_val_00001660.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 28620, "bbox": [2, 0, 297, 130], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 29345, "bbox": [0, 59, 298, 166], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 5880, "bbox": [100, 129, 95, 96], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 339, "bbox": [151, 86, 23, 42], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 615, "bbox": [121, 106, 32, 24], "iscrowd": 0}, {"id": 51184, "category_id": 33, "area": 408, "bbox": [172, 75, 82, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00001661", "file_name": "ADE_val_00001661.png", "segments_info": [{"id": 3289680, "category_id": 4, "area": 10797, "bbox": [2, 0, 253, 80], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 27926, "bbox": [0, 33, 256, 223], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1906, "bbox": [9, 0, 37, 76], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1229, "bbox": [0, 74, 54, 59], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 2038, "bbox": [35, 81, 131, 63], "iscrowd": 0}, {"id": 12713742, "category_id": 143, "area": 5321, "bbox": [0, 157, 68, 98], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 234, "bbox": [152, 32, 21, 15], "iscrowd": 0}, {"id": 10805263, "category_id": 148, "area": 215, "bbox": [101, 45, 20, 21], "iscrowd": 0}, {"id": 13163034, "category_id": 148, "area": 216, "bbox": [80, 49, 19, 15], "iscrowd": 0}, {"id": 11249408, "category_id": 148, "area": 267, "bbox": [54, 55, 23, 20], "iscrowd": 0}, {"id": 14469896, "category_id": 148, "area": 1087, "bbox": [190, 113, 34, 53], "iscrowd": 0}, {"id": 11522076, "category_id": 148, "area": 976, "bbox": [218, 103, 35, 52], "iscrowd": 0}, {"id": 12761652, "category_id": 148, "area": 241, "bbox": [162, 111, 23, 13], "iscrowd": 0}, {"id": 13226240, "category_id": 148, "area": 425, "bbox": [193, 95, 30, 18], "iscrowd": 0}, {"id": 11580954, "category_id": 148, "area": 347, "bbox": [229, 88, 25, 17], "iscrowd": 0}, {"id": 13358869, "category_id": 148, "area": 321, "bbox": [227, 71, 24, 17], "iscrowd": 0}, {"id": 12234010, "category_id": 148, "area": 328, "bbox": [202, 78, 25, 17], "iscrowd": 0}, {"id": 13683460, "category_id": 148, "area": 390, "bbox": [163, 88, 26, 22], "iscrowd": 0}, {"id": 14662967, "category_id": 148, "area": 294, "bbox": [127, 38, 21, 31], "iscrowd": 0}, {"id": 11913003, "category_id": 148, "area": 350, "bbox": [157, 72, 27, 17], "iscrowd": 0}, {"id": 11196944, "category_id": 148, "area": 522, "bbox": [183, 67, 26, 47], "iscrowd": 0}, {"id": 11325964, "category_id": 148, "area": 1111, "bbox": [159, 124, 33, 56], "iscrowd": 0}]}, {"image_id": "ADE_val_00001662", "file_name": "ADE_val_00001662.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 212865, "bbox": [0, 1, 441, 538], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 16483, "bbox": [0, 0, 441, 130], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 23515, "bbox": [0, 531, 440, 68], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 5815, "bbox": [2, 524, 407, 29], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 158, "bbox": [310, 516, 13, 26], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 242, "bbox": [38, 516, 23, 17], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1908, "bbox": [138, 457, 79, 83], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 1480, "bbox": [409, 495, 33, 50], "iscrowd": 0}]}, {"image_id": "ADE_val_00001663", "file_name": "ADE_val_00001663.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 184643, "bbox": [0, 0, 683, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 38750, "bbox": [151, 296, 354, 215], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 15823, "bbox": [247, 0, 257, 90], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 16773, "bbox": [126, 95, 437, 417], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 5151, "bbox": [351, 307, 151, 50], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 838, "bbox": [465, 129, 39, 25], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1795, "bbox": [472, 154, 31, 141], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 16469, "bbox": [602, 25, 81, 214], "iscrowd": 0}, {"id": 14881507, "category_id": 11, "area": 12801, "bbox": [590, 353, 93, 158], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3882, "bbox": [254, 297, 69, 80], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 638, "bbox": [364, 168, 19, 34], "iscrowd": 0}, {"id": 2105087, "category_id": 23, "area": 237, "bbox": [392, 174, 21, 21], "iscrowd": 0}, {"id": 4000255, "category_id": 23, "area": 540, "bbox": [422, 168, 18, 33], "iscrowd": 0}, {"id": 3608831, "category_id": 23, "area": 1535, "bbox": [243, 118, 18, 116], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 7837, "bbox": [341, 229, 134, 85], "iscrowd": 0}, {"id": 14904351, "category_id": 24, "area": 5601, "bbox": [244, 247, 104, 112], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 5272, "bbox": [118, 107, 46, 173], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 474, "bbox": [279, 216, 29, 31], "iscrowd": 0}, {"id": 65268, "category_id": 37, "area": 1578, "bbox": [249, 231, 46, 79], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 2904, "bbox": [387, 285, 82, 51], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 2823, "bbox": [630, 306, 52, 69], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 2307, "bbox": [491, 216, 48, 73], "iscrowd": 0}, {"id": 15663359, "category_id": 126, "area": 850, "bbox": [158, 367, 40, 28], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 1028, "bbox": [165, 159, 21, 85], "iscrowd": 0}, {"id": 16714770, "category_id": 135, "area": 2622, "bbox": [94, 135, 36, 131], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 1107, "bbox": [420, 51, 82, 74], "iscrowd": 0}]}, {"image_id": "ADE_val_00001664", "file_name": "ADE_val_00001664.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 55644, "bbox": [0, 0, 499, 187], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 21983, "bbox": [2, 123, 497, 204], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 22879, "bbox": [2, 248, 497, 108], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 18435, "bbox": [72, 179, 362, 136], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 48737, "bbox": [31, 48, 413, 249], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 7307, "bbox": [0, 270, 499, 77], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 108, "bbox": [480, 247, 15, 16], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 990, "bbox": [269, 278, 76, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001665", "file_name": "ADE_val_00001665.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 103106, "bbox": [2, 7, 588, 318], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 76004, "bbox": [2, 2, 588, 267], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 59760, "bbox": [2, 286, 588, 124], "iscrowd": 0}]}, {"image_id": "ADE_val_00001666", "file_name": "ADE_val_00001666.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 9328, "bbox": [2, 1, 254, 47], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7496, "bbox": [2, 24, 254, 57], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 12768, "bbox": [0, 59, 256, 95], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 31720, "bbox": [2, 77, 254, 179], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 1011, "bbox": [0, 74, 204, 34], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 138, "bbox": [103, 72, 19, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00001667", "file_name": "ADE_val_00001667.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 64350, "bbox": [2, 1, 353, 198], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 4921, "bbox": [0, 0, 355, 120], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2195, "bbox": [0, 195, 355, 9], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 78, "bbox": [20, 123, 10, 12], "iscrowd": 0}, {"id": 16273671, "category_id": 88, "area": 81, "bbox": [93, 123, 9, 12], "iscrowd": 0}, {"id": 16734733, "category_id": 88, "area": 79, "bbox": [179, 123, 11, 12], "iscrowd": 0}, {"id": 14898176, "category_id": 88, "area": 76, "bbox": [267, 122, 10, 12], "iscrowd": 0}, {"id": 16736029, "category_id": 88, "area": 86, "bbox": [337, 122, 10, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001668", "file_name": "ADE_val_00001668.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 28377, "bbox": [0, 0, 293, 147], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 8751, "bbox": [104, 0, 189, 92], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 17505, "bbox": [2, 292, 291, 70], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 48450, "bbox": [0, 123, 293, 203], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 2282, "bbox": [2, 108, 195, 37], "iscrowd": 0}]}, {"image_id": "ADE_val_00001669", "file_name": "ADE_val_00001669.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 73209, "bbox": [0, 0, 639, 478], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2095, "bbox": [460, 418, 177, 61], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3407, "bbox": [446, 0, 179, 34], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 10233, "bbox": [534, 190, 106, 106], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 52491, "bbox": [0, 309, 542, 170], "iscrowd": 0}, {"id": 15016408, "category_id": 11, "area": 7799, "bbox": [405, 90, 93, 145], "iscrowd": 0}, {"id": 15794370, "category_id": 11, "area": 28737, "bbox": [221, 43, 187, 192], "iscrowd": 0}, {"id": 16187609, "category_id": 11, "area": 45928, "bbox": [1, 3, 224, 236], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 27581, "bbox": [349, 147, 190, 332], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 10378, "bbox": [296, 0, 149, 90], "iscrowd": 0}, {"id": 1436672, "category_id": 42, "area": 3181, "bbox": [224, 10, 104, 55], "iscrowd": 0}, {"id": 2550784, "category_id": 42, "area": 3124, "bbox": [113, 0, 123, 41], "iscrowd": 0}, {"id": 720640, "category_id": 42, "area": 1186, "bbox": [177, 339, 47, 30], "iscrowd": 0}, {"id": 2157825, "category_id": 42, "area": 1502, "bbox": [6, 331, 51, 35], "iscrowd": 0}, {"id": 65293, "category_id": 99, "area": 686, "bbox": [268, 128, 18, 47], "iscrowd": 0}, {"id": 61189, "category_id": 99, "area": 765, "bbox": [234, 124, 20, 46], "iscrowd": 0}, {"id": 61968, "category_id": 99, "area": 776, "bbox": [149, 121, 22, 44], "iscrowd": 0}, {"id": 64512, "category_id": 99, "area": 825, "bbox": [49, 110, 21, 47], "iscrowd": 0}, {"id": 2355200, "category_id": 99, "area": 1168, "bbox": [5, 102, 28, 53], "iscrowd": 0}, {"id": 1834781, "category_id": 99, "area": 590, "bbox": [330, 137, 19, 41], "iscrowd": 0}]}, {"image_id": "ADE_val_00001670", "file_name": "ADE_val_00001670.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 30211, "bbox": [0, 40, 200, 187], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 7433, "bbox": [0, 0, 200, 145], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5379, "bbox": [0, 0, 175, 73], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 5412, "bbox": [0, 222, 200, 35], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1015, "bbox": [103, 223, 96, 19], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1440, "bbox": [3, 209, 121, 18], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 114, "bbox": [68, 54, 10, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001671", "file_name": "ADE_val_00001671.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 145216, "bbox": [0, 161, 673, 350], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 157511, "bbox": [1, 1, 675, 511], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2920, "bbox": [331, 111, 108, 144], "iscrowd": 0}, {"id": 11928568, "category_id": 44, "area": 9385, "bbox": [519, 70, 120, 153], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 16968, "bbox": [507, 3, 166, 505], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 7646, "bbox": [276, 74, 259, 299], "iscrowd": 0}]}, {"image_id": "ADE_val_00001672", "file_name": "ADE_val_00001672.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 30077, "bbox": [0, 0, 280, 210], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 1645, "bbox": [79, 69, 60, 38], "iscrowd": 0}, {"id": 1224447, "category_id": 121, "area": 1812, "bbox": [137, 66, 64, 39], "iscrowd": 0}, {"id": 438501, "category_id": 121, "area": 1207, "bbox": [179, 107, 56, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001673", "file_name": "ADE_val_00001673.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 64525, "bbox": [2, 0, 261, 349], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 2953, "bbox": [227, 0, 36, 142], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 3371, "bbox": [7, 281, 256, 68], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1646, "bbox": [156, 247, 26, 101], "iscrowd": 0}, {"id": 5111955, "category_id": 13, "area": 1715, "bbox": [180, 247, 24, 102], "iscrowd": 0}, {"id": 2490514, "category_id": 13, "area": 3343, "bbox": [14, 242, 42, 107], "iscrowd": 0}, {"id": 5308574, "category_id": 13, "area": 1167, "bbox": [2, 231, 14, 115], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 653, "bbox": [240, 251, 23, 36], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 6301, "bbox": [33, 0, 171, 70], "iscrowd": 0}, {"id": 65410, "category_id": 124, "area": 3196, "bbox": [34, 180, 161, 33], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 1505, "bbox": [216, 66, 47, 65], "iscrowd": 0}]}, {"image_id": "ADE_val_00001674", "file_name": "ADE_val_00001674.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 8161, "bbox": [3, 95, 76, 149], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 94168, "bbox": [2, 0, 497, 216], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 26470, "bbox": [3, 244, 451, 85], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 19342, "bbox": [76, 198, 423, 102], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 8061, "bbox": [22, 240, 477, 89], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 394, "bbox": [240, 206, 12, 57], "iscrowd": 0}, {"id": 3482257, "category_id": 13, "area": 330, "bbox": [90, 226, 21, 26], "iscrowd": 0}, {"id": 4851088, "category_id": 13, "area": 637, "bbox": [222, 211, 28, 55], "iscrowd": 0}]}, {"image_id": "ADE_val_00001675", "file_name": "ADE_val_00001675.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 7659, "bbox": [2, 166, 545, 126], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 85924, "bbox": [2, 0, 584, 348], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 16798, "bbox": [0, 266, 545, 81], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 2165, "bbox": [364, 310, 126, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001676", "file_name": "ADE_val_00001676.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 138969, "bbox": [0, 0, 682, 269], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 17593, "bbox": [1, 243, 681, 73], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 11457, "bbox": [2, 379, 257, 131], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 71194, "bbox": [0, 342, 682, 169], "iscrowd": 0}]}, {"image_id": "ADE_val_00001677", "file_name": "ADE_val_00001677.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 60050, "bbox": [0, 0, 499, 187], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25532, "bbox": [0, 177, 499, 155], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 15211, "bbox": [0, 1, 499, 93], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 19336, "bbox": [179, 155, 320, 129], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3262, "bbox": [81, 146, 99, 49], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 586, "bbox": [181, 93, 13, 63], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 6211, "bbox": [236, 250, 144, 81], "iscrowd": 0}, {"id": 4396784, "category_id": 16, "area": 149, "bbox": [38, 169, 39, 7], "iscrowd": 0}, {"id": 5178623, "category_id": 16, "area": 126, "bbox": [33, 166, 34, 5], "iscrowd": 0}, {"id": 5246463, "category_id": 16, "area": 3292, "bbox": [132, 214, 110, 103], "iscrowd": 0}, {"id": 4394471, "category_id": 16, "area": 598, "bbox": [105, 193, 69, 17], "iscrowd": 0}, {"id": 3997942, "category_id": 16, "area": 406, "bbox": [60, 182, 72, 12], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2669, "bbox": [169, 241, 99, 90], "iscrowd": 0}, {"id": 484575, "category_id": 20, "area": 2333, "bbox": [126, 222, 47, 107], "iscrowd": 0}, {"id": 342475, "category_id": 20, "area": 588, "bbox": [37, 176, 33, 61], "iscrowd": 0}, {"id": 22987, "category_id": 20, "area": 2502, "bbox": [2, 239, 59, 91], "iscrowd": 0}, {"id": 18620, "category_id": 20, "area": 309, "bbox": [30, 176, 14, 58], "iscrowd": 0}, {"id": 15572, "category_id": 20, "area": 292, "bbox": [22, 168, 17, 50], "iscrowd": 0}, {"id": 739303, "category_id": 20, "area": 1540, "bbox": [289, 212, 54, 37], "iscrowd": 0}, {"id": 11467, "category_id": 20, "area": 3521, "bbox": [355, 239, 102, 93], "iscrowd": 0}, {"id": 19893, "category_id": 20, "area": 1297, "bbox": [202, 190, 37, 64], "iscrowd": 0}, {"id": 2117827, "category_id": 20, "area": 983, "bbox": [223, 199, 63, 92], "iscrowd": 0}, {"id": 18095, "category_id": 20, "area": 445, "bbox": [181, 186, 20, 29], "iscrowd": 0}, {"id": 153262, "category_id": 20, "area": 154, "bbox": [143, 172, 10, 23], "iscrowd": 0}, {"id": 1913064, "category_id": 20, "area": 1646, "bbox": [102, 202, 38, 88], "iscrowd": 0}, {"id": 17852, "category_id": 20, "area": 858, "bbox": [69, 188, 22, 75], "iscrowd": 0}, {"id": 874978, "category_id": 20, "area": 686, "bbox": [162, 179, 26, 37], "iscrowd": 0}, {"id": 25571, "category_id": 20, "area": 877, "bbox": [87, 197, 24, 91], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 2459, "bbox": [344, 203, 145, 127], "iscrowd": 0}, {"id": 51455, "category_id": 33, "area": 672, "bbox": [168, 173, 99, 71], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 40, "bbox": [347, 64, 18, 4], "iscrowd": 0}, {"id": 2015459, "category_id": 83, "area": 86, "bbox": [440, 49, 19, 6], "iscrowd": 0}, {"id": 49649, "category_id": 83, "area": 280, "bbox": [85, 22, 36, 12], "iscrowd": 0}, {"id": 696575, "category_id": 83, "area": 221, "bbox": [2, 20, 23, 12], "iscrowd": 0}, {"id": 43506, "category_id": 83, "area": 223, "bbox": [2, 1, 39, 7], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 1323, "bbox": [119, 120, 44, 33], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 89, "bbox": [434, 96, 6, 20], "iscrowd": 0}, {"id": 58905, "category_id": 99, "area": 57, "bbox": [428, 98, 4, 17], "iscrowd": 0}, {"id": 126720, "category_id": 99, "area": 87, "bbox": [476, 93, 5, 21], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 1373, "bbox": [369, 169, 122, 16], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 96, "bbox": [112, 85, 10, 14], "iscrowd": 0}, {"id": 65464, "category_id": 145, "area": 1695, "bbox": [218, 99, 64, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00001678", "file_name": "ADE_val_00001678.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 174584, "bbox": [0, 0, 768, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 87348, "bbox": [0, 323, 690, 187], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 77570, "bbox": [0, 0, 691, 130], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 6114, "bbox": [569, 149, 62, 118], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1302, "bbox": [223, 172, 38, 69], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1436, "bbox": [370, 247, 55, 30], "iscrowd": 0}, {"id": 16751109, "category_id": 48, "area": 865, "bbox": [194, 243, 29, 33], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 18671, "bbox": [423, 162, 157, 249], "iscrowd": 0}, {"id": 8393727, "category_id": 127, "area": 15924, "bbox": [225, 177, 131, 225], "iscrowd": 0}]}, {"image_id": "ADE_val_00001679", "file_name": "ADE_val_00001679.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 26538, "bbox": [0, 32, 414, 101], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 13426, "bbox": [22, 147, 392, 135], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 20385, "bbox": [0, 0, 414, 67], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 598, "bbox": [190, 74, 24, 41], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 324, "bbox": [355, 82, 18, 19], "iscrowd": 0}, {"id": 15326685, "category_id": 9, "area": 255, "bbox": [302, 84, 15, 18], "iscrowd": 0}, {"id": 15204334, "category_id": 9, "area": 203, "bbox": [256, 85, 13, 17], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 665, "bbox": [325, 176, 52, 38], "iscrowd": 0}, {"id": 4849803, "category_id": 13, "area": 82, "bbox": [208, 118, 14, 11], "iscrowd": 0}, {"id": 4916358, "category_id": 13, "area": 230, "bbox": [236, 132, 29, 30], "iscrowd": 0}, {"id": 3343524, "category_id": 13, "area": 313, "bbox": [219, 132, 25, 36], "iscrowd": 0}, {"id": 5184653, "category_id": 13, "area": 575, "bbox": [108, 143, 24, 53], "iscrowd": 0}, {"id": 5702043, "category_id": 13, "area": 365, "bbox": [62, 149, 36, 26], "iscrowd": 0}, {"id": 4325549, "category_id": 13, "area": 254, "bbox": [273, 130, 18, 31], "iscrowd": 0}, {"id": 3281818, "category_id": 13, "area": 219, "bbox": [303, 135, 17, 28], "iscrowd": 0}, {"id": 3935643, "category_id": 13, "area": 96, "bbox": [60, 131, 14, 14], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 653, "bbox": [167, 94, 18, 40], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 669, "bbox": [195, 171, 56, 44], "iscrowd": 0}, {"id": 5776373, "category_id": 16, "area": 944, "bbox": [269, 202, 51, 36], "iscrowd": 0}, {"id": 6226170, "category_id": 16, "area": 215, "bbox": [197, 148, 23, 26], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 687, "bbox": [181, 180, 37, 30], "iscrowd": 0}, {"id": 13287, "category_id": 20, "area": 356, "bbox": [239, 164, 29, 37], "iscrowd": 0}, {"id": 1982943, "category_id": 20, "area": 731, "bbox": [245, 178, 35, 46], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 3951, "bbox": [306, 205, 64, 75], "iscrowd": 0}, {"id": 16741888, "category_id": 24, "area": 814, "bbox": [54, 160, 84, 30], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 1061, "bbox": [148, 155, 42, 34], "iscrowd": 0}, {"id": 15597312, "category_id": 31, "area": 2320, "bbox": [57, 176, 60, 51], "iscrowd": 0}, {"id": 13041432, "category_id": 31, "area": 1108, "bbox": [30, 175, 53, 40], "iscrowd": 0}, {"id": 15073024, "category_id": 31, "area": 367, "bbox": [2, 176, 20, 28], "iscrowd": 0}, {"id": 15072256, "category_id": 31, "area": 2399, "bbox": [163, 206, 54, 61], "iscrowd": 0}, {"id": 13692945, "category_id": 31, "area": 4227, "bbox": [212, 215, 80, 67], "iscrowd": 0}, {"id": 13563924, "category_id": 31, "area": 246, "bbox": [266, 139, 26, 22], "iscrowd": 0}, {"id": 12972544, "category_id": 31, "area": 347, "bbox": [303, 139, 25, 25], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 211, "bbox": [238, 17, 14, 19], "iscrowd": 0}, {"id": 2490332, "category_id": 37, "area": 116, "bbox": [213, 69, 10, 14], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 1049, "bbox": [252, 128, 77, 22], "iscrowd": 0}, {"id": 1911551, "category_id": 39, "area": 2760, "bbox": [49, 132, 167, 43], "iscrowd": 0}, {"id": 930047, "category_id": 39, "area": 2444, "bbox": [28, 119, 141, 30], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 826, "bbox": [77, 0, 100, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001680", "file_name": "ADE_val_00001680.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 116608, "bbox": [0, 0, 599, 253], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 27210, "bbox": [4, 165, 595, 134], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 3690, "bbox": [234, 211, 241, 39], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 56731, "bbox": [0, 233, 599, 215], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 281, "bbox": [333, 282, 12, 41], "iscrowd": 0}]}, {"image_id": "ADE_val_00001681", "file_name": "ADE_val_00001681.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 2767, "bbox": [100, 96, 89, 42], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 13370, "bbox": [0, 0, 199, 138], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 14147, "bbox": [0, 1, 200, 190], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 1512, "bbox": [0, 162, 65, 37], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 2566, "bbox": [65, 157, 135, 38], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 4876, "bbox": [0, 149, 199, 51], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 52, "bbox": [37, 151, 4, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001682", "file_name": "ADE_val_00001682.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 15659, "bbox": [20, 71, 274, 113], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 13010, "bbox": [0, 0, 286, 67], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6374, "bbox": [96, 0, 199, 73], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 8879, "bbox": [0, 159, 294, 40], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 11565, "bbox": [0, 61, 295, 120], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 638, "bbox": [115, 150, 74, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00001683", "file_name": "ADE_val_00001683.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 9634, "bbox": [2, 82, 213, 123], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 33205, "bbox": [0, 0, 215, 172], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 5684, "bbox": [2, 200, 212, 31], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 169, "bbox": [12, 189, 23, 15], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 241, "bbox": [0, 171, 18, 16], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 318, "bbox": [166, 194, 29, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001684", "file_name": "ADE_val_00001684.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 15954, "bbox": [0, 49, 333, 76], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 3612, "bbox": [38, 0, 209, 40], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 19665, "bbox": [0, 0, 333, 125], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 6234, "bbox": [132, 124, 201, 125], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 13586, "bbox": [0, 98, 333, 150], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 5056, "bbox": [0, 115, 71, 134], "iscrowd": 0}, {"id": 590061, "category_id": 67, "area": 5401, "bbox": [21, 109, 74, 141], "iscrowd": 0}, {"id": 788223, "category_id": 67, "area": 12479, "bbox": [84, 127, 154, 122], "iscrowd": 0}]}, {"image_id": "ADE_val_00001685", "file_name": "ADE_val_00001685.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 69992, "bbox": [20, 18, 314, 291], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 97991, "bbox": [20, 20, 473, 364], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 109008, "bbox": [20, 367, 476, 274], "iscrowd": 0}, {"id": 11188232, "category_id": 105, "area": 53939, "bbox": [15, 398, 475, 329], "iscrowd": 0}]}, {"image_id": "ADE_val_00001686", "file_name": "ADE_val_00001686.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 13509, "bbox": [39, 0, 574, 43], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 66879, "bbox": [0, 1, 612, 132], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 86394, "bbox": [0, 130, 612, 269], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 20426, "bbox": [2, 176, 590, 172], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 56175, "bbox": [0, 158, 611, 148], "iscrowd": 0}]}, {"image_id": "ADE_val_00001687", "file_name": "ADE_val_00001687.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 73824, "bbox": [2, 3, 458, 364], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 37242, "bbox": [0, 1, 455, 246], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 42499, "bbox": [2, 0, 458, 268], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 12343, "bbox": [0, 260, 460, 107], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 261, "bbox": [218, 137, 15, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00001688", "file_name": "ADE_val_00001688.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 36237, "bbox": [0, 0, 400, 297], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9428, "bbox": [0, 287, 399, 28], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 459, "bbox": [260, 250, 16, 29], "iscrowd": 0}, {"id": 1507098, "category_id": 42, "area": 316, "bbox": [77, 61, 14, 26], "iscrowd": 0}, {"id": 2293525, "category_id": 42, "area": 480, "bbox": [90, 60, 20, 26], "iscrowd": 0}, {"id": 2155520, "category_id": 42, "area": 205, "bbox": [118, 69, 13, 17], "iscrowd": 0}, {"id": 2490112, "category_id": 42, "area": 162, "bbox": [131, 69, 11, 17], "iscrowd": 0}, {"id": 1961984, "category_id": 42, "area": 245, "bbox": [146, 65, 14, 20], "iscrowd": 0}, {"id": 65280, "category_id": 42, "area": 416, "bbox": [99, 230, 31, 15], "iscrowd": 0}, {"id": 2555648, "category_id": 42, "area": 1831, "bbox": [158, 57, 68, 29], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 866, "bbox": [84, 257, 44, 24], "iscrowd": 0}, {"id": 57856, "category_id": 99, "area": 206, "bbox": [258, 213, 8, 29], "iscrowd": 0}, {"id": 64770, "category_id": 99, "area": 421, "bbox": [267, 210, 19, 30], "iscrowd": 0}, {"id": 1244687, "category_id": 99, "area": 752, "bbox": [245, 132, 30, 33], "iscrowd": 0}, {"id": 1965824, "category_id": 99, "area": 191, "bbox": [102, 139, 9, 27], "iscrowd": 0}, {"id": 60160, "category_id": 99, "area": 127, "bbox": [116, 139, 6, 26], "iscrowd": 0}, {"id": 65292, "category_id": 99, "area": 123, "bbox": [228, 64, 7, 20], "iscrowd": 0}, {"id": 524032, "category_id": 99, "area": 112, "bbox": [235, 63, 7, 21], "iscrowd": 0}, {"id": 1507086, "category_id": 99, "area": 109, "bbox": [131, 219, 6, 24], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 708, "bbox": [250, 184, 43, 18], "iscrowd": 0}, {"id": 65347, "category_id": 113, "area": 350, "bbox": [294, 188, 26, 14], "iscrowd": 0}, {"id": 851834, "category_id": 113, "area": 433, "bbox": [106, 189, 29, 16], "iscrowd": 0}, {"id": 1109881, "category_id": 113, "area": 568, "bbox": [69, 106, 37, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00001689", "file_name": "ADE_val_00001689.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 136293, "bbox": [0, 2, 683, 349], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 37727, "bbox": [0, 0, 682, 132], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 15244, "bbox": [3, 0, 286, 143], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 48763, "bbox": [0, 331, 682, 180], "iscrowd": 0}, {"id": 65311, "category_id": 52, "area": 11944, "bbox": [419, 272, 263, 61], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 7106, "bbox": [1, 398, 88, 113], "iscrowd": 0}, {"id": 2752639, "category_id": 13, "area": 8192, "bbox": [85, 383, 98, 128], "iscrowd": 0}, {"id": 2433184, "category_id": 13, "area": 1027, "bbox": [151, 345, 19, 77], "iscrowd": 0}, {"id": 4003450, "category_id": 13, "area": 1010, "bbox": [169, 343, 18, 79], "iscrowd": 0}, {"id": 5832856, "category_id": 13, "area": 1052, "bbox": [187, 342, 20, 82], "iscrowd": 0}, {"id": 3215281, "category_id": 13, "area": 785, "bbox": [205, 345, 21, 55], "iscrowd": 0}, {"id": 5046447, "category_id": 13, "area": 578, "bbox": [267, 344, 19, 47], "iscrowd": 0}, {"id": 2492555, "category_id": 13, "area": 331, "bbox": [239, 346, 16, 30], "iscrowd": 0}, {"id": 4200326, "category_id": 13, "area": 337, "bbox": [226, 343, 18, 29], "iscrowd": 0}, {"id": 3345793, "category_id": 13, "area": 688, "bbox": [284, 345, 17, 60], "iscrowd": 0}, {"id": 5112500, "category_id": 13, "area": 778, "bbox": [299, 346, 23, 54], "iscrowd": 0}, {"id": 2556025, "category_id": 13, "area": 579, "bbox": [319, 345, 19, 44], "iscrowd": 0}, {"id": 2694804, "category_id": 13, "area": 1043, "bbox": [337, 345, 22, 73], "iscrowd": 0}, {"id": 2955159, "category_id": 13, "area": 512, "bbox": [358, 346, 18, 49], "iscrowd": 0}, {"id": 5378205, "category_id": 13, "area": 347, "bbox": [376, 346, 17, 29], "iscrowd": 0}, {"id": 2823324, "category_id": 13, "area": 354, "bbox": [391, 344, 19, 29], "iscrowd": 0}, {"id": 4659608, "category_id": 13, "area": 674, "bbox": [251, 355, 40, 58], "iscrowd": 0}, {"id": 2359430, "category_id": 13, "area": 921, "bbox": [17, 320, 21, 78], "iscrowd": 0}, {"id": 2164374, "category_id": 13, "area": 107, "bbox": [388, 316, 6, 21], "iscrowd": 0}, {"id": 4788390, "category_id": 13, "area": 333, "bbox": [415, 331, 15, 41], "iscrowd": 0}, {"id": 4325497, "category_id": 13, "area": 104, "bbox": [237, 319, 7, 22], "iscrowd": 0}, {"id": 5054349, "category_id": 13, "area": 91, "bbox": [229, 320, 6, 21], "iscrowd": 0}, {"id": 5310891, "category_id": 13, "area": 765, "bbox": [50, 321, 35, 48], "iscrowd": 0}, {"id": 2228395, "category_id": 13, "area": 292, "bbox": [73, 329, 20, 34], "iscrowd": 0}, {"id": 3278206, "category_id": 13, "area": 126, "bbox": [116, 319, 7, 25], "iscrowd": 0}, {"id": 4135846, "category_id": 13, "area": 330, "bbox": [516, 343, 13, 42], "iscrowd": 0}, {"id": 3735688, "category_id": 13, "area": 78, "bbox": [396, 318, 5, 21], "iscrowd": 0}, {"id": 4785272, "category_id": 13, "area": 100, "bbox": [410, 315, 6, 23], "iscrowd": 0}, {"id": 4456601, "category_id": 13, "area": 99, "bbox": [471, 316, 7, 23], "iscrowd": 0}, {"id": 5505173, "category_id": 13, "area": 55, "bbox": [344, 309, 8, 13], "iscrowd": 0}, {"id": 2162868, "category_id": 13, "area": 3036, "bbox": [442, 317, 71, 132], "iscrowd": 0}, {"id": 4456574, "category_id": 13, "area": 2232, "bbox": [518, 316, 56, 80], "iscrowd": 0}, {"id": 3933354, "category_id": 13, "area": 67, "bbox": [331, 309, 6, 18], "iscrowd": 0}, {"id": 3867291, "category_id": 13, "area": 2197, "bbox": [578, 309, 68, 87], "iscrowd": 0}, {"id": 4984978, "category_id": 13, "area": 47, "bbox": [356, 308, 7, 15], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 119, "bbox": [123, 299, 7, 44], "iscrowd": 0}, {"id": 16735256, "category_id": 88, "area": 62, "bbox": [177, 302, 5, 34], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 6885, "bbox": [658, 0, 24, 509], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 2957, "bbox": [356, 355, 114, 92], "iscrowd": 0}, {"id": 8062463, "category_id": 127, "area": 4894, "bbox": [512, 373, 98, 135], "iscrowd": 0}, {"id": 6226175, "category_id": 127, "area": 2657, "bbox": [1, 362, 96, 83], "iscrowd": 0}, {"id": 7735295, "category_id": 127, "area": 614, "bbox": [577, 335, 22, 47], "iscrowd": 0}, {"id": 9502961, "category_id": 127, "area": 1915, "bbox": [65, 359, 64, 86], "iscrowd": 0}, {"id": 6619391, "category_id": 127, "area": 9348, "bbox": [413, 351, 138, 158], "iscrowd": 0}, {"id": 8782075, "category_id": 127, "area": 187, "bbox": [327, 317, 17, 23], "iscrowd": 0}, {"id": 7930111, "category_id": 127, "area": 135, "bbox": [344, 316, 10, 23], "iscrowd": 0}, {"id": 9830655, "category_id": 127, "area": 196, "bbox": [353, 315, 19, 24], "iscrowd": 0}, {"id": 9240813, "category_id": 127, "area": 4458, "bbox": [601, 353, 71, 154], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 106, "bbox": [599, 71, 5, 60], "iscrowd": 0}, {"id": 16712275, "category_id": 150, "area": 14733, "bbox": [498, 1, 118, 233], "iscrowd": 0}, {"id": 16719477, "category_id": 150, "area": 241, "bbox": [616, 67, 6, 88], "iscrowd": 0}]}, {"image_id": "ADE_val_00001690", "file_name": "ADE_val_00001690.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 1993, "bbox": [156, 189, 93, 48], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 82323, "bbox": [1, 1, 680, 212], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 105401, "bbox": [1, 1, 681, 330], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 132104, "bbox": [1, 276, 682, 235], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 847, "bbox": [367, 267, 88, 25], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 12283, "bbox": [320, 431, 363, 80], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 302, "bbox": [164, 319, 42, 20], "iscrowd": 0}, {"id": 5309838, "category_id": 13, "area": 158, "bbox": [209, 307, 12, 19], "iscrowd": 0}, {"id": 4198301, "category_id": 13, "area": 136, "bbox": [225, 307, 10, 19], "iscrowd": 0}, {"id": 4855476, "category_id": 13, "area": 175, "bbox": [324, 284, 8, 34], "iscrowd": 0}, {"id": 4325532, "category_id": 13, "area": 225, "bbox": [336, 287, 12, 31], "iscrowd": 0}, {"id": 5767296, "category_id": 13, "area": 171, "bbox": [457, 285, 10, 27], "iscrowd": 0}, {"id": 4587646, "category_id": 13, "area": 157, "bbox": [470, 285, 9, 28], "iscrowd": 0}, {"id": 3541682, "category_id": 13, "area": 156, "bbox": [494, 307, 27, 15], "iscrowd": 0}, {"id": 3211442, "category_id": 13, "area": 151, "bbox": [297, 278, 9, 27], "iscrowd": 0}, {"id": 4594851, "category_id": 13, "area": 108, "bbox": [165, 298, 12, 15], "iscrowd": 0}, {"id": 2622356, "category_id": 13, "area": 133, "bbox": [236, 313, 19, 12], "iscrowd": 0}, {"id": 2956172, "category_id": 13, "area": 102, "bbox": [48, 303, 10, 16], "iscrowd": 0}, {"id": 2103937, "category_id": 13, "area": 98, "bbox": [30, 308, 13, 12], "iscrowd": 0}, {"id": 5708670, "category_id": 13, "area": 85, "bbox": [107, 299, 17, 13], "iscrowd": 0}, {"id": 4063383, "category_id": 13, "area": 122, "bbox": [435, 309, 11, 16], "iscrowd": 0}, {"id": 3866761, "category_id": 13, "area": 135, "bbox": [518, 305, 15, 17], "iscrowd": 0}, {"id": 2097292, "category_id": 13, "area": 105, "bbox": [559, 309, 9, 20], "iscrowd": 0}, {"id": 3089051, "category_id": 13, "area": 190, "bbox": [565, 311, 22, 19], "iscrowd": 0}, {"id": 2237106, "category_id": 13, "area": 122, "bbox": [660, 301, 14, 24], "iscrowd": 0}, {"id": 3022995, "category_id": 13, "area": 295, "bbox": [666, 300, 16, 31], "iscrowd": 0}, {"id": 3670150, "category_id": 13, "area": 51, "bbox": [154, 300, 8, 9], "iscrowd": 0}, {"id": 3611049, "category_id": 13, "area": 81, "bbox": [143, 298, 13, 15], "iscrowd": 0}, {"id": 4064120, "category_id": 13, "area": 21, "bbox": [154, 279, 5, 8], "iscrowd": 0}, {"id": 2366367, "category_id": 13, "area": 116, "bbox": [129, 309, 14, 12], "iscrowd": 0}, {"id": 5706675, "category_id": 13, "area": 49, "bbox": [31, 302, 12, 11], "iscrowd": 0}, {"id": 4003982, "category_id": 13, "area": 60, "bbox": [351, 278, 6, 17], "iscrowd": 0}, {"id": 2688150, "category_id": 13, "area": 174, "bbox": [414, 310, 21, 15], "iscrowd": 0}, {"id": 2031768, "category_id": 13, "area": 237, "bbox": [378, 322, 39, 9], "iscrowd": 0}, {"id": 4328584, "category_id": 13, "area": 43, "bbox": [466, 272, 5, 14], "iscrowd": 0}, {"id": 2359449, "category_id": 13, "area": 78, "bbox": [657, 284, 4, 29], "iscrowd": 0}, {"id": 5184143, "category_id": 13, "area": 66, "bbox": [661, 291, 5, 19], "iscrowd": 0}, {"id": 3280274, "category_id": 13, "area": 29, "bbox": [672, 290, 5, 9], "iscrowd": 0}, {"id": 3541884, "category_id": 13, "area": 37, "bbox": [389, 277, 4, 13], "iscrowd": 0}, {"id": 5767348, "category_id": 13, "area": 77, "bbox": [256, 286, 14, 12], "iscrowd": 0}, {"id": 5118105, "category_id": 13, "area": 20, "bbox": [223, 283, 3, 8], "iscrowd": 0}, {"id": 2430894, "category_id": 13, "area": 20, "bbox": [219, 285, 4, 6], "iscrowd": 0}, {"id": 3282558, "category_id": 13, "area": 56, "bbox": [135, 303, 13, 12], "iscrowd": 0}, {"id": 2228383, "category_id": 13, "area": 48, "bbox": [241, 298, 6, 10], "iscrowd": 0}, {"id": 3801231, "category_id": 13, "area": 61, "bbox": [251, 297, 10, 13], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 193, "bbox": [235, 292, 33, 10], "iscrowd": 0}, {"id": 1703874, "category_id": 70, "area": 128, "bbox": [588, 314, 30, 13], "iscrowd": 0}, {"id": 1767609, "category_id": 70, "area": 39, "bbox": [662, 325, 15, 7], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 3326, "bbox": [628, 92, 45, 281], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 108, "bbox": [624, 278, 8, 33], "iscrowd": 0}, {"id": 16318534, "category_id": 94, "area": 1, "bbox": [193, 296, 1, 1], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 69, "bbox": [201, 293, 7, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00001691", "file_name": "ADE_val_00001691.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 26869, "bbox": [0, 0, 682, 119], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 46977, "bbox": [1, 1, 669, 151], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 246712, "bbox": [0, 102, 681, 409], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 15343, "bbox": [2, 184, 678, 73], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1238, "bbox": [61, 122, 52, 62], "iscrowd": 0}, {"id": 2359444, "category_id": 13, "area": 881, "bbox": [47, 118, 43, 64], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 1300, "bbox": [2, 137, 34, 47], "iscrowd": 0}, {"id": 914599, "category_id": 70, "area": 2491, "bbox": [56, 138, 96, 48], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 704, "bbox": [375, 64, 20, 84], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 252, "bbox": [9, 73, 13, 46], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1138, "bbox": [183, 140, 30, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00001692", "file_name": "ADE_val_00001692.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 3641, "bbox": [63, 23, 96, 127], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 193262, "bbox": [2, 0, 678, 456], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 80698, "bbox": [2, 246, 678, 265], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 55840, "bbox": [34, 256, 417, 254], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1436, "bbox": [454, 299, 73, 45], "iscrowd": 0}, {"id": 4718772, "category_id": 13, "area": 716, "bbox": [390, 274, 42, 49], "iscrowd": 0}, {"id": 2097325, "category_id": 13, "area": 244, "bbox": [142, 288, 21, 23], "iscrowd": 0}, {"id": 2425010, "category_id": 13, "area": 263, "bbox": [404, 273, 29, 25], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 99, "bbox": [402, 284, 14, 12], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 189, "bbox": [385, 291, 28, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00001693", "file_name": "ADE_val_00001693.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 15830, "bbox": [0, 0, 682, 111], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 268197, "bbox": [2, 0, 756, 394], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 97927, "bbox": [0, 366, 759, 145], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 784, "bbox": [457, 359, 60, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00001694", "file_name": "ADE_val_00001694.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 36066, "bbox": [0, 119, 499, 246], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 58956, "bbox": [0, 183, 499, 191], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 79928, "bbox": [2, 0, 496, 200], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 250, "bbox": [180, 183, 23, 16], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 223, "bbox": [460, 200, 9, 28], "iscrowd": 0}, {"id": 3932387, "category_id": 43, "area": 400, "bbox": [439, 196, 14, 34], "iscrowd": 0}, {"id": 1310975, "category_id": 43, "area": 741, "bbox": [398, 188, 22, 47], "iscrowd": 0}, {"id": 3080447, "category_id": 43, "area": 2318, "bbox": [321, 175, 36, 73], "iscrowd": 0}, {"id": 4653311, "category_id": 43, "area": 5734, "bbox": [202, 156, 58, 115], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 195, "bbox": [469, 131, 30, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00001695", "file_name": "ADE_val_00001695.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 153247, "bbox": [1, 1, 682, 417], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 34207, "bbox": [1, 0, 374, 182], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 59169, "bbox": [0, 337, 683, 175], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 29951, "bbox": [12, 256, 670, 164], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 61309, "bbox": [87, 273, 423, 204], "iscrowd": 0}, {"id": 14572032, "category_id": 21, "area": 1891, "bbox": [0, 292, 50, 47], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 488, "bbox": [487, 234, 18, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00001696", "file_name": "ADE_val_00001696.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 49519, "bbox": [0, 0, 683, 108], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 260825, "bbox": [1, 65, 682, 447], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1105, "bbox": [626, 26, 28, 54], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 27163, "bbox": [63, 38, 276, 142], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 418, "bbox": [612, 55, 60, 54], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 152, "bbox": [464, 89, 17, 11], "iscrowd": 0}, {"id": 655122, "category_id": 42, "area": 139, "bbox": [448, 87, 15, 11], "iscrowd": 0}, {"id": 59911, "category_id": 42, "area": 62, "bbox": [444, 82, 12, 13], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 222, "bbox": [647, 81, 31, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00001697", "file_name": "ADE_val_00001697.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 130156, "bbox": [0, 0, 739, 492], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 33519, "bbox": [50, 231, 688, 261], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 19463, "bbox": [74, 1, 664, 54], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 54140, "bbox": [59, 323, 680, 168], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 6014, "bbox": [184, 189, 115, 136], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 16868, "bbox": [656, 32, 83, 291], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 11685, "bbox": [39, 258, 91, 199], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 23242, "bbox": [139, 55, 189, 392], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4835, "bbox": [629, 246, 76, 133], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1310, "bbox": [607, 116, 37, 37], "iscrowd": 0}, {"id": 4987632, "category_id": 23, "area": 741, "bbox": [627, 159, 29, 27], "iscrowd": 0}, {"id": 4653311, "category_id": 23, "area": 678, "bbox": [594, 158, 27, 29], "iscrowd": 0}, {"id": 4456703, "category_id": 23, "area": 2348, "bbox": [486, 122, 50, 49], "iscrowd": 0}, {"id": 1376511, "category_id": 23, "area": 4041, "bbox": [410, 110, 70, 66], "iscrowd": 0}, {"id": 4391167, "category_id": 23, "area": 3931, "bbox": [333, 113, 69, 62], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 4596, "bbox": [683, 275, 55, 146], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1123, "bbox": [355, 183, 26, 71], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 3773, "bbox": [184, 136, 113, 165], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 874, "bbox": [523, 160, 30, 52], "iscrowd": 0}, {"id": 983551, "category_id": 67, "area": 1128, "bbox": [61, 203, 49, 36], "iscrowd": 0}, {"id": 511, "category_id": 67, "area": 1843, "bbox": [407, 161, 93, 62], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 6575, "bbox": [441, 307, 147, 98], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 324, "bbox": [532, 208, 14, 34], "iscrowd": 0}, {"id": 13952512, "category_id": 136, "area": 793, "bbox": [69, 233, 26, 38], "iscrowd": 0}, {"id": 12708096, "category_id": 136, "area": 654, "bbox": [451, 207, 16, 42], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 2297, "bbox": [567, 218, 62, 129], "iscrowd": 0}]}, {"image_id": "ADE_val_00001698", "file_name": "ADE_val_00001698.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 165945, "bbox": [0, 0, 681, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 3092, "bbox": [166, 470, 378, 41], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7389, "bbox": [542, 445, 140, 66], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 28906, "bbox": [196, 1, 236, 292], "iscrowd": 0}, {"id": 10495, "category_id": 19, "area": 41908, "bbox": [213, 37, 207, 300], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 5080, "bbox": [468, 129, 74, 73], "iscrowd": 0}, {"id": 1641727, "category_id": 23, "area": 1466, "bbox": [97, 147, 30, 52], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 12665, "bbox": [2, 31, 73, 244], "iscrowd": 0}, {"id": 15651297, "category_id": 28, "area": 6266, "bbox": [602, 312, 72, 160], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 24145, "bbox": [134, 288, 159, 223], "iscrowd": 0}, {"id": 12643840, "category_id": 31, "area": 22402, "bbox": [364, 295, 164, 216], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2304, "bbox": [298, 138, 44, 280], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 5690, "bbox": [216, 454, 217, 57], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 2678, "bbox": [293, 394, 44, 116], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 2957, "bbox": [560, 254, 89, 113], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 726, "bbox": [542, 260, 34, 40], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 2200, "bbox": [267, 466, 106, 44], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 10133, "bbox": [534, 295, 100, 200], "iscrowd": 0}]}, {"image_id": "ADE_val_00001699", "file_name": "ADE_val_00001699.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 82143, "bbox": [0, 0, 682, 262], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 102766, "bbox": [0, 262, 614, 249], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 4923, "bbox": [0, 217, 72, 105], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 706, "bbox": [585, 41, 18, 45], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 661, "bbox": [664, 353, 18, 46], "iscrowd": 0}, {"id": 5776639, "category_id": 16, "area": 1762, "bbox": [513, 227, 107, 75], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 16461, "bbox": [285, 20, 103, 177], "iscrowd": 0}, {"id": 9215, "category_id": 19, "area": 6487, "bbox": [251, 18, 44, 179], "iscrowd": 0}, {"id": 404974, "category_id": 19, "area": 6951, "bbox": [382, 18, 45, 179], "iscrowd": 0}, {"id": 9977, "category_id": 19, "area": 2347, "bbox": [102, 17, 23, 182], "iscrowd": 0}, {"id": 18678, "category_id": 19, "area": 5588, "bbox": [67, 11, 42, 193], "iscrowd": 0}, {"id": 14584, "category_id": 19, "area": 7052, "bbox": [34, 0, 58, 305], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 323, "bbox": [167, 73, 420, 157], "iscrowd": 0}, {"id": 3154401, "category_id": 23, "area": 2672, "bbox": [168, 73, 51, 55], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 16341, "bbox": [528, 215, 155, 192], "iscrowd": 0}, {"id": 16740103, "category_id": 24, "area": 21083, "bbox": [178, 193, 299, 94], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 3708, "bbox": [467, 171, 45, 99], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 18022, "bbox": [492, 376, 191, 136], "iscrowd": 0}, {"id": 12118016, "category_id": 31, "area": 1648, "bbox": [0, 462, 198, 49], "iscrowd": 0}, {"id": 13825315, "category_id": 31, "area": 12580, "bbox": [82, 196, 135, 139], "iscrowd": 0}, {"id": 16056078, "category_id": 31, "area": 7821, "bbox": [0, 278, 102, 171], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 5193, "bbox": [566, 86, 63, 157], "iscrowd": 0}, {"id": 2358517, "category_id": 37, "area": 4263, "bbox": [5, 84, 61, 148], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 3536, "bbox": [621, 260, 60, 87], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 10023, "bbox": [390, 288, 143, 128], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 1310, "bbox": [475, 60, 26, 90], "iscrowd": 0}]}, {"image_id": "ADE_val_00001700", "file_name": "ADE_val_00001700.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 927, "bbox": [8, 65, 247, 35], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9661, "bbox": [0, 0, 256, 60], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 40785, "bbox": [0, 74, 255, 181], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 9244, "bbox": [0, 27, 256, 53], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 149, "bbox": [189, 82, 15, 11], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 785, "bbox": [205, 79, 51, 22], "iscrowd": 0}, {"id": 697855, "category_id": 33, "area": 1649, "bbox": [0, 82, 189, 28], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 1257, "bbox": [21, 189, 55, 41], "iscrowd": 0}, {"id": 9371903, "category_id": 127, "area": 66, "bbox": [81, 111, 13, 10], "iscrowd": 0}, {"id": 8586239, "category_id": 127, "area": 92, "bbox": [97, 123, 15, 9], "iscrowd": 0}, {"id": 7012589, "category_id": 127, "area": 73, "bbox": [107, 134, 15, 8], "iscrowd": 0}, {"id": 9047277, "category_id": 127, "area": 87, "bbox": [124, 119, 13, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00001701", "file_name": "ADE_val_00001701.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 72942, "bbox": [0, 0, 682, 117], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 8784, "bbox": [291, 102, 317, 133], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 27750, "bbox": [0, 122, 681, 53], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 237212, "bbox": [0, 105, 682, 406], "iscrowd": 0}]}, {"image_id": "ADE_val_00001702", "file_name": "ADE_val_00001702.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 35797, "bbox": [0, 0, 682, 81], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 11480, "bbox": [1, 23, 681, 184], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 170304, "bbox": [0, 174, 682, 337], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 77581, "bbox": [0, 45, 682, 154], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 3320, "bbox": [607, 256, 75, 71], "iscrowd": 0}, {"id": 1114340, "category_id": 67, "area": 6315, "bbox": [462, 184, 219, 51], "iscrowd": 0}, {"id": 6655, "category_id": 67, "area": 1725, "bbox": [361, 221, 69, 34], "iscrowd": 0}, {"id": 393983, "category_id": 67, "area": 1582, "bbox": [102, 251, 95, 28], "iscrowd": 0}, {"id": 721151, "category_id": 67, "area": 11238, "bbox": [0, 191, 309, 58], "iscrowd": 0}, {"id": 853498, "category_id": 67, "area": 2631, "bbox": [301, 188, 142, 31], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 940, "bbox": [521, 323, 14, 76], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 8254, "bbox": [425, 230, 180, 124], "iscrowd": 0}, {"id": 9573631, "category_id": 127, "area": 11378, "bbox": [297, 226, 213, 137], "iscrowd": 0}, {"id": 8520951, "category_id": 127, "area": 1818, "bbox": [466, 220, 152, 137], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 4039, "bbox": [53, 157, 178, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00001703", "file_name": "ADE_val_00001703.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 526, "bbox": [567, 149, 32, 27], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 69, "bbox": [386, 193, 110, 15], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 16197, "bbox": [464, 0, 135, 150], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 132677, "bbox": [2, 155, 595, 323], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 12044, "bbox": [2, 89, 596, 119], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 80491, "bbox": [2, 0, 491, 206], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2213, "bbox": [258, 145, 57, 66], "iscrowd": 0}, {"id": 2108358, "category_id": 20, "area": 1751, "bbox": [344, 152, 47, 71], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 865, "bbox": [65, 143, 30, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00001704", "file_name": "ADE_val_00001704.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 26039, "bbox": [2, 0, 795, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 84542, "bbox": [22, 261, 750, 250], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 1730, "bbox": [159, 194, 37, 107], "iscrowd": 0}, {"id": 16634881, "category_id": 111, "area": 5296, "bbox": [342, 237, 67, 164], "iscrowd": 0}, {"id": 16697344, "category_id": 111, "area": 20552, "bbox": [563, 282, 215, 229], "iscrowd": 0}]}, {"image_id": "ADE_val_00001705", "file_name": "ADE_val_00001705.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 2534, "bbox": [178, 152, 122, 26], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 26030, "bbox": [0, 34, 300, 136], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 20294, "bbox": [0, 0, 300, 109], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 687, "bbox": [0, 76, 35, 33], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 5804, "bbox": [0, 173, 300, 27], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1299, "bbox": [58, 138, 52, 35], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 2865, "bbox": [0, 161, 178, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00001706", "file_name": "ADE_val_00001706.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 15371, "bbox": [14, 109, 384, 181], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 42315, "bbox": [14, 15, 487, 230], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 43076, "bbox": [259, 14, 241, 233], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 43, "bbox": [11, 330, 2, 24], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 179820, "bbox": [12, 277, 485, 385], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 18725, "bbox": [54, 239, 445, 61], "iscrowd": 0}]}, {"image_id": "ADE_val_00001707", "file_name": "ADE_val_00001707.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 396, "bbox": [233, 148, 67, 35], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 24763, "bbox": [0, 0, 300, 105], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1180, "bbox": [45, 83, 217, 53], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 17845, "bbox": [0, 124, 300, 100], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 10581, "bbox": [0, 64, 300, 65], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 6483, "bbox": [0, 136, 297, 46], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 3072, "bbox": [0, 153, 300, 50], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 117, "bbox": [119, 115, 13, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00001708", "file_name": "ADE_val_00001708.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 85901, "bbox": [0, 69, 682, 240], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 105112, "bbox": [1, 215, 681, 296], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 55870, "bbox": [0, 1, 682, 91], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 47723, "bbox": [64, 275, 419, 202], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1933, "bbox": [490, 465, 96, 45], "iscrowd": 0}, {"id": 17849, "category_id": 20, "area": 7280, "bbox": [520, 396, 128, 102], "iscrowd": 0}, {"id": 24263, "category_id": 20, "area": 3674, "bbox": [576, 350, 92, 71], "iscrowd": 0}, {"id": 23754, "category_id": 20, "area": 1060, "bbox": [628, 295, 54, 43], "iscrowd": 0}, {"id": 15567, "category_id": 20, "area": 1737, "bbox": [616, 321, 65, 46], "iscrowd": 0}, {"id": 810471, "category_id": 20, "area": 307, "bbox": [661, 250, 21, 23], "iscrowd": 0}, {"id": 24772, "category_id": 20, "area": 376, "bbox": [654, 266, 28, 24], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 3678, "bbox": [1, 180, 65, 133], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 3633, "bbox": [95, 234, 82, 60], "iscrowd": 0}, {"id": 1507072, "category_id": 42, "area": 787, "bbox": [1, 229, 38, 26], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 295, "bbox": [1, 166, 22, 24], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 408, "bbox": [137, 20, 42, 13], "iscrowd": 0}, {"id": 46561, "category_id": 83, "area": 70, "bbox": [514, 80, 16, 5], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 1307, "bbox": [49, 270, 58, 41], "iscrowd": 0}]}, {"image_id": "ADE_val_00001709", "file_name": "ADE_val_00001709.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 16176, "bbox": [86, 0, 374, 107], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 247918, "bbox": [0, 0, 682, 511], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3287, "bbox": [637, 99, 44, 192], "iscrowd": 0}, {"id": 5767327, "category_id": 13, "area": 14281, "bbox": [402, 177, 219, 111], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 19226, "bbox": [0, 1, 140, 232], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1165, "bbox": [29, 81, 58, 36], "iscrowd": 0}, {"id": 1288703, "category_id": 68, "area": 1615, "bbox": [51, 45, 52, 45], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 13102, "bbox": [372, 7, 107, 131], "iscrowd": 0}, {"id": 3348735, "category_id": 109, "area": 22925, "bbox": [95, 85, 174, 176], "iscrowd": 0}]}, {"image_id": "ADE_val_00001710", "file_name": "ADE_val_00001710.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 96971, "bbox": [1, 79, 681, 352], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 124350, "bbox": [0, 0, 683, 263], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 27575, "bbox": [1, 256, 681, 154], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 9812, "bbox": [0, 421, 348, 57], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 32936, "bbox": [1, 419, 681, 93], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 10010, "bbox": [0, 378, 280, 69], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1796, "bbox": [44, 417, 39, 94], "iscrowd": 0}, {"id": 2752677, "category_id": 13, "area": 1825, "bbox": [621, 391, 34, 87], "iscrowd": 0}, {"id": 3473574, "category_id": 13, "area": 1011, "bbox": [570, 395, 33, 67], "iscrowd": 0}, {"id": 3744135, "category_id": 13, "area": 1943, "bbox": [23, 441, 46, 69], "iscrowd": 0}, {"id": 3998630, "category_id": 13, "area": 171, "bbox": [667, 402, 10, 24], "iscrowd": 0}, {"id": 2826114, "category_id": 13, "area": 2170, "bbox": [408, 397, 36, 101], "iscrowd": 0}, {"id": 3080321, "category_id": 13, "area": 511, "bbox": [449, 397, 18, 48], "iscrowd": 0}, {"id": 2621619, "category_id": 13, "area": 483, "bbox": [464, 398, 17, 43], "iscrowd": 0}, {"id": 5439615, "category_id": 13, "area": 578, "bbox": [378, 419, 31, 46], "iscrowd": 0}, {"id": 2424993, "category_id": 13, "area": 158, "bbox": [328, 401, 17, 17], "iscrowd": 0}, {"id": 2166671, "category_id": 13, "area": 145, "bbox": [443, 399, 10, 38], "iscrowd": 0}, {"id": 4003204, "category_id": 13, "area": 3008, "bbox": [203, 405, 45, 106], "iscrowd": 0}, {"id": 4069006, "category_id": 13, "area": 517, "bbox": [512, 393, 19, 45], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 451, "bbox": [584, 370, 16, 36], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 915, "bbox": [347, 434, 48, 34], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 3034, "bbox": [280, 298, 45, 153], "iscrowd": 0}, {"id": 16725762, "category_id": 88, "area": 313, "bbox": [597, 373, 17, 33], "iscrowd": 0}, {"id": 16733696, "category_id": 88, "area": 83, "bbox": [236, 324, 6, 64], "iscrowd": 0}, {"id": 15687188, "category_id": 88, "area": 617, "bbox": [536, 339, 15, 81], "iscrowd": 0}, {"id": 16730905, "category_id": 88, "area": 527, "bbox": [520, 347, 23, 52], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 416, "bbox": [329, 435, 17, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00001711", "file_name": "ADE_val_00001711.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 146889, "bbox": [0, 0, 593, 468], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3649, "bbox": [2, 393, 61, 77], "iscrowd": 0}, {"id": 2496433, "category_id": 13, "area": 30745, "bbox": [9, 66, 137, 402], "iscrowd": 0}, {"id": 5050268, "category_id": 13, "area": 29078, "bbox": [232, 7, 121, 406], "iscrowd": 0}, {"id": 3408031, "category_id": 13, "area": 27156, "bbox": [458, 56, 121, 411], "iscrowd": 0}, {"id": 5505164, "category_id": 13, "area": 6533, "bbox": [145, 69, 80, 126], "iscrowd": 0}, {"id": 5439654, "category_id": 13, "area": 5241, "bbox": [376, 58, 69, 120], "iscrowd": 0}, {"id": 5573773, "category_id": 13, "area": 3620, "bbox": [538, 60, 54, 111], "iscrowd": 0}, {"id": 3998357, "category_id": 13, "area": 2823, "bbox": [437, 49, 55, 127], "iscrowd": 0}]}, {"image_id": "ADE_val_00001712", "file_name": "ADE_val_00001712.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 10168, "bbox": [0, 0, 320, 103], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 25678, "bbox": [2, 87, 318, 153], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1132, "bbox": [0, 0, 249, 7], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1194, "bbox": [194, 14, 29, 47], "iscrowd": 0}, {"id": 14535123, "category_id": 9, "area": 1603, "bbox": [223, 13, 35, 52], "iscrowd": 0}, {"id": 16243948, "category_id": 9, "area": 1826, "bbox": [257, 13, 44, 55], "iscrowd": 0}, {"id": 14149332, "category_id": 9, "area": 706, "bbox": [301, 14, 18, 59], "iscrowd": 0}, {"id": 16506833, "category_id": 9, "area": 2955, "bbox": [5, 17, 89, 46], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 527, "bbox": [169, 23, 21, 26], "iscrowd": 0}, {"id": 5050345, "category_id": 23, "area": 564, "bbox": [113, 23, 31, 26], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 130, "bbox": [148, 39, 17, 21], "iscrowd": 0}, {"id": 2031593, "category_id": 37, "area": 409, "bbox": [90, 9, 45, 29], "iscrowd": 0}, {"id": 647649, "category_id": 37, "area": 624, "bbox": [282, 0, 37, 48], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 16773, "bbox": [149, 97, 171, 143], "iscrowd": 0}, {"id": 872447, "category_id": 57, "area": 6026, "bbox": [27, 70, 173, 67], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 550, "bbox": [177, 59, 42, 20], "iscrowd": 0}, {"id": 851918, "category_id": 70, "area": 886, "bbox": [203, 61, 50, 44], "iscrowd": 0}, {"id": 65457, "category_id": 70, "area": 1117, "bbox": [237, 66, 58, 44], "iscrowd": 0}, {"id": 1502921, "category_id": 70, "area": 760, "bbox": [277, 69, 42, 33], "iscrowd": 0}, {"id": 65486, "category_id": 70, "area": 1945, "bbox": [2, 58, 104, 45], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 296, "bbox": [85, 102, 36, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001713", "file_name": "ADE_val_00001713.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 47441, "bbox": [2, 0, 441, 205], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 27462, "bbox": [2, 183, 441, 115], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2935, "bbox": [247, 52, 47, 94], "iscrowd": 0}, {"id": 2883724, "category_id": 13, "area": 5251, "bbox": [13, 94, 104, 124], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 13105, "bbox": [317, 27, 109, 140], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2965, "bbox": [195, 2, 119, 42], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 31536, "bbox": [111, 135, 321, 164], "iscrowd": 0}]}, {"image_id": "ADE_val_00001714", "file_name": "ADE_val_00001714.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 141813, "bbox": [0, 19, 512, 431], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 36661, "bbox": [1, 396, 510, 287], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 34609, "bbox": [1, 1, 511, 267], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 5159, "bbox": [466, 292, 45, 180], "iscrowd": 0}, {"id": 5832865, "category_id": 13, "area": 4895, "bbox": [335, 302, 61, 124], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 11429, "bbox": [32, 381, 250, 89], "iscrowd": 0}, {"id": 7340792, "category_id": 16, "area": 1228, "bbox": [306, 385, 54, 37], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4100, "bbox": [0, 408, 90, 83], "iscrowd": 0}, {"id": 207068, "category_id": 20, "area": 1517, "bbox": [266, 365, 56, 58], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1597, "bbox": [244, 215, 75, 90], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 4679, "bbox": [109, 333, 75, 74], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 83904, "bbox": [0, 417, 491, 265], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 12383, "bbox": [204, 0, 147, 213], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 906, "bbox": [223, 261, 22, 93], "iscrowd": 0}]}, {"image_id": "ADE_val_00001715", "file_name": "ADE_val_00001715.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 68284, "bbox": [34, 0, 652, 407], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 64600, "bbox": [34, 293, 597, 160], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 59509, "bbox": [47, 0, 593, 147], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1078, "bbox": [70, 203, 34, 94], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 489, "bbox": [291, 237, 14, 41], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 34709, "bbox": [504, 48, 140, 331], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 15353, "bbox": [0, 0, 34, 453], "iscrowd": 0}, {"id": 1834752, "category_id": 15, "area": 8341, "bbox": [282, 178, 133, 116], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 3956, "bbox": [252, 151, 37, 157], "iscrowd": 0}, {"id": 540927, "category_id": 19, "area": 3740, "bbox": [411, 148, 36, 162], "iscrowd": 0}, {"id": 1521653, "category_id": 19, "area": 4555, "bbox": [482, 121, 28, 213], "iscrowd": 0}, {"id": 6393, "category_id": 19, "area": 13392, "bbox": [641, 0, 45, 453], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4914, "bbox": [34, 304, 65, 148], "iscrowd": 0}, {"id": 21474, "category_id": 20, "area": 1222, "bbox": [231, 247, 38, 61], "iscrowd": 0}, {"id": 2112944, "category_id": 20, "area": 1026, "bbox": [431, 248, 35, 66], "iscrowd": 0}, {"id": 1262024, "category_id": 20, "area": 7192, "bbox": [618, 309, 67, 144], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 636, "bbox": [62, 180, 16, 40], "iscrowd": 0}, {"id": 3612129, "category_id": 23, "area": 477, "bbox": [62, 220, 16, 31], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 514, "bbox": [334, 151, 35, 70], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 9759, "bbox": [272, 274, 153, 123], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 1678, "bbox": [426, 147, 48, 39], "iscrowd": 0}]}, {"image_id": "ADE_val_00001716", "file_name": "ADE_val_00001716.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 84507, "bbox": [0, 14, 683, 498], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 41203, "bbox": [40, 297, 557, 215], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 95167, "bbox": [0, 0, 683, 172], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 12689, "bbox": [296, 170, 147, 88], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2288, "bbox": [105, 177, 59, 44], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 580, "bbox": [568, 176, 7, 155], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2653, "bbox": [402, 260, 62, 111], "iscrowd": 0}, {"id": 10676, "category_id": 20, "area": 8347, "bbox": [128, 258, 104, 106], "iscrowd": 0}, {"id": 22760, "category_id": 20, "area": 11166, "bbox": [214, 257, 120, 153], "iscrowd": 0}, {"id": 22199, "category_id": 20, "area": 14471, "bbox": [328, 258, 120, 158], "iscrowd": 0}, {"id": 13790, "category_id": 20, "area": 568, "bbox": [286, 259, 48, 49], "iscrowd": 0}, {"id": 17860, "category_id": 20, "area": 310, "bbox": [219, 260, 20, 50], "iscrowd": 0}, {"id": 81589, "category_id": 20, "area": 7591, "bbox": [50, 256, 100, 107], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 10971, "bbox": [1, 0, 125, 215], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 43618, "bbox": [0, 355, 321, 157], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 276, "bbox": [4, 36, 28, 13], "iscrowd": 0}, {"id": 40447, "category_id": 83, "area": 424, "bbox": [152, 21, 41, 14], "iscrowd": 0}, {"id": 49151, "category_id": 83, "area": 598, "bbox": [318, 5, 44, 18], "iscrowd": 0}, {"id": 1681407, "category_id": 83, "area": 98, "bbox": [354, 129, 17, 8], "iscrowd": 0}, {"id": 42751, "category_id": 83, "area": 91, "bbox": [433, 127, 15, 7], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 5205, "bbox": [314, 371, 145, 73], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 2046, "bbox": [589, 96, 44, 75], "iscrowd": 0}]}, {"image_id": "ADE_val_00001717", "file_name": "ADE_val_00001717.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 18585, "bbox": [0, 0, 429, 399], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 58138, "bbox": [2, 344, 427, 155], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 9456, "bbox": [26, 21, 380, 29], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 2381, "bbox": [0, 259, 30, 135], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 1942, "bbox": [174, 267, 77, 105], "iscrowd": 0}]}, {"image_id": "ADE_val_00001718", "file_name": "ADE_val_00001718.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 60716, "bbox": [2, 21, 287, 267], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9298, "bbox": [2, 1, 287, 64], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1291, "bbox": [2, 184, 42, 74], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1494, "bbox": [2, 266, 83, 23], "iscrowd": 0}, {"id": 12155904, "category_id": 21, "area": 3765, "bbox": [109, 241, 137, 48], "iscrowd": 0}, {"id": 14382874, "category_id": 21, "area": 2557, "bbox": [118, 272, 171, 17], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 584, "bbox": [230, 136, 27, 33], "iscrowd": 0}, {"id": 8389119, "category_id": 44, "area": 285, "bbox": [146, 136, 15, 21], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 2173, "bbox": [103, 65, 118, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001719", "file_name": "ADE_val_00001719.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 45298, "bbox": [0, 1, 479, 272], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10580, "bbox": [341, 245, 138, 128], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 12425, "bbox": [139, 0, 340, 61], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 21556, "bbox": [196, 165, 283, 208], "iscrowd": 0}]}, {"image_id": "ADE_val_00001720", "file_name": "ADE_val_00001720.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 75436, "bbox": [0, 0, 768, 148], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4107, "bbox": [493, 123, 239, 28], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 153158, "bbox": [0, 284, 768, 228], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 11457, "bbox": [0, 96, 510, 100], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 280, "bbox": [690, 189, 20, 25], "iscrowd": 0}, {"id": 2687155, "category_id": 13, "area": 364, "bbox": [709, 189, 22, 25], "iscrowd": 0}, {"id": 4332673, "category_id": 13, "area": 332, "bbox": [674, 184, 17, 27], "iscrowd": 0}, {"id": 2883715, "category_id": 13, "area": 170, "bbox": [657, 194, 19, 18], "iscrowd": 0}, {"id": 3412883, "category_id": 13, "area": 84, "bbox": [673, 177, 9, 15], "iscrowd": 0}, {"id": 4528509, "category_id": 13, "area": 167, "bbox": [664, 180, 13, 26], "iscrowd": 0}, {"id": 2034335, "category_id": 13, "area": 234, "bbox": [654, 181, 18, 29], "iscrowd": 0}, {"id": 4530840, "category_id": 13, "area": 326, "bbox": [638, 177, 17, 33], "iscrowd": 0}, {"id": 3281056, "category_id": 13, "area": 161, "bbox": [628, 176, 12, 20], "iscrowd": 0}, {"id": 5706408, "category_id": 13, "area": 128, "bbox": [616, 183, 16, 13], "iscrowd": 0}, {"id": 4264325, "category_id": 13, "area": 86, "bbox": [605, 187, 14, 10], "iscrowd": 0}, {"id": 5841786, "category_id": 13, "area": 135, "bbox": [590, 179, 15, 17], "iscrowd": 0}, {"id": 2761100, "category_id": 13, "area": 253, "bbox": [584, 157, 17, 32], "iscrowd": 0}, {"id": 3473571, "category_id": 13, "area": 142, "bbox": [561, 146, 17, 22], "iscrowd": 0}, {"id": 4917113, "category_id": 13, "area": 45, "bbox": [581, 160, 6, 12], "iscrowd": 0}, {"id": 5439664, "category_id": 13, "area": 499, "bbox": [32, 51, 21, 50], "iscrowd": 0}, {"id": 5513365, "category_id": 13, "area": 117, "bbox": [578, 184, 19, 12], "iscrowd": 0}, {"id": 2233762, "category_id": 13, "area": 362, "bbox": [571, 163, 23, 33], "iscrowd": 0}, {"id": 2299531, "category_id": 13, "area": 304, "bbox": [560, 156, 17, 37], "iscrowd": 0}, {"id": 2360956, "category_id": 13, "area": 90, "bbox": [538, 140, 12, 15], "iscrowd": 0}, {"id": 3014785, "category_id": 13, "area": 296, "bbox": [547, 168, 15, 28], "iscrowd": 0}, {"id": 3803769, "category_id": 13, "area": 119, "bbox": [530, 147, 12, 22], "iscrowd": 0}, {"id": 2490494, "category_id": 13, "area": 377, "bbox": [533, 150, 20, 35], "iscrowd": 0}, {"id": 3932301, "category_id": 13, "area": 151, "bbox": [536, 179, 12, 17], "iscrowd": 0}, {"id": 5639065, "category_id": 13, "area": 357, "bbox": [504, 159, 20, 32], "iscrowd": 0}, {"id": 4265643, "category_id": 13, "area": 104, "bbox": [512, 177, 12, 19], "iscrowd": 0}, {"id": 2956680, "category_id": 13, "area": 64, "bbox": [412, 98, 10, 19], "iscrowd": 0}, {"id": 4326273, "category_id": 13, "area": 101, "bbox": [381, 91, 13, 20], "iscrowd": 0}, {"id": 5308545, "category_id": 13, "area": 366, "bbox": [75, 55, 15, 40], "iscrowd": 0}, {"id": 2162813, "category_id": 13, "area": 420, "bbox": [98, 50, 19, 43], "iscrowd": 0}, {"id": 2621616, "category_id": 13, "area": 167, "bbox": [115, 56, 13, 27], "iscrowd": 0}, {"id": 3735700, "category_id": 13, "area": 414, "bbox": [129, 52, 16, 43], "iscrowd": 0}, {"id": 2235790, "category_id": 13, "area": 324, "bbox": [144, 60, 12, 36], "iscrowd": 0}, {"id": 3735727, "category_id": 13, "area": 445, "bbox": [177, 58, 16, 44], "iscrowd": 0}, {"id": 4456573, "category_id": 13, "area": 475, "bbox": [205, 55, 18, 46], "iscrowd": 0}, {"id": 5177465, "category_id": 13, "area": 347, "bbox": [231, 66, 15, 40], "iscrowd": 0}, {"id": 5177518, "category_id": 13, "area": 414, "bbox": [245, 64, 16, 46], "iscrowd": 0}, {"id": 2490525, "category_id": 13, "area": 102, "bbox": [337, 83, 15, 17], "iscrowd": 0}, {"id": 3145889, "category_id": 13, "area": 85, "bbox": [165, 90, 10, 17], "iscrowd": 0}, {"id": 4325540, "category_id": 13, "area": 50, "bbox": [5, 78, 6, 13], "iscrowd": 0}, {"id": 3211398, "category_id": 13, "area": 82, "bbox": [616, 176, 13, 17], "iscrowd": 0}, {"id": 2359447, "category_id": 13, "area": 233, "bbox": [607, 163, 14, 26], "iscrowd": 0}, {"id": 3216270, "category_id": 13, "area": 446, "bbox": [276, 66, 14, 53], "iscrowd": 0}, {"id": 2758795, "category_id": 13, "area": 428, "bbox": [71, 127, 20, 37], "iscrowd": 0}, {"id": 3282813, "category_id": 13, "area": 282, "bbox": [556, 185, 23, 25], "iscrowd": 0}, {"id": 4718738, "category_id": 13, "area": 217, "bbox": [519, 179, 21, 21], "iscrowd": 0}, {"id": 3479714, "category_id": 13, "area": 259, "bbox": [495, 178, 20, 22], "iscrowd": 0}, {"id": 4327036, "category_id": 13, "area": 275, "bbox": [493, 129, 13, 40], "iscrowd": 0}, {"id": 2171053, "category_id": 13, "area": 268, "bbox": [476, 128, 19, 35], "iscrowd": 0}, {"id": 4784295, "category_id": 13, "area": 380, "bbox": [478, 144, 19, 33], "iscrowd": 0}, {"id": 3804304, "category_id": 13, "area": 239, "bbox": [475, 176, 17, 23], "iscrowd": 0}, {"id": 3606393, "category_id": 13, "area": 280, "bbox": [466, 170, 14, 29], "iscrowd": 0}, {"id": 5440941, "category_id": 13, "area": 158, "bbox": [448, 185, 19, 13], "iscrowd": 0}, {"id": 2232698, "category_id": 13, "area": 118, "bbox": [472, 125, 10, 18], "iscrowd": 0}, {"id": 5439616, "category_id": 13, "area": 463, "bbox": [453, 153, 19, 41], "iscrowd": 0}, {"id": 3739810, "category_id": 13, "area": 327, "bbox": [427, 176, 21, 22], "iscrowd": 0}, {"id": 4718717, "category_id": 13, "area": 496, "bbox": [451, 116, 21, 42], "iscrowd": 0}, {"id": 5312171, "category_id": 13, "area": 364, "bbox": [441, 145, 15, 45], "iscrowd": 0}, {"id": 4986288, "category_id": 13, "area": 267, "bbox": [408, 176, 18, 24], "iscrowd": 0}, {"id": 2167182, "category_id": 13, "area": 411, "bbox": [427, 150, 20, 36], "iscrowd": 0}, {"id": 5112996, "category_id": 13, "area": 277, "bbox": [440, 115, 14, 38], "iscrowd": 0}, {"id": 3937664, "category_id": 13, "area": 111, "bbox": [410, 168, 17, 20], "iscrowd": 0}, {"id": 3016570, "category_id": 13, "area": 394, "bbox": [427, 116, 16, 37], "iscrowd": 0}, {"id": 3342475, "category_id": 13, "area": 101, "bbox": [421, 105, 9, 30], "iscrowd": 0}, {"id": 5838747, "category_id": 13, "area": 548, "bbox": [407, 109, 20, 56], "iscrowd": 0}, {"id": 4918427, "category_id": 13, "area": 616, "bbox": [389, 91, 23, 58], "iscrowd": 0}, {"id": 4202657, "category_id": 13, "area": 318, "bbox": [399, 165, 17, 31], "iscrowd": 0}, {"id": 3871646, "category_id": 13, "area": 356, "bbox": [386, 146, 20, 33], "iscrowd": 0}, {"id": 3276926, "category_id": 13, "area": 286, "bbox": [378, 173, 19, 23], "iscrowd": 0}, {"id": 2953609, "category_id": 13, "area": 224, "bbox": [368, 166, 15, 30], "iscrowd": 0}, {"id": 2237364, "category_id": 13, "area": 247, "bbox": [355, 173, 18, 23], "iscrowd": 0}, {"id": 5049006, "category_id": 13, "area": 242, "bbox": [365, 151, 20, 27], "iscrowd": 0}, {"id": 4260276, "category_id": 13, "area": 128, "bbox": [384, 140, 13, 26], "iscrowd": 0}, {"id": 5051311, "category_id": 13, "area": 113, "bbox": [375, 144, 11, 21], "iscrowd": 0}, {"id": 5439613, "category_id": 13, "area": 234, "bbox": [362, 136, 15, 25], "iscrowd": 0}, {"id": 3473583, "category_id": 13, "area": 362, "bbox": [324, 173, 27, 26], "iscrowd": 0}, {"id": 5308566, "category_id": 13, "area": 124, "bbox": [340, 170, 13, 24], "iscrowd": 0}, {"id": 2162831, "category_id": 13, "area": 227, "bbox": [352, 147, 15, 35], "iscrowd": 0}, {"id": 3342486, "category_id": 13, "area": 530, "bbox": [337, 141, 22, 53], "iscrowd": 0}, {"id": 2492028, "category_id": 13, "area": 461, "bbox": [375, 102, 15, 50], "iscrowd": 0}, {"id": 3805818, "category_id": 13, "area": 432, "bbox": [291, 71, 18, 42], "iscrowd": 0}, {"id": 3085217, "category_id": 13, "area": 323, "bbox": [366, 92, 17, 44], "iscrowd": 0}, {"id": 5250440, "category_id": 13, "area": 362, "bbox": [304, 70, 14, 50], "iscrowd": 0}, {"id": 3280028, "category_id": 13, "area": 435, "bbox": [314, 78, 13, 51], "iscrowd": 0}, {"id": 4522117, "category_id": 13, "area": 347, "bbox": [325, 80, 13, 46], "iscrowd": 0}, {"id": 3014783, "category_id": 13, "area": 397, "bbox": [351, 91, 19, 49], "iscrowd": 0}, {"id": 3932311, "category_id": 13, "area": 98, "bbox": [331, 143, 9, 16], "iscrowd": 0}, {"id": 4006814, "category_id": 13, "area": 301, "bbox": [310, 129, 22, 27], "iscrowd": 0}, {"id": 4264357, "category_id": 13, "area": 667, "bbox": [313, 146, 25, 49], "iscrowd": 0}, {"id": 4984456, "category_id": 13, "area": 264, "bbox": [293, 177, 22, 19], "iscrowd": 0}, {"id": 4721329, "category_id": 13, "area": 240, "bbox": [341, 124, 17, 25], "iscrowd": 0}, {"id": 4199315, "category_id": 13, "area": 498, "bbox": [294, 144, 21, 47], "iscrowd": 0}, {"id": 3997824, "category_id": 13, "area": 222, "bbox": [327, 121, 15, 25], "iscrowd": 0}, {"id": 4653226, "category_id": 13, "area": 359, "bbox": [339, 90, 14, 42], "iscrowd": 0}, {"id": 2949252, "category_id": 13, "area": 231, "bbox": [293, 128, 20, 27], "iscrowd": 0}, {"id": 5505448, "category_id": 13, "area": 307, "bbox": [0, 167, 14, 34], "iscrowd": 0}, {"id": 3539078, "category_id": 13, "area": 482, "bbox": [15, 167, 24, 30], "iscrowd": 0}, {"id": 2097315, "category_id": 13, "area": 581, "bbox": [38, 162, 25, 37], "iscrowd": 0}, {"id": 3215489, "category_id": 13, "area": 456, "bbox": [64, 171, 22, 27], "iscrowd": 0}, {"id": 5378224, "category_id": 13, "area": 497, "bbox": [86, 170, 26, 33], "iscrowd": 0}, {"id": 4721317, "category_id": 13, "area": 690, "bbox": [107, 161, 29, 37], "iscrowd": 0}, {"id": 3802264, "category_id": 13, "area": 436, "bbox": [152, 172, 23, 32], "iscrowd": 0}, {"id": 2099329, "category_id": 13, "area": 312, "bbox": [175, 176, 21, 24], "iscrowd": 0}, {"id": 4394387, "category_id": 13, "area": 411, "bbox": [196, 161, 19, 36], "iscrowd": 0}, {"id": 5643152, "category_id": 13, "area": 504, "bbox": [220, 170, 26, 33], "iscrowd": 0}, {"id": 5243017, "category_id": 13, "area": 371, "bbox": [243, 177, 17, 38], "iscrowd": 0}, {"id": 5439641, "category_id": 13, "area": 319, "bbox": [272, 175, 21, 31], "iscrowd": 0}, {"id": 3146114, "category_id": 13, "area": 460, "bbox": [135, 162, 22, 35], "iscrowd": 0}, {"id": 3871155, "category_id": 13, "area": 180, "bbox": [176, 165, 20, 26], "iscrowd": 0}, {"id": 4593031, "category_id": 13, "area": 139, "bbox": [213, 170, 14, 18], "iscrowd": 0}, {"id": 3154819, "category_id": 13, "area": 244, "bbox": [254, 173, 21, 23], "iscrowd": 0}, {"id": 4980890, "category_id": 13, "area": 652, "bbox": [88, 135, 22, 47], "iscrowd": 0}, {"id": 4332699, "category_id": 13, "area": 250, "bbox": [123, 151, 16, 29], "iscrowd": 0}, {"id": 3866762, "category_id": 13, "area": 362, "bbox": [138, 139, 22, 36], "iscrowd": 0}, {"id": 2162867, "category_id": 13, "area": 234, "bbox": [242, 101, 14, 23], "iscrowd": 0}, {"id": 2424969, "category_id": 13, "area": 188, "bbox": [299, 113, 18, 22], "iscrowd": 0}, {"id": 4067454, "category_id": 13, "area": 290, "bbox": [276, 112, 18, 28], "iscrowd": 0}, {"id": 3809662, "category_id": 13, "area": 181, "bbox": [262, 110, 15, 23], "iscrowd": 0}, {"id": 4655490, "category_id": 13, "area": 152, "bbox": [259, 127, 13, 24], "iscrowd": 0}, {"id": 3735693, "category_id": 13, "area": 269, "bbox": [267, 131, 22, 29], "iscrowd": 0}, {"id": 4328616, "category_id": 13, "area": 178, "bbox": [285, 152, 12, 30], "iscrowd": 0}, {"id": 5767327, "category_id": 13, "area": 294, "bbox": [269, 153, 20, 26], "iscrowd": 0}, {"id": 2822302, "category_id": 13, "area": 149, "bbox": [264, 147, 21, 21], "iscrowd": 0}, {"id": 3276940, "category_id": 13, "area": 240, "bbox": [251, 158, 18, 23], "iscrowd": 0}, {"id": 5046441, "category_id": 13, "area": 311, "bbox": [247, 127, 17, 33], "iscrowd": 0}, {"id": 2692224, "category_id": 13, "area": 302, "bbox": [223, 125, 28, 35], "iscrowd": 0}, {"id": 5903742, "category_id": 13, "area": 144, "bbox": [227, 96, 14, 24], "iscrowd": 0}, {"id": 4069284, "category_id": 13, "area": 232, "bbox": [208, 94, 14, 26], "iscrowd": 0}, {"id": 5898388, "category_id": 13, "area": 336, "bbox": [215, 99, 25, 26], "iscrowd": 0}, {"id": 4070558, "category_id": 13, "area": 136, "bbox": [228, 119, 17, 20], "iscrowd": 0}, {"id": 5111943, "category_id": 13, "area": 254, "bbox": [193, 148, 19, 29], "iscrowd": 0}, {"id": 4071332, "category_id": 13, "area": 445, "bbox": [50, 118, 22, 36], "iscrowd": 0}, {"id": 5243024, "category_id": 13, "area": 242, "bbox": [108, 146, 17, 30], "iscrowd": 0}, {"id": 4721048, "category_id": 13, "area": 420, "bbox": [169, 131, 24, 34], "iscrowd": 0}, {"id": 4919429, "category_id": 13, "area": 256, "bbox": [205, 123, 18, 28], "iscrowd": 0}, {"id": 5775016, "category_id": 13, "area": 206, "bbox": [196, 135, 18, 26], "iscrowd": 0}, {"id": 4064677, "category_id": 13, "area": 281, "bbox": [217, 135, 21, 29], "iscrowd": 0}, {"id": 4527753, "category_id": 13, "area": 319, "bbox": [214, 151, 25, 29], "iscrowd": 0}, {"id": 5439645, "category_id": 13, "area": 201, "bbox": [145, 118, 20, 22], "iscrowd": 0}, {"id": 5905018, "category_id": 13, "area": 366, "bbox": [122, 124, 22, 35], "iscrowd": 0}, {"id": 4260004, "category_id": 13, "area": 398, "bbox": [153, 132, 27, 35], "iscrowd": 0}, {"id": 5905075, "category_id": 13, "area": 311, "bbox": [20, 137, 21, 37], "iscrowd": 0}, {"id": 3080359, "category_id": 13, "area": 135, "bbox": [98, 127, 11, 20], "iscrowd": 0}, {"id": 2954384, "category_id": 13, "area": 280, "bbox": [107, 124, 17, 30], "iscrowd": 0}, {"id": 2556059, "category_id": 13, "area": 478, "bbox": [0, 109, 22, 33], "iscrowd": 0}, {"id": 4261036, "category_id": 13, "area": 575, "bbox": [22, 112, 29, 38], "iscrowd": 0}, {"id": 2556057, "category_id": 13, "area": 229, "bbox": [36, 108, 16, 29], "iscrowd": 0}, {"id": 5446537, "category_id": 13, "area": 275, "bbox": [66, 113, 18, 33], "iscrowd": 0}, {"id": 3014797, "category_id": 13, "area": 420, "bbox": [48, 84, 26, 30], "iscrowd": 0}, {"id": 3022754, "category_id": 13, "area": 370, "bbox": [138, 96, 22, 29], "iscrowd": 0}, {"id": 3014786, "category_id": 13, "area": 185, "bbox": [191, 88, 15, 24], "iscrowd": 0}, {"id": 3613090, "category_id": 13, "area": 106, "bbox": [184, 95, 11, 16], "iscrowd": 0}, {"id": 4589975, "category_id": 13, "area": 234, "bbox": [126, 84, 18, 27], "iscrowd": 0}, {"id": 2693280, "category_id": 13, "area": 238, "bbox": [113, 83, 18, 27], "iscrowd": 0}, {"id": 2368171, "category_id": 13, "area": 127, "bbox": [77, 89, 10, 18], "iscrowd": 0}, {"id": 5439633, "category_id": 13, "area": 293, "bbox": [89, 83, 20, 25], "iscrowd": 0}, {"id": 4791417, "category_id": 13, "area": 161, "bbox": [100, 80, 14, 28], "iscrowd": 0}, {"id": 2101403, "category_id": 13, "area": 239, "bbox": [157, 94, 21, 27], "iscrowd": 0}, {"id": 5644190, "category_id": 13, "area": 250, "bbox": [176, 102, 17, 24], "iscrowd": 0}, {"id": 3866756, "category_id": 13, "area": 212, "bbox": [110, 99, 15, 24], "iscrowd": 0}, {"id": 4849836, "category_id": 13, "area": 259, "bbox": [14, 84, 24, 32], "iscrowd": 0}, {"id": 3211401, "category_id": 13, "area": 207, "bbox": [0, 83, 13, 25], "iscrowd": 0}, {"id": 4391074, "category_id": 13, "area": 203, "bbox": [8, 96, 12, 23], "iscrowd": 0}, {"id": 2629262, "category_id": 13, "area": 138, "bbox": [4, 53, 15, 16], "iscrowd": 0}, {"id": 2101144, "category_id": 13, "area": 161, "bbox": [16, 55, 13, 18], "iscrowd": 0}, {"id": 3808684, "category_id": 13, "area": 83, "bbox": [25, 57, 9, 17], "iscrowd": 0}, {"id": 2425268, "category_id": 13, "area": 172, "bbox": [55, 78, 21, 30], "iscrowd": 0}, {"id": 5900416, "category_id": 13, "area": 147, "bbox": [168, 164, 9, 27], "iscrowd": 0}, {"id": 3932321, "category_id": 13, "area": 149, "bbox": [78, 107, 13, 24], "iscrowd": 0}, {"id": 4849813, "category_id": 13, "area": 170, "bbox": [699, 162, 11, 27], "iscrowd": 0}, {"id": 2622100, "category_id": 13, "area": 102, "bbox": [452, 109, 8, 18], "iscrowd": 0}, {"id": 5374091, "category_id": 13, "area": 28, "bbox": [698, 179, 6, 7], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 36316, "bbox": [207, 212, 403, 128], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1708, "bbox": [643, 210, 80, 24], "iscrowd": 0}, {"id": 1097727, "category_id": 33, "area": 18917, "bbox": [0, 196, 645, 38], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 6831, "bbox": [704, 90, 64, 279], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 2324, "bbox": [615, 131, 122, 75], "iscrowd": 0}, {"id": 65419, "category_id": 103, "area": 2401, "bbox": [577, 155, 124, 44], "iscrowd": 0}, {"id": 1441681, "category_id": 103, "area": 2421, "bbox": [0, 20, 54, 72], "iscrowd": 0}, {"id": 59786, "category_id": 103, "area": 1917, "bbox": [468, 141, 175, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00001721", "file_name": "ADE_val_00001721.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 38464, "bbox": [0, 0, 349, 134], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2033, "bbox": [27, 89, 71, 42], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 46421, "bbox": [0, 108, 349, 154], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 51, "bbox": [203, 107, 11, 7], "iscrowd": 0}, {"id": 7212769, "category_id": 127, "area": 1250, "bbox": [173, 133, 62, 36], "iscrowd": 0}, {"id": 9837560, "category_id": 127, "area": 465, "bbox": [250, 122, 34, 24], "iscrowd": 0}, {"id": 6684907, "category_id": 127, "area": 371, "bbox": [293, 120, 31, 23], "iscrowd": 0}, {"id": 9502975, "category_id": 127, "area": 584, "bbox": [53, 145, 29, 35], "iscrowd": 0}, {"id": 8519935, "category_id": 127, "area": 383, "bbox": [21, 136, 29, 26], "iscrowd": 0}, {"id": 7473663, "category_id": 127, "area": 323, "bbox": [135, 126, 21, 26], "iscrowd": 0}, {"id": 9506557, "category_id": 127, "area": 59, "bbox": [214, 105, 13, 9], "iscrowd": 0}, {"id": 7799019, "category_id": 127, "area": 89, "bbox": [229, 108, 18, 9], "iscrowd": 0}, {"id": 8068863, "category_id": 127, "area": 235, "bbox": [71, 128, 21, 16], "iscrowd": 0}, {"id": 7409663, "category_id": 127, "area": 145, "bbox": [116, 123, 17, 14], "iscrowd": 0}, {"id": 8391935, "category_id": 127, "area": 96, "bbox": [175, 109, 14, 10], "iscrowd": 0}, {"id": 8918015, "category_id": 127, "area": 105, "bbox": [84, 125, 15, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001722", "file_name": "ADE_val_00001722.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 34407, "bbox": [0, 0, 561, 296], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 61523, "bbox": [0, 277, 552, 235], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 25051, "bbox": [0, 0, 365, 92], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 15461, "bbox": [28, 129, 134, 152], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 19444, "bbox": [19, 247, 243, 225], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 166, "bbox": [166, 250, 21, 17], "iscrowd": 0}, {"id": 1661112, "category_id": 20, "area": 223, "bbox": [172, 256, 28, 19], "iscrowd": 0}, {"id": 1847736, "category_id": 20, "area": 197, "bbox": [181, 262, 30, 16], "iscrowd": 0}, {"id": 141770, "category_id": 20, "area": 220, "bbox": [193, 275, 20, 19], "iscrowd": 0}, {"id": 604088, "category_id": 20, "area": 574, "bbox": [0, 271, 40, 34], "iscrowd": 0}, {"id": 811955, "category_id": 20, "area": 628, "bbox": [1, 300, 35, 34], "iscrowd": 0}, {"id": 19919, "category_id": 20, "area": 2373, "bbox": [1, 338, 53, 151], "iscrowd": 0}, {"id": 23731, "category_id": 20, "area": 6161, "bbox": [379, 320, 120, 174], "iscrowd": 0}, {"id": 88026, "category_id": 20, "area": 188, "bbox": [75, 243, 39, 5], "iscrowd": 0}, {"id": 418780, "category_id": 20, "area": 2157, "bbox": [212, 297, 57, 139], "iscrowd": 0}, {"id": 19918, "category_id": 20, "area": 154, "bbox": [33, 251, 14, 24], "iscrowd": 0}, {"id": 146388, "category_id": 20, "area": 291, "bbox": [15, 261, 26, 23], "iscrowd": 0}, {"id": 23474, "category_id": 20, "area": 8989, "bbox": [101, 337, 123, 174], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 95390, "bbox": [219, 0, 464, 511], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 236, "bbox": [373, 266, 31, 10], "iscrowd": 0}, {"id": 44791, "category_id": 68, "area": 216, "bbox": [373, 259, 32, 9], "iscrowd": 0}, {"id": 46316, "category_id": 68, "area": 903, "bbox": [315, 233, 35, 33], "iscrowd": 0}, {"id": 1025791, "category_id": 68, "area": 1797, "bbox": [357, 209, 48, 43], "iscrowd": 0}, {"id": 40692, "category_id": 68, "area": 879, "bbox": [317, 205, 34, 29], "iscrowd": 0}, {"id": 2012921, "category_id": 68, "area": 1081, "bbox": [317, 169, 35, 34], "iscrowd": 0}, {"id": 37360, "category_id": 68, "area": 738, "bbox": [357, 166, 20, 39], "iscrowd": 0}, {"id": 1348585, "category_id": 68, "area": 1095, "bbox": [377, 165, 30, 40], "iscrowd": 0}, {"id": 1485044, "category_id": 68, "area": 1532, "bbox": [409, 158, 41, 40], "iscrowd": 0}, {"id": 1358079, "category_id": 68, "area": 873, "bbox": [615, 281, 29, 62], "iscrowd": 0}, {"id": 1089272, "category_id": 68, "area": 775, "bbox": [630, 283, 23, 62], "iscrowd": 0}, {"id": 46571, "category_id": 68, "area": 766, "bbox": [641, 285, 28, 63], "iscrowd": 0}, {"id": 1542911, "category_id": 68, "area": 862, "bbox": [654, 287, 20, 66], "iscrowd": 0}, {"id": 1877221, "category_id": 68, "area": 650, "bbox": [670, 288, 11, 68], "iscrowd": 0}, {"id": 35303, "category_id": 68, "area": 3931, "bbox": [616, 214, 66, 68], "iscrowd": 0}, {"id": 1936887, "category_id": 68, "area": 3721, "bbox": [619, 144, 63, 63], "iscrowd": 0}, {"id": 178152, "category_id": 68, "area": 6368, "bbox": [489, 142, 118, 60], "iscrowd": 0}, {"id": 34559, "category_id": 68, "area": 3501, "bbox": [621, 68, 61, 68], "iscrowd": 0}, {"id": 1818367, "category_id": 68, "area": 3226, "bbox": [626, 1, 56, 68], "iscrowd": 0}, {"id": 34275, "category_id": 68, "area": 5423, "bbox": [497, 11, 115, 77], "iscrowd": 0}, {"id": 41471, "category_id": 68, "area": 3790, "bbox": [495, 84, 103, 58], "iscrowd": 0}, {"id": 501503, "category_id": 68, "area": 2879, "bbox": [416, 104, 71, 50], "iscrowd": 0}, {"id": 833772, "category_id": 68, "area": 2998, "bbox": [414, 45, 74, 61], "iscrowd": 0}, {"id": 49649, "category_id": 68, "area": 1482, "bbox": [360, 76, 48, 47], "iscrowd": 0}, {"id": 35583, "category_id": 68, "area": 1693, "bbox": [359, 117, 49, 45], "iscrowd": 0}, {"id": 35555, "category_id": 68, "area": 1016, "bbox": [318, 91, 36, 41], "iscrowd": 0}, {"id": 573439, "category_id": 68, "area": 1035, "bbox": [317, 133, 36, 34], "iscrowd": 0}, {"id": 1873896, "category_id": 68, "area": 692, "bbox": [287, 107, 26, 35], "iscrowd": 0}, {"id": 45055, "category_id": 68, "area": 756, "bbox": [287, 140, 26, 34], "iscrowd": 0}, {"id": 104191, "category_id": 68, "area": 389, "bbox": [265, 114, 18, 28], "iscrowd": 0}, {"id": 1682680, "category_id": 68, "area": 416, "bbox": [263, 141, 20, 25], "iscrowd": 0}, {"id": 49151, "category_id": 68, "area": 551, "bbox": [260, 167, 23, 26], "iscrowd": 0}, {"id": 887268, "category_id": 68, "area": 268, "bbox": [244, 197, 14, 21], "iscrowd": 0}, {"id": 702202, "category_id": 68, "area": 282, "bbox": [243, 221, 16, 21], "iscrowd": 0}, {"id": 40174, "category_id": 68, "area": 224, "bbox": [245, 147, 14, 19], "iscrowd": 0}, {"id": 42209, "category_id": 68, "area": 218, "bbox": [245, 173, 13, 18], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 9000, "bbox": [469, 238, 126, 245], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 152, "bbox": [98, 31, 24, 9], "iscrowd": 0}, {"id": 2013928, "category_id": 83, "area": 94, "bbox": [93, 68, 16, 8], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 889, "bbox": [237, 274, 36, 32], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 1311, "bbox": [465, 0, 91, 27], "iscrowd": 0}, {"id": 16720896, "category_id": 135, "area": 1710, "bbox": [389, 12, 92, 45], "iscrowd": 0}, {"id": 16721165, "category_id": 135, "area": 990, "bbox": [335, 45, 71, 31], "iscrowd": 0}, {"id": 16727552, "category_id": 135, "area": 613, "bbox": [297, 67, 53, 25], "iscrowd": 0}, {"id": 16065282, "category_id": 135, "area": 335, "bbox": [269, 86, 38, 18], "iscrowd": 0}, {"id": 16067102, "category_id": 135, "area": 226, "bbox": [248, 98, 29, 16], "iscrowd": 0}, {"id": 14960153, "category_id": 135, "area": 159, "bbox": [230, 108, 24, 11], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 165, "bbox": [1, 137, 9, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00001723", "file_name": "ADE_val_00001723.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 111479, "bbox": [1, 1, 366, 368], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 15109, "bbox": [442, 397, 239, 114], "iscrowd": 0}, {"id": 16711802, "category_id": 142, "area": 3264, "bbox": [112, 337, 110, 39], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 34653, "bbox": [5, 0, 678, 95], "iscrowd": 0}, {"id": 15727072, "category_id": 9, "area": 73372, "bbox": [357, 71, 326, 342], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 104597, "bbox": [0, 269, 632, 242], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1101, "bbox": [292, 33, 122, 31], "iscrowd": 0}, {"id": 50674, "category_id": 83, "area": 1587, "bbox": [139, 1, 168, 37], "iscrowd": 0}, {"id": 1617124, "category_id": 83, "area": 2237, "bbox": [514, 1, 132, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00001724", "file_name": "ADE_val_00001724.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 27011, "bbox": [0, 0, 400, 186], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 630, "bbox": [345, 276, 55, 23], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 9273, "bbox": [85, 1, 87, 145], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3047, "bbox": [262, 83, 90, 85], "iscrowd": 0}, {"id": 5313188, "category_id": 13, "area": 7466, "bbox": [24, 59, 120, 129], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 781, "bbox": [5, 145, 25, 42], "iscrowd": 0}, {"id": 1845686, "category_id": 20, "area": 634, "bbox": [233, 140, 34, 22], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 9799, "bbox": [171, 19, 108, 154], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 47278, "bbox": [2, 162, 398, 138], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 977, "bbox": [210, 90, 29, 35], "iscrowd": 0}, {"id": 1098231, "category_id": 68, "area": 694, "bbox": [211, 54, 24, 34], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 4318, "bbox": [66, 102, 118, 92], "iscrowd": 0}, {"id": 10156802, "category_id": 75, "area": 2089, "bbox": [334, 118, 66, 53], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 149, "bbox": [16, 124, 10, 22], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 1161, "bbox": [330, 5, 36, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00001725", "file_name": "ADE_val_00001725.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 137141, "bbox": [0, 0, 679, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 70673, "bbox": [0, 350, 647, 161], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 34769, "bbox": [68, 1, 497, 108], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2733, "bbox": [70, 151, 261, 68], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 1481, "bbox": [150, 166, 25, 66], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 12481, "bbox": [334, 151, 109, 143], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 6585, "bbox": [2, 2, 18, 440], "iscrowd": 0}, {"id": 3538694, "category_id": 15, "area": 6428, "bbox": [602, 0, 49, 457], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1323, "bbox": [476, 292, 71, 24], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 11843, "bbox": [456, 257, 137, 160], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 47834, "bbox": [66, 227, 312, 168], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 4088, "bbox": [135, 3, 135, 64], "iscrowd": 0}, {"id": 48127, "category_id": 83, "area": 2891, "bbox": [379, 1, 94, 41], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 325, "bbox": [287, 210, 22, 18], "iscrowd": 0}, {"id": 15535871, "category_id": 126, "area": 299, "bbox": [81, 218, 22, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001726", "file_name": "ADE_val_00001726.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 36840, "bbox": [2, 0, 552, 117], "iscrowd": 0}]}, {"image_id": "ADE_val_00001727", "file_name": "ADE_val_00001727.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 35197, "bbox": [25, 2, 519, 297], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 52322, "bbox": [56, 191, 488, 217], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7922, "bbox": [428, 42, 87, 183], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1493, "bbox": [354, 2, 161, 13], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 2405, "bbox": [384, 209, 89, 30], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 24207, "bbox": [29, 14, 134, 252], "iscrowd": 0}, {"id": 13359337, "category_id": 9, "area": 11958, "bbox": [171, 25, 78, 178], "iscrowd": 0}, {"id": 14735830, "category_id": 9, "area": 7170, "bbox": [261, 35, 52, 155], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 8694, "bbox": [363, 29, 59, 170], "iscrowd": 0}, {"id": 1900313, "category_id": 15, "area": 17679, "bbox": [2, 1, 65, 407], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 361, "bbox": [518, 174, 25, 29], "iscrowd": 0}, {"id": 6099450, "category_id": 16, "area": 5095, "bbox": [84, 214, 155, 169], "iscrowd": 0}, {"id": 4136429, "category_id": 16, "area": 283, "bbox": [172, 171, 93, 20], "iscrowd": 0}, {"id": 5637364, "category_id": 16, "area": 1453, "bbox": [263, 173, 102, 25], "iscrowd": 0}, {"id": 3542523, "category_id": 16, "area": 801, "bbox": [312, 146, 79, 16], "iscrowd": 0}, {"id": 3866879, "category_id": 16, "area": 927, "bbox": [51, 206, 52, 34], "iscrowd": 0}, {"id": 4194533, "category_id": 16, "area": 5943, "bbox": [216, 218, 169, 55], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 6764, "bbox": [25, 0, 330, 36], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1981, "bbox": [502, 200, 42, 124], "iscrowd": 0}, {"id": 1523162, "category_id": 20, "area": 2178, "bbox": [311, 210, 52, 157], "iscrowd": 0}, {"id": 12762, "category_id": 20, "area": 4947, "bbox": [144, 201, 88, 149], "iscrowd": 0}, {"id": 11716, "category_id": 20, "area": 8471, "bbox": [231, 260, 109, 147], "iscrowd": 0}, {"id": 1592550, "category_id": 20, "area": 525, "bbox": [353, 145, 30, 70], "iscrowd": 0}, {"id": 1463474, "category_id": 20, "area": 574, "bbox": [61, 194, 47, 22], "iscrowd": 0}, {"id": 812257, "category_id": 20, "area": 7429, "bbox": [61, 252, 134, 155], "iscrowd": 0}, {"id": 609240, "category_id": 20, "area": 251, "bbox": [242, 164, 35, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00001728", "file_name": "ADE_val_00001728.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 180571, "bbox": [1, 1, 682, 428], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 4512, "bbox": [1, 1, 37, 144], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1124, "bbox": [1, 121, 33, 52], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 64415, "bbox": [1, 304, 682, 208], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1477, "bbox": [515, 322, 80, 49], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 23406, "bbox": [216, 176, 172, 189], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7982, "bbox": [131, 187, 80, 118], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 5736, "bbox": [387, 240, 56, 148], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2529, "bbox": [326, 354, 112, 102], "iscrowd": 0}, {"id": 6294527, "category_id": 16, "area": 1973, "bbox": [506, 367, 66, 59], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3014, "bbox": [394, 362, 79, 111], "iscrowd": 0}, {"id": 15818, "category_id": 20, "area": 264, "bbox": [370, 345, 48, 15], "iscrowd": 0}, {"id": 14312, "category_id": 20, "area": 4218, "bbox": [323, 365, 70, 115], "iscrowd": 0}, {"id": 1135047, "category_id": 20, "area": 3154, "bbox": [268, 344, 79, 106], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 7262, "bbox": [590, 318, 93, 105], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 3184, "bbox": [452, 326, 71, 81], "iscrowd": 0}, {"id": 11534584, "category_id": 44, "area": 2521, "bbox": [99, 322, 88, 120], "iscrowd": 0}, {"id": 8524799, "category_id": 44, "area": 10196, "bbox": [191, 132, 285, 59], "iscrowd": 0}, {"id": 10879231, "category_id": 44, "area": 6828, "bbox": [122, 331, 104, 135], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 674, "bbox": [564, 366, 27, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001729", "file_name": "ADE_val_00001729.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 163575, "bbox": [0, 0, 638, 479], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 24385, "bbox": [60, 355, 293, 123], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 13431, "bbox": [61, 2, 313, 59], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4499, "bbox": [91, 96, 20, 273], "iscrowd": 0}, {"id": 4456202, "category_id": 15, "area": 9730, "bbox": [58, 74, 38, 366], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6862, "bbox": [450, 27, 57, 144], "iscrowd": 0}, {"id": 2359521, "category_id": 23, "area": 16628, "bbox": [547, 20, 92, 203], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 15224, "bbox": [316, 91, 131, 165], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 382, "bbox": [256, 264, 40, 12], "iscrowd": 0}, {"id": 16748304, "category_id": 48, "area": 592, "bbox": [262, 270, 56, 24], "iscrowd": 0}, {"id": 14980352, "category_id": 48, "area": 1058, "bbox": [274, 289, 67, 29], "iscrowd": 0}, {"id": 15639825, "category_id": 48, "area": 2076, "bbox": [288, 319, 93, 38], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 22883, "bbox": [238, 265, 203, 188], "iscrowd": 0}, {"id": 16766464, "category_id": 111, "area": 1587, "bbox": [155, 313, 38, 62], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 1664, "bbox": [377, 48, 45, 49], "iscrowd": 0}, {"id": 16727577, "category_id": 135, "area": 883, "bbox": [341, 75, 34, 40], "iscrowd": 0}, {"id": 15736576, "category_id": 135, "area": 570, "bbox": [318, 93, 26, 34], "iscrowd": 0}, {"id": 14949380, "category_id": 135, "area": 354, "bbox": [305, 108, 18, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00001730", "file_name": "ADE_val_00001730.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 14160, "bbox": [2, 0, 254, 176], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 32414, "bbox": [0, 34, 256, 222], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 11523, "bbox": [37, 104, 219, 109], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 4534, "bbox": [2, 51, 141, 62], "iscrowd": 0}]}, {"image_id": "ADE_val_00001731", "file_name": "ADE_val_00001731.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 8205, "bbox": [19, 0, 236, 46], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 24009, "bbox": [0, 0, 256, 130], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 11365, "bbox": [0, 124, 255, 131], "iscrowd": 0}, {"id": 13942282, "category_id": 129, "area": 19852, "bbox": [0, 129, 256, 104], "iscrowd": 0}]}, {"image_id": "ADE_val_00001732", "file_name": "ADE_val_00001732.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 150673, "bbox": [0, 0, 842, 360], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 44908, "bbox": [1, 377, 842, 134], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 190577, "bbox": [0, 26, 843, 431], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 384, "bbox": [678, 364, 76, 35], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 735, "bbox": [161, 390, 33, 29], "iscrowd": 0}, {"id": 11625737, "category_id": 21, "area": 1034, "bbox": [76, 393, 41, 32], "iscrowd": 0}, {"id": 11491345, "category_id": 21, "area": 88, "bbox": [408, 374, 15, 9], "iscrowd": 0}, {"id": 12935424, "category_id": 21, "area": 109, "bbox": [386, 376, 15, 10], "iscrowd": 0}, {"id": 11694108, "category_id": 21, "area": 65, "bbox": [536, 374, 12, 9], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 605, "bbox": [0, 395, 80, 24], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 181, "bbox": [769, 387, 16, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00001733", "file_name": "ADE_val_00001733.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 336033, "bbox": [2, 0, 776, 512], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 44432, "bbox": [0, 0, 638, 147], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4681, "bbox": [191, 347, 77, 121], "iscrowd": 0}, {"id": 3148971, "category_id": 13, "area": 3553, "bbox": [450, 181, 74, 100], "iscrowd": 0}, {"id": 2424987, "category_id": 13, "area": 3500, "bbox": [352, 81, 71, 112], "iscrowd": 0}, {"id": 5374076, "category_id": 13, "area": 2559, "bbox": [351, 32, 65, 85], "iscrowd": 0}, {"id": 5707186, "category_id": 13, "area": 2343, "bbox": [452, 7, 47, 93], "iscrowd": 0}]}, {"image_id": "ADE_val_00001734", "file_name": "ADE_val_00001734.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 70246, "bbox": [0, 0, 359, 320], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 13081, "bbox": [0, 273, 352, 207], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2278, "bbox": [192, 303, 151, 61], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 250, "bbox": [310, 346, 27, 12], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 33960, "bbox": [0, 342, 360, 137], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1582, "bbox": [324, 215, 30, 89], "iscrowd": 0}, {"id": 5177508, "category_id": 13, "area": 2394, "bbox": [343, 190, 16, 232], "iscrowd": 0}, {"id": 4986745, "category_id": 13, "area": 17669, "bbox": [93, 54, 177, 381], "iscrowd": 0}, {"id": 3416442, "category_id": 13, "area": 7345, "bbox": [245, 178, 88, 175], "iscrowd": 0}]}, {"image_id": "ADE_val_00001735", "file_name": "ADE_val_00001735.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 113126, "bbox": [1, 0, 682, 333], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 75156, "bbox": [255, 0, 428, 237], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 214, "bbox": [475, 269, 17, 32], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 106717, "bbox": [0, 327, 683, 185], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 7188, "bbox": [56, 319, 596, 23], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2643, "bbox": [83, 315, 541, 27], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 503, "bbox": [142, 299, 57, 12], "iscrowd": 0}, {"id": 11762944, "category_id": 21, "area": 1293, "bbox": [1, 307, 79, 26], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1965, "bbox": [140, 243, 56, 40], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 389, "bbox": [491, 273, 35, 13], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 397, "bbox": [93, 210, 26, 95], "iscrowd": 0}, {"id": 16730127, "category_id": 88, "area": 527, "bbox": [593, 198, 29, 117], "iscrowd": 0}, {"id": 16344064, "category_id": 88, "area": 52, "bbox": [284, 263, 14, 20], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 3586, "bbox": [95, 46, 154, 93], "iscrowd": 0}, {"id": 65535, "category_id": 133, "area": 11545, "bbox": [298, 165, 103, 136], "iscrowd": 0}]}, {"image_id": "ADE_val_00001736", "file_name": "ADE_val_00001736.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 16936, "bbox": [0, 41, 175, 124], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 21806, "bbox": [0, 0, 291, 145], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6143, "bbox": [161, 62, 130, 99], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 5765, "bbox": [0, 152, 291, 49], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 644, "bbox": [1, 151, 280, 14], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 24, "bbox": [207, 151, 6, 11], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 770, "bbox": [59, 149, 58, 20], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 119, "bbox": [29, 130, 9, 32], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 77, "bbox": [134, 159, 17, 6], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 123, "bbox": [28, 103, 12, 27], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 442, "bbox": [188, 92, 16, 68], "iscrowd": 0}]}, {"image_id": "ADE_val_00001737", "file_name": "ADE_val_00001737.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 94412, "bbox": [2, 0, 509, 383], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 14876, "bbox": [77, 0, 205, 120], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 848, "bbox": [76, 80, 55, 40], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 617, "bbox": [327, 227, 17, 56], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 2151, "bbox": [181, 211, 67, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00001738", "file_name": "ADE_val_00001738.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 571, "bbox": [13, 139, 662, 18], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 89160, "bbox": [1, 1, 681, 133], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3018, "bbox": [1, 130, 681, 27], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 133842, "bbox": [1, 309, 681, 203], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 4952, "bbox": [1, 129, 501, 22], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 50394, "bbox": [1, 142, 681, 121], "iscrowd": 0}, {"id": 65433, "category_id": 55, "area": 63349, "bbox": [3, 214, 677, 104], "iscrowd": 0}]}, {"image_id": "ADE_val_00001739", "file_name": "ADE_val_00001739.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 190068, "bbox": [0, 13, 662, 380], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 60439, "bbox": [0, 0, 662, 199], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 2911, "bbox": [2, 218, 21, 161], "iscrowd": 0}, {"id": 16701899, "category_id": 9, "area": 5380, "bbox": [190, 190, 46, 138], "iscrowd": 0}]}, {"image_id": "ADE_val_00001740", "file_name": "ADE_val_00001740.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 11289, "bbox": [0, 0, 359, 37], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 16575, "bbox": [124, 34, 236, 142], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 43271, "bbox": [0, 37, 360, 166], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 1586, "bbox": [2, 21, 175, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00001741", "file_name": "ADE_val_00001741.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 67645, "bbox": [0, 40, 333, 374], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 16884, "bbox": [71, 368, 261, 131], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 21627, "bbox": [2, 0, 331, 79], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 3003, "bbox": [2, 349, 46, 87], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 19735, "bbox": [7, 229, 326, 154], "iscrowd": 0}, {"id": 65453, "category_id": 70, "area": 25803, "bbox": [71, 306, 261, 193], "iscrowd": 0}]}, {"image_id": "ADE_val_00001742", "file_name": "ADE_val_00001742.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 39402, "bbox": [0, 1, 343, 224], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 20840, "bbox": [21, 0, 383, 144], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 27127, "bbox": [2, 154, 402, 127], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2083, "bbox": [252, 109, 50, 112], "iscrowd": 0}, {"id": 4980870, "category_id": 13, "area": 1868, "bbox": [136, 108, 31, 100], "iscrowd": 0}, {"id": 3803800, "category_id": 13, "area": 2670, "bbox": [39, 97, 47, 107], "iscrowd": 0}, {"id": 5111937, "category_id": 13, "area": 6773, "bbox": [259, 134, 117, 147], "iscrowd": 0}]}, {"image_id": "ADE_val_00001743", "file_name": "ADE_val_00001743.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 123273, "bbox": [0, 107, 512, 586], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 6320, "bbox": [243, 646, 269, 122], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3499, "bbox": [448, 436, 64, 65], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1210, "bbox": [391, 611, 36, 55], "iscrowd": 0}, {"id": 2293917, "category_id": 13, "area": 3994, "bbox": [403, 639, 53, 126], "iscrowd": 0}, {"id": 2031738, "category_id": 13, "area": 639, "bbox": [448, 634, 28, 42], "iscrowd": 0}, {"id": 2364804, "category_id": 13, "area": 1891, "bbox": [454, 669, 32, 97], "iscrowd": 0}, {"id": 4267415, "category_id": 13, "area": 679, "bbox": [475, 621, 24, 72], "iscrowd": 0}, {"id": 5374844, "category_id": 13, "area": 2403, "bbox": [483, 634, 29, 132], "iscrowd": 0}, {"id": 4849798, "category_id": 13, "area": 4627, "bbox": [332, 620, 49, 143], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 9952, "bbox": [146, 416, 190, 81], "iscrowd": 0}, {"id": 13861120, "category_id": 21, "area": 9856, "bbox": [140, 521, 198, 81], "iscrowd": 0}, {"id": 13980160, "category_id": 21, "area": 4059, "bbox": [166, 155, 146, 64], "iscrowd": 0}, {"id": 11693594, "category_id": 21, "area": 7068, "bbox": [158, 222, 168, 83], "iscrowd": 0}, {"id": 12542464, "category_id": 21, "area": 7956, "bbox": [150, 317, 180, 80], "iscrowd": 0}, {"id": 14900224, "category_id": 21, "area": 4806, "bbox": [245, 622, 87, 92], "iscrowd": 0}, {"id": 16711680, "category_id": 56, "area": 45372, "bbox": [2, 570, 248, 196], "iscrowd": 0}, {"id": 5439232, "category_id": 91, "area": 70072, "bbox": [2, 0, 508, 182], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 5500, "bbox": [244, 692, 147, 67], "iscrowd": 0}]}, {"image_id": "ADE_val_00001744", "file_name": "ADE_val_00001744.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 83410, "bbox": [2, 0, 537, 309], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 54027, "bbox": [0, 181, 539, 179], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 29641, "bbox": [131, 1, 408, 137], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 19339, "bbox": [197, 203, 298, 155], "iscrowd": 0}]}, {"image_id": "ADE_val_00001745", "file_name": "ADE_val_00001745.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 132027, "bbox": [0, 0, 681, 511], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 41380, "bbox": [0, 280, 682, 231], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 170371, "bbox": [139, 95, 508, 386], "iscrowd": 0}]}, {"image_id": "ADE_val_00001746", "file_name": "ADE_val_00001746.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 148178, "bbox": [2, 0, 597, 397], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 23900, "bbox": [120, 391, 462, 58], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 27178, "bbox": [2, 241, 137, 208], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3348, "bbox": [59, 173, 56, 79], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 29004, "bbox": [139, 66, 307, 331], "iscrowd": 0}, {"id": 9371903, "category_id": 122, "area": 4791, "bbox": [533, 337, 67, 111], "iscrowd": 0}]}, {"image_id": "ADE_val_00001747", "file_name": "ADE_val_00001747.png", "segments_info": [{"id": 3289680, "category_id": 4, "area": 5037, "bbox": [9, 211, 247, 44], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 4778, "bbox": [0, 0, 255, 27], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 34714, "bbox": [0, 20, 256, 235], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 480, "bbox": [124, 2, 29, 18], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 836, "bbox": [184, 17, 37, 25], "iscrowd": 0}, {"id": 8650989, "category_id": 44, "area": 465, "bbox": [193, 44, 22, 26], "iscrowd": 0}, {"id": 8392703, "category_id": 44, "area": 538, "bbox": [197, 149, 21, 31], "iscrowd": 0}, {"id": 11542783, "category_id": 44, "area": 841, "bbox": [87, 202, 40, 41], "iscrowd": 0}, {"id": 11935743, "category_id": 44, "area": 1217, "bbox": [31, 17, 43, 30], "iscrowd": 0}, {"id": 10428649, "category_id": 44, "area": 613, "bbox": [78, 163, 23, 32], "iscrowd": 0}, {"id": 11338724, "category_id": 44, "area": 861, "bbox": [11, 93, 28, 32], "iscrowd": 0}, {"id": 10748159, "category_id": 44, "area": 414, "bbox": [219, 104, 20, 27], "iscrowd": 0}, {"id": 10420724, "category_id": 44, "area": 213, "bbox": [202, 74, 9, 25], "iscrowd": 0}, {"id": 8653793, "category_id": 44, "area": 121, "bbox": [207, 105, 9, 15], "iscrowd": 0}, {"id": 8720383, "category_id": 44, "area": 126, "bbox": [203, 131, 9, 14], "iscrowd": 0}, {"id": 10492927, "category_id": 44, "area": 294, "bbox": [157, 149, 18, 34], "iscrowd": 0}, {"id": 11600115, "category_id": 44, "area": 269, "bbox": [85, 83, 11, 26], "iscrowd": 0}, {"id": 7340287, "category_id": 112, "area": 934, "bbox": [50, 221, 33, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00001748", "file_name": "ADE_val_00001748.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 49329, "bbox": [2, 0, 254, 256], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 573, "bbox": [0, 247, 117, 9], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 11279, "bbox": [4, 13, 252, 242], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 3009, "bbox": [7, 105, 177, 18], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 599, "bbox": [147, 222, 27, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00001749", "file_name": "ADE_val_00001749.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 23941, "bbox": [0, 0, 400, 300], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 29300, "bbox": [0, 112, 400, 188], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1507, "bbox": [0, 0, 131, 40], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 7751, "bbox": [135, 159, 226, 139], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 1548, "bbox": [225, 209, 52, 62], "iscrowd": 0}, {"id": 10747648, "category_id": 97, "area": 17436, "bbox": [2, 8, 259, 292], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 185, "bbox": [350, 250, 10, 34], "iscrowd": 0}, {"id": 3216510, "category_id": 13, "area": 54, "bbox": [99, 170, 4, 18], "iscrowd": 0}, {"id": 3743646, "category_id": 13, "area": 167, "bbox": [59, 245, 9, 30], "iscrowd": 0}, {"id": 3080369, "category_id": 13, "area": 73, "bbox": [128, 240, 7, 21], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 2247, "bbox": [2, 68, 100, 54], "iscrowd": 0}, {"id": 1913343, "category_id": 39, "area": 2551, "bbox": [19, 127, 91, 149], "iscrowd": 0}, {"id": 2302197, "category_id": 39, "area": 2994, "bbox": [249, 121, 149, 128], "iscrowd": 0}]}, {"image_id": "ADE_val_00001750", "file_name": "ADE_val_00001750.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 269613, "bbox": [1, 0, 627, 511], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 14214, "bbox": [57, 0, 344, 48], "iscrowd": 0}, {"id": 16745728, "category_id": 146, "area": 1740, "bbox": [307, 118, 91, 74], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 24231, "bbox": [152, 278, 237, 232], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 4513, "bbox": [524, 445, 106, 67], "iscrowd": 0}, {"id": 5637119, "category_id": 82, "area": 1774, "bbox": [476, 474, 77, 38], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 618, "bbox": [217, 3, 46, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001751", "file_name": "ADE_val_00001751.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 21449, "bbox": [60, 67, 187, 154], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 25122, "bbox": [0, 0, 400, 112], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 16364, "bbox": [0, 0, 400, 178], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 14585, "bbox": [0, 85, 400, 106], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 9119, "bbox": [0, 264, 399, 35], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 1576, "bbox": [77, 167, 39, 56], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 833, "bbox": [130, 157, 97, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00001752", "file_name": "ADE_val_00001752.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 12244, "bbox": [0, 54, 256, 101], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 12401, "bbox": [0, 0, 256, 59], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7466, "bbox": [0, 96, 255, 104], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 15336, "bbox": [0, 93, 255, 163], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 7594, "bbox": [0, 37, 189, 56], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 494, "bbox": [146, 173, 110, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00001753", "file_name": "ADE_val_00001753.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 17260, "bbox": [0, 90, 256, 166], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 33680, "bbox": [0, 0, 256, 232], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2535, "bbox": [0, 0, 254, 256], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 11415, "bbox": [16, 26, 110, 191], "iscrowd": 0}]}, {"image_id": "ADE_val_00001754", "file_name": "ADE_val_00001754.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 21555, "bbox": [2, 54, 254, 192], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 25994, "bbox": [2, 1, 254, 175], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7019, "bbox": [2, 196, 254, 60], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 9191, "bbox": [133, 49, 73, 187], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 309, "bbox": [161, 175, 28, 80], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 448, "bbox": [111, 203, 97, 53], "iscrowd": 0}]}, {"image_id": "ADE_val_00001755", "file_name": "ADE_val_00001755.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 160, "bbox": [147, 237, 12, 19], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 15786, "bbox": [2, 1, 180, 244], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2043, "bbox": [4, 214, 118, 41], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 46441, "bbox": [0, 0, 256, 256], "iscrowd": 0}]}, {"image_id": "ADE_val_00001756", "file_name": "ADE_val_00001756.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 33829, "bbox": [7, 2, 249, 254], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 22659, "bbox": [2, 1, 254, 226], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6487, "bbox": [0, 213, 204, 43], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 1531, "bbox": [165, 146, 91, 18], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 188, "bbox": [203, 127, 16, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001757", "file_name": "ADE_val_00001757.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 678, "bbox": [2, 185, 254, 30], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 16313, "bbox": [2, 0, 254, 211], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 17906, "bbox": [2, 72, 254, 184], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 29715, "bbox": [61, 1, 162, 208], "iscrowd": 0}]}, {"image_id": "ADE_val_00001758", "file_name": "ADE_val_00001758.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1470, "bbox": [2, 292, 129, 25], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 25738, "bbox": [0, 46, 249, 251], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 45630, "bbox": [0, 0, 250, 258], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 5515, "bbox": [2, 284, 248, 52], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 3617, "bbox": [0, 313, 220, 24], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 87, "bbox": [18, 283, 16, 8], "iscrowd": 0}, {"id": 13985801, "category_id": 21, "area": 140, "bbox": [193, 288, 21, 8], "iscrowd": 0}, {"id": 13270528, "category_id": 21, "area": 154, "bbox": [227, 286, 20, 9], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 847, "bbox": [209, 132, 31, 203], "iscrowd": 0}]}, {"image_id": "ADE_val_00001759", "file_name": "ADE_val_00001759.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 47015, "bbox": [2, 1, 254, 255], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 17072, "bbox": [13, 40, 215, 216], "iscrowd": 0}]}, {"image_id": "ADE_val_00001760", "file_name": "ADE_val_00001760.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 16371, "bbox": [2, 0, 254, 256], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 47471, "bbox": [10, 0, 246, 256], "iscrowd": 0}]}, {"image_id": "ADE_val_00001761", "file_name": "ADE_val_00001761.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 16449, "bbox": [2, 146, 254, 110], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 32380, "bbox": [2, 1, 254, 201], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 15391, "bbox": [72, 45, 184, 187], "iscrowd": 0}]}, {"image_id": "ADE_val_00001762", "file_name": "ADE_val_00001762.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 122857, "bbox": [0, 0, 510, 641], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1880, "bbox": [483, 623, 27, 139], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 260208, "bbox": [0, 25, 509, 744], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 945, "bbox": [273, 589, 29, 36], "iscrowd": 0}, {"id": 13890815, "category_id": 9, "area": 818, "bbox": [273, 511, 25, 34], "iscrowd": 0}, {"id": 14086093, "category_id": 9, "area": 619, "bbox": [272, 445, 23, 29], "iscrowd": 0}, {"id": 16118236, "category_id": 9, "area": 528, "bbox": [271, 386, 21, 26], "iscrowd": 0}, {"id": 16770285, "category_id": 9, "area": 440, "bbox": [269, 335, 20, 22], "iscrowd": 0}, {"id": 16572130, "category_id": 9, "area": 361, "bbox": [267, 290, 19, 20], "iscrowd": 0}, {"id": 15588340, "category_id": 9, "area": 304, "bbox": [265, 250, 19, 18], "iscrowd": 0}, {"id": 16767452, "category_id": 9, "area": 212, "bbox": [266, 216, 16, 15], "iscrowd": 0}, {"id": 15715793, "category_id": 9, "area": 197, "bbox": [265, 185, 15, 14], "iscrowd": 0}, {"id": 15911932, "category_id": 9, "area": 158, "bbox": [264, 156, 14, 13], "iscrowd": 0}, {"id": 13369297, "category_id": 9, "area": 1257, "bbox": [276, 677, 30, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00001763", "file_name": "ADE_val_00001763.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 31273, "bbox": [0, 8, 199, 270], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 13284, "bbox": [0, 0, 199, 241], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 9486, "bbox": [20, 145, 179, 127], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 1428, "bbox": [0, 283, 182, 16], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 1232, "bbox": [99, 268, 100, 20], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 939, "bbox": [105, 281, 94, 18], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 900, "bbox": [0, 272, 67, 17], "iscrowd": 0}, {"id": 12740635, "category_id": 21, "area": 555, "bbox": [65, 273, 40, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00001764", "file_name": "ADE_val_00001764.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 46487, "bbox": [2, 0, 254, 256], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 16704, "bbox": [2, 1, 254, 255], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 1553, "bbox": [138, 224, 118, 32], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 46, "bbox": [210, 211, 9, 15], "iscrowd": 0}, {"id": 14767104, "category_id": 88, "area": 38, "bbox": [140, 230, 9, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00001765", "file_name": "ADE_val_00001765.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 52442, "bbox": [0, 1, 256, 255], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 10595, "bbox": [11, 102, 224, 154], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 79, "bbox": [217, 170, 8, 14], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 891, "bbox": [150, 211, 82, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00001766", "file_name": "ADE_val_00001766.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 37933, "bbox": [0, 22, 256, 220], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 10703, "bbox": [2, 1, 254, 71], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7855, "bbox": [2, 175, 254, 81], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1495, "bbox": [208, 218, 48, 38], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 6271, "bbox": [2, 45, 254, 83], "iscrowd": 0}]}, {"image_id": "ADE_val_00001767", "file_name": "ADE_val_00001767.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 11114, "bbox": [168, 400, 514, 111], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 151311, "bbox": [0, 0, 682, 511], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 8524, "bbox": [0, 359, 90, 152], "iscrowd": 0}, {"id": 13143180, "category_id": 49, "area": 176693, "bbox": [0, 32, 682, 479], "iscrowd": 0}]}, {"image_id": "ADE_val_00001768", "file_name": "ADE_val_00001768.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 23255, "bbox": [0, 0, 499, 102], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 8825, "bbox": [235, 31, 264, 148], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 836, "bbox": [370, 219, 128, 12], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 2901, "bbox": [427, 173, 72, 52], "iscrowd": 0}, {"id": 45055, "category_id": 33, "area": 53927, "bbox": [0, 181, 499, 152], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 2477, "bbox": [382, 10, 79, 155], "iscrowd": 0}]}, {"image_id": "ADE_val_00001769", "file_name": "ADE_val_00001769.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 104644, "bbox": [1, 0, 768, 362], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 15657, "bbox": [520, 362, 250, 149], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 22568, "bbox": [85, 1, 675, 62], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 8382, "bbox": [450, 78, 318, 205], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 62598, "bbox": [341, 39, 394, 236], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 58477, "bbox": [0, 291, 504, 220], "iscrowd": 0}, {"id": 16711907, "category_id": 8, "area": 31871, "bbox": [186, 255, 393, 255], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3140, "bbox": [279, 97, 39, 97], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1629, "bbox": [355, 243, 101, 37], "iscrowd": 0}, {"id": 5441791, "category_id": 16, "area": 11195, "bbox": [673, 368, 97, 143], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1417, "bbox": [670, 19, 23, 92], "iscrowd": 0}, {"id": 715215, "category_id": 37, "area": 888, "bbox": [489, 44, 18, 77], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 22790, "bbox": [457, 251, 303, 144], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 2273, "bbox": [285, 205, 86, 65], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 159, "bbox": [504, 292, 17, 14], "iscrowd": 0}, {"id": 131327, "category_id": 67, "area": 155, "bbox": [485, 283, 18, 13], "iscrowd": 0}, {"id": 242, "category_id": 67, "area": 121, "bbox": [341, 283, 17, 11], "iscrowd": 0}, {"id": 5096, "category_id": 67, "area": 554, "bbox": [340, 392, 36, 26], "iscrowd": 0}, {"id": 247, "category_id": 67, "area": 409, "bbox": [346, 362, 29, 23], "iscrowd": 0}, {"id": 1377791, "category_id": 67, "area": 554, "bbox": [253, 406, 37, 25], "iscrowd": 0}, {"id": 4578, "category_id": 67, "area": 282, "bbox": [152, 346, 26, 20], "iscrowd": 0}, {"id": 1777407, "category_id": 67, "area": 286, "bbox": [261, 351, 22, 19], "iscrowd": 0}, {"id": 65774, "category_id": 67, "area": 235, "bbox": [280, 148, 23, 26], "iscrowd": 0}, {"id": 227, "category_id": 67, "area": 162, "bbox": [407, 282, 17, 14], "iscrowd": 0}, {"id": 1770, "category_id": 67, "area": 136, "bbox": [458, 295, 20, 11], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 23903, "bbox": [184, 354, 301, 156], "iscrowd": 0}, {"id": 7930106, "category_id": 82, "area": 2602, "bbox": [119, 325, 85, 43], "iscrowd": 0}, {"id": 7085553, "category_id": 82, "area": 4654, "bbox": [431, 282, 136, 61], "iscrowd": 0}, {"id": 8454370, "category_id": 82, "area": 930, "bbox": [322, 270, 49, 25], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 22, "bbox": [319, 49, 10, 3], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 120, "bbox": [283, 170, 6, 22], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 2255, "bbox": [229, 342, 81, 44], "iscrowd": 0}, {"id": 61246, "category_id": 138, "area": 571, "bbox": [393, 285, 45, 17], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 2817, "bbox": [196, 0, 179, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00001770", "file_name": "ADE_val_00001770.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 33161, "bbox": [0, 59, 476, 187], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 41610, "bbox": [2, 0, 555, 83], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 72757, "bbox": [2, 174, 555, 182], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3121, "bbox": [301, 103, 40, 155], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 3654, "bbox": [126, 176, 144, 178], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1412, "bbox": [380, 2, 18, 224], "iscrowd": 0}, {"id": 1377535, "category_id": 43, "area": 4432, "bbox": [278, 0, 23, 287], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 21068, "bbox": [44, 95, 184, 219], "iscrowd": 0}, {"id": 9443831, "category_id": 127, "area": 5217, "bbox": [208, 125, 111, 126], "iscrowd": 0}, {"id": 9509882, "category_id": 127, "area": 3264, "bbox": [374, 113, 103, 85], "iscrowd": 0}]}, {"image_id": "ADE_val_00001771", "file_name": "ADE_val_00001771.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 83463, "bbox": [0, 121, 575, 179], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 80870, "bbox": [0, 0, 575, 250], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 52082, "bbox": [2, 302, 573, 129], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4551, "bbox": [451, 286, 45, 144], "iscrowd": 0}, {"id": 2427043, "category_id": 13, "area": 4702, "bbox": [491, 289, 47, 141], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 494, "bbox": [0, 281, 27, 27], "iscrowd": 0}, {"id": 11560465, "category_id": 21, "area": 316, "bbox": [22, 294, 30, 13], "iscrowd": 0}, {"id": 14833923, "category_id": 21, "area": 1825, "bbox": [16, 280, 119, 30], "iscrowd": 0}, {"id": 13977862, "category_id": 21, "area": 2736, "bbox": [146, 282, 63, 56], "iscrowd": 0}, {"id": 14962432, "category_id": 21, "area": 368, "bbox": [134, 285, 19, 27], "iscrowd": 0}, {"id": 11501329, "category_id": 21, "area": 819, "bbox": [204, 284, 31, 36], "iscrowd": 0}, {"id": 14117376, "category_id": 21, "area": 1882, "bbox": [229, 289, 56, 50], "iscrowd": 0}, {"id": 11434498, "category_id": 21, "area": 1784, "bbox": [285, 297, 70, 41], "iscrowd": 0}, {"id": 12084502, "category_id": 21, "area": 1705, "bbox": [351, 301, 66, 38], "iscrowd": 0}, {"id": 11299608, "category_id": 21, "area": 2563, "bbox": [274, 287, 178, 34], "iscrowd": 0}, {"id": 11565568, "category_id": 21, "area": 2169, "bbox": [521, 285, 54, 52], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 2159, "bbox": [140, 326, 187, 69], "iscrowd": 0}]}, {"image_id": "ADE_val_00001772", "file_name": "ADE_val_00001772.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 22614, "bbox": [0, 1, 499, 114], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 70703, "bbox": [0, 0, 639, 399], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 55613, "bbox": [0, 372, 639, 107], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1996, "bbox": [116, 304, 34, 96], "iscrowd": 0}, {"id": 5832879, "category_id": 13, "area": 1937, "bbox": [196, 308, 45, 97], "iscrowd": 0}, {"id": 5638800, "category_id": 13, "area": 1394, "bbox": [321, 265, 38, 74], "iscrowd": 0}, {"id": 2825394, "category_id": 13, "area": 1315, "bbox": [219, 263, 32, 91], "iscrowd": 0}, {"id": 3014780, "category_id": 13, "area": 576, "bbox": [365, 449, 25, 27], "iscrowd": 0}, {"id": 4593566, "category_id": 13, "area": 698, "bbox": [436, 455, 56, 22], "iscrowd": 0}, {"id": 4982690, "category_id": 13, "area": 2025, "bbox": [383, 309, 42, 98], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 540, "bbox": [0, 311, 25, 26], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 3893, "bbox": [0, 336, 117, 65], "iscrowd": 0}, {"id": 768767, "category_id": 33, "area": 4886, "bbox": [389, 349, 151, 67], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 3366, "bbox": [559, 300, 80, 89], "iscrowd": 0}]}, {"image_id": "ADE_val_00001773", "file_name": "ADE_val_00001773.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21136, "bbox": [0, 0, 255, 189], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 18874, "bbox": [0, 165, 255, 90], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 825, "bbox": [198, 72, 41, 37], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 7400, "bbox": [112, 65, 106, 119], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 4440, "bbox": [51, 21, 117, 163], "iscrowd": 0}, {"id": 2049009, "category_id": 39, "area": 1221, "bbox": [83, 13, 67, 40], "iscrowd": 0}, {"id": 1268220, "category_id": 39, "area": 1009, "bbox": [202, 42, 36, 32], "iscrowd": 0}, {"id": 1193964, "category_id": 39, "area": 1157, "bbox": [188, 66, 50, 70], "iscrowd": 0}, {"id": 13567, "category_id": 39, "area": 2695, "bbox": [166, 45, 62, 138], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 4045, "bbox": [2, 136, 103, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00001774", "file_name": "ADE_val_00001774.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 162903, "bbox": [0, 0, 511, 546], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 96681, "bbox": [1, 485, 509, 297], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 24871, "bbox": [62, 280, 449, 213], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 90019, "bbox": [0, 79, 510, 703], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 546, "bbox": [117, 481, 55, 42], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 15544, "bbox": [22, 0, 389, 634], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 415, "bbox": [14, 186, 20, 27], "iscrowd": 0}, {"id": 1882865, "category_id": 83, "area": 257, "bbox": [102, 138, 14, 25], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 1916, "bbox": [477, 508, 34, 71], "iscrowd": 0}, {"id": 16716018, "category_id": 126, "area": 1128, "bbox": [127, 449, 36, 39], "iscrowd": 0}]}, {"image_id": "ADE_val_00001775", "file_name": "ADE_val_00001775.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 31051, "bbox": [0, 0, 250, 262], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10781, "bbox": [0, 232, 250, 67], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 8571, "bbox": [0, 0, 250, 79], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 19245, "bbox": [52, 56, 153, 229], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4328, "bbox": [3, 87, 30, 163], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 23, "bbox": [54, 58, 8, 4], "iscrowd": 0}, {"id": 1557503, "category_id": 83, "area": 19, "bbox": [121, 50, 6, 4], "iscrowd": 0}, {"id": 47596, "category_id": 83, "area": 29, "bbox": [191, 57, 8, 5], "iscrowd": 0}]}, {"image_id": "ADE_val_00001776", "file_name": "ADE_val_00001776.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 11573, "bbox": [0, 0, 282, 88], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 30295, "bbox": [17, 88, 303, 152], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1827, "bbox": [94, 0, 173, 15], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 618, "bbox": [119, 32, 27, 36], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 6602, "bbox": [239, 0, 81, 182], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 1462, "bbox": [175, 34, 27, 57], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 839, "bbox": [295, 72, 24, 40], "iscrowd": 0}, {"id": 65280, "category_id": 42, "area": 556, "bbox": [303, 26, 16, 37], "iscrowd": 0}, {"id": 1765395, "category_id": 42, "area": 544, "bbox": [288, 110, 27, 35], "iscrowd": 0}, {"id": 2549505, "category_id": 42, "area": 266, "bbox": [271, 100, 16, 26], "iscrowd": 0}, {"id": 982796, "category_id": 42, "area": 473, "bbox": [287, 133, 26, 38], "iscrowd": 0}, {"id": 2089486, "category_id": 42, "area": 637, "bbox": [263, 19, 45, 26], "iscrowd": 0}, {"id": 16724742, "category_id": 45, "area": 1113, "bbox": [146, 45, 29, 46], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 119, "bbox": [135, 0, 23, 6], "iscrowd": 0}, {"id": 1416959, "category_id": 83, "area": 67, "bbox": [144, 9, 19, 5], "iscrowd": 0}, {"id": 51938, "category_id": 83, "area": 86, "bbox": [199, 8, 19, 6], "iscrowd": 0}, {"id": 45559, "category_id": 83, "area": 128, "bbox": [203, 0, 24, 6], "iscrowd": 0}]}, {"image_id": "ADE_val_00001777", "file_name": "ADE_val_00001777.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 213619, "bbox": [0, 0, 512, 652], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 59011, "bbox": [244, 0, 195, 497], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 318, "bbox": [386, 475, 54, 49], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 29551, "bbox": [0, 526, 391, 157], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 24759, "bbox": [0, 521, 512, 162], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2332, "bbox": [388, 506, 32, 122], "iscrowd": 0}, {"id": 5308586, "category_id": 13, "area": 1020, "bbox": [328, 522, 24, 75], "iscrowd": 0}, {"id": 2359469, "category_id": 13, "area": 1218, "bbox": [362, 516, 24, 79], "iscrowd": 0}, {"id": 3211434, "category_id": 13, "area": 2802, "bbox": [408, 504, 35, 137], "iscrowd": 0}, {"id": 2368155, "category_id": 13, "area": 2244, "bbox": [441, 513, 29, 120], "iscrowd": 0}, {"id": 4980891, "category_id": 13, "area": 15, "bbox": [248, 522, 3, 7], "iscrowd": 0}, {"id": 4856978, "category_id": 13, "area": 37, "bbox": [250, 522, 7, 9], "iscrowd": 0}, {"id": 4784261, "category_id": 13, "area": 67, "bbox": [204, 522, 9, 11], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2061, "bbox": [254, 531, 66, 41], "iscrowd": 0}, {"id": 12538375, "category_id": 21, "area": 33, "bbox": [385, 527, 6, 7], "iscrowd": 0}, {"id": 13664768, "category_id": 21, "area": 90, "bbox": [352, 520, 14, 10], "iscrowd": 0}, {"id": 14248471, "category_id": 21, "area": 134, "bbox": [330, 518, 22, 10], "iscrowd": 0}, {"id": 12015104, "category_id": 21, "area": 203, "bbox": [344, 525, 18, 19], "iscrowd": 0}, {"id": 11885824, "category_id": 21, "area": 271, "bbox": [315, 529, 19, 23], "iscrowd": 0}, {"id": 12144128, "category_id": 21, "area": 628, "bbox": [212, 521, 36, 31], "iscrowd": 0}, {"id": 13917440, "category_id": 21, "area": 789, "bbox": [229, 530, 38, 30], "iscrowd": 0}, {"id": 14313216, "category_id": 21, "area": 985, "bbox": [160, 527, 53, 30], "iscrowd": 0}, {"id": 14641942, "category_id": 21, "area": 1897, "bbox": [107, 533, 77, 37], "iscrowd": 0}, {"id": 12668416, "category_id": 21, "area": 2921, "bbox": [0, 531, 65, 60], "iscrowd": 0}, {"id": 13401600, "category_id": 21, "area": 122, "bbox": [314, 524, 16, 13], "iscrowd": 0}, {"id": 13388566, "category_id": 21, "area": 61, "bbox": [262, 527, 18, 4], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 191, "bbox": [389, 510, 13, 20], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 75, "bbox": [394, 457, 44, 19], "iscrowd": 0}, {"id": 16725504, "category_id": 88, "area": 282, "bbox": [193, 467, 11, 61], "iscrowd": 0}, {"id": 16591360, "category_id": 88, "area": 11, "bbox": [360, 509, 3, 11], "iscrowd": 0}, {"id": 15747867, "category_id": 88, "area": 100, "bbox": [277, 479, 7, 48], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 45, "bbox": [416, 501, 4, 15], "iscrowd": 0}, {"id": 14943807, "category_id": 137, "area": 172, "bbox": [333, 488, 55, 30], "iscrowd": 0}, {"id": 15011114, "category_id": 137, "area": 96, "bbox": [312, 494, 6, 33], "iscrowd": 0}, {"id": 14882082, "category_id": 137, "area": 29, "bbox": [336, 498, 4, 20], "iscrowd": 0}, {"id": 16711725, "category_id": 137, "area": 28, "bbox": [349, 503, 3, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00001778", "file_name": "ADE_val_00001778.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 69829, "bbox": [0, 27, 562, 263], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 56390, "bbox": [0, 0, 683, 137], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 53415, "bbox": [0, 3, 680, 293], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 131023, "bbox": [0, 284, 683, 228], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 8108, "bbox": [1, 261, 681, 68], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 8414, "bbox": [1, 275, 682, 76], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4437, "bbox": [499, 258, 183, 58], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 179, "bbox": [279, 207, 14, 17], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 10663, "bbox": [31, 235, 196, 81], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 337, "bbox": [578, 280, 11, 38], "iscrowd": 0}, {"id": 16580891, "category_id": 94, "area": 307, "bbox": [480, 274, 10, 37], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 310, "bbox": [534, 291, 24, 17], "iscrowd": 0}, {"id": 16714223, "category_id": 126, "area": 293, "bbox": [439, 280, 22, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001779", "file_name": "ADE_val_00001779.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 247808, "bbox": [0, 0, 683, 424], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 163, "bbox": [677, 308, 6, 36], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 63253, "bbox": [0, 394, 683, 118], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 9080, "bbox": [0, 381, 683, 58], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 100, "bbox": [451, 373, 8, 21], "iscrowd": 0}, {"id": 4851629, "category_id": 13, "area": 80, "bbox": [377, 373, 6, 21], "iscrowd": 0}, {"id": 4195720, "category_id": 13, "area": 52, "bbox": [371, 373, 6, 16], "iscrowd": 0}, {"id": 2757003, "category_id": 13, "area": 166, "bbox": [620, 368, 9, 30], "iscrowd": 0}, {"id": 5579700, "category_id": 13, "area": 122, "bbox": [653, 369, 7, 28], "iscrowd": 0}, {"id": 2621584, "category_id": 13, "area": 101, "bbox": [665, 370, 9, 22], "iscrowd": 0}, {"id": 3998640, "category_id": 13, "area": 67, "bbox": [650, 367, 5, 26], "iscrowd": 0}, {"id": 3807394, "category_id": 13, "area": 103, "bbox": [633, 372, 7, 27], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 233, "bbox": [328, 375, 26, 30], "iscrowd": 0}, {"id": 11885568, "category_id": 21, "area": 202, "bbox": [333, 379, 36, 30], "iscrowd": 0}, {"id": 13531417, "category_id": 21, "area": 1204, "bbox": [337, 381, 42, 37], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 122, "bbox": [387, 339, 10, 14], "iscrowd": 0}, {"id": 9044223, "category_id": 44, "area": 454, "bbox": [259, 339, 12, 43], "iscrowd": 0}, {"id": 11666943, "category_id": 44, "area": 112, "bbox": [583, 358, 8, 14], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1485, "bbox": [236, 159, 61, 266], "iscrowd": 0}, {"id": 15543047, "category_id": 88, "area": 38, "bbox": [425, 338, 6, 11], "iscrowd": 0}, {"id": 15479040, "category_id": 88, "area": 87, "bbox": [353, 330, 5, 40], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 276, "bbox": [323, 370, 38, 22], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 158, "bbox": [580, 383, 27, 15], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 1419, "bbox": [205, 297, 29, 132], "iscrowd": 0}, {"id": 15730732, "category_id": 137, "area": 1021, "bbox": [91, 297, 28, 134], "iscrowd": 0}, {"id": 16711743, "category_id": 137, "area": 845, "bbox": [597, 187, 84, 49], "iscrowd": 0}, {"id": 16711723, "category_id": 137, "area": 343, "bbox": [624, 320, 13, 79], "iscrowd": 0}, {"id": 16515113, "category_id": 137, "area": 599, "bbox": [576, 312, 17, 96], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 561, "bbox": [514, 179, 25, 27], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 165, "bbox": [509, 233, 12, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001780", "file_name": "ADE_val_00001780.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 252, "bbox": [431, 318, 22, 13], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 132176, "bbox": [1, 0, 682, 346], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 26527, "bbox": [347, 1, 225, 197], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 10685, "bbox": [591, 92, 92, 267], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 91272, "bbox": [0, 313, 683, 199], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 5216, "bbox": [1, 308, 682, 78], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 577, "bbox": [434, 294, 34, 35], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2178, "bbox": [17, 287, 32, 103], "iscrowd": 0}, {"id": 2563970, "category_id": 13, "area": 123, "bbox": [489, 306, 8, 24], "iscrowd": 0}, {"id": 3670177, "category_id": 13, "area": 184, "bbox": [293, 301, 13, 24], "iscrowd": 0}, {"id": 4528015, "category_id": 13, "area": 60, "bbox": [425, 306, 8, 13], "iscrowd": 0}, {"id": 2818215, "category_id": 13, "area": 476, "bbox": [595, 298, 25, 48], "iscrowd": 0}, {"id": 2556073, "category_id": 13, "area": 116, "bbox": [507, 304, 8, 25], "iscrowd": 0}, {"id": 4391033, "category_id": 13, "area": 3697, "bbox": [104, 274, 59, 119], "iscrowd": 0}, {"id": 4522155, "category_id": 13, "area": 39, "bbox": [465, 305, 5, 13], "iscrowd": 0}, {"id": 4522413, "category_id": 13, "area": 41, "bbox": [499, 306, 6, 14], "iscrowd": 0}, {"id": 3014815, "category_id": 13, "area": 90, "bbox": [539, 305, 8, 16], "iscrowd": 0}, {"id": 2622349, "category_id": 13, "area": 316, "bbox": [257, 310, 23, 21], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 683, "bbox": [1, 327, 27, 40], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 93, "bbox": [483, 305, 13, 14], "iscrowd": 0}, {"id": 12747264, "category_id": 21, "area": 13667, "bbox": [146, 303, 272, 89], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 1090, "bbox": [71, 57, 42, 34], "iscrowd": 0}, {"id": 1526501, "category_id": 39, "area": 727, "bbox": [159, 78, 31, 31], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1154, "bbox": [264, 66, 31, 62], "iscrowd": 0}, {"id": 9437423, "category_id": 44, "area": 936, "bbox": [212, 191, 54, 23], "iscrowd": 0}, {"id": 10027241, "category_id": 44, "area": 290, "bbox": [303, 222, 19, 16], "iscrowd": 0}, {"id": 9765100, "category_id": 44, "area": 565, "bbox": [30, 162, 20, 37], "iscrowd": 0}, {"id": 9175295, "category_id": 44, "area": 4162, "bbox": [1, 185, 275, 51], "iscrowd": 0}, {"id": 11672319, "category_id": 44, "area": 545, "bbox": [512, 266, 23, 88], "iscrowd": 0}, {"id": 8198898, "category_id": 44, "area": 836, "bbox": [264, 236, 27, 75], "iscrowd": 0}, {"id": 11410431, "category_id": 44, "area": 1317, "bbox": [95, 112, 97, 30], "iscrowd": 0}, {"id": 10355711, "category_id": 44, "area": 165, "bbox": [540, 255, 16, 19], "iscrowd": 0}, {"id": 10429183, "category_id": 44, "area": 103, "bbox": [576, 263, 13, 11], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 18442, "bbox": [1, 208, 320, 81], "iscrowd": 0}, {"id": 2359040, "category_id": 87, "area": 665, "bbox": [229, 149, 33, 33], "iscrowd": 0}, {"id": 6029081, "category_id": 87, "area": 1229, "bbox": [104, 127, 62, 30], "iscrowd": 0}, {"id": 3145472, "category_id": 87, "area": 509, "bbox": [624, 236, 59, 33], "iscrowd": 0}, {"id": 4847616, "category_id": 87, "area": 136, "bbox": [280, 176, 16, 24], "iscrowd": 0}, {"id": 3928599, "category_id": 87, "area": 103, "bbox": [304, 187, 14, 15], "iscrowd": 0}, {"id": 2947869, "category_id": 87, "area": 64, "bbox": [543, 292, 17, 10], "iscrowd": 0}, {"id": 5236993, "category_id": 87, "area": 124, "bbox": [556, 225, 29, 28], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 137, "bbox": [573, 164, 22, 12], "iscrowd": 0}, {"id": 15096576, "category_id": 88, "area": 17, "bbox": [535, 243, 9, 4], "iscrowd": 0}, {"id": 15616256, "category_id": 88, "area": 32, "bbox": [423, 220, 11, 7], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 1261, "bbox": [365, 301, 65, 32], "iscrowd": 0}, {"id": 58789, "category_id": 103, "area": 3267, "bbox": [87, 289, 186, 61], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 1902, "bbox": [531, 311, 72, 47], "iscrowd": 0}, {"id": 16719551, "category_id": 117, "area": 9519, "bbox": [50, 281, 170, 141], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 160, "bbox": [278, 216, 21, 12], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 902, "bbox": [607, 323, 33, 38], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 362, "bbox": [128, 15, 22, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00001781", "file_name": "ADE_val_00001781.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 19652, "bbox": [454, 271, 228, 148], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 108210, "bbox": [1, 0, 682, 401], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 116341, "bbox": [28, 1, 655, 332], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 95, "bbox": [332, 345, 15, 7], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 68743, "bbox": [0, 366, 683, 146], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 79, "bbox": [332, 363, 17, 5], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 13503, "bbox": [60, 364, 623, 118], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 1021, "bbox": [283, 321, 64, 24], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6358, "bbox": [475, 233, 207, 94], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 4709, "bbox": [1, 376, 61, 98], "iscrowd": 0}, {"id": 13722112, "category_id": 21, "area": 128, "bbox": [319, 353, 13, 13], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 6381, "bbox": [355, 284, 75, 94], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 102, "bbox": [280, 265, 33, 105], "iscrowd": 0}, {"id": 16730112, "category_id": 88, "area": 73, "bbox": [305, 298, 21, 69], "iscrowd": 0}, {"id": 16737283, "category_id": 88, "area": 51, "bbox": [314, 314, 16, 42], "iscrowd": 0}, {"id": 15877654, "category_id": 88, "area": 799, "bbox": [218, 182, 59, 192], "iscrowd": 0}, {"id": 15418368, "category_id": 88, "area": 35, "bbox": [321, 326, 14, 26], "iscrowd": 0}, {"id": 16725529, "category_id": 88, "area": 29, "bbox": [325, 332, 13, 20], "iscrowd": 0}, {"id": 16736256, "category_id": 88, "area": 19, "bbox": [329, 336, 11, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00001782", "file_name": "ADE_val_00001782.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 168100, "bbox": [0, 10, 683, 412], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 88888, "bbox": [0, 0, 683, 293], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 71870, "bbox": [0, 351, 683, 161], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 3935, "bbox": [592, 345, 90, 73], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 2197, "bbox": [580, 321, 103, 44], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3601, "bbox": [464, 340, 47, 122], "iscrowd": 0}, {"id": 3410848, "category_id": 13, "area": 64, "bbox": [593, 353, 8, 14], "iscrowd": 0}, {"id": 3474851, "category_id": 13, "area": 663, "bbox": [550, 333, 22, 54], "iscrowd": 0}, {"id": 2561453, "category_id": 13, "area": 608, "bbox": [514, 333, 22, 55], "iscrowd": 0}, {"id": 65453, "category_id": 77, "area": 135, "bbox": [665, 363, 17, 9], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 3251, "bbox": [0, 248, 134, 50], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 1351, "bbox": [25, 350, 35, 49], "iscrowd": 0}, {"id": 14903048, "category_id": 93, "area": 2658, "bbox": [67, 343, 59, 63], "iscrowd": 0}]}, {"image_id": "ADE_val_00001783", "file_name": "ADE_val_00001783.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 288948, "bbox": [1, 1, 682, 511], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 37324, "bbox": [1, 1, 245, 253], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 6823, "bbox": [0, 453, 273, 59], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 5422, "bbox": [0, 449, 415, 63], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1471, "bbox": [608, 453, 74, 28], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 74, "bbox": [23, 438, 9, 25], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 87, "bbox": [34, 422, 6, 41], "iscrowd": 0}, {"id": 8786668, "category_id": 44, "area": 332, "bbox": [15, 395, 21, 17], "iscrowd": 0}, {"id": 9050861, "category_id": 44, "area": 136, "bbox": [12, 423, 6, 39], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 919, "bbox": [186, 386, 18, 94], "iscrowd": 0}, {"id": 16722194, "category_id": 88, "area": 1100, "bbox": [211, 384, 21, 100], "iscrowd": 0}, {"id": 16722432, "category_id": 88, "area": 759, "bbox": [133, 385, 14, 88], "iscrowd": 0}, {"id": 16728320, "category_id": 88, "area": 647, "bbox": [114, 386, 16, 84], "iscrowd": 0}, {"id": 16734208, "category_id": 88, "area": 82, "bbox": [94, 399, 10, 17], "iscrowd": 0}, {"id": 16729355, "category_id": 88, "area": 82, "bbox": [85, 398, 8, 17], "iscrowd": 0}, {"id": 14955031, "category_id": 88, "area": 404, "bbox": [400, 357, 25, 50], "iscrowd": 0}, {"id": 15546368, "category_id": 88, "area": 409, "bbox": [454, 355, 26, 54], "iscrowd": 0}, {"id": 16736768, "category_id": 88, "area": 56, "bbox": [17, 310, 19, 4], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 80, "bbox": [88, 445, 3, 27], "iscrowd": 0}, {"id": 15597615, "category_id": 94, "area": 84, "bbox": [104, 445, 3, 29], "iscrowd": 0}, {"id": 15728671, "category_id": 94, "area": 84, "bbox": [178, 452, 4, 33], "iscrowd": 0}, {"id": 16711737, "category_id": 94, "area": 120, "bbox": [202, 452, 6, 38], "iscrowd": 0}, {"id": 16711730, "category_id": 94, "area": 401, "bbox": [368, 466, 11, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00001784", "file_name": "ADE_val_00001784.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 143850, "bbox": [1, 1, 681, 421], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 55493, "bbox": [1, 1, 363, 254], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 10056, "bbox": [3, 67, 417, 236], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 67817, "bbox": [1, 302, 590, 210], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 11307, "bbox": [546, 403, 137, 109], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 136, "bbox": [71, 250, 23, 12], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 40, "bbox": [86, 291, 4, 15], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 148, "bbox": [69, 294, 16, 12], "iscrowd": 0}, {"id": 13329418, "category_id": 21, "area": 59, "bbox": [90, 294, 7, 10], "iscrowd": 0}, {"id": 13393920, "category_id": 21, "area": 54, "bbox": [100, 295, 8, 13], "iscrowd": 0}, {"id": 12746506, "category_id": 21, "area": 174, "bbox": [105, 291, 25, 19], "iscrowd": 0}, {"id": 13532672, "category_id": 21, "area": 240, "bbox": [111, 294, 26, 23], "iscrowd": 0}, {"id": 14441747, "category_id": 21, "area": 213, "bbox": [122, 295, 32, 26], "iscrowd": 0}, {"id": 14374914, "category_id": 21, "area": 197, "bbox": [127, 299, 20, 25], "iscrowd": 0}, {"id": 11954956, "category_id": 21, "area": 222, "bbox": [136, 300, 18, 27], "iscrowd": 0}, {"id": 12157205, "category_id": 21, "area": 597, "bbox": [142, 295, 28, 42], "iscrowd": 0}, {"id": 12544768, "category_id": 21, "area": 6579, "bbox": [216, 307, 121, 92], "iscrowd": 0}, {"id": 12679936, "category_id": 21, "area": 103, "bbox": [56, 293, 14, 11], "iscrowd": 0}, {"id": 14510592, "category_id": 21, "area": 327, "bbox": [38, 291, 20, 22], "iscrowd": 0}, {"id": 13401345, "category_id": 21, "area": 154, "bbox": [29, 292, 16, 27], "iscrowd": 0}, {"id": 14966784, "category_id": 21, "area": 292, "bbox": [1, 292, 38, 29], "iscrowd": 0}, {"id": 14635008, "category_id": 21, "area": 293, "bbox": [9, 297, 26, 30], "iscrowd": 0}, {"id": 13468416, "category_id": 21, "area": 272, "bbox": [1, 298, 23, 34], "iscrowd": 0}, {"id": 11629077, "category_id": 21, "area": 477, "bbox": [1, 302, 17, 42], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 508, "bbox": [403, 243, 28, 19], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 839, "bbox": [172, 92, 61, 195], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 80, "bbox": [96, 292, 14, 13], "iscrowd": 0}, {"id": 65422, "category_id": 103, "area": 4303, "bbox": [158, 285, 88, 68], "iscrowd": 0}, {"id": 130979, "category_id": 103, "area": 39274, "bbox": [292, 284, 274, 190], "iscrowd": 0}]}, {"image_id": "ADE_val_00001785", "file_name": "ADE_val_00001785.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 266568, "bbox": [1, 1, 682, 473], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6518, "bbox": [206, 133, 318, 353], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 2308, "bbox": [1, 501, 411, 11], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 9070, "bbox": [1, 468, 682, 44], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 653, "bbox": [3, 397, 14, 80], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 14817, "bbox": [61, 419, 239, 90], "iscrowd": 0}, {"id": 14971904, "category_id": 21, "area": 18926, "bbox": [390, 418, 293, 93], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1431, "bbox": [9, 326, 24, 164], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 7182, "bbox": [474, 297, 156, 52], "iscrowd": 0}, {"id": 2948869, "category_id": 87, "area": 3204, "bbox": [2, 306, 90, 46], "iscrowd": 0}, {"id": 4450304, "category_id": 87, "area": 15244, "bbox": [95, 300, 361, 52], "iscrowd": 0}]}, {"image_id": "ADE_val_00001786", "file_name": "ADE_val_00001786.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 224097, "bbox": [0, 0, 682, 367], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 53549, "bbox": [1, 386, 620, 125], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 25067, "bbox": [226, 389, 456, 122], "iscrowd": 0}, {"id": 11360768, "category_id": 21, "area": 5847, "bbox": [556, 331, 127, 68], "iscrowd": 0}, {"id": 15028480, "category_id": 21, "area": 6365, "bbox": [0, 322, 109, 79], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 6729, "bbox": [292, 196, 166, 42], "iscrowd": 0}, {"id": 9833721, "category_id": 44, "area": 2061, "bbox": [326, 257, 104, 21], "iscrowd": 0}, {"id": 11600613, "category_id": 44, "area": 1694, "bbox": [169, 287, 32, 57], "iscrowd": 0}, {"id": 11733747, "category_id": 44, "area": 2315, "bbox": [266, 80, 26, 109], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 5629, "bbox": [31, 213, 113, 57], "iscrowd": 0}]}, {"image_id": "ADE_val_00001787", "file_name": "ADE_val_00001787.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 192540, "bbox": [0, 0, 512, 652], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 36904, "bbox": [139, 0, 319, 160], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7667, "bbox": [308, 393, 203, 187], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 41918, "bbox": [3, 475, 507, 208], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1635, "bbox": [333, 255, 33, 51], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4090, "bbox": [219, 473, 49, 141], "iscrowd": 0}, {"id": 5832864, "category_id": 13, "area": 6628, "bbox": [108, 484, 59, 191], "iscrowd": 0}, {"id": 3145891, "category_id": 13, "area": 6299, "bbox": [294, 486, 62, 187], "iscrowd": 0}, {"id": 3145859, "category_id": 13, "area": 7023, "bbox": [350, 500, 64, 183], "iscrowd": 0}, {"id": 3932304, "category_id": 13, "area": 581, "bbox": [200, 491, 22, 49], "iscrowd": 0}, {"id": 3608443, "category_id": 13, "area": 644, "bbox": [257, 530, 22, 57], "iscrowd": 0}, {"id": 3086998, "category_id": 13, "area": 902, "bbox": [265, 487, 23, 73], "iscrowd": 0}, {"id": 3871911, "category_id": 13, "area": 6837, "bbox": [15, 500, 66, 181], "iscrowd": 0}, {"id": 5898882, "category_id": 13, "area": 341, "bbox": [453, 481, 11, 44], "iscrowd": 0}, {"id": 3932287, "category_id": 13, "area": 240, "bbox": [278, 481, 15, 31], "iscrowd": 0}, {"id": 4325794, "category_id": 13, "area": 2992, "bbox": [166, 488, 55, 126], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 6841, "bbox": [0, 244, 144, 142], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 74, "bbox": [253, 412, 7, 16], "iscrowd": 0}, {"id": 16736256, "category_id": 88, "area": 70, "bbox": [344, 417, 7, 13], "iscrowd": 0}, {"id": 15091712, "category_id": 88, "area": 987, "bbox": [385, 370, 19, 165], "iscrowd": 0}, {"id": 16731136, "category_id": 88, "area": 79, "bbox": [350, 398, 8, 17], "iscrowd": 0}, {"id": 16726528, "category_id": 88, "area": 94, "bbox": [237, 397, 9, 16], "iscrowd": 0}, {"id": 16736284, "category_id": 88, "area": 126, "bbox": [325, 418, 11, 21], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 754, "bbox": [157, 590, 18, 66], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 2043, "bbox": [471, 542, 30, 79], "iscrowd": 0}]}, {"image_id": "ADE_val_00001788", "file_name": "ADE_val_00001788.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 57835, "bbox": [1, 1, 682, 130], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 233677, "bbox": [1, 111, 682, 400], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 5175, "bbox": [41, 126, 631, 29], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 821, "bbox": [602, 106, 32, 45], "iscrowd": 0}, {"id": 4851866, "category_id": 13, "area": 228, "bbox": [624, 89, 15, 27], "iscrowd": 0}, {"id": 3997855, "category_id": 13, "area": 401, "bbox": [635, 87, 16, 51], "iscrowd": 0}, {"id": 5636218, "category_id": 13, "area": 321, "bbox": [15, 71, 23, 31], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 954, "bbox": [658, 134, 25, 55], "iscrowd": 0}, {"id": 14644224, "category_id": 21, "area": 3008, "bbox": [0, 97, 66, 60], "iscrowd": 0}, {"id": 14961687, "category_id": 21, "area": 443, "bbox": [578, 99, 33, 26], "iscrowd": 0}, {"id": 11166987, "category_id": 21, "area": 11099, "bbox": [355, 82, 201, 75], "iscrowd": 0}, {"id": 11752704, "category_id": 21, "area": 12779, "bbox": [105, 76, 219, 81], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 197, "bbox": [646, 48, 23, 9], "iscrowd": 0}, {"id": 11929599, "category_id": 44, "area": 116, "bbox": [645, 36, 14, 10], "iscrowd": 0}, {"id": 10882559, "category_id": 44, "area": 1095, "bbox": [243, 26, 59, 23], "iscrowd": 0}, {"id": 9371903, "category_id": 44, "area": 681, "bbox": [550, 16, 18, 134], "iscrowd": 0}, {"id": 11403507, "category_id": 44, "area": 3052, "bbox": [336, 2, 85, 37], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 8251, "bbox": [250, 463, 358, 48], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 3080, "bbox": [415, 32, 129, 31], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 797, "bbox": [638, 60, 27, 75], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 768, "bbox": [577, 112, 24, 39], "iscrowd": 0}]}, {"image_id": "ADE_val_00001789", "file_name": "ADE_val_00001789.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 190765, "bbox": [0, 0, 683, 324], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9070, "bbox": [1, 1, 448, 149], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 111322, "bbox": [0, 282, 682, 230], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 3365, "bbox": [446, 332, 237, 42], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 965, "bbox": [643, 312, 26, 63], "iscrowd": 0}, {"id": 3348119, "category_id": 13, "area": 45, "bbox": [406, 299, 9, 9], "iscrowd": 0}, {"id": 2883748, "category_id": 13, "area": 36, "bbox": [419, 304, 7, 7], "iscrowd": 0}, {"id": 5636265, "category_id": 13, "area": 45, "bbox": [284, 293, 8, 8], "iscrowd": 0}, {"id": 5243048, "category_id": 13, "area": 354, "bbox": [632, 315, 15, 48], "iscrowd": 0}, {"id": 2558860, "category_id": 13, "area": 354, "bbox": [662, 313, 17, 46], "iscrowd": 0}, {"id": 3997833, "category_id": 13, "area": 76, "bbox": [596, 307, 8, 24], "iscrowd": 0}, {"id": 4786571, "category_id": 13, "area": 194, "bbox": [590, 302, 14, 37], "iscrowd": 0}, {"id": 5644459, "category_id": 13, "area": 20, "bbox": [256, 293, 5, 7], "iscrowd": 0}, {"id": 3735716, "category_id": 13, "area": 16, "bbox": [260, 293, 3, 7], "iscrowd": 0}, {"id": 5247612, "category_id": 13, "area": 21, "bbox": [264, 293, 6, 7], "iscrowd": 0}, {"id": 4789159, "category_id": 13, "area": 30, "bbox": [232, 295, 8, 9], "iscrowd": 0}, {"id": 5837717, "category_id": 13, "area": 20, "bbox": [277, 293, 4, 8], "iscrowd": 0}, {"id": 5645236, "category_id": 13, "area": 14, "bbox": [215, 289, 3, 5], "iscrowd": 0}, {"id": 5775256, "category_id": 13, "area": 16, "bbox": [221, 290, 3, 7], "iscrowd": 0}, {"id": 3670181, "category_id": 13, "area": 16, "bbox": [217, 292, 5, 5], "iscrowd": 0}, {"id": 4857240, "category_id": 13, "area": 48, "bbox": [578, 309, 6, 10], "iscrowd": 0}, {"id": 4063384, "category_id": 13, "area": 29, "bbox": [177, 285, 7, 7], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1479, "bbox": [362, 303, 90, 50], "iscrowd": 0}, {"id": 14445828, "category_id": 21, "area": 4382, "bbox": [282, 294, 125, 62], "iscrowd": 0}, {"id": 14896384, "category_id": 21, "area": 4690, "bbox": [153, 283, 112, 70], "iscrowd": 0}, {"id": 15102976, "category_id": 21, "area": 851, "bbox": [67, 280, 40, 38], "iscrowd": 0}, {"id": 14767104, "category_id": 21, "area": 497, "bbox": [265, 303, 37, 25], "iscrowd": 0}, {"id": 12929536, "category_id": 21, "area": 3053, "bbox": [9, 275, 76, 61], "iscrowd": 0}, {"id": 11960320, "category_id": 21, "area": 168, "bbox": [0, 280, 17, 12], "iscrowd": 0}, {"id": 12930564, "category_id": 21, "area": 618, "bbox": [132, 285, 35, 21], "iscrowd": 0}, {"id": 12154368, "category_id": 21, "area": 45, "bbox": [0, 276, 11, 7], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 632, "bbox": [229, 298, 53, 25], "iscrowd": 0}, {"id": 1946874, "category_id": 33, "area": 2425, "bbox": [430, 314, 253, 40], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 323, "bbox": [563, 270, 19, 17], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 574, "bbox": [244, 283, 43, 18], "iscrowd": 0}, {"id": 1791, "category_id": 84, "area": 402, "bbox": [302, 282, 35, 22], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1994, "bbox": [506, 67, 110, 294], "iscrowd": 0}, {"id": 16728324, "category_id": 88, "area": 74, "bbox": [300, 247, 14, 54], "iscrowd": 0}, {"id": 16734464, "category_id": 88, "area": 26, "bbox": [87, 253, 4, 10], "iscrowd": 0}, {"id": 15353600, "category_id": 88, "area": 35, "bbox": [97, 252, 6, 10], "iscrowd": 0}, {"id": 16726016, "category_id": 88, "area": 38, "bbox": [108, 250, 5, 10], "iscrowd": 0}, {"id": 14833408, "category_id": 88, "area": 37, "bbox": [123, 247, 4, 11], "iscrowd": 0}, {"id": 16012316, "category_id": 88, "area": 45, "bbox": [100, 205, 23, 22], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 631, "bbox": [99, 279, 33, 24], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 54, "bbox": [472, 344, 11, 7], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 293, "bbox": [591, 199, 14, 31], "iscrowd": 0}, {"id": 15926046, "category_id": 137, "area": 1778, "bbox": [0, 100, 237, 54], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 359, "bbox": [533, 326, 17, 29], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 45, "bbox": [64, 266, 7, 10], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 73, "bbox": [4, 252, 8, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001790", "file_name": "ADE_val_00001790.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 165151, "bbox": [1, 0, 682, 334], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 18135, "bbox": [250, 0, 133, 259], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1340, "bbox": [82, 198, 247, 79], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 90979, "bbox": [0, 280, 683, 232], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 16695, "bbox": [83, 277, 600, 124], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 48, "bbox": [114, 277, 17, 3], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2886, "bbox": [447, 273, 47, 115], "iscrowd": 0}, {"id": 2955167, "category_id": 13, "area": 1927, "bbox": [421, 283, 28, 98], "iscrowd": 0}, {"id": 4654503, "category_id": 13, "area": 886, "bbox": [384, 273, 22, 65], "iscrowd": 0}, {"id": 3014827, "category_id": 13, "area": 875, "bbox": [406, 272, 19, 66], "iscrowd": 0}, {"id": 3546240, "category_id": 13, "area": 94, "bbox": [77, 271, 9, 18], "iscrowd": 0}, {"id": 4393134, "category_id": 13, "area": 66, "bbox": [104, 276, 6, 18], "iscrowd": 0}, {"id": 3735705, "category_id": 13, "area": 16161, "bbox": [521, 258, 95, 253], "iscrowd": 0}, {"id": 3473565, "category_id": 13, "area": 14425, "bbox": [608, 252, 74, 259], "iscrowd": 0}, {"id": 3866777, "category_id": 13, "area": 987, "bbox": [357, 270, 25, 68], "iscrowd": 0}, {"id": 2752680, "category_id": 13, "area": 745, "bbox": [340, 276, 19, 62], "iscrowd": 0}, {"id": 2038946, "category_id": 13, "area": 515, "bbox": [588, 271, 25, 36], "iscrowd": 0}, {"id": 2953854, "category_id": 13, "area": 119, "bbox": [322, 276, 8, 23], "iscrowd": 0}, {"id": 4982417, "category_id": 13, "area": 141, "bbox": [332, 278, 10, 24], "iscrowd": 0}, {"id": 3080329, "category_id": 13, "area": 848, "bbox": [509, 267, 17, 68], "iscrowd": 0}, {"id": 5439638, "category_id": 13, "area": 426, "bbox": [529, 279, 26, 30], "iscrowd": 0}, {"id": 3875469, "category_id": 13, "area": 143, "bbox": [311, 274, 8, 26], "iscrowd": 0}, {"id": 5636273, "category_id": 13, "area": 45, "bbox": [151, 272, 6, 15], "iscrowd": 0}, {"id": 3805066, "category_id": 13, "area": 22, "bbox": [51, 267, 6, 7], "iscrowd": 0}, {"id": 5707940, "category_id": 13, "area": 22, "bbox": [204, 275, 4, 10], "iscrowd": 0}, {"id": 5119633, "category_id": 13, "area": 14, "bbox": [216, 276, 2, 7], "iscrowd": 0}, {"id": 5840765, "category_id": 13, "area": 20, "bbox": [140, 274, 3, 8], "iscrowd": 0}, {"id": 3014818, "category_id": 13, "area": 38, "bbox": [159, 273, 5, 14], "iscrowd": 0}, {"id": 3735724, "category_id": 13, "area": 16, "bbox": [219, 276, 3, 7], "iscrowd": 0}, {"id": 5701775, "category_id": 13, "area": 35, "bbox": [87, 271, 3, 18], "iscrowd": 0}, {"id": 5111929, "category_id": 13, "area": 28, "bbox": [84, 271, 3, 19], "iscrowd": 0}, {"id": 4325543, "category_id": 13, "area": 33, "bbox": [146, 274, 4, 15], "iscrowd": 0}, {"id": 3997855, "category_id": 13, "area": 20, "bbox": [331, 277, 4, 10], "iscrowd": 0}, {"id": 3087537, "category_id": 13, "area": 76, "bbox": [458, 271, 12, 19], "iscrowd": 0}, {"id": 4718736, "category_id": 13, "area": 140, "bbox": [447, 277, 10, 24], "iscrowd": 0}, {"id": 5970317, "category_id": 13, "area": 39, "bbox": [455, 276, 6, 15], "iscrowd": 0}, {"id": 5571756, "category_id": 13, "area": 67, "bbox": [442, 272, 8, 15], "iscrowd": 0}, {"id": 5381764, "category_id": 13, "area": 28, "bbox": [431, 278, 7, 7], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 4813, "bbox": [0, 272, 99, 64], "iscrowd": 0}, {"id": 11946496, "category_id": 21, "area": 504, "bbox": [171, 275, 34, 19], "iscrowd": 0}, {"id": 11422218, "category_id": 21, "area": 229, "bbox": [237, 277, 21, 14], "iscrowd": 0}, {"id": 12151808, "category_id": 21, "area": 168, "bbox": [269, 277, 17, 13], "iscrowd": 0}, {"id": 13793818, "category_id": 21, "area": 126, "bbox": [290, 279, 14, 11], "iscrowd": 0}, {"id": 11173632, "category_id": 21, "area": 63, "bbox": [262, 278, 9, 10], "iscrowd": 0}, {"id": 11226885, "category_id": 21, "area": 63, "bbox": [256, 275, 9, 9], "iscrowd": 0}, {"id": 14056199, "category_id": 21, "area": 120, "bbox": [164, 275, 15, 17], "iscrowd": 0}, {"id": 13331473, "category_id": 21, "area": 479, "bbox": [108, 275, 37, 19], "iscrowd": 0}, {"id": 14312704, "category_id": 21, "area": 62, "bbox": [230, 278, 11, 9], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 70, "bbox": [275, 271, 12, 8], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 32, "bbox": [218, 264, 13, 6], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 339, "bbox": [279, 157, 35, 136], "iscrowd": 0}, {"id": 16737043, "category_id": 88, "area": 21, "bbox": [242, 242, 13, 24], "iscrowd": 0}, {"id": 16737536, "category_id": 88, "area": 75, "bbox": [278, 166, 30, 7], "iscrowd": 0}, {"id": 16722704, "category_id": 88, "area": 43, "bbox": [149, 206, 21, 12], "iscrowd": 0}, {"id": 16278784, "category_id": 88, "area": 33, "bbox": [148, 209, 26, 16], "iscrowd": 0}, {"id": 14826013, "category_id": 88, "area": 78, "bbox": [210, 230, 16, 55], "iscrowd": 0}, {"id": 16004096, "category_id": 88, "area": 89, "bbox": [411, 240, 8, 13], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 76, "bbox": [371, 247, 7, 33], "iscrowd": 0}, {"id": 16717343, "category_id": 137, "area": 2856, "bbox": [641, 124, 42, 129], "iscrowd": 0}, {"id": 15138874, "category_id": 137, "area": 33, "bbox": [292, 256, 17, 6], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1712, "bbox": [287, 291, 29, 63], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 808, "bbox": [352, 136, 34, 49], "iscrowd": 0}, {"id": 16711784, "category_id": 150, "area": 220, "bbox": [159, 212, 14, 31], "iscrowd": 0}, {"id": 16718405, "category_id": 150, "area": 158, "bbox": [173, 215, 15, 30], "iscrowd": 0}, {"id": 16713295, "category_id": 150, "area": 155, "bbox": [222, 249, 15, 18], "iscrowd": 0}, {"id": 16718407, "category_id": 150, "area": 41, "bbox": [324, 227, 7, 12], "iscrowd": 0}, {"id": 15667049, "category_id": 150, "area": 92, "bbox": [321, 246, 14, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001791", "file_name": "ADE_val_00001791.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 48058, "bbox": [1, 0, 681, 273], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 32206, "bbox": [1, 1, 558, 179], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 90716, "bbox": [29, 0, 652, 315], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 95884, "bbox": [1, 265, 682, 247], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 42046, "bbox": [152, 265, 530, 151], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 13780, "bbox": [359, 255, 323, 89], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3158, "bbox": [375, 254, 55, 125], "iscrowd": 0}, {"id": 3932328, "category_id": 13, "area": 250, "bbox": [348, 252, 11, 38], "iscrowd": 0}, {"id": 3211405, "category_id": 13, "area": 302, "bbox": [408, 247, 16, 38], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 621, "bbox": [517, 251, 41, 21], "iscrowd": 0}, {"id": 12612352, "category_id": 21, "area": 412, "bbox": [548, 259, 28, 30], "iscrowd": 0}, {"id": 12808707, "category_id": 21, "area": 1239, "bbox": [562, 260, 52, 32], "iscrowd": 0}, {"id": 15102720, "category_id": 21, "area": 381, "bbox": [603, 250, 25, 27], "iscrowd": 0}, {"id": 11428352, "category_id": 21, "area": 3476, "bbox": [601, 265, 82, 52], "iscrowd": 0}, {"id": 13402894, "category_id": 21, "area": 658, "bbox": [1, 264, 35, 24], "iscrowd": 0}, {"id": 14242560, "category_id": 21, "area": 171, "bbox": [20, 263, 24, 13], "iscrowd": 0}, {"id": 13654784, "category_id": 21, "area": 172, "bbox": [306, 259, 17, 14], "iscrowd": 0}, {"id": 12610576, "category_id": 21, "area": 507, "bbox": [625, 253, 50, 15], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 627, "bbox": [216, 80, 45, 15], "iscrowd": 0}, {"id": 9502965, "category_id": 44, "area": 617, "bbox": [215, 61, 45, 15], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 560, "bbox": [173, 255, 33, 21], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1935, "bbox": [259, 3, 22, 337], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 495, "bbox": [98, 62, 14, 38], "iscrowd": 0}, {"id": 16259359, "category_id": 137, "area": 599, "bbox": [283, 136, 19, 40], "iscrowd": 0}, {"id": 16253464, "category_id": 137, "area": 923, "bbox": [277, 177, 22, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00001792", "file_name": "ADE_val_00001792.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 212312, "bbox": [1, 1, 682, 402], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 1350, "bbox": [146, 1, 149, 19], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 13239, "bbox": [186, 157, 496, 180], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 98817, "bbox": [1, 332, 682, 179], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 8996, "bbox": [1, 333, 585, 88], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 3746, "bbox": [580, 308, 103, 56], "iscrowd": 0}, {"id": 14253085, "category_id": 21, "area": 1657, "bbox": [210, 311, 76, 30], "iscrowd": 0}, {"id": 14315776, "category_id": 21, "area": 1457, "bbox": [161, 304, 63, 34], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 325, "bbox": [485, 247, 21, 31], "iscrowd": 0}, {"id": 8131839, "category_id": 44, "area": 373, "bbox": [562, 251, 8, 98], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 48, "bbox": [419, 96, 9, 7], "iscrowd": 0}, {"id": 39167, "category_id": 83, "area": 36, "bbox": [399, 161, 8, 6], "iscrowd": 0}, {"id": 45311, "category_id": 83, "area": 36, "bbox": [544, 139, 8, 5], "iscrowd": 0}, {"id": 45820, "category_id": 83, "area": 52, "bbox": [648, 127, 9, 6], "iscrowd": 0}, {"id": 51455, "category_id": 83, "area": 35, "bbox": [345, 20, 8, 7], "iscrowd": 0}, {"id": 827626, "category_id": 83, "area": 61, "bbox": [419, 38, 10, 8], "iscrowd": 0}, {"id": 1028095, "category_id": 83, "area": 52, "bbox": [351, 71, 8, 8], "iscrowd": 0}, {"id": 1552869, "category_id": 83, "area": 60, "bbox": [349, 123, 9, 8], "iscrowd": 0}, {"id": 769780, "category_id": 83, "area": 51, "bbox": [383, 172, 8, 9], "iscrowd": 0}, {"id": 1480703, "category_id": 83, "area": 49, "bbox": [426, 224, 8, 7], "iscrowd": 0}, {"id": 48110, "category_id": 83, "area": 81, "bbox": [649, 49, 11, 9], "iscrowd": 0}, {"id": 1094399, "category_id": 83, "area": 39, "bbox": [535, 213, 8, 5], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1161, "bbox": [488, 67, 55, 278], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 105, "bbox": [149, 316, 8, 15], "iscrowd": 0}, {"id": 15728785, "category_id": 139, "area": 584, "bbox": [511, 317, 22, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00001793", "file_name": "ADE_val_00001793.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 110196, "bbox": [1, 1, 682, 325], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 1860, "bbox": [344, 0, 27, 144], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 86770, "bbox": [16, 0, 656, 449], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 55518, "bbox": [1, 306, 682, 206], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 610, "bbox": [97, 311, 70, 15], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 33273, "bbox": [1, 313, 590, 199], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 85, "bbox": [86, 289, 12, 17], "iscrowd": 0}, {"id": 3080335, "category_id": 13, "area": 1305, "bbox": [649, 282, 33, 55], "iscrowd": 0}, {"id": 5312377, "category_id": 13, "area": 849, "bbox": [418, 281, 29, 46], "iscrowd": 0}, {"id": 5250447, "category_id": 13, "area": 131, "bbox": [331, 293, 7, 24], "iscrowd": 0}, {"id": 5706377, "category_id": 13, "area": 132, "bbox": [340, 292, 8, 24], "iscrowd": 0}, {"id": 3604635, "category_id": 13, "area": 108, "bbox": [347, 291, 7, 25], "iscrowd": 0}, {"id": 5178751, "category_id": 13, "area": 123, "bbox": [353, 291, 6, 25], "iscrowd": 0}, {"id": 3480455, "category_id": 13, "area": 74, "bbox": [358, 292, 5, 23], "iscrowd": 0}, {"id": 5963926, "category_id": 13, "area": 76, "bbox": [273, 288, 10, 14], "iscrowd": 0}, {"id": 3474569, "category_id": 13, "area": 126, "bbox": [170, 288, 9, 22], "iscrowd": 0}, {"id": 3932323, "category_id": 13, "area": 131, "bbox": [163, 289, 8, 23], "iscrowd": 0}, {"id": 4128893, "category_id": 13, "area": 88, "bbox": [404, 291, 5, 28], "iscrowd": 0}, {"id": 3672492, "category_id": 13, "area": 46, "bbox": [288, 292, 5, 13], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 12216, "bbox": [160, 298, 202, 88], "iscrowd": 0}, {"id": 12219648, "category_id": 21, "area": 1099, "bbox": [0, 296, 29, 47], "iscrowd": 0}, {"id": 13462784, "category_id": 21, "area": 560, "bbox": [78, 293, 24, 42], "iscrowd": 0}, {"id": 11684864, "category_id": 21, "area": 503, "bbox": [165, 293, 110, 25], "iscrowd": 0}, {"id": 12681488, "category_id": 21, "area": 361, "bbox": [306, 292, 25, 18], "iscrowd": 0}, {"id": 11761179, "category_id": 21, "area": 132, "bbox": [17, 294, 13, 18], "iscrowd": 0}, {"id": 11297301, "category_id": 21, "area": 24435, "bbox": [399, 299, 283, 129], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 2704, "bbox": [84, 119, 67, 193], "iscrowd": 0}, {"id": 16736512, "category_id": 73, "area": 9860, "bbox": [305, 16, 168, 306], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 164, "bbox": [160, 250, 7, 63], "iscrowd": 0}, {"id": 15228935, "category_id": 88, "area": 20, "bbox": [324, 235, 11, 5], "iscrowd": 0}, {"id": 16267264, "category_id": 88, "area": 248, "bbox": [483, 234, 9, 70], "iscrowd": 0}, {"id": 16723715, "category_id": 88, "area": 498, "bbox": [96, 175, 33, 141], "iscrowd": 0}, {"id": 15096832, "category_id": 88, "area": 343, "bbox": [196, 214, 12, 84], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 301, "bbox": [82, 286, 27, 23], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 82, "bbox": [179, 293, 14, 14], "iscrowd": 0}, {"id": 16711827, "category_id": 117, "area": 663, "bbox": [390, 293, 72, 81], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 82, "bbox": [85, 297, 14, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001794", "file_name": "ADE_val_00001794.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 166157, "bbox": [0, 0, 683, 309], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 19567, "bbox": [79, 120, 429, 219], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 98301, "bbox": [0, 344, 682, 168], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1843, "bbox": [367, 308, 73, 39], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 291, "bbox": [660, 272, 16, 28], "iscrowd": 0}, {"id": 5570706, "category_id": 13, "area": 170, "bbox": [358, 280, 11, 23], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 12774, "bbox": [417, 279, 219, 79], "iscrowd": 0}, {"id": 13984007, "category_id": 21, "area": 33000, "bbox": [2, 265, 335, 135], "iscrowd": 0}, {"id": 13595904, "category_id": 21, "area": 2399, "bbox": [310, 282, 60, 67], "iscrowd": 0}, {"id": 12087041, "category_id": 21, "area": 1740, "bbox": [639, 296, 44, 52], "iscrowd": 0}, {"id": 11297559, "category_id": 21, "area": 2762, "bbox": [1, 276, 76, 52], "iscrowd": 0}]}, {"image_id": "ADE_val_00001795", "file_name": "ADE_val_00001795.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 157412, "bbox": [19, 1, 663, 368], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 6631, "bbox": [1, 1, 113, 122], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 51799, "bbox": [1, 1, 681, 332], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 85107, "bbox": [1, 341, 681, 170], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1024, "bbox": [370, 368, 86, 24], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 48, "bbox": [402, 351, 23, 4], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 108, "bbox": [16, 207, 6, 21], "iscrowd": 0}, {"id": 15785972, "category_id": 9, "area": 125, "bbox": [15, 245, 6, 22], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 20, "bbox": [13, 303, 7, 11], "iscrowd": 0}, {"id": 4259983, "category_id": 13, "area": 406, "bbox": [193, 303, 17, 34], "iscrowd": 0}, {"id": 3413403, "category_id": 13, "area": 81, "bbox": [54, 302, 8, 15], "iscrowd": 0}, {"id": 2621564, "category_id": 13, "area": 81, "bbox": [39, 302, 11, 14], "iscrowd": 0}, {"id": 2363572, "category_id": 13, "area": 109, "bbox": [217, 306, 7, 25], "iscrowd": 0}, {"id": 4333230, "category_id": 13, "area": 92, "bbox": [14, 301, 12, 18], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 10210, "bbox": [197, 321, 196, 72], "iscrowd": 0}, {"id": 14121479, "category_id": 21, "area": 6867, "bbox": [74, 305, 124, 69], "iscrowd": 0}, {"id": 11164690, "category_id": 21, "area": 2430, "bbox": [5, 315, 73, 43], "iscrowd": 0}, {"id": 14969105, "category_id": 21, "area": 399, "bbox": [0, 307, 18, 34], "iscrowd": 0}, {"id": 12940032, "category_id": 21, "area": 1116, "bbox": [1, 479, 66, 33], "iscrowd": 0}, {"id": 11828224, "category_id": 21, "area": 13871, "bbox": [427, 325, 256, 82], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 546, "bbox": [399, 209, 16, 41], "iscrowd": 0}, {"id": 8983807, "category_id": 44, "area": 305, "bbox": [92, 271, 17, 19], "iscrowd": 0}, {"id": 9116134, "category_id": 44, "area": 185, "bbox": [41, 272, 17, 13], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 357, "bbox": [57, 247, 49, 23], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 708, "bbox": [217, 217, 19, 111], "iscrowd": 0}, {"id": 16729344, "category_id": 88, "area": 254, "bbox": [23, 251, 11, 63], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 144, "bbox": [77, 297, 22, 7], "iscrowd": 0}, {"id": 1572767, "category_id": 124, "area": 254, "bbox": [247, 287, 38, 9], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 448, "bbox": [401, 355, 28, 18], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 381, "bbox": [284, 274, 19, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001796", "file_name": "ADE_val_00001796.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 137307, "bbox": [0, 0, 683, 331], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 19102, "bbox": [530, 1, 146, 221], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 107125, "bbox": [0, 335, 680, 177], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 12082, "bbox": [0, 312, 683, 53], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 36628, "bbox": [418, 134, 264, 199], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 19189, "bbox": [32, 259, 255, 108], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 6106, "bbox": [301, 135, 121, 62], "iscrowd": 0}, {"id": 11263, "category_id": 39, "area": 6055, "bbox": [154, 140, 147, 121], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 76, "bbox": [198, 22, 15, 7], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1963, "bbox": [245, 0, 12, 246], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1298, "bbox": [247, 239, 31, 51], "iscrowd": 0}]}, {"image_id": "ADE_val_00001797", "file_name": "ADE_val_00001797.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 214888, "bbox": [1, 1, 766, 370], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 53464, "bbox": [104, 405, 664, 107], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 993, "bbox": [251, 396, 428, 36], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 13897, "bbox": [603, 229, 129, 167], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 26512, "bbox": [1, 307, 150, 204], "iscrowd": 0}, {"id": 4391039, "category_id": 13, "area": 3777, "bbox": [135, 299, 45, 160], "iscrowd": 0}, {"id": 5444230, "category_id": 13, "area": 4141, "bbox": [176, 298, 49, 164], "iscrowd": 0}, {"id": 3808387, "category_id": 13, "area": 772, "bbox": [328, 380, 36, 67], "iscrowd": 0}, {"id": 4587690, "category_id": 13, "area": 582, "bbox": [601, 295, 19, 52], "iscrowd": 0}, {"id": 4592789, "category_id": 13, "area": 954, "bbox": [731, 278, 20, 81], "iscrowd": 0}, {"id": 4718732, "category_id": 13, "area": 270, "bbox": [513, 292, 17, 28], "iscrowd": 0}, {"id": 3479466, "category_id": 13, "area": 368, "bbox": [574, 303, 22, 37], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4181, "bbox": [341, 289, 45, 113], "iscrowd": 0}, {"id": 4061729, "category_id": 15, "area": 3676, "bbox": [253, 288, 42, 112], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2440, "bbox": [531, 215, 42, 116], "iscrowd": 0}, {"id": 10755821, "category_id": 44, "area": 736, "bbox": [467, 206, 26, 30], "iscrowd": 0}, {"id": 10748159, "category_id": 44, "area": 373, "bbox": [460, 262, 16, 24], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 30807, "bbox": [255, 283, 335, 160], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 908, "bbox": [309, 349, 26, 47], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 2522, "bbox": [222, 335, 37, 102], "iscrowd": 0}, {"id": 14942386, "category_id": 117, "area": 3849, "bbox": [585, 343, 70, 80], "iscrowd": 0}, {"id": 16718512, "category_id": 117, "area": 3592, "bbox": [673, 324, 69, 93], "iscrowd": 0}, {"id": 16711861, "category_id": 117, "area": 1866, "bbox": [730, 336, 38, 75], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 7183, "bbox": [82, 181, 179, 43], "iscrowd": 0}, {"id": 65391, "category_id": 124, "area": 1838, "bbox": [371, 205, 85, 24], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1067, "bbox": [259, 401, 50, 38], "iscrowd": 0}]}, {"image_id": "ADE_val_00001798", "file_name": "ADE_val_00001798.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 114153, "bbox": [1, 1, 682, 358], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 92473, "bbox": [1, 0, 682, 323], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 86903, "bbox": [1, 368, 682, 143], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1171, "bbox": [509, 359, 75, 30], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1438, "bbox": [531, 309, 40, 53], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3466, "bbox": [565, 271, 56, 133], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1629, "bbox": [1, 313, 44, 57], "iscrowd": 0}, {"id": 13519364, "category_id": 21, "area": 17915, "bbox": [289, 291, 239, 98], "iscrowd": 0}, {"id": 13205766, "category_id": 21, "area": 5025, "bbox": [21, 318, 122, 58], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 1145, "bbox": [20, 298, 47, 37], "iscrowd": 0}, {"id": 65471, "category_id": 103, "area": 8890, "bbox": [601, 243, 82, 160], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 426, "bbox": [541, 361, 33, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001799", "file_name": "ADE_val_00001799.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 238652, "bbox": [0, 0, 683, 510], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 1073, "bbox": [0, 0, 25, 73], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 74147, "bbox": [0, 284, 633, 228], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 16983, "bbox": [20, 230, 662, 247], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4623, "bbox": [105, 247, 60, 155], "iscrowd": 0}, {"id": 5448599, "category_id": 13, "area": 920, "bbox": [0, 256, 26, 63], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 511, "bbox": [95, 186, 25, 27], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 324, "bbox": [210, 27, 56, 18], "iscrowd": 0}, {"id": 16729088, "category_id": 88, "area": 195, "bbox": [155, 70, 47, 14], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 696, "bbox": [150, 333, 21, 47], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 7129, "bbox": [342, 99, 143, 78], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 161, "bbox": [51, 293, 15, 13], "iscrowd": 0}, {"id": 15992575, "category_id": 126, "area": 66, "bbox": [80, 290, 7, 14], "iscrowd": 0}, {"id": 16455935, "category_id": 126, "area": 100, "bbox": [25, 287, 12, 10], "iscrowd": 0}, {"id": 15997694, "category_id": 126, "area": 2563, "bbox": [626, 451, 56, 61], "iscrowd": 0}]}, {"image_id": "ADE_val_00001800", "file_name": "ADE_val_00001800.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 10130, "bbox": [577, 208, 106, 127], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 192451, "bbox": [2, 1, 655, 341], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 11514, "bbox": [568, 1, 115, 161], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 87243, "bbox": [1, 377, 681, 135], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 31772, "bbox": [0, 322, 680, 61], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 683, "bbox": [68, 189, 22, 33], "iscrowd": 0}, {"id": 9966079, "category_id": 44, "area": 1217, "bbox": [572, 289, 51, 48], "iscrowd": 0}, {"id": 10685695, "category_id": 44, "area": 338, "bbox": [403, 231, 15, 25], "iscrowd": 0}, {"id": 9306367, "category_id": 44, "area": 551, "bbox": [400, 167, 16, 39], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 3515, "bbox": [657, 2, 15, 363], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 4880, "bbox": [416, 171, 161, 32], "iscrowd": 0}]}, {"image_id": "ADE_val_00001801", "file_name": "ADE_val_00001801.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 201745, "bbox": [1, 65, 682, 342], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 60575, "bbox": [1, 1, 682, 101], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 61613, "bbox": [1, 415, 682, 97], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 7126, "bbox": [1, 401, 682, 23], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3290, "bbox": [69, 291, 556, 69], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 12852, "bbox": [388, 347, 199, 86], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 47, "bbox": [457, 253, 6, 9], "iscrowd": 0}, {"id": 16343821, "category_id": 88, "area": 103, "bbox": [543, 314, 10, 18], "iscrowd": 0}, {"id": 16735232, "category_id": 88, "area": 52, "bbox": [534, 257, 7, 12], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 83, "bbox": [65, 319, 15, 8], "iscrowd": 0}, {"id": 15992319, "category_id": 126, "area": 83, "bbox": [138, 319, 10, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00001802", "file_name": "ADE_val_00001802.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3551, "bbox": [354, 334, 328, 22], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 74191, "bbox": [0, 112, 683, 242], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 132604, "bbox": [1, 1, 682, 305], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 14279, "bbox": [67, 248, 616, 105], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 8416, "bbox": [4, 343, 679, 31], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 25694, "bbox": [1, 365, 681, 81], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 67480, "bbox": [1, 347, 682, 164], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 1344, "bbox": [138, 303, 114, 30], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2341, "bbox": [386, 331, 288, 15], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 142, "bbox": [177, 336, 16, 26], "iscrowd": 0}, {"id": 3738547, "category_id": 13, "area": 66, "bbox": [366, 337, 5, 17], "iscrowd": 0}, {"id": 3801246, "category_id": 13, "area": 254, "bbox": [0, 339, 13, 33], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 107, "bbox": [229, 343, 15, 12], "iscrowd": 0}, {"id": 14578188, "category_id": 21, "area": 309, "bbox": [247, 338, 27, 17], "iscrowd": 0}, {"id": 13527296, "category_id": 21, "area": 183, "bbox": [272, 339, 16, 15], "iscrowd": 0}, {"id": 13848064, "category_id": 21, "area": 151, "bbox": [317, 341, 15, 15], "iscrowd": 0}, {"id": 11892496, "category_id": 21, "area": 195, "bbox": [302, 337, 17, 17], "iscrowd": 0}, {"id": 11684096, "category_id": 21, "area": 275, "bbox": [330, 340, 22, 15], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 624, "bbox": [160, 288, 25, 83], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 1619, "bbox": [179, 277, 35, 75], "iscrowd": 0}, {"id": 15097344, "category_id": 73, "area": 815, "bbox": [106, 226, 24, 130], "iscrowd": 0}, {"id": 16734472, "category_id": 73, "area": 816, "bbox": [122, 237, 35, 60], "iscrowd": 0}, {"id": 16737024, "category_id": 73, "area": 1466, "bbox": [67, 212, 48, 143], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 39, "bbox": [145, 277, 26, 34], "iscrowd": 0}, {"id": 14757893, "category_id": 88, "area": 46, "bbox": [285, 271, 29, 57], "iscrowd": 0}, {"id": 16078857, "category_id": 88, "area": 32, "bbox": [335, 315, 5, 23], "iscrowd": 0}, {"id": 16736263, "category_id": 88, "area": 164, "bbox": [371, 227, 39, 131], "iscrowd": 0}, {"id": 15215118, "category_id": 88, "area": 24, "bbox": [247, 299, 16, 7], "iscrowd": 0}, {"id": 16726528, "category_id": 88, "area": 35, "bbox": [148, 294, 18, 17], "iscrowd": 0}, {"id": 16730880, "category_id": 88, "area": 19, "bbox": [229, 312, 11, 8], "iscrowd": 0}, {"id": 15813899, "category_id": 88, "area": 275, "bbox": [105, 238, 43, 121], "iscrowd": 0}, {"id": 16734210, "category_id": 88, "area": 72, "bbox": [262, 288, 20, 48], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 496, "bbox": [92, 406, 16, 32], "iscrowd": 0}, {"id": 15668766, "category_id": 94, "area": 441, "bbox": [248, 404, 17, 31], "iscrowd": 0}, {"id": 16711740, "category_id": 94, "area": 439, "bbox": [402, 401, 16, 30], "iscrowd": 0}, {"id": 16718661, "category_id": 94, "area": 348, "bbox": [530, 395, 19, 28], "iscrowd": 0}, {"id": 16711703, "category_id": 94, "area": 440, "bbox": [523, 404, 17, 31], "iscrowd": 0}, {"id": 16711727, "category_id": 94, "area": 726, "bbox": [499, 418, 22, 41], "iscrowd": 0}, {"id": 16711756, "category_id": 94, "area": 1356, "bbox": [467, 445, 26, 56], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 512, "bbox": [621, 289, 23, 76], "iscrowd": 0}, {"id": 16711705, "category_id": 137, "area": 262, "bbox": [502, 306, 15, 53], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 108, "bbox": [528, 345, 9, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001803", "file_name": "ADE_val_00001803.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 151667, "bbox": [0, 0, 683, 394], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 33659, "bbox": [347, 0, 271, 293], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 12160, "bbox": [383, 170, 235, 141], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 95860, "bbox": [0, 308, 589, 203], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 15758, "bbox": [1, 313, 682, 199], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 288, "bbox": [478, 270, 23, 20], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 220, "bbox": [604, 313, 11, 32], "iscrowd": 0}, {"id": 4785587, "category_id": 13, "area": 33, "bbox": [589, 315, 4, 10], "iscrowd": 0}, {"id": 4653215, "category_id": 13, "area": 79, "bbox": [505, 309, 7, 22], "iscrowd": 0}, {"id": 5374106, "category_id": 13, "area": 27, "bbox": [480, 309, 4, 12], "iscrowd": 0}, {"id": 2689682, "category_id": 13, "area": 24, "bbox": [440, 308, 4, 10], "iscrowd": 0}, {"id": 4849786, "category_id": 13, "area": 58, "bbox": [386, 308, 5, 18], "iscrowd": 0}, {"id": 4069008, "category_id": 13, "area": 59, "bbox": [391, 309, 6, 16], "iscrowd": 0}, {"id": 5046445, "category_id": 13, "area": 51, "bbox": [400, 310, 4, 19], "iscrowd": 0}, {"id": 3015089, "category_id": 13, "area": 41, "bbox": [404, 309, 4, 19], "iscrowd": 0}, {"id": 5835914, "category_id": 13, "area": 57, "bbox": [407, 310, 4, 19], "iscrowd": 0}, {"id": 3347874, "category_id": 13, "area": 51, "bbox": [411, 310, 5, 18], "iscrowd": 0}, {"id": 3611031, "category_id": 13, "area": 207, "bbox": [488, 310, 14, 30], "iscrowd": 0}, {"id": 2818472, "category_id": 13, "area": 133, "bbox": [322, 308, 10, 25], "iscrowd": 0}, {"id": 2367352, "category_id": 13, "area": 2334, "bbox": [661, 304, 22, 145], "iscrowd": 0}, {"id": 5046411, "category_id": 13, "area": 38, "bbox": [592, 313, 7, 10], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 72, "bbox": [511, 311, 11, 8], "iscrowd": 0}, {"id": 14315520, "category_id": 21, "area": 27, "bbox": [463, 310, 10, 7], "iscrowd": 0}, {"id": 15097088, "category_id": 21, "area": 232, "bbox": [445, 310, 27, 11], "iscrowd": 0}, {"id": 14184192, "category_id": 21, "area": 19, "bbox": [443, 310, 5, 9], "iscrowd": 0}, {"id": 13591040, "category_id": 21, "area": 112, "bbox": [428, 307, 13, 13], "iscrowd": 0}, {"id": 13262350, "category_id": 21, "area": 20, "bbox": [573, 309, 5, 5], "iscrowd": 0}, {"id": 11891473, "category_id": 21, "area": 30, "bbox": [559, 310, 10, 4], "iscrowd": 0}, {"id": 13794071, "category_id": 21, "area": 20, "bbox": [551, 306, 8, 5], "iscrowd": 0}, {"id": 12289024, "category_id": 21, "area": 26, "bbox": [551, 310, 6, 5], "iscrowd": 0}, {"id": 13134359, "category_id": 21, "area": 28, "bbox": [544, 308, 11, 4], "iscrowd": 0}, {"id": 15092992, "category_id": 21, "area": 39, "bbox": [544, 311, 9, 7], "iscrowd": 0}, {"id": 12870144, "category_id": 21, "area": 74, "bbox": [532, 312, 11, 8], "iscrowd": 0}, {"id": 12940308, "category_id": 21, "area": 97, "bbox": [562, 314, 14, 12], "iscrowd": 0}, {"id": 12543769, "category_id": 21, "area": 465, "bbox": [543, 316, 26, 22], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 5272, "bbox": [523, 0, 91, 69], "iscrowd": 0}, {"id": 11145207, "category_id": 44, "area": 200, "bbox": [120, 297, 12, 18], "iscrowd": 0}, {"id": 11928063, "category_id": 44, "area": 109, "bbox": [318, 275, 12, 10], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 90, "bbox": [578, 304, 10, 10], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 699, "bbox": [133, 97, 61, 221], "iscrowd": 0}, {"id": 16722432, "category_id": 88, "area": 196, "bbox": [384, 216, 31, 113], "iscrowd": 0}, {"id": 15877888, "category_id": 88, "area": 375, "bbox": [556, 174, 47, 171], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 20283, "bbox": [617, 1, 46, 510], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 91, "bbox": [588, 305, 11, 10], "iscrowd": 0}, {"id": 65463, "category_id": 103, "area": 145, "bbox": [381, 301, 27, 18], "iscrowd": 0}, {"id": 1570210, "category_id": 103, "area": 146, "bbox": [597, 313, 19, 15], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 249, "bbox": [487, 323, 17, 25], "iscrowd": 0}, {"id": 15208374, "category_id": 117, "area": 1058, "bbox": [1, 312, 48, 41], "iscrowd": 0}, {"id": 15663257, "category_id": 117, "area": 794, "bbox": [103, 315, 37, 35], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 101, "bbox": [590, 322, 9, 15], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 30, "bbox": [535, 258, 3, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00001804", "file_name": "ADE_val_00001804.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 157910, "bbox": [0, 1, 683, 390], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 29051, "bbox": [235, 1, 306, 176], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 57748, "bbox": [126, 74, 554, 332], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 70405, "bbox": [0, 366, 683, 145], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 4920, "bbox": [0, 353, 547, 65], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 449, "bbox": [241, 357, 55, 13], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 298, "bbox": [260, 359, 14, 43], "iscrowd": 0}, {"id": 5701808, "category_id": 13, "area": 151, "bbox": [520, 358, 8, 36], "iscrowd": 0}, {"id": 5177485, "category_id": 13, "area": 148, "bbox": [322, 357, 16, 33], "iscrowd": 0}, {"id": 5966227, "category_id": 13, "area": 407, "bbox": [524, 355, 17, 38], "iscrowd": 0}, {"id": 5111987, "category_id": 13, "area": 285, "bbox": [542, 357, 14, 31], "iscrowd": 0}, {"id": 3342461, "category_id": 13, "area": 132, "bbox": [0, 350, 10, 44], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 529, "bbox": [347, 359, 31, 20], "iscrowd": 0}, {"id": 14053895, "category_id": 21, "area": 197, "bbox": [373, 359, 18, 16], "iscrowd": 0}, {"id": 13923085, "category_id": 21, "area": 213, "bbox": [386, 357, 19, 17], "iscrowd": 0}, {"id": 14048021, "category_id": 21, "area": 453, "bbox": [441, 358, 33, 22], "iscrowd": 0}, {"id": 11160320, "category_id": 21, "area": 5259, "bbox": [501, 372, 133, 70], "iscrowd": 0}, {"id": 12354560, "category_id": 21, "area": 4952, "bbox": [594, 377, 89, 71], "iscrowd": 0}, {"id": 14318088, "category_id": 21, "area": 44, "bbox": [467, 358, 8, 14], "iscrowd": 0}, {"id": 12145664, "category_id": 21, "area": 85, "bbox": [399, 357, 11, 14], "iscrowd": 0}, {"id": 13850896, "category_id": 21, "area": 91, "bbox": [405, 357, 12, 14], "iscrowd": 0}, {"id": 13848326, "category_id": 21, "area": 88, "bbox": [411, 356, 13, 14], "iscrowd": 0}, {"id": 14645760, "category_id": 21, "area": 61, "bbox": [420, 357, 10, 12], "iscrowd": 0}, {"id": 12943371, "category_id": 21, "area": 82, "bbox": [426, 356, 10, 11], "iscrowd": 0}, {"id": 11491342, "category_id": 21, "area": 78, "bbox": [433, 354, 10, 12], "iscrowd": 0}, {"id": 12085504, "category_id": 21, "area": 56, "bbox": [442, 355, 12, 8], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 561, "bbox": [226, 367, 33, 26], "iscrowd": 0}, {"id": 47359, "category_id": 33, "area": 235, "bbox": [270, 370, 18, 20], "iscrowd": 0}, {"id": 700159, "category_id": 33, "area": 434, "bbox": [293, 369, 30, 19], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 237, "bbox": [156, 303, 15, 20], "iscrowd": 0}, {"id": 11403517, "category_id": 44, "area": 688, "bbox": [70, 249, 31, 25], "iscrowd": 0}, {"id": 11999487, "category_id": 44, "area": 974, "bbox": [613, 96, 40, 36], "iscrowd": 0}, {"id": 10027263, "category_id": 44, "area": 696, "bbox": [36, 65, 33, 27], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 163, "bbox": [269, 329, 19, 18], "iscrowd": 0}, {"id": 5956864, "category_id": 87, "area": 553, "bbox": [47, 308, 53, 32], "iscrowd": 0}, {"id": 5761822, "category_id": 87, "area": 344, "bbox": [118, 314, 33, 26], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 536, "bbox": [641, 21, 41, 31], "iscrowd": 0}, {"id": 16527132, "category_id": 88, "area": 154, "bbox": [383, 291, 20, 67], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 741, "bbox": [70, 372, 49, 33], "iscrowd": 0}, {"id": 15204514, "category_id": 117, "area": 188, "bbox": [322, 369, 17, 23], "iscrowd": 0}, {"id": 16711853, "category_id": 117, "area": 549, "bbox": [424, 370, 34, 28], "iscrowd": 0}, {"id": 16711861, "category_id": 117, "area": 425, "bbox": [453, 379, 17, 39], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 285, "bbox": [455, 319, 12, 59], "iscrowd": 0}, {"id": 16719151, "category_id": 137, "area": 490, "bbox": [158, 311, 17, 86], "iscrowd": 0}, {"id": 16718238, "category_id": 139, "area": 183, "bbox": [202, 368, 12, 22], "iscrowd": 0}, {"id": 16187558, "category_id": 139, "area": 576, "bbox": [94, 369, 34, 31], "iscrowd": 0}, {"id": 15925445, "category_id": 139, "area": 261, "bbox": [72, 366, 19, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001805", "file_name": "ADE_val_00001805.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 135332, "bbox": [0, 14, 683, 342], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 25250, "bbox": [0, 0, 682, 206], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 62931, "bbox": [0, 0, 370, 325], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 87011, "bbox": [1, 374, 682, 138], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 8562, "bbox": [61, 324, 622, 63], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4216, "bbox": [59, 319, 260, 46], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 7547, "bbox": [108, 326, 185, 66], "iscrowd": 0}, {"id": 13128964, "category_id": 21, "area": 3866, "bbox": [0, 318, 78, 63], "iscrowd": 0}, {"id": 12288512, "category_id": 21, "area": 9110, "bbox": [293, 326, 201, 68], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 422, "bbox": [433, 262, 11, 65], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 471, "bbox": [520, 333, 21, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001806", "file_name": "ADE_val_00001806.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 164560, "bbox": [0, 0, 683, 344], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 35716, "bbox": [178, 0, 318, 288], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4068, "bbox": [477, 194, 85, 130], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 74261, "bbox": [0, 316, 683, 196], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 848, "bbox": [216, 315, 467, 53], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 14533, "bbox": [105, 301, 562, 127], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 26, "bbox": [479, 317, 5, 7], "iscrowd": 0}, {"id": 2695574, "category_id": 13, "area": 30, "bbox": [473, 317, 6, 7], "iscrowd": 0}, {"id": 5703834, "category_id": 13, "area": 851, "bbox": [305, 308, 19, 91], "iscrowd": 0}, {"id": 5841532, "category_id": 13, "area": 756, "bbox": [317, 312, 22, 52], "iscrowd": 0}, {"id": 5571986, "category_id": 13, "area": 203, "bbox": [411, 311, 16, 25], "iscrowd": 0}, {"id": 3604625, "category_id": 13, "area": 1179, "bbox": [651, 310, 31, 75], "iscrowd": 0}, {"id": 2886058, "category_id": 13, "area": 425, "bbox": [332, 313, 15, 60], "iscrowd": 0}, {"id": 2169746, "category_id": 13, "area": 12, "bbox": [189, 320, 5, 4], "iscrowd": 0}, {"id": 4391063, "category_id": 13, "area": 68, "bbox": [539, 315, 9, 11], "iscrowd": 0}, {"id": 2890617, "category_id": 13, "area": 85, "bbox": [598, 313, 9, 15], "iscrowd": 0}, {"id": 2623644, "category_id": 13, "area": 44, "bbox": [585, 312, 7, 13], "iscrowd": 0}, {"id": 2693296, "category_id": 13, "area": 87, "bbox": [31, 317, 9, 15], "iscrowd": 0}, {"id": 5376676, "category_id": 13, "area": 73, "bbox": [37, 317, 7, 15], "iscrowd": 0}, {"id": 5701778, "category_id": 13, "area": 53, "bbox": [43, 319, 7, 12], "iscrowd": 0}, {"id": 4653211, "category_id": 13, "area": 89, "bbox": [49, 317, 9, 14], "iscrowd": 0}, {"id": 5776306, "category_id": 13, "area": 72, "bbox": [67, 319, 11, 11], "iscrowd": 0}, {"id": 2621595, "category_id": 13, "area": 49, "bbox": [83, 319, 8, 11], "iscrowd": 0}, {"id": 3408026, "category_id": 13, "area": 38, "bbox": [160, 319, 7, 9], "iscrowd": 0}, {"id": 3154850, "category_id": 13, "area": 45, "bbox": [511, 314, 6, 12], "iscrowd": 0}, {"id": 5901448, "category_id": 13, "area": 766, "bbox": [388, 316, 23, 59], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 962, "bbox": [241, 326, 52, 28], "iscrowd": 0}, {"id": 14833680, "category_id": 21, "area": 225, "bbox": [273, 322, 25, 17], "iscrowd": 0}, {"id": 14570752, "category_id": 21, "area": 215, "bbox": [236, 323, 42, 24], "iscrowd": 0}, {"id": 11227904, "category_id": 21, "area": 94, "bbox": [345, 323, 21, 15], "iscrowd": 0}, {"id": 12806656, "category_id": 21, "area": 103, "bbox": [427, 318, 17, 8], "iscrowd": 0}, {"id": 15104024, "category_id": 21, "area": 127, "bbox": [245, 317, 34, 7], "iscrowd": 0}, {"id": 11160323, "category_id": 21, "area": 163, "bbox": [384, 316, 23, 19], "iscrowd": 0}, {"id": 13402646, "category_id": 21, "area": 2256, "bbox": [80, 321, 90, 45], "iscrowd": 0}, {"id": 13518848, "category_id": 21, "area": 24, "bbox": [363, 321, 8, 4], "iscrowd": 0}, {"id": 13333504, "category_id": 21, "area": 119, "bbox": [404, 317, 15, 14], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1352, "bbox": [154, 321, 91, 24], "iscrowd": 0}, {"id": 48639, "category_id": 33, "area": 1404, "bbox": [0, 336, 81, 24], "iscrowd": 0}, {"id": 1351145, "category_id": 33, "area": 3272, "bbox": [439, 325, 163, 30], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 56, "bbox": [316, 295, 7, 8], "iscrowd": 0}, {"id": 11148287, "category_id": 44, "area": 31, "bbox": [335, 303, 6, 6], "iscrowd": 0}, {"id": 11731199, "category_id": 44, "area": 1438, "bbox": [337, 175, 37, 41], "iscrowd": 0}, {"id": 8135167, "category_id": 44, "area": 2056, "bbox": [520, 160, 20, 255], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 59, "bbox": [244, 314, 8, 9], "iscrowd": 0}, {"id": 14680319, "category_id": 81, "area": 20, "bbox": [252, 314, 5, 4], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 4646, "bbox": [298, 6, 122, 367], "iscrowd": 0}, {"id": 15354880, "category_id": 88, "area": 195, "bbox": [458, 240, 9, 76], "iscrowd": 0}, {"id": 16466191, "category_id": 88, "area": 887, "bbox": [563, 174, 29, 161], "iscrowd": 0}, {"id": 16734464, "category_id": 88, "area": 284, "bbox": [176, 238, 14, 86], "iscrowd": 0}, {"id": 16737281, "category_id": 88, "area": 205, "bbox": [313, 261, 23, 50], "iscrowd": 0}, {"id": 16736260, "category_id": 88, "area": 35, "bbox": [423, 291, 23, 8], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 534, "bbox": [615, 264, 35, 19], "iscrowd": 0}, {"id": 65398, "category_id": 124, "area": 289, "bbox": [589, 287, 26, 13], "iscrowd": 0}, {"id": 1962622, "category_id": 124, "area": 1854, "bbox": [39, 262, 55, 38], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 2160, "bbox": [109, 385, 68, 56], "iscrowd": 0}, {"id": 15925503, "category_id": 126, "area": 1241, "bbox": [230, 364, 42, 38], "iscrowd": 0}, {"id": 14811391, "category_id": 126, "area": 1401, "bbox": [460, 365, 48, 41], "iscrowd": 0}, {"id": 16711905, "category_id": 126, "area": 2912, "bbox": [575, 386, 78, 66], "iscrowd": 0}, {"id": 15794431, "category_id": 126, "area": 573, "bbox": [285, 355, 26, 29], "iscrowd": 0}, {"id": 16711897, "category_id": 126, "area": 1421, "bbox": [326, 391, 72, 63], "iscrowd": 0}, {"id": 15466719, "category_id": 126, "area": 103, "bbox": [340, 347, 8, 21], "iscrowd": 0}, {"id": 15597783, "category_id": 126, "area": 292, "bbox": [362, 343, 19, 21], "iscrowd": 0}, {"id": 16717814, "category_id": 126, "area": 239, "bbox": [378, 346, 14, 23], "iscrowd": 0}, {"id": 15991002, "category_id": 126, "area": 811, "bbox": [414, 353, 37, 30], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 261, "bbox": [237, 248, 9, 81], "iscrowd": 0}, {"id": 16711736, "category_id": 137, "area": 179, "bbox": [244, 267, 68, 18], "iscrowd": 0}, {"id": 16711743, "category_id": 137, "area": 210, "bbox": [394, 260, 94, 19], "iscrowd": 0}, {"id": 16715064, "category_id": 137, "area": 94, "bbox": [292, 285, 32, 11], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 11207, "bbox": [348, 399, 122, 112], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 110, "bbox": [202, 278, 10, 11], "iscrowd": 0}]}, {"image_id": "ADE_val_00001807", "file_name": "ADE_val_00001807.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 155323, "bbox": [1, 1, 577, 368], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 4884, "bbox": [567, 1, 115, 64], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 50246, "bbox": [1, 1, 682, 349], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 81671, "bbox": [1, 366, 681, 146], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 16426, "bbox": [1, 306, 682, 95], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1920, "bbox": [11, 274, 326, 67], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1363, "bbox": [625, 297, 56, 30], "iscrowd": 0}, {"id": 12539914, "category_id": 21, "area": 18148, "bbox": [68, 300, 273, 101], "iscrowd": 0}, {"id": 14052864, "category_id": 21, "area": 1150, "bbox": [480, 316, 75, 37], "iscrowd": 0}, {"id": 11173662, "category_id": 21, "area": 2408, "bbox": [439, 324, 91, 41], "iscrowd": 0}, {"id": 12864011, "category_id": 21, "area": 416, "bbox": [439, 314, 43, 13], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 657, "bbox": [319, 215, 18, 131], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 5595, "bbox": [351, 1, 31, 382], "iscrowd": 0}]}, {"image_id": "ADE_val_00001808", "file_name": "ADE_val_00001808.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 256052, "bbox": [1, 1, 682, 447], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 79, "bbox": [667, 2, 16, 9], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 28803, "bbox": [149, 398, 534, 114], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 44066, "bbox": [1, 354, 682, 158], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4910, "bbox": [441, 259, 59, 160], "iscrowd": 0}, {"id": 3932330, "category_id": 13, "area": 762, "bbox": [666, 272, 17, 106], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 402, "bbox": [347, 212, 13, 32], "iscrowd": 0}, {"id": 10945279, "category_id": 44, "area": 182, "bbox": [116, 255, 26, 8], "iscrowd": 0}, {"id": 9112034, "category_id": 44, "area": 488, "bbox": [540, 186, 30, 45], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 468, "bbox": [205, 219, 26, 20], "iscrowd": 0}, {"id": 48892, "category_id": 68, "area": 550, "bbox": [247, 245, 35, 17], "iscrowd": 0}, {"id": 35317, "category_id": 68, "area": 816, "bbox": [247, 191, 36, 28], "iscrowd": 0}, {"id": 835327, "category_id": 68, "area": 1131, "bbox": [96, 296, 64, 26], "iscrowd": 0}, {"id": 48873, "category_id": 68, "area": 883, "bbox": [205, 185, 34, 31], "iscrowd": 0}, {"id": 38655, "category_id": 68, "area": 1555, "bbox": [5, 163, 53, 40], "iscrowd": 0}, {"id": 1676799, "category_id": 68, "area": 229, "bbox": [38, 328, 11, 31], "iscrowd": 0}, {"id": 886527, "category_id": 68, "area": 289, "bbox": [302, 326, 17, 24], "iscrowd": 0}, {"id": 828415, "category_id": 68, "area": 351, "bbox": [223, 322, 17, 30], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 2167, "bbox": [356, 338, 23, 120], "iscrowd": 0}, {"id": 15007772, "category_id": 94, "area": 1092, "bbox": [576, 323, 15, 89], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 2996, "bbox": [42, 84, 182, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00001809", "file_name": "ADE_val_00001809.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 188882, "bbox": [1, 1, 681, 502], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 84870, "bbox": [137, 0, 498, 304], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1435, "bbox": [466, 238, 95, 51], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 30677, "bbox": [114, 339, 506, 173], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 32768, "bbox": [1, 345, 681, 167], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 391, "bbox": [546, 352, 19, 40], "iscrowd": 0}, {"id": 4128948, "category_id": 13, "area": 726, "bbox": [617, 343, 23, 38], "iscrowd": 0}, {"id": 2494595, "category_id": 13, "area": 32, "bbox": [529, 343, 4, 14], "iscrowd": 0}, {"id": 5309086, "category_id": 13, "area": 86, "bbox": [512, 346, 7, 18], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 136, "bbox": [579, 343, 14, 12], "iscrowd": 0}, {"id": 13201692, "category_id": 21, "area": 364, "bbox": [596, 350, 19, 24], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1655, "bbox": [585, 281, 33, 128], "iscrowd": 0}, {"id": 9109747, "category_id": 44, "area": 98, "bbox": [444, 333, 12, 10], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 433, "bbox": [605, 192, 30, 109], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 937, "bbox": [491, 408, 14, 89], "iscrowd": 0}, {"id": 14818859, "category_id": 94, "area": 508, "bbox": [516, 392, 10, 69], "iscrowd": 0}, {"id": 16456255, "category_id": 94, "area": 1077, "bbox": [434, 438, 17, 72], "iscrowd": 0}, {"id": 16716867, "category_id": 94, "area": 630, "bbox": [175, 402, 10, 75], "iscrowd": 0}, {"id": 15138859, "category_id": 94, "area": 409, "bbox": [271, 389, 9, 58], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 59, "bbox": [555, 375, 4, 24], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 119, "bbox": [511, 320, 8, 30], "iscrowd": 0}]}, {"image_id": "ADE_val_00001810", "file_name": "ADE_val_00001810.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1129, "bbox": [279, 409, 40, 45], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 140435, "bbox": [1, 1, 511, 575], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 162, "bbox": [318, 359, 23, 21], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 71028, "bbox": [1, 463, 511, 220], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 4654, "bbox": [93, 462, 366, 120], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 10096, "bbox": [261, 306, 137, 92], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 213, "bbox": [362, 452, 10, 33], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 3240, "bbox": [482, 518, 29, 154], "iscrowd": 0}, {"id": 14966532, "category_id": 21, "area": 295, "bbox": [328, 454, 20, 19], "iscrowd": 0}, {"id": 14255104, "category_id": 21, "area": 529, "bbox": [300, 453, 30, 31], "iscrowd": 0}, {"id": 14768896, "category_id": 21, "area": 512, "bbox": [285, 453, 22, 41], "iscrowd": 0}, {"id": 15031828, "category_id": 21, "area": 1388, "bbox": [245, 450, 48, 56], "iscrowd": 0}, {"id": 15032324, "category_id": 21, "area": 4371, "bbox": [194, 460, 79, 69], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 98843, "bbox": [137, 1, 375, 318], "iscrowd": 0}, {"id": 8782079, "category_id": 44, "area": 3562, "bbox": [50, 344, 54, 230], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 505, "bbox": [160, 488, 36, 24], "iscrowd": 0}, {"id": 50687, "category_id": 54, "area": 510, "bbox": [266, 403, 29, 48], "iscrowd": 0}, {"id": 917247, "category_id": 54, "area": 1192, "bbox": [440, 536, 49, 40], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1793, "bbox": [81, 203, 62, 83], "iscrowd": 0}]}, {"image_id": "ADE_val_00001811", "file_name": "ADE_val_00001811.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 172754, "bbox": [0, 0, 682, 395], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 14158, "bbox": [454, 0, 125, 249], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 4277, "bbox": [491, 250, 191, 154], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 115298, "bbox": [0, 250, 682, 261], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 652, "bbox": [440, 254, 20, 55], "iscrowd": 0}, {"id": 5309082, "category_id": 13, "area": 1048, "bbox": [588, 261, 36, 49], "iscrowd": 0}, {"id": 4325515, "category_id": 13, "area": 711, "bbox": [494, 253, 21, 55], "iscrowd": 0}, {"id": 4463500, "category_id": 13, "area": 125, "bbox": [467, 249, 10, 23], "iscrowd": 0}, {"id": 4654227, "category_id": 13, "area": 107, "bbox": [458, 249, 9, 23], "iscrowd": 0}, {"id": 2885001, "category_id": 13, "area": 913, "bbox": [399, 250, 23, 76], "iscrowd": 0}, {"id": 4531110, "category_id": 13, "area": 325, "bbox": [362, 249, 16, 38], "iscrowd": 0}, {"id": 5570694, "category_id": 13, "area": 849, "bbox": [348, 244, 23, 76], "iscrowd": 0}, {"id": 3146902, "category_id": 13, "area": 1505, "bbox": [413, 249, 28, 89], "iscrowd": 0}, {"id": 4459897, "category_id": 13, "area": 83, "bbox": [439, 247, 9, 17], "iscrowd": 0}, {"id": 3997829, "category_id": 13, "area": 44, "bbox": [428, 243, 9, 19], "iscrowd": 0}, {"id": 4589947, "category_id": 13, "area": 122, "bbox": [330, 235, 18, 32], "iscrowd": 0}, {"id": 5111950, "category_id": 13, "area": 3975, "bbox": [293, 227, 57, 139], "iscrowd": 0}, {"id": 3213973, "category_id": 13, "area": 85, "bbox": [477, 250, 5, 22], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 78, "bbox": [517, 251, 12, 10], "iscrowd": 0}, {"id": 14248215, "category_id": 21, "area": 322, "bbox": [550, 252, 24, 17], "iscrowd": 0}, {"id": 12737052, "category_id": 21, "area": 398, "bbox": [613, 254, 28, 21], "iscrowd": 0}, {"id": 13654022, "category_id": 21, "area": 184, "bbox": [590, 253, 18, 14], "iscrowd": 0}, {"id": 14502144, "category_id": 21, "area": 571, "bbox": [657, 260, 25, 30], "iscrowd": 0}, {"id": 14508032, "category_id": 21, "area": 48, "bbox": [586, 250, 10, 7], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1067, "bbox": [602, 324, 39, 33], "iscrowd": 0}, {"id": 10354914, "category_id": 44, "area": 630, "bbox": [560, 160, 46, 17], "iscrowd": 0}, {"id": 8323309, "category_id": 44, "area": 109, "bbox": [495, 227, 10, 11], "iscrowd": 0}, {"id": 9705969, "category_id": 44, "area": 340, "bbox": [545, 147, 32, 12], "iscrowd": 0}, {"id": 11011045, "category_id": 44, "area": 84, "bbox": [600, 193, 11, 12], "iscrowd": 0}, {"id": 11540715, "category_id": 44, "area": 160, "bbox": [629, 201, 8, 20], "iscrowd": 0}, {"id": 8913149, "category_id": 44, "area": 2172, "bbox": [218, 250, 38, 78], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 1897, "bbox": [416, 201, 75, 69], "iscrowd": 0}, {"id": 4258048, "category_id": 87, "area": 108, "bbox": [616, 237, 17, 10], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 88, "bbox": [490, 166, 38, 38], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 207, "bbox": [531, 247, 17, 15], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 699, "bbox": [281, 301, 28, 38], "iscrowd": 0}, {"id": 8826711, "category_id": 116, "area": 327, "bbox": [339, 297, 15, 28], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 820, "bbox": [622, 290, 61, 63], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 3846, "bbox": [153, 27, 95, 94], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 206, "bbox": [509, 202, 12, 18], "iscrowd": 0}, {"id": 15532078, "category_id": 137, "area": 30, "bbox": [606, 237, 4, 12], "iscrowd": 0}, {"id": 16718137, "category_id": 137, "area": 4070, "bbox": [574, 0, 44, 273], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 2964, "bbox": [544, 272, 45, 76], "iscrowd": 0}]}, {"image_id": "ADE_val_00001812", "file_name": "ADE_val_00001812.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 140034, "bbox": [1, 1, 602, 380], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 18381, "bbox": [74, 0, 608, 151], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 82720, "bbox": [1, 0, 680, 376], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 67507, "bbox": [2, 406, 681, 105], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 5492, "bbox": [2, 387, 628, 28], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 9566, "bbox": [20, 336, 621, 65], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2671, "bbox": [290, 342, 70, 48], "iscrowd": 0}, {"id": 11365649, "category_id": 21, "area": 2510, "bbox": [622, 348, 61, 62], "iscrowd": 0}, {"id": 12476672, "category_id": 21, "area": 662, "bbox": [1, 367, 27, 35], "iscrowd": 0}, {"id": 13263878, "category_id": 21, "area": 11029, "bbox": [357, 348, 234, 72], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 419, "bbox": [403, 211, 28, 18], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1387, "bbox": [362, 355, 88, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00001813", "file_name": "ADE_val_00001813.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3843, "bbox": [52, 234, 162, 39], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 108993, "bbox": [0, 0, 683, 291], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 13976, "bbox": [0, 0, 368, 192], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 36749, "bbox": [91, 3, 261, 273], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 137758, "bbox": [0, 305, 683, 207], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 18057, "bbox": [1, 235, 682, 77], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1145, "bbox": [288, 236, 25, 71], "iscrowd": 0}, {"id": 5899129, "category_id": 13, "area": 117, "bbox": [99, 222, 7, 25], "iscrowd": 0}, {"id": 2752646, "category_id": 13, "area": 1447, "bbox": [329, 239, 36, 70], "iscrowd": 0}, {"id": 5374114, "category_id": 13, "area": 919, "bbox": [571, 227, 21, 73], "iscrowd": 0}, {"id": 2694554, "category_id": 13, "area": 987, "bbox": [382, 232, 24, 74], "iscrowd": 0}, {"id": 2097313, "category_id": 13, "area": 36, "bbox": [430, 240, 9, 8], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 691, "bbox": [15, 272, 93, 9], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 3723, "bbox": [71, 82, 50, 165], "iscrowd": 0}, {"id": 11672831, "category_id": 44, "area": 599, "bbox": [552, 157, 7, 144], "iscrowd": 0}, {"id": 10158335, "category_id": 44, "area": 360, "bbox": [305, 177, 24, 15], "iscrowd": 0}, {"id": 9570303, "category_id": 44, "area": 67, "bbox": [309, 204, 9, 8], "iscrowd": 0}, {"id": 9240803, "category_id": 44, "area": 440, "bbox": [504, 155, 7, 146], "iscrowd": 0}, {"id": 10100735, "category_id": 44, "area": 493, "bbox": [150, 186, 11, 113], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 175, "bbox": [105, 236, 31, 11], "iscrowd": 0}, {"id": 65495, "category_id": 70, "area": 261, "bbox": [201, 245, 18, 24], "iscrowd": 0}, {"id": 65492, "category_id": 70, "area": 414, "bbox": [25, 239, 51, 12], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 210, "bbox": [121, 185, 7, 57], "iscrowd": 0}, {"id": 15023104, "category_id": 88, "area": 102, "bbox": [271, 177, 8, 63], "iscrowd": 0}, {"id": 14956544, "category_id": 88, "area": 476, "bbox": [6, 161, 11, 106], "iscrowd": 0}, {"id": 15935744, "category_id": 88, "area": 939, "bbox": [250, 148, 13, 138], "iscrowd": 0}, {"id": 16722433, "category_id": 88, "area": 112, "bbox": [278, 189, 5, 54], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 5771, "bbox": [439, 2, 32, 301], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 264, "bbox": [558, 285, 19, 18], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 1709, "bbox": [105, 253, 72, 45], "iscrowd": 0}, {"id": 653823, "category_id": 128, "area": 1698, "bbox": [465, 260, 73, 42], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 1211, "bbox": [213, 158, 19, 141], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 840, "bbox": [229, 250, 25, 36], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 171, "bbox": [207, 0, 9, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00001814", "file_name": "ADE_val_00001814.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 2321, "bbox": [0, 278, 79, 56], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 144168, "bbox": [0, 70, 683, 321], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 66259, "bbox": [1, 1, 682, 231], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 77476, "bbox": [1, 349, 682, 163], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 23904, "bbox": [1, 329, 681, 117], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 6564, "bbox": [584, 288, 95, 79], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 588, "bbox": [0, 283, 29, 24], "iscrowd": 0}, {"id": 13556, "category_id": 39, "area": 855, "bbox": [38, 279, 39, 24], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 4521, "bbox": [587, 78, 96, 72], "iscrowd": 0}, {"id": 16737792, "category_id": 73, "area": 19018, "bbox": [1, 38, 176, 167], "iscrowd": 0}]}, {"image_id": "ADE_val_00001815", "file_name": "ADE_val_00001815.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 244913, "bbox": [1, 1, 682, 511], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 72474, "bbox": [282, 0, 401, 241], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 10361, "bbox": [230, 178, 167, 69], "iscrowd": 0}, {"id": 9044223, "category_id": 44, "area": 12988, "bbox": [284, 285, 95, 165], "iscrowd": 0}, {"id": 11403519, "category_id": 44, "area": 411, "bbox": [138, 398, 19, 24], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 3886, "bbox": [311, 241, 24, 270], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 2406, "bbox": [69, 204, 153, 18], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 1215, "bbox": [637, 474, 45, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00001816", "file_name": "ADE_val_00001816.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6713, "bbox": [443, 511, 69, 129], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 204455, "bbox": [0, 0, 512, 620], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 84570, "bbox": [0, 0, 244, 467], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 9544, "bbox": [145, 519, 268, 78], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 16211, "bbox": [0, 596, 512, 87], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 4282, "bbox": [19, 592, 472, 87], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1075, "bbox": [93, 560, 329, 81], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 159, "bbox": [313, 603, 12, 25], "iscrowd": 0}, {"id": 4137875, "category_id": 13, "area": 209, "bbox": [400, 602, 11, 30], "iscrowd": 0}, {"id": 3478442, "category_id": 13, "area": 204, "bbox": [390, 600, 10, 32], "iscrowd": 0}, {"id": 2031741, "category_id": 13, "area": 109, "bbox": [370, 602, 10, 16], "iscrowd": 0}, {"id": 4980862, "category_id": 13, "area": 75, "bbox": [342, 604, 10, 13], "iscrowd": 0}, {"id": 3153797, "category_id": 13, "area": 84, "bbox": [363, 601, 10, 16], "iscrowd": 0}, {"id": 4456589, "category_id": 13, "area": 86, "bbox": [307, 599, 8, 19], "iscrowd": 0}, {"id": 3473530, "category_id": 13, "area": 35, "bbox": [272, 602, 5, 10], "iscrowd": 0}, {"id": 2293934, "category_id": 13, "area": 22, "bbox": [283, 602, 6, 6], "iscrowd": 0}, {"id": 5308563, "category_id": 13, "area": 67, "bbox": [440, 602, 8, 15], "iscrowd": 0}, {"id": 3735699, "category_id": 13, "area": 13, "bbox": [24, 589, 2, 10], "iscrowd": 0}, {"id": 4330360, "category_id": 13, "area": 36, "bbox": [241, 601, 5, 12], "iscrowd": 0}, {"id": 5177471, "category_id": 13, "area": 33, "bbox": [199, 588, 5, 10], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1332, "bbox": [30, 614, 48, 32], "iscrowd": 0}, {"id": 13202450, "category_id": 21, "area": 3549, "bbox": [169, 608, 83, 55], "iscrowd": 0}, {"id": 15038464, "category_id": 21, "area": 2200, "bbox": [419, 616, 90, 39], "iscrowd": 0}, {"id": 11500293, "category_id": 21, "area": 117, "bbox": [160, 587, 23, 10], "iscrowd": 0}, {"id": 11764480, "category_id": 21, "area": 118, "bbox": [118, 590, 17, 11], "iscrowd": 0}, {"id": 11360010, "category_id": 21, "area": 308, "bbox": [99, 595, 28, 14], "iscrowd": 0}, {"id": 14962694, "category_id": 21, "area": 395, "bbox": [269, 609, 39, 17], "iscrowd": 0}, {"id": 14700034, "category_id": 21, "area": 145, "bbox": [191, 602, 29, 8], "iscrowd": 0}, {"id": 12871447, "category_id": 21, "area": 330, "bbox": [144, 598, 25, 20], "iscrowd": 0}, {"id": 14376220, "category_id": 21, "area": 82, "bbox": [65, 593, 16, 9], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 937, "bbox": [359, 619, 30, 40], "iscrowd": 0}, {"id": 2053100, "category_id": 39, "area": 579, "bbox": [308, 619, 26, 34], "iscrowd": 0}, {"id": 1332735, "category_id": 39, "area": 380, "bbox": [139, 605, 38, 29], "iscrowd": 0}, {"id": 18927, "category_id": 39, "area": 243, "bbox": [111, 609, 24, 15], "iscrowd": 0}, {"id": 1712118, "category_id": 39, "area": 179, "bbox": [81, 601, 20, 16], "iscrowd": 0}, {"id": 2379492, "category_id": 39, "area": 1410, "bbox": [236, 592, 54, 54], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 191, "bbox": [149, 570, 10, 45], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 665, "bbox": [240, 508, 27, 83], "iscrowd": 0}, {"id": 16722944, "category_id": 88, "area": 473, "bbox": [162, 535, 21, 84], "iscrowd": 0}, {"id": 16274176, "category_id": 88, "area": 154, "bbox": [86, 553, 13, 42], "iscrowd": 0}, {"id": 16727808, "category_id": 88, "area": 151, "bbox": [52, 558, 9, 42], "iscrowd": 0}, {"id": 16145155, "category_id": 88, "area": 63, "bbox": [28, 563, 9, 23], "iscrowd": 0}, {"id": 16274438, "category_id": 88, "area": 64, "bbox": [61, 549, 12, 42], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 1588, "bbox": [379, 639, 61, 29], "iscrowd": 0}, {"id": 15664366, "category_id": 126, "area": 878, "bbox": [321, 637, 39, 23], "iscrowd": 0}, {"id": 16711909, "category_id": 126, "area": 586, "bbox": [278, 633, 31, 21], "iscrowd": 0}, {"id": 16125430, "category_id": 126, "area": 290, "bbox": [125, 619, 28, 13], "iscrowd": 0}, {"id": 15340278, "category_id": 126, "area": 139, "bbox": [91, 612, 21, 10], "iscrowd": 0}, {"id": 16715763, "category_id": 126, "area": 120, "bbox": [67, 604, 15, 9], "iscrowd": 0}, {"id": 16711934, "category_id": 126, "area": 61, "bbox": [68, 599, 14, 6], "iscrowd": 0}, {"id": 15728862, "category_id": 126, "area": 50, "bbox": [239, 567, 10, 7], "iscrowd": 0}, {"id": 16711904, "category_id": 126, "area": 43, "bbox": [261, 566, 7, 8], "iscrowd": 0}, {"id": 16646395, "category_id": 126, "area": 16, "bbox": [162, 581, 5, 4], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 64, "bbox": [135, 571, 4, 30], "iscrowd": 0}, {"id": 16711709, "category_id": 137, "area": 1328, "bbox": [400, 504, 34, 132], "iscrowd": 0}, {"id": 14811189, "category_id": 137, "area": 76, "bbox": [68, 559, 12, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00001817", "file_name": "ADE_val_00001817.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 236945, "bbox": [0, 0, 512, 657], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 34450, "bbox": [92, 1, 361, 327], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 29326, "bbox": [82, 521, 429, 162], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 28699, "bbox": [0, 519, 512, 164], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 83, "bbox": [192, 514, 15, 8], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 2133, "bbox": [426, 530, 60, 48], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 381, "bbox": [260, 456, 20, 20], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1701, "bbox": [394, 377, 26, 218], "iscrowd": 0}, {"id": 15019008, "category_id": 88, "area": 195, "bbox": [142, 452, 6, 75], "iscrowd": 0}, {"id": 16728576, "category_id": 88, "area": 546, "bbox": [85, 429, 12, 119], "iscrowd": 0}, {"id": 16736000, "category_id": 88, "area": 130, "bbox": [139, 470, 5, 49], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 689, "bbox": [238, 634, 24, 39], "iscrowd": 0}, {"id": 15991115, "category_id": 94, "area": 162, "bbox": [324, 562, 12, 19], "iscrowd": 0}, {"id": 15335475, "category_id": 94, "area": 317, "bbox": [463, 579, 17, 27], "iscrowd": 0}, {"id": 15998263, "category_id": 94, "area": 113, "bbox": [267, 550, 10, 15], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 3174, "bbox": [282, 453, 122, 27], "iscrowd": 0}, {"id": 1176205, "category_id": 124, "area": 390, "bbox": [160, 467, 38, 13], "iscrowd": 0}, {"id": 65414, "category_id": 124, "area": 116, "bbox": [121, 477, 23, 6], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 20, "bbox": [198, 522, 5, 4], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 68, "bbox": [157, 513, 7, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00001818", "file_name": "ADE_val_00001818.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 205130, "bbox": [1, 1, 682, 336], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 112025, "bbox": [1, 328, 682, 183], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 6297, "bbox": [33, 323, 573, 31], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 3421, "bbox": [456, 283, 88, 60], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 352, "bbox": [372, 300, 13, 45], "iscrowd": 0}, {"id": 5439630, "category_id": 13, "area": 188, "bbox": [450, 298, 15, 39], "iscrowd": 0}, {"id": 3276958, "category_id": 13, "area": 104, "bbox": [465, 297, 9, 16], "iscrowd": 0}, {"id": 3416735, "category_id": 13, "area": 184, "bbox": [544, 295, 9, 32], "iscrowd": 0}, {"id": 2889338, "category_id": 13, "area": 171, "bbox": [584, 297, 9, 29], "iscrowd": 0}, {"id": 5046404, "category_id": 13, "area": 128, "bbox": [593, 301, 8, 25], "iscrowd": 0}, {"id": 5767299, "category_id": 13, "area": 268, "bbox": [307, 299, 11, 40], "iscrowd": 0}, {"id": 3415928, "category_id": 13, "area": 505, "bbox": [319, 299, 21, 48], "iscrowd": 0}, {"id": 2428824, "category_id": 13, "area": 300, "bbox": [294, 299, 11, 40], "iscrowd": 0}, {"id": 5505158, "category_id": 13, "area": 550, "bbox": [279, 299, 26, 52], "iscrowd": 0}, {"id": 4923283, "category_id": 13, "area": 87, "bbox": [200, 328, 8, 13], "iscrowd": 0}, {"id": 4194462, "category_id": 13, "area": 605, "bbox": [19, 299, 16, 58], "iscrowd": 0}, {"id": 3408006, "category_id": 13, "area": 866, "bbox": [2, 297, 19, 64], "iscrowd": 0}, {"id": 3014827, "category_id": 13, "area": 79, "bbox": [36, 307, 5, 20], "iscrowd": 0}, {"id": 2163892, "category_id": 13, "area": 601, "bbox": [345, 294, 22, 51], "iscrowd": 0}, {"id": 3869832, "category_id": 13, "area": 171, "bbox": [170, 301, 10, 33], "iscrowd": 0}, {"id": 3408043, "category_id": 13, "area": 157, "bbox": [152, 304, 13, 33], "iscrowd": 0}, {"id": 4791942, "category_id": 13, "area": 603, "bbox": [46, 300, 21, 57], "iscrowd": 0}, {"id": 4659615, "category_id": 13, "area": 702, "bbox": [99, 299, 33, 55], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2463, "bbox": [599, 301, 84, 38], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 487, "bbox": [128, 305, 32, 31], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 280, "bbox": [322, 274, 27, 11], "iscrowd": 0}, {"id": 10879209, "category_id": 44, "area": 267, "bbox": [24, 263, 21, 15], "iscrowd": 0}, {"id": 9044195, "category_id": 44, "area": 206, "bbox": [275, 232, 23, 10], "iscrowd": 0}, {"id": 9175295, "category_id": 44, "area": 144, "bbox": [272, 242, 18, 9], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 3818, "bbox": [58, 273, 79, 65], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 277, "bbox": [28, 271, 23, 19], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 682, "bbox": [591, 263, 48, 15], "iscrowd": 0}, {"id": 786295, "category_id": 124, "area": 148, "bbox": [256, 203, 20, 11], "iscrowd": 0}, {"id": 62568, "category_id": 124, "area": 215, "bbox": [340, 202, 29, 9], "iscrowd": 0}, {"id": 64648, "category_id": 124, "area": 264, "bbox": [349, 225, 24, 15], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 192, "bbox": [554, 316, 19, 21], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 315, "bbox": [339, 162, 12, 29], "iscrowd": 0}, {"id": 15142168, "category_id": 137, "area": 365, "bbox": [320, 162, 14, 28], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 259, "bbox": [406, 329, 15, 18], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 430, "bbox": [590, 88, 24, 71], "iscrowd": 0}]}, {"image_id": "ADE_val_00001819", "file_name": "ADE_val_00001819.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 625, "bbox": [342, 293, 42, 26], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 88120, "bbox": [159, 0, 523, 302], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 26261, "bbox": [214, 0, 403, 158], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 79153, "bbox": [1, 1, 368, 408], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 88503, "bbox": [0, 308, 683, 204], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 3058, "bbox": [366, 319, 270, 48], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 14119, "bbox": [134, 300, 537, 169], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 16986, "bbox": [372, 240, 299, 103], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2020, "bbox": [448, 277, 35, 107], "iscrowd": 0}, {"id": 2886033, "category_id": 13, "area": 3928, "bbox": [494, 285, 47, 138], "iscrowd": 0}, {"id": 4522159, "category_id": 13, "area": 5068, "bbox": [625, 281, 47, 204], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1484, "bbox": [216, 289, 47, 41], "iscrowd": 0}, {"id": 11433728, "category_id": 21, "area": 384, "bbox": [139, 279, 21, 21], "iscrowd": 0}, {"id": 12146688, "category_id": 21, "area": 228, "bbox": [165, 284, 16, 17], "iscrowd": 0}, {"id": 14248209, "category_id": 21, "area": 8550, "bbox": [252, 285, 132, 89], "iscrowd": 0}, {"id": 13846784, "category_id": 21, "area": 194, "bbox": [314, 277, 32, 11], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 132, "bbox": [313, 243, 21, 10], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 78, "bbox": [208, 191, 32, 15], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 4755, "bbox": [666, 89, 16, 422], "iscrowd": 0}]}, {"image_id": "ADE_val_00001820", "file_name": "ADE_val_00001820.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 219421, "bbox": [0, 0, 683, 512], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 11367, "bbox": [388, 0, 77, 167], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 77841, "bbox": [0, 318, 671, 194], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 13761, "bbox": [233, 4, 339, 180], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 241, "bbox": [437, 180, 15, 29], "iscrowd": 0}, {"id": 144895, "category_id": 19, "area": 216, "bbox": [421, 226, 15, 38], "iscrowd": 0}, {"id": 8447, "category_id": 19, "area": 201, "bbox": [438, 232, 15, 37], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 14439, "bbox": [176, 299, 185, 103], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1788, "bbox": [191, 160, 49, 57], "iscrowd": 0}, {"id": 10947559, "category_id": 44, "area": 557, "bbox": [316, 212, 24, 31], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 185, "bbox": [381, 203, 12, 25], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 152, "bbox": [416, 299, 12, 21], "iscrowd": 0}, {"id": 16646278, "category_id": 117, "area": 230, "bbox": [462, 302, 15, 26], "iscrowd": 0}, {"id": 16713650, "category_id": 117, "area": 211, "bbox": [393, 297, 15, 24], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 5761, "bbox": [28, 88, 115, 94], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 178, "bbox": [267, 53, 14, 16], "iscrowd": 0}, {"id": 16717823, "category_id": 126, "area": 224, "bbox": [249, 35, 19, 21], "iscrowd": 0}, {"id": 16719086, "category_id": 126, "area": 217, "bbox": [233, 18, 16, 18], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 864, "bbox": [502, 316, 34, 69], "iscrowd": 0}]}, {"image_id": "ADE_val_00001821", "file_name": "ADE_val_00001821.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 242609, "bbox": [0, 0, 681, 496], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 37233, "bbox": [255, 0, 296, 322], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3311, "bbox": [229, 325, 172, 98], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 22964, "bbox": [0, 396, 427, 116], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 27959, "bbox": [0, 394, 683, 118], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 1155, "bbox": [542, 164, 23, 191], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 656, "bbox": [425, 379, 18, 54], "iscrowd": 0}, {"id": 3277729, "category_id": 13, "area": 167, "bbox": [367, 384, 11, 28], "iscrowd": 0}, {"id": 3866779, "category_id": 13, "area": 632, "bbox": [408, 383, 20, 53], "iscrowd": 0}, {"id": 3014802, "category_id": 13, "area": 709, "bbox": [506, 383, 21, 56], "iscrowd": 0}, {"id": 5642162, "category_id": 13, "area": 290, "bbox": [522, 382, 11, 50], "iscrowd": 0}, {"id": 4068507, "category_id": 13, "area": 722, "bbox": [530, 382, 21, 58], "iscrowd": 0}, {"id": 5707400, "category_id": 13, "area": 1137, "bbox": [574, 374, 17, 84], "iscrowd": 0}, {"id": 4201880, "category_id": 13, "area": 447, "bbox": [560, 382, 14, 52], "iscrowd": 0}, {"id": 5773440, "category_id": 13, "area": 500, "bbox": [460, 376, 14, 55], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 87, "bbox": [516, 326, 10, 10], "iscrowd": 0}, {"id": 8388863, "category_id": 44, "area": 283, "bbox": [575, 315, 13, 24], "iscrowd": 0}, {"id": 10944767, "category_id": 44, "area": 205, "bbox": [406, 350, 15, 14], "iscrowd": 0}, {"id": 8782079, "category_id": 44, "area": 668, "bbox": [441, 291, 28, 31], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 562, "bbox": [447, 361, 56, 12], "iscrowd": 0}, {"id": 5370112, "category_id": 87, "area": 95, "bbox": [401, 363, 30, 12], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 307, "bbox": [379, 329, 9, 91], "iscrowd": 0}, {"id": 16530432, "category_id": 88, "area": 264, "bbox": [516, 294, 34, 29], "iscrowd": 0}, {"id": 16263689, "category_id": 88, "area": 26, "bbox": [309, 332, 4, 7], "iscrowd": 0}, {"id": 16535040, "category_id": 88, "area": 2173, "bbox": [440, 230, 25, 240], "iscrowd": 0}, {"id": 16730624, "category_id": 88, "area": 644, "bbox": [262, 304, 12, 125], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 64, "bbox": [392, 418, 7, 12], "iscrowd": 0}, {"id": 16711707, "category_id": 94, "area": 176, "bbox": [420, 439, 12, 19], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 223, "bbox": [387, 399, 10, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00001822", "file_name": "ADE_val_00001822.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 65308, "bbox": [0, 0, 683, 241], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 17996, "bbox": [339, 0, 344, 169], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 47135, "bbox": [2, 20, 478, 230], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 23656, "bbox": [374, 210, 309, 230], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 131926, "bbox": [0, 209, 673, 303], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2053, "bbox": [67, 204, 263, 65], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 11572, "bbox": [108, 182, 100, 250], "iscrowd": 0}, {"id": 4986017, "category_id": 13, "area": 30, "bbox": [365, 209, 4, 12], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 625, "bbox": [582, 215, 35, 24], "iscrowd": 0}, {"id": 13388032, "category_id": 21, "area": 192, "bbox": [567, 217, 23, 18], "iscrowd": 0}, {"id": 12221189, "category_id": 21, "area": 136, "bbox": [504, 214, 18, 12], "iscrowd": 0}, {"id": 13392384, "category_id": 21, "area": 183, "bbox": [468, 214, 18, 13], "iscrowd": 0}, {"id": 11633178, "category_id": 21, "area": 305, "bbox": [398, 215, 22, 17], "iscrowd": 0}, {"id": 14506752, "category_id": 21, "area": 92, "bbox": [385, 211, 10, 14], "iscrowd": 0}, {"id": 12019995, "category_id": 21, "area": 246, "bbox": [519, 211, 22, 19], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 12918, "bbox": [526, 0, 48, 463], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 148, "bbox": [253, 225, 18, 19], "iscrowd": 0}, {"id": 454858, "category_id": 70, "area": 106, "bbox": [265, 224, 16, 17], "iscrowd": 0}, {"id": 65499, "category_id": 70, "area": 221, "bbox": [237, 227, 21, 22], "iscrowd": 0}, {"id": 65462, "category_id": 70, "area": 298, "bbox": [217, 230, 26, 24], "iscrowd": 0}, {"id": 914607, "category_id": 70, "area": 334, "bbox": [54, 232, 52, 21], "iscrowd": 0}, {"id": 64224, "category_id": 70, "area": 293, "bbox": [78, 230, 43, 20], "iscrowd": 0}, {"id": 982975, "category_id": 70, "area": 81, "bbox": [274, 224, 15, 14], "iscrowd": 0}, {"id": 60867, "category_id": 70, "area": 850, "bbox": [15, 234, 65, 23], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 82, "bbox": [479, 159, 18, 64], "iscrowd": 0}, {"id": 14966034, "category_id": 88, "area": 32, "bbox": [458, 170, 13, 44], "iscrowd": 0}, {"id": 14758680, "category_id": 88, "area": 390, "bbox": [390, 156, 14, 75], "iscrowd": 0}, {"id": 16722432, "category_id": 88, "area": 155, "bbox": [381, 179, 8, 45], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 5051, "bbox": [422, 0, 29, 323], "iscrowd": 0}, {"id": 16712491, "category_id": 94, "area": 823, "bbox": [396, 237, 24, 35], "iscrowd": 0}, {"id": 15008578, "category_id": 94, "area": 7021, "bbox": [444, 276, 73, 105], "iscrowd": 0}, {"id": 16517958, "category_id": 94, "area": 3709, "bbox": [630, 440, 53, 72], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 1757, "bbox": [615, 209, 65, 36], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 1012, "bbox": [62, 268, 46, 32], "iscrowd": 0}, {"id": 14749913, "category_id": 126, "area": 176, "bbox": [210, 242, 14, 16], "iscrowd": 0}, {"id": 15139048, "category_id": 126, "area": 208, "bbox": [197, 243, 16, 20], "iscrowd": 0}, {"id": 15340010, "category_id": 126, "area": 638, "bbox": [116, 259, 31, 27], "iscrowd": 0}, {"id": 16716543, "category_id": 126, "area": 21, "bbox": [327, 219, 5, 7], "iscrowd": 0}, {"id": 14880511, "category_id": 126, "area": 20, "bbox": [324, 220, 4, 7], "iscrowd": 0}, {"id": 16711926, "category_id": 126, "area": 31, "bbox": [315, 221, 6, 9], "iscrowd": 0}, {"id": 14748668, "category_id": 126, "area": 32, "bbox": [311, 222, 5, 11], "iscrowd": 0}, {"id": 15801053, "category_id": 126, "area": 104, "bbox": [301, 223, 13, 11], "iscrowd": 0}, {"id": 15212278, "category_id": 126, "area": 36, "bbox": [318, 221, 8, 8], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 802, "bbox": [356, 235, 25, 36], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 2062, "bbox": [640, 0, 22, 258], "iscrowd": 0}, {"id": 15925357, "category_id": 150, "area": 1594, "bbox": [592, 2, 21, 249], "iscrowd": 0}, {"id": 15271520, "category_id": 150, "area": 752, "bbox": [514, 79, 11, 158], "iscrowd": 0}, {"id": 16711756, "category_id": 150, "area": 648, "bbox": [500, 90, 14, 144], "iscrowd": 0}, {"id": 16515147, "category_id": 150, "area": 541, "bbox": [374, 99, 13, 80], "iscrowd": 0}, {"id": 16718662, "category_id": 150, "area": 1154, "bbox": [571, 29, 16, 217], "iscrowd": 0}, {"id": 16711776, "category_id": 150, "area": 342, "bbox": [524, 138, 11, 101], "iscrowd": 0}]}, {"image_id": "ADE_val_00001823", "file_name": "ADE_val_00001823.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 143751, "bbox": [0, 0, 682, 439], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 6840, "bbox": [230, 0, 57, 176], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7417, "bbox": [277, 0, 233, 324], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 7204, "bbox": [367, 240, 316, 116], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 115313, "bbox": [0, 243, 683, 269], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 108, "bbox": [429, 40, 8, 14], "iscrowd": 0}, {"id": 15855597, "category_id": 9, "area": 117, "bbox": [428, 63, 9, 14], "iscrowd": 0}, {"id": 15397354, "category_id": 9, "area": 126, "bbox": [428, 87, 9, 14], "iscrowd": 0}, {"id": 16311752, "category_id": 9, "area": 36, "bbox": [343, 114, 4, 9], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 49, "bbox": [276, 223, 7, 14], "iscrowd": 0}, {"id": 2301852, "category_id": 13, "area": 1126, "bbox": [282, 218, 26, 87], "iscrowd": 0}, {"id": 5704315, "category_id": 13, "area": 3244, "bbox": [328, 212, 44, 124], "iscrowd": 0}, {"id": 3413665, "category_id": 13, "area": 4979, "bbox": [371, 208, 63, 135], "iscrowd": 0}, {"id": 4915610, "category_id": 13, "area": 37, "bbox": [435, 228, 6, 7], "iscrowd": 0}, {"id": 3932306, "category_id": 13, "area": 95, "bbox": [427, 225, 9, 15], "iscrowd": 0}, {"id": 2494620, "category_id": 13, "area": 3003, "bbox": [430, 218, 40, 121], "iscrowd": 0}, {"id": 4587664, "category_id": 13, "area": 518, "bbox": [312, 220, 18, 48], "iscrowd": 0}, {"id": 4066977, "category_id": 13, "area": 92, "bbox": [300, 223, 11, 18], "iscrowd": 0}, {"id": 2098567, "category_id": 13, "area": 42, "bbox": [260, 221, 6, 10], "iscrowd": 0}, {"id": 4522110, "category_id": 13, "area": 361, "bbox": [240, 219, 21, 48], "iscrowd": 0}, {"id": 2424989, "category_id": 13, "area": 25, "bbox": [240, 225, 8, 7], "iscrowd": 0}, {"id": 4460202, "category_id": 13, "area": 368, "bbox": [228, 230, 19, 34], "iscrowd": 0}, {"id": 4784254, "category_id": 13, "area": 43, "bbox": [233, 228, 8, 10], "iscrowd": 0}, {"id": 4915347, "category_id": 13, "area": 2418, "bbox": [247, 218, 44, 111], "iscrowd": 0}, {"id": 3744676, "category_id": 13, "area": 13565, "bbox": [178, 205, 78, 295], "iscrowd": 0}, {"id": 3678612, "category_id": 13, "area": 27, "bbox": [296, 221, 5, 10], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 44, "bbox": [308, 223, 10, 6], "iscrowd": 0}, {"id": 14516480, "category_id": 21, "area": 46, "bbox": [327, 227, 9, 10], "iscrowd": 0}, {"id": 12995850, "category_id": 21, "area": 188, "bbox": [362, 227, 20, 16], "iscrowd": 0}, {"id": 13520640, "category_id": 21, "area": 85, "bbox": [377, 228, 14, 19], "iscrowd": 0}, {"id": 13138688, "category_id": 21, "area": 36, "bbox": [309, 229, 5, 14], "iscrowd": 0}, {"id": 13726212, "category_id": 21, "area": 29, "bbox": [354, 226, 10, 6], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 340, "bbox": [415, 114, 33, 11], "iscrowd": 0}, {"id": 11731184, "category_id": 44, "area": 329, "bbox": [328, 175, 16, 51], "iscrowd": 0}, {"id": 11471615, "category_id": 44, "area": 313, "bbox": [433, 136, 36, 13], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 24049, "bbox": [494, 146, 189, 176], "iscrowd": 0}, {"id": 16449791, "category_id": 81, "area": 701, "bbox": [456, 178, 15, 61], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 49, "bbox": [520, 85, 13, 12], "iscrowd": 0}, {"id": 2354200, "category_id": 87, "area": 55, "bbox": [508, 90, 13, 13], "iscrowd": 0}, {"id": 3931925, "category_id": 87, "area": 40, "bbox": [497, 96, 11, 11], "iscrowd": 0}, {"id": 4914944, "category_id": 87, "area": 57, "bbox": [506, 136, 14, 13], "iscrowd": 0}, {"id": 2093840, "category_id": 87, "area": 69, "bbox": [519, 132, 14, 13], "iscrowd": 0}, {"id": 3800862, "category_id": 87, "area": 37, "bbox": [519, 43, 11, 11], "iscrowd": 0}, {"id": 3011072, "category_id": 87, "area": 36, "bbox": [505, 51, 11, 11], "iscrowd": 0}, {"id": 5635328, "category_id": 87, "area": 33, "bbox": [494, 58, 10, 11], "iscrowd": 0}, {"id": 3143168, "category_id": 87, "area": 33, "bbox": [494, 21, 12, 11], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 31, "bbox": [391, 163, 18, 17], "iscrowd": 0}, {"id": 16726293, "category_id": 88, "area": 24, "bbox": [316, 200, 8, 25], "iscrowd": 0}, {"id": 16728856, "category_id": 88, "area": 22, "bbox": [309, 148, 10, 3], "iscrowd": 0}, {"id": 16729088, "category_id": 88, "area": 108, "bbox": [634, 90, 49, 9], "iscrowd": 0}, {"id": 15415040, "category_id": 88, "area": 171, "bbox": [293, 144, 30, 76], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 210, "bbox": [295, 244, 17, 18], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 31, "bbox": [403, 199, 5, 9], "iscrowd": 0}, {"id": 16515098, "category_id": 137, "area": 117, "bbox": [362, 190, 44, 14], "iscrowd": 0}, {"id": 15597615, "category_id": 137, "area": 3974, "bbox": [417, 0, 53, 229], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 724, "bbox": [271, 0, 31, 50], "iscrowd": 0}, {"id": 16711799, "category_id": 150, "area": 66, "bbox": [355, 183, 9, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00001824", "file_name": "ADE_val_00001824.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 85860, "bbox": [448, 1, 235, 511], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 11500, "bbox": [387, 1, 98, 196], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 101823, "bbox": [1, 1, 473, 411], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 14142, "bbox": [1, 231, 383, 99], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 3810, "bbox": [1, 229, 334, 39], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 128248, "bbox": [1, 231, 624, 280], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 211, "bbox": [121, 227, 19, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00001825", "file_name": "ADE_val_00001825.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 99, "bbox": [604, 293, 13, 11], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 107644, "bbox": [1, 1, 484, 335], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 15101, "bbox": [431, 0, 251, 248], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 66781, "bbox": [135, 0, 548, 349], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 79533, "bbox": [1, 303, 682, 208], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 38396, "bbox": [1, 288, 680, 114], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 313, "bbox": [541, 289, 11, 47], "iscrowd": 0}, {"id": 3539081, "category_id": 13, "area": 1060, "bbox": [403, 286, 24, 68], "iscrowd": 0}, {"id": 4395663, "category_id": 13, "area": 836, "bbox": [476, 282, 25, 70], "iscrowd": 0}, {"id": 5250736, "category_id": 13, "area": 1011, "bbox": [516, 289, 28, 66], "iscrowd": 0}, {"id": 4522117, "category_id": 13, "area": 1011, "bbox": [380, 285, 22, 69], "iscrowd": 0}, {"id": 2621566, "category_id": 13, "area": 986, "bbox": [340, 301, 40, 52], "iscrowd": 0}, {"id": 5111954, "category_id": 13, "area": 420, "bbox": [251, 286, 17, 37], "iscrowd": 0}, {"id": 4587657, "category_id": 13, "area": 813, "bbox": [267, 306, 35, 50], "iscrowd": 0}, {"id": 2494612, "category_id": 13, "area": 262, "bbox": [356, 290, 11, 33], "iscrowd": 0}, {"id": 4849839, "category_id": 13, "area": 262, "bbox": [264, 290, 23, 29], "iscrowd": 0}, {"id": 3801236, "category_id": 13, "area": 71, "bbox": [464, 290, 7, 26], "iscrowd": 0}, {"id": 3080861, "category_id": 13, "area": 225, "bbox": [504, 288, 11, 35], "iscrowd": 0}, {"id": 5180081, "category_id": 13, "area": 579, "bbox": [448, 285, 19, 52], "iscrowd": 0}, {"id": 2097293, "category_id": 13, "area": 136, "bbox": [533, 284, 10, 24], "iscrowd": 0}, {"id": 4989058, "category_id": 13, "area": 223, "bbox": [333, 287, 14, 25], "iscrowd": 0}, {"id": 3219363, "category_id": 13, "area": 446, "bbox": [119, 286, 26, 52], "iscrowd": 0}, {"id": 3017869, "category_id": 13, "area": 83, "bbox": [436, 289, 7, 20], "iscrowd": 0}, {"id": 3604613, "category_id": 13, "area": 182, "bbox": [240, 289, 12, 34], "iscrowd": 0}, {"id": 4784279, "category_id": 13, "area": 93, "bbox": [292, 297, 10, 16], "iscrowd": 0}, {"id": 2752650, "category_id": 13, "area": 183, "bbox": [346, 280, 11, 21], "iscrowd": 0}, {"id": 3801249, "category_id": 13, "area": 144, "bbox": [374, 290, 10, 31], "iscrowd": 0}, {"id": 4784286, "category_id": 13, "area": 472, "bbox": [111, 286, 25, 51], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 489, "bbox": [614, 287, 35, 23], "iscrowd": 0}, {"id": 14582016, "category_id": 21, "area": 220, "bbox": [638, 288, 41, 23], "iscrowd": 0}, {"id": 12998410, "category_id": 21, "area": 59, "bbox": [661, 283, 15, 5], "iscrowd": 0}, {"id": 11763712, "category_id": 21, "area": 412, "bbox": [662, 290, 21, 25], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1110, "bbox": [469, 325, 27, 63], "iscrowd": 0}, {"id": 8457970, "category_id": 44, "area": 537, "bbox": [573, 249, 15, 72], "iscrowd": 0}, {"id": 8519931, "category_id": 44, "area": 468, "bbox": [346, 228, 24, 25], "iscrowd": 0}, {"id": 8658153, "category_id": 44, "area": 458, "bbox": [413, 187, 16, 49], "iscrowd": 0}, {"id": 8847615, "category_id": 44, "area": 314, "bbox": [436, 172, 10, 68], "iscrowd": 0}, {"id": 11534581, "category_id": 44, "area": 773, "bbox": [617, 201, 35, 31], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 1841, "bbox": [286, 318, 73, 37], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 198, "bbox": [539, 236, 10, 53], "iscrowd": 0}, {"id": 16145684, "category_id": 88, "area": 126, "bbox": [494, 185, 42, 10], "iscrowd": 0}, {"id": 14900994, "category_id": 88, "area": 167, "bbox": [492, 214, 36, 77], "iscrowd": 0}, {"id": 16736798, "category_id": 88, "area": 98, "bbox": [518, 255, 8, 33], "iscrowd": 0}, {"id": 16735488, "category_id": 88, "area": 51, "bbox": [511, 263, 5, 18], "iscrowd": 0}, {"id": 15614983, "category_id": 88, "area": 60, "bbox": [490, 231, 26, 25], "iscrowd": 0}, {"id": 16596993, "category_id": 88, "area": 6400, "bbox": [42, 34, 123, 345], "iscrowd": 0}, {"id": 14960640, "category_id": 88, "area": 847, "bbox": [500, 117, 84, 130], "iscrowd": 0}, {"id": 16460800, "category_id": 88, "area": 4385, "bbox": [5, 2, 47, 377], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 869, "bbox": [419, 306, 27, 93], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 869, "bbox": [0, 184, 19, 51], "iscrowd": 0}, {"id": 16711708, "category_id": 137, "area": 567, "bbox": [34, 204, 17, 35], "iscrowd": 0}, {"id": 15271717, "category_id": 137, "area": 3685, "bbox": [641, 1, 33, 373], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 323, "bbox": [581, 311, 19, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00001826", "file_name": "ADE_val_00001826.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 98149, "bbox": [2, 0, 679, 283], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 50072, "bbox": [2, 0, 681, 241], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 151082, "bbox": [1, 278, 681, 234], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 242, "bbox": [656, 283, 26, 13], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 9459, "bbox": [331, 199, 250, 82], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 90, "bbox": [309, 230, 11, 15], "iscrowd": 0}, {"id": 4530595, "category_id": 13, "area": 83, "bbox": [178, 89, 11, 10], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2364, "bbox": [43, 224, 85, 64], "iscrowd": 0}, {"id": 13849373, "category_id": 21, "area": 3327, "bbox": [405, 240, 79, 55], "iscrowd": 0}, {"id": 14508800, "category_id": 21, "area": 10459, "bbox": [89, 225, 188, 75], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 5543, "bbox": [480, 250, 135, 48], "iscrowd": 0}, {"id": 49919, "category_id": 33, "area": 180, "bbox": [15, 249, 35, 32], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 781, "bbox": [324, 169, 21, 38], "iscrowd": 0}, {"id": 11604479, "category_id": 44, "area": 590, "bbox": [43, 181, 22, 27], "iscrowd": 0}, {"id": 11075837, "category_id": 44, "area": 413, "bbox": [93, 178, 16, 28], "iscrowd": 0}, {"id": 11802111, "category_id": 44, "area": 480, "bbox": [666, 146, 16, 35], "iscrowd": 0}, {"id": 11737599, "category_id": 44, "area": 1779, "bbox": [61, 161, 119, 19], "iscrowd": 0}, {"id": 11534582, "category_id": 44, "area": 187, "bbox": [565, 253, 21, 19], "iscrowd": 0}, {"id": 10813695, "category_id": 44, "area": 252, "bbox": [533, 252, 16, 21], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 1270, "bbox": [261, 180, 54, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001827", "file_name": "ADE_val_00001827.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1455, "bbox": [73, 248, 86, 31], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 72227, "bbox": [0, 0, 682, 262], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 6409, "bbox": [418, 0, 265, 96], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 33398, "bbox": [279, 0, 404, 233], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 116513, "bbox": [1, 240, 682, 272], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2433, "bbox": [69, 267, 90, 61], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 937, "bbox": [658, 225, 24, 70], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 199, "bbox": [414, 224, 12, 33], "iscrowd": 0}, {"id": 2496672, "category_id": 13, "area": 66, "bbox": [393, 223, 10, 12], "iscrowd": 0}, {"id": 3350180, "category_id": 13, "area": 1883, "bbox": [549, 106, 59, 104], "iscrowd": 0}, {"id": 2496173, "category_id": 13, "area": 1321, "bbox": [226, 210, 24, 93], "iscrowd": 0}, {"id": 5382286, "category_id": 13, "area": 409, "bbox": [354, 222, 23, 56], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 37035, "bbox": [444, 210, 239, 197], "iscrowd": 0}, {"id": 11424256, "category_id": 21, "area": 11725, "bbox": [237, 232, 136, 106], "iscrowd": 0}, {"id": 13465605, "category_id": 21, "area": 4464, "bbox": [158, 227, 73, 72], "iscrowd": 0}, {"id": 13128987, "category_id": 21, "area": 1232, "bbox": [372, 232, 38, 42], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2116, "bbox": [2, 78, 75, 31], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 5869, "bbox": [233, 11, 147, 157], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 16670, "bbox": [427, 123, 157, 187], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 2011, "bbox": [65, 1, 16, 305], "iscrowd": 0}, {"id": 16727569, "category_id": 88, "area": 1413, "bbox": [188, 23, 33, 204], "iscrowd": 0}, {"id": 16725788, "category_id": 88, "area": 529, "bbox": [272, 97, 17, 114], "iscrowd": 0}, {"id": 16733197, "category_id": 88, "area": 892, "bbox": [618, 63, 28, 154], "iscrowd": 0}, {"id": 15873280, "category_id": 88, "area": 455, "bbox": [590, 107, 22, 104], "iscrowd": 0}, {"id": 16726809, "category_id": 88, "area": 301, "bbox": [613, 132, 13, 80], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 191, "bbox": [359, 238, 13, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001828", "file_name": "ADE_val_00001828.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 213471, "bbox": [0, 0, 683, 364], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 9633, "bbox": [626, 1, 57, 219], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5383, "bbox": [74, 162, 581, 227], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 76180, "bbox": [0, 350, 683, 162], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3254, "bbox": [422, 326, 244, 26], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 7123, "bbox": [134, 312, 165, 61], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2591, "bbox": [124, 269, 47, 142], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 103, "bbox": [45, 240, 13, 12], "iscrowd": 0}, {"id": 15548675, "category_id": 88, "area": 82, "bbox": [172, 238, 12, 11], "iscrowd": 0}, {"id": 16730631, "category_id": 88, "area": 97, "bbox": [233, 234, 13, 13], "iscrowd": 0}, {"id": 16730371, "category_id": 88, "area": 123, "bbox": [290, 229, 16, 12], "iscrowd": 0}, {"id": 16728320, "category_id": 88, "area": 166, "bbox": [407, 211, 19, 15], "iscrowd": 0}, {"id": 15554845, "category_id": 88, "area": 131, "bbox": [348, 221, 17, 14], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 159, "bbox": [422, 341, 13, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001829", "file_name": "ADE_val_00001829.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 97190, "bbox": [0, 0, 683, 365], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 8690, "bbox": [256, 0, 427, 172], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 54348, "bbox": [225, 0, 455, 346], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 19491, "bbox": [387, 236, 296, 160], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 128756, "bbox": [1, 230, 682, 282], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 72, "bbox": [281, 254, 15, 6], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 5967, "bbox": [206, 209, 54, 159], "iscrowd": 0}, {"id": 3276975, "category_id": 13, "area": 163, "bbox": [334, 224, 10, 25], "iscrowd": 0}, {"id": 5447034, "category_id": 13, "area": 35, "bbox": [602, 217, 10, 7], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1367, "bbox": [502, 225, 57, 31], "iscrowd": 0}, {"id": 13524736, "category_id": 21, "area": 3746, "bbox": [374, 224, 72, 63], "iscrowd": 0}, {"id": 13790720, "category_id": 21, "area": 1156, "bbox": [623, 242, 60, 22], "iscrowd": 0}, {"id": 11161344, "category_id": 21, "area": 203, "bbox": [430, 217, 17, 18], "iscrowd": 0}, {"id": 13654552, "category_id": 21, "area": 1331, "bbox": [581, 224, 56, 33], "iscrowd": 0}, {"id": 15100950, "category_id": 21, "area": 203, "bbox": [524, 220, 36, 16], "iscrowd": 0}, {"id": 14636058, "category_id": 21, "area": 167, "bbox": [496, 223, 20, 19], "iscrowd": 0}, {"id": 13528320, "category_id": 21, "area": 358, "bbox": [447, 221, 28, 21], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 5237, "bbox": [79, 160, 94, 59], "iscrowd": 0}, {"id": 10092769, "category_id": 44, "area": 529, "bbox": [584, 172, 23, 23], "iscrowd": 0}, {"id": 8655337, "category_id": 44, "area": 583, "bbox": [636, 131, 32, 19], "iscrowd": 0}, {"id": 11932911, "category_id": 44, "area": 106, "bbox": [579, 200, 6, 47], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 1443, "bbox": [377, 195, 54, 44], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 6942, "bbox": [228, 82, 113, 116], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 89, "bbox": [514, 185, 5, 38], "iscrowd": 0}, {"id": 15543557, "category_id": 88, "area": 464, "bbox": [358, 109, 36, 146], "iscrowd": 0}, {"id": 15805952, "category_id": 88, "area": 2250, "bbox": [446, 63, 27, 248], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 628, "bbox": [621, 164, 31, 25], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 280, "bbox": [280, 259, 21, 16], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 69, "bbox": [467, 195, 4, 26], "iscrowd": 0}, {"id": 15994652, "category_id": 137, "area": 213, "bbox": [425, 183, 42, 38], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1694, "bbox": [349, 257, 36, 54], "iscrowd": 0}]}, {"image_id": "ADE_val_00001830", "file_name": "ADE_val_00001830.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 85693, "bbox": [1, 0, 682, 381], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 98621, "bbox": [38, 0, 645, 282], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 26559, "bbox": [144, 58, 483, 299], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 79260, "bbox": [0, 328, 537, 184], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 31113, "bbox": [1, 311, 682, 201], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4049, "bbox": [83, 236, 598, 162], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 1876, "bbox": [19, 263, 108, 56], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 515, "bbox": [412, 312, 33, 21], "iscrowd": 0}, {"id": 13923072, "category_id": 21, "area": 1202, "bbox": [353, 305, 52, 29], "iscrowd": 0}, {"id": 12934912, "category_id": 21, "area": 12233, "bbox": [176, 301, 185, 98], "iscrowd": 0}, {"id": 12484113, "category_id": 21, "area": 133, "bbox": [0, 318, 7, 39], "iscrowd": 0}, {"id": 14110464, "category_id": 21, "area": 270, "bbox": [518, 321, 19, 18], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 866, "bbox": [547, 230, 13, 134], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 3749, "bbox": [519, 2, 29, 364], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 91, "bbox": [87, 245, 39, 59], "iscrowd": 0}, {"id": 16738322, "category_id": 96, "area": 179, "bbox": [28, 236, 46, 51], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 76, "bbox": [127, 308, 10, 9], "iscrowd": 0}, {"id": 15728895, "category_id": 126, "area": 49, "bbox": [110, 243, 11, 7], "iscrowd": 0}, {"id": 16384252, "category_id": 126, "area": 59, "bbox": [93, 242, 13, 6], "iscrowd": 0}, {"id": 14947045, "category_id": 126, "area": 32, "bbox": [83, 309, 4, 9], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 141, "bbox": [569, 329, 12, 14], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 342, "bbox": [589, 239, 20, 26], "iscrowd": 0}]}, {"image_id": "ADE_val_00001831", "file_name": "ADE_val_00001831.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 629, "bbox": [633, 291, 50, 15], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 99527, "bbox": [1, 65, 681, 251], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 55864, "bbox": [1, 1, 681, 186], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 38187, "bbox": [24, 5, 565, 318], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 123043, "bbox": [1, 301, 682, 211], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 10115, "bbox": [0, 299, 682, 66], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 3042, "bbox": [157, 290, 370, 21], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 291, "bbox": [127, 225, 27, 12], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 4540, "bbox": [284, 285, 151, 45], "iscrowd": 0}, {"id": 12286464, "category_id": 21, "area": 128, "bbox": [516, 286, 20, 11], "iscrowd": 0}, {"id": 14633984, "category_id": 21, "area": 525, "bbox": [530, 284, 37, 20], "iscrowd": 0}, {"id": 13272064, "category_id": 21, "area": 4261, "bbox": [1, 274, 93, 55], "iscrowd": 0}, {"id": 13659658, "category_id": 21, "area": 65, "bbox": [500, 284, 12, 6], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 293, "bbox": [561, 245, 19, 30], "iscrowd": 0}, {"id": 9967615, "category_id": 44, "area": 341, "bbox": [521, 237, 19, 66], "iscrowd": 0}, {"id": 9178367, "category_id": 44, "area": 293, "bbox": [355, 153, 11, 36], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 357, "bbox": [112, 304, 40, 12], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1218, "bbox": [154, 42, 32, 281], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1213, "bbox": [576, 123, 14, 199], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 512, "bbox": [122, 239, 32, 16], "iscrowd": 0}]}, {"image_id": "ADE_val_00001832", "file_name": "ADE_val_00001832.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 31694, "bbox": [224, 88, 458, 231], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 53969, "bbox": [1, 1, 681, 232], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 119739, "bbox": [1, 2, 679, 362], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 72883, "bbox": [180, 319, 503, 193], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 11022, "bbox": [1, 297, 144, 176], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 31719, "bbox": [1, 322, 681, 189], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4902, "bbox": [440, 309, 242, 46], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 123, "bbox": [158, 301, 7, 26], "iscrowd": 0}, {"id": 4784258, "category_id": 13, "area": 90, "bbox": [166, 302, 6, 24], "iscrowd": 0}, {"id": 2820261, "category_id": 13, "area": 145, "bbox": [148, 302, 8, 26], "iscrowd": 0}, {"id": 5963944, "category_id": 13, "area": 178, "bbox": [388, 311, 11, 31], "iscrowd": 0}, {"id": 3604650, "category_id": 13, "area": 47, "bbox": [638, 299, 4, 17], "iscrowd": 0}, {"id": 5116849, "category_id": 13, "area": 55, "bbox": [652, 297, 7, 19], "iscrowd": 0}, {"id": 5309602, "category_id": 13, "area": 116, "bbox": [125, 300, 7, 23], "iscrowd": 0}, {"id": 3735728, "category_id": 13, "area": 85, "bbox": [137, 303, 5, 22], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2955, "bbox": [469, 315, 98, 44], "iscrowd": 0}, {"id": 11892480, "category_id": 21, "area": 1637, "bbox": [383, 303, 60, 42], "iscrowd": 0}, {"id": 11227415, "category_id": 21, "area": 845, "bbox": [348, 306, 44, 31], "iscrowd": 0}, {"id": 15032342, "category_id": 21, "area": 316, "bbox": [327, 311, 27, 20], "iscrowd": 0}, {"id": 11895040, "category_id": 21, "area": 719, "bbox": [279, 303, 38, 25], "iscrowd": 0}, {"id": 11368448, "category_id": 21, "area": 5156, "bbox": [193, 301, 87, 76], "iscrowd": 0}, {"id": 14174740, "category_id": 21, "area": 153, "bbox": [263, 308, 15, 15], "iscrowd": 0}, {"id": 12930586, "category_id": 21, "area": 526, "bbox": [173, 303, 30, 37], "iscrowd": 0}, {"id": 12284930, "category_id": 21, "area": 305, "bbox": [184, 310, 16, 34], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 71, "bbox": [389, 291, 6, 16], "iscrowd": 0}, {"id": 8521471, "category_id": 44, "area": 288, "bbox": [174, 241, 13, 141], "iscrowd": 0}, {"id": 8257788, "category_id": 44, "area": 764, "bbox": [550, 261, 35, 56], "iscrowd": 0}, {"id": 9635056, "category_id": 44, "area": 389, "bbox": [587, 275, 12, 81], "iscrowd": 0}, {"id": 9830655, "category_id": 44, "area": 122, "bbox": [468, 284, 5, 46], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 306, "bbox": [1, 280, 28, 19], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 30, "bbox": [389, 279, 6, 6], "iscrowd": 0}, {"id": 16397824, "category_id": 88, "area": 11, "bbox": [261, 295, 5, 3], "iscrowd": 0}, {"id": 16732674, "category_id": 88, "area": 10, "bbox": [288, 292, 3, 9], "iscrowd": 0}, {"id": 16735252, "category_id": 88, "area": 27, "bbox": [368, 281, 5, 6], "iscrowd": 0}]}, {"image_id": "ADE_val_00001833", "file_name": "ADE_val_00001833.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 188721, "bbox": [1, 66, 511, 617], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 92257, "bbox": [1, 1, 510, 312], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 35496, "bbox": [1, 495, 389, 188], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 7350, "bbox": [234, 299, 70, 122], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2931, "bbox": [274, 102, 136, 411], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 3880, "bbox": [77, 12, 70, 144], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 10936, "bbox": [99, 2, 55, 656], "iscrowd": 0}, {"id": 16717901, "category_id": 94, "area": 3061, "bbox": [348, 4, 19, 292], "iscrowd": 0}]}, {"image_id": "ADE_val_00001834", "file_name": "ADE_val_00001834.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 178069, "bbox": [0, 0, 683, 372], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 24643, "bbox": [78, 2, 289, 213], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 90465, "bbox": [1, 288, 682, 224], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1298, "bbox": [148, 286, 28, 79], "iscrowd": 0}, {"id": 4592302, "category_id": 13, "area": 631, "bbox": [107, 291, 18, 58], "iscrowd": 0}, {"id": 5570698, "category_id": 13, "area": 592, "bbox": [130, 297, 20, 51], "iscrowd": 0}, {"id": 5904307, "category_id": 13, "area": 1864, "bbox": [1, 277, 40, 159], "iscrowd": 0}, {"id": 4398769, "category_id": 13, "area": 13153, "bbox": [40, 290, 90, 222], "iscrowd": 0}, {"id": 4456599, "category_id": 13, "area": 2754, "bbox": [476, 290, 46, 123], "iscrowd": 0}, {"id": 4725393, "category_id": 13, "area": 4471, "bbox": [620, 278, 51, 153], "iscrowd": 0}, {"id": 2953599, "category_id": 13, "area": 530, "bbox": [213, 293, 20, 46], "iscrowd": 0}, {"id": 3408041, "category_id": 13, "area": 547, "bbox": [164, 284, 20, 77], "iscrowd": 0}, {"id": 4396670, "category_id": 13, "area": 401, "bbox": [34, 288, 19, 45], "iscrowd": 0}, {"id": 2687144, "category_id": 13, "area": 675, "bbox": [39, 283, 37, 68], "iscrowd": 0}, {"id": 4133527, "category_id": 13, "area": 2485, "bbox": [1, 307, 31, 147], "iscrowd": 0}, {"id": 3868038, "category_id": 13, "area": 248, "bbox": [314, 285, 16, 29], "iscrowd": 0}, {"id": 4325512, "category_id": 13, "area": 728, "bbox": [381, 278, 24, 69], "iscrowd": 0}, {"id": 3473530, "category_id": 13, "area": 1523, "bbox": [369, 290, 23, 100], "iscrowd": 0}, {"id": 5243036, "category_id": 13, "area": 2060, "bbox": [339, 290, 31, 98], "iscrowd": 0}, {"id": 3342497, "category_id": 13, "area": 1946, "bbox": [313, 296, 31, 100], "iscrowd": 0}, {"id": 3539113, "category_id": 13, "area": 267, "bbox": [267, 291, 14, 58], "iscrowd": 0}, {"id": 5177477, "category_id": 13, "area": 2255, "bbox": [231, 291, 33, 109], "iscrowd": 0}, {"id": 3145882, "category_id": 13, "area": 166, "bbox": [195, 289, 11, 26], "iscrowd": 0}, {"id": 2163635, "category_id": 13, "area": 139, "bbox": [205, 287, 9, 26], "iscrowd": 0}, {"id": 4065924, "category_id": 13, "area": 132, "bbox": [229, 289, 11, 21], "iscrowd": 0}, {"id": 2359441, "category_id": 13, "area": 125, "bbox": [146, 290, 11, 20], "iscrowd": 0}, {"id": 3211418, "category_id": 13, "area": 1590, "bbox": [437, 282, 33, 86], "iscrowd": 0}, {"id": 5119156, "category_id": 13, "area": 2503, "bbox": [269, 288, 40, 113], "iscrowd": 0}, {"id": 2294398, "category_id": 13, "area": 614, "bbox": [476, 283, 22, 61], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 1062, "bbox": [387, 162, 16, 124], "iscrowd": 0}, {"id": 1114352, "category_id": 43, "area": 2502, "bbox": [509, 138, 22, 162], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 160, "bbox": [87, 266, 16, 10], "iscrowd": 0}, {"id": 10032121, "category_id": 44, "area": 176, "bbox": [221, 266, 16, 11], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 353, "bbox": [12, 121, 18, 36], "iscrowd": 0}, {"id": 16728077, "category_id": 88, "area": 157, "bbox": [76, 223, 29, 20], "iscrowd": 0}, {"id": 16015872, "category_id": 88, "area": 30, "bbox": [99, 248, 11, 9], "iscrowd": 0}, {"id": 15422976, "category_id": 88, "area": 173, "bbox": [298, 194, 26, 23], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 595, "bbox": [21, 375, 19, 54], "iscrowd": 0}, {"id": 10004026, "category_id": 116, "area": 1176, "bbox": [22, 432, 41, 61], "iscrowd": 0}, {"id": 10537522, "category_id": 116, "area": 509, "bbox": [476, 313, 29, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00001835", "file_name": "ADE_val_00001835.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 160828, "bbox": [0, 0, 683, 512], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 27561, "bbox": [188, 0, 322, 156], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 183, "bbox": [440, 181, 9, 31], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 32863, "bbox": [0, 218, 463, 294], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 57426, "bbox": [1, 213, 632, 299], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 930, "bbox": [414, 194, 81, 19], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4025, "bbox": [472, 195, 65, 128], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2336, "bbox": [389, 209, 58, 48], "iscrowd": 0}, {"id": 14122763, "category_id": 21, "area": 51467, "bbox": [32, 226, 343, 213], "iscrowd": 0}, {"id": 14898176, "category_id": 21, "area": 391, "bbox": [444, 207, 24, 18], "iscrowd": 0}, {"id": 12875008, "category_id": 21, "area": 53, "bbox": [460, 205, 10, 15], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 55, "bbox": [477, 191, 6, 28], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 174, "bbox": [357, 125, 12, 103], "iscrowd": 0}, {"id": 15936000, "category_id": 88, "area": 115, "bbox": [3, 163, 9, 20], "iscrowd": 0}, {"id": 15421187, "category_id": 88, "area": 853, "bbox": [442, 51, 22, 203], "iscrowd": 0}, {"id": 16078086, "category_id": 88, "area": 151, "bbox": [467, 143, 9, 81], "iscrowd": 0}, {"id": 16734464, "category_id": 88, "area": 107, "bbox": [412, 158, 8, 52], "iscrowd": 0}, {"id": 16733199, "category_id": 88, "area": 43, "bbox": [449, 167, 3, 39], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 513, "bbox": [520, 281, 19, 37], "iscrowd": 0}]}, {"image_id": "ADE_val_00001836", "file_name": "ADE_val_00001836.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 525, "bbox": [557, 110, 16, 51], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 69639, "bbox": [0, 0, 682, 446], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 13112, "bbox": [368, 0, 214, 86], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 7925, "bbox": [192, 0, 215, 110], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 120122, "bbox": [0, 145, 504, 366], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 101398, "bbox": [188, 129, 494, 382], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 525, "bbox": [540, 104, 17, 44], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 12844, "bbox": [244, 95, 250, 87], "iscrowd": 0}, {"id": 13598984, "category_id": 21, "area": 1730, "bbox": [473, 105, 52, 46], "iscrowd": 0}, {"id": 13467655, "category_id": 21, "area": 4490, "bbox": [145, 100, 116, 58], "iscrowd": 0}, {"id": 13849874, "category_id": 21, "area": 9686, "bbox": [0, 97, 146, 87], "iscrowd": 0}, {"id": 13650688, "category_id": 21, "area": 250, "bbox": [377, 103, 19, 16], "iscrowd": 0}, {"id": 13459968, "category_id": 21, "area": 158, "bbox": [391, 102, 18, 16], "iscrowd": 0}, {"id": 11887382, "category_id": 21, "area": 277, "bbox": [404, 104, 24, 15], "iscrowd": 0}, {"id": 11820568, "category_id": 21, "area": 221, "bbox": [424, 105, 21, 14], "iscrowd": 0}, {"id": 11953155, "category_id": 21, "area": 128, "bbox": [444, 104, 13, 15], "iscrowd": 0}, {"id": 13794307, "category_id": 21, "area": 149, "bbox": [452, 102, 15, 17], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 512, "bbox": [152, 55, 23, 39], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 578, "bbox": [486, 86, 36, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001837", "file_name": "ADE_val_00001837.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 253477, "bbox": [3, 1, 509, 682], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 39938, "bbox": [1, 1, 281, 249], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 39160, "bbox": [3, 495, 416, 188], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 8276, "bbox": [1, 491, 463, 191], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 548, "bbox": [1, 76, 16, 54], "iscrowd": 0}, {"id": 15088640, "category_id": 88, "area": 403, "bbox": [406, 293, 34, 30], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 756, "bbox": [1, 600, 18, 51], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 892, "bbox": [32, 397, 51, 34], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 161, "bbox": [10, 462, 10, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00001838", "file_name": "ADE_val_00001838.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 175231, "bbox": [1, 0, 682, 360], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 44726, "bbox": [1, 1, 249, 208], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 89699, "bbox": [1, 329, 681, 182], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 13422, "bbox": [0, 324, 604, 188], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2315, "bbox": [198, 311, 82, 40], "iscrowd": 0}, {"id": 13983002, "category_id": 21, "area": 9221, "bbox": [271, 316, 180, 72], "iscrowd": 0}, {"id": 13389839, "category_id": 21, "area": 736, "bbox": [165, 309, 57, 23], "iscrowd": 0}, {"id": 12476423, "category_id": 21, "area": 4484, "bbox": [416, 318, 120, 59], "iscrowd": 0}, {"id": 13599006, "category_id": 21, "area": 3460, "bbox": [601, 325, 80, 68], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 66, "bbox": [47, 283, 5, 14], "iscrowd": 0}, {"id": 10813693, "category_id": 44, "area": 54, "bbox": [239, 286, 4, 14], "iscrowd": 0}, {"id": 10226687, "category_id": 44, "area": 207, "bbox": [587, 287, 10, 21], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 307, "bbox": [603, 29, 65, 41], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1655, "bbox": [670, 19, 12, 293], "iscrowd": 0}]}, {"image_id": "ADE_val_00001839", "file_name": "ADE_val_00001839.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 169897, "bbox": [0, 0, 639, 352], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 35186, "bbox": [1, 1, 682, 249], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 6388, "bbox": [92, 207, 591, 147], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 91199, "bbox": [0, 355, 683, 157], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 4425, "bbox": [7, 313, 675, 49], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2853, "bbox": [138, 327, 115, 34], "iscrowd": 0}, {"id": 11883776, "category_id": 21, "area": 4213, "bbox": [273, 321, 141, 42], "iscrowd": 0}, {"id": 13328412, "category_id": 21, "area": 196, "bbox": [647, 313, 19, 13], "iscrowd": 0}, {"id": 12286731, "category_id": 21, "area": 56, "bbox": [671, 311, 7, 13], "iscrowd": 0}, {"id": 12352011, "category_id": 21, "area": 3799, "bbox": [21, 312, 109, 47], "iscrowd": 0}, {"id": 14703646, "category_id": 21, "area": 22, "bbox": [659, 308, 10, 4], "iscrowd": 0}, {"id": 14573568, "category_id": 21, "area": 145, "bbox": [673, 314, 10, 19], "iscrowd": 0}, {"id": 12864000, "category_id": 21, "area": 334, "bbox": [0, 328, 17, 27], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1035, "bbox": [142, 37, 115, 25], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1277, "bbox": [430, 84, 31, 275], "iscrowd": 0}, {"id": 16071705, "category_id": 88, "area": 232, "bbox": [114, 6, 12, 22], "iscrowd": 0}, {"id": 16012544, "category_id": 88, "area": 175, "bbox": [9, 26, 12, 20], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 295, "bbox": [660, 192, 12, 146], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 2176, "bbox": [478, 202, 85, 36], "iscrowd": 0}, {"id": 65410, "category_id": 124, "area": 3040, "bbox": [44, 44, 24, 159], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 6342, "bbox": [573, 62, 50, 319], "iscrowd": 0}, {"id": 16714055, "category_id": 137, "area": 883, "bbox": [624, 231, 18, 127], "iscrowd": 0}]}, {"image_id": "ADE_val_00001840", "file_name": "ADE_val_00001840.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 68905, "bbox": [1, 1, 682, 269], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 2488, "bbox": [583, 1, 73, 80], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 77121, "bbox": [45, 1, 595, 404], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 70180, "bbox": [1, 217, 605, 295], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 98729, "bbox": [1, 232, 682, 280], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 78, "bbox": [634, 217, 5, 23], "iscrowd": 0}, {"id": 2560433, "category_id": 13, "area": 592, "bbox": [42, 193, 21, 54], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 4834, "bbox": [113, 208, 116, 51], "iscrowd": 0}, {"id": 11751182, "category_id": 21, "area": 2445, "bbox": [222, 213, 85, 41], "iscrowd": 0}, {"id": 14571264, "category_id": 21, "area": 1067, "bbox": [281, 208, 46, 40], "iscrowd": 0}, {"id": 12732929, "category_id": 21, "area": 523, "bbox": [348, 213, 24, 31], "iscrowd": 0}, {"id": 12550686, "category_id": 21, "area": 711, "bbox": [363, 214, 42, 26], "iscrowd": 0}, {"id": 12021000, "category_id": 21, "area": 652, "bbox": [390, 209, 38, 29], "iscrowd": 0}, {"id": 11885312, "category_id": 21, "area": 784, "bbox": [481, 215, 42, 27], "iscrowd": 0}, {"id": 12608275, "category_id": 21, "area": 950, "bbox": [428, 212, 48, 28], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2245, "bbox": [97, 170, 40, 82], "iscrowd": 0}, {"id": 11535344, "category_id": 44, "area": 342, "bbox": [80, 150, 12, 100], "iscrowd": 0}, {"id": 8070128, "category_id": 44, "area": 236, "bbox": [553, 175, 12, 21], "iscrowd": 0}, {"id": 8066789, "category_id": 44, "area": 292, "bbox": [642, 173, 15, 22], "iscrowd": 0}, {"id": 11141353, "category_id": 44, "area": 49, "bbox": [421, 201, 7, 8], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 1107, "bbox": [604, 196, 36, 40], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 629, "bbox": [177, 19, 65, 188], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 450, "bbox": [552, 226, 36, 29], "iscrowd": 0}, {"id": 16318644, "category_id": 117, "area": 521, "bbox": [519, 230, 44, 39], "iscrowd": 0}, {"id": 14746539, "category_id": 117, "area": 1845, "bbox": [450, 238, 97, 77], "iscrowd": 0}, {"id": 15925429, "category_id": 117, "area": 5254, "bbox": [412, 231, 118, 106], "iscrowd": 0}, {"id": 14946200, "category_id": 117, "area": 1695, "bbox": [464, 223, 93, 84], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 44, "bbox": [423, 189, 4, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00001841", "file_name": "ADE_val_00001841.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 257, "bbox": [454, 333, 49, 7], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 144840, "bbox": [0, 0, 683, 347], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 64031, "bbox": [211, 0, 472, 272], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 9084, "bbox": [509, 142, 174, 185], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 70399, "bbox": [0, 334, 683, 162], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 27930, "bbox": [49, 333, 634, 178], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 24, "bbox": [365, 324, 5, 9], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 317, "bbox": [257, 329, 26, 33], "iscrowd": 0}, {"id": 5969810, "category_id": 13, "area": 1107, "bbox": [616, 324, 29, 73], "iscrowd": 0}, {"id": 5963946, "category_id": 13, "area": 1690, "bbox": [645, 318, 30, 86], "iscrowd": 0}, {"id": 4718751, "category_id": 13, "area": 132, "bbox": [353, 326, 7, 27], "iscrowd": 0}, {"id": 5701775, "category_id": 13, "area": 346, "bbox": [606, 326, 17, 57], "iscrowd": 0}, {"id": 3473585, "category_id": 13, "area": 50, "bbox": [2, 183, 8, 10], "iscrowd": 0}, {"id": 5638816, "category_id": 13, "area": 51, "bbox": [6, 190, 9, 10], "iscrowd": 0}, {"id": 3414439, "category_id": 13, "area": 133, "bbox": [31, 324, 7, 25], "iscrowd": 0}, {"id": 2104461, "category_id": 13, "area": 32, "bbox": [279, 323, 6, 9], "iscrowd": 0}, {"id": 4587679, "category_id": 13, "area": 38, "bbox": [285, 325, 6, 9], "iscrowd": 0}, {"id": 2363311, "category_id": 13, "area": 44, "bbox": [295, 325, 7, 10], "iscrowd": 0}, {"id": 3348110, "category_id": 13, "area": 11, "bbox": [331, 325, 3, 5], "iscrowd": 0}, {"id": 5051796, "category_id": 13, "area": 13, "bbox": [311, 325, 6, 4], "iscrowd": 0}, {"id": 3604612, "category_id": 13, "area": 17, "bbox": [317, 323, 5, 6], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 5233, "bbox": [0, 323, 87, 112], "iscrowd": 0}, {"id": 11623966, "category_id": 21, "area": 137, "bbox": [279, 331, 12, 17], "iscrowd": 0}, {"id": 12543488, "category_id": 21, "area": 1186, "bbox": [217, 321, 63, 34], "iscrowd": 0}, {"id": 15029510, "category_id": 21, "area": 683, "bbox": [311, 329, 44, 21], "iscrowd": 0}, {"id": 12798208, "category_id": 21, "area": 252, "bbox": [371, 329, 26, 15], "iscrowd": 0}, {"id": 14436370, "category_id": 21, "area": 517, "bbox": [384, 330, 42, 17], "iscrowd": 0}, {"id": 14963969, "category_id": 21, "area": 200, "bbox": [410, 327, 27, 15], "iscrowd": 0}, {"id": 13529356, "category_id": 21, "area": 213, "bbox": [503, 328, 24, 11], "iscrowd": 0}, {"id": 13394176, "category_id": 21, "area": 2032, "bbox": [113, 330, 81, 34], "iscrowd": 0}, {"id": 12681222, "category_id": 21, "area": 384, "bbox": [290, 329, 39, 18], "iscrowd": 0}, {"id": 12218880, "category_id": 21, "area": 140, "bbox": [359, 330, 13, 15], "iscrowd": 0}, {"id": 14704128, "category_id": 21, "area": 166, "bbox": [526, 327, 20, 12], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 132, "bbox": [222, 326, 12, 27], "iscrowd": 0}, {"id": 10682616, "category_id": 44, "area": 428, "bbox": [589, 290, 24, 61], "iscrowd": 0}, {"id": 10160610, "category_id": 44, "area": 5862, "bbox": [34, 182, 70, 329], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 259, "bbox": [544, 322, 32, 16], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 236, "bbox": [282, 303, 24, 17], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1046, "bbox": [513, 129, 60, 225], "iscrowd": 0}, {"id": 16731404, "category_id": 88, "area": 123, "bbox": [388, 275, 7, 53], "iscrowd": 0}, {"id": 16726016, "category_id": 88, "area": 82, "bbox": [437, 283, 5, 45], "iscrowd": 0}, {"id": 15352832, "category_id": 88, "area": 82, "bbox": [487, 292, 4, 36], "iscrowd": 0}, {"id": 16463634, "category_id": 88, "area": 14, "bbox": [458, 274, 12, 2], "iscrowd": 0}, {"id": 16732419, "category_id": 88, "area": 12, "bbox": [379, 256, 10, 3], "iscrowd": 0}, {"id": 15019264, "category_id": 88, "area": 16, "bbox": [423, 265, 9, 3], "iscrowd": 0}, {"id": 15747328, "category_id": 88, "area": 55, "bbox": [590, 197, 18, 5], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 1864, "bbox": [59, 323, 73, 35], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 505, "bbox": [251, 344, 35, 27], "iscrowd": 0}, {"id": 14750358, "category_id": 117, "area": 250, "bbox": [580, 332, 16, 24], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 399, "bbox": [213, 257, 82, 92], "iscrowd": 0}, {"id": 14811188, "category_id": 137, "area": 298, "bbox": [544, 294, 9, 64], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 174, "bbox": [597, 255, 8, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001842", "file_name": "ADE_val_00001842.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 154332, "bbox": [0, 0, 683, 412], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 84109, "bbox": [0, 0, 683, 284], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3764, "bbox": [513, 283, 81, 87], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 58261, "bbox": [1, 361, 671, 151], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 18308, "bbox": [2, 362, 680, 150], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2700, "bbox": [227, 266, 199, 79], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 626, "bbox": [280, 266, 26, 31], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 293, "bbox": [590, 354, 18, 39], "iscrowd": 0}, {"id": 5439614, "category_id": 13, "area": 263, "bbox": [623, 353, 15, 38], "iscrowd": 0}, {"id": 2162835, "category_id": 13, "area": 953, "bbox": [666, 348, 17, 100], "iscrowd": 0}, {"id": 3866789, "category_id": 13, "area": 54, "bbox": [546, 352, 6, 13], "iscrowd": 0}, {"id": 3148945, "category_id": 13, "area": 49, "bbox": [559, 357, 5, 14], "iscrowd": 0}, {"id": 2038659, "category_id": 13, "area": 42, "bbox": [565, 357, 4, 15], "iscrowd": 0}, {"id": 5308555, "category_id": 13, "area": 391, "bbox": [310, 351, 15, 43], "iscrowd": 0}, {"id": 4718718, "category_id": 13, "area": 86, "bbox": [474, 352, 6, 24], "iscrowd": 0}, {"id": 2564233, "category_id": 13, "area": 26, "bbox": [524, 356, 4, 8], "iscrowd": 0}, {"id": 3211413, "category_id": 13, "area": 138, "bbox": [437, 352, 10, 20], "iscrowd": 0}, {"id": 3413155, "category_id": 13, "area": 99, "bbox": [429, 352, 8, 17], "iscrowd": 0}, {"id": 4980887, "category_id": 13, "area": 125, "bbox": [421, 351, 8, 21], "iscrowd": 0}, {"id": 3539102, "category_id": 13, "area": 120, "bbox": [406, 353, 10, 34], "iscrowd": 0}, {"id": 2949247, "category_id": 13, "area": 27, "bbox": [607, 357, 4, 11], "iscrowd": 0}, {"id": 4915352, "category_id": 13, "area": 32, "bbox": [613, 357, 4, 11], "iscrowd": 0}, {"id": 2166423, "category_id": 13, "area": 83, "bbox": [579, 354, 7, 18], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 8428, "bbox": [45, 160, 62, 346], "iscrowd": 0}, {"id": 10158335, "category_id": 44, "area": 408, "bbox": [126, 238, 23, 19], "iscrowd": 0}, {"id": 11803108, "category_id": 44, "area": 6499, "bbox": [598, 226, 85, 286], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 2169, "bbox": [141, 267, 90, 38], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 42, "bbox": [542, 273, 12, 8], "iscrowd": 0}, {"id": 16007171, "category_id": 88, "area": 272, "bbox": [240, 292, 27, 28], "iscrowd": 0}, {"id": 16724736, "category_id": 88, "area": 883, "bbox": [630, 153, 43, 206], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1411, "bbox": [453, 430, 25, 80], "iscrowd": 0}, {"id": 15597616, "category_id": 94, "area": 193, "bbox": [236, 380, 7, 40], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 124, "bbox": [598, 374, 6, 28], "iscrowd": 0}, {"id": 62185, "category_id": 128, "area": 71, "bbox": [630, 373, 4, 25], "iscrowd": 0}, {"id": 65535, "category_id": 128, "area": 1145, "bbox": [415, 368, 65, 24], "iscrowd": 0}, {"id": 121343, "category_id": 128, "area": 510, "bbox": [333, 372, 29, 37], "iscrowd": 0}]}, {"image_id": "ADE_val_00001843", "file_name": "ADE_val_00001843.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 204884, "bbox": [0, 0, 683, 338], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 3918, "bbox": [1, 19, 25, 194], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 113304, "bbox": [0, 330, 683, 182], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 6017, "bbox": [0, 316, 683, 32], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1362, "bbox": [505, 56, 41, 37], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 96, "bbox": [8, 306, 9, 25], "iscrowd": 0}, {"id": 3606925, "category_id": 13, "area": 228, "bbox": [281, 298, 15, 36], "iscrowd": 0}, {"id": 4063400, "category_id": 13, "area": 144, "bbox": [280, 291, 5, 41], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2914, "bbox": [28, 313, 112, 37], "iscrowd": 0}, {"id": 14508288, "category_id": 21, "area": 2814, "bbox": [167, 311, 106, 36], "iscrowd": 0}, {"id": 13721856, "category_id": 21, "area": 75, "bbox": [0, 305, 9, 11], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1218, "bbox": [1, 1, 110, 24], "iscrowd": 0}, {"id": 10748159, "category_id": 44, "area": 276, "bbox": [155, 253, 11, 27], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 958, "bbox": [251, 249, 86, 13], "iscrowd": 0}, {"id": 65407, "category_id": 124, "area": 1138, "bbox": [432, 244, 85, 14], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 4581, "bbox": [125, 121, 88, 230], "iscrowd": 0}, {"id": 16187405, "category_id": 137, "area": 798, "bbox": [6, 139, 19, 206], "iscrowd": 0}, {"id": 15864594, "category_id": 137, "area": 751, "bbox": [375, 230, 17, 108], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 110, "bbox": [139, 318, 11, 25], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 162, "bbox": [428, 199, 19, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00001844", "file_name": "ADE_val_00001844.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 114036, "bbox": [0, 0, 683, 356], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 22437, "bbox": [0, 0, 657, 235], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 72910, "bbox": [0, 0, 683, 339], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 81741, "bbox": [0, 324, 683, 188], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 443, "bbox": [159, 337, 70, 14], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1151, "bbox": [569, 365, 114, 23], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 20, "bbox": [527, 323, 7, 5], "iscrowd": 0}, {"id": 3280770, "category_id": 13, "area": 30, "bbox": [594, 323, 6, 11], "iscrowd": 0}, {"id": 4980880, "category_id": 13, "area": 348, "bbox": [622, 316, 20, 31], "iscrowd": 0}, {"id": 4653220, "category_id": 13, "area": 194, "bbox": [197, 317, 11, 40], "iscrowd": 0}, {"id": 5775508, "category_id": 13, "area": 409, "bbox": [182, 318, 22, 35], "iscrowd": 0}, {"id": 5053049, "category_id": 13, "area": 858, "bbox": [124, 313, 39, 62], "iscrowd": 0}, {"id": 4200570, "category_id": 13, "area": 31, "bbox": [550, 320, 4, 13], "iscrowd": 0}, {"id": 3997824, "category_id": 13, "area": 157, "bbox": [671, 322, 12, 30], "iscrowd": 0}, {"id": 5311886, "category_id": 13, "area": 17, "bbox": [428, 321, 5, 5], "iscrowd": 0}, {"id": 2424973, "category_id": 13, "area": 142, "bbox": [313, 317, 17, 14], "iscrowd": 0}, {"id": 5505186, "category_id": 13, "area": 22, "bbox": [96, 317, 5, 6], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 3945, "bbox": [378, 326, 99, 60], "iscrowd": 0}, {"id": 13660162, "category_id": 21, "area": 948, "bbox": [516, 329, 38, 30], "iscrowd": 0}, {"id": 13458950, "category_id": 21, "area": 873, "bbox": [450, 329, 48, 38], "iscrowd": 0}, {"id": 11365376, "category_id": 21, "area": 648, "bbox": [553, 328, 34, 24], "iscrowd": 0}, {"id": 13130752, "category_id": 21, "area": 731, "bbox": [229, 320, 67, 29], "iscrowd": 0}, {"id": 12150272, "category_id": 21, "area": 94, "bbox": [517, 321, 13, 10], "iscrowd": 0}, {"id": 12217108, "category_id": 21, "area": 134, "bbox": [552, 322, 19, 17], "iscrowd": 0}, {"id": 11566859, "category_id": 21, "area": 16, "bbox": [577, 320, 12, 4], "iscrowd": 0}, {"id": 11435789, "category_id": 21, "area": 170, "bbox": [577, 322, 17, 14], "iscrowd": 0}, {"id": 14378010, "category_id": 21, "area": 23, "bbox": [588, 319, 8, 4], "iscrowd": 0}, {"id": 13528576, "category_id": 21, "area": 39, "bbox": [602, 320, 7, 8], "iscrowd": 0}, {"id": 14766592, "category_id": 21, "area": 53, "bbox": [606, 322, 10, 8], "iscrowd": 0}, {"id": 11761934, "category_id": 21, "area": 19, "bbox": [613, 318, 6, 4], "iscrowd": 0}, {"id": 13851136, "category_id": 21, "area": 17, "bbox": [616, 322, 4, 5], "iscrowd": 0}, {"id": 13986072, "category_id": 21, "area": 62, "bbox": [620, 316, 10, 9], "iscrowd": 0}, {"id": 12807196, "category_id": 21, "area": 17539, "bbox": [188, 330, 224, 112], "iscrowd": 0}, {"id": 14832640, "category_id": 21, "area": 640, "bbox": [350, 324, 43, 26], "iscrowd": 0}, {"id": 12349708, "category_id": 21, "area": 323, "bbox": [85, 323, 30, 29], "iscrowd": 0}, {"id": 11822607, "category_id": 21, "area": 50, "bbox": [592, 322, 11, 10], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 181, "bbox": [624, 298, 13, 14], "iscrowd": 0}, {"id": 10754815, "category_id": 44, "area": 277, "bbox": [237, 281, 17, 17], "iscrowd": 0}, {"id": 9706988, "category_id": 44, "area": 94, "bbox": [452, 303, 7, 25], "iscrowd": 0}, {"id": 9112805, "category_id": 44, "area": 49, "bbox": [503, 309, 6, 18], "iscrowd": 0}, {"id": 9765103, "category_id": 44, "area": 704, "bbox": [401, 291, 25, 36], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 1308, "bbox": [192, 207, 78, 119], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 13794, "bbox": [0, 211, 113, 201], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 100, "bbox": [209, 287, 6, 43], "iscrowd": 0}, {"id": 16729099, "category_id": 88, "area": 144, "bbox": [238, 208, 11, 72], "iscrowd": 0}, {"id": 16146944, "category_id": 88, "area": 28, "bbox": [75, 298, 4, 14], "iscrowd": 0}, {"id": 16732446, "category_id": 88, "area": 65, "bbox": [584, 286, 11, 34], "iscrowd": 0}, {"id": 16081158, "category_id": 88, "area": 171, "bbox": [495, 249, 23, 80], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 207, "bbox": [530, 316, 20, 15], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 2071, "bbox": [105, 335, 72, 53], "iscrowd": 0}, {"id": 15276213, "category_id": 117, "area": 27, "bbox": [594, 331, 5, 7], "iscrowd": 0}, {"id": 16712858, "category_id": 117, "area": 1415, "bbox": [596, 330, 52, 48], "iscrowd": 0}, {"id": 16719288, "category_id": 117, "area": 278, "bbox": [186, 344, 17, 28], "iscrowd": 0}, {"id": 16711839, "category_id": 117, "area": 209, "bbox": [214, 326, 21, 25], "iscrowd": 0}, {"id": 16321694, "category_id": 117, "area": 108, "bbox": [171, 324, 11, 16], "iscrowd": 0}, {"id": 16390283, "category_id": 117, "area": 65, "bbox": [484, 328, 13, 15], "iscrowd": 0}, {"id": 15473303, "category_id": 117, "area": 67, "bbox": [490, 326, 12, 16], "iscrowd": 0}, {"id": 15277755, "category_id": 117, "area": 58, "bbox": [495, 329, 13, 12], "iscrowd": 0}, {"id": 16193192, "category_id": 117, "area": 54, "bbox": [503, 327, 8, 13], "iscrowd": 0}, {"id": 16580762, "category_id": 117, "area": 46, "bbox": [508, 327, 9, 13], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 231, "bbox": [661, 344, 22, 26], "iscrowd": 0}, {"id": 1240063, "category_id": 128, "area": 326, "bbox": [640, 338, 21, 34], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 326, "bbox": [647, 260, 15, 29], "iscrowd": 0}, {"id": 15007779, "category_id": 137, "area": 322, "bbox": [123, 162, 15, 28], "iscrowd": 0}, {"id": 16711732, "category_id": 137, "area": 317, "bbox": [669, 259, 13, 30], "iscrowd": 0}, {"id": 16717868, "category_id": 137, "area": 206, "bbox": [113, 171, 10, 22], "iscrowd": 0}, {"id": 16580640, "category_id": 137, "area": 182, "bbox": [300, 291, 13, 37], "iscrowd": 0}, {"id": 15794222, "category_id": 137, "area": 169, "bbox": [230, 293, 10, 39], "iscrowd": 0}, {"id": 16714564, "category_id": 137, "area": 67, "bbox": [447, 306, 5, 23], "iscrowd": 0}, {"id": 16713514, "category_id": 137, "area": 73, "bbox": [357, 304, 7, 20], "iscrowd": 0}, {"id": 16711724, "category_id": 137, "area": 1671, "bbox": [638, 101, 44, 276], "iscrowd": 0}, {"id": 16715588, "category_id": 137, "area": 205, "bbox": [598, 211, 34, 86], "iscrowd": 0}, {"id": 15468324, "category_id": 137, "area": 246, "bbox": [648, 286, 11, 62], "iscrowd": 0}]}, {"image_id": "ADE_val_00001845", "file_name": "ADE_val_00001845.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 143806, "bbox": [1, 0, 682, 409], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 12427, "bbox": [323, 1, 353, 249], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 61015, "bbox": [333, 1, 346, 511], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 24464, "bbox": [372, 275, 311, 237], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 75838, "bbox": [1, 286, 605, 224], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 211, "bbox": [351, 274, 12, 32], "iscrowd": 0}, {"id": 5771163, "category_id": 13, "area": 1650, "bbox": [642, 279, 41, 101], "iscrowd": 0}, {"id": 3735679, "category_id": 13, "area": 103, "bbox": [344, 273, 7, 32], "iscrowd": 0}, {"id": 5374101, "category_id": 13, "area": 25, "bbox": [339, 274, 5, 9], "iscrowd": 0}, {"id": 3539084, "category_id": 13, "area": 42, "bbox": [349, 276, 5, 19], "iscrowd": 0}, {"id": 3213710, "category_id": 13, "area": 233, "bbox": [312, 271, 12, 37], "iscrowd": 0}, {"id": 3539107, "category_id": 13, "area": 245, "bbox": [269, 267, 12, 51], "iscrowd": 0}, {"id": 2629520, "category_id": 13, "area": 419, "bbox": [290, 275, 17, 45], "iscrowd": 0}, {"id": 2629539, "category_id": 13, "area": 656, "bbox": [326, 274, 21, 55], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1019, "bbox": [622, 274, 55, 57], "iscrowd": 0}, {"id": 12014336, "category_id": 21, "area": 1170, "bbox": [598, 286, 38, 46], "iscrowd": 0}, {"id": 11291396, "category_id": 21, "area": 348, "bbox": [562, 286, 14, 33], "iscrowd": 0}, {"id": 14910222, "category_id": 21, "area": 941, "bbox": [530, 283, 39, 33], "iscrowd": 0}, {"id": 11167241, "category_id": 21, "area": 189, "bbox": [415, 277, 13, 18], "iscrowd": 0}, {"id": 11367424, "category_id": 21, "area": 152, "bbox": [361, 271, 13, 20], "iscrowd": 0}, {"id": 13728512, "category_id": 21, "area": 92, "bbox": [390, 273, 11, 14], "iscrowd": 0}, {"id": 12409344, "category_id": 21, "area": 559, "bbox": [501, 274, 40, 35], "iscrowd": 0}, {"id": 14837504, "category_id": 21, "area": 230, "bbox": [489, 282, 15, 22], "iscrowd": 0}, {"id": 12872448, "category_id": 21, "area": 291, "bbox": [475, 281, 23, 21], "iscrowd": 0}, {"id": 14776320, "category_id": 21, "area": 225, "bbox": [462, 280, 18, 20], "iscrowd": 0}, {"id": 13196800, "category_id": 21, "area": 24, "bbox": [463, 280, 5, 7], "iscrowd": 0}, {"id": 14179328, "category_id": 21, "area": 75, "bbox": [427, 279, 8, 13], "iscrowd": 0}, {"id": 14382854, "category_id": 21, "area": 23, "bbox": [338, 273, 8, 5], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 3488, "bbox": [130, 19, 70, 79], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 11039, "bbox": [496, 1, 58, 496], "iscrowd": 0}, {"id": 14958096, "category_id": 88, "area": 127, "bbox": [542, 239, 7, 43], "iscrowd": 0}, {"id": 16728852, "category_id": 88, "area": 263, "bbox": [607, 221, 11, 64], "iscrowd": 0}, {"id": 16003352, "category_id": 88, "area": 193, "bbox": [383, 211, 10, 59], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 782, "bbox": [368, 293, 25, 43], "iscrowd": 0}, {"id": 16128440, "category_id": 117, "area": 2471, "bbox": [634, 314, 49, 88], "iscrowd": 0}]}, {"image_id": "ADE_val_00001846", "file_name": "ADE_val_00001846.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 114538, "bbox": [1, 1, 681, 458], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 18220, "bbox": [207, 1, 233, 200], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 68822, "bbox": [199, 0, 483, 473], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 3885, "bbox": [368, 253, 315, 216], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 83002, "bbox": [1, 253, 682, 259], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 7891, "bbox": [317, 226, 65, 211], "iscrowd": 0}, {"id": 2163856, "category_id": 13, "area": 7977, "bbox": [207, 216, 46, 221], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 7851, "bbox": [611, 290, 72, 149], "iscrowd": 0}, {"id": 12477210, "category_id": 21, "area": 964, "bbox": [439, 271, 16, 66], "iscrowd": 0}, {"id": 13981982, "category_id": 21, "area": 632, "bbox": [379, 265, 38, 60], "iscrowd": 0}, {"id": 13138462, "category_id": 21, "area": 649, "bbox": [280, 247, 30, 32], "iscrowd": 0}, {"id": 12744204, "category_id": 21, "area": 180, "bbox": [403, 248, 15, 17], "iscrowd": 0}, {"id": 11168014, "category_id": 21, "area": 464, "bbox": [259, 245, 26, 22], "iscrowd": 0}, {"id": 12542464, "category_id": 21, "area": 243, "bbox": [445, 250, 22, 19], "iscrowd": 0}, {"id": 13126675, "category_id": 21, "area": 112, "bbox": [254, 245, 13, 17], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 166, "bbox": [275, 225, 9, 52], "iscrowd": 0}, {"id": 9635323, "category_id": 44, "area": 221, "bbox": [292, 217, 8, 52], "iscrowd": 0}, {"id": 9044214, "category_id": 44, "area": 133, "bbox": [520, 196, 12, 28], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 3979, "bbox": [460, 54, 30, 364], "iscrowd": 0}, {"id": 16728832, "category_id": 88, "area": 276, "bbox": [616, 207, 13, 53], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 217, "bbox": [441, 244, 20, 19], "iscrowd": 0}, {"id": 649632, "category_id": 103, "area": 13798, "bbox": [450, 250, 207, 140], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 359, "bbox": [274, 270, 30, 30], "iscrowd": 0}, {"id": 2021375, "category_id": 128, "area": 319, "bbox": [288, 273, 21, 29], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 6485, "bbox": [364, 80, 62, 281], "iscrowd": 0}]}, {"image_id": "ADE_val_00001847", "file_name": "ADE_val_00001847.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 732, "bbox": [272, 264, 109, 10], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 98804, "bbox": [1, 0, 682, 292], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 24080, "bbox": [160, 0, 523, 224], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 52910, "bbox": [1, 1, 380, 293], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 69845, "bbox": [1, 283, 682, 229], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 5558, "bbox": [1, 278, 682, 59], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6108, "bbox": [386, 222, 192, 78], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 75367, "bbox": [90, 272, 585, 196], "iscrowd": 0}, {"id": 14770191, "category_id": 21, "area": 450, "bbox": [218, 265, 29, 18], "iscrowd": 0}, {"id": 14515211, "category_id": 21, "area": 54, "bbox": [263, 261, 17, 6], "iscrowd": 0}, {"id": 15106573, "category_id": 21, "area": 111, "bbox": [261, 264, 10, 12], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1223, "bbox": [651, 270, 32, 41], "iscrowd": 0}, {"id": 434175, "category_id": 33, "area": 4351, "bbox": [385, 265, 220, 47], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 194, "bbox": [628, 244, 25, 64], "iscrowd": 0}, {"id": 409338, "category_id": 39, "area": 204, "bbox": [589, 249, 17, 55], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 239, "bbox": [96, 227, 9, 62], "iscrowd": 0}, {"id": 10815487, "category_id": 44, "area": 296, "bbox": [556, 206, 16, 22], "iscrowd": 0}, {"id": 9440759, "category_id": 44, "area": 844, "bbox": [248, 197, 29, 31], "iscrowd": 0}, {"id": 8261359, "category_id": 44, "area": 542, "bbox": [372, 203, 25, 23], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1096, "bbox": [607, 270, 43, 34], "iscrowd": 0}, {"id": 63743, "category_id": 54, "area": 159, "bbox": [148, 265, 31, 14], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 1900, "bbox": [248, 17, 17, 263], "iscrowd": 0}, {"id": 15269917, "category_id": 94, "area": 369, "bbox": [563, 227, 13, 100], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 472, "bbox": [367, 180, 20, 93], "iscrowd": 0}]}, {"image_id": "ADE_val_00001848", "file_name": "ADE_val_00001848.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 170629, "bbox": [0, 0, 683, 492], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 79714, "bbox": [331, 0, 352, 250], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 66869, "bbox": [1, 329, 682, 182], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 713, "bbox": [346, 323, 336, 12], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2520, "bbox": [223, 335, 45, 90], "iscrowd": 0}, {"id": 2949258, "category_id": 13, "area": 279, "bbox": [369, 323, 14, 41], "iscrowd": 0}, {"id": 4587695, "category_id": 13, "area": 64, "bbox": [479, 316, 9, 11], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1396, "bbox": [432, 329, 69, 45], "iscrowd": 0}, {"id": 12150528, "category_id": 21, "area": 400, "bbox": [513, 323, 71, 17], "iscrowd": 0}, {"id": 14371840, "category_id": 21, "area": 475, "bbox": [478, 323, 73, 18], "iscrowd": 0}, {"id": 14382080, "category_id": 21, "area": 701, "bbox": [599, 325, 55, 17], "iscrowd": 0}, {"id": 11429376, "category_id": 21, "area": 2042, "bbox": [465, 332, 65, 52], "iscrowd": 0}, {"id": 14974737, "category_id": 21, "area": 824, "bbox": [503, 340, 70, 40], "iscrowd": 0}, {"id": 11821848, "category_id": 21, "area": 6479, "bbox": [590, 342, 93, 115], "iscrowd": 0}, {"id": 12155136, "category_id": 21, "area": 2491, "bbox": [646, 385, 37, 103], "iscrowd": 0}, {"id": 12935443, "category_id": 21, "area": 3388, "bbox": [379, 293, 96, 48], "iscrowd": 0}, {"id": 13524240, "category_id": 21, "area": 1431, "bbox": [577, 342, 99, 67], "iscrowd": 0}, {"id": 13721088, "category_id": 21, "area": 3944, "bbox": [511, 341, 123, 73], "iscrowd": 0}, {"id": 13389318, "category_id": 21, "area": 163, "bbox": [336, 323, 12, 20], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 845, "bbox": [499, 313, 84, 16], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 484, "bbox": [262, 121, 22, 34], "iscrowd": 0}, {"id": 16730126, "category_id": 88, "area": 335, "bbox": [332, 240, 21, 26], "iscrowd": 0}, {"id": 16724240, "category_id": 88, "area": 336, "bbox": [629, 201, 19, 65], "iscrowd": 0}, {"id": 16724224, "category_id": 88, "area": 153, "bbox": [668, 220, 14, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00001849", "file_name": "ADE_val_00001849.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 283057, "bbox": [0, 0, 683, 512], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 25985, "bbox": [2, 1, 266, 187], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 7675, "bbox": [1, 443, 220, 69], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 19262, "bbox": [1, 423, 522, 89], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 130, "bbox": [25, 375, 7, 35], "iscrowd": 0}, {"id": 2758823, "category_id": 13, "area": 1349, "bbox": [249, 390, 26, 70], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 463, "bbox": [194, 346, 20, 25], "iscrowd": 0}, {"id": 8198911, "category_id": 44, "area": 853, "bbox": [237, 251, 43, 28], "iscrowd": 0}, {"id": 10887653, "category_id": 44, "area": 1896, "bbox": [378, 169, 53, 60], "iscrowd": 0}, {"id": 10354936, "category_id": 44, "area": 585, "bbox": [317, 304, 30, 22], "iscrowd": 0}, {"id": 9765119, "category_id": 44, "area": 252, "bbox": [493, 370, 15, 18], "iscrowd": 0}, {"id": 8393466, "category_id": 44, "area": 156, "bbox": [495, 406, 13, 13], "iscrowd": 0}, {"id": 9964534, "category_id": 44, "area": 176, "bbox": [560, 373, 15, 12], "iscrowd": 0}, {"id": 8392703, "category_id": 44, "area": 174, "bbox": [561, 409, 16, 13], "iscrowd": 0}, {"id": 8784353, "category_id": 44, "area": 251, "bbox": [626, 409, 21, 14], "iscrowd": 0}, {"id": 8262655, "category_id": 44, "area": 289, "bbox": [623, 371, 22, 14], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 428, "bbox": [118, 239, 14, 58], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 513, "bbox": [151, 319, 60, 15], "iscrowd": 0}, {"id": 458654, "category_id": 124, "area": 149, "bbox": [66, 340, 20, 10], "iscrowd": 0}, {"id": 65430, "category_id": 124, "area": 755, "bbox": [596, 182, 49, 30], "iscrowd": 0}, {"id": 261991, "category_id": 124, "area": 180, "bbox": [160, 337, 33, 8], "iscrowd": 0}, {"id": 60527, "category_id": 124, "area": 268, "bbox": [432, 242, 25, 17], "iscrowd": 0}, {"id": 65434, "category_id": 124, "area": 507, "bbox": [255, 315, 47, 20], "iscrowd": 0}, {"id": 65384, "category_id": 124, "area": 53, "bbox": [70, 395, 13, 5], "iscrowd": 0}, {"id": 1441435, "category_id": 124, "area": 226, "bbox": [258, 361, 17, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001850", "file_name": "ADE_val_00001850.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 34020, "bbox": [413, 310, 270, 202], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 217976, "bbox": [28, 0, 655, 464], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 12910, "bbox": [1, 1, 76, 262], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4000, "bbox": [1, 4, 56, 312], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 40507, "bbox": [1, 325, 457, 185], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 554, "bbox": [1, 261, 30, 29], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 13325, "bbox": [37, 319, 361, 153], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 7449, "bbox": [543, 418, 140, 94], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 163, "bbox": [1, 315, 11, 20], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 3550, "bbox": [113, 168, 73, 66], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 229, "bbox": [18, 314, 19, 18], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 3189, "bbox": [209, 183, 113, 51], "iscrowd": 0}, {"id": 5436416, "category_id": 87, "area": 723, "bbox": [164, 224, 46, 31], "iscrowd": 0}, {"id": 5046032, "category_id": 87, "area": 339, "bbox": [136, 243, 27, 25], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 59, "bbox": [81, 193, 10, 9], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 4141, "bbox": [457, 292, 225, 218], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1725, "bbox": [115, 338, 34, 58], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 289, "bbox": [79, 153, 18, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00001851", "file_name": "ADE_val_00001851.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 240356, "bbox": [61, 1, 622, 464], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 7673, "bbox": [1, 1, 198, 139], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 16190, "bbox": [1, 1, 91, 310], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 65097, "bbox": [1, 336, 682, 176], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 10387, "bbox": [111, 348, 572, 143], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 2019, "bbox": [17, 130, 56, 55], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1083, "bbox": [1, 303, 43, 42], "iscrowd": 0}, {"id": 11960064, "category_id": 21, "area": 4400, "bbox": [24, 297, 94, 62], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 144, "bbox": [421, 20, 13, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001852", "file_name": "ADE_val_00001852.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 221480, "bbox": [1, 1, 682, 350], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 82035, "bbox": [1, 378, 682, 134], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 5628, "bbox": [1, 341, 644, 58], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1376, "bbox": [539, 333, 54, 45], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 404, "bbox": [273, 295, 13, 50], "iscrowd": 0}, {"id": 2293895, "category_id": 13, "area": 192, "bbox": [387, 300, 13, 25], "iscrowd": 0}, {"id": 5184657, "category_id": 13, "area": 324, "bbox": [547, 298, 12, 38], "iscrowd": 0}, {"id": 2692256, "category_id": 13, "area": 351, "bbox": [502, 300, 21, 41], "iscrowd": 0}, {"id": 3145892, "category_id": 13, "area": 168, "bbox": [664, 299, 13, 24], "iscrowd": 0}, {"id": 3868309, "category_id": 13, "area": 196, "bbox": [25, 293, 12, 27], "iscrowd": 0}, {"id": 5317526, "category_id": 13, "area": 572, "bbox": [582, 296, 20, 52], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2749, "bbox": [622, 317, 60, 65], "iscrowd": 0}, {"id": 15039753, "category_id": 21, "area": 13142, "bbox": [37, 322, 250, 80], "iscrowd": 0}, {"id": 12417304, "category_id": 21, "area": 11974, "bbox": [329, 320, 225, 78], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 918, "bbox": [489, 196, 23, 144], "iscrowd": 0}]}, {"image_id": "ADE_val_00001853", "file_name": "ADE_val_00001853.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 151924, "bbox": [1, 0, 681, 481], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 34307, "bbox": [146, 0, 500, 192], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 19579, "bbox": [4, 1, 640, 371], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 65085, "bbox": [2, 330, 646, 182], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 33071, "bbox": [0, 323, 683, 189], "iscrowd": 0}, {"id": 15466240, "category_id": 123, "area": 613, "bbox": [319, 57, 21, 39], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 290, "bbox": [640, 291, 8, 39], "iscrowd": 0}, {"id": 13194003, "category_id": 21, "area": 9611, "bbox": [14, 310, 164, 80], "iscrowd": 0}, {"id": 13061120, "category_id": 21, "area": 2499, "bbox": [355, 298, 68, 47], "iscrowd": 0}, {"id": 13585181, "category_id": 21, "area": 5147, "bbox": [158, 307, 107, 65], "iscrowd": 0}, {"id": 13991168, "category_id": 21, "area": 1486, "bbox": [411, 295, 48, 42], "iscrowd": 0}, {"id": 11632412, "category_id": 21, "area": 784, "bbox": [602, 290, 21, 54], "iscrowd": 0}, {"id": 13130243, "category_id": 21, "area": 776, "bbox": [446, 293, 34, 39], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 468, "bbox": [163, 232, 36, 13], "iscrowd": 0}, {"id": 11403519, "category_id": 44, "area": 627, "bbox": [487, 141, 16, 41], "iscrowd": 0}, {"id": 8585471, "category_id": 44, "area": 586, "bbox": [470, 143, 16, 40], "iscrowd": 0}, {"id": 11606271, "category_id": 44, "area": 288, "bbox": [177, 220, 36, 9], "iscrowd": 0}, {"id": 10420469, "category_id": 44, "area": 267, "bbox": [427, 245, 13, 50], "iscrowd": 0}, {"id": 11739903, "category_id": 44, "area": 390, "bbox": [231, 237, 21, 70], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 283, "bbox": [322, 27, 71, 24], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 12120, "bbox": [475, 269, 133, 110], "iscrowd": 0}]}, {"image_id": "ADE_val_00001854", "file_name": "ADE_val_00001854.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 213708, "bbox": [1, 1, 682, 387], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 67903, "bbox": [1, 404, 682, 108], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 3204, "bbox": [1, 384, 666, 27], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 1614, "bbox": [345, 2, 54, 33], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 883, "bbox": [376, 302, 22, 56], "iscrowd": 0}, {"id": 5898411, "category_id": 13, "area": 501, "bbox": [21, 304, 11, 60], "iscrowd": 0}, {"id": 4980914, "category_id": 13, "area": 705, "bbox": [87, 295, 22, 52], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 18026, "bbox": [335, 324, 249, 101], "iscrowd": 0}, {"id": 13257733, "category_id": 21, "area": 19315, "bbox": [4, 322, 273, 103], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2277, "bbox": [605, 231, 41, 166], "iscrowd": 0}, {"id": 10750436, "category_id": 44, "area": 9131, "bbox": [34, 2, 87, 140], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 209, "bbox": [116, 220, 25, 15], "iscrowd": 0}, {"id": 235775, "category_id": 83, "area": 30, "bbox": [140, 243, 9, 6], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 2546, "bbox": [494, 237, 111, 26], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 2558, "bbox": [4, 164, 30, 216], "iscrowd": 0}, {"id": 16729364, "category_id": 88, "area": 2638, "bbox": [637, 172, 28, 225], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 1497, "bbox": [651, 343, 31, 66], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 916, "bbox": [612, 321, 27, 55], "iscrowd": 0}]}, {"image_id": "ADE_val_00001855", "file_name": "ADE_val_00001855.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 255365, "bbox": [1, 0, 682, 437], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 54918, "bbox": [1, 373, 682, 139], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 25495, "bbox": [1, 346, 682, 140], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4991, "bbox": [546, 252, 49, 107], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 1131, "bbox": [201, 240, 113, 15], "iscrowd": 0}, {"id": 196495, "category_id": 124, "area": 5069, "bbox": [374, 188, 161, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00001856", "file_name": "ADE_val_00001856.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3089, "bbox": [89, 232, 498, 25], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 83115, "bbox": [0, 0, 683, 390], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 46695, "bbox": [160, 0, 523, 200], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 36309, "bbox": [41, 1, 642, 324], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 93280, "bbox": [43, 248, 640, 264], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 1288, "bbox": [632, 233, 51, 30], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 60331, "bbox": [0, 236, 683, 276], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 49, "bbox": [275, 236, 15, 4], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2056, "bbox": [175, 248, 41, 90], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 643, "bbox": [366, 238, 31, 26], "iscrowd": 0}, {"id": 14373120, "category_id": 21, "area": 569, "bbox": [338, 234, 42, 23], "iscrowd": 0}, {"id": 13847562, "category_id": 21, "area": 4805, "bbox": [304, 258, 116, 57], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 64, "bbox": [330, 245, 8, 8], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 892, "bbox": [123, 280, 40, 39], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 646, "bbox": [416, 234, 42, 24], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 2243, "bbox": [225, 71, 84, 262], "iscrowd": 0}, {"id": 16733184, "category_id": 88, "area": 1285, "bbox": [233, 102, 68, 215], "iscrowd": 0}, {"id": 15617024, "category_id": 88, "area": 995, "bbox": [239, 124, 56, 180], "iscrowd": 0}, {"id": 15160064, "category_id": 88, "area": 281, "bbox": [435, 136, 17, 102], "iscrowd": 0}, {"id": 16728320, "category_id": 88, "area": 37, "bbox": [358, 221, 5, 13], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 421, "bbox": [387, 234, 33, 19], "iscrowd": 0}, {"id": 1965975, "category_id": 103, "area": 6427, "bbox": [519, 236, 121, 66], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 767, "bbox": [43, 269, 21, 55], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 193, "bbox": [287, 151, 10, 23], "iscrowd": 0}, {"id": 16711691, "category_id": 137, "area": 92, "bbox": [434, 194, 6, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00001857", "file_name": "ADE_val_00001857.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 2302, "bbox": [1, 362, 237, 35], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 27783, "bbox": [86, 165, 495, 230], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 164614, "bbox": [2, 1, 680, 331], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2586, "bbox": [2, 239, 679, 129], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 47619, "bbox": [1, 366, 682, 146], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 9946, "bbox": [203, 376, 269, 111], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 2584, "bbox": [0, 323, 192, 22], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 2664, "bbox": [2, 343, 143, 29], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 42641, "bbox": [282, 256, 401, 191], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2919, "bbox": [409, 182, 50, 79], "iscrowd": 0}, {"id": 11411967, "category_id": 44, "area": 2580, "bbox": [361, 211, 47, 73], "iscrowd": 0}, {"id": 8389604, "category_id": 44, "area": 848, "bbox": [476, 217, 25, 41], "iscrowd": 0}, {"id": 8589311, "category_id": 44, "area": 274, "bbox": [55, 331, 13, 49], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 3204, "bbox": [312, 2, 9, 420], "iscrowd": 0}, {"id": 16734750, "category_id": 88, "area": 286, "bbox": [184, 221, 45, 159], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 1730, "bbox": [148, 346, 43, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00001858", "file_name": "ADE_val_00001858.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 160033, "bbox": [1, 1, 682, 360], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 19408, "bbox": [185, 2, 495, 215], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 35105, "bbox": [455, 5, 218, 296], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 46920, "bbox": [1, 346, 559, 162], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 38901, "bbox": [1, 340, 592, 172], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 813, "bbox": [399, 296, 61, 26], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1797, "bbox": [554, 305, 40, 88], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 4504, "bbox": [393, 309, 133, 50], "iscrowd": 0}, {"id": 13005063, "category_id": 21, "area": 2836, "bbox": [523, 299, 128, 57], "iscrowd": 0}, {"id": 13847552, "category_id": 21, "area": 20750, "bbox": [549, 317, 134, 195], "iscrowd": 0}, {"id": 11488284, "category_id": 21, "area": 7136, "bbox": [235, 315, 174, 60], "iscrowd": 0}, {"id": 13194779, "category_id": 21, "area": 878, "bbox": [629, 296, 51, 23], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 1171, "bbox": [201, 280, 36, 34], "iscrowd": 0}, {"id": 21751, "category_id": 39, "area": 906, "bbox": [243, 281, 28, 34], "iscrowd": 0}, {"id": 796415, "category_id": 39, "area": 493, "bbox": [274, 285, 25, 35], "iscrowd": 0}, {"id": 208895, "category_id": 39, "area": 158, "bbox": [305, 279, 30, 36], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 149, "bbox": [589, 258, 10, 41], "iscrowd": 0}, {"id": 9896191, "category_id": 44, "area": 117, "bbox": [663, 262, 8, 32], "iscrowd": 0}, {"id": 11797747, "category_id": 44, "area": 243, "bbox": [660, 203, 15, 20], "iscrowd": 0}, {"id": 10491135, "category_id": 44, "area": 125, "bbox": [491, 257, 9, 23], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 318, "bbox": [640, 1, 38, 201], "iscrowd": 0}]}, {"image_id": "ADE_val_00001859", "file_name": "ADE_val_00001859.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 184956, "bbox": [0, 1, 683, 390], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 84936, "bbox": [1, 313, 591, 199], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1324, "bbox": [422, 293, 43, 54], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 17887, "bbox": [580, 286, 103, 225], "iscrowd": 0}, {"id": 4657292, "category_id": 13, "area": 695, "bbox": [14, 250, 26, 44], "iscrowd": 0}, {"id": 2359459, "category_id": 13, "area": 2389, "bbox": [1, 255, 25, 150], "iscrowd": 0}, {"id": 3676325, "category_id": 13, "area": 6468, "bbox": [18, 254, 76, 184], "iscrowd": 0}, {"id": 2496682, "category_id": 13, "area": 2049, "bbox": [107, 279, 40, 98], "iscrowd": 0}, {"id": 3145855, "category_id": 13, "area": 395, "bbox": [198, 255, 20, 35], "iscrowd": 0}, {"id": 2360998, "category_id": 13, "area": 6491, "bbox": [144, 249, 75, 164], "iscrowd": 0}, {"id": 5906052, "category_id": 13, "area": 4307, "bbox": [273, 267, 43, 158], "iscrowd": 0}, {"id": 2889338, "category_id": 13, "area": 2759, "bbox": [302, 250, 37, 167], "iscrowd": 0}, {"id": 2364315, "category_id": 13, "area": 125, "bbox": [161, 257, 13, 21], "iscrowd": 0}, {"id": 5243033, "category_id": 13, "area": 2345, "bbox": [489, 275, 43, 118], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 888, "bbox": [666, 241, 17, 129], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1519, "bbox": [369, 13, 79, 95], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 4035, "bbox": [470, 161, 136, 33], "iscrowd": 0}, {"id": 1965928, "category_id": 124, "area": 3760, "bbox": [297, 146, 140, 48], "iscrowd": 0}, {"id": 63369, "category_id": 124, "area": 2078, "bbox": [152, 186, 88, 37], "iscrowd": 0}, {"id": 65410, "category_id": 124, "area": 1618, "bbox": [180, 155, 77, 39], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 445, "bbox": [430, 350, 23, 25], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 774, "bbox": [79, 270, 25, 48], "iscrowd": 0}]}, {"image_id": "ADE_val_00001860", "file_name": "ADE_val_00001860.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 40042, "bbox": [2, 0, 254, 229], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 6131, "bbox": [111, 1, 61, 153], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 9059, "bbox": [19, 169, 237, 87], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2663, "bbox": [0, 169, 256, 87], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 128, "bbox": [137, 164, 15, 12], "iscrowd": 0}, {"id": 13066013, "category_id": 21, "area": 419, "bbox": [110, 166, 33, 33], "iscrowd": 0}, {"id": 12546560, "category_id": 21, "area": 5773, "bbox": [25, 170, 111, 76], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 149, "bbox": [105, 99, 10, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001861", "file_name": "ADE_val_00001861.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 30931, "bbox": [0, 0, 256, 182], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 11104, "bbox": [41, 1, 133, 147], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 18475, "bbox": [2, 164, 254, 92], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1051, "bbox": [0, 164, 256, 32], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1956, "bbox": [29, 165, 33, 91], "iscrowd": 0}, {"id": 2169005, "category_id": 13, "area": 41, "bbox": [92, 162, 5, 12], "iscrowd": 0}, {"id": 3081858, "category_id": 13, "area": 129, "bbox": [66, 163, 7, 26], "iscrowd": 0}, {"id": 3145874, "category_id": 13, "area": 29, "bbox": [100, 161, 5, 11], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1027, "bbox": [11, 78, 59, 20], "iscrowd": 0}, {"id": 9309414, "category_id": 44, "area": 174, "bbox": [53, 129, 39, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001862", "file_name": "ADE_val_00001862.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 26033, "bbox": [1, 0, 255, 148], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 7307, "bbox": [86, 1, 99, 117], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 21966, "bbox": [2, 129, 254, 127], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 531, "bbox": [83, 131, 49, 23], "iscrowd": 0}, {"id": 12017664, "category_id": 21, "area": 447, "bbox": [143, 128, 26, 24], "iscrowd": 0}, {"id": 12603675, "category_id": 21, "area": 1446, "bbox": [29, 137, 52, 44], "iscrowd": 0}, {"id": 13921024, "category_id": 21, "area": 2305, "bbox": [0, 141, 42, 76], "iscrowd": 0}, {"id": 11359750, "category_id": 21, "area": 138, "bbox": [169, 137, 12, 18], "iscrowd": 0}, {"id": 13527566, "category_id": 21, "area": 596, "bbox": [176, 136, 35, 31], "iscrowd": 0}, {"id": 14701312, "category_id": 21, "area": 2775, "bbox": [196, 138, 60, 71], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 703, "bbox": [243, 10, 13, 62], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 540, "bbox": [175, 105, 36, 21], "iscrowd": 0}]}, {"image_id": "ADE_val_00001863", "file_name": "ADE_val_00001863.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 34247, "bbox": [2, 0, 254, 196], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 6681, "bbox": [88, 1, 118, 99], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 16925, "bbox": [0, 141, 256, 115], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 3190, "bbox": [0, 144, 256, 86], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 78, "bbox": [132, 142, 11, 13], "iscrowd": 0}, {"id": 11957760, "category_id": 21, "area": 137, "bbox": [121, 144, 18, 18], "iscrowd": 0}, {"id": 14838800, "category_id": 21, "area": 684, "bbox": [99, 146, 31, 31], "iscrowd": 0}, {"id": 13990917, "category_id": 21, "area": 52, "bbox": [160, 139, 8, 9], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 168, "bbox": [197, 111, 14, 15], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 148, "bbox": [137, 137, 17, 14], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 176, "bbox": [198, 35, 25, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00001864", "file_name": "ADE_val_00001864.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 30399, "bbox": [2, 0, 254, 164], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 5371, "bbox": [89, 1, 79, 123], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 24502, "bbox": [2, 131, 254, 125], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2719, "bbox": [2, 140, 254, 51], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 186, "bbox": [188, 127, 11, 28], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 25, "bbox": [134, 133, 7, 7], "iscrowd": 0}, {"id": 14773022, "category_id": 21, "area": 167, "bbox": [110, 129, 21, 14], "iscrowd": 0}, {"id": 11763466, "category_id": 21, "area": 200, "bbox": [94, 129, 19, 20], "iscrowd": 0}, {"id": 12536064, "category_id": 21, "area": 591, "bbox": [72, 131, 31, 29], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 281, "bbox": [153, 129, 29, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001865", "file_name": "ADE_val_00001865.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 27278, "bbox": [0, 0, 256, 195], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 14254, "bbox": [77, 1, 178, 126], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 13368, "bbox": [62, 153, 194, 103], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 5289, "bbox": [2, 161, 254, 95], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 149, "bbox": [119, 153, 10, 31], "iscrowd": 0}, {"id": 2034322, "category_id": 13, "area": 153, "bbox": [137, 150, 8, 32], "iscrowd": 0}, {"id": 3211437, "category_id": 13, "area": 274, "bbox": [162, 150, 14, 40], "iscrowd": 0}, {"id": 2229636, "category_id": 13, "area": 231, "bbox": [97, 172, 20, 25], "iscrowd": 0}, {"id": 5902458, "category_id": 13, "area": 143, "bbox": [72, 152, 7, 34], "iscrowd": 0}, {"id": 2104749, "category_id": 13, "area": 158, "bbox": [81, 151, 10, 30], "iscrowd": 0}, {"id": 2883762, "category_id": 13, "area": 154, "bbox": [94, 153, 10, 29], "iscrowd": 0}, {"id": 5439665, "category_id": 13, "area": 96, "bbox": [106, 152, 7, 20], "iscrowd": 0}, {"id": 3938170, "category_id": 13, "area": 171, "bbox": [147, 150, 11, 29], "iscrowd": 0}, {"id": 3414411, "category_id": 13, "area": 72, "bbox": [204, 147, 7, 20], "iscrowd": 0}, {"id": 4851625, "category_id": 13, "area": 135, "bbox": [216, 146, 10, 27], "iscrowd": 0}, {"id": 4587658, "category_id": 13, "area": 279, "bbox": [190, 146, 12, 37], "iscrowd": 0}, {"id": 2429076, "category_id": 13, "area": 79, "bbox": [229, 150, 7, 21], "iscrowd": 0}, {"id": 5308591, "category_id": 13, "area": 366, "bbox": [0, 163, 13, 55], "iscrowd": 0}, {"id": 5118331, "category_id": 13, "area": 86, "bbox": [222, 145, 7, 22], "iscrowd": 0}, {"id": 3084159, "category_id": 13, "area": 117, "bbox": [242, 144, 8, 25], "iscrowd": 0}, {"id": 2425010, "category_id": 13, "area": 111, "bbox": [249, 145, 6, 25], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 633, "bbox": [6, 192, 43, 26], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 688, "bbox": [178, 185, 34, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001866", "file_name": "ADE_val_00001866.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 21582, "bbox": [1, 8, 255, 215], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 22370, "bbox": [2, 1, 254, 165], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2601, "bbox": [137, 85, 119, 113], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 8340, "bbox": [19, 191, 237, 65], "iscrowd": 0}, {"id": 12105983, "category_id": 85, "area": 1847, "bbox": [196, 43, 36, 95], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 476, "bbox": [2, 200, 54, 14], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 59, "bbox": [186, 202, 10, 8], "iscrowd": 0}, {"id": 12089344, "category_id": 21, "area": 225, "bbox": [130, 201, 17, 18], "iscrowd": 0}, {"id": 13528064, "category_id": 21, "area": 334, "bbox": [106, 197, 25, 24], "iscrowd": 0}, {"id": 12602903, "category_id": 21, "area": 571, "bbox": [79, 199, 30, 24], "iscrowd": 0}, {"id": 12877083, "category_id": 21, "area": 403, "bbox": [55, 207, 29, 21], "iscrowd": 0}, {"id": 11894016, "category_id": 21, "area": 904, "bbox": [21, 209, 44, 30], "iscrowd": 0}, {"id": 12416029, "category_id": 21, "area": 964, "bbox": [2, 216, 30, 40], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 257, "bbox": [241, 183, 8, 36], "iscrowd": 0}, {"id": 16717548, "category_id": 81, "area": 2591, "bbox": [197, 161, 44, 65], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 112, "bbox": [160, 182, 7, 33], "iscrowd": 0}, {"id": 16715033, "category_id": 137, "area": 96, "bbox": [173, 182, 7, 31], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 85, "bbox": [209, 80, 10, 11], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 52, "bbox": [54, 25, 7, 16], "iscrowd": 0}, {"id": 15145538, "category_id": 150, "area": 43, "bbox": [64, 42, 10, 10], "iscrowd": 0}]}, {"image_id": "ADE_val_00001867", "file_name": "ADE_val_00001867.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 29090, "bbox": [2, 0, 254, 158], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 5793, "bbox": [83, 1, 86, 124], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 22648, "bbox": [2, 131, 254, 125], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1660, "bbox": [143, 134, 113, 38], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 160, "bbox": [108, 130, 18, 15], "iscrowd": 0}, {"id": 11630365, "category_id": 21, "area": 424, "bbox": [74, 133, 32, 26], "iscrowd": 0}, {"id": 14379806, "category_id": 21, "area": 510, "bbox": [61, 136, 28, 36], "iscrowd": 0}, {"id": 13992971, "category_id": 21, "area": 4013, "bbox": [1, 136, 73, 70], "iscrowd": 0}, {"id": 14964487, "category_id": 21, "area": 115, "bbox": [99, 133, 11, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001868", "file_name": "ADE_val_00001868.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 39347, "bbox": [0, 1, 256, 240], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 373, "bbox": [211, 1, 45, 16], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 1854, "bbox": [111, 225, 145, 31], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1945, "bbox": [110, 214, 146, 40], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 8638, "bbox": [0, 0, 256, 115], "iscrowd": 0}]}, {"image_id": "ADE_val_00001869", "file_name": "ADE_val_00001869.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 36520, "bbox": [2, 0, 254, 170], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 4382, "bbox": [83, 1, 173, 81], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 14292, "bbox": [2, 168, 254, 88], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 160, "bbox": [247, 203, 9, 27], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 599, "bbox": [145, 161, 84, 13], "iscrowd": 0}, {"id": 12014105, "category_id": 21, "area": 158, "bbox": [129, 162, 27, 9], "iscrowd": 0}, {"id": 12413440, "category_id": 21, "area": 512, "bbox": [2, 162, 19, 34], "iscrowd": 0}, {"id": 13335040, "category_id": 21, "area": 2084, "bbox": [195, 169, 61, 45], "iscrowd": 0}, {"id": 12996881, "category_id": 21, "area": 3006, "bbox": [89, 171, 81, 51], "iscrowd": 0}, {"id": 12548878, "category_id": 21, "area": 227, "bbox": [228, 164, 28, 20], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 154, "bbox": [149, 96, 21, 64], "iscrowd": 0}, {"id": 15224836, "category_id": 88, "area": 106, "bbox": [8, 22, 42, 128], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 837, "bbox": [20, 160, 37, 32], "iscrowd": 0}, {"id": 65473, "category_id": 103, "area": 1471, "bbox": [49, 160, 57, 36], "iscrowd": 0}]}, {"image_id": "ADE_val_00001870", "file_name": "ADE_val_00001870.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 23010, "bbox": [0, 0, 256, 183], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 2265, "bbox": [76, 1, 131, 26], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 599, "bbox": [234, 85, 22, 51], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 22243, "bbox": [0, 136, 255, 120], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2428, "bbox": [2, 148, 124, 70], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 12715, "bbox": [94, 1, 162, 133], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 150, "bbox": [176, 133, 17, 14], "iscrowd": 0}, {"id": 12352000, "category_id": 21, "area": 644, "bbox": [224, 137, 32, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00001871", "file_name": "ADE_val_00001871.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 28085, "bbox": [2, 0, 254, 144], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 6056, "bbox": [78, 1, 98, 108], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 14171, "bbox": [2, 137, 254, 119], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 290, "bbox": [85, 142, 26, 22], "iscrowd": 0}, {"id": 13990912, "category_id": 21, "area": 507, "bbox": [60, 137, 27, 35], "iscrowd": 0}, {"id": 13659393, "category_id": 21, "area": 4958, "bbox": [2, 135, 74, 99], "iscrowd": 0}, {"id": 11230986, "category_id": 21, "area": 287, "bbox": [150, 137, 19, 20], "iscrowd": 0}, {"id": 12747283, "category_id": 21, "area": 5073, "bbox": [82, 142, 85, 77], "iscrowd": 0}, {"id": 13193984, "category_id": 21, "area": 3787, "bbox": [182, 139, 74, 73], "iscrowd": 0}, {"id": 11689472, "category_id": 21, "area": 358, "bbox": [167, 140, 26, 20], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 632, "bbox": [28, 108, 47, 22], "iscrowd": 0}, {"id": 4845075, "category_id": 87, "area": 140, "bbox": [75, 121, 20, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00001872", "file_name": "ADE_val_00001872.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 34104, "bbox": [2, 26, 254, 180], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 12924, "bbox": [2, 1, 254, 120], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 10578, "bbox": [2, 192, 254, 64], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 1533, "bbox": [0, 203, 256, 37], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 347, "bbox": [240, 184, 14, 47], "iscrowd": 0}, {"id": 2628780, "category_id": 13, "area": 88, "bbox": [19, 183, 7, 23], "iscrowd": 0}, {"id": 4915373, "category_id": 13, "area": 187, "bbox": [69, 182, 9, 35], "iscrowd": 0}, {"id": 5963922, "category_id": 13, "area": 212, "bbox": [53, 182, 17, 36], "iscrowd": 0}, {"id": 2228382, "category_id": 13, "area": 426, "bbox": [208, 179, 13, 53], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 118, "bbox": [164, 187, 19, 11], "iscrowd": 0}, {"id": 11227651, "category_id": 21, "area": 182, "bbox": [151, 188, 19, 13], "iscrowd": 0}, {"id": 12080149, "category_id": 21, "area": 305, "bbox": [126, 187, 25, 16], "iscrowd": 0}, {"id": 13329152, "category_id": 21, "area": 483, "bbox": [48, 190, 48, 21], "iscrowd": 0}, {"id": 13851665, "category_id": 21, "area": 155, "bbox": [231, 187, 12, 21], "iscrowd": 0}, {"id": 11566365, "category_id": 21, "area": 917, "bbox": [188, 181, 46, 36], "iscrowd": 0}, {"id": 13126169, "category_id": 21, "area": 470, "bbox": [94, 188, 31, 19], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 119, "bbox": [42, 190, 6, 20], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 138, "bbox": [214, 156, 14, 13], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 580, "bbox": [190, 53, 35, 161], "iscrowd": 0}]}, {"image_id": "ADE_val_00001873", "file_name": "ADE_val_00001873.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 18746, "bbox": [2, 0, 254, 163], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 17114, "bbox": [45, 1, 211, 140], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 10127, "bbox": [48, 160, 207, 96], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 2842, "bbox": [145, 157, 111, 98], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 103, "bbox": [127, 152, 17, 8], "iscrowd": 0}, {"id": 11754523, "category_id": 21, "area": 148, "bbox": [113, 152, 15, 19], "iscrowd": 0}, {"id": 11164950, "category_id": 21, "area": 419, "bbox": [87, 156, 26, 29], "iscrowd": 0}, {"id": 14579480, "category_id": 21, "area": 334, "bbox": [69, 157, 35, 40], "iscrowd": 0}, {"id": 15041280, "category_id": 21, "area": 7754, "bbox": [0, 161, 100, 95], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 5822, "bbox": [150, 112, 106, 97], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 667, "bbox": [37, 1, 29, 158], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 292, "bbox": [91, 150, 28, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00001874", "file_name": "ADE_val_00001874.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 31567, "bbox": [0, 40, 350, 140], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 27691, "bbox": [0, 0, 349, 135], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1133, "bbox": [78, 128, 197, 53], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 17869, "bbox": [0, 173, 349, 90], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 12759, "bbox": [0, 168, 349, 95], "iscrowd": 0}]}, {"image_id": "ADE_val_00001875", "file_name": "ADE_val_00001875.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 105151, "bbox": [0, 1, 499, 329], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 20849, "bbox": [174, 1, 325, 90], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 34809, "bbox": [4, 223, 181, 275], "iscrowd": 0}, {"id": 4987290, "category_id": 13, "area": 27908, "bbox": [174, 180, 221, 317], "iscrowd": 0}, {"id": 5185149, "category_id": 13, "area": 26540, "bbox": [384, 191, 114, 304], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 6415, "bbox": [2, 328, 497, 170], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2663, "bbox": [177, 90, 150, 20], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 20571, "bbox": [187, 331, 209, 166], "iscrowd": 0}]}, {"image_id": "ADE_val_00001876", "file_name": "ADE_val_00001876.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 41801, "bbox": [2, 91, 497, 242], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 61474, "bbox": [50, 167, 449, 166], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 55560, "bbox": [2, 0, 497, 134], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2282, "bbox": [397, 134, 33, 78], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 369, "bbox": [192, 118, 66, 7], "iscrowd": 0}, {"id": 11665642, "category_id": 44, "area": 380, "bbox": [328, 135, 19, 21], "iscrowd": 0}, {"id": 11797239, "category_id": 44, "area": 160, "bbox": [133, 139, 18, 9], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 2948, "bbox": [113, 1, 41, 126], "iscrowd": 0}]}, {"image_id": "ADE_val_00001877", "file_name": "ADE_val_00001877.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3386, "bbox": [2, 1, 276, 30], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 11059, "bbox": [4, 156, 247, 177], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 20726, "bbox": [0, 0, 296, 176], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 840, "bbox": [383, 14, 24, 56], "iscrowd": 0}, {"id": 4328624, "category_id": 13, "area": 1258, "bbox": [329, 9, 43, 58], "iscrowd": 0}, {"id": 4784292, "category_id": 13, "area": 4692, "bbox": [200, 62, 80, 103], "iscrowd": 0}, {"id": 2883746, "category_id": 13, "area": 2186, "bbox": [197, 21, 80, 107], "iscrowd": 0}, {"id": 5316020, "category_id": 13, "area": 15513, "bbox": [2, 36, 136, 296], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 4949, "bbox": [291, 0, 117, 81], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 29823, "bbox": [70, 119, 338, 214], "iscrowd": 0}, {"id": 16587258, "category_id": 46, "area": 5003, "bbox": [271, 67, 137, 75], "iscrowd": 0}, {"id": 16714995, "category_id": 46, "area": 5878, "bbox": [2, 179, 77, 153], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 18325, "bbox": [270, 85, 138, 195], "iscrowd": 0}]}, {"image_id": "ADE_val_00001878", "file_name": "ADE_val_00001878.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3883, "bbox": [460, 201, 263, 40], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 55447, "bbox": [0, 298, 386, 211], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 138847, "bbox": [0, 0, 767, 242], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 21246, "bbox": [226, 204, 329, 145], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 8513, "bbox": [41, 33, 87, 125], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 35181, "bbox": [348, 186, 155, 324], "iscrowd": 0}, {"id": 3014808, "category_id": 13, "area": 10061, "bbox": [625, 187, 141, 202], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 10257, "bbox": [156, 250, 94, 120], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1203, "bbox": [570, 187, 36, 41], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 41534, "bbox": [487, 325, 280, 186], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 2771, "bbox": [321, 410, 56, 69], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 644, "bbox": [538, 147, 31, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001879", "file_name": "ADE_val_00001879.png", "segments_info": [{"id": 9240463, "category_id": 17, "area": 129998, "bbox": [0, 0, 683, 254], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 27563, "bbox": [6, 1, 546, 148], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 171887, "bbox": [1, 238, 682, 273], "iscrowd": 0}, {"id": 16769024, "category_id": 114, "area": 10741, "bbox": [263, 29, 110, 221], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 324, "bbox": [348, 278, 25, 28], "iscrowd": 0}, {"id": 2171797, "category_id": 13, "area": 5484, "bbox": [562, 330, 70, 149], "iscrowd": 0}, {"id": 4399791, "category_id": 13, "area": 1946, "bbox": [634, 344, 48, 133], "iscrowd": 0}]}, {"image_id": "ADE_val_00001880", "file_name": "ADE_val_00001880.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 6542, "bbox": [250, 279, 432, 28], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 15056, "bbox": [0, 133, 212, 165], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 161589, "bbox": [0, 0, 682, 285], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 49358, "bbox": [0, 410, 681, 101], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2183, "bbox": [396, 229, 78, 53], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 5529, "bbox": [76, 256, 605, 41], "iscrowd": 0}, {"id": 16758784, "category_id": 110, "area": 93075, "bbox": [1, 295, 681, 171], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 203, "bbox": [509, 284, 17, 21], "iscrowd": 0}, {"id": 1327833, "category_id": 20, "area": 271, "bbox": [625, 287, 19, 23], "iscrowd": 0}, {"id": 18873, "category_id": 20, "area": 212, "bbox": [641, 286, 17, 24], "iscrowd": 0}, {"id": 14042, "category_id": 20, "area": 206, "bbox": [568, 286, 15, 23], "iscrowd": 0}, {"id": 22997, "category_id": 20, "area": 208, "bbox": [379, 283, 19, 20], "iscrowd": 0}, {"id": 13497, "category_id": 20, "area": 300, "bbox": [607, 287, 20, 23], "iscrowd": 0}, {"id": 1596885, "category_id": 20, "area": 191, "bbox": [553, 284, 15, 21], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 1134, "bbox": [222, 206, 45, 88], "iscrowd": 0}, {"id": 16731648, "category_id": 73, "area": 833, "bbox": [192, 218, 40, 74], "iscrowd": 0}, {"id": 16737305, "category_id": 73, "area": 465, "bbox": [353, 237, 49, 41], "iscrowd": 0}, {"id": 16597760, "category_id": 73, "area": 2307, "bbox": [611, 199, 71, 69], "iscrowd": 0}, {"id": 15158528, "category_id": 73, "area": 2159, "bbox": [525, 211, 79, 73], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 2877, "bbox": [86, 197, 100, 65], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 76, "bbox": [481, 239, 11, 32], "iscrowd": 0}, {"id": 16726528, "category_id": 88, "area": 79, "bbox": [259, 252, 5, 38], "iscrowd": 0}, {"id": 16724750, "category_id": 88, "area": 55, "bbox": [325, 252, 10, 18], "iscrowd": 0}]}, {"image_id": "ADE_val_00001881", "file_name": "ADE_val_00001881.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 24633, "bbox": [0, 0, 250, 129], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 16818, "bbox": [0, 120, 250, 81], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1728, "bbox": [3, 54, 37, 50], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 2386, "bbox": [95, 126, 82, 64], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 2261, "bbox": [151, 0, 53, 54], "iscrowd": 0}, {"id": 16193280, "category_id": 86, "area": 1337, "bbox": [30, 0, 42, 39], "iscrowd": 0}, {"id": 16724480, "category_id": 86, "area": 767, "bbox": [18, 14, 40, 43], "iscrowd": 0}]}, {"image_id": "ADE_val_00001882", "file_name": "ADE_val_00001882.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 101708, "bbox": [0, 1, 682, 213], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 67176, "bbox": [0, 15, 682, 250], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 52186, "bbox": [0, 269, 681, 242], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 20054, "bbox": [9, 265, 672, 167], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 1542, "bbox": [145, 302, 95, 33], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 21883, "bbox": [2, 229, 680, 88], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 6121, "bbox": [0, 270, 285, 99], "iscrowd": 0}, {"id": 2333669, "category_id": 33, "area": 1253, "bbox": [408, 269, 273, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00001883", "file_name": "ADE_val_00001883.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 38221, "bbox": [0, 1, 183, 388], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 82785, "bbox": [1, 265, 681, 245], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2686, "bbox": [367, 166, 64, 145], "iscrowd": 0}, {"id": 3866803, "category_id": 13, "area": 3126, "bbox": [433, 168, 62, 146], "iscrowd": 0}, {"id": 3087487, "category_id": 13, "area": 50922, "bbox": [1, 155, 282, 356], "iscrowd": 0}, {"id": 2033281, "category_id": 13, "area": 6969, "bbox": [147, 315, 133, 196], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 91865, "bbox": [175, 1, 506, 310], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 10597, "bbox": [319, 221, 231, 99], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 1827, "bbox": [400, 179, 59, 50], "iscrowd": 0}]}, {"image_id": "ADE_val_00001884", "file_name": "ADE_val_00001884.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 20004, "bbox": [2, 0, 381, 123], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 13131, "bbox": [0, 27, 382, 144], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1178, "bbox": [139, 157, 102, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001885", "file_name": "ADE_val_00001885.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 3672, "bbox": [761, 39, 97, 54], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 109333, "bbox": [0, 2, 860, 352], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 129031, "bbox": [0, 160, 860, 333], "iscrowd": 0}, {"id": 16769136, "category_id": 115, "area": 176250, "bbox": [8, 27, 840, 335], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 660, "bbox": [833, 144, 24, 64], "iscrowd": 0}]}, {"image_id": "ADE_val_00001886", "file_name": "ADE_val_00001886.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 16650, "bbox": [0, 111, 255, 111], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 37554, "bbox": [2, 0, 253, 173], "iscrowd": 0}, {"id": 16711762, "category_id": 102, "area": 1271, "bbox": [33, 211, 184, 11], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 8397, "bbox": [0, 222, 255, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001887", "file_name": "ADE_val_00001887.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 4969, "bbox": [0, 437, 252, 31], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 112152, "bbox": [0, 40, 683, 401], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 154524, "bbox": [0, 0, 683, 361], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 15628, "bbox": [32, 287, 230, 120], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 14370, "bbox": [226, 446, 457, 64], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 785, "bbox": [128, 416, 108, 15], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 26906, "bbox": [0, 425, 683, 86], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4360, "bbox": [0, 407, 204, 41], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 113, "bbox": [553, 418, 10, 21], "iscrowd": 0}, {"id": 3736212, "category_id": 13, "area": 59, "bbox": [339, 407, 5, 17], "iscrowd": 0}, {"id": 3409037, "category_id": 13, "area": 52, "bbox": [344, 406, 5, 18], "iscrowd": 0}, {"id": 5832838, "category_id": 13, "area": 65, "bbox": [415, 420, 5, 19], "iscrowd": 0}, {"id": 2560388, "category_id": 13, "area": 63, "bbox": [420, 422, 8, 13], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 872, "bbox": [298, 422, 59, 22], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 508, "bbox": [346, 434, 39, 16], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 293, "bbox": [250, 420, 41, 13], "iscrowd": 0}, {"id": 53759, "category_id": 54, "area": 248, "bbox": [359, 423, 34, 11], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 178, "bbox": [512, 366, 4, 80], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 791, "bbox": [601, 338, 63, 110], "iscrowd": 0}, {"id": 16711693, "category_id": 137, "area": 660, "bbox": [483, 383, 18, 83], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 668, "bbox": [203, 430, 22, 38], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 96, "bbox": [262, 368, 12, 42], "iscrowd": 0}, {"id": 15340099, "category_id": 150, "area": 125, "bbox": [264, 348, 14, 22], "iscrowd": 0}]}, {"image_id": "ADE_val_00001888", "file_name": "ADE_val_00001888.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 54207, "bbox": [0, 6, 431, 297], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2770, "bbox": [25, 276, 381, 27], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7163, "bbox": [0, 0, 431, 31], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 11933, "bbox": [171, 96, 108, 158], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 3405, "bbox": [245, 185, 76, 72], "iscrowd": 0}]}, {"image_id": "ADE_val_00001889", "file_name": "ADE_val_00001889.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21862, "bbox": [0, 350, 564, 74], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 41018, "bbox": [439, 38, 200, 387], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 45799, "bbox": [87, 0, 552, 149], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 111049, "bbox": [0, 1, 533, 348], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 5675, "bbox": [49, 406, 549, 19], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 33475, "bbox": [0, 164, 575, 234], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 863, "bbox": [572, 374, 53, 49], "iscrowd": 0}, {"id": 2820729, "category_id": 13, "area": 978, "bbox": [597, 368, 40, 56], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2249, "bbox": [428, 357, 45, 51], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 4138, "bbox": [107, 378, 136, 45], "iscrowd": 0}, {"id": 65487, "category_id": 70, "area": 1426, "bbox": [564, 366, 75, 58], "iscrowd": 0}]}, {"image_id": "ADE_val_00001890", "file_name": "ADE_val_00001890.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 270477, "bbox": [0, 0, 510, 840], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 58516, "bbox": [63, 682, 358, 263], "iscrowd": 0}, {"id": 12105983, "category_id": 85, "area": 150697, "bbox": [0, 32, 512, 913], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 1255, "bbox": [196, 196, 41, 39], "iscrowd": 0}, {"id": 64121, "category_id": 149, "area": 361, "bbox": [146, 212, 11, 39], "iscrowd": 0}]}, {"image_id": "ADE_val_00001891", "file_name": "ADE_val_00001891.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 60049, "bbox": [11, 5, 390, 248], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 31652, "bbox": [2, 0, 399, 181], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 170, "bbox": [2, 181, 10, 17], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 17810, "bbox": [0, 198, 400, 103], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 5216, "bbox": [95, 223, 305, 44], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 199, "bbox": [44, 207, 21, 12], "iscrowd": 0}, {"id": 13459200, "category_id": 21, "area": 259, "bbox": [2, 209, 28, 17], "iscrowd": 0}, {"id": 11498757, "category_id": 21, "area": 173, "bbox": [28, 211, 17, 14], "iscrowd": 0}, {"id": 14969615, "category_id": 21, "area": 2543, "bbox": [0, 221, 51, 64], "iscrowd": 0}, {"id": 12157717, "category_id": 21, "area": 587, "bbox": [61, 212, 35, 23], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 232, "bbox": [347, 223, 21, 13], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 220, "bbox": [51, 197, 23, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001892", "file_name": "ADE_val_00001892.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 69402, "bbox": [0, 0, 575, 261], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 26178, "bbox": [0, 224, 574, 133], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 13909, "bbox": [463, 0, 112, 138], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 13302, "bbox": [11, 191, 122, 167], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4637, "bbox": [125, 267, 102, 90], "iscrowd": 0}, {"id": 6628351, "category_id": 16, "area": 3391, "bbox": [362, 215, 82, 95], "iscrowd": 0}, {"id": 6168063, "category_id": 16, "area": 3614, "bbox": [204, 168, 63, 79], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 4443, "bbox": [188, 263, 72, 96], "iscrowd": 0}, {"id": 405714, "category_id": 20, "area": 2812, "bbox": [338, 207, 43, 97], "iscrowd": 0}, {"id": 351205, "category_id": 20, "area": 3288, "bbox": [421, 211, 49, 95], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 4231, "bbox": [278, 125, 52, 115], "iscrowd": 0}, {"id": 5314303, "category_id": 25, "area": 4077, "bbox": [5, 52, 295, 30], "iscrowd": 0}, {"id": 5181695, "category_id": 25, "area": 4520, "bbox": [333, 77, 47, 107], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 982, "bbox": [188, 207, 36, 50], "iscrowd": 0}, {"id": 3144960, "category_id": 42, "area": 1102, "bbox": [114, 192, 41, 32], "iscrowd": 0}, {"id": 1244928, "category_id": 42, "area": 734, "bbox": [120, 221, 30, 28], "iscrowd": 0}, {"id": 65292, "category_id": 42, "area": 396, "bbox": [326, 61, 35, 18], "iscrowd": 0}, {"id": 2817792, "category_id": 42, "area": 1830, "bbox": [415, 88, 29, 72], "iscrowd": 0}, {"id": 1113856, "category_id": 42, "area": 835, "bbox": [266, 207, 29, 35], "iscrowd": 0}, {"id": 63488, "category_id": 42, "area": 5023, "bbox": [441, 87, 50, 113], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 1307, "bbox": [67, 10, 33, 40], "iscrowd": 0}, {"id": 36607, "category_id": 68, "area": 997, "bbox": [44, 8, 23, 45], "iscrowd": 0}, {"id": 16740352, "category_id": 93, "area": 17163, "bbox": [467, 140, 108, 218], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 392, "bbox": [372, 152, 19, 35], "iscrowd": 0}, {"id": 1179890, "category_id": 109, "area": 2434, "bbox": [130, 221, 74, 74], "iscrowd": 0}, {"id": 3014907, "category_id": 109, "area": 1513, "bbox": [379, 187, 49, 44], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1089, "bbox": [406, 160, 38, 32], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 572, "bbox": [34, 68, 22, 26], "iscrowd": 0}, {"id": 9940816, "category_id": 116, "area": 616, "bbox": [60, 68, 27, 26], "iscrowd": 0}, {"id": 10273122, "category_id": 116, "area": 593, "bbox": [86, 68, 26, 27], "iscrowd": 0}, {"id": 8770103, "category_id": 116, "area": 481, "bbox": [114, 68, 18, 27], "iscrowd": 0}, {"id": 9287489, "category_id": 116, "area": 520, "bbox": [135, 68, 21, 27], "iscrowd": 0}, {"id": 9748295, "category_id": 116, "area": 447, "bbox": [158, 69, 19, 26], "iscrowd": 0}, {"id": 11129911, "category_id": 116, "area": 467, "bbox": [178, 69, 21, 26], "iscrowd": 0}, {"id": 8630850, "category_id": 116, "area": 423, "bbox": [199, 69, 19, 26], "iscrowd": 0}, {"id": 8698682, "category_id": 116, "area": 366, "bbox": [218, 70, 16, 25], "iscrowd": 0}, {"id": 10801762, "category_id": 116, "area": 490, "bbox": [235, 69, 21, 26], "iscrowd": 0}, {"id": 10338895, "category_id": 116, "area": 321, "bbox": [257, 71, 16, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001893", "file_name": "ADE_val_00001893.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 11900, "bbox": [71, 0, 219, 86], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 413, "bbox": [38, 0, 43, 19], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 2769, "bbox": [145, 170, 144, 47], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 3454, "bbox": [82, 46, 61, 105], "iscrowd": 0}, {"id": 3146398, "category_id": 13, "area": 7100, "bbox": [59, 98, 86, 120], "iscrowd": 0}]}, {"image_id": "ADE_val_00001894", "file_name": "ADE_val_00001894.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 76336, "bbox": [2, 0, 442, 332], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 56160, "bbox": [0, 0, 570, 168], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 9056, "bbox": [47, 261, 246, 69], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3091, "bbox": [391, 175, 63, 57], "iscrowd": 0}, {"id": 13236479, "category_id": 9, "area": 728, "bbox": [522, 200, 37, 27], "iscrowd": 0}, {"id": 16774120, "category_id": 9, "area": 1205, "bbox": [55, 50, 42, 56], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 419, "bbox": [334, 249, 11, 63], "iscrowd": 0}, {"id": 5899663, "category_id": 13, "area": 1517, "bbox": [163, 241, 28, 86], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1274, "bbox": [340, 278, 72, 23], "iscrowd": 0}, {"id": 16711731, "category_id": 94, "area": 517, "bbox": [476, 70, 13, 83], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 1463, "bbox": [45, 214, 191, 104], "iscrowd": 0}]}, {"image_id": "ADE_val_00001895", "file_name": "ADE_val_00001895.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 8413, "bbox": [0, 0, 290, 87], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 24435, "bbox": [0, 1, 291, 177], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 14431, "bbox": [2, 110, 288, 102], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 1977, "bbox": [198, 166, 63, 39], "iscrowd": 0}, {"id": 14876890, "category_id": 126, "area": 699, "bbox": [183, 152, 41, 23], "iscrowd": 0}, {"id": 16713197, "category_id": 126, "area": 299, "bbox": [174, 143, 29, 16], "iscrowd": 0}, {"id": 16711922, "category_id": 126, "area": 189, "bbox": [164, 136, 23, 15], "iscrowd": 0}, {"id": 16711920, "category_id": 126, "area": 2155, "bbox": [24, 171, 64, 40], "iscrowd": 0}, {"id": 16128231, "category_id": 126, "area": 736, "bbox": [62, 154, 41, 24], "iscrowd": 0}, {"id": 15204598, "category_id": 126, "area": 244, "bbox": [72, 146, 35, 13], "iscrowd": 0}, {"id": 16716283, "category_id": 126, "area": 353, "bbox": [249, 136, 29, 13], "iscrowd": 0}, {"id": 16718335, "category_id": 126, "area": 216, "bbox": [15, 137, 18, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001896", "file_name": "ADE_val_00001896.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 47352, "bbox": [0, 230, 320, 312], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 183800, "bbox": [0, 0, 511, 454], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 111415, "bbox": [0, 504, 511, 269], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 513, "bbox": [1, 180, 22, 43], "iscrowd": 0}, {"id": 47359, "category_id": 83, "area": 829, "bbox": [52, 287, 48, 36], "iscrowd": 0}, {"id": 45823, "category_id": 83, "area": 287, "bbox": [116, 352, 32, 18], "iscrowd": 0}, {"id": 566522, "category_id": 83, "area": 214, "bbox": [153, 378, 25, 17], "iscrowd": 0}, {"id": 40173, "category_id": 83, "area": 87, "bbox": [196, 402, 16, 10], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 49102, "bbox": [299, 296, 210, 369], "iscrowd": 0}]}, {"image_id": "ADE_val_00001897", "file_name": "ADE_val_00001897.png", "segments_info": [{"id": 16442941, "category_id": 22, "area": 61435, "bbox": [0, 0, 255, 256], "iscrowd": 0}]}, {"image_id": "ADE_val_00001898", "file_name": "ADE_val_00001898.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 44626, "bbox": [0, 0, 639, 479], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4689, "bbox": [66, 428, 143, 51], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 30630, "bbox": [220, 0, 191, 228], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 39421, "bbox": [411, 0, 227, 181], "iscrowd": 0}, {"id": 15139014, "category_id": 11, "area": 9906, "bbox": [117, 277, 88, 168], "iscrowd": 0}, {"id": 16711918, "category_id": 11, "area": 21958, "bbox": [0, 276, 142, 203], "iscrowd": 0}, {"id": 15730399, "category_id": 11, "area": 32681, "bbox": [4, 0, 208, 167], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 10730, "bbox": [230, 12, 168, 77], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 1970, "bbox": [2, 258, 80, 46], "iscrowd": 0}, {"id": 16711864, "category_id": 108, "area": 51869, "bbox": [371, 233, 249, 246], "iscrowd": 0}]}, {"image_id": "ADE_val_00001899", "file_name": "ADE_val_00001899.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 668, "bbox": [108, 107, 98, 16], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 20067, "bbox": [2, 1, 254, 83], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 12501, "bbox": [2, 104, 254, 140], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 27252, "bbox": [2, 75, 254, 181], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 2920, "bbox": [73, 81, 175, 101], "iscrowd": 0}]}, {"image_id": "ADE_val_00001900", "file_name": "ADE_val_00001900.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 261, "bbox": [125, 182, 44, 10], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 29601, "bbox": [2, 1, 254, 129], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 5573, "bbox": [2, 93, 254, 52], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 18484, "bbox": [2, 138, 254, 118], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 8209, "bbox": [4, 206, 251, 49], "iscrowd": 0}, {"id": 13158411, "category_id": 61, "area": 2150, "bbox": [0, 138, 252, 20], "iscrowd": 0}]}, {"image_id": "ADE_val_00001901", "file_name": "ADE_val_00001901.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1637, "bbox": [220, 72, 220, 30], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 2490, "bbox": [0, 54, 439, 25], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 28032, "bbox": [0, 0, 440, 74], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3358, "bbox": [8, 47, 430, 95], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 1632, "bbox": [1, 66, 156, 42], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 16608, "bbox": [0, 110, 440, 184], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 67629, "bbox": [0, 64, 440, 224], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 5099, "bbox": [0, 87, 439, 65], "iscrowd": 0}]}, {"image_id": "ADE_val_00001902", "file_name": "ADE_val_00001902.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 8902, "bbox": [460, 0, 39, 374], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 2125, "bbox": [329, 119, 151, 26], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 793, "bbox": [99, 0, 55, 28], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 18834, "bbox": [154, 239, 314, 135], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 8193, "bbox": [292, 24, 197, 107], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 11417, "bbox": [127, 0, 363, 55], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 23302, "bbox": [0, 136, 478, 141], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 26222, "bbox": [2, 0, 378, 113], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2495, "bbox": [229, 148, 81, 65], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 11862, "bbox": [0, 103, 322, 54], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 1102, "bbox": [274, 120, 62, 24], "iscrowd": 0}, {"id": 8191, "category_id": 53, "area": 1870, "bbox": [107, 145, 198, 36], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 4749, "bbox": [362, 203, 110, 126], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 2964, "bbox": [415, 241, 54, 121], "iscrowd": 0}, {"id": 1324499, "category_id": 20, "area": 4304, "bbox": [320, 213, 83, 120], "iscrowd": 0}, {"id": 23006, "category_id": 20, "area": 684, "bbox": [370, 192, 62, 19], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 8102, "bbox": [2, 257, 81, 117], "iscrowd": 0}, {"id": 14820, "category_id": 39, "area": 26217, "bbox": [119, 170, 260, 204], "iscrowd": 0}, {"id": 2367998, "category_id": 39, "area": 1745, "bbox": [405, 172, 67, 37], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 2749, "bbox": [379, 53, 27, 141], "iscrowd": 0}, {"id": 4334335, "category_id": 43, "area": 15220, "bbox": [49, 0, 76, 374], "iscrowd": 0}]}, {"image_id": "ADE_val_00001903", "file_name": "ADE_val_00001903.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 61795, "bbox": [2, 0, 597, 118], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 43320, "bbox": [0, 95, 598, 121], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 83238, "bbox": [0, 208, 598, 162], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 6038, "bbox": [373, 94, 226, 43], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 1970, "bbox": [219, 169, 135, 45], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 4578, "bbox": [6, 251, 134, 64], "iscrowd": 0}, {"id": 7143679, "category_id": 127, "area": 1752, "bbox": [101, 245, 88, 72], "iscrowd": 0}, {"id": 9765112, "category_id": 127, "area": 4706, "bbox": [130, 210, 68, 109], "iscrowd": 0}]}, {"image_id": "ADE_val_00001904", "file_name": "ADE_val_00001904.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 138, "bbox": [0, 0, 7, 39], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 833, "bbox": [0, 215, 27, 41], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 35154, "bbox": [0, 18, 256, 238], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 6355, "bbox": [2, 0, 253, 44], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 288, "bbox": [175, 105, 32, 10], "iscrowd": 0}, {"id": 9570303, "category_id": 44, "area": 404, "bbox": [38, 112, 36, 13], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 455, "bbox": [0, 40, 18, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00001905", "file_name": "ADE_val_00001905.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 4605, "bbox": [0, 107, 279, 48], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 25493, "bbox": [0, 0, 279, 96], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2273, "bbox": [0, 121, 137, 29], "iscrowd": 0}]}, {"image_id": "ADE_val_00001906", "file_name": "ADE_val_00001906.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1873, "bbox": [574, 264, 108, 51], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 5292, "bbox": [249, 226, 325, 55], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 6908, "bbox": [32, 0, 537, 51], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 150546, "bbox": [1, 0, 681, 289], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 10290, "bbox": [0, 228, 330, 79], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 234, "bbox": [349, 345, 16, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001907", "file_name": "ADE_val_00001907.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 68370, "bbox": [0, 0, 479, 358], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 35717, "bbox": [0, 227, 464, 132], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 3782, "bbox": [46, 0, 348, 19], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 11224, "bbox": [309, 44, 78, 169], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1716, "bbox": [345, 207, 61, 53], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3569, "bbox": [146, 140, 57, 104], "iscrowd": 0}, {"id": 12206, "category_id": 20, "area": 8763, "bbox": [324, 174, 146, 185], "iscrowd": 0}, {"id": 1978036, "category_id": 20, "area": 3945, "bbox": [219, 142, 59, 105], "iscrowd": 0}, {"id": 932839, "category_id": 20, "area": 3494, "bbox": [309, 149, 98, 123], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 5449, "bbox": [29, 34, 53, 125], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 1079, "bbox": [437, 22, 30, 44], "iscrowd": 0}, {"id": 6095860, "category_id": 25, "area": 1073, "bbox": [416, 50, 35, 44], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 11062, "bbox": [0, 219, 119, 140], "iscrowd": 0}, {"id": 15720704, "category_id": 31, "area": 4229, "bbox": [0, 153, 106, 98], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 511, "bbox": [388, 196, 22, 28], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 650, "bbox": [177, 1, 61, 14], "iscrowd": 0}, {"id": 2013930, "category_id": 83, "area": 128, "bbox": [107, 6, 18, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00001908", "file_name": "ADE_val_00001908.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 25237, "bbox": [0, 8, 255, 188], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 21107, "bbox": [0, 152, 255, 103], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5577, "bbox": [0, 0, 255, 34], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 753, "bbox": [0, 145, 54, 55], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 1700, "bbox": [64, 55, 36, 52], "iscrowd": 0}, {"id": 4587756, "category_id": 23, "area": 1357, "bbox": [102, 57, 31, 47], "iscrowd": 0}, {"id": 2162923, "category_id": 23, "area": 1302, "bbox": [225, 59, 30, 45], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 2064, "bbox": [78, 125, 69, 64], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 418, "bbox": [165, 66, 20, 27], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 2057, "bbox": [38, 131, 57, 66], "iscrowd": 0}, {"id": 14941977, "category_id": 31, "area": 1179, "bbox": [127, 121, 49, 56], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 777, "bbox": [0, 90, 28, 63], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 331, "bbox": [225, 96, 23, 26], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 55, "bbox": [213, 22, 11, 6], "iscrowd": 0}, {"id": 1624807, "category_id": 83, "area": 69, "bbox": [117, 8, 14, 6], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 217, "bbox": [213, 93, 13, 27], "iscrowd": 0}]}, {"image_id": "ADE_val_00001909", "file_name": "ADE_val_00001909.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 88752, "bbox": [0, 0, 683, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 37926, "bbox": [24, 268, 537, 244], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4273, "bbox": [392, 244, 96, 73], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 13558, "bbox": [249, 0, 131, 115], "iscrowd": 0}, {"id": 15066354, "category_id": 9, "area": 24175, "bbox": [490, 0, 192, 152], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 7806, "bbox": [486, 213, 156, 107], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 77181, "bbox": [12, 86, 364, 302], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 18346, "bbox": [0, 312, 119, 199], "iscrowd": 0}, {"id": 12515584, "category_id": 31, "area": 38163, "bbox": [253, 256, 406, 256], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 22370, "bbox": [269, 288, 255, 218], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 6666, "bbox": [529, 158, 97, 89], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 2097, "bbox": [397, 304, 58, 54], "iscrowd": 0}]}, {"image_id": "ADE_val_00001910", "file_name": "ADE_val_00001910.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 148209, "bbox": [0, 0, 627, 475], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 79568, "bbox": [1, 269, 679, 243], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2540, "bbox": [89, 247, 73, 58], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 2025, "bbox": [353, 83, 60, 36], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 40262, "bbox": [573, 0, 109, 511], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 8072, "bbox": [445, 322, 141, 169], "iscrowd": 0}, {"id": 5571044, "category_id": 16, "area": 8290, "bbox": [24, 293, 166, 141], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3137, "bbox": [50, 32, 70, 48], "iscrowd": 0}, {"id": 5309933, "category_id": 23, "area": 4792, "bbox": [225, 26, 50, 98], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 9614, "bbox": [161, 250, 137, 153], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2283, "bbox": [182, 265, 73, 48], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1035, "bbox": [550, 301, 36, 44], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1246, "bbox": [304, 87, 30, 44], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 994, "bbox": [479, 366, 34, 47], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1738, "bbox": [474, 398, 66, 53], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1731, "bbox": [439, 364, 48, 72], "iscrowd": 0}]}, {"image_id": "ADE_val_00001911", "file_name": "ADE_val_00001911.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 16003, "bbox": [0, 0, 258, 206], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8982, "bbox": [4, 144, 237, 62], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 5152, "bbox": [195, 1, 52, 113], "iscrowd": 0}, {"id": 16049138, "category_id": 9, "area": 1789, "bbox": [169, 1, 21, 94], "iscrowd": 0}, {"id": 14668492, "category_id": 9, "area": 6722, "bbox": [80, 5, 80, 87], "iscrowd": 0}, {"id": 16377830, "category_id": 9, "area": 5713, "bbox": [0, 3, 67, 91], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 608, "bbox": [121, 109, 52, 44], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1826, "bbox": [79, 92, 41, 71], "iscrowd": 0}, {"id": 344774, "category_id": 20, "area": 1611, "bbox": [140, 96, 60, 81], "iscrowd": 0}, {"id": 606949, "category_id": 20, "area": 2994, "bbox": [155, 106, 75, 96], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 1288, "bbox": [0, 72, 14, 134], "iscrowd": 0}]}, {"image_id": "ADE_val_00001912", "file_name": "ADE_val_00001912.png", "segments_info": [{"id": 3289680, "category_id": 4, "area": 78146, "bbox": [2, 98, 497, 298], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6972, "bbox": [0, 0, 498, 46], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1408, "bbox": [84, 242, 61, 57], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 3428, "bbox": [401, 192, 64, 64], "iscrowd": 0}, {"id": 915466, "category_id": 42, "area": 1677, "bbox": [370, 182, 55, 61], "iscrowd": 0}, {"id": 65301, "category_id": 42, "area": 1340, "bbox": [344, 173, 49, 57], "iscrowd": 0}, {"id": 1965824, "category_id": 42, "area": 3117, "bbox": [281, 155, 81, 65], "iscrowd": 0}, {"id": 1769216, "category_id": 42, "area": 7062, "bbox": [380, 127, 118, 69], "iscrowd": 0}, {"id": 60675, "category_id": 42, "area": 973, "bbox": [166, 90, 38, 28], "iscrowd": 0}, {"id": 59392, "category_id": 42, "area": 2914, "bbox": [313, 124, 104, 51], "iscrowd": 0}, {"id": 65292, "category_id": 42, "area": 1666, "bbox": [308, 105, 108, 32], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 805, "bbox": [270, 1, 20, 189], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 156, "bbox": [439, 7, 32, 9], "iscrowd": 0}]}, {"image_id": "ADE_val_00001913", "file_name": "ADE_val_00001913.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 36443, "bbox": [2, 31, 534, 190], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 15706, "bbox": [0, 101, 533, 121], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 36693, "bbox": [0, 0, 535, 93], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 6859, "bbox": [41, 37, 415, 184], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1339, "bbox": [414, 188, 44, 35], "iscrowd": 0}]}, {"image_id": "ADE_val_00001914", "file_name": "ADE_val_00001914.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 90737, "bbox": [0, 184, 510, 446], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 26251, "bbox": [0, 0, 511, 119], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 58643, "bbox": [0, 451, 512, 239], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 8728, "bbox": [24, 252, 426, 94], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 6028, "bbox": [53, 138, 411, 147], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 95343, "bbox": [0, 6, 512, 282], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 4359, "bbox": [307, 251, 42, 119], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1022, "bbox": [402, 275, 41, 31], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 46662, "bbox": [168, 491, 344, 199], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 10541, "bbox": [273, 331, 111, 144], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 88, "bbox": [197, 213, 7, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001915", "file_name": "ADE_val_00001915.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 22193, "bbox": [112, 1, 287, 239], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 16824, "bbox": [2, 128, 397, 129], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 5904, "bbox": [212, 196, 151, 61], "iscrowd": 0}]}, {"image_id": "ADE_val_00001916", "file_name": "ADE_val_00001916.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3242, "bbox": [0, 647, 310, 24], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 12826, "bbox": [357, 522, 146, 147], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 222988, "bbox": [0, 0, 503, 636], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 58416, "bbox": [2, 448, 501, 223], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 1685, "bbox": [3, 307, 51, 187], "iscrowd": 0}, {"id": 14959360, "category_id": 88, "area": 873, "bbox": [82, 481, 26, 147], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 211, "bbox": [228, 17, 21, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00001917", "file_name": "ADE_val_00001917.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 11350, "bbox": [0, 0, 256, 91], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 4217, "bbox": [98, 226, 158, 30], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 6627, "bbox": [1, 183, 255, 47], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 4257, "bbox": [0, 200, 125, 56], "iscrowd": 0}, {"id": 16769024, "category_id": 114, "area": 38591, "bbox": [1, 9, 255, 196], "iscrowd": 0}]}, {"image_id": "ADE_val_00001918", "file_name": "ADE_val_00001918.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 112, "bbox": [0, 0, 20, 9], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 5263, "bbox": [1, 0, 238, 48], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 610, "bbox": [100, 228, 42, 28], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 2870, "bbox": [0, 0, 128, 30], "iscrowd": 0}, {"id": 16761344, "category_id": 95, "area": 1918, "bbox": [81, 0, 174, 21], "iscrowd": 0}, {"id": 16769024, "category_id": 114, "area": 10841, "bbox": [86, 44, 140, 196], "iscrowd": 0}]}, {"image_id": "ADE_val_00001919", "file_name": "ADE_val_00001919.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1380, "bbox": [31, 241, 71, 80], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 51612, "bbox": [0, 0, 613, 140], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 127519, "bbox": [2, 1, 679, 324], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 24030, "bbox": [0, 242, 682, 268], "iscrowd": 0}, {"id": 14682623, "category_id": 26, "area": 3727, "bbox": [0, 186, 37, 139], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2395, "bbox": [103, 257, 85, 38], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 2889, "bbox": [1, 241, 178, 124], "iscrowd": 0}, {"id": 2367743, "category_id": 39, "area": 2084, "bbox": [468, 224, 50, 44], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 2044, "bbox": [73, 163, 48, 47], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 9037, "bbox": [0, 322, 195, 136], "iscrowd": 0}]}, {"image_id": "ADE_val_00001920", "file_name": "ADE_val_00001920.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14927, "bbox": [0, 0, 250, 166], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1676, "bbox": [0, 97, 250, 103], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 25140, "bbox": [0, 69, 248, 130], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1557, "bbox": [84, 1, 28, 57], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 980, "bbox": [215, 17, 28, 35], "iscrowd": 0}, {"id": 4332783, "category_id": 23, "area": 1390, "bbox": [0, 0, 21, 73], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 133, "bbox": [93, 75, 22, 8], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 528, "bbox": [41, 28, 37, 46], "iscrowd": 0}]}, {"image_id": "ADE_val_00001921", "file_name": "ADE_val_00001921.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 22032, "bbox": [0, 0, 311, 147], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10562, "bbox": [0, 145, 310, 89], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 5915, "bbox": [0, 0, 311, 48], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2593, "bbox": [106, 43, 51, 91], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 7923, "bbox": [205, 111, 107, 119], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1929, "bbox": [276, 33, 36, 95], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 636, "bbox": [25, 112, 51, 15], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 563, "bbox": [0, 20, 9, 108], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 178, "bbox": [68, 104, 18, 15], "iscrowd": 0}, {"id": 13512, "category_id": 20, "area": 242, "bbox": [65, 111, 28, 16], "iscrowd": 0}, {"id": 20417, "category_id": 20, "area": 135, "bbox": [7, 104, 18, 14], "iscrowd": 0}, {"id": 2043323, "category_id": 20, "area": 467, "bbox": [173, 107, 13, 86], "iscrowd": 0}, {"id": 669418, "category_id": 20, "area": 712, "bbox": [182, 113, 22, 95], "iscrowd": 0}, {"id": 211672, "category_id": 20, "area": 2026, "bbox": [192, 120, 57, 104], "iscrowd": 0}, {"id": 15337, "category_id": 20, "area": 246, "bbox": [7, 111, 18, 16], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 638, "bbox": [261, 58, 19, 40], "iscrowd": 0}, {"id": 4070143, "category_id": 23, "area": 955, "bbox": [164, 57, 29, 35], "iscrowd": 0}, {"id": 4525796, "category_id": 23, "area": 1658, "bbox": [33, 48, 41, 49], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 8203, "bbox": [0, 128, 143, 79], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 1082, "bbox": [155, 113, 37, 43], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 319, "bbox": [222, 87, 23, 27], "iscrowd": 0}, {"id": 193789, "category_id": 37, "area": 330, "bbox": [37, 8, 31, 55], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 2505, "bbox": [6, 179, 97, 56], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 182, "bbox": [70, 182, 21, 10], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 48, "bbox": [254, 23, 11, 5], "iscrowd": 0}, {"id": 39167, "category_id": 83, "area": 43, "bbox": [236, 27, 12, 5], "iscrowd": 0}]}, {"image_id": "ADE_val_00001922", "file_name": "ADE_val_00001922.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 76775, "bbox": [0, 0, 639, 127], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4668, "bbox": [0, 114, 639, 16], "iscrowd": 0}, {"id": 16714096, "category_id": 30, "area": 143215, "bbox": [0, 128, 639, 230], "iscrowd": 0}]}, {"image_id": "ADE_val_00001923", "file_name": "ADE_val_00001923.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 196320, "bbox": [1, 0, 682, 332], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 143649, "bbox": [0, 250, 682, 262], "iscrowd": 0}]}, {"image_id": "ADE_val_00001924", "file_name": "ADE_val_00001924.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 26517, "bbox": [1, 0, 398, 299], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 11060, "bbox": [0, 224, 235, 75], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 17792, "bbox": [144, 1, 206, 117], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 5560, "bbox": [0, 69, 47, 191], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 19702, "bbox": [27, 127, 319, 172], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1005, "bbox": [21, 95, 29, 58], "iscrowd": 0}, {"id": 48127, "category_id": 40, "area": 2335, "bbox": [30, 84, 60, 65], "iscrowd": 0}, {"id": 57343, "category_id": 40, "area": 2337, "bbox": [70, 77, 53, 64], "iscrowd": 0}, {"id": 2084855, "category_id": 40, "area": 1000, "bbox": [116, 74, 23, 61], "iscrowd": 0}, {"id": 57087, "category_id": 40, "area": 2255, "bbox": [128, 69, 76, 73], "iscrowd": 0}, {"id": 56317, "category_id": 40, "area": 3032, "bbox": [148, 93, 71, 52], "iscrowd": 0}, {"id": 908781, "category_id": 40, "area": 2254, "bbox": [209, 92, 53, 59], "iscrowd": 0}, {"id": 122597, "category_id": 40, "area": 2729, "bbox": [253, 94, 54, 70], "iscrowd": 0}, {"id": 578559, "category_id": 40, "area": 2627, "bbox": [297, 86, 45, 90], "iscrowd": 0}, {"id": 49151, "category_id": 40, "area": 1103, "bbox": [330, 107, 19, 84], "iscrowd": 0}]}, {"image_id": "ADE_val_00001925", "file_name": "ADE_val_00001925.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 35794, "bbox": [0, 0, 598, 378], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 40897, "bbox": [0, 370, 599, 79], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 108198, "bbox": [2, 2, 595, 241], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1982, "bbox": [172, 2, 262, 222], "iscrowd": 0}, {"id": 16047595, "category_id": 9, "area": 1697, "bbox": [0, 1, 138, 241], "iscrowd": 0}, {"id": 16120293, "category_id": 9, "area": 1707, "bbox": [475, 1, 123, 245], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 77082, "bbox": [2, 239, 598, 151], "iscrowd": 0}]}, {"image_id": "ADE_val_00001926", "file_name": "ADE_val_00001926.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 31451, "bbox": [0, 0, 299, 198], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 7441, "bbox": [2, 123, 171, 77], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 8266, "bbox": [50, 0, 200, 77], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 430, "bbox": [74, 87, 12, 58], "iscrowd": 0}, {"id": 5046441, "category_id": 13, "area": 442, "bbox": [98, 98, 14, 73], "iscrowd": 0}, {"id": 3150254, "category_id": 13, "area": 1181, "bbox": [86, 92, 19, 88], "iscrowd": 0}, {"id": 5570736, "category_id": 13, "area": 1278, "bbox": [51, 100, 26, 80], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 1033, "bbox": [137, 76, 24, 45], "iscrowd": 0}, {"id": 1631767, "category_id": 15, "area": 1690, "bbox": [33, 44, 22, 111], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 51, "bbox": [162, 36, 11, 8], "iscrowd": 0}, {"id": 435711, "category_id": 83, "area": 90, "bbox": [163, 2, 14, 8], "iscrowd": 0}, {"id": 43007, "category_id": 83, "area": 49, "bbox": [106, 40, 9, 8], "iscrowd": 0}, {"id": 2008048, "category_id": 83, "area": 36, "bbox": [159, 52, 10, 6], "iscrowd": 0}, {"id": 7340287, "category_id": 112, "area": 2283, "bbox": [173, 170, 103, 29], "iscrowd": 0}, {"id": 8192255, "category_id": 112, "area": 1374, "bbox": [169, 156, 82, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00001927", "file_name": "ADE_val_00001927.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 21515, "bbox": [0, 0, 171, 636], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 65185, "bbox": [11, 426, 495, 213], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 36248, "bbox": [13, 14, 152, 607], "iscrowd": 0}, {"id": 6230753, "category_id": 25, "area": 48215, "bbox": [159, 5, 200, 499], "iscrowd": 0}, {"id": 5965823, "category_id": 25, "area": 15160, "bbox": [358, 91, 98, 358], "iscrowd": 0}, {"id": 4194544, "category_id": 25, "area": 8549, "bbox": [454, 233, 52, 197], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 19277, "bbox": [17, 405, 127, 208], "iscrowd": 0}, {"id": 65302, "category_id": 99, "area": 18037, "bbox": [18, 227, 130, 153], "iscrowd": 0}, {"id": 64768, "category_id": 99, "area": 9140, "bbox": [162, 399, 105, 97], "iscrowd": 0}, {"id": 1572608, "category_id": 99, "area": 8651, "bbox": [267, 376, 90, 111], "iscrowd": 0}, {"id": 58141, "category_id": 99, "area": 13824, "bbox": [159, 270, 174, 104], "iscrowd": 0}, {"id": 261888, "category_id": 99, "area": 7374, "bbox": [232, 164, 108, 100], "iscrowd": 0}, {"id": 65280, "category_id": 99, "area": 3992, "bbox": [162, 164, 59, 82], "iscrowd": 0}, {"id": 65287, "category_id": 99, "area": 3784, "bbox": [361, 398, 95, 47], "iscrowd": 0}, {"id": 62976, "category_id": 99, "area": 5540, "bbox": [359, 297, 83, 71], "iscrowd": 0}, {"id": 390144, "category_id": 99, "area": 3852, "bbox": [359, 233, 85, 60], "iscrowd": 0}, {"id": 1636372, "category_id": 99, "area": 1305, "bbox": [356, 199, 48, 35], "iscrowd": 0}, {"id": 2359062, "category_id": 99, "area": 1502, "bbox": [358, 133, 43, 46], "iscrowd": 0}, {"id": 916494, "category_id": 99, "area": 1076, "bbox": [455, 344, 48, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001928", "file_name": "ADE_val_00001928.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 41572, "bbox": [2, 1, 469, 263], "iscrowd": 0}, {"id": 555775, "category_id": 41, "area": 30895, "bbox": [2, 151, 469, 159], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 18560, "bbox": [353, 39, 117, 223], "iscrowd": 0}, {"id": 4727166, "category_id": 13, "area": 30503, "bbox": [1, 7, 199, 302], "iscrowd": 0}, {"id": 5180557, "category_id": 13, "area": 4967, "bbox": [123, 65, 78, 101], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 3116, "bbox": [119, 79, 110, 85], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 3010, "bbox": [202, 1, 42, 101], "iscrowd": 0}]}, {"image_id": "ADE_val_00001929", "file_name": "ADE_val_00001929.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 78400, "bbox": [0, 117, 682, 394], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 48896, "bbox": [8, 357, 673, 154], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 89433, "bbox": [1, 0, 680, 241], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 7726, "bbox": [582, 422, 98, 88], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 368, "bbox": [285, 300, 44, 33], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 492, "bbox": [177, 312, 75, 10], "iscrowd": 0}, {"id": 3145491, "category_id": 15, "area": 285, "bbox": [178, 318, 74, 8], "iscrowd": 0}, {"id": 3269137, "category_id": 15, "area": 265, "bbox": [177, 322, 76, 7], "iscrowd": 0}, {"id": 3735320, "category_id": 15, "area": 265, "bbox": [178, 326, 75, 8], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 15841, "bbox": [304, 416, 281, 93], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 2450, "bbox": [453, 242, 56, 45], "iscrowd": 0}, {"id": 3737326, "category_id": 23, "area": 574, "bbox": [416, 242, 28, 22], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 70, "bbox": [586, 267, 36, 2], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 5501, "bbox": [13, 445, 180, 50], "iscrowd": 0}, {"id": 1308160, "category_id": 42, "area": 136, "bbox": [587, 257, 14, 10], "iscrowd": 0}, {"id": 58115, "category_id": 42, "area": 40, "bbox": [601, 261, 8, 6], "iscrowd": 0}, {"id": 60160, "category_id": 42, "area": 95, "bbox": [609, 258, 11, 9], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1517, "bbox": [377, 145, 33, 50], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 11888, "bbox": [24, 272, 96, 140], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 2417, "bbox": [39, 234, 70, 40], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 1113, "bbox": [510, 332, 30, 45], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 764, "bbox": [73, 166, 37, 34], "iscrowd": 0}]}, {"image_id": "ADE_val_00001930", "file_name": "ADE_val_00001930.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 25916, "bbox": [341, 0, 375, 122], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 57350, "bbox": [194, 263, 521, 248], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 277140, "bbox": [1, 0, 715, 511], "iscrowd": 0}]}, {"image_id": "ADE_val_00001931", "file_name": "ADE_val_00001931.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 19590, "bbox": [0, 0, 233, 179], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9926, "bbox": [0, 157, 233, 153], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 8669, "bbox": [84, 197, 149, 102], "iscrowd": 0}, {"id": 15007969, "category_id": 8, "area": 5532, "bbox": [24, 266, 209, 44], "iscrowd": 0}, {"id": 15010737, "category_id": 8, "area": 5652, "bbox": [119, 81, 114, 131], "iscrowd": 0}, {"id": 16711869, "category_id": 8, "area": 5464, "bbox": [0, 73, 64, 133], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 8052, "bbox": [118, 13, 107, 111], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2069, "bbox": [175, 124, 54, 69], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 285, "bbox": [214, 80, 20, 17], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 1035, "bbox": [2, 199, 30, 52], "iscrowd": 0}, {"id": 9229152, "category_id": 116, "area": 2220, "bbox": [103, 187, 58, 54], "iscrowd": 0}, {"id": 10929761, "category_id": 116, "area": 1253, "bbox": [65, 152, 56, 33], "iscrowd": 0}]}, {"image_id": "ADE_val_00001932", "file_name": "ADE_val_00001932.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 112440, "bbox": [0, 0, 507, 681], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 45346, "bbox": [159, 481, 349, 200], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 6244, "bbox": [416, 6, 93, 69], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 9770, "bbox": [71, 372, 184, 80], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 82574, "bbox": [33, 0, 271, 681], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 34638, "bbox": [382, 0, 129, 331], "iscrowd": 0}, {"id": 16764406, "category_id": 9, "area": 11438, "bbox": [146, 186, 100, 118], "iscrowd": 0}, {"id": 15721933, "category_id": 9, "area": 3535, "bbox": [152, 1, 97, 59], "iscrowd": 0}, {"id": 55039, "category_id": 147, "area": 14989, "bbox": [318, 379, 193, 92], "iscrowd": 0}]}, {"image_id": "ADE_val_00001933", "file_name": "ADE_val_00001933.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 58753, "bbox": [0, 86, 682, 166], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 184726, "bbox": [1, 157, 681, 354], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 52234, "bbox": [0, 0, 682, 131], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 9926, "bbox": [6, 160, 551, 248], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2064, "bbox": [644, 314, 37, 81], "iscrowd": 0}, {"id": 2687385, "category_id": 13, "area": 9236, "bbox": [531, 346, 151, 166], "iscrowd": 0}, {"id": 4263300, "category_id": 13, "area": 5385, "bbox": [611, 404, 69, 105], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 18302, "bbox": [1, 1, 415, 78], "iscrowd": 0}, {"id": 16742912, "category_id": 96, "area": 3954, "bbox": [495, 312, 187, 200], "iscrowd": 0}]}, {"image_id": "ADE_val_00001934", "file_name": "ADE_val_00001934.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 38584, "bbox": [1, 1, 681, 327], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 114474, "bbox": [1, 153, 681, 359], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 27922, "bbox": [115, 1, 566, 66], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 123, "bbox": [399, 145, 11, 21], "iscrowd": 0}, {"id": 16711813, "category_id": 106, "area": 12668, "bbox": [130, 175, 435, 131], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 47, "bbox": [636, 148, 8, 9], "iscrowd": 0}, {"id": 5177465, "category_id": 13, "area": 65, "bbox": [665, 149, 6, 18], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 190, "bbox": [453, 142, 9, 22], "iscrowd": 0}, {"id": 3729931, "category_id": 15, "area": 284, "bbox": [200, 147, 12, 27], "iscrowd": 0}, {"id": 14745351, "category_id": 32, "area": 1044, "bbox": [346, 205, 89, 14], "iscrowd": 0}, {"id": 14155535, "category_id": 32, "area": 707, "bbox": [19, 395, 31, 32], "iscrowd": 0}, {"id": 13172503, "category_id": 32, "area": 243, "bbox": [452, 205, 23, 15], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 5177, "bbox": [474, 50, 33, 233], "iscrowd": 0}, {"id": 2236414, "category_id": 43, "area": 14187, "bbox": [555, 1, 66, 412], "iscrowd": 0}, {"id": 2826751, "category_id": 43, "area": 51732, "bbox": [1, 0, 153, 512], "iscrowd": 0}, {"id": 1314815, "category_id": 43, "area": 577, "bbox": [396, 102, 12, 69], "iscrowd": 0}, {"id": 4133357, "category_id": 43, "area": 1326, "bbox": [531, 88, 18, 105], "iscrowd": 0}, {"id": 1638655, "category_id": 43, "area": 1217, "bbox": [648, 94, 21, 98], "iscrowd": 0}, {"id": 1577961, "category_id": 43, "area": 687, "bbox": [186, 111, 15, 63], "iscrowd": 0}, {"id": 1377510, "category_id": 43, "area": 1137, "bbox": [156, 108, 20, 86], "iscrowd": 0}, {"id": 4653311, "category_id": 43, "area": 314, "bbox": [297, 109, 6, 64], "iscrowd": 0}, {"id": 3676927, "category_id": 43, "area": 344, "bbox": [502, 111, 7, 59], "iscrowd": 0}, {"id": 2556159, "category_id": 43, "area": 14598, "bbox": [204, 2, 58, 406], "iscrowd": 0}, {"id": 2162943, "category_id": 43, "area": 2352, "bbox": [436, 73, 17, 148], "iscrowd": 0}, {"id": 3220991, "category_id": 43, "area": 1165, "bbox": [412, 92, 14, 98], "iscrowd": 0}, {"id": 4587758, "category_id": 43, "area": 5168, "bbox": [252, 51, 30, 234], "iscrowd": 0}, {"id": 1769727, "category_id": 43, "area": 1728, "bbox": [276, 78, 17, 144], "iscrowd": 0}, {"id": 1638647, "category_id": 43, "area": 687, "bbox": [290, 95, 9, 98], "iscrowd": 0}, {"id": 2031871, "category_id": 43, "area": 1914, "bbox": [112, 94, 25, 142], "iscrowd": 0}, {"id": 16714987, "category_id": 46, "area": 188, "bbox": [319, 156, 22, 9], "iscrowd": 0}, {"id": 16721380, "category_id": 46, "area": 207, "bbox": [353, 155, 23, 9], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 28, "bbox": [400, 166, 6, 6], "iscrowd": 0}, {"id": 16719359, "category_id": 126, "area": 239, "bbox": [618, 177, 21, 15], "iscrowd": 0}, {"id": 16059647, "category_id": 126, "area": 133, "bbox": [561, 177, 12, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001935", "file_name": "ADE_val_00001935.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 50464, "bbox": [0, 103, 683, 165], "iscrowd": 0}, {"id": 65433, "category_id": 55, "area": 129958, "bbox": [1, 244, 680, 268], "iscrowd": 0}, {"id": 16711711, "category_id": 60, "area": 283, "bbox": [613, 227, 66, 20], "iscrowd": 0}, {"id": 12105983, "category_id": 85, "area": 2392, "bbox": [454, 73, 51, 80], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 100, "bbox": [359, 252, 8, 20], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 522, "bbox": [217, 204, 23, 26], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1199, "bbox": [34, 259, 60, 25], "iscrowd": 0}, {"id": 13661702, "category_id": 21, "area": 6592, "bbox": [303, 410, 123, 76], "iscrowd": 0}, {"id": 14184715, "category_id": 21, "area": 389, "bbox": [406, 263, 36, 19], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 673, "bbox": [613, 218, 68, 27], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 2050, "bbox": [155, 198, 87, 34], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1077, "bbox": [108, 99, 20, 55], "iscrowd": 0}, {"id": 1310975, "category_id": 84, "area": 500, "bbox": [353, 247, 58, 24], "iscrowd": 0}, {"id": 3315, "category_id": 84, "area": 934, "bbox": [554, 259, 108, 18], "iscrowd": 0}, {"id": 393454, "category_id": 84, "area": 888, "bbox": [71, 239, 62, 20], "iscrowd": 0}, {"id": 1580543, "category_id": 84, "area": 1696, "bbox": [341, 260, 97, 33], "iscrowd": 0}, {"id": 1900799, "category_id": 84, "area": 1204, "bbox": [291, 250, 67, 27], "iscrowd": 0}, {"id": 2228479, "category_id": 84, "area": 3062, "bbox": [135, 198, 104, 81], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 97, "bbox": [424, 55, 14, 56], "iscrowd": 0}, {"id": 16736003, "category_id": 88, "area": 203, "bbox": [613, 17, 17, 101], "iscrowd": 0}, {"id": 16469774, "category_id": 88, "area": 277, "bbox": [289, 32, 16, 121], "iscrowd": 0}, {"id": 5439232, "category_id": 91, "area": 15436, "bbox": [1, 105, 396, 146], "iscrowd": 0}]}, {"image_id": "ADE_val_00001936", "file_name": "ADE_val_00001936.png", "segments_info": [{"id": 3289680, "category_id": 4, "area": 113932, "bbox": [0, 490, 508, 276], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 41680, "bbox": [179, 2, 174, 250], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 7433, "bbox": [69, 4, 51, 280], "iscrowd": 0}, {"id": 4133375, "category_id": 43, "area": 7871, "bbox": [408, 4, 69, 286], "iscrowd": 0}]}, {"image_id": "ADE_val_00001937", "file_name": "ADE_val_00001937.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 203668, "bbox": [3, 0, 451, 532], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 1060, "bbox": [449, 648, 61, 34], "iscrowd": 0}, {"id": 16713830, "category_id": 38, "area": 92528, "bbox": [0, 409, 510, 271], "iscrowd": 0}, {"id": 16755968, "category_id": 59, "area": 38407, "bbox": [420, 0, 90, 559], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 6372, "bbox": [192, 603, 118, 78], "iscrowd": 0}]}, {"image_id": "ADE_val_00001938", "file_name": "ADE_val_00001938.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 29640, "bbox": [0, 0, 255, 172], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 948, "bbox": [142, 156, 113, 17], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 5296, "bbox": [1, 169, 218, 47], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 15904, "bbox": [0, 167, 256, 88], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 11566, "bbox": [107, 1, 148, 132], "iscrowd": 0}]}, {"image_id": "ADE_val_00001939", "file_name": "ADE_val_00001939.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 49981, "bbox": [0, 0, 682, 511], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 9727, "bbox": [403, 178, 238, 96], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 141756, "bbox": [17, 91, 666, 421], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 15201, "bbox": [21, 367, 242, 145], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 8491, "bbox": [505, 1, 97, 122], "iscrowd": 0}, {"id": 16776967, "category_id": 36, "area": 67198, "bbox": [28, 0, 464, 178], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1942, "bbox": [472, 2, 53, 180], "iscrowd": 0}, {"id": 2424788, "category_id": 37, "area": 13100, "bbox": [17, 192, 138, 218], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 4691, "bbox": [138, 113, 93, 131], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 7989, "bbox": [36, 380, 75, 130], "iscrowd": 0}, {"id": 16771840, "category_id": 58, "area": 2371, "bbox": [54, 105, 90, 57], "iscrowd": 0}, {"id": 15071247, "category_id": 58, "area": 8150, "bbox": [73, 148, 155, 120], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 518, "bbox": [213, 155, 27, 43], "iscrowd": 0}, {"id": 3609586, "category_id": 109, "area": 3524, "bbox": [224, 163, 55, 94], "iscrowd": 0}]}, {"image_id": "ADE_val_00001940", "file_name": "ADE_val_00001940.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 9913, "bbox": [0, 0, 300, 54], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 13360, "bbox": [0, 12, 300, 71], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 9137, "bbox": [0, 70, 300, 142], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 490, "bbox": [137, 93, 27, 33], "iscrowd": 0}, {"id": 65480, "category_id": 70, "area": 363, "bbox": [195, 99, 16, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00001941", "file_name": "ADE_val_00001941.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 3497, "bbox": [0, 0, 299, 97], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 10202, "bbox": [0, 94, 300, 68], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 17327, "bbox": [0, 152, 300, 73], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 709, "bbox": [86, 133, 66, 17], "iscrowd": 0}, {"id": 2296982, "category_id": 13, "area": 585, "bbox": [133, 126, 63, 15], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 136, "bbox": [23, 146, 15, 15], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 7162, "bbox": [23, 86, 198, 96], "iscrowd": 0}, {"id": 16732672, "category_id": 73, "area": 817, "bbox": [287, 0, 12, 152], "iscrowd": 0}, {"id": 16733441, "category_id": 73, "area": 12457, "bbox": [0, 0, 163, 126], "iscrowd": 0}]}, {"image_id": "ADE_val_00001942", "file_name": "ADE_val_00001942.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 45623, "bbox": [0, 9, 320, 231], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17949, "bbox": [31, 137, 288, 103], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 6100, "bbox": [0, 0, 320, 31], "iscrowd": 0}]}, {"image_id": "ADE_val_00001943", "file_name": "ADE_val_00001943.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 68401, "bbox": [1, 74, 682, 264], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 61545, "bbox": [0, 276, 683, 236], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 57653, "bbox": [0, 0, 683, 112], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 4225, "bbox": [1, 183, 519, 57], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3059, "bbox": [3, 254, 139, 42], "iscrowd": 0}, {"id": 4784383, "category_id": 16, "area": 1429, "bbox": [345, 262, 140, 78], "iscrowd": 0}, {"id": 5243120, "category_id": 16, "area": 1050, "bbox": [621, 243, 61, 26], "iscrowd": 0}, {"id": 4002047, "category_id": 16, "area": 1275, "bbox": [364, 276, 94, 47], "iscrowd": 0}, {"id": 5245686, "category_id": 16, "area": 1161, "bbox": [178, 272, 88, 75], "iscrowd": 0}, {"id": 3610353, "category_id": 16, "area": 1584, "bbox": [213, 285, 102, 82], "iscrowd": 0}, {"id": 3409919, "category_id": 16, "area": 2410, "bbox": [264, 302, 120, 96], "iscrowd": 0}, {"id": 3408127, "category_id": 16, "area": 3076, "bbox": [518, 306, 134, 71], "iscrowd": 0}, {"id": 3932397, "category_id": 16, "area": 8407, "bbox": [432, 361, 195, 136], "iscrowd": 0}, {"id": 4653309, "category_id": 16, "area": 352, "bbox": [651, 295, 31, 36], "iscrowd": 0}, {"id": 6883067, "category_id": 16, "area": 918, "bbox": [646, 339, 36, 89], "iscrowd": 0}, {"id": 6947071, "category_id": 16, "area": 2562, "bbox": [613, 435, 70, 76], "iscrowd": 0}, {"id": 6167537, "category_id": 16, "area": 2017, "bbox": [37, 295, 106, 120], "iscrowd": 0}, {"id": 4063487, "category_id": 16, "area": 6265, "bbox": [61, 348, 174, 163], "iscrowd": 0}, {"id": 3544319, "category_id": 16, "area": 14036, "bbox": [109, 398, 275, 113], "iscrowd": 0}, {"id": 6881764, "category_id": 16, "area": 1122, "bbox": [362, 494, 108, 18], "iscrowd": 0}, {"id": 3869183, "category_id": 16, "area": 895, "bbox": [577, 261, 81, 53], "iscrowd": 0}, {"id": 5898495, "category_id": 16, "area": 1127, "bbox": [481, 267, 85, 78], "iscrowd": 0}, {"id": 7082495, "category_id": 16, "area": 4377, "bbox": [328, 326, 150, 157], "iscrowd": 0}, {"id": 5833444, "category_id": 16, "area": 1433, "bbox": [24, 282, 91, 101], "iscrowd": 0}, {"id": 6164735, "category_id": 16, "area": 3434, "bbox": [54, 315, 130, 143], "iscrowd": 0}, {"id": 7340274, "category_id": 16, "area": 2008, "bbox": [426, 289, 107, 114], "iscrowd": 0}, {"id": 3604731, "category_id": 16, "area": 1504, "bbox": [555, 277, 100, 93], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1700, "bbox": [250, 299, 75, 99], "iscrowd": 0}, {"id": 1722816, "category_id": 20, "area": 2423, "bbox": [308, 324, 94, 111], "iscrowd": 0}, {"id": 24778, "category_id": 20, "area": 7196, "bbox": [388, 359, 132, 153], "iscrowd": 0}, {"id": 14554, "category_id": 20, "area": 2194, "bbox": [595, 334, 87, 102], "iscrowd": 0}, {"id": 2042853, "category_id": 20, "area": 5314, "bbox": [527, 424, 155, 88], "iscrowd": 0}, {"id": 350435, "category_id": 20, "area": 2377, "bbox": [90, 345, 93, 166], "iscrowd": 0}, {"id": 21182, "category_id": 20, "area": 3367, "bbox": [105, 395, 132, 117], "iscrowd": 0}, {"id": 17607, "category_id": 20, "area": 724, "bbox": [297, 493, 75, 19], "iscrowd": 0}, {"id": 1663429, "category_id": 20, "area": 1790, "bbox": [209, 284, 62, 106], "iscrowd": 0}, {"id": 24002, "category_id": 20, "area": 1553, "bbox": [477, 305, 87, 59], "iscrowd": 0}, {"id": 19645, "category_id": 20, "area": 602, "bbox": [401, 290, 64, 44], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 138, "bbox": [636, 212, 15, 11], "iscrowd": 0}, {"id": 4980991, "category_id": 23, "area": 64, "bbox": [587, 191, 8, 8], "iscrowd": 0}, {"id": 1706751, "category_id": 23, "area": 51, "bbox": [578, 191, 9, 7], "iscrowd": 0}, {"id": 4587767, "category_id": 23, "area": 20, "bbox": [572, 210, 4, 6], "iscrowd": 0}, {"id": 2818286, "category_id": 23, "area": 35, "bbox": [586, 208, 5, 7], "iscrowd": 0}, {"id": 2499583, "category_id": 23, "area": 18, "bbox": [562, 209, 3, 6], "iscrowd": 0}, {"id": 2033663, "category_id": 23, "area": 28, "bbox": [571, 254, 4, 7], "iscrowd": 0}, {"id": 4327935, "category_id": 23, "area": 24, "bbox": [568, 231, 4, 6], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 2544, "bbox": [561, 199, 46, 80], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 2874, "bbox": [442, 241, 119, 57], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 378, "bbox": [623, 183, 22, 38], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1874, "bbox": [111, 157, 36, 55], "iscrowd": 0}, {"id": 11862271, "category_id": 44, "area": 1314, "bbox": [158, 91, 34, 41], "iscrowd": 0}, {"id": 16121600, "category_id": 63, "area": 1752, "bbox": [595, 219, 55, 67], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 31, "bbox": [538, 232, 8, 6], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 580, "bbox": [443, 248, 36, 20], "iscrowd": 0}, {"id": 506610, "category_id": 68, "area": 425, "bbox": [607, 198, 24, 22], "iscrowd": 0}, {"id": 47871, "category_id": 68, "area": 630, "bbox": [598, 226, 38, 20], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 1207, "bbox": [329, 67, 122, 20], "iscrowd": 0}, {"id": 37346, "category_id": 83, "area": 808, "bbox": [509, 86, 103, 16], "iscrowd": 0}, {"id": 38637, "category_id": 83, "area": 1797, "bbox": [85, 48, 144, 23], "iscrowd": 0}, {"id": 37887, "category_id": 83, "area": 3354, "bbox": [535, 0, 148, 36], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 3067, "bbox": [35, 78, 67, 62], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 211, "bbox": [399, 241, 11, 29], "iscrowd": 0}, {"id": 2031871, "category_id": 109, "area": 76, "bbox": [663, 177, 8, 15], "iscrowd": 0}, {"id": 16763904, "category_id": 131, "area": 15800, "bbox": [256, 99, 128, 144], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 114, "bbox": [531, 238, 9, 14], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 255, "bbox": [216, 241, 45, 7], "iscrowd": 0}, {"id": 16735232, "category_id": 144, "area": 823, "bbox": [446, 204, 36, 36], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 186, "bbox": [499, 152, 13, 17], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 196, "bbox": [415, 160, 24, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00001944", "file_name": "ADE_val_00001944.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 19977, "bbox": [2, 1, 253, 81], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 35575, "bbox": [2, 109, 253, 146], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 7900, "bbox": [2, 79, 252, 40], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 416, "bbox": [16, 85, 87, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00001945", "file_name": "ADE_val_00001945.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 75311, "bbox": [1, 1, 683, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 79350, "bbox": [2, 273, 613, 239], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 75249, "bbox": [1, 1, 663, 145], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 2364, "bbox": [327, 224, 285, 65], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 1200, "bbox": [602, 228, 45, 35], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 5316, "bbox": [323, 161, 62, 110], "iscrowd": 0}, {"id": 2487809, "category_id": 15, "area": 2197, "bbox": [141, 157, 23, 135], "iscrowd": 0}, {"id": 1769231, "category_id": 15, "area": 8417, "bbox": [532, 157, 74, 123], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 17284, "bbox": [1, 380, 154, 132], "iscrowd": 0}, {"id": 6756067, "category_id": 16, "area": 326, "bbox": [460, 235, 50, 11], "iscrowd": 0}, {"id": 4593407, "category_id": 16, "area": 6772, "bbox": [569, 286, 83, 111], "iscrowd": 0}, {"id": 6488318, "category_id": 16, "area": 6909, "bbox": [550, 438, 98, 74], "iscrowd": 0}, {"id": 5243135, "category_id": 16, "area": 14316, "bbox": [197, 246, 316, 169], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 62, "bbox": [246, 204, 19, 5], "iscrowd": 0}, {"id": 25799, "category_id": 20, "area": 2120, "bbox": [611, 374, 37, 69], "iscrowd": 0}, {"id": 1794497, "category_id": 20, "area": 131, "bbox": [312, 258, 12, 16], "iscrowd": 0}, {"id": 15848, "category_id": 20, "area": 302, "bbox": [261, 269, 21, 20], "iscrowd": 0}, {"id": 19887, "category_id": 20, "area": 384, "bbox": [233, 275, 23, 23], "iscrowd": 0}, {"id": 22753, "category_id": 20, "area": 690, "bbox": [203, 284, 26, 104], "iscrowd": 0}, {"id": 929757, "category_id": 20, "area": 3955, "bbox": [213, 304, 81, 122], "iscrowd": 0}, {"id": 2046181, "category_id": 20, "area": 4680, "bbox": [291, 310, 84, 127], "iscrowd": 0}, {"id": 81086, "category_id": 20, "area": 1883, "bbox": [379, 291, 84, 122], "iscrowd": 0}, {"id": 17358, "category_id": 20, "area": 1129, "bbox": [426, 282, 53, 107], "iscrowd": 0}, {"id": 673204, "category_id": 20, "area": 750, "bbox": [454, 273, 41, 98], "iscrowd": 0}, {"id": 25043, "category_id": 20, "area": 469, "bbox": [474, 267, 29, 81], "iscrowd": 0}, {"id": 1784798, "category_id": 20, "area": 297, "bbox": [494, 261, 17, 75], "iscrowd": 0}, {"id": 14525, "category_id": 20, "area": 382, "bbox": [501, 255, 19, 73], "iscrowd": 0}, {"id": 19379, "category_id": 20, "area": 237, "bbox": [509, 249, 16, 69], "iscrowd": 0}, {"id": 18892, "category_id": 20, "area": 243, "bbox": [513, 244, 17, 66], "iscrowd": 0}, {"id": 1059796, "category_id": 20, "area": 980, "bbox": [2, 252, 16, 91], "iscrowd": 0}, {"id": 12517, "category_id": 20, "area": 132, "bbox": [332, 253, 12, 15], "iscrowd": 0}, {"id": 1194194, "category_id": 20, "area": 58, "bbox": [348, 255, 9, 8], "iscrowd": 0}, {"id": 668602, "category_id": 20, "area": 241, "bbox": [291, 261, 17, 19], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 650, "bbox": [193, 169, 22, 31], "iscrowd": 0}, {"id": 2824426, "category_id": 23, "area": 3390, "bbox": [42, 164, 61, 60], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 6062, "bbox": [275, 112, 42, 172], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 106, "bbox": [1, 95, 25, 8], "iscrowd": 0}, {"id": 568063, "category_id": 83, "area": 314, "bbox": [106, 114, 64, 9], "iscrowd": 0}, {"id": 370175, "category_id": 83, "area": 203, "bbox": [212, 126, 46, 8], "iscrowd": 0}, {"id": 1745151, "category_id": 83, "area": 150, "bbox": [241, 136, 35, 6], "iscrowd": 0}, {"id": 901618, "category_id": 83, "area": 4434, "bbox": [302, 0, 247, 28], "iscrowd": 0}, {"id": 435939, "category_id": 83, "area": 1578, "bbox": [422, 66, 146, 19], "iscrowd": 0}, {"id": 434943, "category_id": 83, "area": 584, "bbox": [474, 101, 104, 10], "iscrowd": 0}, {"id": 1812733, "category_id": 83, "area": 333, "bbox": [507, 124, 76, 7], "iscrowd": 0}, {"id": 39679, "category_id": 83, "area": 247, "bbox": [84, 42, 32, 11], "iscrowd": 0}, {"id": 39167, "category_id": 83, "area": 110, "bbox": [260, 87, 21, 8], "iscrowd": 0}, {"id": 641279, "category_id": 83, "area": 101, "bbox": [347, 111, 17, 8], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 177, "bbox": [601, 200, 9, 28], "iscrowd": 0}, {"id": 1048328, "category_id": 99, "area": 91, "bbox": [425, 245, 8, 15], "iscrowd": 0}, {"id": 64512, "category_id": 99, "area": 182, "bbox": [622, 202, 10, 29], "iscrowd": 0}, {"id": 64256, "category_id": 99, "area": 119, "bbox": [401, 254, 8, 18], "iscrowd": 0}, {"id": 65301, "category_id": 99, "area": 121, "bbox": [337, 275, 9, 22], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 169, "bbox": [593, 280, 16, 14], "iscrowd": 0}, {"id": 16715759, "category_id": 126, "area": 75, "bbox": [435, 246, 7, 13], "iscrowd": 0}, {"id": 16320750, "category_id": 126, "area": 76, "bbox": [408, 258, 9, 10], "iscrowd": 0}, {"id": 15794399, "category_id": 126, "area": 223, "bbox": [365, 266, 17, 17], "iscrowd": 0}, {"id": 15342334, "category_id": 126, "area": 298, "bbox": [317, 277, 24, 23], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 2540, "bbox": [1, 339, 71, 46], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 734, "bbox": [1, 391, 19, 50], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 50, "bbox": [619, 208, 4, 19], "iscrowd": 0}]}, {"image_id": "ADE_val_00001946", "file_name": "ADE_val_00001946.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 71365, "bbox": [2, 2, 507, 767], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 35895, "bbox": [110, 621, 248, 148], "iscrowd": 0}, {"id": 4716288, "category_id": 15, "area": 4615, "bbox": [308, 425, 44, 121], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 6384, "bbox": [196, 314, 74, 94], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 1058, "bbox": [317, 574, 38, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00001947", "file_name": "ADE_val_00001947.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 136871, "bbox": [1, 1, 564, 511], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 41338, "bbox": [1, 294, 656, 218], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 52743, "bbox": [1, 1, 642, 188], "iscrowd": 0}, {"id": 65423, "category_id": 101, "area": 6120, "bbox": [329, 224, 124, 115], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 63859, "bbox": [1, 92, 224, 420], "iscrowd": 0}, {"id": 2686732, "category_id": 15, "area": 4417, "bbox": [558, 187, 49, 107], "iscrowd": 0}, {"id": 1962529, "category_id": 15, "area": 3112, "bbox": [466, 194, 26, 173], "iscrowd": 0}, {"id": 2156803, "category_id": 15, "area": 1437, "bbox": [523, 203, 15, 121], "iscrowd": 0}, {"id": 5169408, "category_id": 15, "area": 10013, "bbox": [604, 171, 50, 249], "iscrowd": 0}, {"id": 3735316, "category_id": 15, "area": 17783, "bbox": [641, 1, 42, 510], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 2614, "bbox": [1, 379, 23, 133], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 335, "bbox": [124, 235, 19, 23], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 74, "bbox": [464, 118, 19, 6], "iscrowd": 0}]}, {"image_id": "ADE_val_00001948", "file_name": "ADE_val_00001948.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 9195, "bbox": [0, 0, 255, 41], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 9435, "bbox": [0, 136, 255, 119], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 45575, "bbox": [0, 27, 255, 228], "iscrowd": 0}]}, {"image_id": "ADE_val_00001949", "file_name": "ADE_val_00001949.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 162121, "bbox": [1, 1, 682, 475], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17350, "bbox": [1, 447, 682, 65], "iscrowd": 0}, {"id": 28927, "category_id": 100, "area": 44598, "bbox": [86, 69, 193, 407], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 30858, "bbox": [134, 298, 465, 214], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3667, "bbox": [276, 263, 84, 64], "iscrowd": 0}, {"id": 23253, "category_id": 20, "area": 9324, "bbox": [175, 273, 132, 239], "iscrowd": 0}, {"id": 17843, "category_id": 20, "area": 11558, "bbox": [478, 306, 120, 206], "iscrowd": 0}, {"id": 16304, "category_id": 20, "area": 16875, "bbox": [272, 336, 247, 175], "iscrowd": 0}, {"id": 22198, "category_id": 20, "area": 3899, "bbox": [474, 262, 92, 64], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 4488, "bbox": [574, 322, 49, 150], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 6664, "bbox": [601, 246, 81, 142], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 16001, "bbox": [311, 0, 176, 195], "iscrowd": 0}, {"id": 52479, "category_id": 121, "area": 778, "bbox": [402, 320, 50, 21], "iscrowd": 0}, {"id": 49147, "category_id": 121, "area": 714, "bbox": [200, 351, 55, 21], "iscrowd": 0}, {"id": 47862, "category_id": 121, "area": 749, "bbox": [293, 367, 54, 25], "iscrowd": 0}, {"id": 57081, "category_id": 121, "area": 205, "bbox": [419, 347, 32, 11], "iscrowd": 0}, {"id": 2017535, "category_id": 121, "area": 273, "bbox": [483, 317, 42, 11], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 2733, "bbox": [147, 184, 54, 60], "iscrowd": 0}, {"id": 10157824, "category_id": 143, "area": 473, "bbox": [480, 314, 53, 17], "iscrowd": 0}, {"id": 11397888, "category_id": 143, "area": 669, "bbox": [403, 302, 54, 18], "iscrowd": 0}, {"id": 10419968, "category_id": 143, "area": 432, "bbox": [348, 311, 27, 20], "iscrowd": 0}, {"id": 10544397, "category_id": 143, "area": 1624, "bbox": [236, 331, 79, 26], "iscrowd": 0}, {"id": 10485504, "category_id": 143, "area": 1028, "bbox": [186, 350, 77, 30], "iscrowd": 0}, {"id": 10944274, "category_id": 143, "area": 1223, "bbox": [280, 365, 83, 32], "iscrowd": 0}, {"id": 12517120, "category_id": 143, "area": 1186, "bbox": [367, 365, 53, 33], "iscrowd": 0}, {"id": 10616605, "category_id": 143, "area": 717, "bbox": [410, 341, 60, 22], "iscrowd": 0}, {"id": 11133184, "category_id": 143, "area": 497, "bbox": [476, 331, 53, 24], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 964, "bbox": [326, 293, 26, 66], "iscrowd": 0}, {"id": 13422596, "category_id": 148, "area": 848, "bbox": [372, 303, 27, 64], "iscrowd": 0}, {"id": 13485590, "category_id": 148, "area": 424, "bbox": [414, 279, 21, 39], "iscrowd": 0}, {"id": 12377398, "category_id": 148, "area": 651, "bbox": [468, 282, 23, 57], "iscrowd": 0}, {"id": 11118623, "category_id": 148, "area": 490, "bbox": [455, 320, 20, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00001950", "file_name": "ADE_val_00001950.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 91805, "bbox": [1, 69, 511, 614], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 19778, "bbox": [232, 409, 239, 274], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 47973, "bbox": [0, 0, 512, 117], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 52009, "bbox": [0, 456, 462, 227], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 25783, "bbox": [380, 106, 128, 251], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 23447, "bbox": [201, 173, 128, 243], "iscrowd": 0}, {"id": 16718024, "category_id": 11, "area": 12122, "bbox": [376, 336, 113, 149], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 19768, "bbox": [1, 376, 332, 258], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 3670, "bbox": [23, 352, 90, 53], "iscrowd": 0}, {"id": 874981, "category_id": 20, "area": 3160, "bbox": [132, 344, 80, 49], "iscrowd": 0}, {"id": 475822, "category_id": 20, "area": 18728, "bbox": [45, 417, 141, 238], "iscrowd": 0}, {"id": 675511, "category_id": 20, "area": 14765, "bbox": [172, 391, 148, 219], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 483, "bbox": [245, 323, 61, 16], "iscrowd": 0}, {"id": 16719616, "category_id": 86, "area": 6861, "bbox": [83, 0, 125, 178], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 585, "bbox": [249, 257, 29, 24], "iscrowd": 0}]}, {"image_id": "ADE_val_00001951", "file_name": "ADE_val_00001951.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 149298, "bbox": [0, 0, 449, 599], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8301, "bbox": [135, 554, 210, 45], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 109251, "bbox": [120, 51, 239, 510], "iscrowd": 0}]}, {"image_id": "ADE_val_00001952", "file_name": "ADE_val_00001952.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 148249, "bbox": [0, 0, 682, 271], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 68933, "bbox": [0, 119, 683, 263], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 128969, "bbox": [1, 270, 681, 241], "iscrowd": 0}]}, {"image_id": "ADE_val_00001953", "file_name": "ADE_val_00001953.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 20464, "bbox": [2, 1, 253, 143], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 20504, "bbox": [0, 40, 255, 154], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 23125, "bbox": [2, 161, 254, 95], "iscrowd": 0}]}, {"image_id": "ADE_val_00001954", "file_name": "ADE_val_00001954.png", "segments_info": [{"id": 247812, "category_id": 5, "area": 35068, "bbox": [2, 1, 253, 236], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 24666, "bbox": [2, 82, 253, 174], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 3127, "bbox": [131, 73, 94, 42], "iscrowd": 0}]}, {"image_id": "ADE_val_00001955", "file_name": "ADE_val_00001955.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 902, "bbox": [66, 1, 189, 88], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 46194, "bbox": [2, 1, 253, 231], "iscrowd": 0}, {"id": 16761344, "category_id": 95, "area": 15923, "bbox": [2, 184, 254, 71], "iscrowd": 0}]}, {"image_id": "ADE_val_00001956", "file_name": "ADE_val_00001956.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1651, "bbox": [188, 267, 77, 34], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 13856, "bbox": [0, 0, 277, 165], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 4995, "bbox": [185, 192, 79, 87], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 13131, "bbox": [95, 292, 182, 121], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 3438, "bbox": [185, 160, 75, 54], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 8722, "bbox": [0, 351, 189, 63], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 66955, "bbox": [0, 2, 278, 356], "iscrowd": 0}]}, {"image_id": "ADE_val_00001957", "file_name": "ADE_val_00001957.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 5247, "bbox": [108, 3, 111, 93], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 8781, "bbox": [65, 95, 118, 116], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 448, "bbox": [110, 0, 112, 5], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 24816, "bbox": [0, 0, 147, 211], "iscrowd": 0}, {"id": 3679739, "category_id": 25, "area": 11022, "bbox": [182, 0, 58, 211], "iscrowd": 0}]}, {"image_id": "ADE_val_00001958", "file_name": "ADE_val_00001958.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 8768, "bbox": [0, 22, 225, 152], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 9914, "bbox": [1, 154, 224, 71], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 7207, "bbox": [2, 0, 223, 39], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 2524, "bbox": [2, 53, 95, 38], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1207, "bbox": [74, 56, 38, 70], "iscrowd": 0}, {"id": 14537952, "category_id": 9, "area": 1400, "bbox": [19, 53, 54, 73], "iscrowd": 0}, {"id": 14220255, "category_id": 9, "area": 491, "bbox": [2, 53, 15, 66], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 3620, "bbox": [160, 43, 35, 120], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 2453, "bbox": [96, 40, 31, 119], "iscrowd": 0}, {"id": 1392895, "category_id": 19, "area": 1965, "bbox": [0, 30, 96, 27], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 478, "bbox": [137, 68, 21, 23], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 2894, "bbox": [161, 124, 64, 77], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 2409, "bbox": [0, 125, 125, 63], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 130, "bbox": [35, 96, 11, 33], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 442, "bbox": [187, 139, 37, 23], "iscrowd": 0}, {"id": 11403008, "category_id": 75, "area": 831, "bbox": [46, 102, 36, 32], "iscrowd": 0}, {"id": 16711690, "category_id": 76, "area": 2377, "bbox": [55, 132, 62, 69], "iscrowd": 0}]}, {"image_id": "ADE_val_00001959", "file_name": "ADE_val_00001959.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 58113, "bbox": [1, 1, 615, 255], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 42873, "bbox": [19, 252, 593, 260], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 23852, "bbox": [139, 1, 477, 81], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 11966, "bbox": [279, 136, 232, 178], "iscrowd": 0}, {"id": 15008745, "category_id": 8, "area": 71964, "bbox": [58, 122, 400, 348], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 3543, "bbox": [611, 0, 29, 266], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 2060, "bbox": [506, 91, 19, 157], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 291, "bbox": [276, 229, 36, 13], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 22421, "bbox": [455, 242, 117, 270], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 4765, "bbox": [403, 99, 60, 83], "iscrowd": 0}, {"id": 2301178, "category_id": 23, "area": 1647, "bbox": [279, 68, 33, 58], "iscrowd": 0}, {"id": 2822641, "category_id": 23, "area": 2359, "bbox": [234, 56, 40, 66], "iscrowd": 0}, {"id": 3408127, "category_id": 23, "area": 3368, "bbox": [177, 41, 50, 76], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 240, "bbox": [525, 129, 17, 24], "iscrowd": 0}, {"id": 14612697, "category_id": 28, "area": 3832, "bbox": [534, 110, 78, 67], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 22364, "bbox": [0, 244, 140, 268], "iscrowd": 0}, {"id": 4718346, "category_id": 34, "area": 17693, "bbox": [553, 263, 87, 249], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 4551, "bbox": [0, 119, 103, 135], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 5277, "bbox": [0, 242, 71, 88], "iscrowd": 0}, {"id": 51455, "category_id": 40, "area": 536, "bbox": [335, 200, 34, 23], "iscrowd": 0}, {"id": 1231103, "category_id": 40, "area": 596, "bbox": [342, 185, 38, 33], "iscrowd": 0}, {"id": 42217, "category_id": 40, "area": 1786, "bbox": [146, 224, 62, 36], "iscrowd": 0}, {"id": 450559, "category_id": 40, "area": 1868, "bbox": [176, 198, 61, 53], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 4966, "bbox": [585, 62, 54, 148], "iscrowd": 0}, {"id": 70143, "category_id": 67, "area": 297, "bbox": [275, 198, 23, 25], "iscrowd": 0}, {"id": 16748288, "category_id": 71, "area": 1873, "bbox": [525, 187, 87, 27], "iscrowd": 0}, {"id": 6684927, "category_id": 82, "area": 135, "bbox": [529, 178, 16, 11], "iscrowd": 0}, {"id": 5243135, "category_id": 82, "area": 54, "bbox": [544, 180, 8, 8], "iscrowd": 0}, {"id": 6947060, "category_id": 82, "area": 46, "bbox": [535, 175, 13, 5], "iscrowd": 0}, {"id": 7078143, "category_id": 82, "area": 60, "bbox": [551, 180, 9, 8], "iscrowd": 0}, {"id": 6623201, "category_id": 82, "area": 19, "bbox": [548, 176, 6, 4], "iscrowd": 0}, {"id": 7604204, "category_id": 82, "area": 60, "bbox": [538, 170, 13, 7], "iscrowd": 0}, {"id": 10532934, "category_id": 116, "area": 250, "bbox": [534, 237, 37, 39], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 1946, "bbox": [235, 139, 65, 49], "iscrowd": 0}, {"id": 16718102, "category_id": 135, "area": 429, "bbox": [543, 92, 52, 18], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 237, "bbox": [275, 217, 22, 15], "iscrowd": 0}, {"id": 65321, "category_id": 138, "area": 1052, "bbox": [228, 255, 88, 30], "iscrowd": 0}, {"id": 16711853, "category_id": 139, "area": 222, "bbox": [524, 230, 21, 15], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 2592, "bbox": [224, 0, 176, 40], "iscrowd": 0}]}, {"image_id": "ADE_val_00001960", "file_name": "ADE_val_00001960.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 93125, "bbox": [0, 4, 768, 353], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 29659, "bbox": [145, 353, 237, 159], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 41151, "bbox": [0, 0, 768, 70], "iscrowd": 0}, {"id": 16713164, "category_id": 8, "area": 59333, "bbox": [317, 303, 451, 209], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 15985, "bbox": [0, 175, 64, 337], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 36296, "bbox": [90, 82, 154, 280], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1511, "bbox": [462, 260, 124, 26], "iscrowd": 0}, {"id": 3604735, "category_id": 16, "area": 4831, "bbox": [80, 306, 68, 204], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 24814, "bbox": [270, 72, 134, 204], "iscrowd": 0}, {"id": 601599, "category_id": 19, "area": 21466, "bbox": [401, 76, 129, 196], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 5248, "bbox": [124, 308, 41, 203], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3884, "bbox": [600, 123, 57, 76], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 25938, "bbox": [354, 262, 300, 132], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 4760, "bbox": [36, 179, 83, 141], "iscrowd": 0}, {"id": 59630, "category_id": 37, "area": 3908, "bbox": [499, 171, 73, 105], "iscrowd": 0}, {"id": 65485, "category_id": 37, "area": 5457, "bbox": [645, 217, 76, 137], "iscrowd": 0}, {"id": 65300, "category_id": 51, "area": 7572, "bbox": [53, 361, 65, 150], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 3383, "bbox": [41, 276, 43, 119], "iscrowd": 0}]}, {"image_id": "ADE_val_00001961", "file_name": "ADE_val_00001961.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 68825, "bbox": [12, 91, 671, 354], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17166, "bbox": [0, 296, 634, 216], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 87694, "bbox": [0, 0, 682, 158], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4437, "bbox": [355, 180, 193, 95], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 3431, "bbox": [11, 168, 46, 109], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1567, "bbox": [15, 287, 91, 37], "iscrowd": 0}, {"id": 4325631, "category_id": 16, "area": 100, "bbox": [19, 277, 15, 12], "iscrowd": 0}, {"id": 5505267, "category_id": 16, "area": 1653, "bbox": [96, 277, 84, 51], "iscrowd": 0}, {"id": 6034675, "category_id": 16, "area": 1870, "bbox": [18, 318, 120, 59], "iscrowd": 0}, {"id": 3543267, "category_id": 16, "area": 4365, "bbox": [22, 349, 121, 128], "iscrowd": 0}, {"id": 4463103, "category_id": 16, "area": 245, "bbox": [192, 363, 8, 47], "iscrowd": 0}, {"id": 3542271, "category_id": 16, "area": 15540, "bbox": [54, 396, 347, 116], "iscrowd": 0}, {"id": 4522235, "category_id": 16, "area": 418, "bbox": [300, 301, 23, 25], "iscrowd": 0}, {"id": 6226940, "category_id": 16, "area": 10060, "bbox": [373, 363, 197, 149], "iscrowd": 0}, {"id": 7146721, "category_id": 16, "area": 1178, "bbox": [489, 492, 112, 20], "iscrowd": 0}, {"id": 3802623, "category_id": 16, "area": 5497, "bbox": [536, 329, 135, 149], "iscrowd": 0}, {"id": 6098163, "category_id": 16, "area": 3439, "bbox": [613, 449, 69, 63], "iscrowd": 0}, {"id": 7348197, "category_id": 16, "area": 2860, "bbox": [167, 288, 140, 67], "iscrowd": 0}, {"id": 7349503, "category_id": 16, "area": 4765, "bbox": [286, 316, 156, 86], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 1526, "bbox": [44, 157, 30, 95], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 303, "bbox": [48, 252, 25, 15], "iscrowd": 0}, {"id": 16357, "category_id": 20, "area": 182, "bbox": [15, 260, 7, 29], "iscrowd": 0}, {"id": 22222, "category_id": 20, "area": 343, "bbox": [30, 266, 21, 21], "iscrowd": 0}, {"id": 22749, "category_id": 20, "area": 1395, "bbox": [51, 269, 31, 51], "iscrowd": 0}, {"id": 1005761, "category_id": 20, "area": 257, "bbox": [85, 251, 22, 16], "iscrowd": 0}, {"id": 23225, "category_id": 20, "area": 252, "bbox": [72, 253, 18, 18], "iscrowd": 0}, {"id": 666842, "category_id": 20, "area": 366, "bbox": [82, 268, 25, 19], "iscrowd": 0}, {"id": 22454, "category_id": 20, "area": 169, "bbox": [112, 252, 22, 21], "iscrowd": 0}, {"id": 345801, "category_id": 20, "area": 440, "bbox": [107, 260, 24, 21], "iscrowd": 0}, {"id": 12238, "category_id": 20, "area": 268, "bbox": [145, 256, 27, 20], "iscrowd": 0}, {"id": 1782214, "category_id": 20, "area": 1642, "bbox": [131, 263, 34, 72], "iscrowd": 0}, {"id": 410342, "category_id": 20, "area": 203, "bbox": [180, 259, 27, 13], "iscrowd": 0}, {"id": 211167, "category_id": 20, "area": 646, "bbox": [179, 268, 29, 26], "iscrowd": 0}, {"id": 16847, "category_id": 20, "area": 245, "bbox": [225, 264, 26, 13], "iscrowd": 0}, {"id": 939744, "category_id": 20, "area": 1852, "bbox": [217, 274, 37, 78], "iscrowd": 0}, {"id": 14299, "category_id": 20, "area": 1708, "bbox": [42, 315, 55, 45], "iscrowd": 0}, {"id": 1334211, "category_id": 20, "area": 3628, "bbox": [142, 326, 54, 92], "iscrowd": 0}, {"id": 144302, "category_id": 20, "area": 3024, "bbox": [197, 347, 66, 59], "iscrowd": 0}, {"id": 19129, "category_id": 20, "area": 3999, "bbox": [76, 362, 79, 69], "iscrowd": 0}, {"id": 2173161, "category_id": 20, "area": 8966, "bbox": [172, 395, 85, 117], "iscrowd": 0}, {"id": 1395375, "category_id": 20, "area": 8861, "bbox": [300, 373, 75, 138], "iscrowd": 0}, {"id": 1583846, "category_id": 20, "area": 1957, "bbox": [370, 325, 47, 53], "iscrowd": 0}, {"id": 1135051, "category_id": 20, "area": 4453, "bbox": [487, 343, 54, 155], "iscrowd": 0}, {"id": 1981406, "category_id": 20, "area": 5947, "bbox": [431, 422, 84, 90], "iscrowd": 0}, {"id": 10704, "category_id": 20, "area": 840, "bbox": [566, 297, 31, 39], "iscrowd": 0}, {"id": 1069791, "category_id": 20, "area": 766, "bbox": [668, 312, 14, 85], "iscrowd": 0}, {"id": 22472, "category_id": 20, "area": 3854, "bbox": [567, 315, 93, 155], "iscrowd": 0}, {"id": 24263, "category_id": 20, "area": 2933, "bbox": [631, 378, 48, 83], "iscrowd": 0}, {"id": 871620, "category_id": 20, "area": 1969, "bbox": [252, 268, 45, 96], "iscrowd": 0}, {"id": 1781979, "category_id": 20, "area": 907, "bbox": [318, 288, 37, 33], "iscrowd": 0}, {"id": 14562, "category_id": 20, "area": 1215, "bbox": [391, 297, 36, 66], "iscrowd": 0}, {"id": 11724, "category_id": 20, "area": 1162, "bbox": [516, 304, 33, 42], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 3050, "bbox": [168, 155, 44, 80], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1021, "bbox": [259, 98, 62, 71], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 4209, "bbox": [0, 110, 20, 319], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 28764, "bbox": [331, 108, 208, 263], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 490, "bbox": [65, 340, 32, 23], "iscrowd": 0}, {"id": 228, "category_id": 67, "area": 295, "bbox": [405, 363, 27, 15], "iscrowd": 0}, {"id": 4863, "category_id": 67, "area": 139, "bbox": [638, 307, 20, 10], "iscrowd": 0}, {"id": 3307, "category_id": 67, "area": 147, "bbox": [332, 313, 19, 10], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 319, "bbox": [186, 125, 32, 11], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 338, "bbox": [393, 245, 38, 15], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 357, "bbox": [219, 186, 22, 33], "iscrowd": 0}, {"id": 16071936, "category_id": 135, "area": 236, "bbox": [136, 187, 20, 29], "iscrowd": 0}, {"id": 16723200, "category_id": 135, "area": 272, "bbox": [661, 169, 21, 36], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 105, "bbox": [413, 376, 12, 11], "iscrowd": 0}, {"id": 14024477, "category_id": 136, "area": 64, "bbox": [338, 322, 9, 8], "iscrowd": 0}, {"id": 12763673, "category_id": 148, "area": 211, "bbox": [159, 409, 14, 31], "iscrowd": 0}, {"id": 13150988, "category_id": 148, "area": 263, "bbox": [139, 415, 15, 31], "iscrowd": 0}, {"id": 14728704, "category_id": 148, "area": 346, "bbox": [152, 419, 16, 35], "iscrowd": 0}, {"id": 13480704, "category_id": 148, "area": 67, "bbox": [454, 357, 13, 6], "iscrowd": 0}, {"id": 12305966, "category_id": 148, "area": 156, "bbox": [455, 363, 12, 23], "iscrowd": 0}, {"id": 14466615, "category_id": 148, "area": 132, "bbox": [578, 327, 12, 23], "iscrowd": 0}, {"id": 10791427, "category_id": 148, "area": 131, "bbox": [587, 332, 12, 20], "iscrowd": 0}, {"id": 14271232, "category_id": 148, "area": 109, "bbox": [596, 334, 11, 19], "iscrowd": 0}, {"id": 11711500, "category_id": 148, "area": 263, "bbox": [261, 388, 17, 32], "iscrowd": 0}, {"id": 12765187, "category_id": 148, "area": 312, "bbox": [269, 397, 17, 33], "iscrowd": 0}, {"id": 14003490, "category_id": 148, "area": 287, "bbox": [286, 397, 15, 30], "iscrowd": 0}, {"id": 13288727, "category_id": 148, "area": 134, "bbox": [570, 331, 11, 20], "iscrowd": 0}, {"id": 13417987, "category_id": 148, "area": 154, "bbox": [117, 339, 15, 20], "iscrowd": 0}, {"id": 14533125, "category_id": 148, "area": 122, "bbox": [108, 344, 12, 20], "iscrowd": 0}, {"id": 10987054, "category_id": 148, "area": 79, "bbox": [102, 345, 9, 18], "iscrowd": 0}, {"id": 14268695, "category_id": 148, "area": 186, "bbox": [439, 359, 13, 24], "iscrowd": 0}, {"id": 13350660, "category_id": 148, "area": 162, "bbox": [466, 360, 12, 24], "iscrowd": 0}, {"id": 14273065, "category_id": 148, "area": 91, "bbox": [374, 311, 9, 17], "iscrowd": 0}]}, {"image_id": "ADE_val_00001962", "file_name": "ADE_val_00001962.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 46806, "bbox": [0, 0, 683, 342], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 26810, "bbox": [86, 0, 174, 258], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 25654, "bbox": [134, 248, 297, 222], "iscrowd": 0}, {"id": 16257774, "category_id": 11, "area": 21382, "bbox": [0, 0, 155, 148], "iscrowd": 0}, {"id": 16719840, "category_id": 11, "area": 24421, "bbox": [324, 0, 193, 132], "iscrowd": 0}, {"id": 15342291, "category_id": 11, "area": 8202, "bbox": [517, 0, 166, 51], "iscrowd": 0}, {"id": 16715255, "category_id": 11, "area": 15381, "bbox": [431, 249, 70, 231], "iscrowd": 0}, {"id": 16753408, "category_id": 48, "area": 6841, "bbox": [171, 252, 217, 66], "iscrowd": 0}, {"id": 65331, "category_id": 72, "area": 55267, "bbox": [499, 168, 184, 340], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 952, "bbox": [260, 194, 26, 59], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 17008, "bbox": [512, 48, 171, 102], "iscrowd": 0}, {"id": 65494, "category_id": 130, "area": 6894, "bbox": [174, 346, 132, 103], "iscrowd": 0}, {"id": 12123904, "category_id": 143, "area": 2758, "bbox": [183, 264, 88, 44], "iscrowd": 0}]}, {"image_id": "ADE_val_00001963", "file_name": "ADE_val_00001963.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 30010, "bbox": [0, 0, 682, 437], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 16338, "bbox": [126, 0, 472, 39], "iscrowd": 0}, {"id": 15401215, "category_id": 125, "area": 255423, "bbox": [13, 51, 655, 398], "iscrowd": 0}]}, {"image_id": "ADE_val_00001964", "file_name": "ADE_val_00001964.png", "segments_info": [{"id": 15075081, "category_id": 27, "area": 55260, "bbox": [2, 1, 508, 305], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 2297, "bbox": [125, 487, 82, 107], "iscrowd": 0}]}, {"image_id": "ADE_val_00001965", "file_name": "ADE_val_00001965.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 52387, "bbox": [2, 67, 606, 301], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 60685, "bbox": [0, 359, 722, 153], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 54106, "bbox": [2, 0, 719, 89], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 22421, "bbox": [0, 123, 140, 175], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 17407, "bbox": [548, 281, 174, 198], "iscrowd": 0}, {"id": 16212247, "category_id": 24, "area": 12610, "bbox": [0, 285, 206, 121], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 25895, "bbox": [192, 109, 111, 246], "iscrowd": 0}, {"id": 6029823, "category_id": 25, "area": 21709, "bbox": [500, 111, 107, 242], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 5278, "bbox": [360, 144, 82, 82], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 1038, "bbox": [561, 227, 53, 74], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2105, "bbox": [577, 292, 63, 47], "iscrowd": 0}, {"id": 569343, "category_id": 40, "area": 1863, "bbox": [653, 304, 59, 66], "iscrowd": 0}, {"id": 57319, "category_id": 40, "area": 1726, "bbox": [657, 330, 65, 43], "iscrowd": 0}, {"id": 1362943, "category_id": 40, "area": 1882, "bbox": [27, 290, 52, 51], "iscrowd": 0}, {"id": 47103, "category_id": 40, "area": 1410, "bbox": [1, 293, 37, 53], "iscrowd": 0}, {"id": 1376000, "category_id": 42, "area": 1608, "bbox": [196, 349, 49, 40], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 22563, "bbox": [310, 227, 189, 139], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 582, "bbox": [476, 314, 40, 24], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 72, "bbox": [229, 61, 15, 6], "iscrowd": 0}, {"id": 42735, "category_id": 83, "area": 82, "bbox": [301, 48, 16, 7], "iscrowd": 0}, {"id": 1034740, "category_id": 83, "area": 61, "bbox": [401, 62, 13, 7], "iscrowd": 0}, {"id": 38114, "category_id": 83, "area": 99, "bbox": [502, 50, 16, 8], "iscrowd": 0}, {"id": 37372, "category_id": 83, "area": 76, "bbox": [569, 64, 14, 7], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 1980, "bbox": [470, 345, 66, 67], "iscrowd": 0}, {"id": 37887, "category_id": 98, "area": 5916, "bbox": [488, 368, 84, 80], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 2715, "bbox": [691, 385, 31, 113], "iscrowd": 0}, {"id": 10682623, "category_id": 120, "area": 379, "bbox": [536, 358, 22, 19], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 150, "bbox": [490, 334, 12, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001966", "file_name": "ADE_val_00001966.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 82158, "bbox": [1, 1, 767, 510], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 17820, "bbox": [196, 321, 468, 191], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 95118, "bbox": [1, 1, 684, 172], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 21427, "bbox": [208, 357, 234, 145], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 578, "bbox": [657, 257, 12, 91], "iscrowd": 0}, {"id": 13752046, "category_id": 9, "area": 5134, "bbox": [171, 232, 104, 60], "iscrowd": 0}, {"id": 16713184, "category_id": 11, "area": 6395, "bbox": [276, 226, 79, 98], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 520, "bbox": [612, 257, 14, 41], "iscrowd": 0}, {"id": 17892, "category_id": 19, "area": 797, "bbox": [625, 257, 23, 45], "iscrowd": 0}, {"id": 1064191, "category_id": 19, "area": 2326, "bbox": [655, 257, 34, 237], "iscrowd": 0}, {"id": 16127, "category_id": 19, "area": 1997, "bbox": [131, 215, 41, 54], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 14366, "bbox": [2, 143, 123, 132], "iscrowd": 0}, {"id": 1450999, "category_id": 23, "area": 4572, "bbox": [389, 183, 90, 53], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 19433, "bbox": [1, 267, 248, 133], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 29899, "bbox": [429, 298, 219, 209], "iscrowd": 0}, {"id": 12903970, "category_id": 31, "area": 29968, "bbox": [1, 337, 217, 174], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 257, "bbox": [295, 193, 17, 33], "iscrowd": 0}, {"id": 65499, "category_id": 37, "area": 19567, "bbox": [577, 99, 168, 280], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1347, "bbox": [146, 294, 55, 40], "iscrowd": 0}, {"id": 2218751, "category_id": 40, "area": 977, "bbox": [172, 282, 47, 47], "iscrowd": 0}, {"id": 1487871, "category_id": 40, "area": 886, "bbox": [0, 300, 58, 39], "iscrowd": 0}, {"id": 643582, "category_id": 40, "area": 512, "bbox": [16, 324, 54, 30], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 6917, "bbox": [269, 321, 145, 109], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 354, "bbox": [348, 304, 31, 18], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 3687, "bbox": [504, 260, 89, 55], "iscrowd": 0}, {"id": 39423, "category_id": 98, "area": 1548, "bbox": [243, 304, 44, 43], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 51, "bbox": [343, 156, 7, 10], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 201, "bbox": [420, 138, 12, 24], "iscrowd": 0}, {"id": 14089987, "category_id": 136, "area": 161, "bbox": [355, 318, 15, 13], "iscrowd": 0}]}, {"image_id": "ADE_val_00001967", "file_name": "ADE_val_00001967.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 96696, "bbox": [0, 1, 708, 354], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 10774, "bbox": [121, 350, 554, 162], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 30391, "bbox": [86, 68, 604, 245], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 30469, "bbox": [144, 384, 529, 128], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 5419, "bbox": [102, 310, 139, 131], "iscrowd": 0}, {"id": 7143676, "category_id": 16, "area": 4055, "bbox": [592, 310, 90, 127], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 4659, "bbox": [1, 14, 26, 232], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 948, "bbox": [149, 294, 35, 42], "iscrowd": 0}, {"id": 3934947, "category_id": 23, "area": 1127, "bbox": [622, 286, 41, 34], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 11254, "bbox": [625, 308, 84, 203], "iscrowd": 0}, {"id": 16272155, "category_id": 24, "area": 26281, "bbox": [0, 246, 191, 266], "iscrowd": 0}, {"id": 14474460, "category_id": 28, "area": 60906, "bbox": [249, 7, 272, 254], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 7346, "bbox": [269, 214, 111, 170], "iscrowd": 0}, {"id": 14614295, "category_id": 31, "area": 8569, "bbox": [433, 215, 117, 184], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 5599, "bbox": [78, 172, 82, 157], "iscrowd": 0}, {"id": 1048539, "category_id": 37, "area": 3743, "bbox": [657, 167, 52, 150], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3372, "bbox": [282, 247, 69, 66], "iscrowd": 0}, {"id": 42735, "category_id": 40, "area": 3591, "bbox": [467, 248, 68, 68], "iscrowd": 0}, {"id": 440063, "category_id": 40, "area": 2856, "bbox": [33, 297, 94, 77], "iscrowd": 0}, {"id": 42993, "category_id": 40, "area": 3842, "bbox": [19, 307, 73, 103], "iscrowd": 0}, {"id": 2021375, "category_id": 40, "area": 3236, "bbox": [1, 320, 47, 102], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 24181, "bbox": [232, 382, 266, 130], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 3217, "bbox": [3, 144, 86, 103], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 2005, "bbox": [568, 313, 55, 64], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 741, "bbox": [22, 229, 36, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00001968", "file_name": "ADE_val_00001968.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 81663, "bbox": [1, 0, 682, 333], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 65422, "bbox": [0, 248, 683, 264], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 1067, "bbox": [1, 1, 214, 9], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 1214, "bbox": [390, 57, 88, 113], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 33771, "bbox": [236, 335, 344, 176], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 2178, "bbox": [2, 244, 79, 72], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 4014, "bbox": [352, 125, 91, 79], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 21559, "bbox": [22, 49, 136, 211], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2725, "bbox": [360, 242, 76, 45], "iscrowd": 0}, {"id": 6488319, "category_id": 16, "area": 1600, "bbox": [431, 230, 68, 83], "iscrowd": 0}, {"id": 4136191, "category_id": 16, "area": 1203, "bbox": [632, 397, 49, 57], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 7392, "bbox": [355, 31, 98, 106], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 7298, "bbox": [204, 57, 103, 82], "iscrowd": 0}, {"id": 4391423, "category_id": 23, "area": 10235, "bbox": [582, 119, 100, 155], "iscrowd": 0}, {"id": 3676671, "category_id": 23, "area": 554, "bbox": [3, 131, 29, 23], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 28042, "bbox": [454, 227, 228, 248], "iscrowd": 0}, {"id": 15097344, "category_id": 24, "area": 22456, "bbox": [4, 233, 192, 196], "iscrowd": 0}, {"id": 4655103, "category_id": 25, "area": 5124, "bbox": [1, 102, 52, 205], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2434, "bbox": [460, 148, 55, 93], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 1644, "bbox": [599, 329, 56, 63], "iscrowd": 0}, {"id": 1296614, "category_id": 40, "area": 2078, "bbox": [88, 241, 57, 56], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 15140, "bbox": [174, 130, 163, 133], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 7785, "bbox": [381, 309, 136, 145], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 1649, "bbox": [164, 195, 58, 45], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 394, "bbox": [25, 200, 18, 27], "iscrowd": 0}, {"id": 48635, "category_id": 68, "area": 967, "bbox": [1, 157, 36, 38], "iscrowd": 0}, {"id": 42472, "category_id": 68, "area": 768, "bbox": [427, 343, 45, 26], "iscrowd": 0}, {"id": 34798, "category_id": 68, "area": 354, "bbox": [467, 423, 31, 15], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 5084, "bbox": [358, 179, 84, 64], "iscrowd": 0}, {"id": 720640, "category_id": 99, "area": 215, "bbox": [252, 119, 12, 22], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 632, "bbox": [402, 159, 45, 24], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 922, "bbox": [181, 229, 27, 50], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 4365, "bbox": [269, 1, 250, 49], "iscrowd": 0}]}, {"image_id": "ADE_val_00001969", "file_name": "ADE_val_00001969.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 84315, "bbox": [1, 0, 681, 414], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 12891, "bbox": [0, 395, 682, 117], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 14604, "bbox": [0, 451, 594, 60], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 45117, "bbox": [252, 27, 399, 221], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 6937, "bbox": [482, 298, 159, 85], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 2179, "bbox": [160, 258, 121, 73], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 51043, "bbox": [230, 219, 405, 242], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 11525, "bbox": [599, 48, 84, 409], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 3563, "bbox": [273, 261, 106, 54], "iscrowd": 0}, {"id": 985850, "category_id": 50, "area": 38760, "bbox": [0, 132, 229, 324], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 54105, "bbox": [0, 328, 462, 184], "iscrowd": 0}, {"id": 255, "category_id": 67, "area": 7784, "bbox": [402, 40, 106, 187], "iscrowd": 0}, {"id": 12779264, "category_id": 90, "area": 5224, "bbox": [2, 8, 46, 121], "iscrowd": 0}, {"id": 13434624, "category_id": 136, "area": 1253, "bbox": [208, 224, 32, 48], "iscrowd": 0}, {"id": 11991324, "category_id": 136, "area": 917, "bbox": [438, 182, 36, 45], "iscrowd": 0}]}, {"image_id": "ADE_val_00001970", "file_name": "ADE_val_00001970.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 60694, "bbox": [161, 0, 522, 221], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 42822, "bbox": [0, 232, 682, 280], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 12562, "bbox": [201, 3, 104, 184], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 25019, "bbox": [0, 0, 167, 261], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 3878, "bbox": [259, 167, 143, 118], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 74855, "bbox": [322, 120, 361, 320], "iscrowd": 0}, {"id": 14089992, "category_id": 31, "area": 41107, "bbox": [0, 137, 270, 237], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 5814, "bbox": [312, 51, 80, 124], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 71999, "bbox": [124, 271, 456, 240], "iscrowd": 0}, {"id": 41983, "category_id": 68, "area": 2201, "bbox": [395, 367, 64, 48], "iscrowd": 0}, {"id": 65372, "category_id": 113, "area": 1126, "bbox": [286, 204, 40, 41], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 359, "bbox": [227, 178, 41, 25], "iscrowd": 0}]}, {"image_id": "ADE_val_00001971", "file_name": "ADE_val_00001971.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 92264, "bbox": [0, 0, 684, 408], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 16424, "bbox": [150, 345, 534, 167], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 19775, "bbox": [0, 0, 557, 65], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 8449, "bbox": [322, 166, 203, 149], "iscrowd": 0}, {"id": 6031871, "category_id": 29, "area": 37521, "bbox": [175, 371, 460, 141], "iscrowd": 0}, {"id": 16727296, "category_id": 64, "area": 3574, "bbox": [76, 90, 306, 34], "iscrowd": 0}, {"id": 16711700, "category_id": 132, "area": 9027, "bbox": [108, 417, 112, 93], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 60840, "bbox": [65, 80, 330, 232], "iscrowd": 0}, {"id": 5375743, "category_id": 16, "area": 1000, "bbox": [502, 305, 71, 31], "iscrowd": 0}, {"id": 4849893, "category_id": 16, "area": 1283, "bbox": [26, 316, 72, 29], "iscrowd": 0}, {"id": 472063, "category_id": 19, "area": 20587, "bbox": [51, 22, 360, 94], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 6874, "bbox": [374, 269, 129, 117], "iscrowd": 0}, {"id": 150215, "category_id": 20, "area": 12507, "bbox": [499, 295, 180, 144], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 10757, "bbox": [566, 111, 118, 100], "iscrowd": 0}, {"id": 16737803, "category_id": 24, "area": 23917, "bbox": [0, 306, 243, 205], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 2608, "bbox": [0, 216, 51, 118], "iscrowd": 0}, {"id": 508671, "category_id": 40, "area": 2247, "bbox": [407, 281, 70, 47], "iscrowd": 0}, {"id": 1495039, "category_id": 40, "area": 2633, "bbox": [557, 307, 82, 58], "iscrowd": 0}, {"id": 56319, "category_id": 40, "area": 755, "bbox": [15, 326, 57, 50], "iscrowd": 0}, {"id": 46847, "category_id": 40, "area": 1533, "bbox": [42, 368, 72, 80], "iscrowd": 0}, {"id": 7405312, "category_id": 65, "area": 6509, "bbox": [282, 342, 143, 109], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 352, "bbox": [351, 312, 22, 24], "iscrowd": 0}, {"id": 16722176, "category_id": 135, "area": 2753, "bbox": [492, 93, 52, 102], "iscrowd": 0}]}, {"image_id": "ADE_val_00001972", "file_name": "ADE_val_00001972.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 50653, "bbox": [0, 0, 763, 80], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 295461, "bbox": [0, 117, 763, 392], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 9615, "bbox": [0, 43, 763, 38], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 30834, "bbox": [2, 79, 761, 47], "iscrowd": 0}]}, {"image_id": "ADE_val_00001973", "file_name": "ADE_val_00001973.png", "segments_info": [{"id": 9240463, "category_id": 17, "area": 63393, "bbox": [0, 1, 256, 254], "iscrowd": 0}]}, {"image_id": "ADE_val_00001974", "file_name": "ADE_val_00001974.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 11636, "bbox": [2, 1, 254, 74], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 52876, "bbox": [2, 33, 254, 223], "iscrowd": 0}]}, {"image_id": "ADE_val_00001975", "file_name": "ADE_val_00001975.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 7261, "bbox": [2, 1, 254, 76], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 17753, "bbox": [2, 155, 254, 101], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 39341, "bbox": [0, 9, 256, 238], "iscrowd": 0}]}, {"image_id": "ADE_val_00001976", "file_name": "ADE_val_00001976.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 295175, "bbox": [0, 1, 766, 436], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 29986, "bbox": [185, 10, 183, 423], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 38577, "bbox": [1, 456, 767, 55], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 19458, "bbox": [1, 420, 767, 45], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 336, "bbox": [420, 316, 16, 30], "iscrowd": 0}, {"id": 16727040, "category_id": 88, "area": 267, "bbox": [302, 321, 17, 30], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 1027, "bbox": [379, 408, 32, 44], "iscrowd": 0}, {"id": 15401104, "category_id": 117, "area": 953, "bbox": [431, 402, 24, 56], "iscrowd": 0}, {"id": 16716944, "category_id": 117, "area": 1655, "bbox": [482, 407, 53, 49], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 526, "bbox": [352, 174, 17, 68], "iscrowd": 0}, {"id": 16711796, "category_id": 150, "area": 834, "bbox": [324, 199, 31, 62], "iscrowd": 0}, {"id": 14942284, "category_id": 150, "area": 569, "bbox": [368, 191, 21, 77], "iscrowd": 0}]}, {"image_id": "ADE_val_00001977", "file_name": "ADE_val_00001977.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 31211, "bbox": [135, 4, 546, 473], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 13810, "bbox": [398, 0, 269, 82], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 118210, "bbox": [297, 1, 384, 511], "iscrowd": 0}, {"id": 14869730, "category_id": 9, "area": 279, "bbox": [145, 73, 13, 32], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 128315, "bbox": [1, 1, 306, 511], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 1533, "bbox": [165, 316, 53, 40], "iscrowd": 0}, {"id": 12288021, "category_id": 21, "area": 1188, "bbox": [198, 329, 48, 42], "iscrowd": 0}, {"id": 11495949, "category_id": 21, "area": 7135, "bbox": [396, 361, 126, 89], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 10203, "bbox": [115, 119, 133, 258], "iscrowd": 0}, {"id": 272127, "category_id": 39, "area": 33624, "bbox": [318, 134, 362, 353], "iscrowd": 0}]}, {"image_id": "ADE_val_00001978", "file_name": "ADE_val_00001978.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 2845, "bbox": [2, 81, 254, 31], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 24466, "bbox": [2, 1, 254, 100], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 19889, "bbox": [16, 110, 240, 112], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 10700, "bbox": [0, 204, 255, 52], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 5230, "bbox": [2, 111, 137, 104], "iscrowd": 0}]}, {"image_id": "ADE_val_00001979", "file_name": "ADE_val_00001979.png", "segments_info": [{"id": 16442941, "category_id": 22, "area": 280484, "bbox": [2, 1, 679, 509], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 964, "bbox": [281, 486, 102, 23], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 35036, "bbox": [2, 393, 612, 117], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 12676, "bbox": [249, 152, 295, 78], "iscrowd": 0}, {"id": 8651000, "category_id": 127, "area": 14813, "bbox": [197, 255, 235, 108], "iscrowd": 0}]}, {"image_id": "ADE_val_00001980", "file_name": "ADE_val_00001980.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 2185, "bbox": [0, 92, 240, 65], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 2517, "bbox": [0, 141, 240, 35], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 10530, "bbox": [0, 0, 239, 127], "iscrowd": 0}]}, {"image_id": "ADE_val_00001981", "file_name": "ADE_val_00001981.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 131533, "bbox": [2, 0, 598, 337], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 39064, "bbox": [2, 252, 597, 137], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 18465, "bbox": [509, 107, 90, 282], "iscrowd": 0}, {"id": 7995647, "category_id": 127, "area": 42085, "bbox": [177, 52, 238, 295], "iscrowd": 0}]}, {"image_id": "ADE_val_00001982", "file_name": "ADE_val_00001982.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 33906, "bbox": [1, 1, 255, 135], "iscrowd": 0}, {"id": 15075081, "category_id": 27, "area": 27931, "bbox": [1, 133, 255, 115], "iscrowd": 0}, {"id": 1349280, "category_id": 47, "area": 2922, "bbox": [1, 244, 255, 12], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 101, "bbox": [59, 232, 13, 13], "iscrowd": 0}, {"id": 4063358, "category_id": 13, "area": 93, "bbox": [49, 231, 11, 14], "iscrowd": 0}]}, {"image_id": "ADE_val_00001983", "file_name": "ADE_val_00001983.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 89417, "bbox": [2, 1, 769, 338], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 162848, "bbox": [29, 35, 669, 424], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 135912, "bbox": [2, 223, 769, 288], "iscrowd": 0}]}, {"image_id": "ADE_val_00001984", "file_name": "ADE_val_00001984.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 25688, "bbox": [0, 1, 380, 321], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 10766, "bbox": [250, 1, 130, 133], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 24759, "bbox": [2, 249, 377, 131], "iscrowd": 0}]}, {"image_id": "ADE_val_00001985", "file_name": "ADE_val_00001985.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 47087, "bbox": [2, 0, 397, 125], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 9459, "bbox": [0, 109, 399, 78], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 47925, "bbox": [0, 113, 399, 156], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 1885, "bbox": [163, 117, 236, 12], "iscrowd": 0}]}, {"image_id": "ADE_val_00001986", "file_name": "ADE_val_00001986.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 816, "bbox": [2, 266, 37, 35], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 2168, "bbox": [299, 252, 87, 54], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 51550, "bbox": [258, 0, 361, 255], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 152770, "bbox": [0, 0, 683, 345], "iscrowd": 0}, {"id": 522756, "category_id": 10, "area": 75961, "bbox": [0, 297, 683, 215], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 53316, "bbox": [313, 309, 370, 203], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 451, "bbox": [263, 296, 38, 17], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 5031, "bbox": [356, 295, 54, 153], "iscrowd": 0}, {"id": 3281018, "category_id": 13, "area": 8, "bbox": [218, 304, 4, 3], "iscrowd": 0}, {"id": 2563733, "category_id": 13, "area": 321, "bbox": [587, 300, 21, 39], "iscrowd": 0}, {"id": 2162830, "category_id": 13, "area": 293, "bbox": [551, 300, 16, 38], "iscrowd": 0}, {"id": 4852660, "category_id": 13, "area": 216, "bbox": [528, 299, 10, 35], "iscrowd": 0}, {"id": 3343008, "category_id": 13, "area": 132, "bbox": [520, 304, 9, 30], "iscrowd": 0}, {"id": 5311395, "category_id": 13, "area": 240, "bbox": [501, 300, 13, 33], "iscrowd": 0}, {"id": 3540391, "category_id": 13, "area": 157, "bbox": [535, 298, 9, 30], "iscrowd": 0}, {"id": 4530591, "category_id": 13, "area": 140, "bbox": [547, 300, 8, 31], "iscrowd": 0}, {"id": 2949250, "category_id": 13, "area": 110, "bbox": [544, 298, 5, 30], "iscrowd": 0}, {"id": 4133274, "category_id": 13, "area": 123, "bbox": [356, 298, 8, 23], "iscrowd": 0}, {"id": 4325546, "category_id": 13, "area": 89, "bbox": [314, 297, 7, 21], "iscrowd": 0}, {"id": 3410598, "category_id": 13, "area": 79, "bbox": [299, 298, 9, 20], "iscrowd": 0}, {"id": 3671444, "category_id": 13, "area": 75, "bbox": [307, 299, 7, 19], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 243, "bbox": [2, 288, 24, 15], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 519, "bbox": [1, 298, 39, 18], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 396, "bbox": [457, 272, 31, 79], "iscrowd": 0}, {"id": 65474, "category_id": 70, "area": 111, "bbox": [205, 306, 22, 6], "iscrowd": 0}, {"id": 1305018, "category_id": 70, "area": 66, "bbox": [233, 307, 14, 7], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 195, "bbox": [342, 257, 8, 69], "iscrowd": 0}, {"id": 16733440, "category_id": 88, "area": 522, "bbox": [463, 149, 10, 123], "iscrowd": 0}, {"id": 15416576, "category_id": 88, "area": 231, "bbox": [483, 219, 6, 107], "iscrowd": 0}, {"id": 16661248, "category_id": 88, "area": 78, "bbox": [491, 246, 6, 65], "iscrowd": 0}, {"id": 62975, "category_id": 128, "area": 109, "bbox": [587, 315, 10, 23], "iscrowd": 0}]}, {"image_id": "ADE_val_00001987", "file_name": "ADE_val_00001987.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 52393, "bbox": [0, 67, 512, 389], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 100193, "bbox": [0, 454, 512, 316], "iscrowd": 0}, {"id": 5273720, "category_id": 6, "area": 90609, "bbox": [0, 1, 512, 287], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 459, "bbox": [221, 327, 40, 25], "iscrowd": 0}, {"id": 10092288, "category_id": 78, "area": 9391, "bbox": [17, 363, 249, 112], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 7974, "bbox": [325, 279, 63, 137], "iscrowd": 0}, {"id": 214732, "category_id": 20, "area": 1329, "bbox": [405, 368, 38, 44], "iscrowd": 0}, {"id": 12246, "category_id": 20, "area": 1815, "bbox": [450, 368, 47, 48], "iscrowd": 0}, {"id": 10693, "category_id": 20, "area": 1395, "bbox": [231, 357, 55, 69], "iscrowd": 0}, {"id": 1786318, "category_id": 20, "area": 2198, "bbox": [165, 358, 62, 73], "iscrowd": 0}, {"id": 23742, "category_id": 20, "area": 2724, "bbox": [78, 360, 66, 82], "iscrowd": 0}, {"id": 3344127, "category_id": 23, "area": 427, "bbox": [178, 337, 19, 26], "iscrowd": 0}, {"id": 589792, "category_id": 37, "area": 21509, "bbox": [166, 0, 303, 279], "iscrowd": 0}, {"id": 2689279, "category_id": 43, "area": 6722, "bbox": [32, 223, 35, 230], "iscrowd": 0}, {"id": 18431, "category_id": 57, "area": 72199, "bbox": [31, 408, 481, 291], "iscrowd": 0}, {"id": 44543, "category_id": 83, "area": 393, "bbox": [322, 42, 26, 20], "iscrowd": 0}, {"id": 1087468, "category_id": 83, "area": 60, "bbox": [120, 221, 8, 8], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 134, "bbox": [236, 347, 14, 11], "iscrowd": 0}, {"id": 16774400, "category_id": 140, "area": 2830, "bbox": [1, 1, 172, 64], "iscrowd": 0}, {"id": 16774941, "category_id": 140, "area": 4484, "bbox": [379, 17, 132, 157], "iscrowd": 0}]}, {"image_id": "ADE_val_00001988", "file_name": "ADE_val_00001988.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 3288, "bbox": [0, 0, 236, 35], "iscrowd": 0}, {"id": 3289680, "category_id": 4, "area": 4886, "bbox": [0, 240, 236, 27], "iscrowd": 0}, {"id": 3407624, "category_id": 15, "area": 41398, "bbox": [26, 6, 179, 245], "iscrowd": 0}, {"id": 3205144, "category_id": 15, "area": 4945, "bbox": [0, 34, 25, 210], "iscrowd": 0}, {"id": 2549504, "category_id": 15, "area": 6972, "bbox": [203, 15, 33, 233], "iscrowd": 0}]}, {"image_id": "ADE_val_00001989", "file_name": "ADE_val_00001989.png", "segments_info": [{"id": 522756, "category_id": 10, "area": 164634, "bbox": [0, 0, 799, 420], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 4924, "bbox": [310, 101, 73, 156], "iscrowd": 0}]}, {"image_id": "ADE_val_00001990", "file_name": "ADE_val_00001990.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 36566, "bbox": [0, 1, 245, 255], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 28252, "bbox": [2, 1, 254, 255], "iscrowd": 0}]}, {"image_id": "ADE_val_00001991", "file_name": "ADE_val_00001991.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 43639, "bbox": [2, 1, 254, 182], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 1550, "bbox": [0, 137, 72, 46], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 2466, "bbox": [133, 217, 123, 39], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 14947, "bbox": [0, 174, 256, 82], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 2097, "bbox": [67, 172, 189, 28], "iscrowd": 0}]}, {"image_id": "ADE_val_00001992", "file_name": "ADE_val_00001992.png", "segments_info": [{"id": 7895220, "category_id": 2, "area": 176816, "bbox": [0, 0, 683, 391], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 32971, "bbox": [381, 0, 173, 282], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 2080, "bbox": [473, 224, 86, 90], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 70190, "bbox": [1, 320, 502, 192], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 35229, "bbox": [1, 314, 682, 198], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 318, "bbox": [639, 341, 29, 14], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 227, "bbox": [500, 302, 11, 33], "iscrowd": 0}, {"id": 5308578, "category_id": 13, "area": 270, "bbox": [518, 299, 13, 36], "iscrowd": 0}, {"id": 2955685, "category_id": 13, "area": 121, "bbox": [513, 302, 9, 28], "iscrowd": 0}, {"id": 2427055, "category_id": 13, "area": 72, "bbox": [527, 301, 7, 28], "iscrowd": 0}, {"id": 4394897, "category_id": 13, "area": 1126, "bbox": [535, 291, 23, 79], "iscrowd": 0}, {"id": 3936925, "category_id": 13, "area": 93, "bbox": [57, 312, 11, 13], "iscrowd": 0}, {"id": 2949260, "category_id": 13, "area": 394, "bbox": [37, 306, 20, 33], "iscrowd": 0}, {"id": 4587648, "category_id": 13, "area": 941, "bbox": [554, 292, 24, 82], "iscrowd": 0}, {"id": 3670183, "category_id": 13, "area": 4807, "bbox": [567, 284, 65, 147], "iscrowd": 0}, {"id": 4260737, "category_id": 13, "area": 68, "bbox": [372, 305, 7, 18], "iscrowd": 0}, {"id": 4194453, "category_id": 13, "area": 69, "bbox": [362, 306, 6, 18], "iscrowd": 0}, {"id": 5506946, "category_id": 13, "area": 16, "bbox": [340, 304, 5, 5], "iscrowd": 0}, {"id": 5046432, "category_id": 13, "area": 37, "bbox": [331, 303, 8, 7], "iscrowd": 0}, {"id": 3474824, "category_id": 13, "area": 33, "bbox": [314, 305, 7, 8], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 6969, "bbox": [18, 322, 155, 63], "iscrowd": 0}, {"id": 12344587, "category_id": 21, "area": 3274, "bbox": [147, 311, 91, 54], "iscrowd": 0}, {"id": 13393421, "category_id": 21, "area": 2861, "bbox": [228, 304, 87, 48], "iscrowd": 0}, {"id": 14120192, "category_id": 21, "area": 500, "bbox": [310, 314, 29, 28], "iscrowd": 0}, {"id": 12080640, "category_id": 21, "area": 555, "bbox": [325, 311, 37, 25], "iscrowd": 0}, {"id": 14897681, "category_id": 21, "area": 281, "bbox": [398, 308, 24, 15], "iscrowd": 0}, {"id": 12088832, "category_id": 21, "area": 229, "bbox": [429, 309, 22, 13], "iscrowd": 0}, {"id": 14973696, "category_id": 21, "area": 70, "bbox": [447, 310, 10, 11], "iscrowd": 0}, {"id": 12084245, "category_id": 21, "area": 26, "bbox": [456, 312, 5, 8], "iscrowd": 0}, {"id": 12805402, "category_id": 21, "area": 281, "bbox": [461, 307, 22, 16], "iscrowd": 0}, {"id": 12284928, "category_id": 21, "area": 88, "bbox": [481, 309, 11, 11], "iscrowd": 0}, {"id": 12485647, "category_id": 21, "area": 20, "bbox": [491, 314, 4, 6], "iscrowd": 0}, {"id": 16056575, "category_id": 81, "area": 159, "bbox": [494, 300, 15, 19], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 52, "bbox": [496, 229, 41, 7], "iscrowd": 0}, {"id": 15098141, "category_id": 88, "area": 1781, "bbox": [625, 59, 41, 106], "iscrowd": 0}, {"id": 16276506, "category_id": 88, "area": 758, "bbox": [592, 141, 26, 70], "iscrowd": 0}, {"id": 16737294, "category_id": 88, "area": 32, "bbox": [437, 285, 4, 23], "iscrowd": 0}, {"id": 16731405, "category_id": 88, "area": 19, "bbox": [449, 292, 3, 13], "iscrowd": 0}, {"id": 16728322, "category_id": 88, "area": 637, "bbox": [219, 225, 18, 102], "iscrowd": 0}, {"id": 16533019, "category_id": 88, "area": 149, "bbox": [352, 250, 8, 65], "iscrowd": 0}, {"id": 16711925, "category_id": 126, "area": 945, "bbox": [634, 350, 33, 38], "iscrowd": 0}, {"id": 16711721, "category_id": 137, "area": 82, "bbox": [452, 269, 8, 11], "iscrowd": 0}, {"id": 16056367, "category_id": 137, "area": 66, "bbox": [476, 268, 6, 12], "iscrowd": 0}, {"id": 16711714, "category_id": 137, "area": 67, "bbox": [514, 283, 5, 19], "iscrowd": 0}, {"id": 16516662, "category_id": 137, "area": 23, "bbox": [409, 294, 4, 11], "iscrowd": 0}, {"id": 65382, "category_id": 149, "area": 145, "bbox": [547, 211, 13, 15], "iscrowd": 0}]}, {"image_id": "ADE_val_00001993", "file_name": "ADE_val_00001993.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 687, "bbox": [7, 309, 29, 26], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 222981, "bbox": [0, 0, 683, 453], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 8840, "bbox": [0, 0, 253, 217], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 14251, "bbox": [0, 309, 481, 194], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 26082, "bbox": [0, 402, 683, 110], "iscrowd": 0}, {"id": 15132390, "category_id": 9, "area": 1637, "bbox": [89, 192, 33, 56], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 123, "bbox": [68, 308, 12, 45], "iscrowd": 0}, {"id": 3279520, "category_id": 13, "area": 386, "bbox": [64, 310, 13, 44], "iscrowd": 0}, {"id": 5049747, "category_id": 13, "area": 4161, "bbox": [557, 326, 50, 142], "iscrowd": 0}, {"id": 2365065, "category_id": 13, "area": 23, "bbox": [24, 303, 6, 6], "iscrowd": 0}, {"id": 4264834, "category_id": 13, "area": 67, "bbox": [275, 315, 8, 9], "iscrowd": 0}, {"id": 5898374, "category_id": 13, "area": 21, "bbox": [15, 302, 5, 6], "iscrowd": 0}, {"id": 3670146, "category_id": 13, "area": 21, "bbox": [32, 302, 4, 7], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 45933, "bbox": [46, 346, 423, 151], "iscrowd": 0}, {"id": 14382360, "category_id": 21, "area": 3694, "bbox": [77, 321, 124, 50], "iscrowd": 0}, {"id": 14635285, "category_id": 21, "area": 1561, "bbox": [32, 310, 102, 39], "iscrowd": 0}, {"id": 11764500, "category_id": 21, "area": 3566, "bbox": [95, 324, 262, 68], "iscrowd": 0}, {"id": 11688448, "category_id": 21, "area": 2920, "bbox": [160, 332, 152, 51], "iscrowd": 0}, {"id": 12084224, "category_id": 21, "area": 23, "bbox": [0, 300, 7, 4], "iscrowd": 0}, {"id": 12541440, "category_id": 21, "area": 77, "bbox": [0, 304, 9, 9], "iscrowd": 0}, {"id": 13860367, "category_id": 21, "area": 30, "bbox": [20, 303, 6, 6], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1216, "bbox": [484, 280, 33, 48], "iscrowd": 0}, {"id": 10162933, "category_id": 44, "area": 252, "bbox": [293, 285, 11, 39], "iscrowd": 0}, {"id": 10560226, "category_id": 44, "area": 852, "bbox": [0, 199, 43, 58], "iscrowd": 0}, {"id": 10226431, "category_id": 44, "area": 2447, "bbox": [471, 229, 167, 32], "iscrowd": 0}, {"id": 9770239, "category_id": 44, "area": 89, "bbox": [163, 279, 5, 43], "iscrowd": 0}, {"id": 4062976, "category_id": 87, "area": 2364, "bbox": [469, 213, 181, 48], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 882, "bbox": [293, 89, 34, 51], "iscrowd": 0}, {"id": 16723456, "category_id": 88, "area": 127, "bbox": [0, 103, 48, 17], "iscrowd": 0}, {"id": 16728832, "category_id": 88, "area": 359, "bbox": [205, 163, 19, 34], "iscrowd": 0}, {"id": 65443, "category_id": 103, "area": 30, "bbox": [0, 295, 6, 7], "iscrowd": 0}, {"id": 65413, "category_id": 124, "area": 1756, "bbox": [372, 200, 66, 42], "iscrowd": 0}, {"id": 16711772, "category_id": 150, "area": 506, "bbox": [252, 108, 19, 93], "iscrowd": 0}, {"id": 16711754, "category_id": 150, "area": 560, "bbox": [238, 121, 16, 94], "iscrowd": 0}]}, {"image_id": "ADE_val_00001994", "file_name": "ADE_val_00001994.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 4546, "bbox": [153, 30, 65, 74], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 21068, "bbox": [46, 0, 636, 44], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3270, "bbox": [0, 0, 558, 105], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 111368, "bbox": [0, 216, 683, 296], "iscrowd": 0}, {"id": 524267, "category_id": 12, "area": 46287, "bbox": [66, 81, 468, 263], "iscrowd": 0}, {"id": 3999126, "category_id": 13, "area": 1029, "bbox": [429, 20, 22, 96], "iscrowd": 0}, {"id": 4920971, "category_id": 13, "area": 1434, "bbox": [355, 20, 27, 88], "iscrowd": 0}, {"id": 5440892, "category_id": 13, "area": 1651, "bbox": [318, 17, 38, 99], "iscrowd": 0}, {"id": 4790447, "category_id": 13, "area": 31617, "bbox": [0, 46, 137, 395], "iscrowd": 0}, {"id": 4522145, "category_id": 13, "area": 595, "bbox": [319, 20, 21, 88], "iscrowd": 0}, {"id": 5177476, "category_id": 13, "area": 2231, "bbox": [437, 20, 41, 100], "iscrowd": 0}, {"id": 3735682, "category_id": 13, "area": 1825, "bbox": [44, 22, 37, 100], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 53168, "bbox": [400, 32, 282, 305], "iscrowd": 0}, {"id": 409087, "category_id": 39, "area": 689, "bbox": [0, 33, 53, 20], "iscrowd": 0}, {"id": 18943, "category_id": 39, "area": 3301, "bbox": [68, 36, 85, 57], "iscrowd": 0}, {"id": 346355, "category_id": 39, "area": 6175, "bbox": [218, 32, 142, 64], "iscrowd": 0}, {"id": 18175, "category_id": 39, "area": 3098, "bbox": [372, 38, 64, 57], "iscrowd": 0}, {"id": 809973, "category_id": 39, "area": 4267, "bbox": [463, 40, 149, 52], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 363, "bbox": [125, 46, 11, 40], "iscrowd": 0}, {"id": 9830649, "category_id": 44, "area": 188, "bbox": [135, 39, 11, 24], "iscrowd": 0}, {"id": 16711843, "category_id": 117, "area": 47772, "bbox": [126, 64, 248, 408], "iscrowd": 0}]}, {"image_id": "ADE_val_00001995", "file_name": "ADE_val_00001995.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 1930, "bbox": [0, 290, 22, 97], "iscrowd": 0}, {"id": 7895220, "category_id": 2, "area": 45778, "bbox": [436, 144, 247, 241], "iscrowd": 0}, {"id": 15132166, "category_id": 3, "area": 133753, "bbox": [0, 1, 682, 289], "iscrowd": 0}, {"id": 9211020, "category_id": 7, "area": 62372, "bbox": [0, 362, 582, 150], "iscrowd": 0}, {"id": 4618360, "category_id": 14, "area": 7743, "bbox": [1, 376, 625, 40], "iscrowd": 0}, {"id": 21247, "category_id": 62, "area": 33419, "bbox": [0, 215, 446, 172], "iscrowd": 0}, {"id": 13133312, "category_id": 21, "area": 2001, "bbox": [279, 351, 47, 47], "iscrowd": 0}, {"id": 14316299, "category_id": 21, "area": 15506, "bbox": [537, 362, 146, 150], "iscrowd": 0}, {"id": 12212480, "category_id": 21, "area": 80, "bbox": [239, 365, 16, 8], "iscrowd": 0}, {"id": 13980183, "category_id": 21, "area": 319, "bbox": [325, 363, 20, 25], "iscrowd": 0}, {"id": 13988608, "category_id": 21, "area": 74, "bbox": [341, 362, 15, 15], "iscrowd": 0}, {"id": 12288256, "category_id": 21, "area": 154, "bbox": [340, 367, 14, 27], "iscrowd": 0}, {"id": 14048282, "category_id": 21, "area": 464, "bbox": [348, 357, 22, 44], "iscrowd": 0}, {"id": 14701568, "category_id": 21, "area": 2834, "bbox": [359, 355, 65, 53], "iscrowd": 0}, {"id": 440575, "category_id": 33, "area": 1741, "bbox": [488, 372, 156, 26], "iscrowd": 0}, {"id": 10028543, "category_id": 44, "area": 1678, "bbox": [116, 91, 44, 43], "iscrowd": 0}, {"id": 11146751, "category_id": 44, "area": 270, "bbox": [236, 266, 15, 18], "iscrowd": 0}, {"id": 11340282, "category_id": 44, "area": 267, "bbox": [348, 266, 15, 19], "iscrowd": 0}, {"id": 9175294, "category_id": 44, "area": 323, "bbox": [584, 284, 32, 13], "iscrowd": 0}, {"id": 11015423, "category_id": 44, "area": 358, "bbox": [607, 254, 19, 30], "iscrowd": 0}, {"id": 8978673, "category_id": 44, "area": 242, "bbox": [295, 264, 15, 18], "iscrowd": 0}, {"id": 11534569, "category_id": 44, "area": 546, "bbox": [619, 296, 15, 96], "iscrowd": 0}, {"id": 9371889, "category_id": 44, "area": 400, "bbox": [22, 326, 27, 28], "iscrowd": 0}, {"id": 16729856, "category_id": 88, "area": 453, "bbox": [615, 72, 39, 121], "iscrowd": 0}, {"id": 16003082, "category_id": 88, "area": 408, "bbox": [654, 164, 27, 46], "iscrowd": 0}, {"id": 16730880, "category_id": 88, "area": 2176, "bbox": [460, 210, 28, 194], "iscrowd": 0}, {"id": 15359232, "category_id": 88, "area": 72, "bbox": [367, 306, 6, 39], "iscrowd": 0}, {"id": 16728064, "category_id": 88, "area": 25, "bbox": [183, 328, 5, 11], "iscrowd": 0}, {"id": 15346195, "category_id": 88, "area": 67, "bbox": [347, 325, 4, 37], "iscrowd": 0}, {"id": 16726784, "category_id": 88, "area": 165, "bbox": [135, 313, 6, 73], "iscrowd": 0}]}, {"image_id": "ADE_val_00001996", "file_name": "ADE_val_00001996.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 1644, "bbox": [214, 0, 106, 36], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 21483, "bbox": [0, 0, 320, 112], "iscrowd": 0}, {"id": 16442941, "category_id": 22, "area": 35713, "bbox": [0, 110, 320, 130], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 17566, "bbox": [0, 33, 319, 117], "iscrowd": 0}]}, {"image_id": "ADE_val_00001997", "file_name": "ADE_val_00001997.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 5142, "bbox": [0, 0, 255, 24], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 11288, "bbox": [2, 155, 253, 100], "iscrowd": 0}, {"id": 9240463, "category_id": 17, "area": 38108, "bbox": [1, 17, 254, 181], "iscrowd": 0}, {"id": 26367, "category_id": 69, "area": 9434, "bbox": [0, 159, 255, 96], "iscrowd": 0}]}, {"image_id": "ADE_val_00001998", "file_name": "ADE_val_00001998.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 19952, "bbox": [0, 0, 256, 89], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 21968, "bbox": [0, 63, 256, 193], "iscrowd": 0}, {"id": 666111, "category_id": 35, "area": 2679, "bbox": [0, 95, 88, 160], "iscrowd": 0}, {"id": 16769024, "category_id": 114, "area": 20387, "bbox": [7, 89, 161, 166], "iscrowd": 0}]}, {"image_id": "ADE_val_00001999", "file_name": "ADE_val_00001999.png", "segments_info": [{"id": 15132166, "category_id": 3, "area": 5622, "bbox": [16, 0, 194, 55], "iscrowd": 0}, {"id": 247812, "category_id": 5, "area": 3300, "bbox": [0, 0, 106, 145], "iscrowd": 0}, {"id": 327628, "category_id": 18, "area": 4374, "bbox": [56, 40, 115, 133], "iscrowd": 0}, {"id": 16769024, "category_id": 114, "area": 24678, "bbox": [1, 18, 208, 238], "iscrowd": 0}]}, {"image_id": "ADE_val_00002000", "file_name": "ADE_val_00002000.png", "segments_info": [{"id": 7895160, "category_id": 1, "area": 14124, "bbox": [50, 38, 125, 142], "iscrowd": 0}, {"id": 65311, "category_id": 52, "area": 19448, "bbox": [172, 37, 179, 135], "iscrowd": 0}, {"id": 57599, "category_id": 54, "area": 1598, "bbox": [135, 193, 54, 46], "iscrowd": 0}]}], "categories": [{"name": "wall", "id": 1, "isthing": 0, "color": [120, 120, 120]}, {"name": "building", "id": 2, "isthing": 0, "color": [180, 120, 120]}, {"name": "sky", "id": 3, "isthing": 0, "color": [6, 230, 230]}, {"name": "floor", "id": 4, "isthing": 0, "color": [80, 50, 50]}, {"name": "tree", "id": 5, "isthing": 0, "color": [4, 200, 3]}, {"name": "ceiling", "id": 6, "isthing": 0, "color": [120, 120, 80]}, {"name": "road, route", "id": 7, "isthing": 0, "color": [140, 140, 140]}, {"name": "bed", "id": 8, "isthing": 1, "color": [204, 5, 255]}, {"name": "window ", "id": 9, "isthing": 1, "color": [230, 230, 230]}, {"name": "grass", "id": 10, "isthing": 0, "color": [4, 250, 7]}, {"name": "cabinet", "id": 11, "isthing": 1, "color": [224, 5, 255]}, {"name": "sidewalk, pavement", "id": 12, "isthing": 0, "color": [235, 255, 7]}, {"name": "person", "id": 13, "isthing": 1, "color": [150, 5, 61]}, {"name": "earth, ground", "id": 14, "isthing": 0, "color": [120, 120, 70]}, {"name": "door", "id": 15, "isthing": 1, "color": [8, 255, 51]}, {"name": "table", "id": 16, "isthing": 1, "color": [255, 6, 82]}, {"name": "mountain, mount", "id": 17, "isthing": 0, "color": [143, 255, 140]}, {"name": "plant", "id": 18, "isthing": 0, "color": [204, 255, 4]}, {"name": "curtain", "id": 19, "isthing": 1, "color": [255, 51, 7]}, {"name": "chair", "id": 20, "isthing": 1, "color": [204, 70, 3]}, {"name": "car", "id": 21, "isthing": 1, "color": [0, 102, 200]}, {"name": "water", "id": 22, "isthing": 0, "color": [61, 230, 250]}, {"name": "painting, picture", "id": 23, "isthing": 1, "color": [255, 6, 51]}, {"name": "sofa", "id": 24, "isthing": 1, "color": [11, 102, 255]}, {"name": "shelf", "id": 25, "isthing": 1, "color": [255, 7, 71]}, {"name": "house", "id": 26, "isthing": 0, "color": [255, 9, 224]}, {"name": "sea", "id": 27, "isthing": 0, "color": [9, 7, 230]}, {"name": "mirror", "id": 28, "isthing": 1, "color": [220, 220, 220]}, {"name": "rug", "id": 29, "isthing": 0, "color": [255, 9, 92]}, {"name": "field", "id": 30, "isthing": 0, "color": [112, 9, 255]}, {"name": "armchair", "id": 31, "isthing": 1, "color": [8, 255, 214]}, {"name": "seat", "id": 32, "isthing": 1, "color": [7, 255, 224]}, {"name": "fence", "id": 33, "isthing": 1, "color": [255, 184, 6]}, {"name": "desk", "id": 34, "isthing": 1, "color": [10, 255, 71]}, {"name": "rock, stone", "id": 35, "isthing": 0, "color": [255, 41, 10]}, {"name": "wardrobe, closet, press", "id": 36, "isthing": 1, "color": [7, 255, 255]}, {"name": "lamp", "id": 37, "isthing": 1, "color": [224, 255, 8]}, {"name": "tub", "id": 38, "isthing": 1, "color": [102, 8, 255]}, {"name": "rail", "id": 39, "isthing": 1, "color": [255, 61, 6]}, {"name": "cushion", "id": 40, "isthing": 1, "color": [255, 194, 7]}, {"name": "base, pedestal, stand", "id": 41, "isthing": 0, "color": [255, 122, 8]}, {"name": "box", "id": 42, "isthing": 1, "color": [0, 255, 20]}, {"name": "column, pillar", "id": 43, "isthing": 1, "color": [255, 8, 41]}, {"name": "signboard, sign", "id": 44, "isthing": 1, "color": [255, 5, 153]}, {"name": "chest of drawers, chest, bureau, dresser", "id": 45, "isthing": 1, "color": [6, 51, 255]}, {"name": "counter", "id": 46, "isthing": 1, "color": [235, 12, 255]}, {"name": "sand", "id": 47, "isthing": 0, "color": [160, 150, 20]}, {"name": "sink", "id": 48, "isthing": 1, "color": [0, 163, 255]}, {"name": "skyscraper", "id": 49, "isthing": 0, "color": [140, 140, 200]}, {"name": "fireplace", "id": 50, "isthing": 1, "color": [250, 10, 15]}, {"name": "refrigerator, icebox", "id": 51, "isthing": 1, "color": [20, 255, 0]}, {"name": "grandstand, covered stand", "id": 52, "isthing": 0, "color": [31, 255, 0]}, {"name": "path", "id": 53, "isthing": 0, "color": [255, 31, 0]}, {"name": "stairs", "id": 54, "isthing": 1, "color": [255, 224, 0]}, {"name": "runway", "id": 55, "isthing": 0, "color": [153, 255, 0]}, {"name": "case, display case, showcase, vitrine", "id": 56, "isthing": 1, "color": [0, 0, 255]}, {"name": "pool table, billiard table, snooker table", "id": 57, "isthing": 1, "color": [255, 71, 0]}, {"name": "pillow", "id": 58, "isthing": 1, "color": [0, 235, 255]}, {"name": "screen door, screen", "id": 59, "isthing": 1, "color": [0, 173, 255]}, {"name": "stairway, staircase", "id": 60, "isthing": 0, "color": [31, 0, 255]}, {"name": "river", "id": 61, "isthing": 0, "color": [11, 200, 200]}, {"name": "bridge, span", "id": 62, "isthing": 0, "color": [255, 82, 0]}, {"name": "bookcase", "id": 63, "isthing": 1, "color": [0, 255, 245]}, {"name": "blind, screen", "id": 64, "isthing": 0, "color": [0, 61, 255]}, {"name": "coffee table", "id": 65, "isthing": 1, "color": [0, 255, 112]}, {"name": "toilet, can, commode, crapper, pot, potty, stool, throne", "id": 66, "isthing": 1, "color": [0, 255, 133]}, {"name": "flower", "id": 67, "isthing": 1, "color": [255, 0, 0]}, {"name": "book", "id": 68, "isthing": 1, "color": [255, 163, 0]}, {"name": "hill", "id": 69, "isthing": 0, "color": [255, 102, 0]}, {"name": "bench", "id": 70, "isthing": 1, "color": [194, 255, 0]}, {"name": "countertop", "id": 71, "isthing": 1, "color": [0, 143, 255]}, {"name": "stove", "id": 72, "isthing": 1, "color": [51, 255, 0]}, {"name": "palm, palm tree", "id": 73, "isthing": 1, "color": [0, 82, 255]}, {"name": "kitchen island", "id": 74, "isthing": 1, "color": [0, 255, 41]}, {"name": "computer", "id": 75, "isthing": 1, "color": [0, 255, 173]}, {"name": "swivel chair", "id": 76, "isthing": 1, "color": [10, 0, 255]}, {"name": "boat", "id": 77, "isthing": 1, "color": [173, 255, 0]}, {"name": "bar", "id": 78, "isthing": 0, "color": [0, 255, 153]}, {"name": "arcade machine", "id": 79, "isthing": 1, "color": [255, 92, 0]}, {"name": "hovel, hut, hutch, shack, shanty", "id": 80, "isthing": 0, "color": [255, 0, 255]}, {"name": "bus", "id": 81, "isthing": 1, "color": [255, 0, 245]}, {"name": "towel", "id": 82, "isthing": 1, "color": [255, 0, 102]}, {"name": "light", "id": 83, "isthing": 1, "color": [255, 173, 0]}, {"name": "truck", "id": 84, "isthing": 1, "color": [255, 0, 20]}, {"name": "tower", "id": 85, "isthing": 0, "color": [255, 184, 184]}, {"name": "chandelier", "id": 86, "isthing": 1, "color": [0, 31, 255]}, {"name": "awning, sunshade, sunblind", "id": 87, "isthing": 1, "color": [0, 255, 61]}, {"name": "street lamp", "id": 88, "isthing": 1, "color": [0, 71, 255]}, {"name": "booth", "id": 89, "isthing": 1, "color": [255, 0, 204]}, {"name": "tv", "id": 90, "isthing": 1, "color": [0, 255, 194]}, {"name": "plane", "id": 91, "isthing": 1, "color": [0, 255, 82]}, {"name": "dirt track", "id": 92, "isthing": 0, "color": [0, 10, 255]}, {"name": "clothes", "id": 93, "isthing": 1, "color": [0, 112, 255]}, {"name": "pole", "id": 94, "isthing": 1, "color": [51, 0, 255]}, {"name": "land, ground, soil", "id": 95, "isthing": 0, "color": [0, 194, 255]}, {"name": "bannister, banister, balustrade, balusters, handrail", "id": 96, "isthing": 1, "color": [0, 122, 255]}, {"name": "escalator, moving staircase, moving stairway", "id": 97, "isthing": 0, "color": [0, 255, 163]}, {"name": "ottoman, pouf, pouffe, puff, hassock", "id": 98, "isthing": 1, "color": [255, 153, 0]}, {"name": "bottle", "id": 99, "isthing": 1, "color": [0, 255, 10]}, {"name": "buffet, counter, sideboard", "id": 100, "isthing": 0, "color": [255, 112, 0]}, {"name": "poster, posting, placard, notice, bill, card", "id": 101, "isthing": 0, "color": [143, 255, 0]}, {"name": "stage", "id": 102, "isthing": 0, "color": [82, 0, 255]}, {"name": "van", "id": 103, "isthing": 1, "color": [163, 255, 0]}, {"name": "ship", "id": 104, "isthing": 1, "color": [255, 235, 0]}, {"name": "fountain", "id": 105, "isthing": 1, "color": [8, 184, 170]}, {"name": "conveyer belt, conveyor belt, conveyer, conveyor, transporter", "id": 106, "isthing": 0, "color": [133, 0, 255]}, {"name": "canopy", "id": 107, "isthing": 0, "color": [0, 255, 92]}, {"name": "washer, automatic washer, washing machine", "id": 108, "isthing": 1, "color": [184, 0, 255]}, {"name": "plaything, toy", "id": 109, "isthing": 1, "color": [255, 0, 31]}, {"name": "pool", "id": 110, "isthing": 0, "color": [0, 184, 255]}, {"name": "stool", "id": 111, "isthing": 1, "color": [0, 214, 255]}, {"name": "barrel, cask", "id": 112, "isthing": 1, "color": [255, 0, 112]}, {"name": "basket, handbasket", "id": 113, "isthing": 1, "color": [92, 255, 0]}, {"name": "falls", "id": 114, "isthing": 0, "color": [0, 224, 255]}, {"name": "tent", "id": 115, "isthing": 0, "color": [112, 224, 255]}, {"name": "bag", "id": 116, "isthing": 1, "color": [70, 184, 160]}, {"name": "minibike, motorbike", "id": 117, "isthing": 1, "color": [163, 0, 255]}, {"name": "cradle", "id": 118, "isthing": 0, "color": [153, 0, 255]}, {"name": "oven", "id": 119, "isthing": 1, "color": [71, 255, 0]}, {"name": "ball", "id": 120, "isthing": 1, "color": [255, 0, 163]}, {"name": "food, solid food", "id": 121, "isthing": 1, "color": [255, 204, 0]}, {"name": "step, stair", "id": 122, "isthing": 1, "color": [255, 0, 143]}, {"name": "tank, storage tank", "id": 123, "isthing": 0, "color": [0, 255, 235]}, {"name": "trade name", "id": 124, "isthing": 1, "color": [133, 255, 0]}, {"name": "microwave", "id": 125, "isthing": 1, "color": [255, 0, 235]}, {"name": "pot", "id": 126, "isthing": 1, "color": [245, 0, 255]}, {"name": "animal", "id": 127, "isthing": 1, "color": [255, 0, 122]}, {"name": "bicycle", "id": 128, "isthing": 1, "color": [255, 245, 0]}, {"name": "lake", "id": 129, "isthing": 0, "color": [10, 190, 212]}, {"name": "dishwasher", "id": 130, "isthing": 1, "color": [214, 255, 0]}, {"name": "screen", "id": 131, "isthing": 1, "color": [0, 204, 255]}, {"name": "blanket, cover", "id": 132, "isthing": 0, "color": [20, 0, 255]}, {"name": "sculpture", "id": 133, "isthing": 1, "color": [255, 255, 0]}, {"name": "hood, exhaust hood", "id": 134, "isthing": 1, "color": [0, 153, 255]}, {"name": "sconce", "id": 135, "isthing": 1, "color": [0, 41, 255]}, {"name": "vase", "id": 136, "isthing": 1, "color": [0, 255, 204]}, {"name": "traffic light", "id": 137, "isthing": 1, "color": [41, 0, 255]}, {"name": "tray", "id": 138, "isthing": 1, "color": [41, 255, 0]}, {"name": "trash can", "id": 139, "isthing": 1, "color": [173, 0, 255]}, {"name": "fan", "id": 140, "isthing": 1, "color": [0, 245, 255]}, {"name": "pier", "id": 141, "isthing": 0, "color": [71, 0, 255]}, {"name": "crt screen", "id": 142, "isthing": 0, "color": [122, 0, 255]}, {"name": "plate", "id": 143, "isthing": 1, "color": [0, 255, 184]}, {"name": "monitor", "id": 144, "isthing": 1, "color": [0, 92, 255]}, {"name": "bulletin board", "id": 145, "isthing": 1, "color": [184, 255, 0]}, {"name": "shower", "id": 146, "isthing": 0, "color": [0, 133, 255]}, {"name": "radiator", "id": 147, "isthing": 1, "color": [255, 214, 0]}, {"name": "glass, drinking glass", "id": 148, "isthing": 1, "color": [25, 194, 194]}, {"name": "clock", "id": 149, "isthing": 1, "color": [102, 255, 0]}, {"name": "flag", "id": 150, "isthing": 1, "color": [92, 0, 255]}]} diff --git a/scenic/dataset_lib/coco_dataset/data/cityscapes_panoptic_val.json b/scenic/dataset_lib/coco_dataset/data/cityscapes_panoptic_val.json new file mode 100644 index 0000000000000000000000000000000000000000..9aaa53161c7210f881c5fe0f7c4ae3e94cec9b2b --- /dev/null +++ b/scenic/dataset_lib/coco_dataset/data/cityscapes_panoptic_val.json @@ -0,0 +1,182269 @@ +{ + "annotations": [ + { + "file_name": "frankfurt_000000_000294_gtFine_panoptic.png", + "image_id": "frankfurt_000000_000294", + "segments_info": [ + { + "area": 624611, + "bbox": [ + 6, + 432, + 1909, + 547 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 168735, + "bbox": [ + 6, + 429, + 2037, + 528 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 820275, + "bbox": [ + 6, + 5, + 2037, + 702 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2795, + "bbox": [ + 928, + 392, + 85, + 55 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 24870, + "bbox": [ + 25, + 16, + 1680, + 766 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 12149, + "bbox": [ + 275, + 82, + 1375, + 409 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 42120, + "bbox": [ + 887, + 87, + 199, + 315 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 37067, + "bbox": [ + 801, + 7, + 384, + 265 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 413, + "bbox": [ + 949, + 406, + 17, + 39 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2709, + "bbox": [ + 1157, + 374, + 45, + 99 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1737, + "bbox": [ + 1197, + 379, + 29, + 87 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1962, + "bbox": [ + 1221, + 378, + 35, + 94 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 404, + "bbox": [ + 1006, + 410, + 22, + 25 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 14268, + "bbox": [ + 1022, + 368, + 146, + 136 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 100584, + "bbox": [ + 1251, + 306, + 516, + 270 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_000576_gtFine_panoptic.png", + "image_id": "frankfurt_000000_000576", + "segments_info": [ + { + "area": 724654, + "bbox": [ + 6, + 413, + 2037, + 566 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 40102, + "bbox": [ + 6, + 441, + 1539, + 253 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 539220, + "bbox": [ + 6, + 5, + 2037, + 509 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 14684, + "bbox": [ + 1556, + 301, + 331, + 148 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 11196, + "bbox": [ + 418, + 5, + 1193, + 465 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3691, + "bbox": [ + 1063, + 188, + 559, + 180 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 178722, + "bbox": [ + 32, + 10, + 2011, + 509 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 31328, + "bbox": [ + 699, + 5, + 274, + 158 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1290, + "bbox": [ + 1001, + 393, + 64, + 35 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 598, + "bbox": [ + 1026, + 381, + 22, + 49 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 4114, + "bbox": [ + 1186, + 357, + 62, + 131 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1399, + "bbox": [ + 1053, + 386, + 52, + 49 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 932, + "bbox": [ + 1084, + 389, + 43, + 51 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 777, + "bbox": [ + 1099, + 391, + 33, + 54 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 4875, + "bbox": [ + 1117, + 377, + 85, + 74 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1366, + "bbox": [ + 1236, + 386, + 54, + 87 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 15951, + "bbox": [ + 1244, + 385, + 174, + 113 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 908, + "bbox": [ + 1524, + 405, + 32, + 35 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 84324, + "bbox": [ + 1518, + 351, + 405, + 315 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 82561, + "bbox": [ + 1845, + 214, + 198, + 568 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 533, + "bbox": [ + 916, + 395, + 37, + 25 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2056, + "bbox": [ + 944, + 389, + 56, + 46 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 611, + "bbox": [ + 847, + 384, + 68, + 73 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2243, + "bbox": [ + 859, + 390, + 50, + 91 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 2602, + "bbox": [ + 825, + 388, + 61, + 102 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 11220, + "bbox": [ + 729, + 383, + 131, + 127 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 20370, + "bbox": [ + 606, + 383, + 166, + 175 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 81536, + "bbox": [ + 253, + 365, + 395, + 266 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 102, + "bbox": [ + 1032, + 416, + 9, + 20 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1228, + "bbox": [ + 1205, + 436, + 26, + 68 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_001016_gtFine_panoptic.png", + "image_id": "frankfurt_000000_001016", + "segments_info": [ + { + "area": 705093, + "bbox": [ + 6, + 493, + 2034, + 486 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 48914, + "bbox": [ + 6, + 457, + 1742, + 235 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 765420, + "bbox": [ + 6, + 5, + 2037, + 585 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 10086, + "bbox": [ + 143, + 127, + 1620, + 470 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 10218, + "bbox": [ + 96, + 134, + 377, + 226 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 24456, + "bbox": [ + 602, + 243, + 1441, + 224 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 14291, + "bbox": [ + 714, + 327, + 105, + 245 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 5245, + "bbox": [ + 902, + 364, + 99, + 153 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 20193, + "bbox": [ + 1442, + 302, + 129, + 296 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 17776, + "bbox": [ + 526, + 398, + 319, + 104 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 58974, + "bbox": [ + 117, + 361, + 452, + 186 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 24414, + "bbox": [ + 948, + 392, + 310, + 114 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 19530, + "bbox": [ + 1374, + 388, + 355, + 111 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 138561, + "bbox": [ + 1669, + 330, + 374, + 568 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 5504, + "bbox": [ + 1473, + 470, + 53, + 160 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_001236_gtFine_panoptic.png", + "image_id": "frankfurt_000000_001236", + "segments_info": [ + { + "area": 800019, + "bbox": [ + 6, + 407, + 2037, + 572 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 20405, + "bbox": [ + 6, + 423, + 1580, + 171 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 66702, + "bbox": [ + 205, + 23, + 1584, + 417 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 14731, + "bbox": [ + 55, + 391, + 634, + 111 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 14707, + "bbox": [ + 316, + 16, + 1304, + 441 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8721, + "bbox": [ + 313, + 218, + 1095, + 134 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 6480, + "bbox": [ + 371, + 160, + 1155, + 214 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 538920, + "bbox": [ + 6, + 5, + 2037, + 431 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 803, + "bbox": [ + 549, + 383, + 116, + 17 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 72207, + "bbox": [ + 645, + 5, + 588, + 311 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 775, + "bbox": [ + 923, + 394, + 83, + 25 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 581, + "bbox": [ + 1057, + 386, + 18, + 53 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 351, + "bbox": [ + 1193, + 381, + 11, + 46 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 205, + "bbox": [ + 1206, + 391, + 6, + 46 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 424, + "bbox": [ + 1233, + 382, + 16, + 55 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 638, + "bbox": [ + 1221, + 379, + 17, + 59 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2105, + "bbox": [ + 1273, + 371, + 43, + 91 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1330, + "bbox": [ + 999, + 363, + 24, + 89 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1209, + "bbox": [ + 810, + 378, + 32, + 77 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 2617, + "bbox": [ + 665, + 374, + 63, + 111 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1598, + "bbox": [ + 553, + 381, + 33, + 75 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 844, + "bbox": [ + 504, + 382, + 27, + 71 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 1814, + "bbox": [ + 519, + 380, + 38, + 78 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 391, + "bbox": [ + 970, + 411, + 19, + 42 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 274, + "bbox": [ + 944, + 399, + 22, + 14 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 352, + "bbox": [ + 1037, + 382, + 22, + 31 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 374, + "bbox": [ + 1023, + 399, + 26, + 18 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1551, + "bbox": [ + 1051, + 369, + 53, + 59 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 692, + "bbox": [ + 1082, + 387, + 52, + 53 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1643, + "bbox": [ + 1092, + 390, + 54, + 57 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3893, + "bbox": [ + 1120, + 389, + 80, + 66 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 7234, + "bbox": [ + 1325, + 383, + 102, + 151 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 38735, + "bbox": [ + 1368, + 369, + 275, + 203 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 177399, + "bbox": [ + 1584, + 264, + 459, + 509 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 849, + "bbox": [ + 876, + 389, + 54, + 54 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 379, + "bbox": [ + 811, + 397, + 43, + 34 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 3589, + "bbox": [ + 840, + 392, + 76, + 56 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 2323, + "bbox": [ + 768, + 372, + 45, + 65 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 359, + "bbox": [ + 765, + 397, + 14, + 43 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 4256, + "bbox": [ + 703, + 368, + 67, + 75 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 33817, + "bbox": [ + 156, + 371, + 276, + 166 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 10159, + "bbox": [ + 6, + 373, + 66, + 206 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 398, + "bbox": [ + 958, + 429, + 41, + 25 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_001751_gtFine_panoptic.png", + "image_id": "frankfurt_000000_001751", + "segments_info": [ + { + "area": 796643, + "bbox": [ + 6, + 427, + 2037, + 552 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 50357, + "bbox": [ + 6, + 441, + 2037, + 275 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 406474, + "bbox": [ + 6, + 5, + 2037, + 450 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 13181, + "bbox": [ + 221, + 13, + 1355, + 447 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 223, + "bbox": [ + 780, + 304, + 186, + 84 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 8152, + "bbox": [ + 250, + 141, + 1361, + 235 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 110527, + "bbox": [ + 8, + 5, + 1195, + 441 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 101194, + "bbox": [ + 390, + 5, + 798, + 425 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1722, + "bbox": [ + 847, + 405, + 87, + 23 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 332, + "bbox": [ + 932, + 406, + 18, + 32 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 116, + "bbox": [ + 1105, + 391, + 11, + 17 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 359, + "bbox": [ + 1112, + 393, + 14, + 56 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 392, + "bbox": [ + 594, + 398, + 19, + 42 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1021, + "bbox": [ + 512, + 385, + 23, + 69 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3559, + "bbox": [ + 421, + 367, + 56, + 135 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1495, + "bbox": [ + 928, + 401, + 59, + 39 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 648, + "bbox": [ + 993, + 392, + 43, + 48 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 372, + "bbox": [ + 1000, + 402, + 25, + 42 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 645, + "bbox": [ + 1009, + 399, + 49, + 48 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 579, + "bbox": [ + 1022, + 401, + 36, + 48 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 4231, + "bbox": [ + 1033, + 400, + 89, + 57 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 129079, + "bbox": [ + 1186, + 208, + 424, + 374 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 161, + "bbox": [ + 760, + 394, + 27, + 14 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 249, + "bbox": [ + 743, + 397, + 35, + 17 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 631, + "bbox": [ + 745, + 400, + 25, + 40 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2269, + "bbox": [ + 682, + 390, + 70, + 59 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1891, + "bbox": [ + 673, + 402, + 52, + 55 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 4425, + "bbox": [ + 601, + 399, + 86, + 64 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 4744, + "bbox": [ + 357, + 395, + 87, + 96 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 12252, + "bbox": [ + 247, + 392, + 140, + 117 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 17527, + "bbox": [ + 6, + 382, + 119, + 197 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 4220, + "bbox": [ + 765, + 399, + 85, + 61 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 1571, + "bbox": [ + 965, + 374, + 52, + 59 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 2411, + "bbox": [ + 422, + 428, + 60, + 88 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_002196_gtFine_panoptic.png", + "image_id": "frankfurt_000000_002196", + "segments_info": [ + { + "area": 824262, + "bbox": [ + 6, + 433, + 2037, + 546 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 67963, + "bbox": [ + 6, + 462, + 2037, + 297 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 617602, + "bbox": [ + 6, + 5, + 2037, + 536 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 21558, + "bbox": [ + 216, + 15, + 1824, + 498 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 5441, + "bbox": [ + 195, + 199, + 1831, + 211 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2590, + "bbox": [ + 296, + 216, + 1329, + 165 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 3187, + "bbox": [ + 647, + 257, + 45, + 136 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 98537, + "bbox": [ + 470, + 5, + 553, + 271 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 814, + "bbox": [ + 838, + 415, + 37, + 31 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 2634, + "bbox": [ + 1723, + 408, + 41, + 102 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 5390, + "bbox": [ + 1676, + 349, + 53, + 164 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 4855, + "bbox": [ + 1817, + 363, + 76, + 136 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 3363, + "bbox": [ + 276, + 397, + 43, + 114 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 3064, + "bbox": [ + 229, + 392, + 45, + 113 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 94, + "bbox": [ + 777, + 421, + 11, + 14 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 121, + "bbox": [ + 784, + 421, + 10, + 18 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 105, + "bbox": [ + 791, + 419, + 9, + 20 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1018, + "bbox": [ + 797, + 412, + 36, + 33 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 725, + "bbox": [ + 867, + 414, + 25, + 40 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1959, + "bbox": [ + 888, + 402, + 55, + 55 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 650, + "bbox": [ + 921, + 406, + 46, + 60 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 939, + "bbox": [ + 930, + 408, + 35, + 61 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2529, + "bbox": [ + 950, + 400, + 56, + 75 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 694, + "bbox": [ + 984, + 399, + 41, + 82 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 142886, + "bbox": [ + 990, + 262, + 667, + 280 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 993, + "bbox": [ + 729, + 411, + 41, + 34 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1334, + "bbox": [ + 703, + 411, + 35, + 64 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 6021, + "bbox": [ + 620, + 392, + 93, + 90 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 2987, + "bbox": [ + 468, + 412, + 69, + 75 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 10434, + "bbox": [ + 512, + 402, + 133, + 95 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_002963_gtFine_panoptic.png", + "image_id": "frankfurt_000000_002963", + "segments_info": [ + { + "area": 814517, + "bbox": [ + 6, + 399, + 2037, + 580 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 72979, + "bbox": [ + 1118, + 434, + 925, + 305 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 252533, + "bbox": [ + 6, + 5, + 2037, + 538 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 13354, + "bbox": [ + 1654, + 393, + 257, + 120 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 56786, + "bbox": [ + 529, + 17, + 1289, + 568 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3598, + "bbox": [ + 523, + 159, + 659, + 200 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 7161, + "bbox": [ + 643, + 134, + 859, + 280 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 369077, + "bbox": [ + 548, + 11, + 1495, + 402 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 96049, + "bbox": [ + 536, + 5, + 546, + 259 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 6076, + "bbox": [ + 1086, + 352, + 170, + 61 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 161, + "bbox": [ + 831, + 395, + 19, + 12 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3386, + "bbox": [ + 686, + 385, + 88, + 47 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2476, + "bbox": [ + 773, + 391, + 75, + 42 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1126, + "bbox": [ + 867, + 392, + 46, + 41 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2170, + "bbox": [ + 895, + 387, + 48, + 87 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 12985, + "bbox": [ + 915, + 379, + 143, + 117 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3753, + "bbox": [ + 1323, + 360, + 132, + 75 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 26839, + "bbox": [ + 1434, + 352, + 202, + 181 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 545, + "bbox": [ + 658, + 397, + 17, + 50 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 4598, + "bbox": [ + 587, + 387, + 77, + 75 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 6511, + "bbox": [ + 495, + 396, + 106, + 84 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 13588, + "bbox": [ + 365, + 397, + 156, + 109 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 27456, + "bbox": [ + 140, + 375, + 232, + 176 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 33017, + "bbox": [ + 6, + 388, + 199, + 217 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 1400, + "bbox": [ + 548, + 358, + 42, + 46 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 19833, + "bbox": [ + 1587, + 354, + 160, + 206 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 3386, + "bbox": [ + 1225, + 393, + 100, + 68 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_003025_gtFine_panoptic.png", + "image_id": "frankfurt_000000_003025", + "segments_info": [ + { + "area": 813140, + "bbox": [ + 6, + 407, + 2037, + 572 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 50264, + "bbox": [ + 6, + 410, + 2037, + 182 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 224547, + "bbox": [ + 6, + 5, + 975, + 479 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 57542, + "bbox": [ + 183, + 15, + 1818, + 490 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7857, + "bbox": [ + 360, + 166, + 1212, + 162 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4885, + "bbox": [ + 907, + 227, + 810, + 166 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 322547, + "bbox": [ + 560, + 14, + 1483, + 397 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 106199, + "bbox": [ + 555, + 5, + 760, + 265 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 996, + "bbox": [ + 931, + 375, + 423, + 36 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 978, + "bbox": [ + 388, + 367, + 41, + 60 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 663, + "bbox": [ + 1338, + 374, + 56, + 36 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 708, + "bbox": [ + 1348, + 377, + 49, + 34 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 605, + "bbox": [ + 1366, + 387, + 39, + 27 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3753, + "bbox": [ + 1397, + 342, + 97, + 73 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 10993, + "bbox": [ + 1436, + 363, + 170, + 91 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 646, + "bbox": [ + 1715, + 361, + 64, + 13 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 322, + "bbox": [ + 1677, + 365, + 39, + 10 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 3705, + "bbox": [ + 1871, + 357, + 172, + 69 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1095, + "bbox": [ + 2026, + 383, + 17, + 73 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 289, + "bbox": [ + 564, + 366, + 28, + 13 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1027, + "bbox": [ + 670, + 391, + 37, + 61 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 2483, + "bbox": [ + 638, + 390, + 53, + 72 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2897, + "bbox": [ + 565, + 377, + 89, + 100 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 15176, + "bbox": [ + 462, + 378, + 164, + 116 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 33738, + "bbox": [ + 154, + 384, + 279, + 155 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 3205, + "bbox": [ + 1259, + 354, + 78, + 88 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 114936, + "bbox": [ + 913, + 336, + 420, + 346 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 17301, + "bbox": [ + 715, + 315, + 165, + 123 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 11560, + "bbox": [ + 1593, + 386, + 194, + 133 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_003357_gtFine_panoptic.png", + "image_id": "frankfurt_000000_003357", + "segments_info": [ + { + "area": 751635, + "bbox": [ + 6, + 414, + 2037, + 565 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 59074, + "bbox": [ + 6, + 408, + 2037, + 184 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 206834, + "bbox": [ + 6, + 5, + 994, + 466 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 32054, + "bbox": [ + 55, + 29, + 1988, + 523 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 10757, + "bbox": [ + 292, + 147, + 1352, + 171 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 6559, + "bbox": [ + 979, + 175, + 753, + 166 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 332130, + "bbox": [ + 556, + 15, + 1487, + 419 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 111830, + "bbox": [ + 549, + 5, + 809, + 264 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 763, + "bbox": [ + 1353, + 372, + 44, + 40 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 798, + "bbox": [ + 922, + 365, + 71, + 66 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 798, + "bbox": [ + 1376, + 371, + 66, + 41 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 929, + "bbox": [ + 1384, + 375, + 59, + 37 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 667, + "bbox": [ + 1410, + 384, + 43, + 30 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 5674, + "bbox": [ + 1441, + 332, + 112, + 84 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1343, + "bbox": [ + 1488, + 366, + 56, + 51 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2043, + "bbox": [ + 1527, + 365, + 91, + 51 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2459, + "bbox": [ + 1580, + 367, + 62, + 53 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 682, + "bbox": [ + 1988, + 354, + 55, + 15 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 165308, + "bbox": [ + 917, + 318, + 508, + 417 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 668, + "bbox": [ + 682, + 391, + 32, + 58 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 975, + "bbox": [ + 668, + 391, + 36, + 66 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 3355, + "bbox": [ + 628, + 390, + 61, + 77 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 4406, + "bbox": [ + 560, + 373, + 82, + 113 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 19607, + "bbox": [ + 412, + 375, + 190, + 130 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 50656, + "bbox": [ + 6, + 378, + 345, + 190 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 22680, + "bbox": [ + 733, + 322, + 252, + 109 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + }, + { + "area": 16626, + "bbox": [ + 1748, + 382, + 237, + 165 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_003920_gtFine_panoptic.png", + "image_id": "frankfurt_000000_003920", + "segments_info": [ + { + "area": 782020, + "bbox": [ + 6, + 391, + 2037, + 588 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 149124, + "bbox": [ + 6, + 391, + 2037, + 524 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 291342, + "bbox": [ + 6, + 5, + 2037, + 718 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 27761, + "bbox": [ + 488, + 5, + 1498, + 456 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9962, + "bbox": [ + 632, + 158, + 669, + 176 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 17180, + "bbox": [ + 569, + 184, + 804, + 224 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 418325, + "bbox": [ + 518, + 5, + 1525, + 405 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 3172, + "bbox": [ + 997, + 388, + 990, + 26 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 30732, + "bbox": [ + 279, + 5, + 1254, + 150 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 637, + "bbox": [ + 1919, + 347, + 18, + 52 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 203, + "bbox": [ + 732, + 365, + 14, + 30 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 482, + "bbox": [ + 744, + 361, + 19, + 39 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1131, + "bbox": [ + 629, + 362, + 40, + 68 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2450, + "bbox": [ + 1978, + 362, + 65, + 54 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 32024, + "bbox": [ + 772, + 343, + 239, + 174 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 78112, + "bbox": [ + 1071, + 289, + 711, + 139 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_004617_gtFine_panoptic.png", + "image_id": "frankfurt_000000_004617", + "segments_info": [ + { + "area": 797823, + "bbox": [ + 6, + 417, + 2037, + 562 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 26073, + "bbox": [ + 6, + 475, + 677, + 70 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 118272, + "bbox": [ + 18, + 5, + 1415, + 416 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 20150, + "bbox": [ + 6, + 392, + 532, + 105 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 59014, + "bbox": [ + 275, + 5, + 1699, + 631 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 75, + "bbox": [ + 1182, + 354, + 102, + 41 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 579318, + "bbox": [ + 6, + 5, + 2037, + 522 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4684, + "bbox": [ + 773, + 449, + 956, + 150 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 92449, + "bbox": [ + 54, + 5, + 1372, + 289 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 357, + "bbox": [ + 1094, + 400, + 43, + 22 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 520, + "bbox": [ + 1069, + 405, + 44, + 22 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 441, + "bbox": [ + 1059, + 397, + 20, + 28 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1532, + "bbox": [ + 973, + 386, + 91, + 46 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 911, + "bbox": [ + 1011, + 403, + 42, + 33 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 871, + "bbox": [ + 974, + 399, + 45, + 42 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1678, + "bbox": [ + 907, + 399, + 89, + 43 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 5638, + "bbox": [ + 780, + 394, + 141, + 64 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 7583, + "bbox": [ + 680, + 388, + 122, + 86 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 17095, + "bbox": [ + 444, + 384, + 248, + 101 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1428, + "bbox": [ + 1145, + 403, + 45, + 37 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_005543_gtFine_panoptic.png", + "image_id": "frankfurt_000000_005543", + "segments_info": [ + { + "area": 641564, + "bbox": [ + 6, + 366, + 1933, + 613 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 42320, + "bbox": [ + 1136, + 401, + 907, + 257 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 154116, + "bbox": [ + 7, + 31, + 1942, + 431 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 574, + "bbox": [ + 1132, + 386, + 43, + 21 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 36146, + "bbox": [ + 1314, + 384, + 455, + 183 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 88251, + "bbox": [ + 6, + 20, + 1935, + 766 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2157, + "bbox": [ + 1124, + 123, + 540, + 230 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 283443, + "bbox": [ + 17, + 5, + 2026, + 433 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 165439, + "bbox": [ + 6, + 409, + 2037, + 548 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 155893, + "bbox": [ + 15, + 5, + 2028, + 275 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 707, + "bbox": [ + 1824, + 397, + 23, + 41 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1299, + "bbox": [ + 1980, + 398, + 31, + 67 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 256, + "bbox": [ + 1483, + 358, + 13, + 27 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 121, + "bbox": [ + 997, + 374, + 9, + 24 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 871, + "bbox": [ + 963, + 371, + 37, + 30 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 814, + "bbox": [ + 900, + 368, + 29, + 43 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2446, + "bbox": [ + 825, + 356, + 83, + 68 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 3628, + "bbox": [ + 760, + 356, + 104, + 64 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1728, + "bbox": [ + 619, + 342, + 136, + 25 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 13818, + "bbox": [ + 504, + 356, + 282, + 93 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 9202, + "bbox": [ + 1024, + 375, + 128, + 101 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 39605, + "bbox": [ + 120, + 293, + 372, + 219 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 49332, + "bbox": [ + 6, + 301, + 277, + 230 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2097, + "bbox": [ + 6, + 459, + 22, + 122 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 25733, + "bbox": [ + 1484, + 263, + 241, + 153 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_005898_gtFine_panoptic.png", + "image_id": "frankfurt_000000_005898", + "segments_info": [ + { + "area": 807584, + "bbox": [ + 6, + 391, + 2035, + 588 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 131653, + "bbox": [ + 6, + 406, + 2037, + 435 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 19829, + "bbox": [ + 1707, + 22, + 244, + 252 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 62403, + "bbox": [ + 108, + 5, + 1935, + 461 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3103, + "bbox": [ + 114, + 184, + 973, + 156 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 6788, + "bbox": [ + 416, + 163, + 1310, + 248 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 648280, + "bbox": [ + 6, + 5, + 2037, + 517 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 19001, + "bbox": [ + 1469, + 430, + 574, + 142 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 32082, + "bbox": [ + 46, + 5, + 1997, + 282 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1722, + "bbox": [ + 387, + 382, + 40, + 73 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1843, + "bbox": [ + 299, + 373, + 39, + 85 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1611, + "bbox": [ + 269, + 377, + 33, + 82 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 353, + "bbox": [ + 153, + 384, + 47, + 52 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1840, + "bbox": [ + 158, + 385, + 56, + 117 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 127, + "bbox": [ + 1667, + 347, + 58, + 12 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 10912, + "bbox": [ + 1145, + 367, + 138, + 100 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 592, + "bbox": [ + 967, + 376, + 31, + 63 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 6007, + "bbox": [ + 891, + 372, + 100, + 105 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 31088, + "bbox": [ + 707, + 349, + 232, + 185 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2232, + "bbox": [ + 6, + 417, + 58, + 52 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 29516, + "bbox": [ + 555, + 282, + 310, + 163 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 30102, + "bbox": [ + 1142, + 293, + 379, + 111 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 4871, + "bbox": [ + 157, + 419, + 87, + 93 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_006589_gtFine_panoptic.png", + "image_id": "frankfurt_000000_006589", + "segments_info": [ + { + "area": 782526, + "bbox": [ + 6, + 401, + 2037, + 578 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 21200, + "bbox": [ + 6, + 511, + 459, + 164 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 300974, + "bbox": [ + 1002, + 11, + 1041, + 393 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 37319, + "bbox": [ + 625, + 11, + 1166, + 463 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 472, + "bbox": [ + 607, + 261, + 226, + 126 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1001, + "bbox": [ + 920, + 322, + 64, + 48 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 444082, + "bbox": [ + 6, + 5, + 2037, + 516 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 144416, + "bbox": [ + 6, + 387, + 2037, + 340 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 26652, + "bbox": [ + 787, + 8, + 253, + 267 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 209, + "bbox": [ + 671, + 404, + 21, + 18 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 239, + "bbox": [ + 685, + 399, + 50, + 23 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2652, + "bbox": [ + 753, + 366, + 59, + 75 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1123, + "bbox": [ + 780, + 402, + 32, + 45 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 866, + "bbox": [ + 928, + 393, + 36, + 44 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 6274, + "bbox": [ + 845, + 393, + 102, + 77 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3556, + "bbox": [ + 688, + 402, + 78, + 58 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 31565, + "bbox": [ + 460, + 387, + 240, + 169 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 6030, + "bbox": [ + 799, + 358, + 111, + 101 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 24174, + "bbox": [ + 1000, + 283, + 258, + 134 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_007365_gtFine_panoptic.png", + "image_id": "frankfurt_000000_007365", + "segments_info": [ + { + "area": 643714, + "bbox": [ + 6, + 414, + 1989, + 565 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 28734, + "bbox": [ + 6, + 420, + 1196, + 235 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 250186, + "bbox": [ + 6, + 19, + 2037, + 402 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 46591, + "bbox": [ + 1047, + 15, + 901, + 733 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 390, + "bbox": [ + 1040, + 329, + 539, + 85 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 525199, + "bbox": [ + 6, + 5, + 2037, + 565 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 218698, + "bbox": [ + 6, + 429, + 2037, + 528 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 59798, + "bbox": [ + 128, + 9, + 1418, + 358 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 632, + "bbox": [ + 979, + 400, + 62, + 22 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 167, + "bbox": [ + 1110, + 397, + 12, + 22 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 17, + "bbox": [ + 1025, + 412, + 7, + 15 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 452, + "bbox": [ + 1000, + 409, + 29, + 21 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 534, + "bbox": [ + 974, + 410, + 34, + 26 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1963, + "bbox": [ + 930, + 409, + 57, + 41 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2694, + "bbox": [ + 1051, + 400, + 67, + 50 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 86138, + "bbox": [ + 595, + 205, + 336, + 314 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_008206_gtFine_panoptic.png", + "image_id": "frankfurt_000000_008206", + "segments_info": [ + { + "area": 888231, + "bbox": [ + 6, + 401, + 2037, + 578 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 24403, + "bbox": [ + 219, + 401, + 1824, + 172 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 178159, + "bbox": [ + 6, + 5, + 2037, + 433 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 61463, + "bbox": [ + 149, + 6, + 1880, + 574 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 11804, + "bbox": [ + 274, + 7, + 1769, + 366 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 5184, + "bbox": [ + 423, + 155, + 1585, + 231 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 452142, + "bbox": [ + 6, + 5, + 2037, + 625 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 70586, + "bbox": [ + 6, + 470, + 714, + 216 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 83430, + "bbox": [ + 881, + 8, + 781, + 339 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2230, + "bbox": [ + 1118, + 380, + 212, + 45 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 146, + "bbox": [ + 972, + 379, + 11, + 17 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 129, + "bbox": [ + 958, + 378, + 8, + 19 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 199, + "bbox": [ + 943, + 376, + 12, + 21 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 4084, + "bbox": [ + 1067, + 339, + 67, + 138 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 277, + "bbox": [ + 1357, + 392, + 13, + 32 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1609, + "bbox": [ + 1858, + 385, + 33, + 80 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 259, + "bbox": [ + 1954, + 402, + 20, + 18 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 3708, + "bbox": [ + 1986, + 382, + 55, + 114 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1361, + "bbox": [ + 1385, + 368, + 30, + 83 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 14915, + "bbox": [ + 677, + 347, + 242, + 98 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 9373, + "bbox": [ + 6, + 345, + 190, + 91 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1316, + "bbox": [ + 1248, + 384, + 39, + 41 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2049, + "bbox": [ + 1728, + 393, + 132, + 77 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 10130, + "bbox": [ + 1612, + 389, + 227, + 82 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 18023, + "bbox": [ + 1412, + 384, + 282, + 89 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 4324, + "bbox": [ + 49, + 373, + 84, + 103 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2706, + "bbox": [ + 179, + 389, + 44, + 89 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1793, + "bbox": [ + 1973, + 425, + 70, + 73 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_008451_gtFine_panoptic.png", + "image_id": "frankfurt_000000_008451", + "segments_info": [ + { + "area": 852620, + "bbox": [ + 6, + 436, + 2037, + 543 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 63408, + "bbox": [ + 6, + 441, + 2037, + 244 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 240320, + "bbox": [ + 6, + 5, + 2037, + 472 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 7754, + "bbox": [ + 418, + 392, + 1187, + 90 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 50127, + "bbox": [ + 6, + 5, + 2037, + 532 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3663, + "bbox": [ + 312, + 249, + 1545, + 98 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 3501, + "bbox": [ + 755, + 304, + 876, + 108 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 428094, + "bbox": [ + 6, + 5, + 2037, + 487 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4334, + "bbox": [ + 16, + 409, + 1349, + 62 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 95763, + "bbox": [ + 1048, + 13, + 668, + 356 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 349, + "bbox": [ + 1115, + 420, + 22, + 25 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 87, + "bbox": [ + 923, + 410, + 8, + 14 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 3470, + "bbox": [ + 319, + 351, + 54, + 124 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 722, + "bbox": [ + 1583, + 416, + 25, + 49 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 250, + "bbox": [ + 1625, + 424, + 16, + 23 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 13822, + "bbox": [ + 1658, + 322, + 150, + 284 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 185, + "bbox": [ + 1162, + 423, + 19, + 12 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 217, + "bbox": [ + 1103, + 418, + 18, + 28 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1200, + "bbox": [ + 1069, + 416, + 46, + 33 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 6504, + "bbox": [ + 222, + 389, + 195, + 63 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1055, + "bbox": [ + 6, + 420, + 20, + 65 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 898, + "bbox": [ + 1265, + 410, + 41, + 49 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 254, + "bbox": [ + 1306, + 424, + 21, + 31 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 622, + "bbox": [ + 1312, + 424, + 39, + 34 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2053, + "bbox": [ + 1440, + 421, + 56, + 45 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 6360, + "bbox": [ + 1135, + 410, + 157, + 67 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 31545, + "bbox": [ + 1581, + 435, + 328, + 197 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_009291_gtFine_panoptic.png", + "image_id": "frankfurt_000000_009291", + "segments_info": [ + { + "area": 913469, + "bbox": [ + 6, + 386, + 2037, + 593 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 63160, + "bbox": [ + 6, + 416, + 2037, + 232 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 297957, + "bbox": [ + 6, + 5, + 2037, + 451 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 17745, + "bbox": [ + 166, + 374, + 1804, + 84 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 2206, + "bbox": [ + 1791, + 377, + 197, + 37 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 52210, + "bbox": [ + 40, + 5, + 1839, + 564 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 26999, + "bbox": [ + 692, + 52, + 1244, + 243 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 344101, + "bbox": [ + 11, + 5, + 2032, + 461 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4350, + "bbox": [ + 178, + 362, + 415, + 18 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 64555, + "bbox": [ + 1254, + 14, + 750, + 307 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1291, + "bbox": [ + 1398, + 378, + 168, + 38 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 1587, + "bbox": [ + 1917, + 368, + 39, + 70 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 351, + "bbox": [ + 1135, + 373, + 11, + 60 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1905, + "bbox": [ + 1399, + 363, + 63, + 101 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2236, + "bbox": [ + 1422, + 367, + 59, + 98 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 420, + "bbox": [ + 1563, + 378, + 40, + 25 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 781, + "bbox": [ + 1577, + 381, + 37, + 26 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 264, + "bbox": [ + 1611, + 377, + 12, + 33 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 796, + "bbox": [ + 1695, + 376, + 38, + 48 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 4896, + "bbox": [ + 1618, + 361, + 78, + 70 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2636, + "bbox": [ + 1706, + 376, + 71, + 54 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 4730, + "bbox": [ + 1968, + 365, + 75, + 75 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 438, + "bbox": [ + 1379, + 379, + 27, + 41 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2176, + "bbox": [ + 1332, + 379, + 64, + 46 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_009561_gtFine_panoptic.png", + "image_id": "frankfurt_000000_009561", + "segments_info": [ + { + "area": 833228, + "bbox": [ + 6, + 426, + 2037, + 553 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 57618, + "bbox": [ + 14, + 431, + 2029, + 203 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 186921, + "bbox": [ + 6, + 5, + 1779, + 435 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 8818, + "bbox": [ + 1190, + 369, + 277, + 87 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 41850, + "bbox": [ + 11, + 380, + 2032, + 104 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 69642, + "bbox": [ + 140, + 12, + 1474, + 585 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 16635, + "bbox": [ + 1406, + 60, + 241, + 253 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 16389, + "bbox": [ + 6, + 17, + 1542, + 503 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 139482, + "bbox": [ + 532, + 23, + 1511, + 407 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 383869, + "bbox": [ + 7, + 5, + 1829, + 390 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 111, + "bbox": [ + 1016, + 417, + 11, + 13 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 101, + "bbox": [ + 998, + 412, + 8, + 18 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 39, + "bbox": [ + 922, + 405, + 8, + 7 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 207, + "bbox": [ + 874, + 406, + 11, + 28 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 296, + "bbox": [ + 860, + 404, + 14, + 30 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 89, + "bbox": [ + 549, + 406, + 15, + 10 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 15982, + "bbox": [ + 1332, + 339, + 113, + 255 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 488, + "bbox": [ + 508, + 403, + 24, + 36 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 905, + "bbox": [ + 959, + 406, + 41, + 26 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 814, + "bbox": [ + 910, + 411, + 40, + 23 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1517, + "bbox": [ + 800, + 410, + 57, + 32 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3136, + "bbox": [ + 623, + 409, + 81, + 48 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 5233, + "bbox": [ + 392, + 418, + 114, + 59 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 9369, + "bbox": [ + 24, + 432, + 177, + 73 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1613, + "bbox": [ + 1082, + 401, + 56, + 35 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 5056, + "bbox": [ + 508, + 414, + 118, + 56 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 4510, + "bbox": [ + 1711, + 388, + 105, + 74 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 144, + "bbox": [ + 506, + 423, + 22, + 27 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_009688_gtFine_panoptic.png", + "image_id": "frankfurt_000000_009688", + "segments_info": [ + { + "area": 648061, + "bbox": [ + 6, + 445, + 1910, + 534 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 253288, + "bbox": [ + 6, + 436, + 2037, + 521 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 190593, + "bbox": [ + 13, + 22, + 1983, + 425 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 88800, + "bbox": [ + 14, + 351, + 2029, + 154 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 40634, + "bbox": [ + 163, + 23, + 1731, + 425 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 79558, + "bbox": [ + 36, + 262, + 2007, + 188 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 484894, + "bbox": [ + 6, + 5, + 2037, + 389 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 113, + "bbox": [ + 704, + 437, + 12, + 11 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 181, + "bbox": [ + 690, + 428, + 11, + 20 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 503, + "bbox": [ + 586, + 410, + 18, + 42 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 409, + "bbox": [ + 571, + 417, + 18, + 36 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 961, + "bbox": [ + 224, + 393, + 30, + 63 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1051, + "bbox": [ + 202, + 392, + 24, + 63 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1205, + "bbox": [ + 121, + 391, + 38, + 65 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1352, + "bbox": [ + 74, + 388, + 40, + 68 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1303, + "bbox": [ + 6, + 379, + 38, + 79 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 1190, + "bbox": [ + 118, + 415, + 47, + 50 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1251, + "bbox": [ + 70, + 419, + 49, + 50 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1314, + "bbox": [ + 6, + 414, + 44, + 54 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_009969_gtFine_panoptic.png", + "image_id": "frankfurt_000000_009969", + "segments_info": [ + { + "area": 624306, + "bbox": [ + 6, + 399, + 2029, + 580 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 225515, + "bbox": [ + 484, + 418, + 1559, + 539 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 261945, + "bbox": [ + 413, + 5, + 1630, + 428 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3103, + "bbox": [ + 1751, + 435, + 292, + 44 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 48868, + "bbox": [ + 468, + 328, + 1575, + 148 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 33012, + "bbox": [ + 100, + 17, + 1732, + 420 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1375, + "bbox": [ + 1131, + 298, + 34, + 42 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 313098, + "bbox": [ + 6, + 5, + 2037, + 452 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 107655, + "bbox": [ + 387, + 5, + 1402, + 244 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 743, + "bbox": [ + 681, + 404, + 38, + 23 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 275, + "bbox": [ + 1160, + 405, + 29, + 17 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 361, + "bbox": [ + 1184, + 376, + 12, + 46 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 586, + "bbox": [ + 1164, + 377, + 18, + 45 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1404, + "bbox": [ + 1263, + 357, + 28, + 81 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1548, + "bbox": [ + 1298, + 353, + 27, + 83 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1275, + "bbox": [ + 1227, + 361, + 24, + 79 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 11929, + "bbox": [ + 1862, + 267, + 88, + 236 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2151, + "bbox": [ + 1192, + 349, + 39, + 101 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2294, + "bbox": [ + 1323, + 343, + 40, + 104 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 4989, + "bbox": [ + 1362, + 311, + 74, + 163 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 172797, + "bbox": [ + 6, + 332, + 558, + 389 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 198, + "bbox": [ + 1004, + 396, + 45, + 8 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4462, + "bbox": [ + 810, + 370, + 189, + 36 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 1554, + "bbox": [ + 731, + 382, + 39, + 43 + ], + "category_id": 27, + "id": 27001, + "iscrowd": 0 + }, + { + "area": 612, + "bbox": [ + 1199, + 397, + 25, + 58 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 915, + "bbox": [ + 1332, + 397, + 24, + 61 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 4980, + "bbox": [ + 1367, + 370, + 72, + 135 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_010351_gtFine_panoptic.png", + "image_id": "frankfurt_000000_010351", + "segments_info": [ + { + "area": 836440, + "bbox": [ + 6, + 382, + 2033, + 597 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 67506, + "bbox": [ + 1490, + 376, + 553, + 544 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 72668, + "bbox": [ + 15, + 22, + 2028, + 383 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 12525, + "bbox": [ + 1669, + 388, + 289, + 56 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 55482, + "bbox": [ + 343, + 5, + 1678, + 711 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2020, + "bbox": [ + 1457, + 204, + 553, + 145 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 9774, + "bbox": [ + 1093, + 180, + 596, + 202 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 388276, + "bbox": [ + 138, + 5, + 1905, + 458 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 6785, + "bbox": [ + 16, + 5, + 846, + 64 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 7230, + "bbox": [ + 1197, + 358, + 119, + 78 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3291, + "bbox": [ + 1414, + 363, + 82, + 50 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2267, + "bbox": [ + 1503, + 364, + 67, + 42 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 387378, + "bbox": [ + 6, + 61, + 877, + 512 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_010763_gtFine_panoptic.png", + "image_id": "frankfurt_000000_010763", + "segments_info": [ + { + "area": 686984, + "bbox": [ + 6, + 383, + 2033, + 596 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 234686, + "bbox": [ + 6, + 381, + 2037, + 556 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 370994, + "bbox": [ + 6, + 5, + 2037, + 487 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 16439, + "bbox": [ + 1652, + 455, + 391, + 113 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 8292, + "bbox": [ + 294, + 405, + 269, + 68 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 66671, + "bbox": [ + 99, + 5, + 1821, + 722 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 168, + "bbox": [ + 974, + 349, + 132, + 22 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 3396, + "bbox": [ + 811, + 191, + 404, + 168 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 352161, + "bbox": [ + 89, + 5, + 1954, + 456 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 19483, + "bbox": [ + 1249, + 360, + 794, + 150 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 50989, + "bbox": [ + 803, + 7, + 327, + 246 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 5633, + "bbox": [ + 841, + 371, + 162, + 55 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 1268, + "bbox": [ + 1093, + 360, + 36, + 65 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2312, + "bbox": [ + 1124, + 362, + 67, + 58 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 9499, + "bbox": [ + 999, + 301, + 89, + 120 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 607, + "bbox": [ + 1101, + 397, + 26, + 44 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 801, + "bbox": [ + 692, + 395, + 100, + 55 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_011007_gtFine_panoptic.png", + "image_id": "frankfurt_000000_011007", + "segments_info": [ + { + "area": 783179, + "bbox": [ + 23, + 376, + 2020, + 603 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 191745, + "bbox": [ + 6, + 388, + 2037, + 590 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 474620, + "bbox": [ + 21, + 5, + 2022, + 452 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 31090, + "bbox": [ + 105, + 355, + 1388, + 129 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 32827, + "bbox": [ + 22, + 343, + 780, + 93 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 50672, + "bbox": [ + 6, + 5, + 1938, + 840 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2919, + "bbox": [ + 408, + 206, + 1226, + 78 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 15048, + "bbox": [ + 21, + 5, + 2021, + 358 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 102646, + "bbox": [ + 228, + 5, + 1300, + 400 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 18906, + "bbox": [ + 106, + 355, + 589, + 100 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 73178, + "bbox": [ + 803, + 7, + 742, + 276 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3255, + "bbox": [ + 893, + 356, + 86, + 85 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 503, + "bbox": [ + 1173, + 365, + 18, + 44 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 787, + "bbox": [ + 1209, + 356, + 22, + 53 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 978, + "bbox": [ + 1147, + 369, + 33, + 42 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1656, + "bbox": [ + 848, + 373, + 69, + 70 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1686, + "bbox": [ + 844, + 374, + 54, + 81 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 8366, + "bbox": [ + 754, + 372, + 119, + 92 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 34209, + "bbox": [ + 991, + 229, + 164, + 227 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_011074_gtFine_panoptic.png", + "image_id": "frankfurt_000000_011074", + "segments_info": [ + { + "area": 363611, + "bbox": [ + 6, + 447, + 1465, + 532 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 409114, + "bbox": [ + 6, + 421, + 2037, + 536 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 430879, + "bbox": [ + 6, + 5, + 2037, + 570 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 64263, + "bbox": [ + 132, + 405, + 1911, + 270 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 195986, + "bbox": [ + 914, + 180, + 1129, + 369 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 28290, + "bbox": [ + 77, + 10, + 1242, + 556 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 532, + "bbox": [ + 77, + 312, + 16, + 37 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1086, + "bbox": [ + 63, + 305, + 199, + 54 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 221590, + "bbox": [ + 6, + 5, + 2037, + 425 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4649, + "bbox": [ + 267, + 425, + 593, + 78 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 631, + "bbox": [ + 162, + 5, + 51, + 23 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 6642, + "bbox": [ + 821, + 321, + 67, + 238 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 22290, + "bbox": [ + 853, + 273, + 125, + 305 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 33512, + "bbox": [ + 979, + 267, + 148, + 375 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 17810, + "bbox": [ + 726, + 312, + 105, + 282 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 16957, + "bbox": [ + 582, + 330, + 125, + 271 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2859, + "bbox": [ + 234, + 347, + 54, + 79 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 6697, + "bbox": [ + 665, + 372, + 69, + 154 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_011461_gtFine_panoptic.png", + "image_id": "frankfurt_000000_011461", + "segments_info": [ + { + "area": 705034, + "bbox": [ + 6, + 508, + 2037, + 471 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 138867, + "bbox": [ + 6, + 442, + 2037, + 172 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 106031, + "bbox": [ + 6, + 5, + 2037, + 462 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5897, + "bbox": [ + 583, + 461, + 1171, + 64 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 60350, + "bbox": [ + 236, + 14, + 1802, + 585 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 53280, + "bbox": [ + 430, + 9, + 1382, + 346 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 553479, + "bbox": [ + 25, + 5, + 2018, + 478 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 19653, + "bbox": [ + 274, + 439, + 1485, + 113 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 7586, + "bbox": [ + 6, + 394, + 1610, + 184 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 143, + "bbox": [ + 106, + 435, + 14, + 12 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 8940, + "bbox": [ + 6, + 373, + 64, + 207 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 929, + "bbox": [ + 1368, + 403, + 31, + 50 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1478, + "bbox": [ + 1834, + 378, + 37, + 70 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 3427, + "bbox": [ + 62, + 447, + 65, + 80 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3532, + "bbox": [ + 271, + 436, + 76, + 70 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 20467, + "bbox": [ + 324, + 428, + 272, + 112 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 24618, + "bbox": [ + 813, + 402, + 325, + 123 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 20416, + "bbox": [ + 1908, + 267, + 135, + 204 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_011810_gtFine_panoptic.png", + "image_id": "frankfurt_000000_011810", + "segments_info": [ + { + "area": 643866, + "bbox": [ + 6, + 404, + 2034, + 575 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 170017, + "bbox": [ + 1036, + 410, + 1007, + 544 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 155142, + "bbox": [ + 14, + 5, + 2029, + 513 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 26336, + "bbox": [ + 1166, + 396, + 510, + 181 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 55492, + "bbox": [ + 1256, + 376, + 787, + 327 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 38663, + "bbox": [ + 63, + 11, + 1980, + 497 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 10359, + "bbox": [ + 167, + 37, + 1333, + 355 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 15098, + "bbox": [ + 148, + 178, + 1430, + 266 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 415471, + "bbox": [ + 6, + 5, + 2037, + 407 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 77811, + "bbox": [ + 37, + 5, + 1073, + 343 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1511, + "bbox": [ + 1050, + 354, + 207, + 69 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 2961, + "bbox": [ + 1350, + 338, + 41, + 119 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1951, + "bbox": [ + 1386, + 347, + 38, + 110 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3372, + "bbox": [ + 1287, + 347, + 53, + 110 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2244, + "bbox": [ + 1222, + 357, + 35, + 102 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1214, + "bbox": [ + 1072, + 352, + 27, + 110 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 157, + "bbox": [ + 1009, + 383, + 16, + 18 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 491, + "bbox": [ + 266, + 411, + 42, + 24 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 11167, + "bbox": [ + 127, + 400, + 167, + 143 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 23348, + "bbox": [ + 266, + 382, + 204, + 175 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 44372, + "bbox": [ + 6, + 342, + 212, + 278 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 11650, + "bbox": [ + 1826, + 342, + 183, + 87 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 8153, + "bbox": [ + 821, + 379, + 121, + 109 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 10641, + "bbox": [ + 745, + 379, + 126, + 160 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 79735, + "bbox": [ + 422, + 347, + 379, + 269 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 9716, + "bbox": [ + 85, + 356, + 247, + 65 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + }, + { + "area": 17431, + "bbox": [ + 1560, + 259, + 483, + 88 + ], + "category_id": 31, + "id": 31001, + "iscrowd": 0 + }, + { + "area": 5774, + "bbox": [ + 1578, + 308, + 132, + 230 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 294, + "bbox": [ + 1009, + 394, + 13, + 27 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 766, + "bbox": [ + 1110, + 385, + 36, + 46 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_012009_gtFine_panoptic.png", + "image_id": "frankfurt_000000_012009", + "segments_info": [ + { + "area": 772175, + "bbox": [ + 6, + 432, + 2036, + 547 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 68085, + "bbox": [ + 1300, + 430, + 743, + 317 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 515581, + "bbox": [ + 6, + 5, + 2037, + 515 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 69711, + "bbox": [ + 6, + 422, + 1806, + 177 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 54169, + "bbox": [ + 30, + 5, + 1425, + 567 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2732, + "bbox": [ + 1404, + 260, + 64, + 53 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 218497, + "bbox": [ + 257, + 5, + 1055, + 506 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 38999, + "bbox": [ + 1188, + 13, + 219, + 244 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 464, + "bbox": [ + 1275, + 397, + 24, + 36 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 987, + "bbox": [ + 1400, + 375, + 25, + 65 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 673, + "bbox": [ + 1479, + 377, + 19, + 53 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2507, + "bbox": [ + 1494, + 359, + 48, + 100 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 3137, + "bbox": [ + 1549, + 354, + 48, + 116 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 9898, + "bbox": [ + 38, + 368, + 235, + 64 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 405, + "bbox": [ + 946, + 404, + 56, + 11 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1123, + "bbox": [ + 1291, + 381, + 84, + 84 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 5348, + "bbox": [ + 1298, + 388, + 104, + 84 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 34725, + "bbox": [ + 1889, + 385, + 154, + 318 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3376, + "bbox": [ + 1212, + 391, + 71, + 56 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3606, + "bbox": [ + 1318, + 345, + 93, + 81 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_012121_gtFine_panoptic.png", + "image_id": "frankfurt_000000_012121", + "segments_info": [ + { + "area": 630414, + "bbox": [ + 6, + 404, + 2037, + 575 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 25807, + "bbox": [ + 1441, + 459, + 602, + 209 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 421965, + "bbox": [ + 6, + 5, + 2037, + 528 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 700, + "bbox": [ + 651, + 411, + 153, + 18 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 1859, + "bbox": [ + 6, + 426, + 467, + 33 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 68780, + "bbox": [ + 469, + 5, + 924, + 616 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1982, + "bbox": [ + 702, + 312, + 662, + 67 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1854, + "bbox": [ + 668, + 272, + 875, + 117 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 265620, + "bbox": [ + 6, + 68, + 1384, + 743 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1548, + "bbox": [ + 547, + 393, + 257, + 30 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 46232, + "bbox": [ + 688, + 5, + 630, + 218 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2841, + "bbox": [ + 667, + 384, + 174, + 44 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 6266, + "bbox": [ + 1357, + 378, + 97, + 91 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 6027, + "bbox": [ + 1445, + 340, + 102, + 146 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 7882, + "bbox": [ + 1473, + 359, + 78, + 150 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1393, + "bbox": [ + 1536, + 411, + 29, + 103 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 11913, + "bbox": [ + 256, + 393, + 177, + 93 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2870, + "bbox": [ + 547, + 399, + 108, + 37 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 995, + "bbox": [ + 872, + 387, + 40, + 33 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 248, + "bbox": [ + 923, + 395, + 19, + 16 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 447, + "bbox": [ + 838, + 394, + 30, + 19 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 204, + "bbox": [ + 1126, + 391, + 31, + 13 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 781, + "bbox": [ + 1174, + 390, + 35, + 32 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1762, + "bbox": [ + 1203, + 384, + 48, + 44 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 5133, + "bbox": [ + 1276, + 378, + 82, + 74 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 203797, + "bbox": [ + 1535, + 80, + 492, + 497 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 1950, + "bbox": [ + 1003, + 363, + 41, + 56 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_012868_gtFine_panoptic.png", + "image_id": "frankfurt_000000_012868", + "segments_info": [ + { + "area": 548799, + "bbox": [ + 6, + 421, + 1871, + 558 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 120619, + "bbox": [ + 780, + 430, + 1260, + 527 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 474031, + "bbox": [ + 8, + 5, + 2035, + 454 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3423, + "bbox": [ + 372, + 387, + 1562, + 83 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 50050, + "bbox": [ + 222, + 60, + 1821, + 788 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8258, + "bbox": [ + 214, + 125, + 1240, + 191 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 711, + "bbox": [ + 1030, + 262, + 53, + 16 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 168600, + "bbox": [ + 397, + 16, + 1595, + 427 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2254, + "bbox": [ + 21, + 5, + 125, + 30 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 13849, + "bbox": [ + 814, + 335, + 1108, + 185 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 1462, + "bbox": [ + 336, + 364, + 38, + 68 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 307, + "bbox": [ + 983, + 357, + 23, + 25 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1269, + "bbox": [ + 1001, + 360, + 27, + 101 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 3269, + "bbox": [ + 1178, + 324, + 40, + 176 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1035, + "bbox": [ + 1282, + 376, + 35, + 88 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 11915, + "bbox": [ + 1333, + 300, + 81, + 270 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 10430, + "bbox": [ + 1419, + 314, + 142, + 210 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 10459, + "bbox": [ + 1778, + 323, + 84, + 262 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 10942, + "bbox": [ + 1893, + 319, + 115, + 162 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 2266, + "bbox": [ + 419, + 391, + 66, + 42 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2766, + "bbox": [ + 524, + 400, + 78, + 42 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 525, + "bbox": [ + 759, + 396, + 21, + 55 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 15577, + "bbox": [ + 607, + 371, + 166, + 118 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 14594, + "bbox": [ + 862, + 365, + 156, + 118 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 197886, + "bbox": [ + 6, + 267, + 458, + 614 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 8658, + "bbox": [ + 477, + 351, + 153, + 83 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 68781, + "bbox": [ + 1584, + 312, + 439, + 374 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 23551, + "bbox": [ + 1861, + 261, + 182, + 520 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 15508, + "bbox": [ + 1412, + 404, + 159, + 218 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3073, + "bbox": [ + 1846, + 412, + 87, + 82 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_013067_gtFine_panoptic.png", + "image_id": "frankfurt_000000_013067", + "segments_info": [ + { + "area": 563601, + "bbox": [ + 6, + 411, + 1920, + 568 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 177029, + "bbox": [ + 708, + 427, + 1335, + 530 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 381357, + "bbox": [ + 36, + 5, + 2007, + 514 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 7004, + "bbox": [ + 764, + 400, + 821, + 84 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 32644, + "bbox": [ + 773, + 385, + 812, + 83 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 62225, + "bbox": [ + 6, + 5, + 1877, + 762 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7421, + "bbox": [ + 135, + 87, + 1475, + 285 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 7689, + "bbox": [ + 86, + 234, + 921, + 155 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 280369, + "bbox": [ + 36, + 10, + 1960, + 352 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 316, + "bbox": [ + 1108, + 370, + 26, + 19 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 5133, + "bbox": [ + 957, + 405, + 98, + 82 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 2961, + "bbox": [ + 1577, + 365, + 50, + 124 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 5937, + "bbox": [ + 1611, + 352, + 59, + 179 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 862, + "bbox": [ + 778, + 382, + 19, + 69 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 93, + "bbox": [ + 328, + 392, + 12, + 16 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 565, + "bbox": [ + 205, + 389, + 31, + 39 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2267, + "bbox": [ + 277, + 380, + 55, + 49 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2105, + "bbox": [ + 218, + 390, + 59, + 43 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 3028, + "bbox": [ + 584, + 390, + 75, + 61 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 69396, + "bbox": [ + 298, + 348, + 329, + 269 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 74125, + "bbox": [ + 6, + 366, + 175, + 553 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 9278, + "bbox": [ + 562, + 348, + 172, + 89 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 1114, + "bbox": [ + 768, + 411, + 51, + 40 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_013240_gtFine_panoptic.png", + "image_id": "frankfurt_000000_013240", + "segments_info": [ + { + "area": 717926, + "bbox": [ + 6, + 492, + 2037, + 487 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 97858, + "bbox": [ + 6, + 474, + 1737, + 146 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 727290, + "bbox": [ + 6, + 5, + 2037, + 476 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 26005, + "bbox": [ + 6, + 345, + 381, + 185 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 78828, + "bbox": [ + 6, + 402, + 1108, + 160 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 9454, + "bbox": [ + 443, + 11, + 1304, + 509 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 5812, + "bbox": [ + 976, + 165, + 96, + 101 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 12206, + "bbox": [ + 914, + 115, + 849, + 530 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 22882, + "bbox": [ + 12, + 5, + 161, + 211 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1441, + "bbox": [ + 9, + 346, + 58, + 44 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 13359, + "bbox": [ + 1457, + 413, + 259, + 90 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 3687, + "bbox": [ + 1178, + 363, + 54, + 161 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 7696, + "bbox": [ + 1140, + 334, + 58, + 191 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2970, + "bbox": [ + 1222, + 354, + 69, + 164 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 3569, + "bbox": [ + 1226, + 369, + 46, + 157 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 5553, + "bbox": [ + 1068, + 334, + 77, + 148 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 4690, + "bbox": [ + 1299, + 371, + 49, + 144 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1310, + "bbox": [ + 2006, + 403, + 37, + 90 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 4561, + "bbox": [ + 1938, + 406, + 105, + 97 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 29087, + "bbox": [ + 1740, + 385, + 250, + 147 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 5733, + "bbox": [ + 1346, + 399, + 121, + 107 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_013382_gtFine_panoptic.png", + "image_id": "frankfurt_000000_013382", + "segments_info": [ + { + "area": 721799, + "bbox": [ + 6, + 428, + 2032, + 551 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 27297, + "bbox": [ + 6, + 415, + 1479, + 160 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 627602, + "bbox": [ + 6, + 5, + 2037, + 499 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 487, + "bbox": [ + 1230, + 422, + 21, + 40 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 13065, + "bbox": [ + 485, + 89, + 1234, + 401 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 393, + "bbox": [ + 800, + 271, + 296, + 111 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 34252, + "bbox": [ + 473, + 15, + 947, + 459 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 63657, + "bbox": [ + 1141, + 17, + 376, + 366 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 7345, + "bbox": [ + 785, + 7, + 198, + 68 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2469, + "bbox": [ + 1187, + 360, + 41, + 104 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 1900, + "bbox": [ + 796, + 386, + 132, + 52 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 225, + "bbox": [ + 1243, + 375, + 14, + 41 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 630, + "bbox": [ + 1214, + 375, + 19, + 55 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 789, + "bbox": [ + 689, + 398, + 27, + 53 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 616, + "bbox": [ + 670, + 393, + 17, + 53 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 255, + "bbox": [ + 885, + 390, + 13, + 35 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 8696, + "bbox": [ + 6, + 446, + 81, + 144 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 198485, + "bbox": [ + 1443, + 309, + 600, + 483 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 56813, + "bbox": [ + 1895, + 427, + 148, + 528 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 749, + "bbox": [ + 1139, + 390, + 42, + 37 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 8329, + "bbox": [ + 433, + 392, + 145, + 102 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 8239, + "bbox": [ + 361, + 402, + 134, + 108 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 24415, + "bbox": [ + 185, + 405, + 237, + 132 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1617, + "bbox": [ + 906, + 391, + 32, + 61 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 8856, + "bbox": [ + 753, + 393, + 126, + 87 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 35776, + "bbox": [ + 934, + 277, + 194, + 211 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 949, + "bbox": [ + 623, + 413, + 52, + 43 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_013942_gtFine_panoptic.png", + "image_id": "frankfurt_000000_013942", + "segments_info": [ + { + "area": 625035, + "bbox": [ + 6, + 450, + 2030, + 529 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 198093, + "bbox": [ + 538, + 449, + 1503, + 508 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 464068, + "bbox": [ + 6, + 5, + 2037, + 523 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 10723, + "bbox": [ + 48, + 449, + 848, + 175 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 75179, + "bbox": [ + 6, + 357, + 402, + 271 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 43633, + "bbox": [ + 68, + 53, + 1975, + 773 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9914, + "bbox": [ + 341, + 49, + 1249, + 352 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 17803, + "bbox": [ + 138, + 202, + 1424, + 392 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 276422, + "bbox": [ + 291, + 5, + 1379, + 466 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 38213, + "bbox": [ + 971, + 10, + 468, + 202 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 770, + "bbox": [ + 1218, + 428, + 82, + 25 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 6328, + "bbox": [ + 1794, + 365, + 111, + 195 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1198, + "bbox": [ + 1682, + 401, + 35, + 56 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 6167, + "bbox": [ + 405, + 436, + 139, + 64 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 12390, + "bbox": [ + 1066, + 423, + 211, + 87 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 26110, + "bbox": [ + 872, + 416, + 210, + 157 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2474, + "bbox": [ + 1646, + 423, + 102, + 41 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 18491, + "bbox": [ + 1770, + 434, + 167, + 191 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_014480_gtFine_panoptic.png", + "image_id": "frankfurt_000000_014480", + "segments_info": [ + { + "area": 696709, + "bbox": [ + 6, + 440, + 2037, + 539 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 91563, + "bbox": [ + 300, + 415, + 1743, + 441 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 313629, + "bbox": [ + 6, + 5, + 2037, + 452 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5945, + "bbox": [ + 440, + 411, + 574, + 63 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 15458, + "bbox": [ + 169, + 17, + 1819, + 465 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4704, + "bbox": [ + 498, + 247, + 1383, + 100 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 3716, + "bbox": [ + 95, + 256, + 1369, + 70 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 361668, + "bbox": [ + 12, + 5, + 1966, + 439 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 22224, + "bbox": [ + 990, + 10, + 242, + 125 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 29180, + "bbox": [ + 1332, + 246, + 289, + 465 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 55707, + "bbox": [ + 1369, + 242, + 279, + 505 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 34699, + "bbox": [ + 237, + 259, + 255, + 467 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 49017, + "bbox": [ + 130, + 252, + 314, + 501 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 27592, + "bbox": [ + 600, + 380, + 362, + 107 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 61881, + "bbox": [ + 1009, + 339, + 597, + 206 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 21200, + "bbox": [ + 6, + 386, + 197, + 118 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_015389_gtFine_panoptic.png", + "image_id": "frankfurt_000000_015389", + "segments_info": [ + { + "area": 745008, + "bbox": [ + 6, + 433, + 2036, + 546 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 170243, + "bbox": [ + 6, + 426, + 2037, + 325 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 371310, + "bbox": [ + 6, + 11, + 2037, + 489 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3921, + "bbox": [ + 828, + 412, + 285, + 33 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 49921, + "bbox": [ + 55, + 5, + 1813, + 604 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2874, + "bbox": [ + 367, + 288, + 877, + 132 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 431413, + "bbox": [ + 10, + 5, + 1731, + 549 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 25747, + "bbox": [ + 592, + 5, + 280, + 204 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 742, + "bbox": [ + 887, + 417, + 54, + 19 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 1698, + "bbox": [ + 1374, + 379, + 31, + 86 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1339, + "bbox": [ + 1438, + 382, + 27, + 74 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 964, + "bbox": [ + 1465, + 381, + 30, + 62 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1713, + "bbox": [ + 1410, + 378, + 32, + 86 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 450, + "bbox": [ + 1109, + 405, + 18, + 41 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 20494, + "bbox": [ + 674, + 404, + 191, + 132 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 462, + "bbox": [ + 1040, + 416, + 27, + 19 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 9034, + "bbox": [ + 1458, + 405, + 165, + 116 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 69, + "bbox": [ + 1116, + 428, + 6, + 23 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_015676_gtFine_panoptic.png", + "image_id": "frankfurt_000000_015676", + "segments_info": [ + { + "area": 797758, + "bbox": [ + 6, + 418, + 2037, + 561 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 81188, + "bbox": [ + 6, + 428, + 2037, + 283 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 352296, + "bbox": [ + 6, + 5, + 2037, + 424 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 9281, + "bbox": [ + 755, + 369, + 456, + 66 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 27331, + "bbox": [ + 6, + 413, + 406, + 119 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 35233, + "bbox": [ + 342, + 5, + 1578, + 564 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1786, + "bbox": [ + 359, + 183, + 880, + 189 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 21677, + "bbox": [ + 442, + 25, + 1551, + 347 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 208611, + "bbox": [ + 16, + 5, + 1487, + 394 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 36406, + "bbox": [ + 302, + 5, + 411, + 270 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3297, + "bbox": [ + 574, + 394, + 75, + 59 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 279, + "bbox": [ + 913, + 395, + 14, + 37 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 7657, + "bbox": [ + 1316, + 311, + 90, + 216 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 11615, + "bbox": [ + 442, + 373, + 141, + 107 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 7130, + "bbox": [ + 646, + 375, + 99, + 85 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 16458, + "bbox": [ + 962, + 363, + 167, + 134 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 12095, + "bbox": [ + 775, + 380, + 145, + 103 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 3048, + "bbox": [ + 1264, + 374, + 62, + 85 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2461, + "bbox": [ + 1301, + 376, + 45, + 94 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 6797, + "bbox": [ + 1389, + 362, + 92, + 136 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 31923, + "bbox": [ + 1451, + 306, + 252, + 222 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 90482, + "bbox": [ + 1604, + 289, + 428, + 285 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 6095, + "bbox": [ + 1314, + 405, + 99, + 158 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_016005_gtFine_panoptic.png", + "image_id": "frankfurt_000000_016005", + "segments_info": [ + { + "area": 661671, + "bbox": [ + 6, + 398, + 2035, + 565 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 256726, + "bbox": [ + 6, + 398, + 2037, + 581 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 221332, + "bbox": [ + 6, + 15, + 2037, + 464 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 9621, + "bbox": [ + 877, + 360, + 1166, + 66 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 40009, + "bbox": [ + 6, + 301, + 2037, + 183 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 88376, + "bbox": [ + 21, + 5, + 2004, + 666 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 494, + "bbox": [ + 1056, + 300, + 124, + 73 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1477, + "bbox": [ + 1061, + 331, + 281, + 58 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 343863, + "bbox": [ + 17, + 5, + 2026, + 450 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1203, + "bbox": [ + 399, + 435, + 94, + 23 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 109103, + "bbox": [ + 657, + 5, + 688, + 268 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1633, + "bbox": [ + 1008, + 384, + 260, + 36 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 274, + "bbox": [ + 959, + 385, + 14, + 36 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 373, + "bbox": [ + 574, + 401, + 32, + 32 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1584, + "bbox": [ + 670, + 395, + 54, + 44 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 22875, + "bbox": [ + 716, + 327, + 164, + 168 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 125, + "bbox": [ + 1050, + 396, + 12, + 17 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1382, + "bbox": [ + 1057, + 370, + 51, + 42 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 965, + "bbox": [ + 1132, + 389, + 44, + 27 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 331, + "bbox": [ + 1189, + 382, + 48, + 34 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 3357, + "bbox": [ + 1191, + 387, + 73, + 56 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2402, + "bbox": [ + 1263, + 378, + 58, + 49 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1767, + "bbox": [ + 1313, + 385, + 60, + 82 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 21565, + "bbox": [ + 1954, + 515, + 89, + 313 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 23211, + "bbox": [ + 1331, + 373, + 205, + 144 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2158, + "bbox": [ + 6, + 480, + 40, + 66 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1384, + "bbox": [ + 574, + 417, + 38, + 49 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 445, + "bbox": [ + 951, + 399, + 34, + 24 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_016286_gtFine_panoptic.png", + "image_id": "frankfurt_000000_016286", + "segments_info": [ + { + "area": 682431, + "bbox": [ + 6, + 417, + 2037, + 562 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 30631, + "bbox": [ + 6, + 413, + 2037, + 368 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 91344, + "bbox": [ + 6, + 5, + 832, + 451 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 9901, + "bbox": [ + 6, + 419, + 578, + 83 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 4771, + "bbox": [ + 1575, + 344, + 468, + 100 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 76611, + "bbox": [ + 146, + 5, + 1847, + 746 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 458, + "bbox": [ + 1116, + 306, + 177, + 74 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 59941, + "bbox": [ + 46, + 5, + 1738, + 449 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 402575, + "bbox": [ + 6, + 5, + 2037, + 478 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4661, + "bbox": [ + 6, + 379, + 560, + 61 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 128491, + "bbox": [ + 258, + 5, + 1098, + 247 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 149, + "bbox": [ + 467, + 590, + 18, + 16 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 37589, + "bbox": [ + 281, + 214, + 214, + 508 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 8240, + "bbox": [ + 867, + 383, + 108, + 100 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 25612, + "bbox": [ + 664, + 305, + 214, + 195 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1042, + "bbox": [ + 1119, + 395, + 44, + 30 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 137, + "bbox": [ + 1279, + 386, + 19, + 13 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1324, + "bbox": [ + 1285, + 388, + 47, + 36 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1402, + "bbox": [ + 1327, + 384, + 47, + 42 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2742, + "bbox": [ + 1360, + 382, + 73, + 47 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 574, + "bbox": [ + 1552, + 379, + 30, + 42 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 5972, + "bbox": [ + 1470, + 371, + 98, + 76 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 34257, + "bbox": [ + 1627, + 384, + 399, + 120 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 265, + "bbox": [ + 1205, + 399, + 26, + 17 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1174, + "bbox": [ + 1230, + 381, + 50, + 42 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 863, + "bbox": [ + 1265, + 396, + 21, + 52 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 64971, + "bbox": [ + 249, + 416, + 426, + 321 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 649, + "bbox": [ + 1260, + 383, + 31, + 56 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_017228_gtFine_panoptic.png", + "image_id": "frankfurt_000000_017228", + "segments_info": [ + { + "area": 815036, + "bbox": [ + 6, + 400, + 2037, + 579 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 6875, + "bbox": [ + 6, + 411, + 1437, + 62 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 49325, + "bbox": [ + 6, + 65, + 865, + 351 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 10048, + "bbox": [ + 1707, + 389, + 336, + 72 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 51665, + "bbox": [ + 11, + 5, + 1402, + 635 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3496, + "bbox": [ + 461, + 297, + 956, + 51 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 21407, + "bbox": [ + 100, + 5, + 1302, + 451 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 615427, + "bbox": [ + 8, + 5, + 2035, + 506 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 85559, + "bbox": [ + 389, + 5, + 869, + 251 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1819, + "bbox": [ + 327, + 387, + 48, + 43 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 98, + "bbox": [ + 566, + 388, + 6, + 21 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1335, + "bbox": [ + 429, + 364, + 27, + 88 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 944, + "bbox": [ + 1032, + 388, + 33, + 66 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2265, + "bbox": [ + 987, + 376, + 49, + 86 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 395, + "bbox": [ + 414, + 384, + 24, + 37 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1618, + "bbox": [ + 376, + 388, + 54, + 36 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1318, + "bbox": [ + 231, + 383, + 40, + 49 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3725, + "bbox": [ + 135, + 382, + 112, + 54 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 349, + "bbox": [ + 549, + 394, + 45, + 16 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2226, + "bbox": [ + 453, + 362, + 53, + 61 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1651, + "bbox": [ + 1055, + 397, + 52, + 43 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 8084, + "bbox": [ + 1152, + 395, + 125, + 83 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 351, + "bbox": [ + 525, + 386, + 15, + 32 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 991, + "bbox": [ + 988, + 398, + 45, + 80 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 1065, + "bbox": [ + 1031, + 416, + 35, + 50 + ], + "category_id": 32, + "id": 32002, + "iscrowd": 0 + }, + { + "area": 476, + "bbox": [ + 6, + 405, + 23, + 33 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_017476_gtFine_panoptic.png", + "image_id": "frankfurt_000000_017476", + "segments_info": [ + { + "area": 838467, + "bbox": [ + 6, + 409, + 2037, + 570 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 8053, + "bbox": [ + 236, + 411, + 1372, + 89 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 55410, + "bbox": [ + 6, + 5, + 1235, + 432 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 42662, + "bbox": [ + 32, + 5, + 1663, + 477 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1331, + "bbox": [ + 614, + 193, + 416, + 172 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2404, + "bbox": [ + 108, + 295, + 1051, + 92 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 612638, + "bbox": [ + 85, + 7, + 1958, + 549 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 68451, + "bbox": [ + 9, + 5, + 898, + 235 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2607, + "bbox": [ + 425, + 370, + 60, + 76 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 17789, + "bbox": [ + 457, + 329, + 212, + 210 + ], + "category_id": 25, + "id": 25, + "iscrowd": 1 + }, + { + "area": 1697, + "bbox": [ + 329, + 389, + 86, + 35 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 5070, + "bbox": [ + 833, + 403, + 226, + 45 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 184, + "bbox": [ + 1034, + 405, + 18, + 14 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 831, + "bbox": [ + 995, + 387, + 16, + 68 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1041, + "bbox": [ + 922, + 386, + 36, + 56 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 120, + "bbox": [ + 104, + 393, + 8, + 21 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 863, + "bbox": [ + 109, + 381, + 43, + 38 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 694, + "bbox": [ + 118, + 390, + 33, + 48 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 5505, + "bbox": [ + 136, + 374, + 103, + 75 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 190, + "bbox": [ + 284, + 400, + 19, + 22 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2622, + "bbox": [ + 811, + 369, + 104, + 42 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1123, + "bbox": [ + 862, + 387, + 58, + 26 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2511, + "bbox": [ + 779, + 399, + 77, + 55 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 17492, + "bbox": [ + 639, + 382, + 173, + 138 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 27728, + "bbox": [ + 1167, + 372, + 228, + 151 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1211, + "bbox": [ + 6, + 352, + 32, + 61 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 24973, + "bbox": [ + 592, + 233, + 188, + 171 + ], + "category_id": 28, + "id": 28001, + "iscrowd": 0 + }, + { + "area": 4946, + "bbox": [ + 23, + 355, + 82, + 69 + ], + "category_id": 28, + "id": 28002, + "iscrowd": 0 + }, + { + "area": 3683, + "bbox": [ + 492, + 444, + 63, + 91 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 9360, + "bbox": [ + 551, + 388, + 130, + 194 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_018797_gtFine_panoptic.png", + "image_id": "frankfurt_000000_018797", + "segments_info": [ + { + "area": 839160, + "bbox": [ + 6, + 404, + 2037, + 575 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 50891, + "bbox": [ + 1228, + 431, + 815, + 123 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 350550, + "bbox": [ + 19, + 5, + 2024, + 477 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 11117, + "bbox": [ + 1822, + 441, + 221, + 55 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 10279, + "bbox": [ + 1444, + 18, + 33, + 502 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 381, + "bbox": [ + 1044, + 244, + 83, + 124 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 7347, + "bbox": [ + 1113, + 138, + 440, + 247 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 367434, + "bbox": [ + 6, + 5, + 1859, + 492 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 3898, + "bbox": [ + 297, + 444, + 1145, + 67 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 73141, + "bbox": [ + 730, + 5, + 373, + 318 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 919, + "bbox": [ + 1111, + 385, + 34, + 60 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 3398, + "bbox": [ + 1384, + 344, + 51, + 116 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 3188, + "bbox": [ + 1128, + 382, + 58, + 68 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3373, + "bbox": [ + 1180, + 366, + 121, + 107 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 15487, + "bbox": [ + 1198, + 379, + 176, + 129 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 391, + "bbox": [ + 419, + 402, + 40, + 21 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 8247, + "bbox": [ + 314, + 406, + 134, + 80 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 15350, + "bbox": [ + 105, + 410, + 195, + 99 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 10968, + "bbox": [ + 6, + 407, + 106, + 129 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 483, + "bbox": [ + 705, + 402, + 33, + 31 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 678, + "bbox": [ + 966, + 387, + 37, + 48 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2179, + "bbox": [ + 926, + 389, + 66, + 50 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 3512, + "bbox": [ + 876, + 395, + 71, + 72 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 14858, + "bbox": [ + 742, + 369, + 154, + 124 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 61875, + "bbox": [ + 410, + 364, + 350, + 233 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 8256, + "bbox": [ + 1013, + 339, + 87, + 105 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 1179, + "bbox": [ + 1389, + 413, + 40, + 59 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_019607_gtFine_panoptic.png", + "image_id": "frankfurt_000000_019607", + "segments_info": [ + { + "area": 887562, + "bbox": [ + 6, + 418, + 2037, + 561 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 68247, + "bbox": [ + 6, + 408, + 2037, + 177 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 540812, + "bbox": [ + 6, + 5, + 2037, + 452 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 32985, + "bbox": [ + 201, + 5, + 1485, + 511 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 16968, + "bbox": [ + 178, + 97, + 1542, + 263 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 21788, + "bbox": [ + 980, + 19, + 738, + 422 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 84103, + "bbox": [ + 403, + 146, + 918, + 298 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 157, + "bbox": [ + 621, + 420, + 45, + 7 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 77740, + "bbox": [ + 518, + 5, + 557, + 273 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 657, + "bbox": [ + 925, + 388, + 32, + 36 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 1639, + "bbox": [ + 425, + 405, + 63, + 45 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 2143, + "bbox": [ + 27, + 394, + 43, + 82 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 3442, + "bbox": [ + 120, + 365, + 51, + 116 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 913, + "bbox": [ + 995, + 371, + 20, + 66 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 499, + "bbox": [ + 1077, + 369, + 13, + 50 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2265, + "bbox": [ + 1135, + 354, + 38, + 102 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2351, + "bbox": [ + 1221, + 351, + 43, + 109 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 5104, + "bbox": [ + 1583, + 305, + 38, + 189 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 7150, + "bbox": [ + 1492, + 311, + 58, + 225 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 12073, + "bbox": [ + 1521, + 260, + 70, + 289 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1192, + "bbox": [ + 1716, + 327, + 32, + 77 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 6145, + "bbox": [ + 1786, + 277, + 107, + 232 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 12966, + "bbox": [ + 1722, + 295, + 122, + 214 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 746, + "bbox": [ + 950, + 383, + 28, + 49 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1733, + "bbox": [ + 963, + 381, + 79, + 54 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 576, + "bbox": [ + 629, + 397, + 38, + 24 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1540, + "bbox": [ + 537, + 398, + 57, + 39 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2649, + "bbox": [ + 471, + 399, + 77, + 47 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 9799, + "bbox": [ + 659, + 366, + 120, + 108 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 19998, + "bbox": [ + 759, + 365, + 179, + 141 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1126, + "bbox": [ + 295, + 396, + 31, + 53 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1142, + "bbox": [ + 971, + 406, + 77, + 33 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_020215_gtFine_panoptic.png", + "image_id": "frankfurt_000000_020215", + "segments_info": [ + { + "area": 731765, + "bbox": [ + 6, + 415, + 2036, + 564 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 43973, + "bbox": [ + 6, + 423, + 1226, + 252 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 250465, + "bbox": [ + 9, + 14, + 2034, + 454 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 17163, + "bbox": [ + 65, + 463, + 343, + 87 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 33873, + "bbox": [ + 44, + 5, + 924, + 628 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 206, + "bbox": [ + 838, + 358, + 12, + 20 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1008, + "bbox": [ + 1033, + 347, + 166, + 49 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 361662, + "bbox": [ + 6, + 5, + 1124, + 486 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 420, + "bbox": [ + 922, + 417, + 50, + 16 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 43708, + "bbox": [ + 945, + 9, + 277, + 265 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1878, + "bbox": [ + 612, + 401, + 140, + 46 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 1722, + "bbox": [ + 896, + 393, + 260, + 39 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 228, + "bbox": [ + 740, + 400, + 14, + 31 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 541, + "bbox": [ + 907, + 391, + 18, + 59 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 130, + "bbox": [ + 1170, + 390, + 13, + 14 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 505, + "bbox": [ + 1198, + 388, + 15, + 54 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 647, + "bbox": [ + 1210, + 387, + 15, + 56 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 10221, + "bbox": [ + 1377, + 337, + 86, + 237 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 172, + "bbox": [ + 1288, + 74, + 16, + 17 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 5657, + "bbox": [ + 541, + 363, + 75, + 159 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 14679, + "bbox": [ + 764, + 390, + 157, + 122 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 918, + "bbox": [ + 1127, + 396, + 42, + 40 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1802, + "bbox": [ + 1146, + 404, + 60, + 39 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 4159, + "bbox": [ + 1009, + 400, + 111, + 49 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 70218, + "bbox": [ + 1228, + 221, + 316, + 334 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 113799, + "bbox": [ + 1453, + 252, + 482, + 400 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 117049, + "bbox": [ + 1732, + 221, + 311, + 530 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1283, + "bbox": [ + 462, + 432, + 39, + 62 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1267, + "bbox": [ + 403, + 434, + 46, + 56 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 3565, + "bbox": [ + 552, + 448, + 56, + 115 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_020321_gtFine_panoptic.png", + "image_id": "frankfurt_000000_020321", + "segments_info": [ + { + "area": 793638, + "bbox": [ + 6, + 391, + 2035, + 588 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 141851, + "bbox": [ + 6, + 395, + 2037, + 433 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 474622, + "bbox": [ + 6, + 11, + 2037, + 558 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 49197, + "bbox": [ + 70, + 5, + 1894, + 672 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 15510, + "bbox": [ + 425, + 25, + 1479, + 312 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 11864, + "bbox": [ + 103, + 94, + 1434, + 276 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 217110, + "bbox": [ + 13, + 5, + 973, + 438 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 943, + "bbox": [ + 666, + 404, + 108, + 22 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 38666, + "bbox": [ + 723, + 5, + 326, + 231 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 97, + "bbox": [ + 550, + 376, + 17, + 14 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 3505, + "bbox": [ + 656, + 372, + 327, + 48 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 6207, + "bbox": [ + 182, + 399, + 133, + 62 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 572, + "bbox": [ + 177, + 375, + 15, + 82 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 947, + "bbox": [ + 319, + 393, + 28, + 55 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 183, + "bbox": [ + 465, + 374, + 19, + 23 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 160, + "bbox": [ + 521, + 377, + 12, + 15 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 17283, + "bbox": [ + 1516, + 274, + 93, + 294 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 6160, + "bbox": [ + 1626, + 374, + 64, + 184 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 14254, + "bbox": [ + 1675, + 296, + 104, + 261 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 44, + "bbox": [ + 1044, + 365, + 9, + 8 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1958, + "bbox": [ + 1123, + 350, + 26, + 108 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1449, + "bbox": [ + 1174, + 346, + 31, + 64 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 764, + "bbox": [ + 1204, + 345, + 38, + 98 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 1005, + "bbox": [ + 1233, + 344, + 26, + 108 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 2969, + "bbox": [ + 1214, + 335, + 61, + 126 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 1134, + "bbox": [ + 622, + 384, + 50, + 50 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 785, + "bbox": [ + 624, + 390, + 26, + 48 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2232, + "bbox": [ + 552, + 378, + 80, + 63 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1908, + "bbox": [ + 554, + 395, + 57, + 56 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 5078, + "bbox": [ + 485, + 392, + 90, + 69 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 6008, + "bbox": [ + 396, + 385, + 100, + 84 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 701, + "bbox": [ + 807, + 382, + 31, + 25 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 787, + "bbox": [ + 882, + 377, + 34, + 29 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 4344, + "bbox": [ + 1497, + 348, + 168, + 101 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 412, + "bbox": [ + 932, + 378, + 20, + 24 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1095, + "bbox": [ + 972, + 364, + 62, + 66 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 3248, + "bbox": [ + 985, + 369, + 77, + 71 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 5752, + "bbox": [ + 1026, + 382, + 105, + 73 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1328, + "bbox": [ + 367, + 414, + 41, + 53 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_020880_gtFine_panoptic.png", + "image_id": "frankfurt_000000_020880", + "segments_info": [ + { + "area": 717113, + "bbox": [ + 6, + 424, + 2036, + 555 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 85817, + "bbox": [ + 609, + 425, + 1434, + 327 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 490821, + "bbox": [ + 6, + 12, + 2037, + 564 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 339, + "bbox": [ + 841, + 418, + 21, + 20 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 30900, + "bbox": [ + 81, + 27, + 1795, + 646 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 10784, + "bbox": [ + 1545, + 47, + 110, + 169 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 15882, + "bbox": [ + 232, + 125, + 1332, + 267 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 257957, + "bbox": [ + 12, + 5, + 1076, + 467 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 42146, + "bbox": [ + 836, + 7, + 300, + 246 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 4602, + "bbox": [ + 653, + 394, + 442, + 76 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 375, + "bbox": [ + 600, + 417, + 21, + 37 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 372, + "bbox": [ + 547, + 385, + 22, + 24 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 218, + "bbox": [ + 222, + 410, + 18, + 19 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 491, + "bbox": [ + 265, + 398, + 21, + 42 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 607, + "bbox": [ + 635, + 399, + 23, + 73 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1306, + "bbox": [ + 619, + 400, + 22, + 84 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 54, + "bbox": [ + 1238, + 378, + 9, + 7 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 29264, + "bbox": [ + 1757, + 291, + 133, + 376 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 422, + "bbox": [ + 305, + 405, + 31, + 30 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1970, + "bbox": [ + 928, + 366, + 71, + 62 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 416, + "bbox": [ + 991, + 404, + 29, + 22 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 264, + "bbox": [ + 822, + 406, + 22, + 30 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3753, + "bbox": [ + 520, + 408, + 91, + 80 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3829, + "bbox": [ + 497, + 422, + 72, + 78 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 14181, + "bbox": [ + 691, + 397, + 157, + 116 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 10588, + "bbox": [ + 353, + 404, + 161, + 110 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 10698, + "bbox": [ + 284, + 435, + 147, + 105 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 33699, + "bbox": [ + 27, + 424, + 290, + 151 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 3474, + "bbox": [ + 6, + 439, + 31, + 153 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 55, + "bbox": [ + 1033, + 400, + 19, + 5 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 506, + "bbox": [ + 1018, + 403, + 26, + 28 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 3198, + "bbox": [ + 1081, + 374, + 107, + 110 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2140, + "bbox": [ + 1101, + 378, + 120, + 110 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 13603, + "bbox": [ + 1109, + 384, + 167, + 132 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 45083, + "bbox": [ + 1223, + 398, + 332, + 188 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 4205, + "bbox": [ + 933, + 420, + 74, + 77 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 90, + "bbox": [ + 307, + 429, + 20, + 6 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_021667_gtFine_panoptic.png", + "image_id": "frankfurt_000000_021667", + "segments_info": [ + { + "area": 737499, + "bbox": [ + 6, + 386, + 1918, + 593 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 217855, + "bbox": [ + 6, + 412, + 2035, + 545 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 748891, + "bbox": [ + 6, + 5, + 2037, + 513 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 56274, + "bbox": [ + 29, + 5, + 2014, + 832 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 300, + "bbox": [ + 935, + 303, + 88, + 64 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 316, + "bbox": [ + 934, + 341, + 243, + 33 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 23577, + "bbox": [ + 716, + 151, + 477, + 248 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 37751, + "bbox": [ + 687, + 5, + 245, + 187 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 694, + "bbox": [ + 1255, + 370, + 22, + 57 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 269, + "bbox": [ + 1178, + 379, + 12, + 30 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 275, + "bbox": [ + 1163, + 376, + 14, + 29 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 277, + "bbox": [ + 900, + 374, + 27, + 26 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 210, + "bbox": [ + 794, + 395, + 24, + 13 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 297, + "bbox": [ + 815, + 390, + 24, + 15 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 305, + "bbox": [ + 838, + 393, + 28, + 14 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 286, + "bbox": [ + 865, + 394, + 30, + 12 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 864, + "bbox": [ + 931, + 380, + 34, + 35 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 697, + "bbox": [ + 1009, + 378, + 42, + 34 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 571, + "bbox": [ + 1006, + 391, + 31, + 24 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2011, + "bbox": [ + 957, + 384, + 55, + 44 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 650, + "bbox": [ + 1050, + 374, + 20, + 46 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 7575, + "bbox": [ + 1064, + 357, + 93, + 92 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 566, + "bbox": [ + 898, + 395, + 27, + 29 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 10700, + "bbox": [ + 1846, + 351, + 109, + 160 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_021879_gtFine_panoptic.png", + "image_id": "frankfurt_000000_021879", + "segments_info": [ + { + "area": 902739, + "bbox": [ + 6, + 449, + 2037, + 530 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 15163, + "bbox": [ + 6, + 452, + 1908, + 229 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 332742, + "bbox": [ + 12, + 5, + 1658, + 456 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 811, + "bbox": [ + 210, + 435, + 57, + 26 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 14727, + "bbox": [ + 234, + 144, + 1709, + 343 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3754, + "bbox": [ + 465, + 292, + 1157, + 124 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 13416, + "bbox": [ + 321, + 177, + 1721, + 291 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 390253, + "bbox": [ + 6, + 5, + 2037, + 507 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 76972, + "bbox": [ + 166, + 5, + 1358, + 142 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 497, + "bbox": [ + 208, + 420, + 18, + 38 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 292, + "bbox": [ + 362, + 426, + 11, + 31 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 153, + "bbox": [ + 415, + 429, + 11, + 28 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 843, + "bbox": [ + 972, + 396, + 36, + 42 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 8121, + "bbox": [ + 80, + 409, + 131, + 76 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1336, + "bbox": [ + 419, + 428, + 54, + 32 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 582, + "bbox": [ + 572, + 430, + 20, + 36 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2087, + "bbox": [ + 589, + 412, + 54, + 52 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 524, + "bbox": [ + 1064, + 422, + 24, + 32 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 378, + "bbox": [ + 1053, + 420, + 21, + 39 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2221, + "bbox": [ + 1004, + 412, + 56, + 48 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 402, + "bbox": [ + 1151, + 420, + 21, + 34 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 331, + "bbox": [ + 1141, + 419, + 16, + 35 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2574, + "bbox": [ + 1087, + 411, + 61, + 49 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 321, + "bbox": [ + 1204, + 420, + 16, + 34 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 2045, + "bbox": [ + 1212, + 409, + 55, + 56 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 4482, + "bbox": [ + 1253, + 400, + 85, + 75 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1095, + "bbox": [ + 1316, + 396, + 32, + 97 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 51266, + "bbox": [ + 1322, + 314, + 278, + 228 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 906, + "bbox": [ + 975, + 425, + 35, + 39 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1254, + "bbox": [ + 703, + 420, + 58, + 51 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_022254_gtFine_panoptic.png", + "image_id": "frankfurt_000000_022254", + "segments_info": [ + { + "area": 797188, + "bbox": [ + 6, + 410, + 2037, + 569 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 105451, + "bbox": [ + 6, + 411, + 2037, + 251 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 547788, + "bbox": [ + 6, + 5, + 2037, + 455 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 33900, + "bbox": [ + 52, + 5, + 1949, + 618 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 6053, + "bbox": [ + 290, + 97, + 92, + 85 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 17206, + "bbox": [ + 141, + 11, + 1214, + 350 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 143059, + "bbox": [ + 578, + 5, + 541, + 445 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 14186, + "bbox": [ + 959, + 11, + 192, + 311 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 30605, + "bbox": [ + 6, + 372, + 1570, + 246 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 9123, + "bbox": [ + 21, + 284, + 126, + 163 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 214, + "bbox": [ + 1391, + 372, + 21, + 23 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2631, + "bbox": [ + 1772, + 351, + 40, + 106 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 3602, + "bbox": [ + 1849, + 336, + 49, + 117 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 21111, + "bbox": [ + 558, + 298, + 167, + 297 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 4262, + "bbox": [ + 1330, + 350, + 92, + 104 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 4826, + "bbox": [ + 669, + 338, + 154, + 105 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 15340, + "bbox": [ + 535, + 341, + 254, + 169 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1179, + "bbox": [ + 965, + 385, + 42, + 39 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 536, + "bbox": [ + 999, + 376, + 41, + 45 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 4623, + "bbox": [ + 1141, + 373, + 89, + 64 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 12639, + "bbox": [ + 1000, + 374, + 149, + 107 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 22363, + "bbox": [ + 545, + 400, + 210, + 265 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1100, + "bbox": [ + 1467, + 381, + 49, + 42 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 6568, + "bbox": [ + 1332, + 412, + 99, + 103 + ], + "category_id": 32, + "id": 32002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000000_022797_gtFine_panoptic.png", + "image_id": "frankfurt_000000_022797", + "segments_info": [ + { + "area": 764856, + "bbox": [ + 6, + 403, + 2037, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 128365, + "bbox": [ + 308, + 403, + 1735, + 487 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 335927, + "bbox": [ + 6, + 5, + 1648, + 491 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 27044, + "bbox": [ + 757, + 367, + 1097, + 113 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 42258, + "bbox": [ + 737, + 219, + 1200, + 276 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 27018, + "bbox": [ + 520, + 20, + 1493, + 595 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2426, + "bbox": [ + 609, + 132, + 628, + 218 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 16065, + "bbox": [ + 512, + 197, + 1173, + 390 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 364583, + "bbox": [ + 662, + 5, + 1381, + 476 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 25444, + "bbox": [ + 861, + 8, + 413, + 152 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 523, + "bbox": [ + 669, + 376, + 32, + 26 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 125, + "bbox": [ + 1017, + 396, + 7, + 20 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 198, + "bbox": [ + 994, + 395, + 10, + 27 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 52, + "bbox": [ + 1163, + 402, + 6, + 12 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 7230, + "bbox": [ + 1367, + 326, + 68, + 184 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 5355, + "bbox": [ + 1438, + 320, + 42, + 182 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 118, + "bbox": [ + 1028, + 401, + 14, + 14 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 667, + "bbox": [ + 1080, + 399, + 31, + 47 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 511, + "bbox": [ + 1162, + 386, + 38, + 18 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 435, + "bbox": [ + 1126, + 390, + 33, + 17 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 427, + "bbox": [ + 1101, + 388, + 32, + 18 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 55586, + "bbox": [ + 6, + 376, + 304, + 237 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 5720, + "bbox": [ + 631, + 402, + 129, + 80 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 746, + "bbox": [ + 900, + 377, + 50, + 42 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 12685, + "bbox": [ + 812, + 387, + 144, + 112 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 718, + "bbox": [ + 1048, + 407, + 34, + 29 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 668, + "bbox": [ + 1155, + 410, + 41, + 25 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1164, + "bbox": [ + 1180, + 391, + 37, + 81 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 5409, + "bbox": [ + 1199, + 369, + 114, + 110 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 3468, + "bbox": [ + 1241, + 380, + 84, + 116 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 12582, + "bbox": [ + 1278, + 377, + 166, + 135 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 174, + "bbox": [ + 1027, + 411, + 16, + 14 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 2372, + "bbox": [ + 582, + 404, + 119, + 88 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 6334, + "bbox": [ + 552, + 422, + 122, + 71 + ], + "category_id": 32, + "id": 32002, + "iscrowd": 0 + }, + { + "area": 559, + "bbox": [ + 1082, + 424, + 25, + 30 + ], + "category_id": 32, + "id": 32003, + "iscrowd": 0 + }, + { + "area": 2525, + "bbox": [ + 1522, + 383, + 38, + 98 + ], + "category_id": 32, + "id": 32004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_000538_gtFine_panoptic.png", + "image_id": "frankfurt_000001_000538", + "segments_info": [ + { + "area": 827591, + "bbox": [ + 6, + 416, + 2037, + 563 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 90266, + "bbox": [ + 6, + 421, + 2037, + 433 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 464419, + "bbox": [ + 6, + 5, + 2037, + 487 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 9426, + "bbox": [ + 1775, + 429, + 268, + 63 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 2706, + "bbox": [ + 84, + 416, + 825, + 96 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 49702, + "bbox": [ + 266, + 18, + 1747, + 545 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 13739, + "bbox": [ + 1628, + 104, + 318, + 129 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 18198, + "bbox": [ + 293, + 120, + 1469, + 375 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 301177, + "bbox": [ + 6, + 5, + 1959, + 527 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 5856, + "bbox": [ + 530, + 399, + 346, + 69 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 2604, + "bbox": [ + 178, + 372, + 51, + 78 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1138, + "bbox": [ + 137, + 396, + 36, + 53 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2264, + "bbox": [ + 97, + 379, + 47, + 78 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2111, + "bbox": [ + 66, + 396, + 38, + 89 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1425, + "bbox": [ + 444, + 373, + 34, + 67 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 6362, + "bbox": [ + 1423, + 339, + 69, + 147 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 10319, + "bbox": [ + 1466, + 339, + 142, + 190 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 4668, + "bbox": [ + 945, + 376, + 104, + 60 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2265, + "bbox": [ + 1159, + 373, + 71, + 45 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4091, + "bbox": [ + 1206, + 373, + 88, + 69 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 14281, + "bbox": [ + 1264, + 367, + 170, + 115 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 843, + "bbox": [ + 908, + 395, + 36, + 40 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1293, + "bbox": [ + 665, + 408, + 61, + 43 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 24674, + "bbox": [ + 1415, + 422, + 259, + 170 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_001464_gtFine_panoptic.png", + "image_id": "frankfurt_000001_001464", + "segments_info": [ + { + "area": 940076, + "bbox": [ + 6, + 367, + 2037, + 612 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 66056, + "bbox": [ + 6, + 367, + 1282, + 143 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 348316, + "bbox": [ + 12, + 5, + 2031, + 391 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 27524, + "bbox": [ + 102, + 5, + 892, + 489 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9970, + "bbox": [ + 186, + 5, + 394, + 312 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 16965, + "bbox": [ + 77, + 70, + 946, + 266 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 142726, + "bbox": [ + 6, + 8, + 2029, + 436 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1189, + "bbox": [ + 616, + 316, + 45, + 79 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1707, + "bbox": [ + 634, + 310, + 50, + 88 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 17952, + "bbox": [ + 1567, + 235, + 168, + 286 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 112, + "bbox": [ + 614, + 358, + 9, + 13 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1040, + "bbox": [ + 376, + 336, + 39, + 39 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1505, + "bbox": [ + 415, + 327, + 75, + 48 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 209164, + "bbox": [ + 1022, + 194, + 1021, + 272 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 33817, + "bbox": [ + 1499, + 375, + 288, + 215 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_002512_gtFine_panoptic.png", + "image_id": "frankfurt_000001_002512", + "segments_info": [ + { + "area": 737562, + "bbox": [ + 6, + 396, + 2037, + 583 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 13463, + "bbox": [ + 36, + 410, + 1294, + 89 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 408854, + "bbox": [ + 6, + 5, + 2037, + 462 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 47519, + "bbox": [ + 62, + 5, + 1893, + 481 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 135, + "bbox": [ + 1158, + 347, + 7, + 20 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 10916, + "bbox": [ + 248, + 234, + 1668, + 143 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 316762, + "bbox": [ + 6, + 5, + 2037, + 649 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 108462, + "bbox": [ + 6, + 408, + 1045, + 402 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 12104, + "bbox": [ + 522, + 375, + 601, + 54 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 1106, + "bbox": [ + 1870, + 388, + 26, + 60 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2258, + "bbox": [ + 1832, + 352, + 38, + 96 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 754, + "bbox": [ + 381, + 389, + 17, + 53 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 14300, + "bbox": [ + 1443, + 302, + 115, + 251 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 194, + "bbox": [ + 1116, + 384, + 16, + 19 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 64, + "bbox": [ + 1194, + 379, + 12, + 9 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 297, + "bbox": [ + 1198, + 378, + 20, + 35 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 902, + "bbox": [ + 1206, + 374, + 36, + 45 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1616, + "bbox": [ + 1229, + 376, + 59, + 46 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3138, + "bbox": [ + 1135, + 371, + 66, + 60 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 930, + "bbox": [ + 1971, + 401, + 27, + 51 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3669, + "bbox": [ + 1483, + 423, + 47, + 152 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_002646_gtFine_panoptic.png", + "image_id": "frankfurt_000001_002646", + "segments_info": [ + { + "area": 662421, + "bbox": [ + 6, + 407, + 2037, + 572 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 26290, + "bbox": [ + 6, + 412, + 1548, + 120 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 526231, + "bbox": [ + 6, + 5, + 2037, + 451 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2205, + "bbox": [ + 1423, + 385, + 148, + 65 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 74012, + "bbox": [ + 123, + 5, + 1682, + 657 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 6021, + "bbox": [ + 381, + 266, + 1017, + 115 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 8793, + "bbox": [ + 666, + 178, + 1311, + 194 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 40732, + "bbox": [ + 960, + 201, + 1083, + 221 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 237233, + "bbox": [ + 6, + 468, + 1005, + 511 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 92251, + "bbox": [ + 637, + 5, + 710, + 318 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 14768, + "bbox": [ + 6, + 358, + 1427, + 138 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 1348, + "bbox": [ + 907, + 397, + 100, + 26 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 682, + "bbox": [ + 370, + 401, + 18, + 53 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 832, + "bbox": [ + 347, + 395, + 20, + 63 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 412, + "bbox": [ + 390, + 390, + 14, + 63 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1127, + "bbox": [ + 209, + 379, + 50, + 95 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1454, + "bbox": [ + 216, + 391, + 27, + 90 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1196, + "bbox": [ + 308, + 398, + 28, + 62 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 327, + "bbox": [ + 652, + 384, + 17, + 33 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 144, + "bbox": [ + 666, + 384, + 10, + 23 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 802, + "bbox": [ + 630, + 385, + 22, + 49 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 895, + "bbox": [ + 595, + 383, + 20, + 69 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 540, + "bbox": [ + 765, + 375, + 22, + 90 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 2194, + "bbox": [ + 774, + 366, + 40, + 98 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1239, + "bbox": [ + 821, + 378, + 40, + 83 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 1090, + "bbox": [ + 817, + 376, + 21, + 82 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 547, + "bbox": [ + 875, + 385, + 17, + 46 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 244, + "bbox": [ + 900, + 388, + 10, + 35 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 194, + "bbox": [ + 1060, + 386, + 7, + 44 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 914, + "bbox": [ + 1142, + 383, + 35, + 63 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 1153, + "bbox": [ + 1128, + 380, + 29, + 66 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 1182, + "bbox": [ + 1106, + 376, + 27, + 70 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 2029, + "bbox": [ + 1075, + 382, + 40, + 89 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 121, + "bbox": [ + 1177, + 428, + 11, + 18 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 1255, + "bbox": [ + 2008, + 351, + 35, + 51 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 1689, + "bbox": [ + 1426, + 365, + 44, + 90 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 1763, + "bbox": [ + 1465, + 366, + 29, + 85 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 2915, + "bbox": [ + 1485, + 360, + 49, + 100 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 867, + "bbox": [ + 801, + 373, + 19, + 68 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1735, + "bbox": [ + 657, + 372, + 54, + 95 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1540, + "bbox": [ + 574, + 400, + 91, + 45 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 258, + "bbox": [ + 1178, + 394, + 26, + 30 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 15991, + "bbox": [ + 1186, + 355, + 156, + 132 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 21490, + "bbox": [ + 1551, + 342, + 225, + 167 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 44910, + "bbox": [ + 1676, + 337, + 336, + 202 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 12784, + "bbox": [ + 1941, + 399, + 102, + 171 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3274, + "bbox": [ + 1007, + 360, + 60, + 67 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 932, + "bbox": [ + 785, + 420, + 79, + 41 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3855, + "bbox": [ + 629, + 411, + 105, + 64 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 838, + "bbox": [ + 1371, + 400, + 32, + 53 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_002759_gtFine_panoptic.png", + "image_id": "frankfurt_000001_002759", + "segments_info": [ + { + "area": 754728, + "bbox": [ + 6, + 411, + 2037, + 568 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 179861, + "bbox": [ + 6, + 433, + 2037, + 267 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 564384, + "bbox": [ + 6, + 5, + 2037, + 514 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 28836, + "bbox": [ + 1508, + 318, + 405, + 138 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 52826, + "bbox": [ + 115, + 5, + 1609, + 642 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 18251, + "bbox": [ + 305, + 5, + 1355, + 373 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4440, + "bbox": [ + 1382, + 197, + 228, + 243 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 54770, + "bbox": [ + 762, + 89, + 1281, + 348 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1028, + "bbox": [ + 767, + 419, + 70, + 21 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 79928, + "bbox": [ + 923, + 9, + 338, + 324 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 6793, + "bbox": [ + 137, + 390, + 497, + 106 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 2721, + "bbox": [ + 651, + 384, + 553, + 64 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 1767, + "bbox": [ + 6, + 407, + 31, + 101 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1822, + "bbox": [ + 82, + 373, + 35, + 127 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3043, + "bbox": [ + 47, + 382, + 38, + 119 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 4886, + "bbox": [ + 96, + 365, + 55, + 133 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 3346, + "bbox": [ + 243, + 370, + 47, + 117 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 579, + "bbox": [ + 364, + 389, + 21, + 78 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2176, + "bbox": [ + 337, + 389, + 40, + 88 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1275, + "bbox": [ + 503, + 385, + 21, + 77 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1125, + "bbox": [ + 487, + 392, + 21, + 71 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1295, + "bbox": [ + 565, + 376, + 27, + 79 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 10671, + "bbox": [ + 672, + 314, + 77, + 237 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 531, + "bbox": [ + 1357, + 376, + 19, + 57 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 949, + "bbox": [ + 1379, + 368, + 29, + 69 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 1490, + "bbox": [ + 1396, + 368, + 30, + 69 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1610, + "bbox": [ + 1614, + 369, + 37, + 103 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 209, + "bbox": [ + 1128, + 404, + 18, + 17 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1192, + "bbox": [ + 1090, + 402, + 43, + 34 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 25198, + "bbox": [ + 1181, + 349, + 194, + 167 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 28107, + "bbox": [ + 1801, + 324, + 242, + 150 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 185, + "bbox": [ + 1375, + 407, + 15, + 30 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 456, + "bbox": [ + 1419, + 409, + 25, + 27 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 951, + "bbox": [ + 1600, + 412, + 62, + 56 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 177, + "bbox": [ + 1850, + 452, + 27, + 8 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_003056_gtFine_panoptic.png", + "image_id": "frankfurt_000001_003056", + "segments_info": [ + { + "area": 820665, + "bbox": [ + 6, + 411, + 2037, + 568 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 34652, + "bbox": [ + 276, + 426, + 1767, + 149 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 372596, + "bbox": [ + 6, + 5, + 2037, + 485 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4318, + "bbox": [ + 6, + 462, + 350, + 64 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 18736, + "bbox": [ + 6, + 401, + 285, + 90 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 34697, + "bbox": [ + 48, + 32, + 1757, + 490 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1869, + "bbox": [ + 296, + 336, + 994, + 47 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 23204, + "bbox": [ + 338, + 21, + 1705, + 413 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 304683, + "bbox": [ + 6, + 5, + 1340, + 627 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 31571, + "bbox": [ + 6, + 441, + 893, + 244 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 90349, + "bbox": [ + 428, + 5, + 701, + 297 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 392, + "bbox": [ + 889, + 408, + 34, + 17 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 2392, + "bbox": [ + 922, + 400, + 62, + 46 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 375, + "bbox": [ + 985, + 419, + 25, + 16 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 28580, + "bbox": [ + 1941, + 188, + 102, + 414 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 243, + "bbox": [ + 1056, + 402, + 18, + 26 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 618, + "bbox": [ + 1152, + 396, + 27, + 57 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2079, + "bbox": [ + 1164, + 387, + 75, + 72 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2443, + "bbox": [ + 1186, + 396, + 52, + 74 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 3434, + "bbox": [ + 1219, + 379, + 68, + 107 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 22099, + "bbox": [ + 1258, + 353, + 184, + 152 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 15294, + "bbox": [ + 617, + 331, + 198, + 115 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 40500, + "bbox": [ + 340, + 306, + 312, + 184 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_003588_gtFine_panoptic.png", + "image_id": "frankfurt_000001_003588", + "segments_info": [ + { + "area": 926587, + "bbox": [ + 6, + 352, + 2037, + 627 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 86182, + "bbox": [ + 6, + 352, + 2037, + 381 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 361108, + "bbox": [ + 6, + 5, + 2037, + 452 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 7555, + "bbox": [ + 936, + 220, + 658, + 147 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 2230, + "bbox": [ + 935, + 336, + 120, + 28 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 27109, + "bbox": [ + 6, + 20, + 1805, + 487 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1607, + "bbox": [ + 884, + 217, + 770, + 104 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 8052, + "bbox": [ + 613, + 158, + 1111, + 164 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 119530, + "bbox": [ + 646, + 5, + 1397, + 416 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1910, + "bbox": [ + 639, + 321, + 1013, + 80 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 451, + "bbox": [ + 1441, + 332, + 35, + 32 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 54034, + "bbox": [ + 1561, + 361, + 482, + 206 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 214, + "bbox": [ + 6, + 358, + 3, + 122 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 3084, + "bbox": [ + 24, + 361, + 36, + 114 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 245, + "bbox": [ + 1543, + 320, + 14, + 24 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 541, + "bbox": [ + 989, + 330, + 25, + 46 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 341, + "bbox": [ + 1049, + 333, + 18, + 31 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2853, + "bbox": [ + 1355, + 330, + 45, + 119 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 784, + "bbox": [ + 1065, + 333, + 69, + 28 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 606, + "bbox": [ + 1219, + 331, + 33, + 23 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1330, + "bbox": [ + 1162, + 335, + 63, + 34 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 7212, + "bbox": [ + 1072, + 338, + 124, + 75 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 3031, + "bbox": [ + 1631, + 328, + 105, + 60 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1744, + "bbox": [ + 1307, + 333, + 59, + 45 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3157, + "bbox": [ + 1245, + 334, + 78, + 50 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1239, + "bbox": [ + 1419, + 334, + 44, + 45 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1762, + "bbox": [ + 1364, + 334, + 70, + 50 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2775, + "bbox": [ + 1468, + 332, + 99, + 36 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1264, + "bbox": [ + 550, + 362, + 50, + 44 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 829, + "bbox": [ + 978, + 349, + 49, + 33 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 840, + "bbox": [ + 1029, + 348, + 48, + 31 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 823, + "bbox": [ + 1352, + 381, + 49, + 89 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_004327_gtFine_panoptic.png", + "image_id": "frankfurt_000001_004327", + "segments_info": [ + { + "area": 725290, + "bbox": [ + 6, + 542, + 2037, + 437 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 61337, + "bbox": [ + 6, + 493, + 1631, + 72 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 9629, + "bbox": [ + 820, + 7, + 1198, + 393 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 102328, + "bbox": [ + 186, + 395, + 1830, + 150 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 11282, + "bbox": [ + 6, + 382, + 196, + 113 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 18694, + "bbox": [ + 575, + 9, + 1431, + 535 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8641, + "bbox": [ + 535, + 125, + 125, + 125 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 500599, + "bbox": [ + 6, + 9, + 2037, + 487 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 244522, + "bbox": [ + 8, + 5, + 2035, + 377 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 12879, + "bbox": [ + 221, + 330, + 80, + 250 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 11733, + "bbox": [ + 995, + 331, + 121, + 246 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 11577, + "bbox": [ + 960, + 332, + 79, + 251 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 19047, + "bbox": [ + 1372, + 346, + 200, + 270 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 4836, + "bbox": [ + 1741, + 302, + 103, + 353 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 24663, + "bbox": [ + 1733, + 273, + 196, + 401 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 18553, + "bbox": [ + 1655, + 302, + 152, + 388 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 36881, + "bbox": [ + 1565, + 258, + 190, + 458 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 5251, + "bbox": [ + 1970, + 397, + 73, + 245 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 8678, + "bbox": [ + 1972, + 321, + 71, + 357 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_004736_gtFine_panoptic.png", + "image_id": "frankfurt_000001_004736", + "segments_info": [ + { + "area": 874517, + "bbox": [ + 6, + 389, + 2037, + 590 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 67133, + "bbox": [ + 6, + 399, + 2037, + 267 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 235964, + "bbox": [ + 7, + 14, + 2036, + 417 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 92133, + "bbox": [ + 1155, + 316, + 888, + 236 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 56296, + "bbox": [ + 6, + 199, + 2037, + 223 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 32564, + "bbox": [ + 277, + 15, + 1637, + 575 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3115, + "bbox": [ + 603, + 104, + 814, + 246 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 3584, + "bbox": [ + 1113, + 235, + 264, + 170 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 257862, + "bbox": [ + 8, + 5, + 1869, + 425 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 48083, + "bbox": [ + 6, + 395, + 835, + 136 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 94269, + "bbox": [ + 316, + 5, + 930, + 292 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 6271, + "bbox": [ + 133, + 357, + 465, + 62 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 607, + "bbox": [ + 261, + 356, + 16, + 59 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 146, + "bbox": [ + 274, + 378, + 6, + 36 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 755, + "bbox": [ + 312, + 364, + 21, + 50 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 830, + "bbox": [ + 759, + 368, + 18, + 63 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 561, + "bbox": [ + 1263, + 374, + 21, + 57 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 358, + "bbox": [ + 1373, + 385, + 19, + 46 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 518, + "bbox": [ + 734, + 367, + 24, + 49 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 831, + "bbox": [ + 979, + 382, + 30, + 45 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1721, + "bbox": [ + 950, + 375, + 40, + 61 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 12559, + "bbox": [ + 834, + 341, + 123, + 122 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 539, + "bbox": [ + 148, + 385, + 30, + 33 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 935, + "bbox": [ + 172, + 379, + 38, + 38 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1055, + "bbox": [ + 712, + 386, + 62, + 42 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_004859_gtFine_panoptic.png", + "image_id": "frankfurt_000001_004859", + "segments_info": [ + { + "area": 730754, + "bbox": [ + 6, + 378, + 2032, + 601 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 136051, + "bbox": [ + 6, + 380, + 2036, + 575 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 183567, + "bbox": [ + 226, + 13, + 1787, + 375 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 16304, + "bbox": [ + 1304, + 293, + 702, + 181 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 37787, + "bbox": [ + 6, + 116, + 2007, + 281 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 56879, + "bbox": [ + 190, + 19, + 1853, + 751 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 13851, + "bbox": [ + 879, + 27, + 1164, + 388 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 349868, + "bbox": [ + 7, + 5, + 1996, + 561 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 33321, + "bbox": [ + 6, + 388, + 803, + 86 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 109587, + "bbox": [ + 12, + 5, + 1173, + 246 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 4263, + "bbox": [ + 247, + 346, + 409, + 45 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 597, + "bbox": [ + 65, + 336, + 14, + 61 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1289, + "bbox": [ + 36, + 337, + 32, + 66 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 380, + "bbox": [ + 428, + 354, + 14, + 33 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 316, + "bbox": [ + 501, + 356, + 16, + 34 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1769, + "bbox": [ + 710, + 340, + 53, + 105 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 328, + "bbox": [ + 759, + 371, + 26, + 18 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 372, + "bbox": [ + 789, + 371, + 29, + 20 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 141, + "bbox": [ + 818, + 371, + 12, + 20 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2499, + "bbox": [ + 823, + 364, + 57, + 51 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2297, + "bbox": [ + 712, + 385, + 42, + 75 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_005184_gtFine_panoptic.png", + "image_id": "frankfurt_000001_005184", + "segments_info": [ + { + "area": 713918, + "bbox": [ + 6, + 404, + 2035, + 575 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 102796, + "bbox": [ + 6, + 405, + 974, + 268 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 183305, + "bbox": [ + 6, + 21, + 2037, + 414 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 287258, + "bbox": [ + 1243, + 95, + 800, + 697 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 36781, + "bbox": [ + 84, + 5, + 1660, + 535 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1599, + "bbox": [ + 845, + 291, + 528, + 68 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 60162, + "bbox": [ + 388, + 288, + 1485, + 452 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 213828, + "bbox": [ + 649, + 14, + 991, + 384 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 170372, + "bbox": [ + 12, + 5, + 1191, + 242 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 16873, + "bbox": [ + 76, + 164, + 1084, + 274 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 387, + "bbox": [ + 974, + 379, + 37, + 25 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 2184, + "bbox": [ + 6, + 382, + 41, + 64 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 2113, + "bbox": [ + 229, + 354, + 35, + 88 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 958, + "bbox": [ + 385, + 362, + 18, + 73 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 102, + "bbox": [ + 464, + 240, + 13, + 13 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 981, + "bbox": [ + 624, + 364, + 24, + 62 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 954, + "bbox": [ + 646, + 369, + 27, + 58 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 372, + "bbox": [ + 755, + 368, + 10, + 56 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 535, + "bbox": [ + 737, + 372, + 19, + 47 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 238, + "bbox": [ + 903, + 377, + 14, + 24 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 150, + "bbox": [ + 916, + 377, + 13, + 23 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 644, + "bbox": [ + 926, + 378, + 20, + 50 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 818, + "bbox": [ + 1005, + 377, + 22, + 57 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 790, + "bbox": [ + 1021, + 377, + 24, + 71 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 424, + "bbox": [ + 1092, + 383, + 18, + 65 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 1472, + "bbox": [ + 1066, + 371, + 25, + 79 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1100, + "bbox": [ + 863, + 372, + 28, + 75 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1126, + "bbox": [ + 979, + 387, + 49, + 40 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 223, + "bbox": [ + 1220, + 383, + 29, + 16 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 8370, + "bbox": [ + 1121, + 382, + 115, + 87 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2139, + "bbox": [ + 829, + 402, + 80, + 51 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_005410_gtFine_panoptic.png", + "image_id": "frankfurt_000001_005410", + "segments_info": [ + { + "area": 570909, + "bbox": [ + 6, + 421, + 2033, + 558 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 220622, + "bbox": [ + 385, + 415, + 1658, + 482 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 167030, + "bbox": [ + 104, + 39, + 1939, + 430 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1348, + "bbox": [ + 1029, + 382, + 97, + 37 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 28181, + "bbox": [ + 6, + 368, + 352, + 231 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 48209, + "bbox": [ + 63, + 9, + 1923, + 664 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 15280, + "bbox": [ + 635, + 13, + 609, + 319 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 34428, + "bbox": [ + 33, + 275, + 704, + 431 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 516106, + "bbox": [ + 6, + 5, + 2037, + 559 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 30613, + "bbox": [ + 15, + 5, + 499, + 139 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 8346, + "bbox": [ + 1218, + 312, + 229, + 269 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 2036, + "bbox": [ + 183, + 386, + 249, + 34 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 5385, + "bbox": [ + 1564, + 391, + 167, + 129 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 2253, + "bbox": [ + 739, + 356, + 47, + 88 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 9761, + "bbox": [ + 1119, + 296, + 66, + 273 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 26173, + "bbox": [ + 1139, + 279, + 144, + 321 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 20754, + "bbox": [ + 1269, + 281, + 131, + 324 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1667, + "bbox": [ + 1549, + 366, + 32, + 89 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1685, + "bbox": [ + 1712, + 362, + 29, + 92 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 396, + "bbox": [ + 1575, + 376, + 24, + 30 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 16750, + "bbox": [ + 1563, + 281, + 123, + 266 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1363, + "bbox": [ + 1919, + 354, + 29, + 75 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 3085, + "bbox": [ + 1859, + 338, + 37, + 170 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 2069, + "bbox": [ + 1842, + 340, + 46, + 148 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 2777, + "bbox": [ + 2003, + 346, + 40, + 112 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1537, + "bbox": [ + 937, + 393, + 78, + 49 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1381, + "bbox": [ + 6, + 383, + 56, + 37 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1321, + "bbox": [ + 113, + 385, + 70, + 27 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3914, + "bbox": [ + 420, + 379, + 86, + 138 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 745, + "bbox": [ + 826, + 393, + 57, + 44 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 874, + "bbox": [ + 1690, + 380, + 32, + 60 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1290, + "bbox": [ + 1853, + 384, + 55, + 90 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 65394, + "bbox": [ + 444, + 353, + 334, + 257 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1040, + "bbox": [ + 1373, + 407, + 119, + 112 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1956, + "bbox": [ + 804, + 397, + 59, + 63 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 273, + "bbox": [ + 1125, + 442, + 13, + 42 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 4346, + "bbox": [ + 1883, + 408, + 63, + 107 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 19029, + "bbox": [ + 1904, + 403, + 139, + 224 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_005703_gtFine_panoptic.png", + "image_id": "frankfurt_000001_005703", + "segments_info": [ + { + "area": 675658, + "bbox": [ + 6, + 412, + 2032, + 567 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 135231, + "bbox": [ + 6, + 409, + 2034, + 547 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 214700, + "bbox": [ + 545, + 11, + 1498, + 513 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 46718, + "bbox": [ + 7, + 20, + 1639, + 595 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8484, + "bbox": [ + 307, + 18, + 967, + 349 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2830, + "bbox": [ + 411, + 154, + 984, + 240 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 494973, + "bbox": [ + 6, + 5, + 1811, + 567 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 7301, + "bbox": [ + 7, + 449, + 630, + 61 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 75461, + "bbox": [ + 6, + 6, + 1010, + 406 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1370, + "bbox": [ + 119, + 438, + 46, + 44 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 7292, + "bbox": [ + 656, + 400, + 203, + 65 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 274, + "bbox": [ + 177, + 444, + 27, + 27 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1662, + "bbox": [ + 521, + 394, + 44, + 99 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2127, + "bbox": [ + 467, + 387, + 41, + 105 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2523, + "bbox": [ + 421, + 384, + 56, + 89 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1034, + "bbox": [ + 632, + 392, + 32, + 77 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 1207, + "bbox": [ + 602, + 400, + 35, + 75 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 894, + "bbox": [ + 700, + 394, + 30, + 73 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 124570, + "bbox": [ + 1723, + 285, + 320, + 564 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 808, + "bbox": [ + 1114, + 384, + 38, + 60 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3433, + "bbox": [ + 1127, + 383, + 83, + 66 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 5252, + "bbox": [ + 978, + 394, + 96, + 74 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 4025, + "bbox": [ + 849, + 374, + 68, + 71 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 1547, + "bbox": [ + 472, + 443, + 30, + 76 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2700, + "bbox": [ + 425, + 436, + 49, + 94 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1402, + "bbox": [ + 527, + 433, + 31, + 72 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 941, + "bbox": [ + 632, + 426, + 25, + 60 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 962, + "bbox": [ + 607, + 426, + 26, + 66 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 702, + "bbox": [ + 699, + 426, + 28, + 51 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_005898_gtFine_panoptic.png", + "image_id": "frankfurt_000001_005898", + "segments_info": [ + { + "area": 643095, + "bbox": [ + 6, + 390, + 2032, + 589 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 233811, + "bbox": [ + 6, + 410, + 2037, + 544 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 41701, + "bbox": [ + 691, + 173, + 1352, + 264 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1650, + "bbox": [ + 829, + 388, + 112, + 38 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 49368, + "bbox": [ + 6, + 22, + 1868, + 725 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1260, + "bbox": [ + 698, + 328, + 492, + 40 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 487762, + "bbox": [ + 7, + 5, + 2036, + 453 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 5528, + "bbox": [ + 6, + 415, + 782, + 78 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 109051, + "bbox": [ + 10, + 5, + 1062, + 316 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2925, + "bbox": [ + 897, + 383, + 141, + 51 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 303, + "bbox": [ + 817, + 396, + 15, + 26 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 212, + "bbox": [ + 801, + 398, + 11, + 23 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 521, + "bbox": [ + 692, + 390, + 21, + 32 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 3323, + "bbox": [ + 1033, + 245, + 67, + 173 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 743, + "bbox": [ + 1051, + 409, + 30, + 41 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3201, + "bbox": [ + 994, + 403, + 69, + 56 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 186371, + "bbox": [ + 52, + 152, + 604, + 383 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_007285_gtFine_panoptic.png", + "image_id": "frankfurt_000001_007285", + "segments_info": [ + { + "area": 587938, + "bbox": [ + 6, + 472, + 2034, + 507 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 35293, + "bbox": [ + 251, + 453, + 420, + 171 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 318273, + "bbox": [ + 637, + 14, + 1406, + 466 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 35194, + "bbox": [ + 6, + 300, + 700, + 205 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 279961, + "bbox": [ + 1481, + 91, + 562, + 762 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 37876, + "bbox": [ + 39, + 5, + 1708, + 566 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9922, + "bbox": [ + 388, + 13, + 1099, + 390 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 28351, + "bbox": [ + 109, + 175, + 1669, + 481 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 134679, + "bbox": [ + 8, + 5, + 914, + 446 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 142117, + "bbox": [ + 14, + 5, + 1183, + 300 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 191, + "bbox": [ + 340, + 354, + 12, + 30 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 750, + "bbox": [ + 403, + 375, + 18, + 67 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 5836, + "bbox": [ + 291, + 354, + 58, + 168 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 8417, + "bbox": [ + 332, + 337, + 89, + 193 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2347, + "bbox": [ + 442, + 367, + 38, + 97 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 753, + "bbox": [ + 1306, + 427, + 20, + 53 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 677, + "bbox": [ + 1324, + 423, + 17, + 57 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 633, + "bbox": [ + 1376, + 424, + 13, + 56 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1498, + "bbox": [ + 266, + 350, + 33, + 75 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 122661, + "bbox": [ + 6, + 344, + 280, + 533 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 244, + "bbox": [ + 914, + 447, + 16, + 27 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 33506, + "bbox": [ + 659, + 393, + 259, + 160 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 466, + "bbox": [ + 1226, + 407, + 34, + 63 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 43861, + "bbox": [ + 996, + 373, + 271, + 214 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_007407_gtFine_panoptic.png", + "image_id": "frankfurt_000001_007407", + "segments_info": [ + { + "area": 624080, + "bbox": [ + 6, + 533, + 2037, + 446 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 140577, + "bbox": [ + 6, + 478, + 2037, + 266 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 553162, + "bbox": [ + 6, + 5, + 2037, + 537 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 32085, + "bbox": [ + 1151, + 490, + 892, + 95 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 59536, + "bbox": [ + 100, + 5, + 1820, + 625 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 20006, + "bbox": [ + 72, + 37, + 1074, + 327 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2604, + "bbox": [ + 209, + 93, + 33, + 103 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 272801, + "bbox": [ + 753, + 15, + 1290, + 499 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 8680, + "bbox": [ + 1210, + 475, + 583, + 70 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 1998, + "bbox": [ + 6, + 422, + 41, + 174 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 4196, + "bbox": [ + 1114, + 377, + 80, + 185 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 6137, + "bbox": [ + 1266, + 376, + 58, + 157 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 4609, + "bbox": [ + 433, + 425, + 78, + 144 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 47719, + "bbox": [ + 1014, + 333, + 455, + 220 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1850, + "bbox": [ + 1600, + 414, + 42, + 63 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 6983, + "bbox": [ + 404, + 495, + 150, + 91 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_007622_gtFine_panoptic.png", + "image_id": "frankfurt_000001_007622", + "segments_info": [ + { + "area": 696278, + "bbox": [ + 6, + 386, + 2037, + 593 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 108893, + "bbox": [ + 6, + 394, + 2037, + 585 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 503844, + "bbox": [ + 6, + 5, + 2037, + 493 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 133119, + "bbox": [ + 12, + 275, + 2031, + 653 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 77286, + "bbox": [ + 286, + 5, + 1693, + 769 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 30050, + "bbox": [ + 855, + 57, + 1017, + 396 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 154945, + "bbox": [ + 590, + 5, + 652, + 479 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4073, + "bbox": [ + 569, + 464, + 242, + 34 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 965, + "bbox": [ + 1298, + 357, + 29, + 49 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 1095, + "bbox": [ + 1111, + 369, + 94, + 32 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 2962, + "bbox": [ + 666, + 411, + 135, + 62 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1623, + "bbox": [ + 6, + 390, + 45, + 181 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 246, + "bbox": [ + 837, + 377, + 12, + 39 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 270, + "bbox": [ + 846, + 371, + 20, + 27 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1888, + "bbox": [ + 1370, + 349, + 34, + 84 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 3101, + "bbox": [ + 1412, + 333, + 40, + 115 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3737, + "bbox": [ + 1752, + 326, + 61, + 127 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 8257, + "bbox": [ + 1692, + 299, + 68, + 192 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 567, + "bbox": [ + 1246, + 370, + 27, + 33 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2073, + "bbox": [ + 1136, + 361, + 51, + 49 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2263, + "bbox": [ + 1199, + 365, + 55, + 50 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 43253, + "bbox": [ + 1783, + 238, + 260, + 214 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1481, + "bbox": [ + 937, + 398, + 43, + 51 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_007857_gtFine_panoptic.png", + "image_id": "frankfurt_000001_007857", + "segments_info": [ + { + "area": 780885, + "bbox": [ + 6, + 409, + 2037, + 570 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 51055, + "bbox": [ + 6, + 417, + 1355, + 248 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 456658, + "bbox": [ + 6, + 5, + 2037, + 440 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 219135, + "bbox": [ + 1431, + 159, + 612, + 521 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 20345, + "bbox": [ + 384, + 25, + 1522, + 463 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 14454, + "bbox": [ + 432, + 44, + 1351, + 324 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 17559, + "bbox": [ + 509, + 224, + 1201, + 278 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 165970, + "bbox": [ + 41, + 5, + 964, + 424 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 759, + "bbox": [ + 673, + 372, + 42, + 30 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 61630, + "bbox": [ + 6, + 382, + 664, + 181 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 4752, + "bbox": [ + 1263, + 351, + 59, + 147 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 4355, + "bbox": [ + 1357, + 364, + 45, + 133 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 13234, + "bbox": [ + 1388, + 313, + 97, + 247 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 430, + "bbox": [ + 1107, + 387, + 14, + 40 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 532, + "bbox": [ + 1129, + 380, + 24, + 45 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 535, + "bbox": [ + 711, + 380, + 28, + 39 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3646, + "bbox": [ + 731, + 377, + 76, + 58 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 752, + "bbox": [ + 1385, + 373, + 24, + 117 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 31174, + "bbox": [ + 878, + 369, + 230, + 175 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 710, + "bbox": [ + 1117, + 400, + 45, + 28 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_007973_gtFine_panoptic.png", + "image_id": "frankfurt_000001_007973", + "segments_info": [ + { + "area": 877893, + "bbox": [ + 6, + 405, + 2037, + 574 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 64960, + "bbox": [ + 152, + 417, + 1891, + 335 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 503702, + "bbox": [ + 6, + 5, + 2037, + 443 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1873, + "bbox": [ + 813, + 431, + 287, + 20 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 3177, + "bbox": [ + 902, + 400, + 192, + 31 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 60543, + "bbox": [ + 125, + 9, + 1867, + 549 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 16333, + "bbox": [ + 18, + 121, + 1560, + 233 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 38470, + "bbox": [ + 458, + 12, + 1537, + 437 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 158593, + "bbox": [ + 60, + 19, + 1883, + 424 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 24035, + "bbox": [ + 11, + 5, + 1489, + 210 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 6699, + "bbox": [ + 1203, + 359, + 759, + 117 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 8444, + "bbox": [ + 1292, + 377, + 234, + 61 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 616, + "bbox": [ + 133, + 396, + 20, + 46 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 997, + "bbox": [ + 316, + 386, + 24, + 60 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 626, + "bbox": [ + 260, + 357, + 29, + 55 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 7305, + "bbox": [ + 247, + 354, + 111, + 177 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 8105, + "bbox": [ + 365, + 361, + 118, + 180 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2357, + "bbox": [ + 750, + 371, + 45, + 103 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2582, + "bbox": [ + 983, + 374, + 67, + 106 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 632, + "bbox": [ + 1238, + 380, + 17, + 60 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 426, + "bbox": [ + 1269, + 389, + 14, + 47 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 452, + "bbox": [ + 2021, + 371, + 22, + 28 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 475, + "bbox": [ + 63, + 377, + 29, + 28 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1333, + "bbox": [ + 245, + 372, + 65, + 137 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2341, + "bbox": [ + 649, + 367, + 51, + 99 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 14276, + "bbox": [ + 6, + 385, + 167, + 117 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 7993, + "bbox": [ + 183, + 421, + 182, + 106 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 5198, + "bbox": [ + 605, + 411, + 128, + 81 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 720, + "bbox": [ + 1020, + 409, + 25, + 41 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 749, + "bbox": [ + 1069, + 408, + 26, + 38 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_008200_gtFine_panoptic.png", + "image_id": "frankfurt_000001_008200", + "segments_info": [ + { + "area": 869311, + "bbox": [ + 6, + 425, + 2037, + 554 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 55797, + "bbox": [ + 6, + 437, + 2037, + 216 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 636250, + "bbox": [ + 6, + 5, + 2037, + 531 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 46693, + "bbox": [ + 45, + 5, + 1924, + 591 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2008, + "bbox": [ + 389, + 259, + 875, + 132 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2629, + "bbox": [ + 721, + 320, + 519, + 132 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 32690, + "bbox": [ + 367, + 196, + 741, + 244 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 275, + "bbox": [ + 722, + 426, + 26, + 14 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 127236, + "bbox": [ + 367, + 5, + 941, + 251 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1300, + "bbox": [ + 1308, + 387, + 33, + 72 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1329, + "bbox": [ + 1344, + 382, + 31, + 81 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1350, + "bbox": [ + 1410, + 384, + 30, + 80 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1351, + "bbox": [ + 1380, + 384, + 32, + 80 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 251, + "bbox": [ + 445, + 411, + 16, + 26 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 31635, + "bbox": [ + 131, + 367, + 256, + 154 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1224, + "bbox": [ + 742, + 398, + 45, + 33 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 748, + "bbox": [ + 561, + 403, + 21, + 49 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1560, + "bbox": [ + 858, + 398, + 55, + 46 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 397, + "bbox": [ + 924, + 389, + 57, + 11 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 83, + "bbox": [ + 1025, + 398, + 14, + 12 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 232, + "bbox": [ + 1009, + 402, + 20, + 33 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1281, + "bbox": [ + 892, + 400, + 42, + 53 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 658, + "bbox": [ + 990, + 400, + 29, + 44 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 4775, + "bbox": [ + 917, + 396, + 89, + 68 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 3008, + "bbox": [ + 1019, + 398, + 72, + 60 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 7565, + "bbox": [ + 1072, + 385, + 109, + 86 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 28928, + "bbox": [ + 569, + 258, + 165, + 214 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_008688_gtFine_panoptic.png", + "image_id": "frankfurt_000001_008688", + "segments_info": [ + { + "area": 828772, + "bbox": [ + 6, + 409, + 2037, + 570 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 64712, + "bbox": [ + 6, + 414, + 2037, + 215 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 475597, + "bbox": [ + 85, + 5, + 1958, + 512 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2085, + "bbox": [ + 120, + 460, + 460, + 57 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 69817, + "bbox": [ + 6, + 334, + 556, + 186 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 45341, + "bbox": [ + 200, + 5, + 1462, + 509 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8455, + "bbox": [ + 718, + 10, + 612, + 340 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 23037, + "bbox": [ + 583, + 150, + 1083, + 304 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 166980, + "bbox": [ + 251, + 5, + 556, + 386 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 27677, + "bbox": [ + 1361, + 16, + 308, + 170 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1027, + "bbox": [ + 1688, + 351, + 21, + 75 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1072, + "bbox": [ + 1668, + 358, + 26, + 69 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 7503, + "bbox": [ + 1786, + 315, + 74, + 184 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 7638, + "bbox": [ + 1730, + 317, + 57, + 185 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2920, + "bbox": [ + 505, + 366, + 55, + 115 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2783, + "bbox": [ + 1577, + 362, + 62, + 60 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 34796, + "bbox": [ + 1341, + 346, + 236, + 184 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 7419, + "bbox": [ + 952, + 379, + 114, + 92 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 19496, + "bbox": [ + 1034, + 370, + 182, + 136 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1065, + "bbox": [ + 599, + 408, + 52, + 47 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1922, + "bbox": [ + 560, + 411, + 67, + 47 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 5593, + "bbox": [ + 773, + 397, + 139, + 65 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_009058_gtFine_panoptic.png", + "image_id": "frankfurt_000001_009058", + "segments_info": [ + { + "area": 871235, + "bbox": [ + 6, + 440, + 2037, + 539 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 16830, + "bbox": [ + 23, + 458, + 2020, + 54 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 776439, + "bbox": [ + 9, + 5, + 2034, + 497 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 7754, + "bbox": [ + 259, + 191, + 1696, + 346 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1155, + "bbox": [ + 1714, + 327, + 41, + 42 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 5973, + "bbox": [ + 252, + 302, + 1758, + 159 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 17738, + "bbox": [ + 728, + 10, + 713, + 451 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 27663, + "bbox": [ + 976, + 10, + 521, + 150 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 14282, + "bbox": [ + 754, + 384, + 683, + 124 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 207, + "bbox": [ + 1446, + 389, + 16, + 23 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 524, + "bbox": [ + 1277, + 398, + 21, + 47 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 84, + "bbox": [ + 1068, + 403, + 12, + 9 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 384, + "bbox": [ + 997, + 390, + 22, + 46 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1526, + "bbox": [ + 892, + 397, + 22, + 97 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1012, + "bbox": [ + 728, + 395, + 26, + 66 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2028, + "bbox": [ + 829, + 395, + 54, + 104 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 3681, + "bbox": [ + 1050, + 412, + 77, + 58 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1698, + "bbox": [ + 1151, + 407, + 39, + 59 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 5435, + "bbox": [ + 1181, + 398, + 88, + 79 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 46523, + "bbox": [ + 1341, + 377, + 385, + 158 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 52873, + "bbox": [ + 6, + 259, + 234, + 247 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 3022, + "bbox": [ + 809, + 437, + 69, + 62 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_009504_gtFine_panoptic.png", + "image_id": "frankfurt_000001_009504", + "segments_info": [ + { + "area": 865487, + "bbox": [ + 6, + 445, + 2037, + 534 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 22191, + "bbox": [ + 38, + 443, + 2005, + 109 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 787886, + "bbox": [ + 9, + 5, + 2034, + 500 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 10471, + "bbox": [ + 260, + 21, + 1698, + 515 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1077, + "bbox": [ + 1719, + 328, + 40, + 45 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 5207, + "bbox": [ + 252, + 309, + 1762, + 157 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 21831, + "bbox": [ + 725, + 10, + 716, + 463 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 29824, + "bbox": [ + 986, + 10, + 514, + 154 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 7194, + "bbox": [ + 1047, + 404, + 236, + 102 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 862, + "bbox": [ + 1050, + 410, + 118, + 64 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 2973, + "bbox": [ + 658, + 391, + 60, + 120 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1947, + "bbox": [ + 1106, + 394, + 46, + 114 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 588, + "bbox": [ + 1436, + 395, + 26, + 95 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2406, + "bbox": [ + 1420, + 407, + 37, + 99 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1764, + "bbox": [ + 1391, + 408, + 36, + 93 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2161, + "bbox": [ + 1354, + 408, + 54, + 97 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2819, + "bbox": [ + 1544, + 399, + 54, + 107 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 2879, + "bbox": [ + 513, + 378, + 61, + 109 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1943, + "bbox": [ + 951, + 396, + 43, + 91 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1995, + "bbox": [ + 910, + 391, + 55, + 93 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 1392, + "bbox": [ + 1321, + 403, + 34, + 86 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 2381, + "bbox": [ + 1749, + 405, + 54, + 91 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 2822, + "bbox": [ + 1049, + 374, + 51, + 136 + ], + "category_id": 25, + "id": 25005, + "iscrowd": 0 + }, + { + "area": 532, + "bbox": [ + 1106, + 404, + 58, + 24 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 98, + "bbox": [ + 1175, + 403, + 18, + 7 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1163, + "bbox": [ + 1160, + 410, + 30, + 57 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2612, + "bbox": [ + 1181, + 399, + 76, + 79 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1880, + "bbox": [ + 1345, + 401, + 84, + 42 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 53178, + "bbox": [ + 6, + 262, + 235, + 243 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 6329, + "bbox": [ + 458, + 432, + 143, + 84 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1040, + "bbox": [ + 930, + 442, + 81, + 63 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 4015, + "bbox": [ + 878, + 442, + 109, + 64 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 5594, + "bbox": [ + 999, + 438, + 132, + 78 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1911, + "bbox": [ + 1417, + 445, + 79, + 52 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 2012, + "bbox": [ + 1286, + 440, + 93, + 57 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 3816, + "bbox": [ + 1725, + 445, + 110, + 70 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_009854_gtFine_panoptic.png", + "image_id": "frankfurt_000001_009854", + "segments_info": [ + { + "area": 830984, + "bbox": [ + 6, + 433, + 2037, + 546 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 59398, + "bbox": [ + 6, + 431, + 2037, + 171 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 701924, + "bbox": [ + 6, + 5, + 2037, + 563 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 28424, + "bbox": [ + 39, + 5, + 1643, + 577 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 6546, + "bbox": [ + 240, + 195, + 1462, + 126 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2455, + "bbox": [ + 340, + 288, + 1165, + 109 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 101657, + "bbox": [ + 207, + 5, + 933, + 404 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 13857, + "bbox": [ + 928, + 9, + 211, + 154 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 10049, + "bbox": [ + 12, + 369, + 1611, + 151 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 1202, + "bbox": [ + 1139, + 357, + 23, + 82 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1086, + "bbox": [ + 1166, + 371, + 22, + 71 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3763, + "bbox": [ + 1613, + 389, + 38, + 134 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1127, + "bbox": [ + 115, + 356, + 31, + 60 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1648, + "bbox": [ + 416, + 383, + 42, + 83 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 3008, + "bbox": [ + 1039, + 388, + 78, + 49 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3791, + "bbox": [ + 858, + 392, + 94, + 49 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3287, + "bbox": [ + 949, + 397, + 92, + 44 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1590, + "bbox": [ + 816, + 381, + 45, + 58 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 3468, + "bbox": [ + 603, + 372, + 84, + 65 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1496, + "bbox": [ + 685, + 361, + 89, + 35 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3025, + "bbox": [ + 669, + 389, + 49, + 86 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 14219, + "bbox": [ + 697, + 372, + 150, + 129 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1121, + "bbox": [ + 317, + 385, + 85, + 80 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1701, + "bbox": [ + 278, + 391, + 108, + 86 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 10606, + "bbox": [ + 227, + 401, + 153, + 99 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 761, + "bbox": [ + 542, + 381, + 71, + 25 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1148, + "bbox": [ + 493, + 389, + 51, + 62 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 951, + "bbox": [ + 523, + 392, + 80, + 15 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 504, + "bbox": [ + 508, + 403, + 102, + 52 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 13343, + "bbox": [ + 508, + 406, + 151, + 106 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 1936, + "bbox": [ + 65, + 402, + 63, + 43 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 684, + "bbox": [ + 418, + 420, + 39, + 58 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_010156_gtFine_panoptic.png", + "image_id": "frankfurt_000001_010156", + "segments_info": [ + { + "area": 640576, + "bbox": [ + 6, + 456, + 1939, + 523 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 189441, + "bbox": [ + 100, + 455, + 1943, + 502 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 476405, + "bbox": [ + 6, + 5, + 2037, + 472 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 71417, + "bbox": [ + 279, + 364, + 1764, + 222 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 34183, + "bbox": [ + 287, + 19, + 1261, + 551 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 12439, + "bbox": [ + 545, + 125, + 1011, + 272 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 190206, + "bbox": [ + 12, + 5, + 2031, + 479 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2903, + "bbox": [ + 1217, + 14, + 120, + 45 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 24249, + "bbox": [ + 99, + 296, + 1821, + 232 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 1151, + "bbox": [ + 1178, + 395, + 45, + 72 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1090, + "bbox": [ + 6, + 359, + 28, + 70 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 424, + "bbox": [ + 69, + 354, + 26, + 23 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 10581, + "bbox": [ + 22, + 338, + 91, + 286 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1689, + "bbox": [ + 1354, + 366, + 31, + 98 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3982, + "bbox": [ + 1412, + 348, + 45, + 169 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 3558, + "bbox": [ + 1448, + 335, + 69, + 174 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 2579, + "bbox": [ + 1553, + 310, + 43, + 211 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 15428, + "bbox": [ + 1563, + 287, + 87, + 285 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 15155, + "bbox": [ + 1646, + 304, + 114, + 265 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 18367, + "bbox": [ + 1754, + 262, + 109, + 305 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 526, + "bbox": [ + 851, + 403, + 26, + 48 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2919, + "bbox": [ + 1034, + 425, + 117, + 41 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 12900, + "bbox": [ + 859, + 388, + 146, + 111 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 14950, + "bbox": [ + 6, + 411, + 81, + 250 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1353, + "bbox": [ + 826, + 423, + 42, + 55 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1313, + "bbox": [ + 1219, + 428, + 64, + 37 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 2539, + "bbox": [ + 671, + 413, + 60, + 80 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 8817, + "bbox": [ + 84, + 479, + 112, + 109 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1632, + "bbox": [ + 727, + 423, + 45, + 57 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_010444_gtFine_panoptic.png", + "image_id": "frankfurt_000001_010444", + "segments_info": [ + { + "area": 625560, + "bbox": [ + 6, + 466, + 2037, + 513 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 205308, + "bbox": [ + 6, + 451, + 2037, + 178 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 195394, + "bbox": [ + 6, + 5, + 2037, + 491 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 52946, + "bbox": [ + 41, + 7, + 1876, + 677 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 48790, + "bbox": [ + 258, + 5, + 723, + 650 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 560564, + "bbox": [ + 14, + 5, + 2029, + 501 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 6708, + "bbox": [ + 1356, + 368, + 567, + 90 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 4038, + "bbox": [ + 432, + 430, + 319, + 65 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 628, + "bbox": [ + 404, + 400, + 25, + 43 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1493, + "bbox": [ + 165, + 417, + 30, + 92 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3516, + "bbox": [ + 283, + 424, + 78, + 96 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 6276, + "bbox": [ + 1041, + 363, + 70, + 158 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 6735, + "bbox": [ + 1189, + 378, + 92, + 157 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 9852, + "bbox": [ + 1464, + 311, + 80, + 280 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 21171, + "bbox": [ + 1393, + 278, + 102, + 345 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 2133, + "bbox": [ + 2021, + 352, + 22, + 161 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1043, + "bbox": [ + 710, + 400, + 40, + 68 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 695, + "bbox": [ + 667, + 392, + 38, + 92 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 4408, + "bbox": [ + 6, + 402, + 61, + 102 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 7024, + "bbox": [ + 181, + 414, + 138, + 79 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4311, + "bbox": [ + 410, + 421, + 172, + 66 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1952, + "bbox": [ + 1005, + 412, + 51, + 59 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 17926, + "bbox": [ + 619, + 418, + 242, + 172 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1112, + "bbox": [ + 178, + 468, + 42, + 42 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3792, + "bbox": [ + 879, + 421, + 87, + 88 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 6145, + "bbox": [ + 1382, + 413, + 206, + 107 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_010600_gtFine_panoptic.png", + "image_id": "frankfurt_000001_010600", + "segments_info": [ + { + "area": 564185, + "bbox": [ + 6, + 415, + 2033, + 564 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 79838, + "bbox": [ + 1111, + 439, + 932, + 460 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 413373, + "bbox": [ + 6, + 5, + 2037, + 465 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 341, + "bbox": [ + 1113, + 422, + 17, + 23 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 36047, + "bbox": [ + 536, + 71, + 1389, + 665 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 11417, + "bbox": [ + 748, + 176, + 676, + 176 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 174737, + "bbox": [ + 16, + 5, + 1357, + 391 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 361, + "bbox": [ + 1026, + 266, + 33, + 23 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3250, + "bbox": [ + 978, + 396, + 147, + 40 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 7871, + "bbox": [ + 759, + 370, + 467, + 104 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 1304, + "bbox": [ + 92, + 329, + 56, + 33 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 4125, + "bbox": [ + 828, + 349, + 42, + 158 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3307, + "bbox": [ + 1502, + 359, + 57, + 94 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2901, + "bbox": [ + 1596, + 357, + 53, + 110 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2594, + "bbox": [ + 1776, + 375, + 80, + 72 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1624, + "bbox": [ + 1844, + 374, + 40, + 70 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1116, + "bbox": [ + 1136, + 395, + 30, + 65 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1218, + "bbox": [ + 936, + 374, + 31, + 72 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2256, + "bbox": [ + 886, + 388, + 51, + 67 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 8197, + "bbox": [ + 728, + 381, + 109, + 106 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 112550, + "bbox": [ + 313, + 218, + 443, + 393 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 131798, + "bbox": [ + 6, + 359, + 499, + 364 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 10570, + "bbox": [ + 6, + 528, + 52, + 296 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1485, + "bbox": [ + 1208, + 385, + 92, + 80 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3642, + "bbox": [ + 1223, + 393, + 85, + 80 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1744, + "bbox": [ + 1072, + 382, + 55, + 41 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 468, + "bbox": [ + 939, + 409, + 26, + 52 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_010830_gtFine_panoptic.png", + "image_id": "frankfurt_000001_010830", + "segments_info": [ + { + "area": 615607, + "bbox": [ + 6, + 416, + 2036, + 563 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 33476, + "bbox": [ + 6, + 439, + 1296, + 231 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 426208, + "bbox": [ + 6, + 5, + 2037, + 508 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 11654, + "bbox": [ + 156, + 125, + 1846, + 479 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 10944, + "bbox": [ + 118, + 5, + 1171, + 395 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 306127, + "bbox": [ + 208, + 5, + 1835, + 550 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 6080, + "bbox": [ + 1050, + 121, + 73, + 133 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 7673, + "bbox": [ + 921, + 380, + 367, + 67 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 694, + "bbox": [ + 1166, + 387, + 17, + 51 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 848, + "bbox": [ + 977, + 375, + 33, + 71 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 15286, + "bbox": [ + 828, + 314, + 122, + 290 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1270, + "bbox": [ + 1835, + 346, + 74, + 66 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 9565, + "bbox": [ + 1803, + 360, + 126, + 208 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 16572, + "bbox": [ + 1502, + 354, + 89, + 302 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2066, + "bbox": [ + 1144, + 368, + 72, + 60 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1202, + "bbox": [ + 888, + 411, + 32, + 57 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 6180, + "bbox": [ + 686, + 358, + 156, + 161 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 35731, + "bbox": [ + 565, + 358, + 245, + 199 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 69418, + "bbox": [ + 255, + 350, + 341, + 258 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 747, + "bbox": [ + 1312, + 388, + 66, + 48 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1162, + "bbox": [ + 1298, + 432, + 58, + 71 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 18300, + "bbox": [ + 1321, + 383, + 193, + 137 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2547, + "bbox": [ + 1677, + 364, + 141, + 47 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 30959, + "bbox": [ + 1742, + 301, + 301, + 258 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 69180, + "bbox": [ + 1446, + 377, + 413, + 260 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 913, + "bbox": [ + 975, + 414, + 35, + 53 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_011162_gtFine_panoptic.png", + "image_id": "frankfurt_000001_011162", + "segments_info": [ + { + "area": 506573, + "bbox": [ + 6, + 421, + 1868, + 558 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 323210, + "bbox": [ + 6, + 406, + 2037, + 551 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 502814, + "bbox": [ + 6, + 5, + 2037, + 579 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 51612, + "bbox": [ + 277, + 135, + 1739, + 764 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 14818, + "bbox": [ + 453, + 303, + 978, + 164 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 161026, + "bbox": [ + 794, + 11, + 1249, + 415 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 20163, + "bbox": [ + 791, + 6, + 342, + 211 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 5711, + "bbox": [ + 1304, + 389, + 162, + 95 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 2579, + "bbox": [ + 355, + 355, + 52, + 175 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1916, + "bbox": [ + 383, + 351, + 102, + 204 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 8498, + "bbox": [ + 367, + 342, + 88, + 219 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 4067, + "bbox": [ + 245, + 346, + 64, + 215 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1244, + "bbox": [ + 247, + 422, + 22, + 120 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1511, + "bbox": [ + 6, + 379, + 17, + 196 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 15968, + "bbox": [ + 262, + 352, + 145, + 251 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1843, + "bbox": [ + 771, + 364, + 28, + 130 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 836, + "bbox": [ + 724, + 368, + 28, + 122 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 4933, + "bbox": [ + 724, + 348, + 65, + 154 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 811, + "bbox": [ + 879, + 391, + 24, + 66 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 3829, + "bbox": [ + 845, + 343, + 37, + 151 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 933, + "bbox": [ + 1013, + 379, + 27, + 56 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 1537, + "bbox": [ + 1031, + 366, + 33, + 73 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1067, + "bbox": [ + 1210, + 363, + 27, + 64 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 1123, + "bbox": [ + 1248, + 358, + 26, + 66 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 1289, + "bbox": [ + 1276, + 367, + 31, + 85 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 153, + "bbox": [ + 1453, + 361, + 17, + 25 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 1513, + "bbox": [ + 1425, + 356, + 43, + 65 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 532, + "bbox": [ + 1466, + 360, + 23, + 46 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 5758, + "bbox": [ + 1479, + 337, + 78, + 149 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 4402, + "bbox": [ + 970, + 356, + 68, + 149 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 92, + "bbox": [ + 1772, + 349, + 9, + 15 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 576, + "bbox": [ + 1887, + 347, + 22, + 36 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 13875, + "bbox": [ + 1644, + 302, + 123, + 235 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 13667, + "bbox": [ + 1783, + 270, + 111, + 265 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 1905, + "bbox": [ + 2014, + 267, + 29, + 100 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 911, + "bbox": [ + 518, + 365, + 56, + 130 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2326, + "bbox": [ + 1060, + 371, + 51, + 54 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 8270, + "bbox": [ + 1104, + 339, + 108, + 90 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4359, + "bbox": [ + 470, + 420, + 125, + 89 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_011715_gtFine_panoptic.png", + "image_id": "frankfurt_000001_011715", + "segments_info": [ + { + "area": 520069, + "bbox": [ + 6, + 421, + 2033, + 558 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 331760, + "bbox": [ + 6, + 416, + 2037, + 527 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 470534, + "bbox": [ + 6, + 5, + 2037, + 509 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4115, + "bbox": [ + 1874, + 436, + 131, + 37 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 28631, + "bbox": [ + 81, + 68, + 1759, + 662 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 55066, + "bbox": [ + 109, + 238, + 1724, + 257 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 206799, + "bbox": [ + 882, + 8, + 1161, + 429 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 11128, + "bbox": [ + 1082, + 11, + 120, + 184 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 10362, + "bbox": [ + 6, + 333, + 1515, + 228 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 15817, + "bbox": [ + 1512, + 384, + 318, + 136 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 2902, + "bbox": [ + 259, + 345, + 104, + 187 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 4687, + "bbox": [ + 346, + 318, + 50, + 202 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 6981, + "bbox": [ + 278, + 323, + 109, + 213 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2434, + "bbox": [ + 543, + 344, + 50, + 176 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 485, + "bbox": [ + 587, + 315, + 28, + 28 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 30183, + "bbox": [ + 558, + 281, + 144, + 375 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2617, + "bbox": [ + 974, + 350, + 32, + 116 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 6248, + "bbox": [ + 847, + 263, + 135, + 358 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 25078, + "bbox": [ + 836, + 245, + 190, + 398 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 7347, + "bbox": [ + 1008, + 276, + 82, + 314 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1199, + "bbox": [ + 1133, + 370, + 27, + 85 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 19340, + "bbox": [ + 1041, + 245, + 124, + 354 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 12754, + "bbox": [ + 1118, + 311, + 147, + 261 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 933, + "bbox": [ + 1362, + 358, + 28, + 61 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 641, + "bbox": [ + 1653, + 345, + 23, + 58 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 1154, + "bbox": [ + 1667, + 334, + 35, + 66 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 1928, + "bbox": [ + 1630, + 343, + 31, + 107 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 3131, + "bbox": [ + 1603, + 342, + 37, + 134 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 4286, + "bbox": [ + 1563, + 344, + 45, + 142 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 13080, + "bbox": [ + 1761, + 291, + 76, + 259 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 13306, + "bbox": [ + 1823, + 289, + 75, + 264 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 8124, + "bbox": [ + 1252, + 308, + 93, + 217 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 153, + "bbox": [ + 1127, + 381, + 16, + 41 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1902, + "bbox": [ + 1192, + 364, + 60, + 64 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 5384, + "bbox": [ + 1234, + 325, + 129, + 103 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3721, + "bbox": [ + 1265, + 415, + 56, + 140 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_011835_gtFine_panoptic.png", + "image_id": "frankfurt_000001_011835", + "segments_info": [ + { + "area": 390010, + "bbox": [ + 175, + 452, + 1864, + 527 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 288285, + "bbox": [ + 6, + 449, + 2037, + 529 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 519063, + "bbox": [ + 6, + 5, + 2016, + 606 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2533, + "bbox": [ + 1959, + 465, + 84, + 54 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 18522, + "bbox": [ + 772, + 109, + 981, + 469 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 19206, + "bbox": [ + 819, + 272, + 1075, + 193 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 242414, + "bbox": [ + 676, + 7, + 1367, + 458 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 18222, + "bbox": [ + 674, + 5, + 396, + 220 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1966, + "bbox": [ + 856, + 392, + 37, + 121 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1044, + "bbox": [ + 808, + 403, + 53, + 93 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 6666, + "bbox": [ + 718, + 370, + 67, + 175 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 13632, + "bbox": [ + 449, + 294, + 221, + 423 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 30773, + "bbox": [ + 417, + 231, + 165, + 508 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 41879, + "bbox": [ + 435, + 270, + 277, + 502 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 11859, + "bbox": [ + 848, + 337, + 124, + 268 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 10225, + "bbox": [ + 909, + 355, + 111, + 252 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 23064, + "bbox": [ + 1166, + 258, + 191, + 405 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 36006, + "bbox": [ + 1033, + 260, + 231, + 493 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 50106, + "bbox": [ + 900, + 258, + 291, + 522 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 1115, + "bbox": [ + 1431, + 376, + 46, + 83 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1894, + "bbox": [ + 1407, + 376, + 46, + 129 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 1146, + "bbox": [ + 1475, + 401, + 26, + 72 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 93, + "bbox": [ + 1575, + 471, + 19, + 17 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 5579, + "bbox": [ + 1497, + 350, + 54, + 177 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 2748, + "bbox": [ + 1555, + 362, + 41, + 136 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 12782, + "bbox": [ + 1571, + 313, + 84, + 269 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 12088, + "bbox": [ + 1325, + 343, + 110, + 228 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 9778, + "bbox": [ + 1577, + 277, + 189, + 386 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 30992, + "bbox": [ + 1576, + 266, + 231, + 418 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 337, + "bbox": [ + 992, + 415, + 21, + 38 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1261, + "bbox": [ + 1002, + 410, + 38, + 49 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 14668, + "bbox": [ + 1760, + 420, + 280, + 177 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 21762, + "bbox": [ + 1677, + 426, + 290, + 174 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_012038_gtFine_panoptic.png", + "image_id": "frankfurt_000001_012038", + "segments_info": [ + { + "area": 665953, + "bbox": [ + 6, + 402, + 2034, + 577 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 219376, + "bbox": [ + 6, + 433, + 2037, + 457 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 447793, + "bbox": [ + 7, + 5, + 2036, + 557 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 8121, + "bbox": [ + 1701, + 426, + 342, + 57 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 64322, + "bbox": [ + 17, + 80, + 2026, + 677 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 11456, + "bbox": [ + 15, + 5, + 2028, + 335 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 235462, + "bbox": [ + 508, + 5, + 1535, + 437 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 7748, + "bbox": [ + 807, + 7, + 86, + 140 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 8511, + "bbox": [ + 1386, + 362, + 223, + 119 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1103, + "bbox": [ + 717, + 352, + 36, + 78 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2604, + "bbox": [ + 607, + 327, + 40, + 141 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 7147, + "bbox": [ + 484, + 324, + 67, + 177 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 7074, + "bbox": [ + 621, + 305, + 100, + 186 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 7952, + "bbox": [ + 788, + 303, + 68, + 183 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 6391, + "bbox": [ + 556, + 313, + 66, + 185 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1333, + "bbox": [ + 1570, + 333, + 33, + 58 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 175, + "bbox": [ + 1813, + 354, + 16, + 13 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 421, + "bbox": [ + 1858, + 343, + 21, + 31 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 4580, + "bbox": [ + 1644, + 369, + 75, + 132 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 7927, + "bbox": [ + 1870, + 321, + 59, + 194 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 587, + "bbox": [ + 772, + 353, + 29, + 71 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 7936, + "bbox": [ + 1181, + 308, + 85, + 185 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1041, + "bbox": [ + 846, + 361, + 46, + 63 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 7560, + "bbox": [ + 864, + 340, + 110, + 89 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1775, + "bbox": [ + 754, + 336, + 41, + 69 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 34181, + "bbox": [ + 950, + 269, + 232, + 182 + ], + "category_id": 27, + "id": 27001, + "iscrowd": 0 + }, + { + "area": 2178, + "bbox": [ + 1606, + 355, + 86, + 91 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1617, + "bbox": [ + 1378, + 352, + 83, + 71 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 2843, + "bbox": [ + 626, + 369, + 65, + 126 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 398, + "bbox": [ + 780, + 386, + 14, + 42 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 5390, + "bbox": [ + 1199, + 387, + 91, + 139 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1823, + "bbox": [ + 1302, + 367, + 39, + 76 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 10316, + "bbox": [ + 1427, + 374, + 195, + 111 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_012519_gtFine_panoptic.png", + "image_id": "frankfurt_000001_012519", + "segments_info": [ + { + "area": 638280, + "bbox": [ + 6, + 422, + 2036, + 557 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 155207, + "bbox": [ + 6, + 419, + 2037, + 489 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 585376, + "bbox": [ + 7, + 5, + 2036, + 544 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 8130, + "bbox": [ + 419, + 365, + 653, + 101 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 16604, + "bbox": [ + 83, + 16, + 1559, + 512 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 29919, + "bbox": [ + 57, + 38, + 1639, + 414 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 91952, + "bbox": [ + 305, + 5, + 880, + 505 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 13195, + "bbox": [ + 370, + 484, + 322, + 117 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 16465, + "bbox": [ + 1122, + 13, + 137, + 179 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 13033, + "bbox": [ + 374, + 429, + 149, + 147 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 346, + "bbox": [ + 1090, + 385, + 15, + 54 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 481, + "bbox": [ + 1203, + 381, + 11, + 62 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 478, + "bbox": [ + 1219, + 379, + 18, + 63 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1898, + "bbox": [ + 1261, + 371, + 33, + 99 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 269, + "bbox": [ + 1322, + 393, + 10, + 66 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1889, + "bbox": [ + 1230, + 374, + 46, + 99 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2596, + "bbox": [ + 1292, + 363, + 38, + 107 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 25134, + "bbox": [ + 1616, + 290, + 146, + 317 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 10543, + "bbox": [ + 1867, + 325, + 75, + 234 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1399, + "bbox": [ + 2024, + 378, + 19, + 293 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 6748, + "bbox": [ + 575, + 353, + 69, + 169 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 1042, + "bbox": [ + 1066, + 381, + 29, + 73 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 547, + "bbox": [ + 1109, + 382, + 23, + 59 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 574, + "bbox": [ + 1171, + 375, + 37, + 67 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 2852, + "bbox": [ + 1781, + 434, + 78, + 77 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 4701, + "bbox": [ + 922, + 359, + 64, + 146 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 6770, + "bbox": [ + 832, + 325, + 84, + 207 + ], + "category_id": 25, + "id": 25005, + "iscrowd": 0 + }, + { + "area": 6496, + "bbox": [ + 627, + 381, + 104, + 123 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 22046, + "bbox": [ + 690, + 359, + 175, + 157 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 28155, + "bbox": [ + 168, + 385, + 233, + 248 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 78648, + "bbox": [ + 6, + 313, + 251, + 410 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1553, + "bbox": [ + 511, + 432, + 40, + 54 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 483, + "bbox": [ + 1080, + 414, + 19, + 46 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 305, + "bbox": [ + 1110, + 410, + 16, + 36 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 574, + "bbox": [ + 1166, + 405, + 27, + 46 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1837, + "bbox": [ + 934, + 424, + 40, + 99 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 4946, + "bbox": [ + 840, + 427, + 72, + 135 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_012699_gtFine_panoptic.png", + "image_id": "frankfurt_000001_012699", + "segments_info": [ + { + "area": 590465, + "bbox": [ + 6, + 421, + 2033, + 558 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 165877, + "bbox": [ + 985, + 412, + 1058, + 523 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 458030, + "bbox": [ + 9, + 5, + 2034, + 434 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 281923, + "bbox": [ + 6, + 185, + 953, + 506 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 7362, + "bbox": [ + 979, + 15, + 449, + 452 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 38490, + "bbox": [ + 727, + 195, + 640, + 432 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 2498, + "bbox": [ + 1212, + 310, + 97, + 82 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 30760, + "bbox": [ + 1131, + 12, + 250, + 222 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 374, + "bbox": [ + 1125, + 366, + 17, + 68 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1229, + "bbox": [ + 1100, + 367, + 33, + 68 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 327, + "bbox": [ + 1210, + 368, + 17, + 75 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1805, + "bbox": [ + 968, + 357, + 32, + 104 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 3956, + "bbox": [ + 990, + 342, + 64, + 134 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 585, + "bbox": [ + 1308, + 364, + 22, + 83 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2802, + "bbox": [ + 1202, + 356, + 49, + 121 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 5966, + "bbox": [ + 1247, + 328, + 67, + 172 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1245, + "bbox": [ + 1314, + 301, + 34, + 184 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1099, + "bbox": [ + 1369, + 357, + 29, + 107 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 68, + "bbox": [ + 1397, + 339, + 13, + 12 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 4777, + "bbox": [ + 1393, + 327, + 47, + 149 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1108, + "bbox": [ + 1495, + 342, + 22, + 114 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 4250, + "bbox": [ + 1461, + 316, + 53, + 155 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 4357, + "bbox": [ + 1433, + 329, + 46, + 147 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 8218, + "bbox": [ + 1316, + 301, + 86, + 197 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 65, + "bbox": [ + 1521, + 426, + 10, + 13 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 291, + "bbox": [ + 1657, + 351, + 22, + 38 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 1828, + "bbox": [ + 1629, + 342, + 55, + 61 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 1004, + "bbox": [ + 1687, + 340, + 47, + 67 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 248, + "bbox": [ + 1732, + 331, + 23, + 30 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 374, + "bbox": [ + 1757, + 332, + 22, + 57 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 6456, + "bbox": [ + 1699, + 333, + 77, + 183 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 611, + "bbox": [ + 1808, + 354, + 24, + 38 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 5937, + "bbox": [ + 1765, + 326, + 111, + 137 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 3782, + "bbox": [ + 1843, + 322, + 81, + 88 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 3470, + "bbox": [ + 1902, + 325, + 72, + 88 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 5639, + "bbox": [ + 1973, + 318, + 70, + 106 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 16808, + "bbox": [ + 1513, + 266, + 98, + 272 + ], + "category_id": 24, + "id": 24028, + "iscrowd": 0 + }, + { + "area": 682, + "bbox": [ + 1041, + 368, + 30, + 63 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1115, + "bbox": [ + 1074, + 365, + 35, + 62 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 431, + "bbox": [ + 1046, + 397, + 19, + 44 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 679, + "bbox": [ + 1076, + 402, + 29, + 40 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_012738_gtFine_panoptic.png", + "image_id": "frankfurt_000001_012738", + "segments_info": [ + { + "area": 416446, + "bbox": [ + 26, + 447, + 1819, + 532 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 175101, + "bbox": [ + 802, + 437, + 1241, + 520 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 388752, + "bbox": [ + 17, + 5, + 2026, + 566 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 419941, + "bbox": [ + 6, + 19, + 741, + 958 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 8305, + "bbox": [ + 863, + 14, + 669, + 547 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 61781, + "bbox": [ + 485, + 72, + 939, + 646 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 11255, + "bbox": [ + 1193, + 281, + 229, + 182 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 33079, + "bbox": [ + 1172, + 13, + 240, + 242 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1576, + "bbox": [ + 982, + 413, + 69, + 35 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 371, + "bbox": [ + 1314, + 496, + 17, + 40 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 17699, + "bbox": [ + 1255, + 314, + 124, + 297 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 81, + "bbox": [ + 1403, + 344, + 10, + 15 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1629, + "bbox": [ + 1409, + 320, + 42, + 201 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1408, + "bbox": [ + 1500, + 376, + 54, + 135 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 18742, + "bbox": [ + 1438, + 295, + 111, + 290 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 22658, + "bbox": [ + 1320, + 316, + 156, + 313 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 534, + "bbox": [ + 1730, + 483, + 15, + 50 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 8439, + "bbox": [ + 1691, + 310, + 59, + 261 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 9369, + "bbox": [ + 1817, + 278, + 87, + 312 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 514, + "bbox": [ + 1584, + 565, + 94, + 83 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 51735, + "bbox": [ + 1548, + 218, + 173, + 502 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 46542, + "bbox": [ + 1723, + 155, + 151, + 548 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 726, + "bbox": [ + 1065, + 390, + 20, + 60 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1978, + "bbox": [ + 1073, + 389, + 42, + 87 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 267, + "bbox": [ + 754, + 387, + 10, + 55 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 78, + "bbox": [ + 755, + 407, + 7, + 20 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 62, + "bbox": [ + 761, + 390, + 12, + 13 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 752, + "bbox": [ + 759, + 391, + 24, + 51 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 183, + "bbox": [ + 766, + 422, + 13, + 20 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 955, + "bbox": [ + 810, + 373, + 35, + 99 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 1520, + "bbox": [ + 814, + 375, + 44, + 96 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 891, + "bbox": [ + 782, + 378, + 27, + 65 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 16179, + "bbox": [ + 1134, + 340, + 126, + 260 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 726, + "bbox": [ + 938, + 385, + 28, + 63 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1173, + "bbox": [ + 1024, + 403, + 100, + 41 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1137, + "bbox": [ + 937, + 416, + 39, + 46 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1959, + "bbox": [ + 780, + 411, + 41, + 75 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_012870_gtFine_panoptic.png", + "image_id": "frankfurt_000001_012870", + "segments_info": [ + { + "area": 611395, + "bbox": [ + 6, + 403, + 2036, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 48291, + "bbox": [ + 80, + 404, + 1921, + 249 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 651997, + "bbox": [ + 52, + 5, + 1991, + 528 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 26487, + "bbox": [ + 79, + 24, + 1964, + 576 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 17659, + "bbox": [ + 585, + 192, + 1350, + 261 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 19800, + "bbox": [ + 1498, + 235, + 545, + 201 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 61045, + "bbox": [ + 1343, + 16, + 447, + 215 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 514, + "bbox": [ + 1733, + 381, + 23, + 56 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 397, + "bbox": [ + 1751, + 380, + 21, + 30 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 654, + "bbox": [ + 1766, + 366, + 30, + 40 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 273, + "bbox": [ + 1800, + 368, + 18, + 75 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 141, + "bbox": [ + 1374, + 406, + 14, + 15 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 289, + "bbox": [ + 1358, + 401, + 16, + 29 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 4592, + "bbox": [ + 1942, + 340, + 57, + 130 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 17106, + "bbox": [ + 1851, + 310, + 120, + 280 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1956, + "bbox": [ + 1996, + 333, + 26, + 164 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 5294, + "bbox": [ + 2000, + 301, + 43, + 232 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 10800, + "bbox": [ + 1527, + 343, + 79, + 223 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 10945, + "bbox": [ + 1653, + 334, + 89, + 228 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 19804, + "bbox": [ + 1405, + 300, + 129, + 313 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 343, + "bbox": [ + 1256, + 364, + 20, + 36 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1170, + "bbox": [ + 1191, + 378, + 40, + 114 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 623, + "bbox": [ + 1255, + 426, + 25, + 65 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 5410, + "bbox": [ + 1214, + 359, + 56, + 153 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 16656, + "bbox": [ + 1221, + 320, + 140, + 293 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 6385, + "bbox": [ + 1137, + 342, + 52, + 218 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 12185, + "bbox": [ + 1029, + 337, + 144, + 227 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 12079, + "bbox": [ + 988, + 317, + 99, + 259 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 3320, + "bbox": [ + 921, + 381, + 50, + 117 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 3080, + "bbox": [ + 82, + 387, + 61, + 128 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 2917, + "bbox": [ + 118, + 383, + 43, + 142 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 3614, + "bbox": [ + 240, + 401, + 49, + 122 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 1104, + "bbox": [ + 740, + 399, + 32, + 109 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 3527, + "bbox": [ + 368, + 398, + 51, + 124 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 1801, + "bbox": [ + 447, + 367, + 26, + 154 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 6653, + "bbox": [ + 629, + 391, + 80, + 179 + ], + "category_id": 24, + "id": 24028, + "iscrowd": 0 + }, + { + "area": 1349, + "bbox": [ + 593, + 401, + 52, + 173 + ], + "category_id": 24, + "id": 24029, + "iscrowd": 0 + }, + { + "area": 6854, + "bbox": [ + 543, + 371, + 75, + 136 + ], + "category_id": 24, + "id": 24030, + "iscrowd": 0 + }, + { + "area": 7971, + "bbox": [ + 747, + 350, + 85, + 201 + ], + "category_id": 24, + "id": 24031, + "iscrowd": 0 + }, + { + "area": 766, + "bbox": [ + 1634, + 383, + 25, + 63 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 519, + "bbox": [ + 1834, + 350, + 22, + 63 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1068, + "bbox": [ + 1828, + 353, + 25, + 77 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 878, + "bbox": [ + 1599, + 397, + 30, + 41 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 132, + "bbox": [ + 1438, + 410, + 12, + 31 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2181, + "bbox": [ + 1386, + 402, + 59, + 45 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 365, + "bbox": [ + 1644, + 412, + 19, + 38 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 937, + "bbox": [ + 1722, + 395, + 29, + 53 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 3284, + "bbox": [ + 1748, + 392, + 60, + 71 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 863, + "bbox": [ + 1829, + 403, + 27, + 53 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 233, + "bbox": [ + 1340, + 417, + 29, + 31 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 842, + "bbox": [ + 1184, + 415, + 27, + 58 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 50861, + "bbox": [ + 373, + 442, + 248, + 331 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_013016_gtFine_panoptic.png", + "image_id": "frankfurt_000001_013016", + "segments_info": [ + { + "area": 669205, + "bbox": [ + 6, + 404, + 2037, + 575 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 58919, + "bbox": [ + 6, + 396, + 2037, + 447 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 518470, + "bbox": [ + 6, + 5, + 2037, + 497 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5759, + "bbox": [ + 1863, + 363, + 180, + 83 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 11791, + "bbox": [ + 674, + 20, + 1074, + 454 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 13795, + "bbox": [ + 547, + 80, + 1210, + 256 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 44502, + "bbox": [ + 1086, + 138, + 957, + 279 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 46243, + "bbox": [ + 971, + 10, + 345, + 183 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 352, + "bbox": [ + 1039, + 374, + 24, + 32 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 4945, + "bbox": [ + 1330, + 365, + 206, + 85 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 342, + "bbox": [ + 1331, + 352, + 25, + 38 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 238, + "bbox": [ + 1391, + 344, + 13, + 63 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 349, + "bbox": [ + 1400, + 362, + 14, + 53 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 452, + "bbox": [ + 1380, + 345, + 15, + 51 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1697, + "bbox": [ + 1400, + 338, + 37, + 84 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 751, + "bbox": [ + 1885, + 301, + 28, + 63 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1327, + "bbox": [ + 1857, + 318, + 41, + 48 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 11162, + "bbox": [ + 1968, + 261, + 75, + 242 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 5946, + "bbox": [ + 1894, + 305, + 68, + 158 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1847, + "bbox": [ + 1534, + 309, + 38, + 82 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 3001, + "bbox": [ + 1587, + 317, + 43, + 121 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 3544, + "bbox": [ + 1496, + 317, + 66, + 142 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 3007, + "bbox": [ + 1467, + 300, + 45, + 158 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 1643, + "bbox": [ + 1477, + 373, + 27, + 94 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 78487, + "bbox": [ + 1626, + 178, + 310, + 622 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 6164, + "bbox": [ + 339, + 319, + 63, + 169 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 7032, + "bbox": [ + 245, + 320, + 82, + 167 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 38196, + "bbox": [ + 29, + 259, + 168, + 383 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 20672, + "bbox": [ + 667, + 237, + 90, + 414 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 58634, + "bbox": [ + 431, + 200, + 274, + 514 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 47816, + "bbox": [ + 702, + 259, + 190, + 464 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 3920, + "bbox": [ + 1147, + 236, + 66, + 92 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 13924, + "bbox": [ + 1074, + 220, + 181, + 560 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 104790, + "bbox": [ + 1136, + 215, + 302, + 633 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 8312, + "bbox": [ + 1638, + 243, + 137, + 206 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 125, + "bbox": [ + 1050, + 373, + 16, + 18 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 407, + "bbox": [ + 1029, + 371, + 23, + 40 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1033, + "bbox": [ + 1001, + 366, + 40, + 48 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 4199, + "bbox": [ + 944, + 356, + 76, + 84 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 9689, + "bbox": [ + 867, + 341, + 100, + 125 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 4612, + "bbox": [ + 1062, + 348, + 89, + 68 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 22385, + "bbox": [ + 1573, + 433, + 346, + 156 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_013496_gtFine_panoptic.png", + "image_id": "frankfurt_000001_013496", + "segments_info": [ + { + "area": 785087, + "bbox": [ + 6, + 406, + 2035, + 573 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 23180, + "bbox": [ + 6, + 423, + 1647, + 186 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 513854, + "bbox": [ + 6, + 5, + 2037, + 457 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5957, + "bbox": [ + 923, + 416, + 365, + 58 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 21464, + "bbox": [ + 192, + 15, + 1550, + 469 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 350, + "bbox": [ + 578, + 355, + 383, + 34 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 16915, + "bbox": [ + 179, + 20, + 1564, + 362 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 191906, + "bbox": [ + 670, + 6, + 862, + 431 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 3235, + "bbox": [ + 651, + 5, + 78, + 47 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 514, + "bbox": [ + 829, + 388, + 108, + 19 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 18712, + "bbox": [ + 1322, + 375, + 250, + 111 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 469, + "bbox": [ + 541, + 416, + 22, + 36 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 324, + "bbox": [ + 47, + 392, + 26, + 31 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 122, + "bbox": [ + 1155, + 378, + 16, + 15 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 33, + "bbox": [ + 1200, + 366, + 5, + 17 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 60, + "bbox": [ + 1202, + 373, + 13, + 10 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 190, + "bbox": [ + 1213, + 363, + 19, + 15 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 51, + "bbox": [ + 1244, + 368, + 8, + 9 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 203, + "bbox": [ + 1229, + 363, + 19, + 14 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 124, + "bbox": [ + 1254, + 363, + 19, + 14 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 77, + "bbox": [ + 1347, + 356, + 9, + 13 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 288, + "bbox": [ + 1337, + 353, + 14, + 28 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 631, + "bbox": [ + 1349, + 343, + 34, + 36 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 376, + "bbox": [ + 1426, + 344, + 21, + 28 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 499, + "bbox": [ + 1411, + 352, + 24, + 44 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 510, + "bbox": [ + 1391, + 353, + 27, + 35 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 223, + "bbox": [ + 1462, + 344, + 17, + 48 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 764, + "bbox": [ + 1435, + 351, + 40, + 31 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 95, + "bbox": [ + 1146, + 381, + 11, + 12 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 323, + "bbox": [ + 1126, + 368, + 21, + 23 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 279, + "bbox": [ + 1527, + 340, + 23, + 49 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 1169, + "bbox": [ + 1511, + 344, + 34, + 66 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 2117, + "bbox": [ + 1470, + 328, + 46, + 71 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 1369, + "bbox": [ + 1552, + 333, + 34, + 78 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 2049, + "bbox": [ + 1576, + 337, + 44, + 90 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 2141, + "bbox": [ + 1635, + 338, + 33, + 114 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 223, + "bbox": [ + 1044, + 369, + 22, + 18 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 1668, + "bbox": [ + 1817, + 247, + 52, + 60 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 1067, + "bbox": [ + 1991, + 251, + 38, + 36 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 409, + "bbox": [ + 815, + 391, + 15, + 41 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2204, + "bbox": [ + 581, + 409, + 103, + 31 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1950, + "bbox": [ + 429, + 410, + 51, + 68 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2646, + "bbox": [ + 357, + 403, + 94, + 86 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 4087, + "bbox": [ + 334, + 415, + 92, + 85 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 6280, + "bbox": [ + 273, + 418, + 109, + 98 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 4509, + "bbox": [ + 235, + 420, + 78, + 113 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 36845, + "bbox": [ + 6, + 389, + 261, + 181 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 91, + "bbox": [ + 803, + 386, + 12, + 14 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 327, + "bbox": [ + 783, + 383, + 25, + 16 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 140, + "bbox": [ + 811, + 387, + 18, + 20 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1410, + "bbox": [ + 772, + 399, + 48, + 38 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 219, + "bbox": [ + 854, + 389, + 24, + 13 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 183, + "bbox": [ + 878, + 393, + 32, + 14 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 153, + "bbox": [ + 912, + 395, + 21, + 16 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 565, + "bbox": [ + 848, + 398, + 76, + 29 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 1690, + "bbox": [ + 852, + 401, + 52, + 37 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 12159, + "bbox": [ + 963, + 386, + 156, + 97 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 136758, + "bbox": [ + 1617, + 283, + 426, + 437 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 115, + "bbox": [ + 821, + 416, + 7, + 21 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2746, + "bbox": [ + 1278, + 381, + 101, + 97 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 8524, + "bbox": [ + 1525, + 389, + 114, + 179 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_013710_gtFine_panoptic.png", + "image_id": "frankfurt_000001_013710", + "segments_info": [ + { + "area": 754584, + "bbox": [ + 6, + 354, + 1866, + 625 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 138033, + "bbox": [ + 6, + 351, + 2036, + 606 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 542653, + "bbox": [ + 6, + 5, + 2037, + 437 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 57811, + "bbox": [ + 1638, + 479, + 405, + 302 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 41520, + "bbox": [ + 7, + 18, + 1884, + 518 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 5533, + "bbox": [ + 6, + 164, + 1910, + 185 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 7306, + "bbox": [ + 858, + 139, + 973, + 205 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 190505, + "bbox": [ + 975, + 13, + 1068, + 570 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1769, + "bbox": [ + 1672, + 482, + 371, + 109 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 9827, + "bbox": [ + 1016, + 10, + 121, + 174 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 140, + "bbox": [ + 956, + 332, + 9, + 21 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 81, + "bbox": [ + 967, + 331, + 6, + 21 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 148, + "bbox": [ + 976, + 332, + 8, + 21 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 166, + "bbox": [ + 868, + 351, + 14, + 19 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 296, + "bbox": [ + 885, + 345, + 13, + 30 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 952, + "bbox": [ + 851, + 346, + 21, + 64 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 568, + "bbox": [ + 826, + 352, + 23, + 58 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 121, + "bbox": [ + 1041, + 329, + 12, + 12 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 182, + "bbox": [ + 1052, + 324, + 12, + 17 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 96, + "bbox": [ + 1066, + 332, + 10, + 11 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 107, + "bbox": [ + 1079, + 337, + 10, + 15 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 307, + "bbox": [ + 1414, + 326, + 27, + 53 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 777, + "bbox": [ + 1462, + 321, + 21, + 70 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 1310, + "bbox": [ + 1587, + 321, + 24, + 74 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1125, + "bbox": [ + 1995, + 249, + 33, + 53 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 11912, + "bbox": [ + 734, + 295, + 112, + 258 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 53, + "bbox": [ + 986, + 337, + 8, + 7 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 283, + "bbox": [ + 1065, + 352, + 13, + 34 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 1133, + "bbox": [ + 1326, + 319, + 42, + 59 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1307, + "bbox": [ + 1623, + 298, + 63, + 121 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 274, + "bbox": [ + 997, + 351, + 15, + 27 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 133, + "bbox": [ + 1055, + 344, + 11, + 24 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 1023, + "bbox": [ + 909, + 343, + 45, + 37 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 474, + "bbox": [ + 1027, + 341, + 69, + 14 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 32626, + "bbox": [ + 1051, + 339, + 229, + 182 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 31703, + "bbox": [ + 573, + 330, + 271, + 208 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 505, + "bbox": [ + 871, + 368, + 30, + 26 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1630, + "bbox": [ + 1312, + 350, + 75, + 47 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 60, + "bbox": [ + 1620, + 348, + 13, + 7 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 81, + "bbox": [ + 1003, + 368, + 5, + 19 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 3144, + "bbox": [ + 784, + 393, + 51, + 159 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 116, + "bbox": [ + 1051, + 359, + 26, + 14 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_014221_gtFine_panoptic.png", + "image_id": "frankfurt_000001_014221", + "segments_info": [ + { + "area": 564956, + "bbox": [ + 6, + 371, + 2033, + 608 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 189936, + "bbox": [ + 6, + 371, + 1253, + 556 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 578181, + "bbox": [ + 6, + 5, + 2037, + 582 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 42845, + "bbox": [ + 200, + 7, + 1430, + 722 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 12997, + "bbox": [ + 746, + 245, + 690, + 117 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 160984, + "bbox": [ + 765, + 16, + 1278, + 375 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 6991, + "bbox": [ + 1105, + 12, + 65, + 141 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 468, + "bbox": [ + 1130, + 351, + 22, + 34 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 3081, + "bbox": [ + 592, + 369, + 546, + 94 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 63, + "bbox": [ + 977, + 354, + 6, + 26 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 248, + "bbox": [ + 1014, + 354, + 10, + 29 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 22, + "bbox": [ + 1043, + 357, + 3, + 11 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 152, + "bbox": [ + 823, + 359, + 14, + 52 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 122, + "bbox": [ + 814, + 358, + 11, + 17 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 287, + "bbox": [ + 788, + 352, + 19, + 34 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 774, + "bbox": [ + 766, + 366, + 23, + 62 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 907, + "bbox": [ + 808, + 373, + 19, + 74 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 2061, + "bbox": [ + 780, + 368, + 36, + 95 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 526, + "bbox": [ + 842, + 377, + 29, + 70 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 106, + "bbox": [ + 1105, + 356, + 12, + 18 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 303, + "bbox": [ + 1117, + 350, + 14, + 29 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 62, + "bbox": [ + 1142, + 364, + 7, + 18 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 48, + "bbox": [ + 1163, + 352, + 4, + 16 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 234, + "bbox": [ + 1161, + 364, + 14, + 26 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 333, + "bbox": [ + 1186, + 356, + 13, + 38 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 75, + "bbox": [ + 1202, + 391, + 5, + 20 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 532, + "bbox": [ + 1199, + 361, + 19, + 53 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 628, + "bbox": [ + 1216, + 361, + 18, + 52 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 713, + "bbox": [ + 1231, + 368, + 21, + 52 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 302, + "bbox": [ + 1149, + 350, + 15, + 28 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 102, + "bbox": [ + 1269, + 367, + 11, + 20 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 287, + "bbox": [ + 1265, + 369, + 16, + 48 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 197, + "bbox": [ + 1452, + 363, + 16, + 14 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 69, + "bbox": [ + 1477, + 368, + 9, + 10 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 93, + "bbox": [ + 1508, + 366, + 13, + 9 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 676, + "bbox": [ + 1687, + 349, + 40, + 52 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 1572, + "bbox": [ + 1696, + 349, + 68, + 48 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 661, + "bbox": [ + 1765, + 359, + 35, + 32 + ], + "category_id": 24, + "id": 24028, + "iscrowd": 0 + }, + { + "area": 665, + "bbox": [ + 1823, + 363, + 35, + 30 + ], + "category_id": 24, + "id": 24029, + "iscrowd": 0 + }, + { + "area": 1116, + "bbox": [ + 1867, + 357, + 49, + 41 + ], + "category_id": 24, + "id": 24030, + "iscrowd": 0 + }, + { + "area": 1365, + "bbox": [ + 1961, + 334, + 54, + 44 + ], + "category_id": 24, + "id": 24031, + "iscrowd": 0 + }, + { + "area": 621, + "bbox": [ + 2005, + 342, + 38, + 48 + ], + "category_id": 24, + "id": 24032, + "iscrowd": 0 + }, + { + "area": 2449, + "bbox": [ + 2009, + 357, + 34, + 103 + ], + "category_id": 24, + "id": 24033, + "iscrowd": 0 + }, + { + "area": 158, + "bbox": [ + 1007, + 355, + 8, + 25 + ], + "category_id": 24, + "id": 24034, + "iscrowd": 0 + }, + { + "area": 163, + "bbox": [ + 1023, + 354, + 9, + 28 + ], + "category_id": 24, + "id": 24035, + "iscrowd": 0 + }, + { + "area": 227, + "bbox": [ + 953, + 350, + 10, + 27 + ], + "category_id": 24, + "id": 24036, + "iscrowd": 0 + }, + { + "area": 183, + "bbox": [ + 961, + 348, + 10, + 29 + ], + "category_id": 24, + "id": 24037, + "iscrowd": 0 + }, + { + "area": 196, + "bbox": [ + 986, + 354, + 11, + 28 + ], + "category_id": 24, + "id": 24038, + "iscrowd": 0 + }, + { + "area": 177, + "bbox": [ + 978, + 355, + 10, + 25 + ], + "category_id": 24, + "id": 24039, + "iscrowd": 0 + }, + { + "area": 667, + "bbox": [ + 867, + 358, + 24, + 45 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2756, + "bbox": [ + 883, + 357, + 77, + 67 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3924, + "bbox": [ + 1259, + 366, + 75, + 115 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 7198, + "bbox": [ + 1292, + 363, + 163, + 137 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 11095, + "bbox": [ + 1331, + 376, + 157, + 152 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 33053, + "bbox": [ + 1400, + 374, + 283, + 203 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 90765, + "bbox": [ + 1546, + 390, + 490, + 304 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 52115, + "bbox": [ + 1857, + 441, + 186, + 360 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 488, + "bbox": [ + 1134, + 369, + 47, + 48 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1238, + "bbox": [ + 1147, + 381, + 61, + 39 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 4715, + "bbox": [ + 583, + 370, + 93, + 92 + ], + "category_id": 32, + "id": 32002, + "iscrowd": 0 + }, + { + "area": 358, + "bbox": [ + 1037, + 376, + 19, + 33 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 384, + "bbox": [ + 748, + 424, + 23, + 36 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1597, + "bbox": [ + 714, + 417, + 45, + 46 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 642, + "bbox": [ + 688, + 418, + 30, + 44 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1241, + "bbox": [ + 668, + 413, + 35, + 50 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_014406_gtFine_panoptic.png", + "image_id": "frankfurt_000001_014406", + "segments_info": [ + { + "area": 872806, + "bbox": [ + 6, + 373, + 2037, + 606 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 110975, + "bbox": [ + 6, + 357, + 2037, + 248 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 525112, + "bbox": [ + 6, + 5, + 2037, + 444 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 47639, + "bbox": [ + 59, + 5, + 1842, + 565 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 53039, + "bbox": [ + 98, + 13, + 1646, + 283 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 74942, + "bbox": [ + 343, + 9, + 727, + 358 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 96, + "bbox": [ + 1005, + 10, + 22, + 7 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 4909, + "bbox": [ + 890, + 341, + 158, + 96 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 459, + "bbox": [ + 973, + 312, + 20, + 37 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 392, + "bbox": [ + 960, + 316, + 17, + 30 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 305, + "bbox": [ + 998, + 310, + 19, + 31 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 553, + "bbox": [ + 1014, + 303, + 24, + 34 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 286, + "bbox": [ + 634, + 328, + 11, + 35 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 474, + "bbox": [ + 644, + 320, + 16, + 45 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 506, + "bbox": [ + 693, + 321, + 17, + 42 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 732, + "bbox": [ + 710, + 316, + 23, + 51 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 346, + "bbox": [ + 745, + 321, + 19, + 40 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 535, + "bbox": [ + 732, + 325, + 18, + 40 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 431, + "bbox": [ + 809, + 314, + 18, + 37 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 751, + "bbox": [ + 1196, + 292, + 27, + 118 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1044, + "bbox": [ + 1161, + 297, + 44, + 66 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 2536, + "bbox": [ + 1213, + 304, + 46, + 112 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 4464, + "bbox": [ + 1685, + 313, + 79, + 152 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 5743, + "bbox": [ + 1607, + 261, + 85, + 207 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 1045, + "bbox": [ + 1917, + 328, + 39, + 141 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 3543, + "bbox": [ + 2005, + 307, + 38, + 141 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 4417, + "bbox": [ + 1975, + 278, + 43, + 206 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 9604, + "bbox": [ + 1909, + 265, + 84, + 222 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 625, + "bbox": [ + 86, + 342, + 25, + 32 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 450, + "bbox": [ + 9, + 340, + 23, + 38 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 689, + "bbox": [ + 28, + 340, + 29, + 37 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 5057, + "bbox": [ + 818, + 298, + 65, + 166 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 13374, + "bbox": [ + 748, + 267, + 121, + 268 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 7854, + "bbox": [ + 429, + 309, + 105, + 108 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 36745, + "bbox": [ + 196, + 285, + 254, + 213 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 7682, + "bbox": [ + 1020, + 310, + 205, + 140 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 8122, + "bbox": [ + 1056, + 332, + 152, + 127 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 810, + "bbox": [ + 815, + 350, + 28, + 66 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 4630, + "bbox": [ + 911, + 358, + 132, + 82 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_014565_gtFine_panoptic.png", + "image_id": "frankfurt_000001_014565", + "segments_info": [ + { + "area": 518433, + "bbox": [ + 6, + 414, + 1636, + 565 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 131046, + "bbox": [ + 6, + 417, + 2037, + 383 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 574295, + "bbox": [ + 6, + 5, + 2037, + 531 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 25029, + "bbox": [ + 6, + 5, + 2037, + 675 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 332, + "bbox": [ + 691, + 300, + 156, + 83 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 5767, + "bbox": [ + 674, + 214, + 459, + 213 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 1125, + "bbox": [ + 8, + 400, + 27, + 53 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 50083, + "bbox": [ + 331, + 5, + 445, + 206 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 361, + "bbox": [ + 699, + 395, + 20, + 37 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 322, + "bbox": [ + 653, + 397, + 13, + 38 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 516, + "bbox": [ + 1169, + 358, + 33, + 28 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1269, + "bbox": [ + 1222, + 350, + 39, + 81 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 773, + "bbox": [ + 1198, + 351, + 33, + 42 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2401, + "bbox": [ + 1259, + 341, + 51, + 131 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1081, + "bbox": [ + 711, + 383, + 32, + 71 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1128, + "bbox": [ + 763, + 380, + 29, + 82 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 115, + "bbox": [ + 694, + 397, + 26, + 23 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 109, + "bbox": [ + 744, + 404, + 12, + 13 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 395, + "bbox": [ + 645, + 393, + 33, + 25 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 804, + "bbox": [ + 630, + 398, + 26, + 39 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 6399, + "bbox": [ + 804, + 397, + 114, + 71 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 5132, + "bbox": [ + 964, + 401, + 91, + 122 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 40820, + "bbox": [ + 1005, + 371, + 277, + 193 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 7093, + "bbox": [ + 755, + 333, + 129, + 127 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 304516, + "bbox": [ + 12, + 5, + 622, + 616 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + }, + { + "area": 553, + "bbox": [ + 960, + 394, + 55, + 40 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 294, + "bbox": [ + 727, + 417, + 9, + 43 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 509, + "bbox": [ + 773, + 422, + 13, + 45 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_014741_gtFine_panoptic.png", + "image_id": "frankfurt_000001_014741", + "segments_info": [ + { + "area": 678382, + "bbox": [ + 6, + 412, + 2033, + 567 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 152404, + "bbox": [ + 6, + 406, + 2037, + 308 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 638100, + "bbox": [ + 6, + 5, + 2037, + 501 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 68799, + "bbox": [ + 13, + 5, + 1816, + 588 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 6733, + "bbox": [ + 381, + 162, + 1159, + 213 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 21906, + "bbox": [ + 597, + 69, + 1265, + 362 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 60284, + "bbox": [ + 355, + 64, + 615, + 362 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 72536, + "bbox": [ + 353, + 5, + 999, + 127 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 98, + "bbox": [ + 819, + 387, + 12, + 10 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 362, + "bbox": [ + 798, + 380, + 22, + 79 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 172, + "bbox": [ + 783, + 377, + 19, + 41 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 692, + "bbox": [ + 783, + 385, + 28, + 74 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1115, + "bbox": [ + 1450, + 380, + 35, + 92 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 609, + "bbox": [ + 1564, + 389, + 24, + 90 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 8401, + "bbox": [ + 1569, + 321, + 68, + 205 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 7141, + "bbox": [ + 1644, + 342, + 65, + 186 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 168, + "bbox": [ + 1239, + 391, + 16, + 18 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 3788, + "bbox": [ + 1144, + 358, + 63, + 139 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2150, + "bbox": [ + 1238, + 364, + 58, + 78 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 232, + "bbox": [ + 1340, + 393, + 9, + 31 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1142, + "bbox": [ + 448, + 398, + 37, + 60 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1073, + "bbox": [ + 1624, + 408, + 107, + 60 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2489, + "bbox": [ + 558, + 401, + 119, + 41 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1714, + "bbox": [ + 864, + 390, + 76, + 57 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2027, + "bbox": [ + 777, + 397, + 131, + 54 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 14680, + "bbox": [ + 925, + 374, + 151, + 123 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 971, + "bbox": [ + 1124, + 386, + 94, + 44 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 842, + "bbox": [ + 498, + 399, + 48, + 32 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 230, + "bbox": [ + 1231, + 406, + 29, + 24 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 333, + "bbox": [ + 1477, + 410, + 23, + 25 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2988, + "bbox": [ + 1403, + 417, + 90, + 58 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1472, + "bbox": [ + 1162, + 430, + 22, + 84 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 464, + "bbox": [ + 1255, + 422, + 22, + 66 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_015091_gtFine_panoptic.png", + "image_id": "frankfurt_000001_015091", + "segments_info": [ + { + "area": 757843, + "bbox": [ + 6, + 392, + 2036, + 587 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 131576, + "bbox": [ + 540, + 389, + 1503, + 398 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 625088, + "bbox": [ + 6, + 5, + 2029, + 480 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 28993, + "bbox": [ + 207, + 86, + 1542, + 511 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 18149, + "bbox": [ + 118, + 22, + 1651, + 311 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 39212, + "bbox": [ + 1036, + 16, + 1007, + 494 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 60656, + "bbox": [ + 897, + 8, + 510, + 279 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 298, + "bbox": [ + 1174, + 352, + 14, + 47 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 214, + "bbox": [ + 1397, + 344, + 18, + 17 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1166, + "bbox": [ + 1338, + 371, + 44, + 106 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 3893, + "bbox": [ + 1338, + 339, + 65, + 141 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 509, + "bbox": [ + 934, + 356, + 16, + 50 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1854, + "bbox": [ + 690, + 357, + 47, + 92 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 66, + "bbox": [ + 1342, + 351, + 7, + 10 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 308, + "bbox": [ + 1153, + 361, + 25, + 32 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 720, + "bbox": [ + 1123, + 359, + 32, + 34 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1024, + "bbox": [ + 1013, + 359, + 50, + 43 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 6698, + "bbox": [ + 1040, + 359, + 103, + 82 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 164, + "bbox": [ + 1324, + 352, + 19, + 17 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 20361, + "bbox": [ + 1184, + 351, + 233, + 137 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1517, + "bbox": [ + 459, + 419, + 85, + 114 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 65120, + "bbox": [ + 170, + 308, + 360, + 261 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 64309, + "bbox": [ + 6, + 344, + 274, + 307 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 286, + "bbox": [ + 1168, + 363, + 17, + 28 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_015328_gtFine_panoptic.png", + "image_id": "frankfurt_000001_015328", + "segments_info": [ + { + "area": 664670, + "bbox": [ + 6, + 409, + 2037, + 570 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 427, + "bbox": [ + 935, + 416, + 239, + 44 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 615437, + "bbox": [ + 10, + 5, + 2033, + 447 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1319, + "bbox": [ + 987, + 395, + 186, + 20 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 15953, + "bbox": [ + 194, + 67, + 1840, + 398 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 16679, + "bbox": [ + 163, + 27, + 1880, + 382 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 63871, + "bbox": [ + 6, + 160, + 1167, + 293 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 55184, + "bbox": [ + 757, + 6, + 555, + 301 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 74, + "bbox": [ + 1159, + 414, + 10, + 14 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 34, + "bbox": [ + 1225, + 422, + 10, + 5 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 69, + "bbox": [ + 1284, + 415, + 10, + 8 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 4135, + "bbox": [ + 732, + 369, + 58, + 172 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 331, + "bbox": [ + 1126, + 398, + 29, + 18 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 314, + "bbox": [ + 1096, + 402, + 31, + 16 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 232, + "bbox": [ + 1035, + 404, + 28, + 12 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 496, + "bbox": [ + 1057, + 404, + 42, + 19 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 348, + "bbox": [ + 1015, + 424, + 46, + 31 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 277, + "bbox": [ + 1018, + 427, + 22, + 29 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 407, + "bbox": [ + 1010, + 429, + 23, + 34 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2610, + "bbox": [ + 952, + 424, + 66, + 48 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 610, + "bbox": [ + 902, + 427, + 20, + 54 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2549, + "bbox": [ + 851, + 415, + 60, + 70 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1005, + "bbox": [ + 832, + 419, + 38, + 74 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 3801, + "bbox": [ + 787, + 417, + 69, + 85 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1311, + "bbox": [ + 783, + 421, + 31, + 88 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 3664, + "bbox": [ + 658, + 404, + 94, + 121 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 9658, + "bbox": [ + 578, + 409, + 145, + 138 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 23054, + "bbox": [ + 456, + 404, + 195, + 172 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 50906, + "bbox": [ + 200, + 381, + 300, + 248 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 64792, + "bbox": [ + 6, + 383, + 260, + 305 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 78, + "bbox": [ + 1165, + 401, + 8, + 12 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 1255, + "bbox": [ + 1074, + 424, + 46, + 35 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 632, + "bbox": [ + 1129, + 427, + 33, + 43 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 551, + "bbox": [ + 1138, + 432, + 25, + 49 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 1090, + "bbox": [ + 1149, + 419, + 48, + 72 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 1420, + "bbox": [ + 1161, + 427, + 47, + 68 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 840, + "bbox": [ + 1183, + 426, + 43, + 81 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 2765, + "bbox": [ + 1191, + 426, + 64, + 86 + ], + "category_id": 26, + "id": 26025, + "iscrowd": 0 + }, + { + "area": 505, + "bbox": [ + 1226, + 423, + 48, + 98 + ], + "category_id": 26, + "id": 26026, + "iscrowd": 0 + }, + { + "area": 6277, + "bbox": [ + 1222, + 422, + 94, + 118 + ], + "category_id": 26, + "id": 26027, + "iscrowd": 0 + }, + { + "area": 21269, + "bbox": [ + 1281, + 370, + 246, + 206 + ], + "category_id": 26, + "id": 26028, + "iscrowd": 0 + }, + { + "area": 36680, + "bbox": [ + 1374, + 392, + 273, + 249 + ], + "category_id": 26, + "id": 26029, + "iscrowd": 0 + }, + { + "area": 149034, + "bbox": [ + 1521, + 378, + 522, + 354 + ], + "category_id": 26, + "id": 26030, + "iscrowd": 0 + }, + { + "area": 106, + "bbox": [ + 1052, + 426, + 11, + 26 + ], + "category_id": 26, + "id": 26031, + "iscrowd": 0 + }, + { + "area": 158, + "bbox": [ + 1035, + 424, + 28, + 30 + ], + "category_id": 26, + "id": 26032, + "iscrowd": 0 + }, + { + "area": 181, + "bbox": [ + 1038, + 425, + 16, + 29 + ], + "category_id": 26, + "id": 26033, + "iscrowd": 0 + }, + { + "area": 3631, + "bbox": [ + 734, + 444, + 70, + 113 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_015768_gtFine_panoptic.png", + "image_id": "frankfurt_000001_015768", + "segments_info": [ + { + "area": 468272, + "bbox": [ + 6, + 431, + 1661, + 548 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 163005, + "bbox": [ + 728, + 426, + 1315, + 531 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 374299, + "bbox": [ + 6, + 5, + 1203, + 478 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1791, + "bbox": [ + 1167, + 400, + 34, + 64 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 27164, + "bbox": [ + 59, + 5, + 1783, + 693 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 6402, + "bbox": [ + 173, + 21, + 1572, + 330 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 80652, + "bbox": [ + 1024, + 11, + 1019, + 426 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2662, + "bbox": [ + 822, + 7, + 253, + 45 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 84, + "bbox": [ + 1129, + 401, + 9, + 12 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 95, + "bbox": [ + 1080, + 404, + 10, + 13 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 102, + "bbox": [ + 1108, + 401, + 10, + 14 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 71, + "bbox": [ + 1104, + 403, + 7, + 15 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 9215, + "bbox": [ + 747, + 355, + 81, + 192 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 493, + "bbox": [ + 441, + 381, + 33, + 25 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 312, + "bbox": [ + 397, + 381, + 19, + 22 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 220, + "bbox": [ + 380, + 391, + 22, + 13 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 3347, + "bbox": [ + 918, + 379, + 51, + 120 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1393, + "bbox": [ + 917, + 402, + 76, + 69 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1805, + "bbox": [ + 893, + 404, + 37, + 76 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 9461, + "bbox": [ + 743, + 373, + 158, + 120 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 4685, + "bbox": [ + 652, + 391, + 78, + 162 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 31347, + "bbox": [ + 473, + 353, + 227, + 232 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 36081, + "bbox": [ + 336, + 403, + 236, + 271 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 154128, + "bbox": [ + 6, + 370, + 425, + 469 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 150021, + "bbox": [ + 1502, + 247, + 541, + 429 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 860, + "bbox": [ + 924, + 427, + 38, + 87 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_016029_gtFine_panoptic.png", + "image_id": "frankfurt_000001_016029", + "segments_info": [ + { + "area": 615127, + "bbox": [ + 6, + 416, + 1966, + 563 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 236669, + "bbox": [ + 6, + 395, + 2037, + 562 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 452977, + "bbox": [ + 6, + 5, + 1493, + 511 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 52785, + "bbox": [ + 1203, + 313, + 840, + 249 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 131064, + "bbox": [ + 1199, + 27, + 844, + 399 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 60454, + "bbox": [ + 608, + 12, + 1435, + 737 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1227, + "bbox": [ + 692, + 313, + 418, + 60 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 189756, + "bbox": [ + 6, + 5, + 2037, + 624 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 19019, + "bbox": [ + 632, + 5, + 185, + 227 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3633, + "bbox": [ + 297, + 389, + 914, + 68 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 410, + "bbox": [ + 479, + 385, + 14, + 81 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 501, + "bbox": [ + 480, + 383, + 13, + 56 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3297, + "bbox": [ + 429, + 349, + 44, + 127 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 847, + "bbox": [ + 6, + 440, + 23, + 48 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 3893, + "bbox": [ + 69, + 381, + 72, + 95 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3834, + "bbox": [ + 222, + 382, + 93, + 120 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 592, + "bbox": [ + 891, + 379, + 28, + 68 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 558, + "bbox": [ + 1208, + 342, + 19, + 35 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 594, + "bbox": [ + 1397, + 327, + 29, + 46 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1119, + "bbox": [ + 1420, + 340, + 31, + 74 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 3666, + "bbox": [ + 1318, + 348, + 60, + 137 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 2978, + "bbox": [ + 1381, + 342, + 46, + 138 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 11455, + "bbox": [ + 1625, + 298, + 96, + 249 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 3554, + "bbox": [ + 1779, + 368, + 76, + 131 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 4571, + "bbox": [ + 1838, + 359, + 82, + 127 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 7243, + "bbox": [ + 1756, + 410, + 128, + 142 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 335, + "bbox": [ + 752, + 368, + 9, + 45 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 178, + "bbox": [ + 595, + 409, + 26, + 40 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 817, + "bbox": [ + 1115, + 392, + 76, + 59 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 3814, + "bbox": [ + 480, + 405, + 183, + 112 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 914, + "bbox": [ + 1087, + 389, + 59, + 54 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 2222, + "bbox": [ + 1122, + 398, + 91, + 56 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_016273_gtFine_panoptic.png", + "image_id": "frankfurt_000001_016273", + "segments_info": [ + { + "area": 598952, + "bbox": [ + 6, + 436, + 1847, + 543 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 226456, + "bbox": [ + 299, + 422, + 1744, + 535 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 529217, + "bbox": [ + 6, + 5, + 2037, + 563 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 41346, + "bbox": [ + 68, + 25, + 1837, + 745 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 853, + "bbox": [ + 412, + 225, + 457, + 134 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 20152, + "bbox": [ + 21, + 168, + 1067, + 205 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 139416, + "bbox": [ + 235, + 59, + 646, + 377 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 5413, + "bbox": [ + 382, + 424, + 460, + 19 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 77629, + "bbox": [ + 229, + 5, + 629, + 193 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1, + "bbox": [ + 759, + 419, + 1, + 1 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 428, + "bbox": [ + 502, + 393, + 15, + 37 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 371, + "bbox": [ + 830, + 388, + 16, + 40 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1355, + "bbox": [ + 971, + 375, + 27, + 83 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1050, + "bbox": [ + 991, + 379, + 28, + 85 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 8936, + "bbox": [ + 1016, + 331, + 78, + 204 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3949, + "bbox": [ + 1160, + 357, + 56, + 137 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1263, + "bbox": [ + 1314, + 389, + 25, + 144 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 9496, + "bbox": [ + 1238, + 338, + 89, + 200 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 15002, + "bbox": [ + 1318, + 306, + 119, + 279 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 285, + "bbox": [ + 742, + 386, + 18, + 40 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 464, + "bbox": [ + 745, + 387, + 25, + 39 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 72, + "bbox": [ + 792, + 391, + 13, + 36 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 17, + "bbox": [ + 791, + 389, + 10, + 38 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 464, + "bbox": [ + 784, + 383, + 24, + 44 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 13370, + "bbox": [ + 122, + 388, + 181, + 148 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 19578, + "bbox": [ + 22, + 405, + 199, + 161 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 12064, + "bbox": [ + 6, + 410, + 88, + 180 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 460, + "bbox": [ + 477, + 407, + 45, + 23 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 724, + "bbox": [ + 942, + 412, + 37, + 40 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_016462_gtFine_panoptic.png", + "image_id": "frankfurt_000001_016462", + "segments_info": [ + { + "area": 572409, + "bbox": [ + 6, + 568, + 2037, + 411 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 97622, + "bbox": [ + 12, + 444, + 2031, + 246 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 41622, + "bbox": [ + 172, + 142, + 1871, + 140 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 51505, + "bbox": [ + 6, + 393, + 1858, + 134 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 29438, + "bbox": [ + 232, + 18, + 1668, + 592 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 13148, + "bbox": [ + 1412, + 74, + 142, + 161 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 8434, + "bbox": [ + 184, + 195, + 1399, + 84 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 393159, + "bbox": [ + 6, + 5, + 2037, + 511 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 78090, + "bbox": [ + 6, + 344, + 2037, + 316 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 192148, + "bbox": [ + 17, + 5, + 2026, + 215 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 6829, + "bbox": [ + 175, + 376, + 65, + 171 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 3510, + "bbox": [ + 319, + 415, + 53, + 120 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 4429, + "bbox": [ + 422, + 375, + 83, + 153 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 4651, + "bbox": [ + 585, + 368, + 79, + 153 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 24156, + "bbox": [ + 854, + 313, + 122, + 352 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 22123, + "bbox": [ + 728, + 336, + 134, + 334 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 3483, + "bbox": [ + 1070, + 342, + 78, + 252 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 299, + "bbox": [ + 1344, + 363, + 16, + 45 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 338, + "bbox": [ + 1372, + 350, + 39, + 64 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 14612, + "bbox": [ + 1048, + 381, + 94, + 281 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 5071, + "bbox": [ + 1225, + 349, + 50, + 253 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 26631, + "bbox": [ + 1131, + 275, + 119, + 386 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 14509, + "bbox": [ + 1321, + 355, + 117, + 326 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 26675, + "bbox": [ + 1249, + 295, + 137, + 393 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 604, + "bbox": [ + 1612, + 357, + 20, + 51 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 2324, + "bbox": [ + 1628, + 342, + 38, + 126 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 5059, + "bbox": [ + 1501, + 309, + 76, + 281 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 12099, + "bbox": [ + 1463, + 336, + 96, + 274 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 1584, + "bbox": [ + 1786, + 381, + 66, + 82 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 13870, + "bbox": [ + 1548, + 348, + 145, + 270 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 44793, + "bbox": [ + 1843, + 151, + 195, + 510 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 3572, + "bbox": [ + 962, + 418, + 96, + 72 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 932, + "bbox": [ + 1784, + 390, + 73, + 65 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 17679, + "bbox": [ + 1532, + 464, + 162, + 197 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 35121, + "bbox": [ + 1815, + 436, + 228, + 317 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_017101_gtFine_panoptic.png", + "image_id": "frankfurt_000001_017101", + "segments_info": [ + { + "area": 683823, + "bbox": [ + 6, + 390, + 1997, + 589 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 91225, + "bbox": [ + 6, + 396, + 1467, + 276 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 181329, + "bbox": [ + 6, + 5, + 1515, + 439 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 274800, + "bbox": [ + 972, + 25, + 1071, + 794 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 40696, + "bbox": [ + 101, + 5, + 1458, + 578 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 6037, + "bbox": [ + 672, + 222, + 893, + 156 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 70763, + "bbox": [ + 474, + 225, + 1569, + 732 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 306522, + "bbox": [ + 489, + 13, + 1554, + 439 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 112349, + "bbox": [ + 14, + 5, + 1200, + 220 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 138, + "bbox": [ + 14, + 99, + 13, + 15 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 186, + "bbox": [ + 35, + 96, + 15, + 19 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 64, + "bbox": [ + 965, + 383, + 9, + 9 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 501, + "bbox": [ + 873, + 377, + 13, + 48 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 150, + "bbox": [ + 861, + 376, + 7, + 28 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 879, + "bbox": [ + 839, + 370, + 20, + 72 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 549, + "bbox": [ + 819, + 377, + 18, + 63 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 331, + "bbox": [ + 761, + 368, + 14, + 49 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 849, + "bbox": [ + 766, + 374, + 26, + 70 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 227, + "bbox": [ + 720, + 380, + 16, + 49 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 304, + "bbox": [ + 696, + 379, + 11, + 56 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 1560, + "bbox": [ + 700, + 357, + 35, + 81 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 551, + "bbox": [ + 96, + 93, + 15, + 57 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 781, + "bbox": [ + 126, + 90, + 42, + 64 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 820, + "bbox": [ + 143, + 106, + 27, + 64 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 517, + "bbox": [ + 137, + 137, + 25, + 35 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 399, + "bbox": [ + 370, + 267, + 20, + 28 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 158, + "bbox": [ + 407, + 282, + 19, + 13 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 431, + "bbox": [ + 540, + 300, + 22, + 36 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 607, + "bbox": [ + 539, + 321, + 23, + 47 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 233, + "bbox": [ + 515, + 339, + 23, + 18 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 192, + "bbox": [ + 540, + 367, + 107, + 75 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 1979, + "bbox": [ + 466, + 354, + 44, + 104 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 73, + "bbox": [ + 553, + 362, + 21, + 69 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 402, + "bbox": [ + 537, + 362, + 20, + 74 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 139, + "bbox": [ + 509, + 355, + 16, + 23 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 1305, + "bbox": [ + 522, + 354, + 27, + 104 + ], + "category_id": 24, + "id": 24028, + "iscrowd": 0 + }, + { + "area": 2225, + "bbox": [ + 496, + 364, + 49, + 94 + ], + "category_id": 24, + "id": 24029, + "iscrowd": 0 + }, + { + "area": 1741, + "bbox": [ + 545, + 365, + 31, + 90 + ], + "category_id": 24, + "id": 24030, + "iscrowd": 0 + }, + { + "area": 16, + "bbox": [ + 691, + 441, + 2, + 12 + ], + "category_id": 24, + "id": 24031, + "iscrowd": 0 + }, + { + "area": 602, + "bbox": [ + 659, + 363, + 22, + 110 + ], + "category_id": 24, + "id": 24032, + "iscrowd": 0 + }, + { + "area": 2689, + "bbox": [ + 631, + 354, + 41, + 123 + ], + "category_id": 24, + "id": 24033, + "iscrowd": 0 + }, + { + "area": 575, + "bbox": [ + 344, + 354, + 28, + 71 + ], + "category_id": 24, + "id": 24034, + "iscrowd": 0 + }, + { + "area": 2202, + "bbox": [ + 6, + 346, + 26, + 110 + ], + "category_id": 24, + "id": 24035, + "iscrowd": 0 + }, + { + "area": 690, + "bbox": [ + 92, + 339, + 32, + 103 + ], + "category_id": 24, + "id": 24036, + "iscrowd": 0 + }, + { + "area": 3423, + "bbox": [ + 60, + 344, + 50, + 118 + ], + "category_id": 24, + "id": 24037, + "iscrowd": 0 + }, + { + "area": 3106, + "bbox": [ + 102, + 342, + 44, + 119 + ], + "category_id": 24, + "id": 24038, + "iscrowd": 0 + }, + { + "area": 3027, + "bbox": [ + 135, + 336, + 47, + 125 + ], + "category_id": 24, + "id": 24039, + "iscrowd": 0 + }, + { + "area": 1118, + "bbox": [ + 209, + 376, + 31, + 73 + ], + "category_id": 24, + "id": 24040, + "iscrowd": 0 + }, + { + "area": 988, + "bbox": [ + 285, + 354, + 20, + 96 + ], + "category_id": 24, + "id": 24041, + "iscrowd": 0 + }, + { + "area": 1476, + "bbox": [ + 267, + 349, + 29, + 98 + ], + "category_id": 24, + "id": 24042, + "iscrowd": 0 + }, + { + "area": 2220, + "bbox": [ + 235, + 353, + 49, + 96 + ], + "category_id": 24, + "id": 24043, + "iscrowd": 0 + }, + { + "area": 1347, + "bbox": [ + 318, + 351, + 27, + 98 + ], + "category_id": 24, + "id": 24044, + "iscrowd": 0 + }, + { + "area": 2234, + "bbox": [ + 295, + 354, + 39, + 95 + ], + "category_id": 24, + "id": 24045, + "iscrowd": 0 + }, + { + "area": 2128, + "bbox": [ + 388, + 354, + 37, + 95 + ], + "category_id": 24, + "id": 24046, + "iscrowd": 0 + }, + { + "area": 228, + "bbox": [ + 574, + 363, + 14, + 31 + ], + "category_id": 24, + "id": 24047, + "iscrowd": 0 + }, + { + "area": 180, + "bbox": [ + 538, + 353, + 16, + 23 + ], + "category_id": 24, + "id": 24048, + "iscrowd": 0 + }, + { + "area": 105, + "bbox": [ + 570, + 365, + 9, + 20 + ], + "category_id": 24, + "id": 24049, + "iscrowd": 0 + }, + { + "area": 17, + "bbox": [ + 622, + 362, + 6, + 6 + ], + "category_id": 24, + "id": 24050, + "iscrowd": 0 + }, + { + "area": 7, + "bbox": [ + 619, + 367, + 5, + 9 + ], + "category_id": 24, + "id": 24051, + "iscrowd": 0 + }, + { + "area": 488, + "bbox": [ + 607, + 366, + 17, + 70 + ], + "category_id": 24, + "id": 24052, + "iscrowd": 0 + }, + { + "area": 1005, + "bbox": [ + 617, + 363, + 20, + 78 + ], + "category_id": 24, + "id": 24053, + "iscrowd": 0 + }, + { + "area": 2944, + "bbox": [ + 665, + 362, + 45, + 116 + ], + "category_id": 24, + "id": 24054, + "iscrowd": 0 + }, + { + "area": 461, + "bbox": [ + 891, + 380, + 27, + 20 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1451, + "bbox": [ + 974, + 356, + 54, + 44 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 205, + "bbox": [ + 1008, + 390, + 22, + 20 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2060, + "bbox": [ + 937, + 391, + 57, + 51 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 81, + "bbox": [ + 1031, + 387, + 7, + 15 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 290, + "bbox": [ + 1046, + 386, + 26, + 15 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 422, + "bbox": [ + 1153, + 391, + 43, + 13 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 122, + "bbox": [ + 1146, + 385, + 8, + 39 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 259, + "bbox": [ + 1211, + 394, + 37, + 11 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 426, + "bbox": [ + 1234, + 391, + 48, + 17 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 24536, + "bbox": [ + 1254, + 361, + 211, + 159 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_017459_gtFine_panoptic.png", + "image_id": "frankfurt_000001_017459", + "segments_info": [ + { + "area": 196715, + "bbox": [ + 6, + 595, + 1025, + 384 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 564354, + "bbox": [ + 102, + 421, + 1941, + 536 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 303666, + "bbox": [ + 8, + 13, + 2035, + 467 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 6771, + "bbox": [ + 145, + 363, + 400, + 66 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 36492, + "bbox": [ + 1102, + 60, + 876, + 124 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 51261, + "bbox": [ + 48, + 5, + 1350, + 657 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 13148, + "bbox": [ + 251, + 5, + 119, + 142 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 13880, + "bbox": [ + 1151, + 253, + 84, + 203 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 335030, + "bbox": [ + 11, + 5, + 1683, + 535 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 908, + "bbox": [ + 102, + 415, + 369, + 22 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 4207, + "bbox": [ + 1314, + 344, + 65, + 128 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1798, + "bbox": [ + 1389, + 356, + 30, + 117 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 4450, + "bbox": [ + 1439, + 303, + 89, + 117 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 5311, + "bbox": [ + 823, + 326, + 42, + 195 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 7836, + "bbox": [ + 851, + 300, + 63, + 216 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 536, + "bbox": [ + 307, + 370, + 49, + 105 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 4228, + "bbox": [ + 198, + 345, + 55, + 131 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 4652, + "bbox": [ + 248, + 329, + 63, + 145 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 6521, + "bbox": [ + 516, + 289, + 96, + 271 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 19116, + "bbox": [ + 577, + 289, + 103, + 286 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 17602, + "bbox": [ + 727, + 281, + 111, + 303 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 21871, + "bbox": [ + 906, + 269, + 124, + 320 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1750, + "bbox": [ + 1118, + 304, + 36, + 139 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 464, + "bbox": [ + 1230, + 332, + 28, + 84 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 8630, + "bbox": [ + 1246, + 308, + 109, + 285 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 4559, + "bbox": [ + 1635, + 339, + 51, + 218 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 13379, + "bbox": [ + 1578, + 321, + 89, + 239 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 10601, + "bbox": [ + 1473, + 356, + 78, + 200 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 4423, + "bbox": [ + 1702, + 324, + 52, + 174 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 1403, + "bbox": [ + 1817, + 340, + 47, + 69 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 3877, + "bbox": [ + 1819, + 359, + 113, + 59 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 1180, + "bbox": [ + 92, + 373, + 43, + 42 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 4189, + "bbox": [ + 1013, + 370, + 117, + 90 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 71487, + "bbox": [ + 6, + 291, + 179, + 583 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 637, + "bbox": [ + 532, + 398, + 21, + 62 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 915, + "bbox": [ + 1447, + 406, + 45, + 32 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1617, + "bbox": [ + 820, + 386, + 92, + 122 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 6085, + "bbox": [ + 348, + 381, + 100, + 105 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 312, + "bbox": [ + 704, + 463, + 11, + 43 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 439, + "bbox": [ + 1097, + 420, + 58, + 30 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 18862, + "bbox": [ + 1181, + 363, + 140, + 264 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 25390, + "bbox": [ + 1025, + 394, + 181, + 220 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_017842_gtFine_panoptic.png", + "image_id": "frankfurt_000001_017842", + "segments_info": [ + { + "area": 753252, + "bbox": [ + 6, + 409, + 2037, + 570 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 152478, + "bbox": [ + 6, + 407, + 2037, + 523 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 81763, + "bbox": [ + 59, + 10, + 1984, + 444 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 62610, + "bbox": [ + 783, + 205, + 1260, + 247 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 92317, + "bbox": [ + 70, + 22, + 1800, + 643 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7084, + "bbox": [ + 312, + 22, + 1458, + 321 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1802, + "bbox": [ + 921, + 187, + 446, + 249 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 418605, + "bbox": [ + 6, + 5, + 1940, + 497 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 18174, + "bbox": [ + 6, + 395, + 1883, + 136 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 160208, + "bbox": [ + 6, + 5, + 992, + 401 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 6237, + "bbox": [ + 1612, + 318, + 72, + 162 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1148, + "bbox": [ + 1845, + 301, + 40, + 149 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 4199, + "bbox": [ + 1870, + 310, + 44, + 155 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 131, + "bbox": [ + 240, + 443, + 9, + 23 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 326, + "bbox": [ + 82, + 441, + 24, + 37 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 95, + "bbox": [ + 427, + 441, + 8, + 15 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1158, + "bbox": [ + 1296, + 344, + 60, + 66 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 525, + "bbox": [ + 1339, + 327, + 26, + 63 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 4107, + "bbox": [ + 1386, + 320, + 78, + 107 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 6504, + "bbox": [ + 1338, + 314, + 72, + 201 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 2097, + "bbox": [ + 1134, + 365, + 81, + 93 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 9734, + "bbox": [ + 1155, + 364, + 132, + 106 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 77, + "bbox": [ + 926, + 403, + 12, + 9 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 89, + "bbox": [ + 932, + 402, + 13, + 21 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 7296, + "bbox": [ + 929, + 393, + 111, + 83 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 463, + "bbox": [ + 764, + 419, + 26, + 35 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 532, + "bbox": [ + 756, + 420, + 18, + 35 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 637, + "bbox": [ + 729, + 412, + 29, + 44 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1103, + "bbox": [ + 708, + 414, + 39, + 46 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1946, + "bbox": [ + 659, + 406, + 62, + 60 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1497, + "bbox": [ + 635, + 413, + 56, + 57 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1794, + "bbox": [ + 618, + 416, + 49, + 58 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1814, + "bbox": [ + 600, + 415, + 35, + 66 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 10108, + "bbox": [ + 473, + 393, + 130, + 99 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 6182, + "bbox": [ + 797, + 363, + 87, + 87 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 2054, + "bbox": [ + 1255, + 406, + 72, + 102 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 655, + "bbox": [ + 1277, + 443, + 30, + 62 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 2838, + "bbox": [ + 1454, + 401, + 55, + 107 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 14541, + "bbox": [ + 1289, + 386, + 188, + 131 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_018113_gtFine_panoptic.png", + "image_id": "frankfurt_000001_018113", + "segments_info": [ + { + "area": 691049, + "bbox": [ + 6, + 405, + 1918, + 574 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 208472, + "bbox": [ + 6, + 405, + 2037, + 552 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 111356, + "bbox": [ + 47, + 12, + 1686, + 366 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 113980, + "bbox": [ + 445, + 307, + 1598, + 177 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 49171, + "bbox": [ + 6, + 129, + 1821, + 552 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 175, + "bbox": [ + 1004, + 329, + 14, + 19 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 22584, + "bbox": [ + 123, + 18, + 1414, + 461 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 366187, + "bbox": [ + 6, + 5, + 2037, + 440 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 18729, + "bbox": [ + 13, + 436, + 2030, + 104 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 49499, + "bbox": [ + 17, + 5, + 1113, + 183 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2656, + "bbox": [ + 557, + 348, + 42, + 99 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2064, + "bbox": [ + 622, + 352, + 65, + 108 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 143, + "bbox": [ + 1016, + 355, + 20, + 8 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 282, + "bbox": [ + 1034, + 354, + 25, + 21 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 255, + "bbox": [ + 1019, + 363, + 29, + 12 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1529, + "bbox": [ + 886, + 366, + 42, + 46 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1480, + "bbox": [ + 943, + 349, + 77, + 31 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1282, + "bbox": [ + 951, + 370, + 52, + 71 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 9852, + "bbox": [ + 968, + 367, + 130, + 98 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 44494, + "bbox": [ + 160, + 366, + 332, + 175 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 20439, + "bbox": [ + 696, + 255, + 192, + 195 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 4440, + "bbox": [ + 610, + 383, + 71, + 104 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_019698_gtFine_panoptic.png", + "image_id": "frankfurt_000001_019698", + "segments_info": [ + { + "area": 654634, + "bbox": [ + 6, + 439, + 1930, + 540 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 213914, + "bbox": [ + 6, + 432, + 2037, + 525 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 435932, + "bbox": [ + 7, + 10, + 2036, + 565 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 29304, + "bbox": [ + 6, + 251, + 1455, + 256 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 82029, + "bbox": [ + 63, + 18, + 1980, + 775 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 176, + "bbox": [ + 1034, + 382, + 12, + 18 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2012, + "bbox": [ + 1000, + 309, + 194, + 133 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 310681, + "bbox": [ + 6, + 72, + 1236, + 465 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 170, + "bbox": [ + 856, + 434, + 72, + 9 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 116765, + "bbox": [ + 7, + 5, + 1004, + 333 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1689, + "bbox": [ + 475, + 403, + 33, + 86 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2406, + "bbox": [ + 438, + 394, + 41, + 104 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 238, + "bbox": [ + 833, + 418, + 13, + 28 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 84, + "bbox": [ + 804, + 425, + 13, + 9 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 114, + "bbox": [ + 761, + 426, + 10, + 14 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 123, + "bbox": [ + 771, + 425, + 12, + 15 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1813, + "bbox": [ + 938, + 413, + 71, + 34 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1068, + "bbox": [ + 1106, + 414, + 81, + 32 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_019854_gtFine_panoptic.png", + "image_id": "frankfurt_000001_019854", + "segments_info": [ + { + "area": 772906, + "bbox": [ + 6, + 409, + 2037, + 570 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 44541, + "bbox": [ + 271, + 416, + 1772, + 174 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 232314, + "bbox": [ + 319, + 10, + 1724, + 454 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4449, + "bbox": [ + 319, + 398, + 166, + 54 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 2422, + "bbox": [ + 546, + 401, + 163, + 39 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 60478, + "bbox": [ + 7, + 5, + 1936, + 551 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 6922, + "bbox": [ + 368, + 214, + 1036, + 161 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 31959, + "bbox": [ + 1064, + 36, + 913, + 452 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 469657, + "bbox": [ + 14, + 5, + 2029, + 522 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 8568, + "bbox": [ + 321, + 430, + 1722, + 48 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 58718, + "bbox": [ + 682, + 5, + 326, + 346 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2774, + "bbox": [ + 1407, + 366, + 36, + 144 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 5094, + "bbox": [ + 1373, + 349, + 46, + 162 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 359, + "bbox": [ + 602, + 394, + 16, + 47 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 499, + "bbox": [ + 614, + 392, + 21, + 49 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 191, + "bbox": [ + 769, + 399, + 10, + 28 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 74, + "bbox": [ + 857, + 400, + 12, + 12 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1005, + "bbox": [ + 865, + 398, + 38, + 32 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 44, + "bbox": [ + 824, + 405, + 7, + 10 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1138, + "bbox": [ + 822, + 403, + 45, + 32 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 118, + "bbox": [ + 809, + 399, + 12, + 15 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 107, + "bbox": [ + 801, + 401, + 12, + 13 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 112, + "bbox": [ + 795, + 402, + 11, + 13 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 162, + "bbox": [ + 778, + 399, + 18, + 19 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 165, + "bbox": [ + 779, + 405, + 12, + 15 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 262, + "bbox": [ + 751, + 394, + 27, + 25 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2733, + "bbox": [ + 707, + 405, + 64, + 50 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 123373, + "bbox": [ + 6, + 319, + 274, + 574 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 203, + "bbox": [ + 705, + 399, + 18, + 27 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 78, + "bbox": [ + 771, + 418, + 8, + 12 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_019969_gtFine_panoptic.png", + "image_id": "frankfurt_000001_019969", + "segments_info": [ + { + "area": 750693, + "bbox": [ + 6, + 430, + 2037, + 549 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 131116, + "bbox": [ + 6, + 434, + 2037, + 270 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 383111, + "bbox": [ + 1070, + 14, + 973, + 503 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 44609, + "bbox": [ + 6, + 410, + 1370, + 135 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 32762, + "bbox": [ + 356, + 73, + 1169, + 483 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 84, + "bbox": [ + 1065, + 371, + 7, + 12 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 900, + "bbox": [ + 686, + 331, + 521, + 69 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 314867, + "bbox": [ + 6, + 5, + 1992, + 554 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 17099, + "bbox": [ + 6, + 476, + 536, + 67 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 146001, + "bbox": [ + 382, + 5, + 863, + 360 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 467, + "bbox": [ + 1285, + 406, + 21, + 50 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 892, + "bbox": [ + 808, + 403, + 21, + 60 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2972, + "bbox": [ + 746, + 386, + 48, + 130 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 166, + "bbox": [ + 1086, + 422, + 14, + 14 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 798, + "bbox": [ + 1097, + 422, + 37, + 26 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 30, + "bbox": [ + 1053, + 425, + 7, + 6 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 34, + "bbox": [ + 1047, + 425, + 9, + 6 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 55, + "bbox": [ + 1037, + 425, + 13, + 10 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 179, + "bbox": [ + 1028, + 419, + 17, + 15 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 133, + "bbox": [ + 1022, + 423, + 13, + 13 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 121, + "bbox": [ + 1016, + 424, + 9, + 16 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 217, + "bbox": [ + 1005, + 420, + 12, + 21 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 247, + "bbox": [ + 979, + 415, + 27, + 27 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 146, + "bbox": [ + 983, + 422, + 13, + 22 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 197, + "bbox": [ + 976, + 422, + 14, + 25 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 439, + "bbox": [ + 962, + 417, + 17, + 32 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 2039, + "bbox": [ + 911, + 405, + 53, + 49 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 1688, + "bbox": [ + 746, + 442, + 37, + 83 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_020046_gtFine_panoptic.png", + "image_id": "frankfurt_000001_020046", + "segments_info": [ + { + "area": 877808, + "bbox": [ + 6, + 412, + 2037, + 567 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 58726, + "bbox": [ + 6, + 417, + 2015, + 257 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 298135, + "bbox": [ + 1032, + 13, + 1011, + 458 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 50239, + "bbox": [ + 6, + 395, + 1874, + 94 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 48186, + "bbox": [ + 32, + 25, + 2011, + 595 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 104, + "bbox": [ + 963, + 336, + 71, + 57 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 9086, + "bbox": [ + 34, + 28, + 2009, + 357 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 340796, + "bbox": [ + 6, + 5, + 2037, + 462 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 8177, + "bbox": [ + 6, + 456, + 2015, + 52 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 128548, + "bbox": [ + 9, + 5, + 1172, + 333 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3294, + "bbox": [ + 1095, + 369, + 59, + 116 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 197, + "bbox": [ + 1013, + 403, + 16, + 13 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 212, + "bbox": [ + 1048, + 403, + 17, + 15 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 726, + "bbox": [ + 1060, + 402, + 35, + 25 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 163, + "bbox": [ + 991, + 395, + 19, + 20 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 260, + "bbox": [ + 980, + 397, + 21, + 19 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 238, + "bbox": [ + 967, + 402, + 22, + 15 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 73, + "bbox": [ + 961, + 401, + 10, + 19 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 156, + "bbox": [ + 955, + 400, + 11, + 23 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 536, + "bbox": [ + 935, + 398, + 25, + 28 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 482, + "bbox": [ + 899, + 391, + 41, + 36 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 308, + "bbox": [ + 916, + 404, + 19, + 26 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 209, + "bbox": [ + 900, + 399, + 19, + 32 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 746, + "bbox": [ + 878, + 398, + 35, + 37 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1217, + "bbox": [ + 851, + 395, + 38, + 49 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 3461, + "bbox": [ + 792, + 389, + 69, + 60 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 11695, + "bbox": [ + 667, + 363, + 127, + 105 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_020287_gtFine_panoptic.png", + "image_id": "frankfurt_000001_020287", + "segments_info": [ + { + "area": 684191, + "bbox": [ + 6, + 406, + 2016, + 573 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 246965, + "bbox": [ + 6, + 411, + 2037, + 546 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 248771, + "bbox": [ + 1039, + 11, + 981, + 455 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 30006, + "bbox": [ + 6, + 370, + 518, + 126 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 8661, + "bbox": [ + 391, + 358, + 911, + 102 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 81508, + "bbox": [ + 255, + 17, + 1788, + 608 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 15429, + "bbox": [ + 546, + 21, + 1474, + 315 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 15282, + "bbox": [ + 1075, + 18, + 635, + 375 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 408950, + "bbox": [ + 6, + 5, + 1313, + 471 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 64446, + "bbox": [ + 26, + 5, + 1024, + 304 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 69, + "bbox": [ + 1035, + 402, + 9, + 11 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 3999, + "bbox": [ + 1375, + 349, + 66, + 126 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 434, + "bbox": [ + 1149, + 391, + 15, + 41 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2494, + "bbox": [ + 1241, + 343, + 53, + 130 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 108, + "bbox": [ + 995, + 400, + 10, + 14 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 5622, + "bbox": [ + 171, + 362, + 51, + 152 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 590, + "bbox": [ + 6, + 383, + 10, + 107 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 154, + "bbox": [ + 1021, + 402, + 16, + 11 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 57, + "bbox": [ + 1044, + 401, + 18, + 6 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 425, + "bbox": [ + 1041, + 404, + 25, + 21 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 116, + "bbox": [ + 956, + 401, + 21, + 16 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 539, + "bbox": [ + 912, + 386, + 36, + 30 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 765, + "bbox": [ + 940, + 409, + 38, + 26 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1084, + "bbox": [ + 862, + 385, + 44, + 47 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1653, + "bbox": [ + 891, + 402, + 52, + 39 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 412, + "bbox": [ + 856, + 402, + 23, + 35 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 496, + "bbox": [ + 847, + 402, + 21, + 38 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 463, + "bbox": [ + 729, + 393, + 35, + 27 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 6937, + "bbox": [ + 751, + 382, + 103, + 84 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 3378, + "bbox": [ + 568, + 393, + 98, + 75 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 11520, + "bbox": [ + 610, + 391, + 149, + 99 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 67, + "bbox": [ + 949, + 406, + 20, + 4 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 2472, + "bbox": [ + 1954, + 357, + 68, + 117 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1091, + "bbox": [ + 392, + 418, + 41, + 57 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_020693_gtFine_panoptic.png", + "image_id": "frankfurt_000001_020693", + "segments_info": [ + { + "area": 801202, + "bbox": [ + 6, + 432, + 2037, + 547 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 118996, + "bbox": [ + 1269, + 418, + 774, + 539 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 99526, + "bbox": [ + 1162, + 13, + 881, + 443 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 20082, + "bbox": [ + 622, + 257, + 1334, + 206 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 59804, + "bbox": [ + 6, + 292, + 2037, + 195 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 76172, + "bbox": [ + 11, + 26, + 2032, + 781 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2527, + "bbox": [ + 87, + 153, + 1956, + 98 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4470, + "bbox": [ + 636, + 191, + 1100, + 142 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 561631, + "bbox": [ + 6, + 5, + 2037, + 432 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 5431, + "bbox": [ + 544, + 443, + 278, + 55 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 69850, + "bbox": [ + 11, + 5, + 1409, + 366 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 161, + "bbox": [ + 1159, + 397, + 21, + 16 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 374, + "bbox": [ + 1348, + 382, + 16, + 44 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2285, + "bbox": [ + 1369, + 362, + 34, + 93 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1307, + "bbox": [ + 1312, + 386, + 29, + 74 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2214, + "bbox": [ + 559, + 379, + 55, + 107 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 154, + "bbox": [ + 1362, + 390, + 10, + 29 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 313, + "bbox": [ + 1334, + 391, + 18, + 31 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 580, + "bbox": [ + 1272, + 388, + 32, + 49 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 580, + "bbox": [ + 1275, + 393, + 22, + 54 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 998, + "bbox": [ + 1227, + 385, + 59, + 74 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 471, + "bbox": [ + 1144, + 398, + 27, + 36 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 506, + "bbox": [ + 1129, + 397, + 30, + 38 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1108, + "bbox": [ + 1104, + 397, + 42, + 41 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 573, + "bbox": [ + 1091, + 398, + 26, + 42 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1421, + "bbox": [ + 1028, + 386, + 77, + 56 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1159, + "bbox": [ + 1044, + 397, + 41, + 50 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 922, + "bbox": [ + 1024, + 398, + 38, + 52 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 1463, + "bbox": [ + 993, + 397, + 51, + 57 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 2643, + "bbox": [ + 952, + 397, + 68, + 64 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 2339, + "bbox": [ + 915, + 395, + 62, + 71 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 8447, + "bbox": [ + 818, + 394, + 124, + 83 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 7412, + "bbox": [ + 1167, + 386, + 110, + 85 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 2143, + "bbox": [ + 554, + 427, + 64, + 61 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_021406_gtFine_panoptic.png", + "image_id": "frankfurt_000001_021406", + "segments_info": [ + { + "area": 639015, + "bbox": [ + 6, + 538, + 2037, + 441 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 174122, + "bbox": [ + 21, + 461, + 2022, + 165 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 393620, + "bbox": [ + 94, + 5, + 1893, + 540 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 55951, + "bbox": [ + 155, + 233, + 1888, + 307 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 152537, + "bbox": [ + 314, + 296, + 1729, + 220 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 43270, + "bbox": [ + 15, + 16, + 1972, + 585 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 10647, + "bbox": [ + 1303, + 120, + 198, + 133 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 12771, + "bbox": [ + 644, + 76, + 213, + 180 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 255833, + "bbox": [ + 6, + 5, + 2037, + 450 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 34719, + "bbox": [ + 148, + 5, + 186, + 259 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 721, + "bbox": [ + 272, + 431, + 44, + 32 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 666, + "bbox": [ + 284, + 423, + 20, + 51 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 24806, + "bbox": [ + 1269, + 318, + 137, + 338 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 24524, + "bbox": [ + 1095, + 321, + 144, + 348 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 109, + "bbox": [ + 301, + 426, + 14, + 12 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 947, + "bbox": [ + 235, + 420, + 42, + 46 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 418, + "bbox": [ + 229, + 435, + 21, + 35 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 401, + "bbox": [ + 218, + 435, + 19, + 38 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 310, + "bbox": [ + 207, + 432, + 19, + 42 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 460, + "bbox": [ + 190, + 431, + 29, + 46 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 239, + "bbox": [ + 193, + 436, + 19, + 41 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 757, + "bbox": [ + 135, + 425, + 71, + 60 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 903, + "bbox": [ + 136, + 431, + 60, + 55 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 669, + "bbox": [ + 121, + 430, + 46, + 77 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1412, + "bbox": [ + 119, + 430, + 47, + 77 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 3026, + "bbox": [ + 6, + 423, + 136, + 91 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1578, + "bbox": [ + 41, + 432, + 47, + 117 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 7380, + "bbox": [ + 6, + 427, + 72, + 132 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_021825_gtFine_panoptic.png", + "image_id": "frankfurt_000001_021825", + "segments_info": [ + { + "area": 713290, + "bbox": [ + 6, + 441, + 2037, + 538 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 57038, + "bbox": [ + 184, + 430, + 1859, + 144 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 313323, + "bbox": [ + 6, + 5, + 2037, + 446 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 43703, + "bbox": [ + 200, + 380, + 1843, + 150 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 68885, + "bbox": [ + 6, + 325, + 2037, + 203 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 22557, + "bbox": [ + 198, + 117, + 1503, + 439 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4200, + "bbox": [ + 184, + 182, + 1275, + 224 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 11096, + "bbox": [ + 310, + 123, + 1556, + 291 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 333763, + "bbox": [ + 8, + 31, + 2035, + 409 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 27217, + "bbox": [ + 1294, + 318, + 749, + 154 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 82671, + "bbox": [ + 552, + 5, + 689, + 203 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 109, + "bbox": [ + 1050, + 412, + 10, + 22 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 75, + "bbox": [ + 1057, + 407, + 7, + 28 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 576, + "bbox": [ + 643, + 399, + 28, + 38 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 5422, + "bbox": [ + 1390, + 344, + 48, + 180 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 7179, + "bbox": [ + 1429, + 332, + 60, + 203 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 6845, + "bbox": [ + 1769, + 325, + 101, + 192 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 290, + "bbox": [ + 977, + 402, + 13, + 34 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 750, + "bbox": [ + 822, + 424, + 82, + 25 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 746, + "bbox": [ + 660, + 407, + 113, + 47 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 586, + "bbox": [ + 670, + 415, + 97, + 45 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1801, + "bbox": [ + 602, + 405, + 77, + 57 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 7870, + "bbox": [ + 626, + 425, + 130, + 75 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 140365, + "bbox": [ + 6, + 405, + 359, + 559 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1028, + "bbox": [ + 1171, + 414, + 69, + 24 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 212, + "bbox": [ + 964, + 410, + 14, + 19 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1921, + "bbox": [ + 1239, + 406, + 47, + 67 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_023235_gtFine_panoptic.png", + "image_id": "frankfurt_000001_023235", + "segments_info": [ + { + "area": 665081, + "bbox": [ + 6, + 513, + 2037, + 466 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 155639, + "bbox": [ + 6, + 479, + 2037, + 308 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 533652, + "bbox": [ + 6, + 5, + 2037, + 515 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 50764, + "bbox": [ + 288, + 451, + 1396, + 107 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 37669, + "bbox": [ + 69, + 5, + 1116, + 693 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7108, + "bbox": [ + 109, + 124, + 991, + 140 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 13544, + "bbox": [ + 93, + 154, + 1009, + 222 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 228802, + "bbox": [ + 15, + 19, + 2028, + 493 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2091, + "bbox": [ + 1169, + 492, + 296, + 21 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 201, + "bbox": [ + 6, + 402, + 5, + 71 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 5377, + "bbox": [ + 1830, + 352, + 74, + 179 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 5911, + "bbox": [ + 1899, + 353, + 58, + 182 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2336, + "bbox": [ + 2009, + 405, + 34, + 94 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 6211, + "bbox": [ + 1845, + 402, + 157, + 111 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 9532, + "bbox": [ + 1741, + 366, + 115, + 155 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_023369_gtFine_panoptic.png", + "image_id": "frankfurt_000001_023369", + "segments_info": [ + { + "area": 614325, + "bbox": [ + 6, + 429, + 2037, + 550 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 162966, + "bbox": [ + 6, + 425, + 2037, + 543 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 474919, + "bbox": [ + 6, + 11, + 2037, + 510 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 16415, + "bbox": [ + 570, + 19, + 881, + 520 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2211, + "bbox": [ + 564, + 175, + 587, + 189 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 502729, + "bbox": [ + 6, + 5, + 2037, + 831 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 697, + "bbox": [ + 787, + 378, + 53, + 33 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 2296, + "bbox": [ + 539, + 393, + 84, + 67 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1586, + "bbox": [ + 892, + 411, + 46, + 59 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 17222, + "bbox": [ + 1882, + 294, + 117, + 283 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 658, + "bbox": [ + 952, + 392, + 42, + 38 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 764, + "bbox": [ + 919, + 389, + 58, + 42 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1096, + "bbox": [ + 822, + 386, + 139, + 46 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1294, + "bbox": [ + 826, + 389, + 116, + 43 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 404, + "bbox": [ + 838, + 398, + 88, + 34 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3699, + "bbox": [ + 786, + 399, + 120, + 44 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 531, + "bbox": [ + 734, + 391, + 25, + 40 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 8685, + "bbox": [ + 1175, + 387, + 122, + 93 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_023769_gtFine_panoptic.png", + "image_id": "frankfurt_000001_023769", + "segments_info": [ + { + "area": 477496, + "bbox": [ + 16, + 433, + 2025, + 546 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 14050, + "bbox": [ + 6, + 436, + 1218, + 133 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 394190, + "bbox": [ + 6, + 12, + 2037, + 448 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 13832, + "bbox": [ + 48, + 18, + 1668, + 473 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2795, + "bbox": [ + 487, + 284, + 979, + 93 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 6988, + "bbox": [ + 106, + 225, + 1599, + 156 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 493876, + "bbox": [ + 6, + 5, + 1965, + 850 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 8393, + "bbox": [ + 6, + 472, + 297, + 52 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 42326, + "bbox": [ + 892, + 11, + 231, + 317 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1087, + "bbox": [ + 472, + 387, + 34, + 53 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 7135, + "bbox": [ + 812, + 344, + 72, + 195 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 7084, + "bbox": [ + 899, + 362, + 75, + 194 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 4549, + "bbox": [ + 403, + 389, + 125, + 71 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 7209, + "bbox": [ + 645, + 356, + 269, + 112 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 12313, + "bbox": [ + 455, + 395, + 295, + 94 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 519, + "bbox": [ + 950, + 422, + 40, + 33 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 398, + "bbox": [ + 980, + 419, + 37, + 37 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 99, + "bbox": [ + 1112, + 410, + 18, + 9 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 8290, + "bbox": [ + 993, + 399, + 177, + 63 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 6294, + "bbox": [ + 1203, + 406, + 134, + 78 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 3888, + "bbox": [ + 1272, + 416, + 113, + 119 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 12978, + "bbox": [ + 1311, + 373, + 143, + 186 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 39277, + "bbox": [ + 1381, + 369, + 300, + 236 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 115270, + "bbox": [ + 1524, + 382, + 519, + 330 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 40732, + "bbox": [ + 1889, + 498, + 154, + 336 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_024927_gtFine_panoptic.png", + "image_id": "frankfurt_000001_024927", + "segments_info": [ + { + "area": 832353, + "bbox": [ + 6, + 420, + 2037, + 559 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 66463, + "bbox": [ + 182, + 404, + 1861, + 239 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 382999, + "bbox": [ + 6, + 5, + 2037, + 444 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 842, + "bbox": [ + 1243, + 398, + 84, + 22 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 48042, + "bbox": [ + 192, + 5, + 1798, + 566 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3969, + "bbox": [ + 606, + 182, + 882, + 186 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4880, + "bbox": [ + 593, + 272, + 1158, + 159 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 254739, + "bbox": [ + 252, + 5, + 1650, + 421 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 94613, + "bbox": [ + 494, + 5, + 879, + 343 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 839, + "bbox": [ + 1165, + 396, + 42, + 32 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 207, + "bbox": [ + 1218, + 380, + 11, + 50 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 290, + "bbox": [ + 1236, + 379, + 14, + 42 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 232, + "bbox": [ + 1410, + 382, + 15, + 25 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 747, + "bbox": [ + 1748, + 354, + 17, + 71 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 45261, + "bbox": [ + 6, + 370, + 249, + 275 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 850, + "bbox": [ + 739, + 388, + 70, + 32 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1380, + "bbox": [ + 730, + 394, + 50, + 84 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 6536, + "bbox": [ + 557, + 341, + 141, + 58 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 6168, + "bbox": [ + 652, + 393, + 111, + 94 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 661, + "bbox": [ + 507, + 396, + 39, + 32 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 14089, + "bbox": [ + 527, + 394, + 172, + 110 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 37180, + "bbox": [ + 265, + 382, + 288, + 164 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2045, + "bbox": [ + 892, + 382, + 86, + 82 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2879, + "bbox": [ + 878, + 389, + 80, + 87 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 13474, + "bbox": [ + 770, + 389, + 159, + 107 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 306, + "bbox": [ + 1004, + 402, + 19, + 22 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 6852, + "bbox": [ + 1013, + 334, + 124, + 133 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1569, + "bbox": [ + 1019, + 386, + 59, + 95 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 10327, + "bbox": [ + 1032, + 393, + 128, + 108 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 1752, + "bbox": [ + 1494, + 388, + 52, + 79 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 208, + "bbox": [ + 1291, + 405, + 23, + 14 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2513, + "bbox": [ + 2006, + 432, + 37, + 149 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 385, + "bbox": [ + 2005, + 406, + 38, + 18 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_025512_gtFine_panoptic.png", + "image_id": "frankfurt_000001_025512", + "segments_info": [ + { + "area": 737909, + "bbox": [ + 6, + 435, + 2037, + 544 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 129560, + "bbox": [ + 591, + 435, + 1452, + 472 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 166607, + "bbox": [ + 360, + 20, + 1683, + 441 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 15739, + "bbox": [ + 1657, + 405, + 386, + 54 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 297, + "bbox": [ + 890, + 429, + 52, + 11 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 49666, + "bbox": [ + 104, + 5, + 1939, + 606 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 16481, + "bbox": [ + 84, + 42, + 1957, + 369 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 9492, + "bbox": [ + 298, + 152, + 1622, + 295 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 488845, + "bbox": [ + 6, + 5, + 1744, + 486 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 171, + "bbox": [ + 578, + 442, + 19, + 11 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 79978, + "bbox": [ + 617, + 5, + 513, + 360 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 364, + "bbox": [ + 1109, + 419, + 20, + 31 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 9111, + "bbox": [ + 1308, + 388, + 145, + 108 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 25310, + "bbox": [ + 403, + 335, + 186, + 334 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 33520, + "bbox": [ + 240, + 344, + 203, + 376 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 135, + "bbox": [ + 6, + 514, + 7, + 31 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2424, + "bbox": [ + 6, + 654, + 56, + 92 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 630, + "bbox": [ + 847, + 400, + 28, + 56 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 36443, + "bbox": [ + 746, + 261, + 125, + 467 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 4014, + "bbox": [ + 1454, + 344, + 45, + 140 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 3808, + "bbox": [ + 1494, + 344, + 52, + 139 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 4268, + "bbox": [ + 1579, + 335, + 54, + 146 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1794, + "bbox": [ + 666, + 416, + 82, + 39 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 673, + "bbox": [ + 836, + 425, + 57, + 20 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 186, + "bbox": [ + 1005, + 424, + 16, + 13 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 232, + "bbox": [ + 1066, + 422, + 20, + 17 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 441, + "bbox": [ + 1047, + 424, + 25, + 21 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1076, + "bbox": [ + 1122, + 419, + 40, + 34 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 331, + "bbox": [ + 1976, + 392, + 28, + 67 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 4542, + "bbox": [ + 1764, + 385, + 229, + 74 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 195, + "bbox": [ + 989, + 425, + 16, + 13 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_025713_gtFine_panoptic.png", + "image_id": "frankfurt_000001_025713", + "segments_info": [ + { + "area": 801612, + "bbox": [ + 6, + 424, + 2037, + 555 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 132935, + "bbox": [ + 995, + 436, + 1048, + 472 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 145459, + "bbox": [ + 785, + 20, + 1258, + 431 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 12586, + "bbox": [ + 1679, + 405, + 364, + 54 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 48917, + "bbox": [ + 110, + 5, + 1933, + 606 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 16848, + "bbox": [ + 85, + 39, + 1956, + 323 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 10715, + "bbox": [ + 301, + 152, + 1619, + 295 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 438744, + "bbox": [ + 6, + 5, + 1747, + 488 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 78257, + "bbox": [ + 616, + 5, + 515, + 327 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 403, + "bbox": [ + 1109, + 419, + 19, + 31 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 9067, + "bbox": [ + 1317, + 394, + 138, + 104 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 763, + "bbox": [ + 1043, + 394, + 28, + 64 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 761, + "bbox": [ + 1057, + 399, + 27, + 57 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 711, + "bbox": [ + 1210, + 396, + 28, + 59 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 788, + "bbox": [ + 1230, + 391, + 22, + 64 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2637, + "bbox": [ + 1486, + 365, + 42, + 97 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1915, + "bbox": [ + 1533, + 371, + 33, + 93 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 4163, + "bbox": [ + 1656, + 340, + 42, + 161 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 6023, + "bbox": [ + 1718, + 327, + 56, + 173 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 535, + "bbox": [ + 1057, + 422, + 41, + 29 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 996, + "bbox": [ + 1235, + 379, + 116, + 26 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1066, + "bbox": [ + 1122, + 420, + 40, + 33 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2932, + "bbox": [ + 1353, + 393, + 123, + 65 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 4771, + "bbox": [ + 1738, + 386, + 231, + 73 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 125649, + "bbox": [ + 40, + 206, + 960, + 270 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_025921_gtFine_panoptic.png", + "image_id": "frankfurt_000001_025921", + "segments_info": [ + { + "area": 774382, + "bbox": [ + 6, + 442, + 2037, + 537 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 118770, + "bbox": [ + 1418, + 445, + 625, + 463 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 148466, + "bbox": [ + 749, + 20, + 1294, + 434 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 8356, + "bbox": [ + 1688, + 405, + 351, + 53 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 41576, + "bbox": [ + 106, + 5, + 1937, + 606 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 14513, + "bbox": [ + 85, + 39, + 1956, + 323 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 9386, + "bbox": [ + 301, + 152, + 1619, + 295 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 400832, + "bbox": [ + 6, + 5, + 1748, + 488 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 74520, + "bbox": [ + 617, + 5, + 514, + 270 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1876, + "bbox": [ + 1534, + 372, + 36, + 92 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2121, + "bbox": [ + 1584, + 379, + 38, + 82 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 485, + "bbox": [ + 1867, + 383, + 25, + 75 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1227, + "bbox": [ + 1876, + 360, + 32, + 98 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2699, + "bbox": [ + 1922, + 360, + 60, + 102 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2007, + "bbox": [ + 1893, + 363, + 54, + 99 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 4373, + "bbox": [ + 1656, + 338, + 44, + 170 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 402, + "bbox": [ + 1756, + 329, + 20, + 26 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 17896, + "bbox": [ + 1673, + 315, + 140, + 304 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 2477, + "bbox": [ + 773, + 386, + 57, + 69 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1170, + "bbox": [ + 735, + 413, + 56, + 40 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 152996, + "bbox": [ + 846, + 248, + 700, + 306 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 76412, + "bbox": [ + 6, + 318, + 737, + 149 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_027325_gtFine_panoptic.png", + "image_id": "frankfurt_000001_027325", + "segments_info": [ + { + "area": 706251, + "bbox": [ + 36, + 412, + 2007, + 567 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 56284, + "bbox": [ + 6, + 422, + 2037, + 555 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 303342, + "bbox": [ + 86, + 5, + 1101, + 433 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 37138, + "bbox": [ + 127, + 101, + 1765, + 586 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4758, + "bbox": [ + 258, + 89, + 880, + 269 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 31389, + "bbox": [ + 169, + 23, + 994, + 307 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 235345, + "bbox": [ + 13, + 5, + 2030, + 483 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 119369, + "bbox": [ + 6, + 442, + 527, + 328 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 1295, + "bbox": [ + 1908, + 313, + 73, + 55 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 633, + "bbox": [ + 649, + 372, + 27, + 59 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 806, + "bbox": [ + 667, + 368, + 24, + 63 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 165, + "bbox": [ + 1052, + 366, + 15, + 16 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 6205, + "bbox": [ + 177, + 371, + 192, + 54 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2359, + "bbox": [ + 938, + 380, + 96, + 92 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 20112, + "bbox": [ + 739, + 371, + 205, + 119 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 19444, + "bbox": [ + 951, + 382, + 219, + 135 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 57636, + "bbox": [ + 1102, + 386, + 376, + 197 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 212702, + "bbox": [ + 1137, + 129, + 720, + 416 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_028232_gtFine_panoptic.png", + "image_id": "frankfurt_000001_028232", + "segments_info": [ + { + "area": 714805, + "bbox": [ + 6, + 403, + 2037, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 137203, + "bbox": [ + 6, + 399, + 1609, + 376 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 414556, + "bbox": [ + 6, + 5, + 2037, + 523 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 50111, + "bbox": [ + 107, + 5, + 1456, + 650 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 129, + "bbox": [ + 967, + 341, + 60, + 48 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1696, + "bbox": [ + 856, + 272, + 319, + 110 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 363231, + "bbox": [ + 436, + 5, + 1599, + 464 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 5772, + "bbox": [ + 1449, + 458, + 215, + 51 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 19907, + "bbox": [ + 895, + 9, + 154, + 252 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 481, + "bbox": [ + 922, + 389, + 33, + 21 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 1392, + "bbox": [ + 275, + 386, + 61, + 50 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 305, + "bbox": [ + 824, + 386, + 13, + 33 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 253, + "bbox": [ + 836, + 389, + 14, + 24 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3770, + "bbox": [ + 774, + 350, + 63, + 134 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 971, + "bbox": [ + 563, + 372, + 24, + 62 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1320, + "bbox": [ + 874, + 388, + 52, + 42 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 80, + "bbox": [ + 954, + 400, + 7, + 20 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 718, + "bbox": [ + 959, + 397, + 33, + 25 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 522, + "bbox": [ + 1043, + 403, + 25, + 25 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 720, + "bbox": [ + 1067, + 393, + 50, + 43 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 323, + "bbox": [ + 1074, + 406, + 20, + 30 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1483, + "bbox": [ + 1086, + 399, + 51, + 40 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 118923, + "bbox": [ + 1606, + 360, + 437, + 363 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 386, + "bbox": [ + 832, + 402, + 43, + 36 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 160, + "bbox": [ + 893, + 417, + 9, + 21 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_028335_gtFine_panoptic.png", + "image_id": "frankfurt_000001_028335", + "segments_info": [ + { + "area": 525976, + "bbox": [ + 200, + 400, + 1842, + 579 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 223323, + "bbox": [ + 6, + 414, + 1368, + 564 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 494506, + "bbox": [ + 6, + 5, + 2037, + 486 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 11493, + "bbox": [ + 18, + 407, + 1179, + 120 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 2259, + "bbox": [ + 654, + 363, + 105, + 63 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 43329, + "bbox": [ + 6, + 5, + 1816, + 595 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 326, + "bbox": [ + 1004, + 308, + 182, + 74 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 13791, + "bbox": [ + 619, + 22, + 1323, + 372 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 168764, + "bbox": [ + 6, + 6, + 1526, + 475 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 43144, + "bbox": [ + 798, + 7, + 408, + 198 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 186, + "bbox": [ + 1034, + 389, + 24, + 16 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 1913, + "bbox": [ + 618, + 344, + 53, + 156 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 3336, + "bbox": [ + 574, + 348, + 52, + 135 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 5305, + "bbox": [ + 517, + 338, + 61, + 164 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 5108, + "bbox": [ + 440, + 340, + 56, + 159 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 113, + "bbox": [ + 1016, + 394, + 16, + 10 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 114, + "bbox": [ + 1044, + 392, + 13, + 14 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 379, + "bbox": [ + 1051, + 390, + 28, + 22 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 413, + "bbox": [ + 1063, + 398, + 21, + 29 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1825, + "bbox": [ + 1077, + 394, + 54, + 41 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2830, + "bbox": [ + 1235, + 400, + 68, + 51 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 9635, + "bbox": [ + 1344, + 359, + 160, + 130 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 6399, + "bbox": [ + 1393, + 397, + 99, + 105 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 6219, + "bbox": [ + 1458, + 367, + 142, + 132 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 182300, + "bbox": [ + 1454, + 349, + 589, + 406 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 118, + "bbox": [ + 966, + 387, + 20, + 8 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 305, + "bbox": [ + 987, + 393, + 36, + 40 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 515, + "bbox": [ + 990, + 393, + 29, + 42 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1302, + "bbox": [ + 960, + 393, + 44, + 50 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 1598, + "bbox": [ + 928, + 388, + 51, + 75 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 1906, + "bbox": [ + 916, + 389, + 45, + 88 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 2245, + "bbox": [ + 891, + 386, + 51, + 102 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 20753, + "bbox": [ + 723, + 357, + 192, + 156 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 712, + "bbox": [ + 1302, + 409, + 46, + 43 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1610, + "bbox": [ + 624, + 409, + 25, + 103 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_028590_gtFine_panoptic.png", + "image_id": "frankfurt_000001_028590", + "segments_info": [ + { + "area": 758912, + "bbox": [ + 6, + 404, + 2037, + 575 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 122753, + "bbox": [ + 6, + 403, + 2037, + 391 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 462375, + "bbox": [ + 8, + 5, + 2035, + 426 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 6854, + "bbox": [ + 49, + 290, + 262, + 50 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 2993, + "bbox": [ + 6, + 316, + 201, + 61 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 13242, + "bbox": [ + 296, + 5, + 1714, + 538 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 11173, + "bbox": [ + 285, + 145, + 1227, + 286 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 146264, + "bbox": [ + 808, + 80, + 1235, + 374 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 74559, + "bbox": [ + 743, + 6, + 1158, + 277 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1146, + "bbox": [ + 1794, + 343, + 26, + 72 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 665, + "bbox": [ + 1749, + 339, + 24, + 76 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 799, + "bbox": [ + 1425, + 344, + 25, + 90 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 968, + "bbox": [ + 1387, + 357, + 18, + 74 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 9683, + "bbox": [ + 487, + 309, + 114, + 218 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1776, + "bbox": [ + 354, + 291, + 51, + 65 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 857, + "bbox": [ + 328, + 306, + 35, + 34 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 741, + "bbox": [ + 275, + 302, + 31, + 30 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 900, + "bbox": [ + 227, + 297, + 35, + 32 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1230, + "bbox": [ + 1571, + 361, + 46, + 45 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 107, + "bbox": [ + 1146, + 385, + 11, + 17 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1262, + "bbox": [ + 1153, + 369, + 68, + 59 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2142, + "bbox": [ + 1173, + 378, + 57, + 56 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1597, + "bbox": [ + 1211, + 368, + 51, + 80 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 9299, + "bbox": [ + 1229, + 366, + 125, + 96 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 23274, + "bbox": [ + 978, + 366, + 196, + 154 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 159, + "bbox": [ + 946, + 383, + 31, + 15 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 293, + "bbox": [ + 953, + 388, + 26, + 26 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 266, + "bbox": [ + 953, + 392, + 16, + 22 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 219, + "bbox": [ + 945, + 391, + 11, + 27 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 745, + "bbox": [ + 900, + 359, + 47, + 35 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1397, + "bbox": [ + 898, + 376, + 49, + 46 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1252, + "bbox": [ + 837, + 378, + 38, + 73 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 2372, + "bbox": [ + 809, + 369, + 49, + 90 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 5592, + "bbox": [ + 743, + 357, + 87, + 116 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 2515, + "bbox": [ + 744, + 363, + 35, + 130 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 35672, + "bbox": [ + 497, + 300, + 272, + 226 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 119632, + "bbox": [ + 6, + 327, + 540, + 286 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 310, + "bbox": [ + 996, + 383, + 21, + 23 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_028854_gtFine_panoptic.png", + "image_id": "frankfurt_000001_028854", + "segments_info": [ + { + "area": 776611, + "bbox": [ + 6, + 421, + 2037, + 558 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 114873, + "bbox": [ + 6, + 441, + 2037, + 321 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 461697, + "bbox": [ + 110, + 5, + 1933, + 498 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 31307, + "bbox": [ + 267, + 5, + 1773, + 566 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 18093, + "bbox": [ + 365, + 135, + 1559, + 242 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 21233, + "bbox": [ + 268, + 132, + 1551, + 288 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 251791, + "bbox": [ + 10, + 5, + 1654, + 475 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 47638, + "bbox": [ + 944, + 9, + 351, + 255 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3597, + "bbox": [ + 210, + 407, + 75, + 70 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 253, + "bbox": [ + 1317, + 405, + 15, + 34 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1233, + "bbox": [ + 1322, + 404, + 27, + 75 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1548, + "bbox": [ + 1350, + 401, + 27, + 78 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1298, + "bbox": [ + 1375, + 402, + 26, + 78 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2040, + "bbox": [ + 696, + 378, + 29, + 107 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1161, + "bbox": [ + 208, + 361, + 28, + 66 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 839, + "bbox": [ + 230, + 366, + 31, + 57 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 9710, + "bbox": [ + 496, + 318, + 71, + 242 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 240, + "bbox": [ + 1096, + 417, + 19, + 14 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 246, + "bbox": [ + 1122, + 427, + 12, + 27 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 600, + "bbox": [ + 1132, + 412, + 47, + 46 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 876, + "bbox": [ + 1138, + 418, + 36, + 44 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 980, + "bbox": [ + 1160, + 415, + 37, + 51 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 288, + "bbox": [ + 1174, + 434, + 16, + 37 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3153, + "bbox": [ + 1181, + 399, + 100, + 81 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 7394, + "bbox": [ + 1212, + 415, + 114, + 81 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 6969, + "bbox": [ + 987, + 401, + 104, + 84 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 825, + "bbox": [ + 985, + 392, + 40, + 43 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 2743, + "bbox": [ + 160, + 402, + 53, + 72 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_029086_gtFine_panoptic.png", + "image_id": "frankfurt_000001_029086", + "segments_info": [ + { + "area": 775599, + "bbox": [ + 6, + 415, + 2037, + 564 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 97356, + "bbox": [ + 6, + 427, + 2037, + 264 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 344404, + "bbox": [ + 6, + 5, + 2037, + 513 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 10508, + "bbox": [ + 863, + 420, + 1180, + 92 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 16066, + "bbox": [ + 846, + 20, + 985, + 531 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2412, + "bbox": [ + 1051, + 121, + 312, + 237 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 18047, + "bbox": [ + 895, + 113, + 982, + 276 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 336987, + "bbox": [ + 18, + 5, + 2025, + 506 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 25081, + "bbox": [ + 75, + 452, + 1634, + 137 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 34840, + "bbox": [ + 842, + 7, + 389, + 162 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1310, + "bbox": [ + 939, + 399, + 198, + 38 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 491, + "bbox": [ + 1210, + 400, + 24, + 44 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 662, + "bbox": [ + 1230, + 389, + 22, + 57 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 627, + "bbox": [ + 1276, + 380, + 13, + 61 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 701, + "bbox": [ + 1302, + 382, + 19, + 59 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2546, + "bbox": [ + 1431, + 371, + 38, + 107 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 392, + "bbox": [ + 1125, + 402, + 27, + 29 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 405, + "bbox": [ + 1139, + 403, + 24, + 34 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 628, + "bbox": [ + 1151, + 401, + 26, + 40 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1698, + "bbox": [ + 1169, + 399, + 55, + 44 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 169, + "bbox": [ + 998, + 402, + 12, + 28 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 561, + "bbox": [ + 960, + 398, + 31, + 31 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 253, + "bbox": [ + 962, + 403, + 13, + 28 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 503, + "bbox": [ + 897, + 397, + 51, + 44 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2106, + "bbox": [ + 880, + 402, + 61, + 42 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 3836, + "bbox": [ + 1004, + 388, + 77, + 59 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2164, + "bbox": [ + 1286, + 387, + 62, + 50 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 148263, + "bbox": [ + 402, + 175, + 479, + 379 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_029236_gtFine_panoptic.png", + "image_id": "frankfurt_000001_029236", + "segments_info": [ + { + "area": 520773, + "bbox": [ + 6, + 440, + 2034, + 539 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 939, + "bbox": [ + 1062, + 448, + 69, + 28 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 534288, + "bbox": [ + 6, + 5, + 2037, + 475 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 153662, + "bbox": [ + 6, + 399, + 972, + 406 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 17780, + "bbox": [ + 179, + 5, + 1835, + 454 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2280, + "bbox": [ + 927, + 239, + 257, + 153 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 81686, + "bbox": [ + 283, + 125, + 1498, + 663 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 8818, + "bbox": [ + 736, + 218, + 363, + 200 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 39425, + "bbox": [ + 846, + 7, + 236, + 372 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 93, + "bbox": [ + 1328, + 381, + 9, + 12 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 9015, + "bbox": [ + 653, + 332, + 77, + 285 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 482, + "bbox": [ + 1001, + 418, + 29, + 28 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 901, + "bbox": [ + 1025, + 416, + 46, + 34 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1904, + "bbox": [ + 1058, + 405, + 78, + 43 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1827, + "bbox": [ + 1119, + 392, + 82, + 85 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 5194, + "bbox": [ + 1138, + 390, + 144, + 103 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1766, + "bbox": [ + 1186, + 399, + 81, + 103 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 707, + "bbox": [ + 1197, + 405, + 69, + 88 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2172, + "bbox": [ + 1204, + 409, + 62, + 107 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 11499, + "bbox": [ + 1223, + 392, + 116, + 167 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 15276, + "bbox": [ + 1296, + 367, + 270, + 180 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 28739, + "bbox": [ + 1315, + 389, + 236, + 234 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 146531, + "bbox": [ + 1484, + 301, + 559, + 403 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 88483, + "bbox": [ + 1781, + 429, + 262, + 452 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1051, + "bbox": [ + 915, + 419, + 44, + 32 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 117619, + "bbox": [ + 52, + 186, + 524, + 301 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 220, + "bbox": [ + 1108, + 432, + 12, + 31 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_029600_gtFine_panoptic.png", + "image_id": "frankfurt_000001_029600", + "segments_info": [ + { + "area": 453557, + "bbox": [ + 430, + 414, + 1609, + 551 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 294, + "bbox": [ + 1119, + 407, + 24, + 13 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 609085, + "bbox": [ + 6, + 5, + 2037, + 503 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 262490, + "bbox": [ + 6, + 390, + 997, + 587 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 41927, + "bbox": [ + 6, + 377, + 993, + 94 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 7367, + "bbox": [ + 256, + 5, + 469, + 376 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 757, + "bbox": [ + 472, + 309, + 265, + 55 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 567, + "bbox": [ + 455, + 317, + 318, + 62 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 42513, + "bbox": [ + 439, + 135, + 803, + 246 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 48548, + "bbox": [ + 807, + 7, + 424, + 233 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 382, + "bbox": [ + 1121, + 361, + 11, + 47 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1812, + "bbox": [ + 1129, + 353, + 41, + 96 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 6244, + "bbox": [ + 952, + 336, + 126, + 84 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 204, + "bbox": [ + 1151, + 377, + 24, + 62 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 605, + "bbox": [ + 1162, + 373, + 25, + 75 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1933, + "bbox": [ + 1170, + 362, + 85, + 90 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1647, + "bbox": [ + 1185, + 370, + 45, + 103 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3549, + "bbox": [ + 1196, + 366, + 91, + 115 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3352, + "bbox": [ + 1229, + 366, + 79, + 138 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 15417, + "bbox": [ + 1255, + 351, + 150, + 185 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 61527, + "bbox": [ + 1342, + 290, + 392, + 302 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 162631, + "bbox": [ + 1523, + 324, + 520, + 423 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 19559, + "bbox": [ + 1965, + 550, + 78, + 386 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 3951, + "bbox": [ + 1041, + 379, + 79, + 60 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 271, + "bbox": [ + 1051, + 373, + 51, + 12 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 6783, + "bbox": [ + 819, + 332, + 166, + 50 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_030067_gtFine_panoptic.png", + "image_id": "frankfurt_000001_030067", + "segments_info": [ + { + "area": 555959, + "bbox": [ + 193, + 419, + 1850, + 560 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 23577, + "bbox": [ + 894, + 448, + 1055, + 186 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 634180, + "bbox": [ + 6, + 5, + 2037, + 528 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 193496, + "bbox": [ + 6, + 413, + 884, + 503 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 34332, + "bbox": [ + 6, + 410, + 878, + 121 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 17692, + "bbox": [ + 290, + 8, + 1028, + 483 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1930, + "bbox": [ + 336, + 254, + 779, + 125 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4919, + "bbox": [ + 594, + 252, + 732, + 162 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 82709, + "bbox": [ + 151, + 92, + 1654, + 418 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 58695, + "bbox": [ + 628, + 5, + 699, + 279 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3960, + "bbox": [ + 463, + 434, + 253, + 41 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 2392, + "bbox": [ + 1136, + 399, + 55, + 57 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 221, + "bbox": [ + 832, + 394, + 22, + 17 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 354, + "bbox": [ + 292, + 395, + 16, + 29 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 237, + "bbox": [ + 898, + 388, + 8, + 31 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 323, + "bbox": [ + 919, + 404, + 19, + 28 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 384, + "bbox": [ + 930, + 402, + 37, + 34 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 238, + "bbox": [ + 939, + 406, + 27, + 31 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 479, + "bbox": [ + 944, + 409, + 29, + 30 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 879, + "bbox": [ + 960, + 407, + 40, + 34 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1012, + "bbox": [ + 988, + 405, + 45, + 38 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 787, + "bbox": [ + 1014, + 405, + 32, + 39 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1807, + "bbox": [ + 1036, + 403, + 53, + 43 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1813, + "bbox": [ + 1080, + 405, + 71, + 46 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 6668, + "bbox": [ + 1187, + 362, + 129, + 122 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 6352, + "bbox": [ + 1227, + 375, + 138, + 120 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 7891, + "bbox": [ + 1272, + 390, + 109, + 118 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 6440, + "bbox": [ + 1344, + 380, + 123, + 152 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 54198, + "bbox": [ + 1373, + 380, + 352, + 205 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 24768, + "bbox": [ + 1936, + 447, + 107, + 308 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 5563, + "bbox": [ + 130, + 465, + 216, + 51 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 158, + "bbox": [ + 738, + 403, + 29, + 10 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 242, + "bbox": [ + 746, + 405, + 42, + 8 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 437, + "bbox": [ + 949, + 386, + 25, + 23 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_030310_gtFine_panoptic.png", + "image_id": "frankfurt_000001_030310", + "segments_info": [ + { + "area": 785313, + "bbox": [ + 6, + 425, + 2037, + 554 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 19769, + "bbox": [ + 1661, + 460, + 290, + 124 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 491933, + "bbox": [ + 7, + 5, + 2036, + 437 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5707, + "bbox": [ + 1625, + 351, + 95, + 75 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 21572, + "bbox": [ + 500, + 7, + 1459, + 509 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 717, + "bbox": [ + 948, + 294, + 332, + 94 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 21446, + "bbox": [ + 470, + 98, + 1494, + 290 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 105585, + "bbox": [ + 1015, + 112, + 839, + 295 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 83794, + "bbox": [ + 942, + 9, + 481, + 270 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2948, + "bbox": [ + 1300, + 361, + 39, + 129 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 243, + "bbox": [ + 1239, + 397, + 33, + 20 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3570, + "bbox": [ + 1237, + 383, + 117, + 72 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3448, + "bbox": [ + 1800, + 374, + 159, + 45 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 215, + "bbox": [ + 1217, + 371, + 24, + 21 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 6974, + "bbox": [ + 1326, + 378, + 124, + 115 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 7745, + "bbox": [ + 1389, + 380, + 98, + 130 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 29842, + "bbox": [ + 1451, + 359, + 212, + 176 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 10023, + "bbox": [ + 1712, + 389, + 266, + 76 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 951, + "bbox": [ + 1977, + 384, + 63, + 56 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 48025, + "bbox": [ + 1862, + 382, + 181, + 361 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 903, + "bbox": [ + 1014, + 400, + 36, + 31 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 263, + "bbox": [ + 993, + 403, + 15, + 33 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 673, + "bbox": [ + 956, + 394, + 43, + 44 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 251, + "bbox": [ + 971, + 402, + 17, + 38 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 828, + "bbox": [ + 947, + 401, + 34, + 40 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 302, + "bbox": [ + 939, + 400, + 23, + 42 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 920, + "bbox": [ + 915, + 398, + 38, + 48 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 1170, + "bbox": [ + 871, + 399, + 65, + 50 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 1099, + "bbox": [ + 874, + 403, + 40, + 51 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 1278, + "bbox": [ + 846, + 401, + 46, + 59 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 2145, + "bbox": [ + 813, + 402, + 59, + 64 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 6935, + "bbox": [ + 387, + 383, + 132, + 128 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 29663, + "bbox": [ + 192, + 385, + 273, + 166 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 57503, + "bbox": [ + 6, + 310, + 263, + 315 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 84966, + "bbox": [ + 479, + 268, + 367, + 329 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 28502, + "bbox": [ + 1039, + 349, + 206, + 170 + ], + "category_id": 26, + "id": 26025, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_030669_gtFine_panoptic.png", + "image_id": "frankfurt_000001_030669", + "segments_info": [ + { + "area": 557253, + "bbox": [ + 6, + 399, + 1806, + 580 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 229692, + "bbox": [ + 451, + 417, + 1592, + 540 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 355819, + "bbox": [ + 6, + 5, + 2037, + 410 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 72005, + "bbox": [ + 1134, + 162, + 909, + 442 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 67338, + "bbox": [ + 1674, + 173, + 324, + 311 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 22743, + "bbox": [ + 475, + 10, + 987, + 514 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 12193, + "bbox": [ + 666, + 39, + 827, + 345 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 12378, + "bbox": [ + 488, + 14, + 1046, + 339 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 148624, + "bbox": [ + 431, + 5, + 1612, + 408 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 51206, + "bbox": [ + 422, + 5, + 581, + 206 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 189, + "bbox": [ + 635, + 380, + 9, + 25 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 9834, + "bbox": [ + 1393, + 278, + 81, + 273 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 11444, + "bbox": [ + 1544, + 283, + 91, + 244 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 11776, + "bbox": [ + 1470, + 280, + 93, + 259 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 3793, + "bbox": [ + 547, + 386, + 81, + 56 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2594, + "bbox": [ + 440, + 387, + 107, + 39 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 29786, + "bbox": [ + 942, + 326, + 236, + 190 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 4952, + "bbox": [ + 812, + 279, + 132, + 61 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 87668, + "bbox": [ + 642, + 316, + 362, + 301 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 9772, + "bbox": [ + 296, + 346, + 164, + 153 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 95271, + "bbox": [ + 6, + 338, + 413, + 286 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 4644, + "bbox": [ + 1533, + 272, + 92, + 192 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_031266_gtFine_panoptic.png", + "image_id": "frankfurt_000001_031266", + "segments_info": [ + { + "area": 797906, + "bbox": [ + 6, + 407, + 2036, + 572 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 21527, + "bbox": [ + 1748, + 474, + 295, + 142 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 583113, + "bbox": [ + 6, + 5, + 2037, + 497 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 23277, + "bbox": [ + 288, + 5, + 1484, + 579 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 583, + "bbox": [ + 961, + 297, + 137, + 90 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 23778, + "bbox": [ + 852, + 22, + 964, + 341 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 88574, + "bbox": [ + 643, + 5, + 430, + 408 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 28400, + "bbox": [ + 1007, + 11, + 207, + 237 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 231, + "bbox": [ + 834, + 374, + 16, + 26 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 554, + "bbox": [ + 1307, + 352, + 19, + 46 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 837, + "bbox": [ + 1076, + 365, + 23, + 63 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 579, + "bbox": [ + 1173, + 373, + 15, + 56 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 4950, + "bbox": [ + 620, + 346, + 80, + 139 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1005, + "bbox": [ + 986, + 388, + 40, + 30 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 399, + "bbox": [ + 963, + 391, + 21, + 26 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 507, + "bbox": [ + 946, + 383, + 22, + 35 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 385, + "bbox": [ + 933, + 391, + 21, + 32 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 528, + "bbox": [ + 905, + 388, + 28, + 38 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 694, + "bbox": [ + 890, + 388, + 30, + 39 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2511, + "bbox": [ + 836, + 388, + 66, + 44 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 534, + "bbox": [ + 785, + 381, + 55, + 36 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2338, + "bbox": [ + 787, + 388, + 51, + 64 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 5879, + "bbox": [ + 706, + 379, + 94, + 80 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2389, + "bbox": [ + 635, + 388, + 87, + 88 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 11282, + "bbox": [ + 504, + 374, + 143, + 125 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 17379, + "bbox": [ + 368, + 385, + 187, + 139 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 46407, + "bbox": [ + 100, + 386, + 316, + 191 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 23816, + "bbox": [ + 6, + 386, + 136, + 219 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 547, + "bbox": [ + 1172, + 365, + 28, + 64 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 1929, + "bbox": [ + 1024, + 378, + 54, + 44 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 6713, + "bbox": [ + 1071, + 345, + 102, + 86 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 1589, + "bbox": [ + 1184, + 362, + 73, + 73 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 6780, + "bbox": [ + 1208, + 364, + 104, + 79 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 14685, + "bbox": [ + 1300, + 352, + 179, + 151 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 9132, + "bbox": [ + 1403, + 358, + 103, + 166 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 70129, + "bbox": [ + 1458, + 313, + 369, + 250 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 3054, + "bbox": [ + 626, + 418, + 58, + 111 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_031416_gtFine_panoptic.png", + "image_id": "frankfurt_000001_031416", + "segments_info": [ + { + "area": 799615, + "bbox": [ + 6, + 401, + 2037, + 578 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 14016, + "bbox": [ + 6, + 423, + 1692, + 180 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 549130, + "bbox": [ + 6, + 5, + 2037, + 531 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19170, + "bbox": [ + 133, + 5, + 1820, + 539 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1612, + "bbox": [ + 913, + 228, + 286, + 146 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2960, + "bbox": [ + 582, + 226, + 491, + 145 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 9306, + "bbox": [ + 721, + 296, + 441, + 100 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 36052, + "bbox": [ + 1079, + 11, + 225, + 229 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 169, + "bbox": [ + 967, + 376, + 18, + 16 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 457, + "bbox": [ + 1012, + 387, + 15, + 46 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 723, + "bbox": [ + 996, + 381, + 20, + 55 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 335, + "bbox": [ + 700, + 360, + 20, + 28 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 736, + "bbox": [ + 506, + 344, + 35, + 36 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 11894, + "bbox": [ + 441, + 341, + 89, + 225 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 8601, + "bbox": [ + 1675, + 305, + 96, + 260 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 248, + "bbox": [ + 1071, + 384, + 20, + 36 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 429, + "bbox": [ + 1246, + 363, + 26, + 53 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 69, + "bbox": [ + 1145, + 397, + 10, + 11 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2898, + "bbox": [ + 1150, + 326, + 96, + 60 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 560, + "bbox": [ + 1183, + 363, + 77, + 60 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 289, + "bbox": [ + 1060, + 391, + 18, + 28 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 7842, + "bbox": [ + 1144, + 367, + 115, + 88 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 67, + "bbox": [ + 1098, + 389, + 11, + 11 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1366, + "bbox": [ + 1098, + 384, + 49, + 36 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 829, + "bbox": [ + 1035, + 386, + 31, + 38 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1534, + "bbox": [ + 953, + 390, + 44, + 52 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 5222, + "bbox": [ + 712, + 378, + 99, + 107 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 21598, + "bbox": [ + 779, + 365, + 194, + 144 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 15582, + "bbox": [ + 569, + 379, + 179, + 127 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 79, + "bbox": [ + 1267, + 388, + 15, + 7 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 33994, + "bbox": [ + 277, + 377, + 336, + 172 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 222, + "bbox": [ + 1256, + 378, + 24, + 11 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 6747, + "bbox": [ + 1686, + 302, + 136, + 245 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 166984, + "bbox": [ + 1253, + 155, + 452, + 438 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 95073, + "bbox": [ + 1756, + 217, + 287, + 448 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 172, + "bbox": [ + 1073, + 397, + 18, + 23 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 3311, + "bbox": [ + 162, + 397, + 82, + 110 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 6972, + "bbox": [ + 131, + 400, + 98, + 148 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_032018_gtFine_panoptic.png", + "image_id": "frankfurt_000001_032018", + "segments_info": [ + { + "area": 592584, + "bbox": [ + 6, + 449, + 2037, + 530 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 28799, + "bbox": [ + 84, + 445, + 1959, + 279 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 607610, + "bbox": [ + 6, + 5, + 2037, + 534 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 22365, + "bbox": [ + 286, + 5, + 1417, + 518 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 10850, + "bbox": [ + 499, + 174, + 1292, + 201 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 10364, + "bbox": [ + 299, + 85, + 1406, + 293 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 29043, + "bbox": [ + 1533, + 332, + 484, + 215 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 38931, + "bbox": [ + 970, + 10, + 242, + 236 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2711, + "bbox": [ + 749, + 388, + 1117, + 64 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 716, + "bbox": [ + 754, + 375, + 63, + 131 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 294, + "bbox": [ + 762, + 398, + 16, + 52 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3540, + "bbox": [ + 768, + 376, + 47, + 142 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 4509, + "bbox": [ + 801, + 373, + 80, + 145 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 510, + "bbox": [ + 677, + 403, + 19, + 79 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3195, + "bbox": [ + 683, + 389, + 56, + 129 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 501, + "bbox": [ + 627, + 404, + 15, + 105 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1787, + "bbox": [ + 627, + 384, + 61, + 134 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 855, + "bbox": [ + 548, + 420, + 16, + 95 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 688, + "bbox": [ + 597, + 392, + 17, + 123 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 2563, + "bbox": [ + 606, + 386, + 32, + 131 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 5819, + "bbox": [ + 555, + 381, + 59, + 148 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 5282, + "bbox": [ + 714, + 370, + 77, + 155 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 803, + "bbox": [ + 521, + 403, + 33, + 68 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 348, + "bbox": [ + 380, + 378, + 20, + 35 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 1919, + "bbox": [ + 487, + 410, + 39, + 105 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 453, + "bbox": [ + 470, + 397, + 16, + 64 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 1529, + "bbox": [ + 442, + 387, + 39, + 74 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 308, + "bbox": [ + 384, + 387, + 23, + 27 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 199, + "bbox": [ + 353, + 391, + 29, + 22 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 242, + "bbox": [ + 321, + 393, + 28, + 19 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 182, + "bbox": [ + 289, + 390, + 14, + 22 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 131, + "bbox": [ + 435, + 389, + 15, + 17 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 1627, + "bbox": [ + 400, + 367, + 50, + 60 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 999, + "bbox": [ + 186, + 411, + 31, + 50 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 2246, + "bbox": [ + 152, + 411, + 49, + 76 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 3537, + "bbox": [ + 1727, + 299, + 49, + 140 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 1191, + "bbox": [ + 1722, + 363, + 39, + 81 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 130, + "bbox": [ + 253, + 409, + 24, + 9 + ], + "category_id": 24, + "id": 24028, + "iscrowd": 0 + }, + { + "area": 240, + "bbox": [ + 232, + 413, + 24, + 18 + ], + "category_id": 24, + "id": 24029, + "iscrowd": 0 + }, + { + "area": 16, + "bbox": [ + 278, + 411, + 10, + 3 + ], + "category_id": 24, + "id": 24030, + "iscrowd": 0 + }, + { + "area": 3637, + "bbox": [ + 637, + 392, + 53, + 131 + ], + "category_id": 24, + "id": 24031, + "iscrowd": 0 + }, + { + "area": 3961, + "bbox": [ + 1828, + 337, + 73, + 104 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2695, + "bbox": [ + 813, + 395, + 79, + 66 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 16370, + "bbox": [ + 6, + 398, + 87, + 266 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 261019, + "bbox": [ + 885, + 258, + 630, + 532 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1831, + "bbox": [ + 1670, + 385, + 120, + 74 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 54647, + "bbox": [ + 115, + 411, + 384, + 193 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_032556_gtFine_panoptic.png", + "image_id": "frankfurt_000001_032556", + "segments_info": [ + { + "area": 896260, + "bbox": [ + 6, + 403, + 2037, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 56759, + "bbox": [ + 6, + 407, + 2037, + 119 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 711281, + "bbox": [ + 6, + 5, + 2037, + 483 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1305, + "bbox": [ + 1143, + 368, + 29, + 76 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 27155, + "bbox": [ + 133, + 5, + 1410, + 504 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 12571, + "bbox": [ + 92, + 5, + 1422, + 377 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 9771, + "bbox": [ + 120, + 130, + 1542, + 233 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 13189, + "bbox": [ + 736, + 330, + 539, + 116 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 34216, + "bbox": [ + 937, + 9, + 235, + 215 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 698, + "bbox": [ + 1068, + 382, + 30, + 53 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 214, + "bbox": [ + 1108, + 384, + 13, + 32 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 205, + "bbox": [ + 1120, + 392, + 11, + 35 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 3714, + "bbox": [ + 1410, + 351, + 45, + 142 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 4999, + "bbox": [ + 1435, + 343, + 62, + 150 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 182, + "bbox": [ + 992, + 389, + 16, + 31 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 440, + "bbox": [ + 978, + 389, + 23, + 33 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 220, + "bbox": [ + 940, + 395, + 12, + 27 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 157, + "bbox": [ + 923, + 390, + 9, + 22 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 143, + "bbox": [ + 905, + 389, + 13, + 22 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 58, + "bbox": [ + 812, + 384, + 11, + 9 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 79, + "bbox": [ + 800, + 381, + 13, + 10 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 151, + "bbox": [ + 760, + 379, + 17, + 14 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 67, + "bbox": [ + 736, + 382, + 11, + 8 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 4201, + "bbox": [ + 213, + 346, + 55, + 133 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 3122, + "bbox": [ + 154, + 349, + 32, + 128 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 99, + "bbox": [ + 1068, + 384, + 14, + 36 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 204, + "bbox": [ + 1094, + 390, + 27, + 23 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1478, + "bbox": [ + 1032, + 382, + 47, + 45 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 423, + "bbox": [ + 1128, + 390, + 16, + 40 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1551, + "bbox": [ + 1199, + 378, + 41, + 79 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 6499, + "bbox": [ + 1226, + 354, + 118, + 112 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 197, + "bbox": [ + 1010, + 403, + 20, + 11 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 316, + "bbox": [ + 966, + 390, + 19, + 24 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 417, + "bbox": [ + 941, + 393, + 27, + 24 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 193, + "bbox": [ + 932, + 395, + 13, + 24 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 567, + "bbox": [ + 850, + 389, + 49, + 42 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1009, + "bbox": [ + 849, + 392, + 37, + 43 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 10478, + "bbox": [ + 621, + 370, + 127, + 107 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 45, + "bbox": [ + 1013, + 400, + 17, + 4 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 117, + "bbox": [ + 997, + 403, + 14, + 11 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 698, + "bbox": [ + 1344, + 439, + 75, + 27 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 171, + "bbox": [ + 1073, + 407, + 11, + 24 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 1438, + "bbox": [ + 1280, + 387, + 69, + 84 + ], + "category_id": 32, + "id": 32002, + "iscrowd": 0 + }, + { + "area": 513, + "bbox": [ + 901, + 401, + 34, + 24 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_032711_gtFine_panoptic.png", + "image_id": "frankfurt_000001_032711", + "segments_info": [ + { + "area": 763425, + "bbox": [ + 6, + 438, + 2036, + 541 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 922, + "bbox": [ + 13, + 439, + 798, + 134 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 592735, + "bbox": [ + 6, + 5, + 2037, + 512 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19094, + "bbox": [ + 412, + 19, + 1541, + 423 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 364, + "bbox": [ + 762, + 352, + 20, + 23 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 7598, + "bbox": [ + 1169, + 25, + 823, + 331 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 58275, + "bbox": [ + 875, + 8, + 313, + 359 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 414, + "bbox": [ + 814, + 395, + 13, + 51 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 640, + "bbox": [ + 1686, + 322, + 33, + 46 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 320, + "bbox": [ + 1547, + 357, + 28, + 17 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1488, + "bbox": [ + 1598, + 332, + 53, + 45 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 579, + "bbox": [ + 1719, + 322, + 42, + 41 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 604, + "bbox": [ + 1707, + 337, + 29, + 28 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 386, + "bbox": [ + 1805, + 310, + 31, + 38 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 2142, + "bbox": [ + 1835, + 291, + 60, + 69 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 2135, + "bbox": [ + 1868, + 305, + 66, + 59 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 2978, + "bbox": [ + 1760, + 291, + 77, + 70 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1538, + "bbox": [ + 2010, + 322, + 33, + 79 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 2455, + "bbox": [ + 2010, + 367, + 33, + 108 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 521, + "bbox": [ + 826, + 395, + 46, + 20 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1472, + "bbox": [ + 784, + 400, + 64, + 39 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4414, + "bbox": [ + 825, + 397, + 123, + 52 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 384, + "bbox": [ + 1164, + 378, + 38, + 66 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 990, + "bbox": [ + 1176, + 379, + 43, + 82 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1408, + "bbox": [ + 1179, + 387, + 38, + 85 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 4067, + "bbox": [ + 1196, + 352, + 61, + 135 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 53874, + "bbox": [ + 1233, + 242, + 303, + 292 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 32662, + "bbox": [ + 1362, + 373, + 276, + 212 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 108208, + "bbox": [ + 1515, + 333, + 514, + 351 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 43993, + "bbox": [ + 1868, + 464, + 175, + 323 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 42426, + "bbox": [ + 931, + 343, + 250, + 210 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1566, + "bbox": [ + 668, + 400, + 55, + 69 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 3056, + "bbox": [ + 631, + 401, + 70, + 75 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 4438, + "bbox": [ + 587, + 400, + 73, + 88 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 11382, + "bbox": [ + 474, + 389, + 129, + 110 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 21108, + "bbox": [ + 294, + 375, + 197, + 148 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 38332, + "bbox": [ + 27, + 408, + 315, + 156 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 1413, + "bbox": [ + 6, + 511, + 28, + 87 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 739, + "bbox": [ + 1034, + 332, + 80, + 16 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 16315, + "bbox": [ + 520, + 329, + 298, + 118 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 171, + "bbox": [ + 760, + 409, + 20, + 29 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_032942_gtFine_panoptic.png", + "image_id": "frankfurt_000001_032942", + "segments_info": [ + { + "area": 807511, + "bbox": [ + 6, + 435, + 2036, + 544 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 10987, + "bbox": [ + 6, + 451, + 1629, + 136 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 531343, + "bbox": [ + 11, + 5, + 2032, + 451 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 22768, + "bbox": [ + 417, + 5, + 1347, + 491 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8664, + "bbox": [ + 396, + 128, + 1634, + 310 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 55823, + "bbox": [ + 910, + 8, + 332, + 332 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2295, + "bbox": [ + 387, + 422, + 96, + 71 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 178, + "bbox": [ + 823, + 387, + 16, + 16 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 126, + "bbox": [ + 809, + 387, + 11, + 14 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 901, + "bbox": [ + 850, + 395, + 26, + 59 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 246, + "bbox": [ + 686, + 381, + 21, + 18 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 233, + "bbox": [ + 662, + 384, + 25, + 15 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 932, + "bbox": [ + 555, + 386, + 23, + 71 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1006, + "bbox": [ + 533, + 384, + 20, + 79 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 456, + "bbox": [ + 493, + 389, + 12, + 72 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1605, + "bbox": [ + 1543, + 367, + 32, + 109 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 10, + "bbox": [ + 1775, + 351, + 3, + 9 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 765, + "bbox": [ + 1764, + 346, + 31, + 37 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 468, + "bbox": [ + 907, + 407, + 32, + 29 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 5853, + "bbox": [ + 1202, + 351, + 87, + 136 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1726, + "bbox": [ + 936, + 387, + 62, + 57 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1126, + "bbox": [ + 834, + 393, + 66, + 53 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 674, + "bbox": [ + 832, + 401, + 49, + 48 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 628, + "bbox": [ + 824, + 403, + 26, + 51 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2147, + "bbox": [ + 788, + 401, + 49, + 57 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 3645, + "bbox": [ + 712, + 392, + 84, + 74 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 3055, + "bbox": [ + 679, + 398, + 71, + 78 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 11091, + "bbox": [ + 566, + 395, + 143, + 95 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 10364, + "bbox": [ + 1553, + 371, + 161, + 105 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 70475, + "bbox": [ + 1267, + 234, + 278, + 319 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 54270, + "bbox": [ + 954, + 335, + 302, + 239 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 14686, + "bbox": [ + 1793, + 300, + 250, + 94 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 99294, + "bbox": [ + 1612, + 370, + 431, + 308 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 6636, + "bbox": [ + 2007, + 475, + 36, + 279 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 114913, + "bbox": [ + 6, + 205, + 569, + 316 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 132, + "bbox": [ + 897, + 424, + 10, + 16 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1521, + "bbox": [ + 493, + 414, + 50, + 74 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2775, + "bbox": [ + 403, + 420, + 81, + 77 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_033655_gtFine_panoptic.png", + "image_id": "frankfurt_000001_033655", + "segments_info": [ + { + "area": 802712, + "bbox": [ + 6, + 402, + 2036, + 577 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 412, + "bbox": [ + 1071, + 405, + 94, + 9 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 579587, + "bbox": [ + 9, + 5, + 2034, + 424 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 18298, + "bbox": [ + 811, + 16, + 568, + 406 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 858, + "bbox": [ + 804, + 288, + 365, + 93 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1003, + "bbox": [ + 1056, + 335, + 174, + 74 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 10776, + "bbox": [ + 766, + 296, + 355, + 123 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 82841, + "bbox": [ + 769, + 6, + 470, + 293 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 80, + "bbox": [ + 1132, + 394, + 6, + 16 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 98, + "bbox": [ + 943, + 390, + 9, + 15 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 44, + "bbox": [ + 981, + 395, + 5, + 11 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 74, + "bbox": [ + 1122, + 394, + 5, + 17 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 98, + "bbox": [ + 986, + 392, + 7, + 16 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 246, + "bbox": [ + 1141, + 384, + 9, + 32 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 60, + "bbox": [ + 1166, + 384, + 10, + 14 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 117, + "bbox": [ + 1176, + 381, + 13, + 12 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 243, + "bbox": [ + 1301, + 370, + 21, + 18 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 200, + "bbox": [ + 1322, + 370, + 23, + 16 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 64, + "bbox": [ + 1359, + 363, + 10, + 8 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 763, + "bbox": [ + 1395, + 349, + 41, + 37 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1158, + "bbox": [ + 1558, + 346, + 47, + 64 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 867, + "bbox": [ + 1442, + 357, + 42, + 38 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 3190, + "bbox": [ + 1761, + 273, + 59, + 91 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 1294, + "bbox": [ + 1894, + 356, + 39, + 68 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 6767, + "bbox": [ + 1803, + 265, + 107, + 134 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 504, + "bbox": [ + 1979, + 359, + 34, + 31 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 329, + "bbox": [ + 2029, + 352, + 14, + 28 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 2938, + "bbox": [ + 1928, + 349, + 73, + 88 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 60, + "bbox": [ + 1022, + 393, + 6, + 15 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 622, + "bbox": [ + 767, + 384, + 73, + 16 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 135, + "bbox": [ + 1158, + 393, + 15, + 45 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 365, + "bbox": [ + 1155, + 393, + 26, + 51 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 535, + "bbox": [ + 1163, + 389, + 31, + 61 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 731, + "bbox": [ + 1173, + 400, + 20, + 54 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3732, + "bbox": [ + 1188, + 367, + 98, + 94 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1375, + "bbox": [ + 1206, + 387, + 62, + 87 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 4886, + "bbox": [ + 1228, + 387, + 89, + 108 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 9693, + "bbox": [ + 1269, + 376, + 168, + 141 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 22362, + "bbox": [ + 1335, + 393, + 212, + 149 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 82921, + "bbox": [ + 1503, + 360, + 422, + 286 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 62104, + "bbox": [ + 1806, + 379, + 237, + 362 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 567, + "bbox": [ + 832, + 393, + 40, + 42 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 827, + "bbox": [ + 825, + 395, + 32, + 43 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 433, + "bbox": [ + 817, + 397, + 20, + 42 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 370, + "bbox": [ + 769, + 392, + 58, + 50 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 2218, + "bbox": [ + 770, + 395, + 54, + 52 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 1733, + "bbox": [ + 738, + 390, + 37, + 65 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 545, + "bbox": [ + 723, + 407, + 27, + 54 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 15969, + "bbox": [ + 506, + 344, + 233, + 127 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 6736, + "bbox": [ + 541, + 392, + 117, + 95 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 9365, + "bbox": [ + 471, + 406, + 118, + 100 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 25865, + "bbox": [ + 216, + 398, + 234, + 150 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 70033, + "bbox": [ + 6, + 239, + 240, + 365 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 217, + "bbox": [ + 1146, + 406, + 12, + 25 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_034047_gtFine_panoptic.png", + "image_id": "frankfurt_000001_034047", + "segments_info": [ + { + "area": 822188, + "bbox": [ + 6, + 433, + 2037, + 546 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 135198, + "bbox": [ + 6, + 397, + 2037, + 447 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 430264, + "bbox": [ + 17, + 5, + 2026, + 446 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5902, + "bbox": [ + 6, + 450, + 233, + 53 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 57057, + "bbox": [ + 37, + 5, + 1984, + 524 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2167, + "bbox": [ + 426, + 226, + 1023, + 121 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 8557, + "bbox": [ + 297, + 210, + 1632, + 266 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 204867, + "bbox": [ + 6, + 27, + 1256, + 474 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 93066, + "bbox": [ + 594, + 5, + 560, + 208 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 446, + "bbox": [ + 763, + 411, + 25, + 28 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 5, + "bbox": [ + 918, + 408, + 1, + 5 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 133, + "bbox": [ + 910, + 409, + 9, + 19 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 171, + "bbox": [ + 919, + 397, + 11, + 24 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 205, + "bbox": [ + 932, + 398, + 9, + 29 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 156, + "bbox": [ + 981, + 405, + 11, + 25 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 4389, + "bbox": [ + 1354, + 330, + 53, + 133 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 5217, + "bbox": [ + 1403, + 324, + 64, + 136 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 4032, + "bbox": [ + 1485, + 318, + 47, + 137 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 3494, + "bbox": [ + 1534, + 321, + 52, + 129 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 4338, + "bbox": [ + 1901, + 310, + 78, + 126 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 146, + "bbox": [ + 785, + 412, + 11, + 19 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 397, + "bbox": [ + 751, + 403, + 16, + 35 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 339, + "bbox": [ + 740, + 405, + 13, + 33 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 429, + "bbox": [ + 436, + 417, + 10, + 62 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 537, + "bbox": [ + 344, + 411, + 21, + 60 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 1004, + "bbox": [ + 393, + 416, + 25, + 63 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 1308, + "bbox": [ + 281, + 416, + 41, + 96 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 1420, + "bbox": [ + 215, + 414, + 24, + 85 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 4467, + "bbox": [ + 119, + 403, + 57, + 123 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 34176, + "bbox": [ + 781, + 284, + 217, + 411 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 1301, + "bbox": [ + 6, + 424, + 34, + 63 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 3911, + "bbox": [ + 469, + 392, + 170, + 68 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 4042, + "bbox": [ + 460, + 412, + 121, + 49 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 193, + "bbox": [ + 1103, + 415, + 11, + 25 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3095, + "bbox": [ + 1111, + 398, + 100, + 65 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_034816_gtFine_panoptic.png", + "image_id": "frankfurt_000001_034816", + "segments_info": [ + { + "area": 493159, + "bbox": [ + 6, + 428, + 2037, + 551 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 337226, + "bbox": [ + 6, + 450, + 2037, + 451 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 5076, + "bbox": [ + 17, + 5, + 330, + 436 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 10894, + "bbox": [ + 18, + 357, + 2025, + 151 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 125398, + "bbox": [ + 6, + 5, + 2037, + 754 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 493, + "bbox": [ + 1836, + 308, + 125, + 78 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 38790, + "bbox": [ + 190, + 5, + 1766, + 592 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 659058, + "bbox": [ + 6, + 5, + 2037, + 513 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2102, + "bbox": [ + 504, + 450, + 156, + 34 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 202, + "bbox": [ + 1862, + 25, + 37, + 10 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 5994, + "bbox": [ + 1866, + 397, + 112, + 72 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 437, + "bbox": [ + 1940, + 384, + 28, + 28 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 160, + "bbox": [ + 1923, + 386, + 17, + 23 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 921, + "bbox": [ + 1856, + 386, + 27, + 80 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1821, + "bbox": [ + 1782, + 373, + 47, + 82 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 360, + "bbox": [ + 1878, + 401, + 38, + 15 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 8866, + "bbox": [ + 6, + 366, + 185, + 125 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 20826, + "bbox": [ + 1521, + 284, + 324, + 196 + ], + "category_id": 28, + "id": 28001, + "iscrowd": 0 + }, + { + "area": 116464, + "bbox": [ + 1143, + 172, + 408, + 368 + ], + "category_id": 28, + "id": 28002, + "iscrowd": 0 + }, + { + "area": 1616, + "bbox": [ + 1626, + 431, + 44, + 78 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3005, + "bbox": [ + 1737, + 416, + 77, + 91 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_035144_gtFine_panoptic.png", + "image_id": "frankfurt_000001_035144", + "segments_info": [ + { + "area": 508201, + "bbox": [ + 6, + 397, + 2036, + 568 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 34432, + "bbox": [ + 700, + 416, + 686, + 214 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 493574, + "bbox": [ + 6, + 5, + 2037, + 431 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 189292, + "bbox": [ + 6, + 452, + 700, + 494 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 29272, + "bbox": [ + 6, + 412, + 663, + 91 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 44860, + "bbox": [ + 57, + 13, + 1184, + 678 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3500, + "bbox": [ + 373, + 286, + 804, + 81 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 28280, + "bbox": [ + 389, + 5, + 1259, + 384 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 116757, + "bbox": [ + 420, + 21, + 1256, + 377 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 45472, + "bbox": [ + 614, + 5, + 444, + 260 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1210, + "bbox": [ + 324, + 393, + 47, + 100 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1572, + "bbox": [ + 975, + 381, + 45, + 95 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1948, + "bbox": [ + 991, + 375, + 55, + 104 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2394, + "bbox": [ + 1018, + 375, + 62, + 105 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1711, + "bbox": [ + 901, + 386, + 34, + 90 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1833, + "bbox": [ + 859, + 379, + 41, + 97 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 240, + "bbox": [ + 959, + 379, + 14, + 24 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 344, + "bbox": [ + 929, + 392, + 41, + 21 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 132, + "bbox": [ + 977, + 387, + 28, + 14 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 250, + "bbox": [ + 931, + 401, + 39, + 38 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 720, + "bbox": [ + 936, + 403, + 34, + 39 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1027, + "bbox": [ + 956, + 400, + 53, + 47 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 560, + "bbox": [ + 1003, + 397, + 36, + 53 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 493, + "bbox": [ + 1146, + 383, + 28, + 34 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 121, + "bbox": [ + 1043, + 398, + 24, + 57 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 3942, + "bbox": [ + 1053, + 393, + 81, + 64 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 70737, + "bbox": [ + 1364, + 265, + 402, + 324 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 140075, + "bbox": [ + 1577, + 265, + 466, + 419 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 5323, + "bbox": [ + 2005, + 533, + 38, + 223 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 81, + "bbox": [ + 893, + 397, + 16, + 14 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 76, + "bbox": [ + 895, + 399, + 11, + 15 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 364, + "bbox": [ + 881, + 397, + 19, + 25 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 221, + "bbox": [ + 831, + 400, + 14, + 19 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 161, + "bbox": [ + 818, + 401, + 16, + 19 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 163, + "bbox": [ + 809, + 401, + 15, + 21 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 117, + "bbox": [ + 801, + 401, + 15, + 21 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 243, + "bbox": [ + 790, + 403, + 20, + 21 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 345, + "bbox": [ + 775, + 405, + 24, + 20 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 467, + "bbox": [ + 755, + 401, + 27, + 27 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 294, + "bbox": [ + 731, + 401, + 30, + 29 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 178, + "bbox": [ + 730, + 403, + 23, + 27 + ], + "category_id": 26, + "id": 26025, + "iscrowd": 0 + }, + { + "area": 244, + "bbox": [ + 731, + 405, + 16, + 28 + ], + "category_id": 26, + "id": 26026, + "iscrowd": 0 + }, + { + "area": 403, + "bbox": [ + 697, + 398, + 42, + 37 + ], + "category_id": 26, + "id": 26027, + "iscrowd": 0 + }, + { + "area": 1316, + "bbox": [ + 686, + 405, + 45, + 36 + ], + "category_id": 26, + "id": 26028, + "iscrowd": 0 + }, + { + "area": 1498, + "bbox": [ + 1234, + 380, + 63, + 64 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 9518, + "bbox": [ + 1225, + 405, + 161, + 94 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_035864_gtFine_panoptic.png", + "image_id": "frankfurt_000001_035864", + "segments_info": [ + { + "area": 698461, + "bbox": [ + 6, + 411, + 2037, + 568 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 38022, + "bbox": [ + 520, + 420, + 1523, + 197 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 318010, + "bbox": [ + 6, + 5, + 2037, + 470 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 24789, + "bbox": [ + 1676, + 344, + 367, + 167 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 35611, + "bbox": [ + 544, + 5, + 1372, + 548 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 276, + "bbox": [ + 864, + 343, + 167, + 52 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 3641, + "bbox": [ + 637, + 264, + 486, + 134 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 272101, + "bbox": [ + 540, + 5, + 1503, + 447 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 41817, + "bbox": [ + 838, + 8, + 436, + 205 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 127, + "bbox": [ + 847, + 397, + 10, + 17 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 39, + "bbox": [ + 831, + 399, + 12, + 12 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 98, + "bbox": [ + 1102, + 397, + 12, + 31 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 552, + "bbox": [ + 1106, + 397, + 19, + 34 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 104, + "bbox": [ + 950, + 395, + 22, + 25 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 171, + "bbox": [ + 929, + 401, + 15, + 18 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 465, + "bbox": [ + 905, + 401, + 30, + 19 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 406, + "bbox": [ + 558, + 384, + 48, + 19 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2820, + "bbox": [ + 558, + 390, + 100, + 55 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 249389, + "bbox": [ + 6, + 321, + 575, + 567 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 15710, + "bbox": [ + 950, + 370, + 157, + 126 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 16654, + "bbox": [ + 1119, + 297, + 126, + 155 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 146993, + "bbox": [ + 1226, + 152, + 453, + 385 + ], + "category_id": 28, + "id": 28001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_037705_gtFine_panoptic.png", + "image_id": "frankfurt_000001_037705", + "segments_info": [ + { + "area": 458330, + "bbox": [ + 6, + 433, + 2034, + 529 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 160088, + "bbox": [ + 6, + 427, + 1703, + 552 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 454787, + "bbox": [ + 60, + 5, + 1983, + 434 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1153, + "bbox": [ + 205, + 402, + 67, + 25 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 3803, + "bbox": [ + 1111, + 416, + 122, + 37 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 82613, + "bbox": [ + 75, + 5, + 1968, + 897 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 14497, + "bbox": [ + 288, + 45, + 1749, + 345 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 49331, + "bbox": [ + 12, + 5, + 2031, + 439 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 111254, + "bbox": [ + 6, + 14, + 1524, + 427 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 39768, + "bbox": [ + 407, + 5, + 333, + 168 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 166, + "bbox": [ + 1125, + 407, + 31, + 9 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 234, + "bbox": [ + 866, + 405, + 9, + 31 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 732, + "bbox": [ + 465, + 403, + 25, + 57 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 846, + "bbox": [ + 448, + 406, + 26, + 59 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 28536, + "bbox": [ + 86, + 278, + 186, + 474 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 11508, + "bbox": [ + 658, + 321, + 82, + 359 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 18957, + "bbox": [ + 694, + 318, + 204, + 234 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 112, + "bbox": [ + 892, + 405, + 14, + 11 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 308, + "bbox": [ + 881, + 401, + 13, + 34 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 302, + "bbox": [ + 982, + 403, + 11, + 35 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 286, + "bbox": [ + 997, + 405, + 14, + 33 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 125, + "bbox": [ + 1015, + 400, + 10, + 38 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 622, + "bbox": [ + 1039, + 399, + 19, + 45 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 321, + "bbox": [ + 1229, + 384, + 23, + 39 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 460, + "bbox": [ + 1314, + 365, + 17, + 83 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1244, + "bbox": [ + 1322, + 374, + 26, + 81 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 90, + "bbox": [ + 1493, + 361, + 12, + 12 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 125, + "bbox": [ + 1520, + 366, + 13, + 11 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 14122, + "bbox": [ + 1430, + 337, + 97, + 243 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 16971, + "bbox": [ + 1232, + 313, + 132, + 311 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 146, + "bbox": [ + 1693, + 451, + 10, + 20 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 14273, + "bbox": [ + 1601, + 313, + 118, + 238 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 6093, + "bbox": [ + 1714, + 332, + 90, + 120 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 480, + "bbox": [ + 399, + 425, + 21, + 43 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2344, + "bbox": [ + 326, + 411, + 81, + 62 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3444, + "bbox": [ + 298, + 422, + 69, + 59 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3461, + "bbox": [ + 206, + 423, + 58, + 70 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 5231, + "bbox": [ + 11, + 428, + 93, + 72 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 151814, + "bbox": [ + 1643, + 313, + 400, + 576 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 15878, + "bbox": [ + 489, + 296, + 153, + 175 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + }, + { + "area": 311, + "bbox": [ + 964, + 417, + 24, + 20 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 171, + "bbox": [ + 1170, + 403, + 25, + 14 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_038245_gtFine_panoptic.png", + "image_id": "frankfurt_000001_038245", + "segments_info": [ + { + "area": 827532, + "bbox": [ + 6, + 417, + 2037, + 562 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 86718, + "bbox": [ + 6, + 407, + 2037, + 252 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 494522, + "bbox": [ + 22, + 5, + 2021, + 444 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 26018, + "bbox": [ + 102, + 369, + 1829, + 146 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 62610, + "bbox": [ + 6, + 5, + 2031, + 584 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 13471, + "bbox": [ + 209, + 81, + 1507, + 229 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4386, + "bbox": [ + 325, + 36, + 1422, + 239 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 150611, + "bbox": [ + 491, + 23, + 1552, + 369 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1238, + "bbox": [ + 23, + 5, + 88, + 21 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2089, + "bbox": [ + 790, + 385, + 723, + 70 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 212, + "bbox": [ + 270, + 337, + 15, + 47 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 991, + "bbox": [ + 276, + 338, + 27, + 48 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1531, + "bbox": [ + 240, + 331, + 37, + 52 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 659, + "bbox": [ + 179, + 334, + 23, + 44 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1087, + "bbox": [ + 135, + 317, + 30, + 57 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 102, + "bbox": [ + 516, + 388, + 8, + 23 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 768, + "bbox": [ + 423, + 340, + 16, + 96 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 232, + "bbox": [ + 479, + 342, + 13, + 70 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 167, + "bbox": [ + 523, + 382, + 9, + 28 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 206, + "bbox": [ + 471, + 338, + 13, + 31 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 3018, + "bbox": [ + 478, + 330, + 47, + 126 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 2568, + "bbox": [ + 436, + 320, + 61, + 92 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 188, + "bbox": [ + 531, + 382, + 10, + 30 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 172, + "bbox": [ + 782, + 380, + 16, + 25 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 289, + "bbox": [ + 674, + 380, + 18, + 30 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 155, + "bbox": [ + 688, + 380, + 14, + 23 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 39, + "bbox": [ + 722, + 376, + 6, + 10 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 119, + "bbox": [ + 717, + 380, + 9, + 29 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 356, + "bbox": [ + 722, + 380, + 13, + 37 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 99, + "bbox": [ + 708, + 374, + 12, + 29 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 302, + "bbox": [ + 749, + 382, + 15, + 40 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 533, + "bbox": [ + 812, + 376, + 20, + 48 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 7, + "bbox": [ + 1140, + 378, + 3, + 4 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 185, + "bbox": [ + 1155, + 368, + 10, + 73 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 322, + "bbox": [ + 1141, + 373, + 18, + 30 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 737, + "bbox": [ + 1122, + 365, + 24, + 83 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 865, + "bbox": [ + 1188, + 366, + 25, + 75 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 1532, + "bbox": [ + 1159, + 359, + 38, + 94 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 747, + "bbox": [ + 1235, + 369, + 22, + 78 + ], + "category_id": 24, + "id": 24028, + "iscrowd": 0 + }, + { + "area": 2087, + "bbox": [ + 1210, + 356, + 38, + 103 + ], + "category_id": 24, + "id": 24029, + "iscrowd": 0 + }, + { + "area": 1008, + "bbox": [ + 1269, + 367, + 23, + 80 + ], + "category_id": 24, + "id": 24030, + "iscrowd": 0 + }, + { + "area": 2816, + "bbox": [ + 1279, + 341, + 53, + 129 + ], + "category_id": 24, + "id": 24031, + "iscrowd": 0 + }, + { + "area": 370, + "bbox": [ + 1354, + 358, + 29, + 49 + ], + "category_id": 24, + "id": 24032, + "iscrowd": 0 + }, + { + "area": 2321, + "bbox": [ + 1329, + 343, + 32, + 123 + ], + "category_id": 24, + "id": 24033, + "iscrowd": 0 + }, + { + "area": 2126, + "bbox": [ + 1390, + 357, + 40, + 101 + ], + "category_id": 24, + "id": 24034, + "iscrowd": 0 + }, + { + "area": 580, + "bbox": [ + 1513, + 355, + 25, + 60 + ], + "category_id": 24, + "id": 24035, + "iscrowd": 0 + }, + { + "area": 211, + "bbox": [ + 1906, + 367, + 18, + 19 + ], + "category_id": 24, + "id": 24036, + "iscrowd": 0 + }, + { + "area": 972, + "bbox": [ + 1930, + 347, + 16, + 83 + ], + "category_id": 24, + "id": 24037, + "iscrowd": 0 + }, + { + "area": 1444, + "bbox": [ + 1689, + 354, + 18, + 117 + ], + "category_id": 24, + "id": 24038, + "iscrowd": 0 + }, + { + "area": 3692, + "bbox": [ + 1832, + 353, + 64, + 127 + ], + "category_id": 24, + "id": 24039, + "iscrowd": 0 + }, + { + "area": 7652, + "bbox": [ + 1505, + 340, + 83, + 164 + ], + "category_id": 24, + "id": 24040, + "iscrowd": 0 + }, + { + "area": 1449, + "bbox": [ + 963, + 351, + 82, + 42 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 39374, + "bbox": [ + 826, + 351, + 274, + 193 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2580, + "bbox": [ + 97, + 277, + 72, + 98 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + }, + { + "area": 379, + "bbox": [ + 596, + 393, + 23, + 25 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 857, + "bbox": [ + 683, + 400, + 44, + 26 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 270, + "bbox": [ + 829, + 411, + 20, + 21 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 96, + "bbox": [ + 1544, + 437, + 6, + 23 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1175, + "bbox": [ + 1661, + 404, + 52, + 66 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 4526, + "bbox": [ + 1726, + 397, + 117, + 73 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 10976, + "bbox": [ + 1804, + 415, + 141, + 150 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_038418_gtFine_panoptic.png", + "image_id": "frankfurt_000001_038418", + "segments_info": [ + { + "area": 783855, + "bbox": [ + 6, + 424, + 2037, + 555 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 41024, + "bbox": [ + 679, + 425, + 1364, + 230 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 556087, + "bbox": [ + 6, + 5, + 2002, + 522 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 45595, + "bbox": [ + 6, + 365, + 1371, + 264 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 12423, + "bbox": [ + 733, + 390, + 621, + 52 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 29987, + "bbox": [ + 197, + 5, + 1683, + 571 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2165, + "bbox": [ + 646, + 185, + 736, + 197 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 6365, + "bbox": [ + 440, + 253, + 760, + 129 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 228903, + "bbox": [ + 320, + 13, + 1723, + 378 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 124, + "bbox": [ + 765, + 388, + 18, + 10 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 994, + "bbox": [ + 794, + 385, + 25, + 63 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 964, + "bbox": [ + 820, + 378, + 29, + 66 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 175, + "bbox": [ + 1288, + 381, + 17, + 15 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 170, + "bbox": [ + 1326, + 383, + 18, + 14 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 832, + "bbox": [ + 1394, + 390, + 28, + 68 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1756, + "bbox": [ + 1377, + 370, + 38, + 91 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1275, + "bbox": [ + 1348, + 380, + 26, + 82 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 372, + "bbox": [ + 1541, + 424, + 34, + 46 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 2225, + "bbox": [ + 1511, + 368, + 34, + 108 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 2886, + "bbox": [ + 1543, + 356, + 39, + 119 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 3369, + "bbox": [ + 978, + 352, + 83, + 67 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1663, + "bbox": [ + 655, + 380, + 52, + 48 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 11964, + "bbox": [ + 535, + 373, + 147, + 107 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 36035, + "bbox": [ + 867, + 386, + 272, + 177 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 309, + "bbox": [ + 461, + 402, + 17, + 22 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 4985, + "bbox": [ + 1612, + 394, + 150, + 138 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 18719, + "bbox": [ + 1750, + 409, + 258, + 159 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_038645_gtFine_panoptic.png", + "image_id": "frankfurt_000001_038645", + "segments_info": [ + { + "area": 726581, + "bbox": [ + 6, + 411, + 2033, + 568 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 88380, + "bbox": [ + 64, + 400, + 1979, + 502 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 538432, + "bbox": [ + 63, + 5, + 1980, + 521 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 577, + "bbox": [ + 1454, + 392, + 40, + 20 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 50971, + "bbox": [ + 6, + 5, + 1770, + 612 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3875, + "bbox": [ + 220, + 210, + 1367, + 168 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 34348, + "bbox": [ + 6, + 5, + 1802, + 539 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 112364, + "bbox": [ + 61, + 5, + 1526, + 393 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 30947, + "bbox": [ + 1314, + 15, + 274, + 310 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 10121, + "bbox": [ + 1920, + 394, + 123, + 252 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1912, + "bbox": [ + 1515, + 364, + 37, + 95 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 954, + "bbox": [ + 1819, + 348, + 14, + 96 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2618, + "bbox": [ + 1929, + 330, + 48, + 114 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2696, + "bbox": [ + 2002, + 307, + 41, + 121 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 603, + "bbox": [ + 1090, + 373, + 19, + 50 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 290, + "bbox": [ + 1051, + 387, + 12, + 31 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 153, + "bbox": [ + 1026, + 392, + 14, + 19 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 433, + "bbox": [ + 979, + 379, + 16, + 43 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 165, + "bbox": [ + 957, + 381, + 10, + 25 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 296, + "bbox": [ + 964, + 382, + 17, + 24 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 316, + "bbox": [ + 943, + 377, + 18, + 48 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 386, + "bbox": [ + 932, + 381, + 15, + 43 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 399, + "bbox": [ + 913, + 380, + 19, + 44 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 117, + "bbox": [ + 906, + 394, + 9, + 30 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 267, + "bbox": [ + 886, + 380, + 9, + 45 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 297, + "bbox": [ + 893, + 379, + 19, + 46 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 96, + "bbox": [ + 868, + 383, + 8, + 21 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 414, + "bbox": [ + 873, + 376, + 16, + 49 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 412, + "bbox": [ + 855, + 382, + 17, + 43 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 234, + "bbox": [ + 839, + 381, + 15, + 27 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 299, + "bbox": [ + 828, + 378, + 15, + 27 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 279, + "bbox": [ + 738, + 378, + 9, + 49 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 471, + "bbox": [ + 746, + 382, + 17, + 49 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 179, + "bbox": [ + 712, + 385, + 10, + 23 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 356, + "bbox": [ + 693, + 373, + 16, + 32 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 420, + "bbox": [ + 668, + 377, + 27, + 58 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 70, + "bbox": [ + 639, + 370, + 11, + 11 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 646, + "bbox": [ + 615, + 373, + 19, + 56 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 378, + "bbox": [ + 631, + 374, + 16, + 33 + ], + "category_id": 24, + "id": 24028, + "iscrowd": 0 + }, + { + "area": 724, + "bbox": [ + 643, + 373, + 26, + 58 + ], + "category_id": 24, + "id": 24029, + "iscrowd": 0 + }, + { + "area": 190, + "bbox": [ + 572, + 371, + 10, + 38 + ], + "category_id": 24, + "id": 24030, + "iscrowd": 0 + }, + { + "area": 536, + "bbox": [ + 578, + 368, + 33, + 41 + ], + "category_id": 24, + "id": 24031, + "iscrowd": 0 + }, + { + "area": 860, + "bbox": [ + 553, + 367, + 29, + 55 + ], + "category_id": 24, + "id": 24032, + "iscrowd": 0 + }, + { + "area": 201, + "bbox": [ + 464, + 370, + 16, + 19 + ], + "category_id": 24, + "id": 24033, + "iscrowd": 0 + }, + { + "area": 192, + "bbox": [ + 485, + 373, + 20, + 14 + ], + "category_id": 24, + "id": 24034, + "iscrowd": 0 + }, + { + "area": 299, + "bbox": [ + 192, + 370, + 26, + 18 + ], + "category_id": 24, + "id": 24035, + "iscrowd": 0 + }, + { + "area": 281, + "bbox": [ + 1012, + 386, + 13, + 34 + ], + "category_id": 24, + "id": 24036, + "iscrowd": 0 + }, + { + "area": 2420, + "bbox": [ + 1226, + 324, + 45, + 79 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 48, + "bbox": [ + 1570, + 383, + 6, + 13 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 5037, + "bbox": [ + 1479, + 379, + 110, + 74 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1009, + "bbox": [ + 1060, + 381, + 34, + 37 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 8334, + "bbox": [ + 413, + 386, + 151, + 70 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 13437, + "bbox": [ + 64, + 386, + 198, + 87 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 21328, + "bbox": [ + 1117, + 367, + 201, + 146 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 6912, + "bbox": [ + 1288, + 287, + 118, + 130 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + }, + { + "area": 130, + "bbox": [ + 581, + 397, + 18, + 12 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 539, + "bbox": [ + 325, + 420, + 20, + 35 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1204, + "bbox": [ + 379, + 407, + 39, + 51 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 748, + "bbox": [ + 253, + 401, + 25, + 57 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 31729, + "bbox": [ + 1803, + 374, + 240, + 285 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_038844_gtFine_panoptic.png", + "image_id": "frankfurt_000001_038844", + "segments_info": [ + { + "area": 585829, + "bbox": [ + 177, + 403, + 1866, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 202190, + "bbox": [ + 6, + 428, + 2037, + 550 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 526034, + "bbox": [ + 6, + 5, + 2037, + 553 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 31901, + "bbox": [ + 6, + 377, + 987, + 156 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 119002, + "bbox": [ + 190, + 5, + 1502, + 700 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 12450, + "bbox": [ + 695, + 133, + 1009, + 237 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2844, + "bbox": [ + 711, + 157, + 514, + 221 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 78552, + "bbox": [ + 332, + 5, + 895, + 375 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 51304, + "bbox": [ + 771, + 6, + 460, + 316 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 196, + "bbox": [ + 949, + 368, + 16, + 20 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 119, + "bbox": [ + 935, + 376, + 17, + 11 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3186, + "bbox": [ + 1614, + 325, + 41, + 164 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 10875, + "bbox": [ + 1710, + 305, + 105, + 216 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 8820, + "bbox": [ + 2000, + 279, + 43, + 262 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1935, + "bbox": [ + 557, + 279, + 63, + 76 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2849, + "bbox": [ + 522, + 285, + 42, + 161 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1041, + "bbox": [ + 488, + 290, + 58, + 102 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 5212, + "bbox": [ + 545, + 309, + 75, + 246 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 7751, + "bbox": [ + 753, + 328, + 67, + 210 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 6274, + "bbox": [ + 673, + 322, + 91, + 147 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 1410, + "bbox": [ + 671, + 332, + 41, + 149 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 12602, + "bbox": [ + 598, + 272, + 95, + 300 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 147, + "bbox": [ + 1041, + 383, + 21, + 15 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 543, + "bbox": [ + 1199, + 374, + 26, + 30 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 5767, + "bbox": [ + 1128, + 378, + 116, + 87 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 23012, + "bbox": [ + 971, + 376, + 202, + 146 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 9835, + "bbox": [ + 779, + 254, + 162, + 133 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + }, + { + "area": 3639, + "bbox": [ + 1589, + 382, + 47, + 104 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 24089, + "bbox": [ + 543, + 398, + 234, + 173 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_039895_gtFine_panoptic.png", + "image_id": "frankfurt_000001_039895", + "segments_info": [ + { + "area": 884792, + "bbox": [ + 6, + 406, + 2037, + 573 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 23348, + "bbox": [ + 6, + 385, + 2037, + 335 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 283520, + "bbox": [ + 11, + 5, + 2032, + 382 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3549, + "bbox": [ + 1091, + 379, + 632, + 24 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 55271, + "bbox": [ + 17, + 5, + 2024, + 558 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7179, + "bbox": [ + 787, + 131, + 1096, + 191 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 5067, + "bbox": [ + 1061, + 144, + 800, + 192 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 170900, + "bbox": [ + 691, + 101, + 1245, + 294 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 59541, + "bbox": [ + 671, + 5, + 388, + 341 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 372, + "bbox": [ + 1402, + 340, + 27, + 65 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 9139, + "bbox": [ + 1455, + 342, + 218, + 69 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 65878, + "bbox": [ + 1699, + 314, + 344, + 238 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 51405, + "bbox": [ + 742, + 342, + 455, + 154 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 201919, + "bbox": [ + 6, + 162, + 692, + 350 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 252, + "bbox": [ + 768, + 359, + 18, + 18 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + }, + { + "area": 3230, + "bbox": [ + 1349, + 352, + 92, + 55 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_040575_gtFine_panoptic.png", + "image_id": "frankfurt_000001_040575", + "segments_info": [ + { + "area": 947241, + "bbox": [ + 6, + 373, + 2037, + 606 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 38939, + "bbox": [ + 6, + 362, + 2037, + 354 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 393218, + "bbox": [ + 6, + 5, + 2037, + 414 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 9829, + "bbox": [ + 1064, + 355, + 819, + 47 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 3546, + "bbox": [ + 1850, + 332, + 186, + 33 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 77155, + "bbox": [ + 17, + 5, + 2026, + 559 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7247, + "bbox": [ + 412, + 130, + 1471, + 183 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 7904, + "bbox": [ + 266, + 143, + 1595, + 201 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 178652, + "bbox": [ + 621, + 100, + 1315, + 326 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1408, + "bbox": [ + 1491, + 364, + 324, + 19 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 59942, + "bbox": [ + 670, + 5, + 390, + 339 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 243, + "bbox": [ + 1045, + 362, + 11, + 37 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 326, + "bbox": [ + 1053, + 365, + 16, + 32 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1491, + "bbox": [ + 1814, + 328, + 23, + 83 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1446, + "bbox": [ + 1948, + 334, + 32, + 71 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1581, + "bbox": [ + 2006, + 324, + 31, + 80 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 46651, + "bbox": [ + 809, + 214, + 229, + 520 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 409, + "bbox": [ + 627, + 368, + 18, + 37 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 107, + "bbox": [ + 671, + 379, + 12, + 11 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 199, + "bbox": [ + 653, + 377, + 20, + 15 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 107, + "bbox": [ + 616, + 380, + 13, + 12 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 467, + "bbox": [ + 597, + 375, + 21, + 34 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1064, + "bbox": [ + 567, + 367, + 36, + 45 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 971, + "bbox": [ + 540, + 376, + 42, + 38 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 110, + "bbox": [ + 480, + 376, + 18, + 36 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 123, + "bbox": [ + 425, + 371, + 26, + 10 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1094, + "bbox": [ + 332, + 379, + 43, + 36 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 478, + "bbox": [ + 252, + 367, + 80, + 30 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2718, + "bbox": [ + 177, + 381, + 76, + 44 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 3865, + "bbox": [ + 84, + 381, + 98, + 50 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 3155, + "bbox": [ + 247, + 374, + 92, + 48 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1584, + "bbox": [ + 437, + 374, + 61, + 43 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 2851, + "bbox": [ + 365, + 375, + 79, + 47 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 527, + "bbox": [ + 642, + 357, + 22, + 32 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 3145, + "bbox": [ + 1349, + 345, + 92, + 62 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_040732_gtFine_panoptic.png", + "image_id": "frankfurt_000001_040732", + "segments_info": [ + { + "area": 804279, + "bbox": [ + 6, + 409, + 2037, + 570 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 77094, + "bbox": [ + 6, + 443, + 2037, + 154 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 370867, + "bbox": [ + 6, + 5, + 2037, + 438 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19953, + "bbox": [ + 902, + 417, + 1141, + 74 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 856, + "bbox": [ + 1950, + 391, + 93, + 30 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 35990, + "bbox": [ + 36, + 44, + 1975, + 478 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4611, + "bbox": [ + 306, + 172, + 1100, + 252 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1697, + "bbox": [ + 328, + 230, + 583, + 195 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 355281, + "bbox": [ + 453, + 36, + 1590, + 424 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 12226, + "bbox": [ + 237, + 420, + 1806, + 113 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 80372, + "bbox": [ + 245, + 5, + 659, + 326 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 155, + "bbox": [ + 556, + 436, + 22, + 10 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 202, + "bbox": [ + 850, + 425, + 17, + 18 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 183, + "bbox": [ + 280, + 423, + 11, + 25 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 6294, + "bbox": [ + 1600, + 330, + 83, + 161 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 20, + "bbox": [ + 453, + 437, + 6, + 4 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 51, + "bbox": [ + 480, + 437, + 10, + 8 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 68, + "bbox": [ + 420, + 436, + 9, + 15 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 510, + "bbox": [ + 426, + 435, + 27, + 21 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 846, + "bbox": [ + 388, + 431, + 37, + 35 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 426, + "bbox": [ + 306, + 432, + 26, + 26 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 418, + "bbox": [ + 329, + 432, + 37, + 27 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 223, + "bbox": [ + 259, + 434, + 22, + 38 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1157, + "bbox": [ + 74, + 434, + 61, + 50 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2937, + "bbox": [ + 186, + 423, + 79, + 60 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 5292, + "bbox": [ + 100, + 432, + 115, + 59 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 3180, + "bbox": [ + 6, + 430, + 85, + 60 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 640, + "bbox": [ + 451, + 437, + 35, + 22 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 923, + "bbox": [ + 370, + 407, + 50, + 30 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 10717, + "bbox": [ + 1401, + 390, + 165, + 121 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 17062, + "bbox": [ + 1536, + 414, + 234, + 130 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_041074_gtFine_panoptic.png", + "image_id": "frankfurt_000001_041074", + "segments_info": [ + { + "area": 662859, + "bbox": [ + 6, + 405, + 1947, + 574 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 215101, + "bbox": [ + 527, + 406, + 1516, + 551 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 95111, + "bbox": [ + 7, + 5, + 1988, + 417 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 6133, + "bbox": [ + 1292, + 408, + 258, + 38 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 70479, + "bbox": [ + 1291, + 352, + 752, + 250 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 69072, + "bbox": [ + 49, + 5, + 1994, + 619 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1886, + "bbox": [ + 500, + 241, + 637, + 156 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2552, + "bbox": [ + 402, + 271, + 888, + 141 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 552297, + "bbox": [ + 6, + 5, + 1976, + 508 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 42240, + "bbox": [ + 6, + 393, + 1064, + 191 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 61186, + "bbox": [ + 605, + 5, + 563, + 315 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 165, + "bbox": [ + 607, + 403, + 11, + 22 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 161, + "bbox": [ + 1085, + 390, + 8, + 32 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3871, + "bbox": [ + 1660, + 301, + 69, + 89 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 4940, + "bbox": [ + 1367, + 327, + 57, + 148 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 820, + "bbox": [ + 342, + 432, + 37, + 29 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 52, + "bbox": [ + 962, + 405, + 7, + 8 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 97, + "bbox": [ + 935, + 406, + 16, + 9 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 169, + "bbox": [ + 946, + 403, + 16, + 11 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 116, + "bbox": [ + 971, + 405, + 14, + 9 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 91, + "bbox": [ + 1065, + 394, + 12, + 12 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 217, + "bbox": [ + 1253, + 397, + 10, + 28 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 10898, + "bbox": [ + 54, + 385, + 191, + 80 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_041354_gtFine_panoptic.png", + "image_id": "frankfurt_000001_041354", + "segments_info": [ + { + "area": 692489, + "bbox": [ + 6, + 400, + 1991, + 579 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 196179, + "bbox": [ + 1104, + 397, + 939, + 560 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 183534, + "bbox": [ + 1192, + 14, + 851, + 420 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 58067, + "bbox": [ + 298, + 5, + 1745, + 602 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 396, + "bbox": [ + 950, + 240, + 257, + 103 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 3139, + "bbox": [ + 1130, + 261, + 201, + 107 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 455063, + "bbox": [ + 6, + 5, + 1795, + 461 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 36121, + "bbox": [ + 6, + 395, + 1121, + 163 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 37297, + "bbox": [ + 1010, + 10, + 517, + 236 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 63670, + "bbox": [ + 419, + 255, + 296, + 271 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 41425, + "bbox": [ + 736, + 272, + 226, + 226 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 8247, + "bbox": [ + 1604, + 332, + 141, + 74 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_041517_gtFine_panoptic.png", + "image_id": "frankfurt_000001_041517", + "segments_info": [ + { + "area": 750162, + "bbox": [ + 6, + 419, + 2037, + 560 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 104110, + "bbox": [ + 1110, + 418, + 933, + 206 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 140222, + "bbox": [ + 1300, + 16, + 743, + 452 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 43384, + "bbox": [ + 297, + 23, + 1501, + 577 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 95, + "bbox": [ + 1088, + 325, + 7, + 14 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 20151, + "bbox": [ + 1264, + 34, + 636, + 277 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 568955, + "bbox": [ + 6, + 5, + 2037, + 571 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 38092, + "bbox": [ + 6, + 415, + 2037, + 196 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 39701, + "bbox": [ + 977, + 10, + 371, + 170 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 7016, + "bbox": [ + 976, + 363, + 87, + 92 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 20639, + "bbox": [ + 428, + 359, + 133, + 178 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 614, + "bbox": [ + 886, + 367, + 19, + 88 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 108291, + "bbox": [ + 551, + 211, + 362, + 353 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_041664_gtFine_panoptic.png", + "image_id": "frankfurt_000001_041664", + "segments_info": [ + { + "area": 658954, + "bbox": [ + 6, + 436, + 1940, + 543 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 226769, + "bbox": [ + 6, + 434, + 2037, + 523 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 43885, + "bbox": [ + 1437, + 104, + 606, + 339 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 53637, + "bbox": [ + 268, + 5, + 1351, + 542 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9497, + "bbox": [ + 252, + 7, + 1210, + 392 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 7269, + "bbox": [ + 447, + 204, + 1016, + 232 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 758249, + "bbox": [ + 6, + 5, + 2037, + 549 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 27640, + "bbox": [ + 485, + 415, + 1558, + 147 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 4103, + "bbox": [ + 1525, + 359, + 50, + 136 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1383, + "bbox": [ + 1573, + 365, + 43, + 53 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 4258, + "bbox": [ + 1312, + 380, + 71, + 69 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 4193, + "bbox": [ + 1121, + 378, + 68, + 76 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 6055, + "bbox": [ + 909, + 388, + 90, + 87 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 19168, + "bbox": [ + 983, + 334, + 148, + 147 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_042098_gtFine_panoptic.png", + "image_id": "frankfurt_000001_042098", + "segments_info": [ + { + "area": 721784, + "bbox": [ + 6, + 380, + 2016, + 599 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 188816, + "bbox": [ + 6, + 385, + 2037, + 572 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 62618, + "bbox": [ + 6, + 25, + 2018, + 383 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 92535, + "bbox": [ + 1420, + 253, + 623, + 262 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 45147, + "bbox": [ + 50, + 22, + 1677, + 499 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 5528, + "bbox": [ + 574, + 121, + 906, + 225 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 6790, + "bbox": [ + 1081, + 209, + 505, + 140 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 570688, + "bbox": [ + 6, + 5, + 2037, + 434 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 75646, + "bbox": [ + 6, + 379, + 1123, + 204 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 12659, + "bbox": [ + 1079, + 12, + 143, + 129 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 259, + "bbox": [ + 1373, + 365, + 14, + 45 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 3312, + "bbox": [ + 1382, + 328, + 46, + 131 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 87, + "bbox": [ + 1073, + 373, + 12, + 9 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 55, + "bbox": [ + 1066, + 373, + 8, + 8 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 25, + "bbox": [ + 1058, + 373, + 5, + 7 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 121, + "bbox": [ + 1046, + 373, + 14, + 10 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 271, + "bbox": [ + 1022, + 370, + 18, + 16 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 198, + "bbox": [ + 771, + 375, + 14, + 18 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 420, + "bbox": [ + 695, + 377, + 41, + 15 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 197, + "bbox": [ + 628, + 376, + 16, + 21 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 185, + "bbox": [ + 523, + 382, + 32, + 16 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 61, + "bbox": [ + 551, + 381, + 14, + 12 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 4539, + "bbox": [ + 271, + 383, + 146, + 43 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1275, + "bbox": [ + 1127, + 355, + 36, + 40 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1184, + "bbox": [ + 220, + 361, + 55, + 36 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 250, + "bbox": [ + 1399, + 387, + 25, + 83 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_042384_gtFine_panoptic.png", + "image_id": "frankfurt_000001_042384", + "segments_info": [ + { + "area": 708106, + "bbox": [ + 6, + 413, + 2033, + 566 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 184657, + "bbox": [ + 6, + 415, + 2037, + 518 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 130077, + "bbox": [ + 471, + 12, + 1572, + 416 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3734, + "bbox": [ + 237, + 404, + 191, + 27 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 59770, + "bbox": [ + 9, + 15, + 2034, + 676 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9641, + "bbox": [ + 8, + 120, + 1680, + 236 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 7442, + "bbox": [ + 19, + 164, + 1319, + 240 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 565162, + "bbox": [ + 6, + 5, + 2037, + 570 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 28708, + "bbox": [ + 6, + 409, + 1123, + 134 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 48841, + "bbox": [ + 621, + 5, + 509, + 255 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 244, + "bbox": [ + 658, + 403, + 16, + 21 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 554, + "bbox": [ + 1256, + 381, + 18, + 53 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 266, + "bbox": [ + 1292, + 389, + 21, + 49 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2396, + "bbox": [ + 1389, + 340, + 36, + 192 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 5993, + "bbox": [ + 1398, + 343, + 57, + 193 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 10480, + "bbox": [ + 832, + 393, + 141, + 92 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 448, + "bbox": [ + 1136, + 402, + 27, + 20 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 181, + "bbox": [ + 1173, + 401, + 16, + 18 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 586, + "bbox": [ + 1184, + 398, + 33, + 21 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1019, + "bbox": [ + 1226, + 383, + 32, + 41 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_042733_gtFine_panoptic.png", + "image_id": "frankfurt_000001_042733", + "segments_info": [ + { + "area": 478972, + "bbox": [ + 6, + 436, + 1791, + 543 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 263385, + "bbox": [ + 765, + 429, + 1278, + 528 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 194053, + "bbox": [ + 587, + 6, + 1446, + 445 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 31357, + "bbox": [ + 1265, + 327, + 706, + 174 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 19569, + "bbox": [ + 1272, + 361, + 485, + 75 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 50199, + "bbox": [ + 38, + 11, + 1980, + 529 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3517, + "bbox": [ + 389, + 123, + 973, + 265 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 12142, + "bbox": [ + 510, + 46, + 1137, + 322 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 347491, + "bbox": [ + 6, + 5, + 2037, + 488 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 56134, + "bbox": [ + 10, + 5, + 781, + 324 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 418, + "bbox": [ + 1743, + 337, + 29, + 25 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 17693, + "bbox": [ + 1830, + 263, + 117, + 293 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 6313, + "bbox": [ + 1636, + 328, + 64, + 173 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 638, + "bbox": [ + 1235, + 405, + 37, + 32 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 153843, + "bbox": [ + 771, + 159, + 385, + 453 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1084, + "bbox": [ + 732, + 397, + 39, + 90 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2354, + "bbox": [ + 698, + 389, + 61, + 109 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2426, + "bbox": [ + 684, + 385, + 53, + 124 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 23431, + "bbox": [ + 523, + 342, + 197, + 210 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 89, + "bbox": [ + 150, + 422, + 14, + 10 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 90831, + "bbox": [ + 142, + 293, + 441, + 340 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 91821, + "bbox": [ + 6, + 332, + 243, + 534 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 6392, + "bbox": [ + 1826, + 393, + 112, + 178 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2129, + "bbox": [ + 1662, + 401, + 29, + 113 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_043395_gtFine_panoptic.png", + "image_id": "frankfurt_000001_043395", + "segments_info": [ + { + "area": 847735, + "bbox": [ + 6, + 427, + 2037, + 552 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 41308, + "bbox": [ + 562, + 435, + 1481, + 67 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 516361, + "bbox": [ + 247, + 10, + 1796, + 451 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 21774, + "bbox": [ + 17, + 24, + 2026, + 522 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7938, + "bbox": [ + 613, + 233, + 1199, + 161 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 14550, + "bbox": [ + 13, + 214, + 1392, + 275 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 184349, + "bbox": [ + 6, + 5, + 1020, + 453 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2976, + "bbox": [ + 633, + 432, + 1294, + 111 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 58404, + "bbox": [ + 23, + 5, + 511, + 232 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 699, + "bbox": [ + 1124, + 367, + 47, + 49 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 4024, + "bbox": [ + 1081, + 365, + 80, + 125 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1908, + "bbox": [ + 931, + 384, + 68, + 99 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 3996, + "bbox": [ + 1226, + 361, + 65, + 130 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 8248, + "bbox": [ + 986, + 322, + 81, + 204 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 4933, + "bbox": [ + 538, + 398, + 85, + 67 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1208, + "bbox": [ + 280, + 410, + 34, + 43 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1059, + "bbox": [ + 200, + 392, + 82, + 63 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 6715, + "bbox": [ + 172, + 397, + 106, + 90 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 22163, + "bbox": [ + 7, + 379, + 188, + 143 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 53051, + "bbox": [ + 314, + 263, + 225, + 263 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 753, + "bbox": [ + 1099, + 412, + 79, + 72 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 4888, + "bbox": [ + 1055, + 429, + 123, + 63 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 3206, + "bbox": [ + 910, + 417, + 92, + 78 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 5442, + "bbox": [ + 1182, + 404, + 127, + 85 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 3897, + "bbox": [ + 980, + 413, + 89, + 127 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_043564_gtFine_panoptic.png", + "image_id": "frankfurt_000001_043564", + "segments_info": [ + { + "area": 818204, + "bbox": [ + 6, + 428, + 2037, + 551 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 65532, + "bbox": [ + 1098, + 415, + 945, + 136 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 44004, + "bbox": [ + 6, + 6, + 2037, + 436 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 6181, + "bbox": [ + 1412, + 418, + 631, + 77 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 91236, + "bbox": [ + 6, + 356, + 2037, + 187 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 25705, + "bbox": [ + 70, + 15, + 1820, + 519 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 682, + "bbox": [ + 1011, + 362, + 411, + 26 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 78444, + "bbox": [ + 121, + 204, + 1884, + 415 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 649702, + "bbox": [ + 8, + 5, + 2035, + 468 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 348, + "bbox": [ + 1363, + 405, + 44, + 10 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 23413, + "bbox": [ + 718, + 5, + 382, + 131 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2209, + "bbox": [ + 1452, + 369, + 39, + 86 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1299, + "bbox": [ + 1160, + 398, + 44, + 36 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1658, + "bbox": [ + 965, + 390, + 61, + 54 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1299, + "bbox": [ + 945, + 397, + 47, + 53 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3826, + "bbox": [ + 879, + 391, + 80, + 68 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 8939, + "bbox": [ + 716, + 355, + 152, + 124 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 21308, + "bbox": [ + 395, + 389, + 245, + 142 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_044227_gtFine_panoptic.png", + "image_id": "frankfurt_000001_044227", + "segments_info": [ + { + "area": 627672, + "bbox": [ + 6, + 424, + 1885, + 555 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 194028, + "bbox": [ + 6, + 426, + 2037, + 531 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 166504, + "bbox": [ + 6, + 5, + 2037, + 600 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4329, + "bbox": [ + 1481, + 432, + 432, + 65 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 27437, + "bbox": [ + 1481, + 341, + 430, + 117 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 14763, + "bbox": [ + 339, + 54, + 1380, + 526 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 14464, + "bbox": [ + 90, + 21, + 1728, + 444 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 664435, + "bbox": [ + 6, + 5, + 1995, + 548 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 287, + "bbox": [ + 1035, + 413, + 50, + 16 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 28452, + "bbox": [ + 721, + 5, + 417, + 262 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1706, + "bbox": [ + 545, + 386, + 43, + 84 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 81, + "bbox": [ + 1084, + 409, + 14, + 18 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 581, + "bbox": [ + 1087, + 410, + 28, + 25 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1790, + "bbox": [ + 818, + 411, + 56, + 59 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 23985, + "bbox": [ + 848, + 393, + 192, + 146 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 10491, + "bbox": [ + 629, + 407, + 144, + 97 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 47253, + "bbox": [ + 198, + 402, + 340, + 186 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 963, + "bbox": [ + 550, + 424, + 36, + 61 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_044413_gtFine_panoptic.png", + "image_id": "frankfurt_000001_044413", + "segments_info": [ + { + "area": 698683, + "bbox": [ + 6, + 395, + 2012, + 584 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 145388, + "bbox": [ + 6, + 400, + 2037, + 557 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 47527, + "bbox": [ + 7, + 11, + 1655, + 387 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 10832, + "bbox": [ + 24, + 81, + 1575, + 372 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 528, + "bbox": [ + 752, + 319, + 471, + 37 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 5627, + "bbox": [ + 1166, + 234, + 404, + 129 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 792529, + "bbox": [ + 6, + 5, + 2037, + 572 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 30182, + "bbox": [ + 696, + 5, + 345, + 191 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 543, + "bbox": [ + 1313, + 357, + 23, + 34 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 44, + "bbox": [ + 1140, + 371, + 7, + 9 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 114, + "bbox": [ + 1129, + 370, + 11, + 17 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 907, + "bbox": [ + 545, + 371, + 24, + 49 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 148, + "bbox": [ + 880, + 380, + 12, + 18 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 456, + "bbox": [ + 654, + 364, + 31, + 21 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2763, + "bbox": [ + 431, + 359, + 50, + 113 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 2779, + "bbox": [ + 1130, + 371, + 87, + 46 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 336, + "bbox": [ + 1103, + 377, + 23, + 18 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2190, + "bbox": [ + 1050, + 375, + 59, + 44 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 6172, + "bbox": [ + 888, + 370, + 102, + 76 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 47927, + "bbox": [ + 508, + 383, + 330, + 186 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1423, + "bbox": [ + 432, + 407, + 40, + 70 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_044525_gtFine_panoptic.png", + "image_id": "frankfurt_000001_044525", + "segments_info": [ + { + "area": 890948, + "bbox": [ + 6, + 425, + 2037, + 554 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 37282, + "bbox": [ + 6, + 435, + 2037, + 304 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 192482, + "bbox": [ + 6, + 10, + 2037, + 497 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 428, + "bbox": [ + 824, + 416, + 30, + 28 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 2703, + "bbox": [ + 363, + 402, + 78, + 36 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 43258, + "bbox": [ + 50, + 5, + 1886, + 524 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9083, + "bbox": [ + 133, + 24, + 1746, + 339 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 5304, + "bbox": [ + 167, + 221, + 1253, + 122 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 555034, + "bbox": [ + 6, + 5, + 2037, + 494 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 5643, + "bbox": [ + 965, + 414, + 1078, + 57 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 49913, + "bbox": [ + 622, + 5, + 350, + 188 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 7136, + "bbox": [ + 1874, + 338, + 73, + 177 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 6443, + "bbox": [ + 1812, + 351, + 58, + 163 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2290, + "bbox": [ + 1499, + 368, + 46, + 91 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1844, + "bbox": [ + 1467, + 373, + 33, + 90 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1901, + "bbox": [ + 1306, + 366, + 62, + 122 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 616, + "bbox": [ + 1325, + 400, + 18, + 83 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 210, + "bbox": [ + 727, + 407, + 13, + 20 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 250, + "bbox": [ + 707, + 405, + 15, + 45 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 281, + "bbox": [ + 1122, + 398, + 12, + 43 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 466, + "bbox": [ + 1107, + 398, + 18, + 50 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 507, + "bbox": [ + 1133, + 392, + 21, + 45 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 132, + "bbox": [ + 985, + 407, + 12, + 16 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 636, + "bbox": [ + 1390, + 396, + 50, + 32 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 5047, + "bbox": [ + 991, + 404, + 94, + 69 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1984, + "bbox": [ + 898, + 406, + 68, + 55 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 5650, + "bbox": [ + 828, + 413, + 108, + 67 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 409, + "bbox": [ + 750, + 419, + 33, + 28 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 198, + "bbox": [ + 1125, + 419, + 8, + 29 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 180, + "bbox": [ + 1111, + 423, + 9, + 26 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 211, + "bbox": [ + 1139, + 420, + 9, + 30 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 68, + "bbox": [ + 987, + 419, + 8, + 15 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_044658_gtFine_panoptic.png", + "image_id": "frankfurt_000001_044658", + "segments_info": [ + { + "area": 771270, + "bbox": [ + 6, + 416, + 2037, + 563 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 52970, + "bbox": [ + 1449, + 461, + 594, + 141 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 268079, + "bbox": [ + 6, + 5, + 2037, + 499 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 13840, + "bbox": [ + 1466, + 386, + 305, + 117 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 44542, + "bbox": [ + 6, + 389, + 1715, + 161 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 25773, + "bbox": [ + 1016, + 21, + 966, + 555 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1172, + "bbox": [ + 937, + 265, + 353, + 124 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 12692, + "bbox": [ + 1890, + 25, + 148, + 93 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 483091, + "bbox": [ + 71, + 5, + 1661, + 460 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 18640, + "bbox": [ + 358, + 400, + 793, + 110 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 7303, + "bbox": [ + 828, + 7, + 90, + 125 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 243, + "bbox": [ + 851, + 411, + 17, + 19 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 5604, + "bbox": [ + 1306, + 357, + 66, + 180 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 7439, + "bbox": [ + 1341, + 338, + 98, + 199 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 8794, + "bbox": [ + 1845, + 320, + 80, + 167 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 266, + "bbox": [ + 916, + 401, + 15, + 24 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 210, + "bbox": [ + 888, + 399, + 14, + 23 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1370, + "bbox": [ + 644, + 394, + 35, + 87 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 223, + "bbox": [ + 1257, + 394, + 10, + 44 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 156, + "bbox": [ + 1262, + 389, + 13, + 44 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 422, + "bbox": [ + 1261, + 391, + 21, + 56 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 1416, + "bbox": [ + 1275, + 377, + 43, + 79 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 1779, + "bbox": [ + 1349, + 343, + 31, + 97 + ], + "category_id": 25, + "id": 25005, + "iscrowd": 0 + }, + { + "area": 24933, + "bbox": [ + 670, + 386, + 192, + 159 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 253, + "bbox": [ + 1228, + 405, + 19, + 15 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 563, + "bbox": [ + 1200, + 403, + 30, + 22 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1648, + "bbox": [ + 1142, + 410, + 60, + 35 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 38703, + "bbox": [ + 905, + 379, + 252, + 197 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 51, + "bbox": [ + 1251, + 410, + 6, + 9 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 715, + "bbox": [ + 642, + 431, + 36, + 53 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1215, + "bbox": [ + 1522, + 391, + 29, + 63 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1428, + "bbox": [ + 1545, + 389, + 43, + 64 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 72, + "bbox": [ + 1260, + 419, + 4, + 20 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 35, + "bbox": [ + 1264, + 431, + 5, + 13 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 227, + "bbox": [ + 1271, + 419, + 12, + 36 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 503, + "bbox": [ + 1285, + 429, + 21, + 52 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 898, + "bbox": [ + 1353, + 438, + 24, + 76 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_044787_gtFine_panoptic.png", + "image_id": "frankfurt_000001_044787", + "segments_info": [ + { + "area": 687588, + "bbox": [ + 6, + 396, + 1994, + 583 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 10949, + "bbox": [ + 704, + 419, + 1296, + 152 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 132391, + "bbox": [ + 6, + 5, + 2032, + 437 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 43321, + "bbox": [ + 1569, + 230, + 378, + 206 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 12190, + "bbox": [ + 441, + 20, + 1094, + 439 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8020, + "bbox": [ + 447, + 43, + 861, + 323 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1296, + "bbox": [ + 1218, + 244, + 120, + 104 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 512879, + "bbox": [ + 11, + 5, + 2032, + 434 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 171254, + "bbox": [ + 6, + 292, + 2037, + 396 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 6299, + "bbox": [ + 555, + 5, + 554, + 54 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1282, + "bbox": [ + 275, + 394, + 72, + 30 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 4305, + "bbox": [ + 1659, + 296, + 60, + 136 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 4853, + "bbox": [ + 1721, + 312, + 66, + 120 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 570, + "bbox": [ + 1657, + 301, + 34, + 45 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 568, + "bbox": [ + 405, + 368, + 23, + 60 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1693, + "bbox": [ + 408, + 377, + 37, + 74 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 20116, + "bbox": [ + 1902, + 165, + 141, + 466 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1329, + "bbox": [ + 1224, + 352, + 33, + 106 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1927, + "bbox": [ + 1244, + 346, + 40, + 112 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 2231, + "bbox": [ + 1277, + 343, + 39, + 129 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 4267, + "bbox": [ + 1289, + 334, + 70, + 155 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 338, + "bbox": [ + 1151, + 372, + 15, + 38 + ], + "category_id": 25, + "id": 25005, + "iscrowd": 0 + }, + { + "area": 580, + "bbox": [ + 1164, + 368, + 19, + 62 + ], + "category_id": 25, + "id": 25006, + "iscrowd": 0 + }, + { + "area": 1103, + "bbox": [ + 1184, + 374, + 32, + 68 + ], + "category_id": 25, + "id": 25007, + "iscrowd": 0 + }, + { + "area": 261, + "bbox": [ + 824, + 380, + 13, + 28 + ], + "category_id": 25, + "id": 25008, + "iscrowd": 0 + }, + { + "area": 971, + "bbox": [ + 607, + 386, + 55, + 28 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 455, + "bbox": [ + 946, + 382, + 29, + 45 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 38709, + "bbox": [ + 939, + 357, + 246, + 194 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 18529, + "bbox": [ + 1913, + 399, + 130, + 346 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 602, + "bbox": [ + 1243, + 410, + 15, + 55 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 921, + "bbox": [ + 1264, + 406, + 19, + 69 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 626, + "bbox": [ + 1291, + 412, + 23, + 71 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2008, + "bbox": [ + 1314, + 410, + 31, + 91 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 101, + "bbox": [ + 1171, + 397, + 8, + 39 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 361, + "bbox": [ + 1196, + 408, + 15, + 42 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 157, + "bbox": [ + 827, + 403, + 9, + 22 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_046126_gtFine_panoptic.png", + "image_id": "frankfurt_000001_046126", + "segments_info": [ + { + "area": 897797, + "bbox": [ + 6, + 401, + 2037, + 578 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 46262, + "bbox": [ + 6, + 419, + 2037, + 110 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 167734, + "bbox": [ + 6, + 21, + 2037, + 446 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 41121, + "bbox": [ + 1512, + 344, + 495, + 126 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 25820, + "bbox": [ + 227, + 5, + 1802, + 516 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8197, + "bbox": [ + 625, + 68, + 1318, + 320 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 15657, + "bbox": [ + 240, + 121, + 1522, + 244 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 534863, + "bbox": [ + 9, + 5, + 1649, + 457 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 34901, + "bbox": [ + 6, + 377, + 1269, + 107 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 26382, + "bbox": [ + 965, + 10, + 237, + 201 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 90, + "bbox": [ + 1362, + 374, + 11, + 9 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 136, + "bbox": [ + 1389, + 372, + 13, + 13 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 335, + "bbox": [ + 292, + 377, + 21, + 26 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 452, + "bbox": [ + 320, + 380, + 24, + 37 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 523, + "bbox": [ + 1404, + 371, + 29, + 39 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2115, + "bbox": [ + 1508, + 365, + 45, + 85 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 4070, + "bbox": [ + 1736, + 358, + 65, + 148 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 692, + "bbox": [ + 865, + 379, + 23, + 56 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 3936, + "bbox": [ + 1143, + 389, + 81, + 61 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 21129, + "bbox": [ + 1252, + 382, + 195, + 135 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 75, + "bbox": [ + 1050, + 399, + 10, + 9 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 134, + "bbox": [ + 1058, + 399, + 13, + 12 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 319, + "bbox": [ + 1069, + 400, + 24, + 16 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 315, + "bbox": [ + 1029, + 382, + 13, + 26 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 1664, + "bbox": [ + 985, + 375, + 45, + 44 + ], + "category_id": 28, + "id": 28001, + "iscrowd": 0 + }, + { + "area": 1480, + "bbox": [ + 1517, + 438, + 34, + 57 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 5967, + "bbox": [ + 1711, + 422, + 141, + 85 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 220, + "bbox": [ + 863, + 399, + 24, + 40 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_046272_gtFine_panoptic.png", + "image_id": "frankfurt_000001_046272", + "segments_info": [ + { + "area": 573295, + "bbox": [ + 6, + 412, + 2033, + 567 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 286339, + "bbox": [ + 6, + 406, + 2037, + 526 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 222266, + "bbox": [ + 51, + 5, + 1992, + 400 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 35679, + "bbox": [ + 1651, + 420, + 392, + 172 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 4842, + "bbox": [ + 177, + 377, + 1073, + 30 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 36917, + "bbox": [ + 115, + 109, + 1752, + 603 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3347, + "bbox": [ + 901, + 242, + 695, + 231 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 503495, + "bbox": [ + 6, + 5, + 2037, + 496 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 42087, + "bbox": [ + 6, + 391, + 2037, + 216 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 8791, + "bbox": [ + 1005, + 10, + 297, + 105 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 117, + "bbox": [ + 704, + 386, + 17, + 14 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 9950, + "bbox": [ + 438, + 335, + 78, + 202 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 8402, + "bbox": [ + 510, + 324, + 71, + 217 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1827, + "bbox": [ + 1013, + 391, + 97, + 62 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2055, + "bbox": [ + 1021, + 399, + 68, + 59 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4272, + "bbox": [ + 932, + 393, + 115, + 72 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2633, + "bbox": [ + 925, + 401, + 67, + 69 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 11225, + "bbox": [ + 755, + 371, + 185, + 107 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 7245, + "bbox": [ + 689, + 399, + 125, + 82 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 11179, + "bbox": [ + 557, + 393, + 156, + 93 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1066, + "bbox": [ + 451, + 417, + 126, + 73 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 20265, + "bbox": [ + 248, + 377, + 209, + 123 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 6972, + "bbox": [ + 161, + 386, + 119, + 115 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2054, + "bbox": [ + 1597, + 377, + 84, + 51 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 3560, + "bbox": [ + 6, + 403, + 51, + 101 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1660, + "bbox": [ + 1844, + 369, + 84, + 36 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 340, + "bbox": [ + 1206, + 393, + 26, + 24 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 338, + "bbox": [ + 1224, + 391, + 32, + 26 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 409, + "bbox": [ + 1238, + 392, + 27, + 27 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 693, + "bbox": [ + 1254, + 389, + 37, + 30 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 6010, + "bbox": [ + 1662, + 363, + 231, + 61 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 820, + "bbox": [ + 1280, + 389, + 40, + 31 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 626, + "bbox": [ + 1309, + 388, + 26, + 32 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 314, + "bbox": [ + 1331, + 380, + 42, + 42 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 1142, + "bbox": [ + 1337, + 382, + 55, + 37 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 454, + "bbox": [ + 1367, + 386, + 32, + 36 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 626, + "bbox": [ + 1376, + 382, + 98, + 42 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 14483, + "bbox": [ + 1446, + 363, + 209, + 106 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_046504_gtFine_panoptic.png", + "image_id": "frankfurt_000001_046504", + "segments_info": [ + { + "area": 772429, + "bbox": [ + 6, + 415, + 2037, + 564 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 51294, + "bbox": [ + 6, + 406, + 1190, + 288 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 207433, + "bbox": [ + 6, + 5, + 2037, + 414 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 6359, + "bbox": [ + 437, + 416, + 309, + 67 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 18507, + "bbox": [ + 413, + 340, + 902, + 106 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 8408, + "bbox": [ + 737, + 25, + 1138, + 447 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 480, + "bbox": [ + 743, + 278, + 15, + 39 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 471114, + "bbox": [ + 121, + 5, + 1922, + 440 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1864, + "bbox": [ + 888, + 8, + 74, + 43 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 167, + "bbox": [ + 761, + 383, + 10, + 34 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 569, + "bbox": [ + 748, + 377, + 19, + 45 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2108, + "bbox": [ + 605, + 363, + 32, + 101 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2337, + "bbox": [ + 630, + 368, + 43, + 97 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 7065, + "bbox": [ + 1642, + 332, + 89, + 244 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 493, + "bbox": [ + 960, + 380, + 60, + 24 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1169, + "bbox": [ + 974, + 386, + 49, + 33 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1392, + "bbox": [ + 944, + 389, + 38, + 61 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 683, + "bbox": [ + 1013, + 382, + 63, + 38 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 425, + "bbox": [ + 1022, + 391, + 26, + 26 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 821, + "bbox": [ + 1040, + 386, + 58, + 38 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2726, + "bbox": [ + 1055, + 388, + 107, + 39 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1119, + "bbox": [ + 1195, + 391, + 65, + 50 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 765, + "bbox": [ + 1223, + 391, + 37, + 50 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 663, + "bbox": [ + 1244, + 388, + 48, + 57 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 974, + "bbox": [ + 1252, + 391, + 54, + 60 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 2253, + "bbox": [ + 1268, + 391, + 63, + 65 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 5035, + "bbox": [ + 1306, + 380, + 131, + 87 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 3032, + "bbox": [ + 1368, + 385, + 65, + 96 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 5230, + "bbox": [ + 1406, + 357, + 233, + 143 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 14482, + "bbox": [ + 1438, + 360, + 237, + 157 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 4771, + "bbox": [ + 1528, + 382, + 77, + 150 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 14704, + "bbox": [ + 1558, + 357, + 374, + 170 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 47569, + "bbox": [ + 1615, + 375, + 428, + 227 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 53837, + "bbox": [ + 1832, + 386, + 211, + 345 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_046779_gtFine_panoptic.png", + "image_id": "frankfurt_000001_046779", + "segments_info": [ + { + "area": 705591, + "bbox": [ + 6, + 415, + 2037, + 564 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 5996, + "bbox": [ + 6, + 432, + 1075, + 249 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 114793, + "bbox": [ + 6, + 5, + 2037, + 411 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4345, + "bbox": [ + 6, + 353, + 1052, + 97 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 546, + "bbox": [ + 6, + 356, + 32, + 139 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 6570, + "bbox": [ + 278, + 164, + 1240, + 287 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7731, + "bbox": [ + 268, + 239, + 1260, + 203 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 516133, + "bbox": [ + 10, + 5, + 2033, + 424 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 6229, + "bbox": [ + 64, + 335, + 1435, + 112 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 43840, + "bbox": [ + 624, + 5, + 348, + 273 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3274, + "bbox": [ + 57, + 366, + 76, + 81 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 3846, + "bbox": [ + 6, + 363, + 49, + 110 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 18213, + "bbox": [ + 203, + 365, + 177, + 310 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1140, + "bbox": [ + 920, + 388, + 36, + 73 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1528, + "bbox": [ + 894, + 380, + 33, + 82 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 679, + "bbox": [ + 819, + 391, + 42, + 27 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 257, + "bbox": [ + 838, + 408, + 17, + 28 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1347, + "bbox": [ + 847, + 403, + 45, + 36 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1721, + "bbox": [ + 787, + 403, + 52, + 41 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 3371, + "bbox": [ + 645, + 397, + 147, + 93 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1363, + "bbox": [ + 713, + 408, + 53, + 78 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 11327, + "bbox": [ + 606, + 402, + 141, + 112 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 56707, + "bbox": [ + 133, + 349, + 501, + 239 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 70365, + "bbox": [ + 6, + 425, + 467, + 241 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 454, + "bbox": [ + 891, + 400, + 50, + 47 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1348, + "bbox": [ + 930, + 400, + 58, + 50 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 99, + "bbox": [ + 1291, + 379, + 18, + 12 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 10792, + "bbox": [ + 1086, + 341, + 217, + 84 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1619, + "bbox": [ + 1081, + 397, + 73, + 72 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 5952, + "bbox": [ + 1102, + 391, + 139, + 95 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 4014, + "bbox": [ + 1170, + 393, + 97, + 96 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 7122, + "bbox": [ + 1215, + 385, + 186, + 111 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 4638, + "bbox": [ + 1292, + 386, + 183, + 72 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 16090, + "bbox": [ + 1263, + 391, + 224, + 144 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 117361, + "bbox": [ + 1423, + 292, + 481, + 364 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 107718, + "bbox": [ + 1763, + 253, + 280, + 509 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 452, + "bbox": [ + 1039, + 410, + 26, + 34 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_047178_gtFine_panoptic.png", + "image_id": "frankfurt_000001_047178", + "segments_info": [ + { + "area": 544610, + "bbox": [ + 6, + 385, + 2034, + 594 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 2443, + "bbox": [ + 631, + 447, + 565, + 112 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 214713, + "bbox": [ + 10, + 6, + 2033, + 450 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 8679, + "bbox": [ + 6, + 20, + 1536, + 402 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 14864, + "bbox": [ + 284, + 129, + 1295, + 250 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 354955, + "bbox": [ + 14, + 5, + 2029, + 404 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1024, + "bbox": [ + 571, + 411, + 47, + 41 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 65730, + "bbox": [ + 818, + 7, + 387, + 266 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1575, + "bbox": [ + 1058, + 388, + 52, + 52 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 6073, + "bbox": [ + 863, + 349, + 69, + 164 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 8755, + "bbox": [ + 841, + 377, + 223, + 92 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 443, + "bbox": [ + 850, + 386, + 38, + 104 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 5494, + "bbox": [ + 788, + 382, + 82, + 121 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 29892, + "bbox": [ + 603, + 368, + 228, + 175 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 6327, + "bbox": [ + 61, + 374, + 116, + 123 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 133603, + "bbox": [ + 100, + 341, + 534, + 370 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 97541, + "bbox": [ + 6, + 412, + 284, + 498 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 607, + "bbox": [ + 1098, + 399, + 25, + 48 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 741, + "bbox": [ + 1112, + 391, + 55, + 57 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 3362, + "bbox": [ + 1120, + 397, + 75, + 56 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 3273, + "bbox": [ + 1190, + 380, + 114, + 121 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 7588, + "bbox": [ + 1215, + 380, + 152, + 146 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 11541, + "bbox": [ + 1257, + 390, + 140, + 170 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 165327, + "bbox": [ + 1337, + 240, + 603, + 480 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 163276, + "bbox": [ + 1683, + 231, + 360, + 656 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 1572, + "bbox": [ + 866, + 411, + 58, + 120 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_047552_gtFine_panoptic.png", + "image_id": "frankfurt_000001_047552", + "segments_info": [ + { + "area": 618241, + "bbox": [ + 6, + 411, + 2036, + 568 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 50227, + "bbox": [ + 6, + 517, + 2037, + 300 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 233710, + "bbox": [ + 9, + 5, + 1875, + 407 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19524, + "bbox": [ + 6, + 379, + 317, + 236 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 5921, + "bbox": [ + 559, + 5, + 880, + 394 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 194, + "bbox": [ + 1133, + 363, + 19, + 16 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 439445, + "bbox": [ + 6, + 5, + 2037, + 518 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 13192, + "bbox": [ + 6, + 318, + 353, + 226 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 9070, + "bbox": [ + 1098, + 12, + 170, + 115 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 595, + "bbox": [ + 1011, + 400, + 33, + 25 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 86, + "bbox": [ + 1042, + 402, + 12, + 9 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 170, + "bbox": [ + 1006, + 406, + 13, + 28 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 572, + "bbox": [ + 983, + 402, + 30, + 36 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 342, + "bbox": [ + 981, + 406, + 18, + 38 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1020, + "bbox": [ + 950, + 400, + 38, + 48 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 461, + "bbox": [ + 956, + 422, + 19, + 34 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2858, + "bbox": [ + 878, + 388, + 83, + 87 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1319, + "bbox": [ + 884, + 401, + 57, + 77 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 7470, + "bbox": [ + 813, + 396, + 116, + 116 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 11407, + "bbox": [ + 725, + 394, + 132, + 143 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 72, + "bbox": [ + 1066, + 403, + 13, + 8 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 27475, + "bbox": [ + 554, + 360, + 218, + 237 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 124397, + "bbox": [ + 171, + 372, + 488, + 331 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 59, + "bbox": [ + 1078, + 400, + 8, + 14 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 123, + "bbox": [ + 1081, + 400, + 13, + 20 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 321, + "bbox": [ + 1085, + 400, + 25, + 31 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 383, + "bbox": [ + 1095, + 402, + 21, + 36 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 518, + "bbox": [ + 1106, + 403, + 27, + 36 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 2228, + "bbox": [ + 1112, + 399, + 56, + 70 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 3257, + "bbox": [ + 1148, + 393, + 85, + 83 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 1041, + "bbox": [ + 1187, + 396, + 44, + 87 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 6375, + "bbox": [ + 1192, + 370, + 82, + 134 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 72231, + "bbox": [ + 1251, + 219, + 368, + 344 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 41277, + "bbox": [ + 1432, + 329, + 383, + 316 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 167280, + "bbox": [ + 1555, + 332, + 488, + 444 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_048196_gtFine_panoptic.png", + "image_id": "frankfurt_000001_048196", + "segments_info": [ + { + "area": 737255, + "bbox": [ + 6, + 438, + 2037, + 541 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 84615, + "bbox": [ + 6, + 486, + 2037, + 153 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 461628, + "bbox": [ + 68, + 5, + 1856, + 435 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 58089, + "bbox": [ + 6, + 329, + 2037, + 236 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 122695, + "bbox": [ + 6, + 295, + 2037, + 211 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 15429, + "bbox": [ + 89, + 23, + 1425, + 571 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 22232, + "bbox": [ + 47, + 54, + 1482, + 323 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 221314, + "bbox": [ + 6, + 5, + 2037, + 498 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 873, + "bbox": [ + 465, + 5, + 323, + 4 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 219, + "bbox": [ + 886, + 393, + 13, + 34 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 8026, + "bbox": [ + 1356, + 334, + 65, + 206 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1673, + "bbox": [ + 712, + 408, + 69, + 34 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 956, + "bbox": [ + 693, + 405, + 34, + 53 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 848, + "bbox": [ + 677, + 403, + 30, + 62 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 7011, + "bbox": [ + 581, + 380, + 112, + 99 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 7983, + "bbox": [ + 467, + 388, + 155, + 127 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 7751, + "bbox": [ + 458, + 403, + 112, + 143 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 45321, + "bbox": [ + 217, + 386, + 293, + 196 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1293, + "bbox": [ + 821, + 406, + 64, + 35 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 504, + "bbox": [ + 872, + 405, + 15, + 51 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 824, + "bbox": [ + 880, + 403, + 33, + 62 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2382, + "bbox": [ + 894, + 399, + 79, + 73 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1865, + "bbox": [ + 923, + 406, + 50, + 81 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2408, + "bbox": [ + 946, + 389, + 71, + 112 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 3884, + "bbox": [ + 967, + 382, + 129, + 136 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 37770, + "bbox": [ + 991, + 383, + 267, + 182 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 4131, + "bbox": [ + 1240, + 382, + 64, + 113 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 6064, + "bbox": [ + 118, + 414, + 65, + 123 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_048355_gtFine_panoptic.png", + "image_id": "frankfurt_000001_048355", + "segments_info": [ + { + "area": 567117, + "bbox": [ + 6, + 450, + 2034, + 529 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 18897, + "bbox": [ + 844, + 449, + 943, + 201 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 527225, + "bbox": [ + 6, + 5, + 2037, + 450 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 7074, + "bbox": [ + 1773, + 315, + 169, + 209 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 16543, + "bbox": [ + 1806, + 310, + 237, + 151 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 9200, + "bbox": [ + 422, + 186, + 1477, + 307 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 25114, + "bbox": [ + 337, + 93, + 1620, + 237 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 169046, + "bbox": [ + 26, + 5, + 2017, + 376 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 5050, + "bbox": [ + 988, + 355, + 99, + 157 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 11397, + "bbox": [ + 794, + 394, + 234, + 71 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 24795, + "bbox": [ + 625, + 327, + 212, + 259 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 68499, + "bbox": [ + 319, + 323, + 394, + 343 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 221909, + "bbox": [ + 6, + 332, + 482, + 580 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 11766, + "bbox": [ + 1106, + 394, + 220, + 73 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 9592, + "bbox": [ + 1632, + 375, + 147, + 92 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 58817, + "bbox": [ + 1350, + 379, + 336, + 215 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 108253, + "bbox": [ + 1724, + 367, + 319, + 501 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 6885, + "bbox": [ + 1753, + 396, + 133, + 135 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_048654_gtFine_panoptic.png", + "image_id": "frankfurt_000001_048654", + "segments_info": [ + { + "area": 880151, + "bbox": [ + 6, + 402, + 2037, + 577 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 70652, + "bbox": [ + 6, + 427, + 2037, + 530 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 579020, + "bbox": [ + 6, + 5, + 2037, + 511 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 20602, + "bbox": [ + 397, + 5, + 1283, + 497 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1377, + "bbox": [ + 687, + 243, + 502, + 132 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 9612, + "bbox": [ + 571, + 79, + 1200, + 307 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 212567, + "bbox": [ + 541, + 5, + 1086, + 461 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 384, + "bbox": [ + 784, + 424, + 95, + 12 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 9476, + "bbox": [ + 798, + 7, + 364, + 77 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 470, + "bbox": [ + 1157, + 387, + 25, + 49 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 6859, + "bbox": [ + 267, + 406, + 377, + 95 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 249, + "bbox": [ + 622, + 394, + 14, + 23 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 821, + "bbox": [ + 426, + 383, + 30, + 40 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 4567, + "bbox": [ + 1672, + 305, + 57, + 169 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 527, + "bbox": [ + 1112, + 381, + 33, + 36 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 584, + "bbox": [ + 1061, + 381, + 27, + 37 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 165, + "bbox": [ + 1013, + 387, + 18, + 19 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1416, + "bbox": [ + 1025, + 385, + 45, + 39 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 865, + "bbox": [ + 995, + 387, + 31, + 49 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1770, + "bbox": [ + 965, + 386, + 44, + 62 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1273, + "bbox": [ + 838, + 393, + 46, + 34 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 261, + "bbox": [ + 1166, + 387, + 24, + 51 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1992, + "bbox": [ + 1168, + 381, + 56, + 87 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 3216, + "bbox": [ + 1188, + 383, + 61, + 96 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 8340, + "bbox": [ + 1224, + 374, + 144, + 119 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1419, + "bbox": [ + 1086, + 386, + 46, + 38 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 6939, + "bbox": [ + 879, + 376, + 99, + 86 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 2810, + "bbox": [ + 659, + 398, + 72, + 52 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 9099, + "bbox": [ + 1279, + 392, + 145, + 105 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 5249, + "bbox": [ + 1759, + 349, + 86, + 113 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 1086, + "bbox": [ + 342, + 417, + 59, + 73 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1782, + "bbox": [ + 214, + 430, + 57, + 74 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_049078_gtFine_panoptic.png", + "image_id": "frankfurt_000001_049078", + "segments_info": [ + { + "area": 825803, + "bbox": [ + 6, + 417, + 2037, + 562 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 55592, + "bbox": [ + 681, + 420, + 1362, + 249 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 249304, + "bbox": [ + 6, + 5, + 1323, + 456 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 9399, + "bbox": [ + 575, + 5, + 739, + 441 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 247, + "bbox": [ + 1222, + 330, + 79, + 57 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 312, + "bbox": [ + 1235, + 362, + 94, + 26 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 585894, + "bbox": [ + 137, + 5, + 1906, + 537 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1092, + "bbox": [ + 681, + 424, + 434, + 46 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 8366, + "bbox": [ + 1092, + 12, + 128, + 266 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 239, + "bbox": [ + 1300, + 393, + 8, + 37 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 454, + "bbox": [ + 1266, + 402, + 28, + 23 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 280, + "bbox": [ + 1244, + 402, + 18, + 19 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1223, + "bbox": [ + 1175, + 400, + 46, + 34 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 439, + "bbox": [ + 1155, + 401, + 27, + 22 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 128, + "bbox": [ + 1144, + 411, + 15, + 11 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 565, + "bbox": [ + 1067, + 404, + 29, + 26 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 920, + "bbox": [ + 1038, + 402, + 36, + 30 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1260, + "bbox": [ + 999, + 399, + 43, + 37 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1149, + "bbox": [ + 889, + 399, + 37, + 49 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2022, + "bbox": [ + 848, + 402, + 55, + 50 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1121, + "bbox": [ + 801, + 410, + 53, + 49 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 2951, + "bbox": [ + 757, + 418, + 80, + 44 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 9620, + "bbox": [ + 555, + 387, + 126, + 110 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 6957, + "bbox": [ + 498, + 406, + 93, + 104 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 65611, + "bbox": [ + 145, + 373, + 376, + 231 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_049209_gtFine_panoptic.png", + "image_id": "frankfurt_000001_049209", + "segments_info": [ + { + "area": 892406, + "bbox": [ + 6, + 395, + 2037, + 584 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 58976, + "bbox": [ + 6, + 404, + 2037, + 268 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 386613, + "bbox": [ + 6, + 5, + 2037, + 479 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19795, + "bbox": [ + 57, + 23, + 1952, + 506 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2072, + "bbox": [ + 900, + 197, + 675, + 186 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 8709, + "bbox": [ + 1105, + 290, + 587, + 181 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 289731, + "bbox": [ + 6, + 5, + 1387, + 527 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 59527, + "bbox": [ + 1027, + 10, + 378, + 281 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 628, + "bbox": [ + 1608, + 343, + 36, + 51 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 448, + "bbox": [ + 493, + 351, + 31, + 28 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 121, + "bbox": [ + 1439, + 377, + 8, + 28 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 165, + "bbox": [ + 1444, + 376, + 11, + 29 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 251, + "bbox": [ + 1561, + 361, + 18, + 67 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 797, + "bbox": [ + 1131, + 361, + 29, + 64 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 688, + "bbox": [ + 948, + 356, + 19, + 99 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1442, + "bbox": [ + 918, + 358, + 42, + 97 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 348, + "bbox": [ + 989, + 389, + 28, + 15 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 56, + "bbox": [ + 986, + 395, + 7, + 11 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 382, + "bbox": [ + 1334, + 391, + 27, + 18 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 236, + "bbox": [ + 1312, + 392, + 19, + 14 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 386, + "bbox": [ + 1256, + 389, + 26, + 17 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 740, + "bbox": [ + 1205, + 382, + 31, + 28 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 94, + "bbox": [ + 1163, + 392, + 12, + 11 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 664, + "bbox": [ + 1069, + 381, + 28, + 29 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 111, + "bbox": [ + 910, + 383, + 13, + 10 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 4516, + "bbox": [ + 773, + 380, + 81, + 68 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 4349, + "bbox": [ + 699, + 374, + 83, + 84 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 2941, + "bbox": [ + 658, + 386, + 65, + 78 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2425, + "bbox": [ + 406, + 373, + 123, + 97 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 30362, + "bbox": [ + 424, + 369, + 262, + 154 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 55208, + "bbox": [ + 1724, + 261, + 313, + 231 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 2197, + "bbox": [ + 912, + 395, + 49, + 79 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1413, + "bbox": [ + 1113, + 391, + 65, + 39 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 480, + "bbox": [ + 1400, + 393, + 43, + 24 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 873, + "bbox": [ + 1590, + 383, + 32, + 54 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 360, + "bbox": [ + 1611, + 407, + 13, + 37 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_049298_gtFine_panoptic.png", + "image_id": "frankfurt_000001_049298", + "segments_info": [ + { + "area": 743371, + "bbox": [ + 6, + 423, + 2037, + 556 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 56032, + "bbox": [ + 6, + 420, + 2037, + 157 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 427188, + "bbox": [ + 432, + 5, + 1611, + 478 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 54144, + "bbox": [ + 16, + 5, + 1903, + 628 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1981, + "bbox": [ + 206, + 5, + 1171, + 389 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4890, + "bbox": [ + 590, + 244, + 787, + 192 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 317757, + "bbox": [ + 6, + 5, + 1145, + 481 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 198, + "bbox": [ + 565, + 419, + 32, + 15 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 67586, + "bbox": [ + 701, + 5, + 440, + 274 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 520, + "bbox": [ + 1124, + 409, + 34, + 25 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 151, + "bbox": [ + 1126, + 393, + 12, + 22 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1136, + "bbox": [ + 1261, + 375, + 37, + 73 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 755, + "bbox": [ + 1315, + 377, + 26, + 44 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 610, + "bbox": [ + 1351, + 369, + 23, + 50 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 522, + "bbox": [ + 490, + 401, + 21, + 49 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 367, + "bbox": [ + 553, + 405, + 14, + 42 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 706, + "bbox": [ + 1088, + 409, + 37, + 22 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 114, + "bbox": [ + 927, + 413, + 14, + 10 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 282, + "bbox": [ + 858, + 412, + 29, + 12 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 393, + "bbox": [ + 902, + 407, + 26, + 17 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 563, + "bbox": [ + 960, + 406, + 30, + 24 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1306, + "bbox": [ + 700, + 389, + 52, + 42 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1330, + "bbox": [ + 629, + 404, + 64, + 31 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 850, + "bbox": [ + 511, + 407, + 47, + 29 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 466, + "bbox": [ + 458, + 405, + 54, + 22 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 383, + "bbox": [ + 491, + 423, + 34, + 25 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 5772, + "bbox": [ + 288, + 402, + 102, + 79 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1416, + "bbox": [ + 1284, + 405, + 39, + 59 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2575, + "bbox": [ + 1337, + 400, + 78, + 72 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 137, + "bbox": [ + 493, + 431, + 15, + 23 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 68, + "bbox": [ + 557, + 434, + 10, + 16 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_049698_gtFine_panoptic.png", + "image_id": "frankfurt_000001_049698", + "segments_info": [ + { + "area": 493695, + "bbox": [ + 6, + 395, + 2037, + 580 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 104993, + "bbox": [ + 6, + 389, + 1799, + 376 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 32869, + "bbox": [ + 245, + 8, + 1798, + 450 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 69217, + "bbox": [ + 47, + 20, + 1784, + 625 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 27285, + "bbox": [ + 16, + 5, + 1803, + 351 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 10898, + "bbox": [ + 808, + 147, + 989, + 215 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 519136, + "bbox": [ + 7, + 5, + 1976, + 453 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 42135, + "bbox": [ + 6, + 826, + 406, + 152 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 12130, + "bbox": [ + 999, + 10, + 1000, + 189 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 544, + "bbox": [ + 1803, + 363, + 15, + 53 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 586, + "bbox": [ + 148, + 419, + 19, + 49 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1546, + "bbox": [ + 185, + 368, + 31, + 102 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1502, + "bbox": [ + 176, + 390, + 32, + 81 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2237, + "bbox": [ + 208, + 377, + 39, + 93 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 707, + "bbox": [ + 116, + 380, + 22, + 97 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 209, + "bbox": [ + 117, + 393, + 11, + 34 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 2377, + "bbox": [ + 1918, + 650, + 72, + 66 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 4011, + "bbox": [ + 2006, + 283, + 37, + 171 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 20646, + "bbox": [ + 1812, + 236, + 90, + 454 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 12674, + "bbox": [ + 1806, + 233, + 228, + 539 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 74486, + "bbox": [ + 1754, + 182, + 289, + 631 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 99171, + "bbox": [ + 1439, + 137, + 253, + 716 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 11562, + "bbox": [ + 1064, + 227, + 215, + 408 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 22340, + "bbox": [ + 1136, + 285, + 96, + 364 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 73225, + "bbox": [ + 909, + 180, + 231, + 597 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 1823, + "bbox": [ + 1768, + 415, + 47, + 64 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3143, + "bbox": [ + 1279, + 376, + 77, + 54 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 6214, + "bbox": [ + 1220, + 361, + 72, + 118 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 28727, + "bbox": [ + 731, + 357, + 233, + 154 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 4592, + "bbox": [ + 1417, + 381, + 76, + 83 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 131, + "bbox": [ + 1680, + 377, + 11, + 20 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1235, + "bbox": [ + 6, + 425, + 33, + 61 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_049770_gtFine_panoptic.png", + "image_id": "frankfurt_000001_049770", + "segments_info": [ + { + "area": 570221, + "bbox": [ + 6, + 406, + 2037, + 569 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 72200, + "bbox": [ + 6, + 379, + 2037, + 385 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 41881, + "bbox": [ + 886, + 8, + 1157, + 405 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 274, + "bbox": [ + 1078, + 374, + 28, + 15 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 57856, + "bbox": [ + 49, + 22, + 1954, + 611 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 25024, + "bbox": [ + 16, + 5, + 1806, + 321 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 15695, + "bbox": [ + 809, + 147, + 1187, + 264 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 506735, + "bbox": [ + 7, + 5, + 1976, + 465 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 41838, + "bbox": [ + 6, + 826, + 409, + 152 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 11208, + "bbox": [ + 1000, + 10, + 999, + 184 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 576, + "bbox": [ + 1819, + 337, + 25, + 39 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 138, + "bbox": [ + 817, + 412, + 5, + 42 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 347, + "bbox": [ + 831, + 367, + 11, + 41 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 888, + "bbox": [ + 838, + 368, + 20, + 96 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1639, + "bbox": [ + 793, + 368, + 28, + 100 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 429, + "bbox": [ + 793, + 373, + 16, + 44 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 16784, + "bbox": [ + 131, + 248, + 129, + 359 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 13437, + "bbox": [ + 6, + 314, + 194, + 304 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 37106, + "bbox": [ + 197, + 249, + 154, + 412 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 20636, + "bbox": [ + 432, + 249, + 113, + 312 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 9200, + "bbox": [ + 583, + 428, + 251, + 269 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 44917, + "bbox": [ + 624, + 231, + 154, + 493 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 49844, + "bbox": [ + 801, + 200, + 307, + 566 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 60492, + "bbox": [ + 921, + 245, + 331, + 559 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 30000, + "bbox": [ + 1361, + 270, + 147, + 387 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 9394, + "bbox": [ + 1495, + 422, + 116, + 224 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 1387, + "bbox": [ + 1924, + 333, + 23, + 90 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 1846, + "bbox": [ + 1893, + 339, + 30, + 104 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 270, + "bbox": [ + 1108, + 379, + 12, + 33 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 230, + "bbox": [ + 1130, + 376, + 16, + 30 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 425, + "bbox": [ + 1842, + 370, + 28, + 40 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1146, + "bbox": [ + 1484, + 376, + 42, + 35 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 195, + "bbox": [ + 1512, + 376, + 22, + 21 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1548, + "bbox": [ + 1489, + 374, + 114, + 45 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 37824, + "bbox": [ + 1485, + 350, + 390, + 138 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1272, + "bbox": [ + 1188, + 377, + 43, + 72 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 15036, + "bbox": [ + 1202, + 359, + 169, + 109 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1001, + "bbox": [ + 1947, + 357, + 37, + 38 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 84, + "bbox": [ + 1106, + 394, + 12, + 20 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 244, + "bbox": [ + 1130, + 392, + 16, + 23 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 946, + "bbox": [ + 6, + 449, + 32, + 38 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_050149_gtFine_panoptic.png", + "image_id": "frankfurt_000001_050149", + "segments_info": [ + { + "area": 722240, + "bbox": [ + 6, + 392, + 2037, + 584 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 98477, + "bbox": [ + 6, + 422, + 836, + 338 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 47184, + "bbox": [ + 896, + 8, + 1147, + 398 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 777, + "bbox": [ + 1025, + 374, + 68, + 18 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 80262, + "bbox": [ + 75, + 5, + 1928, + 640 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 24972, + "bbox": [ + 16, + 5, + 1804, + 352 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 17873, + "bbox": [ + 809, + 147, + 1186, + 256 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 581761, + "bbox": [ + 7, + 5, + 1975, + 456 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 43270, + "bbox": [ + 6, + 384, + 1167, + 594 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 11619, + "bbox": [ + 999, + 10, + 1000, + 185 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1744, + "bbox": [ + 836, + 374, + 38, + 87 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 845, + "bbox": [ + 868, + 401, + 31, + 59 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1203, + "bbox": [ + 894, + 368, + 36, + 94 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1451, + "bbox": [ + 950, + 355, + 37, + 101 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1828, + "bbox": [ + 924, + 358, + 50, + 104 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1558, + "bbox": [ + 906, + 370, + 37, + 94 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 919, + "bbox": [ + 992, + 381, + 33, + 77 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 2142, + "bbox": [ + 966, + 359, + 51, + 102 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 626, + "bbox": [ + 1130, + 351, + 24, + 82 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 968, + "bbox": [ + 1081, + 362, + 32, + 70 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1598, + "bbox": [ + 1426, + 359, + 37, + 95 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 2075, + "bbox": [ + 1206, + 364, + 47, + 96 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1477, + "bbox": [ + 1270, + 366, + 40, + 93 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 1501, + "bbox": [ + 1404, + 356, + 40, + 99 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1900, + "bbox": [ + 19, + 386, + 41, + 91 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 853, + "bbox": [ + 61, + 415, + 35, + 60 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 2302, + "bbox": [ + 1094, + 361, + 53, + 103 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 809, + "bbox": [ + 1324, + 351, + 40, + 61 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2496, + "bbox": [ + 1326, + 340, + 65, + 112 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 3268, + "bbox": [ + 1639, + 338, + 78, + 128 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 3311, + "bbox": [ + 1830, + 343, + 75, + 117 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 1760, + "bbox": [ + 2011, + 336, + 32, + 122 + ], + "category_id": 25, + "id": 25005, + "iscrowd": 0 + }, + { + "area": 1856, + "bbox": [ + 291, + 377, + 54, + 95 + ], + "category_id": 25, + "id": 25006, + "iscrowd": 0 + }, + { + "area": 5033, + "bbox": [ + 725, + 382, + 98, + 62 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3542, + "bbox": [ + 652, + 391, + 78, + 64 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3138, + "bbox": [ + 485, + 394, + 100, + 64 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3218, + "bbox": [ + 1961, + 390, + 82, + 80 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3756, + "bbox": [ + 1063, + 405, + 112, + 67 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 6471, + "bbox": [ + 1789, + 390, + 152, + 85 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 707, + "bbox": [ + 1281, + 398, + 112, + 76 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 6317, + "bbox": [ + 1284, + 395, + 138, + 82 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 6192, + "bbox": [ + 1600, + 394, + 143, + 82 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 3331, + "bbox": [ + 288, + 401, + 77, + 78 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_050686_gtFine_panoptic.png", + "image_id": "frankfurt_000001_050686", + "segments_info": [ + { + "area": 586916, + "bbox": [ + 6, + 399, + 2037, + 580 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 20240, + "bbox": [ + 557, + 410, + 1334, + 215 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 157884, + "bbox": [ + 16, + 5, + 1935, + 437 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 6706, + "bbox": [ + 1446, + 391, + 488, + 45 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 45675, + "bbox": [ + 501, + 5, + 1494, + 584 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 28664, + "bbox": [ + 1455, + 19, + 207, + 174 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 17999, + "bbox": [ + 623, + 190, + 1417, + 247 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 320423, + "bbox": [ + 185, + 5, + 1858, + 426 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 63358, + "bbox": [ + 585, + 5, + 920, + 246 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 230, + "bbox": [ + 1840, + 376, + 8, + 46 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 510, + "bbox": [ + 1795, + 373, + 18, + 50 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 229, + "bbox": [ + 1763, + 386, + 14, + 37 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 501, + "bbox": [ + 1820, + 376, + 20, + 49 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 259, + "bbox": [ + 1231, + 390, + 22, + 19 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 325, + "bbox": [ + 1280, + 390, + 30, + 23 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 120, + "bbox": [ + 1252, + 389, + 28, + 8 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 761, + "bbox": [ + 1246, + 393, + 37, + 25 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 519, + "bbox": [ + 1296, + 393, + 29, + 22 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2033, + "bbox": [ + 1393, + 386, + 56, + 43 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2014, + "bbox": [ + 1503, + 389, + 57, + 42 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 18355, + "bbox": [ + 1889, + 357, + 154, + 160 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1350, + "bbox": [ + 805, + 382, + 44, + 37 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 3357, + "bbox": [ + 577, + 383, + 87, + 52 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 359019, + "bbox": [ + 6, + 46, + 576, + 868 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_051516_gtFine_panoptic.png", + "image_id": "frankfurt_000001_051516", + "segments_info": [ + { + "area": 497525, + "bbox": [ + 6, + 557, + 2037, + 422 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 248995, + "bbox": [ + 6, + 474, + 2037, + 483 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 29175, + "bbox": [ + 1684, + 439, + 359, + 146 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 34493, + "bbox": [ + 1685, + 338, + 358, + 109 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 28956, + "bbox": [ + 42, + 17, + 1407, + 571 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2650, + "bbox": [ + 136, + 193, + 50, + 67 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 10932, + "bbox": [ + 144, + 143, + 1458, + 163 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 996664, + "bbox": [ + 6, + 5, + 2037, + 599 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2307, + "bbox": [ + 1083, + 375, + 45, + 93 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 3276, + "bbox": [ + 1116, + 358, + 46, + 107 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_051737_gtFine_panoptic.png", + "image_id": "frankfurt_000001_051737", + "segments_info": [ + { + "area": 656654, + "bbox": [ + 6, + 455, + 1811, + 524 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 192661, + "bbox": [ + 6, + 455, + 2037, + 502 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 785902, + "bbox": [ + 6, + 5, + 2037, + 639 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 18784, + "bbox": [ + 7, + 40, + 1387, + 486 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 6293, + "bbox": [ + 743, + 12, + 620, + 406 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 21545, + "bbox": [ + 15, + 15, + 1399, + 401 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 32539, + "bbox": [ + 798, + 223, + 431, + 240 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 69953, + "bbox": [ + 850, + 7, + 390, + 331 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 237, + "bbox": [ + 1095, + 439, + 19, + 21 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 313, + "bbox": [ + 1196, + 427, + 12, + 35 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 177, + "bbox": [ + 1186, + 434, + 7, + 27 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 219, + "bbox": [ + 1172, + 435, + 10, + 28 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 355, + "bbox": [ + 1212, + 423, + 12, + 38 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 271, + "bbox": [ + 1228, + 425, + 11, + 37 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 421, + "bbox": [ + 1340, + 415, + 12, + 63 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1275, + "bbox": [ + 511, + 407, + 34, + 79 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 310, + "bbox": [ + 487, + 414, + 12, + 67 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1537, + "bbox": [ + 471, + 404, + 32, + 89 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1385, + "bbox": [ + 447, + 410, + 29, + 81 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1583, + "bbox": [ + 412, + 405, + 30, + 88 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 2516, + "bbox": [ + 1243, + 377, + 36, + 145 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 312, + "bbox": [ + 1300, + 417, + 18, + 40 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 3113, + "bbox": [ + 1303, + 385, + 43, + 134 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 10646, + "bbox": [ + 1348, + 344, + 78, + 216 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 14692, + "bbox": [ + 1441, + 310, + 97, + 256 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 10801, + "bbox": [ + 1574, + 333, + 68, + 229 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 169, + "bbox": [ + 1055, + 446, + 15, + 12 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 178, + "bbox": [ + 1025, + 448, + 19, + 11 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 326, + "bbox": [ + 1074, + 443, + 24, + 17 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 254, + "bbox": [ + 1106, + 440, + 15, + 22 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 150, + "bbox": [ + 1119, + 438, + 15, + 25 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 749, + "bbox": [ + 1125, + 436, + 38, + 28 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 181, + "bbox": [ + 1004, + 446, + 18, + 13 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 710, + "bbox": [ + 943, + 441, + 33, + 27 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 975, + "bbox": [ + 913, + 436, + 34, + 34 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 3131, + "bbox": [ + 827, + 428, + 66, + 59 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 18904, + "bbox": [ + 612, + 394, + 217, + 115 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_051807_gtFine_panoptic.png", + "image_id": "frankfurt_000001_051807", + "segments_info": [ + { + "area": 817972, + "bbox": [ + 6, + 433, + 2037, + 546 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 59319, + "bbox": [ + 6, + 442, + 2037, + 205 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 643694, + "bbox": [ + 6, + 5, + 2037, + 537 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1171, + "bbox": [ + 488, + 435, + 123, + 46 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 40105, + "bbox": [ + 141, + 5, + 1733, + 592 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 5964, + "bbox": [ + 1549, + 169, + 80, + 112 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 30200, + "bbox": [ + 27, + 5, + 2016, + 390 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 75867, + "bbox": [ + 321, + 101, + 990, + 365 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 57176, + "bbox": [ + 655, + 5, + 354, + 304 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 68, + "bbox": [ + 889, + 420, + 19, + 7 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 118, + "bbox": [ + 991, + 416, + 7, + 31 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 210, + "bbox": [ + 1003, + 414, + 10, + 34 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 205, + "bbox": [ + 975, + 414, + 14, + 25 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 369, + "bbox": [ + 1024, + 408, + 12, + 47 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 760, + "bbox": [ + 1038, + 405, + 19, + 55 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 484, + "bbox": [ + 1059, + 409, + 17, + 48 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 687, + "bbox": [ + 1079, + 405, + 19, + 52 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1028, + "bbox": [ + 1190, + 403, + 33, + 72 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1935, + "bbox": [ + 1244, + 393, + 40, + 95 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1866, + "bbox": [ + 1288, + 392, + 47, + 95 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 9850, + "bbox": [ + 1544, + 349, + 80, + 218 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 10045, + "bbox": [ + 1631, + 338, + 80, + 229 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 11215, + "bbox": [ + 1690, + 311, + 78, + 264 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 487, + "bbox": [ + 382, + 401, + 26, + 34 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 393, + "bbox": [ + 359, + 405, + 23, + 26 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 248, + "bbox": [ + 777, + 427, + 19, + 14 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 310, + "bbox": [ + 795, + 427, + 25, + 14 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1138, + "bbox": [ + 917, + 419, + 63, + 42 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 681, + "bbox": [ + 855, + 425, + 39, + 24 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 238, + "bbox": [ + 893, + 422, + 21, + 25 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 55, + "bbox": [ + 901, + 422, + 28, + 22 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 174, + "bbox": [ + 902, + 424, + 12, + 28 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 201, + "bbox": [ + 909, + 419, + 32, + 35 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 81, + "bbox": [ + 914, + 420, + 25, + 34 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 263, + "bbox": [ + 913, + 422, + 25, + 32 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 308, + "bbox": [ + 711, + 425, + 17, + 29 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 385, + "bbox": [ + 699, + 424, + 19, + 33 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 597, + "bbox": [ + 676, + 424, + 30, + 33 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 719, + "bbox": [ + 660, + 424, + 27, + 39 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 2534, + "bbox": [ + 602, + 417, + 66, + 51 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 6077, + "bbox": [ + 390, + 419, + 109, + 80 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 13861, + "bbox": [ + 229, + 428, + 192, + 92 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 939, + "bbox": [ + 951, + 424, + 62, + 41 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_052120_gtFine_panoptic.png", + "image_id": "frankfurt_000001_052120", + "segments_info": [ + { + "area": 772310, + "bbox": [ + 6, + 412, + 2036, + 567 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 49521, + "bbox": [ + 6, + 393, + 1241, + 252 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 534247, + "bbox": [ + 6, + 5, + 2037, + 525 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1525, + "bbox": [ + 958, + 407, + 115, + 18 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 4075, + "bbox": [ + 670, + 204, + 504, + 232 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 224, + "bbox": [ + 1003, + 303, + 79, + 72 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2276, + "bbox": [ + 680, + 269, + 682, + 96 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 202296, + "bbox": [ + 235, + 5, + 1470, + 512 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4596, + "bbox": [ + 1294, + 461, + 295, + 97 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 30713, + "bbox": [ + 774, + 6, + 297, + 195 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 245, + "bbox": [ + 686, + 386, + 25, + 17 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 83, + "bbox": [ + 1280, + 368, + 12, + 10 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 85, + "bbox": [ + 967, + 382, + 9, + 11 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 302, + "bbox": [ + 515, + 410, + 23, + 23 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1254, + "bbox": [ + 653, + 378, + 28, + 69 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1768, + "bbox": [ + 544, + 371, + 43, + 60 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3010, + "bbox": [ + 401, + 368, + 44, + 119 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2597, + "bbox": [ + 435, + 384, + 41, + 104 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1680, + "bbox": [ + 472, + 378, + 41, + 65 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 292, + "bbox": [ + 1056, + 374, + 11, + 36 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 37407, + "bbox": [ + 1377, + 299, + 295, + 224 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 5635, + "bbox": [ + 858, + 387, + 98, + 74 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3506, + "bbox": [ + 1087, + 386, + 83, + 52 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2923, + "bbox": [ + 1226, + 378, + 66, + 82 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 5272, + "bbox": [ + 1264, + 373, + 94, + 98 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 6044, + "bbox": [ + 1320, + 365, + 78, + 130 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 76271, + "bbox": [ + 1580, + 319, + 420, + 304 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 44509, + "bbox": [ + 1880, + 295, + 163, + 386 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1111, + "bbox": [ + 676, + 396, + 60, + 37 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 4073, + "bbox": [ + 484, + 422, + 102, + 77 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_052594_gtFine_panoptic.png", + "image_id": "frankfurt_000001_052594", + "segments_info": [ + { + "area": 810895, + "bbox": [ + 6, + 487, + 2037, + 492 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 94738, + "bbox": [ + 6, + 401, + 2037, + 139 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 550209, + "bbox": [ + 6, + 5, + 2037, + 466 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3965, + "bbox": [ + 6, + 439, + 434, + 71 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 14545, + "bbox": [ + 11, + 27, + 1968, + 502 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4400, + "bbox": [ + 8, + 195, + 1344, + 198 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 110878, + "bbox": [ + 6, + 8, + 1884, + 460 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 29314, + "bbox": [ + 859, + 8, + 1184, + 196 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 4686, + "bbox": [ + 202, + 414, + 151, + 90 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 189, + "bbox": [ + 1386, + 382, + 9, + 29 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 322, + "bbox": [ + 1394, + 381, + 13, + 30 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1070, + "bbox": [ + 1411, + 382, + 25, + 70 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 210, + "bbox": [ + 1301, + 378, + 14, + 31 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1296, + "bbox": [ + 1305, + 384, + 30, + 73 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1287, + "bbox": [ + 1338, + 387, + 31, + 67 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 155, + "bbox": [ + 1137, + 387, + 7, + 37 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 422, + "bbox": [ + 1125, + 384, + 15, + 41 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 81, + "bbox": [ + 1692, + 376, + 10, + 16 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 255, + "bbox": [ + 1683, + 373, + 12, + 32 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 87, + "bbox": [ + 1656, + 367, + 12, + 16 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 98, + "bbox": [ + 1662, + 370, + 9, + 33 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 293, + "bbox": [ + 1639, + 368, + 17, + 32 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 581, + "bbox": [ + 1667, + 365, + 19, + 44 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 909, + "bbox": [ + 1647, + 382, + 21, + 59 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 21190, + "bbox": [ + 1391, + 251, + 165, + 417 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 44513, + "bbox": [ + 1400, + 272, + 233, + 426 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 328, + "bbox": [ + 1029, + 393, + 17, + 32 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 383, + "bbox": [ + 1005, + 392, + 14, + 33 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 200, + "bbox": [ + 883, + 396, + 13, + 34 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 235, + "bbox": [ + 891, + 397, + 13, + 27 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 164, + "bbox": [ + 902, + 398, + 11, + 27 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 802, + "bbox": [ + 910, + 395, + 25, + 59 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 1609, + "bbox": [ + 735, + 379, + 39, + 82 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 670, + "bbox": [ + 725, + 406, + 17, + 59 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 1197, + "bbox": [ + 681, + 398, + 30, + 67 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 2935, + "bbox": [ + 640, + 368, + 48, + 117 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 2880, + "bbox": [ + 586, + 362, + 49, + 123 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 163, + "bbox": [ + 523, + 403, + 15, + 28 + ], + "category_id": 24, + "id": 24028, + "iscrowd": 0 + }, + { + "area": 502, + "bbox": [ + 286, + 393, + 20, + 39 + ], + "category_id": 24, + "id": 24029, + "iscrowd": 0 + }, + { + "area": 24375, + "bbox": [ + 893, + 277, + 140, + 368 + ], + "category_id": 24, + "id": 24030, + "iscrowd": 0 + }, + { + "area": 1324, + "bbox": [ + 520, + 395, + 47, + 63 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1633, + "bbox": [ + 430, + 371, + 47, + 102 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 4816, + "bbox": [ + 93, + 344, + 91, + 154 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 2665, + "bbox": [ + 66, + 416, + 58, + 104 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 723, + "bbox": [ + 1328, + 389, + 60, + 25 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 371, + "bbox": [ + 1610, + 391, + 75, + 14 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 40708, + "bbox": [ + 1662, + 344, + 329, + 165 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1198, + "bbox": [ + 523, + 430, + 37, + 54 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 966, + "bbox": [ + 434, + 408, + 46, + 76 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 4687, + "bbox": [ + 201, + 418, + 121, + 89 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 4377, + "bbox": [ + 100, + 409, + 114, + 101 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2799, + "bbox": [ + 46, + 449, + 92, + 76 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_053102_gtFine_panoptic.png", + "image_id": "frankfurt_000001_053102", + "segments_info": [ + { + "area": 845189, + "bbox": [ + 6, + 488, + 2037, + 491 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 100845, + "bbox": [ + 6, + 398, + 2037, + 144 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 574759, + "bbox": [ + 6, + 5, + 2037, + 469 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2999, + "bbox": [ + 6, + 441, + 432, + 73 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 16819, + "bbox": [ + 10, + 27, + 1971, + 504 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3745, + "bbox": [ + 8, + 196, + 1343, + 176 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 110485, + "bbox": [ + 6, + 5, + 1886, + 452 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 29581, + "bbox": [ + 857, + 8, + 1186, + 197 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3081, + "bbox": [ + 273, + 428, + 80, + 73 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 292, + "bbox": [ + 1776, + 367, + 14, + 29 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 484, + "bbox": [ + 1719, + 363, + 17, + 39 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 424, + "bbox": [ + 1700, + 365, + 16, + 41 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 344, + "bbox": [ + 1686, + 371, + 12, + 38 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 286, + "bbox": [ + 1711, + 375, + 12, + 32 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 169, + "bbox": [ + 1762, + 375, + 9, + 21 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 379, + "bbox": [ + 1656, + 370, + 17, + 39 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 510, + "bbox": [ + 1632, + 379, + 22, + 36 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 284, + "bbox": [ + 1566, + 368, + 18, + 29 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 123, + "bbox": [ + 1000, + 395, + 12, + 14 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 378, + "bbox": [ + 1018, + 392, + 18, + 36 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 197, + "bbox": [ + 977, + 398, + 8, + 27 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 61, + "bbox": [ + 931, + 397, + 6, + 30 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 422, + "bbox": [ + 918, + 393, + 14, + 38 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 399, + "bbox": [ + 931, + 397, + 17, + 36 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 226, + "bbox": [ + 951, + 400, + 9, + 33 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 571, + "bbox": [ + 956, + 386, + 18, + 45 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 183, + "bbox": [ + 882, + 392, + 15, + 52 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 588, + "bbox": [ + 899, + 395, + 19, + 49 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 983, + "bbox": [ + 801, + 389, + 28, + 60 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 689, + "bbox": [ + 785, + 395, + 22, + 55 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 1146, + "bbox": [ + 740, + 389, + 26, + 71 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 1002, + "bbox": [ + 605, + 392, + 27, + 71 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 611, + "bbox": [ + 268, + 390, + 21, + 49 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 625, + "bbox": [ + 1070, + 392, + 25, + 50 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 2085, + "bbox": [ + 1094, + 371, + 35, + 98 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 2286, + "bbox": [ + 1124, + 375, + 37, + 94 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 1686, + "bbox": [ + 1161, + 371, + 35, + 95 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 1000, + "bbox": [ + 860, + 387, + 35, + 70 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1929, + "bbox": [ + 192, + 367, + 58, + 92 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 3729, + "bbox": [ + 73, + 346, + 80, + 107 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 2995, + "bbox": [ + 235, + 389, + 40, + 125 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 2346, + "bbox": [ + 82, + 416, + 64, + 102 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 1241, + "bbox": [ + 1580, + 376, + 80, + 30 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 390, + "bbox": [ + 1670, + 379, + 30, + 26 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 52365, + "bbox": [ + 1237, + 367, + 488, + 150 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 531, + "bbox": [ + 861, + 419, + 30, + 44 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 4337, + "bbox": [ + 21, + 414, + 148, + 106 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 3710, + "bbox": [ + 152, + 397, + 78, + 117 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 4940, + "bbox": [ + 180, + 427, + 120, + 88 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2420, + "bbox": [ + 73, + 460, + 88, + 63 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_054077_gtFine_panoptic.png", + "image_id": "frankfurt_000001_054077", + "segments_info": [ + { + "area": 705701, + "bbox": [ + 6, + 492, + 2037, + 487 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 198305, + "bbox": [ + 6, + 455, + 2037, + 180 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 800763, + "bbox": [ + 6, + 5, + 2037, + 477 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 54508, + "bbox": [ + 137, + 11, + 1870, + 604 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 23964, + "bbox": [ + 58, + 51, + 1376, + 269 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 15773, + "bbox": [ + 932, + 11, + 1035, + 346 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 4008, + "bbox": [ + 1790, + 419, + 212, + 72 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1342, + "bbox": [ + 1873, + 387, + 34, + 62 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1167, + "bbox": [ + 1743, + 373, + 31, + 123 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2228, + "bbox": [ + 1729, + 382, + 40, + 114 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2606, + "bbox": [ + 1580, + 376, + 36, + 101 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 3809, + "bbox": [ + 861, + 359, + 69, + 131 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1622, + "bbox": [ + 913, + 344, + 72, + 149 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 3796, + "bbox": [ + 934, + 343, + 51, + 153 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 28868, + "bbox": [ + 1198, + 393, + 347, + 130 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 4676, + "bbox": [ + 1636, + 420, + 114, + 79 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 2268, + "bbox": [ + 1882, + 419, + 69, + 72 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 4458, + "bbox": [ + 1790, + 423, + 113, + 73 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_054219_gtFine_panoptic.png", + "image_id": "frankfurt_000001_054219", + "segments_info": [ + { + "area": 618228, + "bbox": [ + 6, + 438, + 1879, + 541 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 52935, + "bbox": [ + 6, + 450, + 1471, + 216 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 464513, + "bbox": [ + 15, + 5, + 2028, + 472 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 40355, + "bbox": [ + 6, + 17, + 2001, + 596 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 11425, + "bbox": [ + 60, + 196, + 1507, + 98 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 27523, + "bbox": [ + 14, + 19, + 1864, + 313 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 144273, + "bbox": [ + 17, + 5, + 1823, + 384 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1712, + "bbox": [ + 1000, + 368, + 39, + 99 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1602, + "bbox": [ + 1124, + 368, + 28, + 82 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1200, + "bbox": [ + 1255, + 370, + 20, + 80 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 4443, + "bbox": [ + 1267, + 322, + 53, + 204 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 3300, + "bbox": [ + 1291, + 343, + 45, + 186 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 9701, + "bbox": [ + 1307, + 321, + 76, + 226 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 979, + "bbox": [ + 1465, + 307, + 51, + 103 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 4686, + "bbox": [ + 1376, + 329, + 52, + 176 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 8441, + "bbox": [ + 1411, + 296, + 94, + 251 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 535, + "bbox": [ + 555, + 389, + 20, + 36 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 442, + "bbox": [ + 499, + 384, + 34, + 28 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 530, + "bbox": [ + 534, + 381, + 20, + 38 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 903, + "bbox": [ + 341, + 392, + 23, + 46 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 1701, + "bbox": [ + 243, + 335, + 36, + 187 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1852, + "bbox": [ + 295, + 373, + 33, + 172 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 8474, + "bbox": [ + 253, + 346, + 64, + 212 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 3636, + "bbox": [ + 57, + 360, + 35, + 161 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 1162, + "bbox": [ + 1348, + 332, + 39, + 172 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 4319, + "bbox": [ + 103, + 354, + 91, + 110 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 232008, + "bbox": [ + 1457, + 150, + 586, + 577 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 43221, + "bbox": [ + 1933, + 437, + 110, + 520 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 32883, + "bbox": [ + 703, + 379, + 289, + 152 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 22297, + "bbox": [ + 303, + 405, + 311, + 99 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1432, + "bbox": [ + 24, + 409, + 197, + 46 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1199, + "bbox": [ + 1299, + 420, + 87, + 83 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 8131, + "bbox": [ + 1380, + 378, + 93, + 192 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 3409, + "bbox": [ + 117, + 416, + 105, + 103 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 4190, + "bbox": [ + 25, + 430, + 121, + 95 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_054415_gtFine_panoptic.png", + "image_id": "frankfurt_000001_054415", + "segments_info": [ + { + "area": 733061, + "bbox": [ + 6, + 405, + 2037, + 574 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 79687, + "bbox": [ + 6, + 393, + 1636, + 260 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 461691, + "bbox": [ + 8, + 5, + 2035, + 417 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 30209, + "bbox": [ + 49, + 22, + 1847, + 571 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 22710, + "bbox": [ + 752, + 134, + 1160, + 234 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 81778, + "bbox": [ + 517, + 169, + 1091, + 266 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 35268, + "bbox": [ + 1305, + 15, + 429, + 164 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 412, + "bbox": [ + 1012, + 397, + 39, + 30 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1357, + "bbox": [ + 1498, + 354, + 45, + 133 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2470, + "bbox": [ + 1484, + 367, + 51, + 120 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 446, + "bbox": [ + 1549, + 363, + 13, + 95 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1242, + "bbox": [ + 1549, + 367, + 27, + 114 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2286, + "bbox": [ + 1548, + 363, + 54, + 127 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 164, + "bbox": [ + 1865, + 357, + 14, + 16 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 160, + "bbox": [ + 1654, + 357, + 16, + 17 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 272, + "bbox": [ + 900, + 380, + 11, + 35 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 131, + "bbox": [ + 1400, + 384, + 10, + 30 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 2848, + "bbox": [ + 1340, + 360, + 45, + 128 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 256, + "bbox": [ + 1041, + 375, + 15, + 26 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 685, + "bbox": [ + 994, + 362, + 12, + 71 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 383, + "bbox": [ + 983, + 376, + 12, + 55 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 633, + "bbox": [ + 860, + 357, + 26, + 92 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1128, + "bbox": [ + 815, + 357, + 22, + 92 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 2849, + "bbox": [ + 830, + 354, + 44, + 107 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 2381, + "bbox": [ + 792, + 359, + 32, + 106 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 3444, + "bbox": [ + 693, + 348, + 48, + 120 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 1889, + "bbox": [ + 656, + 352, + 42, + 118 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 279, + "bbox": [ + 539, + 432, + 36, + 48 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 1791, + "bbox": [ + 503, + 322, + 44, + 154 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 2773, + "bbox": [ + 512, + 341, + 35, + 146 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 5731, + "bbox": [ + 539, + 333, + 53, + 154 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 5568, + "bbox": [ + 96, + 300, + 93, + 221 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 5659, + "bbox": [ + 216, + 322, + 71, + 158 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 10752, + "bbox": [ + 142, + 318, + 88, + 210 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 923, + "bbox": [ + 1291, + 353, + 43, + 66 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 1028, + "bbox": [ + 957, + 360, + 36, + 70 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 583, + "bbox": [ + 730, + 356, + 26, + 102 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 171, + "bbox": [ + 1411, + 390, + 13, + 18 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 5667, + "bbox": [ + 1413, + 387, + 112, + 76 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 46057, + "bbox": [ + 1577, + 360, + 329, + 212 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 55406, + "bbox": [ + 1803, + 346, + 240, + 352 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 281, + "bbox": [ + 1389, + 390, + 18, + 22 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 388, + "bbox": [ + 1373, + 384, + 19, + 28 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 913, + "bbox": [ + 1321, + 373, + 33, + 41 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 79212, + "bbox": [ + 1003, + 352, + 357, + 271 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 3470, + "bbox": [ + 1422, + 348, + 91, + 58 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 642, + "bbox": [ + 934, + 395, + 32, + 38 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 380, + "bbox": [ + 964, + 403, + 20, + 43 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1333, + "bbox": [ + 720, + 403, + 46, + 66 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 509, + "bbox": [ + 1002, + 427, + 27, + 33 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_054640_gtFine_panoptic.png", + "image_id": "frankfurt_000001_054640", + "segments_info": [ + { + "area": 691935, + "bbox": [ + 6, + 430, + 2036, + 549 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 127590, + "bbox": [ + 6, + 425, + 2037, + 335 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 386085, + "bbox": [ + 9, + 5, + 2034, + 452 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 54135, + "bbox": [ + 175, + 23, + 1743, + 620 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 56045, + "bbox": [ + 106, + 5, + 1886, + 376 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 168800, + "bbox": [ + 66, + 103, + 1493, + 334 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 305, + "bbox": [ + 901, + 426, + 96, + 26 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 42849, + "bbox": [ + 1148, + 13, + 475, + 180 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 706, + "bbox": [ + 1283, + 406, + 46, + 30 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 6177, + "bbox": [ + 510, + 414, + 444, + 108 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 83, + "bbox": [ + 1277, + 403, + 10, + 16 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 130, + "bbox": [ + 1334, + 412, + 10, + 18 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 461, + "bbox": [ + 1030, + 392, + 18, + 43 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 573, + "bbox": [ + 987, + 389, + 24, + 47 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 283, + "bbox": [ + 967, + 398, + 20, + 35 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 211, + "bbox": [ + 856, + 400, + 13, + 24 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1586, + "bbox": [ + 821, + 378, + 35, + 65 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1394, + "bbox": [ + 786, + 379, + 30, + 62 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 4816, + "bbox": [ + 632, + 367, + 55, + 170 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 6719, + "bbox": [ + 591, + 368, + 67, + 177 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 2818, + "bbox": [ + 523, + 370, + 67, + 167 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 3472, + "bbox": [ + 540, + 401, + 46, + 138 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 118, + "bbox": [ + 415, + 389, + 19, + 22 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 4324, + "bbox": [ + 424, + 373, + 57, + 171 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 7054, + "bbox": [ + 458, + 367, + 66, + 177 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 711, + "bbox": [ + 368, + 362, + 53, + 174 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 4441, + "bbox": [ + 386, + 373, + 46, + 169 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 939, + "bbox": [ + 327, + 364, + 30, + 171 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 7395, + "bbox": [ + 341, + 367, + 72, + 180 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 7925, + "bbox": [ + 245, + 337, + 125, + 240 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 9683, + "bbox": [ + 251, + 352, + 77, + 234 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 194, + "bbox": [ + 1624, + 386, + 15, + 45 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 338, + "bbox": [ + 1637, + 386, + 16, + 47 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 149, + "bbox": [ + 1558, + 401, + 19, + 18 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 2172, + "bbox": [ + 1643, + 375, + 49, + 87 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 1837, + "bbox": [ + 1720, + 381, + 37, + 90 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 424, + "bbox": [ + 1790, + 379, + 23, + 51 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 1126, + "bbox": [ + 1809, + 379, + 23, + 71 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 314, + "bbox": [ + 1824, + 375, + 20, + 75 + ], + "category_id": 24, + "id": 24028, + "iscrowd": 0 + }, + { + "area": 92, + "bbox": [ + 1855, + 376, + 10, + 47 + ], + "category_id": 24, + "id": 24029, + "iscrowd": 0 + }, + { + "area": 180, + "bbox": [ + 1866, + 370, + 14, + 27 + ], + "category_id": 24, + "id": 24030, + "iscrowd": 0 + }, + { + "area": 2252, + "bbox": [ + 1832, + 371, + 32, + 98 + ], + "category_id": 24, + "id": 24031, + "iscrowd": 0 + }, + { + "area": 2833, + "bbox": [ + 1863, + 370, + 35, + 115 + ], + "category_id": 24, + "id": 24032, + "iscrowd": 0 + }, + { + "area": 183, + "bbox": [ + 1297, + 406, + 11, + 28 + ], + "category_id": 24, + "id": 24033, + "iscrowd": 0 + }, + { + "area": 3376, + "bbox": [ + 210, + 352, + 65, + 202 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 263, + "bbox": [ + 1340, + 405, + 17, + 43 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 487, + "bbox": [ + 1346, + 410, + 16, + 48 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1936, + "bbox": [ + 1370, + 406, + 62, + 89 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 19113, + "bbox": [ + 1392, + 401, + 200, + 119 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 64637, + "bbox": [ + 1000, + 376, + 325, + 245 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 7188, + "bbox": [ + 1354, + 352, + 117, + 125 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 167, + "bbox": [ + 988, + 416, + 23, + 30 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 101, + "bbox": [ + 970, + 419, + 22, + 28 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1200, + "bbox": [ + 709, + 430, + 65, + 36 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 5470, + "bbox": [ + 200, + 444, + 117, + 112 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 617, + "bbox": [ + 1561, + 411, + 39, + 35 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 134, + "bbox": [ + 1607, + 416, + 11, + 31 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 888, + "bbox": [ + 1609, + 409, + 47, + 73 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 908, + "bbox": [ + 1779, + 413, + 39, + 74 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 7719, + "bbox": [ + 764, + 417, + 149, + 106 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_054884_gtFine_panoptic.png", + "image_id": "frankfurt_000001_054884", + "segments_info": [ + { + "area": 761441, + "bbox": [ + 6, + 441, + 2037, + 538 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 25416, + "bbox": [ + 6, + 477, + 1661, + 173 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 329060, + "bbox": [ + 14, + 5, + 1835, + 488 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 21641, + "bbox": [ + 6, + 19, + 1681, + 586 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2200, + "bbox": [ + 525, + 265, + 712, + 125 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 253838, + "bbox": [ + 6, + 17, + 1844, + 481 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 33160, + "bbox": [ + 764, + 6, + 312, + 135 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 450, + "bbox": [ + 966, + 419, + 16, + 38 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 407, + "bbox": [ + 945, + 420, + 17, + 37 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1941, + "bbox": [ + 856, + 387, + 35, + 108 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 184, + "bbox": [ + 994, + 417, + 11, + 33 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 110, + "bbox": [ + 1131, + 416, + 13, + 15 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 772, + "bbox": [ + 262, + 333, + 41, + 71 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 11318, + "bbox": [ + 215, + 337, + 86, + 211 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 785, + "bbox": [ + 120, + 379, + 56, + 63 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 924, + "bbox": [ + 135, + 397, + 38, + 67 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1578, + "bbox": [ + 163, + 419, + 42, + 67 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1524, + "bbox": [ + 6, + 344, + 34, + 75 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 2192, + "bbox": [ + 893, + 381, + 44, + 112 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1785, + "bbox": [ + 293, + 367, + 35, + 101 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 3758, + "bbox": [ + 819, + 389, + 83, + 102 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 525, + "bbox": [ + 997, + 416, + 28, + 58 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 8555, + "bbox": [ + 1007, + 408, + 119, + 85 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 807, + "bbox": [ + 1130, + 411, + 38, + 52 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1141, + "bbox": [ + 1144, + 417, + 44, + 51 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3182, + "bbox": [ + 1168, + 417, + 71, + 55 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 116422, + "bbox": [ + 1664, + 286, + 379, + 425 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 9233, + "bbox": [ + 688, + 356, + 152, + 156 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 9802, + "bbox": [ + 702, + 394, + 105, + 143 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 102593, + "bbox": [ + 315, + 286, + 418, + 313 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 60909, + "bbox": [ + 1214, + 272, + 295, + 256 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 311, + "bbox": [ + 930, + 432, + 18, + 30 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1130, + "bbox": [ + 893, + 428, + 44, + 73 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 3484, + "bbox": [ + 1590, + 412, + 100, + 84 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1828, + "bbox": [ + 1495, + 411, + 62, + 79 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 3756, + "bbox": [ + 1530, + 409, + 68, + 95 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 950, + "bbox": [ + 283, + 451, + 38, + 73 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 16991, + "bbox": [ + 41, + 401, + 165, + 184 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_055062_gtFine_panoptic.png", + "image_id": "frankfurt_000001_055062", + "segments_info": [ + { + "area": 753814, + "bbox": [ + 6, + 487, + 2037, + 492 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 49680, + "bbox": [ + 6, + 434, + 1276, + 244 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 544980, + "bbox": [ + 6, + 5, + 2037, + 448 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 25091, + "bbox": [ + 47, + 7, + 1924, + 603 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 15795, + "bbox": [ + 14, + 5, + 1965, + 419 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 97691, + "bbox": [ + 6, + 13, + 1441, + 472 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 266, + "bbox": [ + 278, + 365, + 14, + 51 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1960, + "bbox": [ + 288, + 349, + 46, + 65 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2038, + "bbox": [ + 254, + 367, + 35, + 105 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1769, + "bbox": [ + 218, + 371, + 37, + 133 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1458, + "bbox": [ + 123, + 381, + 38, + 110 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3096, + "bbox": [ + 147, + 362, + 36, + 136 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 700, + "bbox": [ + 77, + 371, + 24, + 122 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 4654, + "bbox": [ + 95, + 343, + 50, + 158 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 905, + "bbox": [ + 515, + 365, + 34, + 60 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1176, + "bbox": [ + 490, + 370, + 29, + 75 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 715, + "bbox": [ + 469, + 352, + 25, + 97 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 2166, + "bbox": [ + 408, + 359, + 40, + 87 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1742, + "bbox": [ + 372, + 363, + 46, + 61 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 3510, + "bbox": [ + 442, + 340, + 43, + 112 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 148, + "bbox": [ + 682, + 390, + 9, + 37 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 1464, + "bbox": [ + 686, + 375, + 43, + 53 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 795, + "bbox": [ + 920, + 370, + 16, + 66 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 494, + "bbox": [ + 906, + 393, + 18, + 43 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 382, + "bbox": [ + 890, + 378, + 18, + 50 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 404, + "bbox": [ + 875, + 382, + 27, + 28 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 240, + "bbox": [ + 1000, + 371, + 34, + 78 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 2794, + "bbox": [ + 1000, + 362, + 41, + 122 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 1434, + "bbox": [ + 1107, + 378, + 22, + 99 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 249, + "bbox": [ + 1084, + 378, + 7, + 64 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 1843, + "bbox": [ + 1087, + 363, + 36, + 117 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 2111, + "bbox": [ + 1038, + 379, + 50, + 90 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 2434, + "bbox": [ + 1215, + 370, + 44, + 112 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 52, + "bbox": [ + 1447, + 363, + 8, + 8 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 237, + "bbox": [ + 1414, + 356, + 23, + 19 + ], + "category_id": 24, + "id": 24028, + "iscrowd": 0 + }, + { + "area": 1193, + "bbox": [ + 1343, + 362, + 33, + 54 + ], + "category_id": 24, + "id": 24029, + "iscrowd": 0 + }, + { + "area": 622, + "bbox": [ + 1599, + 348, + 25, + 48 + ], + "category_id": 24, + "id": 24030, + "iscrowd": 0 + }, + { + "area": 759, + "bbox": [ + 1617, + 367, + 26, + 40 + ], + "category_id": 24, + "id": 24031, + "iscrowd": 0 + }, + { + "area": 1257, + "bbox": [ + 1694, + 351, + 41, + 102 + ], + "category_id": 24, + "id": 24032, + "iscrowd": 0 + }, + { + "area": 2641, + "bbox": [ + 1678, + 359, + 41, + 98 + ], + "category_id": 24, + "id": 24033, + "iscrowd": 0 + }, + { + "area": 1200, + "bbox": [ + 1757, + 393, + 37, + 184 + ], + "category_id": 24, + "id": 24034, + "iscrowd": 0 + }, + { + "area": 2514, + "bbox": [ + 1786, + 311, + 38, + 165 + ], + "category_id": 24, + "id": 24035, + "iscrowd": 0 + }, + { + "area": 8305, + "bbox": [ + 1794, + 289, + 76, + 180 + ], + "category_id": 24, + "id": 24036, + "iscrowd": 0 + }, + { + "area": 656, + "bbox": [ + 975, + 376, + 27, + 61 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 724, + "bbox": [ + 1136, + 378, + 20, + 57 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2015, + "bbox": [ + 1618, + 452, + 107, + 106 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 5433, + "bbox": [ + 1161, + 373, + 161, + 75 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 47738, + "bbox": [ + 1310, + 368, + 392, + 165 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 897, + "bbox": [ + 1893, + 374, + 63, + 45 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 58732, + "bbox": [ + 1790, + 318, + 253, + 342 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 6823, + "bbox": [ + 184, + 403, + 149, + 111 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 27508, + "bbox": [ + 509, + 397, + 342, + 123 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 52895, + "bbox": [ + 259, + 398, + 344, + 220 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 998, + "bbox": [ + 969, + 395, + 36, + 52 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 552, + "bbox": [ + 1137, + 416, + 22, + 41 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 1944, + "bbox": [ + 1173, + 426, + 94, + 54 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 2798, + "bbox": [ + 1274, + 405, + 59, + 85 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_055172_gtFine_panoptic.png", + "image_id": "frankfurt_000001_055172", + "segments_info": [ + { + "area": 575146, + "bbox": [ + 6, + 602, + 2037, + 377 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 108750, + "bbox": [ + 6, + 518, + 2037, + 147 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 821449, + "bbox": [ + 6, + 5, + 2037, + 570 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19810, + "bbox": [ + 254, + 5, + 1348, + 592 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 17029, + "bbox": [ + 15, + 51, + 1610, + 151 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 26563, + "bbox": [ + 1092, + 289, + 137, + 398 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 21257, + "bbox": [ + 1237, + 303, + 123, + 375 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 15347, + "bbox": [ + 1198, + 387, + 118, + 297 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 16698, + "bbox": [ + 1367, + 316, + 164, + 349 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 20636, + "bbox": [ + 1350, + 327, + 122, + 340 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 878, + "bbox": [ + 1768, + 327, + 72, + 201 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 14905, + "bbox": [ + 1718, + 338, + 152, + 313 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 24005, + "bbox": [ + 1629, + 318, + 159, + 347 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 7893, + "bbox": [ + 773, + 306, + 121, + 383 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 34743, + "bbox": [ + 741, + 273, + 126, + 437 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 36003, + "bbox": [ + 612, + 297, + 153, + 443 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 4393, + "bbox": [ + 514, + 424, + 56, + 164 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1010, + "bbox": [ + 450, + 343, + 49, + 253 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 35715, + "bbox": [ + 397, + 284, + 141, + 414 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 9353, + "bbox": [ + 88, + 286, + 163, + 308 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 8905, + "bbox": [ + 189, + 401, + 114, + 201 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 19783, + "bbox": [ + 269, + 313, + 133, + 316 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 18561, + "bbox": [ + 92, + 409, + 156, + 277 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_055306_gtFine_panoptic.png", + "image_id": "frankfurt_000001_055306", + "segments_info": [ + { + "area": 530551, + "bbox": [ + 38, + 423, + 2005, + 556 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 333013, + "bbox": [ + 6, + 393, + 1705, + 584 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 663291, + "bbox": [ + 6, + 5, + 2037, + 584 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 23388, + "bbox": [ + 901, + 135, + 1142, + 505 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4348, + "bbox": [ + 340, + 247, + 1703, + 172 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 42285, + "bbox": [ + 1237, + 63, + 305, + 361 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 72, + "bbox": [ + 2030, + 28, + 13, + 9 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 337, + "bbox": [ + 1937, + 390, + 17, + 38 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 79, + "bbox": [ + 1878, + 376, + 10, + 11 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 426, + "bbox": [ + 1502, + 352, + 21, + 47 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 498, + "bbox": [ + 1492, + 360, + 23, + 32 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1607, + "bbox": [ + 1384, + 362, + 36, + 71 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 205, + "bbox": [ + 1434, + 356, + 16, + 62 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 152, + "bbox": [ + 1462, + 354, + 16, + 22 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1408, + "bbox": [ + 1438, + 356, + 34, + 80 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 218, + "bbox": [ + 1346, + 363, + 19, + 19 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 7964, + "bbox": [ + 1252, + 324, + 57, + 202 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 9431, + "bbox": [ + 1161, + 329, + 95, + 200 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 5578, + "bbox": [ + 1012, + 308, + 65, + 206 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 8571, + "bbox": [ + 893, + 296, + 86, + 222 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 11434, + "bbox": [ + 961, + 303, + 83, + 228 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 6964, + "bbox": [ + 1064, + 316, + 62, + 205 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 7613, + "bbox": [ + 1101, + 341, + 69, + 192 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 3979, + "bbox": [ + 757, + 367, + 64, + 120 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 1108, + "bbox": [ + 376, + 359, + 36, + 40 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 1315, + "bbox": [ + 239, + 352, + 40, + 45 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 718, + "bbox": [ + 257, + 342, + 27, + 101 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 1425, + "bbox": [ + 485, + 447, + 44, + 82 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 24362, + "bbox": [ + 516, + 253, + 116, + 393 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 23934, + "bbox": [ + 387, + 275, + 131, + 348 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 23111, + "bbox": [ + 254, + 273, + 115, + 346 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 36231, + "bbox": [ + 619, + 235, + 177, + 440 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 1407, + "bbox": [ + 1417, + 356, + 28, + 75 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 3713, + "bbox": [ + 1528, + 344, + 58, + 140 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 4627, + "bbox": [ + 1838, + 386, + 105, + 56 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 5113, + "bbox": [ + 1948, + 381, + 95, + 118 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 4173, + "bbox": [ + 1465, + 373, + 134, + 76 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 1959, + "bbox": [ + 1526, + 408, + 61, + 87 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1929, + "bbox": [ + 1967, + 408, + 76, + 69 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_055387_gtFine_panoptic.png", + "image_id": "frankfurt_000001_055387", + "segments_info": [ + { + "area": 714751, + "bbox": [ + 6, + 444, + 2036, + 535 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 60621, + "bbox": [ + 6, + 443, + 861, + 366 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 537851, + "bbox": [ + 6, + 5, + 2037, + 520 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 28665, + "bbox": [ + 13, + 27, + 2009, + 479 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 10737, + "bbox": [ + 537, + 191, + 1040, + 253 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 221513, + "bbox": [ + 7, + 5, + 1379, + 449 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 15729, + "bbox": [ + 1372, + 430, + 573, + 316 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 272, + "bbox": [ + 1062, + 389, + 15, + 27 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 527, + "bbox": [ + 1185, + 401, + 20, + 56 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 230, + "bbox": [ + 1131, + 412, + 16, + 20 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 661, + "bbox": [ + 1166, + 397, + 20, + 57 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 827, + "bbox": [ + 717, + 379, + 36, + 68 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 909, + "bbox": [ + 697, + 381, + 18, + 75 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 429, + "bbox": [ + 337, + 375, + 20, + 35 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 394, + "bbox": [ + 151, + 365, + 27, + 67 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 337, + "bbox": [ + 328, + 376, + 11, + 46 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1504, + "bbox": [ + 285, + 373, + 45, + 90 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 2148, + "bbox": [ + 125, + 369, + 47, + 103 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 7312, + "bbox": [ + 153, + 326, + 79, + 175 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 6331, + "bbox": [ + 242, + 332, + 59, + 171 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 844, + "bbox": [ + 416, + 363, + 25, + 102 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1213, + "bbox": [ + 479, + 359, + 34, + 63 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 700, + "bbox": [ + 462, + 359, + 29, + 55 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 888, + "bbox": [ + 542, + 359, + 29, + 56 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 413, + "bbox": [ + 523, + 359, + 24, + 55 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 1351, + "bbox": [ + 512, + 367, + 30, + 58 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 866, + "bbox": [ + 1424, + 386, + 34, + 45 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 633, + "bbox": [ + 1365, + 389, + 43, + 41 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 1681, + "bbox": [ + 1514, + 376, + 64, + 60 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 1398, + "bbox": [ + 1636, + 382, + 29, + 64 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 2511, + "bbox": [ + 1592, + 381, + 48, + 80 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 7457, + "bbox": [ + 1762, + 340, + 80, + 142 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 210, + "bbox": [ + 1202, + 409, + 32, + 16 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 532, + "bbox": [ + 1217, + 408, + 57, + 14 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4161, + "bbox": [ + 6, + 376, + 114, + 59 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 944, + "bbox": [ + 224, + 378, + 29, + 56 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 18699, + "bbox": [ + 420, + 365, + 229, + 141 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 2565, + "bbox": [ + 1192, + 390, + 106, + 112 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 1161, + "bbox": [ + 1197, + 441, + 47, + 68 + ], + "category_id": 32, + "id": 32002, + "iscrowd": 0 + }, + { + "area": 10570, + "bbox": [ + 1217, + 408, + 273, + 118 + ], + "category_id": 32, + "id": 32003, + "iscrowd": 0 + }, + { + "area": 12235, + "bbox": [ + 1285, + 411, + 156, + 150 + ], + "category_id": 32, + "id": 32004, + "iscrowd": 0 + }, + { + "area": 2522, + "bbox": [ + 1480, + 401, + 131, + 60 + ], + "category_id": 32, + "id": 32005, + "iscrowd": 0 + }, + { + "area": 1677, + "bbox": [ + 334, + 395, + 57, + 47 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 16827, + "bbox": [ + 1394, + 451, + 277, + 162 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 26742, + "bbox": [ + 1504, + 458, + 290, + 201 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 14105, + "bbox": [ + 1636, + 481, + 295, + 216 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 15634, + "bbox": [ + 1674, + 470, + 369, + 281 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 65458, + "bbox": [ + 1748, + 441, + 295, + 355 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_055538_gtFine_panoptic.png", + "image_id": "frankfurt_000001_055538", + "segments_info": [ + { + "area": 677336, + "bbox": [ + 6, + 490, + 2037, + 489 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 72343, + "bbox": [ + 6, + 451, + 1677, + 159 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 524482, + "bbox": [ + 6, + 5, + 2037, + 569 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 11494, + "bbox": [ + 1158, + 440, + 414, + 67 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 45040, + "bbox": [ + 117, + 5, + 1665, + 772 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8857, + "bbox": [ + 1242, + 92, + 176, + 219 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 277793, + "bbox": [ + 6, + 15, + 2006, + 562 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 11381, + "bbox": [ + 1972, + 27, + 71, + 216 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2482, + "bbox": [ + 1617, + 416, + 57, + 79 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1108, + "bbox": [ + 1340, + 400, + 40, + 38 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 874, + "bbox": [ + 1310, + 398, + 37, + 41 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 691, + "bbox": [ + 1287, + 406, + 42, + 37 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1442, + "bbox": [ + 1591, + 393, + 27, + 98 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 873, + "bbox": [ + 1544, + 406, + 28, + 83 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1663, + "bbox": [ + 1561, + 389, + 36, + 110 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 212, + "bbox": [ + 1510, + 387, + 24, + 31 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1271, + "bbox": [ + 1509, + 397, + 31, + 66 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1695, + "bbox": [ + 1486, + 386, + 24, + 112 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 934, + "bbox": [ + 1460, + 384, + 28, + 114 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 928, + "bbox": [ + 1413, + 387, + 35, + 50 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 3035, + "bbox": [ + 1429, + 389, + 57, + 109 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 553, + "bbox": [ + 1136, + 401, + 17, + 48 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 1367, + "bbox": [ + 972, + 400, + 31, + 101 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 6927, + "bbox": [ + 980, + 357, + 92, + 191 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 7354, + "bbox": [ + 893, + 341, + 91, + 206 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 4250, + "bbox": [ + 768, + 343, + 47, + 167 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 2252, + "bbox": [ + 546, + 383, + 79, + 170 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 7971, + "bbox": [ + 455, + 365, + 83, + 205 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 8086, + "bbox": [ + 529, + 351, + 95, + 223 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 12822, + "bbox": [ + 1930, + 305, + 113, + 232 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2346, + "bbox": [ + 1894, + 405, + 79, + 96 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 25135, + "bbox": [ + 1680, + 378, + 255, + 155 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 17795, + "bbox": [ + 1819, + 401, + 224, + 179 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_055603_gtFine_panoptic.png", + "image_id": "frankfurt_000001_055603", + "segments_info": [ + { + "area": 607316, + "bbox": [ + 6, + 495, + 2037, + 484 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 96991, + "bbox": [ + 6, + 532, + 2037, + 273 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 348009, + "bbox": [ + 6, + 5, + 2037, + 580 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 28979, + "bbox": [ + 49, + 491, + 690, + 136 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 52259, + "bbox": [ + 90, + 5, + 1809, + 741 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 193, + "bbox": [ + 1256, + 455, + 14, + 19 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 41161, + "bbox": [ + 193, + 58, + 1850, + 394 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 328763, + "bbox": [ + 6, + 5, + 2037, + 565 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 43161, + "bbox": [ + 1119, + 12, + 265, + 272 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3368, + "bbox": [ + 1923, + 351, + 55, + 102 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 144, + "bbox": [ + 1367, + 438, + 13, + 16 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 92, + "bbox": [ + 1387, + 446, + 12, + 9 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 106, + "bbox": [ + 1406, + 447, + 12, + 12 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 286, + "bbox": [ + 1417, + 444, + 19, + 22 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1452, + "bbox": [ + 1299, + 436, + 29, + 101 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1533, + "bbox": [ + 1329, + 427, + 47, + 115 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 523, + "bbox": [ + 1714, + 400, + 25, + 49 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 2674, + "bbox": [ + 1691, + 408, + 50, + 98 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 417, + "bbox": [ + 1623, + 424, + 47, + 72 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1762, + "bbox": [ + 1967, + 366, + 48, + 79 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 852, + "bbox": [ + 1844, + 386, + 31, + 76 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1031, + "bbox": [ + 1872, + 388, + 33, + 73 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 2179, + "bbox": [ + 1981, + 394, + 62, + 63 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1930, + "bbox": [ + 1828, + 404, + 49, + 59 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 148, + "bbox": [ + 1442, + 437, + 12, + 26 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 381, + "bbox": [ + 1448, + 437, + 21, + 26 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 13078, + "bbox": [ + 1152, + 368, + 123, + 280 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 13569, + "bbox": [ + 1098, + 367, + 88, + 273 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 734, + "bbox": [ + 762, + 436, + 33, + 47 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 423, + "bbox": [ + 730, + 441, + 32, + 35 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 211, + "bbox": [ + 719, + 452, + 25, + 26 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 1322, + "bbox": [ + 713, + 457, + 23, + 96 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 962, + "bbox": [ + 732, + 457, + 36, + 65 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 466, + "bbox": [ + 656, + 430, + 28, + 123 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 1665, + "bbox": [ + 646, + 442, + 30, + 121 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 1441, + "bbox": [ + 629, + 435, + 36, + 142 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 2327, + "bbox": [ + 572, + 428, + 47, + 148 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 4269, + "bbox": [ + 597, + 424, + 60, + 153 + ], + "category_id": 24, + "id": 24028, + "iscrowd": 0 + }, + { + "area": 1523, + "bbox": [ + 518, + 425, + 34, + 70 + ], + "category_id": 24, + "id": 24029, + "iscrowd": 0 + }, + { + "area": 5174, + "bbox": [ + 534, + 430, + 66, + 153 + ], + "category_id": 24, + "id": 24030, + "iscrowd": 0 + }, + { + "area": 505, + "bbox": [ + 343, + 422, + 23, + 37 + ], + "category_id": 24, + "id": 24031, + "iscrowd": 0 + }, + { + "area": 2026, + "bbox": [ + 342, + 447, + 52, + 59 + ], + "category_id": 24, + "id": 24032, + "iscrowd": 0 + }, + { + "area": 1725, + "bbox": [ + 307, + 452, + 46, + 57 + ], + "category_id": 24, + "id": 24033, + "iscrowd": 0 + }, + { + "area": 1444, + "bbox": [ + 428, + 447, + 41, + 52 + ], + "category_id": 24, + "id": 24034, + "iscrowd": 0 + }, + { + "area": 12947, + "bbox": [ + 1479, + 332, + 150, + 300 + ], + "category_id": 24, + "id": 24035, + "iscrowd": 0 + }, + { + "area": 19213, + "bbox": [ + 1499, + 311, + 169, + 332 + ], + "category_id": 24, + "id": 24036, + "iscrowd": 0 + }, + { + "area": 931, + "bbox": [ + 1269, + 444, + 28, + 81 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 200, + "bbox": [ + 1344, + 490, + 19, + 17 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 207, + "bbox": [ + 1324, + 490, + 15, + 19 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 59, + "bbox": [ + 1237, + 475, + 15, + 29 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 729, + "bbox": [ + 1240, + 474, + 34, + 30 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2806, + "bbox": [ + 1367, + 454, + 54, + 75 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2309, + "bbox": [ + 1076, + 449, + 156, + 115 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 3407, + "bbox": [ + 973, + 474, + 87, + 51 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 36835, + "bbox": [ + 717, + 446, + 265, + 183 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 744, + "bbox": [ + 1267, + 477, + 34, + 54 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 9560, + "bbox": [ + 1607, + 431, + 112, + 165 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_055709_gtFine_panoptic.png", + "image_id": "frankfurt_000001_055709", + "segments_info": [ + { + "area": 718108, + "bbox": [ + 6, + 421, + 2036, + 558 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 95829, + "bbox": [ + 6, + 420, + 2037, + 360 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 322351, + "bbox": [ + 8, + 5, + 2035, + 420 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 22553, + "bbox": [ + 6, + 386, + 376, + 166 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 29701, + "bbox": [ + 41, + 5, + 1841, + 627 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 156, + "bbox": [ + 1283, + 365, + 12, + 19 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 5435, + "bbox": [ + 1000, + 256, + 529, + 197 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 234280, + "bbox": [ + 32, + 5, + 2011, + 508 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 25083, + "bbox": [ + 1132, + 13, + 203, + 159 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1298, + "bbox": [ + 834, + 359, + 20, + 93 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 2528, + "bbox": [ + 682, + 395, + 55, + 76 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 2532, + "bbox": [ + 1952, + 333, + 54, + 73 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 99, + "bbox": [ + 1239, + 375, + 13, + 10 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 195, + "bbox": [ + 1535, + 357, + 17, + 16 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 815, + "bbox": [ + 1855, + 327, + 35, + 68 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1121, + "bbox": [ + 1680, + 337, + 32, + 70 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 595, + "bbox": [ + 1726, + 363, + 31, + 36 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1511, + "bbox": [ + 1749, + 343, + 40, + 56 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1465, + "bbox": [ + 1788, + 333, + 48, + 67 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1118, + "bbox": [ + 1907, + 366, + 37, + 45 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 2254, + "bbox": [ + 1805, + 353, + 63, + 69 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 4390, + "bbox": [ + 1824, + 355, + 93, + 135 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 14463, + "bbox": [ + 1443, + 305, + 89, + 280 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 13963, + "bbox": [ + 1545, + 265, + 152, + 160 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 233, + "bbox": [ + 1274, + 379, + 18, + 35 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 124, + "bbox": [ + 1135, + 373, + 11, + 18 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 534, + "bbox": [ + 1111, + 378, + 18, + 58 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 2811, + "bbox": [ + 561, + 327, + 44, + 166 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 2305, + "bbox": [ + 525, + 356, + 51, + 153 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 1068, + "bbox": [ + 368, + 322, + 52, + 84 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 1502, + "bbox": [ + 360, + 335, + 53, + 85 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 8293, + "bbox": [ + 115, + 283, + 120, + 180 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 1962, + "bbox": [ + 418, + 307, + 51, + 86 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 5059, + "bbox": [ + 417, + 362, + 60, + 138 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 4914, + "bbox": [ + 302, + 322, + 86, + 164 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 12541, + "bbox": [ + 37, + 302, + 84, + 257 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 9124, + "bbox": [ + 6, + 291, + 79, + 277 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 881, + "bbox": [ + 1078, + 371, + 31, + 60 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 3994, + "bbox": [ + 1566, + 455, + 97, + 78 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 3293, + "bbox": [ + 1661, + 463, + 89, + 70 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 969, + "bbox": [ + 866, + 365, + 31, + 57 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 5876, + "bbox": [ + 883, + 335, + 105, + 175 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 13424, + "bbox": [ + 585, + 297, + 105, + 255 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 360, + "bbox": [ + 1321, + 404, + 22, + 21 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1187, + "bbox": [ + 1342, + 393, + 61, + 32 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2871, + "bbox": [ + 1373, + 378, + 71, + 109 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 8033, + "bbox": [ + 1402, + 371, + 161, + 133 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1063, + "bbox": [ + 1272, + 389, + 52, + 36 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3337, + "bbox": [ + 1219, + 379, + 75, + 71 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 8914, + "bbox": [ + 1119, + 378, + 121, + 90 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2378, + "bbox": [ + 924, + 386, + 101, + 61 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2756, + "bbox": [ + 709, + 363, + 176, + 53 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 6199, + "bbox": [ + 717, + 382, + 121, + 65 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 674, + "bbox": [ + 466, + 381, + 40, + 20 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1298, + "bbox": [ + 475, + 378, + 87, + 68 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 912, + "bbox": [ + 864, + 402, + 43, + 48 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 10354, + "bbox": [ + 856, + 403, + 161, + 130 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 8416, + "bbox": [ + 580, + 425, + 107, + 183 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 10313, + "bbox": [ + 362, + 367, + 127, + 203 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 16228, + "bbox": [ + 265, + 389, + 131, + 202 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_056580_gtFine_panoptic.png", + "image_id": "frankfurt_000001_056580", + "segments_info": [ + { + "area": 928191, + "bbox": [ + 6, + 324, + 2037, + 655 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 32783, + "bbox": [ + 6, + 330, + 1690, + 139 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 363873, + "bbox": [ + 27, + 7, + 2016, + 398 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 17696, + "bbox": [ + 207, + 5, + 1652, + 445 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9590, + "bbox": [ + 441, + 88, + 1327, + 231 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 5206, + "bbox": [ + 412, + 171, + 1496, + 208 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 248920, + "bbox": [ + 6, + 5, + 1628, + 417 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4690, + "bbox": [ + 22, + 380, + 230, + 38 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 8141, + "bbox": [ + 1370, + 16, + 126, + 126 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 4234, + "bbox": [ + 84, + 317, + 1220, + 105 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 158, + "bbox": [ + 1356, + 314, + 9, + 21 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 285, + "bbox": [ + 1825, + 324, + 23, + 18 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1010, + "bbox": [ + 899, + 344, + 24, + 62 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 863, + "bbox": [ + 828, + 341, + 22, + 67 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 491, + "bbox": [ + 845, + 342, + 24, + 73 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 631, + "bbox": [ + 792, + 337, + 18, + 77 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2856, + "bbox": [ + 765, + 326, + 37, + 131 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 4076, + "bbox": [ + 727, + 313, + 51, + 148 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1124, + "bbox": [ + 14, + 335, + 36, + 84 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1354, + "bbox": [ + 6, + 325, + 19, + 98 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 5270, + "bbox": [ + 264, + 319, + 67, + 138 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 1192, + "bbox": [ + 439, + 325, + 25, + 132 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 2991, + "bbox": [ + 340, + 314, + 37, + 144 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 4219, + "bbox": [ + 352, + 324, + 57, + 134 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 5633, + "bbox": [ + 400, + 302, + 55, + 158 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 6867, + "bbox": [ + 454, + 313, + 83, + 147 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 1989, + "bbox": [ + 539, + 313, + 27, + 144 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 3091, + "bbox": [ + 583, + 327, + 37, + 131 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 4307, + "bbox": [ + 547, + 313, + 46, + 147 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 2039, + "bbox": [ + 1481, + 326, + 45, + 102 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 70, + "bbox": [ + 1329, + 311, + 9, + 15 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 141, + "bbox": [ + 1436, + 322, + 13, + 24 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1329, + "bbox": [ + 1444, + 314, + 46, + 37 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 110858, + "bbox": [ + 1621, + 340, + 422, + 335 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 8238, + "bbox": [ + 912, + 338, + 164, + 79 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 6896, + "bbox": [ + 231, + 350, + 313, + 104 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 23804, + "bbox": [ + 1007, + 340, + 252, + 123 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 56, + "bbox": [ + 1331, + 319, + 5, + 13 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_057181_gtFine_panoptic.png", + "image_id": "frankfurt_000001_057181", + "segments_info": [ + { + "area": 921796, + "bbox": [ + 6, + 329, + 2037, + 650 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 38104, + "bbox": [ + 6, + 379, + 2037, + 95 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 365991, + "bbox": [ + 25, + 7, + 2018, + 417 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 18440, + "bbox": [ + 98, + 5, + 1761, + 449 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 6798, + "bbox": [ + 491, + 88, + 1277, + 220 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4968, + "bbox": [ + 414, + 172, + 1494, + 211 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 236445, + "bbox": [ + 6, + 5, + 1629, + 414 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 5481, + "bbox": [ + 11, + 387, + 286, + 30 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 7982, + "bbox": [ + 1369, + 16, + 130, + 128 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3463, + "bbox": [ + 547, + 316, + 47, + 150 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 111, + "bbox": [ + 1384, + 313, + 9, + 17 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 476, + "bbox": [ + 1455, + 324, + 22, + 39 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 445, + "bbox": [ + 1436, + 324, + 13, + 43 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 279, + "bbox": [ + 1413, + 327, + 11, + 38 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1795, + "bbox": [ + 1625, + 335, + 48, + 87 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1785, + "bbox": [ + 1953, + 321, + 39, + 87 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1474, + "bbox": [ + 2018, + 324, + 23, + 79 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1766, + "bbox": [ + 1060, + 326, + 46, + 101 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1462, + "bbox": [ + 962, + 330, + 30, + 108 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1024, + "bbox": [ + 913, + 336, + 19, + 99 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 534, + "bbox": [ + 891, + 341, + 23, + 94 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 2938, + "bbox": [ + 849, + 328, + 65, + 107 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 2370, + "bbox": [ + 921, + 330, + 38, + 101 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 8207, + "bbox": [ + 958, + 245, + 119, + 374 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 24624, + "bbox": [ + 954, + 256, + 156, + 378 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 2649, + "bbox": [ + 531, + 314, + 33, + 141 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 23978, + "bbox": [ + 509, + 243, + 203, + 421 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 24925, + "bbox": [ + 550, + 321, + 219, + 373 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 21002, + "bbox": [ + 1246, + 289, + 138, + 319 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 29464, + "bbox": [ + 1109, + 341, + 153, + 380 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 3581, + "bbox": [ + 732, + 311, + 49, + 149 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 3869, + "bbox": [ + 759, + 327, + 54, + 130 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 5792, + "bbox": [ + 470, + 314, + 68, + 147 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 1005, + "bbox": [ + 457, + 351, + 20, + 106 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 1219, + "bbox": [ + 390, + 324, + 29, + 127 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 3867, + "bbox": [ + 329, + 318, + 43, + 142 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 1415, + "bbox": [ + 403, + 321, + 29, + 134 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 3954, + "bbox": [ + 356, + 326, + 46, + 135 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 5578, + "bbox": [ + 414, + 303, + 49, + 157 + ], + "category_id": 24, + "id": 24028, + "iscrowd": 0 + }, + { + "area": 258, + "bbox": [ + 1421, + 340, + 14, + 32 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1103, + "bbox": [ + 1448, + 314, + 46, + 37 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1717, + "bbox": [ + 1353, + 334, + 48, + 50 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1059, + "bbox": [ + 1513, + 330, + 75, + 39 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2983, + "bbox": [ + 1237, + 337, + 77, + 68 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2742, + "bbox": [ + 1191, + 340, + 76, + 71 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 872, + "bbox": [ + 1079, + 341, + 85, + 57 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2703, + "bbox": [ + 1098, + 354, + 123, + 60 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 851, + "bbox": [ + 943, + 341, + 28, + 70 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 10455, + "bbox": [ + 1134, + 280, + 194, + 83 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 371, + "bbox": [ + 1419, + 354, + 22, + 32 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_057478_gtFine_panoptic.png", + "image_id": "frankfurt_000001_057478", + "segments_info": [ + { + "area": 996480, + "bbox": [ + 6, + 327, + 2037, + 652 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 27039, + "bbox": [ + 97, + 380, + 1946, + 94 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 351716, + "bbox": [ + 21, + 7, + 2022, + 399 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19441, + "bbox": [ + 305, + 5, + 1554, + 449 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7986, + "bbox": [ + 487, + 90, + 1281, + 226 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 5481, + "bbox": [ + 414, + 174, + 1496, + 204 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 236668, + "bbox": [ + 7, + 5, + 1630, + 420 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 8383, + "bbox": [ + 1367, + 16, + 131, + 128 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2081, + "bbox": [ + 754, + 324, + 45, + 117 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 147, + "bbox": [ + 1324, + 313, + 8, + 24 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 97, + "bbox": [ + 1332, + 314, + 9, + 19 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 68, + "bbox": [ + 1364, + 314, + 7, + 13 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 134, + "bbox": [ + 1410, + 316, + 8, + 23 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2081, + "bbox": [ + 1958, + 321, + 33, + 85 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1591, + "bbox": [ + 2008, + 322, + 33, + 84 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 358, + "bbox": [ + 961, + 341, + 18, + 86 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 2282, + "bbox": [ + 932, + 333, + 31, + 103 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 2392, + "bbox": [ + 961, + 335, + 37, + 104 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 756, + "bbox": [ + 855, + 335, + 28, + 92 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 3302, + "bbox": [ + 879, + 329, + 53, + 121 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 910, + "bbox": [ + 841, + 326, + 39, + 116 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1414, + "bbox": [ + 829, + 332, + 27, + 107 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 3880, + "bbox": [ + 801, + 322, + 45, + 133 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1130, + "bbox": [ + 707, + 329, + 28, + 128 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 5182, + "bbox": [ + 727, + 310, + 48, + 158 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 2153, + "bbox": [ + 608, + 319, + 37, + 142 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 2572, + "bbox": [ + 619, + 308, + 39, + 149 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 3078, + "bbox": [ + 638, + 326, + 43, + 150 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 6064, + "bbox": [ + 665, + 322, + 63, + 158 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 1287, + "bbox": [ + 552, + 333, + 56, + 141 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 6169, + "bbox": [ + 526, + 311, + 85, + 177 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 241, + "bbox": [ + 444, + 321, + 21, + 31 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 1624, + "bbox": [ + 406, + 307, + 42, + 141 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 2607, + "bbox": [ + 398, + 343, + 51, + 139 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 1390, + "bbox": [ + 424, + 339, + 61, + 141 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 7625, + "bbox": [ + 439, + 329, + 68, + 161 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 263, + "bbox": [ + 348, + 313, + 22, + 27 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 5168, + "bbox": [ + 314, + 322, + 56, + 169 + ], + "category_id": 24, + "id": 24028, + "iscrowd": 0 + }, + { + "area": 6483, + "bbox": [ + 354, + 318, + 64, + 173 + ], + "category_id": 24, + "id": 24029, + "iscrowd": 0 + }, + { + "area": 4094, + "bbox": [ + 265, + 338, + 47, + 147 + ], + "category_id": 24, + "id": 24030, + "iscrowd": 0 + }, + { + "area": 4954, + "bbox": [ + 222, + 332, + 56, + 150 + ], + "category_id": 24, + "id": 24031, + "iscrowd": 0 + }, + { + "area": 1822, + "bbox": [ + 149, + 335, + 39, + 117 + ], + "category_id": 24, + "id": 24032, + "iscrowd": 0 + }, + { + "area": 5353, + "bbox": [ + 166, + 330, + 77, + 161 + ], + "category_id": 24, + "id": 24033, + "iscrowd": 0 + }, + { + "area": 1450, + "bbox": [ + 26, + 324, + 38, + 88 + ], + "category_id": 24, + "id": 24034, + "iscrowd": 0 + }, + { + "area": 275, + "bbox": [ + 6, + 313, + 17, + 24 + ], + "category_id": 24, + "id": 24035, + "iscrowd": 0 + }, + { + "area": 6699, + "bbox": [ + 6, + 333, + 48, + 204 + ], + "category_id": 24, + "id": 24036, + "iscrowd": 0 + }, + { + "area": 9790, + "bbox": [ + 41, + 321, + 105, + 204 + ], + "category_id": 24, + "id": 24037, + "iscrowd": 0 + }, + { + "area": 149, + "bbox": [ + 1337, + 322, + 9, + 30 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2878, + "bbox": [ + 1026, + 322, + 61, + 127 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 737, + "bbox": [ + 185, + 452, + 41, + 47 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 203, + "bbox": [ + 1438, + 323, + 13, + 26 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 986, + "bbox": [ + 1448, + 316, + 34, + 36 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1383, + "bbox": [ + 1462, + 332, + 92, + 39 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3205, + "bbox": [ + 1343, + 338, + 98, + 44 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2166, + "bbox": [ + 1271, + 335, + 51, + 57 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 15841, + "bbox": [ + 1098, + 294, + 183, + 120 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2919, + "bbox": [ + 786, + 333, + 160, + 92 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 3999, + "bbox": [ + 1123, + 273, + 155, + 72 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 121, + "bbox": [ + 1334, + 333, + 10, + 23 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2508, + "bbox": [ + 1030, + 373, + 53, + 96 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_057954_gtFine_panoptic.png", + "image_id": "frankfurt_000001_057954", + "segments_info": [ + { + "area": 789090, + "bbox": [ + 6, + 338, + 2037, + 641 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 47587, + "bbox": [ + 6, + 380, + 2037, + 203 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 503909, + "bbox": [ + 9, + 5, + 2034, + 486 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 25296, + "bbox": [ + 476, + 5, + 1552, + 554 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 16063, + "bbox": [ + 379, + 133, + 1504, + 214 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 8641, + "bbox": [ + 348, + 6, + 1541, + 432 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 86175, + "bbox": [ + 6, + 5, + 1446, + 373 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 13810, + "bbox": [ + 1000, + 10, + 242, + 173 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 16044, + "bbox": [ + 627, + 330, + 396, + 237 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 5748, + "bbox": [ + 1078, + 356, + 46, + 183 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 250, + "bbox": [ + 1154, + 360, + 11, + 29 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 4555, + "bbox": [ + 1119, + 352, + 53, + 179 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 5030, + "bbox": [ + 1122, + 357, + 82, + 182 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 314, + "bbox": [ + 1301, + 359, + 26, + 27 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2143, + "bbox": [ + 1292, + 373, + 73, + 163 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2400, + "bbox": [ + 1173, + 370, + 74, + 172 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 8151, + "bbox": [ + 1195, + 344, + 58, + 209 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 7851, + "bbox": [ + 1239, + 360, + 72, + 204 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 5578, + "bbox": [ + 1384, + 370, + 61, + 180 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 824, + "bbox": [ + 993, + 367, + 61, + 159 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 4351, + "bbox": [ + 1043, + 354, + 36, + 175 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 4698, + "bbox": [ + 1000, + 371, + 62, + 173 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 4616, + "bbox": [ + 883, + 371, + 51, + 169 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 9913, + "bbox": [ + 904, + 363, + 107, + 211 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 458, + "bbox": [ + 777, + 374, + 26, + 37 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 992, + "bbox": [ + 713, + 357, + 34, + 47 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 2673, + "bbox": [ + 464, + 326, + 29, + 225 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 1674, + "bbox": [ + 609, + 340, + 47, + 183 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 5026, + "bbox": [ + 611, + 338, + 65, + 210 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 2090, + "bbox": [ + 688, + 362, + 37, + 201 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 7003, + "bbox": [ + 717, + 352, + 74, + 203 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 5032, + "bbox": [ + 703, + 406, + 58, + 158 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 9389, + "bbox": [ + 781, + 363, + 67, + 200 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 2227, + "bbox": [ + 512, + 351, + 74, + 207 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 1698, + "bbox": [ + 585, + 356, + 37, + 164 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 4418, + "bbox": [ + 408, + 337, + 51, + 216 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 6727, + "bbox": [ + 430, + 346, + 59, + 209 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 9002, + "bbox": [ + 452, + 338, + 97, + 221 + ], + "category_id": 24, + "id": 24028, + "iscrowd": 0 + }, + { + "area": 12671, + "bbox": [ + 526, + 363, + 119, + 219 + ], + "category_id": 24, + "id": 24029, + "iscrowd": 0 + }, + { + "area": 4273, + "bbox": [ + 366, + 363, + 54, + 177 + ], + "category_id": 24, + "id": 24030, + "iscrowd": 0 + }, + { + "area": 712, + "bbox": [ + 263, + 338, + 44, + 226 + ], + "category_id": 24, + "id": 24031, + "iscrowd": 0 + }, + { + "area": 3075, + "bbox": [ + 229, + 360, + 33, + 164 + ], + "category_id": 24, + "id": 24032, + "iscrowd": 0 + }, + { + "area": 4100, + "bbox": [ + 322, + 357, + 65, + 198 + ], + "category_id": 24, + "id": 24033, + "iscrowd": 0 + }, + { + "area": 1961, + "bbox": [ + 233, + 354, + 99, + 235 + ], + "category_id": 24, + "id": 24034, + "iscrowd": 0 + }, + { + "area": 8491, + "bbox": [ + 275, + 349, + 97, + 237 + ], + "category_id": 24, + "id": 24035, + "iscrowd": 0 + }, + { + "area": 1361, + "bbox": [ + 57, + 406, + 45, + 122 + ], + "category_id": 24, + "id": 24036, + "iscrowd": 0 + }, + { + "area": 1302, + "bbox": [ + 6, + 322, + 39, + 239 + ], + "category_id": 24, + "id": 24037, + "iscrowd": 0 + }, + { + "area": 7804, + "bbox": [ + 25, + 344, + 82, + 212 + ], + "category_id": 24, + "id": 24038, + "iscrowd": 0 + }, + { + "area": 8254, + "bbox": [ + 6, + 335, + 86, + 227 + ], + "category_id": 24, + "id": 24039, + "iscrowd": 0 + }, + { + "area": 12410, + "bbox": [ + 93, + 346, + 96, + 223 + ], + "category_id": 24, + "id": 24040, + "iscrowd": 0 + }, + { + "area": 10653, + "bbox": [ + 169, + 333, + 74, + 230 + ], + "category_id": 24, + "id": 24041, + "iscrowd": 0 + }, + { + "area": 9802, + "bbox": [ + 234, + 388, + 104, + 203 + ], + "category_id": 24, + "id": 24042, + "iscrowd": 0 + }, + { + "area": 1910, + "bbox": [ + 827, + 362, + 37, + 115 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 584, + "bbox": [ + 1350, + 499, + 42, + 43 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 786, + "bbox": [ + 386, + 495, + 42, + 39 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 445, + "bbox": [ + 885, + 444, + 17, + 41 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 457, + "bbox": [ + 1185, + 359, + 33, + 40 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 380, + "bbox": [ + 836, + 416, + 30, + 57 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_058057_gtFine_panoptic.png", + "image_id": "frankfurt_000001_058057", + "segments_info": [ + { + "area": 800234, + "bbox": [ + 6, + 425, + 2037, + 554 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 121358, + "bbox": [ + 6, + 5, + 1523, + 451 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5241, + "bbox": [ + 95, + 29, + 1239, + 381 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 286, + "bbox": [ + 978, + 327, + 223, + 75 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 342129, + "bbox": [ + 14, + 5, + 2029, + 432 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 241, + "bbox": [ + 814, + 448, + 18, + 18 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 108322, + "bbox": [ + 859, + 8, + 618, + 333 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 234, + "bbox": [ + 1178, + 402, + 22, + 22 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 130, + "bbox": [ + 1079, + 407, + 13, + 27 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 235, + "bbox": [ + 985, + 409, + 16, + 31 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 121, + "bbox": [ + 848, + 417, + 16, + 13 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 559, + "bbox": [ + 472, + 423, + 27, + 49 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 139, + "bbox": [ + 1198, + 405, + 8, + 25 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 225, + "bbox": [ + 1205, + 403, + 13, + 29 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 241, + "bbox": [ + 992, + 409, + 11, + 30 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 703, + "bbox": [ + 1029, + 400, + 62, + 54 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1254, + "bbox": [ + 922, + 411, + 35, + 40 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2438, + "bbox": [ + 871, + 398, + 56, + 58 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 834, + "bbox": [ + 855, + 429, + 36, + 32 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1761, + "bbox": [ + 801, + 420, + 63, + 45 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1349, + "bbox": [ + 768, + 434, + 49, + 38 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1520, + "bbox": [ + 733, + 427, + 45, + 49 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1123, + "bbox": [ + 701, + 420, + 44, + 58 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 3635, + "bbox": [ + 1008, + 407, + 76, + 58 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 5470, + "bbox": [ + 1108, + 404, + 92, + 71 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 17094, + "bbox": [ + 1263, + 307, + 125, + 177 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 32744, + "bbox": [ + 483, + 404, + 254, + 166 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 40156, + "bbox": [ + 213, + 388, + 290, + 241 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 93003, + "bbox": [ + 6, + 351, + 333, + 378 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 5964, + "bbox": [ + 1088, + 345, + 95, + 106 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 12104, + "bbox": [ + 1205, + 292, + 157, + 179 + ], + "category_id": 28, + "id": 28001, + "iscrowd": 0 + }, + { + "area": 264406, + "bbox": [ + 1357, + 73, + 686, + 473 + ], + "category_id": 28, + "id": 28002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_058176_gtFine_panoptic.png", + "image_id": "frankfurt_000001_058176", + "segments_info": [ + { + "area": 852891, + "bbox": [ + 6, + 429, + 2037, + 550 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 236814, + "bbox": [ + 6, + 5, + 2037, + 469 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5483, + "bbox": [ + 512, + 19, + 1041, + 429 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 765, + "bbox": [ + 907, + 288, + 350, + 104 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1570, + "bbox": [ + 495, + 310, + 38, + 46 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 321941, + "bbox": [ + 9, + 5, + 1876, + 504 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1525, + "bbox": [ + 685, + 430, + 250, + 58 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 99364, + "bbox": [ + 791, + 6, + 1235, + 339 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1497, + "bbox": [ + 866, + 420, + 56, + 41 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 238, + "bbox": [ + 1178, + 405, + 7, + 41 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 313, + "bbox": [ + 1167, + 405, + 13, + 37 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 181, + "bbox": [ + 927, + 407, + 9, + 34 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 361, + "bbox": [ + 650, + 410, + 23, + 22 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 356, + "bbox": [ + 630, + 410, + 21, + 23 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 491, + "bbox": [ + 598, + 406, + 25, + 33 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 510, + "bbox": [ + 25, + 405, + 26, + 33 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 410, + "bbox": [ + 6, + 409, + 14, + 45 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 349, + "bbox": [ + 1069, + 404, + 15, + 42 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 274, + "bbox": [ + 1060, + 409, + 12, + 37 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 413, + "bbox": [ + 1051, + 404, + 13, + 43 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 308, + "bbox": [ + 1036, + 412, + 13, + 34 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 378, + "bbox": [ + 1027, + 410, + 14, + 38 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 365, + "bbox": [ + 1013, + 410, + 19, + 38 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 277, + "bbox": [ + 1004, + 406, + 11, + 43 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 437, + "bbox": [ + 995, + 404, + 15, + 45 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 250, + "bbox": [ + 974, + 409, + 13, + 38 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 366, + "bbox": [ + 965, + 409, + 19, + 39 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 361, + "bbox": [ + 955, + 407, + 18, + 41 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 235, + "bbox": [ + 932, + 411, + 12, + 33 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 310, + "bbox": [ + 940, + 411, + 21, + 37 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 1082, + "bbox": [ + 1120, + 399, + 55, + 53 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 118, + "bbox": [ + 1046, + 422, + 7, + 24 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4011, + "bbox": [ + 1077, + 405, + 79, + 62 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 4240, + "bbox": [ + 797, + 403, + 72, + 68 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 9994, + "bbox": [ + 683, + 373, + 120, + 108 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 4642, + "bbox": [ + 613, + 431, + 93, + 66 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 11403, + "bbox": [ + 461, + 413, + 162, + 98 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 16618, + "bbox": [ + 238, + 436, + 203, + 105 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 30616, + "bbox": [ + 6, + 420, + 242, + 153 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 10010, + "bbox": [ + 1224, + 403, + 131, + 93 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 86, + "bbox": [ + 1012, + 419, + 16, + 25 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 127362, + "bbox": [ + 1674, + 145, + 369, + 462 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 4572, + "bbox": [ + 1299, + 319, + 65, + 111 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 10348, + "bbox": [ + 1180, + 327, + 109, + 135 + ], + "category_id": 28, + "id": 28001, + "iscrowd": 0 + }, + { + "area": 11295, + "bbox": [ + 1342, + 282, + 93, + 199 + ], + "category_id": 28, + "id": 28002, + "iscrowd": 0 + }, + { + "area": 76364, + "bbox": [ + 1406, + 222, + 345, + 298 + ], + "category_id": 28, + "id": 28003, + "iscrowd": 0 + }, + { + "area": 7546, + "bbox": [ + 1968, + 37, + 75, + 167 + ], + "category_id": 28, + "id": 28004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_058504_gtFine_panoptic.png", + "image_id": "frankfurt_000001_058504", + "segments_info": [ + { + "area": 900252, + "bbox": [ + 6, + 405, + 2037, + 574 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 13808, + "bbox": [ + 6, + 437, + 497, + 91 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 427266, + "bbox": [ + 6, + 5, + 2037, + 499 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5790, + "bbox": [ + 100, + 235, + 1340, + 254 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 5466, + "bbox": [ + 164, + 237, + 1439, + 129 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 270328, + "bbox": [ + 504, + 5, + 1316, + 486 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 51824, + "bbox": [ + 755, + 6, + 391, + 289 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 666, + "bbox": [ + 1085, + 390, + 47, + 17 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 819, + "bbox": [ + 1613, + 346, + 37, + 49 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 645, + "bbox": [ + 1649, + 351, + 35, + 28 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 630, + "bbox": [ + 496, + 374, + 21, + 64 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1861, + "bbox": [ + 425, + 371, + 34, + 80 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1321, + "bbox": [ + 207, + 361, + 29, + 87 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3578, + "bbox": [ + 36, + 349, + 47, + 140 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 422, + "bbox": [ + 1187, + 375, + 63, + 19 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3433, + "bbox": [ + 986, + 369, + 71, + 66 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 574, + "bbox": [ + 1219, + 381, + 33, + 49 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2838, + "bbox": [ + 1227, + 377, + 81, + 63 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 3920, + "bbox": [ + 1338, + 376, + 84, + 88 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 12475, + "bbox": [ + 1385, + 374, + 165, + 102 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 16857, + "bbox": [ + 1567, + 378, + 207, + 139 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 61719, + "bbox": [ + 1704, + 330, + 339, + 234 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 6693, + "bbox": [ + 1120, + 375, + 104, + 78 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2119, + "bbox": [ + 864, + 369, + 76, + 74 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 3687, + "bbox": [ + 842, + 381, + 78, + 75 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 7648, + "bbox": [ + 763, + 379, + 106, + 101 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 52309, + "bbox": [ + 488, + 342, + 302, + 215 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_058914_gtFine_panoptic.png", + "image_id": "frankfurt_000001_058914", + "segments_info": [ + { + "area": 808616, + "bbox": [ + 6, + 390, + 2037, + 589 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 41960, + "bbox": [ + 6, + 410, + 2037, + 256 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 621202, + "bbox": [ + 6, + 5, + 2037, + 472 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 23957, + "bbox": [ + 22, + 8, + 1937, + 584 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3281, + "bbox": [ + 427, + 196, + 855, + 190 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 5319, + "bbox": [ + 898, + 205, + 968, + 146 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 8702, + "bbox": [ + 1174, + 230, + 111, + 132 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 93574, + "bbox": [ + 614, + 5, + 766, + 292 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 130, + "bbox": [ + 1141, + 387, + 10, + 25 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 13, + "bbox": [ + 1051, + 398, + 8, + 16 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 694, + "bbox": [ + 583, + 392, + 21, + 59 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 896, + "bbox": [ + 535, + 383, + 27, + 66 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 940, + "bbox": [ + 559, + 386, + 25, + 65 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1504, + "bbox": [ + 269, + 390, + 30, + 78 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 19222, + "bbox": [ + 89, + 284, + 90, + 348 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 23415, + "bbox": [ + 22, + 287, + 103, + 363 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 54787, + "bbox": [ + 596, + 220, + 204, + 548 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 51989, + "bbox": [ + 756, + 178, + 224, + 578 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 372, + "bbox": [ + 1263, + 369, + 16, + 52 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 5503, + "bbox": [ + 1856, + 328, + 178, + 239 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 18866, + "bbox": [ + 1853, + 298, + 161, + 284 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 13289, + "bbox": [ + 1238, + 303, + 114, + 329 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 21116, + "bbox": [ + 1289, + 293, + 129, + 349 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 130, + "bbox": [ + 1082, + 397, + 7, + 28 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 201, + "bbox": [ + 1089, + 397, + 10, + 29 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 305, + "bbox": [ + 1071, + 397, + 13, + 30 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 144, + "bbox": [ + 1059, + 389, + 8, + 22 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 118, + "bbox": [ + 1051, + 394, + 8, + 19 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 239, + "bbox": [ + 1111, + 392, + 13, + 26 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 393, + "bbox": [ + 1122, + 389, + 17, + 41 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 609, + "bbox": [ + 1449, + 375, + 30, + 38 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 813, + "bbox": [ + 1429, + 379, + 35, + 33 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 118, + "bbox": [ + 1258, + 383, + 10, + 15 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 477, + "bbox": [ + 1173, + 389, + 34, + 21 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 193, + "bbox": [ + 1136, + 390, + 30, + 22 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 912, + "bbox": [ + 1149, + 394, + 38, + 31 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1187, + "bbox": [ + 1209, + 389, + 40, + 36 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 4772, + "bbox": [ + 606, + 366, + 323, + 139 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 26244, + "bbox": [ + 1340, + 355, + 329, + 166 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 63, + "bbox": [ + 1117, + 411, + 5, + 14 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 62, + "bbox": [ + 1125, + 417, + 7, + 14 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_059119_gtFine_panoptic.png", + "image_id": "frankfurt_000001_059119", + "segments_info": [ + { + "area": 807938, + "bbox": [ + 6, + 388, + 2037, + 591 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 61527, + "bbox": [ + 6, + 415, + 2037, + 252 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 638381, + "bbox": [ + 6, + 5, + 2037, + 469 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 38417, + "bbox": [ + 17, + 8, + 1986, + 588 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3927, + "bbox": [ + 426, + 199, + 931, + 181 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 7880, + "bbox": [ + 854, + 205, + 1015, + 207 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 6333, + "bbox": [ + 1175, + 232, + 107, + 130 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 94611, + "bbox": [ + 608, + 5, + 772, + 295 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 519, + "bbox": [ + 1149, + 395, + 37, + 31 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 266, + "bbox": [ + 1029, + 401, + 20, + 29 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 251, + "bbox": [ + 1019, + 395, + 10, + 32 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 256, + "bbox": [ + 1052, + 398, + 12, + 31 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1667, + "bbox": [ + 800, + 383, + 41, + 79 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1336, + "bbox": [ + 746, + 388, + 26, + 74 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 569, + "bbox": [ + 716, + 393, + 17, + 50 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 234, + "bbox": [ + 686, + 391, + 10, + 48 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 215, + "bbox": [ + 690, + 396, + 9, + 46 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 371, + "bbox": [ + 650, + 391, + 18, + 31 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 7455, + "bbox": [ + 202, + 291, + 166, + 299 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 17438, + "bbox": [ + 243, + 329, + 161, + 271 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 149, + "bbox": [ + 1315, + 395, + 12, + 17 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 31893, + "bbox": [ + 1386, + 260, + 141, + 405 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 5022, + "bbox": [ + 826, + 258, + 140, + 378 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 26872, + "bbox": [ + 861, + 291, + 139, + 358 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 18008, + "bbox": [ + 410, + 308, + 143, + 300 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 18717, + "bbox": [ + 497, + 271, + 137, + 347 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 26428, + "bbox": [ + 534, + 260, + 218, + 372 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 277, + "bbox": [ + 1092, + 390, + 10, + 37 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 1302, + "bbox": [ + 1158, + 374, + 28, + 88 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 731, + "bbox": [ + 1180, + 377, + 20, + 85 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 22608, + "bbox": [ + 1180, + 290, + 140, + 352 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 209, + "bbox": [ + 1040, + 403, + 10, + 28 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 149, + "bbox": [ + 1032, + 391, + 18, + 16 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 447, + "bbox": [ + 828, + 395, + 21, + 33 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 509, + "bbox": [ + 1100, + 387, + 19, + 51 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 137, + "bbox": [ + 1315, + 377, + 12, + 15 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 213, + "bbox": [ + 1276, + 378, + 18, + 19 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 202, + "bbox": [ + 1268, + 382, + 16, + 15 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 974, + "bbox": [ + 987, + 381, + 34, + 39 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 56, + "bbox": [ + 1149, + 392, + 16, + 6 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 104, + "bbox": [ + 1143, + 394, + 15, + 14 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 124, + "bbox": [ + 1137, + 395, + 12, + 18 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 220, + "bbox": [ + 1123, + 395, + 22, + 20 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 320, + "bbox": [ + 1100, + 397, + 31, + 28 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 257, + "bbox": [ + 826, + 427, + 20, + 17 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 282, + "bbox": [ + 1102, + 417, + 15, + 26 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_059642_gtFine_panoptic.png", + "image_id": "frankfurt_000001_059642", + "segments_info": [ + { + "area": 602201, + "bbox": [ + 6, + 382, + 1911, + 597 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 210253, + "bbox": [ + 107, + 384, + 1936, + 573 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 702269, + "bbox": [ + 6, + 5, + 2037, + 507 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 62603, + "bbox": [ + 147, + 63, + 1870, + 777 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1530, + "bbox": [ + 783, + 269, + 520, + 121 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1067, + "bbox": [ + 1123, + 322, + 184, + 94 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 13651, + "bbox": [ + 1020, + 212, + 297, + 150 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 102018, + "bbox": [ + 560, + 5, + 776, + 285 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 240, + "bbox": [ + 1232, + 371, + 23, + 21 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 2356, + "bbox": [ + 1092, + 367, + 78, + 42 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 47, + "bbox": [ + 1012, + 383, + 6, + 14 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 288, + "bbox": [ + 705, + 403, + 16, + 29 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2145, + "bbox": [ + 197, + 401, + 38, + 102 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 299, + "bbox": [ + 1257, + 379, + 15, + 26 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 389, + "bbox": [ + 1218, + 383, + 22, + 48 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 263, + "bbox": [ + 1309, + 378, + 21, + 35 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 359, + "bbox": [ + 1346, + 363, + 20, + 40 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 2438, + "bbox": [ + 1316, + 362, + 50, + 109 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 2144, + "bbox": [ + 1431, + 349, + 37, + 114 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 3251, + "bbox": [ + 1392, + 354, + 62, + 111 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 473, + "bbox": [ + 987, + 392, + 28, + 52 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 547, + "bbox": [ + 1203, + 368, + 25, + 25 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 420, + "bbox": [ + 1014, + 389, + 40, + 24 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 219, + "bbox": [ + 980, + 398, + 16, + 27 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1427, + "bbox": [ + 1007, + 398, + 46, + 43 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 348, + "bbox": [ + 954, + 395, + 32, + 30 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1053, + "bbox": [ + 937, + 399, + 39, + 31 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 21418, + "bbox": [ + 713, + 385, + 205, + 145 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 14771, + "bbox": [ + 6, + 426, + 104, + 188 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 10259, + "bbox": [ + 237, + 410, + 141, + 149 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 104781, + "bbox": [ + 317, + 369, + 457, + 299 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 544, + "bbox": [ + 992, + 407, + 19, + 36 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_059789_gtFine_panoptic.png", + "image_id": "frankfurt_000001_059789", + "segments_info": [ + { + "area": 812309, + "bbox": [ + 6, + 384, + 2034, + 595 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 25369, + "bbox": [ + 6, + 393, + 1942, + 227 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 590408, + "bbox": [ + 6, + 5, + 2037, + 503 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 53358, + "bbox": [ + 16, + 5, + 1908, + 723 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4064, + "bbox": [ + 243, + 143, + 894, + 202 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 32129, + "bbox": [ + 46, + 11, + 1133, + 451 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 32662, + "bbox": [ + 832, + 149, + 412, + 228 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 64792, + "bbox": [ + 827, + 7, + 594, + 273 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 237, + "bbox": [ + 1144, + 364, + 9, + 33 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 195, + "bbox": [ + 1234, + 368, + 10, + 25 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 330, + "bbox": [ + 1317, + 357, + 12, + 37 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 3635, + "bbox": [ + 1314, + 357, + 63, + 119 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1095, + "bbox": [ + 1401, + 352, + 25, + 71 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1098, + "bbox": [ + 1429, + 353, + 25, + 69 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2677, + "bbox": [ + 1190, + 364, + 42, + 109 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 49972, + "bbox": [ + 1893, + 202, + 150, + 615 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1441, + "bbox": [ + 2024, + 140, + 19, + 152 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 182, + "bbox": [ + 1178, + 366, + 8, + 33 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 198, + "bbox": [ + 1172, + 369, + 9, + 28 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 231, + "bbox": [ + 1163, + 369, + 10, + 29 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 128, + "bbox": [ + 1295, + 364, + 10, + 29 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 243, + "bbox": [ + 1300, + 365, + 12, + 30 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 388, + "bbox": [ + 1185, + 371, + 40, + 22 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 252, + "bbox": [ + 1135, + 369, + 30, + 25 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 263, + "bbox": [ + 1119, + 373, + 17, + 25 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 60, + "bbox": [ + 1069, + 374, + 4, + 17 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 451, + "bbox": [ + 1028, + 374, + 26, + 24 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 734, + "bbox": [ + 1003, + 371, + 34, + 29 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 775, + "bbox": [ + 983, + 365, + 25, + 44 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 3430, + "bbox": [ + 918, + 343, + 72, + 72 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 282, + "bbox": [ + 840, + 377, + 24, + 32 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1861, + "bbox": [ + 802, + 379, + 57, + 41 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 6500, + "bbox": [ + 676, + 379, + 115, + 96 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1215, + "bbox": [ + 886, + 367, + 63, + 55 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 3101, + "bbox": [ + 862, + 368, + 66, + 58 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 24568, + "bbox": [ + 46, + 378, + 238, + 138 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 20099, + "bbox": [ + 536, + 385, + 188, + 136 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_060135_gtFine_panoptic.png", + "image_id": "frankfurt_000001_060135", + "segments_info": [ + { + "area": 674086, + "bbox": [ + 6, + 401, + 2035, + 578 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 215715, + "bbox": [ + 6, + 442, + 2037, + 395 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 337707, + "bbox": [ + 6, + 5, + 2037, + 516 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 10155, + "bbox": [ + 509, + 443, + 818, + 55 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 12060, + "bbox": [ + 848, + 163, + 846, + 388 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1227, + "bbox": [ + 1332, + 301, + 298, + 101 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 485, + "bbox": [ + 1369, + 352, + 231, + 26 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 400229, + "bbox": [ + 7, + 5, + 2036, + 496 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 14647, + "bbox": [ + 528, + 417, + 1290, + 90 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 49101, + "bbox": [ + 772, + 6, + 804, + 265 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 4543, + "bbox": [ + 1389, + 393, + 292, + 42 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 383, + "bbox": [ + 1591, + 409, + 27, + 22 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 873, + "bbox": [ + 1622, + 413, + 41, + 27 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 677, + "bbox": [ + 1532, + 407, + 33, + 24 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 937, + "bbox": [ + 1376, + 417, + 36, + 42 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2627, + "bbox": [ + 1327, + 407, + 63, + 57 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 42517, + "bbox": [ + 88, + 343, + 445, + 159 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 8390, + "bbox": [ + 6, + 340, + 95, + 147 + ], + "category_id": 28, + "id": 28001, + "iscrowd": 0 + }, + { + "area": 18023, + "bbox": [ + 757, + 352, + 236, + 136 + ], + "category_id": 28, + "id": 28002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_060422_gtFine_panoptic.png", + "image_id": "frankfurt_000001_060422", + "segments_info": [ + { + "area": 861241, + "bbox": [ + 6, + 373, + 2037, + 606 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 5907, + "bbox": [ + 482, + 389, + 787, + 70 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 419873, + "bbox": [ + 6, + 5, + 2037, + 443 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19161, + "bbox": [ + 255, + 22, + 1482, + 420 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 316, + "bbox": [ + 1058, + 290, + 262, + 62 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 735, + "bbox": [ + 418, + 304, + 652, + 38 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 164319, + "bbox": [ + 10, + 19, + 1845, + 381 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 117035, + "bbox": [ + 647, + 5, + 686, + 326 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2467, + "bbox": [ + 1154, + 344, + 143, + 39 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 165, + "bbox": [ + 1060, + 362, + 10, + 31 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 167, + "bbox": [ + 1037, + 362, + 8, + 28 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 149, + "bbox": [ + 1032, + 365, + 7, + 27 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 74, + "bbox": [ + 1020, + 365, + 5, + 27 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 168, + "bbox": [ + 1013, + 366, + 8, + 26 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 198, + "bbox": [ + 1023, + 365, + 9, + 28 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 136, + "bbox": [ + 1051, + 365, + 9, + 25 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 479, + "bbox": [ + 1329, + 350, + 30, + 27 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 784, + "bbox": [ + 1302, + 356, + 38, + 32 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 591, + "bbox": [ + 1279, + 366, + 36, + 23 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1272, + "bbox": [ + 1239, + 369, + 52, + 37 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 335, + "bbox": [ + 1171, + 368, + 45, + 24 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2248, + "bbox": [ + 1170, + 375, + 67, + 41 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 570, + "bbox": [ + 1092, + 361, + 47, + 29 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 583, + "bbox": [ + 1102, + 374, + 58, + 17 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1441, + "bbox": [ + 1119, + 385, + 57, + 48 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 712, + "bbox": [ + 1123, + 394, + 28, + 52 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 4360, + "bbox": [ + 1057, + 390, + 82, + 66 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 2608, + "bbox": [ + 931, + 350, + 81, + 40 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2012, + "bbox": [ + 967, + 387, + 66, + 61 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 5196, + "bbox": [ + 907, + 389, + 95, + 70 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 22772, + "bbox": [ + 487, + 375, + 199, + 147 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 3036, + "bbox": [ + 413, + 402, + 69, + 72 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 5914, + "bbox": [ + 335, + 397, + 100, + 82 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 6721, + "bbox": [ + 253, + 398, + 106, + 91 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 11637, + "bbox": [ + 115, + 391, + 163, + 109 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 15765, + "bbox": [ + 6, + 409, + 167, + 115 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 2157, + "bbox": [ + 1263, + 387, + 73, + 73 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 5203, + "bbox": [ + 1289, + 377, + 107, + 85 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 1153, + "bbox": [ + 1366, + 395, + 22, + 78 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 20068, + "bbox": [ + 1380, + 330, + 201, + 166 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 14518, + "bbox": [ + 1491, + 369, + 188, + 145 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 25268, + "bbox": [ + 1595, + 367, + 227, + 176 + ], + "category_id": 26, + "id": 26025, + "iscrowd": 0 + }, + { + "area": 60653, + "bbox": [ + 1767, + 326, + 276, + 268 + ], + "category_id": 26, + "id": 26026, + "iscrowd": 0 + }, + { + "area": 1411, + "bbox": [ + 2023, + 477, + 20, + 133 + ], + "category_id": 26, + "id": 26027, + "iscrowd": 0 + }, + { + "area": 267, + "bbox": [ + 1045, + 378, + 31, + 14 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 303, + "bbox": [ + 1251, + 417, + 18, + 26 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_060545_gtFine_panoptic.png", + "image_id": "frankfurt_000001_060545", + "segments_info": [ + { + "area": 974830, + "bbox": [ + 6, + 349, + 2037, + 630 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 46420, + "bbox": [ + 6, + 357, + 2037, + 212 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 386544, + "bbox": [ + 6, + 5, + 1984, + 486 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4244, + "bbox": [ + 1880, + 334, + 163, + 29 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 18284, + "bbox": [ + 539, + 5, + 1504, + 463 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3528, + "bbox": [ + 1091, + 188, + 898, + 144 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 983, + "bbox": [ + 758, + 232, + 1285, + 53 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 100464, + "bbox": [ + 880, + 8, + 1163, + 370 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 200407, + "bbox": [ + 965, + 10, + 1078, + 334 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 336, + "bbox": [ + 1828, + 319, + 15, + 30 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 543, + "bbox": [ + 1187, + 336, + 18, + 59 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 522, + "bbox": [ + 1174, + 343, + 17, + 52 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 561, + "bbox": [ + 1216, + 345, + 18, + 54 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1026, + "bbox": [ + 871, + 348, + 35, + 70 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 255, + "bbox": [ + 1074, + 345, + 12, + 59 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 189, + "bbox": [ + 1118, + 349, + 18, + 42 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 71, + "bbox": [ + 1096, + 344, + 13, + 39 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 788, + "bbox": [ + 1108, + 348, + 25, + 57 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 576, + "bbox": [ + 1081, + 348, + 16, + 59 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 775, + "bbox": [ + 1088, + 348, + 23, + 61 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 166, + "bbox": [ + 1059, + 346, + 20, + 57 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 687, + "bbox": [ + 1061, + 349, + 18, + 56 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 102, + "bbox": [ + 1011, + 358, + 10, + 20 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 426, + "bbox": [ + 1033, + 345, + 16, + 45 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 598, + "bbox": [ + 1045, + 346, + 17, + 57 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 821, + "bbox": [ + 1012, + 343, + 24, + 67 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 729, + "bbox": [ + 993, + 345, + 19, + 62 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 783, + "bbox": [ + 1851, + 321, + 25, + 52 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 318, + "bbox": [ + 1203, + 348, + 16, + 39 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2474, + "bbox": [ + 737, + 345, + 54, + 114 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 1396, + "bbox": [ + 1797, + 331, + 44, + 52 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1371, + "bbox": [ + 1773, + 327, + 40, + 71 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 721, + "bbox": [ + 1758, + 322, + 38, + 94 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1726, + "bbox": [ + 1545, + 340, + 54, + 38 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1006, + "bbox": [ + 1475, + 341, + 45, + 50 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1068, + "bbox": [ + 1595, + 327, + 36, + 66 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 24796, + "bbox": [ + 1602, + 308, + 189, + 165 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 21640, + "bbox": [ + 1312, + 319, + 191, + 137 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 571, + "bbox": [ + 917, + 359, + 72, + 14 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 8877, + "bbox": [ + 1271, + 276, + 137, + 135 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 7790, + "bbox": [ + 1471, + 279, + 117, + 98 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 281, + "bbox": [ + 1837, + 349, + 20, + 18 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 135, + "bbox": [ + 1861, + 346, + 14, + 33 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 877, + "bbox": [ + 1191, + 374, + 55, + 24 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 2978, + "bbox": [ + 658, + 380, + 78, + 58 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2309, + "bbox": [ + 734, + 391, + 62, + 80 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 667, + "bbox": [ + 943, + 385, + 28, + 31 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_060906_gtFine_panoptic.png", + "image_id": "frankfurt_000001_060906", + "segments_info": [ + { + "area": 688955, + "bbox": [ + 6, + 423, + 2037, + 556 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 9469, + "bbox": [ + 11, + 425, + 533, + 71 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 33195, + "bbox": [ + 184, + 27, + 1815, + 398 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1860, + "bbox": [ + 992, + 383, + 824, + 45 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 21588, + "bbox": [ + 6, + 392, + 416, + 87 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 18066, + "bbox": [ + 23, + 5, + 2020, + 481 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 5181, + "bbox": [ + 6, + 34, + 1980, + 316 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 166838, + "bbox": [ + 6, + 76, + 2037, + 347 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 465239, + "bbox": [ + 10, + 5, + 2033, + 372 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3354, + "bbox": [ + 533, + 380, + 99, + 70 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 1399, + "bbox": [ + 457, + 377, + 29, + 77 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 8524, + "bbox": [ + 119, + 371, + 103, + 209 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 8136, + "bbox": [ + 1543, + 341, + 93, + 206 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 471, + "bbox": [ + 499, + 389, + 17, + 40 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1171, + "bbox": [ + 538, + 377, + 34, + 77 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 6033, + "bbox": [ + 670, + 352, + 99, + 172 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 384, + "bbox": [ + 707, + 450, + 22, + 40 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 8275, + "bbox": [ + 916, + 340, + 110, + 195 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 2987, + "bbox": [ + 615, + 391, + 71, + 65 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2880, + "bbox": [ + 737, + 388, + 100, + 68 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 10349, + "bbox": [ + 1508, + 356, + 284, + 113 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 12312, + "bbox": [ + 1613, + 385, + 196, + 93 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 12272, + "bbox": [ + 769, + 388, + 262, + 114 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 232648, + "bbox": [ + 971, + 295, + 590, + 512 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 103350, + "bbox": [ + 1721, + 300, + 322, + 440 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 5581, + "bbox": [ + 686, + 328, + 106, + 111 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 624, + "bbox": [ + 6, + 477, + 19, + 45 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 79, + "bbox": [ + 505, + 411, + 6, + 20 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 495, + "bbox": [ + 548, + 414, + 17, + 48 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 10941, + "bbox": [ + 623, + 415, + 197, + 123 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 6387, + "bbox": [ + 878, + 450, + 127, + 91 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_061682_gtFine_panoptic.png", + "image_id": "frankfurt_000001_061682", + "segments_info": [ + { + "area": 788106, + "bbox": [ + 6, + 405, + 2037, + 574 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 46759, + "bbox": [ + 996, + 413, + 1047, + 124 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 31503, + "bbox": [ + 596, + 174, + 742, + 232 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 57553, + "bbox": [ + 964, + 306, + 806, + 154 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 12498, + "bbox": [ + 1105, + 330, + 938, + 134 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 23830, + "bbox": [ + 60, + 22, + 1804, + 445 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 6734, + "bbox": [ + 1680, + 119, + 194, + 111 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1577, + "bbox": [ + 830, + 306, + 1213, + 140 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 131017, + "bbox": [ + 7, + 118, + 2036, + 288 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 390462, + "bbox": [ + 11, + 5, + 2032, + 351 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 8242, + "bbox": [ + 1760, + 268, + 69, + 211 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1020, + "bbox": [ + 971, + 340, + 32, + 72 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1734, + "bbox": [ + 1005, + 337, + 33, + 81 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 4296, + "bbox": [ + 1626, + 318, + 89, + 95 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 975, + "bbox": [ + 1691, + 395, + 55, + 29 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1295, + "bbox": [ + 1714, + 432, + 54, + 41 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 134, + "bbox": [ + 1679, + 405, + 13, + 13 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 126, + "bbox": [ + 1662, + 407, + 13, + 12 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 4316, + "bbox": [ + 1157, + 314, + 61, + 144 + ], + "category_id": 25, + "id": 25005, + "iscrowd": 0 + }, + { + "area": 676, + "bbox": [ + 668, + 375, + 40, + 31 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1625, + "bbox": [ + 220, + 334, + 66, + 68 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 54712, + "bbox": [ + 273, + 340, + 292, + 246 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 137568, + "bbox": [ + 6, + 291, + 325, + 591 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 4815, + "bbox": [ + 920, + 352, + 78, + 108 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 46092, + "bbox": [ + 682, + 321, + 273, + 222 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 50434, + "bbox": [ + 328, + 173, + 283, + 330 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 2445, + "bbox": [ + 1164, + 380, + 57, + 97 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_061763_gtFine_panoptic.png", + "image_id": "frankfurt_000001_061763", + "segments_info": [ + { + "area": 661210, + "bbox": [ + 104, + 446, + 1939, + 533 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 25143, + "bbox": [ + 493, + 447, + 1550, + 151 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 41262, + "bbox": [ + 585, + 154, + 1458, + 292 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 34844, + "bbox": [ + 1220, + 356, + 823, + 168 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 12547, + "bbox": [ + 486, + 398, + 1027, + 68 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 17332, + "bbox": [ + 326, + 27, + 1673, + 431 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 6146, + "bbox": [ + 1327, + 284, + 174, + 103 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 134990, + "bbox": [ + 7, + 191, + 1942, + 251 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 433212, + "bbox": [ + 10, + 5, + 2033, + 378 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 185, + "bbox": [ + 1034, + 431, + 11, + 22 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 5164, + "bbox": [ + 1625, + 350, + 66, + 149 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 231, + "bbox": [ + 554, + 386, + 20, + 29 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 13974, + "bbox": [ + 1862, + 319, + 135, + 234 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1480, + "bbox": [ + 1178, + 399, + 43, + 54 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 964, + "bbox": [ + 1004, + 403, + 32, + 49 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1367, + "bbox": [ + 985, + 391, + 30, + 70 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 585, + "bbox": [ + 974, + 381, + 19, + 85 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 7806, + "bbox": [ + 884, + 362, + 103, + 124 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 15911, + "bbox": [ + 766, + 366, + 160, + 160 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 59336, + "bbox": [ + 502, + 378, + 324, + 227 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 17203, + "bbox": [ + 1033, + 377, + 164, + 135 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 263506, + "bbox": [ + 6, + 294, + 511, + 684 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 10921, + "bbox": [ + 1861, + 432, + 135, + 191 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_062016_gtFine_panoptic.png", + "image_id": "frankfurt_000001_062016", + "segments_info": [ + { + "area": 879321, + "bbox": [ + 6, + 419, + 2037, + 560 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 55794, + "bbox": [ + 6, + 439, + 2037, + 159 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 257671, + "bbox": [ + 549, + 9, + 1494, + 413 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 111497, + "bbox": [ + 6, + 342, + 2037, + 182 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 6933, + "bbox": [ + 667, + 409, + 203, + 52 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 23081, + "bbox": [ + 216, + 75, + 1465, + 380 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1924, + "bbox": [ + 676, + 225, + 641, + 162 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 10018, + "bbox": [ + 601, + 184, + 824, + 269 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 365583, + "bbox": [ + 6, + 5, + 2037, + 420 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 91514, + "bbox": [ + 16, + 5, + 2027, + 203 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1053, + "bbox": [ + 672, + 388, + 25, + 64 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1325, + "bbox": [ + 633, + 387, + 25, + 74 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1250, + "bbox": [ + 598, + 386, + 26, + 74 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2062, + "bbox": [ + 531, + 380, + 36, + 94 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2087, + "bbox": [ + 495, + 378, + 30, + 95 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 8616, + "bbox": [ + 58, + 359, + 117, + 162 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1675, + "bbox": [ + 1399, + 374, + 29, + 85 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 2223, + "bbox": [ + 1426, + 357, + 37, + 101 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 703, + "bbox": [ + 1169, + 392, + 47, + 33 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 479, + "bbox": [ + 1101, + 400, + 36, + 35 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 869, + "bbox": [ + 1216, + 394, + 41, + 40 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 929, + "bbox": [ + 1296, + 391, + 46, + 30 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2015, + "bbox": [ + 1234, + 399, + 59, + 41 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 6718, + "bbox": [ + 1015, + 386, + 96, + 86 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 14794, + "bbox": [ + 867, + 345, + 156, + 114 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_062250_gtFine_panoptic.png", + "image_id": "frankfurt_000001_062250", + "segments_info": [ + { + "area": 925932, + "bbox": [ + 6, + 403, + 2037, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 20469, + "bbox": [ + 6, + 404, + 2032, + 93 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 543637, + "bbox": [ + 6, + 5, + 2037, + 466 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 440, + "bbox": [ + 1515, + 385, + 58, + 34 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 6969, + "bbox": [ + 693, + 389, + 1207, + 89 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 56437, + "bbox": [ + 21, + 11, + 2022, + 541 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9705, + "bbox": [ + 208, + 85, + 1367, + 295 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 30900, + "bbox": [ + 8, + 122, + 1958, + 352 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 77753, + "bbox": [ + 840, + 151, + 881, + 300 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 41136, + "bbox": [ + 6, + 404, + 1705, + 233 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 68566, + "bbox": [ + 1168, + 13, + 571, + 247 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 390, + "bbox": [ + 1332, + 382, + 28, + 32 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 4461, + "bbox": [ + 564, + 375, + 129, + 48 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 978, + "bbox": [ + 1144, + 352, + 30, + 50 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 368, + "bbox": [ + 850, + 371, + 16, + 36 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 282, + "bbox": [ + 1406, + 367, + 22, + 29 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1387, + "bbox": [ + 1296, + 382, + 46, + 36 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 476, + "bbox": [ + 1265, + 379, + 29, + 32 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 267, + "bbox": [ + 1265, + 382, + 14, + 29 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 238, + "bbox": [ + 1229, + 371, + 36, + 15 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1034, + "bbox": [ + 1229, + 378, + 40, + 38 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 106, + "bbox": [ + 1032, + 381, + 11, + 21 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 659, + "bbox": [ + 1035, + 378, + 54, + 34 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 238, + "bbox": [ + 1015, + 379, + 18, + 21 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 832, + "bbox": [ + 864, + 373, + 38, + 38 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 3805, + "bbox": [ + 1348, + 380, + 81, + 57 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 6630, + "bbox": [ + 1447, + 383, + 107, + 76 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 377, + "bbox": [ + 675, + 377, + 53, + 14 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 96, + "bbox": [ + 751, + 374, + 22, + 15 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 4839, + "bbox": [ + 753, + 366, + 94, + 62 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 12258, + "bbox": [ + 426, + 382, + 160, + 91 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_062396_gtFine_panoptic.png", + "image_id": "frankfurt_000001_062396", + "segments_info": [ + { + "area": 833251, + "bbox": [ + 6, + 393, + 2037, + 586 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 54211, + "bbox": [ + 6, + 388, + 2037, + 277 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 649011, + "bbox": [ + 6, + 5, + 2037, + 539 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 36384, + "bbox": [ + 1357, + 428, + 686, + 181 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 23937, + "bbox": [ + 121, + 5, + 1298, + 482 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8521, + "bbox": [ + 404, + 211, + 1034, + 157 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 14857, + "bbox": [ + 497, + 180, + 902, + 242 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 67836, + "bbox": [ + 1303, + 348, + 669, + 205 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 7153, + "bbox": [ + 6, + 443, + 718, + 135 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 77584, + "bbox": [ + 133, + 5, + 443, + 231 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 8282, + "bbox": [ + 21, + 383, + 153, + 80 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 142, + "bbox": [ + 390, + 379, + 12, + 17 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1712, + "bbox": [ + 1024, + 366, + 26, + 101 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1954, + "bbox": [ + 926, + 349, + 36, + 135 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 4294, + "bbox": [ + 951, + 346, + 46, + 141 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 3492, + "bbox": [ + 991, + 363, + 42, + 121 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 244, + "bbox": [ + 1414, + 369, + 22, + 19 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 648, + "bbox": [ + 1385, + 346, + 19, + 57 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 2368, + "bbox": [ + 1356, + 363, + 48, + 66 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 306, + "bbox": [ + 493, + 373, + 29, + 21 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 570, + "bbox": [ + 436, + 373, + 29, + 24 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 822, + "bbox": [ + 405, + 373, + 36, + 26 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 464, + "bbox": [ + 533, + 379, + 24, + 57 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1697, + "bbox": [ + 535, + 376, + 78, + 67 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 4599, + "bbox": [ + 561, + 381, + 98, + 69 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 350, + "bbox": [ + 301, + 376, + 26, + 22 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 3975, + "bbox": [ + 156, + 373, + 86, + 61 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 276, + "bbox": [ + 96, + 364, + 33, + 20 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 4491, + "bbox": [ + 312, + 370, + 86, + 69 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 989, + "bbox": [ + 59, + 363, + 61, + 26 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 378, + "bbox": [ + 6, + 368, + 45, + 22 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1746, + "bbox": [ + 6, + 370, + 74, + 48 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 2319, + "bbox": [ + 1248, + 407, + 50, + 64 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1395, + "bbox": [ + 638, + 400, + 61, + 49 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_062509_gtFine_panoptic.png", + "image_id": "frankfurt_000001_062509", + "segments_info": [ + { + "area": 876681, + "bbox": [ + 6, + 410, + 2037, + 569 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 68401, + "bbox": [ + 473, + 425, + 1570, + 252 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 685726, + "bbox": [ + 6, + 5, + 2037, + 498 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 26105, + "bbox": [ + 521, + 7, + 1396, + 565 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 767, + "bbox": [ + 1104, + 290, + 218, + 89 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 6168, + "bbox": [ + 908, + 211, + 694, + 169 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 76342, + "bbox": [ + 742, + 6, + 583, + 191 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 458, + "bbox": [ + 1076, + 401, + 25, + 25 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 2412, + "bbox": [ + 1159, + 394, + 300, + 59 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 130, + "bbox": [ + 1166, + 389, + 11, + 19 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 234, + "bbox": [ + 1046, + 393, + 8, + 35 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 200, + "bbox": [ + 1032, + 397, + 10, + 32 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 420, + "bbox": [ + 769, + 393, + 20, + 47 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 517, + "bbox": [ + 755, + 391, + 16, + 50 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1869, + "bbox": [ + 1460, + 355, + 36, + 104 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2402, + "bbox": [ + 1511, + 358, + 45, + 98 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 963, + "bbox": [ + 1568, + 366, + 46, + 94 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 4925, + "bbox": [ + 1787, + 336, + 75, + 151 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 749, + "bbox": [ + 1243, + 386, + 52, + 23 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1684, + "bbox": [ + 1169, + 391, + 85, + 33 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 742, + "bbox": [ + 1266, + 393, + 47, + 27 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2690, + "bbox": [ + 843, + 392, + 69, + 49 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 9031, + "bbox": [ + 416, + 381, + 106, + 99 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 18034, + "bbox": [ + 244, + 374, + 182, + 122 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 15716, + "bbox": [ + 87, + 392, + 173, + 124 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 12120, + "bbox": [ + 6, + 387, + 108, + 138 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1408, + "bbox": [ + 6, + 462, + 21, + 96 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2938, + "bbox": [ + 1096, + 386, + 66, + 53 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 288, + "bbox": [ + 1246, + 407, + 23, + 16 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_062653_gtFine_panoptic.png", + "image_id": "frankfurt_000001_062653", + "segments_info": [ + { + "area": 780329, + "bbox": [ + 6, + 398, + 2037, + 581 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 89154, + "bbox": [ + 6, + 398, + 2037, + 316 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 659943, + "bbox": [ + 6, + 5, + 2037, + 462 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 33746, + "bbox": [ + 65, + 5, + 1962, + 625 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 12461, + "bbox": [ + 227, + 5, + 1715, + 329 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 61280, + "bbox": [ + 74, + 135, + 1236, + 418 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 6293, + "bbox": [ + 1538, + 346, + 386, + 63 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 13150, + "bbox": [ + 6, + 435, + 1353, + 219 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 1118, + "bbox": [ + 1899, + 26, + 77, + 93 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 47618, + "bbox": [ + 367, + 370, + 952, + 235 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 504, + "bbox": [ + 2024, + 369, + 19, + 89 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 266, + "bbox": [ + 1936, + 357, + 20, + 23 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3637, + "bbox": [ + 1940, + 352, + 48, + 123 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 899, + "bbox": [ + 1814, + 348, + 25, + 54 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 612, + "bbox": [ + 1522, + 361, + 21, + 50 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 283, + "bbox": [ + 1541, + 359, + 20, + 26 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 640, + "bbox": [ + 1379, + 344, + 21, + 74 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 989, + "bbox": [ + 1386, + 348, + 23, + 71 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1300, + "bbox": [ + 1402, + 343, + 30, + 79 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1639, + "bbox": [ + 1351, + 341, + 33, + 82 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1551, + "bbox": [ + 742, + 333, + 30, + 79 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 836, + "bbox": [ + 2016, + 356, + 27, + 43 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 9724, + "bbox": [ + 1123, + 346, + 175, + 92 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 13628, + "bbox": [ + 912, + 341, + 208, + 102 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 5313, + "bbox": [ + 508, + 364, + 170, + 71 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 29747, + "bbox": [ + 243, + 362, + 345, + 188 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 16386, + "bbox": [ + 573, + 369, + 175, + 194 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3249, + "bbox": [ + 1243, + 392, + 76, + 69 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_062793_gtFine_panoptic.png", + "image_id": "frankfurt_000001_062793", + "segments_info": [ + { + "area": 778647, + "bbox": [ + 6, + 470, + 2037, + 509 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 58836, + "bbox": [ + 6, + 470, + 2037, + 163 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 444427, + "bbox": [ + 6, + 5, + 2037, + 556 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 36960, + "bbox": [ + 57, + 5, + 1986, + 589 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 940, + "bbox": [ + 860, + 395, + 268, + 41 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 41621, + "bbox": [ + 10, + 25, + 2016, + 487 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 356287, + "bbox": [ + 322, + 5, + 1263, + 504 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 990, + "bbox": [ + 468, + 467, + 981, + 49 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 51659, + "bbox": [ + 889, + 8, + 402, + 311 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1185, + "bbox": [ + 1081, + 441, + 108, + 36 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 746, + "bbox": [ + 1442, + 424, + 27, + 55 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 753, + "bbox": [ + 1464, + 426, + 23, + 57 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3678, + "bbox": [ + 1484, + 409, + 47, + 115 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 3985, + "bbox": [ + 1524, + 403, + 48, + 120 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 3162, + "bbox": [ + 2002, + 335, + 41, + 224 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3912, + "bbox": [ + 1279, + 386, + 41, + 166 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1020, + "bbox": [ + 1314, + 391, + 38, + 159 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 3757, + "bbox": [ + 1343, + 388, + 37, + 166 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 3713, + "bbox": [ + 1311, + 393, + 43, + 163 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1322, + "bbox": [ + 341, + 443, + 30, + 79 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 475, + "bbox": [ + 334, + 444, + 13, + 92 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 261, + "bbox": [ + 418, + 453, + 10, + 67 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1518, + "bbox": [ + 387, + 450, + 33, + 75 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 3480, + "bbox": [ + 419, + 405, + 57, + 131 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 111, + "bbox": [ + 858, + 430, + 11, + 16 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1266, + "bbox": [ + 848, + 428, + 50, + 93 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 65, + "bbox": [ + 1024, + 453, + 13, + 10 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 628, + "bbox": [ + 1030, + 451, + 38, + 22 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 889, + "bbox": [ + 995, + 446, + 37, + 40 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3744, + "bbox": [ + 928, + 440, + 77, + 61 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 4125, + "bbox": [ + 1092, + 435, + 74, + 67 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1023, + "bbox": [ + 760, + 455, + 41, + 41 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1079, + "bbox": [ + 745, + 456, + 31, + 41 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 3493, + "bbox": [ + 667, + 435, + 78, + 68 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1795, + "bbox": [ + 660, + 453, + 40, + 55 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 5079, + "bbox": [ + 568, + 439, + 95, + 73 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 7958, + "bbox": [ + 1180, + 399, + 99, + 93 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 2447, + "bbox": [ + 846, + 450, + 49, + 82 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_063045_gtFine_panoptic.png", + "image_id": "frankfurt_000001_063045", + "segments_info": [ + { + "area": 664488, + "bbox": [ + 6, + 420, + 2037, + 559 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 212250, + "bbox": [ + 6, + 462, + 2037, + 495 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 492908, + "bbox": [ + 6, + 5, + 2037, + 493 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 16258, + "bbox": [ + 814, + 402, + 1229, + 103 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 64494, + "bbox": [ + 54, + 5, + 1750, + 599 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 12635, + "bbox": [ + 45, + 77, + 1798, + 325 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 10894, + "bbox": [ + 707, + 190, + 813, + 278 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 147163, + "bbox": [ + 730, + 18, + 1313, + 416 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 3338, + "bbox": [ + 762, + 425, + 294, + 69 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 78742, + "bbox": [ + 720, + 5, + 605, + 262 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 885, + "bbox": [ + 998, + 407, + 161, + 24 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 5454, + "bbox": [ + 144, + 432, + 166, + 79 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1137, + "bbox": [ + 1602, + 367, + 56, + 146 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 5937, + "bbox": [ + 1561, + 339, + 59, + 176 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 6401, + "bbox": [ + 1610, + 350, + 68, + 175 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 15397, + "bbox": [ + 1671, + 315, + 109, + 275 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 18985, + "bbox": [ + 1820, + 316, + 133, + 267 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 8039, + "bbox": [ + 1925, + 406, + 105, + 177 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 72, + "bbox": [ + 564, + 412, + 12, + 13 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1017, + "bbox": [ + 464, + 401, + 26, + 76 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 4090, + "bbox": [ + 159, + 392, + 51, + 129 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 853, + "bbox": [ + 1050, + 403, + 25, + 63 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 747, + "bbox": [ + 1022, + 405, + 25, + 61 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 353, + "bbox": [ + 1064, + 409, + 20, + 33 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 259, + "bbox": [ + 1153, + 415, + 17, + 33 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 619, + "bbox": [ + 1161, + 415, + 21, + 37 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 294, + "bbox": [ + 1290, + 409, + 35, + 17 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 4310, + "bbox": [ + 1179, + 364, + 91, + 115 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1856, + "bbox": [ + 1197, + 394, + 85, + 89 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 249, + "bbox": [ + 1299, + 410, + 26, + 27 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 6447, + "bbox": [ + 1205, + 410, + 108, + 80 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 199, + "bbox": [ + 856, + 420, + 34, + 10 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 224, + "bbox": [ + 813, + 419, + 24, + 15 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 52, + "bbox": [ + 700, + 422, + 11, + 13 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1113, + "bbox": [ + 677, + 422, + 35, + 48 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 4622, + "bbox": [ + 374, + 422, + 92, + 77 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 3742, + "bbox": [ + 472, + 423, + 82, + 64 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 3129, + "bbox": [ + 735, + 419, + 85, + 64 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 11442, + "bbox": [ + 534, + 410, + 155, + 99 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 8338, + "bbox": [ + 256, + 423, + 147, + 84 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 3744, + "bbox": [ + 1081, + 381, + 65, + 68 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_064130_gtFine_panoptic.png", + "image_id": "frankfurt_000001_064130", + "segments_info": [ + { + "area": 445400, + "bbox": [ + 248, + 412, + 1791, + 567 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 301451, + "bbox": [ + 6, + 448, + 2037, + 531 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 619663, + "bbox": [ + 8, + 5, + 2035, + 606 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 6398, + "bbox": [ + 638, + 375, + 541, + 74 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 27209, + "bbox": [ + 199, + 125, + 1558, + 545 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3142, + "bbox": [ + 717, + 229, + 517, + 120 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 144702, + "bbox": [ + 9, + 5, + 1419, + 446 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 29367, + "bbox": [ + 333, + 5, + 285, + 172 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 11006, + "bbox": [ + 450, + 392, + 382, + 147 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 2684, + "bbox": [ + 646, + 346, + 55, + 142 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 275, + "bbox": [ + 723, + 375, + 16, + 34 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1874, + "bbox": [ + 689, + 354, + 38, + 101 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 7008, + "bbox": [ + 275, + 393, + 104, + 122 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 8672, + "bbox": [ + 1311, + 357, + 119, + 103 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1388, + "bbox": [ + 1214, + 376, + 94, + 39 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 9779, + "bbox": [ + 1116, + 379, + 217, + 91 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 30538, + "bbox": [ + 6, + 267, + 199, + 263 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 260, + "bbox": [ + 357, + 395, + 32, + 17 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1547, + "bbox": [ + 501, + 379, + 99, + 39 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 250, + "bbox": [ + 449, + 390, + 103, + 39 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 5821, + "bbox": [ + 362, + 393, + 141, + 70 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 6466, + "bbox": [ + 821, + 389, + 228, + 71 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1244, + "bbox": [ + 1062, + 376, + 44, + 68 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 3872, + "bbox": [ + 540, + 384, + 121, + 81 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 3422, + "bbox": [ + 909, + 379, + 70, + 81 + ], + "category_id": 32, + "id": 32002, + "iscrowd": 0 + }, + { + "area": 100864, + "bbox": [ + 6, + 289, + 360, + 558 + ], + "category_id": 32, + "id": 32003, + "iscrowd": 0 + }, + { + "area": 1046, + "bbox": [ + 1076, + 411, + 64, + 76 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1118, + "bbox": [ + 887, + 401, + 29, + 60 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1205, + "bbox": [ + 831, + 400, + 39, + 63 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1571, + "bbox": [ + 574, + 401, + 75, + 70 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 4797, + "bbox": [ + 654, + 392, + 85, + 153 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 3765, + "bbox": [ + 769, + 401, + 74, + 144 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 4818, + "bbox": [ + 687, + 398, + 128, + 191 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 918, + "bbox": [ + 130, + 384, + 76, + 34 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_064305_gtFine_panoptic.png", + "image_id": "frankfurt_000001_064305", + "segments_info": [ + { + "area": 741519, + "bbox": [ + 6, + 505, + 2037, + 474 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 7021, + "bbox": [ + 6, + 518, + 411, + 41 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 626482, + "bbox": [ + 6, + 5, + 2009, + 535 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 906, + "bbox": [ + 627, + 424, + 79, + 26 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 36907, + "bbox": [ + 1367, + 368, + 676, + 117 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 16507, + "bbox": [ + 21, + 118, + 1613, + 463 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7583, + "bbox": [ + 25, + 194, + 1698, + 383 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 185767, + "bbox": [ + 558, + 18, + 1485, + 422 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 9654, + "bbox": [ + 1287, + 15, + 170, + 107 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 25204, + "bbox": [ + 1626, + 406, + 186, + 185 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1214, + "bbox": [ + 417, + 425, + 36, + 50 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 729, + "bbox": [ + 1259, + 401, + 61, + 15 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1486, + "bbox": [ + 1347, + 390, + 121, + 33 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 14380, + "bbox": [ + 1798, + 403, + 245, + 171 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1007, + "bbox": [ + 1261, + 414, + 60, + 25 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2785, + "bbox": [ + 1177, + 408, + 120, + 50 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2185, + "bbox": [ + 754, + 435, + 67, + 71 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 710, + "bbox": [ + 787, + 419, + 71, + 95 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 3500, + "bbox": [ + 795, + 417, + 95, + 127 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 25734, + "bbox": [ + 820, + 408, + 319, + 148 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 8278, + "bbox": [ + 640, + 438, + 123, + 85 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 21617, + "bbox": [ + 401, + 427, + 253, + 115 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 913, + "bbox": [ + 1178, + 411, + 82, + 58 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 2558, + "bbox": [ + 1088, + 417, + 157, + 140 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 8345, + "bbox": [ + 1035, + 406, + 93, + 163 + ], + "category_id": 32, + "id": 32002, + "iscrowd": 0 + }, + { + "area": 4011, + "bbox": [ + 1327, + 425, + 123, + 139 + ], + "category_id": 32, + "id": 32003, + "iscrowd": 0 + }, + { + "area": 27170, + "bbox": [ + 1114, + 382, + 284, + 194 + ], + "category_id": 32, + "id": 32004, + "iscrowd": 0 + }, + { + "area": 2178, + "bbox": [ + 1456, + 459, + 91, + 81 + ], + "category_id": 32, + "id": 32005, + "iscrowd": 0 + }, + { + "area": 2665, + "bbox": [ + 2012, + 414, + 31, + 177 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 10566, + "bbox": [ + 1844, + 417, + 113, + 174 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 2673, + "bbox": [ + 975, + 441, + 74, + 131 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1605, + "bbox": [ + 1519, + 430, + 109, + 139 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 17028, + "bbox": [ + 1402, + 431, + 229, + 143 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_064651_gtFine_panoptic.png", + "image_id": "frankfurt_000001_064651", + "segments_info": [ + { + "area": 766017, + "bbox": [ + 6, + 412, + 2036, + 567 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 2812, + "bbox": [ + 734, + 422, + 562, + 46 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 155908, + "bbox": [ + 9, + 5, + 1879, + 425 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5997, + "bbox": [ + 371, + 309, + 930, + 133 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 6639, + "bbox": [ + 602, + 68, + 954, + 378 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9278, + "bbox": [ + 673, + 231, + 918, + 218 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 480487, + "bbox": [ + 6, + 5, + 2037, + 425 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 73852, + "bbox": [ + 752, + 6, + 697, + 260 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 808, + "bbox": [ + 975, + 397, + 112, + 27 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 966, + "bbox": [ + 52, + 332, + 47, + 33 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1971, + "bbox": [ + 132, + 321, + 74, + 59 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 959, + "bbox": [ + 9, + 324, + 32, + 36 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 261, + "bbox": [ + 968, + 396, + 16, + 26 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 743, + "bbox": [ + 893, + 381, + 78, + 38 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 102, + "bbox": [ + 939, + 392, + 23, + 12 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1305, + "bbox": [ + 831, + 386, + 109, + 44 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 3403, + "bbox": [ + 847, + 395, + 121, + 40 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1278, + "bbox": [ + 750, + 387, + 63, + 41 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 383, + "bbox": [ + 734, + 387, + 48, + 41 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1538, + "bbox": [ + 719, + 389, + 61, + 41 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 6945, + "bbox": [ + 646, + 381, + 93, + 114 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 12377, + "bbox": [ + 540, + 359, + 133, + 150 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 20119, + "bbox": [ + 383, + 357, + 195, + 185 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 45510, + "bbox": [ + 189, + 359, + 275, + 234 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 62659, + "bbox": [ + 6, + 359, + 243, + 325 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 445, + "bbox": [ + 1033, + 400, + 30, + 17 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 120, + "bbox": [ + 1062, + 398, + 17, + 22 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 411, + "bbox": [ + 1081, + 398, + 21, + 29 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 296, + "bbox": [ + 1097, + 397, + 15, + 33 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 459, + "bbox": [ + 1105, + 395, + 36, + 41 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 451, + "bbox": [ + 1112, + 398, + 28, + 40 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 924, + "bbox": [ + 1127, + 393, + 46, + 49 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 2687, + "bbox": [ + 1146, + 395, + 65, + 51 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 9826, + "bbox": [ + 1286, + 376, + 146, + 123 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 1001, + "bbox": [ + 1368, + 393, + 53, + 114 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 20507, + "bbox": [ + 1376, + 367, + 237, + 173 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 31153, + "bbox": [ + 1490, + 387, + 226, + 199 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 64796, + "bbox": [ + 1662, + 322, + 306, + 372 + ], + "category_id": 26, + "id": 26025, + "iscrowd": 0 + }, + { + "area": 70570, + "bbox": [ + 1846, + 318, + 197, + 486 + ], + "category_id": 26, + "id": 26026, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_064798_gtFine_panoptic.png", + "image_id": "frankfurt_000001_064798", + "segments_info": [ + { + "area": 729236, + "bbox": [ + 6, + 430, + 2037, + 549 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 17176, + "bbox": [ + 6, + 538, + 258, + 144 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 436848, + "bbox": [ + 173, + 5, + 1870, + 441 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5186, + "bbox": [ + 337, + 365, + 1191, + 97 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 15317, + "bbox": [ + 6, + 385, + 1505, + 124 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 13432, + "bbox": [ + 198, + 5, + 1340, + 501 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9843, + "bbox": [ + 933, + 137, + 1110, + 257 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 233981, + "bbox": [ + 6, + 5, + 1144, + 457 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 66095, + "bbox": [ + 808, + 7, + 482, + 316 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 4312, + "bbox": [ + 1395, + 354, + 46, + 153 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 109, + "bbox": [ + 1058, + 409, + 25, + 24 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 195, + "bbox": [ + 1064, + 410, + 25, + 22 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 144, + "bbox": [ + 1070, + 416, + 15, + 15 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 419, + "bbox": [ + 1079, + 409, + 29, + 24 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 260, + "bbox": [ + 1100, + 409, + 16, + 24 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 375, + "bbox": [ + 1111, + 405, + 33, + 28 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 547, + "bbox": [ + 1124, + 406, + 37, + 27 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1472, + "bbox": [ + 1143, + 406, + 74, + 29 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 253, + "bbox": [ + 1214, + 406, + 16, + 36 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 384, + "bbox": [ + 1220, + 403, + 48, + 39 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 266, + "bbox": [ + 1228, + 408, + 19, + 37 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 920, + "bbox": [ + 1233, + 405, + 37, + 44 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 425, + "bbox": [ + 1255, + 401, + 28, + 53 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 864, + "bbox": [ + 1264, + 400, + 31, + 60 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 2468, + "bbox": [ + 1282, + 395, + 57, + 70 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 3538, + "bbox": [ + 1316, + 387, + 86, + 97 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 8929, + "bbox": [ + 1351, + 392, + 155, + 106 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 27811, + "bbox": [ + 1479, + 351, + 248, + 248 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 90091, + "bbox": [ + 1591, + 297, + 452, + 383 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 43998, + "bbox": [ + 1874, + 412, + 169, + 354 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 4954, + "bbox": [ + 6, + 434, + 39, + 163 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 132, + "bbox": [ + 1047, + 407, + 18, + 27 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 689, + "bbox": [ + 1018, + 403, + 42, + 47 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 312, + "bbox": [ + 1013, + 406, + 33, + 46 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 1001, + "bbox": [ + 987, + 405, + 54, + 50 + ], + "category_id": 26, + "id": 26025, + "iscrowd": 0 + }, + { + "area": 225, + "bbox": [ + 1004, + 419, + 17, + 36 + ], + "category_id": 26, + "id": 26026, + "iscrowd": 0 + }, + { + "area": 2872, + "bbox": [ + 941, + 401, + 74, + 76 + ], + "category_id": 26, + "id": 26027, + "iscrowd": 0 + }, + { + "area": 1069, + "bbox": [ + 931, + 403, + 40, + 79 + ], + "category_id": 26, + "id": 26028, + "iscrowd": 0 + }, + { + "area": 819, + "bbox": [ + 936, + 395, + 24, + 69 + ], + "category_id": 26, + "id": 26029, + "iscrowd": 0 + }, + { + "area": 13588, + "bbox": [ + 697, + 360, + 247, + 141 + ], + "category_id": 26, + "id": 26030, + "iscrowd": 0 + }, + { + "area": 2055, + "bbox": [ + 783, + 408, + 120, + 87 + ], + "category_id": 26, + "id": 26031, + "iscrowd": 0 + }, + { + "area": 6010, + "bbox": [ + 783, + 411, + 95, + 110 + ], + "category_id": 26, + "id": 26032, + "iscrowd": 0 + }, + { + "area": 6386, + "bbox": [ + 700, + 401, + 116, + 138 + ], + "category_id": 26, + "id": 26033, + "iscrowd": 0 + }, + { + "area": 11692, + "bbox": [ + 241, + 359, + 467, + 137 + ], + "category_id": 26, + "id": 26034, + "iscrowd": 0 + }, + { + "area": 91329, + "bbox": [ + 125, + 406, + 663, + 223 + ], + "category_id": 26, + "id": 26035, + "iscrowd": 0 + }, + { + "area": 7386, + "bbox": [ + 73, + 449, + 128, + 109 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2557, + "bbox": [ + 19, + 447, + 61, + 109 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_064925_gtFine_panoptic.png", + "image_id": "frankfurt_000001_064925", + "segments_info": [ + { + "area": 704721, + "bbox": [ + 6, + 420, + 2035, + 559 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 762, + "bbox": [ + 1183, + 449, + 104, + 15 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 547655, + "bbox": [ + 8, + 5, + 2035, + 466 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 11569, + "bbox": [ + 373, + 12, + 1057, + 445 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8015, + "bbox": [ + 314, + 240, + 1131, + 168 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 130691, + "bbox": [ + 6, + 18, + 1548, + 406 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 86426, + "bbox": [ + 574, + 5, + 564, + 321 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 427, + "bbox": [ + 905, + 412, + 24, + 30 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 258, + "bbox": [ + 875, + 408, + 11, + 28 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2205, + "bbox": [ + 1081, + 373, + 40, + 99 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 42, + "bbox": [ + 844, + 412, + 6, + 13 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 369, + "bbox": [ + 885, + 414, + 25, + 19 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 497, + "bbox": [ + 920, + 411, + 27, + 37 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 855, + "bbox": [ + 937, + 408, + 35, + 42 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1371, + "bbox": [ + 954, + 405, + 45, + 50 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 923, + "bbox": [ + 988, + 401, + 32, + 54 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1574, + "bbox": [ + 1005, + 395, + 61, + 65 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2441, + "bbox": [ + 1029, + 400, + 58, + 61 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 7750, + "bbox": [ + 1070, + 397, + 179, + 68 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 5992, + "bbox": [ + 1277, + 390, + 101, + 128 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 10207, + "bbox": [ + 1327, + 375, + 194, + 169 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 38054, + "bbox": [ + 1386, + 344, + 295, + 242 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 110392, + "bbox": [ + 1568, + 389, + 475, + 311 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 65, + "bbox": [ + 831, + 416, + 12, + 12 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 269, + "bbox": [ + 815, + 417, + 24, + 16 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 167, + "bbox": [ + 800, + 414, + 21, + 24 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 222, + "bbox": [ + 800, + 417, + 15, + 30 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 933, + "bbox": [ + 765, + 408, + 47, + 50 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 496, + "bbox": [ + 771, + 419, + 25, + 41 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 1457, + "bbox": [ + 716, + 406, + 66, + 65 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 1255, + "bbox": [ + 726, + 417, + 40, + 63 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 620, + "bbox": [ + 692, + 403, + 51, + 49 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 4133, + "bbox": [ + 647, + 403, + 100, + 133 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 11370, + "bbox": [ + 565, + 405, + 149, + 148 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 17257, + "bbox": [ + 389, + 401, + 239, + 171 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 20379, + "bbox": [ + 207, + 409, + 330, + 196 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 39211, + "bbox": [ + 164, + 420, + 298, + 234 + ], + "category_id": 26, + "id": 26025, + "iscrowd": 0 + }, + { + "area": 64748, + "bbox": [ + 6, + 379, + 242, + 345 + ], + "category_id": 26, + "id": 26026, + "iscrowd": 0 + }, + { + "area": 40, + "bbox": [ + 842, + 417, + 8, + 11 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_065160_gtFine_panoptic.png", + "image_id": "frankfurt_000001_065160", + "segments_info": [ + { + "area": 697544, + "bbox": [ + 6, + 416, + 2035, + 563 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 17533, + "bbox": [ + 532, + 427, + 1069, + 104 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 242525, + "bbox": [ + 6, + 14, + 2037, + 416 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 14186, + "bbox": [ + 519, + 362, + 1086, + 140 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 21169, + "bbox": [ + 396, + 363, + 944, + 91 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 22661, + "bbox": [ + 280, + 68, + 1257, + 444 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 12140, + "bbox": [ + 185, + 62, + 1341, + 301 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 436824, + "bbox": [ + 10, + 5, + 2033, + 475 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 47778, + "bbox": [ + 960, + 10, + 290, + 280 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 279, + "bbox": [ + 1016, + 403, + 23, + 17 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 385, + "bbox": [ + 1211, + 386, + 24, + 39 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 274, + "bbox": [ + 996, + 393, + 16, + 37 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 284, + "bbox": [ + 991, + 400, + 32, + 28 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1165, + "bbox": [ + 958, + 403, + 42, + 33 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3081, + "bbox": [ + 873, + 392, + 76, + 63 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 820, + "bbox": [ + 871, + 399, + 28, + 70 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2726, + "bbox": [ + 817, + 395, + 69, + 84 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 10064, + "bbox": [ + 728, + 393, + 126, + 98 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 175354, + "bbox": [ + 6, + 348, + 529, + 422 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 155, + "bbox": [ + 1092, + 403, + 17, + 17 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 312, + "bbox": [ + 1098, + 400, + 28, + 24 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 732, + "bbox": [ + 1109, + 398, + 51, + 57 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 899, + "bbox": [ + 1116, + 401, + 42, + 60 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 6098, + "bbox": [ + 1133, + 395, + 104, + 77 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 124795, + "bbox": [ + 1587, + 335, + 456, + 362 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 21834, + "bbox": [ + 1923, + 551, + 120, + 255 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 289, + "bbox": [ + 994, + 412, + 18, + 29 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 705, + "bbox": [ + 1247, + 409, + 26, + 48 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_065617_gtFine_panoptic.png", + "image_id": "frankfurt_000001_065617", + "segments_info": [ + { + "area": 805469, + "bbox": [ + 6, + 417, + 2037, + 562 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 57700, + "bbox": [ + 174, + 461, + 1869, + 143 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 237111, + "bbox": [ + 6, + 5, + 2037, + 400 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 8983, + "bbox": [ + 167, + 440, + 242, + 75 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 147025, + "bbox": [ + 6, + 286, + 2037, + 227 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 19014, + "bbox": [ + 277, + 40, + 1766, + 546 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 12609, + "bbox": [ + 575, + 109, + 1156, + 340 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 403472, + "bbox": [ + 74, + 7, + 1519, + 429 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 597, + "bbox": [ + 823, + 419, + 170, + 8 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 18392, + "bbox": [ + 590, + 5, + 389, + 153 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2738, + "bbox": [ + 1007, + 382, + 91, + 68 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 492, + "bbox": [ + 849, + 393, + 23, + 43 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 257, + "bbox": [ + 1097, + 379, + 21, + 53 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2417, + "bbox": [ + 1326, + 335, + 66, + 93 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 3206, + "bbox": [ + 1007, + 356, + 56, + 131 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1068, + "bbox": [ + 763, + 389, + 60, + 50 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 466, + "bbox": [ + 784, + 396, + 21, + 45 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 872, + "bbox": [ + 760, + 393, + 34, + 51 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2289, + "bbox": [ + 713, + 393, + 65, + 54 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1421, + "bbox": [ + 691, + 390, + 40, + 75 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 9853, + "bbox": [ + 589, + 375, + 120, + 107 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 23695, + "bbox": [ + 381, + 390, + 227, + 138 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 40314, + "bbox": [ + 6, + 371, + 183, + 282 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 273, + "bbox": [ + 877, + 389, + 23, + 22 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 265, + "bbox": [ + 883, + 398, + 23, + 16 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1871, + "bbox": [ + 901, + 400, + 77, + 31 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 489, + "bbox": [ + 992, + 393, + 22, + 42 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 146, + "bbox": [ + 999, + 411, + 13, + 27 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 2488, + "bbox": [ + 1103, + 387, + 60, + 100 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 5773, + "bbox": [ + 1128, + 382, + 89, + 119 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 27849, + "bbox": [ + 1179, + 367, + 219, + 167 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 1208, + "bbox": [ + 1016, + 414, + 39, + 81 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_065850_gtFine_panoptic.png", + "image_id": "frankfurt_000001_065850", + "segments_info": [ + { + "area": 705041, + "bbox": [ + 6, + 399, + 2037, + 580 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 178710, + "bbox": [ + 6, + 467, + 2037, + 302 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 57841, + "bbox": [ + 52, + 252, + 1991, + 156 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 40135, + "bbox": [ + 60, + 84, + 1901, + 594 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 275, + "bbox": [ + 1814, + 281, + 15, + 24 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 13551, + "bbox": [ + 85, + 47, + 1817, + 365 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 683289, + "bbox": [ + 6, + 5, + 2037, + 648 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 10415, + "bbox": [ + 139, + 404, + 1658, + 51 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 1006, + "bbox": [ + 534, + 346, + 27, + 44 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 614, + "bbox": [ + 909, + 363, + 51, + 19 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 1962, + "bbox": [ + 71, + 363, + 82, + 40 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 321, + "bbox": [ + 1179, + 352, + 18, + 28 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 363, + "bbox": [ + 142, + 348, + 16, + 35 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 482, + "bbox": [ + 970, + 356, + 22, + 32 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 414, + "bbox": [ + 989, + 351, + 15, + 39 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 8949, + "bbox": [ + 728, + 318, + 147, + 259 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 323, + "bbox": [ + 567, + 343, + 10, + 45 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 14083, + "bbox": [ + 777, + 326, + 150, + 259 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 26041, + "bbox": [ + 1302, + 273, + 183, + 361 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 33367, + "bbox": [ + 1195, + 242, + 156, + 412 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 535, + "bbox": [ + 2027, + 359, + 16, + 58 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 454, + "bbox": [ + 1539, + 352, + 13, + 49 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 645, + "bbox": [ + 1607, + 349, + 17, + 49 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 577, + "bbox": [ + 1496, + 348, + 19, + 50 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 1691, + "bbox": [ + 1838, + 344, + 176, + 79 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2, + "bbox": [ + 988, + 365, + 2, + 1 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 879, + "bbox": [ + 1001, + 352, + 40, + 39 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 37848, + "bbox": [ + 621, + 338, + 428, + 153 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 5086, + "bbox": [ + 356, + 379, + 78, + 133 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_066092_gtFine_panoptic.png", + "image_id": "frankfurt_000001_066092", + "segments_info": [ + { + "area": 599753, + "bbox": [ + 6, + 452, + 2037, + 527 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 4996, + "bbox": [ + 6, + 465, + 266, + 55 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 266480, + "bbox": [ + 6, + 5, + 2037, + 461 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2310, + "bbox": [ + 87, + 455, + 182, + 30 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 89593, + "bbox": [ + 84, + 310, + 1959, + 193 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 11544, + "bbox": [ + 126, + 152, + 1609, + 420 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9106, + "bbox": [ + 100, + 128, + 1593, + 139 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 31862, + "bbox": [ + 131, + 210, + 1542, + 446 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 235225, + "bbox": [ + 8, + 5, + 2035, + 613 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 191807, + "bbox": [ + 6, + 478, + 2037, + 500 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 10654, + "bbox": [ + 1901, + 341, + 102, + 204 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 7493, + "bbox": [ + 1436, + 357, + 85, + 118 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 27496, + "bbox": [ + 1210, + 370, + 235, + 158 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 109030, + "bbox": [ + 533, + 311, + 443, + 320 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 206592, + "bbox": [ + 247, + 97, + 1312, + 428 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_066438_gtFine_panoptic.png", + "image_id": "frankfurt_000001_066438", + "segments_info": [ + { + "area": 613332, + "bbox": [ + 6, + 491, + 2037, + 488 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 178474, + "bbox": [ + 98, + 488, + 1945, + 217 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 242318, + "bbox": [ + 6, + 15, + 1952, + 502 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5352, + "bbox": [ + 996, + 336, + 272, + 177 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 71257, + "bbox": [ + 916, + 285, + 1046, + 251 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 12679, + "bbox": [ + 64, + 198, + 1696, + 444 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4360, + "bbox": [ + 53, + 252, + 650, + 78 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 536130, + "bbox": [ + 7, + 5, + 1674, + 591 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 977, + "bbox": [ + 1234, + 474, + 241, + 37 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 8761, + "bbox": [ + 1671, + 337, + 89, + 215 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 549, + "bbox": [ + 365, + 390, + 14, + 64 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3663, + "bbox": [ + 625, + 356, + 48, + 112 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 6669, + "bbox": [ + 531, + 436, + 96, + 117 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 4858, + "bbox": [ + 996, + 351, + 50, + 149 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 9230, + "bbox": [ + 1038, + 346, + 103, + 225 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 4549, + "bbox": [ + 1130, + 375, + 50, + 139 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 11387, + "bbox": [ + 173, + 386, + 207, + 111 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 23424, + "bbox": [ + 6, + 357, + 101, + 307 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3415, + "bbox": [ + 468, + 415, + 109, + 93 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 4965, + "bbox": [ + 101, + 458, + 83, + 84 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 8752, + "bbox": [ + 984, + 452, + 150, + 126 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_066574_gtFine_panoptic.png", + "image_id": "frankfurt_000001_066574", + "segments_info": [ + { + "area": 686739, + "bbox": [ + 6, + 447, + 2037, + 532 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 62628, + "bbox": [ + 6, + 444, + 2037, + 114 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 369700, + "bbox": [ + 6, + 5, + 2037, + 489 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 40, + "bbox": [ + 1335, + 454, + 44, + 19 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 4342, + "bbox": [ + 60, + 436, + 158, + 47 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 36169, + "bbox": [ + 164, + 28, + 1879, + 526 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8498, + "bbox": [ + 168, + 149, + 1096, + 220 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 104779, + "bbox": [ + 129, + 101, + 1911, + 795 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 345233, + "bbox": [ + 6, + 5, + 1985, + 539 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4293, + "bbox": [ + 693, + 399, + 742, + 76 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1585, + "bbox": [ + 1599, + 337, + 47, + 70 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1322, + "bbox": [ + 840, + 385, + 26, + 90 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 807, + "bbox": [ + 1451, + 345, + 28, + 69 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 4093, + "bbox": [ + 1333, + 343, + 51, + 134 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 4789, + "bbox": [ + 1470, + 328, + 51, + 149 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 4808, + "bbox": [ + 1523, + 333, + 60, + 158 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 642, + "bbox": [ + 1284, + 354, + 26, + 41 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1851, + "bbox": [ + 813, + 385, + 42, + 92 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1441, + "bbox": [ + 669, + 380, + 39, + 99 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 2475, + "bbox": [ + 655, + 378, + 46, + 107 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1331, + "bbox": [ + 970, + 367, + 66, + 61 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2481, + "bbox": [ + 862, + 367, + 55, + 113 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 12512, + "bbox": [ + 1180, + 331, + 138, + 230 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 5166, + "bbox": [ + 721, + 409, + 127, + 68 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1784, + "bbox": [ + 1023, + 397, + 43, + 53 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2816, + "bbox": [ + 913, + 402, + 71, + 59 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 5626, + "bbox": [ + 1188, + 320, + 293, + 96 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + }, + { + "area": 569, + "bbox": [ + 283, + 428, + 76, + 39 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 382, + "bbox": [ + 639, + 425, + 20, + 52 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 3011, + "bbox": [ + 963, + 416, + 84, + 82 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 2035, + "bbox": [ + 861, + 418, + 57, + 75 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1708, + "bbox": [ + 580, + 431, + 52, + 46 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 15376, + "bbox": [ + 1129, + 439, + 250, + 141 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_066832_gtFine_panoptic.png", + "image_id": "frankfurt_000001_066832", + "segments_info": [ + { + "area": 729280, + "bbox": [ + 6, + 459, + 2037, + 520 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 17641, + "bbox": [ + 22, + 437, + 1102, + 118 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 389027, + "bbox": [ + 6, + 5, + 2037, + 491 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 7599, + "bbox": [ + 109, + 386, + 1934, + 195 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 12371, + "bbox": [ + 197, + 5, + 1817, + 502 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4327, + "bbox": [ + 820, + 111, + 172, + 232 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 12361, + "bbox": [ + 6, + 196, + 1367, + 488 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 123759, + "bbox": [ + 15, + 5, + 2028, + 457 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 38492, + "bbox": [ + 1058, + 520, + 967, + 86 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 1691, + "bbox": [ + 219, + 367, + 41, + 118 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 12695, + "bbox": [ + 1112, + 307, + 105, + 263 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 33656, + "bbox": [ + 1679, + 236, + 162, + 418 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2683, + "bbox": [ + 244, + 365, + 67, + 88 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 894, + "bbox": [ + 88, + 364, + 34, + 99 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 5900, + "bbox": [ + 966, + 341, + 73, + 157 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 3092, + "bbox": [ + 309, + 361, + 51, + 135 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 14971, + "bbox": [ + 740, + 380, + 207, + 105 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 81367, + "bbox": [ + 395, + 364, + 399, + 260 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 18990, + "bbox": [ + 1110, + 202, + 333, + 85 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 22, + "bbox": [ + 1015, + 423, + 8, + 3 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2945, + "bbox": [ + 968, + 455, + 56, + 89 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 5640, + "bbox": [ + 254, + 417, + 147, + 80 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 5650, + "bbox": [ + 137, + 418, + 117, + 85 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_067092_gtFine_panoptic.png", + "image_id": "frankfurt_000001_067092", + "segments_info": [ + { + "area": 661893, + "bbox": [ + 6, + 417, + 1954, + 562 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 298687, + "bbox": [ + 6, + 5, + 2037, + 396 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 29655, + "bbox": [ + 357, + 26, + 1615, + 385 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 6449, + "bbox": [ + 617, + 218, + 1052, + 172 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 326954, + "bbox": [ + 8, + 5, + 2035, + 396 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 13589, + "bbox": [ + 1082, + 11, + 166, + 281 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 222, + "bbox": [ + 733, + 385, + 26, + 27 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 2226, + "bbox": [ + 1276, + 391, + 69, + 64 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 116, + "bbox": [ + 689, + 377, + 11, + 14 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 41, + "bbox": [ + 1093, + 386, + 5, + 11 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 393, + "bbox": [ + 591, + 363, + 31, + 32 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 136, + "bbox": [ + 1096, + 393, + 10, + 22 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 396, + "bbox": [ + 709, + 370, + 18, + 34 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 78, + "bbox": [ + 569, + 362, + 10, + 12 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 151, + "bbox": [ + 759, + 391, + 20, + 10 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1269, + "bbox": [ + 62, + 342, + 45, + 44 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1556, + "bbox": [ + 1998, + 321, + 45, + 50 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 188, + "bbox": [ + 1565, + 369, + 16, + 17 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 304, + "bbox": [ + 1588, + 361, + 20, + 28 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 6777, + "bbox": [ + 405, + 348, + 60, + 211 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 626, + "bbox": [ + 920, + 389, + 58, + 20 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 578, + "bbox": [ + 1081, + 380, + 40, + 38 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 853, + "bbox": [ + 1092, + 400, + 30, + 38 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 649, + "bbox": [ + 1045, + 399, + 33, + 37 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 415, + "bbox": [ + 1008, + 392, + 41, + 20 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 191, + "bbox": [ + 978, + 392, + 32, + 7 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 5154, + "bbox": [ + 946, + 399, + 119, + 57 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 755, + "bbox": [ + 922, + 399, + 31, + 60 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1159, + "bbox": [ + 917, + 399, + 23, + 62 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 8376, + "bbox": [ + 779, + 368, + 139, + 104 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 7356, + "bbox": [ + 733, + 397, + 120, + 86 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 15935, + "bbox": [ + 592, + 389, + 167, + 125 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 32929, + "bbox": [ + 345, + 356, + 267, + 191 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 23081, + "bbox": [ + 103, + 374, + 283, + 198 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 68535, + "bbox": [ + 6, + 367, + 301, + 300 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 1186, + "bbox": [ + 1304, + 402, + 40, + 66 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 3758, + "bbox": [ + 1322, + 381, + 96, + 120 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 11459, + "bbox": [ + 1351, + 388, + 146, + 136 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 16201, + "bbox": [ + 1435, + 382, + 156, + 177 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 35012, + "bbox": [ + 1536, + 357, + 276, + 256 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 73981, + "bbox": [ + 1650, + 369, + 393, + 360 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 66115, + "bbox": [ + 1840, + 435, + 203, + 410 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 20832, + "bbox": [ + 1121, + 290, + 131, + 174 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_067178_gtFine_panoptic.png", + "image_id": "frankfurt_000001_067178", + "segments_info": [ + { + "area": 682814, + "bbox": [ + 6, + 420, + 2033, + 559 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 130, + "bbox": [ + 1186, + 418, + 27, + 6 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 317438, + "bbox": [ + 10, + 5, + 2033, + 413 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 11696, + "bbox": [ + 455, + 123, + 1440, + 300 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 258, + "bbox": [ + 854, + 347, + 368, + 24 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 12908, + "bbox": [ + 635, + 36, + 1294, + 338 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 280141, + "bbox": [ + 71, + 5, + 1719, + 399 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 15359, + "bbox": [ + 850, + 9, + 271, + 304 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 159, + "bbox": [ + 704, + 381, + 18, + 14 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 90, + "bbox": [ + 1414, + 367, + 11, + 11 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 376, + "bbox": [ + 1544, + 363, + 25, + 30 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 140, + "bbox": [ + 780, + 381, + 14, + 16 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 306, + "bbox": [ + 937, + 382, + 20, + 28 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 4060, + "bbox": [ + 965, + 366, + 61, + 143 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 653, + "bbox": [ + 880, + 391, + 25, + 59 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 68, + "bbox": [ + 636, + 368, + 10, + 7 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 917, + "bbox": [ + 1210, + 380, + 23, + 68 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 120, + "bbox": [ + 899, + 385, + 10, + 19 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 131, + "bbox": [ + 975, + 380, + 12, + 14 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 268, + "bbox": [ + 1006, + 373, + 19, + 26 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1714, + "bbox": [ + 929, + 394, + 70, + 56 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 811, + "bbox": [ + 866, + 394, + 48, + 53 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1162, + "bbox": [ + 854, + 397, + 35, + 55 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2981, + "bbox": [ + 785, + 387, + 79, + 69 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3071, + "bbox": [ + 758, + 397, + 68, + 69 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 4289, + "bbox": [ + 711, + 390, + 68, + 87 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 13884, + "bbox": [ + 577, + 374, + 147, + 118 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 12115, + "bbox": [ + 468, + 387, + 135, + 133 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 12731, + "bbox": [ + 401, + 375, + 104, + 165 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 102965, + "bbox": [ + 6, + 303, + 410, + 297 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2076, + "bbox": [ + 1220, + 393, + 53, + 81 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 3383, + "bbox": [ + 1247, + 371, + 132, + 115 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 12511, + "bbox": [ + 1269, + 385, + 165, + 118 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 21061, + "bbox": [ + 1369, + 392, + 198, + 177 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 91237, + "bbox": [ + 1510, + 319, + 486, + 336 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 85845, + "bbox": [ + 1766, + 332, + 277, + 494 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 20294, + "bbox": [ + 1022, + 290, + 132, + 171 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_067295_gtFine_panoptic.png", + "image_id": "frankfurt_000001_067295", + "segments_info": [ + { + "area": 796229, + "bbox": [ + 6, + 386, + 2037, + 593 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 65725, + "bbox": [ + 524, + 417, + 1519, + 284 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 400138, + "bbox": [ + 6, + 5, + 2037, + 456 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1053, + "bbox": [ + 1103, + 392, + 33, + 42 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 36405, + "bbox": [ + 253, + 19, + 1617, + 554 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4362, + "bbox": [ + 363, + 154, + 929, + 209 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 20529, + "bbox": [ + 325, + 179, + 1222, + 207 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 212237, + "bbox": [ + 11, + 5, + 1893, + 556 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 19398, + "bbox": [ + 731, + 5, + 524, + 275 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 752, + "bbox": [ + 674, + 376, + 449, + 50 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 4796, + "bbox": [ + 1330, + 392, + 85, + 93 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 442, + "bbox": [ + 1270, + 379, + 12, + 48 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2220, + "bbox": [ + 1719, + 320, + 77, + 149 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1133, + "bbox": [ + 1708, + 340, + 16, + 119 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2390, + "bbox": [ + 1716, + 346, + 61, + 140 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 322, + "bbox": [ + 692, + 383, + 15, + 47 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 628, + "bbox": [ + 698, + 383, + 20, + 49 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 142, + "bbox": [ + 1514, + 348, + 11, + 20 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 277, + "bbox": [ + 630, + 375, + 26, + 27 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 596, + "bbox": [ + 655, + 379, + 20, + 52 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 493, + "bbox": [ + 545, + 370, + 37, + 84 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 367, + "bbox": [ + 306, + 364, + 21, + 24 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 591, + "bbox": [ + 263, + 356, + 40, + 25 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 396, + "bbox": [ + 229, + 352, + 27, + 26 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 915, + "bbox": [ + 114, + 327, + 28, + 58 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 112, + "bbox": [ + 1120, + 383, + 14, + 15 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 423, + "bbox": [ + 1289, + 374, + 16, + 39 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 571, + "bbox": [ + 1205, + 378, + 17, + 47 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 138, + "bbox": [ + 1375, + 357, + 14, + 14 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 12694, + "bbox": [ + 1399, + 320, + 87, + 238 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 2522, + "bbox": [ + 1486, + 344, + 39, + 93 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 592, + "bbox": [ + 1509, + 389, + 16, + 50 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 6009, + "bbox": [ + 1874, + 326, + 63, + 177 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 8011, + "bbox": [ + 1981, + 266, + 62, + 279 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 17341, + "bbox": [ + 1918, + 304, + 108, + 266 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 2686, + "bbox": [ + 2014, + 335, + 29, + 209 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 993, + "bbox": [ + 713, + 368, + 41, + 74 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 3160, + "bbox": [ + 549, + 351, + 59, + 126 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 9449, + "bbox": [ + 422, + 319, + 88, + 202 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 110, + "bbox": [ + 920, + 374, + 28, + 8 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1334, + "bbox": [ + 919, + 378, + 37, + 53 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4053, + "bbox": [ + 842, + 356, + 88, + 102 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 17643, + "bbox": [ + 726, + 365, + 166, + 127 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 12700, + "bbox": [ + 364, + 377, + 200, + 135 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 47158, + "bbox": [ + 83, + 378, + 307, + 199 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 22896, + "bbox": [ + 6, + 335, + 104, + 278 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 670, + "bbox": [ + 942, + 356, + 26, + 31 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 22874, + "bbox": [ + 968, + 277, + 137, + 182 + ], + "category_id": 28, + "id": 28001, + "iscrowd": 0 + }, + { + "area": 1197, + "bbox": [ + 1156, + 388, + 44, + 43 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 460, + "bbox": [ + 322, + 362, + 192, + 25 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 5161, + "bbox": [ + 426, + 430, + 80, + 132 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 3071, + "bbox": [ + 541, + 413, + 65, + 111 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 93, + "bbox": [ + 1193, + 411, + 10, + 19 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 689, + "bbox": [ + 1134, + 399, + 37, + 33 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_067474_gtFine_panoptic.png", + "image_id": "frankfurt_000001_067474", + "segments_info": [ + { + "area": 845286, + "bbox": [ + 6, + 432, + 2037, + 547 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 52368, + "bbox": [ + 532, + 455, + 1511, + 78 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 577450, + "bbox": [ + 12, + 5, + 2031, + 492 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 12714, + "bbox": [ + 374, + 391, + 169, + 108 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 14552, + "bbox": [ + 74, + 88, + 1627, + 428 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8571, + "bbox": [ + 78, + 131, + 1676, + 276 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 17885, + "bbox": [ + 73, + 93, + 1301, + 411 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 144708, + "bbox": [ + 7, + 5, + 651, + 423 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 16860, + "bbox": [ + 17, + 5, + 344, + 214 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 90, + "bbox": [ + 558, + 388, + 27, + 27 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 9291, + "bbox": [ + 541, + 403, + 201, + 111 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 286, + "bbox": [ + 602, + 390, + 17, + 27 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 532, + "bbox": [ + 557, + 388, + 27, + 34 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 463, + "bbox": [ + 313, + 395, + 17, + 58 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 355, + "bbox": [ + 613, + 392, + 23, + 32 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 825, + "bbox": [ + 633, + 378, + 26, + 47 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 6578, + "bbox": [ + 874, + 332, + 81, + 172 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 5799, + "bbox": [ + 1576, + 312, + 58, + 171 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 23897, + "bbox": [ + 1830, + 249, + 118, + 352 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 26152, + "bbox": [ + 1942, + 210, + 101, + 384 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1793, + "bbox": [ + 354, + 409, + 77, + 66 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 248, + "bbox": [ + 18, + 413, + 31, + 19 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 349, + "bbox": [ + 6, + 413, + 24, + 35 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1174, + "bbox": [ + 6, + 420, + 20, + 85 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 7283, + "bbox": [ + 22, + 402, + 110, + 90 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 37463, + "bbox": [ + 123, + 275, + 200, + 220 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 7933, + "bbox": [ + 624, + 401, + 111, + 116 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_067735_gtFine_panoptic.png", + "image_id": "frankfurt_000001_067735", + "segments_info": [ + { + "area": 603407, + "bbox": [ + 6, + 384, + 2033, + 595 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 98242, + "bbox": [ + 438, + 409, + 1605, + 527 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 222737, + "bbox": [ + 6, + 5, + 2008, + 453 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2618, + "bbox": [ + 707, + 144, + 517, + 311 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1849, + "bbox": [ + 696, + 336, + 28, + 90 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 299697, + "bbox": [ + 109, + 5, + 1934, + 456 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 57177, + "bbox": [ + 940, + 9, + 293, + 267 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1517, + "bbox": [ + 1150, + 377, + 54, + 43 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 14, + "bbox": [ + 1141, + 386, + 4, + 4 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 5475, + "bbox": [ + 526, + 314, + 77, + 247 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 12383, + "bbox": [ + 423, + 317, + 187, + 307 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2910, + "bbox": [ + 660, + 396, + 97, + 66 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 13, + "bbox": [ + 1131, + 388, + 4, + 4 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 208, + "bbox": [ + 1083, + 388, + 21, + 16 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 732, + "bbox": [ + 1101, + 382, + 32, + 28 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 186, + "bbox": [ + 1014, + 389, + 15, + 25 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1028, + "bbox": [ + 1023, + 387, + 42, + 29 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 4692, + "bbox": [ + 931, + 383, + 88, + 67 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 24737, + "bbox": [ + 740, + 352, + 200, + 160 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 4224, + "bbox": [ + 590, + 402, + 67, + 84 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 185346, + "bbox": [ + 6, + 317, + 438, + 621 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 592, + "bbox": [ + 1191, + 371, + 51, + 53 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1227, + "bbox": [ + 1197, + 374, + 43, + 63 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 3024, + "bbox": [ + 1215, + 369, + 65, + 81 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 4088, + "bbox": [ + 1258, + 351, + 72, + 115 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 3041, + "bbox": [ + 1291, + 362, + 44, + 118 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 98101, + "bbox": [ + 1746, + 204, + 297, + 477 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 22585, + "bbox": [ + 420, + 380, + 158, + 264 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1814, + "bbox": [ + 390, + 425, + 62, + 87 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_068063_gtFine_panoptic.png", + "image_id": "frankfurt_000001_068063", + "segments_info": [ + { + "area": 753274, + "bbox": [ + 6, + 457, + 2035, + 522 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 69802, + "bbox": [ + 6, + 455, + 2037, + 342 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 231670, + "bbox": [ + 6, + 5, + 1624, + 498 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 8439, + "bbox": [ + 6, + 441, + 216, + 99 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 8398, + "bbox": [ + 1365, + 426, + 240, + 52 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 28181, + "bbox": [ + 6, + 5, + 1803, + 585 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 959, + "bbox": [ + 737, + 341, + 515, + 72 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 8807, + "bbox": [ + 601, + 151, + 1276, + 312 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 459290, + "bbox": [ + 78, + 15, + 1965, + 470 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 958, + "bbox": [ + 113, + 539, + 180, + 34 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 129734, + "bbox": [ + 342, + 5, + 926, + 263 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 408, + "bbox": [ + 765, + 455, + 28, + 25 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 409, + "bbox": [ + 362, + 446, + 19, + 35 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 263, + "bbox": [ + 342, + 449, + 22, + 25 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 249, + "bbox": [ + 1000, + 438, + 15, + 32 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 195, + "bbox": [ + 991, + 432, + 14, + 24 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 3862, + "bbox": [ + 7, + 447, + 59, + 133 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 209, + "bbox": [ + 1069, + 444, + 16, + 24 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 317, + "bbox": [ + 1126, + 424, + 16, + 42 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 465, + "bbox": [ + 1338, + 409, + 15, + 61 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1114, + "bbox": [ + 1346, + 406, + 29, + 68 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1086, + "bbox": [ + 1316, + 412, + 27, + 64 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 74, + "bbox": [ + 837, + 451, + 6, + 14 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 265, + "bbox": [ + 794, + 455, + 21, + 16 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 343, + "bbox": [ + 728, + 455, + 46, + 24 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 471, + "bbox": [ + 740, + 459, + 27, + 20 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1319, + "bbox": [ + 636, + 453, + 47, + 38 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 461, + "bbox": [ + 592, + 448, + 52, + 47 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1378, + "bbox": [ + 577, + 451, + 57, + 47 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1491, + "bbox": [ + 565, + 459, + 47, + 43 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1022, + "bbox": [ + 532, + 456, + 41, + 52 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2426, + "bbox": [ + 486, + 456, + 66, + 57 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2696, + "bbox": [ + 435, + 458, + 74, + 62 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 5083, + "bbox": [ + 366, + 462, + 100, + 63 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 10608, + "bbox": [ + 206, + 461, + 171, + 92 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 153, + "bbox": [ + 1048, + 444, + 21, + 21 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 250, + "bbox": [ + 1055, + 446, + 19, + 19 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 619, + "bbox": [ + 1084, + 441, + 35, + 25 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 126, + "bbox": [ + 1079, + 441, + 12, + 23 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 2546, + "bbox": [ + 1132, + 427, + 62, + 49 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 46554, + "bbox": [ + 1574, + 373, + 348, + 244 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 65908, + "bbox": [ + 1771, + 345, + 272, + 364 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_068208_gtFine_panoptic.png", + "image_id": "frankfurt_000001_068208", + "segments_info": [ + { + "area": 719512, + "bbox": [ + 6, + 378, + 2033, + 601 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 27917, + "bbox": [ + 6, + 400, + 1332, + 135 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 175986, + "bbox": [ + 12, + 5, + 2031, + 423 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4743, + "bbox": [ + 6, + 368, + 1227, + 85 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 18990, + "bbox": [ + 6, + 375, + 587, + 118 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 44945, + "bbox": [ + 111, + 5, + 1932, + 473 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7847, + "bbox": [ + 109, + 62, + 1829, + 318 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 18153, + "bbox": [ + 96, + 122, + 1899, + 329 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 685454, + "bbox": [ + 6, + 5, + 2037, + 835 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 54789, + "bbox": [ + 1311, + 551, + 730, + 376 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 54729, + "bbox": [ + 389, + 5, + 1243, + 264 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2458, + "bbox": [ + 417, + 373, + 130, + 30 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 432, + "bbox": [ + 364, + 378, + 16, + 41 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 190, + "bbox": [ + 533, + 376, + 17, + 27 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1467, + "bbox": [ + 739, + 365, + 28, + 83 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2945, + "bbox": [ + 1017, + 363, + 44, + 114 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2124, + "bbox": [ + 1075, + 376, + 56, + 103 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 59, + "bbox": [ + 1354, + 381, + 9, + 11 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 228, + "bbox": [ + 1933, + 392, + 19, + 22 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1338, + "bbox": [ + 376, + 369, + 45, + 41 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 886, + "bbox": [ + 319, + 386, + 43, + 34 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 696, + "bbox": [ + 1233, + 391, + 27, + 38 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 254, + "bbox": [ + 1354, + 390, + 72, + 42 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 593, + "bbox": [ + 1449, + 398, + 32, + 22 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 949, + "bbox": [ + 1355, + 390, + 59, + 46 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2996, + "bbox": [ + 263, + 380, + 71, + 54 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1170, + "bbox": [ + 1347, + 394, + 49, + 43 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 832, + "bbox": [ + 1334, + 399, + 32, + 44 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2536, + "bbox": [ + 1279, + 397, + 68, + 46 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1296, + "bbox": [ + 606, + 392, + 46, + 46 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1949, + "bbox": [ + 797, + 394, + 71, + 46 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_068682_gtFine_panoptic.png", + "image_id": "frankfurt_000001_068682", + "segments_info": [ + { + "area": 718971, + "bbox": [ + 6, + 394, + 1977, + 585 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 218537, + "bbox": [ + 6, + 420, + 2037, + 537 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 158448, + "bbox": [ + 81, + 5, + 1962, + 496 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 69376, + "bbox": [ + 485, + 257, + 1558, + 266 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 9695, + "bbox": [ + 1167, + 325, + 319, + 91 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 20805, + "bbox": [ + 264, + 16, + 1441, + 486 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3566, + "bbox": [ + 514, + 205, + 856, + 186 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 528978, + "bbox": [ + 6, + 5, + 1941, + 490 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 72171, + "bbox": [ + 711, + 5, + 371, + 354 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 68, + "bbox": [ + 897, + 406, + 6, + 14 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 4244, + "bbox": [ + 771, + 391, + 272, + 59 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 770, + "bbox": [ + 1185, + 370, + 31, + 67 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 171, + "bbox": [ + 1208, + 361, + 19, + 52 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1460, + "bbox": [ + 1212, + 361, + 38, + 85 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2863, + "bbox": [ + 1282, + 345, + 62, + 122 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 829, + "bbox": [ + 692, + 397, + 23, + 57 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 676, + "bbox": [ + 674, + 402, + 17, + 53 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 886, + "bbox": [ + 167, + 428, + 27, + 55 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4492, + "bbox": [ + 183, + 425, + 93, + 56 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3819, + "bbox": [ + 280, + 412, + 93, + 65 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 4783, + "bbox": [ + 367, + 413, + 119, + 61 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 224, + "bbox": [ + 879, + 410, + 19, + 13 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 362, + "bbox": [ + 921, + 391, + 26, + 28 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 334, + "bbox": [ + 922, + 404, + 22, + 19 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 138, + "bbox": [ + 998, + 402, + 10, + 20 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1592, + "bbox": [ + 949, + 398, + 52, + 39 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 368, + "bbox": [ + 1036, + 399, + 21, + 26 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 18023, + "bbox": [ + 6, + 401, + 143, + 153 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 727, + "bbox": [ + 1049, + 397, + 32, + 29 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_068772_gtFine_panoptic.png", + "image_id": "frankfurt_000001_068772", + "segments_info": [ + { + "area": 541405, + "bbox": [ + 6, + 422, + 1955, + 557 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 185217, + "bbox": [ + 527, + 431, + 1516, + 526 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 280868, + "bbox": [ + 6, + 5, + 1476, + 450 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 9012, + "bbox": [ + 1230, + 417, + 290, + 82 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 170599, + "bbox": [ + 1230, + 159, + 813, + 400 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 4560, + "bbox": [ + 184, + 219, + 1167, + 290 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 184, + "bbox": [ + 775, + 385, + 167, + 29 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 8108, + "bbox": [ + 820, + 157, + 551, + 252 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 312981, + "bbox": [ + 543, + 9, + 1500, + 443 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 63050, + "bbox": [ + 584, + 5, + 364, + 364 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 278, + "bbox": [ + 913, + 411, + 29, + 17 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 199, + "bbox": [ + 809, + 415, + 11, + 23 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 169, + "bbox": [ + 821, + 410, + 9, + 27 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 5032, + "bbox": [ + 1358, + 316, + 77, + 186 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 8609, + "bbox": [ + 1306, + 333, + 100, + 177 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 152, + "bbox": [ + 929, + 407, + 11, + 26 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 143, + "bbox": [ + 796, + 420, + 16, + 15 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 175, + "bbox": [ + 783, + 423, + 17, + 13 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 135, + "bbox": [ + 755, + 419, + 14, + 16 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 167, + "bbox": [ + 730, + 419, + 29, + 24 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 335, + "bbox": [ + 731, + 422, + 25, + 27 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 411, + "bbox": [ + 722, + 423, + 22, + 30 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 527, + "bbox": [ + 688, + 422, + 43, + 36 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 237, + "bbox": [ + 697, + 425, + 20, + 33 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 635, + "bbox": [ + 680, + 425, + 31, + 35 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 905, + "bbox": [ + 650, + 424, + 43, + 42 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 757, + "bbox": [ + 637, + 426, + 34, + 44 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1313, + "bbox": [ + 604, + 425, + 52, + 49 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1221, + "bbox": [ + 582, + 427, + 50, + 58 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1540, + "bbox": [ + 562, + 428, + 47, + 63 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 3971, + "bbox": [ + 490, + 423, + 93, + 76 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 2077, + "bbox": [ + 440, + 424, + 89, + 81 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 624, + "bbox": [ + 446, + 437, + 45, + 28 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 216039, + "bbox": [ + 6, + 354, + 579, + 484 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 21, + "bbox": [ + 888, + 415, + 6, + 7 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 100, + "bbox": [ + 879, + 415, + 12, + 9 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 97, + "bbox": [ + 849, + 412, + 23, + 22 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 973, + "bbox": [ + 833, + 414, + 37, + 32 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 431, + "bbox": [ + 892, + 412, + 24, + 20 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 173, + "bbox": [ + 941, + 407, + 23, + 24 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 112, + "bbox": [ + 949, + 410, + 15, + 25 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 252, + "bbox": [ + 958, + 405, + 20, + 33 + ], + "category_id": 26, + "id": 26025, + "iscrowd": 0 + }, + { + "area": 280, + "bbox": [ + 964, + 406, + 17, + 31 + ], + "category_id": 26, + "id": 26026, + "iscrowd": 0 + }, + { + "area": 387, + "bbox": [ + 975, + 402, + 36, + 39 + ], + "category_id": 26, + "id": 26027, + "iscrowd": 0 + }, + { + "area": 743, + "bbox": [ + 980, + 405, + 35, + 38 + ], + "category_id": 26, + "id": 26028, + "iscrowd": 0 + }, + { + "area": 954, + "bbox": [ + 1007, + 399, + 47, + 50 + ], + "category_id": 26, + "id": 26029, + "iscrowd": 0 + }, + { + "area": 667, + "bbox": [ + 1041, + 399, + 29, + 49 + ], + "category_id": 26, + "id": 26030, + "iscrowd": 0 + }, + { + "area": 781, + "bbox": [ + 1066, + 393, + 24, + 56 + ], + "category_id": 26, + "id": 26031, + "iscrowd": 0 + }, + { + "area": 343, + "bbox": [ + 861, + 401, + 19, + 27 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 89, + "bbox": [ + 931, + 425, + 8, + 15 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_069633_gtFine_panoptic.png", + "image_id": "frankfurt_000001_069633", + "segments_info": [ + { + "area": 707135, + "bbox": [ + 6, + 435, + 2037, + 544 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 57218, + "bbox": [ + 6, + 474, + 2037, + 218 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 668033, + "bbox": [ + 6, + 5, + 2037, + 553 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 36631, + "bbox": [ + 10, + 83, + 1823, + 534 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 11961, + "bbox": [ + 8, + 185, + 1771, + 132 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 11853, + "bbox": [ + 450, + 138, + 1324, + 299 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 25483, + "bbox": [ + 697, + 279, + 410, + 202 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 107419, + "bbox": [ + 721, + 5, + 497, + 384 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 839, + "bbox": [ + 927, + 441, + 241, + 44 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 595, + "bbox": [ + 623, + 434, + 26, + 34 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1764, + "bbox": [ + 417, + 446, + 42, + 90 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1654, + "bbox": [ + 390, + 454, + 50, + 83 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 3404, + "bbox": [ + 145, + 414, + 58, + 127 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 6911, + "bbox": [ + 52, + 390, + 85, + 167 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 6365, + "bbox": [ + 1699, + 378, + 83, + 228 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 13850, + "bbox": [ + 1806, + 370, + 91, + 244 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 8819, + "bbox": [ + 1878, + 380, + 81, + 242 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 4757, + "bbox": [ + 1967, + 401, + 70, + 113 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 267, + "bbox": [ + 2037, + 481, + 6, + 64 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 495, + "bbox": [ + 2004, + 515, + 20, + 47 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 247, + "bbox": [ + 951, + 441, + 22, + 14 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 347, + "bbox": [ + 909, + 444, + 24, + 21 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 197, + "bbox": [ + 863, + 443, + 14, + 24 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1174, + "bbox": [ + 871, + 442, + 45, + 32 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 289, + "bbox": [ + 849, + 442, + 17, + 28 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 869, + "bbox": [ + 814, + 440, + 41, + 33 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 917, + "bbox": [ + 732, + 441, + 107, + 35 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 450, + "bbox": [ + 770, + 442, + 18, + 46 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2204, + "bbox": [ + 649, + 439, + 81, + 59 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 5426, + "bbox": [ + 510, + 439, + 118, + 75 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 379, + "bbox": [ + 1064, + 439, + 39, + 32 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 101, + "bbox": [ + 1160, + 442, + 15, + 17 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 104, + "bbox": [ + 1233, + 443, + 15, + 11 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 152, + "bbox": [ + 1242, + 437, + 39, + 19 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 1004, + "bbox": [ + 1246, + 439, + 73, + 38 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 2643, + "bbox": [ + 1259, + 443, + 65, + 81 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 1763, + "bbox": [ + 1294, + 429, + 82, + 75 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 69089, + "bbox": [ + 1291, + 411, + 380, + 238 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 415, + "bbox": [ + 1166, + 424, + 47, + 23 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 2972, + "bbox": [ + 1069, + 442, + 69, + 57 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 11524, + "bbox": [ + 948, + 437, + 131, + 110 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 9515, + "bbox": [ + 1137, + 444, + 134, + 94 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 1438, + "bbox": [ + 622, + 447, + 64, + 55 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 9577, + "bbox": [ + 170, + 478, + 177, + 97 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3273, + "bbox": [ + 1788, + 477, + 56, + 119 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_070099_gtFine_panoptic.png", + "image_id": "frankfurt_000001_070099", + "segments_info": [ + { + "area": 453327, + "bbox": [ + 6, + 424, + 2035, + 540 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 20814, + "bbox": [ + 6, + 404, + 1252, + 145 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 247321, + "bbox": [ + 6, + 5, + 2037, + 479 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 38482, + "bbox": [ + 196, + 5, + 1771, + 487 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 12791, + "bbox": [ + 181, + 186, + 1689, + 186 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 15764, + "bbox": [ + 747, + 168, + 941, + 223 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 390748, + "bbox": [ + 364, + 5, + 1640, + 414 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 28801, + "bbox": [ + 485, + 5, + 565, + 261 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2128, + "bbox": [ + 651, + 354, + 86, + 141 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 4683, + "bbox": [ + 658, + 344, + 74, + 155 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 4488, + "bbox": [ + 1829, + 319, + 52, + 139 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1815, + "bbox": [ + 1857, + 341, + 60, + 71 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 552, + "bbox": [ + 880, + 395, + 30, + 28 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1063, + "bbox": [ + 558, + 383, + 52, + 48 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 502, + "bbox": [ + 564, + 388, + 20, + 65 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 5986, + "bbox": [ + 473, + 375, + 102, + 86 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 7009, + "bbox": [ + 342, + 381, + 124, + 97 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 15818, + "bbox": [ + 178, + 386, + 213, + 102 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 4103, + "bbox": [ + 6, + 391, + 43, + 134 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1158, + "bbox": [ + 1200, + 386, + 75, + 33 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 3046, + "bbox": [ + 1258, + 370, + 79, + 73 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 26365, + "bbox": [ + 1301, + 303, + 222, + 240 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 661, + "bbox": [ + 1793, + 371, + 39, + 75 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 79503, + "bbox": [ + 1423, + 325, + 407, + 286 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 947, + "bbox": [ + 1161, + 382, + 40, + 51 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 979, + "bbox": [ + 1136, + 357, + 59, + 98 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 72275, + "bbox": [ + 869, + 324, + 329, + 302 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 107836, + "bbox": [ + 1705, + 323, + 338, + 479 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_071288_gtFine_panoptic.png", + "image_id": "frankfurt_000001_071288", + "segments_info": [ + { + "area": 644593, + "bbox": [ + 6, + 419, + 2037, + 560 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 1156, + "bbox": [ + 794, + 407, + 143, + 28 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 76050, + "bbox": [ + 130, + 17, + 1475, + 384 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 12124, + "bbox": [ + 817, + 27, + 1169, + 413 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1288, + "bbox": [ + 885, + 295, + 436, + 46 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4456, + "bbox": [ + 830, + 257, + 623, + 124 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 669498, + "bbox": [ + 6, + 5, + 2037, + 509 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 130031, + "bbox": [ + 6, + 409, + 989, + 410 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 68032, + "bbox": [ + 813, + 7, + 586, + 279 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 760, + "bbox": [ + 1133, + 386, + 25, + 49 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1518, + "bbox": [ + 355, + 368, + 90, + 24 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 443, + "bbox": [ + 992, + 382, + 30, + 79 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 78, + "bbox": [ + 1103, + 389, + 23, + 7 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 98, + "bbox": [ + 1108, + 392, + 15, + 11 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 464, + "bbox": [ + 1113, + 388, + 27, + 46 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 561, + "bbox": [ + 1124, + 382, + 100, + 45 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3140, + "bbox": [ + 1143, + 376, + 84, + 61 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1920, + "bbox": [ + 1211, + 382, + 94, + 77 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 3632, + "bbox": [ + 1229, + 386, + 85, + 84 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 5746, + "bbox": [ + 1273, + 380, + 101, + 105 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 9724, + "bbox": [ + 1329, + 374, + 162, + 133 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 16892, + "bbox": [ + 1398, + 371, + 204, + 167 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 44252, + "bbox": [ + 1507, + 363, + 337, + 226 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 86604, + "bbox": [ + 1712, + 337, + 331, + 357 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 9979, + "bbox": [ + 995, + 375, + 127, + 101 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_071781_gtFine_panoptic.png", + "image_id": "frankfurt_000001_071781", + "segments_info": [ + { + "area": 792843, + "bbox": [ + 6, + 458, + 2037, + 521 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 55850, + "bbox": [ + 6, + 445, + 2037, + 163 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 165388, + "bbox": [ + 163, + 18, + 1880, + 395 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 9118, + "bbox": [ + 1818, + 480, + 225, + 67 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 31600, + "bbox": [ + 1621, + 366, + 422, + 127 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 33487, + "bbox": [ + 6, + 5, + 2023, + 578 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 13205, + "bbox": [ + 499, + 126, + 1544, + 273 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 553215, + "bbox": [ + 6, + 5, + 2037, + 473 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 31436, + "bbox": [ + 6, + 436, + 1004, + 89 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 70554, + "bbox": [ + 600, + 5, + 842, + 273 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1268, + "bbox": [ + 708, + 383, + 28, + 77 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 341, + "bbox": [ + 1186, + 410, + 72, + 57 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1218, + "bbox": [ + 1186, + 415, + 68, + 48 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 323, + "bbox": [ + 1211, + 420, + 37, + 43 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 918, + "bbox": [ + 1216, + 425, + 48, + 58 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 3081, + "bbox": [ + 1234, + 406, + 92, + 83 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3886, + "bbox": [ + 1277, + 399, + 134, + 98 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 6099, + "bbox": [ + 1296, + 414, + 107, + 110 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 14158, + "bbox": [ + 1369, + 387, + 263, + 148 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 40101, + "bbox": [ + 1447, + 409, + 377, + 150 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 24558, + "bbox": [ + 1003, + 390, + 203, + 157 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_072155_gtFine_panoptic.png", + "image_id": "frankfurt_000001_072155", + "segments_info": [ + { + "area": 638103, + "bbox": [ + 37, + 405, + 2006, + 574 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 24829, + "bbox": [ + 1140, + 430, + 903, + 215 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 44688, + "bbox": [ + 7, + 125, + 1574, + 299 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 6382, + "bbox": [ + 6, + 309, + 326, + 66 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 2769, + "bbox": [ + 1245, + 409, + 98, + 42 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 30762, + "bbox": [ + 155, + 23, + 1812, + 521 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9149, + "bbox": [ + 242, + 239, + 1713, + 119 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 13010, + "bbox": [ + 246, + 196, + 1668, + 211 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 668300, + "bbox": [ + 6, + 5, + 2037, + 486 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 189277, + "bbox": [ + 6, + 424, + 1040, + 420 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 58209, + "bbox": [ + 1130, + 15, + 901, + 294 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 813, + "bbox": [ + 722, + 358, + 35, + 41 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 393, + "bbox": [ + 516, + 354, + 30, + 21 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 173, + "bbox": [ + 244, + 369, + 37, + 13 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1719, + "bbox": [ + 172, + 367, + 77, + 47 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 183, + "bbox": [ + 1154, + 414, + 16, + 24 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 224, + "bbox": [ + 1219, + 410, + 11, + 33 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2420, + "bbox": [ + 1160, + 404, + 62, + 49 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 24246, + "bbox": [ + 1752, + 392, + 267, + 184 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 24958, + "bbox": [ + 1876, + 392, + 167, + 213 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 175, + "bbox": [ + 1051, + 416, + 16, + 14 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2133, + "bbox": [ + 1061, + 404, + 62, + 45 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1420, + "bbox": [ + 12, + 357, + 83, + 48 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 7571, + "bbox": [ + 74, + 345, + 130, + 71 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_072295_gtFine_panoptic.png", + "image_id": "frankfurt_000001_072295", + "segments_info": [ + { + "area": 604819, + "bbox": [ + 156, + 416, + 1887, + 563 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 23397, + "bbox": [ + 1216, + 427, + 827, + 215 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 173369, + "bbox": [ + 22, + 20, + 2021, + 377 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 14703, + "bbox": [ + 322, + 22, + 1371, + 441 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2619, + "bbox": [ + 783, + 256, + 817, + 137 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 3677, + "bbox": [ + 680, + 310, + 835, + 110 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 608460, + "bbox": [ + 6, + 5, + 2037, + 761 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 78904, + "bbox": [ + 6, + 420, + 981, + 462 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 113523, + "bbox": [ + 86, + 11, + 1510, + 264 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1875, + "bbox": [ + 1260, + 407, + 68, + 37 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 328, + "bbox": [ + 964, + 386, + 50, + 45 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 645, + "bbox": [ + 698, + 387, + 29, + 32 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 283, + "bbox": [ + 872, + 380, + 49, + 10 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1694, + "bbox": [ + 1012, + 402, + 66, + 33 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1645, + "bbox": [ + 1163, + 399, + 53, + 40 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1504, + "bbox": [ + 1316, + 401, + 44, + 62 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2554, + "bbox": [ + 1338, + 397, + 88, + 74 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2793, + "bbox": [ + 1373, + 399, + 62, + 81 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 10734, + "bbox": [ + 1410, + 389, + 139, + 101 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 16314, + "bbox": [ + 1522, + 389, + 185, + 132 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 31985, + "bbox": [ + 1659, + 385, + 284, + 168 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 28780, + "bbox": [ + 1857, + 392, + 186, + 215 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 16255, + "bbox": [ + 219, + 281, + 997, + 69 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_073088_gtFine_panoptic.png", + "image_id": "frankfurt_000001_073088", + "segments_info": [ + { + "area": 728185, + "bbox": [ + 6, + 478, + 2037, + 501 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 88827, + "bbox": [ + 6, + 443, + 1304, + 175 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 108339, + "bbox": [ + 12, + 5, + 1073, + 483 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 194834, + "bbox": [ + 502, + 344, + 1541, + 249 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 40020, + "bbox": [ + 64, + 5, + 1157, + 590 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2374, + "bbox": [ + 1134, + 119, + 59, + 92 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 34911, + "bbox": [ + 247, + 52, + 1796, + 559 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 155851, + "bbox": [ + 10, + 5, + 984, + 439 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 3998, + "bbox": [ + 6, + 476, + 152, + 47 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 122281, + "bbox": [ + 152, + 5, + 1779, + 354 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1415, + "bbox": [ + 208, + 442, + 45, + 50 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 178, + "bbox": [ + 164, + 439, + 11, + 25 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 8671, + "bbox": [ + 1075, + 351, + 94, + 222 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 8297, + "bbox": [ + 1008, + 336, + 71, + 236 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 83, + "bbox": [ + 174, + 449, + 9, + 13 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 776, + "bbox": [ + 182, + 432, + 40, + 43 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 292, + "bbox": [ + 209, + 432, + 36, + 31 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 236, + "bbox": [ + 309, + 418, + 46, + 8 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1432, + "bbox": [ + 242, + 422, + 102, + 70 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 558, + "bbox": [ + 260, + 430, + 75, + 21 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 686, + "bbox": [ + 235, + 447, + 53, + 37 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1745, + "bbox": [ + 269, + 413, + 234, + 44 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 15962, + "bbox": [ + 252, + 419, + 285, + 90 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_073243_gtFine_panoptic.png", + "image_id": "frankfurt_000001_073243", + "segments_info": [ + { + "area": 809412, + "bbox": [ + 6, + 405, + 2037, + 574 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 172475, + "bbox": [ + 38, + 5, + 1923, + 428 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 15806, + "bbox": [ + 6, + 359, + 817, + 59 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 3242, + "bbox": [ + 886, + 261, + 557, + 151 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 79, + "bbox": [ + 1151, + 315, + 7, + 13 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 3183, + "bbox": [ + 918, + 249, + 551, + 133 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 533614, + "bbox": [ + 6, + 5, + 2037, + 542 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 8707, + "bbox": [ + 1918, + 531, + 125, + 101 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 19399, + "bbox": [ + 942, + 9, + 429, + 263 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 152, + "bbox": [ + 1024, + 392, + 9, + 21 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 839, + "bbox": [ + 1155, + 367, + 25, + 65 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 476, + "bbox": [ + 1047, + 385, + 38, + 25 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 278, + "bbox": [ + 1047, + 395, + 20, + 17 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 259, + "bbox": [ + 1130, + 387, + 26, + 20 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 118, + "bbox": [ + 1121, + 389, + 13, + 25 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1984, + "bbox": [ + 1073, + 386, + 58, + 42 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 164, + "bbox": [ + 1143, + 390, + 15, + 17 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 190, + "bbox": [ + 1008, + 388, + 17, + 24 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 530, + "bbox": [ + 1023, + 381, + 25, + 30 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 305, + "bbox": [ + 991, + 397, + 31, + 21 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 228, + "bbox": [ + 991, + 398, + 17, + 22 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 910, + "bbox": [ + 932, + 389, + 64, + 39 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 446, + "bbox": [ + 936, + 394, + 38, + 20 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 626, + "bbox": [ + 939, + 411, + 36, + 25 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1182, + "bbox": [ + 895, + 388, + 52, + 52 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 799, + "bbox": [ + 897, + 399, + 28, + 47 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 672, + "bbox": [ + 814, + 387, + 86, + 24 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 916, + "bbox": [ + 831, + 394, + 76, + 56 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 1357, + "bbox": [ + 851, + 402, + 50, + 52 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 1457, + "bbox": [ + 768, + 393, + 97, + 53 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 1555, + "bbox": [ + 722, + 393, + 136, + 61 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 2114, + "bbox": [ + 775, + 424, + 78, + 53 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 3159, + "bbox": [ + 722, + 399, + 85, + 70 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 488, + "bbox": [ + 725, + 409, + 29, + 38 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 1396, + "bbox": [ + 448, + 389, + 120, + 23 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 1043, + "bbox": [ + 514, + 406, + 47, + 49 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 12859, + "bbox": [ + 323, + 397, + 224, + 153 + ], + "category_id": 26, + "id": 26025, + "iscrowd": 0 + }, + { + "area": 6540, + "bbox": [ + 289, + 404, + 176, + 157 + ], + "category_id": 26, + "id": 26026, + "iscrowd": 0 + }, + { + "area": 29042, + "bbox": [ + 43, + 404, + 384, + 196 + ], + "category_id": 26, + "id": 26027, + "iscrowd": 0 + }, + { + "area": 48698, + "bbox": [ + 6, + 416, + 296, + 225 + ], + "category_id": 26, + "id": 26028, + "iscrowd": 0 + }, + { + "area": 31551, + "bbox": [ + 523, + 378, + 249, + 179 + ], + "category_id": 26, + "id": 26029, + "iscrowd": 0 + }, + { + "area": 150, + "bbox": [ + 1154, + 376, + 30, + 40 + ], + "category_id": 26, + "id": 26030, + "iscrowd": 0 + }, + { + "area": 1462, + "bbox": [ + 1179, + 373, + 69, + 35 + ], + "category_id": 26, + "id": 26031, + "iscrowd": 0 + }, + { + "area": 229, + "bbox": [ + 1178, + 403, + 24, + 25 + ], + "category_id": 26, + "id": 26032, + "iscrowd": 0 + }, + { + "area": 221, + "bbox": [ + 1187, + 409, + 35, + 22 + ], + "category_id": 26, + "id": 26033, + "iscrowd": 0 + }, + { + "area": 1468, + "bbox": [ + 1194, + 388, + 51, + 46 + ], + "category_id": 26, + "id": 26034, + "iscrowd": 0 + }, + { + "area": 1564, + "bbox": [ + 1239, + 375, + 43, + 59 + ], + "category_id": 26, + "id": 26035, + "iscrowd": 0 + }, + { + "area": 13174, + "bbox": [ + 1261, + 356, + 150, + 115 + ], + "category_id": 26, + "id": 26036, + "iscrowd": 0 + }, + { + "area": 29439, + "bbox": [ + 1391, + 319, + 582, + 216 + ], + "category_id": 26, + "id": 26037, + "iscrowd": 0 + }, + { + "area": 100942, + "bbox": [ + 1435, + 334, + 503, + 274 + ], + "category_id": 26, + "id": 26038, + "iscrowd": 0 + }, + { + "area": 262, + "bbox": [ + 1166, + 399, + 9, + 37 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_073464_gtFine_panoptic.png", + "image_id": "frankfurt_000001_073464", + "segments_info": [ + { + "area": 781200, + "bbox": [ + 6, + 404, + 2036, + 575 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 1497, + "bbox": [ + 698, + 405, + 594, + 57 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 383444, + "bbox": [ + 6, + 5, + 2026, + 400 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 960, + "bbox": [ + 101, + 365, + 46, + 23 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 16714, + "bbox": [ + 6, + 345, + 1945, + 100 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 19084, + "bbox": [ + 125, + 5, + 1660, + 434 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2912, + "bbox": [ + 435, + 97, + 935, + 257 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 17392, + "bbox": [ + 99, + 174, + 1695, + 183 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 253649, + "bbox": [ + 6, + 7, + 2037, + 407 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 28006, + "bbox": [ + 633, + 5, + 343, + 270 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 545, + "bbox": [ + 803, + 382, + 24, + 53 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 12283, + "bbox": [ + 1197, + 287, + 95, + 269 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 138, + "bbox": [ + 973, + 382, + 15, + 11 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 881, + "bbox": [ + 914, + 375, + 60, + 29 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 114, + "bbox": [ + 951, + 393, + 12, + 16 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 325, + "bbox": [ + 933, + 390, + 22, + 23 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 755, + "bbox": [ + 900, + 388, + 39, + 28 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 232, + "bbox": [ + 899, + 394, + 13, + 25 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2323, + "bbox": [ + 850, + 363, + 51, + 59 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 407, + "bbox": [ + 840, + 392, + 24, + 31 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 394, + "bbox": [ + 832, + 392, + 18, + 34 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 325, + "bbox": [ + 824, + 391, + 13, + 36 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 11, + "bbox": [ + 807, + 388, + 6, + 17 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 626, + "bbox": [ + 764, + 386, + 48, + 45 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2285, + "bbox": [ + 731, + 389, + 70, + 46 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 2755, + "bbox": [ + 537, + 388, + 107, + 97 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 11439, + "bbox": [ + 392, + 387, + 222, + 112 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 18065, + "bbox": [ + 150, + 378, + 409, + 150 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 2906, + "bbox": [ + 336, + 453, + 99, + 94 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 27175, + "bbox": [ + 118, + 388, + 284, + 184 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 26418, + "bbox": [ + 6, + 379, + 224, + 226 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 13990, + "bbox": [ + 6, + 398, + 92, + 230 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 28956, + "bbox": [ + 959, + 357, + 222, + 168 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 11188, + "bbox": [ + 1284, + 358, + 205, + 151 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 24558, + "bbox": [ + 1364, + 355, + 296, + 194 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 53507, + "bbox": [ + 1484, + 350, + 449, + 228 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 97084, + "bbox": [ + 1682, + 349, + 361, + 425 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 802, + "bbox": [ + 629, + 391, + 54, + 21 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 268, + "bbox": [ + 803, + 405, + 22, + 31 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 5493, + "bbox": [ + 1219, + 434, + 64, + 148 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_073911_gtFine_panoptic.png", + "image_id": "frankfurt_000001_073911", + "segments_info": [ + { + "area": 799248, + "bbox": [ + 6, + 412, + 2037, + 567 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 67052, + "bbox": [ + 6, + 430, + 2037, + 251 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 532352, + "bbox": [ + 6, + 5, + 2037, + 553 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 23243, + "bbox": [ + 317, + 466, + 515, + 120 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 30050, + "bbox": [ + 35, + 27, + 1980, + 606 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 10380, + "bbox": [ + 9, + 114, + 118, + 144 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 8601, + "bbox": [ + 217, + 280, + 1809, + 252 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 240015, + "bbox": [ + 398, + 9, + 1350, + 481 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 631, + "bbox": [ + 1162, + 475, + 60, + 20 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 43912, + "bbox": [ + 1362, + 16, + 485, + 330 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 901, + "bbox": [ + 1535, + 395, + 208, + 42 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 5905, + "bbox": [ + 876, + 369, + 53, + 174 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 248, + "bbox": [ + 1557, + 401, + 31, + 28 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 97, + "bbox": [ + 1535, + 403, + 24, + 10 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 226, + "bbox": [ + 1531, + 403, + 42, + 27 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 608, + "bbox": [ + 1506, + 402, + 38, + 38 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 390, + "bbox": [ + 1509, + 414, + 25, + 27 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 729, + "bbox": [ + 1442, + 399, + 74, + 48 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 861, + "bbox": [ + 1458, + 404, + 50, + 43 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 996, + "bbox": [ + 1423, + 405, + 68, + 47 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 885, + "bbox": [ + 1329, + 399, + 145, + 55 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1809, + "bbox": [ + 1372, + 405, + 84, + 53 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 329, + "bbox": [ + 1390, + 430, + 42, + 35 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1186, + "bbox": [ + 1364, + 409, + 60, + 57 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2047, + "bbox": [ + 1312, + 406, + 87, + 64 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 4884, + "bbox": [ + 1259, + 406, + 104, + 70 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 7449, + "bbox": [ + 1142, + 406, + 144, + 79 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 11407, + "bbox": [ + 1023, + 406, + 143, + 101 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 18017, + "bbox": [ + 826, + 393, + 210, + 135 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 327, + "bbox": [ + 1742, + 393, + 20, + 25 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 496, + "bbox": [ + 1753, + 394, + 26, + 34 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 996, + "bbox": [ + 1768, + 391, + 41, + 43 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 395, + "bbox": [ + 1790, + 394, + 26, + 48 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 1452, + "bbox": [ + 1797, + 385, + 51, + 69 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 556, + "bbox": [ + 1819, + 381, + 130, + 90 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 10565, + "bbox": [ + 1818, + 379, + 129, + 101 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 16529, + "bbox": [ + 1567, + 377, + 165, + 123 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 8936, + "bbox": [ + 497, + 411, + 189, + 158 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_075296_gtFine_panoptic.png", + "image_id": "frankfurt_000001_075296", + "segments_info": [ + { + "area": 797963, + "bbox": [ + 6, + 386, + 2036, + 593 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 81047, + "bbox": [ + 6, + 405, + 2037, + 362 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 478569, + "bbox": [ + 6, + 5, + 2037, + 545 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 14232, + "bbox": [ + 273, + 64, + 1629, + 556 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 429, + "bbox": [ + 882, + 291, + 299, + 76 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 11601, + "bbox": [ + 1141, + 24, + 813, + 344 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 227470, + "bbox": [ + 6, + 5, + 1113, + 494 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4123, + "bbox": [ + 6, + 493, + 280, + 68 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 50789, + "bbox": [ + 702, + 9, + 519, + 307 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 189, + "bbox": [ + 1003, + 371, + 13, + 21 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 464, + "bbox": [ + 974, + 376, + 182, + 22 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 6066, + "bbox": [ + 6, + 400, + 242, + 100 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 6055, + "bbox": [ + 1390, + 369, + 65, + 159 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2218, + "bbox": [ + 626, + 350, + 55, + 76 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 308, + "bbox": [ + 983, + 377, + 21, + 27 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 592, + "bbox": [ + 952, + 375, + 31, + 28 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1515, + "bbox": [ + 912, + 373, + 47, + 38 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 265, + "bbox": [ + 888, + 373, + 18, + 32 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 93, + "bbox": [ + 889, + 383, + 10, + 18 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 269, + "bbox": [ + 864, + 394, + 35, + 24 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 8691, + "bbox": [ + 706, + 334, + 183, + 88 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 448, + "bbox": [ + 769, + 376, + 86, + 50 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1008, + "bbox": [ + 786, + 378, + 59, + 47 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2720, + "bbox": [ + 711, + 373, + 94, + 59 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1446, + "bbox": [ + 712, + 374, + 47, + 54 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 3980, + "bbox": [ + 567, + 359, + 161, + 87 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 58, + "bbox": [ + 560, + 367, + 139, + 84 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 4473, + "bbox": [ + 448, + 363, + 252, + 88 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 9959, + "bbox": [ + 337, + 370, + 301, + 92 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 27107, + "bbox": [ + 6, + 341, + 381, + 167 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 440, + "bbox": [ + 1149, + 376, + 37, + 38 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 173, + "bbox": [ + 1160, + 377, + 26, + 42 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 561, + "bbox": [ + 1159, + 378, + 26, + 48 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 1227, + "bbox": [ + 1173, + 371, + 67, + 61 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 1612, + "bbox": [ + 1188, + 375, + 65, + 68 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 1506, + "bbox": [ + 1212, + 377, + 41, + 81 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 1380, + "bbox": [ + 1236, + 356, + 106, + 107 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 1472, + "bbox": [ + 1242, + 368, + 84, + 100 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 2445, + "bbox": [ + 1248, + 371, + 75, + 106 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 28867, + "bbox": [ + 1268, + 310, + 235, + 207 + ], + "category_id": 26, + "id": 26025, + "iscrowd": 0 + }, + { + "area": 16336, + "bbox": [ + 985, + 361, + 172, + 127 + ], + "category_id": 26, + "id": 26026, + "iscrowd": 0 + }, + { + "area": 265, + "bbox": [ + 710, + 416, + 26, + 26 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1801, + "bbox": [ + 630, + 395, + 46, + 77 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 3087, + "bbox": [ + 1556, + 402, + 63, + 118 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_075984_gtFine_panoptic.png", + "image_id": "frankfurt_000001_075984", + "segments_info": [ + { + "area": 311964, + "bbox": [ + 245, + 464, + 1795, + 495 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 253490, + "bbox": [ + 6, + 476, + 1513, + 503 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 544987, + "bbox": [ + 14, + 5, + 2029, + 494 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 10958, + "bbox": [ + 759, + 471, + 606, + 79 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 17581, + "bbox": [ + 166, + 8, + 1299, + 530 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2130, + "bbox": [ + 270, + 267, + 478, + 148 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 729, + "bbox": [ + 705, + 332, + 222, + 110 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 100997, + "bbox": [ + 7, + 100, + 1624, + 403 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 108299, + "bbox": [ + 206, + 5, + 1186, + 333 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 575, + "bbox": [ + 536, + 459, + 31, + 22 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 407, + "bbox": [ + 330, + 460, + 19, + 43 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 86, + "bbox": [ + 753, + 441, + 12, + 12 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 727, + "bbox": [ + 759, + 436, + 26, + 69 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 212, + "bbox": [ + 605, + 451, + 16, + 22 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 358, + "bbox": [ + 642, + 449, + 18, + 38 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1817, + "bbox": [ + 726, + 439, + 46, + 87 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 2056, + "bbox": [ + 849, + 427, + 46, + 112 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 131, + "bbox": [ + 661, + 455, + 13, + 12 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 375, + "bbox": [ + 683, + 437, + 24, + 21 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 95, + "bbox": [ + 672, + 457, + 13, + 21 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 124, + "bbox": [ + 619, + 456, + 11, + 18 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 386, + "bbox": [ + 626, + 454, + 21, + 23 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 173, + "bbox": [ + 556, + 458, + 22, + 20 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 600, + "bbox": [ + 573, + 458, + 33, + 22 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 275, + "bbox": [ + 346, + 462, + 15, + 25 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1266, + "bbox": [ + 673, + 454, + 49, + 37 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 35814, + "bbox": [ + 909, + 428, + 326, + 152 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 305942, + "bbox": [ + 1474, + 266, + 569, + 653 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 23443, + "bbox": [ + 340, + 320, + 198, + 200 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + }, + { + "area": 216, + "bbox": [ + 605, + 470, + 16, + 17 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 235, + "bbox": [ + 646, + 472, + 15, + 23 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 709, + "bbox": [ + 739, + 476, + 15, + 57 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1869, + "bbox": [ + 850, + 475, + 46, + 72 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_076502_gtFine_panoptic.png", + "image_id": "frankfurt_000001_076502", + "segments_info": [ + { + "area": 780475, + "bbox": [ + 6, + 403, + 2036, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 89358, + "bbox": [ + 6, + 409, + 2037, + 363 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 538691, + "bbox": [ + 6, + 5, + 2037, + 486 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3451, + "bbox": [ + 351, + 464, + 168, + 57 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 23233, + "bbox": [ + 1827, + 434, + 216, + 223 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 63457, + "bbox": [ + 134, + 5, + 1735, + 575 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 21158, + "bbox": [ + 89, + 48, + 1797, + 317 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 5834, + "bbox": [ + 75, + 106, + 1521, + 274 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 110164, + "bbox": [ + 346, + 103, + 1300, + 380 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 389, + "bbox": [ + 809, + 461, + 63, + 9 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 53401, + "bbox": [ + 1040, + 11, + 492, + 246 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1688, + "bbox": [ + 792, + 375, + 40, + 83 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1793, + "bbox": [ + 239, + 345, + 67, + 68 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1565, + "bbox": [ + 253, + 386, + 41, + 57 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1601, + "bbox": [ + 279, + 389, + 41, + 54 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2928, + "bbox": [ + 180, + 343, + 43, + 98 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 925, + "bbox": [ + 1694, + 391, + 33, + 88 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2886, + "bbox": [ + 1745, + 332, + 40, + 161 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 5649, + "bbox": [ + 1770, + 334, + 48, + 162 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 13391, + "bbox": [ + 1212, + 307, + 82, + 273 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 19917, + "bbox": [ + 1125, + 288, + 102, + 313 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 280, + "bbox": [ + 1151, + 382, + 17, + 46 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 15523, + "bbox": [ + 480, + 296, + 145, + 284 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 16, + "bbox": [ + 1376, + 391, + 5, + 5 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 57, + "bbox": [ + 1370, + 392, + 9, + 11 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 74, + "bbox": [ + 1358, + 391, + 16, + 14 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 154, + "bbox": [ + 1356, + 392, + 13, + 15 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 245, + "bbox": [ + 1341, + 387, + 16, + 22 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 135, + "bbox": [ + 1335, + 387, + 12, + 22 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 178, + "bbox": [ + 1316, + 386, + 24, + 18 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 244, + "bbox": [ + 1276, + 385, + 45, + 12 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 482, + "bbox": [ + 1312, + 395, + 26, + 23 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1078, + "bbox": [ + 1277, + 390, + 39, + 33 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 44, + "bbox": [ + 1217, + 391, + 4, + 21 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 904, + "bbox": [ + 1124, + 393, + 32, + 35 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1195, + "bbox": [ + 1002, + 391, + 84, + 53 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1066, + "bbox": [ + 996, + 391, + 77, + 56 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 2729, + "bbox": [ + 864, + 389, + 184, + 58 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 308, + "bbox": [ + 1377, + 390, + 31, + 21 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 3490, + "bbox": [ + 1377, + 374, + 121, + 55 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 1107, + "bbox": [ + 1492, + 382, + 80, + 49 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 3998, + "bbox": [ + 1450, + 383, + 85, + 63 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 301, + "bbox": [ + 1152, + 402, + 16, + 36 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 36681, + "bbox": [ + 376, + 422, + 329, + 195 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_077092_gtFine_panoptic.png", + "image_id": "frankfurt_000001_077092", + "segments_info": [ + { + "area": 826533, + "bbox": [ + 6, + 413, + 2037, + 566 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 3870, + "bbox": [ + 930, + 405, + 692, + 111 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 343894, + "bbox": [ + 6, + 5, + 2037, + 481 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 14823, + "bbox": [ + 220, + 27, + 1792, + 368 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 102, + "bbox": [ + 1222, + 314, + 8, + 13 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 17153, + "bbox": [ + 1259, + 27, + 784, + 328 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 337992, + "bbox": [ + 219, + 5, + 1824, + 405 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 647, + "bbox": [ + 988, + 167, + 39, + 33 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 458, + "bbox": [ + 1091, + 395, + 31, + 21 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 49, + "bbox": [ + 1096, + 389, + 11, + 6 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 151, + "bbox": [ + 1126, + 391, + 9, + 23 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 309, + "bbox": [ + 965, + 383, + 16, + 27 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1126, + "bbox": [ + 1559, + 363, + 47, + 56 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 8314, + "bbox": [ + 1476, + 339, + 74, + 187 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2802, + "bbox": [ + 1544, + 411, + 78, + 111 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 6940, + "bbox": [ + 1620, + 334, + 72, + 177 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 236, + "bbox": [ + 1132, + 386, + 18, + 21 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 229, + "bbox": [ + 1183, + 386, + 13, + 30 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1219, + "bbox": [ + 962, + 391, + 69, + 35 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3078, + "bbox": [ + 999, + 391, + 102, + 39 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 379, + "bbox": [ + 936, + 397, + 25, + 34 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1120, + "bbox": [ + 896, + 391, + 54, + 45 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 475, + "bbox": [ + 885, + 395, + 38, + 43 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1329, + "bbox": [ + 865, + 391, + 46, + 43 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 489, + "bbox": [ + 847, + 411, + 40, + 33 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2812, + "bbox": [ + 792, + 373, + 78, + 76 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1640, + "bbox": [ + 799, + 389, + 38, + 62 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 5799, + "bbox": [ + 651, + 369, + 157, + 92 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 3290, + "bbox": [ + 686, + 386, + 75, + 79 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 5938, + "bbox": [ + 631, + 382, + 84, + 90 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 15269, + "bbox": [ + 318, + 344, + 321, + 146 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 8464, + "bbox": [ + 463, + 383, + 124, + 120 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 15396, + "bbox": [ + 220, + 366, + 290, + 139 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 9546, + "bbox": [ + 251, + 389, + 177, + 151 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 27735, + "bbox": [ + 6, + 368, + 335, + 185 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 23547, + "bbox": [ + 6, + 390, + 220, + 209 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 7998, + "bbox": [ + 6, + 394, + 61, + 192 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 362, + "bbox": [ + 1197, + 392, + 14, + 48 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 571, + "bbox": [ + 1205, + 388, + 56, + 55 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 987, + "bbox": [ + 1210, + 393, + 35, + 56 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 2482, + "bbox": [ + 1227, + 391, + 54, + 73 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 5877, + "bbox": [ + 1258, + 381, + 89, + 104 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 14686, + "bbox": [ + 1318, + 374, + 153, + 124 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 7900, + "bbox": [ + 1557, + 374, + 214, + 135 + ], + "category_id": 26, + "id": 26025, + "iscrowd": 0 + }, + { + "area": 113275, + "bbox": [ + 1617, + 362, + 426, + 352 + ], + "category_id": 26, + "id": 26026, + "iscrowd": 0 + }, + { + "area": 2806, + "bbox": [ + 1166, + 369, + 118, + 45 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + }, + { + "area": 415, + "bbox": [ + 1133, + 401, + 23, + 27 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 106, + "bbox": [ + 1185, + 403, + 8, + 19 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_077233_gtFine_panoptic.png", + "image_id": "frankfurt_000001_077233", + "segments_info": [ + { + "area": 782761, + "bbox": [ + 6, + 421, + 2036, + 558 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 9360, + "bbox": [ + 6, + 438, + 1368, + 144 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 528427, + "bbox": [ + 6, + 5, + 2037, + 470 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19173, + "bbox": [ + 34, + 5, + 1774, + 542 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1928, + "bbox": [ + 1107, + 214, + 233, + 168 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 17298, + "bbox": [ + 192, + 23, + 1640, + 367 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 160405, + "bbox": [ + 834, + 15, + 1098, + 352 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 10620, + "bbox": [ + 630, + 5, + 187, + 94 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 382, + "bbox": [ + 1134, + 392, + 16, + 35 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 133, + "bbox": [ + 1149, + 396, + 9, + 26 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 733, + "bbox": [ + 769, + 393, + 21, + 55 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 573, + "bbox": [ + 745, + 397, + 21, + 49 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 931, + "bbox": [ + 705, + 383, + 26, + 72 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1213, + "bbox": [ + 722, + 390, + 25, + 75 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 158, + "bbox": [ + 647, + 385, + 14, + 17 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 157, + "bbox": [ + 598, + 389, + 16, + 12 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 2702, + "bbox": [ + 389, + 394, + 52, + 105 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 2739, + "bbox": [ + 340, + 380, + 50, + 113 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 189, + "bbox": [ + 265, + 380, + 17, + 14 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 293, + "bbox": [ + 138, + 391, + 18, + 19 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 775, + "bbox": [ + 1154, + 383, + 24, + 53 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1264, + "bbox": [ + 803, + 394, + 29, + 58 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 10230, + "bbox": [ + 538, + 400, + 147, + 87 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 9507, + "bbox": [ + 6, + 407, + 146, + 103 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 41285, + "bbox": [ + 76, + 394, + 300, + 189 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1619, + "bbox": [ + 1204, + 382, + 40, + 76 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 10211, + "bbox": [ + 1229, + 366, + 125, + 109 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 34091, + "bbox": [ + 1352, + 358, + 307, + 222 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 83078, + "bbox": [ + 1511, + 350, + 468, + 334 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 85957, + "bbox": [ + 1785, + 313, + 258, + 469 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 32051, + "bbox": [ + 808, + 230, + 227, + 234 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + }, + { + "area": 134, + "bbox": [ + 1162, + 413, + 10, + 31 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_077434_gtFine_panoptic.png", + "image_id": "frankfurt_000001_077434", + "segments_info": [ + { + "area": 622666, + "bbox": [ + 6, + 450, + 1806, + 529 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 186444, + "bbox": [ + 6, + 438, + 2037, + 519 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 563978, + "bbox": [ + 6, + 5, + 2037, + 649 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3528, + "bbox": [ + 970, + 416, + 336, + 33 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 22075, + "bbox": [ + 182, + 7, + 1160, + 581 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3932, + "bbox": [ + 188, + 288, + 1055, + 98 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 7465, + "bbox": [ + 188, + 27, + 1180, + 416 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 181698, + "bbox": [ + 142, + 5, + 709, + 444 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 36, + "bbox": [ + 726, + 401, + 10, + 6 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 336, + "bbox": [ + 1105, + 386, + 14, + 34 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1315, + "bbox": [ + 998, + 389, + 29, + 81 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1580, + "bbox": [ + 1074, + 388, + 36, + 84 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 508, + "bbox": [ + 1111, + 400, + 44, + 74 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 5563, + "bbox": [ + 1207, + 350, + 59, + 161 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 24888, + "bbox": [ + 1312, + 261, + 91, + 386 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 37623, + "bbox": [ + 1527, + 223, + 149, + 473 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 2037, + "bbox": [ + 1119, + 376, + 47, + 100 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1051, + "bbox": [ + 699, + 386, + 33, + 67 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 26833, + "bbox": [ + 839, + 302, + 165, + 360 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 656, + "bbox": [ + 195, + 397, + 77, + 57 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1817, + "bbox": [ + 179, + 407, + 95, + 48 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 587, + "bbox": [ + 378, + 411, + 35, + 48 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 6127, + "bbox": [ + 284, + 397, + 122, + 68 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2989, + "bbox": [ + 735, + 403, + 118, + 55 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3000, + "bbox": [ + 654, + 406, + 141, + 53 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 39046, + "bbox": [ + 382, + 271, + 219, + 226 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 588, + "bbox": [ + 1041, + 403, + 39, + 35 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 585, + "bbox": [ + 618, + 417, + 27, + 34 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1129, + "bbox": [ + 697, + 414, + 48, + 46 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 8325, + "bbox": [ + 889, + 448, + 108, + 226 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_078803_gtFine_panoptic.png", + "image_id": "frankfurt_000001_078803", + "segments_info": [ + { + "area": 557719, + "bbox": [ + 95, + 389, + 1912, + 590 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 123723, + "bbox": [ + 622, + 407, + 1411, + 444 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 84998, + "bbox": [ + 155, + 5, + 1879, + 479 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 248952, + "bbox": [ + 6, + 265, + 2037, + 713 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 85822, + "bbox": [ + 6, + 332, + 1749, + 248 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 58559, + "bbox": [ + 141, + 5, + 1734, + 576 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3533, + "bbox": [ + 604, + 154, + 739, + 202 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 434963, + "bbox": [ + 6, + 5, + 2037, + 509 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 67, + "bbox": [ + 989, + 388, + 9, + 11 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 131849, + "bbox": [ + 150, + 5, + 1042, + 260 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 54, + "bbox": [ + 938, + 368, + 9, + 7 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 18, + "bbox": [ + 950, + 370, + 5, + 4 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 438, + "bbox": [ + 713, + 364, + 17, + 55 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 6442, + "bbox": [ + 663, + 336, + 56, + 161 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1982, + "bbox": [ + 800, + 354, + 46, + 88 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 181, + "bbox": [ + 997, + 376, + 21, + 14 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 179, + "bbox": [ + 972, + 378, + 17, + 23 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3051, + "bbox": [ + 910, + 374, + 74, + 55 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 411, + "bbox": [ + 1013, + 375, + 21, + 24 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 356, + "bbox": [ + 1032, + 364, + 44, + 27 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 491, + "bbox": [ + 1029, + 374, + 27, + 49 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1265, + "bbox": [ + 1035, + 370, + 51, + 66 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 5053, + "bbox": [ + 1053, + 373, + 105, + 74 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 9533, + "bbox": [ + 1660, + 347, + 166, + 116 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 22246, + "bbox": [ + 1962, + 573, + 81, + 384 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_079206_gtFine_panoptic.png", + "image_id": "frankfurt_000001_079206", + "segments_info": [ + { + "area": 722556, + "bbox": [ + 6, + 432, + 2035, + 547 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 148240, + "bbox": [ + 339, + 450, + 1704, + 386 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 270245, + "bbox": [ + 6, + 5, + 2037, + 567 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 41490, + "bbox": [ + 860, + 326, + 812, + 126 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 27627, + "bbox": [ + 318, + 391, + 1423, + 150 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 21327, + "bbox": [ + 44, + 16, + 1496, + 536 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4748, + "bbox": [ + 20, + 254, + 455, + 99 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 47373, + "bbox": [ + 47, + 18, + 1531, + 414 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 345986, + "bbox": [ + 8, + 5, + 1733, + 450 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1174, + "bbox": [ + 332, + 437, + 177, + 17 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 89742, + "bbox": [ + 302, + 5, + 1483, + 228 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 5866, + "bbox": [ + 1405, + 388, + 76, + 157 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 4244, + "bbox": [ + 1617, + 348, + 41, + 147 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 849, + "bbox": [ + 535, + 367, + 45, + 40 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 607, + "bbox": [ + 979, + 374, + 32, + 36 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 30699, + "bbox": [ + 65, + 377, + 279, + 180 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 8687, + "bbox": [ + 16, + 376, + 133, + 197 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 16358, + "bbox": [ + 6, + 374, + 95, + 244 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 235, + "bbox": [ + 559, + 460, + 146, + 8 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 9468, + "bbox": [ + 510, + 385, + 247, + 86 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 11630, + "bbox": [ + 820, + 388, + 182, + 84 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 14615, + "bbox": [ + 989, + 374, + 165, + 112 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 162, + "bbox": [ + 508, + 406, + 35, + 59 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1595, + "bbox": [ + 1356, + 394, + 68, + 137 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_080091_gtFine_panoptic.png", + "image_id": "frankfurt_000001_080091", + "segments_info": [ + { + "area": 583639, + "bbox": [ + 333, + 410, + 1710, + 567 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 177008, + "bbox": [ + 6, + 414, + 2037, + 565 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 522103, + "bbox": [ + 11, + 5, + 2032, + 409 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19459, + "bbox": [ + 651, + 8, + 1161, + 435 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2182, + "bbox": [ + 856, + 205, + 849, + 176 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 20465, + "bbox": [ + 709, + 145, + 958, + 353 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 82980, + "bbox": [ + 649, + 23, + 1244, + 418 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4453, + "bbox": [ + 655, + 5, + 148, + 67 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1945, + "bbox": [ + 841, + 340, + 36, + 108 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 912, + "bbox": [ + 1732, + 361, + 47, + 33 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 222, + "bbox": [ + 821, + 381, + 49, + 20 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 591, + "bbox": [ + 896, + 378, + 60, + 34 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1629, + "bbox": [ + 949, + 381, + 67, + 39 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 12034, + "bbox": [ + 711, + 343, + 139, + 194 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 48942, + "bbox": [ + 475, + 300, + 308, + 295 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 253404, + "bbox": [ + 6, + 109, + 592, + 663 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2571, + "bbox": [ + 1092, + 369, + 74, + 55 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 3577, + "bbox": [ + 1031, + 386, + 79, + 58 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1650, + "bbox": [ + 1134, + 390, + 50, + 53 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2897, + "bbox": [ + 1167, + 388, + 64, + 71 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 7810, + "bbox": [ + 1209, + 371, + 117, + 109 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 28808, + "bbox": [ + 1578, + 379, + 231, + 160 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 55128, + "bbox": [ + 1281, + 336, + 313, + 225 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 27670, + "bbox": [ + 1829, + 368, + 214, + 160 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 1914, + "bbox": [ + 853, + 379, + 82, + 69 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_080391_gtFine_panoptic.png", + "image_id": "frankfurt_000001_080391", + "segments_info": [ + { + "area": 798402, + "bbox": [ + 6, + 343, + 2037, + 636 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 42833, + "bbox": [ + 6, + 337, + 2037, + 267 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 267204, + "bbox": [ + 6, + 5, + 2037, + 466 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 15597, + "bbox": [ + 703, + 276, + 211, + 148 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 10314, + "bbox": [ + 1135, + 326, + 908, + 71 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 20313, + "bbox": [ + 63, + 22, + 1973, + 470 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 314, + "bbox": [ + 1299, + 273, + 250, + 84 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 14337, + "bbox": [ + 1083, + 180, + 903, + 224 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 344046, + "bbox": [ + 6, + 5, + 2037, + 693 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 32937, + "bbox": [ + 6, + 396, + 2003, + 397 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 105849, + "bbox": [ + 1236, + 14, + 807, + 230 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 141, + "bbox": [ + 1464, + 352, + 9, + 21 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 97, + "bbox": [ + 996, + 352, + 12, + 12 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 230, + "bbox": [ + 968, + 350, + 23, + 16 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 168, + "bbox": [ + 934, + 355, + 13, + 21 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2579, + "bbox": [ + 697, + 327, + 46, + 105 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 198, + "bbox": [ + 1381, + 364, + 18, + 22 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 579, + "bbox": [ + 1397, + 359, + 48, + 18 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 960, + "bbox": [ + 1440, + 373, + 38, + 33 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2875, + "bbox": [ + 1380, + 371, + 68, + 53 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 162, + "bbox": [ + 1181, + 339, + 18, + 14 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 198, + "bbox": [ + 1250, + 350, + 31, + 15 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 390, + "bbox": [ + 1270, + 365, + 37, + 16 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 678, + "bbox": [ + 1281, + 377, + 34, + 36 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 97, + "bbox": [ + 1283, + 380, + 13, + 26 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 813, + "bbox": [ + 1215, + 354, + 55, + 19 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 625, + "bbox": [ + 1262, + 373, + 30, + 41 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 983, + "bbox": [ + 1223, + 369, + 54, + 56 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 478, + "bbox": [ + 1223, + 370, + 33, + 48 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 934, + "bbox": [ + 1225, + 376, + 28, + 56 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 6875, + "bbox": [ + 1043, + 350, + 187, + 106 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 2885, + "bbox": [ + 1098, + 369, + 91, + 93 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 1920, + "bbox": [ + 1112, + 384, + 55, + 84 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 19171, + "bbox": [ + 855, + 363, + 280, + 115 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 105063, + "bbox": [ + 150, + 349, + 544, + 266 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 1206, + "bbox": [ + 1624, + 376, + 37, + 54 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 7759, + "bbox": [ + 1526, + 364, + 112, + 86 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_080830_gtFine_panoptic.png", + "image_id": "frankfurt_000001_080830", + "segments_info": [ + { + "area": 604460, + "bbox": [ + 6, + 427, + 1911, + 552 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 256428, + "bbox": [ + 6, + 413, + 2037, + 544 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 202024, + "bbox": [ + 6, + 5, + 2010, + 430 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2252, + "bbox": [ + 1338, + 371, + 200, + 53 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 45037, + "bbox": [ + 679, + 364, + 1364, + 127 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 27439, + "bbox": [ + 127, + 5, + 1548, + 481 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1396, + "bbox": [ + 890, + 248, + 497, + 126 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 6012, + "bbox": [ + 635, + 300, + 524, + 173 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 447564, + "bbox": [ + 535, + 5, + 1508, + 504 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 37449, + "bbox": [ + 1338, + 420, + 705, + 177 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 82333, + "bbox": [ + 556, + 5, + 1468, + 395 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 216, + "bbox": [ + 977, + 410, + 14, + 25 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 384, + "bbox": [ + 1076, + 387, + 15, + 43 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 174, + "bbox": [ + 971, + 409, + 11, + 24 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2065, + "bbox": [ + 1008, + 391, + 59, + 43 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 11935, + "bbox": [ + 551, + 381, + 146, + 127 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 997, + "bbox": [ + 419, + 366, + 136, + 30 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 14147, + "bbox": [ + 352, + 371, + 241, + 165 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 16441, + "bbox": [ + 366, + 387, + 169, + 173 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 32472, + "bbox": [ + 14, + 354, + 394, + 234 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 44360, + "bbox": [ + 15, + 366, + 267, + 269 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 19172, + "bbox": [ + 6, + 364, + 96, + 323 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2848, + "bbox": [ + 1474, + 318, + 133, + 62 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 180, + "bbox": [ + 1338, + 377, + 44, + 56 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_082087_gtFine_panoptic.png", + "image_id": "frankfurt_000001_082087", + "segments_info": [ + { + "area": 434244, + "bbox": [ + 360, + 358, + 1648, + 615 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 202123, + "bbox": [ + 6, + 365, + 1296, + 614 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 627899, + "bbox": [ + 6, + 5, + 2037, + 456 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 306876, + "bbox": [ + 6, + 353, + 2037, + 604 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 10152, + "bbox": [ + 871, + 8, + 571, + 407 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 96, + "bbox": [ + 1027, + 312, + 75, + 32 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 42113, + "bbox": [ + 909, + 295, + 1133, + 399 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 30245, + "bbox": [ + 289, + 183, + 875, + 237 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 33817, + "bbox": [ + 793, + 6, + 431, + 208 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 87, + "bbox": [ + 1093, + 352, + 8, + 18 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 153, + "bbox": [ + 1339, + 374, + 15, + 20 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 110, + "bbox": [ + 1355, + 369, + 15, + 13 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 173, + "bbox": [ + 1397, + 368, + 17, + 14 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 215, + "bbox": [ + 915, + 374, + 13, + 27 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 113, + "bbox": [ + 888, + 377, + 10, + 16 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 428, + "bbox": [ + 908, + 362, + 20, + 37 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 304, + "bbox": [ + 1093, + 341, + 20, + 18 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 319, + "bbox": [ + 1073, + 355, + 21, + 18 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1039, + "bbox": [ + 1121, + 345, + 37, + 38 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 114, + "bbox": [ + 1142, + 367, + 11, + 24 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 888, + "bbox": [ + 1147, + 359, + 42, + 36 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1103, + "bbox": [ + 1165, + 374, + 41, + 32 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3960, + "bbox": [ + 1331, + 381, + 78, + 74 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 4036, + "bbox": [ + 1385, + 368, + 123, + 98 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 3280, + "bbox": [ + 1421, + 380, + 88, + 97 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 5362, + "bbox": [ + 1761, + 381, + 257, + 53 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 311, + "bbox": [ + 1033, + 343, + 24, + 20 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 412, + "bbox": [ + 1033, + 356, + 25, + 18 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 815, + "bbox": [ + 957, + 329, + 28, + 56 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 49759, + "bbox": [ + 557, + 175, + 340, + 277 + ], + "category_id": 31, + "id": 31000, + "iscrowd": 0 + }, + { + "area": 3777, + "bbox": [ + 629, + 353, + 103, + 195 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 8057, + "bbox": [ + 514, + 326, + 165, + 263 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 1740, + "bbox": [ + 865, + 386, + 51, + 87 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1339, + "bbox": [ + 192, + 386, + 72, + 89 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 2494, + "bbox": [ + 424, + 378, + 79, + 68 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 10913, + "bbox": [ + 391, + 388, + 154, + 288 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 42982, + "bbox": [ + 170, + 350, + 262, + 439 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_082466_gtFine_panoptic.png", + "image_id": "frankfurt_000001_082466", + "segments_info": [ + { + "area": 628155, + "bbox": [ + 6, + 432, + 2032, + 547 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 98096, + "bbox": [ + 590, + 416, + 1335, + 317 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 613759, + "bbox": [ + 6, + 5, + 2037, + 525 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 22384, + "bbox": [ + 321, + 16, + 1519, + 585 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 73, + "bbox": [ + 1170, + 354, + 6, + 13 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 15608, + "bbox": [ + 301, + 197, + 705, + 289 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 178807, + "bbox": [ + 587, + 5, + 593, + 451 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 23379, + "bbox": [ + 899, + 8, + 272, + 197 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1351, + "bbox": [ + 1122, + 385, + 61, + 33 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 12725, + "bbox": [ + 367, + 378, + 248, + 222 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 139228, + "bbox": [ + 6, + 297, + 561, + 399 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 98622, + "bbox": [ + 1788, + 429, + 255, + 526 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1986, + "bbox": [ + 1070, + 380, + 53, + 68 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 2082, + "bbox": [ + 1025, + 381, + 65, + 71 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 2146, + "bbox": [ + 989, + 378, + 49, + 75 + ], + "category_id": 32, + "id": 32002, + "iscrowd": 0 + }, + { + "area": 2996, + "bbox": [ + 886, + 380, + 118, + 79 + ], + "category_id": 32, + "id": 32003, + "iscrowd": 0 + }, + { + "area": 2848, + "bbox": [ + 914, + 387, + 53, + 76 + ], + "category_id": 32, + "id": 32004, + "iscrowd": 0 + }, + { + "area": 285, + "bbox": [ + 834, + 382, + 25, + 24 + ], + "category_id": 32, + "id": 32005, + "iscrowd": 0 + }, + { + "area": 1911, + "bbox": [ + 846, + 385, + 58, + 87 + ], + "category_id": 32, + "id": 32006, + "iscrowd": 0 + }, + { + "area": 5321, + "bbox": [ + 748, + 380, + 104, + 139 + ], + "category_id": 32, + "id": 32007, + "iscrowd": 0 + }, + { + "area": 7889, + "bbox": [ + 604, + 402, + 131, + 126 + ], + "category_id": 32, + "id": 32008, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_083029_gtFine_panoptic.png", + "image_id": "frankfurt_000001_083029", + "segments_info": [ + { + "area": 918922, + "bbox": [ + 6, + 382, + 2037, + 597 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 30590, + "bbox": [ + 209, + 388, + 1817, + 70 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 303420, + "bbox": [ + 7, + 5, + 2018, + 424 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 41493, + "bbox": [ + 68, + 5, + 1975, + 508 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9990, + "bbox": [ + 95, + 131, + 1948, + 246 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 19591, + "bbox": [ + 267, + 27, + 1776, + 408 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 387645, + "bbox": [ + 6, + 20, + 2037, + 586 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 18220, + "bbox": [ + 6, + 382, + 1069, + 265 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 85316, + "bbox": [ + 15, + 5, + 1314, + 313 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2816, + "bbox": [ + 1084, + 379, + 92, + 40 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 1258, + "bbox": [ + 1876, + 334, + 22, + 84 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 261, + "bbox": [ + 742, + 381, + 16, + 23 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1054, + "bbox": [ + 795, + 358, + 37, + 65 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1105, + "bbox": [ + 648, + 373, + 37, + 65 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 153, + "bbox": [ + 1073, + 377, + 21, + 10 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 594, + "bbox": [ + 1133, + 369, + 67, + 19 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1870, + "bbox": [ + 1945, + 349, + 81, + 44 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 239, + "bbox": [ + 1010, + 386, + 18, + 19 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 225, + "bbox": [ + 984, + 382, + 30, + 27 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 199, + "bbox": [ + 985, + 385, + 23, + 22 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 163, + "bbox": [ + 902, + 382, + 27, + 15 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 130, + "bbox": [ + 949, + 379, + 42, + 23 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2117, + "bbox": [ + 902, + 380, + 77, + 44 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1584, + "bbox": [ + 172, + 402, + 70, + 46 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 446, + "bbox": [ + 1602, + 374, + 57, + 35 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1670, + "bbox": [ + 781, + 390, + 59, + 51 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1886, + "bbox": [ + 638, + 399, + 60, + 56 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_083199_gtFine_panoptic.png", + "image_id": "frankfurt_000001_083199", + "segments_info": [ + { + "area": 931705, + "bbox": [ + 6, + 392, + 2037, + 587 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 39136, + "bbox": [ + 20, + 397, + 2023, + 100 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 368451, + "bbox": [ + 6, + 5, + 2037, + 445 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 28969, + "bbox": [ + 15, + 5, + 1976, + 481 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4053, + "bbox": [ + 515, + 98, + 1178, + 290 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 12590, + "bbox": [ + 114, + 193, + 1769, + 272 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 316086, + "bbox": [ + 6, + 12, + 1904, + 455 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1074, + "bbox": [ + 1216, + 424, + 197, + 19 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 72939, + "bbox": [ + 713, + 5, + 672, + 321 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 554, + "bbox": [ + 1076, + 386, + 81, + 34 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 658, + "bbox": [ + 624, + 391, + 22, + 39 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 546, + "bbox": [ + 1119, + 378, + 18, + 49 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1255, + "bbox": [ + 1993, + 357, + 47, + 61 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 947, + "bbox": [ + 1913, + 361, + 31, + 70 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 681, + "bbox": [ + 1506, + 378, + 39, + 36 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 3362, + "bbox": [ + 867, + 370, + 78, + 120 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 67, + "bbox": [ + 1090, + 386, + 16, + 8 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 37, + "bbox": [ + 1098, + 404, + 5, + 10 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 148, + "bbox": [ + 1102, + 394, + 12, + 20 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 738, + "bbox": [ + 1157, + 377, + 73, + 22 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 314, + "bbox": [ + 1138, + 388, + 47, + 40 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 328, + "bbox": [ + 1145, + 391, + 22, + 40 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2368, + "bbox": [ + 1154, + 390, + 63, + 46 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 30099, + "bbox": [ + 1510, + 351, + 278, + 137 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 278, + "bbox": [ + 1017, + 394, + 21, + 22 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 297, + "bbox": [ + 995, + 392, + 29, + 28 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 278, + "bbox": [ + 989, + 393, + 25, + 23 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 291, + "bbox": [ + 981, + 390, + 16, + 44 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1469, + "bbox": [ + 905, + 387, + 67, + 51 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1405, + "bbox": [ + 18, + 417, + 53, + 47 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 133, + "bbox": [ + 1025, + 386, + 14, + 13 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 1882, + "bbox": [ + 1985, + 385, + 58, + 53 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 3132, + "bbox": [ + 1881, + 376, + 74, + 73 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 3115, + "bbox": [ + 1456, + 399, + 66, + 79 + ], + "category_id": 32, + "id": 32002, + "iscrowd": 0 + }, + { + "area": 9097, + "bbox": [ + 812, + 401, + 166, + 106 + ], + "category_id": 32, + "id": 32003, + "iscrowd": 0 + }, + { + "area": 796, + "bbox": [ + 96, + 411, + 30, + 39 + ], + "category_id": 32, + "id": 32004, + "iscrowd": 0 + }, + { + "area": 361, + "bbox": [ + 1120, + 402, + 19, + 35 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 283, + "bbox": [ + 1806, + 379, + 23, + 43 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "frankfurt_000001_083852_gtFine_panoptic.png", + "image_id": "frankfurt_000001_083852", + "segments_info": [ + { + "area": 726078, + "bbox": [ + 6, + 398, + 1972, + 581 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 11359, + "bbox": [ + 6, + 422, + 2037, + 77 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 315380, + "bbox": [ + 6, + 5, + 1787, + 467 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 27160, + "bbox": [ + 12, + 10, + 2031, + 471 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 6676, + "bbox": [ + 56, + 54, + 1113, + 329 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 3464, + "bbox": [ + 292, + 169, + 1179, + 231 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 284848, + "bbox": [ + 416, + 12, + 1627, + 790 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 27302, + "bbox": [ + 398, + 397, + 1645, + 470 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 158900, + "bbox": [ + 601, + 5, + 1442, + 335 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 464, + "bbox": [ + 1056, + 393, + 28, + 25 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 160, + "bbox": [ + 1184, + 365, + 14, + 77 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 549, + "bbox": [ + 1246, + 375, + 20, + 40 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 215, + "bbox": [ + 1038, + 393, + 15, + 18 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 372, + "bbox": [ + 1051, + 383, + 31, + 30 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 387, + "bbox": [ + 1077, + 389, + 22, + 34 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 207, + "bbox": [ + 1089, + 394, + 19, + 34 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1214, + "bbox": [ + 1095, + 378, + 50, + 52 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1462, + "bbox": [ + 1112, + 386, + 49, + 51 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 5897, + "bbox": [ + 1147, + 374, + 103, + 74 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 27191, + "bbox": [ + 1245, + 365, + 231, + 159 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 154979, + "bbox": [ + 1450, + 316, + 593, + 366 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 597, + "bbox": [ + 1007, + 392, + 30, + 24 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 413, + "bbox": [ + 965, + 395, + 26, + 20 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 548, + "bbox": [ + 925, + 395, + 29, + 22 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1593, + "bbox": [ + 594, + 402, + 53, + 44 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 2240, + "bbox": [ + 542, + 402, + 66, + 49 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 2847, + "bbox": [ + 477, + 404, + 82, + 52 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 687, + "bbox": [ + 176, + 412, + 23, + 47 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000000_000019_gtFine_panoptic.png", + "image_id": "lindau_000000_000019", + "segments_info": [ + { + "area": 694699, + "bbox": [ + 6, + 419, + 2037, + 600 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 118764, + "bbox": [ + 275, + 421, + 1768, + 439 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 313709, + "bbox": [ + 6, + 5, + 2037, + 529 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 35860, + "bbox": [ + 361, + 386, + 1127, + 148 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 29284, + "bbox": [ + 1791, + 373, + 252, + 146 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 7844, + "bbox": [ + 372, + 19, + 1654, + 428 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3679, + "bbox": [ + 685, + 298, + 491, + 104 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 314763, + "bbox": [ + 9, + 84, + 2034, + 609 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 11692, + "bbox": [ + 1185, + 458, + 431, + 82 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 263103, + "bbox": [ + 6, + 5, + 1993, + 295 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 499, + "bbox": [ + 673, + 404, + 60, + 13 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 2559, + "bbox": [ + 6, + 344, + 44, + 81 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 584, + "bbox": [ + 400, + 374, + 77, + 19 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1223, + "bbox": [ + 303, + 360, + 106, + 34 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 546, + "bbox": [ + 503, + 399, + 28, + 24 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 998, + "bbox": [ + 526, + 397, + 42, + 38 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1083, + "bbox": [ + 619, + 411, + 41, + 32 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2670, + "bbox": [ + 543, + 412, + 62, + 53 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 42410, + "bbox": [ + 6, + 394, + 272, + 186 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1312, + "bbox": [ + 660, + 413, + 46, + 49 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1837, + "bbox": [ + 686, + 416, + 50, + 58 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 3111, + "bbox": [ + 718, + 406, + 70, + 81 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 5756, + "bbox": [ + 747, + 399, + 127, + 143 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 110471, + "bbox": [ + 756, + 394, + 468, + 319 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 2689, + "bbox": [ + 568, + 367, + 65, + 67 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000001_000019_gtFine_panoptic.png", + "image_id": "lindau_000001_000019", + "segments_info": [ + { + "area": 576918, + "bbox": [ + 6, + 471, + 1898, + 548 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 14083, + "bbox": [ + 1520, + 517, + 523, + 137 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 18350, + "bbox": [ + 1198, + 405, + 580, + 351 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 264, + "bbox": [ + 1232, + 388, + 11, + 29 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 507244, + "bbox": [ + 880, + 5, + 1163, + 599 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 210250, + "bbox": [ + 1180, + 464, + 863, + 555 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 100054, + "bbox": [ + 598, + 5, + 616, + 461 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 655, + "bbox": [ + 1147, + 435, + 37, + 32 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 635, + "bbox": [ + 984, + 435, + 31, + 52 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2485, + "bbox": [ + 950, + 426, + 44, + 73 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 10176, + "bbox": [ + 839, + 389, + 117, + 130 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 21974, + "bbox": [ + 991, + 418, + 189, + 156 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 520805, + "bbox": [ + 6, + 5, + 881, + 680 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000002_000019_gtFine_panoptic.png", + "image_id": "lindau_000002_000019", + "segments_info": [ + { + "area": 830619, + "bbox": [ + 6, + 414, + 2037, + 605 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 37914, + "bbox": [ + 6, + 464, + 1745, + 149 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 35942, + "bbox": [ + 78, + 291, + 1720, + 248 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 45707, + "bbox": [ + 1562, + 360, + 481, + 185 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 5836, + "bbox": [ + 290, + 81, + 1724, + 452 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3843, + "bbox": [ + 992, + 339, + 561, + 133 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 567717, + "bbox": [ + 6, + 5, + 2037, + 513 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 94217, + "bbox": [ + 87, + 422, + 1956, + 394 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 213830, + "bbox": [ + 6, + 5, + 1816, + 309 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 136, + "bbox": [ + 788, + 429, + 30, + 16 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1492, + "bbox": [ + 782, + 432, + 38, + 52 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 853, + "bbox": [ + 841, + 434, + 37, + 28 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 234, + "bbox": [ + 899, + 430, + 17, + 42 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2453, + "bbox": [ + 902, + 427, + 62, + 62 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3820, + "bbox": [ + 942, + 427, + 105, + 84 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 762, + "bbox": [ + 845, + 395, + 34, + 30 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 298, + "bbox": [ + 815, + 401, + 31, + 27 + ], + "category_id": 27, + "id": 27001, + "iscrowd": 0 + }, + { + "area": 1446, + "bbox": [ + 800, + 398, + 43, + 52 + ], + "category_id": 27, + "id": 27002, + "iscrowd": 0 + }, + { + "area": 130972, + "bbox": [ + 398, + 174, + 391, + 397 + ], + "category_id": 27, + "id": 27003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000003_000019_gtFine_panoptic.png", + "image_id": "lindau_000003_000019", + "segments_info": [ + { + "area": 833435, + "bbox": [ + 6, + 487, + 2037, + 532 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 87108, + "bbox": [ + 6, + 488, + 2037, + 277 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 137839, + "bbox": [ + 6, + 5, + 2037, + 492 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4825, + "bbox": [ + 653, + 432, + 213, + 57 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 33146, + "bbox": [ + 97, + 5, + 1899, + 583 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 851, + "bbox": [ + 514, + 369, + 866, + 53 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 351174, + "bbox": [ + 6, + 5, + 2037, + 526 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 3065, + "bbox": [ + 660, + 463, + 712, + 32 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 330107, + "bbox": [ + 6, + 5, + 1344, + 444 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 18441, + "bbox": [ + 1836, + 387, + 207, + 141 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 5536, + "bbox": [ + 858, + 415, + 110, + 82 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 49044, + "bbox": [ + 928, + 389, + 275, + 224 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 4307, + "bbox": [ + 664, + 451, + 123, + 49 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 6165, + "bbox": [ + 1186, + 391, + 68, + 100 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 2194, + "bbox": [ + 1063, + 337, + 101, + 88 + ], + "category_id": 27, + "id": 27001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000004_000019_gtFine_panoptic.png", + "image_id": "lindau_000004_000019", + "segments_info": [ + { + "area": 846357, + "bbox": [ + 6, + 457, + 2037, + 562 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 82086, + "bbox": [ + 6, + 446, + 2037, + 304 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 246410, + "bbox": [ + 6, + 5, + 1898, + 464 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4249, + "bbox": [ + 687, + 443, + 150, + 48 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 25760, + "bbox": [ + 199, + 5, + 1739, + 604 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2239, + "bbox": [ + 772, + 285, + 471, + 120 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 388, + "bbox": [ + 1148, + 386, + 67, + 22 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 465532, + "bbox": [ + 152, + 5, + 1891, + 528 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 29999, + "bbox": [ + 1314, + 462, + 729, + 172 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 165749, + "bbox": [ + 277, + 5, + 1223, + 296 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 12017, + "bbox": [ + 1523, + 370, + 228, + 135 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3516, + "bbox": [ + 1594, + 399, + 105, + 102 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 33069, + "bbox": [ + 1625, + 388, + 396, + 151 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 129, + "bbox": [ + 1137, + 422, + 24, + 12 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 254, + "bbox": [ + 1144, + 424, + 25, + 20 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1067, + "bbox": [ + 1164, + 422, + 67, + 28 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 14264, + "bbox": [ + 115, + 438, + 200, + 91 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 9891, + "bbox": [ + 6, + 439, + 121, + 115 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 17308, + "bbox": [ + 1001, + 408, + 168, + 133 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000005_000019_gtFine_panoptic.png", + "image_id": "lindau_000005_000019", + "segments_info": [ + { + "area": 849778, + "bbox": [ + 6, + 431, + 2037, + 588 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 77092, + "bbox": [ + 6, + 451, + 2037, + 267 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 353076, + "bbox": [ + 6, + 5, + 2037, + 483 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 12355, + "bbox": [ + 1674, + 393, + 244, + 99 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 7139, + "bbox": [ + 288, + 11, + 925, + 484 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 89, + "bbox": [ + 575, + 376, + 9, + 13 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2651, + "bbox": [ + 733, + 343, + 490, + 65 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 227321, + "bbox": [ + 130, + 5, + 1715, + 531 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2615, + "bbox": [ + 344, + 490, + 1540, + 25 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 276135, + "bbox": [ + 6, + 5, + 1321, + 339 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 647, + "bbox": [ + 542, + 429, + 51, + 26 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 2117, + "bbox": [ + 1139, + 415, + 40, + 89 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2192, + "bbox": [ + 1171, + 421, + 45, + 83 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3161, + "bbox": [ + 1260, + 403, + 43, + 115 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2896, + "bbox": [ + 1307, + 412, + 42, + 106 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 681, + "bbox": [ + 566, + 444, + 36, + 31 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 805, + "bbox": [ + 799, + 443, + 36, + 28 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 142, + "bbox": [ + 925, + 440, + 17, + 17 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1992, + "bbox": [ + 586, + 447, + 59, + 42 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 966, + "bbox": [ + 688, + 442, + 39, + 31 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1628, + "bbox": [ + 729, + 440, + 49, + 40 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 4841, + "bbox": [ + 843, + 429, + 87, + 72 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 407, + "bbox": [ + 1085, + 433, + 47, + 21 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1277, + "bbox": [ + 1082, + 434, + 69, + 54 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1873, + "bbox": [ + 1113, + 433, + 132, + 57 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2309, + "bbox": [ + 1208, + 421, + 185, + 72 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 2291, + "bbox": [ + 1249, + 425, + 140, + 69 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1495, + "bbox": [ + 1354, + 414, + 83, + 78 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 470, + "bbox": [ + 1376, + 418, + 47, + 71 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 2195, + "bbox": [ + 1384, + 410, + 103, + 99 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 3383, + "bbox": [ + 1409, + 408, + 102, + 109 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 10427, + "bbox": [ + 1440, + 402, + 163, + 117 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 26842, + "bbox": [ + 1536, + 404, + 293, + 123 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 20988, + "bbox": [ + 1881, + 374, + 162, + 174 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 16292, + "bbox": [ + 916, + 415, + 166, + 126 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 15105, + "bbox": [ + 8, + 414, + 195, + 105 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 255, + "bbox": [ + 553, + 419, + 22, + 16 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 856, + "bbox": [ + 608, + 399, + 34, + 40 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 1169, + "bbox": [ + 630, + 407, + 38, + 49 + ], + "category_id": 27, + "id": 27001, + "iscrowd": 0 + }, + { + "area": 1620, + "bbox": [ + 651, + 420, + 42, + 45 + ], + "category_id": 27, + "id": 27002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000006_000019_gtFine_panoptic.png", + "image_id": "lindau_000006_000019", + "segments_info": [ + { + "area": 875228, + "bbox": [ + 6, + 422, + 2037, + 597 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 71579, + "bbox": [ + 6, + 436, + 2037, + 298 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 218300, + "bbox": [ + 6, + 5, + 2005, + 495 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 51480, + "bbox": [ + 937, + 401, + 1074, + 177 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 25024, + "bbox": [ + 541, + 5, + 1502, + 604 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1226, + "bbox": [ + 967, + 272, + 203, + 109 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 6079, + "bbox": [ + 1131, + 278, + 200, + 112 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 333929, + "bbox": [ + 6, + 5, + 2037, + 508 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 19878, + "bbox": [ + 554, + 401, + 1489, + 226 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 268106, + "bbox": [ + 6, + 5, + 1627, + 350 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 9031, + "bbox": [ + 6, + 404, + 148, + 86 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 9492, + "bbox": [ + 243, + 416, + 146, + 85 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 98, + "bbox": [ + 1082, + 397, + 15, + 9 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 381, + "bbox": [ + 1057, + 391, + 25, + 17 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 576, + "bbox": [ + 1039, + 407, + 32, + 65 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 10447, + "bbox": [ + 1034, + 404, + 133, + 103 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 6341, + "bbox": [ + 713, + 402, + 99, + 78 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 24287, + "bbox": [ + 365, + 417, + 230, + 141 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1451, + "bbox": [ + 888, + 392, + 50, + 37 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 721, + "bbox": [ + 975, + 406, + 37, + 25 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1364, + "bbox": [ + 1124, + 378, + 70, + 44 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000007_000019_gtFine_panoptic.png", + "image_id": "lindau_000007_000019", + "segments_info": [ + { + "area": 880315, + "bbox": [ + 6, + 387, + 2037, + 632 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 11310, + "bbox": [ + 6, + 405, + 2037, + 106 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 54291, + "bbox": [ + 6, + 172, + 1808, + 222 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4754, + "bbox": [ + 255, + 375, + 232, + 40 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 28682, + "bbox": [ + 133, + 5, + 1740, + 535 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3400, + "bbox": [ + 485, + 233, + 691, + 132 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 10064, + "bbox": [ + 101, + 299, + 1789, + 157 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 437783, + "bbox": [ + 6, + 5, + 2037, + 507 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 182724, + "bbox": [ + 6, + 387, + 2037, + 506 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 246672, + "bbox": [ + 6, + 5, + 2028, + 250 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 704, + "bbox": [ + 229, + 359, + 17, + 53 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 354, + "bbox": [ + 523, + 362, + 19, + 26 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 557, + "bbox": [ + 1178, + 381, + 58, + 14 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 147, + "bbox": [ + 1442, + 388, + 47, + 6 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 8851, + "bbox": [ + 1270, + 379, + 115, + 94 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 551, + "bbox": [ + 831, + 377, + 22, + 31 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1812, + "bbox": [ + 706, + 367, + 68, + 49 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 4981, + "bbox": [ + 853, + 365, + 98, + 57 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 716, + "bbox": [ + 974, + 375, + 34, + 47 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 40278, + "bbox": [ + 953, + 365, + 259, + 202 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1489, + "bbox": [ + 658, + 377, + 56, + 32 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 6725, + "bbox": [ + 537, + 335, + 152, + 57 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 4675, + "bbox": [ + 948, + 327, + 77, + 104 + ], + "category_id": 27, + "id": 27001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000008_000019_gtFine_panoptic.png", + "image_id": "lindau_000008_000019", + "segments_info": [ + { + "area": 778386, + "bbox": [ + 6, + 451, + 2037, + 568 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 4160, + "bbox": [ + 1246, + 438, + 737, + 58 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 369491, + "bbox": [ + 6, + 5, + 2037, + 441 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5241, + "bbox": [ + 1164, + 439, + 180, + 40 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 8390, + "bbox": [ + 590, + 91, + 1328, + 414 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7043, + "bbox": [ + 546, + 285, + 1471, + 174 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 577962, + "bbox": [ + 6, + 5, + 2037, + 575 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1219, + "bbox": [ + 1321, + 479, + 95, + 33 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 49438, + "bbox": [ + 1078, + 5, + 965, + 222 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 7132, + "bbox": [ + 1742, + 403, + 92, + 126 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 98805, + "bbox": [ + 1415, + 293, + 365, + 346 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000009_000019_gtFine_panoptic.png", + "image_id": "lindau_000009_000019", + "segments_info": [ + { + "area": 713132, + "bbox": [ + 6, + 458, + 2037, + 561 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 3608, + "bbox": [ + 450, + 471, + 651, + 70 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 262638, + "bbox": [ + 6, + 5, + 1777, + 513 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2124, + "bbox": [ + 451, + 488, + 115, + 31 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 3074, + "bbox": [ + 476, + 431, + 82, + 57 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 28110, + "bbox": [ + 361, + 5, + 1470, + 724 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 25995, + "bbox": [ + 301, + 149, + 1478, + 435 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 684186, + "bbox": [ + 6, + 5, + 2037, + 765 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 16895, + "bbox": [ + 6, + 472, + 1224, + 189 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 59427, + "bbox": [ + 962, + 5, + 1081, + 199 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1563, + "bbox": [ + 599, + 422, + 29, + 115 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 4053, + "bbox": [ + 557, + 418, + 50, + 128 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 811, + "bbox": [ + 1770, + 400, + 50, + 22 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 891, + "bbox": [ + 1715, + 391, + 52, + 30 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2077, + "bbox": [ + 1988, + 374, + 55, + 75 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 13497, + "bbox": [ + 1869, + 380, + 163, + 103 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2926, + "bbox": [ + 1207, + 405, + 127, + 68 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 4729, + "bbox": [ + 253, + 446, + 88, + 144 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 44659, + "bbox": [ + 6, + 415, + 286, + 188 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1730, + "bbox": [ + 824, + 441, + 57, + 54 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 288, + "bbox": [ + 455, + 414, + 32, + 65 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 2357, + "bbox": [ + 559, + 460, + 128, + 79 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000010_000019_gtFine_panoptic.png", + "image_id": "lindau_000010_000019", + "segments_info": [ + { + "area": 690917, + "bbox": [ + 6, + 475, + 2037, + 544 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 113322, + "bbox": [ + 1208, + 497, + 835, + 369 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 417693, + "bbox": [ + 6, + 5, + 1816, + 583 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1396, + "bbox": [ + 330, + 505, + 118, + 21 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 22922, + "bbox": [ + 1455, + 410, + 588, + 202 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 14283, + "bbox": [ + 445, + 44, + 1479, + 578 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9522, + "bbox": [ + 1273, + 61, + 680, + 365 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 409072, + "bbox": [ + 337, + 5, + 1706, + 622 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 5924, + "bbox": [ + 605, + 449, + 687, + 55 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 94405, + "bbox": [ + 380, + 5, + 736, + 267 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 713, + "bbox": [ + 915, + 452, + 20, + 50 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 444, + "bbox": [ + 1162, + 435, + 41, + 21 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 322, + "bbox": [ + 1189, + 437, + 58, + 23 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 171, + "bbox": [ + 1285, + 457, + 17, + 24 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2651, + "bbox": [ + 907, + 442, + 97, + 51 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 13489, + "bbox": [ + 345, + 432, + 263, + 95 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 813, + "bbox": [ + 31, + 395, + 74, + 20 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 25516, + "bbox": [ + 67, + 391, + 284, + 147 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 17660, + "bbox": [ + 6, + 402, + 158, + 148 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 3039, + "bbox": [ + 1184, + 443, + 68, + 55 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000011_000019_gtFine_panoptic.png", + "image_id": "lindau_000011_000019", + "segments_info": [ + { + "area": 405747, + "bbox": [ + 61, + 527, + 1982, + 492 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 279993, + "bbox": [ + 6, + 529, + 2037, + 490 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 314443, + "bbox": [ + 6, + 5, + 957, + 453 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 114052, + "bbox": [ + 1411, + 307, + 632, + 350 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 182243, + "bbox": [ + 6, + 365, + 1405, + 399 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 4057, + "bbox": [ + 938, + 160, + 861, + 442 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 31348, + "bbox": [ + 1007, + 148, + 834, + 554 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 582879, + "bbox": [ + 50, + 5, + 1993, + 700 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1248, + "bbox": [ + 965, + 524, + 144, + 28 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 27170, + "bbox": [ + 1125, + 5, + 163, + 294 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2802, + "bbox": [ + 1377, + 455, + 44, + 93 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 733, + "bbox": [ + 1102, + 503, + 31, + 30 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 29295, + "bbox": [ + 1122, + 425, + 198, + 192 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 762, + "bbox": [ + 1393, + 506, + 21, + 64 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000012_000019_gtFine_panoptic.png", + "image_id": "lindau_000012_000019", + "segments_info": [ + { + "area": 612153, + "bbox": [ + 6, + 434, + 2022, + 585 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 265576, + "bbox": [ + 6, + 437, + 2037, + 582 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 162851, + "bbox": [ + 6, + 17, + 1280, + 426 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 6976, + "bbox": [ + 870, + 426, + 220, + 43 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 17747, + "bbox": [ + 318, + 5, + 1650, + 509 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3167, + "bbox": [ + 493, + 31, + 1550, + 357 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 791575, + "bbox": [ + 6, + 5, + 2037, + 673 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 62241, + "bbox": [ + 440, + 5, + 862, + 246 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 21021, + "bbox": [ + 345, + 310, + 147, + 318 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2781, + "bbox": [ + 537, + 403, + 63, + 54 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 5155, + "bbox": [ + 590, + 405, + 90, + 73 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3245, + "bbox": [ + 800, + 400, + 107, + 55 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 6730, + "bbox": [ + 704, + 390, + 107, + 84 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 9244, + "bbox": [ + 342, + 442, + 130, + 218 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000013_000019_gtFine_panoptic.png", + "image_id": "lindau_000013_000019", + "segments_info": [ + { + "area": 658455, + "bbox": [ + 6, + 519, + 2037, + 500 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 216547, + "bbox": [ + 6, + 512, + 2037, + 507 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 4081, + "bbox": [ + 6, + 382, + 59, + 98 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 115931, + "bbox": [ + 6, + 436, + 2037, + 179 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 47877, + "bbox": [ + 578, + 5, + 421, + 640 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 446645, + "bbox": [ + 6, + 153, + 2037, + 369 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 433065, + "bbox": [ + 6, + 5, + 2037, + 475 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 4746, + "bbox": [ + 629, + 469, + 526, + 58 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 973, + "bbox": [ + 1235, + 453, + 27, + 59 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2983, + "bbox": [ + 1411, + 414, + 40, + 119 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 286, + "bbox": [ + 814, + 483, + 10, + 39 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 329, + "bbox": [ + 805, + 483, + 11, + 39 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 298, + "bbox": [ + 783, + 482, + 12, + 40 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 442, + "bbox": [ + 793, + 482, + 14, + 41 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 411, + "bbox": [ + 740, + 480, + 16, + 44 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 733, + "bbox": [ + 717, + 473, + 21, + 51 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 382, + "bbox": [ + 460, + 444, + 19, + 97 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1971, + "bbox": [ + 413, + 455, + 36, + 87 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 2011, + "bbox": [ + 441, + 443, + 33, + 99 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 372, + "bbox": [ + 494, + 488, + 11, + 53 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 2365, + "bbox": [ + 470, + 439, + 37, + 104 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 3066, + "bbox": [ + 318, + 436, + 48, + 120 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 2611, + "bbox": [ + 286, + 443, + 41, + 115 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 3242, + "bbox": [ + 243, + 439, + 42, + 119 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 3261, + "bbox": [ + 367, + 434, + 42, + 122 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 541, + "bbox": [ + 862, + 482, + 21, + 41 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 11017, + "bbox": [ + 1000, + 453, + 138, + 101 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000014_000019_gtFine_panoptic.png", + "image_id": "lindau_000014_000019", + "segments_info": [ + { + "area": 534325, + "bbox": [ + 6, + 481, + 1965, + 538 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 501709, + "bbox": [ + 6, + 5, + 1994, + 496 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 11834, + "bbox": [ + 139, + 94, + 1866, + 502 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 99900, + "bbox": [ + 101, + 5, + 1942, + 515 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 376732, + "bbox": [ + 6, + 5, + 2037, + 582 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 295677, + "bbox": [ + 6, + 457, + 2037, + 562 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 22347, + "bbox": [ + 486, + 5, + 391, + 135 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1838, + "bbox": [ + 1657, + 338, + 39, + 71 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 12905, + "bbox": [ + 1661, + 373, + 183, + 125 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 28468, + "bbox": [ + 1390, + 383, + 242, + 165 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 96389, + "bbox": [ + 1045, + 379, + 402, + 304 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000015_000019_gtFine_panoptic.png", + "image_id": "lindau_000015_000019", + "segments_info": [ + { + "area": 818197, + "bbox": [ + 6, + 471, + 2037, + 548 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 82655, + "bbox": [ + 6, + 466, + 2037, + 236 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 430358, + "bbox": [ + 6, + 5, + 2037, + 612 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 17431, + "bbox": [ + 962, + 394, + 252, + 88 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 5083, + "bbox": [ + 580, + 139, + 1049, + 409 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3940, + "bbox": [ + 801, + 313, + 842, + 116 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 492506, + "bbox": [ + 669, + 5, + 1374, + 490 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 21740, + "bbox": [ + 1523, + 433, + 520, + 124 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 9955, + "bbox": [ + 934, + 5, + 154, + 141 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 4420, + "bbox": [ + 877, + 417, + 91, + 80 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3637, + "bbox": [ + 841, + 430, + 75, + 76 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4629, + "bbox": [ + 802, + 428, + 64, + 96 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 22752, + "bbox": [ + 631, + 393, + 183, + 158 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 47095, + "bbox": [ + 1173, + 400, + 279, + 213 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000016_000019_gtFine_panoptic.png", + "image_id": "lindau_000016_000019", + "segments_info": [ + { + "area": 827147, + "bbox": [ + 6, + 418, + 2037, + 601 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 45915, + "bbox": [ + 6, + 466, + 1999, + 219 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 191420, + "bbox": [ + 134, + 5, + 1909, + 477 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 360855, + "bbox": [ + 6, + 5, + 1209, + 613 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 5982, + "bbox": [ + 95, + 5, + 1395, + 505 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 11563, + "bbox": [ + 700, + 261, + 813, + 208 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 311571, + "bbox": [ + 1049, + 5, + 994, + 479 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 114279, + "bbox": [ + 15, + 5, + 1192, + 297 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 140, + "bbox": [ + 1093, + 443, + 12, + 16 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 379, + "bbox": [ + 1101, + 441, + 24, + 20 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1122, + "bbox": [ + 1117, + 444, + 56, + 40 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 8650, + "bbox": [ + 1226, + 437, + 123, + 91 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 12436, + "bbox": [ + 1523, + 426, + 176, + 121 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 15126, + "bbox": [ + 1646, + 418, + 189, + 148 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 43251, + "bbox": [ + 1754, + 404, + 289, + 191 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 4614, + "bbox": [ + 1215, + 392, + 86, + 95 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000017_000019_gtFine_panoptic.png", + "image_id": "lindau_000017_000019", + "segments_info": [ + { + "area": 885223, + "bbox": [ + 6, + 5, + 2037, + 742 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 8869, + "bbox": [ + 179, + 251, + 1005, + 399 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 20099, + "bbox": [ + 486, + 157, + 707, + 205 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 109672, + "bbox": [ + 553, + 111, + 1276, + 514 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1169, + "bbox": [ + 1165, + 5, + 45, + 35 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000018_000019_gtFine_panoptic.png", + "image_id": "lindau_000018_000019", + "segments_info": [ + { + "area": 669552, + "bbox": [ + 6, + 5, + 2037, + 701 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 358, + "bbox": [ + 1505, + 332, + 8, + 149 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1736, + "bbox": [ + 1463, + 323, + 63, + 66 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 353232, + "bbox": [ + 22, + 33, + 2021, + 834 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000019_000019_gtFine_panoptic.png", + "image_id": "lindau_000019_000019", + "segments_info": [ + { + "area": 1034251, + "bbox": [ + 6, + 5, + 2037, + 694 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1996, + "bbox": [ + 1177, + 205, + 22, + 345 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 21441, + "bbox": [ + 1083, + 139, + 714, + 203 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000020_000019_gtFine_panoptic.png", + "image_id": "lindau_000020_000019", + "segments_info": [ + { + "area": 460801, + "bbox": [ + 28, + 424, + 1853, + 595 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 261875, + "bbox": [ + 6, + 415, + 2037, + 604 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 1207861, + "bbox": [ + 6, + 5, + 2037, + 810 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 6063, + "bbox": [ + 231, + 73, + 710, + 618 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 13000, + "bbox": [ + 241, + 77, + 526, + 267 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 10358, + "bbox": [ + 575, + 5, + 159, + 157 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1391, + "bbox": [ + 930, + 5, + 40, + 69 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 9002, + "bbox": [ + 1077, + 375, + 81, + 197 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000021_000019_gtFine_panoptic.png", + "image_id": "lindau_000021_000019", + "segments_info": [ + { + "area": 402962, + "bbox": [ + 450, + 487, + 1593, + 532 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 357217, + "bbox": [ + 6, + 480, + 2037, + 539 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 1171147, + "bbox": [ + 32, + 5, + 2011, + 793 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5700, + "bbox": [ + 498, + 202, + 784, + 429 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 14474, + "bbox": [ + 441, + 76, + 859, + 364 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 2144, + "bbox": [ + 1270, + 5, + 29, + 94 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000022_000019_gtFine_panoptic.png", + "image_id": "lindau_000022_000019", + "segments_info": [ + { + "area": 306760, + "bbox": [ + 724, + 625, + 1319, + 394 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 262185, + "bbox": [ + 6, + 617, + 2037, + 402 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 1002555, + "bbox": [ + 6, + 5, + 2037, + 840 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 7921, + "bbox": [ + 980, + 163, + 330, + 486 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2409, + "bbox": [ + 1282, + 405, + 219, + 102 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 156506, + "bbox": [ + 1097, + 5, + 646, + 622 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 155002, + "bbox": [ + 974, + 5, + 570, + 453 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 186, + "bbox": [ + 1399, + 573, + 17, + 18 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 409, + "bbox": [ + 1350, + 578, + 45, + 14 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 259, + "bbox": [ + 1390, + 583, + 45, + 11 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 21843, + "bbox": [ + 976, + 415, + 123, + 230 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000023_000019_gtFine_panoptic.png", + "image_id": "lindau_000023_000019", + "segments_info": [ + { + "area": 551171, + "bbox": [ + 6, + 508, + 1924, + 511 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 267459, + "bbox": [ + 490, + 513, + 1553, + 506 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 671728, + "bbox": [ + 6, + 5, + 2037, + 698 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 23707, + "bbox": [ + 780, + 486, + 740, + 58 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 14846, + "bbox": [ + 10, + 237, + 1184, + 390 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 15048, + "bbox": [ + 8, + 78, + 1650, + 332 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 103342, + "bbox": [ + 6, + 46, + 1513, + 419 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 100921, + "bbox": [ + 6, + 5, + 1413, + 298 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 697, + "bbox": [ + 43, + 448, + 22, + 45 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 381, + "bbox": [ + 585, + 457, + 19, + 30 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 594, + "bbox": [ + 696, + 450, + 25, + 37 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 660, + "bbox": [ + 668, + 443, + 32, + 40 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1507, + "bbox": [ + 1335, + 439, + 83, + 31 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 725, + "bbox": [ + 1301, + 431, + 58, + 18 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 64521, + "bbox": [ + 188, + 287, + 303, + 267 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 7841, + "bbox": [ + 45, + 453, + 197, + 123 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000024_000019_gtFine_panoptic.png", + "image_id": "lindau_000024_000019", + "segments_info": [ + { + "area": 781623, + "bbox": [ + 6, + 482, + 2037, + 537 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 59361, + "bbox": [ + 1319, + 461, + 724, + 235 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 733168, + "bbox": [ + 6, + 5, + 2037, + 631 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3567, + "bbox": [ + 1977, + 402, + 66, + 121 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 33430, + "bbox": [ + 6, + 176, + 1891, + 696 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 14945, + "bbox": [ + 599, + 5, + 1116, + 365 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 40714, + "bbox": [ + 6, + 86, + 2037, + 503 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 15410, + "bbox": [ + 635, + 5, + 254, + 110 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1541, + "bbox": [ + 661, + 419, + 31, + 79 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 12670, + "bbox": [ + 462, + 380, + 95, + 233 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 4571, + "bbox": [ + 420, + 430, + 44, + 149 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 3475, + "bbox": [ + 401, + 397, + 42, + 164 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 17904, + "bbox": [ + 106, + 331, + 145, + 321 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3446, + "bbox": [ + 1859, + 312, + 56, + 96 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 5597, + "bbox": [ + 1954, + 313, + 85, + 111 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1131, + "bbox": [ + 715, + 428, + 26, + 60 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 816, + "bbox": [ + 736, + 427, + 21, + 64 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 4625, + "bbox": [ + 932, + 418, + 88, + 90 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 36013, + "bbox": [ + 1082, + 365, + 245, + 224 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 47280, + "bbox": [ + 738, + 275, + 224, + 243 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 373, + "bbox": [ + 713, + 452, + 31, + 49 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 23621, + "bbox": [ + 22, + 633, + 136, + 224 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000025_000019_gtFine_panoptic.png", + "image_id": "lindau_000025_000019", + "segments_info": [ + { + "area": 517887, + "bbox": [ + 6, + 574, + 2037, + 445 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 71638, + "bbox": [ + 1161, + 594, + 882, + 337 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 948786, + "bbox": [ + 6, + 5, + 2037, + 908 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1996, + "bbox": [ + 655, + 407, + 696, + 193 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2733, + "bbox": [ + 643, + 346, + 716, + 122 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 300300, + "bbox": [ + 484, + 5, + 897, + 548 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4891, + "bbox": [ + 1105, + 547, + 174, + 42 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 25796, + "bbox": [ + 1366, + 381, + 158, + 372 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 43739, + "bbox": [ + 1467, + 314, + 180, + 471 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2723, + "bbox": [ + 1272, + 515, + 56, + 76 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 5994, + "bbox": [ + 1002, + 515, + 100, + 77 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 6263, + "bbox": [ + 882, + 518, + 96, + 79 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 4467, + "bbox": [ + 771, + 520, + 82, + 74 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2348, + "bbox": [ + 736, + 513, + 45, + 101 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 311, + "bbox": [ + 542, + 514, + 31, + 31 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 4255, + "bbox": [ + 489, + 482, + 74, + 139 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 23216, + "bbox": [ + 553, + 480, + 201, + 142 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000026_000019_gtFine_panoptic.png", + "image_id": "lindau_000026_000019", + "segments_info": [ + { + "area": 680613, + "bbox": [ + 6, + 480, + 2037, + 539 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 46579, + "bbox": [ + 1751, + 630, + 292, + 229 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 614766, + "bbox": [ + 6, + 5, + 2037, + 485 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1119, + "bbox": [ + 391, + 199, + 12, + 161 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1294, + "bbox": [ + 367, + 235, + 67, + 22 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 172086, + "bbox": [ + 230, + 5, + 1807, + 456 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 40287, + "bbox": [ + 485, + 444, + 1235, + 111 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 24258, + "bbox": [ + 1130, + 350, + 199, + 179 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 25652, + "bbox": [ + 883, + 375, + 194, + 162 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 22926, + "bbox": [ + 641, + 364, + 189, + 165 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3240, + "bbox": [ + 41, + 330, + 153, + 48 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 123485, + "bbox": [ + 71, + 282, + 442, + 436 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 49386, + "bbox": [ + 6, + 284, + 121, + 569 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 16795, + "bbox": [ + 1903, + 387, + 140, + 156 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 33473, + "bbox": [ + 1645, + 385, + 278, + 159 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000027_000019_gtFine_panoptic.png", + "image_id": "lindau_000027_000019", + "segments_info": [ + { + "area": 741555, + "bbox": [ + 6, + 518, + 2037, + 501 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 650467, + "bbox": [ + 6, + 5, + 2037, + 531 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 14742, + "bbox": [ + 1454, + 504, + 478, + 283 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 181952, + "bbox": [ + 717, + 5, + 1260, + 335 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 174585, + "bbox": [ + 1305, + 324, + 738, + 306 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 11040, + "bbox": [ + 440, + 406, + 207, + 121 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 10615, + "bbox": [ + 478, + 456, + 139, + 116 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 4169, + "bbox": [ + 386, + 405, + 119, + 134 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 68030, + "bbox": [ + 80, + 384, + 395, + 219 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 26029, + "bbox": [ + 6, + 247, + 94, + 389 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000028_000019_gtFine_panoptic.png", + "image_id": "lindau_000028_000019", + "segments_info": [ + { + "area": 752754, + "bbox": [ + 6, + 496, + 2037, + 523 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 13644, + "bbox": [ + 707, + 498, + 825, + 59 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 681586, + "bbox": [ + 43, + 5, + 2000, + 697 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2009, + "bbox": [ + 491, + 324, + 40, + 55 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 328868, + "bbox": [ + 6, + 5, + 1412, + 415 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 18716, + "bbox": [ + 6, + 5, + 1381, + 156 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3117, + "bbox": [ + 648, + 477, + 100, + 94 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 42994, + "bbox": [ + 388, + 381, + 334, + 215 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 21412, + "bbox": [ + 291, + 421, + 216, + 208 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 55887, + "bbox": [ + 37, + 417, + 362, + 287 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 55083, + "bbox": [ + 6, + 411, + 198, + 394 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000029_000019_gtFine_panoptic.png", + "image_id": "lindau_000029_000019", + "segments_info": [ + { + "area": 374901, + "bbox": [ + 617, + 508, + 1426, + 511 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 460748, + "bbox": [ + 6, + 5, + 1904, + 505 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 6318, + "bbox": [ + 1770, + 322, + 41, + 177 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 6611, + "bbox": [ + 395, + 23, + 298, + 674 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 472160, + "bbox": [ + 6, + 5, + 2037, + 774 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 5, + "bbox": [ + 1500, + 497, + 1, + 5 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 16190, + "bbox": [ + 1865, + 384, + 178, + 185 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 12103, + "bbox": [ + 1949, + 399, + 94, + 183 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 17994, + "bbox": [ + 951, + 391, + 137, + 170 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2381, + "bbox": [ + 814, + 382, + 159, + 124 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 7973, + "bbox": [ + 853, + 394, + 122, + 156 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3091, + "bbox": [ + 744, + 374, + 126, + 44 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 106559, + "bbox": [ + 6, + 371, + 944, + 265 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000030_000019_gtFine_panoptic.png", + "image_id": "lindau_000030_000019", + "segments_info": [ + { + "area": 657228, + "bbox": [ + 6, + 531, + 2037, + 488 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 897012, + "bbox": [ + 6, + 5, + 2037, + 716 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 53036, + "bbox": [ + 6, + 169, + 519, + 469 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 307526, + "bbox": [ + 6, + 5, + 1552, + 850 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 177, + "bbox": [ + 239, + 5, + 525, + 109 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 5564, + "bbox": [ + 390, + 489, + 97, + 83 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 13609, + "bbox": [ + 463, + 405, + 150, + 143 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000031_000019_gtFine_panoptic.png", + "image_id": "lindau_000031_000019", + "segments_info": [ + { + "area": 731201, + "bbox": [ + 6, + 450, + 2037, + 569 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 521426, + "bbox": [ + 264, + 5, + 1779, + 527 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 233122, + "bbox": [ + 6, + 187, + 788, + 525 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 287245, + "bbox": [ + 6, + 5, + 2037, + 678 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 748, + "bbox": [ + 1029, + 5, + 72, + 142 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 40988, + "bbox": [ + 322, + 413, + 280, + 241 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 27246, + "bbox": [ + 784, + 318, + 198, + 161 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 33228, + "bbox": [ + 139, + 434, + 211, + 258 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000032_000019_gtFine_panoptic.png", + "image_id": "lindau_000032_000019", + "segments_info": [ + { + "area": 712504, + "bbox": [ + 6, + 490, + 2037, + 529 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 232019, + "bbox": [ + 6, + 444, + 2037, + 527 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 960545, + "bbox": [ + 6, + 5, + 2037, + 700 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 12105, + "bbox": [ + 1121, + 390, + 439, + 171 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000033_000019_gtFine_panoptic.png", + "image_id": "lindau_000033_000019", + "segments_info": [ + { + "area": 893485, + "bbox": [ + 6, + 464, + 2037, + 555 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 410511, + "bbox": [ + 6, + 5, + 2022, + 466 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2716, + "bbox": [ + 277, + 362, + 1166, + 127 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 10901, + "bbox": [ + 269, + 312, + 985, + 368 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 350483, + "bbox": [ + 6, + 5, + 2037, + 505 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 19614, + "bbox": [ + 1061, + 5, + 734, + 111 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 4319, + "bbox": [ + 1297, + 415, + 163, + 54 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 16440, + "bbox": [ + 1453, + 396, + 217, + 100 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 9741, + "bbox": [ + 1679, + 351, + 350, + 187 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 62824, + "bbox": [ + 1720, + 364, + 323, + 238 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 5802, + "bbox": [ + 354, + 402, + 104, + 113 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 8739, + "bbox": [ + 313, + 387, + 78, + 177 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 105479, + "bbox": [ + 6, + 258, + 343, + 396 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 15502, + "bbox": [ + 886, + 377, + 149, + 142 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 18054, + "bbox": [ + 685, + 374, + 169, + 143 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 40834, + "bbox": [ + 422, + 379, + 276, + 199 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 5086, + "bbox": [ + 1658, + 358, + 133, + 157 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000034_000019_gtFine_panoptic.png", + "image_id": "lindau_000034_000019", + "segments_info": [ + { + "area": 90, + "bbox": [ + 581, + 505, + 97, + 7 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 478775, + "bbox": [ + 195, + 5, + 1848, + 595 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 506706, + "bbox": [ + 6, + 5, + 2037, + 581 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2338, + "bbox": [ + 383, + 346, + 75, + 73 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2880, + "bbox": [ + 274, + 485, + 103, + 55 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2180, + "bbox": [ + 336, + 486, + 50, + 62 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 14748, + "bbox": [ + 374, + 456, + 207, + 90 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 111664, + "bbox": [ + 6, + 423, + 340, + 425 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 96235, + "bbox": [ + 1798, + 211, + 245, + 458 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000035_000019_gtFine_panoptic.png", + "image_id": "lindau_000035_000019", + "segments_info": [ + { + "area": 496739, + "bbox": [ + 6, + 5, + 2037, + 574 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5153, + "bbox": [ + 372, + 117, + 1476, + 356 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9055, + "bbox": [ + 671, + 168, + 1211, + 250 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 241411, + "bbox": [ + 6, + 5, + 2037, + 413 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 625, + "bbox": [ + 306, + 324, + 40, + 42 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 5564, + "bbox": [ + 41, + 304, + 190, + 87 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 17124, + "bbox": [ + 57, + 316, + 264, + 98 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 66870, + "bbox": [ + 745, + 231, + 349, + 253 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 27068, + "bbox": [ + 1020, + 353, + 300, + 187 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 123004, + "bbox": [ + 1167, + 343, + 695, + 247 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000036_000019_gtFine_panoptic.png", + "image_id": "lindau_000036_000019", + "segments_info": [ + { + "area": 841052, + "bbox": [ + 6, + 453, + 2037, + 566 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 728329, + "bbox": [ + 6, + 5, + 2037, + 753 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 465, + "bbox": [ + 1074, + 409, + 8, + 67 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1837, + "bbox": [ + 1055, + 361, + 48, + 49 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 319048, + "bbox": [ + 944, + 5, + 1099, + 477 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 6048, + "bbox": [ + 952, + 430, + 82, + 120 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 9300, + "bbox": [ + 948, + 5, + 108, + 95 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 7770, + "bbox": [ + 1920, + 409, + 113, + 130 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 7345, + "bbox": [ + 1980, + 402, + 63, + 163 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000037_000019_gtFine_panoptic.png", + "image_id": "lindau_000037_000019", + "segments_info": [ + { + "area": 642589, + "bbox": [ + 6, + 441, + 2037, + 578 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 160243, + "bbox": [ + 6, + 534, + 1565, + 345 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 831182, + "bbox": [ + 6, + 5, + 2037, + 639 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 201843, + "bbox": [ + 6, + 5, + 2037, + 695 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1247, + "bbox": [ + 1758, + 5, + 136, + 29 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2344, + "bbox": [ + 1989, + 428, + 54, + 65 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 46107, + "bbox": [ + 614, + 304, + 196, + 483 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1503, + "bbox": [ + 1841, + 434, + 68, + 49 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1398, + "bbox": [ + 1879, + 439, + 59, + 49 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3428, + "bbox": [ + 1949, + 420, + 94, + 71 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 5336, + "bbox": [ + 1435, + 439, + 88, + 71 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 14131, + "bbox": [ + 1513, + 449, + 180, + 105 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 6170, + "bbox": [ + 1903, + 391, + 140, + 84 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000038_000019_gtFine_panoptic.png", + "image_id": "lindau_000038_000019", + "segments_info": [ + { + "area": 785990, + "bbox": [ + 6, + 427, + 2037, + 592 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 88348, + "bbox": [ + 6, + 432, + 329, + 432 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 421863, + "bbox": [ + 6, + 5, + 2037, + 500 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 598, + "bbox": [ + 1883, + 330, + 11, + 64 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8709, + "bbox": [ + 1852, + 221, + 86, + 110 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 343019, + "bbox": [ + 964, + 5, + 1079, + 393 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1693, + "bbox": [ + 40, + 379, + 101, + 61 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 12128, + "bbox": [ + 1417, + 352, + 93, + 223 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 19915, + "bbox": [ + 74, + 336, + 363, + 127 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2905, + "bbox": [ + 114, + 391, + 166, + 87 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3296, + "bbox": [ + 147, + 386, + 236, + 98 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 16326, + "bbox": [ + 178, + 389, + 263, + 118 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 55012, + "bbox": [ + 339, + 402, + 333, + 221 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2611, + "bbox": [ + 937, + 402, + 95, + 64 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2289, + "bbox": [ + 983, + 404, + 73, + 66 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 6456, + "bbox": [ + 1082, + 386, + 138, + 98 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1729, + "bbox": [ + 1137, + 421, + 46, + 65 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2198, + "bbox": [ + 1167, + 397, + 66, + 100 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 24062, + "bbox": [ + 1188, + 379, + 237, + 131 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 17778, + "bbox": [ + 1393, + 346, + 340, + 214 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 26233, + "bbox": [ + 1515, + 381, + 324, + 239 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 122058, + "bbox": [ + 1610, + 394, + 433, + 354 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 11225, + "bbox": [ + 1027, + 341, + 186, + 133 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000039_000019_gtFine_panoptic.png", + "image_id": "lindau_000039_000019", + "segments_info": [ + { + "area": 907396, + "bbox": [ + 6, + 470, + 2037, + 549 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 649572, + "bbox": [ + 6, + 5, + 1658, + 502 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 61, + "bbox": [ + 669, + 456, + 4, + 20 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 853, + "bbox": [ + 658, + 383, + 886, + 73 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 191147, + "bbox": [ + 6, + 5, + 2037, + 335 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 73105, + "bbox": [ + 6, + 289, + 310, + 282 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 9038, + "bbox": [ + 1388, + 446, + 167, + 118 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 720, + "bbox": [ + 1540, + 431, + 44, + 34 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 10701, + "bbox": [ + 1475, + 455, + 153, + 131 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 54677, + "bbox": [ + 1731, + 397, + 312, + 269 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 18048, + "bbox": [ + 1924, + 496, + 119, + 191 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 68058, + "bbox": [ + 1573, + 299, + 470, + 311 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000040_000019_gtFine_panoptic.png", + "image_id": "lindau_000040_000019", + "segments_info": [ + { + "area": 1333043, + "bbox": [ + 6, + 5, + 2037, + 741 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 9878, + "bbox": [ + 1620, + 45, + 196, + 160 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 5913, + "bbox": [ + 1077, + 427, + 795, + 103 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000041_000019_gtFine_panoptic.png", + "image_id": "lindau_000041_000019", + "segments_info": [ + { + "area": 858475, + "bbox": [ + 6, + 437, + 2037, + 582 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 20085, + "bbox": [ + 234, + 526, + 1809, + 89 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 356211, + "bbox": [ + 6, + 5, + 2037, + 565 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2579, + "bbox": [ + 1513, + 442, + 133, + 26 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 1315, + "bbox": [ + 853, + 377, + 662, + 156 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2701, + "bbox": [ + 834, + 313, + 45, + 64 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 492841, + "bbox": [ + 19, + 5, + 1793, + 567 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 39683, + "bbox": [ + 1505, + 5, + 280, + 265 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 270, + "bbox": [ + 1703, + 415, + 16, + 23 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 6532, + "bbox": [ + 1339, + 390, + 174, + 99 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3400, + "bbox": [ + 1385, + 424, + 75, + 67 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 12625, + "bbox": [ + 1207, + 396, + 181, + 109 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 8646, + "bbox": [ + 1158, + 422, + 121, + 101 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 17433, + "bbox": [ + 985, + 414, + 197, + 117 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 55190, + "bbox": [ + 602, + 374, + 397, + 189 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 70506, + "bbox": [ + 6, + 346, + 286, + 323 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 4425, + "bbox": [ + 1729, + 388, + 83, + 70 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 29492, + "bbox": [ + 1569, + 437, + 273, + 151 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000042_000019_gtFine_panoptic.png", + "image_id": "lindau_000042_000019", + "segments_info": [ + { + "area": 750223, + "bbox": [ + 6, + 414, + 2037, + 605 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 61725, + "bbox": [ + 1513, + 425, + 530, + 281 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 54023, + "bbox": [ + 6, + 5, + 2037, + 433 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3311, + "bbox": [ + 889, + 410, + 102, + 40 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 254, + "bbox": [ + 799, + 309, + 8, + 60 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1389, + "bbox": [ + 759, + 219, + 902, + 93 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 573209, + "bbox": [ + 60, + 5, + 1983, + 434 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 41586, + "bbox": [ + 1086, + 5, + 415, + 401 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 884, + "bbox": [ + 1085, + 366, + 37, + 58 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 10168, + "bbox": [ + 1120, + 314, + 110, + 116 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 38467, + "bbox": [ + 532, + 294, + 368, + 238 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 32133, + "bbox": [ + 544, + 357, + 253, + 205 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 212606, + "bbox": [ + 6, + 245, + 568, + 443 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 7891, + "bbox": [ + 1156, + 289, + 118, + 137 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000043_000019_gtFine_panoptic.png", + "image_id": "lindau_000043_000019", + "segments_info": [ + { + "area": 678962, + "bbox": [ + 6, + 493, + 2037, + 526 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 67735, + "bbox": [ + 1180, + 591, + 863, + 383 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 407582, + "bbox": [ + 6, + 5, + 2037, + 534 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 100, + "bbox": [ + 1052, + 438, + 4, + 34 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 731, + "bbox": [ + 1043, + 406, + 20, + 54 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 590457, + "bbox": [ + 6, + 5, + 2037, + 615 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 110997, + "bbox": [ + 1252, + 545, + 791, + 212 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 12694, + "bbox": [ + 863, + 302, + 193, + 162 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 8706, + "bbox": [ + 601, + 433, + 150, + 75 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 8286, + "bbox": [ + 452, + 432, + 147, + 73 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 8470, + "bbox": [ + 320, + 417, + 144, + 85 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 49221, + "bbox": [ + 6, + 376, + 300, + 229 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000044_000019_gtFine_panoptic.png", + "image_id": "lindau_000044_000019", + "segments_info": [ + { + "area": 857494, + "bbox": [ + 6, + 5, + 2037, + 596 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 61108, + "bbox": [ + 491, + 286, + 865, + 275 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 161485, + "bbox": [ + 6, + 258, + 432, + 510 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 158620, + "bbox": [ + 1594, + 349, + 449, + 430 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000045_000019_gtFine_panoptic.png", + "image_id": "lindau_000045_000019", + "segments_info": [ + { + "area": 451821, + "bbox": [ + 724, + 5, + 1319, + 667 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 378480, + "bbox": [ + 6, + 248, + 1421, + 647 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 23607, + "bbox": [ + 1462, + 486, + 389, + 180 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 419073, + "bbox": [ + 6, + 5, + 1535, + 501 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2590, + "bbox": [ + 893, + 5, + 651, + 102 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000046_000019_gtFine_panoptic.png", + "image_id": "lindau_000046_000019", + "segments_info": [ + { + "area": 601218, + "bbox": [ + 849, + 5, + 1194, + 626 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 249811, + "bbox": [ + 6, + 194, + 844, + 690 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 14507, + "bbox": [ + 1105, + 462, + 635, + 192 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2610, + "bbox": [ + 398, + 323, + 55, + 66 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 361696, + "bbox": [ + 6, + 5, + 1058, + 535 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1026, + "bbox": [ + 1010, + 416, + 29, + 59 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 4158, + "bbox": [ + 970, + 403, + 88, + 70 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000047_000019_gtFine_panoptic.png", + "image_id": "lindau_000047_000019", + "segments_info": [ + { + "area": 558317, + "bbox": [ + 852, + 5, + 1191, + 675 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 529569, + "bbox": [ + 6, + 5, + 820, + 909 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 25560, + "bbox": [ + 954, + 443, + 894, + 332 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 133527, + "bbox": [ + 341, + 5, + 752, + 532 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 3812, + "bbox": [ + 1168, + 388, + 78, + 123 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 14611, + "bbox": [ + 1093, + 380, + 171, + 133 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000048_000019_gtFine_panoptic.png", + "image_id": "lindau_000048_000019", + "segments_info": [ + { + "area": 811006, + "bbox": [ + 283, + 5, + 1760, + 723 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 22948, + "bbox": [ + 314, + 531, + 1118, + 176 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 354796, + "bbox": [ + 6, + 5, + 2011, + 877 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 83629, + "bbox": [ + 298, + 234, + 279, + 388 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000049_000019_gtFine_panoptic.png", + "image_id": "lindau_000049_000019", + "segments_info": [ + { + "area": 1140866, + "bbox": [ + 6, + 5, + 2037, + 748 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3850, + "bbox": [ + 40, + 429, + 330, + 98 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 58277, + "bbox": [ + 6, + 5, + 213, + 488 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 451, + "bbox": [ + 153, + 5, + 45, + 23 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1535, + "bbox": [ + 142, + 426, + 60, + 35 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + } + ] + }, + { + "file_name": "lindau_000050_000019_gtFine_panoptic.png", + "image_id": "lindau_000050_000019", + "segments_info": [ + { + "area": 1067575, + "bbox": [ + 6, + 5, + 2037, + 828 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 89242, + "bbox": [ + 108, + 446, + 1817, + 450 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 182977, + "bbox": [ + 635, + 5, + 742, + 540 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 839, + "bbox": [ + 1156, + 5, + 221, + 14 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 720, + "bbox": [ + 1331, + 446, + 39, + 41 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 1318, + "bbox": [ + 1305, + 451, + 51, + 39 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000051_000019_gtFine_panoptic.png", + "image_id": "lindau_000051_000019", + "segments_info": [ + { + "area": 649840, + "bbox": [ + 10, + 5, + 2033, + 650 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 44563, + "bbox": [ + 847, + 54, + 154, + 398 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 27914, + "bbox": [ + 163, + 251, + 1703, + 515 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 5523, + "bbox": [ + 1588, + 184, + 214, + 160 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 242689, + "bbox": [ + 6, + 5, + 1751, + 607 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 784, + "bbox": [ + 930, + 404, + 27, + 60 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 5189, + "bbox": [ + 711, + 367, + 183, + 129 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 12886, + "bbox": [ + 720, + 371, + 135, + 159 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4946, + "bbox": [ + 513, + 353, + 246, + 180 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 73061, + "bbox": [ + 187, + 355, + 557, + 214 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 24444, + "bbox": [ + 1043, + 382, + 267, + 115 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000052_000019_gtFine_panoptic.png", + "image_id": "lindau_000052_000019", + "segments_info": [ + { + "area": 710600, + "bbox": [ + 6, + 5, + 1226, + 619 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 156348, + "bbox": [ + 1211, + 5, + 370, + 548 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 695, + "bbox": [ + 1690, + 315, + 15, + 102 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2898, + "bbox": [ + 1670, + 416, + 32, + 106 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 211521, + "bbox": [ + 1540, + 5, + 503, + 493 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 3555, + "bbox": [ + 1902, + 382, + 66, + 117 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 8565, + "bbox": [ + 1590, + 392, + 163, + 89 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 4246, + "bbox": [ + 1878, + 436, + 107, + 75 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000053_000019_gtFine_panoptic.png", + "image_id": "lindau_000053_000019", + "segments_info": [ + { + "area": 332086, + "bbox": [ + 79, + 508, + 1964, + 229 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 25471, + "bbox": [ + 226, + 5, + 1637, + 758 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 52241, + "bbox": [ + 6, + 326, + 1725, + 693 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 958012, + "bbox": [ + 6, + 5, + 2037, + 562 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 33015, + "bbox": [ + 79, + 438, + 1856, + 113 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 467, + "bbox": [ + 1769, + 401, + 15, + 46 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 587, + "bbox": [ + 1743, + 402, + 22, + 47 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 33408, + "bbox": [ + 228, + 419, + 375, + 129 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 24712, + "bbox": [ + 1910, + 331, + 133, + 274 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000054_000019_gtFine_panoptic.png", + "image_id": "lindau_000054_000019", + "segments_info": [ + { + "area": 735386, + "bbox": [ + 6, + 415, + 2037, + 604 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 297033, + "bbox": [ + 6, + 420, + 2037, + 599 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 129372, + "bbox": [ + 6, + 382, + 2037, + 181 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 33660, + "bbox": [ + 705, + 5, + 317, + 544 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 389956, + "bbox": [ + 6, + 99, + 2037, + 327 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 371248, + "bbox": [ + 6, + 5, + 2037, + 326 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2355, + "bbox": [ + 432, + 376, + 43, + 99 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 8921, + "bbox": [ + 1026, + 382, + 120, + 94 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000055_000019_gtFine_panoptic.png", + "image_id": "lindau_000055_000019", + "segments_info": [ + { + "area": 741564, + "bbox": [ + 6, + 443, + 2037, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 33847, + "bbox": [ + 175, + 308, + 732, + 164 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 11304, + "bbox": [ + 523, + 5, + 985, + 579 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1981, + "bbox": [ + 1058, + 369, + 131, + 59 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 737110, + "bbox": [ + 6, + 5, + 2037, + 568 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 184283, + "bbox": [ + 182, + 446, + 1861, + 511 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 18587, + "bbox": [ + 1326, + 11, + 681, + 319 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 442, + "bbox": [ + 839, + 424, + 17, + 49 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2580, + "bbox": [ + 677, + 409, + 113, + 53 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 842, + "bbox": [ + 508, + 441, + 39, + 33 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 38821, + "bbox": [ + 6, + 413, + 187, + 265 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1188, + "bbox": [ + 925, + 423, + 42, + 37 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 798, + "bbox": [ + 982, + 431, + 39, + 25 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 491, + "bbox": [ + 1021, + 428, + 29, + 24 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 679, + "bbox": [ + 1047, + 427, + 32, + 27 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 166, + "bbox": [ + 839, + 451, + 15, + 27 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000056_000019_gtFine_panoptic.png", + "image_id": "lindau_000056_000019", + "segments_info": [ + { + "area": 691025, + "bbox": [ + 6, + 443, + 2012, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 40270, + "bbox": [ + 6, + 456, + 1461, + 185 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 84235, + "bbox": [ + 6, + 256, + 747, + 256 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 28371, + "bbox": [ + 293, + 5, + 1602, + 727 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 17917, + "bbox": [ + 251, + 220, + 1023, + 246 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 811548, + "bbox": [ + 6, + 5, + 2037, + 613 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 182606, + "bbox": [ + 229, + 449, + 1814, + 570 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 4790, + "bbox": [ + 6, + 5, + 899, + 342 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1044, + "bbox": [ + 183, + 429, + 102, + 27 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 4439, + "bbox": [ + 197, + 442, + 98, + 68 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1677, + "bbox": [ + 53, + 455, + 85, + 62 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 10430, + "bbox": [ + 72, + 455, + 162, + 82 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 152, + "bbox": [ + 884, + 442, + 16, + 15 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 89, + "bbox": [ + 875, + 443, + 11, + 14 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 158, + "bbox": [ + 822, + 443, + 14, + 16 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 370, + "bbox": [ + 801, + 442, + 23, + 22 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 188, + "bbox": [ + 830, + 439, + 20, + 29 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1067, + "bbox": [ + 1187, + 422, + 26, + 65 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1626, + "bbox": [ + 1259, + 409, + 61, + 75 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 8898, + "bbox": [ + 1273, + 425, + 146, + 79 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1288, + "bbox": [ + 837, + 439, + 44, + 37 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000057_000019_gtFine_panoptic.png", + "image_id": "lindau_000057_000019", + "segments_info": [ + { + "area": 736971, + "bbox": [ + 6, + 387, + 2037, + 632 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 156175, + "bbox": [ + 37, + 431, + 2006, + 466 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 284728, + "bbox": [ + 47, + 5, + 1996, + 516 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 34853, + "bbox": [ + 1345, + 324, + 429, + 141 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 8190, + "bbox": [ + 258, + 454, + 191, + 59 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 14222, + "bbox": [ + 528, + 55, + 1169, + 509 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 22673, + "bbox": [ + 1498, + 5, + 181, + 159 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 216727, + "bbox": [ + 6, + 5, + 2037, + 530 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2869, + "bbox": [ + 1194, + 411, + 164, + 57 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 249938, + "bbox": [ + 142, + 5, + 1901, + 334 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1611, + "bbox": [ + 867, + 385, + 97, + 28 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 796, + "bbox": [ + 909, + 394, + 42, + 69 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 502, + "bbox": [ + 838, + 395, + 33, + 29 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 514, + "bbox": [ + 824, + 398, + 30, + 26 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 394, + "bbox": [ + 807, + 401, + 24, + 23 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 299, + "bbox": [ + 791, + 402, + 22, + 26 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 97, + "bbox": [ + 779, + 404, + 22, + 18 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 18785, + "bbox": [ + 424, + 412, + 202, + 135 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 31467, + "bbox": [ + 595, + 405, + 244, + 158 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 5006, + "bbox": [ + 6, + 440, + 33, + 221 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1226, + "bbox": [ + 1330, + 387, + 32, + 48 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 327, + "bbox": [ + 973, + 406, + 24, + 49 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 30539, + "bbox": [ + 959, + 388, + 218, + 179 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 2056, + "bbox": [ + 900, + 417, + 56, + 66 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "lindau_000058_000019_gtFine_panoptic.png", + "image_id": "lindau_000058_000019", + "segments_info": [ + { + "area": 774501, + "bbox": [ + 6, + 419, + 2037, + 600 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 1825, + "bbox": [ + 243, + 415, + 836, + 61 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 663, + "bbox": [ + 763, + 385, + 23, + 31 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 987354, + "bbox": [ + 6, + 5, + 2037, + 635 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 165319, + "bbox": [ + 6, + 412, + 2037, + 488 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 4292, + "bbox": [ + 697, + 19, + 72, + 375 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 218, + "bbox": [ + 711, + 415, + 19, + 14 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 294, + "bbox": [ + 666, + 409, + 21, + 18 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1974, + "bbox": [ + 828, + 418, + 58, + 42 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 7574, + "bbox": [ + 879, + 405, + 109, + 87 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000000_000019_gtFine_panoptic.png", + "image_id": "munster_000000_000019", + "segments_info": [ + { + "area": 776063, + "bbox": [ + 6, + 431, + 2037, + 588 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 170117, + "bbox": [ + 6, + 440, + 2037, + 522 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 88269, + "bbox": [ + 1360, + 51, + 683, + 397 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 60647, + "bbox": [ + 28, + 5, + 1978, + 705 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 24713, + "bbox": [ + 12, + 5, + 2029, + 403 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2123, + "bbox": [ + 1212, + 309, + 390, + 65 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 516456, + "bbox": [ + 6, + 5, + 1804, + 486 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 778, + "bbox": [ + 1097, + 441, + 83, + 14 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 152771, + "bbox": [ + 409, + 5, + 1634, + 375 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 905, + "bbox": [ + 217, + 424, + 29, + 64 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 711, + "bbox": [ + 1213, + 401, + 17, + 56 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 910, + "bbox": [ + 1293, + 389, + 25, + 61 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 766, + "bbox": [ + 1325, + 385, + 20, + 68 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 6333, + "bbox": [ + 1873, + 338, + 72, + 198 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 973, + "bbox": [ + 1382, + 383, + 25, + 69 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 20651, + "bbox": [ + 377, + 322, + 166, + 302 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 112, + "bbox": [ + 955, + 424, + 11, + 12 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 43, + "bbox": [ + 980, + 427, + 8, + 7 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1081, + "bbox": [ + 715, + 423, + 42, + 49 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 57, + "bbox": [ + 970, + 427, + 12, + 11 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 138, + "bbox": [ + 964, + 429, + 14, + 11 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 129, + "bbox": [ + 989, + 428, + 15, + 12 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 69, + "bbox": [ + 912, + 428, + 11, + 14 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 204, + "bbox": [ + 917, + 429, + 17, + 14 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 55, + "bbox": [ + 904, + 429, + 6, + 12 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 540, + "bbox": [ + 859, + 429, + 32, + 22 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 261, + "bbox": [ + 998, + 423, + 22, + 42 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 899, + "bbox": [ + 821, + 421, + 33, + 48 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 745, + "bbox": [ + 774, + 421, + 61, + 50 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 3442, + "bbox": [ + 751, + 430, + 79, + 52 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 1383, + "bbox": [ + 686, + 425, + 47, + 51 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 784, + "bbox": [ + 676, + 427, + 32, + 53 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 6120, + "bbox": [ + 998, + 420, + 103, + 75 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 12583, + "bbox": [ + 1762, + 380, + 281, + 110 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 24340, + "bbox": [ + 275, + 399, + 421, + 145 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 17363, + "bbox": [ + 6, + 407, + 173, + 182 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 670, + "bbox": [ + 873, + 413, + 32, + 31 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 36176, + "bbox": [ + 311, + 424, + 354, + 229 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 4100, + "bbox": [ + 1900, + 418, + 53, + 117 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000001_000019_gtFine_panoptic.png", + "image_id": "munster_000001_000019", + "segments_info": [ + { + "area": 813662, + "bbox": [ + 6, + 437, + 2037, + 582 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 80849, + "bbox": [ + 1139, + 442, + 904, + 189 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 427, + "bbox": [ + 1685, + 391, + 79, + 54 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 9982, + "bbox": [ + 501, + 143, + 1081, + 359 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 139, + "bbox": [ + 948, + 401, + 59, + 12 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 8157, + "bbox": [ + 1564, + 139, + 88, + 103 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 770595, + "bbox": [ + 6, + 5, + 2037, + 483 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 10269, + "bbox": [ + 500, + 447, + 866, + 62 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 54954, + "bbox": [ + 538, + 5, + 567, + 381 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 4060, + "bbox": [ + 1534, + 333, + 68, + 162 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 5545, + "bbox": [ + 1774, + 295, + 52, + 177 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 11663, + "bbox": [ + 1779, + 280, + 125, + 228 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 4166, + "bbox": [ + 2013, + 254, + 30, + 226 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 46, + "bbox": [ + 955, + 436, + 7, + 11 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 103, + "bbox": [ + 945, + 436, + 13, + 11 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 75, + "bbox": [ + 939, + 436, + 9, + 13 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 158, + "bbox": [ + 924, + 435, + 18, + 15 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 234, + "bbox": [ + 894, + 438, + 19, + 16 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 299, + "bbox": [ + 911, + 438, + 22, + 17 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 476, + "bbox": [ + 866, + 437, + 27, + 24 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 962, + "bbox": [ + 831, + 437, + 42, + 30 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1333, + "bbox": [ + 786, + 439, + 49, + 35 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1070, + "bbox": [ + 439, + 444, + 63, + 68 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 191740, + "bbox": [ + 6, + 364, + 533, + 435 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000002_000019_gtFine_panoptic.png", + "image_id": "munster_000002_000019", + "segments_info": [ + { + "area": 630579, + "bbox": [ + 6, + 458, + 1931, + 561 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 139144, + "bbox": [ + 6, + 462, + 2037, + 557 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 62707, + "bbox": [ + 6, + 285, + 809, + 232 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 36302, + "bbox": [ + 59, + 5, + 1439, + 581 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 158, + "bbox": [ + 1030, + 417, + 47, + 11 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1285, + "bbox": [ + 1105, + 378, + 57, + 46 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 776652, + "bbox": [ + 6, + 5, + 2029, + 607 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 107638, + "bbox": [ + 6, + 455, + 1999, + 306 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 120906, + "bbox": [ + 6, + 5, + 1072, + 414 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 782, + "bbox": [ + 514, + 459, + 23, + 52 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 303, + "bbox": [ + 686, + 454, + 13, + 36 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1066, + "bbox": [ + 556, + 436, + 48, + 90 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 215, + "bbox": [ + 1082, + 446, + 16, + 16 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 369, + "bbox": [ + 1055, + 449, + 24, + 18 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 245, + "bbox": [ + 956, + 451, + 18, + 20 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 796, + "bbox": [ + 926, + 448, + 34, + 28 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 965, + "bbox": [ + 886, + 454, + 41, + 31 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1309, + "bbox": [ + 840, + 458, + 49, + 34 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 764, + "bbox": [ + 1001, + 448, + 35, + 26 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 4210, + "bbox": [ + 731, + 448, + 86, + 63 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 3560, + "bbox": [ + 612, + 463, + 84, + 55 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 11255, + "bbox": [ + 312, + 450, + 171, + 107 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2765, + "bbox": [ + 546, + 462, + 54, + 78 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000003_000019_gtFine_panoptic.png", + "image_id": "munster_000003_000019", + "segments_info": [ + { + "area": 955554, + "bbox": [ + 6, + 427, + 2037, + 592 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 70716, + "bbox": [ + 1098, + 430, + 945, + 218 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 224123, + "bbox": [ + 908, + 5, + 1135, + 480 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4653, + "bbox": [ + 271, + 409, + 493, + 47 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 46227, + "bbox": [ + 491, + 5, + 1519, + 510 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 13642, + "bbox": [ + 449, + 188, + 1007, + 218 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 7064, + "bbox": [ + 828, + 288, + 584, + 152 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 498055, + "bbox": [ + 6, + 5, + 1550, + 522 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 79464, + "bbox": [ + 466, + 5, + 642, + 364 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 5332, + "bbox": [ + 1925, + 395, + 118, + 96 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 226, + "bbox": [ + 1190, + 408, + 15, + 31 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 300, + "bbox": [ + 1176, + 404, + 15, + 32 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1219, + "bbox": [ + 1316, + 390, + 28, + 82 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1058, + "bbox": [ + 1403, + 392, + 27, + 70 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1067, + "bbox": [ + 1797, + 363, + 23, + 121 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2588, + "bbox": [ + 1735, + 352, + 32, + 126 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1845, + "bbox": [ + 1688, + 351, + 40, + 139 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 4298, + "bbox": [ + 1759, + 355, + 56, + 143 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 833, + "bbox": [ + 1346, + 393, + 25, + 63 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 368, + "bbox": [ + 1595, + 374, + 15, + 99 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2256, + "bbox": [ + 1557, + 369, + 52, + 83 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 3276, + "bbox": [ + 1651, + 353, + 56, + 114 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 358, + "bbox": [ + 772, + 418, + 32, + 32 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 491, + "bbox": [ + 302, + 430, + 73, + 23 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 845, + "bbox": [ + 965, + 415, + 40, + 27 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 4731, + "bbox": [ + 636, + 401, + 108, + 89 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 8973, + "bbox": [ + 422, + 403, + 130, + 87 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 12093, + "bbox": [ + 539, + 406, + 154, + 97 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 429, + "bbox": [ + 1350, + 431, + 17, + 32 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1599, + "bbox": [ + 1566, + 433, + 34, + 63 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 97, + "bbox": [ + 1552, + 411, + 27, + 6 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 3089, + "bbox": [ + 1651, + 413, + 55, + 97 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 3734, + "bbox": [ + 1813, + 404, + 79, + 84 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 535, + "bbox": [ + 1473, + 413, + 37, + 45 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000004_000019_gtFine_panoptic.png", + "image_id": "munster_000004_000019", + "segments_info": [ + { + "area": 856825, + "bbox": [ + 6, + 441, + 2037, + 578 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 78754, + "bbox": [ + 1142, + 442, + 901, + 234 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 414995, + "bbox": [ + 6, + 5, + 2037, + 502 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 111523, + "bbox": [ + 6, + 372, + 951, + 220 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 13217, + "bbox": [ + 324, + 5, + 1373, + 507 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 685, + "bbox": [ + 893, + 341, + 134, + 72 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 43276, + "bbox": [ + 453, + 5, + 1590, + 387 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 108916, + "bbox": [ + 177, + 5, + 1101, + 445 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 56109, + "bbox": [ + 6, + 440, + 944, + 258 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 246898, + "bbox": [ + 84, + 5, + 1248, + 359 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 10486, + "bbox": [ + 1296, + 414, + 338, + 64 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 458, + "bbox": [ + 1196, + 406, + 16, + 42 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 415, + "bbox": [ + 1208, + 410, + 17, + 39 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 291, + "bbox": [ + 1258, + 410, + 14, + 41 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 184, + "bbox": [ + 1353, + 404, + 19, + 17 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 3928, + "bbox": [ + 1530, + 365, + 55, + 137 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1575, + "bbox": [ + 86, + 371, + 185, + 16 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 138, + "bbox": [ + 1014, + 425, + 10, + 22 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 238, + "bbox": [ + 996, + 422, + 22, + 28 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 150, + "bbox": [ + 997, + 423, + 13, + 29 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 606, + "bbox": [ + 1046, + 426, + 31, + 23 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1979, + "bbox": [ + 948, + 419, + 57, + 43 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 805, + "bbox": [ + 1321, + 418, + 27, + 48 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1525, + "bbox": [ + 1534, + 440, + 43, + 75 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000005_000019_gtFine_panoptic.png", + "image_id": "munster_000005_000019", + "segments_info": [ + { + "area": 746914, + "bbox": [ + 6, + 439, + 2037, + 580 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 143225, + "bbox": [ + 6, + 430, + 2037, + 451 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 455144, + "bbox": [ + 6, + 5, + 1851, + 532 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19511, + "bbox": [ + 886, + 410, + 693, + 93 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 19109, + "bbox": [ + 264, + 416, + 1074, + 131 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 50281, + "bbox": [ + 599, + 5, + 1440, + 669 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 5084, + "bbox": [ + 1470, + 150, + 573, + 175 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 417578, + "bbox": [ + 6, + 5, + 2037, + 564 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 53835, + "bbox": [ + 223, + 493, + 1820, + 347 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 12926, + "bbox": [ + 1253, + 5, + 332, + 144 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 6266, + "bbox": [ + 152, + 459, + 136, + 91 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 918, + "bbox": [ + 1455, + 405, + 34, + 58 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2770, + "bbox": [ + 1790, + 375, + 40, + 115 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 5469, + "bbox": [ + 191, + 410, + 68, + 170 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 173, + "bbox": [ + 1735, + 410, + 19, + 20 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 241, + "bbox": [ + 1735, + 412, + 12, + 30 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1972, + "bbox": [ + 509, + 465, + 46, + 70 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3045, + "bbox": [ + 422, + 453, + 73, + 89 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000006_000019_gtFine_panoptic.png", + "image_id": "munster_000006_000019", + "segments_info": [ + { + "area": 747143, + "bbox": [ + 6, + 461, + 2037, + 558 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 65009, + "bbox": [ + 6, + 449, + 1645, + 256 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 526957, + "bbox": [ + 6, + 5, + 2037, + 525 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 36354, + "bbox": [ + 6, + 411, + 971, + 178 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 21920, + "bbox": [ + 6, + 413, + 1031, + 126 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 20865, + "bbox": [ + 187, + 5, + 1520, + 545 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 5701, + "bbox": [ + 156, + 212, + 1555, + 205 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 265047, + "bbox": [ + 394, + 5, + 1591, + 501 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 8804, + "bbox": [ + 1417, + 436, + 243, + 110 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 45134, + "bbox": [ + 770, + 5, + 552, + 179 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 5896, + "bbox": [ + 1351, + 371, + 108, + 165 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 579, + "bbox": [ + 1146, + 430, + 27, + 43 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 345, + "bbox": [ + 1134, + 428, + 25, + 48 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 862, + "bbox": [ + 1236, + 429, + 36, + 38 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2723, + "bbox": [ + 1183, + 426, + 67, + 51 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 7752, + "bbox": [ + 1038, + 422, + 118, + 85 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2198, + "bbox": [ + 386, + 465, + 38, + 77 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 26046, + "bbox": [ + 505, + 413, + 275, + 125 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000007_000019_gtFine_panoptic.png", + "image_id": "munster_000007_000019", + "segments_info": [ + { + "area": 675957, + "bbox": [ + 6, + 449, + 2028, + 570 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 215300, + "bbox": [ + 6, + 442, + 2037, + 577 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 368247, + "bbox": [ + 6, + 5, + 2037, + 524 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19370, + "bbox": [ + 648, + 156, + 1344, + 453 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1254, + "bbox": [ + 1070, + 277, + 261, + 117 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 11836, + "bbox": [ + 655, + 157, + 959, + 257 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 445727, + "bbox": [ + 481, + 5, + 1562, + 611 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 20345, + "bbox": [ + 564, + 457, + 1270, + 184 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 67152, + "bbox": [ + 714, + 5, + 497, + 283 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 304, + "bbox": [ + 1461, + 398, + 20, + 41 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 106, + "bbox": [ + 1320, + 416, + 12, + 23 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 107, + "bbox": [ + 1326, + 416, + 30, + 23 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 693, + "bbox": [ + 1367, + 409, + 19, + 58 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 832, + "bbox": [ + 1382, + 403, + 25, + 63 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1324, + "bbox": [ + 526, + 453, + 42, + 67 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1048, + "bbox": [ + 505, + 458, + 39, + 64 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1297, + "bbox": [ + 372, + 434, + 57, + 59 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 2234, + "bbox": [ + 411, + 462, + 45, + 85 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 554, + "bbox": [ + 1035, + 431, + 24, + 51 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 493, + "bbox": [ + 1031, + 432, + 40, + 31 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 156, + "bbox": [ + 1194, + 436, + 15, + 14 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 148, + "bbox": [ + 1183, + 435, + 14, + 15 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 113, + "bbox": [ + 1179, + 435, + 8, + 16 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 651, + "bbox": [ + 1000, + 442, + 32, + 34 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 413, + "bbox": [ + 990, + 458, + 14, + 36 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 7570, + "bbox": [ + 1217, + 416, + 121, + 103 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 6842, + "bbox": [ + 1067, + 425, + 105, + 81 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 41189, + "bbox": [ + 6, + 454, + 414, + 156 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 12628, + "bbox": [ + 1068, + 324, + 118, + 167 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 36323, + "bbox": [ + 765, + 293, + 236, + 238 + ], + "category_id": 27, + "id": 27001, + "iscrowd": 0 + }, + { + "area": 812, + "bbox": [ + 1021, + 449, + 48, + 33 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3679, + "bbox": [ + 1952, + 382, + 91, + 101 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000008_000019_gtFine_panoptic.png", + "image_id": "munster_000008_000019", + "segments_info": [ + { + "area": 609159, + "bbox": [ + 6, + 443, + 2037, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 54542, + "bbox": [ + 1504, + 533, + 539, + 245 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 316602, + "bbox": [ + 6, + 5, + 2037, + 461 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 17207, + "bbox": [ + 549, + 486, + 1494, + 129 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 2456, + "bbox": [ + 524, + 456, + 112, + 45 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 14930, + "bbox": [ + 1128, + 5, + 722, + 639 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 353, + "bbox": [ + 1168, + 392, + 20, + 24 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 407165, + "bbox": [ + 6, + 5, + 2037, + 533 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 644, + "bbox": [ + 958, + 462, + 78, + 51 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 119558, + "bbox": [ + 834, + 5, + 785, + 304 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 258, + "bbox": [ + 1076, + 434, + 21, + 17 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 219, + "bbox": [ + 1092, + 433, + 15, + 20 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 191, + "bbox": [ + 1104, + 425, + 25, + 15 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 414, + "bbox": [ + 1104, + 433, + 27, + 29 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 724, + "bbox": [ + 1117, + 431, + 32, + 41 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 737, + "bbox": [ + 1136, + 424, + 56, + 57 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1078, + "bbox": [ + 1146, + 430, + 39, + 58 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 77, + "bbox": [ + 1046, + 433, + 11, + 22 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 181, + "bbox": [ + 1039, + 432, + 14, + 30 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 136, + "bbox": [ + 1028, + 432, + 20, + 33 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 194, + "bbox": [ + 1028, + 433, + 16, + 34 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 267, + "bbox": [ + 1021, + 432, + 16, + 37 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 617, + "bbox": [ + 985, + 426, + 44, + 50 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 306, + "bbox": [ + 986, + 430, + 34, + 50 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 790, + "bbox": [ + 987, + 431, + 26, + 59 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 1956, + "bbox": [ + 957, + 417, + 42, + 89 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 1957, + "bbox": [ + 1164, + 428, + 53, + 72 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 2208, + "bbox": [ + 1190, + 425, + 51, + 92 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 1794, + "bbox": [ + 1216, + 412, + 78, + 115 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 7875, + "bbox": [ + 1228, + 415, + 117, + 135 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 11429, + "bbox": [ + 823, + 422, + 136, + 118 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 43430, + "bbox": [ + 603, + 406, + 257, + 220 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 11465, + "bbox": [ + 1540, + 415, + 148, + 112 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 11387, + "bbox": [ + 1701, + 406, + 153, + 117 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 51510, + "bbox": [ + 1279, + 409, + 313, + 213 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 282143, + "bbox": [ + 6, + 369, + 632, + 582 + ], + "category_id": 26, + "id": 26025, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000009_000019_gtFine_panoptic.png", + "image_id": "munster_000009_000019", + "segments_info": [ + { + "area": 603618, + "bbox": [ + 6, + 448, + 2037, + 571 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 47713, + "bbox": [ + 6, + 443, + 1576, + 361 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 290990, + "bbox": [ + 6, + 5, + 2037, + 443 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 9760, + "bbox": [ + 1371, + 443, + 226, + 94 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 23523, + "bbox": [ + 708, + 370, + 937, + 143 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 13302, + "bbox": [ + 146, + 35, + 1351, + 601 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 10511, + "bbox": [ + 203, + 5, + 1315, + 473 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 376677, + "bbox": [ + 6, + 5, + 1608, + 460 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 24078, + "bbox": [ + 1004, + 5, + 413, + 128 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 123, + "bbox": [ + 1150, + 398, + 12, + 15 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 542, + "bbox": [ + 717, + 397, + 17, + 54 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 625, + "bbox": [ + 1004, + 403, + 23, + 49 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1293, + "bbox": [ + 729, + 400, + 38, + 92 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 177, + "bbox": [ + 1241, + 406, + 24, + 11 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 248, + "bbox": [ + 1218, + 408, + 28, + 11 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 497, + "bbox": [ + 1178, + 404, + 46, + 17 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 564, + "bbox": [ + 1155, + 407, + 41, + 27 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 773, + "bbox": [ + 1126, + 412, + 52, + 37 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2165, + "bbox": [ + 1086, + 413, + 65, + 39 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 460, + "bbox": [ + 685, + 406, + 27, + 41 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1751, + "bbox": [ + 759, + 414, + 85, + 41 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1439, + "bbox": [ + 1155, + 421, + 52, + 89 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 935, + "bbox": [ + 1171, + 419, + 52, + 98 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2215, + "bbox": [ + 1180, + 418, + 60, + 114 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 20666, + "bbox": [ + 1198, + 416, + 184, + 144 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 190842, + "bbox": [ + 146, + 360, + 598, + 403 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 253718, + "bbox": [ + 1565, + 298, + 478, + 700 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000010_000019_gtFine_panoptic.png", + "image_id": "munster_000010_000019", + "segments_info": [ + { + "area": 823312, + "bbox": [ + 6, + 444, + 2037, + 575 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 112203, + "bbox": [ + 6, + 425, + 2037, + 375 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 523121, + "bbox": [ + 6, + 5, + 2016, + 517 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 15192, + "bbox": [ + 161, + 111, + 1804, + 524 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 23643, + "bbox": [ + 680, + 130, + 1363, + 253 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 219284, + "bbox": [ + 6, + 5, + 2037, + 639 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 3740, + "bbox": [ + 6, + 496, + 306, + 33 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 31635, + "bbox": [ + 1225, + 5, + 290, + 213 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2424, + "bbox": [ + 1218, + 391, + 50, + 107 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 276, + "bbox": [ + 1090, + 376, + 25, + 19 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 80, + "bbox": [ + 971, + 440, + 36, + 48 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 12569, + "bbox": [ + 889, + 339, + 95, + 257 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 14065, + "bbox": [ + 694, + 329, + 98, + 244 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 17011, + "bbox": [ + 1111, + 335, + 149, + 305 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1121, + "bbox": [ + 986, + 416, + 51, + 49 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 682, + "bbox": [ + 139, + 392, + 31, + 39 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2348, + "bbox": [ + 123, + 319, + 68, + 74 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1458, + "bbox": [ + 1009, + 375, + 59, + 57 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 184, + "bbox": [ + 1365, + 390, + 21, + 13 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 282, + "bbox": [ + 1323, + 391, + 25, + 21 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 476, + "bbox": [ + 1280, + 389, + 44, + 14 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 449, + "bbox": [ + 1475, + 390, + 21, + 40 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 644, + "bbox": [ + 1461, + 395, + 25, + 39 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 644, + "bbox": [ + 1438, + 387, + 25, + 43 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2414, + "bbox": [ + 1382, + 379, + 67, + 72 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1083, + "bbox": [ + 1359, + 401, + 39, + 46 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 190, + "bbox": [ + 1261, + 394, + 26, + 19 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 285, + "bbox": [ + 1214, + 393, + 51, + 23 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1028, + "bbox": [ + 1207, + 395, + 34, + 54 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 534, + "bbox": [ + 1207, + 400, + 14, + 52 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 7232, + "bbox": [ + 1261, + 401, + 100, + 90 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 49, + "bbox": [ + 1142, + 386, + 17, + 6 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 1158, + "bbox": [ + 1103, + 387, + 55, + 47 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 1498, + "bbox": [ + 1083, + 395, + 62, + 54 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 2897, + "bbox": [ + 994, + 393, + 122, + 63 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 4896, + "bbox": [ + 212, + 386, + 115, + 85 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 5478, + "bbox": [ + 6, + 358, + 67, + 98 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 80259, + "bbox": [ + 311, + 267, + 502, + 248 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 899, + "bbox": [ + 1471, + 426, + 34, + 57 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 5939, + "bbox": [ + 1491, + 439, + 135, + 84 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1117, + "bbox": [ + 966, + 394, + 43, + 63 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 17349, + "bbox": [ + 641, + 421, + 223, + 157 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1004, + "bbox": [ + 1405, + 417, + 31, + 61 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 6425, + "bbox": [ + 134, + 382, + 104, + 125 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 1837, + "bbox": [ + 976, + 417, + 117, + 74 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000011_000019_gtFine_panoptic.png", + "image_id": "munster_000011_000019", + "segments_info": [ + { + "area": 702382, + "bbox": [ + 6, + 451, + 2037, + 568 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 109998, + "bbox": [ + 6, + 462, + 1517, + 284 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 173376, + "bbox": [ + 216, + 5, + 1827, + 468 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 18048, + "bbox": [ + 93, + 5, + 1834, + 581 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 54, + "bbox": [ + 1051, + 401, + 6, + 9 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 16075, + "bbox": [ + 258, + 142, + 1703, + 272 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 529862, + "bbox": [ + 6, + 5, + 1820, + 552 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1421, + "bbox": [ + 244, + 461, + 684, + 147 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 98995, + "bbox": [ + 230, + 5, + 1020, + 378 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2940, + "bbox": [ + 909, + 425, + 142, + 46 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 388, + "bbox": [ + 751, + 434, + 14, + 39 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 304, + "bbox": [ + 654, + 430, + 19, + 30 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 577, + "bbox": [ + 636, + 431, + 19, + 51 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 108, + "bbox": [ + 432, + 440, + 17, + 23 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1106, + "bbox": [ + 437, + 438, + 45, + 64 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 754, + "bbox": [ + 387, + 415, + 22, + 48 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 774, + "bbox": [ + 308, + 413, + 20, + 62 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1240, + "bbox": [ + 209, + 413, + 34, + 55 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 700, + "bbox": [ + 238, + 417, + 31, + 49 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 812, + "bbox": [ + 991, + 417, + 33, + 52 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1042, + "bbox": [ + 671, + 415, + 33, + 76 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2202, + "bbox": [ + 532, + 402, + 51, + 99 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 1440, + "bbox": [ + 715, + 413, + 34, + 80 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 3969, + "bbox": [ + 311, + 395, + 60, + 146 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 209, + "bbox": [ + 1091, + 430, + 30, + 29 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 836, + "bbox": [ + 1093, + 434, + 35, + 27 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 465, + "bbox": [ + 1131, + 433, + 28, + 50 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 391, + "bbox": [ + 1139, + 434, + 22, + 54 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2553, + "bbox": [ + 1145, + 430, + 60, + 68 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 5476, + "bbox": [ + 1183, + 409, + 133, + 118 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 12136, + "bbox": [ + 1222, + 426, + 150, + 121 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 48530, + "bbox": [ + 1330, + 374, + 301, + 253 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 525, + "bbox": [ + 1050, + 418, + 35, + 40 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 980, + "bbox": [ + 1040, + 432, + 39, + 32 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 201184, + "bbox": [ + 1514, + 344, + 529, + 505 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 644, + "bbox": [ + 1084, + 414, + 32, + 40 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 946, + "bbox": [ + 974, + 434, + 60, + 43 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 928, + "bbox": [ + 647, + 448, + 31, + 46 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 973, + "bbox": [ + 674, + 446, + 31, + 57 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 558, + "bbox": [ + 718, + 443, + 30, + 60 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1758, + "bbox": [ + 529, + 450, + 48, + 78 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 3265, + "bbox": [ + 314, + 453, + 61, + 106 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000012_000019_gtFine_panoptic.png", + "image_id": "munster_000012_000019", + "segments_info": [ + { + "area": 735503, + "bbox": [ + 6, + 471, + 2037, + 548 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 34001, + "bbox": [ + 1522, + 477, + 521, + 117 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 298647, + "bbox": [ + 6, + 5, + 2037, + 513 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 7812, + "bbox": [ + 443, + 5, + 1423, + 556 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 288, + "bbox": [ + 968, + 358, + 81, + 66 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 8486, + "bbox": [ + 1198, + 147, + 697, + 259 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 410589, + "bbox": [ + 195, + 5, + 1848, + 558 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 67482, + "bbox": [ + 760, + 5, + 388, + 367 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 215, + "bbox": [ + 1846, + 402, + 29, + 19 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 3727, + "bbox": [ + 1623, + 389, + 52, + 116 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3161, + "bbox": [ + 1575, + 392, + 43, + 116 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 10545, + "bbox": [ + 1305, + 364, + 78, + 239 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 434, + "bbox": [ + 1124, + 420, + 27, + 35 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 113, + "bbox": [ + 991, + 429, + 16, + 18 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 818, + "bbox": [ + 958, + 428, + 42, + 43 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1043, + "bbox": [ + 947, + 432, + 27, + 58 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 866, + "bbox": [ + 1134, + 418, + 40, + 71 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1469, + "bbox": [ + 1151, + 415, + 45, + 84 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 5359, + "bbox": [ + 1169, + 408, + 76, + 111 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1852, + "bbox": [ + 811, + 383, + 76, + 53 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 363, + "bbox": [ + 703, + 413, + 75, + 12 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 883, + "bbox": [ + 675, + 424, + 45, + 38 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 8284, + "bbox": [ + 570, + 418, + 124, + 130 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 9680, + "bbox": [ + 842, + 396, + 115, + 113 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 19598, + "bbox": [ + 973, + 417, + 183, + 140 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 22245, + "bbox": [ + 672, + 416, + 195, + 148 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 12332, + "bbox": [ + 6, + 441, + 193, + 159 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 178116, + "bbox": [ + 6, + 386, + 629, + 400 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 8350, + "bbox": [ + 1979, + 612, + 64, + 218 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 113184, + "bbox": [ + 1206, + 175, + 367, + 416 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000013_000019_gtFine_panoptic.png", + "image_id": "munster_000013_000019", + "segments_info": [ + { + "area": 772752, + "bbox": [ + 6, + 435, + 2037, + 584 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 93930, + "bbox": [ + 6, + 454, + 2037, + 273 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 638108, + "bbox": [ + 6, + 5, + 2037, + 525 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 9657, + "bbox": [ + 278, + 487, + 188, + 134 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 40806, + "bbox": [ + 6, + 5, + 1967, + 628 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 14363, + "bbox": [ + 468, + 5, + 877, + 344 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 10064, + "bbox": [ + 1277, + 110, + 766, + 290 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 18181, + "bbox": [ + 839, + 234, + 304, + 203 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 144313, + "bbox": [ + 623, + 5, + 795, + 346 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1113, + "bbox": [ + 1087, + 405, + 35, + 36 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 43798, + "bbox": [ + 72, + 418, + 1433, + 203 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 385, + "bbox": [ + 1018, + 415, + 17, + 39 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 44, + "bbox": [ + 848, + 423, + 9, + 8 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 197, + "bbox": [ + 731, + 416, + 26, + 12 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 144, + "bbox": [ + 672, + 414, + 17, + 15 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 99, + "bbox": [ + 660, + 420, + 14, + 11 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 124, + "bbox": [ + 538, + 415, + 16, + 11 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 510, + "bbox": [ + 498, + 415, + 19, + 42 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1481, + "bbox": [ + 297, + 405, + 54, + 42 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 5990, + "bbox": [ + 577, + 380, + 89, + 174 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 2589, + "bbox": [ + 1203, + 403, + 54, + 140 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 6154, + "bbox": [ + 1106, + 384, + 75, + 169 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 4166, + "bbox": [ + 885, + 384, + 75, + 146 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 223, + "bbox": [ + 1043, + 424, + 21, + 15 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 120, + "bbox": [ + 1117, + 423, + 14, + 21 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 613, + "bbox": [ + 861, + 427, + 66, + 36 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 533, + "bbox": [ + 862, + 429, + 31, + 34 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 345, + "bbox": [ + 850, + 430, + 25, + 36 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2135, + "bbox": [ + 803, + 429, + 61, + 44 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1352, + "bbox": [ + 729, + 427, + 47, + 65 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2488, + "bbox": [ + 700, + 429, + 57, + 72 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2065, + "bbox": [ + 661, + 428, + 58, + 83 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 3277, + "bbox": [ + 633, + 431, + 62, + 92 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 11258, + "bbox": [ + 480, + 422, + 155, + 122 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 717, + "bbox": [ + 1158, + 399, + 48, + 28 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 633, + "bbox": [ + 1163, + 414, + 47, + 31 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1406, + "bbox": [ + 1166, + 423, + 42, + 59 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 5611, + "bbox": [ + 1225, + 410, + 129, + 117 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 912, + "bbox": [ + 297, + 558, + 45, + 40 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 11225, + "bbox": [ + 1877, + 427, + 166, + 132 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1401, + "bbox": [ + 1547, + 443, + 100, + 63 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1758, + "bbox": [ + 1619, + 416, + 52, + 96 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 11207, + "bbox": [ + 1345, + 429, + 155, + 131 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 8941, + "bbox": [ + 1169, + 441, + 149, + 105 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 8210, + "bbox": [ + 841, + 448, + 158, + 97 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000014_000019_gtFine_panoptic.png", + "image_id": "munster_000014_000019", + "segments_info": [ + { + "area": 845305, + "bbox": [ + 6, + 459, + 2037, + 560 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 33916, + "bbox": [ + 6, + 474, + 1824, + 170 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 614185, + "bbox": [ + 6, + 5, + 2037, + 546 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 13926, + "bbox": [ + 481, + 5, + 1368, + 504 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 6615, + "bbox": [ + 797, + 238, + 1091, + 237 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 41494, + "bbox": [ + 370, + 92, + 829, + 379 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 176224, + "bbox": [ + 368, + 5, + 1114, + 355 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 246, + "bbox": [ + 1155, + 440, + 10, + 30 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 150, + "bbox": [ + 689, + 434, + 20, + 15 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 161, + "bbox": [ + 559, + 440, + 17, + 21 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 120, + "bbox": [ + 516, + 444, + 16, + 9 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 248, + "bbox": [ + 408, + 458, + 17, + 24 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 547, + "bbox": [ + 288, + 418, + 35, + 30 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 954, + "bbox": [ + 185, + 424, + 38, + 48 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 5809, + "bbox": [ + 26, + 406, + 116, + 171 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1927, + "bbox": [ + 1161, + 424, + 45, + 91 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 2202, + "bbox": [ + 1221, + 415, + 45, + 103 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 2357, + "bbox": [ + 1574, + 402, + 39, + 104 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 1727, + "bbox": [ + 1650, + 406, + 28, + 95 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1843, + "bbox": [ + 1728, + 389, + 41, + 115 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 3853, + "bbox": [ + 1854, + 369, + 61, + 117 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 133, + "bbox": [ + 1058, + 445, + 16, + 17 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 375, + "bbox": [ + 1023, + 435, + 21, + 28 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 193, + "bbox": [ + 1164, + 444, + 11, + 26 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 46, + "bbox": [ + 1194, + 444, + 10, + 35 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 159, + "bbox": [ + 1198, + 443, + 17, + 35 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 670, + "bbox": [ + 1202, + 443, + 27, + 37 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 387, + "bbox": [ + 1221, + 441, + 22, + 45 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1222, + "bbox": [ + 993, + 440, + 41, + 38 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2767, + "bbox": [ + 935, + 439, + 65, + 53 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1332, + "bbox": [ + 762, + 446, + 56, + 61 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1937, + "bbox": [ + 752, + 449, + 47, + 63 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 2747, + "bbox": [ + 709, + 444, + 59, + 74 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 695, + "bbox": [ + 650, + 445, + 75, + 82 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 10442, + "bbox": [ + 574, + 448, + 153, + 92 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 14541, + "bbox": [ + 431, + 452, + 166, + 114 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 15580, + "bbox": [ + 6, + 368, + 95, + 197 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 41786, + "bbox": [ + 107, + 447, + 313, + 180 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 2385, + "bbox": [ + 1253, + 422, + 71, + 70 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 472, + "bbox": [ + 1277, + 442, + 28, + 54 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 1877, + "bbox": [ + 1287, + 435, + 41, + 67 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 10340, + "bbox": [ + 1319, + 378, + 137, + 136 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 4241, + "bbox": [ + 1369, + 432, + 83, + 94 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 15585, + "bbox": [ + 1415, + 425, + 167, + 116 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 62475, + "bbox": [ + 1805, + 343, + 238, + 383 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 1764, + "bbox": [ + 1086, + 425, + 50, + 39 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000015_000019_gtFine_panoptic.png", + "image_id": "munster_000015_000019", + "segments_info": [ + { + "area": 664105, + "bbox": [ + 6, + 424, + 2037, + 595 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 150079, + "bbox": [ + 6, + 481, + 2037, + 316 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 606401, + "bbox": [ + 6, + 5, + 2037, + 563 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 30188, + "bbox": [ + 1264, + 5, + 651, + 704 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7541, + "bbox": [ + 1714, + 5, + 244, + 131 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 289109, + "bbox": [ + 592, + 5, + 1096, + 611 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2514, + "bbox": [ + 822, + 432, + 332, + 111 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 2662, + "bbox": [ + 734, + 5, + 202, + 47 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 57790, + "bbox": [ + 6, + 408, + 1387, + 276 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 2950, + "bbox": [ + 332, + 386, + 73, + 83 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 5503, + "bbox": [ + 716, + 389, + 74, + 156 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 169, + "bbox": [ + 1033, + 417, + 21, + 24 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 240, + "bbox": [ + 1038, + 424, + 19, + 24 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 335, + "bbox": [ + 950, + 423, + 25, + 28 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 207, + "bbox": [ + 934, + 428, + 17, + 31 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 507, + "bbox": [ + 921, + 427, + 23, + 36 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 403, + "bbox": [ + 904, + 426, + 25, + 33 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 251, + "bbox": [ + 894, + 426, + 25, + 44 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 555, + "bbox": [ + 888, + 426, + 25, + 48 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 945, + "bbox": [ + 864, + 426, + 38, + 52 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 938, + "bbox": [ + 851, + 426, + 34, + 62 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2050, + "bbox": [ + 811, + 424, + 57, + 70 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1988, + "bbox": [ + 1056, + 391, + 72, + 74 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 835, + "bbox": [ + 1061, + 417, + 41, + 62 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 119, + "bbox": [ + 1096, + 416, + 29, + 22 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 3201, + "bbox": [ + 962, + 420, + 72, + 59 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 1043, + "bbox": [ + 1072, + 424, + 28, + 59 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 1509, + "bbox": [ + 1089, + 417, + 43, + 85 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 4042, + "bbox": [ + 1103, + 413, + 77, + 104 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 28027, + "bbox": [ + 1147, + 354, + 202, + 222 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 1421, + "bbox": [ + 720, + 460, + 84, + 64 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 2518, + "bbox": [ + 782, + 419, + 46, + 89 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 17015, + "bbox": [ + 523, + 375, + 205, + 171 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 19275, + "bbox": [ + 457, + 427, + 208, + 156 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 4268, + "bbox": [ + 374, + 427, + 159, + 160 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 6361, + "bbox": [ + 1618, + 401, + 92, + 131 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 4684, + "bbox": [ + 393, + 444, + 106, + 149 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 3496, + "bbox": [ + 1469, + 405, + 65, + 96 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 2159, + "bbox": [ + 1407, + 417, + 60, + 82 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 2522, + "bbox": [ + 1371, + 408, + 62, + 91 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 5896, + "bbox": [ + 1681, + 407, + 86, + 140 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 163, + "bbox": [ + 6, + 462, + 125, + 61 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + }, + { + "area": 2228, + "bbox": [ + 717, + 445, + 72, + 118 + ], + "category_id": 33, + "id": 33009, + "iscrowd": 0 + }, + { + "area": 6971, + "bbox": [ + 290, + 451, + 177, + 157 + ], + "category_id": 33, + "id": 33010, + "iscrowd": 0 + }, + { + "area": 893, + "bbox": [ + 44, + 467, + 215, + 197 + ], + "category_id": 33, + "id": 33011, + "iscrowd": 0 + }, + { + "area": 9897, + "bbox": [ + 303, + 468, + 136, + 151 + ], + "category_id": 33, + "id": 33012, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000016_000019_gtFine_panoptic.png", + "image_id": "munster_000016_000019", + "segments_info": [ + { + "area": 544494, + "bbox": [ + 6, + 432, + 2037, + 587 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 6520, + "bbox": [ + 1187, + 446, + 557, + 164 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 516668, + "bbox": [ + 6, + 5, + 2037, + 509 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5548, + "bbox": [ + 907, + 5, + 572, + 467 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 261, + "bbox": [ + 1246, + 348, + 23, + 16 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 269905, + "bbox": [ + 6, + 5, + 1465, + 465 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 7823, + "bbox": [ + 6, + 465, + 1237, + 517 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 16100, + "bbox": [ + 987, + 5, + 169, + 271 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 425, + "bbox": [ + 1009, + 421, + 34, + 22 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 3707, + "bbox": [ + 1792, + 346, + 71, + 113 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 136, + "bbox": [ + 1050, + 424, + 15, + 11 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 863, + "bbox": [ + 977, + 409, + 23, + 52 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2166, + "bbox": [ + 917, + 400, + 63, + 66 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 75, + "bbox": [ + 1158, + 410, + 13, + 9 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 149, + "bbox": [ + 1190, + 437, + 7, + 27 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 261, + "bbox": [ + 1166, + 419, + 20, + 32 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 9104, + "bbox": [ + 1062, + 405, + 125, + 92 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 3182, + "bbox": [ + 870, + 403, + 79, + 88 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1405, + "bbox": [ + 854, + 409, + 57, + 59 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 7973, + "bbox": [ + 782, + 406, + 109, + 118 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 3299, + "bbox": [ + 1220, + 415, + 62, + 106 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 4279, + "bbox": [ + 1255, + 407, + 72, + 132 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 10185, + "bbox": [ + 1287, + 399, + 112, + 170 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 55889, + "bbox": [ + 1343, + 381, + 310, + 228 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 124785, + "bbox": [ + 1694, + 357, + 349, + 535 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 19438, + "bbox": [ + 642, + 400, + 180, + 176 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 37099, + "bbox": [ + 461, + 402, + 246, + 242 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 176094, + "bbox": [ + 6, + 378, + 537, + 419 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 814, + "bbox": [ + 888, + 461, + 27, + 41 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000017_000019_gtFine_panoptic.png", + "image_id": "munster_000017_000019", + "segments_info": [ + { + "area": 475946, + "bbox": [ + 6, + 449, + 1638, + 570 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 423054, + "bbox": [ + 6, + 5, + 2037, + 453 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 360222, + "bbox": [ + 6, + 5, + 1336, + 450 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 8951, + "bbox": [ + 528, + 447, + 631, + 178 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 9903, + "bbox": [ + 664, + 5, + 358, + 246 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3501, + "bbox": [ + 1035, + 389, + 50, + 128 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 302, + "bbox": [ + 970, + 426, + 14, + 28 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 182, + "bbox": [ + 950, + 432, + 19, + 25 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 250, + "bbox": [ + 937, + 433, + 26, + 20 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 523, + "bbox": [ + 922, + 432, + 25, + 37 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 286, + "bbox": [ + 915, + 432, + 18, + 41 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 804, + "bbox": [ + 894, + 429, + 32, + 48 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 387, + "bbox": [ + 858, + 394, + 42, + 49 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 15, + "bbox": [ + 1079, + 461, + 3, + 15 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 861, + "bbox": [ + 1080, + 411, + 19, + 76 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2399, + "bbox": [ + 1091, + 392, + 73, + 98 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 3235, + "bbox": [ + 1103, + 420, + 87, + 83 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2416, + "bbox": [ + 595, + 411, + 109, + 53 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 17238, + "bbox": [ + 501, + 426, + 179, + 161 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 45371, + "bbox": [ + 651, + 395, + 266, + 220 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 20717, + "bbox": [ + 1174, + 395, + 184, + 197 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 27006, + "bbox": [ + 1288, + 378, + 218, + 274 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 53850, + "bbox": [ + 237, + 415, + 299, + 269 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 97062, + "bbox": [ + 6, + 401, + 319, + 380 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 109147, + "bbox": [ + 1396, + 352, + 475, + 415 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 190794, + "bbox": [ + 1655, + 304, + 388, + 710 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 3345, + "bbox": [ + 1146, + 408, + 66, + 110 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 657, + "bbox": [ + 1054, + 465, + 13, + 62 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 85, + "bbox": [ + 971, + 446, + 10, + 15 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000018_000019_gtFine_panoptic.png", + "image_id": "munster_000018_000019", + "segments_info": [ + { + "area": 765502, + "bbox": [ + 6, + 484, + 2037, + 535 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 162591, + "bbox": [ + 6, + 471, + 2037, + 548 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 492164, + "bbox": [ + 6, + 5, + 1957, + 531 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 13910, + "bbox": [ + 914, + 5, + 931, + 566 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2633, + "bbox": [ + 1075, + 322, + 241, + 75 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 5250, + "bbox": [ + 1248, + 229, + 624, + 110 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 376114, + "bbox": [ + 229, + 5, + 1814, + 517 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 9108, + "bbox": [ + 375, + 500, + 314, + 53 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 30828, + "bbox": [ + 420, + 418, + 457, + 120 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1211, + "bbox": [ + 1528, + 412, + 28, + 68 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1299, + "bbox": [ + 1902, + 412, + 35, + 71 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 10687, + "bbox": [ + 956, + 314, + 110, + 222 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2708, + "bbox": [ + 422, + 417, + 75, + 60 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 267, + "bbox": [ + 1756, + 420, + 11, + 27 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 11673, + "bbox": [ + 681, + 374, + 234, + 94 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 18383, + "bbox": [ + 1089, + 400, + 179, + 131 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 13493, + "bbox": [ + 852, + 408, + 256, + 141 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1036, + "bbox": [ + 1275, + 427, + 62, + 49 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1263, + "bbox": [ + 1495, + 430, + 70, + 49 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1703, + "bbox": [ + 1875, + 435, + 85, + 48 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 12714, + "bbox": [ + 938, + 414, + 128, + 187 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000019_000019_gtFine_panoptic.png", + "image_id": "munster_000019_000019", + "segments_info": [ + { + "area": 642326, + "bbox": [ + 6, + 445, + 2037, + 574 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 63591, + "bbox": [ + 6, + 445, + 2037, + 220 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 169691, + "bbox": [ + 6, + 37, + 2037, + 461 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2574, + "bbox": [ + 877, + 179, + 1084, + 282 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 223, + "bbox": [ + 1277, + 369, + 17, + 17 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 481876, + "bbox": [ + 6, + 5, + 2037, + 501 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 3223, + "bbox": [ + 1265, + 440, + 136, + 45 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 47287, + "bbox": [ + 76, + 5, + 1967, + 285 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 348, + "bbox": [ + 1374, + 408, + 17, + 40 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 456, + "bbox": [ + 1250, + 426, + 28, + 23 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 431, + "bbox": [ + 1229, + 425, + 29, + 26 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 570, + "bbox": [ + 1210, + 427, + 32, + 25 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 204, + "bbox": [ + 1203, + 430, + 16, + 23 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 49, + "bbox": [ + 1158, + 430, + 11, + 8 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1231, + "bbox": [ + 1163, + 425, + 46, + 32 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 199, + "bbox": [ + 1113, + 429, + 16, + 30 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1245, + "bbox": [ + 1119, + 429, + 45, + 32 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 927, + "bbox": [ + 930, + 431, + 34, + 50 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1760, + "bbox": [ + 1030, + 429, + 54, + 43 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 3924, + "bbox": [ + 958, + 426, + 82, + 59 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 7799, + "bbox": [ + 737, + 394, + 94, + 116 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 12818, + "bbox": [ + 802, + 406, + 144, + 116 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 22965, + "bbox": [ + 64, + 409, + 192, + 233 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 197268, + "bbox": [ + 203, + 223, + 546, + 467 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 1429, + "bbox": [ + 1587, + 375, + 87, + 26 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 655, + "bbox": [ + 1784, + 380, + 65, + 17 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 30142, + "bbox": [ + 1805, + 267, + 238, + 221 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 58857, + "bbox": [ + 1344, + 390, + 370, + 218 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 109, + "bbox": [ + 1382, + 429, + 5, + 30 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000020_000019_gtFine_panoptic.png", + "image_id": "munster_000020_000019", + "segments_info": [ + { + "area": 781219, + "bbox": [ + 6, + 445, + 2037, + 574 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 132948, + "bbox": [ + 67, + 440, + 1976, + 475 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 273770, + "bbox": [ + 6, + 5, + 2037, + 472 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 9991, + "bbox": [ + 1679, + 432, + 364, + 42 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 8946, + "bbox": [ + 397, + 237, + 1588, + 284 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4023, + "bbox": [ + 399, + 231, + 1283, + 170 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 559458, + "bbox": [ + 152, + 5, + 1891, + 511 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 36080, + "bbox": [ + 362, + 441, + 1681, + 199 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 26957, + "bbox": [ + 945, + 5, + 332, + 210 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 27176, + "bbox": [ + 97, + 383, + 1565, + 150 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 250, + "bbox": [ + 372, + 429, + 25, + 20 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2802, + "bbox": [ + 1790, + 363, + 45, + 106 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2039, + "bbox": [ + 681, + 411, + 42, + 99 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2770, + "bbox": [ + 636, + 439, + 120, + 59 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 445, + "bbox": [ + 1405, + 423, + 25, + 22 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 524, + "bbox": [ + 1381, + 420, + 27, + 27 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 752, + "bbox": [ + 1351, + 424, + 38, + 25 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 412, + "bbox": [ + 1312, + 422, + 29, + 19 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 501, + "bbox": [ + 1294, + 425, + 29, + 28 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1601, + "bbox": [ + 1122, + 418, + 44, + 52 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1545, + "bbox": [ + 1076, + 417, + 59, + 56 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2185, + "bbox": [ + 1050, + 422, + 58, + 57 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 4481, + "bbox": [ + 977, + 424, + 90, + 64 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 3567, + "bbox": [ + 911, + 423, + 68, + 77 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 10115, + "bbox": [ + 798, + 418, + 130, + 98 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 4346, + "bbox": [ + 1219, + 415, + 90, + 60 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 17546, + "bbox": [ + 6, + 409, + 104, + 288 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 3617, + "bbox": [ + 1620, + 413, + 65, + 112 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1089, + "bbox": [ + 682, + 448, + 36, + 72 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000021_000019_gtFine_panoptic.png", + "image_id": "munster_000021_000019", + "segments_info": [ + { + "area": 719007, + "bbox": [ + 6, + 446, + 2037, + 573 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 118348, + "bbox": [ + 6, + 447, + 2037, + 457 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 169558, + "bbox": [ + 27, + 121, + 1941, + 393 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 11978, + "bbox": [ + 768, + 295, + 1248, + 350 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 941, + "bbox": [ + 1156, + 323, + 190, + 96 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 401, + "bbox": [ + 896, + 365, + 18, + 24 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 702657, + "bbox": [ + 6, + 5, + 2037, + 621 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 55057, + "bbox": [ + 600, + 456, + 1443, + 243 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 2462, + "bbox": [ + 623, + 303, + 165, + 45 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2016, + "bbox": [ + 567, + 414, + 45, + 100 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 325, + "bbox": [ + 1127, + 432, + 41, + 19 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 137, + "bbox": [ + 1345, + 434, + 11, + 15 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 184, + "bbox": [ + 1426, + 425, + 9, + 22 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 154, + "bbox": [ + 1291, + 433, + 13, + 20 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1589, + "bbox": [ + 1242, + 409, + 57, + 66 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 500, + "bbox": [ + 1153, + 436, + 33, + 27 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 345, + "bbox": [ + 1195, + 419, + 58, + 9 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 8678, + "bbox": [ + 1167, + 425, + 113, + 98 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2411, + "bbox": [ + 1637, + 421, + 103, + 62 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1409, + "bbox": [ + 939, + 440, + 42, + 57 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 3420, + "bbox": [ + 888, + 433, + 66, + 72 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 4265, + "bbox": [ + 818, + 425, + 87, + 90 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 10797, + "bbox": [ + 720, + 431, + 136, + 102 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 24666, + "bbox": [ + 379, + 428, + 223, + 171 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 75584, + "bbox": [ + 10, + 433, + 438, + 246 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 749, + "bbox": [ + 1303, + 423, + 29, + 28 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 17491, + "bbox": [ + 975, + 356, + 145, + 148 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 158, + "bbox": [ + 576, + 459, + 21, + 26 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000022_000019_gtFine_panoptic.png", + "image_id": "munster_000022_000019", + "segments_info": [ + { + "area": 806133, + "bbox": [ + 6, + 449, + 2037, + 570 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 129574, + "bbox": [ + 6, + 454, + 2037, + 236 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 207820, + "bbox": [ + 6, + 5, + 2018, + 538 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 6635, + "bbox": [ + 69, + 495, + 503, + 58 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 18172, + "bbox": [ + 214, + 438, + 443, + 79 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 4873, + "bbox": [ + 682, + 253, + 1108, + 251 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 445, + "bbox": [ + 1114, + 319, + 222, + 92 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 12068, + "bbox": [ + 1701, + 182, + 116, + 113 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 613695, + "bbox": [ + 34, + 5, + 2009, + 535 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 14375, + "bbox": [ + 270, + 459, + 1638, + 97 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 74710, + "bbox": [ + 808, + 5, + 661, + 326 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 805, + "bbox": [ + 764, + 429, + 28, + 60 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2224, + "bbox": [ + 644, + 419, + 51, + 106 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2123, + "bbox": [ + 588, + 425, + 56, + 97 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2984, + "bbox": [ + 370, + 419, + 65, + 122 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 275, + "bbox": [ + 238, + 454, + 29, + 15 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 156, + "bbox": [ + 1155, + 420, + 28, + 13 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 420, + "bbox": [ + 1288, + 402, + 36, + 21 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 274, + "bbox": [ + 1334, + 420, + 26, + 29 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 927, + "bbox": [ + 1312, + 422, + 35, + 37 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1002, + "bbox": [ + 1267, + 410, + 50, + 59 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 594, + "bbox": [ + 1272, + 414, + 34, + 69 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1192, + "bbox": [ + 1338, + 418, + 32, + 77 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 5188, + "bbox": [ + 1360, + 381, + 107, + 134 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 24565, + "bbox": [ + 1386, + 382, + 201, + 168 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2022, + "bbox": [ + 1073, + 427, + 54, + 51 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 2086, + "bbox": [ + 847, + 435, + 154, + 59 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2409, + "bbox": [ + 1114, + 426, + 61, + 54 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 6573, + "bbox": [ + 861, + 437, + 111, + 77 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 13245, + "bbox": [ + 1161, + 408, + 140, + 119 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 514, + "bbox": [ + 778, + 446, + 21, + 40 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1522, + "bbox": [ + 650, + 460, + 42, + 77 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1704, + "bbox": [ + 593, + 468, + 47, + 69 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 3812, + "bbox": [ + 375, + 467, + 65, + 106 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2072, + "bbox": [ + 1804, + 396, + 47, + 71 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000023_000019_gtFine_panoptic.png", + "image_id": "munster_000023_000019", + "segments_info": [ + { + "area": 646260, + "bbox": [ + 6, + 418, + 2037, + 601 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 302852, + "bbox": [ + 6, + 422, + 2037, + 566 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 631599, + "bbox": [ + 6, + 5, + 2037, + 564 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 22570, + "bbox": [ + 73, + 5, + 1216, + 655 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 23321, + "bbox": [ + 370, + 128, + 920, + 138 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 15380, + "bbox": [ + 198, + 358, + 593, + 288 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 116734, + "bbox": [ + 6, + 5, + 994, + 509 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 89186, + "bbox": [ + 16, + 5, + 982, + 240 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 6947, + "bbox": [ + 1209, + 367, + 64, + 223 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 6363, + "bbox": [ + 1151, + 351, + 76, + 168 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 383, + "bbox": [ + 630, + 397, + 53, + 23 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3046, + "bbox": [ + 629, + 404, + 71, + 58 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 542, + "bbox": [ + 712, + 409, + 27, + 35 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 590, + "bbox": [ + 726, + 408, + 30, + 42 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 871, + "bbox": [ + 741, + 407, + 29, + 49 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 694, + "bbox": [ + 757, + 406, + 26, + 60 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 5543, + "bbox": [ + 768, + 372, + 130, + 123 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 10856, + "bbox": [ + 785, + 403, + 129, + 107 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 715, + "bbox": [ + 361, + 415, + 21, + 47 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 918, + "bbox": [ + 988, + 405, + 26, + 44 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 2033, + "bbox": [ + 1067, + 395, + 49, + 66 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 368, + "bbox": [ + 1281, + 398, + 27, + 82 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 803, + "bbox": [ + 1030, + 400, + 28, + 53 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1350, + "bbox": [ + 1252, + 417, + 47, + 69 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 3050, + "bbox": [ + 1297, + 391, + 50, + 98 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 8962, + "bbox": [ + 1528, + 399, + 134, + 126 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 8933, + "bbox": [ + 1965, + 373, + 78, + 211 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 2479, + "bbox": [ + 1161, + 448, + 58, + 81 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000024_000019_gtFine_panoptic.png", + "image_id": "munster_000024_000019", + "segments_info": [ + { + "area": 847425, + "bbox": [ + 6, + 428, + 2037, + 591 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 128694, + "bbox": [ + 6, + 435, + 2037, + 323 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 212222, + "bbox": [ + 6, + 5, + 1982, + 471 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 8128, + "bbox": [ + 81, + 5, + 1681, + 507 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2385, + "bbox": [ + 1286, + 231, + 479, + 140 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1683, + "bbox": [ + 1292, + 272, + 492, + 69 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 535553, + "bbox": [ + 6, + 5, + 1899, + 523 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 13756, + "bbox": [ + 6, + 453, + 2037, + 89 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 13223, + "bbox": [ + 1142, + 5, + 760, + 72 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 354, + "bbox": [ + 710, + 406, + 11, + 56 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 203, + "bbox": [ + 1770, + 357, + 16, + 79 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 789, + "bbox": [ + 249, + 398, + 33, + 47 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 89, + "bbox": [ + 769, + 420, + 13, + 10 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 687, + "bbox": [ + 671, + 422, + 35, + 31 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1090, + "bbox": [ + 694, + 420, + 88, + 32 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 28683, + "bbox": [ + 382, + 413, + 257, + 149 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 8334, + "bbox": [ + 1763, + 343, + 182, + 100 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3052, + "bbox": [ + 1807, + 359, + 157, + 96 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 336, + "bbox": [ + 1442, + 391, + 55, + 16 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 3029, + "bbox": [ + 1461, + 394, + 74, + 57 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 913, + "bbox": [ + 1444, + 402, + 32, + 54 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2546, + "bbox": [ + 1388, + 391, + 68, + 73 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2871, + "bbox": [ + 1363, + 393, + 61, + 84 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1270, + "bbox": [ + 1341, + 384, + 48, + 114 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 840, + "bbox": [ + 1154, + 378, + 58, + 36 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 3656, + "bbox": [ + 1086, + 386, + 105, + 100 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 7076, + "bbox": [ + 1066, + 395, + 95, + 109 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 37988, + "bbox": [ + 840, + 352, + 246, + 188 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 29618, + "bbox": [ + 1176, + 374, + 207, + 184 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 1302, + "bbox": [ + 246, + 443, + 33, + 60 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000025_000019_gtFine_panoptic.png", + "image_id": "munster_000025_000019", + "segments_info": [ + { + "area": 885084, + "bbox": [ + 6, + 445, + 2037, + 574 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 59453, + "bbox": [ + 692, + 453, + 1351, + 224 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 314944, + "bbox": [ + 6, + 5, + 2037, + 540 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4014, + "bbox": [ + 1881, + 462, + 157, + 35 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 11053, + "bbox": [ + 522, + 72, + 1059, + 452 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2551, + "bbox": [ + 624, + 288, + 591, + 124 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 5218, + "bbox": [ + 519, + 269, + 1034, + 197 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 411779, + "bbox": [ + 48, + 5, + 1995, + 506 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 167737, + "bbox": [ + 193, + 5, + 1850, + 361 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 340, + "bbox": [ + 1430, + 418, + 23, + 26 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 326, + "bbox": [ + 1580, + 405, + 12, + 66 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 151, + "bbox": [ + 1541, + 406, + 10, + 30 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 718, + "bbox": [ + 1509, + 408, + 36, + 47 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 809, + "bbox": [ + 1539, + 404, + 31, + 62 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1685, + "bbox": [ + 1686, + 371, + 27, + 170 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 272, + "bbox": [ + 790, + 433, + 13, + 30 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 213, + "bbox": [ + 748, + 426, + 13, + 37 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1367, + "bbox": [ + 1261, + 415, + 52, + 42 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 32, + "bbox": [ + 891, + 435, + 7, + 6 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 183, + "bbox": [ + 980, + 429, + 20, + 20 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 244, + "bbox": [ + 949, + 427, + 40, + 36 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 799, + "bbox": [ + 942, + 431, + 31, + 35 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 830, + "bbox": [ + 863, + 433, + 31, + 36 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2516, + "bbox": [ + 806, + 427, + 64, + 49 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2251, + "bbox": [ + 889, + 427, + 60, + 46 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 8706, + "bbox": [ + 1009, + 417, + 117, + 95 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 3836, + "bbox": [ + 614, + 435, + 78, + 70 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 6847, + "bbox": [ + 529, + 434, + 107, + 88 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1209, + "bbox": [ + 106, + 428, + 104, + 17 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 10015, + "bbox": [ + 420, + 432, + 130, + 103 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 15922, + "bbox": [ + 271, + 434, + 169, + 118 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 20169, + "bbox": [ + 109, + 440, + 180, + 141 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 29438, + "bbox": [ + 6, + 359, + 122, + 296 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 780, + "bbox": [ + 1497, + 432, + 54, + 30 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 211, + "bbox": [ + 746, + 441, + 15, + 28 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000026_000019_gtFine_panoptic.png", + "image_id": "munster_000026_000019", + "segments_info": [ + { + "area": 588351, + "bbox": [ + 6, + 432, + 2037, + 587 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 49396, + "bbox": [ + 30, + 425, + 2013, + 365 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 249106, + "bbox": [ + 6, + 5, + 1916, + 495 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 36103, + "bbox": [ + 173, + 5, + 1708, + 772 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 22774, + "bbox": [ + 510, + 5, + 1492, + 398 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 39381, + "bbox": [ + 239, + 100, + 1757, + 422 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 475828, + "bbox": [ + 6, + 5, + 2037, + 597 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 226911, + "bbox": [ + 812, + 459, + 1231, + 560 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 83946, + "bbox": [ + 6, + 5, + 1792, + 403 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 6391, + "bbox": [ + 6, + 335, + 77, + 231 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 456, + "bbox": [ + 994, + 422, + 19, + 46 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 906, + "bbox": [ + 920, + 420, + 36, + 66 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1784, + "bbox": [ + 539, + 399, + 50, + 100 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 1172, + "bbox": [ + 852, + 412, + 35, + 84 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 1019, + "bbox": [ + 943, + 416, + 36, + 82 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 566, + "bbox": [ + 1182, + 656, + 41, + 34 + ], + "category_id": 25, + "id": 25005, + "iscrowd": 0 + }, + { + "area": 19806, + "bbox": [ + 1080, + 347, + 197, + 317 + ], + "category_id": 25, + "id": 25006, + "iscrowd": 0 + }, + { + "area": 1125, + "bbox": [ + 204, + 409, + 56, + 27 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1524, + "bbox": [ + 144, + 406, + 65, + 30 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1473, + "bbox": [ + 87, + 404, + 60, + 31 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2116, + "bbox": [ + 21, + 397, + 69, + 39 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2780, + "bbox": [ + 519, + 422, + 125, + 59 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 339, + "bbox": [ + 1615, + 458, + 14, + 27 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 862, + "bbox": [ + 1444, + 446, + 32, + 60 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1995, + "bbox": [ + 1408, + 452, + 55, + 59 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 6053, + "bbox": [ + 1307, + 449, + 106, + 69 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 13561, + "bbox": [ + 1724, + 393, + 158, + 151 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 20406, + "bbox": [ + 1151, + 343, + 188, + 169 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 1933, + "bbox": [ + 526, + 430, + 49, + 69 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1248, + "bbox": [ + 843, + 443, + 37, + 53 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 556, + "bbox": [ + 915, + 445, + 29, + 51 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 220, + "bbox": [ + 932, + 463, + 19, + 32 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 960, + "bbox": [ + 944, + 453, + 36, + 46 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 651, + "bbox": [ + 988, + 454, + 21, + 42 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 64242, + "bbox": [ + 965, + 483, + 434, + 266 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 14796, + "bbox": [ + 59, + 478, + 157, + 247 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 21748, + "bbox": [ + 6, + 563, + 131, + 201 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000027_000019_gtFine_panoptic.png", + "image_id": "munster_000027_000019", + "segments_info": [ + { + "area": 698309, + "bbox": [ + 6, + 444, + 2037, + 575 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 65415, + "bbox": [ + 6, + 446, + 1282, + 269 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 452036, + "bbox": [ + 6, + 5, + 2037, + 489 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 15781, + "bbox": [ + 6, + 443, + 596, + 132 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 11159, + "bbox": [ + 83, + 200, + 1208, + 398 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 672, + "bbox": [ + 999, + 348, + 74, + 66 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2281, + "bbox": [ + 569, + 307, + 734, + 95 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 357558, + "bbox": [ + 6, + 5, + 2037, + 562 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2486, + "bbox": [ + 777, + 452, + 427, + 44 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 12606, + "bbox": [ + 642, + 5, + 475, + 303 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1429, + "bbox": [ + 748, + 415, + 34, + 82 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 228, + "bbox": [ + 1005, + 426, + 16, + 19 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 212, + "bbox": [ + 983, + 428, + 17, + 24 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 366, + "bbox": [ + 1015, + 423, + 27, + 33 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 212, + "bbox": [ + 1153, + 422, + 20, + 23 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 894, + "bbox": [ + 1166, + 422, + 39, + 35 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 849, + "bbox": [ + 1200, + 422, + 24, + 57 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 4996, + "bbox": [ + 1214, + 395, + 97, + 91 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1788, + "bbox": [ + 1309, + 401, + 66, + 90 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 31186, + "bbox": [ + 1321, + 379, + 263, + 227 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 463, + "bbox": [ + 966, + 427, + 28, + 31 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 373, + "bbox": [ + 955, + 428, + 23, + 36 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 131, + "bbox": [ + 956, + 433, + 10, + 20 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2144, + "bbox": [ + 894, + 401, + 63, + 71 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 968, + "bbox": [ + 915, + 431, + 34, + 45 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 2087, + "bbox": [ + 878, + 432, + 49, + 51 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 2977, + "bbox": [ + 598, + 447, + 76, + 57 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 16733, + "bbox": [ + 1013, + 409, + 170, + 132 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 129215, + "bbox": [ + 1467, + 340, + 576, + 373 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 367, + "bbox": [ + 1095, + 400, + 35, + 12 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 594, + "bbox": [ + 729, + 439, + 24, + 36 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 4598, + "bbox": [ + 378, + 431, + 78, + 106 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 658, + "bbox": [ + 749, + 444, + 29, + 64 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1740, + "bbox": [ + 495, + 451, + 41, + 62 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 4377, + "bbox": [ + 191, + 449, + 100, + 106 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 5034, + "bbox": [ + 277, + 446, + 78, + 98 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1762, + "bbox": [ + 6, + 456, + 55, + 105 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 15969, + "bbox": [ + 19, + 449, + 147, + 161 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000028_000019_gtFine_panoptic.png", + "image_id": "munster_000028_000019", + "segments_info": [ + { + "area": 813562, + "bbox": [ + 6, + 472, + 2037, + 547 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 116586, + "bbox": [ + 6, + 469, + 2037, + 272 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 567944, + "bbox": [ + 6, + 5, + 2037, + 569 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2227, + "bbox": [ + 1360, + 409, + 41, + 84 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 30935, + "bbox": [ + 12, + 5, + 1605, + 638 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1165, + "bbox": [ + 779, + 320, + 291, + 119 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 6587, + "bbox": [ + 99, + 225, + 1521, + 207 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 349589, + "bbox": [ + 131, + 5, + 1234, + 519 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 554, + "bbox": [ + 1219, + 494, + 49, + 14 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 27981, + "bbox": [ + 806, + 5, + 588, + 363 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 6692, + "bbox": [ + 504, + 454, + 193, + 79 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 4530, + "bbox": [ + 366, + 406, + 67, + 153 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 356, + "bbox": [ + 836, + 456, + 31, + 28 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 158, + "bbox": [ + 837, + 463, + 14, + 37 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 467, + "bbox": [ + 825, + 445, + 20, + 55 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2196, + "bbox": [ + 973, + 451, + 59, + 48 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 312, + "bbox": [ + 1099, + 444, + 24, + 51 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 416, + "bbox": [ + 1114, + 432, + 46, + 30 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 688, + "bbox": [ + 1156, + 429, + 52, + 33 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 655, + "bbox": [ + 1222, + 436, + 19, + 59 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 7383, + "bbox": [ + 1101, + 440, + 119, + 85 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1723, + "bbox": [ + 761, + 439, + 75, + 64 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 779, + "bbox": [ + 789, + 456, + 31, + 52 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 978, + "bbox": [ + 770, + 455, + 35, + 57 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1361, + "bbox": [ + 736, + 455, + 54, + 63 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1144, + "bbox": [ + 737, + 457, + 30, + 67 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 5322, + "bbox": [ + 631, + 443, + 117, + 89 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 1632, + "bbox": [ + 265, + 453, + 92, + 67 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 2469, + "bbox": [ + 147, + 464, + 63, + 65 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 524, + "bbox": [ + 511, + 455, + 59, + 79 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1520, + "bbox": [ + 308, + 453, + 73, + 64 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 2827, + "bbox": [ + 246, + 462, + 88, + 60 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2575, + "bbox": [ + 6, + 470, + 47, + 89 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 2512, + "bbox": [ + 371, + 462, + 55, + 128 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000029_000019_gtFine_panoptic.png", + "image_id": "munster_000029_000019", + "segments_info": [ + { + "area": 624378, + "bbox": [ + 6, + 496, + 1965, + 523 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 262236, + "bbox": [ + 6, + 486, + 2037, + 533 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 476099, + "bbox": [ + 6, + 5, + 2037, + 546 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4336, + "bbox": [ + 413, + 427, + 171, + 49 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 35405, + "bbox": [ + 46, + 5, + 1938, + 859 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1233, + "bbox": [ + 1173, + 298, + 219, + 107 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 422489, + "bbox": [ + 6, + 5, + 1160, + 618 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 14127, + "bbox": [ + 31, + 479, + 1104, + 64 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 61246, + "bbox": [ + 782, + 5, + 506, + 334 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 6799, + "bbox": [ + 1611, + 353, + 80, + 189 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1476, + "bbox": [ + 865, + 450, + 50, + 53 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 61, + "bbox": [ + 996, + 467, + 14, + 29 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 421, + "bbox": [ + 1002, + 464, + 23, + 33 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1321, + "bbox": [ + 1015, + 461, + 47, + 36 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 416, + "bbox": [ + 1211, + 463, + 34, + 26 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1603, + "bbox": [ + 950, + 459, + 53, + 38 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1613, + "bbox": [ + 733, + 452, + 40, + 64 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 3799, + "bbox": [ + 652, + 440, + 91, + 87 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 8876, + "bbox": [ + 764, + 442, + 124, + 94 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 10185, + "bbox": [ + 565, + 444, + 134, + 97 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1306, + "bbox": [ + 1258, + 427, + 40, + 67 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1373, + "bbox": [ + 1396, + 432, + 51, + 75 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 2154, + "bbox": [ + 1460, + 425, + 50, + 82 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1426, + "bbox": [ + 1355, + 434, + 41, + 67 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 212, + "bbox": [ + 1287, + 440, + 29, + 52 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 692, + "bbox": [ + 1243, + 442, + 25, + 46 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 866, + "bbox": [ + 1289, + 448, + 35, + 44 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 1281, + "bbox": [ + 1314, + 441, + 35, + 55 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 2010, + "bbox": [ + 1497, + 425, + 48, + 87 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + }, + { + "area": 3597, + "bbox": [ + 1569, + 438, + 99, + 90 + ], + "category_id": 33, + "id": 33009, + "iscrowd": 0 + }, + { + "area": 1486, + "bbox": [ + 1601, + 420, + 86, + 102 + ], + "category_id": 33, + "id": 33010, + "iscrowd": 0 + }, + { + "area": 5461, + "bbox": [ + 1669, + 410, + 93, + 124 + ], + "category_id": 33, + "id": 33011, + "iscrowd": 0 + }, + { + "area": 5115, + "bbox": [ + 1715, + 410, + 102, + 131 + ], + "category_id": 33, + "id": 33012, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000030_000019_gtFine_panoptic.png", + "image_id": "munster_000030_000019", + "segments_info": [ + { + "area": 732271, + "bbox": [ + 6, + 5, + 2037, + 1014 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 236451, + "bbox": [ + 6, + 460, + 2037, + 470 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 427446, + "bbox": [ + 6, + 5, + 2037, + 585 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1402, + "bbox": [ + 438, + 434, + 61, + 35 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 17492, + "bbox": [ + 7, + 5, + 1292, + 519 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 185, + "bbox": [ + 347, + 405, + 14, + 16 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 27138, + "bbox": [ + 361, + 168, + 970, + 289 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 459182, + "bbox": [ + 6, + 5, + 2006, + 542 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 7095, + "bbox": [ + 112, + 483, + 1018, + 60 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 7191, + "bbox": [ + 1407, + 410, + 125, + 98 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 4945, + "bbox": [ + 1240, + 358, + 78, + 153 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 135, + "bbox": [ + 281, + 429, + 18, + 12 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 479, + "bbox": [ + 281, + 436, + 18, + 31 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1992, + "bbox": [ + 352, + 437, + 62, + 40 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2460, + "bbox": [ + 498, + 414, + 64, + 59 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 6260, + "bbox": [ + 539, + 401, + 109, + 72 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3675, + "bbox": [ + 305, + 409, + 111, + 47 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 1839, + "bbox": [ + 1173, + 415, + 46, + 65 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 4286, + "bbox": [ + 1231, + 420, + 83, + 142 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000031_000019_gtFine_panoptic.png", + "image_id": "munster_000031_000019", + "segments_info": [ + { + "area": 707890, + "bbox": [ + 6, + 418, + 1892, + 601 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 292360, + "bbox": [ + 6, + 416, + 2037, + 603 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 445968, + "bbox": [ + 6, + 5, + 2037, + 543 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 14978, + "bbox": [ + 130, + 5, + 1224, + 489 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8849, + "bbox": [ + 178, + 194, + 906, + 195 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 8685, + "bbox": [ + 800, + 248, + 476, + 133 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 209336, + "bbox": [ + 36, + 5, + 1378, + 480 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2043, + "bbox": [ + 74, + 428, + 1330, + 63 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 131172, + "bbox": [ + 98, + 5, + 801, + 275 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 310, + "bbox": [ + 373, + 408, + 12, + 36 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 45, + "bbox": [ + 800, + 389, + 7, + 10 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 85, + "bbox": [ + 811, + 389, + 9, + 15 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 335, + "bbox": [ + 393, + 394, + 30, + 13 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 58, + "bbox": [ + 419, + 401, + 15, + 7 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 109, + "bbox": [ + 441, + 400, + 24, + 7 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 169, + "bbox": [ + 428, + 403, + 20, + 21 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 60, + "bbox": [ + 466, + 400, + 20, + 5 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 46, + "bbox": [ + 588, + 397, + 25, + 5 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 190, + "bbox": [ + 611, + 400, + 22, + 17 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 173, + "bbox": [ + 437, + 407, + 17, + 21 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 408, + "bbox": [ + 473, + 401, + 30, + 22 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 677, + "bbox": [ + 402, + 406, + 34, + 26 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 751, + "bbox": [ + 445, + 405, + 41, + 23 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 339, + "bbox": [ + 502, + 402, + 25, + 22 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 94, + "bbox": [ + 556, + 395, + 29, + 5 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 401, + "bbox": [ + 708, + 401, + 28, + 35 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 329, + "bbox": [ + 1117, + 407, + 19, + 24 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 1789, + "bbox": [ + 1164, + 387, + 106, + 41 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 2790, + "bbox": [ + 1222, + 384, + 123, + 42 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 4580, + "bbox": [ + 727, + 395, + 129, + 46 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 5988, + "bbox": [ + 625, + 392, + 98, + 82 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 11245, + "bbox": [ + 501, + 399, + 144, + 97 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 43492, + "bbox": [ + 879, + 384, + 271, + 212 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 4017, + "bbox": [ + 1236, + 342, + 114, + 56 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 14105, + "bbox": [ + 890, + 300, + 172, + 132 + ], + "category_id": 28, + "id": 28001, + "iscrowd": 0 + }, + { + "area": 4800, + "bbox": [ + 1289, + 394, + 93, + 100 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 4981, + "bbox": [ + 1512, + 381, + 78, + 107 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 5847, + "bbox": [ + 1718, + 374, + 116, + 149 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 7134, + "bbox": [ + 1779, + 375, + 124, + 154 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 19464, + "bbox": [ + 1853, + 384, + 179, + 166 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 1385, + "bbox": [ + 2024, + 462, + 19, + 102 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000032_000019_gtFine_panoptic.png", + "image_id": "munster_000032_000019", + "segments_info": [ + { + "area": 881894, + "bbox": [ + 6, + 441, + 2037, + 578 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 53577, + "bbox": [ + 130, + 440, + 1913, + 237 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 133506, + "bbox": [ + 6, + 150, + 1454, + 361 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 15527, + "bbox": [ + 126, + 5, + 1422, + 505 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2339, + "bbox": [ + 516, + 242, + 603, + 159 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4258, + "bbox": [ + 470, + 306, + 736, + 156 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 610422, + "bbox": [ + 6, + 5, + 2037, + 527 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 84506, + "bbox": [ + 454, + 5, + 583, + 303 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 15430, + "bbox": [ + 49, + 421, + 731, + 126 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 141, + "bbox": [ + 753, + 422, + 9, + 21 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 189, + "bbox": [ + 742, + 424, + 12, + 20 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 584, + "bbox": [ + 491, + 425, + 24, + 43 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 144, + "bbox": [ + 484, + 430, + 16, + 19 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 60, + "bbox": [ + 470, + 422, + 9, + 9 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 96, + "bbox": [ + 337, + 431, + 16, + 12 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 103, + "bbox": [ + 321, + 433, + 12, + 17 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 140, + "bbox": [ + 314, + 422, + 9, + 20 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 213, + "bbox": [ + 315, + 439, + 13, + 24 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 151, + "bbox": [ + 117, + 439, + 15, + 16 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 422, + "bbox": [ + 165, + 449, + 20, + 95 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 167, + "bbox": [ + 1104, + 405, + 10, + 28 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 5152, + "bbox": [ + 1323, + 385, + 89, + 168 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 5863, + "bbox": [ + 1287, + 371, + 76, + 184 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 30089, + "bbox": [ + 272, + 427, + 252, + 161 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 10527, + "bbox": [ + 551, + 422, + 137, + 100 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 24289, + "bbox": [ + 6, + 418, + 130, + 245 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 909, + "bbox": [ + 819, + 423, + 37, + 29 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 968, + "bbox": [ + 894, + 421, + 34, + 52 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1589, + "bbox": [ + 911, + 406, + 83, + 80 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1290, + "bbox": [ + 924, + 417, + 52, + 77 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1981, + "bbox": [ + 937, + 414, + 57, + 99 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 18576, + "bbox": [ + 956, + 408, + 177, + 134 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 5304, + "bbox": [ + 632, + 389, + 104, + 78 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 42118, + "bbox": [ + 1110, + 308, + 292, + 209 + ], + "category_id": 28, + "id": 28001, + "iscrowd": 0 + }, + { + "area": 1128, + "bbox": [ + 1427, + 413, + 32, + 64 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1482, + "bbox": [ + 1397, + 415, + 36, + 63 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 3827, + "bbox": [ + 1706, + 401, + 71, + 104 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 5748, + "bbox": [ + 1758, + 407, + 89, + 103 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000033_000019_gtFine_panoptic.png", + "image_id": "munster_000033_000019", + "segments_info": [ + { + "area": 785381, + "bbox": [ + 6, + 480, + 2037, + 539 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 65513, + "bbox": [ + 6, + 460, + 2037, + 228 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 618822, + "bbox": [ + 6, + 5, + 2037, + 567 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 12471, + "bbox": [ + 100, + 5, + 1355, + 579 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 5002, + "bbox": [ + 1025, + 291, + 435, + 145 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 133486, + "bbox": [ + 731, + 52, + 664, + 403 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 106029, + "bbox": [ + 712, + 5, + 670, + 317 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 183, + "bbox": [ + 1384, + 426, + 9, + 29 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 4879, + "bbox": [ + 1539, + 403, + 69, + 138 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 4937, + "bbox": [ + 1606, + 390, + 49, + 151 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 3299, + "bbox": [ + 92, + 423, + 50, + 124 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 3450, + "bbox": [ + 1392, + 401, + 51, + 138 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 831, + "bbox": [ + 873, + 453, + 29, + 35 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 515, + "bbox": [ + 970, + 452, + 24, + 33 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 47, + "bbox": [ + 992, + 446, + 9, + 12 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 98, + "bbox": [ + 1046, + 450, + 11, + 15 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1841, + "bbox": [ + 990, + 442, + 61, + 51 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 4729, + "bbox": [ + 894, + 433, + 85, + 73 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 86080, + "bbox": [ + 1007, + 405, + 373, + 294 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 9630, + "bbox": [ + 1162, + 364, + 198, + 136 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 104022, + "bbox": [ + 437, + 285, + 437, + 299 + ], + "category_id": 28, + "id": 28001, + "iscrowd": 0 + }, + { + "area": 1223, + "bbox": [ + 1407, + 473, + 24, + 75 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3520, + "bbox": [ + 1701, + 440, + 74, + 101 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 4220, + "bbox": [ + 1668, + 434, + 71, + 110 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000034_000019_gtFine_panoptic.png", + "image_id": "munster_000034_000019", + "segments_info": [ + { + "area": 565299, + "bbox": [ + 6, + 478, + 2037, + 541 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 151328, + "bbox": [ + 33, + 477, + 2010, + 477 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 411977, + "bbox": [ + 6, + 5, + 2037, + 658 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 59167, + "bbox": [ + 1457, + 340, + 586, + 233 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 2599, + "bbox": [ + 1038, + 150, + 1005, + 330 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4905, + "bbox": [ + 1356, + 40, + 687, + 373 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 307830, + "bbox": [ + 1020, + 5, + 1023, + 479 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 219, + "bbox": [ + 1441, + 478, + 19, + 15 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 29389, + "bbox": [ + 993, + 5, + 413, + 249 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 557, + "bbox": [ + 1404, + 438, + 54, + 32 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 56, + "bbox": [ + 1383, + 436, + 23, + 5 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 381, + "bbox": [ + 1285, + 436, + 34, + 21 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 741, + "bbox": [ + 1267, + 447, + 37, + 32 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 877, + "bbox": [ + 1246, + 448, + 36, + 32 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1819, + "bbox": [ + 1193, + 445, + 58, + 38 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1151, + "bbox": [ + 1302, + 435, + 65, + 71 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1037, + "bbox": [ + 1310, + 437, + 87, + 89 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 9488, + "bbox": [ + 1319, + 441, + 127, + 95 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 4596, + "bbox": [ + 1033, + 426, + 65, + 105 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1662, + "bbox": [ + 1034, + 451, + 26, + 93 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 21122, + "bbox": [ + 869, + 329, + 167, + 235 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 4238, + "bbox": [ + 809, + 396, + 173, + 105 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 24624, + "bbox": [ + 811, + 417, + 151, + 214 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 170544, + "bbox": [ + 304, + 340, + 531, + 412 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 153478, + "bbox": [ + 6, + 41, + 201, + 971 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 53452, + "bbox": [ + 1516, + 412, + 342, + 213 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000035_000019_gtFine_panoptic.png", + "image_id": "munster_000035_000019", + "segments_info": [ + { + "area": 565145, + "bbox": [ + 67, + 478, + 1976, + 541 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 241740, + "bbox": [ + 6, + 472, + 1659, + 547 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 414933, + "bbox": [ + 6, + 5, + 2037, + 641 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1108, + "bbox": [ + 1688, + 441, + 39, + 60 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 7397, + "bbox": [ + 692, + 28, + 732, + 467 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 450277, + "bbox": [ + 327, + 5, + 1392, + 530 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2010, + "bbox": [ + 463, + 488, + 103, + 64 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 53038, + "bbox": [ + 973, + 5, + 589, + 246 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 12367, + "bbox": [ + 457, + 334, + 86, + 247 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 9827, + "bbox": [ + 568, + 384, + 78, + 195 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 49, + "bbox": [ + 1552, + 428, + 19, + 9 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 19110, + "bbox": [ + 1540, + 404, + 218, + 142 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 484, + "bbox": [ + 1315, + 430, + 34, + 48 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1437, + "bbox": [ + 1292, + 433, + 40, + 46 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 3897, + "bbox": [ + 1209, + 410, + 85, + 74 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2131, + "bbox": [ + 1182, + 427, + 67, + 60 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2748, + "bbox": [ + 1149, + 429, + 62, + 62 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 7152, + "bbox": [ + 1046, + 422, + 116, + 77 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 13141, + "bbox": [ + 1323, + 419, + 144, + 119 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 146527, + "bbox": [ + 1650, + 344, + 393, + 505 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000036_000019_gtFine_panoptic.png", + "image_id": "munster_000036_000019", + "segments_info": [ + { + "area": 557126, + "bbox": [ + 119, + 443, + 1924, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 217092, + "bbox": [ + 6, + 509, + 2037, + 510 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 205068, + "bbox": [ + 6, + 5, + 2037, + 525 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 7051, + "bbox": [ + 720, + 394, + 1323, + 186 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 9264, + "bbox": [ + 551, + 5, + 838, + 563 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 956, + "bbox": [ + 1293, + 357, + 93, + 50 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 556493, + "bbox": [ + 6, + 5, + 2037, + 572 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 97752, + "bbox": [ + 987, + 5, + 666, + 311 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 5726, + "bbox": [ + 1144, + 385, + 75, + 157 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1121, + "bbox": [ + 1122, + 417, + 41, + 38 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 494, + "bbox": [ + 1103, + 419, + 26, + 50 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 304, + "bbox": [ + 1105, + 424, + 18, + 53 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1034, + "bbox": [ + 1241, + 419, + 36, + 54 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1695, + "bbox": [ + 1064, + 409, + 50, + 85 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 147, + "bbox": [ + 1069, + 416, + 33, + 33 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 4730, + "bbox": [ + 1018, + 402, + 79, + 151 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2482, + "bbox": [ + 1259, + 415, + 79, + 74 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2301, + "bbox": [ + 1289, + 423, + 54, + 75 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1865, + "bbox": [ + 1319, + 420, + 50, + 100 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 8657, + "bbox": [ + 1336, + 417, + 105, + 120 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 37905, + "bbox": [ + 811, + 394, + 254, + 191 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 29367, + "bbox": [ + 1409, + 392, + 206, + 217 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 126089, + "bbox": [ + 1554, + 376, + 482, + 358 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 60535, + "bbox": [ + 6, + 327, + 291, + 256 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000037_000019_gtFine_panoptic.png", + "image_id": "munster_000037_000019", + "segments_info": [ + { + "area": 899483, + "bbox": [ + 6, + 445, + 2037, + 574 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 57935, + "bbox": [ + 63, + 436, + 1980, + 212 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 677841, + "bbox": [ + 6, + 5, + 2037, + 552 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 31528, + "bbox": [ + 77, + 5, + 1675, + 553 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8637, + "bbox": [ + 19, + 180, + 1442, + 231 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 112967, + "bbox": [ + 6, + 5, + 1454, + 452 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 99754, + "bbox": [ + 692, + 5, + 803, + 296 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 603, + "bbox": [ + 1102, + 414, + 42, + 38 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 790, + "bbox": [ + 1110, + 422, + 34, + 31 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3211, + "bbox": [ + 1035, + 416, + 70, + 58 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 729, + "bbox": [ + 1153, + 419, + 37, + 48 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2410, + "bbox": [ + 1212, + 377, + 85, + 32 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1720, + "bbox": [ + 1253, + 407, + 68, + 90 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 12450, + "bbox": [ + 1162, + 408, + 145, + 113 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 11980, + "bbox": [ + 6, + 494, + 72, + 243 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 3067, + "bbox": [ + 1015, + 388, + 78, + 73 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 1212, + "bbox": [ + 1574, + 421, + 38, + 58 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1289, + "bbox": [ + 1553, + 419, + 33, + 61 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 764, + "bbox": [ + 1421, + 425, + 24, + 41 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000038_000019_gtFine_panoptic.png", + "image_id": "munster_000038_000019", + "segments_info": [ + { + "area": 739979, + "bbox": [ + 6, + 476, + 2037, + 543 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 89866, + "bbox": [ + 6, + 476, + 2037, + 185 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 383046, + "bbox": [ + 6, + 5, + 2037, + 480 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3072, + "bbox": [ + 1808, + 487, + 224, + 27 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 14816, + "bbox": [ + 163, + 24, + 1735, + 602 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 25283, + "bbox": [ + 78, + 184, + 1821, + 235 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 246496, + "bbox": [ + 6, + 5, + 2037, + 484 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 55425, + "bbox": [ + 6, + 602, + 176, + 417 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 126557, + "bbox": [ + 1088, + 5, + 955, + 316 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 82, + "bbox": [ + 424, + 418, + 11, + 10 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 608, + "bbox": [ + 187, + 412, + 29, + 40 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1584, + "bbox": [ + 47, + 415, + 39, + 83 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 104, + "bbox": [ + 997, + 428, + 14, + 15 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 510, + "bbox": [ + 1554, + 447, + 32, + 52 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3087, + "bbox": [ + 1499, + 412, + 42, + 119 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1321, + "bbox": [ + 1463, + 415, + 27, + 124 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 5242, + "bbox": [ + 1416, + 423, + 65, + 142 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 13745, + "bbox": [ + 1536, + 336, + 138, + 266 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 10100, + "bbox": [ + 1247, + 363, + 108, + 208 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 412, + "bbox": [ + 359, + 430, + 36, + 22 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 347, + "bbox": [ + 6, + 427, + 14, + 61 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4380, + "bbox": [ + 8, + 421, + 120, + 66 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3541, + "bbox": [ + 103, + 413, + 120, + 74 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 15581, + "bbox": [ + 126, + 424, + 258, + 80 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 10853, + "bbox": [ + 370, + 427, + 131, + 105 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 713, + "bbox": [ + 1079, + 433, + 80, + 22 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1396, + "bbox": [ + 977, + 442, + 59, + 49 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 194, + "bbox": [ + 1243, + 445, + 41, + 8 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 390, + "bbox": [ + 1266, + 448, + 35, + 37 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2836, + "bbox": [ + 1177, + 446, + 81, + 43 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 5764, + "bbox": [ + 1049, + 441, + 130, + 59 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 38, + "bbox": [ + 1428, + 458, + 9, + 9 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 358, + "bbox": [ + 1411, + 457, + 22, + 22 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 411, + "bbox": [ + 1390, + 457, + 27, + 23 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 161, + "bbox": [ + 1383, + 457, + 15, + 25 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 961, + "bbox": [ + 1354, + 454, + 37, + 31 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 349, + "bbox": [ + 1485, + 453, + 17, + 26 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 138, + "bbox": [ + 1580, + 464, + 21, + 12 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 2144, + "bbox": [ + 958, + 438, + 48, + 56 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 140731, + "bbox": [ + 487, + 242, + 491, + 370 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 1472, + "bbox": [ + 1772, + 457, + 44, + 46 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1164, + "bbox": [ + 1847, + 457, + 35, + 50 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1176, + "bbox": [ + 1813, + 458, + 38, + 47 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1538, + "bbox": [ + 2009, + 451, + 34, + 67 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 29267, + "bbox": [ + 1470, + 443, + 262, + 221 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2826, + "bbox": [ + 1282, + 485, + 112, + 95 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 15664, + "bbox": [ + 1197, + 453, + 183, + 180 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000039_000019_gtFine_panoptic.png", + "image_id": "munster_000039_000019", + "segments_info": [ + { + "area": 786341, + "bbox": [ + 6, + 506, + 2037, + 513 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 62652, + "bbox": [ + 43, + 482, + 2000, + 118 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 55764, + "bbox": [ + 6, + 203, + 1337, + 291 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5638, + "bbox": [ + 1049, + 472, + 945, + 69 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 6561, + "bbox": [ + 1237, + 177, + 741, + 400 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2845, + "bbox": [ + 1966, + 176, + 23, + 165 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 824615, + "bbox": [ + 6, + 5, + 2037, + 495 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 71774, + "bbox": [ + 6, + 460, + 2037, + 483 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 10297, + "bbox": [ + 1210, + 5, + 163, + 209 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 263, + "bbox": [ + 6, + 401, + 21, + 33 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1587, + "bbox": [ + 84, + 413, + 48, + 71 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1920, + "bbox": [ + 53, + 403, + 34, + 87 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2544, + "bbox": [ + 152, + 388, + 42, + 107 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1686, + "bbox": [ + 743, + 416, + 66, + 76 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3444, + "bbox": [ + 876, + 395, + 48, + 123 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 3564, + "bbox": [ + 936, + 386, + 51, + 128 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 2835, + "bbox": [ + 1342, + 385, + 46, + 94 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 2824, + "bbox": [ + 1295, + 392, + 50, + 136 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1697, + "bbox": [ + 1236, + 381, + 29, + 123 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 648, + "bbox": [ + 1535, + 409, + 38, + 40 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 10125, + "bbox": [ + 1149, + 352, + 111, + 254 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2395, + "bbox": [ + 1820, + 392, + 44, + 103 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 3579, + "bbox": [ + 6, + 416, + 39, + 125 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 71206, + "bbox": [ + 158, + 398, + 392, + 237 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 994, + "bbox": [ + 1540, + 441, + 34, + 54 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2145, + "bbox": [ + 1817, + 445, + 60, + 66 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 11291, + "bbox": [ + 1973, + 565, + 70, + 207 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 7508, + "bbox": [ + 1261, + 428, + 131, + 103 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 12802, + "bbox": [ + 1140, + 460, + 144, + 163 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000040_000019_gtFine_panoptic.png", + "image_id": "munster_000040_000019", + "segments_info": [ + { + "area": 621205, + "bbox": [ + 6, + 433, + 2026, + 586 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 231551, + "bbox": [ + 113, + 463, + 1930, + 556 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 524969, + "bbox": [ + 6, + 5, + 2037, + 562 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 21030, + "bbox": [ + 429, + 5, + 1173, + 572 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 46491, + "bbox": [ + 360, + 5, + 1402, + 520 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 167636, + "bbox": [ + 880, + 5, + 557, + 401 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 25988, + "bbox": [ + 726, + 5, + 278, + 211 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 818, + "bbox": [ + 638, + 406, + 32, + 93 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 3274, + "bbox": [ + 599, + 390, + 41, + 118 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 14565, + "bbox": [ + 646, + 337, + 83, + 288 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 746, + "bbox": [ + 1497, + 403, + 30, + 65 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 434, + "bbox": [ + 1469, + 373, + 35, + 106 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1382, + "bbox": [ + 1431, + 369, + 40, + 79 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1523, + "bbox": [ + 1534, + 375, + 40, + 77 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1931, + "bbox": [ + 1669, + 418, + 66, + 71 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 5284, + "bbox": [ + 1806, + 312, + 71, + 121 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 24322, + "bbox": [ + 6, + 286, + 84, + 446 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 33945, + "bbox": [ + 1653, + 249, + 178, + 440 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2530, + "bbox": [ + 861, + 392, + 51, + 102 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 6021, + "bbox": [ + 1127, + 406, + 104, + 75 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2888, + "bbox": [ + 1244, + 379, + 98, + 97 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1648, + "bbox": [ + 1259, + 403, + 50, + 79 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1753, + "bbox": [ + 1278, + 397, + 58, + 104 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 16815, + "bbox": [ + 1296, + 391, + 173, + 130 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 18229, + "bbox": [ + 717, + 374, + 177, + 132 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 2685, + "bbox": [ + 1225, + 368, + 95, + 79 + ], + "category_id": 27, + "id": 27001, + "iscrowd": 0 + }, + { + "area": 31579, + "bbox": [ + 884, + 321, + 220, + 180 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 28093, + "bbox": [ + 6, + 425, + 182, + 359 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 5999, + "bbox": [ + 166, + 439, + 105, + 120 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2170, + "bbox": [ + 507, + 423, + 49, + 89 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 3997, + "bbox": [ + 1518, + 409, + 58, + 116 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 29957, + "bbox": [ + 1506, + 423, + 279, + 270 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 20928, + "bbox": [ + 1809, + 410, + 114, + 267 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000041_000019_gtFine_panoptic.png", + "image_id": "munster_000041_000019", + "segments_info": [ + { + "area": 893129, + "bbox": [ + 6, + 475, + 2037, + 544 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 235597, + "bbox": [ + 6, + 5, + 1982, + 464 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2050, + "bbox": [ + 426, + 233, + 1427, + 212 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4795, + "bbox": [ + 843, + 242, + 1026, + 162 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 448811, + "bbox": [ + 495, + 5, + 1548, + 439 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 30207, + "bbox": [ + 406, + 5, + 159, + 310 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 98087, + "bbox": [ + 785, + 400, + 1251, + 125 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 441, + "bbox": [ + 18, + 393, + 34, + 16 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 121, + "bbox": [ + 1153, + 403, + 14, + 12 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 129, + "bbox": [ + 1140, + 403, + 15, + 12 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1066, + "bbox": [ + 1322, + 406, + 30, + 71 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1003, + "bbox": [ + 1360, + 411, + 27, + 82 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1845, + "bbox": [ + 1801, + 369, + 65, + 64 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 8405, + "bbox": [ + 892, + 365, + 103, + 194 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1405, + "bbox": [ + 889, + 406, + 29, + 74 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2210, + "bbox": [ + 2013, + 351, + 30, + 151 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1433, + "bbox": [ + 632, + 416, + 35, + 74 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 3890, + "bbox": [ + 535, + 397, + 58, + 130 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 3969, + "bbox": [ + 344, + 371, + 74, + 155 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 9861, + "bbox": [ + 370, + 368, + 119, + 226 + ], + "category_id": 25, + "id": 25005, + "iscrowd": 0 + }, + { + "area": 493, + "bbox": [ + 750, + 432, + 35, + 47 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1530, + "bbox": [ + 760, + 433, + 74, + 47 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 713, + "bbox": [ + 582, + 445, + 21, + 60 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 5060, + "bbox": [ + 467, + 401, + 94, + 111 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 3952, + "bbox": [ + 358, + 430, + 161, + 108 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 22024, + "bbox": [ + 174, + 422, + 198, + 163 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 39646, + "bbox": [ + 6, + 409, + 220, + 220 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 16486, + "bbox": [ + 585, + 369, + 177, + 121 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 313, + "bbox": [ + 888, + 442, + 25, + 55 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3267, + "bbox": [ + 1984, + 413, + 59, + 108 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 332, + "bbox": [ + 631, + 447, + 36, + 51 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1232, + "bbox": [ + 549, + 445, + 43, + 93 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1206, + "bbox": [ + 355, + 466, + 49, + 92 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 6704, + "bbox": [ + 379, + 456, + 94, + 164 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000042_000019_gtFine_panoptic.png", + "image_id": "munster_000042_000019", + "segments_info": [ + { + "area": 689487, + "bbox": [ + 6, + 458, + 2037, + 561 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 191704, + "bbox": [ + 1372, + 440, + 671, + 515 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 461049, + "bbox": [ + 10, + 5, + 2033, + 563 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 607, + "bbox": [ + 1093, + 409, + 58, + 26 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 7683, + "bbox": [ + 800, + 122, + 681, + 434 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3672, + "bbox": [ + 933, + 245, + 544, + 140 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 374923, + "bbox": [ + 6, + 5, + 1159, + 460 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 5996, + "bbox": [ + 1289, + 5, + 300, + 65 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 86287, + "bbox": [ + 6, + 416, + 1253, + 221 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 720, + "bbox": [ + 1577, + 418, + 28, + 51 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2943, + "bbox": [ + 1587, + 362, + 49, + 117 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2742, + "bbox": [ + 1527, + 364, + 41, + 108 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 8526, + "bbox": [ + 1672, + 358, + 75, + 182 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 3423, + "bbox": [ + 1448, + 372, + 57, + 143 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 177, + "bbox": [ + 379, + 429, + 20, + 16 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 63, + "bbox": [ + 424, + 426, + 10, + 11 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 255, + "bbox": [ + 406, + 421, + 20, + 27 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 143, + "bbox": [ + 528, + 415, + 12, + 19 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 495, + "bbox": [ + 583, + 406, + 30, + 29 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 525, + "bbox": [ + 637, + 402, + 38, + 41 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 431, + "bbox": [ + 851, + 403, + 27, + 31 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 786, + "bbox": [ + 875, + 403, + 34, + 42 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 284, + "bbox": [ + 76, + 388, + 35, + 54 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 3278, + "bbox": [ + 80, + 361, + 72, + 82 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 5446, + "bbox": [ + 6, + 333, + 58, + 134 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 2910, + "bbox": [ + 1150, + 370, + 41, + 115 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2043, + "bbox": [ + 1189, + 386, + 44, + 89 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 331, + "bbox": [ + 1565, + 387, + 30, + 13 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 666, + "bbox": [ + 1562, + 400, + 20, + 47 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 439, + "bbox": [ + 1503, + 401, + 27, + 49 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 829, + "bbox": [ + 1499, + 405, + 29, + 46 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 383, + "bbox": [ + 1430, + 404, + 27, + 51 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1239, + "bbox": [ + 1406, + 404, + 41, + 55 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1076, + "bbox": [ + 1361, + 398, + 61, + 65 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 8898, + "bbox": [ + 1289, + 401, + 123, + 90 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 7059, + "bbox": [ + 481, + 430, + 157, + 128 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 4462, + "bbox": [ + 452, + 453, + 105, + 118 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 5487, + "bbox": [ + 186, + 474, + 130, + 133 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 14420, + "bbox": [ + 112, + 461, + 163, + 168 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 10568, + "bbox": [ + 18, + 465, + 111, + 196 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 2339, + "bbox": [ + 73, + 507, + 57, + 82 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 2874, + "bbox": [ + 6, + 551, + 33, + 116 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 592, + "bbox": [ + 1165, + 434, + 11, + 66 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 622, + "bbox": [ + 1205, + 433, + 17, + 57 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000043_000019_gtFine_panoptic.png", + "image_id": "munster_000043_000019", + "segments_info": [ + { + "area": 515791, + "bbox": [ + 12, + 508, + 2031, + 511 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 224017, + "bbox": [ + 6, + 492, + 1610, + 527 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 865890, + "bbox": [ + 6, + 5, + 2037, + 626 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 13784, + "bbox": [ + 556, + 5, + 1257, + 632 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7308, + "bbox": [ + 548, + 56, + 1279, + 367 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 1688, + "bbox": [ + 1840, + 181, + 58, + 93 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 47134, + "bbox": [ + 1438, + 5, + 474, + 245 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 891, + "bbox": [ + 1442, + 446, + 21, + 62 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 504, + "bbox": [ + 1468, + 440, + 23, + 54 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 6296, + "bbox": [ + 887, + 364, + 70, + 187 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 17621, + "bbox": [ + 608, + 299, + 103, + 308 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2853, + "bbox": [ + 1548, + 418, + 42, + 111 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 10458, + "bbox": [ + 998, + 352, + 107, + 233 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 36192, + "bbox": [ + 1124, + 376, + 257, + 192 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 12529, + "bbox": [ + 1614, + 337, + 205, + 215 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 955, + "bbox": [ + 1616, + 433, + 95, + 64 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 7382, + "bbox": [ + 1604, + 437, + 104, + 200 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 39111, + "bbox": [ + 1639, + 396, + 295, + 322 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 108655, + "bbox": [ + 1741, + 400, + 302, + 503 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 896, + "bbox": [ + 1387, + 454, + 37, + 70 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 525, + "bbox": [ + 1560, + 481, + 12, + 63 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 11968, + "bbox": [ + 980, + 453, + 126, + 191 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 21349, + "bbox": [ + 659, + 412, + 156, + 238 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000044_000019_gtFine_panoptic.png", + "image_id": "munster_000044_000019", + "segments_info": [ + { + "area": 771028, + "bbox": [ + 6, + 488, + 2037, + 531 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 58308, + "bbox": [ + 6, + 487, + 2032, + 384 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 598910, + "bbox": [ + 6, + 5, + 2037, + 574 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 9210, + "bbox": [ + 765, + 50, + 895, + 522 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 17057, + "bbox": [ + 785, + 172, + 887, + 254 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 245477, + "bbox": [ + 1229, + 5, + 668, + 487 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 9389, + "bbox": [ + 1534, + 5, + 154, + 118 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 57, + "bbox": [ + 1401, + 435, + 11, + 6 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1313, + "bbox": [ + 1228, + 424, + 38, + 93 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 60, + "bbox": [ + 1205, + 394, + 6, + 17 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 662, + "bbox": [ + 1207, + 396, + 32, + 112 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1424, + "bbox": [ + 1168, + 404, + 26, + 102 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 7993, + "bbox": [ + 6, + 308, + 62, + 351 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 37315, + "bbox": [ + 6, + 282, + 147, + 406 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 9771, + "bbox": [ + 1221, + 361, + 114, + 225 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 4121, + "bbox": [ + 1599, + 406, + 53, + 141 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 10340, + "bbox": [ + 1749, + 395, + 111, + 198 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 1475, + "bbox": [ + 1460, + 444, + 47, + 63 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1658, + "bbox": [ + 1434, + 443, + 50, + 76 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 966, + "bbox": [ + 1430, + 442, + 35, + 87 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1578, + "bbox": [ + 1402, + 441, + 48, + 96 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 9898, + "bbox": [ + 1320, + 435, + 119, + 130 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 11177, + "bbox": [ + 127, + 375, + 132, + 153 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 46035, + "bbox": [ + 211, + 405, + 446, + 151 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1779, + "bbox": [ + 1650, + 443, + 56, + 70 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 4461, + "bbox": [ + 1679, + 417, + 128, + 123 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 5827, + "bbox": [ + 1698, + 438, + 114, + 146 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 16533, + "bbox": [ + 1760, + 444, + 208, + 183 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 17870, + "bbox": [ + 1970, + 519, + 73, + 348 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 8882, + "bbox": [ + 661, + 422, + 165, + 112 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1495, + "bbox": [ + 1142, + 449, + 39, + 67 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1267, + "bbox": [ + 1102, + 433, + 46, + 98 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 2790, + "bbox": [ + 1080, + 445, + 51, + 91 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2649, + "bbox": [ + 1044, + 437, + 54, + 104 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 19655, + "bbox": [ + 1131, + 441, + 242, + 174 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 842, + "bbox": [ + 1614, + 479, + 18, + 76 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 24917, + "bbox": [ + 1644, + 469, + 282, + 207 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + }, + { + "area": 8057, + "bbox": [ + 822, + 423, + 145, + 120 + ], + "category_id": 33, + "id": 33009, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000045_000019_gtFine_panoptic.png", + "image_id": "munster_000045_000019", + "segments_info": [ + { + "area": 713000, + "bbox": [ + 6, + 428, + 2037, + 591 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 114663, + "bbox": [ + 302, + 425, + 1741, + 432 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 690782, + "bbox": [ + 6, + 5, + 2037, + 640 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 6215, + "bbox": [ + 489, + 142, + 983, + 367 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7738, + "bbox": [ + 430, + 259, + 1019, + 128 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 213872, + "bbox": [ + 358, + 5, + 942, + 460 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 385, + "bbox": [ + 862, + 460, + 41, + 13 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 8594, + "bbox": [ + 1032, + 171, + 186, + 158 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3253, + "bbox": [ + 919, + 409, + 179, + 52 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 576, + "bbox": [ + 844, + 408, + 31, + 61 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 572, + "bbox": [ + 845, + 411, + 17, + 58 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 389, + "bbox": [ + 829, + 414, + 18, + 38 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 188, + "bbox": [ + 747, + 416, + 16, + 22 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 346, + "bbox": [ + 963, + 404, + 20, + 44 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 674, + "bbox": [ + 1009, + 404, + 29, + 58 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 420, + "bbox": [ + 980, + 400, + 29, + 62 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 483, + "bbox": [ + 1229, + 389, + 25, + 52 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 675, + "bbox": [ + 987, + 410, + 29, + 56 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 3499, + "bbox": [ + 1299, + 364, + 50, + 184 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 7618, + "bbox": [ + 1244, + 377, + 79, + 209 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 506, + "bbox": [ + 1136, + 401, + 49, + 49 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2293, + "bbox": [ + 1116, + 407, + 64, + 46 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 9421, + "bbox": [ + 712, + 422, + 103, + 139 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 90024, + "bbox": [ + 367, + 302, + 357, + 324 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 83459, + "bbox": [ + 6, + 426, + 309, + 411 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 923, + "bbox": [ + 1194, + 418, + 44, + 46 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1289, + "bbox": [ + 1223, + 419, + 43, + 56 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 808, + "bbox": [ + 820, + 438, + 27, + 43 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1409, + "bbox": [ + 964, + 435, + 67, + 38 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1691, + "bbox": [ + 1302, + 467, + 34, + 97 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 3367, + "bbox": [ + 1262, + 494, + 47, + 117 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000046_000019_gtFine_panoptic.png", + "image_id": "munster_000046_000019", + "segments_info": [ + { + "area": 637606, + "bbox": [ + 6, + 462, + 2037, + 557 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 119078, + "bbox": [ + 6, + 456, + 2037, + 474 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 687342, + "bbox": [ + 6, + 5, + 2037, + 558 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3494, + "bbox": [ + 1908, + 633, + 135, + 126 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 13628, + "bbox": [ + 224, + 5, + 1730, + 533 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 15289, + "bbox": [ + 247, + 159, + 1796, + 232 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 66489, + "bbox": [ + 239, + 5, + 859, + 389 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 3908, + "bbox": [ + 396, + 550, + 140, + 38 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 82394, + "bbox": [ + 920, + 5, + 399, + 336 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 7137, + "bbox": [ + 854, + 427, + 196, + 57 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 72, + "bbox": [ + 1243, + 397, + 14, + 13 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 19, + "bbox": [ + 1176, + 402, + 8, + 4 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 237, + "bbox": [ + 835, + 421, + 23, + 33 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 6631, + "bbox": [ + 482, + 384, + 62, + 188 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 6050, + "bbox": [ + 1785, + 360, + 70, + 176 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1888, + "bbox": [ + 1755, + 359, + 34, + 119 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 4337, + "bbox": [ + 1991, + 353, + 52, + 137 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 4917, + "bbox": [ + 1929, + 360, + 76, + 175 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 75516, + "bbox": [ + 70, + 297, + 261, + 629 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 72873, + "bbox": [ + 601, + 306, + 320, + 553 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 474, + "bbox": [ + 1047, + 417, + 20, + 43 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 6198, + "bbox": [ + 1065, + 373, + 81, + 180 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 7465, + "bbox": [ + 1107, + 398, + 88, + 204 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 178, + "bbox": [ + 1675, + 529, + 31, + 14 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 6655, + "bbox": [ + 1687, + 343, + 78, + 171 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 805, + "bbox": [ + 1178, + 403, + 87, + 21 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 8751, + "bbox": [ + 1177, + 411, + 114, + 120 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 15901, + "bbox": [ + 1844, + 420, + 199, + 145 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 394, + "bbox": [ + 687, + 437, + 45, + 36 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1585, + "bbox": [ + 645, + 437, + 68, + 81 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 214, + "bbox": [ + 1051, + 443, + 10, + 26 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 5008, + "bbox": [ + 1062, + 459, + 75, + 136 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 3344, + "bbox": [ + 1142, + 498, + 44, + 120 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 16849, + "bbox": [ + 1584, + 422, + 230, + 139 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000047_000019_gtFine_panoptic.png", + "image_id": "munster_000047_000019", + "segments_info": [ + { + "area": 619031, + "bbox": [ + 6, + 475, + 1975, + 544 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 106266, + "bbox": [ + 6, + 473, + 2037, + 546 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 48595, + "bbox": [ + 859, + 119, + 403, + 339 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 977, + "bbox": [ + 57, + 396, + 121, + 133 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 2744, + "bbox": [ + 6, + 398, + 1678, + 105 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 17359, + "bbox": [ + 113, + 83, + 1064, + 544 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 587, + "bbox": [ + 713, + 349, + 293, + 94 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 9825, + "bbox": [ + 564, + 239, + 634, + 194 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 958857, + "bbox": [ + 6, + 5, + 2037, + 937 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1937, + "bbox": [ + 887, + 461, + 877, + 35 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 43225, + "bbox": [ + 871, + 5, + 342, + 156 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 745, + "bbox": [ + 744, + 444, + 42, + 47 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 473, + "bbox": [ + 784, + 444, + 21, + 44 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 653, + "bbox": [ + 725, + 435, + 14, + 56 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 599, + "bbox": [ + 714, + 438, + 14, + 54 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 661, + "bbox": [ + 658, + 436, + 20, + 56 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1381, + "bbox": [ + 672, + 416, + 29, + 77 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1395, + "bbox": [ + 633, + 416, + 26, + 82 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 79, + "bbox": [ + 511, + 427, + 10, + 13 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1495, + "bbox": [ + 516, + 422, + 27, + 79 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1871, + "bbox": [ + 487, + 419, + 34, + 83 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 2963, + "bbox": [ + 442, + 400, + 46, + 107 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 2350, + "bbox": [ + 403, + 409, + 43, + 105 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 5334, + "bbox": [ + 68, + 380, + 90, + 194 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 467, + "bbox": [ + 1128, + 393, + 23, + 47 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 2245, + "bbox": [ + 1373, + 360, + 44, + 74 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 6667, + "bbox": [ + 1684, + 332, + 70, + 156 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 4170, + "bbox": [ + 340, + 388, + 63, + 142 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 1094, + "bbox": [ + 324, + 405, + 36, + 61 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1081, + "bbox": [ + 750, + 416, + 30, + 71 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 5003, + "bbox": [ + 553, + 385, + 70, + 149 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 14323, + "bbox": [ + 1154, + 354, + 111, + 304 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 287, + "bbox": [ + 778, + 467, + 35, + 19 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 60, + "bbox": [ + 886, + 461, + 5, + 26 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 316, + "bbox": [ + 871, + 446, + 19, + 42 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2552, + "bbox": [ + 816, + 442, + 66, + 50 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1037, + "bbox": [ + 1033, + 445, + 60, + 31 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 8896, + "bbox": [ + 907, + 408, + 118, + 96 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1789, + "bbox": [ + 300, + 452, + 105, + 53 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 319, + "bbox": [ + 756, + 446, + 21, + 52 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 2231, + "bbox": [ + 563, + 444, + 47, + 107 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 37202, + "bbox": [ + 1068, + 447, + 331, + 205 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000048_000019_gtFine_panoptic.png", + "image_id": "munster_000048_000019", + "segments_info": [ + { + "area": 651279, + "bbox": [ + 6, + 480, + 2037, + 539 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 177545, + "bbox": [ + 6, + 503, + 2037, + 484 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 132258, + "bbox": [ + 132, + 29, + 1485, + 435 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 17373, + "bbox": [ + 1379, + 449, + 443, + 76 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 12832, + "bbox": [ + 371, + 415, + 262, + 127 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 25625, + "bbox": [ + 420, + 5, + 1089, + 594 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1040, + "bbox": [ + 1109, + 306, + 133, + 118 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 26966, + "bbox": [ + 334, + 5, + 1236, + 449 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 614230, + "bbox": [ + 6, + 5, + 2037, + 559 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 5895, + "bbox": [ + 975, + 457, + 849, + 54 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 46912, + "bbox": [ + 954, + 5, + 679, + 176 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 549, + "bbox": [ + 1002, + 443, + 19, + 59 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1675, + "bbox": [ + 1401, + 446, + 38, + 60 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1094, + "bbox": [ + 1592, + 423, + 46, + 44 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 778, + "bbox": [ + 1640, + 421, + 23, + 45 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1732, + "bbox": [ + 573, + 419, + 58, + 101 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2332, + "bbox": [ + 521, + 430, + 38, + 107 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2175, + "bbox": [ + 454, + 432, + 40, + 104 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 2080, + "bbox": [ + 413, + 409, + 48, + 127 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 503, + "bbox": [ + 280, + 408, + 24, + 31 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 340, + "bbox": [ + 291, + 528, + 13, + 48 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 6371, + "bbox": [ + 329, + 391, + 64, + 175 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 6487, + "bbox": [ + 194, + 397, + 54, + 171 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 5005, + "bbox": [ + 239, + 405, + 58, + 182 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 8780, + "bbox": [ + 268, + 410, + 77, + 185 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 5147, + "bbox": [ + 76, + 405, + 61, + 162 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 10992, + "bbox": [ + 905, + 369, + 126, + 220 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 1778, + "bbox": [ + 1877, + 314, + 58, + 168 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 9121, + "bbox": [ + 1962, + 308, + 81, + 179 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 8058, + "bbox": [ + 1900, + 342, + 101, + 339 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 39854, + "bbox": [ + 1761, + 272, + 181, + 439 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 1035, + "bbox": [ + 975, + 426, + 27, + 80 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 6014, + "bbox": [ + 6, + 324, + 106, + 303 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 236, + "bbox": [ + 898, + 449, + 39, + 58 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 513, + "bbox": [ + 904, + 455, + 31, + 63 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3817, + "bbox": [ + 849, + 451, + 71, + 76 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 4194, + "bbox": [ + 807, + 438, + 62, + 112 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 33384, + "bbox": [ + 599, + 406, + 231, + 186 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 16962, + "bbox": [ + 1014, + 412, + 160, + 134 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1332, + "bbox": [ + 1750, + 397, + 54, + 62 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 11961, + "bbox": [ + 1399, + 397, + 353, + 66 + ], + "category_id": 28, + "id": 28001, + "iscrowd": 0 + }, + { + "area": 1266, + "bbox": [ + 388, + 482, + 42, + 57 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 319, + "bbox": [ + 977, + 469, + 18, + 32 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 20596, + "bbox": [ + 6, + 447, + 165, + 274 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 42923, + "bbox": [ + 1692, + 417, + 351, + 289 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000049_000019_gtFine_panoptic.png", + "image_id": "munster_000049_000019", + "segments_info": [ + { + "area": 921469, + "bbox": [ + 6, + 479, + 2037, + 540 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 26060, + "bbox": [ + 6, + 453, + 2037, + 85 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 332092, + "bbox": [ + 6, + 5, + 2037, + 487 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 463, + "bbox": [ + 830, + 472, + 53, + 30 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 12682, + "bbox": [ + 168, + 5, + 1639, + 536 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1713, + "bbox": [ + 865, + 302, + 953, + 67 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 8075, + "bbox": [ + 100, + 220, + 793, + 146 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 447523, + "bbox": [ + 329, + 5, + 1714, + 510 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 40119, + "bbox": [ + 223, + 5, + 267, + 331 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 6642, + "bbox": [ + 998, + 415, + 359, + 39 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1228, + "bbox": [ + 527, + 410, + 27, + 82 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1998, + "bbox": [ + 504, + 404, + 33, + 93 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1479, + "bbox": [ + 303, + 418, + 28, + 77 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1288, + "bbox": [ + 333, + 423, + 27, + 75 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1894, + "bbox": [ + 199, + 419, + 28, + 93 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2055, + "bbox": [ + 151, + 420, + 31, + 98 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1829, + "bbox": [ + 85, + 422, + 35, + 102 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 2694, + "bbox": [ + 46, + 417, + 42, + 109 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 7268, + "bbox": [ + 6, + 359, + 60, + 211 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1498, + "bbox": [ + 692, + 408, + 27, + 83 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 160, + "bbox": [ + 1104, + 408, + 24, + 32 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 459, + "bbox": [ + 1727, + 382, + 34, + 97 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 2076, + "bbox": [ + 1729, + 395, + 37, + 92 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1031, + "bbox": [ + 438, + 405, + 29, + 100 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2652, + "bbox": [ + 398, + 393, + 54, + 107 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1259, + "bbox": [ + 593, + 387, + 40, + 113 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 3948, + "bbox": [ + 555, + 372, + 53, + 146 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 4605, + "bbox": [ + 636, + 369, + 60, + 147 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 4651, + "bbox": [ + 1343, + 384, + 75, + 138 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 67573, + "bbox": [ + 1367, + 355, + 334, + 264 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 179, + "bbox": [ + 954, + 432, + 36, + 18 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1117, + "bbox": [ + 821, + 437, + 82, + 65 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 337, + "bbox": [ + 445, + 451, + 11, + 59 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2147, + "bbox": [ + 407, + 457, + 39, + 74 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 1998, + "bbox": [ + 595, + 444, + 42, + 81 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 1607, + "bbox": [ + 574, + 446, + 31, + 84 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 1745, + "bbox": [ + 658, + 426, + 28, + 103 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 1775, + "bbox": [ + 1811, + 407, + 87, + 61 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + }, + { + "area": 3181, + "bbox": [ + 1859, + 401, + 86, + 74 + ], + "category_id": 33, + "id": 33009, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000050_000019_gtFine_panoptic.png", + "image_id": "munster_000050_000019", + "segments_info": [ + { + "area": 848051, + "bbox": [ + 6, + 460, + 2037, + 559 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 93262, + "bbox": [ + 302, + 459, + 1741, + 150 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 695886, + "bbox": [ + 6, + 5, + 2037, + 523 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 21742, + "bbox": [ + 72, + 5, + 1689, + 549 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7721, + "bbox": [ + 491, + 195, + 783, + 241 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 7277, + "bbox": [ + 61, + 180, + 1485, + 278 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 71676, + "bbox": [ + 592, + 146, + 857, + 369 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2374, + "bbox": [ + 1096, + 456, + 304, + 40 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 114595, + "bbox": [ + 821, + 5, + 699, + 286 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 240, + "bbox": [ + 1083, + 430, + 11, + 29 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 243, + "bbox": [ + 1071, + 432, + 12, + 28 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 814, + "bbox": [ + 878, + 419, + 24, + 57 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 584, + "bbox": [ + 846, + 421, + 19, + 50 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 6363, + "bbox": [ + 406, + 381, + 68, + 163 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 642, + "bbox": [ + 1447, + 425, + 18, + 56 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 681, + "bbox": [ + 1461, + 431, + 21, + 50 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 2086, + "bbox": [ + 1604, + 420, + 42, + 94 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 3246, + "bbox": [ + 1707, + 409, + 63, + 126 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 3654, + "bbox": [ + 1768, + 412, + 64, + 121 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 4159, + "bbox": [ + 723, + 390, + 73, + 152 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 421, + "bbox": [ + 1218, + 443, + 24, + 19 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 382, + "bbox": [ + 1165, + 440, + 24, + 26 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1015, + "bbox": [ + 1129, + 434, + 42, + 33 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1580, + "bbox": [ + 1293, + 441, + 70, + 40 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 64791, + "bbox": [ + 6, + 372, + 303, + 262 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 4603, + "bbox": [ + 1274, + 376, + 81, + 106 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 1855, + "bbox": [ + 735, + 442, + 58, + 101 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000051_000019_gtFine_panoptic.png", + "image_id": "munster_000051_000019", + "segments_info": [ + { + "area": 678834, + "bbox": [ + 190, + 443, + 1853, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 32042, + "bbox": [ + 1127, + 469, + 916, + 139 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 365397, + "bbox": [ + 6, + 5, + 2037, + 455 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 22765, + "bbox": [ + 1633, + 421, + 410, + 95 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 21839, + "bbox": [ + 96, + 5, + 1885, + 550 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 5920, + "bbox": [ + 718, + 188, + 874, + 234 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 14866, + "bbox": [ + 160, + 144, + 1883, + 320 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 332800, + "bbox": [ + 6, + 5, + 1223, + 779 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 112554, + "bbox": [ + 6, + 436, + 776, + 583 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 187940, + "bbox": [ + 397, + 5, + 1239, + 291 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 10269, + "bbox": [ + 6, + 412, + 969, + 89 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 393, + "bbox": [ + 757, + 427, + 17, + 35 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1674, + "bbox": [ + 769, + 409, + 40, + 90 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 144, + "bbox": [ + 861, + 418, + 10, + 76 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2156, + "bbox": [ + 823, + 413, + 45, + 85 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1664, + "bbox": [ + 864, + 417, + 32, + 82 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3051, + "bbox": [ + 1654, + 394, + 40, + 109 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 4083, + "bbox": [ + 1686, + 383, + 62, + 125 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 3489, + "bbox": [ + 1745, + 391, + 48, + 114 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1320, + "bbox": [ + 1040, + 413, + 45, + 71 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 622, + "bbox": [ + 957, + 417, + 32, + 51 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 663, + "bbox": [ + 791, + 431, + 26, + 33 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 26213, + "bbox": [ + 1115, + 412, + 214, + 153 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4079, + "bbox": [ + 1016, + 376, + 90, + 85 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 3047, + "bbox": [ + 947, + 399, + 99, + 48 + ], + "category_id": 28, + "id": 28001, + "iscrowd": 0 + }, + { + "area": 81592, + "bbox": [ + 1161, + 282, + 448, + 266 + ], + "category_id": 28, + "id": 28002, + "iscrowd": 0 + }, + { + "area": 2078, + "bbox": [ + 1021, + 446, + 78, + 48 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 600, + "bbox": [ + 957, + 463, + 38, + 32 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 768, + "bbox": [ + 909, + 450, + 50, + 45 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000052_000019_gtFine_panoptic.png", + "image_id": "munster_000052_000019", + "segments_info": [ + { + "area": 666744, + "bbox": [ + 6, + 450, + 2037, + 569 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 245681, + "bbox": [ + 6, + 450, + 2037, + 569 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 191497, + "bbox": [ + 6, + 5, + 2037, + 528 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 29281, + "bbox": [ + 6, + 5, + 1874, + 623 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 24855, + "bbox": [ + 269, + 172, + 1556, + 250 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 902, + "bbox": [ + 601, + 312, + 1288, + 102 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 459966, + "bbox": [ + 213, + 5, + 1830, + 545 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 8830, + "bbox": [ + 260, + 499, + 441, + 95 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 91046, + "bbox": [ + 127, + 5, + 1532, + 389 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 14954, + "bbox": [ + 1278, + 406, + 765, + 67 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 361, + "bbox": [ + 216, + 431, + 21, + 62 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 253, + "bbox": [ + 193, + 434, + 18, + 65 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1792, + "bbox": [ + 200, + 432, + 31, + 80 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 496, + "bbox": [ + 40, + 426, + 34, + 22 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1339, + "bbox": [ + 71, + 429, + 33, + 81 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2244, + "bbox": [ + 76, + 435, + 113, + 230 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2241, + "bbox": [ + 364, + 386, + 45, + 123 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 258, + "bbox": [ + 766, + 427, + 12, + 28 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 322, + "bbox": [ + 774, + 426, + 17, + 31 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 595, + "bbox": [ + 1073, + 414, + 19, + 48 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 83, + "bbox": [ + 1100, + 414, + 10, + 15 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 503, + "bbox": [ + 1091, + 416, + 16, + 49 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 677, + "bbox": [ + 1103, + 416, + 21, + 49 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 441, + "bbox": [ + 1124, + 426, + 18, + 36 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 551, + "bbox": [ + 1142, + 425, + 19, + 38 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 786, + "bbox": [ + 1159, + 407, + 21, + 59 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 597, + "bbox": [ + 1176, + 414, + 14, + 52 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 1136, + "bbox": [ + 1528, + 414, + 41, + 60 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 496, + "bbox": [ + 1566, + 413, + 17, + 59 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 669, + "bbox": [ + 1617, + 413, + 24, + 62 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 1961, + "bbox": [ + 1636, + 398, + 31, + 88 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 2389, + "bbox": [ + 1670, + 384, + 54, + 94 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 1690, + "bbox": [ + 1717, + 389, + 31, + 93 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 1995, + "bbox": [ + 1782, + 390, + 27, + 87 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 7313, + "bbox": [ + 1562, + 377, + 68, + 190 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 9140, + "bbox": [ + 1417, + 387, + 65, + 179 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 2516, + "bbox": [ + 1916, + 373, + 37, + 99 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 8901, + "bbox": [ + 465, + 394, + 76, + 215 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 5778, + "bbox": [ + 372, + 391, + 117, + 237 + ], + "category_id": 24, + "id": 24028, + "iscrowd": 0 + }, + { + "area": 15058, + "bbox": [ + 389, + 363, + 74, + 278 + ], + "category_id": 24, + "id": 24029, + "iscrowd": 0 + }, + { + "area": 8218, + "bbox": [ + 104, + 397, + 95, + 275 + ], + "category_id": 24, + "id": 24030, + "iscrowd": 0 + }, + { + "area": 13924, + "bbox": [ + 79, + 424, + 85, + 261 + ], + "category_id": 24, + "id": 24031, + "iscrowd": 0 + }, + { + "area": 206, + "bbox": [ + 570, + 431, + 56, + 12 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 178, + "bbox": [ + 596, + 435, + 21, + 19 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 657, + "bbox": [ + 634, + 422, + 54, + 28 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3398, + "bbox": [ + 607, + 432, + 90, + 69 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 4851, + "bbox": [ + 980, + 412, + 109, + 112 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 50043, + "bbox": [ + 768, + 418, + 300, + 216 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1129, + "bbox": [ + 638, + 453, + 28, + 54 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 836, + "bbox": [ + 606, + 451, + 35, + 57 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1482, + "bbox": [ + 572, + 451, + 25, + 85 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 2035, + "bbox": [ + 525, + 476, + 49, + 71 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 7361, + "bbox": [ + 323, + 504, + 222, + 105 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 1048, + "bbox": [ + 166, + 472, + 35, + 54 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 2155, + "bbox": [ + 6, + 480, + 36, + 89 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 2741, + "bbox": [ + 21, + 477, + 58, + 92 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000053_000019_gtFine_panoptic.png", + "image_id": "munster_000053_000019", + "segments_info": [ + { + "area": 669860, + "bbox": [ + 6, + 480, + 2037, + 539 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 122408, + "bbox": [ + 6, + 483, + 2037, + 483 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 668913, + "bbox": [ + 6, + 5, + 2037, + 532 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1464, + "bbox": [ + 426, + 465, + 284, + 39 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 36160, + "bbox": [ + 125, + 68, + 1828, + 699 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 935, + "bbox": [ + 850, + 338, + 202, + 109 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 14826, + "bbox": [ + 112, + 5, + 1863, + 437 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 26452, + "bbox": [ + 213, + 187, + 898, + 348 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 116577, + "bbox": [ + 84, + 5, + 1020, + 241 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3694, + "bbox": [ + 1053, + 436, + 95, + 77 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 6251, + "bbox": [ + 426, + 443, + 216, + 82 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1750, + "bbox": [ + 1889, + 393, + 71, + 84 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 6224, + "bbox": [ + 494, + 379, + 76, + 180 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2349, + "bbox": [ + 172, + 446, + 144, + 89 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 624, + "bbox": [ + 1033, + 456, + 26, + 38 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 6113, + "bbox": [ + 1107, + 428, + 104, + 93 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1946, + "bbox": [ + 1200, + 415, + 107, + 133 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 21824, + "bbox": [ + 1182, + 412, + 225, + 151 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 15815, + "bbox": [ + 1353, + 401, + 149, + 202 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 93728, + "bbox": [ + 1430, + 387, + 593, + 272 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1855, + "bbox": [ + 955, + 450, + 55, + 41 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 7361, + "bbox": [ + 110, + 444, + 104, + 122 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 3067, + "bbox": [ + 492, + 453, + 69, + 122 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3999, + "bbox": [ + 302, + 444, + 89, + 134 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 9239, + "bbox": [ + 337, + 459, + 120, + 117 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 3869, + "bbox": [ + 197, + 463, + 89, + 73 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 4450, + "bbox": [ + 63, + 467, + 128, + 178 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 19680, + "bbox": [ + 6, + 432, + 147, + 234 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 24115, + "bbox": [ + 1724, + 401, + 169, + 329 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000054_000019_gtFine_panoptic.png", + "image_id": "munster_000054_000019", + "segments_info": [ + { + "area": 770146, + "bbox": [ + 6, + 451, + 2037, + 568 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 164222, + "bbox": [ + 151, + 471, + 1892, + 450 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 320233, + "bbox": [ + 6, + 5, + 2037, + 540 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 31607, + "bbox": [ + 304, + 5, + 1571, + 698 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4605, + "bbox": [ + 418, + 273, + 621, + 162 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1336, + "bbox": [ + 297, + 386, + 173, + 39 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 375469, + "bbox": [ + 223, + 5, + 1820, + 489 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 10504, + "bbox": [ + 806, + 442, + 1237, + 115 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 146191, + "bbox": [ + 211, + 5, + 917, + 266 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 4088, + "bbox": [ + 279, + 456, + 107, + 53 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 70, + "bbox": [ + 211, + 450, + 9, + 10 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 154, + "bbox": [ + 231, + 446, + 14, + 14 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1009, + "bbox": [ + 381, + 446, + 33, + 55 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 545, + "bbox": [ + 797, + 422, + 24, + 48 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 713, + "bbox": [ + 917, + 414, + 24, + 50 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 775, + "bbox": [ + 465, + 456, + 55, + 29 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 6375, + "bbox": [ + 180, + 460, + 124, + 64 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 10483, + "bbox": [ + 6, + 456, + 148, + 91 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1392, + "bbox": [ + 753, + 416, + 53, + 61 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 307, + "bbox": [ + 941, + 429, + 22, + 19 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2705, + "bbox": [ + 952, + 378, + 61, + 128 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 415, + "bbox": [ + 974, + 422, + 22, + 106 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 52709, + "bbox": [ + 963, + 364, + 280, + 239 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1762, + "bbox": [ + 850, + 418, + 44, + 46 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 871, + "bbox": [ + 744, + 420, + 41, + 59 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 5854, + "bbox": [ + 670, + 417, + 100, + 74 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 970, + "bbox": [ + 586, + 433, + 57, + 52 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 4507, + "bbox": [ + 530, + 436, + 97, + 59 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 2510, + "bbox": [ + 1607, + 387, + 129, + 150 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 6208, + "bbox": [ + 1621, + 383, + 180, + 160 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 16243, + "bbox": [ + 1667, + 378, + 169, + 171 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000055_000019_gtFine_panoptic.png", + "image_id": "munster_000055_000019", + "segments_info": [ + { + "area": 600263, + "bbox": [ + 6, + 503, + 2037, + 516 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 210517, + "bbox": [ + 6, + 485, + 2037, + 460 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 130870, + "bbox": [ + 6, + 5, + 2037, + 499 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 13250, + "bbox": [ + 1404, + 438, + 639, + 64 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 44926, + "bbox": [ + 162, + 5, + 1813, + 749 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 31940, + "bbox": [ + 164, + 5, + 1805, + 389 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 628556, + "bbox": [ + 6, + 5, + 2037, + 563 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1472, + "bbox": [ + 96, + 528, + 342, + 42 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 38033, + "bbox": [ + 584, + 5, + 790, + 234 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 161, + "bbox": [ + 806, + 423, + 17, + 17 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 514, + "bbox": [ + 1377, + 410, + 22, + 92 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2171, + "bbox": [ + 1390, + 414, + 33, + 91 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 7334, + "bbox": [ + 1492, + 373, + 74, + 158 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 10684, + "bbox": [ + 1601, + 334, + 75, + 235 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 20426, + "bbox": [ + 1762, + 298, + 104, + 326 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 5919, + "bbox": [ + 270, + 382, + 84, + 165 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 5805, + "bbox": [ + 557, + 393, + 75, + 178 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 6403, + "bbox": [ + 744, + 384, + 86, + 160 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 13597, + "bbox": [ + 411, + 356, + 111, + 276 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 720, + "bbox": [ + 955, + 472, + 25, + 37 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 4852, + "bbox": [ + 842, + 447, + 99, + 75 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 152448, + "bbox": [ + 943, + 321, + 463, + 405 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 4369, + "bbox": [ + 503, + 458, + 78, + 106 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 6409, + "bbox": [ + 555, + 443, + 118, + 136 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 11040, + "bbox": [ + 715, + 450, + 180, + 113 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 10184, + "bbox": [ + 228, + 459, + 196, + 120 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 5772, + "bbox": [ + 423, + 458, + 85, + 199 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000056_000019_gtFine_panoptic.png", + "image_id": "munster_000056_000019", + "segments_info": [ + { + "area": 538658, + "bbox": [ + 6, + 484, + 2036, + 535 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 205961, + "bbox": [ + 1141, + 492, + 902, + 527 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 490317, + "bbox": [ + 6, + 5, + 2037, + 559 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 9379, + "bbox": [ + 651, + 187, + 757, + 373 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3582, + "bbox": [ + 746, + 345, + 582, + 65 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 222842, + "bbox": [ + 425, + 5, + 911, + 564 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 26447, + "bbox": [ + 1223, + 5, + 199, + 208 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1542, + "bbox": [ + 1187, + 433, + 38, + 57 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 338, + "bbox": [ + 1176, + 431, + 17, + 28 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 507, + "bbox": [ + 785, + 431, + 22, + 45 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 886, + "bbox": [ + 763, + 424, + 30, + 77 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1911, + "bbox": [ + 1264, + 395, + 47, + 122 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 51, + "bbox": [ + 1343, + 398, + 8, + 12 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 520, + "bbox": [ + 1318, + 405, + 30, + 52 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 831, + "bbox": [ + 1380, + 396, + 24, + 128 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 309, + "bbox": [ + 1425, + 390, + 19, + 121 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 801, + "bbox": [ + 1443, + 381, + 44, + 106 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 4137, + "bbox": [ + 1432, + 393, + 44, + 132 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 4833, + "bbox": [ + 1391, + 399, + 53, + 148 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 974, + "bbox": [ + 1336, + 388, + 48, + 48 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 844, + "bbox": [ + 1487, + 382, + 41, + 139 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 163, + "bbox": [ + 1531, + 375, + 33, + 147 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 1274, + "bbox": [ + 1564, + 368, + 35, + 151 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 3948, + "bbox": [ + 1476, + 393, + 51, + 131 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 2243, + "bbox": [ + 1573, + 379, + 34, + 162 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 6937, + "bbox": [ + 1517, + 374, + 63, + 181 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 6270, + "bbox": [ + 1581, + 385, + 65, + 171 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 2161, + "bbox": [ + 1689, + 367, + 37, + 190 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 9619, + "bbox": [ + 1644, + 357, + 73, + 209 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 8175, + "bbox": [ + 1754, + 360, + 77, + 197 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 16114, + "bbox": [ + 1831, + 319, + 100, + 258 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 1123, + "bbox": [ + 685, + 408, + 24, + 105 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 5394, + "bbox": [ + 691, + 379, + 68, + 185 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 4830, + "bbox": [ + 620, + 398, + 72, + 152 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 5298, + "bbox": [ + 1082, + 412, + 96, + 88 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2482, + "bbox": [ + 919, + 440, + 62, + 60 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 10002, + "bbox": [ + 789, + 429, + 132, + 98 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 14781, + "bbox": [ + 960, + 416, + 156, + 125 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 287353, + "bbox": [ + 6, + 255, + 520, + 693 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 5009, + "bbox": [ + 1214, + 438, + 109, + 95 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 10904, + "bbox": [ + 1911, + 425, + 132, + 143 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1214, + "bbox": [ + 687, + 469, + 25, + 90 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 2777, + "bbox": [ + 700, + 452, + 53, + 125 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 3043, + "bbox": [ + 626, + 472, + 55, + 106 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000057_000019_gtFine_panoptic.png", + "image_id": "munster_000057_000019", + "segments_info": [ + { + "area": 663835, + "bbox": [ + 6, + 455, + 2037, + 564 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 201487, + "bbox": [ + 6, + 452, + 2037, + 537 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 665950, + "bbox": [ + 6, + 5, + 2037, + 664 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 16123, + "bbox": [ + 79, + 62, + 1206, + 597 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9282, + "bbox": [ + 20, + 261, + 1207, + 224 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 173755, + "bbox": [ + 477, + 5, + 487, + 431 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 12480, + "bbox": [ + 476, + 5, + 684, + 122 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2552, + "bbox": [ + 802, + 429, + 125, + 33 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 6106, + "bbox": [ + 1259, + 375, + 54, + 169 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 8398, + "bbox": [ + 1310, + 361, + 72, + 179 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 4518, + "bbox": [ + 1409, + 351, + 53, + 201 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 9508, + "bbox": [ + 1505, + 342, + 70, + 232 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 13455, + "bbox": [ + 1427, + 344, + 110, + 235 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 30994, + "bbox": [ + 1689, + 278, + 144, + 381 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 25571, + "bbox": [ + 1949, + 227, + 94, + 544 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 414, + "bbox": [ + 878, + 422, + 14, + 39 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 640, + "bbox": [ + 859, + 420, + 22, + 42 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 712, + "bbox": [ + 665, + 415, + 19, + 50 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 892, + "bbox": [ + 631, + 417, + 24, + 62 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 327, + "bbox": [ + 572, + 410, + 13, + 62 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 255, + "bbox": [ + 517, + 421, + 15, + 58 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 857, + "bbox": [ + 527, + 413, + 19, + 80 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1832, + "bbox": [ + 535, + 412, + 37, + 87 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 618, + "bbox": [ + 452, + 412, + 22, + 87 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 827, + "bbox": [ + 437, + 406, + 17, + 68 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 4504, + "bbox": [ + 370, + 404, + 53, + 133 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 2371, + "bbox": [ + 493, + 410, + 35, + 96 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 9486, + "bbox": [ + 31, + 370, + 102, + 231 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 5280, + "bbox": [ + 6, + 347, + 43, + 239 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 2190, + "bbox": [ + 465, + 408, + 30, + 103 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 1257, + "bbox": [ + 685, + 416, + 29, + 71 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 3895, + "bbox": [ + 575, + 396, + 52, + 157 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 20885, + "bbox": [ + 152, + 359, + 154, + 318 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 1435, + "bbox": [ + 1117, + 418, + 57, + 38 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 821, + "bbox": [ + 664, + 423, + 72, + 42 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4669, + "bbox": [ + 718, + 417, + 89, + 71 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 855, + "bbox": [ + 926, + 391, + 80, + 121 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 22176, + "bbox": [ + 922, + 391, + 185, + 154 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 545, + "bbox": [ + 629, + 431, + 42, + 36 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 357, + "bbox": [ + 689, + 448, + 22, + 50 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1489, + "bbox": [ + 432, + 454, + 41, + 54 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 2255, + "bbox": [ + 574, + 463, + 43, + 101 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 17397, + "bbox": [ + 145, + 463, + 146, + 270 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000058_000019_gtFine_panoptic.png", + "image_id": "munster_000058_000019", + "segments_info": [ + { + "area": 701103, + "bbox": [ + 6, + 468, + 2037, + 551 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 212762, + "bbox": [ + 6, + 465, + 2037, + 537 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 743051, + "bbox": [ + 6, + 5, + 2037, + 605 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 15995, + "bbox": [ + 184, + 5, + 1441, + 611 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 11794, + "bbox": [ + 179, + 251, + 1241, + 171 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 132596, + "bbox": [ + 598, + 5, + 441, + 421 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4765, + "bbox": [ + 945, + 5, + 150, + 76 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 12669, + "bbox": [ + 557, + 444, + 219, + 74 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 427, + "bbox": [ + 1337, + 448, + 15, + 39 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 146, + "bbox": [ + 1346, + 389, + 17, + 61 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1859, + "bbox": [ + 1374, + 394, + 25, + 104 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2964, + "bbox": [ + 1346, + 381, + 36, + 123 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 9791, + "bbox": [ + 1662, + 383, + 126, + 185 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 31575, + "bbox": [ + 6, + 439, + 259, + 152 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 196, + "bbox": [ + 1022, + 410, + 20, + 19 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 6825, + "bbox": [ + 927, + 421, + 108, + 92 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 24904, + "bbox": [ + 1012, + 391, + 195, + 166 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 14213, + "bbox": [ + 302, + 431, + 185, + 98 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 7750, + "bbox": [ + 1486, + 387, + 110, + 151 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1392, + "bbox": [ + 514, + 445, + 34, + 56 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 555, + "bbox": [ + 490, + 450, + 16, + 55 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1203, + "bbox": [ + 456, + 448, + 41, + 59 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 554, + "bbox": [ + 1290, + 424, + 29, + 60 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 6514, + "bbox": [ + 1619, + 392, + 70, + 155 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000059_000019_gtFine_panoptic.png", + "image_id": "munster_000059_000019", + "segments_info": [ + { + "area": 624818, + "bbox": [ + 6, + 435, + 1682, + 584 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 251548, + "bbox": [ + 6, + 441, + 2037, + 578 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 521738, + "bbox": [ + 6, + 5, + 2037, + 496 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 135752, + "bbox": [ + 1344, + 406, + 699, + 333 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 16974, + "bbox": [ + 130, + 179, + 1890, + 423 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 580, + "bbox": [ + 1635, + 287, + 19, + 34 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 30370, + "bbox": [ + 497, + 5, + 1531, + 396 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 206155, + "bbox": [ + 308, + 5, + 769, + 471 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 37388, + "bbox": [ + 272, + 5, + 487, + 180 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1008, + "bbox": [ + 687, + 388, + 33, + 63 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 28321, + "bbox": [ + 131, + 379, + 1590, + 106 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 143, + "bbox": [ + 314, + 402, + 14, + 15 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 176, + "bbox": [ + 329, + 403, + 14, + 18 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 510, + "bbox": [ + 382, + 403, + 18, + 41 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 677, + "bbox": [ + 365, + 403, + 18, + 53 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 708, + "bbox": [ + 565, + 398, + 19, + 54 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 372, + "bbox": [ + 628, + 393, + 14, + 59 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 952, + "bbox": [ + 614, + 397, + 26, + 59 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 465, + "bbox": [ + 656, + 399, + 17, + 49 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 712, + "bbox": [ + 643, + 400, + 18, + 50 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1158, + "bbox": [ + 1059, + 395, + 33, + 51 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1015, + "bbox": [ + 1618, + 363, + 27, + 41 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 305, + "bbox": [ + 1353, + 367, + 25, + 18 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 542, + "bbox": [ + 735, + 390, + 18, + 64 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 394, + "bbox": [ + 761, + 391, + 17, + 61 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 9592, + "bbox": [ + 409, + 329, + 90, + 223 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 869, + "bbox": [ + 717, + 395, + 101, + 55 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 570, + "bbox": [ + 801, + 391, + 44, + 66 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 536, + "bbox": [ + 816, + 396, + 30, + 62 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1667, + "bbox": [ + 844, + 381, + 57, + 84 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2815, + "bbox": [ + 865, + 383, + 71, + 88 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 11292, + "bbox": [ + 897, + 380, + 146, + 105 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 876, + "bbox": [ + 1764, + 383, + 80, + 26 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 2890, + "bbox": [ + 1180, + 386, + 54, + 75 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 5278, + "bbox": [ + 1310, + 382, + 82, + 81 + ], + "category_id": 32, + "id": 32002, + "iscrowd": 0 + }, + { + "area": 1685, + "bbox": [ + 1088, + 389, + 34, + 66 + ], + "category_id": 32, + "id": 32003, + "iscrowd": 0 + }, + { + "area": 2256, + "bbox": [ + 1131, + 391, + 50, + 72 + ], + "category_id": 32, + "id": 32004, + "iscrowd": 0 + }, + { + "area": 4936, + "bbox": [ + 415, + 417, + 67, + 176 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000060_000019_gtFine_panoptic.png", + "image_id": "munster_000060_000019", + "segments_info": [ + { + "area": 697760, + "bbox": [ + 6, + 470, + 1911, + 549 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 199218, + "bbox": [ + 6, + 450, + 2037, + 569 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 544855, + "bbox": [ + 6, + 5, + 2037, + 581 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3107, + "bbox": [ + 543, + 432, + 246, + 28 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 11344, + "bbox": [ + 139, + 178, + 1643, + 376 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 12960, + "bbox": [ + 45, + 176, + 1740, + 197 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 234959, + "bbox": [ + 556, + 5, + 808, + 429 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 61211, + "bbox": [ + 397, + 5, + 493, + 161 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 11919, + "bbox": [ + 45, + 353, + 109, + 202 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 250, + "bbox": [ + 401, + 421, + 18, + 19 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 483, + "bbox": [ + 422, + 421, + 42, + 43 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 211, + "bbox": [ + 479, + 424, + 18, + 17 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 210, + "bbox": [ + 464, + 422, + 19, + 20 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 93, + "bbox": [ + 509, + 423, + 10, + 14 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 164, + "bbox": [ + 547, + 425, + 16, + 13 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 808, + "bbox": [ + 706, + 408, + 24, + 48 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 782, + "bbox": [ + 730, + 398, + 21, + 57 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 516, + "bbox": [ + 808, + 413, + 18, + 46 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 934, + "bbox": [ + 847, + 399, + 28, + 64 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 1196, + "bbox": [ + 914, + 391, + 30, + 71 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 960, + "bbox": [ + 898, + 394, + 24, + 67 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 308, + "bbox": [ + 953, + 391, + 19, + 75 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1898, + "bbox": [ + 939, + 390, + 55, + 81 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 601, + "bbox": [ + 1120, + 392, + 24, + 72 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 1129, + "bbox": [ + 1113, + 394, + 35, + 72 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 210, + "bbox": [ + 1168, + 416, + 12, + 25 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 324, + "bbox": [ + 1177, + 402, + 17, + 33 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 108, + "bbox": [ + 1292, + 399, + 14, + 9 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 144, + "bbox": [ + 1330, + 393, + 12, + 15 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 1332, + "bbox": [ + 1229, + 403, + 31, + 66 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 4176, + "bbox": [ + 1377, + 374, + 57, + 126 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 462, + "bbox": [ + 516, + 408, + 27, + 41 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1169, + "bbox": [ + 1190, + 395, + 25, + 78 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 354, + "bbox": [ + 951, + 411, + 52, + 24 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1115, + "bbox": [ + 1077, + 414, + 51, + 42 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 240, + "bbox": [ + 996, + 418, + 26, + 14 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1024, + "bbox": [ + 1017, + 413, + 75, + 41 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1078, + "bbox": [ + 1211, + 408, + 62, + 43 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 5840, + "bbox": [ + 1262, + 408, + 94, + 79 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 138589, + "bbox": [ + 1386, + 355, + 517, + 345 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1671, + "bbox": [ + 1045, + 417, + 45, + 45 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 551, + "bbox": [ + 500, + 436, + 62, + 37 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2812, + "bbox": [ + 479, + 431, + 70, + 66 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1820, + "bbox": [ + 1166, + 426, + 71, + 46 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 4022, + "bbox": [ + 1342, + 407, + 47, + 130 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000061_000019_gtFine_panoptic.png", + "image_id": "munster_000061_000019", + "segments_info": [ + { + "area": 677783, + "bbox": [ + 6, + 410, + 2037, + 609 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 213315, + "bbox": [ + 6, + 417, + 2037, + 479 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 731292, + "bbox": [ + 6, + 5, + 2037, + 548 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 9239, + "bbox": [ + 542, + 187, + 774, + 363 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 11217, + "bbox": [ + 807, + 101, + 523, + 272 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 87171, + "bbox": [ + 745, + 5, + 334, + 398 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1964, + "bbox": [ + 829, + 395, + 158, + 24 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 19909, + "bbox": [ + 740, + 5, + 293, + 165 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 65, + "bbox": [ + 794, + 386, + 10, + 14 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 259, + "bbox": [ + 807, + 384, + 14, + 32 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 304, + "bbox": [ + 818, + 382, + 12, + 39 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1050, + "bbox": [ + 823, + 384, + 30, + 62 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1625, + "bbox": [ + 638, + 387, + 42, + 69 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1958, + "bbox": [ + 474, + 384, + 33, + 95 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1160, + "bbox": [ + 513, + 376, + 34, + 100 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 4495, + "bbox": [ + 277, + 370, + 53, + 146 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 7840, + "bbox": [ + 210, + 361, + 71, + 164 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 30314, + "bbox": [ + 331, + 325, + 147, + 358 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 28228, + "bbox": [ + 643, + 305, + 191, + 389 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 120, + "bbox": [ + 979, + 384, + 11, + 18 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 241, + "bbox": [ + 986, + 379, + 11, + 33 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 888, + "bbox": [ + 1002, + 377, + 18, + 66 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 611, + "bbox": [ + 1036, + 373, + 16, + 70 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 688, + "bbox": [ + 1043, + 374, + 19, + 80 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 853, + "bbox": [ + 1076, + 369, + 28, + 86 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 1798, + "bbox": [ + 1052, + 372, + 29, + 90 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 3074, + "bbox": [ + 1239, + 353, + 46, + 125 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 13069, + "bbox": [ + 1439, + 316, + 99, + 207 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 18990, + "bbox": [ + 1962, + 238, + 81, + 354 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 2903, + "bbox": [ + 1210, + 324, + 46, + 249 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 46833, + "bbox": [ + 1087, + 239, + 211, + 484 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 325, + "bbox": [ + 911, + 379, + 17, + 44 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 921, + "bbox": [ + 918, + 386, + 22, + 66 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 772, + "bbox": [ + 893, + 408, + 49, + 39 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 301, + "bbox": [ + 922, + 425, + 10, + 35 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000062_000019_gtFine_panoptic.png", + "image_id": "munster_000062_000019", + "segments_info": [ + { + "area": 638984, + "bbox": [ + 6, + 456, + 2002, + 563 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 266469, + "bbox": [ + 6, + 464, + 2037, + 555 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 450958, + "bbox": [ + 6, + 5, + 2037, + 577 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 54770, + "bbox": [ + 14, + 5, + 2017, + 816 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 23500, + "bbox": [ + 377, + 112, + 1012, + 323 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 351723, + "bbox": [ + 153, + 5, + 1495, + 491 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1562, + "bbox": [ + 358, + 519, + 110, + 24 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 41805, + "bbox": [ + 139, + 5, + 256, + 314 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 17333, + "bbox": [ + 1382, + 393, + 294, + 105 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 417, + "bbox": [ + 509, + 433, + 25, + 23 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 508, + "bbox": [ + 419, + 447, + 17, + 43 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 114, + "bbox": [ + 443, + 442, + 8, + 17 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 204, + "bbox": [ + 450, + 439, + 11, + 25 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 660, + "bbox": [ + 317, + 418, + 30, + 96 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 378, + "bbox": [ + 299, + 416, + 30, + 138 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 5932, + "bbox": [ + 276, + 413, + 54, + 166 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 974, + "bbox": [ + 255, + 415, + 29, + 165 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 137, + "bbox": [ + 213, + 422, + 16, + 147 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 6089, + "bbox": [ + 227, + 407, + 54, + 190 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1163, + "bbox": [ + 132, + 396, + 34, + 161 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 2885, + "bbox": [ + 152, + 405, + 44, + 196 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 657, + "bbox": [ + 43, + 409, + 34, + 214 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 3191, + "bbox": [ + 9, + 399, + 71, + 258 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 3842, + "bbox": [ + 57, + 410, + 56, + 254 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 15837, + "bbox": [ + 72, + 412, + 100, + 267 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 15409, + "bbox": [ + 6, + 408, + 93, + 311 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 946, + "bbox": [ + 861, + 396, + 27, + 52 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 635, + "bbox": [ + 964, + 413, + 23, + 36 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 6568, + "bbox": [ + 343, + 399, + 66, + 160 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 4255, + "bbox": [ + 1267, + 359, + 32, + 173 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 4197, + "bbox": [ + 1296, + 385, + 45, + 143 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 10270, + "bbox": [ + 168, + 415, + 82, + 189 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 10843, + "bbox": [ + 1477, + 337, + 103, + 222 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 6168, + "bbox": [ + 1327, + 353, + 61, + 176 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 5764, + "bbox": [ + 1203, + 387, + 58, + 144 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 1653, + "bbox": [ + 1401, + 367, + 57, + 55 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2077, + "bbox": [ + 918, + 391, + 48, + 109 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2974, + "bbox": [ + 583, + 401, + 54, + 122 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 1399, + "bbox": [ + 435, + 459, + 35, + 56 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 663, + "bbox": [ + 1192, + 401, + 22, + 86 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1407, + "bbox": [ + 932, + 434, + 30, + 79 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1362, + "bbox": [ + 600, + 450, + 26, + 85 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000063_000019_gtFine_panoptic.png", + "image_id": "munster_000063_000019", + "segments_info": [ + { + "area": 632780, + "bbox": [ + 6, + 485, + 1925, + 534 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 45871, + "bbox": [ + 6, + 563, + 571, + 169 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 74975, + "bbox": [ + 435, + 86, + 1044, + 387 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 22683, + "bbox": [ + 433, + 71, + 1449, + 503 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 749, + "bbox": [ + 998, + 336, + 134, + 114 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 41899, + "bbox": [ + 358, + 5, + 1422, + 434 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 920804, + "bbox": [ + 6, + 5, + 2037, + 1014 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 54822, + "bbox": [ + 986, + 5, + 493, + 214 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 558, + "bbox": [ + 1282, + 426, + 18, + 43 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 74, + "bbox": [ + 1398, + 392, + 11, + 13 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1576, + "bbox": [ + 1298, + 402, + 25, + 87 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2274, + "bbox": [ + 1473, + 375, + 59, + 62 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1382, + "bbox": [ + 1532, + 383, + 45, + 52 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3306, + "bbox": [ + 1603, + 353, + 80, + 73 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2819, + "bbox": [ + 557, + 411, + 41, + 123 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 4317, + "bbox": [ + 507, + 416, + 65, + 125 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 2000, + "bbox": [ + 448, + 408, + 24, + 126 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 857, + "bbox": [ + 400, + 432, + 22, + 104 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1964, + "bbox": [ + 414, + 404, + 24, + 140 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 6185, + "bbox": [ + 357, + 396, + 75, + 154 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 126, + "bbox": [ + 191, + 411, + 15, + 21 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 439, + "bbox": [ + 1114, + 449, + 13, + 50 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 151, + "bbox": [ + 1068, + 450, + 9, + 30 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 6764, + "bbox": [ + 184, + 393, + 63, + 177 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 19981, + "bbox": [ + 45, + 358, + 130, + 282 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 662, + "bbox": [ + 1026, + 445, + 22, + 58 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 774, + "bbox": [ + 1046, + 444, + 25, + 59 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 523, + "bbox": [ + 1081, + 445, + 17, + 58 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 834, + "bbox": [ + 1094, + 442, + 21, + 59 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 9841, + "bbox": [ + 1169, + 353, + 108, + 268 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 322, + "bbox": [ + 986, + 465, + 13, + 38 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1253, + "bbox": [ + 940, + 447, + 49, + 60 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 948, + "bbox": [ + 940, + 451, + 31, + 59 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 613, + "bbox": [ + 940, + 460, + 17, + 54 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 86916, + "bbox": [ + 575, + 268, + 366, + 293 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 6978, + "bbox": [ + 136, + 457, + 145, + 98 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 234, + "bbox": [ + 1033, + 473, + 10, + 29 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 240, + "bbox": [ + 1051, + 474, + 10, + 29 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 179, + "bbox": [ + 1088, + 470, + 7, + 32 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 164, + "bbox": [ + 1104, + 474, + 7, + 31 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 7061, + "bbox": [ + 1187, + 462, + 76, + 190 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000064_000019_gtFine_panoptic.png", + "image_id": "munster_000064_000019", + "segments_info": [ + { + "area": 680834, + "bbox": [ + 6, + 432, + 1995, + 587 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 122029, + "bbox": [ + 781, + 444, + 1262, + 575 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 538869, + "bbox": [ + 6, + 5, + 2037, + 524 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 21960, + "bbox": [ + 251, + 5, + 1648, + 657 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 286, + "bbox": [ + 1213, + 346, + 47, + 60 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 36390, + "bbox": [ + 389, + 88, + 1196, + 367 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 297578, + "bbox": [ + 6, + 5, + 1825, + 731 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 82868, + "bbox": [ + 946, + 429, + 1097, + 289 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 62707, + "bbox": [ + 855, + 5, + 604, + 222 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 267, + "bbox": [ + 1119, + 413, + 43, + 21 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 3080, + "bbox": [ + 351, + 387, + 43, + 100 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 621, + "bbox": [ + 1136, + 400, + 21, + 50 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 191, + "bbox": [ + 1120, + 415, + 17, + 22 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 797, + "bbox": [ + 1242, + 394, + 27, + 58 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 832, + "bbox": [ + 789, + 388, + 20, + 70 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1078, + "bbox": [ + 837, + 392, + 27, + 66 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1362, + "bbox": [ + 798, + 391, + 34, + 68 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1109, + "bbox": [ + 1076, + 408, + 41, + 36 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2570, + "bbox": [ + 1016, + 404, + 65, + 48 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 708, + "bbox": [ + 1161, + 412, + 32, + 26 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 268, + "bbox": [ + 1233, + 409, + 37, + 29 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 829, + "bbox": [ + 1210, + 413, + 37, + 28 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 6768, + "bbox": [ + 1367, + 386, + 84, + 173 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 36686, + "bbox": [ + 1397, + 367, + 298, + 208 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 39234, + "bbox": [ + 1258, + 238, + 208, + 258 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000065_000019_gtFine_panoptic.png", + "image_id": "munster_000065_000019", + "segments_info": [ + { + "area": 667731, + "bbox": [ + 6, + 452, + 2037, + 567 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 14520, + "bbox": [ + 141, + 444, + 1341, + 160 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 526279, + "bbox": [ + 6, + 5, + 2037, + 548 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 26935, + "bbox": [ + 19, + 176, + 1493, + 529 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2106, + "bbox": [ + 793, + 264, + 350, + 151 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 52970, + "bbox": [ + 6, + 5, + 1643, + 477 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 234649, + "bbox": [ + 6, + 5, + 1560, + 572 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 26297, + "bbox": [ + 6, + 476, + 1054, + 243 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 16898, + "bbox": [ + 805, + 5, + 455, + 50 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 712, + "bbox": [ + 1166, + 420, + 72, + 40 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 160, + "bbox": [ + 794, + 445, + 20, + 34 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1054, + "bbox": [ + 808, + 436, + 36, + 43 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 9614, + "bbox": [ + 836, + 419, + 117, + 101 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1937, + "bbox": [ + 760, + 436, + 51, + 87 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 14386, + "bbox": [ + 633, + 428, + 156, + 112 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 44646, + "bbox": [ + 220, + 439, + 340, + 183 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 3289, + "bbox": [ + 1070, + 429, + 105, + 42 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 684, + "bbox": [ + 1302, + 417, + 48, + 30 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 262, + "bbox": [ + 1187, + 434, + 15, + 43 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1041, + "bbox": [ + 1194, + 423, + 40, + 61 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 5882, + "bbox": [ + 1206, + 421, + 106, + 78 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 74636, + "bbox": [ + 1403, + 314, + 422, + 346 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 164689, + "bbox": [ + 1614, + 330, + 429, + 526 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 15788, + "bbox": [ + 6, + 480, + 189, + 185 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 511, + "bbox": [ + 1381, + 419, + 57, + 37 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 7190, + "bbox": [ + 1310, + 431, + 122, + 105 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000066_000019_gtFine_panoptic.png", + "image_id": "munster_000066_000019", + "segments_info": [ + { + "area": 823277, + "bbox": [ + 6, + 469, + 2037, + 550 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 36106, + "bbox": [ + 6, + 464, + 1788, + 152 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 331330, + "bbox": [ + 6, + 5, + 2037, + 497 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 15807, + "bbox": [ + 278, + 75, + 1284, + 483 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4880, + "bbox": [ + 267, + 350, + 1120, + 89 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 479861, + "bbox": [ + 6, + 5, + 1873, + 546 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 15716, + "bbox": [ + 558, + 478, + 1191, + 109 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 90550, + "bbox": [ + 36, + 5, + 1270, + 348 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 264, + "bbox": [ + 1185, + 432, + 17, + 20 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2062, + "bbox": [ + 1437, + 406, + 38, + 103 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 150, + "bbox": [ + 880, + 448, + 7, + 26 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1510, + "bbox": [ + 336, + 431, + 28, + 81 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1838, + "bbox": [ + 507, + 431, + 40, + 105 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 198, + "bbox": [ + 940, + 447, + 22, + 13 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 146, + "bbox": [ + 961, + 454, + 26, + 14 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 26, + "bbox": [ + 1056, + 452, + 7, + 5 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 120, + "bbox": [ + 1123, + 445, + 23, + 11 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 502, + "bbox": [ + 1102, + 449, + 27, + 23 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 340, + "bbox": [ + 1076, + 450, + 28, + 24 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 617, + "bbox": [ + 1061, + 451, + 29, + 25 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 4134, + "bbox": [ + 978, + 440, + 87, + 62 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 619, + "bbox": [ + 1127, + 449, + 30, + 33 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 580, + "bbox": [ + 1146, + 447, + 23, + 40 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 705, + "bbox": [ + 1161, + 447, + 32, + 45 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 847, + "bbox": [ + 1177, + 452, + 27, + 45 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 3951, + "bbox": [ + 1195, + 423, + 85, + 83 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 2772, + "bbox": [ + 1242, + 440, + 63, + 73 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 17109, + "bbox": [ + 1284, + 405, + 174, + 131 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 703, + "bbox": [ + 916, + 452, + 48, + 19 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 312, + "bbox": [ + 855, + 452, + 26, + 19 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 2498, + "bbox": [ + 790, + 453, + 79, + 39 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 1924, + "bbox": [ + 740, + 452, + 51, + 45 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 1814, + "bbox": [ + 691, + 456, + 54, + 50 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 3495, + "bbox": [ + 630, + 458, + 77, + 55 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 519, + "bbox": [ + 285, + 454, + 21, + 38 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 1155, + "bbox": [ + 296, + 448, + 41, + 44 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 3511, + "bbox": [ + 324, + 448, + 129, + 45 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 66500, + "bbox": [ + 1746, + 391, + 297, + 308 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 1030, + "bbox": [ + 1544, + 425, + 101, + 95 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1112, + "bbox": [ + 1560, + 433, + 103, + 86 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1908, + "bbox": [ + 1632, + 441, + 103, + 82 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 2274, + "bbox": [ + 433, + 456, + 75, + 45 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1582, + "bbox": [ + 501, + 470, + 38, + 81 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000067_000019_gtFine_panoptic.png", + "image_id": "munster_000067_000019", + "segments_info": [ + { + "area": 490029, + "bbox": [ + 434, + 479, + 1609, + 540 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 52899, + "bbox": [ + 959, + 473, + 1084, + 306 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 415918, + "bbox": [ + 642, + 5, + 1401, + 627 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4311, + "bbox": [ + 386, + 112, + 977, + 381 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 5172, + "bbox": [ + 713, + 315, + 663, + 113 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 464677, + "bbox": [ + 6, + 5, + 1345, + 484 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 8748, + "bbox": [ + 1066, + 5, + 200, + 122 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1413, + "bbox": [ + 1363, + 412, + 40, + 67 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1038, + "bbox": [ + 1099, + 452, + 42, + 29 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1199, + "bbox": [ + 1054, + 449, + 48, + 31 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1817, + "bbox": [ + 993, + 446, + 65, + 35 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 648, + "bbox": [ + 951, + 443, + 44, + 38 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1788, + "bbox": [ + 1139, + 437, + 50, + 49 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 9941, + "bbox": [ + 1220, + 439, + 132, + 99 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 7670, + "bbox": [ + 819, + 419, + 143, + 104 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1008, + "bbox": [ + 770, + 415, + 108, + 107 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 11957, + "bbox": [ + 728, + 407, + 139, + 126 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 13832, + "bbox": [ + 504, + 377, + 250, + 203 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 12560, + "bbox": [ + 554, + 394, + 147, + 219 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 48888, + "bbox": [ + 296, + 365, + 354, + 299 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 149619, + "bbox": [ + 6, + 341, + 468, + 398 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 38155, + "bbox": [ + 1337, + 430, + 266, + 196 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 872, + "bbox": [ + 953, + 450, + 34, + 43 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000068_000019_gtFine_panoptic.png", + "image_id": "munster_000068_000019", + "segments_info": [ + { + "area": 939635, + "bbox": [ + 6, + 439, + 2037, + 580 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 32841, + "bbox": [ + 6, + 443, + 2037, + 139 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 511916, + "bbox": [ + 6, + 5, + 2037, + 519 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 30839, + "bbox": [ + 54, + 48, + 1853, + 499 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 17753, + "bbox": [ + 34, + 60, + 1289, + 354 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 9573, + "bbox": [ + 24, + 193, + 1714, + 221 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 197739, + "bbox": [ + 308, + 5, + 778, + 460 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 993, + "bbox": [ + 451, + 458, + 188, + 41 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 37057, + "bbox": [ + 587, + 5, + 500, + 354 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2803, + "bbox": [ + 306, + 397, + 43, + 109 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 74, + "bbox": [ + 1048, + 412, + 9, + 12 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 45, + "bbox": [ + 1059, + 410, + 6, + 9 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 238, + "bbox": [ + 1118, + 405, + 24, + 20 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 4267, + "bbox": [ + 1542, + 353, + 57, + 143 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3632, + "bbox": [ + 843, + 392, + 65, + 116 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 586, + "bbox": [ + 49, + 434, + 109, + 21 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2516, + "bbox": [ + 172, + 435, + 109, + 52 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 10829, + "bbox": [ + 29, + 443, + 232, + 78 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 15521, + "bbox": [ + 346, + 416, + 240, + 89 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 166, + "bbox": [ + 887, + 415, + 17, + 14 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 579, + "bbox": [ + 833, + 418, + 27, + 39 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 197, + "bbox": [ + 889, + 429, + 14, + 21 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 438, + "bbox": [ + 900, + 418, + 22, + 33 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 678, + "bbox": [ + 914, + 416, + 40, + 39 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 432, + "bbox": [ + 1026, + 421, + 25, + 29 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2041, + "bbox": [ + 1044, + 417, + 66, + 38 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 3906, + "bbox": [ + 925, + 411, + 109, + 48 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 873, + "bbox": [ + 1122, + 409, + 67, + 48 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 437, + "bbox": [ + 1143, + 412, + 39, + 47 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 6137, + "bbox": [ + 1155, + 403, + 140, + 70 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 6678, + "bbox": [ + 1257, + 398, + 93, + 127 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 32491, + "bbox": [ + 1315, + 374, + 239, + 176 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 20498, + "bbox": [ + 634, + 393, + 171, + 153 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 6050, + "bbox": [ + 1816, + 355, + 87, + 119 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1863, + "bbox": [ + 1718, + 375, + 58, + 61 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 7420, + "bbox": [ + 1587, + 372, + 135, + 145 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 10243, + "bbox": [ + 1658, + 389, + 148, + 126 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 4833, + "bbox": [ + 1934, + 360, + 72, + 123 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 4017, + "bbox": [ + 1882, + 386, + 81, + 89 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000069_000019_gtFine_panoptic.png", + "image_id": "munster_000069_000019", + "segments_info": [ + { + "area": 791823, + "bbox": [ + 6, + 445, + 2037, + 574 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 6773, + "bbox": [ + 382, + 456, + 1359, + 134 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 412674, + "bbox": [ + 6, + 5, + 2037, + 457 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 17856, + "bbox": [ + 386, + 5, + 1482, + 470 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7109, + "bbox": [ + 409, + 247, + 768, + 169 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 13562, + "bbox": [ + 647, + 195, + 1257, + 270 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 202856, + "bbox": [ + 487, + 5, + 878, + 445 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 133936, + "bbox": [ + 241, + 5, + 827, + 334 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 262, + "bbox": [ + 788, + 417, + 9, + 39 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 182, + "bbox": [ + 1370, + 394, + 11, + 26 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 504, + "bbox": [ + 1379, + 392, + 25, + 28 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 546, + "bbox": [ + 511, + 426, + 25, + 37 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 550, + "bbox": [ + 486, + 425, + 20, + 37 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 352, + "bbox": [ + 448, + 423, + 13, + 37 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 448, + "bbox": [ + 465, + 423, + 23, + 39 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 653, + "bbox": [ + 669, + 414, + 20, + 51 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 862, + "bbox": [ + 588, + 416, + 32, + 58 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 791, + "bbox": [ + 607, + 414, + 24, + 59 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1263, + "bbox": [ + 553, + 410, + 36, + 69 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 1108, + "bbox": [ + 720, + 411, + 34, + 63 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 627, + "bbox": [ + 700, + 408, + 24, + 52 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 865, + "bbox": [ + 1080, + 416, + 29, + 50 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 13695, + "bbox": [ + 1469, + 336, + 120, + 243 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 404, + "bbox": [ + 889, + 425, + 40, + 26 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 923, + "bbox": [ + 1045, + 415, + 62, + 40 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1003, + "bbox": [ + 1028, + 422, + 40, + 36 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2960, + "bbox": [ + 931, + 374, + 89, + 44 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1118, + "bbox": [ + 1008, + 417, + 31, + 77 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 8424, + "bbox": [ + 912, + 408, + 115, + 95 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 7637, + "bbox": [ + 795, + 391, + 101, + 94 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1481, + "bbox": [ + 1239, + 419, + 75, + 37 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 17614, + "bbox": [ + 1297, + 418, + 188, + 121 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 38167, + "bbox": [ + 1582, + 394, + 316, + 225 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 68870, + "bbox": [ + 1739, + 385, + 304, + 319 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 82, + "bbox": [ + 548, + 432, + 10, + 18 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 284, + "bbox": [ + 521, + 427, + 29, + 27 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 187, + "bbox": [ + 526, + 429, + 14, + 26 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 303, + "bbox": [ + 505, + 428, + 26, + 28 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 365, + "bbox": [ + 636, + 428, + 36, + 32 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 158488, + "bbox": [ + 6, + 329, + 419, + 467 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 719, + "bbox": [ + 1306, + 414, + 67, + 34 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1041, + "bbox": [ + 536, + 438, + 62, + 40 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 651, + "bbox": [ + 691, + 431, + 34, + 35 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 258, + "bbox": [ + 1091, + 446, + 10, + 34 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 13693, + "bbox": [ + 1482, + 451, + 123, + 211 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000070_000019_gtFine_panoptic.png", + "image_id": "munster_000070_000019", + "segments_info": [ + { + "area": 674942, + "bbox": [ + 6, + 467, + 1839, + 552 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 291425, + "bbox": [ + 6, + 457, + 2037, + 562 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 141935, + "bbox": [ + 6, + 5, + 1924, + 492 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 30942, + "bbox": [ + 14, + 5, + 1963, + 528 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4771, + "bbox": [ + 405, + 239, + 898, + 190 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 6600, + "bbox": [ + 947, + 206, + 410, + 156 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 503092, + "bbox": [ + 51, + 5, + 1992, + 529 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1156, + "bbox": [ + 190, + 497, + 137, + 30 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 134199, + "bbox": [ + 495, + 5, + 1154, + 300 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 94, + "bbox": [ + 64, + 454, + 14, + 8 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 532, + "bbox": [ + 108, + 438, + 30, + 32 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 564, + "bbox": [ + 707, + 419, + 19, + 55 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2708, + "bbox": [ + 722, + 402, + 47, + 103 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 322, + "bbox": [ + 663, + 428, + 13, + 41 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1889, + "bbox": [ + 1145, + 387, + 39, + 92 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 1311, + "bbox": [ + 142, + 440, + 38, + 90 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 9962, + "bbox": [ + 9, + 461, + 157, + 86 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 690, + "bbox": [ + 6, + 459, + 13, + 88 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1600, + "bbox": [ + 1899, + 355, + 49, + 73 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1334, + "bbox": [ + 1916, + 390, + 39, + 43 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 363, + "bbox": [ + 1297, + 406, + 32, + 18 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2677, + "bbox": [ + 1266, + 392, + 166, + 74 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 717, + "bbox": [ + 1323, + 392, + 110, + 66 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2851, + "bbox": [ + 1354, + 379, + 209, + 84 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 6905, + "bbox": [ + 1366, + 386, + 209, + 88 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2322, + "bbox": [ + 1475, + 372, + 166, + 102 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2849, + "bbox": [ + 1492, + 378, + 150, + 111 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 15337, + "bbox": [ + 1535, + 335, + 378, + 163 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 3455, + "bbox": [ + 797, + 398, + 84, + 87 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1964, + "bbox": [ + 985, + 421, + 59, + 82 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 19999, + "bbox": [ + 842, + 408, + 186, + 137 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 6006, + "bbox": [ + 717, + 414, + 113, + 104 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 23050, + "bbox": [ + 908, + 362, + 394, + 114 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 1549, + "bbox": [ + 732, + 464, + 30, + 65 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 779, + "bbox": [ + 390, + 462, + 43, + 23 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 994, + "bbox": [ + 537, + 450, + 44, + 33 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 902, + "bbox": [ + 428, + 458, + 51, + 30 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 846, + "bbox": [ + 346, + 461, + 44, + 30 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1461, + "bbox": [ + 301, + 474, + 59, + 40 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 1349, + "bbox": [ + 259, + 476, + 51, + 37 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 652, + "bbox": [ + 655, + 445, + 26, + 39 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 754, + "bbox": [ + 1157, + 441, + 21, + 56 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 1278, + "bbox": [ + 138, + 477, + 46, + 62 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + }, + { + "area": 2327, + "bbox": [ + 1820, + 420, + 36, + 83 + ], + "category_id": 33, + "id": 33009, + "iscrowd": 0 + }, + { + "area": 2122, + "bbox": [ + 170, + 475, + 58, + 52 + ], + "category_id": 33, + "id": 33010, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000071_000019_gtFine_panoptic.png", + "image_id": "munster_000071_000019", + "segments_info": [ + { + "area": 842804, + "bbox": [ + 6, + 422, + 2037, + 597 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 117682, + "bbox": [ + 6, + 430, + 2037, + 297 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 497935, + "bbox": [ + 6, + 5, + 2037, + 478 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 42660, + "bbox": [ + 67, + 5, + 1832, + 641 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 5658, + "bbox": [ + 41, + 293, + 1310, + 110 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 239541, + "bbox": [ + 442, + 5, + 858, + 407 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 41155, + "bbox": [ + 617, + 5, + 679, + 178 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 469, + "bbox": [ + 874, + 410, + 32, + 23 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 43368, + "bbox": [ + 6, + 383, + 2037, + 137 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 576, + "bbox": [ + 845, + 402, + 25, + 43 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 185, + "bbox": [ + 816, + 404, + 12, + 27 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 481, + "bbox": [ + 959, + 392, + 19, + 40 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 173, + "bbox": [ + 981, + 405, + 11, + 17 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 88, + "bbox": [ + 916, + 403, + 25, + 8 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 515, + "bbox": [ + 893, + 405, + 37, + 23 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 356, + "bbox": [ + 929, + 404, + 23, + 22 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 478, + "bbox": [ + 848, + 408, + 38, + 29 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 580, + "bbox": [ + 826, + 406, + 23, + 30 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 13175, + "bbox": [ + 698, + 394, + 138, + 149 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 51398, + "bbox": [ + 438, + 391, + 308, + 206 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 94, + "bbox": [ + 972, + 401, + 23, + 6 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 408, + "bbox": [ + 974, + 405, + 30, + 33 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 354, + "bbox": [ + 1008, + 404, + 38, + 22 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 746, + "bbox": [ + 1022, + 405, + 43, + 30 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 980, + "bbox": [ + 1047, + 405, + 39, + 51 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2019, + "bbox": [ + 1072, + 402, + 57, + 63 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 485, + "bbox": [ + 1220, + 403, + 40, + 33 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 1219, + "bbox": [ + 1107, + 409, + 35, + 76 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 6385, + "bbox": [ + 1123, + 396, + 108, + 101 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 136, + "bbox": [ + 984, + 418, + 10, + 19 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 529, + "bbox": [ + 1263, + 401, + 22, + 31 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 1783, + "bbox": [ + 1185, + 427, + 57, + 68 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1519, + "bbox": [ + 1519, + 398, + 40, + 65 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1618, + "bbox": [ + 1551, + 393, + 38, + 72 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 2150, + "bbox": [ + 1582, + 390, + 45, + 83 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1908, + "bbox": [ + 1624, + 393, + 42, + 79 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 4312, + "bbox": [ + 1666, + 389, + 72, + 95 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 4381, + "bbox": [ + 1278, + 423, + 62, + 101 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 563, + "bbox": [ + 941, + 412, + 42, + 27 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000072_000019_gtFine_panoptic.png", + "image_id": "munster_000072_000019", + "segments_info": [ + { + "area": 788725, + "bbox": [ + 6, + 433, + 2037, + 586 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 56195, + "bbox": [ + 850, + 427, + 1193, + 470 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 319740, + "bbox": [ + 6, + 5, + 2037, + 434 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 50223, + "bbox": [ + 268, + 5, + 1775, + 665 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 276, + "bbox": [ + 1072, + 354, + 54, + 22 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2521, + "bbox": [ + 1205, + 311, + 101, + 70 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 437202, + "bbox": [ + 312, + 5, + 1696, + 567 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 38736, + "bbox": [ + 1544, + 529, + 482, + 161 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 2313, + "bbox": [ + 991, + 47, + 88, + 181 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 8972, + "bbox": [ + 685, + 411, + 143, + 91 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 6089, + "bbox": [ + 1716, + 378, + 145, + 88 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 105, + "bbox": [ + 799, + 397, + 11, + 13 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 210, + "bbox": [ + 862, + 406, + 14, + 21 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 355, + "bbox": [ + 1534, + 353, + 23, + 20 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1405, + "bbox": [ + 1136, + 393, + 36, + 69 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 333, + "bbox": [ + 976, + 401, + 59, + 8 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 223, + "bbox": [ + 971, + 407, + 51, + 12 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 927, + "bbox": [ + 966, + 410, + 44, + 31 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 423, + "bbox": [ + 1031, + 404, + 39, + 32 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1323, + "bbox": [ + 1009, + 408, + 48, + 35 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2007, + "bbox": [ + 729, + 408, + 123, + 70 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1965, + "bbox": [ + 566, + 403, + 144, + 110 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 8920, + "bbox": [ + 511, + 410, + 191, + 113 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 958, + "bbox": [ + 530, + 422, + 78, + 108 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 16319, + "bbox": [ + 422, + 418, + 205, + 130 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 15413, + "bbox": [ + 220, + 418, + 257, + 158 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 9401, + "bbox": [ + 205, + 427, + 185, + 168 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 51791, + "bbox": [ + 6, + 424, + 321, + 196 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 948, + "bbox": [ + 6, + 518, + 16, + 90 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 22, + "bbox": [ + 1135, + 401, + 6, + 8 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 661, + "bbox": [ + 1157, + 394, + 26, + 50 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 4349, + "bbox": [ + 1065, + 394, + 78, + 74 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 8230, + "bbox": [ + 865, + 403, + 118, + 85 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 1808, + "bbox": [ + 1175, + 380, + 65, + 69 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 4491, + "bbox": [ + 1201, + 381, + 136, + 94 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 3361, + "bbox": [ + 1234, + 393, + 87, + 101 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 4367, + "bbox": [ + 1274, + 384, + 158, + 121 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 2274, + "bbox": [ + 1307, + 397, + 70, + 104 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 7536, + "bbox": [ + 1325, + 385, + 123, + 165 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 70429, + "bbox": [ + 1376, + 369, + 464, + 214 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 681, + "bbox": [ + 1047, + 384, + 35, + 40 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 629, + "bbox": [ + 1141, + 433, + 30, + 41 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000073_000019_gtFine_panoptic.png", + "image_id": "munster_000073_000019", + "segments_info": [ + { + "area": 732289, + "bbox": [ + 6, + 477, + 2037, + 542 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 29590, + "bbox": [ + 6, + 468, + 1663, + 267 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 841124, + "bbox": [ + 6, + 5, + 2037, + 577 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 11341, + "bbox": [ + 159, + 5, + 1041, + 509 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 34594, + "bbox": [ + 732, + 157, + 555, + 286 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1870, + "bbox": [ + 1145, + 427, + 69, + 43 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 5244, + "bbox": [ + 332, + 390, + 66, + 113 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 458, + "bbox": [ + 728, + 405, + 63, + 20 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2031, + "bbox": [ + 658, + 391, + 103, + 38 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 906, + "bbox": [ + 659, + 414, + 65, + 19 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 674, + "bbox": [ + 861, + 417, + 72, + 20 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 6325, + "bbox": [ + 899, + 422, + 141, + 57 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2843, + "bbox": [ + 856, + 423, + 55, + 84 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 5618, + "bbox": [ + 791, + 398, + 88, + 123 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2828, + "bbox": [ + 720, + 425, + 121, + 109 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 5898, + "bbox": [ + 733, + 435, + 89, + 119 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1267, + "bbox": [ + 1096, + 420, + 79, + 49 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2442, + "bbox": [ + 1119, + 416, + 163, + 54 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1419, + "bbox": [ + 1197, + 433, + 47, + 73 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 4447, + "bbox": [ + 1219, + 427, + 100, + 88 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 7173, + "bbox": [ + 1271, + 424, + 155, + 126 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 7575, + "bbox": [ + 1318, + 433, + 113, + 140 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 24277, + "bbox": [ + 570, + 432, + 199, + 149 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 41994, + "bbox": [ + 1376, + 414, + 283, + 201 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 145028, + "bbox": [ + 1633, + 353, + 410, + 485 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 2623, + "bbox": [ + 531, + 441, + 47, + 80 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1758, + "bbox": [ + 463, + 436, + 49, + 83 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1306, + "bbox": [ + 561, + 434, + 47, + 77 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1671, + "bbox": [ + 423, + 438, + 54, + 64 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2793, + "bbox": [ + 1629, + 436, + 62, + 96 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000074_000019_gtFine_panoptic.png", + "image_id": "munster_000074_000019", + "segments_info": [ + { + "area": 653995, + "bbox": [ + 6, + 486, + 2037, + 533 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 52198, + "bbox": [ + 6, + 481, + 1238, + 254 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 562560, + "bbox": [ + 6, + 5, + 2037, + 465 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 41587, + "bbox": [ + 6, + 304, + 382, + 323 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 17814, + "bbox": [ + 209, + 5, + 1705, + 545 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 181237, + "bbox": [ + 6, + 5, + 611, + 513 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4674, + "bbox": [ + 94, + 553, + 155, + 54 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 53088, + "bbox": [ + 457, + 5, + 396, + 239 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3474, + "bbox": [ + 873, + 422, + 93, + 68 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 4812, + "bbox": [ + 756, + 435, + 334, + 63 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 911, + "bbox": [ + 1208, + 384, + 32, + 56 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 344, + "bbox": [ + 1256, + 382, + 23, + 26 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 353, + "bbox": [ + 747, + 448, + 26, + 34 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1413, + "bbox": [ + 808, + 442, + 48, + 46 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1368, + "bbox": [ + 839, + 442, + 45, + 44 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1675, + "bbox": [ + 919, + 438, + 56, + 54 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 769, + "bbox": [ + 949, + 434, + 43, + 58 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2388, + "bbox": [ + 965, + 430, + 69, + 65 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1607, + "bbox": [ + 1005, + 426, + 85, + 67 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 976, + "bbox": [ + 523, + 437, + 46, + 55 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2841, + "bbox": [ + 451, + 427, + 86, + 81 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2485, + "bbox": [ + 387, + 426, + 111, + 45 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 12292, + "bbox": [ + 144, + 396, + 248, + 109 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1173, + "bbox": [ + 657, + 408, + 103, + 117 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 24936, + "bbox": [ + 543, + 410, + 206, + 150 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 11443, + "bbox": [ + 1088, + 379, + 138, + 135 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 15402, + "bbox": [ + 1216, + 402, + 173, + 156 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 40341, + "bbox": [ + 1308, + 403, + 295, + 200 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 103030, + "bbox": [ + 1529, + 375, + 482, + 326 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 46785, + "bbox": [ + 1885, + 459, + 158, + 369 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 4859, + "bbox": [ + 233, + 420, + 91, + 117 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2134, + "bbox": [ + 202, + 476, + 65, + 57 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 6350, + "bbox": [ + 144, + 435, + 87, + 121 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 3155, + "bbox": [ + 1137, + 447, + 86, + 77 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2086, + "bbox": [ + 1183, + 454, + 39, + 69 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000075_000019_gtFine_panoptic.png", + "image_id": "munster_000075_000019", + "segments_info": [ + { + "area": 640783, + "bbox": [ + 6, + 468, + 2037, + 551 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 80953, + "bbox": [ + 6, + 490, + 1116, + 309 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 842864, + "bbox": [ + 6, + 5, + 2037, + 585 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4520, + "bbox": [ + 693, + 5, + 656, + 376 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 48325, + "bbox": [ + 625, + 5, + 353, + 199 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 4153, + "bbox": [ + 1019, + 440, + 82, + 59 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 978, + "bbox": [ + 923, + 419, + 36, + 78 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1174, + "bbox": [ + 885, + 416, + 35, + 80 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1018, + "bbox": [ + 856, + 416, + 27, + 74 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 1360, + "bbox": [ + 820, + 419, + 38, + 83 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 8392, + "bbox": [ + 6, + 462, + 75, + 154 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 40045, + "bbox": [ + 582, + 381, + 234, + 206 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 879, + "bbox": [ + 878, + 436, + 50, + 52 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 338, + "bbox": [ + 948, + 434, + 22, + 43 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2193, + "bbox": [ + 954, + 430, + 57, + 59 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1828, + "bbox": [ + 997, + 427, + 69, + 64 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 6173, + "bbox": [ + 1096, + 422, + 104, + 98 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 7251, + "bbox": [ + 1156, + 424, + 117, + 108 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2276, + "bbox": [ + 1228, + 443, + 38, + 98 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 31741, + "bbox": [ + 1252, + 367, + 265, + 208 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 32588, + "bbox": [ + 1391, + 413, + 268, + 200 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 62713, + "bbox": [ + 1558, + 410, + 410, + 278 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 68054, + "bbox": [ + 1784, + 394, + 259, + 360 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 788, + "bbox": [ + 923, + 447, + 30, + 59 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 768, + "bbox": [ + 881, + 448, + 37, + 61 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 959, + "bbox": [ + 854, + 442, + 32, + 68 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 988, + "bbox": [ + 819, + 447, + 39, + 67 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000076_000019_gtFine_panoptic.png", + "image_id": "munster_000076_000019", + "segments_info": [ + { + "area": 678453, + "bbox": [ + 6, + 466, + 1996, + 553 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 258788, + "bbox": [ + 6, + 456, + 2037, + 563 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 545601, + "bbox": [ + 6, + 5, + 2037, + 529 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 17009, + "bbox": [ + 101, + 5, + 1207, + 516 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2856, + "bbox": [ + 1080, + 295, + 242, + 114 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2699, + "bbox": [ + 856, + 351, + 577, + 98 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 322645, + "bbox": [ + 6, + 5, + 1086, + 560 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 872, + "bbox": [ + 852, + 457, + 158, + 15 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 91121, + "bbox": [ + 627, + 5, + 685, + 285 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 636, + "bbox": [ + 1232, + 413, + 26, + 62 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2560, + "bbox": [ + 1149, + 435, + 74, + 45 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 9108, + "bbox": [ + 1272, + 375, + 205, + 164 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 32320, + "bbox": [ + 1296, + 406, + 230, + 182 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 8004, + "bbox": [ + 1004, + 420, + 116, + 93 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 465, + "bbox": [ + 1235, + 434, + 22, + 44 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1245, + "bbox": [ + 42, + 477, + 68, + 39 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000077_000019_gtFine_panoptic.png", + "image_id": "munster_000077_000019", + "segments_info": [ + { + "area": 906994, + "bbox": [ + 6, + 526, + 2037, + 493 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 102856, + "bbox": [ + 6, + 434, + 2037, + 105 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 669454, + "bbox": [ + 6, + 5, + 2037, + 473 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 30889, + "bbox": [ + 113, + 5, + 1414, + 508 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8570, + "bbox": [ + 6, + 5, + 1596, + 319 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 5406, + "bbox": [ + 580, + 148, + 964, + 288 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 162459, + "bbox": [ + 386, + 5, + 591, + 487 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 7223, + "bbox": [ + 110, + 468, + 376, + 43 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 1645, + "bbox": [ + 455, + 414, + 45, + 63 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 5192, + "bbox": [ + 1243, + 354, + 94, + 133 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 16073, + "bbox": [ + 772, + 350, + 139, + 138 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 7043, + "bbox": [ + 1939, + 391, + 104, + 98 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1063, + "bbox": [ + 6, + 414, + 24, + 61 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1311, + "bbox": [ + 25, + 413, + 27, + 60 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1158, + "bbox": [ + 420, + 409, + 30, + 69 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1862, + "bbox": [ + 48, + 408, + 42, + 65 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 898, + "bbox": [ + 99, + 406, + 34, + 59 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 1592, + "bbox": [ + 172, + 426, + 46, + 69 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 4880, + "bbox": [ + 198, + 405, + 82, + 92 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 1513, + "bbox": [ + 358, + 417, + 50, + 64 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 2829, + "bbox": [ + 320, + 424, + 62, + 67 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + }, + { + "area": 1954, + "bbox": [ + 935, + 396, + 37, + 84 + ], + "category_id": 33, + "id": 33009, + "iscrowd": 0 + }, + { + "area": 6715, + "bbox": [ + 1210, + 412, + 142, + 91 + ], + "category_id": 33, + "id": 33010, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000078_000019_gtFine_panoptic.png", + "image_id": "munster_000078_000019", + "segments_info": [ + { + "area": 782486, + "bbox": [ + 6, + 411, + 2037, + 608 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 141661, + "bbox": [ + 779, + 407, + 1264, + 553 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 527072, + "bbox": [ + 6, + 5, + 2037, + 528 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 27310, + "bbox": [ + 132, + 92, + 1815, + 482 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 21524, + "bbox": [ + 99, + 5, + 1618, + 345 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 10255, + "bbox": [ + 950, + 5, + 948, + 314 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 38461, + "bbox": [ + 385, + 52, + 320, + 362 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 70961, + "bbox": [ + 390, + 5, + 511, + 271 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 447, + "bbox": [ + 869, + 370, + 11, + 54 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1493, + "bbox": [ + 1137, + 338, + 22, + 87 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 837, + "bbox": [ + 845, + 362, + 27, + 65 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1915, + "bbox": [ + 1437, + 341, + 35, + 83 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 11124, + "bbox": [ + 1285, + 304, + 99, + 222 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 16060, + "bbox": [ + 1496, + 268, + 134, + 320 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 68917, + "bbox": [ + 1798, + 216, + 245, + 513 + ], + "category_id": 25, + "id": 25005, + "iscrowd": 0 + }, + { + "area": 6598, + "bbox": [ + 451, + 321, + 73, + 187 + ], + "category_id": 25, + "id": 25006, + "iscrowd": 0 + }, + { + "area": 6731, + "bbox": [ + 553, + 320, + 73, + 197 + ], + "category_id": 25, + "id": 25007, + "iscrowd": 0 + }, + { + "area": 727, + "bbox": [ + 447, + 403, + 25, + 50 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 4704, + "bbox": [ + 507, + 356, + 69, + 104 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2061, + "bbox": [ + 734, + 366, + 46, + 53 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 10750, + "bbox": [ + 618, + 353, + 121, + 117 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 17249, + "bbox": [ + 879, + 367, + 167, + 132 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 6169, + "bbox": [ + 337, + 367, + 92, + 105 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 18810, + "bbox": [ + 162, + 338, + 218, + 222 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 73521, + "bbox": [ + 6, + 345, + 313, + 300 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 482, + "bbox": [ + 854, + 395, + 16, + 40 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3111, + "bbox": [ + 1405, + 373, + 97, + 63 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 4353, + "bbox": [ + 1316, + 416, + 56, + 143 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 6360, + "bbox": [ + 1762, + 390, + 103, + 164 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 17045, + "bbox": [ + 1606, + 377, + 171, + 178 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 451, + "bbox": [ + 1528, + 563, + 30, + 43 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 13464, + "bbox": [ + 1519, + 427, + 123, + 199 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 21065, + "bbox": [ + 1842, + 453, + 201, + 334 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 1500, + "bbox": [ + 1812, + 452, + 72, + 57 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + }, + { + "area": 1483, + "bbox": [ + 553, + 429, + 23, + 85 + ], + "category_id": 33, + "id": 33009, + "iscrowd": 0 + }, + { + "area": 71, + "bbox": [ + 548, + 392, + 28, + 10 + ], + "category_id": 33, + "id": 33010, + "iscrowd": 0 + }, + { + "area": 4797, + "bbox": [ + 1715, + 401, + 89, + 180 + ], + "category_id": 33, + "id": 33011, + "iscrowd": 0 + }, + { + "area": 3125, + "bbox": [ + 471, + 422, + 53, + 106 + ], + "category_id": 33, + "id": 33012, + "iscrowd": 0 + }, + { + "area": 3816, + "bbox": [ + 589, + 414, + 55, + 105 + ], + "category_id": 33, + "id": 33013, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000079_000019_gtFine_panoptic.png", + "image_id": "munster_000079_000019", + "segments_info": [ + { + "area": 690628, + "bbox": [ + 6, + 469, + 2037, + 550 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 209846, + "bbox": [ + 6, + 461, + 2037, + 487 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 779771, + "bbox": [ + 6, + 5, + 2037, + 577 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 22686, + "bbox": [ + 6, + 493, + 472, + 111 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 10124, + "bbox": [ + 125, + 185, + 1066, + 366 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2328, + "bbox": [ + 121, + 321, + 1071, + 96 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 25520, + "bbox": [ + 726, + 250, + 342, + 197 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 96927, + "bbox": [ + 683, + 5, + 478, + 350 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 477, + "bbox": [ + 997, + 428, + 17, + 41 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 511, + "bbox": [ + 614, + 427, + 24, + 42 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 495, + "bbox": [ + 489, + 419, + 17, + 58 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2939, + "bbox": [ + 489, + 420, + 39, + 118 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2406, + "bbox": [ + 423, + 439, + 73, + 99 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1185, + "bbox": [ + 596, + 436, + 27, + 74 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 9273, + "bbox": [ + 1509, + 332, + 96, + 238 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1635, + "bbox": [ + 874, + 429, + 44, + 43 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 115, + "bbox": [ + 726, + 444, + 17, + 12 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 347, + "bbox": [ + 42, + 391, + 18, + 40 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 13082, + "bbox": [ + 6, + 409, + 200, + 98 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1103, + "bbox": [ + 6, + 470, + 50, + 39 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 15404, + "bbox": [ + 159, + 426, + 214, + 115 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2406, + "bbox": [ + 522, + 437, + 46, + 98 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 6056, + "bbox": [ + 1007, + 436, + 96, + 76 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 9342, + "bbox": [ + 611, + 442, + 124, + 109 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 19899, + "bbox": [ + 704, + 427, + 189, + 140 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1070, + "bbox": [ + 577, + 459, + 35, + 52 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 4610, + "bbox": [ + 1601, + 418, + 57, + 124 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1880, + "bbox": [ + 1523, + 422, + 31, + 156 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 5426, + "bbox": [ + 1554, + 442, + 57, + 147 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 15941, + "bbox": [ + 1903, + 401, + 140, + 198 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 610, + "bbox": [ + 1101, + 443, + 33, + 31 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000080_000019_gtFine_panoptic.png", + "image_id": "munster_000080_000019", + "segments_info": [ + { + "area": 714915, + "bbox": [ + 6, + 432, + 2037, + 587 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 69049, + "bbox": [ + 6, + 430, + 1505, + 306 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 327668, + "bbox": [ + 6, + 5, + 1671, + 574 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1176, + "bbox": [ + 1426, + 396, + 78, + 30 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 21080, + "bbox": [ + 681, + 86, + 1068, + 480 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 6637, + "bbox": [ + 687, + 144, + 596, + 268 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 19636, + "bbox": [ + 655, + 118, + 956, + 279 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 293905, + "bbox": [ + 633, + 5, + 1410, + 501 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 12472, + "bbox": [ + 1308, + 547, + 195, + 94 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 143463, + "bbox": [ + 630, + 5, + 850, + 311 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3381, + "bbox": [ + 487, + 399, + 55, + 114 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 7523, + "bbox": [ + 300, + 374, + 85, + 177 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1176, + "bbox": [ + 1366, + 392, + 29, + 79 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 692, + "bbox": [ + 1307, + 394, + 18, + 64 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 493, + "bbox": [ + 1268, + 412, + 26, + 25 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1079, + "bbox": [ + 1145, + 401, + 49, + 52 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 8014, + "bbox": [ + 1005, + 359, + 127, + 142 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 15552, + "bbox": [ + 1024, + 408, + 170, + 128 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 11765, + "bbox": [ + 754, + 418, + 141, + 109 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 32137, + "bbox": [ + 510, + 418, + 248, + 172 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 156015, + "bbox": [ + 1501, + 328, + 542, + 416 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 61794, + "bbox": [ + 1843, + 561, + 200, + 372 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 305, + "bbox": [ + 1290, + 405, + 17, + 25 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 33806, + "bbox": [ + 636, + 333, + 379, + 138 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 204, + "bbox": [ + 1314, + 428, + 7, + 36 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1058, + "bbox": [ + 1332, + 428, + 41, + 45 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 3318, + "bbox": [ + 1400, + 406, + 86, + 149 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 5259, + "bbox": [ + 1445, + 415, + 112, + 178 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 5009, + "bbox": [ + 374, + 427, + 75, + 98 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 5282, + "bbox": [ + 223, + 437, + 78, + 111 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 4861, + "bbox": [ + 6, + 436, + 50, + 148 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000081_000019_gtFine_panoptic.png", + "image_id": "munster_000081_000019", + "segments_info": [ + { + "area": 593776, + "bbox": [ + 6, + 457, + 1973, + 562 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 18383, + "bbox": [ + 6, + 444, + 967, + 402 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 544815, + "bbox": [ + 6, + 5, + 2037, + 470 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3836, + "bbox": [ + 667, + 214, + 588, + 258 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3382, + "bbox": [ + 650, + 284, + 502, + 110 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 125447, + "bbox": [ + 772, + 5, + 474, + 462 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 92, + "bbox": [ + 1057, + 467, + 12, + 13 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 37641, + "bbox": [ + 768, + 5, + 411, + 243 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 323, + "bbox": [ + 1050, + 417, + 39, + 22 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 545, + "bbox": [ + 967, + 409, + 31, + 36 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1000, + "bbox": [ + 1068, + 421, + 41, + 71 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 860, + "bbox": [ + 1087, + 416, + 48, + 87 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1548, + "bbox": [ + 1092, + 425, + 40, + 82 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 4694, + "bbox": [ + 1109, + 401, + 128, + 120 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 8842, + "bbox": [ + 1132, + 415, + 120, + 135 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 4471, + "bbox": [ + 1208, + 396, + 104, + 165 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 33266, + "bbox": [ + 1237, + 384, + 243, + 240 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 237564, + "bbox": [ + 1380, + 323, + 663, + 489 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 50851, + "bbox": [ + 1899, + 531, + 144, + 488 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1192, + "bbox": [ + 902, + 425, + 39, + 56 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1218, + "bbox": [ + 881, + 427, + 37, + 61 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1114, + "bbox": [ + 857, + 423, + 43, + 72 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 2831, + "bbox": [ + 819, + 417, + 64, + 96 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 1078, + "bbox": [ + 800, + 414, + 55, + 97 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 6804, + "bbox": [ + 751, + 407, + 99, + 148 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 1187, + "bbox": [ + 729, + 405, + 75, + 110 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 1222, + "bbox": [ + 712, + 403, + 70, + 97 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 24218, + "bbox": [ + 614, + 394, + 177, + 242 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 268658, + "bbox": [ + 9, + 263, + 676, + 495 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000082_000019_gtFine_panoptic.png", + "image_id": "munster_000082_000019", + "segments_info": [ + { + "area": 559289, + "bbox": [ + 6, + 485, + 2037, + 534 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 2364, + "bbox": [ + 944, + 458, + 257, + 29 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 597384, + "bbox": [ + 6, + 5, + 2037, + 496 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 8297, + "bbox": [ + 312, + 5, + 1344, + 474 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 23911, + "bbox": [ + 268, + 122, + 1406, + 244 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 180637, + "bbox": [ + 661, + 5, + 812, + 368 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 407, + "bbox": [ + 945, + 466, + 256, + 41 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 3473, + "bbox": [ + 899, + 424, + 52, + 98 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 20575, + "bbox": [ + 685, + 365, + 229, + 194 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 12794, + "bbox": [ + 662, + 411, + 177, + 184 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 30190, + "bbox": [ + 532, + 415, + 246, + 234 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 135288, + "bbox": [ + 83, + 372, + 561, + 418 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 126380, + "bbox": [ + 6, + 451, + 355, + 510 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 12967, + "bbox": [ + 1197, + 371, + 191, + 166 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 6229, + "bbox": [ + 1252, + 399, + 161, + 149 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 27234, + "bbox": [ + 1291, + 402, + 236, + 189 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 101328, + "bbox": [ + 1442, + 375, + 476, + 354 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 128710, + "bbox": [ + 1709, + 361, + 334, + 561 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 2342, + "bbox": [ + 1015, + 430, + 75, + 48 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1579, + "bbox": [ + 1162, + 422, + 48, + 63 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000083_000019_gtFine_panoptic.png", + "image_id": "munster_000083_000019", + "segments_info": [ + { + "area": 670856, + "bbox": [ + 6, + 454, + 2037, + 565 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 112905, + "bbox": [ + 70, + 462, + 1973, + 243 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 173038, + "bbox": [ + 6, + 5, + 2006, + 508 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 30575, + "bbox": [ + 1313, + 351, + 730, + 132 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 1862, + "bbox": [ + 34, + 417, + 95, + 44 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 39528, + "bbox": [ + 52, + 5, + 1704, + 613 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 14389, + "bbox": [ + 114, + 211, + 1185, + 119 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 13301, + "bbox": [ + 42, + 85, + 1781, + 332 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 399519, + "bbox": [ + 31, + 5, + 2012, + 599 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 228127, + "bbox": [ + 22, + 5, + 1393, + 323 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2606, + "bbox": [ + 1222, + 374, + 48, + 137 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 3840, + "bbox": [ + 1247, + 374, + 69, + 173 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 518, + "bbox": [ + 1205, + 435, + 33, + 27 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 56, + "bbox": [ + 978, + 441, + 9, + 13 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 5381, + "bbox": [ + 963, + 439, + 104, + 69 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2530, + "bbox": [ + 1089, + 431, + 58, + 54 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 107502, + "bbox": [ + 90, + 428, + 465, + 300 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 57913, + "bbox": [ + 6, + 439, + 139, + 543 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 163, + "bbox": [ + 1224, + 425, + 21, + 11 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 80064, + "bbox": [ + 607, + 270, + 372, + 270 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 644, + "bbox": [ + 1056, + 440, + 33, + 25 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 784, + "bbox": [ + 1214, + 484, + 59, + 87 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 13016, + "bbox": [ + 1163, + 449, + 195, + 131 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000084_000019_gtFine_panoptic.png", + "image_id": "munster_000084_000019", + "segments_info": [ + { + "area": 649806, + "bbox": [ + 6, + 458, + 1983, + 561 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 148279, + "bbox": [ + 6, + 441, + 2037, + 578 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 154792, + "bbox": [ + 79, + 35, + 1964, + 508 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 30171, + "bbox": [ + 218, + 5, + 1358, + 640 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2295, + "bbox": [ + 950, + 270, + 302, + 132 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4731, + "bbox": [ + 241, + 226, + 1208, + 158 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 821425, + "bbox": [ + 6, + 5, + 2037, + 948 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 14063, + "bbox": [ + 1345, + 520, + 268, + 91 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 27737, + "bbox": [ + 1012, + 5, + 388, + 282 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 26345, + "bbox": [ + 77, + 422, + 787, + 100 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 131, + "bbox": [ + 1277, + 398, + 12, + 17 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2235, + "bbox": [ + 657, + 406, + 41, + 89 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 9633, + "bbox": [ + 347, + 369, + 82, + 194 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1747, + "bbox": [ + 729, + 403, + 48, + 81 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 4373, + "bbox": [ + 527, + 383, + 62, + 155 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 14074, + "bbox": [ + 6, + 318, + 75, + 267 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 4783, + "bbox": [ + 1171, + 393, + 114, + 84 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3189, + "bbox": [ + 1136, + 396, + 63, + 95 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 15375, + "bbox": [ + 1017, + 389, + 152, + 129 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 5506, + "bbox": [ + 199, + 430, + 119, + 104 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 5109, + "bbox": [ + 124, + 448, + 103, + 121 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 10515, + "bbox": [ + 44, + 438, + 135, + 141 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 1000, + "bbox": [ + 726, + 437, + 37, + 60 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2356, + "bbox": [ + 535, + 435, + 47, + 120 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 8553, + "bbox": [ + 6, + 504, + 87, + 158 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000085_000019_gtFine_panoptic.png", + "image_id": "munster_000085_000019", + "segments_info": [ + { + "area": 582110, + "bbox": [ + 6, + 493, + 2037, + 526 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 86373, + "bbox": [ + 1158, + 500, + 885, + 374 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 419814, + "bbox": [ + 6, + 5, + 1976, + 537 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 13036, + "bbox": [ + 1879, + 529, + 164, + 117 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 52473, + "bbox": [ + 61, + 91, + 1959, + 668 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 21514, + "bbox": [ + 592, + 5, + 1352, + 384 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 446993, + "bbox": [ + 128, + 5, + 1915, + 595 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1332, + "bbox": [ + 1046, + 5, + 287, + 298 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 14066, + "bbox": [ + 6, + 448, + 1325, + 145 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 269, + "bbox": [ + 1154, + 437, + 18, + 26 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 928, + "bbox": [ + 1087, + 447, + 24, + 51 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1525, + "bbox": [ + 1110, + 426, + 50, + 59 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 5927, + "bbox": [ + 1597, + 401, + 56, + 172 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 7284, + "bbox": [ + 1542, + 389, + 63, + 185 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2408, + "bbox": [ + 1302, + 427, + 52, + 96 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1020, + "bbox": [ + 1134, + 455, + 36, + 47 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2086, + "bbox": [ + 1170, + 426, + 95, + 45 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1146, + "bbox": [ + 1065, + 442, + 41, + 54 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 376, + "bbox": [ + 919, + 446, + 29, + 22 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 12690, + "bbox": [ + 938, + 412, + 137, + 127 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1608, + "bbox": [ + 821, + 446, + 70, + 93 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2104, + "bbox": [ + 640, + 430, + 184, + 24 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 9668, + "bbox": [ + 689, + 446, + 191, + 119 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 21656, + "bbox": [ + 516, + 440, + 260, + 189 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 65731, + "bbox": [ + 131, + 442, + 511, + 214 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 2193, + "bbox": [ + 886, + 478, + 62, + 73 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2953, + "bbox": [ + 1892, + 464, + 59, + 69 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1020, + "bbox": [ + 1352, + 456, + 30, + 58 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 2994, + "bbox": [ + 759, + 498, + 91, + 106 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 3404, + "bbox": [ + 741, + 516, + 72, + 90 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 55019, + "bbox": [ + 6, + 478, + 369, + 277 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000086_000019_gtFine_panoptic.png", + "image_id": "munster_000086_000019", + "segments_info": [ + { + "area": 629125, + "bbox": [ + 64, + 468, + 1979, + 551 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 43973, + "bbox": [ + 109, + 540, + 1552, + 209 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 697945, + "bbox": [ + 6, + 5, + 2037, + 568 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 498, + "bbox": [ + 975, + 444, + 28, + 26 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 5047, + "bbox": [ + 410, + 199, + 864, + 282 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1330, + "bbox": [ + 1112, + 355, + 169, + 72 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 125937, + "bbox": [ + 771, + 5, + 929, + 503 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 7681, + "bbox": [ + 1333, + 583, + 322, + 60 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 43371, + "bbox": [ + 764, + 5, + 542, + 258 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 312, + "bbox": [ + 1429, + 413, + 21, + 20 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 384, + "bbox": [ + 1037, + 436, + 18, + 35 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 199, + "bbox": [ + 1067, + 445, + 14, + 32 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 527, + "bbox": [ + 1073, + 444, + 24, + 38 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 600, + "bbox": [ + 1087, + 436, + 46, + 53 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1052, + "bbox": [ + 1096, + 444, + 33, + 50 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 3732, + "bbox": [ + 1117, + 432, + 70, + 82 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3451, + "bbox": [ + 1164, + 432, + 78, + 95 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3642, + "bbox": [ + 1197, + 435, + 82, + 112 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 7803, + "bbox": [ + 1229, + 432, + 115, + 139 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 25188, + "bbox": [ + 1281, + 430, + 232, + 171 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 174, + "bbox": [ + 974, + 447, + 9, + 33 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1267, + "bbox": [ + 914, + 422, + 63, + 65 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1116, + "bbox": [ + 932, + 438, + 40, + 53 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 887, + "bbox": [ + 915, + 436, + 34, + 70 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1701, + "bbox": [ + 901, + 434, + 34, + 78 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 6638, + "bbox": [ + 782, + 410, + 132, + 127 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 6813, + "bbox": [ + 784, + 433, + 89, + 120 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 7754, + "bbox": [ + 710, + 422, + 107, + 180 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 47819, + "bbox": [ + 6, + 499, + 127, + 520 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 76987, + "bbox": [ + 383, + 415, + 396, + 256 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 168791, + "bbox": [ + 1653, + 358, + 390, + 552 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 106, + "bbox": [ + 1043, + 450, + 4, + 28 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 4041, + "bbox": [ + 360, + 431, + 113, + 164 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 8710, + "bbox": [ + 206, + 426, + 90, + 136 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 3555, + "bbox": [ + 1567, + 454, + 74, + 109 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2659, + "bbox": [ + 1632, + 454, + 44, + 115 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000087_000019_gtFine_panoptic.png", + "image_id": "munster_000087_000019", + "segments_info": [ + { + "area": 648942, + "bbox": [ + 6, + 446, + 2037, + 573 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 53197, + "bbox": [ + 6, + 461, + 1289, + 388 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 684517, + "bbox": [ + 6, + 5, + 2037, + 596 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3569, + "bbox": [ + 777, + 240, + 746, + 193 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2264, + "bbox": [ + 1291, + 321, + 159, + 170 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 122523, + "bbox": [ + 821, + 5, + 713, + 424 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 31401, + "bbox": [ + 976, + 5, + 405, + 276 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 687, + "bbox": [ + 1246, + 426, + 35, + 31 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 3327, + "bbox": [ + 1022, + 427, + 102, + 48 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 279, + "bbox": [ + 1293, + 431, + 32, + 22 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 274, + "bbox": [ + 1274, + 429, + 18, + 27 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 337, + "bbox": [ + 1232, + 429, + 26, + 34 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 261, + "bbox": [ + 1230, + 430, + 19, + 35 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 248, + "bbox": [ + 1224, + 429, + 16, + 40 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 722, + "bbox": [ + 1211, + 427, + 23, + 42 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 142, + "bbox": [ + 1372, + 415, + 21, + 9 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 7843, + "bbox": [ + 1293, + 422, + 111, + 114 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 15990, + "bbox": [ + 1363, + 410, + 157, + 179 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 26071, + "bbox": [ + 1453, + 394, + 215, + 251 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 150734, + "bbox": [ + 1554, + 384, + 489, + 384 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 4138, + "bbox": [ + 1145, + 401, + 69, + 76 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 5825, + "bbox": [ + 944, + 424, + 91, + 94 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 6396, + "bbox": [ + 879, + 420, + 93, + 130 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 19949, + "bbox": [ + 737, + 419, + 187, + 169 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 184514, + "bbox": [ + 223, + 346, + 593, + 420 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 476, + "bbox": [ + 1286, + 419, + 34, + 87 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 355, + "bbox": [ + 1134, + 431, + 15, + 32 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000088_000019_gtFine_panoptic.png", + "image_id": "munster_000088_000019", + "segments_info": [ + { + "area": 663444, + "bbox": [ + 6, + 479, + 2037, + 540 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 24202, + "bbox": [ + 6, + 494, + 1410, + 278 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 726320, + "bbox": [ + 6, + 5, + 1976, + 605 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 6324, + "bbox": [ + 573, + 165, + 730, + 331 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3311, + "bbox": [ + 758, + 354, + 551, + 73 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 157084, + "bbox": [ + 977, + 5, + 1066, + 675 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 57734, + "bbox": [ + 1653, + 657, + 390, + 227 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 27232, + "bbox": [ + 723, + 5, + 605, + 173 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 421, + "bbox": [ + 1261, + 431, + 30, + 41 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 384, + "bbox": [ + 1330, + 458, + 16, + 46 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1471, + "bbox": [ + 1371, + 420, + 35, + 98 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 229, + "bbox": [ + 1700, + 397, + 27, + 11 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1146, + "bbox": [ + 1103, + 450, + 53, + 37 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 503, + "bbox": [ + 1289, + 450, + 31, + 31 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2696, + "bbox": [ + 1016, + 454, + 96, + 37 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 941, + "bbox": [ + 1135, + 446, + 30, + 60 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 3567, + "bbox": [ + 1155, + 413, + 105, + 97 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 8123, + "bbox": [ + 1175, + 440, + 120, + 88 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 12361, + "bbox": [ + 1405, + 426, + 130, + 208 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 114783, + "bbox": [ + 1479, + 404, + 489, + 309 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1416, + "bbox": [ + 904, + 444, + 45, + 62 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 703, + "bbox": [ + 884, + 448, + 44, + 61 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 641, + "bbox": [ + 885, + 451, + 31, + 64 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 3306, + "bbox": [ + 834, + 444, + 73, + 84 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 3355, + "bbox": [ + 806, + 446, + 61, + 95 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1355, + "bbox": [ + 789, + 437, + 43, + 111 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 12074, + "bbox": [ + 683, + 425, + 137, + 152 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 21992, + "bbox": [ + 549, + 427, + 189, + 189 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 107032, + "bbox": [ + 132, + 422, + 489, + 297 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 878, + "bbox": [ + 979, + 459, + 37, + 32 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000089_000019_gtFine_panoptic.png", + "image_id": "munster_000089_000019", + "segments_info": [ + { + "area": 800985, + "bbox": [ + 6, + 462, + 2037, + 557 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 124661, + "bbox": [ + 206, + 452, + 1837, + 333 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 385692, + "bbox": [ + 6, + 5, + 2037, + 527 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 14436, + "bbox": [ + 263, + 5, + 1279, + 564 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 157, + "bbox": [ + 870, + 380, + 11, + 17 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 6504, + "bbox": [ + 768, + 241, + 626, + 172 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 461936, + "bbox": [ + 130, + 5, + 1459, + 526 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 6822, + "bbox": [ + 219, + 462, + 1008, + 144 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 28149, + "bbox": [ + 716, + 5, + 261, + 331 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 379, + "bbox": [ + 827, + 435, + 96, + 30 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 1134, + "bbox": [ + 1508, + 426, + 56, + 52 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1940, + "bbox": [ + 341, + 429, + 39, + 88 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 419, + "bbox": [ + 1182, + 418, + 13, + 44 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 588, + "bbox": [ + 1197, + 416, + 21, + 47 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2412, + "bbox": [ + 1392, + 393, + 34, + 106 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 4964, + "bbox": [ + 1616, + 360, + 65, + 138 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 8338, + "bbox": [ + 1790, + 302, + 93, + 189 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 679, + "bbox": [ + 837, + 440, + 29, + 30 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1889, + "bbox": [ + 862, + 429, + 52, + 48 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1652, + "bbox": [ + 566, + 395, + 99, + 36 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1445, + "bbox": [ + 785, + 437, + 48, + 48 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 569, + "bbox": [ + 780, + 440, + 20, + 51 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2483, + "bbox": [ + 706, + 422, + 82, + 74 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1619, + "bbox": [ + 708, + 433, + 55, + 69 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1177, + "bbox": [ + 709, + 439, + 28, + 68 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 7046, + "bbox": [ + 610, + 418, + 108, + 96 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 9005, + "bbox": [ + 516, + 429, + 132, + 109 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 21014, + "bbox": [ + 361, + 439, + 202, + 137 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 32460, + "bbox": [ + 6, + 480, + 216, + 191 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 284, + "bbox": [ + 1020, + 422, + 25, + 19 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 110, + "bbox": [ + 1030, + 433, + 8, + 38 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 394, + "bbox": [ + 1033, + 422, + 54, + 55 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 319, + "bbox": [ + 1035, + 428, + 50, + 47 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 2953, + "bbox": [ + 1040, + 431, + 67, + 53 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 10807, + "bbox": [ + 906, + 408, + 133, + 110 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 3652, + "bbox": [ + 249, + 467, + 77, + 105 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 643, + "bbox": [ + 1258, + 433, + 25, + 31 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1238, + "bbox": [ + 1792, + 417, + 34, + 78 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 3196, + "bbox": [ + 1878, + 403, + 51, + 105 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 6607, + "bbox": [ + 1976, + 380, + 67, + 143 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 6140, + "bbox": [ + 1807, + 420, + 81, + 125 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000090_000019_gtFine_panoptic.png", + "image_id": "munster_000090_000019", + "segments_info": [ + { + "area": 835112, + "bbox": [ + 6, + 451, + 2037, + 568 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 24611, + "bbox": [ + 228, + 461, + 1815, + 112 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 146371, + "bbox": [ + 6, + 5, + 1471, + 505 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 18657, + "bbox": [ + 319, + 5, + 1101, + 558 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4519, + "bbox": [ + 465, + 240, + 825, + 182 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4259, + "bbox": [ + 1109, + 320, + 295, + 79 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 752234, + "bbox": [ + 41, + 5, + 2002, + 595 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 71065, + "bbox": [ + 240, + 448, + 1803, + 258 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 8226, + "bbox": [ + 715, + 22, + 185, + 252 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 75, + "bbox": [ + 944, + 423, + 10, + 9 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 200, + "bbox": [ + 973, + 419, + 15, + 20 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 814, + "bbox": [ + 1360, + 401, + 23, + 54 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 662, + "bbox": [ + 873, + 428, + 23, + 54 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 939, + "bbox": [ + 888, + 419, + 29, + 61 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1152, + "bbox": [ + 302, + 414, + 45, + 81 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1896, + "bbox": [ + 271, + 426, + 36, + 87 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 2922, + "bbox": [ + 711, + 430, + 66, + 102 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1653, + "bbox": [ + 401, + 434, + 36, + 64 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 943, + "bbox": [ + 440, + 411, + 31, + 65 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 669, + "bbox": [ + 783, + 431, + 43, + 25 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 141, + "bbox": [ + 824, + 428, + 25, + 27 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 116, + "bbox": [ + 887, + 432, + 10, + 29 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 137, + "bbox": [ + 910, + 428, + 26, + 11 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 179, + "bbox": [ + 911, + 432, + 20, + 31 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 665, + "bbox": [ + 918, + 430, + 42, + 25 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1576, + "bbox": [ + 942, + 429, + 64, + 39 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2525, + "bbox": [ + 1345, + 408, + 115, + 50 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 14845, + "bbox": [ + 1057, + 407, + 153, + 125 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1760, + "bbox": [ + 676, + 427, + 50, + 46 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 6785, + "bbox": [ + 517, + 405, + 164, + 73 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 48287, + "bbox": [ + 6, + 438, + 239, + 248 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1225, + "bbox": [ + 829, + 431, + 44, + 34 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 8818, + "bbox": [ + 997, + 377, + 121, + 121 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 786, + "bbox": [ + 723, + 417, + 55, + 41 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 2881, + "bbox": [ + 284, + 450, + 69, + 111 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1215, + "bbox": [ + 438, + 439, + 28, + 64 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 691, + "bbox": [ + 382, + 445, + 24, + 51 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 471, + "bbox": [ + 229, + 513, + 19, + 47 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000091_000019_gtFine_panoptic.png", + "image_id": "munster_000091_000019", + "segments_info": [ + { + "area": 945298, + "bbox": [ + 6, + 448, + 2037, + 571 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 16576, + "bbox": [ + 6, + 445, + 2037, + 85 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 325861, + "bbox": [ + 6, + 5, + 2037, + 485 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 14147, + "bbox": [ + 384, + 5, + 1577, + 510 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8301, + "bbox": [ + 404, + 5, + 1612, + 420 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 252, + "bbox": [ + 842, + 397, + 32, + 17 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 325616, + "bbox": [ + 426, + 5, + 1267, + 449 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 507, + "bbox": [ + 888, + 446, + 75, + 21 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 20485, + "bbox": [ + 430, + 5, + 744, + 303 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 906, + "bbox": [ + 420, + 433, + 44, + 35 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 396, + "bbox": [ + 1987, + 384, + 26, + 101 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1065, + "bbox": [ + 2026, + 378, + 17, + 113 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3275, + "bbox": [ + 1983, + 389, + 58, + 103 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 506, + "bbox": [ + 536, + 419, + 20, + 38 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1717, + "bbox": [ + 760, + 411, + 38, + 89 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 391, + "bbox": [ + 521, + 414, + 15, + 42 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1127, + "bbox": [ + 743, + 397, + 29, + 94 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 298, + "bbox": [ + 694, + 431, + 22, + 17 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 169, + "bbox": [ + 786, + 430, + 14, + 22 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 755, + "bbox": [ + 797, + 430, + 39, + 25 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1051, + "bbox": [ + 930, + 427, + 41, + 41 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 476, + "bbox": [ + 959, + 420, + 21, + 49 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 252, + "bbox": [ + 682, + 425, + 20, + 51 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 417, + "bbox": [ + 683, + 429, + 15, + 56 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 68038, + "bbox": [ + 6, + 319, + 411, + 216 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 445, + "bbox": [ + 975, + 495, + 170, + 15 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 42900, + "bbox": [ + 1317, + 410, + 421, + 140 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 8261, + "bbox": [ + 583, + 401, + 109, + 96 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1582, + "bbox": [ + 714, + 405, + 77, + 47 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 169705, + "bbox": [ + 970, + 282, + 976, + 239 + ], + "category_id": 28, + "id": 28001, + "iscrowd": 0 + }, + { + "area": 615, + "bbox": [ + 383, + 431, + 53, + 43 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 638, + "bbox": [ + 539, + 441, + 34, + 32 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 625, + "bbox": [ + 563, + 446, + 28, + 28 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 171, + "bbox": [ + 518, + 433, + 18, + 31 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 585, + "bbox": [ + 741, + 433, + 27, + 59 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000092_000019_gtFine_panoptic.png", + "image_id": "munster_000092_000019", + "segments_info": [ + { + "area": 620209, + "bbox": [ + 6, + 458, + 1734, + 561 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 34044, + "bbox": [ + 6, + 458, + 2037, + 187 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 409229, + "bbox": [ + 6, + 5, + 2037, + 455 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1027, + "bbox": [ + 1072, + 420, + 48, + 38 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 16755, + "bbox": [ + 512, + 175, + 1029, + 446 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 676, + "bbox": [ + 755, + 356, + 133, + 70 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1095, + "bbox": [ + 590, + 356, + 560, + 52 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 388047, + "bbox": [ + 473, + 5, + 1110, + 492 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 19588, + "bbox": [ + 917, + 456, + 599, + 201 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 9808, + "bbox": [ + 503, + 24, + 641, + 299 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1637, + "bbox": [ + 1498, + 356, + 94, + 106 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 933, + "bbox": [ + 513, + 438, + 37, + 70 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1131, + "bbox": [ + 463, + 439, + 33, + 79 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2319, + "bbox": [ + 405, + 422, + 52, + 99 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 1471, + "bbox": [ + 1106, + 415, + 65, + 68 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1837, + "bbox": [ + 1121, + 421, + 49, + 71 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2937, + "bbox": [ + 1149, + 415, + 64, + 80 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3170, + "bbox": [ + 1436, + 396, + 83, + 85 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 860, + "bbox": [ + 1502, + 381, + 101, + 88 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1925, + "bbox": [ + 1629, + 342, + 166, + 30 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 6680, + "bbox": [ + 1960, + 347, + 83, + 184 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 5566, + "bbox": [ + 1222, + 408, + 139, + 125 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 23050, + "bbox": [ + 1263, + 410, + 221, + 152 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 157881, + "bbox": [ + 1508, + 351, + 535, + 387 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 509, + "bbox": [ + 884, + 434, + 27, + 29 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 451, + "bbox": [ + 900, + 434, + 42, + 31 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 687, + "bbox": [ + 914, + 437, + 36, + 24 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 709, + "bbox": [ + 948, + 428, + 33, + 48 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 12953, + "bbox": [ + 952, + 418, + 146, + 118 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 837, + "bbox": [ + 814, + 436, + 39, + 37 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 3550, + "bbox": [ + 761, + 436, + 71, + 60 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 3879, + "bbox": [ + 564, + 434, + 82, + 63 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 10756, + "bbox": [ + 641, + 415, + 129, + 107 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 3146, + "bbox": [ + 481, + 423, + 79, + 87 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 6504, + "bbox": [ + 351, + 422, + 150, + 98 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 21856, + "bbox": [ + 124, + 417, + 210, + 132 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 17791, + "bbox": [ + 6, + 427, + 148, + 147 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 855, + "bbox": [ + 513, + 467, + 37, + 55 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1200, + "bbox": [ + 458, + 472, + 37, + 54 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1915, + "bbox": [ + 400, + 463, + 45, + 74 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000093_000019_gtFine_panoptic.png", + "image_id": "munster_000093_000019", + "segments_info": [ + { + "area": 727444, + "bbox": [ + 6, + 460, + 2037, + 559 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 9226, + "bbox": [ + 156, + 526, + 145, + 94 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 138395, + "bbox": [ + 6, + 5, + 2037, + 450 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 12165, + "bbox": [ + 254, + 271, + 1667, + 325 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 142, + "bbox": [ + 777, + 380, + 10, + 18 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 841, + "bbox": [ + 1115, + 364, + 134, + 46 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 734890, + "bbox": [ + 49, + 5, + 1994, + 561 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 38608, + "bbox": [ + 191, + 459, + 1852, + 393 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 7455, + "bbox": [ + 108, + 5, + 1935, + 184 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 175, + "bbox": [ + 800, + 425, + 17, + 14 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2047, + "bbox": [ + 766, + 438, + 65, + 44 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 725, + "bbox": [ + 1030, + 436, + 34, + 28 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1267, + "bbox": [ + 988, + 435, + 49, + 30 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 675, + "bbox": [ + 921, + 423, + 63, + 23 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2264, + "bbox": [ + 932, + 434, + 60, + 47 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 9227, + "bbox": [ + 817, + 421, + 121, + 97 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 6216, + "bbox": [ + 646, + 432, + 96, + 87 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 73585, + "bbox": [ + 284, + 417, + 398, + 255 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 230, + "bbox": [ + 1139, + 429, + 29, + 24 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 505, + "bbox": [ + 1147, + 428, + 28, + 43 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1809, + "bbox": [ + 1162, + 427, + 52, + 42 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 4584, + "bbox": [ + 1224, + 420, + 93, + 76 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2569, + "bbox": [ + 1484, + 403, + 68, + 63 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 3248, + "bbox": [ + 1320, + 394, + 144, + 127 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 20252, + "bbox": [ + 1322, + 413, + 192, + 145 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 96141, + "bbox": [ + 1693, + 381, + 350, + 339 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 5201, + "bbox": [ + 6, + 300, + 43, + 159 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 26471, + "bbox": [ + 6, + 457, + 154, + 202 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 4524, + "bbox": [ + 1066, + 428, + 82, + 67 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000094_000019_gtFine_panoptic.png", + "image_id": "munster_000094_000019", + "segments_info": [ + { + "area": 789526, + "bbox": [ + 6, + 453, + 2037, + 566 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 20053, + "bbox": [ + 6, + 458, + 1963, + 172 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 226286, + "bbox": [ + 6, + 5, + 2037, + 495 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 351, + "bbox": [ + 1065, + 445, + 14, + 28 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 744, + "bbox": [ + 1199, + 434, + 331, + 32 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 41060, + "bbox": [ + 6, + 5, + 1906, + 663 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 15142, + "bbox": [ + 80, + 97, + 1534, + 327 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 20985, + "bbox": [ + 919, + 243, + 985, + 228 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 593987, + "bbox": [ + 6, + 5, + 2037, + 583 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 50086, + "bbox": [ + 50, + 462, + 1903, + 189 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 22359, + "bbox": [ + 124, + 5, + 1321, + 319 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 161, + "bbox": [ + 1428, + 440, + 8, + 24 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 198, + "bbox": [ + 1435, + 438, + 10, + 27 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 115, + "bbox": [ + 1460, + 438, + 7, + 28 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 198, + "bbox": [ + 1447, + 439, + 8, + 26 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 62, + "bbox": [ + 1587, + 426, + 9, + 9 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1670, + "bbox": [ + 1488, + 417, + 28, + 87 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 311, + "bbox": [ + 1462, + 433, + 18, + 36 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 3956, + "bbox": [ + 921, + 388, + 76, + 157 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 242, + "bbox": [ + 1255, + 441, + 19, + 15 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 221, + "bbox": [ + 1272, + 442, + 18, + 14 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 313, + "bbox": [ + 1238, + 444, + 18, + 21 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 392, + "bbox": [ + 1178, + 440, + 20, + 26 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 972, + "bbox": [ + 1142, + 439, + 39, + 36 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2215, + "bbox": [ + 1092, + 433, + 60, + 52 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3561, + "bbox": [ + 980, + 422, + 61, + 85 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 9705, + "bbox": [ + 620, + 382, + 242, + 92 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 7945, + "bbox": [ + 807, + 422, + 120, + 102 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 28117, + "bbox": [ + 532, + 429, + 250, + 157 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 262, + "bbox": [ + 1288, + 441, + 20, + 18 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 200, + "bbox": [ + 1325, + 439, + 15, + 17 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 334, + "bbox": [ + 1337, + 434, + 33, + 34 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 327, + "bbox": [ + 1342, + 441, + 24, + 30 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 370, + "bbox": [ + 1509, + 433, + 33, + 61 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 181, + "bbox": [ + 1611, + 440, + 17, + 24 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 5214, + "bbox": [ + 1515, + 432, + 101, + 72 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 1932, + "bbox": [ + 1700, + 423, + 100, + 48 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 2315, + "bbox": [ + 1753, + 424, + 163, + 56 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 5404, + "bbox": [ + 1897, + 423, + 123, + 63 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 12516, + "bbox": [ + 1946, + 412, + 97, + 197 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 10359, + "bbox": [ + 1612, + 431, + 140, + 102 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 297, + "bbox": [ + 1354, + 439, + 42, + 38 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 1903, + "bbox": [ + 1362, + 441, + 55, + 43 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 8958, + "bbox": [ + 897, + 436, + 95, + 160 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 455, + "bbox": [ + 446, + 430, + 47, + 37 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2233, + "bbox": [ + 130, + 431, + 89, + 45 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 2090, + "bbox": [ + 486, + 428, + 79, + 48 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 2842, + "bbox": [ + 215, + 431, + 94, + 45 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1726, + "bbox": [ + 420, + 431, + 61, + 43 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 144, + "bbox": [ + 1466, + 450, + 10, + 22 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000095_000019_gtFine_panoptic.png", + "image_id": "munster_000095_000019", + "segments_info": [ + { + "area": 544527, + "bbox": [ + 6, + 439, + 1918, + 580 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 286766, + "bbox": [ + 6, + 437, + 2037, + 582 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 511886, + "bbox": [ + 6, + 5, + 2037, + 458 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 39290, + "bbox": [ + 1179, + 260, + 807, + 225 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 10845, + "bbox": [ + 179, + 31, + 1582, + 537 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9096, + "bbox": [ + 1059, + 175, + 762, + 318 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 243457, + "bbox": [ + 6, + 5, + 2037, + 582 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 63130, + "bbox": [ + 432, + 5, + 1023, + 143 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1357, + "bbox": [ + 808, + 394, + 37, + 82 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 12380, + "bbox": [ + 1666, + 297, + 102, + 256 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 403, + "bbox": [ + 1135, + 405, + 20, + 33 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1194, + "bbox": [ + 1233, + 388, + 26, + 66 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 16089, + "bbox": [ + 1739, + 357, + 248, + 79 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 357, + "bbox": [ + 1055, + 408, + 18, + 42 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 421, + "bbox": [ + 1065, + 407, + 23, + 48 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1963, + "bbox": [ + 1073, + 405, + 64, + 47 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2909, + "bbox": [ + 954, + 401, + 83, + 45 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 340, + "bbox": [ + 858, + 411, + 27, + 34 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1639, + "bbox": [ + 805, + 409, + 72, + 54 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1513, + "bbox": [ + 201, + 450, + 33, + 61 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 487, + "bbox": [ + 778, + 407, + 35, + 41 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 25422, + "bbox": [ + 641, + 404, + 197, + 206 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 156178, + "bbox": [ + 165, + 397, + 552, + 361 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 650, + "bbox": [ + 810, + 431, + 30, + 65 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 6041, + "bbox": [ + 1646, + 387, + 119, + 168 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000096_000019_gtFine_panoptic.png", + "image_id": "munster_000096_000019", + "segments_info": [ + { + "area": 602771, + "bbox": [ + 6, + 445, + 2037, + 574 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 161361, + "bbox": [ + 6, + 457, + 1164, + 489 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 674640, + "bbox": [ + 6, + 5, + 2037, + 603 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 31267, + "bbox": [ + 6, + 5, + 1161, + 799 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1054, + "bbox": [ + 875, + 325, + 274, + 76 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 161308, + "bbox": [ + 591, + 5, + 1097, + 551 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 164, + "bbox": [ + 1119, + 452, + 20, + 11 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 60526, + "bbox": [ + 872, + 5, + 385, + 314 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 9341, + "bbox": [ + 736, + 410, + 212, + 79 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1037, + "bbox": [ + 835, + 402, + 18, + 78 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 444, + "bbox": [ + 1071, + 406, + 21, + 48 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 661, + "bbox": [ + 1050, + 409, + 27, + 56 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 145, + "bbox": [ + 1022, + 422, + 14, + 29 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 115, + "bbox": [ + 985, + 416, + 41, + 18 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4397, + "bbox": [ + 948, + 419, + 87, + 65 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 136, + "bbox": [ + 1089, + 426, + 11, + 27 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 396, + "bbox": [ + 1094, + 425, + 21, + 31 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 244, + "bbox": [ + 1113, + 422, + 39, + 11 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 789, + "bbox": [ + 1105, + 429, + 42, + 32 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 909, + "bbox": [ + 1138, + 425, + 35, + 51 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 672, + "bbox": [ + 1154, + 426, + 33, + 54 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1431, + "bbox": [ + 1164, + 421, + 54, + 81 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 4730, + "bbox": [ + 1182, + 421, + 80, + 95 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1159, + "bbox": [ + 1234, + 393, + 76, + 137 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 21638, + "bbox": [ + 1287, + 412, + 219, + 189 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 57814, + "bbox": [ + 1404, + 406, + 382, + 273 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 169738, + "bbox": [ + 1614, + 360, + 429, + 546 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 610, + "bbox": [ + 1048, + 431, + 25, + 46 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 266, + "bbox": [ + 1075, + 429, + 13, + 37 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1833, + "bbox": [ + 705, + 412, + 39, + 86 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1872, + "bbox": [ + 679, + 413, + 38, + 89 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1686, + "bbox": [ + 664, + 404, + 37, + 101 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 6136, + "bbox": [ + 444, + 402, + 96, + 140 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000097_000019_gtFine_panoptic.png", + "image_id": "munster_000097_000019", + "segments_info": [ + { + "area": 634300, + "bbox": [ + 6, + 453, + 2037, + 566 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 144774, + "bbox": [ + 6, + 487, + 1816, + 318 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 565268, + "bbox": [ + 6, + 5, + 2037, + 544 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19624, + "bbox": [ + 249, + 112, + 1267, + 489 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8662, + "bbox": [ + 200, + 163, + 1180, + 249 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 249961, + "bbox": [ + 6, + 5, + 1644, + 587 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 17364, + "bbox": [ + 248, + 489, + 619, + 130 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 32499, + "bbox": [ + 978, + 5, + 276, + 297 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 8325, + "bbox": [ + 851, + 335, + 91, + 213 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 9552, + "bbox": [ + 1010, + 333, + 80, + 243 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 208, + "bbox": [ + 997, + 425, + 19, + 35 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1081, + "bbox": [ + 956, + 414, + 52, + 57 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 467, + "bbox": [ + 972, + 425, + 19, + 48 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 394, + "bbox": [ + 960, + 421, + 22, + 58 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 741, + "bbox": [ + 916, + 414, + 59, + 71 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2349, + "bbox": [ + 917, + 421, + 50, + 70 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 4674, + "bbox": [ + 785, + 359, + 144, + 137 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 60536, + "bbox": [ + 17, + 381, + 638, + 193 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 195, + "bbox": [ + 1078, + 423, + 18, + 37 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 403, + "bbox": [ + 1086, + 421, + 40, + 37 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 414, + "bbox": [ + 1094, + 427, + 30, + 35 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 521, + "bbox": [ + 1101, + 432, + 25, + 40 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 427, + "bbox": [ + 1114, + 423, + 26, + 53 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1705, + "bbox": [ + 1124, + 417, + 63, + 68 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 2267, + "bbox": [ + 1145, + 423, + 51, + 79 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 2780, + "bbox": [ + 1175, + 395, + 134, + 119 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 16358, + "bbox": [ + 1185, + 411, + 172, + 129 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 118969, + "bbox": [ + 1766, + 298, + 277, + 611 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 10883, + "bbox": [ + 1724, + 409, + 160, + 145 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 4577, + "bbox": [ + 1562, + 430, + 52, + 118 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 4005, + "bbox": [ + 1510, + 430, + 60, + 113 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1300, + "bbox": [ + 736, + 431, + 31, + 74 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2137, + "bbox": [ + 757, + 424, + 37, + 94 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 1353, + "bbox": [ + 802, + 443, + 32, + 76 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 1661, + "bbox": [ + 815, + 426, + 45, + 93 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 5796, + "bbox": [ + 862, + 422, + 73, + 167 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 3331, + "bbox": [ + 1020, + 425, + 67, + 177 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + }, + { + "area": 29386, + "bbox": [ + 196, + 386, + 256, + 214 + ], + "category_id": 33, + "id": 33009, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000098_000019_gtFine_panoptic.png", + "image_id": "munster_000098_000019", + "segments_info": [ + { + "area": 520608, + "bbox": [ + 114, + 433, + 1929, + 586 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 9670, + "bbox": [ + 433, + 448, + 664, + 187 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 601600, + "bbox": [ + 6, + 5, + 2037, + 544 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 12013, + "bbox": [ + 463, + 5, + 834, + 587 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4506, + "bbox": [ + 1107, + 284, + 203, + 264 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 121417, + "bbox": [ + 935, + 5, + 460, + 446 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1301, + "bbox": [ + 1142, + 488, + 61, + 44 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 22986, + "bbox": [ + 828, + 5, + 178, + 267 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 129, + "bbox": [ + 837, + 405, + 13, + 16 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 2664, + "bbox": [ + 971, + 399, + 38, + 100 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 565, + "bbox": [ + 1015, + 404, + 16, + 54 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 157, + "bbox": [ + 1054, + 420, + 10, + 24 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 193, + "bbox": [ + 1004, + 416, + 12, + 27 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 67, + "bbox": [ + 961, + 418, + 14, + 11 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 422, + "bbox": [ + 952, + 420, + 26, + 54 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 871, + "bbox": [ + 934, + 420, + 37, + 58 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 563, + "bbox": [ + 912, + 419, + 49, + 74 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1820, + "bbox": [ + 894, + 420, + 60, + 83 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2692, + "bbox": [ + 866, + 420, + 66, + 97 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 5426, + "bbox": [ + 815, + 420, + 90, + 120 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1533, + "bbox": [ + 818, + 431, + 44, + 127 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 46644, + "bbox": [ + 585, + 393, + 265, + 225 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 243870, + "bbox": [ + 6, + 353, + 518, + 666 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 749, + "bbox": [ + 1062, + 401, + 34, + 47 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 201, + "bbox": [ + 1067, + 421, + 18, + 28 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 261, + "bbox": [ + 1075, + 420, + 17, + 38 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 481, + "bbox": [ + 1083, + 420, + 19, + 44 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 1226, + "bbox": [ + 1093, + 409, + 67, + 71 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 2145, + "bbox": [ + 1105, + 415, + 53, + 88 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 5443, + "bbox": [ + 1128, + 412, + 110, + 102 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 18085, + "bbox": [ + 1228, + 393, + 168, + 208 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 50977, + "bbox": [ + 1324, + 352, + 274, + 326 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 290602, + "bbox": [ + 1496, + 198, + 547, + 695 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 7317, + "bbox": [ + 346, + 423, + 113, + 147 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1849, + "bbox": [ + 1192, + 418, + 80, + 121 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 265, + "bbox": [ + 1013, + 425, + 20, + 41 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000099_000019_gtFine_panoptic.png", + "image_id": "munster_000099_000019", + "segments_info": [ + { + "area": 567565, + "bbox": [ + 6, + 450, + 2037, + 569 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 14337, + "bbox": [ + 568, + 486, + 1036, + 130 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 602432, + "bbox": [ + 6, + 5, + 2037, + 496 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 7520, + "bbox": [ + 576, + 31, + 630, + 518 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 657, + "bbox": [ + 1157, + 337, + 93, + 57 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 182339, + "bbox": [ + 714, + 5, + 607, + 485 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2080, + "bbox": [ + 1246, + 5, + 79, + 51 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 7289, + "bbox": [ + 541, + 418, + 185, + 109 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 5743, + "bbox": [ + 613, + 385, + 63, + 155 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 378, + "bbox": [ + 1027, + 435, + 21, + 24 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 599, + "bbox": [ + 993, + 416, + 36, + 33 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 237, + "bbox": [ + 1013, + 436, + 18, + 32 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 339, + "bbox": [ + 1000, + 436, + 24, + 34 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 583, + "bbox": [ + 981, + 427, + 33, + 56 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1511, + "bbox": [ + 947, + 422, + 54, + 64 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 162, + "bbox": [ + 1074, + 426, + 20, + 37 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 381, + "bbox": [ + 1078, + 433, + 22, + 32 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 336, + "bbox": [ + 1107, + 430, + 18, + 46 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 3231, + "bbox": [ + 1115, + 422, + 70, + 60 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2141, + "bbox": [ + 931, + 419, + 51, + 91 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 5546, + "bbox": [ + 820, + 401, + 134, + 142 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 29659, + "bbox": [ + 709, + 401, + 221, + 175 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 3386, + "bbox": [ + 1189, + 415, + 45, + 113 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 22438, + "bbox": [ + 1209, + 298, + 196, + 255 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 38558, + "bbox": [ + 1268, + 402, + 279, + 186 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 271599, + "bbox": [ + 6, + 365, + 625, + 561 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 208647, + "bbox": [ + 1533, + 348, + 510, + 564 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000100_000019_gtFine_panoptic.png", + "image_id": "munster_000100_000019", + "segments_info": [ + { + "area": 837656, + "bbox": [ + 6, + 446, + 2037, + 573 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 90276, + "bbox": [ + 6, + 410, + 2037, + 215 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 12337, + "bbox": [ + 569, + 203, + 461, + 155 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 51139, + "bbox": [ + 839, + 426, + 1204, + 130 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 264, + "bbox": [ + 716, + 224, + 8, + 83 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 839959, + "bbox": [ + 6, + 5, + 2037, + 498 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1285, + "bbox": [ + 920, + 338, + 90, + 20 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 89262, + "bbox": [ + 319, + 301, + 524, + 232 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000101_000019_gtFine_panoptic.png", + "image_id": "munster_000101_000019", + "segments_info": [ + { + "area": 739605, + "bbox": [ + 6, + 513, + 2037, + 506 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 76893, + "bbox": [ + 6, + 484, + 1364, + 302 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 43264, + "bbox": [ + 81, + 225, + 1962, + 259 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 23969, + "bbox": [ + 59, + 180, + 1909, + 455 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1854, + "bbox": [ + 1354, + 344, + 620, + 57 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 34212, + "bbox": [ + 194, + 5, + 1396, + 432 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 781278, + "bbox": [ + 6, + 5, + 2037, + 608 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 5991, + "bbox": [ + 803, + 475, + 250, + 37 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 923, + "bbox": [ + 476, + 5, + 714, + 298 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 407, + "bbox": [ + 1321, + 409, + 19, + 88 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 767, + "bbox": [ + 1469, + 413, + 24, + 56 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 572, + "bbox": [ + 1240, + 416, + 26, + 39 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 4176, + "bbox": [ + 579, + 386, + 70, + 179 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 973, + "bbox": [ + 1326, + 413, + 22, + 82 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1186, + "bbox": [ + 1336, + 434, + 33, + 64 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 5106, + "bbox": [ + 549, + 436, + 76, + 146 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 451, + "bbox": [ + 906, + 453, + 38, + 23 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 96864, + "bbox": [ + 1551, + 389, + 492, + 333 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 52214, + "bbox": [ + 1817, + 484, + 226, + 341 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 15792, + "bbox": [ + 1048, + 426, + 218, + 97 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 26933, + "bbox": [ + 129, + 420, + 314, + 130 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 973, + "bbox": [ + 1259, + 441, + 35, + 54 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2026, + "bbox": [ + 591, + 435, + 57, + 103 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1008, + "bbox": [ + 1303, + 461, + 62, + 36 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000102_000019_gtFine_panoptic.png", + "image_id": "munster_000102_000019", + "segments_info": [ + { + "area": 799415, + "bbox": [ + 6, + 536, + 2037, + 483 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 16906, + "bbox": [ + 6, + 508, + 2002, + 87 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 547311, + "bbox": [ + 6, + 5, + 2037, + 527 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19431, + "bbox": [ + 6, + 460, + 610, + 81 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 30807, + "bbox": [ + 6, + 5, + 2004, + 571 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4326, + "bbox": [ + 153, + 306, + 65, + 82 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 7187, + "bbox": [ + 216, + 248, + 1051, + 191 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 374137, + "bbox": [ + 6, + 5, + 1978, + 593 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 26853, + "bbox": [ + 966, + 534, + 1077, + 50 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 24259, + "bbox": [ + 807, + 5, + 463, + 154 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2595, + "bbox": [ + 379, + 435, + 52, + 124 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 61128, + "bbox": [ + 755, + 277, + 220, + 526 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2374, + "bbox": [ + 159, + 427, + 39, + 128 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 3758, + "bbox": [ + 616, + 417, + 60, + 136 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 4099, + "bbox": [ + 703, + 406, + 68, + 146 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 2599, + "bbox": [ + 1249, + 445, + 60, + 65 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3713, + "bbox": [ + 1179, + 441, + 88, + 77 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1758, + "bbox": [ + 1113, + 441, + 105, + 57 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 4179, + "bbox": [ + 1086, + 442, + 88, + 99 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 11710, + "bbox": [ + 964, + 433, + 157, + 115 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 2547, + "bbox": [ + 565, + 469, + 52, + 80 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2340, + "bbox": [ + 149, + 477, + 93, + 69 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 4288, + "bbox": [ + 610, + 470, + 83, + 92 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 2344, + "bbox": [ + 721, + 477, + 40, + 94 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2630, + "bbox": [ + 2004, + 431, + 39, + 103 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000103_000019_gtFine_panoptic.png", + "image_id": "munster_000103_000019", + "segments_info": [ + { + "area": 719962, + "bbox": [ + 6, + 496, + 2037, + 523 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 50080, + "bbox": [ + 883, + 492, + 1160, + 270 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 201376, + "bbox": [ + 6, + 5, + 1662, + 495 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 39216, + "bbox": [ + 280, + 5, + 1758, + 576 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 12039, + "bbox": [ + 458, + 81, + 1046, + 327 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 10209, + "bbox": [ + 373, + 208, + 1670, + 262 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 543617, + "bbox": [ + 6, + 5, + 2037, + 516 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 89984, + "bbox": [ + 584, + 5, + 471, + 277 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 706, + "bbox": [ + 1041, + 454, + 24, + 52 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 268, + "bbox": [ + 446, + 453, + 18, + 26 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1079, + "bbox": [ + 107, + 424, + 52, + 45 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 429, + "bbox": [ + 50, + 441, + 30, + 17 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 979, + "bbox": [ + 1109, + 447, + 27, + 59 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 343, + "bbox": [ + 648, + 480, + 21, + 30 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 187, + "bbox": [ + 691, + 480, + 13, + 22 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 735, + "bbox": [ + 661, + 476, + 33, + 27 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1117, + "bbox": [ + 1851, + 445, + 126, + 32 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 298, + "bbox": [ + 1854, + 454, + 43, + 24 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 10247, + "bbox": [ + 509, + 444, + 147, + 149 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 16977, + "bbox": [ + 438, + 472, + 164, + 145 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 43303, + "bbox": [ + 193, + 459, + 278, + 214 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 56471, + "bbox": [ + 6, + 457, + 245, + 298 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 7292, + "bbox": [ + 1197, + 448, + 103, + 127 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 9480, + "bbox": [ + 1257, + 434, + 120, + 162 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 15753, + "bbox": [ + 1318, + 423, + 144, + 208 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 105825, + "bbox": [ + 1394, + 391, + 437, + 305 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 31405, + "bbox": [ + 700, + 358, + 197, + 192 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 545, + "bbox": [ + 1071, + 475, + 27, + 37 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 428, + "bbox": [ + 912, + 480, + 29, + 20 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 712, + "bbox": [ + 938, + 477, + 41, + 24 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000104_000019_gtFine_panoptic.png", + "image_id": "munster_000104_000019", + "segments_info": [ + { + "area": 816981, + "bbox": [ + 6, + 442, + 2037, + 577 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 33564, + "bbox": [ + 6, + 446, + 1315, + 261 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 285912, + "bbox": [ + 6, + 5, + 2037, + 528 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 591, + "bbox": [ + 1004, + 418, + 24, + 42 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 25464, + "bbox": [ + 85, + 5, + 1707, + 607 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 474, + "bbox": [ + 921, + 356, + 59, + 26 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 50122, + "bbox": [ + 795, + 5, + 1248, + 402 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 424248, + "bbox": [ + 6, + 5, + 1852, + 548 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 43399, + "bbox": [ + 788, + 5, + 286, + 293 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 6938, + "bbox": [ + 1927, + 372, + 116, + 105 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 557, + "bbox": [ + 1215, + 402, + 15, + 46 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 741, + "bbox": [ + 1226, + 400, + 21, + 48 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 559, + "bbox": [ + 1618, + 365, + 31, + 30 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 306, + "bbox": [ + 1295, + 414, + 13, + 36 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 397, + "bbox": [ + 1320, + 386, + 34, + 47 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 131, + "bbox": [ + 1364, + 378, + 16, + 13 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 271, + "bbox": [ + 1483, + 377, + 22, + 18 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 266, + "bbox": [ + 486, + 413, + 25, + 15 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 243, + "bbox": [ + 848, + 422, + 14, + 25 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 260, + "bbox": [ + 802, + 427, + 25, + 25 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 6259, + "bbox": [ + 1018, + 379, + 81, + 99 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 252, + "bbox": [ + 898, + 427, + 17, + 17 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 429, + "bbox": [ + 872, + 427, + 29, + 17 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 331, + "bbox": [ + 915, + 416, + 20, + 47 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 325, + "bbox": [ + 918, + 419, + 15, + 56 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 5745, + "bbox": [ + 927, + 402, + 83, + 86 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 260, + "bbox": [ + 832, + 426, + 20, + 20 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1005, + "bbox": [ + 771, + 427, + 27, + 44 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 8178, + "bbox": [ + 548, + 410, + 114, + 116 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 12087, + "bbox": [ + 454, + 427, + 143, + 119 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 13912, + "bbox": [ + 1303, + 387, + 165, + 163 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 25018, + "bbox": [ + 1381, + 393, + 244, + 200 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 131992, + "bbox": [ + 1502, + 381, + 541, + 309 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 15734, + "bbox": [ + 1087, + 348, + 128, + 140 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 238, + "bbox": [ + 845, + 436, + 29, + 14 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 324, + "bbox": [ + 801, + 436, + 31, + 16 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1969, + "bbox": [ + 120, + 439, + 51, + 91 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 6140, + "bbox": [ + 140, + 444, + 90, + 126 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 8136, + "bbox": [ + 6, + 460, + 88, + 160 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000105_000019_gtFine_panoptic.png", + "image_id": "munster_000105_000019", + "segments_info": [ + { + "area": 990544, + "bbox": [ + 6, + 436, + 2037, + 583 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 43870, + "bbox": [ + 6, + 430, + 2037, + 116 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 228513, + "bbox": [ + 6, + 5, + 2037, + 483 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 344, + "bbox": [ + 710, + 412, + 113, + 21 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 34711, + "bbox": [ + 14, + 5, + 1901, + 512 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 12796, + "bbox": [ + 381, + 53, + 1485, + 305 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 3544, + "bbox": [ + 369, + 259, + 1555, + 137 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 506531, + "bbox": [ + 6, + 5, + 2037, + 482 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2488, + "bbox": [ + 1296, + 436, + 608, + 60 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 56468, + "bbox": [ + 257, + 5, + 1547, + 306 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 2409, + "bbox": [ + 1172, + 406, + 115, + 32 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 445, + "bbox": [ + 1942, + 410, + 16, + 47 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1484, + "bbox": [ + 1920, + 400, + 30, + 69 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 321, + "bbox": [ + 1491, + 403, + 16, + 28 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 119, + "bbox": [ + 1438, + 405, + 13, + 17 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 762, + "bbox": [ + 809, + 376, + 30, + 36 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 617, + "bbox": [ + 642, + 380, + 22, + 92 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 906, + "bbox": [ + 911, + 394, + 21, + 68 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1352, + "bbox": [ + 885, + 392, + 28, + 89 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1203, + "bbox": [ + 1855, + 388, + 40, + 128 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 2636, + "bbox": [ + 1782, + 395, + 30, + 122 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1004, + "bbox": [ + 1726, + 402, + 29, + 67 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 811, + "bbox": [ + 1090, + 390, + 28, + 50 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1714, + "bbox": [ + 826, + 385, + 41, + 85 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 758, + "bbox": [ + 1825, + 406, + 39, + 42 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 688, + "bbox": [ + 1748, + 418, + 34, + 29 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 336, + "bbox": [ + 1710, + 418, + 20, + 32 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 113, + "bbox": [ + 1508, + 414, + 23, + 23 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1694, + "bbox": [ + 1433, + 411, + 57, + 38 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3568, + "bbox": [ + 1355, + 396, + 83, + 55 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 31943, + "bbox": [ + 390, + 366, + 267, + 151 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 25051, + "bbox": [ + 1490, + 386, + 233, + 139 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1336, + "bbox": [ + 865, + 417, + 38, + 65 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 274, + "bbox": [ + 1732, + 442, + 12, + 33 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 520, + "bbox": [ + 1091, + 417, + 29, + 39 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1514, + "bbox": [ + 818, + 421, + 47, + 58 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 280, + "bbox": [ + 1311, + 415, + 15, + 22 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 206, + "bbox": [ + 1298, + 411, + 11, + 24 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000106_000019_gtFine_panoptic.png", + "image_id": "munster_000106_000019", + "segments_info": [ + { + "area": 663150, + "bbox": [ + 6, + 438, + 1990, + 581 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 219714, + "bbox": [ + 1140, + 441, + 903, + 578 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 45805, + "bbox": [ + 73, + 5, + 1970, + 439 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 7548, + "bbox": [ + 6, + 393, + 266, + 53 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 3567, + "bbox": [ + 531, + 292, + 1398, + 177 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1129, + "bbox": [ + 1058, + 376, + 185, + 44 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 740362, + "bbox": [ + 6, + 5, + 2037, + 540 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 85815, + "bbox": [ + 769, + 5, + 572, + 367 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 332, + "bbox": [ + 1184, + 417, + 13, + 44 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 543, + "bbox": [ + 1173, + 415, + 16, + 46 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 3914, + "bbox": [ + 1389, + 391, + 52, + 110 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 88, + "bbox": [ + 1036, + 427, + 10, + 20 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1889, + "bbox": [ + 1226, + 416, + 115, + 48 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 244, + "bbox": [ + 1016, + 430, + 19, + 20 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 117, + "bbox": [ + 1016, + 433, + 9, + 20 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 690, + "bbox": [ + 996, + 417, + 21, + 41 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1648, + "bbox": [ + 920, + 413, + 64, + 57 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1337, + "bbox": [ + 910, + 425, + 51, + 52 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1139, + "bbox": [ + 910, + 434, + 28, + 56 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 7097, + "bbox": [ + 809, + 391, + 104, + 103 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2724, + "bbox": [ + 800, + 433, + 64, + 78 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 4978, + "bbox": [ + 756, + 420, + 70, + 105 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 3555, + "bbox": [ + 434, + 404, + 168, + 36 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 18547, + "bbox": [ + 597, + 395, + 173, + 152 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 22438, + "bbox": [ + 447, + 424, + 199, + 161 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 6980, + "bbox": [ + 55, + 433, + 154, + 97 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 65462, + "bbox": [ + 106, + 424, + 392, + 230 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 27728, + "bbox": [ + 6, + 417, + 118, + 297 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 4795, + "bbox": [ + 1056, + 421, + 87, + 73 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 661, + "bbox": [ + 1009, + 410, + 31, + 36 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 2031, + "bbox": [ + 936, + 381, + 63, + 83 + ], + "category_id": 27, + "id": 27001, + "iscrowd": 0 + }, + { + "area": 4069, + "bbox": [ + 1535, + 407, + 74, + 120 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000107_000019_gtFine_panoptic.png", + "image_id": "munster_000107_000019", + "segments_info": [ + { + "area": 668884, + "bbox": [ + 6, + 464, + 2037, + 555 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 181085, + "bbox": [ + 945, + 458, + 1098, + 502 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 172725, + "bbox": [ + 6, + 5, + 2037, + 466 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3139, + "bbox": [ + 1043, + 402, + 99, + 65 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 2216, + "bbox": [ + 1140, + 421, + 88, + 46 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 9576, + "bbox": [ + 946, + 40, + 355, + 447 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3242, + "bbox": [ + 959, + 363, + 307, + 77 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 641685, + "bbox": [ + 6, + 5, + 2037, + 594 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 297, + "bbox": [ + 1306, + 453, + 11, + 32 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 69622, + "bbox": [ + 862, + 5, + 579, + 379 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 116, + "bbox": [ + 1307, + 433, + 9, + 24 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 265, + "bbox": [ + 915, + 415, + 17, + 18 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 418, + "bbox": [ + 915, + 432, + 31, + 51 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1046, + "bbox": [ + 915, + 437, + 25, + 52 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 980, + "bbox": [ + 851, + 443, + 37, + 67 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 6052, + "bbox": [ + 777, + 439, + 98, + 84 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1152, + "bbox": [ + 756, + 440, + 43, + 94 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 11962, + "bbox": [ + 647, + 436, + 141, + 119 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 23845, + "bbox": [ + 513, + 414, + 169, + 182 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 163396, + "bbox": [ + 6, + 328, + 520, + 391 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 4949, + "bbox": [ + 1017, + 430, + 89, + 69 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 7868, + "bbox": [ + 811, + 382, + 105, + 120 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000108_000019_gtFine_panoptic.png", + "image_id": "munster_000108_000019", + "segments_info": [ + { + "area": 760723, + "bbox": [ + 6, + 457, + 2037, + 562 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 123210, + "bbox": [ + 649, + 394, + 1394, + 440 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 239457, + "bbox": [ + 6, + 5, + 2037, + 472 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 45546, + "bbox": [ + 1207, + 387, + 836, + 149 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 21667, + "bbox": [ + 1421, + 409, + 568, + 90 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 12268, + "bbox": [ + 665, + 5, + 776, + 497 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1647, + "bbox": [ + 670, + 345, + 459, + 99 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4456, + "bbox": [ + 759, + 314, + 435, + 179 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 335117, + "bbox": [ + 6, + 5, + 2022, + 463 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 3893, + "bbox": [ + 714, + 465, + 187, + 42 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 189592, + "bbox": [ + 6, + 5, + 1502, + 453 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1297, + "bbox": [ + 1286, + 412, + 29, + 63 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 211, + "bbox": [ + 1157, + 430, + 11, + 29 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 212, + "bbox": [ + 702, + 459, + 16, + 23 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 282, + "bbox": [ + 731, + 461, + 24, + 17 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 242, + "bbox": [ + 720, + 461, + 15, + 19 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 288, + "bbox": [ + 798, + 449, + 18, + 23 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 283, + "bbox": [ + 879, + 456, + 24, + 21 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 115, + "bbox": [ + 946, + 458, + 16, + 17 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 391, + "bbox": [ + 1005, + 445, + 21, + 26 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1188, + "bbox": [ + 1041, + 437, + 40, + 42 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 4819, + "bbox": [ + 1069, + 428, + 84, + 71 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1744, + "bbox": [ + 960, + 441, + 53, + 40 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 4310, + "bbox": [ + 581, + 412, + 72, + 112 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1758, + "bbox": [ + 565, + 401, + 52, + 142 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 28051, + "bbox": [ + 434, + 390, + 168, + 201 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 177161, + "bbox": [ + 6, + 281, + 441, + 461 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 98, + "bbox": [ + 707, + 472, + 8, + 16 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 94, + "bbox": [ + 1160, + 445, + 6, + 21 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000109_000019_gtFine_panoptic.png", + "image_id": "munster_000109_000019", + "segments_info": [ + { + "area": 867646, + "bbox": [ + 6, + 450, + 2037, + 569 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 46577, + "bbox": [ + 6, + 449, + 2037, + 411 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 276, + "bbox": [ + 994, + 471, + 31, + 16 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 21443, + "bbox": [ + 220, + 5, + 1823, + 533 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 18561, + "bbox": [ + 222, + 42, + 1797, + 395 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 3417, + "bbox": [ + 662, + 382, + 1065, + 149 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 498847, + "bbox": [ + 6, + 5, + 2037, + 518 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2981, + "bbox": [ + 618, + 480, + 134, + 64 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 221730, + "bbox": [ + 6, + 5, + 1498, + 229 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 251, + "bbox": [ + 842, + 429, + 18, + 19 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 409, + "bbox": [ + 238, + 447, + 15, + 37 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 50204, + "bbox": [ + 1651, + 405, + 392, + 159 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 28853, + "bbox": [ + 745, + 445, + 336, + 116 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 815, + "bbox": [ + 581, + 460, + 60, + 54 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1353, + "bbox": [ + 589, + 470, + 44, + 56 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 455, + "bbox": [ + 446, + 463, + 43, + 23 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 5099, + "bbox": [ + 376, + 465, + 95, + 65 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 8614, + "bbox": [ + 250, + 463, + 132, + 83 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 420, + "bbox": [ + 577, + 469, + 30, + 50 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 10656, + "bbox": [ + 462, + 459, + 143, + 96 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 8053, + "bbox": [ + 1480, + 450, + 166, + 71 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000110_000019_gtFine_panoptic.png", + "image_id": "munster_000110_000019", + "segments_info": [ + { + "area": 636210, + "bbox": [ + 6, + 452, + 1996, + 567 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 79011, + "bbox": [ + 547, + 498, + 1496, + 521 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 335029, + "bbox": [ + 6, + 5, + 2037, + 447 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2238, + "bbox": [ + 519, + 433, + 108, + 70 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 7015, + "bbox": [ + 6, + 400, + 190, + 61 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 11495, + "bbox": [ + 537, + 5, + 1049, + 534 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4849, + "bbox": [ + 1140, + 208, + 473, + 213 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 341022, + "bbox": [ + 6, + 5, + 2037, + 549 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 8733, + "bbox": [ + 546, + 459, + 768, + 111 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 134294, + "bbox": [ + 537, + 5, + 912, + 314 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 231, + "bbox": [ + 721, + 422, + 17, + 25 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 137, + "bbox": [ + 1015, + 440, + 14, + 17 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 246, + "bbox": [ + 961, + 438, + 23, + 25 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 196, + "bbox": [ + 955, + 440, + 16, + 27 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 270, + "bbox": [ + 940, + 440, + 23, + 31 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 136, + "bbox": [ + 842, + 442, + 17, + 19 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 858, + "bbox": [ + 811, + 441, + 35, + 59 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 4888, + "bbox": [ + 742, + 436, + 87, + 74 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 10130, + "bbox": [ + 621, + 435, + 138, + 99 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 8690, + "bbox": [ + 835, + 430, + 128, + 91 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 33014, + "bbox": [ + 304, + 429, + 248, + 177 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 67406, + "bbox": [ + 6, + 433, + 338, + 244 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 213, + "bbox": [ + 1081, + 438, + 20, + 19 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1328, + "bbox": [ + 1029, + 423, + 38, + 39 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1288, + "bbox": [ + 976, + 436, + 47, + 35 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 386, + "bbox": [ + 1092, + 435, + 21, + 31 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 618, + "bbox": [ + 1109, + 422, + 50, + 53 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 1661, + "bbox": [ + 1113, + 430, + 53, + 52 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 1872, + "bbox": [ + 1152, + 429, + 50, + 69 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 2133, + "bbox": [ + 1175, + 424, + 49, + 92 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 8170, + "bbox": [ + 1198, + 416, + 136, + 107 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 25221, + "bbox": [ + 1312, + 389, + 184, + 216 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 161665, + "bbox": [ + 1437, + 289, + 505, + 421 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000111_000019_gtFine_panoptic.png", + "image_id": "munster_000111_000019", + "segments_info": [ + { + "area": 818140, + "bbox": [ + 6, + 459, + 2037, + 560 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 128548, + "bbox": [ + 6, + 467, + 2037, + 433 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 655468, + "bbox": [ + 6, + 5, + 2037, + 516 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 976, + "bbox": [ + 903, + 431, + 96, + 54 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 26016, + "bbox": [ + 667, + 5, + 1325, + 536 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8860, + "bbox": [ + 679, + 22, + 1038, + 345 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2122, + "bbox": [ + 766, + 286, + 447, + 137 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 121793, + "bbox": [ + 6, + 240, + 2037, + 386 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2016, + "bbox": [ + 960, + 462, + 458, + 41 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 139713, + "bbox": [ + 772, + 5, + 807, + 322 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 908, + "bbox": [ + 960, + 424, + 27, + 62 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 403, + "bbox": [ + 1445, + 435, + 16, + 37 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 459, + "bbox": [ + 1511, + 424, + 14, + 45 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 626, + "bbox": [ + 1496, + 422, + 17, + 49 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1208, + "bbox": [ + 905, + 468, + 72, + 76 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 3507, + "bbox": [ + 912, + 403, + 48, + 142 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 101, + "bbox": [ + 1193, + 440, + 18, + 9 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 330, + "bbox": [ + 1200, + 442, + 27, + 21 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 314, + "bbox": [ + 1183, + 439, + 19, + 35 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1469, + "bbox": [ + 1146, + 436, + 47, + 42 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1635, + "bbox": [ + 1102, + 439, + 54, + 42 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1418, + "bbox": [ + 1064, + 446, + 42, + 46 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3101, + "bbox": [ + 996, + 435, + 76, + 62 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 393, + "bbox": [ + 1216, + 440, + 26, + 24 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1445, + "bbox": [ + 1235, + 436, + 46, + 39 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 598, + "bbox": [ + 1284, + 439, + 31, + 26 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1211, + "bbox": [ + 1310, + 431, + 44, + 37 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 2612, + "bbox": [ + 1357, + 416, + 61, + 60 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 622, + "bbox": [ + 1468, + 439, + 59, + 30 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 33305, + "bbox": [ + 1754, + 361, + 289, + 165 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 5146, + "bbox": [ + 1989, + 393, + 54, + 118 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 282, + "bbox": [ + 1457, + 436, + 14, + 32 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 301, + "bbox": [ + 1523, + 443, + 16, + 34 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 271, + "bbox": [ + 1533, + 444, + 13, + 34 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 759, + "bbox": [ + 659, + 457, + 44, + 53 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2047, + "bbox": [ + 622, + 445, + 46, + 67 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 1929, + "bbox": [ + 580, + 463, + 53, + 52 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000112_000019_gtFine_panoptic.png", + "image_id": "munster_000112_000019", + "segments_info": [ + { + "area": 671885, + "bbox": [ + 6, + 446, + 2029, + 573 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 141386, + "bbox": [ + 6, + 307, + 2037, + 712 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 511514, + "bbox": [ + 6, + 5, + 2037, + 498 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3693, + "bbox": [ + 6, + 414, + 87, + 150 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 4032, + "bbox": [ + 6, + 414, + 636, + 80 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 20294, + "bbox": [ + 730, + 5, + 1109, + 677 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 722, + "bbox": [ + 691, + 336, + 708, + 71 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 193176, + "bbox": [ + 6, + 5, + 1853, + 652 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 72200, + "bbox": [ + 872, + 446, + 1171, + 301 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 95274, + "bbox": [ + 476, + 5, + 843, + 278 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1130, + "bbox": [ + 1383, + 469, + 26, + 65 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 3029, + "bbox": [ + 1124, + 372, + 61, + 113 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 408, + "bbox": [ + 428, + 569, + 42, + 16 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 421, + "bbox": [ + 893, + 421, + 32, + 30 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1008, + "bbox": [ + 912, + 418, + 46, + 35 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1178, + "bbox": [ + 943, + 416, + 56, + 38 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1078, + "bbox": [ + 974, + 416, + 50, + 38 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2471, + "bbox": [ + 1004, + 415, + 74, + 41 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 739, + "bbox": [ + 1115, + 413, + 53, + 45 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 4114, + "bbox": [ + 1165, + 394, + 87, + 71 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 6349, + "bbox": [ + 1292, + 385, + 98, + 122 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 6029, + "bbox": [ + 1339, + 385, + 74, + 141 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 94168, + "bbox": [ + 1403, + 261, + 329, + 372 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1608, + "bbox": [ + 850, + 416, + 54, + 55 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 3997, + "bbox": [ + 785, + 412, + 87, + 89 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2016, + "bbox": [ + 794, + 432, + 44, + 85 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 62821, + "bbox": [ + 168, + 365, + 349, + 248 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 19875, + "bbox": [ + 615, + 404, + 189, + 131 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 332, + "bbox": [ + 1098, + 412, + 19, + 34 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 1931, + "bbox": [ + 559, + 426, + 39, + 66 + ], + "category_id": 32, + "id": 32001, + "iscrowd": 0 + }, + { + "area": 696, + "bbox": [ + 610, + 420, + 31, + 64 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1157, + "bbox": [ + 582, + 426, + 32, + 65 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000113_000019_gtFine_panoptic.png", + "image_id": "munster_000113_000019", + "segments_info": [ + { + "area": 750979, + "bbox": [ + 6, + 460, + 2037, + 559 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 142728, + "bbox": [ + 6, + 462, + 2037, + 277 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 431255, + "bbox": [ + 99, + 5, + 1944, + 531 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 27879, + "bbox": [ + 218, + 374, + 1475, + 175 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 23938, + "bbox": [ + 246, + 5, + 1418, + 592 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1563, + "bbox": [ + 893, + 333, + 309, + 93 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4070, + "bbox": [ + 704, + 337, + 629, + 121 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 318216, + "bbox": [ + 6, + 5, + 1531, + 589 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 31041, + "bbox": [ + 1289, + 543, + 485, + 113 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 138265, + "bbox": [ + 502, + 5, + 1194, + 398 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 152, + "bbox": [ + 891, + 436, + 14, + 29 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 4872, + "bbox": [ + 1773, + 396, + 52, + 133 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 6559, + "bbox": [ + 1715, + 374, + 68, + 158 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 32650, + "bbox": [ + 496, + 394, + 308, + 132 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 919, + "bbox": [ + 1183, + 430, + 32, + 37 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 6396, + "bbox": [ + 1209, + 394, + 93, + 108 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 30561, + "bbox": [ + 1264, + 391, + 214, + 188 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000114_000019_gtFine_panoptic.png", + "image_id": "munster_000114_000019", + "segments_info": [ + { + "area": 683736, + "bbox": [ + 181, + 443, + 1862, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 21028, + "bbox": [ + 1677, + 472, + 366, + 100 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 330966, + "bbox": [ + 906, + 5, + 1137, + 463 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 14993, + "bbox": [ + 900, + 122, + 1021, + 377 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 8089, + "bbox": [ + 954, + 172, + 922, + 240 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 3874, + "bbox": [ + 1350, + 304, + 193, + 178 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 828369, + "bbox": [ + 6, + 5, + 2037, + 1014 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 50697, + "bbox": [ + 859, + 5, + 989, + 344 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1599, + "bbox": [ + 981, + 436, + 58, + 37 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 403, + "bbox": [ + 2027, + 395, + 16, + 49 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 663, + "bbox": [ + 1552, + 405, + 19, + 55 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 873, + "bbox": [ + 1586, + 407, + 24, + 53 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1239, + "bbox": [ + 1607, + 401, + 33, + 61 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1019, + "bbox": [ + 1497, + 398, + 24, + 68 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 465, + "bbox": [ + 1450, + 404, + 17, + 47 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 363, + "bbox": [ + 1438, + 405, + 15, + 47 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 731, + "bbox": [ + 1417, + 400, + 22, + 62 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 646, + "bbox": [ + 1397, + 402, + 24, + 47 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 962, + "bbox": [ + 929, + 435, + 41, + 37 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 107, + "bbox": [ + 924, + 435, + 11, + 22 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4989, + "bbox": [ + 1831, + 405, + 181, + 42 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 16397, + "bbox": [ + 1028, + 406, + 152, + 135 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 914, + "bbox": [ + 1462, + 426, + 45, + 33 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 251, + "bbox": [ + 1399, + 428, + 20, + 30 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 250, + "bbox": [ + 1421, + 427, + 15, + 37 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 205, + "bbox": [ + 1440, + 429, + 10, + 34 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 270, + "bbox": [ + 1453, + 425, + 12, + 36 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000115_000019_gtFine_panoptic.png", + "image_id": "munster_000115_000019", + "segments_info": [ + { + "area": 906862, + "bbox": [ + 6, + 494, + 2037, + 525 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 55414, + "bbox": [ + 191, + 473, + 1852, + 79 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 713229, + "bbox": [ + 6, + 5, + 2037, + 504 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 7554, + "bbox": [ + 243, + 432, + 355, + 70 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 2409, + "bbox": [ + 472, + 441, + 103, + 32 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 10292, + "bbox": [ + 63, + 25, + 1197, + 503 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4281, + "bbox": [ + 52, + 276, + 854, + 94 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2923, + "bbox": [ + 76, + 349, + 1103, + 54 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 117798, + "bbox": [ + 6, + 94, + 2037, + 429 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 57583, + "bbox": [ + 6, + 5, + 1268, + 290 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 4486, + "bbox": [ + 1078, + 367, + 68, + 153 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 3550, + "bbox": [ + 1550, + 372, + 50, + 147 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 4458, + "bbox": [ + 140, + 432, + 110, + 76 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 9203, + "bbox": [ + 574, + 433, + 178, + 68 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 11623, + "bbox": [ + 746, + 414, + 155, + 102 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2270, + "bbox": [ + 1043, + 420, + 67, + 80 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 607, + "bbox": [ + 979, + 413, + 85, + 87 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 11939, + "bbox": [ + 908, + 417, + 150, + 101 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1990, + "bbox": [ + 1277, + 421, + 52, + 66 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 6075, + "bbox": [ + 1207, + 410, + 93, + 88 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 5624, + "bbox": [ + 1119, + 395, + 96, + 106 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 894, + "bbox": [ + 1130, + 413, + 34, + 52 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 2981, + "bbox": [ + 458, + 447, + 88, + 55 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3388, + "bbox": [ + 1085, + 442, + 83, + 84 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 9434, + "bbox": [ + 1491, + 420, + 163, + 101 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000116_000019_gtFine_panoptic.png", + "image_id": "munster_000116_000019", + "segments_info": [ + { + "area": 640676, + "bbox": [ + 152, + 480, + 1891, + 539 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 42120, + "bbox": [ + 1526, + 449, + 517, + 176 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 5262, + "bbox": [ + 1569, + 253, + 451, + 213 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 781, + "bbox": [ + 1928, + 381, + 63, + 21 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 3599, + "bbox": [ + 1020, + 223, + 882, + 245 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1852, + "bbox": [ + 1051, + 224, + 365, + 177 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 686, + "bbox": [ + 1254, + 302, + 182, + 88 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 1092335, + "bbox": [ + 6, + 5, + 2037, + 1014 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 50122, + "bbox": [ + 953, + 5, + 274, + 316 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1915, + "bbox": [ + 1663, + 382, + 38, + 79 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 3712, + "bbox": [ + 1690, + 353, + 52, + 132 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2130, + "bbox": [ + 1820, + 388, + 84, + 38 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 18, + "bbox": [ + 1178, + 407, + 8, + 5 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 427, + "bbox": [ + 1181, + 407, + 30, + 25 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2282, + "bbox": [ + 1199, + 399, + 52, + 91 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 69986, + "bbox": [ + 904, + 360, + 314, + 282 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 14929, + "bbox": [ + 1229, + 382, + 145, + 128 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 7171, + "bbox": [ + 961, + 310, + 174, + 64 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 36272, + "bbox": [ + 1314, + 313, + 258, + 182 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 1253, + "bbox": [ + 1769, + 421, + 56, + 45 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1586, + "bbox": [ + 1801, + 410, + 58, + 57 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 2262, + "bbox": [ + 1840, + 420, + 84, + 49 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000117_000019_gtFine_panoptic.png", + "image_id": "munster_000117_000019", + "segments_info": [ + { + "area": 825396, + "bbox": [ + 6, + 420, + 2037, + 599 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 25491, + "bbox": [ + 6, + 418, + 1522, + 174 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 29853, + "bbox": [ + 6, + 331, + 499, + 188 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 7397, + "bbox": [ + 357, + 5, + 1079, + 517 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1062, + "bbox": [ + 362, + 334, + 27, + 41 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 704436, + "bbox": [ + 6, + 5, + 2037, + 512 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 10071, + "bbox": [ + 6, + 486, + 574, + 80 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 68274, + "bbox": [ + 803, + 5, + 794, + 367 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1045, + "bbox": [ + 403, + 450, + 32, + 45 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3089, + "bbox": [ + 121, + 454, + 67, + 58 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4675, + "bbox": [ + 6, + 454, + 135, + 68 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 171, + "bbox": [ + 1083, + 412, + 25, + 16 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 836, + "bbox": [ + 1076, + 419, + 33, + 35 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 18884, + "bbox": [ + 932, + 410, + 173, + 143 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 187616, + "bbox": [ + 1496, + 326, + 547, + 432 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1379, + "bbox": [ + 1011, + 391, + 73, + 36 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 69675, + "bbox": [ + 1166, + 291, + 318, + 264 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 5786, + "bbox": [ + 6, + 473, + 123, + 78 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000118_000019_gtFine_panoptic.png", + "image_id": "munster_000118_000019", + "segments_info": [ + { + "area": 921116, + "bbox": [ + 6, + 393, + 2037, + 626 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 52609, + "bbox": [ + 6, + 445, + 2037, + 124 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 3373, + "bbox": [ + 1659, + 427, + 317, + 30 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 8832, + "bbox": [ + 517, + 5, + 1256, + 510 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4858, + "bbox": [ + 1064, + 315, + 547, + 182 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 768339, + "bbox": [ + 6, + 5, + 2037, + 490 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 38668, + "bbox": [ + 6, + 397, + 2037, + 151 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 54700, + "bbox": [ + 929, + 5, + 716, + 224 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 115, + "bbox": [ + 1114, + 389, + 13, + 11 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 170, + "bbox": [ + 1106, + 396, + 15, + 13 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1320, + "bbox": [ + 1098, + 412, + 49, + 39 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 873, + "bbox": [ + 1298, + 414, + 25, + 46 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1384, + "bbox": [ + 974, + 412, + 49, + 38 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 4079, + "bbox": [ + 898, + 407, + 83, + 61 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 24472, + "bbox": [ + 698, + 353, + 184, + 167 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 48210, + "bbox": [ + 1387, + 362, + 283, + 217 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 191, + "bbox": [ + 1107, + 378, + 14, + 18 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 20275, + "bbox": [ + 1137, + 335, + 163, + 142 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000119_000019_gtFine_panoptic.png", + "image_id": "munster_000119_000019", + "segments_info": [ + { + "area": 732754, + "bbox": [ + 6, + 445, + 2037, + 574 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 216331, + "bbox": [ + 992, + 452, + 1051, + 567 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 111123, + "bbox": [ + 608, + 5, + 1201, + 456 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 61509, + "bbox": [ + 257, + 5, + 1761, + 676 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 14168, + "bbox": [ + 344, + 78, + 1291, + 328 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 33269, + "bbox": [ + 532, + 5, + 1511, + 474 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 499690, + "bbox": [ + 6, + 5, + 2037, + 510 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 29703, + "bbox": [ + 6, + 434, + 1132, + 235 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 198079, + "bbox": [ + 142, + 5, + 1316, + 364 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1248, + "bbox": [ + 1237, + 420, + 41, + 47 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 136, + "bbox": [ + 1199, + 413, + 11, + 17 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 807, + "bbox": [ + 1530, + 364, + 24, + 47 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 197, + "bbox": [ + 906, + 436, + 18, + 12 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 358, + "bbox": [ + 704, + 432, + 28, + 25 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 946, + "bbox": [ + 625, + 430, + 56, + 36 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 5301, + "bbox": [ + 169, + 420, + 139, + 96 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 42538, + "bbox": [ + 224, + 413, + 352, + 157 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1317, + "bbox": [ + 931, + 427, + 42, + 39 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 107, + "bbox": [ + 1126, + 428, + 27, + 13 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 264, + "bbox": [ + 1124, + 429, + 29, + 26 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 256, + "bbox": [ + 1139, + 420, + 61, + 38 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1574, + "bbox": [ + 831, + 428, + 50, + 38 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 2199, + "bbox": [ + 2014, + 441, + 29, + 88 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1833, + "bbox": [ + 1261, + 424, + 54, + 75 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 561, + "bbox": [ + 1210, + 428, + 23, + 39 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000120_000019_gtFine_panoptic.png", + "image_id": "munster_000120_000019", + "segments_info": [ + { + "area": 709768, + "bbox": [ + 6, + 449, + 2037, + 570 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 179301, + "bbox": [ + 6, + 445, + 2037, + 485 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 644335, + "bbox": [ + 6, + 5, + 2037, + 545 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2279, + "bbox": [ + 846, + 418, + 67, + 51 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 9976, + "bbox": [ + 170, + 180, + 1259, + 444 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4595, + "bbox": [ + 731, + 262, + 724, + 242 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 168790, + "bbox": [ + 6, + 169, + 1757, + 382 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 123269, + "bbox": [ + 600, + 5, + 737, + 303 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 638, + "bbox": [ + 1054, + 397, + 23, + 45 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 161, + "bbox": [ + 1048, + 413, + 33, + 34 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2115, + "bbox": [ + 1081, + 376, + 78, + 42 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1992, + "bbox": [ + 982, + 410, + 58, + 42 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 834, + "bbox": [ + 955, + 412, + 30, + 44 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2715, + "bbox": [ + 903, + 408, + 62, + 51 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3287, + "bbox": [ + 791, + 408, + 61, + 69 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 6200, + "bbox": [ + 693, + 386, + 106, + 110 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 4535, + "bbox": [ + 614, + 403, + 113, + 125 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 24798, + "bbox": [ + 476, + 404, + 216, + 147 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 8424, + "bbox": [ + 1052, + 412, + 107, + 112 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 18589, + "bbox": [ + 1133, + 394, + 163, + 146 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 150, + "bbox": [ + 1058, + 425, + 12, + 26 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000121_000019_gtFine_panoptic.png", + "image_id": "munster_000121_000019", + "segments_info": [ + { + "area": 806873, + "bbox": [ + 6, + 450, + 2037, + 569 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 78495, + "bbox": [ + 6, + 476, + 2037, + 166 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 3286, + "bbox": [ + 372, + 5, + 738, + 437 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 62168, + "bbox": [ + 6, + 370, + 2037, + 231 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 19988, + "bbox": [ + 837, + 381, + 1206, + 110 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 5678, + "bbox": [ + 818, + 240, + 1099, + 335 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3737, + "bbox": [ + 909, + 248, + 1068, + 270 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 811478, + "bbox": [ + 6, + 5, + 2037, + 580 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 102022, + "bbox": [ + 876, + 5, + 481, + 350 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 4220, + "bbox": [ + 1214, + 385, + 59, + 146 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 340, + "bbox": [ + 1036, + 421, + 29, + 26 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 787, + "bbox": [ + 1028, + 433, + 37, + 26 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1160, + "bbox": [ + 965, + 428, + 50, + 46 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 995, + "bbox": [ + 952, + 430, + 40, + 54 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 637, + "bbox": [ + 865, + 424, + 85, + 75 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 5671, + "bbox": [ + 867, + 427, + 105, + 86 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 8237, + "bbox": [ + 714, + 415, + 136, + 147 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 38518, + "bbox": [ + 518, + 414, + 273, + 177 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 238, + "bbox": [ + 1093, + 441, + 19, + 15 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 630, + "bbox": [ + 1131, + 437, + 33, + 23 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1307, + "bbox": [ + 1158, + 427, + 42, + 53 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1478, + "bbox": [ + 1184, + 425, + 33, + 65 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2695, + "bbox": [ + 1266, + 424, + 51, + 71 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 2270, + "bbox": [ + 1228, + 456, + 46, + 88 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000122_000019_gtFine_panoptic.png", + "image_id": "munster_000122_000019", + "segments_info": [ + { + "area": 757951, + "bbox": [ + 6, + 468, + 2037, + 551 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 134760, + "bbox": [ + 6, + 493, + 2037, + 368 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 78743, + "bbox": [ + 6, + 5, + 1120, + 463 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 12759, + "bbox": [ + 172, + 5, + 1408, + 608 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2460, + "bbox": [ + 151, + 153, + 1478, + 294 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 745093, + "bbox": [ + 6, + 5, + 2037, + 563 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2539, + "bbox": [ + 669, + 511, + 168, + 35 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 200363, + "bbox": [ + 42, + 5, + 1414, + 370 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 6529, + "bbox": [ + 673, + 381, + 102, + 184 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 451, + "bbox": [ + 1000, + 455, + 26, + 22 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2486, + "bbox": [ + 886, + 407, + 82, + 58 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 698, + "bbox": [ + 943, + 460, + 27, + 56 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 10306, + "bbox": [ + 826, + 437, + 132, + 101 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 9093, + "bbox": [ + 1154, + 438, + 120, + 97 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 646, + "bbox": [ + 799, + 460, + 27, + 41 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 5022, + "bbox": [ + 683, + 469, + 65, + 116 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000123_000019_gtFine_panoptic.png", + "image_id": "munster_000123_000019", + "segments_info": [ + { + "area": 666330, + "bbox": [ + 6, + 469, + 2037, + 550 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 119566, + "bbox": [ + 6, + 495, + 2037, + 280 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 338460, + "bbox": [ + 6, + 5, + 2037, + 454 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3788, + "bbox": [ + 1385, + 478, + 141, + 49 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 24358, + "bbox": [ + 313, + 25, + 1678, + 679 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 141, + "bbox": [ + 947, + 438, + 10, + 16 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4476, + "bbox": [ + 1142, + 198, + 901, + 236 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 627770, + "bbox": [ + 6, + 5, + 2037, + 648 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 39827, + "bbox": [ + 1270, + 539, + 629, + 143 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 93129, + "bbox": [ + 331, + 5, + 724, + 240 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3430, + "bbox": [ + 689, + 447, + 66, + 103 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 145, + "bbox": [ + 1000, + 462, + 19, + 16 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 409, + "bbox": [ + 985, + 464, + 26, + 18 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 277, + "bbox": [ + 1028, + 464, + 20, + 16 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 322, + "bbox": [ + 960, + 466, + 22, + 32 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 154, + "bbox": [ + 957, + 466, + 16, + 33 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 371, + "bbox": [ + 930, + 464, + 38, + 39 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 272, + "bbox": [ + 922, + 468, + 39, + 37 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1810, + "bbox": [ + 901, + 470, + 53, + 41 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 310, + "bbox": [ + 1101, + 452, + 35, + 12 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 668, + "bbox": [ + 1046, + 463, + 66, + 48 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 379, + "bbox": [ + 1058, + 467, + 48, + 47 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1166, + "bbox": [ + 1066, + 459, + 65, + 46 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1650, + "bbox": [ + 1064, + 491, + 47, + 55 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1243, + "bbox": [ + 1110, + 446, + 163, + 115 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 5867, + "bbox": [ + 1103, + 454, + 113, + 125 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 30380, + "bbox": [ + 1155, + 452, + 316, + 139 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 371, + "bbox": [ + 1005, + 451, + 24, + 24 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 1069, + "bbox": [ + 254, + 499, + 36, + 43 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1980, + "bbox": [ + 702, + 491, + 34, + 93 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000124_000019_gtFine_panoptic.png", + "image_id": "munster_000124_000019", + "segments_info": [ + { + "area": 700618, + "bbox": [ + 6, + 478, + 2037, + 541 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 195618, + "bbox": [ + 6, + 470, + 2037, + 442 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 27591, + "bbox": [ + 969, + 203, + 900, + 224 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 29111, + "bbox": [ + 6, + 390, + 380, + 152 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 3806, + "bbox": [ + 1790, + 369, + 69, + 80 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 9390, + "bbox": [ + 717, + 5, + 978, + 459 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 110, + "bbox": [ + 585, + 424, + 8, + 16 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 3605, + "bbox": [ + 1332, + 266, + 88, + 72 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 785063, + "bbox": [ + 6, + 5, + 2037, + 547 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4073, + "bbox": [ + 1931, + 577, + 112, + 53 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 61642, + "bbox": [ + 588, + 5, + 486, + 370 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3130, + "bbox": [ + 625, + 356, + 47, + 118 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 617, + "bbox": [ + 747, + 453, + 43, + 28 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1100, + "bbox": [ + 771, + 455, + 48, + 26 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1425, + "bbox": [ + 839, + 440, + 48, + 42 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3558, + "bbox": [ + 878, + 430, + 77, + 53 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 171, + "bbox": [ + 585, + 453, + 19, + 19 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 870, + "bbox": [ + 597, + 445, + 45, + 29 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2501, + "bbox": [ + 954, + 422, + 53, + 64 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 7780, + "bbox": [ + 1000, + 393, + 137, + 95 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 3831, + "bbox": [ + 1074, + 408, + 85, + 86 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2140, + "bbox": [ + 1174, + 384, + 114, + 30 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 12538, + "bbox": [ + 1116, + 407, + 147, + 132 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 19605, + "bbox": [ + 1221, + 380, + 181, + 202 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 93310, + "bbox": [ + 1315, + 365, + 417, + 298 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 6065, + "bbox": [ + 1991, + 757, + 52, + 144 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 1066, + "bbox": [ + 620, + 416, + 55, + 81 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000125_000019_gtFine_panoptic.png", + "image_id": "munster_000125_000019", + "segments_info": [ + { + "area": 527253, + "bbox": [ + 6, + 488, + 2037, + 531 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 174564, + "bbox": [ + 329, + 488, + 1714, + 401 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 193189, + "bbox": [ + 6, + 5, + 2037, + 483 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 34644, + "bbox": [ + 1296, + 425, + 747, + 230 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 41399, + "bbox": [ + 1263, + 449, + 780, + 145 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 20977, + "bbox": [ + 582, + 117, + 1268, + 538 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2435, + "bbox": [ + 751, + 321, + 290, + 119 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2400, + "bbox": [ + 729, + 366, + 554, + 64 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 683928, + "bbox": [ + 6, + 5, + 2037, + 638 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 14456, + "bbox": [ + 1367, + 548, + 541, + 147 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 38357, + "bbox": [ + 760, + 5, + 323, + 258 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 305, + "bbox": [ + 990, + 445, + 15, + 41 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1070, + "bbox": [ + 972, + 451, + 29, + 57 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 298, + "bbox": [ + 1239, + 455, + 13, + 28 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2308, + "bbox": [ + 1122, + 453, + 101, + 30 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1496, + "bbox": [ + 1034, + 458, + 72, + 25 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3810, + "bbox": [ + 585, + 440, + 78, + 83 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 3359, + "bbox": [ + 909, + 459, + 67, + 76 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 10472, + "bbox": [ + 759, + 429, + 169, + 156 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 39164, + "bbox": [ + 603, + 431, + 260, + 201 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 168242, + "bbox": [ + 6, + 377, + 355, + 595 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 4677, + "bbox": [ + 594, + 388, + 119, + 65 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 5085, + "bbox": [ + 787, + 423, + 272, + 64 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 775, + "bbox": [ + 1330, + 468, + 26, + 51 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1073, + "bbox": [ + 1343, + 469, + 27, + 56 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000126_000019_gtFine_panoptic.png", + "image_id": "munster_000126_000019", + "segments_info": [ + { + "area": 877226, + "bbox": [ + 6, + 451, + 2037, + 568 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 91536, + "bbox": [ + 6, + 463, + 2037, + 200 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 278121, + "bbox": [ + 6, + 5, + 1621, + 479 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19832, + "bbox": [ + 6, + 453, + 890, + 101 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 10879, + "bbox": [ + 761, + 355, + 1092, + 157 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 20037, + "bbox": [ + 13, + 5, + 1801, + 541 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 831, + "bbox": [ + 1428, + 336, + 213, + 84 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 8167, + "bbox": [ + 1515, + 215, + 371, + 247 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 277345, + "bbox": [ + 6, + 171, + 2037, + 371 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2228, + "bbox": [ + 967, + 465, + 412, + 40 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 360569, + "bbox": [ + 349, + 5, + 1694, + 304 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3618, + "bbox": [ + 421, + 437, + 92, + 70 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1841, + "bbox": [ + 655, + 391, + 47, + 97 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1504, + "bbox": [ + 1524, + 407, + 36, + 89 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 927, + "bbox": [ + 1407, + 435, + 57, + 22 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 396, + "bbox": [ + 1574, + 438, + 19, + 29 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1009, + "bbox": [ + 1590, + 429, + 33, + 43 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 827, + "bbox": [ + 1311, + 448, + 33, + 31 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1664, + "bbox": [ + 1258, + 446, + 57, + 34 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1727, + "bbox": [ + 1188, + 446, + 53, + 40 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 2256, + "bbox": [ + 1135, + 446, + 62, + 45 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2636, + "bbox": [ + 1018, + 443, + 72, + 48 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2780, + "bbox": [ + 652, + 432, + 50, + 89 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 720, + "bbox": [ + 1540, + 454, + 25, + 51 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000127_000019_gtFine_panoptic.png", + "image_id": "munster_000127_000019", + "segments_info": [ + { + "area": 510158, + "bbox": [ + 6, + 480, + 2037, + 539 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 35990, + "bbox": [ + 6, + 434, + 1986, + 172 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 356082, + "bbox": [ + 6, + 5, + 1824, + 491 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4955, + "bbox": [ + 855, + 382, + 141, + 86 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 30269, + "bbox": [ + 6, + 5, + 1811, + 580 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 23073, + "bbox": [ + 11, + 111, + 874, + 269 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 16247, + "bbox": [ + 435, + 110, + 1607, + 382 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 406297, + "bbox": [ + 600, + 5, + 1443, + 477 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 7882, + "bbox": [ + 1560, + 435, + 448, + 33 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 34411, + "bbox": [ + 573, + 5, + 1200, + 267 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1845, + "bbox": [ + 762, + 407, + 36, + 96 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1115, + "bbox": [ + 420, + 401, + 48, + 64 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2798, + "bbox": [ + 259, + 384, + 53, + 112 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 4578, + "bbox": [ + 1511, + 384, + 104, + 54 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1057, + "bbox": [ + 1611, + 388, + 33, + 54 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 261, + "bbox": [ + 1722, + 383, + 25, + 17 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 5768, + "bbox": [ + 1630, + 384, + 106, + 65 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 4249, + "bbox": [ + 1728, + 381, + 106, + 68 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 232748, + "bbox": [ + 999, + 361, + 599, + 472 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 39091, + "bbox": [ + 1865, + 415, + 178, + 304 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2553, + "bbox": [ + 403, + 440, + 84, + 58 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1833, + "bbox": [ + 72, + 440, + 65, + 57 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 3041, + "bbox": [ + 243, + 434, + 74, + 83 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000128_000019_gtFine_panoptic.png", + "image_id": "munster_000128_000019", + "segments_info": [ + { + "area": 908334, + "bbox": [ + 6, + 441, + 2037, + 578 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 17364, + "bbox": [ + 6, + 442, + 2037, + 186 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 199316, + "bbox": [ + 6, + 5, + 1099, + 469 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4531, + "bbox": [ + 70, + 450, + 563, + 68 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 6401, + "bbox": [ + 510, + 192, + 898, + 321 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 459, + "bbox": [ + 1241, + 371, + 103, + 30 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 2164, + "bbox": [ + 1400, + 308, + 76, + 113 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 250439, + "bbox": [ + 6, + 5, + 2037, + 540 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 243058, + "bbox": [ + 278, + 5, + 1226, + 348 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 258, + "bbox": [ + 1019, + 439, + 11, + 30 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 541, + "bbox": [ + 489, + 429, + 19, + 61 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 419, + "bbox": [ + 1448, + 415, + 24, + 46 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 489, + "bbox": [ + 625, + 433, + 28, + 32 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 421, + "bbox": [ + 901, + 435, + 24, + 27 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1057, + "bbox": [ + 976, + 428, + 70, + 30 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 548, + "bbox": [ + 983, + 442, + 31, + 29 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1271, + "bbox": [ + 947, + 442, + 47, + 32 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1626, + "bbox": [ + 823, + 440, + 50, + 46 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3692, + "bbox": [ + 750, + 439, + 84, + 53 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 42899, + "bbox": [ + 219, + 361, + 275, + 196 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 158, + "bbox": [ + 1272, + 431, + 12, + 25 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 277, + "bbox": [ + 1265, + 435, + 14, + 27 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1230, + "bbox": [ + 1226, + 431, + 42, + 35 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 429, + "bbox": [ + 1318, + 413, + 33, + 49 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1206, + "bbox": [ + 1386, + 420, + 52, + 55 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 2667, + "bbox": [ + 1402, + 428, + 67, + 49 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1857, + "bbox": [ + 1178, + 425, + 47, + 61 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 12889, + "bbox": [ + 1057, + 391, + 133, + 115 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 5617, + "bbox": [ + 631, + 436, + 104, + 65 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 365, + "bbox": [ + 1322, + 409, + 34, + 47 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 249853, + "bbox": [ + 1457, + 103, + 586, + 515 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 59, + "bbox": [ + 629, + 464, + 6, + 28 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000129_000019_gtFine_panoptic.png", + "image_id": "munster_000129_000019", + "segments_info": [ + { + "area": 931551, + "bbox": [ + 6, + 427, + 2037, + 592 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 82096, + "bbox": [ + 6, + 443, + 2037, + 217 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 174956, + "bbox": [ + 6, + 59, + 1913, + 410 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 33937, + "bbox": [ + 1484, + 430, + 559, + 93 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 20665, + "bbox": [ + 306, + 5, + 1392, + 512 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 5308, + "bbox": [ + 532, + 258, + 852, + 166 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 11978, + "bbox": [ + 860, + 142, + 851, + 324 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 359093, + "bbox": [ + 85, + 5, + 1958, + 475 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 597, + "bbox": [ + 1141, + 430, + 323, + 43 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 286512, + "bbox": [ + 6, + 5, + 1961, + 321 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 872, + "bbox": [ + 1376, + 404, + 21, + 71 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1029, + "bbox": [ + 1391, + 396, + 37, + 68 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1700, + "bbox": [ + 1450, + 388, + 40, + 100 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 2679, + "bbox": [ + 1516, + 380, + 41, + 114 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 807, + "bbox": [ + 831, + 433, + 48, + 31 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 814, + "bbox": [ + 1112, + 429, + 33, + 30 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 5194, + "bbox": [ + 936, + 403, + 79, + 75 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3279, + "bbox": [ + 1037, + 422, + 73, + 60 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1249, + "bbox": [ + 1162, + 425, + 30, + 55 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1698, + "bbox": [ + 1301, + 406, + 43, + 67 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 863, + "bbox": [ + 1188, + 395, + 43, + 89 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 596, + "bbox": [ + 688, + 431, + 36, + 25 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1568, + "bbox": [ + 630, + 434, + 79, + 29 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1093, + "bbox": [ + 584, + 439, + 73, + 31 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1289, + "bbox": [ + 545, + 438, + 63, + 31 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 1510, + "bbox": [ + 347, + 438, + 73, + 43 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1156, + "bbox": [ + 315, + 438, + 70, + 44 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1335, + "bbox": [ + 309, + 438, + 50, + 43 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 8841, + "bbox": [ + 107, + 400, + 211, + 82 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 1827, + "bbox": [ + 175, + 434, + 99, + 54 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 2424, + "bbox": [ + 109, + 427, + 125, + 64 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 4985, + "bbox": [ + 44, + 426, + 151, + 69 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 5946, + "bbox": [ + 6, + 426, + 115, + 77 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 745, + "bbox": [ + 6, + 454, + 20, + 50 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 1373, + "bbox": [ + 1103, + 392, + 35, + 51 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 391, + "bbox": [ + 1387, + 441, + 14, + 43 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1137, + "bbox": [ + 1400, + 426, + 26, + 60 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1002, + "bbox": [ + 1469, + 439, + 30, + 55 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1052, + "bbox": [ + 1528, + 438, + 23, + 68 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000130_000019_gtFine_panoptic.png", + "image_id": "munster_000130_000019", + "segments_info": [ + { + "area": 748277, + "bbox": [ + 6, + 412, + 2037, + 607 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 203631, + "bbox": [ + 6, + 439, + 2037, + 525 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 110641, + "bbox": [ + 632, + 5, + 1290, + 421 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 86462, + "bbox": [ + 6, + 432, + 821, + 159 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 13922, + "bbox": [ + 282, + 204, + 1632, + 367 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 3200, + "bbox": [ + 1143, + 262, + 776, + 120 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 15516, + "bbox": [ + 693, + 265, + 1176, + 313 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 653942, + "bbox": [ + 6, + 5, + 2037, + 461 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 3567, + "bbox": [ + 1378, + 403, + 431, + 84 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 33480, + "bbox": [ + 899, + 5, + 808, + 156 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 442, + "bbox": [ + 1663, + 380, + 19, + 36 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 548, + "bbox": [ + 1718, + 383, + 29, + 22 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 4884, + "bbox": [ + 1278, + 394, + 97, + 69 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 5351, + "bbox": [ + 1194, + 403, + 97, + 72 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 7102, + "bbox": [ + 1100, + 404, + 110, + 85 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 7863, + "bbox": [ + 1003, + 411, + 115, + 101 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 20826, + "bbox": [ + 825, + 407, + 209, + 132 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 53, + "bbox": [ + 1746, + 393, + 11, + 17 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2280, + "bbox": [ + 1747, + 368, + 84, + 86 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 13014, + "bbox": [ + 1802, + 356, + 159, + 139 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 24128, + "bbox": [ + 1892, + 338, + 151, + 216 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 12914, + "bbox": [ + 1330, + 343, + 223, + 86 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000131_000019_gtFine_panoptic.png", + "image_id": "munster_000131_000019", + "segments_info": [ + { + "area": 793410, + "bbox": [ + 6, + 428, + 2037, + 591 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 227139, + "bbox": [ + 6, + 422, + 2037, + 597 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 88835, + "bbox": [ + 6, + 5, + 2037, + 432 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5036, + "bbox": [ + 1419, + 372, + 240, + 38 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 33899, + "bbox": [ + 15, + 31, + 2025, + 553 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9386, + "bbox": [ + 118, + 97, + 1573, + 263 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4217, + "bbox": [ + 1082, + 171, + 941, + 220 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 656174, + "bbox": [ + 6, + 5, + 2037, + 494 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4950, + "bbox": [ + 6, + 424, + 1365, + 91 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 86088, + "bbox": [ + 658, + 5, + 568, + 441 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 385, + "bbox": [ + 991, + 411, + 18, + 23 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 16515, + "bbox": [ + 1644, + 293, + 124, + 275 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 401, + "bbox": [ + 1082, + 396, + 47, + 40 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 508, + "bbox": [ + 1088, + 404, + 25, + 41 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 752, + "bbox": [ + 1098, + 396, + 63, + 56 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 4459, + "bbox": [ + 1114, + 399, + 89, + 70 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 486, + "bbox": [ + 955, + 409, + 31, + 39 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 236, + "bbox": [ + 965, + 419, + 11, + 31 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 189, + "bbox": [ + 838, + 415, + 17, + 21 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 376, + "bbox": [ + 808, + 416, + 32, + 21 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 2796, + "bbox": [ + 901, + 406, + 65, + 52 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2101, + "bbox": [ + 1016, + 404, + 55, + 47 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 781, + "bbox": [ + 1009, + 396, + 47, + 47 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 1133, + "bbox": [ + 942, + 391, + 50, + 53 + ], + "category_id": 27, + "id": 27001, + "iscrowd": 0 + }, + { + "area": 4369, + "bbox": [ + 1665, + 430, + 56, + 145 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000132_000019_gtFine_panoptic.png", + "image_id": "munster_000132_000019", + "segments_info": [ + { + "area": 766916, + "bbox": [ + 6, + 478, + 2037, + 541 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 11904, + "bbox": [ + 6, + 480, + 2037, + 212 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 284851, + "bbox": [ + 6, + 5, + 2037, + 521 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 28465, + "bbox": [ + 22, + 5, + 2013, + 562 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 17033, + "bbox": [ + 350, + 57, + 1190, + 377 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 30431, + "bbox": [ + 6, + 99, + 2037, + 325 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 283148, + "bbox": [ + 6, + 5, + 1801, + 520 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 3485, + "bbox": [ + 6, + 484, + 1414, + 49 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 191691, + "bbox": [ + 253, + 5, + 1790, + 419 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 144, + "bbox": [ + 987, + 476, + 13, + 14 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 152, + "bbox": [ + 979, + 471, + 9, + 21 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1002, + "bbox": [ + 950, + 450, + 29, + 49 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 115, + "bbox": [ + 807, + 457, + 20, + 14 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 147, + "bbox": [ + 748, + 461, + 31, + 11 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 563, + "bbox": [ + 740, + 465, + 30, + 33 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 991, + "bbox": [ + 713, + 465, + 37, + 38 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 411, + "bbox": [ + 649, + 463, + 31, + 48 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1126, + "bbox": [ + 672, + 466, + 52, + 41 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 2182, + "bbox": [ + 763, + 457, + 59, + 46 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1797, + "bbox": [ + 892, + 436, + 65, + 70 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 9329, + "bbox": [ + 818, + 438, + 118, + 98 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1521, + "bbox": [ + 1985, + 417, + 58, + 52 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 32997, + "bbox": [ + 983, + 393, + 218, + 200 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 136833, + "bbox": [ + 198, + 381, + 503, + 345 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 163577, + "bbox": [ + 1458, + 308, + 536, + 373 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000133_000019_gtFine_panoptic.png", + "image_id": "munster_000133_000019", + "segments_info": [ + { + "area": 199, + "bbox": [ + 696, + 461, + 40, + 12 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 2452, + "bbox": [ + 623, + 169, + 246, + 239 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 174410, + "bbox": [ + 736, + 407, + 1307, + 278 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 16708, + "bbox": [ + 74, + 118, + 650, + 502 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 252, + "bbox": [ + 362, + 381, + 30, + 15 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 842181, + "bbox": [ + 6, + 5, + 2037, + 573 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 72308, + "bbox": [ + 6, + 484, + 847, + 192 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 26410, + "bbox": [ + 6, + 5, + 486, + 155 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 430, + "bbox": [ + 38, + 411, + 17, + 31 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1766, + "bbox": [ + 623, + 408, + 32, + 74 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2751, + "bbox": [ + 653, + 400, + 45, + 83 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 7586, + "bbox": [ + 823, + 372, + 68, + 222 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1358, + "bbox": [ + 6, + 397, + 58, + 46 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 194, + "bbox": [ + 60, + 416, + 18, + 24 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 854, + "bbox": [ + 335, + 423, + 61, + 20 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 267, + "bbox": [ + 494, + 423, + 22, + 24 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1635, + "bbox": [ + 551, + 435, + 76, + 29 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 8173, + "bbox": [ + 762, + 446, + 86, + 150 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000134_000019_gtFine_panoptic.png", + "image_id": "munster_000134_000019", + "segments_info": [ + { + "area": 825997, + "bbox": [ + 6, + 461, + 2037, + 558 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 122280, + "bbox": [ + 6, + 470, + 2037, + 239 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 35221, + "bbox": [ + 88, + 5, + 1955, + 475 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1778, + "bbox": [ + 758, + 438, + 184, + 31 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 25507, + "bbox": [ + 21, + 5, + 2022, + 636 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 384, + "bbox": [ + 936, + 366, + 80, + 36 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 10514, + "bbox": [ + 139, + 285, + 1039, + 172 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 717635, + "bbox": [ + 6, + 5, + 2033, + 522 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 36377, + "bbox": [ + 6, + 453, + 2037, + 176 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 94694, + "bbox": [ + 701, + 5, + 457, + 377 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 182, + "bbox": [ + 174, + 457, + 14, + 25 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1085, + "bbox": [ + 235, + 463, + 27, + 63 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2916, + "bbox": [ + 252, + 418, + 36, + 125 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2097, + "bbox": [ + 300, + 418, + 29, + 113 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1488, + "bbox": [ + 366, + 423, + 25, + 110 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2717, + "bbox": [ + 195, + 412, + 48, + 142 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 737, + "bbox": [ + 1139, + 419, + 19, + 61 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 361, + "bbox": [ + 1182, + 422, + 11, + 52 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1056, + "bbox": [ + 1157, + 422, + 26, + 57 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 326, + "bbox": [ + 1050, + 435, + 15, + 35 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 779, + "bbox": [ + 1075, + 428, + 22, + 49 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 8019, + "bbox": [ + 1771, + 357, + 57, + 179 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 399, + "bbox": [ + 1203, + 421, + 13, + 47 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 880, + "bbox": [ + 296, + 449, + 54, + 40 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 351, + "bbox": [ + 142, + 463, + 22, + 31 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2515, + "bbox": [ + 88, + 460, + 68, + 44 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1586, + "bbox": [ + 6, + 465, + 41, + 61 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 142, + "bbox": [ + 1175, + 428, + 59, + 30 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 833, + "bbox": [ + 941, + 441, + 35, + 30 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 4878, + "bbox": [ + 760, + 441, + 90, + 67 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 62367, + "bbox": [ + 385, + 324, + 342, + 224 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 2295, + "bbox": [ + 1358, + 436, + 47, + 72 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 4720, + "bbox": [ + 1492, + 427, + 85, + 88 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 813, + "bbox": [ + 1207, + 448, + 30, + 41 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 893, + "bbox": [ + 1230, + 445, + 30, + 44 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 702, + "bbox": [ + 1259, + 460, + 39, + 35 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000135_000019_gtFine_panoptic.png", + "image_id": "munster_000135_000019", + "segments_info": [ + { + "area": 788749, + "bbox": [ + 6, + 526, + 2037, + 493 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 46445, + "bbox": [ + 6, + 516, + 2037, + 135 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 450784, + "bbox": [ + 6, + 5, + 2037, + 567 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3591, + "bbox": [ + 347, + 509, + 1028, + 88 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 25954, + "bbox": [ + 468, + 5, + 1551, + 603 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9523, + "bbox": [ + 469, + 150, + 1182, + 347 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1905, + "bbox": [ + 1377, + 348, + 42, + 136 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 335140, + "bbox": [ + 6, + 5, + 1437, + 603 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 213693, + "bbox": [ + 6, + 5, + 1485, + 301 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 135, + "bbox": [ + 1376, + 504, + 9, + 22 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 216, + "bbox": [ + 1382, + 499, + 12, + 31 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 425, + "bbox": [ + 1824, + 476, + 27, + 24 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 3757, + "bbox": [ + 1812, + 419, + 74, + 133 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1394, + "bbox": [ + 152, + 504, + 117, + 17 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 953, + "bbox": [ + 264, + 505, + 101, + 13 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 4124, + "bbox": [ + 973, + 503, + 91, + 66 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 59379, + "bbox": [ + 595, + 409, + 399, + 190 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 543, + "bbox": [ + 1429, + 510, + 20, + 37 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 923, + "bbox": [ + 1453, + 505, + 25, + 46 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 5015, + "bbox": [ + 1769, + 479, + 137, + 82 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000136_000019_gtFine_panoptic.png", + "image_id": "munster_000136_000019", + "segments_info": [ + { + "area": 899376, + "bbox": [ + 6, + 438, + 2037, + 581 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 121904, + "bbox": [ + 6, + 431, + 2037, + 505 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 236664, + "bbox": [ + 6, + 5, + 2037, + 503 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 44351, + "bbox": [ + 119, + 410, + 1030, + 107 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 36441, + "bbox": [ + 8, + 5, + 1736, + 520 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 11276, + "bbox": [ + 168, + 5, + 1447, + 330 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 6303, + "bbox": [ + 1695, + 187, + 145, + 129 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 583725, + "bbox": [ + 6, + 5, + 1622, + 442 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 7038, + "bbox": [ + 6, + 383, + 141, + 73 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 1539, + "bbox": [ + 867, + 404, + 41, + 64 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 631, + "bbox": [ + 1591, + 391, + 25, + 48 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 3510, + "bbox": [ + 637, + 386, + 63, + 141 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 3343, + "bbox": [ + 727, + 377, + 60, + 147 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 545, + "bbox": [ + 1499, + 391, + 64, + 12 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 454, + "bbox": [ + 1587, + 412, + 29, + 30 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 3783, + "bbox": [ + 1796, + 401, + 61, + 101 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 4154, + "bbox": [ + 618, + 438, + 61, + 90 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 2949, + "bbox": [ + 728, + 433, + 43, + 93 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000137_000019_gtFine_panoptic.png", + "image_id": "munster_000137_000019", + "segments_info": [ + { + "area": 774015, + "bbox": [ + 6, + 443, + 2037, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 158943, + "bbox": [ + 6, + 449, + 2037, + 391 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 157572, + "bbox": [ + 6, + 5, + 1485, + 507 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 64206, + "bbox": [ + 815, + 398, + 976, + 191 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 16793, + "bbox": [ + 19, + 104, + 2020, + 524 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9618, + "bbox": [ + 6, + 257, + 1129, + 324 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 686409, + "bbox": [ + 242, + 5, + 1801, + 550 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 22385, + "bbox": [ + 626, + 5, + 193, + 228 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 412, + "bbox": [ + 477, + 430, + 17, + 32 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1344, + "bbox": [ + 396, + 425, + 39, + 70 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1403, + "bbox": [ + 208, + 405, + 57, + 144 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 3525, + "bbox": [ + 263, + 419, + 54, + 119 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 5041, + "bbox": [ + 140, + 419, + 65, + 138 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 4733, + "bbox": [ + 208, + 428, + 59, + 127 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 3787, + "bbox": [ + 1136, + 390, + 54, + 129 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 423, + "bbox": [ + 787, + 417, + 15, + 43 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 13726, + "bbox": [ + 471, + 430, + 154, + 116 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1299, + "bbox": [ + 655, + 429, + 48, + 34 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 689, + "bbox": [ + 970, + 403, + 40, + 30 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000138_000019_gtFine_panoptic.png", + "image_id": "munster_000138_000019", + "segments_info": [ + { + "area": 841333, + "bbox": [ + 6, + 448, + 2037, + 571 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 154451, + "bbox": [ + 6, + 440, + 2037, + 306 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 574799, + "bbox": [ + 6, + 5, + 2037, + 479 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 24102, + "bbox": [ + 146, + 128, + 1748, + 414 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 13364, + "bbox": [ + 454, + 172, + 1416, + 232 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 222216, + "bbox": [ + 6, + 5, + 2009, + 539 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 27824, + "bbox": [ + 1214, + 5, + 284, + 173 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1355, + "bbox": [ + 1713, + 403, + 55, + 55 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 524, + "bbox": [ + 1749, + 390, + 21, + 37 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 336, + "bbox": [ + 1457, + 418, + 13, + 33 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 95, + "bbox": [ + 1257, + 406, + 9, + 50 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 284, + "bbox": [ + 1187, + 406, + 9, + 57 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1397, + "bbox": [ + 1190, + 404, + 25, + 79 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 442, + "bbox": [ + 1082, + 412, + 21, + 50 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1110, + "bbox": [ + 1129, + 405, + 20, + 75 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 3130, + "bbox": [ + 2010, + 358, + 33, + 112 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1199, + "bbox": [ + 1040, + 407, + 33, + 78 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1362, + "bbox": [ + 1000, + 411, + 31, + 78 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1271, + "bbox": [ + 880, + 414, + 35, + 75 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 324, + "bbox": [ + 136, + 393, + 19, + 25 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 869, + "bbox": [ + 208, + 372, + 20, + 72 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 391, + "bbox": [ + 300, + 394, + 24, + 32 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 728, + "bbox": [ + 348, + 372, + 32, + 42 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 494, + "bbox": [ + 328, + 389, + 26, + 25 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 415, + "bbox": [ + 380, + 391, + 22, + 30 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 394, + "bbox": [ + 402, + 390, + 21, + 25 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 259, + "bbox": [ + 430, + 390, + 19, + 18 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 133, + "bbox": [ + 449, + 395, + 15, + 11 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 214, + "bbox": [ + 469, + 396, + 21, + 24 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 828, + "bbox": [ + 163, + 397, + 26, + 44 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 1436, + "bbox": [ + 279, + 416, + 35, + 87 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 3855, + "bbox": [ + 708, + 386, + 55, + 137 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 895, + "bbox": [ + 1232, + 406, + 29, + 57 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 567, + "bbox": [ + 1391, + 391, + 25, + 40 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 529, + "bbox": [ + 1258, + 405, + 27, + 42 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 383, + "bbox": [ + 1736, + 406, + 43, + 34 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 14912, + "bbox": [ + 1262, + 407, + 164, + 120 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1465, + "bbox": [ + 1713, + 428, + 42, + 50 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1711, + "bbox": [ + 1769, + 397, + 104, + 68 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 3567, + "bbox": [ + 235, + 444, + 96, + 70 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 3208, + "bbox": [ + 704, + 451, + 55, + 121 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 3113, + "bbox": [ + 1606, + 418, + 58, + 74 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 597, + "bbox": [ + 1235, + 430, + 22, + 49 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 715, + "bbox": [ + 1407, + 423, + 29, + 56 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 373, + "bbox": [ + 1262, + 430, + 19, + 47 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000139_000019_gtFine_panoptic.png", + "image_id": "munster_000139_000019", + "segments_info": [ + { + "area": 629936, + "bbox": [ + 6, + 437, + 2037, + 582 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 170730, + "bbox": [ + 6, + 439, + 2037, + 552 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 798114, + "bbox": [ + 6, + 5, + 2037, + 564 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 7491, + "bbox": [ + 578, + 5, + 1267, + 457 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 19506, + "bbox": [ + 569, + 56, + 1312, + 335 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 5364, + "bbox": [ + 1149, + 241, + 63, + 123 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 21886, + "bbox": [ + 631, + 5, + 267, + 120 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 37197, + "bbox": [ + 1104, + 406, + 520, + 155 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 362, + "bbox": [ + 722, + 410, + 16, + 37 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 129, + "bbox": [ + 736, + 413, + 8, + 21 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 337, + "bbox": [ + 776, + 407, + 16, + 34 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 261, + "bbox": [ + 767, + 414, + 13, + 27 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 286, + "bbox": [ + 788, + 409, + 10, + 38 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 457, + "bbox": [ + 796, + 409, + 16, + 39 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 401, + "bbox": [ + 843, + 402, + 26, + 46 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 281, + "bbox": [ + 868, + 407, + 15, + 36 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 222, + "bbox": [ + 886, + 403, + 15, + 22 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 803, + "bbox": [ + 1116, + 388, + 29, + 44 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1079, + "bbox": [ + 1150, + 383, + 41, + 43 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 3000, + "bbox": [ + 1359, + 365, + 62, + 96 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 5151, + "bbox": [ + 1490, + 346, + 77, + 136 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 6549, + "bbox": [ + 1685, + 327, + 103, + 143 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 551, + "bbox": [ + 645, + 410, + 16, + 51 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 915, + "bbox": [ + 616, + 409, + 24, + 65 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 702, + "bbox": [ + 601, + 407, + 19, + 68 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 771, + "bbox": [ + 587, + 394, + 20, + 91 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 4208, + "bbox": [ + 442, + 389, + 47, + 133 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 3078, + "bbox": [ + 489, + 404, + 43, + 118 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 4157, + "bbox": [ + 394, + 392, + 44, + 133 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 734, + "bbox": [ + 376, + 399, + 19, + 120 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 5396, + "bbox": [ + 266, + 390, + 70, + 142 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 6612, + "bbox": [ + 324, + 374, + 64, + 158 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 6591, + "bbox": [ + 531, + 371, + 67, + 192 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 452, + "bbox": [ + 658, + 405, + 24, + 68 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 5805, + "bbox": [ + 655, + 366, + 74, + 184 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 727, + "bbox": [ + 815, + 403, + 22, + 55 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 44069, + "bbox": [ + 866, + 387, + 272, + 212 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 434, + "bbox": [ + 842, + 421, + 23, + 28 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 471, + "bbox": [ + 733, + 428, + 33, + 21 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 790, + "bbox": [ + 521, + 448, + 23, + 76 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 2077, + "bbox": [ + 532, + 442, + 54, + 133 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 470, + "bbox": [ + 662, + 448, + 15, + 69 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 2730, + "bbox": [ + 656, + 440, + 66, + 127 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 219, + "bbox": [ + 822, + 432, + 9, + 35 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 7646, + "bbox": [ + 1395, + 397, + 204, + 225 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 16927, + "bbox": [ + 1425, + 401, + 234, + 248 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + }, + { + "area": 7751, + "bbox": [ + 1513, + 450, + 165, + 214 + ], + "category_id": 33, + "id": 33009, + "iscrowd": 0 + }, + { + "area": 10342, + "bbox": [ + 1546, + 389, + 261, + 278 + ], + "category_id": 33, + "id": 33010, + "iscrowd": 0 + }, + { + "area": 15083, + "bbox": [ + 1582, + 405, + 206, + 290 + ], + "category_id": 33, + "id": 33011, + "iscrowd": 0 + }, + { + "area": 1332, + "bbox": [ + 1764, + 416, + 71, + 67 + ], + "category_id": 33, + "id": 33012, + "iscrowd": 0 + }, + { + "area": 34929, + "bbox": [ + 1653, + 400, + 314, + 331 + ], + "category_id": 33, + "id": 33013, + "iscrowd": 0 + }, + { + "area": 45493, + "bbox": [ + 1773, + 447, + 270, + 323 + ], + "category_id": 33, + "id": 33014, + "iscrowd": 0 + }, + { + "area": 19927, + "bbox": [ + 1956, + 468, + 87, + 351 + ], + "category_id": 33, + "id": 33015, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000140_000019_gtFine_panoptic.png", + "image_id": "munster_000140_000019", + "segments_info": [ + { + "area": 586496, + "bbox": [ + 6, + 459, + 2037, + 560 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 192463, + "bbox": [ + 6, + 453, + 2037, + 550 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 894661, + "bbox": [ + 6, + 5, + 2037, + 647 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 394, + "bbox": [ + 1278, + 421, + 43, + 48 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 6788, + "bbox": [ + 1040, + 21, + 707, + 473 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 13144, + "bbox": [ + 1029, + 113, + 614, + 287 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 1578, + "bbox": [ + 1076, + 5, + 106, + 30 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 8119, + "bbox": [ + 1346, + 421, + 99, + 138 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 163, + "bbox": [ + 1067, + 407, + 17, + 30 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 135, + "bbox": [ + 1230, + 408, + 8, + 46 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 389, + "bbox": [ + 1237, + 406, + 17, + 54 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 443, + "bbox": [ + 1237, + 427, + 17, + 45 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 387, + "bbox": [ + 1250, + 405, + 14, + 59 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2027, + "bbox": [ + 1317, + 386, + 31, + 114 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1219, + "bbox": [ + 1259, + 402, + 28, + 71 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 3390, + "bbox": [ + 1281, + 377, + 63, + 122 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 907, + "bbox": [ + 971, + 415, + 29, + 61 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1030, + "bbox": [ + 1003, + 409, + 22, + 68 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 233, + "bbox": [ + 1034, + 417, + 16, + 34 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 1942, + "bbox": [ + 906, + 401, + 35, + 87 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 3550, + "bbox": [ + 798, + 382, + 49, + 136 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 5290, + "bbox": [ + 550, + 392, + 57, + 155 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 3487, + "bbox": [ + 613, + 393, + 47, + 155 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 6107, + "bbox": [ + 642, + 381, + 53, + 169 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 1905, + "bbox": [ + 692, + 360, + 55, + 193 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 3760, + "bbox": [ + 1488, + 359, + 95, + 68 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 979, + "bbox": [ + 1211, + 399, + 25, + 69 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 7576, + "bbox": [ + 681, + 367, + 93, + 229 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 8290, + "bbox": [ + 826, + 363, + 84, + 197 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 23044, + "bbox": [ + 1052, + 401, + 176, + 157 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 76, + "bbox": [ + 1223, + 455, + 7, + 25 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 540, + "bbox": [ + 1031, + 438, + 35, + 35 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 5842, + "bbox": [ + 687, + 450, + 75, + 166 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 4044, + "bbox": [ + 840, + 456, + 61, + 149 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 795, + "bbox": [ + 1323, + 424, + 33, + 59 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 1391, + "bbox": [ + 1435, + 428, + 72, + 53 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 6140, + "bbox": [ + 1595, + 400, + 147, + 136 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 5548, + "bbox": [ + 1408, + 418, + 181, + 156 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 33941, + "bbox": [ + 1422, + 426, + 218, + 227 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + }, + { + "area": 15003, + "bbox": [ + 1586, + 453, + 146, + 268 + ], + "category_id": 33, + "id": 33009, + "iscrowd": 0 + }, + { + "area": 6699, + "bbox": [ + 1742, + 442, + 120, + 120 + ], + "category_id": 33, + "id": 33010, + "iscrowd": 0 + }, + { + "area": 19188, + "bbox": [ + 1608, + 403, + 221, + 362 + ], + "category_id": 33, + "id": 33011, + "iscrowd": 0 + }, + { + "area": 36358, + "bbox": [ + 1851, + 383, + 192, + 380 + ], + "category_id": 33, + "id": 33012, + "iscrowd": 0 + }, + { + "area": 34073, + "bbox": [ + 1781, + 421, + 166, + 348 + ], + "category_id": 33, + "id": 33013, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000141_000019_gtFine_panoptic.png", + "image_id": "munster_000141_000019", + "segments_info": [ + { + "area": 688116, + "bbox": [ + 6, + 503, + 2037, + 516 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 36992, + "bbox": [ + 122, + 489, + 1843, + 343 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 793507, + "bbox": [ + 6, + 5, + 2037, + 604 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 35061, + "bbox": [ + 1890, + 265, + 153, + 449 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 6668, + "bbox": [ + 625, + 207, + 1296, + 337 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4572, + "bbox": [ + 462, + 304, + 670, + 166 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 42737, + "bbox": [ + 295, + 419, + 1348, + 238 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 292, + "bbox": [ + 336, + 419, + 8, + 60 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1416, + "bbox": [ + 396, + 387, + 27, + 109 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 4730, + "bbox": [ + 339, + 385, + 63, + 113 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 3648, + "bbox": [ + 409, + 387, + 46, + 110 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1198, + "bbox": [ + 609, + 389, + 24, + 74 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 855, + "bbox": [ + 735, + 382, + 33, + 168 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 277, + "bbox": [ + 1127, + 393, + 22, + 15 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 120, + "bbox": [ + 1183, + 402, + 18, + 10 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 589, + "bbox": [ + 1203, + 396, + 40, + 51 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 392, + "bbox": [ + 1346, + 397, + 22, + 31 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 671, + "bbox": [ + 1325, + 394, + 27, + 36 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 725, + "bbox": [ + 1436, + 397, + 27, + 38 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1428, + "bbox": [ + 1386, + 379, + 42, + 57 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 921, + "bbox": [ + 1529, + 386, + 32, + 44 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 935, + "bbox": [ + 1609, + 391, + 31, + 43 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 1918, + "bbox": [ + 844, + 384, + 49, + 99 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 8957, + "bbox": [ + 698, + 386, + 91, + 221 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 31672, + "bbox": [ + 725, + 346, + 217, + 402 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 64165, + "bbox": [ + 1724, + 264, + 198, + 540 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 45583, + "bbox": [ + 6, + 183, + 123, + 607 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 26443, + "bbox": [ + 1028, + 408, + 232, + 144 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2943, + "bbox": [ + 619, + 460, + 116, + 70 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 5250, + "bbox": [ + 588, + 434, + 112, + 141 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 773, + "bbox": [ + 448, + 466, + 42, + 27 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 7535, + "bbox": [ + 436, + 459, + 231, + 134 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 3320, + "bbox": [ + 1382, + 429, + 62, + 111 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 937, + "bbox": [ + 1427, + 429, + 60, + 72 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 5415, + "bbox": [ + 1427, + 435, + 84, + 110 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 4839, + "bbox": [ + 1529, + 441, + 66, + 106 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + }, + { + "area": 1845, + "bbox": [ + 1584, + 463, + 35, + 93 + ], + "category_id": 33, + "id": 33009, + "iscrowd": 0 + }, + { + "area": 2584, + "bbox": [ + 1602, + 450, + 43, + 106 + ], + "category_id": 33, + "id": 33010, + "iscrowd": 0 + }, + { + "area": 3580, + "bbox": [ + 1633, + 433, + 68, + 121 + ], + "category_id": 33, + "id": 33011, + "iscrowd": 0 + }, + { + "area": 3950, + "bbox": [ + 1658, + 436, + 64, + 108 + ], + "category_id": 33, + "id": 33012, + "iscrowd": 0 + }, + { + "area": 2712, + "bbox": [ + 1683, + 421, + 62, + 133 + ], + "category_id": 33, + "id": 33013, + "iscrowd": 0 + }, + { + "area": 3707, + "bbox": [ + 1917, + 422, + 52, + 114 + ], + "category_id": 33, + "id": 33014, + "iscrowd": 0 + }, + { + "area": 1296, + "bbox": [ + 1943, + 429, + 26, + 106 + ], + "category_id": 33, + "id": 33015, + "iscrowd": 0 + }, + { + "area": 1866, + "bbox": [ + 360, + 494, + 100, + 27 + ], + "category_id": 33, + "id": 33016, + "iscrowd": 0 + }, + { + "area": 7746, + "bbox": [ + 164, + 434, + 304, + 259 + ], + "category_id": 33, + "id": 33018, + "iscrowd": 0 + }, + { + "area": 34451, + "bbox": [ + 105, + 429, + 341, + 284 + ], + "category_id": 33, + "id": 33019, + "iscrowd": 0 + }, + { + "area": 16576, + "bbox": [ + 128, + 450, + 207, + 278 + ], + "category_id": 33, + "id": 33020, + "iscrowd": 0 + }, + { + "area": 37944, + "bbox": [ + 6, + 578, + 208, + 366 + ], + "category_id": 33, + "id": 33021, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000142_000019_gtFine_panoptic.png", + "image_id": "munster_000142_000019", + "segments_info": [ + { + "area": 623647, + "bbox": [ + 6, + 474, + 2037, + 545 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 195188, + "bbox": [ + 6, + 480, + 2037, + 478 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 932869, + "bbox": [ + 6, + 5, + 2037, + 681 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 30270, + "bbox": [ + 513, + 5, + 1403, + 772 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4154, + "bbox": [ + 636, + 326, + 492, + 103 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 2158, + "bbox": [ + 628, + 5, + 157, + 18 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 23923, + "bbox": [ + 1169, + 432, + 264, + 139 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 802, + "bbox": [ + 984, + 415, + 23, + 66 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 5457, + "bbox": [ + 300, + 411, + 74, + 225 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 9129, + "bbox": [ + 333, + 405, + 91, + 237 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 11113, + "bbox": [ + 188, + 432, + 93, + 204 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 9172, + "bbox": [ + 55, + 405, + 80, + 260 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 16116, + "bbox": [ + 82, + 404, + 108, + 272 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 55, + "bbox": [ + 749, + 436, + 9, + 10 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 94, + "bbox": [ + 759, + 429, + 13, + 11 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 132, + "bbox": [ + 862, + 430, + 10, + 57 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 665, + "bbox": [ + 851, + 435, + 18, + 55 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1060, + "bbox": [ + 865, + 427, + 19, + 76 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 40, + "bbox": [ + 786, + 432, + 10, + 5 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 237, + "bbox": [ + 898, + 404, + 25, + 16 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 213, + "bbox": [ + 928, + 403, + 20, + 15 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 1034, + "bbox": [ + 1077, + 416, + 23, + 103 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 247, + "bbox": [ + 1048, + 415, + 37, + 108 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 2455, + "bbox": [ + 1017, + 427, + 33, + 99 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 3062, + "bbox": [ + 1111, + 407, + 45, + 121 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 3253, + "bbox": [ + 1048, + 410, + 46, + 122 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 1146, + "bbox": [ + 818, + 422, + 34, + 72 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 986, + "bbox": [ + 723, + 425, + 29, + 62 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 918, + "bbox": [ + 693, + 431, + 25, + 74 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 1719, + "bbox": [ + 909, + 416, + 41, + 87 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 5114, + "bbox": [ + 593, + 402, + 65, + 152 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 7036, + "bbox": [ + 738, + 437, + 103, + 87 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1274, + "bbox": [ + 644, + 459, + 36, + 62 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 231, + "bbox": [ + 832, + 464, + 11, + 44 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 834, + "bbox": [ + 686, + 458, + 30, + 64 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1195, + "bbox": [ + 913, + 461, + 34, + 66 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 1447, + "bbox": [ + 1139, + 453, + 34, + 66 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 1867, + "bbox": [ + 1452, + 455, + 97, + 140 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 7552, + "bbox": [ + 1460, + 459, + 108, + 126 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 4978, + "bbox": [ + 1515, + 490, + 57, + 112 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + }, + { + "area": 5222, + "bbox": [ + 1689, + 428, + 92, + 141 + ], + "category_id": 33, + "id": 33009, + "iscrowd": 0 + }, + { + "area": 1361, + "bbox": [ + 605, + 462, + 49, + 117 + ], + "category_id": 33, + "id": 33010, + "iscrowd": 0 + }, + { + "area": 11335, + "bbox": [ + 370, + 480, + 111, + 168 + ], + "category_id": 33, + "id": 33011, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000143_000019_gtFine_panoptic.png", + "image_id": "munster_000143_000019", + "segments_info": [ + { + "area": 704060, + "bbox": [ + 6, + 429, + 2037, + 590 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 179027, + "bbox": [ + 6, + 435, + 2037, + 573 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 869419, + "bbox": [ + 6, + 5, + 2037, + 687 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 26100, + "bbox": [ + 192, + 5, + 1628, + 718 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 14722, + "bbox": [ + 205, + 77, + 1642, + 310 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 629, + "bbox": [ + 650, + 5, + 50, + 17 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3209, + "bbox": [ + 505, + 396, + 139, + 108 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 278, + "bbox": [ + 774, + 389, + 14, + 49 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 252, + "bbox": [ + 886, + 389, + 9, + 61 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 773, + "bbox": [ + 870, + 389, + 24, + 61 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 777, + "bbox": [ + 975, + 389, + 17, + 74 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 624, + "bbox": [ + 1038, + 394, + 17, + 70 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1586, + "bbox": [ + 1016, + 385, + 28, + 86 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1717, + "bbox": [ + 991, + 390, + 34, + 82 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1738, + "bbox": [ + 1267, + 380, + 44, + 112 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 502, + "bbox": [ + 1426, + 382, + 26, + 120 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 8076, + "bbox": [ + 1374, + 369, + 91, + 199 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 11125, + "bbox": [ + 1288, + 357, + 91, + 208 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 1128, + "bbox": [ + 1519, + 385, + 16, + 104 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1309, + "bbox": [ + 1211, + 391, + 19, + 84 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 1899, + "bbox": [ + 1781, + 395, + 38, + 108 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 5312, + "bbox": [ + 1707, + 381, + 75, + 155 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 2418, + "bbox": [ + 1810, + 437, + 36, + 105 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 2368, + "bbox": [ + 1984, + 424, + 41, + 122 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 3995, + "bbox": [ + 1955, + 403, + 55, + 141 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 11683, + "bbox": [ + 794, + 342, + 80, + 249 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 10669, + "bbox": [ + 896, + 352, + 85, + 239 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 696, + "bbox": [ + 587, + 381, + 36, + 40 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1096, + "bbox": [ + 783, + 366, + 28, + 79 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 4386, + "bbox": [ + 892, + 334, + 49, + 203 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 904, + "bbox": [ + 561, + 390, + 81, + 43 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 908, + "bbox": [ + 1192, + 417, + 22, + 58 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1307, + "bbox": [ + 1496, + 431, + 37, + 76 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 6476, + "bbox": [ + 1743, + 446, + 79, + 118 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 11922, + "bbox": [ + 528, + 431, + 115, + 132 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 4893, + "bbox": [ + 462, + 423, + 58, + 163 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 5602, + "bbox": [ + 408, + 391, + 98, + 230 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 31153, + "bbox": [ + 325, + 372, + 164, + 339 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 543, + "bbox": [ + 787, + 438, + 16, + 68 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 529, + "bbox": [ + 910, + 489, + 15, + 58 + ], + "category_id": 33, + "id": 33009, + "iscrowd": 0 + }, + { + "area": 435, + "bbox": [ + 2033, + 532, + 10, + 56 + ], + "category_id": 33, + "id": 33010, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000144_000019_gtFine_panoptic.png", + "image_id": "munster_000144_000019", + "segments_info": [ + { + "area": 792206, + "bbox": [ + 6, + 462, + 2037, + 557 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 87763, + "bbox": [ + 6, + 461, + 2037, + 325 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 719628, + "bbox": [ + 6, + 5, + 2037, + 610 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5282, + "bbox": [ + 303, + 168, + 1519, + 358 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 19123, + "bbox": [ + 291, + 165, + 1564, + 226 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 13350, + "bbox": [ + 718, + 5, + 108, + 227 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3223, + "bbox": [ + 1086, + 411, + 177, + 79 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 5340, + "bbox": [ + 462, + 432, + 189, + 63 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 355, + "bbox": [ + 1075, + 414, + 21, + 29 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 183, + "bbox": [ + 1273, + 432, + 10, + 21 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2987, + "bbox": [ + 1283, + 401, + 40, + 112 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 487, + "bbox": [ + 1370, + 390, + 39, + 54 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 4047, + "bbox": [ + 1322, + 399, + 52, + 129 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 4798, + "bbox": [ + 1361, + 402, + 49, + 142 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2785, + "bbox": [ + 1445, + 398, + 36, + 121 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 3924, + "bbox": [ + 1407, + 394, + 52, + 132 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 3170, + "bbox": [ + 1581, + 357, + 56, + 227 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 17034, + "bbox": [ + 1491, + 340, + 101, + 278 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 11183, + "bbox": [ + 1598, + 359, + 76, + 245 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 1170, + "bbox": [ + 1700, + 346, + 60, + 242 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 22825, + "bbox": [ + 1659, + 326, + 111, + 316 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 405, + "bbox": [ + 948, + 420, + 17, + 41 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 713, + "bbox": [ + 963, + 416, + 20, + 52 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 2726, + "bbox": [ + 892, + 397, + 62, + 108 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 2243, + "bbox": [ + 1026, + 399, + 37, + 108 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 2302, + "bbox": [ + 984, + 406, + 35, + 106 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 3045, + "bbox": [ + 843, + 393, + 44, + 115 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 953, + "bbox": [ + 645, + 418, + 21, + 78 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 797, + "bbox": [ + 328, + 399, + 26, + 43 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 311, + "bbox": [ + 349, + 410, + 25, + 31 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 105, + "bbox": [ + 370, + 422, + 4, + 59 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 1045, + "bbox": [ + 237, + 404, + 28, + 56 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 965, + "bbox": [ + 219, + 428, + 27, + 78 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 3571, + "bbox": [ + 32, + 372, + 31, + 151 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 2805, + "bbox": [ + 261, + 386, + 61, + 115 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 32899, + "bbox": [ + 663, + 270, + 174, + 403 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 6517, + "bbox": [ + 1121, + 373, + 63, + 168 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 260, + "bbox": [ + 1096, + 421, + 26, + 14 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 642, + "bbox": [ + 892, + 439, + 30, + 25 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 922, + "bbox": [ + 130, + 435, + 24, + 49 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2238, + "bbox": [ + 542, + 432, + 82, + 57 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 3589, + "bbox": [ + 230, + 433, + 115, + 77 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 2589, + "bbox": [ + 1098, + 452, + 108, + 57 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 29638, + "bbox": [ + 607, + 486, + 195, + 286 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 1224, + "bbox": [ + 1141, + 453, + 24, + 107 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 4173, + "bbox": [ + 316, + 438, + 62, + 92 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 2004, + "bbox": [ + 380, + 447, + 46, + 86 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000145_000019_gtFine_panoptic.png", + "image_id": "munster_000145_000019", + "segments_info": [ + { + "area": 890377, + "bbox": [ + 6, + 454, + 2037, + 565 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 34855, + "bbox": [ + 6, + 463, + 1450, + 185 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 721472, + "bbox": [ + 6, + 5, + 2037, + 554 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 5516, + "bbox": [ + 200, + 167, + 1168, + 322 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7647, + "bbox": [ + 204, + 167, + 1169, + 232 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 32165, + "bbox": [ + 480, + 402, + 1563, + 226 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 5548, + "bbox": [ + 714, + 5, + 82, + 146 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 881, + "bbox": [ + 1220, + 413, + 26, + 54 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 10764, + "bbox": [ + 168, + 408, + 769, + 140 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 900, + "bbox": [ + 741, + 411, + 22, + 58 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 548, + "bbox": [ + 762, + 418, + 18, + 50 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 442, + "bbox": [ + 797, + 426, + 16, + 37 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 413, + "bbox": [ + 811, + 425, + 15, + 40 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 356, + "bbox": [ + 822, + 416, + 15, + 50 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 2042, + "bbox": [ + 833, + 386, + 35, + 94 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 349, + "bbox": [ + 936, + 433, + 13, + 33 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 336, + "bbox": [ + 1072, + 427, + 13, + 38 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 375, + "bbox": [ + 1060, + 426, + 16, + 41 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 887, + "bbox": [ + 1082, + 414, + 22, + 59 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 176, + "bbox": [ + 1135, + 429, + 9, + 32 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 642, + "bbox": [ + 1119, + 414, + 22, + 55 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1253, + "bbox": [ + 1097, + 403, + 34, + 74 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 1637, + "bbox": [ + 1138, + 396, + 26, + 94 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 260, + "bbox": [ + 1191, + 434, + 15, + 31 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 2002, + "bbox": [ + 1164, + 395, + 35, + 96 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 701, + "bbox": [ + 1242, + 410, + 17, + 69 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 1057, + "bbox": [ + 1296, + 416, + 23, + 65 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 5553, + "bbox": [ + 1669, + 355, + 75, + 135 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 3196, + "bbox": [ + 1841, + 369, + 61, + 97 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 1883, + "bbox": [ + 1936, + 440, + 43, + 76 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 4557, + "bbox": [ + 1879, + 433, + 75, + 96 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 250, + "bbox": [ + 572, + 382, + 21, + 24 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 1862, + "bbox": [ + 1196, + 394, + 33, + 94 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 9294, + "bbox": [ + 207, + 365, + 84, + 204 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 7234, + "bbox": [ + 1449, + 377, + 50, + 197 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 14366, + "bbox": [ + 1494, + 339, + 83, + 263 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 279, + "bbox": [ + 779, + 418, + 16, + 31 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 2428, + "bbox": [ + 1030, + 382, + 39, + 104 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2596, + "bbox": [ + 1254, + 382, + 40, + 109 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 10288, + "bbox": [ + 1477, + 384, + 211, + 166 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 418, + "bbox": [ + 1006, + 432, + 27, + 25 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 4790, + "bbox": [ + 1590, + 447, + 80, + 116 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 2036, + "bbox": [ + 1783, + 427, + 124, + 171 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 9961, + "bbox": [ + 1623, + 435, + 228, + 167 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1888, + "bbox": [ + 1933, + 425, + 105, + 94 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 515, + "bbox": [ + 660, + 422, + 26, + 44 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 367, + "bbox": [ + 777, + 439, + 17, + 29 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 395, + "bbox": [ + 695, + 428, + 21, + 36 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 554, + "bbox": [ + 677, + 424, + 25, + 41 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + }, + { + "area": 1830, + "bbox": [ + 408, + 410, + 42, + 89 + ], + "category_id": 33, + "id": 33009, + "iscrowd": 0 + }, + { + "area": 2421, + "bbox": [ + 436, + 406, + 47, + 93 + ], + "category_id": 33, + "id": 33010, + "iscrowd": 0 + }, + { + "area": 580, + "bbox": [ + 1043, + 431, + 14, + 63 + ], + "category_id": 33, + "id": 33011, + "iscrowd": 0 + }, + { + "area": 638, + "bbox": [ + 1265, + 437, + 19, + 66 + ], + "category_id": 33, + "id": 33012, + "iscrowd": 0 + }, + { + "area": 934, + "bbox": [ + 1343, + 435, + 33, + 42 + ], + "category_id": 33, + "id": 33013, + "iscrowd": 0 + }, + { + "area": 888, + "bbox": [ + 1428, + 427, + 25, + 57 + ], + "category_id": 33, + "id": 33014, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000146_000019_gtFine_panoptic.png", + "image_id": "munster_000146_000019", + "segments_info": [ + { + "area": 866082, + "bbox": [ + 6, + 480, + 2037, + 539 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 90943, + "bbox": [ + 6, + 478, + 2037, + 138 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 886654, + "bbox": [ + 6, + 5, + 2037, + 534 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 7081, + "bbox": [ + 121, + 281, + 965, + 257 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4737, + "bbox": [ + 105, + 259, + 819, + 147 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 12285, + "bbox": [ + 253, + 5, + 421, + 120 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 572, + "bbox": [ + 583, + 444, + 46, + 16 + ], + "category_id": 24, + "id": 24, + "iscrowd": 1 + }, + { + "area": 3727, + "bbox": [ + 230, + 441, + 108, + 62 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 239, + "bbox": [ + 285, + 440, + 15, + 21 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 321, + "bbox": [ + 401, + 437, + 14, + 41 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 471, + "bbox": [ + 387, + 435, + 16, + 48 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1193, + "bbox": [ + 369, + 423, + 24, + 75 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 246, + "bbox": [ + 422, + 437, + 11, + 44 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 691, + "bbox": [ + 408, + 436, + 21, + 47 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 275, + "bbox": [ + 446, + 428, + 11, + 54 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 666, + "bbox": [ + 450, + 433, + 19, + 51 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 241, + "bbox": [ + 471, + 428, + 18, + 52 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 786, + "bbox": [ + 479, + 429, + 18, + 60 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 151, + "bbox": [ + 646, + 437, + 14, + 17 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 346, + "bbox": [ + 641, + 445, + 23, + 35 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 85, + "bbox": [ + 712, + 444, + 10, + 17 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 867, + "bbox": [ + 502, + 426, + 23, + 62 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 915, + "bbox": [ + 525, + 426, + 21, + 64 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 218, + "bbox": [ + 573, + 431, + 10, + 32 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 1875, + "bbox": [ + 545, + 421, + 43, + 76 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 376, + "bbox": [ + 803, + 418, + 16, + 81 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 2084, + "bbox": [ + 807, + 410, + 32, + 101 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 649, + "bbox": [ + 930, + 412, + 20, + 93 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 1547, + "bbox": [ + 858, + 419, + 25, + 90 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 2198, + "bbox": [ + 910, + 414, + 36, + 98 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 2136, + "bbox": [ + 882, + 415, + 33, + 93 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 3312, + "bbox": [ + 669, + 412, + 46, + 130 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 1937, + "bbox": [ + 942, + 415, + 32, + 92 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 5203, + "bbox": [ + 1841, + 380, + 52, + 138 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 4284, + "bbox": [ + 1888, + 373, + 53, + 141 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 698, + "bbox": [ + 338, + 429, + 28, + 44 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 961, + "bbox": [ + 743, + 425, + 31, + 59 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2487, + "bbox": [ + 1918, + 434, + 52, + 62 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 138, + "bbox": [ + 350, + 456, + 9, + 25 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 2498, + "bbox": [ + 199, + 429, + 59, + 82 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1753, + "bbox": [ + 169, + 435, + 48, + 81 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 3733, + "bbox": [ + 68, + 445, + 123, + 91 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 6994, + "bbox": [ + 6, + 429, + 142, + 108 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 2096, + "bbox": [ + 6, + 481, + 38, + 73 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 1153, + "bbox": [ + 731, + 450, + 52, + 42 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 2738, + "bbox": [ + 1144, + 448, + 90, + 80 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + }, + { + "area": 2590, + "bbox": [ + 1187, + 457, + 79, + 72 + ], + "category_id": 33, + "id": 33009, + "iscrowd": 0 + }, + { + "area": 1690, + "bbox": [ + 1230, + 444, + 91, + 95 + ], + "category_id": 33, + "id": 33010, + "iscrowd": 0 + }, + { + "area": 4122, + "bbox": [ + 1249, + 446, + 86, + 95 + ], + "category_id": 33, + "id": 33011, + "iscrowd": 0 + }, + { + "area": 4987, + "bbox": [ + 1299, + 439, + 77, + 103 + ], + "category_id": 33, + "id": 33012, + "iscrowd": 0 + }, + { + "area": 8215, + "bbox": [ + 1669, + 408, + 147, + 103 + ], + "category_id": 33, + "id": 33013, + "iscrowd": 0 + }, + { + "area": 4030, + "bbox": [ + 1973, + 392, + 70, + 104 + ], + "category_id": 33, + "id": 33014, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000147_000019_gtFine_panoptic.png", + "image_id": "munster_000147_000019", + "segments_info": [ + { + "area": 756864, + "bbox": [ + 6, + 474, + 2037, + 545 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 120075, + "bbox": [ + 6, + 466, + 2037, + 375 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 783593, + "bbox": [ + 6, + 5, + 2037, + 561 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 18088, + "bbox": [ + 13, + 122, + 1759, + 553 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 15812, + "bbox": [ + 6, + 48, + 1803, + 354 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 46354, + "bbox": [ + 311, + 75, + 271, + 392 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 34968, + "bbox": [ + 165, + 5, + 427, + 174 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 21653, + "bbox": [ + 111, + 425, + 365, + 156 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 152, + "bbox": [ + 552, + 435, + 10, + 49 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 606, + "bbox": [ + 458, + 425, + 25, + 66 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 715, + "bbox": [ + 475, + 430, + 17, + 64 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 975, + "bbox": [ + 511, + 429, + 23, + 64 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1056, + "bbox": [ + 534, + 428, + 20, + 64 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 152, + "bbox": [ + 501, + 434, + 13, + 17 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 420, + "bbox": [ + 598, + 435, + 14, + 59 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1193, + "bbox": [ + 607, + 425, + 26, + 69 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1821, + "bbox": [ + 800, + 412, + 32, + 91 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1026, + "bbox": [ + 778, + 415, + 30, + 86 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1053, + "bbox": [ + 1120, + 406, + 16, + 107 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 4630, + "bbox": [ + 1082, + 395, + 50, + 138 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 5019, + "bbox": [ + 1150, + 362, + 51, + 171 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 5813, + "bbox": [ + 1190, + 376, + 57, + 161 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 6198, + "bbox": [ + 1329, + 365, + 60, + 171 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 7383, + "bbox": [ + 1280, + 368, + 70, + 170 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 10277, + "bbox": [ + 1912, + 327, + 84, + 251 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 6226, + "bbox": [ + 996, + 375, + 59, + 163 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 4432, + "bbox": [ + 948, + 374, + 44, + 156 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 5715, + "bbox": [ + 868, + 379, + 61, + 152 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 2571, + "bbox": [ + 374, + 421, + 98, + 64 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 687, + "bbox": [ + 533, + 445, + 46, + 45 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 7803, + "bbox": [ + 93, + 466, + 163, + 124 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 17245, + "bbox": [ + 152, + 456, + 224, + 132 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 2085, + "bbox": [ + 6, + 430, + 91, + 129 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 8100, + "bbox": [ + 6, + 430, + 85, + 157 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 5096, + "bbox": [ + 1499, + 419, + 73, + 128 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 21946, + "bbox": [ + 1621, + 441, + 129, + 235 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 18528, + "bbox": [ + 1930, + 486, + 113, + 242 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000148_000019_gtFine_panoptic.png", + "image_id": "munster_000148_000019", + "segments_info": [ + { + "area": 140519, + "bbox": [ + 6, + 461, + 2037, + 426 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 862641, + "bbox": [ + 6, + 5, + 2037, + 682 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 7077, + "bbox": [ + 37, + 289, + 1293, + 322 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9233, + "bbox": [ + 10, + 248, + 1186, + 260 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 72144, + "bbox": [ + 830, + 5, + 520, + 491 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 29922, + "bbox": [ + 93, + 5, + 1207, + 222 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 1425, + "bbox": [ + 101, + 466, + 51, + 57 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 285, + "bbox": [ + 214, + 430, + 13, + 35 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 354, + "bbox": [ + 233, + 430, + 14, + 36 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 164, + "bbox": [ + 249, + 424, + 6, + 40 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 606, + "bbox": [ + 292, + 424, + 16, + 51 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1028, + "bbox": [ + 447, + 422, + 23, + 64 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 180, + "bbox": [ + 550, + 464, + 11, + 28 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1060, + "bbox": [ + 551, + 430, + 29, + 72 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 109, + "bbox": [ + 681, + 432, + 10, + 24 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 236, + "bbox": [ + 687, + 432, + 14, + 27 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 96, + "bbox": [ + 725, + 440, + 12, + 17 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 268, + "bbox": [ + 775, + 443, + 24, + 23 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 2116, + "bbox": [ + 621, + 422, + 35, + 95 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 1755, + "bbox": [ + 595, + 431, + 32, + 86 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 1928, + "bbox": [ + 727, + 429, + 29, + 100 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 2342, + "bbox": [ + 751, + 431, + 36, + 107 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 164, + "bbox": [ + 822, + 446, + 15, + 18 + ], + "category_id": 24, + "id": 24015, + "iscrowd": 0 + }, + { + "area": 213, + "bbox": [ + 847, + 447, + 15, + 22 + ], + "category_id": 24, + "id": 24016, + "iscrowd": 0 + }, + { + "area": 2138, + "bbox": [ + 800, + 438, + 35, + 103 + ], + "category_id": 24, + "id": 24017, + "iscrowd": 0 + }, + { + "area": 486, + "bbox": [ + 1273, + 446, + 21, + 29 + ], + "category_id": 24, + "id": 24018, + "iscrowd": 0 + }, + { + "area": 497, + "bbox": [ + 1255, + 448, + 23, + 28 + ], + "category_id": 24, + "id": 24019, + "iscrowd": 0 + }, + { + "area": 972, + "bbox": [ + 1138, + 449, + 24, + 53 + ], + "category_id": 24, + "id": 24020, + "iscrowd": 0 + }, + { + "area": 3997, + "bbox": [ + 1197, + 433, + 48, + 125 + ], + "category_id": 24, + "id": 24021, + "iscrowd": 0 + }, + { + "area": 3444, + "bbox": [ + 1161, + 441, + 45, + 117 + ], + "category_id": 24, + "id": 24022, + "iscrowd": 0 + }, + { + "area": 3078, + "bbox": [ + 1407, + 423, + 42, + 157 + ], + "category_id": 24, + "id": 24023, + "iscrowd": 0 + }, + { + "area": 3873, + "bbox": [ + 1380, + 419, + 39, + 165 + ], + "category_id": 24, + "id": 24024, + "iscrowd": 0 + }, + { + "area": 7343, + "bbox": [ + 1338, + 414, + 63, + 187 + ], + "category_id": 24, + "id": 24025, + "iscrowd": 0 + }, + { + "area": 1895, + "bbox": [ + 692, + 437, + 34, + 91 + ], + "category_id": 24, + "id": 24026, + "iscrowd": 0 + }, + { + "area": 6670, + "bbox": [ + 1294, + 416, + 52, + 185 + ], + "category_id": 24, + "id": 24027, + "iscrowd": 0 + }, + { + "area": 543, + "bbox": [ + 102, + 429, + 37, + 40 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 557, + "bbox": [ + 113, + 432, + 58, + 35 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2751, + "bbox": [ + 126, + 436, + 77, + 58 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 35238, + "bbox": [ + 831, + 413, + 277, + 175 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 1526, + "bbox": [ + 1088, + 480, + 37, + 80 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 218, + "bbox": [ + 591, + 467, + 11, + 32 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 176, + "bbox": [ + 103, + 542, + 18, + 16 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1938, + "bbox": [ + 99, + 499, + 47, + 50 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 363, + "bbox": [ + 1055, + 539, + 46, + 30 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 698, + "bbox": [ + 328, + 441, + 28, + 34 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 752, + "bbox": [ + 365, + 442, + 31, + 38 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 285, + "bbox": [ + 404, + 443, + 16, + 38 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 1018, + "bbox": [ + 411, + 446, + 38, + 37 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 6167, + "bbox": [ + 6, + 476, + 69, + 137 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + }, + { + "area": 991, + "bbox": [ + 663, + 453, + 33, + 51 + ], + "category_id": 33, + "id": 33009, + "iscrowd": 0 + }, + { + "area": 2532, + "bbox": [ + 1106, + 472, + 62, + 81 + ], + "category_id": 33, + "id": 33010, + "iscrowd": 0 + }, + { + "area": 630, + "bbox": [ + 1280, + 499, + 21, + 44 + ], + "category_id": 33, + "id": 33011, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000149_000019_gtFine_panoptic.png", + "image_id": "munster_000149_000019", + "segments_info": [ + { + "area": 603099, + "bbox": [ + 6, + 461, + 1962, + 558 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 226871, + "bbox": [ + 6, + 436, + 2037, + 583 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 935801, + "bbox": [ + 6, + 5, + 2037, + 635 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 2078, + "bbox": [ + 498, + 337, + 595, + 138 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 9173, + "bbox": [ + 473, + 182, + 648, + 211 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 886, + "bbox": [ + 886, + 410, + 75, + 19 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 8329, + "bbox": [ + 749, + 5, + 343, + 126 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 176, + "bbox": [ + 998, + 417, + 15, + 20 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 192, + "bbox": [ + 1010, + 418, + 15, + 19 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 130, + "bbox": [ + 1026, + 419, + 14, + 15 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 179, + "bbox": [ + 1041, + 417, + 20, + 21 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 182, + "bbox": [ + 1067, + 405, + 15, + 19 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 432, + "bbox": [ + 1079, + 402, + 13, + 73 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 524, + "bbox": [ + 1105, + 403, + 17, + 72 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 280, + "bbox": [ + 1133, + 402, + 6, + 71 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1341, + "bbox": [ + 1112, + 401, + 24, + 78 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1680, + "bbox": [ + 1081, + 394, + 31, + 86 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 531, + "bbox": [ + 951, + 412, + 23, + 46 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 1392, + "bbox": [ + 1189, + 390, + 21, + 100 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 681, + "bbox": [ + 1277, + 384, + 25, + 40 + ], + "category_id": 24, + "id": 24012, + "iscrowd": 0 + }, + { + "area": 15191, + "bbox": [ + 1761, + 328, + 89, + 285 + ], + "category_id": 24, + "id": 24013, + "iscrowd": 0 + }, + { + "area": 35547, + "bbox": [ + 14, + 365, + 160, + 375 + ], + "category_id": 24, + "id": 24014, + "iscrowd": 0 + }, + { + "area": 2165, + "bbox": [ + 847, + 406, + 54, + 86 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2486, + "bbox": [ + 810, + 394, + 67, + 114 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2618, + "bbox": [ + 742, + 394, + 117, + 135 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 18011, + "bbox": [ + 628, + 398, + 222, + 171 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 49361, + "bbox": [ + 436, + 431, + 321, + 210 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 414, + "bbox": [ + 964, + 440, + 27, + 23 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 562, + "bbox": [ + 1032, + 438, + 25, + 32 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 4972, + "bbox": [ + 1245, + 421, + 76, + 92 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 6083, + "bbox": [ + 1362, + 422, + 84, + 115 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2866, + "bbox": [ + 1501, + 424, + 86, + 131 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 15294, + "bbox": [ + 1523, + 418, + 172, + 162 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 16616, + "bbox": [ + 128, + 431, + 170, + 212 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 8068, + "bbox": [ + 6, + 538, + 60, + 171 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000150_000019_gtFine_panoptic.png", + "image_id": "munster_000150_000019", + "segments_info": [ + { + "area": 495551, + "bbox": [ + 6, + 436, + 1965, + 583 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 170929, + "bbox": [ + 1173, + 445, + 870, + 574 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 800749, + "bbox": [ + 6, + 5, + 2037, + 686 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 31586, + "bbox": [ + 663, + 5, + 1310, + 820 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 4408, + "bbox": [ + 651, + 272, + 605, + 132 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 16927, + "bbox": [ + 865, + 196, + 409, + 238 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 31731, + "bbox": [ + 944, + 5, + 329, + 209 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 170, + "bbox": [ + 1224, + 410, + 11, + 28 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 127, + "bbox": [ + 1195, + 410, + 8, + 27 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 153, + "bbox": [ + 783, + 403, + 23, + 11 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 198, + "bbox": [ + 687, + 399, + 16, + 17 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 661, + "bbox": [ + 1253, + 389, + 19, + 89 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1356, + "bbox": [ + 1233, + 404, + 33, + 94 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2098, + "bbox": [ + 1199, + 395, + 27, + 105 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1815, + "bbox": [ + 1271, + 382, + 27, + 110 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 6747, + "bbox": [ + 1376, + 390, + 85, + 175 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 8246, + "bbox": [ + 1312, + 367, + 73, + 201 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 780, + "bbox": [ + 917, + 407, + 31, + 51 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 1886, + "bbox": [ + 943, + 397, + 36, + 100 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 506, + "bbox": [ + 980, + 409, + 22, + 38 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1716, + "bbox": [ + 1126, + 412, + 55, + 40 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 207, + "bbox": [ + 1104, + 414, + 25, + 40 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1102, + "bbox": [ + 1086, + 414, + 39, + 44 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 4229, + "bbox": [ + 1016, + 401, + 80, + 68 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 533, + "bbox": [ + 894, + 423, + 61, + 83 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3725, + "bbox": [ + 826, + 423, + 118, + 91 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 960, + "bbox": [ + 967, + 426, + 39, + 62 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1206, + "bbox": [ + 915, + 420, + 74, + 74 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 19454, + "bbox": [ + 668, + 410, + 202, + 173 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 26897, + "bbox": [ + 519, + 412, + 247, + 230 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 104230, + "bbox": [ + 213, + 382, + 443, + 385 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 216763, + "bbox": [ + 6, + 81, + 318, + 938 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 444, + "bbox": [ + 998, + 444, + 23, + 36 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 2428, + "bbox": [ + 841, + 454, + 89, + 79 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1056, + "bbox": [ + 875, + 482, + 38, + 58 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1339, + "bbox": [ + 864, + 482, + 30, + 63 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000151_000019_gtFine_panoptic.png", + "image_id": "munster_000151_000019", + "segments_info": [ + { + "area": 627506, + "bbox": [ + 6, + 458, + 1997, + 561 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 176278, + "bbox": [ + 6, + 453, + 2037, + 566 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 770544, + "bbox": [ + 6, + 5, + 2037, + 653 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 13184, + "bbox": [ + 243, + 107, + 1516, + 484 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 17062, + "bbox": [ + 206, + 119, + 1536, + 377 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 77509, + "bbox": [ + 856, + 5, + 285, + 457 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 29872, + "bbox": [ + 853, + 5, + 434, + 108 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 12522, + "bbox": [ + 1189, + 425, + 361, + 116 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 844, + "bbox": [ + 1317, + 386, + 25, + 56 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 197, + "bbox": [ + 829, + 405, + 14, + 24 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1029, + "bbox": [ + 859, + 404, + 23, + 71 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 613, + "bbox": [ + 882, + 405, + 20, + 75 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1425, + "bbox": [ + 931, + 405, + 26, + 80 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 397, + "bbox": [ + 820, + 412, + 22, + 65 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1766, + "bbox": [ + 797, + 412, + 42, + 78 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1366, + "bbox": [ + 834, + 407, + 29, + 79 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 434, + "bbox": [ + 769, + 417, + 25, + 63 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 414, + "bbox": [ + 772, + 393, + 17, + 38 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1631, + "bbox": [ + 582, + 374, + 49, + 67 + ], + "category_id": 24, + "id": 24010, + "iscrowd": 0 + }, + { + "area": 1421, + "bbox": [ + 891, + 409, + 27, + 81 + ], + "category_id": 24, + "id": 24011, + "iscrowd": 0 + }, + { + "area": 2591, + "bbox": [ + 985, + 380, + 44, + 128 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 69, + "bbox": [ + 1185, + 407, + 22, + 4 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1948, + "bbox": [ + 1150, + 410, + 51, + 68 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 395, + "bbox": [ + 1187, + 406, + 28, + 42 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 2676, + "bbox": [ + 1194, + 402, + 105, + 48 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 203725, + "bbox": [ + 41, + 338, + 643, + 429 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 736, + "bbox": [ + 915, + 427, + 24, + 61 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1389, + "bbox": [ + 979, + 427, + 50, + 91 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 11803, + "bbox": [ + 1211, + 439, + 175, + 107 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 3232, + "bbox": [ + 1413, + 406, + 64, + 132 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000152_000019_gtFine_panoptic.png", + "image_id": "munster_000152_000019", + "segments_info": [ + { + "area": 563228, + "bbox": [ + 6, + 443, + 2037, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 282084, + "bbox": [ + 6, + 428, + 1748, + 560 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 645833, + "bbox": [ + 6, + 5, + 2037, + 525 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19420, + "bbox": [ + 6, + 377, + 1582, + 169 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 5347, + "bbox": [ + 991, + 230, + 780, + 291 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 7710, + "bbox": [ + 1013, + 243, + 653, + 148 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 200805, + "bbox": [ + 6, + 5, + 1590, + 497 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 1585, + "bbox": [ + 1197, + 448, + 180, + 19 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 21659, + "bbox": [ + 889, + 5, + 709, + 123 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 5220, + "bbox": [ + 581, + 404, + 151, + 77 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 236, + "bbox": [ + 1291, + 403, + 7, + 46 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 289, + "bbox": [ + 1308, + 408, + 11, + 43 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 547, + "bbox": [ + 1296, + 408, + 16, + 42 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 553, + "bbox": [ + 1326, + 415, + 17, + 37 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 561, + "bbox": [ + 1174, + 404, + 25, + 41 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 6228, + "bbox": [ + 1228, + 368, + 65, + 177 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2545, + "bbox": [ + 934, + 410, + 95, + 41 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1573, + "bbox": [ + 1149, + 416, + 86, + 42 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1113, + "bbox": [ + 1386, + 419, + 70, + 99 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3104, + "bbox": [ + 1397, + 422, + 58, + 124 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 34952, + "bbox": [ + 1420, + 390, + 227, + 201 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 128302, + "bbox": [ + 1682, + 336, + 361, + 560 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1636, + "bbox": [ + 780, + 409, + 37, + 68 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 690, + "bbox": [ + 1175, + 423, + 30, + 40 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 2476, + "bbox": [ + 1252, + 448, + 42, + 114 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000153_000019_gtFine_panoptic.png", + "image_id": "munster_000153_000019", + "segments_info": [ + { + "area": 758124, + "bbox": [ + 6, + 467, + 2037, + 552 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 116519, + "bbox": [ + 6, + 458, + 1917, + 356 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 474842, + "bbox": [ + 6, + 5, + 2037, + 512 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4076, + "bbox": [ + 6, + 497, + 215, + 50 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 387, + "bbox": [ + 1375, + 378, + 63, + 10 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 14000, + "bbox": [ + 279, + 5, + 1749, + 573 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 24123, + "bbox": [ + 272, + 18, + 1771, + 384 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 348813, + "bbox": [ + 6, + 5, + 1921, + 520 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 13727, + "bbox": [ + 928, + 471, + 329, + 60 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 2115, + "bbox": [ + 211, + 5, + 1569, + 200 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 5932, + "bbox": [ + 1669, + 408, + 256, + 76 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 222, + "bbox": [ + 264, + 418, + 13, + 28 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 208, + "bbox": [ + 295, + 427, + 16, + 34 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 179, + "bbox": [ + 652, + 401, + 13, + 22 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 587, + "bbox": [ + 637, + 397, + 24, + 40 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1324, + "bbox": [ + 781, + 395, + 37, + 62 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 368, + "bbox": [ + 1054, + 394, + 17, + 34 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 252, + "bbox": [ + 979, + 391, + 22, + 21 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 555, + "bbox": [ + 1002, + 389, + 31, + 28 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 772, + "bbox": [ + 242, + 407, + 25, + 59 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 2695, + "bbox": [ + 1816, + 370, + 62, + 124 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 1642, + "bbox": [ + 500, + 396, + 46, + 86 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1000, + "bbox": [ + 607, + 400, + 37, + 78 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1925, + "bbox": [ + 740, + 390, + 47, + 78 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 5703, + "bbox": [ + 1807, + 410, + 63, + 142 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 11595, + "bbox": [ + 1438, + 342, + 92, + 232 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 5466, + "bbox": [ + 534, + 416, + 137, + 68 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1636, + "bbox": [ + 1009, + 415, + 75, + 67 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 17620, + "bbox": [ + 786, + 406, + 277, + 93 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1008, + "bbox": [ + 1571, + 451, + 36, + 39 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 773, + "bbox": [ + 439, + 433, + 28, + 40 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1171, + "bbox": [ + 505, + 433, + 36, + 72 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 289, + "bbox": [ + 609, + 452, + 10, + 34 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 890, + "bbox": [ + 624, + 431, + 20, + 58 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 1355, + "bbox": [ + 738, + 428, + 45, + 63 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 3431, + "bbox": [ + 1734, + 414, + 74, + 73 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 4156, + "bbox": [ + 1637, + 416, + 87, + 69 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + }, + { + "area": 4201, + "bbox": [ + 1462, + 448, + 54, + 150 + ], + "category_id": 33, + "id": 33008, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000154_000019_gtFine_panoptic.png", + "image_id": "munster_000154_000019", + "segments_info": [ + { + "area": 584177, + "bbox": [ + 6, + 472, + 1911, + 547 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 160417, + "bbox": [ + 6, + 465, + 2037, + 554 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 664775, + "bbox": [ + 6, + 5, + 2037, + 602 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 23554, + "bbox": [ + 6, + 128, + 1439, + 562 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 679, + "bbox": [ + 1070, + 311, + 20, + 38 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 15787, + "bbox": [ + 6, + 139, + 1449, + 289 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 167251, + "bbox": [ + 640, + 5, + 688, + 449 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 32097, + "bbox": [ + 80, + 513, + 661, + 153 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 146, + "bbox": [ + 743, + 164, + 450, + 50 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 181, + "bbox": [ + 1201, + 428, + 11, + 33 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 663, + "bbox": [ + 1223, + 427, + 20, + 55 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1402, + "bbox": [ + 1682, + 306, + 48, + 49 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 251, + "bbox": [ + 999, + 445, + 15, + 27 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 245, + "bbox": [ + 1117, + 434, + 15, + 32 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 430, + "bbox": [ + 1030, + 436, + 16, + 44 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 7959, + "bbox": [ + 1126, + 369, + 80, + 189 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 1556, + "bbox": [ + 929, + 445, + 58, + 38 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 120202, + "bbox": [ + 1412, + 349, + 486, + 347 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3365, + "bbox": [ + 769, + 439, + 58, + 87 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 11944, + "bbox": [ + 810, + 425, + 137, + 121 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 9465, + "bbox": [ + 660, + 424, + 127, + 125 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 10851, + "bbox": [ + 601, + 436, + 109, + 136 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 54102, + "bbox": [ + 271, + 391, + 342, + 220 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 92500, + "bbox": [ + 1857, + 269, + 186, + 629 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 201, + "bbox": [ + 996, + 463, + 20, + 17 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 99, + "bbox": [ + 1121, + 461, + 13, + 13 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 593, + "bbox": [ + 1024, + 452, + 41, + 30 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 3305, + "bbox": [ + 1160, + 457, + 46, + 121 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 2870, + "bbox": [ + 1281, + 429, + 47, + 107 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 2055, + "bbox": [ + 1256, + 447, + 29, + 91 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000155_000019_gtFine_panoptic.png", + "image_id": "munster_000155_000019", + "segments_info": [ + { + "area": 1024900, + "bbox": [ + 6, + 425, + 2037, + 594 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 14642, + "bbox": [ + 8, + 403, + 2035, + 107 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 594770, + "bbox": [ + 243, + 5, + 1800, + 454 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 16167, + "bbox": [ + 967, + 440, + 1076, + 55 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 23231, + "bbox": [ + 25, + 5, + 1716, + 500 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 15775, + "bbox": [ + 238, + 26, + 1539, + 320 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 6196, + "bbox": [ + 21, + 200, + 1496, + 283 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 202429, + "bbox": [ + 6, + 5, + 2037, + 453 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 4827, + "bbox": [ + 6, + 437, + 2037, + 38 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 5278, + "bbox": [ + 1524, + 5, + 278, + 36 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 4622, + "bbox": [ + 400, + 399, + 351, + 41 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 467, + "bbox": [ + 787, + 388, + 22, + 52 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 334, + "bbox": [ + 777, + 385, + 12, + 49 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 1144, + "bbox": [ + 901, + 389, + 26, + 60 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 1991, + "bbox": [ + 1887, + 408, + 35, + 83 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2831, + "bbox": [ + 1836, + 381, + 47, + 118 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 1638, + "bbox": [ + 1103, + 381, + 33, + 84 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2042, + "bbox": [ + 1205, + 382, + 35, + 90 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 2541, + "bbox": [ + 1254, + 374, + 48, + 108 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 2390, + "bbox": [ + 1356, + 381, + 35, + 96 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 2387, + "bbox": [ + 1322, + 379, + 40, + 100 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 234, + "bbox": [ + 6, + 365, + 8, + 38 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 702, + "bbox": [ + 367, + 378, + 25, + 41 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 35, + "bbox": [ + 845, + 396, + 5, + 12 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 3683, + "bbox": [ + 422, + 352, + 50, + 129 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 925, + "bbox": [ + 755, + 380, + 25, + 66 + ], + "category_id": 25, + "id": 25005, + "iscrowd": 0 + }, + { + "area": 553, + "bbox": [ + 825, + 381, + 23, + 52 + ], + "category_id": 25, + "id": 25006, + "iscrowd": 0 + }, + { + "area": 5329, + "bbox": [ + 1571, + 353, + 70, + 146 + ], + "category_id": 25, + "id": 25007, + "iscrowd": 0 + }, + { + "area": 3254, + "bbox": [ + 898, + 399, + 117, + 45 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2477, + "bbox": [ + 1012, + 398, + 68, + 45 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 5116, + "bbox": [ + 548, + 394, + 138, + 51 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 144, + "bbox": [ + 6, + 401, + 6, + 30 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 700, + "bbox": [ + 363, + 401, + 37, + 36 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 323, + "bbox": [ + 810, + 408, + 35, + 44 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1336, + "bbox": [ + 145, + 393, + 45, + 41 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1493, + "bbox": [ + 428, + 405, + 33, + 99 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 890, + "bbox": [ + 750, + 412, + 36, + 42 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + }, + { + "area": 4128, + "bbox": [ + 1564, + 420, + 104, + 98 + ], + "category_id": 33, + "id": 33006, + "iscrowd": 0 + }, + { + "area": 1807, + "bbox": [ + 1859, + 428, + 36, + 73 + ], + "category_id": 33, + "id": 33007, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000156_000019_gtFine_panoptic.png", + "image_id": "munster_000156_000019", + "segments_info": [ + { + "area": 815747, + "bbox": [ + 6, + 435, + 2037, + 584 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 50573, + "bbox": [ + 11, + 428, + 2032, + 218 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 521971, + "bbox": [ + 288, + 5, + 1755, + 506 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 10475, + "bbox": [ + 1610, + 495, + 433, + 56 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 22956, + "bbox": [ + 6, + 5, + 1625, + 639 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 24554, + "bbox": [ + 335, + 162, + 1265, + 237 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 16564, + "bbox": [ + 6, + 81, + 1551, + 556 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 330567, + "bbox": [ + 6, + 5, + 2037, + 483 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 22736, + "bbox": [ + 12, + 476, + 2031, + 72 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 12186, + "bbox": [ + 984, + 440, + 839, + 64 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 45, + "bbox": [ + 154, + 412, + 3, + 21 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 462, + "bbox": [ + 160, + 402, + 16, + 38 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 549, + "bbox": [ + 61, + 399, + 16, + 49 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 882, + "bbox": [ + 75, + 396, + 25, + 52 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 287, + "bbox": [ + 452, + 408, + 13, + 33 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 500, + "bbox": [ + 462, + 403, + 16, + 43 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 635, + "bbox": [ + 477, + 401, + 20, + 43 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 438, + "bbox": [ + 509, + 402, + 13, + 42 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 1497, + "bbox": [ + 880, + 412, + 46, + 69 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 1442, + "bbox": [ + 944, + 410, + 31, + 80 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1157, + "bbox": [ + 836, + 412, + 35, + 68 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 16391, + "bbox": [ + 302, + 332, + 153, + 269 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 1072, + "bbox": [ + 298, + 408, + 49, + 33 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 6567, + "bbox": [ + 1547, + 445, + 163, + 53 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 3589, + "bbox": [ + 1707, + 449, + 116, + 48 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 40318, + "bbox": [ + 986, + 440, + 269, + 185 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 569, + "bbox": [ + 1225, + 451, + 30, + 37 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 290, + "bbox": [ + 1197, + 450, + 33, + 31 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 346, + "bbox": [ + 925, + 450, + 63, + 31 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1384, + "bbox": [ + 932, + 441, + 54, + 53 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 1246, + "bbox": [ + 829, + 446, + 46, + 45 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 31622, + "bbox": [ + 258, + 445, + 232, + 255 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000157_000019_gtFine_panoptic.png", + "image_id": "munster_000157_000019", + "segments_info": [ + { + "area": 721414, + "bbox": [ + 6, + 454, + 2037, + 565 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 107681, + "bbox": [ + 403, + 444, + 1640, + 331 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 610612, + "bbox": [ + 6, + 5, + 1984, + 505 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 10894, + "bbox": [ + 1469, + 483, + 574, + 151 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 24732, + "bbox": [ + 168, + 5, + 1570, + 609 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2816, + "bbox": [ + 118, + 315, + 1089, + 84 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 199449, + "bbox": [ + 789, + 5, + 1254, + 464 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 50236, + "bbox": [ + 1437, + 421, + 606, + 231 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 65897, + "bbox": [ + 606, + 5, + 395, + 251 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 626, + "bbox": [ + 1031, + 411, + 26, + 34 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 371, + "bbox": [ + 671, + 424, + 19, + 27 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 191, + "bbox": [ + 685, + 425, + 13, + 27 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 482, + "bbox": [ + 691, + 423, + 26, + 32 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 277, + "bbox": [ + 707, + 425, + 11, + 36 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 354, + "bbox": [ + 1102, + 408, + 58, + 12 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 231, + "bbox": [ + 1131, + 410, + 35, + 10 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 542, + "bbox": [ + 1159, + 405, + 78, + 15 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 426, + "bbox": [ + 975, + 414, + 50, + 12 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 39689, + "bbox": [ + 128, + 427, + 286, + 216 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 97923, + "bbox": [ + 6, + 372, + 236, + 561 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 474, + "bbox": [ + 938, + 410, + 92, + 14 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 36206, + "bbox": [ + 694, + 328, + 245, + 180 + ], + "category_id": 28, + "id": 28001, + "iscrowd": 0 + }, + { + "area": 825, + "bbox": [ + 1032, + 443, + 25, + 40 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000158_000019_gtFine_panoptic.png", + "image_id": "munster_000158_000019", + "segments_info": [ + { + "area": 713130, + "bbox": [ + 6, + 486, + 2037, + 533 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 175072, + "bbox": [ + 6, + 477, + 2037, + 427 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 350203, + "bbox": [ + 6, + 5, + 1536, + 515 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 13357, + "bbox": [ + 596, + 5, + 1101, + 545 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 22, + "bbox": [ + 635, + 415, + 6, + 4 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4870, + "bbox": [ + 1042, + 260, + 801, + 137 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 485703, + "bbox": [ + 673, + 5, + 1370, + 596 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 14484, + "bbox": [ + 1359, + 493, + 684, + 110 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 101030, + "bbox": [ + 442, + 5, + 598, + 347 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3227, + "bbox": [ + 394, + 461, + 72, + 70 + ], + "category_id": 33, + "id": 33, + "iscrowd": 1 + }, + { + "area": 476, + "bbox": [ + 902, + 430, + 24, + 34 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 843, + "bbox": [ + 1244, + 432, + 49, + 22 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1392, + "bbox": [ + 998, + 441, + 52, + 41 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 422, + "bbox": [ + 1701, + 394, + 44, + 16 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 373, + "bbox": [ + 1172, + 430, + 30, + 19 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2543, + "bbox": [ + 1295, + 407, + 122, + 47 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 3791, + "bbox": [ + 1419, + 402, + 141, + 34 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 699, + "bbox": [ + 1529, + 412, + 61, + 22 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 2288, + "bbox": [ + 1580, + 401, + 149, + 31 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 7707, + "bbox": [ + 1709, + 350, + 264, + 75 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 290, + "bbox": [ + 586, + 440, + 44, + 10 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 1257, + "bbox": [ + 572, + 447, + 48, + 66 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 70, + "bbox": [ + 745, + 455, + 11, + 11 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 10233, + "bbox": [ + 455, + 445, + 136, + 92 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 5830, + "bbox": [ + 753, + 440, + 95, + 76 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 19066, + "bbox": [ + 588, + 435, + 177, + 137 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 19778, + "bbox": [ + 195, + 442, + 183, + 152 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 39267, + "bbox": [ + 6, + 436, + 237, + 199 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 733, + "bbox": [ + 907, + 458, + 22, + 38 + ], + "category_id": 32, + "id": 32000, + "iscrowd": 0 + }, + { + "area": 379, + "bbox": [ + 1031, + 447, + 19, + 35 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1130, + "bbox": [ + 1041, + 441, + 33, + 51 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000159_000019_gtFine_panoptic.png", + "image_id": "munster_000159_000019", + "segments_info": [ + { + "area": 580527, + "bbox": [ + 6, + 462, + 2037, + 557 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 134580, + "bbox": [ + 6, + 455, + 2037, + 564 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 236426, + "bbox": [ + 6, + 5, + 2037, + 486 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 3388, + "bbox": [ + 62, + 513, + 477, + 44 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 64388, + "bbox": [ + 435, + 5, + 1579, + 718 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 63736, + "bbox": [ + 336, + 31, + 1620, + 382 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 54739, + "bbox": [ + 354, + 225, + 1598, + 397 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 385506, + "bbox": [ + 6, + 5, + 1906, + 558 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 121907, + "bbox": [ + 6, + 459, + 2037, + 390 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 180607, + "bbox": [ + 6, + 5, + 2037, + 246 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 287, + "bbox": [ + 865, + 437, + 15, + 27 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 1330, + "bbox": [ + 617, + 446, + 40, + 43 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 606, + "bbox": [ + 1354, + 428, + 24, + 55 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 733, + "bbox": [ + 1375, + 426, + 30, + 59 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 577, + "bbox": [ + 1111, + 421, + 29, + 36 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 421, + "bbox": [ + 1087, + 423, + 13, + 56 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 1557, + "bbox": [ + 1186, + 420, + 39, + 85 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 636, + "bbox": [ + 236, + 459, + 28, + 50 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 40371, + "bbox": [ + 601, + 445, + 425, + 139 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 644, + "bbox": [ + 233, + 481, + 35, + 33 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 578, + "bbox": [ + 1077, + 454, + 24, + 37 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1601, + "bbox": [ + 1112, + 448, + 45, + 47 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 2383, + "bbox": [ + 1165, + 452, + 77, + 59 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000160_000019_gtFine_panoptic.png", + "image_id": "munster_000160_000019", + "segments_info": [ + { + "area": 688715, + "bbox": [ + 6, + 416, + 1892, + 603 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 15026, + "bbox": [ + 568, + 426, + 1475, + 96 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 368576, + "bbox": [ + 6, + 5, + 1461, + 514 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 4145, + "bbox": [ + 985, + 394, + 200, + 52 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 81294, + "bbox": [ + 368, + 5, + 1665, + 771 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2184, + "bbox": [ + 815, + 285, + 618, + 121 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 4594, + "bbox": [ + 805, + 298, + 555, + 96 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 419612, + "bbox": [ + 605, + 5, + 1438, + 567 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 226122, + "bbox": [ + 1219, + 422, + 824, + 597 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 26216, + "bbox": [ + 555, + 5, + 431, + 182 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 78, + "bbox": [ + 969, + 419, + 14, + 10 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 280, + "bbox": [ + 981, + 417, + 15, + 29 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2204, + "bbox": [ + 1912, + 346, + 35, + 135 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 759, + "bbox": [ + 1528, + 382, + 16, + 81 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 1884, + "bbox": [ + 1538, + 380, + 35, + 83 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 307, + "bbox": [ + 1386, + 395, + 10, + 41 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 460, + "bbox": [ + 1343, + 403, + 18, + 43 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 1032, + "bbox": [ + 590, + 415, + 30, + 68 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 317, + "bbox": [ + 1233, + 410, + 20, + 21 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 344, + "bbox": [ + 1212, + 408, + 23, + 24 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 294, + "bbox": [ + 1151, + 415, + 33, + 23 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 922, + "bbox": [ + 1181, + 411, + 41, + 28 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 323, + "bbox": [ + 1109, + 419, + 18, + 24 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1134, + "bbox": [ + 1126, + 418, + 47, + 30 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 3149, + "bbox": [ + 1051, + 396, + 60, + 63 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 3327, + "bbox": [ + 918, + 424, + 74, + 57 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 10140, + "bbox": [ + 729, + 421, + 141, + 92 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 348, + "bbox": [ + 1641, + 392, + 18, + 23 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 580, + "bbox": [ + 1571, + 393, + 26, + 29 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 4288, + "bbox": [ + 1784, + 358, + 84, + 70 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1677, + "bbox": [ + 2008, + 373, + 35, + 59 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 266, + "bbox": [ + 1399, + 399, + 22, + 14 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 175, + "bbox": [ + 1327, + 403, + 11, + 17 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 25708, + "bbox": [ + 6, + 439, + 181, + 190 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 57434, + "bbox": [ + 183, + 407, + 390, + 209 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 10261, + "bbox": [ + 747, + 370, + 170, + 112 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 1072, + "bbox": [ + 562, + 440, + 31, + 47 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 215, + "bbox": [ + 605, + 445, + 20, + 48 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 592, + "bbox": [ + 585, + 447, + 28, + 46 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000161_000019_gtFine_panoptic.png", + "image_id": "munster_000161_000019", + "segments_info": [ + { + "area": 627064, + "bbox": [ + 6, + 459, + 1874, + 560 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 281104, + "bbox": [ + 6, + 455, + 2037, + 564 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 458130, + "bbox": [ + 6, + 5, + 943, + 574 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 19719, + "bbox": [ + 373, + 5, + 1230, + 599 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 160, + "bbox": [ + 1280, + 396, + 15, + 12 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 533707, + "bbox": [ + 911, + 5, + 1132, + 670 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 33536, + "bbox": [ + 876, + 5, + 368, + 181 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 505, + "bbox": [ + 1174, + 420, + 14, + 43 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 4142, + "bbox": [ + 1466, + 389, + 49, + 130 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 718, + "bbox": [ + 1382, + 405, + 24, + 65 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 468, + "bbox": [ + 1390, + 434, + 15, + 40 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1257, + "bbox": [ + 829, + 435, + 37, + 56 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 3739, + "bbox": [ + 594, + 430, + 59, + 90 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 7428, + "bbox": [ + 266, + 430, + 91, + 130 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 10056, + "bbox": [ + 108, + 444, + 114, + 131 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000162_000019_gtFine_panoptic.png", + "image_id": "munster_000162_000019", + "segments_info": [ + { + "area": 818491, + "bbox": [ + 6, + 449, + 2037, + 570 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 55120, + "bbox": [ + 6, + 434, + 2037, + 228 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 759255, + "bbox": [ + 6, + 5, + 1965, + 619 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 1199, + "bbox": [ + 1619, + 428, + 29, + 51 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 21342, + "bbox": [ + 100, + 5, + 1894, + 638 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 5084, + "bbox": [ + 915, + 5, + 297, + 357 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 6644, + "bbox": [ + 109, + 274, + 1899, + 141 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 219939, + "bbox": [ + 1130, + 5, + 913, + 484 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2186, + "bbox": [ + 1768, + 5, + 214, + 20 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 3342, + "bbox": [ + 575, + 426, + 73, + 168 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 402, + "bbox": [ + 1824, + 414, + 13, + 42 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 2180, + "bbox": [ + 1980, + 389, + 27, + 104 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 4668, + "bbox": [ + 1521, + 424, + 90, + 64 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 15537, + "bbox": [ + 1363, + 418, + 168, + 122 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 33463, + "bbox": [ + 1090, + 426, + 249, + 173 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1759, + "bbox": [ + 1334, + 439, + 51, + 57 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 506, + "bbox": [ + 1815, + 417, + 33, + 38 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 936, + "bbox": [ + 2003, + 425, + 21, + 66 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 1988, + "bbox": [ + 1080, + 447, + 58, + 77 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 11785, + "bbox": [ + 523, + 488, + 165, + 112 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + }, + { + "area": 2422, + "bbox": [ + 1013, + 448, + 38, + 86 + ], + "category_id": 33, + "id": 33005, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000163_000019_gtFine_panoptic.png", + "image_id": "munster_000163_000019", + "segments_info": [ + { + "area": 493962, + "bbox": [ + 6, + 440, + 1921, + 579 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 201214, + "bbox": [ + 1038, + 439, + 1005, + 580 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 213444, + "bbox": [ + 1060, + 5, + 983, + 500 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 12174, + "bbox": [ + 1118, + 403, + 241, + 92 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 19740, + "bbox": [ + 103, + 5, + 1611, + 614 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1084, + "bbox": [ + 1027, + 303, + 128, + 105 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 654344, + "bbox": [ + 6, + 5, + 2037, + 588 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 38967, + "bbox": [ + 1018, + 440, + 1025, + 215 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 3018, + "bbox": [ + 428, + 45, + 512, + 215 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 480, + "bbox": [ + 1055, + 403, + 18, + 39 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 12115, + "bbox": [ + 709, + 416, + 142, + 112 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 5362, + "bbox": [ + 924, + 412, + 101, + 73 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 37768, + "bbox": [ + 476, + 380, + 256, + 263 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 262503, + "bbox": [ + 6, + 369, + 591, + 537 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 356, + "bbox": [ + 946, + 401, + 30, + 16 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 230, + "bbox": [ + 1062, + 425, + 9, + 31 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000164_000019_gtFine_panoptic.png", + "image_id": "munster_000164_000019", + "segments_info": [ + { + "area": 708676, + "bbox": [ + 6, + 443, + 2037, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 38295, + "bbox": [ + 6, + 443, + 1950, + 153 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 132103, + "bbox": [ + 6, + 5, + 1930, + 413 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 32532, + "bbox": [ + 6, + 401, + 1925, + 141 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 16582, + "bbox": [ + 62, + 13, + 1689, + 595 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1119, + "bbox": [ + 976, + 325, + 287, + 135 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 825927, + "bbox": [ + 6, + 5, + 2037, + 800 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 197452, + "bbox": [ + 6, + 441, + 2037, + 536 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 3988, + "bbox": [ + 1658, + 364, + 159, + 38 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2498, + "bbox": [ + 1035, + 426, + 62, + 49 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2576, + "bbox": [ + 896, + 424, + 63, + 53 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 9113, + "bbox": [ + 737, + 429, + 126, + 91 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2804, + "bbox": [ + 1041, + 373, + 56, + 72 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000165_000019_gtFine_panoptic.png", + "image_id": "munster_000165_000019", + "segments_info": [ + { + "area": 731343, + "bbox": [ + 6, + 431, + 2037, + 588 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 25918, + "bbox": [ + 6, + 431, + 835, + 166 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 26781, + "bbox": [ + 334, + 5, + 1619, + 592 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 312, + "bbox": [ + 899, + 360, + 139, + 47 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 17666, + "bbox": [ + 974, + 261, + 650, + 172 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 834836, + "bbox": [ + 6, + 5, + 2037, + 489 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 135142, + "bbox": [ + 6, + 409, + 918, + 397 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 1774, + "bbox": [ + 6, + 5, + 109, + 72 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 314, + "bbox": [ + 795, + 405, + 15, + 30 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 143, + "bbox": [ + 903, + 408, + 7, + 25 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 186, + "bbox": [ + 1252, + 407, + 16, + 15 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 264, + "bbox": [ + 1237, + 400, + 17, + 21 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 453, + "bbox": [ + 1348, + 398, + 27, + 29 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 285, + "bbox": [ + 1513, + 405, + 21, + 17 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 439, + "bbox": [ + 1549, + 403, + 28, + 27 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 3052, + "bbox": [ + 1793, + 366, + 80, + 60 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 5015, + "bbox": [ + 1872, + 358, + 86, + 98 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 481, + "bbox": [ + 816, + 398, + 16, + 39 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 140, + "bbox": [ + 931, + 414, + 33, + 17 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 350, + "bbox": [ + 984, + 415, + 26, + 16 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 461, + "bbox": [ + 944, + 414, + 32, + 18 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 256, + "bbox": [ + 1152, + 410, + 46, + 12 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 576, + "bbox": [ + 1114, + 421, + 28, + 41 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 994, + "bbox": [ + 1128, + 420, + 46, + 47 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1482, + "bbox": [ + 1147, + 421, + 53, + 53 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 1471, + "bbox": [ + 1180, + 422, + 47, + 57 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 1718, + "bbox": [ + 1203, + 421, + 66, + 70 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 1510, + "bbox": [ + 1224, + 423, + 65, + 75 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 3698, + "bbox": [ + 1239, + 425, + 82, + 88 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 2208, + "bbox": [ + 1282, + 429, + 64, + 100 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 9327, + "bbox": [ + 1308, + 421, + 123, + 126 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 23566, + "bbox": [ + 1383, + 418, + 219, + 163 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 72505, + "bbox": [ + 1525, + 420, + 457, + 251 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 57606, + "bbox": [ + 1793, + 463, + 250, + 317 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 10303, + "bbox": [ + 989, + 408, + 133, + 104 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 78, + "bbox": [ + 821, + 420, + 5, + 24 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000166_000019_gtFine_panoptic.png", + "image_id": "munster_000166_000019", + "segments_info": [ + { + "area": 898982, + "bbox": [ + 6, + 452, + 2037, + 567 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 54429, + "bbox": [ + 6, + 446, + 2037, + 198 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 1192, + "bbox": [ + 7, + 207, + 106, + 44 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 32355, + "bbox": [ + 17, + 5, + 1976, + 575 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 17431, + "bbox": [ + 143, + 192, + 1830, + 206 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 26232, + "bbox": [ + 70, + 138, + 1940, + 422 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 571921, + "bbox": [ + 6, + 5, + 2037, + 484 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 14407, + "bbox": [ + 6, + 408, + 1980, + 93 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 173991, + "bbox": [ + 6, + 5, + 1394, + 244 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 487, + "bbox": [ + 530, + 434, + 25, + 54 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 453, + "bbox": [ + 359, + 439, + 17, + 38 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 681, + "bbox": [ + 1039, + 408, + 19, + 51 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 936, + "bbox": [ + 2006, + 354, + 37, + 54 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 2540, + "bbox": [ + 1076, + 377, + 57, + 139 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 5091, + "bbox": [ + 1045, + 367, + 98, + 151 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 1797, + "bbox": [ + 935, + 358, + 76, + 154 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 5781, + "bbox": [ + 962, + 368, + 63, + 156 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 2294, + "bbox": [ + 1663, + 353, + 36, + 120 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 476, + "bbox": [ + 1730, + 361, + 25, + 52 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 7845, + "bbox": [ + 1742, + 315, + 76, + 204 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 1824, + "bbox": [ + 676, + 393, + 83, + 88 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 908, + "bbox": [ + 494, + 442, + 64, + 38 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 15468, + "bbox": [ + 536, + 394, + 221, + 92 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1696, + "bbox": [ + 34, + 442, + 52, + 62 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 15481, + "bbox": [ + 68, + 417, + 241, + 89 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 1913, + "bbox": [ + 1662, + 385, + 190, + 82 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 17526, + "bbox": [ + 1125, + 371, + 233, + 97 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 12482, + "bbox": [ + 1991, + 555, + 52, + 344 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 50043, + "bbox": [ + 1413, + 374, + 288, + 217 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 9539, + "bbox": [ + 336, + 404, + 208, + 73 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 2529, + "bbox": [ + 1712, + 405, + 114, + 68 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 7843, + "bbox": [ + 1980, + 376, + 63, + 164 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 2996, + "bbox": [ + 1760, + 413, + 40, + 121 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000167_000019_gtFine_panoptic.png", + "image_id": "munster_000167_000019", + "segments_info": [ + { + "area": 603207, + "bbox": [ + 6, + 484, + 2037, + 535 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 62939, + "bbox": [ + 6, + 469, + 2037, + 267 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 162602, + "bbox": [ + 6, + 50, + 2037, + 464 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 36541, + "bbox": [ + 6, + 5, + 1974, + 599 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 17998, + "bbox": [ + 536, + 114, + 172, + 159 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 1413, + "bbox": [ + 447, + 311, + 950, + 117 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 439783, + "bbox": [ + 6, + 5, + 2037, + 516 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 163681, + "bbox": [ + 18, + 5, + 1676, + 322 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 6017, + "bbox": [ + 1777, + 349, + 72, + 191 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 4896, + "bbox": [ + 1474, + 333, + 57, + 272 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 8251, + "bbox": [ + 1617, + 345, + 88, + 167 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 2746, + "bbox": [ + 267, + 345, + 83, + 298 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 8093, + "bbox": [ + 294, + 315, + 96, + 338 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 13940, + "bbox": [ + 505, + 365, + 98, + 235 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 8952, + "bbox": [ + 899, + 369, + 95, + 218 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 6056, + "bbox": [ + 822, + 336, + 86, + 275 + ], + "category_id": 24, + "id": 24007, + "iscrowd": 0 + }, + { + "area": 16493, + "bbox": [ + 770, + 340, + 114, + 282 + ], + "category_id": 24, + "id": 24008, + "iscrowd": 0 + }, + { + "area": 613, + "bbox": [ + 1099, + 434, + 48, + 169 + ], + "category_id": 24, + "id": 24009, + "iscrowd": 0 + }, + { + "area": 16187, + "bbox": [ + 290, + 325, + 167, + 266 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 19044, + "bbox": [ + 1031, + 308, + 148, + 251 + ], + "category_id": 25, + "id": 25002, + "iscrowd": 0 + }, + { + "area": 17887, + "bbox": [ + 1490, + 318, + 127, + 309 + ], + "category_id": 25, + "id": 25003, + "iscrowd": 0 + }, + { + "area": 18810, + "bbox": [ + 1670, + 314, + 156, + 373 + ], + "category_id": 25, + "id": 25004, + "iscrowd": 0 + }, + { + "area": 421, + "bbox": [ + 1320, + 398, + 25, + 23 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1125, + "bbox": [ + 1829, + 412, + 39, + 37 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 175, + "bbox": [ + 1852, + 433, + 16, + 15 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 509, + "bbox": [ + 167, + 426, + 77, + 55 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 787, + "bbox": [ + 173, + 435, + 55, + 47 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 7236, + "bbox": [ + 642, + 422, + 104, + 110 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 11480, + "bbox": [ + 449, + 408, + 223, + 159 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 8381, + "bbox": [ + 186, + 427, + 94, + 152 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 45335, + "bbox": [ + 194, + 444, + 340, + 225 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 28036, + "bbox": [ + 962, + 451, + 298, + 179 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 24356, + "bbox": [ + 1352, + 428, + 322, + 217 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + }, + { + "area": 51020, + "bbox": [ + 1549, + 460, + 409, + 244 + ], + "category_id": 33, + "id": 33003, + "iscrowd": 0 + }, + { + "area": 9311, + "bbox": [ + 1974, + 390, + 69, + 232 + ], + "category_id": 33, + "id": 33004, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000168_000019_gtFine_panoptic.png", + "image_id": "munster_000168_000019", + "segments_info": [ + { + "area": 792895, + "bbox": [ + 6, + 464, + 2037, + 555 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 39256, + "bbox": [ + 659, + 444, + 1384, + 201 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 107237, + "bbox": [ + 213, + 153, + 1228, + 309 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 12372, + "bbox": [ + 1721, + 421, + 322, + 66 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 28180, + "bbox": [ + 33, + 5, + 1974, + 596 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 760, + "bbox": [ + 297, + 321, + 292, + 90 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 52976, + "bbox": [ + 660, + 38, + 1288, + 358 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 330581, + "bbox": [ + 6, + 5, + 2037, + 528 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 2241, + "bbox": [ + 1926, + 508, + 117, + 43 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 300454, + "bbox": [ + 6, + 5, + 1906, + 269 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 694, + "bbox": [ + 671, + 410, + 19, + 51 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 7787, + "bbox": [ + 800, + 405, + 115, + 80 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 2560, + "bbox": [ + 918, + 423, + 52, + 69 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 15152, + "bbox": [ + 963, + 347, + 198, + 148 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 933, + "bbox": [ + 1156, + 411, + 77, + 36 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 14041, + "bbox": [ + 1211, + 404, + 167, + 118 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 23792, + "bbox": [ + 1011, + 413, + 214, + 140 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 14767, + "bbox": [ + 1346, + 400, + 186, + 150 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 43370, + "bbox": [ + 1452, + 392, + 310, + 184 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 7614, + "bbox": [ + 582, + 416, + 95, + 133 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 30783, + "bbox": [ + 6, + 423, + 225, + 202 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 134012, + "bbox": [ + 139, + 373, + 477, + 350 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000169_000019_gtFine_panoptic.png", + "image_id": "munster_000169_000019", + "segments_info": [ + { + "area": 964356, + "bbox": [ + 6, + 446, + 2037, + 573 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 52131, + "bbox": [ + 6, + 447, + 2037, + 133 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 250433, + "bbox": [ + 6, + 5, + 2037, + 528 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 29907, + "bbox": [ + 53, + 5, + 1832, + 530 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 16854, + "bbox": [ + 251, + 100, + 1521, + 310 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 32853, + "bbox": [ + 326, + 108, + 1607, + 378 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 295903, + "bbox": [ + 99, + 50, + 1787, + 465 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 259782, + "bbox": [ + 97, + 5, + 1750, + 356 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 103, + "bbox": [ + 1053, + 412, + 12, + 13 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 431, + "bbox": [ + 542, + 430, + 13, + 42 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 766, + "bbox": [ + 503, + 427, + 26, + 47 + ], + "category_id": 24, + "id": 24002, + "iscrowd": 0 + }, + { + "area": 210, + "bbox": [ + 449, + 423, + 16, + 31 + ], + "category_id": 24, + "id": 24003, + "iscrowd": 0 + }, + { + "area": 489, + "bbox": [ + 437, + 426, + 14, + 48 + ], + "category_id": 24, + "id": 24004, + "iscrowd": 0 + }, + { + "area": 414, + "bbox": [ + 380, + 423, + 21, + 68 + ], + "category_id": 24, + "id": 24005, + "iscrowd": 0 + }, + { + "area": 2030, + "bbox": [ + 1794, + 382, + 33, + 91 + ], + "category_id": 24, + "id": 24006, + "iscrowd": 0 + }, + { + "area": 113, + "bbox": [ + 576, + 424, + 16, + 30 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1552, + "bbox": [ + 1681, + 383, + 40, + 89 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 553, + "bbox": [ + 1300, + 427, + 31, + 21 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 585, + "bbox": [ + 1183, + 421, + 29, + 31 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 1693, + "bbox": [ + 1246, + 418, + 56, + 42 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1857, + "bbox": [ + 1200, + 425, + 61, + 39 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 189, + "bbox": [ + 831, + 425, + 28, + 18 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 233, + "bbox": [ + 716, + 433, + 27, + 14 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 1089, + "bbox": [ + 1141, + 412, + 47, + 41 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 267, + "bbox": [ + 1018, + 419, + 35, + 13 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 393, + "bbox": [ + 694, + 433, + 41, + 32 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 484, + "bbox": [ + 688, + 442, + 36, + 23 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 182, + "bbox": [ + 556, + 432, + 25, + 17 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 680, + "bbox": [ + 522, + 437, + 57, + 32 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 377, + "bbox": [ + 520, + 443, + 24, + 24 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 398, + "bbox": [ + 358, + 424, + 49, + 18 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 341, + "bbox": [ + 353, + 442, + 20, + 28 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 86, + "bbox": [ + 397, + 441, + 10, + 13 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 91, + "bbox": [ + 325, + 440, + 11, + 27 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 907, + "bbox": [ + 290, + 439, + 41, + 31 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 1126, + "bbox": [ + 258, + 439, + 44, + 34 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 606, + "bbox": [ + 215, + 442, + 37, + 26 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 5048, + "bbox": [ + 733, + 410, + 99, + 62 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 1589, + "bbox": [ + 829, + 430, + 48, + 39 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 5163, + "bbox": [ + 875, + 404, + 161, + 68 + ], + "category_id": 26, + "id": 26022, + "iscrowd": 0 + }, + { + "area": 7445, + "bbox": [ + 1004, + 412, + 161, + 62 + ], + "category_id": 26, + "id": 26023, + "iscrowd": 0 + }, + { + "area": 8778, + "bbox": [ + 577, + 411, + 121, + 95 + ], + "category_id": 26, + "id": 26024, + "iscrowd": 0 + }, + { + "area": 471, + "bbox": [ + 1826, + 397, + 59, + 14 + ], + "category_id": 26, + "id": 26025, + "iscrowd": 0 + }, + { + "area": 1456, + "bbox": [ + 2021, + 392, + 22, + 82 + ], + "category_id": 26, + "id": 26026, + "iscrowd": 0 + }, + { + "area": 16224, + "bbox": [ + 1476, + 392, + 167, + 120 + ], + "category_id": 26, + "id": 26027, + "iscrowd": 0 + }, + { + "area": 395, + "bbox": [ + 1397, + 418, + 22, + 32 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 221, + "bbox": [ + 570, + 449, + 13, + 26 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 1753, + "bbox": [ + 364, + 453, + 73, + 41 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + }, + { + "area": 1023, + "bbox": [ + 1694, + 419, + 27, + 53 + ], + "category_id": 33, + "id": 33002, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000170_000019_gtFine_panoptic.png", + "image_id": "munster_000170_000019", + "segments_info": [ + { + "area": 882907, + "bbox": [ + 6, + 443, + 2037, + 576 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 2994, + "bbox": [ + 704, + 376, + 178, + 46 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 16870, + "bbox": [ + 6, + 5, + 1316, + 464 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 1345, + "bbox": [ + 683, + 308, + 395, + 103 + ], + "category_id": 19, + "id": 19, + "iscrowd": 0 + }, + { + "area": 50406, + "bbox": [ + 6, + 5, + 1332, + 438 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 823651, + "bbox": [ + 7, + 5, + 2036, + 759 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 165094, + "bbox": [ + 6, + 7, + 1132, + 341 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 60, + "bbox": [ + 821, + 409, + 9, + 9 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 238, + "bbox": [ + 967, + 415, + 17, + 28 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 156, + "bbox": [ + 1032, + 418, + 9, + 23 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 166, + "bbox": [ + 910, + 423, + 26, + 23 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 1073, + "bbox": [ + 864, + 410, + 52, + 44 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 372, + "bbox": [ + 815, + 417, + 21, + 37 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 1948, + "bbox": [ + 832, + 414, + 56, + 41 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 2090, + "bbox": [ + 765, + 413, + 61, + 42 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 8104, + "bbox": [ + 513, + 414, + 131, + 77 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 20483, + "bbox": [ + 6, + 399, + 170, + 155 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 529, + "bbox": [ + 957, + 427, + 40, + 23 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 369, + "bbox": [ + 1020, + 429, + 32, + 19 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000171_000019_gtFine_panoptic.png", + "image_id": "munster_000171_000019", + "segments_info": [ + { + "area": 759539, + "bbox": [ + 6, + 450, + 2037, + 569 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 132443, + "bbox": [ + 153, + 445, + 1890, + 429 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 20053, + "bbox": [ + 6, + 178, + 159, + 143 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 61390, + "bbox": [ + 6, + 318, + 585, + 169 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 11027, + "bbox": [ + 61, + 64, + 1244, + 452 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 330, + "bbox": [ + 888, + 399, + 152, + 32 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 711699, + "bbox": [ + 131, + 5, + 1912, + 557 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 52599, + "bbox": [ + 1164, + 463, + 879, + 202 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 125634, + "bbox": [ + 6, + 5, + 1128, + 362 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 475, + "bbox": [ + 668, + 436, + 35, + 20 + ], + "category_id": 26, + "id": 26, + "iscrowd": 1 + }, + { + "area": 498, + "bbox": [ + 1028, + 418, + 18, + 48 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 844, + "bbox": [ + 1388, + 412, + 18, + 61 + ], + "category_id": 24, + "id": 24001, + "iscrowd": 0 + }, + { + "area": 295, + "bbox": [ + 998, + 422, + 17, + 33 + ], + "category_id": 25, + "id": 25000, + "iscrowd": 0 + }, + { + "area": 1106, + "bbox": [ + 1349, + 400, + 29, + 72 + ], + "category_id": 25, + "id": 25001, + "iscrowd": 0 + }, + { + "area": 2858, + "bbox": [ + 701, + 433, + 69, + 50 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 30106, + "bbox": [ + 6, + 403, + 168, + 220 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 2490, + "bbox": [ + 738, + 374, + 67, + 92 + ], + "category_id": 27, + "id": 27000, + "iscrowd": 0 + }, + { + "area": 11009, + "bbox": [ + 1049, + 379, + 128, + 101 + ], + "category_id": 28, + "id": 28000, + "iscrowd": 0 + }, + { + "area": 242, + "bbox": [ + 1000, + 438, + 13, + 26 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + }, + { + "area": 677, + "bbox": [ + 1356, + 444, + 20, + 41 + ], + "category_id": 33, + "id": 33001, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000172_000019_gtFine_panoptic.png", + "image_id": "munster_000172_000019", + "segments_info": [ + { + "area": 717970, + "bbox": [ + 6, + 428, + 2037, + 591 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 6165, + "bbox": [ + 337, + 454, + 500, + 113 + ], + "category_id": 8, + "id": 8, + "iscrowd": 0 + }, + { + "area": 279029, + "bbox": [ + 6, + 5, + 1237, + 481 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 331, + "bbox": [ + 730, + 427, + 42, + 35 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 10348, + "bbox": [ + 363, + 5, + 1107, + 512 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 2756, + "bbox": [ + 342, + 326, + 1142, + 46 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 465332, + "bbox": [ + 6, + 5, + 2037, + 487 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 5759, + "bbox": [ + 640, + 429, + 477, + 105 + ], + "category_id": 22, + "id": 22, + "iscrowd": 0 + }, + { + "area": 79532, + "bbox": [ + 679, + 5, + 492, + 258 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 303, + "bbox": [ + 1370, + 392, + 26, + 17 + ], + "category_id": 24, + "id": 24000, + "iscrowd": 0 + }, + { + "area": 324, + "bbox": [ + 992, + 412, + 40, + 11 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 132, + "bbox": [ + 1057, + 418, + 8, + 23 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 362, + "bbox": [ + 1028, + 418, + 27, + 27 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 432, + "bbox": [ + 1016, + 422, + 27, + 28 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + }, + { + "area": 778, + "bbox": [ + 990, + 421, + 37, + 35 + ], + "category_id": 26, + "id": 26004, + "iscrowd": 0 + }, + { + "area": 427, + "bbox": [ + 983, + 423, + 21, + 38 + ], + "category_id": 26, + "id": 26005, + "iscrowd": 0 + }, + { + "area": 265, + "bbox": [ + 969, + 418, + 22, + 33 + ], + "category_id": 26, + "id": 26006, + "iscrowd": 0 + }, + { + "area": 4273, + "bbox": [ + 657, + 408, + 85, + 64 + ], + "category_id": 26, + "id": 26007, + "iscrowd": 0 + }, + { + "area": 5758, + "bbox": [ + 428, + 397, + 233, + 78 + ], + "category_id": 26, + "id": 26008, + "iscrowd": 0 + }, + { + "area": 323, + "bbox": [ + 1177, + 420, + 22, + 32 + ], + "category_id": 26, + "id": 26009, + "iscrowd": 0 + }, + { + "area": 407, + "bbox": [ + 1185, + 419, + 26, + 43 + ], + "category_id": 26, + "id": 26010, + "iscrowd": 0 + }, + { + "area": 591, + "bbox": [ + 1195, + 417, + 29, + 52 + ], + "category_id": 26, + "id": 26011, + "iscrowd": 0 + }, + { + "area": 1948, + "bbox": [ + 1207, + 412, + 65, + 73 + ], + "category_id": 26, + "id": 26012, + "iscrowd": 0 + }, + { + "area": 1071, + "bbox": [ + 1231, + 416, + 38, + 78 + ], + "category_id": 26, + "id": 26013, + "iscrowd": 0 + }, + { + "area": 3614, + "bbox": [ + 1243, + 404, + 107, + 107 + ], + "category_id": 26, + "id": 26014, + "iscrowd": 0 + }, + { + "area": 2826, + "bbox": [ + 1271, + 411, + 68, + 113 + ], + "category_id": 26, + "id": 26015, + "iscrowd": 0 + }, + { + "area": 5147, + "bbox": [ + 1291, + 406, + 101, + 149 + ], + "category_id": 26, + "id": 26016, + "iscrowd": 0 + }, + { + "area": 41517, + "bbox": [ + 1326, + 406, + 283, + 189 + ], + "category_id": 26, + "id": 26017, + "iscrowd": 0 + }, + { + "area": 184852, + "bbox": [ + 1557, + 380, + 486, + 468 + ], + "category_id": 26, + "id": 26018, + "iscrowd": 0 + }, + { + "area": 17270, + "bbox": [ + 830, + 413, + 165, + 125 + ], + "category_id": 26, + "id": 26019, + "iscrowd": 0 + }, + { + "area": 29234, + "bbox": [ + 391, + 416, + 251, + 148 + ], + "category_id": 26, + "id": 26020, + "iscrowd": 0 + }, + { + "area": 68681, + "bbox": [ + 6, + 411, + 340, + 256 + ], + "category_id": 26, + "id": 26021, + "iscrowd": 0 + }, + { + "area": 806, + "bbox": [ + 742, + 427, + 31, + 37 + ], + "category_id": 33, + "id": 33000, + "iscrowd": 0 + } + ] + }, + { + "file_name": "munster_000173_000019_gtFine_panoptic.png", + "image_id": "munster_000173_000019", + "segments_info": [ + { + "area": 402423, + "bbox": [ + 117, + 498, + 1896, + 521 + ], + "category_id": 7, + "id": 7, + "iscrowd": 0 + }, + { + "area": 671721, + "bbox": [ + 127, + 5, + 1916, + 748 + ], + "category_id": 11, + "id": 11, + "iscrowd": 0 + }, + { + "area": 6614, + "bbox": [ + 962, + 455, + 267, + 119 + ], + "category_id": 12, + "id": 12, + "iscrowd": 0 + }, + { + "area": 4927, + "bbox": [ + 798, + 508, + 100, + 119 + ], + "category_id": 13, + "id": 13, + "iscrowd": 0 + }, + { + "area": 8235, + "bbox": [ + 507, + 175, + 662, + 490 + ], + "category_id": 17, + "id": 17, + "iscrowd": 0 + }, + { + "area": 566, + "bbox": [ + 1151, + 417, + 26, + 26 + ], + "category_id": 20, + "id": 20, + "iscrowd": 0 + }, + { + "area": 299598, + "bbox": [ + 6, + 5, + 1223, + 621 + ], + "category_id": 21, + "id": 21, + "iscrowd": 0 + }, + { + "area": 210591, + "bbox": [ + 367, + 5, + 1015, + 331 + ], + "category_id": 23, + "id": 23, + "iscrowd": 0 + }, + { + "area": 7320, + "bbox": [ + 1158, + 468, + 74, + 129 + ], + "category_id": 26, + "id": 26000, + "iscrowd": 0 + }, + { + "area": 3855, + "bbox": [ + 419, + 470, + 182, + 35 + ], + "category_id": 26, + "id": 26001, + "iscrowd": 0 + }, + { + "area": 53670, + "bbox": [ + 126, + 483, + 363, + 194 + ], + "category_id": 26, + "id": 26002, + "iscrowd": 0 + }, + { + "area": 3171, + "bbox": [ + 2016, + 593, + 27, + 217 + ], + "category_id": 26, + "id": 26003, + "iscrowd": 0 + } + ] + } + ], + "categories": [ + { + "color": [ + 128, + 64, + 128 + ], + "id": 7, + "isthing": 0, + "name": "road", + "supercategory": "flat" + }, + { + "color": [ + 244, + 35, + 232 + ], + "id": 8, + "isthing": 0, + "name": "sidewalk", + "supercategory": "flat" + }, + { + "color": [ + 70, + 70, + 70 + ], + "id": 11, + "isthing": 0, + "name": "building", + "supercategory": "construction" + }, + { + "color": [ + 102, + 102, + 156 + ], + "id": 12, + "isthing": 0, + "name": "wall", + "supercategory": "construction" + }, + { + "color": [ + 190, + 153, + 153 + ], + "id": 13, + "isthing": 0, + "name": "fence", + "supercategory": "construction" + }, + { + "color": [ + 153, + 153, + 153 + ], + "id": 17, + "isthing": 0, + "name": "pole", + "supercategory": "object" + }, + { + "color": [ + 250, + 170, + 30 + ], + "id": 19, + "isthing": 0, + "name": "traffic light", + "supercategory": "object" + }, + { + "color": [ + 220, + 220, + 0 + ], + "id": 20, + "isthing": 0, + "name": "traffic sign", + "supercategory": "object" + }, + { + "color": [ + 107, + 142, + 35 + ], + "id": 21, + "isthing": 0, + "name": "vegetation", + "supercategory": "nature" + }, + { + "color": [ + 152, + 251, + 152 + ], + "id": 22, + "isthing": 0, + "name": "terrain", + "supercategory": "nature" + }, + { + "color": [ + 70, + 130, + 180 + ], + "id": 23, + "isthing": 0, + "name": "sky", + "supercategory": "sky" + }, + { + "color": [ + 220, + 20, + 60 + ], + "id": 24, + "isthing": 1, + "name": "person", + "supercategory": "human" + }, + { + "color": [ + 255, + 0, + 0 + ], + "id": 25, + "isthing": 1, + "name": "rider", + "supercategory": "human" + }, + { + "color": [ + 0, + 0, + 142 + ], + "id": 26, + "isthing": 1, + "name": "car", + "supercategory": "vehicle" + }, + { + "color": [ + 0, + 0, + 70 + ], + "id": 27, + "isthing": 1, + "name": "truck", + "supercategory": "vehicle" + }, + { + "color": [ + 0, + 60, + 100 + ], + "id": 28, + "isthing": 1, + "name": "bus", + "supercategory": "vehicle" + }, + { + "color": [ + 0, + 80, + 100 + ], + "id": 31, + "isthing": 1, + "name": "train", + "supercategory": "vehicle" + }, + { + "color": [ + 0, + 0, + 230 + ], + "id": 32, + "isthing": 1, + "name": "motorcycle", + "supercategory": "vehicle" + }, + { + "color": [ + 119, + 11, + 32 + ], + "id": 33, + "isthing": 1, + "name": "bicycle", + "supercategory": "vehicle" + } + ], + "images": [ + { + "file_name": "frankfurt_000000_000294_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_000294", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_000576_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_000576", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_001016_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_001016", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_001236_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_001236", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_001751_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_001751", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_002196_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_002196", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_002963_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_002963", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_003025_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_003025", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_003357_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_003357", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_003920_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_003920", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_004617_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_004617", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_005543_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_005543", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_005898_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_005898", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_006589_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_006589", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_007365_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_007365", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_008206_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_008206", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_008451_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_008451", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_009291_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_009291", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_009561_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_009561", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_009688_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_009688", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_009969_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_009969", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_010351_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_010351", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_010763_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_010763", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_011007_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_011007", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_011074_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_011074", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_011461_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_011461", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_011810_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_011810", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_012009_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_012009", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_012121_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_012121", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_012868_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_012868", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_013067_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_013067", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_013240_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_013240", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_013382_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_013382", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_013942_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_013942", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_014480_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_014480", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_015389_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_015389", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_015676_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_015676", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_016005_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_016005", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_016286_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_016286", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_017228_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_017228", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_017476_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_017476", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_018797_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_018797", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_019607_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_019607", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_020215_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_020215", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_020321_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_020321", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_020880_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_020880", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_021667_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_021667", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_021879_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_021879", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_022254_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_022254", + "width": 2048 + }, + { + "file_name": "frankfurt_000000_022797_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000000_022797", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_000538_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_000538", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_001464_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_001464", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_002512_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_002512", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_002646_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_002646", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_002759_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_002759", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_003056_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_003056", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_003588_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_003588", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_004327_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_004327", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_004736_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_004736", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_004859_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_004859", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_005184_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_005184", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_005410_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_005410", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_005703_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_005703", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_005898_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_005898", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_007285_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_007285", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_007407_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_007407", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_007622_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_007622", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_007857_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_007857", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_007973_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_007973", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_008200_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_008200", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_008688_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_008688", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_009058_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_009058", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_009504_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_009504", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_009854_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_009854", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_010156_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_010156", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_010444_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_010444", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_010600_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_010600", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_010830_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_010830", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_011162_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_011162", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_011715_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_011715", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_011835_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_011835", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_012038_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_012038", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_012519_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_012519", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_012699_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_012699", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_012738_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_012738", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_012870_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_012870", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_013016_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_013016", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_013496_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_013496", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_013710_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_013710", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_014221_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_014221", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_014406_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_014406", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_014565_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_014565", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_014741_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_014741", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_015091_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_015091", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_015328_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_015328", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_015768_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_015768", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_016029_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_016029", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_016273_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_016273", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_016462_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_016462", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_017101_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_017101", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_017459_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_017459", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_017842_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_017842", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_018113_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_018113", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_019698_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_019698", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_019854_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_019854", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_019969_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_019969", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_020046_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_020046", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_020287_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_020287", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_020693_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_020693", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_021406_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_021406", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_021825_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_021825", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_023235_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_023235", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_023369_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_023369", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_023769_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_023769", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_024927_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_024927", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_025512_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_025512", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_025713_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_025713", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_025921_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_025921", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_027325_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_027325", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_028232_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_028232", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_028335_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_028335", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_028590_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_028590", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_028854_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_028854", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_029086_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_029086", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_029236_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_029236", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_029600_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_029600", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_030067_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_030067", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_030310_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_030310", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_030669_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_030669", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_031266_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_031266", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_031416_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_031416", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_032018_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_032018", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_032556_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_032556", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_032711_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_032711", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_032942_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_032942", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_033655_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_033655", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_034047_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_034047", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_034816_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_034816", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_035144_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_035144", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_035864_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_035864", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_037705_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_037705", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_038245_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_038245", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_038418_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_038418", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_038645_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_038645", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_038844_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_038844", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_039895_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_039895", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_040575_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_040575", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_040732_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_040732", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_041074_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_041074", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_041354_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_041354", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_041517_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_041517", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_041664_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_041664", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_042098_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_042098", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_042384_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_042384", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_042733_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_042733", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_043395_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_043395", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_043564_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_043564", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_044227_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_044227", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_044413_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_044413", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_044525_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_044525", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_044658_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_044658", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_044787_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_044787", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_046126_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_046126", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_046272_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_046272", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_046504_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_046504", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_046779_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_046779", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_047178_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_047178", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_047552_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_047552", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_048196_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_048196", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_048355_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_048355", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_048654_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_048654", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_049078_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_049078", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_049209_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_049209", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_049298_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_049298", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_049698_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_049698", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_049770_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_049770", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_050149_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_050149", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_050686_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_050686", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_051516_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_051516", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_051737_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_051737", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_051807_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_051807", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_052120_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_052120", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_052594_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_052594", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_053102_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_053102", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_054077_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_054077", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_054219_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_054219", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_054415_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_054415", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_054640_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_054640", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_054884_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_054884", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_055062_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_055062", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_055172_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_055172", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_055306_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_055306", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_055387_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_055387", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_055538_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_055538", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_055603_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_055603", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_055709_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_055709", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_056580_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_056580", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_057181_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_057181", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_057478_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_057478", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_057954_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_057954", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_058057_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_058057", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_058176_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_058176", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_058504_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_058504", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_058914_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_058914", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_059119_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_059119", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_059642_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_059642", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_059789_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_059789", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_060135_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_060135", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_060422_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_060422", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_060545_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_060545", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_060906_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_060906", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_061682_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_061682", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_061763_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_061763", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_062016_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_062016", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_062250_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_062250", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_062396_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_062396", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_062509_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_062509", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_062653_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_062653", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_062793_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_062793", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_063045_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_063045", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_064130_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_064130", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_064305_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_064305", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_064651_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_064651", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_064798_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_064798", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_064925_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_064925", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_065160_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_065160", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_065617_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_065617", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_065850_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_065850", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_066092_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_066092", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_066438_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_066438", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_066574_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_066574", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_066832_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_066832", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_067092_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_067092", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_067178_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_067178", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_067295_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_067295", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_067474_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_067474", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_067735_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_067735", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_068063_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_068063", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_068208_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_068208", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_068682_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_068682", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_068772_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_068772", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_069633_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_069633", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_070099_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_070099", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_071288_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_071288", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_071781_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_071781", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_072155_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_072155", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_072295_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_072295", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_073088_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_073088", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_073243_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_073243", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_073464_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_073464", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_073911_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_073911", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_075296_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_075296", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_075984_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_075984", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_076502_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_076502", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_077092_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_077092", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_077233_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_077233", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_077434_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_077434", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_078803_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_078803", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_079206_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_079206", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_080091_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_080091", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_080391_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_080391", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_080830_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_080830", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_082087_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_082087", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_082466_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_082466", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_083029_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_083029", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_083199_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_083199", + "width": 2048 + }, + { + "file_name": "frankfurt_000001_083852_gtFine_leftImg8bit.png", + "height": 1024, + "id": "frankfurt_000001_083852", + "width": 2048 + }, + { + "file_name": "lindau_000000_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000000_000019", + "width": 2048 + }, + { + "file_name": "lindau_000001_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000001_000019", + "width": 2048 + }, + { + "file_name": "lindau_000002_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000002_000019", + "width": 2048 + }, + { + "file_name": "lindau_000003_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000003_000019", + "width": 2048 + }, + { + "file_name": "lindau_000004_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000004_000019", + "width": 2048 + }, + { + "file_name": "lindau_000005_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000005_000019", + "width": 2048 + }, + { + "file_name": "lindau_000006_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000006_000019", + "width": 2048 + }, + { + "file_name": "lindau_000007_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000007_000019", + "width": 2048 + }, + { + "file_name": "lindau_000008_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000008_000019", + "width": 2048 + }, + { + "file_name": "lindau_000009_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000009_000019", + "width": 2048 + }, + { + "file_name": "lindau_000010_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000010_000019", + "width": 2048 + }, + { + "file_name": "lindau_000011_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000011_000019", + "width": 2048 + }, + { + "file_name": "lindau_000012_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000012_000019", + "width": 2048 + }, + { + "file_name": "lindau_000013_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000013_000019", + "width": 2048 + }, + { + "file_name": "lindau_000014_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000014_000019", + "width": 2048 + }, + { + "file_name": "lindau_000015_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000015_000019", + "width": 2048 + }, + { + "file_name": "lindau_000016_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000016_000019", + "width": 2048 + }, + { + "file_name": "lindau_000017_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000017_000019", + "width": 2048 + }, + { + "file_name": "lindau_000018_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000018_000019", + "width": 2048 + }, + { + "file_name": "lindau_000019_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000019_000019", + "width": 2048 + }, + { + "file_name": "lindau_000020_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000020_000019", + "width": 2048 + }, + { + "file_name": "lindau_000021_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000021_000019", + "width": 2048 + }, + { + "file_name": "lindau_000022_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000022_000019", + "width": 2048 + }, + { + "file_name": "lindau_000023_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000023_000019", + "width": 2048 + }, + { + "file_name": "lindau_000024_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000024_000019", + "width": 2048 + }, + { + "file_name": "lindau_000025_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000025_000019", + "width": 2048 + }, + { + "file_name": "lindau_000026_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000026_000019", + "width": 2048 + }, + { + "file_name": "lindau_000027_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000027_000019", + "width": 2048 + }, + { + "file_name": "lindau_000028_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000028_000019", + "width": 2048 + }, + { + "file_name": "lindau_000029_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000029_000019", + "width": 2048 + }, + { + "file_name": "lindau_000030_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000030_000019", + "width": 2048 + }, + { + "file_name": "lindau_000031_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000031_000019", + "width": 2048 + }, + { + "file_name": "lindau_000032_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000032_000019", + "width": 2048 + }, + { + "file_name": "lindau_000033_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000033_000019", + "width": 2048 + }, + { + "file_name": "lindau_000034_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000034_000019", + "width": 2048 + }, + { + "file_name": "lindau_000035_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000035_000019", + "width": 2048 + }, + { + "file_name": "lindau_000036_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000036_000019", + "width": 2048 + }, + { + "file_name": "lindau_000037_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000037_000019", + "width": 2048 + }, + { + "file_name": "lindau_000038_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000038_000019", + "width": 2048 + }, + { + "file_name": "lindau_000039_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000039_000019", + "width": 2048 + }, + { + "file_name": "lindau_000040_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000040_000019", + "width": 2048 + }, + { + "file_name": "lindau_000041_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000041_000019", + "width": 2048 + }, + { + "file_name": "lindau_000042_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000042_000019", + "width": 2048 + }, + { + "file_name": "lindau_000043_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000043_000019", + "width": 2048 + }, + { + "file_name": "lindau_000044_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000044_000019", + "width": 2048 + }, + { + "file_name": "lindau_000045_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000045_000019", + "width": 2048 + }, + { + "file_name": "lindau_000046_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000046_000019", + "width": 2048 + }, + { + "file_name": "lindau_000047_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000047_000019", + "width": 2048 + }, + { + "file_name": "lindau_000048_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000048_000019", + "width": 2048 + }, + { + "file_name": "lindau_000049_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000049_000019", + "width": 2048 + }, + { + "file_name": "lindau_000050_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000050_000019", + "width": 2048 + }, + { + "file_name": "lindau_000051_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000051_000019", + "width": 2048 + }, + { + "file_name": "lindau_000052_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000052_000019", + "width": 2048 + }, + { + "file_name": "lindau_000053_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000053_000019", + "width": 2048 + }, + { + "file_name": "lindau_000054_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000054_000019", + "width": 2048 + }, + { + "file_name": "lindau_000055_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000055_000019", + "width": 2048 + }, + { + "file_name": "lindau_000056_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000056_000019", + "width": 2048 + }, + { + "file_name": "lindau_000057_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000057_000019", + "width": 2048 + }, + { + "file_name": "lindau_000058_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "lindau_000058_000019", + "width": 2048 + }, + { + "file_name": "munster_000000_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000000_000019", + "width": 2048 + }, + { + "file_name": "munster_000001_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000001_000019", + "width": 2048 + }, + { + "file_name": "munster_000002_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000002_000019", + "width": 2048 + }, + { + "file_name": "munster_000003_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000003_000019", + "width": 2048 + }, + { + "file_name": "munster_000004_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000004_000019", + "width": 2048 + }, + { + "file_name": "munster_000005_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000005_000019", + "width": 2048 + }, + { + "file_name": "munster_000006_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000006_000019", + "width": 2048 + }, + { + "file_name": "munster_000007_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000007_000019", + "width": 2048 + }, + { + "file_name": "munster_000008_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000008_000019", + "width": 2048 + }, + { + "file_name": "munster_000009_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000009_000019", + "width": 2048 + }, + { + "file_name": "munster_000010_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000010_000019", + "width": 2048 + }, + { + "file_name": "munster_000011_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000011_000019", + "width": 2048 + }, + { + "file_name": "munster_000012_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000012_000019", + "width": 2048 + }, + { + "file_name": "munster_000013_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000013_000019", + "width": 2048 + }, + { + "file_name": "munster_000014_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000014_000019", + "width": 2048 + }, + { + "file_name": "munster_000015_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000015_000019", + "width": 2048 + }, + { + "file_name": "munster_000016_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000016_000019", + "width": 2048 + }, + { + "file_name": "munster_000017_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000017_000019", + "width": 2048 + }, + { + "file_name": "munster_000018_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000018_000019", + "width": 2048 + }, + { + "file_name": "munster_000019_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000019_000019", + "width": 2048 + }, + { + "file_name": "munster_000020_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000020_000019", + "width": 2048 + }, + { + "file_name": "munster_000021_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000021_000019", + "width": 2048 + }, + { + "file_name": "munster_000022_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000022_000019", + "width": 2048 + }, + { + "file_name": "munster_000023_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000023_000019", + "width": 2048 + }, + { + "file_name": "munster_000024_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000024_000019", + "width": 2048 + }, + { + "file_name": "munster_000025_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000025_000019", + "width": 2048 + }, + { + "file_name": "munster_000026_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000026_000019", + "width": 2048 + }, + { + "file_name": "munster_000027_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000027_000019", + "width": 2048 + }, + { + "file_name": "munster_000028_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000028_000019", + "width": 2048 + }, + { + "file_name": "munster_000029_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000029_000019", + "width": 2048 + }, + { + "file_name": "munster_000030_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000030_000019", + "width": 2048 + }, + { + "file_name": "munster_000031_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000031_000019", + "width": 2048 + }, + { + "file_name": "munster_000032_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000032_000019", + "width": 2048 + }, + { + "file_name": "munster_000033_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000033_000019", + "width": 2048 + }, + { + "file_name": "munster_000034_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000034_000019", + "width": 2048 + }, + { + "file_name": "munster_000035_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000035_000019", + "width": 2048 + }, + { + "file_name": "munster_000036_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000036_000019", + "width": 2048 + }, + { + "file_name": "munster_000037_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000037_000019", + "width": 2048 + }, + { + "file_name": "munster_000038_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000038_000019", + "width": 2048 + }, + { + "file_name": "munster_000039_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000039_000019", + "width": 2048 + }, + { + "file_name": "munster_000040_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000040_000019", + "width": 2048 + }, + { + "file_name": "munster_000041_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000041_000019", + "width": 2048 + }, + { + "file_name": "munster_000042_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000042_000019", + "width": 2048 + }, + { + "file_name": "munster_000043_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000043_000019", + "width": 2048 + }, + { + "file_name": "munster_000044_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000044_000019", + "width": 2048 + }, + { + "file_name": "munster_000045_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000045_000019", + "width": 2048 + }, + { + "file_name": "munster_000046_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000046_000019", + "width": 2048 + }, + { + "file_name": "munster_000047_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000047_000019", + "width": 2048 + }, + { + "file_name": "munster_000048_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000048_000019", + "width": 2048 + }, + { + "file_name": "munster_000049_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000049_000019", + "width": 2048 + }, + { + "file_name": "munster_000050_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000050_000019", + "width": 2048 + }, + { + "file_name": "munster_000051_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000051_000019", + "width": 2048 + }, + { + "file_name": "munster_000052_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000052_000019", + "width": 2048 + }, + { + "file_name": "munster_000053_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000053_000019", + "width": 2048 + }, + { + "file_name": "munster_000054_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000054_000019", + "width": 2048 + }, + { + "file_name": "munster_000055_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000055_000019", + "width": 2048 + }, + { + "file_name": "munster_000056_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000056_000019", + "width": 2048 + }, + { + "file_name": "munster_000057_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000057_000019", + "width": 2048 + }, + { + "file_name": "munster_000058_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000058_000019", + "width": 2048 + }, + { + "file_name": "munster_000059_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000059_000019", + "width": 2048 + }, + { + "file_name": "munster_000060_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000060_000019", + "width": 2048 + }, + { + "file_name": "munster_000061_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000061_000019", + "width": 2048 + }, + { + "file_name": "munster_000062_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000062_000019", + "width": 2048 + }, + { + "file_name": "munster_000063_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000063_000019", + "width": 2048 + }, + { + "file_name": "munster_000064_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000064_000019", + "width": 2048 + }, + { + "file_name": "munster_000065_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000065_000019", + "width": 2048 + }, + { + "file_name": "munster_000066_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000066_000019", + "width": 2048 + }, + { + "file_name": "munster_000067_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000067_000019", + "width": 2048 + }, + { + "file_name": "munster_000068_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000068_000019", + "width": 2048 + }, + { + "file_name": "munster_000069_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000069_000019", + "width": 2048 + }, + { + "file_name": "munster_000070_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000070_000019", + "width": 2048 + }, + { + "file_name": "munster_000071_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000071_000019", + "width": 2048 + }, + { + "file_name": "munster_000072_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000072_000019", + "width": 2048 + }, + { + "file_name": "munster_000073_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000073_000019", + "width": 2048 + }, + { + "file_name": "munster_000074_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000074_000019", + "width": 2048 + }, + { + "file_name": "munster_000075_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000075_000019", + "width": 2048 + }, + { + "file_name": "munster_000076_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000076_000019", + "width": 2048 + }, + { + "file_name": "munster_000077_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000077_000019", + "width": 2048 + }, + { + "file_name": "munster_000078_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000078_000019", + "width": 2048 + }, + { + "file_name": "munster_000079_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000079_000019", + "width": 2048 + }, + { + "file_name": "munster_000080_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000080_000019", + "width": 2048 + }, + { + "file_name": "munster_000081_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000081_000019", + "width": 2048 + }, + { + "file_name": "munster_000082_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000082_000019", + "width": 2048 + }, + { + "file_name": "munster_000083_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000083_000019", + "width": 2048 + }, + { + "file_name": "munster_000084_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000084_000019", + "width": 2048 + }, + { + "file_name": "munster_000085_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000085_000019", + "width": 2048 + }, + { + "file_name": "munster_000086_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000086_000019", + "width": 2048 + }, + { + "file_name": "munster_000087_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000087_000019", + "width": 2048 + }, + { + "file_name": "munster_000088_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000088_000019", + "width": 2048 + }, + { + "file_name": "munster_000089_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000089_000019", + "width": 2048 + }, + { + "file_name": "munster_000090_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000090_000019", + "width": 2048 + }, + { + "file_name": "munster_000091_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000091_000019", + "width": 2048 + }, + { + "file_name": "munster_000092_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000092_000019", + "width": 2048 + }, + { + "file_name": "munster_000093_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000093_000019", + "width": 2048 + }, + { + "file_name": "munster_000094_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000094_000019", + "width": 2048 + }, + { + "file_name": "munster_000095_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000095_000019", + "width": 2048 + }, + { + "file_name": "munster_000096_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000096_000019", + "width": 2048 + }, + { + "file_name": "munster_000097_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000097_000019", + "width": 2048 + }, + { + "file_name": "munster_000098_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000098_000019", + "width": 2048 + }, + { + "file_name": "munster_000099_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000099_000019", + "width": 2048 + }, + { + "file_name": "munster_000100_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000100_000019", + "width": 2048 + }, + { + "file_name": "munster_000101_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000101_000019", + "width": 2048 + }, + { + "file_name": "munster_000102_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000102_000019", + "width": 2048 + }, + { + "file_name": "munster_000103_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000103_000019", + "width": 2048 + }, + { + "file_name": "munster_000104_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000104_000019", + "width": 2048 + }, + { + "file_name": "munster_000105_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000105_000019", + "width": 2048 + }, + { + "file_name": "munster_000106_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000106_000019", + "width": 2048 + }, + { + "file_name": "munster_000107_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000107_000019", + "width": 2048 + }, + { + "file_name": "munster_000108_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000108_000019", + "width": 2048 + }, + { + "file_name": "munster_000109_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000109_000019", + "width": 2048 + }, + { + "file_name": "munster_000110_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000110_000019", + "width": 2048 + }, + { + "file_name": "munster_000111_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000111_000019", + "width": 2048 + }, + { + "file_name": "munster_000112_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000112_000019", + "width": 2048 + }, + { + "file_name": "munster_000113_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000113_000019", + "width": 2048 + }, + { + "file_name": "munster_000114_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000114_000019", + "width": 2048 + }, + { + "file_name": "munster_000115_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000115_000019", + "width": 2048 + }, + { + "file_name": "munster_000116_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000116_000019", + "width": 2048 + }, + { + "file_name": "munster_000117_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000117_000019", + "width": 2048 + }, + { + "file_name": "munster_000118_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000118_000019", + "width": 2048 + }, + { + "file_name": "munster_000119_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000119_000019", + "width": 2048 + }, + { + "file_name": "munster_000120_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000120_000019", + "width": 2048 + }, + { + "file_name": "munster_000121_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000121_000019", + "width": 2048 + }, + { + "file_name": "munster_000122_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000122_000019", + "width": 2048 + }, + { + "file_name": "munster_000123_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000123_000019", + "width": 2048 + }, + { + "file_name": "munster_000124_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000124_000019", + "width": 2048 + }, + { + "file_name": "munster_000125_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000125_000019", + "width": 2048 + }, + { + "file_name": "munster_000126_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000126_000019", + "width": 2048 + }, + { + "file_name": "munster_000127_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000127_000019", + "width": 2048 + }, + { + "file_name": "munster_000128_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000128_000019", + "width": 2048 + }, + { + "file_name": "munster_000129_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000129_000019", + "width": 2048 + }, + { + "file_name": "munster_000130_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000130_000019", + "width": 2048 + }, + { + "file_name": "munster_000131_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000131_000019", + "width": 2048 + }, + { + "file_name": "munster_000132_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000132_000019", + "width": 2048 + }, + { + "file_name": "munster_000133_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000133_000019", + "width": 2048 + }, + { + "file_name": "munster_000134_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000134_000019", + "width": 2048 + }, + { + "file_name": "munster_000135_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000135_000019", + "width": 2048 + }, + { + "file_name": "munster_000136_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000136_000019", + "width": 2048 + }, + { + "file_name": "munster_000137_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000137_000019", + "width": 2048 + }, + { + "file_name": "munster_000138_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000138_000019", + "width": 2048 + }, + { + "file_name": "munster_000139_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000139_000019", + "width": 2048 + }, + { + "file_name": "munster_000140_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000140_000019", + "width": 2048 + }, + { + "file_name": "munster_000141_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000141_000019", + "width": 2048 + }, + { + "file_name": "munster_000142_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000142_000019", + "width": 2048 + }, + { + "file_name": "munster_000143_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000143_000019", + "width": 2048 + }, + { + "file_name": "munster_000144_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000144_000019", + "width": 2048 + }, + { + "file_name": "munster_000145_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000145_000019", + "width": 2048 + }, + { + "file_name": "munster_000146_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000146_000019", + "width": 2048 + }, + { + "file_name": "munster_000147_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000147_000019", + "width": 2048 + }, + { + "file_name": "munster_000148_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000148_000019", + "width": 2048 + }, + { + "file_name": "munster_000149_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000149_000019", + "width": 2048 + }, + { + "file_name": "munster_000150_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000150_000019", + "width": 2048 + }, + { + "file_name": "munster_000151_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000151_000019", + "width": 2048 + }, + { + "file_name": "munster_000152_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000152_000019", + "width": 2048 + }, + { + "file_name": "munster_000153_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000153_000019", + "width": 2048 + }, + { + "file_name": "munster_000154_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000154_000019", + "width": 2048 + }, + { + "file_name": "munster_000155_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000155_000019", + "width": 2048 + }, + { + "file_name": "munster_000156_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000156_000019", + "width": 2048 + }, + { + "file_name": "munster_000157_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000157_000019", + "width": 2048 + }, + { + "file_name": "munster_000158_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000158_000019", + "width": 2048 + }, + { + "file_name": "munster_000159_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000159_000019", + "width": 2048 + }, + { + "file_name": "munster_000160_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000160_000019", + "width": 2048 + }, + { + "file_name": "munster_000161_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000161_000019", + "width": 2048 + }, + { + "file_name": "munster_000162_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000162_000019", + "width": 2048 + }, + { + "file_name": "munster_000163_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000163_000019", + "width": 2048 + }, + { + "file_name": "munster_000164_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000164_000019", + "width": 2048 + }, + { + "file_name": "munster_000165_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000165_000019", + "width": 2048 + }, + { + "file_name": "munster_000166_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000166_000019", + "width": 2048 + }, + { + "file_name": "munster_000167_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000167_000019", + "width": 2048 + }, + { + "file_name": "munster_000168_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000168_000019", + "width": 2048 + }, + { + "file_name": "munster_000169_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000169_000019", + "width": 2048 + }, + { + "file_name": "munster_000170_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000170_000019", + "width": 2048 + }, + { + "file_name": "munster_000171_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000171_000019", + "width": 2048 + }, + { + "file_name": "munster_000172_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000172_000019", + "width": 2048 + }, + { + "file_name": "munster_000173_000019_gtFine_leftImg8bit.png", + "height": 1024, + "id": "munster_000173_000019", + "width": 2048 + } + ] +} diff --git a/scenic/dataset_lib/coco_dataset/data/images/000000397133.png b/scenic/dataset_lib/coco_dataset/data/images/000000397133.png new file mode 100644 index 0000000000000000000000000000000000000000..5bb9fe07340f5579febe5f4e1128f7504954aee4 Binary files /dev/null and b/scenic/dataset_lib/coco_dataset/data/images/000000397133.png differ diff --git a/scenic/dataset_lib/coco_dataset/data/images/__init__.py b/scenic/dataset_lib/coco_dataset/data/images/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/dataset_lib/coco_dataset/data/instances_val2017.json b/scenic/dataset_lib/coco_dataset/data/instances_val2017.json new file mode 100644 index 0000000000000000000000000000000000000000..1e7b7022813cbfea62c6fddb834b4763b75f39b8 --- /dev/null +++ b/scenic/dataset_lib/coco_dataset/data/instances_val2017.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8c7f7908f1d7278341fae127d0da654f102f11bd7b21d8aeefa635b8c810b6f +size 19987840 diff --git a/scenic/dataset_lib/coco_dataset/data/instances_val2017_unittest.json b/scenic/dataset_lib/coco_dataset/data/instances_val2017_unittest.json new file mode 100644 index 0000000000000000000000000000000000000000..0275111b13268377e46cec42a6341814ebb272d8 --- /dev/null +++ b/scenic/dataset_lib/coco_dataset/data/instances_val2017_unittest.json @@ -0,0 +1,86 @@ +{ + "info": { + "description": "COCO 2017 Dataset", + "url": "http://cocodataset.org", + "version": "1.0", + "year": 2017, + "contributor": "COCO Consortium", + "date_created": "2017/09/01" + }, + "licenses": [ + { + "url": "http://creativecommons.org/licenses/by-nc-sa/2.0/", + "id": 1, + "name": "Attribution-NonCommercial-ShareAlike License" + }, + { + "url": "http://creativecommons.org/licenses/by/2.0/", + "id": 4, + "name": "Attribution License" + } + ], + "images": [ + { + "license": 4, + "file_name": "000000397133.jpg", + "coco_url": "http://images.cocodataset.org/val2017/000000397133.jpg", + "height": 427, + "width": 640, + "date_captured": "2013-11-14 17:02:52", + "flickr_url": "http://farm7.staticflickr.com/6116/6255196340_da26cf2c9e_z.jpg", + "id": 397133 + }, + { + "license": 1, + "file_name": "000000037777.jpg", + "coco_url": "http://images.cocodataset.org/val2017/000000037777.jpg", + "height": 230, + "width": 352, + "date_captured": "2013-11-14 20:55:31", + "flickr_url": "http://farm9.staticflickr.com/8429/7839199426_f6d48aa585_z.jpg", + "id": 37777 + } + ], + "annotations": [ + { + "segmentation": [], + "area": 1481.3806499999994, + "iscrowd": 0, + "image_id": 397133, + "bbox": [ + 217.62, + 240.54, + 38.99, + 57.75 + ], + "category_id": 44, + "id": 82445 + }, + { + "segmentation": [], + "area": 88.52115000000006, + "iscrowd": 0, + "image_id": 37777, + "bbox": [ + 102.49, + 118.47, + 7.9, + 17.31 + ], + "category_id": 64, + "id": 22328 + } + ], + "categories": [ + { + "supercategory": "kitchen", + "id": 44, + "name": "bottle" + }, + { + "supercategory": "furniture", + "id": 64, + "name": "potted plant" + } + ] +} diff --git a/scenic/dataset_lib/coco_dataset/data/lvis_label_map.json b/scenic/dataset_lib/coco_dataset/data/lvis_label_map.json new file mode 100644 index 0000000000000000000000000000000000000000..ed1b6bbf31dd4618aa0795544dbc29e5421c345e --- /dev/null +++ b/scenic/dataset_lib/coco_dataset/data/lvis_label_map.json @@ -0,0 +1 @@ +[{"name": "aerosol_can", "instance_count": 0, "def": "a dispenser that holds a substance under pressure", "synonyms": ["aerosol_can", "spray_can"], "image_count": 0, "id": 1, "frequency": "c", "synset": "aerosol.n.02"}, {"name": "air_conditioner", "instance_count": 0, "def": "a machine that keeps air cool and dry", "synonyms": ["air_conditioner"], "image_count": 0, "id": 2, "frequency": "f", "synset": "air_conditioner.n.01"}, {"name": "airplane", "instance_count": 0, "def": "an aircraft that has a fixed wing and is powered by propellers or jets", "synonyms": ["airplane", "aeroplane"], "image_count": 0, "id": 3, "frequency": "f", "synset": "airplane.n.01"}, {"name": "alarm_clock", "instance_count": 0, "def": "a clock that wakes a sleeper at some preset time", "synonyms": ["alarm_clock"], "image_count": 0, "id": 4, "frequency": "f", "synset": "alarm_clock.n.01"}, {"name": "alcohol", "instance_count": 0, "def": "a liquor or brew containing alcohol as the active agent", "synonyms": ["alcohol", "alcoholic_beverage"], "image_count": 0, "id": 5, "frequency": "c", "synset": "alcohol.n.01"}, {"name": "alligator", "instance_count": 0, "def": "amphibious reptiles related to crocodiles but with shorter broader snouts", "synonyms": ["alligator", "gator"], "image_count": 0, "id": 6, "frequency": "c", "synset": "alligator.n.02"}, {"name": "almond", "instance_count": 0, "def": "oval-shaped edible seed of the almond tree", "synonyms": ["almond"], "image_count": 0, "id": 7, "frequency": "c", "synset": "almond.n.02"}, {"name": "ambulance", "instance_count": 0, "def": "a vehicle that takes people to and from hospitals", "synonyms": ["ambulance"], "image_count": 0, "id": 8, "frequency": "c", "synset": "ambulance.n.01"}, {"name": "amplifier", "instance_count": 0, "def": "electronic equipment that increases strength of signals", "synonyms": ["amplifier"], "image_count": 0, "id": 9, "frequency": "c", "synset": "amplifier.n.01"}, {"name": "anklet", "instance_count": 0, "def": "an ornament worn around the ankle", "synonyms": ["anklet", "ankle_bracelet"], "image_count": 0, "id": 10, "frequency": "c", "synset": "anklet.n.03"}, {"name": "antenna", "instance_count": 0, "def": "an electrical device that sends or receives radio or television signals", "synonyms": ["antenna", "aerial", "transmitting_aerial"], "image_count": 0, "id": 11, "frequency": "f", "synset": "antenna.n.01"}, {"name": "apple", "instance_count": 0, "def": "fruit with red or yellow or green skin and sweet to tart crisp whitish flesh", "synonyms": ["apple"], "image_count": 0, "id": 12, "frequency": "f", "synset": "apple.n.01"}, {"name": "applesauce", "instance_count": 0, "def": "puree of stewed apples usually sweetened and spiced", "synonyms": ["applesauce"], "image_count": 0, "id": 13, "frequency": "r", "synset": "applesauce.n.01"}, {"name": "apricot", "instance_count": 0, "def": "downy yellow to rosy-colored fruit resembling a small peach", "synonyms": ["apricot"], "image_count": 0, "id": 14, "frequency": "r", "synset": "apricot.n.02"}, {"name": "apron", "instance_count": 0, "def": "a garment of cloth that is tied about the waist and worn to protect clothing", "synonyms": ["apron"], "image_count": 0, "id": 15, "frequency": "f", "synset": "apron.n.01"}, {"name": "aquarium", "instance_count": 0, "def": "a tank/pool/bowl filled with water for keeping live fish and underwater animals", "synonyms": ["aquarium", "fish_tank"], "image_count": 0, "id": 16, "frequency": "c", "synset": "aquarium.n.01"}, {"name": "arctic_(type_of_shoe)", "instance_count": 0, "def": "a waterproof overshoe that protects shoes from water or snow", "synonyms": ["arctic_(type_of_shoe)", "galosh", "golosh", "rubber_(type_of_shoe)", "gumshoe"], "image_count": 0, "id": 17, "frequency": "r", "synset": "arctic.n.02"}, {"name": "armband", "instance_count": 0, "def": "a band worn around the upper arm", "synonyms": ["armband"], "image_count": 0, "id": 18, "frequency": "c", "synset": "armband.n.02"}, {"name": "armchair", "instance_count": 0, "def": "chair with a support on each side for arms", "synonyms": ["armchair"], "image_count": 0, "id": 19, "frequency": "f", "synset": "armchair.n.01"}, {"name": "armoire", "instance_count": 0, "def": "a large wardrobe or cabinet", "synonyms": ["armoire"], "image_count": 0, "id": 20, "frequency": "r", "synset": "armoire.n.01"}, {"name": "armor", "instance_count": 0, "def": "protective covering made of metal and used in combat", "synonyms": ["armor", "armour"], "image_count": 0, "id": 21, "frequency": "r", "synset": "armor.n.01"}, {"name": "artichoke", "instance_count": 0, "def": "a thistlelike flower head with edible fleshy leaves and heart", "synonyms": ["artichoke"], "image_count": 0, "id": 22, "frequency": "c", "synset": "artichoke.n.02"}, {"name": "trash_can", "instance_count": 0, "def": "a bin that holds rubbish until it is collected", "synonyms": ["trash_can", "garbage_can", "wastebin", "dustbin", "trash_barrel", "trash_bin"], "image_count": 0, "id": 23, "frequency": "f", "synset": "ashcan.n.01"}, {"name": "ashtray", "instance_count": 0, "def": "a receptacle for the ash from smokers' cigars or cigarettes", "synonyms": ["ashtray"], "image_count": 0, "id": 24, "frequency": "c", "synset": "ashtray.n.01"}, {"name": "asparagus", "instance_count": 0, "def": "edible young shoots of the asparagus plant", "synonyms": ["asparagus"], "image_count": 0, "id": 25, "frequency": "c", "synset": "asparagus.n.02"}, {"name": "atomizer", "instance_count": 0, "def": "a dispenser that turns a liquid (such as perfume) into a fine mist", "synonyms": ["atomizer", "atomiser", "spray", "sprayer", "nebulizer", "nebuliser"], "image_count": 0, "id": 26, "frequency": "c", "synset": "atomizer.n.01"}, {"name": "avocado", "instance_count": 0, "def": "a pear-shaped fruit with green or blackish skin and rich yellowish pulp enclosing a single large seed", "synonyms": ["avocado"], "image_count": 0, "id": 27, "frequency": "f", "synset": "avocado.n.01"}, {"name": "award", "instance_count": 0, "def": "a tangible symbol signifying approval or distinction", "synonyms": ["award", "accolade"], "image_count": 0, "id": 28, "frequency": "c", "synset": "award.n.02"}, {"name": "awning", "instance_count": 0, "def": "a canopy made of canvas to shelter people or things from rain or sun", "synonyms": ["awning"], "image_count": 0, "id": 29, "frequency": "f", "synset": "awning.n.01"}, {"name": "ax", "instance_count": 0, "def": "an edge tool with a heavy bladed head mounted across a handle", "synonyms": ["ax", "axe"], "image_count": 0, "id": 30, "frequency": "r", "synset": "ax.n.01"}, {"name": "baboon", "instance_count": 0, "def": "large terrestrial monkeys having doglike muzzles", "synonyms": ["baboon"], "image_count": 0, "id": 31, "frequency": "r", "synset": "baboon.n.01"}, {"name": "baby_buggy", "instance_count": 0, "def": "a small vehicle with four wheels in which a baby or child is pushed around", "synonyms": ["baby_buggy", "baby_carriage", "perambulator", "pram", "stroller"], "image_count": 0, "id": 32, "frequency": "f", "synset": "baby_buggy.n.01"}, {"name": "basketball_backboard", "instance_count": 0, "def": "a raised vertical board with basket attached; used to play basketball", "synonyms": ["basketball_backboard"], "image_count": 0, "id": 33, "frequency": "c", "synset": "backboard.n.01"}, {"name": "backpack", "instance_count": 0, "def": "a bag carried by a strap on your back or shoulder", "synonyms": ["backpack", "knapsack", "packsack", "rucksack", "haversack"], "image_count": 0, "id": 34, "frequency": "f", "synset": "backpack.n.01"}, {"name": "handbag", "instance_count": 0, "def": "a container used for carrying money and small personal items or accessories", "synonyms": ["handbag", "purse", "pocketbook"], "image_count": 0, "id": 35, "frequency": "f", "synset": "bag.n.04"}, {"name": "suitcase", "instance_count": 0, "def": "cases used to carry belongings when traveling", "synonyms": ["suitcase", "baggage", "luggage"], "image_count": 0, "id": 36, "frequency": "f", "synset": "bag.n.06"}, {"name": "bagel", "instance_count": 0, "def": "glazed yeast-raised doughnut-shaped roll with hard crust", "synonyms": ["bagel", "beigel"], "image_count": 0, "id": 37, "frequency": "c", "synset": "bagel.n.01"}, {"name": "bagpipe", "instance_count": 0, "def": "a tubular wind instrument; the player blows air into a bag and squeezes it out", "synonyms": ["bagpipe"], "image_count": 0, "id": 38, "frequency": "r", "synset": "bagpipe.n.01"}, {"name": "baguet", "instance_count": 0, "def": "narrow French stick loaf", "synonyms": ["baguet", "baguette"], "image_count": 0, "id": 39, "frequency": "r", "synset": "baguet.n.01"}, {"name": "bait", "instance_count": 0, "def": "something used to lure fish or other animals into danger so they can be trapped or killed", "synonyms": ["bait", "lure"], "image_count": 0, "id": 40, "frequency": "r", "synset": "bait.n.02"}, {"name": "ball", "instance_count": 0, "def": "a spherical object used as a plaything", "synonyms": ["ball"], "image_count": 0, "id": 41, "frequency": "f", "synset": "ball.n.06"}, {"name": "ballet_skirt", "instance_count": 0, "def": "very short skirt worn by ballerinas", "synonyms": ["ballet_skirt", "tutu"], "image_count": 0, "id": 42, "frequency": "r", "synset": "ballet_skirt.n.01"}, {"name": "balloon", "instance_count": 0, "def": "large tough nonrigid bag filled with gas or heated air", "synonyms": ["balloon"], "image_count": 0, "id": 43, "frequency": "f", "synset": "balloon.n.01"}, {"name": "bamboo", "instance_count": 0, "def": "woody tropical grass having hollow woody stems", "synonyms": ["bamboo"], "image_count": 0, "id": 44, "frequency": "c", "synset": "bamboo.n.02"}, {"name": "banana", "instance_count": 0, "def": "elongated crescent-shaped yellow fruit with soft sweet flesh", "synonyms": ["banana"], "image_count": 0, "id": 45, "frequency": "f", "synset": "banana.n.02"}, {"name": "Band_Aid", "instance_count": 0, "def": "trade name for an adhesive bandage to cover small cuts or blisters", "synonyms": ["Band_Aid"], "image_count": 0, "id": 46, "frequency": "c", "synset": "band_aid.n.01"}, {"name": "bandage", "instance_count": 0, "def": "a piece of soft material that covers and protects an injured part of the body", "synonyms": ["bandage"], "image_count": 0, "id": 47, "frequency": "c", "synset": "bandage.n.01"}, {"name": "bandanna", "instance_count": 0, "def": "large and brightly colored handkerchief; often used as a neckerchief", "synonyms": ["bandanna", "bandana"], "image_count": 0, "id": 48, "frequency": "f", "synset": "bandanna.n.01"}, {"name": "banjo", "instance_count": 0, "def": "a stringed instrument of the guitar family with a long neck and circular body", "synonyms": ["banjo"], "image_count": 0, "id": 49, "frequency": "r", "synset": "banjo.n.01"}, {"name": "banner", "instance_count": 0, "def": "long strip of cloth or paper used for decoration or advertising", "synonyms": ["banner", "streamer"], "image_count": 0, "id": 50, "frequency": "f", "synset": "banner.n.01"}, {"name": "barbell", "instance_count": 0, "def": "a bar to which heavy discs are attached at each end; used in weightlifting", "synonyms": ["barbell"], "image_count": 0, "id": 51, "frequency": "r", "synset": "barbell.n.01"}, {"name": "barge", "instance_count": 0, "def": "a flatbottom boat for carrying heavy loads (especially on canals)", "synonyms": ["barge"], "image_count": 0, "id": 52, "frequency": "r", "synset": "barge.n.01"}, {"name": "barrel", "instance_count": 0, "def": "a cylindrical container that holds liquids", "synonyms": ["barrel", "cask"], "image_count": 0, "id": 53, "frequency": "f", "synset": "barrel.n.02"}, {"name": "barrette", "instance_count": 0, "def": "a pin for holding women's hair in place", "synonyms": ["barrette"], "image_count": 0, "id": 54, "frequency": "c", "synset": "barrette.n.01"}, {"name": "barrow", "instance_count": 0, "def": "a cart for carrying small loads; has handles and one or more wheels", "synonyms": ["barrow", "garden_cart", "lawn_cart", "wheelbarrow"], "image_count": 0, "id": 55, "frequency": "c", "synset": "barrow.n.03"}, {"name": "baseball_base", "instance_count": 0, "def": "a place that the runner must touch before scoring", "synonyms": ["baseball_base"], "image_count": 0, "id": 56, "frequency": "f", "synset": "base.n.03"}, {"name": "baseball", "instance_count": 0, "def": "a ball used in playing baseball", "synonyms": ["baseball"], "image_count": 0, "id": 57, "frequency": "f", "synset": "baseball.n.02"}, {"name": "baseball_bat", "instance_count": 0, "def": "an implement used in baseball by the batter", "synonyms": ["baseball_bat"], "image_count": 0, "id": 58, "frequency": "f", "synset": "baseball_bat.n.01"}, {"name": "baseball_cap", "instance_count": 0, "def": "a cap with a bill", "synonyms": ["baseball_cap", "jockey_cap", "golf_cap"], "image_count": 0, "id": 59, "frequency": "f", "synset": "baseball_cap.n.01"}, {"name": "baseball_glove", "instance_count": 0, "def": "the handwear used by fielders in playing baseball", "synonyms": ["baseball_glove", "baseball_mitt"], "image_count": 0, "id": 60, "frequency": "f", "synset": "baseball_glove.n.01"}, {"name": "basket", "instance_count": 0, "def": "a container that is usually woven and has handles", "synonyms": ["basket", "handbasket"], "image_count": 0, "id": 61, "frequency": "f", "synset": "basket.n.01"}, {"name": "basketball", "instance_count": 0, "def": "an inflated ball used in playing basketball", "synonyms": ["basketball"], "image_count": 0, "id": 62, "frequency": "c", "synset": "basketball.n.02"}, {"name": "bass_horn", "instance_count": 0, "def": "the lowest brass wind instrument", "synonyms": ["bass_horn", "sousaphone", "tuba"], "image_count": 0, "id": 63, "frequency": "r", "synset": "bass_horn.n.01"}, {"name": "bat_(animal)", "instance_count": 0, "def": "nocturnal mouselike mammal with forelimbs modified to form membranous wings", "synonyms": ["bat_(animal)"], "image_count": 0, "id": 64, "frequency": "c", "synset": "bat.n.01"}, {"name": "bath_mat", "instance_count": 0, "def": "a heavy towel or mat to stand on while drying yourself after a bath", "synonyms": ["bath_mat"], "image_count": 0, "id": 65, "frequency": "f", "synset": "bath_mat.n.01"}, {"name": "bath_towel", "instance_count": 0, "def": "a large towel; to dry yourself after a bath", "synonyms": ["bath_towel"], "image_count": 0, "id": 66, "frequency": "f", "synset": "bath_towel.n.01"}, {"name": "bathrobe", "instance_count": 0, "def": "a loose-fitting robe of towelling; worn after a bath or swim", "synonyms": ["bathrobe"], "image_count": 0, "id": 67, "frequency": "c", "synset": "bathrobe.n.01"}, {"name": "bathtub", "instance_count": 0, "def": "a large open container that you fill with water and use to wash the body", "synonyms": ["bathtub", "bathing_tub"], "image_count": 0, "id": 68, "frequency": "f", "synset": "bathtub.n.01"}, {"name": "batter_(food)", "instance_count": 0, "def": "a liquid or semiliquid mixture, as of flour, eggs, and milk, used in cooking", "synonyms": ["batter_(food)"], "image_count": 0, "id": 69, "frequency": "r", "synset": "batter.n.02"}, {"name": "battery", "instance_count": 0, "def": "a portable device that produces electricity", "synonyms": ["battery"], "image_count": 0, "id": 70, "frequency": "c", "synset": "battery.n.02"}, {"name": "beachball", "instance_count": 0, "def": "large and light ball; for play at the seaside", "synonyms": ["beachball"], "image_count": 0, "id": 71, "frequency": "r", "synset": "beach_ball.n.01"}, {"name": "bead", "instance_count": 0, "def": "a small ball with a hole through the middle used for ornamentation, jewellery, etc.", "synonyms": ["bead"], "image_count": 0, "id": 72, "frequency": "c", "synset": "bead.n.01"}, {"name": "bean_curd", "instance_count": 0, "def": "cheeselike food made of curdled soybean milk", "synonyms": ["bean_curd", "tofu"], "image_count": 0, "id": 73, "frequency": "c", "synset": "bean_curd.n.01"}, {"name": "beanbag", "instance_count": 0, "def": "a bag filled with dried beans or similar items; used in games or to sit on", "synonyms": ["beanbag"], "image_count": 0, "id": 74, "frequency": "c", "synset": "beanbag.n.01"}, {"name": "beanie", "instance_count": 0, "def": "a small skullcap; formerly worn by schoolboys and college freshmen", "synonyms": ["beanie", "beany"], "image_count": 0, "id": 75, "frequency": "f", "synset": "beanie.n.01"}, {"name": "bear", "instance_count": 0, "def": "large carnivorous or omnivorous mammals with shaggy coats and claws", "synonyms": ["bear"], "image_count": 0, "id": 76, "frequency": "f", "synset": "bear.n.01"}, {"name": "bed", "instance_count": 0, "def": "a piece of furniture that provides a place to sleep", "synonyms": ["bed"], "image_count": 0, "id": 77, "frequency": "f", "synset": "bed.n.01"}, {"name": "bedpan", "instance_count": 0, "def": "a shallow vessel used by a bedridden patient for defecation and urination", "synonyms": ["bedpan"], "image_count": 0, "id": 78, "frequency": "r", "synset": "bedpan.n.01"}, {"name": "bedspread", "instance_count": 0, "def": "decorative cover for a bed", "synonyms": ["bedspread", "bedcover", "bed_covering", "counterpane", "spread"], "image_count": 0, "id": 79, "frequency": "f", "synset": "bedspread.n.01"}, {"name": "cow", "instance_count": 0, "def": "cattle/cow", "synonyms": ["cow"], "image_count": 0, "id": 80, "frequency": "f", "synset": "beef.n.01"}, {"name": "beef_(food)", "instance_count": 0, "def": "meat from an adult domestic bovine", "synonyms": ["beef_(food)", "boeuf_(food)"], "image_count": 0, "id": 81, "frequency": "f", "synset": "beef.n.02"}, {"name": "beeper", "instance_count": 0, "def": "an device that beeps when the person carrying it is being paged", "synonyms": ["beeper", "pager"], "image_count": 0, "id": 82, "frequency": "r", "synset": "beeper.n.01"}, {"name": "beer_bottle", "instance_count": 0, "def": "a bottle that holds beer", "synonyms": ["beer_bottle"], "image_count": 0, "id": 83, "frequency": "f", "synset": "beer_bottle.n.01"}, {"name": "beer_can", "instance_count": 0, "def": "a can that holds beer", "synonyms": ["beer_can"], "image_count": 0, "id": 84, "frequency": "c", "synset": "beer_can.n.01"}, {"name": "beetle", "instance_count": 0, "def": "insect with hard wing covers", "synonyms": ["beetle"], "image_count": 0, "id": 85, "frequency": "r", "synset": "beetle.n.01"}, {"name": "bell", "instance_count": 0, "def": "a hollow device made of metal that makes a ringing sound when struck", "synonyms": ["bell"], "image_count": 0, "id": 86, "frequency": "f", "synset": "bell.n.01"}, {"name": "bell_pepper", "instance_count": 0, "def": "large bell-shaped sweet pepper in green or red or yellow or orange or black varieties", "synonyms": ["bell_pepper", "capsicum"], "image_count": 0, "id": 87, "frequency": "f", "synset": "bell_pepper.n.02"}, {"name": "belt", "instance_count": 0, "def": "a band to tie or buckle around the body (usually at the waist)", "synonyms": ["belt"], "image_count": 0, "id": 88, "frequency": "f", "synset": "belt.n.02"}, {"name": "belt_buckle", "instance_count": 0, "def": "the buckle used to fasten a belt", "synonyms": ["belt_buckle"], "image_count": 0, "id": 89, "frequency": "f", "synset": "belt_buckle.n.01"}, {"name": "bench", "instance_count": 0, "def": "a long seat for more than one person", "synonyms": ["bench"], "image_count": 0, "id": 90, "frequency": "f", "synset": "bench.n.01"}, {"name": "beret", "instance_count": 0, "def": "a cap with no brim or bill; made of soft cloth", "synonyms": ["beret"], "image_count": 0, "id": 91, "frequency": "c", "synset": "beret.n.01"}, {"name": "bib", "instance_count": 0, "def": "a napkin tied under the chin of a child while eating", "synonyms": ["bib"], "image_count": 0, "id": 92, "frequency": "c", "synset": "bib.n.02"}, {"name": "Bible", "instance_count": 0, "def": "the sacred writings of the Christian religions", "synonyms": ["Bible"], "image_count": 0, "id": 93, "frequency": "r", "synset": "bible.n.01"}, {"name": "bicycle", "instance_count": 0, "def": "a wheeled vehicle that has two wheels and is moved by foot pedals", "synonyms": ["bicycle", "bike_(bicycle)"], "image_count": 0, "id": 94, "frequency": "f", "synset": "bicycle.n.01"}, {"name": "visor", "instance_count": 0, "def": "a brim that projects to the front to shade the eyes", "synonyms": ["visor", "vizor"], "image_count": 0, "id": 95, "frequency": "f", "synset": "bill.n.09"}, {"name": "billboard", "instance_count": 0, "def": "large outdoor signboard", "synonyms": ["billboard"], "image_count": 0, "id": 96, "frequency": "f", "synset": "billboard.n.01"}, {"name": "binder", "instance_count": 0, "def": "holds loose papers or magazines", "synonyms": ["binder", "ring-binder"], "image_count": 0, "id": 97, "frequency": "c", "synset": "binder.n.03"}, {"name": "binoculars", "instance_count": 0, "def": "an optical instrument designed for simultaneous use by both eyes", "synonyms": ["binoculars", "field_glasses", "opera_glasses"], "image_count": 0, "id": 98, "frequency": "c", "synset": "binoculars.n.01"}, {"name": "bird", "instance_count": 0, "def": "animal characterized by feathers and wings", "synonyms": ["bird"], "image_count": 0, "id": 99, "frequency": "f", "synset": "bird.n.01"}, {"name": "birdfeeder", "instance_count": 0, "def": "an outdoor device that supplies food for wild birds", "synonyms": ["birdfeeder"], "image_count": 0, "id": 100, "frequency": "c", "synset": "bird_feeder.n.01"}, {"name": "birdbath", "instance_count": 0, "def": "an ornamental basin (usually in a garden) for birds to bathe in", "synonyms": ["birdbath"], "image_count": 0, "id": 101, "frequency": "c", "synset": "birdbath.n.01"}, {"name": "birdcage", "instance_count": 0, "def": "a cage in which a bird can be kept", "synonyms": ["birdcage"], "image_count": 0, "id": 102, "frequency": "c", "synset": "birdcage.n.01"}, {"name": "birdhouse", "instance_count": 0, "def": "a shelter for birds", "synonyms": ["birdhouse"], "image_count": 0, "id": 103, "frequency": "c", "synset": "birdhouse.n.01"}, {"name": "birthday_cake", "instance_count": 0, "def": "decorated cake served at a birthday party", "synonyms": ["birthday_cake"], "image_count": 0, "id": 104, "frequency": "f", "synset": "birthday_cake.n.01"}, {"name": "birthday_card", "instance_count": 0, "def": "a card expressing a birthday greeting", "synonyms": ["birthday_card"], "image_count": 0, "id": 105, "frequency": "r", "synset": "birthday_card.n.01"}, {"name": "pirate_flag", "instance_count": 0, "def": "a flag usually bearing a white skull and crossbones on a black background", "synonyms": ["pirate_flag"], "image_count": 0, "id": 106, "frequency": "r", "synset": "black_flag.n.01"}, {"name": "black_sheep", "instance_count": 0, "def": "sheep with a black coat", "synonyms": ["black_sheep"], "image_count": 0, "id": 107, "frequency": "c", "synset": "black_sheep.n.02"}, {"name": "blackberry", "instance_count": 0, "def": "large sweet black or very dark purple edible aggregate fruit", "synonyms": ["blackberry"], "image_count": 0, "id": 108, "frequency": "c", "synset": "blackberry.n.01"}, {"name": "blackboard", "instance_count": 0, "def": "sheet of slate; for writing with chalk", "synonyms": ["blackboard", "chalkboard"], "image_count": 0, "id": 109, "frequency": "f", "synset": "blackboard.n.01"}, {"name": "blanket", "instance_count": 0, "def": "bedding that keeps a person warm in bed", "synonyms": ["blanket"], "image_count": 0, "id": 110, "frequency": "f", "synset": "blanket.n.01"}, {"name": "blazer", "instance_count": 0, "def": "lightweight jacket; often striped in the colors of a club or school", "synonyms": ["blazer", "sport_jacket", "sport_coat", "sports_jacket", "sports_coat"], "image_count": 0, "id": 111, "frequency": "c", "synset": "blazer.n.01"}, {"name": "blender", "instance_count": 0, "def": "an electrically powered mixer that mix or chop or liquefy foods", "synonyms": ["blender", "liquidizer", "liquidiser"], "image_count": 0, "id": 112, "frequency": "f", "synset": "blender.n.01"}, {"name": "blimp", "instance_count": 0, "def": "a small nonrigid airship used for observation or as a barrage balloon", "synonyms": ["blimp"], "image_count": 0, "id": 113, "frequency": "r", "synset": "blimp.n.02"}, {"name": "blinker", "instance_count": 0, "def": "a light that flashes on and off; used as a signal or to send messages", "synonyms": ["blinker", "flasher"], "image_count": 0, "id": 114, "frequency": "f", "synset": "blinker.n.01"}, {"name": "blouse", "instance_count": 0, "def": "a top worn by women", "synonyms": ["blouse"], "image_count": 0, "id": 115, "frequency": "f", "synset": "blouse.n.01"}, {"name": "blueberry", "instance_count": 0, "def": "sweet edible dark-blue berries of blueberry plants", "synonyms": ["blueberry"], "image_count": 0, "id": 116, "frequency": "f", "synset": "blueberry.n.02"}, {"name": "gameboard", "instance_count": 0, "def": "a flat portable surface (usually rectangular) designed for board games", "synonyms": ["gameboard"], "image_count": 0, "id": 117, "frequency": "r", "synset": "board.n.09"}, {"name": "boat", "instance_count": 0, "def": "a vessel for travel on water", "synonyms": ["boat", "ship_(boat)"], "image_count": 0, "id": 118, "frequency": "f", "synset": "boat.n.01"}, {"name": "bob", "instance_count": 0, "def": "a small float usually made of cork; attached to a fishing line", "synonyms": ["bob", "bobber", "bobfloat"], "image_count": 0, "id": 119, "frequency": "r", "synset": "bob.n.05"}, {"name": "bobbin", "instance_count": 0, "def": "a thing around which thread/tape/film or other flexible materials can be wound", "synonyms": ["bobbin", "spool", "reel"], "image_count": 0, "id": 120, "frequency": "c", "synset": "bobbin.n.01"}, {"name": "bobby_pin", "instance_count": 0, "def": "a flat wire hairpin used to hold bobbed hair in place", "synonyms": ["bobby_pin", "hairgrip"], "image_count": 0, "id": 121, "frequency": "c", "synset": "bobby_pin.n.01"}, {"name": "boiled_egg", "instance_count": 0, "def": "egg cooked briefly in the shell in gently boiling water", "synonyms": ["boiled_egg", "coddled_egg"], "image_count": 0, "id": 122, "frequency": "c", "synset": "boiled_egg.n.01"}, {"name": "bolo_tie", "instance_count": 0, "def": "a cord fastened around the neck with an ornamental clasp and worn as a necktie", "synonyms": ["bolo_tie", "bolo", "bola_tie", "bola"], "image_count": 0, "id": 123, "frequency": "r", "synset": "bolo_tie.n.01"}, {"name": "deadbolt", "instance_count": 0, "def": "the part of a lock that is engaged or withdrawn with a key", "synonyms": ["deadbolt"], "image_count": 0, "id": 124, "frequency": "c", "synset": "bolt.n.03"}, {"name": "bolt", "instance_count": 0, "def": "a screw that screws into a nut to form a fastener", "synonyms": ["bolt"], "image_count": 0, "id": 125, "frequency": "f", "synset": "bolt.n.06"}, {"name": "bonnet", "instance_count": 0, "def": "a hat tied under the chin", "synonyms": ["bonnet"], "image_count": 0, "id": 126, "frequency": "r", "synset": "bonnet.n.01"}, {"name": "book", "instance_count": 0, "def": "a written work or composition that has been published", "synonyms": ["book"], "image_count": 0, "id": 127, "frequency": "f", "synset": "book.n.01"}, {"name": "bookcase", "instance_count": 0, "def": "a piece of furniture with shelves for storing books", "synonyms": ["bookcase"], "image_count": 0, "id": 128, "frequency": "c", "synset": "bookcase.n.01"}, {"name": "booklet", "instance_count": 0, "def": "a small book usually having a paper cover", "synonyms": ["booklet", "brochure", "leaflet", "pamphlet"], "image_count": 0, "id": 129, "frequency": "c", "synset": "booklet.n.01"}, {"name": "bookmark", "instance_count": 0, "def": "a marker (a piece of paper or ribbon) placed between the pages of a book", "synonyms": ["bookmark", "bookmarker"], "image_count": 0, "id": 130, "frequency": "r", "synset": "bookmark.n.01"}, {"name": "boom_microphone", "instance_count": 0, "def": "a pole carrying an overhead microphone projected over a film or tv set", "synonyms": ["boom_microphone", "microphone_boom"], "image_count": 0, "id": 131, "frequency": "r", "synset": "boom.n.04"}, {"name": "boot", "instance_count": 0, "def": "footwear that covers the whole foot and lower leg", "synonyms": ["boot"], "image_count": 0, "id": 132, "frequency": "f", "synset": "boot.n.01"}, {"name": "bottle", "instance_count": 0, "def": "a glass or plastic vessel used for storing drinks or other liquids", "synonyms": ["bottle"], "image_count": 0, "id": 133, "frequency": "f", "synset": "bottle.n.01"}, {"name": "bottle_opener", "instance_count": 0, "def": "an opener for removing caps or corks from bottles", "synonyms": ["bottle_opener"], "image_count": 0, "id": 134, "frequency": "c", "synset": "bottle_opener.n.01"}, {"name": "bouquet", "instance_count": 0, "def": "an arrangement of flowers that is usually given as a present", "synonyms": ["bouquet"], "image_count": 0, "id": 135, "frequency": "c", "synset": "bouquet.n.01"}, {"name": "bow_(weapon)", "instance_count": 0, "def": "a weapon for shooting arrows", "synonyms": ["bow_(weapon)"], "image_count": 0, "id": 136, "frequency": "r", "synset": "bow.n.04"}, {"name": "bow_(decorative_ribbons)", "instance_count": 0, "def": "a decorative interlacing of ribbons", "synonyms": ["bow_(decorative_ribbons)"], "image_count": 0, "id": 137, "frequency": "f", "synset": "bow.n.08"}, {"name": "bow-tie", "instance_count": 0, "def": "a man's tie that ties in a bow", "synonyms": ["bow-tie", "bowtie"], "image_count": 0, "id": 138, "frequency": "f", "synset": "bow_tie.n.01"}, {"name": "bowl", "instance_count": 0, "def": "a dish that is round and open at the top for serving foods", "synonyms": ["bowl"], "image_count": 0, "id": 139, "frequency": "f", "synset": "bowl.n.03"}, {"name": "pipe_bowl", "instance_count": 0, "def": "a small round container that is open at the top for holding tobacco", "synonyms": ["pipe_bowl"], "image_count": 0, "id": 140, "frequency": "r", "synset": "bowl.n.08"}, {"name": "bowler_hat", "instance_count": 0, "def": "a felt hat that is round and hard with a narrow brim", "synonyms": ["bowler_hat", "bowler", "derby_hat", "derby", "plug_hat"], "image_count": 0, "id": 141, "frequency": "c", "synset": "bowler_hat.n.01"}, {"name": "bowling_ball", "instance_count": 0, "def": "a large ball with finger holes used in the sport of bowling", "synonyms": ["bowling_ball"], "image_count": 0, "id": 142, "frequency": "r", "synset": "bowling_ball.n.01"}, {"name": "box", "instance_count": 0, "def": "a (usually rectangular) container; may have a lid", "synonyms": ["box"], "image_count": 0, "id": 143, "frequency": "f", "synset": "box.n.01"}, {"name": "boxing_glove", "instance_count": 0, "def": "large glove coverings the fists of a fighter worn for the sport of boxing", "synonyms": ["boxing_glove"], "image_count": 0, "id": 144, "frequency": "r", "synset": "boxing_glove.n.01"}, {"name": "suspenders", "instance_count": 0, "def": "elastic straps that hold trousers up (usually used in the plural)", "synonyms": ["suspenders"], "image_count": 0, "id": 145, "frequency": "c", "synset": "brace.n.06"}, {"name": "bracelet", "instance_count": 0, "def": "jewelry worn around the wrist for decoration", "synonyms": ["bracelet", "bangle"], "image_count": 0, "id": 146, "frequency": "f", "synset": "bracelet.n.02"}, {"name": "brass_plaque", "instance_count": 0, "def": "a memorial made of brass", "synonyms": ["brass_plaque"], "image_count": 0, "id": 147, "frequency": "r", "synset": "brass.n.07"}, {"name": "brassiere", "instance_count": 0, "def": "an undergarment worn by women to support their breasts", "synonyms": ["brassiere", "bra", "bandeau"], "image_count": 0, "id": 148, "frequency": "c", "synset": "brassiere.n.01"}, {"name": "bread-bin", "instance_count": 0, "def": "a container used to keep bread or cake in", "synonyms": ["bread-bin", "breadbox"], "image_count": 0, "id": 149, "frequency": "c", "synset": "bread-bin.n.01"}, {"name": "bread", "instance_count": 0, "def": "food made from dough of flour or meal and usually raised with yeast or baking powder and then baked", "synonyms": ["bread"], "image_count": 0, "id": 150, "frequency": "f", "synset": "bread.n.01"}, {"name": "breechcloth", "instance_count": 0, "def": "a garment that provides covering for the loins", "synonyms": ["breechcloth", "breechclout", "loincloth"], "image_count": 0, "id": 151, "frequency": "r", "synset": "breechcloth.n.01"}, {"name": "bridal_gown", "instance_count": 0, "def": "a gown worn by the bride at a wedding", "synonyms": ["bridal_gown", "wedding_gown", "wedding_dress"], "image_count": 0, "id": 152, "frequency": "f", "synset": "bridal_gown.n.01"}, {"name": "briefcase", "instance_count": 0, "def": "a case with a handle; for carrying papers or files or books", "synonyms": ["briefcase"], "image_count": 0, "id": 153, "frequency": "c", "synset": "briefcase.n.01"}, {"name": "broccoli", "instance_count": 0, "def": "plant with dense clusters of tight green flower buds", "synonyms": ["broccoli"], "image_count": 0, "id": 154, "frequency": "f", "synset": "broccoli.n.01"}, {"name": "broach", "instance_count": 0, "def": "a decorative pin worn by women", "synonyms": ["broach"], "image_count": 0, "id": 155, "frequency": "r", "synset": "brooch.n.01"}, {"name": "broom", "instance_count": 0, "def": "bundle of straws or twigs attached to a long handle; used for cleaning", "synonyms": ["broom"], "image_count": 0, "id": 156, "frequency": "c", "synset": "broom.n.01"}, {"name": "brownie", "instance_count": 0, "def": "square or bar of very rich chocolate cake usually with nuts", "synonyms": ["brownie"], "image_count": 0, "id": 157, "frequency": "c", "synset": "brownie.n.03"}, {"name": "brussels_sprouts", "instance_count": 0, "def": "the small edible cabbage-like buds growing along a stalk", "synonyms": ["brussels_sprouts"], "image_count": 0, "id": 158, "frequency": "c", "synset": "brussels_sprouts.n.01"}, {"name": "bubble_gum", "instance_count": 0, "def": "a kind of chewing gum that can be blown into bubbles", "synonyms": ["bubble_gum"], "image_count": 0, "id": 159, "frequency": "r", "synset": "bubble_gum.n.01"}, {"name": "bucket", "instance_count": 0, "def": "a roughly cylindrical vessel that is open at the top", "synonyms": ["bucket", "pail"], "image_count": 0, "id": 160, "frequency": "f", "synset": "bucket.n.01"}, {"name": "horse_buggy", "instance_count": 0, "def": "a small lightweight carriage; drawn by a single horse", "synonyms": ["horse_buggy"], "image_count": 0, "id": 161, "frequency": "r", "synset": "buggy.n.01"}, {"name": "bull", "instance_count": 0, "def": "a cow with horns", "synonyms": ["horned_cow"], "image_count": 0, "id": 162, "frequency": "c", "synset": "bull.n.11"}, {"name": "bulldog", "instance_count": 0, "def": "a thickset short-haired dog with a large head and strong undershot lower jaw", "synonyms": ["bulldog"], "image_count": 0, "id": 163, "frequency": "c", "synset": "bulldog.n.01"}, {"name": "bulldozer", "instance_count": 0, "def": "large powerful tractor; a large blade in front flattens areas of ground", "synonyms": ["bulldozer", "dozer"], "image_count": 0, "id": 164, "frequency": "r", "synset": "bulldozer.n.01"}, {"name": "bullet_train", "instance_count": 0, "def": "a high-speed passenger train", "synonyms": ["bullet_train"], "image_count": 0, "id": 165, "frequency": "c", "synset": "bullet_train.n.01"}, {"name": "bulletin_board", "instance_count": 0, "def": "a board that hangs on a wall; displays announcements", "synonyms": ["bulletin_board", "notice_board"], "image_count": 0, "id": 166, "frequency": "c", "synset": "bulletin_board.n.02"}, {"name": "bulletproof_vest", "instance_count": 0, "def": "a vest capable of resisting the impact of a bullet", "synonyms": ["bulletproof_vest"], "image_count": 0, "id": 167, "frequency": "r", "synset": "bulletproof_vest.n.01"}, {"name": "bullhorn", "instance_count": 0, "def": "a portable loudspeaker with built-in microphone and amplifier", "synonyms": ["bullhorn", "megaphone"], "image_count": 0, "id": 168, "frequency": "c", "synset": "bullhorn.n.01"}, {"name": "bun", "instance_count": 0, "def": "small rounded bread either plain or sweet", "synonyms": ["bun", "roll"], "image_count": 0, "id": 169, "frequency": "f", "synset": "bun.n.01"}, {"name": "bunk_bed", "instance_count": 0, "def": "beds built one above the other", "synonyms": ["bunk_bed"], "image_count": 0, "id": 170, "frequency": "c", "synset": "bunk_bed.n.01"}, {"name": "buoy", "instance_count": 0, "def": "a float attached by rope to the seabed to mark channels in a harbor or underwater hazards", "synonyms": ["buoy"], "image_count": 0, "id": 171, "frequency": "f", "synset": "buoy.n.01"}, {"name": "burrito", "instance_count": 0, "def": "a flour tortilla folded around a filling", "synonyms": ["burrito"], "image_count": 0, "id": 172, "frequency": "r", "synset": "burrito.n.01"}, {"name": "bus_(vehicle)", "instance_count": 0, "def": "a vehicle carrying many passengers; used for public transport", "synonyms": ["bus_(vehicle)", "autobus", "charabanc", "double-decker", "motorbus", "motorcoach"], "image_count": 0, "id": 173, "frequency": "f", "synset": "bus.n.01"}, {"name": "business_card", "instance_count": 0, "def": "a card on which are printed the person's name and business affiliation", "synonyms": ["business_card"], "image_count": 0, "id": 174, "frequency": "c", "synset": "business_card.n.01"}, {"name": "butter", "instance_count": 0, "def": "an edible emulsion of fat globules made by churning milk or cream; for cooking and table use", "synonyms": ["butter"], "image_count": 0, "id": 175, "frequency": "f", "synset": "butter.n.01"}, {"name": "butterfly", "instance_count": 0, "def": "insect typically having a slender body with knobbed antennae and broad colorful wings", "synonyms": ["butterfly"], "image_count": 0, "id": 176, "frequency": "c", "synset": "butterfly.n.01"}, {"name": "button", "instance_count": 0, "def": "a round fastener sewn to shirts and coats etc to fit through buttonholes", "synonyms": ["button"], "image_count": 0, "id": 177, "frequency": "f", "synset": "button.n.01"}, {"name": "cab_(taxi)", "instance_count": 0, "def": "a car that takes passengers where they want to go in exchange for money", "synonyms": ["cab_(taxi)", "taxi", "taxicab"], "image_count": 0, "id": 178, "frequency": "f", "synset": "cab.n.03"}, {"name": "cabana", "instance_count": 0, "def": "a small tent used as a dressing room beside the sea or a swimming pool", "synonyms": ["cabana"], "image_count": 0, "id": 179, "frequency": "r", "synset": "cabana.n.01"}, {"name": "cabin_car", "instance_count": 0, "def": "a car on a freight train for use of the train crew; usually the last car on the train", "synonyms": ["cabin_car", "caboose"], "image_count": 0, "id": 180, "frequency": "c", "synset": "cabin_car.n.01"}, {"name": "cabinet", "instance_count": 0, "def": "a piece of furniture resembling a cupboard with doors and shelves and drawers", "synonyms": ["cabinet"], "image_count": 0, "id": 181, "frequency": "f", "synset": "cabinet.n.01"}, {"name": "locker", "instance_count": 0, "def": "a storage compartment for clothes and valuables; usually it has a lock", "synonyms": ["locker", "storage_locker"], "image_count": 0, "id": 182, "frequency": "r", "synset": "cabinet.n.03"}, {"name": "cake", "instance_count": 0, "def": "baked goods made from or based on a mixture of flour, sugar, eggs, and fat", "synonyms": ["cake"], "image_count": 0, "id": 183, "frequency": "f", "synset": "cake.n.03"}, {"name": "calculator", "instance_count": 0, "def": "a small machine that is used for mathematical calculations", "synonyms": ["calculator"], "image_count": 0, "id": 184, "frequency": "c", "synset": "calculator.n.02"}, {"name": "calendar", "instance_count": 0, "def": "a list or register of events (appointments/social events/court cases, etc)", "synonyms": ["calendar"], "image_count": 0, "id": 185, "frequency": "f", "synset": "calendar.n.02"}, {"name": "calf", "instance_count": 0, "def": "young of domestic cattle", "synonyms": ["calf"], "image_count": 0, "id": 186, "frequency": "c", "synset": "calf.n.01"}, {"name": "camcorder", "instance_count": 0, "def": "a portable television camera and videocassette recorder", "synonyms": ["camcorder"], "image_count": 0, "id": 187, "frequency": "c", "synset": "camcorder.n.01"}, {"name": "camel", "instance_count": 0, "def": "cud-chewing mammal used as a draft or saddle animal in desert regions", "synonyms": ["camel"], "image_count": 0, "id": 188, "frequency": "c", "synset": "camel.n.01"}, {"name": "camera", "instance_count": 0, "def": "equipment for taking photographs", "synonyms": ["camera"], "image_count": 0, "id": 189, "frequency": "f", "synset": "camera.n.01"}, {"name": "camera_lens", "instance_count": 0, "def": "a lens that focuses the image in a camera", "synonyms": ["camera_lens"], "image_count": 0, "id": 190, "frequency": "c", "synset": "camera_lens.n.01"}, {"name": "camper_(vehicle)", "instance_count": 0, "def": "a recreational vehicle equipped for camping out while traveling", "synonyms": ["camper_(vehicle)", "camping_bus", "motor_home"], "image_count": 0, "id": 191, "frequency": "c", "synset": "camper.n.02"}, {"name": "can", "instance_count": 0, "def": "airtight sealed metal container for food or drink or paint etc.", "synonyms": ["can", "tin_can"], "image_count": 0, "id": 192, "frequency": "f", "synset": "can.n.01"}, {"name": "can_opener", "instance_count": 0, "def": "a device for cutting cans open", "synonyms": ["can_opener", "tin_opener"], "image_count": 0, "id": 193, "frequency": "c", "synset": "can_opener.n.01"}, {"name": "candle", "instance_count": 0, "def": "stick of wax with a wick in the middle", "synonyms": ["candle", "candlestick"], "image_count": 0, "id": 194, "frequency": "f", "synset": "candle.n.01"}, {"name": "candle_holder", "instance_count": 0, "def": "a holder with sockets for candles", "synonyms": ["candle_holder"], "image_count": 0, "id": 195, "frequency": "f", "synset": "candlestick.n.01"}, {"name": "candy_bar", "instance_count": 0, "def": "a candy shaped as a bar", "synonyms": ["candy_bar"], "image_count": 0, "id": 196, "frequency": "r", "synset": "candy_bar.n.01"}, {"name": "candy_cane", "instance_count": 0, "def": "a hard candy in the shape of a rod (usually with stripes)", "synonyms": ["candy_cane"], "image_count": 0, "id": 197, "frequency": "c", "synset": "candy_cane.n.01"}, {"name": "walking_cane", "instance_count": 0, "def": "a stick that people can lean on to help them walk", "synonyms": ["walking_cane"], "image_count": 0, "id": 198, "frequency": "c", "synset": "cane.n.01"}, {"name": "canister", "instance_count": 0, "def": "metal container for storing dry foods such as tea or flour", "synonyms": ["canister", "cannister"], "image_count": 0, "id": 199, "frequency": "c", "synset": "canister.n.02"}, {"name": "canoe", "instance_count": 0, "def": "small and light boat; pointed at both ends; propelled with a paddle", "synonyms": ["canoe"], "image_count": 0, "id": 200, "frequency": "c", "synset": "canoe.n.01"}, {"name": "cantaloup", "instance_count": 0, "def": "the fruit of a cantaloup vine; small to medium-sized melon with yellowish flesh", "synonyms": ["cantaloup", "cantaloupe"], "image_count": 0, "id": 201, "frequency": "c", "synset": "cantaloup.n.02"}, {"name": "canteen", "instance_count": 0, "def": "a flask for carrying water; used by soldiers or travelers", "synonyms": ["canteen"], "image_count": 0, "id": 202, "frequency": "r", "synset": "canteen.n.01"}, {"name": "cap_(headwear)", "instance_count": 0, "def": "a tight-fitting headwear", "synonyms": ["cap_(headwear)"], "image_count": 0, "id": 203, "frequency": "f", "synset": "cap.n.01"}, {"name": "bottle_cap", "instance_count": 0, "def": "a top (as for a bottle)", "synonyms": ["bottle_cap", "cap_(container_lid)"], "image_count": 0, "id": 204, "frequency": "f", "synset": "cap.n.02"}, {"name": "cape", "instance_count": 0, "def": "a sleeveless garment like a cloak but shorter", "synonyms": ["cape"], "image_count": 0, "id": 205, "frequency": "c", "synset": "cape.n.02"}, {"name": "cappuccino", "instance_count": 0, "def": "equal parts of espresso and steamed milk", "synonyms": ["cappuccino", "coffee_cappuccino"], "image_count": 0, "id": 206, "frequency": "c", "synset": "cappuccino.n.01"}, {"name": "car_(automobile)", "instance_count": 0, "def": "a motor vehicle with four wheels", "synonyms": ["car_(automobile)", "auto_(automobile)", "automobile"], "image_count": 0, "id": 207, "frequency": "f", "synset": "car.n.01"}, {"name": "railcar_(part_of_a_train)", "instance_count": 0, "def": "a wheeled vehicle adapted to the rails of railroad (mark each individual railcar separately)", "synonyms": ["railcar_(part_of_a_train)", "railway_car_(part_of_a_train)", "railroad_car_(part_of_a_train)"], "image_count": 0, "id": 208, "frequency": "f", "synset": "car.n.02"}, {"name": "elevator_car", "instance_count": 0, "def": "where passengers ride up and down", "synonyms": ["elevator_car"], "image_count": 0, "id": 209, "frequency": "r", "synset": "car.n.04"}, {"name": "car_battery", "instance_count": 0, "def": "a battery in a motor vehicle", "synonyms": ["car_battery", "automobile_battery"], "image_count": 0, "id": 210, "frequency": "r", "synset": "car_battery.n.01"}, {"name": "identity_card", "instance_count": 0, "def": "a card certifying the identity of the bearer", "synonyms": ["identity_card"], "image_count": 0, "id": 211, "frequency": "c", "synset": "card.n.02"}, {"name": "card", "instance_count": 0, "def": "a rectangular piece of paper used to send messages (e.g. greetings or pictures)", "synonyms": ["card"], "image_count": 0, "id": 212, "frequency": "c", "synset": "card.n.03"}, {"name": "cardigan", "instance_count": 0, "def": "knitted jacket that is fastened up the front with buttons or a zipper", "synonyms": ["cardigan"], "image_count": 0, "id": 213, "frequency": "c", "synset": "cardigan.n.01"}, {"name": "cargo_ship", "instance_count": 0, "def": "a ship designed to carry cargo", "synonyms": ["cargo_ship", "cargo_vessel"], "image_count": 0, "id": 214, "frequency": "r", "synset": "cargo_ship.n.01"}, {"name": "carnation", "instance_count": 0, "def": "plant with pink to purple-red spice-scented usually double flowers", "synonyms": ["carnation"], "image_count": 0, "id": 215, "frequency": "r", "synset": "carnation.n.01"}, {"name": "horse_carriage", "instance_count": 0, "def": "a vehicle with wheels drawn by one or more horses", "synonyms": ["horse_carriage"], "image_count": 0, "id": 216, "frequency": "c", "synset": "carriage.n.02"}, {"name": "carrot", "instance_count": 0, "def": "deep orange edible root of the cultivated carrot plant", "synonyms": ["carrot"], "image_count": 0, "id": 217, "frequency": "f", "synset": "carrot.n.01"}, {"name": "tote_bag", "instance_count": 0, "def": "a capacious bag or basket", "synonyms": ["tote_bag"], "image_count": 0, "id": 218, "frequency": "f", "synset": "carryall.n.01"}, {"name": "cart", "instance_count": 0, "def": "a heavy open wagon usually having two wheels and drawn by an animal", "synonyms": ["cart"], "image_count": 0, "id": 219, "frequency": "c", "synset": "cart.n.01"}, {"name": "carton", "instance_count": 0, "def": "a container made of cardboard for holding food or drink", "synonyms": ["carton"], "image_count": 0, "id": 220, "frequency": "c", "synset": "carton.n.02"}, {"name": "cash_register", "instance_count": 0, "def": "a cashbox with an adding machine to register transactions", "synonyms": ["cash_register", "register_(for_cash_transactions)"], "image_count": 0, "id": 221, "frequency": "c", "synset": "cash_register.n.01"}, {"name": "casserole", "instance_count": 0, "def": "food cooked and served in a casserole", "synonyms": ["casserole"], "image_count": 0, "id": 222, "frequency": "r", "synset": "casserole.n.01"}, {"name": "cassette", "instance_count": 0, "def": "a container that holds a magnetic tape used for recording or playing sound or video", "synonyms": ["cassette"], "image_count": 0, "id": 223, "frequency": "r", "synset": "cassette.n.01"}, {"name": "cast", "instance_count": 0, "def": "bandage consisting of a firm covering that immobilizes broken bones while they heal", "synonyms": ["cast", "plaster_cast", "plaster_bandage"], "image_count": 0, "id": 224, "frequency": "c", "synset": "cast.n.05"}, {"name": "cat", "instance_count": 0, "def": "a domestic house cat", "synonyms": ["cat"], "image_count": 0, "id": 225, "frequency": "f", "synset": "cat.n.01"}, {"name": "cauliflower", "instance_count": 0, "def": "edible compact head of white undeveloped flowers", "synonyms": ["cauliflower"], "image_count": 0, "id": 226, "frequency": "f", "synset": "cauliflower.n.02"}, {"name": "cayenne_(spice)", "instance_count": 0, "def": "ground pods and seeds of pungent red peppers of the genus Capsicum", "synonyms": ["cayenne_(spice)", "cayenne_pepper_(spice)", "red_pepper_(spice)"], "image_count": 0, "id": 227, "frequency": "c", "synset": "cayenne.n.02"}, {"name": "CD_player", "instance_count": 0, "def": "electronic equipment for playing compact discs (CDs)", "synonyms": ["CD_player"], "image_count": 0, "id": 228, "frequency": "c", "synset": "cd_player.n.01"}, {"name": "celery", "instance_count": 0, "def": "widely cultivated herb with aromatic leaf stalks that are eaten raw or cooked", "synonyms": ["celery"], "image_count": 0, "id": 229, "frequency": "f", "synset": "celery.n.01"}, {"name": "cellular_telephone", "instance_count": 0, "def": "a hand-held mobile telephone", "synonyms": ["cellular_telephone", "cellular_phone", "cellphone", "mobile_phone", "smart_phone"], "image_count": 0, "id": 230, "frequency": "f", "synset": "cellular_telephone.n.01"}, {"name": "chain_mail", "instance_count": 0, "def": "(Middle Ages) flexible armor made of interlinked metal rings", "synonyms": ["chain_mail", "ring_mail", "chain_armor", "chain_armour", "ring_armor", "ring_armour"], "image_count": 0, "id": 231, "frequency": "r", "synset": "chain_mail.n.01"}, {"name": "chair", "instance_count": 0, "def": "a seat for one person, with a support for the back", "synonyms": ["chair"], "image_count": 0, "id": 232, "frequency": "f", "synset": "chair.n.01"}, {"name": "chaise_longue", "instance_count": 0, "def": "a long chair; for reclining", "synonyms": ["chaise_longue", "chaise", "daybed"], "image_count": 0, "id": 233, "frequency": "r", "synset": "chaise_longue.n.01"}, {"name": "chalice", "instance_count": 0, "def": "a bowl-shaped drinking vessel; especially the Eucharistic cup", "synonyms": ["chalice"], "image_count": 0, "id": 234, "frequency": "r", "synset": "chalice.n.01"}, {"name": "chandelier", "instance_count": 0, "def": "branched lighting fixture; often ornate; hangs from the ceiling", "synonyms": ["chandelier"], "image_count": 0, "id": 235, "frequency": "f", "synset": "chandelier.n.01"}, {"name": "chap", "instance_count": 0, "def": "leather leggings without a seat; worn over trousers by cowboys to protect their legs", "synonyms": ["chap"], "image_count": 0, "id": 236, "frequency": "r", "synset": "chap.n.04"}, {"name": "checkbook", "instance_count": 0, "def": "a book issued to holders of checking accounts", "synonyms": ["checkbook", "chequebook"], "image_count": 0, "id": 237, "frequency": "r", "synset": "checkbook.n.01"}, {"name": "checkerboard", "instance_count": 0, "def": "a board having 64 squares of two alternating colors", "synonyms": ["checkerboard"], "image_count": 0, "id": 238, "frequency": "r", "synset": "checkerboard.n.01"}, {"name": "cherry", "instance_count": 0, "def": "a red fruit with a single hard stone", "synonyms": ["cherry"], "image_count": 0, "id": 239, "frequency": "c", "synset": "cherry.n.03"}, {"name": "chessboard", "instance_count": 0, "def": "a checkerboard used to play chess", "synonyms": ["chessboard"], "image_count": 0, "id": 240, "frequency": "r", "synset": "chessboard.n.01"}, {"name": "chicken_(animal)", "instance_count": 0, "def": "a domestic fowl bred for flesh or eggs", "synonyms": ["chicken_(animal)"], "image_count": 0, "id": 241, "frequency": "c", "synset": "chicken.n.02"}, {"name": "chickpea", "instance_count": 0, "def": "the seed of the chickpea plant; usually dried", "synonyms": ["chickpea", "garbanzo"], "image_count": 0, "id": 242, "frequency": "c", "synset": "chickpea.n.01"}, {"name": "chili_(vegetable)", "instance_count": 0, "def": "very hot and finely tapering pepper of special pungency", "synonyms": ["chili_(vegetable)", "chili_pepper_(vegetable)", "chilli_(vegetable)", "chilly_(vegetable)", "chile_(vegetable)"], "image_count": 0, "id": 243, "frequency": "c", "synset": "chili.n.02"}, {"name": "chime", "instance_count": 0, "def": "an instrument consisting of a set of bells that are struck with a hammer", "synonyms": ["chime", "gong"], "image_count": 0, "id": 244, "frequency": "r", "synset": "chime.n.01"}, {"name": "chinaware", "instance_count": 0, "def": "dishware made of high quality porcelain", "synonyms": ["chinaware"], "image_count": 0, "id": 245, "frequency": "r", "synset": "chinaware.n.01"}, {"name": "crisp_(potato_chip)", "instance_count": 0, "def": "a thin crisp slice of potato fried in deep fat", "synonyms": ["crisp_(potato_chip)", "potato_chip"], "image_count": 0, "id": 246, "frequency": "c", "synset": "chip.n.04"}, {"name": "poker_chip", "instance_count": 0, "def": "a small disk-shaped counter used to represent money when gambling", "synonyms": ["poker_chip"], "image_count": 0, "id": 247, "frequency": "r", "synset": "chip.n.06"}, {"name": "chocolate_bar", "instance_count": 0, "def": "a bar of chocolate candy", "synonyms": ["chocolate_bar"], "image_count": 0, "id": 248, "frequency": "c", "synset": "chocolate_bar.n.01"}, {"name": "chocolate_cake", "instance_count": 0, "def": "cake containing chocolate", "synonyms": ["chocolate_cake"], "image_count": 0, "id": 249, "frequency": "c", "synset": "chocolate_cake.n.01"}, {"name": "chocolate_milk", "instance_count": 0, "def": "milk flavored with chocolate syrup", "synonyms": ["chocolate_milk"], "image_count": 0, "id": 250, "frequency": "r", "synset": "chocolate_milk.n.01"}, {"name": "chocolate_mousse", "instance_count": 0, "def": "dessert mousse made with chocolate", "synonyms": ["chocolate_mousse"], "image_count": 0, "id": 251, "frequency": "r", "synset": "chocolate_mousse.n.01"}, {"name": "choker", "instance_count": 0, "def": "shirt collar, animal collar, or tight-fitting necklace", "synonyms": ["choker", "collar", "neckband"], "image_count": 0, "id": 252, "frequency": "f", "synset": "choker.n.03"}, {"name": "chopping_board", "instance_count": 0, "def": "a wooden board where meats or vegetables can be cut", "synonyms": ["chopping_board", "cutting_board", "chopping_block"], "image_count": 0, "id": 253, "frequency": "f", "synset": "chopping_board.n.01"}, {"name": "chopstick", "instance_count": 0, "def": "one of a pair of slender sticks used as oriental tableware to eat food with", "synonyms": ["chopstick"], "image_count": 0, "id": 254, "frequency": "f", "synset": "chopstick.n.01"}, {"name": "Christmas_tree", "instance_count": 0, "def": "an ornamented evergreen used as a Christmas decoration", "synonyms": ["Christmas_tree"], "image_count": 0, "id": 255, "frequency": "f", "synset": "christmas_tree.n.05"}, {"name": "slide", "instance_count": 0, "def": "sloping channel through which things can descend", "synonyms": ["slide"], "image_count": 0, "id": 256, "frequency": "c", "synset": "chute.n.02"}, {"name": "cider", "instance_count": 0, "def": "a beverage made from juice pressed from apples", "synonyms": ["cider", "cyder"], "image_count": 0, "id": 257, "frequency": "r", "synset": "cider.n.01"}, {"name": "cigar_box", "instance_count": 0, "def": "a box for holding cigars", "synonyms": ["cigar_box"], "image_count": 0, "id": 258, "frequency": "r", "synset": "cigar_box.n.01"}, {"name": "cigarette", "instance_count": 0, "def": "finely ground tobacco wrapped in paper; for smoking", "synonyms": ["cigarette"], "image_count": 0, "id": 259, "frequency": "f", "synset": "cigarette.n.01"}, {"name": "cigarette_case", "instance_count": 0, "def": "a small flat case for holding cigarettes", "synonyms": ["cigarette_case", "cigarette_pack"], "image_count": 0, "id": 260, "frequency": "c", "synset": "cigarette_case.n.01"}, {"name": "cistern", "instance_count": 0, "def": "a tank that holds the water used to flush a toilet", "synonyms": ["cistern", "water_tank"], "image_count": 0, "id": 261, "frequency": "f", "synset": "cistern.n.02"}, {"name": "clarinet", "instance_count": 0, "def": "a single-reed instrument with a straight tube", "synonyms": ["clarinet"], "image_count": 0, "id": 262, "frequency": "r", "synset": "clarinet.n.01"}, {"name": "clasp", "instance_count": 0, "def": "a fastener (as a buckle or hook) that is used to hold two things together", "synonyms": ["clasp"], "image_count": 0, "id": 263, "frequency": "c", "synset": "clasp.n.01"}, {"name": "cleansing_agent", "instance_count": 0, "def": "a preparation used in cleaning something", "synonyms": ["cleansing_agent", "cleanser", "cleaner"], "image_count": 0, "id": 264, "frequency": "c", "synset": "cleansing_agent.n.01"}, {"name": "cleat_(for_securing_rope)", "instance_count": 0, "def": "a fastener (usually with two projecting horns) around which a rope can be secured", "synonyms": ["cleat_(for_securing_rope)"], "image_count": 0, "id": 265, "frequency": "r", "synset": "cleat.n.02"}, {"name": "clementine", "instance_count": 0, "def": "a variety of mandarin orange", "synonyms": ["clementine"], "image_count": 0, "id": 266, "frequency": "r", "synset": "clementine.n.01"}, {"name": "clip", "instance_count": 0, "def": "any of various small fasteners used to hold loose articles together", "synonyms": ["clip"], "image_count": 0, "id": 267, "frequency": "c", "synset": "clip.n.03"}, {"name": "clipboard", "instance_count": 0, "def": "a small writing board with a clip at the top for holding papers", "synonyms": ["clipboard"], "image_count": 0, "id": 268, "frequency": "c", "synset": "clipboard.n.01"}, {"name": "clippers_(for_plants)", "instance_count": 0, "def": "shears for cutting grass or shrubbery (often used in the plural)", "synonyms": ["clippers_(for_plants)"], "image_count": 0, "id": 269, "frequency": "r", "synset": "clipper.n.03"}, {"name": "cloak", "instance_count": 0, "def": "a loose outer garment", "synonyms": ["cloak"], "image_count": 0, "id": 270, "frequency": "r", "synset": "cloak.n.02"}, {"name": "clock", "instance_count": 0, "def": "a timepiece that shows the time of day", "synonyms": ["clock", "timepiece", "timekeeper"], "image_count": 0, "id": 271, "frequency": "f", "synset": "clock.n.01"}, {"name": "clock_tower", "instance_count": 0, "def": "a tower with a large clock visible high up on an outside face", "synonyms": ["clock_tower"], "image_count": 0, "id": 272, "frequency": "f", "synset": "clock_tower.n.01"}, {"name": "clothes_hamper", "instance_count": 0, "def": "a hamper that holds dirty clothes to be washed or wet clothes to be dried", "synonyms": ["clothes_hamper", "laundry_basket", "clothes_basket"], "image_count": 0, "id": 273, "frequency": "c", "synset": "clothes_hamper.n.01"}, {"name": "clothespin", "instance_count": 0, "def": "wood or plastic fastener; for holding clothes on a clothesline", "synonyms": ["clothespin", "clothes_peg"], "image_count": 0, "id": 274, "frequency": "c", "synset": "clothespin.n.01"}, {"name": "clutch_bag", "instance_count": 0, "def": "a woman's strapless purse that is carried in the hand", "synonyms": ["clutch_bag"], "image_count": 0, "id": 275, "frequency": "r", "synset": "clutch_bag.n.01"}, {"name": "coaster", "instance_count": 0, "def": "a covering (plate or mat) that protects the surface of a table", "synonyms": ["coaster"], "image_count": 0, "id": 276, "frequency": "f", "synset": "coaster.n.03"}, {"name": "coat", "instance_count": 0, "def": "an outer garment that has sleeves and covers the body from shoulder down", "synonyms": ["coat"], "image_count": 0, "id": 277, "frequency": "f", "synset": "coat.n.01"}, {"name": "coat_hanger", "instance_count": 0, "def": "a hanger that is shaped like a person's shoulders", "synonyms": ["coat_hanger", "clothes_hanger", "dress_hanger"], "image_count": 0, "id": 278, "frequency": "c", "synset": "coat_hanger.n.01"}, {"name": "coatrack", "instance_count": 0, "def": "a rack with hooks for temporarily holding coats and hats", "synonyms": ["coatrack", "hatrack"], "image_count": 0, "id": 279, "frequency": "c", "synset": "coatrack.n.01"}, {"name": "cock", "instance_count": 0, "def": "adult male chicken", "synonyms": ["cock", "rooster"], "image_count": 0, "id": 280, "frequency": "c", "synset": "cock.n.04"}, {"name": "cockroach", "instance_count": 0, "def": "any of numerous chiefly nocturnal insects; some are domestic pests", "synonyms": ["cockroach"], "image_count": 0, "id": 281, "frequency": "r", "synset": "cockroach.n.01"}, {"name": "cocoa_(beverage)", "instance_count": 0, "def": "a beverage made from cocoa powder and milk and sugar; usually drunk hot", "synonyms": ["cocoa_(beverage)", "hot_chocolate_(beverage)", "drinking_chocolate"], "image_count": 0, "id": 282, "frequency": "r", "synset": "cocoa.n.01"}, {"name": "coconut", "instance_count": 0, "def": "large hard-shelled brown oval nut with a fibrous husk", "synonyms": ["coconut", "cocoanut"], "image_count": 0, "id": 283, "frequency": "c", "synset": "coconut.n.02"}, {"name": "coffee_maker", "instance_count": 0, "def": "a kitchen appliance for brewing coffee automatically", "synonyms": ["coffee_maker", "coffee_machine"], "image_count": 0, "id": 284, "frequency": "f", "synset": "coffee_maker.n.01"}, {"name": "coffee_table", "instance_count": 0, "def": "low table where magazines can be placed and coffee or cocktails are served", "synonyms": ["coffee_table", "cocktail_table"], "image_count": 0, "id": 285, "frequency": "f", "synset": "coffee_table.n.01"}, {"name": "coffeepot", "instance_count": 0, "def": "tall pot in which coffee is brewed", "synonyms": ["coffeepot"], "image_count": 0, "id": 286, "frequency": "c", "synset": "coffeepot.n.01"}, {"name": "coil", "instance_count": 0, "def": "tubing that is wound in a spiral", "synonyms": ["coil"], "image_count": 0, "id": 287, "frequency": "r", "synset": "coil.n.05"}, {"name": "coin", "instance_count": 0, "def": "a flat metal piece (usually a disc) used as money", "synonyms": ["coin"], "image_count": 0, "id": 288, "frequency": "c", "synset": "coin.n.01"}, {"name": "colander", "instance_count": 0, "def": "bowl-shaped strainer; used to wash or drain foods", "synonyms": ["colander", "cullender"], "image_count": 0, "id": 289, "frequency": "c", "synset": "colander.n.01"}, {"name": "coleslaw", "instance_count": 0, "def": "basically shredded cabbage", "synonyms": ["coleslaw", "slaw"], "image_count": 0, "id": 290, "frequency": "c", "synset": "coleslaw.n.01"}, {"name": "coloring_material", "instance_count": 0, "def": "any material used for its color", "synonyms": ["coloring_material", "colouring_material"], "image_count": 0, "id": 291, "frequency": "r", "synset": "coloring_material.n.01"}, {"name": "combination_lock", "instance_count": 0, "def": "lock that can be opened only by turning dials in a special sequence", "synonyms": ["combination_lock"], "image_count": 0, "id": 292, "frequency": "r", "synset": "combination_lock.n.01"}, {"name": "pacifier", "instance_count": 0, "def": "device used for an infant to suck or bite on", "synonyms": ["pacifier", "teething_ring"], "image_count": 0, "id": 293, "frequency": "c", "synset": "comforter.n.04"}, {"name": "comic_book", "instance_count": 0, "def": "a magazine devoted to comic strips", "synonyms": ["comic_book"], "image_count": 0, "id": 294, "frequency": "r", "synset": "comic_book.n.01"}, {"name": "compass", "instance_count": 0, "def": "navigational instrument for finding directions", "synonyms": ["compass"], "image_count": 0, "id": 295, "frequency": "r", "synset": "compass.n.01"}, {"name": "computer_keyboard", "instance_count": 0, "def": "a keyboard that is a data input device for computers", "synonyms": ["computer_keyboard", "keyboard_(computer)"], "image_count": 0, "id": 296, "frequency": "f", "synset": "computer_keyboard.n.01"}, {"name": "condiment", "instance_count": 0, "def": "a preparation (a sauce or relish or spice) to enhance flavor or enjoyment", "synonyms": ["condiment"], "image_count": 0, "id": 297, "frequency": "f", "synset": "condiment.n.01"}, {"name": "cone", "instance_count": 0, "def": "a cone-shaped object used to direct traffic", "synonyms": ["cone", "traffic_cone"], "image_count": 0, "id": 298, "frequency": "f", "synset": "cone.n.01"}, {"name": "control", "instance_count": 0, "def": "a mechanism that controls the operation of a machine", "synonyms": ["control", "controller"], "image_count": 0, "id": 299, "frequency": "f", "synset": "control.n.09"}, {"name": "convertible_(automobile)", "instance_count": 0, "def": "a car that has top that can be folded or removed", "synonyms": ["convertible_(automobile)"], "image_count": 0, "id": 300, "frequency": "r", "synset": "convertible.n.01"}, {"name": "sofa_bed", "instance_count": 0, "def": "a sofa that can be converted into a bed", "synonyms": ["sofa_bed"], "image_count": 0, "id": 301, "frequency": "r", "synset": "convertible.n.03"}, {"name": "cooker", "instance_count": 0, "def": "a utensil for cooking", "synonyms": ["cooker"], "image_count": 0, "id": 302, "frequency": "r", "synset": "cooker.n.01"}, {"name": "cookie", "instance_count": 0, "def": "any of various small flat sweet cakes (`biscuit' is the British term)", "synonyms": ["cookie", "cooky", "biscuit_(cookie)"], "image_count": 0, "id": 303, "frequency": "f", "synset": "cookie.n.01"}, {"name": "cooking_utensil", "instance_count": 0, "def": "a kitchen utensil made of material that does not melt easily; used for cooking", "synonyms": ["cooking_utensil"], "image_count": 0, "id": 304, "frequency": "r", "synset": "cooking_utensil.n.01"}, {"name": "cooler_(for_food)", "instance_count": 0, "def": "an insulated box for storing food often with ice", "synonyms": ["cooler_(for_food)", "ice_chest"], "image_count": 0, "id": 305, "frequency": "f", "synset": "cooler.n.01"}, {"name": "cork_(bottle_plug)", "instance_count": 0, "def": "the plug in the mouth of a bottle (especially a wine bottle)", "synonyms": ["cork_(bottle_plug)", "bottle_cork"], "image_count": 0, "id": 306, "frequency": "f", "synset": "cork.n.04"}, {"name": "corkboard", "instance_count": 0, "def": "a sheet consisting of cork granules", "synonyms": ["corkboard"], "image_count": 0, "id": 307, "frequency": "r", "synset": "corkboard.n.01"}, {"name": "corkscrew", "instance_count": 0, "def": "a bottle opener that pulls corks", "synonyms": ["corkscrew", "bottle_screw"], "image_count": 0, "id": 308, "frequency": "c", "synset": "corkscrew.n.01"}, {"name": "edible_corn", "instance_count": 0, "def": "ears or kernels of corn that can be prepared and served for human food (only mark individual ears or kernels)", "synonyms": ["edible_corn", "corn", "maize"], "image_count": 0, "id": 309, "frequency": "f", "synset": "corn.n.03"}, {"name": "cornbread", "instance_count": 0, "def": "bread made primarily of cornmeal", "synonyms": ["cornbread"], "image_count": 0, "id": 310, "frequency": "r", "synset": "cornbread.n.01"}, {"name": "cornet", "instance_count": 0, "def": "a brass musical instrument with a narrow tube and a flared bell and many valves", "synonyms": ["cornet", "horn", "trumpet"], "image_count": 0, "id": 311, "frequency": "c", "synset": "cornet.n.01"}, {"name": "cornice", "instance_count": 0, "def": "a decorative framework to conceal curtain fixtures at the top of a window casing", "synonyms": ["cornice", "valance", "valance_board", "pelmet"], "image_count": 0, "id": 312, "frequency": "c", "synset": "cornice.n.01"}, {"name": "cornmeal", "instance_count": 0, "def": "coarsely ground corn", "synonyms": ["cornmeal"], "image_count": 0, "id": 313, "frequency": "r", "synset": "cornmeal.n.01"}, {"name": "corset", "instance_count": 0, "def": "a woman's close-fitting foundation garment", "synonyms": ["corset", "girdle"], "image_count": 0, "id": 314, "frequency": "c", "synset": "corset.n.01"}, {"name": "costume", "instance_count": 0, "def": "the attire characteristic of a country or a time or a social class", "synonyms": ["costume"], "image_count": 0, "id": 315, "frequency": "c", "synset": "costume.n.04"}, {"name": "cougar", "instance_count": 0, "def": "large American feline resembling a lion", "synonyms": ["cougar", "puma", "catamount", "mountain_lion", "panther"], "image_count": 0, "id": 316, "frequency": "r", "synset": "cougar.n.01"}, {"name": "coverall", "instance_count": 0, "def": "a loose-fitting protective garment that is worn over other clothing", "synonyms": ["coverall"], "image_count": 0, "id": 317, "frequency": "r", "synset": "coverall.n.01"}, {"name": "cowbell", "instance_count": 0, "def": "a bell hung around the neck of cow so that the cow can be easily located", "synonyms": ["cowbell"], "image_count": 0, "id": 318, "frequency": "c", "synset": "cowbell.n.01"}, {"name": "cowboy_hat", "instance_count": 0, "def": "a hat with a wide brim and a soft crown; worn by American ranch hands", "synonyms": ["cowboy_hat", "ten-gallon_hat"], "image_count": 0, "id": 319, "frequency": "f", "synset": "cowboy_hat.n.01"}, {"name": "crab_(animal)", "instance_count": 0, "def": "decapod having eyes on short stalks and a broad flattened shell and pincers", "synonyms": ["crab_(animal)"], "image_count": 0, "id": 320, "frequency": "c", "synset": "crab.n.01"}, {"name": "crabmeat", "instance_count": 0, "def": "the edible flesh of any of various crabs", "synonyms": ["crabmeat"], "image_count": 0, "id": 321, "frequency": "r", "synset": "crab.n.05"}, {"name": "cracker", "instance_count": 0, "def": "a thin crisp wafer", "synonyms": ["cracker"], "image_count": 0, "id": 322, "frequency": "c", "synset": "cracker.n.01"}, {"name": "crape", "instance_count": 0, "def": "small very thin pancake", "synonyms": ["crape", "crepe", "French_pancake"], "image_count": 0, "id": 323, "frequency": "r", "synset": "crape.n.01"}, {"name": "crate", "instance_count": 0, "def": "a rugged box (usually made of wood); used for shipping", "synonyms": ["crate"], "image_count": 0, "id": 324, "frequency": "f", "synset": "crate.n.01"}, {"name": "crayon", "instance_count": 0, "def": "writing or drawing implement made of a colored stick of composition wax", "synonyms": ["crayon", "wax_crayon"], "image_count": 0, "id": 325, "frequency": "c", "synset": "crayon.n.01"}, {"name": "cream_pitcher", "instance_count": 0, "def": "a small pitcher for serving cream", "synonyms": ["cream_pitcher"], "image_count": 0, "id": 326, "frequency": "r", "synset": "cream_pitcher.n.01"}, {"name": "crescent_roll", "instance_count": 0, "def": "very rich flaky crescent-shaped roll", "synonyms": ["crescent_roll", "croissant"], "image_count": 0, "id": 327, "frequency": "c", "synset": "crescent_roll.n.01"}, {"name": "crib", "instance_count": 0, "def": "baby bed with high sides made of slats", "synonyms": ["crib", "cot"], "image_count": 0, "id": 328, "frequency": "c", "synset": "crib.n.01"}, {"name": "crock_pot", "instance_count": 0, "def": "an earthen jar (made of baked clay) or a modern electric crockpot", "synonyms": ["crock_pot", "earthenware_jar"], "image_count": 0, "id": 329, "frequency": "c", "synset": "crock.n.03"}, {"name": "crossbar", "instance_count": 0, "def": "a horizontal bar that goes across something", "synonyms": ["crossbar"], "image_count": 0, "id": 330, "frequency": "f", "synset": "crossbar.n.01"}, {"name": "crouton", "instance_count": 0, "def": "a small piece of toasted or fried bread; served in soup or salads", "synonyms": ["crouton"], "image_count": 0, "id": 331, "frequency": "r", "synset": "crouton.n.01"}, {"name": "crow", "instance_count": 0, "def": "black birds having a raucous call", "synonyms": ["crow"], "image_count": 0, "id": 332, "frequency": "c", "synset": "crow.n.01"}, {"name": "crowbar", "instance_count": 0, "def": "a heavy iron lever with one end forged into a wedge", "synonyms": ["crowbar", "wrecking_bar", "pry_bar"], "image_count": 0, "id": 333, "frequency": "r", "synset": "crowbar.n.01"}, {"name": "crown", "instance_count": 0, "def": "an ornamental jeweled headdress signifying sovereignty", "synonyms": ["crown"], "image_count": 0, "id": 334, "frequency": "c", "synset": "crown.n.04"}, {"name": "crucifix", "instance_count": 0, "def": "representation of the cross on which Jesus died", "synonyms": ["crucifix"], "image_count": 0, "id": 335, "frequency": "c", "synset": "crucifix.n.01"}, {"name": "cruise_ship", "instance_count": 0, "def": "a passenger ship used commercially for pleasure cruises", "synonyms": ["cruise_ship", "cruise_liner"], "image_count": 0, "id": 336, "frequency": "c", "synset": "cruise_ship.n.01"}, {"name": "police_cruiser", "instance_count": 0, "def": "a car in which policemen cruise the streets", "synonyms": ["police_cruiser", "patrol_car", "police_car", "squad_car"], "image_count": 0, "id": 337, "frequency": "c", "synset": "cruiser.n.01"}, {"name": "crumb", "instance_count": 0, "def": "small piece of e.g. bread or cake", "synonyms": ["crumb"], "image_count": 0, "id": 338, "frequency": "f", "synset": "crumb.n.03"}, {"name": "crutch", "instance_count": 0, "def": "a wooden or metal staff that fits under the armpit and reaches to the ground", "synonyms": ["crutch"], "image_count": 0, "id": 339, "frequency": "c", "synset": "crutch.n.01"}, {"name": "cub_(animal)", "instance_count": 0, "def": "the young of certain carnivorous mammals such as the bear or wolf or lion", "synonyms": ["cub_(animal)"], "image_count": 0, "id": 340, "frequency": "c", "synset": "cub.n.03"}, {"name": "cube", "instance_count": 0, "def": "a block in the (approximate) shape of a cube", "synonyms": ["cube", "square_block"], "image_count": 0, "id": 341, "frequency": "c", "synset": "cube.n.05"}, {"name": "cucumber", "instance_count": 0, "def": "cylindrical green fruit with thin green rind and white flesh eaten as a vegetable", "synonyms": ["cucumber", "cuke"], "image_count": 0, "id": 342, "frequency": "f", "synset": "cucumber.n.02"}, {"name": "cufflink", "instance_count": 0, "def": "jewelry consisting of linked buttons used to fasten the cuffs of a shirt", "synonyms": ["cufflink"], "image_count": 0, "id": 343, "frequency": "c", "synset": "cufflink.n.01"}, {"name": "cup", "instance_count": 0, "def": "a small open container usually used for drinking; usually has a handle", "synonyms": ["cup"], "image_count": 0, "id": 344, "frequency": "f", "synset": "cup.n.01"}, {"name": "trophy_cup", "instance_count": 0, "def": "a metal award or cup-shaped vessel with handles that is awarded as a trophy to a competition winner", "synonyms": ["trophy_cup"], "image_count": 0, "id": 345, "frequency": "c", "synset": "cup.n.08"}, {"name": "cupboard", "instance_count": 0, "def": "a small room (or recess) or cabinet used for storage space", "synonyms": ["cupboard", "closet"], "image_count": 0, "id": 346, "frequency": "f", "synset": "cupboard.n.01"}, {"name": "cupcake", "instance_count": 0, "def": "small cake baked in a muffin tin", "synonyms": ["cupcake"], "image_count": 0, "id": 347, "frequency": "f", "synset": "cupcake.n.01"}, {"name": "hair_curler", "instance_count": 0, "def": "a cylindrical tube around which the hair is wound to curl it", "synonyms": ["hair_curler", "hair_roller", "hair_crimper"], "image_count": 0, "id": 348, "frequency": "r", "synset": "curler.n.01"}, {"name": "curling_iron", "instance_count": 0, "def": "a cylindrical home appliance that heats hair that has been curled around it", "synonyms": ["curling_iron"], "image_count": 0, "id": 349, "frequency": "r", "synset": "curling_iron.n.01"}, {"name": "curtain", "instance_count": 0, "def": "hanging cloth used as a blind (especially for a window)", "synonyms": ["curtain", "drapery"], "image_count": 0, "id": 350, "frequency": "f", "synset": "curtain.n.01"}, {"name": "cushion", "instance_count": 0, "def": "a soft bag filled with air or padding such as feathers or foam rubber", "synonyms": ["cushion"], "image_count": 0, "id": 351, "frequency": "f", "synset": "cushion.n.03"}, {"name": "cylinder", "instance_count": 0, "def": "a cylindrical container", "synonyms": ["cylinder"], "image_count": 0, "id": 352, "frequency": "r", "synset": "cylinder.n.04"}, {"name": "cymbal", "instance_count": 0, "def": "a percussion instrument consisting of a concave brass disk", "synonyms": ["cymbal"], "image_count": 0, "id": 353, "frequency": "r", "synset": "cymbal.n.01"}, {"name": "dagger", "instance_count": 0, "def": "a short knife with a pointed blade used for piercing or stabbing", "synonyms": ["dagger"], "image_count": 0, "id": 354, "frequency": "r", "synset": "dagger.n.01"}, {"name": "dalmatian", "instance_count": 0, "def": "a large breed having a smooth white coat with black or brown spots", "synonyms": ["dalmatian"], "image_count": 0, "id": 355, "frequency": "r", "synset": "dalmatian.n.02"}, {"name": "dartboard", "instance_count": 0, "def": "a circular board of wood or cork used as the target in the game of darts", "synonyms": ["dartboard"], "image_count": 0, "id": 356, "frequency": "c", "synset": "dartboard.n.01"}, {"name": "date_(fruit)", "instance_count": 0, "def": "sweet edible fruit of the date palm with a single long woody seed", "synonyms": ["date_(fruit)"], "image_count": 0, "id": 357, "frequency": "r", "synset": "date.n.08"}, {"name": "deck_chair", "instance_count": 0, "def": "a folding chair for use outdoors; a wooden frame supports a length of canvas", "synonyms": ["deck_chair", "beach_chair"], "image_count": 0, "id": 358, "frequency": "f", "synset": "deck_chair.n.01"}, {"name": "deer", "instance_count": 0, "def": "distinguished from Bovidae by the male's having solid deciduous antlers", "synonyms": ["deer", "cervid"], "image_count": 0, "id": 359, "frequency": "c", "synset": "deer.n.01"}, {"name": "dental_floss", "instance_count": 0, "def": "a soft thread for cleaning the spaces between the teeth", "synonyms": ["dental_floss", "floss"], "image_count": 0, "id": 360, "frequency": "c", "synset": "dental_floss.n.01"}, {"name": "desk", "instance_count": 0, "def": "a piece of furniture with a writing surface and usually drawers or other compartments", "synonyms": ["desk"], "image_count": 0, "id": 361, "frequency": "f", "synset": "desk.n.01"}, {"name": "detergent", "instance_count": 0, "def": "a surface-active chemical widely used in industry and laundering", "synonyms": ["detergent"], "image_count": 0, "id": 362, "frequency": "r", "synset": "detergent.n.01"}, {"name": "diaper", "instance_count": 0, "def": "garment consisting of a folded cloth drawn up between the legs and fastened at the waist", "synonyms": ["diaper"], "image_count": 0, "id": 363, "frequency": "c", "synset": "diaper.n.01"}, {"name": "diary", "instance_count": 0, "def": "yearly planner book", "synonyms": ["diary", "journal"], "image_count": 0, "id": 364, "frequency": "r", "synset": "diary.n.01"}, {"name": "die", "instance_count": 0, "def": "a small cube with 1 to 6 spots on the six faces; used in gambling", "synonyms": ["die", "dice"], "image_count": 0, "id": 365, "frequency": "r", "synset": "die.n.01"}, {"name": "dinghy", "instance_count": 0, "def": "a small boat of shallow draft with seats and oars with which it is propelled", "synonyms": ["dinghy", "dory", "rowboat"], "image_count": 0, "id": 366, "frequency": "r", "synset": "dinghy.n.01"}, {"name": "dining_table", "instance_count": 0, "def": "a table at which meals are served", "synonyms": ["dining_table"], "image_count": 0, "id": 367, "frequency": "f", "synset": "dining_table.n.01"}, {"name": "tux", "instance_count": 0, "def": "semiformal evening dress for men", "synonyms": ["tux", "tuxedo"], "image_count": 0, "id": 368, "frequency": "r", "synset": "dinner_jacket.n.01"}, {"name": "dish", "instance_count": 0, "def": "a piece of dishware normally used as a container for holding or serving food", "synonyms": ["dish"], "image_count": 0, "id": 369, "frequency": "f", "synset": "dish.n.01"}, {"name": "dish_antenna", "instance_count": 0, "def": "directional antenna consisting of a parabolic reflector", "synonyms": ["dish_antenna"], "image_count": 0, "id": 370, "frequency": "c", "synset": "dish.n.05"}, {"name": "dishrag", "instance_count": 0, "def": "a cloth for washing dishes or cleaning in general", "synonyms": ["dishrag", "dishcloth"], "image_count": 0, "id": 371, "frequency": "c", "synset": "dishrag.n.01"}, {"name": "dishtowel", "instance_count": 0, "def": "a towel for drying dishes", "synonyms": ["dishtowel", "tea_towel"], "image_count": 0, "id": 372, "frequency": "f", "synset": "dishtowel.n.01"}, {"name": "dishwasher", "instance_count": 0, "def": "a machine for washing dishes", "synonyms": ["dishwasher", "dishwashing_machine"], "image_count": 0, "id": 373, "frequency": "f", "synset": "dishwasher.n.01"}, {"name": "dishwasher_detergent", "instance_count": 0, "def": "dishsoap or dish detergent designed for use in dishwashers", "synonyms": ["dishwasher_detergent", "dishwashing_detergent", "dishwashing_liquid", "dishsoap"], "image_count": 0, "id": 374, "frequency": "r", "synset": "dishwasher_detergent.n.01"}, {"name": "dispenser", "instance_count": 0, "def": "a container so designed that the contents can be used in prescribed amounts", "synonyms": ["dispenser"], "image_count": 0, "id": 375, "frequency": "f", "synset": "dispenser.n.01"}, {"name": "diving_board", "instance_count": 0, "def": "a springboard from which swimmers can dive", "synonyms": ["diving_board"], "image_count": 0, "id": 376, "frequency": "r", "synset": "diving_board.n.01"}, {"name": "Dixie_cup", "instance_count": 0, "def": "a disposable cup made of paper; for holding drinks", "synonyms": ["Dixie_cup", "paper_cup"], "image_count": 0, "id": 377, "frequency": "f", "synset": "dixie_cup.n.01"}, {"name": "dog", "instance_count": 0, "def": "a common domesticated dog", "synonyms": ["dog"], "image_count": 0, "id": 378, "frequency": "f", "synset": "dog.n.01"}, {"name": "dog_collar", "instance_count": 0, "def": "a collar for a dog", "synonyms": ["dog_collar"], "image_count": 0, "id": 379, "frequency": "f", "synset": "dog_collar.n.01"}, {"name": "doll", "instance_count": 0, "def": "a toy replica of a HUMAN (NOT AN ANIMAL)", "synonyms": ["doll"], "image_count": 0, "id": 380, "frequency": "f", "synset": "doll.n.01"}, {"name": "dollar", "instance_count": 0, "def": "a piece of paper money worth one dollar", "synonyms": ["dollar", "dollar_bill", "one_dollar_bill"], "image_count": 0, "id": 381, "frequency": "r", "synset": "dollar.n.02"}, {"name": "dollhouse", "instance_count": 0, "def": "a house so small that it is likened to a child's plaything", "synonyms": ["dollhouse", "doll's_house"], "image_count": 0, "id": 382, "frequency": "r", "synset": "dollhouse.n.01"}, {"name": "dolphin", "instance_count": 0, "def": "any of various small toothed whales with a beaklike snout; larger than porpoises", "synonyms": ["dolphin"], "image_count": 0, "id": 383, "frequency": "c", "synset": "dolphin.n.02"}, {"name": "domestic_ass", "instance_count": 0, "def": "domestic beast of burden descended from the African wild ass; patient but stubborn", "synonyms": ["domestic_ass", "donkey"], "image_count": 0, "id": 384, "frequency": "c", "synset": "domestic_ass.n.01"}, {"name": "doorknob", "instance_count": 0, "def": "a knob used to open a door (often called `doorhandle' in Great Britain)", "synonyms": ["doorknob", "doorhandle"], "image_count": 0, "id": 385, "frequency": "f", "synset": "doorknob.n.01"}, {"name": "doormat", "instance_count": 0, "def": "a mat placed outside an exterior door for wiping the shoes before entering", "synonyms": ["doormat", "welcome_mat"], "image_count": 0, "id": 386, "frequency": "c", "synset": "doormat.n.02"}, {"name": "doughnut", "instance_count": 0, "def": "a small ring-shaped friedcake", "synonyms": ["doughnut", "donut"], "image_count": 0, "id": 387, "frequency": "f", "synset": "doughnut.n.02"}, {"name": "dove", "instance_count": 0, "def": "any of numerous small pigeons", "synonyms": ["dove"], "image_count": 0, "id": 388, "frequency": "r", "synset": "dove.n.01"}, {"name": "dragonfly", "instance_count": 0, "def": "slender-bodied non-stinging insect having iridescent wings that are outspread at rest", "synonyms": ["dragonfly"], "image_count": 0, "id": 389, "frequency": "r", "synset": "dragonfly.n.01"}, {"name": "drawer", "instance_count": 0, "def": "a boxlike container in a piece of furniture; made so as to slide in and out", "synonyms": ["drawer"], "image_count": 0, "id": 390, "frequency": "f", "synset": "drawer.n.01"}, {"name": "underdrawers", "instance_count": 0, "def": "underpants worn by men", "synonyms": ["underdrawers", "boxers", "boxershorts"], "image_count": 0, "id": 391, "frequency": "c", "synset": "drawers.n.01"}, {"name": "dress", "instance_count": 0, "def": "a one-piece garment for a woman; has skirt and bodice", "synonyms": ["dress", "frock"], "image_count": 0, "id": 392, "frequency": "f", "synset": "dress.n.01"}, {"name": "dress_hat", "instance_count": 0, "def": "a man's hat with a tall crown; usually covered with silk or with beaver fur", "synonyms": ["dress_hat", "high_hat", "opera_hat", "silk_hat", "top_hat"], "image_count": 0, "id": 393, "frequency": "c", "synset": "dress_hat.n.01"}, {"name": "dress_suit", "instance_count": 0, "def": "formalwear consisting of full evening dress for men", "synonyms": ["dress_suit"], "image_count": 0, "id": 394, "frequency": "f", "synset": "dress_suit.n.01"}, {"name": "dresser", "instance_count": 0, "def": "a cabinet with shelves", "synonyms": ["dresser"], "image_count": 0, "id": 395, "frequency": "f", "synset": "dresser.n.05"}, {"name": "drill", "instance_count": 0, "def": "a tool with a sharp rotating point for making holes in hard materials", "synonyms": ["drill"], "image_count": 0, "id": 396, "frequency": "c", "synset": "drill.n.01"}, {"name": "drone", "instance_count": 0, "def": "an aircraft without a pilot that is operated by remote control", "synonyms": ["drone"], "image_count": 0, "id": 397, "frequency": "r", "synset": "drone.n.04"}, {"name": "dropper", "instance_count": 0, "def": "pipet consisting of a small tube with a vacuum bulb at one end for drawing liquid in and releasing it a drop at a time", "synonyms": ["dropper", "eye_dropper"], "image_count": 0, "id": 398, "frequency": "r", "synset": "dropper.n.01"}, {"name": "drum_(musical_instrument)", "instance_count": 0, "def": "a musical percussion instrument; usually consists of a hollow cylinder with a membrane stretched across each end", "synonyms": ["drum_(musical_instrument)"], "image_count": 0, "id": 399, "frequency": "c", "synset": "drum.n.01"}, {"name": "drumstick", "instance_count": 0, "def": "a stick used for playing a drum", "synonyms": ["drumstick"], "image_count": 0, "id": 400, "frequency": "r", "synset": "drumstick.n.02"}, {"name": "duck", "instance_count": 0, "def": "small web-footed broad-billed swimming bird", "synonyms": ["duck"], "image_count": 0, "id": 401, "frequency": "f", "synset": "duck.n.01"}, {"name": "duckling", "instance_count": 0, "def": "young duck", "synonyms": ["duckling"], "image_count": 0, "id": 402, "frequency": "c", "synset": "duckling.n.02"}, {"name": "duct_tape", "instance_count": 0, "def": "a wide silvery adhesive tape", "synonyms": ["duct_tape"], "image_count": 0, "id": 403, "frequency": "c", "synset": "duct_tape.n.01"}, {"name": "duffel_bag", "instance_count": 0, "def": "a large cylindrical bag of heavy cloth (does not include suitcases)", "synonyms": ["duffel_bag", "duffle_bag", "duffel", "duffle"], "image_count": 0, "id": 404, "frequency": "f", "synset": "duffel_bag.n.01"}, {"name": "dumbbell", "instance_count": 0, "def": "an exercising weight with two ball-like ends connected by a short handle", "synonyms": ["dumbbell"], "image_count": 0, "id": 405, "frequency": "r", "synset": "dumbbell.n.01"}, {"name": "dumpster", "instance_count": 0, "def": "a container designed to receive and transport and dump waste", "synonyms": ["dumpster"], "image_count": 0, "id": 406, "frequency": "c", "synset": "dumpster.n.01"}, {"name": "dustpan", "instance_count": 0, "def": "a short-handled receptacle into which dust can be swept", "synonyms": ["dustpan"], "image_count": 0, "id": 407, "frequency": "r", "synset": "dustpan.n.02"}, {"name": "eagle", "instance_count": 0, "def": "large birds of prey noted for their broad wings and strong soaring flight", "synonyms": ["eagle"], "image_count": 0, "id": 408, "frequency": "c", "synset": "eagle.n.01"}, {"name": "earphone", "instance_count": 0, "def": "device for listening to audio that is held over or inserted into the ear", "synonyms": ["earphone", "earpiece", "headphone"], "image_count": 0, "id": 409, "frequency": "f", "synset": "earphone.n.01"}, {"name": "earplug", "instance_count": 0, "def": "a soft plug that is inserted into the ear canal to block sound", "synonyms": ["earplug"], "image_count": 0, "id": 410, "frequency": "r", "synset": "earplug.n.01"}, {"name": "earring", "instance_count": 0, "def": "jewelry to ornament the ear", "synonyms": ["earring"], "image_count": 0, "id": 411, "frequency": "f", "synset": "earring.n.01"}, {"name": "easel", "instance_count": 0, "def": "an upright tripod for displaying something (usually an artist's canvas)", "synonyms": ["easel"], "image_count": 0, "id": 412, "frequency": "c", "synset": "easel.n.01"}, {"name": "eclair", "instance_count": 0, "def": "oblong cream puff", "synonyms": ["eclair"], "image_count": 0, "id": 413, "frequency": "r", "synset": "eclair.n.01"}, {"name": "eel", "instance_count": 0, "def": "an elongate fish with fatty flesh", "synonyms": ["eel"], "image_count": 0, "id": 414, "frequency": "r", "synset": "eel.n.01"}, {"name": "egg", "instance_count": 0, "def": "oval reproductive body of a fowl (especially a hen) used as food", "synonyms": ["egg", "eggs"], "image_count": 0, "id": 415, "frequency": "f", "synset": "egg.n.02"}, {"name": "egg_roll", "instance_count": 0, "def": "minced vegetables and meat wrapped in a pancake and fried", "synonyms": ["egg_roll", "spring_roll"], "image_count": 0, "id": 416, "frequency": "r", "synset": "egg_roll.n.01"}, {"name": "egg_yolk", "instance_count": 0, "def": "the yellow spherical part of an egg", "synonyms": ["egg_yolk", "yolk_(egg)"], "image_count": 0, "id": 417, "frequency": "c", "synset": "egg_yolk.n.01"}, {"name": "eggbeater", "instance_count": 0, "def": "a mixer for beating eggs or whipping cream", "synonyms": ["eggbeater", "eggwhisk"], "image_count": 0, "id": 418, "frequency": "c", "synset": "eggbeater.n.02"}, {"name": "eggplant", "instance_count": 0, "def": "egg-shaped vegetable having a shiny skin typically dark purple", "synonyms": ["eggplant", "aubergine"], "image_count": 0, "id": 419, "frequency": "c", "synset": "eggplant.n.01"}, {"name": "electric_chair", "instance_count": 0, "def": "a chair-shaped instrument of execution by electrocution", "synonyms": ["electric_chair"], "image_count": 0, "id": 420, "frequency": "r", "synset": "electric_chair.n.01"}, {"name": "refrigerator", "instance_count": 0, "def": "a refrigerator in which the coolant is pumped around by an electric motor", "synonyms": ["refrigerator"], "image_count": 0, "id": 421, "frequency": "f", "synset": "electric_refrigerator.n.01"}, {"name": "elephant", "instance_count": 0, "def": "a common elephant", "synonyms": ["elephant"], "image_count": 0, "id": 422, "frequency": "f", "synset": "elephant.n.01"}, {"name": "elk", "instance_count": 0, "def": "large northern deer with enormous flattened antlers in the male", "synonyms": ["elk", "moose"], "image_count": 0, "id": 423, "frequency": "c", "synset": "elk.n.01"}, {"name": "envelope", "instance_count": 0, "def": "a flat (usually rectangular) container for a letter, thin package, etc.", "synonyms": ["envelope"], "image_count": 0, "id": 424, "frequency": "c", "synset": "envelope.n.01"}, {"name": "eraser", "instance_count": 0, "def": "an implement used to erase something", "synonyms": ["eraser"], "image_count": 0, "id": 425, "frequency": "c", "synset": "eraser.n.01"}, {"name": "escargot", "instance_count": 0, "def": "edible snail usually served in the shell with a sauce of melted butter and garlic", "synonyms": ["escargot"], "image_count": 0, "id": 426, "frequency": "r", "synset": "escargot.n.01"}, {"name": "eyepatch", "instance_count": 0, "def": "a protective cloth covering for an injured eye", "synonyms": ["eyepatch"], "image_count": 0, "id": 427, "frequency": "r", "synset": "eyepatch.n.01"}, {"name": "falcon", "instance_count": 0, "def": "birds of prey having long pointed powerful wings adapted for swift flight", "synonyms": ["falcon"], "image_count": 0, "id": 428, "frequency": "r", "synset": "falcon.n.01"}, {"name": "fan", "instance_count": 0, "def": "a device for creating a current of air by movement of a surface or surfaces", "synonyms": ["fan"], "image_count": 0, "id": 429, "frequency": "f", "synset": "fan.n.01"}, {"name": "faucet", "instance_count": 0, "def": "a regulator for controlling the flow of a liquid from a reservoir", "synonyms": ["faucet", "spigot", "tap"], "image_count": 0, "id": 430, "frequency": "f", "synset": "faucet.n.01"}, {"name": "fedora", "instance_count": 0, "def": "a hat made of felt with a creased crown", "synonyms": ["fedora"], "image_count": 0, "id": 431, "frequency": "r", "synset": "fedora.n.01"}, {"name": "ferret", "instance_count": 0, "def": "domesticated albino variety of the European polecat bred for hunting rats and rabbits", "synonyms": ["ferret"], "image_count": 0, "id": 432, "frequency": "r", "synset": "ferret.n.02"}, {"name": "Ferris_wheel", "instance_count": 0, "def": "a large wheel with suspended seats that remain upright as the wheel rotates", "synonyms": ["Ferris_wheel"], "image_count": 0, "id": 433, "frequency": "c", "synset": "ferris_wheel.n.01"}, {"name": "ferry", "instance_count": 0, "def": "a boat that transports people or vehicles across a body of water and operates on a regular schedule", "synonyms": ["ferry", "ferryboat"], "image_count": 0, "id": 434, "frequency": "c", "synset": "ferry.n.01"}, {"name": "fig_(fruit)", "instance_count": 0, "def": "fleshy sweet pear-shaped yellowish or purple fruit eaten fresh or preserved or dried", "synonyms": ["fig_(fruit)"], "image_count": 0, "id": 435, "frequency": "r", "synset": "fig.n.04"}, {"name": "fighter_jet", "instance_count": 0, "def": "a high-speed military or naval airplane designed to destroy enemy targets", "synonyms": ["fighter_jet", "fighter_aircraft", "attack_aircraft"], "image_count": 0, "id": 436, "frequency": "c", "synset": "fighter.n.02"}, {"name": "figurine", "instance_count": 0, "def": "a small carved or molded figure", "synonyms": ["figurine"], "image_count": 0, "id": 437, "frequency": "f", "synset": "figurine.n.01"}, {"name": "file_cabinet", "instance_count": 0, "def": "office furniture consisting of a container for keeping papers in order", "synonyms": ["file_cabinet", "filing_cabinet"], "image_count": 0, "id": 438, "frequency": "c", "synset": "file.n.03"}, {"name": "file_(tool)", "instance_count": 0, "def": "a steel hand tool with small sharp teeth on some or all of its surfaces; used for smoothing wood or metal", "synonyms": ["file_(tool)"], "image_count": 0, "id": 439, "frequency": "r", "synset": "file.n.04"}, {"name": "fire_alarm", "instance_count": 0, "def": "an alarm that is tripped off by fire or smoke", "synonyms": ["fire_alarm", "smoke_alarm"], "image_count": 0, "id": 440, "frequency": "f", "synset": "fire_alarm.n.02"}, {"name": "fire_engine", "instance_count": 0, "def": "large trucks that carry firefighters and equipment to the site of a fire", "synonyms": ["fire_engine", "fire_truck"], "image_count": 0, "id": 441, "frequency": "f", "synset": "fire_engine.n.01"}, {"name": "fire_extinguisher", "instance_count": 0, "def": "a manually operated device for extinguishing small fires", "synonyms": ["fire_extinguisher", "extinguisher"], "image_count": 0, "id": 442, "frequency": "f", "synset": "fire_extinguisher.n.01"}, {"name": "fire_hose", "instance_count": 0, "def": "a large hose that carries water from a fire hydrant to the site of the fire", "synonyms": ["fire_hose"], "image_count": 0, "id": 443, "frequency": "c", "synset": "fire_hose.n.01"}, {"name": "fireplace", "instance_count": 0, "def": "an open recess in a wall at the base of a chimney where a fire can be built", "synonyms": ["fireplace"], "image_count": 0, "id": 444, "frequency": "f", "synset": "fireplace.n.01"}, {"name": "fireplug", "instance_count": 0, "def": "an upright hydrant for drawing water to use in fighting a fire", "synonyms": ["fireplug", "fire_hydrant", "hydrant"], "image_count": 0, "id": 445, "frequency": "f", "synset": "fireplug.n.01"}, {"name": "first-aid_kit", "instance_count": 0, "def": "kit consisting of a set of bandages and medicines for giving first aid", "synonyms": ["first-aid_kit"], "image_count": 0, "id": 446, "frequency": "r", "synset": "first-aid_kit.n.01"}, {"name": "fish", "instance_count": 0, "def": "any of various mostly cold-blooded aquatic vertebrates usually having scales and breathing through gills", "synonyms": ["fish"], "image_count": 0, "id": 447, "frequency": "f", "synset": "fish.n.01"}, {"name": "fish_(food)", "instance_count": 0, "def": "the flesh of fish used as food", "synonyms": ["fish_(food)"], "image_count": 0, "id": 448, "frequency": "c", "synset": "fish.n.02"}, {"name": "fishbowl", "instance_count": 0, "def": "a transparent bowl in which small fish are kept", "synonyms": ["fishbowl", "goldfish_bowl"], "image_count": 0, "id": 449, "frequency": "r", "synset": "fishbowl.n.02"}, {"name": "fishing_rod", "instance_count": 0, "def": "a rod that is used in fishing to extend the fishing line", "synonyms": ["fishing_rod", "fishing_pole"], "image_count": 0, "id": 450, "frequency": "c", "synset": "fishing_rod.n.01"}, {"name": "flag", "instance_count": 0, "def": "emblem usually consisting of a rectangular piece of cloth of distinctive design (do not include pole)", "synonyms": ["flag"], "image_count": 0, "id": 451, "frequency": "f", "synset": "flag.n.01"}, {"name": "flagpole", "instance_count": 0, "def": "a tall staff or pole on which a flag is raised", "synonyms": ["flagpole", "flagstaff"], "image_count": 0, "id": 452, "frequency": "f", "synset": "flagpole.n.02"}, {"name": "flamingo", "instance_count": 0, "def": "large pink web-footed bird with down-bent bill", "synonyms": ["flamingo"], "image_count": 0, "id": 453, "frequency": "c", "synset": "flamingo.n.01"}, {"name": "flannel", "instance_count": 0, "def": "a soft light woolen fabric; used for clothing", "synonyms": ["flannel"], "image_count": 0, "id": 454, "frequency": "c", "synset": "flannel.n.01"}, {"name": "flap", "instance_count": 0, "def": "any broad thin covering attached at one edge, such as a mud flap next to a wheel or a flap on an airplane wing", "synonyms": ["flap"], "image_count": 0, "id": 455, "frequency": "c", "synset": "flap.n.01"}, {"name": "flash", "instance_count": 0, "def": "a lamp for providing momentary light to take a photograph", "synonyms": ["flash", "flashbulb"], "image_count": 0, "id": 456, "frequency": "r", "synset": "flash.n.10"}, {"name": "flashlight", "instance_count": 0, "def": "a small portable battery-powered electric lamp", "synonyms": ["flashlight", "torch"], "image_count": 0, "id": 457, "frequency": "c", "synset": "flashlight.n.01"}, {"name": "fleece", "instance_count": 0, "def": "a soft bulky fabric with deep pile; used chiefly for clothing", "synonyms": ["fleece"], "image_count": 0, "id": 458, "frequency": "r", "synset": "fleece.n.03"}, {"name": "flip-flop_(sandal)", "instance_count": 0, "def": "a backless sandal held to the foot by a thong between two toes", "synonyms": ["flip-flop_(sandal)"], "image_count": 0, "id": 459, "frequency": "f", "synset": "flip-flop.n.02"}, {"name": "flipper_(footwear)", "instance_count": 0, "def": "a shoe to aid a person in swimming", "synonyms": ["flipper_(footwear)", "fin_(footwear)"], "image_count": 0, "id": 460, "frequency": "c", "synset": "flipper.n.01"}, {"name": "flower_arrangement", "instance_count": 0, "def": "a decorative arrangement of flowers", "synonyms": ["flower_arrangement", "floral_arrangement"], "image_count": 0, "id": 461, "frequency": "f", "synset": "flower_arrangement.n.01"}, {"name": "flute_glass", "instance_count": 0, "def": "a tall narrow wineglass", "synonyms": ["flute_glass", "champagne_flute"], "image_count": 0, "id": 462, "frequency": "c", "synset": "flute.n.02"}, {"name": "foal", "instance_count": 0, "def": "a young horse", "synonyms": ["foal"], "image_count": 0, "id": 463, "frequency": "c", "synset": "foal.n.01"}, {"name": "folding_chair", "instance_count": 0, "def": "a chair that can be folded flat for storage", "synonyms": ["folding_chair"], "image_count": 0, "id": 464, "frequency": "c", "synset": "folding_chair.n.01"}, {"name": "food_processor", "instance_count": 0, "def": "a kitchen appliance for shredding, blending, chopping, or slicing food", "synonyms": ["food_processor"], "image_count": 0, "id": 465, "frequency": "c", "synset": "food_processor.n.01"}, {"name": "football_(American)", "instance_count": 0, "def": "the inflated oblong ball used in playing American football", "synonyms": ["football_(American)"], "image_count": 0, "id": 466, "frequency": "c", "synset": "football.n.02"}, {"name": "football_helmet", "instance_count": 0, "def": "a padded helmet with a face mask to protect the head of football players", "synonyms": ["football_helmet"], "image_count": 0, "id": 467, "frequency": "r", "synset": "football_helmet.n.01"}, {"name": "footstool", "instance_count": 0, "def": "a low seat or a stool to rest the feet of a seated person", "synonyms": ["footstool", "footrest"], "image_count": 0, "id": 468, "frequency": "c", "synset": "footstool.n.01"}, {"name": "fork", "instance_count": 0, "def": "cutlery used for serving and eating food", "synonyms": ["fork"], "image_count": 0, "id": 469, "frequency": "f", "synset": "fork.n.01"}, {"name": "forklift", "instance_count": 0, "def": "an industrial vehicle with a power operated fork in front that can be inserted under loads to lift and move them", "synonyms": ["forklift"], "image_count": 0, "id": 470, "frequency": "c", "synset": "forklift.n.01"}, {"name": "freight_car", "instance_count": 0, "def": "a railway car that carries freight", "synonyms": ["freight_car"], "image_count": 0, "id": 471, "frequency": "c", "synset": "freight_car.n.01"}, {"name": "French_toast", "instance_count": 0, "def": "bread slice dipped in egg and milk and fried", "synonyms": ["French_toast"], "image_count": 0, "id": 472, "frequency": "c", "synset": "french_toast.n.01"}, {"name": "freshener", "instance_count": 0, "def": "anything that freshens air by removing or covering odor", "synonyms": ["freshener", "air_freshener"], "image_count": 0, "id": 473, "frequency": "c", "synset": "freshener.n.01"}, {"name": "frisbee", "instance_count": 0, "def": "a light, plastic disk propelled with a flip of the wrist for recreation or competition", "synonyms": ["frisbee"], "image_count": 0, "id": 474, "frequency": "f", "synset": "frisbee.n.01"}, {"name": "frog", "instance_count": 0, "def": "a tailless stout-bodied amphibians with long hind limbs for leaping", "synonyms": ["frog", "toad", "toad_frog"], "image_count": 0, "id": 475, "frequency": "c", "synset": "frog.n.01"}, {"name": "fruit_juice", "instance_count": 0, "def": "drink produced by squeezing or crushing fruit", "synonyms": ["fruit_juice"], "image_count": 0, "id": 476, "frequency": "c", "synset": "fruit_juice.n.01"}, {"name": "frying_pan", "instance_count": 0, "def": "a pan used for frying foods", "synonyms": ["frying_pan", "frypan", "skillet"], "image_count": 0, "id": 477, "frequency": "f", "synset": "frying_pan.n.01"}, {"name": "fudge", "instance_count": 0, "def": "soft creamy candy", "synonyms": ["fudge"], "image_count": 0, "id": 478, "frequency": "r", "synset": "fudge.n.01"}, {"name": "funnel", "instance_count": 0, "def": "a cone-shaped utensil used to channel a substance into a container with a small mouth", "synonyms": ["funnel"], "image_count": 0, "id": 479, "frequency": "r", "synset": "funnel.n.02"}, {"name": "futon", "instance_count": 0, "def": "a pad that is used for sleeping on the floor or on a raised frame", "synonyms": ["futon"], "image_count": 0, "id": 480, "frequency": "r", "synset": "futon.n.01"}, {"name": "gag", "instance_count": 0, "def": "restraint put into a person's mouth to prevent speaking or shouting", "synonyms": ["gag", "muzzle"], "image_count": 0, "id": 481, "frequency": "r", "synset": "gag.n.02"}, {"name": "garbage", "instance_count": 0, "def": "a receptacle where waste can be discarded", "synonyms": ["garbage"], "image_count": 0, "id": 482, "frequency": "r", "synset": "garbage.n.03"}, {"name": "garbage_truck", "instance_count": 0, "def": "a truck for collecting domestic refuse", "synonyms": ["garbage_truck"], "image_count": 0, "id": 483, "frequency": "c", "synset": "garbage_truck.n.01"}, {"name": "garden_hose", "instance_count": 0, "def": "a hose used for watering a lawn or garden", "synonyms": ["garden_hose"], "image_count": 0, "id": 484, "frequency": "c", "synset": "garden_hose.n.01"}, {"name": "gargle", "instance_count": 0, "def": "a medicated solution used for gargling and rinsing the mouth", "synonyms": ["gargle", "mouthwash"], "image_count": 0, "id": 485, "frequency": "c", "synset": "gargle.n.01"}, {"name": "gargoyle", "instance_count": 0, "def": "an ornament consisting of a grotesquely carved figure of a person or animal", "synonyms": ["gargoyle"], "image_count": 0, "id": 486, "frequency": "r", "synset": "gargoyle.n.02"}, {"name": "garlic", "instance_count": 0, "def": "aromatic bulb used as seasoning", "synonyms": ["garlic", "ail"], "image_count": 0, "id": 487, "frequency": "c", "synset": "garlic.n.02"}, {"name": "gasmask", "instance_count": 0, "def": "a protective face mask with a filter", "synonyms": ["gasmask", "respirator", "gas_helmet"], "image_count": 0, "id": 488, "frequency": "r", "synset": "gasmask.n.01"}, {"name": "gazelle", "instance_count": 0, "def": "small swift graceful antelope of Africa and Asia having lustrous eyes", "synonyms": ["gazelle"], "image_count": 0, "id": 489, "frequency": "c", "synset": "gazelle.n.01"}, {"name": "gelatin", "instance_count": 0, "def": "an edible jelly made with gelatin and used as a dessert or salad base or a coating for foods", "synonyms": ["gelatin", "jelly"], "image_count": 0, "id": 490, "frequency": "c", "synset": "gelatin.n.02"}, {"name": "gemstone", "instance_count": 0, "def": "a crystalline rock that can be cut and polished for jewelry", "synonyms": ["gemstone"], "image_count": 0, "id": 491, "frequency": "r", "synset": "gem.n.02"}, {"name": "generator", "instance_count": 0, "def": "engine that converts mechanical energy into electrical energy by electromagnetic induction", "synonyms": ["generator"], "image_count": 0, "id": 492, "frequency": "r", "synset": "generator.n.02"}, {"name": "giant_panda", "instance_count": 0, "def": "large black-and-white herbivorous mammal of bamboo forests of China and Tibet", "synonyms": ["giant_panda", "panda", "panda_bear"], "image_count": 0, "id": 493, "frequency": "c", "synset": "giant_panda.n.01"}, {"name": "gift_wrap", "instance_count": 0, "def": "attractive wrapping paper suitable for wrapping gifts", "synonyms": ["gift_wrap"], "image_count": 0, "id": 494, "frequency": "c", "synset": "gift_wrap.n.01"}, {"name": "ginger", "instance_count": 0, "def": "the root of the common ginger plant; used fresh as a seasoning", "synonyms": ["ginger", "gingerroot"], "image_count": 0, "id": 495, "frequency": "c", "synset": "ginger.n.03"}, {"name": "giraffe", "instance_count": 0, "def": "tall animal having a spotted coat and small horns and very long neck and legs", "synonyms": ["giraffe"], "image_count": 0, "id": 496, "frequency": "f", "synset": "giraffe.n.01"}, {"name": "cincture", "instance_count": 0, "def": "a band of material around the waist that strengthens a skirt or trousers", "synonyms": ["cincture", "sash", "waistband", "waistcloth"], "image_count": 0, "id": 497, "frequency": "c", "synset": "girdle.n.02"}, {"name": "glass_(drink_container)", "instance_count": 0, "def": "a container for holding liquids while drinking", "synonyms": ["glass_(drink_container)", "drinking_glass"], "image_count": 0, "id": 498, "frequency": "f", "synset": "glass.n.02"}, {"name": "globe", "instance_count": 0, "def": "a sphere on which a map (especially of the earth) is represented", "synonyms": ["globe"], "image_count": 0, "id": 499, "frequency": "c", "synset": "globe.n.03"}, {"name": "glove", "instance_count": 0, "def": "handwear covering the hand", "synonyms": ["glove"], "image_count": 0, "id": 500, "frequency": "f", "synset": "glove.n.02"}, {"name": "goat", "instance_count": 0, "def": "a common goat", "synonyms": ["goat"], "image_count": 0, "id": 501, "frequency": "c", "synset": "goat.n.01"}, {"name": "goggles", "instance_count": 0, "def": "tight-fitting spectacles worn to protect the eyes", "synonyms": ["goggles"], "image_count": 0, "id": 502, "frequency": "f", "synset": "goggles.n.01"}, {"name": "goldfish", "instance_count": 0, "def": "small golden or orange-red freshwater fishes used as pond or aquarium pets", "synonyms": ["goldfish"], "image_count": 0, "id": 503, "frequency": "r", "synset": "goldfish.n.01"}, {"name": "golf_club", "instance_count": 0, "def": "golf equipment used by a golfer to hit a golf ball", "synonyms": ["golf_club", "golf-club"], "image_count": 0, "id": 504, "frequency": "c", "synset": "golf_club.n.02"}, {"name": "golfcart", "instance_count": 0, "def": "a small motor vehicle in which golfers can ride between shots", "synonyms": ["golfcart"], "image_count": 0, "id": 505, "frequency": "c", "synset": "golfcart.n.01"}, {"name": "gondola_(boat)", "instance_count": 0, "def": "long narrow flat-bottomed boat propelled by sculling; traditionally used on canals of Venice", "synonyms": ["gondola_(boat)"], "image_count": 0, "id": 506, "frequency": "r", "synset": "gondola.n.02"}, {"name": "goose", "instance_count": 0, "def": "loud, web-footed long-necked aquatic birds usually larger than ducks", "synonyms": ["goose"], "image_count": 0, "id": 507, "frequency": "c", "synset": "goose.n.01"}, {"name": "gorilla", "instance_count": 0, "def": "largest ape", "synonyms": ["gorilla"], "image_count": 0, "id": 508, "frequency": "r", "synset": "gorilla.n.01"}, {"name": "gourd", "instance_count": 0, "def": "any of numerous inedible fruits with hard rinds", "synonyms": ["gourd"], "image_count": 0, "id": 509, "frequency": "r", "synset": "gourd.n.02"}, {"name": "grape", "instance_count": 0, "def": "any of various juicy fruit with green or purple skins; grow in clusters", "synonyms": ["grape"], "image_count": 0, "id": 510, "frequency": "f", "synset": "grape.n.01"}, {"name": "grater", "instance_count": 0, "def": "utensil with sharp perforations for shredding foods (as vegetables or cheese)", "synonyms": ["grater"], "image_count": 0, "id": 511, "frequency": "c", "synset": "grater.n.01"}, {"name": "gravestone", "instance_count": 0, "def": "a stone that is used to mark a grave", "synonyms": ["gravestone", "headstone", "tombstone"], "image_count": 0, "id": 512, "frequency": "c", "synset": "gravestone.n.01"}, {"name": "gravy_boat", "instance_count": 0, "def": "a dish (often boat-shaped) for serving gravy or sauce", "synonyms": ["gravy_boat", "gravy_holder"], "image_count": 0, "id": 513, "frequency": "r", "synset": "gravy_boat.n.01"}, {"name": "green_bean", "instance_count": 0, "def": "a common bean plant cultivated for its slender green edible pods", "synonyms": ["green_bean"], "image_count": 0, "id": 514, "frequency": "f", "synset": "green_bean.n.02"}, {"name": "green_onion", "instance_count": 0, "def": "a young onion before the bulb has enlarged", "synonyms": ["green_onion", "spring_onion", "scallion"], "image_count": 0, "id": 515, "frequency": "f", "synset": "green_onion.n.01"}, {"name": "griddle", "instance_count": 0, "def": "cooking utensil consisting of a flat heated surface on which food is cooked", "synonyms": ["griddle"], "image_count": 0, "id": 516, "frequency": "r", "synset": "griddle.n.01"}, {"name": "grill", "instance_count": 0, "def": "a framework of metal bars used as a partition or a grate", "synonyms": ["grill", "grille", "grillwork", "radiator_grille"], "image_count": 0, "id": 517, "frequency": "f", "synset": "grill.n.02"}, {"name": "grits", "instance_count": 0, "def": "coarsely ground corn boiled as a breakfast dish", "synonyms": ["grits", "hominy_grits"], "image_count": 0, "id": 518, "frequency": "r", "synset": "grits.n.01"}, {"name": "grizzly", "instance_count": 0, "def": "powerful brownish-yellow bear of the uplands of western North America", "synonyms": ["grizzly", "grizzly_bear"], "image_count": 0, "id": 519, "frequency": "c", "synset": "grizzly.n.01"}, {"name": "grocery_bag", "instance_count": 0, "def": "a sack for holding customer's groceries", "synonyms": ["grocery_bag"], "image_count": 0, "id": 520, "frequency": "c", "synset": "grocery_bag.n.01"}, {"name": "guitar", "instance_count": 0, "def": "a stringed instrument usually having six strings; played by strumming or plucking", "synonyms": ["guitar"], "image_count": 0, "id": 521, "frequency": "f", "synset": "guitar.n.01"}, {"name": "gull", "instance_count": 0, "def": "mostly white aquatic bird having long pointed wings and short legs", "synonyms": ["gull", "seagull"], "image_count": 0, "id": 522, "frequency": "c", "synset": "gull.n.02"}, {"name": "gun", "instance_count": 0, "def": "a weapon that discharges a bullet at high velocity from a metal tube", "synonyms": ["gun"], "image_count": 0, "id": 523, "frequency": "c", "synset": "gun.n.01"}, {"name": "hairbrush", "instance_count": 0, "def": "a brush used to groom a person's hair", "synonyms": ["hairbrush"], "image_count": 0, "id": 524, "frequency": "f", "synset": "hairbrush.n.01"}, {"name": "hairnet", "instance_count": 0, "def": "a small net that someone wears over their hair to keep it in place", "synonyms": ["hairnet"], "image_count": 0, "id": 525, "frequency": "c", "synset": "hairnet.n.01"}, {"name": "hairpin", "instance_count": 0, "def": "a double pronged pin used to hold women's hair in place", "synonyms": ["hairpin"], "image_count": 0, "id": 526, "frequency": "c", "synset": "hairpin.n.01"}, {"name": "halter_top", "instance_count": 0, "def": "a woman's top that fastens behind the back and neck leaving the back and arms uncovered", "synonyms": ["halter_top"], "image_count": 0, "id": 527, "frequency": "r", "synset": "halter.n.03"}, {"name": "ham", "instance_count": 0, "def": "meat cut from the thigh of a hog (usually smoked)", "synonyms": ["ham", "jambon", "gammon"], "image_count": 0, "id": 528, "frequency": "f", "synset": "ham.n.01"}, {"name": "hamburger", "instance_count": 0, "def": "a sandwich consisting of a patty of minced beef served on a bun", "synonyms": ["hamburger", "beefburger", "burger"], "image_count": 0, "id": 529, "frequency": "c", "synset": "hamburger.n.01"}, {"name": "hammer", "instance_count": 0, "def": "a hand tool with a heavy head and a handle; used to deliver an impulsive force by striking", "synonyms": ["hammer"], "image_count": 0, "id": 530, "frequency": "c", "synset": "hammer.n.02"}, {"name": "hammock", "instance_count": 0, "def": "a hanging bed of canvas or rope netting (usually suspended between two trees)", "synonyms": ["hammock"], "image_count": 0, "id": 531, "frequency": "c", "synset": "hammock.n.02"}, {"name": "hamper", "instance_count": 0, "def": "a basket usually with a cover", "synonyms": ["hamper"], "image_count": 0, "id": 532, "frequency": "r", "synset": "hamper.n.02"}, {"name": "hamster", "instance_count": 0, "def": "short-tailed burrowing rodent with large cheek pouches", "synonyms": ["hamster"], "image_count": 0, "id": 533, "frequency": "c", "synset": "hamster.n.01"}, {"name": "hair_dryer", "instance_count": 0, "def": "a hand-held electric blower that can blow warm air onto the hair", "synonyms": ["hair_dryer"], "image_count": 0, "id": 534, "frequency": "f", "synset": "hand_blower.n.01"}, {"name": "hand_glass", "instance_count": 0, "def": "a mirror intended to be held in the hand", "synonyms": ["hand_glass", "hand_mirror"], "image_count": 0, "id": 535, "frequency": "r", "synset": "hand_glass.n.01"}, {"name": "hand_towel", "instance_count": 0, "def": "a small towel used to dry the hands or face", "synonyms": ["hand_towel", "face_towel"], "image_count": 0, "id": 536, "frequency": "f", "synset": "hand_towel.n.01"}, {"name": "handcart", "instance_count": 0, "def": "wheeled vehicle that can be pushed by a person", "synonyms": ["handcart", "pushcart", "hand_truck"], "image_count": 0, "id": 537, "frequency": "c", "synset": "handcart.n.01"}, {"name": "handcuff", "instance_count": 0, "def": "shackle that consists of a metal loop that can be locked around the wrist", "synonyms": ["handcuff"], "image_count": 0, "id": 538, "frequency": "r", "synset": "handcuff.n.01"}, {"name": "handkerchief", "instance_count": 0, "def": "a square piece of cloth used for wiping the eyes or nose or as a costume accessory", "synonyms": ["handkerchief"], "image_count": 0, "id": 539, "frequency": "c", "synset": "handkerchief.n.01"}, {"name": "handle", "instance_count": 0, "def": "the appendage to an object that is designed to be held in order to use or move it", "synonyms": ["handle", "grip", "handgrip"], "image_count": 0, "id": 540, "frequency": "f", "synset": "handle.n.01"}, {"name": "handsaw", "instance_count": 0, "def": "a saw used with one hand for cutting wood", "synonyms": ["handsaw", "carpenter's_saw"], "image_count": 0, "id": 541, "frequency": "r", "synset": "handsaw.n.01"}, {"name": "hardback_book", "instance_count": 0, "def": "a book with cardboard or cloth or leather covers", "synonyms": ["hardback_book", "hardcover_book"], "image_count": 0, "id": 542, "frequency": "r", "synset": "hardback.n.01"}, {"name": "harmonium", "instance_count": 0, "def": "a free-reed instrument in which air is forced through the reeds by bellows", "synonyms": ["harmonium", "organ_(musical_instrument)", "reed_organ_(musical_instrument)"], "image_count": 0, "id": 543, "frequency": "r", "synset": "harmonium.n.01"}, {"name": "hat", "instance_count": 0, "def": "headwear that protects the head from bad weather, sun, or worn for fashion", "synonyms": ["hat"], "image_count": 0, "id": 544, "frequency": "f", "synset": "hat.n.01"}, {"name": "hatbox", "instance_count": 0, "def": "a round piece of luggage for carrying hats", "synonyms": ["hatbox"], "image_count": 0, "id": 545, "frequency": "r", "synset": "hatbox.n.01"}, {"name": "veil", "instance_count": 0, "def": "a garment that covers the head OR face", "synonyms": ["veil"], "image_count": 0, "id": 546, "frequency": "c", "synset": "head_covering.n.01"}, {"name": "headband", "instance_count": 0, "def": "a band worn around or over the head", "synonyms": ["headband"], "image_count": 0, "id": 547, "frequency": "f", "synset": "headband.n.01"}, {"name": "headboard", "instance_count": 0, "def": "a vertical board or panel forming the head of a bedstead", "synonyms": ["headboard"], "image_count": 0, "id": 548, "frequency": "f", "synset": "headboard.n.01"}, {"name": "headlight", "instance_count": 0, "def": "a powerful light with reflector; attached to the front of an automobile or locomotive", "synonyms": ["headlight", "headlamp"], "image_count": 0, "id": 549, "frequency": "f", "synset": "headlight.n.01"}, {"name": "headscarf", "instance_count": 0, "def": "a kerchief worn over the head and tied under the chin", "synonyms": ["headscarf"], "image_count": 0, "id": 550, "frequency": "c", "synset": "headscarf.n.01"}, {"name": "headset", "instance_count": 0, "def": "receiver consisting of a pair of headphones", "synonyms": ["headset"], "image_count": 0, "id": 551, "frequency": "r", "synset": "headset.n.01"}, {"name": "headstall_(for_horses)", "instance_count": 0, "def": "the band that is the part of a bridle that fits around a horse's head", "synonyms": ["headstall_(for_horses)", "headpiece_(for_horses)"], "image_count": 0, "id": 552, "frequency": "c", "synset": "headstall.n.01"}, {"name": "heart", "instance_count": 0, "def": "a muscular organ; its contractions move the blood through the body", "synonyms": ["heart"], "image_count": 0, "id": 553, "frequency": "c", "synset": "heart.n.02"}, {"name": "heater", "instance_count": 0, "def": "device that heats water or supplies warmth to a room", "synonyms": ["heater", "warmer"], "image_count": 0, "id": 554, "frequency": "c", "synset": "heater.n.01"}, {"name": "helicopter", "instance_count": 0, "def": "an aircraft without wings that obtains its lift from the rotation of overhead blades", "synonyms": ["helicopter"], "image_count": 0, "id": 555, "frequency": "c", "synset": "helicopter.n.01"}, {"name": "helmet", "instance_count": 0, "def": "a protective headgear made of hard material to resist blows", "synonyms": ["helmet"], "image_count": 0, "id": 556, "frequency": "f", "synset": "helmet.n.02"}, {"name": "heron", "instance_count": 0, "def": "grey or white wading bird with long neck and long legs and (usually) long bill", "synonyms": ["heron"], "image_count": 0, "id": 557, "frequency": "r", "synset": "heron.n.02"}, {"name": "highchair", "instance_count": 0, "def": "a chair for feeding a very young child", "synonyms": ["highchair", "feeding_chair"], "image_count": 0, "id": 558, "frequency": "c", "synset": "highchair.n.01"}, {"name": "hinge", "instance_count": 0, "def": "a joint that holds two parts together so that one can swing relative to the other", "synonyms": ["hinge"], "image_count": 0, "id": 559, "frequency": "f", "synset": "hinge.n.01"}, {"name": "hippopotamus", "instance_count": 0, "def": "massive thick-skinned animal living in or around rivers of tropical Africa", "synonyms": ["hippopotamus"], "image_count": 0, "id": 560, "frequency": "r", "synset": "hippopotamus.n.01"}, {"name": "hockey_stick", "instance_count": 0, "def": "sports implement consisting of a stick used by hockey players to move the puck", "synonyms": ["hockey_stick"], "image_count": 0, "id": 561, "frequency": "r", "synset": "hockey_stick.n.01"}, {"name": "hog", "instance_count": 0, "def": "domestic swine", "synonyms": ["hog", "pig"], "image_count": 0, "id": 562, "frequency": "c", "synset": "hog.n.03"}, {"name": "home_plate_(baseball)", "instance_count": 0, "def": "(baseball) a rubber slab where the batter stands; it must be touched by a base runner in order to score", "synonyms": ["home_plate_(baseball)", "home_base_(baseball)"], "image_count": 0, "id": 563, "frequency": "f", "synset": "home_plate.n.01"}, {"name": "honey", "instance_count": 0, "def": "a sweet yellow liquid produced by bees", "synonyms": ["honey"], "image_count": 0, "id": 564, "frequency": "c", "synset": "honey.n.01"}, {"name": "fume_hood", "instance_count": 0, "def": "metal covering leading to a vent that exhausts smoke or fumes", "synonyms": ["fume_hood", "exhaust_hood"], "image_count": 0, "id": 565, "frequency": "f", "synset": "hood.n.06"}, {"name": "hook", "instance_count": 0, "def": "a curved or bent implement for suspending or pulling something", "synonyms": ["hook"], "image_count": 0, "id": 566, "frequency": "f", "synset": "hook.n.05"}, {"name": "hookah", "instance_count": 0, "def": "a tobacco pipe with a long flexible tube connected to a container where the smoke is cooled by passing through water", "synonyms": ["hookah", "narghile", "nargileh", "sheesha", "shisha", "water_pipe"], "image_count": 0, "id": 567, "frequency": "r", "synset": "hookah.n.01"}, {"name": "hornet", "instance_count": 0, "def": "large stinging wasp", "synonyms": ["hornet"], "image_count": 0, "id": 568, "frequency": "r", "synset": "hornet.n.01"}, {"name": "horse", "instance_count": 0, "def": "a common horse", "synonyms": ["horse"], "image_count": 0, "id": 569, "frequency": "f", "synset": "horse.n.01"}, {"name": "hose", "instance_count": 0, "def": "a flexible pipe for conveying a liquid or gas", "synonyms": ["hose", "hosepipe"], "image_count": 0, "id": 570, "frequency": "f", "synset": "hose.n.03"}, {"name": "hot-air_balloon", "instance_count": 0, "def": "balloon for travel through the air in a basket suspended below a large bag of heated air", "synonyms": ["hot-air_balloon"], "image_count": 0, "id": 571, "frequency": "r", "synset": "hot-air_balloon.n.01"}, {"name": "hotplate", "instance_count": 0, "def": "a portable electric appliance for heating or cooking or keeping food warm", "synonyms": ["hotplate"], "image_count": 0, "id": 572, "frequency": "r", "synset": "hot_plate.n.01"}, {"name": "hot_sauce", "instance_count": 0, "def": "a pungent peppery sauce", "synonyms": ["hot_sauce"], "image_count": 0, "id": 573, "frequency": "c", "synset": "hot_sauce.n.01"}, {"name": "hourglass", "instance_count": 0, "def": "a sandglass timer that runs for sixty minutes", "synonyms": ["hourglass"], "image_count": 0, "id": 574, "frequency": "r", "synset": "hourglass.n.01"}, {"name": "houseboat", "instance_count": 0, "def": "a barge that is designed and equipped for use as a dwelling", "synonyms": ["houseboat"], "image_count": 0, "id": 575, "frequency": "r", "synset": "houseboat.n.01"}, {"name": "hummingbird", "instance_count": 0, "def": "tiny American bird having brilliant iridescent plumage and long slender bills", "synonyms": ["hummingbird"], "image_count": 0, "id": 576, "frequency": "c", "synset": "hummingbird.n.01"}, {"name": "hummus", "instance_count": 0, "def": "a thick spread made from mashed chickpeas", "synonyms": ["hummus", "humus", "hommos", "hoummos", "humous"], "image_count": 0, "id": 577, "frequency": "r", "synset": "hummus.n.01"}, {"name": "polar_bear", "instance_count": 0, "def": "white bear of Arctic regions", "synonyms": ["polar_bear"], "image_count": 0, "id": 578, "frequency": "f", "synset": "ice_bear.n.01"}, {"name": "icecream", "instance_count": 0, "def": "frozen dessert containing cream and sugar and flavoring", "synonyms": ["icecream"], "image_count": 0, "id": 579, "frequency": "c", "synset": "ice_cream.n.01"}, {"name": "popsicle", "instance_count": 0, "def": "ice cream or water ice on a small wooden stick", "synonyms": ["popsicle"], "image_count": 0, "id": 580, "frequency": "r", "synset": "ice_lolly.n.01"}, {"name": "ice_maker", "instance_count": 0, "def": "an appliance included in some electric refrigerators for making ice cubes", "synonyms": ["ice_maker"], "image_count": 0, "id": 581, "frequency": "c", "synset": "ice_maker.n.01"}, {"name": "ice_pack", "instance_count": 0, "def": "a waterproof bag filled with ice: applied to the body (especially the head) to cool or reduce swelling", "synonyms": ["ice_pack", "ice_bag"], "image_count": 0, "id": 582, "frequency": "r", "synset": "ice_pack.n.01"}, {"name": "ice_skate", "instance_count": 0, "def": "skate consisting of a boot with a steel blade fitted to the sole", "synonyms": ["ice_skate"], "image_count": 0, "id": 583, "frequency": "r", "synset": "ice_skate.n.01"}, {"name": "igniter", "instance_count": 0, "def": "a substance or device used to start a fire", "synonyms": ["igniter", "ignitor", "lighter"], "image_count": 0, "id": 584, "frequency": "c", "synset": "igniter.n.01"}, {"name": "inhaler", "instance_count": 0, "def": "a dispenser that produces a chemical vapor to be inhaled through mouth or nose", "synonyms": ["inhaler", "inhalator"], "image_count": 0, "id": 585, "frequency": "r", "synset": "inhaler.n.01"}, {"name": "iPod", "instance_count": 0, "def": "a pocket-sized device used to play music files", "synonyms": ["iPod"], "image_count": 0, "id": 586, "frequency": "f", "synset": "ipod.n.01"}, {"name": "iron_(for_clothing)", "instance_count": 0, "def": "home appliance consisting of a flat metal base that is heated and used to smooth cloth", "synonyms": ["iron_(for_clothing)", "smoothing_iron_(for_clothing)"], "image_count": 0, "id": 587, "frequency": "c", "synset": "iron.n.04"}, {"name": "ironing_board", "instance_count": 0, "def": "narrow padded board on collapsible supports; used for ironing clothes", "synonyms": ["ironing_board"], "image_count": 0, "id": 588, "frequency": "c", "synset": "ironing_board.n.01"}, {"name": "jacket", "instance_count": 0, "def": "a waist-length coat", "synonyms": ["jacket"], "image_count": 0, "id": 589, "frequency": "f", "synset": "jacket.n.01"}, {"name": "jam", "instance_count": 0, "def": "preserve of crushed fruit", "synonyms": ["jam"], "image_count": 0, "id": 590, "frequency": "c", "synset": "jam.n.01"}, {"name": "jar", "instance_count": 0, "def": "a vessel (usually cylindrical) with a wide mouth and without handles", "synonyms": ["jar"], "image_count": 0, "id": 591, "frequency": "f", "synset": "jar.n.01"}, {"name": "jean", "instance_count": 0, "def": "(usually plural) close-fitting trousers of heavy denim for manual work or casual wear", "synonyms": ["jean", "blue_jean", "denim"], "image_count": 0, "id": 592, "frequency": "f", "synset": "jean.n.01"}, {"name": "jeep", "instance_count": 0, "def": "a car suitable for traveling over rough terrain", "synonyms": ["jeep", "landrover"], "image_count": 0, "id": 593, "frequency": "c", "synset": "jeep.n.01"}, {"name": "jelly_bean", "instance_count": 0, "def": "sugar-glazed jellied candy", "synonyms": ["jelly_bean", "jelly_egg"], "image_count": 0, "id": 594, "frequency": "r", "synset": "jelly_bean.n.01"}, {"name": "jersey", "instance_count": 0, "def": "a close-fitting pullover shirt", "synonyms": ["jersey", "T-shirt", "tee_shirt"], "image_count": 0, "id": 595, "frequency": "f", "synset": "jersey.n.03"}, {"name": "jet_plane", "instance_count": 0, "def": "an airplane powered by one or more jet engines", "synonyms": ["jet_plane", "jet-propelled_plane"], "image_count": 0, "id": 596, "frequency": "c", "synset": "jet.n.01"}, {"name": "jewel", "instance_count": 0, "def": "a precious or semiprecious stone incorporated into a piece of jewelry", "synonyms": ["jewel", "gem", "precious_stone"], "image_count": 0, "id": 597, "frequency": "r", "synset": "jewel.n.01"}, {"name": "jewelry", "instance_count": 0, "def": "an adornment (as a bracelet or ring or necklace) made of precious metals and set with gems (or imitation gems)", "synonyms": ["jewelry", "jewellery"], "image_count": 0, "id": 598, "frequency": "c", "synset": "jewelry.n.01"}, {"name": "joystick", "instance_count": 0, "def": "a control device for computers consisting of a vertical handle that can move freely in two directions", "synonyms": ["joystick"], "image_count": 0, "id": 599, "frequency": "r", "synset": "joystick.n.02"}, {"name": "jumpsuit", "instance_count": 0, "def": "one-piece garment fashioned after a parachutist's uniform", "synonyms": ["jumpsuit"], "image_count": 0, "id": 600, "frequency": "c", "synset": "jump_suit.n.01"}, {"name": "kayak", "instance_count": 0, "def": "a small canoe consisting of a light frame made watertight with animal skins", "synonyms": ["kayak"], "image_count": 0, "id": 601, "frequency": "c", "synset": "kayak.n.01"}, {"name": "keg", "instance_count": 0, "def": "small cask or barrel", "synonyms": ["keg"], "image_count": 0, "id": 602, "frequency": "r", "synset": "keg.n.02"}, {"name": "kennel", "instance_count": 0, "def": "outbuilding that serves as a shelter for a dog", "synonyms": ["kennel", "doghouse"], "image_count": 0, "id": 603, "frequency": "r", "synset": "kennel.n.01"}, {"name": "kettle", "instance_count": 0, "def": "a metal pot for stewing or boiling; usually has a lid", "synonyms": ["kettle", "boiler"], "image_count": 0, "id": 604, "frequency": "c", "synset": "kettle.n.01"}, {"name": "key", "instance_count": 0, "def": "metal instrument used to unlock a lock", "synonyms": ["key"], "image_count": 0, "id": 605, "frequency": "f", "synset": "key.n.01"}, {"name": "keycard", "instance_count": 0, "def": "a plastic card used to gain access typically to a door", "synonyms": ["keycard"], "image_count": 0, "id": 606, "frequency": "r", "synset": "keycard.n.01"}, {"name": "kilt", "instance_count": 0, "def": "a knee-length pleated tartan skirt worn by men as part of the traditional dress in the Highlands of northern Scotland", "synonyms": ["kilt"], "image_count": 0, "id": 607, "frequency": "c", "synset": "kilt.n.01"}, {"name": "kimono", "instance_count": 0, "def": "a loose robe; imitated from robes originally worn by Japanese", "synonyms": ["kimono"], "image_count": 0, "id": 608, "frequency": "c", "synset": "kimono.n.01"}, {"name": "kitchen_sink", "instance_count": 0, "def": "a sink in a kitchen", "synonyms": ["kitchen_sink"], "image_count": 0, "id": 609, "frequency": "f", "synset": "kitchen_sink.n.01"}, {"name": "kitchen_table", "instance_count": 0, "def": "a table in the kitchen", "synonyms": ["kitchen_table"], "image_count": 0, "id": 610, "frequency": "r", "synset": "kitchen_table.n.01"}, {"name": "kite", "instance_count": 0, "def": "plaything consisting of a light frame covered with tissue paper; flown in wind at end of a string", "synonyms": ["kite"], "image_count": 0, "id": 611, "frequency": "f", "synset": "kite.n.03"}, {"name": "kitten", "instance_count": 0, "def": "young domestic cat", "synonyms": ["kitten", "kitty"], "image_count": 0, "id": 612, "frequency": "c", "synset": "kitten.n.01"}, {"name": "kiwi_fruit", "instance_count": 0, "def": "fuzzy brown egg-shaped fruit with slightly tart green flesh", "synonyms": ["kiwi_fruit"], "image_count": 0, "id": 613, "frequency": "c", "synset": "kiwi.n.03"}, {"name": "knee_pad", "instance_count": 0, "def": "protective garment consisting of a pad worn by football or baseball or hockey players", "synonyms": ["knee_pad"], "image_count": 0, "id": 614, "frequency": "f", "synset": "knee_pad.n.01"}, {"name": "knife", "instance_count": 0, "def": "tool with a blade and point used as a cutting instrument", "synonyms": ["knife"], "image_count": 0, "id": 615, "frequency": "f", "synset": "knife.n.01"}, {"name": "knitting_needle", "instance_count": 0, "def": "needle consisting of a slender rod with pointed ends; usually used in pairs", "synonyms": ["knitting_needle"], "image_count": 0, "id": 616, "frequency": "r", "synset": "knitting_needle.n.01"}, {"name": "knob", "instance_count": 0, "def": "a round handle often found on a door", "synonyms": ["knob"], "image_count": 0, "id": 617, "frequency": "f", "synset": "knob.n.02"}, {"name": "knocker_(on_a_door)", "instance_count": 0, "def": "a device (usually metal and ornamental) attached by a hinge to a door", "synonyms": ["knocker_(on_a_door)", "doorknocker"], "image_count": 0, "id": 618, "frequency": "r", "synset": "knocker.n.05"}, {"name": "koala", "instance_count": 0, "def": "sluggish tailless Australian marsupial with grey furry ears and coat", "synonyms": ["koala", "koala_bear"], "image_count": 0, "id": 619, "frequency": "r", "synset": "koala.n.01"}, {"name": "lab_coat", "instance_count": 0, "def": "a light coat worn to protect clothing from substances used while working in a laboratory", "synonyms": ["lab_coat", "laboratory_coat"], "image_count": 0, "id": 620, "frequency": "r", "synset": "lab_coat.n.01"}, {"name": "ladder", "instance_count": 0, "def": "steps consisting of two parallel members connected by rungs", "synonyms": ["ladder"], "image_count": 0, "id": 621, "frequency": "f", "synset": "ladder.n.01"}, {"name": "ladle", "instance_count": 0, "def": "a spoon-shaped vessel with a long handle frequently used to transfer liquids", "synonyms": ["ladle"], "image_count": 0, "id": 622, "frequency": "c", "synset": "ladle.n.01"}, {"name": "ladybug", "instance_count": 0, "def": "small round bright-colored and spotted beetle, typically red and black", "synonyms": ["ladybug", "ladybeetle", "ladybird_beetle"], "image_count": 0, "id": 623, "frequency": "c", "synset": "ladybug.n.01"}, {"name": "lamb_(animal)", "instance_count": 0, "def": "young sheep", "synonyms": ["lamb_(animal)"], "image_count": 0, "id": 624, "frequency": "f", "synset": "lamb.n.01"}, {"name": "lamb-chop", "instance_count": 0, "def": "chop cut from a lamb", "synonyms": ["lamb-chop", "lambchop"], "image_count": 0, "id": 625, "frequency": "r", "synset": "lamb_chop.n.01"}, {"name": "lamp", "instance_count": 0, "def": "a piece of furniture holding one or more electric light bulbs", "synonyms": ["lamp"], "image_count": 0, "id": 626, "frequency": "f", "synset": "lamp.n.02"}, {"name": "lamppost", "instance_count": 0, "def": "a metal post supporting an outdoor lamp (such as a streetlight)", "synonyms": ["lamppost"], "image_count": 0, "id": 627, "frequency": "f", "synset": "lamppost.n.01"}, {"name": "lampshade", "instance_count": 0, "def": "a protective ornamental shade used to screen a light bulb from direct view", "synonyms": ["lampshade"], "image_count": 0, "id": 628, "frequency": "f", "synset": "lampshade.n.01"}, {"name": "lantern", "instance_count": 0, "def": "light in a transparent protective case", "synonyms": ["lantern"], "image_count": 0, "id": 629, "frequency": "c", "synset": "lantern.n.01"}, {"name": "lanyard", "instance_count": 0, "def": "a cord worn around the neck to hold a knife or whistle, etc.", "synonyms": ["lanyard", "laniard"], "image_count": 0, "id": 630, "frequency": "f", "synset": "lanyard.n.02"}, {"name": "laptop_computer", "instance_count": 0, "def": "a portable computer small enough to use in your lap", "synonyms": ["laptop_computer", "notebook_computer"], "image_count": 0, "id": 631, "frequency": "f", "synset": "laptop.n.01"}, {"name": "lasagna", "instance_count": 0, "def": "baked dish of layers of lasagna pasta with sauce and cheese and meat or vegetables", "synonyms": ["lasagna", "lasagne"], "image_count": 0, "id": 632, "frequency": "r", "synset": "lasagna.n.01"}, {"name": "latch", "instance_count": 0, "def": "a bar that can be lowered or slid into a groove to fasten a door or gate", "synonyms": ["latch"], "image_count": 0, "id": 633, "frequency": "f", "synset": "latch.n.02"}, {"name": "lawn_mower", "instance_count": 0, "def": "garden tool for mowing grass on lawns", "synonyms": ["lawn_mower"], "image_count": 0, "id": 634, "frequency": "r", "synset": "lawn_mower.n.01"}, {"name": "leather", "instance_count": 0, "def": "an animal skin made smooth and flexible by removing the hair and then tanning", "synonyms": ["leather"], "image_count": 0, "id": 635, "frequency": "r", "synset": "leather.n.01"}, {"name": "legging_(clothing)", "instance_count": 0, "def": "a garment covering the leg (usually extending from the knee to the ankle)", "synonyms": ["legging_(clothing)", "leging_(clothing)", "leg_covering"], "image_count": 0, "id": 636, "frequency": "c", "synset": "legging.n.01"}, {"name": "Lego", "instance_count": 0, "def": "a child's plastic construction set for making models from blocks", "synonyms": ["Lego", "Lego_set"], "image_count": 0, "id": 637, "frequency": "c", "synset": "lego.n.01"}, {"name": "legume", "instance_count": 0, "def": "the fruit or seed of bean or pea plants", "synonyms": ["legume"], "image_count": 0, "id": 638, "frequency": "r", "synset": "legume.n.02"}, {"name": "lemon", "instance_count": 0, "def": "yellow oval fruit with juicy acidic flesh", "synonyms": ["lemon"], "image_count": 0, "id": 639, "frequency": "f", "synset": "lemon.n.01"}, {"name": "lemonade", "instance_count": 0, "def": "sweetened beverage of diluted lemon juice", "synonyms": ["lemonade"], "image_count": 0, "id": 640, "frequency": "r", "synset": "lemonade.n.01"}, {"name": "lettuce", "instance_count": 0, "def": "leafy plant commonly eaten in salad or on sandwiches", "synonyms": ["lettuce"], "image_count": 0, "id": 641, "frequency": "f", "synset": "lettuce.n.02"}, {"name": "license_plate", "instance_count": 0, "def": "a plate mounted on the front and back of car and bearing the car's registration number", "synonyms": ["license_plate", "numberplate"], "image_count": 0, "id": 642, "frequency": "f", "synset": "license_plate.n.01"}, {"name": "life_buoy", "instance_count": 0, "def": "a ring-shaped life preserver used to prevent drowning (NOT a life-jacket or vest)", "synonyms": ["life_buoy", "lifesaver", "life_belt", "life_ring"], "image_count": 0, "id": 643, "frequency": "f", "synset": "life_buoy.n.01"}, {"name": "life_jacket", "instance_count": 0, "def": "life preserver consisting of a sleeveless jacket of buoyant or inflatable design", "synonyms": ["life_jacket", "life_vest"], "image_count": 0, "id": 644, "frequency": "f", "synset": "life_jacket.n.01"}, {"name": "lightbulb", "instance_count": 0, "def": "lightblub/source of light", "synonyms": ["lightbulb"], "image_count": 0, "id": 645, "frequency": "f", "synset": "light_bulb.n.01"}, {"name": "lightning_rod", "instance_count": 0, "def": "a metallic conductor that is attached to a high point and leads to the ground", "synonyms": ["lightning_rod", "lightning_conductor"], "image_count": 0, "id": 646, "frequency": "r", "synset": "lightning_rod.n.02"}, {"name": "lime", "instance_count": 0, "def": "the green acidic fruit of any of various lime trees", "synonyms": ["lime"], "image_count": 0, "id": 647, "frequency": "f", "synset": "lime.n.06"}, {"name": "limousine", "instance_count": 0, "def": "long luxurious car; usually driven by a chauffeur", "synonyms": ["limousine"], "image_count": 0, "id": 648, "frequency": "r", "synset": "limousine.n.01"}, {"name": "lion", "instance_count": 0, "def": "large gregarious predatory cat of Africa and India", "synonyms": ["lion"], "image_count": 0, "id": 649, "frequency": "c", "synset": "lion.n.01"}, {"name": "lip_balm", "instance_count": 0, "def": "a balm applied to the lips", "synonyms": ["lip_balm"], "image_count": 0, "id": 650, "frequency": "c", "synset": "lip_balm.n.01"}, {"name": "liquor", "instance_count": 0, "def": "liquor or beer", "synonyms": ["liquor", "spirits", "hard_liquor", "liqueur", "cordial"], "image_count": 0, "id": 651, "frequency": "r", "synset": "liquor.n.01"}, {"name": "lizard", "instance_count": 0, "def": "a reptile with usually two pairs of legs and a tapering tail", "synonyms": ["lizard"], "image_count": 0, "id": 652, "frequency": "c", "synset": "lizard.n.01"}, {"name": "log", "instance_count": 0, "def": "a segment of the trunk of a tree when stripped of branches", "synonyms": ["log"], "image_count": 0, "id": 653, "frequency": "f", "synset": "log.n.01"}, {"name": "lollipop", "instance_count": 0, "def": "hard candy on a stick", "synonyms": ["lollipop"], "image_count": 0, "id": 654, "frequency": "c", "synset": "lollipop.n.02"}, {"name": "speaker_(stero_equipment)", "instance_count": 0, "def": "electronic device that produces sound often as part of a stereo system", "synonyms": ["speaker_(stero_equipment)"], "image_count": 0, "id": 655, "frequency": "f", "synset": "loudspeaker.n.01"}, {"name": "loveseat", "instance_count": 0, "def": "small sofa that seats two people", "synonyms": ["loveseat"], "image_count": 0, "id": 656, "frequency": "c", "synset": "love_seat.n.01"}, {"name": "machine_gun", "instance_count": 0, "def": "a rapidly firing automatic gun", "synonyms": ["machine_gun"], "image_count": 0, "id": 657, "frequency": "r", "synset": "machine_gun.n.01"}, {"name": "magazine", "instance_count": 0, "def": "a paperback periodic publication", "synonyms": ["magazine"], "image_count": 0, "id": 658, "frequency": "f", "synset": "magazine.n.02"}, {"name": "magnet", "instance_count": 0, "def": "a device that attracts iron and produces a magnetic field", "synonyms": ["magnet"], "image_count": 0, "id": 659, "frequency": "f", "synset": "magnet.n.01"}, {"name": "mail_slot", "instance_count": 0, "def": "a slot (usually in a door) through which mail can be delivered", "synonyms": ["mail_slot"], "image_count": 0, "id": 660, "frequency": "c", "synset": "mail_slot.n.01"}, {"name": "mailbox_(at_home)", "instance_count": 0, "def": "a private box for delivery of mail", "synonyms": ["mailbox_(at_home)", "letter_box_(at_home)"], "image_count": 0, "id": 661, "frequency": "f", "synset": "mailbox.n.01"}, {"name": "mallard", "instance_count": 0, "def": "wild dabbling duck from which domestic ducks are descended", "synonyms": ["mallard"], "image_count": 0, "id": 662, "frequency": "r", "synset": "mallard.n.01"}, {"name": "mallet", "instance_count": 0, "def": "a sports implement with a long handle and a hammer-like head used to hit a ball", "synonyms": ["mallet"], "image_count": 0, "id": 663, "frequency": "r", "synset": "mallet.n.01"}, {"name": "mammoth", "instance_count": 0, "def": "any of numerous extinct elephants widely distributed in the Pleistocene", "synonyms": ["mammoth"], "image_count": 0, "id": 664, "frequency": "r", "synset": "mammoth.n.01"}, {"name": "manatee", "instance_count": 0, "def": "sirenian mammal of tropical coastal waters of America", "synonyms": ["manatee"], "image_count": 0, "id": 665, "frequency": "r", "synset": "manatee.n.01"}, {"name": "mandarin_orange", "instance_count": 0, "def": "a somewhat flat reddish-orange loose skinned citrus of China", "synonyms": ["mandarin_orange"], "image_count": 0, "id": 666, "frequency": "c", "synset": "mandarin.n.05"}, {"name": "manger", "instance_count": 0, "def": "a container (usually in a barn or stable) from which cattle or horses feed", "synonyms": ["manger", "trough"], "image_count": 0, "id": 667, "frequency": "c", "synset": "manger.n.01"}, {"name": "manhole", "instance_count": 0, "def": "a hole (usually with a flush cover) through which a person can gain access to an underground structure", "synonyms": ["manhole"], "image_count": 0, "id": 668, "frequency": "f", "synset": "manhole.n.01"}, {"name": "map", "instance_count": 0, "def": "a diagrammatic representation of the earth's surface (or part of it)", "synonyms": ["map"], "image_count": 0, "id": 669, "frequency": "f", "synset": "map.n.01"}, {"name": "marker", "instance_count": 0, "def": "a writing implement for making a mark", "synonyms": ["marker"], "image_count": 0, "id": 670, "frequency": "f", "synset": "marker.n.03"}, {"name": "martini", "instance_count": 0, "def": "a cocktail made of gin (or vodka) with dry vermouth", "synonyms": ["martini"], "image_count": 0, "id": 671, "frequency": "r", "synset": "martini.n.01"}, {"name": "mascot", "instance_count": 0, "def": "a person or animal that is adopted by a team or other group as a symbolic figure", "synonyms": ["mascot"], "image_count": 0, "id": 672, "frequency": "r", "synset": "mascot.n.01"}, {"name": "mashed_potato", "instance_count": 0, "def": "potato that has been peeled and boiled and then mashed", "synonyms": ["mashed_potato"], "image_count": 0, "id": 673, "frequency": "c", "synset": "mashed_potato.n.01"}, {"name": "masher", "instance_count": 0, "def": "a kitchen utensil used for mashing (e.g. potatoes)", "synonyms": ["masher"], "image_count": 0, "id": 674, "frequency": "r", "synset": "masher.n.02"}, {"name": "mask", "instance_count": 0, "def": "a protective covering worn over the face", "synonyms": ["mask", "facemask"], "image_count": 0, "id": 675, "frequency": "f", "synset": "mask.n.04"}, {"name": "mast", "instance_count": 0, "def": "a vertical spar for supporting sails", "synonyms": ["mast"], "image_count": 0, "id": 676, "frequency": "f", "synset": "mast.n.01"}, {"name": "mat_(gym_equipment)", "instance_count": 0, "def": "sports equipment consisting of a piece of thick padding on the floor for gymnastics", "synonyms": ["mat_(gym_equipment)", "gym_mat"], "image_count": 0, "id": 677, "frequency": "c", "synset": "mat.n.03"}, {"name": "matchbox", "instance_count": 0, "def": "a box for holding matches", "synonyms": ["matchbox"], "image_count": 0, "id": 678, "frequency": "r", "synset": "matchbox.n.01"}, {"name": "mattress", "instance_count": 0, "def": "a thick pad filled with resilient material used as a bed or part of a bed", "synonyms": ["mattress"], "image_count": 0, "id": 679, "frequency": "f", "synset": "mattress.n.01"}, {"name": "measuring_cup", "instance_count": 0, "def": "graduated cup used to measure liquid or granular ingredients", "synonyms": ["measuring_cup"], "image_count": 0, "id": 680, "frequency": "c", "synset": "measuring_cup.n.01"}, {"name": "measuring_stick", "instance_count": 0, "def": "measuring instrument having a sequence of marks at regular intervals", "synonyms": ["measuring_stick", "ruler_(measuring_stick)", "measuring_rod"], "image_count": 0, "id": 681, "frequency": "c", "synset": "measuring_stick.n.01"}, {"name": "meatball", "instance_count": 0, "def": "ground meat formed into a ball and fried or simmered in broth", "synonyms": ["meatball"], "image_count": 0, "id": 682, "frequency": "c", "synset": "meatball.n.01"}, {"name": "medicine", "instance_count": 0, "def": "something that treats or prevents or alleviates the symptoms of disease", "synonyms": ["medicine"], "image_count": 0, "id": 683, "frequency": "c", "synset": "medicine.n.02"}, {"name": "melon", "instance_count": 0, "def": "fruit of the gourd family having a hard rind and sweet juicy flesh", "synonyms": ["melon"], "image_count": 0, "id": 684, "frequency": "c", "synset": "melon.n.01"}, {"name": "microphone", "instance_count": 0, "def": "device for converting sound waves into electrical energy", "synonyms": ["microphone"], "image_count": 0, "id": 685, "frequency": "f", "synset": "microphone.n.01"}, {"name": "microscope", "instance_count": 0, "def": "magnifier of the image of small objects", "synonyms": ["microscope"], "image_count": 0, "id": 686, "frequency": "r", "synset": "microscope.n.01"}, {"name": "microwave_oven", "instance_count": 0, "def": "kitchen appliance that cooks food by passing an electromagnetic wave through it", "synonyms": ["microwave_oven"], "image_count": 0, "id": 687, "frequency": "f", "synset": "microwave.n.02"}, {"name": "milestone", "instance_count": 0, "def": "stone post at side of a road to show distances", "synonyms": ["milestone", "milepost"], "image_count": 0, "id": 688, "frequency": "r", "synset": "milestone.n.01"}, {"name": "milk", "instance_count": 0, "def": "a white nutritious liquid secreted by mammals and used as food by human beings", "synonyms": ["milk"], "image_count": 0, "id": 689, "frequency": "f", "synset": "milk.n.01"}, {"name": "milk_can", "instance_count": 0, "def": "can for transporting milk", "synonyms": ["milk_can"], "image_count": 0, "id": 690, "frequency": "r", "synset": "milk_can.n.01"}, {"name": "milkshake", "instance_count": 0, "def": "frothy drink of milk and flavoring and sometimes fruit or ice cream", "synonyms": ["milkshake"], "image_count": 0, "id": 691, "frequency": "r", "synset": "milkshake.n.01"}, {"name": "minivan", "instance_count": 0, "def": "a small box-shaped passenger van", "synonyms": ["minivan"], "image_count": 0, "id": 692, "frequency": "f", "synset": "minivan.n.01"}, {"name": "mint_candy", "instance_count": 0, "def": "a candy that is flavored with a mint oil", "synonyms": ["mint_candy"], "image_count": 0, "id": 693, "frequency": "r", "synset": "mint.n.05"}, {"name": "mirror", "instance_count": 0, "def": "polished surface that forms images by reflecting light", "synonyms": ["mirror"], "image_count": 0, "id": 694, "frequency": "f", "synset": "mirror.n.01"}, {"name": "mitten", "instance_count": 0, "def": "glove that encases the thumb separately and the other four fingers together", "synonyms": ["mitten"], "image_count": 0, "id": 695, "frequency": "c", "synset": "mitten.n.01"}, {"name": "mixer_(kitchen_tool)", "instance_count": 0, "def": "a kitchen utensil that is used for mixing foods", "synonyms": ["mixer_(kitchen_tool)", "stand_mixer"], "image_count": 0, "id": 696, "frequency": "c", "synset": "mixer.n.04"}, {"name": "money", "instance_count": 0, "def": "the official currency issued by a government or national bank", "synonyms": ["money"], "image_count": 0, "id": 697, "frequency": "c", "synset": "money.n.03"}, {"name": "monitor_(computer_equipment) computer_monitor", "instance_count": 0, "def": "a computer monitor", "synonyms": ["monitor_(computer_equipment) computer_monitor"], "image_count": 0, "id": 698, "frequency": "f", "synset": "monitor.n.04"}, {"name": "monkey", "instance_count": 0, "def": "any of various long-tailed primates", "synonyms": ["monkey"], "image_count": 0, "id": 699, "frequency": "c", "synset": "monkey.n.01"}, {"name": "motor", "instance_count": 0, "def": "machine that converts other forms of energy into mechanical energy and so imparts motion", "synonyms": ["motor"], "image_count": 0, "id": 700, "frequency": "f", "synset": "motor.n.01"}, {"name": "motor_scooter", "instance_count": 0, "def": "a wheeled vehicle with small wheels and a low-powered engine", "synonyms": ["motor_scooter", "scooter"], "image_count": 0, "id": 701, "frequency": "f", "synset": "motor_scooter.n.01"}, {"name": "motor_vehicle", "instance_count": 0, "def": "a self-propelled wheeled vehicle that does not run on rails", "synonyms": ["motor_vehicle", "automotive_vehicle"], "image_count": 0, "id": 702, "frequency": "r", "synset": "motor_vehicle.n.01"}, {"name": "motorcycle", "instance_count": 0, "def": "a motor vehicle with two wheels and a strong frame", "synonyms": ["motorcycle"], "image_count": 0, "id": 703, "frequency": "f", "synset": "motorcycle.n.01"}, {"name": "mound_(baseball)", "instance_count": 0, "def": "(baseball) the slight elevation on which the pitcher stands", "synonyms": ["mound_(baseball)", "pitcher's_mound"], "image_count": 0, "id": 704, "frequency": "f", "synset": "mound.n.01"}, {"name": "mouse_(computer_equipment)", "instance_count": 0, "def": "a computer input device that controls an on-screen pointer (does not include trackpads / touchpads)", "synonyms": ["mouse_(computer_equipment)", "computer_mouse"], "image_count": 0, "id": 705, "frequency": "f", "synset": "mouse.n.04"}, {"name": "mousepad", "instance_count": 0, "def": "a small portable pad that provides an operating surface for a computer mouse", "synonyms": ["mousepad"], "image_count": 0, "id": 706, "frequency": "f", "synset": "mousepad.n.01"}, {"name": "muffin", "instance_count": 0, "def": "a sweet quick bread baked in a cup-shaped pan", "synonyms": ["muffin"], "image_count": 0, "id": 707, "frequency": "c", "synset": "muffin.n.01"}, {"name": "mug", "instance_count": 0, "def": "with handle and usually cylindrical", "synonyms": ["mug"], "image_count": 0, "id": 708, "frequency": "f", "synset": "mug.n.04"}, {"name": "mushroom", "instance_count": 0, "def": "a common mushroom", "synonyms": ["mushroom"], "image_count": 0, "id": 709, "frequency": "f", "synset": "mushroom.n.02"}, {"name": "music_stool", "instance_count": 0, "def": "a stool for piano players; usually adjustable in height", "synonyms": ["music_stool", "piano_stool"], "image_count": 0, "id": 710, "frequency": "r", "synset": "music_stool.n.01"}, {"name": "musical_instrument", "instance_count": 0, "def": "any of various devices or contrivances that can be used to produce musical tones or sounds", "synonyms": ["musical_instrument", "instrument_(musical)"], "image_count": 0, "id": 711, "frequency": "c", "synset": "musical_instrument.n.01"}, {"name": "nailfile", "instance_count": 0, "def": "a small flat file for shaping the nails", "synonyms": ["nailfile"], "image_count": 0, "id": 712, "frequency": "r", "synset": "nailfile.n.01"}, {"name": "napkin", "instance_count": 0, "def": "a small piece of table linen or paper that is used to wipe the mouth and to cover the lap in order to protect clothing", "synonyms": ["napkin", "table_napkin", "serviette"], "image_count": 0, "id": 713, "frequency": "f", "synset": "napkin.n.01"}, {"name": "neckerchief", "instance_count": 0, "def": "a kerchief worn around the neck", "synonyms": ["neckerchief"], "image_count": 0, "id": 714, "frequency": "r", "synset": "neckerchief.n.01"}, {"name": "necklace", "instance_count": 0, "def": "jewelry consisting of a cord or chain (often bearing gems) worn about the neck as an ornament", "synonyms": ["necklace"], "image_count": 0, "id": 715, "frequency": "f", "synset": "necklace.n.01"}, {"name": "necktie", "instance_count": 0, "def": "neckwear consisting of a long narrow piece of material worn under a collar and tied in knot at the front", "synonyms": ["necktie", "tie_(necktie)"], "image_count": 0, "id": 716, "frequency": "f", "synset": "necktie.n.01"}, {"name": "needle", "instance_count": 0, "def": "a sharp pointed implement (usually metal)", "synonyms": ["needle"], "image_count": 0, "id": 717, "frequency": "c", "synset": "needle.n.03"}, {"name": "nest", "instance_count": 0, "def": "a structure in which animals lay eggs or give birth to their young", "synonyms": ["nest"], "image_count": 0, "id": 718, "frequency": "c", "synset": "nest.n.01"}, {"name": "newspaper", "instance_count": 0, "def": "a daily or weekly publication on folded sheets containing news, articles, and advertisements", "synonyms": ["newspaper", "paper_(newspaper)"], "image_count": 0, "id": 719, "frequency": "f", "synset": "newspaper.n.01"}, {"name": "newsstand", "instance_count": 0, "def": "a stall where newspapers and other periodicals are sold", "synonyms": ["newsstand"], "image_count": 0, "id": 720, "frequency": "c", "synset": "newsstand.n.01"}, {"name": "nightshirt", "instance_count": 0, "def": "garments designed to be worn in bed", "synonyms": ["nightshirt", "nightwear", "sleepwear", "nightclothes"], "image_count": 0, "id": 721, "frequency": "c", "synset": "nightwear.n.01"}, {"name": "nosebag_(for_animals)", "instance_count": 0, "def": "a canvas bag that is used to feed an animal (such as a horse); covers the muzzle and fastens at the top of the head", "synonyms": ["nosebag_(for_animals)", "feedbag"], "image_count": 0, "id": 722, "frequency": "r", "synset": "nosebag.n.01"}, {"name": "noseband_(for_animals)", "instance_count": 0, "def": "a strap that is the part of a bridle that goes over the animal's nose", "synonyms": ["noseband_(for_animals)", "nosepiece_(for_animals)"], "image_count": 0, "id": 723, "frequency": "c", "synset": "noseband.n.01"}, {"name": "notebook", "instance_count": 0, "def": "a book with blank pages for recording notes or memoranda", "synonyms": ["notebook"], "image_count": 0, "id": 724, "frequency": "f", "synset": "notebook.n.01"}, {"name": "notepad", "instance_count": 0, "def": "a pad of paper for keeping notes", "synonyms": ["notepad"], "image_count": 0, "id": 725, "frequency": "c", "synset": "notepad.n.01"}, {"name": "nut", "instance_count": 0, "def": "a small metal block (usually square or hexagonal) with internal screw thread to be fitted onto a bolt", "synonyms": ["nut"], "image_count": 0, "id": 726, "frequency": "f", "synset": "nut.n.03"}, {"name": "nutcracker", "instance_count": 0, "def": "a hand tool used to crack nuts open", "synonyms": ["nutcracker"], "image_count": 0, "id": 727, "frequency": "r", "synset": "nutcracker.n.01"}, {"name": "oar", "instance_count": 0, "def": "an implement used to propel or steer a boat", "synonyms": ["oar"], "image_count": 0, "id": 728, "frequency": "f", "synset": "oar.n.01"}, {"name": "octopus_(food)", "instance_count": 0, "def": "tentacles of octopus prepared as food", "synonyms": ["octopus_(food)"], "image_count": 0, "id": 729, "frequency": "r", "synset": "octopus.n.01"}, {"name": "octopus_(animal)", "instance_count": 0, "def": "bottom-living cephalopod having a soft oval body with eight long tentacles", "synonyms": ["octopus_(animal)"], "image_count": 0, "id": 730, "frequency": "r", "synset": "octopus.n.02"}, {"name": "oil_lamp", "instance_count": 0, "def": "a lamp that burns oil (as kerosine) for light", "synonyms": ["oil_lamp", "kerosene_lamp", "kerosine_lamp"], "image_count": 0, "id": 731, "frequency": "c", "synset": "oil_lamp.n.01"}, {"name": "olive_oil", "instance_count": 0, "def": "oil from olives", "synonyms": ["olive_oil"], "image_count": 0, "id": 732, "frequency": "c", "synset": "olive_oil.n.01"}, {"name": "omelet", "instance_count": 0, "def": "beaten eggs cooked until just set; may be folded around e.g. ham or cheese or jelly", "synonyms": ["omelet", "omelette"], "image_count": 0, "id": 733, "frequency": "r", "synset": "omelet.n.01"}, {"name": "onion", "instance_count": 0, "def": "the bulb of an onion plant", "synonyms": ["onion"], "image_count": 0, "id": 734, "frequency": "f", "synset": "onion.n.01"}, {"name": "orange_(fruit)", "instance_count": 0, "def": "orange (FRUIT of an orange tree)", "synonyms": ["orange_(fruit)"], "image_count": 0, "id": 735, "frequency": "f", "synset": "orange.n.01"}, {"name": "orange_juice", "instance_count": 0, "def": "bottled or freshly squeezed juice of oranges", "synonyms": ["orange_juice"], "image_count": 0, "id": 736, "frequency": "c", "synset": "orange_juice.n.01"}, {"name": "ostrich", "instance_count": 0, "def": "fast-running African flightless bird with two-toed feet; largest living bird", "synonyms": ["ostrich"], "image_count": 0, "id": 737, "frequency": "c", "synset": "ostrich.n.02"}, {"name": "ottoman", "instance_count": 0, "def": "a thick standalone cushion used as a seat or footrest, often next to a chair", "synonyms": ["ottoman", "pouf", "pouffe", "hassock"], "image_count": 0, "id": 738, "frequency": "f", "synset": "ottoman.n.03"}, {"name": "oven", "instance_count": 0, "def": "kitchen appliance used for baking or roasting", "synonyms": ["oven"], "image_count": 0, "id": 739, "frequency": "f", "synset": "oven.n.01"}, {"name": "overalls_(clothing)", "instance_count": 0, "def": "work clothing consisting of denim trousers usually with a bib and shoulder straps", "synonyms": ["overalls_(clothing)"], "image_count": 0, "id": 740, "frequency": "c", "synset": "overall.n.01"}, {"name": "owl", "instance_count": 0, "def": "nocturnal bird of prey with hawk-like beak and claws and large head with front-facing eyes", "synonyms": ["owl"], "image_count": 0, "id": 741, "frequency": "c", "synset": "owl.n.01"}, {"name": "packet", "instance_count": 0, "def": "a small package or bundle", "synonyms": ["packet"], "image_count": 0, "id": 742, "frequency": "c", "synset": "packet.n.03"}, {"name": "inkpad", "instance_count": 0, "def": "absorbent material saturated with ink used to transfer ink evenly to a rubber stamp", "synonyms": ["inkpad", "inking_pad", "stamp_pad"], "image_count": 0, "id": 743, "frequency": "r", "synset": "pad.n.03"}, {"name": "pad", "instance_count": 0, "def": "mostly arm/knee pads labeled", "synonyms": ["pad"], "image_count": 0, "id": 744, "frequency": "c", "synset": "pad.n.04"}, {"name": "paddle", "instance_count": 0, "def": "a short light oar used without an oarlock to propel a canoe or small boat", "synonyms": ["paddle", "boat_paddle"], "image_count": 0, "id": 745, "frequency": "f", "synset": "paddle.n.04"}, {"name": "padlock", "instance_count": 0, "def": "a detachable, portable lock", "synonyms": ["padlock"], "image_count": 0, "id": 746, "frequency": "c", "synset": "padlock.n.01"}, {"name": "paintbrush", "instance_count": 0, "def": "a brush used as an applicator to apply paint", "synonyms": ["paintbrush"], "image_count": 0, "id": 747, "frequency": "c", "synset": "paintbrush.n.01"}, {"name": "painting", "instance_count": 0, "def": "graphic art consisting of an artistic composition made by applying paints to a surface", "synonyms": ["painting"], "image_count": 0, "id": 748, "frequency": "f", "synset": "painting.n.01"}, {"name": "pajamas", "instance_count": 0, "def": "loose-fitting nightclothes worn for sleeping or lounging", "synonyms": ["pajamas", "pyjamas"], "image_count": 0, "id": 749, "frequency": "f", "synset": "pajama.n.02"}, {"name": "palette", "instance_count": 0, "def": "board that provides a flat surface on which artists mix paints and the range of colors used", "synonyms": ["palette", "pallet"], "image_count": 0, "id": 750, "frequency": "c", "synset": "palette.n.02"}, {"name": "pan_(for_cooking)", "instance_count": 0, "def": "cooking utensil consisting of a wide metal vessel", "synonyms": ["pan_(for_cooking)", "cooking_pan"], "image_count": 0, "id": 751, "frequency": "f", "synset": "pan.n.01"}, {"name": "pan_(metal_container)", "instance_count": 0, "def": "shallow container made of metal", "synonyms": ["pan_(metal_container)"], "image_count": 0, "id": 752, "frequency": "r", "synset": "pan.n.03"}, {"name": "pancake", "instance_count": 0, "def": "a flat cake of thin batter fried on both sides on a griddle", "synonyms": ["pancake"], "image_count": 0, "id": 753, "frequency": "c", "synset": "pancake.n.01"}, {"name": "pantyhose", "instance_count": 0, "def": "a woman's tights consisting of underpants and stockings", "synonyms": ["pantyhose"], "image_count": 0, "id": 754, "frequency": "r", "synset": "pantyhose.n.01"}, {"name": "papaya", "instance_count": 0, "def": "large oval melon-like tropical fruit with yellowish flesh", "synonyms": ["papaya"], "image_count": 0, "id": 755, "frequency": "r", "synset": "papaya.n.02"}, {"name": "paper_plate", "instance_count": 0, "def": "a disposable plate made of cardboard", "synonyms": ["paper_plate"], "image_count": 0, "id": 756, "frequency": "f", "synset": "paper_plate.n.01"}, {"name": "paper_towel", "instance_count": 0, "def": "a disposable towel made of absorbent paper", "synonyms": ["paper_towel"], "image_count": 0, "id": 757, "frequency": "f", "synset": "paper_towel.n.01"}, {"name": "paperback_book", "instance_count": 0, "def": "a book with paper covers", "synonyms": ["paperback_book", "paper-back_book", "softback_book", "soft-cover_book"], "image_count": 0, "id": 758, "frequency": "r", "synset": "paperback_book.n.01"}, {"name": "paperweight", "instance_count": 0, "def": "a weight used to hold down a stack of papers", "synonyms": ["paperweight"], "image_count": 0, "id": 759, "frequency": "r", "synset": "paperweight.n.01"}, {"name": "parachute", "instance_count": 0, "def": "rescue equipment consisting of a device that fills with air and retards your fall", "synonyms": ["parachute"], "image_count": 0, "id": 760, "frequency": "c", "synset": "parachute.n.01"}, {"name": "parakeet", "instance_count": 0, "def": "any of numerous small slender long-tailed parrots", "synonyms": ["parakeet", "parrakeet", "parroket", "paraquet", "paroquet", "parroquet"], "image_count": 0, "id": 761, "frequency": "c", "synset": "parakeet.n.01"}, {"name": "parasail_(sports)", "instance_count": 0, "def": "parachute that will lift a person up into the air when it is towed by a motorboat or a car", "synonyms": ["parasail_(sports)"], "image_count": 0, "id": 762, "frequency": "c", "synset": "parasail.n.01"}, {"name": "parasol", "instance_count": 0, "def": "a handheld collapsible source of shade", "synonyms": ["parasol", "sunshade"], "image_count": 0, "id": 763, "frequency": "c", "synset": "parasol.n.01"}, {"name": "parchment", "instance_count": 0, "def": "a superior paper resembling sheepskin", "synonyms": ["parchment"], "image_count": 0, "id": 764, "frequency": "r", "synset": "parchment.n.01"}, {"name": "parka", "instance_count": 0, "def": "a kind of heavy jacket (`windcheater' is a British term)", "synonyms": ["parka", "anorak"], "image_count": 0, "id": 765, "frequency": "c", "synset": "parka.n.01"}, {"name": "parking_meter", "instance_count": 0, "def": "a coin-operated timer located next to a parking space", "synonyms": ["parking_meter"], "image_count": 0, "id": 766, "frequency": "f", "synset": "parking_meter.n.01"}, {"name": "parrot", "instance_count": 0, "def": "usually brightly colored tropical birds with short hooked beaks and the ability to mimic sounds", "synonyms": ["parrot"], "image_count": 0, "id": 767, "frequency": "c", "synset": "parrot.n.01"}, {"name": "passenger_car_(part_of_a_train)", "instance_count": 0, "def": "a railcar where passengers ride", "synonyms": ["passenger_car_(part_of_a_train)", "coach_(part_of_a_train)"], "image_count": 0, "id": 768, "frequency": "c", "synset": "passenger_car.n.01"}, {"name": "passenger_ship", "instance_count": 0, "def": "a ship built to carry passengers", "synonyms": ["passenger_ship"], "image_count": 0, "id": 769, "frequency": "r", "synset": "passenger_ship.n.01"}, {"name": "passport", "instance_count": 0, "def": "a document issued by a country to a citizen allowing that person to travel abroad and re-enter the home country", "synonyms": ["passport"], "image_count": 0, "id": 770, "frequency": "c", "synset": "passport.n.02"}, {"name": "pastry", "instance_count": 0, "def": "any of various baked foods made of dough or batter", "synonyms": ["pastry"], "image_count": 0, "id": 771, "frequency": "f", "synset": "pastry.n.02"}, {"name": "patty_(food)", "instance_count": 0, "def": "small flat mass of chopped food", "synonyms": ["patty_(food)"], "image_count": 0, "id": 772, "frequency": "r", "synset": "patty.n.01"}, {"name": "pea_(food)", "instance_count": 0, "def": "seed of a pea plant used for food", "synonyms": ["pea_(food)"], "image_count": 0, "id": 773, "frequency": "c", "synset": "pea.n.01"}, {"name": "peach", "instance_count": 0, "def": "downy juicy fruit with sweet yellowish or whitish flesh", "synonyms": ["peach"], "image_count": 0, "id": 774, "frequency": "c", "synset": "peach.n.03"}, {"name": "peanut_butter", "instance_count": 0, "def": "a spread made from ground peanuts", "synonyms": ["peanut_butter"], "image_count": 0, "id": 775, "frequency": "c", "synset": "peanut_butter.n.01"}, {"name": "pear", "instance_count": 0, "def": "sweet juicy gritty-textured fruit available in many varieties", "synonyms": ["pear"], "image_count": 0, "id": 776, "frequency": "f", "synset": "pear.n.01"}, {"name": "peeler_(tool_for_fruit_and_vegetables)", "instance_count": 0, "def": "a device for peeling vegetables or fruits", "synonyms": ["peeler_(tool_for_fruit_and_vegetables)"], "image_count": 0, "id": 777, "frequency": "c", "synset": "peeler.n.03"}, {"name": "wooden_leg", "instance_count": 0, "def": "a prosthesis that replaces a missing leg", "synonyms": ["wooden_leg", "pegleg"], "image_count": 0, "id": 778, "frequency": "r", "synset": "peg.n.04"}, {"name": "pegboard", "instance_count": 0, "def": "a board perforated with regularly spaced holes into which pegs can be fitted", "synonyms": ["pegboard"], "image_count": 0, "id": 779, "frequency": "r", "synset": "pegboard.n.01"}, {"name": "pelican", "instance_count": 0, "def": "large long-winged warm-water seabird having a large bill with a distensible pouch for fish", "synonyms": ["pelican"], "image_count": 0, "id": 780, "frequency": "c", "synset": "pelican.n.01"}, {"name": "pen", "instance_count": 0, "def": "a writing implement with a point from which ink flows", "synonyms": ["pen"], "image_count": 0, "id": 781, "frequency": "f", "synset": "pen.n.01"}, {"name": "pencil", "instance_count": 0, "def": "a thin cylindrical pointed writing implement made of wood and graphite", "synonyms": ["pencil"], "image_count": 0, "id": 782, "frequency": "f", "synset": "pencil.n.01"}, {"name": "pencil_box", "instance_count": 0, "def": "a box for holding pencils", "synonyms": ["pencil_box", "pencil_case"], "image_count": 0, "id": 783, "frequency": "r", "synset": "pencil_box.n.01"}, {"name": "pencil_sharpener", "instance_count": 0, "def": "a rotary implement for sharpening the point on pencils", "synonyms": ["pencil_sharpener"], "image_count": 0, "id": 784, "frequency": "r", "synset": "pencil_sharpener.n.01"}, {"name": "pendulum", "instance_count": 0, "def": "an apparatus consisting of an object mounted so that it swings freely under the influence of gravity", "synonyms": ["pendulum"], "image_count": 0, "id": 785, "frequency": "r", "synset": "pendulum.n.01"}, {"name": "penguin", "instance_count": 0, "def": "short-legged flightless birds of cold southern regions having webbed feet and wings modified as flippers", "synonyms": ["penguin"], "image_count": 0, "id": 786, "frequency": "c", "synset": "penguin.n.01"}, {"name": "pennant", "instance_count": 0, "def": "a flag longer than it is wide (and often tapering)", "synonyms": ["pennant"], "image_count": 0, "id": 787, "frequency": "r", "synset": "pennant.n.02"}, {"name": "penny_(coin)", "instance_count": 0, "def": "a coin worth one-hundredth of the value of the basic unit", "synonyms": ["penny_(coin)"], "image_count": 0, "id": 788, "frequency": "r", "synset": "penny.n.02"}, {"name": "pepper", "instance_count": 0, "def": "pungent seasoning from the berry of the common pepper plant; whole or ground", "synonyms": ["pepper", "peppercorn"], "image_count": 0, "id": 789, "frequency": "f", "synset": "pepper.n.03"}, {"name": "pepper_mill", "instance_count": 0, "def": "a mill for grinding pepper", "synonyms": ["pepper_mill", "pepper_grinder"], "image_count": 0, "id": 790, "frequency": "c", "synset": "pepper_mill.n.01"}, {"name": "perfume", "instance_count": 0, "def": "a toiletry that emits and diffuses a fragrant odor", "synonyms": ["perfume"], "image_count": 0, "id": 791, "frequency": "c", "synset": "perfume.n.02"}, {"name": "persimmon", "instance_count": 0, "def": "orange fruit resembling a plum; edible when fully ripe", "synonyms": ["persimmon"], "image_count": 0, "id": 792, "frequency": "r", "synset": "persimmon.n.02"}, {"name": "person", "instance_count": 0, "def": "a human being", "synonyms": ["person", "baby", "child", "boy", "girl", "man", "woman", "human"], "image_count": 0, "id": 793, "frequency": "f", "synset": "person.n.01"}, {"name": "pet", "instance_count": 0, "def": "a domesticated animal kept for companionship or amusement", "synonyms": ["pet"], "image_count": 0, "id": 794, "frequency": "c", "synset": "pet.n.01"}, {"name": "pew_(church_bench)", "instance_count": 0, "def": "long bench with backs; used in church by the congregation", "synonyms": ["pew_(church_bench)", "church_bench"], "image_count": 0, "id": 795, "frequency": "c", "synset": "pew.n.01"}, {"name": "phonebook", "instance_count": 0, "def": "a directory containing an alphabetical list of telephone subscribers and their telephone numbers", "synonyms": ["phonebook", "telephone_book", "telephone_directory"], "image_count": 0, "id": 796, "frequency": "r", "synset": "phonebook.n.01"}, {"name": "phonograph_record", "instance_count": 0, "def": "sound recording consisting of a typically black disk with a continuous groove", "synonyms": ["phonograph_record", "phonograph_recording", "record_(phonograph_recording)"], "image_count": 0, "id": 797, "frequency": "c", "synset": "phonograph_record.n.01"}, {"name": "piano", "instance_count": 0, "def": "a keyboard instrument that is played by depressing keys that cause hammers to strike tuned strings and produce sounds", "synonyms": ["piano"], "image_count": 0, "id": 798, "frequency": "f", "synset": "piano.n.01"}, {"name": "pickle", "instance_count": 0, "def": "vegetables (especially cucumbers) preserved in brine or vinegar", "synonyms": ["pickle"], "image_count": 0, "id": 799, "frequency": "f", "synset": "pickle.n.01"}, {"name": "pickup_truck", "instance_count": 0, "def": "a light truck with an open body and low sides and a tailboard", "synonyms": ["pickup_truck"], "image_count": 0, "id": 800, "frequency": "f", "synset": "pickup.n.01"}, {"name": "pie", "instance_count": 0, "def": "dish baked in pastry-lined pan often with a pastry top", "synonyms": ["pie"], "image_count": 0, "id": 801, "frequency": "c", "synset": "pie.n.01"}, {"name": "pigeon", "instance_count": 0, "def": "wild and domesticated birds having a heavy body and short legs", "synonyms": ["pigeon"], "image_count": 0, "id": 802, "frequency": "c", "synset": "pigeon.n.01"}, {"name": "piggy_bank", "instance_count": 0, "def": "a child's coin bank (often shaped like a pig)", "synonyms": ["piggy_bank", "penny_bank"], "image_count": 0, "id": 803, "frequency": "r", "synset": "piggy_bank.n.01"}, {"name": "pillow", "instance_count": 0, "def": "a cushion to support the head of a sleeping person", "synonyms": ["pillow"], "image_count": 0, "id": 804, "frequency": "f", "synset": "pillow.n.01"}, {"name": "pin_(non_jewelry)", "instance_count": 0, "def": "a small slender (often pointed) piece of wood or metal used to support or fasten or attach things", "synonyms": ["pin_(non_jewelry)"], "image_count": 0, "id": 805, "frequency": "r", "synset": "pin.n.09"}, {"name": "pineapple", "instance_count": 0, "def": "large sweet fleshy tropical fruit with a tuft of stiff leaves", "synonyms": ["pineapple"], "image_count": 0, "id": 806, "frequency": "f", "synset": "pineapple.n.02"}, {"name": "pinecone", "instance_count": 0, "def": "the seed-producing cone of a pine tree", "synonyms": ["pinecone"], "image_count": 0, "id": 807, "frequency": "c", "synset": "pinecone.n.01"}, {"name": "ping-pong_ball", "instance_count": 0, "def": "light hollow ball used in playing table tennis", "synonyms": ["ping-pong_ball"], "image_count": 0, "id": 808, "frequency": "r", "synset": "ping-pong_ball.n.01"}, {"name": "pinwheel", "instance_count": 0, "def": "a toy consisting of vanes of colored paper or plastic that is pinned to a stick and spins when it is pointed into the wind", "synonyms": ["pinwheel"], "image_count": 0, "id": 809, "frequency": "r", "synset": "pinwheel.n.03"}, {"name": "tobacco_pipe", "instance_count": 0, "def": "a tube with a small bowl at one end; used for smoking tobacco", "synonyms": ["tobacco_pipe"], "image_count": 0, "id": 810, "frequency": "r", "synset": "pipe.n.01"}, {"name": "pipe", "instance_count": 0, "def": "a long tube made of metal or plastic that is used to carry water or oil or gas etc.", "synonyms": ["pipe", "piping"], "image_count": 0, "id": 811, "frequency": "f", "synset": "pipe.n.02"}, {"name": "pistol", "instance_count": 0, "def": "a firearm that is held and fired with one hand", "synonyms": ["pistol", "handgun"], "image_count": 0, "id": 812, "frequency": "r", "synset": "pistol.n.01"}, {"name": "pita_(bread)", "instance_count": 0, "def": "usually small round bread that can open into a pocket for filling", "synonyms": ["pita_(bread)", "pocket_bread"], "image_count": 0, "id": 813, "frequency": "c", "synset": "pita.n.01"}, {"name": "pitcher_(vessel_for_liquid)", "instance_count": 0, "def": "an open vessel with a handle and a spout for pouring", "synonyms": ["pitcher_(vessel_for_liquid)", "ewer"], "image_count": 0, "id": 814, "frequency": "f", "synset": "pitcher.n.02"}, {"name": "pitchfork", "instance_count": 0, "def": "a long-handled hand tool with sharp widely spaced prongs for lifting and pitching hay", "synonyms": ["pitchfork"], "image_count": 0, "id": 815, "frequency": "r", "synset": "pitchfork.n.01"}, {"name": "pizza", "instance_count": 0, "def": "Italian open pie made of thin bread dough spread with a spiced mixture of e.g. tomato sauce and cheese", "synonyms": ["pizza"], "image_count": 0, "id": 816, "frequency": "f", "synset": "pizza.n.01"}, {"name": "place_mat", "instance_count": 0, "def": "a mat placed on a table for an individual place setting", "synonyms": ["place_mat"], "image_count": 0, "id": 817, "frequency": "f", "synset": "place_mat.n.01"}, {"name": "plate", "instance_count": 0, "def": "dish on which food is served or from which food is eaten", "synonyms": ["plate"], "image_count": 0, "id": 818, "frequency": "f", "synset": "plate.n.04"}, {"name": "platter", "instance_count": 0, "def": "a large shallow dish used for serving food", "synonyms": ["platter"], "image_count": 0, "id": 819, "frequency": "c", "synset": "platter.n.01"}, {"name": "playpen", "instance_count": 0, "def": "a portable enclosure in which babies may be left to play", "synonyms": ["playpen"], "image_count": 0, "id": 820, "frequency": "r", "synset": "playpen.n.01"}, {"name": "pliers", "instance_count": 0, "def": "a gripping hand tool with two hinged arms and (usually) serrated jaws", "synonyms": ["pliers", "plyers"], "image_count": 0, "id": 821, "frequency": "c", "synset": "pliers.n.01"}, {"name": "plow_(farm_equipment)", "instance_count": 0, "def": "a farm tool having one or more heavy blades to break the soil and cut a furrow prior to sowing", "synonyms": ["plow_(farm_equipment)", "plough_(farm_equipment)"], "image_count": 0, "id": 822, "frequency": "r", "synset": "plow.n.01"}, {"name": "plume", "instance_count": 0, "def": "a feather or cluster of feathers worn as an ornament", "synonyms": ["plume"], "image_count": 0, "id": 823, "frequency": "r", "synset": "plume.n.02"}, {"name": "pocket_watch", "instance_count": 0, "def": "a watch that is carried in a small watch pocket", "synonyms": ["pocket_watch"], "image_count": 0, "id": 824, "frequency": "r", "synset": "pocket_watch.n.01"}, {"name": "pocketknife", "instance_count": 0, "def": "a knife with a blade that folds into the handle; suitable for carrying in the pocket", "synonyms": ["pocketknife"], "image_count": 0, "id": 825, "frequency": "c", "synset": "pocketknife.n.01"}, {"name": "poker_(fire_stirring_tool)", "instance_count": 0, "def": "fire iron consisting of a metal rod with a handle; used to stir a fire", "synonyms": ["poker_(fire_stirring_tool)", "stove_poker", "fire_hook"], "image_count": 0, "id": 826, "frequency": "c", "synset": "poker.n.01"}, {"name": "pole", "instance_count": 0, "def": "a long (usually round) rod of wood or metal or plastic", "synonyms": ["pole", "post"], "image_count": 0, "id": 827, "frequency": "f", "synset": "pole.n.01"}, {"name": "polo_shirt", "instance_count": 0, "def": "a shirt with short sleeves designed for comfort and casual wear", "synonyms": ["polo_shirt", "sport_shirt"], "image_count": 0, "id": 828, "frequency": "f", "synset": "polo_shirt.n.01"}, {"name": "poncho", "instance_count": 0, "def": "a blanket-like cloak with a hole in the center for the head", "synonyms": ["poncho"], "image_count": 0, "id": 829, "frequency": "r", "synset": "poncho.n.01"}, {"name": "pony", "instance_count": 0, "def": "any of various breeds of small gentle horses usually less than five feet high at the shoulder", "synonyms": ["pony"], "image_count": 0, "id": 830, "frequency": "c", "synset": "pony.n.05"}, {"name": "pool_table", "instance_count": 0, "def": "game equipment consisting of a heavy table on which pool is played", "synonyms": ["pool_table", "billiard_table", "snooker_table"], "image_count": 0, "id": 831, "frequency": "r", "synset": "pool_table.n.01"}, {"name": "pop_(soda)", "instance_count": 0, "def": "a sweet drink containing carbonated water and flavoring", "synonyms": ["pop_(soda)", "soda_(pop)", "tonic", "soft_drink"], "image_count": 0, "id": 832, "frequency": "f", "synset": "pop.n.02"}, {"name": "postbox_(public)", "instance_count": 0, "def": "public box for deposit of mail", "synonyms": ["postbox_(public)", "mailbox_(public)"], "image_count": 0, "id": 833, "frequency": "c", "synset": "postbox.n.01"}, {"name": "postcard", "instance_count": 0, "def": "a card for sending messages by post without an envelope", "synonyms": ["postcard", "postal_card", "mailing-card"], "image_count": 0, "id": 834, "frequency": "c", "synset": "postcard.n.01"}, {"name": "poster", "instance_count": 0, "def": "a sign posted in a public place as an advertisement", "synonyms": ["poster", "placard"], "image_count": 0, "id": 835, "frequency": "f", "synset": "poster.n.01"}, {"name": "pot", "instance_count": 0, "def": "metal or earthenware cooking vessel that is usually round and deep; often has a handle and lid", "synonyms": ["pot"], "image_count": 0, "id": 836, "frequency": "f", "synset": "pot.n.01"}, {"name": "flowerpot", "instance_count": 0, "def": "a container in which plants are cultivated", "synonyms": ["flowerpot"], "image_count": 0, "id": 837, "frequency": "f", "synset": "pot.n.04"}, {"name": "potato", "instance_count": 0, "def": "an edible tuber native to South America", "synonyms": ["potato"], "image_count": 0, "id": 838, "frequency": "f", "synset": "potato.n.01"}, {"name": "potholder", "instance_count": 0, "def": "an insulated pad for holding hot pots", "synonyms": ["potholder"], "image_count": 0, "id": 839, "frequency": "c", "synset": "potholder.n.01"}, {"name": "pottery", "instance_count": 0, "def": "ceramic ware made from clay and baked in a kiln", "synonyms": ["pottery", "clayware"], "image_count": 0, "id": 840, "frequency": "c", "synset": "pottery.n.01"}, {"name": "pouch", "instance_count": 0, "def": "a small or medium size container for holding or carrying things", "synonyms": ["pouch"], "image_count": 0, "id": 841, "frequency": "c", "synset": "pouch.n.01"}, {"name": "power_shovel", "instance_count": 0, "def": "a machine for excavating", "synonyms": ["power_shovel", "excavator", "digger"], "image_count": 0, "id": 842, "frequency": "c", "synset": "power_shovel.n.01"}, {"name": "prawn", "instance_count": 0, "def": "any of various edible decapod crustaceans", "synonyms": ["prawn", "shrimp"], "image_count": 0, "id": 843, "frequency": "c", "synset": "prawn.n.01"}, {"name": "pretzel", "instance_count": 0, "def": "glazed and salted cracker typically in the shape of a loose knot", "synonyms": ["pretzel"], "image_count": 0, "id": 844, "frequency": "c", "synset": "pretzel.n.01"}, {"name": "printer", "instance_count": 0, "def": "a machine that prints", "synonyms": ["printer", "printing_machine"], "image_count": 0, "id": 845, "frequency": "f", "synset": "printer.n.03"}, {"name": "projectile_(weapon)", "instance_count": 0, "def": "a weapon that is forcibly thrown or projected at a targets", "synonyms": ["projectile_(weapon)", "missile"], "image_count": 0, "id": 846, "frequency": "c", "synset": "projectile.n.01"}, {"name": "projector", "instance_count": 0, "def": "an optical instrument that projects an enlarged image onto a screen", "synonyms": ["projector"], "image_count": 0, "id": 847, "frequency": "c", "synset": "projector.n.02"}, {"name": "propeller", "instance_count": 0, "def": "a mechanical device that rotates to push against air or water", "synonyms": ["propeller", "propellor"], "image_count": 0, "id": 848, "frequency": "f", "synset": "propeller.n.01"}, {"name": "prune", "instance_count": 0, "def": "dried plum", "synonyms": ["prune"], "image_count": 0, "id": 849, "frequency": "r", "synset": "prune.n.01"}, {"name": "pudding", "instance_count": 0, "def": "any of various soft thick unsweetened baked dishes", "synonyms": ["pudding"], "image_count": 0, "id": 850, "frequency": "r", "synset": "pudding.n.01"}, {"name": "puffer_(fish)", "instance_count": 0, "def": "fishes whose elongated spiny body can inflate itself with water or air to form a globe", "synonyms": ["puffer_(fish)", "pufferfish", "blowfish", "globefish"], "image_count": 0, "id": 851, "frequency": "r", "synset": "puffer.n.02"}, {"name": "puffin", "instance_count": 0, "def": "seabirds having short necks and brightly colored compressed bills", "synonyms": ["puffin"], "image_count": 0, "id": 852, "frequency": "r", "synset": "puffin.n.01"}, {"name": "pug-dog", "instance_count": 0, "def": "small compact smooth-coated breed of Asiatic origin having a tightly curled tail and broad flat wrinkled muzzle", "synonyms": ["pug-dog"], "image_count": 0, "id": 853, "frequency": "r", "synset": "pug.n.01"}, {"name": "pumpkin", "instance_count": 0, "def": "usually large pulpy deep-yellow round fruit of the squash family maturing in late summer or early autumn", "synonyms": ["pumpkin"], "image_count": 0, "id": 854, "frequency": "c", "synset": "pumpkin.n.02"}, {"name": "puncher", "instance_count": 0, "def": "a tool for making holes or indentations", "synonyms": ["puncher"], "image_count": 0, "id": 855, "frequency": "r", "synset": "punch.n.03"}, {"name": "puppet", "instance_count": 0, "def": "a small figure of a person operated from above with strings by a puppeteer", "synonyms": ["puppet", "marionette"], "image_count": 0, "id": 856, "frequency": "r", "synset": "puppet.n.01"}, {"name": "puppy", "instance_count": 0, "def": "a young dog", "synonyms": ["puppy"], "image_count": 0, "id": 857, "frequency": "c", "synset": "puppy.n.01"}, {"name": "quesadilla", "instance_count": 0, "def": "a tortilla that is filled with cheese and heated", "synonyms": ["quesadilla"], "image_count": 0, "id": 858, "frequency": "r", "synset": "quesadilla.n.01"}, {"name": "quiche", "instance_count": 0, "def": "a tart filled with rich unsweetened custard; often contains other ingredients (as cheese or ham or seafood or vegetables)", "synonyms": ["quiche"], "image_count": 0, "id": 859, "frequency": "r", "synset": "quiche.n.02"}, {"name": "quilt", "instance_count": 0, "def": "bedding made of two layers of cloth filled with stuffing and stitched together", "synonyms": ["quilt", "comforter"], "image_count": 0, "id": 860, "frequency": "f", "synset": "quilt.n.01"}, {"name": "rabbit", "instance_count": 0, "def": "any of various burrowing animals of the family Leporidae having long ears and short tails", "synonyms": ["rabbit"], "image_count": 0, "id": 861, "frequency": "c", "synset": "rabbit.n.01"}, {"name": "race_car", "instance_count": 0, "def": "a fast car that competes in races", "synonyms": ["race_car", "racing_car"], "image_count": 0, "id": 862, "frequency": "r", "synset": "racer.n.02"}, {"name": "racket", "instance_count": 0, "def": "a sports implement used to strike a ball in various games", "synonyms": ["racket", "racquet"], "image_count": 0, "id": 863, "frequency": "c", "synset": "racket.n.04"}, {"name": "radar", "instance_count": 0, "def": "measuring instrument in which the echo of a pulse of microwave radiation is used to detect and locate distant objects", "synonyms": ["radar"], "image_count": 0, "id": 864, "frequency": "r", "synset": "radar.n.01"}, {"name": "radiator", "instance_count": 0, "def": "a mechanism consisting of a metal honeycomb through which hot fluids circulate", "synonyms": ["radiator"], "image_count": 0, "id": 865, "frequency": "f", "synset": "radiator.n.03"}, {"name": "radio_receiver", "instance_count": 0, "def": "an electronic receiver that detects and demodulates and amplifies transmitted radio signals", "synonyms": ["radio_receiver", "radio_set", "radio", "tuner_(radio)"], "image_count": 0, "id": 866, "frequency": "c", "synset": "radio_receiver.n.01"}, {"name": "radish", "instance_count": 0, "def": "pungent edible root of any of various cultivated radish plants", "synonyms": ["radish", "daikon"], "image_count": 0, "id": 867, "frequency": "c", "synset": "radish.n.03"}, {"name": "raft", "instance_count": 0, "def": "a flat float (usually made of logs or planks) that can be used for transport or as a platform for swimmers", "synonyms": ["raft"], "image_count": 0, "id": 868, "frequency": "c", "synset": "raft.n.01"}, {"name": "rag_doll", "instance_count": 0, "def": "a cloth doll that is stuffed and (usually) painted", "synonyms": ["rag_doll"], "image_count": 0, "id": 869, "frequency": "r", "synset": "rag_doll.n.01"}, {"name": "raincoat", "instance_count": 0, "def": "a water-resistant coat", "synonyms": ["raincoat", "waterproof_jacket"], "image_count": 0, "id": 870, "frequency": "c", "synset": "raincoat.n.01"}, {"name": "ram_(animal)", "instance_count": 0, "def": "uncastrated adult male sheep", "synonyms": ["ram_(animal)"], "image_count": 0, "id": 871, "frequency": "c", "synset": "ram.n.05"}, {"name": "raspberry", "instance_count": 0, "def": "red or black edible aggregate berries usually smaller than the related blackberries", "synonyms": ["raspberry"], "image_count": 0, "id": 872, "frequency": "c", "synset": "raspberry.n.02"}, {"name": "rat", "instance_count": 0, "def": "any of various long-tailed rodents similar to but larger than a mouse", "synonyms": ["rat"], "image_count": 0, "id": 873, "frequency": "r", "synset": "rat.n.01"}, {"name": "razorblade", "instance_count": 0, "def": "a blade that has very sharp edge", "synonyms": ["razorblade"], "image_count": 0, "id": 874, "frequency": "c", "synset": "razorblade.n.01"}, {"name": "reamer_(juicer)", "instance_count": 0, "def": "a squeezer with a conical ridged center that is used for squeezing juice from citrus fruit", "synonyms": ["reamer_(juicer)", "juicer", "juice_reamer"], "image_count": 0, "id": 875, "frequency": "c", "synset": "reamer.n.01"}, {"name": "rearview_mirror", "instance_count": 0, "def": "vehicle mirror (side or rearview)", "synonyms": ["rearview_mirror"], "image_count": 0, "id": 876, "frequency": "f", "synset": "rearview_mirror.n.01"}, {"name": "receipt", "instance_count": 0, "def": "an acknowledgment (usually tangible) that payment has been made", "synonyms": ["receipt"], "image_count": 0, "id": 877, "frequency": "c", "synset": "receipt.n.02"}, {"name": "recliner", "instance_count": 0, "def": "an armchair whose back can be lowered and foot can be raised to allow the sitter to recline in it", "synonyms": ["recliner", "reclining_chair", "lounger_(chair)"], "image_count": 0, "id": 878, "frequency": "c", "synset": "recliner.n.01"}, {"name": "record_player", "instance_count": 0, "def": "machine in which rotating records cause a stylus to vibrate and the vibrations are amplified acoustically or electronically", "synonyms": ["record_player", "phonograph_(record_player)", "turntable"], "image_count": 0, "id": 879, "frequency": "c", "synset": "record_player.n.01"}, {"name": "reflector", "instance_count": 0, "def": "device that reflects light, radiation, etc.", "synonyms": ["reflector"], "image_count": 0, "id": 880, "frequency": "f", "synset": "reflector.n.01"}, {"name": "remote_control", "instance_count": 0, "def": "a device that can be used to control a machine or apparatus from a distance", "synonyms": ["remote_control"], "image_count": 0, "id": 881, "frequency": "f", "synset": "remote_control.n.01"}, {"name": "rhinoceros", "instance_count": 0, "def": "massive powerful herbivorous odd-toed ungulate of southeast Asia and Africa having very thick skin and one or two horns on the snout", "synonyms": ["rhinoceros"], "image_count": 0, "id": 882, "frequency": "c", "synset": "rhinoceros.n.01"}, {"name": "rib_(food)", "instance_count": 0, "def": "cut of meat including one or more ribs", "synonyms": ["rib_(food)"], "image_count": 0, "id": 883, "frequency": "r", "synset": "rib.n.03"}, {"name": "rifle", "instance_count": 0, "def": "a shoulder firearm with a long barrel", "synonyms": ["rifle"], "image_count": 0, "id": 884, "frequency": "c", "synset": "rifle.n.01"}, {"name": "ring", "instance_count": 0, "def": "jewelry consisting of a circlet of precious metal (often set with jewels) worn on the finger", "synonyms": ["ring"], "image_count": 0, "id": 885, "frequency": "f", "synset": "ring.n.08"}, {"name": "river_boat", "instance_count": 0, "def": "a boat used on rivers or to ply a river", "synonyms": ["river_boat"], "image_count": 0, "id": 886, "frequency": "r", "synset": "river_boat.n.01"}, {"name": "road_map", "instance_count": 0, "def": "(NOT A ROAD) a MAP showing roads (for automobile travel)", "synonyms": ["road_map"], "image_count": 0, "id": 887, "frequency": "r", "synset": "road_map.n.02"}, {"name": "robe", "instance_count": 0, "def": "any loose flowing garment", "synonyms": ["robe"], "image_count": 0, "id": 888, "frequency": "c", "synset": "robe.n.01"}, {"name": "rocking_chair", "instance_count": 0, "def": "a chair mounted on rockers", "synonyms": ["rocking_chair"], "image_count": 0, "id": 889, "frequency": "c", "synset": "rocking_chair.n.01"}, {"name": "rodent", "instance_count": 0, "def": "relatively small placental mammals having a single pair of constantly growing incisor teeth specialized for gnawing", "synonyms": ["rodent"], "image_count": 0, "id": 890, "frequency": "r", "synset": "rodent.n.01"}, {"name": "roller_skate", "instance_count": 0, "def": "a shoe with pairs of rollers (small hard wheels) fixed to the sole", "synonyms": ["roller_skate"], "image_count": 0, "id": 891, "frequency": "r", "synset": "roller_skate.n.01"}, {"name": "Rollerblade", "instance_count": 0, "def": "an in-line variant of a roller skate", "synonyms": ["Rollerblade"], "image_count": 0, "id": 892, "frequency": "r", "synset": "rollerblade.n.01"}, {"name": "rolling_pin", "instance_count": 0, "def": "utensil consisting of a cylinder (usually of wood) with a handle at each end; used to roll out dough", "synonyms": ["rolling_pin"], "image_count": 0, "id": 893, "frequency": "c", "synset": "rolling_pin.n.01"}, {"name": "root_beer", "instance_count": 0, "def": "carbonated drink containing extracts of roots and herbs", "synonyms": ["root_beer"], "image_count": 0, "id": 894, "frequency": "r", "synset": "root_beer.n.01"}, {"name": "router_(computer_equipment)", "instance_count": 0, "def": "a device that forwards data packets between computer networks", "synonyms": ["router_(computer_equipment)"], "image_count": 0, "id": 895, "frequency": "c", "synset": "router.n.02"}, {"name": "rubber_band", "instance_count": 0, "def": "a narrow band of elastic rubber used to hold things (such as papers) together", "synonyms": ["rubber_band", "elastic_band"], "image_count": 0, "id": 896, "frequency": "f", "synset": "rubber_band.n.01"}, {"name": "runner_(carpet)", "instance_count": 0, "def": "a long narrow carpet", "synonyms": ["runner_(carpet)"], "image_count": 0, "id": 897, "frequency": "c", "synset": "runner.n.08"}, {"name": "plastic_bag", "instance_count": 0, "def": "a bag made of paper or plastic for holding customer's purchases", "synonyms": ["plastic_bag", "paper_bag"], "image_count": 0, "id": 898, "frequency": "f", "synset": "sack.n.01"}, {"name": "saddle_(on_an_animal)", "instance_count": 0, "def": "a seat for the rider of a horse or camel", "synonyms": ["saddle_(on_an_animal)"], "image_count": 0, "id": 899, "frequency": "f", "synset": "saddle.n.01"}, {"name": "saddle_blanket", "instance_count": 0, "def": "stable gear consisting of a blanket placed under the saddle", "synonyms": ["saddle_blanket", "saddlecloth", "horse_blanket"], "image_count": 0, "id": 900, "frequency": "f", "synset": "saddle_blanket.n.01"}, {"name": "saddlebag", "instance_count": 0, "def": "a large bag (or pair of bags) hung over a saddle", "synonyms": ["saddlebag"], "image_count": 0, "id": 901, "frequency": "c", "synset": "saddlebag.n.01"}, {"name": "safety_pin", "instance_count": 0, "def": "a pin in the form of a clasp; has a guard so the point of the pin will not stick the user", "synonyms": ["safety_pin"], "image_count": 0, "id": 902, "frequency": "r", "synset": "safety_pin.n.01"}, {"name": "sail", "instance_count": 0, "def": "a large piece of fabric by means of which wind is used to propel a sailing vessel", "synonyms": ["sail"], "image_count": 0, "id": 903, "frequency": "f", "synset": "sail.n.01"}, {"name": "salad", "instance_count": 0, "def": "food mixtures either arranged on a plate or tossed and served with a moist dressing; usually consisting of or including greens", "synonyms": ["salad"], "image_count": 0, "id": 904, "frequency": "f", "synset": "salad.n.01"}, {"name": "salad_plate", "instance_count": 0, "def": "a plate or bowl for individual servings of salad", "synonyms": ["salad_plate", "salad_bowl"], "image_count": 0, "id": 905, "frequency": "r", "synset": "salad_plate.n.01"}, {"name": "salami", "instance_count": 0, "def": "highly seasoned fatty sausage of pork and beef usually dried", "synonyms": ["salami"], "image_count": 0, "id": 906, "frequency": "c", "synset": "salami.n.01"}, {"name": "salmon_(fish)", "instance_count": 0, "def": "any of various large food and game fishes of northern waters", "synonyms": ["salmon_(fish)"], "image_count": 0, "id": 907, "frequency": "c", "synset": "salmon.n.01"}, {"name": "salmon_(food)", "instance_count": 0, "def": "flesh of any of various marine or freshwater fish of the family Salmonidae", "synonyms": ["salmon_(food)"], "image_count": 0, "id": 908, "frequency": "r", "synset": "salmon.n.03"}, {"name": "salsa", "instance_count": 0, "def": "spicy sauce of tomatoes and onions and chili peppers to accompany Mexican foods", "synonyms": ["salsa"], "image_count": 0, "id": 909, "frequency": "c", "synset": "salsa.n.01"}, {"name": "saltshaker", "instance_count": 0, "def": "a shaker with a perforated top for sprinkling salt", "synonyms": ["saltshaker"], "image_count": 0, "id": 910, "frequency": "f", "synset": "saltshaker.n.01"}, {"name": "sandal_(type_of_shoe)", "instance_count": 0, "def": "a shoe consisting of a sole fastened by straps to the foot", "synonyms": ["sandal_(type_of_shoe)"], "image_count": 0, "id": 911, "frequency": "f", "synset": "sandal.n.01"}, {"name": "sandwich", "instance_count": 0, "def": "two (or more) slices of bread with a filling between them", "synonyms": ["sandwich"], "image_count": 0, "id": 912, "frequency": "f", "synset": "sandwich.n.01"}, {"name": "satchel", "instance_count": 0, "def": "luggage consisting of a small case with a flat bottom and (usually) a shoulder strap", "synonyms": ["satchel"], "image_count": 0, "id": 913, "frequency": "r", "synset": "satchel.n.01"}, {"name": "saucepan", "instance_count": 0, "def": "a deep pan with a handle; used for stewing or boiling", "synonyms": ["saucepan"], "image_count": 0, "id": 914, "frequency": "r", "synset": "saucepan.n.01"}, {"name": "saucer", "instance_count": 0, "def": "a small shallow dish for holding a cup at the table", "synonyms": ["saucer"], "image_count": 0, "id": 915, "frequency": "f", "synset": "saucer.n.02"}, {"name": "sausage", "instance_count": 0, "def": "highly seasoned minced meat stuffed in casings", "synonyms": ["sausage"], "image_count": 0, "id": 916, "frequency": "f", "synset": "sausage.n.01"}, {"name": "sawhorse", "instance_count": 0, "def": "a framework for holding wood that is being sawed", "synonyms": ["sawhorse", "sawbuck"], "image_count": 0, "id": 917, "frequency": "r", "synset": "sawhorse.n.01"}, {"name": "saxophone", "instance_count": 0, "def": "a wind instrument with a `J'-shaped form typically made of brass", "synonyms": ["saxophone"], "image_count": 0, "id": 918, "frequency": "r", "synset": "sax.n.02"}, {"name": "scale_(measuring_instrument)", "instance_count": 0, "def": "a measuring instrument for weighing; shows amount of mass", "synonyms": ["scale_(measuring_instrument)"], "image_count": 0, "id": 919, "frequency": "f", "synset": "scale.n.07"}, {"name": "scarecrow", "instance_count": 0, "def": "an effigy in the shape of a man to frighten birds away from seeds", "synonyms": ["scarecrow", "strawman"], "image_count": 0, "id": 920, "frequency": "r", "synset": "scarecrow.n.01"}, {"name": "scarf", "instance_count": 0, "def": "a garment worn around the head or neck or shoulders for warmth or decoration", "synonyms": ["scarf"], "image_count": 0, "id": 921, "frequency": "f", "synset": "scarf.n.01"}, {"name": "school_bus", "instance_count": 0, "def": "a bus used to transport children to or from school", "synonyms": ["school_bus"], "image_count": 0, "id": 922, "frequency": "c", "synset": "school_bus.n.01"}, {"name": "scissors", "instance_count": 0, "def": "a tool having two crossed pivoting blades with looped handles", "synonyms": ["scissors"], "image_count": 0, "id": 923, "frequency": "f", "synset": "scissors.n.01"}, {"name": "scoreboard", "instance_count": 0, "def": "a large board for displaying the score of a contest (and some other information)", "synonyms": ["scoreboard"], "image_count": 0, "id": 924, "frequency": "f", "synset": "scoreboard.n.01"}, {"name": "scraper", "instance_count": 0, "def": "any of various hand tools for scraping", "synonyms": ["scraper"], "image_count": 0, "id": 925, "frequency": "r", "synset": "scraper.n.01"}, {"name": "screwdriver", "instance_count": 0, "def": "a hand tool for driving screws; has a tip that fits into the head of a screw", "synonyms": ["screwdriver"], "image_count": 0, "id": 926, "frequency": "c", "synset": "screwdriver.n.01"}, {"name": "scrubbing_brush", "instance_count": 0, "def": "a brush with short stiff bristles for heavy cleaning", "synonyms": ["scrubbing_brush"], "image_count": 0, "id": 927, "frequency": "f", "synset": "scrub_brush.n.01"}, {"name": "sculpture", "instance_count": 0, "def": "a three-dimensional work of art", "synonyms": ["sculpture"], "image_count": 0, "id": 928, "frequency": "c", "synset": "sculpture.n.01"}, {"name": "seabird", "instance_count": 0, "def": "a bird that frequents coastal waters and the open ocean: gulls; pelicans; gannets; cormorants; albatrosses; petrels; etc.", "synonyms": ["seabird", "seafowl"], "image_count": 0, "id": 929, "frequency": "c", "synset": "seabird.n.01"}, {"name": "seahorse", "instance_count": 0, "def": "small fish with horse-like heads bent sharply downward and curled tails", "synonyms": ["seahorse"], "image_count": 0, "id": 930, "frequency": "c", "synset": "seahorse.n.02"}, {"name": "seaplane", "instance_count": 0, "def": "an airplane that can land on or take off from water", "synonyms": ["seaplane", "hydroplane"], "image_count": 0, "id": 931, "frequency": "r", "synset": "seaplane.n.01"}, {"name": "seashell", "instance_count": 0, "def": "the shell of a marine organism", "synonyms": ["seashell"], "image_count": 0, "id": 932, "frequency": "c", "synset": "seashell.n.01"}, {"name": "sewing_machine", "instance_count": 0, "def": "a textile machine used as a home appliance for sewing", "synonyms": ["sewing_machine"], "image_count": 0, "id": 933, "frequency": "c", "synset": "sewing_machine.n.01"}, {"name": "shaker", "instance_count": 0, "def": "a container in which something can be shaken", "synonyms": ["shaker"], "image_count": 0, "id": 934, "frequency": "c", "synset": "shaker.n.03"}, {"name": "shampoo", "instance_count": 0, "def": "cleansing agent consisting of soaps or detergents used for washing the hair", "synonyms": ["shampoo"], "image_count": 0, "id": 935, "frequency": "c", "synset": "shampoo.n.01"}, {"name": "shark", "instance_count": 0, "def": "typically large carnivorous fishes with sharpe teeth", "synonyms": ["shark"], "image_count": 0, "id": 936, "frequency": "c", "synset": "shark.n.01"}, {"name": "sharpener", "instance_count": 0, "def": "any implement that is used to make something (an edge or a point) sharper", "synonyms": ["sharpener"], "image_count": 0, "id": 937, "frequency": "r", "synset": "sharpener.n.01"}, {"name": "Sharpie", "instance_count": 0, "def": "a pen with indelible ink that will write on any surface", "synonyms": ["Sharpie"], "image_count": 0, "id": 938, "frequency": "r", "synset": "sharpie.n.03"}, {"name": "shaver_(electric)", "instance_count": 0, "def": "a razor powered by an electric motor", "synonyms": ["shaver_(electric)", "electric_shaver", "electric_razor"], "image_count": 0, "id": 939, "frequency": "r", "synset": "shaver.n.03"}, {"name": "shaving_cream", "instance_count": 0, "def": "toiletry consisting that forms a rich lather for softening the beard before shaving", "synonyms": ["shaving_cream", "shaving_soap"], "image_count": 0, "id": 940, "frequency": "c", "synset": "shaving_cream.n.01"}, {"name": "shawl", "instance_count": 0, "def": "cloak consisting of an oblong piece of cloth used to cover the head and shoulders", "synonyms": ["shawl"], "image_count": 0, "id": 941, "frequency": "r", "synset": "shawl.n.01"}, {"name": "shears", "instance_count": 0, "def": "large scissors with strong blades", "synonyms": ["shears"], "image_count": 0, "id": 942, "frequency": "r", "synset": "shears.n.01"}, {"name": "sheep", "instance_count": 0, "def": "woolly usually horned ruminant mammal related to the goat", "synonyms": ["sheep"], "image_count": 0, "id": 943, "frequency": "f", "synset": "sheep.n.01"}, {"name": "shepherd_dog", "instance_count": 0, "def": "any of various usually long-haired breeds of dog reared to herd and guard sheep", "synonyms": ["shepherd_dog", "sheepdog"], "image_count": 0, "id": 944, "frequency": "r", "synset": "shepherd_dog.n.01"}, {"name": "sherbert", "instance_count": 0, "def": "a frozen dessert made primarily of fruit juice and sugar", "synonyms": ["sherbert", "sherbet"], "image_count": 0, "id": 945, "frequency": "r", "synset": "sherbert.n.01"}, {"name": "shield", "instance_count": 0, "def": "armor carried on the arm to intercept blows", "synonyms": ["shield"], "image_count": 0, "id": 946, "frequency": "c", "synset": "shield.n.02"}, {"name": "shirt", "instance_count": 0, "def": "a garment worn on the upper half of the body", "synonyms": ["shirt"], "image_count": 0, "id": 947, "frequency": "f", "synset": "shirt.n.01"}, {"name": "shoe", "instance_count": 0, "def": "common footwear covering the foot", "synonyms": ["shoe", "sneaker_(type_of_shoe)", "tennis_shoe"], "image_count": 0, "id": 948, "frequency": "f", "synset": "shoe.n.01"}, {"name": "shopping_bag", "instance_count": 0, "def": "a bag made of plastic or strong paper (often with handles); used to transport goods after shopping", "synonyms": ["shopping_bag"], "image_count": 0, "id": 949, "frequency": "f", "synset": "shopping_bag.n.01"}, {"name": "shopping_cart", "instance_count": 0, "def": "a handcart that holds groceries or other goods while shopping", "synonyms": ["shopping_cart"], "image_count": 0, "id": 950, "frequency": "c", "synset": "shopping_cart.n.01"}, {"name": "short_pants", "instance_count": 0, "def": "trousers that end at or above the knee", "synonyms": ["short_pants", "shorts_(clothing)", "trunks_(clothing)"], "image_count": 0, "id": 951, "frequency": "f", "synset": "short_pants.n.01"}, {"name": "shot_glass", "instance_count": 0, "def": "a small glass adequate to hold a single swallow of whiskey", "synonyms": ["shot_glass"], "image_count": 0, "id": 952, "frequency": "r", "synset": "shot_glass.n.01"}, {"name": "shoulder_bag", "instance_count": 0, "def": "a large handbag that can be carried by a strap looped over the shoulder", "synonyms": ["shoulder_bag"], "image_count": 0, "id": 953, "frequency": "f", "synset": "shoulder_bag.n.01"}, {"name": "shovel", "instance_count": 0, "def": "a hand tool for lifting loose material such as snow, dirt, etc.", "synonyms": ["shovel"], "image_count": 0, "id": 954, "frequency": "c", "synset": "shovel.n.01"}, {"name": "shower_head", "instance_count": 0, "def": "a plumbing fixture that sprays water over you", "synonyms": ["shower_head"], "image_count": 0, "id": 955, "frequency": "f", "synset": "shower.n.01"}, {"name": "shower_cap", "instance_count": 0, "def": "a tight cap worn to keep hair dry while showering", "synonyms": ["shower_cap"], "image_count": 0, "id": 956, "frequency": "r", "synset": "shower_cap.n.01"}, {"name": "shower_curtain", "instance_count": 0, "def": "a curtain that keeps water from splashing out of the shower area", "synonyms": ["shower_curtain"], "image_count": 0, "id": 957, "frequency": "f", "synset": "shower_curtain.n.01"}, {"name": "shredder_(for_paper)", "instance_count": 0, "def": "a device that shreds documents", "synonyms": ["shredder_(for_paper)"], "image_count": 0, "id": 958, "frequency": "r", "synset": "shredder.n.01"}, {"name": "signboard", "instance_count": 0, "def": "structure displaying a board on which advertisements can be posted", "synonyms": ["signboard"], "image_count": 0, "id": 959, "frequency": "f", "synset": "signboard.n.01"}, {"name": "silo", "instance_count": 0, "def": "a cylindrical tower used for storing goods", "synonyms": ["silo"], "image_count": 0, "id": 960, "frequency": "c", "synset": "silo.n.01"}, {"name": "sink", "instance_count": 0, "def": "plumbing fixture consisting of a water basin fixed to a wall or floor and having a drainpipe", "synonyms": ["sink"], "image_count": 0, "id": 961, "frequency": "f", "synset": "sink.n.01"}, {"name": "skateboard", "instance_count": 0, "def": "a board with wheels that is ridden in a standing or crouching position and propelled by foot", "synonyms": ["skateboard"], "image_count": 0, "id": 962, "frequency": "f", "synset": "skateboard.n.01"}, {"name": "skewer", "instance_count": 0, "def": "a long pin for holding meat in position while it is being roasted", "synonyms": ["skewer"], "image_count": 0, "id": 963, "frequency": "c", "synset": "skewer.n.01"}, {"name": "ski", "instance_count": 0, "def": "sports equipment for skiing on snow", "synonyms": ["ski"], "image_count": 0, "id": 964, "frequency": "f", "synset": "ski.n.01"}, {"name": "ski_boot", "instance_count": 0, "def": "a stiff boot that is fastened to a ski with a ski binding", "synonyms": ["ski_boot"], "image_count": 0, "id": 965, "frequency": "f", "synset": "ski_boot.n.01"}, {"name": "ski_parka", "instance_count": 0, "def": "a parka to be worn while skiing", "synonyms": ["ski_parka", "ski_jacket"], "image_count": 0, "id": 966, "frequency": "f", "synset": "ski_parka.n.01"}, {"name": "ski_pole", "instance_count": 0, "def": "a pole with metal points used as an aid in skiing", "synonyms": ["ski_pole"], "image_count": 0, "id": 967, "frequency": "f", "synset": "ski_pole.n.01"}, {"name": "skirt", "instance_count": 0, "def": "a garment hanging from the waist; worn mainly by girls and women", "synonyms": ["skirt"], "image_count": 0, "id": 968, "frequency": "f", "synset": "skirt.n.02"}, {"name": "skullcap", "instance_count": 0, "def": "rounded brimless cap fitting the crown of the head", "synonyms": ["skullcap"], "image_count": 0, "id": 969, "frequency": "r", "synset": "skullcap.n.01"}, {"name": "sled", "instance_count": 0, "def": "a vehicle or flat object for transportation over snow by sliding or pulled by dogs, etc.", "synonyms": ["sled", "sledge", "sleigh"], "image_count": 0, "id": 970, "frequency": "c", "synset": "sled.n.01"}, {"name": "sleeping_bag", "instance_count": 0, "def": "large padded bag designed to be slept in outdoors", "synonyms": ["sleeping_bag"], "image_count": 0, "id": 971, "frequency": "c", "synset": "sleeping_bag.n.01"}, {"name": "sling_(bandage)", "instance_count": 0, "def": "bandage to support an injured forearm; slung over the shoulder or neck", "synonyms": ["sling_(bandage)", "triangular_bandage"], "image_count": 0, "id": 972, "frequency": "r", "synset": "sling.n.05"}, {"name": "slipper_(footwear)", "instance_count": 0, "def": "low footwear that can be slipped on and off easily; usually worn indoors", "synonyms": ["slipper_(footwear)", "carpet_slipper_(footwear)"], "image_count": 0, "id": 973, "frequency": "c", "synset": "slipper.n.01"}, {"name": "smoothie", "instance_count": 0, "def": "a thick smooth drink consisting of fresh fruit pureed with ice cream or yoghurt or milk", "synonyms": ["smoothie"], "image_count": 0, "id": 974, "frequency": "r", "synset": "smoothie.n.02"}, {"name": "snake", "instance_count": 0, "def": "limbless scaly elongate reptile; some are venomous", "synonyms": ["snake", "serpent"], "image_count": 0, "id": 975, "frequency": "r", "synset": "snake.n.01"}, {"name": "snowboard", "instance_count": 0, "def": "a board that resembles a broad ski or a small surfboard; used in a standing position to slide down snow-covered slopes", "synonyms": ["snowboard"], "image_count": 0, "id": 976, "frequency": "f", "synset": "snowboard.n.01"}, {"name": "snowman", "instance_count": 0, "def": "a figure of a person made of packed snow", "synonyms": ["snowman"], "image_count": 0, "id": 977, "frequency": "c", "synset": "snowman.n.01"}, {"name": "snowmobile", "instance_count": 0, "def": "tracked vehicle for travel on snow having skis in front", "synonyms": ["snowmobile"], "image_count": 0, "id": 978, "frequency": "c", "synset": "snowmobile.n.01"}, {"name": "soap", "instance_count": 0, "def": "a cleansing agent made from the salts of vegetable or animal fats", "synonyms": ["soap"], "image_count": 0, "id": 979, "frequency": "f", "synset": "soap.n.01"}, {"name": "soccer_ball", "instance_count": 0, "def": "an inflated ball used in playing soccer (called `football' outside of the United States)", "synonyms": ["soccer_ball"], "image_count": 0, "id": 980, "frequency": "f", "synset": "soccer_ball.n.01"}, {"name": "sock", "instance_count": 0, "def": "cloth covering for the foot; worn inside the shoe; reaches to between the ankle and the knee", "synonyms": ["sock"], "image_count": 0, "id": 981, "frequency": "f", "synset": "sock.n.01"}, {"name": "sofa", "instance_count": 0, "def": "an upholstered seat for more than one person", "synonyms": ["sofa", "couch", "lounge"], "image_count": 0, "id": 982, "frequency": "f", "synset": "sofa.n.01"}, {"name": "softball", "instance_count": 0, "def": "ball used in playing softball", "synonyms": ["softball"], "image_count": 0, "id": 983, "frequency": "r", "synset": "softball.n.01"}, {"name": "solar_array", "instance_count": 0, "def": "electrical device consisting of a large array of connected solar cells", "synonyms": ["solar_array", "solar_battery", "solar_panel"], "image_count": 0, "id": 984, "frequency": "c", "synset": "solar_array.n.01"}, {"name": "sombrero", "instance_count": 0, "def": "a straw hat with a tall crown and broad brim; worn in American southwest and in Mexico", "synonyms": ["sombrero"], "image_count": 0, "id": 985, "frequency": "r", "synset": "sombrero.n.02"}, {"name": "soup", "instance_count": 0, "def": "liquid food especially of meat or fish or vegetable stock often containing pieces of solid food", "synonyms": ["soup"], "image_count": 0, "id": 986, "frequency": "f", "synset": "soup.n.01"}, {"name": "soup_bowl", "instance_count": 0, "def": "a bowl for serving soup", "synonyms": ["soup_bowl"], "image_count": 0, "id": 987, "frequency": "r", "synset": "soup_bowl.n.01"}, {"name": "soupspoon", "instance_count": 0, "def": "a spoon with a rounded bowl for eating soup", "synonyms": ["soupspoon"], "image_count": 0, "id": 988, "frequency": "c", "synset": "soupspoon.n.01"}, {"name": "sour_cream", "instance_count": 0, "def": "soured light cream", "synonyms": ["sour_cream", "soured_cream"], "image_count": 0, "id": 989, "frequency": "c", "synset": "sour_cream.n.01"}, {"name": "soya_milk", "instance_count": 0, "def": "a milk substitute containing soybean flour and water; used in some infant formulas and in making tofu", "synonyms": ["soya_milk", "soybean_milk", "soymilk"], "image_count": 0, "id": 990, "frequency": "r", "synset": "soya_milk.n.01"}, {"name": "space_shuttle", "instance_count": 0, "def": "a reusable spacecraft with wings for a controlled descent through the Earth's atmosphere", "synonyms": ["space_shuttle"], "image_count": 0, "id": 991, "frequency": "r", "synset": "space_shuttle.n.01"}, {"name": "sparkler_(fireworks)", "instance_count": 0, "def": "a firework that burns slowly and throws out a shower of sparks", "synonyms": ["sparkler_(fireworks)"], "image_count": 0, "id": 992, "frequency": "r", "synset": "sparkler.n.02"}, {"name": "spatula", "instance_count": 0, "def": "a hand tool with a thin flexible blade used to mix or spread soft substances", "synonyms": ["spatula"], "image_count": 0, "id": 993, "frequency": "f", "synset": "spatula.n.02"}, {"name": "spear", "instance_count": 0, "def": "a long pointed rod used as a tool or weapon", "synonyms": ["spear", "lance"], "image_count": 0, "id": 994, "frequency": "r", "synset": "spear.n.01"}, {"name": "spectacles", "instance_count": 0, "def": "optical instrument consisting of a frame that holds a pair of lenses for correcting defective vision", "synonyms": ["spectacles", "specs", "eyeglasses", "glasses"], "image_count": 0, "id": 995, "frequency": "f", "synset": "spectacles.n.01"}, {"name": "spice_rack", "instance_count": 0, "def": "a rack for displaying containers filled with spices", "synonyms": ["spice_rack"], "image_count": 0, "id": 996, "frequency": "c", "synset": "spice_rack.n.01"}, {"name": "spider", "instance_count": 0, "def": "predatory arachnid with eight legs, two poison fangs, two feelers, and usually two silk-spinning organs at the back end of the body", "synonyms": ["spider"], "image_count": 0, "id": 997, "frequency": "c", "synset": "spider.n.01"}, {"name": "crawfish", "instance_count": 0, "def": "large edible marine crustacean having a spiny carapace but lacking the large pincers of true lobsters", "synonyms": ["crawfish", "crayfish"], "image_count": 0, "id": 998, "frequency": "r", "synset": "spiny_lobster.n.02"}, {"name": "sponge", "instance_count": 0, "def": "a porous mass usable to absorb water typically used for cleaning", "synonyms": ["sponge"], "image_count": 0, "id": 999, "frequency": "c", "synset": "sponge.n.01"}, {"name": "spoon", "instance_count": 0, "def": "a piece of cutlery with a shallow bowl-shaped container and a handle", "synonyms": ["spoon"], "image_count": 0, "id": 1000, "frequency": "f", "synset": "spoon.n.01"}, {"name": "sportswear", "instance_count": 0, "def": "attire worn for sport or for casual wear", "synonyms": ["sportswear", "athletic_wear", "activewear"], "image_count": 0, "id": 1001, "frequency": "c", "synset": "sportswear.n.01"}, {"name": "spotlight", "instance_count": 0, "def": "a lamp that produces a strong beam of light to illuminate a restricted area; used to focus attention of a stage performer", "synonyms": ["spotlight"], "image_count": 0, "id": 1002, "frequency": "c", "synset": "spotlight.n.02"}, {"name": "squid_(food)", "instance_count": 0, "def": "(Italian cuisine) squid prepared as food", "synonyms": ["squid_(food)", "calamari", "calamary"], "image_count": 0, "id": 1003, "frequency": "r", "synset": "squid.n.01"}, {"name": "squirrel", "instance_count": 0, "def": "a kind of arboreal rodent having a long bushy tail", "synonyms": ["squirrel"], "image_count": 0, "id": 1004, "frequency": "c", "synset": "squirrel.n.01"}, {"name": "stagecoach", "instance_count": 0, "def": "a large coach-and-four formerly used to carry passengers and mail on regular routes between towns", "synonyms": ["stagecoach"], "image_count": 0, "id": 1005, "frequency": "r", "synset": "stagecoach.n.01"}, {"name": "stapler_(stapling_machine)", "instance_count": 0, "def": "a machine that inserts staples into sheets of paper in order to fasten them together", "synonyms": ["stapler_(stapling_machine)"], "image_count": 0, "id": 1006, "frequency": "c", "synset": "stapler.n.01"}, {"name": "starfish", "instance_count": 0, "def": "echinoderms characterized by five arms extending from a central disk", "synonyms": ["starfish", "sea_star"], "image_count": 0, "id": 1007, "frequency": "c", "synset": "starfish.n.01"}, {"name": "statue_(sculpture)", "instance_count": 0, "def": "a sculpture representing a human or animal", "synonyms": ["statue_(sculpture)"], "image_count": 0, "id": 1008, "frequency": "f", "synset": "statue.n.01"}, {"name": "steak_(food)", "instance_count": 0, "def": "a slice of meat cut from the fleshy part of an animal or large fish", "synonyms": ["steak_(food)"], "image_count": 0, "id": 1009, "frequency": "c", "synset": "steak.n.01"}, {"name": "steak_knife", "instance_count": 0, "def": "a sharp table knife used in eating steak", "synonyms": ["steak_knife"], "image_count": 0, "id": 1010, "frequency": "r", "synset": "steak_knife.n.01"}, {"name": "steering_wheel", "instance_count": 0, "def": "a handwheel that is used for steering", "synonyms": ["steering_wheel"], "image_count": 0, "id": 1011, "frequency": "f", "synset": "steering_wheel.n.01"}, {"name": "stepladder", "instance_count": 0, "def": "a folding portable ladder hinged at the top", "synonyms": ["stepladder"], "image_count": 0, "id": 1012, "frequency": "r", "synset": "step_ladder.n.01"}, {"name": "step_stool", "instance_count": 0, "def": "a stool that has one or two steps that fold under the seat", "synonyms": ["step_stool"], "image_count": 0, "id": 1013, "frequency": "c", "synset": "step_stool.n.01"}, {"name": "stereo_(sound_system)", "instance_count": 0, "def": "electronic device for playing audio", "synonyms": ["stereo_(sound_system)"], "image_count": 0, "id": 1014, "frequency": "c", "synset": "stereo.n.01"}, {"name": "stew", "instance_count": 0, "def": "food prepared by stewing especially meat or fish with vegetables", "synonyms": ["stew"], "image_count": 0, "id": 1015, "frequency": "r", "synset": "stew.n.02"}, {"name": "stirrer", "instance_count": 0, "def": "an implement used for stirring", "synonyms": ["stirrer"], "image_count": 0, "id": 1016, "frequency": "r", "synset": "stirrer.n.02"}, {"name": "stirrup", "instance_count": 0, "def": "support consisting of metal loops into which rider's feet go", "synonyms": ["stirrup"], "image_count": 0, "id": 1017, "frequency": "f", "synset": "stirrup.n.01"}, {"name": "stool", "instance_count": 0, "def": "a simple seat without a back or arms", "synonyms": ["stool"], "image_count": 0, "id": 1018, "frequency": "f", "synset": "stool.n.01"}, {"name": "stop_sign", "instance_count": 0, "def": "a traffic sign to notify drivers that they must come to a complete stop", "synonyms": ["stop_sign"], "image_count": 0, "id": 1019, "frequency": "f", "synset": "stop_sign.n.01"}, {"name": "brake_light", "instance_count": 0, "def": "a red light on the rear of a motor vehicle that signals when the brakes are applied", "synonyms": ["brake_light"], "image_count": 0, "id": 1020, "frequency": "f", "synset": "stoplight.n.01"}, {"name": "stove", "instance_count": 0, "def": "a kitchen appliance used for cooking food", "synonyms": ["stove", "kitchen_stove", "range_(kitchen_appliance)", "kitchen_range", "cooking_stove"], "image_count": 0, "id": 1021, "frequency": "f", "synset": "stove.n.01"}, {"name": "strainer", "instance_count": 0, "def": "a filter to retain larger pieces while smaller pieces and liquids pass through", "synonyms": ["strainer"], "image_count": 0, "id": 1022, "frequency": "c", "synset": "strainer.n.01"}, {"name": "strap", "instance_count": 0, "def": "an elongated strip of material for binding things together or holding", "synonyms": ["strap"], "image_count": 0, "id": 1023, "frequency": "f", "synset": "strap.n.01"}, {"name": "straw_(for_drinking)", "instance_count": 0, "def": "a thin paper or plastic tube used to suck liquids into the mouth", "synonyms": ["straw_(for_drinking)", "drinking_straw"], "image_count": 0, "id": 1024, "frequency": "f", "synset": "straw.n.04"}, {"name": "strawberry", "instance_count": 0, "def": "sweet fleshy red fruit", "synonyms": ["strawberry"], "image_count": 0, "id": 1025, "frequency": "f", "synset": "strawberry.n.01"}, {"name": "street_sign", "instance_count": 0, "def": "a sign visible from the street", "synonyms": ["street_sign"], "image_count": 0, "id": 1026, "frequency": "f", "synset": "street_sign.n.01"}, {"name": "streetlight", "instance_count": 0, "def": "a lamp supported on a lamppost; for illuminating a street", "synonyms": ["streetlight", "street_lamp"], "image_count": 0, "id": 1027, "frequency": "f", "synset": "streetlight.n.01"}, {"name": "string_cheese", "instance_count": 0, "def": "cheese formed in long strings twisted together", "synonyms": ["string_cheese"], "image_count": 0, "id": 1028, "frequency": "r", "synset": "string_cheese.n.01"}, {"name": "stylus", "instance_count": 0, "def": "a pointed tool for writing or drawing or engraving, including pens", "synonyms": ["stylus"], "image_count": 0, "id": 1029, "frequency": "r", "synset": "stylus.n.02"}, {"name": "subwoofer", "instance_count": 0, "def": "a loudspeaker that is designed to reproduce very low bass frequencies", "synonyms": ["subwoofer"], "image_count": 0, "id": 1030, "frequency": "r", "synset": "subwoofer.n.01"}, {"name": "sugar_bowl", "instance_count": 0, "def": "a dish in which sugar is served", "synonyms": ["sugar_bowl"], "image_count": 0, "id": 1031, "frequency": "r", "synset": "sugar_bowl.n.01"}, {"name": "sugarcane_(plant)", "instance_count": 0, "def": "juicy canes whose sap is a source of molasses and commercial sugar; fresh canes are sometimes chewed for the juice", "synonyms": ["sugarcane_(plant)"], "image_count": 0, "id": 1032, "frequency": "r", "synset": "sugarcane.n.01"}, {"name": "suit_(clothing)", "instance_count": 0, "def": "a set of garments (usually including a jacket and trousers or skirt) for outerwear all of the same fabric and color", "synonyms": ["suit_(clothing)"], "image_count": 0, "id": 1033, "frequency": "f", "synset": "suit.n.01"}, {"name": "sunflower", "instance_count": 0, "def": "any plant of the genus Helianthus having large flower heads with dark disk florets and showy yellow rays", "synonyms": ["sunflower"], "image_count": 0, "id": 1034, "frequency": "c", "synset": "sunflower.n.01"}, {"name": "sunglasses", "instance_count": 0, "def": "spectacles that are darkened or polarized to protect the eyes from the glare of the sun", "synonyms": ["sunglasses"], "image_count": 0, "id": 1035, "frequency": "f", "synset": "sunglasses.n.01"}, {"name": "sunhat", "instance_count": 0, "def": "a hat with a broad brim that protects the face from direct exposure to the sun", "synonyms": ["sunhat"], "image_count": 0, "id": 1036, "frequency": "c", "synset": "sunhat.n.01"}, {"name": "surfboard", "instance_count": 0, "def": "a narrow buoyant board for riding surf", "synonyms": ["surfboard"], "image_count": 0, "id": 1037, "frequency": "f", "synset": "surfboard.n.01"}, {"name": "sushi", "instance_count": 0, "def": "rice (with raw fish) wrapped in seaweed", "synonyms": ["sushi"], "image_count": 0, "id": 1038, "frequency": "c", "synset": "sushi.n.01"}, {"name": "mop", "instance_count": 0, "def": "cleaning implement consisting of absorbent material fastened to a handle; for cleaning floors", "synonyms": ["mop"], "image_count": 0, "id": 1039, "frequency": "c", "synset": "swab.n.02"}, {"name": "sweat_pants", "instance_count": 0, "def": "loose-fitting trousers with elastic cuffs; worn by athletes", "synonyms": ["sweat_pants"], "image_count": 0, "id": 1040, "frequency": "c", "synset": "sweat_pants.n.01"}, {"name": "sweatband", "instance_count": 0, "def": "a band of material tied around the forehead or wrist to absorb sweat", "synonyms": ["sweatband"], "image_count": 0, "id": 1041, "frequency": "c", "synset": "sweatband.n.02"}, {"name": "sweater", "instance_count": 0, "def": "a crocheted or knitted garment covering the upper part of the body", "synonyms": ["sweater"], "image_count": 0, "id": 1042, "frequency": "f", "synset": "sweater.n.01"}, {"name": "sweatshirt", "instance_count": 0, "def": "cotton knit pullover with long sleeves worn during athletic activity", "synonyms": ["sweatshirt"], "image_count": 0, "id": 1043, "frequency": "f", "synset": "sweatshirt.n.01"}, {"name": "sweet_potato", "instance_count": 0, "def": "the edible tuberous root of the sweet potato vine", "synonyms": ["sweet_potato"], "image_count": 0, "id": 1044, "frequency": "c", "synset": "sweet_potato.n.02"}, {"name": "swimsuit", "instance_count": 0, "def": "garment worn for swimming", "synonyms": ["swimsuit", "swimwear", "bathing_suit", "swimming_costume", "bathing_costume", "swimming_trunks", "bathing_trunks"], "image_count": 0, "id": 1045, "frequency": "f", "synset": "swimsuit.n.01"}, {"name": "sword", "instance_count": 0, "def": "a cutting or thrusting weapon that has a long metal blade", "synonyms": ["sword"], "image_count": 0, "id": 1046, "frequency": "c", "synset": "sword.n.01"}, {"name": "syringe", "instance_count": 0, "def": "a medical instrument used to inject or withdraw fluids", "synonyms": ["syringe"], "image_count": 0, "id": 1047, "frequency": "r", "synset": "syringe.n.01"}, {"name": "Tabasco_sauce", "instance_count": 0, "def": "very spicy sauce (trade name Tabasco) made from fully-aged red peppers", "synonyms": ["Tabasco_sauce"], "image_count": 0, "id": 1048, "frequency": "r", "synset": "tabasco.n.02"}, {"name": "table-tennis_table", "instance_count": 0, "def": "a table used for playing table tennis", "synonyms": ["table-tennis_table", "ping-pong_table"], "image_count": 0, "id": 1049, "frequency": "r", "synset": "table-tennis_table.n.01"}, {"name": "table", "instance_count": 0, "def": "a piece of furniture having a smooth flat top that is usually supported by one or more vertical legs", "synonyms": ["table"], "image_count": 0, "id": 1050, "frequency": "f", "synset": "table.n.02"}, {"name": "table_lamp", "instance_count": 0, "def": "a lamp that sits on a table", "synonyms": ["table_lamp"], "image_count": 0, "id": 1051, "frequency": "c", "synset": "table_lamp.n.01"}, {"name": "tablecloth", "instance_count": 0, "def": "a covering spread over a dining table", "synonyms": ["tablecloth"], "image_count": 0, "id": 1052, "frequency": "f", "synset": "tablecloth.n.01"}, {"name": "tachometer", "instance_count": 0, "def": "measuring instrument for indicating speed of rotation", "synonyms": ["tachometer"], "image_count": 0, "id": 1053, "frequency": "r", "synset": "tachometer.n.01"}, {"name": "taco", "instance_count": 0, "def": "a small tortilla cupped around a filling", "synonyms": ["taco"], "image_count": 0, "id": 1054, "frequency": "r", "synset": "taco.n.02"}, {"name": "tag", "instance_count": 0, "def": "a label associated with something for the purpose of identification or information", "synonyms": ["tag"], "image_count": 0, "id": 1055, "frequency": "f", "synset": "tag.n.02"}, {"name": "taillight", "instance_count": 0, "def": "lamp (usually red) mounted at the rear of a motor vehicle", "synonyms": ["taillight", "rear_light"], "image_count": 0, "id": 1056, "frequency": "f", "synset": "taillight.n.01"}, {"name": "tambourine", "instance_count": 0, "def": "a shallow drum with a single drumhead and with metallic disks in the sides", "synonyms": ["tambourine"], "image_count": 0, "id": 1057, "frequency": "r", "synset": "tambourine.n.01"}, {"name": "army_tank", "instance_count": 0, "def": "an enclosed armored military vehicle; has a cannon and moves on caterpillar treads", "synonyms": ["army_tank", "armored_combat_vehicle", "armoured_combat_vehicle"], "image_count": 0, "id": 1058, "frequency": "r", "synset": "tank.n.01"}, {"name": "tank_(storage_vessel)", "instance_count": 0, "def": "a large (usually metallic) vessel for holding gases or liquids", "synonyms": ["tank_(storage_vessel)", "storage_tank"], "image_count": 0, "id": 1059, "frequency": "f", "synset": "tank.n.02"}, {"name": "tank_top_(clothing)", "instance_count": 0, "def": "a tight-fitting sleeveless shirt with wide shoulder straps and low neck and no front opening", "synonyms": ["tank_top_(clothing)"], "image_count": 0, "id": 1060, "frequency": "f", "synset": "tank_top.n.01"}, {"name": "tape_(sticky_cloth_or_paper)", "instance_count": 0, "def": "a long thin piece of cloth or paper as used for binding or fastening", "synonyms": ["tape_(sticky_cloth_or_paper)"], "image_count": 0, "id": 1061, "frequency": "f", "synset": "tape.n.01"}, {"name": "tape_measure", "instance_count": 0, "def": "measuring instrument consisting of a narrow strip (cloth or metal) marked in inches or centimeters and used for measuring lengths", "synonyms": ["tape_measure", "measuring_tape"], "image_count": 0, "id": 1062, "frequency": "c", "synset": "tape.n.04"}, {"name": "tapestry", "instance_count": 0, "def": "a heavy textile with a woven design; used for curtains and upholstery", "synonyms": ["tapestry"], "image_count": 0, "id": 1063, "frequency": "c", "synset": "tapestry.n.02"}, {"name": "tarp", "instance_count": 0, "def": "waterproofed canvas", "synonyms": ["tarp"], "image_count": 0, "id": 1064, "frequency": "f", "synset": "tarpaulin.n.01"}, {"name": "tartan", "instance_count": 0, "def": "a cloth having a crisscross design", "synonyms": ["tartan", "plaid"], "image_count": 0, "id": 1065, "frequency": "c", "synset": "tartan.n.01"}, {"name": "tassel", "instance_count": 0, "def": "adornment consisting of a bunch of cords fastened at one end", "synonyms": ["tassel"], "image_count": 0, "id": 1066, "frequency": "c", "synset": "tassel.n.01"}, {"name": "tea_bag", "instance_count": 0, "def": "a measured amount of tea in a bag for an individual serving of tea", "synonyms": ["tea_bag"], "image_count": 0, "id": 1067, "frequency": "c", "synset": "tea_bag.n.01"}, {"name": "teacup", "instance_count": 0, "def": "a cup from which tea is drunk", "synonyms": ["teacup"], "image_count": 0, "id": 1068, "frequency": "c", "synset": "teacup.n.02"}, {"name": "teakettle", "instance_count": 0, "def": "kettle for boiling water to make tea", "synonyms": ["teakettle"], "image_count": 0, "id": 1069, "frequency": "c", "synset": "teakettle.n.01"}, {"name": "teapot", "instance_count": 0, "def": "pot for brewing tea; usually has a spout and handle", "synonyms": ["teapot"], "image_count": 0, "id": 1070, "frequency": "f", "synset": "teapot.n.01"}, {"name": "teddy_bear", "instance_count": 0, "def": "plaything consisting of a child's toy bear (usually plush and stuffed with soft materials)", "synonyms": ["teddy_bear"], "image_count": 0, "id": 1071, "frequency": "f", "synset": "teddy.n.01"}, {"name": "telephone", "instance_count": 0, "def": "electronic device for communicating by voice over long distances (includes wired and wireless/cell phones)", "synonyms": ["telephone", "phone", "telephone_set"], "image_count": 0, "id": 1072, "frequency": "f", "synset": "telephone.n.01"}, {"name": "telephone_booth", "instance_count": 0, "def": "booth for using a telephone", "synonyms": ["telephone_booth", "phone_booth", "call_box", "telephone_box", "telephone_kiosk"], "image_count": 0, "id": 1073, "frequency": "c", "synset": "telephone_booth.n.01"}, {"name": "telephone_pole", "instance_count": 0, "def": "tall pole supporting telephone wires", "synonyms": ["telephone_pole", "telegraph_pole", "telegraph_post"], "image_count": 0, "id": 1074, "frequency": "f", "synset": "telephone_pole.n.01"}, {"name": "telephoto_lens", "instance_count": 0, "def": "a camera lens that magnifies the image", "synonyms": ["telephoto_lens", "zoom_lens"], "image_count": 0, "id": 1075, "frequency": "r", "synset": "telephoto_lens.n.01"}, {"name": "television_camera", "instance_count": 0, "def": "television equipment for capturing and recording video", "synonyms": ["television_camera", "tv_camera"], "image_count": 0, "id": 1076, "frequency": "c", "synset": "television_camera.n.01"}, {"name": "television_set", "instance_count": 0, "def": "an electronic device that receives television signals and displays them on a screen", "synonyms": ["television_set", "tv", "tv_set"], "image_count": 0, "id": 1077, "frequency": "f", "synset": "television_receiver.n.01"}, {"name": "tennis_ball", "instance_count": 0, "def": "ball about the size of a fist used in playing tennis", "synonyms": ["tennis_ball"], "image_count": 0, "id": 1078, "frequency": "f", "synset": "tennis_ball.n.01"}, {"name": "tennis_racket", "instance_count": 0, "def": "a racket used to play tennis", "synonyms": ["tennis_racket"], "image_count": 0, "id": 1079, "frequency": "f", "synset": "tennis_racket.n.01"}, {"name": "tequila", "instance_count": 0, "def": "Mexican liquor made from fermented juices of an agave plant", "synonyms": ["tequila"], "image_count": 0, "id": 1080, "frequency": "r", "synset": "tequila.n.01"}, {"name": "thermometer", "instance_count": 0, "def": "measuring instrument for measuring temperature", "synonyms": ["thermometer"], "image_count": 0, "id": 1081, "frequency": "c", "synset": "thermometer.n.01"}, {"name": "thermos_bottle", "instance_count": 0, "def": "vacuum flask that preserves temperature of hot or cold drinks", "synonyms": ["thermos_bottle"], "image_count": 0, "id": 1082, "frequency": "c", "synset": "thermos.n.01"}, {"name": "thermostat", "instance_count": 0, "def": "a regulator for automatically regulating temperature by starting or stopping the supply of heat", "synonyms": ["thermostat"], "image_count": 0, "id": 1083, "frequency": "f", "synset": "thermostat.n.01"}, {"name": "thimble", "instance_count": 0, "def": "a small metal cap to protect the finger while sewing; can be used as a small container", "synonyms": ["thimble"], "image_count": 0, "id": 1084, "frequency": "r", "synset": "thimble.n.02"}, {"name": "thread", "instance_count": 0, "def": "a fine cord of twisted fibers (of cotton or silk or wool or nylon etc.) used in sewing and weaving", "synonyms": ["thread", "yarn"], "image_count": 0, "id": 1085, "frequency": "c", "synset": "thread.n.01"}, {"name": "thumbtack", "instance_count": 0, "def": "a tack for attaching papers to a bulletin board or drawing board", "synonyms": ["thumbtack", "drawing_pin", "pushpin"], "image_count": 0, "id": 1086, "frequency": "c", "synset": "thumbtack.n.01"}, {"name": "tiara", "instance_count": 0, "def": "a jeweled headdress worn by women on formal occasions", "synonyms": ["tiara"], "image_count": 0, "id": 1087, "frequency": "c", "synset": "tiara.n.01"}, {"name": "tiger", "instance_count": 0, "def": "large feline of forests in most of Asia having a tawny coat with black stripes", "synonyms": ["tiger"], "image_count": 0, "id": 1088, "frequency": "c", "synset": "tiger.n.02"}, {"name": "tights_(clothing)", "instance_count": 0, "def": "skintight knit hose covering the body from the waist to the feet worn by acrobats and dancers and as stockings by women and girls", "synonyms": ["tights_(clothing)", "leotards"], "image_count": 0, "id": 1089, "frequency": "c", "synset": "tights.n.01"}, {"name": "timer", "instance_count": 0, "def": "a timepiece that measures a time interval and signals its end", "synonyms": ["timer", "stopwatch"], "image_count": 0, "id": 1090, "frequency": "c", "synset": "timer.n.01"}, {"name": "tinfoil", "instance_count": 0, "def": "foil made of tin or an alloy of tin and lead", "synonyms": ["tinfoil"], "image_count": 0, "id": 1091, "frequency": "f", "synset": "tinfoil.n.01"}, {"name": "tinsel", "instance_count": 0, "def": "a showy decoration that is basically valueless", "synonyms": ["tinsel"], "image_count": 0, "id": 1092, "frequency": "c", "synset": "tinsel.n.01"}, {"name": "tissue_paper", "instance_count": 0, "def": "a soft thin (usually translucent) paper", "synonyms": ["tissue_paper"], "image_count": 0, "id": 1093, "frequency": "f", "synset": "tissue.n.02"}, {"name": "toast_(food)", "instance_count": 0, "def": "slice of bread that has been toasted", "synonyms": ["toast_(food)"], "image_count": 0, "id": 1094, "frequency": "c", "synset": "toast.n.01"}, {"name": "toaster", "instance_count": 0, "def": "a kitchen appliance (usually electric) for toasting bread", "synonyms": ["toaster"], "image_count": 0, "id": 1095, "frequency": "f", "synset": "toaster.n.02"}, {"name": "toaster_oven", "instance_count": 0, "def": "kitchen appliance consisting of a small electric oven for toasting or warming food", "synonyms": ["toaster_oven"], "image_count": 0, "id": 1096, "frequency": "f", "synset": "toaster_oven.n.01"}, {"name": "toilet", "instance_count": 0, "def": "a plumbing fixture for defecation and urination", "synonyms": ["toilet"], "image_count": 0, "id": 1097, "frequency": "f", "synset": "toilet.n.02"}, {"name": "toilet_tissue", "instance_count": 0, "def": "a soft thin absorbent paper for use in toilets", "synonyms": ["toilet_tissue", "toilet_paper", "bathroom_tissue"], "image_count": 0, "id": 1098, "frequency": "f", "synset": "toilet_tissue.n.01"}, {"name": "tomato", "instance_count": 0, "def": "mildly acid red or yellow pulpy fruit eaten as a vegetable", "synonyms": ["tomato"], "image_count": 0, "id": 1099, "frequency": "f", "synset": "tomato.n.01"}, {"name": "tongs", "instance_count": 0, "def": "any of various devices for taking hold of objects; usually have two hinged legs with handles above and pointed hooks below", "synonyms": ["tongs"], "image_count": 0, "id": 1100, "frequency": "f", "synset": "tongs.n.01"}, {"name": "toolbox", "instance_count": 0, "def": "a box or chest or cabinet for holding hand tools", "synonyms": ["toolbox"], "image_count": 0, "id": 1101, "frequency": "c", "synset": "toolbox.n.01"}, {"name": "toothbrush", "instance_count": 0, "def": "small brush; has long handle; used to clean teeth", "synonyms": ["toothbrush"], "image_count": 0, "id": 1102, "frequency": "f", "synset": "toothbrush.n.01"}, {"name": "toothpaste", "instance_count": 0, "def": "a dentifrice in the form of a paste", "synonyms": ["toothpaste"], "image_count": 0, "id": 1103, "frequency": "f", "synset": "toothpaste.n.01"}, {"name": "toothpick", "instance_count": 0, "def": "pick consisting of a small strip of wood or plastic; used to pick food from between the teeth", "synonyms": ["toothpick"], "image_count": 0, "id": 1104, "frequency": "f", "synset": "toothpick.n.01"}, {"name": "cover", "instance_count": 0, "def": "covering for a hole (especially a hole in the top of a container)", "synonyms": ["cover"], "image_count": 0, "id": 1105, "frequency": "f", "synset": "top.n.09"}, {"name": "tortilla", "instance_count": 0, "def": "thin unleavened pancake made from cornmeal or wheat flour", "synonyms": ["tortilla"], "image_count": 0, "id": 1106, "frequency": "c", "synset": "tortilla.n.01"}, {"name": "tow_truck", "instance_count": 0, "def": "a truck equipped to hoist and pull wrecked cars (or to remove cars from no-parking zones)", "synonyms": ["tow_truck"], "image_count": 0, "id": 1107, "frequency": "c", "synset": "tow_truck.n.01"}, {"name": "towel", "instance_count": 0, "def": "a rectangular piece of absorbent cloth (or paper) for drying or wiping", "synonyms": ["towel"], "image_count": 0, "id": 1108, "frequency": "f", "synset": "towel.n.01"}, {"name": "towel_rack", "instance_count": 0, "def": "a rack consisting of one or more bars on which towels can be hung", "synonyms": ["towel_rack", "towel_rail", "towel_bar"], "image_count": 0, "id": 1109, "frequency": "f", "synset": "towel_rack.n.01"}, {"name": "toy", "instance_count": 0, "def": "a device regarded as providing amusement", "synonyms": ["toy"], "image_count": 0, "id": 1110, "frequency": "f", "synset": "toy.n.03"}, {"name": "tractor_(farm_equipment)", "instance_count": 0, "def": "a wheeled vehicle with large wheels; used in farming and other applications", "synonyms": ["tractor_(farm_equipment)"], "image_count": 0, "id": 1111, "frequency": "c", "synset": "tractor.n.01"}, {"name": "traffic_light", "instance_count": 0, "def": "a device to control vehicle traffic often consisting of three or more lights", "synonyms": ["traffic_light"], "image_count": 0, "id": 1112, "frequency": "f", "synset": "traffic_light.n.01"}, {"name": "dirt_bike", "instance_count": 0, "def": "a lightweight motorcycle equipped with rugged tires and suspension for off-road use", "synonyms": ["dirt_bike"], "image_count": 0, "id": 1113, "frequency": "c", "synset": "trail_bike.n.01"}, {"name": "trailer_truck", "instance_count": 0, "def": "a truck consisting of a tractor and trailer together", "synonyms": ["trailer_truck", "tractor_trailer", "trucking_rig", "articulated_lorry", "semi_truck"], "image_count": 0, "id": 1114, "frequency": "f", "synset": "trailer_truck.n.01"}, {"name": "train_(railroad_vehicle)", "instance_count": 0, "def": "public or private transport provided by a line of railway cars coupled together and drawn by a locomotive", "synonyms": ["train_(railroad_vehicle)", "railroad_train"], "image_count": 0, "id": 1115, "frequency": "f", "synset": "train.n.01"}, {"name": "trampoline", "instance_count": 0, "def": "gymnastic apparatus consisting of a strong canvas sheet attached with springs to a metal frame", "synonyms": ["trampoline"], "image_count": 0, "id": 1116, "frequency": "r", "synset": "trampoline.n.01"}, {"name": "tray", "instance_count": 0, "def": "an open receptacle for holding or displaying or serving articles or food", "synonyms": ["tray"], "image_count": 0, "id": 1117, "frequency": "f", "synset": "tray.n.01"}, {"name": "trench_coat", "instance_count": 0, "def": "a military style raincoat; belted with deep pockets", "synonyms": ["trench_coat"], "image_count": 0, "id": 1118, "frequency": "r", "synset": "trench_coat.n.01"}, {"name": "triangle_(musical_instrument)", "instance_count": 0, "def": "a percussion instrument consisting of a metal bar bent in the shape of an open triangle", "synonyms": ["triangle_(musical_instrument)"], "image_count": 0, "id": 1119, "frequency": "r", "synset": "triangle.n.05"}, {"name": "tricycle", "instance_count": 0, "def": "a vehicle with three wheels that is moved by foot pedals", "synonyms": ["tricycle"], "image_count": 0, "id": 1120, "frequency": "c", "synset": "tricycle.n.01"}, {"name": "tripod", "instance_count": 0, "def": "a three-legged rack used for support", "synonyms": ["tripod"], "image_count": 0, "id": 1121, "frequency": "f", "synset": "tripod.n.01"}, {"name": "trousers", "instance_count": 0, "def": "a garment extending from the waist to the knee or ankle, covering each leg separately", "synonyms": ["trousers", "pants_(clothing)"], "image_count": 0, "id": 1122, "frequency": "f", "synset": "trouser.n.01"}, {"name": "truck", "instance_count": 0, "def": "an automotive vehicle suitable for hauling", "synonyms": ["truck"], "image_count": 0, "id": 1123, "frequency": "f", "synset": "truck.n.01"}, {"name": "truffle_(chocolate)", "instance_count": 0, "def": "creamy chocolate candy", "synonyms": ["truffle_(chocolate)", "chocolate_truffle"], "image_count": 0, "id": 1124, "frequency": "r", "synset": "truffle.n.03"}, {"name": "trunk", "instance_count": 0, "def": "luggage consisting of a large strong case used when traveling or for storage", "synonyms": ["trunk"], "image_count": 0, "id": 1125, "frequency": "c", "synset": "trunk.n.02"}, {"name": "vat", "instance_count": 0, "def": "a large vessel for holding or storing liquids", "synonyms": ["vat"], "image_count": 0, "id": 1126, "frequency": "r", "synset": "tub.n.02"}, {"name": "turban", "instance_count": 0, "def": "a traditional headdress consisting of a long scarf wrapped around the head", "synonyms": ["turban"], "image_count": 0, "id": 1127, "frequency": "c", "synset": "turban.n.01"}, {"name": "turkey_(food)", "instance_count": 0, "def": "flesh of large domesticated fowl usually roasted", "synonyms": ["turkey_(food)"], "image_count": 0, "id": 1128, "frequency": "c", "synset": "turkey.n.04"}, {"name": "turnip", "instance_count": 0, "def": "widely cultivated plant having a large fleshy edible white or yellow root", "synonyms": ["turnip"], "image_count": 0, "id": 1129, "frequency": "r", "synset": "turnip.n.01"}, {"name": "turtle", "instance_count": 0, "def": "any of various aquatic and land reptiles having a bony shell and flipper-like limbs for swimming", "synonyms": ["turtle"], "image_count": 0, "id": 1130, "frequency": "c", "synset": "turtle.n.02"}, {"name": "turtleneck_(clothing)", "instance_count": 0, "def": "a sweater or jersey with a high close-fitting collar", "synonyms": ["turtleneck_(clothing)", "polo-neck"], "image_count": 0, "id": 1131, "frequency": "c", "synset": "turtleneck.n.01"}, {"name": "typewriter", "instance_count": 0, "def": "hand-operated character printer for printing written messages one character at a time", "synonyms": ["typewriter"], "image_count": 0, "id": 1132, "frequency": "c", "synset": "typewriter.n.01"}, {"name": "umbrella", "instance_count": 0, "def": "a lightweight handheld collapsible canopy", "synonyms": ["umbrella"], "image_count": 0, "id": 1133, "frequency": "f", "synset": "umbrella.n.01"}, {"name": "underwear", "instance_count": 0, "def": "undergarment worn next to the skin and under the outer garments", "synonyms": ["underwear", "underclothes", "underclothing", "underpants"], "image_count": 0, "id": 1134, "frequency": "f", "synset": "underwear.n.01"}, {"name": "unicycle", "instance_count": 0, "def": "a vehicle with a single wheel that is driven by pedals", "synonyms": ["unicycle"], "image_count": 0, "id": 1135, "frequency": "r", "synset": "unicycle.n.01"}, {"name": "urinal", "instance_count": 0, "def": "a plumbing fixture (usually attached to the wall) used by men to urinate", "synonyms": ["urinal"], "image_count": 0, "id": 1136, "frequency": "f", "synset": "urinal.n.01"}, {"name": "urn", "instance_count": 0, "def": "a large vase that usually has a pedestal or feet", "synonyms": ["urn"], "image_count": 0, "id": 1137, "frequency": "c", "synset": "urn.n.01"}, {"name": "vacuum_cleaner", "instance_count": 0, "def": "an electrical home appliance that cleans by suction", "synonyms": ["vacuum_cleaner"], "image_count": 0, "id": 1138, "frequency": "c", "synset": "vacuum.n.04"}, {"name": "vase", "instance_count": 0, "def": "an open jar of glass or porcelain used as an ornament or to hold flowers", "synonyms": ["vase"], "image_count": 0, "id": 1139, "frequency": "f", "synset": "vase.n.01"}, {"name": "vending_machine", "instance_count": 0, "def": "a slot machine for selling goods", "synonyms": ["vending_machine"], "image_count": 0, "id": 1140, "frequency": "c", "synset": "vending_machine.n.01"}, {"name": "vent", "instance_count": 0, "def": "a hole for the escape of gas or air", "synonyms": ["vent", "blowhole", "air_vent"], "image_count": 0, "id": 1141, "frequency": "f", "synset": "vent.n.01"}, {"name": "vest", "instance_count": 0, "def": "a man's sleeveless garment worn underneath a coat", "synonyms": ["vest", "waistcoat"], "image_count": 0, "id": 1142, "frequency": "f", "synset": "vest.n.01"}, {"name": "videotape", "instance_count": 0, "def": "a video recording made on magnetic tape", "synonyms": ["videotape"], "image_count": 0, "id": 1143, "frequency": "c", "synset": "videotape.n.01"}, {"name": "vinegar", "instance_count": 0, "def": "sour-tasting liquid produced usually by oxidation of the alcohol in wine or cider and used as a condiment or food preservative", "synonyms": ["vinegar"], "image_count": 0, "id": 1144, "frequency": "r", "synset": "vinegar.n.01"}, {"name": "violin", "instance_count": 0, "def": "bowed stringed instrument that is the highest member of the violin family", "synonyms": ["violin", "fiddle"], "image_count": 0, "id": 1145, "frequency": "r", "synset": "violin.n.01"}, {"name": "vodka", "instance_count": 0, "def": "unaged colorless liquor originating in Russia", "synonyms": ["vodka"], "image_count": 0, "id": 1146, "frequency": "r", "synset": "vodka.n.01"}, {"name": "volleyball", "instance_count": 0, "def": "an inflated ball used in playing volleyball", "synonyms": ["volleyball"], "image_count": 0, "id": 1147, "frequency": "c", "synset": "volleyball.n.02"}, {"name": "vulture", "instance_count": 0, "def": "any of various large birds of prey having naked heads and weak claws and feeding chiefly on carrion", "synonyms": ["vulture"], "image_count": 0, "id": 1148, "frequency": "r", "synset": "vulture.n.01"}, {"name": "waffle", "instance_count": 0, "def": "pancake batter baked in a waffle iron", "synonyms": ["waffle"], "image_count": 0, "id": 1149, "frequency": "c", "synset": "waffle.n.01"}, {"name": "waffle_iron", "instance_count": 0, "def": "a kitchen appliance for baking waffles", "synonyms": ["waffle_iron"], "image_count": 0, "id": 1150, "frequency": "r", "synset": "waffle_iron.n.01"}, {"name": "wagon", "instance_count": 0, "def": "any of various kinds of wheeled vehicles drawn by an animal or a tractor", "synonyms": ["wagon"], "image_count": 0, "id": 1151, "frequency": "c", "synset": "wagon.n.01"}, {"name": "wagon_wheel", "instance_count": 0, "def": "a wheel of a wagon", "synonyms": ["wagon_wheel"], "image_count": 0, "id": 1152, "frequency": "c", "synset": "wagon_wheel.n.01"}, {"name": "walking_stick", "instance_count": 0, "def": "a stick carried in the hand for support in walking", "synonyms": ["walking_stick"], "image_count": 0, "id": 1153, "frequency": "c", "synset": "walking_stick.n.01"}, {"name": "wall_clock", "instance_count": 0, "def": "a clock mounted on a wall", "synonyms": ["wall_clock"], "image_count": 0, "id": 1154, "frequency": "c", "synset": "wall_clock.n.01"}, {"name": "wall_socket", "instance_count": 0, "def": "receptacle providing a place in a wiring system where current can be taken to run electrical devices", "synonyms": ["wall_socket", "wall_plug", "electric_outlet", "electrical_outlet", "outlet", "electric_receptacle"], "image_count": 0, "id": 1155, "frequency": "f", "synset": "wall_socket.n.01"}, {"name": "wallet", "instance_count": 0, "def": "a pocket-size case for holding papers and paper money", "synonyms": ["wallet", "billfold"], "image_count": 0, "id": 1156, "frequency": "f", "synset": "wallet.n.01"}, {"name": "walrus", "instance_count": 0, "def": "either of two large northern marine mammals having ivory tusks and tough hide over thick blubber", "synonyms": ["walrus"], "image_count": 0, "id": 1157, "frequency": "r", "synset": "walrus.n.01"}, {"name": "wardrobe", "instance_count": 0, "def": "a tall piece of furniture that provides storage space for clothes; has a door and rails or hooks for hanging clothes", "synonyms": ["wardrobe"], "image_count": 0, "id": 1158, "frequency": "r", "synset": "wardrobe.n.01"}, {"name": "washbasin", "instance_count": 0, "def": "a bathroom sink that is permanently installed and connected to a water supply and drainpipe; where you can wash your hands and face", "synonyms": ["washbasin", "basin_(for_washing)", "washbowl", "washstand", "handbasin"], "image_count": 0, "id": 1159, "frequency": "r", "synset": "washbasin.n.01"}, {"name": "automatic_washer", "instance_count": 0, "def": "a home appliance for washing clothes and linens automatically", "synonyms": ["automatic_washer", "washing_machine"], "image_count": 0, "id": 1160, "frequency": "c", "synset": "washer.n.03"}, {"name": "watch", "instance_count": 0, "def": "a small, portable timepiece", "synonyms": ["watch", "wristwatch"], "image_count": 0, "id": 1161, "frequency": "f", "synset": "watch.n.01"}, {"name": "water_bottle", "instance_count": 0, "def": "a bottle for holding water", "synonyms": ["water_bottle"], "image_count": 0, "id": 1162, "frequency": "f", "synset": "water_bottle.n.01"}, {"name": "water_cooler", "instance_count": 0, "def": "a device for cooling and dispensing drinking water", "synonyms": ["water_cooler"], "image_count": 0, "id": 1163, "frequency": "c", "synset": "water_cooler.n.01"}, {"name": "water_faucet", "instance_count": 0, "def": "a faucet for drawing water from a pipe or cask", "synonyms": ["water_faucet", "water_tap", "tap_(water_faucet)"], "image_count": 0, "id": 1164, "frequency": "c", "synset": "water_faucet.n.01"}, {"name": "water_heater", "instance_count": 0, "def": "a heater and storage tank to supply heated water", "synonyms": ["water_heater", "hot-water_heater"], "image_count": 0, "id": 1165, "frequency": "r", "synset": "water_heater.n.01"}, {"name": "water_jug", "instance_count": 0, "def": "a jug that holds water", "synonyms": ["water_jug"], "image_count": 0, "id": 1166, "frequency": "c", "synset": "water_jug.n.01"}, {"name": "water_gun", "instance_count": 0, "def": "plaything consisting of a toy pistol that squirts water", "synonyms": ["water_gun", "squirt_gun"], "image_count": 0, "id": 1167, "frequency": "r", "synset": "water_pistol.n.01"}, {"name": "water_scooter", "instance_count": 0, "def": "a motorboat resembling a motor scooter (NOT A SURFBOARD OR WATER SKI)", "synonyms": ["water_scooter", "sea_scooter", "jet_ski"], "image_count": 0, "id": 1168, "frequency": "c", "synset": "water_scooter.n.01"}, {"name": "water_ski", "instance_count": 0, "def": "broad ski for skimming over water towed by a speedboat (DO NOT MARK WATER)", "synonyms": ["water_ski"], "image_count": 0, "id": 1169, "frequency": "c", "synset": "water_ski.n.01"}, {"name": "water_tower", "instance_count": 0, "def": "a large reservoir for water", "synonyms": ["water_tower"], "image_count": 0, "id": 1170, "frequency": "c", "synset": "water_tower.n.01"}, {"name": "watering_can", "instance_count": 0, "def": "a container with a handle and a spout with a perforated nozzle; used to sprinkle water over plants", "synonyms": ["watering_can"], "image_count": 0, "id": 1171, "frequency": "c", "synset": "watering_can.n.01"}, {"name": "watermelon", "instance_count": 0, "def": "large oblong or roundish melon with a hard green rind and sweet watery red or occasionally yellowish pulp", "synonyms": ["watermelon"], "image_count": 0, "id": 1172, "frequency": "f", "synset": "watermelon.n.02"}, {"name": "weathervane", "instance_count": 0, "def": "mechanical device attached to an elevated structure; rotates freely to show the direction of the wind", "synonyms": ["weathervane", "vane_(weathervane)", "wind_vane"], "image_count": 0, "id": 1173, "frequency": "f", "synset": "weathervane.n.01"}, {"name": "webcam", "instance_count": 0, "def": "a digital camera designed to take digital photographs and transmit them over the internet", "synonyms": ["webcam"], "image_count": 0, "id": 1174, "frequency": "c", "synset": "webcam.n.01"}, {"name": "wedding_cake", "instance_count": 0, "def": "a rich cake with two or more tiers and covered with frosting and decorations; served at a wedding reception", "synonyms": ["wedding_cake", "bridecake"], "image_count": 0, "id": 1175, "frequency": "c", "synset": "wedding_cake.n.01"}, {"name": "wedding_ring", "instance_count": 0, "def": "a ring given to the bride and/or groom at the wedding", "synonyms": ["wedding_ring", "wedding_band"], "image_count": 0, "id": 1176, "frequency": "c", "synset": "wedding_ring.n.01"}, {"name": "wet_suit", "instance_count": 0, "def": "a close-fitting garment made of a permeable material; worn in cold water to retain body heat", "synonyms": ["wet_suit"], "image_count": 0, "id": 1177, "frequency": "f", "synset": "wet_suit.n.01"}, {"name": "wheel", "instance_count": 0, "def": "a circular frame with spokes (or a solid disc) that can rotate on a shaft or axle", "synonyms": ["wheel"], "image_count": 0, "id": 1178, "frequency": "f", "synset": "wheel.n.01"}, {"name": "wheelchair", "instance_count": 0, "def": "a movable chair mounted on large wheels", "synonyms": ["wheelchair"], "image_count": 0, "id": 1179, "frequency": "c", "synset": "wheelchair.n.01"}, {"name": "whipped_cream", "instance_count": 0, "def": "cream that has been beaten until light and fluffy", "synonyms": ["whipped_cream"], "image_count": 0, "id": 1180, "frequency": "c", "synset": "whipped_cream.n.01"}, {"name": "whistle", "instance_count": 0, "def": "a small wind instrument that produces a whistling sound by blowing into it", "synonyms": ["whistle"], "image_count": 0, "id": 1181, "frequency": "c", "synset": "whistle.n.03"}, {"name": "wig", "instance_count": 0, "def": "hairpiece covering the head and made of real or synthetic hair", "synonyms": ["wig"], "image_count": 0, "id": 1182, "frequency": "c", "synset": "wig.n.01"}, {"name": "wind_chime", "instance_count": 0, "def": "a decorative arrangement of pieces of metal or glass or pottery that hang together loosely so the wind can cause them to tinkle", "synonyms": ["wind_chime"], "image_count": 0, "id": 1183, "frequency": "c", "synset": "wind_chime.n.01"}, {"name": "windmill", "instance_count": 0, "def": "A mill or turbine that is powered by wind", "synonyms": ["windmill"], "image_count": 0, "id": 1184, "frequency": "c", "synset": "windmill.n.01"}, {"name": "window_box_(for_plants)", "instance_count": 0, "def": "a container for growing plants on a windowsill", "synonyms": ["window_box_(for_plants)"], "image_count": 0, "id": 1185, "frequency": "c", "synset": "window_box.n.01"}, {"name": "windshield_wiper", "instance_count": 0, "def": "a mechanical device that cleans the windshield", "synonyms": ["windshield_wiper", "windscreen_wiper", "wiper_(for_windshield/screen)"], "image_count": 0, "id": 1186, "frequency": "f", "synset": "windshield_wiper.n.01"}, {"name": "windsock", "instance_count": 0, "def": "a truncated cloth cone mounted on a mast/pole; shows wind direction", "synonyms": ["windsock", "air_sock", "air-sleeve", "wind_sleeve", "wind_cone"], "image_count": 0, "id": 1187, "frequency": "c", "synset": "windsock.n.01"}, {"name": "wine_bottle", "instance_count": 0, "def": "a bottle for holding wine", "synonyms": ["wine_bottle"], "image_count": 0, "id": 1188, "frequency": "f", "synset": "wine_bottle.n.01"}, {"name": "wine_bucket", "instance_count": 0, "def": "a bucket of ice used to chill a bottle of wine", "synonyms": ["wine_bucket", "wine_cooler"], "image_count": 0, "id": 1189, "frequency": "c", "synset": "wine_bucket.n.01"}, {"name": "wineglass", "instance_count": 0, "def": "a glass that has a stem and in which wine is served", "synonyms": ["wineglass"], "image_count": 0, "id": 1190, "frequency": "f", "synset": "wineglass.n.01"}, {"name": "blinder_(for_horses)", "instance_count": 0, "def": "blinds that prevent a horse from seeing something on either side", "synonyms": ["blinder_(for_horses)"], "image_count": 0, "id": 1191, "frequency": "f", "synset": "winker.n.02"}, {"name": "wok", "instance_count": 0, "def": "pan with a convex bottom; used for frying in Chinese cooking", "synonyms": ["wok"], "image_count": 0, "id": 1192, "frequency": "c", "synset": "wok.n.01"}, {"name": "wolf", "instance_count": 0, "def": "a wild carnivorous mammal of the dog family, living and hunting in packs", "synonyms": ["wolf"], "image_count": 0, "id": 1193, "frequency": "r", "synset": "wolf.n.01"}, {"name": "wooden_spoon", "instance_count": 0, "def": "a spoon made of wood", "synonyms": ["wooden_spoon"], "image_count": 0, "id": 1194, "frequency": "c", "synset": "wooden_spoon.n.02"}, {"name": "wreath", "instance_count": 0, "def": "an arrangement of flowers, leaves, or stems fastened in a ring", "synonyms": ["wreath"], "image_count": 0, "id": 1195, "frequency": "c", "synset": "wreath.n.01"}, {"name": "wrench", "instance_count": 0, "def": "a hand tool that is used to hold or twist a nut or bolt", "synonyms": ["wrench", "spanner"], "image_count": 0, "id": 1196, "frequency": "c", "synset": "wrench.n.03"}, {"name": "wristband", "instance_count": 0, "def": "band consisting of a part of a sleeve that covers the wrist", "synonyms": ["wristband"], "image_count": 0, "id": 1197, "frequency": "f", "synset": "wristband.n.01"}, {"name": "wristlet", "instance_count": 0, "def": "a band or bracelet worn around the wrist", "synonyms": ["wristlet", "wrist_band"], "image_count": 0, "id": 1198, "frequency": "f", "synset": "wristlet.n.01"}, {"name": "yacht", "instance_count": 0, "def": "an expensive vessel propelled by sail or power and used for cruising or racing", "synonyms": ["yacht"], "image_count": 0, "id": 1199, "frequency": "c", "synset": "yacht.n.01"}, {"name": "yogurt", "instance_count": 0, "def": "a custard-like food made from curdled milk", "synonyms": ["yogurt", "yoghurt", "yoghourt"], "image_count": 0, "id": 1200, "frequency": "c", "synset": "yogurt.n.01"}, {"name": "yoke_(animal_equipment)", "instance_count": 0, "def": "gear joining two animals at the neck; NOT egg yolk", "synonyms": ["yoke_(animal_equipment)"], "image_count": 0, "id": 1201, "frequency": "c", "synset": "yoke.n.07"}, {"name": "zebra", "instance_count": 0, "def": "any of several fleet black-and-white striped African equines", "synonyms": ["zebra"], "image_count": 0, "id": 1202, "frequency": "f", "synset": "zebra.n.01"}, {"name": "zucchini", "instance_count": 0, "def": "small cucumber-shaped vegetable marrow; typically dark green", "synonyms": ["zucchini", "courgette"], "image_count": 0, "id": 1203, "frequency": "c", "synset": "zucchini.n.02"}] diff --git a/scenic/dataset_lib/coco_dataset/data/objects365_class_names.txt b/scenic/dataset_lib/coco_dataset/data/objects365_class_names.txt new file mode 100644 index 0000000000000000000000000000000000000000..31bc9c0de9b34c1dc495991f58b989d1d50e4753 --- /dev/null +++ b/scenic/dataset_lib/coco_dataset/data/objects365_class_names.txt @@ -0,0 +1,365 @@ +person +sneakers +chair +hat +lamp +bottle +cabinet/shelf +cup +car +glasses +picture/frame +desk +handbag +street lights +book +plate +helmet +leather shoes +pillow +glove +potted plant +bracelet +flower +tv +storage box +vase +bench +wine glass +boots +bowl +dining table +umbrella +boat +flag +speaker +trash bin/can +stool +backpack +couch +belt +carpet +basket +towel/napkin +slippers +barrel/bucket +coffee table +suv +toy +tie +bed +traffic light +pen/pencil +microphone +sandals +canned +necklace +mirror +faucet +bicycle +bread +high heels +ring +van +watch +sink +horse +fish +apple +camera +candle +teddy bear +cake +motorcycle +wild bird +laptop +knife +traffic sign +cell phone +paddle +truck +cow +power outlet +clock +drum +fork +bus +hanger +nightstand +pot/pan +sheep +guitar +traffic cone +tea pot +keyboard +tripod +hockey +fan +dog +spoon +blackboard/whiteboard +balloon +air conditioner +cymbal +mouse +telephone +pickup truck +orange +banana +airplane +luggage +skis +soccer +trolley +oven +remote +baseball glove +paper towel +refrigerator +train +tomato +machinery vehicle +tent +shampoo/shower gel +head phone +lantern +donut +cleaning products +sailboat +tangerine +pizza +kite +computer box +elephant +toiletries +gas stove +broccoli +toilet +stroller +shovel +baseball bat +microwave +skateboard +surfboard +surveillance camera +gun +life saver +cat +lemon +liquid soap +zebra +duck +sports car +giraffe +pumpkin +piano +stop sign +radiator +converter +tissue +carrot +washing machine +vent +cookies +cutting/chopping board +tennis racket +candy +skating and skiing shoes +scissors +folder +baseball +strawberry +bow tie +pigeon +pepper +coffee machine +bathtub +snowboard +suitcase +grapes +ladder +pear +american football +basketball +potato +paint brush +printer +billiards +fire hydrant +goose +projector +sausage +fire extinguisher +extension cord +facial mask +tennis ball +chopsticks +electronic stove and gas stove +pie +frisbee +kettle +hamburger +golf club +cucumber +clutch +blender +tong +slide +hot dog +toothbrush +facial cleanser +mango +deer +egg +violin +marker +ship +chicken +onion +ice cream +tape +wheelchair +plum +bar soap +scale +watermelon +cabbage +router/modem +golf ball +pine apple +crane +fire truck +peach +cello +notepaper +tricycle +toaster +helicopter +green beans +brush +carriage +cigar +earphone +penguin +hurdle +swing +radio +CD +parking meter +swan +garlic +french fries +horn +avocado +saxophone +trumpet +sandwich +cue +kiwi fruit +bear +fishing rod +cherry +tablet +green vegetables +nuts +corn +key +screwdriver +globe +broom +pliers +volleyball +hammer +eggplant +trophy +dates +board eraser +rice +tape measure/ruler +dumbbell +hamimelon +stapler +camel +lettuce +goldfish +meat balls +medal +toothpaste +antelope +shrimp +rickshaw +trombone +pomegranate +coconut +jellyfish +mushroom +calculator +treadmill +butterfly +egg tart +cheese +pig +pomelo +race car +rice cooker +tuba +crosswalk sign +papaya +hair drier +green onion +chips +dolphin +sushi +urinal +donkey +electric drill +spring rolls +tortoise/turtle +parrot +flute +measuring cup +shark +steak +poker card +binoculars +llama +radish +noodles +yak +mop +crab +microscope +barbell +bread/bun +baozi +lion +red cabbage +polar bear +lighter +seal +mangosteen +comb +eraser +pitaya +scallop +pencil case +saw +table tennis paddle +okra +starfish +eagle +monkey +durian +game board +rabbit +french horn +ambulance +asparagus +hoverboard +pasta +target +hotair balloon +chainsaw +lobster +iron +flashlight diff --git a/scenic/dataset_lib/coco_dataset/data/open_images_v4-classes.csv b/scenic/dataset_lib/coco_dataset/data/open_images_v4-classes.csv new file mode 100644 index 0000000000000000000000000000000000000000..51581d4e3462e4ed955febd884d545817ed79826 --- /dev/null +++ b/scenic/dataset_lib/coco_dataset/data/open_images_v4-classes.csv @@ -0,0 +1,601 @@ +/m/011k07,Tortoise +/m/011q46kg,Container +/m/012074,Magpie +/m/0120dh,Sea turtle +/m/01226z,Football +/m/012n7d,Ambulance +/m/012w5l,Ladder +/m/012xff,Toothbrush +/m/012ysf,Syringe +/m/0130jx,Sink +/m/0138tl,Toy +/m/013y1f,Organ +/m/01432t,Cassette deck +/m/014j1m,Apple +/m/014sv8,Human eye +/m/014trl,Cosmetics +/m/014y4n,Paddle +/m/0152hh,Snowman +/m/01599,Beer +/m/01_5g,Chopsticks +/m/015h_t,Human beard +/m/015p6,Bird +/m/015qbp,Parking meter +/m/015qff,Traffic light +/m/015wgc,Croissant +/m/015x4r,Cucumber +/m/015x5n,Radish +/m/0162_1,Towel +/m/0167gd,Doll +/m/016m2d,Skull +/m/0174k2,Washing machine +/m/0174n1,Glove +/m/0175cv,Tick +/m/0176mf,Belt +/m/017ftj,Sunglasses +/m/018j2,Banjo +/m/018p4k,Cart +/m/018xm,Ball +/m/01940j,Backpack +/m/0199g,Bicycle +/m/019dx1,Home appliance +/m/019h78,Centipede +/m/019jd,Boat +/m/019w40,Surfboard +/m/01b638,Boot +/m/01b7fy,Headphones +/m/01b9xk,Hot dog +/m/01bfm9,Shorts +/m/01_bhs,Fast food +/m/01bjv,Bus +/m/01bl7v,Boy +/m/01bms0,Screwdriver +/m/01bqk0,Bicycle wheel +/m/01btn,Barge +/m/01c648,Laptop +/m/01cmb2,Miniskirt +/m/01d380,Drill +/m/01d40f,Dress +/m/01dws,Bear +/m/01dwsz,Waffle +/m/01dwwc,Pancake +/m/01dxs,Brown bear +/m/01dy8n,Woodpecker +/m/01f8m5,Blue jay +/m/01f91_,Pretzel +/m/01fb_0,Bagel +/m/01fdzj,Tower +/m/01fh4r,Teapot +/m/01g317,Person +/m/01g3x7,Bow and arrow +/m/01gkx_,Swimwear +/m/01gllr,Beehive +/m/01gmv2,Brassiere +/m/01h3n,Bee +/m/01h44,Bat +/m/01h8tj,Starfish +/m/01hrv5,Popcorn +/m/01j3zr,Burrito +/m/01j4z9,Chainsaw +/m/01j51,Balloon +/m/01j5ks,Wrench +/m/01j61q,Tent +/m/01jfm_,Vehicle registration plate +/m/01jfsr,Lantern +/m/01k6s3,Toaster +/m/01kb5b,Flashlight +/m/01knjb,Billboard +/m/01krhy,Tiara +/m/01lcw4,Limousine +/m/01llwg,Necklace +/m/01lrl,Carnivore +/m/01lsmm,Scissors +/m/01lynh,Stairs +/m/01m2v,Computer keyboard +/m/01m4t,Printer +/m/01mqdt,Traffic sign +/m/01mzpv,Chair +/m/01n4qj,Shirt +/m/01n5jq,Poster +/m/01nkt,Cheese +/m/01nq26,Sock +/m/01pns0,Fire hydrant +/m/01prls,Land vehicle +/m/01r546,Earrings +/m/01rkbr,Tie +/m/01rzcn,Watercraft +/m/01s105,Cabinetry +/m/01s55n,Suitcase +/m/01tcjp,Muffin +/m/01vbnl,Bidet +/m/01ww8y,Snack +/m/01x3jk,Snowmobile +/m/01x3z,Clock +/m/01xgg_,Medical equipment +/m/01xq0k1,Cattle +/m/01xqw,Cello +/m/01xs3r,Jet ski +/m/01x_v,Camel +/m/01xygc,Coat +/m/01xyhv,Suit +/m/01y9k5,Desk +/m/01yrx,Cat +/m/01yx86,Bronze sculpture +/m/01z1kdw,Juice +/m/02068x,Gondola +/m/020jm,Beetle +/m/020kz,Cannon +/m/020lf,Computer mouse +/m/021mn,Cookie +/m/021sj1,Office building +/m/0220r2,Fountain +/m/0242l,Coin +/m/024d2,Calculator +/m/024g6,Cocktail +/m/02522,Computer monitor +/m/025dyy,Box +/m/025fsf,Stapler +/m/025nd,Christmas tree +/m/025rp__,Cowboy hat +/m/0268lbt,Hiking equipment +/m/026qbn5,Studio couch +/m/026t6,Drum +/m/0270h,Dessert +/m/0271qf7,Wine rack +/m/0271t,Drink +/m/027pcv,Zucchini +/m/027rl48,Ladle +/m/0283dt1,Human mouth +/m/0284d,Dairy +/m/029b3,Dice +/m/029bxz,Oven +/m/029tx,Dinosaur +/m/02bm9n,Ratchet +/m/02crq1,Couch +/m/02ctlc,Cricket ball +/m/02cvgx,Winter melon +/m/02d1br,Spatula +/m/02d9qx,Whiteboard +/m/02ddwp,Pencil sharpener +/m/02dgv,Door +/m/02dl1y,Hat +/m/02f9f_,Shower +/m/02fh7f,Eraser +/m/02fq_6,Fedora +/m/02g30s,Guacamole +/m/02gzp,Dagger +/m/02h19r,Scarf +/m/02hj4,Dolphin +/m/02jfl0,Sombrero +/m/02jnhm,Tin can +/m/02jvh9,Mug +/m/02jz0l,Tap +/m/02l8p9,Harbor seal +/m/02lbcq,Stretcher +/m/02mqfb,Can opener +/m/02_n6y,Goggles +/m/02p0tk3,Human body +/m/02p3w7d,Roller skates +/m/02p5f1q,Coffee cup +/m/02pdsw,Cutting board +/m/02pjr4,Blender +/m/02pkr5,Plumbing fixture +/m/02pv19,Stop sign +/m/02rdsp,Office supplies +/m/02rgn06,Volleyball +/m/02s195,Vase +/m/02tsc9,Slow cooker +/m/02vkqh8,Wardrobe +/m/02vqfm,Coffee +/m/02vwcm,Whisk +/m/02w3r3,Paper towel +/m/02w3_ws,Personal care +/m/02wbm,Food +/m/02wbtzl,Sun hat +/m/02wg_p,Tree house +/m/02wmf,Flying disc +/m/02wv6h6,Skirt +/m/02wv84t,Gas stove +/m/02x8cch,Salt and pepper shakers +/m/02x984l,Mechanical fan +/m/02xb7qb,Face powder +/m/02xqq,Fax +/m/02xwb,Fruit +/m/02y6n,French fries +/m/02z51p,Nightstand +/m/02zn6n,Barrel +/m/02zt3,Kite +/m/02zvsm,Tart +/m/030610,Treadmill +/m/0306r,Fox +/m/03120,Flag +/m/0319l,Horn +/m/031b6r,Window blind +/m/031n1,Human foot +/m/0323sq,Golf cart +/m/032b3c,Jacket +/m/033cnk,Egg +/m/033rq4,Street light +/m/0342h,Guitar +/m/034c16,Pillow +/m/035r7c,Human leg +/m/035vxb,Isopod +/m/0388q,Grape +/m/039xj_,Human ear +/m/03bbps,Power plugs and sockets +/m/03bj1,Panda +/m/03bk1,Giraffe +/m/03bt1vf,Woman +/m/03c7gz,Door handle +/m/03d443,Rhinoceros +/m/03dnzn,Bathtub +/m/03fj2,Goldfish +/m/03fp41,Houseplant +/m/03fwl,Goat +/m/03g8mr,Baseball bat +/m/03grzl,Baseball glove +/m/03hj559,Mixing bowl +/m/03hl4l9,Marine invertebrates +/m/03hlz0c,Kitchen utensil +/m/03jbxj,Light switch +/m/03jm5,House +/m/03k3r,Horse +/m/03kt2w,Stationary bicycle +/m/03l9g,Hammer +/m/03ldnb,Ceiling fan +/m/03m3pdh,Sofa bed +/m/03m3vtv,Adhesive tape +/m/03m5k,Harp +/m/03nfch,Sandal +/m/03p3bw,Bicycle helmet +/m/03q5c7,Saucer +/m/03q5t,Harpsichord +/m/03q69,Human hair +/m/03qhv5,Heater +/m/03qjg,Harmonica +/m/03qrc,Hamster +/m/03rszm,Curtain +/m/03ssj5,Bed +/m/03s_tn,Kettle +/m/03tw93,Fireplace +/m/03txqz,Scale +/m/03v5tg,Drinking straw +/m/03vt0,Insect +/m/03wvsk,Hair dryer +/m/03_wxk,Kitchenware +/m/03wym,Indoor rower +/m/03xxp,Invertebrate +/m/03y6mg,Food processor +/m/03__z0,Bookcase +/m/040b_t,Refrigerator +/m/04169hn,Wood-burning stove +/m/0420v5,Punching bag +/m/043nyj,Common fig +/m/0440zs,Cocktail shaker +/m/0449p,Jaguar +/m/044r5d,Golf ball +/m/0463sg,Fashion accessory +/m/046dlr,Alarm clock +/m/047j0r,Filing cabinet +/m/047v4b,Artichoke +/m/04bcr3,Table +/m/04brg2,Tableware +/m/04c0y,Kangaroo +/m/04cp_,Koala +/m/04ctx,Knife +/m/04dr76w,Bottle +/m/04f5ws,Bottle opener +/m/04g2r,Lynx +/m/04gth,Lavender +/m/04h7h,Lighthouse +/m/04h8sr,Dumbbell +/m/04hgtk,Human head +/m/04kkgm,Bowl +/m/04lvq_,Humidifier +/m/04m6gz,Porch +/m/04m9y,Lizard +/m/04p0qw,Billiard table +/m/04rky,Mammal +/m/04rmv,Mouse +/m/04_sv,Motorcycle +/m/04szw,Musical instrument +/m/04tn4x,Swim cap +/m/04v6l4,Frying pan +/m/04vv5k,Snowplow +/m/04y4h8h,Bathroom cabinet +/m/04ylt,Missile +/m/04yqq2,Bust +/m/04yx4,Man +/m/04z4wx,Waffle iron +/m/04zpv,Milk +/m/04zwwv,Ring binder +/m/050gv4,Plate +/m/050k8,Mobile phone +/m/052lwg6,Baked goods +/m/052sf,Mushroom +/m/05441v,Crutch +/m/054fyh,Pitcher +/m/054_l,Mirror +/m/054xkw,Lifejacket +/m/05_5p_0,Table tennis racket +/m/05676x,Pencil case +/m/057cc,Musical keyboard +/m/057p5t,Scoreboard +/m/0584n8,Briefcase +/m/058qzx,Kitchen knife +/m/05bm6,Nail +/m/05ctyq,Tennis ball +/m/05gqfk,Plastic bag +/m/05kms,Oboe +/m/05kyg_,Chest of drawers +/m/05n4y,Ostrich +/m/05r5c,Piano +/m/05r655,Girl +/m/05s2s,Plant +/m/05vtc,Potato +/m/05w9t9,Hair spray +/m/05y5lj,Sports equipment +/m/05z55,Pasta +/m/05z6w,Penguin +/m/05zsy,Pumpkin +/m/061_f,Pear +/m/061hd_,Infant bed +/m/0633h,Polar bear +/m/063rgb,Mixer +/m/0642b4,Cupboard +/m/065h6l,Jacuzzi +/m/0663v,Pizza +/m/06_72j,Digital clock +/m/068zj,Pig +/m/06bt6,Reptile +/m/06c54,Rifle +/m/06c7f7,Lipstick +/m/06_fw,Skateboard +/m/06j2d,Raven +/m/06k2mb,High heels +/m/06l9r,Red panda +/m/06m11,Rose +/m/06mf6,Rabbit +/m/06msq,Sculpture +/m/06ncr,Saxophone +/m/06nrc,Shotgun +/m/06nwz,Seafood +/m/06pcq,Submarine sandwich +/m/06__v,Snowboard +/m/06y5r,Sword +/m/06z37_,Picture frame +/m/07030,Sushi +/m/0703r8,Loveseat +/m/071p9,Ski +/m/071qp,Squirrel +/m/073bxn,Tripod +/m/073g6,Stethoscope +/m/074d1,Submarine +/m/0755b,Scorpion +/m/076bq,Segway +/m/076lb9,Training bench +/m/078jl,Snake +/m/078n6m,Coffee table +/m/079cl,Skyscraper +/m/07bgp,Sheep +/m/07c52,Television +/m/07c6l,Trombone +/m/07clx,Tea +/m/07cmd,Tank +/m/07crc,Taco +/m/07cx4,Telephone +/m/07dd4,Torch +/m/07dm6,Tiger +/m/07fbm7,Strawberry +/m/07gql,Trumpet +/m/07j7r,Tree +/m/07j87,Tomato +/m/07jdr,Train +/m/07k1x,Tool +/m/07kng9,Picnic basket +/m/07mcwg,Cooking spray +/m/07mhn,Trousers +/m/07pj7bq,Bowling equipment +/m/07qxg_,Football helmet +/m/07r04,Truck +/m/07v9_z,Measuring cup +/m/07xyvk,Coffeemaker +/m/07y_7,Violin +/m/07yv9,Vehicle +/m/080hkjn,Handbag +/m/080n7g,Paper cutter +/m/081qc,Wine +/m/083kb,Weapon +/m/083wq,Wheel +/m/084hf,Worm +/m/084rd,Wok +/m/084zz,Whale +/m/0898b,Zebra +/m/08dz3q,Auto part +/m/08hvt4,Jug +/m/08ks85,Pizza cutter +/m/08p92x,Cream +/m/08pbxl,Monkey +/m/096mb,Lion +/m/09728,Bread +/m/099ssp,Platter +/m/09b5t,Chicken +/m/09csl,Eagle +/m/09ct_,Helicopter +/m/09d5_,Owl +/m/09ddx,Duck +/m/09dzg,Turtle +/m/09f20,Hippopotamus +/m/09f_2,Crocodile +/m/09g1w,Toilet +/m/09gtd,Toilet paper +/m/09gys,Squid +/m/09j2d,Clothing +/m/09j5n,Footwear +/m/09k_b,Lemon +/m/09kmb,Spider +/m/09kx5,Deer +/m/09ld4,Frog +/m/09qck,Banana +/m/09rvcxw,Rocket +/m/09tvcd,Wine glass +/m/0b3fp9,Countertop +/m/0bh9flk,Tablet computer +/m/0bjyj5,Waste container +/m/0b_rs,Swimming pool +/m/0bt9lr,Dog +/m/0bt_c3,Book +/m/0bwd_0j,Elephant +/m/0by6g,Shark +/m/0c06p,Candle +/m/0c29q,Leopard +/m/0c2jj,Axe +/m/0c3m8g,Hand dryer +/m/0c3mkw,Soap dispenser +/m/0c568,Porcupine +/m/0c9ph5,Flower +/m/0ccs93,Canary +/m/0cd4d,Cheetah +/m/0cdl1,Palm tree +/m/0cdn1,Hamburger +/m/0cffdh,Maple +/m/0cgh4,Building +/m/0ch_cf,Fish +/m/0cjq5,Lobster +/m/0cjs7,Asparagus +/m/0c_jw,Furniture +/m/0cl4p,Hedgehog +/m/0cmf2,Airplane +/m/0cmx8,Spoon +/m/0cn6p,Otter +/m/0cnyhnx,Bull +/m/0_cp5,Oyster +/m/0cqn2,Horizontal bar +/m/0crjs,Convenience store +/m/0ct4f,Bomb +/m/0cvnqh,Bench +/m/0cxn2,Ice cream +/m/0cydv,Caterpillar +/m/0cyf8,Butterfly +/m/0cyfs,Parachute +/m/0cyhj_,Orange +/m/0czz2,Antelope +/m/0d20w4,Beaker +/m/0d_2m,Moths and butterflies +/m/0d4v4,Window +/m/0d4w1,Closet +/m/0d5gx,Castle +/m/0d8zb,Jellyfish +/m/0dbvp,Goose +/m/0dbzx,Mule +/m/0dftk,Swan +/m/0dj6p,Peach +/m/0djtd,Coconut +/m/0dkzw,Seat belt +/m/0dq75,Raccoon +/m/0_dqb,Chisel +/m/0dt3t,Fork +/m/0dtln,Lamp +/m/0dv5r,Camera +/m/0dv77,Squash +/m/0dv9c,Racket +/m/0dzct,Human face +/m/0dzf4,Human arm +/m/0f4s2w,Vegetable +/m/0f571,Diaper +/m/0f6nr,Unicycle +/m/0f6wt,Falcon +/m/0f8s22,Chime +/m/0f9_l,Snail +/m/0fbdv,Shellfish +/m/0fbw6,Cabbage +/m/0fj52s,Carrot +/m/0fldg,Mango +/m/0fly7,Jeans +/m/0fm3zh,Flowerpot +/m/0fp6w,Pineapple +/m/0fqfqc,Drawer +/m/0fqt361,Stool +/m/0frqm,Envelope +/m/0fszt,Cake +/m/0ft9s,Dragonfly +/m/0ftb8,Sunflower +/m/0fx9l,Microwave oven +/m/0fz0h,Honeycomb +/m/0gd2v,Marine mammal +/m/0gd36,Sea lion +/m/0gj37,Ladybug +/m/0gjbg72,Shelf +/m/0gjkl,Watch +/m/0gm28,Candy +/m/0grw1,Salad +/m/0gv1x,Parrot +/m/0gxl3,Handgun +/m/0h23m,Sparrow +/m/0h2r6,Van +/m/0h8jyh6,Grinder +/m/0h8kx63,Spice rack +/m/0h8l4fh,Light bulb +/m/0h8lkj8,Corded phone +/m/0h8mhzd,Sports uniform +/m/0h8my_4,Tennis racket +/m/0h8mzrc,Wall clock +/m/0h8n27j,Serving tray +/m/0h8n5zk,Kitchen & dining room table +/m/0h8n6f9,Dog bed +/m/0h8n6ft,Cake stand +/m/0h8nm9j,Cat furniture +/m/0h8nr_l,Bathroom accessory +/m/0h8nsvg,Facial tissue holder +/m/0h8ntjv,Pressure cooker +/m/0h99cwc,Kitchen appliance +/m/0h9mv,Tire +/m/0hdln,Ruler +/m/0hf58v5,Luggage and bags +/m/0hg7b,Microphone +/m/0hkxq,Broccoli +/m/0hnnb,Umbrella +/m/0hnyx,Pastry +/m/0hqkz,Grapefruit +/m/0j496,Band-aid +/m/0jbk,Animal +/m/0jg57,Bell pepper +/m/0jly1,Turkey +/m/0jqgx,Lily +/m/0jwn_,Pomegranate +/m/0jy4k,Doughnut +/m/0jyfg,Glasses +/m/0k0pj,Human nose +/m/0k1tl,Pen +/m/0_k2,Ant +/m/0k4j,Car +/m/0k5j,Aircraft +/m/0k65p,Human hand +/m/0km7z,Skunk +/m/0kmg4,Teddy bear +/m/0kpqd,Watermelon +/m/0kpt_,Cantaloupe +/m/0ky7b,Dishwasher +/m/0l14j_,Flute +/m/0l3ms,Balance beam +/m/0l515,Sandwich +/m/0ll1f78,Shrimp +/m/0llzx,Sewing machine +/m/0lt4_,Binoculars +/m/0m53l,Rays and skates +/m/0mcx2,Ipod +/m/0mkg,Accordion +/m/0mw_6,Willow +/m/0n28_,Crab +/m/0nl46,Crown +/m/0nybt,Seahorse +/m/0p833,Perfume +/m/0pcr,Alpaca +/m/0pg52,Taxi +/m/0ph39,Canoe +/m/0qjjc,Remote control +/m/0qmmr,Wheelchair +/m/0wdt60w,Rugby ball +/m/0xfy,Armadillo +/m/0xzly,Maracas +/m/0zvk5,Helmet diff --git a/scenic/dataset_lib/coco_dataset/data/open_images_v5-classes-segmentation.csv b/scenic/dataset_lib/coco_dataset/data/open_images_v5-classes-segmentation.csv new file mode 100644 index 0000000000000000000000000000000000000000..337bb7c4b8bde50dfb3c2db00502df9ce8ac274a --- /dev/null +++ b/scenic/dataset_lib/coco_dataset/data/open_images_v5-classes-segmentation.csv @@ -0,0 +1,351 @@ +/m/01_5g,Chopsticks +/m/0c06p,Candle +/m/01lsmm,Scissors +/m/01bqk0,Bicycle wheel +/m/0l14j_,Flute +/m/0342h,Guitar +/m/09j2d,Clothing +/m/076bq,Segway +/m/01xqw,Cello +/m/01599,Beer +/m/0cjs7,Asparagus +/m/06y5r,Sword +/m/06ncr,Saxophone +/m/078jl,Snake +/m/0dkzw,Seat belt +/m/081qc,Wine +/m/04_sv,Motorcycle +/m/0ph39,Canoe +/m/03v5tg,Drinking straw +/m/06_fw,Skateboard +/m/01j5ks,Wrench +/m/03q5c7,Saucer +/m/03k3r,Horse +/m/05r5c,Piano +/m/02zt3,Kite +/m/06_72j,Digital clock +/m/06bt6,Reptile +/m/02gzp,Dagger +/m/019w40,Surfboard +/m/01g317,Person +/m/09qck,Banana +/m/0cmf2,Airplane +/m/0271t,Drink +/m/01dwsz,Waffle +/m/0dbzx,Mule +/m/03g8mr,Baseball bat +/m/0k5j,Aircraft +/m/04m9y,Lizard +/m/0cmx8,Spoon +/m/01x_v,Camel +/m/01xq0k1,Cattle +/m/0cn6p,Otter +/m/02f9f_,Shower +/m/01btn,Barge +/m/01xs3r,Jet ski +/m/0fm3zh,Flowerpot +/m/04ylt,Missile +/m/01gkx_,Swimwear +/m/04yx4,Man +/m/0h8n6f9,Dog bed +/m/0138tl,Toy +/m/05n4y,Ostrich +/m/01d40f,Dress +/m/015x5n,Radish +/m/06c7f7,Lipstick +/m/039xj_,Human ear +/m/0c2jj,Axe +/m/07dd4,Torch +/m/02jz0l,Tap +/m/083wq,Wheel +/m/03bk1,Giraffe +/m/04h7h,Lighthouse +/m/09rvcxw,Rocket +/m/0hf58v5,Luggage and bags +/m/05bm6,Nail +/m/01x3jk,Snowmobile +/m/07cmd,Tank +/m/0176mf,Belt +/m/0k1tl,Pen +/m/084zz,Whale +/m/02crq1,Couch +/m/0ch_cf,Fish +/m/03q5t,Harpsichord +/m/03bt1vf,Woman +/m/09f_2,Crocodile +/m/0_dqb,Chisel +/m/0l3ms,Balance beam +/m/02p0tk3,Human body +/m/01bms0,Screwdriver +/m/0ftb8,Sunflower +/m/029bxz,Oven +/m/024g6,Cocktail +/m/02hj4,Dolphin +/m/04p0qw,Billiard table +/m/06k2mb,High heels +/m/03bj1,Panda +/m/0km7z,Skunk +/m/068zj,Pig +/m/01xyhv,Suit +/m/01f91_,Pretzel +/m/01940j,Backpack +/m/01dwwc,Pancake +/m/06l9r,Red panda +/m/080n7g,Paper cutter +/m/0cnyhnx,Bull +/m/015qff,Traffic light +/m/079cl,Skyscraper +/m/01h44,Bat +/m/01yx86,Bronze sculpture +/m/04f5ws,Bottle opener +/m/0bwd_0j,Elephant +/m/02d1br,Spatula +/m/05r655,Girl +/m/025dyy,Box +/m/025nd,Christmas tree +/m/0bt_c3,Book +/m/0703r8,Loveseat +/m/0c9ph5,Flower +/m/0fj52s,Carrot +/m/04v6l4,Frying pan +/m/03wvsk,Hair dryer +/m/0283dt1,Human mouth +/m/09ddx,Duck +/m/0jly1,Turkey +/m/08pbxl,Monkey +/m/07jdr,Train +/m/03fj2,Goldfish +/m/01s55n,Suitcase +/m/01bl7v,Boy +/m/058qzx,Kitchen knife +/m/0dv9c,Racket +/m/0jg57,Bell pepper +/m/01x3z,Clock +/m/04c0y,Kangaroo +/m/07r04,Truck +/m/015p6,Bird +/m/03jbxj,Light switch +/m/03fwl,Goat +/m/04dr76w,Bottle +/m/0pg52,Taxi +/m/0cd4d,Cheetah +/m/04cp_,Koala +/m/09b5t,Chicken +/m/06msq,Sculpture +/m/096mb,Lion +/m/0898b,Zebra +/m/03l9g,Hammer +/m/084rd,Wok +/m/02h19r,Scarf +/m/07dm6,Tiger +/m/05z6w,Penguin +/m/0c29q,Leopard +/m/0k4j,Car +/m/0fbw6,Cabbage +/m/0gv1x,Parrot +/m/0dv5r,Camera +/m/01f8m5,Blue jay +/m/0dbvp,Goose +/m/04h8sr,Dumbbell +/m/01lcw4,Limousine +/m/03m3vtv,Adhesive tape +/m/03120,Flag +/m/03c7gz,Door handle +/m/02vqfm,Coffee +/m/0h8lkj8,Corded phone +/m/046dlr,Alarm clock +/m/07clx,Tea +/m/0bjyj5,Waste container +/m/01lrl,Carnivore +/m/01h8tj,Starfish +/m/01d380,Drill +/m/02d9qx,Whiteboard +/m/03d443,Rhinoceros +/m/080hkjn,Handbag +/m/09f20,Hippopotamus +/m/0xzly,Maracas +/m/09ld4,Frog +/m/071qp,Squirrel +/m/03bbps,Power plugs and sockets +/m/0gxl3,Handgun +/m/0dftk,Swan +/m/0174k2,Washing machine +/m/0h8my_4,Tennis racket +/m/0by6g,Shark +/m/0ct4f,Bomb +/m/0449p,Jaguar +/m/0120dh,Sea turtle +/m/099ssp,Platter +/m/04zpv,Milk +/m/012074,Magpie +/m/027pcv,Zucchini +/m/0ccs93,Canary +/m/09dzg,Turtle +/m/0dq75,Raccoon +/m/01dy8n,Woodpecker +/m/0fszt,Cake +/m/01z1kdw,Juice +/m/02zvsm,Tart +/m/034c16,Pillow +/m/05w9t9,Hair spray +/m/0bt9lr,Dog +/m/02g30s,Guacamole +/m/052sf,Mushroom +/m/01m2v,Computer keyboard +/m/04ctx,Knife +/m/02p3w7d,Roller skates +/m/01rkbr,Tie +/m/03y6mg,Food processor +/m/027rl48,Ladle +/m/01kb5b,Flashlight +/m/06mf6,Rabbit +/m/07fbm7,Strawberry +/m/05gqfk,Plastic bag +/m/016m2d,Skull +/m/05676x,Pencil case +/m/03s_tn,Kettle +/m/0h8nsvg,Facial tissue holder +/m/0hnyx,Pastry +/m/047j0r,Filing cabinet +/m/07bgp,Sheep +/m/08ks85,Pizza cutter +/m/03m3pdh,Sofa bed +/m/0d20w4,Beaker +/m/01tcjp,Muffin +/m/0h23m,Sparrow +/m/0663v,Pizza +/m/0lt4_,Binoculars +/m/0fly7,Jeans +/m/0xfy,Armadillo +/m/01hrv5,Popcorn +/m/04tn4x,Swim cap +/m/01nkt,Cheese +/m/0306r,Fox +/m/0wdt60w,Rugby ball +/m/07mhn,Trousers +/m/01bjv,Bus +/m/09g1w,Toilet +/m/015x4r,Cucumber +/m/0hkxq,Broccoli +/m/02zn6n,Barrel +/m/04g2r,Lynx +/m/0kmg4,Teddy bear +/m/015wgc,Croissant +/m/02dl1y,Hat +/m/03grzl,Baseball glove +/m/09csl,Eagle +/m/0420v5,Punching bag +/m/09728,Bread +/m/05zsy,Pumpkin +/m/02l8p9,Harbor seal +/m/05_5p_0,Table tennis racket +/m/02wbtzl,Sun hat +/m/0388q,Grape +/m/07j87,Tomato +/m/0584n8,Briefcase +/m/0frqm,Envelope +/m/01yrx,Cat +/m/01jfm_,Vehicle registration plate +/m/011k07,Tortoise +/m/0pcr,Alpaca +/m/02fh7f,Eraser +/m/03qrc,Hamster +/m/02w3r3,Paper towel +/m/0f571,Diaper +/m/01b638,Boot +/m/01k6s3,Toaster +/m/04rmv,Mouse +/m/02s195,Vase +/m/01nq26,Sock +/m/0cyhj_,Orange +/m/0dv77,Squash +/m/0f6wt,Falcon +/m/01n4qj,Shirt +/m/0cl4p,Hedgehog +/m/09k_b,Lemon +/m/0h2r6,Van +/m/01fh4r,Teapot +/m/01dws,Bear +/m/026qbn5,Studio couch +/m/03qjg,Harmonica +/m/09gtd,Toilet paper +/m/0174n1,Glove +/m/0162_1,Towel +/m/0gd36,Sea lion +/m/01dxs,Brown bear +/m/012n7d,Ambulance +/m/03qhv5,Heater +/m/0jwn_,Pomegranate +/m/061_f,Pear +/m/0fx9l,Microwave oven +/m/02fq_6,Fedora +/m/09d5_,Owl +/m/02jfl0,Sombrero +/m/06j2d,Raven +/m/0l515,Sandwich +/m/02tsc9,Slow cooker +/m/06m11,Rose +/m/025rp__,Cowboy hat +/m/01m4t,Printer +/m/0hdln,Ruler +/m/047v4b,Artichoke +/m/01j51,Balloon +/m/01fb_0,Bagel +/m/01j3zr,Burrito +/m/0440zs,Cocktail shaker +/m/0633h,Polar bear +/m/07v9_z,Measuring cup +/m/08hvt4,Jug +/m/0dj6p,Peach +/m/05vtc,Potato +/m/0gjkl,Watch +/m/04kkgm,Bowl +/m/0bh9flk,Tablet computer +/m/01c648,Laptop +/m/02ctlc,Cricket ball +/m/06pcq,Submarine sandwich +/m/01pns0,Fire hydrant +/m/0c3mkw,Soap dispenser +/m/05kyg_,Chest of drawers +/m/0h8ntjv,Pressure cooker +/m/054fyh,Pitcher +/m/01bfm9,Shorts +/m/0hqkz,Grapefruit +/m/0_cp5,Oyster +/m/0cdn1,Hamburger +/m/02wmf,Flying disc +/m/03hj559,Mixing bowl +/m/02jvh9,Mug +/m/0242l,Coin +/m/018xm,Ball +/m/025fsf,Stapler +/m/043nyj,Common fig +/m/04yqq2,Bust +/m/02wv6h6,Skirt +/m/021mn,Cookie +/m/0kpqd,Watermelon +/m/02rgn06,Volleyball +/m/050k8,Mobile phone +/m/05ctyq,Tennis ball +/m/06z37_,Picture frame +/m/02p5f1q,Coffee cup +/m/0kpt_,Cantaloupe +/m/02cvgx,Winter melon +/m/01cmb2,Miniskirt +/m/07mcwg,Cooking spray +/m/0qjjc,Remote control +/m/0mcx2,Ipod +/m/020lf,Computer mouse +/m/01mqdt,Traffic sign +/m/01b9xk,Hot dog +/m/0fldg,Mango +/m/029b3,Dice +/m/024d2,Calculator +/m/0j496,Band-aid +/m/0jy4k,Doughnut +/m/01226z,Football +/m/014j1m,Apple +/m/0c3m8g,Hand dryer +/m/044r5d,Golf ball +/m/02pv19,Stop sign +/m/011k07,Tortoise diff --git a/scenic/dataset_lib/coco_dataset/data/open_images_v5-classes.csv b/scenic/dataset_lib/coco_dataset/data/open_images_v5-classes.csv new file mode 100644 index 0000000000000000000000000000000000000000..9f634a5a56350db062cd8ed9601bd146f9a61e84 --- /dev/null +++ b/scenic/dataset_lib/coco_dataset/data/open_images_v5-classes.csv @@ -0,0 +1,601 @@ +/m/011k07,Tortoise +/m/011q46kg,Container +/m/012074,Magpie +/m/0120dh,Sea turtle +/m/01226z,Football +/m/012n7d,Ambulance +/m/012w5l,Ladder +/m/012xff,Toothbrush +/m/012ysf,Syringe +/m/0130jx,Sink +/m/0138tl,Toy +/m/013y1f,Organ (Musical Instrument) +/m/01432t,Cassette deck +/m/014j1m,Apple +/m/014sv8,Human eye +/m/014trl,Cosmetics +/m/014y4n,Paddle +/m/0152hh,Snowman +/m/01599,Beer +/m/01_5g,Chopsticks +/m/015h_t,Human beard +/m/015p6,Bird +/m/015qbp,Parking meter +/m/015qff,Traffic light +/m/015wgc,Croissant +/m/015x4r,Cucumber +/m/015x5n,Radish +/m/0162_1,Towel +/m/0167gd,Doll +/m/016m2d,Skull +/m/0174k2,Washing machine +/m/0174n1,Glove +/m/0175cv,Tick +/m/0176mf,Belt +/m/017ftj,Sunglasses +/m/018j2,Banjo +/m/018p4k,Cart +/m/018xm,Ball +/m/01940j,Backpack +/m/0199g,Bicycle +/m/019dx1,Home appliance +/m/019h78,Centipede +/m/019jd,Boat +/m/019w40,Surfboard +/m/01b638,Boot +/m/01b7fy,Headphones +/m/01b9xk,Hot dog +/m/01bfm9,Shorts +/m/01_bhs,Fast food +/m/01bjv,Bus +/m/01bl7v,Boy +/m/01bms0,Screwdriver +/m/01bqk0,Bicycle wheel +/m/01btn,Barge +/m/01c648,Laptop +/m/01cmb2,Miniskirt +/m/01d380,Drill (Tool) +/m/01d40f,Dress +/m/01dws,Bear +/m/01dwsz,Waffle +/m/01dwwc,Pancake +/m/01dxs,Brown bear +/m/01dy8n,Woodpecker +/m/01f8m5,Blue jay +/m/01f91_,Pretzel +/m/01fb_0,Bagel +/m/01fdzj,Tower +/m/01fh4r,Teapot +/m/01g317,Person +/m/01g3x7,Bow and arrow +/m/01gkx_,Swimwear +/m/01gllr,Beehive +/m/01gmv2,Brassiere +/m/01h3n,Bee +/m/01h44,Bat (Animal) +/m/01h8tj,Starfish +/m/01hrv5,Popcorn +/m/01j3zr,Burrito +/m/01j4z9,Chainsaw +/m/01j51,Balloon +/m/01j5ks,Wrench +/m/01j61q,Tent +/m/01jfm_,Vehicle registration plate +/m/01jfsr,Lantern +/m/01k6s3,Toaster +/m/01kb5b,Flashlight +/m/01knjb,Billboard +/m/01krhy,Tiara +/m/01lcw4,Limousine +/m/01llwg,Necklace +/m/01lrl,Carnivore +/m/01lsmm,Scissors +/m/01lynh,Stairs +/m/01m2v,Computer keyboard +/m/01m4t,Printer +/m/01mqdt,Traffic sign +/m/01mzpv,Chair +/m/01n4qj,Shirt +/m/01n5jq,Poster +/m/01nkt,Cheese +/m/01nq26,Sock +/m/01pns0,Fire hydrant +/m/01prls,Land vehicle +/m/01r546,Earrings +/m/01rkbr,Tie +/m/01rzcn,Watercraft +/m/01s105,Cabinetry +/m/01s55n,Suitcase +/m/01tcjp,Muffin +/m/01vbnl,Bidet +/m/01ww8y,Snack +/m/01x3jk,Snowmobile +/m/01x3z,Clock +/m/01xgg_,Medical equipment +/m/01xq0k1,Cattle +/m/01xqw,Cello +/m/01xs3r,Jet ski +/m/01x_v,Camel +/m/01xygc,Coat +/m/01xyhv,Suit +/m/01y9k5,Desk +/m/01yrx,Cat +/m/01yx86,Bronze sculpture +/m/01z1kdw,Juice +/m/02068x,Gondola +/m/020jm,Beetle +/m/020kz,Cannon +/m/020lf,Computer mouse +/m/021mn,Cookie +/m/021sj1,Office building +/m/0220r2,Fountain +/m/0242l,Coin +/m/024d2,Calculator +/m/024g6,Cocktail +/m/02522,Computer monitor +/m/025dyy,Box +/m/025fsf,Stapler +/m/025nd,Christmas tree +/m/025rp__,Cowboy hat +/m/0268lbt,Hiking equipment +/m/026qbn5,Studio couch +/m/026t6,Drum +/m/0270h,Dessert +/m/0271qf7,Wine rack +/m/0271t,Drink +/m/027pcv,Zucchini +/m/027rl48,Ladle +/m/0283dt1,Human mouth +/m/0284d,Dairy Product +/m/029b3,Dice +/m/029bxz,Oven +/m/029tx,Dinosaur +/m/02bm9n,Ratchet (Device) +/m/02crq1,Couch +/m/02ctlc,Cricket ball +/m/02cvgx,Winter melon +/m/02d1br,Spatula +/m/02d9qx,Whiteboard +/m/02ddwp,Pencil sharpener +/m/02dgv,Door +/m/02dl1y,Hat +/m/02f9f_,Shower +/m/02fh7f,Eraser +/m/02fq_6,Fedora +/m/02g30s,Guacamole +/m/02gzp,Dagger +/m/02h19r,Scarf +/m/02hj4,Dolphin +/m/02jfl0,Sombrero +/m/02jnhm,Tin can +/m/02jvh9,Mug +/m/02jz0l,Tap +/m/02l8p9,Harbor seal +/m/02lbcq,Stretcher +/m/02mqfb,Can opener +/m/02_n6y,Goggles +/m/02p0tk3,Human body +/m/02p3w7d,Roller skates +/m/02p5f1q,Coffee cup +/m/02pdsw,Cutting board +/m/02pjr4,Blender +/m/02pkr5,Plumbing fixture +/m/02pv19,Stop sign +/m/02rdsp,Office supplies +/m/02rgn06,Volleyball (Ball) +/m/02s195,Vase +/m/02tsc9,Slow cooker +/m/02vkqh8,Wardrobe +/m/02vqfm,Coffee +/m/02vwcm,Whisk +/m/02w3r3,Paper towel +/m/02w3_ws,Personal care +/m/02wbm,Food +/m/02wbtzl,Sun hat +/m/02wg_p,Tree house +/m/02wmf,Flying disc +/m/02wv6h6,Skirt +/m/02wv84t,Gas stove +/m/02x8cch,Salt and pepper shakers +/m/02x984l,Mechanical fan +/m/02xb7qb,Face powder +/m/02xqq,Fax +/m/02xwb,Fruit +/m/02y6n,French fries +/m/02z51p,Nightstand +/m/02zn6n,Barrel +/m/02zt3,Kite +/m/02zvsm,Tart +/m/030610,Treadmill +/m/0306r,Fox +/m/03120,Flag +/m/0319l,French horn +/m/031b6r,Window blind +/m/031n1,Human foot +/m/0323sq,Golf cart +/m/032b3c,Jacket +/m/033cnk,Egg (Food) +/m/033rq4,Street light +/m/0342h,Guitar +/m/034c16,Pillow +/m/035r7c,Human leg +/m/035vxb,Isopod +/m/0388q,Grape +/m/039xj_,Human ear +/m/03bbps,Power plugs and sockets +/m/03bj1,Panda +/m/03bk1,Giraffe +/m/03bt1vf,Woman +/m/03c7gz,Door handle +/m/03d443,Rhinoceros +/m/03dnzn,Bathtub +/m/03fj2,Goldfish +/m/03fp41,Houseplant +/m/03fwl,Goat +/m/03g8mr,Baseball bat +/m/03grzl,Baseball glove +/m/03hj559,Mixing bowl +/m/03hl4l9,Marine invertebrates +/m/03hlz0c,Kitchen utensil +/m/03jbxj,Light switch +/m/03jm5,House +/m/03k3r,Horse +/m/03kt2w,Stationary bicycle +/m/03l9g,Hammer +/m/03ldnb,Ceiling fan +/m/03m3pdh,Sofa bed +/m/03m3vtv,Adhesive tape +/m/03m5k,Harp +/m/03nfch,Sandal +/m/03p3bw,Bicycle helmet +/m/03q5c7,Saucer +/m/03q5t,Harpsichord +/m/03q69,Human hair +/m/03qhv5,Heater +/m/03qjg,Harmonica +/m/03qrc,Hamster +/m/03rszm,Curtain +/m/03ssj5,Bed +/m/03s_tn,Kettle +/m/03tw93,Fireplace +/m/03txqz,Scale +/m/03v5tg,Drinking straw +/m/03vt0,Insect +/m/03wvsk,Hair dryer +/m/03_wxk,Kitchenware +/m/03wym,Indoor rower +/m/03xxp,Invertebrate +/m/03y6mg,Food processor +/m/03__z0,Bookcase +/m/040b_t,Refrigerator +/m/04169hn,Wood-burning stove +/m/0420v5,Punching bag +/m/043nyj,Common fig +/m/0440zs,Cocktail shaker +/m/0449p,Jaguar (Animal) +/m/044r5d,Golf ball +/m/0463sg,Fashion accessory +/m/046dlr,Alarm clock +/m/047j0r,Filing cabinet +/m/047v4b,Artichoke +/m/04bcr3,Table +/m/04brg2,Tableware +/m/04c0y,Kangaroo +/m/04cp_,Koala +/m/04ctx,Knife +/m/04dr76w,Bottle +/m/04f5ws,Bottle opener +/m/04g2r,Lynx +/m/04gth,Lavender (Plant) +/m/04h7h,Lighthouse +/m/04h8sr,Dumbbell +/m/04hgtk,Human head +/m/04kkgm,Bowl +/m/04lvq_,Humidifier +/m/04m6gz,Porch +/m/04m9y,Lizard +/m/04p0qw,Billiard table +/m/04rky,Mammal +/m/04rmv,Mouse +/m/04_sv,Motorcycle +/m/04szw,Musical instrument +/m/04tn4x,Swim cap +/m/04v6l4,Frying pan +/m/04vv5k,Snowplow +/m/04y4h8h,Bathroom cabinet +/m/04ylt,Missile +/m/04yqq2,Bust +/m/04yx4,Man +/m/04z4wx,Waffle iron +/m/04zpv,Milk +/m/04zwwv,Ring binder +/m/050gv4,Plate +/m/050k8,Mobile phone +/m/052lwg6,Baked goods +/m/052sf,Mushroom +/m/05441v,Crutch +/m/054fyh,Pitcher (Container) +/m/054_l,Mirror +/m/054xkw,Personal flotation device +/m/05_5p_0,Table tennis racket +/m/05676x,Pencil case +/m/057cc,Musical keyboard +/m/057p5t,Scoreboard +/m/0584n8,Briefcase +/m/058qzx,Kitchen knife +/m/05bm6,Nail (Construction) +/m/05ctyq,Tennis ball +/m/05gqfk,Plastic bag +/m/05kms,Oboe +/m/05kyg_,Chest of drawers +/m/05n4y,Ostrich +/m/05r5c,Piano +/m/05r655,Girl +/m/05s2s,Plant +/m/05vtc,Potato +/m/05w9t9,Hair spray +/m/05y5lj,Sports equipment +/m/05z55,Pasta +/m/05z6w,Penguin +/m/05zsy,Pumpkin +/m/061_f,Pear +/m/061hd_,Infant bed +/m/0633h,Polar bear +/m/063rgb,Mixer +/m/0642b4,Cupboard +/m/065h6l,Jacuzzi +/m/0663v,Pizza +/m/06_72j,Digital clock +/m/068zj,Pig +/m/06bt6,Reptile +/m/06c54,Rifle +/m/06c7f7,Lipstick +/m/06_fw,Skateboard +/m/06j2d,Raven +/m/06k2mb,High heels +/m/06l9r,Red panda +/m/06m11,Rose +/m/06mf6,Rabbit +/m/06msq,Sculpture +/m/06ncr,Saxophone +/m/06nrc,Shotgun +/m/06nwz,Seafood +/m/06pcq,Submarine sandwich +/m/06__v,Snowboard +/m/06y5r,Sword +/m/06z37_,Picture frame +/m/07030,Sushi +/m/0703r8,Loveseat +/m/071p9,Ski +/m/071qp,Squirrel +/m/073bxn,Tripod +/m/073g6,Stethoscope +/m/074d1,Submarine +/m/0755b,Scorpion +/m/076bq,Segway +/m/076lb9,Training bench +/m/078jl,Snake +/m/078n6m,Coffee table +/m/079cl,Skyscraper +/m/07bgp,Sheep +/m/07c52,Television +/m/07c6l,Trombone +/m/07clx,Tea +/m/07cmd,Tank +/m/07crc,Taco +/m/07cx4,Telephone +/m/07dd4,Torch +/m/07dm6,Tiger +/m/07fbm7,Strawberry +/m/07gql,Trumpet +/m/07j7r,Tree +/m/07j87,Tomato +/m/07jdr,Train +/m/07k1x,Tool +/m/07kng9,Picnic basket +/m/07mcwg,Cooking spray +/m/07mhn,Trousers +/m/07pj7bq,Bowling equipment +/m/07qxg_,Football helmet +/m/07r04,Truck +/m/07v9_z,Measuring cup +/m/07xyvk,Coffeemaker +/m/07y_7,Violin +/m/07yv9,Vehicle +/m/080hkjn,Handbag +/m/080n7g,Paper cutter +/m/081qc,Wine +/m/083kb,Weapon +/m/083wq,Wheel +/m/084hf,Worm +/m/084rd,Wok +/m/084zz,Whale +/m/0898b,Zebra +/m/08dz3q,Auto part +/m/08hvt4,Jug +/m/08ks85,Pizza cutter +/m/08p92x,Cream +/m/08pbxl,Monkey +/m/096mb,Lion +/m/09728,Bread +/m/099ssp,Platter +/m/09b5t,Chicken +/m/09csl,Eagle +/m/09ct_,Helicopter +/m/09d5_,Owl +/m/09ddx,Duck +/m/09dzg,Turtle +/m/09f20,Hippopotamus +/m/09f_2,Crocodile +/m/09g1w,Toilet +/m/09gtd,Toilet paper +/m/09gys,Squid +/m/09j2d,Clothing +/m/09j5n,Footwear +/m/09k_b,Lemon +/m/09kmb,Spider +/m/09kx5,Deer +/m/09ld4,Frog +/m/09qck,Banana +/m/09rvcxw,Rocket +/m/09tvcd,Wine glass +/m/0b3fp9,Countertop +/m/0bh9flk,Tablet computer +/m/0bjyj5,Waste container +/m/0b_rs,Swimming pool +/m/0bt9lr,Dog +/m/0bt_c3,Book +/m/0bwd_0j,Elephant +/m/0by6g,Shark +/m/0c06p,Candle +/m/0c29q,Leopard +/m/0c2jj,Axe +/m/0c3m8g,Hand dryer +/m/0c3mkw,Soap dispenser +/m/0c568,Porcupine +/m/0c9ph5,Flower +/m/0ccs93,Canary +/m/0cd4d,Cheetah +/m/0cdl1,Palm tree +/m/0cdn1,Hamburger +/m/0cffdh,Maple +/m/0cgh4,Building +/m/0ch_cf,Fish +/m/0cjq5,Lobster +/m/0cjs7,Garden Asparagus +/m/0c_jw,Furniture +/m/0cl4p,Hedgehog +/m/0cmf2,Airplane +/m/0cmx8,Spoon +/m/0cn6p,Otter +/m/0cnyhnx,Bull +/m/0_cp5,Oyster +/m/0cqn2,Horizontal bar +/m/0crjs,Convenience store +/m/0ct4f,Bomb +/m/0cvnqh,Bench +/m/0cxn2,Ice cream +/m/0cydv,Caterpillar +/m/0cyf8,Butterfly +/m/0cyfs,Parachute +/m/0cyhj_,Orange +/m/0czz2,Antelope +/m/0d20w4,Beaker +/m/0d_2m,Moths and butterflies +/m/0d4v4,Window +/m/0d4w1,Closet +/m/0d5gx,Castle +/m/0d8zb,Jellyfish +/m/0dbvp,Goose +/m/0dbzx,Mule +/m/0dftk,Swan +/m/0dj6p,Peach +/m/0djtd,Coconut +/m/0dkzw,Seat belt +/m/0dq75,Raccoon +/m/0_dqb,Chisel +/m/0dt3t,Fork +/m/0dtln,Lamp +/m/0dv5r,Camera +/m/0dv77,Squash (Plant) +/m/0dv9c,Racket +/m/0dzct,Human face +/m/0dzf4,Human arm +/m/0f4s2w,Vegetable +/m/0f571,Diaper +/m/0f6nr,Unicycle +/m/0f6wt,Falcon +/m/0f8s22,Chime +/m/0f9_l,Snail +/m/0fbdv,Shellfish +/m/0fbw6,Cabbage +/m/0fj52s,Carrot +/m/0fldg,Mango +/m/0fly7,Jeans +/m/0fm3zh,Flowerpot +/m/0fp6w,Pineapple +/m/0fqfqc,Drawer +/m/0fqt361,Stool +/m/0frqm,Envelope +/m/0fszt,Cake +/m/0ft9s,Dragonfly +/m/0ftb8,Common sunflower +/m/0fx9l,Microwave oven +/m/0fz0h,Honeycomb +/m/0gd2v,Marine mammal +/m/0gd36,Sea lion +/m/0gj37,Ladybug +/m/0gjbg72,Shelf +/m/0gjkl,Watch +/m/0gm28,Candy +/m/0grw1,Salad +/m/0gv1x,Parrot +/m/0gxl3,Handgun +/m/0h23m,Sparrow +/m/0h2r6,Van +/m/0h8jyh6,Grinder +/m/0h8kx63,Spice rack +/m/0h8l4fh,Light bulb +/m/0h8lkj8,Corded phone +/m/0h8mhzd,Sports uniform +/m/0h8my_4,Tennis racket +/m/0h8mzrc,Wall clock +/m/0h8n27j,Serving tray +/m/0h8n5zk,Kitchen & dining room table +/m/0h8n6f9,Dog bed +/m/0h8n6ft,Cake stand +/m/0h8nm9j,Cat furniture +/m/0h8nr_l,Bathroom accessory +/m/0h8nsvg,Facial tissue holder +/m/0h8ntjv,Pressure cooker +/m/0h99cwc,Kitchen appliance +/m/0h9mv,Tire +/m/0hdln,Ruler +/m/0hf58v5,Luggage and bags +/m/0hg7b,Microphone +/m/0hkxq,Broccoli +/m/0hnnb,Umbrella +/m/0hnyx,Pastry +/m/0hqkz,Grapefruit +/m/0j496,Band-aid +/m/0jbk,Animal +/m/0jg57,Bell pepper +/m/0jly1,Turkey +/m/0jqgx,Lily +/m/0jwn_,Pomegranate +/m/0jy4k,Doughnut +/m/0jyfg,Glasses +/m/0k0pj,Human nose +/m/0k1tl,Pen +/m/0_k2,Ant +/m/0k4j,Car +/m/0k5j,Aircraft +/m/0k65p,Human hand +/m/0km7z,Skunk +/m/0kmg4,Teddy bear +/m/0kpqd,Watermelon +/m/0kpt_,Cantaloupe +/m/0ky7b,Dishwasher +/m/0l14j_,Flute +/m/0l3ms,Balance beam +/m/0l515,Sandwich +/m/0ll1f78,Shrimp +/m/0llzx,Sewing machine +/m/0lt4_,Binoculars +/m/0m53l,Rays and skates +/m/0mcx2,Ipod +/m/0mkg,Accordion +/m/0mw_6,Willow +/m/0n28_,Crab +/m/0nl46,Crown +/m/0nybt,Seahorse +/m/0p833,Perfume +/m/0pcr,Alpaca +/m/0pg52,Taxi +/m/0ph39,Canoe +/m/0qjjc,Remote control +/m/0qmmr,Wheelchair +/m/0wdt60w,Rugby ball +/m/0xfy,Armadillo +/m/0xzly,Maracas +/m/0zvk5,Helmet diff --git a/scenic/dataset_lib/coco_dataset/data/panoptic_coco_categories.json b/scenic/dataset_lib/coco_dataset/data/panoptic_coco_categories.json new file mode 100644 index 0000000000000000000000000000000000000000..673a19e5ce461daa27793ca515212b005dd4ad1f --- /dev/null +++ b/scenic/dataset_lib/coco_dataset/data/panoptic_coco_categories.json @@ -0,0 +1 @@ +[{"supercategory": "person", "color": [220, 20, 60], "isthing": 1, "id": 1, "name": "person"}, {"supercategory": "vehicle", "color": [119, 11, 32], "isthing": 1, "id": 2, "name": "bicycle"}, {"supercategory": "vehicle", "color": [0, 0, 142], "isthing": 1, "id": 3, "name": "car"}, {"supercategory": "vehicle", "color": [0, 0, 230], "isthing": 1, "id": 4, "name": "motorcycle"}, {"supercategory": "vehicle", "color": [106, 0, 228], "isthing": 1, "id": 5, "name": "airplane"}, {"supercategory": "vehicle", "color": [0, 60, 100], "isthing": 1, "id": 6, "name": "bus"}, {"supercategory": "vehicle", "color": [0, 80, 100], "isthing": 1, "id": 7, "name": "train"}, {"supercategory": "vehicle", "color": [0, 0, 70], "isthing": 1, "id": 8, "name": "truck"}, {"supercategory": "vehicle", "color": [0, 0, 192], "isthing": 1, "id": 9, "name": "boat"}, {"supercategory": "outdoor", "color": [250, 170, 30], "isthing": 1, "id": 10, "name": "traffic light"}, {"supercategory": "outdoor", "color": [100, 170, 30], "isthing": 1, "id": 11, "name": "fire hydrant"}, {"supercategory": "outdoor", "color": [220, 220, 0], "isthing": 1, "id": 13, "name": "stop sign"}, {"supercategory": "outdoor", "color": [175, 116, 175], "isthing": 1, "id": 14, "name": "parking meter"}, {"supercategory": "outdoor", "color": [250, 0, 30], "isthing": 1, "id": 15, "name": "bench"}, {"supercategory": "animal", "color": [165, 42, 42], "isthing": 1, "id": 16, "name": "bird"}, {"supercategory": "animal", "color": [255, 77, 255], "isthing": 1, "id": 17, "name": "cat"}, {"supercategory": "animal", "color": [0, 226, 252], "isthing": 1, "id": 18, "name": "dog"}, {"supercategory": "animal", "color": [182, 182, 255], "isthing": 1, "id": 19, "name": "horse"}, {"supercategory": "animal", "color": [0, 82, 0], "isthing": 1, "id": 20, "name": "sheep"}, {"supercategory": "animal", "color": [120, 166, 157], "isthing": 1, "id": 21, "name": "cow"}, {"supercategory": "animal", "color": [110, 76, 0], "isthing": 1, "id": 22, "name": "elephant"}, {"supercategory": "animal", "color": [174, 57, 255], "isthing": 1, "id": 23, "name": "bear"}, {"supercategory": "animal", "color": [199, 100, 0], "isthing": 1, "id": 24, "name": "zebra"}, {"supercategory": "animal", "color": [72, 0, 118], "isthing": 1, "id": 25, "name": "giraffe"}, {"supercategory": "accessory", "color": [255, 179, 240], "isthing": 1, "id": 27, "name": "backpack"}, {"supercategory": "accessory", "color": [0, 125, 92], "isthing": 1, "id": 28, "name": "umbrella"}, {"supercategory": "accessory", "color": [209, 0, 151], "isthing": 1, "id": 31, "name": "handbag"}, {"supercategory": "accessory", "color": [188, 208, 182], "isthing": 1, "id": 32, "name": "tie"}, {"supercategory": "accessory", "color": [0, 220, 176], "isthing": 1, "id": 33, "name": "suitcase"}, {"supercategory": "sports", "color": [255, 99, 164], "isthing": 1, "id": 34, "name": "frisbee"}, {"supercategory": "sports", "color": [92, 0, 73], "isthing": 1, "id": 35, "name": "skis"}, {"supercategory": "sports", "color": [133, 129, 255], "isthing": 1, "id": 36, "name": "snowboard"}, {"supercategory": "sports", "color": [78, 180, 255], "isthing": 1, "id": 37, "name": "sports ball"}, {"supercategory": "sports", "color": [0, 228, 0], "isthing": 1, "id": 38, "name": "kite"}, {"supercategory": "sports", "color": [174, 255, 243], "isthing": 1, "id": 39, "name": "baseball bat"}, {"supercategory": "sports", "color": [45, 89, 255], "isthing": 1, "id": 40, "name": "baseball glove"}, {"supercategory": "sports", "color": [134, 134, 103], "isthing": 1, "id": 41, "name": "skateboard"}, {"supercategory": "sports", "color": [145, 148, 174], "isthing": 1, "id": 42, "name": "surfboard"}, {"supercategory": "sports", "color": [255, 208, 186], "isthing": 1, "id": 43, "name": "tennis racket"}, {"supercategory": "kitchen", "color": [197, 226, 255], "isthing": 1, "id": 44, "name": "bottle"}, {"supercategory": "kitchen", "color": [171, 134, 1], "isthing": 1, "id": 46, "name": "wine glass"}, {"supercategory": "kitchen", "color": [109, 63, 54], "isthing": 1, "id": 47, "name": "cup"}, {"supercategory": "kitchen", "color": [207, 138, 255], "isthing": 1, "id": 48, "name": "fork"}, {"supercategory": "kitchen", "color": [151, 0, 95], "isthing": 1, "id": 49, "name": "knife"}, {"supercategory": "kitchen", "color": [9, 80, 61], "isthing": 1, "id": 50, "name": "spoon"}, {"supercategory": "kitchen", "color": [84, 105, 51], "isthing": 1, "id": 51, "name": "bowl"}, {"supercategory": "food", "color": [74, 65, 105], "isthing": 1, "id": 52, "name": "banana"}, {"supercategory": "food", "color": [166, 196, 102], "isthing": 1, "id": 53, "name": "apple"}, {"supercategory": "food", "color": [208, 195, 210], "isthing": 1, "id": 54, "name": "sandwich"}, {"supercategory": "food", "color": [255, 109, 65], "isthing": 1, "id": 55, "name": "orange"}, {"supercategory": "food", "color": [0, 143, 149], "isthing": 1, "id": 56, "name": "broccoli"}, {"supercategory": "food", "color": [179, 0, 194], "isthing": 1, "id": 57, "name": "carrot"}, {"supercategory": "food", "color": [209, 99, 106], "isthing": 1, "id": 58, "name": "hot dog"}, {"supercategory": "food", "color": [5, 121, 0], "isthing": 1, "id": 59, "name": "pizza"}, {"supercategory": "food", "color": [227, 255, 205], "isthing": 1, "id": 60, "name": "donut"}, {"supercategory": "food", "color": [147, 186, 208], "isthing": 1, "id": 61, "name": "cake"}, {"supercategory": "furniture", "color": [153, 69, 1], "isthing": 1, "id": 62, "name": "chair"}, {"supercategory": "furniture", "color": [3, 95, 161], "isthing": 1, "id": 63, "name": "couch"}, {"supercategory": "furniture", "color": [163, 255, 0], "isthing": 1, "id": 64, "name": "potted plant"}, {"supercategory": "furniture", "color": [119, 0, 170], "isthing": 1, "id": 65, "name": "bed"}, {"supercategory": "furniture", "color": [0, 182, 199], "isthing": 1, "id": 67, "name": "dining table"}, {"supercategory": "furniture", "color": [0, 165, 120], "isthing": 1, "id": 70, "name": "toilet"}, {"supercategory": "electronic", "color": [183, 130, 88], "isthing": 1, "id": 72, "name": "tv"}, {"supercategory": "electronic", "color": [95, 32, 0], "isthing": 1, "id": 73, "name": "laptop"}, {"supercategory": "electronic", "color": [130, 114, 135], "isthing": 1, "id": 74, "name": "mouse"}, {"supercategory": "electronic", "color": [110, 129, 133], "isthing": 1, "id": 75, "name": "remote"}, {"supercategory": "electronic", "color": [166, 74, 118], "isthing": 1, "id": 76, "name": "keyboard"}, {"supercategory": "electronic", "color": [219, 142, 185], "isthing": 1, "id": 77, "name": "cell phone"}, {"supercategory": "appliance", "color": [79, 210, 114], "isthing": 1, "id": 78, "name": "microwave"}, {"supercategory": "appliance", "color": [178, 90, 62], "isthing": 1, "id": 79, "name": "oven"}, {"supercategory": "appliance", "color": [65, 70, 15], "isthing": 1, "id": 80, "name": "toaster"}, {"supercategory": "appliance", "color": [127, 167, 115], "isthing": 1, "id": 81, "name": "sink"}, {"supercategory": "appliance", "color": [59, 105, 106], "isthing": 1, "id": 82, "name": "refrigerator"}, {"supercategory": "indoor", "color": [142, 108, 45], "isthing": 1, "id": 84, "name": "book"}, {"supercategory": "indoor", "color": [196, 172, 0], "isthing": 1, "id": 85, "name": "clock"}, {"supercategory": "indoor", "color": [95, 54, 80], "isthing": 1, "id": 86, "name": "vase"}, {"supercategory": "indoor", "color": [128, 76, 255], "isthing": 1, "id": 87, "name": "scissors"}, {"supercategory": "indoor", "color": [201, 57, 1], "isthing": 1, "id": 88, "name": "teddy bear"}, {"supercategory": "indoor", "color": [246, 0, 122], "isthing": 1, "id": 89, "name": "hair drier"}, {"supercategory": "indoor", "color": [191, 162, 208], "isthing": 1, "id": 90, "name": "toothbrush"}, {"supercategory": "textile", "color": [255, 255, 128], "isthing": 0, "id": 92, "name": "banner"}, {"supercategory": "textile", "color": [147, 211, 203], "isthing": 0, "id": 93, "name": "blanket"}, {"supercategory": "building", "color": [150, 100, 100], "isthing": 0, "id": 95, "name": "bridge"}, {"supercategory": "raw-material", "color": [168, 171, 172], "isthing": 0, "id": 100, "name": "cardboard"}, {"supercategory": "furniture-stuff", "color": [146, 112, 198], "isthing": 0, "id": 107, "name": "counter"}, {"supercategory": "textile", "color": [210, 170, 100], "isthing": 0, "id": 109, "name": "curtain"}, {"supercategory": "furniture-stuff", "color": [92, 136, 89], "isthing": 0, "id": 112, "name": "door-stuff"}, {"supercategory": "floor", "color": [218, 88, 184], "isthing": 0, "id": 118, "name": "floor-wood"}, {"supercategory": "plant", "color": [241, 129, 0], "isthing": 0, "id": 119, "name": "flower"}, {"supercategory": "food-stuff", "color": [217, 17, 255], "isthing": 0, "id": 122, "name": "fruit"}, {"supercategory": "ground", "color": [124, 74, 181], "isthing": 0, "id": 125, "name": "gravel"}, {"supercategory": "building", "color": [70, 70, 70], "isthing": 0, "id": 128, "name": "house"}, {"supercategory": "furniture-stuff", "color": [255, 228, 255], "isthing": 0, "id": 130, "name": "light"}, {"supercategory": "furniture-stuff", "color": [154, 208, 0], "isthing": 0, "id": 133, "name": "mirror-stuff"}, {"supercategory": "structural", "color": [193, 0, 92], "isthing": 0, "id": 138, "name": "net"}, {"supercategory": "textile", "color": [76, 91, 113], "isthing": 0, "id": 141, "name": "pillow"}, {"supercategory": "ground", "color": [255, 180, 195], "isthing": 0, "id": 144, "name": "platform"}, {"supercategory": "ground", "color": [106, 154, 176], "isthing": 0, "id": 145, "name": "playingfield"}, {"supercategory": "ground", "color": [230, 150, 140], "isthing": 0, "id": 147, "name": "railroad"}, {"supercategory": "water", "color": [60, 143, 255], "isthing": 0, "id": 148, "name": "river"}, {"supercategory": "ground", "color": [128, 64, 128], "isthing": 0, "id": 149, "name": "road"}, {"supercategory": "building", "color": [92, 82, 55], "isthing": 0, "id": 151, "name": "roof"}, {"supercategory": "ground", "color": [254, 212, 124], "isthing": 0, "id": 154, "name": "sand"}, {"supercategory": "water", "color": [73, 77, 174], "isthing": 0, "id": 155, "name": "sea"}, {"supercategory": "furniture-stuff", "color": [255, 160, 98], "isthing": 0, "id": 156, "name": "shelf"}, {"supercategory": "ground", "color": [255, 255, 255], "isthing": 0, "id": 159, "name": "snow"}, {"supercategory": "furniture-stuff", "color": [104, 84, 109], "isthing": 0, "id": 161, "name": "stairs"}, {"supercategory": "building", "color": [169, 164, 131], "isthing": 0, "id": 166, "name": "tent"}, {"supercategory": "textile", "color": [225, 199, 255], "isthing": 0, "id": 168, "name": "towel"}, {"supercategory": "wall", "color": [137, 54, 74], "isthing": 0, "id": 171, "name": "wall-brick"}, {"supercategory": "wall", "color": [135, 158, 223], "isthing": 0, "id": 175, "name": "wall-stone"}, {"supercategory": "wall", "color": [7, 246, 231], "isthing": 0, "id": 176, "name": "wall-tile"}, {"supercategory": "wall", "color": [107, 255, 200], "isthing": 0, "id": 177, "name": "wall-wood"}, {"supercategory": "water", "color": [58, 41, 149], "isthing": 0, "id": 178, "name": "water-other"}, {"supercategory": "window", "color": [183, 121, 142], "isthing": 0, "id": 180, "name": "window-blind"}, {"supercategory": "window", "color": [255, 73, 97], "isthing": 0, "id": 181, "name": "window-other"}, {"supercategory": "plant", "color": [107, 142, 35], "isthing": 0, "id": 184, "name": "tree-merged"}, {"supercategory": "structural", "color": [190, 153, 153], "isthing": 0, "id": 185, "name": "fence-merged"}, {"supercategory": "ceiling", "color": [146, 139, 141], "isthing": 0, "id": 186, "name": "ceiling-merged"}, {"supercategory": "sky", "color": [70, 130, 180], "isthing": 0, "id": 187, "name": "sky-other-merged"}, {"supercategory": "furniture-stuff", "color": [134, 199, 156], "isthing": 0, "id": 188, "name": "cabinet-merged"}, {"supercategory": "furniture-stuff", "color": [209, 226, 140], "isthing": 0, "id": 189, "name": "table-merged"}, {"supercategory": "floor", "color": [96, 36, 108], "isthing": 0, "id": 190, "name": "floor-other-merged"}, {"supercategory": "ground", "color": [96, 96, 96], "isthing": 0, "id": 191, "name": "pavement-merged"}, {"supercategory": "solid", "color": [64, 170, 64], "isthing": 0, "id": 192, "name": "mountain-merged"}, {"supercategory": "plant", "color": [152, 251, 152], "isthing": 0, "id": 193, "name": "grass-merged"}, {"supercategory": "ground", "color": [208, 229, 228], "isthing": 0, "id": 194, "name": "dirt-merged"}, {"supercategory": "raw-material", "color": [206, 186, 171], "isthing": 0, "id": 195, "name": "paper-merged"}, {"supercategory": "food-stuff", "color": [152, 161, 64], "isthing": 0, "id": 196, "name": "food-other-merged"}, {"supercategory": "building", "color": [116, 112, 0], "isthing": 0, "id": 197, "name": "building-other-merged"}, {"supercategory": "solid", "color": [0, 114, 143], "isthing": 0, "id": 198, "name": "rock-merged"}, {"supercategory": "wall", "color": [102, 102, 156], "isthing": 0, "id": 199, "name": "wall-other-merged"}, {"supercategory": "textile", "color": [250, 141, 255], "isthing": 0, "id": 200, "name": "rug-merged"}] diff --git a/scenic/dataset_lib/coco_dataset/data/panoptic_val2017.json b/scenic/dataset_lib/coco_dataset/data/panoptic_val2017.json new file mode 100644 index 0000000000000000000000000000000000000000..c532e47f2dc69c165a5630e48391f904f1904b23 --- /dev/null +++ b/scenic/dataset_lib/coco_dataset/data/panoptic_val2017.json @@ -0,0 +1 @@ +{"info": {"description": "COCO 2018 Panoptic Dataset", "url": "http://cocodataset.org", "version": "1.0", "year": 2018, "contributor": "https://arxiv.org/abs/1801.00868", "date_created": "2018-06-01 00:00:00.0"}, "licenses": [{"url": "http://creativecommons.org/licenses/by-nc-sa/2.0/", "id": 1, "name": "Attribution-NonCommercial-ShareAlike License"}, {"url": "http://creativecommons.org/licenses/by-nc/2.0/", "id": 2, "name": "Attribution-NonCommercial License"}, {"url": "http://creativecommons.org/licenses/by-nc-nd/2.0/", "id": 3, "name": "Attribution-NonCommercial-NoDerivs License"}, {"url": "http://creativecommons.org/licenses/by/2.0/", "id": 4, "name": "Attribution License"}, {"url": "http://creativecommons.org/licenses/by-sa/2.0/", "id": 5, "name": "Attribution-ShareAlike License"}, {"url": "http://creativecommons.org/licenses/by-nd/2.0/", "id": 6, "name": "Attribution-NoDerivs License"}, {"url": "http://flickr.com/commons/usage/", "id": 7, "name": "No known copyright restrictions"}, {"url": "http://www.usa.gov/copyright.shtml", "id": 8, "name": "United States Government Work"}], "images": [{"license": 4, "file_name": "000000397133.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000397133.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 17:02:52", "flickr_url": "http://farm7.staticflickr.com/6116/6255196340_da26cf2c9e_z.jpg", "id": 397133}, {"license": 1, "file_name": "000000037777.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000037777.jpg", "height": 230, "width": 352, "date_captured": "2013-11-14 20:55:31", "flickr_url": "http://farm9.staticflickr.com/8429/7839199426_f6d48aa585_z.jpg", "id": 37777}, {"license": 4, "file_name": "000000252219.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000252219.jpg", "height": 428, "width": 640, "date_captured": "2013-11-14 22:32:02", "flickr_url": "http://farm4.staticflickr.com/3446/3232237447_13d84bd0a1_z.jpg", "id": 252219}, {"license": 1, "file_name": "000000087038.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000087038.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 23:11:37", "flickr_url": "http://farm8.staticflickr.com/7355/8825114508_b0fa4d7168_z.jpg", "id": 87038}, {"license": 6, "file_name": "000000174482.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000174482.jpg", "height": 388, "width": 640, "date_captured": "2013-11-14 23:16:55", "flickr_url": "http://farm8.staticflickr.com/7020/6478877255_242f741dd1_z.jpg", "id": 174482}, {"license": 4, "file_name": "000000403385.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000403385.jpg", "height": 511, "width": 640, "date_captured": "2013-11-15 00:09:17", "flickr_url": "http://farm4.staticflickr.com/3526/3768289025_b29315b582_z.jpg", "id": 403385}, {"license": 4, "file_name": "000000006818.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000006818.jpg", "height": 640, "width": 427, "date_captured": "2013-11-15 01:52:52", "flickr_url": "http://farm3.staticflickr.com/2318/2068039201_b967c69504_z.jpg", "id": 6818}, {"license": 6, "file_name": "000000480985.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000480985.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 13:09:24", "flickr_url": "http://farm3.staticflickr.com/2336/1634911562_703ff01cff_z.jpg", "id": 480985}, {"license": 4, "file_name": "000000458054.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000458054.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 13:13:31", "flickr_url": "http://farm9.staticflickr.com/8010/7579121084_7f1d01cd39_z.jpg", "id": 458054}, {"license": 4, "file_name": "000000331352.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000331352.jpg", "height": 500, "width": 351, "date_captured": "2013-11-15 13:55:22", "flickr_url": "http://farm1.staticflickr.com/53/136223761_7764eb56fa_z.jpg", "id": 331352}, {"license": 3, "file_name": "000000296649.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000296649.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 15:26:19", "flickr_url": "http://farm4.staticflickr.com/3577/3491669985_d81e1050c6_z.jpg", "id": 296649}, {"license": 1, "file_name": "000000386912.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000386912.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 16:38:19", "flickr_url": "http://farm5.staticflickr.com/4088/4980393979_fb7325e0b6_z.jpg", "id": 386912}, {"license": 3, "file_name": "000000502136.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000502136.jpg", "height": 423, "width": 500, "date_captured": "2013-11-15 17:08:30", "flickr_url": "http://farm3.staticflickr.com/2253/1755223462_fabbeb8dc3_z.jpg", "id": 502136}, {"license": 3, "file_name": "000000491497.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000491497.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 17:19:41", "flickr_url": "http://farm3.staticflickr.com/2076/2227048481_0ed8653652_z.jpg", "id": 491497}, {"license": 1, "file_name": "000000184791.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000184791.jpg", "height": 500, "width": 640, "date_captured": "2013-11-15 18:08:29", "flickr_url": "http://farm1.staticflickr.com/50/138352202_f4983aa717_z.jpg", "id": 184791}, {"license": 3, "file_name": "000000348881.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000348881.jpg", "height": 462, "width": 640, "date_captured": "2013-11-16 04:50:43", "flickr_url": "http://farm5.staticflickr.com/4127/5172389204_31214fdc50_z.jpg", "id": 348881}, {"license": 3, "file_name": "000000289393.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000289393.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 12:07:13", "flickr_url": "http://farm3.staticflickr.com/2053/2225000544_2cd9e6628c_z.jpg", "id": 289393}, {"license": 1, "file_name": "000000522713.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000522713.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 13:25:17", "flickr_url": "http://farm4.staticflickr.com/3146/2353513897_17393f1b00_z.jpg", "id": 522713}, {"license": 3, "file_name": "000000181666.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000181666.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 13:58:29", "flickr_url": "http://farm3.staticflickr.com/2572/4127484314_23525e6e9c_z.jpg", "id": 181666}, {"license": 1, "file_name": "000000017627.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000017627.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 15:13:53", "flickr_url": "http://farm5.staticflickr.com/4145/4977243989_c2efb1b911_z.jpg", "id": 17627}, {"license": 1, "file_name": "000000143931.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000143931.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 15:38:46", "flickr_url": "http://farm9.staticflickr.com/8474/8145963753_2e334946c7_z.jpg", "id": 143931}, {"license": 4, "file_name": "000000303818.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000303818.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 15:51:16", "flickr_url": "http://farm8.staticflickr.com/7296/9604033757_c21f78484e_z.jpg", "id": 303818}, {"license": 3, "file_name": "000000463730.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000463730.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 17:37:49", "flickr_url": "http://farm4.staticflickr.com/3646/3426989867_e5b8439938_z.jpg", "id": 463730}, {"license": 3, "file_name": "000000460347.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000460347.jpg", "height": 640, "width": 427, "date_captured": "2013-11-17 00:11:09", "flickr_url": "http://farm9.staticflickr.com/8203/8262915638_911e6c6ea8_z.jpg", "id": 460347}, {"license": 6, "file_name": "000000322864.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000322864.jpg", "height": 640, "width": 427, "date_captured": "2013-11-17 01:05:46", "flickr_url": "http://farm4.staticflickr.com/3833/9414555779_75b9652a03_z.jpg", "id": 322864}, {"license": 4, "file_name": "000000226111.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000226111.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 01:19:58", "flickr_url": "http://farm4.staticflickr.com/3348/3333755023_1a0381e95f_z.jpg", "id": 226111}, {"license": 1, "file_name": "000000153299.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000153299.jpg", "height": 500, "width": 461, "date_captured": "2013-11-17 01:35:43", "flickr_url": "http://farm1.staticflickr.com/88/233835328_6c4490cf34_z.jpg", "id": 153299}, {"license": 3, "file_name": "000000308394.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000308394.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 03:48:10", "flickr_url": "http://farm4.staticflickr.com/3152/2818802025_2a91e90799_z.jpg", "id": 308394}, {"license": 4, "file_name": "000000456496.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000456496.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 03:50:41", "flickr_url": "http://farm4.staticflickr.com/3810/10095484263_8ff0024f65_z.jpg", "id": 456496}, {"license": 4, "file_name": "000000058636.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000058636.jpg", "height": 640, "width": 634, "date_captured": "2013-11-17 04:21:31", "flickr_url": "http://farm3.staticflickr.com/2753/5744540082_707eaf8887_z.jpg", "id": 58636}, {"license": 5, "file_name": "000000041888.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000041888.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 05:17:27", "flickr_url": "http://farm3.staticflickr.com/2838/9552386421_f1ccb033d6_z.jpg", "id": 41888}, {"license": 3, "file_name": "000000184321.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000184321.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 07:10:16", "flickr_url": "http://farm4.staticflickr.com/3738/9619673502_7bb5875df3_z.jpg", "id": 184321}, {"license": 4, "file_name": "000000565778.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000565778.jpg", "height": 400, "width": 640, "date_captured": "2013-11-17 08:58:44", "flickr_url": "http://farm6.staticflickr.com/5523/9117236902_bea84134a9_z.jpg", "id": 565778}, {"license": 4, "file_name": "000000297343.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000297343.jpg", "height": 432, "width": 640, "date_captured": "2013-11-17 09:20:59", "flickr_url": "http://farm5.staticflickr.com/4045/4693556483_48778c7494_z.jpg", "id": 297343}, {"license": 1, "file_name": "000000336587.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000336587.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 09:38:40", "flickr_url": "http://farm4.staticflickr.com/3136/3036562391_57325b7c1a_z.jpg", "id": 336587}, {"license": 4, "file_name": "000000122745.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000122745.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 09:58:05", "flickr_url": "http://farm2.staticflickr.com/1028/1143164889_bf35e363ed_z.jpg", "id": 122745}, {"license": 1, "file_name": "000000219578.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000219578.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 16:03:13", "flickr_url": "http://farm5.staticflickr.com/4094/4917146875_e48e614ff2_z.jpg", "id": 219578}, {"license": 5, "file_name": "000000555705.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000555705.jpg", "height": 371, "width": 640, "date_captured": "2013-11-17 16:54:19", "flickr_url": "http://farm6.staticflickr.com/5266/5808419943_81314ba194_z.jpg", "id": 555705}, {"license": 2, "file_name": "000000443303.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000443303.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 17:28:10", "flickr_url": "http://farm4.staticflickr.com/3181/2888219798_a8fdeeb54b_z.jpg", "id": 443303}, {"license": 4, "file_name": "000000500663.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000500663.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 18:01:17", "flickr_url": "http://farm3.staticflickr.com/2452/4046745441_5a2f435499_z.jpg", "id": 500663}, {"license": 4, "file_name": "000000418281.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000418281.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 20:06:02", "flickr_url": "http://farm3.staticflickr.com/2826/10096943865_4342e11627_z.jpg", "id": 418281}, {"license": 3, "file_name": "000000025560.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000025560.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 21:48:19", "flickr_url": "http://farm1.staticflickr.com/198/488201322_ef2ebfeccb_z.jpg", "id": 25560}, {"license": 3, "file_name": "000000403817.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000403817.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 00:09:14", "flickr_url": "http://farm1.staticflickr.com/40/122334986_1c6fd10c4c_z.jpg", "id": 403817}, {"license": 3, "file_name": "000000085329.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000085329.jpg", "height": 449, "width": 640, "date_captured": "2013-11-18 02:44:13", "flickr_url": "http://farm9.staticflickr.com/8143/7573269216_9e5b752281_z.jpg", "id": 85329}, {"license": 5, "file_name": "000000329323.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000329323.jpg", "height": 640, "width": 425, "date_captured": "2013-11-18 03:20:36", "flickr_url": "http://farm7.staticflickr.com/6183/6100180267_cecedd78ba_z.jpg", "id": 329323}, {"license": 3, "file_name": "000000239274.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000239274.jpg", "height": 640, "width": 581, "date_captured": "2013-11-18 03:40:24", "flickr_url": "http://farm8.staticflickr.com/7416/10079494584_8dd76f48cb_z.jpg", "id": 239274}, {"license": 5, "file_name": "000000286994.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000286994.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 03:47:59", "flickr_url": "http://farm3.staticflickr.com/2879/9593058971_c198b320ee_z.jpg", "id": 286994}, {"license": 5, "file_name": "000000511321.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000511321.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 04:00:03", "flickr_url": "http://farm4.staticflickr.com/3668/9987909545_5c30c1ce40_z.jpg", "id": 511321}, {"license": 2, "file_name": "000000314294.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000314294.jpg", "height": 360, "width": 640, "date_captured": "2013-11-18 04:46:33", "flickr_url": "http://farm9.staticflickr.com/8220/8445739283_05133941ff_z.jpg", "id": 314294}, {"license": 2, "file_name": "000000233771.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000233771.jpg", "height": 640, "width": 640, "date_captured": "2013-11-18 05:20:56", "flickr_url": "http://farm2.staticflickr.com/1304/4660238513_56f3b73555_z.jpg", "id": 233771}, {"license": 1, "file_name": "000000475779.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000475779.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 07:11:19", "flickr_url": "http://farm4.staticflickr.com/3004/5840536253_27004298cc_z.jpg", "id": 475779}, {"license": 2, "file_name": "000000301867.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000301867.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 08:07:48", "flickr_url": "http://farm4.staticflickr.com/3702/9562977618_bf24da96c4_z.jpg", "id": 301867}, {"license": 3, "file_name": "000000312421.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000312421.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 08:23:25", "flickr_url": "http://farm8.staticflickr.com/7417/10072949756_a273bd03da_z.jpg", "id": 312421}, {"license": 1, "file_name": "000000185250.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000185250.jpg", "height": 640, "width": 399, "date_captured": "2013-11-18 10:07:10", "flickr_url": "http://farm8.staticflickr.com/7040/6810762896_6429b482b6_z.jpg", "id": 185250}, {"license": 3, "file_name": "000000356427.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000356427.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 12:00:34", "flickr_url": "http://farm4.staticflickr.com/3053/2634837936_186c01f72b_z.jpg", "id": 356427}, {"license": 4, "file_name": "000000572517.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000572517.jpg", "height": 424, "width": 640, "date_captured": "2013-11-18 13:23:38", "flickr_url": "http://farm4.staticflickr.com/3744/8754578923_aa3309cca9_z.jpg", "id": 572517}, {"license": 1, "file_name": "000000270244.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000270244.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 16:50:26", "flickr_url": "http://farm3.staticflickr.com/2867/8764646161_bd1daa5b2a_z.jpg", "id": 270244}, {"license": 1, "file_name": "000000516316.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000516316.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 18:15:05", "flickr_url": "http://farm6.staticflickr.com/5142/5840536817_38a20b2796_z.jpg", "id": 516316}, {"license": 3, "file_name": "000000125211.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000125211.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 18:25:28", "flickr_url": "http://farm6.staticflickr.com/5268/5616414260_106febb605_z.jpg", "id": 125211}, {"license": 3, "file_name": "000000562121.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000562121.jpg", "height": 454, "width": 640, "date_captured": "2013-11-18 18:27:43", "flickr_url": "http://farm6.staticflickr.com/5260/5536366901_d00048ac6c_z.jpg", "id": 562121}, {"license": 1, "file_name": "000000360661.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000360661.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 21:33:43", "flickr_url": "http://farm4.staticflickr.com/3670/9709793032_f9ee4f0aa2_z.jpg", "id": 360661}, {"license": 3, "file_name": "000000016228.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000016228.jpg", "height": 440, "width": 640, "date_captured": "2013-11-19 00:09:53", "flickr_url": "http://farm4.staticflickr.com/3737/10031812195_372ae7538f_z.jpg", "id": 16228}, {"license": 1, "file_name": "000000382088.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000382088.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 02:48:18", "flickr_url": "http://farm9.staticflickr.com/8253/8637472246_0783196c6f_z.jpg", "id": 382088}, {"license": 3, "file_name": "000000266409.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000266409.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 20:30:17", "flickr_url": "http://farm9.staticflickr.com/8081/8331940980_ef74d48dff_z.jpg", "id": 266409}, {"license": 3, "file_name": "000000430961.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000430961.jpg", "height": 319, "width": 450, "date_captured": "2013-11-19 20:35:21", "flickr_url": "http://farm4.staticflickr.com/3455/3180605599_f895f404f0_z.jpg", "id": 430961}, {"license": 4, "file_name": "000000080671.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000080671.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 20:52:10", "flickr_url": "http://farm8.staticflickr.com/7067/7040483871_bae1b789be_z.jpg", "id": 80671}, {"license": 4, "file_name": "000000577539.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000577539.jpg", "height": 334, "width": 500, "date_captured": "2013-11-19 21:39:18", "flickr_url": "http://farm4.staticflickr.com/3494/3850219428_10c4b01c88_z.jpg", "id": 577539}, {"license": 5, "file_name": "000000104612.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000104612.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 23:42:58", "flickr_url": "http://farm3.staticflickr.com/2060/2280818350_cabd27fb73_z.jpg", "id": 104612}, {"license": 1, "file_name": "000000476258.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000476258.jpg", "height": 367, "width": 640, "date_captured": "2013-11-20 01:25:33", "flickr_url": "http://farm7.staticflickr.com/6231/6338462434_97b55c2888_z.jpg", "id": 476258}, {"license": 1, "file_name": "000000448365.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000448365.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 01:39:25", "flickr_url": "http://farm7.staticflickr.com/6079/6052677323_be8098b1a0_z.jpg", "id": 448365}, {"license": 1, "file_name": "000000035197.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000035197.jpg", "height": 640, "width": 429, "date_captured": "2013-11-20 05:20:09", "flickr_url": "http://farm5.staticflickr.com/4138/4891774391_e2fe44e390_z.jpg", "id": 35197}, {"license": 5, "file_name": "000000349860.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000349860.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 06:00:23", "flickr_url": "http://farm5.staticflickr.com/4025/4590246533_c351aefccd_z.jpg", "id": 349860}, {"license": 1, "file_name": "000000180135.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000180135.jpg", "height": 500, "width": 333, "date_captured": "2013-11-20 08:23:08", "flickr_url": "http://farm3.staticflickr.com/2046/3527197619_4920e79db6_z.jpg", "id": 180135}, {"license": 4, "file_name": "000000486438.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000486438.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 13:32:23", "flickr_url": "http://farm8.staticflickr.com/7154/6676693439_47455f5609_z.jpg", "id": 486438}, {"license": 1, "file_name": "000000400573.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000400573.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 13:32:33", "flickr_url": "http://farm5.staticflickr.com/4060/4671923710_9391a0b476_z.jpg", "id": 400573}, {"license": 5, "file_name": "000000109798.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000109798.jpg", "height": 333, "width": 500, "date_captured": "2013-11-20 13:33:45", "flickr_url": "http://farm5.staticflickr.com/4050/4281720883_039e354b4d_z.jpg", "id": 109798}, {"license": 3, "file_name": "000000370677.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000370677.jpg", "height": 332, "width": 500, "date_captured": "2013-11-20 13:58:58", "flickr_url": "http://farm4.staticflickr.com/3498/3210819975_ffb1394426_z.jpg", "id": 370677}, {"license": 4, "file_name": "000000238866.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000238866.jpg", "height": 439, "width": 640, "date_captured": "2013-11-20 14:40:43", "flickr_url": "http://farm8.staticflickr.com/7013/6610035555_f0429c52e9_z.jpg", "id": 238866}, {"license": 2, "file_name": "000000369370.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000369370.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 15:44:05", "flickr_url": "http://farm6.staticflickr.com/5145/5678857547_d84fa04ce4_z.jpg", "id": 369370}, {"license": 4, "file_name": "000000502737.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000502737.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 16:07:14", "flickr_url": "http://farm2.staticflickr.com/1370/1343129188_df1aebda3f_z.jpg", "id": 502737}, {"license": 6, "file_name": "000000515579.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000515579.jpg", "height": 332, "width": 500, "date_captured": "2013-11-20 17:19:27", "flickr_url": "http://farm4.staticflickr.com/3199/2865434771_dca1c5e149_z.jpg", "id": 515579}, {"license": 2, "file_name": "000000515445.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000515445.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 19:32:34", "flickr_url": "http://farm1.staticflickr.com/105/301376641_ad9f966666_z.jpg", "id": 515445}, {"license": 3, "file_name": "000000173383.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000173383.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 19:36:42", "flickr_url": "http://farm8.staticflickr.com/7298/10229885046_3b4ef771c1_z.jpg", "id": 173383}, {"license": 2, "file_name": "000000438862.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000438862.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 20:23:56", "flickr_url": "http://farm9.staticflickr.com/8198/8270500113_8372807c4d_z.jpg", "id": 438862}, {"license": 4, "file_name": "000000180560.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000180560.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 21:18:55", "flickr_url": "http://farm9.staticflickr.com/8373/8410408682_986cd1a140_z.jpg", "id": 180560}, {"license": 3, "file_name": "000000347693.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000347693.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 21:32:33", "flickr_url": "http://farm4.staticflickr.com/3317/3427794620_9db24fe462_z.jpg", "id": 347693}, {"license": 4, "file_name": "000000039956.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000039956.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 21:40:01", "flickr_url": "http://farm3.staticflickr.com/2692/4164666887_536163f782_z.jpg", "id": 39956}, {"license": 4, "file_name": "000000321214.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000321214.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 22:11:08", "flickr_url": "http://farm9.staticflickr.com/8030/8037209348_6491cf571e_z.jpg", "id": 321214}, {"license": 4, "file_name": "000000474028.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000474028.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 22:40:01", "flickr_url": "http://farm8.staticflickr.com/7086/7258228366_b29766be26_z.jpg", "id": 474028}, {"license": 3, "file_name": "000000066523.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000066523.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 23:15:23", "flickr_url": "http://farm4.staticflickr.com/3018/2471041106_3346281447_z.jpg", "id": 66523}, {"license": 3, "file_name": "000000355257.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000355257.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 23:51:16", "flickr_url": "http://farm3.staticflickr.com/2869/8759177830_2ecb0f9160_z.jpg", "id": 355257}, {"license": 1, "file_name": "000000142092.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000142092.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 00:23:13", "flickr_url": "http://farm4.staticflickr.com/3204/5745241446_6a040560ae_z.jpg", "id": 142092}, {"license": 2, "file_name": "000000063154.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000063154.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 00:23:50", "flickr_url": "http://farm5.staticflickr.com/4151/5180741702_d26cd9e67d_z.jpg", "id": 63154}, {"license": 3, "file_name": "000000199551.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000199551.jpg", "height": 428, "width": 640, "date_captured": "2013-11-21 01:05:17", "flickr_url": "http://farm8.staticflickr.com/7123/7826328046_0165984695_z.jpg", "id": 199551}, {"license": 5, "file_name": "000000239347.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000239347.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 01:25:58", "flickr_url": "http://farm8.staticflickr.com/7084/7311947216_1eb6416561_z.jpg", "id": 239347}, {"license": 6, "file_name": "000000514508.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000514508.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 01:27:06", "flickr_url": "http://farm9.staticflickr.com/8039/8027872891_593989d862_z.jpg", "id": 514508}, {"license": 4, "file_name": "000000473237.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000473237.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 01:56:27", "flickr_url": "http://farm9.staticflickr.com/8076/8343979767_679dfefda2_z.jpg", "id": 473237}, {"license": 4, "file_name": "000000228144.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000228144.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 03:26:21", "flickr_url": "http://farm4.staticflickr.com/3800/9678757658_774e298ba2_z.jpg", "id": 228144}, {"license": 1, "file_name": "000000206027.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000206027.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 05:13:42", "flickr_url": "http://farm5.staticflickr.com/4105/4998256912_85bb59539a_z.jpg", "id": 206027}, {"license": 1, "file_name": "000000078915.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000078915.jpg", "height": 640, "width": 481, "date_captured": "2013-11-21 05:24:27", "flickr_url": "http://farm5.staticflickr.com/4080/4757379654_6f0599d2ae_z.jpg", "id": 78915}, {"license": 1, "file_name": "000000551215.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000551215.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 05:24:30", "flickr_url": "http://farm5.staticflickr.com/4078/4757389954_595188042d_z.jpg", "id": 551215}, {"license": 4, "file_name": "000000544519.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000544519.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 19:25:58", "flickr_url": "http://farm5.staticflickr.com/4097/4947025740_1bb4b64539_z.jpg", "id": 544519}, {"license": 4, "file_name": "000000096493.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000096493.jpg", "height": 640, "width": 426, "date_captured": "2013-11-21 19:30:07", "flickr_url": "http://farm4.staticflickr.com/3226/3076742158_8615337d86_z.jpg", "id": 96493}, {"license": 5, "file_name": "000000023899.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000023899.jpg", "height": 425, "width": 640, "date_captured": "2013-11-21 20:42:06", "flickr_url": "http://farm2.staticflickr.com/1419/4598390017_b554e5d29b_z.jpg", "id": 23899}, {"license": 1, "file_name": "000000340175.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000340175.jpg", "height": 394, "width": 640, "date_captured": "2013-11-21 22:31:40", "flickr_url": "http://farm7.staticflickr.com/6094/6326677826_f339c3fb4d_z.jpg", "id": 340175}, {"license": 4, "file_name": "000000578500.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000578500.jpg", "height": 290, "width": 640, "date_captured": "2013-11-22 00:59:44", "flickr_url": "http://farm5.staticflickr.com/4042/4376919410_eff5f487aa_z.jpg", "id": 578500}, {"license": 5, "file_name": "000000366141.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000366141.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 02:22:53", "flickr_url": "http://farm3.staticflickr.com/2585/3704586407_21804c6219_z.jpg", "id": 366141}, {"license": 1, "file_name": "000000057597.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000057597.jpg", "height": 426, "width": 640, "date_captured": "2013-11-22 02:36:28", "flickr_url": "http://farm7.staticflickr.com/6239/6258453198_b6ee9e6d6f_z.jpg", "id": 57597}, {"license": 4, "file_name": "000000559842.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000559842.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 02:37:05", "flickr_url": "http://farm7.staticflickr.com/6039/6248453792_987793d2f0_z.jpg", "id": 559842}, {"license": 1, "file_name": "000000434230.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000434230.jpg", "height": 313, "width": 500, "date_captured": "2013-11-22 15:27:44", "flickr_url": "http://farm3.staticflickr.com/2777/4238303492_4d67f273f5_z.jpg", "id": 434230}, {"license": 1, "file_name": "000000428454.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000428454.jpg", "height": 333, "width": 500, "date_captured": "2013-11-22 19:47:28", "flickr_url": "http://farm1.staticflickr.com/102/313453372_1e5a076629_z.jpg", "id": 428454}, {"license": 3, "file_name": "000000399462.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000399462.jpg", "height": 451, "width": 300, "date_captured": "2013-11-22 20:28:12", "flickr_url": "http://farm1.staticflickr.com/19/99088840_7b8197aae8_z.jpg", "id": 399462}, {"license": 4, "file_name": "000000261061.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000261061.jpg", "height": 334, "width": 500, "date_captured": "2013-11-22 21:11:02", "flickr_url": "http://farm3.staticflickr.com/2579/3661648054_10cef105c9_z.jpg", "id": 261061}, {"license": 1, "file_name": "000000168330.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000168330.jpg", "height": 390, "width": 640, "date_captured": "2013-11-22 21:11:03", "flickr_url": "http://farm1.staticflickr.com/191/459438121_6c20bfa385_z.jpg", "id": 168330}, {"license": 2, "file_name": "000000383384.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000383384.jpg", "height": 360, "width": 640, "date_captured": "2013-11-22 22:01:38", "flickr_url": "http://farm6.staticflickr.com/5323/8751712539_97c6a26a7a_z.jpg", "id": 383384}, {"license": 1, "file_name": "000000342006.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000342006.jpg", "height": 640, "width": 480, "date_captured": "2013-11-22 22:31:07", "flickr_url": "http://farm1.staticflickr.com/61/195092271_efa8bd48e1_z.jpg", "id": 342006}, {"license": 3, "file_name": "000000217285.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000217285.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 23:59:37", "flickr_url": "http://farm8.staticflickr.com/7426/9767698732_710aa92ce8_z.jpg", "id": 217285}, {"license": 3, "file_name": "000000236412.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000236412.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 03:26:04", "flickr_url": "http://farm3.staticflickr.com/2618/4213689173_a864cfb94f_z.jpg", "id": 236412}, {"license": 1, "file_name": "000000524456.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000524456.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 00:41:32", "flickr_url": "http://farm6.staticflickr.com/5452/9732560828_6edc057764_z.jpg", "id": 524456}, {"license": 1, "file_name": "000000153343.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000153343.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 03:23:52", "flickr_url": "http://farm4.staticflickr.com/3357/3518624364_53ca46fd91_z.jpg", "id": 153343}, {"license": 1, "file_name": "000000095786.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000095786.jpg", "height": 334, "width": 500, "date_captured": "2013-11-24 04:14:08", "flickr_url": "http://farm4.staticflickr.com/3274/2700096780_3463231d72_z.jpg", "id": 95786}, {"license": 3, "file_name": "000000326541.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000326541.jpg", "height": 360, "width": 640, "date_captured": "2013-11-24 08:55:57", "flickr_url": "http://farm4.staticflickr.com/3125/2671788175_7f29831688_z.jpg", "id": 326541}, {"license": 3, "file_name": "000000213086.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000213086.jpg", "height": 500, "width": 375, "date_captured": "2013-11-24 10:45:49", "flickr_url": "http://farm3.staticflickr.com/2350/2255342131_d42a052f4e_z.jpg", "id": 213086}, {"license": 2, "file_name": "000000231339.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000231339.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 11:46:40", "flickr_url": "http://farm4.staticflickr.com/3163/2981304367_fef9cd9d44_z.jpg", "id": 231339}, {"license": 2, "file_name": "000000508730.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000508730.jpg", "height": 478, "width": 640, "date_captured": "2013-11-24 13:31:10", "flickr_url": "http://farm7.staticflickr.com/6150/5995738326_332a10134e_z.jpg", "id": 508730}, {"license": 6, "file_name": "000000550426.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000550426.jpg", "height": 640, "width": 416, "date_captured": "2013-11-24 18:54:58", "flickr_url": "http://farm6.staticflickr.com/5261/5771988584_c939246254_z.jpg", "id": 550426}, {"license": 2, "file_name": "000000368294.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000368294.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 20:50:18", "flickr_url": "http://farm5.staticflickr.com/4031/4400727770_86ee9f3abe_z.jpg", "id": 368294}, {"license": 6, "file_name": "000000171190.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000171190.jpg", "height": 480, "width": 640, "date_captured": "2013-11-25 20:34:17", "flickr_url": "http://farm4.staticflickr.com/3628/3316721668_e392505685_z.jpg", "id": 171190}, {"license": 4, "file_name": "000000301135.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000301135.jpg", "height": 640, "width": 428, "date_captured": "2013-11-14 12:31:21", "flickr_url": "http://farm5.staticflickr.com/4135/4856973633_60deb1c609_z.jpg", "id": 301135}, {"license": 2, "file_name": "000000580294.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000580294.jpg", "height": 443, "width": 640, "date_captured": "2013-11-14 16:36:53", "flickr_url": "http://farm1.staticflickr.com/179/381168089_d519464f9f_z.jpg", "id": 580294}, {"license": 1, "file_name": "000000494869.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000494869.jpg", "height": 640, "width": 427, "date_captured": "2013-11-14 18:46:11", "flickr_url": "http://farm9.staticflickr.com/8255/8713396144_ea7d431000_z.jpg", "id": 494869}, {"license": 1, "file_name": "000000033638.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000033638.jpg", "height": 640, "width": 425, "date_captured": "2013-11-14 18:56:47", "flickr_url": "http://farm9.staticflickr.com/8391/8634068123_0f717aebcb_z.jpg", "id": 33638}, {"license": 1, "file_name": "000000329219.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000329219.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 19:21:56", "flickr_url": "http://farm9.staticflickr.com/8104/8505307842_465524a6a6_z.jpg", "id": 329219}, {"license": 4, "file_name": "000000034873.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000034873.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 19:53:59", "flickr_url": "http://farm3.staticflickr.com/2563/3822818427_389d99073f_z.jpg", "id": 34873}, {"license": 1, "file_name": "000000186980.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000186980.jpg", "height": 640, "width": 457, "date_captured": "2013-11-14 20:44:32", "flickr_url": "http://farm9.staticflickr.com/8487/8164909702_0730bc8dcd_z.jpg", "id": 186980}, {"license": 4, "file_name": "000000127182.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000127182.jpg", "height": 640, "width": 427, "date_captured": "2013-11-14 20:44:42", "flickr_url": "http://farm9.staticflickr.com/8453/7883863194_0e5f44d8f9_z.jpg", "id": 127182}, {"license": 4, "file_name": "000000356387.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000356387.jpg", "height": 335, "width": 500, "date_captured": "2013-11-15 04:26:22", "flickr_url": "http://farm4.staticflickr.com/3013/3055048577_d0063c6acb_z.jpg", "id": 356387}, {"license": 1, "file_name": "000000367680.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000367680.jpg", "height": 338, "width": 450, "date_captured": "2013-11-15 08:23:02", "flickr_url": "http://farm1.staticflickr.com/22/34251540_bec994ec35_z.jpg", "id": 367680}, {"license": 2, "file_name": "000000263796.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000263796.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 11:39:41", "flickr_url": "http://farm6.staticflickr.com/5089/5207248875_b15e56b122_z.jpg", "id": 263796}, {"license": 5, "file_name": "000000117425.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000117425.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 13:35:41", "flickr_url": "http://farm5.staticflickr.com/4037/4395733509_2c1aa888b2_z.jpg", "id": 117425}, {"license": 1, "file_name": "000000365387.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000365387.jpg", "height": 425, "width": 640, "date_captured": "2013-11-15 14:02:24", "flickr_url": "http://farm5.staticflickr.com/4140/4887961917_161a96c682_z.jpg", "id": 365387}, {"license": 3, "file_name": "000000487583.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000487583.jpg", "height": 640, "width": 426, "date_captured": "2013-11-15 14:16:46", "flickr_url": "http://farm3.staticflickr.com/2471/3895101658_e5b732690a_z.jpg", "id": 487583}, {"license": 2, "file_name": "000000504711.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000504711.jpg", "height": 483, "width": 640, "date_captured": "2013-11-15 14:19:54", "flickr_url": "http://farm1.staticflickr.com/234/520078046_37e5bb8d95_z.jpg", "id": 504711}, {"license": 4, "file_name": "000000363840.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000363840.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 17:36:06", "flickr_url": "http://farm3.staticflickr.com/2797/4256603007_6fbbea22de_z.jpg", "id": 363840}, {"license": 2, "file_name": "000000214720.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000214720.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 18:13:40", "flickr_url": "http://farm1.staticflickr.com/33/66797251_ead3f3a7f6_z.jpg", "id": 214720}, {"license": 3, "file_name": "000000379453.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000379453.jpg", "height": 442, "width": 442, "date_captured": "2013-11-16 05:24:02", "flickr_url": "http://farm8.staticflickr.com/7337/9687518474_05fb72cbf2_z.jpg", "id": 379453}, {"license": 1, "file_name": "000000311295.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000311295.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 13:33:36", "flickr_url": "http://farm8.staticflickr.com/7151/6416499731_c12f35483a_z.jpg", "id": 311295}, {"license": 4, "file_name": "000000029393.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000029393.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 15:18:30", "flickr_url": "http://farm3.staticflickr.com/2556/4228514131_81f3416db3_z.jpg", "id": 29393}, {"license": 1, "file_name": "000000278848.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000278848.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 15:41:51", "flickr_url": "http://farm5.staticflickr.com/4130/5202284149_e1b057697c_z.jpg", "id": 278848}, {"license": 1, "file_name": "000000166391.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000166391.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 15:48:13", "flickr_url": "http://farm6.staticflickr.com/5024/5735220884_de797e3e8e_z.jpg", "id": 166391}, {"license": 1, "file_name": "000000048153.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000048153.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 16:19:02", "flickr_url": "http://farm2.staticflickr.com/1253/1295520037_fb738a75ca_z.jpg", "id": 48153}, {"license": 2, "file_name": "000000459153.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000459153.jpg", "height": 640, "width": 427, "date_captured": "2013-11-16 17:26:39", "flickr_url": "http://farm5.staticflickr.com/4145/5007881813_93e7954ee2_z.jpg", "id": 459153}, {"license": 3, "file_name": "000000295713.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000295713.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 17:28:38", "flickr_url": "http://farm3.staticflickr.com/2134/5712766703_9a63174767_z.jpg", "id": 295713}, {"license": 1, "file_name": "000000223130.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000223130.jpg", "height": 640, "width": 425, "date_captured": "2013-11-16 17:40:36", "flickr_url": "http://farm7.staticflickr.com/6116/6416553725_b837b8df1b_z.jpg", "id": 223130}, {"license": 1, "file_name": "000000273132.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000273132.jpg", "height": 633, "width": 640, "date_captured": "2013-11-16 18:14:38", "flickr_url": "http://farm4.staticflickr.com/3691/9432612125_11622614ef_z.jpg", "id": 273132}, {"license": 2, "file_name": "000000198960.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000198960.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 18:16:01", "flickr_url": "http://farm8.staticflickr.com/7428/9722886305_9f16f81860_z.jpg", "id": 198960}, {"license": 6, "file_name": "000000344059.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000344059.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 18:38:26", "flickr_url": "http://farm5.staticflickr.com/4115/4940328039_997e7d2ff4_z.jpg", "id": 344059}, {"license": 3, "file_name": "000000410428.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000410428.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 21:48:39", "flickr_url": "http://farm7.staticflickr.com/6111/6883218962_589fa25d89_z.jpg", "id": 410428}, {"license": 4, "file_name": "000000087875.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000087875.jpg", "height": 487, "width": 640, "date_captured": "2013-11-16 23:39:16", "flickr_url": "http://farm4.staticflickr.com/3625/4628170230_5aa5135db0_z.jpg", "id": 87875}, {"license": 2, "file_name": "000000450758.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000450758.jpg", "height": 479, "width": 640, "date_captured": "2013-11-17 01:25:32", "flickr_url": "http://farm2.staticflickr.com/1164/1344613982_e3336b7893_z.jpg", "id": 450758}, {"license": 5, "file_name": "000000458790.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000458790.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 04:12:51", "flickr_url": "http://farm1.staticflickr.com/6/10303978_763e34189e_z.jpg", "id": 458790}, {"license": 5, "file_name": "000000460160.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000460160.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 06:18:23", "flickr_url": "http://farm8.staticflickr.com/7445/9345977086_006679cb85_z.jpg", "id": 460160}, {"license": 5, "file_name": "000000458109.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000458109.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 06:27:04", "flickr_url": "http://farm4.staticflickr.com/3712/9932279996_5e591d53d4_z.jpg", "id": 458109}, {"license": 4, "file_name": "000000030675.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000030675.jpg", "height": 360, "width": 640, "date_captured": "2013-11-17 10:03:01", "flickr_url": "http://farm8.staticflickr.com/7431/8727763435_699b976ae1_z.jpg", "id": 30675}, {"license": 4, "file_name": "000000566524.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000566524.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 10:17:37", "flickr_url": "http://farm9.staticflickr.com/8545/8707217553_ed8fb89032_z.jpg", "id": 566524}, {"license": 3, "file_name": "000000338428.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000338428.jpg", "height": 366, "width": 640, "date_captured": "2013-11-17 13:18:38", "flickr_url": "http://farm9.staticflickr.com/8012/7535177488_ac1b53c80f_z.jpg", "id": 338428}, {"license": 2, "file_name": "000000545826.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000545826.jpg", "height": 333, "width": 500, "date_captured": "2013-11-17 16:09:29", "flickr_url": "http://farm3.staticflickr.com/2079/1993967446_d9a8d42613_z.jpg", "id": 545826}, {"license": 4, "file_name": "000000166277.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000166277.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 18:09:55", "flickr_url": "http://farm1.staticflickr.com/247/522239585_3ad698c8a7_z.jpg", "id": 166277}, {"license": 4, "file_name": "000000269314.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000269314.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 18:21:02", "flickr_url": "http://farm4.staticflickr.com/3492/3178700644_5c55c28a4c_z.jpg", "id": 269314}, {"license": 3, "file_name": "000000476415.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000476415.jpg", "height": 640, "width": 426, "date_captured": "2013-11-18 02:02:35", "flickr_url": "http://farm3.staticflickr.com/2493/3835516080_a197957b6f_z.jpg", "id": 476415}, {"license": 1, "file_name": "000000292082.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000292082.jpg", "height": 640, "width": 640, "date_captured": "2013-11-18 02:32:22", "flickr_url": "http://farm9.staticflickr.com/8472/8103536820_cb553e09bc_z.jpg", "id": 292082}, {"license": 5, "file_name": "000000360137.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000360137.jpg", "height": 640, "width": 640, "date_captured": "2013-11-18 02:36:40", "flickr_url": "http://farm8.staticflickr.com/7020/6479798749_fb83fd63db_z.jpg", "id": 360137}, {"license": 5, "file_name": "000000122046.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000122046.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 02:53:36", "flickr_url": "http://farm5.staticflickr.com/4110/4976101457_b80e3f622f_z.jpg", "id": 122046}, {"license": 5, "file_name": "000000352684.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000352684.jpg", "height": 640, "width": 424, "date_captured": "2013-11-18 03:05:20", "flickr_url": "http://farm8.staticflickr.com/7150/6442776257_d51029651f_z.jpg", "id": 352684}, {"license": 1, "file_name": "000000512836.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000512836.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 03:13:29", "flickr_url": "http://farm8.staticflickr.com/7003/6808529261_a7c36331ec_z.jpg", "id": 512836}, {"license": 4, "file_name": "000000008021.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000008021.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 03:13:53", "flickr_url": "http://farm7.staticflickr.com/6117/6240308255_77782d0723_z.jpg", "id": 8021}, {"license": 4, "file_name": "000000107226.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000107226.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 03:17:39", "flickr_url": "http://farm3.staticflickr.com/2139/2185708967_4da3c7fb32_z.jpg", "id": 107226}, {"license": 4, "file_name": "000000084477.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000084477.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 03:33:51", "flickr_url": "http://farm9.staticflickr.com/8454/7897786544_4e902801e3_z.jpg", "id": 84477}, {"license": 2, "file_name": "000000562243.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000562243.jpg", "height": 640, "width": 640, "date_captured": "2013-11-18 03:41:16", "flickr_url": "http://farm6.staticflickr.com/5213/5408441606_c80c9e7b48_z.jpg", "id": 562243}, {"license": 4, "file_name": "000000181859.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000181859.jpg", "height": 640, "width": 426, "date_captured": "2013-11-18 04:29:16", "flickr_url": "http://farm4.staticflickr.com/3393/3430882393_21bffd2a53_z.jpg", "id": 181859}, {"license": 4, "file_name": "000000177015.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000177015.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 06:09:13", "flickr_url": "http://farm1.staticflickr.com/131/355302776_1d1215b7c1_z.jpg", "id": 177015}, {"license": 1, "file_name": "000000292236.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000292236.jpg", "height": 500, "width": 332, "date_captured": "2013-11-18 06:43:25", "flickr_url": "http://farm4.staticflickr.com/3592/3404233089_e67192c9a0_z.jpg", "id": 292236}, {"license": 4, "file_name": "000000121506.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000121506.jpg", "height": 612, "width": 612, "date_captured": "2013-11-18 09:39:55", "flickr_url": "http://farm8.staticflickr.com/7116/7721233008_99b07f96b1_z.jpg", "id": 121506}, {"license": 4, "file_name": "000000288042.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000288042.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 10:33:12", "flickr_url": "http://farm7.staticflickr.com/6024/5961682633_69797dc630_z.jpg", "id": 288042}, {"license": 5, "file_name": "000000453860.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000453860.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 10:49:58", "flickr_url": "http://farm5.staticflickr.com/4115/4901231842_e5e73b51d9_z.jpg", "id": 453860}, {"license": 4, "file_name": "000000500257.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000500257.jpg", "height": 400, "width": 500, "date_captured": "2013-11-18 11:29:05", "flickr_url": "http://farm1.staticflickr.com/195/494680271_21c4c315c9_z.jpg", "id": 500257}, {"license": 4, "file_name": "000000113403.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000113403.jpg", "height": 451, "width": 640, "date_captured": "2013-11-18 11:37:38", "flickr_url": "http://farm3.staticflickr.com/2613/3713015524_bac439d1e6_z.jpg", "id": 113403}, {"license": 2, "file_name": "000000125062.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000125062.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 11:49:57", "flickr_url": "http://farm7.staticflickr.com/6188/6028822795_b1ab5e9d38_z.jpg", "id": 125062}, {"license": 4, "file_name": "000000375015.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000375015.jpg", "height": 404, "width": 640, "date_captured": "2013-11-18 13:47:37", "flickr_url": "http://farm9.staticflickr.com/8043/8137199999_ab9bacf07c_z.jpg", "id": 375015}, {"license": 3, "file_name": "000000334719.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000334719.jpg", "height": 413, "width": 640, "date_captured": "2013-11-18 14:04:20", "flickr_url": "http://farm3.staticflickr.com/2681/4362064526_f4dd6a1055_z.jpg", "id": 334719}, {"license": 3, "file_name": "000000134112.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000134112.jpg", "height": 357, "width": 500, "date_captured": "2013-11-18 15:23:07", "flickr_url": "http://farm3.staticflickr.com/2097/1940416413_e5833296ae_z.jpg", "id": 134112}, {"license": 4, "file_name": "000000283520.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000283520.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 18:30:17", "flickr_url": "http://farm5.staticflickr.com/4002/4509187424_dcc08316ed_z.jpg", "id": 283520}, {"license": 1, "file_name": "000000031269.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000031269.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 21:26:03", "flickr_url": "http://farm2.staticflickr.com/1098/1250662377_e9927a2c9d_z.jpg", "id": 31269}, {"license": 3, "file_name": "000000319721.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000319721.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 01:20:32", "flickr_url": "http://farm8.staticflickr.com/7316/9291897001_d08e0a166d_z.jpg", "id": 319721}, {"license": 3, "file_name": "000000165351.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000165351.jpg", "height": 612, "width": 612, "date_captured": "2013-11-19 18:27:03", "flickr_url": "http://farm3.staticflickr.com/2469/5847066665_a3a723b346_z.jpg", "id": 165351}, {"license": 1, "file_name": "000000347265.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000347265.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 19:18:49", "flickr_url": "http://farm9.staticflickr.com/8199/8185562472_d772716394_z.jpg", "id": 347265}, {"license": 1, "file_name": "000000414170.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000414170.jpg", "height": 640, "width": 425, "date_captured": "2013-11-19 19:45:21", "flickr_url": "http://farm9.staticflickr.com/8241/8662541989_107da95562_z.jpg", "id": 414170}, {"license": 4, "file_name": "000000231508.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000231508.jpg", "height": 500, "width": 335, "date_captured": "2013-11-19 20:08:44", "flickr_url": "http://farm3.staticflickr.com/2518/3693441995_2118879151_z.jpg", "id": 231508}, {"license": 4, "file_name": "000000389381.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000389381.jpg", "height": 543, "width": 640, "date_captured": "2013-11-19 20:29:00", "flickr_url": "http://farm3.staticflickr.com/2544/4007091102_031486bd66_z.jpg", "id": 389381}, {"license": 1, "file_name": "000000118921.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000118921.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 20:36:11", "flickr_url": "http://farm9.staticflickr.com/8494/8321626453_2a93c92a4d_z.jpg", "id": 118921}, {"license": 2, "file_name": "000000021503.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000021503.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 21:21:06", "flickr_url": "http://farm1.staticflickr.com/166/357634751_ac81ea653a_z.jpg", "id": 21503}, {"license": 4, "file_name": "000000000785.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000000785.jpg", "height": 425, "width": 640, "date_captured": "2013-11-19 21:22:42", "flickr_url": "http://farm8.staticflickr.com/7015/6795644157_f019453ae7_z.jpg", "id": 785}, {"license": 1, "file_name": "000000300842.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000300842.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 21:55:59", "flickr_url": "http://farm3.staticflickr.com/2341/1989583502_2b0b151c71_z.jpg", "id": 300842}, {"license": 4, "file_name": "000000105014.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000105014.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 22:33:46", "flickr_url": "http://farm8.staticflickr.com/7068/6933079123_192a8798bf_z.jpg", "id": 105014}, {"license": 5, "file_name": "000000261982.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000261982.jpg", "height": 640, "width": 457, "date_captured": "2013-11-19 23:18:55", "flickr_url": "http://farm3.staticflickr.com/2275/2532435475_b4ed8b2efb_z.jpg", "id": 261982}, {"license": 4, "file_name": "000000034205.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000034205.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 23:26:40", "flickr_url": "http://farm4.staticflickr.com/3308/3287106236_e87a7242be_z.jpg", "id": 34205}, {"license": 1, "file_name": "000000099242.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000099242.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 23:49:02", "flickr_url": "http://farm5.staticflickr.com/4062/4618354279_3f5d01f9fb_z.jpg", "id": 99242}, {"license": 1, "file_name": "000000314709.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000314709.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 23:49:07", "flickr_url": "http://farm5.staticflickr.com/4035/4618354537_b1fe1f532c_z.jpg", "id": 314709}, {"license": 3, "file_name": "000000460494.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000460494.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 01:15:28", "flickr_url": "http://farm1.staticflickr.com/43/106359933_8ba0d1ac1f_z.jpg", "id": 460494}, {"license": 1, "file_name": "000000339442.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000339442.jpg", "height": 640, "width": 523, "date_captured": "2013-11-20 01:45:52", "flickr_url": "http://farm3.staticflickr.com/2759/4071377952_a72fb3c742_z.jpg", "id": 339442}, {"license": 4, "file_name": "000000541055.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000541055.jpg", "height": 360, "width": 640, "date_captured": "2013-11-20 06:34:16", "flickr_url": "http://farm4.staticflickr.com/3598/3465325303_2a5f83799f_z.jpg", "id": 541055}, {"license": 4, "file_name": "000000409475.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000409475.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 07:11:56", "flickr_url": "http://farm4.staticflickr.com/3541/3404640306_5487b904da_z.jpg", "id": 409475}, {"license": 4, "file_name": "000000464786.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000464786.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 12:58:11", "flickr_url": "http://farm3.staticflickr.com/2463/3824077883_b53d4d7506_z.jpg", "id": 464786}, {"license": 3, "file_name": "000000378605.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000378605.jpg", "height": 640, "width": 426, "date_captured": "2013-11-20 16:46:32", "flickr_url": "http://farm3.staticflickr.com/2695/4218308004_67137a2e53_z.jpg", "id": 378605}, {"license": 3, "file_name": "000000331817.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000331817.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 18:12:19", "flickr_url": "http://farm1.staticflickr.com/54/151755422_eae2fa5dd8_z.jpg", "id": 331817}, {"license": 5, "file_name": "000000218091.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000218091.jpg", "height": 429, "width": 640, "date_captured": "2013-11-20 22:16:55", "flickr_url": "http://farm5.staticflickr.com/4154/5033065824_d526130e36_z.jpg", "id": 218091}, {"license": 1, "file_name": "000000578545.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000578545.jpg", "height": 474, "width": 640, "date_captured": "2013-11-20 22:20:45", "flickr_url": "http://farm8.staticflickr.com/7165/6790593405_88e4050767_z.jpg", "id": 578545}, {"license": 2, "file_name": "000000363207.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000363207.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 22:56:32", "flickr_url": "http://farm9.staticflickr.com/8441/7766680378_6621026109_z.jpg", "id": 363207}, {"license": 2, "file_name": "000000372577.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000372577.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 03:41:33", "flickr_url": "http://farm8.staticflickr.com/7051/6883383043_90d024b477_z.jpg", "id": 372577}, {"license": 3, "file_name": "000000212166.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000212166.jpg", "height": 612, "width": 612, "date_captured": "2013-11-21 03:58:32", "flickr_url": "http://farm3.staticflickr.com/2363/5745905418_13360dd210_z.jpg", "id": 212166}, {"license": 1, "file_name": "000000172571.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000172571.jpg", "height": 361, "width": 640, "date_captured": "2013-11-21 04:24:05", "flickr_url": "http://farm6.staticflickr.com/5101/5593927388_ef06e5c821_z.jpg", "id": 172571}, {"license": 1, "file_name": "000000294831.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000294831.jpg", "height": 361, "width": 640, "date_captured": "2013-11-21 04:46:16", "flickr_url": "http://farm6.staticflickr.com/5205/5325391398_e53c66f2ff_z.jpg", "id": 294831}, {"license": 1, "file_name": "000000084431.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000084431.jpg", "height": 640, "width": 361, "date_captured": "2013-11-21 04:46:21", "flickr_url": "http://farm6.staticflickr.com/5130/5347802144_547c922607_z.jpg", "id": 84431}, {"license": 4, "file_name": "000000323355.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000323355.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 04:49:51", "flickr_url": "http://farm6.staticflickr.com/5165/5241297935_1dcda049cf_z.jpg", "id": 323355}, {"license": 3, "file_name": "000000355325.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000355325.jpg", "height": 640, "width": 478, "date_captured": "2013-11-21 05:32:56", "flickr_url": "http://farm5.staticflickr.com/4075/4765748189_9e8c7226c1_z.jpg", "id": 355325}, {"license": 4, "file_name": "000000100582.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000100582.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 05:34:15", "flickr_url": "http://farm5.staticflickr.com/4006/4707927889_a5a966361e_z.jpg", "id": 100582}, {"license": 4, "file_name": "000000555412.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000555412.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 05:34:18", "flickr_url": "http://farm2.staticflickr.com/1287/4708570836_62cae13ef6_z.jpg", "id": 555412}, {"license": 3, "file_name": "000000004495.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000004495.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 00:44:27", "flickr_url": "http://farm3.staticflickr.com/2678/4420039562_721e7e2780_z.jpg", "id": 4495}, {"license": 4, "file_name": "000000009483.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000009483.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 01:06:09", "flickr_url": "http://farm4.staticflickr.com/3179/2986591710_d76622fdf0_z.jpg", "id": 9483}, {"license": 3, "file_name": "000000326082.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000326082.jpg", "height": 426, "width": 640, "date_captured": "2013-11-22 03:09:17", "flickr_url": "http://farm4.staticflickr.com/3613/3280547594_b8d6ca0d4f_z.jpg", "id": 326082}, {"license": 3, "file_name": "000000398237.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000398237.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 18:04:39", "flickr_url": "http://farm4.staticflickr.com/3152/2910558665_17b839eca7_z.jpg", "id": 398237}, {"license": 4, "file_name": "000000507223.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000507223.jpg", "height": 640, "width": 480, "date_captured": "2013-11-22 21:36:30", "flickr_url": "http://farm2.staticflickr.com/1404/1307049889_f157382a16_z.jpg", "id": 507223}, {"license": 3, "file_name": "000000031050.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000031050.jpg", "height": 640, "width": 427, "date_captured": "2013-11-22 22:33:50", "flickr_url": "http://farm7.staticflickr.com/6095/6213743903_747edef905_z.jpg", "id": 31050}, {"license": 4, "file_name": "000000239537.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000239537.jpg", "height": 436, "width": 640, "date_captured": "2013-11-23 05:25:11", "flickr_url": "http://farm1.staticflickr.com/104/297638599_e2ac523aff_z.jpg", "id": 239537}, {"license": 3, "file_name": "000000340930.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000340930.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 04:15:59", "flickr_url": "http://farm4.staticflickr.com/3350/3235402813_24c9ac78b3_z.jpg", "id": 340930}, {"license": 2, "file_name": "000000011813.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000011813.jpg", "height": 500, "width": 333, "date_captured": "2013-11-24 04:49:37", "flickr_url": "http://farm4.staticflickr.com/3545/3411897599_c3ae826bbb_z.jpg", "id": 11813}, {"license": 3, "file_name": "000000281414.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000281414.jpg", "height": 640, "width": 443, "date_captured": "2013-11-24 05:38:18", "flickr_url": "http://farm6.staticflickr.com/5105/5597870429_3cb9b03414_z.jpg", "id": 281414}, {"license": 4, "file_name": "000000537991.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000537991.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 09:25:05", "flickr_url": "http://farm1.staticflickr.com/136/317343650_bcd1ba28ef_z.jpg", "id": 537991}, {"license": 1, "file_name": "000000284282.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000284282.jpg", "height": 333, "width": 500, "date_captured": "2013-11-24 12:50:41", "flickr_url": "http://farm2.staticflickr.com/1286/537535416_0a4f3045d4_z.jpg", "id": 284282}, {"license": 1, "file_name": "000000321333.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000321333.jpg", "height": 397, "width": 640, "date_captured": "2013-11-24 14:56:45", "flickr_url": "http://farm9.staticflickr.com/8449/8028181027_7fbb4afcb0_z.jpg", "id": 321333}, {"license": 1, "file_name": "000000521282.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000521282.jpg", "height": 640, "width": 424, "date_captured": "2013-11-24 18:50:45", "flickr_url": "http://farm8.staticflickr.com/7184/6839778174_3a43e75b97_z.jpg", "id": 521282}, {"license": 3, "file_name": "000000108026.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000108026.jpg", "height": 428, "width": 640, "date_captured": "2013-11-14 14:54:28", "flickr_url": "http://farm6.staticflickr.com/5041/5255056541_b6118e8a12_z.jpg", "id": 108026}, {"license": 1, "file_name": "000000243204.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000243204.jpg", "height": 640, "width": 480, "date_captured": "2013-11-14 20:37:25", "flickr_url": "http://farm4.staticflickr.com/3039/3110436903_34d28b5c9f_z.jpg", "id": 243204}, {"license": 1, "file_name": "000000177935.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000177935.jpg", "height": 640, "width": 480, "date_captured": "2013-11-14 21:13:20", "flickr_url": "http://farm5.staticflickr.com/4074/4873500999_516edc498a_z.jpg", "id": 177935}, {"license": 1, "file_name": "000000038829.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000038829.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 04:27:18", "flickr_url": "http://farm8.staticflickr.com/7033/6799538227_e49c4d13bc_z.jpg", "id": 38829}, {"license": 3, "file_name": "000000397327.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000397327.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 04:30:46", "flickr_url": "http://farm6.staticflickr.com/5188/5635952871_85da65c4e2_z.jpg", "id": 397327}, {"license": 1, "file_name": "000000501523.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000501523.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 06:43:39", "flickr_url": "http://farm3.staticflickr.com/2366/2120032404_e952360121_z.jpg", "id": 501523}, {"license": 3, "file_name": "000000555050.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000555050.jpg", "height": 322, "width": 500, "date_captured": "2013-11-15 08:44:31", "flickr_url": "http://farm1.staticflickr.com/19/120809983_4dc1f08f56_z.jpg", "id": 555050}, {"license": 3, "file_name": "000000376442.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000376442.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 11:26:57", "flickr_url": "http://farm4.staticflickr.com/3159/2973910210_91fbb8bc61_z.jpg", "id": 376442}, {"license": 3, "file_name": "000000187243.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000187243.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 11:48:17", "flickr_url": "http://farm1.staticflickr.com/133/318627329_a0d8465c84_z.jpg", "id": 187243}, {"license": 3, "file_name": "000000356347.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000356347.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 13:04:42", "flickr_url": "http://farm7.staticflickr.com/6164/6209908148_5f3f3391dd_z.jpg", "id": 356347}, {"license": 5, "file_name": "000000293044.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000293044.jpg", "height": 160, "width": 288, "date_captured": "2013-11-15 13:46:30", "flickr_url": "http://farm5.staticflickr.com/4028/4321379116_c1041e88b2_z.jpg", "id": 293044}, {"license": 2, "file_name": "000000560279.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000560279.jpg", "height": 612, "width": 612, "date_captured": "2013-11-15 14:18:31", "flickr_url": "http://farm9.staticflickr.com/8238/8370118697_3fc6f4a5a9_z.jpg", "id": 560279}, {"license": 1, "file_name": "000000042276.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000042276.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 14:50:03", "flickr_url": "http://farm4.staticflickr.com/3402/3222050227_9d084b535e_z.jpg", "id": 42276}, {"license": 1, "file_name": "000000534827.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000534827.jpg", "height": 612, "width": 612, "date_captured": "2013-11-15 16:56:30", "flickr_url": "http://farm9.staticflickr.com/8262/8608658945_3b575a8c0e_z.jpg", "id": 534827}, {"license": 3, "file_name": "000000190756.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000190756.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 18:52:01", "flickr_url": "http://farm9.staticflickr.com/8445/7985121818_3702a8b99f_z.jpg", "id": 190756}, {"license": 1, "file_name": "000000482917.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000482917.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 22:57:08", "flickr_url": "http://farm3.staticflickr.com/2380/2066644763_e0c9fc9c1d_z.jpg", "id": 482917}, {"license": 3, "file_name": "000000300659.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000300659.jpg", "height": 360, "width": 640, "date_captured": "2013-11-16 02:24:48", "flickr_url": "http://farm9.staticflickr.com/8461/8003627865_b8fe9eb19a_z.jpg", "id": 300659}, {"license": 3, "file_name": "000000199977.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000199977.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 02:58:49", "flickr_url": "http://farm7.staticflickr.com/6015/5974271225_20bac3f897_z.jpg", "id": 199977}, {"license": 1, "file_name": "000000442480.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000442480.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 03:48:12", "flickr_url": "http://farm5.staticflickr.com/4109/5004277678_c2a9fe86b8_z.jpg", "id": 442480}, {"license": 3, "file_name": "000000384350.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000384350.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 05:03:00", "flickr_url": "http://farm5.staticflickr.com/4090/5088343862_0fb746fbbf_z.jpg", "id": 384350}, {"license": 1, "file_name": "000000383621.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000383621.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 12:07:35", "flickr_url": "http://farm3.staticflickr.com/2829/9023060587_b4d6c3d7c3_z.jpg", "id": 383621}, {"license": 1, "file_name": "000000189828.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000189828.jpg", "height": 612, "width": 612, "date_captured": "2013-11-16 12:40:17", "flickr_url": "http://farm6.staticflickr.com/5093/5539653637_073cf49390_z.jpg", "id": 189828}, {"license": 1, "file_name": "000000412894.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000412894.jpg", "height": 640, "width": 427, "date_captured": "2013-11-16 13:19:38", "flickr_url": "http://farm4.staticflickr.com/3328/3555613829_4553793426_z.jpg", "id": 412894}, {"license": 1, "file_name": "000000537153.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000537153.jpg", "height": 396, "width": 640, "date_captured": "2013-11-16 18:22:26", "flickr_url": "http://farm2.staticflickr.com/1219/1075650869_98f31da160_z.jpg", "id": 537153}, {"license": 1, "file_name": "000000361103.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000361103.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 19:11:34", "flickr_url": "http://farm4.staticflickr.com/3346/3556435620_b1787e8b2d_z.jpg", "id": 361103}, {"license": 4, "file_name": "000000392722.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000392722.jpg", "height": 423, "width": 640, "date_captured": "2013-11-16 19:30:46", "flickr_url": "http://farm3.staticflickr.com/2829/9953419346_8bcbd5480f_z.jpg", "id": 392722}, {"license": 4, "file_name": "000000338560.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000338560.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 21:26:39", "flickr_url": "http://farm5.staticflickr.com/4044/4583091116_28eaab2a2b_z.jpg", "id": 338560}, {"license": 3, "file_name": "000000264535.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000264535.jpg", "height": 612, "width": 612, "date_captured": "2013-11-16 22:02:31", "flickr_url": "http://farm9.staticflickr.com/8465/8102550190_11b2996e33_z.jpg", "id": 264535}, {"license": 1, "file_name": "000000295231.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000295231.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 22:55:36", "flickr_url": "http://farm4.staticflickr.com/3056/5868051368_6ace5b29dc_z.jpg", "id": 295231}, {"license": 1, "file_name": "000000154947.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000154947.jpg", "height": 640, "width": 640, "date_captured": "2013-11-16 22:57:32", "flickr_url": "http://farm6.staticflickr.com/5032/5868053808_36d3552cf7_z.jpg", "id": 154947}, {"license": 1, "file_name": "000000212559.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000212559.jpg", "height": 528, "width": 640, "date_captured": "2013-11-16 23:00:57", "flickr_url": "http://farm6.staticflickr.com/5271/5878456251_205804b76b_z.jpg", "id": 212559}, {"license": 1, "file_name": "000000458755.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000458755.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 23:06:51", "flickr_url": "http://farm6.staticflickr.com/5119/5878453277_eea657a01d_z.jpg", "id": 458755}, {"license": 3, "file_name": "000000104782.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000104782.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 23:48:58", "flickr_url": "http://farm2.staticflickr.com/1326/1444815814_d3c7cf0cc9_z.jpg", "id": 104782}, {"license": 1, "file_name": "000000315257.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000315257.jpg", "height": 514, "width": 640, "date_captured": "2013-11-16 23:59:37", "flickr_url": "http://farm6.staticflickr.com/5225/5636500924_8b7353ab9b_z.jpg", "id": 315257}, {"license": 1, "file_name": "000000130599.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000130599.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 00:01:15", "flickr_url": "http://farm4.staticflickr.com/3217/2969208664_9558945783_z.jpg", "id": 130599}, {"license": 1, "file_name": "000000227187.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000227187.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 00:08:31", "flickr_url": "http://farm6.staticflickr.com/5106/5687812547_1363172f7c_z.jpg", "id": 227187}, {"license": 3, "file_name": "000000151662.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000151662.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 01:29:47", "flickr_url": "http://farm1.staticflickr.com/113/267451555_b7307c4db3_z.jpg", "id": 151662}, {"license": 3, "file_name": "000000461275.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000461275.jpg", "height": 335, "width": 500, "date_captured": "2013-11-17 02:13:52", "flickr_url": "http://farm2.staticflickr.com/1094/1484449429_2b35da1432_z.jpg", "id": 461275}, {"license": 2, "file_name": "000000523811.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000523811.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 04:36:42", "flickr_url": "http://farm4.staticflickr.com/3708/9701523415_452b248d45_z.jpg", "id": 523811}, {"license": 3, "file_name": "000000456559.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000456559.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 05:11:57", "flickr_url": "http://farm1.staticflickr.com/215/469140878_2c5d362ede_z.jpg", "id": 456559}, {"license": 3, "file_name": "000000101068.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000101068.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 05:34:11", "flickr_url": "http://farm7.staticflickr.com/6132/5930393634_fe30cb42ce_z.jpg", "id": 101068}, {"license": 3, "file_name": "000000140640.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000140640.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 06:08:28", "flickr_url": "http://farm6.staticflickr.com/5266/5673769591_868010e4fb_z.jpg", "id": 140640}, {"license": 2, "file_name": "000000516708.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000516708.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 06:43:13", "flickr_url": "http://farm2.staticflickr.com/1369/875666939_d4b9e4527b_z.jpg", "id": 516708}, {"license": 3, "file_name": "000000544605.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000544605.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 07:32:18", "flickr_url": "http://farm1.staticflickr.com/12/14849649_e5ef378490_z.jpg", "id": 544605}, {"license": 3, "file_name": "000000385190.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000385190.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 07:34:46", "flickr_url": "http://farm1.staticflickr.com/8/9866165_edace5a9ef_z.jpg", "id": 385190}, {"license": 4, "file_name": "000000338986.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000338986.jpg", "height": 640, "width": 403, "date_captured": "2013-11-17 10:11:26", "flickr_url": "http://farm8.staticflickr.com/7284/8715827786_9ffcac1fa5_z.jpg", "id": 338986}, {"license": 4, "file_name": "000000053994.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000053994.jpg", "height": 640, "width": 481, "date_captured": "2013-11-17 11:12:37", "flickr_url": "http://farm4.staticflickr.com/3187/2851509696_0dd310fd82_z.jpg", "id": 53994}, {"license": 3, "file_name": "000000061171.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000061171.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 16:11:34", "flickr_url": "http://farm1.staticflickr.com/127/387329414_d6bf6ec7f0_z.jpg", "id": 61171}, {"license": 2, "file_name": "000000314034.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000314034.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 18:13:38", "flickr_url": "http://farm9.staticflickr.com/8313/8063248628_69b80d44c1_z.jpg", "id": 314034}, {"license": 1, "file_name": "000000291490.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000291490.jpg", "height": 393, "width": 640, "date_captured": "2013-11-17 19:55:10", "flickr_url": "http://farm8.staticflickr.com/7435/9089928284_9d723bfaca_z.jpg", "id": 291490}, {"license": 6, "file_name": "000000152740.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000152740.jpg", "height": 331, "width": 640, "date_captured": "2013-11-18 00:44:24", "flickr_url": "http://farm5.staticflickr.com/4149/5093961450_d8c840d0d2_z.jpg", "id": 152740}, {"license": 2, "file_name": "000000024919.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000024919.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 01:05:25", "flickr_url": "http://farm9.staticflickr.com/8488/8194995738_52301f2a4b_z.jpg", "id": 24919}, {"license": 1, "file_name": "000000079837.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000079837.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 04:10:29", "flickr_url": "http://farm4.staticflickr.com/3807/9817151296_f830096115_z.jpg", "id": 79837}, {"license": 4, "file_name": "000000021903.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000021903.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 04:47:48", "flickr_url": "http://farm9.staticflickr.com/8088/8456686192_fccee8c5bb_z.jpg", "id": 21903}, {"license": 4, "file_name": "000000564133.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000564133.jpg", "height": 424, "width": 640, "date_captured": "2013-11-18 05:08:50", "flickr_url": "http://farm9.staticflickr.com/8348/8197453784_a3be1b210e_z.jpg", "id": 564133}, {"license": 3, "file_name": "000000337055.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000337055.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 06:39:43", "flickr_url": "http://farm4.staticflickr.com/3316/3443286405_2225c965cb_z.jpg", "id": 337055}, {"license": 2, "file_name": "000000110638.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000110638.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 09:22:27", "flickr_url": "http://farm2.staticflickr.com/1291/4684541532_98d04fe14d_z.jpg", "id": 110638}, {"license": 2, "file_name": "000000034139.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000034139.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 09:26:46", "flickr_url": "http://farm4.staticflickr.com/3613/3354180876_078b54ff49_z.jpg", "id": 34139}, {"license": 1, "file_name": "000000080340.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000080340.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 09:36:51", "flickr_url": "http://farm4.staticflickr.com/3525/3785428433_dce97c2d9e_z.jpg", "id": 80340}, {"license": 2, "file_name": "000000083113.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000083113.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 09:42:26", "flickr_url": "http://farm4.staticflickr.com/3373/4600247394_f71c8745c3_z.jpg", "id": 83113}, {"license": 1, "file_name": "000000173033.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000173033.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 12:53:45", "flickr_url": "http://farm6.staticflickr.com/5543/9489245095_355d343972_z.jpg", "id": 173033}, {"license": 3, "file_name": "000000255664.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000255664.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 16:27:08", "flickr_url": "http://farm4.staticflickr.com/3541/3654380817_38b1b7bcc1_z.jpg", "id": 255664}, {"license": 1, "file_name": "000000072813.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000072813.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 16:29:04", "flickr_url": "http://farm3.staticflickr.com/2133/2057936101_02179c7b35_z.jpg", "id": 72813}, {"license": 2, "file_name": "000000545129.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000545129.jpg", "height": 373, "width": 500, "date_captured": "2013-11-18 20:06:02", "flickr_url": "http://farm4.staticflickr.com/3245/3098576612_e38a2b4b69_z.jpg", "id": 545129}, {"license": 2, "file_name": "000000546011.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000546011.jpg", "height": 334, "width": 500, "date_captured": "2013-11-18 21:09:13", "flickr_url": "http://farm3.staticflickr.com/2248/1830412403_1a3c2c1f19_z.jpg", "id": 546011}, {"license": 3, "file_name": "000000121031.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000121031.jpg", "height": 451, "width": 640, "date_captured": "2013-11-18 21:56:21", "flickr_url": "http://farm3.staticflickr.com/2639/3779781210_ffb22095d3_z.jpg", "id": 121031}, {"license": 1, "file_name": "000000172547.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000172547.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 00:47:26", "flickr_url": "http://farm6.staticflickr.com/5460/9472237717_ed0fb446cd_z.jpg", "id": 172547}, {"license": 1, "file_name": "000000369081.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000369081.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 01:52:54", "flickr_url": "http://farm8.staticflickr.com/7329/9024056258_4ebe22973d_z.jpg", "id": 369081}, {"license": 2, "file_name": "000000509131.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000509131.jpg", "height": 425, "width": 640, "date_captured": "2013-11-19 18:12:17", "flickr_url": "http://farm5.staticflickr.com/4107/5003452131_469ac3970d_z.jpg", "id": 509131}, {"license": 4, "file_name": "000000578922.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000578922.jpg", "height": 640, "width": 598, "date_captured": "2013-11-19 19:14:00", "flickr_url": "http://farm4.staticflickr.com/3185/3072908271_08764c732a_z.jpg", "id": 578922}, {"license": 2, "file_name": "000000464089.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000464089.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 19:29:02", "flickr_url": "http://farm6.staticflickr.com/5230/5601328261_e641f89373_z.jpg", "id": 464089}, {"license": 1, "file_name": "000000453708.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000453708.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 19:36:47", "flickr_url": "http://farm6.staticflickr.com/5107/5559810184_63a5d322fc_z.jpg", "id": 453708}, {"license": 3, "file_name": "000000177714.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000177714.jpg", "height": 409, "width": 640, "date_captured": "2013-11-19 20:25:12", "flickr_url": "http://farm5.staticflickr.com/4128/5045822242_a1021a1192_z.jpg", "id": 177714}, {"license": 3, "file_name": "000000459887.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000459887.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 20:54:21", "flickr_url": "http://farm6.staticflickr.com/5224/5606990845_a24f7232ca_z.jpg", "id": 459887}, {"license": 3, "file_name": "000000155179.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000155179.jpg", "height": 468, "width": 640, "date_captured": "2013-11-19 21:03:12", "flickr_url": "http://farm3.staticflickr.com/2673/3689865439_14d19e5896_z.jpg", "id": 155179}, {"license": 1, "file_name": "000000261116.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000261116.jpg", "height": 375, "width": 500, "date_captured": "2013-11-19 21:09:38", "flickr_url": "http://farm2.staticflickr.com/1226/686014029_426aa44a79_z.jpg", "id": 261116}, {"license": 3, "file_name": "000000396274.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000396274.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 21:40:14", "flickr_url": "http://farm5.staticflickr.com/4115/4934710564_ca62c05d23_z.jpg", "id": 396274}, {"license": 3, "file_name": "000000029640.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000029640.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 22:37:22", "flickr_url": "http://farm9.staticflickr.com/8020/7665173394_7fc414c346_z.jpg", "id": 29640}, {"license": 3, "file_name": "000000141328.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000141328.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 22:37:24", "flickr_url": "http://farm8.staticflickr.com/7271/7665149408_64b95ddd9c_z.jpg", "id": 141328}, {"license": 3, "file_name": "000000308430.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000308430.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 03:30:07", "flickr_url": "http://farm9.staticflickr.com/8017/7125364613_eb0c317be9_z.jpg", "id": 308430}, {"license": 4, "file_name": "000000043314.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000043314.jpg", "height": 376, "width": 500, "date_captured": "2013-11-20 04:19:27", "flickr_url": "http://farm3.staticflickr.com/2740/4393014030_48bc86c4f8_z.jpg", "id": 43314}, {"license": 4, "file_name": "000000273715.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000273715.jpg", "height": 373, "width": 500, "date_captured": "2013-11-20 06:58:19", "flickr_url": "http://farm4.staticflickr.com/3604/3441464864_01a70b2b99_z.jpg", "id": 273715}, {"license": 1, "file_name": "000000456303.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000456303.jpg", "height": 500, "width": 321, "date_captured": "2013-11-20 08:15:37", "flickr_url": "http://farm4.staticflickr.com/3548/3486135419_1de6865500_z.jpg", "id": 456303}, {"license": 3, "file_name": "000000406611.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000406611.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 09:16:10", "flickr_url": "http://farm4.staticflickr.com/3648/3305513686_25ab7a4c42_z.jpg", "id": 406611}, {"license": 1, "file_name": "000000475064.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000475064.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 13:16:30", "flickr_url": "http://farm8.staticflickr.com/7052/6837300500_1a7365be6a_z.jpg", "id": 475064}, {"license": 6, "file_name": "000000466567.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000466567.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 13:34:34", "flickr_url": "http://farm1.staticflickr.com/36/84179910_2231cc586c_z.jpg", "id": 466567}, {"license": 3, "file_name": "000000137246.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000137246.jpg", "height": 333, "width": 500, "date_captured": "2013-11-20 14:27:03", "flickr_url": "http://farm1.staticflickr.com/32/37536658_f1eeb11957_z.jpg", "id": 137246}, {"license": 3, "file_name": "000000015079.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000015079.jpg", "height": 424, "width": 640, "date_captured": "2013-11-20 14:57:40", "flickr_url": "http://farm8.staticflickr.com/7064/6970424809_69d949181f_z.jpg", "id": 15079}, {"license": 3, "file_name": "000000296284.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000296284.jpg", "height": 360, "width": 270, "date_captured": "2013-11-20 16:14:00", "flickr_url": "http://farm1.staticflickr.com/26/274560308_19b4fbbdb5_z.jpg", "id": 296284}, {"license": 1, "file_name": "000000226147.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000226147.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 16:50:17", "flickr_url": "http://farm5.staticflickr.com/4047/4650252315_a203496559_z.jpg", "id": 226147}, {"license": 1, "file_name": "000000226903.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000226903.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 17:52:46", "flickr_url": "http://farm4.staticflickr.com/3299/3509460833_f598d10a98_z.jpg", "id": 226903}, {"license": 3, "file_name": "000000127517.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000127517.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 18:09:30", "flickr_url": "http://farm5.staticflickr.com/4141/4854583693_23a66312b6_z.jpg", "id": 127517}, {"license": 1, "file_name": "000000162092.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000162092.jpg", "height": 640, "width": 640, "date_captured": "2013-11-20 18:09:50", "flickr_url": "http://farm9.staticflickr.com/8070/8154841450_5a9aa5956c_z.jpg", "id": 162092}, {"license": 3, "file_name": "000000131379.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000131379.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 19:24:33", "flickr_url": "http://farm4.staticflickr.com/3743/9020187303_22b1eba9a5_z.jpg", "id": 131379}, {"license": 2, "file_name": "000000366611.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000366611.jpg", "height": 478, "width": 640, "date_captured": "2013-11-20 20:28:17", "flickr_url": "http://farm9.staticflickr.com/8211/8266705418_f3fab722b4_z.jpg", "id": 366611}, {"license": 4, "file_name": "000000263969.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000263969.jpg", "height": 610, "width": 640, "date_captured": "2013-11-20 20:29:19", "flickr_url": "http://farm8.staticflickr.com/7307/8735597371_053c077264_z.jpg", "id": 263969}, {"license": 6, "file_name": "000000551439.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000551439.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 22:19:55", "flickr_url": "http://farm4.staticflickr.com/3249/3113939181_e7ca0d0198_z.jpg", "id": 551439}, {"license": 1, "file_name": "000000474167.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000474167.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 23:47:23", "flickr_url": "http://farm3.staticflickr.com/2676/3983126748_dee4ecb24b_z.jpg", "id": 474167}, {"license": 3, "file_name": "000000159458.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000159458.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 01:25:21", "flickr_url": "http://farm8.staticflickr.com/7097/7336770394_729445d85e_z.jpg", "id": 159458}, {"license": 3, "file_name": "000000554735.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000554735.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 02:00:04", "flickr_url": "http://farm9.staticflickr.com/8345/8228121843_00eb18a1d8_z.jpg", "id": 554735}, {"license": 1, "file_name": "000000099428.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000099428.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 02:42:40", "flickr_url": "http://farm4.staticflickr.com/3300/4594580423_56a349bdf0_z.jpg", "id": 99428}, {"license": 5, "file_name": "000000386352.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000386352.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 03:32:22", "flickr_url": "http://farm8.staticflickr.com/7054/7105320959_32647b8dc0_z.jpg", "id": 386352}, {"license": 3, "file_name": "000000173004.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000173004.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 04:23:31", "flickr_url": "http://farm6.staticflickr.com/5135/5585650249_cb428bb571_z.jpg", "id": 173004}, {"license": 1, "file_name": "000000311394.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000311394.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 20:04:17", "flickr_url": "http://farm4.staticflickr.com/3396/3564670096_f535ff05d2_z.jpg", "id": 311394}, {"license": 2, "file_name": "000000578489.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000578489.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 21:31:20", "flickr_url": "http://farm4.staticflickr.com/3388/3181988690_e57523711f_z.jpg", "id": 578489}, {"license": 4, "file_name": "000000189310.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000189310.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 22:04:50", "flickr_url": "http://farm9.staticflickr.com/8148/7375894572_1691d84002_z.jpg", "id": 189310}, {"license": 5, "file_name": "000000491366.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000491366.jpg", "height": 375, "width": 500, "date_captured": "2013-11-21 22:07:12", "flickr_url": "http://farm4.staticflickr.com/3031/2548567657_4f81a39e0f_z.jpg", "id": 491366}, {"license": 4, "file_name": "000000448076.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000448076.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 22:12:28", "flickr_url": "http://farm3.staticflickr.com/2125/2260856815_0c9c098fdd_z.jpg", "id": 448076}, {"license": 4, "file_name": "000000293804.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000293804.jpg", "height": 333, "width": 500, "date_captured": "2013-11-22 01:05:24", "flickr_url": "http://farm5.staticflickr.com/4025/4271070755_87bb15d4fa_z.jpg", "id": 293804}, {"license": 1, "file_name": "000000312237.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000312237.jpg", "height": 334, "width": 500, "date_captured": "2013-11-22 08:36:35", "flickr_url": "http://farm4.staticflickr.com/3206/2753274963_8e7e91dd77_z.jpg", "id": 312237}, {"license": 3, "file_name": "000000221291.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000221291.jpg", "height": 500, "width": 335, "date_captured": "2013-11-22 09:11:51", "flickr_url": "http://farm1.staticflickr.com/254/519398801_f9b8e32a24_z.jpg", "id": 221291}, {"license": 2, "file_name": "000000141821.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000141821.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 02:50:37", "flickr_url": "http://farm5.staticflickr.com/4055/4539061922_329b167562_z.jpg", "id": 141821}, {"license": 2, "file_name": "000000410650.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000410650.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 03:05:00", "flickr_url": "http://farm3.staticflickr.com/2557/3788244718_07ce61e7f6_z.jpg", "id": 410650}, {"license": 1, "file_name": "000000199310.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000199310.jpg", "height": 640, "width": 427, "date_captured": "2013-11-23 03:19:04", "flickr_url": "http://farm4.staticflickr.com/3332/3557978366_3d22bc356d_z.jpg", "id": 199310}, {"license": 3, "file_name": "000000323151.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000323151.jpg", "height": 640, "width": 480, "date_captured": "2013-11-23 04:05:15", "flickr_url": "http://farm3.staticflickr.com/2554/3883019651_7ac16ee983_z.jpg", "id": 323151}, {"license": 1, "file_name": "000000089648.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000089648.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 00:56:58", "flickr_url": "http://farm7.staticflickr.com/6168/6148670625_1caaf41c72_z.jpg", "id": 89648}, {"license": 1, "file_name": "000000219283.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000219283.jpg", "height": 500, "width": 500, "date_captured": "2013-11-24 02:36:00", "flickr_url": "http://farm1.staticflickr.com/82/206568045_d49a4859ca_z.jpg", "id": 219283}, {"license": 2, "file_name": "000000471869.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000471869.jpg", "height": 500, "width": 413, "date_captured": "2013-11-24 03:02:49", "flickr_url": "http://farm3.staticflickr.com/2112/2499379494_3fe784ffd0_z.jpg", "id": 471869}, {"license": 3, "file_name": "000000520264.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000520264.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 04:19:36", "flickr_url": "http://farm8.staticflickr.com/7230/7333542690_fc98a34335_z.jpg", "id": 520264}, {"license": 5, "file_name": "000000111179.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000111179.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 06:22:49", "flickr_url": "http://farm6.staticflickr.com/5014/5550677677_275729bf01_z.jpg", "id": 111179}, {"license": 2, "file_name": "000000151000.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000151000.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 08:41:06", "flickr_url": "http://farm3.staticflickr.com/2476/3545740797_7fcddd8929_z.jpg", "id": 151000}, {"license": 4, "file_name": "000000100624.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000100624.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 09:09:26", "flickr_url": "http://farm3.staticflickr.com/2035/1874994806_da5fee8f5a_z.jpg", "id": 100624}, {"license": 2, "file_name": "000000332570.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000332570.jpg", "height": 500, "width": 390, "date_captured": "2013-11-24 09:58:57", "flickr_url": "http://farm2.staticflickr.com/1051/1392968224_0f863f4054_z.jpg", "id": 332570}, {"license": 3, "file_name": "000000057238.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000057238.jpg", "height": 500, "width": 375, "date_captured": "2013-11-24 11:16:51", "flickr_url": "http://farm1.staticflickr.com/62/154800481_380c557e80_z.jpg", "id": 57238}, {"license": 3, "file_name": "000000502732.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000502732.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 11:36:04", "flickr_url": "http://farm3.staticflickr.com/2655/4123686976_97e295dce3_z.jpg", "id": 502732}, {"license": 2, "file_name": "000000135561.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000135561.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 12:25:02", "flickr_url": "http://farm1.staticflickr.com/41/123820091_702d1d2750_z.jpg", "id": 135561}, {"license": 2, "file_name": "000000008277.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000008277.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 14:31:33", "flickr_url": "http://farm8.staticflickr.com/7298/9145149580_87e4c26baa_z.jpg", "id": 8277}, {"license": 2, "file_name": "000000173044.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000173044.jpg", "height": 640, "width": 359, "date_captured": "2013-11-24 15:35:21", "flickr_url": "http://farm9.staticflickr.com/8297/8003762632_92659e7155_z.jpg", "id": 173044}, {"license": 3, "file_name": "000000168458.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000168458.jpg", "height": 640, "width": 425, "date_captured": "2013-11-24 19:03:25", "flickr_url": "http://farm6.staticflickr.com/5102/5655211913_379094f736_z.jpg", "id": 168458}, {"license": 2, "file_name": "000000512194.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000512194.jpg", "height": 476, "width": 640, "date_captured": "2013-11-24 19:33:24", "flickr_url": "http://farm4.staticflickr.com/3010/3000683334_abdf5ae0a1_z.jpg", "id": 512194}, {"license": 3, "file_name": "000000370042.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000370042.jpg", "height": 356, "width": 640, "date_captured": "2013-11-24 19:53:49", "flickr_url": "http://farm3.staticflickr.com/2316/2133976733_7202100481_z.jpg", "id": 370042}, {"license": 1, "file_name": "000000189436.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000189436.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 21:53:22", "flickr_url": "http://farm7.staticflickr.com/6009/5992565553_3f65c6839f_z.jpg", "id": 189436}, {"license": 3, "file_name": "000000533958.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000533958.jpg", "height": 640, "width": 640, "date_captured": "2013-11-25 00:03:08", "flickr_url": "http://farm9.staticflickr.com/8380/8465913901_8eafbc3b6c_z.jpg", "id": 533958}, {"license": 2, "file_name": "000000117645.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000117645.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 16:58:54", "flickr_url": "http://farm3.staticflickr.com/2217/2241489234_64a688d9b9_z.jpg", "id": 117645}, {"license": 3, "file_name": "000000221708.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000221708.jpg", "height": 640, "width": 480, "date_captured": "2013-11-14 21:33:45", "flickr_url": "http://farm8.staticflickr.com/7165/6633214697_49a43a19ca_z.jpg", "id": 221708}, {"license": 3, "file_name": "000000202228.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000202228.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 00:14:04", "flickr_url": "http://farm4.staticflickr.com/3537/3412698746_62fbea853f_z.jpg", "id": 202228}, {"license": 3, "file_name": "000000403565.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000403565.jpg", "height": 640, "width": 447, "date_captured": "2013-11-15 00:40:37", "flickr_url": "http://farm4.staticflickr.com/3103/2561406947_c13271356e_z.jpg", "id": 403565}, {"license": 3, "file_name": "000000211042.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000211042.jpg", "height": 640, "width": 458, "date_captured": "2013-11-15 04:00:44", "flickr_url": "http://farm4.staticflickr.com/3132/2552452631_f66003e08c_z.jpg", "id": 211042}, {"license": 1, "file_name": "000000492878.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000492878.jpg", "height": 640, "width": 640, "date_captured": "2013-11-15 04:27:09", "flickr_url": "http://farm5.staticflickr.com/4074/4853968972_dfb8b372ed_z.jpg", "id": 492878}, {"license": 1, "file_name": "000000441586.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000441586.jpg", "height": 425, "width": 640, "date_captured": "2013-11-15 04:28:45", "flickr_url": "http://farm5.staticflickr.com/4086/4969727396_448f592a54_z.jpg", "id": 441586}, {"license": 3, "file_name": "000000547816.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000547816.jpg", "height": 640, "width": 427, "date_captured": "2013-11-15 04:37:12", "flickr_url": "http://farm6.staticflickr.com/5269/5635497496_fcc2493179_z.jpg", "id": 547816}, {"license": 3, "file_name": "000000306733.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000306733.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 04:56:04", "flickr_url": "http://farm6.staticflickr.com/5217/5538841372_569150936c_z.jpg", "id": 306733}, {"license": 1, "file_name": "000000530099.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000530099.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 07:14:25", "flickr_url": "http://farm1.staticflickr.com/26/45673753_cb341da776_z.jpg", "id": 530099}, {"license": 3, "file_name": "000000312278.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000312278.jpg", "height": 293, "width": 640, "date_captured": "2013-11-15 11:27:42", "flickr_url": "http://farm7.staticflickr.com/6215/6270825051_9eb6f04e10_z.jpg", "id": 312278}, {"license": 4, "file_name": "000000097679.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000097679.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 11:37:24", "flickr_url": "http://farm3.staticflickr.com/2215/2727641554_ea1cca26c2_z.jpg", "id": 97679}, {"license": 1, "file_name": "000000564127.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000564127.jpg", "height": 640, "width": 428, "date_captured": "2013-11-15 12:00:10", "flickr_url": "http://farm4.staticflickr.com/3192/2976450554_71b0f5c090_z.jpg", "id": 564127}, {"license": 1, "file_name": "000000251065.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000251065.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 13:15:27", "flickr_url": "http://farm9.staticflickr.com/8007/7445664296_17c5d59c1c_z.jpg", "id": 251065}, {"license": 2, "file_name": "000000003845.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000003845.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 14:06:05", "flickr_url": "http://farm1.staticflickr.com/221/492343191_d3a6407668_z.jpg", "id": 3845}, {"license": 1, "file_name": "000000138819.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000138819.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 14:12:43", "flickr_url": "http://farm1.staticflickr.com/71/218196194_4e9a5efec4_z.jpg", "id": 138819}, {"license": 3, "file_name": "000000205834.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000205834.jpg", "height": 428, "width": 640, "date_captured": "2013-11-15 17:27:21", "flickr_url": "http://farm4.staticflickr.com/3045/2558991707_6b7b384382_z.jpg", "id": 205834}, {"license": 4, "file_name": "000000348708.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000348708.jpg", "height": 640, "width": 383, "date_captured": "2013-11-15 18:31:29", "flickr_url": "http://farm5.staticflickr.com/4145/5435483128_849e37a0dd_z.jpg", "id": 348708}, {"license": 3, "file_name": "000000166521.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000166521.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 23:55:25", "flickr_url": "http://farm3.staticflickr.com/2055/2149667542_c7a4880e39_z.jpg", "id": 166521}, {"license": 1, "file_name": "000000485802.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000485802.jpg", "height": 640, "width": 426, "date_captured": "2013-11-16 02:48:09", "flickr_url": "http://farm7.staticflickr.com/6191/6051424755_56fac6da2b_z.jpg", "id": 485802}, {"license": 5, "file_name": "000000099054.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000099054.jpg", "height": 640, "width": 427, "date_captured": "2013-11-16 04:58:54", "flickr_url": "http://farm5.staticflickr.com/4033/5162745508_9bc949f49f_z.jpg", "id": 99054}, {"license": 1, "file_name": "000000022969.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000022969.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 12:48:29", "flickr_url": "http://farm1.staticflickr.com/142/325918359_d8cd26e6bf_z.jpg", "id": 22969}, {"license": 3, "file_name": "000000570539.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000570539.jpg", "height": 500, "width": 372, "date_captured": "2013-11-16 16:42:16", "flickr_url": "http://farm5.staticflickr.com/4062/4474781550_1f30775774_z.jpg", "id": 570539}, {"license": 4, "file_name": "000000278353.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000278353.jpg", "height": 640, "width": 596, "date_captured": "2013-11-16 17:01:56", "flickr_url": "http://farm7.staticflickr.com/6095/6366176437_b0672bc6e8_z.jpg", "id": 278353}, {"license": 1, "file_name": "000000158548.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000158548.jpg", "height": 482, "width": 640, "date_captured": "2013-11-16 17:23:11", "flickr_url": "http://farm9.staticflickr.com/8030/7965301600_bae4984c9f_z.jpg", "id": 158548}, {"license": 1, "file_name": "000000461405.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000461405.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 19:43:28", "flickr_url": "http://farm8.staticflickr.com/7440/10066231383_93d5c0f83c_z.jpg", "id": 461405}, {"license": 1, "file_name": "000000176606.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000176606.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 21:09:06", "flickr_url": "http://farm9.staticflickr.com/8293/7747168158_e56e2cd2c6_z.jpg", "id": 176606}, {"license": 2, "file_name": "000000044699.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000044699.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 00:11:19", "flickr_url": "http://farm6.staticflickr.com/5006/5263365078_da0a7f4210_z.jpg", "id": 44699}, {"license": 1, "file_name": "000000559956.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000559956.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 00:22:15", "flickr_url": "http://farm2.staticflickr.com/1409/5114750279_e6d104eb67_z.jpg", "id": 559956}, {"license": 3, "file_name": "000000268996.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000268996.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 02:33:04", "flickr_url": "http://farm2.staticflickr.com/1020/949315157_75a47d4d32_z.jpg", "id": 268996}, {"license": 3, "file_name": "000000011197.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000011197.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 03:59:36", "flickr_url": "http://farm8.staticflickr.com/7002/6732385791_cd9fcb9572_z.jpg", "id": 11197}, {"license": 4, "file_name": "000000483667.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000483667.jpg", "height": 640, "width": 426, "date_captured": "2013-11-17 05:12:54", "flickr_url": "http://farm2.staticflickr.com/1034/819096807_cd0a499d5d_z.jpg", "id": 483667}, {"license": 3, "file_name": "000000448810.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000448810.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 06:07:45", "flickr_url": "http://farm3.staticflickr.com/2132/2433551221_57bb9fc305_z.jpg", "id": 448810}, {"license": 1, "file_name": "000000000724.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000000724.jpg", "height": 500, "width": 375, "date_captured": "2013-11-17 09:30:58", "flickr_url": "http://farm4.staticflickr.com/3576/3383381911_9d6d5b63a1_z.jpg", "id": 724}, {"license": 1, "file_name": "000000051961.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000051961.jpg", "height": 640, "width": 427, "date_captured": "2013-11-17 10:31:29", "flickr_url": "http://farm3.staticflickr.com/2756/4319434187_dd249ba85b_z.jpg", "id": 51961}, {"license": 1, "file_name": "000000375278.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000375278.jpg", "height": 500, "width": 333, "date_captured": "2013-11-17 17:31:19", "flickr_url": "http://farm1.staticflickr.com/197/498586690_f32f59e75e_z.jpg", "id": 375278}, {"license": 3, "file_name": "000000302165.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000302165.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 19:17:50", "flickr_url": "http://farm1.staticflickr.com/35/260402848_cfa41c8c76_z.jpg", "id": 302165}, {"license": 1, "file_name": "000000131131.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000131131.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 21:43:53", "flickr_url": "http://farm4.staticflickr.com/3750/9037266398_f900b77f14_z.jpg", "id": 131131}, {"license": 1, "file_name": "000000098839.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000098839.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 21:43:55", "flickr_url": "http://farm6.staticflickr.com/5446/9037256278_f2b53342df_z.jpg", "id": 98839}, {"license": 4, "file_name": "000000402992.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000402992.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 23:45:06", "flickr_url": "http://farm7.staticflickr.com/6135/5922506927_b60c053513_z.jpg", "id": 402992}, {"license": 4, "file_name": "000000465675.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000465675.jpg", "height": 403, "width": 640, "date_captured": "2013-11-18 00:39:37", "flickr_url": "http://farm7.staticflickr.com/6041/6296158420_868a46d225_z.jpg", "id": 465675}, {"license": 3, "file_name": "000000240754.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000240754.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 00:50:48", "flickr_url": "http://farm5.staticflickr.com/4060/5168638853_7fba0f6e88_z.jpg", "id": 240754}, {"license": 4, "file_name": "000000021167.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000021167.jpg", "height": 640, "width": 426, "date_captured": "2013-11-18 01:18:47", "flickr_url": "http://farm4.staticflickr.com/3469/3397730036_36219f4c6e_z.jpg", "id": 21167}, {"license": 1, "file_name": "000000148730.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000148730.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 03:32:28", "flickr_url": "http://farm3.staticflickr.com/2869/10315027906_c780f4bf7b_z.jpg", "id": 148730}, {"license": 1, "file_name": "000000384468.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000384468.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 05:05:20", "flickr_url": "http://farm9.staticflickr.com/8199/8214226078_aa7d2ef265_z.jpg", "id": 384468}, {"license": 3, "file_name": "000000253742.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000253742.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 05:28:32", "flickr_url": "http://farm2.staticflickr.com/1228/543106256_1ba51743e5_z.jpg", "id": 253742}, {"license": 1, "file_name": "000000186873.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000186873.jpg", "height": 612, "width": 612, "date_captured": "2013-11-18 07:05:08", "flickr_url": "http://farm8.staticflickr.com/7410/9365611494_39f57fdd6d_z.jpg", "id": 186873}, {"license": 3, "file_name": "000000082180.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000082180.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 11:25:43", "flickr_url": "http://farm6.staticflickr.com/5085/5314870798_c4e569905c_z.jpg", "id": 82180}, {"license": 4, "file_name": "000000446522.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000446522.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 12:46:09", "flickr_url": "http://farm1.staticflickr.com/169/414738646_adafe60def_z.jpg", "id": 446522}, {"license": 4, "file_name": "000000552902.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000552902.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 16:10:30", "flickr_url": "http://farm9.staticflickr.com/8538/8603855827_320e7fbb3c_z.jpg", "id": 552902}, {"license": 3, "file_name": "000000125405.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000125405.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 17:02:00", "flickr_url": "http://farm4.staticflickr.com/3033/2558926055_a70c30402a_z.jpg", "id": 125405}, {"license": 4, "file_name": "000000110211.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000110211.jpg", "height": 344, "width": 640, "date_captured": "2013-11-18 17:34:38", "flickr_url": "http://farm9.staticflickr.com/8169/7884061016_ee2c0d940f_z.jpg", "id": 110211}, {"license": 3, "file_name": "000000016010.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000016010.jpg", "height": 471, "width": 640, "date_captured": "2013-11-18 21:20:54", "flickr_url": "http://farm2.staticflickr.com/1134/950664990_8070cd6e3a_z.jpg", "id": 16010}, {"license": 3, "file_name": "000000064462.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000064462.jpg", "height": 378, "width": 500, "date_captured": "2013-11-19 19:08:42", "flickr_url": "http://farm3.staticflickr.com/2177/2148145180_e33f49f162_z.jpg", "id": 64462}, {"license": 5, "file_name": "000000314182.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000314182.jpg", "height": 500, "width": 375, "date_captured": "2013-11-19 20:09:04", "flickr_url": "http://farm3.staticflickr.com/2089/1912178745_cb0814bb3a_z.jpg", "id": 314182}, {"license": 1, "file_name": "000000248980.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000248980.jpg", "height": 375, "width": 500, "date_captured": "2013-11-19 20:37:01", "flickr_url": "http://farm3.staticflickr.com/2514/3710611307_ffaea80248_z.jpg", "id": 248980}, {"license": 3, "file_name": "000000068387.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000068387.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 20:37:47", "flickr_url": "http://farm4.staticflickr.com/3007/3003613011_2f403f35fd_z.jpg", "id": 68387}, {"license": 3, "file_name": "000000429281.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000429281.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 20:40:56", "flickr_url": "http://farm7.staticflickr.com/6011/5990904550_b506baa087_z.jpg", "id": 429281}, {"license": 4, "file_name": "000000345466.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000345466.jpg", "height": 375, "width": 500, "date_captured": "2013-11-19 21:20:50", "flickr_url": "http://farm2.staticflickr.com/1418/1356309053_2247aa7699_z.jpg", "id": 345466}, {"license": 4, "file_name": "000000352900.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000352900.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 23:13:58", "flickr_url": "http://farm4.staticflickr.com/3537/3315841832_88f1648f9b_z.jpg", "id": 352900}, {"license": 4, "file_name": "000000118367.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000118367.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 01:20:48", "flickr_url": "http://farm5.staticflickr.com/4002/4430471591_9b34f2a2a1_z.jpg", "id": 118367}, {"license": 2, "file_name": "000000113235.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000113235.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 02:37:16", "flickr_url": "http://farm3.staticflickr.com/2443/3662586517_e3befd274b_z.jpg", "id": 113235}, {"license": 4, "file_name": "000000311303.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000311303.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 12:41:11", "flickr_url": "http://farm4.staticflickr.com/3372/3178812639_f6e31bec0b_z.jpg", "id": 311303}, {"license": 3, "file_name": "000000163640.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000163640.jpg", "height": 457, "width": 640, "date_captured": "2013-11-20 15:11:52", "flickr_url": "http://farm5.staticflickr.com/4049/4458742220_accdfbe97d_z.jpg", "id": 163640}, {"license": 2, "file_name": "000000370999.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000370999.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 15:20:33", "flickr_url": "http://farm5.staticflickr.com/4002/4252800441_d89f2cdf8f_z.jpg", "id": 370999}, {"license": 2, "file_name": "000000001490.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000001490.jpg", "height": 315, "width": 640, "date_captured": "2013-11-20 16:17:15", "flickr_url": "http://farm9.staticflickr.com/8523/8624108829_4e9c77d2d5_z.jpg", "id": 1490}, {"license": 4, "file_name": "000000329456.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000329456.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 17:05:55", "flickr_url": "http://farm4.staticflickr.com/3112/2561836272_6200d49083_z.jpg", "id": 329456}, {"license": 5, "file_name": "000000570471.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000570471.jpg", "height": 500, "width": 375, "date_captured": "2013-11-20 18:10:29", "flickr_url": "http://farm3.staticflickr.com/2728/4421878446_e5505c825a_z.jpg", "id": 570471}, {"license": 3, "file_name": "000000088269.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000088269.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 18:32:27", "flickr_url": "http://farm4.staticflickr.com/3411/3220370785_d1a772ca65_z.jpg", "id": 88269}, {"license": 3, "file_name": "000000260470.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000260470.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 19:01:49", "flickr_url": "http://farm8.staticflickr.com/7410/9741947345_655ab2a1ac_z.jpg", "id": 260470}, {"license": 5, "file_name": "000000193494.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000193494.jpg", "height": 640, "width": 426, "date_captured": "2013-11-20 22:32:49", "flickr_url": "http://farm1.staticflickr.com/84/241570001_7d3c78b644_z.jpg", "id": 193494}, {"license": 5, "file_name": "000000252776.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000252776.jpg", "height": 640, "width": 418, "date_captured": "2013-11-21 02:16:18", "flickr_url": "http://farm4.staticflickr.com/3756/9358666297_68811a2a89_z.jpg", "id": 252776}, {"license": 5, "file_name": "000000201072.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000201072.jpg", "height": 640, "width": 411, "date_captured": "2013-11-21 02:16:23", "flickr_url": "http://farm3.staticflickr.com/2824/9374308711_bf5074c37e_z.jpg", "id": 201072}, {"license": 3, "file_name": "000000018150.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000018150.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 03:12:35", "flickr_url": "http://farm8.staticflickr.com/7155/6476497205_c725257677_z.jpg", "id": 18150}, {"license": 1, "file_name": "000000337498.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000337498.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 05:14:12", "flickr_url": "http://farm5.staticflickr.com/4086/5006983019_5114d2d23e_z.jpg", "id": 337498}, {"license": 2, "file_name": "000000521405.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000521405.jpg", "height": 640, "width": 426, "date_captured": "2013-11-21 20:13:15", "flickr_url": "http://farm5.staticflickr.com/4042/4435154720_31cc1e9e6c_z.jpg", "id": 521405}, {"license": 3, "file_name": "000000518770.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000518770.jpg", "height": 375, "width": 500, "date_captured": "2013-11-21 21:52:12", "flickr_url": "http://farm3.staticflickr.com/2326/2652208047_1d9083fbc5_z.jpg", "id": 518770}, {"license": 1, "file_name": "000000201646.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000201646.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 21:58:29", "flickr_url": "http://farm4.staticflickr.com/3236/2487649513_1ef6a6d5c9_z.jpg", "id": 201646}, {"license": 1, "file_name": "000000036936.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000036936.jpg", "height": 404, "width": 640, "date_captured": "2013-11-21 22:31:37", "flickr_url": "http://farm3.staticflickr.com/2365/2132616750_a9e25a0df1_z.jpg", "id": 36936}, {"license": 1, "file_name": "000000059044.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000059044.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 23:07:23", "flickr_url": "http://farm2.staticflickr.com/1085/1234800682_b3376986c3_z.jpg", "id": 59044}, {"license": 1, "file_name": "000000172946.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000172946.jpg", "height": 640, "width": 427, "date_captured": "2013-11-21 23:07:27", "flickr_url": "http://farm2.staticflickr.com/1093/1233943089_1ef9fb0ffc_z.jpg", "id": 172946}, {"license": 4, "file_name": "000000234607.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000234607.jpg", "height": 500, "width": 375, "date_captured": "2013-11-21 23:17:45", "flickr_url": "http://farm2.staticflickr.com/1437/559863781_93c23c76d0_z.jpg", "id": 234607}, {"license": 4, "file_name": "000000532690.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000532690.jpg", "height": 640, "width": 528, "date_captured": "2013-11-22 00:07:53", "flickr_url": "http://farm1.staticflickr.com/155/353485795_d364074053_z.jpg", "id": 532690}, {"license": 3, "file_name": "000000323895.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000323895.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 02:37:51", "flickr_url": "http://farm3.staticflickr.com/2746/4031305686_e93ae82bde_z.jpg", "id": 323895}, {"license": 3, "file_name": "000000384670.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000384670.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 02:37:54", "flickr_url": "http://farm3.staticflickr.com/2768/4031307244_9cb2ba8e38_z.jpg", "id": 384670}, {"license": 1, "file_name": "000000050326.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000050326.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 08:25:23", "flickr_url": "http://farm1.staticflickr.com/16/21021041_43564e03cc_z.jpg", "id": 50326}, {"license": 6, "file_name": "000000205542.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000205542.jpg", "height": 640, "width": 480, "date_captured": "2013-11-22 19:15:06", "flickr_url": "http://farm3.staticflickr.com/2621/4037677376_1f1f4cddb0_z.jpg", "id": 205542}, {"license": 3, "file_name": "000000217957.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000217957.jpg", "height": 640, "width": 480, "date_captured": "2013-11-22 19:40:11", "flickr_url": "http://farm3.staticflickr.com/2828/9376972910_53d926732a_z.jpg", "id": 217957}, {"license": 3, "file_name": "000000162035.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000162035.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 20:07:07", "flickr_url": "http://farm3.staticflickr.com/2093/2132700001_25c323a686_z.jpg", "id": 162035}, {"license": 5, "file_name": "000000415727.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000415727.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 20:53:22", "flickr_url": "http://farm8.staticflickr.com/7093/7243978106_95b5652943_z.jpg", "id": 415727}, {"license": 3, "file_name": "000000046252.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000046252.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 22:22:03", "flickr_url": "http://farm5.staticflickr.com/4144/5018899412_96f317e3ca_z.jpg", "id": 46252}, {"license": 4, "file_name": "000000182021.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000182021.jpg", "height": 360, "width": 640, "date_captured": "2013-11-23 00:47:58", "flickr_url": "http://farm8.staticflickr.com/7233/7377647736_5e32424fc3_z.jpg", "id": 182021}, {"license": 4, "file_name": "000000231747.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000231747.jpg", "height": 400, "width": 640, "date_captured": "2013-11-23 01:23:38", "flickr_url": "http://farm3.staticflickr.com/2740/5763708656_0879336a58_z.jpg", "id": 231747}, {"license": 4, "file_name": "000000090284.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000090284.jpg", "height": 639, "width": 640, "date_captured": "2013-11-23 03:18:29", "flickr_url": "http://farm4.staticflickr.com/3595/3591078425_be6b5caa3d_z.jpg", "id": 90284}, {"license": 4, "file_name": "000000286553.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000286553.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 03:29:49", "flickr_url": "http://farm3.staticflickr.com/2710/4252543190_2e6b88828f_z.jpg", "id": 286553}, {"license": 3, "file_name": "000000488736.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000488736.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 17:58:42", "flickr_url": "http://farm9.staticflickr.com/8405/8633559080_d22799eb42_z.jpg", "id": 488736}, {"license": 2, "file_name": "000000063602.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000063602.jpg", "height": 425, "width": 640, "date_captured": "2013-11-23 20:09:29", "flickr_url": "http://farm5.staticflickr.com/4005/4294796626_17358688cb_z.jpg", "id": 63602}, {"license": 3, "file_name": "000000383386.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000383386.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 02:38:32", "flickr_url": "http://farm4.staticflickr.com/3076/2708556195_458ccf374d_z.jpg", "id": 383386}, {"license": 3, "file_name": "000000450686.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000450686.jpg", "height": 640, "width": 511, "date_captured": "2013-11-24 04:03:04", "flickr_url": "http://farm3.staticflickr.com/2656/3794113704_1ca0f3d3a2_z.jpg", "id": 450686}, {"license": 1, "file_name": "000000005060.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000005060.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 05:50:52", "flickr_url": "http://farm3.staticflickr.com/2672/3715883304_5de874dc13_z.jpg", "id": 5060}, {"license": 4, "file_name": "000000286523.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000286523.jpg", "height": 514, "width": 640, "date_captured": "2013-11-24 07:08:32", "flickr_url": "http://farm4.staticflickr.com/3272/2646617772_52272c12bf_z.jpg", "id": 286523}, {"license": 3, "file_name": "000000120420.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000120420.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 07:55:15", "flickr_url": "http://farm1.staticflickr.com/37/113243254_2af4f22087_z.jpg", "id": 120420}, {"license": 1, "file_name": "000000579655.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000579655.jpg", "height": 399, "width": 640, "date_captured": "2013-11-24 08:55:08", "flickr_url": "http://farm4.staticflickr.com/3094/2748124383_5ce580ce58_z.jpg", "id": 579655}, {"license": 1, "file_name": "000000117908.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000117908.jpg", "height": 320, "width": 500, "date_captured": "2013-11-24 12:00:46", "flickr_url": "http://farm4.staticflickr.com/3073/2365168122_f3d01a44ff_z.jpg", "id": 117908}, {"license": 5, "file_name": "000000550322.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000550322.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 13:10:52", "flickr_url": "http://farm3.staticflickr.com/2487/4195477568_0ba3208eb3_z.jpg", "id": 550322}, {"license": 1, "file_name": "000000322844.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000322844.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 15:13:25", "flickr_url": "http://farm5.staticflickr.com/4001/4576146035_bc06423687_z.jpg", "id": 322844}, {"license": 1, "file_name": "000000218362.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000218362.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 15:58:11", "flickr_url": "http://farm9.staticflickr.com/8289/7551589462_c1fc939cc8_z.jpg", "id": 218362}, {"license": 4, "file_name": "000000213224.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000213224.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 19:06:16", "flickr_url": "http://farm6.staticflickr.com/5251/5484827300_5720729cfa_z.jpg", "id": 213224}, {"license": 1, "file_name": "000000223747.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000223747.jpg", "height": 370, "width": 500, "date_captured": "2013-11-14 15:53:06", "flickr_url": "http://farm1.staticflickr.com/12/18165225_2dd8f6dc28_z.jpg", "id": 223747}, {"license": 3, "file_name": "000000297578.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000297578.jpg", "height": 281, "width": 500, "date_captured": "2013-11-14 16:38:34", "flickr_url": "http://farm5.staticflickr.com/4067/4416179995_0dcfcce95a_z.jpg", "id": 297578}, {"license": 1, "file_name": "000000458992.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000458992.jpg", "height": 640, "width": 480, "date_captured": "2013-11-14 16:46:15", "flickr_url": "http://farm1.staticflickr.com/65/198408006_ab4ba7daf4_z.jpg", "id": 458992}, {"license": 4, "file_name": "000000078266.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000078266.jpg", "height": 428, "width": 640, "date_captured": "2013-11-14 17:19:49", "flickr_url": "http://farm7.staticflickr.com/6167/6180130159_ae0bf83d72_z.jpg", "id": 78266}, {"license": 1, "file_name": "000000164602.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000164602.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 20:54:05", "flickr_url": "http://farm1.staticflickr.com/73/200947323_e66269f9c6_z.jpg", "id": 164602}, {"license": 3, "file_name": "000000440475.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000440475.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 22:53:18", "flickr_url": "http://farm1.staticflickr.com/54/186534636_d975224e88_z.jpg", "id": 440475}, {"license": 1, "file_name": "000000101762.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000101762.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 23:43:44", "flickr_url": "http://farm3.staticflickr.com/2068/2135673297_6c75c29c61_z.jpg", "id": 101762}, {"license": 2, "file_name": "000000557501.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000557501.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 01:32:48", "flickr_url": "http://farm7.staticflickr.com/6160/6134253537_af052335eb_z.jpg", "id": 557501}, {"license": 3, "file_name": "000000203317.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000203317.jpg", "height": 423, "width": 500, "date_captured": "2013-11-15 02:41:36", "flickr_url": "http://farm1.staticflickr.com/168/473782444_8ec11ec7b3_z.jpg", "id": 203317}, {"license": 1, "file_name": "000000368940.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000368940.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 04:02:31", "flickr_url": "http://farm7.staticflickr.com/6174/6212519099_48f4990c60_z.jpg", "id": 368940}, {"license": 4, "file_name": "000000569917.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000569917.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 05:04:48", "flickr_url": "http://farm5.staticflickr.com/4083/5210018208_510a7c90fc_z.jpg", "id": 569917}, {"license": 2, "file_name": "000000144798.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000144798.jpg", "height": 640, "width": 425, "date_captured": "2013-11-15 06:04:45", "flickr_url": "http://farm5.staticflickr.com/4143/4746746544_008c37d608_z.jpg", "id": 144798}, {"license": 4, "file_name": "000000284623.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000284623.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 06:21:52", "flickr_url": "http://farm3.staticflickr.com/2585/3697788816_f6b63cbb16_z.jpg", "id": 284623}, {"license": 3, "file_name": "000000520301.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000520301.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 07:45:44", "flickr_url": "http://farm3.staticflickr.com/2556/4134376909_41f1ae66f5_z.jpg", "id": 520301}, {"license": 1, "file_name": "000000127987.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000127987.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 15:10:55", "flickr_url": "http://farm4.staticflickr.com/3309/3471813007_ee8551f446_z.jpg", "id": 127987}, {"license": 3, "file_name": "000000063740.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000063740.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 17:40:44", "flickr_url": "http://farm4.staticflickr.com/3436/3314949438_f4919d399e_z.jpg", "id": 63740}, {"license": 2, "file_name": "000000036494.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000036494.jpg", "height": 434, "width": 640, "date_captured": "2013-11-15 20:09:34", "flickr_url": "http://farm3.staticflickr.com/2694/4165136971_1fd5055078_z.jpg", "id": 36494}, {"license": 2, "file_name": "000000210032.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000210032.jpg", "height": 401, "width": 640, "date_captured": "2013-11-15 20:18:42", "flickr_url": "http://farm5.staticflickr.com/4020/4395778587_9b92f76b94_z.jpg", "id": 210032}, {"license": 1, "file_name": "000000488270.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000488270.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 13:09:39", "flickr_url": "http://farm4.staticflickr.com/3377/3646822527_5e0550ba07_z.jpg", "id": 488270}, {"license": 1, "file_name": "000000067180.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000067180.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 15:39:18", "flickr_url": "http://farm3.staticflickr.com/2227/1860988330_0ec25215c1_z.jpg", "id": 67180}, {"license": 1, "file_name": "000000281179.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000281179.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 15:41:30", "flickr_url": "http://farm8.staticflickr.com/7152/6526348027_90e74a2673_z.jpg", "id": 281179}, {"license": 1, "file_name": "000000064359.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000064359.jpg", "height": 332, "width": 500, "date_captured": "2013-11-16 16:00:52", "flickr_url": "http://farm1.staticflickr.com/89/252310217_a5102fb244_z.jpg", "id": 64359}, {"license": 1, "file_name": "000000126226.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000126226.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 16:05:03", "flickr_url": "http://farm5.staticflickr.com/4070/4681815918_22d33d6556_z.jpg", "id": 126226}, {"license": 4, "file_name": "000000190923.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000190923.jpg", "height": 500, "width": 375, "date_captured": "2013-11-16 19:15:04", "flickr_url": "http://farm3.staticflickr.com/2669/3706332805_237c47a25d_z.jpg", "id": 190923}, {"license": 6, "file_name": "000000150265.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000150265.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 20:32:02", "flickr_url": "http://farm8.staticflickr.com/7191/6986186361_05040291fc_z.jpg", "id": 150265}, {"license": 1, "file_name": "000000216739.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000216739.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 21:56:16", "flickr_url": "http://farm3.staticflickr.com/2794/4190008256_fb66764971_z.jpg", "id": 216739}, {"license": 1, "file_name": "000000038048.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000038048.jpg", "height": 500, "width": 299, "date_captured": "2013-11-16 23:35:30", "flickr_url": "http://farm1.staticflickr.com/16/23128375_67003a8457_z.jpg", "id": 38048}, {"license": 1, "file_name": "000000354829.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000354829.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 23:36:39", "flickr_url": "http://farm1.staticflickr.com/5/7213514_c15cc3c285_z.jpg", "id": 354829}, {"license": 3, "file_name": "000000525155.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000525155.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 00:31:23", "flickr_url": "http://farm5.staticflickr.com/4113/5068665744_f2cd6ea92b_z.jpg", "id": 525155}, {"license": 3, "file_name": "000000163314.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000163314.jpg", "height": 331, "width": 500, "date_captured": "2013-11-17 01:20:41", "flickr_url": "http://farm3.staticflickr.com/2201/2208466227_4135cdd37c_z.jpg", "id": 163314}, {"license": 3, "file_name": "000000259571.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000259571.jpg", "height": 281, "width": 500, "date_captured": "2013-11-17 02:37:05", "flickr_url": "http://farm1.staticflickr.com/3/5896793_d55320306b_z.jpg", "id": 259571}, {"license": 6, "file_name": "000000561679.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000561679.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 02:52:55", "flickr_url": "http://farm2.staticflickr.com/1143/5097674701_293bfba2cd_z.jpg", "id": 561679}, {"license": 1, "file_name": "000000236166.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000236166.jpg", "height": 640, "width": 426, "date_captured": "2013-11-17 03:44:11", "flickr_url": "http://farm6.staticflickr.com/5235/5907035871_a3eb87eb96_z.jpg", "id": 236166}, {"license": 6, "file_name": "000000153529.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000153529.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 03:50:32", "flickr_url": "http://farm1.staticflickr.com/51/179621332_5a103aef98_z.jpg", "id": 153529}, {"license": 6, "file_name": "000000473015.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000473015.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 03:57:09", "flickr_url": "http://farm3.staticflickr.com/2887/10005081875_bbd3e4a751_z.jpg", "id": 473015}, {"license": 2, "file_name": "000000379800.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000379800.jpg", "height": 493, "width": 640, "date_captured": "2013-11-17 04:42:38", "flickr_url": "http://farm7.staticflickr.com/6002/5961981073_80aa5344c2_z.jpg", "id": 379800}, {"license": 4, "file_name": "000000253835.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000253835.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 06:57:08", "flickr_url": "http://farm4.staticflickr.com/3772/9683835627_634705b4c4_z.jpg", "id": 253835}, {"license": 3, "file_name": "000000034071.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000034071.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 10:51:08", "flickr_url": "http://farm4.staticflickr.com/3149/2936723017_938ea44e90_z.jpg", "id": 34071}, {"license": 2, "file_name": "000000036861.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000036861.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 11:15:51", "flickr_url": "http://farm4.staticflickr.com/3579/3465982933_e092878020_z.jpg", "id": 36861}, {"license": 1, "file_name": "000000569565.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000569565.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 16:01:15", "flickr_url": "http://farm8.staticflickr.com/7353/9164606678_de1b984a13_z.jpg", "id": 569565}, {"license": 1, "file_name": "000000219271.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000219271.jpg", "height": 500, "width": 350, "date_captured": "2013-11-17 16:29:52", "flickr_url": "http://farm1.staticflickr.com/4/5795874_297ee81b22_z.jpg", "id": 219271}, {"license": 1, "file_name": "000000205647.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000205647.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 17:37:10", "flickr_url": "http://farm3.staticflickr.com/2890/9335195681_479aa10634_z.jpg", "id": 205647}, {"license": 4, "file_name": "000000460841.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000460841.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 17:51:14", "flickr_url": "http://farm3.staticflickr.com/2369/1800134882_706bec9a8d_z.jpg", "id": 460841}, {"license": 1, "file_name": "000000123131.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000123131.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 18:15:23", "flickr_url": "http://farm9.staticflickr.com/8396/8711886054_6b75cb7c71_z.jpg", "id": 123131}, {"license": 1, "file_name": "000000334006.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000334006.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 18:20:57", "flickr_url": "http://farm9.staticflickr.com/8526/8684868712_3122ac37d6_z.jpg", "id": 334006}, {"license": 4, "file_name": "000000511599.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000511599.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 18:24:26", "flickr_url": "http://farm5.staticflickr.com/4127/5057922539_44be49d73a_z.jpg", "id": 511599}, {"license": 3, "file_name": "000000229858.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000229858.jpg", "height": 555, "width": 640, "date_captured": "2013-11-17 18:35:11", "flickr_url": "http://farm4.staticflickr.com/3787/9231019797_e1cbffc3b6_z.jpg", "id": 229858}, {"license": 1, "file_name": "000000174004.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000174004.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 18:47:26", "flickr_url": "http://farm9.staticflickr.com/8095/8472162812_8ea4afd483_z.jpg", "id": 174004}, {"license": 1, "file_name": "000000519764.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000519764.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 18:50:52", "flickr_url": "http://farm3.staticflickr.com/2358/2362017497_afd2417d5b_z.jpg", "id": 519764}, {"license": 6, "file_name": "000000137576.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000137576.jpg", "height": 563, "width": 640, "date_captured": "2013-11-17 21:13:08", "flickr_url": "http://farm9.staticflickr.com/8509/8507587656_50c2245b38_z.jpg", "id": 137576}, {"license": 3, "file_name": "000000087470.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000087470.jpg", "height": 470, "width": 640, "date_captured": "2013-11-17 21:32:39", "flickr_url": "http://farm9.staticflickr.com/8436/8046008172_0cf140db58_z.jpg", "id": 87470}, {"license": 1, "file_name": "000000009769.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000009769.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 21:33:15", "flickr_url": "http://farm8.staticflickr.com/7031/6692874313_fcd3117f7f_z.jpg", "id": 9769}, {"license": 1, "file_name": "000000558114.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000558114.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 03:45:25", "flickr_url": "http://farm6.staticflickr.com/5281/5276168929_d4bab749b2_z.jpg", "id": 558114}, {"license": 3, "file_name": "000000205776.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000205776.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 10:05:28", "flickr_url": "http://farm6.staticflickr.com/5350/6918177128_2f33d14e67_z.jpg", "id": 205776}, {"license": 2, "file_name": "000000163257.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000163257.jpg", "height": 640, "width": 425, "date_captured": "2013-11-18 10:09:14", "flickr_url": "http://farm8.staticflickr.com/7254/6916600506_4bd8939e60_z.jpg", "id": 163257}, {"license": 4, "file_name": "000000475678.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000475678.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 11:11:08", "flickr_url": "http://farm4.staticflickr.com/3572/3337847570_4c8d6dd100_z.jpg", "id": 475678}, {"license": 3, "file_name": "000000085478.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000085478.jpg", "height": 403, "width": 640, "date_captured": "2013-11-18 11:47:30", "flickr_url": "http://farm8.staticflickr.com/7015/6548774237_630282f075_z.jpg", "id": 85478}, {"license": 1, "file_name": "000000318080.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000318080.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 11:53:39", "flickr_url": "http://farm8.staticflickr.com/7167/6661027919_396ed89b3f_z.jpg", "id": 318080}, {"license": 3, "file_name": "000000361551.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000361551.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 11:56:09", "flickr_url": "http://farm4.staticflickr.com/3300/3505136392_1c84ecc2a1_z.jpg", "id": 361551}, {"license": 4, "file_name": "000000236784.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000236784.jpg", "height": 400, "width": 500, "date_captured": "2013-11-18 13:17:08", "flickr_url": "http://farm3.staticflickr.com/2380/2222474135_825753ebbd_z.jpg", "id": 236784}, {"license": 3, "file_name": "000000092839.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000092839.jpg", "height": 517, "width": 640, "date_captured": "2013-11-18 13:39:56", "flickr_url": "http://farm9.staticflickr.com/8216/8330152144_4d06c2d888_z.jpg", "id": 92839}, {"license": 3, "file_name": "000000042296.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000042296.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 13:55:55", "flickr_url": "http://farm9.staticflickr.com/8443/7979520306_79f16c1399_z.jpg", "id": 42296}, {"license": 3, "file_name": "000000560266.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000560266.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 14:08:23", "flickr_url": "http://farm9.staticflickr.com/8001/7514334616_7bc564ff21_z.jpg", "id": 560266}, {"license": 4, "file_name": "000000486479.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000486479.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 14:16:00", "flickr_url": "http://farm4.staticflickr.com/3563/3792891749_6efb555740_z.jpg", "id": 486479}, {"license": 3, "file_name": "000000127955.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000127955.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 14:17:37", "flickr_url": "http://farm8.staticflickr.com/7073/7141758019_df8c389fe5_z.jpg", "id": 127955}, {"license": 3, "file_name": "000000307658.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000307658.jpg", "height": 640, "width": 589, "date_captured": "2013-11-18 14:17:40", "flickr_url": "http://farm8.staticflickr.com/7204/6974919492_c5e2481d58_z.jpg", "id": 307658}, {"license": 3, "file_name": "000000417465.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000417465.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 14:22:30", "flickr_url": "http://farm8.staticflickr.com/7226/6933762244_e0aec12df9_z.jpg", "id": 417465}, {"license": 1, "file_name": "000000342971.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000342971.jpg", "height": 640, "width": 287, "date_captured": "2013-11-18 16:27:25", "flickr_url": "http://farm4.staticflickr.com/3396/3454391928_76a39a35cc_z.jpg", "id": 342971}, {"license": 3, "file_name": "000000011760.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000011760.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 18:15:02", "flickr_url": "http://farm3.staticflickr.com/2477/5856512283_9abe8e859f_z.jpg", "id": 11760}, {"license": 5, "file_name": "000000069106.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000069106.jpg", "height": 334, "width": 500, "date_captured": "2013-11-18 19:59:34", "flickr_url": "http://farm4.staticflickr.com/3102/3176408320_27543b355d_z.jpg", "id": 69106}, {"license": 3, "file_name": "000000070158.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000070158.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 21:05:24", "flickr_url": "http://farm3.staticflickr.com/2289/2110094103_838dbfd227_z.jpg", "id": 70158}, {"license": 3, "file_name": "000000176634.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000176634.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 22:10:02", "flickr_url": "http://farm1.staticflickr.com/46/150207262_dd7e23d801_z.jpg", "id": 176634}, {"license": 1, "file_name": "000000281447.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000281447.jpg", "height": 421, "width": 640, "date_captured": "2013-11-18 23:28:30", "flickr_url": "http://farm5.staticflickr.com/4137/4858611918_68fb41de0b_z.jpg", "id": 281447}, {"license": 1, "file_name": "000000552371.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000552371.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 23:43:32", "flickr_url": "http://farm5.staticflickr.com/4114/4858614906_01bdd1773d_z.jpg", "id": 552371}, {"license": 5, "file_name": "000000361919.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000361919.jpg", "height": 425, "width": 640, "date_captured": "2013-11-19 17:55:58", "flickr_url": "http://farm6.staticflickr.com/5127/5355457386_543e9e2748_z.jpg", "id": 361919}, {"license": 3, "file_name": "000000560256.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000560256.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 18:23:22", "flickr_url": "http://farm1.staticflickr.com/15/22703851_729cd2cd04_z.jpg", "id": 560256}, {"license": 6, "file_name": "000000138115.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000138115.jpg", "height": 621, "width": 448, "date_captured": "2013-11-19 19:55:53", "flickr_url": "http://farm9.staticflickr.com/8230/8475895841_4709133127_z.jpg", "id": 138115}, {"license": 2, "file_name": "000000114871.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000114871.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 20:27:18", "flickr_url": "http://farm8.staticflickr.com/7080/6875431084_55f6210d8f_z.jpg", "id": 114871}, {"license": 4, "file_name": "000000374369.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000374369.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 20:30:35", "flickr_url": "http://farm9.staticflickr.com/8228/8349316842_0d6dd5fdbf_z.jpg", "id": 374369}, {"license": 1, "file_name": "000000123213.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000123213.jpg", "height": 392, "width": 640, "date_captured": "2013-11-19 20:53:42", "flickr_url": "http://farm4.staticflickr.com/3296/2765087292_5356df67ce_z.jpg", "id": 123213}, {"license": 2, "file_name": "000000123321.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000123321.jpg", "height": 612, "width": 612, "date_captured": "2013-11-19 22:21:38", "flickr_url": "http://farm9.staticflickr.com/8401/8612126138_4c0a6bdc25_z.jpg", "id": 123321}, {"license": 3, "file_name": "000000015278.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000015278.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 23:14:33", "flickr_url": "http://farm4.staticflickr.com/3633/3291104715_bdec9818d3_z.jpg", "id": 15278}, {"license": 4, "file_name": "000000357742.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000357742.jpg", "height": 640, "width": 429, "date_captured": "2013-11-19 23:24:37", "flickr_url": "http://farm6.staticflickr.com/5247/5219132350_14c13c7939_z.jpg", "id": 357742}, {"license": 3, "file_name": "000000439854.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000439854.jpg", "height": 333, "width": 500, "date_captured": "2013-11-19 23:38:44", "flickr_url": "http://farm4.staticflickr.com/3014/3078274607_ff2beac811_z.jpg", "id": 439854}, {"license": 3, "file_name": "000000465836.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000465836.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 04:13:59", "flickr_url": "http://farm5.staticflickr.com/4025/4398110149_57036d934d_z.jpg", "id": 465836}, {"license": 3, "file_name": "000000414385.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000414385.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 05:20:56", "flickr_url": "http://farm5.staticflickr.com/4075/4885420084_ff261b3c61_z.jpg", "id": 414385}, {"license": 3, "file_name": "000000131556.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000131556.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 06:02:31", "flickr_url": "http://farm3.staticflickr.com/2509/4065712554_106839a51f_z.jpg", "id": 131556}, {"license": 3, "file_name": "000000322724.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000322724.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 08:08:57", "flickr_url": "http://farm4.staticflickr.com/3531/3308143272_803490cfab_z.jpg", "id": 322724}, {"license": 6, "file_name": "000000320664.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000320664.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 11:28:47", "flickr_url": "http://farm4.staticflickr.com/3094/2448447028_40c0247324_z.jpg", "id": 320664}, {"license": 1, "file_name": "000000481390.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000481390.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 16:33:07", "flickr_url": "http://farm7.staticflickr.com/6177/6193180401_ba0c9ff2ae_z.jpg", "id": 481390}, {"license": 5, "file_name": "000000109916.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000109916.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 18:19:33", "flickr_url": "http://farm5.staticflickr.com/4149/5094504532_a661575b73_z.jpg", "id": 109916}, {"license": 4, "file_name": "000000276434.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000276434.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 19:09:42", "flickr_url": "http://farm4.staticflickr.com/3554/3431913937_84630a1cdf_z.jpg", "id": 276434}, {"license": 4, "file_name": "000000579635.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000579635.jpg", "height": 429, "width": 640, "date_captured": "2013-11-20 20:08:45", "flickr_url": "http://farm8.staticflickr.com/7319/8933634910_7a5106eed9_z.jpg", "id": 579635}, {"license": 4, "file_name": "000000295316.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000295316.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 20:19:07", "flickr_url": "http://farm8.staticflickr.com/7049/8688630144_370a671fba_z.jpg", "id": 295316}, {"license": 1, "file_name": "000000571313.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000571313.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 21:08:19", "flickr_url": "http://farm4.staticflickr.com/3241/3103440395_fcae42f3c1_z.jpg", "id": 571313}, {"license": 4, "file_name": "000000183127.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000183127.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 21:40:26", "flickr_url": "http://farm8.staticflickr.com/7252/6940904516_3f096b4a14_z.jpg", "id": 183127}, {"license": 1, "file_name": "000000115898.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000115898.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 22:51:40", "flickr_url": "http://farm7.staticflickr.com/6077/6072866215_6fefbb1d47_z.jpg", "id": 115898}, {"license": 3, "file_name": "000000146358.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000146358.jpg", "height": 640, "width": 388, "date_captured": "2013-11-20 22:55:11", "flickr_url": "http://farm9.staticflickr.com/8290/7766608488_05511ccb5b_z.jpg", "id": 146358}, {"license": 3, "file_name": "000000329542.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000329542.jpg", "height": 612, "width": 612, "date_captured": "2013-11-20 23:45:07", "flickr_url": "http://farm8.staticflickr.com/7220/7354262062_7f0197f24d_z.jpg", "id": 329542}, {"license": 3, "file_name": "000000189752.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000189752.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 01:01:54", "flickr_url": "http://farm3.staticflickr.com/2761/4363686692_ff3ce5c8f4_z.jpg", "id": 189752}, {"license": 3, "file_name": "000000290163.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000290163.jpg", "height": 640, "width": 512, "date_captured": "2013-11-21 02:50:53", "flickr_url": "http://farm8.staticflickr.com/7181/7039559829_c051d5c7a4_z.jpg", "id": 290163}, {"license": 4, "file_name": "000000091406.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000091406.jpg", "height": 424, "width": 640, "date_captured": "2013-11-21 02:58:28", "flickr_url": "http://farm8.staticflickr.com/7170/6843637155_9379f537f6_z.jpg", "id": 91406}, {"license": 2, "file_name": "000000322352.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000322352.jpg", "height": 375, "width": 500, "date_captured": "2013-11-21 03:30:08", "flickr_url": "http://farm1.staticflickr.com/105/257198604_7a11594cc3_z.jpg", "id": 322352}, {"license": 1, "file_name": "000000223959.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000223959.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 03:48:48", "flickr_url": "http://farm8.staticflickr.com/7007/6644433357_ee12f0a3ee_z.jpg", "id": 223959}, {"license": 1, "file_name": "000000326248.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000326248.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 04:05:11", "flickr_url": "http://farm7.staticflickr.com/6007/6000678376_c9fa0b85ca_z.jpg", "id": 326248}, {"license": 1, "file_name": "000000218439.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000218439.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 20:27:58", "flickr_url": "http://farm4.staticflickr.com/3031/2759863463_c0315a2405_z.jpg", "id": 218439}, {"license": 1, "file_name": "000000453722.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000453722.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 22:02:27", "flickr_url": "http://farm8.staticflickr.com/7224/7209767218_8b48327d84_z.jpg", "id": 453722}, {"license": 1, "file_name": "000000293625.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000293625.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 22:32:58", "flickr_url": "http://farm3.staticflickr.com/2419/2204424375_b5420da2bf_z.jpg", "id": 293625}, {"license": 5, "file_name": "000000411817.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000411817.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 23:07:30", "flickr_url": "http://farm2.staticflickr.com/1159/1436355646_15eb51d0b1_z.jpg", "id": 411817}, {"license": 4, "file_name": "000000546964.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000546964.jpg", "height": 478, "width": 640, "date_captured": "2013-11-21 23:23:36", "flickr_url": "http://farm6.staticflickr.com/5058/5483923895_d3c3a20b21_z.jpg", "id": 546964}, {"license": 1, "file_name": "000000215259.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000215259.jpg", "height": 500, "width": 336, "date_captured": "2013-11-21 23:35:31", "flickr_url": "http://farm1.staticflickr.com/162/384954373_5a59aaabd5_z.jpg", "id": 215259}, {"license": 1, "file_name": "000000573094.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000573094.jpg", "height": 500, "width": 375, "date_captured": "2013-11-22 01:02:44", "flickr_url": "http://farm3.staticflickr.com/2705/4179772471_6039ec56a7_z.jpg", "id": 573094}, {"license": 5, "file_name": "000000560011.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000560011.jpg", "height": 500, "width": 332, "date_captured": "2013-11-22 01:42:53", "flickr_url": "http://farm3.staticflickr.com/2056/2212485799_fd16c60c3a_z.jpg", "id": 560011}, {"license": 3, "file_name": "000000038576.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000038576.jpg", "height": 640, "width": 438, "date_captured": "2013-11-22 01:43:24", "flickr_url": "http://farm6.staticflickr.com/5034/5899604376_696511678e_z.jpg", "id": 38576}, {"license": 4, "file_name": "000000147729.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000147729.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 02:17:10", "flickr_url": "http://farm4.staticflickr.com/3512/3228843052_e471f8bd46_z.jpg", "id": 147729}, {"license": 4, "file_name": "000000579307.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000579307.jpg", "height": 640, "width": 480, "date_captured": "2013-11-22 15:19:28", "flickr_url": "http://farm7.staticflickr.com/6213/6378172019_b4f2463fa0_z.jpg", "id": 579307}, {"license": 3, "file_name": "000000154425.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000154425.jpg", "height": 425, "width": 640, "date_captured": "2013-11-22 16:37:57", "flickr_url": "http://farm3.staticflickr.com/2551/3902227705_96949f8b75_z.jpg", "id": 154425}, {"license": 1, "file_name": "000000432898.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000432898.jpg", "height": 500, "width": 500, "date_captured": "2013-11-22 16:40:44", "flickr_url": "http://farm4.staticflickr.com/3419/3919163103_2b358eefba_z.jpg", "id": 432898}, {"license": 1, "file_name": "000000404923.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000404923.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 17:18:23", "flickr_url": "http://farm5.staticflickr.com/4028/4678270050_f205da5e75_z.jpg", "id": 404923}, {"license": 4, "file_name": "000000130586.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000130586.jpg", "height": 640, "width": 427, "date_captured": "2013-11-22 17:34:54", "flickr_url": "http://farm4.staticflickr.com/3587/3392836274_5d866f582b_z.jpg", "id": 130586}, {"license": 1, "file_name": "000000163057.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000163057.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 18:53:50", "flickr_url": "http://farm3.staticflickr.com/2201/2376047270_4d1758945b_z.jpg", "id": 163057}, {"license": 5, "file_name": "000000007511.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000007511.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 20:04:15", "flickr_url": "http://farm1.staticflickr.com/51/173980729_349afaca85_z.jpg", "id": 7511}, {"license": 1, "file_name": "000000067406.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000067406.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 20:26:19", "flickr_url": "http://farm1.staticflickr.com/35/72528675_bfdf8e5b5f_z.jpg", "id": 67406}, {"license": 2, "file_name": "000000290179.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000290179.jpg", "height": 426, "width": 640, "date_captured": "2013-11-22 22:14:13", "flickr_url": "http://farm9.staticflickr.com/8331/8360923229_b937ffcf1b_z.jpg", "id": 290179}, {"license": 4, "file_name": "000000248752.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000248752.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 23:49:32", "flickr_url": "http://farm3.staticflickr.com/2548/3817943990_7969c218e9_z.jpg", "id": 248752}, {"license": 3, "file_name": "000000054593.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000054593.jpg", "height": 427, "width": 640, "date_captured": "2013-11-23 01:19:17", "flickr_url": "http://farm3.staticflickr.com/2731/5846887136_3ced7e71df_z.jpg", "id": 54593}, {"license": 3, "file_name": "000000116208.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000116208.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 03:26:39", "flickr_url": "http://farm3.staticflickr.com/2643/4227221544_e934c72b60_z.jpg", "id": 116208}, {"license": 2, "file_name": "000000340697.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000340697.jpg", "height": 333, "width": 500, "date_captured": "2013-11-23 06:00:01", "flickr_url": "http://farm1.staticflickr.com/47/170703099_b6100a3c3f_z.jpg", "id": 340697}, {"license": 3, "file_name": "000000450303.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000450303.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 02:08:19", "flickr_url": "http://farm8.staticflickr.com/7040/6790054186_0d410223c5_z.jpg", "id": 450303}, {"license": 2, "file_name": "000000494427.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000494427.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 03:51:59", "flickr_url": "http://farm4.staticflickr.com/3613/3743850787_80d30fd5df_z.jpg", "id": 494427}, {"license": 4, "file_name": "000000137294.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000137294.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 06:10:53", "flickr_url": "http://farm8.staticflickr.com/7415/9848404106_3942d89008_z.jpg", "id": 137294}, {"license": 4, "file_name": "000000410880.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000410880.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 21:15:52", "flickr_url": "http://farm3.staticflickr.com/2457/3790889558_3d54eae6fb_z.jpg", "id": 410880}, {"license": 1, "file_name": "000000311180.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000311180.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 21:17:36", "flickr_url": "http://farm1.staticflickr.com/46/141116980_2ba28d32d7_z.jpg", "id": 311180}, {"license": 4, "file_name": "000000091654.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000091654.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 23:59:40", "flickr_url": "http://farm9.staticflickr.com/8516/8594175012_b521635ac6_z.jpg", "id": 91654}, {"license": 6, "file_name": "000000181796.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000181796.jpg", "height": 360, "width": 640, "date_captured": "2013-11-25 15:04:10", "flickr_url": "http://farm8.staticflickr.com/7444/9120010687_2d6bf02f63_z.jpg", "id": 181796}, {"license": 6, "file_name": "000000002431.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000002431.jpg", "height": 640, "width": 457, "date_captured": "2013-11-25 15:04:13", "flickr_url": "http://farm8.staticflickr.com/7383/9120002127_dfc92d5b80_z.jpg", "id": 2431}, {"license": 5, "file_name": "000000349184.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000349184.jpg", "height": 640, "width": 428, "date_captured": "2013-11-14 12:24:18", "flickr_url": "http://farm4.staticflickr.com/3230/2382908731_f4cc461bef_z.jpg", "id": 349184}, {"license": 5, "file_name": "000000298396.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000298396.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 20:26:18", "flickr_url": "http://farm7.staticflickr.com/6052/6348486215_b05f6c9f3c_z.jpg", "id": 298396}, {"license": 1, "file_name": "000000472046.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000472046.jpg", "height": 425, "width": 640, "date_captured": "2013-11-14 20:45:07", "flickr_url": "http://farm9.staticflickr.com/8316/7983019213_4cfe7eebde_z.jpg", "id": 472046}, {"license": 2, "file_name": "000000074058.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000074058.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 00:43:40", "flickr_url": "http://farm3.staticflickr.com/2673/3853738920_ac4ae553f7_z.jpg", "id": 74058}, {"license": 4, "file_name": "000000058029.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000058029.jpg", "height": 478, "width": 640, "date_captured": "2013-11-15 04:53:27", "flickr_url": "http://farm6.staticflickr.com/5143/5589997131_22f51b308c_z.jpg", "id": 58029}, {"license": 3, "file_name": "000000134096.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000134096.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 05:19:33", "flickr_url": "http://farm3.staticflickr.com/2085/2529900214_839f0e5e6a_z.jpg", "id": 134096}, {"license": 3, "file_name": "000000111951.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000111951.jpg", "height": 425, "width": 640, "date_captured": "2013-11-15 05:23:54", "flickr_url": "http://farm5.staticflickr.com/4131/5060005275_ddb3e66933_z.jpg", "id": 111951}, {"license": 3, "file_name": "000000103585.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000103585.jpg", "height": 640, "width": 425, "date_captured": "2013-11-15 05:43:51", "flickr_url": "http://farm5.staticflickr.com/4116/4777486312_59ba7d5b49_z.jpg", "id": 103585}, {"license": 4, "file_name": "000000210273.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000210273.jpg", "height": 428, "width": 640, "date_captured": "2013-11-15 09:01:55", "flickr_url": "http://farm6.staticflickr.com/5163/5336041838_1a09008014_z.jpg", "id": 210273}, {"license": 1, "file_name": "000000352584.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000352584.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 12:04:25", "flickr_url": "http://farm3.staticflickr.com/2102/2243389485_e02ab4ba31_z.jpg", "id": 352584}, {"license": 1, "file_name": "000000446651.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000446651.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 18:59:48", "flickr_url": "http://farm9.staticflickr.com/8318/8000471504_6726c52ae2_z.jpg", "id": 446651}, {"license": 3, "file_name": "000000194875.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000194875.jpg", "height": 574, "width": 640, "date_captured": "2013-11-15 21:42:46", "flickr_url": "http://farm8.staticflickr.com/7288/8715004598_a5613490a1_z.jpg", "id": 194875}, {"license": 3, "file_name": "000000052017.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000052017.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 05:57:49", "flickr_url": "http://farm6.staticflickr.com/5496/9175796805_28f5e32042_z.jpg", "id": 52017}, {"license": 2, "file_name": "000000336309.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000336309.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 11:59:00", "flickr_url": "http://farm8.staticflickr.com/7405/9305068094_d3f87239e7_z.jpg", "id": 336309}, {"license": 1, "file_name": "000000227478.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000227478.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 12:33:07", "flickr_url": "http://farm9.staticflickr.com/8370/8385283194_e1540c8f1d_z.jpg", "id": 227478}, {"license": 3, "file_name": "000000339870.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000339870.jpg", "height": 424, "width": 640, "date_captured": "2013-11-16 15:00:08", "flickr_url": "http://farm9.staticflickr.com/8473/8412000611_ae89190048_z.jpg", "id": 339870}, {"license": 3, "file_name": "000000080666.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000080666.jpg", "height": 640, "width": 640, "date_captured": "2013-11-16 15:10:37", "flickr_url": "http://farm5.staticflickr.com/4030/4681451054_bf9bdd10db_z.jpg", "id": 80666}, {"license": 6, "file_name": "000000033707.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000033707.jpg", "height": 612, "width": 612, "date_captured": "2013-11-16 17:23:17", "flickr_url": "http://farm8.staticflickr.com/7218/6976942366_c54fcb385d_z.jpg", "id": 33707}, {"license": 3, "file_name": "000000327601.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000327601.jpg", "height": 500, "width": 333, "date_captured": "2013-11-16 17:36:59", "flickr_url": "http://farm1.staticflickr.com/97/232230645_3d459ba7cc_z.jpg", "id": 327601}, {"license": 1, "file_name": "000000255749.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000255749.jpg", "height": 424, "width": 640, "date_captured": "2013-11-16 18:00:43", "flickr_url": "http://farm9.staticflickr.com/8096/8465488129_315834b855_z.jpg", "id": 255749}, {"license": 4, "file_name": "000000008762.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000008762.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 19:15:45", "flickr_url": "http://farm5.staticflickr.com/4006/4466652187_5ba02f2ba9_z.jpg", "id": 8762}, {"license": 2, "file_name": "000000526392.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000526392.jpg", "height": 333, "width": 500, "date_captured": "2013-11-16 19:26:03", "flickr_url": "http://farm2.staticflickr.com/1368/1475092316_af874718c0_z.jpg", "id": 526392}, {"license": 3, "file_name": "000000535578.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000535578.jpg", "height": 640, "width": 427, "date_captured": "2013-11-16 22:31:58", "flickr_url": "http://farm7.staticflickr.com/6236/6211535644_0ed2ac3b74_z.jpg", "id": 535578}, {"license": 5, "file_name": "000000580757.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000580757.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 22:50:45", "flickr_url": "http://farm4.staticflickr.com/3509/3942979677_313023cc8a_z.jpg", "id": 580757}, {"license": 1, "file_name": "000000165039.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000165039.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 00:23:35", "flickr_url": "http://farm9.staticflickr.com/8202/8235500461_b4791f81aa_z.jpg", "id": 165039}, {"license": 4, "file_name": "000000148719.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000148719.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 02:34:52", "flickr_url": "http://farm5.staticflickr.com/4138/4781344883_9b115de575_z.jpg", "id": 148719}, {"license": 5, "file_name": "000000108440.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000108440.jpg", "height": 434, "width": 640, "date_captured": "2013-11-17 03:12:29", "flickr_url": "http://farm1.staticflickr.com/223/496954802_7f163f830a_z.jpg", "id": 108440}, {"license": 1, "file_name": "000000489842.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000489842.jpg", "height": 566, "width": 640, "date_captured": "2013-11-17 05:12:57", "flickr_url": "http://farm3.staticflickr.com/2623/4097281255_0db613ce0d_z.jpg", "id": 489842}, {"license": 3, "file_name": "000000579818.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000579818.jpg", "height": 360, "width": 640, "date_captured": "2013-11-17 05:27:48", "flickr_url": "http://farm8.staticflickr.com/7206/6842914556_d78e1264ff_z.jpg", "id": 579818}, {"license": 3, "file_name": "000000423229.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000423229.jpg", "height": 423, "width": 640, "date_captured": "2013-11-17 06:57:02", "flickr_url": "http://farm8.staticflickr.com/7382/9696722513_aee54aed33_z.jpg", "id": 423229}, {"license": 2, "file_name": "000000323828.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000323828.jpg", "height": 640, "width": 427, "date_captured": "2013-11-17 09:54:00", "flickr_url": "http://farm9.staticflickr.com/8408/8746828106_e394e8fc99_z.jpg", "id": 323828}, {"license": 4, "file_name": "000000166287.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000166287.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 15:35:45", "flickr_url": "http://farm8.staticflickr.com/7160/6682122873_328803098d_z.jpg", "id": 166287}, {"license": 3, "file_name": "000000101420.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000101420.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 15:45:42", "flickr_url": "http://farm3.staticflickr.com/2290/2155564286_b462896a6d_z.jpg", "id": 101420}, {"license": 1, "file_name": "000000334555.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000334555.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 16:53:29", "flickr_url": "http://farm4.staticflickr.com/3489/3838201332_b8ba6c3aeb_z.jpg", "id": 334555}, {"license": 4, "file_name": "000000196759.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000196759.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 17:39:58", "flickr_url": "http://farm8.staticflickr.com/7324/9356649003_5cf8fb57b3_z.jpg", "id": 196759}, {"license": 1, "file_name": "000000411665.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000411665.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 20:28:36", "flickr_url": "http://farm3.staticflickr.com/2397/2307135171_799e451a0d_z.jpg", "id": 411665}, {"license": 1, "file_name": "000000061418.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000061418.jpg", "height": 458, "width": 640, "date_captured": "2013-11-18 00:04:45", "flickr_url": "http://farm9.staticflickr.com/8057/8232359139_8f9a72fd9e_z.jpg", "id": 61418}, {"license": 3, "file_name": "000000526751.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000526751.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 00:54:10", "flickr_url": "http://farm4.staticflickr.com/3288/2933360267_ae24740821_z.jpg", "id": 526751}, {"license": 1, "file_name": "000000024021.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000024021.jpg", "height": 390, "width": 640, "date_captured": "2013-11-18 01:09:38", "flickr_url": "http://farm9.staticflickr.com/8470/8127204603_008379f04d_z.jpg", "id": 24021}, {"license": 3, "file_name": "000000277020.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000277020.jpg", "height": 360, "width": 640, "date_captured": "2013-11-18 01:38:28", "flickr_url": "http://farm6.staticflickr.com/5112/7095675059_cf83b461f2_z.jpg", "id": 277020}, {"license": 3, "file_name": "000000047828.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000047828.jpg", "height": 318, "width": 640, "date_captured": "2013-11-18 01:40:52", "flickr_url": "http://farm9.staticflickr.com/8484/8204666547_29a6c6cd19_z.jpg", "id": 47828}, {"license": 3, "file_name": "000000183716.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000183716.jpg", "height": 500, "width": 353, "date_captured": "2013-11-18 02:04:46", "flickr_url": "http://farm4.staticflickr.com/3453/3940105027_a7b93d4d0b_z.jpg", "id": 183716}, {"license": 1, "file_name": "000000271997.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000271997.jpg", "height": 640, "width": 488, "date_captured": "2013-11-18 02:38:17", "flickr_url": "http://farm9.staticflickr.com/8041/7989412924_619a37ec56_z.jpg", "id": 271997}, {"license": 1, "file_name": "000000008532.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000008532.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 03:32:48", "flickr_url": "http://farm6.staticflickr.com/5132/5524200390_b87054a18e_z.jpg", "id": 8532}, {"license": 4, "file_name": "000000094336.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000094336.jpg", "height": 336, "width": 500, "date_captured": "2013-11-18 04:28:42", "flickr_url": "http://farm4.staticflickr.com/3110/2412271569_4e03bbb349_z.jpg", "id": 94336}, {"license": 1, "file_name": "000000390555.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000390555.jpg", "height": 435, "width": 640, "date_captured": "2013-11-18 04:36:24", "flickr_url": "http://farm3.staticflickr.com/2522/4121155671_932522e353_z.jpg", "id": 390555}, {"license": 1, "file_name": "000000250282.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000250282.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 04:46:03", "flickr_url": "http://farm4.staticflickr.com/3508/3967514122_e2b84cd2b9_z.jpg", "id": 250282}, {"license": 1, "file_name": "000000068409.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000068409.jpg", "height": 263, "width": 640, "date_captured": "2013-11-18 05:06:51", "flickr_url": "http://farm4.staticflickr.com/3058/3610679724_a071997142_z.jpg", "id": 68409}, {"license": 1, "file_name": "000000002299.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000002299.jpg", "height": 302, "width": 500, "date_captured": "2013-11-18 05:37:07", "flickr_url": "http://farm4.staticflickr.com/3558/3415469737_233e744fb9_z.jpg", "id": 2299}, {"license": 6, "file_name": "000000011051.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000011051.jpg", "height": 536, "width": 640, "date_captured": "2013-11-18 05:42:28", "flickr_url": "http://farm4.staticflickr.com/3155/3281278459_15063a4662_z.jpg", "id": 11051}, {"license": 4, "file_name": "000000066038.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000066038.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 05:53:24", "flickr_url": "http://farm9.staticflickr.com/8467/8148834743_f079cc001a_z.jpg", "id": 66038}, {"license": 1, "file_name": "000000360960.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000360960.jpg", "height": 640, "width": 426, "date_captured": "2013-11-18 08:55:02", "flickr_url": "http://farm9.staticflickr.com/8222/8386917555_5bffa5b154_z.jpg", "id": 360960}, {"license": 1, "file_name": "000000360097.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000360097.jpg", "height": 333, "width": 500, "date_captured": "2013-11-18 11:59:03", "flickr_url": "http://farm4.staticflickr.com/3036/2958290141_30ee3f054d_z.jpg", "id": 360097}, {"license": 2, "file_name": "000000421455.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000421455.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 14:47:40", "flickr_url": "http://farm3.staticflickr.com/2471/3797663529_cbe1bf3a68_z.jpg", "id": 421455}, {"license": 1, "file_name": "000000504589.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000504589.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 15:16:38", "flickr_url": "http://farm5.staticflickr.com/4148/5013972296_04ee096950_z.jpg", "id": 504589}, {"license": 1, "file_name": "000000464522.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000464522.jpg", "height": 640, "width": 494, "date_captured": "2013-11-18 16:50:49", "flickr_url": "http://farm5.staticflickr.com/4006/4383786876_b834d84989_z.jpg", "id": 464522}, {"license": 3, "file_name": "000000454750.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000454750.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 19:50:24", "flickr_url": "http://farm4.staticflickr.com/3382/3271467975_1b3d9af91c_z.jpg", "id": 454750}, {"license": 1, "file_name": "000000509735.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000509735.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 19:51:05", "flickr_url": "http://farm4.staticflickr.com/3348/3428934786_07664acb9e_z.jpg", "id": 509735}, {"license": 2, "file_name": "000000023034.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000023034.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 01:04:30", "flickr_url": "http://farm8.staticflickr.com/7454/9437230333_38c84fae2e_z.jpg", "id": 23034}, {"license": 1, "file_name": "000000141671.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000141671.jpg", "height": 335, "width": 640, "date_captured": "2013-11-19 02:24:51", "flickr_url": "http://farm8.staticflickr.com/7284/8742617216_d770ce0b2d_z.jpg", "id": 141671}, {"license": 3, "file_name": "000000506656.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000506656.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 03:07:22", "flickr_url": "http://farm9.staticflickr.com/8374/8522696682_a3601fe699_z.jpg", "id": 506656}, {"license": 1, "file_name": "000000272566.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000272566.jpg", "height": 451, "width": 640, "date_captured": "2013-11-19 18:22:39", "flickr_url": "http://farm3.staticflickr.com/2538/4026660856_2d901475bd_z.jpg", "id": 272566}, {"license": 3, "file_name": "000000045728.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000045728.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 18:51:49", "flickr_url": "http://farm3.staticflickr.com/2552/3815251275_124d78315b_z.jpg", "id": 45728}, {"license": 3, "file_name": "000000424551.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000424551.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 19:24:09", "flickr_url": "http://farm5.staticflickr.com/4003/4436733925_1567a76115_z.jpg", "id": 424551}, {"license": 3, "file_name": "000000341719.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000341719.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 19:24:34", "flickr_url": "http://farm4.staticflickr.com/3642/3367288266_7fbb7000ab_z.jpg", "id": 341719}, {"license": 2, "file_name": "000000072795.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000072795.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 20:01:51", "flickr_url": "http://farm3.staticflickr.com/2514/3851485364_c467950a1b_z.jpg", "id": 72795}, {"license": 4, "file_name": "000000078959.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000078959.jpg", "height": 640, "width": 384, "date_captured": "2013-11-19 20:16:16", "flickr_url": "http://farm9.staticflickr.com/8423/7623696666_ebf4bcbec7_z.jpg", "id": 78959}, {"license": 6, "file_name": "000000417285.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000417285.jpg", "height": 320, "width": 640, "date_captured": "2013-11-19 21:04:20", "flickr_url": "http://farm8.staticflickr.com/7012/6643830919_0706555684_z.jpg", "id": 417285}, {"license": 3, "file_name": "000000002157.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000002157.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 21:08:17", "flickr_url": "http://farm4.staticflickr.com/3420/3703634752_eb62cf3e7f_z.jpg", "id": 2157}, {"license": 3, "file_name": "000000043816.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000043816.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 21:15:54", "flickr_url": "http://farm4.staticflickr.com/3263/2320943284_32fbdba4e2_z.jpg", "id": 43816}, {"license": 1, "file_name": "000000455555.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000455555.jpg", "height": 550, "width": 640, "date_captured": "2013-11-19 22:11:59", "flickr_url": "http://farm3.staticflickr.com/2796/4251948798_84df907b8d_z.jpg", "id": 455555}, {"license": 5, "file_name": "000000535306.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000535306.jpg", "height": 333, "width": 500, "date_captured": "2013-11-19 23:08:00", "flickr_url": "http://farm4.staticflickr.com/3158/2385411389_bc26c51be4_z.jpg", "id": 535306}, {"license": 4, "file_name": "000000030504.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000030504.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 23:13:12", "flickr_url": "http://farm6.staticflickr.com/5088/5320611177_13273d2c90_z.jpg", "id": 30504}, {"license": 2, "file_name": "000000093353.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000093353.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 00:49:29", "flickr_url": "http://farm5.staticflickr.com/4015/4278420367_021e8ec0e5_z.jpg", "id": 93353}, {"license": 5, "file_name": "000000530052.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000530052.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 03:26:51", "flickr_url": "http://farm9.staticflickr.com/8039/7907967150_705e33f008_z.jpg", "id": 530052}, {"license": 1, "file_name": "000000473118.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000473118.jpg", "height": 500, "width": 346, "date_captured": "2013-11-20 09:39:59", "flickr_url": "http://farm4.staticflickr.com/3035/3099792592_577943526e_z.jpg", "id": 473118}, {"license": 5, "file_name": "000000091779.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000091779.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 12:36:20", "flickr_url": "http://farm5.staticflickr.com/4063/4720316284_2b565f20a1_z.jpg", "id": 91779}, {"license": 1, "file_name": "000000283113.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000283113.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 12:38:33", "flickr_url": "http://farm5.staticflickr.com/4115/4769619430_60e7553fe1_z.jpg", "id": 283113}, {"license": 5, "file_name": "000000226130.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000226130.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 12:57:41", "flickr_url": "http://farm4.staticflickr.com/3557/3459904648_b6e3ed76f6_z.jpg", "id": 226130}, {"license": 5, "file_name": "000000097278.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000097278.jpg", "height": 640, "width": 457, "date_captured": "2013-11-20 13:52:10", "flickr_url": "http://farm4.staticflickr.com/3255/3161956651_8c8631d721_z.jpg", "id": 97278}, {"license": 6, "file_name": "000000567640.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000567640.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 15:58:07", "flickr_url": "http://farm3.staticflickr.com/2451/3904972065_3746a3e9e7_z.jpg", "id": 567640}, {"license": 3, "file_name": "000000532493.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000532493.jpg", "height": 408, "width": 640, "date_captured": "2013-11-20 18:05:25", "flickr_url": "http://farm9.staticflickr.com/8036/8027793561_893d2d9f45_z.jpg", "id": 532493}, {"license": 1, "file_name": "000000045550.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000045550.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 18:57:13", "flickr_url": "http://farm4.staticflickr.com/3011/2951101998_d454d50177_z.jpg", "id": 45550}, {"license": 1, "file_name": "000000156643.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000156643.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 19:22:23", "flickr_url": "http://farm9.staticflickr.com/8005/7534710698_69f4077419_z.jpg", "id": 156643}, {"license": 4, "file_name": "000000430056.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000430056.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 19:38:49", "flickr_url": "http://farm4.staticflickr.com/3152/2286746912_8954bfabea_z.jpg", "id": 430056}, {"license": 4, "file_name": "000000410456.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000410456.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 20:36:24", "flickr_url": "http://farm9.staticflickr.com/8336/8438575589_a01a6990e2_z.jpg", "id": 410456}, {"license": 5, "file_name": "000000441286.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000441286.jpg", "height": 493, "width": 640, "date_captured": "2013-11-20 21:24:16", "flickr_url": "http://farm6.staticflickr.com/5116/7438351812_199d0a6112_z.jpg", "id": 441286}, {"license": 5, "file_name": "000000279541.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000279541.jpg", "height": 640, "width": 478, "date_captured": "2013-11-21 00:36:11", "flickr_url": "http://farm6.staticflickr.com/5096/5465485177_db70efc12f_z.jpg", "id": 279541}, {"license": 4, "file_name": "000000000885.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000000885.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 02:00:45", "flickr_url": "http://farm4.staticflickr.com/3715/9639200419_ee41490b2a_z.jpg", "id": 885}, {"license": 5, "file_name": "000000378284.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000378284.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 02:01:10", "flickr_url": "http://farm9.staticflickr.com/8473/8137380573_04e6f542a0_z.jpg", "id": 378284}, {"license": 1, "file_name": "000000156076.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000156076.jpg", "height": 478, "width": 640, "date_captured": "2013-11-21 03:27:05", "flickr_url": "http://farm7.staticflickr.com/6167/6184144501_e2bc380353_z.jpg", "id": 156076}, {"license": 4, "file_name": "000000143572.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000143572.jpg", "height": 424, "width": 640, "date_captured": "2013-11-21 04:00:47", "flickr_url": "http://farm7.staticflickr.com/6078/6107512609_48fe33ae34_z.jpg", "id": 143572}, {"license": 4, "file_name": "000000229849.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000229849.jpg", "height": 640, "width": 427, "date_captured": "2013-11-21 05:06:58", "flickr_url": "http://farm5.staticflickr.com/4098/4943602569_06eebef70f_z.jpg", "id": 229849}, {"license": 4, "file_name": "000000039551.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000039551.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 05:11:04", "flickr_url": "http://farm5.staticflickr.com/4145/4963684976_cc0fa0b133_z.jpg", "id": 39551}, {"license": 1, "file_name": "000000056344.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000056344.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 19:21:29", "flickr_url": "http://farm4.staticflickr.com/3136/2772779025_a52bae38bc_z.jpg", "id": 56344}, {"license": 3, "file_name": "000000193348.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000193348.jpg", "height": 640, "width": 426, "date_captured": "2013-11-21 19:53:28", "flickr_url": "http://farm4.staticflickr.com/3189/2704497930_8326fb029e_z.jpg", "id": 193348}, {"license": 3, "file_name": "000000016958.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000016958.jpg", "height": 428, "width": 640, "date_captured": "2013-11-21 20:49:33", "flickr_url": "http://farm8.staticflickr.com/7108/7435713066_78b44aae33_z.jpg", "id": 16958}, {"license": 3, "file_name": "000000572678.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000572678.jpg", "height": 425, "width": 640, "date_captured": "2013-11-21 23:00:16", "flickr_url": "http://farm7.staticflickr.com/6018/5938764992_22789ce812_z.jpg", "id": 572678}, {"license": 1, "file_name": "000000106235.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000106235.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 01:12:05", "flickr_url": "http://farm5.staticflickr.com/4044/4255809560_4763ac28e1_z.jpg", "id": 106235}, {"license": 1, "file_name": "000000341681.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000341681.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 02:37:40", "flickr_url": "http://farm3.staticflickr.com/2502/4008660062_d14dd8237e_z.jpg", "id": 341681}, {"license": 1, "file_name": "000000083172.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000083172.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 02:37:43", "flickr_url": "http://farm3.staticflickr.com/2478/4007980007_ba870ec1fa_z.jpg", "id": 83172}, {"license": 1, "file_name": "000000343524.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000343524.jpg", "height": 447, "width": 640, "date_captured": "2013-11-22 02:37:46", "flickr_url": "http://farm3.staticflickr.com/2645/4008688728_f882f1ba16_z.jpg", "id": 343524}, {"license": 1, "file_name": "000000395801.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000395801.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 21:06:57", "flickr_url": "http://farm9.staticflickr.com/8190/8145183946_265dba98cb_z.jpg", "id": 395801}, {"license": 4, "file_name": "000000388056.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000388056.jpg", "height": 332, "width": 500, "date_captured": "2013-11-22 23:19:02", "flickr_url": "http://farm4.staticflickr.com/3218/2443485512_533ba95111_z.jpg", "id": 388056}, {"license": 3, "file_name": "000000259690.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000259690.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 23:35:46", "flickr_url": "http://farm6.staticflickr.com/5305/5575757380_555e1abeb0_z.jpg", "id": 259690}, {"license": 3, "file_name": "000000235836.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000235836.jpg", "height": 640, "width": 427, "date_captured": "2013-11-23 00:56:12", "flickr_url": "http://farm8.staticflickr.com/7196/7125669095_6e2cf1eaa8_z.jpg", "id": 235836}, {"license": 4, "file_name": "000000343218.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000343218.jpg", "height": 428, "width": 640, "date_captured": "2013-11-23 04:07:15", "flickr_url": "http://farm4.staticflickr.com/3169/2653643649_665418b9df_z.jpg", "id": 343218}, {"license": 4, "file_name": "000000205105.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000205105.jpg", "height": 428, "width": 640, "date_captured": "2013-11-23 04:07:18", "flickr_url": "http://farm4.staticflickr.com/3257/2654468936_be7cbac775_z.jpg", "id": 205105}, {"license": 5, "file_name": "000000513283.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000513283.jpg", "height": 520, "width": 640, "date_captured": "2013-11-23 04:20:00", "flickr_url": "http://farm3.staticflickr.com/2428/3749662939_d86eaa8c8d_z.jpg", "id": 513283}, {"license": 2, "file_name": "000000176446.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000176446.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 15:31:13", "flickr_url": "http://farm5.staticflickr.com/4144/5147299912_ab3a207971_z.jpg", "id": 176446}, {"license": 5, "file_name": "000000371677.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000371677.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 19:23:19", "flickr_url": "http://farm4.staticflickr.com/3596/3462811561_4af8a2ecff_z.jpg", "id": 371677}, {"license": 1, "file_name": "000000308531.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000308531.jpg", "height": 640, "width": 359, "date_captured": "2013-11-24 01:10:48", "flickr_url": "http://farm9.staticflickr.com/8115/8686862549_584484e61d_z.jpg", "id": 308531}, {"license": 2, "file_name": "000000497599.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000497599.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 02:41:42", "flickr_url": "http://farm6.staticflickr.com/5134/5465932976_b16cb96c6d_z.jpg", "id": 497599}, {"license": 1, "file_name": "000000455352.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000455352.jpg", "height": 530, "width": 640, "date_captured": "2013-11-24 02:44:43", "flickr_url": "http://farm6.staticflickr.com/5270/5761829591_7fb4f99273_z.jpg", "id": 455352}, {"license": 3, "file_name": "000000236914.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000236914.jpg", "height": 449, "width": 640, "date_captured": "2013-11-24 03:04:22", "flickr_url": "http://farm5.staticflickr.com/4004/4345308703_1aa15768bf_z.jpg", "id": 236914}, {"license": 1, "file_name": "000000232684.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000232684.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 03:23:47", "flickr_url": "http://farm3.staticflickr.com/2745/4502134802_bcbd4f12ae_z.jpg", "id": 232684}, {"license": 1, "file_name": "000000415238.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000415238.jpg", "height": 474, "width": 640, "date_captured": "2013-11-24 04:28:48", "flickr_url": "http://farm1.staticflickr.com/74/194504008_041c717d0f_z.jpg", "id": 415238}, {"license": 5, "file_name": "000000290843.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000290843.jpg", "height": 640, "width": 428, "date_captured": "2013-11-24 04:32:33", "flickr_url": "http://farm4.staticflickr.com/3426/3384885001_346b9951a5_z.jpg", "id": 290843}, {"license": 4, "file_name": "000000519522.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000519522.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 12:20:38", "flickr_url": "http://farm8.staticflickr.com/7127/7014010645_8b20027f68_z.jpg", "id": 519522}, {"license": 3, "file_name": "000000144784.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000144784.jpg", "height": 500, "width": 375, "date_captured": "2013-11-24 12:36:05", "flickr_url": "http://farm5.staticflickr.com/4068/4432924938_68fded496e_z.jpg", "id": 144784}, {"license": 3, "file_name": "000000167486.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000167486.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 12:42:21", "flickr_url": "http://farm3.staticflickr.com/2600/3961919110_208eefde1f_z.jpg", "id": 167486}, {"license": 1, "file_name": "000000392228.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000392228.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 13:11:53", "flickr_url": "http://farm3.staticflickr.com/2826/10157206573_b125c254fe_z.jpg", "id": 392228}, {"license": 6, "file_name": "000000488673.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000488673.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 14:45:50", "flickr_url": "http://farm7.staticflickr.com/6185/6153096478_0d431f123e_z.jpg", "id": 488673}, {"license": 5, "file_name": "000000191013.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000191013.jpg", "height": 640, "width": 474, "date_captured": "2013-11-24 15:14:15", "flickr_url": "http://farm9.staticflickr.com/8057/8193281147_81461e9773_z.jpg", "id": 191013}, {"license": 3, "file_name": "000000080057.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000080057.jpg", "height": 640, "width": 423, "date_captured": "2013-11-24 21:59:48", "flickr_url": "http://farm3.staticflickr.com/2324/2140853024_dffb82fedb_z.jpg", "id": 80057}, {"license": 3, "file_name": "000000570169.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000570169.jpg", "height": 640, "width": 423, "date_captured": "2013-11-24 21:59:52", "flickr_url": "http://farm3.staticflickr.com/2361/2140068417_5378b98af5_z.jpg", "id": 570169}, {"license": 3, "file_name": "000000224807.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000224807.jpg", "height": 428, "width": 640, "date_captured": "2013-11-25 14:19:34", "flickr_url": "http://farm8.staticflickr.com/7281/9610809291_fda853e88c_z.jpg", "id": 224807}, {"license": 1, "file_name": "000000163562.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000163562.jpg", "height": 333, "width": 500, "date_captured": "2013-11-14 17:24:52", "flickr_url": "http://farm1.staticflickr.com/114/260516816_a214f47b35_z.jpg", "id": 163562}, {"license": 2, "file_name": "000000136355.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000136355.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 19:32:02", "flickr_url": "http://farm9.staticflickr.com/8230/8422234851_13fffe755b_z.jpg", "id": 136355}, {"license": 5, "file_name": "000000492362.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000492362.jpg", "height": 640, "width": 427, "date_captured": "2013-11-14 20:36:56", "flickr_url": "http://farm8.staticflickr.com/7383/9825580104_5ffd1e274c_z.jpg", "id": 492362}, {"license": 3, "file_name": "000000102707.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000102707.jpg", "height": 612, "width": 612, "date_captured": "2013-11-14 21:18:30", "flickr_url": "http://farm4.staticflickr.com/3747/8928536562_e8168d2752_z.jpg", "id": 102707}, {"license": 5, "file_name": "000000232563.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000232563.jpg", "height": 640, "width": 480, "date_captured": "2013-11-14 22:40:44", "flickr_url": "http://farm6.staticflickr.com/5478/9825627186_e7f5590cda_z.jpg", "id": 232563}, {"license": 2, "file_name": "000000010977.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000010977.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 02:16:38", "flickr_url": "http://farm9.staticflickr.com/8060/8241415983_02d80c2fca_z.jpg", "id": 10977}, {"license": 2, "file_name": "000000051598.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000051598.jpg", "height": 640, "width": 360, "date_captured": "2013-11-15 05:05:10", "flickr_url": "http://farm2.staticflickr.com/1324/5147698268_53589c46c2_z.jpg", "id": 51598}, {"license": 1, "file_name": "000000032285.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000032285.jpg", "height": 423, "width": 640, "date_captured": "2013-11-15 05:22:17", "flickr_url": "http://farm5.staticflickr.com/4099/4946007139_c8eee08938_z.jpg", "id": 32285}, {"license": 5, "file_name": "000000520910.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000520910.jpg", "height": 640, "width": 427, "date_captured": "2013-11-15 06:00:51", "flickr_url": "http://farm6.staticflickr.com/5345/7066872039_6f780f6537_z.jpg", "id": 520910}, {"license": 3, "file_name": "000000131273.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000131273.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 07:56:00", "flickr_url": "http://farm4.staticflickr.com/3206/2661570761_c8b6432480_z.jpg", "id": 131273}, {"license": 6, "file_name": "000000206411.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000206411.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 11:45:18", "flickr_url": "http://farm3.staticflickr.com/2416/2327088026_1443c96517_z.jpg", "id": 206411}, {"license": 3, "file_name": "000000472375.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000472375.jpg", "height": 612, "width": 612, "date_captured": "2013-11-15 12:52:52", "flickr_url": "http://farm6.staticflickr.com/5333/8941457326_2c96e58e7f_z.jpg", "id": 472375}, {"license": 3, "file_name": "000000481404.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000481404.jpg", "height": 424, "width": 640, "date_captured": "2013-11-15 13:21:05", "flickr_url": "http://farm4.staticflickr.com/3766/9213425136_615ec935a5_z.jpg", "id": 481404}, {"license": 3, "file_name": "000000471991.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000471991.jpg", "height": 424, "width": 640, "date_captured": "2013-11-15 13:21:08", "flickr_url": "http://farm4.staticflickr.com/3677/9210647719_12f9e6c4bf_z.jpg", "id": 471991}, {"license": 1, "file_name": "000000017436.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000017436.jpg", "height": 640, "width": 481, "date_captured": "2013-11-15 14:11:51", "flickr_url": "http://farm4.staticflickr.com/3265/2922590857_cc7c32cfaa_z.jpg", "id": 17436}, {"license": 1, "file_name": "000000177934.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000177934.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 14:11:59", "flickr_url": "http://farm7.staticflickr.com/6021/5994119446_b5ec8e1e76_z.jpg", "id": 177934}, {"license": 4, "file_name": "000000165518.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000165518.jpg", "height": 612, "width": 612, "date_captured": "2013-11-15 18:04:25", "flickr_url": "http://farm8.staticflickr.com/7216/7243537732_10dda0da2a_z.jpg", "id": 165518}, {"license": 1, "file_name": "000000571718.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000571718.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 18:51:56", "flickr_url": "http://farm5.staticflickr.com/4099/4887062297_24b9bed23b_z.jpg", "id": 571718}, {"license": 1, "file_name": "000000459467.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000459467.jpg", "height": 423, "width": 640, "date_captured": "2013-11-16 02:02:48", "flickr_url": "http://farm8.staticflickr.com/7096/7002585733_0ba0371fd8_z.jpg", "id": 459467}, {"license": 5, "file_name": "000000135673.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000135673.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 04:35:24", "flickr_url": "http://farm6.staticflickr.com/5202/5308386082_b099bea56f_z.jpg", "id": 135673}, {"license": 4, "file_name": "000000134886.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000134886.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 05:17:13", "flickr_url": "http://farm5.staticflickr.com/4128/5048434632_d18999fce8_z.jpg", "id": 134886}, {"license": 3, "file_name": "000000485895.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000485895.jpg", "height": 332, "width": 500, "date_captured": "2013-11-16 12:09:51", "flickr_url": "http://farm2.staticflickr.com/1291/888941469_92ea1492c7_z.jpg", "id": 485895}, {"license": 5, "file_name": "000000287545.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000287545.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 12:48:36", "flickr_url": "http://farm1.staticflickr.com/132/320013666_9ff084c09b_z.jpg", "id": 287545}, {"license": 1, "file_name": "000000577182.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000577182.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 14:16:39", "flickr_url": "http://farm9.staticflickr.com/8008/7681845122_8e8a2f934c_z.jpg", "id": 577182}, {"license": 5, "file_name": "000000289222.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000289222.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 14:31:55", "flickr_url": "http://farm3.staticflickr.com/2222/2279903008_8bc312fe60_z.jpg", "id": 289222}, {"license": 4, "file_name": "000000372819.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000372819.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 15:37:09", "flickr_url": "http://farm3.staticflickr.com/2046/2516944023_d00345997d_z.jpg", "id": 372819}, {"license": 1, "file_name": "000000310072.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000310072.jpg", "height": 383, "width": 640, "date_captured": "2013-11-16 15:44:29", "flickr_url": "http://farm8.staticflickr.com/7075/7241225258_944dc7f463_z.jpg", "id": 310072}, {"license": 1, "file_name": "000000087144.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000087144.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 15:44:37", "flickr_url": "http://farm4.staticflickr.com/3160/2815098457_feae872a7b_z.jpg", "id": 87144}, {"license": 1, "file_name": "000000430875.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000430875.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 19:27:24", "flickr_url": "http://farm1.staticflickr.com/170/475989976_64b6f929ac_z.jpg", "id": 430875}, {"license": 2, "file_name": "000000060347.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000060347.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 19:45:51", "flickr_url": "http://farm5.staticflickr.com/4120/4748721735_29c894a29a_z.jpg", "id": 60347}, {"license": 1, "file_name": "000000042070.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000042070.jpg", "height": 512, "width": 640, "date_captured": "2013-11-16 21:14:37", "flickr_url": "http://farm4.staticflickr.com/3816/9234762892_045193b1ea_z.jpg", "id": 42070}, {"license": 5, "file_name": "000000420916.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000420916.jpg", "height": 400, "width": 640, "date_captured": "2013-11-16 22:08:12", "flickr_url": "http://farm9.staticflickr.com/8179/7954749702_4952236206_z.jpg", "id": 420916}, {"license": 1, "file_name": "000000453584.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000453584.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 22:08:16", "flickr_url": "http://farm9.staticflickr.com/8042/8038326164_4d6db31f9e_z.jpg", "id": 453584}, {"license": 1, "file_name": "000000296224.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000296224.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 22:29:32", "flickr_url": "http://farm9.staticflickr.com/8405/8669252036_b87610bf35_z.jpg", "id": 296224}, {"license": 1, "file_name": "000000122606.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000122606.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 00:14:47", "flickr_url": "http://farm9.staticflickr.com/8208/8249670581_16a9b67080_z.jpg", "id": 122606}, {"license": 1, "file_name": "000000311909.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000311909.jpg", "height": 496, "width": 640, "date_captured": "2013-11-17 00:32:51", "flickr_url": "http://farm9.staticflickr.com/8062/8169978824_bcfa9e0e1f_z.jpg", "id": 311909}, {"license": 1, "file_name": "000000579893.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000579893.jpg", "height": 332, "width": 500, "date_captured": "2013-11-17 00:53:48", "flickr_url": "http://farm3.staticflickr.com/2332/1827977832_550d6333f2_z.jpg", "id": 579893}, {"license": 1, "file_name": "000000284296.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000284296.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 01:23:59", "flickr_url": "http://farm3.staticflickr.com/2335/1491511306_127dae3a8b_z.jpg", "id": 284296}, {"license": 2, "file_name": "000000221017.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000221017.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 01:26:16", "flickr_url": "http://farm4.staticflickr.com/3285/5820848683_fe30a044ed_z.jpg", "id": 221017}, {"license": 2, "file_name": "000000315001.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000315001.jpg", "height": 639, "width": 640, "date_captured": "2013-11-17 01:34:12", "flickr_url": "http://farm8.staticflickr.com/7182/6891255705_fa27391117_z.jpg", "id": 315001}, {"license": 2, "file_name": "000000439715.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000439715.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 04:03:14", "flickr_url": "http://farm4.staticflickr.com/3544/3800625624_4bd87128c6_z.jpg", "id": 439715}, {"license": 5, "file_name": "000000284991.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000284991.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 04:15:33", "flickr_url": "http://farm5.staticflickr.com/4039/4511666450_5c836452b1_z.jpg", "id": 284991}, {"license": 3, "file_name": "000000389566.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000389566.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 04:21:03", "flickr_url": "http://farm3.staticflickr.com/2722/4394758713_a648e0af3f_z.jpg", "id": 389566}, {"license": 6, "file_name": "000000078843.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000078843.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 05:16:20", "flickr_url": "http://farm4.staticflickr.com/3023/2672786915_248cfd7c62_z.jpg", "id": 78843}, {"license": 3, "file_name": "000000122927.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000122927.jpg", "height": 361, "width": 640, "date_captured": "2013-11-17 05:54:33", "flickr_url": "http://farm3.staticflickr.com/2843/9446765897_ea4b6b749d_z.jpg", "id": 122927}, {"license": 5, "file_name": "000000225532.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000225532.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 06:24:35", "flickr_url": "http://farm3.staticflickr.com/2257/2299155495_0caaf58c5d_z.jpg", "id": 225532}, {"license": 4, "file_name": "000000013659.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000013659.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 06:35:46", "flickr_url": "http://farm7.staticflickr.com/6144/5987177856_785814a990_z.jpg", "id": 13659}, {"license": 1, "file_name": "000000153568.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000153568.jpg", "height": 400, "width": 500, "date_captured": "2013-11-17 10:18:55", "flickr_url": "http://farm2.staticflickr.com/1363/1294349474_ff5cd66d3e_z.jpg", "id": 153568}, {"license": 5, "file_name": "000000395633.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000395633.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 10:26:05", "flickr_url": "http://farm7.staticflickr.com/6117/6227458541_7df2d92981_z.jpg", "id": 395633}, {"license": 4, "file_name": "000000419096.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000419096.jpg", "height": 612, "width": 612, "date_captured": "2013-11-17 10:43:40", "flickr_url": "http://farm9.staticflickr.com/8545/8645437289_cbf518ba6a_z.jpg", "id": 419096}, {"license": 3, "file_name": "000000203488.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000203488.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 11:18:32", "flickr_url": "http://farm9.staticflickr.com/8398/8621282111_050c45f034_z.jpg", "id": 203488}, {"license": 3, "file_name": "000000361268.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000361268.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 16:54:37", "flickr_url": "http://farm4.staticflickr.com/3120/3164430517_bce55a47ea_z.jpg", "id": 361268}, {"license": 6, "file_name": "000000466125.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000466125.jpg", "height": 640, "width": 427, "date_captured": "2013-11-17 19:00:39", "flickr_url": "http://farm8.staticflickr.com/7157/6615667627_b035918bf7_z.jpg", "id": 466125}, {"license": 4, "file_name": "000000414795.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000414795.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 02:42:27", "flickr_url": "http://farm1.staticflickr.com/69/221842206_28bfc63fc8_z.jpg", "id": 414795}, {"license": 4, "file_name": "000000508101.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000508101.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 05:05:11", "flickr_url": "http://farm8.staticflickr.com/7353/9665266176_774de49912_z.jpg", "id": 508101}, {"license": 4, "file_name": "000000253386.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000253386.jpg", "height": 333, "width": 500, "date_captured": "2013-11-18 08:13:07", "flickr_url": "http://farm4.staticflickr.com/3196/3037448990_28822471dd_z.jpg", "id": 253386}, {"license": 1, "file_name": "000000222991.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000222991.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 09:07:09", "flickr_url": "http://farm9.staticflickr.com/8050/8431631488_be42760770_z.jpg", "id": 222991}, {"license": 1, "file_name": "000000530854.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000530854.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 09:29:59", "flickr_url": "http://farm8.staticflickr.com/7118/7711594038_4a0e397a7f_z.jpg", "id": 530854}, {"license": 1, "file_name": "000000351810.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000351810.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 11:32:56", "flickr_url": "http://farm1.staticflickr.com/116/280149989_49120a13fd_z.jpg", "id": 351810}, {"license": 3, "file_name": "000000338624.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000338624.jpg", "height": 360, "width": 640, "date_captured": "2013-11-18 12:38:49", "flickr_url": "http://farm6.staticflickr.com/5136/5557842164_dbc84af430_z.jpg", "id": 338624}, {"license": 3, "file_name": "000000138492.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000138492.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 12:46:22", "flickr_url": "http://farm7.staticflickr.com/6044/5890538138_41b401bfee_z.jpg", "id": 138492}, {"license": 3, "file_name": "000000263463.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000263463.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 14:26:31", "flickr_url": "http://farm7.staticflickr.com/6197/6033333142_1a6f38cbdc_z.jpg", "id": 263463}, {"license": 3, "file_name": "000000226592.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000226592.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 15:13:46", "flickr_url": "http://farm4.staticflickr.com/3130/2426165650_f025420248_z.jpg", "id": 226592}, {"license": 4, "file_name": "000000378454.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000378454.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 17:45:49", "flickr_url": "http://farm1.staticflickr.com/192/462809186_70b4d6ea95_z.jpg", "id": 378454}, {"license": 1, "file_name": "000000020059.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000020059.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 21:44:47", "flickr_url": "http://farm1.staticflickr.com/177/393601030_4451879068_z.jpg", "id": 20059}, {"license": 5, "file_name": "000000227686.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000227686.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 22:44:50", "flickr_url": "http://farm6.staticflickr.com/5162/5321580225_fc7b1a7ecf_z.jpg", "id": 227686}, {"license": 5, "file_name": "000000476215.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000476215.jpg", "height": 409, "width": 640, "date_captured": "2013-11-18 23:00:44", "flickr_url": "http://farm6.staticflickr.com/5183/5625249657_f47dbafb44_z.jpg", "id": 476215}, {"license": 5, "file_name": "000000297698.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000297698.jpg", "height": 441, "width": 640, "date_captured": "2013-11-19 18:14:17", "flickr_url": "http://farm5.staticflickr.com/4025/4451444085_cfed7cc77b_z.jpg", "id": 297698}, {"license": 4, "file_name": "000000247917.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000247917.jpg", "height": 612, "width": 612, "date_captured": "2013-11-19 19:00:37", "flickr_url": "http://farm9.staticflickr.com/8164/7205570594_5aba222a6f_z.jpg", "id": 247917}, {"license": 3, "file_name": "000000439522.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000439522.jpg", "height": 640, "width": 428, "date_captured": "2013-11-19 19:39:43", "flickr_url": "http://farm4.staticflickr.com/3745/9080023821_203eb14f7b_z.jpg", "id": 439522}, {"license": 2, "file_name": "000000479448.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000479448.jpg", "height": 375, "width": 500, "date_captured": "2013-11-19 21:31:26", "flickr_url": "http://farm4.staticflickr.com/3527/3868813152_30b307ca2c_z.jpg", "id": 479448}, {"license": 1, "file_name": "000000424721.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000424721.jpg", "height": 375, "width": 500, "date_captured": "2013-11-19 22:21:41", "flickr_url": "http://farm4.staticflickr.com/3226/3034542793_6722da97dc_z.jpg", "id": 424721}, {"license": 1, "file_name": "000000026690.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000026690.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 00:49:38", "flickr_url": "http://farm9.staticflickr.com/8171/8067493921_fe3e2b965d_z.jpg", "id": 26690}, {"license": 1, "file_name": "000000558854.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000558854.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 01:17:48", "flickr_url": "http://farm4.staticflickr.com/3269/2979010725_1cf99a0537_z.jpg", "id": 558854}, {"license": 6, "file_name": "000000176901.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000176901.jpg", "height": 359, "width": 640, "date_captured": "2013-11-20 04:17:29", "flickr_url": "http://farm3.staticflickr.com/2698/4398034587_7bcf1de4dc_z.jpg", "id": 176901}, {"license": 3, "file_name": "000000334767.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000334767.jpg", "height": 333, "width": 500, "date_captured": "2013-11-20 04:32:25", "flickr_url": "http://farm5.staticflickr.com/4010/4330933128_12cc0294e0_z.jpg", "id": 334767}, {"license": 1, "file_name": "000000301563.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000301563.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 06:07:09", "flickr_url": "http://farm4.staticflickr.com/3423/3983648748_94a0b36ddd_z.jpg", "id": 301563}, {"license": 5, "file_name": "000000086755.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000086755.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 07:03:30", "flickr_url": "http://farm4.staticflickr.com/3631/3412644539_69fe3d5d40_z.jpg", "id": 86755}, {"license": 3, "file_name": "000000194471.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000194471.jpg", "height": 500, "width": 334, "date_captured": "2013-11-20 08:02:12", "flickr_url": "http://farm4.staticflickr.com/3352/3518883987_216b61e781_z.jpg", "id": 194471}, {"license": 1, "file_name": "000000420281.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000420281.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 09:10:53", "flickr_url": "http://farm4.staticflickr.com/3037/4594235759_1f21fc6283_z.jpg", "id": 420281}, {"license": 4, "file_name": "000000533206.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000533206.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 13:32:33", "flickr_url": "http://farm4.staticflickr.com/3048/2344619541_817c0410df_z.jpg", "id": 533206}, {"license": 1, "file_name": "000000099810.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000099810.jpg", "height": 332, "width": 500, "date_captured": "2013-11-20 15:41:31", "flickr_url": "http://farm4.staticflickr.com/3148/2547802515_97436f03b6_z.jpg", "id": 99810}, {"license": 1, "file_name": "000000334483.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000334483.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 19:08:23", "flickr_url": "http://farm5.staticflickr.com/4105/4959046798_196bb5e37e_z.jpg", "id": 334483}, {"license": 1, "file_name": "000000089670.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000089670.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 21:26:50", "flickr_url": "http://farm9.staticflickr.com/8095/8382928120_b2a0ab13e9_z.jpg", "id": 89670}, {"license": 1, "file_name": "000000482275.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000482275.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 22:13:58", "flickr_url": "http://farm9.staticflickr.com/8035/8025419960_b469e95438_z.jpg", "id": 482275}, {"license": 1, "file_name": "000000404805.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000404805.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 23:18:47", "flickr_url": "http://farm3.staticflickr.com/2015/5819600903_2cc6cb4ce5_z.jpg", "id": 404805}, {"license": 1, "file_name": "000000002261.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000002261.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 23:18:53", "flickr_url": "http://farm6.staticflickr.com/5106/5815611356_4e75666ac1_z.jpg", "id": 2261}, {"license": 2, "file_name": "000000425702.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000425702.jpg", "height": 316, "width": 640, "date_captured": "2013-11-21 00:26:03", "flickr_url": "http://farm5.staticflickr.com/4132/5092797632_1bef20324d_z.jpg", "id": 425702}, {"license": 1, "file_name": "000000036844.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000036844.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 00:57:49", "flickr_url": "http://farm2.staticflickr.com/1148/1380513519_bf3118f57a_z.jpg", "id": 36844}, {"license": 3, "file_name": "000000012576.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000012576.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 01:24:50", "flickr_url": "http://farm3.staticflickr.com/2813/9012011605_cbb7999e2b_z.jpg", "id": 12576}, {"license": 2, "file_name": "000000361238.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000361238.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 05:19:42", "flickr_url": "http://farm5.staticflickr.com/4148/4840284784_212c1c61c3_z.jpg", "id": 361238}, {"license": 1, "file_name": "000000108253.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000108253.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 05:38:53", "flickr_url": "http://farm2.staticflickr.com/1297/4698654120_3fe5e870af_z.jpg", "id": 108253}, {"license": 4, "file_name": "000000319935.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000319935.jpg", "height": 398, "width": 640, "date_captured": "2013-11-21 19:52:28", "flickr_url": "http://farm4.staticflickr.com/3352/3542980344_a845a4cb2c_z.jpg", "id": 319935}, {"license": 1, "file_name": "000000003934.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000003934.jpg", "height": 500, "width": 375, "date_captured": "2013-11-21 21:11:39", "flickr_url": "http://farm4.staticflickr.com/3429/3315867532_e9422607e8_z.jpg", "id": 3934}, {"license": 4, "file_name": "000000029596.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000029596.jpg", "height": 428, "width": 640, "date_captured": "2013-11-22 00:21:09", "flickr_url": "http://farm2.staticflickr.com/1174/4724268948_f93c2cb404_z.jpg", "id": 29596}, {"license": 6, "file_name": "000000047740.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000047740.jpg", "height": 359, "width": 640, "date_captured": "2013-11-22 16:10:58", "flickr_url": "http://farm2.staticflickr.com/1426/4720675807_cd23e73b1c_z.jpg", "id": 47740}, {"license": 4, "file_name": "000000077460.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000077460.jpg", "height": 640, "width": 428, "date_captured": "2013-11-22 17:18:50", "flickr_url": "http://farm4.staticflickr.com/3537/3506097763_9ff5428b47_z.jpg", "id": 77460}, {"license": 4, "file_name": "000000014439.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000014439.jpg", "height": 404, "width": 640, "date_captured": "2013-11-22 17:25:30", "flickr_url": "http://farm4.staticflickr.com/3544/3506151605_2a3530b2f9_z.jpg", "id": 14439}, {"license": 3, "file_name": "000000571893.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000571893.jpg", "height": 428, "width": 640, "date_captured": "2013-11-22 17:41:10", "flickr_url": "http://farm3.staticflickr.com/2022/2259614880_966b3fee92_z.jpg", "id": 571893}, {"license": 5, "file_name": "000000447314.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000447314.jpg", "height": 458, "width": 640, "date_captured": "2013-11-22 19:51:18", "flickr_url": "http://farm1.staticflickr.com/42/263967623_cc4ad0bbbb_z.jpg", "id": 447314}, {"license": 3, "file_name": "000000181303.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000181303.jpg", "height": 358, "width": 640, "date_captured": "2013-11-22 20:40:21", "flickr_url": "http://farm1.staticflickr.com/31/44245371_41584b38d1_z.jpg", "id": 181303}, {"license": 2, "file_name": "000000058350.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000058350.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 03:41:48", "flickr_url": "http://farm3.staticflickr.com/2525/4087560388_25e3a6069d_z.jpg", "id": 58350}, {"license": 1, "file_name": "000000026465.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000026465.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 00:50:53", "flickr_url": "http://farm3.staticflickr.com/2625/4156717388_774a66bae1_z.jpg", "id": 26465}, {"license": 3, "file_name": "000000246968.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000246968.jpg", "height": 428, "width": 640, "date_captured": "2013-11-24 01:40:19", "flickr_url": "http://farm5.staticflickr.com/4142/4778663159_985707cfc0_z.jpg", "id": 246968}, {"license": 3, "file_name": "000000536947.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000536947.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 03:36:38", "flickr_url": "http://farm4.staticflickr.com/3201/2889224076_82d3147863_z.jpg", "id": 536947}, {"license": 2, "file_name": "000000076731.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000076731.jpg", "height": 406, "width": 640, "date_captured": "2013-11-24 04:51:59", "flickr_url": "http://farm4.staticflickr.com/3368/3176308857_fed535385d_z.jpg", "id": 76731}, {"license": 1, "file_name": "000000286182.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000286182.jpg", "height": 640, "width": 478, "date_captured": "2013-11-24 05:44:21", "flickr_url": "http://farm9.staticflickr.com/8109/8486923405_c6e0905f81_z.jpg", "id": 286182}, {"license": 3, "file_name": "000000433980.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000433980.jpg", "height": 500, "width": 375, "date_captured": "2013-11-24 07:20:29", "flickr_url": "http://farm3.staticflickr.com/2343/1919577280_a7a2f939f0_z.jpg", "id": 433980}, {"license": 5, "file_name": "000000561366.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000561366.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 07:33:47", "flickr_url": "http://farm1.staticflickr.com/198/459435907_bb6c8c82c9_z.jpg", "id": 561366}, {"license": 1, "file_name": "000000380913.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000380913.jpg", "height": 428, "width": 640, "date_captured": "2013-11-24 08:13:18", "flickr_url": "http://farm7.staticflickr.com/6195/6085367573_1821cfb58b_z.jpg", "id": 380913}, {"license": 5, "file_name": "000000032887.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000032887.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 08:18:32", "flickr_url": "http://farm6.staticflickr.com/5126/5218142854_bca4459220_z.jpg", "id": 32887}, {"license": 3, "file_name": "000000517687.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000517687.jpg", "height": 360, "width": 640, "date_captured": "2013-11-24 08:21:44", "flickr_url": "http://farm5.staticflickr.com/4075/4788570734_f99b8be7c4_z.jpg", "id": 517687}, {"license": 1, "file_name": "000000213035.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000213035.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 09:56:54", "flickr_url": "http://farm3.staticflickr.com/2724/4254385211_4f52506341_z.jpg", "id": 213035}, {"license": 5, "file_name": "000000399205.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000399205.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 09:58:11", "flickr_url": "http://farm4.staticflickr.com/3622/3567742683_f451d108b7_z.jpg", "id": 399205}, {"license": 3, "file_name": "000000349837.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000349837.jpg", "height": 333, "width": 500, "date_captured": "2013-11-24 12:21:29", "flickr_url": "http://farm1.staticflickr.com/55/143568559_0207abc5d3_z.jpg", "id": 349837}, {"license": 3, "file_name": "000000350002.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000350002.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 13:23:12", "flickr_url": "http://farm9.staticflickr.com/8328/8091559366_acd66ae2f2_z.jpg", "id": 350002}, {"license": 6, "file_name": "000000131431.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000131431.jpg", "height": 640, "width": 425, "date_captured": "2013-11-24 13:31:16", "flickr_url": "http://farm8.staticflickr.com/7305/9662339807_da24cdec1a_z.jpg", "id": 131431}, {"license": 4, "file_name": "000000356248.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000356248.jpg", "height": 640, "width": 478, "date_captured": "2013-11-24 13:45:04", "flickr_url": "http://farm7.staticflickr.com/6013/5997608563_ecaa98e80a_z.jpg", "id": 356248}, {"license": 1, "file_name": "000000334399.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000334399.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 15:44:52", "flickr_url": "http://farm8.staticflickr.com/7138/7770251872_8f321c42cd_z.jpg", "id": 334399}, {"license": 2, "file_name": "000000057150.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000057150.jpg", "height": 320, "width": 240, "date_captured": "2013-11-24 21:12:12", "flickr_url": "http://farm4.staticflickr.com/3638/3594748355_da9f4a4857_z.jpg", "id": 57150}, {"license": 4, "file_name": "000000363666.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000363666.jpg", "height": 419, "width": 640, "date_captured": "2013-11-24 23:00:45", "flickr_url": "http://farm3.staticflickr.com/2854/9178936197_56a8862bd5_z.jpg", "id": 363666}, {"license": 3, "file_name": "000000507235.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000507235.jpg", "height": 612, "width": 612, "date_captured": "2013-11-25 08:39:01", "flickr_url": "http://farm3.staticflickr.com/2885/9304592952_33796b9099_z.jpg", "id": 507235}, {"license": 6, "file_name": "000000169996.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000169996.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 11:27:20", "flickr_url": "http://farm3.staticflickr.com/2348/2400804792_d2e5da8232_z.jpg", "id": 169996}, {"license": 5, "file_name": "000000226417.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000226417.jpg", "height": 333, "width": 500, "date_captured": "2013-11-14 11:31:34", "flickr_url": "http://farm1.staticflickr.com/193/495093205_cbb83a14ff_z.jpg", "id": 226417}, {"license": 6, "file_name": "000000481573.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000481573.jpg", "height": 639, "width": 640, "date_captured": "2013-11-14 20:19:08", "flickr_url": "http://farm4.staticflickr.com/3586/3462542233_f8c340ec52_z.jpg", "id": 481573}, {"license": 1, "file_name": "000000056127.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000056127.jpg", "height": 640, "width": 580, "date_captured": "2013-11-14 22:49:15", "flickr_url": "http://farm8.staticflickr.com/7143/6733520559_6b2fda0df8_z.jpg", "id": 56127}, {"license": 1, "file_name": "000000123480.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000123480.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 01:45:54", "flickr_url": "http://farm4.staticflickr.com/3152/2864050471_e46d25d729_z.jpg", "id": 123480}, {"license": 5, "file_name": "000000274687.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000274687.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 02:08:08", "flickr_url": "http://farm4.staticflickr.com/3602/4075988767_c3b2313002_z.jpg", "id": 274687}, {"license": 3, "file_name": "000000164637.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000164637.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 06:00:55", "flickr_url": "http://farm5.staticflickr.com/4011/4612393035_3144350213_z.jpg", "id": 164637}, {"license": 2, "file_name": "000000178028.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000178028.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 06:07:04", "flickr_url": "http://farm3.staticflickr.com/2561/3859502136_5d8485fbc8_z.jpg", "id": 178028}, {"license": 1, "file_name": "000000493286.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000493286.jpg", "height": 359, "width": 640, "date_captured": "2013-11-15 10:15:10", "flickr_url": "http://farm6.staticflickr.com/5253/5498103201_188a9bd260_z.jpg", "id": 493286}, {"license": 1, "file_name": "000000348216.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000348216.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 11:53:43", "flickr_url": "http://farm3.staticflickr.com/2021/2137362829_af176066d7_z.jpg", "id": 348216}, {"license": 1, "file_name": "000000345027.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000345027.jpg", "height": 403, "width": 640, "date_captured": "2013-11-15 12:17:43", "flickr_url": "http://farm8.staticflickr.com/7227/7404208262_186d597e26_z.jpg", "id": 345027}, {"license": 4, "file_name": "000000571804.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000571804.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 13:50:28", "flickr_url": "http://farm7.staticflickr.com/6075/6155496426_d035b57a3f_z.jpg", "id": 571804}, {"license": 4, "file_name": "000000140658.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000140658.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 14:09:21", "flickr_url": "http://farm9.staticflickr.com/8290/7818203192_f5b2c5c235_z.jpg", "id": 140658}, {"license": 2, "file_name": "000000102644.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000102644.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 14:54:44", "flickr_url": "http://farm2.staticflickr.com/1380/674651371_8d702beac2_z.jpg", "id": 102644}, {"license": 4, "file_name": "000000581615.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000581615.jpg", "height": 640, "width": 478, "date_captured": "2013-11-15 15:25:51", "flickr_url": "http://farm4.staticflickr.com/3136/5859483600_44c4fca797_z.jpg", "id": 581615}, {"license": 1, "file_name": "000000279887.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000279887.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 16:38:11", "flickr_url": "http://farm8.staticflickr.com/7145/6808948577_07cd718b6f_z.jpg", "id": 279887}, {"license": 1, "file_name": "000000230008.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000230008.jpg", "height": 360, "width": 640, "date_captured": "2013-11-15 16:38:21", "flickr_url": "http://farm7.staticflickr.com/6040/6354716703_18487f986e_z.jpg", "id": 230008}, {"license": 1, "file_name": "000000284698.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000284698.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 19:22:45", "flickr_url": "http://farm1.staticflickr.com/26/43296265_04da476d1a_z.jpg", "id": 284698}, {"license": 1, "file_name": "000000102356.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000102356.jpg", "height": 640, "width": 427, "date_captured": "2013-11-15 21:19:12", "flickr_url": "http://farm8.staticflickr.com/7025/6808944913_11dcc2c39e_z.jpg", "id": 102356}, {"license": 2, "file_name": "000000456394.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000456394.jpg", "height": 176, "width": 220, "date_captured": "2013-11-15 22:03:41", "flickr_url": "http://farm7.staticflickr.com/6103/6247905267_fbb88b7fed_z.jpg", "id": 456394}, {"license": 2, "file_name": "000000323709.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000323709.jpg", "height": 320, "width": 640, "date_captured": "2013-11-16 02:18:22", "flickr_url": "http://farm8.staticflickr.com/7033/6588274005_9c881337b2_z.jpg", "id": 323709}, {"license": 5, "file_name": "000000452122.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000452122.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 02:48:58", "flickr_url": "http://farm7.staticflickr.com/6145/6038379198_be6e12c379_z.jpg", "id": 452122}, {"license": 6, "file_name": "000000579158.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000579158.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 04:48:25", "flickr_url": "http://farm5.staticflickr.com/4087/5487040903_09b2c5d84b_z.jpg", "id": 579158}, {"license": 4, "file_name": "000000525322.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000525322.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 05:44:35", "flickr_url": "http://farm5.staticflickr.com/4151/4975993912_895cf12c10_z.jpg", "id": 525322}, {"license": 3, "file_name": "000000033114.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000033114.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 12:03:50", "flickr_url": "http://farm6.staticflickr.com/5341/8986363963_e2f1ae618c_z.jpg", "id": 33114}, {"license": 5, "file_name": "000000008690.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000008690.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 14:25:31", "flickr_url": "http://farm4.staticflickr.com/3753/9867545575_fa972e6c4a_z.jpg", "id": 8690}, {"license": 3, "file_name": "000000381639.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000381639.jpg", "height": 640, "width": 584, "date_captured": "2013-11-16 15:13:43", "flickr_url": "http://farm9.staticflickr.com/8028/7308566732_7b519875e8_z.jpg", "id": 381639}, {"license": 1, "file_name": "000000217614.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000217614.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 15:17:04", "flickr_url": "http://farm1.staticflickr.com/185/375003840_1d8992f9a6_z.jpg", "id": 217614}, {"license": 1, "file_name": "000000284445.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000284445.jpg", "height": 594, "width": 640, "date_captured": "2013-11-16 16:02:44", "flickr_url": "http://farm6.staticflickr.com/5247/5327232397_160df9c196_z.jpg", "id": 284445}, {"license": 2, "file_name": "000000468124.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000468124.jpg", "height": 459, "width": 640, "date_captured": "2013-11-16 17:47:12", "flickr_url": "http://farm4.staticflickr.com/3452/3951591332_a116028f33_z.jpg", "id": 468124}, {"license": 1, "file_name": "000000187144.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000187144.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 19:21:51", "flickr_url": "http://farm9.staticflickr.com/8422/7858381216_44ea734652_z.jpg", "id": 187144}, {"license": 3, "file_name": "000000273198.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000273198.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 22:20:06", "flickr_url": "http://farm1.staticflickr.com/14/17919666_3c1ace4175_z.jpg", "id": 273198}, {"license": 1, "file_name": "000000095843.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000095843.jpg", "height": 421, "width": 640, "date_captured": "2013-11-16 22:35:23", "flickr_url": "http://farm9.staticflickr.com/8396/8627099292_8fae44f9f3_z.jpg", "id": 95843}, {"license": 1, "file_name": "000000417779.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000417779.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 23:26:17", "flickr_url": "http://farm2.staticflickr.com/1350/1484121641_4876770b31_z.jpg", "id": 417779}, {"license": 1, "file_name": "000000447342.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000447342.jpg", "height": 416, "width": 640, "date_captured": "2013-11-17 00:36:06", "flickr_url": "http://farm9.staticflickr.com/8467/8147569622_663a28196d_z.jpg", "id": 447342}, {"license": 1, "file_name": "000000166563.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000166563.jpg", "height": 408, "width": 640, "date_captured": "2013-11-17 01:14:14", "flickr_url": "http://farm3.staticflickr.com/2694/4092411722_5c0ebe1fd5_z.jpg", "id": 166563}, {"license": 3, "file_name": "000000490125.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000490125.jpg", "height": 335, "width": 500, "date_captured": "2013-11-17 02:26:35", "flickr_url": "http://farm4.staticflickr.com/3220/2860893959_e2cf23d962_z.jpg", "id": 490125}, {"license": 2, "file_name": "000000561009.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000561009.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 03:42:29", "flickr_url": "http://farm6.staticflickr.com/5541/10086506303_9809ea78c0_z.jpg", "id": 561009}, {"license": 1, "file_name": "000000183675.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000183675.jpg", "height": 412, "width": 640, "date_captured": "2013-11-17 04:12:49", "flickr_url": "http://farm4.staticflickr.com/3101/5836249800_9e8f07b294_z.jpg", "id": 183675}, {"license": 1, "file_name": "000000290248.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000290248.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 05:21:04", "flickr_url": "http://farm4.staticflickr.com/3407/3621132225_ab3c2d7f62_z.jpg", "id": 290248}, {"license": 3, "file_name": "000000532058.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000532058.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 05:42:45", "flickr_url": "http://farm3.staticflickr.com/2345/2905808746_79ebe40a27_z.jpg", "id": 532058}, {"license": 1, "file_name": "000000214200.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000214200.jpg", "height": 640, "width": 427, "date_captured": "2013-11-17 08:30:54", "flickr_url": "http://farm1.staticflickr.com/1/2326501_80288821c9_z.jpg", "id": 214200}, {"license": 1, "file_name": "000000578093.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000578093.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 08:36:24", "flickr_url": "http://farm4.staticflickr.com/3688/9237520735_491c584bae_z.jpg", "id": 578093}, {"license": 4, "file_name": "000000369751.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000369751.jpg", "height": 640, "width": 426, "date_captured": "2013-11-17 09:09:26", "flickr_url": "http://farm5.staticflickr.com/4132/5092877690_7f62303b95_z.jpg", "id": 369751}, {"license": 1, "file_name": "000000429011.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000429011.jpg", "height": 343, "width": 640, "date_captured": "2013-11-17 13:28:03", "flickr_url": "http://farm8.staticflickr.com/7068/6900625787_e128eac344_z.jpg", "id": 429011}, {"license": 3, "file_name": "000000301061.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000301061.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 13:33:57", "flickr_url": "http://farm3.staticflickr.com/2825/8792062042_ba951ecba4_z.jpg", "id": 301061}, {"license": 3, "file_name": "000000105264.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000105264.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 17:51:49", "flickr_url": "http://farm2.staticflickr.com/1386/1454991114_b0956f3ea8_z.jpg", "id": 105264}, {"license": 1, "file_name": "000000267434.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000267434.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 23:04:09", "flickr_url": "http://farm7.staticflickr.com/6227/6254813749_f144a6edbe_z.jpg", "id": 267434}, {"license": 1, "file_name": "000000370711.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000370711.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 03:28:12", "flickr_url": "http://farm1.staticflickr.com/149/421530758_9df797524d_z.jpg", "id": 370711}, {"license": 1, "file_name": "000000025393.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000025393.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 04:06:26", "flickr_url": "http://farm5.staticflickr.com/4096/4769380526_a9d91a974d_z.jpg", "id": 25393}, {"license": 2, "file_name": "000000471087.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000471087.jpg", "height": 500, "width": 409, "date_captured": "2013-11-18 04:17:53", "flickr_url": "http://farm3.staticflickr.com/2731/4483876589_2301219ef8_z.jpg", "id": 471087}, {"license": 3, "file_name": "000000106757.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000106757.jpg", "height": 640, "width": 426, "date_captured": "2013-11-18 05:54:11", "flickr_url": "http://farm8.staticflickr.com/7215/7223539430_a21e03c395_z.jpg", "id": 106757}, {"license": 3, "file_name": "000000183648.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000183648.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 05:57:06", "flickr_url": "http://farm8.staticflickr.com/7036/6831168586_3da6ec2bd6_z.jpg", "id": 183648}, {"license": 3, "file_name": "000000358525.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000358525.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 07:26:34", "flickr_url": "http://farm4.staticflickr.com/3264/2919700209_cc7dd82a5e_z.jpg", "id": 358525}, {"license": 1, "file_name": "000000049269.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000049269.jpg", "height": 640, "width": 431, "date_captured": "2013-11-18 08:47:40", "flickr_url": "http://farm4.staticflickr.com/3221/2452733878_1dc9c4ee0b_z.jpg", "id": 49269}, {"license": 3, "file_name": "000000079144.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000079144.jpg", "height": 458, "width": 640, "date_captured": "2013-11-18 11:39:22", "flickr_url": "http://farm8.staticflickr.com/7395/8716931813_8d5e2a5ed6_z.jpg", "id": 79144}, {"license": 3, "file_name": "000000519688.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000519688.jpg", "height": 640, "width": 521, "date_captured": "2013-11-18 13:32:59", "flickr_url": "http://farm9.staticflickr.com/8387/8493397956_840a3eeceb_z.jpg", "id": 519688}, {"license": 3, "file_name": "000000431727.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000431727.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 13:42:29", "flickr_url": "http://farm9.staticflickr.com/8359/8290930425_9a0c298d53_z.jpg", "id": 431727}, {"license": 3, "file_name": "000000130699.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000130699.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 14:38:28", "flickr_url": "http://farm9.staticflickr.com/8348/8158796553_ae3767f0a1_z.jpg", "id": 130699}, {"license": 4, "file_name": "000000215245.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000215245.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 16:04:28", "flickr_url": "http://farm6.staticflickr.com/5187/5699107573_2059b4c0e1_z.jpg", "id": 215245}, {"license": 5, "file_name": "000000091921.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000091921.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 17:37:18", "flickr_url": "http://farm9.staticflickr.com/8148/7184345053_9987e91228_z.jpg", "id": 91921}, {"license": 4, "file_name": "000000218424.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000218424.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 18:19:40", "flickr_url": "http://farm4.staticflickr.com/3058/5699138741_9ed119dea1_z.jpg", "id": 218424}, {"license": 3, "file_name": "000000473974.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000473974.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 18:44:11", "flickr_url": "http://farm5.staticflickr.com/4109/4960292883_ecd15e43fe_z.jpg", "id": 473974}, {"license": 3, "file_name": "000000405249.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000405249.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 20:23:25", "flickr_url": "http://farm4.staticflickr.com/3094/2912775576_aa335874ee_z.jpg", "id": 405249}, {"license": 1, "file_name": "000000235784.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000235784.jpg", "height": 459, "width": 640, "date_captured": "2013-11-19 18:17:04", "flickr_url": "http://farm5.staticflickr.com/4013/4225614467_5a192ea2a5_z.jpg", "id": 235784}, {"license": 1, "file_name": "000000521540.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000521540.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 19:48:36", "flickr_url": "http://farm4.staticflickr.com/3742/9820370304_05f668869a_z.jpg", "id": 521540}, {"license": 3, "file_name": "000000537506.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000537506.jpg", "height": 400, "width": 600, "date_captured": "2013-11-19 20:01:05", "flickr_url": "http://farm6.staticflickr.com/5289/5228834834_2e1298e079_z.jpg", "id": 537506}, {"license": 4, "file_name": "000000119445.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000119445.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 20:35:54", "flickr_url": "http://farm4.staticflickr.com/3098/3225259967_8e1c2723c4_z.jpg", "id": 119445}, {"license": 4, "file_name": "000000507015.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000507015.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 20:35:58", "flickr_url": "http://farm4.staticflickr.com/3421/3225241751_061cbe8156_z.jpg", "id": 507015}, {"license": 4, "file_name": "000000173830.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000173830.jpg", "height": 640, "width": 593, "date_captured": "2013-11-19 22:36:04", "flickr_url": "http://farm6.staticflickr.com/5178/5486149069_ef317e598c_z.jpg", "id": 173830}, {"license": 4, "file_name": "000000356498.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000356498.jpg", "height": 350, "width": 500, "date_captured": "2013-11-19 23:26:54", "flickr_url": "http://farm4.staticflickr.com/3158/3390188250_1985da0517_z.jpg", "id": 356498}, {"license": 2, "file_name": "000000435081.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000435081.jpg", "height": 500, "width": 500, "date_captured": "2013-11-20 01:13:33", "flickr_url": "http://farm3.staticflickr.com/2573/3676385228_63e91612b8_z.jpg", "id": 435081}, {"license": 3, "file_name": "000000018575.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000018575.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 01:42:34", "flickr_url": "http://farm4.staticflickr.com/3252/2464830020_ecf3bcf1c3_z.jpg", "id": 18575}, {"license": 2, "file_name": "000000373315.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000373315.jpg", "height": 640, "width": 477, "date_captured": "2013-11-20 05:00:31", "flickr_url": "http://farm5.staticflickr.com/4124/5053872480_0fc46359a9_z.jpg", "id": 373315}, {"license": 3, "file_name": "000000227765.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000227765.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 06:23:43", "flickr_url": "http://farm4.staticflickr.com/3053/2928864443_3d0346a3ce_z.jpg", "id": 227765}, {"license": 2, "file_name": "000000013546.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000013546.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 06:39:19", "flickr_url": "http://farm3.staticflickr.com/2689/4091707765_2f3bf944a7_z.jpg", "id": 13546}, {"license": 1, "file_name": "000000067310.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000067310.jpg", "height": 640, "width": 486, "date_captured": "2013-11-20 11:52:03", "flickr_url": "http://farm4.staticflickr.com/3066/2795427068_d8a38c1f8b_z.jpg", "id": 67310}, {"license": 1, "file_name": "000000125936.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000125936.jpg", "height": 327, "width": 500, "date_captured": "2013-11-20 12:32:07", "flickr_url": "http://farm4.staticflickr.com/3195/2608230062_fac11f21b0_z.jpg", "id": 125936}, {"license": 5, "file_name": "000000389109.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000389109.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 14:38:39", "flickr_url": "http://farm3.staticflickr.com/2755/4130351505_1e5188021f_z.jpg", "id": 389109}, {"license": 4, "file_name": "000000322211.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000322211.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 16:38:41", "flickr_url": "http://farm5.staticflickr.com/4044/5130573580_90d6b58622_z.jpg", "id": 322211}, {"license": 2, "file_name": "000000184384.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000184384.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 18:27:55", "flickr_url": "http://farm3.staticflickr.com/2773/4104976058_0762616336_z.jpg", "id": 184384}, {"license": 1, "file_name": "000000426329.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000426329.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 18:45:22", "flickr_url": "http://farm3.staticflickr.com/2857/9116789659_8992c5f2b7_z.jpg", "id": 426329}, {"license": 1, "file_name": "000000128476.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000128476.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 19:13:02", "flickr_url": "http://farm3.staticflickr.com/2200/2280574742_54e5538d3f_z.jpg", "id": 128476}, {"license": 3, "file_name": "000000414034.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000414034.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 20:53:55", "flickr_url": "http://farm4.staticflickr.com/3200/2879305925_82a9a40dd8_z.jpg", "id": 414034}, {"license": 3, "file_name": "000000450488.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000450488.jpg", "height": 500, "width": 334, "date_captured": "2013-11-20 21:49:32", "flickr_url": "http://farm3.staticflickr.com/2291/1804855461_498b813a38_z.jpg", "id": 450488}, {"license": 1, "file_name": "000000099182.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000099182.jpg", "height": 334, "width": 500, "date_captured": "2013-11-20 22:16:22", "flickr_url": "http://farm4.staticflickr.com/3420/3268858658_c84b892026_z.jpg", "id": 99182}, {"license": 2, "file_name": "000000051738.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000051738.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 23:25:11", "flickr_url": "http://farm2.staticflickr.com/1439/684337390_1d37ec3d36_z.jpg", "id": 51738}, {"license": 1, "file_name": "000000099039.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000099039.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 23:59:40", "flickr_url": "http://farm3.staticflickr.com/2535/5843392082_e63b00a5c0_z.jpg", "id": 99039}, {"license": 1, "file_name": "000000075456.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000075456.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 00:14:41", "flickr_url": "http://farm3.staticflickr.com/2552/3999892430_303c36cf4b_z.jpg", "id": 75456}, {"license": 4, "file_name": "000000134882.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000134882.jpg", "height": 639, "width": 640, "date_captured": "2013-11-21 00:31:52", "flickr_url": "http://farm9.staticflickr.com/8249/8643440732_42cbe68c0f_z.jpg", "id": 134882}, {"license": 3, "file_name": "000000442323.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000442323.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 01:49:16", "flickr_url": "http://farm4.staticflickr.com/3249/2848744285_b65d8df0c4_z.jpg", "id": 442323}, {"license": 4, "file_name": "000000232489.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000232489.jpg", "height": 640, "width": 640, "date_captured": "2013-11-21 02:31:32", "flickr_url": "http://farm8.staticflickr.com/7239/7163918053_22e5ab1e70_z.jpg", "id": 232489}, {"license": 3, "file_name": "000000351823.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000351823.jpg", "height": 640, "width": 508, "date_captured": "2013-11-21 02:37:02", "flickr_url": "http://farm9.staticflickr.com/8255/8631855203_4905df9470_z.jpg", "id": 351823}, {"license": 3, "file_name": "000000065736.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000065736.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 02:41:42", "flickr_url": "http://farm9.staticflickr.com/8221/8445094517_4923151564_z.jpg", "id": 65736}, {"license": 4, "file_name": "000000001000.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000001000.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 05:13:59", "flickr_url": "http://farm5.staticflickr.com/4115/4906536419_6113bd7de4_z.jpg", "id": 1000}, {"license": 1, "file_name": "000000379842.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000379842.jpg", "height": 360, "width": 640, "date_captured": "2013-11-21 20:36:56", "flickr_url": "http://farm5.staticflickr.com/4009/4646199083_5fee687df6_z.jpg", "id": 379842}, {"license": 3, "file_name": "000000013923.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000013923.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 21:17:47", "flickr_url": "http://farm9.staticflickr.com/8550/8973469217_ddac383dc5_z.jpg", "id": 13923}, {"license": 3, "file_name": "000000559543.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000559543.jpg", "height": 333, "width": 500, "date_captured": "2013-11-21 21:31:03", "flickr_url": "http://farm4.staticflickr.com/3084/3167056823_4b3292345b_z.jpg", "id": 559543}, {"license": 3, "file_name": "000000185890.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000185890.jpg", "height": 640, "width": 509, "date_captured": "2013-11-21 21:39:32", "flickr_url": "http://farm4.staticflickr.com/3090/2704593814_037ac1aab8_z.jpg", "id": 185890}, {"license": 6, "file_name": "000000357978.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000357978.jpg", "height": 375, "width": 500, "date_captured": "2013-11-21 22:06:25", "flickr_url": "http://farm3.staticflickr.com/2215/2466709397_a2c68700cf_z.jpg", "id": 357978}, {"license": 3, "file_name": "000000129492.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000129492.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 23:54:00", "flickr_url": "http://farm1.staticflickr.com/186/436805170_a6de951acb_z.jpg", "id": 129492}, {"license": 3, "file_name": "000000261097.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000261097.jpg", "height": 500, "width": 333, "date_captured": "2013-11-22 02:36:20", "flickr_url": "http://farm3.staticflickr.com/2543/4112985756_309d6e3aa1_z.jpg", "id": 261097}, {"license": 3, "file_name": "000000410510.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000410510.jpg", "height": 445, "width": 640, "date_captured": "2013-11-22 02:39:55", "flickr_url": "http://farm3.staticflickr.com/2527/3995461066_7ec7526016_z.jpg", "id": 410510}, {"license": 3, "file_name": "000000039951.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000039951.jpg", "height": 445, "width": 640, "date_captured": "2013-11-23 02:49:46", "flickr_url": "http://farm4.staticflickr.com/3469/3970726342_e4330fd0fa_z.jpg", "id": 39951}, {"license": 2, "file_name": "000000306700.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000306700.jpg", "height": 640, "width": 480, "date_captured": "2013-11-23 03:33:51", "flickr_url": "http://farm5.staticflickr.com/4048/4195119942_cfce5d2086_z.jpg", "id": 306700}, {"license": 3, "file_name": "000000146457.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000146457.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 05:06:20", "flickr_url": "http://farm4.staticflickr.com/3563/3378875139_c2c7f131d2_z.jpg", "id": 146457}, {"license": 3, "file_name": "000000214224.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000214224.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 00:15:12", "flickr_url": "http://farm1.staticflickr.com/61/207838237_b05794eacf_z.jpg", "id": 214224}, {"license": 1, "file_name": "000000332845.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000332845.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 02:22:14", "flickr_url": "http://farm6.staticflickr.com/5070/5687759830_5eb0305fa2_z.jpg", "id": 332845}, {"license": 2, "file_name": "000000255483.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000255483.jpg", "height": 500, "width": 452, "date_captured": "2013-11-24 04:47:06", "flickr_url": "http://farm2.staticflickr.com/1083/526468485_6035b5409e_z.jpg", "id": 255483}, {"license": 1, "file_name": "000000222455.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000222455.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 05:05:36", "flickr_url": "http://farm9.staticflickr.com/8534/8641398667_448ac286f1_z.jpg", "id": 222455}, {"license": 1, "file_name": "000000187271.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000187271.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 10:58:38", "flickr_url": "http://farm5.staticflickr.com/4039/4636910713_133158a6d5_z.jpg", "id": 187271}, {"license": 2, "file_name": "000000462629.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000462629.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 11:49:35", "flickr_url": "http://farm3.staticflickr.com/2025/2492052980_3670e0f17a_z.jpg", "id": 462629}, {"license": 4, "file_name": "000000544565.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000544565.jpg", "height": 640, "width": 640, "date_captured": "2013-11-24 14:11:39", "flickr_url": "http://farm9.staticflickr.com/8385/8637201534_da86391cc8_z.jpg", "id": 544565}, {"license": 4, "file_name": "000000369771.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000369771.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 14:32:03", "flickr_url": "http://farm8.staticflickr.com/7238/7250057624_e38c0d9517_z.jpg", "id": 369771}, {"license": 1, "file_name": "000000035963.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000035963.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 14:54:39", "flickr_url": "http://farm9.staticflickr.com/8468/8362875916_3622526977_z.jpg", "id": 35963}, {"license": 1, "file_name": "000000289516.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000289516.jpg", "height": 640, "width": 304, "date_captured": "2013-11-24 15:49:35", "flickr_url": "http://farm8.staticflickr.com/7229/7181685405_4f9b4272ac_z.jpg", "id": 289516}, {"license": 1, "file_name": "000000334309.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000334309.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 22:13:59", "flickr_url": "http://farm9.staticflickr.com/8451/8030935807_ac38a77d75_z.jpg", "id": 334309}, {"license": 4, "file_name": "000000452084.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000452084.jpg", "height": 639, "width": 640, "date_captured": "2013-11-24 22:21:06", "flickr_url": "http://farm4.staticflickr.com/3702/10209222973_bda6223a9f_z.jpg", "id": 452084}, {"license": 4, "file_name": "000000301718.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000301718.jpg", "height": 640, "width": 480, "date_captured": "2013-11-25 15:02:06", "flickr_url": "http://farm4.staticflickr.com/3763/9132300748_f22266f91b_z.jpg", "id": 301718}, {"license": 4, "file_name": "000000429598.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000429598.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 16:19:13", "flickr_url": "http://farm8.staticflickr.com/7162/6617685485_877d5cee57_z.jpg", "id": 429598}, {"license": 1, "file_name": "000000165257.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000165257.jpg", "height": 359, "width": 640, "date_captured": "2013-11-14 17:00:49", "flickr_url": "http://farm7.staticflickr.com/6161/6148741765_ca0a35b3a0_z.jpg", "id": 165257}, {"license": 1, "file_name": "000000093437.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000093437.jpg", "height": 361, "width": 640, "date_captured": "2013-11-14 20:33:42", "flickr_url": "http://farm4.staticflickr.com/3284/3087312929_11b2a967e0_z.jpg", "id": 93437}, {"license": 4, "file_name": "000000413552.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000413552.jpg", "height": 640, "width": 426, "date_captured": "2013-11-14 20:56:28", "flickr_url": "http://farm4.staticflickr.com/3339/3672181666_cfe25af65d_z.jpg", "id": 413552}, {"license": 6, "file_name": "000000062025.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000062025.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 00:35:03", "flickr_url": "http://farm4.staticflickr.com/3599/3631609738_18ee406290_z.jpg", "id": 62025}, {"license": 1, "file_name": "000000017379.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000017379.jpg", "height": 640, "width": 478, "date_captured": "2013-11-15 01:16:56", "flickr_url": "http://farm6.staticflickr.com/5123/5316824279_9f0a0584c7_z.jpg", "id": 17379}, {"license": 1, "file_name": "000000176778.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000176778.jpg", "height": 640, "width": 427, "date_captured": "2013-11-15 01:49:27", "flickr_url": "http://farm9.staticflickr.com/8525/8546503892_17447f6b25_z.jpg", "id": 176778}, {"license": 3, "file_name": "000000104572.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000104572.jpg", "height": 419, "width": 640, "date_captured": "2013-11-15 02:19:16", "flickr_url": "http://farm9.staticflickr.com/8224/8315344109_22818bbfbe_z.jpg", "id": 104572}, {"license": 4, "file_name": "000000090108.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000090108.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 02:24:34", "flickr_url": "http://farm4.staticflickr.com/3511/5818186852_061520ff7a_z.jpg", "id": 90108}, {"license": 2, "file_name": "000000157124.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000157124.jpg", "height": 424, "width": 640, "date_captured": "2013-11-15 03:22:32", "flickr_url": "http://farm8.staticflickr.com/7277/6881159188_cedb19b9b0_z.jpg", "id": 157124}, {"license": 4, "file_name": "000000089556.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000089556.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 05:44:24", "flickr_url": "http://farm7.staticflickr.com/6093/6210323230_57fab50c4b_z.jpg", "id": 89556}, {"license": 1, "file_name": "000000266206.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000266206.jpg", "height": 640, "width": 427, "date_captured": "2013-11-15 05:53:15", "flickr_url": "http://farm3.staticflickr.com/2856/9211916412_42e79d869e_z.jpg", "id": 266206}, {"license": 6, "file_name": "000000086220.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000086220.jpg", "height": 428, "width": 640, "date_captured": "2013-11-15 05:56:59", "flickr_url": "http://farm9.staticflickr.com/8374/8438120381_b8b40a66b2_z.jpg", "id": 86220}, {"license": 3, "file_name": "000000508602.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000508602.jpg", "height": 429, "width": 500, "date_captured": "2013-11-15 06:51:06", "flickr_url": "http://farm1.staticflickr.com/31/89958837_3946184e5f_z.jpg", "id": 508602}, {"license": 1, "file_name": "000000010363.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000010363.jpg", "height": 361, "width": 640, "date_captured": "2013-11-15 07:08:52", "flickr_url": "http://farm4.staticflickr.com/3027/2477308902_443e5baf08_z.jpg", "id": 10363}, {"license": 2, "file_name": "000000017178.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000017178.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 08:30:55", "flickr_url": "http://farm4.staticflickr.com/3354/3626704406_be9d80e909_z.jpg", "id": 17178}, {"license": 3, "file_name": "000000507975.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000507975.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 08:31:30", "flickr_url": "http://farm6.staticflickr.com/5098/5494717357_a7686bc04b_z.jpg", "id": 507975}, {"license": 1, "file_name": "000000314177.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000314177.jpg", "height": 640, "width": 481, "date_captured": "2013-11-15 15:02:01", "flickr_url": "http://farm5.staticflickr.com/4005/4206985719_ffded3b547_z.jpg", "id": 314177}, {"license": 1, "file_name": "000000313182.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000313182.jpg", "height": 424, "width": 640, "date_captured": "2013-11-15 15:11:04", "flickr_url": "http://farm9.staticflickr.com/8079/8270185994_6daba92e59_z.jpg", "id": 313182}, {"license": 4, "file_name": "000000538364.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000538364.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 19:00:10", "flickr_url": "http://farm9.staticflickr.com/8042/7933423348_c30bd9bd4e_z.jpg", "id": 538364}, {"license": 1, "file_name": "000000149406.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000149406.jpg", "height": 638, "width": 640, "date_captured": "2013-11-15 21:22:53", "flickr_url": "http://farm8.staticflickr.com/7010/6776542849_2dedcc64f1_z.jpg", "id": 149406}, {"license": 3, "file_name": "000000180383.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000180383.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 23:08:19", "flickr_url": "http://farm3.staticflickr.com/2037/2085045734_29ac5b062c_z.jpg", "id": 180383}, {"license": 1, "file_name": "000000402433.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000402433.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 01:23:31", "flickr_url": "http://farm9.staticflickr.com/8220/8409381696_d877f60190_z.jpg", "id": 402433}, {"license": 1, "file_name": "000000449996.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000449996.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 04:16:28", "flickr_url": "http://farm7.staticflickr.com/6026/6014651124_bbd1796c13_z.jpg", "id": 449996}, {"license": 1, "file_name": "000000168619.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000168619.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 12:17:23", "flickr_url": "http://farm8.staticflickr.com/7106/6970869280_ccc7074ed1_z.jpg", "id": 168619}, {"license": 3, "file_name": "000000209613.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000209613.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 12:31:34", "flickr_url": "http://farm9.staticflickr.com/8417/8858921356_8fbedafbd0_z.jpg", "id": 209613}, {"license": 1, "file_name": "000000103548.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000103548.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 12:39:15", "flickr_url": "http://farm7.staticflickr.com/6164/6226663431_ca115964df_z.jpg", "id": 103548}, {"license": 3, "file_name": "000000469652.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000469652.jpg", "height": 439, "width": 640, "date_captured": "2013-11-16 14:19:48", "flickr_url": "http://farm8.staticflickr.com/7359/9775785306_591322fbcf_z.jpg", "id": 469652}, {"license": 1, "file_name": "000000015338.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000015338.jpg", "height": 424, "width": 640, "date_captured": "2013-11-16 17:43:06", "flickr_url": "http://farm9.staticflickr.com/8526/8519097250_f635a04651_z.jpg", "id": 15338}, {"license": 1, "file_name": "000000512564.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000512564.jpg", "height": 424, "width": 640, "date_captured": "2013-11-16 17:44:50", "flickr_url": "http://farm9.staticflickr.com/8248/8586248634_f182e9e343_z.jpg", "id": 512564}, {"license": 1, "file_name": "000000336658.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000336658.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 17:47:10", "flickr_url": "http://farm9.staticflickr.com/8449/8073983061_9c02ab2ae6_z.jpg", "id": 336658}, {"license": 3, "file_name": "000000568439.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000568439.jpg", "height": 449, "width": 640, "date_captured": "2013-11-16 18:17:40", "flickr_url": "http://farm7.staticflickr.com/6200/6050135290_038888df93_z.jpg", "id": 568439}, {"license": 6, "file_name": "000000372317.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000372317.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 18:21:16", "flickr_url": "http://farm7.staticflickr.com/6060/6331652697_68fe5f7ce9_z.jpg", "id": 372317}, {"license": 6, "file_name": "000000476704.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000476704.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 18:55:53", "flickr_url": "http://farm8.staticflickr.com/7280/7685056938_fd6f97531c_z.jpg", "id": 476704}, {"license": 1, "file_name": "000000260266.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000260266.jpg", "height": 640, "width": 479, "date_captured": "2013-11-16 18:56:05", "flickr_url": "http://farm3.staticflickr.com/2690/4504502338_245f6e1906_z.jpg", "id": 260266}, {"license": 6, "file_name": "000000106048.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000106048.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 18:59:31", "flickr_url": "http://farm9.staticflickr.com/8069/8207079082_55020808b2_z.jpg", "id": 106048}, {"license": 6, "file_name": "000000177893.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000177893.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 19:15:11", "flickr_url": "http://farm8.staticflickr.com/7121/7149322325_6e80af4523_z.jpg", "id": 177893}, {"license": 3, "file_name": "000000479099.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000479099.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 20:32:09", "flickr_url": "http://farm6.staticflickr.com/5226/5791374148_f4e99e57a9_z.jpg", "id": 479099}, {"license": 1, "file_name": "000000269196.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000269196.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 20:36:47", "flickr_url": "http://farm9.staticflickr.com/8363/8386296803_68b895fdc6_z.jpg", "id": 269196}, {"license": 6, "file_name": "000000315450.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000315450.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 21:19:46", "flickr_url": "http://farm8.staticflickr.com/7299/9283875533_96cddc212b_z.jpg", "id": 315450}, {"license": 2, "file_name": "000000171050.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000171050.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 21:21:38", "flickr_url": "http://farm3.staticflickr.com/2574/4020620800_983b91a6f1_z.jpg", "id": 171050}, {"license": 6, "file_name": "000000243867.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000243867.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 21:50:08", "flickr_url": "http://farm8.staticflickr.com/7380/9026339118_11a7819a39_z.jpg", "id": 243867}, {"license": 3, "file_name": "000000263594.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000263594.jpg", "height": 381, "width": 500, "date_captured": "2013-11-16 22:37:34", "flickr_url": "http://farm4.staticflickr.com/3213/3031464280_1e5e397ba9_z.jpg", "id": 263594}, {"license": 6, "file_name": "000000147725.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000147725.jpg", "height": 393, "width": 640, "date_captured": "2013-11-16 22:45:20", "flickr_url": "http://farm9.staticflickr.com/8123/8625500680_b86b974d02_z.jpg", "id": 147725}, {"license": 5, "file_name": "000000088432.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000088432.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 23:04:22", "flickr_url": "http://farm4.staticflickr.com/3447/3837630278_f938bd2f4e_z.jpg", "id": 88432}, {"license": 4, "file_name": "000000272364.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000272364.jpg", "height": 640, "width": 428, "date_captured": "2013-11-16 23:29:26", "flickr_url": "http://farm4.staticflickr.com/3354/3262516437_2f4c70fa62_z.jpg", "id": 272364}, {"license": 4, "file_name": "000000138979.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000138979.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 00:36:42", "flickr_url": "http://farm9.staticflickr.com/8471/8149448889_244498909c_z.jpg", "id": 138979}, {"license": 3, "file_name": "000000519491.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000519491.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 00:53:43", "flickr_url": "http://farm5.staticflickr.com/4010/4572574828_0aae1b447c_z.jpg", "id": 519491}, {"license": 3, "file_name": "000000100283.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000100283.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 01:02:55", "flickr_url": "http://farm7.staticflickr.com/6021/5939615776_833fd7f92e_z.jpg", "id": 100283}, {"license": 3, "file_name": "000000563653.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000563653.jpg", "height": 431, "width": 640, "date_captured": "2013-11-17 01:51:50", "flickr_url": "http://farm9.staticflickr.com/8442/7894511186_6e2bde5055_z.jpg", "id": 563653}, {"license": 3, "file_name": "000000345361.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000345361.jpg", "height": 358, "width": 500, "date_captured": "2013-11-17 02:35:32", "flickr_url": "http://farm3.staticflickr.com/2676/4202623538_0146eb0024_z.jpg", "id": 345361}, {"license": 4, "file_name": "000000113051.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000113051.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 02:50:27", "flickr_url": "http://farm7.staticflickr.com/6149/5946397184_28af5fa883_z.jpg", "id": 113051}, {"license": 1, "file_name": "000000286708.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000286708.jpg", "height": 481, "width": 640, "date_captured": "2013-11-17 03:15:21", "flickr_url": "http://farm4.staticflickr.com/3349/3287512097_e5dcb9f507_z.jpg", "id": 286708}, {"license": 5, "file_name": "000000475732.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000475732.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 03:20:50", "flickr_url": "http://farm5.staticflickr.com/4047/4277980850_fb595d679e_z.jpg", "id": 475732}, {"license": 5, "file_name": "000000108244.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000108244.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 03:22:42", "flickr_url": "http://farm1.staticflickr.com/49/165710819_fb98979f1e_z.jpg", "id": 108244}, {"license": 3, "file_name": "000000121153.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000121153.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 03:24:46", "flickr_url": "http://farm1.staticflickr.com/161/443394936_81659d705a_z.jpg", "id": 121153}, {"license": 3, "file_name": "000000023230.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000023230.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 03:30:49", "flickr_url": "http://farm6.staticflickr.com/5546/10257731184_8381009eb4_z.jpg", "id": 23230}, {"license": 3, "file_name": "000000073702.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000073702.jpg", "height": 640, "width": 464, "date_captured": "2013-11-17 04:39:21", "flickr_url": "http://farm4.staticflickr.com/3505/4642705943_5bbb3deb34_z.jpg", "id": 73702}, {"license": 6, "file_name": "000000086483.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000086483.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 07:03:19", "flickr_url": "http://farm1.staticflickr.com/129/353764343_fea31eda02_z.jpg", "id": 86483}, {"license": 4, "file_name": "000000521141.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000521141.jpg", "height": 500, "width": 375, "date_captured": "2013-11-17 07:18:54", "flickr_url": "http://farm1.staticflickr.com/49/121598568_f73fc969ce_z.jpg", "id": 521141}, {"license": 1, "file_name": "000000061268.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000061268.jpg", "height": 424, "width": 640, "date_captured": "2013-11-17 07:49:18", "flickr_url": "http://farm8.staticflickr.com/7357/9457188871_0dfd0d7d1a_z.jpg", "id": 61268}, {"license": 1, "file_name": "000000393093.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000393093.jpg", "height": 424, "width": 640, "date_captured": "2013-11-17 07:52:59", "flickr_url": "http://farm6.staticflickr.com/5454/9427417851_b15176a325_z.jpg", "id": 393093}, {"license": 3, "file_name": "000000493566.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000493566.jpg", "height": 264, "width": 640, "date_captured": "2013-11-17 08:26:49", "flickr_url": "http://farm3.staticflickr.com/2883/9289056096_83690c37a9_z.jpg", "id": 493566}, {"license": 3, "file_name": "000000191471.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000191471.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 08:38:10", "flickr_url": "http://farm4.staticflickr.com/3174/2588589960_23b82d1114_z.jpg", "id": 191471}, {"license": 3, "file_name": "000000011122.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000011122.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 09:24:02", "flickr_url": "http://farm4.staticflickr.com/3278/3105013044_2f108fed95_z.jpg", "id": 11122}, {"license": 3, "file_name": "000000198510.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000198510.jpg", "height": 640, "width": 640, "date_captured": "2013-11-17 09:28:57", "flickr_url": "http://farm4.staticflickr.com/3769/8963155250_fa48245604_z.jpg", "id": 198510}, {"license": 1, "file_name": "000000126592.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000126592.jpg", "height": 433, "width": 640, "date_captured": "2013-11-17 09:30:49", "flickr_url": "http://farm4.staticflickr.com/3021/2959230829_f12773e057_z.jpg", "id": 126592}, {"license": 1, "file_name": "000000416269.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000416269.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 10:38:58", "flickr_url": "http://farm9.staticflickr.com/8119/8660591748_f57b9a7370_z.jpg", "id": 416269}, {"license": 6, "file_name": "000000133567.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000133567.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 11:03:58", "flickr_url": "http://farm9.staticflickr.com/8247/8613387177_61afe97810_z.jpg", "id": 133567}, {"license": 2, "file_name": "000000521052.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000521052.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 15:29:03", "flickr_url": "http://farm3.staticflickr.com/2098/1568559999_01cbd5d021_z.jpg", "id": 521052}, {"license": 5, "file_name": "000000332318.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000332318.jpg", "height": 429, "width": 640, "date_captured": "2013-11-17 16:21:53", "flickr_url": "http://farm2.staticflickr.com/1169/541175475_cf575c83ba_z.jpg", "id": 332318}, {"license": 3, "file_name": "000000186296.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000186296.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 16:38:07", "flickr_url": "http://farm4.staticflickr.com/3248/3073068615_41512276a9_z.jpg", "id": 186296}, {"license": 3, "file_name": "000000415990.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000415990.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 19:22:37", "flickr_url": "http://farm1.staticflickr.com/49/152209389_9891c4a659_z.jpg", "id": 415990}, {"license": 1, "file_name": "000000187236.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000187236.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 19:25:50", "flickr_url": "http://farm2.staticflickr.com/1067/4734067079_b4646f92b7_z.jpg", "id": 187236}, {"license": 5, "file_name": "000000271728.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000271728.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 19:29:47", "flickr_url": "http://farm9.staticflickr.com/8068/8152724397_82f0c4fc97_z.jpg", "id": 271728}, {"license": 1, "file_name": "000000460147.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000460147.jpg", "height": 424, "width": 640, "date_captured": "2013-11-17 19:36:09", "flickr_url": "http://farm9.staticflickr.com/8457/8053677163_d4c8f416be_z.jpg", "id": 460147}, {"license": 1, "file_name": "000000200667.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000200667.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 19:36:52", "flickr_url": "http://farm6.staticflickr.com/5546/9622461165_9251434b6d_z.jpg", "id": 200667}, {"license": 3, "file_name": "000000077595.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000077595.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 20:13:50", "flickr_url": "http://farm5.staticflickr.com/4018/4651613017_4accb4b8f2_z.jpg", "id": 77595}, {"license": 2, "file_name": "000000278463.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000278463.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 21:06:48", "flickr_url": "http://farm2.staticflickr.com/1376/1280232774_517c04b85b_z.jpg", "id": 278463}, {"license": 4, "file_name": "000000190140.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000190140.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 22:25:24", "flickr_url": "http://farm7.staticflickr.com/6118/6216901971_786976ff66_z.jpg", "id": 190140}, {"license": 3, "file_name": "000000476810.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000476810.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 00:28:01", "flickr_url": "http://farm3.staticflickr.com/2335/2406707284_04264023a9_z.jpg", "id": 476810}, {"license": 1, "file_name": "000000540280.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000540280.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 02:57:38", "flickr_url": "http://farm3.staticflickr.com/2449/4347290536_dfec96baf8_z.jpg", "id": 540280}, {"license": 5, "file_name": "000000126216.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000126216.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 03:13:24", "flickr_url": "http://farm4.staticflickr.com/3472/3194154500_e5829db264_z.jpg", "id": 126216}, {"license": 1, "file_name": "000000032901.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000032901.jpg", "height": 546, "width": 640, "date_captured": "2013-11-18 04:07:29", "flickr_url": "http://farm5.staticflickr.com/4135/4754266165_b2571ef755_z.jpg", "id": 32901}, {"license": 1, "file_name": "000000407960.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000407960.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 04:20:45", "flickr_url": "http://farm8.staticflickr.com/7432/9246491822_dc97ea7ddf_z.jpg", "id": 407960}, {"license": 1, "file_name": "000000084270.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000084270.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 07:29:31", "flickr_url": "http://farm3.staticflickr.com/2422/3771300517_42208de8b2_z.jpg", "id": 84270}, {"license": 1, "file_name": "000000267191.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000267191.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 08:38:27", "flickr_url": "http://farm2.staticflickr.com/1259/5147292542_cf7b954fa8_z.jpg", "id": 267191}, {"license": 4, "file_name": "000000422836.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000422836.jpg", "height": 240, "width": 320, "date_captured": "2013-11-18 10:07:35", "flickr_url": "http://farm3.staticflickr.com/2125/2689742241_f5d1ae8b20_z.jpg", "id": 422836}, {"license": 6, "file_name": "000000493613.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000493613.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 12:33:38", "flickr_url": "http://farm5.staticflickr.com/4139/4794552945_e67c11b5fa_z.jpg", "id": 493613}, {"license": 2, "file_name": "000000217948.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000217948.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 14:19:13", "flickr_url": "http://farm8.staticflickr.com/7251/6937356218_46b89fe8c2_z.jpg", "id": 217948}, {"license": 2, "file_name": "000000317024.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000317024.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 17:05:43", "flickr_url": "http://farm8.staticflickr.com/7318/8905591727_1987579c32_z.jpg", "id": 317024}, {"license": 2, "file_name": "000000463522.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000463522.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 19:44:46", "flickr_url": "http://farm1.staticflickr.com/56/156111943_f36e0ca0ac_z.jpg", "id": 463522}, {"license": 4, "file_name": "000000213547.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000213547.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 20:21:16", "flickr_url": "http://farm3.staticflickr.com/2062/2243132921_779f9cdc24_z.jpg", "id": 213547}, {"license": 1, "file_name": "000000456015.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000456015.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 21:23:06", "flickr_url": "http://farm8.staticflickr.com/7085/7361354062_d71c557b4a_z.jpg", "id": 456015}, {"license": 1, "file_name": "000000547886.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000547886.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 21:23:14", "flickr_url": "http://farm8.staticflickr.com/7219/7361352368_f4c3582554_z.jpg", "id": 547886}, {"license": 3, "file_name": "000000124975.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000124975.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 22:19:32", "flickr_url": "http://farm1.staticflickr.com/6/10184440_354f384aac_z.jpg", "id": 124975}, {"license": 3, "file_name": "000000378453.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000378453.jpg", "height": 346, "width": 500, "date_captured": "2013-11-18 22:19:38", "flickr_url": "http://farm1.staticflickr.com/23/31473168_7c33296718_z.jpg", "id": 378453}, {"license": 1, "file_name": "000000069356.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000069356.jpg", "height": 505, "width": 640, "date_captured": "2013-11-19 18:11:52", "flickr_url": "http://farm3.staticflickr.com/2688/4038821691_13216339f8_z.jpg", "id": 69356}, {"license": 5, "file_name": "000000162415.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000162415.jpg", "height": 640, "width": 536, "date_captured": "2013-11-19 18:13:52", "flickr_url": "http://farm4.staticflickr.com/3359/3597725687_5424627783_z.jpg", "id": 162415}, {"license": 5, "file_name": "000000274708.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000274708.jpg", "height": 612, "width": 612, "date_captured": "2013-11-19 18:20:57", "flickr_url": "http://farm7.staticflickr.com/6039/5899874218_128cd80da6_z.jpg", "id": 274708}, {"license": 1, "file_name": "000000377113.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000377113.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 18:59:42", "flickr_url": "http://farm9.staticflickr.com/8248/8665490515_a9c4153124_z.jpg", "id": 377113}, {"license": 4, "file_name": "000000079651.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000079651.jpg", "height": 478, "width": 640, "date_captured": "2013-11-19 19:50:19", "flickr_url": "http://farm4.staticflickr.com/3720/9659844494_a70f5d61c0_z.jpg", "id": 79651}, {"license": 2, "file_name": "000000104669.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000104669.jpg", "height": 375, "width": 500, "date_captured": "2013-11-19 20:14:14", "flickr_url": "http://farm4.staticflickr.com/3272/2641697991_4c67b4af74_z.jpg", "id": 104669}, {"license": 3, "file_name": "000000439994.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000439994.jpg", "height": 640, "width": 428, "date_captured": "2013-11-19 20:28:57", "flickr_url": "http://farm4.staticflickr.com/3617/3479866509_d38d9160fb_z.jpg", "id": 439994}, {"license": 5, "file_name": "000000430377.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000430377.jpg", "height": 640, "width": 439, "date_captured": "2013-11-19 20:44:53", "flickr_url": "http://farm9.staticflickr.com/8451/7903958976_9073ca847f_z.jpg", "id": 430377}, {"license": 3, "file_name": "000000512776.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000512776.jpg", "height": 356, "width": 500, "date_captured": "2013-11-19 21:09:07", "flickr_url": "http://farm3.staticflickr.com/2420/2492220100_ec0b89834f_z.jpg", "id": 512776}, {"license": 1, "file_name": "000000095155.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000095155.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 22:34:28", "flickr_url": "http://farm6.staticflickr.com/5015/5476356975_10a2043865_z.jpg", "id": 95155}, {"license": 1, "file_name": "000000184978.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000184978.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 23:24:21", "flickr_url": "http://farm6.staticflickr.com/5287/5228620664_dbeef05e94_z.jpg", "id": 184978}, {"license": 4, "file_name": "000000199055.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000199055.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 23:36:09", "flickr_url": "http://farm2.staticflickr.com/1114/5134639056_ce7fe0524b_z.jpg", "id": 199055}, {"license": 4, "file_name": "000000431848.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000431848.jpg", "height": 640, "width": 378, "date_captured": "2013-11-20 00:55:55", "flickr_url": "http://farm9.staticflickr.com/8298/7802093280_131444d084_z.jpg", "id": 431848}, {"license": 4, "file_name": "000000333772.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000333772.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 02:36:02", "flickr_url": "http://farm5.staticflickr.com/4038/4212612461_ca16f4e7fb_z.jpg", "id": 333772}, {"license": 2, "file_name": "000000128699.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000128699.jpg", "height": 500, "width": 351, "date_captured": "2013-11-20 07:03:53", "flickr_url": "http://farm3.staticflickr.com/2475/3918652637_a42d673010_z.jpg", "id": 128699}, {"license": 2, "file_name": "000000121591.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000121591.jpg", "height": 400, "width": 500, "date_captured": "2013-11-20 07:03:55", "flickr_url": "http://farm3.staticflickr.com/2587/3918657759_41e8e6a502_z.jpg", "id": 121591}, {"license": 3, "file_name": "000000176799.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000176799.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 11:41:41", "flickr_url": "http://farm4.staticflickr.com/3253/2753516293_fa3bdcdfcb_z.jpg", "id": 176799}, {"license": 1, "file_name": "000000424521.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000424521.jpg", "height": 500, "width": 314, "date_captured": "2013-11-20 12:40:37", "flickr_url": "http://farm4.staticflickr.com/3263/2628377908_98d0756fab_z.jpg", "id": 424521}, {"license": 3, "file_name": "000000254016.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000254016.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 13:51:09", "flickr_url": "http://farm9.staticflickr.com/8303/7876481760_23dfa103aa_z.jpg", "id": 254016}, {"license": 3, "file_name": "000000523807.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000523807.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 14:11:38", "flickr_url": "http://farm4.staticflickr.com/3177/2925347118_23a1d8663b_z.jpg", "id": 523807}, {"license": 5, "file_name": "000000073946.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000073946.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 16:21:47", "flickr_url": "http://farm5.staticflickr.com/4042/4345743530_c1ed3e4eab_z.jpg", "id": 73946}, {"license": 5, "file_name": "000000230819.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000230819.jpg", "height": 432, "width": 640, "date_captured": "2013-11-20 18:39:45", "flickr_url": "http://farm1.staticflickr.com/35/94826286_8107dbc77a_z.jpg", "id": 230819}, {"license": 1, "file_name": "000000082715.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000082715.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 23:05:42", "flickr_url": "http://farm7.staticflickr.com/6149/5990681178_851ce5b57a_z.jpg", "id": 82715}, {"license": 1, "file_name": "000000085195.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000085195.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 23:59:01", "flickr_url": "http://farm8.staticflickr.com/7230/7166884462_882bb03333_z.jpg", "id": 85195}, {"license": 4, "file_name": "000000435299.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000435299.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 00:06:25", "flickr_url": "http://farm4.staticflickr.com/3714/9631359693_80164e6e57_z.jpg", "id": 435299}, {"license": 3, "file_name": "000000050828.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000050828.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 00:56:39", "flickr_url": "http://farm9.staticflickr.com/8346/8184960180_50d6e9cfbf_z.jpg", "id": 50828}, {"license": 1, "file_name": "000000027696.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000027696.jpg", "height": 410, "width": 640, "date_captured": "2013-11-21 01:25:16", "flickr_url": "http://farm8.staticflickr.com/7426/9091716303_9e93a6f0ae_z.jpg", "id": 27696}, {"license": 3, "file_name": "000000062808.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000062808.jpg", "height": 481, "width": 640, "date_captured": "2013-11-21 02:26:01", "flickr_url": "http://farm9.staticflickr.com/8017/7315214890_701b829cf0_z.jpg", "id": 62808}, {"license": 6, "file_name": "000000497344.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000497344.jpg", "height": 333, "width": 500, "date_captured": "2013-11-21 02:39:51", "flickr_url": "http://farm4.staticflickr.com/3570/3404683624_b15ba92495_z.jpg", "id": 497344}, {"license": 3, "file_name": "000000361147.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000361147.jpg", "height": 640, "width": 417, "date_captured": "2013-11-21 03:06:32", "flickr_url": "http://farm9.staticflickr.com/8160/7693972466_352aa8409e_z.jpg", "id": 361147}, {"license": 3, "file_name": "000000541123.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000541123.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 03:07:35", "flickr_url": "http://farm9.staticflickr.com/8162/7693776280_28645b79d7_z.jpg", "id": 541123}, {"license": 6, "file_name": "000000163611.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000163611.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 05:15:13", "flickr_url": "http://farm5.staticflickr.com/4094/4910578162_c50ca440f5_z.jpg", "id": 163611}, {"license": 5, "file_name": "000000010707.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000010707.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 23:35:53", "flickr_url": "http://farm1.staticflickr.com/147/434840964_a9c5bc3b58_z.jpg", "id": 10707}, {"license": 4, "file_name": "000000409630.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000409630.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 00:55:23", "flickr_url": "http://farm5.staticflickr.com/4007/4303330016_6245479dfb_z.jpg", "id": 409630}, {"license": 4, "file_name": "000000343706.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000343706.jpg", "height": 496, "width": 640, "date_captured": "2013-11-22 02:23:29", "flickr_url": "http://farm9.staticflickr.com/8178/8000388977_c06c12e5e6_z.jpg", "id": 343706}, {"license": 3, "file_name": "000000199395.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000199395.jpg", "height": 640, "width": 427, "date_captured": "2013-11-22 10:38:58", "flickr_url": "http://farm8.staticflickr.com/7428/10174200816_29ed8ac4db_z.jpg", "id": 199395}, {"license": 3, "file_name": "000000514797.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000514797.jpg", "height": 439, "width": 640, "date_captured": "2013-11-22 20:32:54", "flickr_url": "http://farm1.staticflickr.com/25/42764531_0b1bbac293_z.jpg", "id": 514797}, {"license": 1, "file_name": "000000486104.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000486104.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 21:23:16", "flickr_url": "http://farm4.staticflickr.com/3594/3445950275_8b845904ab_z.jpg", "id": 486104}, {"license": 2, "file_name": "000000514586.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000514586.jpg", "height": 500, "width": 354, "date_captured": "2013-11-22 22:49:31", "flickr_url": "http://farm4.staticflickr.com/3108/2588457418_c3017d5aee_z.jpg", "id": 514586}, {"license": 3, "file_name": "000000279774.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000279774.jpg", "height": 500, "width": 415, "date_captured": "2013-11-22 22:51:20", "flickr_url": "http://farm3.staticflickr.com/2166/2511667624_6415ef0ca4_z.jpg", "id": 279774}, {"license": 5, "file_name": "000000474078.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000474078.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 23:42:07", "flickr_url": "http://farm4.staticflickr.com/3278/2554058095_4a57649215_z.jpg", "id": 474078}, {"license": 4, "file_name": "000000000872.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000000872.jpg", "height": 640, "width": 621, "date_captured": "2013-11-23 00:37:47", "flickr_url": "http://farm9.staticflickr.com/8447/7805810128_605424213d_z.jpg", "id": 872}, {"license": 5, "file_name": "000000032038.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000032038.jpg", "height": 500, "width": 333, "date_captured": "2013-11-23 03:01:14", "flickr_url": "http://farm3.staticflickr.com/2692/4423705330_3ca7e5f6ca_z.jpg", "id": 32038}, {"license": 4, "file_name": "000000261732.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000261732.jpg", "height": 438, "width": 640, "date_captured": "2013-11-23 03:42:38", "flickr_url": "http://farm4.staticflickr.com/3262/3179843291_985d31a5f6_z.jpg", "id": 261732}, {"license": 4, "file_name": "000000012120.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000012120.jpg", "height": 428, "width": 640, "date_captured": "2013-11-23 03:42:48", "flickr_url": "http://farm4.staticflickr.com/3492/3179857331_fdd8bbd30f_z.jpg", "id": 12120}, {"license": 3, "file_name": "000000346638.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000346638.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 20:14:13", "flickr_url": "http://farm1.staticflickr.com/26/96079730_fdeeceffa0_z.jpg", "id": 346638}, {"license": 5, "file_name": "000000306139.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000306139.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 03:03:36", "flickr_url": "http://farm5.staticflickr.com/4092/5003303411_fd1d0e52ec_z.jpg", "id": 306139}, {"license": 2, "file_name": "000000534601.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000534601.jpg", "height": 332, "width": 500, "date_captured": "2013-11-24 03:11:36", "flickr_url": "http://farm2.staticflickr.com/1364/764836605_366756e35a_z.jpg", "id": 534601}, {"license": 5, "file_name": "000000288391.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000288391.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 06:17:00", "flickr_url": "http://farm5.staticflickr.com/4148/5202601512_b2b9399204_z.jpg", "id": 288391}, {"license": 5, "file_name": "000000564091.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000564091.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 08:56:26", "flickr_url": "http://farm4.staticflickr.com/3271/2587900333_8f616f59a9_z.jpg", "id": 564091}, {"license": 2, "file_name": "000000531771.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000531771.jpg", "height": 640, "width": 424, "date_captured": "2013-11-24 10:23:10", "flickr_url": "http://farm8.staticflickr.com/7144/6546427703_c8e85c0c55_z.jpg", "id": 531771}, {"license": 5, "file_name": "000000280930.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000280930.jpg", "height": 425, "width": 640, "date_captured": "2013-11-24 10:26:08", "flickr_url": "http://farm6.staticflickr.com/5289/5227407234_31a3eb81cc_z.jpg", "id": 280930}, {"license": 3, "file_name": "000000113867.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000113867.jpg", "height": 640, "width": 633, "date_captured": "2013-11-24 12:27:27", "flickr_url": "http://farm7.staticflickr.com/6080/6088443016_51d81722c2_z.jpg", "id": 113867}, {"license": 1, "file_name": "000000159282.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000159282.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 12:46:33", "flickr_url": "http://farm1.staticflickr.com/31/54650037_91bb3f57cd_z.jpg", "id": 159282}, {"license": 2, "file_name": "000000097585.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000097585.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 13:05:53", "flickr_url": "http://farm6.staticflickr.com/5302/5551645195_7fb6085fae_z.jpg", "id": 97585}, {"license": 3, "file_name": "000000349678.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000349678.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 13:23:09", "flickr_url": "http://farm6.staticflickr.com/5343/9309333163_2f89377c53_z.jpg", "id": 349678}, {"license": 5, "file_name": "000000384136.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000384136.jpg", "height": 414, "width": 640, "date_captured": "2013-11-24 13:28:33", "flickr_url": "http://farm4.staticflickr.com/3173/2567143756_305a9c8fa4_z.jpg", "id": 384136}, {"license": 3, "file_name": "000000173057.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000173057.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 14:21:47", "flickr_url": "http://farm4.staticflickr.com/3801/9100296673_e18a382e1f_z.jpg", "id": 173057}, {"license": 1, "file_name": "000000475572.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000475572.jpg", "height": 431, "width": 640, "date_captured": "2013-11-24 21:26:52", "flickr_url": "http://farm4.staticflickr.com/3135/2746833091_f56afb805c_z.jpg", "id": 475572}, {"license": 3, "file_name": "000000549136.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000549136.jpg", "height": 434, "width": 640, "date_captured": "2013-11-24 21:58:02", "flickr_url": "http://farm3.staticflickr.com/2446/3568679672_cebf442969_z.jpg", "id": 549136}, {"license": 3, "file_name": "000000405691.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000405691.jpg", "height": 427, "width": 640, "date_captured": "2013-11-25 19:33:15", "flickr_url": "http://farm7.staticflickr.com/6118/6366361681_aa00c9cab4_z.jpg", "id": 405691}, {"license": 3, "file_name": "000000228214.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000228214.jpg", "height": 640, "width": 429, "date_captured": "2013-11-14 19:05:17", "flickr_url": "http://farm7.staticflickr.com/6030/5947868929_29a444178f_z.jpg", "id": 228214}, {"license": 4, "file_name": "000000183709.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000183709.jpg", "height": 640, "width": 480, "date_captured": "2013-11-14 21:16:48", "flickr_url": "http://farm1.staticflickr.com/94/267588789_dc94d5a8a0_z.jpg", "id": 183709}, {"license": 1, "file_name": "000000057672.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000057672.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 21:42:33", "flickr_url": "http://farm1.staticflickr.com/16/19248402_cec69d5610_z.jpg", "id": 57672}, {"license": 1, "file_name": "000000138639.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000138639.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 04:41:38", "flickr_url": "http://farm3.staticflickr.com/2610/4073486109_a163857799_z.jpg", "id": 138639}, {"license": 1, "file_name": "000000110884.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000110884.jpg", "height": 640, "width": 640, "date_captured": "2013-11-15 04:46:19", "flickr_url": "http://farm6.staticflickr.com/5262/5600734313_3ab219a836_z.jpg", "id": 110884}, {"license": 4, "file_name": "000000462614.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000462614.jpg", "height": 484, "width": 640, "date_captured": "2013-11-15 05:20:58", "flickr_url": "http://farm5.staticflickr.com/4090/5042758991_26ec3d7fc1_z.jpg", "id": 462614}, {"license": 3, "file_name": "000000283785.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000283785.jpg", "height": 336, "width": 500, "date_captured": "2013-11-15 11:48:48", "flickr_url": "http://farm4.staticflickr.com/3107/3233053359_614b722769_z.jpg", "id": 283785}, {"license": 5, "file_name": "000000523175.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000523175.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 12:31:49", "flickr_url": "http://farm4.staticflickr.com/3031/3081811982_d37ea0f56a_z.jpg", "id": 523175}, {"license": 6, "file_name": "000000139099.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000139099.jpg", "height": 453, "width": 640, "date_captured": "2013-11-15 12:53:36", "flickr_url": "http://farm6.staticflickr.com/5461/9331950744_9c89179dcb_z.jpg", "id": 139099}, {"license": 1, "file_name": "000000467511.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000467511.jpg", "height": 640, "width": 416, "date_captured": "2013-11-15 13:12:11", "flickr_url": "http://farm9.staticflickr.com/8200/8205902241_23d7caec00_z.jpg", "id": 467511}, {"license": 4, "file_name": "000000059920.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000059920.jpg", "height": 640, "width": 427, "date_captured": "2013-11-15 14:08:01", "flickr_url": "http://farm2.staticflickr.com/1322/1439875933_5831ab02e4_z.jpg", "id": 59920}, {"license": 4, "file_name": "000000291791.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000291791.jpg", "height": 499, "width": 640, "date_captured": "2013-11-15 15:40:06", "flickr_url": "http://farm8.staticflickr.com/7407/9120226816_110da6cb9f_z.jpg", "id": 291791}, {"license": 4, "file_name": "000000343934.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000343934.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 16:27:00", "flickr_url": "http://farm6.staticflickr.com/5339/10051858643_11783d3e9f_z.jpg", "id": 343934}, {"license": 3, "file_name": "000000273551.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000273551.jpg", "height": 457, "width": 640, "date_captured": "2013-11-15 18:40:01", "flickr_url": "http://farm9.staticflickr.com/8318/8010902537_326bd5eb50_z.jpg", "id": 273551}, {"license": 3, "file_name": "000000513580.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000513580.jpg", "height": 484, "width": 640, "date_captured": "2013-11-15 19:49:22", "flickr_url": "http://farm8.staticflickr.com/7251/7521052002_e78af4be55_z.jpg", "id": 513580}, {"license": 1, "file_name": "000000213816.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000213816.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 22:35:05", "flickr_url": "http://farm5.staticflickr.com/4147/5054498306_04229b6ef4_z.jpg", "id": 213816}, {"license": 3, "file_name": "000000194832.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000194832.jpg", "height": 425, "width": 640, "date_captured": "2013-11-15 23:14:22", "flickr_url": "http://farm4.staticflickr.com/3116/2445438560_d0a0162ae2_z.jpg", "id": 194832}, {"license": 1, "file_name": "000000077396.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000077396.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 23:19:17", "flickr_url": "http://farm2.staticflickr.com/1323/1048701609_96957c2f0c_z.jpg", "id": 77396}, {"license": 3, "file_name": "000000101787.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000101787.jpg", "height": 640, "width": 457, "date_captured": "2013-11-16 12:21:06", "flickr_url": "http://farm8.staticflickr.com/7287/8742228785_3bfdd0a8a3_z.jpg", "id": 101787}, {"license": 5, "file_name": "000000221754.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000221754.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 12:52:36", "flickr_url": "http://farm7.staticflickr.com/6080/6035948985_c20af797b8_z.jpg", "id": 221754}, {"license": 2, "file_name": "000000522751.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000522751.jpg", "height": 335, "width": 640, "date_captured": "2013-11-16 13:11:50", "flickr_url": "http://farm3.staticflickr.com/2636/3764115573_c46b148baa_z.jpg", "id": 522751}, {"license": 4, "file_name": "000000566436.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000566436.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 16:21:39", "flickr_url": "http://farm5.staticflickr.com/4057/4551440072_6100545cec_z.jpg", "id": 566436}, {"license": 3, "file_name": "000000503841.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000503841.jpg", "height": 598, "width": 640, "date_captured": "2013-11-16 16:23:23", "flickr_url": "http://farm3.staticflickr.com/2589/4060537821_12ed2ac5ef_z.jpg", "id": 503841}, {"license": 4, "file_name": "000000274272.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000274272.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 18:53:18", "flickr_url": "http://farm9.staticflickr.com/8484/8234130537_419b91e4d8_z.jpg", "id": 274272}, {"license": 6, "file_name": "000000305343.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000305343.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 00:02:28", "flickr_url": "http://farm7.staticflickr.com/6217/6282716587_dbd52572d6_z.jpg", "id": 305343}, {"license": 1, "file_name": "000000127092.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000127092.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 00:17:38", "flickr_url": "http://farm8.staticflickr.com/7283/9424705151_e1e48db969_z.jpg", "id": 127092}, {"license": 1, "file_name": "000000507797.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000507797.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 00:26:08", "flickr_url": "http://farm9.staticflickr.com/8342/8222296772_f34777ac9b_z.jpg", "id": 507797}, {"license": 1, "file_name": "000000146498.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000146498.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 02:29:42", "flickr_url": "http://farm6.staticflickr.com/5002/5293824934_9a1d89d941_z.jpg", "id": 146498}, {"license": 4, "file_name": "000000315492.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000315492.jpg", "height": 612, "width": 612, "date_captured": "2013-11-17 03:44:37", "flickr_url": "http://farm9.staticflickr.com/8360/8286443047_b2755b5948_z.jpg", "id": 315492}, {"license": 3, "file_name": "000000482477.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000482477.jpg", "height": 640, "width": 492, "date_captured": "2013-11-17 03:53:11", "flickr_url": "http://farm8.staticflickr.com/7403/10079725443_85a9393791_z.jpg", "id": 482477}, {"license": 1, "file_name": "000000297396.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000297396.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 04:03:54", "flickr_url": "http://farm1.staticflickr.com/157/336859258_8606bcdcd4_z.jpg", "id": 297396}, {"license": 3, "file_name": "000000369675.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000369675.jpg", "height": 429, "width": 640, "date_captured": "2013-11-17 04:18:32", "flickr_url": "http://farm9.staticflickr.com/8248/8553437270_2c182d6889_z.jpg", "id": 369675}, {"license": 3, "file_name": "000000151857.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000151857.jpg", "height": 453, "width": 640, "date_captured": "2013-11-17 04:46:21", "flickr_url": "http://farm8.staticflickr.com/7337/9052429978_d37c29fc9a_z.jpg", "id": 151857}, {"license": 3, "file_name": "000000505638.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000505638.jpg", "height": 483, "width": 640, "date_captured": "2013-11-17 05:14:52", "flickr_url": "http://farm4.staticflickr.com/3144/2926876740_a9e3350316_z.jpg", "id": 505638}, {"license": 3, "file_name": "000000475387.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000475387.jpg", "height": 431, "width": 640, "date_captured": "2013-11-17 07:16:29", "flickr_url": "http://farm6.staticflickr.com/5511/9586806532_f8654f7c33_z.jpg", "id": 475387}, {"license": 3, "file_name": "000000070254.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000070254.jpg", "height": 384, "width": 640, "date_captured": "2013-11-17 07:54:00", "flickr_url": "http://farm8.staticflickr.com/7390/9421264985_7721ff56b4_z.jpg", "id": 70254}, {"license": 3, "file_name": "000000539143.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000539143.jpg", "height": 458, "width": 640, "date_captured": "2013-11-17 08:06:02", "flickr_url": "http://farm3.staticflickr.com/2822/9380168156_2266b060ce_z.jpg", "id": 539143}, {"license": 3, "file_name": "000000508917.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000508917.jpg", "height": 370, "width": 640, "date_captured": "2013-11-17 08:28:11", "flickr_url": "http://farm6.staticflickr.com/5349/9288654526_33344f470e_z.jpg", "id": 508917}, {"license": 3, "file_name": "000000448410.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000448410.jpg", "height": 437, "width": 640, "date_captured": "2013-11-17 09:45:46", "flickr_url": "http://farm6.staticflickr.com/5338/8858798617_6165de2da2_z.jpg", "id": 448410}, {"license": 3, "file_name": "000000316054.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000316054.jpg", "height": 438, "width": 640, "date_captured": "2013-11-17 09:45:49", "flickr_url": "http://farm6.staticflickr.com/5347/8858344646_6f1664d9dd_z.jpg", "id": 316054}, {"license": 3, "file_name": "000000201148.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000201148.jpg", "height": 359, "width": 640, "date_captured": "2013-11-17 10:01:14", "flickr_url": "http://farm8.staticflickr.com/7284/8739323090_175796ece0_z.jpg", "id": 201148}, {"license": 3, "file_name": "000000231169.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000231169.jpg", "height": 454, "width": 640, "date_captured": "2013-11-17 10:09:48", "flickr_url": "http://farm8.staticflickr.com/7425/8725631819_3042a7895b_z.jpg", "id": 231169}, {"license": 3, "file_name": "000000511999.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000511999.jpg", "height": 446, "width": 640, "date_captured": "2013-11-17 10:43:04", "flickr_url": "http://farm9.staticflickr.com/8246/8647068737_1f58d52a62_z.jpg", "id": 511999}, {"license": 3, "file_name": "000000488664.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000488664.jpg", "height": 489, "width": 629, "date_captured": "2013-11-17 10:48:44", "flickr_url": "http://farm9.staticflickr.com/8528/8637880275_064fc71ea1_z.jpg", "id": 488664}, {"license": 3, "file_name": "000000444879.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000444879.jpg", "height": 479, "width": 640, "date_captured": "2013-11-17 10:54:24", "flickr_url": "http://farm9.staticflickr.com/8523/8633533814_a9527fbd59_z.jpg", "id": 444879}, {"license": 3, "file_name": "000000287874.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000287874.jpg", "height": 434, "width": 640, "date_captured": "2013-11-17 11:06:15", "flickr_url": "http://farm9.staticflickr.com/8118/8603470324_ff356ace1f_z.jpg", "id": 287874}, {"license": 1, "file_name": "000000297022.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000297022.jpg", "height": 504, "width": 640, "date_captured": "2013-11-17 13:32:22", "flickr_url": "http://farm8.staticflickr.com/7142/6515872335_f42305a782_z.jpg", "id": 297022}, {"license": 3, "file_name": "000000407083.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000407083.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 13:57:37", "flickr_url": "http://farm5.staticflickr.com/4074/4879760560_c9db4b024a_z.jpg", "id": 407083}, {"license": 4, "file_name": "000000212226.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000212226.jpg", "height": 335, "width": 500, "date_captured": "2013-11-17 14:48:15", "flickr_url": "http://farm4.staticflickr.com/3633/3554392751_0a85ee44f8_z.jpg", "id": 212226}, {"license": 3, "file_name": "000000394206.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000394206.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 16:43:06", "flickr_url": "http://farm4.staticflickr.com/3833/10168054123_eed5d06422_z.jpg", "id": 394206}, {"license": 1, "file_name": "000000220858.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000220858.jpg", "height": 367, "width": 500, "date_captured": "2013-11-17 21:55:02", "flickr_url": "http://farm4.staticflickr.com/3126/2868609893_da56249723_z.jpg", "id": 220858}, {"license": 4, "file_name": "000000244411.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000244411.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 22:06:02", "flickr_url": "http://farm6.staticflickr.com/5338/7442803416_877f86a182_z.jpg", "id": 244411}, {"license": 3, "file_name": "000000289741.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000289741.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 00:07:23", "flickr_url": "http://farm3.staticflickr.com/2028/1719310646_379f3e7e0a_z.jpg", "id": 289741}, {"license": 3, "file_name": "000000453166.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000453166.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 00:38:53", "flickr_url": "http://farm8.staticflickr.com/7019/6728520621_a289ab4046_z.jpg", "id": 453166}, {"license": 3, "file_name": "000000006894.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000006894.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 01:54:56", "flickr_url": "http://farm4.staticflickr.com/3361/3261570811_9fce91726f_z.jpg", "id": 6894}, {"license": 4, "file_name": "000000133631.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000133631.jpg", "height": 640, "width": 425, "date_captured": "2013-11-18 02:20:57", "flickr_url": "http://farm9.staticflickr.com/8289/7822152024_2cea0d2cff_z.jpg", "id": 133631}, {"license": 5, "file_name": "000000279927.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000279927.jpg", "height": 442, "width": 640, "date_captured": "2013-11-18 02:44:55", "flickr_url": "http://farm8.staticflickr.com/7214/7392604632_6e5e3447a9_z.jpg", "id": 279927}, {"license": 2, "file_name": "000000561335.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000561335.jpg", "height": 376, "width": 500, "date_captured": "2013-11-18 02:48:59", "flickr_url": "http://farm3.staticflickr.com/2441/3843552188_3e3dd72bdf_z.jpg", "id": 561335}, {"license": 3, "file_name": "000000161032.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000161032.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 04:27:45", "flickr_url": "http://farm3.staticflickr.com/2614/5754917253_23befc99e4_z.jpg", "id": 161032}, {"license": 5, "file_name": "000000415748.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000415748.jpg", "height": 640, "width": 426, "date_captured": "2013-11-18 06:41:03", "flickr_url": "http://farm7.staticflickr.com/6235/6337941606_9b06403fa6_z.jpg", "id": 415748}, {"license": 6, "file_name": "000000318908.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000318908.jpg", "height": 333, "width": 500, "date_captured": "2013-11-18 11:52:47", "flickr_url": "http://farm4.staticflickr.com/3452/3277828677_9145bc2cee_z.jpg", "id": 318908}, {"license": 3, "file_name": "000000460927.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000460927.jpg", "height": 360, "width": 640, "date_captured": "2013-11-18 13:48:17", "flickr_url": "http://farm9.staticflickr.com/8053/8087000697_2da36bf0bd_z.jpg", "id": 460927}, {"license": 2, "file_name": "000000139883.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000139883.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 15:18:32", "flickr_url": "http://farm5.staticflickr.com/4133/5021540004_c42ee94f97_z.jpg", "id": 139883}, {"license": 3, "file_name": "000000437239.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000437239.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 18:34:04", "flickr_url": "http://farm4.staticflickr.com/3508/3737478305_e4b7a1a981_z.jpg", "id": 437239}, {"license": 3, "file_name": "000000348243.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000348243.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 22:36:59", "flickr_url": "http://farm4.staticflickr.com/3617/3388667828_760fe3118a_z.jpg", "id": 348243}, {"license": 2, "file_name": "000000382111.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000382111.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 22:51:36", "flickr_url": "http://farm7.staticflickr.com/6083/6055128278_1e45691f0a_z.jpg", "id": 382111}, {"license": 6, "file_name": "000000317433.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000317433.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 23:04:46", "flickr_url": "http://farm4.staticflickr.com/3565/3476453227_569e599f14_z.jpg", "id": 317433}, {"license": 6, "file_name": "000000132408.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000132408.jpg", "height": 640, "width": 429, "date_captured": "2013-11-18 23:04:54", "flickr_url": "http://farm4.staticflickr.com/3556/3477357156_7ae90323c6_z.jpg", "id": 132408}, {"license": 4, "file_name": "000000191288.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000191288.jpg", "height": 400, "width": 600, "date_captured": "2013-11-19 01:35:41", "flickr_url": "http://farm4.staticflickr.com/3733/9192472019_8099077709_z.jpg", "id": 191288}, {"license": 4, "file_name": "000000260106.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000260106.jpg", "height": 600, "width": 400, "date_captured": "2013-11-19 01:47:36", "flickr_url": "http://farm8.staticflickr.com/7355/9062004031_5775136a94_z.jpg", "id": 260106}, {"license": 4, "file_name": "000000100510.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000100510.jpg", "height": 400, "width": 600, "date_captured": "2013-11-19 01:54:14", "flickr_url": "http://farm6.staticflickr.com/5547/9059818049_548550bd8f_z.jpg", "id": 100510}, {"license": 4, "file_name": "000000441442.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000441442.jpg", "height": 400, "width": 600, "date_captured": "2013-11-19 02:34:09", "flickr_url": "http://farm8.staticflickr.com/7284/8715724078_725b401d61_z.jpg", "id": 441442}, {"license": 4, "file_name": "000000140270.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000140270.jpg", "height": 400, "width": 600, "date_captured": "2013-11-19 02:34:15", "flickr_url": "http://farm9.staticflickr.com/8121/8714346440_8ccf87db39_z.jpg", "id": 140270}, {"license": 4, "file_name": "000000553990.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000553990.jpg", "height": 400, "width": 600, "date_captured": "2013-11-19 02:40:00", "flickr_url": "http://farm9.staticflickr.com/8539/8686063159_82aa07943f_z.jpg", "id": 553990}, {"license": 4, "file_name": "000000097924.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000097924.jpg", "height": 400, "width": 600, "date_captured": "2013-11-19 03:09:10", "flickr_url": "http://farm9.staticflickr.com/8527/8546652580_94dbb43241_z.jpg", "id": 97924}, {"license": 1, "file_name": "000000331799.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000331799.jpg", "height": 464, "width": 640, "date_captured": "2013-11-19 17:48:32", "flickr_url": "http://farm7.staticflickr.com/6014/5952045924_c045df0ae3_z.jpg", "id": 331799}, {"license": 4, "file_name": "000000326542.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000326542.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 17:58:52", "flickr_url": "http://farm4.staticflickr.com/3343/3451646252_bf663fdb0d_z.jpg", "id": 326542}, {"license": 5, "file_name": "000000250766.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000250766.jpg", "height": 410, "width": 500, "date_captured": "2013-11-19 19:31:42", "flickr_url": "http://farm4.staticflickr.com/3411/3237841227_3c1fbda1ee_z.jpg", "id": 250766}, {"license": 4, "file_name": "000000023781.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000023781.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 21:08:08", "flickr_url": "http://farm4.staticflickr.com/3631/3669674438_5e744504c0_z.jpg", "id": 23781}, {"license": 4, "file_name": "000000576566.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000576566.jpg", "height": 640, "width": 469, "date_captured": "2013-11-19 23:46:47", "flickr_url": "http://farm4.staticflickr.com/3381/3412884049_337839d219_z.jpg", "id": 576566}, {"license": 3, "file_name": "000000327306.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000327306.jpg", "height": 400, "width": 640, "date_captured": "2013-11-19 23:55:09", "flickr_url": "http://farm6.staticflickr.com/5142/5570784990_109e97ba8f_z.jpg", "id": 327306}, {"license": 2, "file_name": "000000567825.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000567825.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 01:15:57", "flickr_url": "http://farm6.staticflickr.com/5146/5834161325_d6a8295a8c_z.jpg", "id": 567825}, {"license": 2, "file_name": "000000485972.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000485972.jpg", "height": 640, "width": 426, "date_captured": "2013-11-20 01:25:36", "flickr_url": "http://farm6.staticflickr.com/5245/5358772327_79708430a5_z.jpg", "id": 485972}, {"license": 1, "file_name": "000000378873.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000378873.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 02:08:17", "flickr_url": "http://farm2.staticflickr.com/1342/913303959_2980ff3f3d_z.jpg", "id": 378873}, {"license": 5, "file_name": "000000094944.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000094944.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 04:02:11", "flickr_url": "http://farm5.staticflickr.com/4008/4414517057_541fe5e979_z.jpg", "id": 94944}, {"license": 1, "file_name": "000000151051.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000151051.jpg", "height": 478, "width": 640, "date_captured": "2013-11-20 05:32:52", "flickr_url": "http://farm3.staticflickr.com/2763/4242680528_3eba24e5d2_z.jpg", "id": 151051}, {"license": 3, "file_name": "000000093717.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000093717.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 06:04:51", "flickr_url": "http://farm5.staticflickr.com/4020/4430678125_d9f9b2f5e1_z.jpg", "id": 93717}, {"license": 1, "file_name": "000000394510.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000394510.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 10:32:57", "flickr_url": "http://farm4.staticflickr.com/3195/2948181016_7cbbeeafab_z.jpg", "id": 394510}, {"license": 3, "file_name": "000000083531.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000083531.jpg", "height": 275, "width": 500, "date_captured": "2013-11-20 11:58:06", "flickr_url": "http://farm1.staticflickr.com/81/251680393_68076ee79f_z.jpg", "id": 83531}, {"license": 1, "file_name": "000000018193.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000018193.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 13:24:37", "flickr_url": "http://farm1.staticflickr.com/242/516677812_f03351fffd_z.jpg", "id": 18193}, {"license": 3, "file_name": "000000160728.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000160728.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 16:16:57", "flickr_url": "http://farm3.staticflickr.com/2793/4457149583_245cf51163_z.jpg", "id": 160728}, {"license": 1, "file_name": "000000092177.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000092177.jpg", "height": 640, "width": 626, "date_captured": "2013-11-20 16:38:20", "flickr_url": "http://farm3.staticflickr.com/2781/4091689480_79081574ff_z.jpg", "id": 92177}, {"license": 4, "file_name": "000000074200.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000074200.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 16:45:36", "flickr_url": "http://farm3.staticflickr.com/2368/2768765218_12e6f3bea8_z.jpg", "id": 74200}, {"license": 3, "file_name": "000000001425.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000001425.jpg", "height": 512, "width": 640, "date_captured": "2013-11-20 16:51:28", "flickr_url": "http://farm5.staticflickr.com/4059/4529519070_a1cb2d84d9_z.jpg", "id": 1425}, {"license": 4, "file_name": "000000234779.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000234779.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 17:03:21", "flickr_url": "http://farm5.staticflickr.com/4072/4440872984_28bfb6bd5b_z.jpg", "id": 234779}, {"license": 1, "file_name": "000000485130.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000485130.jpg", "height": 467, "width": 640, "date_captured": "2013-11-20 18:06:15", "flickr_url": "http://farm3.staticflickr.com/2494/3985643353_4eb03274ee_z.jpg", "id": 485130}, {"license": 4, "file_name": "000000043435.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000043435.jpg", "height": 640, "width": 638, "date_captured": "2013-11-20 19:49:27", "flickr_url": "http://farm4.staticflickr.com/3705/9683286086_a3e09af27b_z.jpg", "id": 43435}, {"license": 2, "file_name": "000000403584.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000403584.jpg", "height": 640, "width": 640, "date_captured": "2013-11-20 21:39:22", "flickr_url": "http://farm6.staticflickr.com/5456/7206717636_7f92324900_z.jpg", "id": 403584}, {"license": 4, "file_name": "000000040757.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000040757.jpg", "height": 640, "width": 425, "date_captured": "2013-11-20 23:14:01", "flickr_url": "http://farm5.staticflickr.com/4066/4705721976_a7c6bc8e97_z.jpg", "id": 40757}, {"license": 4, "file_name": "000000035062.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000035062.jpg", "height": 640, "width": 425, "date_captured": "2013-11-20 23:14:19", "flickr_url": "http://farm5.staticflickr.com/4069/4705721638_eb16917a86_z.jpg", "id": 35062}, {"license": 4, "file_name": "000000342128.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000342128.jpg", "height": 640, "width": 488, "date_captured": "2013-11-21 02:17:01", "flickr_url": "http://farm8.staticflickr.com/7345/9296437874_b852f470d6_z.jpg", "id": 342128}, {"license": 3, "file_name": "000000035279.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000035279.jpg", "height": 463, "width": 640, "date_captured": "2013-11-21 02:18:09", "flickr_url": "http://farm8.staticflickr.com/7026/6693456351_1af425b1c9_z.jpg", "id": 35279}, {"license": 5, "file_name": "000000503755.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000503755.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 05:52:25", "flickr_url": "http://farm3.staticflickr.com/2762/4286031910_a8de6a0aa1_z.jpg", "id": 503755}, {"license": 1, "file_name": "000000024610.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000024610.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 19:56:45", "flickr_url": "http://farm3.staticflickr.com/2422/3614012314_dc85d00fdd_z.jpg", "id": 24610}, {"license": 3, "file_name": "000000320642.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000320642.jpg", "height": 321, "width": 500, "date_captured": "2013-11-21 20:35:20", "flickr_url": "http://farm3.staticflickr.com/2754/4057489007_546e42d1a6_z.jpg", "id": 320642}, {"license": 1, "file_name": "000000322895.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000322895.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 01:33:28", "flickr_url": "http://farm3.staticflickr.com/2488/3902330436_860c490a85_z.jpg", "id": 322895}, {"license": 2, "file_name": "000000104666.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000104666.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 01:57:42", "flickr_url": "http://farm3.staticflickr.com/2514/3842162731_4aff150e8b_z.jpg", "id": 104666}, {"license": 6, "file_name": "000000097337.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000097337.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 03:04:07", "flickr_url": "http://farm4.staticflickr.com/3419/3401318692_56961479c5_z.jpg", "id": 97337}, {"license": 1, "file_name": "000000235778.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000235778.jpg", "height": 337, "width": 640, "date_captured": "2013-11-22 08:46:22", "flickr_url": "http://farm2.staticflickr.com/1410/542247203_7e4c5141d7_z.jpg", "id": 235778}, {"license": 4, "file_name": "000000547144.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000547144.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 18:39:38", "flickr_url": "http://farm3.staticflickr.com/2408/2527139847_ee51ca4ce3_z.jpg", "id": 547144}, {"license": 4, "file_name": "000000541952.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000541952.jpg", "height": 640, "width": 480, "date_captured": "2013-11-22 19:13:25", "flickr_url": "http://farm8.staticflickr.com/7001/6558484543_29d8e178e5_z.jpg", "id": 541952}, {"license": 1, "file_name": "000000494759.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000494759.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 19:23:05", "flickr_url": "http://farm2.staticflickr.com/1259/569042008_413ee88047_z.jpg", "id": 494759}, {"license": 3, "file_name": "000000409542.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000409542.jpg", "height": 640, "width": 428, "date_captured": "2013-11-22 21:07:47", "flickr_url": "http://farm2.staticflickr.com/1431/5168949090_802dd5d08d_z.jpg", "id": 409542}, {"license": 1, "file_name": "000000427055.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000427055.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 21:13:59", "flickr_url": "http://farm9.staticflickr.com/8182/7975274397_503eb498f4_z.jpg", "id": 427055}, {"license": 5, "file_name": "000000119995.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000119995.jpg", "height": 500, "width": 468, "date_captured": "2013-11-23 02:51:52", "flickr_url": "http://farm3.staticflickr.com/2555/3898058235_3983500994_z.jpg", "id": 119995}, {"license": 1, "file_name": "000000159112.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000159112.jpg", "height": 450, "width": 640, "date_captured": "2013-11-23 03:24:12", "flickr_url": "http://farm3.staticflickr.com/2796/4271264202_b6fc986ab4_z.jpg", "id": 159112}, {"license": 5, "file_name": "000000369323.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000369323.jpg", "height": 500, "width": 377, "date_captured": "2013-11-23 03:54:09", "flickr_url": "http://farm4.staticflickr.com/3159/2876155563_b7f860ac4b_z.jpg", "id": 369323}, {"license": 5, "file_name": "000000127270.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000127270.jpg", "height": 500, "width": 328, "date_captured": "2013-11-23 03:57:49", "flickr_url": "http://farm4.staticflickr.com/3071/2828903887_8157eb46f0_z.jpg", "id": 127270}, {"license": 2, "file_name": "000000413247.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000413247.jpg", "height": 426, "width": 640, "date_captured": "2013-11-23 19:55:57", "flickr_url": "http://farm5.staticflickr.com/4065/4568885003_f08cd0bbfa_z.jpg", "id": 413247}, {"license": 1, "file_name": "000000179653.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000179653.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 00:36:15", "flickr_url": "http://farm5.staticflickr.com/4053/4447314984_1514cc618a_z.jpg", "id": 179653}, {"license": 1, "file_name": "000000400922.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000400922.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 01:44:41", "flickr_url": "http://farm6.staticflickr.com/5142/5633791668_5b184a03a3_z.jpg", "id": 400922}, {"license": 1, "file_name": "000000300039.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000300039.jpg", "height": 374, "width": 500, "date_captured": "2013-11-24 07:17:43", "flickr_url": "http://farm3.staticflickr.com/2093/2187275722_e3747de55c_z.jpg", "id": 300039}, {"license": 1, "file_name": "000000259597.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000259597.jpg", "height": 312, "width": 640, "date_captured": "2013-11-24 08:09:16", "flickr_url": "http://farm7.staticflickr.com/6113/6310588429_b05f6d670b_z.jpg", "id": 259597}, {"license": 5, "file_name": "000000297084.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000297084.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 22:24:11", "flickr_url": "http://farm6.staticflickr.com/5510/10199431365_8ae1b637f4_z.jpg", "id": 297084}, {"license": 1, "file_name": "000000168337.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000168337.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 10:56:10", "flickr_url": "http://farm7.staticflickr.com/6011/5975270291_33aa23e4b4_z.jpg", "id": 168337}, {"license": 2, "file_name": "000000419974.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000419974.jpg", "height": 640, "width": 426, "date_captured": "2013-11-14 18:57:52", "flickr_url": "http://farm4.staticflickr.com/3647/3655327694_5e4324ea90_z.jpg", "id": 419974}, {"license": 3, "file_name": "000000226408.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000226408.jpg", "height": 469, "width": 640, "date_captured": "2013-11-14 19:35:41", "flickr_url": "http://farm4.staticflickr.com/3118/3170836178_f8732dab20_z.jpg", "id": 226408}, {"license": 1, "file_name": "000000173302.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000173302.jpg", "height": 425, "width": 640, "date_captured": "2013-11-14 19:56:59", "flickr_url": "http://farm9.staticflickr.com/8084/8334649847_581b3e9394_z.jpg", "id": 173302}, {"license": 3, "file_name": "000000237928.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000237928.jpg", "height": 640, "width": 457, "date_captured": "2013-11-14 20:56:49", "flickr_url": "http://farm9.staticflickr.com/8232/8569862422_cb4b245ae3_z.jpg", "id": 237928}, {"license": 1, "file_name": "000000054654.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000054654.jpg", "height": 640, "width": 407, "date_captured": "2013-11-14 22:11:17", "flickr_url": "http://farm8.staticflickr.com/7266/6886950764_46c91c4651_z.jpg", "id": 54654}, {"license": 1, "file_name": "000000167898.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000167898.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 00:44:11", "flickr_url": "http://farm2.staticflickr.com/1011/1011151624_b1b3ff0897_z.jpg", "id": 167898}, {"license": 3, "file_name": "000000152771.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000152771.jpg", "height": 479, "width": 640, "date_captured": "2013-11-15 01:31:40", "flickr_url": "http://farm3.staticflickr.com/2468/4280000294_b45c72e223_z.jpg", "id": 152771}, {"license": 1, "file_name": "000000117914.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000117914.jpg", "height": 500, "width": 333, "date_captured": "2013-11-15 02:45:06", "flickr_url": "http://farm4.staticflickr.com/3215/3060518637_07c162a07f_z.jpg", "id": 117914}, {"license": 4, "file_name": "000000309391.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000309391.jpg", "height": 384, "width": 640, "date_captured": "2013-11-15 04:38:50", "flickr_url": "http://farm6.staticflickr.com/5246/5329327710_92169d73d4_z.jpg", "id": 309391}, {"license": 1, "file_name": "000000480944.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000480944.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 10:30:01", "flickr_url": "http://farm8.staticflickr.com/7062/6774987268_25b081373c_z.jpg", "id": 480944}, {"license": 1, "file_name": "000000568690.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000568690.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 12:50:55", "flickr_url": "http://farm7.staticflickr.com/6076/6049039921_82e3908f2d_z.jpg", "id": 568690}, {"license": 3, "file_name": "000000382122.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000382122.jpg", "height": 640, "width": 424, "date_captured": "2013-11-15 13:56:53", "flickr_url": "http://farm5.staticflickr.com/4091/4969954027_4bdbb4caa8_z.jpg", "id": 382122}, {"license": 5, "file_name": "000000234807.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000234807.jpg", "height": 462, "width": 640, "date_captured": "2013-11-15 14:23:29", "flickr_url": "http://farm3.staticflickr.com/2730/4157904856_41ed6d95ca_z.jpg", "id": 234807}, {"license": 4, "file_name": "000000554291.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000554291.jpg", "height": 428, "width": 640, "date_captured": "2013-11-15 14:47:07", "flickr_url": "http://farm1.staticflickr.com/103/256248429_ebcfe37830_z.jpg", "id": 554291}, {"license": 2, "file_name": "000000060835.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000060835.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 17:17:00", "flickr_url": "http://farm6.staticflickr.com/5102/5693857301_dc8b463757_z.jpg", "id": 60835}, {"license": 3, "file_name": "000000213935.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000213935.jpg", "height": 425, "width": 640, "date_captured": "2013-11-15 17:40:53", "flickr_url": "http://farm6.staticflickr.com/5245/5328124090_1b7246f104_z.jpg", "id": 213935}, {"license": 2, "file_name": "000000502599.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000502599.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 04:58:17", "flickr_url": "http://farm5.staticflickr.com/4027/5133933231_373b90c228_z.jpg", "id": 502599}, {"license": 3, "file_name": "000000425221.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000425221.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 05:13:27", "flickr_url": "http://farm6.staticflickr.com/5504/9661315975_3822bd42f3_z.jpg", "id": 425221}, {"license": 3, "file_name": "000000224119.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000224119.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 05:29:06", "flickr_url": "http://farm6.staticflickr.com/5230/5616425500_ebc6f51f4c_z.jpg", "id": 224119}, {"license": 1, "file_name": "000000417043.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000417043.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 15:11:42", "flickr_url": "http://farm3.staticflickr.com/2759/4349918488_8b5429a85c_z.jpg", "id": 417043}, {"license": 2, "file_name": "000000393282.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000393282.jpg", "height": 640, "width": 640, "date_captured": "2013-11-16 16:47:47", "flickr_url": "http://farm9.staticflickr.com/8072/8384470482_7a62d3684c_z.jpg", "id": 393282}, {"license": 1, "file_name": "000000078032.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000078032.jpg", "height": 383, "width": 640, "date_captured": "2013-11-16 18:59:20", "flickr_url": "http://farm9.staticflickr.com/8188/8116900952_8726083af4_z.jpg", "id": 78032}, {"license": 3, "file_name": "000000472030.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000472030.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 19:50:55", "flickr_url": "http://farm4.staticflickr.com/3340/3570719653_be3552d961_z.jpg", "id": 472030}, {"license": 1, "file_name": "000000537964.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000537964.jpg", "height": 430, "width": 640, "date_captured": "2013-11-16 21:04:15", "flickr_url": "http://farm3.staticflickr.com/2799/4360903003_32fc3de643_z.jpg", "id": 537964}, {"license": 4, "file_name": "000000542423.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000542423.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 21:49:36", "flickr_url": "http://farm9.staticflickr.com/8066/8238250269_f755e1f885_z.jpg", "id": 542423}, {"license": 1, "file_name": "000000344909.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000344909.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 22:17:41", "flickr_url": "http://farm1.staticflickr.com/23/93479319_d7abd34b59_z.jpg", "id": 344909}, {"license": 4, "file_name": "000000140556.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000140556.jpg", "height": 457, "width": 640, "date_captured": "2013-11-16 22:36:12", "flickr_url": "http://farm9.staticflickr.com/8009/7421122526_0eec2dd48b_z.jpg", "id": 140556}, {"license": 1, "file_name": "000000277051.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000277051.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 23:59:57", "flickr_url": "http://farm5.staticflickr.com/4067/4383973415_e93587c71d_z.jpg", "id": 277051}, {"license": 5, "file_name": "000000082696.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000082696.jpg", "height": 640, "width": 427, "date_captured": "2013-11-17 00:16:17", "flickr_url": "http://farm4.staticflickr.com/3075/3205065177_7864fb5c3d_z.jpg", "id": 82696}, {"license": 4, "file_name": "000000189698.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000189698.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 00:39:12", "flickr_url": "http://farm6.staticflickr.com/5287/5334889612_b1cbc99066_z.jpg", "id": 189698}, {"license": 4, "file_name": "000000407518.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000407518.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 00:48:19", "flickr_url": "http://farm6.staticflickr.com/5004/5248448434_92747c5db2_z.jpg", "id": 407518}, {"license": 4, "file_name": "000000310622.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000310622.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 01:26:43", "flickr_url": "http://farm4.staticflickr.com/3631/3482867488_14461fd5ac_z.jpg", "id": 310622}, {"license": 3, "file_name": "000000019109.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000019109.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 02:08:36", "flickr_url": "http://farm8.staticflickr.com/7223/7017616831_24cd0b6131_z.jpg", "id": 19109}, {"license": 1, "file_name": "000000361571.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000361571.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 02:18:16", "flickr_url": "http://farm8.staticflickr.com/7140/7407915366_78483232e2_z.jpg", "id": 361571}, {"license": 2, "file_name": "000000206994.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000206994.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 03:13:28", "flickr_url": "http://farm6.staticflickr.com/5329/8923586921_5a834c23bc_z.jpg", "id": 206994}, {"license": 1, "file_name": "000000523241.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000523241.jpg", "height": 333, "width": 500, "date_captured": "2013-11-17 06:48:26", "flickr_url": "http://farm2.staticflickr.com/1008/597233904_32dd24e25e_z.jpg", "id": 523241}, {"license": 1, "file_name": "000000067616.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000067616.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 10:24:45", "flickr_url": "http://farm8.staticflickr.com/7214/6861986830_34473988c3_z.jpg", "id": 67616}, {"license": 1, "file_name": "000000258793.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000258793.jpg", "height": 476, "width": 640, "date_captured": "2013-11-17 10:48:39", "flickr_url": "http://farm5.staticflickr.com/4111/5017121112_5b7296288e_z.jpg", "id": 258793}, {"license": 1, "file_name": "000000433774.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000433774.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 11:22:49", "flickr_url": "http://farm5.staticflickr.com/4132/5095011888_a3c084bb60_z.jpg", "id": 433774}, {"license": 1, "file_name": "000000413395.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000413395.jpg", "height": 421, "width": 640, "date_captured": "2013-11-17 18:06:00", "flickr_url": "http://farm2.staticflickr.com/1046/1358200056_5858eaf239_z.jpg", "id": 413395}, {"license": 1, "file_name": "000000469067.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000469067.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 20:02:51", "flickr_url": "http://farm1.staticflickr.com/194/463125731_46041095c3_z.jpg", "id": 469067}, {"license": 1, "file_name": "000000559099.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000559099.jpg", "height": 360, "width": 640, "date_captured": "2013-11-17 20:39:07", "flickr_url": "http://farm3.staticflickr.com/2833/9073799277_8df5be3151_z.jpg", "id": 559099}, {"license": 2, "file_name": "000000311789.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000311789.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 00:36:15", "flickr_url": "http://farm3.staticflickr.com/2028/2188480725_5fbf27a5b3_z.jpg", "id": 311789}, {"license": 4, "file_name": "000000201025.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000201025.jpg", "height": 604, "width": 400, "date_captured": "2013-11-18 02:07:04", "flickr_url": "http://farm5.staticflickr.com/4116/4856632552_e79df89e91_z.jpg", "id": 201025}, {"license": 2, "file_name": "000000448256.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000448256.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 02:44:36", "flickr_url": "http://farm4.staticflickr.com/3469/3961176423_c73ee4bbb1_z.jpg", "id": 448256}, {"license": 2, "file_name": "000000549390.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000549390.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 04:43:33", "flickr_url": "http://farm3.staticflickr.com/2478/3980730371_4afea4ce86_z.jpg", "id": 549390}, {"license": 3, "file_name": "000000401991.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000401991.jpg", "height": 379, "width": 640, "date_captured": "2013-11-18 08:39:18", "flickr_url": "http://farm4.staticflickr.com/3055/2964926040_dfc5bf1a0b_z.jpg", "id": 401991}, {"license": 3, "file_name": "000000201418.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000201418.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 12:10:06", "flickr_url": "http://farm1.staticflickr.com/29/94658372_749e095403_z.jpg", "id": 201418}, {"license": 1, "file_name": "000000385997.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000385997.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 14:03:39", "flickr_url": "http://farm7.staticflickr.com/6196/6121203200_016b952f4e_z.jpg", "id": 385997}, {"license": 3, "file_name": "000000545730.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000545730.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 15:13:11", "flickr_url": "http://farm6.staticflickr.com/5185/5551804294_f76a453626_z.jpg", "id": 545730}, {"license": 1, "file_name": "000000364102.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000364102.jpg", "height": 398, "width": 640, "date_captured": "2013-11-18 15:55:30", "flickr_url": "http://farm3.staticflickr.com/2657/4168067864_058f25c88f_z.jpg", "id": 364102}, {"license": 4, "file_name": "000000013291.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000013291.jpg", "height": 335, "width": 500, "date_captured": "2013-11-18 16:17:44", "flickr_url": "http://farm4.staticflickr.com/3394/3491087208_8efdfeb6d4_z.jpg", "id": 13291}, {"license": 4, "file_name": "000000440336.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000440336.jpg", "height": 335, "width": 500, "date_captured": "2013-11-18 16:17:54", "flickr_url": "http://farm4.staticflickr.com/3356/3490271591_e4923583b7_z.jpg", "id": 440336}, {"license": 1, "file_name": "000000148783.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000148783.jpg", "height": 640, "width": 448, "date_captured": "2013-11-18 18:59:13", "flickr_url": "http://farm3.staticflickr.com/2731/4309127571_ac7b35af7d_z.jpg", "id": 148783}, {"license": 2, "file_name": "000000325306.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000325306.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 21:44:11", "flickr_url": "http://farm1.staticflickr.com/155/422511828_675eda89a5_z.jpg", "id": 325306}, {"license": 3, "file_name": "000000488251.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000488251.jpg", "height": 360, "width": 640, "date_captured": "2013-11-18 23:55:43", "flickr_url": "http://farm3.staticflickr.com/2822/9219821274_18b3f6bc28_z.jpg", "id": 488251}, {"license": 1, "file_name": "000000229601.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000229601.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 17:56:39", "flickr_url": "http://farm4.staticflickr.com/3553/3616729912_2ab6c357a1_z.jpg", "id": 229601}, {"license": 1, "file_name": "000000427160.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000427160.jpg", "height": 512, "width": 640, "date_captured": "2013-11-19 20:14:02", "flickr_url": "http://farm3.staticflickr.com/2432/3622492391_d796a8e0ec_z.jpg", "id": 427160}, {"license": 2, "file_name": "000000437205.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000437205.jpg", "height": 640, "width": 383, "date_captured": "2013-11-19 20:23:56", "flickr_url": "http://farm8.staticflickr.com/7093/7250439080_dd0b95424a_z.jpg", "id": 437205}, {"license": 4, "file_name": "000000062554.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000062554.jpg", "height": 428, "width": 640, "date_captured": "2013-11-19 22:54:52", "flickr_url": "http://farm6.staticflickr.com/5021/5560942229_40538af5b5_z.jpg", "id": 62554}, {"license": 5, "file_name": "000000434204.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000434204.jpg", "height": 333, "width": 500, "date_captured": "2013-11-19 23:16:06", "flickr_url": "http://farm4.staticflickr.com/3053/2992299514_73c1a1fee5_z.jpg", "id": 434204}, {"license": 1, "file_name": "000000138954.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000138954.jpg", "height": 612, "width": 612, "date_captured": "2013-11-19 23:51:29", "flickr_url": "http://farm6.staticflickr.com/5334/8850051362_3528168c06_z.jpg", "id": 138954}, {"license": 4, "file_name": "000000289417.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000289417.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 00:16:03", "flickr_url": "http://farm5.staticflickr.com/4057/4431669174_e67a2421a5_z.jpg", "id": 289417}, {"license": 1, "file_name": "000000000776.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000000776.jpg", "height": 640, "width": 428, "date_captured": "2013-11-20 01:00:50", "flickr_url": "http://farm2.staticflickr.com/1399/1488578517_9c6bfc45de_z.jpg", "id": 776}, {"license": 2, "file_name": "000000470121.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000470121.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 01:53:19", "flickr_url": "http://farm9.staticflickr.com/8082/8331101389_7ceb46f0bc_z.jpg", "id": 470121}, {"license": 1, "file_name": "000000309467.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000309467.jpg", "height": 326, "width": 640, "date_captured": "2013-11-20 04:15:42", "flickr_url": "http://farm3.staticflickr.com/2757/4379633609_6d8c810ecc_z.jpg", "id": 309467}, {"license": 5, "file_name": "000000473121.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000473121.jpg", "height": 332, "width": 500, "date_captured": "2013-11-20 05:09:57", "flickr_url": "http://farm3.staticflickr.com/2744/4279149681_0880b820d0_z.jpg", "id": 473121}, {"license": 3, "file_name": "000000327605.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000327605.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 05:22:06", "flickr_url": "http://farm5.staticflickr.com/4057/4251103669_27c4e7a2be_z.jpg", "id": 327605}, {"license": 4, "file_name": "000000451084.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000451084.jpg", "height": 640, "width": 426, "date_captured": "2013-11-20 06:43:14", "flickr_url": "http://farm3.staticflickr.com/2524/4043836250_19c91a8557_z.jpg", "id": 451084}, {"license": 5, "file_name": "000000022479.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000022479.jpg", "height": 605, "width": 640, "date_captured": "2013-11-20 07:08:50", "flickr_url": "http://farm4.staticflickr.com/3447/3880630600_2c837dbf23_z.jpg", "id": 22479}, {"license": 3, "file_name": "000000243148.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000243148.jpg", "height": 360, "width": 640, "date_captured": "2013-11-20 07:13:31", "flickr_url": "http://farm4.staticflickr.com/3607/3401441595_3842e18913_z.jpg", "id": 243148}, {"license": 6, "file_name": "000000249786.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000249786.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 07:21:00", "flickr_url": "http://farm4.staticflickr.com/3585/3387361946_b4a7d8fabb_z.jpg", "id": 249786}, {"license": 1, "file_name": "000000581062.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000581062.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 09:12:04", "flickr_url": "http://farm4.staticflickr.com/3582/3328164554_6765a03a6a_z.jpg", "id": 581062}, {"license": 4, "file_name": "000000185950.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000185950.jpg", "height": 500, "width": 337, "date_captured": "2013-11-20 11:16:52", "flickr_url": "http://farm4.staticflickr.com/3121/2890964329_8825960fcb_z.jpg", "id": 185950}, {"license": 1, "file_name": "000000044195.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000044195.jpg", "height": 500, "width": 361, "date_captured": "2013-11-20 14:11:06", "flickr_url": "http://farm4.staticflickr.com/3020/2951496008_359d01cff5_z.jpg", "id": 44195}, {"license": 1, "file_name": "000000499109.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000499109.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 14:15:09", "flickr_url": "http://farm9.staticflickr.com/8541/8620754357_31e69b6391_z.jpg", "id": 499109}, {"license": 3, "file_name": "000000478136.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000478136.jpg", "height": 640, "width": 533, "date_captured": "2013-11-20 15:24:45", "flickr_url": "http://farm3.staticflickr.com/2568/3847471121_0d8973a35a_z.jpg", "id": 478136}, {"license": 1, "file_name": "000000451150.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000451150.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 17:08:15", "flickr_url": "http://farm4.staticflickr.com/3175/2824630893_36b460d634_z.jpg", "id": 451150}, {"license": 1, "file_name": "000000148957.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000148957.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 17:08:24", "flickr_url": "http://farm4.staticflickr.com/3211/2824609331_8707d7ca92_z.jpg", "id": 148957}, {"license": 5, "file_name": "000000251119.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000251119.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 19:21:42", "flickr_url": "http://farm4.staticflickr.com/3156/2636493252_56a7e11954_z.jpg", "id": 251119}, {"license": 2, "file_name": "000000107554.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000107554.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 19:22:12", "flickr_url": "http://farm4.staticflickr.com/3104/2703021395_20cd5899a4_z.jpg", "id": 107554}, {"license": 1, "file_name": "000000449661.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000449661.jpg", "height": 169, "width": 640, "date_captured": "2013-11-20 21:08:05", "flickr_url": "http://farm1.staticflickr.com/34/88605082_e311cd5880_z.jpg", "id": 449661}, {"license": 1, "file_name": "000000364126.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000364126.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 21:11:36", "flickr_url": "http://farm9.staticflickr.com/8425/7807678432_ac5daefe94_z.jpg", "id": 364126}, {"license": 1, "file_name": "000000384651.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000384651.jpg", "height": 436, "width": 640, "date_captured": "2013-11-20 23:03:21", "flickr_url": "http://farm6.staticflickr.com/5087/5349737041_c978a9b777_z.jpg", "id": 384651}, {"license": 5, "file_name": "000000354307.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000354307.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 23:10:03", "flickr_url": "http://farm4.staticflickr.com/3108/3156833026_a64121450d_z.jpg", "id": 354307}, {"license": 2, "file_name": "000000483531.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000483531.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 23:34:35", "flickr_url": "http://farm8.staticflickr.com/7146/6802773591_18a10b1268_z.jpg", "id": 483531}, {"license": 1, "file_name": "000000170191.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000170191.jpg", "height": 531, "width": 640, "date_captured": "2013-11-20 23:46:05", "flickr_url": "http://farm4.staticflickr.com/3127/2769804970_7ca76c314f_z.jpg", "id": 170191}, {"license": 1, "file_name": "000000201426.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000201426.jpg", "height": 490, "width": 640, "date_captured": "2013-11-21 00:55:40", "flickr_url": "http://farm4.staticflickr.com/3615/3393021340_c4ec0a46a6_z.jpg", "id": 201426}, {"license": 3, "file_name": "000000179487.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000179487.jpg", "height": 640, "width": 512, "date_captured": "2013-11-21 04:24:47", "flickr_url": "http://farm4.staticflickr.com/3010/5872874151_f6b5e112d7_z.jpg", "id": 179487}, {"license": 3, "file_name": "000000445999.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000445999.jpg", "height": 640, "width": 411, "date_captured": "2013-11-21 20:13:56", "flickr_url": "http://farm5.staticflickr.com/4040/4584442075_e86cc8b014_z.jpg", "id": 445999}, {"license": 1, "file_name": "000000091500.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000091500.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 20:44:50", "flickr_url": "http://farm3.staticflickr.com/2775/4518345389_57a4fecbb9_z.jpg", "id": 91500}, {"license": 3, "file_name": "000000405970.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000405970.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 21:34:48", "flickr_url": "http://farm9.staticflickr.com/8225/8583710202_914e63fdbf_z.jpg", "id": 405970}, {"license": 3, "file_name": "000000290771.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000290771.jpg", "height": 477, "width": 640, "date_captured": "2013-11-21 23:47:47", "flickr_url": "http://farm2.staticflickr.com/1227/5157186732_630d184a61_z.jpg", "id": 290771}, {"license": 5, "file_name": "000000426836.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000426836.jpg", "height": 640, "width": 640, "date_captured": "2013-11-22 14:53:00", "flickr_url": "http://farm9.staticflickr.com/8034/7928260964_a7a5ea38c7_z.jpg", "id": 426836}, {"license": 1, "file_name": "000000557916.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000557916.jpg", "height": 426, "width": 640, "date_captured": "2013-11-22 19:14:41", "flickr_url": "http://farm1.staticflickr.com/54/149390532_8e64360d3e_z.jpg", "id": 557916}, {"license": 1, "file_name": "000000099024.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000099024.jpg", "height": 482, "width": 640, "date_captured": "2013-11-22 20:26:00", "flickr_url": "http://farm1.staticflickr.com/20/68438689_9a434839ee_z.jpg", "id": 99024}, {"license": 1, "file_name": "000000305309.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000305309.jpg", "height": 406, "width": 640, "date_captured": "2013-11-22 21:55:45", "flickr_url": "http://farm6.staticflickr.com/5170/5363395781_473321f259_z.jpg", "id": 305309}, {"license": 1, "file_name": "000000311928.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000311928.jpg", "height": 398, "width": 640, "date_captured": "2013-11-22 22:04:07", "flickr_url": "http://farm9.staticflickr.com/8219/8275003109_187cc7a482_z.jpg", "id": 311928}, {"license": 1, "file_name": "000000384949.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000384949.jpg", "height": 457, "width": 640, "date_captured": "2013-11-22 22:14:46", "flickr_url": "http://farm7.staticflickr.com/6148/5935725528_c1deebc5d7_z.jpg", "id": 384949}, {"license": 1, "file_name": "000000196141.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000196141.jpg", "height": 429, "width": 640, "date_captured": "2013-11-22 22:37:15", "flickr_url": "http://farm4.staticflickr.com/3310/3611902235_57d4ae496d_z.jpg", "id": 196141}, {"license": 4, "file_name": "000000136915.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000136915.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 22:41:48", "flickr_url": "http://farm4.staticflickr.com/3467/3402056386_bac84cf09b_z.jpg", "id": 136915}, {"license": 6, "file_name": "000000533816.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000533816.jpg", "height": 426, "width": 640, "date_captured": "2013-11-23 03:00:05", "flickr_url": "http://farm4.staticflickr.com/3518/3874061395_ac351cd0e4_z.jpg", "id": 533816}, {"license": 5, "file_name": "000000522889.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000522889.jpg", "height": 640, "width": 424, "date_captured": "2013-11-23 03:38:03", "flickr_url": "http://farm4.staticflickr.com/3259/3230642743_2c8115bae7_z.jpg", "id": 522889}, {"license": 1, "file_name": "000000548246.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000548246.jpg", "height": 428, "width": 640, "date_captured": "2013-11-23 03:52:52", "flickr_url": "http://farm4.staticflickr.com/3115/2905881071_5b16058d7b_z.jpg", "id": 548246}, {"license": 3, "file_name": "000000037988.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000037988.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 03:55:46", "flickr_url": "http://farm4.staticflickr.com/3046/2826546452_328598b74c_z.jpg", "id": 37988}, {"license": 5, "file_name": "000000555009.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000555009.jpg", "height": 375, "width": 500, "date_captured": "2013-11-23 20:14:23", "flickr_url": "http://farm1.staticflickr.com/22/30339463_78c837ba54_z.jpg", "id": 555009}, {"license": 5, "file_name": "000000418961.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000418961.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 02:02:16", "flickr_url": "http://farm3.staticflickr.com/2313/5747810152_504480afe6_z.jpg", "id": 418961}, {"license": 4, "file_name": "000000325838.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000325838.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 04:06:08", "flickr_url": "http://farm3.staticflickr.com/2247/3539996132_28696cbbf5_z.jpg", "id": 325838}, {"license": 4, "file_name": "000000527427.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000527427.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 04:22:30", "flickr_url": "http://farm4.staticflickr.com/3564/3470619108_19b4bd67d1_z.jpg", "id": 527427}, {"license": 1, "file_name": "000000074256.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000074256.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 09:22:28", "flickr_url": "http://farm1.staticflickr.com/206/453880431_bfd1082e3f_z.jpg", "id": 74256}, {"license": 1, "file_name": "000000154644.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000154644.jpg", "height": 500, "width": 500, "date_captured": "2013-11-24 09:45:34", "flickr_url": "http://farm1.staticflickr.com/9/12229821_1b6d7a2151_z.jpg", "id": 154644}, {"license": 1, "file_name": "000000017714.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000017714.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 14:14:00", "flickr_url": "http://farm7.staticflickr.com/6133/5943387737_ffd52a7f27_z.jpg", "id": 17714}, {"license": 1, "file_name": "000000474039.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000474039.jpg", "height": 401, "width": 640, "date_captured": "2013-11-24 14:55:15", "flickr_url": "http://farm9.staticflickr.com/8079/8276071694_e522b8a314_z.jpg", "id": 474039}, {"license": 1, "file_name": "000000153782.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000153782.jpg", "height": 640, "width": 416, "date_captured": "2013-11-24 16:25:40", "flickr_url": "http://farm6.staticflickr.com/5075/7066000485_798aa59567_z.jpg", "id": 153782}, {"license": 1, "file_name": "000000021465.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000021465.jpg", "height": 281, "width": 500, "date_captured": "2013-11-24 20:06:38", "flickr_url": "http://farm1.staticflickr.com/68/172637410_5cbb86bab4_z.jpg", "id": 21465}, {"license": 1, "file_name": "000000084664.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000084664.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 23:47:40", "flickr_url": "http://farm9.staticflickr.com/8104/8641484887_41d3c201cf_z.jpg", "id": 84664}, {"license": 2, "file_name": "000000286908.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000286908.jpg", "height": 640, "width": 640, "date_captured": "2013-11-25 08:10:45", "flickr_url": "http://farm6.staticflickr.com/5489/9626805519_f432b6471d_z.jpg", "id": 286908}, {"license": 2, "file_name": "000000381587.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000381587.jpg", "height": 640, "width": 428, "date_captured": "2013-11-25 08:36:12", "flickr_url": "http://farm4.staticflickr.com/3754/9267426009_d3ed244453_z.jpg", "id": 381587}, {"license": 4, "file_name": "000000461751.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000461751.jpg", "height": 569, "width": 640, "date_captured": "2013-11-14 14:36:56", "flickr_url": "http://farm6.staticflickr.com/5035/7145171189_ac4034c5f3_z.jpg", "id": 461751}, {"license": 3, "file_name": "000000308799.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000308799.jpg", "height": 500, "width": 375, "date_captured": "2013-11-14 18:12:13", "flickr_url": "http://farm2.staticflickr.com/1327/1357843166_f0bcd6477d_z.jpg", "id": 308799}, {"license": 3, "file_name": "000000466986.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000466986.jpg", "height": 478, "width": 640, "date_captured": "2013-11-14 18:26:39", "flickr_url": "http://farm3.staticflickr.com/2892/9026265454_0e0d98d708_z.jpg", "id": 466986}, {"license": 1, "file_name": "000000239627.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000239627.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 22:56:38", "flickr_url": "http://farm2.staticflickr.com/1414/1295457386_450c53f4f2_z.jpg", "id": 239627}, {"license": 4, "file_name": "000000229358.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000229358.jpg", "height": 423, "width": 640, "date_captured": "2013-11-15 00:39:04", "flickr_url": "http://farm4.staticflickr.com/3300/3512771461_b79b84be7d_z.jpg", "id": 229358}, {"license": 1, "file_name": "000000061471.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000061471.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 01:18:25", "flickr_url": "http://farm1.staticflickr.com/11/12252917_d0098232e4_z.jpg", "id": 61471}, {"license": 1, "file_name": "000000170893.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000170893.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 01:18:27", "flickr_url": "http://farm1.staticflickr.com/8/12252881_fda2f8c3e8_z.jpg", "id": 170893}, {"license": 1, "file_name": "000000465179.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000465179.jpg", "height": 500, "width": 374, "date_captured": "2013-11-15 03:04:23", "flickr_url": "http://farm1.staticflickr.com/6/10974314_c9a1f7300f_z.jpg", "id": 465179}, {"license": 2, "file_name": "000000466085.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000466085.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 04:08:41", "flickr_url": "http://farm7.staticflickr.com/6024/6004629983_81c6cfcffb_z.jpg", "id": 466085}, {"license": 7, "file_name": "000000567197.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000567197.jpg", "height": 407, "width": 500, "date_captured": "2013-11-15 05:52:31", "flickr_url": "http://farm4.staticflickr.com/3044/3110606120_36aa6bdc13_z.jpg", "id": 567197}, {"license": 4, "file_name": "000000498286.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000498286.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 07:38:08", "flickr_url": "http://farm7.staticflickr.com/6195/6048065934_bfaf1be964_z.jpg", "id": 498286}, {"license": 3, "file_name": "000000437392.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000437392.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 12:11:13", "flickr_url": "http://farm3.staticflickr.com/2749/4405063527_5d73198e90_z.jpg", "id": 437392}, {"license": 4, "file_name": "000000153217.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000153217.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 12:28:23", "flickr_url": "http://farm1.staticflickr.com/32/36546844_5d6e8e5c37_z.jpg", "id": 153217}, {"license": 4, "file_name": "000000206487.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000206487.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 01:34:49", "flickr_url": "http://farm9.staticflickr.com/8010/7686978996_27b7fdfdbf_z.jpg", "id": 206487}, {"license": 3, "file_name": "000000565012.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000565012.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 13:08:37", "flickr_url": "http://farm6.staticflickr.com/5146/5575833171_8116b23c1c_z.jpg", "id": 565012}, {"license": 5, "file_name": "000000563603.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000563603.jpg", "height": 640, "width": 459, "date_captured": "2013-11-16 15:20:59", "flickr_url": "http://farm8.staticflickr.com/7172/6761034531_a275debefa_z.jpg", "id": 563603}, {"license": 1, "file_name": "000000394611.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000394611.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 15:47:14", "flickr_url": "http://farm9.staticflickr.com/8008/7573301032_530d797b9b_z.jpg", "id": 394611}, {"license": 4, "file_name": "000000211069.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000211069.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 16:59:42", "flickr_url": "http://farm9.staticflickr.com/8200/8210566586_87f10cd626_z.jpg", "id": 211069}, {"license": 4, "file_name": "000000455085.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000455085.jpg", "height": 640, "width": 427, "date_captured": "2013-11-16 18:12:50", "flickr_url": "http://farm9.staticflickr.com/8328/8376341185_a823707710_z.jpg", "id": 455085}, {"license": 1, "file_name": "000000282046.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000282046.jpg", "height": 298, "width": 500, "date_captured": "2013-11-16 18:17:23", "flickr_url": "http://farm3.staticflickr.com/2425/3968042787_06a03b052f_z.jpg", "id": 282046}, {"license": 4, "file_name": "000000542856.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000542856.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 18:48:32", "flickr_url": "http://farm9.staticflickr.com/8285/7826926496_3aa9e9d112_z.jpg", "id": 542856}, {"license": 4, "file_name": "000000012062.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000012062.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 20:16:30", "flickr_url": "http://farm4.staticflickr.com/3775/9086068242_2064357878_z.jpg", "id": 12062}, {"license": 3, "file_name": "000000360325.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000360325.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 21:24:11", "flickr_url": "http://farm9.staticflickr.com/8012/7569293604_7f0c3a3dbd_z.jpg", "id": 360325}, {"license": 6, "file_name": "000000427500.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000427500.jpg", "height": 640, "width": 428, "date_captured": "2013-11-16 22:51:51", "flickr_url": "http://farm4.staticflickr.com/3235/3121958682_0dd59eaa00_z.jpg", "id": 427500}, {"license": 4, "file_name": "000000015517.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000015517.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 23:41:40", "flickr_url": "http://farm9.staticflickr.com/8184/8407007011_9456edeb6d_z.jpg", "id": 15517}, {"license": 2, "file_name": "000000375763.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000375763.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 23:56:10", "flickr_url": "http://farm6.staticflickr.com/5015/5481649653_ca1c8e2a58_z.jpg", "id": 375763}, {"license": 4, "file_name": "000000213605.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000213605.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 00:19:29", "flickr_url": "http://farm9.staticflickr.com/8047/8120656306_9e6dcf4184_z.jpg", "id": 213605}, {"license": 4, "file_name": "000000270705.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000270705.jpg", "height": 640, "width": 475, "date_captured": "2013-11-17 00:41:42", "flickr_url": "http://farm7.staticflickr.com/6024/6009338149_c4084ec013_z.jpg", "id": 270705}, {"license": 2, "file_name": "000000544811.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000544811.jpg", "height": 429, "width": 640, "date_captured": "2013-11-17 01:43:37", "flickr_url": "http://farm4.staticflickr.com/3442/3204393529_07afb85e63_z.jpg", "id": 544811}, {"license": 1, "file_name": "000000436551.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000436551.jpg", "height": 438, "width": 640, "date_captured": "2013-11-17 05:19:02", "flickr_url": "http://farm4.staticflickr.com/3771/9544513734_d12d90ee30_z.jpg", "id": 436551}, {"license": 4, "file_name": "000000389532.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000389532.jpg", "height": 421, "width": 640, "date_captured": "2013-11-17 05:30:34", "flickr_url": "http://farm8.staticflickr.com/7288/9496990496_470806b95e_z.jpg", "id": 389532}, {"license": 2, "file_name": "000000039670.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000039670.jpg", "height": 640, "width": 640, "date_captured": "2013-11-17 05:31:39", "flickr_url": "http://farm6.staticflickr.com/5126/5356882985_a7f77c2a0d_z.jpg", "id": 39670}, {"license": 3, "file_name": "000000429718.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000429718.jpg", "height": 640, "width": 640, "date_captured": "2013-11-17 06:24:13", "flickr_url": "http://farm3.staticflickr.com/2819/10076065884_1f83216f99_z.jpg", "id": 429718}, {"license": 1, "file_name": "000000563604.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000563604.jpg", "height": 479, "width": 640, "date_captured": "2013-11-17 07:35:55", "flickr_url": "http://farm1.staticflickr.com/3/4679483_af7aba2bbe_z.jpg", "id": 563604}, {"license": 3, "file_name": "000000162366.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000162366.jpg", "height": 451, "width": 640, "date_captured": "2013-11-17 10:23:27", "flickr_url": "http://farm4.staticflickr.com/3379/3429804386_8b50a986aa_z.jpg", "id": 162366}, {"license": 4, "file_name": "000000496722.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000496722.jpg", "height": 360, "width": 640, "date_captured": "2013-11-17 10:39:05", "flickr_url": "http://farm2.staticflickr.com/1106/3172117736_32ba3d5fc1_z.jpg", "id": 496722}, {"license": 4, "file_name": "000000124636.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000124636.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 19:35:16", "flickr_url": "http://farm7.staticflickr.com/6179/6186207005_4c1eca67e8_z.jpg", "id": 124636}, {"license": 1, "file_name": "000000551815.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000551815.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 19:56:34", "flickr_url": "http://farm3.staticflickr.com/2151/2126259110_79df1cde52_z.jpg", "id": 551815}, {"license": 7, "file_name": "000000078565.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000078565.jpg", "height": 499, "width": 640, "date_captured": "2013-11-17 22:00:34", "flickr_url": "http://farm2.staticflickr.com/1299/4603303064_8d415a5200_z.jpg", "id": 78565}, {"license": 3, "file_name": "000000116439.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000116439.jpg", "height": 640, "width": 429, "date_captured": "2013-11-18 00:30:39", "flickr_url": "http://farm3.staticflickr.com/2474/3735403050_b4ebfff4e4_z.jpg", "id": 116439}, {"license": 1, "file_name": "000000492992.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000492992.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 00:35:53", "flickr_url": "http://farm6.staticflickr.com/5088/5238736491_4d4d5bc00e_z.jpg", "id": 492992}, {"license": 5, "file_name": "000000107851.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000107851.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 01:21:27", "flickr_url": "http://farm2.staticflickr.com/1233/5161159852_98acea51b5_z.jpg", "id": 107851}, {"license": 7, "file_name": "000000274219.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000274219.jpg", "height": 640, "width": 464, "date_captured": "2013-11-18 01:32:18", "flickr_url": "http://farm9.staticflickr.com/8471/8143525766_b2ccbd2728_z.jpg", "id": 274219}, {"license": 2, "file_name": "000000105923.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000105923.jpg", "height": 468, "width": 640, "date_captured": "2013-11-18 01:39:42", "flickr_url": "http://farm5.staticflickr.com/4072/5140139003_91d353abde_z.jpg", "id": 105923}, {"license": 6, "file_name": "000000325031.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000325031.jpg", "height": 608, "width": 640, "date_captured": "2013-11-18 01:58:29", "flickr_url": "http://farm5.staticflickr.com/4044/4669803057_38a4f451a0_z.jpg", "id": 325031}, {"license": 1, "file_name": "000000166664.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000166664.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 02:07:35", "flickr_url": "http://farm8.staticflickr.com/7114/7548238532_a0ed74f2dd_z.jpg", "id": 166664}, {"license": 4, "file_name": "000000166642.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000166642.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 03:21:03", "flickr_url": "http://farm8.staticflickr.com/7203/6977687239_3a57ee90d8_z.jpg", "id": 166642}, {"license": 6, "file_name": "000000143961.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000143961.jpg", "height": 356, "width": 640, "date_captured": "2013-11-18 03:46:16", "flickr_url": "http://farm6.staticflickr.com/5497/9217600020_2d355a9b85_z.jpg", "id": 143961}, {"license": 5, "file_name": "000000304545.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000304545.jpg", "height": 522, "width": 640, "date_captured": "2013-11-18 07:26:14", "flickr_url": "http://farm3.staticflickr.com/2505/4156817608_8ba165ecc2_z.jpg", "id": 304545}, {"license": 6, "file_name": "000000212573.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000212573.jpg", "height": 559, "width": 640, "date_captured": "2013-11-18 09:06:04", "flickr_url": "http://farm9.staticflickr.com/8247/8620417620_f8a3128c76_z.jpg", "id": 212573}, {"license": 1, "file_name": "000000225670.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000225670.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 10:07:12", "flickr_url": "http://farm3.staticflickr.com/2569/3853390404_96f42706cb_z.jpg", "id": 225670}, {"license": 1, "file_name": "000000575357.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000575357.jpg", "height": 453, "width": 640, "date_captured": "2013-11-18 10:33:07", "flickr_url": "http://farm3.staticflickr.com/2436/4090181438_da738e2267_z.jpg", "id": 575357}, {"license": 1, "file_name": "000000186422.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000186422.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 10:52:09", "flickr_url": "http://farm4.staticflickr.com/3523/3976430294_7664ccce39_z.jpg", "id": 186422}, {"license": 4, "file_name": "000000319369.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000319369.jpg", "height": 432, "width": 640, "date_captured": "2013-11-18 11:13:28", "flickr_url": "http://farm6.staticflickr.com/5193/5802453698_0cc91183ef_z.jpg", "id": 319369}, {"license": 2, "file_name": "000000026941.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000026941.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 11:47:48", "flickr_url": "http://farm7.staticflickr.com/6042/6286926102_6797cb1808_z.jpg", "id": 26941}, {"license": 1, "file_name": "000000252716.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000252716.jpg", "height": 640, "width": 426, "date_captured": "2013-11-18 13:10:54", "flickr_url": "http://farm1.staticflickr.com/198/458132093_ebaf12f220_z.jpg", "id": 252716}, {"license": 2, "file_name": "000000064868.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000064868.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 15:32:55", "flickr_url": "http://farm1.staticflickr.com/219/509596297_7de5805edf_z.jpg", "id": 64868}, {"license": 3, "file_name": "000000205324.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000205324.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 16:30:28", "flickr_url": "http://farm4.staticflickr.com/3588/3395937601_0f802f6233_z.jpg", "id": 205324}, {"license": 4, "file_name": "000000447313.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000447313.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 17:25:56", "flickr_url": "http://farm9.staticflickr.com/8198/8209481947_d29bb75607_z.jpg", "id": 447313}, {"license": 5, "file_name": "000000172977.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000172977.jpg", "height": 486, "width": 640, "date_captured": "2013-11-18 18:13:05", "flickr_url": "http://farm3.staticflickr.com/2751/5719822970_84357ed931_z.jpg", "id": 172977}, {"license": 7, "file_name": "000000560880.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000560880.jpg", "height": 508, "width": 640, "date_captured": "2013-11-18 19:58:41", "flickr_url": "http://farm4.staticflickr.com/3544/4603281590_fbf40d4e92_z.jpg", "id": 560880}, {"license": 4, "file_name": "000000449406.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000449406.jpg", "height": 333, "width": 500, "date_captured": "2013-11-18 20:25:26", "flickr_url": "http://farm4.staticflickr.com/3257/2803472112_673f080913_z.jpg", "id": 449406}, {"license": 3, "file_name": "000000491613.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000491613.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 21:25:36", "flickr_url": "http://farm2.staticflickr.com/1303/1352737536_defcdc9311_z.jpg", "id": 491613}, {"license": 1, "file_name": "000000048555.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000048555.jpg", "height": 465, "width": 640, "date_captured": "2013-11-18 21:47:36", "flickr_url": "http://farm9.staticflickr.com/8235/8576340280_febe979e83_z.jpg", "id": 48555}, {"license": 4, "file_name": "000000061584.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000061584.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 22:54:28", "flickr_url": "http://farm3.staticflickr.com/2101/2493497923_9d43331a97_z.jpg", "id": 61584}, {"license": 3, "file_name": "000000244099.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000244099.jpg", "height": 428, "width": 640, "date_captured": "2013-11-19 01:14:21", "flickr_url": "http://farm6.staticflickr.com/5345/9349041750_746e9abf1a_z.jpg", "id": 244099}, {"license": 3, "file_name": "000000460682.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000460682.jpg", "height": 189, "width": 640, "date_captured": "2013-11-19 02:20:37", "flickr_url": "http://farm6.staticflickr.com/5325/8754617023_95cd07be63_z.jpg", "id": 460682}, {"license": 4, "file_name": "000000481159.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000481159.jpg", "height": 463, "width": 640, "date_captured": "2013-11-19 03:33:32", "flickr_url": "http://farm9.staticflickr.com/8330/8417865009_89a5b48bcb_z.jpg", "id": 481159}, {"license": 5, "file_name": "000000028809.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000028809.jpg", "height": 500, "width": 498, "date_captured": "2013-11-19 18:58:50", "flickr_url": "http://farm5.staticflickr.com/4026/4444464874_e0a59ec935_z.jpg", "id": 28809}, {"license": 1, "file_name": "000000050679.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000050679.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 19:18:50", "flickr_url": "http://farm3.staticflickr.com/2389/2249195647_6c28cd13a7_z.jpg", "id": 50679}, {"license": 1, "file_name": "000000010764.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000010764.jpg", "height": 424, "width": 640, "date_captured": "2013-11-19 19:23:45", "flickr_url": "http://farm3.staticflickr.com/2714/5810596234_b5090d75f6_z.jpg", "id": 10764}, {"license": 3, "file_name": "000000537827.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000537827.jpg", "height": 400, "width": 640, "date_captured": "2013-11-19 19:55:16", "flickr_url": "http://farm3.staticflickr.com/2740/4019775090_ba7737fc40_z.jpg", "id": 537827}, {"license": 4, "file_name": "000000329827.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000329827.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 20:27:13", "flickr_url": "http://farm9.staticflickr.com/8464/8392421738_8a9e29a60c_z.jpg", "id": 329827}, {"license": 2, "file_name": "000000161820.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000161820.jpg", "height": 640, "width": 428, "date_captured": "2013-11-19 20:51:04", "flickr_url": "http://farm6.staticflickr.com/5267/5729252733_cdf48519f8_z.jpg", "id": 161820}, {"license": 2, "file_name": "000000116362.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000116362.jpg", "height": 612, "width": 612, "date_captured": "2013-11-19 22:18:28", "flickr_url": "http://farm4.staticflickr.com/3265/5839036384_1ecac4f59a_z.jpg", "id": 116362}, {"license": 5, "file_name": "000000500270.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000500270.jpg", "height": 425, "width": 640, "date_captured": "2013-11-19 23:29:27", "flickr_url": "http://farm8.staticflickr.com/7392/9118123988_2c870d6301_z.jpg", "id": 500270}, {"license": 1, "file_name": "000000308165.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000308165.jpg", "height": 640, "width": 425, "date_captured": "2013-11-19 23:37:28", "flickr_url": "http://farm4.staticflickr.com/3413/3514355919_42196ffd42_z.jpg", "id": 308165}, {"license": 1, "file_name": "000000125245.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000125245.jpg", "height": 331, "width": 500, "date_captured": "2013-11-19 23:43:47", "flickr_url": "http://farm4.staticflickr.com/3046/2595923854_098ba207e4_z.jpg", "id": 125245}, {"license": 4, "file_name": "000000544444.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000544444.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 23:44:49", "flickr_url": "http://farm4.staticflickr.com/3328/4631838153_4c3e8a0dbd_z.jpg", "id": 544444}, {"license": 4, "file_name": "000000378244.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000378244.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 23:44:52", "flickr_url": "http://farm5.staticflickr.com/4049/4632437600_9d863c8a11_z.jpg", "id": 378244}, {"license": 4, "file_name": "000000090956.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000090956.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 00:06:34", "flickr_url": "http://farm3.staticflickr.com/2716/4457068478_eb3cb0952c_z.jpg", "id": 90956}, {"license": 1, "file_name": "000000313562.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000313562.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 02:27:17", "flickr_url": "http://farm3.staticflickr.com/2188/1935214037_367d16a3e2_z.jpg", "id": 313562}, {"license": 1, "file_name": "000000258388.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000258388.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 04:38:38", "flickr_url": "http://farm6.staticflickr.com/5121/5253453194_4ebb2ee78e_z.jpg", "id": 258388}, {"license": 3, "file_name": "000000273711.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000273711.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 04:49:24", "flickr_url": "http://farm2.staticflickr.com/1402/4727128684_a2dcfee60f_z.jpg", "id": 273711}, {"license": 4, "file_name": "000000358195.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000358195.jpg", "height": 640, "width": 483, "date_captured": "2013-11-20 06:31:42", "flickr_url": "http://farm3.staticflickr.com/2749/4222767499_919d266f71_z.jpg", "id": 358195}, {"license": 5, "file_name": "000000003553.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000003553.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 07:19:51", "flickr_url": "http://farm4.staticflickr.com/3433/3863384254_02e869d699_z.jpg", "id": 3553}, {"license": 5, "file_name": "000000253819.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000253819.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 09:07:43", "flickr_url": "http://farm4.staticflickr.com/3302/3335797090_7e4fd195a5_z.jpg", "id": 253819}, {"license": 4, "file_name": "000000278705.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000278705.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 11:20:36", "flickr_url": "http://farm4.staticflickr.com/3282/2875114693_2caf3d7481_z.jpg", "id": 278705}, {"license": 1, "file_name": "000000187990.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000187990.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 12:20:56", "flickr_url": "http://farm4.staticflickr.com/3234/2654343097_e020f0d863_z.jpg", "id": 187990}, {"license": 4, "file_name": "000000051938.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000051938.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 12:22:33", "flickr_url": "http://farm8.staticflickr.com/7039/6856285019_2ece41917e_z.jpg", "id": 51938}, {"license": 2, "file_name": "000000188296.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000188296.jpg", "height": 609, "width": 640, "date_captured": "2013-11-20 17:37:27", "flickr_url": "http://farm1.staticflickr.com/90/276732942_6351f0a8cf_z.jpg", "id": 188296}, {"license": 3, "file_name": "000000045090.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000045090.jpg", "height": 259, "width": 500, "date_captured": "2013-11-20 19:29:27", "flickr_url": "http://farm3.staticflickr.com/2283/2353429019_e96f46a1ab_z.jpg", "id": 45090}, {"license": 1, "file_name": "000000396729.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000396729.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 20:56:35", "flickr_url": "http://farm4.staticflickr.com/3192/3284367150_f044bc4d5d_z.jpg", "id": 396729}, {"license": 3, "file_name": "000000347174.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000347174.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 20:59:08", "flickr_url": "http://farm9.staticflickr.com/8344/8200201818_611f7d9822_z.jpg", "id": 347174}, {"license": 3, "file_name": "000000341196.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000341196.jpg", "height": 451, "width": 640, "date_captured": "2013-11-20 22:01:01", "flickr_url": "http://farm8.staticflickr.com/7203/6875404039_13a6becb60_z.jpg", "id": 341196}, {"license": 3, "file_name": "000000439525.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000439525.jpg", "height": 640, "width": 453, "date_captured": "2013-11-20 23:17:14", "flickr_url": "http://farm8.staticflickr.com/7127/7461110814_5dd1263b67_z.jpg", "id": 439525}, {"license": 1, "file_name": "000000329455.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000329455.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 00:02:12", "flickr_url": "http://farm3.staticflickr.com/2611/3931127044_f3d797dd10_z.jpg", "id": 329455}, {"license": 3, "file_name": "000000302990.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000302990.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 00:33:36", "flickr_url": "http://farm5.staticflickr.com/4153/5050240459_9ef3d5422b_z.jpg", "id": 302990}, {"license": 1, "file_name": "000000262587.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000262587.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 00:40:03", "flickr_url": "http://farm5.staticflickr.com/4149/5060871740_8992f4b47b_z.jpg", "id": 262587}, {"license": 5, "file_name": "000000117719.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000117719.jpg", "height": 425, "width": 640, "date_captured": "2013-11-21 02:08:31", "flickr_url": "http://farm4.staticflickr.com/3395/3499231904_8b958aa5bc_z.jpg", "id": 117719}, {"license": 4, "file_name": "000000127476.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000127476.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 02:15:38", "flickr_url": "http://farm8.staticflickr.com/7109/7775534850_4337211708_z.jpg", "id": 127476}, {"license": 1, "file_name": "000000499313.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000499313.jpg", "height": 478, "width": 640, "date_captured": "2013-11-21 03:24:38", "flickr_url": "http://farm7.staticflickr.com/6174/6158664257_24f25ab9ab_z.jpg", "id": 499313}, {"license": 5, "file_name": "000000309678.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000309678.jpg", "height": 411, "width": 640, "date_captured": "2013-11-21 04:21:10", "flickr_url": "http://farm6.staticflickr.com/5186/5595616324_1e156fab6a_z.jpg", "id": 309678}, {"license": 1, "file_name": "000000113720.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000113720.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 04:50:05", "flickr_url": "http://farm6.staticflickr.com/5050/5229783977_9c8cc82bc4_z.jpg", "id": 113720}, {"license": 1, "file_name": "000000107339.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000107339.jpg", "height": 180, "width": 240, "date_captured": "2013-11-21 21:29:57", "flickr_url": "http://farm4.staticflickr.com/3166/3079990670_62dd75501b_z.jpg", "id": 107339}, {"license": 3, "file_name": "000000468501.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000468501.jpg", "height": 375, "width": 500, "date_captured": "2013-11-21 22:55:28", "flickr_url": "http://farm2.staticflickr.com/1126/1431706027_d4beec023f_z.jpg", "id": 468501}, {"license": 4, "file_name": "000000511760.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000511760.jpg", "height": 640, "width": 296, "date_captured": "2013-11-22 08:59:09", "flickr_url": "http://farm4.staticflickr.com/3642/3414616917_4893c0b421_z.jpg", "id": 511760}, {"license": 3, "file_name": "000000361730.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000361730.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 16:54:45", "flickr_url": "http://farm4.staticflickr.com/3527/3767237887_e75cd59c77_z.jpg", "id": 361730}, {"license": 7, "file_name": "000000427077.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000427077.jpg", "height": 500, "width": 344, "date_captured": "2013-11-22 21:01:33", "flickr_url": "http://farm3.staticflickr.com/2718/4050450705_9a047be8de_z.jpg", "id": 427077}, {"license": 4, "file_name": "000000203931.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000203931.jpg", "height": 640, "width": 428, "date_captured": "2013-11-22 21:43:28", "flickr_url": "http://farm6.staticflickr.com/5160/7072495487_28288f842c_z.jpg", "id": 203931}, {"license": 3, "file_name": "000000555972.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000555972.jpg", "height": 640, "width": 480, "date_captured": "2013-11-23 18:11:13", "flickr_url": "http://farm8.staticflickr.com/7450/9615677856_2ef2fa9696_z.jpg", "id": 555972}, {"license": 1, "file_name": "000000069795.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000069795.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 18:16:51", "flickr_url": "http://farm3.staticflickr.com/2067/2442319829_30988bb57b_z.jpg", "id": 69795}, {"license": 1, "file_name": "000000577735.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000577735.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 18:17:02", "flickr_url": "http://farm4.staticflickr.com/3013/2442315991_8216aed3e5_z.jpg", "id": 577735}, {"license": 4, "file_name": "000000325527.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000325527.jpg", "height": 374, "width": 500, "date_captured": "2013-11-24 03:06:29", "flickr_url": "http://farm2.staticflickr.com/1403/1429959956_19847d7405_z.jpg", "id": 325527}, {"license": 4, "file_name": "000000465718.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000465718.jpg", "height": 429, "width": 640, "date_captured": "2013-11-24 04:01:55", "flickr_url": "http://farm4.staticflickr.com/3523/3750770006_56fa24a8f7_z.jpg", "id": 465718}, {"license": 1, "file_name": "000000285349.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000285349.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 04:11:01", "flickr_url": "http://farm1.staticflickr.com/128/393685506_2723e1dbe8_z.jpg", "id": 285349}, {"license": 1, "file_name": "000000322163.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000322163.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 05:45:52", "flickr_url": "http://farm8.staticflickr.com/7130/7538762932_e6c5671559_z.jpg", "id": 322163}, {"license": 5, "file_name": "000000346968.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000346968.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 05:56:38", "flickr_url": "http://farm8.staticflickr.com/7309/9970559874_9a86b357a1_z.jpg", "id": 346968}, {"license": 5, "file_name": "000000229216.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000229216.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 07:45:29", "flickr_url": "http://farm1.staticflickr.com/57/180948869_0bad2f3167_z.jpg", "id": 229216}, {"license": 1, "file_name": "000000563882.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000563882.jpg", "height": 425, "width": 640, "date_captured": "2013-11-24 09:57:06", "flickr_url": "http://farm4.staticflickr.com/3321/4605648760_d42dd12aaa_z.jpg", "id": 563882}, {"license": 2, "file_name": "000000199681.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000199681.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 10:10:22", "flickr_url": "http://farm3.staticflickr.com/2450/3926917024_967b3c9e6e_z.jpg", "id": 199681}, {"license": 4, "file_name": "000000313130.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000313130.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 11:34:22", "flickr_url": "http://farm5.staticflickr.com/4139/4930439332_ed665548e3_z.jpg", "id": 313130}, {"license": 6, "file_name": "000000294163.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000294163.jpg", "height": 640, "width": 429, "date_captured": "2013-11-24 14:36:43", "flickr_url": "http://farm9.staticflickr.com/8094/8581211992_c859d883cb_z.jpg", "id": 294163}, {"license": 1, "file_name": "000000176232.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000176232.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 19:49:14", "flickr_url": "http://farm3.staticflickr.com/2260/2430785806_9014d8c905_z.jpg", "id": 176232}, {"license": 1, "file_name": "000000407403.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000407403.jpg", "height": 500, "width": 346, "date_captured": "2013-11-24 20:12:11", "flickr_url": "http://farm1.staticflickr.com/38/85373199_25693860c8_z.jpg", "id": 407403}, {"license": 3, "file_name": "000000562843.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000562843.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 21:09:14", "flickr_url": "http://farm3.staticflickr.com/2390/2006585391_2b90956782_z.jpg", "id": 562843}, {"license": 3, "file_name": "000000483999.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000483999.jpg", "height": 428, "width": 640, "date_captured": "2013-11-25 14:48:15", "flickr_url": "http://farm8.staticflickr.com/7350/9302552335_f384163d1b_z.jpg", "id": 483999}, {"license": 6, "file_name": "000000058705.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000058705.jpg", "height": 482, "width": 640, "date_captured": "2013-11-14 12:14:26", "flickr_url": "http://farm9.staticflickr.com/8213/8309999425_f9992470e1_z.jpg", "id": 58705}, {"license": 1, "file_name": "000000216497.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000216497.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 15:33:21", "flickr_url": "http://farm8.staticflickr.com/7158/6809308987_c436d66d6b_z.jpg", "id": 216497}, {"license": 2, "file_name": "000000323263.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000323263.jpg", "height": 447, "width": 640, "date_captured": "2013-11-14 16:40:24", "flickr_url": "http://farm9.staticflickr.com/8375/8564624108_32b5e1b3d8_z.jpg", "id": 323263}, {"license": 1, "file_name": "000000506310.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000506310.jpg", "height": 425, "width": 640, "date_captured": "2013-11-14 20:22:07", "flickr_url": "http://farm4.staticflickr.com/3149/3102349208_85be3db9d3_z.jpg", "id": 506310}, {"license": 1, "file_name": "000000248334.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000248334.jpg", "height": 375, "width": 500, "date_captured": "2013-11-14 21:31:39", "flickr_url": "http://farm4.staticflickr.com/3054/3050373106_dd8e40fa80_z.jpg", "id": 248334}, {"license": 4, "file_name": "000000400803.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000400803.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 21:49:43", "flickr_url": "http://farm2.staticflickr.com/1153/4611657921_86a8cab295_z.jpg", "id": 400803}, {"license": 4, "file_name": "000000422706.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000422706.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 21:49:52", "flickr_url": "http://farm5.staticflickr.com/4053/4612270698_66a0fc9286_z.jpg", "id": 422706}, {"license": 4, "file_name": "000000007574.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000007574.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 22:47:37", "flickr_url": "http://farm8.staticflickr.com/7054/6924897347_7266fd119c_z.jpg", "id": 7574}, {"license": 3, "file_name": "000000542089.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000542089.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 00:27:58", "flickr_url": "http://farm4.staticflickr.com/3192/3714358357_880d06398b_z.jpg", "id": 542089}, {"license": 6, "file_name": "000000053505.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000053505.jpg", "height": 640, "width": 428, "date_captured": "2013-11-15 04:58:24", "flickr_url": "http://farm6.staticflickr.com/5182/5615797711_983d61b5da_z.jpg", "id": 53505}, {"license": 5, "file_name": "000000500464.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000500464.jpg", "height": 640, "width": 430, "date_captured": "2013-11-15 05:38:30", "flickr_url": "http://farm5.staticflickr.com/4144/4968156547_6993db35d6_z.jpg", "id": 500464}, {"license": 4, "file_name": "000000078823.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000078823.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 07:46:39", "flickr_url": "http://farm1.staticflickr.com/9/13918737_12ed28cb16_z.jpg", "id": 78823}, {"license": 1, "file_name": "000000527220.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000527220.jpg", "height": 169, "width": 500, "date_captured": "2013-11-15 09:48:05", "flickr_url": "http://farm5.staticflickr.com/4025/4337157345_574610f058_z.jpg", "id": 527220}, {"license": 2, "file_name": "000000178982.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000178982.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 12:18:25", "flickr_url": "http://farm7.staticflickr.com/6037/5883294928_e60c2e7bbd_z.jpg", "id": 178982}, {"license": 5, "file_name": "000000332455.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000332455.jpg", "height": 640, "width": 425, "date_captured": "2013-11-15 15:28:36", "flickr_url": "http://farm2.staticflickr.com/1018/3167622968_3c01531d7d_z.jpg", "id": 332455}, {"license": 4, "file_name": "000000408696.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000408696.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 15:53:26", "flickr_url": "http://farm3.staticflickr.com/2339/2240506821_f84d6a9df5_z.jpg", "id": 408696}, {"license": 1, "file_name": "000000144300.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000144300.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 16:13:34", "flickr_url": "http://farm6.staticflickr.com/5550/9892048765_eefdf27946_z.jpg", "id": 144300}, {"license": 1, "file_name": "000000007816.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000007816.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 18:34:07", "flickr_url": "http://farm9.staticflickr.com/8303/8019680141_da3126e418_z.jpg", "id": 7816}, {"license": 1, "file_name": "000000152120.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000152120.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 18:34:12", "flickr_url": "http://farm9.staticflickr.com/8319/8019596995_71257c0c9d_z.jpg", "id": 152120}, {"license": 1, "file_name": "000000308631.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000308631.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 20:15:18", "flickr_url": "http://farm8.staticflickr.com/7222/7292942242_8b08139e5f_z.jpg", "id": 308631}, {"license": 2, "file_name": "000000517523.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000517523.jpg", "height": 435, "width": 640, "date_captured": "2013-11-16 01:56:21", "flickr_url": "http://farm6.staticflickr.com/5324/7067385357_bbd56ed5c4_z.jpg", "id": 517523}, {"license": 2, "file_name": "000000005477.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000005477.jpg", "height": 349, "width": 640, "date_captured": "2013-11-16 03:25:05", "flickr_url": "http://farm3.staticflickr.com/2100/5804511453_4473d4ce98_z.jpg", "id": 5477}, {"license": 4, "file_name": "000000015272.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000015272.jpg", "height": 640, "width": 424, "date_captured": "2013-11-16 12:18:43", "flickr_url": "http://farm9.staticflickr.com/8386/8584364941_15ab4eb0e4_z.jpg", "id": 15272}, {"license": 2, "file_name": "000000391375.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000391375.jpg", "height": 459, "width": 640, "date_captured": "2013-11-16 13:35:48", "flickr_url": "http://farm9.staticflickr.com/8484/8202334828_c06ab74058_z.jpg", "id": 391375}, {"license": 2, "file_name": "000000442661.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000442661.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 14:05:47", "flickr_url": "http://farm4.staticflickr.com/3349/3247984638_ff4a8a0836_z.jpg", "id": 442661}, {"license": 3, "file_name": "000000069138.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000069138.jpg", "height": 640, "width": 371, "date_captured": "2013-11-16 15:05:46", "flickr_url": "http://farm3.staticflickr.com/2587/3820740676_f48ffb889f_z.jpg", "id": 69138}, {"license": 5, "file_name": "000000104619.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000104619.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 15:57:52", "flickr_url": "http://farm2.staticflickr.com/1239/773429957_c1bf8f6323_z.jpg", "id": 104619}, {"license": 3, "file_name": "000000432553.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000432553.jpg", "height": 640, "width": 427, "date_captured": "2013-11-16 16:29:11", "flickr_url": "http://farm7.staticflickr.com/6199/6063047297_77dab8e974_z.jpg", "id": 432553}, {"license": 5, "file_name": "000000548267.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000548267.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 17:33:02", "flickr_url": "http://farm3.staticflickr.com/2627/3960529328_5d544caf16_z.jpg", "id": 548267}, {"license": 1, "file_name": "000000315187.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000315187.jpg", "height": 448, "width": 640, "date_captured": "2013-11-16 17:39:51", "flickr_url": "http://farm9.staticflickr.com/8451/7980026353_fdc782e256_z.jpg", "id": 315187}, {"license": 1, "file_name": "000000076417.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000076417.jpg", "height": 478, "width": 640, "date_captured": "2013-11-16 18:35:39", "flickr_url": "http://farm9.staticflickr.com/8058/8237067692_38007c0051_z.jpg", "id": 76417}, {"license": 1, "file_name": "000000196843.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000196843.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 19:57:47", "flickr_url": "http://farm4.staticflickr.com/3743/9916443776_91a58c2b62_z.jpg", "id": 196843}, {"license": 2, "file_name": "000000138550.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000138550.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 20:21:16", "flickr_url": "http://farm5.staticflickr.com/4122/4827465358_c700047f0d_z.jpg", "id": 138550}, {"license": 2, "file_name": "000000244019.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000244019.jpg", "height": 431, "width": 640, "date_captured": "2013-11-16 20:21:22", "flickr_url": "http://farm8.staticflickr.com/7054/6866135419_9a90905638_z.jpg", "id": 244019}, {"license": 1, "file_name": "000000439623.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000439623.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 20:38:46", "flickr_url": "http://farm5.staticflickr.com/4122/4778652256_33e264bef6_z.jpg", "id": 439623}, {"license": 4, "file_name": "000000343315.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000343315.jpg", "height": 478, "width": 640, "date_captured": "2013-11-16 21:18:59", "flickr_url": "http://farm7.staticflickr.com/6191/6036538152_47397ac96d_z.jpg", "id": 343315}, {"license": 3, "file_name": "000000046804.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000046804.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 21:35:02", "flickr_url": "http://farm6.staticflickr.com/5441/7197037998_02eb094ccc_z.jpg", "id": 46804}, {"license": 5, "file_name": "000000340451.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000340451.jpg", "height": 424, "width": 640, "date_captured": "2013-11-16 21:41:58", "flickr_url": "http://farm9.staticflickr.com/8513/8399079993_cd99846f90_z.jpg", "id": 340451}, {"license": 1, "file_name": "000000480842.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000480842.jpg", "height": 590, "width": 640, "date_captured": "2013-11-16 23:16:42", "flickr_url": "http://farm4.staticflickr.com/3293/3280886293_f288062a0d_z.jpg", "id": 480842}, {"license": 2, "file_name": "000000436883.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000436883.jpg", "height": 421, "width": 640, "date_captured": "2013-11-17 00:18:47", "flickr_url": "http://farm9.staticflickr.com/8199/8228898324_49568e69b1_z.jpg", "id": 436883}, {"license": 3, "file_name": "000000546556.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000546556.jpg", "height": 301, "width": 640, "date_captured": "2013-11-17 00:48:40", "flickr_url": "http://farm5.staticflickr.com/4086/4843139961_56b72beb5e_z.jpg", "id": 546556}, {"license": 2, "file_name": "000000459500.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000459500.jpg", "height": 500, "width": 375, "date_captured": "2013-11-17 00:56:28", "flickr_url": "http://farm4.staticflickr.com/3633/3402185694_661d84a62d_z.jpg", "id": 459500}, {"license": 4, "file_name": "000000098497.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000098497.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 01:20:25", "flickr_url": "http://farm1.staticflickr.com/33/42859989_594973b1d8_z.jpg", "id": 98497}, {"license": 3, "file_name": "000000338718.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000338718.jpg", "height": 445, "width": 500, "date_captured": "2013-11-17 02:03:01", "flickr_url": "http://farm1.staticflickr.com/12/18425160_e4eef1d1bd_z.jpg", "id": 338718}, {"license": 1, "file_name": "000000228771.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000228771.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 02:29:16", "flickr_url": "http://farm6.staticflickr.com/5014/5402488053_f7ae0eba82_z.jpg", "id": 228771}, {"license": 4, "file_name": "000000050165.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000050165.jpg", "height": 431, "width": 640, "date_captured": "2013-11-17 03:55:26", "flickr_url": "http://farm5.staticflickr.com/4087/5088356571_542e2c9d9a_z.jpg", "id": 50165}, {"license": 5, "file_name": "000000158956.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000158956.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 05:55:10", "flickr_url": "http://farm4.staticflickr.com/3362/3594057164_dd6b4f2b62_z.jpg", "id": 158956}, {"license": 3, "file_name": "000000311883.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000311883.jpg", "height": 289, "width": 640, "date_captured": "2013-11-17 06:46:15", "flickr_url": "http://farm4.staticflickr.com/3779/9764466125_75a2dbbb95_z.jpg", "id": 311883}, {"license": 3, "file_name": "000000270386.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000270386.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 07:15:48", "flickr_url": "http://farm1.staticflickr.com/53/139489473_58303dcd3c_z.jpg", "id": 270386}, {"license": 5, "file_name": "000000240767.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000240767.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 07:48:26", "flickr_url": "http://farm4.staticflickr.com/3437/3205302470_f4d62ebec2_z.jpg", "id": 240767}, {"license": 1, "file_name": "000000100723.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000100723.jpg", "height": 333, "width": 500, "date_captured": "2013-11-17 08:00:02", "flickr_url": "http://farm3.staticflickr.com/2418/2403917915_414499f1a7_z.jpg", "id": 100723}, {"license": 2, "file_name": "000000431896.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000431896.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 10:35:39", "flickr_url": "http://farm9.staticflickr.com/8257/8665534960_9829f6fd47_z.jpg", "id": 431896}, {"license": 6, "file_name": "000000129062.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000129062.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 11:35:20", "flickr_url": "http://farm1.staticflickr.com/229/518063766_526550b8db_z.jpg", "id": 129062}, {"license": 4, "file_name": "000000442456.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000442456.jpg", "height": 356, "width": 640, "date_captured": "2013-11-17 15:08:34", "flickr_url": "http://farm9.staticflickr.com/8264/8602459939_be3c670999_z.jpg", "id": 442456}, {"license": 1, "file_name": "000000079229.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000079229.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 15:50:07", "flickr_url": "http://farm3.staticflickr.com/2563/4091237215_750156c310_z.jpg", "id": 79229}, {"license": 1, "file_name": "000000188439.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000188439.jpg", "height": 408, "width": 640, "date_captured": "2013-11-17 18:50:52", "flickr_url": "http://farm9.staticflickr.com/8213/8448450899_567efc882a_z.jpg", "id": 188439}, {"license": 4, "file_name": "000000151480.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000151480.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 19:12:30", "flickr_url": "http://farm7.staticflickr.com/6061/6054578485_f6d7810ee6_z.jpg", "id": 151480}, {"license": 2, "file_name": "000000046872.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000046872.jpg", "height": 391, "width": 640, "date_captured": "2013-11-17 19:43:47", "flickr_url": "http://farm9.staticflickr.com/8033/7934872172_1826f22f18_z.jpg", "id": 46872}, {"license": 2, "file_name": "000000219485.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000219485.jpg", "height": 640, "width": 422, "date_captured": "2013-11-17 20:50:53", "flickr_url": "http://farm4.staticflickr.com/3367/3440089012_0e580cecc7_z.jpg", "id": 219485}, {"license": 1, "file_name": "000000532575.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000532575.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 22:13:46", "flickr_url": "http://farm1.staticflickr.com/98/238807701_1db2c72d6c_z.jpg", "id": 532575}, {"license": 1, "file_name": "000000489014.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000489014.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 22:20:50", "flickr_url": "http://farm1.staticflickr.com/28/58327769_59cb2f06c6_z.jpg", "id": 489014}, {"license": 1, "file_name": "000000289229.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000289229.jpg", "height": 500, "width": 362, "date_captured": "2013-11-18 00:34:21", "flickr_url": "http://farm4.staticflickr.com/3577/3373399078_93b803246e_z.jpg", "id": 289229}, {"license": 1, "file_name": "000000281929.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000281929.jpg", "height": 504, "width": 640, "date_captured": "2013-11-18 01:01:18", "flickr_url": "http://farm5.staticflickr.com/4062/4612141283_5e7a4e23d4_z.jpg", "id": 281929}, {"license": 4, "file_name": "000000257896.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000257896.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 03:12:05", "flickr_url": "http://farm7.staticflickr.com/6051/6246523213_48ec2b50c3_z.jpg", "id": 257896}, {"license": 2, "file_name": "000000203580.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000203580.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 04:30:22", "flickr_url": "http://farm7.staticflickr.com/6126/5981750475_2a286b8c2c_z.jpg", "id": 203580}, {"license": 1, "file_name": "000000493284.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000493284.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 06:18:09", "flickr_url": "http://farm8.staticflickr.com/7009/6755529893_e3bde0feb5_z.jpg", "id": 493284}, {"license": 1, "file_name": "000000028449.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000028449.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 06:18:16", "flickr_url": "http://farm8.staticflickr.com/7011/6755501207_36f25a07e7_z.jpg", "id": 28449}, {"license": 4, "file_name": "000000179174.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000179174.jpg", "height": 640, "width": 428, "date_captured": "2013-11-18 10:27:58", "flickr_url": "http://farm9.staticflickr.com/8146/7611201536_977fc818b9_z.jpg", "id": 179174}, {"license": 1, "file_name": "000000393115.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000393115.jpg", "height": 640, "width": 630, "date_captured": "2013-11-18 12:34:51", "flickr_url": "http://farm3.staticflickr.com/2123/2423792192_d1b41fc67c_z.jpg", "id": 393115}, {"license": 1, "file_name": "000000370813.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000370813.jpg", "height": 640, "width": 540, "date_captured": "2013-11-18 12:36:51", "flickr_url": "http://farm4.staticflickr.com/3039/2342983642_aeb29c23c0_z.jpg", "id": 370813}, {"license": 3, "file_name": "000000442746.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000442746.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 13:16:19", "flickr_url": "http://farm1.staticflickr.com/51/184784092_1f82c8701f_z.jpg", "id": 442746}, {"license": 6, "file_name": "000000236592.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000236592.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 15:32:40", "flickr_url": "http://farm3.staticflickr.com/2679/4301248615_9ba4c29054_z.jpg", "id": 236592}, {"license": 2, "file_name": "000000116589.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000116589.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 16:35:13", "flickr_url": "http://farm2.staticflickr.com/1209/766854152_e68f843ac4_z.jpg", "id": 116589}, {"license": 1, "file_name": "000000369541.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000369541.jpg", "height": 500, "width": 375, "date_captured": "2013-11-18 17:41:27", "flickr_url": "http://farm2.staticflickr.com/1061/1465147525_269eadaa56_z.jpg", "id": 369541}, {"license": 2, "file_name": "000000122969.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000122969.jpg", "height": 333, "width": 500, "date_captured": "2013-11-18 19:07:43", "flickr_url": "http://farm3.staticflickr.com/2646/4032052256_db87d21408_z.jpg", "id": 122969}, {"license": 1, "file_name": "000000381971.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000381971.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 21:01:24", "flickr_url": "http://farm2.staticflickr.com/1189/1324949412_40e6f65020_z.jpg", "id": 381971}, {"license": 3, "file_name": "000000236730.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000236730.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 21:43:32", "flickr_url": "http://farm1.staticflickr.com/187/384271730_ec689b864f_z.jpg", "id": 236730}, {"license": 6, "file_name": "000000396863.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000396863.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 22:00:49", "flickr_url": "http://farm7.staticflickr.com/6141/6017526843_2cbec9c29c_z.jpg", "id": 396863}, {"license": 1, "file_name": "000000576052.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000576052.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 23:43:23", "flickr_url": "http://farm5.staticflickr.com/4151/5092636840_353c2d56f9_z.jpg", "id": 576052}, {"license": 2, "file_name": "000000344888.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000344888.jpg", "height": 416, "width": 640, "date_captured": "2013-11-19 00:37:11", "flickr_url": "http://farm8.staticflickr.com/7447/9602225228_ebd6fda5e5_z.jpg", "id": 344888}, {"license": 3, "file_name": "000000051712.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000051712.jpg", "height": 368, "width": 640, "date_captured": "2013-11-19 18:40:32", "flickr_url": "http://farm6.staticflickr.com/5101/5597324933_b3d66bd0bb_z.jpg", "id": 51712}, {"license": 2, "file_name": "000000480275.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000480275.jpg", "height": 471, "width": 640, "date_captured": "2013-11-19 18:49:01", "flickr_url": "http://farm3.staticflickr.com/2740/4268400738_389a719561_z.jpg", "id": 480275}, {"license": 2, "file_name": "000000282037.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000282037.jpg", "height": 449, "width": 640, "date_captured": "2013-11-19 18:53:51", "flickr_url": "http://farm9.staticflickr.com/8301/7742601288_016a746af3_z.jpg", "id": 282037}, {"license": 4, "file_name": "000000476770.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000476770.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 19:39:31", "flickr_url": "http://farm5.staticflickr.com/4120/4802608215_14b4b44a1e_z.jpg", "id": 476770}, {"license": 1, "file_name": "000000220764.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000220764.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 19:58:58", "flickr_url": "http://farm9.staticflickr.com/8382/8550178319_4d55b3964a_z.jpg", "id": 220764}, {"license": 3, "file_name": "000000493799.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000493799.jpg", "height": 483, "width": 640, "date_captured": "2013-11-19 20:26:13", "flickr_url": "http://farm6.staticflickr.com/5007/5302527466_a147820a5c_z.jpg", "id": 493799}, {"license": 4, "file_name": "000000312720.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000312720.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 22:06:09", "flickr_url": "http://farm6.staticflickr.com/5172/5582375921_20145bc1b0_z.jpg", "id": 312720}, {"license": 1, "file_name": "000000568981.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000568981.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 23:30:56", "flickr_url": "http://farm2.staticflickr.com/1110/5146829285_947d802d03_z.jpg", "id": 568981}, {"license": 3, "file_name": "000000461009.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000461009.jpg", "height": 612, "width": 612, "date_captured": "2013-11-19 23:51:04", "flickr_url": "http://farm9.staticflickr.com/8535/8876547845_117692422d_z.jpg", "id": 461009}, {"license": 4, "file_name": "000000143998.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000143998.jpg", "height": 612, "width": 612, "date_captured": "2013-11-20 00:35:41", "flickr_url": "http://farm8.staticflickr.com/7003/6619947073_e8595d035b_z.jpg", "id": 143998}, {"license": 2, "file_name": "000000546626.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000546626.jpg", "height": 400, "width": 300, "date_captured": "2013-11-20 03:34:49", "flickr_url": "http://farm4.staticflickr.com/3633/3402126212_3d56a43def_z.jpg", "id": 546626}, {"license": 1, "file_name": "000000563648.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000563648.jpg", "height": 640, "width": 468, "date_captured": "2013-11-20 04:55:27", "flickr_url": "http://farm5.staticflickr.com/4106/5068695376_c2fac1cab9_z.jpg", "id": 563648}, {"license": 3, "file_name": "000000532855.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000532855.jpg", "height": 457, "width": 640, "date_captured": "2013-11-20 05:25:59", "flickr_url": "http://farm5.staticflickr.com/4004/4664820449_f865d2c71e_z.jpg", "id": 532855}, {"license": 4, "file_name": "000000038210.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000038210.jpg", "height": 640, "width": 428, "date_captured": "2013-11-20 06:38:46", "flickr_url": "http://farm4.staticflickr.com/3654/3467469324_f2a706586c_z.jpg", "id": 38210}, {"license": 4, "file_name": "000000563349.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000563349.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 12:30:08", "flickr_url": "http://farm6.staticflickr.com/5171/5588983985_fcf49f0d7b_z.jpg", "id": 563349}, {"license": 3, "file_name": "000000311950.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000311950.jpg", "height": 640, "width": 448, "date_captured": "2013-11-20 13:37:04", "flickr_url": "http://farm6.staticflickr.com/5321/9779077252_1feaccd1b0_z.jpg", "id": 311950}, {"license": 3, "file_name": "000000010583.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000010583.jpg", "height": 612, "width": 612, "date_captured": "2013-11-20 14:18:50", "flickr_url": "http://farm9.staticflickr.com/8497/8288720209_c13ea818f8_z.jpg", "id": 10583}, {"license": 4, "file_name": "000000250901.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000250901.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 16:22:42", "flickr_url": "http://farm5.staticflickr.com/4038/5080030991_42d65ee6f2_z.jpg", "id": 250901}, {"license": 2, "file_name": "000000074457.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000074457.jpg", "height": 364, "width": 640, "date_captured": "2013-11-20 16:43:05", "flickr_url": "http://farm7.staticflickr.com/6086/6148444553_779a53b647_z.jpg", "id": 74457}, {"license": 4, "file_name": "000000190007.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000190007.jpg", "height": 381, "width": 640, "date_captured": "2013-11-20 16:45:47", "flickr_url": "http://farm8.staticflickr.com/7059/6877678857_85d6a6041a_z.jpg", "id": 190007}, {"license": 3, "file_name": "000000177357.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000177357.jpg", "height": 396, "width": 640, "date_captured": "2013-11-20 17:12:10", "flickr_url": "http://farm4.staticflickr.com/3727/9439655011_ab8c36b62b_z.jpg", "id": 177357}, {"license": 1, "file_name": "000000185292.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000185292.jpg", "height": 640, "width": 421, "date_captured": "2013-11-20 18:19:46", "flickr_url": "http://farm4.staticflickr.com/3275/4555439045_c96fbbc7b8_z.jpg", "id": 185292}, {"license": 4, "file_name": "000000493864.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000493864.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 18:53:06", "flickr_url": "http://farm8.staticflickr.com/7344/9691828107_2258c3d127_z.jpg", "id": 493864}, {"license": 3, "file_name": "000000102820.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000102820.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 20:23:33", "flickr_url": "http://farm4.staticflickr.com/3739/9064269236_92069178fe_z.jpg", "id": 102820}, {"license": 6, "file_name": "000000051976.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000051976.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 22:06:28", "flickr_url": "http://farm8.staticflickr.com/7156/6736861855_94746068ca_z.jpg", "id": 51976}, {"license": 1, "file_name": "000000381360.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000381360.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 23:20:28", "flickr_url": "http://farm6.staticflickr.com/5266/5850664307_eb2c736435_z.jpg", "id": 381360}, {"license": 1, "file_name": "000000304812.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000304812.jpg", "height": 640, "width": 428, "date_captured": "2013-11-20 23:24:48", "flickr_url": "http://farm6.staticflickr.com/5184/5694114164_e2a5d24659_z.jpg", "id": 304812}, {"license": 3, "file_name": "000000333237.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000333237.jpg", "height": 409, "width": 640, "date_captured": "2013-11-20 23:35:28", "flickr_url": "http://farm9.staticflickr.com/8343/8243863505_1a1b413d5c_z.jpg", "id": 333237}, {"license": 4, "file_name": "000000074733.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000074733.jpg", "height": 612, "width": 612, "date_captured": "2013-11-21 01:21:16", "flickr_url": "http://farm6.staticflickr.com/5461/9330037796_1700b955f3_z.jpg", "id": 74733}, {"license": 1, "file_name": "000000258883.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000258883.jpg", "height": 640, "width": 426, "date_captured": "2013-11-21 05:15:57", "flickr_url": "http://farm5.staticflickr.com/4143/4880266221_e6820b17e2_z.jpg", "id": 258883}, {"license": 3, "file_name": "000000055950.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000055950.jpg", "height": 640, "width": 426, "date_captured": "2013-11-21 05:33:32", "flickr_url": "http://farm5.staticflickr.com/4008/4568927357_bfbb339e27_z.jpg", "id": 55950}, {"license": 5, "file_name": "000000175251.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000175251.jpg", "height": 612, "width": 612, "date_captured": "2013-11-21 20:12:28", "flickr_url": "http://farm9.staticflickr.com/8051/8123945429_b155a5b032_z.jpg", "id": 175251}, {"license": 3, "file_name": "000000467176.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000467176.jpg", "height": 428, "width": 640, "date_captured": "2013-11-21 20:13:48", "flickr_url": "http://farm1.staticflickr.com/147/409553883_515b628393_z.jpg", "id": 467176}, {"license": 1, "file_name": "000000368212.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000368212.jpg", "height": 640, "width": 478, "date_captured": "2013-11-21 20:19:19", "flickr_url": "http://farm7.staticflickr.com/6081/6101917706_4d5bccfc99_z.jpg", "id": 368212}, {"license": 3, "file_name": "000000190637.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000190637.jpg", "height": 640, "width": 428, "date_captured": "2013-11-21 22:56:31", "flickr_url": "http://farm2.staticflickr.com/1160/1155031094_c805231ec5_z.jpg", "id": 190637}, {"license": 3, "file_name": "000000300341.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000300341.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 23:40:49", "flickr_url": "http://farm1.staticflickr.com/148/409557679_cb1b053bf9_z.jpg", "id": 300341}, {"license": 1, "file_name": "000000445792.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000445792.jpg", "height": 375, "width": 500, "date_captured": "2013-11-21 23:54:19", "flickr_url": "http://farm1.staticflickr.com/163/385893071_5d60bf0cd5_z.jpg", "id": 445792}, {"license": 5, "file_name": "000000239318.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000239318.jpg", "height": 500, "width": 375, "date_captured": "2013-11-22 01:30:23", "flickr_url": "http://farm1.staticflickr.com/26/39047896_b94db54bb4_z.jpg", "id": 239318}, {"license": 2, "file_name": "000000047769.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000047769.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 02:34:29", "flickr_url": "http://farm3.staticflickr.com/2260/3537315634_19113da15a_z.jpg", "id": 47769}, {"license": 2, "file_name": "000000001503.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000001503.jpg", "height": 240, "width": 320, "date_captured": "2013-11-22 17:22:02", "flickr_url": "http://farm1.staticflickr.com/4/4589204_0d42f46fe6_z.jpg", "id": 1503}, {"license": 1, "file_name": "000000284743.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000284743.jpg", "height": 425, "width": 640, "date_captured": "2013-11-22 21:17:52", "flickr_url": "http://farm4.staticflickr.com/3348/3449687086_e7e2156c9b_z.jpg", "id": 284743}, {"license": 4, "file_name": "000000065798.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000065798.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 23:37:22", "flickr_url": "http://farm5.staticflickr.com/4047/4545471247_08be6b58e5_z.jpg", "id": 65798}, {"license": 4, "file_name": "000000312192.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000312192.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 04:58:31", "flickr_url": "http://farm4.staticflickr.com/3350/3506835310_1e61679920_z.jpg", "id": 312192}, {"license": 3, "file_name": "000000154705.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000154705.jpg", "height": 464, "width": 640, "date_captured": "2013-11-23 19:26:56", "flickr_url": "http://farm2.staticflickr.com/1185/566325173_60cdbdbab7_z.jpg", "id": 154705}, {"license": 2, "file_name": "000000192904.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000192904.jpg", "height": 436, "width": 640, "date_captured": "2013-11-24 04:31:16", "flickr_url": "http://farm8.staticflickr.com/7220/7406078162_7f14d50d38_z.jpg", "id": 192904}, {"license": 2, "file_name": "000000132375.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000132375.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 05:12:15", "flickr_url": "http://farm5.staticflickr.com/4079/4826829501_203548f655_z.jpg", "id": 132375}, {"license": 5, "file_name": "000000384661.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000384661.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 06:03:04", "flickr_url": "http://farm4.staticflickr.com/3306/3557337965_41dbae9a6b_z.jpg", "id": 384661}, {"license": 3, "file_name": "000000341828.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000341828.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 08:04:31", "flickr_url": "http://farm9.staticflickr.com/8506/8498477540_f09eda2b56_z.jpg", "id": 341828}, {"license": 1, "file_name": "000000282296.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000282296.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 11:51:27", "flickr_url": "http://farm4.staticflickr.com/3065/2734893954_7bda4629e4_z.jpg", "id": 282296}, {"license": 3, "file_name": "000000322959.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000322959.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 22:40:00", "flickr_url": "http://farm6.staticflickr.com/5450/9607155926_3daeeb60bc_z.jpg", "id": 322959}, {"license": 1, "file_name": "000000546976.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000546976.jpg", "height": 375, "width": 500, "date_captured": "2013-11-14 16:58:58", "flickr_url": "http://farm1.staticflickr.com/127/387465580_92b4ce57a3_z.jpg", "id": 546976}, {"license": 5, "file_name": "000000052996.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000052996.jpg", "height": 426, "width": 640, "date_captured": "2013-11-14 18:10:09", "flickr_url": "http://farm6.staticflickr.com/5482/9358344788_7dd31c5a98_z.jpg", "id": 52996}, {"license": 1, "file_name": "000000522007.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000522007.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 20:50:40", "flickr_url": "http://farm1.staticflickr.com/22/25529233_d98ebd3413_z.jpg", "id": 522007}, {"license": 5, "file_name": "000000423123.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000423123.jpg", "height": 426, "width": 640, "date_captured": "2013-11-14 21:40:40", "flickr_url": "http://farm6.staticflickr.com/5328/9358340286_480b6f05db_z.jpg", "id": 423123}, {"license": 4, "file_name": "000000570736.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000570736.jpg", "height": 640, "width": 427, "date_captured": "2013-11-14 23:37:45", "flickr_url": "http://farm4.staticflickr.com/3489/4047340119_4b5549e707_z.jpg", "id": 570736}, {"license": 1, "file_name": "000000045596.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000045596.jpg", "height": 640, "width": 408, "date_captured": "2013-11-15 00:46:21", "flickr_url": "http://farm4.staticflickr.com/3534/4004822668_b9c1be7bcb_z.jpg", "id": 45596}, {"license": 1, "file_name": "000000232649.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000232649.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 02:27:00", "flickr_url": "http://farm1.staticflickr.com/12/15837353_95097b11bf_z.jpg", "id": 232649}, {"license": 5, "file_name": "000000070774.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000070774.jpg", "height": 425, "width": 640, "date_captured": "2013-11-15 04:26:25", "flickr_url": "http://farm6.staticflickr.com/5219/5517860224_7973e10013_z.jpg", "id": 70774}, {"license": 1, "file_name": "000000172330.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000172330.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 07:21:17", "flickr_url": "http://farm8.staticflickr.com/7071/7255497726_e2e4ee6f2b_z.jpg", "id": 172330}, {"license": 2, "file_name": "000000123585.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000123585.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 14:21:49", "flickr_url": "http://farm3.staticflickr.com/2040/2245739781_bf4d8edbbe_z.jpg", "id": 123585}, {"license": 1, "file_name": "000000455981.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000455981.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 14:34:48", "flickr_url": "http://farm5.staticflickr.com/4025/4692502775_d984d00585_z.jpg", "id": 455981}, {"license": 1, "file_name": "000000193926.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000193926.jpg", "height": 477, "width": 640, "date_captured": "2013-11-15 18:44:51", "flickr_url": "http://farm5.staticflickr.com/4089/4979494682_5541df49d6_z.jpg", "id": 193926}, {"license": 3, "file_name": "000000192699.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000192699.jpg", "height": 457, "width": 640, "date_captured": "2013-11-15 20:45:37", "flickr_url": "http://farm9.staticflickr.com/8143/7700453972_287fd39173_z.jpg", "id": 192699}, {"license": 4, "file_name": "000000560312.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000560312.jpg", "height": 425, "width": 640, "date_captured": "2013-11-15 23:52:36", "flickr_url": "http://farm5.staticflickr.com/4068/4339285118_84b3ccf64b_z.jpg", "id": 560312}, {"license": 2, "file_name": "000000044652.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000044652.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 03:00:49", "flickr_url": "http://farm7.staticflickr.com/6128/5977306745_91f4490b87_z.jpg", "id": 44652}, {"license": 2, "file_name": "000000498857.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000498857.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 15:08:14", "flickr_url": "http://farm9.staticflickr.com/8038/7964630050_56d295a6db_z.jpg", "id": 498857}, {"license": 3, "file_name": "000000575187.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000575187.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 15:48:45", "flickr_url": "http://farm1.staticflickr.com/90/242099062_dc4edef2a4_z.jpg", "id": 575187}, {"license": 3, "file_name": "000000319607.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000319607.jpg", "height": 640, "width": 640, "date_captured": "2013-11-16 17:13:15", "flickr_url": "http://farm4.staticflickr.com/3283/2841950355_d0a96ce31f_z.jpg", "id": 319607}, {"license": 2, "file_name": "000000302452.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000302452.jpg", "height": 403, "width": 403, "date_captured": "2013-11-16 17:18:08", "flickr_url": "http://farm8.staticflickr.com/7075/7404772566_5f8421b5ab_z.jpg", "id": 302452}, {"license": 1, "file_name": "000000201934.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000201934.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 18:02:42", "flickr_url": "http://farm1.staticflickr.com/14/15602482_41fd96ddb6_z.jpg", "id": 201934}, {"license": 2, "file_name": "000000058393.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000058393.jpg", "height": 486, "width": 640, "date_captured": "2013-11-16 18:34:33", "flickr_url": "http://farm2.staticflickr.com/1276/1253450568_f4af7dc4fb_z.jpg", "id": 58393}, {"license": 2, "file_name": "000000353180.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000353180.jpg", "height": 420, "width": 640, "date_captured": "2013-11-16 19:42:17", "flickr_url": "http://farm8.staticflickr.com/7447/10023651645_1c49d4563f_z.jpg", "id": 353180}, {"license": 4, "file_name": "000000423519.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000423519.jpg", "height": 640, "width": 460, "date_captured": "2013-11-16 19:42:23", "flickr_url": "http://farm4.staticflickr.com/3754/10191731076_ac8f52461a_z.jpg", "id": 423519}, {"license": 3, "file_name": "000000461573.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000461573.jpg", "height": 376, "width": 500, "date_captured": "2013-11-16 20:21:55", "flickr_url": "http://farm4.staticflickr.com/3317/3429860218_cfc283ce00_z.jpg", "id": 461573}, {"license": 3, "file_name": "000000516804.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000516804.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 20:25:12", "flickr_url": "http://farm3.staticflickr.com/2852/9637125749_f6ea5c589f_z.jpg", "id": 516804}, {"license": 6, "file_name": "000000441468.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000441468.jpg", "height": 640, "width": 426, "date_captured": "2013-11-16 23:25:53", "flickr_url": "http://farm1.staticflickr.com/134/371854469_181a9f6f66_z.jpg", "id": 441468}, {"license": 1, "file_name": "000000277005.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000277005.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 23:46:25", "flickr_url": "http://farm7.staticflickr.com/6233/6315596287_a690deabd9_z.jpg", "id": 277005}, {"license": 1, "file_name": "000000484893.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000484893.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 00:03:18", "flickr_url": "http://farm6.staticflickr.com/5168/5310458020_d5c48f3f5f_z.jpg", "id": 484893}, {"license": 1, "file_name": "000000032811.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000032811.jpg", "height": 500, "width": 375, "date_captured": "2013-11-17 00:39:14", "flickr_url": "http://farm4.staticflickr.com/3428/3360326607_42615d71ea_z.jpg", "id": 32811}, {"license": 3, "file_name": "000000130386.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000130386.jpg", "height": 500, "width": 375, "date_captured": "2013-11-17 02:01:35", "flickr_url": "http://farm1.staticflickr.com/28/89726642_17a27eab7e_z.jpg", "id": 130386}, {"license": 1, "file_name": "000000417876.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000417876.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 02:11:13", "flickr_url": "http://farm1.staticflickr.com/2/1770946_e6d2ced39a_z.jpg", "id": 417876}, {"license": 2, "file_name": "000000173183.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000173183.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 02:28:06", "flickr_url": "http://farm3.staticflickr.com/2786/4072182417_e01e7e46a4_z.jpg", "id": 173183}, {"license": 6, "file_name": "000000089271.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000089271.jpg", "height": 524, "width": 640, "date_captured": "2013-11-17 03:19:00", "flickr_url": "http://farm5.staticflickr.com/4122/4873790839_1f8aa7d6b2_z.jpg", "id": 89271}, {"license": 4, "file_name": "000000056545.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000056545.jpg", "height": 640, "width": 505, "date_captured": "2013-11-17 05:36:11", "flickr_url": "http://farm3.staticflickr.com/2894/9470927378_921b919b7e_z.jpg", "id": 56545}, {"license": 1, "file_name": "000000221213.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000221213.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 06:09:49", "flickr_url": "http://farm6.staticflickr.com/5548/10220811593_9471e23b87_z.jpg", "id": 221213}, {"license": 4, "file_name": "000000534639.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000534639.jpg", "height": 475, "width": 640, "date_captured": "2013-11-17 06:11:41", "flickr_url": "http://farm9.staticflickr.com/8114/10190866013_de7086c9ef_z.jpg", "id": 534639}, {"license": 4, "file_name": "000000560371.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000560371.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 06:21:07", "flickr_url": "http://farm4.staticflickr.com/3081/2368167876_cb13e711e8_z.jpg", "id": 560371}, {"license": 1, "file_name": "000000042178.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000042178.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 06:35:22", "flickr_url": "http://farm4.staticflickr.com/3753/9912134186_857c6e5690_z.jpg", "id": 42178}, {"license": 5, "file_name": "000000106281.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000106281.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 06:55:35", "flickr_url": "http://farm3.staticflickr.com/2869/9711102796_4999fb3325_z.jpg", "id": 106281}, {"license": 5, "file_name": "000000570664.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000570664.jpg", "height": 333, "width": 500, "date_captured": "2013-11-17 16:35:56", "flickr_url": "http://farm1.staticflickr.com/208/508728978_915f97d63a_z.jpg", "id": 570664}, {"license": 2, "file_name": "000000412887.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000412887.jpg", "height": 640, "width": 483, "date_captured": "2013-11-17 16:41:57", "flickr_url": "http://farm5.staticflickr.com/4086/5196474556_36c2f8d456_z.jpg", "id": 412887}, {"license": 2, "file_name": "000000131938.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000131938.jpg", "height": 640, "width": 463, "date_captured": "2013-11-17 17:04:54", "flickr_url": "http://farm6.staticflickr.com/5205/5383211553_db69a000c3_z.jpg", "id": 131938}, {"license": 4, "file_name": "000000540928.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000540928.jpg", "height": 455, "width": 640, "date_captured": "2013-11-17 18:50:41", "flickr_url": "http://farm4.staticflickr.com/3591/3373335806_30482ab023_z.jpg", "id": 540928}, {"license": 3, "file_name": "000000563702.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000563702.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 21:28:50", "flickr_url": "http://farm8.staticflickr.com/7034/6807713071_3110923d23_z.jpg", "id": 563702}, {"license": 6, "file_name": "000000445722.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000445722.jpg", "height": 500, "width": 318, "date_captured": "2013-11-17 22:47:38", "flickr_url": "http://farm1.staticflickr.com/63/158415552_46a16e78a1_z.jpg", "id": 445722}, {"license": 1, "file_name": "000000115885.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000115885.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 00:04:23", "flickr_url": "http://farm3.staticflickr.com/2473/3696483647_307bb02393_z.jpg", "id": 115885}, {"license": 2, "file_name": "000000496597.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000496597.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 00:32:08", "flickr_url": "http://farm1.staticflickr.com/13/17628487_34eaa0e0a8_z.jpg", "id": 496597}, {"license": 3, "file_name": "000000237864.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000237864.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 01:07:04", "flickr_url": "http://farm9.staticflickr.com/8202/8228349900_bf94acf5c6_z.jpg", "id": 237864}, {"license": 1, "file_name": "000000389316.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000389316.jpg", "height": 361, "width": 640, "date_captured": "2013-11-18 01:40:16", "flickr_url": "http://farm9.staticflickr.com/8383/8539529362_8afccda230_z.jpg", "id": 389316}, {"license": 1, "file_name": "000000021604.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000021604.jpg", "height": 640, "width": 512, "date_captured": "2013-11-18 02:23:44", "flickr_url": "http://farm9.staticflickr.com/8513/8497961219_75eb762d9a_z.jpg", "id": 21604}, {"license": 1, "file_name": "000000267940.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000267940.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 03:09:21", "flickr_url": "http://farm5.staticflickr.com/4083/5171859281_ccfa2e6e74_z.jpg", "id": 267940}, {"license": 1, "file_name": "000000255536.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000255536.jpg", "height": 400, "width": 400, "date_captured": "2013-11-18 04:09:42", "flickr_url": "http://farm1.staticflickr.com/21/28730476_f2d616c829_z.jpg", "id": 255536}, {"license": 3, "file_name": "000000455157.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000455157.jpg", "height": 640, "width": 640, "date_captured": "2013-11-18 04:31:37", "flickr_url": "http://farm8.staticflickr.com/7313/9465645634_24c03ca1dc_z.jpg", "id": 455157}, {"license": 1, "file_name": "000000486112.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000486112.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 04:39:45", "flickr_url": "http://farm9.staticflickr.com/8389/8473766755_5d338e71a7_z.jpg", "id": 486112}, {"license": 1, "file_name": "000000259625.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000259625.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 04:39:58", "flickr_url": "http://farm9.staticflickr.com/8378/8474834084_ae200c5857_z.jpg", "id": 259625}, {"license": 1, "file_name": "000000103723.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000103723.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 08:49:19", "flickr_url": "http://farm5.staticflickr.com/4146/5068005393_7cdb5299c8_z.jpg", "id": 103723}, {"license": 2, "file_name": "000000530162.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000530162.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 09:18:51", "flickr_url": "http://farm9.staticflickr.com/8500/8252946447_07db876128_z.jpg", "id": 530162}, {"license": 1, "file_name": "000000273232.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000273232.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 10:45:12", "flickr_url": "http://farm4.staticflickr.com/3582/3961718403_3c9f6d4c9a_z.jpg", "id": 273232}, {"license": 2, "file_name": "000000292330.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000292330.jpg", "height": 512, "width": 640, "date_captured": "2013-11-18 10:50:22", "flickr_url": "http://farm2.staticflickr.com/1304/4676915205_a4c93ec861_z.jpg", "id": 292330}, {"license": 2, "file_name": "000000266981.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000266981.jpg", "height": 640, "width": 426, "date_captured": "2013-11-18 11:37:51", "flickr_url": "http://farm1.staticflickr.com/42/85526391_5d26763bc7_z.jpg", "id": 266981}, {"license": 3, "file_name": "000000184611.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000184611.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 12:09:14", "flickr_url": "http://farm1.staticflickr.com/1/740527_cad2438868_z.jpg", "id": 184611}, {"license": 2, "file_name": "000000513484.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000513484.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 14:23:56", "flickr_url": "http://farm8.staticflickr.com/7238/7032202423_92e7d391c0_z.jpg", "id": 513484}, {"license": 4, "file_name": "000000017029.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000017029.jpg", "height": 640, "width": 640, "date_captured": "2013-11-18 14:33:10", "flickr_url": "http://farm8.staticflickr.com/7304/8746020648_f1e2075b86_z.jpg", "id": 17029}, {"license": 4, "file_name": "000000163118.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000163118.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 14:51:13", "flickr_url": "http://farm7.staticflickr.com/6034/6295016809_63d19a29c6_z.jpg", "id": 163118}, {"license": 2, "file_name": "000000547502.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000547502.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 14:58:20", "flickr_url": "http://farm7.staticflickr.com/6102/6266896443_5f6a86ea64_z.jpg", "id": 547502}, {"license": 2, "file_name": "000000090003.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000090003.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 15:11:25", "flickr_url": "http://farm7.staticflickr.com/6160/6217629834_9375312717_z.jpg", "id": 90003}, {"license": 1, "file_name": "000000006954.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000006954.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 15:17:01", "flickr_url": "http://farm5.staticflickr.com/4116/4876846589_a7bd6f3a47_z.jpg", "id": 6954}, {"license": 5, "file_name": "000000128654.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000128654.jpg", "height": 384, "width": 500, "date_captured": "2013-11-18 17:53:35", "flickr_url": "http://farm1.staticflickr.com/169/454107441_11235f37ff_z.jpg", "id": 128654}, {"license": 2, "file_name": "000000459195.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000459195.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 18:28:10", "flickr_url": "http://farm3.staticflickr.com/2706/4112549414_3c7033de7b_z.jpg", "id": 459195}, {"license": 3, "file_name": "000000481582.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000481582.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 20:46:28", "flickr_url": "http://farm9.staticflickr.com/8238/8520327356_09d54778c4_z.jpg", "id": 481582}, {"license": 3, "file_name": "000000227898.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000227898.jpg", "height": 424, "width": 640, "date_captured": "2013-11-19 02:52:12", "flickr_url": "http://farm9.staticflickr.com/8266/8631107019_c1ea0e6f73_z.jpg", "id": 227898}, {"license": 4, "file_name": "000000188465.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000188465.jpg", "height": 454, "width": 640, "date_captured": "2013-11-19 18:07:31", "flickr_url": "http://farm5.staticflickr.com/4034/4593328722_80576636ed_z.jpg", "id": 188465}, {"license": 3, "file_name": "000000411530.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000411530.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 18:24:42", "flickr_url": "http://farm4.staticflickr.com/3436/3398310051_3016253fa2_z.jpg", "id": 411530}, {"license": 4, "file_name": "000000191761.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000191761.jpg", "height": 375, "width": 500, "date_captured": "2013-11-19 18:25:54", "flickr_url": "http://farm1.staticflickr.com/26/63857259_7a26ba906c_z.jpg", "id": 191761}, {"license": 5, "file_name": "000000542127.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000542127.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 18:52:32", "flickr_url": "http://farm7.staticflickr.com/6084/6115890845_32c75efd47_z.jpg", "id": 542127}, {"license": 3, "file_name": "000000386277.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000386277.jpg", "height": 428, "width": 640, "date_captured": "2013-11-19 19:49:40", "flickr_url": "http://farm9.staticflickr.com/8254/8664817153_9e7d847e2b_z.jpg", "id": 386277}, {"license": 5, "file_name": "000000148707.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000148707.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 19:50:28", "flickr_url": "http://farm9.staticflickr.com/8121/8646074716_77307960e6_z.jpg", "id": 148707}, {"license": 3, "file_name": "000000130579.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000130579.jpg", "height": 640, "width": 388, "date_captured": "2013-11-19 20:00:30", "flickr_url": "http://farm3.staticflickr.com/2499/3875140835_8e8175aaa8_z.jpg", "id": 130579}, {"license": 1, "file_name": "000000451043.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000451043.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 20:31:54", "flickr_url": "http://farm9.staticflickr.com/8507/8354451509_4e66cfd3fe_z.jpg", "id": 451043}, {"license": 5, "file_name": "000000434459.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000434459.jpg", "height": 457, "width": 640, "date_captured": "2013-11-19 21:09:25", "flickr_url": "http://farm7.staticflickr.com/6102/6215222059_ab75321bd0_z.jpg", "id": 434459}, {"license": 2, "file_name": "000000552842.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000552842.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 21:27:23", "flickr_url": "http://farm2.staticflickr.com/1065/705706084_39a7f28fc9_z.jpg", "id": 552842}, {"license": 4, "file_name": "000000447522.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000447522.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 22:36:16", "flickr_url": "http://farm8.staticflickr.com/7005/6847896207_43400568d5_z.jpg", "id": 447522}, {"license": 2, "file_name": "000000190841.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000190841.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 23:44:12", "flickr_url": "http://farm7.staticflickr.com/6194/6106161903_e505cbc192_z.jpg", "id": 190841}, {"license": 3, "file_name": "000000038678.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000038678.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 00:49:13", "flickr_url": "http://farm5.staticflickr.com/4091/5004764091_119e7e1a9e_z.jpg", "id": 38678}, {"license": 6, "file_name": "000000034257.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000034257.jpg", "height": 309, "width": 500, "date_captured": "2013-11-20 01:09:17", "flickr_url": "http://farm5.staticflickr.com/4031/4274257209_4c0200d335_z.jpg", "id": 34257}, {"license": 3, "file_name": "000000161799.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000161799.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 01:15:31", "flickr_url": "http://farm8.staticflickr.com/7193/7054883049_4ccf62e49e_z.jpg", "id": 161799}, {"license": 4, "file_name": "000000350148.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000350148.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 01:38:20", "flickr_url": "http://farm4.staticflickr.com/3434/3275441569_eee9434daf_z.jpg", "id": 350148}, {"license": 2, "file_name": "000000087476.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000087476.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 04:05:13", "flickr_url": "http://farm3.staticflickr.com/2256/5805619150_a39a924e48_z.jpg", "id": 87476}, {"license": 4, "file_name": "000000490515.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000490515.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 05:35:58", "flickr_url": "http://farm5.staticflickr.com/4057/4224575445_ebe5ef59b3_z.jpg", "id": 490515}, {"license": 3, "file_name": "000000445602.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000445602.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 07:33:26", "flickr_url": "http://farm4.staticflickr.com/3358/3340242354_d04f226bd2_z.jpg", "id": 445602}, {"license": 5, "file_name": "000000037689.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000037689.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 08:36:41", "flickr_url": "http://farm7.staticflickr.com/6067/6116422514_1229d359a5_z.jpg", "id": 37689}, {"license": 2, "file_name": "000000400044.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000400044.jpg", "height": 640, "width": 483, "date_captured": "2013-11-20 12:21:21", "flickr_url": "http://farm8.staticflickr.com/7206/6930180557_371e2094e6_z.jpg", "id": 400044}, {"license": 5, "file_name": "000000210230.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000210230.jpg", "height": 457, "width": 640, "date_captured": "2013-11-20 12:25:46", "flickr_url": "http://farm8.staticflickr.com/7061/6965678017_7ff31e43fc_z.jpg", "id": 210230}, {"license": 5, "file_name": "000000468505.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000468505.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 13:09:52", "flickr_url": "http://farm4.staticflickr.com/3012/2488900788_9115057573_z.jpg", "id": 468505}, {"license": 1, "file_name": "000000551822.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000551822.jpg", "height": 453, "width": 640, "date_captured": "2013-11-20 14:20:55", "flickr_url": "http://farm9.staticflickr.com/8190/8108920806_c7fff05f4e_z.jpg", "id": 551822}, {"license": 2, "file_name": "000000080273.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000080273.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 15:04:48", "flickr_url": "http://farm1.staticflickr.com/33/98275985_995de74453_z.jpg", "id": 80273}, {"license": 2, "file_name": "000000193429.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000193429.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 15:04:51", "flickr_url": "http://farm1.staticflickr.com/32/98275650_a90c697c5c_z.jpg", "id": 193429}, {"license": 6, "file_name": "000000530146.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000530146.jpg", "height": 640, "width": 640, "date_captured": "2013-11-20 15:33:25", "flickr_url": "http://farm4.staticflickr.com/3322/5720688740_8d6e639443_z.jpg", "id": 530146}, {"license": 1, "file_name": "000000069224.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000069224.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 16:25:34", "flickr_url": "http://farm1.staticflickr.com/22/29882351_4a7e6ce8a8_z.jpg", "id": 69224}, {"license": 1, "file_name": "000000120853.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000120853.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 17:38:58", "flickr_url": "http://farm3.staticflickr.com/2504/3877426843_d19b2f772c_z.jpg", "id": 120853}, {"license": 1, "file_name": "000000256518.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000256518.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 18:53:05", "flickr_url": "http://farm4.staticflickr.com/3240/2947222492_5d464f4643_z.jpg", "id": 256518}, {"license": 2, "file_name": "000000517056.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000517056.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 19:02:14", "flickr_url": "http://farm9.staticflickr.com/8381/8679628322_a6e5f2169e_z.jpg", "id": 517056}, {"license": 4, "file_name": "000000187362.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000187362.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 20:26:05", "flickr_url": "http://farm9.staticflickr.com/8090/8521689531_c2d54d64ce_z.jpg", "id": 187362}, {"license": 2, "file_name": "000000021879.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000021879.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 21:28:12", "flickr_url": "http://farm9.staticflickr.com/8151/7548067120_49564909fc_z.jpg", "id": 21879}, {"license": 2, "file_name": "000000252701.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000252701.jpg", "height": 378, "width": 640, "date_captured": "2013-11-20 21:28:21", "flickr_url": "http://farm8.staticflickr.com/7113/7548094322_ffd9139516_z.jpg", "id": 252701}, {"license": 2, "file_name": "000000398203.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000398203.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 23:18:34", "flickr_url": "http://farm8.staticflickr.com/7063/7013073201_15bc050f2b_z.jpg", "id": 398203}, {"license": 3, "file_name": "000000518326.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000518326.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 01:14:43", "flickr_url": "http://farm9.staticflickr.com/8157/7672412148_7875809be9_z.jpg", "id": 518326}, {"license": 1, "file_name": "000000463802.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000463802.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 01:25:59", "flickr_url": "http://farm1.staticflickr.com/73/165652586_a93ac6121e_z.jpg", "id": 463802}, {"license": 2, "file_name": "000000096427.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000096427.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 02:28:38", "flickr_url": "http://farm9.staticflickr.com/8257/8666569713_ab1b559d3b_z.jpg", "id": 96427}, {"license": 4, "file_name": "000000189775.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000189775.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 02:38:33", "flickr_url": "http://farm9.staticflickr.com/8098/8534907929_2574ecdeab_z.jpg", "id": 189775}, {"license": 3, "file_name": "000000376900.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000376900.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 04:16:57", "flickr_url": "http://farm7.staticflickr.com/6027/5880793986_5f1e1d0f39_z.jpg", "id": 376900}, {"license": 4, "file_name": "000000301421.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000301421.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 19:14:07", "flickr_url": "http://farm4.staticflickr.com/3222/2511994966_2a82bf9b43_z.jpg", "id": 301421}, {"license": 2, "file_name": "000000494913.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000494913.jpg", "height": 428, "width": 640, "date_captured": "2013-11-21 20:03:59", "flickr_url": "http://farm3.staticflickr.com/2717/4223670633_7d3d72dfe8_z.jpg", "id": 494913}, {"license": 4, "file_name": "000000509824.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000509824.jpg", "height": 640, "width": 640, "date_captured": "2013-11-21 21:51:47", "flickr_url": "http://farm9.staticflickr.com/8321/7918999676_9a3971bdcf_z.jpg", "id": 509824}, {"license": 4, "file_name": "000000186282.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000186282.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 00:50:35", "flickr_url": "http://farm3.staticflickr.com/2492/5812924771_1ec43e7a40_z.jpg", "id": 186282}, {"license": 4, "file_name": "000000068765.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000068765.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 00:53:41", "flickr_url": "http://farm3.staticflickr.com/2131/1501351467_a73502f414_z.jpg", "id": 68765}, {"license": 1, "file_name": "000000359540.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000359540.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 23:03:56", "flickr_url": "http://farm2.staticflickr.com/1309/539798833_f6a0c2ee23_z.jpg", "id": 359540}, {"license": 3, "file_name": "000000427997.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000427997.jpg", "height": 428, "width": 640, "date_captured": "2013-11-23 03:36:14", "flickr_url": "http://farm4.staticflickr.com/3452/3276552667_c057631f05_z.jpg", "id": 427997}, {"license": 4, "file_name": "000000340894.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000340894.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 20:17:33", "flickr_url": "http://farm1.staticflickr.com/63/198876231_494acc23d1_z.jpg", "id": 340894}, {"license": 3, "file_name": "000000425925.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000425925.jpg", "height": 468, "width": 640, "date_captured": "2013-11-24 00:31:24", "flickr_url": "http://farm4.staticflickr.com/3649/3581870406_c2380a6df9_z.jpg", "id": 425925}, {"license": 3, "file_name": "000000174371.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000174371.jpg", "height": 511, "width": 640, "date_captured": "2013-11-24 06:15:49", "flickr_url": "http://farm4.staticflickr.com/3558/5705985324_7ac3b35104_z.jpg", "id": 174371}, {"license": 1, "file_name": "000000028285.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000028285.jpg", "height": 425, "width": 640, "date_captured": "2013-11-24 06:27:36", "flickr_url": "http://farm8.staticflickr.com/7020/6419280071_ebfc3d8777_z.jpg", "id": 28285}, {"license": 4, "file_name": "000000168883.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000168883.jpg", "height": 640, "width": 479, "date_captured": "2013-11-24 08:29:36", "flickr_url": "http://farm4.staticflickr.com/3477/4031027612_1547340e64_z.jpg", "id": 168883}, {"license": 3, "file_name": "000000207538.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000207538.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 10:08:44", "flickr_url": "http://farm4.staticflickr.com/3304/3576478883_77ba5122be_z.jpg", "id": 207538}, {"license": 4, "file_name": "000000376856.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000376856.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 12:13:34", "flickr_url": "http://farm7.staticflickr.com/6162/6251239449_c1080b30b4_z.jpg", "id": 376856}, {"license": 1, "file_name": "000000051326.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000051326.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 12:44:44", "flickr_url": "http://farm2.staticflickr.com/1250/5114278777_8f18f434ac_z.jpg", "id": 51326}, {"license": 3, "file_name": "000000391648.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000391648.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 14:45:52", "flickr_url": "http://farm9.staticflickr.com/8373/8508719657_b63fb94602_z.jpg", "id": 391648}, {"license": 3, "file_name": "000000377670.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000377670.jpg", "height": 640, "width": 487, "date_captured": "2013-11-24 15:02:40", "flickr_url": "http://farm7.staticflickr.com/6087/6040748391_508929c24c_z.jpg", "id": 377670}, {"license": 3, "file_name": "000000349480.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000349480.jpg", "height": 450, "width": 640, "date_captured": "2013-11-24 15:02:46", "flickr_url": "http://farm7.staticflickr.com/6126/6040935537_30df39c797_z.jpg", "id": 349480}, {"license": 1, "file_name": "000000328030.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000328030.jpg", "height": 640, "width": 425, "date_captured": "2013-11-24 15:16:04", "flickr_url": "http://farm3.staticflickr.com/2749/4338167892_7653ca713f_z.jpg", "id": 328030}, {"license": 6, "file_name": "000000372718.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000372718.jpg", "height": 638, "width": 640, "date_captured": "2013-11-24 20:07:39", "flickr_url": "http://farm1.staticflickr.com/45/152638600_f1bb160591_z.jpg", "id": 372718}, {"license": 3, "file_name": "000000368982.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000368982.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 20:46:07", "flickr_url": "http://farm3.staticflickr.com/2495/4079809213_3f0014af52_z.jpg", "id": 368982}, {"license": 4, "file_name": "000000356424.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000356424.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 23:39:35", "flickr_url": "http://farm9.staticflickr.com/8116/8607070980_b791deaeb4_z.jpg", "id": 356424}, {"license": 1, "file_name": "000000496571.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000496571.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 23:41:59", "flickr_url": "http://farm9.staticflickr.com/8244/8596658728_e7a850fc9a_z.jpg", "id": 496571}, {"license": 3, "file_name": "000000030828.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000030828.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 12:07:22", "flickr_url": "http://farm9.staticflickr.com/8060/8170994163_97618c620c_z.jpg", "id": 30828}, {"license": 3, "file_name": "000000512476.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000512476.jpg", "height": 426, "width": 640, "date_captured": "2013-11-14 17:00:55", "flickr_url": "http://farm1.staticflickr.com/76/210547777_32a9abd3a6_z.jpg", "id": 512476}, {"license": 4, "file_name": "000000232348.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000232348.jpg", "height": 502, "width": 640, "date_captured": "2013-11-14 18:58:29", "flickr_url": "http://farm7.staticflickr.com/6012/5926562644_dbbbe9fc2a_z.jpg", "id": 232348}, {"license": 4, "file_name": "000000365766.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000365766.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 20:39:21", "flickr_url": "http://farm8.staticflickr.com/7043/6790349696_0b347fe1ae_z.jpg", "id": 365766}, {"license": 3, "file_name": "000000445658.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000445658.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 20:49:10", "flickr_url": "http://farm9.staticflickr.com/8433/7749463448_dfa29c1ab8_z.jpg", "id": 445658}, {"license": 4, "file_name": "000000552883.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000552883.jpg", "height": 426, "width": 640, "date_captured": "2013-11-14 20:57:43", "flickr_url": "http://farm9.staticflickr.com/8221/8338626140_9b8937a193_z.jpg", "id": 552883}, {"license": 6, "file_name": "000000492077.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000492077.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 00:56:15", "flickr_url": "http://farm6.staticflickr.com/5057/5573502905_c63bf4a4d1_z.jpg", "id": 492077}, {"license": 3, "file_name": "000000383606.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000383606.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 03:11:22", "flickr_url": "http://farm6.staticflickr.com/5294/5470634709_6c68c1f1e3_z.jpg", "id": 383606}, {"license": 2, "file_name": "000000561256.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000561256.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 04:14:34", "flickr_url": "http://farm7.staticflickr.com/6161/6181554185_2535705f3d_z.jpg", "id": 561256}, {"license": 1, "file_name": "000000357737.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000357737.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 04:23:02", "flickr_url": "http://farm4.staticflickr.com/3267/2877115654_ec12cbc121_z.jpg", "id": 357737}, {"license": 3, "file_name": "000000354072.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000354072.jpg", "height": 640, "width": 359, "date_captured": "2013-11-15 06:05:40", "flickr_url": "http://farm6.staticflickr.com/5211/5502311373_ab85b2258d_z.jpg", "id": 354072}, {"license": 6, "file_name": "000000289992.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000289992.jpg", "height": 424, "width": 640, "date_captured": "2013-11-15 06:14:56", "flickr_url": "http://farm5.staticflickr.com/4007/4429827515_514dd3d5f9_z.jpg", "id": 289992}, {"license": 3, "file_name": "000000209747.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000209747.jpg", "height": 350, "width": 500, "date_captured": "2013-11-15 06:31:33", "flickr_url": "http://farm1.staticflickr.com/90/248270582_f41115367b_z.jpg", "id": 209747}, {"license": 2, "file_name": "000000365642.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000365642.jpg", "height": 640, "width": 426, "date_captured": "2013-11-15 11:27:35", "flickr_url": "http://farm6.staticflickr.com/5167/5311433626_44b802e6f9_z.jpg", "id": 365642}, {"license": 2, "file_name": "000000104803.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000104803.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 12:01:58", "flickr_url": "http://farm4.staticflickr.com/3119/2576783267_0a1154bf0a_z.jpg", "id": 104803}, {"license": 2, "file_name": "000000410878.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000410878.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 14:31:10", "flickr_url": "http://farm8.staticflickr.com/7450/9579320894_bdf4906d98_z.jpg", "id": 410878}, {"license": 1, "file_name": "000000027982.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000027982.jpg", "height": 334, "width": 500, "date_captured": "2013-11-15 14:40:44", "flickr_url": "http://farm4.staticflickr.com/3439/3799421587_f1a24cb07d_z.jpg", "id": 27982}, {"license": 2, "file_name": "000000149222.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000149222.jpg", "height": 383, "width": 500, "date_captured": "2013-11-15 15:11:24", "flickr_url": "http://farm1.staticflickr.com/23/33195394_22d605f377_z.jpg", "id": 149222}, {"license": 1, "file_name": "000000048924.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000048924.jpg", "height": 425, "width": 640, "date_captured": "2013-11-15 18:09:11", "flickr_url": "http://farm9.staticflickr.com/8344/8229072536_09045b71fa_z.jpg", "id": 48924}, {"license": 2, "file_name": "000000341058.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000341058.jpg", "height": 640, "width": 359, "date_captured": "2013-11-15 20:09:57", "flickr_url": "http://farm6.staticflickr.com/5133/5454481007_90b84cfcd8_z.jpg", "id": 341058}, {"license": 1, "file_name": "000000140420.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000140420.jpg", "height": 428, "width": 640, "date_captured": "2013-11-15 20:47:52", "flickr_url": "http://farm5.staticflickr.com/4078/4912512028_7aed39571e_z.jpg", "id": 140420}, {"license": 3, "file_name": "000000466339.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000466339.jpg", "height": 640, "width": 359, "date_captured": "2013-11-15 21:05:17", "flickr_url": "http://farm9.staticflickr.com/8015/7288852186_fe593d3525_z.jpg", "id": 466339}, {"license": 3, "file_name": "000000459634.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000459634.jpg", "height": 533, "width": 640, "date_captured": "2013-11-15 21:07:56", "flickr_url": "http://farm5.staticflickr.com/4120/4781845224_d189af8f1a_z.jpg", "id": 459634}, {"license": 1, "file_name": "000000488385.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000488385.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 21:58:55", "flickr_url": "http://farm7.staticflickr.com/6052/6243499475_cb67152d17_z.jpg", "id": 488385}, {"license": 3, "file_name": "000000566042.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000566042.jpg", "height": 333, "width": 500, "date_captured": "2013-11-16 13:09:45", "flickr_url": "http://farm1.staticflickr.com/79/263453438_6dee639216_z.jpg", "id": 566042}, {"license": 4, "file_name": "000000520009.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000520009.jpg", "height": 412, "width": 500, "date_captured": "2013-11-16 14:22:20", "flickr_url": "http://farm1.staticflickr.com/223/502213596_22f391ea0e_z.jpg", "id": 520009}, {"license": 4, "file_name": "000000362682.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000362682.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 23:00:40", "flickr_url": "http://farm9.staticflickr.com/8528/8575643656_6194a29a31_z.jpg", "id": 362682}, {"license": 2, "file_name": "000000357501.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000357501.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 00:58:30", "flickr_url": "http://farm5.staticflickr.com/4143/4913709490_69ea74c205_z.jpg", "id": 357501}, {"license": 4, "file_name": "000000098261.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000098261.jpg", "height": 216, "width": 320, "date_captured": "2013-11-17 02:23:08", "flickr_url": "http://farm6.staticflickr.com/5343/9354894019_5b5a169b2b_z.jpg", "id": 98261}, {"license": 1, "file_name": "000000396518.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000396518.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 02:57:08", "flickr_url": "http://farm3.staticflickr.com/2120/2135476444_0625b30180_z.jpg", "id": 396518}, {"license": 2, "file_name": "000000065288.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000065288.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 04:00:31", "flickr_url": "http://farm8.staticflickr.com/7352/9983465373_e4fdf49096_z.jpg", "id": 65288}, {"license": 3, "file_name": "000000207728.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000207728.jpg", "height": 373, "width": 640, "date_captured": "2013-11-17 04:07:04", "flickr_url": "http://farm5.staticflickr.com/4031/4448197630_a121867dc6_z.jpg", "id": 207728}, {"license": 4, "file_name": "000000410712.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000410712.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 04:29:10", "flickr_url": "http://farm6.staticflickr.com/5222/5604256830_b3d1d096cc_z.jpg", "id": 410712}, {"license": 1, "file_name": "000000298697.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000298697.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 05:03:22", "flickr_url": "http://farm6.staticflickr.com/5469/8835090362_7dd23c2ced_z.jpg", "id": 298697}, {"license": 3, "file_name": "000000106881.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000106881.jpg", "height": 533, "width": 640, "date_captured": "2013-11-17 05:41:27", "flickr_url": "http://farm8.staticflickr.com/7326/9466078279_5491dcf78c_z.jpg", "id": 106881}, {"license": 4, "file_name": "000000290293.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000290293.jpg", "height": 326, "width": 640, "date_captured": "2013-11-17 07:58:29", "flickr_url": "http://farm4.staticflickr.com/3683/9404882538_981609da95_z.jpg", "id": 290293}, {"license": 2, "file_name": "000000474164.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000474164.jpg", "height": 640, "width": 633, "date_captured": "2013-11-17 13:56:28", "flickr_url": "http://farm9.staticflickr.com/8027/7647651540_90f79ef771_z.jpg", "id": 474164}, {"license": 1, "file_name": "000000356612.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000356612.jpg", "height": 416, "width": 640, "date_captured": "2013-11-17 16:54:43", "flickr_url": "http://farm3.staticflickr.com/2780/4444985182_6197c4ba62_z.jpg", "id": 356612}, {"license": 2, "file_name": "000000435206.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000435206.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 18:11:57", "flickr_url": "http://farm8.staticflickr.com/7193/6969816407_5584aa0172_z.jpg", "id": 435206}, {"license": 3, "file_name": "000000106389.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000106389.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 18:34:12", "flickr_url": "http://farm5.staticflickr.com/4017/4278927665_f44d019d80_z.jpg", "id": 106389}, {"license": 1, "file_name": "000000300913.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000300913.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 19:27:41", "flickr_url": "http://farm3.staticflickr.com/2706/4357871380_f87866aa58_z.jpg", "id": 300913}, {"license": 5, "file_name": "000000416837.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000416837.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 19:43:56", "flickr_url": "http://farm7.staticflickr.com/6210/6076000352_33c4523167_z.jpg", "id": 416837}, {"license": 3, "file_name": "000000049810.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000049810.jpg", "height": 424, "width": 640, "date_captured": "2013-11-17 20:20:56", "flickr_url": "http://farm9.staticflickr.com/8110/8524218186_581f97d852_z.jpg", "id": 49810}, {"license": 1, "file_name": "000000063552.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000063552.jpg", "height": 586, "width": 640, "date_captured": "2013-11-17 20:27:13", "flickr_url": "http://farm5.staticflickr.com/4044/4395359253_be5749bf2c_z.jpg", "id": 63552}, {"license": 1, "file_name": "000000565962.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000565962.jpg", "height": 322, "width": 479, "date_captured": "2013-11-17 20:44:12", "flickr_url": "http://farm2.staticflickr.com/1193/542824026_cd0d3d5f10_z.jpg", "id": 565962}, {"license": 3, "file_name": "000000112798.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000112798.jpg", "height": 359, "width": 640, "date_captured": "2013-11-17 21:08:06", "flickr_url": "http://farm8.staticflickr.com/7247/7034440829_2aa657e64b_z.jpg", "id": 112798}, {"license": 3, "file_name": "000000217219.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000217219.jpg", "height": 359, "width": 640, "date_captured": "2013-11-18 00:08:05", "flickr_url": "http://farm7.staticflickr.com/6029/5940611821_c4bcfc0d07_z.jpg", "id": 217219}, {"license": 1, "file_name": "000000061960.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000061960.jpg", "height": 371, "width": 640, "date_captured": "2013-11-18 01:21:37", "flickr_url": "http://farm9.staticflickr.com/8134/8814022323_daa86731da_z.jpg", "id": 61960}, {"license": 2, "file_name": "000000565989.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000565989.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 01:35:58", "flickr_url": "http://farm5.staticflickr.com/4051/4645314391_09088d3d0d_z.jpg", "id": 565989}, {"license": 4, "file_name": "000000410612.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000410612.jpg", "height": 334, "width": 500, "date_captured": "2013-11-18 01:39:43", "flickr_url": "http://farm4.staticflickr.com/3644/3643964183_b8ffd64f75_z.jpg", "id": 410612}, {"license": 6, "file_name": "000000382030.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000382030.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 03:30:27", "flickr_url": "http://farm1.staticflickr.com/29/53218492_cabf325fb5_z.jpg", "id": 382030}, {"license": 2, "file_name": "000000477689.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000477689.jpg", "height": 640, "width": 459, "date_captured": "2013-11-18 04:03:27", "flickr_url": "http://farm2.staticflickr.com/1022/4726129802_89dec9a57c_z.jpg", "id": 477689}, {"license": 3, "file_name": "000000258541.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000258541.jpg", "height": 448, "width": 336, "date_captured": "2013-11-18 04:05:54", "flickr_url": "http://farm2.staticflickr.com/1264/4724245646_f1b0d7b0cf_z.jpg", "id": 258541}, {"license": 4, "file_name": "000000268375.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000268375.jpg", "height": 424, "width": 640, "date_captured": "2013-11-18 04:07:42", "flickr_url": "http://farm4.staticflickr.com/3756/9231934413_6ac5024915_z.jpg", "id": 268375}, {"license": 3, "file_name": "000000423506.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000423506.jpg", "height": 500, "width": 375, "date_captured": "2013-11-18 06:05:33", "flickr_url": "http://farm4.staticflickr.com/3076/3142744790_5672411db8_z.jpg", "id": 423506}, {"license": 5, "file_name": "000000510329.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000510329.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 10:11:55", "flickr_url": "http://farm8.staticflickr.com/7194/6992041145_6ef64c576b_z.jpg", "id": 510329}, {"license": 4, "file_name": "000000139872.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000139872.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 10:24:37", "flickr_url": "http://farm1.staticflickr.com/92/260183330_494bd996d8_z.jpg", "id": 139872}, {"license": 1, "file_name": "000000308328.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000308328.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 10:33:28", "flickr_url": "http://farm8.staticflickr.com/7012/6703946359_4a9c6d09c7_z.jpg", "id": 308328}, {"license": 4, "file_name": "000000339823.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000339823.jpg", "height": 640, "width": 484, "date_captured": "2013-11-18 11:40:45", "flickr_url": "http://farm6.staticflickr.com/5023/5596623597_042b2c2ded_z.jpg", "id": 339823}, {"license": 3, "file_name": "000000055150.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000055150.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 11:48:35", "flickr_url": "http://farm8.staticflickr.com/7163/6638148073_a91ffcb62e_z.jpg", "id": 55150}, {"license": 4, "file_name": "000000089880.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000089880.jpg", "height": 281, "width": 500, "date_captured": "2013-11-18 11:52:07", "flickr_url": "http://farm4.staticflickr.com/3353/3424594672_333e3ee522_z.jpg", "id": 89880}, {"license": 2, "file_name": "000000082807.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000082807.jpg", "height": 601, "width": 640, "date_captured": "2013-11-18 12:23:52", "flickr_url": "http://farm3.staticflickr.com/2452/3587602779_f549d14135_z.jpg", "id": 82807}, {"license": 3, "file_name": "000000323799.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000323799.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 13:22:01", "flickr_url": "http://farm1.staticflickr.com/179/478513970_8c7e333bba_z.jpg", "id": 323799}, {"license": 3, "file_name": "000000104603.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000104603.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 14:07:04", "flickr_url": "http://farm8.staticflickr.com/7110/7578347712_6693e227d9_z.jpg", "id": 104603}, {"license": 3, "file_name": "000000312586.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000312586.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 14:07:07", "flickr_url": "http://farm9.staticflickr.com/8159/7578348138_5c0ecbdaf4_z.jpg", "id": 312586}, {"license": 1, "file_name": "000000352582.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000352582.jpg", "height": 640, "width": 425, "date_captured": "2013-11-18 15:16:27", "flickr_url": "http://farm5.staticflickr.com/4088/4842695193_fae488012f_z.jpg", "id": 352582}, {"license": 1, "file_name": "000000250758.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000250758.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 19:14:19", "flickr_url": "http://farm4.staticflickr.com/3426/3926593391_0e8ab7c23c_z.jpg", "id": 250758}, {"license": 1, "file_name": "000000166747.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000166747.jpg", "height": 500, "width": 375, "date_captured": "2013-11-18 21:35:29", "flickr_url": "http://farm1.staticflickr.com/40/95007209_282a76c8d8_z.jpg", "id": 166747}, {"license": 2, "file_name": "000000012748.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000012748.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 01:51:12", "flickr_url": "http://farm8.staticflickr.com/7295/9090127695_6dc690f776_z.jpg", "id": 12748}, {"license": 5, "file_name": "000000079014.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000079014.jpg", "height": 455, "width": 291, "date_captured": "2013-11-19 19:13:59", "flickr_url": "http://farm3.staticflickr.com/2258/2269567997_08065fe404_z.jpg", "id": 79014}, {"license": 2, "file_name": "000000279769.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000279769.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 20:05:16", "flickr_url": "http://farm9.staticflickr.com/8519/8550349792_d50f58a3a5_z.jpg", "id": 279769}, {"license": 3, "file_name": "000000060886.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000060886.jpg", "height": 333, "width": 500, "date_captured": "2013-11-19 20:26:30", "flickr_url": "http://farm4.staticflickr.com/3316/3523603045_e8cfc7ec59_z.jpg", "id": 60886}, {"license": 5, "file_name": "000000008844.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000008844.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 20:32:36", "flickr_url": "http://farm7.staticflickr.com/6109/6283843124_f4091ce78a_z.jpg", "id": 8844}, {"license": 1, "file_name": "000000108495.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000108495.jpg", "height": 500, "width": 333, "date_captured": "2013-11-19 22:11:42", "flickr_url": "http://farm3.staticflickr.com/2786/4463421347_1e334c85c0_z.jpg", "id": 108495}, {"license": 3, "file_name": "000000438955.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000438955.jpg", "height": 303, "width": 640, "date_captured": "2013-11-19 22:24:05", "flickr_url": "http://farm6.staticflickr.com/5252/5506462270_d9b520b1b6_z.jpg", "id": 438955}, {"license": 1, "file_name": "000000421060.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000421060.jpg", "height": 418, "width": 640, "date_captured": "2013-11-19 23:46:41", "flickr_url": "http://farm5.staticflickr.com/4032/4576291926_f0b6eae164_z.jpg", "id": 421060}, {"license": 3, "file_name": "000000007977.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000007977.jpg", "height": 640, "width": 429, "date_captured": "2013-11-20 00:12:43", "flickr_url": "http://farm3.staticflickr.com/2886/9921714023_4924210a15_z.jpg", "id": 7977}, {"license": 2, "file_name": "000000489924.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000489924.jpg", "height": 612, "width": 612, "date_captured": "2013-11-20 00:46:45", "flickr_url": "http://farm9.staticflickr.com/8218/8279522358_496522b2e2_z.jpg", "id": 489924}, {"license": 2, "file_name": "000000231822.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000231822.jpg", "height": 361, "width": 500, "date_captured": "2013-11-20 01:30:43", "flickr_url": "http://farm4.staticflickr.com/3095/2303311990_650312b750_z.jpg", "id": 231822}, {"license": 1, "file_name": "000000015597.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000015597.jpg", "height": 640, "width": 433, "date_captured": "2013-11-20 01:36:59", "flickr_url": "http://farm7.staticflickr.com/6128/5960989557_660cd5f173_z.jpg", "id": 15597}, {"license": 1, "file_name": "000000528314.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000528314.jpg", "height": 640, "width": 423, "date_captured": "2013-11-20 04:11:16", "flickr_url": "http://farm5.staticflickr.com/4030/4379800289_e8b928419d_z.jpg", "id": 528314}, {"license": 2, "file_name": "000000401250.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000401250.jpg", "height": 332, "width": 640, "date_captured": "2013-11-20 04:24:43", "flickr_url": "http://farm3.staticflickr.com/2731/4354193510_c1a71d07de_z.jpg", "id": 401250}, {"license": 3, "file_name": "000000072281.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000072281.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 04:24:48", "flickr_url": "http://farm6.staticflickr.com/5095/5591246593_5e6521cda2_z.jpg", "id": 72281}, {"license": 4, "file_name": "000000111207.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000111207.jpg", "height": 640, "width": 478, "date_captured": "2013-11-20 05:35:08", "flickr_url": "http://farm5.staticflickr.com/4143/4786676935_209abc2a42_z.jpg", "id": 111207}, {"license": 3, "file_name": "000000129812.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000129812.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 05:54:59", "flickr_url": "http://farm3.staticflickr.com/2629/4163648700_2019e6e893_z.jpg", "id": 129812}, {"license": 1, "file_name": "000000336209.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000336209.jpg", "height": 432, "width": 640, "date_captured": "2013-11-20 06:14:10", "flickr_url": "http://farm3.staticflickr.com/2780/4474106532_44119cdb8c_z.jpg", "id": 336209}, {"license": 1, "file_name": "000000558213.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000558213.jpg", "height": 432, "width": 640, "date_captured": "2013-11-20 06:14:13", "flickr_url": "http://farm3.staticflickr.com/2685/4473330483_cf0a03b782_z.jpg", "id": 558213}, {"license": 3, "file_name": "000000492968.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000492968.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 12:18:56", "flickr_url": "http://farm8.staticflickr.com/7184/6903986457_f92d4ac7d0_z.jpg", "id": 492968}, {"license": 1, "file_name": "000000023359.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000023359.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 13:10:49", "flickr_url": "http://farm4.staticflickr.com/3383/3485274265_d6287a2648_z.jpg", "id": 23359}, {"license": 4, "file_name": "000000063047.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000063047.jpg", "height": 561, "width": 640, "date_captured": "2013-11-20 13:24:08", "flickr_url": "http://farm2.staticflickr.com/1104/823971263_ac4677ca84_z.jpg", "id": 63047}, {"license": 1, "file_name": "000000377814.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000377814.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 14:29:13", "flickr_url": "http://farm9.staticflickr.com/8535/8644281507_4834ff203c_z.jpg", "id": 377814}, {"license": 1, "file_name": "000000426376.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000426376.jpg", "height": 640, "width": 467, "date_captured": "2013-11-20 14:57:32", "flickr_url": "http://farm1.staticflickr.com/55/119284155_671fda65ed_z.jpg", "id": 426376}, {"license": 5, "file_name": "000000364884.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000364884.jpg", "height": 354, "width": 500, "date_captured": "2013-11-20 15:00:48", "flickr_url": "http://farm1.staticflickr.com/41/102170614_3fe1c91d13_z.jpg", "id": 364884}, {"license": 3, "file_name": "000000132544.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000132544.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 17:32:18", "flickr_url": "http://farm2.staticflickr.com/1401/639092756_9c5501450b_z.jpg", "id": 132544}, {"license": 2, "file_name": "000000327592.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000327592.jpg", "height": 361, "width": 640, "date_captured": "2013-11-20 20:16:19", "flickr_url": "http://farm4.staticflickr.com/3730/8950636125_63e2619c16_z.jpg", "id": 327592}, {"license": 1, "file_name": "000000108503.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000108503.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 20:18:22", "flickr_url": "http://farm9.staticflickr.com/8256/8652482819_6426f159d7_z.jpg", "id": 108503}, {"license": 1, "file_name": "000000243199.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000243199.jpg", "height": 333, "width": 500, "date_captured": "2013-11-20 21:23:03", "flickr_url": "http://farm3.staticflickr.com/2240/2387644046_73cfeb9216_z.jpg", "id": 243199}, {"license": 3, "file_name": "000000567011.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000567011.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 22:45:16", "flickr_url": "http://farm7.staticflickr.com/6186/6160889505_e0564c36a4_z.jpg", "id": 567011}, {"license": 4, "file_name": "000000483050.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000483050.jpg", "height": 478, "width": 640, "date_captured": "2013-11-21 00:16:00", "flickr_url": "http://farm3.staticflickr.com/2822/8961706297_751cde22ee_z.jpg", "id": 483050}, {"license": 3, "file_name": "000000121586.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000121586.jpg", "height": 478, "width": 640, "date_captured": "2013-11-21 01:45:51", "flickr_url": "http://farm9.staticflickr.com/8383/8668832552_c79b561d5f_z.jpg", "id": 121586}, {"license": 1, "file_name": "000000292024.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000292024.jpg", "height": 612, "width": 612, "date_captured": "2013-11-21 01:53:26", "flickr_url": "http://farm9.staticflickr.com/8059/8287537361_70457bd6d0_z.jpg", "id": 292024}, {"license": 3, "file_name": "000000302030.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000302030.jpg", "height": 359, "width": 640, "date_captured": "2013-11-21 02:05:33", "flickr_url": "http://farm8.staticflickr.com/7105/6911466610_534bb11322_z.jpg", "id": 302030}, {"license": 1, "file_name": "000000104424.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000104424.jpg", "height": 640, "width": 424, "date_captured": "2013-11-21 04:02:43", "flickr_url": "http://farm7.staticflickr.com/6191/6092305777_faf074a3cd_z.jpg", "id": 104424}, {"license": 2, "file_name": "000000563281.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000563281.jpg", "height": 500, "width": 489, "date_captured": "2013-11-21 20:04:31", "flickr_url": "http://farm3.staticflickr.com/2416/2238628414_cbe1f23da7_z.jpg", "id": 563281}, {"license": 2, "file_name": "000000325483.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000325483.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 00:00:01", "flickr_url": "http://farm1.staticflickr.com/131/358726119_3c58d0cf9c_z.jpg", "id": 325483}, {"license": 2, "file_name": "000000324258.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000324258.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 00:00:07", "flickr_url": "http://farm1.staticflickr.com/140/358725539_3bfbd1bdf6_z.jpg", "id": 324258}, {"license": 4, "file_name": "000000277197.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000277197.jpg", "height": 416, "width": 600, "date_captured": "2013-11-22 00:07:50", "flickr_url": "http://farm5.staticflickr.com/4110/5016175615_cc6c050115_z.jpg", "id": 277197}, {"license": 4, "file_name": "000000532901.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000532901.jpg", "height": 354, "width": 600, "date_captured": "2013-11-22 00:15:40", "flickr_url": "http://farm5.staticflickr.com/4101/4920234252_69bb1ebde2_z.jpg", "id": 532901}, {"license": 1, "file_name": "000000046031.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000046031.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 01:01:08", "flickr_url": "http://farm3.staticflickr.com/2535/5770785368_498d2c0f00_z.jpg", "id": 46031}, {"license": 5, "file_name": "000000189820.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000189820.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 01:07:08", "flickr_url": "http://farm1.staticflickr.com/23/32908206_2fa869b5bf_z.jpg", "id": 189820}, {"license": 1, "file_name": "000000195754.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000195754.jpg", "height": 425, "width": 640, "date_captured": "2013-11-22 01:16:21", "flickr_url": "http://farm3.staticflickr.com/2660/4199284418_9532e4fe84_z.jpg", "id": 195754}, {"license": 1, "file_name": "000000315219.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000315219.jpg", "height": 500, "width": 333, "date_captured": "2013-11-22 19:42:08", "flickr_url": "http://farm1.staticflickr.com/21/30863591_bbd149445f_z.jpg", "id": 315219}, {"license": 4, "file_name": "000000559348.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000559348.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 21:45:02", "flickr_url": "http://farm1.staticflickr.com/232/444593491_4569474ab4_z.jpg", "id": 559348}, {"license": 2, "file_name": "000000276804.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000276804.jpg", "height": 640, "width": 512, "date_captured": "2013-11-22 22:24:49", "flickr_url": "http://farm5.staticflickr.com/4095/4734784279_8f75598e76_z.jpg", "id": 276804}, {"license": 2, "file_name": "000000427256.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000427256.jpg", "height": 512, "width": 640, "date_captured": "2013-11-22 23:57:05", "flickr_url": "http://farm6.staticflickr.com/5450/9860361083_5d5601c930_z.jpg", "id": 427256}, {"license": 4, "file_name": "000000434479.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000434479.jpg", "height": 426, "width": 640, "date_captured": "2013-11-23 04:22:38", "flickr_url": "http://farm4.staticflickr.com/3517/3752160367_928fef7d3f_z.jpg", "id": 434479}, {"license": 2, "file_name": "000000208363.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000208363.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 04:34:07", "flickr_url": "http://farm3.staticflickr.com/2505/3711342158_1ceb746868_z.jpg", "id": 208363}, {"license": 5, "file_name": "000000087742.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000087742.jpg", "height": 500, "width": 400, "date_captured": "2013-11-23 18:18:42", "flickr_url": "http://farm4.staticflickr.com/3568/3781124234_cbc6ee37af_z.jpg", "id": 87742}, {"license": 1, "file_name": "000000486040.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000486040.jpg", "height": 640, "width": 480, "date_captured": "2013-11-23 20:02:48", "flickr_url": "http://farm5.staticflickr.com/4118/4932121994_94daaf6998_z.jpg", "id": 486040}, {"license": 4, "file_name": "000000206218.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000206218.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 00:35:32", "flickr_url": "http://farm8.staticflickr.com/7223/7161410855_58ae7f38c2_z.jpg", "id": 206218}, {"license": 1, "file_name": "000000482970.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000482970.jpg", "height": 360, "width": 640, "date_captured": "2013-11-24 04:10:33", "flickr_url": "http://farm4.staticflickr.com/3403/3583936748_38bb6e5977_z.jpg", "id": 482970}, {"license": 6, "file_name": "000000326970.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000326970.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 06:25:16", "flickr_url": "http://farm5.staticflickr.com/4099/4856229319_18d90389c3_z.jpg", "id": 326970}, {"license": 1, "file_name": "000000478420.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000478420.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 06:53:09", "flickr_url": "http://farm2.staticflickr.com/1106/3165233562_12ffd67eb3_z.jpg", "id": 478420}, {"license": 2, "file_name": "000000411754.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000411754.jpg", "height": 240, "width": 320, "date_captured": "2013-11-24 06:54:58", "flickr_url": "http://farm4.staticflickr.com/3202/3131337842_e81f5d28a0_z.jpg", "id": 411754}, {"license": 6, "file_name": "000000369503.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000369503.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 10:18:11", "flickr_url": "http://farm4.staticflickr.com/3524/3907844497_4c95d19252_z.jpg", "id": 369503}, {"license": 6, "file_name": "000000000802.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000000802.jpg", "height": 640, "width": 424, "date_captured": "2013-11-24 10:59:09", "flickr_url": "http://farm5.staticflickr.com/4031/4430589002_88e591d3e9_z.jpg", "id": 802}, {"license": 1, "file_name": "000000456662.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000456662.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 11:23:55", "flickr_url": "http://farm9.staticflickr.com/8306/7964283154_ba690b26f2_z.jpg", "id": 456662}, {"license": 5, "file_name": "000000525286.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000525286.jpg", "height": 640, "width": 640, "date_captured": "2013-11-24 12:37:03", "flickr_url": "http://farm7.staticflickr.com/6043/6283834311_9086e17c62_z.jpg", "id": 525286}, {"license": 1, "file_name": "000000330554.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000330554.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 12:43:07", "flickr_url": "http://farm4.staticflickr.com/3081/3162715076_253f58f6f2_z.jpg", "id": 330554}, {"license": 2, "file_name": "000000530457.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000530457.jpg", "height": 640, "width": 482, "date_captured": "2013-11-24 20:05:49", "flickr_url": "http://farm1.staticflickr.com/109/384605623_e199bb95d9_z.jpg", "id": 530457}, {"license": 2, "file_name": "000000375078.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000375078.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 20:19:31", "flickr_url": "http://farm3.staticflickr.com/2654/4194917648_3f024ec755_z.jpg", "id": 375078}, {"license": 5, "file_name": "000000500716.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000500716.jpg", "height": 500, "width": 445, "date_captured": "2013-11-24 20:50:48", "flickr_url": "http://farm4.staticflickr.com/3219/2964818526_0dc07ea4cf_z.jpg", "id": 500716}, {"license": 5, "file_name": "000000411938.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000411938.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 21:53:52", "flickr_url": "http://farm6.staticflickr.com/5301/5694283812_1ba30885f9_z.jpg", "id": 411938}, {"license": 3, "file_name": "000000257169.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000257169.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 22:08:17", "flickr_url": "http://farm6.staticflickr.com/5117/6908233010_b3e53e55bd_z.jpg", "id": 257169}, {"license": 1, "file_name": "000000173091.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000173091.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 22:39:16", "flickr_url": "http://farm3.staticflickr.com/2884/9549240337_6b0d2f9d0e_z.jpg", "id": 173091}, {"license": 5, "file_name": "000000418062.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000418062.jpg", "height": 640, "width": 427, "date_captured": "2013-11-25 19:25:33", "flickr_url": "http://farm8.staticflickr.com/7052/7003361838_ae193e2c8a_z.jpg", "id": 418062}, {"license": 3, "file_name": "000000091615.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000091615.jpg", "height": 425, "width": 640, "date_captured": "2013-11-14 20:45:15", "flickr_url": "http://farm9.staticflickr.com/8321/7998417187_7280db6246_z.jpg", "id": 91615}, {"license": 4, "file_name": "000000489339.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000489339.jpg", "height": 640, "width": 426, "date_captured": "2013-11-14 20:53:06", "flickr_url": "http://farm1.staticflickr.com/97/249872317_5e2cb4e38c_z.jpg", "id": 489339}, {"license": 3, "file_name": "000000302760.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000302760.jpg", "height": 375, "width": 500, "date_captured": "2013-11-14 23:21:26", "flickr_url": "http://farm5.staticflickr.com/4007/4245908434_1c8f10da61_z.jpg", "id": 302760}, {"license": 3, "file_name": "000000489091.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000489091.jpg", "height": 448, "width": 336, "date_captured": "2013-11-14 23:27:58", "flickr_url": "http://farm3.staticflickr.com/2493/4193566442_35a0ec229a_z.jpg", "id": 489091}, {"license": 3, "file_name": "000000383443.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000383443.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 23:30:09", "flickr_url": "http://farm6.staticflickr.com/5218/5506865830_d27e14530a_z.jpg", "id": 383443}, {"license": 3, "file_name": "000000268831.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000268831.jpg", "height": 200, "width": 256, "date_captured": "2013-11-15 00:01:53", "flickr_url": "http://farm4.staticflickr.com/3515/3796887732_d5797e30d1_z.jpg", "id": 268831}, {"license": 4, "file_name": "000000023666.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000023666.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 01:55:41", "flickr_url": "http://farm7.staticflickr.com/6065/6050612972_020a8bb7da_z.jpg", "id": 23666}, {"license": 3, "file_name": "000000006213.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000006213.jpg", "height": 425, "width": 640, "date_captured": "2013-11-15 05:31:20", "flickr_url": "http://farm5.staticflickr.com/4125/5017756293_599d3a4291_z.jpg", "id": 6213}, {"license": 1, "file_name": "000000560474.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000560474.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 08:58:33", "flickr_url": "http://farm3.staticflickr.com/2882/9199779291_d2d706e1f8_z.jpg", "id": 560474}, {"license": 3, "file_name": "000000380706.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000380706.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 13:17:28", "flickr_url": "http://farm8.staticflickr.com/7056/6935993427_915fcc3b3b_z.jpg", "id": 380706}, {"license": 6, "file_name": "000000304560.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000304560.jpg", "height": 425, "width": 640, "date_captured": "2013-11-15 13:26:32", "flickr_url": "http://farm8.staticflickr.com/7182/6837524432_e0b7846d9a_z.jpg", "id": 304560}, {"license": 6, "file_name": "000000312340.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000312340.jpg", "height": 425, "width": 640, "date_captured": "2013-11-15 13:27:40", "flickr_url": "http://farm8.staticflickr.com/7006/6608911765_814edab492_z.jpg", "id": 312340}, {"license": 1, "file_name": "000000175387.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000175387.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 13:55:10", "flickr_url": "http://farm1.staticflickr.com/250/516487875_cd74adf70a_z.jpg", "id": 175387}, {"license": 6, "file_name": "000000184762.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000184762.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 14:17:07", "flickr_url": "http://farm1.staticflickr.com/208/440978855_7715a23f5e_z.jpg", "id": 184762}, {"license": 6, "file_name": "000000136715.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000136715.jpg", "height": 425, "width": 640, "date_captured": "2013-11-15 17:39:48", "flickr_url": "http://farm9.staticflickr.com/8186/8366230936_7b5da87647_z.jpg", "id": 136715}, {"license": 4, "file_name": "000000553094.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000553094.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 02:09:51", "flickr_url": "http://farm8.staticflickr.com/7206/6900911875_109313c9a8_z.jpg", "id": 553094}, {"license": 4, "file_name": "000000479912.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000479912.jpg", "height": 640, "width": 478, "date_captured": "2013-11-16 02:14:41", "flickr_url": "http://farm8.staticflickr.com/7164/6754205289_c601f79a44_z.jpg", "id": 479912}, {"license": 4, "file_name": "000000214205.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000214205.jpg", "height": 439, "width": 640, "date_captured": "2013-11-16 02:26:12", "flickr_url": "http://farm7.staticflickr.com/6105/6349058853_36de894aa1_z.jpg", "id": 214205}, {"license": 4, "file_name": "000000495054.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000495054.jpg", "height": 433, "width": 640, "date_captured": "2013-11-16 04:03:19", "flickr_url": "http://farm3.staticflickr.com/2662/3697328838_11da7136fc_z.jpg", "id": 495054}, {"license": 3, "file_name": "000000167540.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000167540.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 04:09:03", "flickr_url": "http://farm6.staticflickr.com/5220/5539796199_99928e0ed0_z.jpg", "id": 167540}, {"license": 1, "file_name": "000000543528.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000543528.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 04:39:37", "flickr_url": "http://farm6.staticflickr.com/5281/5228755585_b530ba0910_z.jpg", "id": 543528}, {"license": 1, "file_name": "000000424776.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000424776.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 12:53:19", "flickr_url": "http://farm9.staticflickr.com/8510/8551983235_09b40e3679_z.jpg", "id": 424776}, {"license": 6, "file_name": "000000162858.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000162858.jpg", "height": 640, "width": 428, "date_captured": "2013-11-16 13:34:00", "flickr_url": "http://farm4.staticflickr.com/3561/3357404611_4c15a8072b_z.jpg", "id": 162858}, {"license": 6, "file_name": "000000255917.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000255917.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 13:35:27", "flickr_url": "http://farm4.staticflickr.com/3455/3358220014_8360b11372_z.jpg", "id": 255917}, {"license": 4, "file_name": "000000232538.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000232538.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 13:51:58", "flickr_url": "http://farm8.staticflickr.com/7449/8715912958_4fb0196877_z.jpg", "id": 232538}, {"license": 4, "file_name": "000000013348.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000013348.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 14:52:33", "flickr_url": "http://farm9.staticflickr.com/8286/7733450942_0da3e941b4_z.jpg", "id": 13348}, {"license": 1, "file_name": "000000545594.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000545594.jpg", "height": 512, "width": 640, "date_captured": "2013-11-16 16:51:07", "flickr_url": "http://farm4.staticflickr.com/3096/4553848528_46ff69a425_z.jpg", "id": 545594}, {"license": 3, "file_name": "000000303908.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000303908.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 16:52:21", "flickr_url": "http://farm9.staticflickr.com/8173/8058661860_20e65ed4e9_z.jpg", "id": 303908}, {"license": 2, "file_name": "000000420472.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000420472.jpg", "height": 373, "width": 640, "date_captured": "2013-11-16 17:05:41", "flickr_url": "http://farm9.staticflickr.com/8307/7769267686_0061626127_z.jpg", "id": 420472}, {"license": 4, "file_name": "000000076416.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000076416.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 17:06:51", "flickr_url": "http://farm9.staticflickr.com/8478/8225218510_04ff392494_z.jpg", "id": 76416}, {"license": 4, "file_name": "000000531036.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000531036.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 17:18:51", "flickr_url": "http://farm8.staticflickr.com/7288/8740762571_0849912a06_z.jpg", "id": 531036}, {"license": 4, "file_name": "000000098392.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000098392.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 17:30:52", "flickr_url": "http://farm3.staticflickr.com/2502/4159425709_43b95a16d7_z.jpg", "id": 98392}, {"license": 4, "file_name": "000000142472.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000142472.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 17:57:20", "flickr_url": "http://farm8.staticflickr.com/7274/7871818696_6bf4905675_z.jpg", "id": 142472}, {"license": 4, "file_name": "000000516143.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000516143.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 18:41:48", "flickr_url": "http://farm8.staticflickr.com/7103/7209556862_8431c062d7_z.jpg", "id": 516143}, {"license": 3, "file_name": "000000042628.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000042628.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 21:18:20", "flickr_url": "http://farm6.staticflickr.com/5209/5298458060_5d94fa45fa_z.jpg", "id": 42628}, {"license": 2, "file_name": "000000369442.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000369442.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 22:15:27", "flickr_url": "http://farm8.staticflickr.com/7164/6758722887_d76840c31f_z.jpg", "id": 369442}, {"license": 1, "file_name": "000000523194.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000523194.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 22:43:30", "flickr_url": "http://farm5.staticflickr.com/4094/4903015085_50b5cf1a37_z.jpg", "id": 523194}, {"license": 3, "file_name": "000000213593.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000213593.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 01:03:19", "flickr_url": "http://farm5.staticflickr.com/4053/4361110375_398d18c063_z.jpg", "id": 213593}, {"license": 6, "file_name": "000000151657.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000151657.jpg", "height": 640, "width": 385, "date_captured": "2013-11-17 02:30:15", "flickr_url": "http://farm7.staticflickr.com/6144/5992071629_6997d913d0_z.jpg", "id": 151657}, {"license": 4, "file_name": "000000495146.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000495146.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 03:29:05", "flickr_url": "http://farm8.staticflickr.com/7375/9211776644_83a3bd9c9b_z.jpg", "id": 495146}, {"license": 4, "file_name": "000000134722.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000134722.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 05:06:24", "flickr_url": "http://farm9.staticflickr.com/8232/8438802190_85318071b3_z.jpg", "id": 134722}, {"license": 4, "file_name": "000000184400.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000184400.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 05:10:00", "flickr_url": "http://farm8.staticflickr.com/7353/9326233603_e2ef80a292_z.jpg", "id": 184400}, {"license": 4, "file_name": "000000478286.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000478286.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 05:10:03", "flickr_url": "http://farm6.staticflickr.com/5546/9326230117_32c0dfc942_z.jpg", "id": 478286}, {"license": 4, "file_name": "000000217400.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000217400.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 06:27:12", "flickr_url": "http://farm4.staticflickr.com/3701/9998539994_ed1c0167e4_z.jpg", "id": 217400}, {"license": 4, "file_name": "000000252332.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000252332.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 08:29:48", "flickr_url": "http://farm6.staticflickr.com/5261/5836914735_bef9249442_z.jpg", "id": 252332}, {"license": 1, "file_name": "000000519338.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000519338.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 08:36:12", "flickr_url": "http://farm6.staticflickr.com/5347/9230475462_240f715ee2_z.jpg", "id": 519338}, {"license": 4, "file_name": "000000352491.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000352491.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 10:15:21", "flickr_url": "http://farm8.staticflickr.com/7353/8718754642_a4e8145838_z.jpg", "id": 352491}, {"license": 4, "file_name": "000000377882.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000377882.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 10:27:05", "flickr_url": "http://farm6.staticflickr.com/5226/5688458390_882206498d_z.jpg", "id": 377882}, {"license": 4, "file_name": "000000064495.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000064495.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 11:22:15", "flickr_url": "http://farm6.staticflickr.com/5014/5438937895_4f1492f2d9_z.jpg", "id": 64495}, {"license": 1, "file_name": "000000197528.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000197528.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 20:46:51", "flickr_url": "http://farm8.staticflickr.com/7059/6831704362_4173ed7d1a_z.jpg", "id": 197528}, {"license": 5, "file_name": "000000222863.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000222863.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 23:45:32", "flickr_url": "http://farm7.staticflickr.com/6006/5930505833_3bdbbd21b8_z.jpg", "id": 222863}, {"license": 6, "file_name": "000000313454.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000313454.jpg", "height": 388, "width": 640, "date_captured": "2013-11-18 00:39:42", "flickr_url": "http://farm9.staticflickr.com/8011/6988791700_ee11a45b64_z.jpg", "id": 313454}, {"license": 2, "file_name": "000000229221.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000229221.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 00:49:33", "flickr_url": "http://farm5.staticflickr.com/4036/5132031170_c9844001f5_z.jpg", "id": 229221}, {"license": 6, "file_name": "000000020571.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000020571.jpg", "height": 640, "width": 539, "date_captured": "2013-11-18 02:19:09", "flickr_url": "http://farm4.staticflickr.com/3817/9480557162_281c81c07b_z.jpg", "id": 20571}, {"license": 6, "file_name": "000000004134.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000004134.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 02:54:21", "flickr_url": "http://farm9.staticflickr.com/8154/6988791438_9f55dc7073_z.jpg", "id": 4134}, {"license": 4, "file_name": "000000230362.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000230362.jpg", "height": 478, "width": 640, "date_captured": "2013-11-18 03:22:33", "flickr_url": "http://farm8.staticflickr.com/7441/10326362663_c59dffe12b_z.jpg", "id": 230362}, {"license": 2, "file_name": "000000162543.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000162543.jpg", "height": 360, "width": 640, "date_captured": "2013-11-18 03:36:22", "flickr_url": "http://farm8.staticflickr.com/7428/9694275853_3b18e66506_z.jpg", "id": 162543}, {"license": 6, "file_name": "000000007108.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000007108.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 07:51:11", "flickr_url": "http://farm6.staticflickr.com/5018/5550084353_1e556cbe11_z.jpg", "id": 7108}, {"license": 1, "file_name": "000000215072.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000215072.jpg", "height": 451, "width": 640, "date_captured": "2013-11-18 11:45:17", "flickr_url": "http://farm2.staticflickr.com/1117/5100437437_a6d173e252_z.jpg", "id": 215072}, {"license": 3, "file_name": "000000223955.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000223955.jpg", "height": 333, "width": 500, "date_captured": "2013-11-18 16:08:26", "flickr_url": "http://farm3.staticflickr.com/2502/3901195018_9fc3528e68_z.jpg", "id": 223955}, {"license": 3, "file_name": "000000269316.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000269316.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 16:32:39", "flickr_url": "http://farm4.staticflickr.com/3538/3315777653_f8b5f0370c_z.jpg", "id": 269316}, {"license": 1, "file_name": "000000001818.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000001818.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 17:27:54", "flickr_url": "http://farm9.staticflickr.com/8436/7923308928_2f92f0a111_z.jpg", "id": 1818}, {"license": 3, "file_name": "000000391290.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000391290.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 18:09:11", "flickr_url": "http://farm1.staticflickr.com/70/153337237_5556b7ab15_z.jpg", "id": 391290}, {"license": 6, "file_name": "000000479596.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000479596.jpg", "height": 428, "width": 640, "date_captured": "2013-11-19 18:38:04", "flickr_url": "http://farm3.staticflickr.com/2421/3846708201_b3959340b9_z.jpg", "id": 479596}, {"license": 6, "file_name": "000000132931.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000132931.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 19:44:12", "flickr_url": "http://farm5.staticflickr.com/4038/4660132702_7dccd4fc9b_z.jpg", "id": 132931}, {"license": 6, "file_name": "000000153669.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000153669.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 19:44:15", "flickr_url": "http://farm5.staticflickr.com/4023/4659511777_06fdc54df9_z.jpg", "id": 153669}, {"license": 3, "file_name": "000000434548.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000434548.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 20:04:55", "flickr_url": "http://farm4.staticflickr.com/3472/3758010019_2c55f68cc8_z.jpg", "id": 434548}, {"license": 4, "file_name": "000000556158.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000556158.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 20:35:11", "flickr_url": "http://farm9.staticflickr.com/8491/8308083760_2c42047b3e_z.jpg", "id": 556158}, {"license": 2, "file_name": "000000157138.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000157138.jpg", "height": 353, "width": 500, "date_captured": "2013-11-19 21:08:13", "flickr_url": "http://farm5.staticflickr.com/4072/4327008190_e3157517ce_z.jpg", "id": 157138}, {"license": 4, "file_name": "000000407002.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000407002.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 21:22:57", "flickr_url": "http://farm8.staticflickr.com/7156/6842071389_bd9154b1e1_z.jpg", "id": 407002}, {"license": 4, "file_name": "000000439290.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000439290.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 21:27:44", "flickr_url": "http://farm3.staticflickr.com/2798/4080153258_198168e787_z.jpg", "id": 439290}, {"license": 6, "file_name": "000000493442.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000493442.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 21:33:03", "flickr_url": "http://farm8.staticflickr.com/7165/6716738577_16dcee22a9_z.jpg", "id": 493442}, {"license": 6, "file_name": "000000559160.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000559160.jpg", "height": 640, "width": 429, "date_captured": "2013-11-19 22:00:15", "flickr_url": "http://farm4.staticflickr.com/3568/3588514598_855357b042_z.jpg", "id": 559160}, {"license": 3, "file_name": "000000186042.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000186042.jpg", "height": 360, "width": 640, "date_captured": "2013-11-19 22:08:16", "flickr_url": "http://farm6.staticflickr.com/5028/5593424414_f2fc94bf0f_z.jpg", "id": 186042}, {"license": 1, "file_name": "000000516871.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000516871.jpg", "height": 418, "width": 640, "date_captured": "2013-11-19 22:27:40", "flickr_url": "http://farm9.staticflickr.com/8072/8386943910_b8e6e62a0d_z.jpg", "id": 516871}, {"license": 6, "file_name": "000000443844.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000443844.jpg", "height": 429, "width": 640, "date_captured": "2013-11-19 22:45:15", "flickr_url": "http://farm4.staticflickr.com/3539/3324297511_684a9f456b_z.jpg", "id": 443844}, {"license": 4, "file_name": "000000359833.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000359833.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 00:11:50", "flickr_url": "http://farm9.staticflickr.com/8350/8185927378_1291fac336_z.jpg", "id": 359833}, {"license": 4, "file_name": "000000188592.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000188592.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 00:12:39", "flickr_url": "http://farm9.staticflickr.com/8061/8185288357_5c7d3840ae_z.jpg", "id": 188592}, {"license": 6, "file_name": "000000071877.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000071877.jpg", "height": 640, "width": 428, "date_captured": "2013-11-20 01:36:56", "flickr_url": "http://farm7.staticflickr.com/6045/6215776947_40f1e3720b_z.jpg", "id": 71877}, {"license": 6, "file_name": "000000419408.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000419408.jpg", "height": 429, "width": 640, "date_captured": "2013-11-20 01:38:53", "flickr_url": "http://farm7.staticflickr.com/6028/5942555362_0e4ba0dc32_z.jpg", "id": 419408}, {"license": 1, "file_name": "000000125472.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000125472.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 07:08:47", "flickr_url": "http://farm4.staticflickr.com/3428/3942219739_8ef55661f1_z.jpg", "id": 125472}, {"license": 6, "file_name": "000000428111.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000428111.jpg", "height": 429, "width": 640, "date_captured": "2013-11-20 07:47:12", "flickr_url": "http://farm4.staticflickr.com/3625/3620639389_1c5d957c87_z.jpg", "id": 428111}, {"license": 6, "file_name": "000000145665.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000145665.jpg", "height": 640, "width": 429, "date_captured": "2013-11-20 08:09:32", "flickr_url": "http://farm4.staticflickr.com/3551/3470420590_394c075a75_z.jpg", "id": 145665}, {"license": 4, "file_name": "000000551780.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000551780.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 11:30:11", "flickr_url": "http://farm6.staticflickr.com/5125/5333676592_1219ccca49_z.jpg", "id": 551780}, {"license": 4, "file_name": "000000581206.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000581206.jpg", "height": 640, "width": 479, "date_captured": "2013-11-20 12:40:40", "flickr_url": "http://farm5.staticflickr.com/4072/4629525071_77026d8d5f_z.jpg", "id": 581206}, {"license": 3, "file_name": "000000532481.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000532481.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 16:28:24", "flickr_url": "http://farm7.staticflickr.com/6048/5915494136_da3cfa7c5a_z.jpg", "id": 532481}, {"license": 4, "file_name": "000000398742.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000398742.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 16:49:59", "flickr_url": "http://farm5.staticflickr.com/4117/4913716666_4d871bc5d2_z.jpg", "id": 398742}, {"license": 1, "file_name": "000000279730.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000279730.jpg", "height": 333, "width": 500, "date_captured": "2013-11-20 17:12:58", "flickr_url": "http://farm5.staticflickr.com/4049/4300973580_72fde05d5f_z.jpg", "id": 279730}, {"license": 1, "file_name": "000000528399.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000528399.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 17:25:13", "flickr_url": "http://farm5.staticflickr.com/4029/4258573396_d22dc3cdec_z.jpg", "id": 528399}, {"license": 4, "file_name": "000000054605.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000054605.jpg", "height": 612, "width": 612, "date_captured": "2013-11-20 20:54:43", "flickr_url": "http://farm9.staticflickr.com/8396/8645114496_3c5bd1615f_z.jpg", "id": 54605}, {"license": 4, "file_name": "000000430286.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000430286.jpg", "height": 473, "width": 640, "date_captured": "2013-11-20 22:00:02", "flickr_url": "http://farm4.staticflickr.com/3246/3010660611_42210e398c_z.jpg", "id": 430286}, {"license": 1, "file_name": "000000497628.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000497628.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 22:38:45", "flickr_url": "http://farm3.staticflickr.com/2840/9275830725_0694cf91b7_z.jpg", "id": 497628}, {"license": 1, "file_name": "000000248400.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000248400.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 23:47:20", "flickr_url": "http://farm8.staticflickr.com/7069/6968620001_b41b05f5b3_z.jpg", "id": 248400}, {"license": 3, "file_name": "000000063965.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000063965.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 23:57:23", "flickr_url": "http://farm9.staticflickr.com/8168/7252382850_f1a2d6c57f_z.jpg", "id": 63965}, {"license": 2, "file_name": "000000498807.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000498807.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 01:06:57", "flickr_url": "http://farm5.staticflickr.com/4079/4805125064_37721dd070_z.jpg", "id": 498807}, {"license": 3, "file_name": "000000475191.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000475191.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 01:20:59", "flickr_url": "http://farm5.staticflickr.com/4108/4958529852_3425860fb0_z.jpg", "id": 475191}, {"license": 2, "file_name": "000000097994.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000097994.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 01:43:00", "flickr_url": "http://farm3.staticflickr.com/2325/5723995240_7382f64328_z.jpg", "id": 97994}, {"license": 3, "file_name": "000000316404.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000316404.jpg", "height": 445, "width": 640, "date_captured": "2013-11-21 01:45:50", "flickr_url": "http://farm8.staticflickr.com/7152/6853731175_fbc1c815db_z.jpg", "id": 316404}, {"license": 3, "file_name": "000000467315.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000467315.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 03:05:29", "flickr_url": "http://farm3.staticflickr.com/2780/4282449615_6b5178eb26_z.jpg", "id": 467315}, {"license": 3, "file_name": "000000261535.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000261535.jpg", "height": 640, "width": 433, "date_captured": "2013-11-21 03:56:01", "flickr_url": "http://farm7.staticflickr.com/6154/6176486786_20d4315252_z.jpg", "id": 261535}, {"license": 4, "file_name": "000000203864.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000203864.jpg", "height": 491, "width": 640, "date_captured": "2013-11-21 05:00:55", "flickr_url": "http://farm5.staticflickr.com/4104/5038658829_5baea9b70a_z.jpg", "id": 203864}, {"license": 2, "file_name": "000000371749.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000371749.jpg", "height": 375, "width": 500, "date_captured": "2013-11-21 21:14:42", "flickr_url": "http://farm4.staticflickr.com/3530/3290594604_98b7b6f851_z.jpg", "id": 371749}, {"license": 5, "file_name": "000000549674.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000549674.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 01:16:12", "flickr_url": "http://farm1.staticflickr.com/149/369153773_9508076aab_z.jpg", "id": 549674}, {"license": 3, "file_name": "000000344621.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000344621.jpg", "height": 333, "width": 500, "date_captured": "2013-11-22 01:55:10", "flickr_url": "http://farm3.staticflickr.com/2362/3808185084_54d6698314_z.jpg", "id": 344621}, {"license": 5, "file_name": "000000356432.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000356432.jpg", "height": 416, "width": 640, "date_captured": "2013-11-22 02:35:13", "flickr_url": "http://farm4.staticflickr.com/3631/3485417379_c29ca6cffe_z.jpg", "id": 356432}, {"license": 3, "file_name": "000000382743.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000382743.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 10:20:28", "flickr_url": "http://farm6.staticflickr.com/5338/9279562036_2a8c836895_z.jpg", "id": 382743}, {"license": 5, "file_name": "000000357888.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000357888.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 17:02:42", "flickr_url": "http://farm4.staticflickr.com/3577/3853391167_2ff6070b1a_z.jpg", "id": 357888}, {"license": 3, "file_name": "000000124442.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000124442.jpg", "height": 500, "width": 375, "date_captured": "2013-11-22 20:10:01", "flickr_url": "http://farm1.staticflickr.com/78/166592653_0fc529a307_z.jpg", "id": 124442}, {"license": 3, "file_name": "000000093261.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000093261.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 20:40:37", "flickr_url": "http://farm1.staticflickr.com/15/20525521_9f68af1db8_z.jpg", "id": 93261}, {"license": 4, "file_name": "000000057725.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000057725.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 22:23:31", "flickr_url": "http://farm9.staticflickr.com/8049/8401424062_0c29be398a_z.jpg", "id": 57725}, {"license": 1, "file_name": "000000474344.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000474344.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 22:26:32", "flickr_url": "http://farm5.staticflickr.com/4058/4613030951_0b642c650f_z.jpg", "id": 474344}, {"license": 2, "file_name": "000000264968.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000264968.jpg", "height": 500, "width": 334, "date_captured": "2013-11-22 23:53:52", "flickr_url": "http://farm4.staticflickr.com/3250/2695699003_30ce34904e_z.jpg", "id": 264968}, {"license": 3, "file_name": "000000357430.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000357430.jpg", "height": 427, "width": 640, "date_captured": "2013-11-23 03:27:02", "flickr_url": "http://farm5.staticflickr.com/4067/4209709250_f937513f9a_z.jpg", "id": 357430}, {"license": 2, "file_name": "000000369757.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000369757.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 03:47:55", "flickr_url": "http://farm3.staticflickr.com/2451/4015494004_bf25986d62_z.jpg", "id": 369757}, {"license": 4, "file_name": "000000167353.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000167353.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 01:01:29", "flickr_url": "http://farm9.staticflickr.com/8022/7178592902_5974224cac_z.jpg", "id": 167353}, {"license": 6, "file_name": "000000088345.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000088345.jpg", "height": 425, "width": 640, "date_captured": "2013-11-24 01:47:35", "flickr_url": "http://farm6.staticflickr.com/5234/5885795245_c089db18a3_z.jpg", "id": 88345}, {"license": 1, "file_name": "000000371699.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000371699.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 03:02:32", "flickr_url": "http://farm5.staticflickr.com/4014/5081723469_97a47d0849_z.jpg", "id": 371699}, {"license": 1, "file_name": "000000006771.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000006771.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 05:55:58", "flickr_url": "http://farm3.staticflickr.com/2812/9660575854_c6f4c17c6b_z.jpg", "id": 6771}, {"license": 3, "file_name": "000000273712.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000273712.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 06:13:03", "flickr_url": "http://farm5.staticflickr.com/4124/4952170055_0ddb7450ce_z.jpg", "id": 273712}, {"license": 2, "file_name": "000000545100.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000545100.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 09:53:15", "flickr_url": "http://farm7.staticflickr.com/6074/6037052340_81191af62f_z.jpg", "id": 545100}, {"license": 1, "file_name": "000000066886.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000066886.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 13:39:45", "flickr_url": "http://farm4.staticflickr.com/3691/8886915346_ab6a794fa0_z.jpg", "id": 66886}, {"license": 4, "file_name": "000000526256.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000526256.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 13:40:37", "flickr_url": "http://farm8.staticflickr.com/7312/9600334093_4ec68d9061_z.jpg", "id": 526256}, {"license": 4, "file_name": "000000240250.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000240250.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 14:37:34", "flickr_url": "http://farm9.staticflickr.com/8063/8171843756_30f1374f1b_z.jpg", "id": 240250}, {"license": 4, "file_name": "000000344614.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000344614.jpg", "height": 640, "width": 478, "date_captured": "2013-11-24 15:30:00", "flickr_url": "http://farm9.staticflickr.com/8320/8013479401_988f83de3b_z.jpg", "id": 344614}, {"license": 1, "file_name": "000000522638.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000522638.jpg", "height": 428, "width": 640, "date_captured": "2013-11-24 21:07:41", "flickr_url": "http://farm4.staticflickr.com/3618/3398419472_635386f016_z.jpg", "id": 522638}, {"license": 1, "file_name": "000000537802.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000537802.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 21:53:58", "flickr_url": "http://farm6.staticflickr.com/5216/5385022107_0f2bb19664_z.jpg", "id": 537802}, {"license": 1, "file_name": "000000435205.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000435205.jpg", "height": 333, "width": 500, "date_captured": "2013-11-24 21:57:46", "flickr_url": "http://farm3.staticflickr.com/2587/4004546000_9176175b78_z.jpg", "id": 435205}, {"license": 1, "file_name": "000000428867.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000428867.jpg", "height": 333, "width": 500, "date_captured": "2013-11-24 22:02:41", "flickr_url": "http://farm1.staticflickr.com/138/327208768_24ddef1efd_z.jpg", "id": 428867}, {"license": 2, "file_name": "000000146155.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000146155.jpg", "height": 512, "width": 640, "date_captured": "2013-11-25 19:11:21", "flickr_url": "http://farm4.staticflickr.com/3734/9630493594_e565b50f09_z.jpg", "id": 146155}, {"license": 6, "file_name": "000000485844.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000485844.jpg", "height": 396, "width": 576, "date_captured": "2013-11-14 16:32:43", "flickr_url": "http://farm8.staticflickr.com/7153/6442687011_accba3604f_z.jpg", "id": 485844}, {"license": 3, "file_name": "000000508370.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000508370.jpg", "height": 640, "width": 427, "date_captured": "2013-11-15 00:31:46", "flickr_url": "http://farm6.staticflickr.com/5228/5636077145_9460089d29_z.jpg", "id": 508370}, {"license": 2, "file_name": "000000311081.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000311081.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 00:34:33", "flickr_url": "http://farm4.staticflickr.com/3516/3713541254_c60188fa93_z.jpg", "id": 311081}, {"license": 4, "file_name": "000000577932.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000577932.jpg", "height": 543, "width": 640, "date_captured": "2013-11-15 01:10:04", "flickr_url": "http://farm5.staticflickr.com/4019/5159956078_f820c56d6f_z.jpg", "id": 577932}, {"license": 1, "file_name": "000000409358.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000409358.jpg", "height": 612, "width": 612, "date_captured": "2013-11-15 01:13:34", "flickr_url": "http://farm3.staticflickr.com/2824/9308361722_8a2b982360_z.jpg", "id": 409358}, {"license": 1, "file_name": "000000474786.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000474786.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 01:16:08", "flickr_url": "http://farm1.staticflickr.com/169/480640345_fba4c22c84_z.jpg", "id": 474786}, {"license": 4, "file_name": "000000187513.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000187513.jpg", "height": 640, "width": 427, "date_captured": "2013-11-15 05:48:54", "flickr_url": "http://farm5.staticflickr.com/4093/4755693555_844275a156_z.jpg", "id": 187513}, {"license": 2, "file_name": "000000067213.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000067213.jpg", "height": 485, "width": 640, "date_captured": "2013-11-15 08:01:26", "flickr_url": "http://farm9.staticflickr.com/8404/8705829095_38b805b1c4_z.jpg", "id": 67213}, {"license": 3, "file_name": "000000342295.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000342295.jpg", "height": 500, "width": 333, "date_captured": "2013-11-15 11:41:39", "flickr_url": "http://farm1.staticflickr.com/187/437137534_bc9e305616_z.jpg", "id": 342295}, {"license": 1, "file_name": "000000102331.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000102331.jpg", "height": 357, "width": 500, "date_captured": "2013-11-15 13:23:34", "flickr_url": "http://farm3.staticflickr.com/2724/4294011951_2b64ae8db3_z.jpg", "id": 102331}, {"license": 1, "file_name": "000000037670.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000037670.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 13:46:04", "flickr_url": "http://farm5.staticflickr.com/4125/5085865872_b536a88890_z.jpg", "id": 37670}, {"license": 3, "file_name": "000000243495.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000243495.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 15:08:59", "flickr_url": "http://farm3.staticflickr.com/2556/4075448023_f0bee5bf14_z.jpg", "id": 243495}, {"license": 1, "file_name": "000000190236.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000190236.jpg", "height": 393, "width": 640, "date_captured": "2013-11-15 17:09:36", "flickr_url": "http://farm1.staticflickr.com/244/535469198_ee68a4b0c1_z.jpg", "id": 190236}, {"license": 4, "file_name": "000000389812.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000389812.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 18:33:29", "flickr_url": "http://farm6.staticflickr.com/5209/5324496767_e91279d366_z.jpg", "id": 389812}, {"license": 4, "file_name": "000000456292.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000456292.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 21:01:23", "flickr_url": "http://farm1.staticflickr.com/27/39673832_616a764579_z.jpg", "id": 456292}, {"license": 5, "file_name": "000000553776.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000553776.jpg", "height": 489, "width": 640, "date_captured": "2013-11-15 22:05:12", "flickr_url": "http://farm7.staticflickr.com/6151/6170479032_96264d194f_z.jpg", "id": 553776}, {"license": 1, "file_name": "000000491090.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000491090.jpg", "height": 640, "width": 478, "date_captured": "2013-11-15 22:07:58", "flickr_url": "http://farm7.staticflickr.com/6184/6158210383_6e1a703842_z.jpg", "id": 491090}, {"license": 6, "file_name": "000000169076.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000169076.jpg", "height": 612, "width": 612, "date_captured": "2013-11-15 23:02:11", "flickr_url": "http://farm6.staticflickr.com/5246/5273035490_e6744f7645_z.jpg", "id": 169076}, {"license": 2, "file_name": "000000139871.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000139871.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 02:38:00", "flickr_url": "http://farm7.staticflickr.com/6160/6180345943_1b6c42408b_z.jpg", "id": 139871}, {"license": 2, "file_name": "000000374052.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000374052.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 14:18:02", "flickr_url": "http://farm7.staticflickr.com/6135/5959944636_076abfb5e0_z.jpg", "id": 374052}, {"license": 6, "file_name": "000000319534.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000319534.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 15:39:00", "flickr_url": "http://farm8.staticflickr.com/7308/9438601294_e8caaf2971_z.jpg", "id": 319534}, {"license": 5, "file_name": "000000205282.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000205282.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 16:42:29", "flickr_url": "http://farm4.staticflickr.com/3806/8892272617_b5f681bc37_z.jpg", "id": 205282}, {"license": 5, "file_name": "000000079188.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000079188.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 16:42:34", "flickr_url": "http://farm6.staticflickr.com/5337/8893150526_e517ed3bf3_z.jpg", "id": 79188}, {"license": 1, "file_name": "000000577862.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000577862.jpg", "height": 424, "width": 640, "date_captured": "2013-11-16 17:01:37", "flickr_url": "http://farm9.staticflickr.com/8040/8049438176_1cd6998d51_z.jpg", "id": 577862}, {"license": 6, "file_name": "000000460967.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000460967.jpg", "height": 640, "width": 604, "date_captured": "2013-11-16 20:32:26", "flickr_url": "http://farm8.staticflickr.com/7427/9479176625_506a745378_z.jpg", "id": 460967}, {"license": 3, "file_name": "000000183104.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000183104.jpg", "height": 476, "width": 640, "date_captured": "2013-11-16 22:02:22", "flickr_url": "http://farm3.staticflickr.com/2622/3934308773_6d7f830af1_z.jpg", "id": 183104}, {"license": 4, "file_name": "000000181816.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000181816.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 22:04:12", "flickr_url": "http://farm9.staticflickr.com/8031/7978704233_c38f174e37_z.jpg", "id": 181816}, {"license": 6, "file_name": "000000052007.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000052007.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 22:06:44", "flickr_url": "http://farm6.staticflickr.com/5461/8893360421_aefcf4676e_z.jpg", "id": 52007}, {"license": 2, "file_name": "000000300155.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000300155.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 01:05:22", "flickr_url": "http://farm9.staticflickr.com/8337/8253697103_661512e834_z.jpg", "id": 300155}, {"license": 1, "file_name": "000000283318.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000283318.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 01:41:21", "flickr_url": "http://farm1.staticflickr.com/42/122162055_4ca3dd3014_z.jpg", "id": 283318}, {"license": 5, "file_name": "000000335800.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000335800.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 02:30:53", "flickr_url": "http://farm6.staticflickr.com/5174/5509703045_42ba9f90b0_z.jpg", "id": 335800}, {"license": 5, "file_name": "000000049259.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000049259.jpg", "height": 640, "width": 427, "date_captured": "2013-11-17 03:04:31", "flickr_url": "http://farm5.staticflickr.com/4109/5607932075_8588a5787a_z.jpg", "id": 49259}, {"license": 1, "file_name": "000000278749.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000278749.jpg", "height": 333, "width": 500, "date_captured": "2013-11-17 05:39:26", "flickr_url": "http://farm4.staticflickr.com/3132/3170435549_0dc46decf3_z.jpg", "id": 278749}, {"license": 2, "file_name": "000000505565.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000505565.jpg", "height": 424, "width": 640, "date_captured": "2013-11-17 05:57:12", "flickr_url": "http://farm8.staticflickr.com/7438/9446267808_3fc6306a35_z.jpg", "id": 505565}, {"license": 3, "file_name": "000000419882.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000419882.jpg", "height": 612, "width": 612, "date_captured": "2013-11-17 07:05:33", "flickr_url": "http://farm6.staticflickr.com/5321/9670849745_1af3a8610f_z.jpg", "id": 419882}, {"license": 4, "file_name": "000000550939.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000550939.jpg", "height": 640, "width": 418, "date_captured": "2013-11-17 07:06:51", "flickr_url": "http://farm1.staticflickr.com/98/243510406_c77f1816ea_z.jpg", "id": 550939}, {"license": 3, "file_name": "000000502229.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000502229.jpg", "height": 612, "width": 612, "date_captured": "2013-11-17 08:51:19", "flickr_url": "http://farm8.staticflickr.com/7444/9170260364_c3325fd35f_z.jpg", "id": 502229}, {"license": 1, "file_name": "000000333956.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000333956.jpg", "height": 640, "width": 428, "date_captured": "2013-11-17 11:09:36", "flickr_url": "http://farm3.staticflickr.com/2471/3961744209_238ce23716_z.jpg", "id": 333956}, {"license": 4, "file_name": "000000401862.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000401862.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 18:14:55", "flickr_url": "http://farm9.staticflickr.com/8540/8698627837_6d1fb59ce4_z.jpg", "id": 401862}, {"license": 2, "file_name": "000000366199.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000366199.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 20:10:00", "flickr_url": "http://farm5.staticflickr.com/4101/4794594634_08a6586cc0_z.jpg", "id": 366199}, {"license": 3, "file_name": "000000155291.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000155291.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 20:57:03", "flickr_url": "http://farm4.staticflickr.com/3646/4556297233_b8013226e1_z.jpg", "id": 155291}, {"license": 6, "file_name": "000000267169.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000267169.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 01:23:59", "flickr_url": "http://farm8.staticflickr.com/7228/7362215638_f395e68601_z.jpg", "id": 267169}, {"license": 3, "file_name": "000000566282.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000566282.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 01:52:41", "flickr_url": "http://farm8.staticflickr.com/7148/6822486115_2d8d08f045_z.jpg", "id": 566282}, {"license": 3, "file_name": "000000455872.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000455872.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 02:23:07", "flickr_url": "http://farm3.staticflickr.com/2550/3958300291_ca0a1c3bc1_z.jpg", "id": 455872}, {"license": 1, "file_name": "000000146363.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000146363.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 03:50:59", "flickr_url": "http://farm4.staticflickr.com/3182/2972281816_88f19293e4_z.jpg", "id": 146363}, {"license": 4, "file_name": "000000067534.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000067534.jpg", "height": 640, "width": 306, "date_captured": "2013-11-18 04:40:24", "flickr_url": "http://farm3.staticflickr.com/2467/4002909092_1c44ff3c81_z.jpg", "id": 67534}, {"license": 1, "file_name": "000000408120.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000408120.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 04:56:32", "flickr_url": "http://farm6.staticflickr.com/5030/5864395384_6b9daa40c3_z.jpg", "id": 408120}, {"license": 4, "file_name": "000000250619.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000250619.jpg", "height": 481, "width": 640, "date_captured": "2013-11-18 06:32:45", "flickr_url": "http://farm4.staticflickr.com/3262/2623070963_6ab9ce9c3a_z.jpg", "id": 250619}, {"license": 4, "file_name": "000000132796.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000132796.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 08:15:03", "flickr_url": "http://farm6.staticflickr.com/5130/5382853203_aa9df7df0e_z.jpg", "id": 132796}, {"license": 1, "file_name": "000000047585.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000047585.jpg", "height": 640, "width": 424, "date_captured": "2013-11-18 10:32:30", "flickr_url": "http://farm7.staticflickr.com/6103/6218610852_83446bd59e_z.jpg", "id": 47585}, {"license": 3, "file_name": "000000011699.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000011699.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 10:35:30", "flickr_url": "http://farm7.staticflickr.com/6010/5946492599_6248b4620e_z.jpg", "id": 11699}, {"license": 1, "file_name": "000000198489.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000198489.jpg", "height": 640, "width": 428, "date_captured": "2013-11-18 10:53:48", "flickr_url": "http://farm6.staticflickr.com/5062/5655707182_0530f68fe9_z.jpg", "id": 198489}, {"license": 2, "file_name": "000000009448.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000009448.jpg", "height": 640, "width": 551, "date_captured": "2013-11-18 11:35:31", "flickr_url": "http://farm6.staticflickr.com/5255/5389014889_0c50cf03cf_z.jpg", "id": 9448}, {"license": 1, "file_name": "000000030494.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000030494.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 12:44:58", "flickr_url": "http://farm4.staticflickr.com/3447/3263301518_8a9fb1c293_z.jpg", "id": 30494}, {"license": 2, "file_name": "000000367082.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000367082.jpg", "height": 500, "width": 488, "date_captured": "2013-11-18 13:22:58", "flickr_url": "http://farm3.staticflickr.com/2641/4200694835_95cb44c61b_z.jpg", "id": 367082}, {"license": 1, "file_name": "000000096960.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000096960.jpg", "height": 478, "width": 640, "date_captured": "2013-11-18 14:30:59", "flickr_url": "http://farm8.staticflickr.com/7146/6753138083_4a38d140c2_z.jpg", "id": 96960}, {"license": 5, "file_name": "000000309938.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000309938.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 15:36:58", "flickr_url": "http://farm3.staticflickr.com/2460/3742502573_02458ab759_z.jpg", "id": 309938}, {"license": 4, "file_name": "000000283412.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000283412.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 15:58:09", "flickr_url": "http://farm6.staticflickr.com/5215/5499994653_748a7cbcbd_z.jpg", "id": 283412}, {"license": 5, "file_name": "000000320632.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000320632.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 17:09:53", "flickr_url": "http://farm4.staticflickr.com/3729/8892244724_b080d12e4c_z.jpg", "id": 320632}, {"license": 2, "file_name": "000000221693.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000221693.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 18:10:38", "flickr_url": "http://farm1.staticflickr.com/65/158478247_2d8dc7a6d5_z.jpg", "id": 221693}, {"license": 2, "file_name": "000000082986.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000082986.jpg", "height": 444, "width": 640, "date_captured": "2013-11-18 18:43:51", "flickr_url": "http://farm1.staticflickr.com/96/244293167_b2f9b992fc_z.jpg", "id": 82986}, {"license": 1, "file_name": "000000025139.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000025139.jpg", "height": 334, "width": 500, "date_captured": "2013-11-18 20:00:51", "flickr_url": "http://farm4.staticflickr.com/3472/3197919352_58476f551b_z.jpg", "id": 25139}, {"license": 1, "file_name": "000000252216.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000252216.jpg", "height": 458, "width": 640, "date_captured": "2013-11-18 20:00:58", "flickr_url": "http://farm4.staticflickr.com/3164/2542889384_7d9e8ce9ae_z.jpg", "id": 252216}, {"license": 5, "file_name": "000000348488.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000348488.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 20:41:18", "flickr_url": "http://farm9.staticflickr.com/8009/7642694662_166be80756_z.jpg", "id": 348488}, {"license": 4, "file_name": "000000406570.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000406570.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 18:37:45", "flickr_url": "http://farm3.staticflickr.com/2625/3796453122_e3fa536540_z.jpg", "id": 406570}, {"license": 1, "file_name": "000000470952.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000470952.jpg", "height": 640, "width": 428, "date_captured": "2013-11-19 18:45:39", "flickr_url": "http://farm6.staticflickr.com/5096/5526342951_46a116df9c_z.jpg", "id": 470952}, {"license": 1, "file_name": "000000050149.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000050149.jpg", "height": 376, "width": 500, "date_captured": "2013-11-19 19:13:22", "flickr_url": "http://farm4.staticflickr.com/3519/3720861754_cd278bf6af_z.jpg", "id": 50149}, {"license": 3, "file_name": "000000506279.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000506279.jpg", "height": 640, "width": 640, "date_captured": "2013-11-19 19:42:11", "flickr_url": "http://farm4.staticflickr.com/3713/10059197565_6d8cecbb24_z.jpg", "id": 506279}, {"license": 1, "file_name": "000000271471.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000271471.jpg", "height": 428, "width": 640, "date_captured": "2013-11-19 19:42:38", "flickr_url": "http://farm3.staticflickr.com/2792/4515234636_9b99fe68dc_z.jpg", "id": 271471}, {"license": 1, "file_name": "000000172935.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000172935.jpg", "height": 364, "width": 488, "date_captured": "2013-11-19 21:54:48", "flickr_url": "http://farm7.staticflickr.com/6018/5905842341_a5ac291caa_z.jpg", "id": 172935}, {"license": 3, "file_name": "000000447465.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000447465.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 22:47:55", "flickr_url": "http://farm6.staticflickr.com/5013/5433862547_b2a5d61747_z.jpg", "id": 447465}, {"license": 3, "file_name": "000000397351.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000397351.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 00:39:49", "flickr_url": "http://farm1.staticflickr.com/30/51424703_1f8c7b7fab_z.jpg", "id": 397351}, {"license": 3, "file_name": "000000033104.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000033104.jpg", "height": 500, "width": 428, "date_captured": "2013-11-20 04:36:08", "flickr_url": "http://farm5.staticflickr.com/4056/4345758361_f39f7e50e1_z.jpg", "id": 33104}, {"license": 3, "file_name": "000000161781.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000161781.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 04:51:21", "flickr_url": "http://farm3.staticflickr.com/2743/4322530211_c50344e485_z.jpg", "id": 161781}, {"license": 3, "file_name": "000000288762.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000288762.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 04:56:03", "flickr_url": "http://farm5.staticflickr.com/4021/4449403900_e3ee0552f1_z.jpg", "id": 288762}, {"license": 2, "file_name": "000000313783.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000313783.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 05:40:39", "flickr_url": "http://farm3.staticflickr.com/2476/3717329297_e59898e4ca_z.jpg", "id": 313783}, {"license": 3, "file_name": "000000466256.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000466256.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 06:05:40", "flickr_url": "http://farm4.staticflickr.com/3346/3338731218_a27d83b0ff_z.jpg", "id": 466256}, {"license": 1, "file_name": "000000024567.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000024567.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 09:12:46", "flickr_url": "http://farm6.staticflickr.com/5231/5915713227_214eb69a8c_z.jpg", "id": 24567}, {"license": 4, "file_name": "000000480936.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000480936.jpg", "height": 640, "width": 482, "date_captured": "2013-11-20 12:07:30", "flickr_url": "http://farm2.staticflickr.com/1154/560533087_715b92d751_z.jpg", "id": 480936}, {"license": 3, "file_name": "000000364557.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000364557.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 16:12:36", "flickr_url": "http://farm9.staticflickr.com/8038/8011955871_015c8bc49c_z.jpg", "id": 364557}, {"license": 1, "file_name": "000000257624.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000257624.jpg", "height": 640, "width": 424, "date_captured": "2013-11-20 19:28:19", "flickr_url": "http://farm8.staticflickr.com/7281/8745525204_4e2eee1ce0_z.jpg", "id": 257624}, {"license": 3, "file_name": "000000450100.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000450100.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 20:15:34", "flickr_url": "http://farm4.staticflickr.com/3695/9043330973_2568f5324c_z.jpg", "id": 450100}, {"license": 1, "file_name": "000000010995.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000010995.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 21:22:47", "flickr_url": "http://farm4.staticflickr.com/3438/3815505319_1c077a82b6_z.jpg", "id": 10995}, {"license": 4, "file_name": "000000001993.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000001993.jpg", "height": 419, "width": 640, "date_captured": "2013-11-20 23:23:33", "flickr_url": "http://farm4.staticflickr.com/3413/3223600591_25cb6f12c6_z.jpg", "id": 1993}, {"license": 3, "file_name": "000000149770.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000149770.jpg", "height": 145, "width": 200, "date_captured": "2013-11-21 00:46:53", "flickr_url": "http://farm5.staticflickr.com/4130/4960521880_4b25c4d14a_z.jpg", "id": 149770}, {"license": 6, "file_name": "000000240023.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000240023.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 01:19:05", "flickr_url": "http://farm4.staticflickr.com/3541/3824088981_8b4c12987c_z.jpg", "id": 240023}, {"license": 3, "file_name": "000000292446.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000292446.jpg", "height": 612, "width": 612, "date_captured": "2013-11-21 01:59:16", "flickr_url": "http://farm9.staticflickr.com/8207/8251988957_8e4b8e1813_z.jpg", "id": 292446}, {"license": 1, "file_name": "000000117744.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000117744.jpg", "height": 640, "width": 359, "date_captured": "2013-11-21 02:41:23", "flickr_url": "http://farm9.staticflickr.com/8091/8511355765_6b8ae66c79_z.jpg", "id": 117744}, {"license": 1, "file_name": "000000271402.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000271402.jpg", "height": 640, "width": 424, "date_captured": "2013-11-21 02:54:19", "flickr_url": "http://farm9.staticflickr.com/8459/8057784638_ba0d6496fa_z.jpg", "id": 271402}, {"license": 1, "file_name": "000000122962.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000122962.jpg", "height": 424, "width": 640, "date_captured": "2013-11-21 03:00:11", "flickr_url": "http://farm8.staticflickr.com/7002/6849950899_fb164b18e6_z.jpg", "id": 122962}, {"license": 2, "file_name": "000000289059.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000289059.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 03:03:13", "flickr_url": "http://farm9.staticflickr.com/8041/7939950632_34fc12465a_z.jpg", "id": 289059}, {"license": 3, "file_name": "000000488166.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000488166.jpg", "height": 640, "width": 361, "date_captured": "2013-11-21 03:34:42", "flickr_url": "http://farm7.staticflickr.com/6125/6038769056_3527314e04_z.jpg", "id": 488166}, {"license": 3, "file_name": "000000371042.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000371042.jpg", "height": 428, "width": 640, "date_captured": "2013-11-21 04:09:34", "flickr_url": "http://farm7.staticflickr.com/6018/5922842823_901d29eff5_z.jpg", "id": 371042}, {"license": 1, "file_name": "000000406129.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000406129.jpg", "height": 640, "width": 428, "date_captured": "2013-11-21 05:05:49", "flickr_url": "http://farm5.staticflickr.com/4145/4971781758_f6019e7f17_z.jpg", "id": 406129}, {"license": 1, "file_name": "000000327701.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000327701.jpg", "height": 428, "width": 640, "date_captured": "2013-11-21 05:21:15", "flickr_url": "http://farm5.staticflickr.com/4116/4749894768_c44e05fd92_z.jpg", "id": 327701}, {"license": 6, "file_name": "000000541664.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000541664.jpg", "height": 375, "width": 500, "date_captured": "2013-11-21 19:34:53", "flickr_url": "http://farm3.staticflickr.com/2559/3735190863_39541c9523_z.jpg", "id": 541664}, {"license": 1, "file_name": "000000575081.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000575081.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 20:39:21", "flickr_url": "http://farm5.staticflickr.com/4009/4217729108_293f6c6faa_z.jpg", "id": 575081}, {"license": 1, "file_name": "000000458663.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000458663.jpg", "height": 425, "width": 640, "date_captured": "2013-11-21 20:58:20", "flickr_url": "http://farm5.staticflickr.com/4121/4879481708_6602630c5c_z.jpg", "id": 458663}, {"license": 1, "file_name": "000000144984.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000144984.jpg", "height": 640, "width": 426, "date_captured": "2013-11-21 21:53:10", "flickr_url": "http://farm4.staticflickr.com/3134/2579783123_be76cfc803_z.jpg", "id": 144984}, {"license": 3, "file_name": "000000540962.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000540962.jpg", "height": 400, "width": 500, "date_captured": "2013-11-22 03:18:40", "flickr_url": "http://farm4.staticflickr.com/3443/3213607624_0644d6139f_z.jpg", "id": 540962}, {"license": 1, "file_name": "000000074646.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000074646.jpg", "height": 640, "width": 480, "date_captured": "2013-11-22 09:28:08", "flickr_url": "http://farm7.staticflickr.com/6209/6114405621_3ce4e9126e_z.jpg", "id": 74646}, {"license": 3, "file_name": "000000007784.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000007784.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 10:05:41", "flickr_url": "http://farm1.staticflickr.com/68/203228464_2633d96d51_z.jpg", "id": 7784}, {"license": 4, "file_name": "000000022705.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000022705.jpg", "height": 640, "width": 482, "date_captured": "2013-11-22 18:53:47", "flickr_url": "http://farm3.staticflickr.com/2338/1940631815_acd4f4458e_z.jpg", "id": 22705}, {"license": 3, "file_name": "000000187734.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000187734.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 04:33:17", "flickr_url": "http://farm3.staticflickr.com/2215/2319003762_8f0d105f69_z.jpg", "id": 187734}, {"license": 4, "file_name": "000000546717.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000546717.jpg", "height": 640, "width": 471, "date_captured": "2013-11-24 00:36:48", "flickr_url": "http://farm3.staticflickr.com/2769/4117004152_d8508e562d_z.jpg", "id": 546717}, {"license": 2, "file_name": "000000294162.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000294162.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 00:42:13", "flickr_url": "http://farm4.staticflickr.com/3121/2823769497_7da1caf585_z.jpg", "id": 294162}, {"license": 6, "file_name": "000000492110.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000492110.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 00:43:28", "flickr_url": "http://farm9.staticflickr.com/8195/8139005828_fda85b4b72_z.jpg", "id": 492110}, {"license": 2, "file_name": "000000477805.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000477805.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 01:43:40", "flickr_url": "http://farm9.staticflickr.com/8211/8433586983_0b72ea410d_z.jpg", "id": 477805}, {"license": 2, "file_name": "000000160556.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000160556.jpg", "height": 428, "width": 640, "date_captured": "2013-11-24 05:56:31", "flickr_url": "http://farm4.staticflickr.com/3499/3696364224_2996c72d68_z.jpg", "id": 160556}, {"license": 1, "file_name": "000000462643.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000462643.jpg", "height": 640, "width": 425, "date_captured": "2013-11-24 08:26:27", "flickr_url": "http://farm3.staticflickr.com/2769/4096198471_f699c388a4_z.jpg", "id": 462643}, {"license": 3, "file_name": "000000554838.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000554838.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 11:28:25", "flickr_url": "http://farm6.staticflickr.com/5091/5533968898_56c00b37b4_z.jpg", "id": 554838}, {"license": 1, "file_name": "000000505789.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000505789.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 12:14:46", "flickr_url": "http://farm9.staticflickr.com/8117/8694889320_576152db54_z.jpg", "id": 505789}, {"license": 1, "file_name": "000000243034.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000243034.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 14:28:28", "flickr_url": "http://farm8.staticflickr.com/7335/9077372356_8599fb8f27_z.jpg", "id": 243034}, {"license": 4, "file_name": "000000058655.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000058655.jpg", "height": 640, "width": 425, "date_captured": "2013-11-24 16:25:17", "flickr_url": "http://farm8.staticflickr.com/7068/6952501027_6ba4a6f86f_z.jpg", "id": 58655}, {"license": 3, "file_name": "000000265518.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000265518.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 23:23:16", "flickr_url": "http://farm9.staticflickr.com/8402/8891082669_1e05af4d53_z.jpg", "id": 265518}, {"license": 3, "file_name": "000000066706.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000066706.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 23:43:29", "flickr_url": "http://farm9.staticflickr.com/8526/8618526433_bebccf9aa5_z.jpg", "id": 66706}, {"license": 1, "file_name": "000000336053.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000336053.jpg", "height": 480, "width": 640, "date_captured": "2013-11-25 07:51:42", "flickr_url": "http://farm6.staticflickr.com/5329/9729233040_dcd61b5f8a_z.jpg", "id": 336053}, {"license": 4, "file_name": "000000386134.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000386134.jpg", "height": 612, "width": 612, "date_captured": "2013-11-25 08:05:55", "flickr_url": "http://farm3.staticflickr.com/2891/9679798035_817d8e1517_z.jpg", "id": 386134}, {"license": 3, "file_name": "000000173371.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000173371.jpg", "height": 612, "width": 612, "date_captured": "2013-11-25 08:24:12", "flickr_url": "http://farm6.staticflickr.com/5537/9455072942_dddbe1efa9_z.jpg", "id": 173371}, {"license": 3, "file_name": "000000210520.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000210520.jpg", "height": 612, "width": 612, "date_captured": "2013-11-25 14:23:26", "flickr_url": "http://farm6.staticflickr.com/5335/9648405451_cc7697f651_z.jpg", "id": 210520}, {"license": 3, "file_name": "000000458768.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000458768.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 21:57:50", "flickr_url": "http://farm8.staticflickr.com/7188/6861700975_cbd4507290_z.jpg", "id": 458768}, {"license": 1, "file_name": "000000144333.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000144333.jpg", "height": 640, "width": 426, "date_captured": "2013-11-14 22:58:37", "flickr_url": "http://farm5.staticflickr.com/4134/4782858440_3885462451_z.jpg", "id": 144333}, {"license": 1, "file_name": "000000237316.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000237316.jpg", "height": 500, "width": 375, "date_captured": "2013-11-14 23:36:08", "flickr_url": "http://farm3.staticflickr.com/2633/4019190339_d40b93a8d2_z.jpg", "id": 237316}, {"license": 1, "file_name": "000000402473.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000402473.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 00:00:15", "flickr_url": "http://farm3.staticflickr.com/2049/2238407255_2cf67c69d6_z.jpg", "id": 402473}, {"license": 4, "file_name": "000000261888.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000261888.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 00:15:51", "flickr_url": "http://farm5.staticflickr.com/4079/4918743472_0b684750c4_z.jpg", "id": 261888}, {"license": 3, "file_name": "000000201775.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000201775.jpg", "height": 382, "width": 500, "date_captured": "2013-11-15 01:23:37", "flickr_url": "http://farm5.staticflickr.com/4072/4297854779_63b4e8213d_z.jpg", "id": 201775}, {"license": 5, "file_name": "000000135670.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000135670.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 04:48:22", "flickr_url": "http://farm3.staticflickr.com/2528/3925803088_79760dbe81_z.jpg", "id": 135670}, {"license": 4, "file_name": "000000223789.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000223789.jpg", "height": 500, "width": 346, "date_captured": "2013-11-15 05:08:46", "flickr_url": "http://farm3.staticflickr.com/2481/3921778723_b344854d10_z.jpg", "id": 223789}, {"license": 2, "file_name": "000000515266.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000515266.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 06:37:52", "flickr_url": "http://farm9.staticflickr.com/8046/8150642174_9e8870ff5c_z.jpg", "id": 515266}, {"license": 3, "file_name": "000000107087.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000107087.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 07:22:33", "flickr_url": "http://farm1.staticflickr.com/112/278683730_d089278f8e_z.jpg", "id": 107087}, {"license": 1, "file_name": "000000141597.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000141597.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 10:47:02", "flickr_url": "http://farm2.staticflickr.com/1139/1001175021_58db3270de_z.jpg", "id": 141597}, {"license": 6, "file_name": "000000309495.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000309495.jpg", "height": 500, "width": 326, "date_captured": "2013-11-15 13:23:05", "flickr_url": "http://farm2.staticflickr.com/1081/1155448752_fa8a283f65_z.jpg", "id": 309495}, {"license": 6, "file_name": "000000206135.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000206135.jpg", "height": 500, "width": 332, "date_captured": "2013-11-15 13:40:26", "flickr_url": "http://farm3.staticflickr.com/2530/3956178356_3c0bae20ba_z.jpg", "id": 206135}, {"license": 3, "file_name": "000000480021.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000480021.jpg", "height": 471, "width": 640, "date_captured": "2013-11-15 16:20:26", "flickr_url": "http://farm7.staticflickr.com/6173/6170095242_733e5d24b4_z.jpg", "id": 480021}, {"license": 3, "file_name": "000000472678.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000472678.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 16:59:22", "flickr_url": "http://farm3.staticflickr.com/2661/4104532194_15d0b0bebc_z.jpg", "id": 472678}, {"license": 1, "file_name": "000000187249.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000187249.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 23:45:52", "flickr_url": "http://farm1.staticflickr.com/30/35239071_15bde94e10_z.jpg", "id": 187249}, {"license": 3, "file_name": "000000133087.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000133087.jpg", "height": 429, "width": 640, "date_captured": "2013-11-16 12:22:06", "flickr_url": "http://farm8.staticflickr.com/7236/7400954768_a9b38d7673_z.jpg", "id": 133087}, {"license": 3, "file_name": "000000130826.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000130826.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 13:20:15", "flickr_url": "http://farm3.staticflickr.com/2786/4357664429_c4b7884761_z.jpg", "id": 130826}, {"license": 1, "file_name": "000000537053.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000537053.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 16:19:48", "flickr_url": "http://farm6.staticflickr.com/5542/9492617568_8a88e34a24_z.jpg", "id": 537053}, {"license": 3, "file_name": "000000551350.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000551350.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 17:55:30", "flickr_url": "http://farm1.staticflickr.com/3/6787416_c65131f740_z.jpg", "id": 551350}, {"license": 5, "file_name": "000000558558.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000558558.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 18:09:10", "flickr_url": "http://farm1.staticflickr.com/16/20478846_42ecd3e3ed_z.jpg", "id": 558558}, {"license": 1, "file_name": "000000500477.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000500477.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 22:54:16", "flickr_url": "http://farm6.staticflickr.com/5271/5876049113_3dafd541bf_z.jpg", "id": 500477}, {"license": 1, "file_name": "000000373353.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000373353.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 23:15:48", "flickr_url": "http://farm9.staticflickr.com/8247/8508114297_56b58153d6_z.jpg", "id": 373353}, {"license": 5, "file_name": "000000375493.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000375493.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 23:37:24", "flickr_url": "http://farm1.staticflickr.com/33/38514047_b57c0ced5e_z.jpg", "id": 375493}, {"license": 1, "file_name": "000000494188.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000494188.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 00:25:22", "flickr_url": "http://farm2.staticflickr.com/1129/3166449629_c2a73ebb21_z.jpg", "id": 494188}, {"license": 3, "file_name": "000000299720.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000299720.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 01:08:27", "flickr_url": "http://farm3.staticflickr.com/2277/2132843674_b17b1738f8_z.jpg", "id": 299720}, {"license": 1, "file_name": "000000324818.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000324818.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 01:11:42", "flickr_url": "http://farm3.staticflickr.com/2593/4383341126_03f3a1fe2a_z.jpg", "id": 324818}, {"license": 2, "file_name": "000000221155.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000221155.jpg", "height": 512, "width": 640, "date_captured": "2013-11-17 04:54:32", "flickr_url": "http://farm8.staticflickr.com/7232/6901537526_67f2c314da_z.jpg", "id": 221155}, {"license": 3, "file_name": "000000502910.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000502910.jpg", "height": 640, "width": 426, "date_captured": "2013-11-17 07:37:39", "flickr_url": "http://farm6.staticflickr.com/5067/5897070201_bd2771dda6_z.jpg", "id": 502910}, {"license": 1, "file_name": "000000196754.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000196754.jpg", "height": 500, "width": 375, "date_captured": "2013-11-17 08:27:06", "flickr_url": "http://farm4.staticflickr.com/3245/2612355525_fe47109fe5_z.jpg", "id": 196754}, {"license": 3, "file_name": "000000091619.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000091619.jpg", "height": 640, "width": 427, "date_captured": "2013-11-17 08:30:51", "flickr_url": "http://farm2.staticflickr.com/1192/1343960723_453991a044_z.jpg", "id": 91619}, {"license": 6, "file_name": "000000232646.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000232646.jpg", "height": 512, "width": 640, "date_captured": "2013-11-17 08:44:42", "flickr_url": "http://farm6.staticflickr.com/5083/5344351587_b179677c94_z.jpg", "id": 232646}, {"license": 3, "file_name": "000000234757.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000234757.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 10:27:43", "flickr_url": "http://farm9.staticflickr.com/8480/8224578886_5716b9a1ff_z.jpg", "id": 234757}, {"license": 3, "file_name": "000000280325.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000280325.jpg", "height": 377, "width": 500, "date_captured": "2013-11-17 11:29:37", "flickr_url": "http://farm4.staticflickr.com/3211/2999990088_53c419d548_z.jpg", "id": 280325}, {"license": 3, "file_name": "000000184338.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000184338.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 16:33:05", "flickr_url": "http://farm9.staticflickr.com/8190/8111663715_2c24036616_z.jpg", "id": 184338}, {"license": 3, "file_name": "000000417085.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000417085.jpg", "height": 360, "width": 640, "date_captured": "2013-11-17 17:09:04", "flickr_url": "http://farm4.staticflickr.com/3703/9277175604_bd2ef4442b_z.jpg", "id": 417085}, {"license": 1, "file_name": "000000015497.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000015497.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 00:19:02", "flickr_url": "http://farm3.staticflickr.com/2197/2269556612_b210991e62_z.jpg", "id": 15497}, {"license": 1, "file_name": "000000060823.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000060823.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 00:33:49", "flickr_url": "http://farm6.staticflickr.com/5008/5240497381_4f7d56566f_z.jpg", "id": 60823}, {"license": 2, "file_name": "000000344268.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000344268.jpg", "height": 512, "width": 640, "date_captured": "2013-11-18 00:44:05", "flickr_url": "http://farm6.staticflickr.com/5289/5324533596_9952eb78c6_z.jpg", "id": 344268}, {"license": 1, "file_name": "000000081594.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000081594.jpg", "height": 640, "width": 478, "date_captured": "2013-11-18 04:32:06", "flickr_url": "http://farm3.staticflickr.com/2692/5767779387_8b7d09b2ee_z.jpg", "id": 81594}, {"license": 4, "file_name": "000000416991.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000416991.jpg", "height": 329, "width": 640, "date_captured": "2013-11-18 07:06:54", "flickr_url": "http://farm6.staticflickr.com/5263/5666449288_225b0e85dd_z.jpg", "id": 416991}, {"license": 1, "file_name": "000000286503.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000286503.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 07:17:46", "flickr_url": "http://farm3.staticflickr.com/2752/5806020422_c2170c73cc_z.jpg", "id": 286503}, {"license": 3, "file_name": "000000562207.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000562207.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 08:42:00", "flickr_url": "http://farm2.staticflickr.com/1412/5179186821_35c8b4d55d_z.jpg", "id": 562207}, {"license": 1, "file_name": "000000556765.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000556765.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 08:47:21", "flickr_url": "http://farm5.staticflickr.com/4129/4964123874_a200cc5593_z.jpg", "id": 556765}, {"license": 1, "file_name": "000000433374.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000433374.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 08:47:23", "flickr_url": "http://farm5.staticflickr.com/4153/4964141476_d3117dd1f4_z.jpg", "id": 433374}, {"license": 5, "file_name": "000000182805.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000182805.jpg", "height": 360, "width": 640, "date_captured": "2013-11-18 10:28:55", "flickr_url": "http://farm7.staticflickr.com/6218/6309322560_cf4708d8dc_z.jpg", "id": 182805}, {"license": 5, "file_name": "000000229997.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000229997.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 10:52:39", "flickr_url": "http://farm3.staticflickr.com/2771/4517379000_2189421767_z.jpg", "id": 229997}, {"license": 6, "file_name": "000000297830.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000297830.jpg", "height": 640, "width": 512, "date_captured": "2013-11-18 11:31:34", "flickr_url": "http://farm8.staticflickr.com/7313/8728276717_165532d936_z.jpg", "id": 297830}, {"license": 3, "file_name": "000000539962.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000539962.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 12:57:32", "flickr_url": "http://farm1.staticflickr.com/65/167210044_ddc9890c57_z.jpg", "id": 539962}, {"license": 1, "file_name": "000000409198.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000409198.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 13:25:01", "flickr_url": "http://farm9.staticflickr.com/8442/7778115976_bd16438ec0_z.jpg", "id": 409198}, {"license": 1, "file_name": "000000291619.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000291619.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 16:21:03", "flickr_url": "http://farm4.staticflickr.com/3521/3468838422_c431c20c2e_z.jpg", "id": 291619}, {"license": 1, "file_name": "000000330396.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000330396.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 17:27:55", "flickr_url": "http://farm3.staticflickr.com/2277/1583859389_0384030f70_z.jpg", "id": 330396}, {"license": 2, "file_name": "000000017115.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000017115.jpg", "height": 640, "width": 443, "date_captured": "2013-11-18 18:09:41", "flickr_url": "http://farm6.staticflickr.com/5189/5672755536_fd276c33d6_z.jpg", "id": 17115}, {"license": 6, "file_name": "000000049761.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000049761.jpg", "height": 479, "width": 640, "date_captured": "2013-11-18 19:24:00", "flickr_url": "http://farm3.staticflickr.com/2623/3995406203_828f6deabf_z.jpg", "id": 49761}, {"license": 2, "file_name": "000000268729.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000268729.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 21:26:16", "flickr_url": "http://farm2.staticflickr.com/1178/1427031127_b2782aec76_z.jpg", "id": 268729}, {"license": 1, "file_name": "000000241677.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000241677.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 22:13:25", "flickr_url": "http://farm6.staticflickr.com/5045/5292909555_76693cc72c_z.jpg", "id": 241677}, {"license": 3, "file_name": "000000356261.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000356261.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 23:25:18", "flickr_url": "http://farm4.staticflickr.com/3762/9313017658_0c18c2614a_z.jpg", "id": 356261}, {"license": 3, "file_name": "000000275392.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000275392.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 01:22:46", "flickr_url": "http://farm3.staticflickr.com/2886/9310209001_3df4cc75bf_z.jpg", "id": 275392}, {"license": 4, "file_name": "000000088265.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000088265.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 01:51:17", "flickr_url": "http://farm6.staticflickr.com/5541/9095670368_d6a61781a3_z.jpg", "id": 88265}, {"license": 3, "file_name": "000000119452.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000119452.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 18:29:03", "flickr_url": "http://farm1.staticflickr.com/6/11542060_defc4bb6a4_z.jpg", "id": 119452}, {"license": 2, "file_name": "000000205333.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000205333.jpg", "height": 164, "width": 640, "date_captured": "2013-11-19 18:29:07", "flickr_url": "http://farm5.staticflickr.com/4038/4384417517_f388bb9bd5_z.jpg", "id": 205333}, {"license": 2, "file_name": "000000005529.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000005529.jpg", "height": 640, "width": 444, "date_captured": "2013-11-19 19:12:10", "flickr_url": "http://farm6.staticflickr.com/5325/6906499706_9db8c37927_z.jpg", "id": 5529}, {"license": 3, "file_name": "000000327780.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000327780.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 19:26:09", "flickr_url": "http://farm1.staticflickr.com/45/139214724_829470dcb4_z.jpg", "id": 327780}, {"license": 3, "file_name": "000000186929.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000186929.jpg", "height": 500, "width": 333, "date_captured": "2013-11-19 19:33:05", "flickr_url": "http://farm5.staticflickr.com/4034/4460097734_72f1cd8ccb_z.jpg", "id": 186929}, {"license": 1, "file_name": "000000197658.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000197658.jpg", "height": 640, "width": 582, "date_captured": "2013-11-19 19:49:10", "flickr_url": "http://farm4.staticflickr.com/3410/4568202097_22a6552629_z.jpg", "id": 197658}, {"license": 1, "file_name": "000000231527.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000231527.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 19:49:26", "flickr_url": "http://farm9.staticflickr.com/8543/8675226539_c4361c46cb_z.jpg", "id": 231527}, {"license": 3, "file_name": "000000388903.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000388903.jpg", "height": 332, "width": 500, "date_captured": "2013-11-19 22:01:24", "flickr_url": "http://farm5.staticflickr.com/4020/4417675093_995152070f_z.jpg", "id": 388903}, {"license": 2, "file_name": "000000573258.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000573258.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 23:50:14", "flickr_url": "http://farm3.staticflickr.com/2728/4536057226_27f677192f_z.jpg", "id": 573258}, {"license": 5, "file_name": "000000231097.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000231097.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 23:59:47", "flickr_url": "http://farm1.staticflickr.com/87/269735183_d7e708519f_z.jpg", "id": 231097}, {"license": 1, "file_name": "000000106266.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000106266.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 01:44:54", "flickr_url": "http://farm4.staticflickr.com/3129/2858429748_66fb835719_z.jpg", "id": 106266}, {"license": 1, "file_name": "000000130613.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000130613.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 03:27:08", "flickr_url": "http://farm9.staticflickr.com/8448/7852350058_2d26b4c4ca_z.jpg", "id": 130613}, {"license": 2, "file_name": "000000107094.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000107094.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 04:35:27", "flickr_url": "http://farm3.staticflickr.com/2800/4342058836_4061b548ff_z.jpg", "id": 107094}, {"license": 3, "file_name": "000000400082.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000400082.jpg", "height": 283, "width": 500, "date_captured": "2013-11-20 08:38:40", "flickr_url": "http://farm1.staticflickr.com/168/466274861_a8cac33ae7_z.jpg", "id": 400082}, {"license": 4, "file_name": "000000336356.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000336356.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 14:47:15", "flickr_url": "http://farm5.staticflickr.com/4096/5050400852_d12877ae4a_z.jpg", "id": 336356}, {"license": 3, "file_name": "000000457559.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000457559.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 16:43:36", "flickr_url": "http://farm6.staticflickr.com/5189/5584634317_f855ffaffd_z.jpg", "id": 457559}, {"license": 2, "file_name": "000000142238.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000142238.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 16:47:35", "flickr_url": "http://farm5.staticflickr.com/4028/5079131149_dde584ed79_z.jpg", "id": 142238}, {"license": 3, "file_name": "000000416343.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000416343.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 19:06:37", "flickr_url": "http://farm5.staticflickr.com/4144/4969771652_bbb35788b1_z.jpg", "id": 416343}, {"license": 3, "file_name": "000000005193.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000005193.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 19:09:48", "flickr_url": "http://farm5.staticflickr.com/4043/4278083464_893a7a5c1d_z.jpg", "id": 5193}, {"license": 1, "file_name": "000000242060.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000242060.jpg", "height": 459, "width": 640, "date_captured": "2013-11-20 19:29:10", "flickr_url": "http://farm8.staticflickr.com/7435/10145505276_e16b49da9e_z.jpg", "id": 242060}, {"license": 5, "file_name": "000000479953.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000479953.jpg", "height": 393, "width": 640, "date_captured": "2013-11-20 22:02:16", "flickr_url": "http://farm9.staticflickr.com/8425/7757941410_6452048d5e_z.jpg", "id": 479953}, {"license": 3, "file_name": "000000409211.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000409211.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 01:39:47", "flickr_url": "http://farm9.staticflickr.com/8282/7877126262_1a68630815_z.jpg", "id": 409211}, {"license": 3, "file_name": "000000127530.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000127530.jpg", "height": 440, "width": 640, "date_captured": "2013-11-21 02:31:30", "flickr_url": "http://farm9.staticflickr.com/8419/8704206572_416fd192ce_z.jpg", "id": 127530}, {"license": 3, "file_name": "000000223182.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000223182.jpg", "height": 538, "width": 640, "date_captured": "2013-11-21 02:33:35", "flickr_url": "http://farm9.staticflickr.com/8119/8698373026_c14704dc6f_z.jpg", "id": 223182}, {"license": 3, "file_name": "000000362716.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000362716.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 02:34:53", "flickr_url": "http://farm9.staticflickr.com/8246/8622192346_977d5aa944_z.jpg", "id": 362716}, {"license": 3, "file_name": "000000321790.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000321790.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 02:36:36", "flickr_url": "http://farm9.staticflickr.com/8393/8622095370_9cfc3d3bb7_z.jpg", "id": 321790}, {"license": 3, "file_name": "000000463174.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000463174.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 02:54:59", "flickr_url": "http://farm9.staticflickr.com/8029/7994563138_dd4e4377b9_z.jpg", "id": 463174}, {"license": 3, "file_name": "000000152686.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000152686.jpg", "height": 400, "width": 640, "date_captured": "2013-11-21 03:01:28", "flickr_url": "http://farm9.staticflickr.com/8314/7884820480_1cba46eb3d_z.jpg", "id": 152686}, {"license": 3, "file_name": "000000126137.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000126137.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 03:51:16", "flickr_url": "http://farm7.staticflickr.com/6019/6321375034_7ca847ff53_z.jpg", "id": 126137}, {"license": 5, "file_name": "000000183391.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000183391.jpg", "height": 640, "width": 632, "date_captured": "2013-11-21 03:55:11", "flickr_url": "http://farm7.staticflickr.com/6049/6233885701_126a5c1821_z.jpg", "id": 183391}, {"license": 3, "file_name": "000000444142.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000444142.jpg", "height": 640, "width": 427, "date_captured": "2013-11-21 04:11:06", "flickr_url": "http://farm7.staticflickr.com/6017/5932823788_61c6f00dc5_z.jpg", "id": 444142}, {"license": 5, "file_name": "000000273760.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000273760.jpg", "height": 640, "width": 467, "date_captured": "2013-11-21 04:19:37", "flickr_url": "http://farm6.staticflickr.com/5156/5872238085_6ef7145483_z.jpg", "id": 273760}, {"license": 3, "file_name": "000000170474.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000170474.jpg", "height": 476, "width": 640, "date_captured": "2013-11-21 04:38:01", "flickr_url": "http://farm6.staticflickr.com/5304/5648597900_7441a6501d_z.jpg", "id": 170474}, {"license": 4, "file_name": "000000287347.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000287347.jpg", "height": 640, "width": 478, "date_captured": "2013-11-21 04:53:43", "flickr_url": "http://farm6.staticflickr.com/5089/5250579638_55e8ea39b1_z.jpg", "id": 287347}, {"license": 3, "file_name": "000000179642.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000179642.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 05:09:08", "flickr_url": "http://farm5.staticflickr.com/4090/4959266410_b07a1cfa29_z.jpg", "id": 179642}, {"license": 3, "file_name": "000000382009.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000382009.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 05:39:25", "flickr_url": "http://farm3.staticflickr.com/2739/4490850601_3714cfa113_z.jpg", "id": 382009}, {"license": 4, "file_name": "000000075612.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000075612.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 20:44:14", "flickr_url": "http://farm3.staticflickr.com/2579/4191595324_3c1f160567_z.jpg", "id": 75612}, {"license": 4, "file_name": "000000383842.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000383842.jpg", "height": 434, "width": 640, "date_captured": "2013-11-21 20:49:24", "flickr_url": "http://farm5.staticflickr.com/4023/4536776986_0e75095fcb_z.jpg", "id": 383842}, {"license": 3, "file_name": "000000154358.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000154358.jpg", "height": 640, "width": 427, "date_captured": "2013-11-21 21:17:33", "flickr_url": "http://farm8.staticflickr.com/7302/8719280912_19914c1b46_z.jpg", "id": 154358}, {"license": 2, "file_name": "000000463918.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000463918.jpg", "height": 359, "width": 500, "date_captured": "2013-11-21 23:50:39", "flickr_url": "http://farm1.staticflickr.com/133/379805926_5c253f5e7f_z.jpg", "id": 463918}, {"license": 3, "file_name": "000000449579.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000449579.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 02:43:48", "flickr_url": "http://farm3.staticflickr.com/2528/3921523213_46eb9a2fbe_z.jpg", "id": 449579}, {"license": 3, "file_name": "000000186345.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000186345.jpg", "height": 431, "width": 640, "date_captured": "2013-11-22 08:20:37", "flickr_url": "http://farm4.staticflickr.com/3485/3807419163_c59c74206c_z.jpg", "id": 186345}, {"license": 5, "file_name": "000000527215.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000527215.jpg", "height": 426, "width": 640, "date_captured": "2013-11-22 10:05:46", "flickr_url": "http://farm7.staticflickr.com/6208/6118912613_183765a80e_z.jpg", "id": 527215}, {"license": 1, "file_name": "000000283717.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000283717.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 15:16:57", "flickr_url": "http://farm1.staticflickr.com/54/175182527_a021a8ac56_z.jpg", "id": 283717}, {"license": 1, "file_name": "000000468965.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000468965.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 16:34:14", "flickr_url": "http://farm3.staticflickr.com/2476/4051432018_0b744bc830_z.jpg", "id": 468965}, {"license": 3, "file_name": "000000262227.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000262227.jpg", "height": 640, "width": 474, "date_captured": "2013-11-22 17:36:01", "flickr_url": "http://farm3.staticflickr.com/2381/1491594254_a8f0259fbf_z.jpg", "id": 262227}, {"license": 4, "file_name": "000000405279.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000405279.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 19:38:53", "flickr_url": "http://farm1.staticflickr.com/236/443807489_3d7fba2557_z.jpg", "id": 405279}, {"license": 3, "file_name": "000000528578.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000528578.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 22:32:09", "flickr_url": "http://farm3.staticflickr.com/2009/2045396024_6e730134a5_z.jpg", "id": 528578}, {"license": 3, "file_name": "000000216296.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000216296.jpg", "height": 427, "width": 640, "date_captured": "2013-11-23 03:29:55", "flickr_url": "http://farm4.staticflickr.com/3415/3415619314_fbe387f3dd_z.jpg", "id": 216296}, {"license": 2, "file_name": "000000248616.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000248616.jpg", "height": 427, "width": 640, "date_captured": "2013-11-23 05:03:52", "flickr_url": "http://farm2.staticflickr.com/1130/711672576_5a34a391b6_z.jpg", "id": 248616}, {"license": 3, "file_name": "000000482487.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000482487.jpg", "height": 640, "width": 480, "date_captured": "2013-11-23 18:05:07", "flickr_url": "http://farm1.staticflickr.com/9/16694852_730d1ebb1c_z.jpg", "id": 482487}, {"license": 3, "file_name": "000000402334.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000402334.jpg", "height": 640, "width": 427, "date_captured": "2013-11-23 18:09:12", "flickr_url": "http://farm4.staticflickr.com/3147/2601726278_b85c519aa8_z.jpg", "id": 402334}, {"license": 6, "file_name": "000000019742.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000019742.jpg", "height": 374, "width": 500, "date_captured": "2013-11-24 03:31:54", "flickr_url": "http://farm1.staticflickr.com/70/194348221_493851f79b_z.jpg", "id": 19742}, {"license": 1, "file_name": "000000300233.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000300233.jpg", "height": 489, "width": 640, "date_captured": "2013-11-24 03:47:48", "flickr_url": "http://farm5.staticflickr.com/4067/4441500485_701b67d8ac_z.jpg", "id": 300233}, {"license": 3, "file_name": "000000007818.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000007818.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 12:58:58", "flickr_url": "http://farm7.staticflickr.com/6223/6216825805_60c08b386b_z.jpg", "id": 7818}, {"license": 1, "file_name": "000000216419.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000216419.jpg", "height": 467, "width": 640, "date_captured": "2013-11-24 16:03:51", "flickr_url": "http://farm8.staticflickr.com/7241/7192816016_8bd15f9b87_z.jpg", "id": 216419}, {"license": 3, "file_name": "000000484978.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000484978.jpg", "height": 491, "width": 640, "date_captured": "2013-11-24 22:23:49", "flickr_url": "http://farm8.staticflickr.com/7391/10125629756_9aac7d103b_z.jpg", "id": 484978}, {"license": 1, "file_name": "000000147205.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000147205.jpg", "height": 437, "width": 640, "date_captured": "2013-11-25 13:54:30", "flickr_url": "http://farm9.staticflickr.com/8073/8279734389_312bae4e20_z.jpg", "id": 147205}, {"license": 5, "file_name": "000000025394.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000025394.jpg", "height": 640, "width": 480, "date_captured": "2013-11-25 21:34:58", "flickr_url": "http://farm1.staticflickr.com/38/87248274_fe9dc3879b_z.jpg", "id": 25394}, {"license": 1, "file_name": "000000550714.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000550714.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 12:13:39", "flickr_url": "http://farm1.staticflickr.com/28/44821132_07b6f1f8c7_z.jpg", "id": 550714}, {"license": 3, "file_name": "000000453302.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000453302.jpg", "height": 375, "width": 500, "date_captured": "2013-11-14 18:13:07", "flickr_url": "http://farm1.staticflickr.com/117/292954395_a07a6c2fea_z.jpg", "id": 453302}, {"license": 3, "file_name": "000000464476.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000464476.jpg", "height": 375, "width": 500, "date_captured": "2013-11-14 18:23:40", "flickr_url": "http://farm1.staticflickr.com/24/35275654_7d9397809b_z.jpg", "id": 464476}, {"license": 4, "file_name": "000000011149.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000011149.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 04:15:40", "flickr_url": "http://farm4.staticflickr.com/3625/3323418866_ea5017538d_z.jpg", "id": 11149}, {"license": 4, "file_name": "000000382734.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000382734.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 04:51:44", "flickr_url": "http://farm6.staticflickr.com/5053/5483980774_4814999023_z.jpg", "id": 382734}, {"license": 3, "file_name": "000000259640.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000259640.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 05:03:30", "flickr_url": "http://farm3.staticflickr.com/2669/4126424581_7bfd3682c7_z.jpg", "id": 259640}, {"license": 2, "file_name": "000000163258.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000163258.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 05:29:18", "flickr_url": "http://farm5.staticflickr.com/4104/4978806595_f3b1e2a6e6_z.jpg", "id": 163258}, {"license": 6, "file_name": "000000336232.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000336232.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 10:52:20", "flickr_url": "http://farm3.staticflickr.com/2553/5839792902_3e074fa6e9_z.jpg", "id": 336232}, {"license": 2, "file_name": "000000017207.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000017207.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 10:53:00", "flickr_url": "http://farm6.staticflickr.com/5131/5537426848_a4508fe44f_z.jpg", "id": 17207}, {"license": 1, "file_name": "000000394328.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000394328.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 13:32:10", "flickr_url": "http://farm8.staticflickr.com/7148/6547735213_8871a3301a_z.jpg", "id": 394328}, {"license": 1, "file_name": "000000244833.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000244833.jpg", "height": 428, "width": 640, "date_captured": "2013-11-15 13:51:36", "flickr_url": "http://farm1.staticflickr.com/158/363794430_2e2acd5c8b_z.jpg", "id": 244833}, {"license": 4, "file_name": "000000393569.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000393569.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 13:55:12", "flickr_url": "http://farm5.staticflickr.com/4014/4222801461_63b8674d2a_z.jpg", "id": 393569}, {"license": 2, "file_name": "000000136772.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000136772.jpg", "height": 334, "width": 500, "date_captured": "2013-11-15 14:30:58", "flickr_url": "http://farm4.staticflickr.com/3415/3335126997_b586d5d993_z.jpg", "id": 136772}, {"license": 3, "file_name": "000000008211.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000008211.jpg", "height": 459, "width": 640, "date_captured": "2013-11-15 14:44:03", "flickr_url": "http://farm5.staticflickr.com/4103/5055051223_ed3fe568bb_z.jpg", "id": 8211}, {"license": 2, "file_name": "000000031817.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000031817.jpg", "height": 640, "width": 334, "date_captured": "2013-11-15 15:07:56", "flickr_url": "http://farm9.staticflickr.com/8404/8864103621_6703f97ce9_z.jpg", "id": 31817}, {"license": 2, "file_name": "000000363875.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000363875.jpg", "height": 640, "width": 558, "date_captured": "2013-11-15 16:13:08", "flickr_url": "http://farm8.staticflickr.com/7371/8907674402_185c84aab2_z.jpg", "id": 363875}, {"license": 2, "file_name": "000000488075.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000488075.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 18:05:25", "flickr_url": "http://farm1.staticflickr.com/51/191172165_878b04a394_z.jpg", "id": 488075}, {"license": 4, "file_name": "000000366884.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000366884.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 18:22:29", "flickr_url": "http://farm4.staticflickr.com/3486/3939243337_e036a6b538_z.jpg", "id": 366884}, {"license": 6, "file_name": "000000018737.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000018737.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 18:31:53", "flickr_url": "http://farm5.staticflickr.com/4026/4511471485_c1791c0767_z.jpg", "id": 18737}, {"license": 6, "file_name": "000000498709.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000498709.jpg", "height": 425, "width": 640, "date_captured": "2013-11-15 19:19:55", "flickr_url": "http://farm8.staticflickr.com/7272/7705690300_05c872c6d2_z.jpg", "id": 498709}, {"license": 3, "file_name": "000000551794.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000551794.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 21:19:04", "flickr_url": "http://farm6.staticflickr.com/5024/5612666049_00de8214e4_z.jpg", "id": 551794}, {"license": 3, "file_name": "000000575205.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000575205.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 02:05:24", "flickr_url": "http://farm8.staticflickr.com/7044/6824654672_66305b2bc2_z.jpg", "id": 575205}, {"license": 4, "file_name": "000000361142.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000361142.jpg", "height": 640, "width": 463, "date_captured": "2013-11-16 12:00:44", "flickr_url": "http://farm3.staticflickr.com/2046/2274699389_b912eafb26_z.jpg", "id": 361142}, {"license": 1, "file_name": "000000118515.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000118515.jpg", "height": 299, "width": 640, "date_captured": "2013-11-16 15:09:35", "flickr_url": "http://farm7.staticflickr.com/6181/6147788791_ca80e89fc8_z.jpg", "id": 118515}, {"license": 4, "file_name": "000000546829.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000546829.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 15:32:10", "flickr_url": "http://farm4.staticflickr.com/3321/3602461508_d8fd434a9e_z.jpg", "id": 546829}, {"license": 4, "file_name": "000000094326.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000094326.jpg", "height": 500, "width": 375, "date_captured": "2013-11-16 16:03:30", "flickr_url": "http://farm3.staticflickr.com/2691/4461834727_ac4efc5cce_z.jpg", "id": 94326}, {"license": 1, "file_name": "000000306136.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000306136.jpg", "height": 640, "width": 428, "date_captured": "2013-11-16 17:07:05", "flickr_url": "http://farm2.staticflickr.com/1008/662109385_922436e3a3_z.jpg", "id": 306136}, {"license": 1, "file_name": "000000209222.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000209222.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 17:51:59", "flickr_url": "http://farm8.staticflickr.com/7442/9213764329_cc313a9686_z.jpg", "id": 209222}, {"license": 3, "file_name": "000000221281.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000221281.jpg", "height": 640, "width": 359, "date_captured": "2013-11-16 19:00:02", "flickr_url": "http://farm5.staticflickr.com/4015/4672423180_22dc26e572_z.jpg", "id": 221281}, {"license": 1, "file_name": "000000112634.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000112634.jpg", "height": 443, "width": 640, "date_captured": "2013-11-16 19:12:53", "flickr_url": "http://farm5.staticflickr.com/4007/4501382041_3f4aa22df3_z.jpg", "id": 112634}, {"license": 3, "file_name": "000000474881.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000474881.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 19:19:28", "flickr_url": "http://farm4.staticflickr.com/3286/2777024879_8645452e56_z.jpg", "id": 474881}, {"license": 3, "file_name": "000000224200.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000224200.jpg", "height": 640, "width": 640, "date_captured": "2013-11-16 20:10:21", "flickr_url": "http://farm1.staticflickr.com/21/30530170_a77052c390_z.jpg", "id": 224200}, {"license": 6, "file_name": "000000088848.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000088848.jpg", "height": 640, "width": 640, "date_captured": "2013-11-16 21:20:07", "flickr_url": "http://farm6.staticflickr.com/5062/5650110354_9eedebe1a3_z.jpg", "id": 88848}, {"license": 3, "file_name": "000000029397.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000029397.jpg", "height": 449, "width": 640, "date_captured": "2013-11-16 22:02:45", "flickr_url": "http://farm9.staticflickr.com/8066/8199388944_a7499fe90c_z.jpg", "id": 29397}, {"license": 3, "file_name": "000000389684.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000389684.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 23:04:03", "flickr_url": "http://farm9.staticflickr.com/8505/8558571403_6727511ef9_z.jpg", "id": 389684}, {"license": 1, "file_name": "000000527616.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000527616.jpg", "height": 496, "width": 640, "date_captured": "2013-11-17 01:39:09", "flickr_url": "http://farm4.staticflickr.com/3212/2799691936_245f1e43d6_z.jpg", "id": 527616}, {"license": 1, "file_name": "000000151516.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000151516.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 01:52:32", "flickr_url": "http://farm3.staticflickr.com/2200/2287725102_5ae7c39fd7_z.jpg", "id": 151516}, {"license": 3, "file_name": "000000500613.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000500613.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 02:41:54", "flickr_url": "http://farm5.staticflickr.com/4043/4452554176_b4871ba4d0_z.jpg", "id": 500613}, {"license": 6, "file_name": "000000344611.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000344611.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 03:07:51", "flickr_url": "http://farm2.staticflickr.com/1397/1226983276_bf5543fee2_z.jpg", "id": 344611}, {"license": 5, "file_name": "000000252294.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000252294.jpg", "height": 500, "width": 375, "date_captured": "2013-11-17 04:06:23", "flickr_url": "http://farm1.staticflickr.com/115/303735109_9352aacb67_z.jpg", "id": 252294}, {"license": 3, "file_name": "000000001353.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000001353.jpg", "height": 500, "width": 375, "date_captured": "2013-11-17 04:33:52", "flickr_url": "http://farm3.staticflickr.com/2683/4205117799_327d7e77ee_z.jpg", "id": 1353}, {"license": 3, "file_name": "000000185472.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000185472.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 04:35:09", "flickr_url": "http://farm1.staticflickr.com/15/21041307_e6188f6c39_z.jpg", "id": 185472}, {"license": 3, "file_name": "000000259854.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000259854.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 05:41:23", "flickr_url": "http://farm4.staticflickr.com/3252/2986108416_d4985f5abc_z.jpg", "id": 259854}, {"license": 1, "file_name": "000000015751.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000015751.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 05:52:45", "flickr_url": "http://farm8.staticflickr.com/7351/9419515091_a211b75ce5_z.jpg", "id": 15751}, {"license": 5, "file_name": "000000057149.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000057149.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 08:00:43", "flickr_url": "http://farm9.staticflickr.com/8505/8541387897_fbf4b3050a_z.jpg", "id": 57149}, {"license": 4, "file_name": "000000127135.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000127135.jpg", "height": 640, "width": 427, "date_captured": "2013-11-17 09:13:04", "flickr_url": "http://farm3.staticflickr.com/2035/5697255535_222d153fa6_z.jpg", "id": 127135}, {"license": 3, "file_name": "000000155341.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000155341.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 14:59:30", "flickr_url": "http://farm8.staticflickr.com/7041/7063292059_6b57597e5f_z.jpg", "id": 155341}, {"license": 2, "file_name": "000000492284.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000492284.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 16:22:16", "flickr_url": "http://farm1.staticflickr.com/175/464684623_7627d8ccc7_z.jpg", "id": 492284}, {"license": 4, "file_name": "000000389451.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000389451.jpg", "height": 479, "width": 640, "date_captured": "2013-11-17 17:42:07", "flickr_url": "http://farm9.staticflickr.com/8216/8336832110_eeb84b1eed_z.jpg", "id": 389451}, {"license": 3, "file_name": "000000365745.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000365745.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 18:27:38", "flickr_url": "http://farm9.staticflickr.com/8251/8652543109_089beff86c_z.jpg", "id": 365745}, {"license": 3, "file_name": "000000478474.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000478474.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 21:07:58", "flickr_url": "http://farm8.staticflickr.com/7279/6867516304_71f72448c6_z.jpg", "id": 478474}, {"license": 3, "file_name": "000000172648.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000172648.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 21:10:02", "flickr_url": "http://farm7.staticflickr.com/6050/6850196156_4329d909a8_z.jpg", "id": 172648}, {"license": 5, "file_name": "000000399764.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000399764.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 00:04:04", "flickr_url": "http://farm6.staticflickr.com/5027/5777469905_789a18095a_z.jpg", "id": 399764}, {"license": 1, "file_name": "000000425390.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000425390.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 00:07:27", "flickr_url": "http://farm3.staticflickr.com/2472/3834878110_0fae9f6f71_z.jpg", "id": 425390}, {"license": 2, "file_name": "000000396580.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000396580.jpg", "height": 430, "width": 640, "date_captured": "2013-11-18 01:10:36", "flickr_url": "http://farm8.staticflickr.com/7281/9615371833_83bd54ba20_z.jpg", "id": 396580}, {"license": 1, "file_name": "000000151938.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000151938.jpg", "height": 640, "width": 470, "date_captured": "2013-11-18 03:00:07", "flickr_url": "http://farm8.staticflickr.com/7151/6779868923_cd82eb9d59_z.jpg", "id": 151938}, {"license": 1, "file_name": "000000232244.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000232244.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 03:24:40", "flickr_url": "http://farm1.staticflickr.com/2/2920007_1f0e3e4461_z.jpg", "id": 232244}, {"license": 4, "file_name": "000000411953.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000411953.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 04:25:03", "flickr_url": "http://farm5.staticflickr.com/4039/4393500671_ecc45c44ea_z.jpg", "id": 411953}, {"license": 1, "file_name": "000000580197.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000580197.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 05:22:26", "flickr_url": "http://farm4.staticflickr.com/3341/3521076291_218ee948d4_z.jpg", "id": 580197}, {"license": 3, "file_name": "000000491757.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000491757.jpg", "height": 479, "width": 640, "date_captured": "2013-11-18 06:21:48", "flickr_url": "http://farm6.staticflickr.com/5088/5361236277_34d2fe0d27_z.jpg", "id": 491757}, {"license": 6, "file_name": "000000114049.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000114049.jpg", "height": 640, "width": 425, "date_captured": "2013-11-18 06:49:27", "flickr_url": "http://farm3.staticflickr.com/2818/9527811860_471b747e6d_z.jpg", "id": 114049}, {"license": 3, "file_name": "000000320743.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000320743.jpg", "height": 360, "width": 640, "date_captured": "2013-11-18 07:30:47", "flickr_url": "http://farm6.staticflickr.com/5108/5730543548_52e6ef3338_z.jpg", "id": 320743}, {"license": 4, "file_name": "000000167128.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000167128.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 09:50:58", "flickr_url": "http://farm5.staticflickr.com/4017/4538485332_b7c4cb664c_z.jpg", "id": 167128}, {"license": 1, "file_name": "000000453001.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000453001.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 10:00:13", "flickr_url": "http://farm3.staticflickr.com/2049/2036297110_8e15a84fa5_z.jpg", "id": 453001}, {"license": 2, "file_name": "000000292155.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000292155.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 11:49:56", "flickr_url": "http://farm2.staticflickr.com/1355/5131100237_f2270c9018_z.jpg", "id": 292155}, {"license": 4, "file_name": "000000521259.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000521259.jpg", "height": 457, "width": 640, "date_captured": "2013-11-18 12:15:58", "flickr_url": "http://farm9.staticflickr.com/8050/8115935734_0ff6dcfd4e_z.jpg", "id": 521259}, {"license": 5, "file_name": "000000088485.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000088485.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 13:25:34", "flickr_url": "http://farm3.staticflickr.com/2593/5721763173_16433bab1c_z.jpg", "id": 88485}, {"license": 3, "file_name": "000000081766.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000081766.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 13:30:03", "flickr_url": "http://farm9.staticflickr.com/8090/8580230240_204e168677_z.jpg", "id": 81766}, {"license": 3, "file_name": "000000376278.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000376278.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 14:47:55", "flickr_url": "http://farm1.staticflickr.com/32/36440547_5e3c4109d9_z.jpg", "id": 376278}, {"license": 1, "file_name": "000000022892.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000022892.jpg", "height": 334, "width": 500, "date_captured": "2013-11-18 15:11:22", "flickr_url": "http://farm1.staticflickr.com/243/521936273_d0817d38a4_z.jpg", "id": 22892}, {"license": 3, "file_name": "000000127263.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000127263.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 15:22:30", "flickr_url": "http://farm5.staticflickr.com/4139/4872005505_8f7d0ec538_z.jpg", "id": 127263}, {"license": 4, "file_name": "000000464872.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000464872.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 18:55:38", "flickr_url": "http://farm5.staticflickr.com/4066/4525259509_e7910cd154_z.jpg", "id": 464872}, {"license": 3, "file_name": "000000562443.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000562443.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 21:29:22", "flickr_url": "http://farm1.staticflickr.com/192/488756148_8e520a535b_z.jpg", "id": 562443}, {"license": 3, "file_name": "000000242724.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000242724.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 21:40:57", "flickr_url": "http://farm5.staticflickr.com/4143/4896774340_c905caa130_z.jpg", "id": 242724}, {"license": 3, "file_name": "000000206838.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000206838.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 21:43:57", "flickr_url": "http://farm5.staticflickr.com/4073/4896178637_620b092e2d_z.jpg", "id": 206838}, {"license": 3, "file_name": "000000060770.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000060770.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 21:49:32", "flickr_url": "http://farm1.staticflickr.com/160/361923248_e59066ac06_z.jpg", "id": 60770}, {"license": 4, "file_name": "000000129054.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000129054.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 21:50:50", "flickr_url": "http://farm1.staticflickr.com/177/411065926_2483e52299_z.jpg", "id": 129054}, {"license": 5, "file_name": "000000380203.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000380203.jpg", "height": 640, "width": 429, "date_captured": "2013-11-18 22:42:08", "flickr_url": "http://farm5.staticflickr.com/4121/4894742604_c45710ab18_z.jpg", "id": 380203}, {"license": 4, "file_name": "000000367818.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000367818.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 00:29:55", "flickr_url": "http://farm8.staticflickr.com/7395/9711101074_12b299b7d3_z.jpg", "id": 367818}, {"license": 4, "file_name": "000000054931.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000054931.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 00:30:02", "flickr_url": "http://farm4.staticflickr.com/3707/9707884793_36195de2b5_z.jpg", "id": 54931}, {"license": 6, "file_name": "000000550471.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000550471.jpg", "height": 425, "width": 640, "date_captured": "2013-11-19 18:07:46", "flickr_url": "http://farm8.staticflickr.com/7114/7481193008_c0c2bfceb1_z.jpg", "id": 550471}, {"license": 1, "file_name": "000000554328.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000554328.jpg", "height": 499, "width": 640, "date_captured": "2013-11-19 18:25:43", "flickr_url": "http://farm5.staticflickr.com/4149/5072971882_8bb1f01b18_z.jpg", "id": 554328}, {"license": 3, "file_name": "000000470779.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000470779.jpg", "height": 479, "width": 640, "date_captured": "2013-11-19 19:40:18", "flickr_url": "http://farm3.staticflickr.com/2851/9135027343_db2d31c179_z.jpg", "id": 470779}, {"license": 3, "file_name": "000000032735.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000032735.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 19:52:02", "flickr_url": "http://farm9.staticflickr.com/8520/8577295645_aaf98d957a_z.jpg", "id": 32735}, {"license": 3, "file_name": "000000407298.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000407298.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 21:33:00", "flickr_url": "http://farm1.staticflickr.com/210/503858232_80bcbda3b1_z.jpg", "id": 407298}, {"license": 3, "file_name": "000000463542.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000463542.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 23:41:25", "flickr_url": "http://farm5.staticflickr.com/4121/4754085146_a2f3582064_z.jpg", "id": 463542}, {"license": 1, "file_name": "000000455267.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000455267.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 00:03:45", "flickr_url": "http://farm3.staticflickr.com/2531/3831009020_60141eb845_z.jpg", "id": 455267}, {"license": 1, "file_name": "000000544052.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000544052.jpg", "height": 640, "width": 640, "date_captured": "2013-11-20 03:57:13", "flickr_url": "http://farm4.staticflickr.com/3035/5796962259_1c669d7608_z.jpg", "id": 544052}, {"license": 4, "file_name": "000000384666.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000384666.jpg", "height": 332, "width": 500, "date_captured": "2013-11-20 04:00:37", "flickr_url": "http://farm5.staticflickr.com/4036/4417921536_1d4f823e8f_z.jpg", "id": 384666}, {"license": 2, "file_name": "000000043581.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000043581.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 05:04:26", "flickr_url": "http://farm5.staticflickr.com/4015/4378213940_4dd7903e0f_z.jpg", "id": 43581}, {"license": 2, "file_name": "000000054592.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000054592.jpg", "height": 418, "width": 640, "date_captured": "2013-11-20 05:19:24", "flickr_url": "http://farm3.staticflickr.com/2684/4262379074_775e768004_z.jpg", "id": 54592}, {"license": 3, "file_name": "000000256868.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000256868.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 07:51:12", "flickr_url": "http://farm4.staticflickr.com/3303/3613623842_03b22fdb57_z.jpg", "id": 256868}, {"license": 1, "file_name": "000000230983.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000230983.jpg", "height": 640, "width": 430, "date_captured": "2013-11-20 08:43:47", "flickr_url": "http://farm4.staticflickr.com/3617/3324882570_1461321aa1_z.jpg", "id": 230983}, {"license": 5, "file_name": "000000092053.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000092053.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 13:00:58", "flickr_url": "http://farm6.staticflickr.com/5244/5375419008_044fb14543_z.jpg", "id": 92053}, {"license": 4, "file_name": "000000035682.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000035682.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 15:06:24", "flickr_url": "http://farm5.staticflickr.com/4062/4666441455_b9bac3570c_z.jpg", "id": 35682}, {"license": 1, "file_name": "000000368684.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000368684.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 20:29:49", "flickr_url": "http://farm4.staticflickr.com/3334/3213577822_f97d484cee_z.jpg", "id": 368684}, {"license": 3, "file_name": "000000061333.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000061333.jpg", "height": 361, "width": 500, "date_captured": "2013-11-20 20:35:03", "flickr_url": "http://farm3.staticflickr.com/2355/2105519375_646a02b950_z.jpg", "id": 61333}, {"license": 4, "file_name": "000000049759.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000049759.jpg", "height": 457, "width": 640, "date_captured": "2013-11-20 22:20:16", "flickr_url": "http://farm9.staticflickr.com/8024/7582138098_1d39d0e871_z.jpg", "id": 49759}, {"license": 2, "file_name": "000000232692.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000232692.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 23:03:53", "flickr_url": "http://farm7.staticflickr.com/6128/5990893342_a44110d2ca_z.jpg", "id": 232692}, {"license": 3, "file_name": "000000180101.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000180101.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 23:57:03", "flickr_url": "http://farm8.staticflickr.com/7230/7206950062_f0854f36c7_z.jpg", "id": 180101}, {"license": 1, "file_name": "000000468577.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000468577.jpg", "height": 612, "width": 612, "date_captured": "2013-11-21 01:04:00", "flickr_url": "http://farm9.staticflickr.com/8301/7959236714_c24988a222_z.jpg", "id": 468577}, {"license": 3, "file_name": "000000044877.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000044877.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 01:56:08", "flickr_url": "http://farm8.staticflickr.com/7322/10071287613_fb2376ebb2_z.jpg", "id": 44877}, {"license": 3, "file_name": "000000386879.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000386879.jpg", "height": 640, "width": 426, "date_captured": "2013-11-21 03:30:43", "flickr_url": "http://farm8.staticflickr.com/7188/7113428705_c1bee81dbd_z.jpg", "id": 386879}, {"license": 1, "file_name": "000000229111.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000229111.jpg", "height": 500, "width": 375, "date_captured": "2013-11-21 21:43:56", "flickr_url": "http://farm4.staticflickr.com/3033/2945990166_370759d149_z.jpg", "id": 229111}, {"license": 3, "file_name": "000000139684.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000139684.jpg", "height": 333, "width": 500, "date_captured": "2013-11-22 00:51:34", "flickr_url": "http://farm3.staticflickr.com/2793/4386321826_9830af09c5_z.jpg", "id": 139684}, {"license": 1, "file_name": "000000492905.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000492905.jpg", "height": 343, "width": 500, "date_captured": "2013-11-22 01:11:50", "flickr_url": "http://farm1.staticflickr.com/2/2060239_13d886e237_z.jpg", "id": 492905}, {"license": 6, "file_name": "000000579970.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000579970.jpg", "height": 336, "width": 500, "date_captured": "2013-11-22 01:52:53", "flickr_url": "http://farm4.staticflickr.com/3513/3840928054_a309793a30_z.jpg", "id": 579970}, {"license": 3, "file_name": "000000242934.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000242934.jpg", "height": 227, "width": 500, "date_captured": "2013-11-22 03:07:13", "flickr_url": "http://farm4.staticflickr.com/3149/3286061741_19b7c32167_z.jpg", "id": 242934}, {"license": 1, "file_name": "000000407868.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000407868.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 09:08:42", "flickr_url": "http://farm1.staticflickr.com/49/125970737_0978ed224a_z.jpg", "id": 407868}, {"license": 1, "file_name": "000000293200.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000293200.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 14:50:59", "flickr_url": "http://farm9.staticflickr.com/8354/8352575446_a5aa14b770_z.jpg", "id": 293200}, {"license": 4, "file_name": "000000433515.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000433515.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 16:23:34", "flickr_url": "http://farm5.staticflickr.com/4047/4510111045_c62aaeb98a_z.jpg", "id": 433515}, {"license": 1, "file_name": "000000549738.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000549738.jpg", "height": 426, "width": 640, "date_captured": "2013-11-22 17:09:11", "flickr_url": "http://farm4.staticflickr.com/3387/3624312977_13986a22b3_z.jpg", "id": 549738}, {"license": 3, "file_name": "000000466416.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000466416.jpg", "height": 425, "width": 640, "date_captured": "2013-11-22 22:12:16", "flickr_url": "http://farm5.staticflickr.com/4144/5175815546_8c0f6991ac_z.jpg", "id": 466416}, {"license": 5, "file_name": "000000002153.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000002153.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 23:42:23", "flickr_url": "http://farm3.staticflickr.com/2220/2535221304_39d9542f76_z.jpg", "id": 2153}, {"license": 5, "file_name": "000000050638.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000050638.jpg", "height": 393, "width": 640, "date_captured": "2013-11-24 00:52:10", "flickr_url": "http://farm4.staticflickr.com/3085/5708760061_15445422e8_z.jpg", "id": 50638}, {"license": 4, "file_name": "000000005001.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000005001.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 01:51:55", "flickr_url": "http://farm6.staticflickr.com/5298/5457068434_0929d78491_z.jpg", "id": 5001}, {"license": 3, "file_name": "000000207585.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000207585.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 03:02:30", "flickr_url": "http://farm3.staticflickr.com/2341/2681303515_52bb227c35_z.jpg", "id": 207585}, {"license": 1, "file_name": "000000256407.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000256407.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 03:50:17", "flickr_url": "http://farm9.staticflickr.com/8170/8051701595_2d0c6fd6de_z.jpg", "id": 256407}, {"license": 5, "file_name": "000000426253.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000426253.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 05:04:45", "flickr_url": "http://farm5.staticflickr.com/4129/4980536343_8b4e5a45a2_z.jpg", "id": 426253}, {"license": 1, "file_name": "000000249180.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000249180.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 05:16:54", "flickr_url": "http://farm9.staticflickr.com/8336/8144191550_2a42611445_z.jpg", "id": 249180}, {"license": 2, "file_name": "000000035326.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000035326.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 06:09:23", "flickr_url": "http://farm1.staticflickr.com/91/248935424_f27aec0c76_z.jpg", "id": 35326}, {"license": 1, "file_name": "000000398377.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000398377.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 06:44:27", "flickr_url": "http://farm4.staticflickr.com/3514/3706426310_77d7aa7e2d_z.jpg", "id": 398377}, {"license": 3, "file_name": "000000048564.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000048564.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 08:25:07", "flickr_url": "http://farm3.staticflickr.com/2717/4403543165_ecd7fc2e8d_z.jpg", "id": 48564}, {"license": 3, "file_name": "000000336628.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000336628.jpg", "height": 640, "width": 428, "date_captured": "2013-11-24 08:41:25", "flickr_url": "http://farm4.staticflickr.com/3352/3564008687_a735d88b0b_z.jpg", "id": 336628}, {"license": 3, "file_name": "000000553731.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000553731.jpg", "height": 428, "width": 640, "date_captured": "2013-11-24 08:41:27", "flickr_url": "http://farm3.staticflickr.com/2433/3564009427_6f58d99dcd_z.jpg", "id": 553731}, {"license": 6, "file_name": "000000073533.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000073533.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 09:34:53", "flickr_url": "http://farm1.staticflickr.com/60/169520835_9e8e36564b_z.jpg", "id": 73533}, {"license": 2, "file_name": "000000164363.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000164363.jpg", "height": 604, "width": 640, "date_captured": "2013-11-24 12:15:51", "flickr_url": "http://farm8.staticflickr.com/7302/8719895313_9dca41af72_z.jpg", "id": 164363}, {"license": 2, "file_name": "000000468233.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000468233.jpg", "height": 399, "width": 600, "date_captured": "2013-11-24 14:37:33", "flickr_url": "http://farm9.staticflickr.com/8254/8610417436_0f958cf077_z.jpg", "id": 468233}, {"license": 3, "file_name": "000000125572.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000125572.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 15:12:28", "flickr_url": "http://farm9.staticflickr.com/8486/8229817773_a673f33377_z.jpg", "id": 125572}, {"license": 1, "file_name": "000000170595.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000170595.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 15:30:57", "flickr_url": "http://farm9.staticflickr.com/8508/8477626952_96bacaa6a7_z.jpg", "id": 170595}, {"license": 2, "file_name": "000000295797.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000295797.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 16:08:45", "flickr_url": "http://farm8.staticflickr.com/7078/7180977508_53df5faa1e_z.jpg", "id": 295797}, {"license": 1, "file_name": "000000262631.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000262631.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 20:03:36", "flickr_url": "http://farm1.staticflickr.com/166/377133596_029c041d39_z.jpg", "id": 262631}, {"license": 6, "file_name": "000000335954.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000335954.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 22:31:24", "flickr_url": "http://farm6.staticflickr.com/5460/9899305603_060a35fe3e_z.jpg", "id": 335954}, {"license": 4, "file_name": "000000347335.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000347335.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 23:24:58", "flickr_url": "http://farm3.staticflickr.com/2813/8751013631_0001c7d99c_z.jpg", "id": 347335}, {"license": 1, "file_name": "000000305609.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000305609.jpg", "height": 612, "width": 612, "date_captured": "2013-11-25 01:18:42", "flickr_url": "http://farm9.staticflickr.com/8179/8042201162_125e18168f_z.jpg", "id": 305609}, {"license": 3, "file_name": "000000546219.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000546219.jpg", "height": 427, "width": 640, "date_captured": "2013-11-25 07:48:17", "flickr_url": "http://farm4.staticflickr.com/3774/9668091384_e5e1ff9dc2_z.jpg", "id": 546219}, {"license": 1, "file_name": "000000180751.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000180751.jpg", "height": 480, "width": 640, "date_captured": "2013-11-25 19:38:35", "flickr_url": "http://farm7.staticflickr.com/6169/6215579954_c016735332_z.jpg", "id": 180751}, {"license": 3, "file_name": "000000191845.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000191845.jpg", "height": 361, "width": 640, "date_captured": "2013-11-14 12:37:36", "flickr_url": "http://farm4.staticflickr.com/3403/3619845349_5d52d8c5f0_z.jpg", "id": 191845}, {"license": 5, "file_name": "000000507081.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000507081.jpg", "height": 640, "width": 640, "date_captured": "2013-11-14 16:00:56", "flickr_url": "http://farm8.staticflickr.com/7149/6603084771_262db5f7a8_z.jpg", "id": 507081}, {"license": 4, "file_name": "000000129113.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000129113.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 18:23:28", "flickr_url": "http://farm5.staticflickr.com/4100/4892593807_a2859652de_z.jpg", "id": 129113}, {"license": 3, "file_name": "000000407614.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000407614.jpg", "height": 426, "width": 640, "date_captured": "2013-11-14 18:38:27", "flickr_url": "http://farm8.staticflickr.com/7117/7021221373_859b06a624_z.jpg", "id": 407614}, {"license": 4, "file_name": "000000415194.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000415194.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 21:16:07", "flickr_url": "http://farm5.staticflickr.com/4018/4280444310_075d3e636d_z.jpg", "id": 415194}, {"license": 2, "file_name": "000000228436.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000228436.jpg", "height": 485, "width": 640, "date_captured": "2013-11-14 23:13:59", "flickr_url": "http://farm6.staticflickr.com/5232/6921715956_85a99196b9_z.jpg", "id": 228436}, {"license": 1, "file_name": "000000350833.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000350833.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 02:49:46", "flickr_url": "http://farm5.staticflickr.com/4057/4569565001_3f0c7dee51_z.jpg", "id": 350833}, {"license": 3, "file_name": "000000286907.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000286907.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 05:42:05", "flickr_url": "http://farm3.staticflickr.com/2746/4453402681_6dc96304dc_z.jpg", "id": 286907}, {"license": 3, "file_name": "000000482719.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000482719.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 18:45:02", "flickr_url": "http://farm5.staticflickr.com/4149/4968174858_89c0227671_z.jpg", "id": 482719}, {"license": 1, "file_name": "000000532129.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000532129.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 20:25:41", "flickr_url": "http://farm3.staticflickr.com/2036/2272800534_66b75a14f7_z.jpg", "id": 532129}, {"license": 5, "file_name": "000000386457.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000386457.jpg", "height": 640, "width": 426, "date_captured": "2013-11-15 21:48:33", "flickr_url": "http://farm9.staticflickr.com/8336/8393574815_e640d7911a_z.jpg", "id": 386457}, {"license": 4, "file_name": "000000463037.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000463037.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 02:28:38", "flickr_url": "http://farm6.staticflickr.com/5228/5601865726_2e1a8966e9_z.jpg", "id": 463037}, {"license": 3, "file_name": "000000110359.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000110359.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 03:45:25", "flickr_url": "http://farm3.staticflickr.com/2055/5749235978_3ca7c4ecf6_z.jpg", "id": 110359}, {"license": 5, "file_name": "000000383676.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000383676.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 12:12:56", "flickr_url": "http://farm1.staticflickr.com/214/467713694_6244a8d094_z.jpg", "id": 383676}, {"license": 2, "file_name": "000000215723.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000215723.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 14:38:10", "flickr_url": "http://farm3.staticflickr.com/2794/4366396806_83e920de19_z.jpg", "id": 215723}, {"license": 1, "file_name": "000000279145.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000279145.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 14:38:13", "flickr_url": "http://farm5.staticflickr.com/4057/4597170077_ba86f04dab_z.jpg", "id": 279145}, {"license": 5, "file_name": "000000261161.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000261161.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 15:12:17", "flickr_url": "http://farm9.staticflickr.com/8325/8113006533_a2d7ac54d0_z.jpg", "id": 261161}, {"license": 4, "file_name": "000000545407.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000545407.jpg", "height": 424, "width": 640, "date_captured": "2013-11-16 15:19:35", "flickr_url": "http://farm6.staticflickr.com/5450/7230915270_bd99d72412_z.jpg", "id": 545407}, {"license": 4, "file_name": "000000490413.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000490413.jpg", "height": 238, "width": 640, "date_captured": "2013-11-16 15:19:37", "flickr_url": "http://farm9.staticflickr.com/8010/7228076248_0a54e97446_z.jpg", "id": 490413}, {"license": 3, "file_name": "000000171298.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000171298.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 17:15:03", "flickr_url": "http://farm5.staticflickr.com/4003/4677830720_4497b868b4_z.jpg", "id": 171298}, {"license": 3, "file_name": "000000443498.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000443498.jpg", "height": 478, "width": 640, "date_captured": "2013-11-16 17:18:39", "flickr_url": "http://farm9.staticflickr.com/8336/8136075942_dea252ea17_z.jpg", "id": 443498}, {"license": 1, "file_name": "000000486046.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000486046.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 17:43:20", "flickr_url": "http://farm7.staticflickr.com/6039/6294469035_45b79c1e49_z.jpg", "id": 486046}, {"license": 1, "file_name": "000000282912.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000282912.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 17:43:22", "flickr_url": "http://farm7.staticflickr.com/6119/6410338509_0c1ba16589_z.jpg", "id": 282912}, {"license": 1, "file_name": "000000506454.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000506454.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 18:02:48", "flickr_url": "http://farm4.staticflickr.com/3544/3790706878_82cdbcbbed_z.jpg", "id": 506454}, {"license": 1, "file_name": "000000448448.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000448448.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 18:18:02", "flickr_url": "http://farm6.staticflickr.com/5296/5584713869_7207b0bd4c_z.jpg", "id": 448448}, {"license": 4, "file_name": "000000365655.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000365655.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 20:14:41", "flickr_url": "http://farm4.staticflickr.com/3788/9708425604_ea76a33375_z.jpg", "id": 365655}, {"license": 1, "file_name": "000000464824.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000464824.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 21:07:00", "flickr_url": "http://farm3.staticflickr.com/2886/9474428857_7f6880c660_z.jpg", "id": 464824}, {"license": 1, "file_name": "000000165713.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000165713.jpg", "height": 640, "width": 425, "date_captured": "2013-11-16 21:18:43", "flickr_url": "http://farm6.staticflickr.com/5244/5247740724_6faedbe725_z.jpg", "id": 165713}, {"license": 3, "file_name": "000000222458.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000222458.jpg", "height": 424, "width": 640, "date_captured": "2013-11-16 21:39:19", "flickr_url": "http://farm9.staticflickr.com/8404/8619062492_1b277371ce_z.jpg", "id": 222458}, {"license": 1, "file_name": "000000180011.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000180011.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 23:54:40", "flickr_url": "http://farm4.staticflickr.com/3202/2998964444_db84a308e1_z.jpg", "id": 180011}, {"license": 3, "file_name": "000000334521.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000334521.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 01:37:34", "flickr_url": "http://farm1.staticflickr.com/71/220866513_d3b11e321e_z.jpg", "id": 334521}, {"license": 4, "file_name": "000000182441.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000182441.jpg", "height": 399, "width": 640, "date_captured": "2013-11-17 01:41:36", "flickr_url": "http://farm3.staticflickr.com/2817/9439811527_de41cb0b8c_z.jpg", "id": 182441}, {"license": 2, "file_name": "000000161128.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000161128.jpg", "height": 500, "width": 375, "date_captured": "2013-11-17 03:04:46", "flickr_url": "http://farm4.staticflickr.com/3189/2756663393_1c18fbf0be_z.jpg", "id": 161128}, {"license": 4, "file_name": "000000492282.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000492282.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 04:07:52", "flickr_url": "http://farm4.staticflickr.com/3086/2567250393_eb51096d65_z.jpg", "id": 492282}, {"license": 4, "file_name": "000000514376.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000514376.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 04:40:06", "flickr_url": "http://farm3.staticflickr.com/2842/8750726399_6f14b42d73_z.jpg", "id": 514376}, {"license": 3, "file_name": "000000572462.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000572462.jpg", "height": 612, "width": 612, "date_captured": "2013-11-17 08:16:55", "flickr_url": "http://farm6.staticflickr.com/5328/9353160625_b3b878ffa2_z.jpg", "id": 572462}, {"license": 1, "file_name": "000000236845.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000236845.jpg", "height": 640, "width": 495, "date_captured": "2013-11-17 08:54:51", "flickr_url": "http://farm9.staticflickr.com/8465/8120731566_350fec87c7_z.jpg", "id": 236845}, {"license": 1, "file_name": "000000385205.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000385205.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 18:42:16", "flickr_url": "http://farm1.staticflickr.com/184/440507953_b0a61156db_z.jpg", "id": 385205}, {"license": 1, "file_name": "000000515025.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000515025.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 18:43:15", "flickr_url": "http://farm4.staticflickr.com/3113/2454066623_2f9e111686_z.jpg", "id": 515025}, {"license": 3, "file_name": "000000135872.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000135872.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 19:22:38", "flickr_url": "http://farm2.staticflickr.com/1151/1336468896_300b173e2a_z.jpg", "id": 135872}, {"license": 2, "file_name": "000000125072.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000125072.jpg", "height": 314, "width": 640, "date_captured": "2013-11-17 21:35:12", "flickr_url": "http://farm9.staticflickr.com/8305/7991872054_6fa8e2290f_z.jpg", "id": 125072}, {"license": 2, "file_name": "000000118594.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000118594.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 21:53:31", "flickr_url": "http://farm8.staticflickr.com/7139/7766356622_5982b9784d_z.jpg", "id": 118594}, {"license": 5, "file_name": "000000406417.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000406417.jpg", "height": 640, "width": 568, "date_captured": "2013-11-18 01:28:01", "flickr_url": "http://farm4.staticflickr.com/3415/4554419189_629e1d25e8_z.jpg", "id": 406417}, {"license": 5, "file_name": "000000531495.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000531495.jpg", "height": 438, "width": 640, "date_captured": "2013-11-18 02:16:56", "flickr_url": "http://farm9.staticflickr.com/8224/8268886049_ba68bab85f_z.jpg", "id": 531495}, {"license": 3, "file_name": "000000391144.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000391144.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 02:46:11", "flickr_url": "http://farm5.staticflickr.com/4028/4628480087_41fc74ed27_z.jpg", "id": 391144}, {"license": 3, "file_name": "000000210708.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000210708.jpg", "height": 333, "width": 500, "date_captured": "2013-11-18 02:55:49", "flickr_url": "http://farm3.staticflickr.com/2402/2514703422_c8f1fc2c68_z.jpg", "id": 210708}, {"license": 1, "file_name": "000000568814.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000568814.jpg", "height": 359, "width": 640, "date_captured": "2013-11-18 03:29:24", "flickr_url": "http://farm6.staticflickr.com/5303/5750842143_beb8c2f55f_z.jpg", "id": 568814}, {"license": 3, "file_name": "000000472298.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000472298.jpg", "height": 387, "width": 640, "date_captured": "2013-11-18 03:39:26", "flickr_url": "http://farm8.staticflickr.com/7324/10094423453_6df94de370_z.jpg", "id": 472298}, {"license": 1, "file_name": "000000006763.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000006763.jpg", "height": 500, "width": 375, "date_captured": "2013-11-18 04:25:01", "flickr_url": "http://farm3.staticflickr.com/2713/4355357585_8401927d2a_z.jpg", "id": 6763}, {"license": 1, "file_name": "000000474170.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000474170.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 05:46:19", "flickr_url": "http://farm8.staticflickr.com/7253/7486958228_cfb2fee95f_z.jpg", "id": 474170}, {"license": 3, "file_name": "000000407943.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000407943.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 08:57:50", "flickr_url": "http://farm9.staticflickr.com/8507/8523883967_1e54a04d63_z.jpg", "id": 407943}, {"license": 5, "file_name": "000000180296.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000180296.jpg", "height": 360, "width": 640, "date_captured": "2013-11-18 10:39:53", "flickr_url": "http://farm6.staticflickr.com/5248/5299720368_138301a8cd_z.jpg", "id": 180296}, {"license": 3, "file_name": "000000181969.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000181969.jpg", "height": 640, "width": 573, "date_captured": "2013-11-18 12:30:16", "flickr_url": "http://farm7.staticflickr.com/6042/6345510824_c7f75ddc98_z.jpg", "id": 181969}, {"license": 3, "file_name": "000000343803.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000343803.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 12:58:08", "flickr_url": "http://farm5.staticflickr.com/4099/4940414828_aac51cdfe1_z.jpg", "id": 343803}, {"license": 1, "file_name": "000000361180.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000361180.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 13:25:26", "flickr_url": "http://farm4.staticflickr.com/3832/8838056299_20d255351b_z.jpg", "id": 361180}, {"license": 6, "file_name": "000000151962.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000151962.jpg", "height": 479, "width": 640, "date_captured": "2013-11-18 14:23:26", "flickr_url": "http://farm6.staticflickr.com/5214/5385420876_e0e5c968b1_z.jpg", "id": 151962}, {"license": 5, "file_name": "000000262938.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000262938.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 15:36:42", "flickr_url": "http://farm8.staticflickr.com/7029/6716837175_fb5e4de84a_z.jpg", "id": 262938}, {"license": 6, "file_name": "000000364166.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000364166.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 15:53:59", "flickr_url": "http://farm3.staticflickr.com/2803/4362655960_22eb34d354_z.jpg", "id": 364166}, {"license": 1, "file_name": "000000350488.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000350488.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 18:41:13", "flickr_url": "http://farm5.staticflickr.com/4107/5047947014_e88acbaa4c_z.jpg", "id": 350488}, {"license": 1, "file_name": "000000298251.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000298251.jpg", "height": 159, "width": 640, "date_captured": "2013-11-18 20:22:29", "flickr_url": "http://farm4.staticflickr.com/3229/2700314643_9e5d8f49a4_z.jpg", "id": 298251}, {"license": 4, "file_name": "000000051309.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000051309.jpg", "height": 360, "width": 640, "date_captured": "2013-11-18 23:12:23", "flickr_url": "http://farm5.staticflickr.com/4081/4737610316_f8bf6beb3b_z.jpg", "id": 51309}, {"license": 1, "file_name": "000000400794.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000400794.jpg", "height": 640, "width": 426, "date_captured": "2013-11-19 19:02:01", "flickr_url": "http://farm4.staticflickr.com/3107/2378901872_aa463823e8_z.jpg", "id": 400794}, {"license": 1, "file_name": "000000308793.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000308793.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 19:39:54", "flickr_url": "http://farm3.staticflickr.com/2848/9217461021_50154b2bd6_z.jpg", "id": 308793}, {"license": 1, "file_name": "000000561889.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000561889.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 20:13:48", "flickr_url": "http://farm3.staticflickr.com/2064/2055403377_a820071d47_z.jpg", "id": 561889}, {"license": 1, "file_name": "000000280779.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000280779.jpg", "height": 501, "width": 640, "date_captured": "2013-11-19 20:35:29", "flickr_url": "http://farm9.staticflickr.com/8212/8304644108_2b6b5e8e3e_z.jpg", "id": 280779}, {"license": 5, "file_name": "000000003501.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000003501.jpg", "height": 612, "width": 612, "date_captured": "2013-11-19 22:40:13", "flickr_url": "http://farm8.staticflickr.com/7179/7077469199_84f6efe841_z.jpg", "id": 3501}, {"license": 1, "file_name": "000000052591.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000052591.jpg", "height": 640, "width": 359, "date_captured": "2013-11-19 23:25:09", "flickr_url": "http://farm6.staticflickr.com/5209/5204924238_8531ebf887_z.jpg", "id": 52591}, {"license": 2, "file_name": "000000458325.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000458325.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 04:26:27", "flickr_url": "http://farm6.staticflickr.com/5212/5538497259_2607f56ee5_z.jpg", "id": 458325}, {"license": 4, "file_name": "000000083540.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000083540.jpg", "height": 443, "width": 640, "date_captured": "2013-11-20 07:09:18", "flickr_url": "http://farm4.staticflickr.com/3585/3410597213_ae8d3e9765_z.jpg", "id": 83540}, {"license": 4, "file_name": "000000213255.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000213255.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 11:55:18", "flickr_url": "http://farm3.staticflickr.com/2021/2521020235_f252d7108f_z.jpg", "id": 213255}, {"license": 2, "file_name": "000000029675.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000029675.jpg", "height": 640, "width": 478, "date_captured": "2013-11-20 12:27:18", "flickr_url": "http://farm7.staticflickr.com/6051/6227326507_4d284ce16f_z.jpg", "id": 29675}, {"license": 1, "file_name": "000000036539.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000036539.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 14:44:44", "flickr_url": "http://farm1.staticflickr.com/217/459163848_ff72e9215c_z.jpg", "id": 36539}, {"license": 1, "file_name": "000000430973.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000430973.jpg", "height": 478, "width": 640, "date_captured": "2013-11-20 14:55:05", "flickr_url": "http://farm9.staticflickr.com/8154/7193382694_1d9e01c3fd_z.jpg", "id": 430973}, {"license": 3, "file_name": "000000109992.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000109992.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 15:10:42", "flickr_url": "http://farm1.staticflickr.com/34/73567497_0d46151e38_z.jpg", "id": 109992}, {"license": 3, "file_name": "000000395903.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000395903.jpg", "height": 360, "width": 640, "date_captured": "2013-11-20 16:18:26", "flickr_url": "http://farm2.staticflickr.com/1316/5158121084_2a56d340ac_z.jpg", "id": 395903}, {"license": 4, "file_name": "000000204329.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000204329.jpg", "height": 640, "width": 425, "date_captured": "2013-11-20 17:06:20", "flickr_url": "http://farm9.staticflickr.com/8390/8563707718_d9db30e1bb_z.jpg", "id": 204329}, {"license": 3, "file_name": "000000331604.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000331604.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 19:02:20", "flickr_url": "http://farm6.staticflickr.com/5215/5539588405_4f94b3e215_z.jpg", "id": 331604}, {"license": 3, "file_name": "000000121673.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000121673.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 19:04:29", "flickr_url": "http://farm5.staticflickr.com/4003/4428412743_cb2d6dce38_z.jpg", "id": 121673}, {"license": 3, "file_name": "000000312489.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000312489.jpg", "height": 333, "width": 500, "date_captured": "2013-11-20 19:10:19", "flickr_url": "http://farm5.staticflickr.com/4054/4427619280_9e35fa918d_z.jpg", "id": 312489}, {"license": 2, "file_name": "000000521509.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000521509.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 21:14:50", "flickr_url": "http://farm9.staticflickr.com/8179/8068925863_7c15d813be_z.jpg", "id": 521509}, {"license": 3, "file_name": "000000549055.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000549055.jpg", "height": 304, "width": 640, "date_captured": "2013-11-20 22:30:45", "flickr_url": "http://farm7.staticflickr.com/6217/6307658471_0af3ed472b_z.jpg", "id": 549055}, {"license": 4, "file_name": "000000464358.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000464358.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 22:34:59", "flickr_url": "http://farm1.staticflickr.com/224/474446555_8c2af75370_z.jpg", "id": 464358}, {"license": 6, "file_name": "000000180878.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000180878.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 22:58:17", "flickr_url": "http://farm9.staticflickr.com/8003/7704994858_35a41c9f64_z.jpg", "id": 180878}, {"license": 3, "file_name": "000000032570.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000032570.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 23:28:47", "flickr_url": "http://farm6.staticflickr.com/5107/5645931722_36d741bc2f_z.jpg", "id": 32570}, {"license": 3, "file_name": "000000334530.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000334530.jpg", "height": 459, "width": 640, "date_captured": "2013-11-20 23:34:32", "flickr_url": "http://farm6.staticflickr.com/5012/5588663436_e1b99cc769_z.jpg", "id": 334530}, {"license": 3, "file_name": "000000376206.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000376206.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 23:56:24", "flickr_url": "http://farm6.staticflickr.com/5281/5356549016_258572ffb2_z.jpg", "id": 376206}, {"license": 3, "file_name": "000000515350.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000515350.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 23:56:31", "flickr_url": "http://farm6.staticflickr.com/5083/5356549018_429b57515a_z.jpg", "id": 515350}, {"license": 3, "file_name": "000000050943.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000050943.jpg", "height": 319, "width": 640, "date_captured": "2013-11-21 00:45:17", "flickr_url": "http://farm5.staticflickr.com/4108/4994579599_7566416b2e_z.jpg", "id": 50943}, {"license": 2, "file_name": "000000460333.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000460333.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 01:04:51", "flickr_url": "http://farm9.staticflickr.com/8457/7952261340_c1a243c043_z.jpg", "id": 460333}, {"license": 1, "file_name": "000000312552.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000312552.jpg", "height": 300, "width": 400, "date_captured": "2013-11-21 02:59:08", "flickr_url": "http://farm8.staticflickr.com/7198/6885319489_b9604a0234_z.jpg", "id": 312552}, {"license": 3, "file_name": "000000436315.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000436315.jpg", "height": 640, "width": 478, "date_captured": "2013-11-21 03:12:41", "flickr_url": "http://farm8.staticflickr.com/7005/6623552823_fbacca87d9_z.jpg", "id": 436315}, {"license": 1, "file_name": "000000024144.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000024144.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 05:34:02", "flickr_url": "http://farm5.staticflickr.com/4055/4682658612_f0e2b252eb_z.jpg", "id": 24144}, {"license": 1, "file_name": "000000509699.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000509699.jpg", "height": 440, "width": 640, "date_captured": "2013-11-21 20:09:07", "flickr_url": "http://farm4.staticflickr.com/3440/5840092261_f3f14fea82_z.jpg", "id": 509699}, {"license": 1, "file_name": "000000489764.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000489764.jpg", "height": 538, "width": 640, "date_captured": "2013-11-21 23:39:34", "flickr_url": "http://farm1.staticflickr.com/160/404335548_3bdc1f2ed9_z.jpg", "id": 489764}, {"license": 2, "file_name": "000000308587.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000308587.jpg", "height": 640, "width": 480, "date_captured": "2013-11-22 15:58:24", "flickr_url": "http://farm5.staticflickr.com/4114/4939816708_124b6b3004_z.jpg", "id": 308587}, {"license": 6, "file_name": "000000208423.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000208423.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 18:53:32", "flickr_url": "http://farm3.staticflickr.com/2168/2405565954_9bcb17399a_z.jpg", "id": 208423}, {"license": 1, "file_name": "000000553669.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000553669.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 21:28:35", "flickr_url": "http://farm1.staticflickr.com/214/492668625_5f74be897e_z.jpg", "id": 553669}, {"license": 3, "file_name": "000000036678.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000036678.jpg", "height": 361, "width": 640, "date_captured": "2013-11-22 22:32:13", "flickr_url": "http://farm5.staticflickr.com/4112/5066816653_9c5770c2e7_z.jpg", "id": 36678}, {"license": 5, "file_name": "000000270474.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000270474.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 23:08:42", "flickr_url": "http://farm1.staticflickr.com/89/214479871_e33f79b98f_z.jpg", "id": 270474}, {"license": 3, "file_name": "000000062355.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000062355.jpg", "height": 428, "width": 640, "date_captured": "2013-11-23 00:49:54", "flickr_url": "http://farm8.staticflickr.com/7219/7332786310_0e114dc218_z.jpg", "id": 62355}, {"license": 2, "file_name": "000000025424.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000025424.jpg", "height": 640, "width": 427, "date_captured": "2013-11-23 03:10:19", "flickr_url": "http://farm4.staticflickr.com/3637/3659789530_05f443b190_z.jpg", "id": 25424}, {"license": 2, "file_name": "000000269121.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000269121.jpg", "height": 640, "width": 480, "date_captured": "2013-11-23 03:41:48", "flickr_url": "http://farm4.staticflickr.com/3126/3179835459_fddd422309_z.jpg", "id": 269121}, {"license": 1, "file_name": "000000351331.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000351331.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 04:39:57", "flickr_url": "http://farm3.staticflickr.com/2426/3601088679_84a380607e_z.jpg", "id": 351331}, {"license": 4, "file_name": "000000132329.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000132329.jpg", "height": 640, "width": 426, "date_captured": "2013-11-23 06:27:50", "flickr_url": "http://farm3.staticflickr.com/2507/4142321546_09ffc1dab0_z.jpg", "id": 132329}, {"license": 1, "file_name": "000000486573.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000486573.jpg", "height": 640, "width": 480, "date_captured": "2013-11-23 18:14:17", "flickr_url": "http://farm1.staticflickr.com/52/136381492_74210f9d90_z.jpg", "id": 486573}, {"license": 4, "file_name": "000000335081.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000335081.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 03:21:24", "flickr_url": "http://farm9.staticflickr.com/8342/8234160647_246bcdcd27_z.jpg", "id": 335081}, {"license": 4, "file_name": "000000398652.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000398652.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 03:41:06", "flickr_url": "http://farm3.staticflickr.com/2374/5694268075_d6de7d2eb4_z.jpg", "id": 398652}, {"license": 1, "file_name": "000000320706.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000320706.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 04:18:37", "flickr_url": "http://farm8.staticflickr.com/7120/8074614150_48175085f0_z.jpg", "id": 320706}, {"license": 1, "file_name": "000000125129.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000125129.jpg", "height": 333, "width": 500, "date_captured": "2013-11-24 06:50:23", "flickr_url": "http://farm4.staticflickr.com/3583/3386929200_f5803d89f1_z.jpg", "id": 125129}, {"license": 3, "file_name": "000000292488.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000292488.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 08:43:13", "flickr_url": "http://farm4.staticflickr.com/3456/3365776480_4419c3fb3c_z.jpg", "id": 292488}, {"license": 3, "file_name": "000000022623.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000022623.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 09:10:14", "flickr_url": "http://farm2.staticflickr.com/1100/1429557346_4f5c655e47_z.jpg", "id": 22623}, {"license": 4, "file_name": "000000119516.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000119516.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 09:34:21", "flickr_url": "http://farm1.staticflickr.com/66/190818272_591479a383_z.jpg", "id": 119516}, {"license": 1, "file_name": "000000269866.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000269866.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 10:05:48", "flickr_url": "http://farm6.staticflickr.com/5142/5884743726_01bf5a266e_z.jpg", "id": 269866}, {"license": 2, "file_name": "000000498463.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000498463.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 11:15:20", "flickr_url": "http://farm1.staticflickr.com/149/358969946_67390c6259_z.jpg", "id": 498463}, {"license": 3, "file_name": "000000064574.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000064574.jpg", "height": 640, "width": 479, "date_captured": "2013-11-24 13:36:58", "flickr_url": "http://farm4.staticflickr.com/3402/3561877308_1393b8b4ce_z.jpg", "id": 64574}, {"license": 4, "file_name": "000000459272.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000459272.jpg", "height": 640, "width": 480, "date_captured": "2013-11-14 16:38:53", "flickr_url": "http://farm3.staticflickr.com/2448/3675278938_d31af5d707_z.jpg", "id": 459272}, {"license": 3, "file_name": "000000292060.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000292060.jpg", "height": 640, "width": 428, "date_captured": "2013-11-14 19:23:37", "flickr_url": "http://farm9.staticflickr.com/8351/8439933582_b6bf825ddf_z.jpg", "id": 292060}, {"license": 3, "file_name": "000000040471.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000040471.jpg", "height": 640, "width": 427, "date_captured": "2013-11-14 19:23:39", "flickr_url": "http://farm9.staticflickr.com/8325/8439933802_ed67dcf228_z.jpg", "id": 40471}, {"license": 3, "file_name": "000000480122.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000480122.jpg", "height": 640, "width": 640, "date_captured": "2013-11-14 20:24:51", "flickr_url": "http://farm9.staticflickr.com/8465/8106397085_d14f92808c_z.jpg", "id": 480122}, {"license": 3, "file_name": "000000097022.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000097022.jpg", "height": 428, "width": 640, "date_captured": "2013-11-14 22:05:58", "flickr_url": "http://farm8.staticflickr.com/7076/7091899909_3b8a317b44_z.jpg", "id": 97022}, {"license": 3, "file_name": "000000525083.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000525083.jpg", "height": 428, "width": 640, "date_captured": "2013-11-14 22:07:19", "flickr_url": "http://farm8.staticflickr.com/7086/6946143396_87cfa395b7_z.jpg", "id": 525083}, {"license": 6, "file_name": "000000084241.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000084241.jpg", "height": 396, "width": 640, "date_captured": "2013-11-14 22:29:30", "flickr_url": "http://farm6.staticflickr.com/5040/7083447643_5a4eeaf084_z.jpg", "id": 84241}, {"license": 3, "file_name": "000000361621.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000361621.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 00:00:18", "flickr_url": "http://farm3.staticflickr.com/2147/2214972260_74f0f76c33_z.jpg", "id": 361621}, {"license": 4, "file_name": "000000186632.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000186632.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 02:37:04", "flickr_url": "http://farm9.staticflickr.com/8441/7816339198_bdcc9f1afe_z.jpg", "id": 186632}, {"license": 3, "file_name": "000000446574.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000446574.jpg", "height": 640, "width": 428, "date_captured": "2013-11-15 03:01:43", "flickr_url": "http://farm8.staticflickr.com/7207/7094179073_9bbfce10f1_z.jpg", "id": 446574}, {"license": 1, "file_name": "000000210855.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000210855.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 03:15:22", "flickr_url": "http://farm6.staticflickr.com/5332/6918125040_0e680a8ae8_z.jpg", "id": 210855}, {"license": 5, "file_name": "000000488592.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000488592.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 03:19:18", "flickr_url": "http://farm4.staticflickr.com/3201/2729006923_2090a46424_z.jpg", "id": 488592}, {"license": 3, "file_name": "000000365207.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000365207.jpg", "height": 588, "width": 640, "date_captured": "2013-11-15 08:07:49", "flickr_url": "http://farm9.staticflickr.com/8315/8040928844_c1869ddd72_z.jpg", "id": 365207}, {"license": 2, "file_name": "000000110042.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000110042.jpg", "height": 640, "width": 425, "date_captured": "2013-11-15 13:13:01", "flickr_url": "http://farm4.staticflickr.com/3627/3603425923_af3b482487_z.jpg", "id": 110042}, {"license": 1, "file_name": "000000346703.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000346703.jpg", "height": 640, "width": 550, "date_captured": "2013-11-15 13:32:51", "flickr_url": "http://farm6.staticflickr.com/5169/5300486344_87f3faa59b_z.jpg", "id": 346703}, {"license": 3, "file_name": "000000185802.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000185802.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 15:06:48", "flickr_url": "http://farm1.staticflickr.com/52/143262028_305c98ba68_z.jpg", "id": 185802}, {"license": 3, "file_name": "000000529966.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000529966.jpg", "height": 421, "width": 640, "date_captured": "2013-11-15 16:01:44", "flickr_url": "http://farm6.staticflickr.com/5176/5496934108_b1017f0375_z.jpg", "id": 529966}, {"license": 1, "file_name": "000000144003.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000144003.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 18:03:37", "flickr_url": "http://farm3.staticflickr.com/2368/2253553631_241413d9d7_z.jpg", "id": 144003}, {"license": 2, "file_name": "000000050896.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000050896.jpg", "height": 640, "width": 640, "date_captured": "2013-11-15 18:27:44", "flickr_url": "http://farm8.staticflickr.com/7160/6537049995_2d96921a4b_z.jpg", "id": 50896}, {"license": 1, "file_name": "000000001761.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000001761.jpg", "height": 640, "width": 427, "date_captured": "2013-11-16 13:33:47", "flickr_url": "http://farm9.staticflickr.com/8519/8603794339_26f017bf31_z.jpg", "id": 1761}, {"license": 3, "file_name": "000000400367.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000400367.jpg", "height": 333, "width": 500, "date_captured": "2013-11-16 15:00:24", "flickr_url": "http://farm1.staticflickr.com/139/327070193_a60ce3f082_z.jpg", "id": 400367}, {"license": 5, "file_name": "000000463199.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000463199.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 16:45:36", "flickr_url": "http://farm2.staticflickr.com/1055/1399822653_c1d0fbc717_z.jpg", "id": 463199}, {"license": 3, "file_name": "000000392933.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000392933.jpg", "height": 640, "width": 383, "date_captured": "2013-11-16 17:22:38", "flickr_url": "http://farm6.staticflickr.com/5112/7211631900_14b122216a_z.jpg", "id": 392933}, {"license": 2, "file_name": "000000350023.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000350023.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 17:25:37", "flickr_url": "http://farm4.staticflickr.com/3275/2838112020_69cf2381cb_z.jpg", "id": 350023}, {"license": 3, "file_name": "000000527960.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000527960.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 17:57:16", "flickr_url": "http://farm4.staticflickr.com/3328/3411265044_c6e56cf94c_z.jpg", "id": 527960}, {"license": 1, "file_name": "000000142585.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000142585.jpg", "height": 500, "width": 375, "date_captured": "2013-11-16 18:05:52", "flickr_url": "http://farm1.staticflickr.com/34/71378280_e180ffc9d5_z.jpg", "id": 142585}, {"license": 6, "file_name": "000000574425.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000574425.jpg", "height": 422, "width": 640, "date_captured": "2013-11-16 18:44:07", "flickr_url": "http://farm3.staticflickr.com/2838/9539684744_271104b9e5_z.jpg", "id": 574425}, {"license": 1, "file_name": "000000449909.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000449909.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 18:57:24", "flickr_url": "http://farm5.staticflickr.com/4065/4576506981_6a421c511e_z.jpg", "id": 449909}, {"license": 1, "file_name": "000000128051.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000128051.jpg", "height": 360, "width": 640, "date_captured": "2013-11-16 21:05:04", "flickr_url": "http://farm4.staticflickr.com/3770/9384095365_8b8587e528_z.jpg", "id": 128051}, {"license": 1, "file_name": "000000286849.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000286849.jpg", "height": 500, "width": 333, "date_captured": "2013-11-16 21:43:15", "flickr_url": "http://farm5.staticflickr.com/4060/4317838231_3969b83a79_z.jpg", "id": 286849}, {"license": 1, "file_name": "000000373705.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000373705.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 21:45:00", "flickr_url": "http://farm4.staticflickr.com/3386/3532803097_b451b6fc0d_z.jpg", "id": 373705}, {"license": 5, "file_name": "000000548780.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000548780.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 22:07:50", "flickr_url": "http://farm9.staticflickr.com/8451/8030321271_ebc4c4820c_z.jpg", "id": 548780}, {"license": 4, "file_name": "000000499768.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000499768.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 22:09:22", "flickr_url": "http://farm2.staticflickr.com/1212/1463670693_c822bbd9e0_z.jpg", "id": 499768}, {"license": 4, "file_name": "000000293071.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000293071.jpg", "height": 500, "width": 335, "date_captured": "2013-11-16 22:12:21", "flickr_url": "http://farm1.staticflickr.com/199/466347034_10b9e3efe4_z.jpg", "id": 293071}, {"license": 3, "file_name": "000000101780.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000101780.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 22:13:12", "flickr_url": "http://farm3.staticflickr.com/2477/3898302702_07c91f6d1c_z.jpg", "id": 101780}, {"license": 3, "file_name": "000000222235.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000222235.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 23:10:13", "flickr_url": "http://farm9.staticflickr.com/8012/7484510612_5916cf5b46_z.jpg", "id": 222235}, {"license": 3, "file_name": "000000509008.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000509008.jpg", "height": 434, "width": 640, "date_captured": "2013-11-16 23:44:59", "flickr_url": "http://farm9.staticflickr.com/8220/8374905570_935486f48b_z.jpg", "id": 509008}, {"license": 5, "file_name": "000000157098.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000157098.jpg", "height": 333, "width": 500, "date_captured": "2013-11-17 01:47:38", "flickr_url": "http://farm1.staticflickr.com/49/137204740_b8b9faa744_z.jpg", "id": 157098}, {"license": 3, "file_name": "000000275791.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000275791.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 03:30:52", "flickr_url": "http://farm8.staticflickr.com/7201/6818027040_142c620b61_z.jpg", "id": 275791}, {"license": 3, "file_name": "000000270297.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000270297.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 04:19:11", "flickr_url": "http://farm6.staticflickr.com/5447/8795107341_16b5605d16_z.jpg", "id": 270297}, {"license": 3, "file_name": "000000115118.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000115118.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 04:27:47", "flickr_url": "http://farm9.staticflickr.com/8237/8596485436_c72cb2de81_z.jpg", "id": 115118}, {"license": 2, "file_name": "000000198915.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000198915.jpg", "height": 404, "width": 640, "date_captured": "2013-11-17 04:54:44", "flickr_url": "http://farm5.staticflickr.com/4064/4374670540_5f372cb1e3_z.jpg", "id": 198915}, {"license": 2, "file_name": "000000192716.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000192716.jpg", "height": 640, "width": 518, "date_captured": "2013-11-17 08:55:12", "flickr_url": "http://farm4.staticflickr.com/3674/9012908466_2b84e6d18e_z.jpg", "id": 192716}, {"license": 3, "file_name": "000000090155.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000090155.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 09:11:27", "flickr_url": "http://farm6.staticflickr.com/5448/9043223550_3e409cfc16_z.jpg", "id": 90155}, {"license": 3, "file_name": "000000344816.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000344816.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 09:48:05", "flickr_url": "http://farm8.staticflickr.com/7412/8805703672_a7c2507144_z.jpg", "id": 344816}, {"license": 3, "file_name": "000000130566.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000130566.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 09:48:13", "flickr_url": "http://farm3.staticflickr.com/2890/8805748872_a95c3b52b5_z.jpg", "id": 130566}, {"license": 1, "file_name": "000000137727.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000137727.jpg", "height": 359, "width": 640, "date_captured": "2013-11-17 10:17:03", "flickr_url": "http://farm9.staticflickr.com/8548/8704046688_3b331f7d73_z.jpg", "id": 137727}, {"license": 3, "file_name": "000000256195.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000256195.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 10:37:31", "flickr_url": "http://farm9.staticflickr.com/8266/8662686723_b86f620611_z.jpg", "id": 256195}, {"license": 3, "file_name": "000000193162.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000193162.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 15:43:04", "flickr_url": "http://farm3.staticflickr.com/2236/3539928842_1587639bed_z.jpg", "id": 193162}, {"license": 1, "file_name": "000000219440.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000219440.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 16:26:31", "flickr_url": "http://farm7.staticflickr.com/6150/5960994269_324f263677_z.jpg", "id": 219440}, {"license": 1, "file_name": "000000580418.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000580418.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 17:07:26", "flickr_url": "http://farm3.staticflickr.com/2104/1809331550_7750b413ba_z.jpg", "id": 580418}, {"license": 5, "file_name": "000000577976.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000577976.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 17:31:22", "flickr_url": "http://farm8.staticflickr.com/7415/9439527323_efcf837a5d_z.jpg", "id": 577976}, {"license": 5, "file_name": "000000231831.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000231831.jpg", "height": 640, "width": 481, "date_captured": "2013-11-17 17:57:29", "flickr_url": "http://farm3.staticflickr.com/2324/2242089027_800a938327_z.jpg", "id": 231831}, {"license": 1, "file_name": "000000014888.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000014888.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 18:50:25", "flickr_url": "http://farm9.staticflickr.com/8380/8634330041_a47c2cdaeb_z.jpg", "id": 14888}, {"license": 1, "file_name": "000000004795.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000004795.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 21:07:53", "flickr_url": "http://farm1.staticflickr.com/34/74176788_124cf98504_z.jpg", "id": 4795}, {"license": 6, "file_name": "000000316015.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000316015.jpg", "height": 400, "width": 500, "date_captured": "2013-11-17 21:09:54", "flickr_url": "http://farm1.staticflickr.com/185/453382723_bc00284acf_z.jpg", "id": 316015}, {"license": 5, "file_name": "000000119828.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000119828.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 21:15:06", "flickr_url": "http://farm3.staticflickr.com/2646/4171324648_411cccdac6_z.jpg", "id": 119828}, {"license": 1, "file_name": "000000357941.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000357941.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 21:45:09", "flickr_url": "http://farm3.staticflickr.com/2243/2254661385_3a3fc93461_z.jpg", "id": 357941}, {"license": 2, "file_name": "000000312213.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000312213.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 22:03:48", "flickr_url": "http://farm1.staticflickr.com/137/373500403_cc6c544a6a_z.jpg", "id": 312213}, {"license": 1, "file_name": "000000001675.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000001675.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 00:14:32", "flickr_url": "http://farm1.staticflickr.com/104/301990977_42713fd7f4_z.jpg", "id": 1675}, {"license": 5, "file_name": "000000039769.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000039769.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 00:26:07", "flickr_url": "http://farm1.staticflickr.com/60/210383891_f91a89fd5e_z.jpg", "id": 39769}, {"license": 3, "file_name": "000000503823.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000503823.jpg", "height": 333, "width": 500, "date_captured": "2013-11-18 00:49:50", "flickr_url": "http://farm1.staticflickr.com/54/131524639_8e99310b12_z.jpg", "id": 503823}, {"license": 4, "file_name": "000000172877.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000172877.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 01:20:08", "flickr_url": "http://farm1.staticflickr.com/47/140251613_8273657d16_z.jpg", "id": 172877}, {"license": 3, "file_name": "000000310862.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000310862.jpg", "height": 612, "width": 612, "date_captured": "2013-11-18 02:27:01", "flickr_url": "http://farm9.staticflickr.com/8075/8286602723_ae686aef37_z.jpg", "id": 310862}, {"license": 2, "file_name": "000000427649.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000427649.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 02:59:37", "flickr_url": "http://farm1.staticflickr.com/2/2976943_c1de00c050_z.jpg", "id": 427649}, {"license": 1, "file_name": "000000383921.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000383921.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 03:58:57", "flickr_url": "http://farm8.staticflickr.com/7380/9143656781_25bfc18ac1_z.jpg", "id": 383921}, {"license": 3, "file_name": "000000020333.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000020333.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 04:03:40", "flickr_url": "http://farm5.staticflickr.com/4027/4697218785_7f0414cdf8_z.jpg", "id": 20333}, {"license": 4, "file_name": "000000477288.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000477288.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 05:48:43", "flickr_url": "http://farm1.staticflickr.com/44/145871865_ebd837f546_z.jpg", "id": 477288}, {"license": 3, "file_name": "000000420230.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000420230.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 06:03:05", "flickr_url": "http://farm8.staticflickr.com/7057/6820649552_ae258b2112_z.jpg", "id": 420230}, {"license": 5, "file_name": "000000451090.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000451090.jpg", "height": 435, "width": 640, "date_captured": "2013-11-18 06:37:57", "flickr_url": "http://farm4.staticflickr.com/3686/9404551615_6af13a75ee_z.jpg", "id": 451090}, {"license": 4, "file_name": "000000012280.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000012280.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 07:29:51", "flickr_url": "http://farm9.staticflickr.com/8516/8544258219_95e49e415e_z.jpg", "id": 12280}, {"license": 1, "file_name": "000000057027.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000057027.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 08:35:05", "flickr_url": "http://farm5.staticflickr.com/4044/5169155344_bb260bc63f_z.jpg", "id": 57027}, {"license": 4, "file_name": "000000108864.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000108864.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 08:55:33", "flickr_url": "http://farm5.staticflickr.com/4087/5009225838_5aef0db1b4_z.jpg", "id": 108864}, {"license": 1, "file_name": "000000405972.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000405972.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 09:04:49", "flickr_url": "http://farm5.staticflickr.com/4082/4915696732_d62fd95b70_z.jpg", "id": 405972}, {"license": 1, "file_name": "000000294855.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000294855.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 10:20:26", "flickr_url": "http://farm1.staticflickr.com/52/115192671_f353d6dcdf_z.jpg", "id": 294855}, {"license": 1, "file_name": "000000125952.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000125952.jpg", "height": 640, "width": 358, "date_captured": "2013-11-18 10:21:59", "flickr_url": "http://farm9.staticflickr.com/8245/8629430794_ac4df48b54_z.jpg", "id": 125952}, {"license": 2, "file_name": "000000400815.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000400815.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 10:37:21", "flickr_url": "http://farm3.staticflickr.com/2423/5751833621_882027b392_z.jpg", "id": 400815}, {"license": 5, "file_name": "000000437351.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000437351.jpg", "height": 500, "width": 399, "date_captured": "2013-11-18 11:21:22", "flickr_url": "http://farm3.staticflickr.com/2106/2243101628_d1a74995f7_z.jpg", "id": 437351}, {"license": 1, "file_name": "000000251572.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000251572.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 13:27:27", "flickr_url": "http://farm5.staticflickr.com/4018/4534529657_46ba4b48a8_z.jpg", "id": 251572}, {"license": 3, "file_name": "000000194506.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000194506.jpg", "height": 498, "width": 640, "date_captured": "2013-11-18 14:12:03", "flickr_url": "http://farm9.staticflickr.com/8005/7334248512_9c3514ac26_z.jpg", "id": 194506}, {"license": 4, "file_name": "000000153229.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000153229.jpg", "height": 457, "width": 640, "date_captured": "2013-11-18 16:00:21", "flickr_url": "http://farm3.staticflickr.com/2498/4015454078_09a71cb072_z.jpg", "id": 153229}, {"license": 4, "file_name": "000000482800.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000482800.jpg", "height": 457, "width": 640, "date_captured": "2013-11-18 17:00:29", "flickr_url": "http://farm4.staticflickr.com/3214/2734186920_4d1f5b2cff_z.jpg", "id": 482800}, {"license": 4, "file_name": "000000025057.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000025057.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 17:10:48", "flickr_url": "http://farm4.staticflickr.com/3209/2591785434_803df36d11_z.jpg", "id": 25057}, {"license": 4, "file_name": "000000481413.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000481413.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 18:13:23", "flickr_url": "http://farm1.staticflickr.com/23/35099655_d7c448ccd7_z.jpg", "id": 481413}, {"license": 3, "file_name": "000000113354.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000113354.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 18:50:34", "flickr_url": "http://farm2.staticflickr.com/1345/4731755506_b87b3c57e5_z.jpg", "id": 113354}, {"license": 2, "file_name": "000000546823.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000546823.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 20:39:29", "flickr_url": "http://farm3.staticflickr.com/2336/2346306710_d25a24fda5_z.jpg", "id": 546823}, {"license": 4, "file_name": "000000290833.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000290833.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 22:05:59", "flickr_url": "http://farm1.staticflickr.com/71/169854910_5afb94edb5_z.jpg", "id": 290833}, {"license": 1, "file_name": "000000372307.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000372307.jpg", "height": 428, "width": 640, "date_captured": "2013-11-19 00:58:14", "flickr_url": "http://farm3.staticflickr.com/2831/9414625995_e298d3240c_z.jpg", "id": 372307}, {"license": 4, "file_name": "000000189078.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000189078.jpg", "height": 334, "width": 500, "date_captured": "2013-11-19 18:07:41", "flickr_url": "http://farm5.staticflickr.com/4026/4430551771_58c190b055_z.jpg", "id": 189078}, {"license": 5, "file_name": "000000575500.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000575500.jpg", "height": 640, "width": 426, "date_captured": "2013-11-19 19:55:44", "flickr_url": "http://farm9.staticflickr.com/8540/8710590482_f9015ecf64_z.jpg", "id": 575500}, {"license": 3, "file_name": "000000463283.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000463283.jpg", "height": 612, "width": 612, "date_captured": "2013-11-19 20:01:00", "flickr_url": "http://farm9.staticflickr.com/8209/8286608497_7491466318_z.jpg", "id": 463283}, {"license": 1, "file_name": "000000562197.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000562197.jpg", "height": 640, "width": 640, "date_captured": "2013-11-19 20:27:14", "flickr_url": "http://farm6.staticflickr.com/5055/5447381940_70f0c8a0da_z.jpg", "id": 562197}, {"license": 1, "file_name": "000000194940.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000194940.jpg", "height": 375, "width": 500, "date_captured": "2013-11-19 21:07:23", "flickr_url": "http://farm3.staticflickr.com/2090/2142758257_707f956d3d_z.jpg", "id": 194940}, {"license": 4, "file_name": "000000127494.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000127494.jpg", "height": 333, "width": 500, "date_captured": "2013-11-19 21:51:43", "flickr_url": "http://farm3.staticflickr.com/2644/4066113855_0a7568a8df_z.jpg", "id": 127494}, {"license": 2, "file_name": "000000061658.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000061658.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 22:50:45", "flickr_url": "http://farm2.staticflickr.com/1290/5185796627_7fa6c142b4_z.jpg", "id": 61658}, {"license": 2, "file_name": "000000304180.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000304180.jpg", "height": 418, "width": 640, "date_captured": "2013-11-19 23:30:26", "flickr_url": "http://farm4.staticflickr.com/3713/9676212755_ee3d1fdd16_z.jpg", "id": 304180}, {"license": 5, "file_name": "000000452784.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000452784.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 23:51:17", "flickr_url": "http://farm3.staticflickr.com/2341/1500002073_dea1ca6fcc_z.jpg", "id": 452784}, {"license": 1, "file_name": "000000330818.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000330818.jpg", "height": 640, "width": 426, "date_captured": "2013-11-20 02:51:57", "flickr_url": "http://farm5.staticflickr.com/4054/4625870673_1ab15d25c6_z.jpg", "id": 330818}, {"license": 1, "file_name": "000000426203.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000426203.jpg", "height": 640, "width": 426, "date_captured": "2013-11-20 04:33:00", "flickr_url": "http://farm6.staticflickr.com/5180/5391339034_bf7859fedc_z.jpg", "id": 426203}, {"license": 1, "file_name": "000000084492.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000084492.jpg", "height": 640, "width": 426, "date_captured": "2013-11-20 04:33:04", "flickr_url": "http://farm6.staticflickr.com/5091/5390732453_f76cc3faec_z.jpg", "id": 84492}, {"license": 1, "file_name": "000000132703.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000132703.jpg", "height": 640, "width": 426, "date_captured": "2013-11-20 04:46:15", "flickr_url": "http://farm2.staticflickr.com/1228/5164742346_c6f957c4ee_z.jpg", "id": 132703}, {"license": 2, "file_name": "000000326462.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000326462.jpg", "height": 612, "width": 612, "date_captured": "2013-11-20 14:31:45", "flickr_url": "http://farm9.staticflickr.com/8389/8628664270_5b2410b3b1_z.jpg", "id": 326462}, {"license": 3, "file_name": "000000245311.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000245311.jpg", "height": 612, "width": 612, "date_captured": "2013-11-20 14:47:34", "flickr_url": "http://farm7.staticflickr.com/6168/6200657015_e973e33189_z.jpg", "id": 245311}, {"license": 2, "file_name": "000000328117.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000328117.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 16:32:10", "flickr_url": "http://farm3.staticflickr.com/2893/8751253805_7a3ffb6c38_z.jpg", "id": 328117}, {"license": 4, "file_name": "000000374083.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000374083.jpg", "height": 640, "width": 426, "date_captured": "2013-11-20 20:07:45", "flickr_url": "http://farm3.staticflickr.com/2882/9264083800_fc3b02577d_z.jpg", "id": 374083}, {"license": 3, "file_name": "000000095707.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000095707.jpg", "height": 360, "width": 640, "date_captured": "2013-11-20 20:16:58", "flickr_url": "http://farm4.staticflickr.com/3813/8976396227_144a8724c3_z.jpg", "id": 95707}, {"license": 1, "file_name": "000000463842.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000463842.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 20:52:25", "flickr_url": "http://farm4.staticflickr.com/3067/2680475783_db70bb9eb4_z.jpg", "id": 463842}, {"license": 1, "file_name": "000000332351.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000332351.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 22:17:20", "flickr_url": "http://farm8.staticflickr.com/7007/6610413425_6d33f6d6c0_z.jpg", "id": 332351}, {"license": 5, "file_name": "000000010092.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000010092.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 00:20:22", "flickr_url": "http://farm9.staticflickr.com/8276/8710590452_08a7a8f59c_z.jpg", "id": 10092}, {"license": 3, "file_name": "000000551804.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000551804.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 02:26:57", "flickr_url": "http://farm9.staticflickr.com/8413/8745947801_cd55b3200a_z.jpg", "id": 551804}, {"license": 3, "file_name": "000000402615.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000402615.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 02:33:10", "flickr_url": "http://farm8.staticflickr.com/7284/8740791736_b9e7f80101_z.jpg", "id": 402615}, {"license": 4, "file_name": "000000166165.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000166165.jpg", "height": 640, "width": 561, "date_captured": "2013-11-21 04:58:45", "flickr_url": "http://farm5.staticflickr.com/4149/5018726736_c0b5939690_z.jpg", "id": 166165}, {"license": 1, "file_name": "000000410496.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000410496.jpg", "height": 640, "width": 427, "date_captured": "2013-11-21 05:24:44", "flickr_url": "http://farm5.staticflickr.com/4138/4796309758_edd79f8b6b_z.jpg", "id": 410496}, {"license": 3, "file_name": "000000357903.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000357903.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 05:55:05", "flickr_url": "http://farm5.staticflickr.com/4035/4575044200_e184035a58_z.jpg", "id": 357903}, {"license": 3, "file_name": "000000500565.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000500565.jpg", "height": 466, "width": 640, "date_captured": "2013-11-21 19:38:45", "flickr_url": "http://farm3.staticflickr.com/2604/4225275628_731384f31b_z.jpg", "id": 500565}, {"license": 5, "file_name": "000000365385.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000365385.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 19:38:52", "flickr_url": "http://farm6.staticflickr.com/5044/5244459701_e310f8ceec_z.jpg", "id": 365385}, {"license": 2, "file_name": "000000570456.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000570456.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 21:50:40", "flickr_url": "http://farm8.staticflickr.com/7277/7683769676_edbe5fa498_z.jpg", "id": 570456}, {"license": 2, "file_name": "000000395701.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000395701.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 00:29:54", "flickr_url": "http://farm4.staticflickr.com/3048/4568393462_c1c18cc964_z.jpg", "id": 395701}, {"license": 4, "file_name": "000000372466.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000372466.jpg", "height": 360, "width": 640, "date_captured": "2013-11-22 00:54:04", "flickr_url": "http://farm4.staticflickr.com/3270/2668055050_d6b24eb5f4_z.jpg", "id": 372466}, {"license": 5, "file_name": "000000125778.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000125778.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 02:55:10", "flickr_url": "http://farm4.staticflickr.com/3550/3402362545_886a523955_z.jpg", "id": 125778}, {"license": 1, "file_name": "000000024027.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000024027.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 20:32:32", "flickr_url": "http://farm1.staticflickr.com/33/49624149_b32eba029b_z.jpg", "id": 24027}, {"license": 1, "file_name": "000000530470.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000530470.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 20:32:37", "flickr_url": "http://farm1.staticflickr.com/27/49624147_6b86f2c8db_z.jpg", "id": 530470}, {"license": 4, "file_name": "000000370375.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000370375.jpg", "height": 640, "width": 427, "date_captured": "2013-11-22 22:54:02", "flickr_url": "http://farm3.staticflickr.com/2183/2435864370_901e470541_z.jpg", "id": 370375}, {"license": 2, "file_name": "000000328430.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000328430.jpg", "height": 640, "width": 433, "date_captured": "2013-11-23 03:20:55", "flickr_url": "http://farm3.staticflickr.com/2412/3588308808_4642ce68eb_z.jpg", "id": 328430}, {"license": 1, "file_name": "000000562581.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000562581.jpg", "height": 444, "width": 640, "date_captured": "2013-11-23 05:45:42", "flickr_url": "http://farm1.staticflickr.com/23/31120984_8a7f01b385_z.jpg", "id": 562581}, {"license": 1, "file_name": "000000451435.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000451435.jpg", "height": 385, "width": 640, "date_captured": "2013-11-23 05:45:48", "flickr_url": "http://farm1.staticflickr.com/22/31121028_3ad15d14cd_z.jpg", "id": 451435}, {"license": 1, "file_name": "000000075393.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000075393.jpg", "height": 435, "width": 640, "date_captured": "2013-11-24 05:18:35", "flickr_url": "http://farm5.staticflickr.com/4047/4293652687_e6a2d2dbdf_z.jpg", "id": 75393}, {"license": 3, "file_name": "000000345397.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000345397.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 05:52:07", "flickr_url": "http://farm4.staticflickr.com/3003/2763946861_77b5d561e5_z.jpg", "id": 345397}, {"license": 3, "file_name": "000000094157.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000094157.jpg", "height": 640, "width": 372, "date_captured": "2013-11-24 15:15:29", "flickr_url": "http://farm9.staticflickr.com/8052/8137275244_b6b2c4498d_z.jpg", "id": 94157}, {"license": 2, "file_name": "000000105455.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000105455.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 15:58:34", "flickr_url": "http://farm9.staticflickr.com/8005/7484694806_6d7de56ece_z.jpg", "id": 105455}, {"license": 2, "file_name": "000000348012.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000348012.jpg", "height": 428, "width": 640, "date_captured": "2013-11-24 21:04:37", "flickr_url": "http://farm3.staticflickr.com/2312/2475795533_4466c92782_z.jpg", "id": 348012}, {"license": 5, "file_name": "000000173008.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000173008.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 18:06:19", "flickr_url": "http://farm2.staticflickr.com/1162/1157171906_e210cf9a4e_z.jpg", "id": 173008}, {"license": 3, "file_name": "000000262682.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000262682.jpg", "height": 640, "width": 427, "date_captured": "2013-11-14 21:23:26", "flickr_url": "http://farm9.staticflickr.com/8022/7556152056_eff00ab722_z.jpg", "id": 262682}, {"license": 2, "file_name": "000000507893.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000507893.jpg", "height": 640, "width": 427, "date_captured": "2013-11-15 05:45:35", "flickr_url": "http://farm5.staticflickr.com/4056/4711425227_424eb53108_z.jpg", "id": 507893}, {"license": 1, "file_name": "000000227044.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000227044.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 06:36:50", "flickr_url": "http://farm4.staticflickr.com/3571/3286874635_d0067e4a1b_z.jpg", "id": 227044}, {"license": 1, "file_name": "000000167122.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000167122.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 07:20:59", "flickr_url": "http://farm2.staticflickr.com/1100/538718655_aef41a4977_z.jpg", "id": 167122}, {"license": 1, "file_name": "000000154718.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000154718.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 11:30:03", "flickr_url": "http://farm1.staticflickr.com/185/437961075_31d25acbe7_z.jpg", "id": 154718}, {"license": 4, "file_name": "000000479126.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000479126.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 12:54:02", "flickr_url": "http://farm6.staticflickr.com/5189/5734725144_37742ab51b_z.jpg", "id": 479126}, {"license": 4, "file_name": "000000504074.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000504074.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 12:54:05", "flickr_url": "http://farm6.staticflickr.com/5266/5734723994_0d5f3754d9_z.jpg", "id": 504074}, {"license": 3, "file_name": "000000180792.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000180792.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 13:14:32", "flickr_url": "http://farm1.staticflickr.com/31/53506688_75977a621e_z.jpg", "id": 180792}, {"license": 1, "file_name": "000000490936.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000490936.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 17:49:58", "flickr_url": "http://farm8.staticflickr.com/7321/8725879741_7a306fb719_z.jpg", "id": 490936}, {"license": 4, "file_name": "000000445846.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000445846.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 18:59:33", "flickr_url": "http://farm7.staticflickr.com/6238/6282443910_5477113bf6_z.jpg", "id": 445846}, {"license": 3, "file_name": "000000197870.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000197870.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 14:14:56", "flickr_url": "http://farm6.staticflickr.com/5050/5222354604_2796be354a_z.jpg", "id": 197870}, {"license": 3, "file_name": "000000332901.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000332901.jpg", "height": 395, "width": 640, "date_captured": "2013-11-16 14:16:33", "flickr_url": "http://farm6.staticflickr.com/5345/6924644002_6a2624f1b4_z.jpg", "id": 332901}, {"license": 3, "file_name": "000000445675.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000445675.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 15:48:31", "flickr_url": "http://farm9.staticflickr.com/8532/8453200511_c07c126d66_z.jpg", "id": 445675}, {"license": 2, "file_name": "000000287291.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000287291.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 17:08:17", "flickr_url": "http://farm4.staticflickr.com/3326/3259041418_48c260317a_z.jpg", "id": 287291}, {"license": 1, "file_name": "000000525600.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000525600.jpg", "height": 326, "width": 640, "date_captured": "2013-11-16 17:35:16", "flickr_url": "http://farm8.staticflickr.com/7144/6723858647_202636fba9_z.jpg", "id": 525600}, {"license": 1, "file_name": "000000504580.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000504580.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 17:47:24", "flickr_url": "http://farm7.staticflickr.com/6192/6096486882_6eb200dc97_z.jpg", "id": 504580}, {"license": 1, "file_name": "000000347544.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000347544.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 18:05:35", "flickr_url": "http://farm1.staticflickr.com/29/50050818_1d113a22bc_z.jpg", "id": 347544}, {"license": 2, "file_name": "000000255718.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000255718.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 20:29:04", "flickr_url": "http://farm1.staticflickr.com/60/195929467_4440422c5f_z.jpg", "id": 255718}, {"license": 4, "file_name": "000000528524.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000528524.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 21:02:38", "flickr_url": "http://farm9.staticflickr.com/8180/8069316186_791b37c4e1_z.jpg", "id": 528524}, {"license": 3, "file_name": "000000090208.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000090208.jpg", "height": 429, "width": 640, "date_captured": "2013-11-16 21:26:40", "flickr_url": "http://farm8.staticflickr.com/7316/9223358569_c4cb7dd2fc_z.jpg", "id": 90208}, {"license": 2, "file_name": "000000240049.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000240049.jpg", "height": 640, "width": 426, "date_captured": "2013-11-16 21:44:45", "flickr_url": "http://farm5.staticflickr.com/4060/4490144217_0319915ed0_z.jpg", "id": 240049}, {"license": 3, "file_name": "000000537355.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000537355.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 22:00:07", "flickr_url": "http://farm4.staticflickr.com/3039/2872986519_6c6b66d8d6_z.jpg", "id": 537355}, {"license": 1, "file_name": "000000434247.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000434247.jpg", "height": 482, "width": 640, "date_captured": "2013-11-16 23:26:23", "flickr_url": "http://farm1.staticflickr.com/40/87918335_19391ee0b1_z.jpg", "id": 434247}, {"license": 3, "file_name": "000000542776.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000542776.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 00:53:17", "flickr_url": "http://farm8.staticflickr.com/7356/9478179406_373cd5c753_z.jpg", "id": 542776}, {"license": 1, "file_name": "000000117525.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000117525.jpg", "height": 500, "width": 500, "date_captured": "2013-11-17 03:35:36", "flickr_url": "http://farm3.staticflickr.com/2597/4206707269_5de458356b_z.jpg", "id": 117525}, {"license": 1, "file_name": "000000268000.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000268000.jpg", "height": 360, "width": 640, "date_captured": "2013-11-17 03:54:22", "flickr_url": "http://farm3.staticflickr.com/2850/9318997477_968434cc63_z.jpg", "id": 268000}, {"license": 1, "file_name": "000000006040.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000006040.jpg", "height": 351, "width": 640, "date_captured": "2013-11-17 04:30:15", "flickr_url": "http://farm6.staticflickr.com/5443/9806416495_092ff072f4_z.jpg", "id": 6040}, {"license": 2, "file_name": "000000049060.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000049060.jpg", "height": 411, "width": 640, "date_captured": "2013-11-17 06:05:31", "flickr_url": "http://farm9.staticflickr.com/8097/8565470942_6f3d51196f_z.jpg", "id": 49060}, {"license": 1, "file_name": "000000159684.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000159684.jpg", "height": 388, "width": 640, "date_captured": "2013-11-17 06:44:12", "flickr_url": "http://farm8.staticflickr.com/7432/9782618455_fb663479c8_z.jpg", "id": 159684}, {"license": 1, "file_name": "000000500423.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000500423.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 06:55:45", "flickr_url": "http://farm3.staticflickr.com/2885/9707914605_7b5c8a3b34_z.jpg", "id": 500423}, {"license": 3, "file_name": "000000463647.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000463647.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 06:59:52", "flickr_url": "http://farm1.staticflickr.com/186/367449922_d46e3455fc_z.jpg", "id": 463647}, {"license": 1, "file_name": "000000146825.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000146825.jpg", "height": 309, "width": 640, "date_captured": "2013-11-17 11:04:12", "flickr_url": "http://farm9.staticflickr.com/8103/8609033711_fcf04eabd6_z.jpg", "id": 146825}, {"license": 1, "file_name": "000000328683.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000328683.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 11:05:26", "flickr_url": "http://farm1.staticflickr.com/72/203432310_e38e0a35cc_z.jpg", "id": 328683}, {"license": 3, "file_name": "000000459396.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000459396.jpg", "height": 612, "width": 612, "date_captured": "2013-11-17 19:19:37", "flickr_url": "http://farm6.staticflickr.com/5335/9327855688_9602b73597_z.jpg", "id": 459396}, {"license": 3, "file_name": "000000119038.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000119038.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 19:57:58", "flickr_url": "http://farm3.staticflickr.com/2533/4062993935_244b0b3e29_z.jpg", "id": 119038}, {"license": 1, "file_name": "000000494634.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000494634.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 22:01:01", "flickr_url": "http://farm1.staticflickr.com/30/65183646_11d827007f_z.jpg", "id": 494634}, {"license": 3, "file_name": "000000378139.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000378139.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 22:09:28", "flickr_url": "http://farm3.staticflickr.com/2839/9354824707_ba594f021d_z.jpg", "id": 378139}, {"license": 3, "file_name": "000000041635.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000041635.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 00:06:00", "flickr_url": "http://farm4.staticflickr.com/3195/5762747588_26b0f99642_z.jpg", "id": 41635}, {"license": 1, "file_name": "000000396205.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000396205.jpg", "height": 640, "width": 425, "date_captured": "2013-11-18 00:33:06", "flickr_url": "http://farm6.staticflickr.com/5097/5422634600_e8867306e5_z.jpg", "id": 396205}, {"license": 3, "file_name": "000000180487.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000180487.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 03:24:43", "flickr_url": "http://farm3.staticflickr.com/2335/5813982948_8e311d7f01_z.jpg", "id": 180487}, {"license": 4, "file_name": "000000421757.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000421757.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 05:03:47", "flickr_url": "http://farm3.staticflickr.com/2890/9687057660_72532be23b_z.jpg", "id": 421757}, {"license": 1, "file_name": "000000370478.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000370478.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 07:14:13", "flickr_url": "http://farm3.staticflickr.com/2277/2181484720_d54e4d655e_z.jpg", "id": 370478}, {"license": 2, "file_name": "000000149568.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000149568.jpg", "height": 549, "width": 640, "date_captured": "2013-11-18 10:27:43", "flickr_url": "http://farm7.staticflickr.com/6122/5981569317_fdc21ca67a_z.jpg", "id": 149568}, {"license": 4, "file_name": "000000377368.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000377368.jpg", "height": 481, "width": 640, "date_captured": "2013-11-18 11:22:55", "flickr_url": "http://farm6.staticflickr.com/5293/5538913095_e3c5a908bc_z.jpg", "id": 377368}, {"license": 1, "file_name": "000000200961.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000200961.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 12:52:14", "flickr_url": "http://farm4.staticflickr.com/3629/3445585319_beddc46cd1_z.jpg", "id": 200961}, {"license": 3, "file_name": "000000243075.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000243075.jpg", "height": 573, "width": 640, "date_captured": "2013-11-18 13:41:47", "flickr_url": "http://farm9.staticflickr.com/8492/8269020578_566af8ee96_z.jpg", "id": 243075}, {"license": 3, "file_name": "000000367195.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000367195.jpg", "height": 312, "width": 500, "date_captured": "2013-11-18 16:16:59", "flickr_url": "http://farm4.staticflickr.com/3178/2321482775_74606b7db3_z.jpg", "id": 367195}, {"license": 3, "file_name": "000000562561.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000562561.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 16:20:38", "flickr_url": "http://farm3.staticflickr.com/2428/3584739412_c82ec72682_z.jpg", "id": 562561}, {"license": 1, "file_name": "000000269113.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000269113.jpg", "height": 457, "width": 640, "date_captured": "2013-11-18 16:54:37", "flickr_url": "http://farm9.staticflickr.com/8396/8646899006_1d4ab2fd95_z.jpg", "id": 269113}, {"license": 1, "file_name": "000000259097.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000259097.jpg", "height": 333, "width": 500, "date_captured": "2013-11-18 17:30:55", "flickr_url": "http://farm2.staticflickr.com/1208/984353000_5b9492801f_z.jpg", "id": 259097}, {"license": 4, "file_name": "000000064499.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000064499.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 18:37:11", "flickr_url": "http://farm5.staticflickr.com/4125/5083031191_7324cb7741_z.jpg", "id": 64499}, {"license": 5, "file_name": "000000201676.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000201676.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 20:57:41", "flickr_url": "http://farm3.staticflickr.com/2037/2316855213_ed66bb31fb_z.jpg", "id": 201676}, {"license": 3, "file_name": "000000121242.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000121242.jpg", "height": 429, "width": 640, "date_captured": "2013-11-19 00:19:21", "flickr_url": "http://farm3.staticflickr.com/2889/9760894795_642757ecea_z.jpg", "id": 121242}, {"license": 1, "file_name": "000000427655.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000427655.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 00:45:03", "flickr_url": "http://farm4.staticflickr.com/3795/9591251800_9c9727e178_z.jpg", "id": 427655}, {"license": 1, "file_name": "000000191614.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000191614.jpg", "height": 612, "width": 612, "date_captured": "2013-11-19 01:43:40", "flickr_url": "http://farm8.staticflickr.com/7424/9147738504_8bb8ef1465_z.jpg", "id": 191614}, {"license": 6, "file_name": "000000304291.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000304291.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 02:52:07", "flickr_url": "http://farm9.staticflickr.com/8118/8646645387_c3ecd82a2e_z.jpg", "id": 304291}, {"license": 3, "file_name": "000000500478.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000500478.jpg", "height": 640, "width": 329, "date_captured": "2013-11-19 18:57:12", "flickr_url": "http://farm9.staticflickr.com/8153/7464259908_348c02ae65_z.jpg", "id": 500478}, {"license": 2, "file_name": "000000509014.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000509014.jpg", "height": 281, "width": 640, "date_captured": "2013-11-19 19:13:46", "flickr_url": "http://farm6.staticflickr.com/5174/5399604278_fb1e5741c4_z.jpg", "id": 509014}, {"license": 4, "file_name": "000000090891.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000090891.jpg", "height": 431, "width": 640, "date_captured": "2013-11-19 19:15:27", "flickr_url": "http://farm7.staticflickr.com/6145/5938772497_5a89d3ec7c_z.jpg", "id": 90891}, {"license": 4, "file_name": "000000434297.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000434297.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 20:33:52", "flickr_url": "http://farm5.staticflickr.com/4104/5194394266_cfbf249956_z.jpg", "id": 434297}, {"license": 1, "file_name": "000000474854.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000474854.jpg", "height": 640, "width": 424, "date_captured": "2013-11-19 21:06:57", "flickr_url": "http://farm4.staticflickr.com/3390/4593790367_a8659d9d72_z.jpg", "id": 474854}, {"license": 1, "file_name": "000000501005.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000501005.jpg", "height": 396, "width": 640, "date_captured": "2013-11-19 21:11:59", "flickr_url": "http://farm3.staticflickr.com/2245/2433406916_c9aebc8e0b_z.jpg", "id": 501005}, {"license": 1, "file_name": "000000038118.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000038118.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 22:09:25", "flickr_url": "http://farm6.staticflickr.com/5147/5634484715_a83446594b_z.jpg", "id": 38118}, {"license": 4, "file_name": "000000350388.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000350388.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 22:17:43", "flickr_url": "http://farm9.staticflickr.com/8416/8699697541_36c9b942a7_z.jpg", "id": 350388}, {"license": 1, "file_name": "000000019221.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000019221.jpg", "height": 478, "width": 640, "date_captured": "2013-11-19 22:51:01", "flickr_url": "http://farm7.staticflickr.com/6156/6237638989_9d2c007615_z.jpg", "id": 19221}, {"license": 5, "file_name": "000000473406.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000473406.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 01:24:15", "flickr_url": "http://farm4.staticflickr.com/3422/3941022247_9b39c55b5a_z.jpg", "id": 473406}, {"license": 4, "file_name": "000000161879.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000161879.jpg", "height": 569, "width": 640, "date_captured": "2013-11-20 04:48:09", "flickr_url": "http://farm2.staticflickr.com/1198/5143977073_da69928877_z.jpg", "id": 161879}, {"license": 4, "file_name": "000000065350.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000065350.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 05:15:48", "flickr_url": "http://farm5.staticflickr.com/4139/4869131880_ae3de10447_z.jpg", "id": 65350}, {"license": 1, "file_name": "000000148662.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000148662.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 08:31:54", "flickr_url": "http://farm4.staticflickr.com/3145/3084361297_a2a52e2b76_z.jpg", "id": 148662}, {"license": 1, "file_name": "000000255912.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000255912.jpg", "height": 359, "width": 640, "date_captured": "2013-11-20 12:33:13", "flickr_url": "http://farm6.staticflickr.com/5241/5376282874_223bf699c6_z.jpg", "id": 255912}, {"license": 1, "file_name": "000000041990.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000041990.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 13:29:21", "flickr_url": "http://farm4.staticflickr.com/3071/3330731816_20478f3bfa_z.jpg", "id": 41990}, {"license": 3, "file_name": "000000175535.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000175535.jpg", "height": 640, "width": 478, "date_captured": "2013-11-20 15:55:43", "flickr_url": "http://farm6.staticflickr.com/5291/5492575977_9b2af6f29e_z.jpg", "id": 175535}, {"license": 1, "file_name": "000000297427.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000297427.jpg", "height": 640, "width": 580, "date_captured": "2013-11-20 16:49:17", "flickr_url": "http://farm5.staticflickr.com/4153/5094017491_818f4f6d92_z.jpg", "id": 297427}, {"license": 1, "file_name": "000000577864.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000577864.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 17:41:47", "flickr_url": "http://farm1.staticflickr.com/24/63310597_1316e302ba_z.jpg", "id": 577864}, {"license": 2, "file_name": "000000287959.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000287959.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 19:15:24", "flickr_url": "http://farm4.staticflickr.com/3037/2573975664_107642f49d_z.jpg", "id": 287959}, {"license": 1, "file_name": "000000162732.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000162732.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 20:10:19", "flickr_url": "http://farm9.staticflickr.com/8232/8498243341_1690297070_z.jpg", "id": 162732}, {"license": 1, "file_name": "000000004765.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000004765.jpg", "height": 612, "width": 612, "date_captured": "2013-11-20 20:25:48", "flickr_url": "http://farm9.staticflickr.com/8251/8561730075_f0c0dc1d28_z.jpg", "id": 4765}, {"license": 1, "file_name": "000000380711.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000380711.jpg", "height": 612, "width": 612, "date_captured": "2013-11-20 21:01:58", "flickr_url": "http://farm9.staticflickr.com/8038/8059960871_8591714bca_z.jpg", "id": 380711}, {"license": 3, "file_name": "000000007278.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000007278.jpg", "height": 482, "width": 640, "date_captured": "2013-11-20 21:49:44", "flickr_url": "http://farm8.staticflickr.com/7097/7034250251_561e42f820_z.jpg", "id": 7278}, {"license": 3, "file_name": "000000516318.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000516318.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 21:52:27", "flickr_url": "http://farm8.staticflickr.com/7200/6946559805_7edf757660_z.jpg", "id": 516318}, {"license": 1, "file_name": "000000060102.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000060102.jpg", "height": 360, "width": 640, "date_captured": "2013-11-20 22:21:51", "flickr_url": "http://farm6.staticflickr.com/5160/7399127544_25d3cd28cf_z.jpg", "id": 60102}, {"license": 1, "file_name": "000000022935.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000022935.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 22:39:55", "flickr_url": "http://farm8.staticflickr.com/7096/7260379992_ce80a4107c_z.jpg", "id": 22935}, {"license": 4, "file_name": "000000292908.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000292908.jpg", "height": 640, "width": 384, "date_captured": "2013-11-20 23:43:30", "flickr_url": "http://farm6.staticflickr.com/5060/5530326316_1ae963ae28_z.jpg", "id": 292908}, {"license": 2, "file_name": "000000209530.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000209530.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 23:54:15", "flickr_url": "http://farm5.staticflickr.com/4057/4446635127_f9fa313e1d_z.jpg", "id": 209530}, {"license": 2, "file_name": "000000565597.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000565597.jpg", "height": 640, "width": 478, "date_captured": "2013-11-21 00:00:00", "flickr_url": "http://farm8.staticflickr.com/7068/6888627396_6d22aef346_z.jpg", "id": 565597}, {"license": 4, "file_name": "000000057232.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000057232.jpg", "height": 612, "width": 612, "date_captured": "2013-11-21 00:35:28", "flickr_url": "http://farm9.staticflickr.com/8119/8693708685_4b469e01aa_z.jpg", "id": 57232}, {"license": 2, "file_name": "000000345385.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000345385.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 00:42:04", "flickr_url": "http://farm9.staticflickr.com/8213/8287102367_1641a40715_z.jpg", "id": 345385}, {"license": 4, "file_name": "000000266892.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000266892.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 02:18:36", "flickr_url": "http://farm6.staticflickr.com/5326/9257068408_181b1a4028_z.jpg", "id": 266892}, {"license": 5, "file_name": "000000345252.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000345252.jpg", "height": 479, "width": 640, "date_captured": "2013-11-21 02:38:20", "flickr_url": "http://farm1.staticflickr.com/39/83564850_64f070ac91_z.jpg", "id": 345252}, {"license": 2, "file_name": "000000197022.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000197022.jpg", "height": 478, "width": 640, "date_captured": "2013-11-21 02:57:02", "flickr_url": "http://farm8.staticflickr.com/7157/6810366409_3c731b29c4_z.jpg", "id": 197022}, {"license": 4, "file_name": "000000360393.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000360393.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 03:13:35", "flickr_url": "http://farm8.staticflickr.com/7153/6533098435_76b2fe85a0_z.jpg", "id": 360393}, {"license": 3, "file_name": "000000515828.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000515828.jpg", "height": 429, "width": 640, "date_captured": "2013-11-21 03:19:54", "flickr_url": "http://farm8.staticflickr.com/7093/7378274484_72563450e9_z.jpg", "id": 515828}, {"license": 3, "file_name": "000000429761.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000429761.jpg", "height": 428, "width": 640, "date_captured": "2013-11-21 04:17:38", "flickr_url": "http://farm6.staticflickr.com/5308/5893470938_7264d54e90_z.jpg", "id": 429761}, {"license": 3, "file_name": "000000569059.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000569059.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 19:22:11", "flickr_url": "http://farm1.staticflickr.com/183/399755164_1d3716dd54_z.jpg", "id": 569059}, {"license": 4, "file_name": "000000160666.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000160666.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 19:47:14", "flickr_url": "http://farm4.staticflickr.com/3016/2459578446_4c2df58377_z.jpg", "id": 160666}, {"license": 2, "file_name": "000000294783.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000294783.jpg", "height": 428, "width": 640, "date_captured": "2013-11-21 23:18:18", "flickr_url": "http://farm3.staticflickr.com/2066/5695527828_50d0b012cb_z.jpg", "id": 294783}, {"license": 1, "file_name": "000000563267.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000563267.jpg", "height": 375, "width": 500, "date_captured": "2013-11-21 23:36:20", "flickr_url": "http://farm1.staticflickr.com/121/370019242_a80b587896_z.jpg", "id": 563267}, {"license": 6, "file_name": "000000568584.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000568584.jpg", "height": 426, "width": 640, "date_captured": "2013-11-22 00:01:15", "flickr_url": "http://farm5.staticflickr.com/4077/4808680876_81e7107e09_z.jpg", "id": 568584}, {"license": 2, "file_name": "000000335658.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000335658.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 00:57:16", "flickr_url": "http://farm1.staticflickr.com/26/37932847_1b2209f1bb_z.jpg", "id": 335658}, {"license": 3, "file_name": "000000580410.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000580410.jpg", "height": 640, "width": 427, "date_captured": "2013-11-22 01:20:06", "flickr_url": "http://farm3.staticflickr.com/2582/4136717151_55c0b4d555_z.jpg", "id": 580410}, {"license": 3, "file_name": "000000568710.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000568710.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 01:29:48", "flickr_url": "http://farm4.staticflickr.com/3499/4042298432_93197af904_z.jpg", "id": 568710}, {"license": 2, "file_name": "000000414676.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000414676.jpg", "height": 640, "width": 423, "date_captured": "2013-11-22 03:03:25", "flickr_url": "http://farm8.staticflickr.com/7217/7174165084_0fd08bd8de_z.jpg", "id": 414676}, {"license": 2, "file_name": "000000134322.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000134322.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 10:16:10", "flickr_url": "http://farm2.staticflickr.com/1430/559777824_477e58b137_z.jpg", "id": 134322}, {"license": 2, "file_name": "000000085911.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000085911.jpg", "height": 403, "width": 640, "date_captured": "2013-11-22 10:17:35", "flickr_url": "http://farm2.staticflickr.com/1131/559771756_21f4d6fd3f_z.jpg", "id": 85911}, {"license": 5, "file_name": "000000425227.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000425227.jpg", "height": 640, "width": 428, "date_captured": "2013-11-22 16:35:15", "flickr_url": "http://farm4.staticflickr.com/3492/3875210264_d42df8f11d_z.jpg", "id": 425227}, {"license": 3, "file_name": "000000116068.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000116068.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 17:03:02", "flickr_url": "http://farm3.staticflickr.com/2539/3701003402_746f23435e_z.jpg", "id": 116068}, {"license": 2, "file_name": "000000370270.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000370270.jpg", "height": 640, "width": 480, "date_captured": "2013-11-22 21:36:48", "flickr_url": "http://farm1.staticflickr.com/193/510685873_52b279a475_z.jpg", "id": 370270}, {"license": 1, "file_name": "000000408774.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000408774.jpg", "height": 333, "width": 500, "date_captured": "2013-11-22 21:44:21", "flickr_url": "http://farm5.staticflickr.com/4043/4311013116_cb99b22d5c_z.jpg", "id": 408774}, {"license": 1, "file_name": "000000357816.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000357816.jpg", "height": 455, "width": 500, "date_captured": "2013-11-22 21:51:48", "flickr_url": "http://farm2.staticflickr.com/1287/1217021994_07f95881e7_z.jpg", "id": 357816}, {"license": 1, "file_name": "000000462031.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000462031.jpg", "height": 640, "width": 449, "date_captured": "2013-11-22 22:09:37", "flickr_url": "http://farm6.staticflickr.com/5319/6949094608_2da17b064f_z.jpg", "id": 462031}, {"license": 1, "file_name": "000000223738.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000223738.jpg", "height": 640, "width": 634, "date_captured": "2013-11-22 22:21:54", "flickr_url": "http://farm5.staticflickr.com/4149/5053289778_eb085287cd_z.jpg", "id": 223738}, {"license": 4, "file_name": "000000457884.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000457884.jpg", "height": 458, "width": 640, "date_captured": "2013-11-22 22:35:00", "flickr_url": "http://farm4.staticflickr.com/3438/3751850733_03b65c54c5_z.jpg", "id": 457884}, {"license": 1, "file_name": "000000563470.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000563470.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 22:38:37", "flickr_url": "http://farm4.staticflickr.com/3370/3518451715_596120fc59_z.jpg", "id": 563470}, {"license": 1, "file_name": "000000506707.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000506707.jpg", "height": 427, "width": 640, "date_captured": "2013-11-23 01:03:32", "flickr_url": "http://farm8.staticflickr.com/7024/6437080595_4102ce8326_z.jpg", "id": 506707}, {"license": 5, "file_name": "000000027620.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000027620.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 19:54:43", "flickr_url": "http://farm2.staticflickr.com/1052/1338060761_ababfaeb9b_z.jpg", "id": 27620}, {"license": 1, "file_name": "000000051610.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000051610.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 00:13:42", "flickr_url": "http://farm7.staticflickr.com/6103/6218746165_6ba13bf1df_z.jpg", "id": 51610}, {"license": 2, "file_name": "000000182202.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000182202.jpg", "height": 385, "width": 640, "date_captured": "2013-11-24 00:49:07", "flickr_url": "http://farm1.staticflickr.com/93/221753744_c699bc843c_z.jpg", "id": 182202}, {"license": 2, "file_name": "000000060449.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000060449.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 01:21:38", "flickr_url": "http://farm3.staticflickr.com/2664/4150090398_6a7d30fb0a_z.jpg", "id": 60449}, {"license": 4, "file_name": "000000042889.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000042889.jpg", "height": 500, "width": 375, "date_captured": "2013-11-24 02:47:07", "flickr_url": "http://farm1.staticflickr.com/32/67531548_78ffc9828d_z.jpg", "id": 42889}, {"license": 5, "file_name": "000000322968.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000322968.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 03:48:24", "flickr_url": "http://farm7.staticflickr.com/6180/6158623949_6f42b52bc5_z.jpg", "id": 322968}, {"license": 1, "file_name": "000000546475.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000546475.jpg", "height": 640, "width": 383, "date_captured": "2013-11-24 06:27:18", "flickr_url": "http://farm5.staticflickr.com/4143/4773136523_e19d4be593_z.jpg", "id": 546475}, {"license": 1, "file_name": "000000302882.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000302882.jpg", "height": 400, "width": 500, "date_captured": "2013-11-24 06:55:55", "flickr_url": "http://farm4.staticflickr.com/3095/3203616729_41483f204f_z.jpg", "id": 302882}, {"license": 1, "file_name": "000000363188.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000363188.jpg", "height": 425, "width": 640, "date_captured": "2013-11-24 08:11:34", "flickr_url": "http://farm7.staticflickr.com/6104/6273496716_e3e3412551_z.jpg", "id": 363188}, {"license": 5, "file_name": "000000498747.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000498747.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 09:23:43", "flickr_url": "http://farm1.staticflickr.com/140/385877874_9ed6fcafbf_z.jpg", "id": 498747}, {"license": 1, "file_name": "000000228981.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000228981.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 09:46:33", "flickr_url": "http://farm1.staticflickr.com/12/16227769_2dae23e09e_z.jpg", "id": 228981}, {"license": 3, "file_name": "000000316666.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000316666.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 12:58:25", "flickr_url": "http://farm4.staticflickr.com/3156/2862346563_4910aa8c71_z.jpg", "id": 316666}, {"license": 3, "file_name": "000000251824.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000251824.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 21:04:27", "flickr_url": "http://farm4.staticflickr.com/3223/3085069035_42fce9e09f_z.jpg", "id": 251824}, {"license": 3, "file_name": "000000175443.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000175443.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 21:09:54", "flickr_url": "http://farm4.staticflickr.com/3132/3105523013_9115f142fa_z.jpg", "id": 175443}, {"license": 4, "file_name": "000000064084.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000064084.jpg", "height": 436, "width": 640, "date_captured": "2013-11-25 11:04:34", "flickr_url": "http://farm9.staticflickr.com/8482/8219102302_a64732337b_z.jpg", "id": 64084}, {"license": 1, "file_name": "000000177489.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000177489.jpg", "height": 478, "width": 640, "date_captured": "2013-11-25 14:57:15", "flickr_url": "http://farm4.staticflickr.com/3734/9179419092_7f3acd71fd_z.jpg", "id": 177489}, {"license": 3, "file_name": "000000450202.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000450202.jpg", "height": 500, "width": 375, "date_captured": "2013-11-25 21:34:03", "flickr_url": "http://farm1.staticflickr.com/13/16888840_2c0ceba3ee_z.jpg", "id": 450202}, {"license": 2, "file_name": "000000445834.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000445834.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 16:59:58", "flickr_url": "http://farm8.staticflickr.com/7188/6904138627_c6a14d355e_z.jpg", "id": 445834}, {"license": 4, "file_name": "000000030213.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000030213.jpg", "height": 449, "width": 640, "date_captured": "2013-11-14 19:03:42", "flickr_url": "http://farm9.staticflickr.com/8376/8561578295_08827d4611_z.jpg", "id": 30213}, {"license": 3, "file_name": "000000452793.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000452793.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 20:43:48", "flickr_url": "http://farm9.staticflickr.com/8304/7890760934_18e623d7fa_z.jpg", "id": 452793}, {"license": 4, "file_name": "000000481386.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000481386.jpg", "height": 640, "width": 427, "date_captured": "2013-11-14 22:11:20", "flickr_url": "http://farm6.staticflickr.com/5328/8789640387_14e10562cb_z.jpg", "id": 481386}, {"license": 1, "file_name": "000000565045.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000565045.jpg", "height": 500, "width": 333, "date_captured": "2013-11-14 23:24:03", "flickr_url": "http://farm3.staticflickr.com/2422/4202216473_8f6b964d90_z.jpg", "id": 565045}, {"license": 3, "file_name": "000000350122.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000350122.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 23:36:35", "flickr_url": "http://farm5.staticflickr.com/4122/4886757957_98fc49a770_z.jpg", "id": 350122}, {"license": 3, "file_name": "000000491071.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000491071.jpg", "height": 640, "width": 414, "date_captured": "2013-11-15 03:48:25", "flickr_url": "http://farm3.staticflickr.com/2399/2435328572_d2af944654_z.jpg", "id": 491071}, {"license": 5, "file_name": "000000241319.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000241319.jpg", "height": 476, "width": 640, "date_captured": "2013-11-15 04:00:51", "flickr_url": "http://farm5.staticflickr.com/4110/5030334212_7d75b72d07_z.jpg", "id": 241319}, {"license": 5, "file_name": "000000537812.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000537812.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 04:56:57", "flickr_url": "http://farm6.staticflickr.com/5224/5698780107_3b1df45ff9_z.jpg", "id": 537812}, {"license": 3, "file_name": "000000228942.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000228942.jpg", "height": 319, "width": 640, "date_captured": "2013-11-15 05:27:00", "flickr_url": "http://farm1.staticflickr.com/35/107201527_c974c6373a_z.jpg", "id": 228942}, {"license": 3, "file_name": "000000065485.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000065485.jpg", "height": 364, "width": 640, "date_captured": "2013-11-15 07:45:54", "flickr_url": "http://farm1.staticflickr.com/94/264167261_794d01c7e6_z.jpg", "id": 65485}, {"license": 3, "file_name": "000000482100.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000482100.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 12:39:03", "flickr_url": "http://farm3.staticflickr.com/2471/3599138108_5391fbd99f_z.jpg", "id": 482100}, {"license": 3, "file_name": "000000408112.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000408112.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 03:04:16", "flickr_url": "http://farm4.staticflickr.com/3739/9780839276_172c5dbca2_z.jpg", "id": 408112}, {"license": 5, "file_name": "000000084752.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000084752.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 04:28:37", "flickr_url": "http://farm8.staticflickr.com/7268/7044989013_c8821aaa75_z.jpg", "id": 84752}, {"license": 6, "file_name": "000000281693.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000281693.jpg", "height": 481, "width": 640, "date_captured": "2013-11-16 04:59:55", "flickr_url": "http://farm2.staticflickr.com/1376/5115709554_b924faa219_z.jpg", "id": 281693}, {"license": 3, "file_name": "000000021839.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000021839.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 12:27:39", "flickr_url": "http://farm5.staticflickr.com/4080/5052955350_d1dc39ca46_z.jpg", "id": 21839}, {"license": 3, "file_name": "000000155451.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000155451.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 12:45:45", "flickr_url": "http://farm3.staticflickr.com/2748/4386129685_d97ca98bae_z.jpg", "id": 155451}, {"license": 5, "file_name": "000000032941.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000032941.jpg", "height": 640, "width": 458, "date_captured": "2013-11-16 13:09:15", "flickr_url": "http://farm9.staticflickr.com/8067/8224728949_fa09beb316_z.jpg", "id": 32941}, {"license": 3, "file_name": "000000517069.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000517069.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 13:45:31", "flickr_url": "http://farm2.staticflickr.com/1352/1046671269_9122e6a40f_z.jpg", "id": 517069}, {"license": 3, "file_name": "000000453841.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000453841.jpg", "height": 339, "width": 500, "date_captured": "2013-11-16 14:06:34", "flickr_url": "http://farm1.staticflickr.com/120/256437733_56f483ac28_z.jpg", "id": 453841}, {"license": 1, "file_name": "000000571943.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000571943.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 14:17:17", "flickr_url": "http://farm1.staticflickr.com/40/88645870_f246110ed4_z.jpg", "id": 571943}, {"license": 3, "file_name": "000000478862.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000478862.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 14:40:47", "flickr_url": "http://farm8.staticflickr.com/7138/7792356368_d20a853052_z.jpg", "id": 478862}, {"license": 6, "file_name": "000000320554.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000320554.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 15:10:40", "flickr_url": "http://farm3.staticflickr.com/2465/3685293447_ae7122dc8e_z.jpg", "id": 320554}, {"license": 3, "file_name": "000000433243.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000433243.jpg", "height": 424, "width": 640, "date_captured": "2013-11-16 15:59:19", "flickr_url": "http://farm6.staticflickr.com/5446/7370172300_1a54449619_z.jpg", "id": 433243}, {"license": 6, "file_name": "000000186637.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000186637.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 16:46:33", "flickr_url": "http://farm9.staticflickr.com/8245/8522954659_295f19e3a9_z.jpg", "id": 186637}, {"license": 1, "file_name": "000000022755.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000022755.jpg", "height": 479, "width": 640, "date_captured": "2013-11-16 17:20:29", "flickr_url": "http://farm9.staticflickr.com/8101/8597825681_a22b2ce185_z.jpg", "id": 22755}, {"license": 1, "file_name": "000000283037.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000283037.jpg", "height": 640, "width": 427, "date_captured": "2013-11-16 18:19:56", "flickr_url": "http://farm1.staticflickr.com/168/436562444_d724afa60c_z.jpg", "id": 283037}, {"license": 3, "file_name": "000000562448.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000562448.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 18:23:28", "flickr_url": "http://farm4.staticflickr.com/3496/3904075643_f0958a9f5c_z.jpg", "id": 562448}, {"license": 1, "file_name": "000000244379.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000244379.jpg", "height": 464, "width": 640, "date_captured": "2013-11-16 18:39:42", "flickr_url": "http://farm8.staticflickr.com/7011/6688261903_0277c9f052_z.jpg", "id": 244379}, {"license": 1, "file_name": "000000545219.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000545219.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 20:19:15", "flickr_url": "http://farm3.staticflickr.com/2820/9582692230_cdb7b55f1e_z.jpg", "id": 545219}, {"license": 4, "file_name": "000000322829.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000322829.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 20:36:47", "flickr_url": "http://farm5.staticflickr.com/4073/4923653485_e2b1549eb2_z.jpg", "id": 322829}, {"license": 3, "file_name": "000000344029.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000344029.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 22:22:21", "flickr_url": "http://farm9.staticflickr.com/8261/8708596500_d0bdf4e9d2_z.jpg", "id": 344029}, {"license": 4, "file_name": "000000542625.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000542625.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 23:00:05", "flickr_url": "http://farm8.staticflickr.com/7415/9089660689_e77a462f81_z.jpg", "id": 542625}, {"license": 3, "file_name": "000000359937.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000359937.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 23:27:04", "flickr_url": "http://farm9.staticflickr.com/8109/8460247827_c4afb7949d_z.jpg", "id": 359937}, {"license": 4, "file_name": "000000566758.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000566758.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 23:51:13", "flickr_url": "http://farm9.staticflickr.com/8476/8369612010_fc2424973c_z.jpg", "id": 566758}, {"license": 5, "file_name": "000000369812.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000369812.jpg", "height": 637, "width": 640, "date_captured": "2013-11-17 00:34:58", "flickr_url": "http://farm6.staticflickr.com/5449/7098368435_ac519fdec5_z.jpg", "id": 369812}, {"license": 5, "file_name": "000000565563.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000565563.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 01:08:21", "flickr_url": "http://farm3.staticflickr.com/2493/3988619824_bb5e1e92d2_z.jpg", "id": 565563}, {"license": 4, "file_name": "000000101022.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000101022.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 01:19:22", "flickr_url": "http://farm9.staticflickr.com/8507/8595154673_d11a7de0ff_z.jpg", "id": 101022}, {"license": 1, "file_name": "000000357060.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000357060.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 01:26:57", "flickr_url": "http://farm4.staticflickr.com/3539/3850720893_595ac515fb_z.jpg", "id": 357060}, {"license": 1, "file_name": "000000335177.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000335177.jpg", "height": 479, "width": 640, "date_captured": "2013-11-17 02:38:39", "flickr_url": "http://farm4.staticflickr.com/3444/3821042011_c741061caa_z.jpg", "id": 335177}, {"license": 6, "file_name": "000000471023.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000471023.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 03:27:59", "flickr_url": "http://farm9.staticflickr.com/8154/7465550928_44b5484174_z.jpg", "id": 471023}, {"license": 3, "file_name": "000000556498.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000556498.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 04:32:28", "flickr_url": "http://farm6.staticflickr.com/5244/5345094558_99eea927bf_z.jpg", "id": 556498}, {"license": 5, "file_name": "000000025181.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000025181.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 04:36:38", "flickr_url": "http://farm9.staticflickr.com/8501/8308004994_44eb2d562d_z.jpg", "id": 25181}, {"license": 1, "file_name": "000000308391.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000308391.jpg", "height": 338, "width": 500, "date_captured": "2013-11-17 06:26:48", "flickr_url": "http://farm3.staticflickr.com/2250/2261089757_37175997a6_z.jpg", "id": 308391}, {"license": 1, "file_name": "000000076625.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000076625.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 06:34:57", "flickr_url": "http://farm3.staticflickr.com/2823/9922618715_4403d92982_z.jpg", "id": 76625}, {"license": 6, "file_name": "000000057244.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000057244.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 07:47:37", "flickr_url": "http://farm4.staticflickr.com/3698/9471835052_bbc3a5c8dc_z.jpg", "id": 57244}, {"license": 3, "file_name": "000000082085.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000082085.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 08:17:39", "flickr_url": "http://farm6.staticflickr.com/5327/9344378430_4ce00193c0_z.jpg", "id": 82085}, {"license": 3, "file_name": "000000116825.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000116825.jpg", "height": 360, "width": 640, "date_captured": "2013-11-17 18:15:33", "flickr_url": "http://farm2.staticflickr.com/1051/593301534_ed53411bdb_z.jpg", "id": 116825}, {"license": 6, "file_name": "000000110784.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000110784.jpg", "height": 640, "width": 433, "date_captured": "2013-11-17 20:16:39", "flickr_url": "http://farm9.staticflickr.com/8009/7464567870_17a5e3bac7_z.jpg", "id": 110784}, {"license": 4, "file_name": "000000393226.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000393226.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 20:36:07", "flickr_url": "http://farm9.staticflickr.com/8003/7321339838_42fe225709_z.jpg", "id": 393226}, {"license": 3, "file_name": "000000430073.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000430073.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 21:20:08", "flickr_url": "http://farm9.staticflickr.com/8356/8322095536_2f8d8eebd3_z.jpg", "id": 430073}, {"license": 6, "file_name": "000000258911.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000258911.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 21:33:15", "flickr_url": "http://farm9.staticflickr.com/8313/8056325869_f24563211d_z.jpg", "id": 258911}, {"license": 1, "file_name": "000000171611.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000171611.jpg", "height": 443, "width": 640, "date_captured": "2013-11-17 22:15:48", "flickr_url": "http://farm8.staticflickr.com/7115/7137560221_c137619e9a_z.jpg", "id": 171611}, {"license": 3, "file_name": "000000329447.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000329447.jpg", "height": 505, "width": 640, "date_captured": "2013-11-17 22:44:52", "flickr_url": "http://farm8.staticflickr.com/7012/6830903723_eb2df17454_z.jpg", "id": 329447}, {"license": 2, "file_name": "000000223188.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000223188.jpg", "height": 640, "width": 427, "date_captured": "2013-11-17 23:17:31", "flickr_url": "http://farm7.staticflickr.com/6151/6134076942_d00e793cf0_z.jpg", "id": 223188}, {"license": 4, "file_name": "000000203639.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000203639.jpg", "height": 640, "width": 486, "date_captured": "2013-11-18 01:55:46", "flickr_url": "http://farm9.staticflickr.com/8211/8423150137_74f6020b26_z.jpg", "id": 203639}, {"license": 4, "file_name": "000000161875.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000161875.jpg", "height": 422, "width": 640, "date_captured": "2013-11-18 01:55:50", "flickr_url": "http://farm9.staticflickr.com/8095/8424253224_c62e5479c8_z.jpg", "id": 161875}, {"license": 1, "file_name": "000000018770.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000018770.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 02:44:01", "flickr_url": "http://farm9.staticflickr.com/8020/7499130232_34bd20c007_z.jpg", "id": 18770}, {"license": 5, "file_name": "000000397303.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000397303.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 05:00:01", "flickr_url": "http://farm3.staticflickr.com/2433/3830853864_c3216021f5_z.jpg", "id": 397303}, {"license": 4, "file_name": "000000330790.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000330790.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 06:09:34", "flickr_url": "http://farm8.staticflickr.com/7046/6949409387_e3d3ee659d_z.jpg", "id": 330790}, {"license": 6, "file_name": "000000144932.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000144932.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 06:15:47", "flickr_url": "http://farm3.staticflickr.com/2859/9468810661_79b1c3cf61_z.jpg", "id": 144932}, {"license": 3, "file_name": "000000368961.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000368961.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 07:58:00", "flickr_url": "http://farm6.staticflickr.com/5252/5542272164_af5c1e701a_z.jpg", "id": 368961}, {"license": 1, "file_name": "000000369037.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000369037.jpg", "height": 640, "width": 425, "date_captured": "2013-11-18 08:20:02", "flickr_url": "http://farm6.staticflickr.com/5164/5332388997_21be689fa9_z.jpg", "id": 369037}, {"license": 2, "file_name": "000000210388.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000210388.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 10:39:06", "flickr_url": "http://farm3.staticflickr.com/2373/5710493068_885ed4dc68_z.jpg", "id": 210388}, {"license": 3, "file_name": "000000032861.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000032861.jpg", "height": 640, "width": 426, "date_captured": "2013-11-18 11:34:59", "flickr_url": "http://farm6.staticflickr.com/5251/5444572321_be988cf458_z.jpg", "id": 32861}, {"license": 2, "file_name": "000000203546.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000203546.jpg", "height": 457, "width": 640, "date_captured": "2013-11-18 12:17:29", "flickr_url": "http://farm9.staticflickr.com/8240/8627660641_01a3ea2451_z.jpg", "id": 203546}, {"license": 4, "file_name": "000000222299.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000222299.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 12:25:58", "flickr_url": "http://farm4.staticflickr.com/3270/2569402304_5459e6c3c1_z.jpg", "id": 222299}, {"license": 1, "file_name": "000000414261.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000414261.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 13:22:42", "flickr_url": "http://farm4.staticflickr.com/3824/9099310623_e18bbd7a15_z.jpg", "id": 414261}, {"license": 3, "file_name": "000000521231.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000521231.jpg", "height": 640, "width": 424, "date_captured": "2013-11-18 14:11:17", "flickr_url": "http://farm8.staticflickr.com/7215/7184941145_7d6930bdf2_z.jpg", "id": 521231}, {"license": 3, "file_name": "000000547519.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000547519.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 14:13:05", "flickr_url": "http://farm8.staticflickr.com/7101/7159937333_160a90e72b_z.jpg", "id": 547519}, {"license": 2, "file_name": "000000355240.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000355240.jpg", "height": 360, "width": 640, "date_captured": "2013-11-18 14:35:19", "flickr_url": "http://farm4.staticflickr.com/3230/2347014704_e6cc1dd784_z.jpg", "id": 355240}, {"license": 1, "file_name": "000000504635.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000504635.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 16:11:06", "flickr_url": "http://farm6.staticflickr.com/5282/5254597443_d5be8939fb_z.jpg", "id": 504635}, {"license": 4, "file_name": "000000239857.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000239857.jpg", "height": 333, "width": 500, "date_captured": "2013-11-18 16:11:07", "flickr_url": "http://farm4.staticflickr.com/3493/3923418369_0b5abe5987_z.jpg", "id": 239857}, {"license": 6, "file_name": "000000445439.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000445439.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 16:26:09", "flickr_url": "http://farm9.staticflickr.com/8514/8522957675_62c002ec69_z.jpg", "id": 445439}, {"license": 1, "file_name": "000000038825.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000038825.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 17:43:40", "flickr_url": "http://farm8.staticflickr.com/7076/7007652672_d42ef8330e_z.jpg", "id": 38825}, {"license": 1, "file_name": "000000319184.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000319184.jpg", "height": 294, "width": 500, "date_captured": "2013-11-18 17:46:39", "flickr_url": "http://farm1.staticflickr.com/222/493350871_703c6fd53f_z.jpg", "id": 319184}, {"license": 1, "file_name": "000000336265.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000336265.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 18:06:05", "flickr_url": "http://farm1.staticflickr.com/88/223603179_67ce563578_z.jpg", "id": 336265}, {"license": 1, "file_name": "000000568213.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000568213.jpg", "height": 325, "width": 500, "date_captured": "2013-11-18 18:06:55", "flickr_url": "http://farm1.staticflickr.com/76/197789015_cff6a2db70_z.jpg", "id": 568213}, {"license": 3, "file_name": "000000163951.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000163951.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 18:40:09", "flickr_url": "http://farm3.staticflickr.com/2383/2105228999_8a3e02703a_z.jpg", "id": 163951}, {"license": 6, "file_name": "000000217753.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000217753.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 18:49:16", "flickr_url": "http://farm5.staticflickr.com/4020/5169088206_2166d98736_z.jpg", "id": 217753}, {"license": 6, "file_name": "000000409424.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000409424.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 18:50:46", "flickr_url": "http://farm5.staticflickr.com/4089/5091149017_3e9787ff5d_z.jpg", "id": 409424}, {"license": 6, "file_name": "000000376307.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000376307.jpg", "height": 500, "width": 375, "date_captured": "2013-11-19 19:14:27", "flickr_url": "http://farm4.staticflickr.com/3080/2569806144_db4b8f60b1_z.jpg", "id": 376307}, {"license": 1, "file_name": "000000567740.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000567740.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 19:56:47", "flickr_url": "http://farm9.staticflickr.com/8238/8569670192_106a170c8b_z.jpg", "id": 567740}, {"license": 1, "file_name": "000000216516.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000216516.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 21:08:54", "flickr_url": "http://farm8.staticflickr.com/7186/6933964927_8a11bce0df_z.jpg", "id": 216516}, {"license": 2, "file_name": "000000551660.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000551660.jpg", "height": 640, "width": 424, "date_captured": "2013-11-19 22:43:39", "flickr_url": "http://farm6.staticflickr.com/5149/5596929409_ff2225c0a5_z.jpg", "id": 551660}, {"license": 4, "file_name": "000000191580.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000191580.jpg", "height": 640, "width": 478, "date_captured": "2013-11-19 23:03:26", "flickr_url": "http://farm5.staticflickr.com/4092/4987532314_ac508c6b1c_z.jpg", "id": 191580}, {"license": 2, "file_name": "000000576031.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000576031.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 23:05:34", "flickr_url": "http://farm6.staticflickr.com/5090/5363817796_9a5a6e3af2_z.jpg", "id": 576031}, {"license": 1, "file_name": "000000404249.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000404249.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 23:24:15", "flickr_url": "http://farm6.staticflickr.com/5094/5541310422_67a848f2a9_z.jpg", "id": 404249}, {"license": 4, "file_name": "000000572620.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000572620.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 03:54:56", "flickr_url": "http://farm7.staticflickr.com/6041/5915075988_a0ea460639_z.jpg", "id": 572620}, {"license": 1, "file_name": "000000561958.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000561958.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 09:12:29", "flickr_url": "http://farm6.staticflickr.com/5286/5214543119_f04e31167a_z.jpg", "id": 561958}, {"license": 3, "file_name": "000000491130.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000491130.jpg", "height": 640, "width": 443, "date_captured": "2013-11-20 12:50:30", "flickr_url": "http://farm5.staticflickr.com/4028/4410009411_5ae4d0faf3_z.jpg", "id": 491130}, {"license": 4, "file_name": "000000534041.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000534041.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 13:21:56", "flickr_url": "http://farm1.staticflickr.com/212/526831619_fb699cd049_z.jpg", "id": 534041}, {"license": 5, "file_name": "000000283268.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000283268.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 13:51:51", "flickr_url": "http://farm3.staticflickr.com/2766/4064852845_9f88b567a8_z.jpg", "id": 283268}, {"license": 1, "file_name": "000000526197.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000526197.jpg", "height": 640, "width": 428, "date_captured": "2013-11-20 16:29:21", "flickr_url": "http://farm4.staticflickr.com/3756/9457309833_ea052aa300_z.jpg", "id": 526197}, {"license": 1, "file_name": "000000350679.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000350679.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 17:30:52", "flickr_url": "http://farm9.staticflickr.com/8330/8106346966_da0b03aed0_z.jpg", "id": 350679}, {"license": 3, "file_name": "000000244181.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000244181.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 17:55:20", "flickr_url": "http://farm4.staticflickr.com/3531/3749477549_6dd4d910a9_z.jpg", "id": 244181}, {"license": 4, "file_name": "000000574520.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000574520.jpg", "height": 399, "width": 640, "date_captured": "2013-11-20 18:07:10", "flickr_url": "http://farm7.staticflickr.com/6219/6276393723_bf8a0d64a3_z.jpg", "id": 574520}, {"license": 1, "file_name": "000000122672.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000122672.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 18:18:42", "flickr_url": "http://farm4.staticflickr.com/3248/2726316294_d5be6c8483_z.jpg", "id": 122672}, {"license": 3, "file_name": "000000199442.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000199442.jpg", "height": 433, "width": 640, "date_captured": "2013-11-20 19:38:35", "flickr_url": "http://farm1.staticflickr.com/83/214780720_e940cdac88_z.jpg", "id": 199442}, {"license": 3, "file_name": "000000391722.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000391722.jpg", "height": 640, "width": 635, "date_captured": "2013-11-20 21:07:31", "flickr_url": "http://farm9.staticflickr.com/8096/8525142487_280d6ae156_z.jpg", "id": 391722}, {"license": 1, "file_name": "000000190648.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000190648.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 21:27:01", "flickr_url": "http://farm7.staticflickr.com/6199/6134521483_8518644468_z.jpg", "id": 190648}, {"license": 1, "file_name": "000000210915.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000210915.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 23:50:50", "flickr_url": "http://farm6.staticflickr.com/5051/5454731390_862f3c2053_z.jpg", "id": 210915}, {"license": 4, "file_name": "000000356505.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000356505.jpg", "height": 425, "width": 640, "date_captured": "2013-11-21 00:57:59", "flickr_url": "http://farm5.staticflickr.com/4079/4879236570_540fbb5b7a_z.jpg", "id": 356505}, {"license": 4, "file_name": "000000375469.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000375469.jpg", "height": 181, "width": 640, "date_captured": "2013-11-21 00:58:03", "flickr_url": "http://farm5.staticflickr.com/4120/4866723553_847054d685_z.jpg", "id": 375469}, {"license": 3, "file_name": "000000468245.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000468245.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 01:15:19", "flickr_url": "http://farm9.staticflickr.com/8281/7722151160_2e4f7dfa6d_z.jpg", "id": 468245}, {"license": 1, "file_name": "000000112298.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000112298.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 01:47:52", "flickr_url": "http://farm3.staticflickr.com/2706/4178607098_bcd609d6ed_z.jpg", "id": 112298}, {"license": 3, "file_name": "000000133244.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000133244.jpg", "height": 359, "width": 640, "date_captured": "2013-11-21 01:57:59", "flickr_url": "http://farm3.staticflickr.com/2867/9691693212_80e9cc6203_z.jpg", "id": 133244}, {"license": 3, "file_name": "000000325347.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000325347.jpg", "height": 359, "width": 640, "date_captured": "2013-11-21 01:59:56", "flickr_url": "http://farm8.staticflickr.com/7361/9665068756_09e5bdd1d0_z.jpg", "id": 325347}, {"license": 1, "file_name": "000000376093.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000376093.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 02:07:30", "flickr_url": "http://farm9.staticflickr.com/8063/8192729628_8675b6ba5d_z.jpg", "id": 376093}, {"license": 1, "file_name": "000000195842.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000195842.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 20:54:54", "flickr_url": "http://farm4.staticflickr.com/3601/3632189307_4ae56e1386_z.jpg", "id": 195842}, {"license": 1, "file_name": "000000454067.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000454067.jpg", "height": 406, "width": 500, "date_captured": "2013-11-21 23:52:56", "flickr_url": "http://farm1.staticflickr.com/163/422206297_e23b6cdd2d_z.jpg", "id": 454067}, {"license": 3, "file_name": "000000305317.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000305317.jpg", "height": 500, "width": 334, "date_captured": "2013-11-22 08:42:10", "flickr_url": "http://farm3.staticflickr.com/2360/1803759542_fae5c62ba6_z.jpg", "id": 305317}, {"license": 3, "file_name": "000000094185.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000094185.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 15:36:03", "flickr_url": "http://farm9.staticflickr.com/8115/8863191321_9dff99e5df_z.jpg", "id": 94185}, {"license": 1, "file_name": "000000383339.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000383339.jpg", "height": 428, "width": 640, "date_captured": "2013-11-22 16:14:40", "flickr_url": "http://farm5.staticflickr.com/4029/4525533697_ab2398a19b_z.jpg", "id": 383339}, {"license": 3, "file_name": "000000253433.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000253433.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 17:10:35", "flickr_url": "http://farm1.staticflickr.com/162/361912851_59c9993d91_z.jpg", "id": 253433}, {"license": 1, "file_name": "000000288430.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000288430.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 20:17:10", "flickr_url": "http://farm1.staticflickr.com/56/126789584_4e22780fd2_z.jpg", "id": 288430}, {"license": 3, "file_name": "000000012639.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000012639.jpg", "height": 640, "width": 480, "date_captured": "2013-11-22 21:09:08", "flickr_url": "http://farm5.staticflickr.com/4102/4795012771_81c0b6b502_z.jpg", "id": 12639}, {"license": 1, "file_name": "000000510095.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000510095.jpg", "height": 428, "width": 640, "date_captured": "2013-11-22 21:10:48", "flickr_url": "http://farm5.staticflickr.com/4073/4849673524_4f92d7482c_z.jpg", "id": 510095}, {"license": 1, "file_name": "000000128748.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000128748.jpg", "height": 640, "width": 491, "date_captured": "2013-11-22 22:45:17", "flickr_url": "http://farm4.staticflickr.com/3005/2847041132_3c83496b1b_z.jpg", "id": 128748}, {"license": 2, "file_name": "000000160864.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000160864.jpg", "height": 389, "width": 640, "date_captured": "2013-11-22 23:28:04", "flickr_url": "http://farm1.staticflickr.com/101/312980704_aa686d945f_z.jpg", "id": 160864}, {"license": 2, "file_name": "000000005586.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000005586.jpg", "height": 240, "width": 320, "date_captured": "2013-11-23 03:22:07", "flickr_url": "http://farm4.staticflickr.com/3488/3468455810_5e4d427675_z.jpg", "id": 5586}, {"license": 3, "file_name": "000000012670.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000012670.jpg", "height": 428, "width": 640, "date_captured": "2013-11-24 01:39:03", "flickr_url": "http://farm5.staticflickr.com/4144/5072551441_fd302a2c44_z.jpg", "id": 12670}, {"license": 3, "file_name": "000000508312.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000508312.jpg", "height": 333, "width": 500, "date_captured": "2013-11-24 05:05:47", "flickr_url": "http://farm1.staticflickr.com/233/520737230_518c93fedd_z.jpg", "id": 508312}, {"license": 5, "file_name": "000000537270.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000537270.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 06:47:18", "flickr_url": "http://farm4.staticflickr.com/3548/3507935487_6704d43ce0_z.jpg", "id": 537270}, {"license": 3, "file_name": "000000014038.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000014038.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 11:18:00", "flickr_url": "http://farm9.staticflickr.com/8507/8561635383_4bc0c679dd_z.jpg", "id": 14038}, {"license": 1, "file_name": "000000073326.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000073326.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 11:27:50", "flickr_url": "http://farm6.staticflickr.com/5183/5781517899_783a64ac16_z.jpg", "id": 73326}, {"license": 1, "file_name": "000000025386.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000025386.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 13:42:51", "flickr_url": "http://farm8.staticflickr.com/7323/9725958435_3359641442_z.jpg", "id": 25386}, {"license": 3, "file_name": "000000106563.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000106563.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 14:22:34", "flickr_url": "http://farm9.staticflickr.com/8402/9026524897_0b18f5f44d_z.jpg", "id": 106563}, {"license": 3, "file_name": "000000156292.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000156292.jpg", "height": 640, "width": 428, "date_captured": "2013-11-24 15:20:40", "flickr_url": "http://farm9.staticflickr.com/8032/7985089105_9dcf1a314e_z.jpg", "id": 156292}, {"license": 4, "file_name": "000000249129.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000249129.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 21:59:34", "flickr_url": "http://farm3.staticflickr.com/2400/2113224886_a95ec64e34_z.jpg", "id": 249129}, {"license": 6, "file_name": "000000338905.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000338905.jpg", "height": 360, "width": 480, "date_captured": "2013-11-25 08:34:52", "flickr_url": "http://farm4.staticflickr.com/3761/9330115496_b785dc4377_z.jpg", "id": 338905}, {"license": 1, "file_name": "000000512929.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000512929.jpg", "height": 612, "width": 612, "date_captured": "2013-11-25 14:14:10", "flickr_url": "http://farm6.staticflickr.com/5545/9731849395_11728c2826_z.jpg", "id": 512929}, {"license": 1, "file_name": "000000025986.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000025986.jpg", "height": 480, "width": 640, "date_captured": "2013-11-25 14:29:12", "flickr_url": "http://farm8.staticflickr.com/7318/9563604417_08503a1e8c_z.jpg", "id": 25986}, {"license": 1, "file_name": "000000032334.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000032334.jpg", "height": 480, "width": 640, "date_captured": "2013-11-25 19:40:23", "flickr_url": "http://farm3.staticflickr.com/2399/5762664054_c1757b7968_z.jpg", "id": 32334}, {"license": 2, "file_name": "000000022371.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000022371.jpg", "height": 282, "width": 425, "date_captured": "2013-11-14 16:35:24", "flickr_url": "http://farm7.staticflickr.com/6116/6384704645_766b01e066_z.jpg", "id": 22371}, {"license": 2, "file_name": "000000530836.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000530836.jpg", "height": 464, "width": 640, "date_captured": "2013-11-14 21:05:53", "flickr_url": "http://farm6.staticflickr.com/5093/5435573542_af97efcf7a_z.jpg", "id": 530836}, {"license": 6, "file_name": "000000437898.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000437898.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 22:09:45", "flickr_url": "http://farm8.staticflickr.com/7196/7119304291_359e14c64c_z.jpg", "id": 437898}, {"license": 3, "file_name": "000000295809.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000295809.jpg", "height": 512, "width": 640, "date_captured": "2013-11-14 23:04:45", "flickr_url": "http://farm7.staticflickr.com/6042/6349166356_12bfc7247a_z.jpg", "id": 295809}, {"license": 3, "file_name": "000000424162.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000424162.jpg", "height": 512, "width": 640, "date_captured": "2013-11-14 23:57:41", "flickr_url": "http://farm4.staticflickr.com/3088/5793281956_2a15b2559c_z.jpg", "id": 424162}, {"license": 3, "file_name": "000000212453.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000212453.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 00:35:42", "flickr_url": "http://farm5.staticflickr.com/4061/4695941443_793f77bba9_z.jpg", "id": 212453}, {"license": 5, "file_name": "000000287714.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000287714.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 02:39:19", "flickr_url": "http://farm9.staticflickr.com/8300/7810400652_ca6a6a78aa_z.jpg", "id": 287714}, {"license": 4, "file_name": "000000242287.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000242287.jpg", "height": 640, "width": 426, "date_captured": "2013-11-15 02:41:42", "flickr_url": "http://farm3.staticflickr.com/2626/4072194513_edb6acfb2b_z.jpg", "id": 242287}, {"license": 3, "file_name": "000000363784.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000363784.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 03:12:44", "flickr_url": "http://farm8.staticflickr.com/7154/6817472761_dc68c55706_z.jpg", "id": 363784}, {"license": 4, "file_name": "000000259830.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000259830.jpg", "height": 640, "width": 425, "date_captured": "2013-11-15 04:20:36", "flickr_url": "http://farm4.staticflickr.com/3412/3308735477_1db07df522_z.jpg", "id": 259830}, {"license": 4, "file_name": "000000262440.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000262440.jpg", "height": 640, "width": 400, "date_captured": "2013-11-15 04:45:08", "flickr_url": "http://farm6.staticflickr.com/5042/5366234675_cb353e8f8d_z.jpg", "id": 262440}, {"license": 3, "file_name": "000000492937.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000492937.jpg", "height": 612, "width": 612, "date_captured": "2013-11-15 04:55:56", "flickr_url": "http://farm9.staticflickr.com/8215/8413523703_f60308df73_z.jpg", "id": 492937}, {"license": 2, "file_name": "000000351362.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000351362.jpg", "height": 640, "width": 426, "date_captured": "2013-11-15 05:33:15", "flickr_url": "http://farm5.staticflickr.com/4126/5026193063_82858d3b84_z.jpg", "id": 351362}, {"license": 1, "file_name": "000000376284.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000376284.jpg", "height": 333, "width": 500, "date_captured": "2013-11-15 05:48:38", "flickr_url": "http://farm3.staticflickr.com/2056/1734699920_7e194ec591_z.jpg", "id": 376284}, {"license": 1, "file_name": "000000267903.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000267903.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 13:57:24", "flickr_url": "http://farm2.staticflickr.com/1375/5101929759_5dacb1b1cd_z.jpg", "id": 267903}, {"license": 1, "file_name": "000000484760.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000484760.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 14:37:33", "flickr_url": "http://farm5.staticflickr.com/4097/4778523652_eef79883e6_z.jpg", "id": 484760}, {"license": 1, "file_name": "000000003661.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000003661.jpg", "height": 384, "width": 640, "date_captured": "2013-11-15 15:06:35", "flickr_url": "http://farm6.staticflickr.com/5176/5515966919_7a8ab56d94_z.jpg", "id": 3661}, {"license": 1, "file_name": "000000210502.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000210502.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 16:24:59", "flickr_url": "http://farm1.staticflickr.com/179/441876983_b5dbf866a8_z.jpg", "id": 210502}, {"license": 1, "file_name": "000000376365.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000376365.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 16:35:01", "flickr_url": "http://farm1.staticflickr.com/8/10466051_d3744afab2_z.jpg", "id": 376365}, {"license": 5, "file_name": "000000570782.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000570782.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 16:48:48", "flickr_url": "http://farm2.staticflickr.com/1398/819859740_a26b28d33c_z.jpg", "id": 570782}, {"license": 2, "file_name": "000000572956.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000572956.jpg", "height": 333, "width": 500, "date_captured": "2013-11-15 17:45:30", "flickr_url": "http://farm4.staticflickr.com/3555/3407820955_c346fc9f90_z.jpg", "id": 572956}, {"license": 6, "file_name": "000000466835.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000466835.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 18:34:37", "flickr_url": "http://farm6.staticflickr.com/5289/5288490092_826c8e824a_z.jpg", "id": 466835}, {"license": 3, "file_name": "000000293245.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000293245.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 18:34:41", "flickr_url": "http://farm4.staticflickr.com/3754/9637047714_04ed159a19_z.jpg", "id": 293245}, {"license": 4, "file_name": "000000571264.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000571264.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 20:39:03", "flickr_url": "http://farm9.staticflickr.com/8012/6988704388_144a769946_z.jpg", "id": 571264}, {"license": 3, "file_name": "000000462756.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000462756.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 21:23:28", "flickr_url": "http://farm8.staticflickr.com/7161/6833576305_be6591440b_z.jpg", "id": 462756}, {"license": 4, "file_name": "000000183500.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000183500.jpg", "height": 430, "width": 640, "date_captured": "2013-11-16 02:00:49", "flickr_url": "http://farm8.staticflickr.com/7038/6872556356_e60411dca8_z.jpg", "id": 183500}, {"license": 2, "file_name": "000000109900.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000109900.jpg", "height": 478, "width": 640, "date_captured": "2013-11-16 02:19:53", "flickr_url": "http://farm8.staticflickr.com/7147/6541724635_02a7d2572f_z.jpg", "id": 109900}, {"license": 3, "file_name": "000000477441.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000477441.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 02:30:23", "flickr_url": "http://farm7.staticflickr.com/6231/6245923663_7cff2f3d97_z.jpg", "id": 477441}, {"license": 2, "file_name": "000000245102.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000245102.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 12:22:53", "flickr_url": "http://farm5.staticflickr.com/4022/4313534911_4b462806f2_z.jpg", "id": 245102}, {"license": 1, "file_name": "000000237984.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000237984.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 13:30:10", "flickr_url": "http://farm9.staticflickr.com/8149/7548413500_b8588a27ed_z.jpg", "id": 237984}, {"license": 2, "file_name": "000000137950.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000137950.jpg", "height": 415, "width": 640, "date_captured": "2013-11-16 14:25:20", "flickr_url": "http://farm9.staticflickr.com/8316/8071805283_e6071463d7_z.jpg", "id": 137950}, {"license": 1, "file_name": "000000290592.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000290592.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 17:57:24", "flickr_url": "http://farm8.staticflickr.com/7245/7027103163_ac1b3446f5_z.jpg", "id": 290592}, {"license": 1, "file_name": "000000307074.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000307074.jpg", "height": 333, "width": 500, "date_captured": "2013-11-16 19:12:58", "flickr_url": "http://farm4.staticflickr.com/3482/3753332466_b299b79328_z.jpg", "id": 307074}, {"license": 3, "file_name": "000000110282.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000110282.jpg", "height": 418, "width": 640, "date_captured": "2013-11-16 19:28:46", "flickr_url": "http://farm1.staticflickr.com/58/158231810_962441b13c_z.jpg", "id": 110282}, {"license": 1, "file_name": "000000395575.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000395575.jpg", "height": 339, "width": 500, "date_captured": "2013-11-16 20:25:02", "flickr_url": "http://farm3.staticflickr.com/2597/3951776411_a059657746_z.jpg", "id": 395575}, {"license": 1, "file_name": "000000211674.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000211674.jpg", "height": 406, "width": 640, "date_captured": "2013-11-16 21:28:44", "flickr_url": "http://farm8.staticflickr.com/7440/9185873300_048066a2e1_z.jpg", "id": 211674}, {"license": 4, "file_name": "000000338191.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000338191.jpg", "height": 640, "width": 635, "date_captured": "2013-11-16 22:36:01", "flickr_url": "http://farm8.staticflickr.com/7045/6968461801_fd2b6cd57b_z.jpg", "id": 338191}, {"license": 4, "file_name": "000000028993.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000028993.jpg", "height": 612, "width": 612, "date_captured": "2013-11-16 22:40:06", "flickr_url": "http://farm6.staticflickr.com/5006/5355925412_5e33918131_z.jpg", "id": 28993}, {"license": 5, "file_name": "000000124798.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000124798.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 23:31:18", "flickr_url": "http://farm9.staticflickr.com/8090/8444499449_ec1094a7e2_z.jpg", "id": 124798}, {"license": 6, "file_name": "000000443969.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000443969.jpg", "height": 612, "width": 612, "date_captured": "2013-11-16 23:41:59", "flickr_url": "http://farm9.staticflickr.com/8537/8687316814_4e4888b6de_z.jpg", "id": 443969}, {"license": 1, "file_name": "000000428562.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000428562.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 00:34:08", "flickr_url": "http://farm5.staticflickr.com/4084/4993756554_a3e8cc7e59_z.jpg", "id": 428562}, {"license": 2, "file_name": "000000502336.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000502336.jpg", "height": 431, "width": 640, "date_captured": "2013-11-17 01:51:42", "flickr_url": "http://farm9.staticflickr.com/8525/8478773710_b1a28d23a8_z.jpg", "id": 502336}, {"license": 1, "file_name": "000000297681.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000297681.jpg", "height": 433, "width": 640, "date_captured": "2013-11-17 02:17:38", "flickr_url": "http://farm5.staticflickr.com/4079/4881539780_02c394dd34_z.jpg", "id": 297681}, {"license": 3, "file_name": "000000025593.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000025593.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 04:17:20", "flickr_url": "http://farm4.staticflickr.com/3064/5871816572_8e1100e766_z.jpg", "id": 25593}, {"license": 1, "file_name": "000000409268.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000409268.jpg", "height": 640, "width": 511, "date_captured": "2013-11-17 04:24:07", "flickr_url": "http://farm4.staticflickr.com/3025/2521929793_1dff2ec4a1_z.jpg", "id": 409268}, {"license": 4, "file_name": "000000001268.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000001268.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 05:57:24", "flickr_url": "http://farm6.staticflickr.com/5454/9413846304_881d5e5c3b_z.jpg", "id": 1268}, {"license": 2, "file_name": "000000227399.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000227399.jpg", "height": 482, "width": 640, "date_captured": "2013-11-17 08:02:36", "flickr_url": "http://farm4.staticflickr.com/3733/9412083734_fca5783d1a_z.jpg", "id": 227399}, {"license": 2, "file_name": "000000546659.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000546659.jpg", "height": 640, "width": 420, "date_captured": "2013-11-17 08:07:26", "flickr_url": "http://farm4.staticflickr.com/3702/9364497257_c4ed1e3f3c_z.jpg", "id": 546659}, {"license": 2, "file_name": "000000303863.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000303863.jpg", "height": 431, "width": 640, "date_captured": "2013-11-17 08:07:35", "flickr_url": "http://farm8.staticflickr.com/7412/9364509095_e650051f77_z.jpg", "id": 303863}, {"license": 3, "file_name": "000000571008.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000571008.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 08:26:09", "flickr_url": "http://farm3.staticflickr.com/2118/2191889756_821d8713f4_z.jpg", "id": 571008}, {"license": 4, "file_name": "000000186624.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000186624.jpg", "height": 553, "width": 640, "date_captured": "2013-11-17 08:31:13", "flickr_url": "http://farm6.staticflickr.com/5535/9272267604_d034ab2f0d_z.jpg", "id": 186624}, {"license": 2, "file_name": "000000572303.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000572303.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 09:09:06", "flickr_url": "http://farm3.staticflickr.com/2845/9049661789_068636915c_z.jpg", "id": 572303}, {"license": 2, "file_name": "000000283038.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000283038.jpg", "height": 281, "width": 500, "date_captured": "2013-11-17 10:08:48", "flickr_url": "http://farm1.staticflickr.com/68/218713640_05adea9bc3_z.jpg", "id": 283038}, {"license": 3, "file_name": "000000230450.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000230450.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 10:41:41", "flickr_url": "http://farm4.staticflickr.com/3775/9176672441_d34d7bd0f8_z.jpg", "id": 230450}, {"license": 5, "file_name": "000000568147.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000568147.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 10:47:22", "flickr_url": "http://farm3.staticflickr.com/2473/3611694603_658607348e_z.jpg", "id": 568147}, {"license": 4, "file_name": "000000246454.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000246454.jpg", "height": 640, "width": 640, "date_captured": "2013-11-17 16:30:41", "flickr_url": "http://farm4.staticflickr.com/3067/5758262175_6b35988fbd_z.jpg", "id": 246454}, {"license": 1, "file_name": "000000401446.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000401446.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 16:37:02", "flickr_url": "http://farm9.staticflickr.com/8226/8594006748_3b25699ef0_z.jpg", "id": 401446}, {"license": 1, "file_name": "000000432468.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000432468.jpg", "height": 640, "width": 427, "date_captured": "2013-11-17 17:21:32", "flickr_url": "http://farm3.staticflickr.com/2443/3939494379_8da2894286_z.jpg", "id": 432468}, {"license": 3, "file_name": "000000161609.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000161609.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 17:54:25", "flickr_url": "http://farm6.staticflickr.com/5201/5205658170_92d676682f_z.jpg", "id": 161609}, {"license": 3, "file_name": "000000329319.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000329319.jpg", "height": 640, "width": 428, "date_captured": "2013-11-17 19:12:38", "flickr_url": "http://farm4.staticflickr.com/3292/2933666867_7ff0107e00_z.jpg", "id": 329319}, {"license": 3, "file_name": "000000398810.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000398810.jpg", "height": 500, "width": 500, "date_captured": "2013-11-17 20:43:47", "flickr_url": "http://farm4.staticflickr.com/3166/2876895878_b65e534505_z.jpg", "id": 398810}, {"license": 1, "file_name": "000000174231.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000174231.jpg", "height": 500, "width": 375, "date_captured": "2013-11-17 21:56:38", "flickr_url": "http://farm4.staticflickr.com/3084/3095038381_edcd831504_z.jpg", "id": 174231}, {"license": 3, "file_name": "000000387148.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000387148.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 00:19:31", "flickr_url": "http://farm5.staticflickr.com/4095/5610365236_faa0e09362_z.jpg", "id": 387148}, {"license": 3, "file_name": "000000364297.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000364297.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 00:38:21", "flickr_url": "http://farm1.staticflickr.com/97/206188566_03a950711c_z.jpg", "id": 364297}, {"license": 5, "file_name": "000000209972.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000209972.jpg", "height": 299, "width": 640, "date_captured": "2013-11-18 00:51:50", "flickr_url": "http://farm1.staticflickr.com/156/434015025_5cbb78726c_z.jpg", "id": 209972}, {"license": 3, "file_name": "000000270883.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000270883.jpg", "height": 393, "width": 640, "date_captured": "2013-11-18 01:05:09", "flickr_url": "http://farm4.staticflickr.com/3518/3815521864_a7473908c4_z.jpg", "id": 270883}, {"license": 3, "file_name": "000000379533.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000379533.jpg", "height": 640, "width": 476, "date_captured": "2013-11-18 01:14:03", "flickr_url": "http://farm2.staticflickr.com/1425/1079423009_6ecaf263f9_z.jpg", "id": 379533}, {"license": 4, "file_name": "000000245915.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000245915.jpg", "height": 333, "width": 500, "date_captured": "2013-11-18 02:53:27", "flickr_url": "http://farm1.staticflickr.com/88/211747310_f58a16631e_z.jpg", "id": 245915}, {"license": 2, "file_name": "000000114884.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000114884.jpg", "height": 329, "width": 500, "date_captured": "2013-11-18 06:30:33", "flickr_url": "http://farm2.staticflickr.com/1214/621731859_2b3692c424_z.jpg", "id": 114884}, {"license": 3, "file_name": "000000155571.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000155571.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 06:41:29", "flickr_url": "http://farm7.staticflickr.com/6234/6297879282_ee0d0743f4_z.jpg", "id": 155571}, {"license": 4, "file_name": "000000347456.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000347456.jpg", "height": 309, "width": 640, "date_captured": "2013-11-18 07:20:46", "flickr_url": "http://farm6.staticflickr.com/5308/5885294408_015bb70d70_z.jpg", "id": 347456}, {"license": 2, "file_name": "000000263860.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000263860.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 08:17:53", "flickr_url": "http://farm6.staticflickr.com/5045/5325266066_c61565122e_z.jpg", "id": 263860}, {"license": 3, "file_name": "000000346232.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000346232.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 10:50:55", "flickr_url": "http://farm7.staticflickr.com/6027/5934273798_7f18a01aa8_z.jpg", "id": 346232}, {"license": 1, "file_name": "000000085665.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000085665.jpg", "height": 640, "width": 506, "date_captured": "2013-11-18 11:03:07", "flickr_url": "http://farm8.staticflickr.com/7185/6985811447_3cc6c7f859_z.jpg", "id": 85665}, {"license": 3, "file_name": "000000377239.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000377239.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 11:22:03", "flickr_url": "http://farm7.staticflickr.com/6013/5931259728_14d4a85ccf_z.jpg", "id": 377239}, {"license": 3, "file_name": "000000047819.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000047819.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 11:35:47", "flickr_url": "http://farm1.staticflickr.com/185/406856735_3f6f005234_z.jpg", "id": 47819}, {"license": 4, "file_name": "000000132622.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000132622.jpg", "height": 512, "width": 640, "date_captured": "2013-11-18 12:01:54", "flickr_url": "http://farm8.staticflickr.com/7065/6968121996_602ffd7113_z.jpg", "id": 132622}, {"license": 5, "file_name": "000000222317.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000222317.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 13:10:20", "flickr_url": "http://farm4.staticflickr.com/3009/3098419724_89827f6fd7_z.jpg", "id": 222317}, {"license": 5, "file_name": "000000338901.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000338901.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 13:10:38", "flickr_url": "http://farm4.staticflickr.com/3220/3098425884_0dfc6b86d5_z.jpg", "id": 338901}, {"license": 3, "file_name": "000000298738.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000298738.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 13:21:42", "flickr_url": "http://farm9.staticflickr.com/8136/8907418538_f3c88fc363_z.jpg", "id": 298738}, {"license": 3, "file_name": "000000273642.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000273642.jpg", "height": 500, "width": 375, "date_captured": "2013-11-18 13:34:38", "flickr_url": "http://farm3.staticflickr.com/2788/4118370331_275d96546d_z.jpg", "id": 273642}, {"license": 2, "file_name": "000000170278.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000170278.jpg", "height": 504, "width": 640, "date_captured": "2013-11-18 14:09:01", "flickr_url": "http://farm1.staticflickr.com/166/373569647_8a29f9fbc5_z.jpg", "id": 170278}, {"license": 4, "file_name": "000000020247.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000020247.jpg", "height": 457, "width": 640, "date_captured": "2013-11-18 14:33:42", "flickr_url": "http://farm8.staticflickr.com/7027/6473127891_50c1ca2c03_z.jpg", "id": 20247}, {"license": 5, "file_name": "000000325991.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000325991.jpg", "height": 334, "width": 500, "date_captured": "2013-11-18 16:34:35", "flickr_url": "http://farm4.staticflickr.com/3639/3419012138_cfdf55b431_z.jpg", "id": 325991}, {"license": 5, "file_name": "000000102805.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000102805.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 18:26:44", "flickr_url": "http://farm7.staticflickr.com/6205/6101493857_573faccfab_z.jpg", "id": 102805}, {"license": 3, "file_name": "000000034452.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000034452.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 18:33:20", "flickr_url": "http://farm3.staticflickr.com/2012/2449601143_d5a7c2742b_z.jpg", "id": 34452}, {"license": 3, "file_name": "000000356968.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000356968.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 23:11:59", "flickr_url": "http://farm5.staticflickr.com/4040/5079168442_a06e49f57a_z.jpg", "id": 356968}, {"license": 3, "file_name": "000000015956.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000015956.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 23:12:04", "flickr_url": "http://farm5.staticflickr.com/4057/5078510649_c131c12862_z.jpg", "id": 15956}, {"license": 2, "file_name": "000000098633.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000098633.jpg", "height": 640, "width": 428, "date_captured": "2013-11-19 17:53:21", "flickr_url": "http://farm4.staticflickr.com/3643/3604833749_f2b1bf6dbf_z.jpg", "id": 98633}, {"license": 1, "file_name": "000000196442.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000196442.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 18:12:44", "flickr_url": "http://farm4.staticflickr.com/3556/3419000752_3284fd11c8_z.jpg", "id": 196442}, {"license": 1, "file_name": "000000378515.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000378515.jpg", "height": 640, "width": 425, "date_captured": "2013-11-19 19:32:09", "flickr_url": "http://farm5.staticflickr.com/4042/4551169640_a8d9d37306_z.jpg", "id": 378515}, {"license": 1, "file_name": "000000535253.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000535253.jpg", "height": 612, "width": 612, "date_captured": "2013-11-19 19:56:43", "flickr_url": "http://farm3.staticflickr.com/2834/8912888262_5956908630_z.jpg", "id": 535253}, {"license": 1, "file_name": "000000084031.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000084031.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 19:59:44", "flickr_url": "http://farm3.staticflickr.com/2531/3883566974_7c365cf46a_z.jpg", "id": 84031}, {"license": 1, "file_name": "000000190853.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000190853.jpg", "height": 640, "width": 383, "date_captured": "2013-11-19 20:08:27", "flickr_url": "http://farm9.staticflickr.com/8089/8455217783_c38833eb63_z.jpg", "id": 190853}, {"license": 1, "file_name": "000000410934.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000410934.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 21:25:44", "flickr_url": "http://farm6.staticflickr.com/5005/5373623366_cca735dd7e_z.jpg", "id": 410934}, {"license": 1, "file_name": "000000236308.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000236308.jpg", "height": 368, "width": 640, "date_captured": "2013-11-19 22:05:20", "flickr_url": "http://farm6.staticflickr.com/5303/5646052605_4b899c7c09_z.jpg", "id": 236308}, {"license": 6, "file_name": "000000362520.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000362520.jpg", "height": 640, "width": 424, "date_captured": "2013-11-19 23:33:27", "flickr_url": "http://farm7.staticflickr.com/6191/6067553297_c583693bcc_z.jpg", "id": 362520}, {"license": 3, "file_name": "000000463527.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000463527.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 00:48:42", "flickr_url": "http://farm3.staticflickr.com/2547/4100676417_25799a0a4e_z.jpg", "id": 463527}, {"license": 1, "file_name": "000000295138.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000295138.jpg", "height": 423, "width": 640, "date_captured": "2013-11-20 01:37:08", "flickr_url": "http://farm7.staticflickr.com/6075/6125332114_cb3b074297_z.jpg", "id": 295138}, {"license": 1, "file_name": "000000438907.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000438907.jpg", "height": 640, "width": 458, "date_captured": "2013-11-20 04:37:52", "flickr_url": "http://farm6.staticflickr.com/5128/5315470806_56f32be128_z.jpg", "id": 438907}, {"license": 1, "file_name": "000000245320.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000245320.jpg", "height": 640, "width": 424, "date_captured": "2013-11-20 07:57:01", "flickr_url": "http://farm4.staticflickr.com/3660/3603969527_fef85e1577_z.jpg", "id": 245320}, {"license": 4, "file_name": "000000416885.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000416885.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 12:07:45", "flickr_url": "http://farm4.staticflickr.com/3040/2791132570_faa5072ab9_z.jpg", "id": 416885}, {"license": 6, "file_name": "000000187585.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000187585.jpg", "height": 436, "width": 640, "date_captured": "2013-11-20 12:22:11", "flickr_url": "http://farm4.staticflickr.com/3077/2593450239_706469f18d_z.jpg", "id": 187585}, {"license": 1, "file_name": "000000034417.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000034417.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 16:22:18", "flickr_url": "http://farm1.staticflickr.com/26/67445810_61fd9a9a0f_z.jpg", "id": 34417}, {"license": 1, "file_name": "000000553221.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000553221.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 16:28:45", "flickr_url": "http://farm8.staticflickr.com/7061/6957985305_0ed079c03e_z.jpg", "id": 553221}, {"license": 2, "file_name": "000000344795.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000344795.jpg", "height": 361, "width": 640, "date_captured": "2013-11-20 18:20:12", "flickr_url": "http://farm8.staticflickr.com/7280/7517536170_7b87b4100f_z.jpg", "id": 344795}, {"license": 3, "file_name": "000000300276.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000300276.jpg", "height": 359, "width": 640, "date_captured": "2013-11-20 19:42:49", "flickr_url": "http://farm8.staticflickr.com/7320/10013591215_891cd2729c_z.jpg", "id": 300276}, {"license": 1, "file_name": "000000189451.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000189451.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 21:51:33", "flickr_url": "http://farm9.staticflickr.com/8346/8239881569_17822261c4_z.jpg", "id": 189451}, {"license": 6, "file_name": "000000025228.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000025228.jpg", "height": 436, "width": 640, "date_captured": "2013-11-20 22:53:23", "flickr_url": "http://farm7.staticflickr.com/6063/6051722275_c8b649b816_z.jpg", "id": 25228}, {"license": 4, "file_name": "000000193674.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000193674.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 00:13:02", "flickr_url": "http://farm6.staticflickr.com/5170/5240208640_839ede4a38_z.jpg", "id": 193674}, {"license": 2, "file_name": "000000027972.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000027972.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 00:14:36", "flickr_url": "http://farm5.staticflickr.com/4034/5161645674_0ffbdc16ce_z.jpg", "id": 27972}, {"license": 1, "file_name": "000000265777.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000265777.jpg", "height": 612, "width": 612, "date_captured": "2013-11-21 01:28:03", "flickr_url": "http://farm4.staticflickr.com/3820/9108526928_318582cc7f_z.jpg", "id": 265777}, {"license": 2, "file_name": "000000441491.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000441491.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 04:23:20", "flickr_url": "http://farm6.staticflickr.com/5175/5559005188_b1e31e3f9b_z.jpg", "id": 441491}, {"license": 1, "file_name": "000000372349.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000372349.jpg", "height": 437, "width": 640, "date_captured": "2013-11-21 19:22:26", "flickr_url": "http://farm5.staticflickr.com/4039/4586077832_ca6b7b9f37_z.jpg", "id": 372349}, {"license": 1, "file_name": "000000455937.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000455937.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 22:59:28", "flickr_url": "http://farm6.staticflickr.com/5024/5642140110_5beb8ef4b4_z.jpg", "id": 455937}, {"license": 3, "file_name": "000000182162.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000182162.jpg", "height": 425, "width": 640, "date_captured": "2013-11-21 23:08:08", "flickr_url": "http://farm6.staticflickr.com/5077/5875052890_c8ecd3f044_z.jpg", "id": 182162}, {"license": 1, "file_name": "000000471893.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000471893.jpg", "height": 442, "width": 640, "date_captured": "2013-11-21 23:50:51", "flickr_url": "http://farm1.staticflickr.com/166/392305997_3337ec360a_z.jpg", "id": 471893}, {"license": 3, "file_name": "000000543581.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000543581.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 00:44:29", "flickr_url": "http://farm3.staticflickr.com/2756/4415559538_f036f9ff02_z.jpg", "id": 543581}, {"license": 1, "file_name": "000000115870.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000115870.jpg", "height": 426, "width": 640, "date_captured": "2013-11-22 01:30:55", "flickr_url": "http://farm3.staticflickr.com/2743/4125896192_22e7b42ff9_z.jpg", "id": 115870}, {"license": 3, "file_name": "000000189475.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000189475.jpg", "height": 375, "width": 500, "date_captured": "2013-11-23 04:26:42", "flickr_url": "http://farm4.staticflickr.com/3473/3758038114_a3a54862a3_z.jpg", "id": 189475}, {"license": 4, "file_name": "000000520871.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000520871.jpg", "height": 425, "width": 640, "date_captured": "2013-11-23 04:38:08", "flickr_url": "http://farm3.staticflickr.com/2548/3711888643_b930d29ec8_z.jpg", "id": 520871}, {"license": 1, "file_name": "000000166478.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000166478.jpg", "height": 426, "width": 640, "date_captured": "2013-11-23 11:35:48", "flickr_url": "http://farm3.staticflickr.com/2225/2090410615_bcaae51696_z.jpg", "id": 166478}, {"license": 1, "file_name": "000000136600.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000136600.jpg", "height": 457, "width": 640, "date_captured": "2013-11-23 20:02:09", "flickr_url": "http://farm9.staticflickr.com/8388/8467506866_efa631c5d0_z.jpg", "id": 136600}, {"license": 3, "file_name": "000000195918.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000195918.jpg", "height": 428, "width": 640, "date_captured": "2013-11-23 20:18:41", "flickr_url": "http://farm5.staticflickr.com/4030/4301032236_f1bb979618_z.jpg", "id": 195918}, {"license": 1, "file_name": "000000428280.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000428280.jpg", "height": 333, "width": 500, "date_captured": "2013-11-24 00:53:50", "flickr_url": "http://farm2.staticflickr.com/1067/539441117_9eb9d926b6_z.jpg", "id": 428280}, {"license": 4, "file_name": "000000248631.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000248631.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 02:04:53", "flickr_url": "http://farm8.staticflickr.com/7209/6856333555_8988fcece0_z.jpg", "id": 248631}, {"license": 5, "file_name": "000000355610.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000355610.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 02:32:16", "flickr_url": "http://farm3.staticflickr.com/2261/2090506037_63131f55da_z.jpg", "id": 355610}, {"license": 1, "file_name": "000000280918.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000280918.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 06:06:08", "flickr_url": "http://farm3.staticflickr.com/2616/4230037345_44aa582d51_z.jpg", "id": 280918}, {"license": 5, "file_name": "000000581317.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000581317.jpg", "height": 354, "width": 640, "date_captured": "2013-11-24 07:57:55", "flickr_url": "http://farm1.staticflickr.com/14/19721466_b561e5955f_z.jpg", "id": 581317}, {"license": 2, "file_name": "000000512330.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000512330.jpg", "height": 640, "width": 426, "date_captured": "2013-11-24 11:12:26", "flickr_url": "http://farm4.staticflickr.com/3052/3004220244_392298df6c_z.jpg", "id": 512330}, {"license": 1, "file_name": "000000243344.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000243344.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 11:21:07", "flickr_url": "http://farm9.staticflickr.com/8108/8469020409_174f2eca69_z.jpg", "id": 243344}, {"license": 1, "file_name": "000000120572.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000120572.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 11:58:08", "flickr_url": "http://farm6.staticflickr.com/5073/5913663192_016a10cced_z.jpg", "id": 120572}, {"license": 5, "file_name": "000000284764.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000284764.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 22:23:37", "flickr_url": "http://farm8.staticflickr.com/7332/9759747051_a14de15d61_z.jpg", "id": 284764}, {"license": 1, "file_name": "000000157767.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000157767.jpg", "height": 427, "width": 640, "date_captured": "2013-11-25 08:32:54", "flickr_url": "http://farm4.staticflickr.com/3806/9351236410_7fea114532_z.jpg", "id": 157767}, {"license": 3, "file_name": "000000268378.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000268378.jpg", "height": 359, "width": 640, "date_captured": "2013-11-25 14:33:27", "flickr_url": "http://farm4.staticflickr.com/3798/9456957204_857700e338_z.jpg", "id": 268378}, {"license": 5, "file_name": "000000156278.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000156278.jpg", "height": 425, "width": 640, "date_captured": "2013-11-14 16:25:54", "flickr_url": "http://farm8.staticflickr.com/7001/6590444993_42ee1edef5_z.jpg", "id": 156278}, {"license": 4, "file_name": "000000170099.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000170099.jpg", "height": 478, "width": 640, "date_captured": "2013-11-14 16:33:50", "flickr_url": "http://farm3.staticflickr.com/2280/1812763231_06381c802c_z.jpg", "id": 170099}, {"license": 4, "file_name": "000000529568.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000529568.jpg", "height": 640, "width": 480, "date_captured": "2013-11-14 19:05:44", "flickr_url": "http://farm9.staticflickr.com/8098/8565573049_cf913235b6_z.jpg", "id": 529568}, {"license": 2, "file_name": "000000575970.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000575970.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 20:54:29", "flickr_url": "http://farm9.staticflickr.com/8432/7721518318_c0f582792d_z.jpg", "id": 575970}, {"license": 1, "file_name": "000000241602.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000241602.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 02:29:57", "flickr_url": "http://farm8.staticflickr.com/7254/7697389148_314719bcaf_z.jpg", "id": 241602}, {"license": 3, "file_name": "000000570834.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000570834.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 04:49:40", "flickr_url": "http://farm3.staticflickr.com/2843/9494785038_b71553cac6_z.jpg", "id": 570834}, {"license": 3, "file_name": "000000292997.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000292997.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 05:16:23", "flickr_url": "http://farm1.staticflickr.com/119/286192704_ced162a262_z.jpg", "id": 292997}, {"license": 1, "file_name": "000000240940.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000240940.jpg", "height": 500, "width": 357, "date_captured": "2013-11-15 07:00:47", "flickr_url": "http://farm1.staticflickr.com/151/401267091_bb356fb2f3_z.jpg", "id": 240940}, {"license": 2, "file_name": "000000474095.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000474095.jpg", "height": 500, "width": 333, "date_captured": "2013-11-15 13:34:15", "flickr_url": "http://farm1.staticflickr.com/99/297192853_1dbd15ea29_z.jpg", "id": 474095}, {"license": 2, "file_name": "000000032817.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000032817.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 14:20:07", "flickr_url": "http://farm3.staticflickr.com/2019/2124337864_e8ae969bb8_z.jpg", "id": 32817}, {"license": 4, "file_name": "000000203389.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000203389.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 17:17:36", "flickr_url": "http://farm6.staticflickr.com/5257/5429775787_db93d0b30f_z.jpg", "id": 203389}, {"license": 2, "file_name": "000000204186.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000204186.jpg", "height": 513, "width": 640, "date_captured": "2013-11-15 19:49:30", "flickr_url": "http://farm9.staticflickr.com/8167/7473704002_8fa474ce51_z.jpg", "id": 204186}, {"license": 3, "file_name": "000000222118.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000222118.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 21:14:56", "flickr_url": "http://farm5.staticflickr.com/4021/4410946215_0ff4473414_z.jpg", "id": 222118}, {"license": 1, "file_name": "000000509260.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000509260.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 23:05:24", "flickr_url": "http://farm1.staticflickr.com/4/4491643_caf29e6ff2_z.jpg", "id": 509260}, {"license": 3, "file_name": "000000239041.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000239041.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 23:26:20", "flickr_url": "http://farm8.staticflickr.com/7140/7528204334_b0b5e9dc86_z.jpg", "id": 239041}, {"license": 3, "file_name": "000000090631.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000090631.jpg", "height": 389, "width": 640, "date_captured": "2013-11-16 03:19:24", "flickr_url": "http://farm6.staticflickr.com/5267/5850601092_5b2e14d702_z.jpg", "id": 90631}, {"license": 3, "file_name": "000000187745.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000187745.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 12:55:08", "flickr_url": "http://farm9.staticflickr.com/8242/8514658405_f8d4f4b66c_z.jpg", "id": 187745}, {"license": 2, "file_name": "000000235252.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000235252.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 14:11:27", "flickr_url": "http://farm3.staticflickr.com/2385/1937649851_3a8627ecba_z.jpg", "id": 235252}, {"license": 1, "file_name": "000000452891.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000452891.jpg", "height": 640, "width": 478, "date_captured": "2013-11-16 15:13:31", "flickr_url": "http://farm6.staticflickr.com/5248/5338593213_ff3e643720_z.jpg", "id": 452891}, {"license": 6, "file_name": "000000387387.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000387387.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 15:40:29", "flickr_url": "http://farm3.staticflickr.com/2795/5770078780_a76594938f_z.jpg", "id": 387387}, {"license": 3, "file_name": "000000253002.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000253002.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 17:22:14", "flickr_url": "http://farm8.staticflickr.com/7213/7360136074_1320db41dc_z.jpg", "id": 253002}, {"license": 3, "file_name": "000000198928.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000198928.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 18:05:27", "flickr_url": "http://farm1.staticflickr.com/32/54045492_15d5421284_z.jpg", "id": 198928}, {"license": 5, "file_name": "000000364322.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000364322.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 18:36:36", "flickr_url": "http://farm9.staticflickr.com/8253/8665048529_079f677dfc_z.jpg", "id": 364322}, {"license": 1, "file_name": "000000343496.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000343496.jpg", "height": 393, "width": 640, "date_captured": "2013-11-16 19:53:03", "flickr_url": "http://farm3.staticflickr.com/2466/3637579838_469e071af2_z.jpg", "id": 343496}, {"license": 1, "file_name": "000000147338.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000147338.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 22:52:44", "flickr_url": "http://farm3.staticflickr.com/2503/3725350954_8d20f6769b_z.jpg", "id": 147338}, {"license": 5, "file_name": "000000117374.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000117374.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 23:13:48", "flickr_url": "http://farm9.staticflickr.com/8468/8144608869_655919484a_z.jpg", "id": 117374}, {"license": 3, "file_name": "000000082846.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000082846.jpg", "height": 454, "width": 640, "date_captured": "2013-11-17 00:26:24", "flickr_url": "http://farm9.staticflickr.com/8481/8187720838_8ff0c02dbd_z.jpg", "id": 82846}, {"license": 1, "file_name": "000000276720.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000276720.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 01:48:40", "flickr_url": "http://farm3.staticflickr.com/2388/1575897363_71e6d76624_z.jpg", "id": 276720}, {"license": 3, "file_name": "000000046497.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000046497.jpg", "height": 332, "width": 500, "date_captured": "2013-11-17 03:03:13", "flickr_url": "http://farm1.staticflickr.com/52/139274926_d670c8aa26_z.jpg", "id": 46497}, {"license": 1, "file_name": "000000333697.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000333697.jpg", "height": 640, "width": 426, "date_captured": "2013-11-17 03:43:19", "flickr_url": "http://farm9.staticflickr.com/8004/7662396500_1405081e36_z.jpg", "id": 333697}, {"license": 3, "file_name": "000000011615.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000011615.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 07:15:52", "flickr_url": "http://farm1.staticflickr.com/47/151953288_f6b6a50f78_z.jpg", "id": 11615}, {"license": 3, "file_name": "000000275727.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000275727.jpg", "height": 475, "width": 640, "date_captured": "2013-11-17 08:19:46", "flickr_url": "http://farm8.staticflickr.com/7285/9316961041_0a0e04fedf_z.jpg", "id": 275727}, {"license": 3, "file_name": "000000241297.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000241297.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 08:43:09", "flickr_url": "http://farm6.staticflickr.com/5453/9221199736_3b214ddeb0_z.jpg", "id": 241297}, {"license": 3, "file_name": "000000323751.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000323751.jpg", "height": 424, "width": 640, "date_captured": "2013-11-17 08:56:45", "flickr_url": "http://farm6.staticflickr.com/5548/9130681725_51e6ee49ce_z.jpg", "id": 323751}, {"license": 3, "file_name": "000000014380.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000014380.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 09:54:28", "flickr_url": "http://farm6.staticflickr.com/5463/8750190611_325720f243_z.jpg", "id": 14380}, {"license": 1, "file_name": "000000368038.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000368038.jpg", "height": 317, "width": 640, "date_captured": "2013-11-17 10:38:29", "flickr_url": "http://farm9.staticflickr.com/8261/8664019372_6159bf2535_z.jpg", "id": 368038}, {"license": 3, "file_name": "000000477623.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000477623.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 11:06:23", "flickr_url": "http://farm9.staticflickr.com/8110/8606428228_933c1303c5_z.jpg", "id": 477623}, {"license": 2, "file_name": "000000458702.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000458702.jpg", "height": 640, "width": 427, "date_captured": "2013-11-17 11:23:24", "flickr_url": "http://farm2.staticflickr.com/1340/5118155104_e56d49876e_z.jpg", "id": 458702}, {"license": 4, "file_name": "000000114907.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000114907.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 16:34:23", "flickr_url": "http://farm9.staticflickr.com/8303/7825237468_9345ce9a8e_z.jpg", "id": 114907}, {"license": 5, "file_name": "000000133778.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000133778.jpg", "height": 483, "width": 640, "date_captured": "2013-11-17 18:52:02", "flickr_url": "http://farm9.staticflickr.com/8481/8196665872_54969ddafa_z.jpg", "id": 133778}, {"license": 3, "file_name": "000000311392.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000311392.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 21:04:09", "flickr_url": "http://farm9.staticflickr.com/8238/8518410492_0ea0a0a810_z.jpg", "id": 311392}, {"license": 4, "file_name": "000000520531.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000520531.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 21:20:40", "flickr_url": "http://farm5.staticflickr.com/4062/4340091694_248849448e_z.jpg", "id": 520531}, {"license": 3, "file_name": "000000078420.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000078420.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 21:59:41", "flickr_url": "http://farm1.staticflickr.com/48/140268688_947e2bcc96_z.jpg", "id": 78420}, {"license": 1, "file_name": "000000224093.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000224093.jpg", "height": 316, "width": 640, "date_captured": "2013-11-18 00:26:44", "flickr_url": "http://farm6.staticflickr.com/5215/5457144236_071ce23e18_z.jpg", "id": 224093}, {"license": 2, "file_name": "000000097230.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000097230.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 01:00:06", "flickr_url": "http://farm5.staticflickr.com/4057/4639990283_c4a2364582_z.jpg", "id": 97230}, {"license": 2, "file_name": "000000330369.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000330369.jpg", "height": 335, "width": 500, "date_captured": "2013-11-18 01:58:19", "flickr_url": "http://farm4.staticflickr.com/3416/3486587156_7c835722b4_z.jpg", "id": 330369}, {"license": 1, "file_name": "000000271116.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000271116.jpg", "height": 424, "width": 640, "date_captured": "2013-11-18 02:07:29", "flickr_url": "http://farm9.staticflickr.com/8073/8362677146_f6b59daa54_z.jpg", "id": 271116}, {"license": 3, "file_name": "000000440171.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000440171.jpg", "height": 640, "width": 411, "date_captured": "2013-11-18 02:54:30", "flickr_url": "http://farm3.staticflickr.com/2593/4007152723_7a326178f4_z.jpg", "id": 440171}, {"license": 3, "file_name": "000000166768.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000166768.jpg", "height": 640, "width": 426, "date_captured": "2013-11-18 03:10:57", "flickr_url": "http://farm8.staticflickr.com/7004/6428309559_13857ae323_z.jpg", "id": 166768}, {"license": 1, "file_name": "000000514979.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000514979.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 04:03:24", "flickr_url": "http://farm9.staticflickr.com/8402/8986210746_5f847aa7f3_z.jpg", "id": 514979}, {"license": 3, "file_name": "000000413689.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000413689.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 05:02:59", "flickr_url": "http://farm8.staticflickr.com/7154/6506781427_965a5f2bc6_z.jpg", "id": 413689}, {"license": 1, "file_name": "000000053624.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000053624.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 07:15:14", "flickr_url": "http://farm6.staticflickr.com/5265/5894789718_b0562365df_z.jpg", "id": 53624}, {"license": 4, "file_name": "000000313588.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000313588.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 09:20:58", "flickr_url": "http://farm9.staticflickr.com/8209/8253725562_84e76ed5e9_z.jpg", "id": 313588}, {"license": 6, "file_name": "000000310980.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000310980.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 11:48:16", "flickr_url": "http://farm5.staticflickr.com/4147/5054050192_e67c75697d_z.jpg", "id": 310980}, {"license": 1, "file_name": "000000200252.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000200252.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 13:23:43", "flickr_url": "http://farm1.staticflickr.com/5/4715676_27719ad496_z.jpg", "id": 200252}, {"license": 2, "file_name": "000000235241.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000235241.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 13:41:23", "flickr_url": "http://farm9.staticflickr.com/8300/7741626994_724765d83a_z.jpg", "id": 235241}, {"license": 2, "file_name": "000000009378.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000009378.jpg", "height": 400, "width": 600, "date_captured": "2013-11-18 15:43:42", "flickr_url": "http://farm3.staticflickr.com/2703/4492331353_97b6f49b11_z.jpg", "id": 9378}, {"license": 1, "file_name": "000000357459.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000357459.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 17:26:19", "flickr_url": "http://farm3.staticflickr.com/2287/1950330325_e61072aa97_z.jpg", "id": 357459}, {"license": 2, "file_name": "000000533493.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000533493.jpg", "height": 281, "width": 500, "date_captured": "2013-11-18 17:45:46", "flickr_url": "http://farm1.staticflickr.com/205/461575322_4ce5c2f6b4_z.jpg", "id": 533493}, {"license": 3, "file_name": "000000227482.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000227482.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 18:11:23", "flickr_url": "http://farm1.staticflickr.com/72/178187672_ce136f99ab_z.jpg", "id": 227482}, {"license": 4, "file_name": "000000214753.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000214753.jpg", "height": 424, "width": 640, "date_captured": "2013-11-18 21:17:41", "flickr_url": "http://farm9.staticflickr.com/8073/8392128987_e7b98a0936_z.jpg", "id": 214753}, {"license": 2, "file_name": "000000226883.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000226883.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 22:32:50", "flickr_url": "http://farm1.staticflickr.com/107/255636716_c93faa88ae_z.jpg", "id": 226883}, {"license": 5, "file_name": "000000118209.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000118209.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 22:55:23", "flickr_url": "http://farm5.staticflickr.com/4104/4953441455_a1b9200a62_z.jpg", "id": 118209}, {"license": 5, "file_name": "000000529105.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000529105.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 22:55:58", "flickr_url": "http://farm4.staticflickr.com/3576/3682341767_51b97e44e6_z.jpg", "id": 529105}, {"license": 1, "file_name": "000000377486.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000377486.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 23:52:10", "flickr_url": "http://farm9.staticflickr.com/8025/6994910088_b2493c81c7_z.jpg", "id": 377486}, {"license": 6, "file_name": "000000308545.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000308545.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 02:25:36", "flickr_url": "http://farm8.staticflickr.com/7290/8738791171_17594ebcb5_z.jpg", "id": 308545}, {"license": 4, "file_name": "000000454798.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000454798.jpg", "height": 425, "width": 640, "date_captured": "2013-11-19 02:55:57", "flickr_url": "http://farm9.staticflickr.com/8108/8653189194_05e2d93b19_z.jpg", "id": 454798}, {"license": 6, "file_name": "000000006614.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000006614.jpg", "height": 396, "width": 500, "date_captured": "2013-11-19 18:10:01", "flickr_url": "http://farm2.staticflickr.com/1343/1441614914_44c1d8c1fb_z.jpg", "id": 6614}, {"license": 4, "file_name": "000000290081.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000290081.jpg", "height": 612, "width": 612, "date_captured": "2013-11-19 19:00:39", "flickr_url": "http://farm9.staticflickr.com/8256/8662529759_1a7cb966a7_z.jpg", "id": 290081}, {"license": 2, "file_name": "000000496954.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000496954.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 19:10:04", "flickr_url": "http://farm9.staticflickr.com/8258/8911201812_1ab56a3c35_z.jpg", "id": 496954}, {"license": 4, "file_name": "000000099053.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000099053.jpg", "height": 559, "width": 640, "date_captured": "2013-11-19 20:54:18", "flickr_url": "http://farm7.staticflickr.com/6020/5884430904_8830bb62b3_z.jpg", "id": 99053}, {"license": 3, "file_name": "000000003255.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000003255.jpg", "height": 363, "width": 640, "date_captured": "2013-11-19 20:55:09", "flickr_url": "http://farm6.staticflickr.com/5331/7051419219_a6d3417b0c_z.jpg", "id": 3255}, {"license": 4, "file_name": "000000549167.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000549167.jpg", "height": 640, "width": 426, "date_captured": "2013-11-19 21:45:47", "flickr_url": "http://farm5.staticflickr.com/4149/5037964953_06802c3336_z.jpg", "id": 549167}, {"license": 4, "file_name": "000000132116.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000132116.jpg", "height": 612, "width": 612, "date_captured": "2013-11-19 22:17:02", "flickr_url": "http://farm8.staticflickr.com/7287/8742005207_5b63a1d6bc_z.jpg", "id": 132116}, {"license": 4, "file_name": "000000335427.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000335427.jpg", "height": 448, "width": 640, "date_captured": "2013-11-19 22:18:45", "flickr_url": "http://farm9.staticflickr.com/8328/8092393214_78629af5af_z.jpg", "id": 335427}, {"license": 3, "file_name": "000000031093.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000031093.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 22:21:24", "flickr_url": "http://farm5.staticflickr.com/4123/4746695571_42218d5ea8_z.jpg", "id": 31093}, {"license": 3, "file_name": "000000030785.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000030785.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 22:29:40", "flickr_url": "http://farm8.staticflickr.com/7121/7154494488_b75750d02a_z.jpg", "id": 30785}, {"license": 2, "file_name": "000000074860.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000074860.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 22:32:37", "flickr_url": "http://farm6.staticflickr.com/5056/5492749013_e4f352d047_z.jpg", "id": 74860}, {"license": 4, "file_name": "000000527695.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000527695.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 22:37:46", "flickr_url": "http://farm9.staticflickr.com/8295/7871176758_8fd20efcd5_z.jpg", "id": 527695}, {"license": 3, "file_name": "000000361506.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000361506.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 23:44:52", "flickr_url": "http://farm3.staticflickr.com/2459/3786797523_9b2747fff6_z.jpg", "id": 361506}, {"license": 5, "file_name": "000000365521.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000365521.jpg", "height": 640, "width": 428, "date_captured": "2013-11-20 00:48:24", "flickr_url": "http://farm9.staticflickr.com/8029/7920294234_223ebd5544_z.jpg", "id": 365521}, {"license": 3, "file_name": "000000288862.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000288862.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 01:12:19", "flickr_url": "http://farm8.staticflickr.com/7049/6921939973_3f1fca8ee2_z.jpg", "id": 288862}, {"license": 1, "file_name": "000000018519.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000018519.jpg", "height": 640, "width": 515, "date_captured": "2013-11-20 01:22:59", "flickr_url": "http://farm8.staticflickr.com/7199/6892325386_145a03efa0_z.jpg", "id": 18519}, {"license": 3, "file_name": "000000560178.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000560178.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 02:51:26", "flickr_url": "http://farm1.staticflickr.com/74/193722870_4c62e8fd00_z.jpg", "id": 560178}, {"license": 1, "file_name": "000000119911.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000119911.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 06:35:26", "flickr_url": "http://farm3.staticflickr.com/2636/4064255205_5d45e35d8d_z.jpg", "id": 119911}, {"license": 4, "file_name": "000000350405.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000350405.jpg", "height": 333, "width": 500, "date_captured": "2013-11-20 12:09:42", "flickr_url": "http://farm1.staticflickr.com/130/350378980_e04c25fce1_z.jpg", "id": 350405}, {"license": 1, "file_name": "000000425906.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000425906.jpg", "height": 640, "width": 463, "date_captured": "2013-11-20 13:36:12", "flickr_url": "http://farm4.staticflickr.com/3327/3224380059_5d498edd78_z.jpg", "id": 425906}, {"license": 4, "file_name": "000000157601.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000157601.jpg", "height": 612, "width": 612, "date_captured": "2013-11-20 14:21:58", "flickr_url": "http://farm9.staticflickr.com/8478/8239498722_1b6cb129fd_z.jpg", "id": 157601}, {"license": 3, "file_name": "000000138241.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000138241.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 14:38:46", "flickr_url": "http://farm9.staticflickr.com/8287/7771589858_80a8016a97_z.jpg", "id": 138241}, {"license": 2, "file_name": "000000383337.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000383337.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 16:08:20", "flickr_url": "http://farm2.staticflickr.com/1389/1369242172_c513eeecb4_z.jpg", "id": 383337}, {"license": 1, "file_name": "000000449603.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000449603.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 16:24:51", "flickr_url": "http://farm6.staticflickr.com/5310/5869139163_545cca6f3e_z.jpg", "id": 449603}, {"license": 3, "file_name": "000000275058.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000275058.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 16:27:46", "flickr_url": "http://farm6.staticflickr.com/5311/6909917932_25ee0a8ab8_z.jpg", "id": 275058}, {"license": 3, "file_name": "000000359677.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000359677.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 16:27:53", "flickr_url": "http://farm8.staticflickr.com/7279/7056003099_2652720fb3_z.jpg", "id": 359677}, {"license": 3, "file_name": "000000512985.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000512985.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 17:25:58", "flickr_url": "http://farm1.staticflickr.com/38/84192146_8d1119bfed_z.jpg", "id": 512985}, {"license": 1, "file_name": "000000170613.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000170613.jpg", "height": 640, "width": 439, "date_captured": "2013-11-20 18:03:36", "flickr_url": "http://farm3.staticflickr.com/2122/2508706790_85dd3ed407_z.jpg", "id": 170613}, {"license": 2, "file_name": "000000239717.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000239717.jpg", "height": 640, "width": 554, "date_captured": "2013-11-20 18:31:56", "flickr_url": "http://farm9.staticflickr.com/8150/7662797494_822d2e3ef6_z.jpg", "id": 239717}, {"license": 1, "file_name": "000000326174.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000326174.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 18:56:06", "flickr_url": "http://farm9.staticflickr.com/8296/7883159938_532599fb95_z.jpg", "id": 326174}, {"license": 1, "file_name": "000000432085.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000432085.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 20:10:29", "flickr_url": "http://farm2.staticflickr.com/1378/534056653_2700d64452_z.jpg", "id": 432085}, {"license": 6, "file_name": "000000048396.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000048396.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 20:42:17", "flickr_url": "http://farm9.staticflickr.com/8111/8655578199_071e3e3c80_z.jpg", "id": 48396}, {"license": 1, "file_name": "000000082765.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000082765.jpg", "height": 640, "width": 426, "date_captured": "2013-11-20 20:56:39", "flickr_url": "http://farm3.staticflickr.com/2693/4326928254_5bd37e68e4_z.jpg", "id": 82765}, {"license": 4, "file_name": "000000471756.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000471756.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 21:04:59", "flickr_url": "http://farm9.staticflickr.com/8314/7887157332_762a499b84_z.jpg", "id": 471756}, {"license": 4, "file_name": "000000220584.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000220584.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 21:10:13", "flickr_url": "http://farm8.staticflickr.com/7277/7852484584_e823c15b32_z.jpg", "id": 220584}, {"license": 4, "file_name": "000000079031.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000079031.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 21:17:24", "flickr_url": "http://farm9.staticflickr.com/8147/7630088322_e0bd2184fa_z.jpg", "id": 79031}, {"license": 3, "file_name": "000000513524.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000513524.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 22:19:50", "flickr_url": "http://farm8.staticflickr.com/7145/6475867069_80f624406c_z.jpg", "id": 513524}, {"license": 4, "file_name": "000000274460.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000274460.jpg", "height": 454, "width": 640, "date_captured": "2013-11-20 22:29:00", "flickr_url": "http://farm7.staticflickr.com/6236/6267475434_0c28897158_z.jpg", "id": 274460}, {"license": 1, "file_name": "000000274066.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000274066.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 22:54:57", "flickr_url": "http://farm7.staticflickr.com/6202/6023604756_1f27626677_z.jpg", "id": 274066}, {"license": 1, "file_name": "000000278973.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000278973.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 23:01:43", "flickr_url": "http://farm7.staticflickr.com/6026/6009339425_6bcea8ebff_z.jpg", "id": 278973}, {"license": 1, "file_name": "000000320696.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000320696.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 23:15:52", "flickr_url": "http://farm6.staticflickr.com/5075/5896700879_9765d74a6f_z.jpg", "id": 320696}, {"license": 1, "file_name": "000000485071.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000485071.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 23:42:51", "flickr_url": "http://farm6.staticflickr.com/5012/5479870808_c97841557d_z.jpg", "id": 485071}, {"license": 2, "file_name": "000000071451.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000071451.jpg", "height": 640, "width": 383, "date_captured": "2013-11-21 00:12:55", "flickr_url": "http://farm8.staticflickr.com/7296/9116234211_a008c7d23c_z.jpg", "id": 71451}, {"license": 3, "file_name": "000000342186.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000342186.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 00:58:10", "flickr_url": "http://farm7.staticflickr.com/6113/6286645530_65deb42df3_z.jpg", "id": 342186}, {"license": 1, "file_name": "000000202445.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000202445.jpg", "height": 612, "width": 612, "date_captured": "2013-11-21 01:20:10", "flickr_url": "http://farm9.staticflickr.com/8006/7445347854_cf6ec8d805_z.jpg", "id": 202445}, {"license": 2, "file_name": "000000133418.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000133418.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 02:25:23", "flickr_url": "http://farm8.staticflickr.com/7440/8958494997_01edcae014_z.jpg", "id": 133418}, {"license": 3, "file_name": "000000522156.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000522156.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 02:46:28", "flickr_url": "http://farm6.staticflickr.com/5117/6919893122_e9d11b7369_z.jpg", "id": 522156}, {"license": 2, "file_name": "000000274411.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000274411.jpg", "height": 640, "width": 426, "date_captured": "2013-11-21 03:42:43", "flickr_url": "http://farm8.staticflickr.com/7209/6777238732_318a005486_z.jpg", "id": 274411}, {"license": 2, "file_name": "000000394559.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000394559.jpg", "height": 640, "width": 426, "date_captured": "2013-11-21 03:42:46", "flickr_url": "http://farm8.staticflickr.com/7069/6777238904_54c278927d_z.jpg", "id": 394559}, {"license": 2, "file_name": "000000064523.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000064523.jpg", "height": 444, "width": 640, "date_captured": "2013-11-21 03:43:39", "flickr_url": "http://farm8.staticflickr.com/7164/6841199359_a073ef21d7_z.jpg", "id": 64523}, {"license": 2, "file_name": "000000062692.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000062692.jpg", "height": 640, "width": 427, "date_captured": "2013-11-21 04:43:37", "flickr_url": "http://farm6.staticflickr.com/5110/5557618880_5e8425d05d_z.jpg", "id": 62692}, {"license": 5, "file_name": "000000359219.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000359219.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 05:34:39", "flickr_url": "http://farm5.staticflickr.com/4034/4668011036_d2854171af_z.jpg", "id": 359219}, {"license": 1, "file_name": "000000512657.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000512657.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 20:00:46", "flickr_url": "http://farm3.staticflickr.com/2294/2056159572_065c478e48_z.jpg", "id": 512657}, {"license": 3, "file_name": "000000556193.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000556193.jpg", "height": 333, "width": 500, "date_captured": "2013-11-21 22:37:51", "flickr_url": "http://farm3.staticflickr.com/2244/2055443448_2e3dbb5590_z.jpg", "id": 556193}, {"license": 3, "file_name": "000000156924.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000156924.jpg", "height": 333, "width": 500, "date_captured": "2013-11-21 22:37:56", "flickr_url": "http://farm3.staticflickr.com/2022/2055467614_c082598ee7_z.jpg", "id": 156924}, {"license": 1, "file_name": "000000164883.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000164883.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 00:26:39", "flickr_url": "http://farm1.staticflickr.com/113/313498061_12da405c9b_z.jpg", "id": 164883}, {"license": 1, "file_name": "000000470173.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000470173.jpg", "height": 640, "width": 446, "date_captured": "2013-11-22 21:29:47", "flickr_url": "http://farm1.staticflickr.com/49/116732486_d4183fba96_z.jpg", "id": 470173}, {"license": 2, "file_name": "000000302107.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000302107.jpg", "height": 640, "width": 427, "date_captured": "2013-11-23 00:41:26", "flickr_url": "http://farm8.staticflickr.com/7270/7598148828_01208d7229_z.jpg", "id": 302107}, {"license": 2, "file_name": "000000133969.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000133969.jpg", "height": 427, "width": 640, "date_captured": "2013-11-23 01:02:51", "flickr_url": "http://farm8.staticflickr.com/7182/6905497273_6da18dff2e_z.jpg", "id": 133969}, {"license": 1, "file_name": "000000246308.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000246308.jpg", "height": 640, "width": 480, "date_captured": "2013-11-23 20:07:32", "flickr_url": "http://farm5.staticflickr.com/4054/4256248980_5b0115db59_z.jpg", "id": 246308}, {"license": 4, "file_name": "000000138856.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000138856.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 02:23:50", "flickr_url": "http://farm5.staticflickr.com/4075/4872855743_1066676766_z.jpg", "id": 138856}, {"license": 6, "file_name": "000000207306.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000207306.jpg", "height": 500, "width": 375, "date_captured": "2013-11-24 03:03:39", "flickr_url": "http://farm1.staticflickr.com/170/416605474_32eab61df5_z.jpg", "id": 207306}, {"license": 2, "file_name": "000000565877.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000565877.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 04:55:48", "flickr_url": "http://farm2.staticflickr.com/1044/3167881862_b47f8e17d4_z.jpg", "id": 565877}, {"license": 2, "file_name": "000000161642.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000161642.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 04:57:29", "flickr_url": "http://farm4.staticflickr.com/3734/9476138221_9e4f3a5cfe_z.jpg", "id": 161642}, {"license": 3, "file_name": "000000117197.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000117197.jpg", "height": 466, "width": 640, "date_captured": "2013-11-24 06:18:29", "flickr_url": "http://farm6.staticflickr.com/5308/5597908661_862590802b_z.jpg", "id": 117197}, {"license": 5, "file_name": "000000247806.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000247806.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 06:28:25", "flickr_url": "http://farm8.staticflickr.com/7114/7751952772_348bb0694b_z.jpg", "id": 247806}, {"license": 5, "file_name": "000000245173.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000245173.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 14:08:32", "flickr_url": "http://farm8.staticflickr.com/7313/9219346283_28dc2e7a71_z.jpg", "id": 245173}, {"license": 3, "file_name": "000000304396.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000304396.jpg", "height": 640, "width": 425, "date_captured": "2013-11-24 14:14:56", "flickr_url": "http://farm3.staticflickr.com/2874/9119708863_b779907460_z.jpg", "id": 304396}, {"license": 1, "file_name": "000000567886.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000567886.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 22:02:38", "flickr_url": "http://farm2.staticflickr.com/1270/1163135349_e633b49eb0_z.jpg", "id": 567886}, {"license": 1, "file_name": "000000085089.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000085089.jpg", "height": 428, "width": 640, "date_captured": "2013-11-25 20:02:00", "flickr_url": "http://farm2.staticflickr.com/1230/4599941101_073a4f0c6d_z.jpg", "id": 85089}, {"license": 4, "file_name": "000000233370.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000233370.jpg", "height": 640, "width": 427, "date_captured": "2013-11-14 17:11:56", "flickr_url": "http://farm8.staticflickr.com/7199/6981874273_f285449370_z.jpg", "id": 233370}, {"license": 1, "file_name": "000000554002.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000554002.jpg", "height": 425, "width": 640, "date_captured": "2013-11-14 17:39:50", "flickr_url": "http://farm9.staticflickr.com/8292/7551688628_562524023a_z.jpg", "id": 554002}, {"license": 1, "file_name": "000000465129.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000465129.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 18:37:49", "flickr_url": "http://farm4.staticflickr.com/3683/8759391184_98375de17d_z.jpg", "id": 465129}, {"license": 3, "file_name": "000000045229.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000045229.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 19:23:46", "flickr_url": "http://farm9.staticflickr.com/8260/8616368682_173cbed6ed_z.jpg", "id": 45229}, {"license": 1, "file_name": "000000438774.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000438774.jpg", "height": 425, "width": 640, "date_captured": "2013-11-14 19:56:50", "flickr_url": "http://farm9.staticflickr.com/8504/8309992877_42719867a0_z.jpg", "id": 438774}, {"license": 1, "file_name": "000000523100.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000523100.jpg", "height": 640, "width": 480, "date_captured": "2013-11-14 22:37:44", "flickr_url": "http://farm6.staticflickr.com/5448/6918758624_58213030cd_z.jpg", "id": 523100}, {"license": 2, "file_name": "000000224051.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000224051.jpg", "height": 428, "width": 640, "date_captured": "2013-11-14 22:52:36", "flickr_url": "http://farm6.staticflickr.com/5067/5661709113_b97be0cde2_z.jpg", "id": 224051}, {"license": 3, "file_name": "000000061108.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000061108.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 00:08:18", "flickr_url": "http://farm3.staticflickr.com/2555/4084750170_96bac0844a_z.jpg", "id": 61108}, {"license": 2, "file_name": "000000505169.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000505169.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 00:38:00", "flickr_url": "http://farm4.staticflickr.com/3646/3468806245_736bc02047_z.jpg", "id": 505169}, {"license": 1, "file_name": "000000431140.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000431140.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 00:43:57", "flickr_url": "http://farm4.staticflickr.com/3595/3418760322_63245102fe_z.jpg", "id": 431140}, {"license": 5, "file_name": "000000536343.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000536343.jpg", "height": 175, "width": 263, "date_captured": "2013-11-15 02:40:12", "flickr_url": "http://farm9.staticflickr.com/8001/7579423356_f802694727_z.jpg", "id": 536343}, {"license": 5, "file_name": "000000147518.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000147518.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 04:43:11", "flickr_url": "http://farm6.staticflickr.com/5145/5563477304_a1c62e89a6_z.jpg", "id": 147518}, {"license": 3, "file_name": "000000058539.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000058539.jpg", "height": 421, "width": 640, "date_captured": "2013-11-15 11:18:51", "flickr_url": "http://farm8.staticflickr.com/7196/6803418024_95bb23087d_z.jpg", "id": 58539}, {"license": 6, "file_name": "000000418696.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000418696.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 12:47:44", "flickr_url": "http://farm5.staticflickr.com/4075/4770582873_1f298fa076_z.jpg", "id": 418696}, {"license": 3, "file_name": "000000181542.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000181542.jpg", "height": 600, "width": 640, "date_captured": "2013-11-15 13:11:45", "flickr_url": "http://farm9.staticflickr.com/8526/8559644284_775451f3ef_z.jpg", "id": 181542}, {"license": 3, "file_name": "000000146667.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000146667.jpg", "height": 539, "width": 640, "date_captured": "2013-11-15 13:43:18", "flickr_url": "http://farm2.staticflickr.com/1060/1210686488_67e6024bfa_z.jpg", "id": 146667}, {"license": 3, "file_name": "000000003156.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000003156.jpg", "height": 640, "width": 443, "date_captured": "2013-11-15 13:56:02", "flickr_url": "http://farm8.staticflickr.com/7012/6689259207_704baf44ef_z.jpg", "id": 3156}, {"license": 5, "file_name": "000000297147.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000297147.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 16:44:46", "flickr_url": "http://farm8.staticflickr.com/7224/7310741494_1041ae1885_z.jpg", "id": 297147}, {"license": 6, "file_name": "000000455716.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000455716.jpg", "height": 433, "width": 640, "date_captured": "2013-11-15 20:51:32", "flickr_url": "http://farm7.staticflickr.com/6227/7025427793_57e60b6ddc_z.jpg", "id": 455716}, {"license": 1, "file_name": "000000044590.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000044590.jpg", "height": 246, "width": 640, "date_captured": "2013-11-15 21:08:18", "flickr_url": "http://farm8.staticflickr.com/7157/6751499463_721d9a4477_z.jpg", "id": 44590}, {"license": 2, "file_name": "000000129756.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000129756.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 13:07:40", "flickr_url": "http://farm5.staticflickr.com/4030/4657806497_615438e3cc_z.jpg", "id": 129756}, {"license": 1, "file_name": "000000163746.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000163746.jpg", "height": 488, "width": 640, "date_captured": "2013-11-16 13:14:11", "flickr_url": "http://farm8.staticflickr.com/7293/9743305726_b79113eff6_z.jpg", "id": 163746}, {"license": 3, "file_name": "000000335529.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000335529.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 14:06:48", "flickr_url": "http://farm1.staticflickr.com/219/469812321_c62d06283f_z.jpg", "id": 335529}, {"license": 3, "file_name": "000000543043.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000543043.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 16:34:06", "flickr_url": "http://farm4.staticflickr.com/3104/2800748833_82bb6b11c1_z.jpg", "id": 543043}, {"license": 5, "file_name": "000000459757.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000459757.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 17:13:27", "flickr_url": "http://farm9.staticflickr.com/8031/7891276188_fba93a4b12_z.jpg", "id": 459757}, {"license": 4, "file_name": "000000094751.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000094751.jpg", "height": 500, "width": 375, "date_captured": "2013-11-16 18:24:16", "flickr_url": "http://farm1.staticflickr.com/8/9572416_70a00a9ce9_z.jpg", "id": 94751}, {"license": 4, "file_name": "000000284725.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000284725.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 19:57:50", "flickr_url": "http://farm8.staticflickr.com/7375/9766932005_d859b2b6da_z.jpg", "id": 284725}, {"license": 2, "file_name": "000000266082.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000266082.jpg", "height": 500, "width": 375, "date_captured": "2013-11-16 20:18:16", "flickr_url": "http://farm1.staticflickr.com/121/296742226_3643f95af0_z.jpg", "id": 266082}, {"license": 2, "file_name": "000000105912.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000105912.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 21:07:05", "flickr_url": "http://farm3.staticflickr.com/2279/2054234754_27cdb35bd4_z.jpg", "id": 105912}, {"license": 5, "file_name": "000000568290.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000568290.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 21:20:17", "flickr_url": "http://farm8.staticflickr.com/7342/9305416099_b62431c75b_z.jpg", "id": 568290}, {"license": 1, "file_name": "000000460379.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000460379.jpg", "height": 640, "width": 426, "date_captured": "2013-11-16 21:54:27", "flickr_url": "http://farm3.staticflickr.com/2669/4232863308_6d18367613_z.jpg", "id": 460379}, {"license": 4, "file_name": "000000484404.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000484404.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 22:55:18", "flickr_url": "http://farm9.staticflickr.com/8519/8621095125_f3b1b07192_z.jpg", "id": 484404}, {"license": 5, "file_name": "000000233727.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000233727.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 23:14:52", "flickr_url": "http://farm9.staticflickr.com/8514/8507593850_2b80bee7cc_z.jpg", "id": 233727}, {"license": 4, "file_name": "000000419201.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000419201.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 23:20:01", "flickr_url": "http://farm9.staticflickr.com/8183/8103122581_63fd883c9a_z.jpg", "id": 419201}, {"license": 2, "file_name": "000000366178.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000366178.jpg", "height": 500, "width": 375, "date_captured": "2013-11-16 23:22:20", "flickr_url": "http://farm1.staticflickr.com/171/405321265_fb25fff175_z.jpg", "id": 366178}, {"license": 3, "file_name": "000000264335.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000264335.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 23:50:05", "flickr_url": "http://farm8.staticflickr.com/7187/6900057580_81dcd13c69_z.jpg", "id": 264335}, {"license": 1, "file_name": "000000384513.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000384513.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 00:15:25", "flickr_url": "http://farm1.staticflickr.com/34/63834107_3a7a72fb4d_z.jpg", "id": 384513}, {"license": 4, "file_name": "000000176037.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000176037.jpg", "height": 431, "width": 640, "date_captured": "2013-11-17 00:38:11", "flickr_url": "http://farm9.staticflickr.com/8046/8140155314_abf7a6c841_z.jpg", "id": 176037}, {"license": 4, "file_name": "000000167902.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000167902.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 01:08:26", "flickr_url": "http://farm4.staticflickr.com/3582/3682650179_e990e0cdf7_z.jpg", "id": 167902}, {"license": 4, "file_name": "000000126107.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000126107.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 01:32:45", "flickr_url": "http://farm1.staticflickr.com/42/100911501_005e4d3aa8_z.jpg", "id": 126107}, {"license": 6, "file_name": "000000250205.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000250205.jpg", "height": 457, "width": 640, "date_captured": "2013-11-17 01:36:27", "flickr_url": "http://farm3.staticflickr.com/2862/9641756708_f4d64cc289_z.jpg", "id": 250205}, {"license": 6, "file_name": "000000259382.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000259382.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 01:37:22", "flickr_url": "http://farm1.staticflickr.com/85/221255396_5305015672_z.jpg", "id": 259382}, {"license": 3, "file_name": "000000578236.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000578236.jpg", "height": 640, "width": 429, "date_captured": "2013-11-17 03:26:42", "flickr_url": "http://farm3.staticflickr.com/2884/9374439827_3cb6915e4f_z.jpg", "id": 578236}, {"license": 3, "file_name": "000000311190.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000311190.jpg", "height": 500, "width": 375, "date_captured": "2013-11-17 03:31:57", "flickr_url": "http://farm1.staticflickr.com/119/306202967_d910898ccc_z.jpg", "id": 311190}, {"license": 2, "file_name": "000000477118.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000477118.jpg", "height": 333, "width": 500, "date_captured": "2013-11-17 05:57:29", "flickr_url": "http://farm4.staticflickr.com/3280/2719539652_c265031efd_z.jpg", "id": 477118}, {"license": 4, "file_name": "000000558421.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000558421.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 09:19:31", "flickr_url": "http://farm3.staticflickr.com/2889/9008706940_5f20f0cb94_z.jpg", "id": 558421}, {"license": 1, "file_name": "000000172856.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000172856.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 09:30:19", "flickr_url": "http://farm4.staticflickr.com/3639/3326388550_b9f8e8893c_z.jpg", "id": 172856}, {"license": 3, "file_name": "000000524742.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000524742.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 09:45:58", "flickr_url": "http://farm8.staticflickr.com/7316/8853709723_1a817077b5_z.jpg", "id": 524742}, {"license": 3, "file_name": "000000530466.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000530466.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 09:46:03", "flickr_url": "http://farm6.staticflickr.com/5468/8854334236_272d9f2ef5_z.jpg", "id": 530466}, {"license": 2, "file_name": "000000084650.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000084650.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 17:21:05", "flickr_url": "http://farm1.staticflickr.com/37/79266582_818b59abb2_z.jpg", "id": 84650}, {"license": 3, "file_name": "000000526706.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000526706.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 22:25:51", "flickr_url": "http://farm6.staticflickr.com/5032/7225107412_976d8441c5_z.jpg", "id": 526706}, {"license": 4, "file_name": "000000019924.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000019924.jpg", "height": 500, "width": 458, "date_captured": "2013-11-18 01:01:49", "flickr_url": "http://farm4.staticflickr.com/3407/3642510664_1c89fbc90a_z.jpg", "id": 19924}, {"license": 3, "file_name": "000000365098.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000365098.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 01:37:50", "flickr_url": "http://farm9.staticflickr.com/8244/8543547575_f09fe552d6_z.jpg", "id": 365098}, {"license": 4, "file_name": "000000528980.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000528980.jpg", "height": 640, "width": 426, "date_captured": "2013-11-18 03:36:13", "flickr_url": "http://farm7.staticflickr.com/6020/5948647455_15a633da61_z.jpg", "id": 528980}, {"license": 3, "file_name": "000000016598.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000016598.jpg", "height": 640, "width": 478, "date_captured": "2013-11-18 03:39:49", "flickr_url": "http://farm6.staticflickr.com/5091/5391571396_41823477da_z.jpg", "id": 16598}, {"license": 3, "file_name": "000000067315.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000067315.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 03:40:43", "flickr_url": "http://farm6.staticflickr.com/5215/5383308317_2a68284984_z.jpg", "id": 67315}, {"license": 5, "file_name": "000000416256.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000416256.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 04:05:18", "flickr_url": "http://farm1.staticflickr.com/34/64280333_7acf38cfb3_z.jpg", "id": 416256}, {"license": 3, "file_name": "000000179392.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000179392.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 04:07:31", "flickr_url": "http://farm5.staticflickr.com/4027/4329554124_1ce02506f8_z.jpg", "id": 179392}, {"license": 3, "file_name": "000000257566.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000257566.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 06:33:49", "flickr_url": "http://farm6.staticflickr.com/5480/9428315775_3296f9385c_z.jpg", "id": 257566}, {"license": 2, "file_name": "000000127660.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000127660.jpg", "height": 513, "width": 640, "date_captured": "2013-11-18 06:54:03", "flickr_url": "http://farm9.staticflickr.com/8246/8597306878_611e2f9a64_z.jpg", "id": 127660}, {"license": 3, "file_name": "000000575243.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000575243.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 09:17:49", "flickr_url": "http://farm9.staticflickr.com/8220/8280864527_b34f35c043_z.jpg", "id": 575243}, {"license": 1, "file_name": "000000449432.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000449432.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 10:38:40", "flickr_url": "http://farm7.staticflickr.com/6004/5922831081_1fbca9ab03_z.jpg", "id": 449432}, {"license": 2, "file_name": "000000461036.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000461036.jpg", "height": 332, "width": 500, "date_captured": "2013-11-18 11:14:34", "flickr_url": "http://farm3.staticflickr.com/2563/3761229833_64cdf01d3c_z.jpg", "id": 461036}, {"license": 3, "file_name": "000000007088.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000007088.jpg", "height": 640, "width": 478, "date_captured": "2013-11-18 11:30:36", "flickr_url": "http://farm6.staticflickr.com/5294/5572813280_0ff7f31d99_z.jpg", "id": 7088}, {"license": 3, "file_name": "000000165500.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000165500.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 14:02:44", "flickr_url": "http://farm9.staticflickr.com/8154/7617747484_8dffa15ab0_z.jpg", "id": 165500}, {"license": 1, "file_name": "000000508586.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000508586.jpg", "height": 360, "width": 640, "date_captured": "2013-11-18 16:14:37", "flickr_url": "http://farm6.staticflickr.com/5346/9458150907_e3a3e4c4c1_z.jpg", "id": 508586}, {"license": 2, "file_name": "000000468632.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000468632.jpg", "height": 479, "width": 640, "date_captured": "2013-11-18 18:09:43", "flickr_url": "http://farm1.staticflickr.com/48/154772463_b363148ca5_z.jpg", "id": 468632}, {"license": 5, "file_name": "000000013774.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000013774.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 18:22:53", "flickr_url": "http://farm8.staticflickr.com/7167/6837122127_de8b1f8d77_z.jpg", "id": 13774}, {"license": 1, "file_name": "000000509656.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000509656.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 21:37:28", "flickr_url": "http://farm2.staticflickr.com/1055/526812480_2580fc504d_z.jpg", "id": 509656}, {"license": 5, "file_name": "000000335450.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000335450.jpg", "height": 428, "width": 640, "date_captured": "2013-11-19 00:33:21", "flickr_url": "http://farm4.staticflickr.com/3726/9672273201_9ca222c0c2_z.jpg", "id": 335450}, {"license": 1, "file_name": "000000581781.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000581781.jpg", "height": 478, "width": 640, "date_captured": "2013-11-19 19:14:20", "flickr_url": "http://farm6.staticflickr.com/5068/5883211700_6f783dce96_z.jpg", "id": 581781}, {"license": 4, "file_name": "000000056288.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000056288.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 20:04:51", "flickr_url": "http://farm1.staticflickr.com/124/376779110_e9109fac8d_z.jpg", "id": 56288}, {"license": 3, "file_name": "000000499031.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000499031.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 20:13:11", "flickr_url": "http://farm9.staticflickr.com/8069/8194571704_5ac68f083b_z.jpg", "id": 499031}, {"license": 6, "file_name": "000000457262.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000457262.jpg", "height": 612, "width": 612, "date_captured": "2013-11-19 20:30:17", "flickr_url": "http://farm8.staticflickr.com/7156/6835789995_3d5a2de13d_z.jpg", "id": 457262}, {"license": 2, "file_name": "000000574823.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000574823.jpg", "height": 500, "width": 375, "date_captured": "2013-11-19 21:31:14", "flickr_url": "http://farm2.staticflickr.com/1207/525441874_3607734190_z.jpg", "id": 574823}, {"license": 1, "file_name": "000000050331.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000050331.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 22:04:41", "flickr_url": "http://farm4.staticflickr.com/3148/2543913854_76c6f40865_z.jpg", "id": 50331}, {"license": 1, "file_name": "000000299355.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000299355.jpg", "height": 375, "width": 500, "date_captured": "2013-11-19 23:54:23", "flickr_url": "http://farm1.staticflickr.com/170/374002311_69c32e5d0a_z.jpg", "id": 299355}, {"license": 4, "file_name": "000000209757.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000209757.jpg", "height": 640, "width": 426, "date_captured": "2013-11-20 04:05:43", "flickr_url": "http://farm3.staticflickr.com/2459/5726247637_7eb9302561_z.jpg", "id": 209757}, {"license": 1, "file_name": "000000464144.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000464144.jpg", "height": 640, "width": 426, "date_captured": "2013-11-20 04:34:55", "flickr_url": "http://farm5.staticflickr.com/4027/4345480774_2c1d8836f6_z.jpg", "id": 464144}, {"license": 1, "file_name": "000000402118.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000402118.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 04:41:06", "flickr_url": "http://farm3.staticflickr.com/2761/4345870689_e5daf31cb2_z.jpg", "id": 402118}, {"license": 1, "file_name": "000000496409.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000496409.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 04:49:51", "flickr_url": "http://farm5.staticflickr.com/4034/4304657656_6042e38915_z.jpg", "id": 496409}, {"license": 6, "file_name": "000000538458.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000538458.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 06:08:05", "flickr_url": "http://farm3.staticflickr.com/2802/4487717317_cf7e502de2_z.jpg", "id": 538458}, {"license": 6, "file_name": "000000396200.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000396200.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 06:08:12", "flickr_url": "http://farm3.staticflickr.com/2792/4398073427_b2de590796_z.jpg", "id": 396200}, {"license": 4, "file_name": "000000242946.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000242946.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 07:06:20", "flickr_url": "http://farm4.staticflickr.com/3093/2650118269_48decfbb16_z.jpg", "id": 242946}, {"license": 3, "file_name": "000000460929.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000460929.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 08:04:46", "flickr_url": "http://farm7.staticflickr.com/6122/6043036741_9189b816b2_z.jpg", "id": 460929}, {"license": 1, "file_name": "000000289938.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000289938.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 08:12:24", "flickr_url": "http://farm9.staticflickr.com/8481/8166884831_fd9c86108c_z.jpg", "id": 289938}, {"license": 5, "file_name": "000000303893.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000303893.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 13:44:17", "flickr_url": "http://farm8.staticflickr.com/7378/9383802677_0dc943b387_z.jpg", "id": 303893}, {"license": 5, "file_name": "000000399296.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000399296.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 14:20:55", "flickr_url": "http://farm1.staticflickr.com/121/300255030_3fc8102597_z.jpg", "id": 399296}, {"license": 1, "file_name": "000000125257.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000125257.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 14:25:21", "flickr_url": "http://farm3.staticflickr.com/2336/2225245437_c7f236754c_z.jpg", "id": 125257}, {"license": 3, "file_name": "000000164969.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000164969.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 15:04:52", "flickr_url": "http://farm4.staticflickr.com/3397/3506254208_001075c6b0_z.jpg", "id": 164969}, {"license": 3, "file_name": "000000145597.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000145597.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 18:09:44", "flickr_url": "http://farm3.staticflickr.com/2380/2731187105_57dc984413_z.jpg", "id": 145597}, {"license": 1, "file_name": "000000135604.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000135604.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 21:22:31", "flickr_url": "http://farm9.staticflickr.com/8456/8038913506_6aabd31524_z.jpg", "id": 135604}, {"license": 5, "file_name": "000000225405.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000225405.jpg", "height": 471, "width": 640, "date_captured": "2013-11-20 22:14:25", "flickr_url": "http://farm8.staticflickr.com/7255/7502864702_c70cb43f70_z.jpg", "id": 225405}, {"license": 3, "file_name": "000000455301.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000455301.jpg", "height": 481, "width": 640, "date_captured": "2013-11-20 22:21:46", "flickr_url": "http://farm9.staticflickr.com/8272/8697095831_3f7d70cd18_z.jpg", "id": 455301}, {"license": 4, "file_name": "000000505451.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000505451.jpg", "height": 265, "width": 444, "date_captured": "2013-11-20 23:16:09", "flickr_url": "http://farm6.staticflickr.com/5231/5802534363_6b64586d42_z.jpg", "id": 505451}, {"license": 5, "file_name": "000000231879.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000231879.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 23:30:11", "flickr_url": "http://farm8.staticflickr.com/7140/7469646364_19f9d8b394_z.jpg", "id": 231879}, {"license": 3, "file_name": "000000429623.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000429623.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 01:26:26", "flickr_url": "http://farm8.staticflickr.com/7390/9234090660_ffc5a968b0_z.jpg", "id": 429623}, {"license": 4, "file_name": "000000222735.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000222735.jpg", "height": 640, "width": 474, "date_captured": "2013-11-21 01:52:43", "flickr_url": "http://farm4.staticflickr.com/3212/2749561795_4c25c5a576_z.jpg", "id": 222735}, {"license": 1, "file_name": "000000431693.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000431693.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 01:55:23", "flickr_url": "http://farm6.staticflickr.com/5441/10062923413_0311584555_z.jpg", "id": 431693}, {"license": 6, "file_name": "000000037740.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000037740.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 02:27:25", "flickr_url": "http://farm2.staticflickr.com/1011/1344012096_9c4417e5bc_z.jpg", "id": 37740}, {"license": 1, "file_name": "000000327617.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000327617.jpg", "height": 640, "width": 379, "date_captured": "2013-11-21 04:06:51", "flickr_url": "http://farm7.staticflickr.com/6070/6027826455_2453fbc738_z.jpg", "id": 327617}, {"license": 4, "file_name": "000000124659.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000124659.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 20:56:10", "flickr_url": "http://farm6.staticflickr.com/5030/5653997626_b4a62d69d1_z.jpg", "id": 124659}, {"license": 3, "file_name": "000000415741.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000415741.jpg", "height": 360, "width": 640, "date_captured": "2013-11-21 22:11:20", "flickr_url": "http://farm8.staticflickr.com/7212/7344188134_c471bb4d64_z.jpg", "id": 415741}, {"license": 3, "file_name": "000000489611.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000489611.jpg", "height": 622, "width": 640, "date_captured": "2013-11-21 23:13:40", "flickr_url": "http://farm2.staticflickr.com/1046/533580528_b2c40d0529_z.jpg", "id": 489611}, {"license": 1, "file_name": "000000086582.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000086582.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 18:39:34", "flickr_url": "http://farm8.staticflickr.com/7352/9656118921_b3013a72e6_z.jpg", "id": 86582}, {"license": 1, "file_name": "000000234366.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000234366.jpg", "height": 640, "width": 480, "date_captured": "2013-11-22 20:10:36", "flickr_url": "http://farm7.staticflickr.com/6108/6362402871_7c2fd605e5_z.jpg", "id": 234366}, {"license": 4, "file_name": "000000322944.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000322944.jpg", "height": 640, "width": 457, "date_captured": "2013-11-24 02:16:08", "flickr_url": "http://farm9.staticflickr.com/8519/8577206423_cbffa5d62e_z.jpg", "id": 322944}, {"license": 1, "file_name": "000000154339.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000154339.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 04:10:14", "flickr_url": "http://farm6.staticflickr.com/5066/5684142028_d6d565f494_z.jpg", "id": 154339}, {"license": 4, "file_name": "000000553664.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000553664.jpg", "height": 414, "width": 640, "date_captured": "2013-11-24 05:14:38", "flickr_url": "http://farm9.staticflickr.com/8184/8359838012_b3491d063c_z.jpg", "id": 553664}, {"license": 5, "file_name": "000000111036.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000111036.jpg", "height": 640, "width": 425, "date_captured": "2013-11-24 10:30:03", "flickr_url": "http://farm5.staticflickr.com/4064/4219975527_b359d71fb0_z.jpg", "id": 111036}, {"license": 3, "file_name": "000000437110.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000437110.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 16:15:17", "flickr_url": "http://farm8.staticflickr.com/7240/7258858234_2d46eaac85_z.jpg", "id": 437110}, {"license": 1, "file_name": "000000351096.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000351096.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 21:09:36", "flickr_url": "http://farm4.staticflickr.com/3161/2929024941_dc55bc22ca_z.jpg", "id": 351096}, {"license": 1, "file_name": "000000031296.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000031296.jpg", "height": 425, "width": 640, "date_captured": "2013-11-24 22:26:16", "flickr_url": "http://farm6.staticflickr.com/5534/10153588564_c0f7f12928_z.jpg", "id": 31296}, {"license": 3, "file_name": "000000462576.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000462576.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 22:38:10", "flickr_url": "http://farm8.staticflickr.com/7439/9534894738_440d2403cd_z.jpg", "id": 462576}, {"license": 5, "file_name": "000000266768.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000266768.jpg", "height": 612, "width": 612, "date_captured": "2013-11-25 08:16:33", "flickr_url": "http://farm4.staticflickr.com/3712/9631334222_f91803a60d_z.jpg", "id": 266768}, {"license": 3, "file_name": "000000005600.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000005600.jpg", "height": 361, "width": 640, "date_captured": "2013-11-25 08:36:50", "flickr_url": "http://farm8.staticflickr.com/7458/9291472503_d222abcce4_z.jpg", "id": 5600}, {"license": 4, "file_name": "000000105335.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000105335.jpg", "height": 612, "width": 612, "date_captured": "2013-11-25 08:58:01", "flickr_url": "http://farm4.staticflickr.com/3753/9165139551_307fa8f59d_z.jpg", "id": 105335}, {"license": 1, "file_name": "000000436617.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000436617.jpg", "height": 425, "width": 640, "date_captured": "2013-11-25 14:35:02", "flickr_url": "http://farm4.staticflickr.com/3743/9479044816_7513fe85e7_z.jpg", "id": 436617}, {"license": 1, "file_name": "000000404678.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000404678.jpg", "height": 425, "width": 640, "date_captured": "2013-11-25 14:35:05", "flickr_url": "http://farm8.staticflickr.com/7294/9476256893_e29fc2e5f1_z.jpg", "id": 404678}, {"license": 2, "file_name": "000000267537.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000267537.jpg", "height": 470, "width": 640, "date_captured": "2013-11-14 12:42:42", "flickr_url": "http://farm9.staticflickr.com/8030/8036943601_dd1392caf2_z.jpg", "id": 267537}, {"license": 3, "file_name": "000000297353.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000297353.jpg", "height": 640, "width": 640, "date_captured": "2013-11-14 12:43:49", "flickr_url": "http://farm4.staticflickr.com/3320/3178361111_2dd742cc66_z.jpg", "id": 297353}, {"license": 4, "file_name": "000000398905.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000398905.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 16:33:09", "flickr_url": "http://farm8.staticflickr.com/7141/6657510691_3f01a3ae23_z.jpg", "id": 398905}, {"license": 3, "file_name": "000000002532.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000002532.jpg", "height": 640, "width": 480, "date_captured": "2013-11-14 17:59:33", "flickr_url": "http://farm8.staticflickr.com/7044/6955126303_8c9b7e2a32_z.jpg", "id": 2532}, {"license": 3, "file_name": "000000319696.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000319696.jpg", "height": 333, "width": 500, "date_captured": "2013-11-14 18:51:17", "flickr_url": "http://farm4.staticflickr.com/3391/3490935932_4fe0763cf4_z.jpg", "id": 319696}, {"license": 3, "file_name": "000000338304.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000338304.jpg", "height": 640, "width": 425, "date_captured": "2013-11-14 21:04:00", "flickr_url": "http://farm1.staticflickr.com/98/232570195_3d29e80f86_z.jpg", "id": 338304}, {"license": 2, "file_name": "000000182611.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000182611.jpg", "height": 640, "width": 480, "date_captured": "2013-11-14 22:46:42", "flickr_url": "http://farm3.staticflickr.com/2484/3827353265_c602667a26_z.jpg", "id": 182611}, {"license": 1, "file_name": "000000395180.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000395180.jpg", "height": 481, "width": 640, "date_captured": "2013-11-14 22:56:31", "flickr_url": "http://farm8.staticflickr.com/7369/8979712960_b52925c184_z.jpg", "id": 395180}, {"license": 4, "file_name": "000000514914.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000514914.jpg", "height": 366, "width": 640, "date_captured": "2013-11-15 01:42:52", "flickr_url": "http://farm6.staticflickr.com/5448/9466657460_e12ffd8f35_z.jpg", "id": 514914}, {"license": 4, "file_name": "000000472623.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000472623.jpg", "height": 640, "width": 425, "date_captured": "2013-11-15 01:47:07", "flickr_url": "http://farm6.staticflickr.com/5298/5540579478_e9d5e490b2_z.jpg", "id": 472623}, {"license": 1, "file_name": "000000267670.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000267670.jpg", "height": 600, "width": 450, "date_captured": "2013-11-15 02:23:23", "flickr_url": "http://farm7.staticflickr.com/6022/5908717702_92df689eee_z.jpg", "id": 267670}, {"license": 1, "file_name": "000000442009.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000442009.jpg", "height": 399, "width": 600, "date_captured": "2013-11-15 03:29:27", "flickr_url": "http://farm6.staticflickr.com/5072/5908159705_b6cb8a465c_z.jpg", "id": 442009}, {"license": 3, "file_name": "000000009772.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000009772.jpg", "height": 640, "width": 550, "date_captured": "2013-11-15 04:43:34", "flickr_url": "http://farm6.staticflickr.com/5093/5512279742_5c56ff5041_z.jpg", "id": 9772}, {"license": 1, "file_name": "000000056350.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000056350.jpg", "height": 612, "width": 612, "date_captured": "2013-11-15 11:36:21", "flickr_url": "http://farm8.staticflickr.com/7233/7167188809_c855e931a2_z.jpg", "id": 56350}, {"license": 4, "file_name": "000000182417.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000182417.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 12:14:59", "flickr_url": "http://farm3.staticflickr.com/2151/2100467664_2703dd9ff2_z.jpg", "id": 182417}, {"license": 3, "file_name": "000000007386.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000007386.jpg", "height": 400, "width": 600, "date_captured": "2013-11-15 12:44:58", "flickr_url": "http://farm5.staticflickr.com/4148/5047682865_042ab1139d_z.jpg", "id": 7386}, {"license": 2, "file_name": "000000272416.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000272416.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 13:31:47", "flickr_url": "http://farm3.staticflickr.com/2467/3596242121_4d30013f33_z.jpg", "id": 272416}, {"license": 3, "file_name": "000000534605.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000534605.jpg", "height": 400, "width": 600, "date_captured": "2013-11-15 13:47:48", "flickr_url": "http://farm8.staticflickr.com/7022/6604916503_4a713c95d1_z.jpg", "id": 534605}, {"license": 3, "file_name": "000000179765.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000179765.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 14:02:51", "flickr_url": "http://farm3.staticflickr.com/2824/10213933686_6936eb402b_z.jpg", "id": 179765}, {"license": 3, "file_name": "000000433204.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000433204.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 16:08:15", "flickr_url": "http://farm4.staticflickr.com/3791/9008357503_465b1e5c68_z.jpg", "id": 433204}, {"license": 3, "file_name": "000000245448.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000245448.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 16:08:29", "flickr_url": "http://farm8.staticflickr.com/7369/9008356167_15a9a846a3_z.jpg", "id": 245448}, {"license": 1, "file_name": "000000213445.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000213445.jpg", "height": 500, "width": 408, "date_captured": "2013-11-15 17:17:16", "flickr_url": "http://farm5.staticflickr.com/4007/4463515326_b08b55025f_z.jpg", "id": 213445}, {"license": 2, "file_name": "000000224724.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000224724.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 19:43:46", "flickr_url": "http://farm4.staticflickr.com/3543/3544616491_7cdec47006_z.jpg", "id": 224724}, {"license": 4, "file_name": "000000163155.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000163155.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 21:02:53", "flickr_url": "http://farm7.staticflickr.com/6239/6277328008_142760d74c_z.jpg", "id": 163155}, {"license": 4, "file_name": "000000255965.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000255965.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 21:02:59", "flickr_url": "http://farm7.staticflickr.com/6094/6277341642_28ebd749f2_z.jpg", "id": 255965}, {"license": 3, "file_name": "000000001532.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000001532.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 14:10:20", "flickr_url": "http://farm7.staticflickr.com/6074/6024384901_2932d35bce_z.jpg", "id": 1532}, {"license": 4, "file_name": "000000377723.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000377723.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 15:36:41", "flickr_url": "http://farm9.staticflickr.com/8354/8303563388_c0b3b1939a_z.jpg", "id": 377723}, {"license": 3, "file_name": "000000354753.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000354753.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 17:39:51", "flickr_url": "http://farm3.staticflickr.com/2060/2329083115_0873ec7e13_z.jpg", "id": 354753}, {"license": 3, "file_name": "000000351559.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000351559.jpg", "height": 343, "width": 640, "date_captured": "2013-11-16 17:52:59", "flickr_url": "http://farm1.staticflickr.com/103/302302349_4971e227a1_z.jpg", "id": 351559}, {"license": 1, "file_name": "000000165336.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000165336.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 18:41:52", "flickr_url": "http://farm5.staticflickr.com/4143/4803254371_61a1b44aa9_z.jpg", "id": 165336}, {"license": 5, "file_name": "000000293474.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000293474.jpg", "height": 333, "width": 500, "date_captured": "2013-11-16 20:31:01", "flickr_url": "http://farm1.staticflickr.com/36/103305745_8e09da4c0b_z.jpg", "id": 293474}, {"license": 2, "file_name": "000000384616.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000384616.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 21:06:55", "flickr_url": "http://farm2.staticflickr.com/1314/1339398047_b4b50780e4_z.jpg", "id": 384616}, {"license": 2, "file_name": "000000552612.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000552612.jpg", "height": 612, "width": 612, "date_captured": "2013-11-16 22:16:44", "flickr_url": "http://farm7.staticflickr.com/6060/6340148093_a6678525df_z.jpg", "id": 552612}, {"license": 3, "file_name": "000000333069.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000333069.jpg", "height": 640, "width": 428, "date_captured": "2013-11-17 00:45:31", "flickr_url": "http://farm4.staticflickr.com/3140/2638515461_7eab792d54_z.jpg", "id": 333069}, {"license": 2, "file_name": "000000431876.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000431876.jpg", "height": 640, "width": 425, "date_captured": "2013-11-17 01:12:28", "flickr_url": "http://farm7.staticflickr.com/6106/6358519017_b422879c9d_z.jpg", "id": 431876}, {"license": 2, "file_name": "000000404568.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000404568.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 01:21:34", "flickr_url": "http://farm1.staticflickr.com/72/175077188_af019268b7_z.jpg", "id": 404568}, {"license": 1, "file_name": "000000284279.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000284279.jpg", "height": 512, "width": 640, "date_captured": "2013-11-17 03:46:15", "flickr_url": "http://farm4.staticflickr.com/3680/10126016504_54ea445250_z.jpg", "id": 284279}, {"license": 4, "file_name": "000000511076.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000511076.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 03:51:54", "flickr_url": "http://farm8.staticflickr.com/7350/10147993846_a41ff2f060_z.jpg", "id": 511076}, {"license": 3, "file_name": "000000547383.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000547383.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 03:54:47", "flickr_url": "http://farm5.staticflickr.com/4038/4484840208_82cfc03d36_z.jpg", "id": 547383}, {"license": 3, "file_name": "000000482585.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000482585.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 04:19:05", "flickr_url": "http://farm9.staticflickr.com/8054/8440034787_4fe219b9db_z.jpg", "id": 482585}, {"license": 3, "file_name": "000000528977.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000528977.jpg", "height": 500, "width": 375, "date_captured": "2013-11-17 04:53:06", "flickr_url": "http://farm5.staticflickr.com/4071/4447651025_b98265b669_z.jpg", "id": 528977}, {"license": 1, "file_name": "000000421834.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000421834.jpg", "height": 457, "width": 640, "date_captured": "2013-11-17 05:21:04", "flickr_url": "http://farm3.staticflickr.com/2858/9539830935_d6d97d2b56_z.jpg", "id": 421834}, {"license": 1, "file_name": "000000464251.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000464251.jpg", "height": 458, "width": 640, "date_captured": "2013-11-17 06:19:09", "flickr_url": "http://farm4.staticflickr.com/3708/9334504979_2fca2d5f69_z.jpg", "id": 464251}, {"license": 3, "file_name": "000000343976.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000343976.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 07:28:57", "flickr_url": "http://farm1.staticflickr.com/31/47770321_a11b282bf6_z.jpg", "id": 343976}, {"license": 5, "file_name": "000000126110.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000126110.jpg", "height": 240, "width": 320, "date_captured": "2013-11-17 14:00:17", "flickr_url": "http://farm1.staticflickr.com/58/192105537_1b69c0b40d_z.jpg", "id": 126110}, {"license": 3, "file_name": "000000276024.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000276024.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 16:00:27", "flickr_url": "http://farm4.staticflickr.com/3249/3052507135_e800572c93_z.jpg", "id": 276024}, {"license": 3, "file_name": "000000507667.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000507667.jpg", "height": 386, "width": 500, "date_captured": "2013-11-17 17:00:46", "flickr_url": "http://farm1.staticflickr.com/57/179334475_d3897225ff_z.jpg", "id": 507667}, {"license": 3, "file_name": "000000467776.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000467776.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 17:27:35", "flickr_url": "http://farm9.staticflickr.com/8008/7431019606_49a4d52edd_z.jpg", "id": 467776}, {"license": 2, "file_name": "000000405306.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000405306.jpg", "height": 417, "width": 640, "date_captured": "2013-11-17 20:12:45", "flickr_url": "http://farm6.staticflickr.com/5159/5865213257_751d4f4392_z.jpg", "id": 405306}, {"license": 2, "file_name": "000000212800.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000212800.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 22:42:19", "flickr_url": "http://farm4.staticflickr.com/3191/2350253710_74cec95c72_z.jpg", "id": 212800}, {"license": 3, "file_name": "000000491867.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000491867.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 03:24:37", "flickr_url": "http://farm6.staticflickr.com/5145/5792597112_4067389a02_z.jpg", "id": 491867}, {"license": 4, "file_name": "000000535156.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000535156.jpg", "height": 505, "width": 640, "date_captured": "2013-11-18 05:39:02", "flickr_url": "http://farm8.staticflickr.com/7077/7355684452_9f9312dc27_z.jpg", "id": 535156}, {"license": 3, "file_name": "000000451308.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000451308.jpg", "height": 640, "width": 441, "date_captured": "2013-11-18 08:11:12", "flickr_url": "http://farm4.staticflickr.com/3091/2659222716_77606cdc95_z.jpg", "id": 451308}, {"license": 3, "file_name": "000000309484.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000309484.jpg", "height": 640, "width": 533, "date_captured": "2013-11-18 09:02:05", "flickr_url": "http://farm3.staticflickr.com/2443/3727545103_4599f74e76_z.jpg", "id": 309484}, {"license": 4, "file_name": "000000417249.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000417249.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 10:41:01", "flickr_url": "http://farm7.staticflickr.com/6081/6073438444_f4535c3cd4_z.jpg", "id": 417249}, {"license": 3, "file_name": "000000390826.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000390826.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 11:09:53", "flickr_url": "http://farm4.staticflickr.com/3180/5832285903_b107e3afc8_z.jpg", "id": 390826}, {"license": 4, "file_name": "000000190753.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000190753.jpg", "height": 478, "width": 640, "date_captured": "2013-11-18 11:47:56", "flickr_url": "http://farm9.staticflickr.com/8459/7887530962_c31e9f1474_z.jpg", "id": 190753}, {"license": 3, "file_name": "000000154004.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000154004.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 12:28:24", "flickr_url": "http://farm7.staticflickr.com/6175/6205249794_47f561d7ce_z.jpg", "id": 154004}, {"license": 3, "file_name": "000000462904.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000462904.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 20:45:23", "flickr_url": "http://farm2.staticflickr.com/1436/1428416853_ce548f1fb5_z.jpg", "id": 462904}, {"license": 1, "file_name": "000000263966.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000263966.jpg", "height": 424, "width": 640, "date_captured": "2013-11-18 23:00:58", "flickr_url": "http://farm6.staticflickr.com/5219/5453955207_7f0f0d7b44_z.jpg", "id": 263966}, {"license": 1, "file_name": "000000353051.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000353051.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 23:11:28", "flickr_url": "http://farm6.staticflickr.com/5281/5352481360_dd0654a739_z.jpg", "id": 353051}, {"license": 1, "file_name": "000000199236.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000199236.jpg", "height": 424, "width": 640, "date_captured": "2013-11-19 02:22:27", "flickr_url": "http://farm3.staticflickr.com/2888/8805979162_a6080494a6_z.jpg", "id": 199236}, {"license": 3, "file_name": "000000265816.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000265816.jpg", "height": 406, "width": 640, "date_captured": "2013-11-19 02:23:15", "flickr_url": "http://farm8.staticflickr.com/7288/8763417766_4d635fb8e7_z.jpg", "id": 265816}, {"license": 5, "file_name": "000000018491.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000018491.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 17:54:54", "flickr_url": "http://farm3.staticflickr.com/2134/5814907667_496ae24446_z.jpg", "id": 18491}, {"license": 3, "file_name": "000000227491.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000227491.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 18:13:44", "flickr_url": "http://farm1.staticflickr.com/41/102772079_df7550a5b8_z.jpg", "id": 227491}, {"license": 3, "file_name": "000000091495.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000091495.jpg", "height": 447, "width": 640, "date_captured": "2013-11-19 18:33:50", "flickr_url": "http://farm8.staticflickr.com/7090/6972174878_e90689085b_z.jpg", "id": 91495}, {"license": 3, "file_name": "000000283070.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000283070.jpg", "height": 428, "width": 640, "date_captured": "2013-11-19 19:40:28", "flickr_url": "http://farm9.staticflickr.com/8520/8628720650_59ae9ab463_z.jpg", "id": 283070}, {"license": 1, "file_name": "000000516601.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000516601.jpg", "height": 360, "width": 640, "date_captured": "2013-11-19 20:41:11", "flickr_url": "http://farm9.staticflickr.com/8439/8011411290_7337fee561_z.jpg", "id": 516601}, {"license": 4, "file_name": "000000296634.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000296634.jpg", "height": 453, "width": 640, "date_captured": "2013-11-19 20:58:04", "flickr_url": "http://farm8.staticflickr.com/7064/6927990329_9df1053911_z.jpg", "id": 296634}, {"license": 3, "file_name": "000000298994.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000298994.jpg", "height": 428, "width": 640, "date_captured": "2013-11-19 21:11:54", "flickr_url": "http://farm8.staticflickr.com/7090/7250359726_946ca04a0b_z.jpg", "id": 298994}, {"license": 2, "file_name": "000000451714.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000451714.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 21:39:21", "flickr_url": "http://farm8.staticflickr.com/7175/6581207789_8b8fa78236_z.jpg", "id": 451714}, {"license": 2, "file_name": "000000292415.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000292415.jpg", "height": 500, "width": 333, "date_captured": "2013-11-19 22:03:58", "flickr_url": "http://farm4.staticflickr.com/3248/2663521722_f75e0a0390_z.jpg", "id": 292415}, {"license": 1, "file_name": "000000407825.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000407825.jpg", "height": 500, "width": 499, "date_captured": "2013-11-19 22:33:24", "flickr_url": "http://farm1.staticflickr.com/142/345296581_9b55109008_z.jpg", "id": 407825}, {"license": 3, "file_name": "000000170670.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000170670.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 00:18:48", "flickr_url": "http://farm2.staticflickr.com/1234/759414821_bc27a2c58f_z.jpg", "id": 170670}, {"license": 3, "file_name": "000000377635.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000377635.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 01:42:43", "flickr_url": "http://farm7.staticflickr.com/6190/6131295800_5ea8ac3abb_z.jpg", "id": 377635}, {"license": 4, "file_name": "000000192964.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000192964.jpg", "height": 640, "width": 428, "date_captured": "2013-11-20 03:58:29", "flickr_url": "http://farm6.staticflickr.com/5234/5798076351_87c086196d_z.jpg", "id": 192964}, {"license": 3, "file_name": "000000450559.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000450559.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 07:02:26", "flickr_url": "http://farm4.staticflickr.com/3080/3906855652_a718e0f370_z.jpg", "id": 450559}, {"license": 1, "file_name": "000000422886.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000422886.jpg", "height": 640, "width": 640, "date_captured": "2013-11-20 12:30:05", "flickr_url": "http://farm6.staticflickr.com/5301/5621214414_271e5f5c35_z.jpg", "id": 422886}, {"license": 1, "file_name": "000000407650.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000407650.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 13:36:58", "flickr_url": "http://farm4.staticflickr.com/3125/3220547410_99d42603c0_z.jpg", "id": 407650}, {"license": 1, "file_name": "000000167572.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000167572.jpg", "height": 425, "width": 640, "date_captured": "2013-11-20 15:37:31", "flickr_url": "http://farm6.staticflickr.com/5181/5640302114_8a36987a52_z.jpg", "id": 167572}, {"license": 2, "file_name": "000000039785.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000039785.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 16:39:54", "flickr_url": "http://farm3.staticflickr.com/2135/1527508260_f040978547_z.jpg", "id": 39785}, {"license": 3, "file_name": "000000177539.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000177539.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 17:15:31", "flickr_url": "http://farm9.staticflickr.com/8127/8991833780_5eb4c6a0cf_z.jpg", "id": 177539}, {"license": 5, "file_name": "000000245651.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000245651.jpg", "height": 500, "width": 375, "date_captured": "2013-11-20 18:33:05", "flickr_url": "http://farm3.staticflickr.com/2437/3956562901_0f6fdbb0a7_z.jpg", "id": 245651}, {"license": 4, "file_name": "000000378116.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000378116.jpg", "height": 454, "width": 640, "date_captured": "2013-11-20 23:27:17", "flickr_url": "http://farm6.staticflickr.com/5150/5619719330_f8c8934184_z.jpg", "id": 378116}, {"license": 3, "file_name": "000000213422.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000213422.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 23:27:45", "flickr_url": "http://farm4.staticflickr.com/3309/3568286596_7f529c2bff_z.jpg", "id": 213422}, {"license": 2, "file_name": "000000052507.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000052507.jpg", "height": 438, "width": 640, "date_captured": "2013-11-20 23:45:51", "flickr_url": "http://farm6.staticflickr.com/5013/5475344305_aec479eb1f_z.jpg", "id": 52507}, {"license": 4, "file_name": "000000068286.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000068286.jpg", "height": 366, "width": 640, "date_captured": "2013-11-21 00:16:59", "flickr_url": "http://farm4.staticflickr.com/3772/9124536029_b9eaf76c3e_z.jpg", "id": 68286}, {"license": 3, "file_name": "000000179214.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000179214.jpg", "height": 640, "width": 428, "date_captured": "2013-11-21 00:52:38", "flickr_url": "http://farm8.staticflickr.com/7209/6814172466_54ae8766be_z.jpg", "id": 179214}, {"license": 1, "file_name": "000000393056.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000393056.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 00:56:20", "flickr_url": "http://farm5.staticflickr.com/4142/4911956825_ba6c778b83_z.jpg", "id": 393056}, {"license": 4, "file_name": "000000080932.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000080932.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 04:26:31", "flickr_url": "http://farm5.staticflickr.com/4075/5487804660_f06d600b35_z.jpg", "id": 80932}, {"license": 1, "file_name": "000000092091.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000092091.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 20:01:25", "flickr_url": "http://farm1.staticflickr.com/139/323168465_c96e2a633d_z.jpg", "id": 92091}, {"license": 1, "file_name": "000000482319.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000482319.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 20:25:46", "flickr_url": "http://farm1.staticflickr.com/108/271658164_61e5a2d56a_z.jpg", "id": 482319}, {"license": 2, "file_name": "000000435208.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000435208.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 22:56:15", "flickr_url": "http://farm7.staticflickr.com/6008/5996235673_f6734313d7_z.jpg", "id": 435208}, {"license": 1, "file_name": "000000515077.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000515077.jpg", "height": 479, "width": 640, "date_captured": "2013-11-21 23:21:04", "flickr_url": "http://farm2.staticflickr.com/1293/664518198_b38ff9e6a0_z.jpg", "id": 515077}, {"license": 1, "file_name": "000000289960.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000289960.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 08:41:56", "flickr_url": "http://farm5.staticflickr.com/4143/4781801764_b659433b04_z.jpg", "id": 289960}, {"license": 3, "file_name": "000000357238.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000357238.jpg", "height": 640, "width": 427, "date_captured": "2013-11-22 09:57:06", "flickr_url": "http://farm9.staticflickr.com/8516/8438771074_a452917fa8_z.jpg", "id": 357238}, {"license": 3, "file_name": "000000471789.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000471789.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 14:51:39", "flickr_url": "http://farm9.staticflickr.com/8315/7948466550_3e6928e4e0_z.jpg", "id": 471789}, {"license": 1, "file_name": "000000576654.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000576654.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 18:18:32", "flickr_url": "http://farm4.staticflickr.com/3164/2647243570_f9e4b20872_z.jpg", "id": 576654}, {"license": 2, "file_name": "000000095862.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000095862.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 21:40:32", "flickr_url": "http://farm1.staticflickr.com/23/30110315_78ac9ab892_z.jpg", "id": 95862}, {"license": 3, "file_name": "000000491464.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000491464.jpg", "height": 428, "width": 640, "date_captured": "2013-11-23 00:13:15", "flickr_url": "http://farm3.staticflickr.com/2855/9073216150_94b0537898_z.jpg", "id": 491464}, {"license": 3, "file_name": "000000281409.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000281409.jpg", "height": 427, "width": 640, "date_captured": "2013-11-23 00:31:15", "flickr_url": "http://farm9.staticflickr.com/8520/8548807847_b61bd0e129_z.jpg", "id": 281409}, {"license": 3, "file_name": "000000254516.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000254516.jpg", "height": 427, "width": 640, "date_captured": "2013-11-23 01:21:49", "flickr_url": "http://farm6.staticflickr.com/5027/5796410532_d039910c67_z.jpg", "id": 254516}, {"license": 1, "file_name": "000000224337.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000224337.jpg", "height": 427, "width": 640, "date_captured": "2013-11-23 03:16:39", "flickr_url": "http://farm5.staticflickr.com/4018/4343597094_4b4983b8b7_z.jpg", "id": 224337}, {"license": 1, "file_name": "000000452515.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000452515.jpg", "height": 500, "width": 224, "date_captured": "2013-11-23 03:38:40", "flickr_url": "http://farm4.staticflickr.com/3351/3230722537_1818fa9b9d_z.jpg", "id": 452515}, {"license": 2, "file_name": "000000404922.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000404922.jpg", "height": 500, "width": 368, "date_captured": "2013-11-23 04:07:39", "flickr_url": "http://farm4.staticflickr.com/3278/2653788557_d70b558f2c_z.jpg", "id": 404922}, {"license": 3, "file_name": "000000340015.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000340015.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 04:46:12", "flickr_url": "http://farm4.staticflickr.com/3646/3596020002_6264ea4a4b_z.jpg", "id": 340015}, {"license": 1, "file_name": "000000273493.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000273493.jpg", "height": 333, "width": 500, "date_captured": "2013-11-23 05:52:09", "flickr_url": "http://farm1.staticflickr.com/6/6241812_3fa145e181_z.jpg", "id": 273493}, {"license": 3, "file_name": "000000211120.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000211120.jpg", "height": 379, "width": 640, "date_captured": "2013-11-24 02:59:22", "flickr_url": "http://farm1.staticflickr.com/84/226992228_cb165ef8b0_z.jpg", "id": 211120}, {"license": 5, "file_name": "000000053909.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000053909.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 05:54:00", "flickr_url": "http://farm8.staticflickr.com/7402/8714966583_f0853928b4_z.jpg", "id": 53909}, {"license": 1, "file_name": "000000499266.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000499266.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 06:04:18", "flickr_url": "http://farm9.staticflickr.com/8170/8057173387_a275bd10d4_z.jpg", "id": 499266}, {"license": 2, "file_name": "000000446005.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000446005.jpg", "height": 333, "width": 500, "date_captured": "2013-11-24 10:51:46", "flickr_url": "http://farm1.staticflickr.com/62/189625556_38f8350a0f_z.jpg", "id": 446005}, {"license": 2, "file_name": "000000150930.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000150930.jpg", "height": 640, "width": 411, "date_captured": "2013-11-24 11:44:52", "flickr_url": "http://farm7.staticflickr.com/6047/6326023029_a6b64a2959_z.jpg", "id": 150930}, {"license": 4, "file_name": "000000060899.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000060899.jpg", "height": 640, "width": 360, "date_captured": "2013-11-24 13:35:38", "flickr_url": "http://farm6.staticflickr.com/5004/5212692994_bcf4194494_z.jpg", "id": 60899}, {"license": 1, "file_name": "000000130465.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000130465.jpg", "height": 428, "width": 640, "date_captured": "2013-11-24 15:43:26", "flickr_url": "http://farm8.staticflickr.com/7106/7616873222_8dde05baab_z.jpg", "id": 130465}, {"license": 2, "file_name": "000000470773.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000470773.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 22:35:28", "flickr_url": "http://farm4.staticflickr.com/3746/9561784432_35a837bb19_z.jpg", "id": 470773}, {"license": 3, "file_name": "000000375430.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000375430.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 23:18:11", "flickr_url": "http://farm8.staticflickr.com/7379/8831121154_4cac3301d5_z.jpg", "id": 375430}, {"license": 4, "file_name": "000000484351.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000484351.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 23:52:01", "flickr_url": "http://farm9.staticflickr.com/8232/8528454206_1749cd4960_z.jpg", "id": 484351}, {"license": 4, "file_name": "000000541634.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000541634.jpg", "height": 612, "width": 612, "date_captured": "2013-11-25 08:25:50", "flickr_url": "http://farm6.staticflickr.com/5529/9471702865_6cf3a45fde_z.jpg", "id": 541634}, {"license": 1, "file_name": "000000233238.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000233238.jpg", "height": 640, "width": 480, "date_captured": "2013-11-25 14:13:04", "flickr_url": "http://farm4.staticflickr.com/3695/9672006132_b0fe21a284_z.jpg", "id": 233238}, {"license": 3, "file_name": "000000559513.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000559513.jpg", "height": 421, "width": 640, "date_captured": "2013-11-25 15:09:04", "flickr_url": "http://farm4.staticflickr.com/3731/8969204913_9087b66bf8_z.jpg", "id": 559513}, {"license": 4, "file_name": "000000412362.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000412362.jpg", "height": 499, "width": 640, "date_captured": "2013-11-25 19:39:08", "flickr_url": "http://farm7.staticflickr.com/6055/6220306659_5f590c47cf_z.jpg", "id": 412362}, {"license": 1, "file_name": "000000070739.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000070739.jpg", "height": 480, "width": 640, "date_captured": "2013-11-25 21:26:48", "flickr_url": "http://farm1.staticflickr.com/79/256538714_92f15efcd7_z.jpg", "id": 70739}, {"license": 4, "file_name": "000000210299.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000210299.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 11:04:12", "flickr_url": "http://farm7.staticflickr.com/6199/6207968507_effbfb5a1f_z.jpg", "id": 210299}, {"license": 2, "file_name": "000000078748.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000078748.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 14:42:28", "flickr_url": "http://farm2.staticflickr.com/1072/821953154_8e5312ce36_z.jpg", "id": 78748}, {"license": 4, "file_name": "000000565776.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000565776.jpg", "height": 421, "width": 640, "date_captured": "2013-11-14 16:24:35", "flickr_url": "http://farm7.staticflickr.com/6160/6206762667_b852ea9b7e_z.jpg", "id": 565776}, {"license": 4, "file_name": "000000175364.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000175364.jpg", "height": 461, "width": 614, "date_captured": "2013-11-14 16:38:17", "flickr_url": "http://farm7.staticflickr.com/6097/6267025876_3ee50e015f_z.jpg", "id": 175364}, {"license": 1, "file_name": "000000441247.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000441247.jpg", "height": 424, "width": 640, "date_captured": "2013-11-14 19:18:24", "flickr_url": "http://farm9.staticflickr.com/8150/7567411150_c6fd2d7da5_z.jpg", "id": 441247}, {"license": 4, "file_name": "000000402346.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000402346.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 20:14:53", "flickr_url": "http://farm8.staticflickr.com/7175/6700652861_4d28167e55_z.jpg", "id": 402346}, {"license": 3, "file_name": "000000025096.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000025096.jpg", "height": 500, "width": 375, "date_captured": "2013-11-14 20:20:21", "flickr_url": "http://farm4.staticflickr.com/3214/2507093133_f75be3535a_z.jpg", "id": 25096}, {"license": 3, "file_name": "000000527750.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000527750.jpg", "height": 640, "width": 427, "date_captured": "2013-11-14 22:42:09", "flickr_url": "http://farm7.staticflickr.com/6163/6181875560_84e138e955_z.jpg", "id": 527750}, {"license": 1, "file_name": "000000109055.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000109055.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 23:45:40", "flickr_url": "http://farm1.staticflickr.com/21/37248397_dbe284ca85_z.jpg", "id": 109055}, {"license": 4, "file_name": "000000558073.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000558073.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 00:54:42", "flickr_url": "http://farm1.staticflickr.com/90/208357409_c000a120af_z.jpg", "id": 558073}, {"license": 4, "file_name": "000000370818.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000370818.jpg", "height": 640, "width": 472, "date_captured": "2013-11-15 04:00:08", "flickr_url": "http://farm7.staticflickr.com/6174/6207339226_8de4487f06_z.jpg", "id": 370818}, {"license": 4, "file_name": "000000227511.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000227511.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 05:55:54", "flickr_url": "http://farm4.staticflickr.com/3035/2569060763_a6f46a570d_z.jpg", "id": 227511}, {"license": 2, "file_name": "000000491213.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000491213.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 09:26:21", "flickr_url": "http://farm1.staticflickr.com/58/187193638_5a515951f1_z.jpg", "id": 491213}, {"license": 1, "file_name": "000000263474.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000263474.jpg", "height": 640, "width": 479, "date_captured": "2013-11-15 11:32:32", "flickr_url": "http://farm1.staticflickr.com/96/232009472_c7be603380_z.jpg", "id": 263474}, {"license": 3, "file_name": "000000288062.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000288062.jpg", "height": 640, "width": 519, "date_captured": "2013-11-15 11:35:28", "flickr_url": "http://farm1.staticflickr.com/94/271414658_7f851f9355_z.jpg", "id": 288062}, {"license": 1, "file_name": "000000200839.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000200839.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 11:46:30", "flickr_url": "http://farm3.staticflickr.com/2586/3797937048_ba702b915b_z.jpg", "id": 200839}, {"license": 4, "file_name": "000000469192.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000469192.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 11:49:43", "flickr_url": "http://farm9.staticflickr.com/8016/7671708924_54b6fd2c48_z.jpg", "id": 469192}, {"license": 2, "file_name": "000000328959.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000328959.jpg", "height": 500, "width": 308, "date_captured": "2013-11-15 12:07:06", "flickr_url": "http://farm1.staticflickr.com/85/268521667_4a3057c744_z.jpg", "id": 328959}, {"license": 4, "file_name": "000000325114.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000325114.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 12:59:50", "flickr_url": "http://farm9.staticflickr.com/8486/8175779785_5f987c1562_z.jpg", "id": 325114}, {"license": 4, "file_name": "000000012667.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000012667.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 15:06:56", "flickr_url": "http://farm1.staticflickr.com/197/499050773_995cd1e9bb_z.jpg", "id": 12667}, {"license": 5, "file_name": "000000249025.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000249025.jpg", "height": 500, "width": 394, "date_captured": "2013-11-15 19:48:06", "flickr_url": "http://farm1.staticflickr.com/37/83075908_0f36b4f984_z.jpg", "id": 249025}, {"license": 1, "file_name": "000000214192.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000214192.jpg", "height": 436, "width": 640, "date_captured": "2013-11-15 20:00:23", "flickr_url": "http://farm8.staticflickr.com/7101/7352174174_66ff1758a6_z.jpg", "id": 214192}, {"license": 4, "file_name": "000000042102.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000042102.jpg", "height": 640, "width": 246, "date_captured": "2013-11-15 20:58:02", "flickr_url": "http://farm7.staticflickr.com/6086/6077717404_3994af90dd_z.jpg", "id": 42102}, {"license": 1, "file_name": "000000145620.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000145620.jpg", "height": 436, "width": 640, "date_captured": "2013-11-15 20:58:39", "flickr_url": "http://farm8.staticflickr.com/7185/6905550936_c9859648cf_z.jpg", "id": 145620}, {"license": 1, "file_name": "000000229747.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000229747.jpg", "height": 541, "width": 640, "date_captured": "2013-11-16 04:15:34", "flickr_url": "http://farm6.staticflickr.com/5055/5466212029_aa5f345df7_z.jpg", "id": 229747}, {"license": 5, "file_name": "000000567432.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000567432.jpg", "height": 424, "width": 640, "date_captured": "2013-11-16 04:34:52", "flickr_url": "http://farm6.staticflickr.com/5045/5314595462_5435cc69b5_z.jpg", "id": 567432}, {"license": 4, "file_name": "000000571857.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000571857.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 13:16:55", "flickr_url": "http://farm7.staticflickr.com/6179/6199221017_d5f37ecb01_z.jpg", "id": 571857}, {"license": 2, "file_name": "000000088218.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000088218.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 14:13:25", "flickr_url": "http://farm1.staticflickr.com/82/219269541_e45dfb8b27_z.jpg", "id": 88218}, {"license": 1, "file_name": "000000553511.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000553511.jpg", "height": 333, "width": 500, "date_captured": "2013-11-16 15:03:11", "flickr_url": "http://farm1.staticflickr.com/36/99824426_5abb63acd3_z.jpg", "id": 553511}, {"license": 3, "file_name": "000000528862.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000528862.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 15:08:01", "flickr_url": "http://farm1.staticflickr.com/178/399061791_32e6d4fd66_z.jpg", "id": 528862}, {"license": 5, "file_name": "000000190676.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000190676.jpg", "height": 264, "width": 640, "date_captured": "2013-11-16 15:31:01", "flickr_url": "http://farm6.staticflickr.com/5188/5778265193_3f936771b4_z.jpg", "id": 190676}, {"license": 5, "file_name": "000000170545.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000170545.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 16:57:22", "flickr_url": "http://farm4.staticflickr.com/3637/3422389948_6dd9bf9f4e_z.jpg", "id": 170545}, {"license": 1, "file_name": "000000269942.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000269942.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 17:44:24", "flickr_url": "http://farm2.staticflickr.com/1253/774916131_16eff6059e_z.jpg", "id": 269942}, {"license": 5, "file_name": "000000269682.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000269682.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 18:16:52", "flickr_url": "http://farm3.staticflickr.com/2619/3976157012_3c42386160_z.jpg", "id": 269682}, {"license": 5, "file_name": "000000109441.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000109441.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 18:21:11", "flickr_url": "http://farm2.staticflickr.com/1333/1457570599_f4ddcf54a6_z.jpg", "id": 109441}, {"license": 3, "file_name": "000000001584.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000001584.jpg", "height": 612, "width": 612, "date_captured": "2013-11-16 21:28:33", "flickr_url": "http://farm8.staticflickr.com/7407/9165185795_3ed7135b77_z.jpg", "id": 1584}, {"license": 1, "file_name": "000000289586.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000289586.jpg", "height": 640, "width": 426, "date_captured": "2013-11-16 22:10:55", "flickr_url": "http://farm4.staticflickr.com/3440/3943896711_f976ea3125_z.jpg", "id": 289586}, {"license": 1, "file_name": "000000079034.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000079034.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 22:33:09", "flickr_url": "http://farm9.staticflickr.com/8383/8524698844_3ea704feb2_z.jpg", "id": 79034}, {"license": 5, "file_name": "000000140583.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000140583.jpg", "height": 478, "width": 640, "date_captured": "2013-11-16 23:09:31", "flickr_url": "http://farm3.staticflickr.com/2081/5751829875_65da860dba_z.jpg", "id": 140583}, {"license": 1, "file_name": "000000026926.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000026926.jpg", "height": 640, "width": 423, "date_captured": "2013-11-16 23:19:58", "flickr_url": "http://farm4.staticflickr.com/3293/2799068320_646e3d9b08_z.jpg", "id": 26926}, {"license": 3, "file_name": "000000499775.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000499775.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 23:53:41", "flickr_url": "http://farm9.staticflickr.com/8081/8364121885_eb0a6262bc_z.jpg", "id": 499775}, {"license": 4, "file_name": "000000153632.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000153632.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 23:58:39", "flickr_url": "http://farm3.staticflickr.com/2577/4039827010_75186a4bf5_z.jpg", "id": 153632}, {"license": 1, "file_name": "000000523782.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000523782.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 00:33:12", "flickr_url": "http://farm4.staticflickr.com/3298/3440099332_c5b186bf3c_z.jpg", "id": 523782}, {"license": 1, "file_name": "000000285788.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000285788.jpg", "height": 481, "width": 640, "date_captured": "2013-11-17 00:45:11", "flickr_url": "http://farm4.staticflickr.com/3181/2522413984_61250ca369_z.jpg", "id": 285788}, {"license": 3, "file_name": "000000053529.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000053529.jpg", "height": 333, "width": 500, "date_captured": "2013-11-17 02:43:01", "flickr_url": "http://farm4.staticflickr.com/3632/3377046177_475642c05f_z.jpg", "id": 53529}, {"license": 3, "file_name": "000000042888.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000042888.jpg", "height": 374, "width": 500, "date_captured": "2013-11-17 02:57:20", "flickr_url": "http://farm3.staticflickr.com/2310/2513755363_22f6482790_z.jpg", "id": 42888}, {"license": 2, "file_name": "000000072852.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000072852.jpg", "height": 640, "width": 424, "date_captured": "2013-11-17 04:20:54", "flickr_url": "http://farm7.staticflickr.com/6039/5895847884_1b67929c16_z.jpg", "id": 72852}, {"license": 1, "file_name": "000000153527.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000153527.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 05:10:39", "flickr_url": "http://farm3.staticflickr.com/2475/3950273842_89878d9c1d_z.jpg", "id": 153527}, {"license": 4, "file_name": "000000276707.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000276707.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 05:31:18", "flickr_url": "http://farm4.staticflickr.com/3538/3383985970_ba0377b709_z.jpg", "id": 276707}, {"license": 4, "file_name": "000000184324.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000184324.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 05:31:28", "flickr_url": "http://farm4.staticflickr.com/3568/3364389746_361655c747_z.jpg", "id": 184324}, {"license": 1, "file_name": "000000127624.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000127624.jpg", "height": 612, "width": 612, "date_captured": "2013-11-17 08:17:00", "flickr_url": "http://farm4.staticflickr.com/3788/9355978644_ce80b262f2_z.jpg", "id": 127624}, {"license": 4, "file_name": "000000522940.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000522940.jpg", "height": 640, "width": 511, "date_captured": "2013-11-17 08:50:26", "flickr_url": "http://farm9.staticflickr.com/8382/8560913618_01d706312f_z.jpg", "id": 522940}, {"license": 5, "file_name": "000000460229.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000460229.jpg", "height": 640, "width": 383, "date_captured": "2013-11-17 09:06:19", "flickr_url": "http://farm4.staticflickr.com/3572/5744200926_082c11c43c_z.jpg", "id": 460229}, {"license": 1, "file_name": "000000364587.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000364587.jpg", "height": 422, "width": 640, "date_captured": "2013-11-17 09:40:01", "flickr_url": "http://farm8.staticflickr.com/7290/8874429331_1e06f722e3_z.jpg", "id": 364587}, {"license": 3, "file_name": "000000212072.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000212072.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 10:16:54", "flickr_url": "http://farm4.staticflickr.com/3278/2832857666_58227c2533_z.jpg", "id": 212072}, {"license": 5, "file_name": "000000192607.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000192607.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 17:46:51", "flickr_url": "http://farm6.staticflickr.com/5529/9298728158_2ff276583a_z.jpg", "id": 192607}, {"license": 1, "file_name": "000000052565.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000052565.jpg", "height": 458, "width": 640, "date_captured": "2013-11-17 17:57:40", "flickr_url": "http://farm3.staticflickr.com/2486/3723970712_e9ce7f53dc_z.jpg", "id": 52565}, {"license": 3, "file_name": "000000525247.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000525247.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 18:27:57", "flickr_url": "http://farm8.staticflickr.com/7041/6970360583_6fa3316ba4_z.jpg", "id": 525247}, {"license": 3, "file_name": "000000424545.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000424545.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 20:52:29", "flickr_url": "http://farm4.staticflickr.com/3193/3054220374_d2a3456295_z.jpg", "id": 424545}, {"license": 1, "file_name": "000000416758.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000416758.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 22:24:16", "flickr_url": "http://farm8.staticflickr.com/7245/7228460792_886f05bfaf_z.jpg", "id": 416758}, {"license": 1, "file_name": "000000004395.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000004395.jpg", "height": 640, "width": 425, "date_captured": "2013-11-18 00:35:12", "flickr_url": "http://farm3.staticflickr.com/2598/3914538794_35b8319250_z.jpg", "id": 4395}, {"license": 4, "file_name": "000000490470.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000490470.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 02:04:28", "flickr_url": "http://farm8.staticflickr.com/7026/6581099761_42d4fb4197_z.jpg", "id": 490470}, {"license": 3, "file_name": "000000296657.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000296657.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 03:10:43", "flickr_url": "http://farm7.staticflickr.com/6110/6263248693_4373fd0a45_z.jpg", "id": 296657}, {"license": 3, "file_name": "000000354547.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000354547.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 03:15:30", "flickr_url": "http://farm7.staticflickr.com/6163/6196902217_9007a0675e_z.jpg", "id": 354547}, {"license": 3, "file_name": "000000262048.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000262048.jpg", "height": 612, "width": 612, "date_captured": "2013-11-18 03:34:12", "flickr_url": "http://farm8.staticflickr.com/7188/6872049463_95ddd73db2_z.jpg", "id": 262048}, {"license": 4, "file_name": "000000519208.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000519208.jpg", "height": 406, "width": 640, "date_captured": "2013-11-18 03:59:06", "flickr_url": "http://farm6.staticflickr.com/5443/9135914617_3b723dd387_z.jpg", "id": 519208}, {"license": 1, "file_name": "000000270402.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000270402.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 08:31:14", "flickr_url": "http://farm5.staticflickr.com/4132/5192463695_39f4e82b78_z.jpg", "id": 270402}, {"license": 1, "file_name": "000000250127.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000250127.jpg", "height": 640, "width": 640, "date_captured": "2013-11-18 09:08:45", "flickr_url": "http://farm9.staticflickr.com/8479/8236713500_79db43fcf2_z.jpg", "id": 250127}, {"license": 4, "file_name": "000000549930.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000549930.jpg", "height": 558, "width": 640, "date_captured": "2013-11-18 09:41:59", "flickr_url": "http://farm9.staticflickr.com/8006/7586304304_1a7401a456_z.jpg", "id": 549930}, {"license": 1, "file_name": "000000112626.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000112626.jpg", "height": 640, "width": 423, "date_captured": "2013-11-18 09:45:31", "flickr_url": "http://farm4.staticflickr.com/3119/2391767337_98aec025f6_z.jpg", "id": 112626}, {"license": 4, "file_name": "000000000285.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000000285.jpg", "height": 640, "width": 586, "date_captured": "2013-11-18 13:09:47", "flickr_url": "http://farm8.staticflickr.com/7434/9138147604_c6225224b8_z.jpg", "id": 285}, {"license": 6, "file_name": "000000573391.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000573391.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 14:21:18", "flickr_url": "http://farm8.staticflickr.com/7223/7050877267_0697e5e461_z.jpg", "id": 573391}, {"license": 1, "file_name": "000000447200.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000447200.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 16:35:10", "flickr_url": "http://farm1.staticflickr.com/12/17910756_100079001d_z.jpg", "id": 447200}, {"license": 3, "file_name": "000000261036.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000261036.jpg", "height": 500, "width": 333, "date_captured": "2013-11-18 17:15:04", "flickr_url": "http://farm4.staticflickr.com/3023/2442754976_280921d4e1_z.jpg", "id": 261036}, {"license": 1, "file_name": "000000269932.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000269932.jpg", "height": 500, "width": 375, "date_captured": "2013-11-18 20:26:36", "flickr_url": "http://farm4.staticflickr.com/3077/2507616356_da3a74f899_z.jpg", "id": 269932}, {"license": 1, "file_name": "000000426297.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000426297.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 21:32:30", "flickr_url": "http://farm2.staticflickr.com/1207/526910655_32e51feeb1_z.jpg", "id": 426297}, {"license": 3, "file_name": "000000068933.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000068933.jpg", "height": 313, "width": 500, "date_captured": "2013-11-18 21:58:05", "flickr_url": "http://farm1.staticflickr.com/114/297284215_3012853f3e_z.jpg", "id": 68933}, {"license": 5, "file_name": "000000047571.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000047571.jpg", "height": 640, "width": 639, "date_captured": "2013-11-19 00:02:57", "flickr_url": "http://farm4.staticflickr.com/3771/10008328626_e50e829f0b_z.jpg", "id": 47571}, {"license": 1, "file_name": "000000023126.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000023126.jpg", "height": 428, "width": 640, "date_captured": "2013-11-19 00:07:03", "flickr_url": "http://farm8.staticflickr.com/7397/10129358514_377d39f14d_z.jpg", "id": 23126}, {"license": 2, "file_name": "000000242678.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000242678.jpg", "height": 481, "width": 640, "date_captured": "2013-11-19 02:01:14", "flickr_url": "http://farm3.staticflickr.com/2811/9001972084_d3fc9d2afd_z.jpg", "id": 242678}, {"license": 2, "file_name": "000000229948.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000229948.jpg", "height": 428, "width": 640, "date_captured": "2013-11-19 02:06:49", "flickr_url": "http://farm8.staticflickr.com/7417/8921029351_8e5a047b31_z.jpg", "id": 229948}, {"license": 3, "file_name": "000000451879.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000451879.jpg", "height": 438, "width": 500, "date_captured": "2013-11-19 18:03:12", "flickr_url": "http://farm1.staticflickr.com/114/282680925_9fa59eff9e_z.jpg", "id": 451879}, {"license": 6, "file_name": "000000158660.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000158660.jpg", "height": 612, "width": 612, "date_captured": "2013-11-19 18:23:10", "flickr_url": "http://farm9.staticflickr.com/8378/8540545610_07dea731b7_z.jpg", "id": 158660}, {"license": 2, "file_name": "000000059598.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000059598.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 18:48:00", "flickr_url": "http://farm3.staticflickr.com/2318/2204220668_acb3c4b8a3_z.jpg", "id": 59598}, {"license": 2, "file_name": "000000485480.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000485480.jpg", "height": 281, "width": 640, "date_captured": "2013-11-19 20:28:01", "flickr_url": "http://farm4.staticflickr.com/3405/3491474582_4aca5c466b_z.jpg", "id": 485480}, {"license": 4, "file_name": "000000006012.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000006012.jpg", "height": 531, "width": 640, "date_captured": "2013-11-19 21:15:17", "flickr_url": "http://farm5.staticflickr.com/4030/4281955635_f02ce45926_z.jpg", "id": 6012}, {"license": 3, "file_name": "000000013201.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000013201.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 21:57:52", "flickr_url": "http://farm9.staticflickr.com/8391/8577059857_69c575151f_z.jpg", "id": 13201}, {"license": 2, "file_name": "000000243989.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000243989.jpg", "height": 438, "width": 500, "date_captured": "2013-11-19 22:10:05", "flickr_url": "http://farm1.staticflickr.com/53/183180982_a2ad3ec08d_z.jpg", "id": 243989}, {"license": 3, "file_name": "000000044260.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000044260.jpg", "height": 425, "width": 640, "date_captured": "2013-11-19 23:14:15", "flickr_url": "http://farm9.staticflickr.com/8473/8105668162_6c6dac39f4_z.jpg", "id": 44260}, {"license": 3, "file_name": "000000581357.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000581357.jpg", "height": 612, "width": 612, "date_captured": "2013-11-19 23:24:10", "flickr_url": "http://farm9.staticflickr.com/8203/8258620491_6e1406f4e7_z.jpg", "id": 581357}, {"license": 4, "file_name": "000000476119.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000476119.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 01:19:46", "flickr_url": "http://farm8.staticflickr.com/7046/7062224927_570b4f61f7_z.jpg", "id": 476119}, {"license": 4, "file_name": "000000287667.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000287667.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 07:38:17", "flickr_url": "http://farm1.staticflickr.com/171/456552994_f4f3aba601_z.jpg", "id": 287667}, {"license": 5, "file_name": "000000527784.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000527784.jpg", "height": 512, "width": 640, "date_captured": "2013-11-20 11:29:40", "flickr_url": "http://farm4.staticflickr.com/3110/2291542385_92312a2810_z.jpg", "id": 527784}, {"license": 1, "file_name": "000000179898.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000179898.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 13:34:38", "flickr_url": "http://farm4.staticflickr.com/3277/2739804450_d230a0ac31_z.jpg", "id": 179898}, {"license": 2, "file_name": "000000349152.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000349152.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 14:08:36", "flickr_url": "http://farm1.staticflickr.com/15/21312715_38dbf0ce5c_z.jpg", "id": 349152}, {"license": 6, "file_name": "000000187055.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000187055.jpg", "height": 640, "width": 425, "date_captured": "2013-11-20 15:36:57", "flickr_url": "http://farm4.staticflickr.com/3672/9305310961_5d5bfe2774_z.jpg", "id": 187055}, {"license": 1, "file_name": "000000493334.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000493334.jpg", "height": 311, "width": 500, "date_captured": "2013-11-20 18:16:22", "flickr_url": "http://farm1.staticflickr.com/35/94672746_532683d517_z.jpg", "id": 493334}, {"license": 1, "file_name": "000000318455.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000318455.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 18:46:36", "flickr_url": "http://farm8.staticflickr.com/7219/7159302977_a84f3aef98_z.jpg", "id": 318455}, {"license": 3, "file_name": "000000520659.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000520659.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 19:27:36", "flickr_url": "http://farm4.staticflickr.com/3018/2571970571_cacef4d741_z.jpg", "id": 520659}, {"license": 5, "file_name": "000000465430.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000465430.jpg", "height": 513, "width": 640, "date_captured": "2013-11-20 19:49:33", "flickr_url": "http://farm3.staticflickr.com/2343/2069616548_eac2f134f5_z.jpg", "id": 465430}, {"license": 4, "file_name": "000000209829.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000209829.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 21:52:55", "flickr_url": "http://farm8.staticflickr.com/7036/6968265053_493a3206a2_z.jpg", "id": 209829}, {"license": 4, "file_name": "000000329080.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000329080.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 23:22:07", "flickr_url": "http://farm9.staticflickr.com/8092/8596784421_bdf8db0742_z.jpg", "id": 329080}, {"license": 1, "file_name": "000000190307.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000190307.jpg", "height": 640, "width": 540, "date_captured": "2013-11-20 23:27:20", "flickr_url": "http://farm6.staticflickr.com/5265/5638620761_1f4523914c_z.jpg", "id": 190307}, {"license": 5, "file_name": "000000200421.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000200421.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 01:14:05", "flickr_url": "http://farm4.staticflickr.com/3647/3381904543_0d6865b9e9_z.jpg", "id": 200421}, {"license": 6, "file_name": "000000551820.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000551820.jpg", "height": 425, "width": 640, "date_captured": "2013-11-21 01:16:39", "flickr_url": "http://farm4.staticflickr.com/3690/9305297287_053faa44ee_z.jpg", "id": 551820}, {"license": 3, "file_name": "000000254368.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000254368.jpg", "height": 640, "width": 392, "date_captured": "2013-11-21 01:36:35", "flickr_url": "http://farm6.staticflickr.com/5312/6939262636_6dbf9551b5_z.jpg", "id": 254368}, {"license": 4, "file_name": "000000146489.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000146489.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 03:55:41", "flickr_url": "http://farm4.staticflickr.com/3581/5841328823_0f891d5429_z.jpg", "id": 146489}, {"license": 4, "file_name": "000000438304.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000438304.jpg", "height": 640, "width": 464, "date_captured": "2013-11-21 04:51:20", "flickr_url": "http://farm6.staticflickr.com/5124/5333311458_e88df6ffe4_z.jpg", "id": 438304}, {"license": 4, "file_name": "000000033368.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000033368.jpg", "height": 640, "width": 427, "date_captured": "2013-11-21 05:54:50", "flickr_url": "http://farm5.staticflickr.com/4066/4287990820_0a3c8096ec_z.jpg", "id": 33368}, {"license": 3, "file_name": "000000513041.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000513041.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 05:55:27", "flickr_url": "http://farm4.staticflickr.com/3188/4567981158_dec694345c_z.jpg", "id": 513041}, {"license": 1, "file_name": "000000225757.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000225757.jpg", "height": 367, "width": 500, "date_captured": "2013-11-21 19:16:59", "flickr_url": "http://farm1.staticflickr.com/55/169097150_692db28c2d_z.jpg", "id": 225757}, {"license": 1, "file_name": "000000369310.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000369310.jpg", "height": 640, "width": 395, "date_captured": "2013-11-21 20:02:49", "flickr_url": "http://farm4.staticflickr.com/3137/3016292434_793c7bfd87_z.jpg", "id": 369310}, {"license": 3, "file_name": "000000324614.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000324614.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 20:14:30", "flickr_url": "http://farm7.staticflickr.com/6153/6152986661_41436e64c0_z.jpg", "id": 324614}, {"license": 3, "file_name": "000000302536.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000302536.jpg", "height": 375, "width": 500, "date_captured": "2013-11-21 20:17:37", "flickr_url": "http://farm1.staticflickr.com/142/326289480_6908820dbb_z.jpg", "id": 302536}, {"license": 4, "file_name": "000000031735.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000031735.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 22:03:31", "flickr_url": "http://farm9.staticflickr.com/8153/7139420803_11fba8234f_z.jpg", "id": 31735}, {"license": 3, "file_name": "000000465549.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000465549.jpg", "height": 428, "width": 640, "date_captured": "2013-11-21 22:20:48", "flickr_url": "http://farm3.staticflickr.com/2060/2255289759_39c3d0634f_z.jpg", "id": 465549}, {"license": 3, "file_name": "000000404839.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000404839.jpg", "height": 640, "width": 427, "date_captured": "2013-11-21 22:20:55", "flickr_url": "http://farm3.staticflickr.com/2075/2256090290_80b1219a1d_z.jpg", "id": 404839}, {"license": 4, "file_name": "000000232088.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000232088.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 22:48:22", "flickr_url": "http://farm7.staticflickr.com/6192/6149027966_1904e41f77_z.jpg", "id": 232088}, {"license": 3, "file_name": "000000318138.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000318138.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 23:19:19", "flickr_url": "http://farm2.staticflickr.com/1327/619410897_a285d77ec1_z.jpg", "id": 318138}, {"license": 1, "file_name": "000000378099.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000378099.jpg", "height": 337, "width": 640, "date_captured": "2013-11-22 00:54:25", "flickr_url": "http://farm2.staticflickr.com/1374/1215225336_c404b27ae5_z.jpg", "id": 378099}, {"license": 1, "file_name": "000000154431.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000154431.jpg", "height": 444, "width": 640, "date_captured": "2013-11-22 00:54:58", "flickr_url": "http://farm3.staticflickr.com/2797/4330409752_e3314501b8_z.jpg", "id": 154431}, {"license": 5, "file_name": "000000148620.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000148620.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 01:21:38", "flickr_url": "http://farm1.staticflickr.com/17/21390853_f77d98a68b_z.jpg", "id": 148620}, {"license": 3, "file_name": "000000394677.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000394677.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 02:16:05", "flickr_url": "http://farm4.staticflickr.com/3036/2453596065_6c5654ee32_z.jpg", "id": 394677}, {"license": 4, "file_name": "000000463690.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000463690.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 02:33:59", "flickr_url": "http://farm7.staticflickr.com/6224/6272789669_be80f59938_z.jpg", "id": 463690}, {"license": 4, "file_name": "000000570756.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000570756.jpg", "height": 428, "width": 640, "date_captured": "2013-11-22 18:42:22", "flickr_url": "http://farm4.staticflickr.com/3035/2385648150_d58d525cbe_z.jpg", "id": 570756}, {"license": 2, "file_name": "000000299553.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000299553.jpg", "height": 500, "width": 375, "date_captured": "2013-11-22 20:42:10", "flickr_url": "http://farm1.staticflickr.com/3/5376304_1916fca166_z.jpg", "id": 299553}, {"license": 3, "file_name": "000000281687.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000281687.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 20:58:42", "flickr_url": "http://farm4.staticflickr.com/3290/2351868701_e38e626f19_z.jpg", "id": 281687}, {"license": 4, "file_name": "000000303713.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000303713.jpg", "height": 640, "width": 427, "date_captured": "2013-11-23 04:35:33", "flickr_url": "http://farm4.staticflickr.com/3148/2315297307_c1eb20fdb2_z.jpg", "id": 303713}, {"license": 2, "file_name": "000000521956.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000521956.jpg", "height": 330, "width": 500, "date_captured": "2013-11-23 04:39:35", "flickr_url": "http://farm3.staticflickr.com/2133/2196738152_b1574267a3_z.jpg", "id": 521956}, {"license": 2, "file_name": "000000323496.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000323496.jpg", "height": 398, "width": 500, "date_captured": "2013-11-23 05:32:06", "flickr_url": "http://farm1.staticflickr.com/75/187735209_4dbca19b39_z.jpg", "id": 323496}, {"license": 1, "file_name": "000000348481.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000348481.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 00:41:43", "flickr_url": "http://farm1.staticflickr.com/5/6621169_54503c0183_z.jpg", "id": 348481}, {"license": 1, "file_name": "000000119365.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000119365.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 00:50:43", "flickr_url": "http://farm5.staticflickr.com/4057/4545671306_3f5d875b0b_z.jpg", "id": 119365}, {"license": 4, "file_name": "000000577584.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000577584.jpg", "height": 640, "width": 418, "date_captured": "2013-11-24 05:53:01", "flickr_url": "http://farm7.staticflickr.com/6016/6206725101_edc356109b_z.jpg", "id": 577584}, {"license": 1, "file_name": "000000273420.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000273420.jpg", "height": 400, "width": 500, "date_captured": "2013-11-24 07:35:19", "flickr_url": "http://farm1.staticflickr.com/108/363783376_0b170b1135_z.jpg", "id": 273420}, {"license": 1, "file_name": "000000388927.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000388927.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 09:07:51", "flickr_url": "http://farm3.staticflickr.com/2002/2130647696_7a0a520b43_z.jpg", "id": 388927}, {"license": 2, "file_name": "000000439773.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000439773.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 09:47:06", "flickr_url": "http://farm1.staticflickr.com/14/16216333_868981a6fe_z.jpg", "id": 439773}, {"license": 4, "file_name": "000000308193.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000308193.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 14:51:59", "flickr_url": "http://farm9.staticflickr.com/8217/8314308011_36551aa30b_z.jpg", "id": 308193}, {"license": 1, "file_name": "000000424135.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000424135.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 15:00:32", "flickr_url": "http://farm9.staticflickr.com/8071/8371555013_f9ea5cf21e_z.jpg", "id": 424135}, {"license": 1, "file_name": "000000297562.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000297562.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 20:37:13", "flickr_url": "http://farm8.staticflickr.com/7185/6877866737_a9459dff25_z.jpg", "id": 297562}, {"license": 1, "file_name": "000000123633.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000123633.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 20:59:59", "flickr_url": "http://farm4.staticflickr.com/3025/3097051462_34ae529141_z.jpg", "id": 123633}, {"license": 2, "file_name": "000000286660.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000286660.jpg", "height": 500, "width": 371, "date_captured": "2013-11-24 21:46:12", "flickr_url": "http://farm1.staticflickr.com/94/214481589_e79080ac2f_z.jpg", "id": 286660}, {"license": 3, "file_name": "000000088040.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000088040.jpg", "height": 640, "width": 427, "date_captured": "2013-11-25 15:01:19", "flickr_url": "http://farm3.staticflickr.com/2811/9072505619_5a26949aea_z.jpg", "id": 88040}, {"license": 5, "file_name": "000000404484.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000404484.jpg", "height": 240, "width": 320, "date_captured": "2013-11-14 17:43:15", "flickr_url": "http://farm3.staticflickr.com/2645/4216057008_f835cc6fdf_z.jpg", "id": 404484}, {"license": 4, "file_name": "000000489305.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000489305.jpg", "height": 229, "width": 305, "date_captured": "2013-11-14 20:14:10", "flickr_url": "http://farm4.staticflickr.com/3287/2759721225_ac9f61f6aa_z.jpg", "id": 489305}, {"license": 1, "file_name": "000000491216.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000491216.jpg", "height": 640, "width": 480, "date_captured": "2013-11-14 21:03:25", "flickr_url": "http://farm4.staticflickr.com/3112/2334027060_9911c95416_z.jpg", "id": 491216}, {"license": 3, "file_name": "000000226984.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000226984.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 21:24:48", "flickr_url": "http://farm7.staticflickr.com/6112/6379468161_42f8770c6c_z.jpg", "id": 226984}, {"license": 3, "file_name": "000000222825.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000222825.jpg", "height": 640, "width": 427, "date_captured": "2013-11-14 22:00:19", "flickr_url": "http://farm7.staticflickr.com/6042/6381440385_65b39d2473_z.jpg", "id": 222825}, {"license": 3, "file_name": "000000507037.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000507037.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 02:02:37", "flickr_url": "http://farm8.staticflickr.com/7460/8722353218_0434e124bb_z.jpg", "id": 507037}, {"license": 3, "file_name": "000000384850.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000384850.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 03:35:40", "flickr_url": "http://farm7.staticflickr.com/6091/6377660299_0627d8d8b8_z.jpg", "id": 384850}, {"license": 3, "file_name": "000000034760.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000034760.jpg", "height": 640, "width": 426, "date_captured": "2013-11-15 05:27:18", "flickr_url": "http://farm5.staticflickr.com/4154/4965873967_a6bf053e14_z.jpg", "id": 34760}, {"license": 1, "file_name": "000000260925.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000260925.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 07:16:10", "flickr_url": "http://farm3.staticflickr.com/2665/4235326825_33f8a9fe8f_z.jpg", "id": 260925}, {"license": 3, "file_name": "000000096001.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000096001.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 11:50:31", "flickr_url": "http://farm3.staticflickr.com/2297/2280007087_b1267f53c6_z.jpg", "id": 96001}, {"license": 4, "file_name": "000000574702.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000574702.jpg", "height": 500, "width": 333, "date_captured": "2013-11-15 12:24:51", "flickr_url": "http://farm3.staticflickr.com/2035/2252476376_bfc3cda192_z.jpg", "id": 574702}, {"license": 1, "file_name": "000000245764.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000245764.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 13:00:58", "flickr_url": "http://farm1.staticflickr.com/22/26905606_aac5e77b5b_z.jpg", "id": 245764}, {"license": 5, "file_name": "000000246963.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000246963.jpg", "height": 420, "width": 640, "date_captured": "2013-11-15 13:40:55", "flickr_url": "http://farm7.staticflickr.com/6038/5878125821_37e6cc59e9_z.jpg", "id": 246963}, {"license": 2, "file_name": "000000534664.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000534664.jpg", "height": 404, "width": 640, "date_captured": "2013-11-15 14:14:04", "flickr_url": "http://farm5.staticflickr.com/4090/4983473342_ee2202b76f_z.jpg", "id": 534664}, {"license": 3, "file_name": "000000026564.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000026564.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 15:45:15", "flickr_url": "http://farm1.staticflickr.com/51/149499288_0eb1172e1d_z.jpg", "id": 26564}, {"license": 2, "file_name": "000000408830.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000408830.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 16:03:07", "flickr_url": "http://farm8.staticflickr.com/7381/8988900555_5ca5393141_z.jpg", "id": 408830}, {"license": 3, "file_name": "000000537241.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000537241.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 19:30:01", "flickr_url": "http://farm4.staticflickr.com/3713/9651799677_2af9488925_z.jpg", "id": 537241}, {"license": 3, "file_name": "000000272136.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000272136.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 02:32:51", "flickr_url": "http://farm5.staticflickr.com/4081/4789318999_1b404cb8a6_z.jpg", "id": 272136}, {"license": 3, "file_name": "000000022396.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000022396.jpg", "height": 495, "width": 640, "date_captured": "2013-11-16 05:53:30", "flickr_url": "http://farm6.staticflickr.com/5536/9325354500_0e1582be82_z.jpg", "id": 22396}, {"license": 3, "file_name": "000000132587.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000132587.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 12:17:05", "flickr_url": "http://farm9.staticflickr.com/8147/7276788014_53b9138387_z.jpg", "id": 132587}, {"license": 1, "file_name": "000000225184.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000225184.jpg", "height": 640, "width": 457, "date_captured": "2013-11-16 13:55:29", "flickr_url": "http://farm9.staticflickr.com/8439/7820687506_55d3d69e22_z.jpg", "id": 225184}, {"license": 3, "file_name": "000000441553.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000441553.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 14:04:49", "flickr_url": "http://farm3.staticflickr.com/2334/2272990285_dfdf194c9b_z.jpg", "id": 441553}, {"license": 3, "file_name": "000000055072.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000055072.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 14:19:45", "flickr_url": "http://farm6.staticflickr.com/5532/9515016286_89b5b08a82_z.jpg", "id": 55072}, {"license": 3, "file_name": "000000277584.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000277584.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 14:53:19", "flickr_url": "http://farm3.staticflickr.com/2404/2240113245_411e0ed8ef_z.jpg", "id": 277584}, {"license": 3, "file_name": "000000550349.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000550349.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 16:22:32", "flickr_url": "http://farm7.staticflickr.com/6008/5981982935_d8622013da_z.jpg", "id": 550349}, {"license": 3, "file_name": "000000289659.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000289659.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 17:34:15", "flickr_url": "http://farm8.staticflickr.com/7031/6786602747_b7b811b0d5_z.jpg", "id": 289659}, {"license": 1, "file_name": "000000062353.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000062353.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 19:06:03", "flickr_url": "http://farm5.staticflickr.com/4072/4661821477_88c710afdd_z.jpg", "id": 62353}, {"license": 3, "file_name": "000000193717.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000193717.jpg", "height": 640, "width": 521, "date_captured": "2013-11-16 21:31:33", "flickr_url": "http://farm4.staticflickr.com/3624/3469528919_14bc5927ed_z.jpg", "id": 193717}, {"license": 3, "file_name": "000000565607.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000565607.jpg", "height": 313, "width": 640, "date_captured": "2013-11-16 22:38:23", "flickr_url": "http://farm6.staticflickr.com/5104/5652212374_c170b86206_z.jpg", "id": 565607}, {"license": 3, "file_name": "000000210394.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000210394.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 22:53:11", "flickr_url": "http://farm9.staticflickr.com/8404/8613948465_7a698dd8b4_z.jpg", "id": 210394}, {"license": 3, "file_name": "000000041488.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000041488.jpg", "height": 369, "width": 640, "date_captured": "2013-11-17 00:41:12", "flickr_url": "http://farm4.staticflickr.com/3154/2350555608_4d0d6131e9_z.jpg", "id": 41488}, {"license": 3, "file_name": "000000514540.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000514540.jpg", "height": 640, "width": 429, "date_captured": "2013-11-17 01:08:16", "flickr_url": "http://farm5.staticflickr.com/4112/5086181260_6c3f48d36a_z.jpg", "id": 514540}, {"license": 2, "file_name": "000000065455.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000065455.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 01:17:50", "flickr_url": "http://farm3.staticflickr.com/2339/1956473410_953014c695_z.jpg", "id": 65455}, {"license": 3, "file_name": "000000532530.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000532530.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 01:27:47", "flickr_url": "http://farm3.staticflickr.com/2461/3819672499_7d69c44e49_z.jpg", "id": 532530}, {"license": 3, "file_name": "000000374727.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000374727.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 01:48:19", "flickr_url": "http://farm3.staticflickr.com/2058/2253687629_ddf649bd0e_z.jpg", "id": 374727}, {"license": 3, "file_name": "000000484029.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000484029.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 02:34:09", "flickr_url": "http://farm4.staticflickr.com/3341/3176549785_31fcb689d7_z.jpg", "id": 484029}, {"license": 4, "file_name": "000000402519.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000402519.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 02:46:26", "flickr_url": "http://farm4.staticflickr.com/3715/9727163248_621d1ded0b_z.jpg", "id": 402519}, {"license": 4, "file_name": "000000309452.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000309452.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 02:46:41", "flickr_url": "http://farm6.staticflickr.com/5523/9556185989_32d49ca90f_z.jpg", "id": 309452}, {"license": 3, "file_name": "000000424975.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000424975.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 04:26:02", "flickr_url": "http://farm6.staticflickr.com/5141/5658549871_b6b2bae260_z.jpg", "id": 424975}, {"license": 3, "file_name": "000000323571.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000323571.jpg", "height": 640, "width": 478, "date_captured": "2013-11-17 07:37:17", "flickr_url": "http://farm7.staticflickr.com/6092/6365089565_9c349f5f54_z.jpg", "id": 323571}, {"license": 3, "file_name": "000000500826.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000500826.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 07:54:22", "flickr_url": "http://farm2.staticflickr.com/1100/1034221551_709e38664b_z.jpg", "id": 500826}, {"license": 2, "file_name": "000000368456.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000368456.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 08:23:21", "flickr_url": "http://farm6.staticflickr.com/5477/9299695779_c35215f316_z.jpg", "id": 368456}, {"license": 3, "file_name": "000000501023.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000501023.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 09:47:55", "flickr_url": "http://farm3.staticflickr.com/2121/2450552356_9579f1f550_z.jpg", "id": 501023}, {"license": 3, "file_name": "000000235857.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000235857.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 16:30:29", "flickr_url": "http://farm9.staticflickr.com/8325/8117923354_1381eaa26f_z.jpg", "id": 235857}, {"license": 3, "file_name": "000000081394.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000081394.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 18:31:59", "flickr_url": "http://farm9.staticflickr.com/8256/8615065722_b57e53b1a8_z.jpg", "id": 81394}, {"license": 3, "file_name": "000000264441.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000264441.jpg", "height": 500, "width": 375, "date_captured": "2013-11-17 19:07:06", "flickr_url": "http://farm4.staticflickr.com/3365/3449801011_df7b85546d_z.jpg", "id": 264441}, {"license": 5, "file_name": "000000241326.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000241326.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 19:36:44", "flickr_url": "http://farm1.staticflickr.com/6/74600093_1e3ace7913_z.jpg", "id": 241326}, {"license": 2, "file_name": "000000272049.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000272049.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 20:14:47", "flickr_url": "http://farm8.staticflickr.com/7248/7449377950_d30deae858_z.jpg", "id": 272049}, {"license": 3, "file_name": "000000377946.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000377946.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 21:00:02", "flickr_url": "http://farm8.staticflickr.com/7227/7035289001_c2afff1d55_z.jpg", "id": 377946}, {"license": 1, "file_name": "000000078426.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000078426.jpg", "height": 334, "width": 500, "date_captured": "2013-11-17 21:17:06", "flickr_url": "http://farm3.staticflickr.com/2309/2390094858_f0e56415e9_z.jpg", "id": 78426}, {"license": 3, "file_name": "000000260261.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000260261.jpg", "height": 640, "width": 426, "date_captured": "2013-11-17 21:38:07", "flickr_url": "http://farm8.staticflickr.com/7163/6565710667_eecd09013c_z.jpg", "id": 260261}, {"license": 5, "file_name": "000000399560.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000399560.jpg", "height": 478, "width": 640, "date_captured": "2013-11-17 22:03:56", "flickr_url": "http://farm7.staticflickr.com/6211/6868773848_4d64c5ab2a_z.jpg", "id": 399560}, {"license": 4, "file_name": "000000392818.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000392818.jpg", "height": 451, "width": 500, "date_captured": "2013-11-17 22:12:22", "flickr_url": "http://farm3.staticflickr.com/2446/3572256424_9d106e4692_z.jpg", "id": 392818}, {"license": 2, "file_name": "000000442822.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000442822.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 03:24:58", "flickr_url": "http://farm6.staticflickr.com/5532/10313158854_fdf80f6eed_z.jpg", "id": 442822}, {"license": 4, "file_name": "000000170955.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000170955.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 05:17:40", "flickr_url": "http://farm3.staticflickr.com/2432/3607873670_1d3e8db7bd_z.jpg", "id": 170955}, {"license": 1, "file_name": "000000346905.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000346905.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 06:29:46", "flickr_url": "http://farm8.staticflickr.com/7163/6563092837_871a558e47_z.jpg", "id": 346905}, {"license": 3, "file_name": "000000172617.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000172617.jpg", "height": 500, "width": 375, "date_captured": "2013-11-18 07:27:44", "flickr_url": "http://farm1.staticflickr.com/29/44321343_3914b40c09_z.jpg", "id": 172617}, {"license": 4, "file_name": "000000281759.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000281759.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 08:08:45", "flickr_url": "http://farm8.staticflickr.com/7398/9546010205_60818f8424_z.jpg", "id": 281759}, {"license": 3, "file_name": "000000534270.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000534270.jpg", "height": 421, "width": 521, "date_captured": "2013-11-18 09:33:57", "flickr_url": "http://farm9.staticflickr.com/8017/7650012928_2d5a854761_z.jpg", "id": 534270}, {"license": 2, "file_name": "000000231088.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000231088.jpg", "height": 640, "width": 425, "date_captured": "2013-11-18 10:18:48", "flickr_url": "http://farm8.staticflickr.com/7018/6528434123_c230d3973d_z.jpg", "id": 231088}, {"license": 3, "file_name": "000000044068.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000044068.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 11:27:50", "flickr_url": "http://farm1.staticflickr.com/50/116979227_f90cfed55d_z.jpg", "id": 44068}, {"license": 3, "file_name": "000000159311.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000159311.jpg", "height": 333, "width": 500, "date_captured": "2013-11-18 15:24:06", "flickr_url": "http://farm4.staticflickr.com/3020/2711888546_c683a43296_z.jpg", "id": 159311}, {"license": 2, "file_name": "000000479155.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000479155.jpg", "height": 332, "width": 500, "date_captured": "2013-11-18 16:33:49", "flickr_url": "http://farm3.staticflickr.com/2098/2516183910_baea291327_z.jpg", "id": 479155}, {"license": 4, "file_name": "000000100238.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000100238.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 18:23:34", "flickr_url": "http://farm4.staticflickr.com/3192/5846630152_e082bbc6ea_z.jpg", "id": 100238}, {"license": 4, "file_name": "000000045070.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000045070.jpg", "height": 596, "width": 640, "date_captured": "2013-11-19 01:29:39", "flickr_url": "http://farm4.staticflickr.com/3819/9272204163_a30ebf1d58_z.jpg", "id": 45070}, {"license": 6, "file_name": "000000469828.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000469828.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 18:10:41", "flickr_url": "http://farm8.staticflickr.com/7188/6906297937_5774f68e66_z.jpg", "id": 469828}, {"license": 6, "file_name": "000000136334.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000136334.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 18:10:44", "flickr_url": "http://farm8.staticflickr.com/7036/6906299371_1c11749e35_z.jpg", "id": 136334}, {"license": 2, "file_name": "000000185599.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000185599.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 18:37:35", "flickr_url": "http://farm7.staticflickr.com/6094/6883730720_69ac769336_z.jpg", "id": 185599}, {"license": 1, "file_name": "000000407574.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000407574.jpg", "height": 640, "width": 478, "date_captured": "2013-11-19 19:01:42", "flickr_url": "http://farm9.staticflickr.com/8446/7857456044_401a257790_z.jpg", "id": 407574}, {"license": 4, "file_name": "000000239773.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000239773.jpg", "height": 344, "width": 500, "date_captured": "2013-11-19 19:59:39", "flickr_url": "http://farm3.staticflickr.com/2458/3883298746_df92113101_z.jpg", "id": 239773}, {"license": 2, "file_name": "000000112378.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000112378.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 20:11:36", "flickr_url": "http://farm9.staticflickr.com/8198/8170700668_d50718d41f_z.jpg", "id": 112378}, {"license": 1, "file_name": "000000527029.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000527029.jpg", "height": 640, "width": 640, "date_captured": "2013-11-19 21:24:50", "flickr_url": "http://farm5.staticflickr.com/4024/4267639339_907ed42b03_z.jpg", "id": 527029}, {"license": 3, "file_name": "000000128658.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000128658.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 21:24:53", "flickr_url": "http://farm5.staticflickr.com/4013/4244247244_d9a1500dbc_z.jpg", "id": 128658}, {"license": 1, "file_name": "000000516038.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000516038.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 21:35:22", "flickr_url": "http://farm1.staticflickr.com/218/480310970_37eb9c1f3f_z.jpg", "id": 516038}, {"license": 3, "file_name": "000000538236.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000538236.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 11:48:29", "flickr_url": "http://farm3.staticflickr.com/2561/5776552603_228dc7b502_z.jpg", "id": 538236}, {"license": 3, "file_name": "000000479732.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000479732.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 12:30:54", "flickr_url": "http://farm2.staticflickr.com/1141/5119893763_7ab0025f4f_z.jpg", "id": 479732}, {"license": 3, "file_name": "000000449312.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000449312.jpg", "height": 578, "width": 640, "date_captured": "2013-11-20 13:49:44", "flickr_url": "http://farm8.staticflickr.com/7239/6881953274_d4f1c872d8_z.jpg", "id": 449312}, {"license": 3, "file_name": "000000535523.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000535523.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 14:06:58", "flickr_url": "http://farm9.staticflickr.com/8074/8299471184_9d2b6a79eb_z.jpg", "id": 535523}, {"license": 3, "file_name": "000000419379.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000419379.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 14:15:51", "flickr_url": "http://farm4.staticflickr.com/3801/8751412893_0508b73b5a_z.jpg", "id": 419379}, {"license": 3, "file_name": "000000417608.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000417608.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 14:32:13", "flickr_url": "http://farm9.staticflickr.com/8014/7701685166_ce3f121f0c_z.jpg", "id": 417608}, {"license": 3, "file_name": "000000426795.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000426795.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 15:06:40", "flickr_url": "http://farm5.staticflickr.com/4105/5006976045_06aee204ba_z.jpg", "id": 426795}, {"license": 4, "file_name": "000000529762.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000529762.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 15:27:50", "flickr_url": "http://farm7.staticflickr.com/6190/6111133347_21ab33f11a_z.jpg", "id": 529762}, {"license": 3, "file_name": "000000197004.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000197004.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 15:37:44", "flickr_url": "http://farm4.staticflickr.com/3358/5706778246_2a868ae963_z.jpg", "id": 197004}, {"license": 3, "file_name": "000000405195.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000405195.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 16:07:46", "flickr_url": "http://farm2.staticflickr.com/1212/605060459_300308edf0_z.jpg", "id": 405195}, {"license": 2, "file_name": "000000455448.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000455448.jpg", "height": 640, "width": 478, "date_captured": "2013-11-20 18:24:59", "flickr_url": "http://farm9.staticflickr.com/8445/7988611405_1493d60ef8_z.jpg", "id": 455448}, {"license": 3, "file_name": "000000529939.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000529939.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 18:57:38", "flickr_url": "http://farm6.staticflickr.com/5173/5532812906_0944845145_z.jpg", "id": 529939}, {"license": 1, "file_name": "000000390246.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000390246.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 22:06:19", "flickr_url": "http://farm8.staticflickr.com/7018/6784295945_a090403c79_z.jpg", "id": 390246}, {"license": 1, "file_name": "000000548524.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000548524.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 22:35:05", "flickr_url": "http://farm7.staticflickr.com/6160/6202757122_c60b2a3ebc_z.jpg", "id": 548524}, {"license": 3, "file_name": "000000431568.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000431568.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 23:43:29", "flickr_url": "http://farm8.staticflickr.com/7090/7051254711_fe644696ac_z.jpg", "id": 431568}, {"license": 1, "file_name": "000000039480.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000039480.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 01:24:05", "flickr_url": "http://farm3.staticflickr.com/2072/2522145806_b9cc7730d8_z.jpg", "id": 39480}, {"license": 6, "file_name": "000000493905.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000493905.jpg", "height": 640, "width": 571, "date_captured": "2013-11-21 03:06:42", "flickr_url": "http://farm8.staticflickr.com/7120/7700227118_b8fe78c036_z.jpg", "id": 493905}, {"license": 4, "file_name": "000000120584.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000120584.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 19:33:21", "flickr_url": "http://farm4.staticflickr.com/3264/2870990724_12c0a02f66_z.jpg", "id": 120584}, {"license": 2, "file_name": "000000055528.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000055528.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 19:45:47", "flickr_url": "http://farm3.staticflickr.com/2789/4125569884_1a77595807_z.jpg", "id": 55528}, {"license": 3, "file_name": "000000128148.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000128148.jpg", "height": 428, "width": 640, "date_captured": "2013-11-21 19:54:40", "flickr_url": "http://farm4.staticflickr.com/3277/2933028245_8a7be3098b_z.jpg", "id": 128148}, {"license": 5, "file_name": "000000183049.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000183049.jpg", "height": 640, "width": 427, "date_captured": "2013-11-21 20:43:38", "flickr_url": "http://farm1.staticflickr.com/35/103482887_f53eff4e29_z.jpg", "id": 183049}, {"license": 1, "file_name": "000000139077.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000139077.jpg", "height": 375, "width": 500, "date_captured": "2013-11-21 21:48:19", "flickr_url": "http://farm3.staticflickr.com/2038/2503885075_f248a9d8cd_z.jpg", "id": 139077}, {"license": 3, "file_name": "000000416451.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000416451.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 23:18:24", "flickr_url": "http://farm1.staticflickr.com/212/504773225_0d88501ef5_z.jpg", "id": 416451}, {"license": 2, "file_name": "000000533145.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000533145.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 00:05:24", "flickr_url": "http://farm1.staticflickr.com/139/356129165_5274d44881_z.jpg", "id": 533145}, {"license": 3, "file_name": "000000402765.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000402765.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 00:12:34", "flickr_url": "http://farm1.staticflickr.com/111/317127421_4753c19853_z.jpg", "id": 402765}, {"license": 4, "file_name": "000000255165.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000255165.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 00:51:07", "flickr_url": "http://farm4.staticflickr.com/3476/3267385733_e061c6b8fb_z.jpg", "id": 255165}, {"license": 2, "file_name": "000000527528.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000527528.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 15:26:38", "flickr_url": "http://farm7.staticflickr.com/6089/6151550937_9e66e4dcae_z.jpg", "id": 527528}, {"license": 1, "file_name": "000000459809.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000459809.jpg", "height": 428, "width": 640, "date_captured": "2013-11-22 16:53:02", "flickr_url": "http://farm3.staticflickr.com/2525/3767481748_a928106b4c_z.jpg", "id": 459809}, {"license": 2, "file_name": "000000538067.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000538067.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 16:59:50", "flickr_url": "http://farm3.staticflickr.com/2560/3830201855_d62873254a_z.jpg", "id": 538067}, {"license": 1, "file_name": "000000017959.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000017959.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 18:46:36", "flickr_url": "http://farm4.staticflickr.com/3031/2389030002_e3a04076c3_z.jpg", "id": 17959}, {"license": 1, "file_name": "000000298904.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000298904.jpg", "height": 640, "width": 480, "date_captured": "2013-11-22 19:02:44", "flickr_url": "http://farm2.staticflickr.com/1331/896013444_d746c2803c_z.jpg", "id": 298904}, {"license": 3, "file_name": "000000447088.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000447088.jpg", "height": 333, "width": 500, "date_captured": "2013-11-22 22:55:01", "flickr_url": "http://farm3.staticflickr.com/2381/2411940318_62afdf50c1_z.jpg", "id": 447088}, {"license": 3, "file_name": "000000262487.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000262487.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 23:37:28", "flickr_url": "http://farm5.staticflickr.com/4028/4556603459_e9a7fb0422_z.jpg", "id": 262487}, {"license": 1, "file_name": "000000470924.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000470924.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 04:23:48", "flickr_url": "http://farm3.staticflickr.com/2442/3747222980_f0351f6978_z.jpg", "id": 470924}, {"license": 3, "file_name": "000000421923.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000421923.jpg", "height": 640, "width": 426, "date_captured": "2013-11-23 19:24:51", "flickr_url": "http://farm7.staticflickr.com/6064/6044052436_d1b7d408be_z.jpg", "id": 421923}, {"license": 1, "file_name": "000000178469.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000178469.jpg", "height": 427, "width": 640, "date_captured": "2013-11-23 20:09:26", "flickr_url": "http://farm6.staticflickr.com/5137/5576437926_87f9182960_z.jpg", "id": 178469}, {"license": 1, "file_name": "000000362434.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000362434.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 02:11:55", "flickr_url": "http://farm4.staticflickr.com/3007/2684292681_552af104ca_z.jpg", "id": 362434}, {"license": 1, "file_name": "000000070229.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000070229.jpg", "height": 640, "width": 481, "date_captured": "2013-11-24 02:18:11", "flickr_url": "http://farm8.staticflickr.com/7174/6397141265_aa0f0d8a4e_z.jpg", "id": 70229}, {"license": 1, "file_name": "000000106330.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000106330.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 03:21:31", "flickr_url": "http://farm1.staticflickr.com/152/358741229_dca11914cc_z.jpg", "id": 106330}, {"license": 3, "file_name": "000000545007.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000545007.jpg", "height": 640, "width": 425, "date_captured": "2013-11-24 03:35:53", "flickr_url": "http://farm7.staticflickr.com/6038/6233089292_436fed7fae_z.jpg", "id": 545007}, {"license": 5, "file_name": "000000520077.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000520077.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 05:14:43", "flickr_url": "http://farm1.staticflickr.com/189/510193497_2b98403243_z.jpg", "id": 520077}, {"license": 1, "file_name": "000000454404.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000454404.jpg", "height": 529, "width": 640, "date_captured": "2013-11-24 06:01:49", "flickr_url": "http://farm8.staticflickr.com/7074/7277507016_3336345faa_z.jpg", "id": 454404}, {"license": 1, "file_name": "000000194716.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000194716.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 07:22:46", "flickr_url": "http://farm2.staticflickr.com/1256/1394833860_245f1c77b4_z.jpg", "id": 194716}, {"license": 1, "file_name": "000000202001.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000202001.jpg", "height": 461, "width": 500, "date_captured": "2013-11-24 08:27:40", "flickr_url": "http://farm3.staticflickr.com/2582/4069592097_108bc6f67c_z.jpg", "id": 202001}, {"license": 3, "file_name": "000000155051.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000155051.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 13:26:54", "flickr_url": "http://farm6.staticflickr.com/5493/9828177035_8ef8b39048_z.jpg", "id": 155051}, {"license": 3, "file_name": "000000565469.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000565469.jpg", "height": 640, "width": 426, "date_captured": "2013-11-24 15:19:34", "flickr_url": "http://farm9.staticflickr.com/8030/8017318091_b4ac859a37_z.jpg", "id": 565469}, {"license": 2, "file_name": "000000079588.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000079588.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 15:33:27", "flickr_url": "http://farm9.staticflickr.com/8035/8029590077_e29dc8b581_z.jpg", "id": 79588}, {"license": 3, "file_name": "000000395343.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000395343.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 19:26:32", "flickr_url": "http://farm4.staticflickr.com/3564/3596696790_269d0d976b_z.jpg", "id": 395343}, {"license": 3, "file_name": "000000541773.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000541773.jpg", "height": 480, "width": 640, "date_captured": "2013-11-25 20:12:57", "flickr_url": "http://farm3.staticflickr.com/2737/4324509584_ab775e81eb_z.jpg", "id": 541773}, {"license": 4, "file_name": "000000455597.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000455597.jpg", "height": 446, "width": 640, "date_captured": "2013-11-14 16:24:50", "flickr_url": "http://farm8.staticflickr.com/7171/6594914093_03ba0a761a_z.jpg", "id": 455597}, {"license": 3, "file_name": "000000262895.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000262895.jpg", "height": 500, "width": 334, "date_captured": "2013-11-14 16:45:53", "flickr_url": "http://farm2.staticflickr.com/1087/1116062860_7c6fb94e02_z.jpg", "id": 262895}, {"license": 3, "file_name": "000000433915.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000433915.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 19:04:41", "flickr_url": "http://farm4.staticflickr.com/3519/3243850638_c7c6c7186f_z.jpg", "id": 433915}, {"license": 4, "file_name": "000000540502.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000540502.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 20:41:25", "flickr_url": "http://farm9.staticflickr.com/8319/7947351576_5f05ff91f1_z.jpg", "id": 540502}, {"license": 3, "file_name": "000000172083.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000172083.jpg", "height": 360, "width": 640, "date_captured": "2013-11-14 23:45:48", "flickr_url": "http://farm4.staticflickr.com/3445/3994432023_c0a43f9b1b_z.jpg", "id": 172083}, {"license": 1, "file_name": "000000251140.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000251140.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 03:06:14", "flickr_url": "http://farm1.staticflickr.com/37/86075448_628fbb6873_z.jpg", "id": 251140}, {"license": 3, "file_name": "000000541291.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000541291.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 05:24:16", "flickr_url": "http://farm5.staticflickr.com/4077/4940626716_384565daff_z.jpg", "id": 541291}, {"license": 1, "file_name": "000000105249.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000105249.jpg", "height": 333, "width": 500, "date_captured": "2013-11-15 11:45:48", "flickr_url": "http://farm4.staticflickr.com/3247/3143051749_42a07909d5_z.jpg", "id": 105249}, {"license": 3, "file_name": "000000323202.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000323202.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 12:27:48", "flickr_url": "http://farm3.staticflickr.com/2203/2368084552_f94ac53db1_z.jpg", "id": 323202}, {"license": 1, "file_name": "000000550797.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000550797.jpg", "height": 640, "width": 361, "date_captured": "2013-11-15 12:36:20", "flickr_url": "http://farm5.staticflickr.com/4008/4294021596_6d99894793_z.jpg", "id": 550797}, {"license": 2, "file_name": "000000226662.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000226662.jpg", "height": 453, "width": 640, "date_captured": "2013-11-15 12:45:26", "flickr_url": "http://farm5.staticflickr.com/4016/5127097013_9bab3b1ec2_z.jpg", "id": 226662}, {"license": 3, "file_name": "000000142324.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000142324.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 15:26:49", "flickr_url": "http://farm4.staticflickr.com/3506/3178197954_0b83761bef_z.jpg", "id": 142324}, {"license": 4, "file_name": "000000352618.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000352618.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 18:22:39", "flickr_url": "http://farm1.staticflickr.com/183/416853313_572bdfffa2_z.jpg", "id": 352618}, {"license": 1, "file_name": "000000205514.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000205514.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 00:02:33", "flickr_url": "http://farm8.staticflickr.com/7154/6545076579_94e3972d29_z.jpg", "id": 205514}, {"license": 5, "file_name": "000000205401.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000205401.jpg", "height": 408, "width": 640, "date_captured": "2013-11-16 04:21:23", "flickr_url": "http://farm1.staticflickr.com/143/400309545_6199be36a0_z.jpg", "id": 205401}, {"license": 1, "file_name": "000000144706.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000144706.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 12:27:36", "flickr_url": "http://farm4.staticflickr.com/3487/3284556259_5746dde156_z.jpg", "id": 144706}, {"license": 4, "file_name": "000000221502.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000221502.jpg", "height": 320, "width": 640, "date_captured": "2013-11-16 13:10:33", "flickr_url": "http://farm6.staticflickr.com/5038/5860686869_2762c97773_z.jpg", "id": 221502}, {"license": 5, "file_name": "000000520324.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000520324.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 13:23:24", "flickr_url": "http://farm2.staticflickr.com/1254/5130147192_a2f29e8ea1_z.jpg", "id": 520324}, {"license": 1, "file_name": "000000491470.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000491470.jpg", "height": 500, "width": 375, "date_captured": "2013-11-16 16:24:08", "flickr_url": "http://farm5.staticflickr.com/4002/4364843923_0f4f0c5eba_z.jpg", "id": 491470}, {"license": 3, "file_name": "000000454661.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000454661.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 18:15:17", "flickr_url": "http://farm5.staticflickr.com/4008/4682770107_e89efb3ae2_z.jpg", "id": 454661}, {"license": 4, "file_name": "000000183246.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000183246.jpg", "height": 400, "width": 500, "date_captured": "2013-11-16 18:53:13", "flickr_url": "http://farm3.staticflickr.com/2259/2469205788_1473198ae0_z.jpg", "id": 183246}, {"license": 1, "file_name": "000000303305.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000303305.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 20:28:42", "flickr_url": "http://farm4.staticflickr.com/3753/9533643579_ddf338f491_z.jpg", "id": 303305}, {"license": 2, "file_name": "000000097988.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000097988.jpg", "height": 612, "width": 612, "date_captured": "2013-11-16 21:25:34", "flickr_url": "http://farm4.staticflickr.com/3776/8915831253_be956c6851_z.jpg", "id": 97988}, {"license": 1, "file_name": "000000179265.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000179265.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 21:30:16", "flickr_url": "http://farm4.staticflickr.com/3687/9208871949_4c6df39740_z.jpg", "id": 179265}, {"license": 2, "file_name": "000000338625.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000338625.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 21:39:30", "flickr_url": "http://farm6.staticflickr.com/5471/9063817118_fb589ae433_z.jpg", "id": 338625}, {"license": 1, "file_name": "000000005992.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000005992.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 21:51:01", "flickr_url": "http://farm8.staticflickr.com/7226/7032573451_f9eb53fe56_z.jpg", "id": 5992}, {"license": 4, "file_name": "000000186938.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000186938.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 22:28:16", "flickr_url": "http://farm5.staticflickr.com/4033/4547499012_0b65368ae5_z.jpg", "id": 186938}, {"license": 2, "file_name": "000000203294.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000203294.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 22:30:35", "flickr_url": "http://farm9.staticflickr.com/8398/8686137020_2ca292f1dd_z.jpg", "id": 203294}, {"license": 1, "file_name": "000000002923.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000002923.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 22:44:05", "flickr_url": "http://farm1.staticflickr.com/33/50021670_bfce600523_z.jpg", "id": 2923}, {"license": 1, "file_name": "000000047010.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000047010.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 00:11:33", "flickr_url": "http://farm4.staticflickr.com/3275/2927181286_0ca2edb301_z.jpg", "id": 47010}, {"license": 1, "file_name": "000000406997.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000406997.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 00:47:28", "flickr_url": "http://farm5.staticflickr.com/4097/4934088302_28c1a4de5f_z.jpg", "id": 406997}, {"license": 2, "file_name": "000000185157.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000185157.jpg", "height": 640, "width": 426, "date_captured": "2013-11-17 02:11:00", "flickr_url": "http://farm5.staticflickr.com/4037/5075371191_1d6b0497f6_z.jpg", "id": 185157}, {"license": 1, "file_name": "000000402096.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000402096.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 02:13:02", "flickr_url": "http://farm4.staticflickr.com/3037/2806714465_b98847e2fc_z.jpg", "id": 402096}, {"license": 4, "file_name": "000000353518.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000353518.jpg", "height": 414, "width": 640, "date_captured": "2013-11-17 02:52:21", "flickr_url": "http://farm4.staticflickr.com/3613/3416975716_bf15066363_z.jpg", "id": 353518}, {"license": 5, "file_name": "000000356169.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000356169.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 03:58:50", "flickr_url": "http://farm8.staticflickr.com/7065/6784281076_91f1ea4996_z.jpg", "id": 356169}, {"license": 1, "file_name": "000000475365.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000475365.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 04:13:17", "flickr_url": "http://farm1.staticflickr.com/7/10919058_47132d045d_z.jpg", "id": 475365}, {"license": 5, "file_name": "000000550084.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000550084.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 04:58:46", "flickr_url": "http://farm5.staticflickr.com/4040/4346202822_75eda1321f_z.jpg", "id": 550084}, {"license": 4, "file_name": "000000225946.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000225946.jpg", "height": 463, "width": 640, "date_captured": "2013-11-17 05:46:36", "flickr_url": "http://farm7.staticflickr.com/6177/6145187089_cab183aab3_z.jpg", "id": 225946}, {"license": 5, "file_name": "000000553339.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000553339.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 05:49:55", "flickr_url": "http://farm4.staticflickr.com/3084/2829150758_84d079bcb5_z.jpg", "id": 553339}, {"license": 5, "file_name": "000000463618.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000463618.jpg", "height": 451, "width": 640, "date_captured": "2013-11-17 06:12:35", "flickr_url": "http://farm4.staticflickr.com/3759/9333776974_cac84c92d8_z.jpg", "id": 463618}, {"license": 3, "file_name": "000000200152.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000200152.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 07:00:49", "flickr_url": "http://farm1.staticflickr.com/129/351978092_6adc64c847_z.jpg", "id": 200152}, {"license": 3, "file_name": "000000148999.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000148999.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 08:17:32", "flickr_url": "http://farm3.staticflickr.com/2848/9343952414_29967b3cc4_z.jpg", "id": 148999}, {"license": 2, "file_name": "000000414133.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000414133.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 09:08:07", "flickr_url": "http://farm6.staticflickr.com/5264/5645800004_8431283a85_z.jpg", "id": 414133}, {"license": 1, "file_name": "000000193884.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000193884.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 09:17:02", "flickr_url": "http://farm5.staticflickr.com/4048/4500839547_26a236aa5d_z.jpg", "id": 193884}, {"license": 2, "file_name": "000000475484.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000475484.jpg", "height": 640, "width": 426, "date_captured": "2013-11-17 11:16:03", "flickr_url": "http://farm8.staticflickr.com/7178/6922230747_2f4dc0572f_z.jpg", "id": 475484}, {"license": 2, "file_name": "000000455219.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000455219.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 16:20:19", "flickr_url": "http://farm9.staticflickr.com/8289/7677387644_e1278521ba_z.jpg", "id": 455219}, {"license": 3, "file_name": "000000198805.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000198805.jpg", "height": 398, "width": 640, "date_captured": "2013-11-17 17:43:59", "flickr_url": "http://farm6.staticflickr.com/5321/9240541056_89b86a9cdb_z.jpg", "id": 198805}, {"license": 3, "file_name": "000000041633.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000041633.jpg", "height": 429, "width": 640, "date_captured": "2013-11-17 20:14:59", "flickr_url": "http://farm8.staticflickr.com/7255/7496224340_2220598a32_z.jpg", "id": 41633}, {"license": 1, "file_name": "000000133233.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000133233.jpg", "height": 361, "width": 640, "date_captured": "2013-11-18 03:13:18", "flickr_url": "http://farm4.staticflickr.com/3005/3054732003_703d14322c_z.jpg", "id": 133233}, {"license": 3, "file_name": "000000359135.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000359135.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 03:58:37", "flickr_url": "http://farm9.staticflickr.com/8413/8938716436_836c8cbcf1_z.jpg", "id": 359135}, {"license": 5, "file_name": "000000080949.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000080949.jpg", "height": 438, "width": 640, "date_captured": "2013-11-18 04:07:48", "flickr_url": "http://farm3.staticflickr.com/2221/2232846153_5eee9c75fc_z.jpg", "id": 80949}, {"license": 3, "file_name": "000000167067.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000167067.jpg", "height": 500, "width": 375, "date_captured": "2013-11-18 04:35:31", "flickr_url": "http://farm3.staticflickr.com/2518/4138329859_be77a015c7_z.jpg", "id": 167067}, {"license": 4, "file_name": "000000150224.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000150224.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 05:05:17", "flickr_url": "http://farm1.staticflickr.com/202/478747964_7c8a47a4fe_z.jpg", "id": 150224}, {"license": 1, "file_name": "000000136633.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000136633.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 07:13:39", "flickr_url": "http://farm4.staticflickr.com/3219/3140479564_3c4fd85231_z.jpg", "id": 136633}, {"license": 4, "file_name": "000000490171.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000490171.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 08:08:41", "flickr_url": "http://farm2.staticflickr.com/1396/552454479_2adb976eb8_z.jpg", "id": 490171}, {"license": 4, "file_name": "000000462728.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000462728.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 08:08:47", "flickr_url": "http://farm2.staticflickr.com/1031/552459283_e29e35c3ac_z.jpg", "id": 462728}, {"license": 3, "file_name": "000000493772.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000493772.jpg", "height": 640, "width": 640, "date_captured": "2013-11-18 08:57:04", "flickr_url": "http://farm9.staticflickr.com/8380/8464933036_3902853b7e_z.jpg", "id": 493772}, {"license": 1, "file_name": "000000356125.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000356125.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 09:21:40", "flickr_url": "http://farm5.staticflickr.com/4044/4700894587_75ca790bf5_z.jpg", "id": 356125}, {"license": 1, "file_name": "000000476514.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000476514.jpg", "height": 640, "width": 426, "date_captured": "2013-11-18 09:37:17", "flickr_url": "http://farm9.staticflickr.com/8176/7947606390_a223ce24d6_z.jpg", "id": 476514}, {"license": 4, "file_name": "000000526728.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000526728.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 10:19:37", "flickr_url": "http://farm1.staticflickr.com/48/110025548_2354dbb701_z.jpg", "id": 526728}, {"license": 2, "file_name": "000000509403.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000509403.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 12:40:42", "flickr_url": "http://farm4.staticflickr.com/3400/4618407241_a8f613ea05_z.jpg", "id": 509403}, {"license": 1, "file_name": "000000484296.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000484296.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 14:53:15", "flickr_url": "http://farm5.staticflickr.com/4100/4743702630_a1047200ee_z.jpg", "id": 484296}, {"license": 1, "file_name": "000000244592.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000244592.jpg", "height": 374, "width": 500, "date_captured": "2013-11-18 22:19:45", "flickr_url": "http://farm1.staticflickr.com/23/30117391_bf7796298f_z.jpg", "id": 244592}, {"license": 1, "file_name": "000000387098.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000387098.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 18:00:42", "flickr_url": "http://farm4.staticflickr.com/3083/3138265194_b2d0f11ed0_z.jpg", "id": 387098}, {"license": 3, "file_name": "000000188906.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000188906.jpg", "height": 364, "width": 500, "date_captured": "2013-11-19 18:48:20", "flickr_url": "http://farm3.staticflickr.com/2646/3776881814_8868271f4d_z.jpg", "id": 188906}, {"license": 4, "file_name": "000000192670.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000192670.jpg", "height": 433, "width": 640, "date_captured": "2013-11-19 19:15:08", "flickr_url": "http://farm7.staticflickr.com/6137/5931706250_072cc90a24_z.jpg", "id": 192670}, {"license": 1, "file_name": "000000324715.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000324715.jpg", "height": 333, "width": 500, "date_captured": "2013-11-19 22:16:56", "flickr_url": "http://farm1.staticflickr.com/84/244801562_344c8a946a_z.jpg", "id": 324715}, {"license": 1, "file_name": "000000567898.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000567898.jpg", "height": 454, "width": 640, "date_captured": "2013-11-20 01:10:54", "flickr_url": "http://farm2.staticflickr.com/1428/543114026_30abfddf1e_z.jpg", "id": 567898}, {"license": 3, "file_name": "000000270677.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000270677.jpg", "height": 640, "width": 634, "date_captured": "2013-11-20 05:32:23", "flickr_url": "http://farm2.staticflickr.com/1277/4698453718_76328322f2_z.jpg", "id": 270677}, {"license": 3, "file_name": "000000291551.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000291551.jpg", "height": 640, "width": 428, "date_captured": "2013-11-20 05:32:29", "flickr_url": "http://farm2.staticflickr.com/1277/4697841183_efac9a2d7d_z.jpg", "id": 291551}, {"license": 2, "file_name": "000000293858.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000293858.jpg", "height": 451, "width": 500, "date_captured": "2013-11-20 11:47:05", "flickr_url": "http://farm3.staticflickr.com/2421/3969350296_2a59437bc3_z.jpg", "id": 293858}, {"license": 4, "file_name": "000000523957.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000523957.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 12:12:19", "flickr_url": "http://farm3.staticflickr.com/2079/2660283696_07138cec04_z.jpg", "id": 523957}, {"license": 5, "file_name": "000000089078.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000089078.jpg", "height": 640, "width": 479, "date_captured": "2013-11-20 12:16:48", "flickr_url": "http://farm9.staticflickr.com/8087/8353842968_0fb221e792_z.jpg", "id": 89078}, {"license": 1, "file_name": "000000322574.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000322574.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 13:21:33", "flickr_url": "http://farm2.staticflickr.com/1002/1193542181_2e40c0fdd3_z.jpg", "id": 322574}, {"license": 1, "file_name": "000000344100.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000344100.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 15:03:55", "flickr_url": "http://farm8.staticflickr.com/7022/6715900215_f5afb101db_z.jpg", "id": 344100}, {"license": 2, "file_name": "000000084674.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000084674.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 16:18:02", "flickr_url": "http://farm1.staticflickr.com/91/218080056_2cfd654322_z.jpg", "id": 84674}, {"license": 1, "file_name": "000000246883.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000246883.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 17:13:40", "flickr_url": "http://farm4.staticflickr.com/3067/2869541146_a627d12677_z.jpg", "id": 246883}, {"license": 4, "file_name": "000000142971.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000142971.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 18:14:05", "flickr_url": "http://farm4.staticflickr.com/3316/5826779045_d3fb84f09b_z.jpg", "id": 142971}, {"license": 4, "file_name": "000000054164.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000054164.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 19:12:37", "flickr_url": "http://farm3.staticflickr.com/2516/3973938540_7aa9b27812_z.jpg", "id": 54164}, {"license": 4, "file_name": "000000335328.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000335328.jpg", "height": 640, "width": 512, "date_captured": "2013-11-20 19:29:37", "flickr_url": "http://farm3.staticflickr.com/2079/2128089396_ddd988a59a_z.jpg", "id": 335328}, {"license": 4, "file_name": "000000453040.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000453040.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 20:30:44", "flickr_url": "http://farm6.staticflickr.com/5327/8834178988_33ecf210db_z.jpg", "id": 453040}, {"license": 4, "file_name": "000000462371.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000462371.jpg", "height": 401, "width": 500, "date_captured": "2013-11-20 20:31:01", "flickr_url": "http://farm6.staticflickr.com/5322/8756476018_13876b971a_z.jpg", "id": 462371}, {"license": 1, "file_name": "000000365095.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000365095.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 22:02:32", "flickr_url": "http://farm9.staticflickr.com/8429/7742576966_db2af0ddd5_z.jpg", "id": 365095}, {"license": 1, "file_name": "000000536038.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000536038.jpg", "height": 640, "width": 358, "date_captured": "2013-11-20 22:26:33", "flickr_url": "http://farm9.staticflickr.com/8068/8197547397_2bd524d26b_z.jpg", "id": 536038}, {"license": 1, "file_name": "000000241668.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000241668.jpg", "height": 640, "width": 460, "date_captured": "2013-11-20 22:27:50", "flickr_url": "http://farm9.staticflickr.com/8040/7986877776_79afc50f42_z.jpg", "id": 241668}, {"license": 2, "file_name": "000000065074.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000065074.jpg", "height": 640, "width": 424, "date_captured": "2013-11-20 22:53:50", "flickr_url": "http://farm4.staticflickr.com/3119/4554766970_29bc33e065_z.jpg", "id": 65074}, {"license": 4, "file_name": "000000415882.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000415882.jpg", "height": 640, "width": 544, "date_captured": "2013-11-21 00:10:32", "flickr_url": "http://farm3.staticflickr.com/2863/9433121554_a89e42c996_z.jpg", "id": 415882}, {"license": 2, "file_name": "000000238013.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000238013.jpg", "height": 334, "width": 500, "date_captured": "2013-11-21 05:52:51", "flickr_url": "http://farm5.staticflickr.com/4064/4292674351_0f2a73d2a9_z.jpg", "id": 238013}, {"license": 3, "file_name": "000000571598.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000571598.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 20:34:06", "flickr_url": "http://farm5.staticflickr.com/4140/5034113821_375c8f10cf_z.jpg", "id": 571598}, {"license": 3, "file_name": "000000419601.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000419601.jpg", "height": 329, "width": 500, "date_captured": "2013-11-22 01:51:57", "flickr_url": "http://farm4.staticflickr.com/3421/3732930545_e6ebbaeaf3_z.jpg", "id": 419601}, {"license": 3, "file_name": "000000473821.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000473821.jpg", "height": 333, "width": 500, "date_captured": "2013-11-22 02:59:27", "flickr_url": "http://farm4.staticflickr.com/3610/3361019695_1005dd49fd_z.jpg", "id": 473821}, {"license": 2, "file_name": "000000084362.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000084362.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 03:17:53", "flickr_url": "http://farm4.staticflickr.com/3529/3286653136_27cd84dfd8_z.jpg", "id": 84362}, {"license": 1, "file_name": "000000474293.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000474293.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 15:20:09", "flickr_url": "http://farm1.staticflickr.com/160/430142582_010f4c137f_z.jpg", "id": 474293}, {"license": 2, "file_name": "000000256775.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000256775.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 15:29:48", "flickr_url": "http://farm7.staticflickr.com/6025/5992615122_1a4905f907_z.jpg", "id": 256775}, {"license": 3, "file_name": "000000506004.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000506004.jpg", "height": 439, "width": 640, "date_captured": "2013-11-22 22:32:55", "flickr_url": "http://farm1.staticflickr.com/172/421715600_666b0f6a2b_z.jpg", "id": 506004}, {"license": 4, "file_name": "000000270908.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000270908.jpg", "height": 299, "width": 500, "date_captured": "2013-11-23 02:56:18", "flickr_url": "http://farm4.staticflickr.com/3474/3875628760_a9c353f71a_z.jpg", "id": 270908}, {"license": 4, "file_name": "000000379332.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000379332.jpg", "height": 334, "width": 500, "date_captured": "2013-11-23 03:07:38", "flickr_url": "http://farm4.staticflickr.com/3646/3629717448_50fd2e7bab_z.jpg", "id": 379332}, {"license": 3, "file_name": "000000193743.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000193743.jpg", "height": 640, "width": 427, "date_captured": "2013-11-23 03:45:51", "flickr_url": "http://farm4.staticflickr.com/3269/2977580128_3a80e1d8fc_z.jpg", "id": 193743}, {"license": 1, "file_name": "000000331317.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000331317.jpg", "height": 484, "width": 640, "date_captured": "2013-11-23 17:02:26", "flickr_url": "http://farm1.staticflickr.com/217/510053761_7cc598a801_z.jpg", "id": 331317}, {"license": 5, "file_name": "000000215778.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000215778.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 01:06:55", "flickr_url": "http://farm3.staticflickr.com/2550/3728951244_f7df6b91ba_z.jpg", "id": 215778}, {"license": 1, "file_name": "000000145020.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000145020.jpg", "height": 361, "width": 640, "date_captured": "2013-11-24 03:08:03", "flickr_url": "http://farm4.staticflickr.com/3114/3198162711_41230fedb1_z.jpg", "id": 145020}, {"license": 1, "file_name": "000000172396.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000172396.jpg", "height": 351, "width": 640, "date_captured": "2013-11-24 04:22:08", "flickr_url": "http://farm1.staticflickr.com/109/278341089_9d0bb43757_z.jpg", "id": 172396}, {"license": 3, "file_name": "000000419653.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000419653.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 04:54:48", "flickr_url": "http://farm1.staticflickr.com/120/304375762_a1ee10bd0f_z.jpg", "id": 419653}, {"license": 3, "file_name": "000000073153.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000073153.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 07:08:58", "flickr_url": "http://farm4.staticflickr.com/3191/2591407061_32ab78b701_z.jpg", "id": 73153}, {"license": 1, "file_name": "000000560911.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000560911.jpg", "height": 640, "width": 481, "date_captured": "2013-11-24 09:07:06", "flickr_url": "http://farm3.staticflickr.com/2140/2157319947_88505fcfe3_z.jpg", "id": 560911}, {"license": 3, "file_name": "000000263425.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000263425.jpg", "height": 428, "width": 640, "date_captured": "2013-11-24 10:28:13", "flickr_url": "http://farm2.staticflickr.com/1266/4662377471_4d16b614a7_z.jpg", "id": 263425}, {"license": 3, "file_name": "000000024243.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000024243.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 11:21:46", "flickr_url": "http://farm8.staticflickr.com/7229/7230881318_e8066a21cb_z.jpg", "id": 24243}, {"license": 1, "file_name": "000000544306.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000544306.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 14:39:04", "flickr_url": "http://farm9.staticflickr.com/8228/8594740955_5054bdc184_z.jpg", "id": 544306}, {"license": 1, "file_name": "000000135890.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000135890.jpg", "height": 640, "width": 428, "date_captured": "2013-11-24 16:19:26", "flickr_url": "http://farm8.staticflickr.com/7105/7009547825_71de940e8d_z.jpg", "id": 135890}, {"license": 6, "file_name": "000000060363.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000060363.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 16:28:22", "flickr_url": "http://farm8.staticflickr.com/7170/6732753689_c58746db5a_z.jpg", "id": 60363}, {"license": 4, "file_name": "000000142620.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000142620.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 22:22:34", "flickr_url": "http://farm8.staticflickr.com/7375/9756491185_311b0b2b7d_z.jpg", "id": 142620}, {"license": 1, "file_name": "000000066771.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000066771.jpg", "height": 480, "width": 640, "date_captured": "2013-11-25 08:01:55", "flickr_url": "http://farm8.staticflickr.com/7326/9757709634_5b1dcf5699_z.jpg", "id": 66771}, {"license": 4, "file_name": "000000066817.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000066817.jpg", "height": 612, "width": 612, "date_captured": "2013-11-25 13:54:54", "flickr_url": "http://farm8.staticflickr.com/7279/7864913910_9e85e0a82a_z.jpg", "id": 66817}, {"license": 5, "file_name": "000000370486.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000370486.jpg", "height": 640, "width": 421, "date_captured": "2013-11-14 12:37:38", "flickr_url": "http://farm4.staticflickr.com/3823/9173218034_5fef21a1e0_z.jpg", "id": 370486}, {"license": 1, "file_name": "000000017899.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000017899.jpg", "height": 640, "width": 480, "date_captured": "2013-11-14 15:45:58", "flickr_url": "http://farm8.staticflickr.com/7031/6746562893_cbf91d331c_z.jpg", "id": 17899}, {"license": 3, "file_name": "000000109976.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000109976.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 18:02:59", "flickr_url": "http://farm8.staticflickr.com/7293/9328108723_480ed7ce09_z.jpg", "id": 109976}, {"license": 1, "file_name": "000000066841.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000066841.jpg", "height": 500, "width": 336, "date_captured": "2013-11-14 19:21:35", "flickr_url": "http://farm4.staticflickr.com/3307/3226603405_726a0904ec_z.jpg", "id": 66841}, {"license": 3, "file_name": "000000098018.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000098018.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 20:33:56", "flickr_url": "http://farm3.staticflickr.com/2880/9679089834_abec77c142_z.jpg", "id": 98018}, {"license": 4, "file_name": "000000301376.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000301376.jpg", "height": 500, "width": 333, "date_captured": "2013-11-14 22:36:36", "flickr_url": "http://farm4.staticflickr.com/3059/2718408461_4af7105d49_z.jpg", "id": 301376}, {"license": 2, "file_name": "000000047121.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000047121.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 00:22:12", "flickr_url": "http://farm2.staticflickr.com/1432/1439410299_012ca34a4e_z.jpg", "id": 47121}, {"license": 2, "file_name": "000000289343.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000289343.jpg", "height": 640, "width": 529, "date_captured": "2013-11-15 00:35:14", "flickr_url": "http://farm5.staticflickr.com/4029/4669549715_7db3735de0_z.jpg", "id": 289343}, {"license": 1, "file_name": "000000068078.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000068078.jpg", "height": 640, "width": 360, "date_captured": "2013-11-15 05:58:05", "flickr_url": "http://farm5.staticflickr.com/4017/4331592297_aa22c03ebe_z.jpg", "id": 68078}, {"license": 3, "file_name": "000000327769.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000327769.jpg", "height": 424, "width": 640, "date_captured": "2013-11-15 06:32:50", "flickr_url": "http://farm1.staticflickr.com/207/501495782_5d0ed9299e_z.jpg", "id": 327769}, {"license": 1, "file_name": "000000092124.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000092124.jpg", "height": 640, "width": 360, "date_captured": "2013-11-15 06:35:30", "flickr_url": "http://farm5.staticflickr.com/4029/4332325274_a67dd8ce06_z.jpg", "id": 92124}, {"license": 3, "file_name": "000000368335.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000368335.jpg", "height": 640, "width": 411, "date_captured": "2013-11-15 08:23:27", "flickr_url": "http://farm5.staticflickr.com/4017/4700782863_28d7cdb1f7_z.jpg", "id": 368335}, {"license": 3, "file_name": "000000457848.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000457848.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 15:39:24", "flickr_url": "http://farm4.staticflickr.com/3761/9225600489_4696266a3c_z.jpg", "id": 457848}, {"license": 2, "file_name": "000000578792.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000578792.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 16:38:34", "flickr_url": "http://farm9.staticflickr.com/8529/8636983627_f01c940e62_z.jpg", "id": 578792}, {"license": 5, "file_name": "000000002149.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000002149.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 17:24:57", "flickr_url": "http://farm4.staticflickr.com/3598/3330055100_17454411a4_z.jpg", "id": 2149}, {"license": 1, "file_name": "000000275749.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000275749.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 17:37:23", "flickr_url": "http://farm1.staticflickr.com/85/245621449_9ab03c5769_z.jpg", "id": 275749}, {"license": 5, "file_name": "000000192871.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000192871.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 18:08:58", "flickr_url": "http://farm4.staticflickr.com/3115/3164630720_5de3a5f1da_z.jpg", "id": 192871}, {"license": 6, "file_name": "000000468925.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000468925.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 19:09:29", "flickr_url": "http://farm5.staticflickr.com/4145/5207229268_8f6d92514f_z.jpg", "id": 468925}, {"license": 2, "file_name": "000000276284.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000276284.jpg", "height": 640, "width": 500, "date_captured": "2013-11-15 20:25:14", "flickr_url": "http://farm1.staticflickr.com/191/447987665_562cd7663a_z.jpg", "id": 276284}, {"license": 5, "file_name": "000000085376.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000085376.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 21:08:59", "flickr_url": "http://farm8.staticflickr.com/7059/6867232585_0d4ea34bae_z.jpg", "id": 85376}, {"license": 6, "file_name": "000000196185.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000196185.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 01:57:42", "flickr_url": "http://farm5.staticflickr.com/4017/5156481243_7ef0672743_z.jpg", "id": 196185}, {"license": 3, "file_name": "000000071711.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000071711.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 02:30:39", "flickr_url": "http://farm7.staticflickr.com/6174/6245331208_9923e02535_z.jpg", "id": 71711}, {"license": 5, "file_name": "000000423798.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000423798.jpg", "height": 320, "width": 640, "date_captured": "2013-11-16 12:06:34", "flickr_url": "http://farm9.staticflickr.com/8040/7887562382_bbb9908900_z.jpg", "id": 423798}, {"license": 1, "file_name": "000000288584.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000288584.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 12:34:56", "flickr_url": "http://farm1.staticflickr.com/151/362223710_1e7722b711_z.jpg", "id": 288584}, {"license": 2, "file_name": "000000098716.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000098716.jpg", "height": 359, "width": 640, "date_captured": "2013-11-16 12:36:16", "flickr_url": "http://farm6.staticflickr.com/5312/5898831926_472d59fa28_z.jpg", "id": 98716}, {"license": 6, "file_name": "000000066561.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000066561.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 12:36:55", "flickr_url": "http://farm9.staticflickr.com/8120/8645472421_c85fff566a_z.jpg", "id": 66561}, {"license": 2, "file_name": "000000217060.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000217060.jpg", "height": 440, "width": 640, "date_captured": "2013-11-16 13:13:57", "flickr_url": "http://farm6.staticflickr.com/5336/8928917728_dc951855ae_z.jpg", "id": 217060}, {"license": 2, "file_name": "000000531707.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000531707.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 13:44:55", "flickr_url": "http://farm4.staticflickr.com/3488/3800868461_c6a406ff81_z.jpg", "id": 531707}, {"license": 3, "file_name": "000000569030.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000569030.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 20:23:14", "flickr_url": "http://farm1.staticflickr.com/218/499414320_c29ade78e0_z.jpg", "id": 569030}, {"license": 4, "file_name": "000000094871.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000094871.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 20:48:13", "flickr_url": "http://farm9.staticflickr.com/8503/8282824777_4495950c61_z.jpg", "id": 94871}, {"license": 4, "file_name": "000000015746.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000015746.jpg", "height": 640, "width": 427, "date_captured": "2013-11-16 21:36:18", "flickr_url": "http://farm4.staticflickr.com/3643/3517907686_509f46055f_z.jpg", "id": 15746}, {"license": 1, "file_name": "000000390301.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000390301.jpg", "height": 364, "width": 500, "date_captured": "2013-11-16 23:17:42", "flickr_url": "http://farm3.staticflickr.com/2134/1799252043_d628ee027c_z.jpg", "id": 390301}, {"license": 1, "file_name": "000000039484.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000039484.jpg", "height": 437, "width": 640, "date_captured": "2013-11-17 00:11:51", "flickr_url": "http://farm1.staticflickr.com/157/433085755_cb9d22dd8b_z.jpg", "id": 39484}, {"license": 5, "file_name": "000000273617.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000273617.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 00:43:13", "flickr_url": "http://farm6.staticflickr.com/5297/5423117552_03ec730998_z.jpg", "id": 273617}, {"license": 3, "file_name": "000000288685.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000288685.jpg", "height": 436, "width": 640, "date_captured": "2013-11-17 00:46:06", "flickr_url": "http://farm5.staticflickr.com/4120/4893125270_c1ff5128b5_z.jpg", "id": 288685}, {"license": 1, "file_name": "000000076261.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000076261.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 03:22:31", "flickr_url": "http://farm4.staticflickr.com/3009/2995507156_ba5fe7b7b2_z.jpg", "id": 76261}, {"license": 4, "file_name": "000000176847.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000176847.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 04:25:20", "flickr_url": "http://farm4.staticflickr.com/3675/9757323794_cbee08037a_z.jpg", "id": 176847}, {"license": 3, "file_name": "000000542073.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000542073.jpg", "height": 500, "width": 375, "date_captured": "2013-11-17 06:45:37", "flickr_url": "http://farm2.staticflickr.com/1066/1186091918_2cd0ba1bd0_z.jpg", "id": 542073}, {"license": 1, "file_name": "000000494863.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000494863.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 06:56:17", "flickr_url": "http://farm8.staticflickr.com/7288/9706782138_58f8aef1ee_z.jpg", "id": 494863}, {"license": 3, "file_name": "000000307598.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000307598.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 07:06:20", "flickr_url": "http://farm3.staticflickr.com/2831/9661524828_7222797a90_z.jpg", "id": 307598}, {"license": 1, "file_name": "000000505942.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000505942.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 07:17:31", "flickr_url": "http://farm1.staticflickr.com/56/147795701_40d7bc8331_z.jpg", "id": 505942}, {"license": 4, "file_name": "000000309173.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000309173.jpg", "height": 500, "width": 335, "date_captured": "2013-11-17 08:18:13", "flickr_url": "http://farm4.staticflickr.com/3121/2718413687_abbbf4987e_z.jpg", "id": 309173}, {"license": 3, "file_name": "000000304365.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000304365.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 09:37:22", "flickr_url": "http://farm4.staticflickr.com/3681/8922460501_faa1a0af7d_z.jpg", "id": 304365}, {"license": 4, "file_name": "000000014473.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000014473.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 11:06:09", "flickr_url": "http://farm9.staticflickr.com/8401/8607706408_e00725a54d_z.jpg", "id": 14473}, {"license": 2, "file_name": "000000396338.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000396338.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 19:34:07", "flickr_url": "http://farm9.staticflickr.com/8451/8027479332_1d4833f074_z.jpg", "id": 396338}, {"license": 2, "file_name": "000000416330.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000416330.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 19:55:35", "flickr_url": "http://farm9.staticflickr.com/8182/8010355303_50a7d3f7fc_z.jpg", "id": 416330}, {"license": 1, "file_name": "000000014831.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000014831.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 19:58:56", "flickr_url": "http://farm9.staticflickr.com/8113/8656986875_366dec25c9_z.jpg", "id": 14831}, {"license": 3, "file_name": "000000572408.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000572408.jpg", "height": 640, "width": 424, "date_captured": "2013-11-17 21:04:51", "flickr_url": "http://farm9.staticflickr.com/8406/8633551289_327525f38b_z.jpg", "id": 572408}, {"license": 1, "file_name": "000000125806.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000125806.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 21:26:22", "flickr_url": "http://farm9.staticflickr.com/8064/8201394677_41194bd26a_z.jpg", "id": 125806}, {"license": 1, "file_name": "000000090062.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000090062.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 21:29:04", "flickr_url": "http://farm9.staticflickr.com/8483/8202487076_1e05a31a9b_z.jpg", "id": 90062}, {"license": 2, "file_name": "000000512648.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000512648.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 00:05:57", "flickr_url": "http://farm3.staticflickr.com/2411/5767368765_47931acab5_z.jpg", "id": 512648}, {"license": 1, "file_name": "000000505573.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000505573.jpg", "height": 640, "width": 359, "date_captured": "2013-11-18 00:54:40", "flickr_url": "http://farm3.staticflickr.com/2548/4212511559_1ce385f2eb_z.jpg", "id": 505573}, {"license": 3, "file_name": "000000160772.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000160772.jpg", "height": 512, "width": 640, "date_captured": "2013-11-18 02:39:17", "flickr_url": "http://farm2.staticflickr.com/1079/1297213021_b2d796815c_z.jpg", "id": 160772}, {"license": 3, "file_name": "000000088250.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000088250.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 08:27:09", "flickr_url": "http://farm6.staticflickr.com/5001/5272353612_5d0e4a18a6_z.jpg", "id": 88250}, {"license": 5, "file_name": "000000441543.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000441543.jpg", "height": 403, "width": 640, "date_captured": "2013-11-18 08:29:26", "flickr_url": "http://farm6.staticflickr.com/5461/9168165820_0a3b383210_z.jpg", "id": 441543}, {"license": 5, "file_name": "000000293300.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000293300.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 09:02:19", "flickr_url": "http://farm5.staticflickr.com/4150/4833528428_1d9784e8c6_z.jpg", "id": 293300}, {"license": 1, "file_name": "000000511398.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000511398.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 11:19:58", "flickr_url": "http://farm7.staticflickr.com/6160/6158490165_2aa30e639d_z.jpg", "id": 511398}, {"license": 3, "file_name": "000000093965.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000093965.jpg", "height": 457, "width": 640, "date_captured": "2013-11-18 17:09:33", "flickr_url": "http://farm4.staticflickr.com/3739/9384480599_8353cbf7b6_z.jpg", "id": 93965}, {"license": 2, "file_name": "000000163290.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000163290.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 18:05:54", "flickr_url": "http://farm7.staticflickr.com/6166/6190069448_f9da6727e6_z.jpg", "id": 163290}, {"license": 2, "file_name": "000000572900.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000572900.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 18:14:43", "flickr_url": "http://farm1.staticflickr.com/22/39019667_ad48cc6836_z.jpg", "id": 572900}, {"license": 4, "file_name": "000000134856.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000134856.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 21:28:40", "flickr_url": "http://farm2.staticflickr.com/1169/540238894_b0becf48b3_z.jpg", "id": 134856}, {"license": 3, "file_name": "000000267933.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000267933.jpg", "height": 328, "width": 500, "date_captured": "2013-11-18 21:55:06", "flickr_url": "http://farm1.staticflickr.com/159/434139148_78c44a538f_z.jpg", "id": 267933}, {"license": 5, "file_name": "000000040036.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000040036.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 01:05:21", "flickr_url": "http://farm3.staticflickr.com/2848/9450285307_5873fbb209_z.jpg", "id": 40036}, {"license": 2, "file_name": "000000576955.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000576955.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 02:05:36", "flickr_url": "http://farm4.staticflickr.com/3704/8949853096_d3ffcd111f_z.jpg", "id": 576955}, {"license": 1, "file_name": "000000185473.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000185473.jpg", "height": 194, "width": 640, "date_captured": "2013-11-19 03:09:36", "flickr_url": "http://farm9.staticflickr.com/8371/8520466030_3eced9a5d2_z.jpg", "id": 185473}, {"license": 3, "file_name": "000000465585.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000465585.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 23:27:45", "flickr_url": "http://farm4.staticflickr.com/3118/3151671158_34b27e5510_z.jpg", "id": 465585}, {"license": 2, "file_name": "000000081738.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000081738.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 06:07:35", "flickr_url": "http://farm3.staticflickr.com/2140/2338393680_572b86bc56_z.jpg", "id": 81738}, {"license": 1, "file_name": "000000442463.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000442463.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 07:03:47", "flickr_url": "http://farm3.staticflickr.com/2640/3984646916_4418bc05bd_z.jpg", "id": 442463}, {"license": 2, "file_name": "000000450399.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000450399.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 15:30:07", "flickr_url": "http://farm4.staticflickr.com/3427/3884388788_7f58e2088b_z.jpg", "id": 450399}, {"license": 4, "file_name": "000000516173.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000516173.jpg", "height": 640, "width": 408, "date_captured": "2013-11-20 19:04:01", "flickr_url": "http://farm5.staticflickr.com/4026/4390072668_db704274f8_z.jpg", "id": 516173}, {"license": 3, "file_name": "000000224222.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000224222.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 19:36:10", "flickr_url": "http://farm1.staticflickr.com/117/310847809_64c76b94c2_z.jpg", "id": 224222}, {"license": 1, "file_name": "000000270122.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000270122.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 20:04:17", "flickr_url": "http://farm8.staticflickr.com/7370/9391236231_b7116a9a8f_z.jpg", "id": 270122}, {"license": 4, "file_name": "000000148739.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000148739.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 21:49:35", "flickr_url": "http://farm7.staticflickr.com/6230/7037849457_9d3c2dd395_z.jpg", "id": 148739}, {"license": 1, "file_name": "000000371552.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000371552.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 23:01:47", "flickr_url": "http://farm8.staticflickr.com/7250/7119917901_1868e0d5ec_z.jpg", "id": 371552}, {"license": 1, "file_name": "000000047801.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000047801.jpg", "height": 612, "width": 612, "date_captured": "2013-11-20 23:50:39", "flickr_url": "http://farm8.staticflickr.com/7231/7172942383_8f3d843b62_z.jpg", "id": 47801}, {"license": 4, "file_name": "000000249550.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000249550.jpg", "height": 625, "width": 415, "date_captured": "2013-11-21 00:11:42", "flickr_url": "http://farm3.staticflickr.com/2828/9213137814_ff976954a3_z.jpg", "id": 249550}, {"license": 2, "file_name": "000000569972.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000569972.jpg", "height": 574, "width": 640, "date_captured": "2013-11-21 00:20:50", "flickr_url": "http://farm2.staticflickr.com/1429/5147095348_7c3f0734ec_z.jpg", "id": 569972}, {"license": 2, "file_name": "000000317999.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000317999.jpg", "height": 612, "width": 612, "date_captured": "2013-11-21 01:27:01", "flickr_url": "http://farm9.staticflickr.com/8014/7173995615_9c293a671c_z.jpg", "id": 317999}, {"license": 3, "file_name": "000000416534.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000416534.jpg", "height": 355, "width": 640, "date_captured": "2013-11-21 03:30:53", "flickr_url": "http://farm1.staticflickr.com/203/524152737_61a807c59e_z.jpg", "id": 416534}, {"license": 6, "file_name": "000000121744.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000121744.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 04:17:23", "flickr_url": "http://farm3.staticflickr.com/2792/5837181955_2126aabe9f_z.jpg", "id": 121744}, {"license": 1, "file_name": "000000257865.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000257865.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 05:18:48", "flickr_url": "http://farm5.staticflickr.com/4102/4887936801_65725fc154_z.jpg", "id": 257865}, {"license": 2, "file_name": "000000324927.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000324927.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 05:26:10", "flickr_url": "http://farm5.staticflickr.com/4092/4841539637_6d00080098_z.jpg", "id": 324927}, {"license": 1, "file_name": "000000080022.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000080022.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 05:43:07", "flickr_url": "http://farm3.staticflickr.com/2785/4435078303_3cc55bbb0b_z.jpg", "id": 80022}, {"license": 5, "file_name": "000000556000.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000556000.jpg", "height": 515, "width": 640, "date_captured": "2013-11-21 20:15:59", "flickr_url": "http://farm4.staticflickr.com/3127/3157863995_c27c0cacfb_z.jpg", "id": 556000}, {"license": 1, "file_name": "000000257370.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000257370.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 00:19:41", "flickr_url": "http://farm1.staticflickr.com/140/322298953_74933aba3d_z.jpg", "id": 257370}, {"license": 3, "file_name": "000000039477.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000039477.jpg", "height": 421, "width": 640, "date_captured": "2013-11-22 00:32:47", "flickr_url": "http://farm5.staticflickr.com/4027/4534221786_2da1b4f3b5_z.jpg", "id": 39477}, {"license": 5, "file_name": "000000023751.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000023751.jpg", "height": 640, "width": 430, "date_captured": "2013-11-22 16:15:28", "flickr_url": "http://farm5.staticflickr.com/4034/4523981523_5aaaaeba77_z.jpg", "id": 23751}, {"license": 1, "file_name": "000000573008.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000573008.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 22:27:32", "flickr_url": "http://farm4.staticflickr.com/3532/3729691690_93264725a0_z.jpg", "id": 573008}, {"license": 3, "file_name": "000000403122.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000403122.jpg", "height": 640, "width": 427, "date_captured": "2013-11-23 04:00:43", "flickr_url": "http://farm4.staticflickr.com/3275/2857486538_be0ca9708c_z.jpg", "id": 403122}, {"license": 1, "file_name": "000000438876.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000438876.jpg", "height": 333, "width": 500, "date_captured": "2013-11-23 04:21:44", "flickr_url": "http://farm4.staticflickr.com/3197/2536376678_eb4e8a3c59_z.jpg", "id": 438876}, {"license": 1, "file_name": "000000412286.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000412286.jpg", "height": 500, "width": 333, "date_captured": "2013-11-23 05:13:27", "flickr_url": "http://farm1.staticflickr.com/188/434164710_dca9f44b7d_z.jpg", "id": 412286}, {"license": 5, "file_name": "000000147415.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000147415.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 04:37:18", "flickr_url": "http://farm4.staticflickr.com/3660/3306226020_d7f6dcd2f9_z.jpg", "id": 147415}, {"license": 5, "file_name": "000000179112.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000179112.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 07:01:49", "flickr_url": "http://farm4.staticflickr.com/3140/2737001371_f1d31e60e3_z.jpg", "id": 179112}, {"license": 2, "file_name": "000000261318.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000261318.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 07:43:30", "flickr_url": "http://farm1.staticflickr.com/59/206742579_e293a53d9f_z.jpg", "id": 261318}, {"license": 3, "file_name": "000000410487.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000410487.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 10:45:20", "flickr_url": "http://farm3.staticflickr.com/2180/2227215068_15821347b1_z.jpg", "id": 410487}, {"license": 4, "file_name": "000000168593.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000168593.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 11:04:46", "flickr_url": "http://farm8.staticflickr.com/7009/6853122211_2c4b82e2ea_z.jpg", "id": 168593}, {"license": 5, "file_name": "000000372260.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000372260.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 12:08:52", "flickr_url": "http://farm6.staticflickr.com/5350/9918453144_050959b8b5_z.jpg", "id": 372260}, {"license": 3, "file_name": "000000536073.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000536073.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 12:36:43", "flickr_url": "http://farm5.staticflickr.com/4004/4582615682_5ba25bf9b1_z.jpg", "id": 536073}, {"license": 3, "file_name": "000000031749.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000031749.jpg", "height": 640, "width": 640, "date_captured": "2013-11-24 14:51:21", "flickr_url": "http://farm9.staticflickr.com/8234/8515507055_1c8ed0e4d9_z.jpg", "id": 31749}, {"license": 2, "file_name": "000000546826.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000546826.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 20:52:47", "flickr_url": "http://farm4.staticflickr.com/3481/3872748823_feff3fbe1a_z.jpg", "id": 546826}, {"license": 1, "file_name": "000000310200.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000310200.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 23:29:21", "flickr_url": "http://farm4.staticflickr.com/3794/8844627155_3e3b98d8c0_z.jpg", "id": 310200}, {"license": 1, "file_name": "000000002685.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000002685.jpg", "height": 555, "width": 640, "date_captured": "2013-11-25 19:10:39", "flickr_url": "http://farm9.staticflickr.com/8535/8710326856_2aac3d36fb_z.jpg", "id": 2685}, {"license": 1, "file_name": "000000417632.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000417632.jpg", "height": 480, "width": 640, "date_captured": "2013-11-25 19:20:07", "flickr_url": "http://farm9.staticflickr.com/8217/8395101776_8b2682e5eb_z.jpg", "id": 417632}, {"license": 3, "file_name": "000000244750.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000244750.jpg", "height": 500, "width": 393, "date_captured": "2013-11-25 21:18:09", "flickr_url": "http://farm2.staticflickr.com/1397/772864220_bf722eb3ae_z.jpg", "id": 244750}, {"license": 6, "file_name": "000000029187.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000029187.jpg", "height": 491, "width": 640, "date_captured": "2013-11-14 19:51:16", "flickr_url": "http://farm9.staticflickr.com/8107/8494436156_41f475a9b0_z.jpg", "id": 29187}, {"license": 4, "file_name": "000000343466.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000343466.jpg", "height": 240, "width": 320, "date_captured": "2013-11-14 20:51:05", "flickr_url": "http://farm9.staticflickr.com/8421/7831368930_5c1244e182_z.jpg", "id": 343466}, {"license": 3, "file_name": "000000248111.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000248111.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 21:16:39", "flickr_url": "http://farm3.staticflickr.com/2457/3605752306_ba7c4825a0_z.jpg", "id": 248111}, {"license": 2, "file_name": "000000173799.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000173799.jpg", "height": 524, "width": 640, "date_captured": "2013-11-14 21:41:57", "flickr_url": "http://farm8.staticflickr.com/7236/7165187259_41540a2d3a_z.jpg", "id": 173799}, {"license": 3, "file_name": "000000307145.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000307145.jpg", "height": 297, "width": 396, "date_captured": "2013-11-14 21:47:36", "flickr_url": "http://farm9.staticflickr.com/8145/7231667722_4dbd21b5d2_z.jpg", "id": 307145}, {"license": 6, "file_name": "000000519569.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000519569.jpg", "height": 640, "width": 426, "date_captured": "2013-11-14 22:02:52", "flickr_url": "http://farm8.staticflickr.com/7273/7089955651_93bae80a27_z.jpg", "id": 519569}, {"license": 1, "file_name": "000000557258.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000557258.jpg", "height": 500, "width": 331, "date_captured": "2013-11-14 23:46:52", "flickr_url": "http://farm3.staticflickr.com/2531/3934819503_5fa9d47db6_z.jpg", "id": 557258}, {"license": 3, "file_name": "000000360564.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000360564.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 00:20:18", "flickr_url": "http://farm4.staticflickr.com/3564/3680209630_1aa054fa3d_z.jpg", "id": 360564}, {"license": 3, "file_name": "000000308466.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000308466.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 04:49:57", "flickr_url": "http://farm6.staticflickr.com/5020/5402807138_ce34a7095c_z.jpg", "id": 308466}, {"license": 4, "file_name": "000000551304.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000551304.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 13:21:50", "flickr_url": "http://farm5.staticflickr.com/4023/4680625662_e7b56e1576_z.jpg", "id": 551304}, {"license": 6, "file_name": "000000114770.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000114770.jpg", "height": 403, "width": 640, "date_captured": "2013-11-15 13:28:44", "flickr_url": "http://farm6.staticflickr.com/5328/8996936187_3a914fae98_z.jpg", "id": 114770}, {"license": 5, "file_name": "000000234413.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000234413.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 13:46:56", "flickr_url": "http://farm8.staticflickr.com/7062/6873239693_954556d1ee_z.jpg", "id": 234413}, {"license": 2, "file_name": "000000165681.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000165681.jpg", "height": 444, "width": 640, "date_captured": "2013-11-15 14:58:42", "flickr_url": "http://farm6.staticflickr.com/5253/5424364481_342b9336df_z.jpg", "id": 165681}, {"license": 3, "file_name": "000000267300.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000267300.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 15:56:04", "flickr_url": "http://farm2.staticflickr.com/1249/860062709_41aa9f9b7f_z.jpg", "id": 267300}, {"license": 4, "file_name": "000000147740.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000147740.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 18:42:49", "flickr_url": "http://farm9.staticflickr.com/8042/8026451116_b1bd0c0c0a_z.jpg", "id": 147740}, {"license": 4, "file_name": "000000485237.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000485237.jpg", "height": 174, "width": 640, "date_captured": "2013-11-16 02:46:38", "flickr_url": "http://farm9.staticflickr.com/8522/8549279374_e5e3cc799d_z.jpg", "id": 485237}, {"license": 4, "file_name": "000000208901.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000208901.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 03:32:15", "flickr_url": "http://farm6.staticflickr.com/5110/5773232566_96f66426cd_z.jpg", "id": 208901}, {"license": 3, "file_name": "000000404479.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000404479.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 05:01:07", "flickr_url": "http://farm3.staticflickr.com/2359/5781766914_2a7c9bd5a2_z.jpg", "id": 404479}, {"license": 1, "file_name": "000000504000.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000504000.jpg", "height": 243, "width": 640, "date_captured": "2013-11-16 05:06:18", "flickr_url": "http://farm5.staticflickr.com/4090/5072120767_f8e8715428_z.jpg", "id": 504000}, {"license": 4, "file_name": "000000096549.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000096549.jpg", "height": 214, "width": 640, "date_captured": "2013-11-16 12:38:56", "flickr_url": "http://farm9.staticflickr.com/8265/8622452992_833365e25c_z.jpg", "id": 96549}, {"license": 4, "file_name": "000000110721.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000110721.jpg", "height": 418, "width": 640, "date_captured": "2013-11-16 14:09:46", "flickr_url": "http://farm9.staticflickr.com/8221/8264882784_3011d9da8f_z.jpg", "id": 110721}, {"license": 1, "file_name": "000000438017.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000438017.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 15:11:22", "flickr_url": "http://farm2.staticflickr.com/1005/1185058195_2f11d46b69_z.jpg", "id": 438017}, {"license": 1, "file_name": "000000405205.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000405205.jpg", "height": 410, "width": 550, "date_captured": "2013-11-16 16:26:54", "flickr_url": "http://farm8.staticflickr.com/7222/7313042294_a60044d41b_z.jpg", "id": 405205}, {"license": 1, "file_name": "000000134689.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000134689.jpg", "height": 640, "width": 427, "date_captured": "2013-11-16 16:52:25", "flickr_url": "http://farm9.staticflickr.com/8325/8092550033_d74905b040_z.jpg", "id": 134689}, {"license": 6, "file_name": "000000089697.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000089697.jpg", "height": 429, "width": 640, "date_captured": "2013-11-16 18:09:22", "flickr_url": "http://farm3.staticflickr.com/2724/4365821312_8a20ded55a_z.jpg", "id": 89697}, {"license": 3, "file_name": "000000349302.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000349302.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 18:45:08", "flickr_url": "http://farm5.staticflickr.com/4149/5055970084_e0135c19d0_z.jpg", "id": 349302}, {"license": 1, "file_name": "000000016502.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000016502.jpg", "height": 500, "width": 375, "date_captured": "2013-11-16 18:53:28", "flickr_url": "http://farm1.staticflickr.com/153/388880244_55dd5edd8e_z.jpg", "id": 16502}, {"license": 5, "file_name": "000000550691.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000550691.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 19:38:43", "flickr_url": "http://farm6.staticflickr.com/5544/10112477424_03333e9845_z.jpg", "id": 550691}, {"license": 5, "file_name": "000000452321.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000452321.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 20:25:03", "flickr_url": "http://farm6.staticflickr.com/5334/9618201274_317408969f_z.jpg", "id": 452321}, {"license": 1, "file_name": "000000233567.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000233567.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 20:25:26", "flickr_url": "http://farm6.staticflickr.com/5460/8978459928_e40a404bd4_z.jpg", "id": 233567}, {"license": 3, "file_name": "000000413404.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000413404.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 21:34:09", "flickr_url": "http://farm8.staticflickr.com/7288/8742777645_dbfe94dc34_z.jpg", "id": 413404}, {"license": 3, "file_name": "000000321887.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000321887.jpg", "height": 424, "width": 640, "date_captured": "2013-11-16 22:10:00", "flickr_url": "http://farm8.staticflickr.com/7146/6483336553_b44b02fc9a_z.jpg", "id": 321887}, {"license": 4, "file_name": "000000345261.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000345261.jpg", "height": 640, "width": 585, "date_captured": "2013-11-16 23:06:42", "flickr_url": "http://farm4.staticflickr.com/3535/3213959630_fe4b76a727_z.jpg", "id": 345261}, {"license": 4, "file_name": "000000147498.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000147498.jpg", "height": 524, "width": 640, "date_captured": "2013-11-17 01:40:28", "flickr_url": "http://farm9.staticflickr.com/8063/8243726314_4c66ec3015_z.jpg", "id": 147498}, {"license": 2, "file_name": "000000509451.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000509451.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 05:11:41", "flickr_url": "http://farm5.staticflickr.com/4031/4462602821_f00de6d590_z.jpg", "id": 509451}, {"license": 6, "file_name": "000000509719.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000509719.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 05:58:29", "flickr_url": "http://farm3.staticflickr.com/2836/9430776152_fc5795d424_z.jpg", "id": 509719}, {"license": 1, "file_name": "000000169169.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000169169.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 06:05:30", "flickr_url": "http://farm4.staticflickr.com/3123/2582354813_e9054155e1_z.jpg", "id": 169169}, {"license": 4, "file_name": "000000119233.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000119233.jpg", "height": 334, "width": 500, "date_captured": "2013-11-17 06:43:31", "flickr_url": "http://farm3.staticflickr.com/2248/2050977429_aff593ecc2_z.jpg", "id": 119233}, {"license": 5, "file_name": "000000439593.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000439593.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 06:48:29", "flickr_url": "http://farm8.staticflickr.com/7294/9756169192_edc6678378_z.jpg", "id": 439593}, {"license": 4, "file_name": "000000124277.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000124277.jpg", "height": 481, "width": 640, "date_captured": "2013-11-17 07:56:45", "flickr_url": "http://farm8.staticflickr.com/7381/9431897786_86c6e745dc_z.jpg", "id": 124277}, {"license": 3, "file_name": "000000426268.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000426268.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 08:31:58", "flickr_url": "http://farm8.staticflickr.com/7293/9272222208_31c16a2173_z.jpg", "id": 426268}, {"license": 3, "file_name": "000000133000.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000133000.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 08:56:05", "flickr_url": "http://farm6.staticflickr.com/5464/9115292295_b9e655fa61_z.jpg", "id": 133000}, {"license": 3, "file_name": "000000565153.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000565153.jpg", "height": 500, "width": 379, "date_captured": "2013-11-17 10:00:53", "flickr_url": "http://farm1.staticflickr.com/214/463580539_86dd113d6b_z.jpg", "id": 565153}, {"license": 3, "file_name": "000000235399.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000235399.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 14:05:08", "flickr_url": "http://farm1.staticflickr.com/46/184980151_c4f80187fd_z.jpg", "id": 235399}, {"license": 5, "file_name": "000000189806.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000189806.jpg", "height": 400, "width": 500, "date_captured": "2013-11-17 16:04:43", "flickr_url": "http://farm1.staticflickr.com/83/217730183_8f58409e7c_z.jpg", "id": 189806}, {"license": 5, "file_name": "000000129416.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000129416.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 17:59:41", "flickr_url": "http://farm1.staticflickr.com/215/459774067_b09c502247_z.jpg", "id": 129416}, {"license": 6, "file_name": "000000519039.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000519039.jpg", "height": 299, "width": 640, "date_captured": "2013-11-17 19:41:33", "flickr_url": "http://farm9.staticflickr.com/8180/7990285797_26e2e119fe_z.jpg", "id": 519039}, {"license": 2, "file_name": "000000518213.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000518213.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 22:30:35", "flickr_url": "http://farm9.staticflickr.com/8012/7141255773_d59892c817_z.jpg", "id": 518213}, {"license": 4, "file_name": "000000365208.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000365208.jpg", "height": 640, "width": 603, "date_captured": "2013-11-18 03:10:03", "flickr_url": "http://farm9.staticflickr.com/8188/8111728980_6cec69a31f_z.jpg", "id": 365208}, {"license": 2, "file_name": "000000450075.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000450075.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 03:35:21", "flickr_url": "http://farm6.staticflickr.com/5258/5538138409_8475248146_z.jpg", "id": 450075}, {"license": 2, "file_name": "000000060932.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000060932.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 03:58:42", "flickr_url": "http://farm5.staticflickr.com/4118/4815992890_3200b31f4c_z.jpg", "id": 60932}, {"license": 2, "file_name": "000000473219.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000473219.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 03:58:49", "flickr_url": "http://farm5.staticflickr.com/4137/4815326977_9cbdca76bd_z.jpg", "id": 473219}, {"license": 1, "file_name": "000000152214.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000152214.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 04:14:55", "flickr_url": "http://farm5.staticflickr.com/4058/4496211155_71fd9307d9_z.jpg", "id": 152214}, {"license": 1, "file_name": "000000309964.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000309964.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 04:37:46", "flickr_url": "http://farm4.staticflickr.com/3806/9005108383_1d72da2e59_z.jpg", "id": 309964}, {"license": 1, "file_name": "000000399655.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000399655.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 09:16:40", "flickr_url": "http://farm2.staticflickr.com/1070/952554109_c81471e4fb_z.jpg", "id": 399655}, {"license": 4, "file_name": "000000080153.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000080153.jpg", "height": 640, "width": 428, "date_captured": "2013-11-18 10:36:29", "flickr_url": "http://farm6.staticflickr.com/5142/5650798989_4e830b5a03_z.jpg", "id": 80153}, {"license": 3, "file_name": "000000177861.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000177861.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 10:48:53", "flickr_url": "http://farm7.staticflickr.com/6082/6125089634_1064504d46_z.jpg", "id": 177861}, {"license": 2, "file_name": "000000194216.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000194216.jpg", "height": 294, "width": 640, "date_captured": "2013-11-18 12:14:42", "flickr_url": "http://farm2.staticflickr.com/1257/4726818274_833624f556_z.jpg", "id": 194216}, {"license": 1, "file_name": "000000308753.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000308753.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 13:14:44", "flickr_url": "http://farm4.staticflickr.com/3819/9167849123_8feca959cc_z.jpg", "id": 308753}, {"license": 3, "file_name": "000000119088.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000119088.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 14:09:45", "flickr_url": "http://farm4.staticflickr.com/3093/3775099593_55e6e1ff9f_z.jpg", "id": 119088}, {"license": 3, "file_name": "000000071756.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000071756.jpg", "height": 512, "width": 640, "date_captured": "2013-11-18 14:25:17", "flickr_url": "http://farm8.staticflickr.com/7039/6982903429_a648391d8f_z.jpg", "id": 71756}, {"license": 3, "file_name": "000000577149.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000577149.jpg", "height": 413, "width": 640, "date_captured": "2013-11-18 14:53:39", "flickr_url": "http://farm1.staticflickr.com/160/437730216_c47a93ba60_z.jpg", "id": 577149}, {"license": 3, "file_name": "000000564280.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000564280.jpg", "height": 425, "width": 640, "date_captured": "2013-11-18 15:20:51", "flickr_url": "http://farm5.staticflickr.com/4039/4518810022_8d9e1d881f_z.jpg", "id": 564280}, {"license": 3, "file_name": "000000085823.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000085823.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 15:24:23", "flickr_url": "http://farm8.staticflickr.com/7017/6495910255_b36d4276e6_z.jpg", "id": 85823}, {"license": 6, "file_name": "000000364636.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000364636.jpg", "height": 533, "width": 640, "date_captured": "2013-11-18 16:47:36", "flickr_url": "http://farm5.staticflickr.com/4022/4501511673_d182888ec0_z.jpg", "id": 364636}, {"license": 1, "file_name": "000000402783.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000402783.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 18:02:42", "flickr_url": "http://farm1.staticflickr.com/195/476126920_7f05abb803_z.jpg", "id": 402783}, {"license": 3, "file_name": "000000113589.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000113589.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 18:23:25", "flickr_url": "http://farm3.staticflickr.com/2448/4094243973_7c78585a01_z.jpg", "id": 113589}, {"license": 2, "file_name": "000000167240.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000167240.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 19:15:31", "flickr_url": "http://farm8.staticflickr.com/7279/7650683092_524aff77dd_z.jpg", "id": 167240}, {"license": 4, "file_name": "000000419312.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000419312.jpg", "height": 500, "width": 375, "date_captured": "2013-11-19 20:28:11", "flickr_url": "http://farm4.staticflickr.com/3276/3064530534_3b508c25c6_z.jpg", "id": 419312}, {"license": 2, "file_name": "000000425361.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000425361.jpg", "height": 491, "width": 640, "date_captured": "2013-11-19 20:34:41", "flickr_url": "http://farm1.staticflickr.com/6/76691140_305887c981_z.jpg", "id": 425361}, {"license": 4, "file_name": "000000352760.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000352760.jpg", "height": 640, "width": 544, "date_captured": "2013-11-19 20:43:03", "flickr_url": "http://farm9.staticflickr.com/8290/7885970872_9b4c310757_z.jpg", "id": 352760}, {"license": 1, "file_name": "000000579900.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000579900.jpg", "height": 500, "width": 375, "date_captured": "2013-11-19 21:22:19", "flickr_url": "http://farm4.staticflickr.com/3105/2873560827_1626392f32_z.jpg", "id": 579900}, {"license": 3, "file_name": "000000569825.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000569825.jpg", "height": 500, "width": 338, "date_captured": "2013-11-19 21:25:32", "flickr_url": "http://farm2.staticflickr.com/1437/891270518_dc92872a0f_z.jpg", "id": 569825}, {"license": 1, "file_name": "000000092660.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000092660.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 22:49:50", "flickr_url": "http://farm6.staticflickr.com/5021/5625580778_33e6ea680e_z.jpg", "id": 92660}, {"license": 1, "file_name": "000000466602.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000466602.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 23:01:09", "flickr_url": "http://farm6.staticflickr.com/5205/5364929231_e7845462f1_z.jpg", "id": 466602}, {"license": 3, "file_name": "000000128112.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000128112.jpg", "height": 640, "width": 425, "date_captured": "2013-11-19 23:14:38", "flickr_url": "http://farm6.staticflickr.com/5283/5301899392_3b3ce708f8_z.jpg", "id": 128112}, {"license": 1, "file_name": "000000096825.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000096825.jpg", "height": 503, "width": 640, "date_captured": "2013-11-19 23:42:40", "flickr_url": "http://farm5.staticflickr.com/4038/4700293376_160b95ac5c_z.jpg", "id": 96825}, {"license": 3, "file_name": "000000562229.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000562229.jpg", "height": 640, "width": 640, "date_captured": "2013-11-20 00:14:09", "flickr_url": "http://farm4.staticflickr.com/3747/9517469514_97e2299f45_z.jpg", "id": 562229}, {"license": 1, "file_name": "000000157365.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000157365.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 01:04:19", "flickr_url": "http://farm8.staticflickr.com/7088/7395470824_97083f76e6_z.jpg", "id": 157365}, {"license": 3, "file_name": "000000015254.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000015254.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 01:29:32", "flickr_url": "http://farm1.staticflickr.com/140/385285808_120242fcc0_z.jpg", "id": 15254}, {"license": 3, "file_name": "000000221872.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000221872.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 01:30:19", "flickr_url": "http://farm1.staticflickr.com/194/497281587_81949a79ae_z.jpg", "id": 221872}, {"license": 3, "file_name": "000000515577.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000515577.jpg", "height": 334, "width": 500, "date_captured": "2013-11-20 03:58:40", "flickr_url": "http://farm5.staticflickr.com/4064/4412666006_df67ae1487_z.jpg", "id": 515577}, {"license": 3, "file_name": "000000053626.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000053626.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 04:19:13", "flickr_url": "http://farm3.staticflickr.com/2802/4380009782_0f98d8995c_z.jpg", "id": 53626}, {"license": 3, "file_name": "000000376112.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000376112.jpg", "height": 640, "width": 426, "date_captured": "2013-11-20 06:34:10", "flickr_url": "http://farm4.staticflickr.com/3504/3459649139_bbdcde10fe_z.jpg", "id": 376112}, {"license": 4, "file_name": "000000343937.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000343937.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 12:55:34", "flickr_url": "http://farm5.staticflickr.com/4072/4320314557_bfcc972543_z.jpg", "id": 343937}, {"license": 5, "file_name": "000000530975.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000530975.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 13:55:29", "flickr_url": "http://farm4.staticflickr.com/3322/3648849691_cddc5e04ec_z.jpg", "id": 530975}, {"license": 4, "file_name": "000000495448.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000495448.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 19:35:00", "flickr_url": "http://farm8.staticflickr.com/7369/9678307057_4d7bc4aaa4_z.jpg", "id": 495448}, {"license": 3, "file_name": "000000120777.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000120777.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 20:10:47", "flickr_url": "http://farm2.staticflickr.com/1120/624166368_81bcfb5d76_z.jpg", "id": 120777}, {"license": 6, "file_name": "000000535858.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000535858.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 20:11:41", "flickr_url": "http://farm8.staticflickr.com/7290/8954396960_28a3a2c492_z.jpg", "id": 535858}, {"license": 4, "file_name": "000000530624.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000530624.jpg", "height": 478, "width": 640, "date_captured": "2013-11-20 20:41:56", "flickr_url": "http://farm6.staticflickr.com/5195/7235177844_90ef706004_z.jpg", "id": 530624}, {"license": 1, "file_name": "000000007795.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000007795.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 21:31:29", "flickr_url": "http://farm4.staticflickr.com/3796/9573802025_04858ee139_z.jpg", "id": 7795}, {"license": 3, "file_name": "000000263403.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000263403.jpg", "height": 394, "width": 638, "date_captured": "2013-11-20 21:42:10", "flickr_url": "http://farm8.staticflickr.com/7061/7099099185_0de1031edf_z.jpg", "id": 263403}, {"license": 3, "file_name": "000000167159.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000167159.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 22:14:19", "flickr_url": "http://farm1.staticflickr.com/214/497053129_b39dd3afca_z.jpg", "id": 167159}, {"license": 6, "file_name": "000000568195.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000568195.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 23:07:49", "flickr_url": "http://farm9.staticflickr.com/8281/7717707852_47180c518d_z.jpg", "id": 568195}, {"license": 4, "file_name": "000000318238.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000318238.jpg", "height": 640, "width": 478, "date_captured": "2013-11-21 00:01:06", "flickr_url": "http://farm8.staticflickr.com/7402/9964003514_84ce7550c9_z.jpg", "id": 318238}, {"license": 3, "file_name": "000000491008.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000491008.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 01:12:23", "flickr_url": "http://farm3.staticflickr.com/2815/10157258843_741080cb6f_z.jpg", "id": 491008}, {"license": 2, "file_name": "000000396526.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000396526.jpg", "height": 338, "width": 500, "date_captured": "2013-11-21 01:31:24", "flickr_url": "http://farm2.staticflickr.com/1119/1413924172_c85443172e_z.jpg", "id": 396526}, {"license": 3, "file_name": "000000385719.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000385719.jpg", "height": 421, "width": 640, "date_captured": "2013-11-21 01:42:27", "flickr_url": "http://farm4.staticflickr.com/3038/3006954462_acbd9dfdd1_z.jpg", "id": 385719}, {"license": 3, "file_name": "000000172595.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000172595.jpg", "height": 360, "width": 640, "date_captured": "2013-11-21 02:17:23", "flickr_url": "http://farm3.staticflickr.com/2090/2984548986_cc725122ed_z.jpg", "id": 172595}, {"license": 3, "file_name": "000000328601.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000328601.jpg", "height": 640, "width": 396, "date_captured": "2013-11-21 03:11:37", "flickr_url": "http://farm8.staticflickr.com/7263/7624248012_a0e593772d_z.jpg", "id": 328601}, {"license": 3, "file_name": "000000076468.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000076468.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 03:15:06", "flickr_url": "http://farm9.staticflickr.com/8166/7527342832_6488e6ea6a_z.jpg", "id": 76468}, {"license": 1, "file_name": "000000373382.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000373382.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 03:18:14", "flickr_url": "http://farm9.staticflickr.com/8167/7478485178_29c9af308c_z.jpg", "id": 373382}, {"license": 3, "file_name": "000000554156.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000554156.jpg", "height": 428, "width": 640, "date_captured": "2013-11-21 04:09:00", "flickr_url": "http://farm7.staticflickr.com/6135/5923308795_be9b10de91_z.jpg", "id": 554156}, {"license": 3, "file_name": "000000530820.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000530820.jpg", "height": 428, "width": 640, "date_captured": "2013-11-21 05:37:44", "flickr_url": "http://farm5.staticflickr.com/4057/4508391158_2a1cf85e22_z.jpg", "id": 530820}, {"license": 6, "file_name": "000000400161.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000400161.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 19:42:45", "flickr_url": "http://farm5.staticflickr.com/4049/4222478864_71df3c5d56_z.jpg", "id": 400161}, {"license": 1, "file_name": "000000383838.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000383838.jpg", "height": 588, "width": 640, "date_captured": "2013-11-21 19:52:55", "flickr_url": "http://farm4.staticflickr.com/3200/3048031301_be404e305e_z.jpg", "id": 383838}, {"license": 1, "file_name": "000000498032.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000498032.jpg", "height": 464, "width": 640, "date_captured": "2013-11-21 19:53:04", "flickr_url": "http://farm4.staticflickr.com/3019/3048873118_3c4862acc8_z.jpg", "id": 498032}, {"license": 4, "file_name": "000000479248.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000479248.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 21:17:16", "flickr_url": "http://farm8.staticflickr.com/7296/9019745657_c8776db96f_z.jpg", "id": 479248}, {"license": 3, "file_name": "000000181753.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000181753.jpg", "height": 423, "width": 640, "date_captured": "2013-11-21 21:21:37", "flickr_url": "http://farm8.staticflickr.com/7396/9108533371_f64f24c2e0_z.jpg", "id": 181753}, {"license": 6, "file_name": "000000415716.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000415716.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 22:14:58", "flickr_url": "http://farm8.staticflickr.com/7099/7073397565_aa42e39ae3_z.jpg", "id": 415716}, {"license": 1, "file_name": "000000027186.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000027186.jpg", "height": 428, "width": 640, "date_captured": "2013-11-21 22:58:05", "flickr_url": "http://farm2.staticflickr.com/1036/1039717379_9bdceb6a00_z.jpg", "id": 27186}, {"license": 3, "file_name": "000000366225.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000366225.jpg", "height": 640, "width": 541, "date_captured": "2013-11-22 00:44:54", "flickr_url": "http://farm4.staticflickr.com/3247/2958848282_7654a38840_z.jpg", "id": 366225}, {"license": 3, "file_name": "000000379441.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000379441.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 01:11:06", "flickr_url": "http://farm3.staticflickr.com/2727/4201573839_0204100e85_z.jpg", "id": 379441}, {"license": 1, "file_name": "000000015660.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000015660.jpg", "height": 348, "width": 640, "date_captured": "2013-11-22 08:41:16", "flickr_url": "http://farm4.staticflickr.com/3356/3414127711_6772851b0d_z.jpg", "id": 15660}, {"license": 3, "file_name": "000000039914.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000039914.jpg", "height": 640, "width": 487, "date_captured": "2013-11-22 09:17:50", "flickr_url": "http://farm4.staticflickr.com/3332/3523981728_922358d980_z.jpg", "id": 39914}, {"license": 2, "file_name": "000000304404.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000304404.jpg", "height": 428, "width": 640, "date_captured": "2013-11-22 17:17:25", "flickr_url": "http://farm5.staticflickr.com/4069/4517838864_e45bb9bbd8_z.jpg", "id": 304404}, {"license": 1, "file_name": "000000570688.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000570688.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 18:05:42", "flickr_url": "http://farm4.staticflickr.com/3204/2815814426_1f7c172343_z.jpg", "id": 570688}, {"license": 2, "file_name": "000000236599.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000236599.jpg", "height": 346, "width": 500, "date_captured": "2013-11-22 18:21:52", "flickr_url": "http://farm4.staticflickr.com/3283/2647092117_6548eefe67_z.jpg", "id": 236599}, {"license": 1, "file_name": "000000450439.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000450439.jpg", "height": 234, "width": 500, "date_captured": "2013-11-22 19:09:18", "flickr_url": "http://farm2.staticflickr.com/1306/1299619204_6c573ca782_z.jpg", "id": 450439}, {"license": 3, "file_name": "000000429690.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000429690.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 23:09:33", "flickr_url": "http://farm9.staticflickr.com/8428/7595034240_9ee9456494_z.jpg", "id": 429690}, {"license": 1, "file_name": "000000248112.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000248112.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 04:58:33", "flickr_url": "http://farm2.staticflickr.com/1306/1050131424_7fad52fdaf_z.jpg", "id": 248112}, {"license": 3, "file_name": "000000166166.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000166166.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 02:31:11", "flickr_url": "http://farm1.staticflickr.com/98/240434564_022e144bc5_z.jpg", "id": 166166}, {"license": 4, "file_name": "000000427034.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000427034.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 03:03:17", "flickr_url": "http://farm5.staticflickr.com/4146/4845125160_b23cf4bd2d_z.jpg", "id": 427034}, {"license": 4, "file_name": "000000170116.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000170116.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 03:33:48", "flickr_url": "http://farm6.staticflickr.com/5049/5274554848_e82152e035_z.jpg", "id": 170116}, {"license": 4, "file_name": "000000410735.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000410735.jpg", "height": 512, "width": 640, "date_captured": "2013-11-24 04:07:58", "flickr_url": "http://farm9.staticflickr.com/8247/8459265911_9ec56fb242_z.jpg", "id": 410735}, {"license": 3, "file_name": "000000052413.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000052413.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 07:36:55", "flickr_url": "http://farm1.staticflickr.com/127/333573348_142a7ba78f_z.jpg", "id": 52413}, {"license": 5, "file_name": "000000397354.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000397354.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 12:51:42", "flickr_url": "http://farm1.staticflickr.com/188/410311643_a3c829f3c7_z.jpg", "id": 397354}, {"license": 5, "file_name": "000000579321.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000579321.jpg", "height": 498, "width": 640, "date_captured": "2013-11-14 17:38:30", "flickr_url": "http://farm5.staticflickr.com/4114/4737904204_465fa5d55b_z.jpg", "id": 579321}, {"license": 1, "file_name": "000000044279.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000044279.jpg", "height": 425, "width": 640, "date_captured": "2013-11-14 21:38:52", "flickr_url": "http://farm8.staticflickr.com/7218/7349195240_70f103dd9c_z.jpg", "id": 44279}, {"license": 5, "file_name": "000000157807.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000157807.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 00:47:08", "flickr_url": "http://farm5.staticflickr.com/4073/4770866338_a523fcc318_z.jpg", "id": 157807}, {"license": 3, "file_name": "000000256941.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000256941.jpg", "height": 500, "width": 332, "date_captured": "2013-11-15 00:49:07", "flickr_url": "http://farm4.staticflickr.com/3530/3919637880_97ddb479d3_z.jpg", "id": 256941}, {"license": 2, "file_name": "000000279278.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000279278.jpg", "height": 429, "width": 640, "date_captured": "2013-11-15 01:07:24", "flickr_url": "http://farm7.staticflickr.com/6101/6275412942_f8dc734c3f_z.jpg", "id": 279278}, {"license": 3, "file_name": "000000255401.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000255401.jpg", "height": 500, "width": 416, "date_captured": "2013-11-15 01:55:07", "flickr_url": "http://farm2.staticflickr.com/1354/1136927762_8f1b0e15ff_z.jpg", "id": 255401}, {"license": 2, "file_name": "000000555597.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000555597.jpg", "height": 517, "width": 640, "date_captured": "2013-11-15 14:09:33", "flickr_url": "http://farm4.staticflickr.com/3594/3401214437_07a7c97a29_z.jpg", "id": 555597}, {"license": 2, "file_name": "000000455624.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000455624.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 15:01:15", "flickr_url": "http://farm6.staticflickr.com/5468/9319669583_85e7a9a53f_z.jpg", "id": 455624}, {"license": 6, "file_name": "000000376310.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000376310.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 15:01:34", "flickr_url": "http://farm6.staticflickr.com/5176/5488508152_f55c24dcfb_z.jpg", "id": 376310}, {"license": 3, "file_name": "000000005503.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000005503.jpg", "height": 500, "width": 333, "date_captured": "2013-11-15 15:46:41", "flickr_url": "http://farm3.staticflickr.com/2157/2309588405_14e58fb1df_z.jpg", "id": 5503}, {"license": 2, "file_name": "000000322429.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000322429.jpg", "height": 640, "width": 472, "date_captured": "2013-11-15 17:52:38", "flickr_url": "http://farm5.staticflickr.com/4125/4980957415_da7a803b2f_z.jpg", "id": 322429}, {"license": 3, "file_name": "000000143556.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000143556.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 01:43:12", "flickr_url": "http://farm8.staticflickr.com/7157/6565944057_188bca7f98_z.jpg", "id": 143556}, {"license": 3, "file_name": "000000392481.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000392481.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 03:15:51", "flickr_url": "http://farm6.staticflickr.com/5235/5869044390_36412656d1_z.jpg", "id": 392481}, {"license": 3, "file_name": "000000404128.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000404128.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 03:20:12", "flickr_url": "http://farm6.staticflickr.com/5304/5868834007_25e0d57d4d_z.jpg", "id": 404128}, {"license": 1, "file_name": "000000497568.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000497568.jpg", "height": 424, "width": 640, "date_captured": "2013-11-16 03:27:46", "flickr_url": "http://farm3.staticflickr.com/2244/5823035178_0e774c1ccd_z.jpg", "id": 497568}, {"license": 1, "file_name": "000000500049.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000500049.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 05:11:16", "flickr_url": "http://farm6.staticflickr.com/5452/10186615656_704065da75_z.jpg", "id": 500049}, {"license": 5, "file_name": "000000161044.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000161044.jpg", "height": 229, "width": 640, "date_captured": "2013-11-16 05:13:56", "flickr_url": "http://farm3.staticflickr.com/2829/9764719432_1752044f8a_z.jpg", "id": 161044}, {"license": 3, "file_name": "000000144114.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000144114.jpg", "height": 400, "width": 600, "date_captured": "2013-11-16 05:18:35", "flickr_url": "http://farm5.staticflickr.com/4128/5034480486_ce84fda979_z.jpg", "id": 144114}, {"license": 4, "file_name": "000000248810.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000248810.jpg", "height": 500, "width": 375, "date_captured": "2013-11-16 12:15:56", "flickr_url": "http://farm1.staticflickr.com/195/490309492_7b15dd0b70_z.jpg", "id": 248810}, {"license": 5, "file_name": "000000296969.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000296969.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 13:21:40", "flickr_url": "http://farm9.staticflickr.com/8454/8070831125_45bb9e5dce_z.jpg", "id": 296969}, {"license": 5, "file_name": "000000011511.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000011511.jpg", "height": 464, "width": 640, "date_captured": "2013-11-16 13:42:03", "flickr_url": "http://farm8.staticflickr.com/7124/7556029168_519acfdf09_z.jpg", "id": 11511}, {"license": 3, "file_name": "000000396903.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000396903.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 14:50:03", "flickr_url": "http://farm9.staticflickr.com/8022/7606135916_b63f6edaca_z.jpg", "id": 396903}, {"license": 3, "file_name": "000000017905.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000017905.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 18:01:33", "flickr_url": "http://farm1.staticflickr.com/44/173771776_53b9c22bb6_z.jpg", "id": 17905}, {"license": 1, "file_name": "000000372203.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000372203.jpg", "height": 360, "width": 640, "date_captured": "2013-11-16 19:45:22", "flickr_url": "http://farm5.staticflickr.com/4072/5076379812_e9908583a1_z.jpg", "id": 372203}, {"license": 3, "file_name": "000000189226.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000189226.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 20:32:31", "flickr_url": "http://farm4.staticflickr.com/3253/3023023126_bd87265b39_z.jpg", "id": 189226}, {"license": 1, "file_name": "000000027768.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000027768.jpg", "height": 612, "width": 612, "date_captured": "2013-11-16 21:27:14", "flickr_url": "http://farm3.staticflickr.com/2856/9216477741_80665fccb9_z.jpg", "id": 27768}, {"license": 6, "file_name": "000000350607.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000350607.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 22:26:00", "flickr_url": "http://farm8.staticflickr.com/7216/7388929398_9842fea8f7_z.jpg", "id": 350607}, {"license": 5, "file_name": "000000418959.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000418959.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 22:28:32", "flickr_url": "http://farm3.staticflickr.com/2487/3742351178_c0861b75b8_z.jpg", "id": 418959}, {"license": 1, "file_name": "000000204871.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000204871.jpg", "height": 612, "width": 612, "date_captured": "2013-11-16 22:31:12", "flickr_url": "http://farm9.staticflickr.com/8352/8301686238_c8f6ee0544_z.jpg", "id": 204871}, {"license": 3, "file_name": "000000088462.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000088462.jpg", "height": 383, "width": 640, "date_captured": "2013-11-16 22:55:32", "flickr_url": "http://farm9.staticflickr.com/8530/8617202676_a76a770ca9_z.jpg", "id": 88462}, {"license": 3, "file_name": "000000099114.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000099114.jpg", "height": 335, "width": 500, "date_captured": "2013-11-17 00:07:16", "flickr_url": "http://farm2.staticflickr.com/1147/1468584600_9ebbc9619d_z.jpg", "id": 99114}, {"license": 3, "file_name": "000000449198.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000449198.jpg", "height": 333, "width": 500, "date_captured": "2013-11-17 00:41:18", "flickr_url": "http://farm1.staticflickr.com/110/306422461_046c85929f_z.jpg", "id": 449198}, {"license": 3, "file_name": "000000475150.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000475150.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 01:10:25", "flickr_url": "http://farm3.staticflickr.com/2417/2143884003_3e52e7183e_z.jpg", "id": 475150}, {"license": 2, "file_name": "000000320232.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000320232.jpg", "height": 500, "width": 375, "date_captured": "2013-11-17 01:27:11", "flickr_url": "http://farm2.staticflickr.com/1342/989212868_fda967635c_z.jpg", "id": 320232}, {"license": 1, "file_name": "000000581100.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000581100.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 01:54:15", "flickr_url": "http://farm1.staticflickr.com/44/126152589_e6ddbb600e_z.jpg", "id": 581100}, {"license": 5, "file_name": "000000006723.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000006723.jpg", "height": 361, "width": 640, "date_captured": "2013-11-17 02:01:58", "flickr_url": "http://farm5.staticflickr.com/4009/4575950642_c74342b147_z.jpg", "id": 6723}, {"license": 2, "file_name": "000000289594.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000289594.jpg", "height": 640, "width": 519, "date_captured": "2013-11-17 02:13:24", "flickr_url": "http://farm4.staticflickr.com/3566/3424450962_ef896e3507_z.jpg", "id": 289594}, {"license": 3, "file_name": "000000476491.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000476491.jpg", "height": 500, "width": 336, "date_captured": "2013-11-17 02:17:06", "flickr_url": "http://farm2.staticflickr.com/1228/705130310_efe4010616_z.jpg", "id": 476491}, {"license": 5, "file_name": "000000031322.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000031322.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 02:20:56", "flickr_url": "http://farm9.staticflickr.com/8007/7687196846_7ee8e555d8_z.jpg", "id": 31322}, {"license": 3, "file_name": "000000278006.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000278006.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 02:35:21", "flickr_url": "http://farm4.staticflickr.com/3069/2996937832_708a6d39d5_z.jpg", "id": 278006}, {"license": 1, "file_name": "000000314914.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000314914.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 02:50:29", "flickr_url": "http://farm3.staticflickr.com/2564/3911471792_e19306ea36_z.jpg", "id": 314914}, {"license": 3, "file_name": "000000337987.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000337987.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 02:52:13", "flickr_url": "http://farm3.staticflickr.com/2610/3790158055_9b7ccf1d46_z.jpg", "id": 337987}, {"license": 4, "file_name": "000000249643.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000249643.jpg", "height": 461, "width": 640, "date_captured": "2013-11-17 04:17:20", "flickr_url": "http://farm8.staticflickr.com/7360/9167356387_9e47583e84_z.jpg", "id": 249643}, {"license": 5, "file_name": "000000578967.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000578967.jpg", "height": 469, "width": 640, "date_captured": "2013-11-17 04:45:03", "flickr_url": "http://farm8.staticflickr.com/7209/6832980054_ee796f23d7_z.jpg", "id": 578967}, {"license": 3, "file_name": "000000247838.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000247838.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 04:55:54", "flickr_url": "http://farm8.staticflickr.com/7155/6681271907_7175a95f4d_z.jpg", "id": 247838}, {"license": 1, "file_name": "000000131444.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000131444.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 05:19:37", "flickr_url": "http://farm2.staticflickr.com/1335/1439665198_7c24bd1add_z.jpg", "id": 131444}, {"license": 2, "file_name": "000000261796.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000261796.jpg", "height": 640, "width": 523, "date_captured": "2013-11-17 05:31:21", "flickr_url": "http://farm4.staticflickr.com/3643/3441827336_6e94d370f5_z.jpg", "id": 261796}, {"license": 2, "file_name": "000000312549.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000312549.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 06:33:37", "flickr_url": "http://farm3.staticflickr.com/2324/2028792552_b7c6376846_z.jpg", "id": 312549}, {"license": 1, "file_name": "000000135410.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000135410.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 10:27:45", "flickr_url": "http://farm2.staticflickr.com/1039/1418871599_0eb113933c_z.jpg", "id": 135410}, {"license": 6, "file_name": "000000573626.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000573626.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 15:55:07", "flickr_url": "http://farm1.staticflickr.com/21/35015846_e04c04f89b_z.jpg", "id": 573626}, {"license": 3, "file_name": "000000306582.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000306582.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 18:22:34", "flickr_url": "http://farm1.staticflickr.com/125/377040578_c63a14c390_z.jpg", "id": 306582}, {"license": 2, "file_name": "000000426372.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000426372.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 18:31:03", "flickr_url": "http://farm9.staticflickr.com/8120/8601665941_922d321a47_z.jpg", "id": 426372}, {"license": 4, "file_name": "000000147745.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000147745.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 20:29:20", "flickr_url": "http://farm8.staticflickr.com/7237/7160109697_fdb3a01c97_z.jpg", "id": 147745}, {"license": 4, "file_name": "000000154000.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000154000.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 20:29:41", "flickr_url": "http://farm8.staticflickr.com/7098/7345318588_d85c0761a3_z.jpg", "id": 154000}, {"license": 1, "file_name": "000000535094.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000535094.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 21:48:53", "flickr_url": "http://farm9.staticflickr.com/8290/7678889642_cb082e8190_z.jpg", "id": 535094}, {"license": 1, "file_name": "000000286422.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000286422.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 22:12:44", "flickr_url": "http://farm3.staticflickr.com/2572/5783843164_9eb6766ce8_z.jpg", "id": 286422}, {"license": 2, "file_name": "000000357081.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000357081.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 22:14:21", "flickr_url": "http://farm8.staticflickr.com/7109/7450063864_744289dcbc_z.jpg", "id": 357081}, {"license": 5, "file_name": "000000458223.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000458223.jpg", "height": 338, "width": 640, "date_captured": "2013-11-18 00:21:42", "flickr_url": "http://farm9.staticflickr.com/8315/7936120492_4fef29acb3_z.jpg", "id": 458223}, {"license": 5, "file_name": "000000311518.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000311518.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 00:22:56", "flickr_url": "http://farm6.staticflickr.com/5445/7054786245_00054fbcc6_z.jpg", "id": 311518}, {"license": 5, "file_name": "000000445248.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000445248.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 01:47:08", "flickr_url": "http://farm9.staticflickr.com/8461/8070789912_67178c81a4_z.jpg", "id": 445248}, {"license": 1, "file_name": "000000170739.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000170739.jpg", "height": 514, "width": 640, "date_captured": "2013-11-18 05:48:24", "flickr_url": "http://farm9.staticflickr.com/8163/7244940442_303358eee8_z.jpg", "id": 170739}, {"license": 1, "file_name": "000000281754.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000281754.jpg", "height": 640, "width": 419, "date_captured": "2013-11-18 09:29:50", "flickr_url": "http://farm9.staticflickr.com/8153/7609977512_e4617c024a_z.jpg", "id": 281754}, {"license": 1, "file_name": "000000112110.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000112110.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 10:20:02", "flickr_url": "http://farm1.staticflickr.com/71/185837648_161b1ddb97_z.jpg", "id": 112110}, {"license": 1, "file_name": "000000341094.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000341094.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 12:04:25", "flickr_url": "http://farm1.staticflickr.com/53/136231516_1e078385b3_z.jpg", "id": 341094}, {"license": 3, "file_name": "000000161978.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000161978.jpg", "height": 433, "width": 640, "date_captured": "2013-11-18 12:36:25", "flickr_url": "http://farm4.staticflickr.com/3061/3102109611_a76d25447a_z.jpg", "id": 161978}, {"license": 3, "file_name": "000000517832.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000517832.jpg", "height": 640, "width": 640, "date_captured": "2013-11-18 12:54:52", "flickr_url": "http://farm5.staticflickr.com/4137/4921209955_92acc115ff_z.jpg", "id": 517832}, {"license": 1, "file_name": "000000521819.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000521819.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 17:37:22", "flickr_url": "http://farm2.staticflickr.com/1209/1327607843_4681d8b97e_z.jpg", "id": 521819}, {"license": 3, "file_name": "000000303499.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000303499.jpg", "height": 500, "width": 333, "date_captured": "2013-11-18 21:08:13", "flickr_url": "http://farm3.staticflickr.com/2336/2235970774_ee7df35461_z.jpg", "id": 303499}, {"license": 2, "file_name": "000000448263.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000448263.jpg", "height": 240, "width": 320, "date_captured": "2013-11-19 18:54:12", "flickr_url": "http://farm9.staticflickr.com/8424/7748697374_1e3296c670_z.jpg", "id": 448263}, {"license": 1, "file_name": "000000559547.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000559547.jpg", "height": 491, "width": 640, "date_captured": "2013-11-19 18:55:16", "flickr_url": "http://farm9.staticflickr.com/8008/7595393194_6dfdeb81cf_z.jpg", "id": 559547}, {"license": 1, "file_name": "000000109118.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000109118.jpg", "height": 640, "width": 486, "date_captured": "2013-11-19 18:55:20", "flickr_url": "http://farm8.staticflickr.com/7246/7595393808_a2c0982505_z.jpg", "id": 109118}, {"license": 4, "file_name": "000000174123.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000174123.jpg", "height": 399, "width": 500, "date_captured": "2013-11-19 19:23:07", "flickr_url": "http://farm4.staticflickr.com/3023/2334881948_0838093fde_z.jpg", "id": 174123}, {"license": 4, "file_name": "000000366711.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000366711.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 19:58:02", "flickr_url": "http://farm9.staticflickr.com/8463/8406266140_d29926b155_z.jpg", "id": 366711}, {"license": 1, "file_name": "000000013597.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000013597.jpg", "height": 425, "width": 640, "date_captured": "2013-11-19 20:18:39", "flickr_url": "http://farm5.staticflickr.com/4040/4474734743_bc5e8973c7_z.jpg", "id": 13597}, {"license": 1, "file_name": "000000579091.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000579091.jpg", "height": 425, "width": 640, "date_captured": "2013-11-19 20:19:33", "flickr_url": "http://farm5.staticflickr.com/4043/4436809661_b16fc8c069_z.jpg", "id": 579091}, {"license": 1, "file_name": "000000209142.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000209142.jpg", "height": 425, "width": 640, "date_captured": "2013-11-19 23:02:53", "flickr_url": "http://farm2.staticflickr.com/1200/4722943655_bb785be622_z.jpg", "id": 209142}, {"license": 1, "file_name": "000000070048.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000070048.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 00:48:47", "flickr_url": "http://farm7.staticflickr.com/6063/6125228801_3603990d04_z.jpg", "id": 70048}, {"license": 1, "file_name": "000000106912.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000106912.jpg", "height": 612, "width": 612, "date_captured": "2013-11-20 01:24:46", "flickr_url": "http://farm8.staticflickr.com/7142/6710963415_92e9a3cd5e_z.jpg", "id": 106912}, {"license": 3, "file_name": "000000276055.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000276055.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 02:05:24", "flickr_url": "http://farm3.staticflickr.com/2612/3902041341_6a5752df45_z.jpg", "id": 276055}, {"license": 1, "file_name": "000000548555.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000548555.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 08:42:27", "flickr_url": "http://farm2.staticflickr.com/1127/5118458132_ae24f84134_z.jpg", "id": 548555}, {"license": 1, "file_name": "000000257084.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000257084.jpg", "height": 333, "width": 500, "date_captured": "2013-11-20 10:45:32", "flickr_url": "http://farm4.staticflickr.com/3150/3042479465_2e2aa241df_z.jpg", "id": 257084}, {"license": 1, "file_name": "000000154087.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000154087.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 11:54:01", "flickr_url": "http://farm3.staticflickr.com/2078/2408993880_8ba509a460_z.jpg", "id": 154087}, {"license": 1, "file_name": "000000217872.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000217872.jpg", "height": 500, "width": 334, "date_captured": "2013-11-20 14:16:18", "flickr_url": "http://farm4.staticflickr.com/3189/2428064355_41b42fa858_z.jpg", "id": 217872}, {"license": 3, "file_name": "000000513567.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000513567.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 14:26:56", "flickr_url": "http://farm1.staticflickr.com/22/25117386_81ca83e550_z.jpg", "id": 513567}, {"license": 1, "file_name": "000000304817.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000304817.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 14:57:25", "flickr_url": "http://farm1.staticflickr.com/44/132285168_b23f4b5a82_z.jpg", "id": 304817}, {"license": 1, "file_name": "000000164115.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000164115.jpg", "height": 500, "width": 500, "date_captured": "2013-11-20 16:14:17", "flickr_url": "http://farm4.staticflickr.com/3070/2807365025_80671b351d_z.jpg", "id": 164115}, {"license": 4, "file_name": "000000341973.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000341973.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 17:15:38", "flickr_url": "http://farm1.staticflickr.com/155/447233381_16ca429fc7_z.jpg", "id": 341973}, {"license": 4, "file_name": "000000554595.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000554595.jpg", "height": 376, "width": 500, "date_captured": "2013-11-20 18:17:47", "flickr_url": "http://farm4.staticflickr.com/3106/2708564093_219fd741d1_z.jpg", "id": 554595}, {"license": 6, "file_name": "000000540932.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000540932.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 20:14:01", "flickr_url": "http://farm3.staticflickr.com/2874/8869631472_9fe4eaa05d_z.jpg", "id": 540932}, {"license": 1, "file_name": "000000046048.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000046048.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 23:04:00", "flickr_url": "http://farm2.staticflickr.com/1416/915105041_b745a51821_z.jpg", "id": 46048}, {"license": 3, "file_name": "000000059635.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000059635.jpg", "height": 640, "width": 486, "date_captured": "2013-11-20 23:25:37", "flickr_url": "http://farm3.staticflickr.com/2284/5735274038_49d33e32cf_z.jpg", "id": 59635}, {"license": 1, "file_name": "000000289415.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000289415.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 23:59:13", "flickr_url": "http://farm8.staticflickr.com/7041/7084203519_6f6f86ef23_z.jpg", "id": 289415}, {"license": 3, "file_name": "000000162581.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000162581.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 01:15:23", "flickr_url": "http://farm3.staticflickr.com/2405/2367726871_d60ab3dc2b_z.jpg", "id": 162581}, {"license": 2, "file_name": "000000000139.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000000139.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 01:34:01", "flickr_url": "http://farm9.staticflickr.com/8035/8024364858_9c41dc1666_z.jpg", "id": 139}, {"license": 3, "file_name": "000000033221.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000033221.jpg", "height": 333, "width": 500, "date_captured": "2013-11-21 01:43:55", "flickr_url": "http://farm1.staticflickr.com/146/420740869_2904c5a807_z.jpg", "id": 33221}, {"license": 1, "file_name": "000000334417.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000334417.jpg", "height": 423, "width": 640, "date_captured": "2013-11-21 03:07:40", "flickr_url": "http://farm8.staticflickr.com/7020/6454867805_23c59a104d_z.jpg", "id": 334417}, {"license": 3, "file_name": "000000276285.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000276285.jpg", "height": 640, "width": 427, "date_captured": "2013-11-21 04:18:18", "flickr_url": "http://farm6.staticflickr.com/5146/5680829389_dbd87c203e_z.jpg", "id": 276285}, {"license": 4, "file_name": "000000237071.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000237071.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 04:32:06", "flickr_url": "http://farm6.staticflickr.com/5058/5723625041_762048f6f3_z.jpg", "id": 237071}, {"license": 4, "file_name": "000000085772.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000085772.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 04:32:13", "flickr_url": "http://farm6.staticflickr.com/5206/5724188680_6c2980c45e_z.jpg", "id": 85772}, {"license": 3, "file_name": "000000025603.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000025603.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 05:12:23", "flickr_url": "http://farm5.staticflickr.com/4105/4961922351_e152eb6e65_z.jpg", "id": 25603}, {"license": 3, "file_name": "000000158744.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000158744.jpg", "height": 424, "width": 640, "date_captured": "2013-11-21 23:23:21", "flickr_url": "http://farm6.staticflickr.com/5021/5574826152_40a08b14b9_z.jpg", "id": 158744}, {"license": 3, "file_name": "000000474021.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000474021.jpg", "height": 375, "width": 500, "date_captured": "2013-11-21 23:29:57", "flickr_url": "http://farm2.staticflickr.com/1210/540266610_a250b6bcfa_z.jpg", "id": 474021}, {"license": 4, "file_name": "000000506178.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000506178.jpg", "height": 500, "width": 375, "date_captured": "2013-11-21 23:35:47", "flickr_url": "http://farm1.staticflickr.com/155/411777080_a4dfa5fef0_z.jpg", "id": 506178}, {"license": 2, "file_name": "000000159399.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000159399.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 08:46:46", "flickr_url": "http://farm2.staticflickr.com/1323/558410077_f4e3a0e870_z.jpg", "id": 159399}, {"license": 3, "file_name": "000000521719.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000521719.jpg", "height": 640, "width": 427, "date_captured": "2013-11-22 08:48:16", "flickr_url": "http://farm3.staticflickr.com/2696/4272970338_0ea02769c8_z.jpg", "id": 521719}, {"license": 1, "file_name": "000000193245.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000193245.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 18:07:00", "flickr_url": "http://farm4.staticflickr.com/3058/2716799053_9436986e4d_z.jpg", "id": 193245}, {"license": 4, "file_name": "000000163117.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000163117.jpg", "height": 500, "width": 376, "date_captured": "2013-11-22 18:09:06", "flickr_url": "http://farm4.staticflickr.com/3038/2664074764_d519c92e13_z.jpg", "id": 163117}, {"license": 6, "file_name": "000000224675.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000224675.jpg", "height": 300, "width": 400, "date_captured": "2013-11-22 20:12:43", "flickr_url": "http://farm1.staticflickr.com/54/146360903_8da58c454f_z.jpg", "id": 224675}, {"license": 6, "file_name": "000000109827.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000109827.jpg", "height": 424, "width": 640, "date_captured": "2013-11-22 20:18:06", "flickr_url": "http://farm5.staticflickr.com/4128/4953645578_73003f2489_z.jpg", "id": 109827}, {"license": 1, "file_name": "000000089296.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000089296.jpg", "height": 426, "width": 640, "date_captured": "2013-11-22 20:47:39", "flickr_url": "http://farm5.staticflickr.com/4062/4433127371_0eae604973_z.jpg", "id": 89296}, {"license": 1, "file_name": "000000320490.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000320490.jpg", "height": 426, "width": 640, "date_captured": "2013-11-22 21:07:52", "flickr_url": "http://farm5.staticflickr.com/4128/4980317431_0bbede97ac_z.jpg", "id": 320490}, {"license": 4, "file_name": "000000160012.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000160012.jpg", "height": 461, "width": 640, "date_captured": "2013-11-23 03:07:08", "flickr_url": "http://farm5.staticflickr.com/4009/4409615060_2f5554e232_z.jpg", "id": 160012}, {"license": 2, "file_name": "000000312263.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000312263.jpg", "height": 640, "width": 527, "date_captured": "2013-11-23 18:02:01", "flickr_url": "http://farm4.staticflickr.com/3541/3342643942_6b7bfcc9e2_z.jpg", "id": 312263}, {"license": 3, "file_name": "000000363461.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000363461.jpg", "height": 478, "width": 640, "date_captured": "2013-11-24 02:28:04", "flickr_url": "http://farm7.staticflickr.com/6140/5986801789_6f89757639_z.jpg", "id": 363461}, {"license": 4, "file_name": "000000154213.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000154213.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 04:25:43", "flickr_url": "http://farm1.staticflickr.com/119/291975294_c43f13310c_z.jpg", "id": 154213}, {"license": 3, "file_name": "000000365886.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000365886.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 07:35:40", "flickr_url": "http://farm1.staticflickr.com/185/376312424_755259cdcf_z.jpg", "id": 365886}, {"license": 1, "file_name": "000000203629.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000203629.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 08:40:28", "flickr_url": "http://farm4.staticflickr.com/3305/3501087861_a9293dbe96_z.jpg", "id": 203629}, {"license": 1, "file_name": "000000180798.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000180798.jpg", "height": 500, "width": 375, "date_captured": "2013-11-24 08:41:47", "flickr_url": "http://farm3.staticflickr.com/2125/3527457915_461f203c50_z.jpg", "id": 180798}, {"license": 4, "file_name": "000000446207.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000446207.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 08:48:40", "flickr_url": "http://farm4.staticflickr.com/3121/3160251864_87bc5a4273_z.jpg", "id": 446207}, {"license": 4, "file_name": "000000233139.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000233139.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 11:49:20", "flickr_url": "http://farm8.staticflickr.com/7012/6449253229_94676a38e6_z.jpg", "id": 233139}, {"license": 1, "file_name": "000000215114.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000215114.jpg", "height": 640, "width": 548, "date_captured": "2013-11-24 12:17:44", "flickr_url": "http://farm1.staticflickr.com/172/420849612_1034fd5496_z.jpg", "id": 215114}, {"license": 5, "file_name": "000000175438.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000175438.jpg", "height": 468, "width": 640, "date_captured": "2013-11-24 12:18:03", "flickr_url": "http://farm9.staticflickr.com/8315/8013060462_4cdf330e98_z.jpg", "id": 175438}, {"license": 3, "file_name": "000000150638.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000150638.jpg", "height": 469, "width": 640, "date_captured": "2013-11-24 12:51:28", "flickr_url": "http://farm2.staticflickr.com/1254/1263431870_7000067c13_z.jpg", "id": 150638}, {"license": 2, "file_name": "000000429530.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000429530.jpg", "height": 478, "width": 640, "date_captured": "2013-11-24 12:52:14", "flickr_url": "http://farm8.staticflickr.com/7059/6882226501_57388dfa11_z.jpg", "id": 429530}, {"license": 6, "file_name": "000000095069.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000095069.jpg", "height": 450, "width": 600, "date_captured": "2013-11-24 16:10:47", "flickr_url": "http://farm8.staticflickr.com/7085/7145916659_5fb4d68584_z.jpg", "id": 95069}, {"license": 3, "file_name": "000000161397.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000161397.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 19:26:11", "flickr_url": "http://farm3.staticflickr.com/2623/3885018077_4a38f137d2_z.jpg", "id": 161397}, {"license": 5, "file_name": "000000569700.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000569700.jpg", "height": 341, "width": 500, "date_captured": "2013-11-24 19:40:38", "flickr_url": "http://farm4.staticflickr.com/3649/3366342211_1b0c0024a7_z.jpg", "id": 569700}, {"license": 1, "file_name": "000000231237.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000231237.jpg", "height": 500, "width": 334, "date_captured": "2013-11-24 20:21:50", "flickr_url": "http://farm4.staticflickr.com/3607/3342869781_cd4a4b1154_z.jpg", "id": 231237}, {"license": 3, "file_name": "000000419098.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000419098.jpg", "height": 554, "width": 640, "date_captured": "2013-11-24 20:45:52", "flickr_url": "http://farm5.staticflickr.com/4040/4646355793_0e228a7f94_z.jpg", "id": 419098}, {"license": 3, "file_name": "000000237517.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000237517.jpg", "height": 640, "width": 478, "date_captured": "2013-11-25 14:21:30", "flickr_url": "http://farm3.staticflickr.com/2850/9593892813_bafd9d4f1b_z.jpg", "id": 237517}, {"license": 1, "file_name": "000000579070.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000579070.jpg", "height": 427, "width": 640, "date_captured": "2013-11-25 19:21:49", "flickr_url": "http://farm8.staticflickr.com/7228/7174560990_8617ca3e0c_z.jpg", "id": 579070}, {"license": 2, "file_name": "000000078404.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000078404.jpg", "height": 350, "width": 500, "date_captured": "2013-11-14 12:32:32", "flickr_url": "http://farm2.staticflickr.com/1248/1367485839_0630c7232c_z.jpg", "id": 78404}, {"license": 1, "file_name": "000000482436.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000482436.jpg", "height": 401, "width": 640, "date_captured": "2013-11-14 13:08:29", "flickr_url": "http://farm9.staticflickr.com/8498/8375840805_4317f6670c_z.jpg", "id": 482436}, {"license": 2, "file_name": "000000485424.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000485424.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 20:04:22", "flickr_url": "http://farm9.staticflickr.com/8480/8263041984_2ca75f655e_z.jpg", "id": 485424}, {"license": 4, "file_name": "000000435880.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000435880.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 21:31:07", "flickr_url": "http://farm5.staticflickr.com/4073/4930877922_1fab517ac9_z.jpg", "id": 435880}, {"license": 1, "file_name": "000000425226.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000425226.jpg", "height": 640, "width": 480, "date_captured": "2013-11-14 21:48:51", "flickr_url": "http://farm5.staticflickr.com/4055/4546463824_bc40e0752b_z.jpg", "id": 425226}, {"license": 1, "file_name": "000000276018.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000276018.jpg", "height": 640, "width": 416, "date_captured": "2013-11-14 22:22:59", "flickr_url": "http://farm7.staticflickr.com/6193/6092925710_93330b7ca6_z.jpg", "id": 276018}, {"license": 4, "file_name": "000000426166.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000426166.jpg", "height": 332, "width": 500, "date_captured": "2013-11-15 02:50:26", "flickr_url": "http://farm4.staticflickr.com/3052/2319776213_ced79b883c_z.jpg", "id": 426166}, {"license": 4, "file_name": "000000292005.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000292005.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 06:31:23", "flickr_url": "http://farm5.staticflickr.com/4111/5056263040_d7a8a38df7_z.jpg", "id": 292005}, {"license": 3, "file_name": "000000033854.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000033854.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 09:20:10", "flickr_url": "http://farm8.staticflickr.com/7119/7526175430_8fe4d60895_z.jpg", "id": 33854}, {"license": 2, "file_name": "000000052412.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000052412.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 10:13:18", "flickr_url": "http://farm5.staticflickr.com/4076/4905357035_c6c55ffb1d_z.jpg", "id": 52412}, {"license": 1, "file_name": "000000523229.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000523229.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 11:51:07", "flickr_url": "http://farm5.staticflickr.com/4135/4818219212_3ae8d6f56f_z.jpg", "id": 523229}, {"license": 4, "file_name": "000000484415.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000484415.jpg", "height": 240, "width": 320, "date_captured": "2013-11-15 11:54:36", "flickr_url": "http://farm4.staticflickr.com/3144/2768975838_956c01dcfb_z.jpg", "id": 484415}, {"license": 1, "file_name": "000000068093.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000068093.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 12:39:06", "flickr_url": "http://farm5.staticflickr.com/4120/4803479594_4fea166ab0_z.jpg", "id": 68093}, {"license": 1, "file_name": "000000299887.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000299887.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 12:39:32", "flickr_url": "http://farm5.staticflickr.com/4118/4802846699_7e16a96143_z.jpg", "id": 299887}, {"license": 1, "file_name": "000000394199.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000394199.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 12:41:57", "flickr_url": "http://farm5.staticflickr.com/4122/4802834437_8c0a1f1728_z.jpg", "id": 394199}, {"license": 1, "file_name": "000000481567.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000481567.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 13:34:59", "flickr_url": "http://farm9.staticflickr.com/8195/8095641878_aefaa95d0f_z.jpg", "id": 481567}, {"license": 1, "file_name": "000000405432.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000405432.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 15:17:07", "flickr_url": "http://farm4.staticflickr.com/3464/3257302265_c15dcb4deb_z.jpg", "id": 405432}, {"license": 4, "file_name": "000000314251.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000314251.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 16:38:27", "flickr_url": "http://farm8.staticflickr.com/7175/6623822161_9144c8b9c8_z.jpg", "id": 314251}, {"license": 5, "file_name": "000000260657.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000260657.jpg", "height": 269, "width": 500, "date_captured": "2013-11-15 18:32:04", "flickr_url": "http://farm1.staticflickr.com/64/224275062_1e6bfa57b8_z.jpg", "id": 260657}, {"license": 3, "file_name": "000000290619.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000290619.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 18:40:00", "flickr_url": "http://farm5.staticflickr.com/4124/5171178092_89b6aaa7ff_z.jpg", "id": 290619}, {"license": 1, "file_name": "000000214869.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000214869.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 20:33:29", "flickr_url": "http://farm3.staticflickr.com/2243/1900976427_3bf763653a_z.jpg", "id": 214869}, {"license": 2, "file_name": "000000256192.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000256192.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 20:59:46", "flickr_url": "http://farm6.staticflickr.com/5038/7051498615_f2777fb4c3_z.jpg", "id": 256192}, {"license": 1, "file_name": "000000041872.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000041872.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 23:32:32", "flickr_url": "http://farm1.staticflickr.com/47/141191598_6a910a99f2_z.jpg", "id": 41872}, {"license": 1, "file_name": "000000208208.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000208208.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 02:25:43", "flickr_url": "http://farm1.staticflickr.com/64/159120542_c06da3c4cc_z.jpg", "id": 208208}, {"license": 3, "file_name": "000000098520.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000098520.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 04:23:10", "flickr_url": "http://farm6.staticflickr.com/5294/5421886681_374e0eb709_z.jpg", "id": 98520}, {"license": 3, "file_name": "000000388258.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000388258.jpg", "height": 478, "width": 640, "date_captured": "2013-11-16 12:59:43", "flickr_url": "http://farm7.staticflickr.com/6179/6183424891_fa32f2df93_z.jpg", "id": 388258}, {"license": 3, "file_name": "000000026204.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000026204.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 13:56:51", "flickr_url": "http://farm9.staticflickr.com/8419/8964746313_864e0dc2b9_z.jpg", "id": 26204}, {"license": 3, "file_name": "000000296317.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000296317.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 15:06:55", "flickr_url": "http://farm4.staticflickr.com/3125/2772347036_a4fdb15537_z.jpg", "id": 296317}, {"license": 3, "file_name": "000000234526.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000234526.jpg", "height": 612, "width": 612, "date_captured": "2013-11-16 15:12:40", "flickr_url": "http://farm8.staticflickr.com/7226/7052099687_89e05fc7b0_z.jpg", "id": 234526}, {"license": 4, "file_name": "000000202339.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000202339.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 18:05:40", "flickr_url": "http://farm9.staticflickr.com/8070/8204757796_ce9fd630a2_z.jpg", "id": 202339}, {"license": 2, "file_name": "000000238039.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000238039.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 20:22:09", "flickr_url": "http://farm6.staticflickr.com/5327/9128626433_506e875423_z.jpg", "id": 238039}, {"license": 3, "file_name": "000000459437.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000459437.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 20:58:38", "flickr_url": "http://farm9.staticflickr.com/8031/7909370418_6274c75247_z.jpg", "id": 459437}, {"license": 2, "file_name": "000000355817.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000355817.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 22:01:16", "flickr_url": "http://farm6.staticflickr.com/5322/8791879882_3638745527_z.jpg", "id": 355817}, {"license": 5, "file_name": "000000351530.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000351530.jpg", "height": 378, "width": 640, "date_captured": "2013-11-16 22:01:29", "flickr_url": "http://farm9.staticflickr.com/8334/8125752591_b7f7b8da3b_z.jpg", "id": 351530}, {"license": 3, "file_name": "000000569273.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000569273.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 22:11:20", "flickr_url": "http://farm2.staticflickr.com/1360/1480941013_a4fe5ad9b5_z.jpg", "id": 569273}, {"license": 2, "file_name": "000000357748.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000357748.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 22:15:21", "flickr_url": "http://farm8.staticflickr.com/7330/8728802899_1024d4ed4b_z.jpg", "id": 357748}, {"license": 3, "file_name": "000000020107.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000020107.jpg", "height": 500, "width": 333, "date_captured": "2013-11-16 23:28:30", "flickr_url": "http://farm2.staticflickr.com/1311/968078473_4a7d696ec6_z.jpg", "id": 20107}, {"license": 4, "file_name": "000000415536.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000415536.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 23:39:46", "flickr_url": "http://farm9.staticflickr.com/8193/8395338258_0f5e408112_z.jpg", "id": 415536}, {"license": 4, "file_name": "000000423617.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000423617.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 00:28:01", "flickr_url": "http://farm9.staticflickr.com/8479/8195678412_8d8d906379_z.jpg", "id": 423617}, {"license": 4, "file_name": "000000084170.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000084170.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 00:36:46", "flickr_url": "http://farm9.staticflickr.com/8190/8134254727_0b28cabe93_z.jpg", "id": 84170}, {"license": 2, "file_name": "000000564336.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000564336.jpg", "height": 360, "width": 640, "date_captured": "2013-11-17 02:25:02", "flickr_url": "http://farm9.staticflickr.com/8114/8691044089_96aebcec84_z.jpg", "id": 564336}, {"license": 1, "file_name": "000000509258.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000509258.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 02:44:03", "flickr_url": "http://farm3.staticflickr.com/2442/3890965295_113e7d94e4_z.jpg", "id": 509258}, {"license": 2, "file_name": "000000104119.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000104119.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 03:37:05", "flickr_url": "http://farm8.staticflickr.com/7442/10177200393_c9256092f8_z.jpg", "id": 104119}, {"license": 3, "file_name": "000000042563.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000042563.jpg", "height": 640, "width": 624, "date_captured": "2013-11-17 04:41:03", "flickr_url": "http://farm9.staticflickr.com/8356/8394031685_eda26e594d_z.jpg", "id": 42563}, {"license": 2, "file_name": "000000066135.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000066135.jpg", "height": 380, "width": 500, "date_captured": "2013-11-17 05:20:04", "flickr_url": "http://farm4.staticflickr.com/3203/3148008119_8a20215894_z.jpg", "id": 66135}, {"license": 4, "file_name": "000000027932.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000027932.jpg", "height": 307, "width": 288, "date_captured": "2013-11-17 05:35:52", "flickr_url": "http://farm2.staticflickr.com/1149/837387952_4f322eeacb_z.jpg", "id": 27932}, {"license": 4, "file_name": "000000488710.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000488710.jpg", "height": 400, "width": 500, "date_captured": "2013-11-17 06:00:03", "flickr_url": "http://farm4.staticflickr.com/3215/2733176290_9e0f0ded71_z.jpg", "id": 488710}, {"license": 3, "file_name": "000000363072.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000363072.jpg", "height": 640, "width": 640, "date_captured": "2013-11-17 06:07:02", "flickr_url": "http://farm4.staticflickr.com/3771/10198355025_29191f8b8a_z.jpg", "id": 363072}, {"license": 4, "file_name": "000000469246.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000469246.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 06:11:53", "flickr_url": "http://farm3.staticflickr.com/2811/10210296625_2a7e88ee6c_z.jpg", "id": 469246}, {"license": 4, "file_name": "000000234660.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000234660.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 08:34:06", "flickr_url": "http://farm6.staticflickr.com/5512/9244258043_b067791e45_z.jpg", "id": 234660}, {"license": 4, "file_name": "000000430871.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000430871.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 11:34:17", "flickr_url": "http://farm4.staticflickr.com/3103/2401473192_052ee55344_z.jpg", "id": 430871}, {"license": 4, "file_name": "000000140203.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000140203.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 15:33:57", "flickr_url": "http://farm1.staticflickr.com/47/151349771_c85a058c7d_z.jpg", "id": 140203}, {"license": 3, "file_name": "000000434996.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000434996.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 16:12:58", "flickr_url": "http://farm4.staticflickr.com/3427/3266685118_b13d10bd5f_z.jpg", "id": 434996}, {"license": 1, "file_name": "000000018833.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000018833.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 16:35:54", "flickr_url": "http://farm1.staticflickr.com/92/217798870_1d648607b4_z.jpg", "id": 18833}, {"license": 1, "file_name": "000000231580.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000231580.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 16:42:55", "flickr_url": "http://farm3.staticflickr.com/2184/1751051658_3c0250326e_z.jpg", "id": 231580}, {"license": 2, "file_name": "000000350003.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000350003.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 19:51:18", "flickr_url": "http://farm9.staticflickr.com/8445/7858130416_bf868d66a5_z.jpg", "id": 350003}, {"license": 3, "file_name": "000000409867.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000409867.jpg", "height": 640, "width": 428, "date_captured": "2013-11-17 20:34:33", "flickr_url": "http://farm4.staticflickr.com/3561/3416956061_aa82af1ef4_z.jpg", "id": 409867}, {"license": 2, "file_name": "000000033109.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000033109.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 20:55:29", "flickr_url": "http://farm6.staticflickr.com/5116/7065186875_a68fb077d2_z.jpg", "id": 33109}, {"license": 4, "file_name": "000000058111.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000058111.jpg", "height": 490, "width": 500, "date_captured": "2013-11-17 21:19:54", "flickr_url": "http://farm2.staticflickr.com/1212/1432440864_7e0f17c51a_z.jpg", "id": 58111}, {"license": 2, "file_name": "000000295420.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000295420.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 21:40:23", "flickr_url": "http://farm8.staticflickr.com/7025/6513193103_bac7babca5_z.jpg", "id": 295420}, {"license": 4, "file_name": "000000343076.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000343076.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 21:58:02", "flickr_url": "http://farm4.staticflickr.com/3528/3940136096_1831da02ea_z.jpg", "id": 343076}, {"license": 1, "file_name": "000000050006.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000050006.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 00:24:09", "flickr_url": "http://farm1.staticflickr.com/45/178532934_815b08667e_z.jpg", "id": 50006}, {"license": 1, "file_name": "000000443426.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000443426.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 01:35:23", "flickr_url": "http://farm4.staticflickr.com/3491/4042707985_45a7f64d1d_z.jpg", "id": 443426}, {"license": 3, "file_name": "000000460683.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000460683.jpg", "height": 640, "width": 478, "date_captured": "2013-11-18 03:19:32", "flickr_url": "http://farm7.staticflickr.com/6183/6083219339_ac07a74af7_z.jpg", "id": 460683}, {"license": 5, "file_name": "000000265108.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000265108.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 03:31:39", "flickr_url": "http://farm2.staticflickr.com/1386/5178670692_63a4365c9c_z.jpg", "id": 265108}, {"license": 6, "file_name": "000000540466.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000540466.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 03:44:33", "flickr_url": "http://farm9.staticflickr.com/8476/8088589908_b69105d043_z.jpg", "id": 540466}, {"license": 1, "file_name": "000000503855.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000503855.jpg", "height": 361, "width": 640, "date_captured": "2013-11-18 04:30:57", "flickr_url": "http://farm8.staticflickr.com/7423/8718554993_bf40de9dd2_z.jpg", "id": 503855}, {"license": 4, "file_name": "000000275198.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000275198.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 04:57:10", "flickr_url": "http://farm8.staticflickr.com/7262/7488569650_9e0faaf072_z.jpg", "id": 275198}, {"license": 3, "file_name": "000000058384.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000058384.jpg", "height": 466, "width": 640, "date_captured": "2013-11-18 05:32:00", "flickr_url": "http://farm8.staticflickr.com/7252/7846835264_2c93071735_z.jpg", "id": 58384}, {"license": 3, "file_name": "000000554579.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000554579.jpg", "height": 640, "width": 494, "date_captured": "2013-11-18 08:09:38", "flickr_url": "http://farm6.staticflickr.com/5121/5273994775_e6dd427290_z.jpg", "id": 554579}, {"license": 3, "file_name": "000000071226.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000071226.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 08:34:08", "flickr_url": "http://farm1.staticflickr.com/222/464840939_5dd74b72e8_z.jpg", "id": 71226}, {"license": 3, "file_name": "000000183437.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000183437.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 08:41:04", "flickr_url": "http://farm6.staticflickr.com/5128/5211000498_3fbea7da3c_z.jpg", "id": 183437}, {"license": 1, "file_name": "000000009891.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000009891.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 11:16:03", "flickr_url": "http://farm4.staticflickr.com/3270/3057687916_b9f0810501_z.jpg", "id": 9891}, {"license": 4, "file_name": "000000347930.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000347930.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 12:57:28", "flickr_url": "http://farm5.staticflickr.com/4049/4377071026_9646c57fb7_z.jpg", "id": 347930}, {"license": 4, "file_name": "000000389933.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000389933.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 13:05:33", "flickr_url": "http://farm5.staticflickr.com/4061/4376326145_7ef66603e3_z.jpg", "id": 389933}, {"license": 3, "file_name": "000000022192.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000022192.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 13:49:19", "flickr_url": "http://farm1.staticflickr.com/164/439871525_8e3758952b_z.jpg", "id": 22192}, {"license": 2, "file_name": "000000493019.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000493019.jpg", "height": 479, "width": 640, "date_captured": "2013-11-18 16:34:01", "flickr_url": "http://farm1.staticflickr.com/62/176071675_dfead8d388_z.jpg", "id": 493019}, {"license": 3, "file_name": "000000491683.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000491683.jpg", "height": 500, "width": 366, "date_captured": "2013-11-18 19:52:36", "flickr_url": "http://farm2.staticflickr.com/1036/699576358_4450dcb2c0_z.jpg", "id": 491683}, {"license": 1, "file_name": "000000052462.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000052462.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 21:35:15", "flickr_url": "http://farm2.staticflickr.com/1364/808938729_5786377d0c_z.jpg", "id": 52462}, {"license": 2, "file_name": "000000504439.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000504439.jpg", "height": 243, "width": 500, "date_captured": "2013-11-18 22:14:14", "flickr_url": "http://farm1.staticflickr.com/14/16049051_0d5322a3d4_z.jpg", "id": 504439}, {"license": 3, "file_name": "000000347370.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000347370.jpg", "height": 375, "width": 500, "date_captured": "2013-11-19 17:54:14", "flickr_url": "http://farm3.staticflickr.com/2078/2520678550_52eb6a89d2_z.jpg", "id": 347370}, {"license": 3, "file_name": "000000002587.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000002587.jpg", "height": 375, "width": 500, "date_captured": "2013-11-19 18:38:34", "flickr_url": "http://farm3.staticflickr.com/2035/2108767724_3060d97f2a_z.jpg", "id": 2587}, {"license": 1, "file_name": "000000060855.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000060855.jpg", "height": 399, "width": 500, "date_captured": "2013-11-19 18:47:39", "flickr_url": "http://farm5.staticflickr.com/4047/4447533713_cea36b0e1a_z.jpg", "id": 60855}, {"license": 1, "file_name": "000000210030.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000210030.jpg", "height": 400, "width": 500, "date_captured": "2013-11-19 19:08:12", "flickr_url": "http://farm3.staticflickr.com/2204/2519451785_4f5a49e503_z.jpg", "id": 210030}, {"license": 3, "file_name": "000000293794.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000293794.jpg", "height": 640, "width": 428, "date_captured": "2013-11-19 19:22:02", "flickr_url": "http://farm3.staticflickr.com/2148/2203975757_67a106dbd8_z.jpg", "id": 293794}, {"license": 4, "file_name": "000000498919.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000498919.jpg", "height": 324, "width": 432, "date_captured": "2013-11-19 19:31:34", "flickr_url": "http://farm1.staticflickr.com/226/508669075_b4ad2fd7e5_z.jpg", "id": 498919}, {"license": 6, "file_name": "000000153797.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000153797.jpg", "height": 400, "width": 500, "date_captured": "2013-11-19 19:56:29", "flickr_url": "http://farm3.staticflickr.com/2506/3932122142_02d722f008_z.jpg", "id": 153797}, {"license": 3, "file_name": "000000358427.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000358427.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 20:25:38", "flickr_url": "http://farm4.staticflickr.com/3221/5822777555_256a558387_z.jpg", "id": 358427}, {"license": 4, "file_name": "000000169356.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000169356.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 23:26:27", "flickr_url": "http://farm8.staticflickr.com/7298/9444351194_66d294013f_z.jpg", "id": 169356}, {"license": 3, "file_name": "000000378673.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000378673.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 00:50:17", "flickr_url": "http://farm8.staticflickr.com/7124/7810951178_b622f1466c_z.jpg", "id": 378673}, {"license": 3, "file_name": "000000284106.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000284106.jpg", "height": 421, "width": 640, "date_captured": "2013-11-20 04:51:09", "flickr_url": "http://farm5.staticflickr.com/4067/4577747892_925648321a_z.jpg", "id": 284106}, {"license": 3, "file_name": "000000223090.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000223090.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 05:31:47", "flickr_url": "http://farm4.staticflickr.com/3581/3643861153_68684eac67_z.jpg", "id": 223090}, {"license": 3, "file_name": "000000263068.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000263068.jpg", "height": 500, "width": 330, "date_captured": "2013-11-20 09:18:49", "flickr_url": "http://farm4.staticflickr.com/3458/3219464616_06fe10fef4_z.jpg", "id": 263068}, {"license": 1, "file_name": "000000319617.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000319617.jpg", "height": 240, "width": 320, "date_captured": "2013-11-20 14:23:51", "flickr_url": "http://farm1.staticflickr.com/40/79665940_3a62f3e9f1_z.jpg", "id": 319617}, {"license": 2, "file_name": "000000297595.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000297595.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 22:13:26", "flickr_url": "http://farm8.staticflickr.com/7003/6547901351_a9a65b4464_z.jpg", "id": 297595}, {"license": 2, "file_name": "000000253452.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000253452.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 23:33:41", "flickr_url": "http://farm6.staticflickr.com/5114/7425303236_7007745f5b_z.jpg", "id": 253452}, {"license": 2, "file_name": "000000451693.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000451693.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 23:38:21", "flickr_url": "http://farm3.staticflickr.com/2649/3755516017_7c445ce851_z.jpg", "id": 451693}, {"license": 1, "file_name": "000000575815.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000575815.jpg", "height": 451, "width": 640, "date_captured": "2013-11-21 00:14:55", "flickr_url": "http://farm4.staticflickr.com/3154/2598187190_e2c628dac1_z.jpg", "id": 575815}, {"license": 4, "file_name": "000000403353.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000403353.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 00:42:02", "flickr_url": "http://farm9.staticflickr.com/8486/8245255095_5669dbf878_z.jpg", "id": 403353}, {"license": 1, "file_name": "000000296222.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000296222.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 01:00:56", "flickr_url": "http://farm1.staticflickr.com/128/378798836_194673a363_z.jpg", "id": 296222}, {"license": 4, "file_name": "000000382125.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000382125.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 02:51:33", "flickr_url": "http://farm6.staticflickr.com/5239/7053693277_0d21e419e0_z.jpg", "id": 382125}, {"license": 2, "file_name": "000000495732.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000495732.jpg", "height": 640, "width": 427, "date_captured": "2013-11-21 20:08:39", "flickr_url": "http://farm3.staticflickr.com/2357/1847158168_87d9fdd66e_z.jpg", "id": 495732}, {"license": 4, "file_name": "000000110449.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000110449.jpg", "height": 375, "width": 500, "date_captured": "2013-11-21 21:39:11", "flickr_url": "http://farm4.staticflickr.com/3189/2947274789_a1a35b33c3_z.jpg", "id": 110449}, {"license": 3, "file_name": "000000367386.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000367386.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 23:02:11", "flickr_url": "http://farm6.staticflickr.com/5079/5899843092_02eebb3a4e_z.jpg", "id": 367386}, {"license": 3, "file_name": "000000319100.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000319100.jpg", "height": 333, "width": 500, "date_captured": "2013-11-21 23:32:11", "flickr_url": "http://farm1.staticflickr.com/189/495719022_642e6111ea_z.jpg", "id": 319100}, {"license": 1, "file_name": "000000507575.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000507575.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 01:18:44", "flickr_url": "http://farm3.staticflickr.com/2009/2229775674_9d29e7b964_z.jpg", "id": 507575}, {"license": 2, "file_name": "000000492758.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000492758.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 01:37:21", "flickr_url": "http://farm3.staticflickr.com/2489/3966060902_3b14b3ab72_z.jpg", "id": 492758}, {"license": 6, "file_name": "000000057760.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000057760.jpg", "height": 313, "width": 500, "date_captured": "2013-11-22 09:54:41", "flickr_url": "http://farm4.staticflickr.com/3010/2749181045_ed450e5d36_z.jpg", "id": 57760}, {"license": 1, "file_name": "000000016439.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000016439.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 19:14:13", "flickr_url": "http://farm1.staticflickr.com/52/171945415_f37fb5d1b2_z.jpg", "id": 16439}, {"license": 4, "file_name": "000000043737.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000043737.jpg", "height": 640, "width": 480, "date_captured": "2013-11-22 21:12:00", "flickr_url": "http://farm4.staticflickr.com/3593/3595526099_c28a93aaa0_z.jpg", "id": 43737}, {"license": 4, "file_name": "000000292225.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000292225.jpg", "height": 240, "width": 320, "date_captured": "2013-11-23 02:53:57", "flickr_url": "http://farm3.staticflickr.com/2481/3863153706_214a8c8682_z.jpg", "id": 292225}, {"license": 1, "file_name": "000000171788.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000171788.jpg", "height": 640, "width": 427, "date_captured": "2013-11-23 04:22:06", "flickr_url": "http://farm4.staticflickr.com/3293/2532994349_2338ccbf6a_z.jpg", "id": 171788}, {"license": 6, "file_name": "000000504389.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000504389.jpg", "height": 320, "width": 500, "date_captured": "2013-11-23 04:41:03", "flickr_url": "http://farm3.staticflickr.com/2035/2148826012_5202877cf3_z.jpg", "id": 504389}, {"license": 3, "file_name": "000000411774.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000411774.jpg", "height": 500, "width": 375, "date_captured": "2013-11-23 04:46:45", "flickr_url": "http://farm3.staticflickr.com/2348/1811842173_3519d9196b_z.jpg", "id": 411774}, {"license": 1, "file_name": "000000181499.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000181499.jpg", "height": 513, "width": 640, "date_captured": "2013-11-24 00:42:16", "flickr_url": "http://farm5.staticflickr.com/4020/5153080168_f3d75c20bd_z.jpg", "id": 181499}, {"license": 4, "file_name": "000000192191.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000192191.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 04:22:35", "flickr_url": "http://farm8.staticflickr.com/7250/8154240196_8e5844d168_z.jpg", "id": 192191}, {"license": 1, "file_name": "000000433192.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000433192.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 04:31:26", "flickr_url": "http://farm4.staticflickr.com/3611/3389204868_00ea42723a_z.jpg", "id": 433192}, {"license": 3, "file_name": "000000506933.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000506933.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 05:20:42", "flickr_url": "http://farm3.staticflickr.com/2169/2245277458_5b3f1767f3_z.jpg", "id": 506933}, {"license": 5, "file_name": "000000001296.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000001296.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 08:22:26", "flickr_url": "http://farm5.staticflickr.com/4010/4690487654_90536a4a16_z.jpg", "id": 1296}, {"license": 1, "file_name": "000000444275.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000444275.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 10:10:08", "flickr_url": "http://farm4.staticflickr.com/3200/3569524285_cf9876e7f8_z.jpg", "id": 444275}, {"license": 3, "file_name": "000000512248.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000512248.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 13:12:11", "flickr_url": "http://farm6.staticflickr.com/5545/9377380545_82f5a2aaf7_z.jpg", "id": 512248}, {"license": 1, "file_name": "000000117492.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000117492.jpg", "height": 428, "width": 640, "date_captured": "2013-11-24 14:57:09", "flickr_url": "http://farm9.staticflickr.com/8424/7876905220_bc01ac60fe_z.jpg", "id": 117492}, {"license": 3, "file_name": "000000145591.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000145591.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 15:39:56", "flickr_url": "http://farm9.staticflickr.com/8151/7695351438_0b1c4e77c5_z.jpg", "id": 145591}, {"license": 1, "file_name": "000000356531.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000356531.jpg", "height": 480, "width": 640, "date_captured": "2013-11-25 08:25:39", "flickr_url": "http://farm8.staticflickr.com/7454/9408958553_c006c83ce0_z.jpg", "id": 356531}, {"license": 1, "file_name": "000000376322.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000376322.jpg", "height": 640, "width": 478, "date_captured": "2013-11-25 14:04:13", "flickr_url": "http://farm4.staticflickr.com/3716/10061418735_5c6f42abc8_z.jpg", "id": 376322}, {"license": 3, "file_name": "000000379476.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000379476.jpg", "height": 640, "width": 485, "date_captured": "2013-11-25 19:40:09", "flickr_url": "http://farm7.staticflickr.com/6130/5936954881_c4c693d951_z.jpg", "id": 379476}, {"license": 1, "file_name": "000000068833.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000068833.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 16:32:09", "flickr_url": "http://farm8.staticflickr.com/7152/6427642465_a62732d040_z.jpg", "id": 68833}, {"license": 4, "file_name": "000000211825.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000211825.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 16:35:32", "flickr_url": "http://farm1.staticflickr.com/33/35522808_8bba7bf555_z.jpg", "id": 211825}, {"license": 1, "file_name": "000000229311.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000229311.jpg", "height": 375, "width": 500, "date_captured": "2013-11-14 17:12:42", "flickr_url": "http://farm4.staticflickr.com/3524/3256866358_ba30981b1b_z.jpg", "id": 229311}, {"license": 3, "file_name": "000000351609.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000351609.jpg", "height": 333, "width": 500, "date_captured": "2013-11-14 22:32:55", "flickr_url": "http://farm3.staticflickr.com/2086/2325589657_046aa96aa8_z.jpg", "id": 351609}, {"license": 1, "file_name": "000000368900.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000368900.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 22:52:29", "flickr_url": "http://farm1.staticflickr.com/54/131074736_509e1dbe40_z.jpg", "id": 368900}, {"license": 1, "file_name": "000000384808.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000384808.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 02:34:27", "flickr_url": "http://farm1.staticflickr.com/12/14446615_a56e2212e1_z.jpg", "id": 384808}, {"license": 1, "file_name": "000000291634.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000291634.jpg", "height": 640, "width": 433, "date_captured": "2013-11-15 04:19:55", "flickr_url": "http://farm3.staticflickr.com/2466/3745107848_93f14d1ced_z.jpg", "id": 291634}, {"license": 1, "file_name": "000000222094.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000222094.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 11:46:48", "flickr_url": "http://farm1.staticflickr.com/120/270252770_cd5defa74d_z.jpg", "id": 222094}, {"license": 3, "file_name": "000000206271.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000206271.jpg", "height": 640, "width": 323, "date_captured": "2013-11-15 11:49:37", "flickr_url": "http://farm4.staticflickr.com/3380/3274345137_26e08f113f_z.jpg", "id": 206271}, {"license": 1, "file_name": "000000348045.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000348045.jpg", "height": 640, "width": 588, "date_captured": "2013-11-15 11:53:57", "flickr_url": "http://farm5.staticflickr.com/4096/4871732511_51b569a359_z.jpg", "id": 348045}, {"license": 1, "file_name": "000000329614.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000329614.jpg", "height": 208, "width": 500, "date_captured": "2013-11-15 12:46:03", "flickr_url": "http://farm3.staticflickr.com/2208/1566687722_76f544ba91_z.jpg", "id": 329614}, {"license": 1, "file_name": "000000089761.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000089761.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 13:03:38", "flickr_url": "http://farm4.staticflickr.com/3197/2290175187_03aa52057d_z.jpg", "id": 89761}, {"license": 2, "file_name": "000000267351.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000267351.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 13:49:27", "flickr_url": "http://farm4.staticflickr.com/3048/2853803053_174c5b3eda_z.jpg", "id": 267351}, {"license": 3, "file_name": "000000435003.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000435003.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 15:15:27", "flickr_url": "http://farm1.staticflickr.com/106/283322282_c7c58460cc_z.jpg", "id": 435003}, {"license": 2, "file_name": "000000131138.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000131138.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 16:32:36", "flickr_url": "http://farm6.staticflickr.com/5258/5517114538_91f825ecdf_z.jpg", "id": 131138}, {"license": 4, "file_name": "000000248314.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000248314.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 16:34:57", "flickr_url": "http://farm1.staticflickr.com/188/428244913_382d66e2f3_z.jpg", "id": 248314}, {"license": 4, "file_name": "000000508482.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000508482.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 19:03:15", "flickr_url": "http://farm9.staticflickr.com/8437/7987831442_6e59b3fec0_z.jpg", "id": 508482}, {"license": 5, "file_name": "000000046378.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000046378.jpg", "height": 360, "width": 640, "date_captured": "2013-11-15 22:19:51", "flickr_url": "http://farm3.staticflickr.com/2163/1809310489_e2707eed0b_z.jpg", "id": 46378}, {"license": 4, "file_name": "000000129135.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000129135.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 22:26:00", "flickr_url": "http://farm9.staticflickr.com/8460/8047015886_5c3bd7f289_z.jpg", "id": 129135}, {"license": 1, "file_name": "000000293324.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000293324.jpg", "height": 406, "width": 640, "date_captured": "2013-11-16 03:27:33", "flickr_url": "http://farm4.staticflickr.com/3552/5812461870_eb24c8eac5_z.jpg", "id": 293324}, {"license": 2, "file_name": "000000156071.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000156071.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 12:42:51", "flickr_url": "http://farm9.staticflickr.com/8369/8563113883_e5ef304217_z.jpg", "id": 156071}, {"license": 2, "file_name": "000000446206.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000446206.jpg", "height": 385, "width": 640, "date_captured": "2013-11-16 15:58:19", "flickr_url": "http://farm9.staticflickr.com/8336/8079936048_15133bdb38_z.jpg", "id": 446206}, {"license": 5, "file_name": "000000166509.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000166509.jpg", "height": 444, "width": 640, "date_captured": "2013-11-16 17:39:23", "flickr_url": "http://farm3.staticflickr.com/2402/1604308452_b19493a3d8_z.jpg", "id": 166509}, {"license": 1, "file_name": "000000087244.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000087244.jpg", "height": 500, "width": 375, "date_captured": "2013-11-16 22:17:00", "flickr_url": "http://farm1.staticflickr.com/59/158813865_7bd1993680_z.jpg", "id": 87244}, {"license": 1, "file_name": "000000438269.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000438269.jpg", "height": 640, "width": 429, "date_captured": "2013-11-16 22:31:03", "flickr_url": "http://farm9.staticflickr.com/8465/8093472347_d17aea6b1c_z.jpg", "id": 438269}, {"license": 2, "file_name": "000000249219.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000249219.jpg", "height": 479, "width": 640, "date_captured": "2013-11-16 23:46:58", "flickr_url": "http://farm9.staticflickr.com/8080/8349093393_7d27562e6e_z.jpg", "id": 249219}, {"license": 1, "file_name": "000000474452.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000474452.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 23:54:22", "flickr_url": "http://farm4.staticflickr.com/3041/2739269285_8823f6b5a5_z.jpg", "id": 474452}, {"license": 6, "file_name": "000000338532.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000338532.jpg", "height": 500, "width": 375, "date_captured": "2013-11-17 00:54:48", "flickr_url": "http://farm3.staticflickr.com/2182/2384376657_6f18569158_z.jpg", "id": 338532}, {"license": 1, "file_name": "000000157847.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000157847.jpg", "height": 385, "width": 640, "date_captured": "2013-11-17 03:21:21", "flickr_url": "http://farm8.staticflickr.com/7087/7155959573_79593d3fd6_z.jpg", "id": 157847}, {"license": 1, "file_name": "000000134034.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000134034.jpg", "height": 500, "width": 475, "date_captured": "2013-11-17 04:51:10", "flickr_url": "http://farm1.staticflickr.com/203/495169717_920fec1ded_z.jpg", "id": 134034}, {"license": 2, "file_name": "000000166259.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000166259.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 05:32:32", "flickr_url": "http://farm4.staticflickr.com/3795/9520522544_11c058a88b_z.jpg", "id": 166259}, {"license": 3, "file_name": "000000267946.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000267946.jpg", "height": 332, "width": 500, "date_captured": "2013-11-17 05:51:15", "flickr_url": "http://farm4.staticflickr.com/3286/2871610071_81f0f3607d_z.jpg", "id": 267946}, {"license": 2, "file_name": "000000489046.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000489046.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 06:10:28", "flickr_url": "http://farm3.staticflickr.com/2858/9341822354_c9f332cc5d_z.jpg", "id": 489046}, {"license": 3, "file_name": "000000347163.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000347163.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 09:54:58", "flickr_url": "http://farm3.staticflickr.com/2409/2289443305_bfae1e9d01_z.jpg", "id": 347163}, {"license": 2, "file_name": "000000210099.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000210099.jpg", "height": 538, "width": 640, "date_captured": "2013-11-17 18:53:38", "flickr_url": "http://farm4.staticflickr.com/3601/3430897685_6833d5914c_z.jpg", "id": 210099}, {"license": 3, "file_name": "000000353970.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000353970.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 18:57:55", "flickr_url": "http://farm4.staticflickr.com/3404/3656561219_efeee2da54_z.jpg", "id": 353970}, {"license": 5, "file_name": "000000416170.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000416170.jpg", "height": 640, "width": 424, "date_captured": "2013-11-17 20:56:56", "flickr_url": "http://farm5.staticflickr.com/4084/5431709496_86fbc8af7c_z.jpg", "id": 416170}, {"license": 3, "file_name": "000000574315.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000574315.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 21:23:14", "flickr_url": "http://farm3.staticflickr.com/2010/2247055627_5269f84985_z.jpg", "id": 574315}, {"license": 2, "file_name": "000000328286.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000328286.jpg", "height": 424, "width": 640, "date_captured": "2013-11-17 21:59:45", "flickr_url": "http://farm6.staticflickr.com/5528/9252685908_63f351a7c3_z.jpg", "id": 328286}, {"license": 1, "file_name": "000000156372.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000156372.jpg", "height": 500, "width": 335, "date_captured": "2013-11-17 22:47:46", "flickr_url": "http://farm3.staticflickr.com/2519/4131167338_3e084f9bf1_z.jpg", "id": 156372}, {"license": 1, "file_name": "000000463849.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000463849.jpg", "height": 640, "width": 564, "date_captured": "2013-11-18 00:22:28", "flickr_url": "http://farm9.staticflickr.com/8430/7735573034_4cec02c692_z.jpg", "id": 463849}, {"license": 1, "file_name": "000000423944.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000423944.jpg", "height": 640, "width": 448, "date_captured": "2013-11-18 00:42:42", "flickr_url": "http://farm4.staticflickr.com/3245/3291373834_bab5dd9ced_z.jpg", "id": 423944}, {"license": 1, "file_name": "000000133645.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000133645.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 00:44:11", "flickr_url": "http://farm6.staticflickr.com/5473/9461789076_23bee56a75_z.jpg", "id": 133645}, {"license": 1, "file_name": "000000222559.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000222559.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 01:02:18", "flickr_url": "http://farm4.staticflickr.com/3158/2597879786_c1b7bfe2b1_z.jpg", "id": 222559}, {"license": 3, "file_name": "000000188689.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000188689.jpg", "height": 500, "width": 333, "date_captured": "2013-11-18 01:03:25", "flickr_url": "http://farm2.staticflickr.com/1041/528579057_317f08abc2_z.jpg", "id": 188689}, {"license": 5, "file_name": "000000100428.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000100428.jpg", "height": 491, "width": 640, "date_captured": "2013-11-18 01:23:11", "flickr_url": "http://farm4.staticflickr.com/3812/9057179560_9849d58a64_z.jpg", "id": 100428}, {"license": 6, "file_name": "000000163682.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000163682.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 01:34:55", "flickr_url": "http://farm9.staticflickr.com/8030/8031034353_a034cae250_z.jpg", "id": 163682}, {"license": 3, "file_name": "000000157213.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000157213.jpg", "height": 360, "width": 640, "date_captured": "2013-11-18 02:04:36", "flickr_url": "http://farm1.staticflickr.com/176/369369838_f0c65e2c6e_z.jpg", "id": 157213}, {"license": 6, "file_name": "000000287527.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000287527.jpg", "height": 640, "width": 640, "date_captured": "2013-11-18 03:48:21", "flickr_url": "http://farm5.staticflickr.com/4067/5144323411_1e1c8a391d_z.jpg", "id": 287527}, {"license": 6, "file_name": "000000388846.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000388846.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 04:19:59", "flickr_url": "http://farm9.staticflickr.com/8052/8369693731_d80c42641f_z.jpg", "id": 388846}, {"license": 1, "file_name": "000000557672.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000557672.jpg", "height": 433, "width": 640, "date_captured": "2013-11-18 05:02:44", "flickr_url": "http://farm4.staticflickr.com/3814/9693265336_ac24acf1d7_z.jpg", "id": 557672}, {"license": 2, "file_name": "000000048504.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000048504.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 05:44:07", "flickr_url": "http://farm8.staticflickr.com/7277/7490351172_b2e440de09_z.jpg", "id": 48504}, {"license": 5, "file_name": "000000465180.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000465180.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 08:16:13", "flickr_url": "http://farm5.staticflickr.com/4119/5415267933_d9e105c25a_z.jpg", "id": 465180}, {"license": 4, "file_name": "000000213033.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000213033.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 08:38:38", "flickr_url": "http://farm8.staticflickr.com/7432/9152238734_d0dd381aa5_z.jpg", "id": 213033}, {"license": 5, "file_name": "000000329041.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000329041.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 10:05:11", "flickr_url": "http://farm4.staticflickr.com/3169/2887451891_ec68bd2df3_z.jpg", "id": 329041}, {"license": 4, "file_name": "000000110972.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000110972.jpg", "height": 487, "width": 640, "date_captured": "2013-11-18 10:52:43", "flickr_url": "http://farm9.staticflickr.com/8033/8046866985_abdbd7f0da_z.jpg", "id": 110972}, {"license": 4, "file_name": "000000520707.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000520707.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 12:09:45", "flickr_url": "http://farm1.staticflickr.com/23/30474880_7ceed20fb0_z.jpg", "id": 520707}, {"license": 1, "file_name": "000000423104.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000423104.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 14:56:10", "flickr_url": "http://farm7.staticflickr.com/6108/6349321807_c643439d65_z.jpg", "id": 423104}, {"license": 2, "file_name": "000000291861.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000291861.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 17:28:15", "flickr_url": "http://farm9.staticflickr.com/8039/7904237364_6610c0bc26_z.jpg", "id": 291861}, {"license": 3, "file_name": "000000515982.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000515982.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 18:21:54", "flickr_url": "http://farm1.staticflickr.com/212/526358657_2c0cf1babc_z.jpg", "id": 515982}, {"license": 1, "file_name": "000000129945.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000129945.jpg", "height": 320, "width": 640, "date_captured": "2013-11-19 18:53:00", "flickr_url": "http://farm9.staticflickr.com/8292/7823680146_af7b1778d6_z.jpg", "id": 129945}, {"license": 1, "file_name": "000000128598.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000128598.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 19:47:36", "flickr_url": "http://farm8.staticflickr.com/7418/8821832506_7ac5544713_z.jpg", "id": 128598}, {"license": 2, "file_name": "000000257478.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000257478.jpg", "height": 398, "width": 500, "date_captured": "2013-11-19 20:23:08", "flickr_url": "http://farm3.staticflickr.com/2463/3549461747_609e0340bd_z.jpg", "id": 257478}, {"license": 4, "file_name": "000000194746.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000194746.jpg", "height": 375, "width": 500, "date_captured": "2013-11-19 20:37:24", "flickr_url": "http://farm1.staticflickr.com/77/174081185_bb73e07e14_z.jpg", "id": 194746}, {"license": 5, "file_name": "000000213171.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000213171.jpg", "height": 500, "width": 375, "date_captured": "2013-11-19 21:36:50", "flickr_url": "http://farm1.staticflickr.com/176/464806941_4657ce252f_z.jpg", "id": 213171}, {"license": 2, "file_name": "000000559707.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000559707.jpg", "height": 640, "width": 478, "date_captured": "2013-11-19 22:52:01", "flickr_url": "http://farm6.staticflickr.com/5292/5493024293_ceced0e4b7_z.jpg", "id": 559707}, {"license": 4, "file_name": "000000309655.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000309655.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 22:57:43", "flickr_url": "http://farm6.staticflickr.com/5011/5389083366_fdf13f2ee6_z.jpg", "id": 309655}, {"license": 1, "file_name": "000000324158.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000324158.jpg", "height": 334, "width": 500, "date_captured": "2013-11-19 23:54:06", "flickr_url": "http://farm1.staticflickr.com/169/417836491_5bf8762150_z.jpg", "id": 324158}, {"license": 4, "file_name": "000000002473.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000002473.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 04:16:17", "flickr_url": "http://farm5.staticflickr.com/4027/4377710907_7b97c2464d_z.jpg", "id": 2473}, {"license": 1, "file_name": "000000068628.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000068628.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 04:38:53", "flickr_url": "http://farm6.staticflickr.com/5088/5331199814_4a714a4fbe_z.jpg", "id": 68628}, {"license": 3, "file_name": "000000447611.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000447611.jpg", "height": 334, "width": 500, "date_captured": "2013-11-20 05:55:13", "flickr_url": "http://farm4.staticflickr.com/3256/3158856535_895383e5c5_z.jpg", "id": 447611}, {"license": 2, "file_name": "000000398438.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000398438.jpg", "height": 333, "width": 500, "date_captured": "2013-11-20 06:12:17", "flickr_url": "http://farm3.staticflickr.com/2318/2537741029_e5f5e4b5cb_z.jpg", "id": 398438}, {"license": 1, "file_name": "000000142790.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000142790.jpg", "height": 375, "width": 500, "date_captured": "2013-11-20 13:16:14", "flickr_url": "http://farm4.staticflickr.com/3452/3397243379_28a0da45e8_z.jpg", "id": 142790}, {"license": 3, "file_name": "000000449190.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000449190.jpg", "height": 359, "width": 640, "date_captured": "2013-11-20 14:43:45", "flickr_url": "http://farm9.staticflickr.com/8293/7555611452_dbea4096d5_z.jpg", "id": 449190}, {"license": 1, "file_name": "000000393469.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000393469.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 14:49:36", "flickr_url": "http://farm1.staticflickr.com/157/398973858_536bacdd06_z.jpg", "id": 393469}, {"license": 3, "file_name": "000000345941.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000345941.jpg", "height": 640, "width": 640, "date_captured": "2013-11-20 15:04:12", "flickr_url": "http://farm9.staticflickr.com/8255/8684753876_8c3e80e270_z.jpg", "id": 345941}, {"license": 3, "file_name": "000000420069.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000420069.jpg", "height": 457, "width": 640, "date_captured": "2013-11-20 15:29:00", "flickr_url": "http://farm3.staticflickr.com/2519/3759349743_055797f157_z.jpg", "id": 420069}, {"license": 3, "file_name": "000000227985.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000227985.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 16:09:13", "flickr_url": "http://farm5.staticflickr.com/4144/5085355093_6332be4493_z.jpg", "id": 227985}, {"license": 3, "file_name": "000000231125.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000231125.jpg", "height": 500, "width": 375, "date_captured": "2013-11-20 16:18:39", "flickr_url": "http://farm1.staticflickr.com/54/194350885_dc1063b270_z.jpg", "id": 231125}, {"license": 1, "file_name": "000000216636.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000216636.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 17:39:20", "flickr_url": "http://farm3.staticflickr.com/2138/2147694355_ba82ff5b43_z.jpg", "id": 216636}, {"license": 3, "file_name": "000000277689.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000277689.jpg", "height": 424, "width": 640, "date_captured": "2013-11-20 19:09:48", "flickr_url": "http://farm9.staticflickr.com/8143/7687972866_4253dd35e1_z.jpg", "id": 277689}, {"license": 3, "file_name": "000000092939.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000092939.jpg", "height": 640, "width": 424, "date_captured": "2013-11-20 19:09:59", "flickr_url": "http://farm9.staticflickr.com/8424/7687913576_232eab921d_z.jpg", "id": 92939}, {"license": 3, "file_name": "000000468332.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000468332.jpg", "height": 424, "width": 640, "date_captured": "2013-11-20 19:23:18", "flickr_url": "http://farm4.staticflickr.com/3826/9451771633_f14cef3a8b_z.jpg", "id": 468332}, {"license": 6, "file_name": "000000009914.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000009914.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 19:57:59", "flickr_url": "http://farm2.staticflickr.com/1151/1466358960_a5359e2a2d_z.jpg", "id": 9914}, {"license": 3, "file_name": "000000016451.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000016451.jpg", "height": 612, "width": 612, "date_captured": "2013-11-20 20:12:37", "flickr_url": "http://farm8.staticflickr.com/7460/9050893513_1fb9508000_z.jpg", "id": 16451}, {"license": 1, "file_name": "000000031620.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000031620.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 22:25:29", "flickr_url": "http://farm9.staticflickr.com/8318/7915532770_205f082fb1_z.jpg", "id": 31620}, {"license": 3, "file_name": "000000420840.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000420840.jpg", "height": 424, "width": 640, "date_captured": "2013-11-20 22:46:46", "flickr_url": "http://farm9.staticflickr.com/8162/7730347798_2052cde7ff_z.jpg", "id": 420840}, {"license": 6, "file_name": "000000422670.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000422670.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 23:04:58", "flickr_url": "http://farm4.staticflickr.com/3261/2475668665_c5f5cfff4e_z.jpg", "id": 422670}, {"license": 3, "file_name": "000000451571.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000451571.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 23:40:04", "flickr_url": "http://farm3.staticflickr.com/2849/9413705750_5144fcff2f_z.jpg", "id": 451571}, {"license": 1, "file_name": "000000213830.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000213830.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 03:08:12", "flickr_url": "http://farm9.staticflickr.com/8281/7741938430_0dec5bb283_z.jpg", "id": 213830}, {"license": 5, "file_name": "000000019432.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000019432.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 04:39:45", "flickr_url": "http://farm6.staticflickr.com/5131/5533564723_6f1633b85e_z.jpg", "id": 19432}, {"license": 6, "file_name": "000000079969.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000079969.jpg", "height": 640, "width": 426, "date_captured": "2013-11-21 05:15:02", "flickr_url": "http://farm5.staticflickr.com/4073/4900461152_cb6d20f178_z.jpg", "id": 79969}, {"license": 3, "file_name": "000000485027.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000485027.jpg", "height": 640, "width": 337, "date_captured": "2013-11-21 05:27:46", "flickr_url": "http://farm5.staticflickr.com/4050/4714244853_fed58c2e1d_z.jpg", "id": 485027}, {"license": 1, "file_name": "000000385029.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000385029.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 05:40:19", "flickr_url": "http://farm5.staticflickr.com/4061/4670536748_8c7bd89494_z.jpg", "id": 385029}, {"license": 3, "file_name": "000000307172.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000307172.jpg", "height": 425, "width": 640, "date_captured": "2013-11-21 05:43:43", "flickr_url": "http://farm5.staticflickr.com/4012/4588998879_c6c2f8f55a_z.jpg", "id": 307172}, {"license": 2, "file_name": "000000521717.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000521717.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 05:55:08", "flickr_url": "http://farm5.staticflickr.com/4006/4270683255_d25e981a66_z.jpg", "id": 521717}, {"license": 1, "file_name": "000000140076.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000140076.jpg", "height": 375, "width": 500, "date_captured": "2013-11-21 20:25:34", "flickr_url": "http://farm3.staticflickr.com/2107/2303282868_361905e9cc_z.jpg", "id": 140076}, {"license": 1, "file_name": "000000182155.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000182155.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 21:53:53", "flickr_url": "http://farm3.staticflickr.com/2387/2512226689_5539ec21bc_z.jpg", "id": 182155}, {"license": 6, "file_name": "000000532761.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000532761.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 22:03:44", "flickr_url": "http://farm8.staticflickr.com/7133/7544629434_724e339b8d_z.jpg", "id": 532761}, {"license": 3, "file_name": "000000468954.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000468954.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 22:36:04", "flickr_url": "http://farm3.staticflickr.com/2048/2123293099_3f0edd9187_z.jpg", "id": 468954}, {"license": 3, "file_name": "000000019786.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000019786.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 00:20:10", "flickr_url": "http://farm1.staticflickr.com/115/317277248_05f5ac031e_z.jpg", "id": 19786}, {"license": 4, "file_name": "000000458410.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000458410.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 00:37:11", "flickr_url": "http://farm5.staticflickr.com/4009/4586518760_6b3d02f30f_z.jpg", "id": 458410}, {"license": 4, "file_name": "000000066635.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000066635.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 00:58:44", "flickr_url": "http://farm1.staticflickr.com/101/256415658_3e03393dd5_z.jpg", "id": 66635}, {"license": 1, "file_name": "000000383289.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000383289.jpg", "height": 444, "width": 640, "date_captured": "2013-11-22 02:12:26", "flickr_url": "http://farm9.staticflickr.com/8038/7905622718_dde8336e49_z.jpg", "id": 383289}, {"license": 6, "file_name": "000000294695.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000294695.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 17:17:42", "flickr_url": "http://farm4.staticflickr.com/3590/3497278976_84d372800a_z.jpg", "id": 294695}, {"license": 6, "file_name": "000000143068.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000143068.jpg", "height": 213, "width": 640, "date_captured": "2013-11-22 17:17:53", "flickr_url": "http://farm4.staticflickr.com/3390/3497285084_cbbe964b1f_z.jpg", "id": 143068}, {"license": 3, "file_name": "000000367228.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000367228.jpg", "height": 500, "width": 333, "date_captured": "2013-11-22 18:04:28", "flickr_url": "http://farm4.staticflickr.com/3069/2898441123_d8b112bec5_z.jpg", "id": 367228}, {"license": 1, "file_name": "000000140929.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000140929.jpg", "height": 401, "width": 640, "date_captured": "2013-11-22 21:09:30", "flickr_url": "http://farm5.staticflickr.com/4067/4646908565_11d64633c2_z.jpg", "id": 140929}, {"license": 1, "file_name": "000000476787.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000476787.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 04:08:25", "flickr_url": "http://farm3.staticflickr.com/2579/3855484970_35751b7bde_z.jpg", "id": 476787}, {"license": 1, "file_name": "000000182923.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000182923.jpg", "height": 500, "width": 375, "date_captured": "2013-11-23 05:36:42", "flickr_url": "http://farm1.staticflickr.com/64/180556106_eaa7b854bc_z.jpg", "id": 182923}, {"license": 1, "file_name": "000000430048.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000430048.jpg", "height": 375, "width": 500, "date_captured": "2013-11-23 17:59:16", "flickr_url": "http://farm1.staticflickr.com/61/170648360_bf7c23c9aa_z.jpg", "id": 430048}, {"license": 3, "file_name": "000000426241.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000426241.jpg", "height": 375, "width": 500, "date_captured": "2013-11-23 20:18:23", "flickr_url": "http://farm4.staticflickr.com/3452/3274946583_7aaa9cc8e0_z.jpg", "id": 426241}, {"license": 2, "file_name": "000000226058.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000226058.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 02:39:11", "flickr_url": "http://farm1.staticflickr.com/33/101307902_659e17b9c6_z.jpg", "id": 226058}, {"license": 3, "file_name": "000000321118.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000321118.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 05:10:26", "flickr_url": "http://farm4.staticflickr.com/3016/2978327282_95da828526_z.jpg", "id": 321118}, {"license": 4, "file_name": "000000078170.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000078170.jpg", "height": 640, "width": 640, "date_captured": "2013-11-24 05:18:52", "flickr_url": "http://farm9.staticflickr.com/8466/8108218074_bacf160a3c_z.jpg", "id": 78170}, {"license": 2, "file_name": "000000112997.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000112997.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 07:13:29", "flickr_url": "http://farm3.staticflickr.com/2206/2404948146_018483e49a_z.jpg", "id": 112997}, {"license": 4, "file_name": "000000345356.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000345356.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 09:31:53", "flickr_url": "http://farm1.staticflickr.com/58/195983274_6fb2676229_z.jpg", "id": 345356}, {"license": 3, "file_name": "000000334977.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000334977.jpg", "height": 320, "width": 640, "date_captured": "2013-11-24 09:48:31", "flickr_url": "http://farm9.staticflickr.com/8351/8278462714_5362c79a88_z.jpg", "id": 334977}, {"license": 1, "file_name": "000000459954.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000459954.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 12:17:57", "flickr_url": "http://farm1.staticflickr.com/150/395866656_48ca92baa3_z.jpg", "id": 459954}, {"license": 3, "file_name": "000000404191.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000404191.jpg", "height": 500, "width": 375, "date_captured": "2013-11-24 12:24:57", "flickr_url": "http://farm1.staticflickr.com/37/81419951_29cf941bea_z.jpg", "id": 404191}, {"license": 3, "file_name": "000000501368.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000501368.jpg", "height": 500, "width": 375, "date_captured": "2013-11-24 13:29:44", "flickr_url": "http://farm1.staticflickr.com/41/76172159_a3be5e114a_z.jpg", "id": 501368}, {"license": 4, "file_name": "000000067896.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000067896.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 15:24:40", "flickr_url": "http://farm9.staticflickr.com/8442/7997145503_9c5e040b00_z.jpg", "id": 67896}, {"license": 1, "file_name": "000000007888.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000007888.jpg", "height": 640, "width": 638, "date_captured": "2013-11-24 15:25:32", "flickr_url": "http://farm9.staticflickr.com/8177/8011171833_87909e07b4_z.jpg", "id": 7888}, {"license": 2, "file_name": "000000183965.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000183965.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 23:22:41", "flickr_url": "http://farm6.staticflickr.com/5449/8929618982_543407d7b3_z.jpg", "id": 183965}, {"license": 3, "file_name": "000000578871.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000578871.jpg", "height": 640, "width": 480, "date_captured": "2013-11-25 14:47:42", "flickr_url": "http://farm8.staticflickr.com/7320/9278497816_1562a3e32c_z.jpg", "id": 578871}, {"license": 2, "file_name": "000000442161.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000442161.jpg", "height": 375, "width": 500, "date_captured": "2013-11-25 20:17:29", "flickr_url": "http://farm3.staticflickr.com/2698/4108632336_fcba616984_z.jpg", "id": 442161}, {"license": 1, "file_name": "000000074209.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000074209.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 16:29:03", "flickr_url": "http://farm8.staticflickr.com/7147/6583432999_3ec6f513bd_z.jpg", "id": 74209}, {"license": 2, "file_name": "000000176857.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000176857.jpg", "height": 375, "width": 500, "date_captured": "2013-11-14 16:29:34", "flickr_url": "http://farm4.staticflickr.com/3313/3539283081_f003095dfc_z.jpg", "id": 176857}, {"license": 1, "file_name": "000000361586.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000361586.jpg", "height": 360, "width": 640, "date_captured": "2013-11-14 17:02:18", "flickr_url": "http://farm5.staticflickr.com/4014/4590440049_5de9e905a2_z.jpg", "id": 361586}, {"license": 5, "file_name": "000000002592.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000002592.jpg", "height": 366, "width": 640, "date_captured": "2013-11-14 19:28:27", "flickr_url": "http://farm4.staticflickr.com/3271/2864950455_3f5b5086da_z.jpg", "id": 2592}, {"license": 1, "file_name": "000000382696.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000382696.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 19:56:26", "flickr_url": "http://farm9.staticflickr.com/8334/8361957107_57b4380da8_z.jpg", "id": 382696}, {"license": 3, "file_name": "000000412531.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000412531.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 06:23:06", "flickr_url": "http://farm3.staticflickr.com/2259/1847091205_98810682ef_z.jpg", "id": 412531}, {"license": 3, "file_name": "000000579902.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000579902.jpg", "height": 640, "width": 556, "date_captured": "2013-11-15 13:33:16", "flickr_url": "http://farm6.staticflickr.com/5250/5239597183_aa65553aef_z.jpg", "id": 579902}, {"license": 3, "file_name": "000000125850.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000125850.jpg", "height": 489, "width": 640, "date_captured": "2013-11-15 14:49:01", "flickr_url": "http://farm4.staticflickr.com/3267/2515169000_468ccd0f81_z.jpg", "id": 125850}, {"license": 4, "file_name": "000000338219.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000338219.jpg", "height": 566, "width": 640, "date_captured": "2013-11-15 15:39:51", "flickr_url": "http://farm8.staticflickr.com/7283/8999990657_da131bf6a9_z.jpg", "id": 338219}, {"license": 1, "file_name": "000000226171.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000226171.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 16:42:58", "flickr_url": "http://farm3.staticflickr.com/2023/2326077489_1bd4702f8b_z.jpg", "id": 226171}, {"license": 3, "file_name": "000000360951.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000360951.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 17:08:23", "flickr_url": "http://farm5.staticflickr.com/4103/5074895283_71a73d77e5_z.jpg", "id": 360951}, {"license": 3, "file_name": "000000446117.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000446117.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 16:51:11", "flickr_url": "http://farm9.staticflickr.com/8366/8404783997_2f3eb28a7b_z.jpg", "id": 446117}, {"license": 5, "file_name": "000000437514.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000437514.jpg", "height": 556, "width": 640, "date_captured": "2013-11-16 17:05:54", "flickr_url": "http://farm6.staticflickr.com/5139/5457433637_32e60c0a0c_z.jpg", "id": 437514}, {"license": 5, "file_name": "000000022589.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000022589.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 17:56:57", "flickr_url": "http://farm5.staticflickr.com/4072/4569416948_52d65ff8f6_z.jpg", "id": 22589}, {"license": 1, "file_name": "000000575372.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000575372.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 19:01:22", "flickr_url": "http://farm4.staticflickr.com/3169/2949567857_24f1073da9_z.jpg", "id": 575372}, {"license": 4, "file_name": "000000280710.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000280710.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 20:09:15", "flickr_url": "http://farm8.staticflickr.com/7320/9655397508_cf2472680c_z.jpg", "id": 280710}, {"license": 1, "file_name": "000000195045.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000195045.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 20:33:20", "flickr_url": "http://farm1.staticflickr.com/42/111501747_216e86eb06_z.jpg", "id": 195045}, {"license": 5, "file_name": "000000152465.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000152465.jpg", "height": 516, "width": 640, "date_captured": "2013-11-16 21:09:04", "flickr_url": "http://farm8.staticflickr.com/7302/8985286701_c0a5fa6bd6_z.jpg", "id": 152465}, {"license": 5, "file_name": "000000327890.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000327890.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 21:20:23", "flickr_url": "http://farm4.staticflickr.com/3753/9577665459_f56dac03f1_z.jpg", "id": 327890}, {"license": 3, "file_name": "000000230166.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000230166.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 21:25:02", "flickr_url": "http://farm8.staticflickr.com/7271/7534507590_7aa14e6069_z.jpg", "id": 230166}, {"license": 3, "file_name": "000000351589.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000351589.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 21:27:03", "flickr_url": "http://farm4.staticflickr.com/3672/9015695817_9de2e6659f_z.jpg", "id": 351589}, {"license": 1, "file_name": "000000017031.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000017031.jpg", "height": 334, "width": 500, "date_captured": "2013-11-16 22:09:32", "flickr_url": "http://farm4.staticflickr.com/3431/3811840964_b913f6f140_z.jpg", "id": 17031}, {"license": 4, "file_name": "000000534673.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000534673.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 22:27:21", "flickr_url": "http://farm8.staticflickr.com/7054/8689267710_94db8887b8_z.jpg", "id": 534673}, {"license": 3, "file_name": "000000239843.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000239843.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 02:04:11", "flickr_url": "http://farm1.staticflickr.com/75/161456406_0d185b803f_z.jpg", "id": 239843}, {"license": 3, "file_name": "000000049091.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000049091.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 02:20:06", "flickr_url": "http://farm4.staticflickr.com/3103/2467311600_13e181c0d1_z.jpg", "id": 49091}, {"license": 2, "file_name": "000000176701.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000176701.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 04:21:39", "flickr_url": "http://farm6.staticflickr.com/5270/5665259106_719982a9bf_z.jpg", "id": 176701}, {"license": 1, "file_name": "000000358923.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000358923.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 04:39:40", "flickr_url": "http://farm4.staticflickr.com/3103/2473623595_02cb4a457c_z.jpg", "id": 358923}, {"license": 3, "file_name": "000000475904.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000475904.jpg", "height": 426, "width": 640, "date_captured": "2013-11-17 05:55:26", "flickr_url": "http://farm8.staticflickr.com/7438/9419064019_b78997cb46_z.jpg", "id": 475904}, {"license": 1, "file_name": "000000539445.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000539445.jpg", "height": 612, "width": 612, "date_captured": "2013-11-17 07:31:48", "flickr_url": "http://farm4.staticflickr.com/3731/9537462540_b8e4cf2e05_z.jpg", "id": 539445}, {"license": 5, "file_name": "000000100274.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000100274.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 08:29:54", "flickr_url": "http://farm8.staticflickr.com/7460/9267226612_d9df1e1d14_z.jpg", "id": 100274}, {"license": 1, "file_name": "000000082812.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000082812.jpg", "height": 360, "width": 640, "date_captured": "2013-11-17 09:12:40", "flickr_url": "http://farm3.staticflickr.com/2831/9065416444_3d868c60f2_z.jpg", "id": 82812}, {"license": 1, "file_name": "000000104198.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000104198.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 09:25:13", "flickr_url": "http://farm4.staticflickr.com/3348/3196028603_9c3dce2341_z.jpg", "id": 104198}, {"license": 4, "file_name": "000000076547.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000076547.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 09:53:38", "flickr_url": "http://farm9.staticflickr.com/8557/8771723390_13dc9d18fa_z.jpg", "id": 76547}, {"license": 4, "file_name": "000000479030.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000479030.jpg", "height": 424, "width": 640, "date_captured": "2013-11-17 10:43:01", "flickr_url": "http://farm9.staticflickr.com/8400/8645262251_a715881431_z.jpg", "id": 479030}, {"license": 5, "file_name": "000000573943.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000573943.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 15:11:35", "flickr_url": "http://farm9.staticflickr.com/8050/8089769426_0ae26e7732_z.jpg", "id": 573943}, {"license": 2, "file_name": "000000347664.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000347664.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 17:41:08", "flickr_url": "http://farm6.staticflickr.com/5162/5235379608_0f3500c9f5_z.jpg", "id": 347664}, {"license": 3, "file_name": "000000524280.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000524280.jpg", "height": 640, "width": 640, "date_captured": "2013-11-17 18:37:32", "flickr_url": "http://farm4.staticflickr.com/3308/3496817102_dcd4dae73a_z.jpg", "id": 524280}, {"license": 5, "file_name": "000000018837.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000018837.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 18:58:56", "flickr_url": "http://farm9.staticflickr.com/8219/8372455764_124e052754_z.jpg", "id": 18837}, {"license": 1, "file_name": "000000153011.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000153011.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 20:47:39", "flickr_url": "http://farm8.staticflickr.com/7256/7132663181_1f1c9c9288_z.jpg", "id": 153011}, {"license": 3, "file_name": "000000533536.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000533536.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 21:31:23", "flickr_url": "http://farm5.staticflickr.com/4004/4217630540_bbf35aa7ca_z.jpg", "id": 533536}, {"license": 3, "file_name": "000000051008.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000051008.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 21:59:34", "flickr_url": "http://farm4.staticflickr.com/3553/3457510870_8791f8bf2b_z.jpg", "id": 51008}, {"license": 1, "file_name": "000000155145.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000155145.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 22:38:47", "flickr_url": "http://farm4.staticflickr.com/3363/3176409075_7e30ce9dcc_z.jpg", "id": 155145}, {"license": 3, "file_name": "000000245576.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000245576.jpg", "height": 472, "width": 640, "date_captured": "2013-11-18 00:32:51", "flickr_url": "http://farm2.staticflickr.com/1029/537440819_40da8b20b0_z.jpg", "id": 245576}, {"license": 4, "file_name": "000000491725.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000491725.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 00:43:38", "flickr_url": "http://farm1.staticflickr.com/40/91528610_414d61320b_z.jpg", "id": 491725}, {"license": 5, "file_name": "000000050811.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000050811.jpg", "height": 605, "width": 640, "date_captured": "2013-11-18 02:32:18", "flickr_url": "http://farm9.staticflickr.com/8328/8133371246_ae679ac932_z.jpg", "id": 50811}, {"license": 5, "file_name": "000000543300.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000543300.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 03:30:59", "flickr_url": "http://farm6.staticflickr.com/5331/10115212384_e0d2794b2a_z.jpg", "id": 543300}, {"license": 5, "file_name": "000000207844.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000207844.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 04:02:59", "flickr_url": "http://farm6.staticflickr.com/5081/5329457343_c63f869e7b_z.jpg", "id": 207844}, {"license": 3, "file_name": "000000092416.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000092416.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 05:00:29", "flickr_url": "http://farm4.staticflickr.com/3451/3738220748_4849d37886_z.jpg", "id": 92416}, {"license": 4, "file_name": "000000526103.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000526103.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 05:14:53", "flickr_url": "http://farm9.staticflickr.com/8466/8075672344_8785868023_z.jpg", "id": 526103}, {"license": 3, "file_name": "000000133343.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000133343.jpg", "height": 480, "width": 295, "date_captured": "2013-11-18 06:14:46", "flickr_url": "http://farm4.staticflickr.com/3207/2994977373_be126aff2c_z.jpg", "id": 133343}, {"license": 5, "file_name": "000000081061.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000081061.jpg", "height": 442, "width": 640, "date_captured": "2013-11-18 07:19:16", "flickr_url": "http://farm7.staticflickr.com/6114/6343957302_e2b3590013_z.jpg", "id": 81061}, {"license": 5, "file_name": "000000540414.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000540414.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 07:20:58", "flickr_url": "http://farm9.staticflickr.com/8327/8395092894_bc8081f393_z.jpg", "id": 540414}, {"license": 1, "file_name": "000000023023.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000023023.jpg", "height": 612, "width": 612, "date_captured": "2013-11-18 07:47:10", "flickr_url": "http://farm6.staticflickr.com/5340/9123612706_412c973d6c_z.jpg", "id": 23023}, {"license": 5, "file_name": "000000359855.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000359855.jpg", "height": 510, "width": 640, "date_captured": "2013-11-18 08:29:18", "flickr_url": "http://farm8.staticflickr.com/7167/6568702131_7d39d27d7a_z.jpg", "id": 359855}, {"license": 5, "file_name": "000000402774.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000402774.jpg", "height": 640, "width": 425, "date_captured": "2013-11-18 09:08:06", "flickr_url": "http://farm9.staticflickr.com/8201/8158349940_3eb8a41660_z.jpg", "id": 402774}, {"license": 3, "file_name": "000000412240.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000412240.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 09:28:48", "flickr_url": "http://farm1.staticflickr.com/132/387947574_9b6f5194ed_z.jpg", "id": 412240}, {"license": 3, "file_name": "000000350019.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000350019.jpg", "height": 640, "width": 426, "date_captured": "2013-11-18 09:54:52", "flickr_url": "http://farm4.staticflickr.com/3024/2704440300_2a0fc536b1_z.jpg", "id": 350019}, {"license": 5, "file_name": "000000500211.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000500211.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 10:02:55", "flickr_url": "http://farm8.staticflickr.com/7015/6802660793_bcf18d1244_z.jpg", "id": 500211}, {"license": 5, "file_name": "000000496854.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000496854.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 11:08:04", "flickr_url": "http://farm3.staticflickr.com/2795/5715794037_73f069675d_z.jpg", "id": 496854}, {"license": 4, "file_name": "000000328238.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000328238.jpg", "height": 426, "width": 640, "date_captured": "2013-11-18 13:15:04", "flickr_url": "http://farm1.staticflickr.com/72/195124056_e466628448_z.jpg", "id": 328238}, {"license": 1, "file_name": "000000052891.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000052891.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 15:10:01", "flickr_url": "http://farm6.staticflickr.com/5144/5615897624_7d79b89801_z.jpg", "id": 52891}, {"license": 3, "file_name": "000000140286.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000140286.jpg", "height": 521, "width": 640, "date_captured": "2013-11-18 23:50:09", "flickr_url": "http://farm3.staticflickr.com/2700/4062490884_20b9d0de26_z.jpg", "id": 140286}, {"license": 3, "file_name": "000000481480.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000481480.jpg", "height": 444, "width": 640, "date_captured": "2013-11-19 03:02:51", "flickr_url": "http://farm9.staticflickr.com/8088/8586897621_f85f1381f0_z.jpg", "id": 481480}, {"license": 5, "file_name": "000000508639.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000508639.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 03:37:12", "flickr_url": "http://farm9.staticflickr.com/8083/8400829951_bfc5926814_z.jpg", "id": 508639}, {"license": 2, "file_name": "000000045472.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000045472.jpg", "height": 428, "width": 640, "date_captured": "2013-11-19 18:07:17", "flickr_url": "http://farm7.staticflickr.com/6036/6339867399_4c1d25ecaf_z.jpg", "id": 45472}, {"license": 1, "file_name": "000000006471.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000006471.jpg", "height": 333, "width": 500, "date_captured": "2013-11-19 18:09:09", "flickr_url": "http://farm4.staticflickr.com/3228/2755941377_ea852330ca_z.jpg", "id": 6471}, {"license": 5, "file_name": "000000548506.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000548506.jpg", "height": 425, "width": 640, "date_captured": "2013-11-19 18:17:07", "flickr_url": "http://farm8.staticflickr.com/7215/7172313601_80f97928a8_z.jpg", "id": 548506}, {"license": 3, "file_name": "000000197388.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000197388.jpg", "height": 392, "width": 640, "date_captured": "2013-11-19 20:10:37", "flickr_url": "http://farm9.staticflickr.com/8375/8507321836_5b8b13188f_z.jpg", "id": 197388}, {"license": 3, "file_name": "000000139260.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000139260.jpg", "height": 388, "width": 640, "date_captured": "2013-11-19 20:42:27", "flickr_url": "http://farm7.staticflickr.com/6207/6103352201_fceaa1fe8f_z.jpg", "id": 139260}, {"license": 1, "file_name": "000000312406.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000312406.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 21:12:38", "flickr_url": "http://farm5.staticflickr.com/4062/4480444082_378e811458_z.jpg", "id": 312406}, {"license": 1, "file_name": "000000356428.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000356428.jpg", "height": 281, "width": 500, "date_captured": "2013-11-19 21:55:43", "flickr_url": "http://farm4.staticflickr.com/3299/3566761430_4074fcaee7_z.jpg", "id": 356428}, {"license": 3, "file_name": "000000110999.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000110999.jpg", "height": 640, "width": 359, "date_captured": "2013-11-19 22:06:32", "flickr_url": "http://farm4.staticflickr.com/3009/2997950080_40c6694506_z.jpg", "id": 110999}, {"license": 3, "file_name": "000000562818.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000562818.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 05:51:20", "flickr_url": "http://farm3.staticflickr.com/2506/4190878336_381fd47db1_z.jpg", "id": 562818}, {"license": 1, "file_name": "000000529122.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000529122.jpg", "height": 281, "width": 500, "date_captured": "2013-11-20 15:31:13", "flickr_url": "http://farm4.staticflickr.com/3490/3815422309_447ae7e558_z.jpg", "id": 529122}, {"license": 3, "file_name": "000000349594.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000349594.jpg", "height": 500, "width": 424, "date_captured": "2013-11-20 15:33:12", "flickr_url": "http://farm4.staticflickr.com/3153/2992163337_c9447b588f_z.jpg", "id": 349594}, {"license": 3, "file_name": "000000066926.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000066926.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 17:07:29", "flickr_url": "http://farm3.staticflickr.com/2198/2288725436_606751cc25_z.jpg", "id": 66926}, {"license": 3, "file_name": "000000521601.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000521601.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 17:07:34", "flickr_url": "http://farm3.staticflickr.com/2027/2178480768_a128ef2d4e_z.jpg", "id": 521601}, {"license": 5, "file_name": "000000355677.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000355677.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 17:24:01", "flickr_url": "http://farm9.staticflickr.com/8405/8709332006_108a44369c_z.jpg", "id": 355677}, {"license": 1, "file_name": "000000255824.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000255824.jpg", "height": 478, "width": 640, "date_captured": "2013-11-20 17:26:17", "flickr_url": "http://farm9.staticflickr.com/8442/7790991342_22771b4ff8_z.jpg", "id": 255824}, {"license": 1, "file_name": "000000447917.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000447917.jpg", "height": 362, "width": 640, "date_captured": "2013-11-20 18:47:38", "flickr_url": "http://farm6.staticflickr.com/5548/9448296519_50caff6b5e_z.jpg", "id": 447917}, {"license": 3, "file_name": "000000006460.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000006460.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 19:08:11", "flickr_url": "http://farm3.staticflickr.com/2573/4149298100_3dd1902a69_z.jpg", "id": 6460}, {"license": 3, "file_name": "000000245026.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000245026.jpg", "height": 424, "width": 640, "date_captured": "2013-11-20 19:49:11", "flickr_url": "http://farm8.staticflickr.com/7445/9497561633_22f589637a_z.jpg", "id": 245026}, {"license": 1, "file_name": "000000272148.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000272148.jpg", "height": 378, "width": 640, "date_captured": "2013-11-20 20:56:46", "flickr_url": "http://farm9.staticflickr.com/8195/8113335655_d93250dc7b_z.jpg", "id": 272148}, {"license": 5, "file_name": "000000231549.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000231549.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 23:00:38", "flickr_url": "http://farm9.staticflickr.com/8220/8256493366_f50131fb10_z.jpg", "id": 231549}, {"license": 3, "file_name": "000000191672.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000191672.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 23:36:06", "flickr_url": "http://farm6.staticflickr.com/5184/5590823914_93265ebbdb_z.jpg", "id": 191672}, {"license": 3, "file_name": "000000437331.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000437331.jpg", "height": 428, "width": 640, "date_captured": "2013-11-21 00:07:06", "flickr_url": "http://farm6.staticflickr.com/5082/5223240716_ed4186b046_z.jpg", "id": 437331}, {"license": 1, "file_name": "000000177213.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000177213.jpg", "height": 359, "width": 640, "date_captured": "2013-11-21 00:53:02", "flickr_url": "http://farm6.staticflickr.com/5043/5359270253_832caea653_z.jpg", "id": 177213}, {"license": 1, "file_name": "000000397279.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000397279.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 01:20:01", "flickr_url": "http://farm7.staticflickr.com/6186/6082883824_b45d26db2f_z.jpg", "id": 397279}, {"license": 3, "file_name": "000000179285.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000179285.jpg", "height": 640, "width": 428, "date_captured": "2013-11-21 01:46:50", "flickr_url": "http://farm4.staticflickr.com/3222/2910845269_1b71003988_z.jpg", "id": 179285}, {"license": 2, "file_name": "000000511453.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000511453.jpg", "height": 612, "width": 612, "date_captured": "2013-11-21 01:50:11", "flickr_url": "http://farm9.staticflickr.com/8189/8435041778_2195d6d719_z.jpg", "id": 511453}, {"license": 1, "file_name": "000000009400.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000009400.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 19:31:25", "flickr_url": "http://farm1.staticflickr.com/110/286317893_b6bce1c310_z.jpg", "id": 9400}, {"license": 1, "file_name": "000000171757.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000171757.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 20:08:07", "flickr_url": "http://farm4.staticflickr.com/3049/2291251387_7ed538667b_z.jpg", "id": 171757}, {"license": 1, "file_name": "000000565853.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000565853.jpg", "height": 375, "width": 500, "date_captured": "2013-11-21 23:56:34", "flickr_url": "http://farm1.staticflickr.com/199/441462223_fc7dbe1791_z.jpg", "id": 565853}, {"license": 1, "file_name": "000000089045.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000089045.jpg", "height": 425, "width": 640, "date_captured": "2013-11-22 02:00:24", "flickr_url": "http://farm3.staticflickr.com/2461/3804694245_4ee8f06931_z.jpg", "id": 89045}, {"license": 4, "file_name": "000000343149.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000343149.jpg", "height": 640, "width": 480, "date_captured": "2013-11-22 17:03:46", "flickr_url": "http://farm9.staticflickr.com/8528/8451405956_8c88c54606_z.jpg", "id": 343149}, {"license": 3, "file_name": "000000218997.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000218997.jpg", "height": 622, "width": 640, "date_captured": "2013-11-22 21:42:10", "flickr_url": "http://farm2.staticflickr.com/1212/1470921244_69e2835da7_z.jpg", "id": 218997}, {"license": 2, "file_name": "000000377393.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000377393.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 22:08:56", "flickr_url": "http://farm8.staticflickr.com/7205/6842706932_0ed49356c9_z.jpg", "id": 377393}, {"license": 3, "file_name": "000000060507.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000060507.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 23:20:40", "flickr_url": "http://farm4.staticflickr.com/3290/2705876114_885d9a7abe_z.jpg", "id": 60507}, {"license": 6, "file_name": "000000548339.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000548339.jpg", "height": 576, "width": 640, "date_captured": "2013-11-23 01:18:21", "flickr_url": "http://farm3.staticflickr.com/2657/5853872667_43858a5a72_z.jpg", "id": 548339}, {"license": 5, "file_name": "000000473869.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000473869.jpg", "height": 427, "width": 640, "date_captured": "2013-11-23 04:20:57", "flickr_url": "http://farm4.staticflickr.com/3500/3725168577_4b8a7d72b9_z.jpg", "id": 473869}, {"license": 3, "file_name": "000000074092.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000074092.jpg", "height": 500, "width": 332, "date_captured": "2013-11-23 05:20:33", "flickr_url": "http://farm1.staticflickr.com/158/370824877_ea2b7b2138_z.jpg", "id": 74092}, {"license": 3, "file_name": "000000390902.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000390902.jpg", "height": 500, "width": 333, "date_captured": "2013-11-23 05:25:33", "flickr_url": "http://farm1.staticflickr.com/82/242688429_19ec870de2_z.jpg", "id": 390902}, {"license": 5, "file_name": "000000513688.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000513688.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 20:18:29", "flickr_url": "http://farm8.staticflickr.com/7144/6810570399_3007351596_z.jpg", "id": 513688}, {"license": 1, "file_name": "000000414340.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000414340.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 01:04:02", "flickr_url": "http://farm3.staticflickr.com/2531/3967267999_8b780390fe_z.jpg", "id": 414340}, {"license": 4, "file_name": "000000020553.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000020553.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 02:42:53", "flickr_url": "http://farm4.staticflickr.com/3288/2926009969_406b0b7654_z.jpg", "id": 20553}, {"license": 1, "file_name": "000000465822.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000465822.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 03:53:57", "flickr_url": "http://farm3.staticflickr.com/2670/3818240342_7c323bfc4f_z.jpg", "id": 465822}, {"license": 5, "file_name": "000000530061.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000530061.jpg", "height": 455, "width": 640, "date_captured": "2013-11-24 05:39:51", "flickr_url": "http://farm8.staticflickr.com/7299/9479155110_5995092489_z.jpg", "id": 530061}, {"license": 3, "file_name": "000000036660.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000036660.jpg", "height": 323, "width": 500, "date_captured": "2013-11-24 06:40:30", "flickr_url": "http://farm3.staticflickr.com/2624/3763383271_3476bb8221_z.jpg", "id": 36660}, {"license": 1, "file_name": "000000285047.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000285047.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 07:37:02", "flickr_url": "http://farm1.staticflickr.com/127/342217607_cfce4ceac7_z.jpg", "id": 285047}, {"license": 1, "file_name": "000000215644.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000215644.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 10:10:52", "flickr_url": "http://farm4.staticflickr.com/3484/3458241398_f463e70acd_z.jpg", "id": 215644}, {"license": 3, "file_name": "000000014007.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000014007.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 11:03:51", "flickr_url": "http://farm8.staticflickr.com/7161/6701691801_dc2cee1aa9_z.jpg", "id": 14007}, {"license": 1, "file_name": "000000537672.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000537672.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 11:32:37", "flickr_url": "http://farm3.staticflickr.com/2655/4165026532_5b4fcafe59_z.jpg", "id": 537672}, {"license": 4, "file_name": "000000076211.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000076211.jpg", "height": 500, "width": 640, "date_captured": "2013-11-24 15:08:23", "flickr_url": "http://farm9.staticflickr.com/8194/8098016882_dd56fd0393_z.jpg", "id": 76211}, {"license": 1, "file_name": "000000242411.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000242411.jpg", "height": 640, "width": 424, "date_captured": "2013-11-24 15:43:15", "flickr_url": "http://farm8.staticflickr.com/7131/7673156942_ba0b13c31a_z.jpg", "id": 242411}, {"license": 3, "file_name": "000000376478.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000376478.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 19:45:08", "flickr_url": "http://farm3.staticflickr.com/2341/2510110081_c5eee6c269_z.jpg", "id": 376478}, {"license": 1, "file_name": "000000080413.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000080413.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 21:31:44", "flickr_url": "http://farm3.staticflickr.com/2375/2339858505_431be9bd8f_z.jpg", "id": 80413}, {"license": 6, "file_name": "000000218249.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000218249.jpg", "height": 427, "width": 640, "date_captured": "2013-11-25 14:42:20", "flickr_url": "http://farm3.staticflickr.com/2860/9329804748_266649e382_z.jpg", "id": 218249}, {"license": 1, "file_name": "000000122166.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000122166.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 11:22:58", "flickr_url": "http://farm4.staticflickr.com/3021/2581636027_11c600d5d0_z.jpg", "id": 122166}, {"license": 3, "file_name": "000000543047.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000543047.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 17:25:33", "flickr_url": "http://farm2.staticflickr.com/1095/1261234994_168135c622_z.jpg", "id": 543047}, {"license": 4, "file_name": "000000066231.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000066231.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 19:34:16", "flickr_url": "http://farm9.staticflickr.com/8352/8375313873_80051bc3e2_z.jpg", "id": 66231}, {"license": 4, "file_name": "000000122217.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000122217.jpg", "height": 640, "width": 425, "date_captured": "2013-11-14 20:24:45", "flickr_url": "http://farm7.staticflickr.com/6102/6327281848_f04dcba2c3_z.jpg", "id": 122217}, {"license": 1, "file_name": "000000447169.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000447169.jpg", "height": 480, "width": 640, "date_captured": "2013-11-14 22:27:20", "flickr_url": "http://farm8.staticflickr.com/7195/6828650052_244d1e25b0_z.jpg", "id": 447169}, {"license": 5, "file_name": "000000129322.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000129322.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 01:06:18", "flickr_url": "http://farm4.staticflickr.com/3375/3424650283_e0fb70044b_z.jpg", "id": 129322}, {"license": 3, "file_name": "000000507473.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000507473.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 03:04:30", "flickr_url": "http://farm4.staticflickr.com/3117/2764199263_08af9e70bc_z.jpg", "id": 507473}, {"license": 3, "file_name": "000000565391.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000565391.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 07:17:39", "flickr_url": "http://farm2.staticflickr.com/1080/978659759_706f5cdfdf_z.jpg", "id": 565391}, {"license": 6, "file_name": "000000229659.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000229659.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 17:25:54", "flickr_url": "http://farm8.staticflickr.com/7172/6798118671_76c05939e2_z.jpg", "id": 229659}, {"license": 3, "file_name": "000000545958.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000545958.jpg", "height": 428, "width": 640, "date_captured": "2013-11-15 20:57:43", "flickr_url": "http://farm3.staticflickr.com/2034/2285865878_52f0a136c8_z.jpg", "id": 545958}, {"license": 3, "file_name": "000000524850.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000524850.jpg", "height": 319, "width": 500, "date_captured": "2013-11-15 21:15:18", "flickr_url": "http://farm3.staticflickr.com/2141/1961517430_cc0fb5f799_z.jpg", "id": 524850}, {"license": 4, "file_name": "000000116479.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000116479.jpg", "height": 640, "width": 411, "date_captured": "2013-11-15 22:38:23", "flickr_url": "http://farm9.staticflickr.com/8463/8142492504_fc66c0ba1f_z.jpg", "id": 116479}, {"license": 1, "file_name": "000000457078.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000457078.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 23:53:22", "flickr_url": "http://farm9.staticflickr.com/8033/7967347560_c74c6bc261_z.jpg", "id": 457078}, {"license": 5, "file_name": "000000131386.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000131386.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 03:15:19", "flickr_url": "http://farm6.staticflickr.com/5074/5860045248_f99b35c5c8_z.jpg", "id": 131386}, {"license": 3, "file_name": "000000469174.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000469174.jpg", "height": 460, "width": 640, "date_captured": "2013-11-16 05:53:40", "flickr_url": "http://farm6.staticflickr.com/5477/9378486337_47c51b3f3b_z.jpg", "id": 469174}, {"license": 4, "file_name": "000000288882.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000288882.jpg", "height": 359, "width": 640, "date_captured": "2013-11-16 16:57:07", "flickr_url": "http://farm9.staticflickr.com/8197/8246389680_c6d7ef3356_z.jpg", "id": 288882}, {"license": 1, "file_name": "000000115946.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000115946.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 18:08:04", "flickr_url": "http://farm1.staticflickr.com/11/12517280_65a1991227_z.jpg", "id": 115946}, {"license": 3, "file_name": "000000436738.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000436738.jpg", "height": 486, "width": 500, "date_captured": "2013-11-16 18:16:02", "flickr_url": "http://farm3.staticflickr.com/2307/2329698703_d3ac0f3200_z.jpg", "id": 436738}, {"license": 1, "file_name": "000000226802.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000226802.jpg", "height": 360, "width": 640, "date_captured": "2013-11-16 19:21:28", "flickr_url": "http://farm9.staticflickr.com/8204/8217265056_8a21671a5c_z.jpg", "id": 226802}, {"license": 3, "file_name": "000000291664.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000291664.jpg", "height": 640, "width": 588, "date_captured": "2013-11-16 20:11:10", "flickr_url": "http://farm5.staticflickr.com/4039/4482092753_bbaa19ee38_z.jpg", "id": 291664}, {"license": 4, "file_name": "000000340272.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000340272.jpg", "height": 360, "width": 640, "date_captured": "2013-11-16 21:42:44", "flickr_url": "http://farm8.staticflickr.com/7272/7104098187_3f5a8bccc5_z.jpg", "id": 340272}, {"license": 5, "file_name": "000000397639.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000397639.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 23:17:15", "flickr_url": "http://farm6.staticflickr.com/5102/5743641461_08040c4012_z.jpg", "id": 397639}, {"license": 4, "file_name": "000000566923.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000566923.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 23:38:56", "flickr_url": "http://farm1.staticflickr.com/205/515499299_0450056310_z.jpg", "id": 566923}, {"license": 3, "file_name": "000000148508.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000148508.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 23:42:16", "flickr_url": "http://farm9.staticflickr.com/8235/8396603028_7fe10572fa_z.jpg", "id": 148508}, {"license": 3, "file_name": "000000404601.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000404601.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 01:51:27", "flickr_url": "http://farm3.staticflickr.com/2071/2526998364_f58d4fe353_z.jpg", "id": 404601}, {"license": 4, "file_name": "000000326627.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000326627.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 02:42:24", "flickr_url": "http://farm2.staticflickr.com/1083/953175515_58292b60db_z.jpg", "id": 326627}, {"license": 1, "file_name": "000000440508.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000440508.jpg", "height": 424, "width": 640, "date_captured": "2013-11-17 06:44:38", "flickr_url": "http://farm4.staticflickr.com/3806/9779255862_a4c3e98f41_z.jpg", "id": 440508}, {"license": 1, "file_name": "000000396568.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000396568.jpg", "height": 424, "width": 640, "date_captured": "2013-11-17 06:44:43", "flickr_url": "http://farm3.staticflickr.com/2841/9779340294_5a1a38438c_z.jpg", "id": 396568}, {"license": 4, "file_name": "000000079408.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000079408.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 08:54:44", "flickr_url": "http://farm6.staticflickr.com/5324/9734800916_1a66b88f77_z.jpg", "id": 79408}, {"license": 1, "file_name": "000000286507.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000286507.jpg", "height": 434, "width": 640, "date_captured": "2013-11-17 10:14:29", "flickr_url": "http://farm9.staticflickr.com/8115/8711742982_4f1be566da_z.jpg", "id": 286507}, {"license": 2, "file_name": "000000023937.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000023937.jpg", "height": 428, "width": 640, "date_captured": "2013-11-17 20:37:16", "flickr_url": "http://farm8.staticflickr.com/7320/9163713485_4d47dbc0b9_z.jpg", "id": 23937}, {"license": 1, "file_name": "000000261706.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000261706.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 21:46:44", "flickr_url": "http://farm9.staticflickr.com/8238/8521513249_f9cc58e431_z.jpg", "id": 261706}, {"license": 3, "file_name": "000000350054.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000350054.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 21:47:28", "flickr_url": "http://farm4.staticflickr.com/3263/3136513587_80eb249595_z.jpg", "id": 350054}, {"license": 3, "file_name": "000000297085.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000297085.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 21:47:31", "flickr_url": "http://farm4.staticflickr.com/3239/3136536543_548915a117_z.jpg", "id": 297085}, {"license": 3, "file_name": "000000570448.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000570448.jpg", "height": 484, "width": 640, "date_captured": "2013-11-18 00:37:25", "flickr_url": "http://farm9.staticflickr.com/8092/8563774605_aec5b7052b_z.jpg", "id": 570448}, {"license": 3, "file_name": "000000416104.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000416104.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 02:51:08", "flickr_url": "http://farm2.staticflickr.com/1271/758310279_7186356c8e_z.jpg", "id": 416104}, {"license": 3, "file_name": "000000287649.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000287649.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 04:05:39", "flickr_url": "http://farm6.staticflickr.com/5255/5390407464_f7db1fda4b_z.jpg", "id": 287649}, {"license": 4, "file_name": "000000347254.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000347254.jpg", "height": 500, "width": 375, "date_captured": "2013-11-18 04:54:35", "flickr_url": "http://farm3.staticflickr.com/2470/3824110491_02d9bf794a_z.jpg", "id": 347254}, {"license": 1, "file_name": "000000458255.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000458255.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 05:38:46", "flickr_url": "http://farm5.staticflickr.com/4047/4532143755_023427b4e1_z.jpg", "id": 458255}, {"license": 3, "file_name": "000000029984.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000029984.jpg", "height": 492, "width": 640, "date_captured": "2013-11-18 06:15:02", "flickr_url": "http://farm6.staticflickr.com/5474/9336208247_9c263d5394_z.jpg", "id": 29984}, {"license": 3, "file_name": "000000535608.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000535608.jpg", "height": 376, "width": 500, "date_captured": "2013-11-18 06:16:51", "flickr_url": "http://farm3.staticflickr.com/2493/3756482544_5ae5bf0395_z.jpg", "id": 535608}, {"license": 2, "file_name": "000000389315.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000389315.jpg", "height": 640, "width": 640, "date_captured": "2013-11-18 07:30:22", "flickr_url": "http://farm4.staticflickr.com/3444/5803230115_2b538ac900_z.jpg", "id": 389315}, {"license": 4, "file_name": "000000440507.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000440507.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 08:12:47", "flickr_url": "http://farm1.staticflickr.com/38/81948760_02d1403c1f_z.jpg", "id": 440507}, {"license": 1, "file_name": "000000178618.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000178618.jpg", "height": 640, "width": 446, "date_captured": "2013-11-18 08:27:06", "flickr_url": "http://farm6.staticflickr.com/5046/5229035180_6a5a6af3ca_z.jpg", "id": 178618}, {"license": 3, "file_name": "000000471450.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000471450.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 12:07:24", "flickr_url": "http://farm5.staticflickr.com/4096/4766378364_2be3fcff39_z.jpg", "id": 471450}, {"license": 1, "file_name": "000000555005.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000555005.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 13:38:07", "flickr_url": "http://farm7.staticflickr.com/6132/6007666198_8d2d37ee1e_z.jpg", "id": 555005}, {"license": 1, "file_name": "000000289702.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000289702.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 14:20:47", "flickr_url": "http://farm6.staticflickr.com/5053/5585869212_4c417fe7f1_z.jpg", "id": 289702}, {"license": 3, "file_name": "000000501243.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000501243.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 17:41:54", "flickr_url": "http://farm9.staticflickr.com/8009/7510413514_aaa445ba12_z.jpg", "id": 501243}, {"license": 3, "file_name": "000000424642.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000424642.jpg", "height": 375, "width": 500, "date_captured": "2013-11-18 18:40:31", "flickr_url": "http://farm4.staticflickr.com/3211/2357264344_1cc328b091_z.jpg", "id": 424642}, {"license": 3, "file_name": "000000331280.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000331280.jpg", "height": 366, "width": 500, "date_captured": "2013-11-18 20:14:39", "flickr_url": "http://farm3.staticflickr.com/2335/2441639118_e2e980b723_z.jpg", "id": 331280}, {"license": 1, "file_name": "000000193181.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000193181.jpg", "height": 640, "width": 426, "date_captured": "2013-11-19 18:20:21", "flickr_url": "http://farm5.staticflickr.com/4128/5041839091_d1a9315e29_z.jpg", "id": 193181}, {"license": 1, "file_name": "000000398028.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000398028.jpg", "height": 640, "width": 428, "date_captured": "2013-11-19 18:30:34", "flickr_url": "http://farm5.staticflickr.com/4144/5041838915_15d4b89041_z.jpg", "id": 398028}, {"license": 3, "file_name": "000000236721.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000236721.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 18:33:31", "flickr_url": "http://farm1.staticflickr.com/54/4549399281_bd0cf26e8d_z.jpg", "id": 236721}, {"license": 3, "file_name": "000000303566.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000303566.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 18:36:40", "flickr_url": "http://farm3.staticflickr.com/2350/1558626104_1fbb3f9f10_z.jpg", "id": 303566}, {"license": 3, "file_name": "000000253695.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000253695.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 19:09:50", "flickr_url": "http://farm7.staticflickr.com/6167/6157722860_2f6886d552_z.jpg", "id": 253695}, {"license": 2, "file_name": "000000377588.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000377588.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 19:10:05", "flickr_url": "http://farm7.staticflickr.com/6078/6122240550_385de97621_z.jpg", "id": 377588}, {"license": 4, "file_name": "000000346707.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000346707.jpg", "height": 500, "width": 333, "date_captured": "2013-11-19 19:42:19", "flickr_url": "http://farm2.staticflickr.com/1253/968473927_155f555988_z.jpg", "id": 346707}, {"license": 1, "file_name": "000000342397.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000342397.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 20:28:19", "flickr_url": "http://farm9.staticflickr.com/8329/8375153324_eb47fa10d9_z.jpg", "id": 342397}, {"license": 1, "file_name": "000000164885.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000164885.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 20:28:23", "flickr_url": "http://farm9.staticflickr.com/8470/8375152754_5d52841f37_z.jpg", "id": 164885}, {"license": 1, "file_name": "000000431545.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000431545.jpg", "height": 334, "width": 500, "date_captured": "2013-11-19 21:42:57", "flickr_url": "http://farm1.staticflickr.com/87/224866804_f2b272e82e_z.jpg", "id": 431545}, {"license": 4, "file_name": "000000516677.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000516677.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 21:56:02", "flickr_url": "http://farm6.staticflickr.com/5186/5789961160_d750638deb_z.jpg", "id": 516677}, {"license": 1, "file_name": "000000387916.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000387916.jpg", "height": 423, "width": 640, "date_captured": "2013-11-19 23:03:14", "flickr_url": "http://farm6.staticflickr.com/5127/5347001941_bd0f0b8219_z.jpg", "id": 387916}, {"license": 6, "file_name": "000000251537.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000251537.jpg", "height": 640, "width": 640, "date_captured": "2013-11-20 03:21:58", "flickr_url": "http://farm9.staticflickr.com/8477/8229949842_b1e720d17f_z.jpg", "id": 251537}, {"license": 1, "file_name": "000000146831.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000146831.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 05:49:29", "flickr_url": "http://farm5.staticflickr.com/4035/4532718778_9473861eb7_z.jpg", "id": 146831}, {"license": 3, "file_name": "000000020992.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000020992.jpg", "height": 333, "width": 500, "date_captured": "2013-11-20 13:17:20", "flickr_url": "http://farm3.staticflickr.com/2131/1680764916_05f5e183ca_z.jpg", "id": 20992}, {"license": 2, "file_name": "000000439426.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000439426.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 13:42:39", "flickr_url": "http://farm9.staticflickr.com/8088/8427626912_0a9fe669e8_z.jpg", "id": 439426}, {"license": 1, "file_name": "000000414638.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000414638.jpg", "height": 612, "width": 612, "date_captured": "2013-11-20 14:52:24", "flickr_url": "http://farm8.staticflickr.com/7073/7406112038_e6e54b50eb_z.jpg", "id": 414638}, {"license": 4, "file_name": "000000459662.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000459662.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 16:04:20", "flickr_url": "http://farm3.staticflickr.com/2001/2372745068_5aceabba59_z.jpg", "id": 459662}, {"license": 3, "file_name": "000000523033.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000523033.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 19:15:24", "flickr_url": "http://farm4.staticflickr.com/3363/3411890644_4dfb0dcb59_z.jpg", "id": 523033}, {"license": 1, "file_name": "000000214703.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000214703.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 22:12:28", "flickr_url": "http://farm8.staticflickr.com/7021/6676482589_9ff28546d3_z.jpg", "id": 214703}, {"license": 1, "file_name": "000000482735.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000482735.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 22:12:31", "flickr_url": "http://farm8.staticflickr.com/7148/6676482811_b24ecf9bbc_z.jpg", "id": 482735}, {"license": 3, "file_name": "000000140987.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000140987.jpg", "height": 640, "width": 425, "date_captured": "2013-11-21 00:03:27", "flickr_url": "http://farm9.staticflickr.com/8070/8156597598_0325115b0c_z.jpg", "id": 140987}, {"license": 4, "file_name": "000000042528.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000042528.jpg", "height": 495, "width": 640, "date_captured": "2013-11-21 00:11:13", "flickr_url": "http://farm4.staticflickr.com/3205/2849230650_402d291378_z.jpg", "id": 42528}, {"license": 4, "file_name": "000000353027.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000353027.jpg", "height": 424, "width": 640, "date_captured": "2013-11-21 00:19:01", "flickr_url": "http://farm3.staticflickr.com/2019/4510783064_db7ebd7bc4_z.jpg", "id": 353027}, {"license": 4, "file_name": "000000137106.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000137106.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 01:07:25", "flickr_url": "http://farm8.staticflickr.com/7249/7766100538_3b55765abc_z.jpg", "id": 137106}, {"license": 6, "file_name": "000000047112.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000047112.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 01:47:51", "flickr_url": "http://farm9.staticflickr.com/8089/8463760032_37d63a2803_z.jpg", "id": 47112}, {"license": 2, "file_name": "000000032081.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000032081.jpg", "height": 500, "width": 375, "date_captured": "2013-11-21 01:48:21", "flickr_url": "http://farm4.staticflickr.com/3038/2649959457_0376fe3fa3_z.jpg", "id": 32081}, {"license": 4, "file_name": "000000177065.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000177065.jpg", "height": 564, "width": 640, "date_captured": "2013-11-21 01:52:22", "flickr_url": "http://farm8.staticflickr.com/7325/9899385706_ba38416932_z.jpg", "id": 177065}, {"license": 3, "file_name": "000000516916.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000516916.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 02:32:18", "flickr_url": "http://farm2.staticflickr.com/1242/1335331416_3313afb670_z.jpg", "id": 516916}, {"license": 2, "file_name": "000000151629.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000151629.jpg", "height": 640, "width": 427, "date_captured": "2013-11-21 02:37:35", "flickr_url": "http://farm9.staticflickr.com/8116/8654744155_fe5fbbbedf_z.jpg", "id": 151629}, {"license": 1, "file_name": "000000453341.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000453341.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 07:38:25", "flickr_url": "http://farm7.staticflickr.com/6138/6020349692_744a1e57cc_z.jpg", "id": 453341}, {"license": 1, "file_name": "000000171740.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000171740.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 21:22:23", "flickr_url": "http://farm8.staticflickr.com/7391/9206380276_a5d5c041ed_z.jpg", "id": 171740}, {"license": 1, "file_name": "000000296231.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000296231.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 01:24:07", "flickr_url": "http://farm3.staticflickr.com/2758/4131870361_d155daf5b8_z.jpg", "id": 296231}, {"license": 4, "file_name": "000000374545.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000374545.jpg", "height": 640, "width": 549, "date_captured": "2013-11-22 09:03:11", "flickr_url": "http://farm1.staticflickr.com/184/451764136_e652115475_z.jpg", "id": 374545}, {"license": 3, "file_name": "000000511647.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000511647.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 15:17:15", "flickr_url": "http://farm8.staticflickr.com/7149/6516204713_654b977986_z.jpg", "id": 511647}, {"license": 3, "file_name": "000000263679.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000263679.jpg", "height": 428, "width": 640, "date_captured": "2013-11-22 17:34:17", "flickr_url": "http://farm4.staticflickr.com/3645/3416790601_6b90bd5928_z.jpg", "id": 263679}, {"license": 2, "file_name": "000000224664.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000224664.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 19:06:57", "flickr_url": "http://farm2.staticflickr.com/1126/1458756555_85c4728afc_z.jpg", "id": 224664}, {"license": 3, "file_name": "000000414673.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000414673.jpg", "height": 332, "width": 500, "date_captured": "2013-11-22 23:01:58", "flickr_url": "http://farm2.staticflickr.com/1193/752005506_8484246622_z.jpg", "id": 414673}, {"license": 2, "file_name": "000000039405.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000039405.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 05:43:08", "flickr_url": "http://farm1.staticflickr.com/55/114131548_fe7ec125d4_z.jpg", "id": 39405}, {"license": 5, "file_name": "000000032610.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000032610.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 01:31:02", "flickr_url": "http://farm3.staticflickr.com/2493/3841088943_16b4a4eb76_z.jpg", "id": 32610}, {"license": 5, "file_name": "000000433103.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000433103.jpg", "height": 425, "width": 640, "date_captured": "2013-11-24 02:06:04", "flickr_url": "http://farm8.staticflickr.com/7169/6771617469_cb52603210_z.jpg", "id": 433103}, {"license": 3, "file_name": "000000529528.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000529528.jpg", "height": 333, "width": 500, "date_captured": "2013-11-24 03:59:57", "flickr_url": "http://farm5.staticflickr.com/4041/4291027887_d986ee8cda_z.jpg", "id": 529528}, {"license": 3, "file_name": "000000376264.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000376264.jpg", "height": 481, "width": 640, "date_captured": "2013-11-24 04:57:54", "flickr_url": "http://farm4.staticflickr.com/3013/3024690776_d91357d6b4_z.jpg", "id": 376264}, {"license": 3, "file_name": "000000101884.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000101884.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 15:00:06", "flickr_url": "http://farm9.staticflickr.com/8224/8305267382_776cf5ca26_z.jpg", "id": 101884}, {"license": 1, "file_name": "000000370900.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000370900.jpg", "height": 478, "width": 640, "date_captured": "2013-11-24 15:06:06", "flickr_url": "http://farm6.staticflickr.com/5220/5496406382_42218a2b3e_z.jpg", "id": 370900}, {"license": 2, "file_name": "000000528705.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000528705.jpg", "height": 640, "width": 426, "date_captured": "2013-11-24 21:06:09", "flickr_url": "http://farm4.staticflickr.com/3605/3326599698_2af5c71e12_z.jpg", "id": 528705}, {"license": 4, "file_name": "000000050844.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000050844.jpg", "height": 500, "width": 334, "date_captured": "2013-11-24 21:22:08", "flickr_url": "http://farm3.staticflickr.com/2674/3904379072_e7e9125836_z.jpg", "id": 50844}, {"license": 3, "file_name": "000000174018.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000174018.jpg", "height": 351, "width": 500, "date_captured": "2013-11-24 21:24:30", "flickr_url": "http://farm3.staticflickr.com/2095/2303846140_54b1d64c36_z.jpg", "id": 174018}, {"license": 3, "file_name": "000000009590.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000009590.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 23:10:55", "flickr_url": "http://farm4.staticflickr.com/3812/9124483633_8ed59dfc3a_z.jpg", "id": 9590}, {"license": 1, "file_name": "000000018380.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000018380.jpg", "height": 426, "width": 640, "date_captured": "2013-11-25 14:13:45", "flickr_url": "http://farm6.staticflickr.com/5474/9701242334_0797348359_z.jpg", "id": 18380}, {"license": 3, "file_name": "000000016249.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000016249.jpg", "height": 365, "width": 500, "date_captured": "2013-11-14 12:26:50", "flickr_url": "http://farm4.staticflickr.com/3168/2931904036_1c5828e037_z.jpg", "id": 16249}, {"license": 4, "file_name": "000000281032.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000281032.jpg", "height": 427, "width": 640, "date_captured": "2013-11-14 18:45:52", "flickr_url": "http://farm9.staticflickr.com/8239/8660821941_f1e58c220c_z.jpg", "id": 281032}, {"license": 4, "file_name": "000000199771.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000199771.jpg", "height": 425, "width": 640, "date_captured": "2013-11-14 22:04:01", "flickr_url": "http://farm6.staticflickr.com/5035/7115744429_7d4deeb996_z.jpg", "id": 199771}, {"license": 4, "file_name": "000000294350.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000294350.jpg", "height": 425, "width": 640, "date_captured": "2013-11-14 22:54:58", "flickr_url": "http://farm8.staticflickr.com/7147/6762303723_50e8ef095c_z.jpg", "id": 294350}, {"license": 4, "file_name": "000000293390.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000293390.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 01:55:33", "flickr_url": "http://farm9.staticflickr.com/8517/8498607902_95fa4dbf2d_z.jpg", "id": 293390}, {"license": 4, "file_name": "000000414510.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000414510.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 03:55:44", "flickr_url": "http://farm7.staticflickr.com/6011/5883783041_745340195b_z.jpg", "id": 414510}, {"license": 3, "file_name": "000000416745.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000416745.jpg", "height": 612, "width": 612, "date_captured": "2013-11-15 04:06:38", "flickr_url": "http://farm7.staticflickr.com/6011/6010017037_8dd2371130_z.jpg", "id": 416745}, {"license": 1, "file_name": "000000197796.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000197796.jpg", "height": 478, "width": 640, "date_captured": "2013-11-15 05:02:29", "flickr_url": "http://farm6.staticflickr.com/5288/5326269245_7d4fd945d8_z.jpg", "id": 197796}, {"license": 3, "file_name": "000000136033.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000136033.jpg", "height": 428, "width": 640, "date_captured": "2013-11-15 06:42:56", "flickr_url": "http://farm3.staticflickr.com/2594/4195889031_7602176da2_z.jpg", "id": 136033}, {"license": 5, "file_name": "000000055002.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000055002.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 11:45:33", "flickr_url": "http://farm1.staticflickr.com/151/353730535_f6509da5b0_z.jpg", "id": 55002}, {"license": 3, "file_name": "000000454978.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000454978.jpg", "height": 400, "width": 640, "date_captured": "2013-11-15 12:23:03", "flickr_url": "http://farm7.staticflickr.com/6163/6239106204_5a57bf8f21_z.jpg", "id": 454978}, {"license": 2, "file_name": "000000389804.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000389804.jpg", "height": 425, "width": 640, "date_captured": "2013-11-15 12:25:15", "flickr_url": "http://farm4.staticflickr.com/3789/9949582573_f8708b7d98_z.jpg", "id": 389804}, {"license": 4, "file_name": "000000371529.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000371529.jpg", "height": 640, "width": 512, "date_captured": "2013-11-15 12:59:44", "flickr_url": "http://farm3.staticflickr.com/2689/4352374320_c024d09e1a_z.jpg", "id": 371529}, {"license": 3, "file_name": "000000555012.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000555012.jpg", "height": 426, "width": 640, "date_captured": "2013-11-15 13:32:28", "flickr_url": "http://farm1.staticflickr.com/112/296652617_eae32f6641_z.jpg", "id": 555012}, {"license": 2, "file_name": "000000423971.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000423971.jpg", "height": 425, "width": 640, "date_captured": "2013-11-15 13:54:13", "flickr_url": "http://farm4.staticflickr.com/3671/9949576433_c0710ce7c3_z.jpg", "id": 423971}, {"license": 2, "file_name": "000000035770.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000035770.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 13:56:41", "flickr_url": "http://farm3.staticflickr.com/2619/3969461516_2107d00668_z.jpg", "id": 35770}, {"license": 1, "file_name": "000000266400.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000266400.jpg", "height": 396, "width": 640, "date_captured": "2013-11-15 14:19:37", "flickr_url": "http://farm5.staticflickr.com/4135/4918549277_6125afd300_z.jpg", "id": 266400}, {"license": 5, "file_name": "000000038070.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000038070.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 15:48:55", "flickr_url": "http://farm3.staticflickr.com/2068/2431080078_5c0ff7d4e8_z.jpg", "id": 38070}, {"license": 1, "file_name": "000000427338.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000427338.jpg", "height": 396, "width": 640, "date_captured": "2013-11-15 16:56:19", "flickr_url": "http://farm4.staticflickr.com/3616/3298146760_360285d9f9_z.jpg", "id": 427338}, {"license": 6, "file_name": "000000102411.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000102411.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 18:08:07", "flickr_url": "http://farm1.staticflickr.com/41/107836023_97c018a794_z.jpg", "id": 102411}, {"license": 3, "file_name": "000000321557.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000321557.jpg", "height": 640, "width": 547, "date_captured": "2013-11-15 18:12:50", "flickr_url": "http://farm9.staticflickr.com/8043/8113787467_31a6ee0ecf_z.jpg", "id": 321557}, {"license": 3, "file_name": "000000270066.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000270066.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 18:30:27", "flickr_url": "http://farm9.staticflickr.com/8055/8087414374_07d86ec540_z.jpg", "id": 270066}, {"license": 4, "file_name": "000000524108.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000524108.jpg", "height": 400, "width": 640, "date_captured": "2013-11-15 19:39:05", "flickr_url": "http://farm8.staticflickr.com/7272/7574728256_1eaaf7ba1e_z.jpg", "id": 524108}, {"license": 5, "file_name": "000000499622.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000499622.jpg", "height": 456, "width": 412, "date_captured": "2013-11-15 21:54:37", "flickr_url": "http://farm7.staticflickr.com/6158/6183504440_29f4164214_z.jpg", "id": 499622}, {"license": 4, "file_name": "000000342367.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000342367.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 23:42:59", "flickr_url": "http://farm8.staticflickr.com/7029/6602321969_c79b3d4ac9_z.jpg", "id": 342367}, {"license": 3, "file_name": "000000338325.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000338325.jpg", "height": 428, "width": 640, "date_captured": "2013-11-16 02:02:09", "flickr_url": "http://farm8.staticflickr.com/7203/6865790942_a3b9ccfa01_z.jpg", "id": 338325}, {"license": 6, "file_name": "000000456865.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000456865.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 02:21:58", "flickr_url": "http://farm8.staticflickr.com/7031/6491062339_10d642456e_z.jpg", "id": 456865}, {"license": 3, "file_name": "000000254814.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000254814.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 11:56:41", "flickr_url": "http://farm1.staticflickr.com/127/373360820_3fc68d5446_z.jpg", "id": 254814}, {"license": 4, "file_name": "000000306893.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000306893.jpg", "height": 368, "width": 500, "date_captured": "2013-11-16 14:07:53", "flickr_url": "http://farm3.staticflickr.com/2320/1716567943_1543348c2e_z.jpg", "id": 306893}, {"license": 1, "file_name": "000000359781.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000359781.jpg", "height": 494, "width": 640, "date_captured": "2013-11-16 16:52:09", "flickr_url": "http://farm9.staticflickr.com/8090/8569863046_9a1ddc6534_z.jpg", "id": 359781}, {"license": 3, "file_name": "000000152870.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000152870.jpg", "height": 640, "width": 512, "date_captured": "2013-11-16 18:13:46", "flickr_url": "http://farm7.staticflickr.com/6143/5939938952_bab8b39c77_z.jpg", "id": 152870}, {"license": 3, "file_name": "000000055167.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000055167.jpg", "height": 360, "width": 640, "date_captured": "2013-11-16 18:45:21", "flickr_url": "http://farm3.staticflickr.com/2893/9513704274_f4cd1a772f_z.jpg", "id": 55167}, {"license": 1, "file_name": "000000284762.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000284762.jpg", "height": 426, "width": 640, "date_captured": "2013-11-16 19:11:42", "flickr_url": "http://farm5.staticflickr.com/4078/4793497892_175d8250fd_z.jpg", "id": 284762}, {"license": 2, "file_name": "000000162130.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000162130.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 19:45:40", "flickr_url": "http://farm8.staticflickr.com/7098/7145405115_ed03b7c916_z.jpg", "id": 162130}, {"license": 4, "file_name": "000000377575.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000377575.jpg", "height": 640, "width": 426, "date_captured": "2013-11-16 20:12:15", "flickr_url": "http://farm3.staticflickr.com/2598/3937557668_c8b472124b_z.jpg", "id": 377575}, {"license": 6, "file_name": "000000005037.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000005037.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 20:17:28", "flickr_url": "http://farm8.staticflickr.com/7379/9599671465_8a2f486da1_z.jpg", "id": 5037}, {"license": 3, "file_name": "000000147223.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000147223.jpg", "height": 360, "width": 640, "date_captured": "2013-11-16 21:07:27", "flickr_url": "http://farm3.staticflickr.com/2894/9346430641_6c0e82c88d_z.jpg", "id": 147223}, {"license": 5, "file_name": "000000269632.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000269632.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 21:32:43", "flickr_url": "http://farm8.staticflickr.com/7287/9106564326_f1af288935_z.jpg", "id": 269632}, {"license": 6, "file_name": "000000333402.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000333402.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 21:44:45", "flickr_url": "http://farm4.staticflickr.com/3698/8932303431_ac2d1c2f40_z.jpg", "id": 333402}, {"license": 6, "file_name": "000000497867.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000497867.jpg", "height": 408, "width": 640, "date_captured": "2013-11-16 22:18:34", "flickr_url": "http://farm9.staticflickr.com/8269/8701618370_819e93d033_z.jpg", "id": 497867}, {"license": 6, "file_name": "000000133819.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000133819.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 22:28:07", "flickr_url": "http://farm9.staticflickr.com/8529/8670829990_2ce16c7cdf_z.jpg", "id": 133819}, {"license": 6, "file_name": "000000395388.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000395388.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 22:35:41", "flickr_url": "http://farm7.staticflickr.com/6167/6202224433_933916ece7_z.jpg", "id": 395388}, {"license": 1, "file_name": "000000002006.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000002006.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 22:41:06", "flickr_url": "http://farm9.staticflickr.com/8257/8654672225_f697267374_z.jpg", "id": 2006}, {"license": 5, "file_name": "000000055299.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000055299.jpg", "height": 429, "width": 640, "date_captured": "2013-11-17 01:27:08", "flickr_url": "http://farm4.staticflickr.com/3409/3283552917_85b71021ba_z.jpg", "id": 55299}, {"license": 2, "file_name": "000000118405.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000118405.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 04:15:57", "flickr_url": "http://farm7.staticflickr.com/6070/6092596567_23cabf8a62_z.jpg", "id": 118405}, {"license": 3, "file_name": "000000482978.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000482978.jpg", "height": 360, "width": 640, "date_captured": "2013-11-17 06:49:12", "flickr_url": "http://farm6.staticflickr.com/5498/9733077679_c6471c1a75_z.jpg", "id": 482978}, {"license": 6, "file_name": "000000200162.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000200162.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 07:03:20", "flickr_url": "http://farm8.staticflickr.com/7293/9671747151_a5015b8f8f_z.jpg", "id": 200162}, {"license": 6, "file_name": "000000135902.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000135902.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 07:07:20", "flickr_url": "http://farm4.staticflickr.com/3816/9633747725_f29478b70a_z.jpg", "id": 135902}, {"license": 6, "file_name": "000000155443.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000155443.jpg", "height": 423, "width": 640, "date_captured": "2013-11-17 08:01:57", "flickr_url": "http://farm6.staticflickr.com/5480/9408017011_934042979f_z.jpg", "id": 155443}, {"license": 6, "file_name": "000000572555.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000572555.jpg", "height": 425, "width": 640, "date_captured": "2013-11-17 08:33:30", "flickr_url": "http://farm8.staticflickr.com/7458/9247846644_95ed751297_z.jpg", "id": 572555}, {"license": 6, "file_name": "000000060090.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000060090.jpg", "height": 423, "width": 640, "date_captured": "2013-11-17 08:33:41", "flickr_url": "http://farm3.staticflickr.com/2812/9247539064_f7064c4b7c_z.jpg", "id": 60090}, {"license": 4, "file_name": "000000095899.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000095899.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 09:06:16", "flickr_url": "http://farm6.staticflickr.com/5215/5530636215_4fd0c715ba_z.jpg", "id": 95899}, {"license": 6, "file_name": "000000177383.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000177383.jpg", "height": 640, "width": 425, "date_captured": "2013-11-17 10:17:01", "flickr_url": "http://farm9.staticflickr.com/8536/8701612564_f5b3b72af0_z.jpg", "id": 177383}, {"license": 2, "file_name": "000000220732.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000220732.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 19:20:15", "flickr_url": "http://farm8.staticflickr.com/7278/8150890633_42a81c8e17_z.jpg", "id": 220732}, {"license": 1, "file_name": "000000574810.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000574810.jpg", "height": 500, "width": 377, "date_captured": "2013-11-17 20:39:15", "flickr_url": "http://farm1.staticflickr.com/17/92223094_7b060efe3c_z.jpg", "id": 574810}, {"license": 3, "file_name": "000000178744.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000178744.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 01:15:39", "flickr_url": "http://farm5.staticflickr.com/4140/4924588404_ebe3586183_z.jpg", "id": 178744}, {"license": 4, "file_name": "000000206025.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000206025.jpg", "height": 640, "width": 424, "date_captured": "2013-11-18 03:12:59", "flickr_url": "http://farm7.staticflickr.com/6089/6104379787_9fb4bd4210_z.jpg", "id": 206025}, {"license": 6, "file_name": "000000502168.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000502168.jpg", "height": 458, "width": 640, "date_captured": "2013-11-18 03:48:07", "flickr_url": "http://farm3.staticflickr.com/2854/10040525345_20cd7a1c22_z.jpg", "id": 502168}, {"license": 3, "file_name": "000000060052.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000060052.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 05:34:01", "flickr_url": "http://farm6.staticflickr.com/5539/9358062139_062e8f3ca7_z.jpg", "id": 60052}, {"license": 3, "file_name": "000000094852.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000094852.jpg", "height": 512, "width": 640, "date_captured": "2013-11-18 07:23:36", "flickr_url": "http://farm7.staticflickr.com/6124/5918733618_21767a23de_z.jpg", "id": 94852}, {"license": 3, "file_name": "000000442306.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000442306.jpg", "height": 640, "width": 640, "date_captured": "2013-11-18 07:56:35", "flickr_url": "http://farm4.staticflickr.com/3785/9771725551_51ca96beee_z.jpg", "id": 442306}, {"license": 1, "file_name": "000000145781.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000145781.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 08:13:53", "flickr_url": "http://farm1.staticflickr.com/21/90089649_a1924cf6b4_z.jpg", "id": 145781}, {"license": 2, "file_name": "000000233033.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000233033.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 08:34:25", "flickr_url": "http://farm8.staticflickr.com/7365/9223244847_92cbb3549b_z.jpg", "id": 233033}, {"license": 1, "file_name": "000000295478.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000295478.jpg", "height": 640, "width": 512, "date_captured": "2013-11-18 09:27:28", "flickr_url": "http://farm5.staticflickr.com/4122/4902988431_6724aa330e_z.jpg", "id": 295478}, {"license": 1, "file_name": "000000115245.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000115245.jpg", "height": 612, "width": 612, "date_captured": "2013-11-18 10:23:22", "flickr_url": "http://farm9.staticflickr.com/8199/8203831740_193863840c_z.jpg", "id": 115245}, {"license": 3, "file_name": "000000286458.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000286458.jpg", "height": 310, "width": 455, "date_captured": "2013-11-18 11:57:45", "flickr_url": "http://farm4.staticflickr.com/3245/3134666963_6468a6712e_z.jpg", "id": 286458}, {"license": 1, "file_name": "000000511384.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000511384.jpg", "height": 640, "width": 428, "date_captured": "2013-11-18 13:18:22", "flickr_url": "http://farm4.staticflickr.com/3342/3442896281_7543567238_z.jpg", "id": 511384}, {"license": 1, "file_name": "000000532071.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000532071.jpg", "height": 360, "width": 640, "date_captured": "2013-11-18 14:20:17", "flickr_url": "http://farm8.staticflickr.com/7079/7112922665_3519391ca4_z.jpg", "id": 532071}, {"license": 3, "file_name": "000000054123.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000054123.jpg", "height": 428, "width": 640, "date_captured": "2013-11-18 18:07:23", "flickr_url": "http://farm7.staticflickr.com/6150/5958432526_fb05debe86_z.jpg", "id": 54123}, {"license": 4, "file_name": "000000299609.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000299609.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 23:29:52", "flickr_url": "http://farm4.staticflickr.com/3171/2819451450_f636e1d78f_z.jpg", "id": 299609}, {"license": 1, "file_name": "000000080659.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000080659.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 01:12:48", "flickr_url": "http://farm4.staticflickr.com/3800/9357422576_5c30021a34_z.jpg", "id": 80659}, {"license": 6, "file_name": "000000303653.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000303653.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 03:28:23", "flickr_url": "http://farm9.staticflickr.com/8106/8460438659_f6a4c0a934_z.jpg", "id": 303653}, {"license": 5, "file_name": "000000451144.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000451144.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 18:03:15", "flickr_url": "http://farm7.staticflickr.com/6001/5967535194_c90bfa09fe_z.jpg", "id": 451144}, {"license": 1, "file_name": "000000386210.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000386210.jpg", "height": 640, "width": 478, "date_captured": "2013-11-19 18:43:14", "flickr_url": "http://farm2.staticflickr.com/1027/547192004_c53e5b5a3a_z.jpg", "id": 386210}, {"license": 1, "file_name": "000000085682.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000085682.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 19:52:08", "flickr_url": "http://farm9.staticflickr.com/8233/8592261757_a4058377fd_z.jpg", "id": 85682}, {"license": 1, "file_name": "000000465806.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000465806.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 19:57:17", "flickr_url": "http://farm8.staticflickr.com/7301/8731226977_ef6395b6e4_z.jpg", "id": 465806}, {"license": 1, "file_name": "000000166426.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000166426.jpg", "height": 640, "width": 587, "date_captured": "2013-11-19 21:22:49", "flickr_url": "http://farm2.staticflickr.com/1029/1403819420_6056ad3de6_z.jpg", "id": 166426}, {"license": 4, "file_name": "000000013004.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000013004.jpg", "height": 500, "width": 375, "date_captured": "2013-11-19 21:30:33", "flickr_url": "http://farm5.staticflickr.com/4049/4208826429_3432119060_z.jpg", "id": 13004}, {"license": 3, "file_name": "000000216277.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000216277.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 22:32:15", "flickr_url": "http://farm4.staticflickr.com/3207/2883216399_24ecb51b1b_z.jpg", "id": 216277}, {"license": 1, "file_name": "000000343453.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000343453.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 00:18:22", "flickr_url": "http://farm3.staticflickr.com/2787/4433424641_2097468f68_z.jpg", "id": 343453}, {"license": 3, "file_name": "000000149375.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000149375.jpg", "height": 485, "width": 640, "date_captured": "2013-11-20 00:38:15", "flickr_url": "http://farm9.staticflickr.com/8241/8533592659_4952202aac_z.jpg", "id": 149375}, {"license": 3, "file_name": "000000397681.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000397681.jpg", "height": 640, "width": 640, "date_captured": "2013-11-20 00:55:19", "flickr_url": "http://farm3.staticflickr.com/2404/2103090834_2088ec317d_z.jpg", "id": 397681}, {"license": 5, "file_name": "000000304984.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000304984.jpg", "height": 289, "width": 385, "date_captured": "2013-11-20 01:10:49", "flickr_url": "http://farm3.staticflickr.com/2893/8855498113_c85a20a73e_z.jpg", "id": 304984}, {"license": 4, "file_name": "000000007991.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000007991.jpg", "height": 359, "width": 640, "date_captured": "2013-11-20 02:48:09", "flickr_url": "http://farm6.staticflickr.com/5283/5355551637_6638017f91_z.jpg", "id": 7991}, {"license": 3, "file_name": "000000196009.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000196009.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 02:56:01", "flickr_url": "http://farm3.staticflickr.com/2489/4455322387_e9d9235f79_z.jpg", "id": 196009}, {"license": 1, "file_name": "000000157390.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000157390.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 06:16:23", "flickr_url": "http://farm4.staticflickr.com/3283/3133952076_f93ce671e3_z.jpg", "id": 157390}, {"license": 3, "file_name": "000000165831.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000165831.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 06:17:35", "flickr_url": "http://farm4.staticflickr.com/3053/2864227130_93f157f2fc_z.jpg", "id": 165831}, {"license": 4, "file_name": "000000438226.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000438226.jpg", "height": 291, "width": 640, "date_captured": "2013-11-20 12:27:52", "flickr_url": "http://farm3.staticflickr.com/2344/2437066575_936ba55fd8_z.jpg", "id": 438226}, {"license": 3, "file_name": "000000561465.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000561465.jpg", "height": 612, "width": 612, "date_captured": "2013-11-20 16:29:49", "flickr_url": "http://farm9.staticflickr.com/8360/8307779036_958b949e0d_z.jpg", "id": 561465}, {"license": 4, "file_name": "000000393014.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000393014.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 16:50:29", "flickr_url": "http://farm4.staticflickr.com/3312/4582327984_284ae76c5d_z.jpg", "id": 393014}, {"license": 6, "file_name": "000000046463.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000046463.jpg", "height": 400, "width": 500, "date_captured": "2013-11-20 19:16:44", "flickr_url": "http://farm4.staticflickr.com/3181/2604458141_c7166c8959_z.jpg", "id": 46463}, {"license": 3, "file_name": "000000119677.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000119677.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 19:41:58", "flickr_url": "http://farm4.staticflickr.com/3799/9667702619_8da6fe0e9c_z.jpg", "id": 119677}, {"license": 6, "file_name": "000000313034.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000313034.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 19:46:49", "flickr_url": "http://farm3.staticflickr.com/2864/9498565129_693ccc1684_z.jpg", "id": 313034}, {"license": 2, "file_name": "000000255747.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000255747.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 19:57:16", "flickr_url": "http://farm2.staticflickr.com/1154/1430241737_87f16f43b2_z.jpg", "id": 255747}, {"license": 6, "file_name": "000000561223.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000561223.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 20:23:45", "flickr_url": "http://farm9.staticflickr.com/8126/8603043646_26169ccc79_z.jpg", "id": 561223}, {"license": 4, "file_name": "000000563758.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000563758.jpg", "height": 640, "width": 429, "date_captured": "2013-11-20 20:45:49", "flickr_url": "http://farm4.staticflickr.com/3661/3622627604_41de1289a6_z.jpg", "id": 563758}, {"license": 6, "file_name": "000000206579.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000206579.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 21:32:38", "flickr_url": "http://farm9.staticflickr.com/8358/8312666553_7daca34b85_z.jpg", "id": 206579}, {"license": 4, "file_name": "000000451155.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000451155.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 21:53:59", "flickr_url": "http://farm4.staticflickr.com/3661/3484414533_7f9827c52e_z.jpg", "id": 451155}, {"license": 6, "file_name": "000000150417.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000150417.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 22:35:46", "flickr_url": "http://farm8.staticflickr.com/7106/7770159924_be0909176a_z.jpg", "id": 150417}, {"license": 4, "file_name": "000000263644.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000263644.jpg", "height": 640, "width": 473, "date_captured": "2013-11-20 22:51:50", "flickr_url": "http://farm8.staticflickr.com/7276/7857205982_aecc8b8a38_z.jpg", "id": 263644}, {"license": 3, "file_name": "000000088970.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000088970.jpg", "height": 500, "width": 333, "date_captured": "2013-11-21 01:39:31", "flickr_url": "http://farm3.staticflickr.com/2473/3911103544_01be7ea587_z.jpg", "id": 88970}, {"license": 1, "file_name": "000000098853.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000098853.jpg", "height": 640, "width": 427, "date_captured": "2013-11-21 02:32:30", "flickr_url": "http://farm8.staticflickr.com/7293/8744690406_98a5b152fb_z.jpg", "id": 98853}, {"license": 1, "file_name": "000000031217.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000031217.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 02:35:48", "flickr_url": "http://farm9.staticflickr.com/8123/8655428554_575a1c878c_z.jpg", "id": 31217}, {"license": 4, "file_name": "000000194724.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000194724.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 03:23:48", "flickr_url": "http://farm7.staticflickr.com/6155/6165978029_81ac06fbe3_z.jpg", "id": 194724}, {"license": 4, "file_name": "000000019402.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000019402.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 04:31:37", "flickr_url": "http://farm5.staticflickr.com/4135/5435897535_a9b3e0a053_z.jpg", "id": 19402}, {"license": 3, "file_name": "000000109313.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000109313.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 22:41:47", "flickr_url": "http://farm3.staticflickr.com/2182/2150425642_10c4e2fa81_z.jpg", "id": 109313}, {"license": 5, "file_name": "000000539883.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000539883.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 23:11:13", "flickr_url": "http://farm1.staticflickr.com/185/484993836_8915a65714_z.jpg", "id": 539883}, {"license": 5, "file_name": "000000233825.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000233825.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 00:48:05", "flickr_url": "http://farm5.staticflickr.com/4006/4421796357_62f0208d59_z.jpg", "id": 233825}, {"license": 3, "file_name": "000000031248.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000031248.jpg", "height": 333, "width": 500, "date_captured": "2013-11-22 00:56:23", "flickr_url": "http://farm5.staticflickr.com/4036/4392751085_d62119e8ee_z.jpg", "id": 31248}, {"license": 4, "file_name": "000000236426.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000236426.jpg", "height": 429, "width": 640, "date_captured": "2013-11-22 02:43:24", "flickr_url": "http://farm4.staticflickr.com/3432/3897473363_7f0d22165f_z.jpg", "id": 236426}, {"license": 2, "file_name": "000000577959.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000577959.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 09:25:38", "flickr_url": "http://farm4.staticflickr.com/3006/2417338430_30030c1974_z.jpg", "id": 577959}, {"license": 3, "file_name": "000000140840.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000140840.jpg", "height": 281, "width": 500, "date_captured": "2013-11-22 18:53:54", "flickr_url": "http://farm3.staticflickr.com/2151/2216365425_071bb5b9aa_z.jpg", "id": 140840}, {"license": 5, "file_name": "000000086956.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000086956.jpg", "height": 640, "width": 480, "date_captured": "2013-11-22 21:02:11", "flickr_url": "http://farm4.staticflickr.com/3096/3125314369_32cb27ef9d_z.jpg", "id": 86956}, {"license": 1, "file_name": "000000356094.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000356094.jpg", "height": 389, "width": 640, "date_captured": "2013-11-23 00:06:38", "flickr_url": "http://farm6.staticflickr.com/5541/9300550099_7e9cc87d46_z.jpg", "id": 356094}, {"license": 3, "file_name": "000000374982.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000374982.jpg", "height": 500, "width": 375, "date_captured": "2013-11-23 05:02:12", "flickr_url": "http://farm4.staticflickr.com/3606/3502169097_5b56226d54_z.jpg", "id": 374982}, {"license": 1, "file_name": "000000161861.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000161861.jpg", "height": 375, "width": 500, "date_captured": "2013-11-23 05:03:25", "flickr_url": "http://farm2.staticflickr.com/1012/799573497_a6e6ecdd2e_z.jpg", "id": 161861}, {"license": 1, "file_name": "000000276921.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000276921.jpg", "height": 640, "width": 469, "date_captured": "2013-11-24 01:53:09", "flickr_url": "http://farm4.staticflickr.com/3173/2938754651_fd932a2976_z.jpg", "id": 276921}, {"license": 6, "file_name": "000000121497.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000121497.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 01:55:48", "flickr_url": "http://farm3.staticflickr.com/2450/3764597892_7588bc1dd5_z.jpg", "id": 121497}, {"license": 4, "file_name": "000000355169.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000355169.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 02:10:22", "flickr_url": "http://farm8.staticflickr.com/7160/6602610383_1aac075f98_z.jpg", "id": 355169}, {"license": 4, "file_name": "000000073118.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000073118.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 02:43:41", "flickr_url": "http://farm9.staticflickr.com/8035/8017027419_188c5200dd_z.jpg", "id": 73118}, {"license": 4, "file_name": "000000424349.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000424349.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 04:23:42", "flickr_url": "http://farm4.staticflickr.com/3117/2785570918_d1b9b5a6f6_z.jpg", "id": 424349}, {"license": 3, "file_name": "000000159791.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000159791.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 11:44:26", "flickr_url": "http://farm4.staticflickr.com/3413/3291509811_3d6644d874_z.jpg", "id": 159791}, {"license": 1, "file_name": "000000189213.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000189213.jpg", "height": 375, "width": 500, "date_captured": "2013-11-24 12:25:26", "flickr_url": "http://farm1.staticflickr.com/20/73123384_0b585268a5_z.jpg", "id": 189213}, {"license": 4, "file_name": "000000282298.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000282298.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 12:36:39", "flickr_url": "http://farm6.staticflickr.com/5259/5495196957_335d3637c7_z.jpg", "id": 282298}, {"license": 2, "file_name": "000000031118.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000031118.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 13:33:26", "flickr_url": "http://farm8.staticflickr.com/7450/10115881873_0a36bd0e10_z.jpg", "id": 31118}, {"license": 5, "file_name": "000000318114.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000318114.jpg", "height": 308, "width": 385, "date_captured": "2013-11-24 14:26:52", "flickr_url": "http://farm9.staticflickr.com/8231/8594007784_8ce364d236_z.jpg", "id": 318114}, {"license": 2, "file_name": "000000157756.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000157756.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 15:15:39", "flickr_url": "http://farm9.staticflickr.com/8193/8148291355_4acc3dc84e_z.jpg", "id": 157756}, {"license": 1, "file_name": "000000557884.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000557884.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 18:55:34", "flickr_url": "http://farm7.staticflickr.com/6073/6033136773_b227802326_z.jpg", "id": 557884}, {"license": 2, "file_name": "000000314264.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000314264.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 19:17:38", "flickr_url": "http://farm4.staticflickr.com/3223/4565494785_75f127bf61_z.jpg", "id": 314264}, {"license": 3, "file_name": "000000161008.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000161008.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 20:51:30", "flickr_url": "http://farm4.staticflickr.com/3463/3258760025_be62a85dc5_z.jpg", "id": 161008}, {"license": 3, "file_name": "000000569976.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000569976.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 22:08:49", "flickr_url": "http://farm5.staticflickr.com/4093/4737241362_7b60073cae_z.jpg", "id": 569976}, {"license": 1, "file_name": "000000331569.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000331569.jpg", "height": 612, "width": 612, "date_captured": "2013-11-24 22:57:32", "flickr_url": "http://farm8.staticflickr.com/7289/9244400919_c2d6e85418_z.jpg", "id": 331569}, {"license": 5, "file_name": "000000243626.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000243626.jpg", "height": 289, "width": 385, "date_captured": "2013-11-24 23:16:00", "flickr_url": "http://farm3.staticflickr.com/2846/8855437781_e591f018f3_z.jpg", "id": 243626}, {"license": 3, "file_name": "000000368752.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000368752.jpg", "height": 640, "width": 480, "date_captured": "2013-11-25 14:39:45", "flickr_url": "http://farm8.staticflickr.com/7356/9400438822_1b996c85a3_z.jpg", "id": 368752}, {"license": 2, "file_name": "000000333745.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000333745.jpg", "height": 640, "width": 427, "date_captured": "2013-11-14 12:52:37", "flickr_url": "http://farm3.staticflickr.com/2327/2047944787_da096c6284_z.jpg", "id": 333745}, {"license": 1, "file_name": "000000370208.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000370208.jpg", "height": 375, "width": 500, "date_captured": "2013-11-14 23:16:53", "flickr_url": "http://farm4.staticflickr.com/3114/2576404641_15ee5d5d25_z.jpg", "id": 370208}, {"license": 1, "file_name": "000000055022.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000055022.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 00:17:05", "flickr_url": "http://farm8.staticflickr.com/7151/6645582823_0056e535a9_z.jpg", "id": 55022}, {"license": 5, "file_name": "000000557172.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000557172.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 00:31:07", "flickr_url": "http://farm6.staticflickr.com/5030/5875095353_80df6e61c4_z.jpg", "id": 557172}, {"license": 5, "file_name": "000000085576.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000085576.jpg", "height": 400, "width": 500, "date_captured": "2013-11-15 02:08:14", "flickr_url": "http://farm3.staticflickr.com/2621/4013924753_651ccae5a5_z.jpg", "id": 85576}, {"license": 3, "file_name": "000000192047.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000192047.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 04:43:25", "flickr_url": "http://farm4.staticflickr.com/3270/3672273160_86cc8f405b_z.jpg", "id": 192047}, {"license": 1, "file_name": "000000466156.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000466156.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 07:11:59", "flickr_url": "http://farm4.staticflickr.com/3477/3177868532_908224bc68_z.jpg", "id": 466156}, {"license": 3, "file_name": "000000111086.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000111086.jpg", "height": 336, "width": 500, "date_captured": "2013-11-15 12:05:41", "flickr_url": "http://farm1.staticflickr.com/201/484870418_af35e139cd_z.jpg", "id": 111086}, {"license": 2, "file_name": "000000564023.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000564023.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 12:48:35", "flickr_url": "http://farm4.staticflickr.com/3111/2509773467_f481d019cc_z.jpg", "id": 564023}, {"license": 3, "file_name": "000000069213.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000069213.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 13:11:57", "flickr_url": "http://farm3.staticflickr.com/2521/4217307645_edddb58325_z.jpg", "id": 69213}, {"license": 3, "file_name": "000000292456.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000292456.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 13:30:32", "flickr_url": "http://farm2.staticflickr.com/1284/846533447_96678f6640_z.jpg", "id": 292456}, {"license": 3, "file_name": "000000453634.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000453634.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 13:59:59", "flickr_url": "http://farm4.staticflickr.com/3046/3054553880_39dda47739_z.jpg", "id": 453634}, {"license": 3, "file_name": "000000155154.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000155154.jpg", "height": 500, "width": 375, "date_captured": "2013-11-15 15:30:29", "flickr_url": "http://farm3.staticflickr.com/2692/4282942156_5fc47df06b_z.jpg", "id": 155154}, {"license": 3, "file_name": "000000013177.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000013177.jpg", "height": 427, "width": 640, "date_captured": "2013-11-15 20:03:10", "flickr_url": "http://farm8.staticflickr.com/7127/7607618094_78c23b097e_z.jpg", "id": 13177}, {"license": 4, "file_name": "000000037751.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000037751.jpg", "height": 480, "width": 640, "date_captured": "2013-11-15 20:11:40", "flickr_url": "http://farm6.staticflickr.com/5472/9665212431_0c4013f384_z.jpg", "id": 37751}, {"license": 3, "file_name": "000000531134.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000531134.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 12:20:47", "flickr_url": "http://farm1.staticflickr.com/198/513976644_bf844d328f_z.jpg", "id": 531134}, {"license": 4, "file_name": "000000502347.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000502347.jpg", "height": 375, "width": 500, "date_captured": "2013-11-16 13:09:54", "flickr_url": "http://farm4.staticflickr.com/3064/2962435573_5a973043c5_z.jpg", "id": 502347}, {"license": 5, "file_name": "000000159977.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000159977.jpg", "height": 424, "width": 640, "date_captured": "2013-11-16 13:54:56", "flickr_url": "http://farm6.staticflickr.com/5333/8872308635_2189ecfdbf_z.jpg", "id": 159977}, {"license": 2, "file_name": "000000088951.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000088951.jpg", "height": 374, "width": 500, "date_captured": "2013-11-16 15:31:21", "flickr_url": "http://farm1.staticflickr.com/169/483173785_295aa116bf_z.jpg", "id": 88951}, {"license": 5, "file_name": "000000429109.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000429109.jpg", "height": 427, "width": 640, "date_captured": "2013-11-16 15:44:36", "flickr_url": "http://farm9.staticflickr.com/8347/8171276414_19d5eb8e3f_z.jpg", "id": 429109}, {"license": 3, "file_name": "000000320425.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000320425.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 15:51:20", "flickr_url": "http://farm4.staticflickr.com/3639/3301849069_770c496693_z.jpg", "id": 320425}, {"license": 3, "file_name": "000000471567.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000471567.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 15:52:25", "flickr_url": "http://farm4.staticflickr.com/3315/3301853319_635e7fd104_z.jpg", "id": 471567}, {"license": 3, "file_name": "000000235057.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000235057.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 16:03:15", "flickr_url": "http://farm3.staticflickr.com/2881/9311642389_4459f55908_z.jpg", "id": 235057}, {"license": 3, "file_name": "000000150726.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000150726.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 16:31:44", "flickr_url": "http://farm6.staticflickr.com/5485/9287866782_3277313404_z.jpg", "id": 150726}, {"license": 2, "file_name": "000000334371.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000334371.jpg", "height": 419, "width": 640, "date_captured": "2013-11-16 18:14:44", "flickr_url": "http://farm4.staticflickr.com/3111/2894440031_7dbf4edafa_z.jpg", "id": 334371}, {"license": 3, "file_name": "000000271457.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000271457.jpg", "height": 333, "width": 500, "date_captured": "2013-11-16 18:43:30", "flickr_url": "http://farm1.staticflickr.com/7/9437041_de1edbbc16_z.jpg", "id": 271457}, {"license": 2, "file_name": "000000008899.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000008899.jpg", "height": 539, "width": 640, "date_captured": "2013-11-16 20:39:33", "flickr_url": "http://farm8.staticflickr.com/7273/7722123984_0d123099bd_z.jpg", "id": 8899}, {"license": 2, "file_name": "000000212895.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000212895.jpg", "height": 640, "width": 480, "date_captured": "2013-11-16 21:48:48", "flickr_url": "http://farm3.staticflickr.com/2738/4151923137_1923f5db09_z.jpg", "id": 212895}, {"license": 4, "file_name": "000000285894.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000285894.jpg", "height": 329, "width": 500, "date_captured": "2013-11-16 22:16:00", "flickr_url": "http://farm3.staticflickr.com/2021/3841450193_830aa3b8b7_z.jpg", "id": 285894}, {"license": 1, "file_name": "000000054967.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000054967.jpg", "height": 640, "width": 424, "date_captured": "2013-11-17 00:22:02", "flickr_url": "http://farm4.staticflickr.com/3321/3503949430_833382b3e5_z.jpg", "id": 54967}, {"license": 5, "file_name": "000000128372.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000128372.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 00:29:42", "flickr_url": "http://farm9.staticflickr.com/8479/8172792873_5d083ef147_z.jpg", "id": 128372}, {"license": 3, "file_name": "000000301981.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000301981.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 01:18:30", "flickr_url": "http://farm2.staticflickr.com/1154/1302772619_2e4bb45077_z.jpg", "id": 301981}, {"license": 2, "file_name": "000000404534.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000404534.jpg", "height": 500, "width": 386, "date_captured": "2013-11-17 01:43:07", "flickr_url": "http://farm2.staticflickr.com/1402/822655676_a20294d940_z.jpg", "id": 404534}, {"license": 4, "file_name": "000000079565.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000079565.jpg", "height": 375, "width": 500, "date_captured": "2013-11-17 02:12:56", "flickr_url": "http://farm1.staticflickr.com/23/25900608_1be51f60e5_z.jpg", "id": 79565}, {"license": 1, "file_name": "000000374551.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000374551.jpg", "height": 300, "width": 500, "date_captured": "2013-11-17 02:36:30", "flickr_url": "http://farm2.staticflickr.com/1400/1474562342_f2154818a1_z.jpg", "id": 374551}, {"license": 2, "file_name": "000000499181.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000499181.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 03:01:05", "flickr_url": "http://farm1.staticflickr.com/117/307382050_53dc21e48a_z.jpg", "id": 499181}, {"license": 5, "file_name": "000000093154.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000093154.jpg", "height": 640, "width": 427, "date_captured": "2013-11-17 03:54:57", "flickr_url": "http://farm8.staticflickr.com/7069/6832195638_64a7f64963_z.jpg", "id": 93154}, {"license": 6, "file_name": "000000100489.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000100489.jpg", "height": 640, "width": 479, "date_captured": "2013-11-17 03:59:06", "flickr_url": "http://farm3.staticflickr.com/2840/10000657246_f4e5c89bc7_z.jpg", "id": 100489}, {"license": 5, "file_name": "000000447789.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000447789.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 04:06:22", "flickr_url": "http://farm7.staticflickr.com/6194/6160274980_952f06fcd0_z.jpg", "id": 447789}, {"license": 3, "file_name": "000000014226.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000014226.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 04:22:03", "flickr_url": "http://farm1.staticflickr.com/6/6710769_d74169f5b7_z.jpg", "id": 14226}, {"license": 3, "file_name": "000000475223.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000475223.jpg", "height": 438, "width": 640, "date_captured": "2013-11-17 05:30:52", "flickr_url": "http://farm4.staticflickr.com/3797/9506103461_60550f5b1d_z.jpg", "id": 475223}, {"license": 3, "file_name": "000000149622.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000149622.jpg", "height": 453, "width": 640, "date_captured": "2013-11-17 06:13:53", "flickr_url": "http://farm6.staticflickr.com/5498/9332695508_23d448abdc_z.jpg", "id": 149622}, {"license": 3, "file_name": "000000180188.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000180188.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 08:20:08", "flickr_url": "http://farm4.staticflickr.com/3822/9325494843_8c664e2372_z.jpg", "id": 180188}, {"license": 3, "file_name": "000000440617.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000440617.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 08:27:04", "flickr_url": "http://farm6.staticflickr.com/5348/9285423615_244abb5342_z.jpg", "id": 440617}, {"license": 3, "file_name": "000000376625.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000376625.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 09:22:16", "flickr_url": "http://farm6.staticflickr.com/5337/8972622381_d7a308e7bc_z.jpg", "id": 376625}, {"license": 2, "file_name": "000000015440.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000015440.jpg", "height": 640, "width": 404, "date_captured": "2013-11-17 09:50:00", "flickr_url": "http://farm4.staticflickr.com/3261/2870016347_39ffc0ca45_z.jpg", "id": 15440}, {"license": 2, "file_name": "000000433134.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000433134.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 15:39:08", "flickr_url": "http://farm4.staticflickr.com/3098/2474898826_ab68cf4dcc_z.jpg", "id": 433134}, {"license": 1, "file_name": "000000478393.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000478393.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 16:16:01", "flickr_url": "http://farm5.staticflickr.com/4115/4859291760_af67f36402_z.jpg", "id": 478393}, {"license": 3, "file_name": "000000387383.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000387383.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 18:33:40", "flickr_url": "http://farm3.staticflickr.com/2103/2246269963_f41b6a4901_z.jpg", "id": 387383}, {"license": 4, "file_name": "000000205289.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000205289.jpg", "height": 451, "width": 640, "date_captured": "2013-11-17 19:30:10", "flickr_url": "http://farm9.staticflickr.com/8048/8094964301_1518affa3b_z.jpg", "id": 205289}, {"license": 3, "file_name": "000000522393.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000522393.jpg", "height": 640, "width": 640, "date_captured": "2013-11-18 00:15:08", "flickr_url": "http://farm8.staticflickr.com/7206/6874325501_4e75ea8463_z.jpg", "id": 522393}, {"license": 3, "file_name": "000000080274.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000080274.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 03:58:10", "flickr_url": "http://farm6.staticflickr.com/5512/9284062967_3156b448dc_z.jpg", "id": 80274}, {"license": 3, "file_name": "000000520832.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000520832.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 04:51:50", "flickr_url": "http://farm2.staticflickr.com/1215/566069404_8ac9fa030d_z.jpg", "id": 520832}, {"license": 4, "file_name": "000000250137.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000250137.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 05:12:38", "flickr_url": "http://farm5.staticflickr.com/4084/5028973928_910bfd2613_z.jpg", "id": 250137}, {"license": 1, "file_name": "000000082821.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000082821.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 07:35:41", "flickr_url": "http://farm4.staticflickr.com/3747/9252744041_f8620958cb_z.jpg", "id": 82821}, {"license": 5, "file_name": "000000248284.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000248284.jpg", "height": 640, "width": 427, "date_captured": "2013-11-18 08:38:48", "flickr_url": "http://farm8.staticflickr.com/7305/8718260325_0ea4d34d5f_z.jpg", "id": 248284}, {"license": 5, "file_name": "000000158945.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000158945.jpg", "height": 640, "width": 478, "date_captured": "2013-11-18 08:55:05", "flickr_url": "http://farm5.staticflickr.com/4124/5072296382_e96d46c3cf_z.jpg", "id": 158945}, {"license": 1, "file_name": "000000210789.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000210789.jpg", "height": 520, "width": 369, "date_captured": "2013-11-18 09:00:43", "flickr_url": "http://farm9.staticflickr.com/8519/8586666706_262bdb70c1_z.jpg", "id": 210789}, {"license": 6, "file_name": "000000230993.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000230993.jpg", "height": 408, "width": 640, "date_captured": "2013-11-18 09:52:23", "flickr_url": "http://farm9.staticflickr.com/8143/7345578988_de1d856697_z.jpg", "id": 230993}, {"license": 1, "file_name": "000000121417.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000121417.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 10:07:11", "flickr_url": "http://farm8.staticflickr.com/7170/6735219249_660fac2a1d_z.jpg", "id": 121417}, {"license": 4, "file_name": "000000341469.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000341469.jpg", "height": 640, "width": 457, "date_captured": "2013-11-18 10:21:15", "flickr_url": "http://farm9.staticflickr.com/8123/8659803549_02c7baa8a3_z.jpg", "id": 341469}, {"license": 2, "file_name": "000000206831.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000206831.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 11:23:53", "flickr_url": "http://farm1.staticflickr.com/43/149865366_bab0b749a4_z.jpg", "id": 206831}, {"license": 3, "file_name": "000000453981.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000453981.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 13:02:48", "flickr_url": "http://farm6.staticflickr.com/5345/9421978388_8a342a8b4b_z.jpg", "id": 453981}, {"license": 3, "file_name": "000000519611.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000519611.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 13:12:53", "flickr_url": "http://farm6.staticflickr.com/5525/9168005994_6f372df6d6_z.jpg", "id": 519611}, {"license": 3, "file_name": "000000235064.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000235064.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 13:12:58", "flickr_url": "http://farm6.staticflickr.com/5461/9233215195_8812f327af_z.jpg", "id": 235064}, {"license": 3, "file_name": "000000308476.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000308476.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 13:15:32", "flickr_url": "http://farm6.staticflickr.com/5349/9289227058_9b88df7a6f_z.jpg", "id": 308476}, {"license": 3, "file_name": "000000305695.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000305695.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 16:05:17", "flickr_url": "http://farm1.staticflickr.com/163/423734742_2bf1811aa8_z.jpg", "id": 305695}, {"license": 5, "file_name": "000000185409.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000185409.jpg", "height": 424, "width": 640, "date_captured": "2013-11-18 16:08:00", "flickr_url": "http://farm6.staticflickr.com/5454/8881324394_97e0322747_z.jpg", "id": 185409}, {"license": 3, "file_name": "000000104455.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000104455.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 16:55:01", "flickr_url": "http://farm6.staticflickr.com/5534/9113082226_292a454cb3_z.jpg", "id": 104455}, {"license": 2, "file_name": "000000401244.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000401244.jpg", "height": 640, "width": 426, "date_captured": "2013-11-18 17:08:42", "flickr_url": "http://farm4.staticflickr.com/3187/2932797464_95d3656fa9_z.jpg", "id": 401244}, {"license": 4, "file_name": "000000331075.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000331075.jpg", "height": 606, "width": 640, "date_captured": "2013-11-18 17:10:30", "flickr_url": "http://farm4.staticflickr.com/3790/9178299324_d12a3582e0_z.jpg", "id": 331075}, {"license": 1, "file_name": "000000355905.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000355905.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 17:23:08", "flickr_url": "http://farm3.staticflickr.com/2374/2234914187_12a24f98d7_z.jpg", "id": 355905}, {"license": 3, "file_name": "000000328337.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000328337.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 17:54:05", "flickr_url": "http://farm1.staticflickr.com/138/402172335_226f364b61_z.jpg", "id": 328337}, {"license": 1, "file_name": "000000377497.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000377497.jpg", "height": 640, "width": 432, "date_captured": "2013-11-18 21:34:03", "flickr_url": "http://farm2.staticflickr.com/1208/673840168_1e793f039e_z.jpg", "id": 377497}, {"license": 4, "file_name": "000000007281.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000007281.jpg", "height": 361, "width": 640, "date_captured": "2013-11-18 21:52:05", "flickr_url": "http://farm5.staticflickr.com/4112/5022207571_74aab92fd5_z.jpg", "id": 7281}, {"license": 3, "file_name": "000000050380.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000050380.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 00:57:10", "flickr_url": "http://farm6.staticflickr.com/5446/9489694276_e64d3c535b_z.jpg", "id": 50380}, {"license": 1, "file_name": "000000439180.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000439180.jpg", "height": 360, "width": 640, "date_captured": "2013-11-19 01:25:39", "flickr_url": "http://farm3.staticflickr.com/2831/9275116980_1d9b986e3b_z.jpg", "id": 439180}, {"license": 4, "file_name": "000000513181.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000513181.jpg", "height": 423, "width": 640, "date_captured": "2013-11-19 18:39:26", "flickr_url": "http://farm5.staticflickr.com/4116/4883585935_330f598ac7_z.jpg", "id": 513181}, {"license": 1, "file_name": "000000371472.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000371472.jpg", "height": 640, "width": 480, "date_captured": "2013-11-19 19:31:27", "flickr_url": "http://farm6.staticflickr.com/5042/5351290286_236f6832f0_z.jpg", "id": 371472}, {"license": 2, "file_name": "000000280891.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000280891.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 19:45:29", "flickr_url": "http://farm6.staticflickr.com/5457/9202678184_c0282c3f20_z.jpg", "id": 280891}, {"license": 3, "file_name": "000000054628.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000054628.jpg", "height": 500, "width": 375, "date_captured": "2013-11-19 20:50:36", "flickr_url": "http://farm1.staticflickr.com/107/309219415_e423a3d03c_z.jpg", "id": 54628}, {"license": 2, "file_name": "000000157928.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000157928.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 21:30:39", "flickr_url": "http://farm8.staticflickr.com/7013/6787196535_776c956d40_z.jpg", "id": 157928}, {"license": 3, "file_name": "000000203095.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000203095.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 22:23:23", "flickr_url": "http://farm1.staticflickr.com/191/478558839_414154f423_z.jpg", "id": 203095}, {"license": 4, "file_name": "000000017182.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000017182.jpg", "height": 428, "width": 640, "date_captured": "2013-11-19 22:30:23", "flickr_url": "http://farm4.staticflickr.com/3020/2906486794_80400b009e_z.jpg", "id": 17182}, {"license": 1, "file_name": "000000150649.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000150649.jpg", "height": 311, "width": 500, "date_captured": "2013-11-19 22:31:14", "flickr_url": "http://farm3.staticflickr.com/2091/2416924998_1aaacb1bbe_z.jpg", "id": 150649}, {"license": 4, "file_name": "000000562059.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000562059.jpg", "height": 640, "width": 427, "date_captured": "2013-11-19 23:47:19", "flickr_url": "http://farm3.staticflickr.com/2817/9256079385_0d21c6c751_z.jpg", "id": 562059}, {"license": 4, "file_name": "000000407524.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000407524.jpg", "height": 480, "width": 640, "date_captured": "2013-11-19 23:55:00", "flickr_url": "http://farm3.staticflickr.com/2063/1537200374_fbe52bba8c_z.jpg", "id": 407524}, {"license": 2, "file_name": "000000306437.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000306437.jpg", "height": 640, "width": 426, "date_captured": "2013-11-20 00:04:04", "flickr_url": "http://farm4.staticflickr.com/3743/9618740465_c951738fef_z.jpg", "id": 306437}, {"license": 1, "file_name": "000000116206.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000116206.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 04:18:28", "flickr_url": "http://farm2.staticflickr.com/1179/5148981493_f4f21562db_z.jpg", "id": 116206}, {"license": 1, "file_name": "000000393838.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000393838.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 04:47:10", "flickr_url": "http://farm5.staticflickr.com/4150/5002740634_dd03a3eb1f_z.jpg", "id": 393838}, {"license": 4, "file_name": "000000229553.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000229553.jpg", "height": 488, "width": 640, "date_captured": "2013-11-20 05:32:43", "flickr_url": "http://farm5.staticflickr.com/4062/4653205441_96e8943d6f_z.jpg", "id": 229553}, {"license": 5, "file_name": "000000171382.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000171382.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 05:53:49", "flickr_url": "http://farm4.staticflickr.com/3401/4572932047_8619a2bfac_z.jpg", "id": 171382}, {"license": 1, "file_name": "000000094614.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000094614.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 07:12:28", "flickr_url": "http://farm4.staticflickr.com/3313/3408137435_46bdc105c4_z.jpg", "id": 94614}, {"license": 1, "file_name": "000000172649.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000172649.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 07:13:22", "flickr_url": "http://farm4.staticflickr.com/3511/3778676010_863a2223b5_z.jpg", "id": 172649}, {"license": 4, "file_name": "000000252507.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000252507.jpg", "height": 500, "width": 375, "date_captured": "2013-11-20 07:26:01", "flickr_url": "http://farm4.staticflickr.com/3654/3369850438_1bf0b68649_z.jpg", "id": 252507}, {"license": 4, "file_name": "000000326128.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000326128.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 14:25:31", "flickr_url": "http://farm3.staticflickr.com/2176/2277537216_e2ddde599b_z.jpg", "id": 326128}, {"license": 2, "file_name": "000000214539.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000214539.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 19:17:11", "flickr_url": "http://farm3.staticflickr.com/2844/8880972560_e3c5074906_z.jpg", "id": 214539}, {"license": 6, "file_name": "000000051314.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000051314.jpg", "height": 480, "width": 640, "date_captured": "2013-11-20 19:25:13", "flickr_url": "http://farm4.staticflickr.com/3263/2720515288_16d4a0a429_z.jpg", "id": 51314}, {"license": 6, "file_name": "000000556873.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000556873.jpg", "height": 640, "width": 427, "date_captured": "2013-11-20 20:07:57", "flickr_url": "http://farm3.staticflickr.com/2851/9200229971_d3cf8072b4_z.jpg", "id": 556873}, {"license": 3, "file_name": "000000417911.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000417911.jpg", "height": 429, "width": 640, "date_captured": "2013-11-20 20:15:23", "flickr_url": "http://farm3.staticflickr.com/2806/8757831528_b47c3a5fdb_z.jpg", "id": 417911}, {"license": 4, "file_name": "000000081988.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000081988.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 22:59:13", "flickr_url": "http://farm7.staticflickr.com/6080/6038911779_36e4613d84_z.jpg", "id": 81988}, {"license": 3, "file_name": "000000554266.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000554266.jpg", "height": 253, "width": 640, "date_captured": "2013-11-20 23:17:46", "flickr_url": "http://farm4.staticflickr.com/3099/3226049395_b5478ab509_z.jpg", "id": 554266}, {"license": 2, "file_name": "000000008629.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000008629.jpg", "height": 640, "width": 640, "date_captured": "2013-11-21 00:37:34", "flickr_url": "http://farm9.staticflickr.com/8170/7930817242_afa59041de_z.jpg", "id": 8629}, {"license": 4, "file_name": "000000161925.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000161925.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 00:53:20", "flickr_url": "http://farm4.staticflickr.com/3533/3316362158_bc239f251c_z.jpg", "id": 161925}, {"license": 4, "file_name": "000000064898.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000064898.jpg", "height": 427, "width": 640, "date_captured": "2013-11-21 01:04:37", "flickr_url": "http://farm5.staticflickr.com/4094/4891067097_caa3cccb18_z.jpg", "id": 64898}, {"license": 1, "file_name": "000000547854.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000547854.jpg", "height": 640, "width": 640, "date_captured": "2013-11-21 01:11:55", "flickr_url": "http://farm4.staticflickr.com/3692/10233886394_8bd0fb2a5b_z.jpg", "id": 547854}, {"license": 2, "file_name": "000000033005.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000033005.jpg", "height": 426, "width": 640, "date_captured": "2013-11-21 02:19:20", "flickr_url": "http://farm4.staticflickr.com/3688/9350630591_fe401bdf28_z.jpg", "id": 33005}, {"license": 2, "file_name": "000000388215.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000388215.jpg", "height": 425, "width": 640, "date_captured": "2013-11-21 02:20:24", "flickr_url": "http://farm4.staticflickr.com/3675/9359625784_431cc81223_z.jpg", "id": 388215}, {"license": 1, "file_name": "000000111609.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000111609.jpg", "height": 429, "width": 640, "date_captured": "2013-11-21 02:33:46", "flickr_url": "http://farm3.staticflickr.com/2445/3648267986_0c6a6e72b7_z.jpg", "id": 111609}, {"license": 2, "file_name": "000000064718.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000064718.jpg", "height": 464, "width": 640, "date_captured": "2013-11-21 04:24:13", "flickr_url": "http://farm3.staticflickr.com/2580/5818797771_03119f2ebe_z.jpg", "id": 64718}, {"license": 1, "file_name": "000000546325.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000546325.jpg", "height": 640, "width": 480, "date_captured": "2013-11-21 08:16:33", "flickr_url": "http://farm4.staticflickr.com/3085/3152852897_c66536049f_z.jpg", "id": 546325}, {"license": 3, "file_name": "000000082688.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000082688.jpg", "height": 428, "width": 640, "date_captured": "2013-11-21 21:21:22", "flickr_url": "http://farm4.staticflickr.com/3474/3189579015_6eb8e1e48b_z.jpg", "id": 82688}, {"license": 5, "file_name": "000000367569.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000367569.jpg", "height": 640, "width": 469, "date_captured": "2013-11-21 22:08:59", "flickr_url": "http://farm6.staticflickr.com/5333/7409214738_e99f75d461_z.jpg", "id": 367569}, {"license": 1, "file_name": "000000209753.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000209753.jpg", "height": 640, "width": 467, "date_captured": "2013-11-22 02:21:57", "flickr_url": "http://farm4.staticflickr.com/3434/3942820363_354c9a5516_z.jpg", "id": 209753}, {"license": 1, "file_name": "000000531135.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000531135.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 20:47:43", "flickr_url": "http://farm4.staticflickr.com/3138/2337433274_1420197103_z.jpg", "id": 531135}, {"license": 4, "file_name": "000000447187.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000447187.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 22:47:38", "flickr_url": "http://farm4.staticflickr.com/3094/2684280938_a5b59c0fac_z.jpg", "id": 447187}, {"license": 3, "file_name": "000000311002.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000311002.jpg", "height": 427, "width": 640, "date_captured": "2013-11-22 22:51:17", "flickr_url": "http://farm4.staticflickr.com/3152/2514145335_5e72103412_z.jpg", "id": 311002}, {"license": 5, "file_name": "000000458045.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000458045.jpg", "height": 375, "width": 500, "date_captured": "2013-11-22 23:06:39", "flickr_url": "http://farm1.staticflickr.com/186/469842019_a13b928a2f_z.jpg", "id": 458045}, {"license": 2, "file_name": "000000246436.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000246436.jpg", "height": 640, "width": 480, "date_captured": "2013-11-23 02:55:55", "flickr_url": "http://farm5.staticflickr.com/4059/4498930465_3d209ca94e_z.jpg", "id": 246436}, {"license": 3, "file_name": "000000440184.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000440184.jpg", "height": 425, "width": 640, "date_captured": "2013-11-23 04:15:05", "flickr_url": "http://farm4.staticflickr.com/3148/2602812274_314d9e9dc5_z.jpg", "id": 440184}, {"license": 4, "file_name": "000000085157.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000085157.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 04:25:20", "flickr_url": "http://farm3.staticflickr.com/2620/3776048035_fb7c6fc8d5_z.jpg", "id": 85157}, {"license": 4, "file_name": "000000256916.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000256916.jpg", "height": 480, "width": 640, "date_captured": "2013-11-23 04:29:24", "flickr_url": "http://farm4.staticflickr.com/3304/3674288028_5e877e3b64_z.jpg", "id": 256916}, {"license": 2, "file_name": "000000504415.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000504415.jpg", "height": 427, "width": 640, "date_captured": "2013-11-23 05:23:38", "flickr_url": "http://farm1.staticflickr.com/121/295385315_5a7b7c54d7_z.jpg", "id": 504415}, {"license": 1, "file_name": "000000246522.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000246522.jpg", "height": 640, "width": 427, "date_captured": "2013-11-23 18:02:13", "flickr_url": "http://farm4.staticflickr.com/3439/3391681585_fe1860ed56_z.jpg", "id": 246522}, {"license": 4, "file_name": "000000446703.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000446703.jpg", "height": 333, "width": 500, "date_captured": "2013-11-24 01:38:47", "flickr_url": "http://farm1.staticflickr.com/144/334302892_86ce0431c0_z.jpg", "id": 446703}, {"license": 1, "file_name": "000000367095.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000367095.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 02:06:36", "flickr_url": "http://farm8.staticflickr.com/7045/6944447435_1103574846_z.jpg", "id": 367095}, {"license": 3, "file_name": "000000529148.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000529148.jpg", "height": 426, "width": 640, "date_captured": "2013-11-24 03:47:51", "flickr_url": "http://farm4.staticflickr.com/3473/3760552218_ce8da800b2_z.jpg", "id": 529148}, {"license": 1, "file_name": "000000480212.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000480212.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 03:53:09", "flickr_url": "http://farm5.staticflickr.com/4057/4543900864_c32797a974_z.jpg", "id": 480212}, {"license": 1, "file_name": "000000442993.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000442993.jpg", "height": 640, "width": 427, "date_captured": "2013-11-24 06:29:06", "flickr_url": "http://farm8.staticflickr.com/7380/9737154728_f015d20c97_z.jpg", "id": 442993}, {"license": 1, "file_name": "000000071938.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000071938.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 07:11:30", "flickr_url": "http://farm4.staticflickr.com/3106/2531963343_33256e1570_z.jpg", "id": 71938}, {"license": 3, "file_name": "000000136466.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000136466.jpg", "height": 500, "width": 332, "date_captured": "2013-11-24 10:34:16", "flickr_url": "http://farm4.staticflickr.com/3482/3295866470_0fbed0492a_z.jpg", "id": 136466}, {"license": 3, "file_name": "000000028452.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000028452.jpg", "height": 640, "width": 480, "date_captured": "2013-11-24 11:36:38", "flickr_url": "http://farm5.staticflickr.com/4124/4968631062_1f0c10d872_z.jpg", "id": 28452}, {"license": 4, "file_name": "000000581482.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000581482.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 13:25:09", "flickr_url": "http://farm6.staticflickr.com/5455/9400924184_7fd832cd55_z.jpg", "id": 581482}, {"license": 4, "file_name": "000000217425.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000217425.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 14:22:42", "flickr_url": "http://farm9.staticflickr.com/8534/8983888416_8e42406b95_z.jpg", "id": 217425}, {"license": 3, "file_name": "000000140439.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000140439.jpg", "height": 640, "width": 428, "date_captured": "2013-11-24 18:42:30", "flickr_url": "http://farm9.staticflickr.com/8435/7883276884_199a264a5a_z.jpg", "id": 140439}, {"license": 1, "file_name": "000000151820.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000151820.jpg", "height": 427, "width": 640, "date_captured": "2013-11-24 23:20:18", "flickr_url": "http://farm8.staticflickr.com/7417/8731218963_6e42cfd388_z.jpg", "id": 151820}, {"license": 2, "file_name": "000000260105.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000260105.jpg", "height": 480, "width": 640, "date_captured": "2013-11-24 23:28:43", "flickr_url": "http://farm3.staticflickr.com/2823/8817073004_ee080a8351_z.jpg", "id": 260105}, {"license": 1, "file_name": "000000127394.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000127394.jpg", "height": 640, "width": 409, "date_captured": "2013-11-25 14:26:45", "flickr_url": "http://farm3.staticflickr.com/2851/9551558088_7305f81bba_z.jpg", "id": 127394}, {"license": 3, "file_name": "000000238410.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000238410.jpg", "height": 480, "width": 640, "date_captured": "2013-11-25 19:10:05", "flickr_url": "http://farm4.staticflickr.com/3730/9435282039_03928a6b9c_z.jpg", "id": 238410}, {"license": 4, "file_name": "000000166918.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000166918.jpg", "height": 640, "width": 480, "date_captured": "2013-11-25 19:58:20", "flickr_url": "http://farm5.staticflickr.com/4117/4745624149_369a63786e_z.jpg", "id": 166918}, {"license": 3, "file_name": "000000290768.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000290768.jpg", "height": 612, "width": 612, "date_captured": "2013-11-14 21:32:42", "flickr_url": "http://farm9.staticflickr.com/8150/7506106522_42f9f84dc6_z.jpg", "id": 290768}, {"license": 4, "file_name": "000000357567.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000357567.jpg", "height": 640, "width": 480, "date_captured": "2013-11-15 00:38:41", "flickr_url": "http://farm4.staticflickr.com/3387/3556433761_fa6daaec21_z.jpg", "id": 357567}, {"license": 3, "file_name": "000000237118.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000237118.jpg", "height": 640, "width": 580, "date_captured": "2013-11-15 04:22:35", "flickr_url": "http://farm3.staticflickr.com/2494/5856814116_3b8b1652cb_z.jpg", "id": 237118}, {"license": 3, "file_name": "000000343561.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000343561.jpg", "height": 428, "width": 640, "date_captured": "2013-11-15 04:22:48", "flickr_url": "http://farm5.staticflickr.com/4118/4812500977_6b1c83b5c4_z.jpg", "id": 343561}, {"license": 2, "file_name": "000000195165.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000195165.jpg", "height": 478, "width": 640, "date_captured": "2013-11-15 05:12:04", "flickr_url": "http://farm2.staticflickr.com/1139/5141550102_8ea3d50105_z.jpg", "id": 195165}, {"license": 1, "file_name": "000000023272.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000023272.jpg", "height": 375, "width": 500, "date_captured": "2013-11-15 07:12:19", "flickr_url": "http://farm2.staticflickr.com/1152/816415585_d2b609d618_z.jpg", "id": 23272}, {"license": 3, "file_name": "000000464689.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000464689.jpg", "height": 640, "width": 586, "date_captured": "2013-11-15 19:18:33", "flickr_url": "http://farm8.staticflickr.com/7198/6847220238_6997d3db37_z.jpg", "id": 464689}, {"license": 3, "file_name": "000000360943.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000360943.jpg", "height": 640, "width": 501, "date_captured": "2013-11-15 21:09:01", "flickr_url": "http://farm5.staticflickr.com/4047/4432037388_8214303759_z.jpg", "id": 360943}, {"license": 3, "file_name": "000000410221.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000410221.jpg", "height": 640, "width": 622, "date_captured": "2013-11-16 04:36:16", "flickr_url": "http://farm6.staticflickr.com/5043/5286166169_24d7b5eaf8_z.jpg", "id": 410221}, {"license": 3, "file_name": "000000245513.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000245513.jpg", "height": 381, "width": 500, "date_captured": "2013-11-16 13:04:02", "flickr_url": "http://farm1.staticflickr.com/93/219148625_01aac7c475_z.jpg", "id": 245513}, {"license": 1, "file_name": "000000445365.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000445365.jpg", "height": 640, "width": 427, "date_captured": "2013-11-16 14:37:06", "flickr_url": "http://farm4.staticflickr.com/3205/2910788126_a64c569c3c_z.jpg", "id": 445365}, {"license": 1, "file_name": "000000059386.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000059386.jpg", "height": 640, "width": 427, "date_captured": "2013-11-16 14:55:38", "flickr_url": "http://farm4.staticflickr.com/3215/2890160775_53ebd51a3d_z.jpg", "id": 59386}, {"license": 3, "file_name": "000000279714.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000279714.jpg", "height": 640, "width": 425, "date_captured": "2013-11-16 15:42:42", "flickr_url": "http://farm8.staticflickr.com/7040/6829841552_7a956dc060_z.jpg", "id": 279714}, {"license": 1, "file_name": "000000507042.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000507042.jpg", "height": 640, "width": 427, "date_captured": "2013-11-16 16:02:34", "flickr_url": "http://farm4.staticflickr.com/3722/9644195225_d1bd3722a4_z.jpg", "id": 507042}, {"license": 5, "file_name": "000000314541.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000314541.jpg", "height": 425, "width": 640, "date_captured": "2013-11-16 18:13:05", "flickr_url": "http://farm9.staticflickr.com/8453/8021715193_e098e3f5f6_z.jpg", "id": 314541}, {"license": 4, "file_name": "000000341921.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000341921.jpg", "height": 478, "width": 640, "date_captured": "2013-11-16 19:29:54", "flickr_url": "http://farm6.staticflickr.com/5184/5615933755_b24f4bdc42_z.jpg", "id": 341921}, {"license": 3, "file_name": "000000186449.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000186449.jpg", "height": 640, "width": 436, "date_captured": "2013-11-16 21:15:52", "flickr_url": "http://farm6.staticflickr.com/5336/10036973876_fc064abc0d_z.jpg", "id": 186449}, {"license": 4, "file_name": "000000547336.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000547336.jpg", "height": 480, "width": 640, "date_captured": "2013-11-16 21:16:54", "flickr_url": "http://farm6.staticflickr.com/5291/5495465828_fb0bf27878_z.jpg", "id": 547336}, {"license": 1, "file_name": "000000226154.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000226154.jpg", "height": 507, "width": 640, "date_captured": "2013-11-16 21:38:05", "flickr_url": "http://farm4.staticflickr.com/3757/9069274194_986a78ab27_z.jpg", "id": 226154}, {"license": 1, "file_name": "000000394275.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000394275.jpg", "height": 393, "width": 640, "date_captured": "2013-11-16 21:39:53", "flickr_url": "http://farm6.staticflickr.com/5452/9067049583_1983c51d88_z.jpg", "id": 394275}, {"license": 4, "file_name": "000000229753.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000229753.jpg", "height": 427, "width": 640, "date_captured": "2013-11-17 00:12:59", "flickr_url": "http://farm4.staticflickr.com/3271/2787713866_34ab4ca3d3_z.jpg", "id": 229753}, {"license": 3, "file_name": "000000261712.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000261712.jpg", "height": 476, "width": 640, "date_captured": "2013-11-17 00:34:52", "flickr_url": "http://farm3.staticflickr.com/2258/2457429270_2834f0c1f0_z.jpg", "id": 261712}, {"license": 6, "file_name": "000000019042.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000019042.jpg", "height": 371, "width": 640, "date_captured": "2013-11-17 01:03:41", "flickr_url": "http://farm8.staticflickr.com/7289/9652593344_4469e9a6f1_z.jpg", "id": 19042}, {"license": 3, "file_name": "000000534394.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000534394.jpg", "height": 359, "width": 640, "date_captured": "2013-11-17 03:34:52", "flickr_url": "http://farm4.staticflickr.com/3322/4601243053_874c730c4f_z.jpg", "id": 534394}, {"license": 2, "file_name": "000000322610.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000322610.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 04:44:18", "flickr_url": "http://farm8.staticflickr.com/7036/6822183516_3d6bb9fc0f_z.jpg", "id": 322610}, {"license": 3, "file_name": "000000263299.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000263299.jpg", "height": 335, "width": 500, "date_captured": "2013-11-17 05:48:57", "flickr_url": "http://farm4.staticflickr.com/3211/2742574985_a2834f8947_z.jpg", "id": 263299}, {"license": 1, "file_name": "000000236690.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000236690.jpg", "height": 399, "width": 640, "date_captured": "2013-11-17 06:32:16", "flickr_url": "http://farm8.staticflickr.com/7298/9305876847_3f820cde5d_z.jpg", "id": 236690}, {"license": 1, "file_name": "000000252559.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000252559.jpg", "height": 640, "width": 480, "date_captured": "2013-11-17 06:50:29", "flickr_url": "http://farm1.staticflickr.com/205/498228745_126f25f752_z.jpg", "id": 252559}, {"license": 3, "file_name": "000000050145.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000050145.jpg", "height": 320, "width": 480, "date_captured": "2013-11-17 07:09:10", "flickr_url": "http://farm1.staticflickr.com/93/205036374_863351431e_z.jpg", "id": 50145}, {"license": 5, "file_name": "000000467848.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000467848.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 18:08:36", "flickr_url": "http://farm8.staticflickr.com/7282/8743933964_a0886ffeff_z.jpg", "id": 467848}, {"license": 3, "file_name": "000000572388.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000572388.jpg", "height": 500, "width": 349, "date_captured": "2013-11-17 18:45:43", "flickr_url": "http://farm4.staticflickr.com/3551/3312267132_0a998bdf0b_z.jpg", "id": 572388}, {"license": 1, "file_name": "000000272212.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000272212.jpg", "height": 480, "width": 640, "date_captured": "2013-11-17 18:51:41", "flickr_url": "http://farm5.staticflickr.com/4033/4506424820_38ff8179c9_z.jpg", "id": 272212}, {"license": 3, "file_name": "000000377000.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000377000.jpg", "height": 640, "width": 527, "date_captured": "2013-11-17 20:53:20", "flickr_url": "http://farm6.staticflickr.com/5021/5607314225_613a6fc8ac_z.jpg", "id": 377000}, {"license": 4, "file_name": "000000198641.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000198641.jpg", "height": 479, "width": 640, "date_captured": "2013-11-17 21:55:39", "flickr_url": "http://farm5.staticflickr.com/4062/4346863707_0e5e93cea4_z.jpg", "id": 198641}, {"license": 1, "file_name": "000000181421.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000181421.jpg", "height": 446, "width": 640, "date_captured": "2013-11-17 22:38:57", "flickr_url": "http://farm1.staticflickr.com/103/309560950_7cdd0ef8e9_z.jpg", "id": 181421}, {"license": 1, "file_name": "000000477227.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000477227.jpg", "height": 427, "width": 640, "date_captured": "2013-11-18 02:12:47", "flickr_url": "http://farm4.staticflickr.com/3804/9661408466_30c7ba675e_z.jpg", "id": 477227}, {"license": 1, "file_name": "000000119641.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000119641.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 02:56:54", "flickr_url": "http://farm4.staticflickr.com/3088/2358002180_0532163b07_z.jpg", "id": 119641}, {"license": 3, "file_name": "000000040083.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000040083.jpg", "height": 333, "width": 500, "date_captured": "2013-11-18 03:30:24", "flickr_url": "http://farm1.staticflickr.com/116/254881838_e21c6d17b8_z.jpg", "id": 40083}, {"license": 2, "file_name": "000000244496.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000244496.jpg", "height": 500, "width": 276, "date_captured": "2013-11-18 04:34:44", "flickr_url": "http://farm3.staticflickr.com/2556/4099011987_61906b636a_z.jpg", "id": 244496}, {"license": 1, "file_name": "000000565624.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000565624.jpg", "height": 375, "width": 640, "date_captured": "2013-11-18 08:44:56", "flickr_url": "http://farm5.staticflickr.com/4145/5036782631_1ccbc49c38_z.jpg", "id": 565624}, {"license": 2, "file_name": "000000549220.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000549220.jpg", "height": 640, "width": 480, "date_captured": "2013-11-18 11:01:23", "flickr_url": "http://farm4.staticflickr.com/3145/2419498650_fdfe34eb93_z.jpg", "id": 549220}, {"license": 1, "file_name": "000000442836.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000442836.jpg", "height": 457, "width": 640, "date_captured": "2013-11-18 15:10:45", "flickr_url": "http://farm7.staticflickr.com/6189/6118261329_45f8828a68_z.jpg", "id": 442836}, {"license": 1, "file_name": "000000428218.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000428218.jpg", "height": 480, "width": 640, "date_captured": "2013-11-18 16:46:17", "flickr_url": "http://farm4.staticflickr.com/3220/2772050777_52a8cbd20f_z.jpg", "id": 428218}, {"license": 3, "file_name": "000000574297.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000574297.jpg", "height": 427, "width": 640, "date_captured": "2013-11-19 02:39:16", "flickr_url": "http://farm9.staticflickr.com/8256/8699418944_2e57144c22_z.jpg", "id": 574297}, {"license": 2, "file_name": "000000061747.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000061747.jpg", "height": 574, "width": 640, "date_captured": "2013-11-19 18:06:20", "flickr_url": "http://farm5.staticflickr.com/4036/4453631343_ded9e50064_z.jpg", "id": 61747}, {"license": 3, "file_name": "000000553788.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000553788.jpg", "height": 363, "width": 640, "date_captured": "2013-11-19 22:28:54", "flickr_url": "http://farm1.staticflickr.com/21/39781384_d1d3743b07_z.jpg", "id": 553788}, {"license": 3, "file_name": "000000153510.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000153510.jpg", "height": 426, "width": 640, "date_captured": "2013-11-19 22:33:12", "flickr_url": "http://farm7.staticflickr.com/6240/6854069242_b35e0b040b_z.jpg", "id": 153510}, {"license": 5, "file_name": "000000456143.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000456143.jpg", "height": 361, "width": 640, "date_captured": "2013-11-20 00:53:53", "flickr_url": "http://farm4.staticflickr.com/3680/9550569905_4743020635_z.jpg", "id": 456143}, {"license": 1, "file_name": "000000157418.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000157418.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 01:27:19", "flickr_url": "http://farm4.staticflickr.com/3227/2986581771_0c4664923f_z.jpg", "id": 157418}, {"license": 4, "file_name": "000000345469.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000345469.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 16:05:34", "flickr_url": "http://farm2.staticflickr.com/1277/727119465_dfb6adbebb_z.jpg", "id": 345469}, {"license": 3, "file_name": "000000533855.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000533855.jpg", "height": 428, "width": 640, "date_captured": "2013-11-20 16:15:22", "flickr_url": "http://farm1.staticflickr.com/172/363833884_fc1f590848_z.jpg", "id": 533855}, {"license": 6, "file_name": "000000389197.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000389197.jpg", "height": 426, "width": 640, "date_captured": "2013-11-20 16:58:04", "flickr_url": "http://farm2.staticflickr.com/1016/1172645998_431e859560_z.jpg", "id": 389197}, {"license": 1, "file_name": "000000422998.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000422998.jpg", "height": 427, "width": 640, "date_captured": "2013-11-20 17:02:47", "flickr_url": "http://farm5.staticflickr.com/4017/4477787343_8ec191bb20_z.jpg", "id": 422998}, {"license": 3, "file_name": "000000000632.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000000632.jpg", "height": 483, "width": 640, "date_captured": "2013-11-20 21:14:01", "flickr_url": "http://farm2.staticflickr.com/1241/1243324748_eea455da9f_z.jpg", "id": 632}, {"license": 2, "file_name": "000000477955.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000477955.jpg", "height": 640, "width": 480, "date_captured": "2013-11-20 22:08:24", "flickr_url": "http://farm8.staticflickr.com/7144/6715145565_100bbbc6b3_z.jpg", "id": 477955}, {"license": 2, "file_name": "000000128675.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000128675.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 00:50:05", "flickr_url": "http://farm5.staticflickr.com/4076/4948151483_de957fab29_z.jpg", "id": 128675}, {"license": 5, "file_name": "000000402720.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000402720.jpg", "height": 612, "width": 612, "date_captured": "2013-11-21 02:44:46", "flickr_url": "http://farm8.staticflickr.com/7245/7276665146_20af39bbaf_z.jpg", "id": 402720}, {"license": 1, "file_name": "000000179141.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000179141.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 05:05:04", "flickr_url": "http://farm5.staticflickr.com/4127/5046382534_53bcb3ba6f_z.jpg", "id": 179141}, {"license": 2, "file_name": "000000353096.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000353096.jpg", "height": 344, "width": 500, "date_captured": "2013-11-21 19:23:32", "flickr_url": "http://farm1.staticflickr.com/172/394353622_75bdaaaaed_z.jpg", "id": 353096}, {"license": 2, "file_name": "000000013729.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000013729.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 20:10:40", "flickr_url": "http://farm2.staticflickr.com/1009/559099100_98414a0e66_z.jpg", "id": 13729}, {"license": 2, "file_name": "000000391140.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000391140.jpg", "height": 480, "width": 640, "date_captured": "2013-11-21 22:24:20", "flickr_url": "http://farm3.staticflickr.com/2040/2320473038_9f6753b9ed_z.jpg", "id": 391140}, {"license": 4, "file_name": "000000157046.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000157046.jpg", "height": 375, "width": 500, "date_captured": "2013-11-21 23:56:22", "flickr_url": "http://farm1.staticflickr.com/155/371334465_59e28f5469_z.jpg", "id": 157046}, {"license": 3, "file_name": "000000384527.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000384527.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 01:43:11", "flickr_url": "http://farm3.staticflickr.com/2563/3910464798_27372f3cb2_z.jpg", "id": 384527}, {"license": 3, "file_name": "000000478721.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000478721.jpg", "height": 480, "width": 640, "date_captured": "2013-11-22 10:48:20", "flickr_url": "http://farm8.staticflickr.com/7283/8744021186_d8e0d0b628_z.jpg", "id": 478721}, {"license": 1, "file_name": "000000033759.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000033759.jpg", "height": 457, "width": 640, "date_captured": "2013-11-22 21:02:39", "flickr_url": "http://farm2.staticflickr.com/1198/4725155561_8d211644b0_z.jpg", "id": 33759}, {"license": 1, "file_name": "000000098287.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000098287.jpg", "height": 640, "width": 415, "date_captured": "2013-11-22 21:49:58", "flickr_url": "http://farm8.staticflickr.com/7032/6646497531_fdd529278c_z.jpg", "id": 98287}, {"license": 1, "file_name": "000000158227.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000158227.jpg", "height": 357, "width": 500, "date_captured": "2013-11-22 23:05:30", "flickr_url": "http://farm1.staticflickr.com/210/495201463_3d6b548c08_z.jpg", "id": 158227}, {"license": 1, "file_name": "000000407646.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000407646.jpg", "height": 400, "width": 500, "date_captured": "2013-11-23 03:58:53", "flickr_url": "http://farm4.staticflickr.com/3110/2855627782_17b93a684e_z.jpg", "id": 407646}, {"license": 1, "file_name": "000000220310.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000220310.jpg", "height": 500, "width": 333, "date_captured": "2013-11-24 01:50:16", "flickr_url": "http://farm3.staticflickr.com/2281/2208555235_90cf7fea33_z.jpg", "id": 220310}, {"license": 3, "file_name": "000000512403.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000512403.jpg", "height": 640, "width": 529, "date_captured": "2013-11-24 05:12:53", "flickr_url": "http://farm1.staticflickr.com/143/350452845_fa743a9623_z.jpg", "id": 512403}, {"license": 4, "file_name": "000000168974.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000168974.jpg", "height": 500, "width": 375, "date_captured": "2013-11-24 07:19:48", "flickr_url": "http://farm3.staticflickr.com/2360/2063838083_64f7514c79_z.jpg", "id": 168974}, {"license": 1, "file_name": "000000552775.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000552775.jpg", "height": 500, "width": 375, "date_captured": "2013-11-24 10:38:31", "flickr_url": "http://farm4.staticflickr.com/3136/3106037881_9028de2168_z.jpg", "id": 552775}, {"license": 3, "file_name": "000000394940.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000394940.jpg", "height": 640, "width": 426, "date_captured": "2013-11-24 13:47:05", "flickr_url": "http://farm9.staticflickr.com/8227/8566023505_e9e9f997bc_z.jpg", "id": 394940}, {"license": 2, "file_name": "000000015335.jpg", "coco_url": "http://images.cocodataset.org/val2017/000000015335.jpg", "height": 480, "width": 640, "date_captured": "2013-11-25 14:00:10", "flickr_url": "http://farm6.staticflickr.com/5533/10257288534_c916fafd78_z.jpg", "id": 15335}], "annotations": [{"segments_info": [{"id": 3226956, "category_id": 1, "iscrowd": 0, "bbox": [413, 158, 53, 138], "area": 2840}, {"id": 6979964, "category_id": 1, "iscrowd": 0, "bbox": [384, 172, 16, 36], "area": 439}, {"id": 3103374, "category_id": 62, "iscrowd": 0, "bbox": [413, 223, 30, 81], "area": 1250}, {"id": 2831194, "category_id": 62, "iscrowd": 0, "bbox": [291, 218, 62, 98], "area": 1848}, {"id": 3496593, "category_id": 62, "iscrowd": 0, "bbox": [412, 219, 10, 13], "area": 90}, {"id": 2633066, "category_id": 62, "iscrowd": 0, "bbox": [317, 219, 22, 12], "area": 212}, {"id": 3165572, "category_id": 62, "iscrowd": 0, "bbox": [359, 218, 56, 103], "area": 2251}, {"id": 8824489, "category_id": 64, "iscrowd": 0, "bbox": [237, 149, 24, 62], "area": 369}, {"id": 3032951, "category_id": 67, "iscrowd": 0, "bbox": [321, 231, 126, 89], "area": 2134}, {"id": 2038814, "category_id": 72, "iscrowd": 0, "bbox": [7, 168, 149, 95], "area": 13247}, {"id": 3289671, "category_id": 72, "iscrowd": 0, "bbox": [557, 209, 82, 79], "area": 5846}, {"id": 2437710, "category_id": 78, "iscrowd": 0, "bbox": [512, 206, 15, 16], "area": 224}, {"id": 4159376, "category_id": 82, "iscrowd": 0, "bbox": [493, 174, 20, 108], "area": 2056}, {"id": 3423599, "category_id": 84, "iscrowd": 0, "bbox": [613, 308, 13, 46], "area": 324}, {"id": 3094634, "category_id": 84, "iscrowd": 0, "bbox": [605, 306, 14, 45], "area": 331}, {"id": 3296100, "category_id": 85, "iscrowd": 0, "bbox": [448, 121, 14, 22], "area": 227}, {"id": 6054280, "category_id": 86, "iscrowd": 0, "bbox": [241, 195, 14, 18], "area": 187}, {"id": 5942189, "category_id": 86, "iscrowd": 0, "bbox": [549, 309, 36, 90], "area": 2171}, {"id": 4086154, "category_id": 86, "iscrowd": 0, "bbox": [351, 209, 11, 22], "area": 178}, {"id": 7438777, "category_id": 86, "iscrowd": 0, "bbox": [337, 200, 10, 16], "area": 120}, {"id": 3031159, "category_id": 118, "iscrowd": 0, "bbox": [0, 269, 564, 157], "area": 49754}, {"id": 9284267, "category_id": 119, "iscrowd": 0, "bbox": [338, 166, 29, 50], "area": 842}, {"id": 6068135, "category_id": 130, "iscrowd": 0, "bbox": [212, 11, 321, 127], "area": 3391}, {"id": 2567230, "category_id": 156, "iscrowd": 0, "bbox": [129, 168, 351, 162], "area": 5699}, {"id": 10334639, "category_id": 181, "iscrowd": 0, "bbox": [204, 63, 234, 174], "area": 15587}, {"id": 6266027, "category_id": 186, "iscrowd": 0, "bbox": [136, 0, 473, 116], "area": 20106}, {"id": 5274512, "category_id": 188, "iscrowd": 0, "bbox": [0, 38, 549, 297], "area": 25483}, {"id": 7238567, "category_id": 189, "iscrowd": 0, "bbox": [457, 350, 183, 76], "area": 9421}, {"id": 4224910, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 358], "area": 83201}, {"id": 6391959, "category_id": 200, "iscrowd": 0, "bbox": [135, 359, 336, 67], "area": 12618}], "file_name": "000000000139.png", "image_id": 139}, {"segments_info": [{"id": 5931152, "category_id": 23, "iscrowd": 0, "bbox": [1, 69, 585, 564], "area": 275827}, {"id": 3834981, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 586, 421], "area": 88715}], "file_name": "000000000285.png", "image_id": 285}, {"segments_info": [{"id": 3223341, "category_id": 62, "iscrowd": 0, "bbox": [245, 230, 105, 88], "area": 5191}, {"id": 3358516, "category_id": 64, "iscrowd": 0, "bbox": [183, 137, 61, 92], "area": 2473}, {"id": 2701869, "category_id": 64, "iscrowd": 0, "bbox": [348, 212, 82, 143], "area": 7034}, {"id": 5256993, "category_id": 65, "iscrowd": 0, "bbox": [3, 267, 402, 208], "area": 64064}, {"id": 2580359, "category_id": 84, "iscrowd": 0, "bbox": [462, 254, 8, 33], "area": 162}, {"id": 3362402, "category_id": 84, "iscrowd": 0, "bbox": [453, 253, 8, 34], "area": 213}, {"id": 3221017, "category_id": 84, "iscrowd": 0, "bbox": [524, 97, 3, 38], "area": 82}, {"id": 3748912, "category_id": 84, "iscrowd": 0, "bbox": [497, 55, 4, 28], "area": 91}, {"id": 5396370, "category_id": 84, "iscrowd": 0, "bbox": [519, 193, 4, 34], "area": 91}, {"id": 1251357, "category_id": 84, "iscrowd": 0, "bbox": [461, 192, 29, 36], "area": 920}, {"id": 4478559, "category_id": 84, "iscrowd": 0, "bbox": [456, 193, 9, 34], "area": 202}, {"id": 6252377, "category_id": 84, "iscrowd": 0, "bbox": [488, 200, 7, 27], "area": 90}, {"id": 5663612, "category_id": 84, "iscrowd": 0, "bbox": [445, 298, 5, 39], "area": 179}, {"id": 3882561, "category_id": 84, "iscrowd": 0, "bbox": [455, 245, 48, 12], "area": 120}, {"id": 5269121, "category_id": 84, "iscrowd": 0, "bbox": [506, 191, 12, 37], "area": 192}, {"id": 4279416, "category_id": 84, "iscrowd": 0, "bbox": [527, 249, 24, 40], "area": 242}, {"id": 4676964, "category_id": 84, "iscrowd": 0, "bbox": [493, 156, 33, 6], "area": 193}, {"id": 3094598, "category_id": 84, "iscrowd": 1, "bbox": [416, 43, 154, 304], "area": 19697}, {"id": 3286041, "category_id": 93, "iscrowd": 0, "bbox": [0, 300, 392, 183], "area": 5104}, {"id": 4014916, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 483], "area": 175494}, {"id": 6266740, "category_id": 184, "iscrowd": 0, "bbox": [264, 33, 138, 219], "area": 26543}], "file_name": "000000000632.png", "image_id": 632}, {"segments_info": [{"id": 5851972, "category_id": 3, "iscrowd": 0, "bbox": [128, 267, 13, 8], "area": 83}, {"id": 6313815, "category_id": 8, "iscrowd": 0, "bbox": [123, 279, 22, 31], "area": 420}, {"id": 6446172, "category_id": 13, "iscrowd": 0, "bbox": [202, 260, 19, 26], "area": 321}, {"id": 3813724, "category_id": 13, "iscrowd": 0, "bbox": [120, 72, 135, 153], "area": 16446}, {"id": 7365726, "category_id": 149, "iscrowd": 0, "bbox": [0, 291, 375, 209], "area": 42045}, {"id": 5600377, "category_id": 184, "iscrowd": 0, "bbox": [177, 408, 198, 92], "area": 9244}, {"id": 15973014, "category_id": 187, "iscrowd": 0, "bbox": [219, 0, 156, 127], "area": 15430}, {"id": 6446682, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 103378}], "file_name": "000000000724.png", "image_id": 724}, {"segments_info": [{"id": 7562308, "category_id": 65, "iscrowd": 0, "bbox": [1, 0, 427, 640], "area": 27135}, {"id": 4217973, "category_id": 88, "iscrowd": 0, "bbox": [1, 58, 345, 469], "area": 65558}, {"id": 1063025, "category_id": 88, "iscrowd": 0, "bbox": [3, 278, 317, 355], "area": 84625}, {"id": 2707318, "category_id": 88, "iscrowd": 0, "bbox": [100, 7, 327, 543], "area": 78463}], "file_name": "000000000776.png", "image_id": 776}, {"segments_info": [{"id": 3287629, "category_id": 1, "iscrowd": 0, "bbox": [281, 45, 216, 346], "area": 27486}, {"id": 8684420, "category_id": 35, "iscrowd": 0, "bbox": [206, 362, 409, 38], "area": 3828}, {"id": 14144467, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 213773}, {"id": 15065827, "category_id": 187, "iscrowd": 0, "bbox": [218, 0, 422, 97], "area": 26340}], "file_name": "000000000785.png", "image_id": 785}, {"segments_info": [{"id": 6316128, "category_id": 79, "iscrowd": 0, "bbox": [33, 289, 127, 232], "area": 26213}, {"id": 8552830, "category_id": 82, "iscrowd": 0, "bbox": [245, 185, 166, 356], "area": 52336}, {"id": 4541265, "category_id": 186, "iscrowd": 0, "bbox": [15, 0, 409, 79], "area": 29548}, {"id": 2045786, "category_id": 188, "iscrowd": 0, "bbox": [19, 91, 397, 423], "area": 60790}, {"id": 4607831, "category_id": 190, "iscrowd": 0, "bbox": [51, 509, 337, 131], "area": 37556}, {"id": 7897479, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 424, 640], "area": 60450}], "file_name": "000000000802.png", "image_id": 802}, {"segments_info": [{"id": 12234672, "category_id": 1, "iscrowd": 0, "bbox": [164, 126, 265, 481], "area": 47692}, {"id": 8620683, "category_id": 1, "iscrowd": 0, "bbox": [145, 101, 292, 457], "area": 25073}, {"id": 13293294, "category_id": 37, "iscrowd": 0, "bbox": [408, 172, 19, 17], "area": 238}, {"id": 5926286, "category_id": 40, "iscrowd": 0, "bbox": [369, 157, 56, 46], "area": 1319}, {"id": 11914466, "category_id": 145, "iscrowd": 0, "bbox": [0, 496, 621, 144], "area": 74190}, {"id": 2835759, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 621, 386], "area": 188894}, {"id": 8892042, "category_id": 193, "iscrowd": 0, "bbox": [0, 358, 621, 158], "area": 56670}], "file_name": "000000000872.png", "image_id": 872}, {"segments_info": [{"id": 2170142, "category_id": 1, "iscrowd": 0, "bbox": [596, 26, 43, 227], "area": 5997}, {"id": 2698813, "category_id": 1, "iscrowd": 0, "bbox": [288, 0, 44, 12], "area": 393}, {"id": 6775400, "category_id": 1, "iscrowd": 0, "bbox": [277, 190, 140, 208], "area": 10343}, {"id": 4079695, "category_id": 1, "iscrowd": 0, "bbox": [1, 1, 58, 8], "area": 440}, {"id": 4739438, "category_id": 1, "iscrowd": 0, "bbox": [500, 1, 74, 13], "area": 564}, {"id": 2696745, "category_id": 1, "iscrowd": 0, "bbox": [281, 90, 112, 169], "area": 6234}, {"id": 3422803, "category_id": 1, "iscrowd": 0, "bbox": [435, 0, 32, 13], "area": 285}, {"id": 7953530, "category_id": 1, "iscrowd": 0, "bbox": [542, 2, 66, 10], "area": 448}, {"id": 7378081, "category_id": 43, "iscrowd": 0, "bbox": [400, 269, 81, 40], "area": 1796}, {"id": 7178621, "category_id": 190, "iscrowd": 0, "bbox": [0, 210, 640, 217], "area": 107029}, {"id": 4074010, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 255], "area": 131898}], "file_name": "000000000885.png", "image_id": 885}, {"segments_info": [{"id": 3421582, "category_id": 1, "iscrowd": 0, "bbox": [414, 210, 111, 270], "area": 18003}, {"id": 7830925, "category_id": 1, "iscrowd": 0, "bbox": [505, 192, 135, 288], "area": 22478}, {"id": 2499947, "category_id": 1, "iscrowd": 0, "bbox": [266, 96, 88, 316], "area": 14299}, {"id": 4738655, "category_id": 1, "iscrowd": 0, "bbox": [406, 120, 37, 46], "area": 1063}, {"id": 6053739, "category_id": 1, "iscrowd": 0, "bbox": [209, 176, 100, 248], "area": 10114}, {"id": 6778237, "category_id": 1, "iscrowd": 0, "bbox": [116, 152, 82, 228], "area": 8685}, {"id": 6712936, "category_id": 1, "iscrowd": 0, "bbox": [330, 155, 83, 313], "area": 15780}, {"id": 5067108, "category_id": 1, "iscrowd": 0, "bbox": [183, 121, 96, 273], "area": 6140}, {"id": 4542047, "category_id": 1, "iscrowd": 0, "bbox": [381, 160, 86, 319], "area": 10639}, {"id": 3097424, "category_id": 1, "iscrowd": 0, "bbox": [350, 119, 52, 41], "area": 1374}, {"id": 5859200, "category_id": 1, "iscrowd": 0, "bbox": [411, 107, 88, 121], "area": 3810}, {"id": 9018030, "category_id": 1, "iscrowd": 0, "bbox": [53, 185, 58, 213], "area": 5849}, {"id": 7306419, "category_id": 27, "iscrowd": 0, "bbox": [43, 224, 55, 49], "area": 181}, {"id": 2633793, "category_id": 27, "iscrowd": 0, "bbox": [209, 164, 63, 58], "area": 677}, {"id": 6383219, "category_id": 31, "iscrowd": 0, "bbox": [197, 225, 70, 117], "area": 2219}, {"id": 7038571, "category_id": 31, "iscrowd": 0, "bbox": [21, 227, 53, 121], "area": 2502}, {"id": 9141099, "category_id": 43, "iscrowd": 0, "bbox": [47, 303, 48, 87], "area": 2477}, {"id": 8223077, "category_id": 138, "iscrowd": 0, "bbox": [11, 193, 629, 278], "area": 13989}, {"id": 11445368, "category_id": 145, "iscrowd": 0, "bbox": [0, 236, 640, 244], "area": 47755}, {"id": 8565459, "category_id": 171, "iscrowd": 0, "bbox": [586, 157, 15, 20], "area": 167}, {"id": 5076083, "category_id": 184, "iscrowd": 0, "bbox": [65, 0, 575, 233], "area": 32670}, {"id": 7446694, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 347, 266], "area": 47717}, {"id": 2636620, "category_id": 194, "iscrowd": 0, "bbox": [533, 228, 107, 26], "area": 873}, {"id": 2637857, "category_id": 199, "iscrowd": 0, "bbox": [342, 32, 254, 207], "area": 31813}], "file_name": "000000001000.png", "image_id": 1000}, {"segments_info": [{"id": 1447707, "category_id": 1, "iscrowd": 0, "bbox": [502, 78, 138, 343], "area": 22793}, {"id": 4011573, "category_id": 1, "iscrowd": 0, "bbox": [0, 209, 24, 81], "area": 1605}, {"id": 1116963, "category_id": 1, "iscrowd": 0, "bbox": [402, 205, 66, 88], "area": 3893}, {"id": 1906457, "category_id": 1, "iscrowd": 0, "bbox": [27, 213, 50, 70], "area": 1808}, {"id": 8685451, "category_id": 9, "iscrowd": 0, "bbox": [292, 87, 121, 56], "area": 1831}, {"id": 5588540, "category_id": 9, "iscrowd": 0, "bbox": [125, 125, 139, 17], "area": 1713}, {"id": 4404785, "category_id": 9, "iscrowd": 0, "bbox": [0, 130, 105, 15], "area": 1208}, {"id": 5985877, "category_id": 16, "iscrowd": 0, "bbox": [193, 225, 74, 33], "area": 1038}, {"id": 1183244, "category_id": 27, "iscrowd": 0, "bbox": [22, 231, 22, 52], "area": 664}, {"id": 395290, "category_id": 31, "iscrowd": 0, "bbox": [492, 198, 104, 227], "area": 10016}, {"id": 2433830, "category_id": 77, "iscrowd": 0, "bbox": [529, 181, 30, 18], "area": 392}, {"id": 3027511, "category_id": 95, "iscrowd": 0, "bbox": [0, 0, 640, 174], "area": 58519}, {"id": 2500390, "category_id": 125, "iscrowd": 0, "bbox": [64, 248, 449, 58], "area": 9876}, {"id": 11645618, "category_id": 148, "iscrowd": 0, "bbox": [0, 130, 640, 144], "area": 50922}, {"id": 4607051, "category_id": 184, "iscrowd": 0, "bbox": [0, 53, 358, 72], "area": 13629}, {"id": 15395563, "category_id": 187, "iscrowd": 0, "bbox": [0, 28, 138, 45], "area": 3475}, {"id": 3288623, "category_id": 191, "iscrowd": 0, "bbox": [0, 272, 640, 155], "area": 64972}, {"id": 5853260, "category_id": 197, "iscrowd": 0, "bbox": [0, 39, 404, 111], "area": 11231}, {"id": 3682863, "category_id": 198, "iscrowd": 0, "bbox": [298, 238, 111, 65], "area": 4082}, {"id": 2697775, "category_id": 199, "iscrowd": 0, "bbox": [387, 268, 157, 59], "area": 4555}], "file_name": "000000001268.png", "image_id": 1268}, {"segments_info": [{"id": 2698051, "category_id": 1, "iscrowd": 0, "bbox": [263, 25, 146, 213], "area": 14098}, {"id": 6185598, "category_id": 1, "iscrowd": 0, "bbox": [7, 2, 420, 634], "area": 192000}, {"id": 12168132, "category_id": 77, "iscrowd": 0, "bbox": [299, 143, 72, 135], "area": 7653}, {"id": 3355192, "category_id": 85, "iscrowd": 0, "bbox": [372, 408, 17, 17], "area": 207}], "file_name": "000000001296.png", "image_id": 1296}, {"segments_info": [{"id": 3095374, "category_id": 1, "iscrowd": 0, "bbox": [145, 199, 122, 183], "area": 11518}, {"id": 1452642, "category_id": 1, "iscrowd": 0, "bbox": [218, 155, 63, 128], "area": 2322}, {"id": 793662, "category_id": 1, "iscrowd": 0, "bbox": [189, 183, 32, 62], "area": 982}, {"id": 988966, "category_id": 1, "iscrowd": 0, "bbox": [62, 214, 117, 143], "area": 10293}, {"id": 1322322, "category_id": 1, "iscrowd": 0, "bbox": [149, 137, 75, 52], "area": 2041}, {"id": 1715025, "category_id": 1, "iscrowd": 0, "bbox": [134, 183, 73, 70], "area": 3145}, {"id": 1519251, "category_id": 7, "iscrowd": 0, "bbox": [66, 327, 190, 136], "area": 19447}, {"id": 926018, "category_id": 147, "iscrowd": 0, "bbox": [69, 192, 306, 308], "area": 10227}, {"id": 857138, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 375, 199], "area": 40085}], "file_name": "000000001353.png", "image_id": 1353}, {"segments_info": [{"id": 10461087, "category_id": 51, "iscrowd": 0, "bbox": [487, 183, 153, 200], "area": 24768}, {"id": 8092539, "category_id": 54, "iscrowd": 0, "bbox": [64, 185, 377, 218], "area": 61496}, {"id": 3947580, "category_id": 189, "iscrowd": 0, "bbox": [0, 414, 640, 98], "area": 42101}, {"id": 8618883, "category_id": 196, "iscrowd": 0, "bbox": [0, 144, 434, 247], "area": 25756}], "file_name": "000000001425.png", "image_id": 1425}, {"segments_info": [{"id": 2500134, "category_id": 1, "iscrowd": 0, "bbox": [449, 119, 51, 122], "area": 2436}, {"id": 13948116, "category_id": 42, "iscrowd": 0, "bbox": [360, 230, 218, 15], "area": 1025}, {"id": 8224125, "category_id": 155, "iscrowd": 0, "bbox": [0, 68, 640, 247], "area": 146579}, {"id": 7237230, "category_id": 184, "iscrowd": 0, "bbox": [113, 61, 23, 9], "area": 129}, {"id": 14540253, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 75], "area": 41440}, {"id": 12369084, "category_id": 197, "iscrowd": 0, "bbox": [0, 57, 508, 28], "area": 7737}], "file_name": "000000001490.png", "image_id": 1490}, {"segments_info": [{"id": 10393490, "category_id": 72, "iscrowd": 0, "bbox": [126, 11, 111, 90], "area": 8509}, {"id": 9472646, "category_id": 73, "iscrowd": 0, "bbox": [1, 100, 125, 135], "area": 10031}, {"id": 2439463, "category_id": 74, "iscrowd": 0, "bbox": [306, 154, 14, 10], "area": 111}, {"id": 10790308, "category_id": 74, "iscrowd": 0, "bbox": [121, 178, 38, 22], "area": 553}, {"id": 10922152, "category_id": 76, "iscrowd": 0, "bbox": [161, 152, 154, 46], "area": 4083}, {"id": 987667, "category_id": 130, "iscrowd": 0, "bbox": [269, 5, 27, 97], "area": 512}, {"id": 10790306, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 81, 115], "area": 8366}, {"id": 6515048, "category_id": 189, "iscrowd": 0, "bbox": [0, 139, 320, 101], "area": 15314}, {"id": 1974569, "category_id": 195, "iscrowd": 0, "bbox": [305, 0, 15, 39], "area": 558}, {"id": 5069404, "category_id": 199, "iscrowd": 0, "bbox": [57, 0, 263, 142], "area": 15875}], "file_name": "000000001503.png", "image_id": 1503}, {"segments_info": [{"id": 4736836, "category_id": 3, "iscrowd": 0, "bbox": [426, 400, 65, 55], "area": 2865}, {"id": 8421500, "category_id": 3, "iscrowd": 0, "bbox": [1, 370, 119, 102], "area": 9471}, {"id": 4211003, "category_id": 3, "iscrowd": 0, "bbox": [502, 397, 49, 46], "area": 1689}, {"id": 4473405, "category_id": 3, "iscrowd": 0, "bbox": [225, 362, 195, 118], "area": 19427}, {"id": 5262147, "category_id": 3, "iscrowd": 0, "bbox": [201, 402, 32, 26], "area": 600}, {"id": 5328458, "category_id": 3, "iscrowd": 0, "bbox": [406, 402, 25, 28], "area": 496}, {"id": 7960693, "category_id": 3, "iscrowd": 0, "bbox": [106, 376, 79, 59], "area": 3984}, {"id": 8093050, "category_id": 8, "iscrowd": 0, "bbox": [226, 391, 19, 16], "area": 248}, {"id": 9739936, "category_id": 149, "iscrowd": 0, "bbox": [112, 397, 482, 83], "area": 13246}, {"id": 9140325, "category_id": 184, "iscrowd": 0, "bbox": [577, 0, 33, 91], "area": 1091}, {"id": 15123877, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 190], "area": 101660}, {"id": 6973791, "category_id": 197, "iscrowd": 0, "bbox": [0, 91, 640, 389], "area": 150854}], "file_name": "000000001532.png", "image_id": 1532}, {"segments_info": [{"id": 2961203, "category_id": 1, "iscrowd": 0, "bbox": [436, 339, 16, 24], "area": 241}, {"id": 4929350, "category_id": 1, "iscrowd": 0, "bbox": [212, 169, 19, 20], "area": 289}, {"id": 5522002, "category_id": 1, "iscrowd": 0, "bbox": [191, 305, 59, 65], "area": 1525}, {"id": 3880263, "category_id": 1, "iscrowd": 0, "bbox": [114, 392, 12, 38], "area": 284}, {"id": 6195118, "category_id": 1, "iscrowd": 0, "bbox": [78, 378, 19, 52], "area": 705}, {"id": 4734283, "category_id": 1, "iscrowd": 0, "bbox": [299, 335, 35, 33], "area": 672}, {"id": 4605536, "category_id": 1, "iscrowd": 0, "bbox": [121, 390, 7, 21], "area": 45}, {"id": 4010297, "category_id": 1, "iscrowd": 0, "bbox": [297, 161, 25, 21], "area": 382}, {"id": 6507353, "category_id": 1, "iscrowd": 0, "bbox": [174, 170, 30, 23], "area": 579}, {"id": 4341325, "category_id": 1, "iscrowd": 0, "bbox": [102, 398, 13, 32], "area": 318}, {"id": 5989276, "category_id": 1, "iscrowd": 0, "bbox": [91, 389, 13, 34], "area": 265}, {"id": 3156032, "category_id": 6, "iscrowd": 0, "bbox": [503, 316, 63, 70], "area": 3718}, {"id": 4669509, "category_id": 6, "iscrowd": 0, "bbox": [568, 317, 44, 88], "area": 3277}, {"id": 4207751, "category_id": 6, "iscrowd": 0, "bbox": [126, 91, 398, 444], "area": 144843}, {"id": 7105146, "category_id": 149, "iscrowd": 0, "bbox": [0, 338, 612, 274], "area": 82261}, {"id": 3096635, "category_id": 184, "iscrowd": 0, "bbox": [0, 117, 612, 267], "area": 38145}, {"id": 10396842, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 612, 165], "area": 59563}, {"id": 5856362, "category_id": 197, "iscrowd": 0, "bbox": [0, 50, 612, 406], "area": 36923}], "file_name": "000000001584.png", "image_id": 1584}, {"segments_info": [{"id": 2172198, "category_id": 17, "iscrowd": 0, "bbox": [0, 14, 640, 294], "area": 143933}, {"id": 6908272, "category_id": 76, "iscrowd": 0, "bbox": [61, 368, 509, 106], "area": 45121}, {"id": 7174525, "category_id": 195, "iscrowd": 0, "bbox": [0, 358, 75, 122], "area": 6465}, {"id": 14737887, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 90], "area": 40567}], "file_name": "000000001675.png", "image_id": 1675}, {"segments_info": [{"id": 4738412, "category_id": 1, "iscrowd": 0, "bbox": [36, 626, 5, 7], "area": 21}, {"id": 4143938, "category_id": 1, "iscrowd": 0, "bbox": [16, 615, 6, 13], "area": 46}, {"id": 5264481, "category_id": 1, "iscrowd": 0, "bbox": [21, 617, 7, 11], "area": 43}, {"id": 2568241, "category_id": 1, "iscrowd": 0, "bbox": [4, 616, 8, 10], "area": 45}, {"id": 3090503, "category_id": 1, "iscrowd": 0, "bbox": [12, 616, 4, 12], "area": 36}, {"id": 6971996, "category_id": 5, "iscrowd": 0, "bbox": [150, 9, 74, 77], "area": 1464}, {"id": 7630186, "category_id": 5, "iscrowd": 0, "bbox": [285, 141, 48, 42], "area": 569}, {"id": 7499631, "category_id": 95, "iscrowd": 0, "bbox": [0, 421, 427, 190], "area": 47957}, {"id": 8618878, "category_id": 155, "iscrowd": 0, "bbox": [118, 626, 309, 14], "area": 2556}, {"id": 4606279, "category_id": 184, "iscrowd": 0, "bbox": [0, 587, 377, 53], "area": 4259}, {"id": 15197154, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 625], "area": 210014}, {"id": 6448230, "category_id": 197, "iscrowd": 0, "bbox": [0, 592, 427, 48], "area": 6115}], "file_name": "000000001761.png", "image_id": 1761}, {"segments_info": [{"id": 5065804, "category_id": 24, "iscrowd": 0, "bbox": [178, 1, 462, 424], "area": 89122}, {"id": 8092282, "category_id": 24, "iscrowd": 0, "bbox": [0, 1, 638, 424], "area": 120106}, {"id": 11644848, "category_id": 193, "iscrowd": 0, "bbox": [0, 240, 640, 185], "area": 52443}], "file_name": "000000001818.png", "image_id": 1818}, {"segments_info": [{"id": 2698543, "category_id": 62, "iscrowd": 0, "bbox": [109, 250, 118, 159], "area": 9943}, {"id": 592651, "category_id": 62, "iscrowd": 0, "bbox": [0, 299, 35, 109], "area": 2281}, {"id": 6577250, "category_id": 65, "iscrowd": 0, "bbox": [259, 195, 356, 219], "area": 45475}, {"id": 5922667, "category_id": 67, "iscrowd": 0, "bbox": [0, 251, 154, 168], "area": 9918}, {"id": 11779782, "category_id": 112, "iscrowd": 0, "bbox": [266, 0, 128, 247], "area": 28045}, {"id": 9804703, "category_id": 175, "iscrowd": 0, "bbox": [133, 0, 130, 259], "area": 28445}, {"id": 10397096, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 114, 267], "area": 26238}, {"id": 12438752, "category_id": 190, "iscrowd": 0, "bbox": [271, 223, 86, 44], "area": 1865}, {"id": 6905191, "category_id": 199, "iscrowd": 0, "bbox": [32, 0, 608, 419], "area": 78092}, {"id": 1710112, "category_id": 200, "iscrowd": 0, "bbox": [0, 290, 610, 129], "area": 36141}], "file_name": "000000001993.png", "image_id": 1993}, {"segments_info": [{"id": 5918038, "category_id": 1, "iscrowd": 0, "bbox": [9, 52, 24, 24], "area": 361}, {"id": 9403257, "category_id": 1, "iscrowd": 0, "bbox": [313, 190, 65, 66], "area": 2221}, {"id": 6247770, "category_id": 1, "iscrowd": 0, "bbox": [6, 253, 45, 108], "area": 2009}, {"id": 8282729, "category_id": 6, "iscrowd": 0, "bbox": [46, 81, 563, 345], "area": 165533}, {"id": 5472930, "category_id": 10, "iscrowd": 0, "bbox": [122, 65, 6, 11], "area": 52}, {"id": 7104608, "category_id": 10, "iscrowd": 0, "bbox": [56, 0, 13, 31], "area": 386}, {"id": 8806739, "category_id": 32, "iscrowd": 0, "bbox": [335, 220, 13, 14], "area": 83}, {"id": 7164241, "category_id": 32, "iscrowd": 0, "bbox": [27, 277, 5, 27], "area": 76}, {"id": 13289674, "category_id": 149, "iscrowd": 0, "bbox": [0, 323, 640, 157], "area": 42407}, {"id": 10066593, "category_id": 151, "iscrowd": 0, "bbox": [464, 15, 176, 74], "area": 5676}, {"id": 5264215, "category_id": 175, "iscrowd": 0, "bbox": [0, 232, 52, 92], "area": 2076}, {"id": 7106167, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 400], "area": 40404}, {"id": 6841711, "category_id": 185, "iscrowd": 0, "bbox": [0, 52, 640, 79], "area": 4993}, {"id": 15856114, "category_id": 187, "iscrowd": 0, "bbox": [502, 0, 138, 43], "area": 3001}, {"id": 8556444, "category_id": 191, "iscrowd": 0, "bbox": [138, 371, 502, 96], "area": 9486}, {"id": 6973814, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 112], "area": 16099}], "file_name": "000000002006.png", "image_id": 2006}, {"segments_info": [{"id": 3639429, "category_id": 51, "iscrowd": 0, "bbox": [0, 71, 639, 350], "area": 154099}, {"id": 1471850, "category_id": 53, "iscrowd": 0, "bbox": [96, 94, 244, 232], "area": 39935}], "file_name": "000000002149.png", "image_id": 2149}, {"segments_info": [{"id": 5784894, "category_id": 1, "iscrowd": 0, "bbox": [284, 275, 182, 170], "area": 10858}, {"id": 5919829, "category_id": 1, "iscrowd": 0, "bbox": [175, 0, 64, 120], "area": 3395}, {"id": 9335941, "category_id": 1, "iscrowd": 0, "bbox": [372, 208, 62, 197], "area": 4737}, {"id": 6245964, "category_id": 1, "iscrowd": 0, "bbox": [280, 302, 98, 135], "area": 4837}, {"id": 4473413, "category_id": 39, "iscrowd": 0, "bbox": [373, 184, 86, 53], "area": 462}, {"id": 3692098, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 328], "area": 163280}, {"id": 5136513, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 119052}], "file_name": "000000002153.png", "image_id": 2153}, {"segments_info": [{"id": 6052710, "category_id": 46, "iscrowd": 0, "bbox": [244, 48, 56, 131], "area": 1352}, {"id": 5919607, "category_id": 46, "iscrowd": 0, "bbox": [92, 88, 65, 83], "area": 3630}, {"id": 5721971, "category_id": 46, "iscrowd": 0, "bbox": [163, 68, 71, 108], "area": 4036}, {"id": 5261667, "category_id": 46, "iscrowd": 0, "bbox": [140, 28, 61, 141], "area": 3694}, {"id": 4669776, "category_id": 46, "iscrowd": 0, "bbox": [0, 70, 51, 63], "area": 2517}, {"id": 6775145, "category_id": 46, "iscrowd": 0, "bbox": [231, 53, 61, 148], "area": 4931}, {"id": 4932681, "category_id": 46, "iscrowd": 0, "bbox": [114, 15, 53, 77], "area": 2111}, {"id": 6050664, "category_id": 46, "iscrowd": 0, "bbox": [51, 61, 60, 94], "area": 1367}, {"id": 4998986, "category_id": 46, "iscrowd": 0, "bbox": [47, 17, 67, 144], "area": 4890}, {"id": 3357256, "category_id": 47, "iscrowd": 0, "bbox": [491, 167, 65, 66], "area": 2786}, {"id": 7762551, "category_id": 47, "iscrowd": 0, "bbox": [4, 120, 59, 95], "area": 4037}, {"id": 6840439, "category_id": 49, "iscrowd": 0, "bbox": [214, 286, 115, 116], "area": 3405}, {"id": 8882825, "category_id": 49, "iscrowd": 0, "bbox": [404, 212, 111, 71], "area": 1921}, {"id": 8224410, "category_id": 49, "iscrowd": 0, "bbox": [216, 311, 193, 111], "area": 4544}, {"id": 8026251, "category_id": 61, "iscrowd": 0, "bbox": [16, 174, 253, 192], "area": 40885}, {"id": 4803701, "category_id": 67, "iscrowd": 0, "bbox": [2, 34, 638, 388], "area": 153510}, {"id": 858124, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 98], "area": 29207}, {"id": 1907568, "category_id": 189, "iscrowd": 0, "bbox": [0, 129, 640, 298], "area": 4073}], "file_name": "000000002157.png", "image_id": 2157}, {"segments_info": [{"id": 4539470, "category_id": 1, "iscrowd": 0, "bbox": [284, 152, 98, 120], "area": 5647}, {"id": 12429450, "category_id": 42, "iscrowd": 0, "bbox": [265, 251, 87, 45], "area": 1502}, {"id": 9086350, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 265869}], "file_name": "000000002261.png", "image_id": 2261}, {"segments_info": [{"id": 11119017, "category_id": 1, "iscrowd": 0, "bbox": [70, 190, 64, 111], "area": 4287}, {"id": 8882055, "category_id": 1, "iscrowd": 0, "bbox": [205, 187, 65, 101], "area": 4015}, {"id": 10790052, "category_id": 1, "iscrowd": 0, "bbox": [60, 33, 53, 106], "area": 2596}, {"id": 11316396, "category_id": 1, "iscrowd": 0, "bbox": [323, 129, 38, 72], "area": 1910}, {"id": 5921370, "category_id": 1, "iscrowd": 0, "bbox": [140, 191, 72, 107], "area": 4654}, {"id": 11711154, "category_id": 1, "iscrowd": 0, "bbox": [431, 134, 43, 142], "area": 3515}, {"id": 8816262, "category_id": 1, "iscrowd": 0, "bbox": [284, 118, 42, 109], "area": 2461}, {"id": 11579568, "category_id": 1, "iscrowd": 0, "bbox": [100, 80, 47, 74], "area": 1768}, {"id": 5395026, "category_id": 1, "iscrowd": 0, "bbox": [258, 194, 72, 93], "area": 4346}, {"id": 13553358, "category_id": 1, "iscrowd": 0, "bbox": [332, 132, 66, 116], "area": 3155}, {"id": 5789784, "category_id": 1, "iscrowd": 0, "bbox": [328, 190, 63, 95], "area": 4006}, {"id": 4539717, "category_id": 1, "iscrowd": 0, "bbox": [387, 194, 63, 98], "area": 3456}, {"id": 11776947, "category_id": 1, "iscrowd": 0, "bbox": [394, 128, 41, 90], "area": 2216}, {"id": 7566195, "category_id": 1, "iscrowd": 1, "bbox": [0, 18, 500, 264], "area": 74497}, {"id": 9671571, "category_id": 32, "iscrowd": 0, "bbox": [231, 58, 6, 12], "area": 42}, {"id": 3487029, "category_id": 32, "iscrowd": 0, "bbox": [410, 62, 7, 14], "area": 63}, {"id": 5723991, "category_id": 32, "iscrowd": 0, "bbox": [102, 226, 7, 16], "area": 64}, {"id": 3487035, "category_id": 32, "iscrowd": 0, "bbox": [280, 47, 12, 13], "area": 50}, {"id": 3026478, "category_id": 32, "iscrowd": 0, "bbox": [234, 221, 10, 14], "area": 35}, {"id": 1973790, "category_id": 32, "iscrowd": 0, "bbox": [175, 229, 6, 12], "area": 34}, {"id": 1184274, "category_id": 32, "iscrowd": 0, "bbox": [186, 61, 6, 9], "area": 34}, {"id": 1250067, "category_id": 32, "iscrowd": 0, "bbox": [293, 228, 6, 8], "area": 27}, {"id": 1842204, "category_id": 32, "iscrowd": 0, "bbox": [331, 59, 6, 14], "area": 48}, {"id": 4210752, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 500, 296], "area": 22254}], "file_name": "000000002299.png", "image_id": 2299}, {"segments_info": [{"id": 2106159, "category_id": 1, "iscrowd": 0, "bbox": [103, 0, 102, 121], "area": 9177}, {"id": 657414, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 81, 136], "area": 8879}, {"id": 4473415, "category_id": 46, "iscrowd": 0, "bbox": [308, 1, 122, 209], "area": 13365}, {"id": 10328984, "category_id": 47, "iscrowd": 0, "bbox": [107, 391, 128, 176], "area": 10513}, {"id": 5595249, "category_id": 47, "iscrowd": 0, "bbox": [358, 416, 99, 217], "area": 17761}, {"id": 7171178, "category_id": 49, "iscrowd": 0, "bbox": [181, 117, 63, 76], "area": 1225}, {"id": 9408659, "category_id": 50, "iscrowd": 0, "bbox": [44, 378, 139, 91], "area": 2826}, {"id": 3489094, "category_id": 50, "iscrowd": 0, "bbox": [438, 480, 17, 17], "area": 144}, {"id": 8159888, "category_id": 67, "iscrowd": 0, "bbox": [5, 6, 452, 620], "area": 195997}, {"id": 6910855, "category_id": 189, "iscrowd": 0, "bbox": [0, 135, 83, 505], "area": 5672}, {"id": 6708558, "category_id": 190, "iscrowd": 0, "bbox": [71, 43, 46, 77], "area": 2103}], "file_name": "000000002431.png", "image_id": 2431}, {"segments_info": [{"id": 8419451, "category_id": 1, "iscrowd": 0, "bbox": [119, 341, 24, 44], "area": 747}, {"id": 11444648, "category_id": 1, "iscrowd": 0, "bbox": [437, 281, 61, 99], "area": 3385}, {"id": 9471625, "category_id": 1, "iscrowd": 0, "bbox": [33, 329, 25, 26], "area": 349}, {"id": 9997963, "category_id": 1, "iscrowd": 0, "bbox": [244, 93, 130, 151], "area": 6358}, {"id": 12628657, "category_id": 35, "iscrowd": 0, "bbox": [285, 217, 43, 50], "area": 861}, {"id": 16381943, "category_id": 159, "iscrowd": 0, "bbox": [0, 344, 640, 83], "area": 35760}, {"id": 3618868, "category_id": 184, "iscrowd": 0, "bbox": [0, 150, 618, 246], "area": 49532}, {"id": 11759171, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 386], "area": 176022}], "file_name": "000000002473.png", "image_id": 2473}, {"segments_info": [{"id": 3487018, "category_id": 1, "iscrowd": 0, "bbox": [183, 305, 101, 168], "area": 5321}, {"id": 9670538, "category_id": 35, "iscrowd": 0, "bbox": [206, 445, 60, 47], "area": 369}, {"id": 13815752, "category_id": 159, "iscrowd": 0, "bbox": [0, 326, 480, 314], "area": 111736}, {"id": 6315869, "category_id": 184, "iscrowd": 0, "bbox": [16, 301, 393, 192], "area": 13980}, {"id": 11107403, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 348], "area": 158991}, {"id": 4341562, "category_id": 198, "iscrowd": 0, "bbox": [0, 335, 480, 186], "area": 16579}], "file_name": "000000002532.png", "image_id": 2532}, {"segments_info": [{"id": 4884632, "category_id": 52, "iscrowd": 0, "bbox": [52, 1, 398, 357], "area": 45349}, {"id": 3821416, "category_id": 60, "iscrowd": 0, "bbox": [172, 11, 245, 255], "area": 47400}, {"id": 1516330, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 29149}], "file_name": "000000002587.png", "image_id": 2587}, {"segments_info": [{"id": 11185060, "category_id": 47, "iscrowd": 0, "bbox": [223, 35, 210, 213], "area": 32701}, {"id": 3356725, "category_id": 49, "iscrowd": 0, "bbox": [29, 217, 588, 98], "area": 21462}, {"id": 8421750, "category_id": 67, "iscrowd": 0, "bbox": [1, 1, 637, 360], "area": 169410}], "file_name": "000000002592.png", "image_id": 2592}, {"segments_info": [{"id": 3424850, "category_id": 1, "iscrowd": 0, "bbox": [316, 56, 322, 384], "area": 35969}, {"id": 8690334, "category_id": 1, "iscrowd": 0, "bbox": [184, 122, 132, 67], "area": 3248}, {"id": 3887979, "category_id": 1, "iscrowd": 0, "bbox": [26, 219, 187, 331], "area": 14529}, {"id": 3297906, "category_id": 1, "iscrowd": 0, "bbox": [281, 99, 174, 245], "area": 10289}, {"id": 5400182, "category_id": 1, "iscrowd": 0, "bbox": [402, 7, 205, 337], "area": 22254}, {"id": 8817049, "category_id": 1, "iscrowd": 0, "bbox": [162, 134, 354, 413], "area": 46851}, {"id": 1448223, "category_id": 31, "iscrowd": 0, "bbox": [503, 256, 40, 58], "area": 1391}, {"id": 4354177, "category_id": 44, "iscrowd": 0, "bbox": [175, 236, 11, 16], "area": 66}, {"id": 2369107, "category_id": 44, "iscrowd": 0, "bbox": [138, 264, 38, 47], "area": 655}, {"id": 2172008, "category_id": 44, "iscrowd": 0, "bbox": [160, 249, 19, 36], "area": 269}, {"id": 2502708, "category_id": 44, "iscrowd": 0, "bbox": [168, 238, 16, 27], "area": 162}, {"id": 2369601, "category_id": 44, "iscrowd": 0, "bbox": [122, 273, 58, 63], "area": 1140}, {"id": 2435633, "category_id": 44, "iscrowd": 0, "bbox": [141, 256, 37, 35], "area": 267}, {"id": 1844265, "category_id": 44, "iscrowd": 0, "bbox": [155, 247, 23, 41], "area": 162}, {"id": 1976130, "category_id": 44, "iscrowd": 0, "bbox": [106, 279, 45, 74], "area": 929}, {"id": 15462643, "category_id": 46, "iscrowd": 0, "bbox": [284, 148, 14, 7], "area": 84}, {"id": 8035483, "category_id": 46, "iscrowd": 0, "bbox": [79, 190, 30, 37], "area": 343}, {"id": 4282474, "category_id": 47, "iscrowd": 0, "bbox": [367, 200, 20, 19], "area": 255}, {"id": 8360865, "category_id": 47, "iscrowd": 0, "bbox": [141, 316, 34, 37], "area": 816}, {"id": 2965598, "category_id": 107, "iscrowd": 0, "bbox": [88, 302, 250, 253], "area": 36870}, {"id": 11915740, "category_id": 112, "iscrowd": 0, "bbox": [215, 0, 267, 152], "area": 13588}, {"id": 3304610, "category_id": 118, "iscrowd": 0, "bbox": [137, 240, 503, 315], "area": 42867}, {"id": 4358048, "category_id": 156, "iscrowd": 0, "bbox": [0, 136, 171, 169], "area": 12877}, {"id": 1450544, "category_id": 177, "iscrowd": 0, "bbox": [93, 0, 547, 555], "area": 4121}, {"id": 5534313, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 557, 555], "area": 73794}], "file_name": "000000002685.png", "image_id": 2685}, {"segments_info": [{"id": 9664623, "category_id": 9, "iscrowd": 0, "bbox": [247, 189, 62, 17], "area": 637}, {"id": 9998476, "category_id": 9, "iscrowd": 0, "bbox": [24, 197, 28, 18], "area": 252}, {"id": 8812660, "category_id": 9, "iscrowd": 0, "bbox": [464, 147, 36, 69], "area": 1180}, {"id": 8485240, "category_id": 9, "iscrowd": 0, "bbox": [112, 191, 31, 24], "area": 277}, {"id": 12560800, "category_id": 16, "iscrowd": 0, "bbox": [171, 159, 13, 7], "area": 44}, {"id": 10990778, "category_id": 16, "iscrowd": 0, "bbox": [270, 242, 11, 13], "area": 43}, {"id": 9808298, "category_id": 16, "iscrowd": 0, "bbox": [136, 237, 9, 14], "area": 48}, {"id": 5528669, "category_id": 178, "iscrowd": 0, "bbox": [0, 204, 112, 23], "area": 1880}, {"id": 12492689, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 198], "area": 89366}, {"id": 7692887, "category_id": 192, "iscrowd": 0, "bbox": [0, 193, 251, 21], "area": 2813}, {"id": 2974829, "category_id": 193, "iscrowd": 0, "bbox": [0, 205, 500, 170], "area": 80047}, {"id": 13157057, "category_id": 197, "iscrowd": 0, "bbox": [409, 194, 63, 20], "area": 886}], "file_name": "000000002923.png", "image_id": 2923}, {"segments_info": [{"id": 3487029, "category_id": 1, "iscrowd": 0, "bbox": [4, 16, 362, 620], "area": 125889}, {"id": 10066329, "category_id": 70, "iscrowd": 0, "bbox": [256, 248, 187, 368], "area": 36542}, {"id": 9013641, "category_id": 81, "iscrowd": 0, "bbox": [0, 163, 61, 61], "area": 3026}, {"id": 7895160, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 443, 263], "area": 19166}, {"id": 12632256, "category_id": 181, "iscrowd": 0, "bbox": [356, 0, 87, 37], "area": 2880}, {"id": 3421236, "category_id": 190, "iscrowd": 0, "bbox": [258, 517, 185, 105], "area": 5056}, {"id": 13224393, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 443, 594], "area": 73269}], "file_name": "000000003156.png", "image_id": 3156}, {"segments_info": [{"id": 1644569, "category_id": 1, "iscrowd": 0, "bbox": [246, 320, 11, 37], "area": 253}, {"id": 5196619, "category_id": 1, "iscrowd": 0, "bbox": [271, 314, 18, 44], "area": 300}, {"id": 2763048, "category_id": 1, "iscrowd": 0, "bbox": [235, 318, 10, 38], "area": 260}, {"id": 2105119, "category_id": 1, "iscrowd": 0, "bbox": [296, 314, 22, 38], "area": 290}, {"id": 1447190, "category_id": 1, "iscrowd": 0, "bbox": [243, 315, 8, 41], "area": 192}, {"id": 1710619, "category_id": 1, "iscrowd": 0, "bbox": [261, 312, 12, 45], "area": 298}, {"id": 1643284, "category_id": 27, "iscrowd": 0, "bbox": [272, 319, 10, 18], "area": 133}, {"id": 1250068, "category_id": 27, "iscrowd": 0, "bbox": [307, 332, 10, 17], "area": 133}, {"id": 1644311, "category_id": 27, "iscrowd": 0, "bbox": [258, 343, 6, 11], "area": 51}, {"id": 3033670, "category_id": 35, "iscrowd": 0, "bbox": [276, 353, 15, 5], "area": 34}, {"id": 12696501, "category_id": 159, "iscrowd": 0, "bbox": [0, 86, 640, 277], "area": 119151}, {"id": 10642474, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 123], "area": 34955}, {"id": 9668476, "category_id": 192, "iscrowd": 0, "bbox": [0, 2, 608, 237], "area": 76148}], "file_name": "000000003255.png", "image_id": 3255}, {"segments_info": [{"id": 9872311, "category_id": 51, "iscrowd": 0, "bbox": [12, 8, 592, 575], "area": 237060}, {"id": 4096610, "category_id": 56, "iscrowd": 0, "bbox": [75, 175, 183, 186], "area": 18742}, {"id": 3633221, "category_id": 56, "iscrowd": 0, "bbox": [125, 68, 138, 155], "area": 12427}, {"id": 2957123, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 105909}], "file_name": "000000003501.png", "image_id": 3501}, {"segments_info": [{"id": 2829099, "category_id": 1, "iscrowd": 0, "bbox": [153, 1, 267, 297], "area": 50098}, {"id": 3686464, "category_id": 41, "iscrowd": 0, "bbox": [187, 262, 181, 109], "area": 11681}, {"id": 4220517, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 108227}], "file_name": "000000003553.png", "image_id": 3553}, {"segments_info": [{"id": 13943454, "category_id": 47, "iscrowd": 0, "bbox": [568, 20, 72, 220], "area": 12442}, {"id": 2782095, "category_id": 52, "iscrowd": 0, "bbox": [61, 0, 492, 349], "area": 132891}, {"id": 6317129, "category_id": 76, "iscrowd": 0, "bbox": [0, 163, 115, 44], "area": 3580}, {"id": 5481632, "category_id": 122, "iscrowd": 0, "bbox": [216, 163, 62, 26], "area": 647}, {"id": 8299705, "category_id": 189, "iscrowd": 0, "bbox": [0, 213, 640, 171], "area": 54895}, {"id": 15328474, "category_id": 195, "iscrowd": 0, "bbox": [586, 161, 54, 98], "area": 3394}, {"id": 6209936, "category_id": 199, "iscrowd": 0, "bbox": [0, 90, 231, 95], "area": 10653}], "file_name": "000000003661.png", "image_id": 3661}, {"segments_info": [{"id": 7240861, "category_id": 47, "iscrowd": 0, "bbox": [106, 0, 77, 55], "area": 3299}, {"id": 6780294, "category_id": 48, "iscrowd": 0, "bbox": [138, 44, 286, 49], "area": 2037}, {"id": 5989755, "category_id": 50, "iscrowd": 0, "bbox": [145, 46, 277, 42], "area": 547}, {"id": 1532029, "category_id": 56, "iscrowd": 0, "bbox": [171, 186, 96, 71], "area": 2691}, {"id": 406075, "category_id": 56, "iscrowd": 0, "bbox": [121, 206, 57, 64], "area": 2244}, {"id": 1135719, "category_id": 56, "iscrowd": 0, "bbox": [50, 162, 53, 44], "area": 1038}, {"id": 477359, "category_id": 57, "iscrowd": 0, "bbox": [171, 83, 34, 53], "area": 1084}, {"id": 1136558, "category_id": 57, "iscrowd": 0, "bbox": [212, 136, 67, 60], "area": 2759}, {"id": 407707, "category_id": 57, "iscrowd": 0, "bbox": [259, 190, 37, 71], "area": 1472}, {"id": 208029, "category_id": 57, "iscrowd": 0, "bbox": [191, 252, 68, 67], "area": 2643}, {"id": 403085, "category_id": 57, "iscrowd": 0, "bbox": [109, 86, 53, 37], "area": 1234}, {"id": 4155031, "category_id": 67, "iscrowd": 0, "bbox": [2, 2, 498, 366], "area": 158939}, {"id": 2046570, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 6531}], "file_name": "000000003845.png", "image_id": 3845}, {"segments_info": [{"id": 9997955, "category_id": 1, "iscrowd": 0, "bbox": [31, 75, 72, 241], "area": 10914}, {"id": 2238267, "category_id": 1, "iscrowd": 0, "bbox": [152, 83, 53, 142], "area": 3955}, {"id": 4477287, "category_id": 1, "iscrowd": 0, "bbox": [94, 90, 62, 78], "area": 2230}, {"id": 3096920, "category_id": 1, "iscrowd": 0, "bbox": [296, 132, 30, 75], "area": 1191}, {"id": 2635596, "category_id": 1, "iscrowd": 0, "bbox": [203, 106, 30, 127], "area": 2674}, {"id": 9866396, "category_id": 1, "iscrowd": 0, "bbox": [62, 149, 146, 317], "area": 20442}, {"id": 2970771, "category_id": 1, "iscrowd": 0, "bbox": [259, 142, 19, 21], "area": 203}, {"id": 2705808, "category_id": 46, "iscrowd": 0, "bbox": [363, 160, 11, 16], "area": 90}, {"id": 4736855, "category_id": 46, "iscrowd": 0, "bbox": [220, 281, 18, 28], "area": 246}, {"id": 2772102, "category_id": 46, "iscrowd": 0, "bbox": [353, 158, 10, 20], "area": 136}, {"id": 4479867, "category_id": 47, "iscrowd": 0, "bbox": [154, 127, 10, 13], "area": 101}, {"id": 5657176, "category_id": 63, "iscrowd": 0, "bbox": [132, 226, 243, 128], "area": 10994}, {"id": 10059884, "category_id": 75, "iscrowd": 0, "bbox": [163, 303, 50, 8], "area": 325}, {"id": 10260878, "category_id": 75, "iscrowd": 0, "bbox": [186, 210, 31, 13], "area": 226}, {"id": 2763583, "category_id": 118, "iscrowd": 0, "bbox": [0, 110, 375, 390], "area": 27902}, {"id": 5858665, "category_id": 181, "iscrowd": 0, "bbox": [0, 67, 39, 87], "area": 1370}, {"id": 4343370, "category_id": 185, "iscrowd": 0, "bbox": [0, 23, 42, 97], "area": 1555}, {"id": 4874096, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 375, 110], "area": 31666}, {"id": 3293532, "category_id": 189, "iscrowd": 0, "bbox": [222, 165, 153, 65], "area": 6560}, {"id": 6060953, "category_id": 199, "iscrowd": 0, "bbox": [0, 36, 375, 211], "area": 16870}, {"id": 7366749, "category_id": 200, "iscrowd": 0, "bbox": [56, 399, 319, 101], "area": 25262}], "file_name": "000000003934.png", "image_id": 3934}, {"segments_info": [{"id": 2306376, "category_id": 1, "iscrowd": 0, "bbox": [576, 107, 60, 208], "area": 5447}, {"id": 460811, "category_id": 1, "iscrowd": 0, "bbox": [552, 150, 88, 275], "area": 11843}, {"id": 527637, "category_id": 1, "iscrowd": 0, "bbox": [516, 142, 21, 39], "area": 500}, {"id": 856087, "category_id": 1, "iscrowd": 0, "bbox": [0, 110, 71, 160], "area": 6213}, {"id": 988448, "category_id": 1, "iscrowd": 0, "bbox": [347, 137, 35, 62], "area": 1253}, {"id": 197638, "category_id": 1, "iscrowd": 0, "bbox": [275, 186, 36, 84], "area": 1261}, {"id": 7105139, "category_id": 1, "iscrowd": 0, "bbox": [44, 45, 277, 374], "area": 51728}, {"id": 922395, "category_id": 1, "iscrowd": 0, "bbox": [237, 130, 29, 76], "area": 1485}, {"id": 395018, "category_id": 1, "iscrowd": 0, "bbox": [258, 165, 18, 38], "area": 472}, {"id": 2040616, "category_id": 1, "iscrowd": 0, "bbox": [191, 119, 40, 136], "area": 3134}, {"id": 4801866, "category_id": 1, "iscrowd": 0, "bbox": [237, 46, 347, 374], "area": 65727}, {"id": 461071, "category_id": 1, "iscrowd": 0, "bbox": [303, 123, 31, 147], "area": 3060}, {"id": 2503240, "category_id": 1, "iscrowd": 0, "bbox": [470, 110, 57, 70], "area": 1917}, {"id": 1513496, "category_id": 32, "iscrowd": 0, "bbox": [323, 147, 7, 17], "area": 37}, {"id": 1713202, "category_id": 32, "iscrowd": 0, "bbox": [20, 149, 16, 70], "area": 267}, {"id": 8435664, "category_id": 32, "iscrowd": 0, "bbox": [397, 192, 38, 169], "area": 4013}, {"id": 5268342, "category_id": 46, "iscrowd": 0, "bbox": [221, 244, 14, 34], "area": 184}, {"id": 5731469, "category_id": 46, "iscrowd": 0, "bbox": [225, 255, 15, 26], "area": 223}, {"id": 3953511, "category_id": 46, "iscrowd": 0, "bbox": [22, 248, 14, 31], "area": 278}, {"id": 3492705, "category_id": 46, "iscrowd": 0, "bbox": [242, 199, 8, 16], "area": 67}, {"id": 462879, "category_id": 62, "iscrowd": 0, "bbox": [290, 171, 11, 24], "area": 141}, {"id": 1186599, "category_id": 62, "iscrowd": 0, "bbox": [256, 232, 40, 38], "area": 865}, {"id": 461586, "category_id": 62, "iscrowd": 0, "bbox": [278, 183, 20, 31], "area": 379}, {"id": 2904955, "category_id": 67, "iscrowd": 0, "bbox": [335, 184, 15, 19], "area": 121}, {"id": 7569806, "category_id": 67, "iscrowd": 0, "bbox": [0, 253, 56, 128], "area": 5062}, {"id": 8162975, "category_id": 67, "iscrowd": 0, "bbox": [211, 247, 104, 85], "area": 4866}, {"id": 1449773, "category_id": 112, "iscrowd": 0, "bbox": [62, 93, 39, 51], "area": 1469}, {"id": 930899, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 54], "area": 28665}, {"id": 2171170, "category_id": 190, "iscrowd": 0, "bbox": [0, 346, 367, 79], "area": 3620}, {"id": 14670552, "category_id": 195, "iscrowd": 0, "bbox": [335, 334, 183, 91], "area": 6205}, {"id": 331296, "category_id": 199, "iscrowd": 0, "bbox": [0, 28, 640, 151], "area": 42282}], "file_name": "000000004134.png", "image_id": 4134}, {"segments_info": [{"id": 9215908, "category_id": 1, "iscrowd": 0, "bbox": [1, 1, 424, 638], "area": 174729}, {"id": 1910308, "category_id": 32, "iscrowd": 0, "bbox": [177, 275, 96, 357], "area": 22476}, {"id": 789771, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 425, 427], "area": 73053}], "file_name": "000000004395.png", "image_id": 4395}, {"segments_info": [{"id": 5193049, "category_id": 62, "iscrowd": 0, "bbox": [4, 149, 150, 178], "area": 12855}, {"id": 7752776, "category_id": 63, "iscrowd": 0, "bbox": [202, 199, 296, 176], "area": 39928}, {"id": 4073512, "category_id": 72, "iscrowd": 0, "bbox": [190, 111, 72, 68], "area": 4531}, {"id": 3020832, "category_id": 156, "iscrowd": 0, "bbox": [145, 167, 153, 82], "area": 6819}, {"id": 7771293, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 341], "area": 83090}, {"id": 5325639, "category_id": 200, "iscrowd": 0, "bbox": [0, 235, 500, 140], "area": 25040}], "file_name": "000000004495.png", "image_id": 4495}, {"segments_info": [{"id": 6516604, "category_id": 1, "iscrowd": 0, "bbox": [212, 127, 192, 258], "area": 16892}, {"id": 11582145, "category_id": 42, "iscrowd": 0, "bbox": [258, 336, 282, 87], "area": 6475}], "file_name": "000000004765.png", "image_id": 4765}, {"segments_info": [{"id": 6383217, "category_id": 17, "iscrowd": 0, "bbox": [153, 114, 395, 364], "area": 85522}, {"id": 11186095, "category_id": 72, "iscrowd": 0, "bbox": [20, 2, 620, 350], "area": 141960}, {"id": 10857645, "category_id": 73, "iscrowd": 0, "bbox": [0, 192, 175, 283], "area": 37683}, {"id": 8895704, "category_id": 189, "iscrowd": 0, "bbox": [449, 414, 176, 66], "area": 3947}], "file_name": "000000004795.png", "image_id": 4795}, {"segments_info": [{"id": 4341325, "category_id": 1, "iscrowd": 0, "bbox": [297, 50, 58, 87], "area": 2742}, {"id": 2566189, "category_id": 1, "iscrowd": 0, "bbox": [51, 59, 84, 83], "area": 2979}, {"id": 2103837, "category_id": 1, "iscrowd": 0, "bbox": [355, 92, 162, 378], "area": 36882}, {"id": 10195367, "category_id": 1, "iscrowd": 0, "bbox": [226, 256, 127, 224], "area": 13830}, {"id": 6448002, "category_id": 1, "iscrowd": 0, "bbox": [425, 23, 44, 71], "area": 1519}, {"id": 10722729, "category_id": 1, "iscrowd": 0, "bbox": [171, 31, 79, 155], "area": 7921}, {"id": 5919587, "category_id": 1, "iscrowd": 0, "bbox": [209, 61, 89, 148], "area": 3431}, {"id": 4081297, "category_id": 1, "iscrowd": 0, "bbox": [435, 41, 71, 119], "area": 3721}, {"id": 7763074, "category_id": 1, "iscrowd": 0, "bbox": [77, 245, 114, 235], "area": 10576}, {"id": 2894634, "category_id": 1, "iscrowd": 0, "bbox": [11, 33, 58, 168], "area": 5106}, {"id": 1381658, "category_id": 1, "iscrowd": 0, "bbox": [119, 81, 69, 189], "area": 7189}, {"id": 1184021, "category_id": 1, "iscrowd": 0, "bbox": [41, 96, 107, 378], "area": 18535}, {"id": 5984609, "category_id": 1, "iscrowd": 0, "bbox": [215, 88, 120, 191], "area": 10136}, {"id": 2631465, "category_id": 1, "iscrowd": 1, "bbox": [523, 26, 117, 286], "area": 10072}, {"id": 3157033, "category_id": 2, "iscrowd": 0, "bbox": [500, 159, 46, 99], "area": 1776}, {"id": 65793, "category_id": 31, "iscrowd": 0, "bbox": [536, 275, 59, 72], "area": 2451}, {"id": 6775143, "category_id": 87, "iscrowd": 0, "bbox": [174, 205, 107, 238], "area": 5657}, {"id": 5195868, "category_id": 87, "iscrowd": 0, "bbox": [451, 334, 19, 58], "area": 372}, {"id": 7238528, "category_id": 171, "iscrowd": 0, "bbox": [209, 0, 255, 131], "area": 11321}, {"id": 2762270, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 640, 144], "area": 30722}, {"id": 2696993, "category_id": 191, "iscrowd": 0, "bbox": [0, 240, 580, 240], "area": 42166}, {"id": 3223858, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 219, 250], "area": 4624}], "file_name": "000000005001.png", "image_id": 5001}, {"segments_info": [{"id": 4673115, "category_id": 1, "iscrowd": 0, "bbox": [48, 224, 13, 24], "area": 255}, {"id": 6708569, "category_id": 1, "iscrowd": 0, "bbox": [191, 147, 54, 59], "area": 1478}, {"id": 4469040, "category_id": 1, "iscrowd": 0, "bbox": [596, 243, 18, 28], "area": 208}, {"id": 2565674, "category_id": 1, "iscrowd": 0, "bbox": [623, 217, 17, 144], "area": 1432}, {"id": 2694688, "category_id": 1, "iscrowd": 0, "bbox": [19, 221, 11, 27], "area": 202}, {"id": 7166252, "category_id": 1, "iscrowd": 0, "bbox": [10, 223, 12, 23], "area": 190}, {"id": 5450866, "category_id": 1, "iscrowd": 0, "bbox": [29, 226, 15, 21], "area": 194}, {"id": 12169385, "category_id": 3, "iscrowd": 0, "bbox": [593, 248, 11, 13], "area": 70}, {"id": 8950931, "category_id": 3, "iscrowd": 0, "bbox": [572, 248, 28, 19], "area": 412}, {"id": 6511971, "category_id": 6, "iscrowd": 0, "bbox": [99, 20, 476, 352], "area": 130331}, {"id": 6382962, "category_id": 128, "iscrowd": 0, "bbox": [0, 96, 640, 159], "area": 14785}, {"id": 6186101, "category_id": 149, "iscrowd": 0, "bbox": [0, 249, 640, 176], "area": 62094}, {"id": 3488576, "category_id": 184, "iscrowd": 0, "bbox": [47, 207, 59, 41], "area": 1565}, {"id": 15721950, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 192], "area": 53722}, {"id": 5527167, "category_id": 197, "iscrowd": 0, "bbox": [0, 207, 107, 71], "area": 3770}], "file_name": "000000005037.png", "image_id": 5037}, {"segments_info": [{"id": 3884104, "category_id": 1, "iscrowd": 0, "bbox": [159, 310, 165, 188], "area": 17584}, {"id": 1973018, "category_id": 77, "iscrowd": 0, "bbox": [231, 371, 12, 17], "area": 196}, {"id": 4812424, "category_id": 118, "iscrowd": 0, "bbox": [11, 349, 469, 291], "area": 53702}, {"id": 5465719, "category_id": 133, "iscrowd": 0, "bbox": [87, 49, 393, 500], "area": 101678}, {"id": 10988721, "category_id": 186, "iscrowd": 0, "bbox": [407, 0, 73, 54], "area": 3317}, {"id": 1250846, "category_id": 188, "iscrowd": 0, "bbox": [410, 229, 70, 123], "area": 7849}, {"id": 6126469, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 528], "area": 111683}, {"id": 9934488, "category_id": 200, "iscrowd": 0, "bbox": [412, 360, 68, 58], "area": 3026}], "file_name": "000000005060.png", "image_id": 5060}, {"segments_info": [{"id": 3688540, "category_id": 1, "iscrowd": 0, "bbox": [224, 64, 37, 122], "area": 3046}, {"id": 1711654, "category_id": 1, "iscrowd": 0, "bbox": [289, 172, 117, 229], "area": 13441}, {"id": 3160912, "category_id": 1, "iscrowd": 0, "bbox": [360, 221, 127, 153], "area": 11201}, {"id": 7966359, "category_id": 1, "iscrowd": 0, "bbox": [2, 90, 217, 330], "area": 42733}, {"id": 2895929, "category_id": 1, "iscrowd": 0, "bbox": [378, 99, 203, 189], "area": 11348}, {"id": 2434628, "category_id": 1, "iscrowd": 0, "bbox": [139, 113, 109, 282], "area": 14265}, {"id": 6708815, "category_id": 42, "iscrowd": 0, "bbox": [461, 73, 103, 264], "area": 16318}, {"id": 3106707, "category_id": 42, "iscrowd": 0, "bbox": [239, 65, 97, 349], "area": 20977}, {"id": 5262666, "category_id": 44, "iscrowd": 0, "bbox": [369, 98, 20, 75], "area": 1278}, {"id": 1579288, "category_id": 112, "iscrowd": 0, "bbox": [177, 26, 164, 122], "area": 7415}, {"id": 4874076, "category_id": 130, "iscrowd": 0, "bbox": [138, 0, 282, 36], "area": 6797}, {"id": 4803917, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 52], "area": 11762}, {"id": 1645855, "category_id": 190, "iscrowd": 0, "bbox": [224, 354, 28, 61], "area": 899}, {"id": 6186085, "category_id": 199, "iscrowd": 0, "bbox": [0, 6, 640, 300], "area": 59465}], "file_name": "000000005193.png", "image_id": 5193}, {"segments_info": [{"id": 5536663, "category_id": 5, "iscrowd": 0, "bbox": [10, 106, 621, 183], "area": 40514}, {"id": 9806786, "category_id": 5, "iscrowd": 0, "bbox": [51, 249, 251, 28], "area": 2424}, {"id": 7046033, "category_id": 149, "iscrowd": 0, "bbox": [0, 327, 270, 22], "area": 1733}, {"id": 12366238, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 240], "area": 126081}, {"id": 7965586, "category_id": 191, "iscrowd": 0, "bbox": [0, 263, 640, 86], "area": 38399}, {"id": 7369332, "category_id": 192, "iscrowd": 0, "bbox": [0, 215, 640, 61], "area": 4754}, {"id": 5804199, "category_id": 193, "iscrowd": 0, "bbox": [0, 264, 640, 27], "area": 7559}, {"id": 7042178, "category_id": 197, "iscrowd": 0, "bbox": [601, 227, 39, 46], "area": 834}], "file_name": "000000005477.png", "image_id": 5477}, {"segments_info": [{"id": 7368816, "category_id": 70, "iscrowd": 0, "bbox": [35, 179, 240, 294], "area": 44578}, {"id": 1513239, "category_id": 168, "iscrowd": 0, "bbox": [196, 0, 137, 196], "area": 15326}, {"id": 2894892, "category_id": 190, "iscrowd": 0, "bbox": [12, 241, 239, 259], "area": 13170}, {"id": 4473924, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 333, 500], "area": 47506}], "file_name": "000000005503.png", "image_id": 5503}, {"segments_info": [{"id": 5920346, "category_id": 1, "iscrowd": 0, "bbox": [79, 117, 177, 333], "area": 28845}, {"id": 5463639, "category_id": 35, "iscrowd": 0, "bbox": [101, 404, 87, 38], "area": 1628}, {"id": 11448498, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 444, 640], "area": 253455}], "file_name": "000000005529.png", "image_id": 5529}, {"segments_info": [{"id": 2899294, "category_id": 1, "iscrowd": 0, "bbox": [186, 32, 12, 12], "area": 93}, {"id": 4021656, "category_id": 1, "iscrowd": 0, "bbox": [292, 63, 10, 41], "area": 256}, {"id": 3381477, "category_id": 1, "iscrowd": 0, "bbox": [132, 169, 68, 57], "area": 1785}, {"id": 4411760, "category_id": 1, "iscrowd": 0, "bbox": [66, 37, 10, 8], "area": 52}, {"id": 2306120, "category_id": 1, "iscrowd": 0, "bbox": [178, 26, 8, 18], "area": 94}, {"id": 3490641, "category_id": 1, "iscrowd": 0, "bbox": [147, 30, 8, 14], "area": 87}, {"id": 5279133, "category_id": 1, "iscrowd": 0, "bbox": [143, 70, 35, 90], "area": 1171}, {"id": 1649220, "category_id": 1, "iscrowd": 0, "bbox": [111, 37, 10, 6], "area": 36}, {"id": 5013965, "category_id": 1, "iscrowd": 0, "bbox": [272, 73, 23, 38], "area": 437}, {"id": 4345454, "category_id": 1, "iscrowd": 0, "bbox": [101, 28, 9, 15], "area": 96}, {"id": 4607074, "category_id": 1, "iscrowd": 0, "bbox": [136, 24, 11, 20], "area": 154}, {"id": 3685972, "category_id": 1, "iscrowd": 0, "bbox": [154, 31, 8, 13], "area": 75}, {"id": 4149888, "category_id": 1, "iscrowd": 0, "bbox": [302, 39, 10, 9], "area": 49}, {"id": 5856347, "category_id": 1, "iscrowd": 1, "bbox": [0, 0, 320, 240], "area": 30651}, {"id": 7436416, "category_id": 43, "iscrowd": 0, "bbox": [131, 91, 14, 13], "area": 129}, {"id": 2766401, "category_id": 92, "iscrowd": 0, "bbox": [0, 39, 320, 58], "area": 2505}, {"id": 9735544, "category_id": 145, "iscrowd": 0, "bbox": [0, 80, 320, 160], "area": 18560}, {"id": 1318958, "category_id": 161, "iscrowd": 0, "bbox": [192, 0, 26, 47], "area": 473}, {"id": 4274482, "category_id": 199, "iscrowd": 0, "bbox": [0, 53, 320, 49], "area": 3847}], "file_name": "000000005586.png", "image_id": 5586}, {"segments_info": [{"id": 659991, "category_id": 50, "iscrowd": 0, "bbox": [89, 96, 122, 146], "area": 6315}, {"id": 1594007, "category_id": 51, "iscrowd": 0, "bbox": [212, 138, 326, 223], "area": 59957}, {"id": 598861, "category_id": 51, "iscrowd": 0, "bbox": [123, 2, 252, 180], "area": 33855}, {"id": 1121309, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 498, 361], "area": 43214}, {"id": 5008262, "category_id": 195, "iscrowd": 0, "bbox": [102, 62, 456, 299], "area": 29577}, {"id": 1127014, "category_id": 196, "iscrowd": 0, "bbox": [266, 0, 31, 2], "area": 62}], "file_name": "000000005600.png", "image_id": 5600}, {"segments_info": [{"id": 3686983, "category_id": 20, "iscrowd": 0, "bbox": [26, 125, 209, 243], "area": 32267}, {"id": 2897471, "category_id": 20, "iscrowd": 0, "bbox": [206, 159, 298, 264], "area": 52150}, {"id": 5459531, "category_id": 20, "iscrowd": 0, "bbox": [549, 165, 91, 125], "area": 5429}, {"id": 2830130, "category_id": 20, "iscrowd": 0, "bbox": [426, 124, 152, 288], "area": 23077}, {"id": 1581870, "category_id": 20, "iscrowd": 0, "bbox": [548, 221, 92, 200], "area": 13255}, {"id": 16447988, "category_id": 151, "iscrowd": 0, "bbox": [238, 61, 57, 24], "area": 896}, {"id": 4279647, "category_id": 171, "iscrowd": 0, "bbox": [308, 0, 332, 196], "area": 44719}, {"id": 8551805, "category_id": 177, "iscrowd": 0, "bbox": [205, 0, 173, 183], "area": 14144}, {"id": 10660769, "category_id": 184, "iscrowd": 0, "bbox": [0, 9, 306, 65], "area": 4024}, {"id": 8815228, "category_id": 185, "iscrowd": 0, "bbox": [0, 27, 257, 119], "area": 17160}, {"id": 16119282, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 309, 63], "area": 11771}, {"id": 3887945, "category_id": 193, "iscrowd": 0, "bbox": [0, 78, 563, 350], "area": 49910}, {"id": 7170417, "category_id": 199, "iscrowd": 0, "bbox": [344, 153, 95, 40], "area": 2145}], "file_name": "000000005992.png", "image_id": 5992}, {"segments_info": [{"id": 2725787, "category_id": 52, "iscrowd": 0, "bbox": [328, 25, 221, 477], "area": 56485}, {"id": 2660764, "category_id": 52, "iscrowd": 0, "bbox": [99, 24, 207, 481], "area": 54674}], "file_name": "000000006012.png", "image_id": 6012}, {"segments_info": [{"id": 2171682, "category_id": 1, "iscrowd": 0, "bbox": [332, 202, 24, 27], "area": 337}, {"id": 3954525, "category_id": 1, "iscrowd": 0, "bbox": [351, 201, 10, 31], "area": 180}, {"id": 4411980, "category_id": 1, "iscrowd": 0, "bbox": [262, 197, 18, 25], "area": 203}, {"id": 4673092, "category_id": 1, "iscrowd": 0, "bbox": [199, 199, 9, 18], "area": 122}, {"id": 3297356, "category_id": 1, "iscrowd": 0, "bbox": [126, 201, 7, 9], "area": 45}, {"id": 3160119, "category_id": 1, "iscrowd": 0, "bbox": [140, 198, 6, 13], "area": 38}, {"id": 2239790, "category_id": 1, "iscrowd": 0, "bbox": [296, 202, 21, 24], "area": 217}, {"id": 1645631, "category_id": 1, "iscrowd": 0, "bbox": [374, 202, 13, 21], "area": 135}, {"id": 1448226, "category_id": 1, "iscrowd": 0, "bbox": [380, 206, 18, 18], "area": 196}, {"id": 2827552, "category_id": 3, "iscrowd": 0, "bbox": [1, 180, 29, 40], "area": 771}, {"id": 7105121, "category_id": 7, "iscrowd": 0, "bbox": [63, 84, 538, 223], "area": 82972}, {"id": 6053208, "category_id": 8, "iscrowd": 0, "bbox": [0, 158, 55, 53], "area": 1592}, {"id": 1186841, "category_id": 184, "iscrowd": 0, "bbox": [180, 0, 460, 145], "area": 33337}, {"id": 10783595, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 330, 191], "area": 44202}, {"id": 4344655, "category_id": 191, "iscrowd": 0, "bbox": [0, 175, 640, 176], "area": 54337}, {"id": 7372164, "category_id": 199, "iscrowd": 0, "bbox": [576, 134, 64, 109], "area": 5582}], "file_name": "000000006040.png", "image_id": 6040}, {"segments_info": [{"id": 9155032, "category_id": 81, "iscrowd": 0, "bbox": [407, 253, 90, 34], "area": 1717}, {"id": 9812958, "category_id": 81, "iscrowd": 0, "bbox": [590, 293, 50, 20], "area": 742}, {"id": 1514056, "category_id": 109, "iscrowd": 0, "bbox": [263, 129, 77, 240], "area": 11014}, {"id": 16120828, "category_id": 130, "iscrowd": 0, "bbox": [603, 0, 34, 37], "area": 947}, {"id": 5206927, "category_id": 133, "iscrowd": 0, "bbox": [419, 63, 221, 193], "area": 28202}, {"id": 5533840, "category_id": 176, "iscrowd": 0, "bbox": [164, 251, 119, 63], "area": 4878}, {"id": 8690356, "category_id": 186, "iscrowd": 0, "bbox": [151, 0, 253, 64], "area": 10527}, {"id": 857915, "category_id": 188, "iscrowd": 0, "bbox": [365, 278, 275, 147], "area": 34446}, {"id": 5928085, "category_id": 190, "iscrowd": 0, "bbox": [172, 337, 236, 88], "area": 5164}, {"id": 8627133, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 114105}, {"id": 1712497, "category_id": 200, "iscrowd": 0, "bbox": [212, 375, 121, 50], "area": 4141}], "file_name": "000000006213.png", "image_id": 6213}, {"segments_info": [{"id": 1973790, "category_id": 1, "iscrowd": 0, "bbox": [281, 138, 51, 69], "area": 1804}, {"id": 8553090, "category_id": 42, "iscrowd": 0, "bbox": [276, 139, 10, 92], "area": 357}, {"id": 9079434, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 271018}], "file_name": "000000006460.png", "image_id": 6460}, {"segments_info": [{"id": 5986648, "category_id": 1, "iscrowd": 0, "bbox": [87, 185, 154, 140], "area": 9907}, {"id": 4404533, "category_id": 1, "iscrowd": 0, "bbox": [17, 142, 110, 182], "area": 8521}, {"id": 2104872, "category_id": 1, "iscrowd": 0, "bbox": [18, 97, 50, 52], "area": 1654}, {"id": 3617081, "category_id": 1, "iscrowd": 0, "bbox": [216, 76, 47, 54], "area": 1526}, {"id": 4144714, "category_id": 1, "iscrowd": 0, "bbox": [40, 0, 36, 14], "area": 367}, {"id": 3024166, "category_id": 1, "iscrowd": 0, "bbox": [49, 81, 53, 63], "area": 958}, {"id": 2695975, "category_id": 1, "iscrowd": 0, "bbox": [390, 60, 85, 54], "area": 1513}, {"id": 3552314, "category_id": 1, "iscrowd": 0, "bbox": [87, 72, 66, 69], "area": 2200}, {"id": 11117725, "category_id": 1, "iscrowd": 0, "bbox": [257, 71, 97, 232], "area": 13365}, {"id": 1578267, "category_id": 1, "iscrowd": 0, "bbox": [170, 74, 52, 57], "area": 1613}, {"id": 4869200, "category_id": 15, "iscrowd": 0, "bbox": [341, 98, 78, 21], "area": 1137}, {"id": 3947065, "category_id": 15, "iscrowd": 0, "bbox": [138, 116, 54, 19], "area": 581}, {"id": 3747878, "category_id": 39, "iscrowd": 0, "bbox": [302, 29, 62, 68], "area": 487}, {"id": 4079417, "category_id": 40, "iscrowd": 0, "bbox": [214, 230, 28, 33], "area": 588}, {"id": 7297340, "category_id": 44, "iscrowd": 0, "bbox": [147, 103, 6, 16], "area": 72}, {"id": 5389348, "category_id": 44, "iscrowd": 0, "bbox": [86, 107, 5, 17], "area": 63}, {"id": 6127970, "category_id": 145, "iscrowd": 0, "bbox": [0, 129, 500, 145], "area": 34595}, {"id": 9476000, "category_id": 194, "iscrowd": 0, "bbox": [0, 246, 500, 87], "area": 29249}, {"id": 3682089, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 171], "area": 57225}], "file_name": "000000006471.png", "image_id": 6471}, {"segments_info": [{"id": 9671571, "category_id": 53, "iscrowd": 0, "bbox": [19, 41, 463, 211], "area": 26617}, {"id": 15921906, "category_id": 55, "iscrowd": 0, "bbox": [123, 68, 184, 183], "area": 26189}, {"id": 11974326, "category_id": 122, "iscrowd": 0, "bbox": [36, 20, 372, 162], "area": 20817}, {"id": 14145495, "category_id": 196, "iscrowd": 0, "bbox": [0, 157, 500, 239], "area": 74393}], "file_name": "000000006614.png", "image_id": 6614}, {"segments_info": [{"id": 8286314, "category_id": 3, "iscrowd": 0, "bbox": [332, 201, 13, 9], "area": 54}, {"id": 5785671, "category_id": 3, "iscrowd": 0, "bbox": [172, 204, 35, 19], "area": 392}, {"id": 5193791, "category_id": 3, "iscrowd": 0, "bbox": [283, 202, 19, 10], "area": 153}, {"id": 6050903, "category_id": 6, "iscrowd": 0, "bbox": [362, 194, 27, 30], "area": 747}, {"id": 8088169, "category_id": 8, "iscrowd": 0, "bbox": [205, 201, 37, 28], "area": 829}, {"id": 8418677, "category_id": 149, "iscrowd": 0, "bbox": [0, 194, 436, 167], "area": 48332}, {"id": 3167056, "category_id": 184, "iscrowd": 0, "bbox": [462, 101, 178, 168], "area": 14610}, {"id": 15916491, "category_id": 187, "iscrowd": 0, "bbox": [96, 0, 544, 171], "area": 61709}, {"id": 10593965, "category_id": 191, "iscrowd": 0, "bbox": [0, 207, 519, 154], "area": 11800}, {"id": 4548193, "category_id": 193, "iscrowd": 0, "bbox": [107, 211, 300, 150], "area": 7549}, {"id": 7893367, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 544, 246], "area": 64977}], "file_name": "000000006723.png", "image_id": 6723}, {"segments_info": [{"id": 3549757, "category_id": 1, "iscrowd": 0, "bbox": [3, 95, 233, 380], "area": 44381}, {"id": 2899033, "category_id": 1, "iscrowd": 0, "bbox": [0, 213, 48, 122], "area": 3241}, {"id": 4609136, "category_id": 1, "iscrowd": 0, "bbox": [79, 132, 255, 331], "area": 35939}, {"id": 2303288, "category_id": 32, "iscrowd": 0, "bbox": [136, 236, 45, 180], "area": 5271}, {"id": 2107213, "category_id": 67, "iscrowd": 0, "bbox": [2, 442, 325, 52], "area": 9127}, {"id": 6446690, "category_id": 72, "iscrowd": 0, "bbox": [220, 65, 151, 126], "area": 11257}, {"id": 3552591, "category_id": 77, "iscrowd": 0, "bbox": [36, 440, 35, 24], "area": 444}, {"id": 13102837, "category_id": 130, "iscrowd": 0, "bbox": [0, 86, 63, 42], "area": 1737}, {"id": 1581387, "category_id": 177, "iscrowd": 0, "bbox": [0, 237, 10, 29], "area": 149}, {"id": 2173519, "category_id": 189, "iscrowd": 0, "bbox": [0, 433, 340, 67], "area": 2749}, {"id": 2043967, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 293], "area": 41521}], "file_name": "000000006763.png", "image_id": 6763}, {"segments_info": [{"id": 4607329, "category_id": 1, "iscrowd": 0, "bbox": [1, 0, 246, 422], "area": 33197}, {"id": 9146550, "category_id": 1, "iscrowd": 0, "bbox": [533, 128, 107, 199], "area": 5877}, {"id": 8817829, "category_id": 1, "iscrowd": 0, "bbox": [65, 187, 158, 162], "area": 11413}, {"id": 3947437, "category_id": 1, "iscrowd": 0, "bbox": [534, 173, 106, 245], "area": 17309}, {"id": 5397111, "category_id": 1, "iscrowd": 0, "bbox": [387, 132, 93, 97], "area": 6240}, {"id": 5333115, "category_id": 1, "iscrowd": 0, "bbox": [188, 101, 250, 326], "area": 50334}, {"id": 4868696, "category_id": 1, "iscrowd": 0, "bbox": [387, 156, 184, 271], "area": 31866}, {"id": 7044506, "category_id": 1, "iscrowd": 0, "bbox": [102, 146, 100, 82], "area": 4365}, {"id": 1513499, "category_id": 77, "iscrowd": 0, "bbox": [267, 264, 33, 42], "area": 649}, {"id": 11118753, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 294], "area": 103619}], "file_name": "000000006771.png", "image_id": 6771}, {"segments_info": [{"id": 8941399, "category_id": 70, "iscrowd": 0, "bbox": [187, 472, 101, 56], "area": 3762}, {"id": 3484191, "category_id": 112, "iscrowd": 0, "bbox": [392, 562, 35, 78], "area": 1602}, {"id": 11837319, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 145915}, {"id": 1643791, "category_id": 181, "iscrowd": 0, "bbox": [201, 0, 226, 152], "area": 30316}, {"id": 4604215, "category_id": 190, "iscrowd": 0, "bbox": [46, 435, 366, 205], "area": 43037}], "file_name": "000000006818.png", "image_id": 6818}, {"segments_info": [{"id": 8751767, "category_id": 1, "iscrowd": 0, "bbox": [294, 20, 346, 460], "area": 97637}, {"id": 5395804, "category_id": 22, "iscrowd": 0, "bbox": [0, 86, 639, 389], "area": 131442}, {"id": 16711165, "category_id": 187, "iscrowd": 0, "bbox": [13, 0, 627, 54], "area": 13388}, {"id": 12694940, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 210], "area": 59540}], "file_name": "000000006894.png", "image_id": 6894}, {"segments_info": [{"id": 5662597, "category_id": 1, "iscrowd": 0, "bbox": [197, 124, 172, 248], "area": 12556}, {"id": 6447465, "category_id": 1, "iscrowd": 0, "bbox": [359, 118, 281, 268], "area": 18663}, {"id": 8620705, "category_id": 1, "iscrowd": 0, "bbox": [363, 151, 87, 165], "area": 8288}, {"id": 5921417, "category_id": 1, "iscrowd": 0, "bbox": [1, 108, 163, 345], "area": 40351}, {"id": 6845833, "category_id": 1, "iscrowd": 0, "bbox": [145, 137, 123, 193], "area": 14090}, {"id": 12436933, "category_id": 34, "iscrowd": 0, "bbox": [248, 224, 117, 123], "area": 9914}, {"id": 14277083, "category_id": 34, "iscrowd": 0, "bbox": [457, 230, 145, 143], "area": 16079}, {"id": 8227459, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 266], "area": 76301}, {"id": 16514043, "category_id": 187, "iscrowd": 0, "bbox": [338, 0, 302, 181], "area": 34099}, {"id": 5476734, "category_id": 193, "iscrowd": 0, "bbox": [0, 230, 640, 250], "area": 74039}], "file_name": "000000006954.png", "image_id": 6954}, {"segments_info": [{"id": 3941741, "category_id": 1, "iscrowd": 0, "bbox": [179, 210, 98, 252], "area": 16332}, {"id": 11774884, "category_id": 3, "iscrowd": 0, "bbox": [47, 182, 12, 10], "area": 89}, {"id": 9732253, "category_id": 8, "iscrowd": 0, "bbox": [230, 152, 139, 36], "area": 2389}, {"id": 11374732, "category_id": 28, "iscrowd": 0, "bbox": [82, 173, 222, 96], "area": 9700}, {"id": 13090487, "category_id": 128, "iscrowd": 0, "bbox": [22, 82, 456, 114], "area": 13581}, {"id": 15461348, "category_id": 149, "iscrowd": 0, "bbox": [0, 186, 136, 51], "area": 3058}, {"id": 6713455, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 478, 395], "area": 98598}, {"id": 16055029, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 478, 192], "area": 29198}, {"id": 10000795, "category_id": 191, "iscrowd": 0, "bbox": [0, 214, 478, 426], "area": 131583}, {"id": 6143646, "category_id": 193, "iscrowd": 0, "bbox": [415, 212, 63, 18], "area": 818}], "file_name": "000000007088.png", "image_id": 7088}, {"segments_info": [{"id": 3954842, "category_id": 22, "iscrowd": 0, "bbox": [568, 50, 69, 323], "area": 7301}, {"id": 2240855, "category_id": 22, "iscrowd": 0, "bbox": [121, 219, 83, 127], "area": 2630}, {"id": 3162214, "category_id": 22, "iscrowd": 0, "bbox": [401, 77, 230, 349], "area": 60938}, {"id": 4148328, "category_id": 22, "iscrowd": 0, "bbox": [126, 26, 292, 395], "area": 89557}, {"id": 4016503, "category_id": 22, "iscrowd": 0, "bbox": [339, 1, 165, 92], "area": 10181}, {"id": 8360354, "category_id": 154, "iscrowd": 0, "bbox": [0, 191, 165, 89], "area": 8008}, {"id": 8295330, "category_id": 178, "iscrowd": 0, "bbox": [0, 253, 204, 97], "area": 9308}, {"id": 5730407, "category_id": 184, "iscrowd": 0, "bbox": [0, 119, 136, 115], "area": 10443}, {"id": 15722718, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 151], "area": 37077}, {"id": 5338997, "category_id": 193, "iscrowd": 0, "bbox": [0, 292, 120, 76], "area": 5552}, {"id": 4545940, "category_id": 194, "iscrowd": 0, "bbox": [0, 285, 640, 141], "area": 28087}], "file_name": "000000007108.png", "image_id": 7108}, {"segments_info": [{"id": 6973051, "category_id": 1, "iscrowd": 0, "bbox": [190, 59, 122, 95], "area": 5792}, {"id": 12960199, "category_id": 42, "iscrowd": 0, "bbox": [284, 58, 54, 61], "area": 1917}, {"id": 8685436, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 482], "area": 300666}], "file_name": "000000007278.png", "image_id": 7278}, {"segments_info": [{"id": 6053478, "category_id": 1, "iscrowd": 0, "bbox": [573, 202, 7, 11], "area": 41}, {"id": 4275773, "category_id": 1, "iscrowd": 0, "bbox": [0, 226, 34, 45], "area": 1058}, {"id": 7039340, "category_id": 1, "iscrowd": 0, "bbox": [601, 203, 6, 12], "area": 54}, {"id": 4407618, "category_id": 1, "iscrowd": 0, "bbox": [535, 209, 3, 5], "area": 13}, {"id": 7958897, "category_id": 1, "iscrowd": 0, "bbox": [345, 133, 128, 166], "area": 4690}, {"id": 5987173, "category_id": 1, "iscrowd": 0, "bbox": [551, 193, 18, 29], "area": 215}, {"id": 5855071, "category_id": 1, "iscrowd": 0, "bbox": [256, 200, 6, 7], "area": 22}, {"id": 5723217, "category_id": 1, "iscrowd": 0, "bbox": [593, 204, 8, 12], "area": 58}, {"id": 7236714, "category_id": 1, "iscrowd": 0, "bbox": [635, 210, 4, 5], "area": 15}, {"id": 8286578, "category_id": 1, "iscrowd": 0, "bbox": [465, 122, 63, 74], "area": 2846}, {"id": 6777710, "category_id": 19, "iscrowd": 0, "bbox": [350, 189, 111, 168], "area": 6596}, {"id": 2305346, "category_id": 19, "iscrowd": 0, "bbox": [472, 182, 77, 173], "area": 6411}, {"id": 8029581, "category_id": 154, "iscrowd": 0, "bbox": [0, 215, 640, 146], "area": 71956}, {"id": 10260594, "category_id": 155, "iscrowd": 0, "bbox": [0, 167, 640, 72], "area": 25151}, {"id": 14007968, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 186], "area": 108693}], "file_name": "000000007281.png", "image_id": 7281}, {"segments_info": [{"id": 855829, "category_id": 2, "iscrowd": 0, "bbox": [222, 101, 68, 65], "area": 2274}, {"id": 1052693, "category_id": 2, "iscrowd": 0, "bbox": [219, 159, 61, 55], "area": 1553}, {"id": 6252397, "category_id": 4, "iscrowd": 0, "bbox": [51, 13, 549, 387], "area": 89091}, {"id": 4604474, "category_id": 8, "iscrowd": 0, "bbox": [399, 145, 121, 90], "area": 4969}, {"id": 4807530, "category_id": 18, "iscrowd": 0, "bbox": [181, 281, 38, 46], "area": 1208}, {"id": 8950678, "category_id": 125, "iscrowd": 0, "bbox": [0, 263, 600, 137], "area": 11959}, {"id": 2700085, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 331, 222], "area": 58528}, {"id": 3559496, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 600, 241], "area": 34892}, {"id": 14402211, "category_id": 187, "iscrowd": 0, "bbox": [550, 0, 50, 63], "area": 2352}, {"id": 4218974, "category_id": 193, "iscrowd": 0, "bbox": [0, 224, 600, 176], "area": 30282}], "file_name": "000000007386.png", "image_id": 7386}, {"segments_info": [{"id": 9080727, "category_id": 1, "iscrowd": 0, "bbox": [269, 273, 13, 32], "area": 238}, {"id": 4145209, "category_id": 1, "iscrowd": 0, "bbox": [623, 281, 7, 15], "area": 64}, {"id": 4804456, "category_id": 1, "iscrowd": 0, "bbox": [386, 274, 6, 8], "area": 25}, {"id": 6977928, "category_id": 1, "iscrowd": 0, "bbox": [593, 273, 5, 15], "area": 55}, {"id": 11581124, "category_id": 1, "iscrowd": 0, "bbox": [511, 287, 9, 12], "area": 67}, {"id": 11125452, "category_id": 1, "iscrowd": 0, "bbox": [523, 276, 9, 21], "area": 115}, {"id": 7172218, "category_id": 1, "iscrowd": 0, "bbox": [606, 297, 10, 12], "area": 65}, {"id": 5267063, "category_id": 1, "iscrowd": 0, "bbox": [615, 298, 15, 11], "area": 83}, {"id": 4610384, "category_id": 1, "iscrowd": 0, "bbox": [596, 293, 11, 15], "area": 105}, {"id": 7041146, "category_id": 1, "iscrowd": 0, "bbox": [239, 282, 13, 24], "area": 139}, {"id": 3026996, "category_id": 1, "iscrowd": 0, "bbox": [386, 241, 123, 231], "area": 14530}, {"id": 7445676, "category_id": 1, "iscrowd": 0, "bbox": [611, 278, 6, 8], "area": 28}, {"id": 7443106, "category_id": 1, "iscrowd": 0, "bbox": [602, 277, 8, 12], "area": 58}, {"id": 7571088, "category_id": 1, "iscrowd": 1, "bbox": [337, 272, 268, 29], "area": 314}, {"id": 8017975, "category_id": 27, "iscrowd": 0, "bbox": [609, 390, 31, 34], "area": 927}, {"id": 11245443, "category_id": 38, "iscrowd": 0, "bbox": [555, 169, 11, 11], "area": 75}, {"id": 13085301, "category_id": 38, "iscrowd": 0, "bbox": [205, 127, 16, 33], "area": 425}, {"id": 8227481, "category_id": 154, "iscrowd": 0, "bbox": [0, 246, 640, 234], "area": 110513}, {"id": 8283727, "category_id": 155, "iscrowd": 0, "bbox": [0, 268, 311, 51], "area": 7550}, {"id": 2899255, "category_id": 184, "iscrowd": 0, "bbox": [0, 189, 640, 110], "area": 28761}, {"id": 15844002, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 239], "area": 141365}, {"id": 4026734, "category_id": 193, "iscrowd": 0, "bbox": [561, 272, 72, 31], "area": 674}, {"id": 11253185, "category_id": 197, "iscrowd": 0, "bbox": [116, 230, 19, 26], "area": 310}], "file_name": "000000007511.png", "image_id": 7511}, {"segments_info": [{"id": 8222834, "category_id": 44, "iscrowd": 0, "bbox": [483, 299, 27, 82], "area": 1345}, {"id": 10717273, "category_id": 44, "iscrowd": 0, "bbox": [501, 306, 32, 83], "area": 2051}, {"id": 4003354, "category_id": 46, "iscrowd": 0, "bbox": [453, 307, 20, 65], "area": 553}, {"id": 4264468, "category_id": 46, "iscrowd": 0, "bbox": [464, 312, 22, 68], "area": 793}, {"id": 6317671, "category_id": 51, "iscrowd": 0, "bbox": [103, 75, 50, 14], "area": 552}, {"id": 4613449, "category_id": 51, "iscrowd": 0, "bbox": [348, 301, 53, 39], "area": 740}, {"id": 3226435, "category_id": 78, "iscrowd": 0, "bbox": [304, 146, 59, 90], "area": 4291}, {"id": 2369321, "category_id": 79, "iscrowd": 0, "bbox": [252, 243, 175, 111], "area": 6835}, {"id": 7501175, "category_id": 81, "iscrowd": 0, "bbox": [44, 354, 264, 75], "area": 10663}, {"id": 8420729, "category_id": 82, "iscrowd": 0, "bbox": [1, 169, 102, 277], "area": 22219}, {"id": 658958, "category_id": 86, "iscrowd": 0, "bbox": [241, 58, 26, 36], "area": 651}, {"id": 1845322, "category_id": 86, "iscrowd": 0, "bbox": [206, 55, 24, 38], "area": 615}, {"id": 5533553, "category_id": 100, "iscrowd": 0, "bbox": [220, 258, 144, 195], "area": 5089}, {"id": 3161413, "category_id": 107, "iscrowd": 0, "bbox": [0, 265, 598, 215], "area": 41523}, {"id": 9342860, "category_id": 176, "iscrowd": 0, "bbox": [96, 211, 524, 209], "area": 30582}, {"id": 3226693, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 346, 76], "area": 18902}, {"id": 5799580, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 546, 371], "area": 86437}, {"id": 9608864, "category_id": 195, "iscrowd": 0, "bbox": [197, 233, 278, 182], "area": 6316}, {"id": 6320507, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 51319}], "file_name": "000000007574.png", "image_id": 7574}, {"segments_info": [{"id": 8881844, "category_id": 38, "iscrowd": 0, "bbox": [94, 86, 240, 220], "area": 25243}, {"id": 11893582, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 161927}], "file_name": "000000007784.png", "image_id": 7784}, {"segments_info": [{"id": 8623005, "category_id": 65, "iscrowd": 0, "bbox": [164, 190, 319, 121], "area": 19213}, {"id": 7435899, "category_id": 65, "iscrowd": 0, "bbox": [1, 191, 454, 227], "area": 70150}, {"id": 3223599, "category_id": 75, "iscrowd": 0, "bbox": [626, 256, 14, 5], "area": 60}, {"id": 5062206, "category_id": 85, "iscrowd": 0, "bbox": [133, 246, 9, 12], "area": 86}, {"id": 9608354, "category_id": 93, "iscrowd": 0, "bbox": [0, 195, 292, 126], "area": 977}, {"id": 10458772, "category_id": 112, "iscrowd": 0, "bbox": [507, 77, 118, 231], "area": 23120}, {"id": 3356997, "category_id": 118, "iscrowd": 0, "bbox": [440, 286, 200, 141], "area": 21032}, {"id": 8825019, "category_id": 130, "iscrowd": 0, "bbox": [132, 97, 212, 133], "area": 5187}, {"id": 2895157, "category_id": 168, "iscrowd": 0, "bbox": [0, 321, 187, 106], "area": 1930}, {"id": 10464177, "category_id": 181, "iscrowd": 0, "bbox": [334, 90, 148, 122], "area": 14838}, {"id": 7767436, "category_id": 186, "iscrowd": 0, "bbox": [173, 0, 467, 98], "area": 34100}, {"id": 1580066, "category_id": 188, "iscrowd": 0, "bbox": [595, 252, 45, 121], "area": 3418}, {"id": 7441298, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 291], "area": 59142}], "file_name": "000000007795.png", "image_id": 7795}, {"segments_info": [{"id": 6111612, "category_id": 1, "iscrowd": 0, "bbox": [416, 123, 64, 53], "area": 1547}, {"id": 3292479, "category_id": 1, "iscrowd": 0, "bbox": [491, 56, 28, 107], "area": 1553}, {"id": 3160130, "category_id": 1, "iscrowd": 0, "bbox": [506, 53, 38, 112], "area": 1554}, {"id": 12368560, "category_id": 1, "iscrowd": 0, "bbox": [386, 147, 33, 22], "area": 500}, {"id": 11909576, "category_id": 1, "iscrowd": 0, "bbox": [573, 54, 25, 27], "area": 209}, {"id": 7306366, "category_id": 1, "iscrowd": 0, "bbox": [244, 34, 51, 110], "area": 2143}, {"id": 9276804, "category_id": 1, "iscrowd": 0, "bbox": [271, 78, 185, 199], "area": 10260}, {"id": 2962254, "category_id": 1, "iscrowd": 0, "bbox": [564, 59, 23, 115], "area": 1217}, {"id": 9739425, "category_id": 1, "iscrowd": 0, "bbox": [363, 108, 22, 41], "area": 681}, {"id": 4350327, "category_id": 1, "iscrowd": 0, "bbox": [581, 47, 41, 139], "area": 2061}, {"id": 8882303, "category_id": 4, "iscrowd": 0, "bbox": [241, 153, 226, 207], "area": 27529}, {"id": 8160654, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 71596}, {"id": 4874594, "category_id": 185, "iscrowd": 0, "bbox": [406, 44, 226, 146], "area": 6948}, {"id": 4753016, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 349], "area": 138752}], "file_name": "000000007816.png", "image_id": 7816}, {"segments_info": [{"id": 9737884, "category_id": 46, "iscrowd": 0, "bbox": [333, 159, 80, 194], "area": 8741}, {"id": 4999232, "category_id": 46, "iscrowd": 0, "bbox": [400, 187, 43, 98], "area": 2302}, {"id": 8947077, "category_id": 46, "iscrowd": 0, "bbox": [137, 150, 91, 180], "area": 7159}, {"id": 8092809, "category_id": 48, "iscrowd": 0, "bbox": [122, 305, 47, 28], "area": 329}, {"id": 5788503, "category_id": 49, "iscrowd": 0, "bbox": [461, 314, 179, 44], "area": 1741}, {"id": 9998992, "category_id": 49, "iscrowd": 0, "bbox": [211, 266, 72, 8], "area": 302}, {"id": 5263439, "category_id": 49, "iscrowd": 0, "bbox": [448, 265, 106, 17], "area": 507}, {"id": 1250068, "category_id": 62, "iscrowd": 0, "bbox": [8, 260, 107, 50], "area": 3881}, {"id": 788742, "category_id": 62, "iscrowd": 0, "bbox": [616, 274, 24, 44], "area": 779}, {"id": 7697011, "category_id": 67, "iscrowd": 0, "bbox": [0, 77, 640, 350], "area": 77355}, {"id": 8887465, "category_id": 86, "iscrowd": 0, "bbox": [288, 216, 70, 99], "area": 4425}, {"id": 2766139, "category_id": 181, "iscrowd": 0, "bbox": [89, 31, 551, 284], "area": 54509}, {"id": 328963, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 332], "area": 98061}], "file_name": "000000007818.png", "image_id": 7818}, {"segments_info": [{"id": 11579568, "category_id": 85, "iscrowd": 0, "bbox": [184, 250, 118, 167], "area": 10276}, {"id": 10987431, "category_id": 85, "iscrowd": 0, "bbox": [319, 243, 151, 160], "area": 14102}, {"id": 14540253, "category_id": 187, "iscrowd": 0, "bbox": [0, 318, 638, 322], "area": 135531}, {"id": 13355979, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 638, 402], "area": 197605}], "file_name": "000000007888.png", "image_id": 7888}, {"segments_info": [{"id": 10330022, "category_id": 1, "iscrowd": 0, "bbox": [67, 210, 7, 14], "area": 51}, {"id": 7293743, "category_id": 1, "iscrowd": 0, "bbox": [39, 213, 4, 11], "area": 34}, {"id": 9144719, "category_id": 1, "iscrowd": 0, "bbox": [80, 208, 7, 17], "area": 61}, {"id": 11446694, "category_id": 1, "iscrowd": 0, "bbox": [43, 210, 7, 14], "area": 61}, {"id": 5855070, "category_id": 1, "iscrowd": 0, "bbox": [104, 145, 159, 276], "area": 12934}, {"id": 8223103, "category_id": 41, "iscrowd": 0, "bbox": [200, 346, 68, 81], "area": 1201}, {"id": 7694683, "category_id": 166, "iscrowd": 0, "bbox": [20, 181, 108, 44], "area": 1683}, {"id": 4412230, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 429, 239], "area": 78738}, {"id": 14343636, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 123, 109], "area": 9146}, {"id": 10790328, "category_id": 190, "iscrowd": 0, "bbox": [0, 405, 429, 235], "area": 97906}, {"id": 13357007, "category_id": 191, "iscrowd": 0, "bbox": [0, 192, 429, 231], "area": 67090}, {"id": 6978410, "category_id": 193, "iscrowd": 0, "bbox": [50, 187, 40, 32], "area": 580}, {"id": 6183519, "category_id": 199, "iscrowd": 0, "bbox": [235, 208, 194, 36], "area": 4124}], "file_name": "000000007977.png", "image_id": 7977}, {"segments_info": [{"id": 1315612, "category_id": 49, "iscrowd": 0, "bbox": [7, 116, 144, 43], "area": 2005}, {"id": 2368294, "category_id": 49, "iscrowd": 0, "bbox": [1, 157, 146, 100], "area": 2874}, {"id": 2512052, "category_id": 57, "iscrowd": 0, "bbox": [171, 70, 310, 270], "area": 52423}, {"id": 4216152, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 613, 311], "area": 17177}], "file_name": "000000007991.png", "image_id": 7991}, {"segments_info": [{"id": 920627, "category_id": 1, "iscrowd": 0, "bbox": [3, 255, 306, 224], "area": 50765}, {"id": 4606360, "category_id": 1, "iscrowd": 0, "bbox": [244, 101, 197, 267], "area": 32673}, {"id": 197642, "category_id": 1, "iscrowd": 0, "bbox": [436, 285, 204, 195], "area": 28481}, {"id": 5986702, "category_id": 32, "iscrowd": 0, "bbox": [318, 198, 22, 100], "area": 1279}, {"id": 7638456, "category_id": 44, "iscrowd": 0, "bbox": [432, 369, 5, 17], "area": 71}, {"id": 7573177, "category_id": 44, "iscrowd": 0, "bbox": [437, 369, 8, 17], "area": 108}, {"id": 7968703, "category_id": 44, "iscrowd": 0, "bbox": [444, 368, 8, 18], "area": 111}, {"id": 1711164, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 110], "area": 39378}, {"id": 6187628, "category_id": 189, "iscrowd": 0, "bbox": [378, 375, 99, 57], "area": 3619}, {"id": 9798508, "category_id": 199, "iscrowd": 0, "bbox": [0, 13, 640, 446], "area": 140335}], "file_name": "000000008021.png", "image_id": 8021}, {"segments_info": [{"id": 6575450, "category_id": 1, "iscrowd": 0, "bbox": [412, 181, 67, 164], "area": 6760}, {"id": 10584960, "category_id": 1, "iscrowd": 0, "bbox": [329, 203, 81, 151], "area": 6998}, {"id": 3687258, "category_id": 2, "iscrowd": 0, "bbox": [308, 190, 46, 68], "area": 1158}, {"id": 3158845, "category_id": 4, "iscrowd": 0, "bbox": [141, 161, 111, 150], "area": 8722}, {"id": 1711655, "category_id": 62, "iscrowd": 0, "bbox": [412, 283, 37, 56], "area": 373}, {"id": 5527921, "category_id": 62, "iscrowd": 0, "bbox": [322, 251, 56, 94], "area": 791}, {"id": 8813423, "category_id": 92, "iscrowd": 0, "bbox": [0, 0, 613, 218], "area": 50949}, {"id": 7765128, "category_id": 149, "iscrowd": 0, "bbox": [0, 254, 640, 205], "area": 90098}, {"id": 659229, "category_id": 181, "iscrowd": 0, "bbox": [485, 14, 155, 153], "area": 3551}, {"id": 4082265, "category_id": 191, "iscrowd": 0, "bbox": [0, 200, 640, 147], "area": 26605}, {"id": 11451844, "category_id": 197, "iscrowd": 0, "bbox": [337, 7, 28, 48], "area": 820}, {"id": 5330784, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 276], "area": 53674}], "file_name": "000000008211.png", "image_id": 8211}, {"segments_info": [{"id": 6712961, "category_id": 48, "iscrowd": 0, "bbox": [387, 84, 225, 309], "area": 11420}, {"id": 6720423, "category_id": 51, "iscrowd": 0, "bbox": [0, 71, 610, 541], "area": 189144}, {"id": 795690, "category_id": 51, "iscrowd": 0, "bbox": [19, 34, 443, 327], "area": 66487}, {"id": 1137766, "category_id": 56, "iscrowd": 0, "bbox": [121, 159, 97, 84], "area": 3958}, {"id": 1072752, "category_id": 56, "iscrowd": 0, "bbox": [258, 227, 88, 71], "area": 3095}, {"id": 1333093, "category_id": 56, "iscrowd": 0, "bbox": [203, 83, 80, 85], "area": 3957}, {"id": 1334115, "category_id": 56, "iscrowd": 0, "bbox": [279, 151, 101, 67], "area": 2347}, {"id": 674121, "category_id": 56, "iscrowd": 0, "bbox": [271, 183, 92, 74], "area": 4890}, {"id": 933954, "category_id": 56, "iscrowd": 0, "bbox": [291, 99, 62, 70], "area": 1593}, {"id": 742223, "category_id": 56, "iscrowd": 0, "bbox": [269, 120, 51, 53], "area": 1635}, {"id": 868153, "category_id": 56, "iscrowd": 0, "bbox": [360, 211, 26, 54], "area": 923}, {"id": 677721, "category_id": 56, "iscrowd": 0, "bbox": [209, 163, 70, 107], "area": 2726}, {"id": 941410, "category_id": 56, "iscrowd": 0, "bbox": [195, 254, 75, 62], "area": 2820}], "file_name": "000000008277.png", "image_id": 8277}, {"segments_info": [{"id": 6968923, "category_id": 1, "iscrowd": 0, "bbox": [156, 10, 484, 416], "area": 94560}, {"id": 3942019, "category_id": 32, "iscrowd": 0, "bbox": [418, 371, 81, 55], "area": 2993}, {"id": 14929880, "category_id": 190, "iscrowd": 0, "bbox": [0, 288, 640, 138], "area": 22805}, {"id": 7434616, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 359], "area": 129528}, {"id": 11445650, "category_id": 199, "iscrowd": 0, "bbox": [221, 0, 419, 191], "area": 22612}], "file_name": "000000008532.png", "image_id": 8532}, {"segments_info": [{"id": 4813965, "category_id": 48, "iscrowd": 0, "bbox": [593, 285, 29, 52], "area": 535}, {"id": 1669559, "category_id": 59, "iscrowd": 0, "bbox": [45, 426, 138, 177], "area": 16924}, {"id": 2790841, "category_id": 59, "iscrowd": 0, "bbox": [232, 434, 192, 191], "area": 17568}, {"id": 4172496, "category_id": 59, "iscrowd": 0, "bbox": [436, 430, 169, 150], "area": 13634}, {"id": 1266812, "category_id": 59, "iscrowd": 0, "bbox": [430, 20, 191, 168], "area": 17773}, {"id": 555711, "category_id": 59, "iscrowd": 0, "bbox": [21, 14, 393, 331], "area": 97015}, {"id": 3113384, "category_id": 59, "iscrowd": 0, "bbox": [430, 231, 192, 164], "area": 19063}, {"id": 2975893, "category_id": 189, "iscrowd": 0, "bbox": [224, 223, 254, 234], "area": 2744}, {"id": 10798809, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 640], "area": 218737}], "file_name": "000000008629.png", "image_id": 8629}, {"segments_info": [{"id": 5855326, "category_id": 1, "iscrowd": 0, "bbox": [380, 390, 257, 84], "area": 5002}, {"id": 8945058, "category_id": 1, "iscrowd": 0, "bbox": [137, 19, 215, 366], "area": 43892}, {"id": 13227988, "category_id": 1, "iscrowd": 0, "bbox": [74, 10, 102, 292], "area": 8203}, {"id": 8025999, "category_id": 1, "iscrowd": 0, "bbox": [286, 73, 231, 324], "area": 25674}, {"id": 11577766, "category_id": 20, "iscrowd": 0, "bbox": [53, 309, 586, 171], "area": 30153}, {"id": 13882064, "category_id": 128, "iscrowd": 0, "bbox": [0, 52, 614, 99], "area": 7566}, {"id": 11718858, "category_id": 184, "iscrowd": 0, "bbox": [0, 10, 640, 158], "area": 28797}, {"id": 13425113, "category_id": 185, "iscrowd": 0, "bbox": [0, 103, 524, 136], "area": 3340}, {"id": 16579579, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 108], "area": 38137}, {"id": 15527406, "category_id": 191, "iscrowd": 0, "bbox": [0, 228, 640, 165], "area": 31843}, {"id": 11919320, "category_id": 193, "iscrowd": 0, "bbox": [0, 158, 640, 322], "area": 36547}], "file_name": "000000008690.png", "image_id": 8690}, {"segments_info": [{"id": 6453647, "category_id": 3, "iscrowd": 0, "bbox": [109, 285, 13, 7], "area": 83}, {"id": 3159612, "category_id": 3, "iscrowd": 0, "bbox": [0, 280, 28, 23], "area": 565}, {"id": 2237207, "category_id": 10, "iscrowd": 0, "bbox": [58, 86, 21, 61], "area": 1203}, {"id": 263176, "category_id": 10, "iscrowd": 0, "bbox": [495, 179, 20, 41], "area": 787}, {"id": 663883, "category_id": 10, "iscrowd": 0, "bbox": [504, 231, 14, 11], "area": 143}, {"id": 4671787, "category_id": 10, "iscrowd": 0, "bbox": [163, 106, 23, 39], "area": 784}, {"id": 724498, "category_id": 10, "iscrowd": 0, "bbox": [485, 229, 9, 17], "area": 122}, {"id": 4275256, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 288], "area": 164021}, {"id": 198158, "category_id": 191, "iscrowd": 0, "bbox": [0, 281, 640, 146], "area": 88213}, {"id": 461070, "category_id": 197, "iscrowd": 0, "bbox": [0, 245, 640, 48], "area": 17209}], "file_name": "000000008762.png", "image_id": 8762}, {"segments_info": [{"id": 5459025, "category_id": 1, "iscrowd": 0, "bbox": [341, 187, 27, 61], "area": 1101}, {"id": 4869984, "category_id": 1, "iscrowd": 0, "bbox": [357, 58, 224, 218], "area": 25248}, {"id": 1447448, "category_id": 1, "iscrowd": 0, "bbox": [293, 184, 42, 44], "area": 818}, {"id": 5479347, "category_id": 52, "iscrowd": 0, "bbox": [371, 244, 172, 140], "area": 18740}, {"id": 3709110, "category_id": 52, "iscrowd": 0, "bbox": [534, 242, 30, 79], "area": 1416}, {"id": 5279654, "category_id": 52, "iscrowd": 0, "bbox": [0, 116, 387, 301], "area": 82976}, {"id": 5281710, "category_id": 52, "iscrowd": 0, "bbox": [544, 259, 94, 134], "area": 8288}, {"id": 1979717, "category_id": 122, "iscrowd": 0, "bbox": [0, 305, 556, 121], "area": 5737}, {"id": 4348784, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 337], "area": 107335}, {"id": 16248549, "category_id": 187, "iscrowd": 0, "bbox": [608, 0, 32, 107], "area": 2755}, {"id": 4872303, "category_id": 189, "iscrowd": 0, "bbox": [0, 354, 640, 72], "area": 16469}], "file_name": "000000008844.png", "image_id": 8844}, {"segments_info": [{"id": 5657190, "category_id": 2, "iscrowd": 0, "bbox": [24, 346, 49, 104], "area": 2181}, {"id": 5132893, "category_id": 11, "iscrowd": 0, "bbox": [141, 399, 40, 95], "area": 2476}, {"id": 4806255, "category_id": 125, "iscrowd": 0, "bbox": [470, 470, 170, 27], "area": 3694}, {"id": 5001565, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 442], "area": 234962}, {"id": 8356745, "category_id": 149, "iscrowd": 0, "bbox": [0, 510, 640, 29], "area": 13943}, {"id": 9673380, "category_id": 191, "iscrowd": 0, "bbox": [0, 413, 640, 109], "area": 47681}, {"id": 9604750, "category_id": 199, "iscrowd": 0, "bbox": [76, 234, 233, 209], "area": 39875}], "file_name": "000000008899.png", "image_id": 8899}, {"segments_info": [{"id": 532798, "category_id": 1, "iscrowd": 0, "bbox": [32, 363, 28, 27], "area": 595}, {"id": 199701, "category_id": 1, "iscrowd": 0, "bbox": [10, 361, 25, 31], "area": 449}, {"id": 133909, "category_id": 1, "iscrowd": 0, "bbox": [491, 322, 46, 69], "area": 2037}, {"id": 1521237, "category_id": 1, "iscrowd": 0, "bbox": [422, 351, 20, 39], "area": 465}, {"id": 1254447, "category_id": 1, "iscrowd": 0, "bbox": [308, 331, 86, 62], "area": 2924}, {"id": 2635588, "category_id": 1, "iscrowd": 0, "bbox": [67, 45, 406, 348], "area": 65217}, {"id": 67346, "category_id": 1, "iscrowd": 0, "bbox": [522, 319, 29, 39], "area": 730}, {"id": 599097, "category_id": 1, "iscrowd": 0, "bbox": [425, 337, 55, 53], "area": 1761}, {"id": 1290, "category_id": 1, "iscrowd": 0, "bbox": [526, 296, 62, 79], "area": 3020}, {"id": 7792604, "category_id": 34, "iscrowd": 0, "bbox": [191, 217, 169, 41], "area": 4429}, {"id": 4281949, "category_id": 171, "iscrowd": 0, "bbox": [0, 270, 600, 130], "area": 26895}, {"id": 1584431, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 600, 303], "area": 122667}], "file_name": "000000009378.png", "image_id": 9378}, {"segments_info": [{"id": 1188677, "category_id": 1, "iscrowd": 0, "bbox": [313, 82, 146, 197], "area": 16327}, {"id": 329741, "category_id": 1, "iscrowd": 0, "bbox": [458, 69, 78, 153], "area": 5825}, {"id": 725280, "category_id": 1, "iscrowd": 0, "bbox": [277, 61, 89, 137], "area": 7142}, {"id": 1315611, "category_id": 1, "iscrowd": 0, "bbox": [3, 95, 102, 98], "area": 4766}, {"id": 791598, "category_id": 1, "iscrowd": 0, "bbox": [523, 410, 117, 65], "area": 5849}, {"id": 526606, "category_id": 1, "iscrowd": 0, "bbox": [564, 48, 49, 75], "area": 2735}, {"id": 1845828, "category_id": 1, "iscrowd": 0, "bbox": [145, 96, 136, 165], "area": 10717}, {"id": 2306634, "category_id": 1, "iscrowd": 0, "bbox": [448, 89, 192, 276], "area": 33495}, {"id": 1120035, "category_id": 1, "iscrowd": 0, "bbox": [367, 59, 36, 29], "area": 744}, {"id": 1318448, "category_id": 47, "iscrowd": 0, "bbox": [356, 282, 49, 81], "area": 3216}, {"id": 1645600, "category_id": 47, "iscrowd": 0, "bbox": [252, 380, 76, 93], "area": 2868}, {"id": 4015183, "category_id": 47, "iscrowd": 0, "bbox": [251, 418, 64, 62], "area": 3448}, {"id": 1450548, "category_id": 47, "iscrowd": 0, "bbox": [33, 256, 44, 63], "area": 1944}, {"id": 791066, "category_id": 73, "iscrowd": 0, "bbox": [86, 211, 129, 70], "area": 5456}, {"id": 857115, "category_id": 73, "iscrowd": 0, "bbox": [444, 106, 36, 53], "area": 1136}, {"id": 1515824, "category_id": 73, "iscrowd": 0, "bbox": [329, 220, 171, 111], "area": 3825}, {"id": 3024418, "category_id": 73, "iscrowd": 0, "bbox": [266, 231, 223, 249], "area": 18207}, {"id": 11974327, "category_id": 73, "iscrowd": 0, "bbox": [1, 174, 262, 299], "area": 35383}, {"id": 658720, "category_id": 74, "iscrowd": 0, "bbox": [460, 355, 82, 28], "area": 1222}, {"id": 592653, "category_id": 76, "iscrowd": 0, "bbox": [321, 363, 108, 99], "area": 6765}, {"id": 526345, "category_id": 76, "iscrowd": 0, "bbox": [190, 254, 20, 14], "area": 107}, {"id": 2175823, "category_id": 76, "iscrowd": 0, "bbox": [404, 283, 66, 38], "area": 1067}, {"id": 1520210, "category_id": 76, "iscrowd": 0, "bbox": [1, 280, 30, 27], "area": 414}, {"id": 2114151, "category_id": 76, "iscrowd": 0, "bbox": [459, 369, 129, 103], "area": 7223}, {"id": 263431, "category_id": 107, "iscrowd": 0, "bbox": [99, 172, 76, 44], "area": 1471}, {"id": 15464658, "category_id": 130, "iscrowd": 0, "bbox": [484, 30, 41, 18], "area": 595}, {"id": 1588552, "category_id": 144, "iscrowd": 0, "bbox": [493, 0, 52, 57], "area": 1697}, {"id": 329995, "category_id": 176, "iscrowd": 0, "bbox": [0, 73, 109, 126], "area": 4019}, {"id": 860211, "category_id": 177, "iscrowd": 0, "bbox": [208, 41, 432, 132], "area": 12602}, {"id": 857377, "category_id": 189, "iscrowd": 0, "bbox": [54, 86, 572, 394], "area": 24855}, {"id": 1451583, "category_id": 195, "iscrowd": 0, "bbox": [20, 0, 620, 480], "area": 8688}, {"id": 1450818, "category_id": 196, "iscrowd": 0, "bbox": [184, 140, 290, 180], "area": 3637}, {"id": 1782852, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 584, 116], "area": 38116}], "file_name": "000000009400.png", "image_id": 9400}, {"segments_info": [{"id": 6372208, "category_id": 1, "iscrowd": 0, "bbox": [128, 101, 254, 531], "area": 100507}, {"id": 11164172, "category_id": 28, "iscrowd": 0, "bbox": [1, 1, 548, 391], "area": 151117}, {"id": 13352107, "category_id": 191, "iscrowd": 0, "bbox": [0, 286, 551, 354], "area": 96128}], "file_name": "000000009448.png", "image_id": 9448}, {"segments_info": [{"id": 3022625, "category_id": 1, "iscrowd": 0, "bbox": [36, 62, 141, 418], "area": 36864}, {"id": 15650988, "category_id": 72, "iscrowd": 0, "bbox": [218, 270, 27, 18], "area": 310}, {"id": 14533286, "category_id": 72, "iscrowd": 0, "bbox": [251, 275, 29, 20], "area": 389}, {"id": 9270375, "category_id": 72, "iscrowd": 0, "bbox": [459, 210, 120, 139], "area": 10757}, {"id": 4078407, "category_id": 74, "iscrowd": 0, "bbox": [376, 362, 34, 19], "area": 416}, {"id": 3879474, "category_id": 76, "iscrowd": 0, "bbox": [307, 318, 116, 43], "area": 2560}, {"id": 5063234, "category_id": 176, "iscrowd": 0, "bbox": [0, 309, 65, 81], "area": 2460}, {"id": 6448229, "category_id": 181, "iscrowd": 0, "bbox": [181, 30, 402, 315], "area": 90080}, {"id": 4343378, "category_id": 189, "iscrowd": 0, "bbox": [0, 263, 640, 217], "area": 31483}, {"id": 3482404, "category_id": 190, "iscrowd": 0, "bbox": [0, 373, 326, 107], "area": 16802}, {"id": 9605264, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 103297}], "file_name": "000000009483.png", "image_id": 9483}, {"segments_info": [{"id": 2237478, "category_id": 1, "iscrowd": 0, "bbox": [372, 169, 86, 96], "area": 3830}, {"id": 1775127, "category_id": 1, "iscrowd": 0, "bbox": [0, 53, 237, 374], "area": 48384}, {"id": 4078400, "category_id": 1, "iscrowd": 0, "bbox": [259, 178, 63, 75], "area": 2684}, {"id": 4139041, "category_id": 1, "iscrowd": 0, "bbox": [137, 156, 94, 137], "area": 7216}, {"id": 2171176, "category_id": 1, "iscrowd": 0, "bbox": [513, 110, 127, 177], "area": 10599}, {"id": 7227431, "category_id": 1, "iscrowd": 0, "bbox": [244, 348, 119, 73], "area": 5598}, {"id": 8422539, "category_id": 44, "iscrowd": 0, "bbox": [427, 228, 24, 49], "area": 867}, {"id": 8420737, "category_id": 47, "iscrowd": 0, "bbox": [325, 251, 21, 15], "area": 235}, {"id": 11445146, "category_id": 47, "iscrowd": 0, "bbox": [347, 271, 39, 39], "area": 1276}, {"id": 8878453, "category_id": 47, "iscrowd": 0, "bbox": [479, 259, 43, 20], "area": 182}, {"id": 7498090, "category_id": 47, "iscrowd": 0, "bbox": [541, 215, 27, 22], "area": 457}, {"id": 13024434, "category_id": 47, "iscrowd": 0, "bbox": [185, 280, 22, 26], "area": 198}, {"id": 2762793, "category_id": 47, "iscrowd": 0, "bbox": [523, 238, 59, 54], "area": 2933}, {"id": 9997448, "category_id": 47, "iscrowd": 0, "bbox": [302, 234, 26, 30], "area": 663}, {"id": 7170410, "category_id": 47, "iscrowd": 0, "bbox": [467, 263, 25, 37], "area": 748}, {"id": 7039351, "category_id": 47, "iscrowd": 0, "bbox": [252, 250, 24, 20], "area": 257}, {"id": 8021860, "category_id": 50, "iscrowd": 0, "bbox": [553, 301, 27, 10], "area": 102}, {"id": 3222573, "category_id": 50, "iscrowd": 0, "bbox": [534, 368, 57, 59], "area": 1961}, {"id": 10589325, "category_id": 50, "iscrowd": 0, "bbox": [363, 299, 53, 12], "area": 90}, {"id": 5004148, "category_id": 51, "iscrowd": 0, "bbox": [288, 274, 36, 20], "area": 570}, {"id": 5067343, "category_id": 51, "iscrowd": 0, "bbox": [416, 257, 14, 17], "area": 189}, {"id": 6316379, "category_id": 51, "iscrowd": 0, "bbox": [243, 258, 25, 15], "area": 315}, {"id": 5066309, "category_id": 51, "iscrowd": 0, "bbox": [424, 276, 46, 30], "area": 1088}, {"id": 10057576, "category_id": 51, "iscrowd": 0, "bbox": [339, 257, 66, 16], "area": 567}, {"id": 5921615, "category_id": 51, "iscrowd": 0, "bbox": [384, 272, 35, 29], "area": 787}, {"id": 2565157, "category_id": 62, "iscrowd": 0, "bbox": [131, 236, 12, 33], "area": 230}, {"id": 3881538, "category_id": 67, "iscrowd": 0, "bbox": [180, 254, 460, 163], "area": 38391}, {"id": 3883590, "category_id": 85, "iscrowd": 0, "bbox": [179, 98, 20, 26], "area": 406}, {"id": 5658725, "category_id": 109, "iscrowd": 0, "bbox": [290, 0, 302, 263], "area": 30874}, {"id": 2961725, "category_id": 112, "iscrowd": 0, "bbox": [81, 114, 221, 159], "area": 15377}, {"id": 14278110, "category_id": 181, "iscrowd": 0, "bbox": [324, 0, 316, 262], "area": 29067}, {"id": 1514287, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 400, 118], "area": 29988}, {"id": 526861, "category_id": 189, "iscrowd": 0, "bbox": [173, 270, 467, 157], "area": 4933}, {"id": 1909550, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 465, 216], "area": 12379}], "file_name": "000000009590.png", "image_id": 9590}, {"segments_info": [{"id": 4144942, "category_id": 1, "iscrowd": 0, "bbox": [311, 204, 39, 38], "area": 925}, {"id": 1647670, "category_id": 1, "iscrowd": 0, "bbox": [140, 201, 43, 73], "area": 1411}, {"id": 3684137, "category_id": 1, "iscrowd": 0, "bbox": [252, 200, 49, 35], "area": 885}, {"id": 5263205, "category_id": 8, "iscrowd": 0, "bbox": [85, 188, 379, 189], "area": 45883}, {"id": 8105391, "category_id": 11, "iscrowd": 0, "bbox": [552, 259, 11, 20], "area": 161}, {"id": 4407615, "category_id": 119, "iscrowd": 0, "bbox": [463, 231, 66, 31], "area": 1266}, {"id": 9408913, "category_id": 128, "iscrowd": 0, "bbox": [0, 33, 579, 229], "area": 40005}, {"id": 6909812, "category_id": 149, "iscrowd": 0, "bbox": [0, 288, 640, 192], "area": 80535}, {"id": 13619663, "category_id": 159, "iscrowd": 0, "bbox": [0, 230, 640, 199], "area": 31411}, {"id": 6382437, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 273], "area": 104408}], "file_name": "000000009769.png", "image_id": 9769}, {"segments_info": [{"id": 1974313, "category_id": 1, "iscrowd": 0, "bbox": [276, 231, 57, 125], "area": 4363}, {"id": 3825532, "category_id": 72, "iscrowd": 0, "bbox": [427, 91, 90, 96], "area": 6384}, {"id": 12439508, "category_id": 81, "iscrowd": 0, "bbox": [174, 380, 81, 16], "area": 980}, {"id": 12372168, "category_id": 81, "iscrowd": 0, "bbox": [323, 378, 85, 19], "area": 1180}, {"id": 1021987, "category_id": 100, "iscrowd": 0, "bbox": [448, 357, 24, 26], "area": 479}, {"id": 3757658, "category_id": 107, "iscrowd": 0, "bbox": [89, 344, 412, 68], "area": 13678}, {"id": 3901870, "category_id": 112, "iscrowd": 0, "bbox": [489, 107, 61, 533], "area": 22678}, {"id": 12443371, "category_id": 130, "iscrowd": 0, "bbox": [57, 75, 483, 179], "area": 11240}, {"id": 2518417, "category_id": 133, "iscrowd": 0, "bbox": [86, 91, 393, 291], "area": 81426}, {"id": 4424615, "category_id": 168, "iscrowd": 0, "bbox": [0, 266, 450, 271], "area": 9165}, {"id": 1660803, "category_id": 176, "iscrowd": 0, "bbox": [0, 54, 526, 586], "area": 70531}, {"id": 4555684, "category_id": 186, "iscrowd": 0, "bbox": [11, 0, 539, 117], "area": 24297}, {"id": 1855865, "category_id": 190, "iscrowd": 0, "bbox": [45, 497, 483, 143], "area": 33644}, {"id": 210019, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 550, 115], "area": 31192}, {"id": 9222866, "category_id": 200, "iscrowd": 0, "bbox": [147, 560, 278, 80], "area": 17062}], "file_name": "000000009772.png", "image_id": 9772}, {"segments_info": [{"id": 7238274, "category_id": 1, "iscrowd": 0, "bbox": [76, 106, 127, 180], "area": 8587}, {"id": 6845046, "category_id": 1, "iscrowd": 0, "bbox": [306, 113, 49, 42], "area": 961}, {"id": 4277319, "category_id": 1, "iscrowd": 0, "bbox": [438, 119, 38, 34], "area": 640}, {"id": 5987431, "category_id": 1, "iscrowd": 0, "bbox": [207, 93, 150, 324], "area": 23370}, {"id": 10659765, "category_id": 3, "iscrowd": 0, "bbox": [231, 152, 13, 46], "area": 362}, {"id": 10262459, "category_id": 3, "iscrowd": 0, "bbox": [159, 134, 50, 35], "area": 876}, {"id": 12369606, "category_id": 3, "iscrowd": 0, "bbox": [199, 130, 40, 59], "area": 1582}, {"id": 9210509, "category_id": 3, "iscrowd": 0, "bbox": [285, 80, 355, 220], "area": 50907}, {"id": 1777438, "category_id": 27, "iscrowd": 0, "bbox": [411, 294, 81, 89], "area": 4863}, {"id": 2567984, "category_id": 27, "iscrowd": 0, "bbox": [340, 286, 57, 27], "area": 1046}, {"id": 5396069, "category_id": 32, "iscrowd": 0, "bbox": [108, 137, 16, 51], "area": 393}, {"id": 3093815, "category_id": 33, "iscrowd": 0, "bbox": [415, 244, 78, 104], "area": 4413}, {"id": 2106662, "category_id": 33, "iscrowd": 0, "bbox": [175, 245, 136, 161], "area": 13684}, {"id": 8489114, "category_id": 100, "iscrowd": 0, "bbox": [69, 100, 36, 84], "area": 1705}, {"id": 7765126, "category_id": 149, "iscrowd": 0, "bbox": [157, 158, 86, 148], "area": 3457}, {"id": 7241360, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 117], "area": 51396}, {"id": 16250874, "category_id": 187, "iscrowd": 0, "bbox": [0, 69, 239, 90], "area": 7723}, {"id": 3949639, "category_id": 190, "iscrowd": 0, "bbox": [0, 162, 640, 318], "area": 101042}, {"id": 13159891, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 413, 225], "area": 13972}], "file_name": "000000009891.png", "image_id": 9891}, {"segments_info": [{"id": 2570064, "category_id": 49, "iscrowd": 0, "bbox": [435, 301, 157, 179], "area": 6124}, {"id": 8213582, "category_id": 51, "iscrowd": 0, "bbox": [133, 1, 124, 61], "area": 4414}, {"id": 2626083, "category_id": 51, "iscrowd": 0, "bbox": [2, 154, 198, 204], "area": 33838}, {"id": 4220302, "category_id": 54, "iscrowd": 0, "bbox": [529, 163, 108, 308], "area": 24504}, {"id": 4746650, "category_id": 54, "iscrowd": 0, "bbox": [153, 189, 339, 291], "area": 72905}, {"id": 5980208, "category_id": 67, "iscrowd": 0, "bbox": [432, 0, 208, 199], "area": 17528}, {"id": 4283518, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 554, 383], "area": 107154}], "file_name": "000000009914.png", "image_id": 9914}, {"segments_info": [{"id": 4281673, "category_id": 16, "iscrowd": 0, "bbox": [185, 104, 28, 37], "area": 437}, {"id": 2569571, "category_id": 62, "iscrowd": 0, "bbox": [538, 205, 102, 201], "area": 2819}, {"id": 2372985, "category_id": 62, "iscrowd": 0, "bbox": [580, 389, 60, 37], "area": 1825}, {"id": 7107699, "category_id": 65, "iscrowd": 0, "bbox": [94, 187, 345, 189], "area": 55313}, {"id": 3294847, "category_id": 67, "iscrowd": 0, "bbox": [546, 264, 94, 161], "area": 8329}, {"id": 8357785, "category_id": 109, "iscrowd": 0, "bbox": [0, 39, 614, 387], "area": 60894}, {"id": 1582910, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 616, 60], "area": 19264}, {"id": 10467523, "category_id": 181, "iscrowd": 0, "bbox": [0, 31, 640, 209], "area": 30018}, {"id": 2965613, "category_id": 189, "iscrowd": 0, "bbox": [151, 202, 376, 107], "area": 3078}, {"id": 5527404, "category_id": 190, "iscrowd": 0, "bbox": [539, 375, 12, 17], "area": 102}, {"id": 3102605, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 394], "area": 51377}], "file_name": "000000010092.png", "image_id": 10092}, {"segments_info": [{"id": 3619912, "category_id": 2, "iscrowd": 0, "bbox": [493, 0, 143, 53], "area": 4490}, {"id": 2172205, "category_id": 3, "iscrowd": 0, "bbox": [91, 27, 549, 334], "area": 120766}, {"id": 6906725, "category_id": 17, "iscrowd": 0, "bbox": [246, 108, 225, 136], "area": 16881}, {"id": 2828905, "category_id": 44, "iscrowd": 0, "bbox": [147, 29, 13, 37], "area": 408}, {"id": 5067882, "category_id": 100, "iscrowd": 0, "bbox": [177, 12, 151, 66], "area": 6462}, {"id": 3026228, "category_id": 107, "iscrowd": 0, "bbox": [57, 58, 22, 20], "area": 203}, {"id": 4871269, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 161, 245], "area": 15684}, {"id": 4999245, "category_id": 185, "iscrowd": 0, "bbox": [70, 0, 436, 67], "area": 15248}, {"id": 4740457, "category_id": 188, "iscrowd": 0, "bbox": [0, 57, 395, 229], "area": 24545}, {"id": 4081754, "category_id": 190, "iscrowd": 0, "bbox": [0, 180, 137, 181], "area": 9618}, {"id": 4867655, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 477, 132], "area": 6225}, {"id": 5525610, "category_id": 200, "iscrowd": 0, "bbox": [43, 190, 94, 83], "area": 3682}], "file_name": "000000010363.png", "image_id": 10363}, {"segments_info": [{"id": 8023674, "category_id": 49, "iscrowd": 0, "bbox": [475, 192, 137, 79], "area": 5160}, {"id": 4808329, "category_id": 54, "iscrowd": 0, "bbox": [90, 135, 389, 338], "area": 83089}, {"id": 6193859, "category_id": 54, "iscrowd": 0, "bbox": [221, 64, 219, 146], "area": 21581}, {"id": 9804958, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 236753}], "file_name": "000000010583.png", "image_id": 10583}, {"segments_info": [{"id": 3692454, "category_id": 1, "iscrowd": 0, "bbox": [423, 2, 178, 472], "area": 45503}, {"id": 1253455, "category_id": 1, "iscrowd": 0, "bbox": [228, 148, 169, 309], "area": 22488}, {"id": 922933, "category_id": 1, "iscrowd": 0, "bbox": [347, 188, 125, 264], "area": 18924}, {"id": 593960, "category_id": 27, "iscrowd": 0, "bbox": [74, 323, 90, 127], "area": 3381}, {"id": 2239860, "category_id": 44, "iscrowd": 0, "bbox": [163, 349, 19, 59], "area": 511}, {"id": 1977209, "category_id": 44, "iscrowd": 0, "bbox": [212, 330, 17, 61], "area": 757}, {"id": 4549770, "category_id": 47, "iscrowd": 0, "bbox": [122, 358, 27, 57], "area": 1151}, {"id": 1057370, "category_id": 47, "iscrowd": 0, "bbox": [126, 343, 26, 29], "area": 378}, {"id": 4423619, "category_id": 63, "iscrowd": 0, "bbox": [0, 202, 236, 225], "area": 18529}, {"id": 724116, "category_id": 63, "iscrowd": 0, "bbox": [533, 248, 107, 232], "area": 18650}, {"id": 2961819, "category_id": 67, "iscrowd": 0, "bbox": [104, 351, 204, 123], "area": 13837}, {"id": 2117775, "category_id": 73, "iscrowd": 0, "bbox": [125, 249, 75, 25], "area": 1096}, {"id": 5868504, "category_id": 75, "iscrowd": 0, "bbox": [429, 47, 18, 67], "area": 331}, {"id": 3105451, "category_id": 75, "iscrowd": 0, "bbox": [234, 364, 31, 31], "area": 517}, {"id": 1523838, "category_id": 75, "iscrowd": 0, "bbox": [193, 362, 20, 18], "area": 252}, {"id": 1644396, "category_id": 93, "iscrowd": 0, "bbox": [69, 186, 205, 186], "area": 17042}, {"id": 922949, "category_id": 118, "iscrowd": 0, "bbox": [14, 352, 438, 128], "area": 13769}, {"id": 1063298, "category_id": 156, "iscrowd": 0, "bbox": [0, 267, 60, 213], "area": 4627}, {"id": 8564696, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 221, 240], "area": 41000}, {"id": 1453941, "category_id": 181, "iscrowd": 0, "bbox": [92, 0, 145, 215], "area": 8050}, {"id": 1446740, "category_id": 189, "iscrowd": 0, "bbox": [114, 452, 88, 28], "area": 682}, {"id": 1254981, "category_id": 196, "iscrowd": 0, "bbox": [224, 282, 96, 93], "area": 3628}, {"id": 8179448, "category_id": 199, "iscrowd": 0, "bbox": [218, 0, 422, 240], "area": 59311}], "file_name": "000000010707.png", "image_id": 10707}, {"segments_info": [{"id": 5721674, "category_id": 1, "iscrowd": 0, "bbox": [219, 81, 265, 315], "area": 38593}, {"id": 1778208, "category_id": 40, "iscrowd": 0, "bbox": [389, 211, 95, 67], "area": 2862}, {"id": 3171126, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 273], "area": 142873}, {"id": 4345187, "category_id": 154, "iscrowd": 0, "bbox": [0, 240, 640, 184], "area": 86705}], "file_name": "000000010764.png", "image_id": 10764}, {"segments_info": [{"id": 9151671, "category_id": 70, "iscrowd": 0, "bbox": [241, 256, 59, 84], "area": 3880}, {"id": 7705518, "category_id": 81, "iscrowd": 0, "bbox": [345, 214, 73, 39], "area": 1401}, {"id": 5468300, "category_id": 107, "iscrowd": 0, "bbox": [296, 197, 121, 81], "area": 3987}, {"id": 13816789, "category_id": 109, "iscrowd": 0, "bbox": [263, 26, 61, 242], "area": 9505}, {"id": 4224690, "category_id": 112, "iscrowd": 0, "bbox": [0, 29, 500, 331], "area": 58276}, {"id": 6652596, "category_id": 133, "iscrowd": 0, "bbox": [377, 103, 45, 124], "area": 3283}, {"id": 9084882, "category_id": 176, "iscrowd": 0, "bbox": [88, 69, 188, 181], "area": 20554}, {"id": 15726329, "category_id": 181, "iscrowd": 0, "bbox": [153, 44, 87, 98], "area": 7445}, {"id": 1064063, "category_id": 188, "iscrowd": 0, "bbox": [293, 233, 128, 113], "area": 10676}, {"id": 7178129, "category_id": 190, "iscrowd": 0, "bbox": [112, 303, 181, 42], "area": 2967}, {"id": 12500401, "category_id": 199, "iscrowd": 0, "bbox": [80, 28, 346, 183], "area": 21980}, {"id": 6531468, "category_id": 200, "iscrowd": 0, "bbox": [110, 322, 116, 23], "area": 1458}], "file_name": "000000010977.png", "image_id": 10977}, {"segments_info": [{"id": 3031871, "category_id": 65, "iscrowd": 0, "bbox": [108, 213, 532, 262], "area": 95635}, {"id": 1714471, "category_id": 93, "iscrowd": 0, "bbox": [107, 360, 533, 120], "area": 4191}, {"id": 329483, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 326, 480], "area": 75666}, {"id": 396556, "category_id": 130, "iscrowd": 0, "bbox": [360, 100, 55, 116], "area": 3331}, {"id": 13949396, "category_id": 181, "iscrowd": 0, "bbox": [72, 0, 172, 339], "area": 45406}, {"id": 859170, "category_id": 199, "iscrowd": 0, "bbox": [110, 0, 530, 418], "area": 52412}], "file_name": "000000010995.png", "image_id": 10995}, {"segments_info": [{"id": 4480655, "category_id": 1, "iscrowd": 0, "bbox": [250, 77, 385, 459], "area": 84796}, {"id": 1712176, "category_id": 1, "iscrowd": 0, "bbox": [7, 2, 387, 526], "area": 123059}, {"id": 5995426, "category_id": 32, "iscrowd": 0, "bbox": [195, 198, 62, 226], "area": 6653}, {"id": 332580, "category_id": 181, "iscrowd": 0, "bbox": [352, 157, 97, 207], "area": 13914}, {"id": 7640250, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 536], "area": 110016}], "file_name": "000000011051.png", "image_id": 11051}, {"segments_info": [{"id": 6577553, "category_id": 13, "iscrowd": 0, "bbox": [250, 163, 80, 81], "area": 5176}, {"id": 4478795, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 441], "area": 64442}, {"id": 5991782, "category_id": 185, "iscrowd": 0, "bbox": [0, 88, 527, 392], "area": 171607}, {"id": 16579835, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 252, 89], "area": 17828}, {"id": 11249044, "category_id": 191, "iscrowd": 0, "bbox": [420, 396, 220, 84], "area": 9426}, {"id": 12171944, "category_id": 197, "iscrowd": 0, "bbox": [341, 0, 299, 254], "area": 11680}], "file_name": "000000011122.png", "image_id": 11122}, {"segments_info": [{"id": 9867409, "category_id": 1, "iscrowd": 0, "bbox": [418, 2, 82, 314], "area": 15945}, {"id": 6247508, "category_id": 1, "iscrowd": 0, "bbox": [0, 4, 75, 117], "area": 3566}, {"id": 7438193, "category_id": 2, "iscrowd": 0, "bbox": [88, 59, 111, 171], "area": 10380}, {"id": 6317137, "category_id": 2, "iscrowd": 0, "bbox": [198, 91, 225, 181], "area": 23090}, {"id": 9601908, "category_id": 4, "iscrowd": 0, "bbox": [0, 69, 137, 282], "area": 22751}, {"id": 5268049, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 314], "area": 39648}, {"id": 10786183, "category_id": 191, "iscrowd": 0, "bbox": [0, 173, 500, 202], "area": 51784}, {"id": 11977167, "category_id": 195, "iscrowd": 0, "bbox": [350, 95, 41, 22], "area": 552}, {"id": 11117711, "category_id": 199, "iscrowd": 0, "bbox": [26, 0, 474, 112], "area": 18690}], "file_name": "000000011149.png", "image_id": 11149}, {"segments_info": [{"id": 4280424, "category_id": 1, "iscrowd": 0, "bbox": [303, 119, 11, 12], "area": 109}, {"id": 2369322, "category_id": 1, "iscrowd": 0, "bbox": [18, 113, 26, 73], "area": 1405}, {"id": 2302495, "category_id": 1, "iscrowd": 0, "bbox": [569, 147, 22, 45], "area": 397}, {"id": 4668465, "category_id": 1, "iscrowd": 0, "bbox": [301, 129, 19, 116], "area": 1421}, {"id": 3812387, "category_id": 1, "iscrowd": 0, "bbox": [311, 112, 52, 141], "area": 3790}, {"id": 4080700, "category_id": 2, "iscrowd": 0, "bbox": [554, 163, 48, 28], "area": 484}, {"id": 3486540, "category_id": 3, "iscrowd": 0, "bbox": [400, 154, 86, 40], "area": 2355}, {"id": 4670788, "category_id": 3, "iscrowd": 0, "bbox": [172, 143, 40, 25], "area": 555}, {"id": 1382162, "category_id": 10, "iscrowd": 0, "bbox": [42, 94, 8, 16], "area": 96}, {"id": 526854, "category_id": 10, "iscrowd": 0, "bbox": [559, 107, 13, 10], "area": 130}, {"id": 5593154, "category_id": 10, "iscrowd": 0, "bbox": [220, 73, 10, 17], "area": 127}, {"id": 1251856, "category_id": 10, "iscrowd": 0, "bbox": [89, 95, 6, 11], "area": 59}, {"id": 4210990, "category_id": 10, "iscrowd": 0, "bbox": [180, 69, 8, 18], "area": 136}, {"id": 1711407, "category_id": 10, "iscrowd": 0, "bbox": [248, 20, 37, 38], "area": 728}, {"id": 1578770, "category_id": 27, "iscrowd": 0, "bbox": [580, 152, 15, 15], "area": 93}, {"id": 3813667, "category_id": 27, "iscrowd": 0, "bbox": [5, 141, 19, 33], "area": 401}, {"id": 2370610, "category_id": 130, "iscrowd": 0, "bbox": [420, 0, 23, 22], "area": 412}, {"id": 8488324, "category_id": 149, "iscrowd": 0, "bbox": [0, 165, 640, 262], "area": 51902}, {"id": 1649441, "category_id": 184, "iscrowd": 0, "bbox": [0, 29, 640, 160], "area": 26825}, {"id": 8816010, "category_id": 191, "iscrowd": 0, "bbox": [0, 148, 640, 279], "area": 67660}, {"id": 5725530, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 171], "area": 55456}], "file_name": "000000011197.png", "image_id": 11197}, {"segments_info": [{"id": 526601, "category_id": 1, "iscrowd": 0, "bbox": [1, 52, 61, 162], "area": 3740}, {"id": 4011052, "category_id": 1, "iscrowd": 0, "bbox": [140, 32, 50, 140], "area": 2685}, {"id": 1647127, "category_id": 1, "iscrowd": 0, "bbox": [36, 45, 50, 145], "area": 4074}, {"id": 4872252, "category_id": 1, "iscrowd": 0, "bbox": [90, 39, 40, 151], "area": 3722}, {"id": 1314573, "category_id": 4, "iscrowd": 0, "bbox": [485, 51, 45, 50], "area": 1259}, {"id": 10592412, "category_id": 15, "iscrowd": 0, "bbox": [38, 227, 277, 188], "area": 29585}, {"id": 5592404, "category_id": 31, "iscrowd": 0, "bbox": [449, 261, 67, 103], "area": 5181}, {"id": 6644575, "category_id": 31, "iscrowd": 0, "bbox": [287, 348, 111, 86], "area": 8756}, {"id": 4942679, "category_id": 31, "iscrowd": 0, "bbox": [90, 79, 12, 25], "area": 185}, {"id": 1386293, "category_id": 31, "iscrowd": 0, "bbox": [24, 96, 25, 53], "area": 857}, {"id": 12240330, "category_id": 175, "iscrowd": 0, "bbox": [302, 0, 68, 119], "area": 3674}, {"id": 657416, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 477, 192], "area": 32239}, {"id": 5197648, "category_id": 191, "iscrowd": 0, "bbox": [0, 69, 640, 395], "area": 119634}, {"id": 12896976, "category_id": 198, "iscrowd": 0, "bbox": [439, 195, 41, 47], "area": 1326}], "file_name": "000000011511.png", "image_id": 11511}, {"segments_info": [{"id": 4807784, "category_id": 8, "iscrowd": 0, "bbox": [290, 166, 65, 37], "area": 1639}, {"id": 2965559, "category_id": 184, "iscrowd": 0, "bbox": [0, 458, 480, 182], "area": 33426}, {"id": 15856112, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 565], "area": 47869}], "file_name": "000000011615.png", "image_id": 11615}, {"segments_info": [{"id": 6316384, "category_id": 1, "iscrowd": 0, "bbox": [193, 99, 239, 534], "area": 48761}, {"id": 5463424, "category_id": 1, "iscrowd": 0, "bbox": [6, 241, 51, 67], "area": 1579}, {"id": 3681423, "category_id": 1, "iscrowd": 0, "bbox": [61, 83, 162, 336], "area": 38599}, {"id": 3755101, "category_id": 31, "iscrowd": 0, "bbox": [9, 173, 119, 231], "area": 8370}, {"id": 4210499, "category_id": 31, "iscrowd": 0, "bbox": [257, 219, 110, 264], "area": 8437}, {"id": 2498590, "category_id": 33, "iscrowd": 0, "bbox": [1, 402, 278, 231], "area": 57574}, {"id": 9738145, "category_id": 144, "iscrowd": 0, "bbox": [198, 347, 31, 67], "area": 1168}, {"id": 5988708, "category_id": 181, "iscrowd": 0, "bbox": [333, 176, 147, 349], "area": 25339}, {"id": 5728148, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 267], "area": 80310}, {"id": 1979980, "category_id": 190, "iscrowd": 0, "bbox": [344, 414, 136, 226], "area": 19204}, {"id": 11647171, "category_id": 199, "iscrowd": 0, "bbox": [211, 321, 18, 37], "area": 356}], "file_name": "000000011699.png", "image_id": 11699}, {"segments_info": [{"id": 5331041, "category_id": 24, "iscrowd": 0, "bbox": [35, 99, 180, 289], "area": 27837}, {"id": 4673627, "category_id": 24, "iscrowd": 0, "bbox": [454, 88, 152, 330], "area": 30338}, {"id": 4607574, "category_id": 24, "iscrowd": 0, "bbox": [270, 101, 118, 295], "area": 20176}, {"id": 4211783, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 324], "area": 131385}, {"id": 4875627, "category_id": 193, "iscrowd": 0, "bbox": [0, 283, 640, 69], "area": 12464}, {"id": 6783383, "category_id": 194, "iscrowd": 0, "bbox": [0, 306, 640, 119], "area": 49155}], "file_name": "000000011760.png", "image_id": 11760}, {"segments_info": [{"id": 4672598, "category_id": 62, "iscrowd": 0, "bbox": [1, 333, 93, 58], "area": 3694}, {"id": 789773, "category_id": 73, "iscrowd": 0, "bbox": [0, 387, 168, 80], "area": 7016}, {"id": 5988971, "category_id": 189, "iscrowd": 0, "bbox": [234, 284, 99, 216], "area": 7877}, {"id": 6516344, "category_id": 190, "iscrowd": 0, "bbox": [0, 307, 333, 193], "area": 29532}, {"id": 13555678, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 333, 241], "area": 48456}], "file_name": "000000011813.png", "image_id": 11813}, {"segments_info": [{"id": 11779267, "category_id": 20, "iscrowd": 0, "bbox": [0, 175, 271, 247], "area": 27306}, {"id": 8158593, "category_id": 20, "iscrowd": 0, "bbox": [345, 293, 295, 125], "area": 28001}, {"id": 10462892, "category_id": 20, "iscrowd": 0, "bbox": [132, 70, 434, 209], "area": 62440}, {"id": 12631742, "category_id": 37, "iscrowd": 0, "bbox": [602, 59, 38, 73], "area": 1542}, {"id": 8618369, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 275], "area": 89208}], "file_name": "000000012062.png", "image_id": 12062}, {"segments_info": [{"id": 8686742, "category_id": 1, "iscrowd": 0, "bbox": [513, 77, 24, 23], "area": 330}, {"id": 5078165, "category_id": 1, "iscrowd": 0, "bbox": [569, 85, 18, 35], "area": 319}, {"id": 7634324, "category_id": 1, "iscrowd": 0, "bbox": [633, 104, 7, 20], "area": 79}, {"id": 3292560, "category_id": 1, "iscrowd": 0, "bbox": [519, 96, 17, 19], "area": 239}, {"id": 3423053, "category_id": 1, "iscrowd": 0, "bbox": [448, 77, 21, 28], "area": 283}, {"id": 6838637, "category_id": 1, "iscrowd": 0, "bbox": [4, 236, 57, 76], "area": 2650}, {"id": 6112107, "category_id": 1, "iscrowd": 0, "bbox": [482, 208, 65, 116], "area": 2802}, {"id": 3293789, "category_id": 1, "iscrowd": 0, "bbox": [556, 91, 16, 25], "area": 261}, {"id": 5001355, "category_id": 1, "iscrowd": 0, "bbox": [90, 113, 29, 65], "area": 805}, {"id": 7764614, "category_id": 1, "iscrowd": 0, "bbox": [483, 93, 22, 32], "area": 483}, {"id": 7763835, "category_id": 1, "iscrowd": 0, "bbox": [512, 124, 20, 18], "area": 189}, {"id": 3356998, "category_id": 1, "iscrowd": 0, "bbox": [534, 86, 25, 31], "area": 458}, {"id": 8555679, "category_id": 1, "iscrowd": 0, "bbox": [497, 76, 13, 26], "area": 234}, {"id": 5460829, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 639, 290], "area": 35533}, {"id": 7197366, "category_id": 37, "iscrowd": 0, "bbox": [389, 201, 5, 3], "area": 14}, {"id": 9998202, "category_id": 43, "iscrowd": 0, "bbox": [488, 220, 15, 19], "area": 130}, {"id": 9533799, "category_id": 43, "iscrowd": 0, "bbox": [104, 131, 24, 11], "area": 129}, {"id": 3224410, "category_id": 62, "iscrowd": 0, "bbox": [350, 8, 11, 12], "area": 61}, {"id": 4342846, "category_id": 62, "iscrowd": 0, "bbox": [132, 27, 17, 10], "area": 151}, {"id": 2369640, "category_id": 62, "iscrowd": 0, "bbox": [300, 8, 12, 13], "area": 112}, {"id": 7762785, "category_id": 62, "iscrowd": 0, "bbox": [472, 124, 9, 31], "area": 132}, {"id": 2106211, "category_id": 62, "iscrowd": 0, "bbox": [376, 9, 12, 13], "area": 117}, {"id": 2828836, "category_id": 62, "iscrowd": 0, "bbox": [375, 19, 11, 15], "area": 148}, {"id": 2369384, "category_id": 62, "iscrowd": 0, "bbox": [285, 7, 13, 15], "area": 141}, {"id": 2828828, "category_id": 62, "iscrowd": 0, "bbox": [360, 19, 12, 15], "area": 146}, {"id": 8019501, "category_id": 138, "iscrowd": 0, "bbox": [15, 182, 625, 93], "area": 27143}, {"id": 11107119, "category_id": 145, "iscrowd": 0, "bbox": [0, 119, 640, 309], "area": 144022}, {"id": 10461851, "category_id": 161, "iscrowd": 0, "bbox": [96, 0, 331, 41], "area": 1566}, {"id": 6837046, "category_id": 199, "iscrowd": 0, "bbox": [0, 17, 640, 172], "area": 54333}], "file_name": "000000012120.png", "image_id": 12120}, {"segments_info": [{"id": 3814968, "category_id": 1, "iscrowd": 0, "bbox": [143, 241, 49, 129], "area": 3410}, {"id": 5261629, "category_id": 1, "iscrowd": 0, "bbox": [340, 250, 14, 62], "area": 463}, {"id": 4933709, "category_id": 1, "iscrowd": 0, "bbox": [308, 281, 10, 17], "area": 132}, {"id": 7565431, "category_id": 33, "iscrowd": 0, "bbox": [174, 314, 50, 59], "area": 1587}, {"id": 7364441, "category_id": 72, "iscrowd": 0, "bbox": [1, 127, 56, 64], "area": 2930}, {"id": 9408391, "category_id": 112, "iscrowd": 0, "bbox": [309, 48, 171, 503], "area": 66579}, {"id": 7302245, "category_id": 161, "iscrowd": 0, "bbox": [269, 119, 125, 176], "area": 11409}, {"id": 9407624, "category_id": 185, "iscrowd": 0, "bbox": [206, 250, 104, 54], "area": 1910}, {"id": 7238000, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 186], "area": 66282}, {"id": 10330531, "category_id": 190, "iscrowd": 0, "bbox": [0, 263, 480, 377], "area": 126347}, {"id": 7170146, "category_id": 197, "iscrowd": 0, "bbox": [0, 160, 317, 136], "area": 24439}, {"id": 14605273, "category_id": 199, "iscrowd": 0, "bbox": [210, 179, 30, 39], "area": 791}], "file_name": "000000012280.png", "image_id": 12280}, {"segments_info": [{"id": 2959415, "category_id": 1, "iscrowd": 0, "bbox": [194, 15, 87, 137], "area": 7094}, {"id": 11775139, "category_id": 47, "iscrowd": 0, "bbox": [140, 203, 77, 143], "area": 8929}, {"id": 9668492, "category_id": 47, "iscrowd": 0, "bbox": [365, 211, 90, 167], "area": 12135}, {"id": 4077891, "category_id": 47, "iscrowd": 0, "bbox": [272, 119, 39, 75], "area": 2211}, {"id": 7690825, "category_id": 47, "iscrowd": 0, "bbox": [382, 113, 44, 58], "area": 2154}, {"id": 8552314, "category_id": 48, "iscrowd": 0, "bbox": [419, 372, 61, 70], "area": 1728}, {"id": 8486003, "category_id": 48, "iscrowd": 0, "bbox": [317, 288, 163, 24], "area": 885}, {"id": 5198170, "category_id": 48, "iscrowd": 0, "bbox": [5, 319, 138, 19], "area": 1043}, {"id": 10065510, "category_id": 49, "iscrowd": 0, "bbox": [289, 304, 191, 17], "area": 795}, {"id": 6841953, "category_id": 49, "iscrowd": 0, "bbox": [393, 403, 87, 90], "area": 1894}, {"id": 6780835, "category_id": 59, "iscrowd": 0, "bbox": [88, 173, 164, 54], "area": 3652}, {"id": 5005207, "category_id": 59, "iscrowd": 0, "bbox": [306, 191, 174, 43], "area": 3912}, {"id": 5401257, "category_id": 59, "iscrowd": 0, "bbox": [0, 376, 450, 264], "area": 98097}, {"id": 10919838, "category_id": 67, "iscrowd": 0, "bbox": [3, 101, 477, 523], "area": 95375}, {"id": 13279096, "category_id": 72, "iscrowd": 0, "bbox": [418, 42, 62, 83], "area": 4610}, {"id": 9211026, "category_id": 100, "iscrowd": 0, "bbox": [0, 308, 480, 332], "area": 1004}, {"id": 1248020, "category_id": 112, "iscrowd": 0, "bbox": [172, 0, 172, 140], "area": 13576}, {"id": 1970205, "category_id": 119, "iscrowd": 0, "bbox": [358, 62, 61, 47], "area": 1937}, {"id": 3808276, "category_id": 189, "iscrowd": 0, "bbox": [427, 113, 53, 48], "area": 1691}, {"id": 3289139, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 198], "area": 41284}], "file_name": "000000012576.png", "image_id": 12576}, {"segments_info": [{"id": 3757917, "category_id": 1, "iscrowd": 0, "bbox": [311, 135, 22, 81], "area": 1023}, {"id": 5655608, "category_id": 1, "iscrowd": 0, "bbox": [67, 173, 34, 58], "area": 1048}, {"id": 8423313, "category_id": 1, "iscrowd": 0, "bbox": [199, 205, 118, 314], "area": 19630}, {"id": 8488071, "category_id": 1, "iscrowd": 0, "bbox": [411, 125, 57, 168], "area": 6080}, {"id": 4409183, "category_id": 1, "iscrowd": 0, "bbox": [22, 310, 156, 246], "area": 21230}, {"id": 3620416, "category_id": 1, "iscrowd": 0, "bbox": [24, 202, 80, 54], "area": 1892}, {"id": 7108474, "category_id": 1, "iscrowd": 0, "bbox": [327, 171, 32, 49], "area": 830}, {"id": 4344906, "category_id": 1, "iscrowd": 0, "bbox": [87, 178, 27, 31], "area": 325}, {"id": 7636371, "category_id": 1, "iscrowd": 0, "bbox": [276, 194, 14, 11], "area": 108}, {"id": 5328973, "category_id": 1, "iscrowd": 0, "bbox": [99, 194, 48, 54], "area": 1542}, {"id": 4346201, "category_id": 1, "iscrowd": 0, "bbox": [122, 190, 32, 40], "area": 475}, {"id": 6120562, "category_id": 1, "iscrowd": 0, "bbox": [155, 194, 16, 37], "area": 343}, {"id": 5528689, "category_id": 1, "iscrowd": 0, "bbox": [170, 164, 31, 67], "area": 1488}, {"id": 5661555, "category_id": 1, "iscrowd": 1, "bbox": [22, 144, 288, 84], "area": 3276}, {"id": 11516589, "category_id": 39, "iscrowd": 0, "bbox": [231, 193, 20, 69], "area": 573}, {"id": 4742014, "category_id": 40, "iscrowd": 0, "bbox": [133, 349, 52, 50], "area": 1580}, {"id": 9674407, "category_id": 125, "iscrowd": 0, "bbox": [9, 267, 471, 373], "area": 120268}, {"id": 3099199, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 260], "area": 69895}, {"id": 6004625, "category_id": 193, "iscrowd": 0, "bbox": [0, 110, 480, 524], "area": 47295}], "file_name": "000000012639.png", "image_id": 12639}, {"segments_info": [{"id": 3371142, "category_id": 52, "iscrowd": 0, "bbox": [284, 49, 163, 241], "area": 14715}, {"id": 10526111, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 186809}, {"id": 13025986, "category_id": 195, "iscrowd": 0, "bbox": [472, 336, 168, 144], "area": 17166}, {"id": 4804951, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 112, 31], "area": 2173}], "file_name": "000000012667.png", "image_id": 12667}, {"segments_info": [{"id": 6972783, "category_id": 1, "iscrowd": 0, "bbox": [336, 290, 107, 132], "area": 10132}, {"id": 4144454, "category_id": 1, "iscrowd": 0, "bbox": [105, 119, 91, 179], "area": 8078}, {"id": 5394018, "category_id": 1, "iscrowd": 0, "bbox": [506, 103, 67, 99], "area": 4389}, {"id": 7040108, "category_id": 1, "iscrowd": 0, "bbox": [135, 263, 148, 159], "area": 13640}, {"id": 3746661, "category_id": 1, "iscrowd": 0, "bbox": [420, 163, 57, 130], "area": 3923}, {"id": 6516513, "category_id": 1, "iscrowd": 0, "bbox": [220, 156, 75, 183], "area": 9123}, {"id": 4018843, "category_id": 1, "iscrowd": 0, "bbox": [315, 173, 78, 86], "area": 2893}, {"id": 5259588, "category_id": 1, "iscrowd": 0, "bbox": [384, 219, 110, 196], "area": 9061}, {"id": 6178632, "category_id": 1, "iscrowd": 0, "bbox": [350, 74, 46, 95], "area": 1940}, {"id": 4671076, "category_id": 1, "iscrowd": 0, "bbox": [0, 269, 70, 154], "area": 8592}, {"id": 5131370, "category_id": 1, "iscrowd": 0, "bbox": [239, 263, 125, 165], "area": 10759}, {"id": 2301221, "category_id": 1, "iscrowd": 0, "bbox": [42, 231, 112, 197], "area": 15842}, {"id": 3616893, "category_id": 1, "iscrowd": 0, "bbox": [264, 46, 76, 196], "area": 7565}, {"id": 5655894, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 639, 428], "area": 124296}, {"id": 3285103, "category_id": 27, "iscrowd": 0, "bbox": [302, 74, 23, 33], "area": 237}, {"id": 5594936, "category_id": 27, "iscrowd": 0, "bbox": [556, 336, 73, 92], "area": 1505}, {"id": 4012589, "category_id": 27, "iscrowd": 0, "bbox": [286, 244, 20, 27], "area": 235}, {"id": 597627, "category_id": 27, "iscrowd": 0, "bbox": [325, 233, 6, 22], "area": 89}, {"id": 4010093, "category_id": 27, "iscrowd": 0, "bbox": [433, 230, 33, 47], "area": 216}, {"id": 4204834, "category_id": 27, "iscrowd": 0, "bbox": [0, 217, 52, 59], "area": 1677}, {"id": 2759963, "category_id": 27, "iscrowd": 0, "bbox": [550, 65, 29, 52], "area": 574}, {"id": 6116707, "category_id": 31, "iscrowd": 0, "bbox": [361, 389, 66, 39], "area": 580}, {"id": 6312265, "category_id": 31, "iscrowd": 0, "bbox": [522, 76, 20, 35], "area": 241}, {"id": 4078418, "category_id": 31, "iscrowd": 0, "bbox": [155, 365, 46, 63], "area": 682}, {"id": 7956828, "category_id": 31, "iscrowd": 0, "bbox": [312, 40, 13, 34], "area": 171}, {"id": 6724636, "category_id": 31, "iscrowd": 0, "bbox": [132, 193, 60, 112], "area": 1806}, {"id": 10193531, "category_id": 31, "iscrowd": 0, "bbox": [580, 132, 58, 92], "area": 674}, {"id": 4344490, "category_id": 77, "iscrowd": 0, "bbox": [130, 157, 11, 13], "area": 87}, {"id": 10073552, "category_id": 88, "iscrowd": 0, "bbox": [303, 213, 88, 136], "area": 5526}, {"id": 3418150, "category_id": 151, "iscrowd": 0, "bbox": [0, 12, 122, 55], "area": 2987}, {"id": 3421488, "category_id": 184, "iscrowd": 0, "bbox": [111, 0, 529, 85], "area": 14368}, {"id": 7498860, "category_id": 191, "iscrowd": 0, "bbox": [294, 198, 346, 230], "area": 1686}, {"id": 5325898, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 123, 34], "area": 1978}], "file_name": "000000012670.png", "image_id": 12670}, {"segments_info": [{"id": 4079972, "category_id": 1, "iscrowd": 0, "bbox": [221, 139, 259, 493], "area": 56935}, {"id": 8946053, "category_id": 1, "iscrowd": 0, "bbox": [217, 188, 263, 445], "area": 43320}, {"id": 2369328, "category_id": 19, "iscrowd": 0, "bbox": [1, 51, 239, 505], "area": 66014}, {"id": 7242387, "category_id": 112, "iscrowd": 0, "bbox": [191, 338, 16, 34], "area": 270}, {"id": 6521746, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 284, 640], "area": 52566}, {"id": 8681323, "category_id": 177, "iscrowd": 0, "bbox": [232, 0, 248, 627], "area": 18210}, {"id": 4345430, "category_id": 181, "iscrowd": 0, "bbox": [167, 157, 79, 185], "area": 7871}, {"id": 11716030, "category_id": 184, "iscrowd": 0, "bbox": [322, 103, 109, 120], "area": 5648}, {"id": 8891832, "category_id": 186, "iscrowd": 0, "bbox": [141, 0, 263, 173], "area": 29638}, {"id": 16513786, "category_id": 187, "iscrowd": 0, "bbox": [370, 4, 57, 162], "area": 4889}, {"id": 8626603, "category_id": 191, "iscrowd": 0, "bbox": [104, 533, 163, 107], "area": 11569}, {"id": 2633265, "category_id": 199, "iscrowd": 0, "bbox": [101, 489, 70, 89], "area": 3283}, {"id": 2830136, "category_id": 200, "iscrowd": 0, "bbox": [161, 498, 91, 73], "area": 2270}], "file_name": "000000012748.png", "image_id": 12748}, {"segments_info": [{"id": 8296619, "category_id": 52, "iscrowd": 0, "bbox": [45, 73, 298, 218], "area": 26664}, {"id": 5006460, "category_id": 67, "iscrowd": 0, "bbox": [1, 7, 374, 477], "area": 149089}, {"id": 3623776, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 11564}], "file_name": "000000013004.png", "image_id": 13004}, {"segments_info": [{"id": 7370094, "category_id": 1, "iscrowd": 0, "bbox": [302, 61, 314, 352], "area": 62371}, {"id": 6250585, "category_id": 2, "iscrowd": 0, "bbox": [270, 3, 111, 195], "area": 13611}, {"id": 8288371, "category_id": 4, "iscrowd": 0, "bbox": [0, 14, 241, 408], "area": 77880}, {"id": 5804994, "category_id": 100, "iscrowd": 0, "bbox": [414, 396, 54, 23], "area": 571}, {"id": 6254969, "category_id": 149, "iscrowd": 0, "bbox": [70, 333, 570, 94], "area": 16552}, {"id": 3291451, "category_id": 185, "iscrowd": 0, "bbox": [151, 0, 348, 66], "area": 11505}, {"id": 5202813, "category_id": 190, "iscrowd": 0, "bbox": [181, 147, 237, 211], "area": 25959}, {"id": 1909539, "category_id": 199, "iscrowd": 0, "bbox": [174, 50, 200, 112], "area": 9336}], "file_name": "000000013177.png", "image_id": 13177}, {"segments_info": [{"id": 3620164, "category_id": 1, "iscrowd": 0, "bbox": [93, 87, 227, 423], "area": 32322}, {"id": 6319474, "category_id": 41, "iscrowd": 0, "bbox": [108, 427, 68, 96], "area": 3722}, {"id": 1845803, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 157], "area": 38645}, {"id": 6978421, "category_id": 185, "iscrowd": 0, "bbox": [0, 68, 427, 410], "area": 74554}, {"id": 14607329, "category_id": 187, "iscrowd": 0, "bbox": [268, 0, 143, 105], "area": 9264}, {"id": 11188921, "category_id": 191, "iscrowd": 0, "bbox": [0, 445, 427, 195], "area": 53319}, {"id": 5410174, "category_id": 193, "iscrowd": 0, "bbox": [0, 305, 427, 246], "area": 61167}], "file_name": "000000013201.png", "image_id": 13201}, {"segments_info": [{"id": 6974067, "category_id": 1, "iscrowd": 0, "bbox": [159, 137, 84, 130], "area": 4971}, {"id": 9402735, "category_id": 1, "iscrowd": 0, "bbox": [42, 66, 124, 233], "area": 13637}, {"id": 5132131, "category_id": 1, "iscrowd": 0, "bbox": [238, 136, 80, 146], "area": 3870}, {"id": 8089704, "category_id": 1, "iscrowd": 0, "bbox": [293, 139, 206, 161], "area": 11414}, {"id": 11709082, "category_id": 34, "iscrowd": 0, "bbox": [218, 185, 32, 36], "area": 887}, {"id": 13217189, "category_id": 34, "iscrowd": 0, "bbox": [183, 196, 33, 36], "area": 957}, {"id": 13419440, "category_id": 34, "iscrowd": 0, "bbox": [90, 152, 46, 42], "area": 1507}, {"id": 13288153, "category_id": 34, "iscrowd": 0, "bbox": [253, 166, 41, 40], "area": 1277}, {"id": 2105375, "category_id": 128, "iscrowd": 0, "bbox": [144, 153, 42, 30], "area": 646}, {"id": 1579799, "category_id": 184, "iscrowd": 0, "bbox": [0, 145, 500, 44], "area": 4562}, {"id": 9928550, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 170], "area": 71558}, {"id": 2709841, "category_id": 193, "iscrowd": 0, "bbox": [0, 174, 500, 161], "area": 51289}], "file_name": "000000013291.png", "image_id": 13291}, {"segments_info": [{"id": 1118493, "category_id": 1, "iscrowd": 0, "bbox": [173, 240, 7, 11], "area": 51}, {"id": 2899303, "category_id": 1, "iscrowd": 0, "bbox": [350, 270, 6, 21], "area": 103}, {"id": 1381912, "category_id": 1, "iscrowd": 0, "bbox": [149, 245, 11, 10], "area": 53}, {"id": 2702390, "category_id": 1, "iscrowd": 0, "bbox": [125, 251, 4, 5], "area": 12}, {"id": 1054736, "category_id": 1, "iscrowd": 0, "bbox": [17, 280, 9, 13], "area": 63}, {"id": 3104085, "category_id": 1, "iscrowd": 0, "bbox": [117, 271, 12, 19], "area": 89}, {"id": 9737889, "category_id": 5, "iscrowd": 0, "bbox": [0, 142, 566, 144], "area": 30212}, {"id": 8090479, "category_id": 5, "iscrowd": 0, "bbox": [0, 229, 55, 18], "area": 722}, {"id": 6775651, "category_id": 8, "iscrowd": 0, "bbox": [16, 290, 24, 18], "area": 349}, {"id": 6513253, "category_id": 8, "iscrowd": 0, "bbox": [53, 270, 24, 14], "area": 244}, {"id": 7368304, "category_id": 8, "iscrowd": 0, "bbox": [77, 272, 26, 13], "area": 253}, {"id": 3814192, "category_id": 8, "iscrowd": 0, "bbox": [82, 255, 33, 18], "area": 222}, {"id": 7172991, "category_id": 149, "iscrowd": 0, "bbox": [335, 265, 28, 26], "area": 359}, {"id": 3093561, "category_id": 161, "iscrowd": 0, "bbox": [525, 247, 54, 32], "area": 855}, {"id": 1320226, "category_id": 184, "iscrowd": 0, "bbox": [521, 178, 119, 115], "area": 4280}, {"id": 12753018, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 242], "area": 127758}, {"id": 5790819, "category_id": 191, "iscrowd": 0, "bbox": [0, 232, 640, 195], "area": 101610}, {"id": 5923945, "category_id": 197, "iscrowd": 0, "bbox": [66, 186, 574, 93], "area": 4128}], "file_name": "000000013348.png", "image_id": 13348}, {"segments_info": [{"id": 3223087, "category_id": 1, "iscrowd": 0, "bbox": [456, 45, 19, 57], "area": 556}, {"id": 5398645, "category_id": 1, "iscrowd": 0, "bbox": [469, 5, 108, 253], "area": 8901}, {"id": 1185044, "category_id": 15, "iscrowd": 0, "bbox": [414, 108, 77, 25], "area": 829}, {"id": 4478312, "category_id": 15, "iscrowd": 0, "bbox": [103, 115, 74, 30], "area": 962}, {"id": 2239021, "category_id": 15, "iscrowd": 0, "bbox": [316, 110, 81, 25], "area": 814}, {"id": 5863316, "category_id": 15, "iscrowd": 0, "bbox": [205, 115, 94, 27], "area": 1005}, {"id": 4671825, "category_id": 41, "iscrowd": 0, "bbox": [510, 209, 40, 50], "area": 712}, {"id": 2370094, "category_id": 41, "iscrowd": 0, "bbox": [457, 99, 10, 3], "area": 15}, {"id": 3818312, "category_id": 149, "iscrowd": 0, "bbox": [0, 94, 13, 38], "area": 428}, {"id": 4215134, "category_id": 171, "iscrowd": 0, "bbox": [221, 0, 58, 85], "area": 2517}, {"id": 6455201, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 484, 84], "area": 16634}, {"id": 1186585, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 138], "area": 20207}, {"id": 7764869, "category_id": 191, "iscrowd": 0, "bbox": [0, 16, 640, 409], "area": 103887}, {"id": 2771787, "category_id": 193, "iscrowd": 0, "bbox": [0, 15, 640, 292], "area": 75417}, {"id": 10395811, "category_id": 199, "iscrowd": 0, "bbox": [490, 234, 150, 174], "area": 18783}], "file_name": "000000013546.png", "image_id": 13546}, {"segments_info": [{"id": 2968173, "category_id": 61, "iscrowd": 0, "bbox": [70, 30, 461, 390], "area": 82774}, {"id": 3706046, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 640, 420], "area": 27315}, {"id": 1582655, "category_id": 196, "iscrowd": 0, "bbox": [56, 158, 19, 22], "area": 286}], "file_name": "000000013597.png", "image_id": 13597}, {"segments_info": [{"id": 1382171, "category_id": 1, "iscrowd": 0, "bbox": [407, 10, 84, 141], "area": 7129}, {"id": 1118739, "category_id": 1, "iscrowd": 0, "bbox": [333, 94, 129, 171], "area": 6474}, {"id": 789518, "category_id": 1, "iscrowd": 0, "bbox": [519, 76, 120, 163], "area": 9037}, {"id": 4213586, "category_id": 1, "iscrowd": 0, "bbox": [159, 217, 221, 262], "area": 35732}, {"id": 1840144, "category_id": 1, "iscrowd": 0, "bbox": [480, 75, 39, 79], "area": 2000}, {"id": 9612473, "category_id": 47, "iscrowd": 0, "bbox": [89, 321, 30, 51], "area": 1165}, {"id": 2827039, "category_id": 62, "iscrowd": 0, "bbox": [282, 218, 50, 92], "area": 1980}, {"id": 2039343, "category_id": 62, "iscrowd": 0, "bbox": [189, 124, 89, 70], "area": 3243}, {"id": 3619125, "category_id": 62, "iscrowd": 0, "bbox": [306, 145, 93, 124], "area": 2549}, {"id": 7106405, "category_id": 62, "iscrowd": 0, "bbox": [365, 290, 123, 167], "area": 10247}, {"id": 1581357, "category_id": 62, "iscrowd": 0, "bbox": [482, 173, 88, 149], "area": 11565}, {"id": 461067, "category_id": 62, "iscrowd": 0, "bbox": [567, 161, 43, 123], "area": 1910}, {"id": 3354924, "category_id": 62, "iscrowd": 0, "bbox": [378, 416, 44, 58], "area": 1524}, {"id": 2040104, "category_id": 67, "iscrowd": 0, "bbox": [385, 145, 184, 137], "area": 11015}, {"id": 1779240, "category_id": 67, "iscrowd": 0, "bbox": [605, 217, 35, 135], "area": 1519}, {"id": 3618356, "category_id": 72, "iscrowd": 0, "bbox": [195, 79, 40, 37], "area": 1398}, {"id": 6704707, "category_id": 73, "iscrowd": 0, "bbox": [97, 254, 102, 82], "area": 3898}, {"id": 8351070, "category_id": 73, "iscrowd": 0, "bbox": [54, 349, 144, 112], "area": 6729}, {"id": 5662320, "category_id": 100, "iscrowd": 0, "bbox": [0, 89, 315, 391], "area": 19150}, {"id": 7703446, "category_id": 189, "iscrowd": 0, "bbox": [0, 100, 488, 380], "area": 28022}, {"id": 4682098, "category_id": 190, "iscrowd": 0, "bbox": [211, 171, 429, 309], "area": 47163}, {"id": 7961209, "category_id": 195, "iscrowd": 0, "bbox": [126, 14, 505, 188], "area": 4584}, {"id": 7698295, "category_id": 199, "iscrowd": 0, "bbox": [50, 0, 590, 195], "area": 56287}], "file_name": "000000013659.png", "image_id": 13659}, {"segments_info": [{"id": 7565176, "category_id": 1, "iscrowd": 0, "bbox": [253, 66, 83, 307], "area": 13806}, {"id": 7438224, "category_id": 1, "iscrowd": 0, "bbox": [359, 54, 133, 378], "area": 20833}, {"id": 11712202, "category_id": 1, "iscrowd": 0, "bbox": [78, 90, 182, 385], "area": 28082}, {"id": 7370119, "category_id": 1, "iscrowd": 0, "bbox": [153, 80, 76, 263], "area": 7343}, {"id": 3030103, "category_id": 44, "iscrowd": 0, "bbox": [540, 245, 12, 46], "area": 367}, {"id": 4280405, "category_id": 44, "iscrowd": 0, "bbox": [518, 242, 12, 41], "area": 368}, {"id": 7368817, "category_id": 47, "iscrowd": 0, "bbox": [615, 271, 11, 12], "area": 109}, {"id": 3943465, "category_id": 63, "iscrowd": 0, "bbox": [313, 207, 89, 133], "area": 7905}, {"id": 6130621, "category_id": 67, "iscrowd": 0, "bbox": [478, 369, 162, 110], "area": 11678}, {"id": 14277085, "category_id": 75, "iscrowd": 0, "bbox": [232, 142, 165, 138], "area": 267}, {"id": 9539214, "category_id": 75, "iscrowd": 0, "bbox": [247, 261, 15, 5], "area": 56}, {"id": 1711906, "category_id": 130, "iscrowd": 0, "bbox": [139, 49, 46, 28], "area": 699}, {"id": 5397348, "category_id": 180, "iscrowd": 0, "bbox": [142, 19, 347, 199], "area": 18869}, {"id": 3820125, "category_id": 188, "iscrowd": 0, "bbox": [0, 21, 565, 337], "area": 33220}, {"id": 2898782, "category_id": 189, "iscrowd": 0, "bbox": [500, 268, 140, 120], "area": 9469}, {"id": 11580599, "category_id": 195, "iscrowd": 0, "bbox": [540, 232, 38, 62], "area": 1083}, {"id": 7897739, "category_id": 196, "iscrowd": 0, "bbox": [572, 268, 65, 29], "area": 809}, {"id": 10857394, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 361], "area": 66294}, {"id": 7896196, "category_id": 200, "iscrowd": 0, "bbox": [0, 267, 575, 213], "area": 60941}], "file_name": "000000013729.png", "image_id": 13729}, {"segments_info": [{"id": 2378922, "category_id": 1, "iscrowd": 0, "bbox": [270, 282, 32, 86], "area": 1487}, {"id": 4826104, "category_id": 34, "iscrowd": 0, "bbox": [236, 210, 17, 17], "area": 235}, {"id": 4799554, "category_id": 154, "iscrowd": 0, "bbox": [0, 317, 640, 163], "area": 44745}, {"id": 5986413, "category_id": 155, "iscrowd": 0, "bbox": [0, 298, 640, 182], "area": 66820}, {"id": 11316131, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 310], "area": 193810}], "file_name": "000000013774.png", "image_id": 13774}, {"segments_info": [{"id": 6259380, "category_id": 44, "iscrowd": 0, "bbox": [413, 79, 9, 31], "area": 121}, {"id": 6327211, "category_id": 44, "iscrowd": 0, "bbox": [419, 76, 13, 32], "area": 217}, {"id": 12305894, "category_id": 51, "iscrowd": 0, "bbox": [531, 117, 30, 68], "area": 1561}, {"id": 7036254, "category_id": 51, "iscrowd": 0, "bbox": [566, 34, 50, 89], "area": 2951}, {"id": 9987957, "category_id": 51, "iscrowd": 0, "bbox": [610, 128, 30, 100], "area": 2439}, {"id": 9018818, "category_id": 62, "iscrowd": 0, "bbox": [214, 233, 122, 137], "area": 6797}, {"id": 4080824, "category_id": 62, "iscrowd": 0, "bbox": [244, 287, 93, 123], "area": 7015}, {"id": 2829484, "category_id": 62, "iscrowd": 0, "bbox": [240, 369, 99, 58], "area": 2119}, {"id": 4211115, "category_id": 62, "iscrowd": 0, "bbox": [447, 313, 124, 109], "area": 5704}, {"id": 8424350, "category_id": 62, "iscrowd": 0, "bbox": [407, 244, 85, 94], "area": 4826}, {"id": 10467019, "category_id": 63, "iscrowd": 0, "bbox": [15, 201, 164, 126], "area": 11652}, {"id": 6786183, "category_id": 64, "iscrowd": 0, "bbox": [358, 280, 61, 89], "area": 2010}, {"id": 5939584, "category_id": 64, "iscrowd": 0, "bbox": [290, 140, 25, 61], "area": 754}, {"id": 6795477, "category_id": 64, "iscrowd": 0, "bbox": [429, 202, 29, 69], "area": 580}, {"id": 8422785, "category_id": 64, "iscrowd": 0, "bbox": [261, 153, 18, 48], "area": 466}, {"id": 14148588, "category_id": 67, "iscrowd": 0, "bbox": [308, 326, 192, 97], "area": 13805}, {"id": 3680799, "category_id": 72, "iscrowd": 0, "bbox": [339, 143, 68, 68], "area": 3534}, {"id": 11912408, "category_id": 86, "iscrowd": 0, "bbox": [438, 238, 14, 33], "area": 348}, {"id": 12574171, "category_id": 86, "iscrowd": 0, "bbox": [382, 332, 20, 36], "area": 613}, {"id": 6734824, "category_id": 93, "iscrowd": 0, "bbox": [97, 199, 18, 10], "area": 87}, {"id": 11780824, "category_id": 112, "iscrowd": 0, "bbox": [164, 78, 93, 180], "area": 4903}, {"id": 3754119, "category_id": 118, "iscrowd": 0, "bbox": [0, 313, 414, 114], "area": 13562}, {"id": 11255267, "category_id": 130, "iscrowd": 0, "bbox": [117, 132, 355, 85], "area": 2357}, {"id": 3288893, "category_id": 156, "iscrowd": 0, "bbox": [333, 154, 91, 130], "area": 5419}, {"id": 5269418, "category_id": 177, "iscrowd": 0, "bbox": [233, 234, 47, 19], "area": 441}, {"id": 14738916, "category_id": 181, "iscrowd": 0, "bbox": [167, 39, 241, 171], "area": 22608}, {"id": 11189453, "category_id": 186, "iscrowd": 0, "bbox": [95, 0, 333, 21], "area": 5807}, {"id": 3421504, "category_id": 189, "iscrowd": 0, "bbox": [0, 201, 463, 157], "area": 7657}, {"id": 13031136, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 119557}, {"id": 3816526, "category_id": 200, "iscrowd": 0, "bbox": [0, 254, 408, 173], "area": 18089}], "file_name": "000000013923.png", "image_id": 13923}, {"segments_info": [{"id": 1778991, "category_id": 17, "iscrowd": 0, "bbox": [340, 154, 77, 144], "area": 6371}, {"id": 3284507, "category_id": 82, "iscrowd": 0, "bbox": [301, 256, 286, 166], "area": 34545}, {"id": 16579321, "category_id": 130, "iscrowd": 0, "bbox": [403, 0, 124, 90], "area": 5774}, {"id": 4082006, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 289], "area": 102772}, {"id": 11645873, "category_id": 188, "iscrowd": 0, "bbox": [0, 30, 323, 396], "area": 99863}, {"id": 1448741, "category_id": 199, "iscrowd": 0, "bbox": [301, 153, 339, 273], "area": 20109}], "file_name": "000000014007.png", "image_id": 14007}, {"segments_info": [{"id": 7831959, "category_id": 44, "iscrowd": 0, "bbox": [47, 106, 10, 18], "area": 91}, {"id": 9150644, "category_id": 44, "iscrowd": 0, "bbox": [76, 103, 16, 25], "area": 241}, {"id": 8032157, "category_id": 44, "iscrowd": 0, "bbox": [237, 292, 22, 20], "area": 249}, {"id": 4947875, "category_id": 62, "iscrowd": 0, "bbox": [563, 287, 77, 28], "area": 730}, {"id": 5071991, "category_id": 63, "iscrowd": 0, "bbox": [169, 215, 64, 29], "area": 941}, {"id": 5139061, "category_id": 64, "iscrowd": 0, "bbox": [497, 39, 59, 93], "area": 1826}, {"id": 4612213, "category_id": 65, "iscrowd": 0, "bbox": [303, 187, 53, 73], "area": 2560}, {"id": 5417671, "category_id": 67, "iscrowd": 0, "bbox": [500, 303, 140, 119], "area": 12179}, {"id": 1317149, "category_id": 72, "iscrowd": 0, "bbox": [470, 187, 34, 69], "area": 1889}, {"id": 998988, "category_id": 77, "iscrowd": 0, "bbox": [581, 407, 31, 20], "area": 466}, {"id": 1449764, "category_id": 78, "iscrowd": 0, "bbox": [161, 286, 73, 39], "area": 2690}, {"id": 9741488, "category_id": 82, "iscrowd": 0, "bbox": [18, 153, 130, 269], "area": 26011}, {"id": 6386305, "category_id": 84, "iscrowd": 0, "bbox": [502, 287, 42, 13], "area": 172}, {"id": 3358287, "category_id": 84, "iscrowd": 0, "bbox": [503, 311, 37, 34], "area": 933}, {"id": 5597322, "category_id": 84, "iscrowd": 0, "bbox": [501, 284, 42, 12], "area": 197}, {"id": 4938851, "category_id": 84, "iscrowd": 0, "bbox": [519, 246, 21, 4], "area": 63}, {"id": 6319225, "category_id": 84, "iscrowd": 0, "bbox": [508, 201, 42, 10], "area": 211}, {"id": 3754070, "category_id": 84, "iscrowd": 0, "bbox": [509, 168, 41, 5], "area": 110}, {"id": 3162445, "category_id": 84, "iscrowd": 0, "bbox": [499, 210, 52, 12], "area": 263}, {"id": 5927296, "category_id": 84, "iscrowd": 0, "bbox": [508, 271, 36, 13], "area": 243}, {"id": 8031388, "category_id": 84, "iscrowd": 0, "bbox": [519, 240, 24, 6], "area": 72}, {"id": 5661067, "category_id": 84, "iscrowd": 0, "bbox": [504, 275, 35, 16], "area": 266}, {"id": 5070184, "category_id": 84, "iscrowd": 0, "bbox": [506, 172, 48, 6], "area": 176}, {"id": 5926789, "category_id": 84, "iscrowd": 0, "bbox": [502, 292, 43, 15], "area": 114}, {"id": 4148052, "category_id": 84, "iscrowd": 1, "bbox": [497, 100, 72, 213], "area": 7119}, {"id": 4743021, "category_id": 109, "iscrowd": 0, "bbox": [268, 87, 108, 105], "area": 8144}, {"id": 2641006, "category_id": 118, "iscrowd": 0, "bbox": [263, 237, 276, 190], "area": 28078}, {"id": 8164253, "category_id": 130, "iscrowd": 0, "bbox": [326, 0, 314, 300], "area": 7599}, {"id": 8758453, "category_id": 186, "iscrowd": 0, "bbox": [132, 0, 381, 81], "area": 20558}, {"id": 5006200, "category_id": 188, "iscrowd": 0, "bbox": [12, 0, 302, 416], "area": 24460}, {"id": 2305594, "category_id": 189, "iscrowd": 0, "bbox": [401, 186, 239, 241], "area": 2871}, {"id": 11189198, "category_id": 195, "iscrowd": 0, "bbox": [250, 253, 24, 20], "area": 284}, {"id": 7640744, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 93244}, {"id": 4940914, "category_id": 200, "iscrowd": 0, "bbox": [134, 274, 278, 153], "area": 10809}], "file_name": "000000014038.png", "image_id": 14038}, {"segments_info": [{"id": 3094581, "category_id": 1, "iscrowd": 0, "bbox": [209, 31, 333, 333], "area": 52973}, {"id": 8884101, "category_id": 53, "iscrowd": 0, "bbox": [312, 290, 22, 22], "area": 271}, {"id": 3161157, "category_id": 62, "iscrowd": 0, "bbox": [596, 28, 44, 203], "area": 6967}, {"id": 1053460, "category_id": 62, "iscrowd": 0, "bbox": [0, 357, 86, 118], "area": 7048}, {"id": 3029310, "category_id": 62, "iscrowd": 0, "bbox": [59, 400, 167, 72], "area": 5449}, {"id": 8424846, "category_id": 62, "iscrowd": 0, "bbox": [395, 17, 198, 253], "area": 20014}, {"id": 4474953, "category_id": 67, "iscrowd": 0, "bbox": [154, 296, 486, 174], "area": 46032}, {"id": 5594194, "category_id": 73, "iscrowd": 0, "bbox": [222, 237, 213, 133], "area": 15370}, {"id": 11914958, "category_id": 147, "iscrowd": 0, "bbox": [0, 0, 373, 325], "area": 78429}, {"id": 2369324, "category_id": 189, "iscrowd": 0, "bbox": [466, 471, 174, 9], "area": 1566}, {"id": 197634, "category_id": 190, "iscrowd": 0, "bbox": [394, 214, 216, 266], "area": 1701}, {"id": 4213829, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 52611}], "file_name": "000000014226.png", "image_id": 14226}, {"segments_info": [{"id": 4341613, "category_id": 3, "iscrowd": 0, "bbox": [75, 228, 13, 10], "area": 108}, {"id": 3420979, "category_id": 7, "iscrowd": 0, "bbox": [186, 259, 454, 125], "area": 20590}, {"id": 10198175, "category_id": 95, "iscrowd": 0, "bbox": [61, 117, 579, 119], "area": 24481}, {"id": 4870229, "category_id": 125, "iscrowd": 0, "bbox": [181, 276, 382, 151], "area": 8250}, {"id": 4673883, "category_id": 144, "iscrowd": 0, "bbox": [525, 362, 115, 50], "area": 2091}, {"id": 4343628, "category_id": 147, "iscrowd": 0, "bbox": [113, 227, 527, 200], "area": 23505}, {"id": 7633535, "category_id": 149, "iscrowd": 0, "bbox": [44, 222, 283, 205], "area": 26764}, {"id": 3946553, "category_id": 184, "iscrowd": 0, "bbox": [218, 132, 422, 70], "area": 7648}, {"id": 13615028, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 181], "area": 100491}, {"id": 3223342, "category_id": 191, "iscrowd": 0, "bbox": [0, 291, 84, 136], "area": 7158}, {"id": 5657430, "category_id": 192, "iscrowd": 0, "bbox": [196, 147, 351, 91], "area": 6792}, {"id": 5461077, "category_id": 197, "iscrowd": 0, "bbox": [0, 166, 640, 231], "area": 35506}, {"id": 7238259, "category_id": 199, "iscrowd": 0, "bbox": [63, 330, 52, 97], "area": 2178}], "file_name": "000000014380.png", "image_id": 14380}, {"segments_info": [{"id": 3818311, "category_id": 1, "iscrowd": 0, "bbox": [280, 80, 18, 31], "area": 267}, {"id": 2107939, "category_id": 1, "iscrowd": 0, "bbox": [506, 114, 92, 158], "area": 5209}, {"id": 5658691, "category_id": 1, "iscrowd": 0, "bbox": [413, 90, 94, 199], "area": 7646}, {"id": 3027236, "category_id": 1, "iscrowd": 0, "bbox": [188, 45, 13, 16], "area": 136}, {"id": 2443323, "category_id": 1, "iscrowd": 0, "bbox": [25, 117, 40, 38], "area": 842}, {"id": 2438460, "category_id": 1, "iscrowd": 0, "bbox": [328, 39, 19, 41], "area": 372}, {"id": 2433298, "category_id": 1, "iscrowd": 0, "bbox": [269, 90, 30, 79], "area": 1476}, {"id": 7691320, "category_id": 1, "iscrowd": 0, "bbox": [165, 82, 34, 85], "area": 1632}, {"id": 2513985, "category_id": 1, "iscrowd": 0, "bbox": [104, 45, 24, 48], "area": 482}, {"id": 7504747, "category_id": 1, "iscrowd": 0, "bbox": [170, 47, 8, 14], "area": 88}, {"id": 2306104, "category_id": 1, "iscrowd": 0, "bbox": [364, 58, 18, 56], "area": 622}, {"id": 3295590, "category_id": 1, "iscrowd": 0, "bbox": [378, 40, 18, 43], "area": 368}, {"id": 6447189, "category_id": 1, "iscrowd": 0, "bbox": [579, 113, 35, 86], "area": 1532}, {"id": 5142379, "category_id": 1, "iscrowd": 1, "bbox": [155, 7, 448, 171], "area": 3991}, {"id": 1713179, "category_id": 27, "iscrowd": 0, "bbox": [101, 155, 19, 15], "area": 197}, {"id": 8415313, "category_id": 27, "iscrowd": 0, "bbox": [87, 156, 17, 16], "area": 152}, {"id": 1578251, "category_id": 27, "iscrowd": 0, "bbox": [58, 155, 35, 19], "area": 511}, {"id": 1254178, "category_id": 27, "iscrowd": 0, "bbox": [64, 133, 21, 21], "area": 305}, {"id": 9339241, "category_id": 38, "iscrowd": 0, "bbox": [163, 86, 459, 254], "area": 24287}, {"id": 796558, "category_id": 62, "iscrowd": 0, "bbox": [76, 122, 24, 31], "area": 333}, {"id": 5145175, "category_id": 62, "iscrowd": 0, "bbox": [98, 131, 20, 25], "area": 326}, {"id": 6982276, "category_id": 138, "iscrowd": 0, "bbox": [16, 17, 35, 27], "area": 487}, {"id": 3630427, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 37], "area": 15481}, {"id": 1674097, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 404], "area": 178383}, {"id": 7052453, "category_id": 194, "iscrowd": 0, "bbox": [0, 74, 640, 40], "area": 10407}], "file_name": "000000014439.png", "image_id": 14439}, {"segments_info": [{"id": 5794726, "category_id": 1, "iscrowd": 0, "bbox": [202, 259, 18, 36], "area": 426}, {"id": 4874140, "category_id": 1, "iscrowd": 0, "bbox": [78, 246, 16, 27], "area": 290}, {"id": 4151964, "category_id": 1, "iscrowd": 0, "bbox": [320, 271, 16, 43], "area": 372}, {"id": 4873886, "category_id": 1, "iscrowd": 0, "bbox": [120, 246, 17, 35], "area": 375}, {"id": 4681889, "category_id": 1, "iscrowd": 0, "bbox": [157, 254, 16, 33], "area": 255}, {"id": 5136033, "category_id": 1, "iscrowd": 0, "bbox": [277, 270, 21, 37], "area": 450}, {"id": 5073592, "category_id": 1, "iscrowd": 0, "bbox": [26, 225, 13, 36], "area": 305}, {"id": 4013141, "category_id": 7, "iscrowd": 0, "bbox": [0, 155, 593, 153], "area": 43223}, {"id": 7305601, "category_id": 147, "iscrowd": 0, "bbox": [0, 205, 640, 208], "area": 51714}, {"id": 2570555, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 79], "area": 17537}, {"id": 10462093, "category_id": 187, "iscrowd": 0, "bbox": [326, 0, 314, 35], "area": 5651}, {"id": 4216397, "category_id": 192, "iscrowd": 0, "bbox": [134, 0, 310, 36], "area": 4149}, {"id": 4615794, "category_id": 193, "iscrowd": 0, "bbox": [0, 29, 640, 278], "area": 88911}], "file_name": "000000014473.png", "image_id": 14473}, {"segments_info": [{"id": 5594996, "category_id": 17, "iscrowd": 0, "bbox": [1, 235, 479, 404], "area": 185760}, {"id": 7437960, "category_id": 65, "iscrowd": 0, "bbox": [0, 0, 480, 269], "area": 119325}], "file_name": "000000014831.png", "image_id": 14831}, {"segments_info": [{"id": 2766656, "category_id": 21, "iscrowd": 0, "bbox": [0, 3, 639, 438], "area": 146843}], "file_name": "000000014888.png", "image_id": 14888}, {"segments_info": [{"id": 592395, "category_id": 49, "iscrowd": 0, "bbox": [453, 10, 175, 375], "area": 15592}, {"id": 2442325, "category_id": 54, "iscrowd": 0, "bbox": [55, 104, 329, 248], "area": 58808}, {"id": 4285299, "category_id": 54, "iscrowd": 0, "bbox": [203, 8, 274, 215], "area": 35865}, {"id": 1258302, "category_id": 189, "iscrowd": 0, "bbox": [19, 80, 621, 114], "area": 3599}, {"id": 257, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 178], "area": 49874}], "file_name": "000000015079.png", "image_id": 15079}, {"segments_info": [{"id": 3615286, "category_id": 50, "iscrowd": 0, "bbox": [525, 28, 98, 371], "area": 7469}, {"id": 3631200, "category_id": 51, "iscrowd": 0, "bbox": [381, 163, 211, 228], "area": 41054}, {"id": 4348318, "category_id": 51, "iscrowd": 0, "bbox": [2, 166, 377, 218], "area": 75039}, {"id": 3099511, "category_id": 51, "iscrowd": 0, "bbox": [63, 9, 307, 159], "area": 44476}, {"id": 1790950, "category_id": 57, "iscrowd": 0, "bbox": [379, 12, 28, 144], "area": 2697}, {"id": 2582518, "category_id": 57, "iscrowd": 0, "bbox": [398, 22, 43, 144], "area": 4025}, {"id": 1199075, "category_id": 57, "iscrowd": 0, "bbox": [376, 9, 148, 152], "area": 8538}, {"id": 411850, "category_id": 57, "iscrowd": 0, "bbox": [473, 28, 48, 132], "area": 2557}, {"id": 3433361, "category_id": 130, "iscrowd": 0, "bbox": [48, 30, 22, 13], "area": 207}, {"id": 198923, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 31858}], "file_name": "000000015254.png", "image_id": 15254}, {"segments_info": [{"id": 5657438, "category_id": 10, "iscrowd": 0, "bbox": [42, 39, 234, 98], "area": 19357}, {"id": 7634577, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 424, 640], "area": 251847}], "file_name": "000000015272.png", "image_id": 15272}, {"segments_info": [{"id": 3037780, "category_id": 56, "iscrowd": 0, "bbox": [0, 40, 640, 433], "area": 205928}, {"id": 4811685, "category_id": 196, "iscrowd": 0, "bbox": [34, 0, 557, 480], "area": 51811}], "file_name": "000000015278.png", "image_id": 15278}, {"segments_info": [{"id": 6902157, "category_id": 1, "iscrowd": 0, "bbox": [237, 46, 100, 108], "area": 5951}, {"id": 3088945, "category_id": 1, "iscrowd": 0, "bbox": [541, 21, 75, 142], "area": 2984}, {"id": 918803, "category_id": 1, "iscrowd": 0, "bbox": [1, 72, 212, 376], "area": 51918}, {"id": 10194325, "category_id": 1, "iscrowd": 0, "bbox": [363, 102, 24, 28], "area": 458}, {"id": 3155320, "category_id": 1, "iscrowd": 0, "bbox": [554, 24, 37, 63], "area": 650}, {"id": 1774894, "category_id": 1, "iscrowd": 0, "bbox": [366, 15, 274, 459], "area": 56187}, {"id": 1771332, "category_id": 1, "iscrowd": 0, "bbox": [509, 35, 49, 130], "area": 4518}, {"id": 3354427, "category_id": 1, "iscrowd": 0, "bbox": [160, 67, 78, 84], "area": 5700}, {"id": 788000, "category_id": 1, "iscrowd": 0, "bbox": [174, 139, 208, 336], "area": 44115}, {"id": 1904955, "category_id": 1, "iscrowd": 0, "bbox": [344, 54, 167, 111], "area": 9774}, {"id": 7570350, "category_id": 1, "iscrowd": 0, "bbox": [536, 22, 30, 45], "area": 698}, {"id": 4478295, "category_id": 47, "iscrowd": 0, "bbox": [600, 423, 40, 57], "area": 2164}, {"id": 1510448, "category_id": 51, "iscrowd": 0, "bbox": [0, 430, 99, 50], "area": 4290}, {"id": 721669, "category_id": 63, "iscrowd": 0, "bbox": [2, 143, 545, 175], "area": 22424}, {"id": 1049356, "category_id": 77, "iscrowd": 0, "bbox": [2, 307, 45, 16], "area": 387}, {"id": 1509386, "category_id": 189, "iscrowd": 0, "bbox": [236, 384, 390, 96], "area": 8162}, {"id": 3366256, "category_id": 195, "iscrowd": 0, "bbox": [23, 370, 570, 110], "area": 17565}, {"id": 2839444, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 557, 158], "area": 34477}], "file_name": "000000015335.png", "image_id": 15335}, {"segments_info": [{"id": 6705210, "category_id": 3, "iscrowd": 0, "bbox": [0, 187, 33, 28], "area": 786}, {"id": 4602416, "category_id": 3, "iscrowd": 0, "bbox": [140, 209, 50, 13], "area": 492}, {"id": 2633778, "category_id": 6, "iscrowd": 0, "bbox": [445, 172, 91, 100], "area": 8230}, {"id": 5919050, "category_id": 6, "iscrowd": 0, "bbox": [265, 201, 84, 59], "area": 3881}, {"id": 4207658, "category_id": 8, "iscrowd": 0, "bbox": [68, 186, 77, 36], "area": 2049}, {"id": 3551026, "category_id": 149, "iscrowd": 0, "bbox": [0, 252, 281, 37], "area": 4036}, {"id": 5132625, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 308], "area": 51269}, {"id": 16053232, "category_id": 187, "iscrowd": 0, "bbox": [29, 0, 611, 102], "area": 15919}, {"id": 8554382, "category_id": 191, "iscrowd": 0, "bbox": [0, 238, 640, 186], "area": 96795}, {"id": 7169375, "category_id": 197, "iscrowd": 0, "bbox": [13, 0, 501, 260], "area": 80858}, {"id": 4799278, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 50, 211], "area": 6428}], "file_name": "000000015338.png", "image_id": 15338}, {"segments_info": [{"id": 5393787, "category_id": 6, "iscrowd": 0, "bbox": [192, 183, 70, 78], "area": 4518}, {"id": 5982094, "category_id": 6, "iscrowd": 0, "bbox": [114, 192, 31, 62], "area": 1489}, {"id": 5860559, "category_id": 13, "iscrowd": 0, "bbox": [116, 116, 113, 107], "area": 9067}, {"id": 8100020, "category_id": 149, "iscrowd": 0, "bbox": [0, 173, 404, 467], "area": 123191}, {"id": 2514535, "category_id": 184, "iscrowd": 0, "bbox": [271, 159, 133, 153], "area": 11975}, {"id": 4408143, "category_id": 191, "iscrowd": 0, "bbox": [74, 542, 322, 24], "area": 4824}, {"id": 2245207, "category_id": 193, "iscrowd": 0, "bbox": [78, 478, 326, 72], "area": 16199}, {"id": 7376036, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 404, 244], "area": 68724}, {"id": 4019293, "category_id": 199, "iscrowd": 0, "bbox": [283, 219, 121, 103], "area": 1862}], "file_name": "000000015440.png", "image_id": 15440}, {"segments_info": [{"id": 5001057, "category_id": 17, "iscrowd": 0, "bbox": [32, 20, 452, 434], "area": 113657}, {"id": 724237, "category_id": 63, "iscrowd": 0, "bbox": [0, 1, 640, 479], "area": 162192}, {"id": 5466247, "category_id": 74, "iscrowd": 0, "bbox": [148, 337, 98, 119], "area": 8251}], "file_name": "000000015497.png", "image_id": 15497}, {"segments_info": [{"id": 5393992, "category_id": 6, "iscrowd": 0, "bbox": [0, 306, 128, 57], "area": 5132}, {"id": 9669508, "category_id": 6, "iscrowd": 0, "bbox": [116, 263, 56, 20], "area": 813}, {"id": 8222575, "category_id": 6, "iscrowd": 0, "bbox": [339, 263, 64, 20], "area": 972}, {"id": 8613732, "category_id": 6, "iscrowd": 0, "bbox": [433, 283, 83, 30], "area": 1055}, {"id": 4806477, "category_id": 6, "iscrowd": 0, "bbox": [163, 322, 185, 85], "area": 11149}, {"id": 8157037, "category_id": 6, "iscrowd": 0, "bbox": [274, 263, 64, 13], "area": 729}, {"id": 8748405, "category_id": 6, "iscrowd": 0, "bbox": [322, 285, 93, 21], "area": 1036}, {"id": 7364953, "category_id": 6, "iscrowd": 0, "bbox": [231, 276, 88, 27], "area": 2027}, {"id": 7561042, "category_id": 6, "iscrowd": 0, "bbox": [146, 275, 91, 23], "area": 1318}, {"id": 7365209, "category_id": 6, "iscrowd": 0, "bbox": [361, 276, 87, 12], "area": 808}, {"id": 7365465, "category_id": 6, "iscrowd": 0, "bbox": [490, 273, 48, 32], "area": 821}, {"id": 6443848, "category_id": 6, "iscrowd": 0, "bbox": [375, 292, 114, 22], "area": 1984}, {"id": 11314589, "category_id": 6, "iscrowd": 0, "bbox": [183, 270, 71, 8], "area": 234}, {"id": 9537921, "category_id": 6, "iscrowd": 1, "bbox": [197, 248, 263, 46], "area": 2518}, {"id": 6314840, "category_id": 149, "iscrowd": 0, "bbox": [0, 232, 640, 248], "area": 88471}, {"id": 2045742, "category_id": 184, "iscrowd": 0, "bbox": [0, 193, 640, 287], "area": 26070}, {"id": 15129550, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 206], "area": 110090}, {"id": 7827821, "category_id": 191, "iscrowd": 0, "bbox": [15, 433, 99, 47], "area": 3064}, {"id": 8354418, "category_id": 197, "iscrowd": 0, "bbox": [0, 98, 640, 179], "area": 46570}], "file_name": "000000015517.png", "image_id": 15517}, {"segments_info": [{"id": 2769250, "category_id": 1, "iscrowd": 0, "bbox": [9, 177, 194, 199], "area": 10597}, {"id": 7043456, "category_id": 2, "iscrowd": 0, "bbox": [311, 421, 115, 42], "area": 1887}, {"id": 2702939, "category_id": 41, "iscrowd": 0, "bbox": [105, 320, 92, 64], "area": 1543}, {"id": 12564915, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 433, 292], "area": 98546}, {"id": 5333874, "category_id": 197, "iscrowd": 0, "bbox": [0, 202, 433, 438], "area": 160791}], "file_name": "000000015597.png", "image_id": 15597}, {"segments_info": [{"id": 1842470, "category_id": 1, "iscrowd": 0, "bbox": [154, 189, 55, 74], "area": 2027}, {"id": 3485221, "category_id": 38, "iscrowd": 0, "bbox": [602, 111, 7, 13], "area": 60}, {"id": 10120259, "category_id": 38, "iscrowd": 0, "bbox": [463, 27, 22, 19], "area": 69}, {"id": 5132375, "category_id": 38, "iscrowd": 0, "bbox": [228, 49, 13, 24], "area": 222}, {"id": 7708550, "category_id": 38, "iscrowd": 0, "bbox": [88, 34, 30, 35], "area": 250}, {"id": 9203808, "category_id": 38, "iscrowd": 0, "bbox": [452, 111, 8, 10], "area": 44}, {"id": 9604484, "category_id": 42, "iscrowd": 0, "bbox": [154, 292, 166, 51], "area": 3345}, {"id": 8355182, "category_id": 155, "iscrowd": 0, "bbox": [0, 148, 640, 200], "area": 114556}, {"id": 13607534, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 150], "area": 94506}], "file_name": "000000015660.png", "image_id": 15660}, {"segments_info": [{"id": 4081534, "category_id": 11, "iscrowd": 0, "bbox": [72, 198, 278, 377], "area": 48215}, {"id": 9014154, "category_id": 119, "iscrowd": 0, "bbox": [0, 97, 427, 543], "area": 15343}, {"id": 10065814, "category_id": 128, "iscrowd": 0, "bbox": [0, 35, 200, 284], "area": 33471}, {"id": 5729121, "category_id": 184, "iscrowd": 0, "bbox": [62, 0, 365, 317], "area": 62720}, {"id": 15199464, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 341], "area": 12505}, {"id": 8762022, "category_id": 191, "iscrowd": 0, "bbox": [0, 404, 427, 43], "area": 3971}, {"id": 4032622, "category_id": 193, "iscrowd": 0, "bbox": [0, 298, 427, 342], "area": 94721}, {"id": 6390664, "category_id": 198, "iscrowd": 0, "bbox": [370, 321, 57, 93], "area": 1950}], "file_name": "000000015746.png", "image_id": 15746}, {"segments_info": [{"id": 4080737, "category_id": 16, "iscrowd": 0, "bbox": [223, 381, 47, 46], "area": 1292}, {"id": 5853535, "category_id": 16, "iscrowd": 0, "bbox": [107, 323, 46, 48], "area": 1414}, {"id": 4603210, "category_id": 16, "iscrowd": 0, "bbox": [44, 347, 127, 50], "area": 2975}, {"id": 5326926, "category_id": 16, "iscrowd": 0, "bbox": [153, 232, 146, 166], "area": 5655}, {"id": 9142110, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 261716}], "file_name": "000000015751.png", "image_id": 15751}, {"segments_info": [{"id": 10913916, "category_id": 1, "iscrowd": 0, "bbox": [366, 138, 80, 199], "area": 7105}, {"id": 6382451, "category_id": 19, "iscrowd": 0, "bbox": [130, 85, 236, 218], "area": 18359}, {"id": 7634552, "category_id": 85, "iscrowd": 0, "bbox": [493, 126, 22, 21], "area": 357}, {"id": 10329760, "category_id": 85, "iscrowd": 0, "bbox": [43, 83, 25, 24], "area": 483}, {"id": 8351376, "category_id": 112, "iscrowd": 0, "bbox": [14, 105, 77, 153], "area": 10313}, {"id": 6248787, "category_id": 168, "iscrowd": 0, "bbox": [431, 177, 60, 82], "area": 3543}, {"id": 6582391, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 258], "area": 104053}, {"id": 16513786, "category_id": 181, "iscrowd": 0, "bbox": [313, 83, 47, 67], "area": 2659}, {"id": 4612722, "category_id": 188, "iscrowd": 0, "bbox": [526, 160, 52, 44], "area": 1585}, {"id": 5398119, "category_id": 189, "iscrowd": 0, "bbox": [466, 181, 152, 95], "area": 7384}, {"id": 6974313, "category_id": 190, "iscrowd": 0, "bbox": [0, 234, 640, 246], "area": 134004}, {"id": 10787996, "category_id": 199, "iscrowd": 0, "bbox": [178, 176, 224, 116], "area": 12419}], "file_name": "000000015956.png", "image_id": 15956}, {"segments_info": [{"id": 3885126, "category_id": 21, "iscrowd": 0, "bbox": [281, 260, 27, 30], "area": 341}, {"id": 3817279, "category_id": 21, "iscrowd": 0, "bbox": [305, 263, 34, 27], "area": 508}, {"id": 3818305, "category_id": 21, "iscrowd": 0, "bbox": [332, 262, 24, 25], "area": 306}, {"id": 4739410, "category_id": 24, "iscrowd": 0, "bbox": [359, 267, 88, 58], "area": 2962}, {"id": 6911864, "category_id": 24, "iscrowd": 0, "bbox": [424, 265, 23, 40], "area": 195}, {"id": 3888208, "category_id": 178, "iscrowd": 0, "bbox": [441, 257, 199, 38], "area": 3894}, {"id": 3618865, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 471], "area": 91919}, {"id": 15521738, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 145], "area": 70015}, {"id": 6656653, "category_id": 193, "iscrowd": 0, "bbox": [0, 221, 640, 250], "area": 130319}], "file_name": "000000016010.png", "image_id": 16010}, {"segments_info": [{"id": 9340568, "category_id": 1, "iscrowd": 0, "bbox": [121, 189, 24, 68], "area": 575}, {"id": 6970986, "category_id": 1, "iscrowd": 0, "bbox": [38, 201, 16, 61], "area": 604}, {"id": 10852525, "category_id": 1, "iscrowd": 0, "bbox": [7, 195, 12, 57], "area": 313}, {"id": 11577528, "category_id": 1, "iscrowd": 0, "bbox": [156, 198, 11, 22], "area": 156}, {"id": 5784657, "category_id": 1, "iscrowd": 0, "bbox": [8, 222, 23, 41], "area": 416}, {"id": 7761789, "category_id": 1, "iscrowd": 0, "bbox": [314, 179, 37, 54], "area": 926}, {"id": 8221060, "category_id": 1, "iscrowd": 0, "bbox": [77, 197, 32, 66], "area": 957}, {"id": 10327721, "category_id": 1, "iscrowd": 0, "bbox": [264, 196, 19, 23], "area": 255}, {"id": 5914694, "category_id": 1, "iscrowd": 0, "bbox": [67, 206, 14, 54], "area": 453}, {"id": 8748699, "category_id": 1, "iscrowd": 0, "bbox": [85, 203, 21, 54], "area": 324}, {"id": 4078149, "category_id": 1, "iscrowd": 0, "bbox": [196, 189, 47, 113], "area": 2864}, {"id": 7098730, "category_id": 1, "iscrowd": 0, "bbox": [529, 171, 18, 29], "area": 258}, {"id": 6180724, "category_id": 1, "iscrowd": 0, "bbox": [117, 196, 13, 59], "area": 386}, {"id": 8353164, "category_id": 1, "iscrowd": 1, "bbox": [13, 166, 617, 128], "area": 6980}, {"id": 5988992, "category_id": 7, "iscrowd": 0, "bbox": [120, 135, 226, 184], "area": 29509}, {"id": 6777955, "category_id": 15, "iscrowd": 0, "bbox": [528, 233, 95, 59], "area": 3807}, {"id": 11248045, "category_id": 19, "iscrowd": 0, "bbox": [342, 153, 196, 200], "area": 18053}, {"id": 12231836, "category_id": 28, "iscrowd": 0, "bbox": [592, 161, 41, 14], "area": 365}, {"id": 10649964, "category_id": 28, "iscrowd": 0, "bbox": [618, 153, 15, 13], "area": 107}, {"id": 10597576, "category_id": 28, "iscrowd": 0, "bbox": [349, 130, 128, 63], "area": 3627}, {"id": 6180765, "category_id": 32, "iscrowd": 0, "bbox": [223, 214, 6, 29], "area": 85}, {"id": 11707578, "category_id": 125, "iscrowd": 0, "bbox": [345, 237, 295, 108], "area": 10992}, {"id": 10916258, "category_id": 149, "iscrowd": 0, "bbox": [0, 223, 640, 217], "area": 76181}, {"id": 6578280, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 234], "area": 74266}, {"id": 14339789, "category_id": 187, "iscrowd": 0, "bbox": [7, 0, 336, 138], "area": 30501}, {"id": 6312540, "category_id": 191, "iscrowd": 0, "bbox": [397, 304, 172, 44], "area": 1911}, {"id": 5859440, "category_id": 193, "iscrowd": 0, "bbox": [531, 217, 109, 75], "area": 2042}, {"id": 11776445, "category_id": 197, "iscrowd": 0, "bbox": [183, 101, 93, 42], "area": 1327}], "file_name": "000000016228.png", "image_id": 16228}, {"segments_info": [{"id": 3158325, "category_id": 1, "iscrowd": 0, "bbox": [43, 117, 147, 233], "area": 12120}, {"id": 3353644, "category_id": 1, "iscrowd": 0, "bbox": [424, 101, 76, 158], "area": 4535}, {"id": 3355448, "category_id": 1, "iscrowd": 0, "bbox": [469, 99, 31, 46], "area": 993}, {"id": 4934504, "category_id": 1, "iscrowd": 0, "bbox": [314, 99, 140, 182], "area": 8297}, {"id": 4410456, "category_id": 1, "iscrowd": 0, "bbox": [277, 38, 70, 126], "area": 5193}, {"id": 2698026, "category_id": 15, "iscrowd": 0, "bbox": [325, 182, 74, 99], "area": 4717}, {"id": 4277058, "category_id": 15, "iscrowd": 0, "bbox": [223, 200, 63, 113], "area": 5023}, {"id": 2236956, "category_id": 15, "iscrowd": 0, "bbox": [29, 201, 144, 148], "area": 7509}, {"id": 1776159, "category_id": 15, "iscrowd": 0, "bbox": [376, 154, 95, 108], "area": 2927}, {"id": 1316633, "category_id": 27, "iscrowd": 0, "bbox": [275, 67, 29, 69], "area": 529}, {"id": 1972756, "category_id": 62, "iscrowd": 0, "bbox": [427, 172, 47, 84], "area": 1311}, {"id": 13293793, "category_id": 125, "iscrowd": 0, "bbox": [0, 250, 16, 14], "area": 185}, {"id": 5791078, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 500, 365], "area": 127727}, {"id": 11580861, "category_id": 191, "iscrowd": 0, "bbox": [329, 236, 13, 11], "area": 101}], "file_name": "000000016249.png", "image_id": 16249}, {"segments_info": [{"id": 3578857, "category_id": 46, "iscrowd": 0, "bbox": [412, 262, 44, 91], "area": 2891}, {"id": 5588803, "category_id": 73, "iscrowd": 0, "bbox": [135, 166, 235, 188], "area": 29331}, {"id": 4152166, "category_id": 130, "iscrowd": 0, "bbox": [405, 49, 179, 264], "area": 22936}, {"id": 1911354, "category_id": 189, "iscrowd": 0, "bbox": [0, 286, 548, 194], "area": 50166}, {"id": 8613758, "category_id": 195, "iscrowd": 0, "bbox": [36, 268, 118, 62], "area": 3571}, {"id": 6389394, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 148979}], "file_name": "000000016439.png", "image_id": 16439}, {"segments_info": [{"id": 8220275, "category_id": 1, "iscrowd": 0, "bbox": [517, 158, 16, 22], "area": 218}, {"id": 3741764, "category_id": 27, "iscrowd": 0, "bbox": [495, 452, 85, 61], "area": 3970}, {"id": 10065301, "category_id": 28, "iscrowd": 0, "bbox": [171, 156, 41, 12], "area": 330}, {"id": 7233097, "category_id": 28, "iscrowd": 0, "bbox": [152, 123, 133, 36], "area": 3276}, {"id": 4141907, "category_id": 31, "iscrowd": 0, "bbox": [503, 391, 66, 62], "area": 3332}, {"id": 2623297, "category_id": 31, "iscrowd": 0, "bbox": [496, 456, 85, 94], "area": 2805}, {"id": 6049637, "category_id": 31, "iscrowd": 0, "bbox": [535, 377, 77, 87], "area": 3737}, {"id": 12299576, "category_id": 42, "iscrowd": 0, "bbox": [374, 351, 101, 133], "area": 10434}, {"id": 12963038, "category_id": 42, "iscrowd": 0, "bbox": [240, 293, 90, 78], "area": 4646}, {"id": 6440263, "category_id": 62, "iscrowd": 0, "bbox": [175, 193, 34, 48], "area": 1204}, {"id": 3543077, "category_id": 62, "iscrowd": 0, "bbox": [531, 306, 81, 78], "area": 5112}, {"id": 5453118, "category_id": 62, "iscrowd": 0, "bbox": [229, 195, 49, 63], "area": 1276}, {"id": 10529189, "category_id": 154, "iscrowd": 0, "bbox": [0, 202, 612, 410], "area": 187114}, {"id": 11250069, "category_id": 155, "iscrowd": 0, "bbox": [0, 118, 612, 112], "area": 49644}, {"id": 10059900, "category_id": 168, "iscrowd": 0, "bbox": [512, 302, 55, 85], "area": 1613}, {"id": 11376498, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 612, 136], "area": 78785}], "file_name": "000000016451.png", "image_id": 16451}, {"segments_info": [{"id": 5792613, "category_id": 20, "iscrowd": 0, "bbox": [75, 238, 109, 77], "area": 4621}, {"id": 15714977, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 375, 382], "area": 120799}, {"id": 2840139, "category_id": 193, "iscrowd": 0, "bbox": [66, 466, 309, 34], "area": 6374}, {"id": 2567209, "category_id": 198, "iscrowd": 0, "bbox": [0, 309, 375, 191], "area": 55624}], "file_name": "000000016502.png", "image_id": 16502}, {"segments_info": [{"id": 11568480, "category_id": 1, "iscrowd": 0, "bbox": [9, 18, 469, 608], "area": 175971}, {"id": 8081440, "category_id": 32, "iscrowd": 0, "bbox": [224, 301, 122, 339], "area": 22539}, {"id": 10519929, "category_id": 77, "iscrowd": 0, "bbox": [341, 151, 73, 116], "area": 6258}, {"id": 9349276, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 478, 640], "area": 93404}], "file_name": "000000016598.png", "image_id": 16598}, {"segments_info": [{"id": 2174259, "category_id": 62, "iscrowd": 0, "bbox": [309, 227, 68, 132], "area": 3638}, {"id": 1317663, "category_id": 62, "iscrowd": 0, "bbox": [438, 241, 131, 187], "area": 13520}, {"id": 1844007, "category_id": 62, "iscrowd": 0, "bbox": [566, 235, 62, 125], "area": 4338}, {"id": 3556940, "category_id": 84, "iscrowd": 0, "bbox": [427, 213, 69, 29], "area": 1045}, {"id": 5992053, "category_id": 84, "iscrowd": 0, "bbox": [350, 300, 101, 39], "area": 2086}, {"id": 6712166, "category_id": 86, "iscrowd": 0, "bbox": [278, 88, 28, 53], "area": 1124}, {"id": 6384491, "category_id": 86, "iscrowd": 0, "bbox": [93, 44, 24, 94], "area": 1396}, {"id": 6645344, "category_id": 86, "iscrowd": 0, "bbox": [24, 74, 41, 64], "area": 1856}, {"id": 2041905, "category_id": 171, "iscrowd": 0, "bbox": [113, 242, 130, 114], "area": 11739}, {"id": 1711649, "category_id": 177, "iscrowd": 0, "bbox": [0, 288, 640, 127], "area": 3506}, {"id": 3817021, "category_id": 186, "iscrowd": 0, "bbox": [340, 0, 236, 29], "area": 3889}, {"id": 1055788, "category_id": 188, "iscrowd": 0, "bbox": [364, 51, 162, 260], "area": 27933}, {"id": 1386810, "category_id": 189, "iscrowd": 0, "bbox": [334, 284, 142, 144], "area": 10040}, {"id": 2898240, "category_id": 190, "iscrowd": 0, "bbox": [61, 331, 254, 97], "area": 4837}, {"id": 6778217, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 386], "area": 90111}, {"id": 1581093, "category_id": 200, "iscrowd": 0, "bbox": [0, 320, 640, 108], "area": 25528}], "file_name": "000000016958.png", "image_id": 16958}, {"segments_info": [{"id": 10854294, "category_id": 3, "iscrowd": 0, "bbox": [0, 45, 22, 44], "area": 683}, {"id": 3222825, "category_id": 3, "iscrowd": 0, "bbox": [56, 26, 514, 152], "area": 26343}, {"id": 2895420, "category_id": 18, "iscrowd": 0, "bbox": [155, 108, 250, 434], "area": 40571}, {"id": 13681914, "category_id": 34, "iscrowd": 0, "bbox": [319, 78, 95, 44], "area": 3219}, {"id": 15526624, "category_id": 149, "iscrowd": 0, "bbox": [19, 45, 21, 19], "area": 326}, {"id": 3622232, "category_id": 171, "iscrowd": 0, "bbox": [488, 0, 53, 24], "area": 705}, {"id": 3564876, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 419], "area": 148736}, {"id": 15332592, "category_id": 191, "iscrowd": 0, "bbox": [0, 43, 89, 85], "area": 3198}, {"id": 7457436, "category_id": 193, "iscrowd": 0, "bbox": [0, 38, 640, 602], "area": 150762}, {"id": 6058129, "category_id": 194, "iscrowd": 0, "bbox": [0, 200, 640, 339], "area": 33538}], "file_name": "000000017029.png", "image_id": 17029}, {"segments_info": [{"id": 3885138, "category_id": 25, "iscrowd": 0, "bbox": [81, 35, 279, 299], "area": 30896}, {"id": 4497297, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 334], "area": 124212}], "file_name": "000000017031.png", "image_id": 17031}, {"segments_info": [{"id": 4474975, "category_id": 24, "iscrowd": 0, "bbox": [243, 122, 198, 480], "area": 60036}, {"id": 4343390, "category_id": 24, "iscrowd": 0, "bbox": [2, 97, 205, 499], "area": 56518}, {"id": 6714005, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 443, 464], "area": 97698}, {"id": 4481663, "category_id": 193, "iscrowd": 0, "bbox": [0, 416, 443, 224], "area": 53639}, {"id": 5598091, "category_id": 194, "iscrowd": 0, "bbox": [15, 438, 428, 158], "area": 10984}, {"id": 2435127, "category_id": 198, "iscrowd": 0, "bbox": [222, 484, 151, 61], "area": 3809}], "file_name": "000000017115.png", "image_id": 17115}, {"segments_info": [{"id": 5721161, "category_id": 3, "iscrowd": 0, "bbox": [434, 108, 206, 319], "area": 46998}, {"id": 1974052, "category_id": 19, "iscrowd": 0, "bbox": [458, 176, 54, 35], "area": 937}, {"id": 5467564, "category_id": 19, "iscrowd": 0, "bbox": [256, 201, 58, 33], "area": 919}, {"id": 3685198, "category_id": 19, "iscrowd": 0, "bbox": [328, 161, 50, 100], "area": 2563}, {"id": 2564903, "category_id": 19, "iscrowd": 0, "bbox": [376, 174, 57, 93], "area": 3289}, {"id": 6576223, "category_id": 149, "iscrowd": 0, "bbox": [0, 201, 526, 226], "area": 76274}, {"id": 4943205, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 222], "area": 87008}, {"id": 3098205, "category_id": 185, "iscrowd": 0, "bbox": [0, 97, 473, 191], "area": 33087}, {"id": 15593454, "category_id": 187, "iscrowd": 0, "bbox": [63, 0, 551, 190], "area": 13763}, {"id": 3166551, "category_id": 193, "iscrowd": 0, "bbox": [11, 210, 445, 80], "area": 1880}, {"id": 3817300, "category_id": 194, "iscrowd": 0, "bbox": [0, 239, 240, 120], "area": 6242}], "file_name": "000000017178.png", "image_id": 17178}, {"segments_info": [{"id": 3095466, "category_id": 53, "iscrowd": 0, "bbox": [428, 261, 28, 20], "area": 364}, {"id": 2647449, "category_id": 62, "iscrowd": 0, "bbox": [185, 234, 62, 60], "area": 2827}, {"id": 4013872, "category_id": 84, "iscrowd": 0, "bbox": [293, 227, 29, 71], "area": 864}, {"id": 5262126, "category_id": 84, "iscrowd": 0, "bbox": [317, 229, 29, 66], "area": 685}, {"id": 3944728, "category_id": 84, "iscrowd": 0, "bbox": [241, 231, 58, 75], "area": 3804}, {"id": 4671284, "category_id": 84, "iscrowd": 0, "bbox": [306, 227, 28, 70], "area": 814}, {"id": 5591096, "category_id": 84, "iscrowd": 0, "bbox": [278, 229, 33, 72], "area": 727}, {"id": 4737339, "category_id": 84, "iscrowd": 0, "bbox": [320, 228, 36, 65], "area": 644}, {"id": 10471126, "category_id": 112, "iscrowd": 0, "bbox": [546, 0, 94, 344], "area": 24766}, {"id": 599358, "category_id": 118, "iscrowd": 0, "bbox": [521, 354, 119, 74], "area": 5427}, {"id": 11390934, "category_id": 177, "iscrowd": 0, "bbox": [321, 220, 50, 20], "area": 421}, {"id": 2118016, "category_id": 189, "iscrowd": 0, "bbox": [130, 260, 510, 168], "area": 62577}, {"id": 3498103, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 563, 428], "area": 51935}], "file_name": "000000017182.png", "image_id": 17182}, {"segments_info": [{"id": 4740687, "category_id": 1, "iscrowd": 0, "bbox": [1, 192, 31, 110], "area": 1096}, {"id": 7435113, "category_id": 3, "iscrowd": 0, "bbox": [482, 82, 157, 236], "area": 28807}, {"id": 9870999, "category_id": 3, "iscrowd": 0, "bbox": [10, 204, 37, 38], "area": 963}, {"id": 4213837, "category_id": 4, "iscrowd": 0, "bbox": [0, 235, 25, 68], "area": 1069}, {"id": 5465195, "category_id": 6, "iscrowd": 0, "bbox": [43, 1, 446, 372], "area": 153321}, {"id": 4936011, "category_id": 149, "iscrowd": 0, "bbox": [0, 231, 640, 249], "area": 92436}, {"id": 9016206, "category_id": 184, "iscrowd": 0, "bbox": [0, 61, 547, 122], "area": 2013}, {"id": 16251128, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 206], "area": 20361}, {"id": 10462373, "category_id": 197, "iscrowd": 0, "bbox": [489, 37, 151, 76], "area": 5003}], "file_name": "000000017207.png", "image_id": 17207}, {"segments_info": [{"id": 15253823, "category_id": 1, "iscrowd": 0, "bbox": [158, 243, 40, 71], "area": 2134}, {"id": 14260303, "category_id": 1, "iscrowd": 0, "bbox": [216, 233, 47, 80], "area": 2637}, {"id": 12288068, "category_id": 72, "iscrowd": 0, "bbox": [145, 214, 166, 108], "area": 11847}, {"id": 9347232, "category_id": 81, "iscrowd": 0, "bbox": [4, 591, 186, 49], "area": 6830}, {"id": 12900304, "category_id": 81, "iscrowd": 0, "bbox": [380, 522, 98, 53], "area": 4331}, {"id": 4219764, "category_id": 133, "iscrowd": 0, "bbox": [0, 103, 478, 377], "area": 133574}, {"id": 9353929, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 478, 546], "area": 91270}, {"id": 2046273, "category_id": 189, "iscrowd": 0, "bbox": [0, 458, 478, 182], "area": 52404}], "file_name": "000000017379.png", "image_id": 17379}, {"segments_info": [{"id": 5201508, "category_id": 1, "iscrowd": 0, "bbox": [111, 490, 66, 145], "area": 4903}, {"id": 6451574, "category_id": 15, "iscrowd": 0, "bbox": [230, 481, 29, 26], "area": 362}, {"id": 4017234, "category_id": 15, "iscrowd": 0, "bbox": [22, 534, 156, 96], "area": 5919}, {"id": 2108465, "category_id": 184, "iscrowd": 0, "bbox": [0, 203, 481, 418], "area": 138798}, {"id": 11254464, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 481, 312], "area": 112365}, {"id": 1450277, "category_id": 191, "iscrowd": 0, "bbox": [0, 605, 481, 35], "area": 12751}, {"id": 6780539, "category_id": 197, "iscrowd": 0, "bbox": [74, 17, 381, 488], "area": 32087}], "file_name": "000000017436.png", "image_id": 17436}, {"segments_info": [{"id": 8616826, "category_id": 1, "iscrowd": 0, "bbox": [259, 228, 14, 21], "area": 121}, {"id": 4342601, "category_id": 1, "iscrowd": 0, "bbox": [173, 235, 10, 29], "area": 156}, {"id": 8948112, "category_id": 1, "iscrowd": 0, "bbox": [150, 224, 19, 72], "area": 914}, {"id": 6312773, "category_id": 1, "iscrowd": 0, "bbox": [187, 226, 16, 22], "area": 192}, {"id": 7302502, "category_id": 3, "iscrowd": 0, "bbox": [553, 242, 34, 36], "area": 571}, {"id": 7698809, "category_id": 3, "iscrowd": 0, "bbox": [412, 235, 72, 51], "area": 2860}, {"id": 8487818, "category_id": 3, "iscrowd": 0, "bbox": [265, 235, 110, 67], "area": 5868}, {"id": 7303014, "category_id": 3, "iscrowd": 0, "bbox": [28, 215, 75, 51], "area": 2515}, {"id": 3091498, "category_id": 3, "iscrowd": 0, "bbox": [168, 237, 102, 61], "area": 4514}, {"id": 2433299, "category_id": 3, "iscrowd": 0, "bbox": [30, 233, 117, 94], "area": 5795}, {"id": 7038042, "category_id": 3, "iscrowd": 0, "bbox": [460, 231, 69, 24], "area": 530}, {"id": 6381667, "category_id": 3, "iscrowd": 0, "bbox": [100, 242, 30, 35], "area": 689}, {"id": 7566968, "category_id": 3, "iscrowd": 0, "bbox": [598, 243, 42, 33], "area": 1171}, {"id": 6907745, "category_id": 3, "iscrowd": 0, "bbox": [345, 228, 28, 26], "area": 378}, {"id": 8553344, "category_id": 3, "iscrowd": 0, "bbox": [481, 235, 88, 50], "area": 3788}, {"id": 4142116, "category_id": 6, "iscrowd": 0, "bbox": [1, 1, 155, 473], "area": 22669}, {"id": 3946550, "category_id": 149, "iscrowd": 0, "bbox": [40, 271, 587, 209], "area": 83153}, {"id": 3951175, "category_id": 184, "iscrowd": 0, "bbox": [28, 85, 281, 158], "area": 15949}, {"id": 11895898, "category_id": 187, "iscrowd": 0, "bbox": [12, 0, 628, 170], "area": 82826}, {"id": 6514023, "category_id": 191, "iscrowd": 0, "bbox": [395, 289, 245, 191], "area": 25902}, {"id": 9740713, "category_id": 197, "iscrowd": 0, "bbox": [27, 136, 613, 226], "area": 44576}], "file_name": "000000017627.png", "image_id": 17627}, {"segments_info": [{"id": 5066841, "category_id": 47, "iscrowd": 0, "bbox": [200, 118, 109, 84], "area": 6176}, {"id": 8225665, "category_id": 47, "iscrowd": 0, "bbox": [314, 177, 99, 76], "area": 4079}, {"id": 3093039, "category_id": 48, "iscrowd": 0, "bbox": [368, 331, 152, 113], "area": 1939}, {"id": 2303267, "category_id": 48, "iscrowd": 0, "bbox": [293, 408, 190, 44], "area": 2100}, {"id": 1909024, "category_id": 49, "iscrowd": 0, "bbox": [301, 373, 184, 63], "area": 2413}, {"id": 6120290, "category_id": 50, "iscrowd": 0, "bbox": [357, 206, 100, 32], "area": 1292}, {"id": 2510175, "category_id": 52, "iscrowd": 0, "bbox": [474, 301, 14, 16], "area": 84}, {"id": 2702921, "category_id": 52, "iscrowd": 0, "bbox": [444, 299, 42, 34], "area": 896}, {"id": 2833735, "category_id": 52, "iscrowd": 0, "bbox": [506, 323, 29, 40], "area": 778}, {"id": 3691872, "category_id": 52, "iscrowd": 0, "bbox": [450, 274, 29, 31], "area": 578}, {"id": 2309192, "category_id": 52, "iscrowd": 0, "bbox": [425, 291, 28, 28], "area": 536}, {"id": 1193285, "category_id": 52, "iscrowd": 0, "bbox": [260, 319, 23, 45], "area": 733}, {"id": 1460840, "category_id": 52, "iscrowd": 0, "bbox": [179, 274, 46, 27], "area": 800}, {"id": 533562, "category_id": 52, "iscrowd": 0, "bbox": [148, 305, 37, 29], "area": 743}, {"id": 2177609, "category_id": 52, "iscrowd": 0, "bbox": [483, 302, 29, 41], "area": 839}, {"id": 1851473, "category_id": 59, "iscrowd": 0, "bbox": [133, 247, 201, 212], "area": 25926}, {"id": 3753810, "category_id": 67, "iscrowd": 0, "bbox": [97, 82, 472, 390], "area": 115566}, {"id": 2237995, "category_id": 189, "iscrowd": 0, "bbox": [136, 462, 329, 18], "area": 1648}, {"id": 12171957, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 138637}], "file_name": "000000017714.png", "image_id": 17714}, {"segments_info": [{"id": 8684673, "category_id": 1, "iscrowd": 0, "bbox": [1, 12, 243, 379], "area": 53658}, {"id": 7111278, "category_id": 16, "iscrowd": 0, "bbox": [205, 585, 14, 38], "area": 198}, {"id": 10722983, "category_id": 47, "iscrowd": 0, "bbox": [418, 428, 62, 71], "area": 3371}, {"id": 12301495, "category_id": 47, "iscrowd": 0, "bbox": [413, 490, 67, 117], "area": 6257}, {"id": 3419688, "category_id": 50, "iscrowd": 0, "bbox": [123, 367, 50, 13], "area": 282}, {"id": 4622780, "category_id": 58, "iscrowd": 0, "bbox": [250, 381, 54, 65], "area": 2108}, {"id": 1191271, "category_id": 61, "iscrowd": 0, "bbox": [327, 355, 27, 26], "area": 473}, {"id": 926014, "category_id": 62, "iscrowd": 0, "bbox": [125, 257, 69, 106], "area": 2219}, {"id": 7042699, "category_id": 62, "iscrowd": 0, "bbox": [4, 318, 127, 122], "area": 6012}, {"id": 789770, "category_id": 63, "iscrowd": 0, "bbox": [357, 92, 121, 133], "area": 8827}, {"id": 7307927, "category_id": 67, "iscrowd": 0, "bbox": [0, 280, 480, 352], "area": 123503}, {"id": 8750466, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 364, 322], "area": 60213}, {"id": 528401, "category_id": 141, "iscrowd": 0, "bbox": [412, 102, 68, 59], "area": 2006}, {"id": 11318972, "category_id": 168, "iscrowd": 0, "bbox": [392, 625, 88, 15], "area": 716}, {"id": 10197397, "category_id": 181, "iscrowd": 0, "bbox": [396, 0, 84, 126], "area": 7885}, {"id": 1190740, "category_id": 189, "iscrowd": 0, "bbox": [0, 482, 393, 158], "area": 1994}, {"id": 4868943, "category_id": 190, "iscrowd": 0, "bbox": [471, 161, 9, 40], "area": 198}, {"id": 5466996, "category_id": 199, "iscrowd": 0, "bbox": [355, 0, 57, 105], "area": 4990}, {"id": 1119252, "category_id": 200, "iscrowd": 0, "bbox": [409, 185, 71, 87], "area": 3174}], "file_name": "000000017899.png", "image_id": 17899}, {"segments_info": [{"id": 12960980, "category_id": 1, "iscrowd": 0, "bbox": [81, 229, 120, 365], "area": 23700}, {"id": 4341838, "category_id": 10, "iscrowd": 0, "bbox": [233, 133, 60, 148], "area": 7999}, {"id": 5462725, "category_id": 11, "iscrowd": 0, "bbox": [432, 576, 38, 64], "area": 2266}, {"id": 4281670, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 480, 597], "area": 202133}, {"id": 9478062, "category_id": 194, "iscrowd": 0, "bbox": [0, 376, 480, 264], "area": 45892}], "file_name": "000000017905.png", "image_id": 17905}, {"segments_info": [{"id": 7499634, "category_id": 1, "iscrowd": 0, "bbox": [560, 341, 6, 13], "area": 50}, {"id": 3617839, "category_id": 1, "iscrowd": 0, "bbox": [407, 347, 6, 16], "area": 73}, {"id": 7827575, "category_id": 1, "iscrowd": 0, "bbox": [451, 344, 7, 7], "area": 32}, {"id": 2038292, "category_id": 1, "iscrowd": 0, "bbox": [2, 335, 26, 73], "area": 952}, {"id": 7828339, "category_id": 1, "iscrowd": 0, "bbox": [565, 345, 7, 13], "area": 41}, {"id": 2170661, "category_id": 1, "iscrowd": 0, "bbox": [572, 349, 6, 8], "area": 29}, {"id": 4539194, "category_id": 1, "iscrowd": 0, "bbox": [463, 347, 5, 14], "area": 43}, {"id": 4276063, "category_id": 1, "iscrowd": 0, "bbox": [123, 340, 23, 64], "area": 648}, {"id": 2829100, "category_id": 1, "iscrowd": 0, "bbox": [22, 330, 17, 73], "area": 473}, {"id": 6053215, "category_id": 1, "iscrowd": 0, "bbox": [540, 346, 5, 14], "area": 48}, {"id": 1971285, "category_id": 1, "iscrowd": 0, "bbox": [605, 350, 4, 6], "area": 15}, {"id": 4278601, "category_id": 1, "iscrowd": 0, "bbox": [592, 342, 6, 17], "area": 75}, {"id": 6184540, "category_id": 1, "iscrowd": 0, "bbox": [431, 349, 6, 12], "area": 34}, {"id": 6316125, "category_id": 1, "iscrowd": 1, "bbox": [0, 132, 640, 240], "area": 18571}, {"id": 1513507, "category_id": 27, "iscrowd": 0, "bbox": [241, 401, 23, 20], "area": 306}, {"id": 2365329, "category_id": 38, "iscrowd": 0, "bbox": [272, 234, 54, 97], "area": 2172}, {"id": 4337784, "category_id": 38, "iscrowd": 0, "bbox": [331, 241, 50, 162], "area": 4091}, {"id": 7752551, "category_id": 38, "iscrowd": 0, "bbox": [243, 122, 214, 107], "area": 2459}, {"id": 4405888, "category_id": 38, "iscrowd": 0, "bbox": [23, 204, 150, 205], "area": 6906}, {"id": 11308664, "category_id": 38, "iscrowd": 0, "bbox": [350, 96, 283, 181], "area": 2798}, {"id": 4343975, "category_id": 38, "iscrowd": 0, "bbox": [446, 203, 154, 107], "area": 7649}, {"id": 3616632, "category_id": 38, "iscrowd": 0, "bbox": [271, 177, 149, 90], "area": 6575}, {"id": 4405880, "category_id": 38, "iscrowd": 0, "bbox": [175, 385, 56, 11], "area": 342}, {"id": 8476734, "category_id": 38, "iscrowd": 0, "bbox": [165, 142, 166, 203], "area": 2681}, {"id": 4145833, "category_id": 38, "iscrowd": 0, "bbox": [191, 272, 133, 126], "area": 8223}, {"id": 4148045, "category_id": 184, "iscrowd": 0, "bbox": [24, 288, 616, 52], "area": 10387}, {"id": 14140859, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 323], "area": 155224}, {"id": 2703423, "category_id": 193, "iscrowd": 0, "bbox": [0, 339, 640, 88], "area": 34851}, {"id": 5922921, "category_id": 197, "iscrowd": 0, "bbox": [374, 286, 266, 37], "area": 3503}], "file_name": "000000017959.png", "image_id": 17959}, {"segments_info": [{"id": 4406074, "category_id": 1, "iscrowd": 0, "bbox": [3, 2, 409, 431], "area": 93059}, {"id": 5784637, "category_id": 1, "iscrowd": 0, "bbox": [356, 27, 284, 453], "area": 86580}, {"id": 1184802, "category_id": 27, "iscrowd": 0, "bbox": [210, 105, 41, 56], "area": 1570}, {"id": 4873342, "category_id": 44, "iscrowd": 0, "bbox": [275, 230, 33, 57], "area": 1154}, {"id": 3953038, "category_id": 59, "iscrowd": 0, "bbox": [317, 227, 95, 74], "area": 3395}, {"id": 2041689, "category_id": 59, "iscrowd": 0, "bbox": [224, 460, 65, 20], "area": 786}, {"id": 1449521, "category_id": 63, "iscrowd": 0, "bbox": [211, 82, 101, 166], "area": 7070}, {"id": 2434135, "category_id": 93, "iscrowd": 0, "bbox": [108, 324, 532, 156], "area": 20533}, {"id": 4477033, "category_id": 100, "iscrowd": 0, "bbox": [0, 396, 338, 84], "area": 18260}, {"id": 1053981, "category_id": 109, "iscrowd": 0, "bbox": [273, 0, 287, 183], "area": 16566}, {"id": 3886447, "category_id": 112, "iscrowd": 0, "bbox": [328, 122, 70, 63], "area": 1708}, {"id": 8100529, "category_id": 181, "iscrowd": 0, "bbox": [378, 0, 109, 128], "area": 7620}, {"id": 5270423, "category_id": 190, "iscrowd": 0, "bbox": [272, 162, 368, 162], "area": 17475}, {"id": 2509453, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 167], "area": 26070}], "file_name": "000000018150.png", "image_id": 18150}, {"segments_info": [{"id": 7898505, "category_id": 1, "iscrowd": 0, "bbox": [88, 45, 393, 427], "area": 80723}, {"id": 7771855, "category_id": 58, "iscrowd": 0, "bbox": [252, 161, 37, 36], "area": 759}, {"id": 2892574, "category_id": 62, "iscrowd": 0, "bbox": [28, 123, 369, 347], "area": 23041}, {"id": 1316374, "category_id": 154, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 158233}, {"id": 3487803, "category_id": 184, "iscrowd": 0, "bbox": [480, 445, 62, 24], "area": 839}, {"id": 6856917, "category_id": 196, "iscrowd": 0, "bbox": [320, 341, 119, 97], "area": 6858}, {"id": 3291197, "category_id": 198, "iscrowd": 0, "bbox": [534, 335, 106, 145], "area": 11965}], "file_name": "000000018193.png", "image_id": 18193}, {"segments_info": [{"id": 5141672, "category_id": 1, "iscrowd": 0, "bbox": [454, 185, 80, 159], "area": 9126}, {"id": 2902148, "category_id": 1, "iscrowd": 0, "bbox": [228, 122, 51, 93], "area": 2485}, {"id": 2696491, "category_id": 1, "iscrowd": 0, "bbox": [296, 64, 63, 66], "area": 2211}, {"id": 1451337, "category_id": 1, "iscrowd": 0, "bbox": [370, 77, 37, 92], "area": 1860}, {"id": 1383813, "category_id": 1, "iscrowd": 0, "bbox": [188, 134, 49, 104], "area": 3595}, {"id": 5533297, "category_id": 1, "iscrowd": 0, "bbox": [396, 137, 61, 114], "area": 4000}, {"id": 4934740, "category_id": 1, "iscrowd": 0, "bbox": [226, 32, 54, 86], "area": 1568}, {"id": 2436446, "category_id": 1, "iscrowd": 0, "bbox": [221, 78, 44, 96], "area": 2274}, {"id": 4025253, "category_id": 1, "iscrowd": 0, "bbox": [488, 133, 152, 293], "area": 29998}, {"id": 5138839, "category_id": 1, "iscrowd": 0, "bbox": [1, 168, 128, 252], "area": 23579}, {"id": 3555691, "category_id": 1, "iscrowd": 0, "bbox": [140, 103, 94, 200], "area": 6204}, {"id": 4344948, "category_id": 1, "iscrowd": 0, "bbox": [380, 64, 80, 135], "area": 4200}, {"id": 5333101, "category_id": 1, "iscrowd": 0, "bbox": [68, 152, 108, 257], "area": 16144}, {"id": 3891871, "category_id": 1, "iscrowd": 1, "bbox": [264, 24, 288, 245], "area": 10651}, {"id": 6437897, "category_id": 46, "iscrowd": 0, "bbox": [292, 185, 17, 21], "area": 272}, {"id": 6848676, "category_id": 46, "iscrowd": 0, "bbox": [390, 258, 32, 74], "area": 1093}, {"id": 4150652, "category_id": 46, "iscrowd": 0, "bbox": [285, 323, 35, 99], "area": 2221}, {"id": 3953532, "category_id": 46, "iscrowd": 0, "bbox": [252, 243, 27, 67], "area": 914}, {"id": 4412005, "category_id": 46, "iscrowd": 0, "bbox": [331, 122, 26, 59], "area": 417}, {"id": 6251130, "category_id": 46, "iscrowd": 0, "bbox": [271, 323, 27, 69], "area": 728}, {"id": 7292685, "category_id": 47, "iscrowd": 0, "bbox": [306, 145, 12, 11], "area": 118}, {"id": 8351755, "category_id": 47, "iscrowd": 0, "bbox": [344, 163, 14, 22], "area": 166}, {"id": 5782036, "category_id": 47, "iscrowd": 0, "bbox": [350, 174, 15, 23], "area": 273}, {"id": 8801551, "category_id": 47, "iscrowd": 0, "bbox": [406, 304, 36, 54], "area": 1454}, {"id": 10061600, "category_id": 47, "iscrowd": 0, "bbox": [365, 230, 22, 19], "area": 307}, {"id": 7158027, "category_id": 47, "iscrowd": 0, "bbox": [242, 374, 45, 52], "area": 1956}, {"id": 7755550, "category_id": 47, "iscrowd": 0, "bbox": [235, 295, 35, 26], "area": 685}, {"id": 9066258, "category_id": 47, "iscrowd": 0, "bbox": [358, 244, 25, 39], "area": 781}, {"id": 8797444, "category_id": 47, "iscrowd": 0, "bbox": [237, 317, 38, 55], "area": 1470}, {"id": 6311433, "category_id": 47, "iscrowd": 0, "bbox": [290, 167, 15, 18], "area": 216}, {"id": 4665116, "category_id": 47, "iscrowd": 0, "bbox": [281, 215, 24, 27], "area": 534}, {"id": 7972551, "category_id": 48, "iscrowd": 0, "bbox": [203, 403, 14, 23], "area": 294}, {"id": 5072516, "category_id": 48, "iscrowd": 0, "bbox": [248, 220, 24, 18], "area": 73}, {"id": 9875409, "category_id": 48, "iscrowd": 0, "bbox": [430, 350, 45, 43], "area": 405}, {"id": 5932970, "category_id": 49, "iscrowd": 0, "bbox": [382, 221, 37, 8], "area": 97}, {"id": 3883618, "category_id": 49, "iscrowd": 0, "bbox": [220, 253, 15, 4], "area": 29}, {"id": 3556440, "category_id": 49, "iscrowd": 0, "bbox": [170, 349, 74, 6], "area": 320}, {"id": 9549277, "category_id": 49, "iscrowd": 0, "bbox": [446, 358, 53, 45], "area": 394}, {"id": 6648467, "category_id": 50, "iscrowd": 0, "bbox": [425, 347, 57, 17], "area": 303}, {"id": 6126751, "category_id": 50, "iscrowd": 0, "bbox": [248, 219, 23, 19], "area": 20}, {"id": 7506597, "category_id": 50, "iscrowd": 0, "bbox": [347, 274, 17, 31], "area": 96}, {"id": 2381456, "category_id": 51, "iscrowd": 0, "bbox": [312, 191, 41, 26], "area": 916}, {"id": 1525903, "category_id": 51, "iscrowd": 0, "bbox": [269, 243, 65, 53], "area": 2107}, {"id": 2847416, "category_id": 51, "iscrowd": 0, "bbox": [305, 216, 54, 24], "area": 951}, {"id": 3054297, "category_id": 51, "iscrowd": 0, "bbox": [319, 347, 97, 79], "area": 5746}, {"id": 5536668, "category_id": 51, "iscrowd": 0, "bbox": [295, 156, 48, 22], "area": 644}, {"id": 4691680, "category_id": 51, "iscrowd": 0, "bbox": [444, 406, 79, 20], "area": 1050}, {"id": 420841, "category_id": 57, "iscrowd": 0, "bbox": [284, 249, 14, 7], "area": 62}, {"id": 159727, "category_id": 57, "iscrowd": 0, "bbox": [278, 262, 10, 9], "area": 69}, {"id": 611550, "category_id": 57, "iscrowd": 0, "bbox": [309, 254, 4, 4], "area": 13}, {"id": 4221599, "category_id": 62, "iscrowd": 0, "bbox": [455, 128, 18, 59], "area": 779}, {"id": 5203594, "category_id": 67, "iscrowd": 0, "bbox": [124, 123, 412, 303], "area": 44876}, {"id": 3231613, "category_id": 86, "iscrowd": 0, "bbox": [514, 88, 11, 30], "area": 275}, {"id": 4944001, "category_id": 112, "iscrowd": 0, "bbox": [323, 10, 66, 129], "area": 3353}, {"id": 3553073, "category_id": 156, "iscrowd": 0, "bbox": [250, 10, 76, 80], "area": 2913}, {"id": 10001599, "category_id": 188, "iscrowd": 0, "bbox": [507, 96, 133, 106], "area": 3416}, {"id": 2300691, "category_id": 189, "iscrowd": 0, "bbox": [286, 65, 36, 47], "area": 538}, {"id": 9481414, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 273], "area": 49117}], "file_name": "000000018380.png", "image_id": 18380}, {"segments_info": [{"id": 6121085, "category_id": 1, "iscrowd": 0, "bbox": [301, 186, 121, 127], "area": 5510}, {"id": 4211529, "category_id": 1, "iscrowd": 0, "bbox": [59, 62, 35, 57], "area": 1136}, {"id": 5137806, "category_id": 1, "iscrowd": 0, "bbox": [0, 83, 12, 65], "area": 574}, {"id": 6118245, "category_id": 1, "iscrowd": 0, "bbox": [243, 185, 126, 120], "area": 5243}, {"id": 5330526, "category_id": 1, "iscrowd": 0, "bbox": [330, 70, 61, 138], "area": 4416}, {"id": 4278353, "category_id": 1, "iscrowd": 0, "bbox": [275, 69, 57, 147], "area": 4339}, {"id": 5133656, "category_id": 1, "iscrowd": 0, "bbox": [123, 27, 41, 99], "area": 2212}, {"id": 5525067, "category_id": 1, "iscrowd": 0, "bbox": [70, 96, 53, 121], "area": 2696}, {"id": 5002844, "category_id": 1, "iscrowd": 0, "bbox": [13, 81, 32, 66], "area": 1445}, {"id": 5196108, "category_id": 1, "iscrowd": 0, "bbox": [178, 78, 31, 74], "area": 1826}, {"id": 10793650, "category_id": 15, "iscrowd": 0, "bbox": [0, 141, 224, 12], "area": 851}, {"id": 4341580, "category_id": 39, "iscrowd": 0, "bbox": [106, 155, 16, 49], "area": 105}, {"id": 4345958, "category_id": 40, "iscrowd": 0, "bbox": [319, 143, 13, 15], "area": 134}, {"id": 3028290, "category_id": 40, "iscrowd": 0, "bbox": [298, 217, 21, 28], "area": 289}, {"id": 4547702, "category_id": 145, "iscrowd": 0, "bbox": [0, 165, 640, 262], "area": 144551}, {"id": 4675154, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 194], "area": 97071}], "file_name": "000000018491.png", "image_id": 18491}, {"segments_info": [{"id": 4210241, "category_id": 1, "iscrowd": 0, "bbox": [124, 225, 231, 175], "area": 16792}, {"id": 8621718, "category_id": 128, "iscrowd": 0, "bbox": [0, 62, 72, 50], "area": 2118}, {"id": 3359037, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 515, 205], "area": 72020}, {"id": 11843255, "category_id": 191, "iscrowd": 0, "bbox": [0, 235, 515, 405], "area": 172206}, {"id": 5407862, "category_id": 193, "iscrowd": 0, "bbox": [0, 102, 515, 187], "area": 41058}, {"id": 8822169, "category_id": 198, "iscrowd": 0, "bbox": [51, 162, 403, 59], "area": 1412}], "file_name": "000000018519.png", "image_id": 18519}, {"segments_info": [{"id": 7233884, "category_id": 44, "iscrowd": 0, "bbox": [528, 52, 78, 91], "area": 4813}, {"id": 10655373, "category_id": 44, "iscrowd": 0, "bbox": [460, 72, 77, 93], "area": 5021}, {"id": 9405825, "category_id": 44, "iscrowd": 0, "bbox": [469, 2, 84, 89], "area": 4535}, {"id": 8220524, "category_id": 46, "iscrowd": 0, "bbox": [232, 0, 131, 80], "area": 8007}, {"id": 4671305, "category_id": 49, "iscrowd": 0, "bbox": [0, 135, 21, 62], "area": 756}, {"id": 5202285, "category_id": 51, "iscrowd": 0, "bbox": [318, 163, 319, 307], "area": 68001}, {"id": 5139072, "category_id": 54, "iscrowd": 0, "bbox": [2, 192, 266, 234], "area": 36356}, {"id": 8288892, "category_id": 67, "iscrowd": 0, "bbox": [8, 1, 632, 471], "area": 163377}, {"id": 4537663, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 15670}], "file_name": "000000018575.png", "image_id": 18575}, {"segments_info": [{"id": 5919584, "category_id": 4, "iscrowd": 0, "bbox": [254, 159, 338, 249], "area": 47582}, {"id": 2892836, "category_id": 149, "iscrowd": 0, "bbox": [442, 368, 19, 8], "area": 114}, {"id": 12106173, "category_id": 154, "iscrowd": 0, "bbox": [0, 209, 640, 218], "area": 85908}, {"id": 5993849, "category_id": 184, "iscrowd": 0, "bbox": [15, 85, 395, 117], "area": 10016}, {"id": 14992288, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 196], "area": 108857}], "file_name": "000000018737.png", "image_id": 18737}, {"segments_info": [{"id": 2499881, "category_id": 1, "iscrowd": 0, "bbox": [174, 1, 466, 422], "area": 148968}, {"id": 2169881, "category_id": 32, "iscrowd": 0, "bbox": [269, 176, 92, 201], "area": 5497}, {"id": 1053719, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 115377}], "file_name": "000000018770.png", "image_id": 18770}, {"segments_info": [{"id": 6976126, "category_id": 17, "iscrowd": 0, "bbox": [187, 47, 320, 321], "area": 42418}, {"id": 2112848, "category_id": 118, "iscrowd": 0, "bbox": [298, 302, 128, 124], "area": 4998}, {"id": 11777718, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 211], "area": 80357}], "file_name": "000000018833.png", "image_id": 18833}, {"segments_info": [{"id": 6254445, "category_id": 1, "iscrowd": 0, "bbox": [328, 15, 138, 143], "area": 5595}, {"id": 6644573, "category_id": 1, "iscrowd": 0, "bbox": [115, 172, 49, 61], "area": 2125}, {"id": 6181977, "category_id": 1, "iscrowd": 0, "bbox": [17, 235, 18, 28], "area": 371}, {"id": 5791579, "category_id": 1, "iscrowd": 0, "bbox": [294, 22, 48, 101], "area": 2989}, {"id": 6251080, "category_id": 1, "iscrowd": 0, "bbox": [305, 194, 23, 47], "area": 674}, {"id": 4605762, "category_id": 1, "iscrowd": 0, "bbox": [372, 287, 83, 193], "area": 7249}, {"id": 10330527, "category_id": 3, "iscrowd": 0, "bbox": [591, 255, 34, 46], "area": 911}, {"id": 6779751, "category_id": 8, "iscrowd": 0, "bbox": [25, 74, 581, 400], "area": 167963}, {"id": 9671570, "category_id": 149, "iscrowd": 0, "bbox": [53, 285, 587, 195], "area": 23902}, {"id": 7437430, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 400], "area": 46871}, {"id": 10789791, "category_id": 185, "iscrowd": 0, "bbox": [607, 252, 33, 34], "area": 723}, {"id": 16316151, "category_id": 187, "iscrowd": 0, "bbox": [553, 0, 87, 114], "area": 7758}, {"id": 9277327, "category_id": 191, "iscrowd": 0, "bbox": [0, 317, 640, 163], "area": 5483}, {"id": 5791330, "category_id": 194, "iscrowd": 0, "bbox": [0, 394, 35, 24], "area": 537}, {"id": 12239040, "category_id": 197, "iscrowd": 0, "bbox": [52, 0, 508, 162], "area": 24486}], "file_name": "000000018837.png", "image_id": 18837}, {"segments_info": [{"id": 9735305, "category_id": 3, "iscrowd": 0, "bbox": [221, 8, 26, 5], "area": 60}, {"id": 7171438, "category_id": 3, "iscrowd": 0, "bbox": [345, 1, 47, 11], "area": 365}, {"id": 3880245, "category_id": 16, "iscrowd": 0, "bbox": [308, 165, 21, 40], "area": 451}, {"id": 5260606, "category_id": 95, "iscrowd": 0, "bbox": [0, 0, 482, 87], "area": 12937}, {"id": 6182483, "category_id": 125, "iscrowd": 0, "bbox": [0, 86, 64, 22], "area": 1053}, {"id": 12960189, "category_id": 148, "iscrowd": 0, "bbox": [0, 101, 640, 270], "area": 127558}, {"id": 4873816, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 130], "area": 54963}, {"id": 6904140, "category_id": 192, "iscrowd": 0, "bbox": [56, 50, 21, 16], "area": 257}, {"id": 5068114, "category_id": 197, "iscrowd": 0, "bbox": [238, 60, 22, 16], "area": 259}, {"id": 5528420, "category_id": 198, "iscrowd": 0, "bbox": [0, 183, 637, 188], "area": 39470}], "file_name": "000000019042.png", "image_id": 19042}, {"segments_info": [{"id": 4872299, "category_id": 1, "iscrowd": 0, "bbox": [25, 224, 23, 40], "area": 684}, {"id": 9808840, "category_id": 1, "iscrowd": 0, "bbox": [56, 175, 26, 57], "area": 1152}, {"id": 6120299, "category_id": 1, "iscrowd": 0, "bbox": [347, 229, 24, 39], "area": 464}, {"id": 4405553, "category_id": 1, "iscrowd": 0, "bbox": [552, 228, 30, 35], "area": 508}, {"id": 3552827, "category_id": 1, "iscrowd": 0, "bbox": [4, 220, 24, 42], "area": 574}, {"id": 4209722, "category_id": 1, "iscrowd": 0, "bbox": [44, 224, 33, 59], "area": 1446}, {"id": 5590086, "category_id": 1, "iscrowd": 0, "bbox": [286, 213, 19, 57], "area": 731}, {"id": 4078659, "category_id": 1, "iscrowd": 0, "bbox": [0, 235, 18, 138], "area": 1885}, {"id": 3680032, "category_id": 1, "iscrowd": 0, "bbox": [597, 222, 14, 52], "area": 275}, {"id": 4471613, "category_id": 1, "iscrowd": 0, "bbox": [446, 242, 10, 24], "area": 119}, {"id": 6119539, "category_id": 1, "iscrowd": 0, "bbox": [475, 247, 7, 4], "area": 24}, {"id": 4210764, "category_id": 1, "iscrowd": 0, "bbox": [541, 233, 14, 14], "area": 133}, {"id": 3418917, "category_id": 1, "iscrowd": 0, "bbox": [367, 227, 23, 54], "area": 642}, {"id": 5918787, "category_id": 4, "iscrowd": 0, "bbox": [560, 250, 52, 75], "area": 1904}, {"id": 5064509, "category_id": 4, "iscrowd": 0, "bbox": [186, 271, 133, 95], "area": 7608}, {"id": 6246982, "category_id": 4, "iscrowd": 0, "bbox": [603, 261, 36, 36], "area": 662}, {"id": 6510410, "category_id": 4, "iscrowd": 0, "bbox": [72, 253, 84, 132], "area": 7187}, {"id": 5129272, "category_id": 4, "iscrowd": 0, "bbox": [17, 257, 78, 139], "area": 5837}, {"id": 4864814, "category_id": 4, "iscrowd": 0, "bbox": [284, 251, 57, 99], "area": 1530}, {"id": 7167830, "category_id": 4, "iscrowd": 0, "bbox": [313, 252, 60, 102], "area": 3132}, {"id": 5523519, "category_id": 4, "iscrowd": 0, "bbox": [457, 252, 70, 85], "area": 3145}, {"id": 4865587, "category_id": 4, "iscrowd": 0, "bbox": [361, 257, 44, 91], "area": 1480}, {"id": 5523777, "category_id": 4, "iscrowd": 0, "bbox": [431, 253, 60, 85], "area": 1657}, {"id": 5589311, "category_id": 4, "iscrowd": 0, "bbox": [379, 249, 83, 95], "area": 4308}, {"id": 7825759, "category_id": 4, "iscrowd": 0, "bbox": [592, 269, 28, 45], "area": 374}, {"id": 7564389, "category_id": 4, "iscrowd": 0, "bbox": [143, 257, 49, 119], "area": 3330}, {"id": 6378569, "category_id": 4, "iscrowd": 1, "bbox": [216, 234, 367, 117], "area": 7683}, {"id": 11835007, "category_id": 31, "iscrowd": 0, "bbox": [370, 254, 11, 10], "area": 76}, {"id": 8615788, "category_id": 149, "iscrowd": 0, "bbox": [0, 310, 564, 118], "area": 27891}, {"id": 5992805, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 357], "area": 10604}, {"id": 8287855, "category_id": 191, "iscrowd": 0, "bbox": [370, 373, 270, 55], "area": 10849}, {"id": 7435387, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 325], "area": 155718}, {"id": 11053220, "category_id": 199, "iscrowd": 0, "bbox": [453, 336, 187, 61], "area": 8043}], "file_name": "000000019109.png", "image_id": 19109}, {"segments_info": [{"id": 7372742, "category_id": 1, "iscrowd": 0, "bbox": [245, 339, 307, 136], "area": 32044}, {"id": 4627337, "category_id": 56, "iscrowd": 0, "bbox": [85, 128, 364, 321], "area": 61860}, {"id": 3040623, "category_id": 196, "iscrowd": 0, "bbox": [270, 178, 89, 203], "area": 4637}, {"id": 4999748, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 205], "area": 102050}], "file_name": "000000019221.png", "image_id": 19221}, {"segments_info": [{"id": 4948109, "category_id": 1, "iscrowd": 0, "bbox": [261, 1, 377, 474], "area": 117513}, {"id": 4419450, "category_id": 1, "iscrowd": 0, "bbox": [0, 53, 403, 427], "area": 116801}, {"id": 12445940, "category_id": 59, "iscrowd": 0, "bbox": [4, 304, 233, 169], "area": 23290}, {"id": 14479087, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 400], "area": 44335}], "file_name": "000000019402.png", "image_id": 19402}, {"segments_info": [{"id": 5721688, "category_id": 1, "iscrowd": 0, "bbox": [55, 27, 154, 404], "area": 26966}, {"id": 9492422, "category_id": 37, "iscrowd": 0, "bbox": [320, 271, 22, 20], "area": 361}, {"id": 6578312, "category_id": 43, "iscrowd": 0, "bbox": [88, 242, 73, 137], "area": 3824}, {"id": 10460826, "category_id": 62, "iscrowd": 0, "bbox": [421, 14, 59, 48], "area": 2512}, {"id": 7634807, "category_id": 62, "iscrowd": 0, "bbox": [166, 57, 67, 109], "area": 5783}, {"id": 8491143, "category_id": 62, "iscrowd": 0, "bbox": [344, 59, 72, 108], "area": 5839}, {"id": 8819081, "category_id": 62, "iscrowd": 0, "bbox": [287, 16, 68, 150], "area": 7606}, {"id": 10000023, "category_id": 62, "iscrowd": 0, "bbox": [191, 16, 47, 42], "area": 1575}, {"id": 8161408, "category_id": 62, "iscrowd": 0, "bbox": [522, 60, 74, 113], "area": 6063}, {"id": 10065813, "category_id": 62, "iscrowd": 0, "bbox": [357, 15, 63, 49], "area": 2526}, {"id": 9408141, "category_id": 62, "iscrowd": 0, "bbox": [538, 18, 58, 48], "area": 2538}, {"id": 7306355, "category_id": 62, "iscrowd": 0, "bbox": [412, 60, 55, 108], "area": 5548}, {"id": 10723999, "category_id": 62, "iscrowd": 0, "bbox": [479, 15, 61, 51], "area": 2486}, {"id": 13027016, "category_id": 62, "iscrowd": 0, "bbox": [74, 12, 60, 45], "area": 1277}, {"id": 7832185, "category_id": 62, "iscrowd": 0, "bbox": [225, 58, 68, 109], "area": 5481}, {"id": 8951693, "category_id": 62, "iscrowd": 1, "bbox": [1, 9, 639, 289], "area": 29697}, {"id": 8083762, "category_id": 145, "iscrowd": 0, "bbox": [0, 192, 640, 288], "area": 146721}, {"id": 4153928, "category_id": 199, "iscrowd": 0, "bbox": [0, 126, 640, 92], "area": 11606}], "file_name": "000000019432.png", "image_id": 19432}, {"segments_info": [{"id": 1257078, "category_id": 86, "iscrowd": 0, "bbox": [172, 72, 167, 275], "area": 34436}, {"id": 5729932, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 500, 374], "area": 145804}], "file_name": "000000019742.png", "image_id": 19742}, {"segments_info": [{"id": 4079427, "category_id": 1, "iscrowd": 0, "bbox": [254, 16, 225, 356], "area": 48972}, {"id": 4804183, "category_id": 1, "iscrowd": 0, "bbox": [167, 1, 135, 369], "area": 30489}, {"id": 3687249, "category_id": 63, "iscrowd": 0, "bbox": [71, 59, 254, 259], "area": 25188}, {"id": 8555157, "category_id": 73, "iscrowd": 0, "bbox": [444, 87, 40, 44], "area": 1497}, {"id": 7238534, "category_id": 75, "iscrowd": 0, "bbox": [254, 74, 10, 17], "area": 98}, {"id": 8360106, "category_id": 75, "iscrowd": 0, "bbox": [296, 345, 15, 22], "area": 172}, {"id": 9871522, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 172, 85], "area": 11335}, {"id": 2376812, "category_id": 118, "iscrowd": 0, "bbox": [0, 266, 435, 109], "area": 10525}, {"id": 7306627, "category_id": 199, "iscrowd": 0, "bbox": [268, 0, 223, 123], "area": 8882}], "file_name": "000000019786.png", "image_id": 19786}, {"segments_info": [{"id": 8224125, "category_id": 1, "iscrowd": 0, "bbox": [15, 29, 434, 465], "area": 141581}, {"id": 3421236, "category_id": 32, "iscrowd": 0, "bbox": [143, 295, 139, 205], "area": 8475}, {"id": 15000804, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 458, 500], "area": 76015}], "file_name": "000000019924.png", "image_id": 19924}, {"segments_info": [{"id": 6711140, "category_id": 24, "iscrowd": 0, "bbox": [341, 185, 166, 115], "area": 10739}, {"id": 6711659, "category_id": 24, "iscrowd": 0, "bbox": [110, 200, 107, 106], "area": 6925}, {"id": 2565156, "category_id": 175, "iscrowd": 0, "bbox": [0, 114, 640, 114], "area": 50770}, {"id": 6053980, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 294], "area": 81246}, {"id": 9159091, "category_id": 193, "iscrowd": 0, "bbox": [0, 201, 640, 226], "area": 121041}, {"id": 8482920, "category_id": 197, "iscrowd": 0, "bbox": [20, 64, 78, 43], "area": 2234}], "file_name": "000000020059.png", "image_id": 20059}, {"segments_info": [{"id": 4809084, "category_id": 11, "iscrowd": 0, "bbox": [121, 87, 212, 407], "area": 63020}, {"id": 6452873, "category_id": 118, "iscrowd": 0, "bbox": [0, 301, 182, 199], "area": 25139}, {"id": 5136275, "category_id": 119, "iscrowd": 0, "bbox": [0, 0, 55, 80], "area": 1706}, {"id": 4150110, "category_id": 191, "iscrowd": 0, "bbox": [34, 218, 299, 282], "area": 18659}, {"id": 5927562, "category_id": 194, "iscrowd": 0, "bbox": [311, 219, 22, 281], "area": 956}, {"id": 5071466, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 333, 313], "area": 51257}], "file_name": "000000020107.png", "image_id": 20107}, {"segments_info": [{"id": 3884370, "category_id": 23, "iscrowd": 0, "bbox": [1, 15, 85, 250], "area": 14137}, {"id": 5397864, "category_id": 23, "iscrowd": 0, "bbox": [333, 176, 178, 263], "area": 35173}, {"id": 10069165, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 457], "area": 234700}, {"id": 6910589, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 363, 58], "area": 8006}], "file_name": "000000020247.png", "image_id": 20247}, {"segments_info": [{"id": 8162205, "category_id": 1, "iscrowd": 0, "bbox": [55, 107, 313, 459], "area": 79324}, {"id": 4617106, "category_id": 32, "iscrowd": 0, "bbox": [178, 284, 64, 227], "area": 6723}, {"id": 8026746, "category_id": 51, "iscrowd": 0, "bbox": [1, 495, 263, 135], "area": 24493}, {"id": 1381653, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 423], "area": 101797}, {"id": 4803146, "category_id": 194, "iscrowd": 0, "bbox": [0, 231, 427, 409], "area": 52652}], "file_name": "000000020333.png", "image_id": 20333}, {"segments_info": [{"id": 6181716, "category_id": 28, "iscrowd": 0, "bbox": [86, 143, 92, 112], "area": 4568}, {"id": 3358029, "category_id": 44, "iscrowd": 0, "bbox": [391, 133, 17, 59], "area": 680}, {"id": 3037244, "category_id": 44, "iscrowd": 0, "bbox": [365, 132, 17, 36], "area": 363}, {"id": 4086391, "category_id": 47, "iscrowd": 0, "bbox": [362, 167, 21, 25], "area": 435}, {"id": 5530500, "category_id": 62, "iscrowd": 0, "bbox": [125, 193, 116, 103], "area": 5814}, {"id": 8034223, "category_id": 67, "iscrowd": 0, "bbox": [322, 164, 106, 40], "area": 1787}, {"id": 1849190, "category_id": 86, "iscrowd": 0, "bbox": [405, 133, 12, 53], "area": 424}, {"id": 5142174, "category_id": 88, "iscrowd": 0, "bbox": [171, 80, 114, 88], "area": 5112}, {"id": 9084851, "category_id": 88, "iscrowd": 0, "bbox": [240, 179, 31, 54], "area": 1073}, {"id": 7832979, "category_id": 88, "iscrowd": 0, "bbox": [273, 116, 30, 45], "area": 830}, {"id": 5537452, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 165519}, {"id": 6458793, "category_id": 198, "iscrowd": 0, "bbox": [347, 347, 19, 28], "area": 377}], "file_name": "000000020553.png", "image_id": 20553}, {"segments_info": [{"id": 5460319, "category_id": 1, "iscrowd": 0, "bbox": [493, 151, 14, 38], "area": 331}, {"id": 10199222, "category_id": 1, "iscrowd": 0, "bbox": [480, 158, 13, 28], "area": 191}, {"id": 9671585, "category_id": 1, "iscrowd": 0, "bbox": [488, 162, 10, 26], "area": 124}, {"id": 12501189, "category_id": 9, "iscrowd": 0, "bbox": [87, 166, 12, 5], "area": 48}, {"id": 11969177, "category_id": 9, "iscrowd": 0, "bbox": [46, 172, 16, 6], "area": 86}, {"id": 5201520, "category_id": 9, "iscrowd": 0, "bbox": [122, 19, 222, 587], "area": 53997}, {"id": 10594734, "category_id": 9, "iscrowd": 0, "bbox": [184, 117, 15, 64], "area": 327}, {"id": 11645366, "category_id": 9, "iscrowd": 0, "bbox": [152, 166, 9, 6], "area": 34}, {"id": 7306114, "category_id": 9, "iscrowd": 0, "bbox": [288, 70, 135, 309], "area": 17063}, {"id": 12039609, "category_id": 9, "iscrowd": 0, "bbox": [72, 169, 10, 6], "area": 38}, {"id": 3749178, "category_id": 31, "iscrowd": 0, "bbox": [506, 173, 6, 12], "area": 42}, {"id": 6714027, "category_id": 31, "iscrowd": 0, "bbox": [481, 170, 10, 12], "area": 42}, {"id": 11317948, "category_id": 155, "iscrowd": 0, "bbox": [129, 162, 106, 271], "area": 2956}, {"id": 10395810, "category_id": 178, "iscrowd": 0, "bbox": [0, 162, 442, 478], "area": 87892}, {"id": 15526891, "category_id": 187, "iscrowd": 0, "bbox": [111, 0, 428, 99], "area": 29191}, {"id": 7108469, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 539, 193], "area": 58118}, {"id": 9544609, "category_id": 197, "iscrowd": 0, "bbox": [508, 164, 31, 26], "area": 557}], "file_name": "000000020571.png", "image_id": 20571}, {"segments_info": [{"id": 2834520, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 500, 333], "area": 94870}, {"id": 2776713, "category_id": 58, "iscrowd": 0, "bbox": [2, 217, 217, 108], "area": 8303}, {"id": 4876169, "category_id": 195, "iscrowd": 0, "bbox": [53, 266, 127, 61], "area": 2683}, {"id": 860751, "category_id": 196, "iscrowd": 0, "bbox": [143, 266, 42, 19], "area": 108}], "file_name": "000000020992.png", "image_id": 20992}, {"segments_info": [{"id": 3552314, "category_id": 1, "iscrowd": 0, "bbox": [188, 39, 238, 601], "area": 97167}, {"id": 3158068, "category_id": 1, "iscrowd": 0, "bbox": [22, 115, 202, 511], "area": 77435}, {"id": 4800582, "category_id": 32, "iscrowd": 0, "bbox": [255, 173, 67, 115], "area": 2965}, {"id": 7632255, "category_id": 46, "iscrowd": 0, "bbox": [260, 297, 54, 81], "area": 1419}, {"id": 6315619, "category_id": 109, "iscrowd": 0, "bbox": [188, 48, 65, 378], "area": 6315}, {"id": 7500923, "category_id": 112, "iscrowd": 0, "bbox": [228, 0, 61, 172], "area": 2701}, {"id": 1514015, "category_id": 118, "iscrowd": 0, "bbox": [0, 460, 42, 180], "area": 4351}, {"id": 4081228, "category_id": 156, "iscrowd": 0, "bbox": [0, 117, 68, 204], "area": 10778}, {"id": 4604485, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 260, 28], "area": 6237}, {"id": 2960946, "category_id": 188, "iscrowd": 0, "bbox": [0, 304, 36, 159], "area": 2325}, {"id": 6974320, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 426, 640], "area": 52138}], "file_name": "000000021167.png", "image_id": 21167}, {"segments_info": [{"id": 4149350, "category_id": 62, "iscrowd": 0, "bbox": [245, 0, 119, 78], "area": 5459}, {"id": 8618887, "category_id": 86, "iscrowd": 0, "bbox": [198, 6, 43, 117], "area": 2799}, {"id": 8580740, "category_id": 100, "iscrowd": 0, "bbox": [235, 143, 17, 14], "area": 154}, {"id": 9859132, "category_id": 156, "iscrowd": 0, "bbox": [81, 78, 308, 197], "area": 45670}, {"id": 6973050, "category_id": 189, "iscrowd": 0, "bbox": [0, 66, 114, 215], "area": 9729}, {"id": 6185578, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 500, 281], "area": 34250}], "file_name": "000000021465.png", "image_id": 21465}, {"segments_info": [{"id": 7897740, "category_id": 54, "iscrowd": 0, "bbox": [71, 132, 279, 84], "area": 19306}, {"id": 7370883, "category_id": 54, "iscrowd": 0, "bbox": [0, 234, 508, 246], "area": 91404}, {"id": 7963277, "category_id": 54, "iscrowd": 0, "bbox": [308, 105, 275, 103], "area": 19022}, {"id": 5665410, "category_id": 54, "iscrowd": 0, "bbox": [0, 191, 112, 82], "area": 5735}, {"id": 8617091, "category_id": 54, "iscrowd": 0, "bbox": [347, 174, 293, 164], "area": 28882}, {"id": 789783, "category_id": 74, "iscrowd": 0, "bbox": [438, 48, 202, 103], "area": 13377}, {"id": 657932, "category_id": 75, "iscrowd": 0, "bbox": [257, 46, 221, 64], "area": 7490}, {"id": 1840149, "category_id": 76, "iscrowd": 0, "bbox": [0, 38, 209, 104], "area": 13826}, {"id": 4212305, "category_id": 189, "iscrowd": 0, "bbox": [194, 69, 256, 61], "area": 3557}, {"id": 5529961, "category_id": 195, "iscrowd": 0, "bbox": [319, 0, 189, 59], "area": 8512}, {"id": 4867410, "category_id": 196, "iscrowd": 0, "bbox": [0, 229, 559, 251], "area": 6022}], "file_name": "000000021503.png", "image_id": 21503}, {"segments_info": [{"id": 2237739, "category_id": 1, "iscrowd": 0, "bbox": [42, 47, 438, 581], "area": 142071}, {"id": 1645873, "category_id": 32, "iscrowd": 0, "bbox": [247, 246, 50, 322], "area": 9556}, {"id": 3223602, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 512, 640], "area": 171591}], "file_name": "000000021604.png", "image_id": 21604}, {"segments_info": [{"id": 795740, "category_id": 1, "iscrowd": 0, "bbox": [59, 457, 9, 26], "area": 95}, {"id": 2969467, "category_id": 1, "iscrowd": 0, "bbox": [451, 473, 10, 52], "area": 320}, {"id": 1263486, "category_id": 1, "iscrowd": 0, "bbox": [25, 454, 23, 44], "area": 542}, {"id": 1717611, "category_id": 1, "iscrowd": 0, "bbox": [211, 393, 67, 185], "area": 6049}, {"id": 992588, "category_id": 1, "iscrowd": 0, "bbox": [47, 449, 13, 48], "area": 355}, {"id": 1515314, "category_id": 1, "iscrowd": 0, "bbox": [467, 471, 11, 38], "area": 296}, {"id": 5801395, "category_id": 1, "iscrowd": 0, "bbox": [169, 457, 14, 48], "area": 482}, {"id": 1123397, "category_id": 1, "iscrowd": 0, "bbox": [432, 457, 23, 69], "area": 896}, {"id": 1055544, "category_id": 1, "iscrowd": 0, "bbox": [410, 462, 24, 59], "area": 730}, {"id": 4092068, "category_id": 3, "iscrowd": 0, "bbox": [0, 457, 30, 61], "area": 1357}, {"id": 1063039, "category_id": 10, "iscrowd": 0, "bbox": [261, 204, 21, 58], "area": 800}, {"id": 4026802, "category_id": 31, "iscrowd": 0, "bbox": [448, 469, 8, 28], "area": 97}, {"id": 922673, "category_id": 31, "iscrowd": 0, "bbox": [218, 440, 28, 31], "area": 635}, {"id": 1187651, "category_id": 31, "iscrowd": 0, "bbox": [425, 472, 8, 25], "area": 30}, {"id": 1066626, "category_id": 31, "iscrowd": 0, "bbox": [429, 492, 10, 15], "area": 97}, {"id": 2054813, "category_id": 149, "iscrowd": 0, "bbox": [0, 500, 480, 140], "area": 57211}, {"id": 7713758, "category_id": 181, "iscrowd": 0, "bbox": [178, 430, 143, 55], "area": 3148}, {"id": 9988939, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 468], "area": 102771}, {"id": 3697566, "category_id": 191, "iscrowd": 0, "bbox": [26, 478, 454, 51], "area": 6059}, {"id": 5406892, "category_id": 197, "iscrowd": 0, "bbox": [0, 156, 466, 357], "area": 124391}], "file_name": "000000021839.png", "image_id": 21839}, {"segments_info": [{"id": 8487580, "category_id": 1, "iscrowd": 0, "bbox": [274, 79, 132, 223], "area": 11938}, {"id": 7830429, "category_id": 1, "iscrowd": 0, "bbox": [85, 50, 111, 39], "area": 1744}, {"id": 4537658, "category_id": 1, "iscrowd": 0, "bbox": [423, 21, 72, 58], "area": 1619}, {"id": 5197409, "category_id": 1, "iscrowd": 0, "bbox": [311, 89, 36, 30], "area": 521}, {"id": 8489862, "category_id": 42, "iscrowd": 0, "bbox": [153, 69, 76, 18], "area": 512}, {"id": 12165988, "category_id": 42, "iscrowd": 0, "bbox": [353, 49, 183, 36], "area": 2105}, {"id": 13742222, "category_id": 42, "iscrowd": 0, "bbox": [275, 270, 101, 77], "area": 5120}, {"id": 10919313, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 249195}], "file_name": "000000021879.png", "image_id": 21879}, {"segments_info": [{"id": 8024437, "category_id": 1, "iscrowd": 0, "bbox": [616, 240, 24, 91], "area": 1278}, {"id": 10659243, "category_id": 1, "iscrowd": 0, "bbox": [334, 224, 217, 251], "area": 16574}, {"id": 3157566, "category_id": 22, "iscrowd": 0, "bbox": [5, 110, 314, 277], "area": 44219}, {"id": 3160115, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 385], "area": 152952}, {"id": 5991790, "category_id": 185, "iscrowd": 0, "bbox": [0, 280, 640, 200], "area": 65162}, {"id": 15130827, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 400, 125], "area": 3971}, {"id": 8225924, "category_id": 194, "iscrowd": 0, "bbox": [0, 350, 66, 50], "area": 2122}, {"id": 6642509, "category_id": 197, "iscrowd": 0, "bbox": [0, 142, 46, 184], "area": 3581}, {"id": 7436665, "category_id": 199, "iscrowd": 0, "bbox": [0, 304, 273, 128], "area": 16226}], "file_name": "000000021903.png", "image_id": 21903}, {"segments_info": [{"id": 2172724, "category_id": 18, "iscrowd": 0, "bbox": [72, 121, 144, 255], "area": 22744}, {"id": 1974602, "category_id": 31, "iscrowd": 0, "bbox": [252, 152, 223, 172], "area": 20022}, {"id": 9476525, "category_id": 65, "iscrowd": 0, "bbox": [0, 259, 640, 167], "area": 80306}, {"id": 11185587, "category_id": 109, "iscrowd": 0, "bbox": [52, 0, 588, 324], "area": 127101}, {"id": 2776479, "category_id": 177, "iscrowd": 0, "bbox": [44, 0, 468, 159], "area": 6682}, {"id": 10267572, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 72, 303], "area": 15318}], "file_name": "000000022192.png", "image_id": 22192}, {"segments_info": [{"id": 11120319, "category_id": 1, "iscrowd": 0, "bbox": [93, 21, 278, 251], "area": 32190}, {"id": 5779720, "category_id": 32, "iscrowd": 0, "bbox": [167, 135, 35, 111], "area": 2696}, {"id": 5130306, "category_id": 73, "iscrowd": 0, "bbox": [1, 131, 195, 143], "area": 14714}, {"id": 7436414, "category_id": 84, "iscrowd": 0, "bbox": [385, 242, 40, 21], "area": 607}, {"id": 5930923, "category_id": 189, "iscrowd": 0, "bbox": [0, 240, 425, 42], "area": 5172}, {"id": 14210520, "category_id": 195, "iscrowd": 0, "bbox": [194, 248, 214, 34], "area": 3961}, {"id": 15526113, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 425, 251], "area": 59536}], "file_name": "000000022371.png", "image_id": 22371}, {"segments_info": [{"id": 6440506, "category_id": 5, "iscrowd": 0, "bbox": [328, 47, 276, 112], "area": 8592}, {"id": 11375486, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 495], "area": 308029}], "file_name": "000000022396.png", "image_id": 22396}, {"segments_info": [{"id": 3878449, "category_id": 1, "iscrowd": 0, "bbox": [35, 1, 403, 456], "area": 78881}, {"id": 3620924, "category_id": 15, "iscrowd": 0, "bbox": [175, 435, 78, 26], "area": 1507}, {"id": 5726304, "category_id": 15, "iscrowd": 0, "bbox": [266, 435, 38, 17], "area": 561}, {"id": 3026226, "category_id": 41, "iscrowd": 0, "bbox": [260, 282, 224, 200], "area": 20333}, {"id": 6581109, "category_id": 128, "iscrowd": 0, "bbox": [0, 259, 640, 208], "area": 37757}, {"id": 8226686, "category_id": 181, "iscrowd": 0, "bbox": [33, 387, 29, 15], "area": 299}, {"id": 6252907, "category_id": 184, "iscrowd": 0, "bbox": [17, 17, 623, 455], "area": 55863}, {"id": 14999000, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 262], "area": 79207}, {"id": 12898257, "category_id": 199, "iscrowd": 0, "bbox": [0, 359, 136, 120], "area": 9251}], "file_name": "000000022479.png", "image_id": 22479}, {"segments_info": [{"id": 5731995, "category_id": 20, "iscrowd": 0, "bbox": [0, 252, 611, 228], "area": 88276}, {"id": 6189719, "category_id": 20, "iscrowd": 0, "bbox": [183, 214, 180, 129], "area": 14660}, {"id": 2506042, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 294], "area": 170559}, {"id": 1857864, "category_id": 193, "iscrowd": 0, "bbox": [0, 256, 640, 214], "area": 24889}], "file_name": "000000022589.png", "image_id": 22589}, {"segments_info": [{"id": 5207427, "category_id": 77, "iscrowd": 0, "bbox": [4, 0, 635, 452], "area": 218270}], "file_name": "000000022623.png", "image_id": 22623}, {"segments_info": [{"id": 3356741, "category_id": 1, "iscrowd": 0, "bbox": [144, 83, 219, 526], "area": 50849}, {"id": 3620423, "category_id": 44, "iscrowd": 0, "bbox": [82, 213, 24, 65], "area": 1133}, {"id": 1845041, "category_id": 46, "iscrowd": 0, "bbox": [180, 211, 24, 82], "area": 1031}, {"id": 5529451, "category_id": 51, "iscrowd": 0, "bbox": [23, 257, 32, 24], "area": 546}, {"id": 6448229, "category_id": 82, "iscrowd": 0, "bbox": [137, 48, 256, 497], "area": 68061}, {"id": 2764859, "category_id": 107, "iscrowd": 0, "bbox": [23, 249, 114, 63], "area": 3253}, {"id": 1584469, "category_id": 188, "iscrowd": 0, "bbox": [20, 0, 462, 640], "area": 103567}, {"id": 4936541, "category_id": 190, "iscrowd": 0, "bbox": [70, 500, 382, 140], "area": 39530}, {"id": 10132898, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 137, 640], "area": 27337}], "file_name": "000000022705.png", "image_id": 22705}, {"segments_info": [{"id": 5135938, "category_id": 3, "iscrowd": 0, "bbox": [399, 229, 25, 10], "area": 119}, {"id": 2567193, "category_id": 3, "iscrowd": 0, "bbox": [441, 225, 16, 7], "area": 87}, {"id": 2896413, "category_id": 3, "iscrowd": 0, "bbox": [363, 228, 58, 26], "area": 1036}, {"id": 1257270, "category_id": 6, "iscrowd": 0, "bbox": [237, 189, 139, 142], "area": 13577}, {"id": 6448976, "category_id": 92, "iscrowd": 0, "bbox": [184, 0, 166, 127], "area": 18161}, {"id": 7960914, "category_id": 187, "iscrowd": 0, "bbox": [342, 0, 298, 246], "area": 41751}, {"id": 2568739, "category_id": 197, "iscrowd": 0, "bbox": [0, 249, 640, 230], "area": 63420}], "file_name": "000000022755.png", "image_id": 22755}, {"segments_info": [{"id": 7562331, "category_id": 17, "iscrowd": 0, "bbox": [238, 23, 261, 231], "area": 34650}, {"id": 5134175, "category_id": 18, "iscrowd": 0, "bbox": [36, 76, 253, 219], "area": 18174}, {"id": 4412792, "category_id": 62, "iscrowd": 0, "bbox": [314, 0, 186, 260], "area": 9393}, {"id": 7971456, "category_id": 64, "iscrowd": 0, "bbox": [203, 222, 246, 109], "area": 9814}, {"id": 8688521, "category_id": 67, "iscrowd": 0, "bbox": [347, 229, 153, 101], "area": 10438}, {"id": 4874874, "category_id": 177, "iscrowd": 0, "bbox": [220, 0, 163, 165], "area": 5578}, {"id": 13159112, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 456, 334], "area": 68357}, {"id": 11976106, "category_id": 184, "iscrowd": 0, "bbox": [245, 271, 17, 54], "area": 105}, {"id": 4477559, "category_id": 189, "iscrowd": 0, "bbox": [497, 39, 3, 48], "area": 114}, {"id": 11201486, "category_id": 193, "iscrowd": 0, "bbox": [0, 36, 224, 270], "area": 6894}], "file_name": "000000022892.png", "image_id": 22892}, {"segments_info": [{"id": 5083584, "category_id": 1, "iscrowd": 0, "bbox": [423, 26, 211, 449], "area": 66012}, {"id": 9984846, "category_id": 1, "iscrowd": 0, "bbox": [21, 18, 435, 456], "area": 86890}, {"id": 13548202, "category_id": 37, "iscrowd": 0, "bbox": [49, 195, 139, 139], "area": 14945}], "file_name": "000000022935.png", "image_id": 22935}, {"segments_info": [{"id": 7314606, "category_id": 25, "iscrowd": 0, "bbox": [319, 75, 53, 192], "area": 5256}, {"id": 6721189, "category_id": 25, "iscrowd": 0, "bbox": [65, 186, 112, 100], "area": 3924}, {"id": 2515524, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 213], "area": 89574}, {"id": 8426124, "category_id": 185, "iscrowd": 0, "bbox": [0, 177, 114, 38], "area": 1642}, {"id": 11717322, "category_id": 191, "iscrowd": 0, "bbox": [0, 164, 41, 35], "area": 1234}, {"id": 7123888, "category_id": 193, "iscrowd": 0, "bbox": [0, 192, 500, 183], "area": 56728}, {"id": 8565438, "category_id": 194, "iscrowd": 0, "bbox": [82, 225, 300, 88], "area": 5751}], "file_name": "000000022969.png", "image_id": 22969}, {"segments_info": [{"id": 5789271, "category_id": 31, "iscrowd": 0, "bbox": [407, 232, 168, 181], "area": 23505}, {"id": 7631476, "category_id": 33, "iscrowd": 0, "bbox": [206, 166, 203, 259], "area": 48240}, {"id": 12369091, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 612, 419], "area": 148023}, {"id": 8026234, "category_id": 200, "iscrowd": 0, "bbox": [0, 339, 612, 273], "area": 119357}], "file_name": "000000023023.png", "image_id": 23023}, {"segments_info": [{"id": 3554116, "category_id": 1, "iscrowd": 0, "bbox": [234, 147, 84, 120], "area": 2973}, {"id": 4466219, "category_id": 1, "iscrowd": 0, "bbox": [420, 0, 220, 422], "area": 62285}, {"id": 2896442, "category_id": 19, "iscrowd": 0, "bbox": [254, 214, 48, 130], "area": 3370}, {"id": 4805988, "category_id": 19, "iscrowd": 0, "bbox": [299, 182, 76, 94], "area": 3866}, {"id": 4662810, "category_id": 27, "iscrowd": 0, "bbox": [519, 138, 121, 167], "area": 9131}, {"id": 5859687, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 563, 328], "area": 108779}, {"id": 9539987, "category_id": 198, "iscrowd": 0, "bbox": [0, 182, 496, 245], "area": 55910}], "file_name": "000000023034.png", "image_id": 23034}, {"segments_info": [{"id": 4144959, "category_id": 1, "iscrowd": 0, "bbox": [167, 15, 112, 334], "area": 19975}, {"id": 3158064, "category_id": 19, "iscrowd": 0, "bbox": [0, 279, 489, 149], "area": 46370}, {"id": 4802889, "category_id": 19, "iscrowd": 0, "bbox": [458, 306, 50, 106], "area": 908}, {"id": 4802891, "category_id": 185, "iscrowd": 0, "bbox": [0, 303, 640, 125], "area": 20182}, {"id": 12434877, "category_id": 187, "iscrowd": 0, "bbox": [2, 0, 638, 94], "area": 43199}, {"id": 8553090, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 347], "area": 140382}], "file_name": "000000023126.png", "image_id": 23126}, {"segments_info": [{"id": 11255501, "category_id": 16, "iscrowd": 0, "bbox": [361, 248, 53, 28], "area": 654}, {"id": 11387346, "category_id": 16, "iscrowd": 0, "bbox": [312, 254, 51, 23], "area": 507}, {"id": 7507103, "category_id": 16, "iscrowd": 0, "bbox": [104, 216, 43, 22], "area": 347}, {"id": 8690868, "category_id": 16, "iscrowd": 0, "bbox": [5, 234, 32, 9], "area": 204}, {"id": 9608343, "category_id": 178, "iscrowd": 0, "bbox": [0, 192, 640, 288], "area": 171734}, {"id": 2842207, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 166], "area": 70849}, {"id": 5674672, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 224], "area": 62778}], "file_name": "000000023230.png", "image_id": 23230}, {"segments_info": [{"id": 7369075, "category_id": 3, "iscrowd": 0, "bbox": [0, 0, 499, 371], "area": 127847}, {"id": 7246263, "category_id": 17, "iscrowd": 0, "bbox": [187, 73, 125, 73], "area": 6025}, {"id": 10075104, "category_id": 171, "iscrowd": 0, "bbox": [31, 0, 364, 81], "area": 11039}, {"id": 12371402, "category_id": 181, "iscrowd": 0, "bbox": [52, 22, 307, 75], "area": 7988}, {"id": 4950131, "category_id": 184, "iscrowd": 0, "bbox": [0, 22, 224, 205], "area": 27887}, {"id": 5465206, "category_id": 191, "iscrowd": 0, "bbox": [0, 209, 46, 36], "area": 617}, {"id": 13357526, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 42, 106], "area": 2780}], "file_name": "000000023272.png", "image_id": 23272}, {"segments_info": [{"id": 3955032, "category_id": 1, "iscrowd": 0, "bbox": [248, 92, 101, 171], "area": 8768}, {"id": 10660524, "category_id": 36, "iscrowd": 0, "bbox": [265, 173, 35, 119], "area": 1736}, {"id": 13685200, "category_id": 159, "iscrowd": 0, "bbox": [0, 329, 495, 99], "area": 23895}, {"id": 6964763, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 239348}], "file_name": "000000023359.png", "image_id": 23359}, {"segments_info": [{"id": 4213848, "category_id": 70, "iscrowd": 0, "bbox": [160, 470, 116, 148], "area": 10197}, {"id": 986642, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 109190}, {"id": 854798, "category_id": 188, "iscrowd": 0, "bbox": [141, 480, 163, 57], "area": 1713}, {"id": 657941, "category_id": 190, "iscrowd": 0, "bbox": [140, 498, 253, 142], "area": 19631}, {"id": 7896962, "category_id": 199, "iscrowd": 0, "bbox": [107, 0, 358, 507], "area": 137732}], "file_name": "000000023666.png", "image_id": 23666}, {"segments_info": [{"id": 5597558, "category_id": 38, "iscrowd": 0, "bbox": [188, 112, 102, 72], "area": 2786}, {"id": 14212587, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 141, 640], "area": 73736}, {"id": 9477287, "category_id": 197, "iscrowd": 0, "bbox": [66, 0, 364, 640], "area": 192346}], "file_name": "000000023751.png", "image_id": 23751}, {"segments_info": [{"id": 4479567, "category_id": 56, "iscrowd": 0, "bbox": [76, 120, 245, 138], "area": 20147}, {"id": 10466288, "category_id": 57, "iscrowd": 0, "bbox": [378, 313, 115, 61], "area": 4124}, {"id": 5595317, "category_id": 57, "iscrowd": 0, "bbox": [380, 363, 102, 59], "area": 3257}, {"id": 2370164, "category_id": 57, "iscrowd": 0, "bbox": [426, 270, 49, 35], "area": 777}, {"id": 6781662, "category_id": 57, "iscrowd": 0, "bbox": [338, 285, 122, 52], "area": 4332}, {"id": 3621294, "category_id": 57, "iscrowd": 0, "bbox": [484, 382, 35, 45], "area": 810}, {"id": 5991376, "category_id": 57, "iscrowd": 0, "bbox": [481, 340, 101, 82], "area": 4047}, {"id": 5398379, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 235070}], "file_name": "000000023781.png", "image_id": 23781}, {"segments_info": [{"id": 1249810, "category_id": 1, "iscrowd": 0, "bbox": [2, 32, 610, 387], "area": 98684}, {"id": 3551018, "category_id": 1, "iscrowd": 0, "bbox": [477, 108, 163, 240], "area": 25627}, {"id": 1907226, "category_id": 1, "iscrowd": 0, "bbox": [215, 145, 182, 201], "area": 19040}, {"id": 2695709, "category_id": 63, "iscrowd": 0, "bbox": [342, 123, 266, 205], "area": 16944}, {"id": 8022620, "category_id": 75, "iscrowd": 0, "bbox": [442, 290, 22, 16], "area": 216}, {"id": 4866878, "category_id": 75, "iscrowd": 0, "bbox": [498, 309, 30, 21], "area": 331}, {"id": 4405300, "category_id": 75, "iscrowd": 0, "bbox": [199, 121, 53, 17], "area": 591}, {"id": 6444368, "category_id": 75, "iscrowd": 0, "bbox": [541, 338, 57, 55], "area": 1300}, {"id": 4208948, "category_id": 75, "iscrowd": 0, "bbox": [608, 241, 26, 16], "area": 202}, {"id": 2893346, "category_id": 93, "iscrowd": 0, "bbox": [197, 64, 333, 259], "area": 2942}, {"id": 14344158, "category_id": 181, "iscrowd": 0, "bbox": [478, 0, 71, 109], "area": 5161}, {"id": 4537399, "category_id": 189, "iscrowd": 0, "bbox": [168, 109, 219, 43], "area": 3406}, {"id": 3354927, "category_id": 195, "iscrowd": 0, "bbox": [150, 78, 88, 38], "area": 1866}, {"id": 7301474, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 206], "area": 48597}], "file_name": "000000023899.png", "image_id": 23899}, {"segments_info": [{"id": 5934470, "category_id": 20, "iscrowd": 0, "bbox": [396, 182, 109, 76], "area": 1482}, {"id": 8295574, "category_id": 21, "iscrowd": 0, "bbox": [192, 207, 130, 54], "area": 4331}, {"id": 3421999, "category_id": 21, "iscrowd": 0, "bbox": [283, 104, 123, 39], "area": 2330}, {"id": 6852265, "category_id": 21, "iscrowd": 0, "bbox": [326, 110, 133, 31], "area": 1313}, {"id": 10140350, "category_id": 21, "iscrowd": 0, "bbox": [395, 190, 109, 44], "area": 1095}, {"id": 6646887, "category_id": 21, "iscrowd": 0, "bbox": [127, 101, 151, 48], "area": 3764}, {"id": 3756626, "category_id": 184, "iscrowd": 0, "bbox": [97, 0, 543, 262], "area": 37949}, {"id": 4888189, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 218163}], "file_name": "000000023937.png", "image_id": 23937}, {"segments_info": [{"id": 3947580, "category_id": 1, "iscrowd": 0, "bbox": [458, 237, 63, 101], "area": 4100}, {"id": 6250335, "category_id": 1, "iscrowd": 0, "bbox": [620, 62, 20, 52], "area": 663}, {"id": 4210752, "category_id": 1, "iscrowd": 0, "bbox": [367, 131, 34, 69], "area": 1015}, {"id": 4013373, "category_id": 1, "iscrowd": 0, "bbox": [170, 130, 50, 89], "area": 2339}, {"id": 4473924, "category_id": 1, "iscrowd": 0, "bbox": [328, 233, 62, 100], "area": 3468}, {"id": 6118749, "category_id": 1, "iscrowd": 0, "bbox": [328, 133, 61, 71], "area": 1811}, {"id": 3815994, "category_id": 1, "iscrowd": 0, "bbox": [582, 162, 56, 82], "area": 2447}, {"id": 5131854, "category_id": 1, "iscrowd": 0, "bbox": [404, 238, 64, 99], "area": 3833}, {"id": 6579300, "category_id": 1, "iscrowd": 0, "bbox": [543, 212, 23, 33], "area": 502}, {"id": 4473916, "category_id": 1, "iscrowd": 0, "bbox": [519, 51, 32, 60], "area": 1098}, {"id": 4671303, "category_id": 1, "iscrowd": 0, "bbox": [339, 167, 36, 72], "area": 1537}, {"id": 4934475, "category_id": 1, "iscrowd": 0, "bbox": [286, 237, 60, 88], "area": 3018}, {"id": 4868682, "category_id": 1, "iscrowd": 0, "bbox": [255, 162, 42, 67], "area": 1535}, {"id": 5000268, "category_id": 1, "iscrowd": 1, "bbox": [1, 39, 639, 328], "area": 158920}, {"id": 3026478, "category_id": 32, "iscrowd": 0, "bbox": [526, 266, 11, 19], "area": 133}, {"id": 8092539, "category_id": 32, "iscrowd": 0, "bbox": [379, 157, 4, 6], "area": 21}, {"id": 3487029, "category_id": 32, "iscrowd": 0, "bbox": [414, 199, 4, 13], "area": 31}, {"id": 4276545, "category_id": 32, "iscrowd": 0, "bbox": [235, 199, 7, 18], "area": 91}, {"id": 6316128, "category_id": 32, "iscrowd": 0, "bbox": [486, 275, 16, 20], "area": 128}, {"id": 7895160, "category_id": 32, "iscrowd": 0, "bbox": [179, 252, 7, 21], "area": 97}, {"id": 3750201, "category_id": 32, "iscrowd": 0, "bbox": [600, 252, 4, 11], "area": 21}, {"id": 4276544, "category_id": 32, "iscrowd": 0, "bbox": [351, 269, 8, 20], "area": 92}, {"id": 3618615, "category_id": 32, "iscrowd": 0, "bbox": [302, 162, 7, 15], "area": 61}, {"id": 3881787, "category_id": 32, "iscrowd": 0, "bbox": [32, 202, 7, 10], "area": 38}, {"id": 8882055, "category_id": 32, "iscrowd": 0, "bbox": [451, 198, 6, 28], "area": 162}, {"id": 4210761, "category_id": 32, "iscrowd": 0, "bbox": [69, 205, 5, 10], "area": 42}, {"id": 6184542, "category_id": 32, "iscrowd": 0, "bbox": [230, 251, 8, 16], "area": 70}, {"id": 6118751, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 80], "area": 28308}, {"id": 15658734, "category_id": 187, "iscrowd": 0, "bbox": [396, 0, 233, 14], "area": 1846}, {"id": 9342606, "category_id": 191, "iscrowd": 0, "bbox": [0, 322, 560, 51], "area": 10629}], "file_name": "000000024021.png", "image_id": 24021}, {"segments_info": [{"id": 4936026, "category_id": 1, "iscrowd": 0, "bbox": [250, 358, 11, 17], "area": 124}, {"id": 10267585, "category_id": 1, "iscrowd": 0, "bbox": [106, 356, 10, 19], "area": 129}, {"id": 8350618, "category_id": 38, "iscrowd": 0, "bbox": [217, 52, 230, 153], "area": 3253}, {"id": 4807780, "category_id": 184, "iscrowd": 0, "bbox": [0, 274, 500, 101], "area": 23326}, {"id": 13152177, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 353], "area": 152359}, {"id": 3366241, "category_id": 193, "iscrowd": 0, "bbox": [0, 359, 234, 16], "area": 2326}, {"id": 6584975, "category_id": 197, "iscrowd": 0, "bbox": [0, 318, 500, 57], "area": 5897}], "file_name": "000000024027.png", "image_id": 24027}, {"segments_info": [{"id": 7507624, "category_id": 59, "iscrowd": 0, "bbox": [68, 24, 494, 430], "area": 165797}, {"id": 5134687, "category_id": 100, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 127172}], "file_name": "000000024144.png", "image_id": 24144}, {"segments_info": [{"id": 4145755, "category_id": 1, "iscrowd": 0, "bbox": [311, 49, 79, 267], "area": 13828}, {"id": 4140080, "category_id": 1, "iscrowd": 0, "bbox": [591, 70, 11, 17], "area": 83}, {"id": 7102300, "category_id": 1, "iscrowd": 0, "bbox": [575, 67, 6, 24], "area": 90}, {"id": 4010302, "category_id": 1, "iscrowd": 0, "bbox": [581, 69, 6, 21], "area": 87}, {"id": 3289660, "category_id": 1, "iscrowd": 0, "bbox": [602, 73, 7, 6], "area": 33}, {"id": 7771279, "category_id": 1, "iscrowd": 0, "bbox": [533, 67, 8, 15], "area": 86}, {"id": 7042430, "category_id": 1, "iscrowd": 0, "bbox": [565, 67, 9, 28], "area": 135}, {"id": 3354702, "category_id": 1, "iscrowd": 0, "bbox": [627, 70, 7, 24], "area": 107}, {"id": 3551537, "category_id": 1, "iscrowd": 0, "bbox": [551, 66, 7, 9], "area": 35}, {"id": 2301214, "category_id": 1, "iscrowd": 0, "bbox": [619, 89, 20, 224], "area": 2173}, {"id": 3221285, "category_id": 1, "iscrowd": 0, "bbox": [541, 66, 9, 13], "area": 71}, {"id": 3092798, "category_id": 1, "iscrowd": 0, "bbox": [42, 60, 265, 414], "area": 41262}, {"id": 6385012, "category_id": 1, "iscrowd": 0, "bbox": [556, 70, 5, 10], "area": 23}, {"id": 6907241, "category_id": 1, "iscrowd": 1, "bbox": [558, 50, 35, 31], "area": 409}, {"id": 11317686, "category_id": 47, "iscrowd": 0, "bbox": [0, 308, 29, 39], "area": 391}, {"id": 5204375, "category_id": 47, "iscrowd": 0, "bbox": [290, 167, 16, 26], "area": 341}, {"id": 7966110, "category_id": 47, "iscrowd": 0, "bbox": [0, 317, 23, 42], "area": 825}, {"id": 3557225, "category_id": 47, "iscrowd": 0, "bbox": [30, 276, 31, 51], "area": 1198}, {"id": 10066838, "category_id": 82, "iscrowd": 0, "bbox": [273, 10, 266, 331], "area": 52761}, {"id": 7240327, "category_id": 149, "iscrowd": 0, "bbox": [521, 74, 119, 406], "area": 37506}, {"id": 5592142, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 94, 324], "area": 19095}, {"id": 7635588, "category_id": 184, "iscrowd": 0, "bbox": [524, 0, 100, 71], "area": 4319}, {"id": 14079954, "category_id": 187, "iscrowd": 0, "bbox": [413, 0, 115, 21], "area": 1848}, {"id": 6054769, "category_id": 191, "iscrowd": 0, "bbox": [71, 161, 483, 319], "area": 62218}, {"id": 8091260, "category_id": 197, "iscrowd": 0, "bbox": [575, 0, 65, 95], "area": 3205}, {"id": 9342095, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 432, 480], "area": 63568}], "file_name": "000000024243.png", "image_id": 24243}, {"segments_info": [{"id": 6252903, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 417, 477], "area": 150465}, {"id": 4809420, "category_id": 58, "iscrowd": 0, "bbox": [45, 381, 81, 126], "area": 7139}, {"id": 4218309, "category_id": 58, "iscrowd": 0, "bbox": [187, 443, 176, 105], "area": 10638}, {"id": 4089287, "category_id": 58, "iscrowd": 0, "bbox": [138, 528, 169, 55], "area": 7558}, {"id": 4021435, "category_id": 58, "iscrowd": 0, "bbox": [101, 583, 192, 56], "area": 8280}, {"id": 4154082, "category_id": 58, "iscrowd": 0, "bbox": [121, 386, 144, 87], "area": 6739}, {"id": 4810696, "category_id": 58, "iscrowd": 0, "bbox": [286, 523, 128, 117], "area": 9776}, {"id": 4811718, "category_id": 58, "iscrowd": 0, "bbox": [51, 468, 151, 107], "area": 9653}, {"id": 9276287, "category_id": 62, "iscrowd": 0, "bbox": [352, 306, 127, 281], "area": 17021}, {"id": 4877942, "category_id": 193, "iscrowd": 0, "bbox": [22, 0, 458, 399], "area": 24514}, {"id": 4414872, "category_id": 196, "iscrowd": 0, "bbox": [144, 523, 164, 117], "area": 1107}], "file_name": "000000024567.png", "image_id": 24567}, {"segments_info": [{"id": 1057066, "category_id": 27, "iscrowd": 0, "bbox": [520, 302, 89, 102], "area": 5792}, {"id": 9682639, "category_id": 44, "iscrowd": 0, "bbox": [12, 262, 23, 65], "area": 1071}, {"id": 860467, "category_id": 62, "iscrowd": 0, "bbox": [67, 284, 154, 196], "area": 14221}, {"id": 201506, "category_id": 62, "iscrowd": 0, "bbox": [4, 388, 11, 33], "area": 263}, {"id": 269100, "category_id": 62, "iscrowd": 0, "bbox": [0, 386, 3, 39], "area": 80}, {"id": 2960689, "category_id": 63, "iscrowd": 0, "bbox": [456, 302, 184, 171], "area": 18868}, {"id": 4802636, "category_id": 73, "iscrowd": 0, "bbox": [26, 247, 119, 74], "area": 3203}, {"id": 2049118, "category_id": 84, "iscrowd": 0, "bbox": [328, 321, 97, 41], "area": 3583}, {"id": 1780022, "category_id": 84, "iscrowd": 0, "bbox": [378, 381, 11, 44], "area": 426}, {"id": 5207410, "category_id": 84, "iscrowd": 0, "bbox": [312, 330, 14, 43], "area": 564}, {"id": 2115160, "category_id": 84, "iscrowd": 0, "bbox": [228, 323, 12, 51], "area": 486}, {"id": 598868, "category_id": 84, "iscrowd": 0, "bbox": [248, 330, 4, 41], "area": 143}, {"id": 3567008, "category_id": 84, "iscrowd": 0, "bbox": [0, 323, 59, 26], "area": 1315}, {"id": 3366511, "category_id": 84, "iscrowd": 0, "bbox": [267, 328, 21, 43], "area": 739}, {"id": 2314353, "category_id": 84, "iscrowd": 0, "bbox": [329, 368, 96, 56], "area": 4512}, {"id": 5737119, "category_id": 84, "iscrowd": 0, "bbox": [278, 406, 47, 15], "area": 374}, {"id": 478061, "category_id": 100, "iscrowd": 0, "bbox": [575, 143, 65, 192], "area": 9568}, {"id": 2365542, "category_id": 141, "iscrowd": 0, "bbox": [517, 302, 21, 8], "area": 98}, {"id": 859692, "category_id": 156, "iscrowd": 0, "bbox": [222, 295, 252, 141], "area": 16041}, {"id": 337455, "category_id": 181, "iscrowd": 0, "bbox": [0, 20, 52, 76], "area": 2296}, {"id": 3697798, "category_id": 186, "iscrowd": 0, "bbox": [36, 0, 568, 42], "area": 18333}, {"id": 331032, "category_id": 189, "iscrowd": 0, "bbox": [0, 299, 184, 181], "area": 12973}, {"id": 7122111, "category_id": 195, "iscrowd": 0, "bbox": [45, 302, 280, 120], "area": 1301}, {"id": 4554906, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 420], "area": 166203}, {"id": 1527148, "category_id": 200, "iscrowd": 0, "bbox": [57, 411, 393, 69], "area": 13565}], "file_name": "000000024610.png", "image_id": 24610}, {"segments_info": [{"id": 3490639, "category_id": 22, "iscrowd": 0, "bbox": [114, 149, 227, 148], "area": 19079}, {"id": 3424844, "category_id": 22, "iscrowd": 0, "bbox": [295, 135, 224, 150], "area": 20028}, {"id": 12435635, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 229], "area": 110972}, {"id": 5475206, "category_id": 193, "iscrowd": 0, "bbox": [0, 155, 640, 270], "area": 121546}], "file_name": "000000024919.png", "image_id": 24919}, {"segments_info": [{"id": 5791847, "category_id": 1, "iscrowd": 0, "bbox": [98, 245, 45, 80], "area": 1305}, {"id": 6382449, "category_id": 1, "iscrowd": 0, "bbox": [128, 6, 301, 417], "area": 29798}, {"id": 10661031, "category_id": 34, "iscrowd": 0, "bbox": [332, 129, 90, 75], "area": 4731}, {"id": 10065740, "category_id": 44, "iscrowd": 0, "bbox": [410, 111, 16, 49], "area": 447}, {"id": 5336920, "category_id": 184, "iscrowd": 0, "bbox": [0, 66, 640, 244], "area": 84337}, {"id": 16505514, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 223], "area": 80042}, {"id": 6331013, "category_id": 193, "iscrowd": 0, "bbox": [0, 300, 640, 127], "area": 72136}], "file_name": "000000025057.png", "image_id": 25057}, {"segments_info": [{"id": 6379625, "category_id": 1, "iscrowd": 0, "bbox": [1, 37, 211, 290], "area": 36986}, {"id": 10266816, "category_id": 24, "iscrowd": 0, "bbox": [224, 471, 50, 29], "area": 620}, {"id": 2110561, "category_id": 41, "iscrowd": 0, "bbox": [101, 277, 225, 133], "area": 16171}, {"id": 5134692, "category_id": 49, "iscrowd": 0, "bbox": [39, 311, 105, 75], "area": 1900}, {"id": 5667748, "category_id": 62, "iscrowd": 0, "bbox": [0, 213, 33, 39], "area": 690}, {"id": 6191773, "category_id": 67, "iscrowd": 0, "bbox": [0, 233, 375, 267], "area": 52751}, {"id": 6589356, "category_id": 189, "iscrowd": 0, "bbox": [0, 294, 224, 206], "area": 2840}, {"id": 4680337, "category_id": 195, "iscrowd": 0, "bbox": [70, 279, 146, 71], "area": 1289}, {"id": 2502468, "category_id": 196, "iscrowd": 0, "bbox": [256, 305, 75, 64], "area": 389}, {"id": 5274288, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 295], "area": 64146}], "file_name": "000000025096.png", "image_id": 25096}, {"segments_info": [{"id": 5134945, "category_id": 24, "iscrowd": 0, "bbox": [314, 29, 145, 219], "area": 20974}, {"id": 6382953, "category_id": 24, "iscrowd": 0, "bbox": [0, 2, 342, 327], "area": 102525}, {"id": 2643019, "category_id": 184, "iscrowd": 0, "bbox": [299, 0, 201, 44], "area": 5202}, {"id": 6319214, "category_id": 191, "iscrowd": 0, "bbox": [280, 36, 220, 298], "area": 19979}, {"id": 6060419, "category_id": 194, "iscrowd": 0, "bbox": [310, 21, 174, 227], "area": 3771}], "file_name": "000000025139.png", "image_id": 25139}, {"segments_info": [{"id": 5197647, "category_id": 1, "iscrowd": 0, "bbox": [52, 221, 14, 36], "area": 293}, {"id": 3552822, "category_id": 1, "iscrowd": 0, "bbox": [105, 231, 4, 9], "area": 27}, {"id": 7500402, "category_id": 1, "iscrowd": 0, "bbox": [98, 228, 12, 21], "area": 110}, {"id": 5658198, "category_id": 7, "iscrowd": 0, "bbox": [356, 143, 284, 158], "area": 25807}, {"id": 8947848, "category_id": 15, "iscrowd": 0, "bbox": [195, 233, 5, 7], "area": 19}, {"id": 8026746, "category_id": 15, "iscrowd": 0, "bbox": [26, 245, 31, 13], "area": 226}, {"id": 5987163, "category_id": 15, "iscrowd": 0, "bbox": [90, 242, 15, 8], "area": 83}, {"id": 5066061, "category_id": 15, "iscrowd": 0, "bbox": [183, 233, 5, 8], "area": 28}, {"id": 1118481, "category_id": 27, "iscrowd": 0, "bbox": [50, 247, 8, 10], "area": 49}, {"id": 6974058, "category_id": 144, "iscrowd": 0, "bbox": [170, 234, 22, 17], "area": 183}, {"id": 3092271, "category_id": 147, "iscrowd": 0, "bbox": [0, 217, 640, 176], "area": 29254}, {"id": 5460819, "category_id": 151, "iscrowd": 0, "bbox": [354, 105, 286, 115], "area": 4863}, {"id": 4210752, "category_id": 186, "iscrowd": 0, "bbox": [53, 0, 548, 191], "area": 60023}, {"id": 16250871, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 187], "area": 33991}, {"id": 8487297, "category_id": 190, "iscrowd": 0, "bbox": [0, 213, 640, 214], "area": 76664}, {"id": 11382189, "category_id": 192, "iscrowd": 0, "bbox": [0, 104, 417, 112], "area": 7961}, {"id": 7500395, "category_id": 197, "iscrowd": 0, "bbox": [0, 132, 357, 158], "area": 31401}], "file_name": "000000025181.png", "image_id": 25181}, {"segments_info": [{"id": 723986, "category_id": 1, "iscrowd": 0, "bbox": [172, 154, 282, 262], "area": 28146}, {"id": 1250377, "category_id": 42, "iscrowd": 0, "bbox": [150, 364, 374, 66], "area": 14782}, {"id": 2435377, "category_id": 155, "iscrowd": 0, "bbox": [0, 220, 640, 216], "area": 85868}, {"id": 8554393, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 253], "area": 143250}, {"id": 2303534, "category_id": 192, "iscrowd": 0, "bbox": [492, 167, 148, 78], "area": 3874}], "file_name": "000000025228.png", "image_id": 25228}, {"segments_info": [{"id": 3359566, "category_id": 1, "iscrowd": 0, "bbox": [0, 110, 296, 530], "area": 76407}, {"id": 13351343, "category_id": 1, "iscrowd": 0, "bbox": [304, 102, 12, 27], "area": 233}, {"id": 4154752, "category_id": 1, "iscrowd": 0, "bbox": [163, 120, 190, 348], "area": 38635}, {"id": 5602188, "category_id": 54, "iscrowd": 0, "bbox": [295, 315, 39, 42], "area": 1173}, {"id": 1405591, "category_id": 58, "iscrowd": 0, "bbox": [253, 398, 39, 41], "area": 714}, {"id": 5335143, "category_id": 62, "iscrowd": 0, "bbox": [353, 260, 74, 380], "area": 20521}, {"id": 6912374, "category_id": 62, "iscrowd": 0, "bbox": [1, 165, 80, 108], "area": 4575}, {"id": 4013109, "category_id": 62, "iscrowd": 0, "bbox": [0, 521, 138, 119], "area": 6958}, {"id": 5206394, "category_id": 109, "iscrowd": 0, "bbox": [18, 0, 164, 176], "area": 14660}, {"id": 11445924, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 427, 296], "area": 51747}, {"id": 3778724, "category_id": 195, "iscrowd": 0, "bbox": [321, 105, 73, 267], "area": 4475}, {"id": 3702178, "category_id": 196, "iscrowd": 0, "bbox": [164, 403, 106, 77], "area": 5176}, {"id": 6120809, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 413, 326], "area": 11473}], "file_name": "000000025386.png", "image_id": 25386}, {"segments_info": [{"id": 6579824, "category_id": 1, "iscrowd": 0, "bbox": [149, 74, 137, 400], "area": 28531}, {"id": 592655, "category_id": 1, "iscrowd": 0, "bbox": [91, 184, 24, 61], "area": 692}, {"id": 3288378, "category_id": 1, "iscrowd": 0, "bbox": [371, 136, 124, 342], "area": 23159}, {"id": 592138, "category_id": 3, "iscrowd": 0, "bbox": [69, 200, 29, 35], "area": 578}, {"id": 1844790, "category_id": 3, "iscrowd": 0, "bbox": [0, 201, 45, 35], "area": 1094}, {"id": 460809, "category_id": 3, "iscrowd": 0, "bbox": [20, 198, 50, 42], "area": 1292}, {"id": 790294, "category_id": 3, "iscrowd": 0, "bbox": [97, 195, 28, 24], "area": 222}, {"id": 3881278, "category_id": 32, "iscrowd": 0, "bbox": [202, 140, 28, 118], "area": 1353}, {"id": 3615825, "category_id": 32, "iscrowd": 0, "bbox": [430, 204, 23, 95], "area": 1308}, {"id": 988448, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 252], "area": 98713}, {"id": 592139, "category_id": 149, "iscrowd": 0, "bbox": [0, 219, 640, 69], "area": 1097}, {"id": 394759, "category_id": 184, "iscrowd": 0, "bbox": [482, 0, 158, 162], "area": 19008}, {"id": 1512210, "category_id": 187, "iscrowd": 0, "bbox": [50, 0, 97, 107], "area": 6621}, {"id": 2238775, "category_id": 191, "iscrowd": 0, "bbox": [0, 198, 640, 282], "area": 118832}], "file_name": "000000025393.png", "image_id": 25393}, {"segments_info": [{"id": 1318708, "category_id": 1, "iscrowd": 0, "bbox": [436, 264, 44, 146], "area": 3806}, {"id": 7635126, "category_id": 1, "iscrowd": 0, "bbox": [367, 478, 113, 78], "area": 5794}, {"id": 7961992, "category_id": 1, "iscrowd": 0, "bbox": [42, 134, 246, 418], "area": 58876}, {"id": 1645342, "category_id": 44, "iscrowd": 0, "bbox": [213, 373, 43, 57], "area": 1465}, {"id": 1383460, "category_id": 44, "iscrowd": 0, "bbox": [52, 1, 24, 50], "area": 860}, {"id": 1381917, "category_id": 44, "iscrowd": 0, "bbox": [148, 0, 16, 62], "area": 780}, {"id": 1449516, "category_id": 44, "iscrowd": 0, "bbox": [172, 7, 13, 34], "area": 265}, {"id": 1644830, "category_id": 44, "iscrowd": 0, "bbox": [312, 68, 19, 45], "area": 651}, {"id": 1581355, "category_id": 44, "iscrowd": 0, "bbox": [130, 18, 16, 50], "area": 565}, {"id": 2107181, "category_id": 44, "iscrowd": 0, "bbox": [84, 2, 19, 56], "area": 713}, {"id": 263430, "category_id": 44, "iscrowd": 0, "bbox": [234, 22, 17, 72], "area": 941}, {"id": 395016, "category_id": 44, "iscrowd": 0, "bbox": [264, 17, 30, 87], "area": 1971}, {"id": 461066, "category_id": 44, "iscrowd": 0, "bbox": [42, 143, 30, 17], "area": 376}, {"id": 1120031, "category_id": 44, "iscrowd": 0, "bbox": [360, 83, 13, 38], "area": 297}, {"id": 1382943, "category_id": 44, "iscrowd": 0, "bbox": [332, 71, 14, 45], "area": 406}, {"id": 988185, "category_id": 44, "iscrowd": 0, "bbox": [343, 77, 10, 41], "area": 291}, {"id": 922395, "category_id": 44, "iscrowd": 1, "bbox": [23, 41, 457, 417], "area": 16467}, {"id": 1648186, "category_id": 46, "iscrowd": 0, "bbox": [366, 260, 10, 33], "area": 225}, {"id": 1782089, "category_id": 46, "iscrowd": 0, "bbox": [338, 266, 9, 28], "area": 144}, {"id": 1978439, "category_id": 46, "iscrowd": 0, "bbox": [344, 264, 15, 32], "area": 300}, {"id": 1450550, "category_id": 46, "iscrowd": 0, "bbox": [356, 266, 11, 18], "area": 90}, {"id": 4013913, "category_id": 46, "iscrowd": 0, "bbox": [355, 410, 64, 165], "area": 5661}, {"id": 1977412, "category_id": 46, "iscrowd": 0, "bbox": [359, 280, 8, 15], "area": 85}, {"id": 1912904, "category_id": 46, "iscrowd": 0, "bbox": [327, 270, 11, 25], "area": 186}, {"id": 3884381, "category_id": 47, "iscrowd": 0, "bbox": [244, 438, 131, 190], "area": 19907}, {"id": 988709, "category_id": 100, "iscrowd": 0, "bbox": [429, 233, 36, 41], "area": 1079}, {"id": 527118, "category_id": 186, "iscrowd": 0, "bbox": [200, 0, 280, 104], "area": 14628}, {"id": 988966, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 480, 520], "area": 92658}, {"id": 1386835, "category_id": 189, "iscrowd": 0, "bbox": [0, 305, 480, 335], "area": 38941}, {"id": 2441045, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 320], "area": 19275}], "file_name": "000000025394.png", "image_id": 25394}, {"segments_info": [{"id": 11254723, "category_id": 1, "iscrowd": 0, "bbox": [130, 244, 186, 396], "area": 33657}, {"id": 577959, "category_id": 37, "iscrowd": 0, "bbox": [382, 37, 33, 19], "area": 509}, {"id": 5409145, "category_id": 43, "iscrowd": 0, "bbox": [291, 125, 120, 148], "area": 5253}, {"id": 489062, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 233555}], "file_name": "000000025424.png", "image_id": 25424}, {"segments_info": [{"id": 6840671, "category_id": 1, "iscrowd": 0, "bbox": [190, 29, 163, 195], "area": 18855}, {"id": 9081758, "category_id": 17, "iscrowd": 0, "bbox": [134, 189, 376, 155], "area": 34614}, {"id": 7110022, "category_id": 47, "iscrowd": 0, "bbox": [0, 424, 79, 56], "area": 3527}, {"id": 3485742, "category_id": 72, "iscrowd": 0, "bbox": [156, 1, 400, 255], "area": 65939}, {"id": 3024930, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 60, 372], "area": 17480}, {"id": 3096139, "category_id": 156, "iscrowd": 0, "bbox": [158, 0, 482, 480], "area": 92207}, {"id": 2766924, "category_id": 188, "iscrowd": 0, "bbox": [190, 310, 23, 18], "area": 205}, {"id": 3955557, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 557, 480], "area": 61036}], "file_name": "000000025560.png", "image_id": 25560}, {"segments_info": [{"id": 1911328, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 475, 480], "area": 87192}, {"id": 15977905, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 111389}], "file_name": "000000025593.png", "image_id": 25593}, {"segments_info": [{"id": 7235424, "category_id": 1, "iscrowd": 0, "bbox": [575, 29, 65, 186], "area": 5929}, {"id": 4607566, "category_id": 1, "iscrowd": 0, "bbox": [323, 110, 317, 304], "area": 46831}, {"id": 1058354, "category_id": 1, "iscrowd": 0, "bbox": [521, 54, 45, 51], "area": 1145}, {"id": 595505, "category_id": 1, "iscrowd": 0, "bbox": [490, 62, 23, 31], "area": 457}, {"id": 9677752, "category_id": 47, "iscrowd": 0, "bbox": [309, 315, 89, 156], "area": 11113}, {"id": 7046798, "category_id": 47, "iscrowd": 0, "bbox": [35, 413, 126, 67], "area": 5816}, {"id": 3762826, "category_id": 59, "iscrowd": 0, "bbox": [39, 338, 196, 114], "area": 9359}, {"id": 1183752, "category_id": 62, "iscrowd": 0, "bbox": [39, 168, 67, 113], "area": 4576}, {"id": 5392459, "category_id": 62, "iscrowd": 0, "bbox": [256, 236, 162, 71], "area": 8595}, {"id": 263942, "category_id": 62, "iscrowd": 0, "bbox": [457, 113, 30, 36], "area": 471}, {"id": 1120280, "category_id": 62, "iscrowd": 0, "bbox": [516, 87, 15, 21], "area": 232}, {"id": 1056550, "category_id": 62, "iscrowd": 0, "bbox": [115, 174, 93, 112], "area": 3958}, {"id": 659728, "category_id": 62, "iscrowd": 0, "bbox": [369, 140, 40, 100], "area": 2277}, {"id": 529170, "category_id": 62, "iscrowd": 0, "bbox": [185, 185, 121, 108], "area": 8156}, {"id": 988951, "category_id": 62, "iscrowd": 0, "bbox": [401, 151, 42, 132], "area": 3293}, {"id": 6177067, "category_id": 62, "iscrowd": 0, "bbox": [135, 158, 17, 12], "area": 162}, {"id": 1843754, "category_id": 62, "iscrowd": 0, "bbox": [243, 152, 77, 36], "area": 1598}, {"id": 2827033, "category_id": 62, "iscrowd": 0, "bbox": [115, 161, 18, 8], "area": 91}, {"id": 1844524, "category_id": 67, "iscrowd": 0, "bbox": [154, 173, 223, 104], "area": 5325}, {"id": 8165542, "category_id": 67, "iscrowd": 0, "bbox": [4, 276, 531, 198], "area": 55520}, {"id": 989476, "category_id": 67, "iscrowd": 0, "bbox": [437, 145, 23, 24], "area": 297}, {"id": 198151, "category_id": 67, "iscrowd": 0, "bbox": [431, 105, 63, 28], "area": 712}, {"id": 10659209, "category_id": 84, "iscrowd": 0, "bbox": [468, 365, 172, 115], "area": 14174}, {"id": 527116, "category_id": 107, "iscrowd": 0, "bbox": [0, 106, 380, 73], "area": 10612}, {"id": 1119249, "category_id": 112, "iscrowd": 0, "bbox": [341, 0, 47, 123], "area": 3153}, {"id": 3502733, "category_id": 130, "iscrowd": 0, "bbox": [33, 10, 530, 32], "area": 1353}, {"id": 788744, "category_id": 156, "iscrowd": 0, "bbox": [308, 98, 109, 85], "area": 2747}, {"id": 527378, "category_id": 177, "iscrowd": 0, "bbox": [183, 0, 275, 156], "area": 15601}, {"id": 921354, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 218, 159], "area": 28470}, {"id": 6390156, "category_id": 189, "iscrowd": 0, "bbox": [0, 284, 476, 196], "area": 3155}, {"id": 2438973, "category_id": 190, "iscrowd": 0, "bbox": [13, 254, 474, 79], "area": 1767}, {"id": 5655108, "category_id": 195, "iscrowd": 0, "bbox": [267, 13, 290, 152], "area": 5128}, {"id": 462864, "category_id": 199, "iscrowd": 0, "bbox": [429, 0, 211, 128], "area": 13610}], "file_name": "000000025603.png", "image_id": 25603}, {"segments_info": [{"id": 9010814, "category_id": 47, "iscrowd": 0, "bbox": [370, 203, 79, 117], "area": 7463}, {"id": 10393749, "category_id": 50, "iscrowd": 0, "bbox": [231, 185, 74, 89], "area": 3463}, {"id": 9085341, "category_id": 51, "iscrowd": 0, "bbox": [14, 126, 335, 162], "area": 25800}, {"id": 6054749, "category_id": 51, "iscrowd": 0, "bbox": [562, 31, 78, 92], "area": 5180}, {"id": 6202767, "category_id": 56, "iscrowd": 0, "bbox": [46, 217, 55, 35], "area": 1065}, {"id": 2768960, "category_id": 56, "iscrowd": 0, "bbox": [503, 192, 82, 72], "area": 2434}, {"id": 3764573, "category_id": 56, "iscrowd": 0, "bbox": [213, 183, 38, 18], "area": 462}, {"id": 5348744, "category_id": 56, "iscrowd": 0, "bbox": [39, 134, 144, 84], "area": 7133}, {"id": 5346431, "category_id": 56, "iscrowd": 0, "bbox": [265, 170, 13, 17], "area": 138}, {"id": 5808783, "category_id": 56, "iscrowd": 0, "bbox": [100, 211, 72, 47], "area": 2001}, {"id": 6603694, "category_id": 56, "iscrowd": 0, "bbox": [166, 214, 36, 47], "area": 1015}, {"id": 7966642, "category_id": 60, "iscrowd": 0, "bbox": [443, 93, 38, 27], "area": 751}, {"id": 9742022, "category_id": 60, "iscrowd": 0, "bbox": [541, 102, 29, 32], "area": 550}, {"id": 8492215, "category_id": 60, "iscrowd": 0, "bbox": [473, 112, 40, 31], "area": 981}, {"id": 7966901, "category_id": 60, "iscrowd": 0, "bbox": [512, 121, 46, 33], "area": 1045}, {"id": 8295096, "category_id": 60, "iscrowd": 0, "bbox": [436, 114, 41, 33], "area": 749}, {"id": 7308458, "category_id": 60, "iscrowd": 0, "bbox": [411, 123, 43, 33], "area": 1154}, {"id": 9017266, "category_id": 60, "iscrowd": 0, "bbox": [504, 89, 43, 38], "area": 1308}, {"id": 2988196, "category_id": 100, "iscrowd": 0, "bbox": [287, 36, 214, 54], "area": 5513}, {"id": 1909039, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 145], "area": 34148}, {"id": 5659240, "category_id": 189, "iscrowd": 0, "bbox": [0, 45, 640, 435], "area": 117313}, {"id": 1908002, "category_id": 190, "iscrowd": 0, "bbox": [555, 404, 85, 76], "area": 3170}, {"id": 7908056, "category_id": 196, "iscrowd": 0, "bbox": [137, 107, 503, 373], "area": 27635}], "file_name": "000000025986.png", "image_id": 25986}, {"segments_info": [{"id": 3420983, "category_id": 1, "iscrowd": 0, "bbox": [15, 228, 21, 52], "area": 661}, {"id": 4866387, "category_id": 1, "iscrowd": 0, "bbox": [33, 236, 23, 52], "area": 809}, {"id": 6443349, "category_id": 1, "iscrowd": 0, "bbox": [65, 236, 5, 13], "area": 39}, {"id": 5656121, "category_id": 1, "iscrowd": 0, "bbox": [354, 230, 21, 24], "area": 287}, {"id": 6051160, "category_id": 3, "iscrowd": 0, "bbox": [579, 253, 61, 66], "area": 3024}, {"id": 7367300, "category_id": 3, "iscrowd": 0, "bbox": [375, 258, 134, 73], "area": 7458}, {"id": 8945796, "category_id": 3, "iscrowd": 0, "bbox": [388, 247, 45, 23], "area": 494}, {"id": 8682362, "category_id": 3, "iscrowd": 0, "bbox": [164, 242, 128, 90], "area": 8290}, {"id": 6511741, "category_id": 3, "iscrowd": 0, "bbox": [522, 260, 81, 48], "area": 2411}, {"id": 5723989, "category_id": 6, "iscrowd": 0, "bbox": [254, 199, 146, 105], "area": 11096}, {"id": 12629684, "category_id": 8, "iscrowd": 0, "bbox": [134, 196, 77, 107], "area": 5068}, {"id": 10721177, "category_id": 8, "iscrowd": 0, "bbox": [432, 246, 91, 59], "area": 1191}, {"id": 3816795, "category_id": 10, "iscrowd": 0, "bbox": [111, 159, 15, 31], "area": 445}, {"id": 6704718, "category_id": 92, "iscrowd": 0, "bbox": [0, 136, 35, 47], "area": 1077}, {"id": 12629690, "category_id": 149, "iscrowd": 0, "bbox": [0, 284, 640, 143], "area": 58314}, {"id": 4216653, "category_id": 184, "iscrowd": 0, "bbox": [14, 0, 516, 274], "area": 55728}, {"id": 15724270, "category_id": 187, "iscrowd": 0, "bbox": [81, 0, 144, 19], "area": 1299}, {"id": 11051950, "category_id": 191, "iscrowd": 0, "bbox": [0, 239, 208, 160], "area": 20110}, {"id": 8487304, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 289], "area": 90482}], "file_name": "000000026204.png", "image_id": 26204}, {"segments_info": [{"id": 2762075, "category_id": 1, "iscrowd": 0, "bbox": [0, 1, 131, 293], "area": 20363}, {"id": 4011571, "category_id": 62, "iscrowd": 0, "bbox": [359, 54, 139, 80], "area": 9410}, {"id": 7229249, "category_id": 73, "iscrowd": 0, "bbox": [107, 5, 290, 288], "area": 36215}, {"id": 6245964, "category_id": 75, "iscrowd": 0, "bbox": [39, 291, 86, 76], "area": 3123}, {"id": 5524550, "category_id": 76, "iscrowd": 0, "bbox": [114, 158, 283, 135], "area": 33200}, {"id": 10262166, "category_id": 77, "iscrowd": 0, "bbox": [398, 198, 61, 61], "area": 2625}, {"id": 15395557, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 68121}, {"id": 4077622, "category_id": 200, "iscrowd": 0, "bbox": [0, 176, 42, 127], "area": 494}], "file_name": "000000026465.png", "image_id": 26465}, {"segments_info": [{"id": 2369579, "category_id": 44, "iscrowd": 0, "bbox": [554, 240, 56, 113], "area": 5150}, {"id": 11381376, "category_id": 72, "iscrowd": 0, "bbox": [253, 90, 152, 177], "area": 20825}, {"id": 3949120, "category_id": 73, "iscrowd": 0, "bbox": [436, 194, 143, 107], "area": 9007}, {"id": 2564644, "category_id": 74, "iscrowd": 0, "bbox": [422, 326, 48, 40], "area": 1389}, {"id": 1843493, "category_id": 74, "iscrowd": 0, "bbox": [411, 279, 26, 23], "area": 434}, {"id": 6515567, "category_id": 76, "iscrowd": 0, "bbox": [216, 268, 195, 59], "area": 9334}, {"id": 3098181, "category_id": 84, "iscrowd": 0, "bbox": [134, 188, 30, 84], "area": 603}, {"id": 4740667, "category_id": 84, "iscrowd": 0, "bbox": [63, 201, 16, 72], "area": 504}, {"id": 5008007, "category_id": 84, "iscrowd": 0, "bbox": [153, 176, 29, 95], "area": 793}, {"id": 5264735, "category_id": 84, "iscrowd": 0, "bbox": [69, 193, 31, 77], "area": 907}, {"id": 10133927, "category_id": 84, "iscrowd": 0, "bbox": [51, 295, 123, 53], "area": 4366}, {"id": 3092081, "category_id": 84, "iscrowd": 0, "bbox": [159, 197, 11, 75], "area": 483}, {"id": 7306631, "category_id": 84, "iscrowd": 0, "bbox": [64, 266, 101, 35], "area": 2598}, {"id": 5396834, "category_id": 84, "iscrowd": 0, "bbox": [97, 198, 16, 75], "area": 527}, {"id": 5458233, "category_id": 84, "iscrowd": 0, "bbox": [96, 191, 25, 79], "area": 542}, {"id": 4146720, "category_id": 84, "iscrowd": 0, "bbox": [114, 205, 14, 64], "area": 633}, {"id": 5398892, "category_id": 84, "iscrowd": 0, "bbox": [127, 195, 20, 73], "area": 673}, {"id": 4871996, "category_id": 84, "iscrowd": 0, "bbox": [66, 196, 22, 76], "area": 491}, {"id": 5396789, "category_id": 84, "iscrowd": 0, "bbox": [119, 192, 18, 77], "area": 650}, {"id": 4213329, "category_id": 100, "iscrowd": 0, "bbox": [19, 220, 68, 70], "area": 2088}, {"id": 5599867, "category_id": 180, "iscrowd": 0, "bbox": [4, 0, 320, 41], "area": 7392}, {"id": 8949902, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 326, 202], "area": 43580}, {"id": 3423556, "category_id": 189, "iscrowd": 0, "bbox": [7, 248, 633, 178], "area": 68891}, {"id": 7106149, "category_id": 195, "iscrowd": 0, "bbox": [45, 185, 142, 124], "area": 1240}, {"id": 5138808, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 307], "area": 67027}], "file_name": "000000026564.png", "image_id": 26564}, {"segments_info": [{"id": 1325144, "category_id": 1, "iscrowd": 0, "bbox": [218, 471, 32, 69], "area": 1438}, {"id": 3762600, "category_id": 1, "iscrowd": 0, "bbox": [83, 401, 32, 61], "area": 982}, {"id": 8890319, "category_id": 1, "iscrowd": 0, "bbox": [327, 548, 46, 92], "area": 3027}, {"id": 3042984, "category_id": 1, "iscrowd": 0, "bbox": [229, 516, 31, 44], "area": 701}, {"id": 3629205, "category_id": 1, "iscrowd": 0, "bbox": [39, 297, 66, 152], "area": 6265}, {"id": 1719645, "category_id": 1, "iscrowd": 0, "bbox": [162, 444, 54, 56], "area": 1949}, {"id": 2386095, "category_id": 1, "iscrowd": 0, "bbox": [196, 490, 26, 46], "area": 775}, {"id": 2640235, "category_id": 1, "iscrowd": 0, "bbox": [245, 165, 137, 151], "area": 9999}, {"id": 2372935, "category_id": 1, "iscrowd": 0, "bbox": [368, 565, 42, 75], "area": 2260}, {"id": 1786472, "category_id": 1, "iscrowd": 0, "bbox": [1, 347, 48, 74], "area": 2234}, {"id": 1461118, "category_id": 1, "iscrowd": 0, "bbox": [288, 515, 37, 29], "area": 538}, {"id": 3234181, "category_id": 1, "iscrowd": 0, "bbox": [255, 498, 42, 41], "area": 791}, {"id": 2054285, "category_id": 1, "iscrowd": 0, "bbox": [104, 433, 32, 40], "area": 820}, {"id": 2315922, "category_id": 1, "iscrowd": 1, "bbox": [252, 523, 23, 45], "area": 655}, {"id": 3303820, "category_id": 41, "iscrowd": 0, "bbox": [217, 250, 39, 44], "area": 1284}, {"id": 6837109, "category_id": 82, "iscrowd": 0, "bbox": [272, 539, 42, 48], "area": 1430}, {"id": 463386, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 412, 519], "area": 173625}, {"id": 2243661, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 63178}], "file_name": "000000026690.png", "image_id": 26690}, {"segments_info": [{"id": 9674654, "category_id": 3, "iscrowd": 0, "bbox": [61, 188, 76, 42], "area": 2460}, {"id": 9472645, "category_id": 3, "iscrowd": 0, "bbox": [135, 160, 74, 85], "area": 3416}, {"id": 1780861, "category_id": 11, "iscrowd": 0, "bbox": [127, 26, 259, 614], "area": 90962}, {"id": 8493988, "category_id": 128, "iscrowd": 0, "bbox": [66, 151, 95, 41], "area": 1991}, {"id": 6971736, "category_id": 149, "iscrowd": 0, "bbox": [0, 225, 211, 332], "area": 44278}, {"id": 13754081, "category_id": 151, "iscrowd": 0, "bbox": [99, 128, 45, 37], "area": 1009}, {"id": 3496537, "category_id": 184, "iscrowd": 0, "bbox": [33, 0, 390, 293], "area": 39668}, {"id": 16580093, "category_id": 187, "iscrowd": 0, "bbox": [128, 0, 216, 88], "area": 8077}, {"id": 6187626, "category_id": 191, "iscrowd": 0, "bbox": [0, 370, 423, 270], "area": 50455}, {"id": 461841, "category_id": 194, "iscrowd": 0, "bbox": [341, 350, 82, 22], "area": 1588}, {"id": 11846601, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 227, 247], "area": 18190}, {"id": 1716023, "category_id": 199, "iscrowd": 0, "bbox": [341, 321, 82, 32], "area": 2283}], "file_name": "000000026926.png", "image_id": 26926}, {"segments_info": [{"id": 13290451, "category_id": 1, "iscrowd": 0, "bbox": [143, 0, 55, 77], "area": 2096}, {"id": 13223093, "category_id": 1, "iscrowd": 0, "bbox": [106, 2, 26, 84], "area": 1068}, {"id": 9338965, "category_id": 33, "iscrowd": 0, "bbox": [275, 138, 211, 84], "area": 15890}, {"id": 7571566, "category_id": 33, "iscrowd": 0, "bbox": [278, 219, 215, 88], "area": 15788}, {"id": 9871792, "category_id": 33, "iscrowd": 0, "bbox": [151, 89, 82, 71], "area": 4319}, {"id": 7172739, "category_id": 33, "iscrowd": 0, "bbox": [210, 59, 225, 117], "area": 15669}, {"id": 6449791, "category_id": 33, "iscrowd": 0, "bbox": [136, 222, 98, 71], "area": 6210}, {"id": 5528957, "category_id": 33, "iscrowd": 0, "bbox": [103, 167, 68, 169], "area": 5268}, {"id": 8160914, "category_id": 33, "iscrowd": 0, "bbox": [145, 157, 90, 68], "area": 5508}, {"id": 6908550, "category_id": 33, "iscrowd": 0, "bbox": [231, 172, 50, 126], "area": 5538}, {"id": 8755828, "category_id": 112, "iscrowd": 0, "bbox": [332, 0, 299, 313], "area": 56637}, {"id": 10858151, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 337, 178], "area": 15793}, {"id": 8812131, "category_id": 191, "iscrowd": 0, "bbox": [0, 282, 640, 145], "area": 71081}, {"id": 12174529, "category_id": 199, "iscrowd": 0, "bbox": [622, 0, 18, 333], "area": 5254}], "file_name": "000000026941.png", "image_id": 26941}, {"segments_info": [{"id": 5265797, "category_id": 1, "iscrowd": 0, "bbox": [163, 38, 248, 384], "area": 62854}, {"id": 2502713, "category_id": 63, "iscrowd": 0, "bbox": [3, 168, 193, 253], "area": 39528}, {"id": 2041904, "category_id": 63, "iscrowd": 0, "bbox": [361, 163, 279, 261], "area": 60894}, {"id": 8421255, "category_id": 75, "iscrowd": 0, "bbox": [362, 181, 26, 30], "area": 515}, {"id": 2305076, "category_id": 141, "iscrowd": 0, "bbox": [0, 254, 4, 155], "area": 581}, {"id": 9276562, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 640, 254], "area": 103037}], "file_name": "000000027186.png", "image_id": 27186}, {"segments_info": [{"id": 9145738, "category_id": 44, "iscrowd": 0, "bbox": [177, 108, 39, 65], "area": 2134}, {"id": 4933191, "category_id": 62, "iscrowd": 0, "bbox": [298, 172, 315, 308], "area": 49086}, {"id": 8418141, "category_id": 73, "iscrowd": 0, "bbox": [225, 40, 142, 123], "area": 12093}, {"id": 10197138, "category_id": 74, "iscrowd": 0, "bbox": [395, 168, 30, 14], "area": 276}, {"id": 10002335, "category_id": 76, "iscrowd": 0, "bbox": [237, 175, 155, 35], "area": 2705}, {"id": 1841435, "category_id": 76, "iscrowd": 0, "bbox": [242, 130, 104, 19], "area": 1037}, {"id": 10596018, "category_id": 76, "iscrowd": 0, "bbox": [16, 392, 130, 57], "area": 4419}, {"id": 2305604, "category_id": 118, "iscrowd": 0, "bbox": [141, 306, 499, 174], "area": 33980}, {"id": 12501444, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 544, 151], "area": 40805}, {"id": 7762287, "category_id": 181, "iscrowd": 0, "bbox": [122, 0, 201, 126], "area": 13918}, {"id": 8355966, "category_id": 189, "iscrowd": 0, "bbox": [73, 67, 567, 403], "area": 40128}, {"id": 11711411, "category_id": 199, "iscrowd": 0, "bbox": [0, 64, 560, 294], "area": 50348}], "file_name": "000000027620.png", "image_id": 27620}, {"segments_info": [{"id": 860242, "category_id": 1, "iscrowd": 0, "bbox": [2, 1, 339, 70], "area": 14908}, {"id": 1917539, "category_id": 48, "iscrowd": 0, "bbox": [369, 0, 52, 53], "area": 1506}, {"id": 536140, "category_id": 49, "iscrowd": 0, "bbox": [263, 20, 182, 54], "area": 3773}, {"id": 2774172, "category_id": 59, "iscrowd": 0, "bbox": [22, 46, 572, 333], "area": 146487}, {"id": 5858193, "category_id": 189, "iscrowd": 0, "bbox": [0, 29, 640, 381], "area": 13881}], "file_name": "000000027696.png", "image_id": 27696}, {"segments_info": [{"id": 6707052, "category_id": 1, "iscrowd": 0, "bbox": [181, 377, 36, 49], "area": 886}, {"id": 5128267, "category_id": 1, "iscrowd": 0, "bbox": [168, 379, 47, 22], "area": 309}, {"id": 4138040, "category_id": 1, "iscrowd": 0, "bbox": [54, 372, 28, 45], "area": 892}, {"id": 7962242, "category_id": 1, "iscrowd": 0, "bbox": [22, 372, 32, 43], "area": 1093}, {"id": 5127745, "category_id": 1, "iscrowd": 0, "bbox": [151, 366, 33, 51], "area": 764}, {"id": 8940381, "category_id": 1, "iscrowd": 0, "bbox": [411, 340, 47, 82], "area": 2459}, {"id": 6380386, "category_id": 1, "iscrowd": 0, "bbox": [5, 373, 22, 42], "area": 676}, {"id": 11973823, "category_id": 3, "iscrowd": 0, "bbox": [574, 374, 38, 81], "area": 2084}, {"id": 8947344, "category_id": 6, "iscrowd": 0, "bbox": [0, 167, 573, 436], "area": 200735}, {"id": 5126733, "category_id": 149, "iscrowd": 0, "bbox": [0, 413, 612, 199], "area": 33082}, {"id": 4405318, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 478, 135], "area": 37572}, {"id": 16514557, "category_id": 187, "iscrowd": 0, "bbox": [526, 0, 86, 321], "area": 24543}, {"id": 11975351, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 533, 255], "area": 63085}, {"id": 11585744, "category_id": 199, "iscrowd": 0, "bbox": [549, 317, 63, 101], "area": 4084}], "file_name": "000000027768.png", "image_id": 27768}, {"segments_info": [{"id": 6253426, "category_id": 40, "iscrowd": 0, "bbox": [34, 130, 158, 124], "area": 11824}, {"id": 7632512, "category_id": 154, "iscrowd": 0, "bbox": [0, 0, 288, 307], "area": 64263}, {"id": 10991822, "category_id": 194, "iscrowd": 0, "bbox": [190, 299, 9, 8], "area": 49}], "file_name": "000000027932.png", "image_id": 27932}, {"segments_info": [{"id": 2042751, "category_id": 1, "iscrowd": 0, "bbox": [360, 84, 142, 157], "area": 8171}, {"id": 6737099, "category_id": 42, "iscrowd": 0, "bbox": [297, 159, 176, 87], "area": 5537}, {"id": 9088865, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 258773}], "file_name": "000000027972.png", "image_id": 27972}, {"segments_info": [{"id": 13158600, "category_id": 70, "iscrowd": 0, "bbox": [38, 93, 119, 230], "area": 18185}, {"id": 16053492, "category_id": 81, "iscrowd": 0, "bbox": [375, 108, 90, 39], "area": 2571}, {"id": 5066061, "category_id": 133, "iscrowd": 0, "bbox": [314, 0, 160, 43], "area": 6083}, {"id": 7895160, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 500, 334], "area": 74519}], "file_name": "000000027982.png", "image_id": 27982}, {"segments_info": [{"id": 8022111, "category_id": 85, "iscrowd": 0, "bbox": [306, 206, 24, 24], "area": 431}, {"id": 5198166, "category_id": 130, "iscrowd": 0, "bbox": [71, 209, 161, 131], "area": 3233}, {"id": 4809089, "category_id": 151, "iscrowd": 0, "bbox": [0, 335, 640, 90], "area": 44234}, {"id": 1980991, "category_id": 184, "iscrowd": 0, "bbox": [0, 284, 640, 87], "area": 26024}, {"id": 10377507, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 313], "area": 111097}, {"id": 5001564, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 372, 369], "area": 86961}], "file_name": "000000028285.png", "image_id": 28285}, {"segments_info": [{"id": 10199206, "category_id": 22, "iscrowd": 0, "bbox": [250, 58, 306, 84], "area": 12348}, {"id": 4275771, "category_id": 22, "iscrowd": 0, "bbox": [2, 85, 226, 337], "area": 58088}, {"id": 6184287, "category_id": 22, "iscrowd": 0, "bbox": [195, 100, 261, 292], "area": 58864}, {"id": 8685706, "category_id": 22, "iscrowd": 0, "bbox": [405, 35, 208, 93], "area": 8160}, {"id": 5460562, "category_id": 22, "iscrowd": 0, "bbox": [430, 122, 210, 169], "area": 25553}, {"id": 8886429, "category_id": 125, "iscrowd": 0, "bbox": [51, 342, 564, 85], "area": 23173}, {"id": 6194040, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 79496}, {"id": 16119538, "category_id": 187, "iscrowd": 0, "bbox": [404, 0, 56, 75], "area": 2659}], "file_name": "000000028449.png", "image_id": 28449}, {"segments_info": [{"id": 3829386, "category_id": 44, "iscrowd": 0, "bbox": [281, 163, 27, 79], "area": 1692}, {"id": 6058366, "category_id": 82, "iscrowd": 0, "bbox": [1, 39, 479, 594], "area": 226107}, {"id": 1323078, "category_id": 190, "iscrowd": 0, "bbox": [0, 453, 480, 187], "area": 50083}, {"id": 3426641, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 73], "area": 25286}], "file_name": "000000028452.png", "image_id": 28452}, {"segments_info": [{"id": 4952480, "category_id": 52, "iscrowd": 0, "bbox": [226, 10, 272, 92], "area": 8445}, {"id": 2649222, "category_id": 52, "iscrowd": 0, "bbox": [215, 158, 283, 335], "area": 69056}, {"id": 2054778, "category_id": 52, "iscrowd": 0, "bbox": [229, 35, 269, 131], "area": 16486}, {"id": 2446695, "category_id": 52, "iscrowd": 0, "bbox": [298, 1, 198, 56], "area": 6348}, {"id": 1455180, "category_id": 122, "iscrowd": 0, "bbox": [289, 0, 209, 500], "area": 10685}, {"id": 6962771, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 196, 500], "area": 54978}], "file_name": "000000028809.png", "image_id": 28809}, {"segments_info": [{"id": 1316634, "category_id": 1, "iscrowd": 0, "bbox": [29, 240, 14, 37], "area": 346}, {"id": 1250838, "category_id": 1, "iscrowd": 0, "bbox": [99, 248, 9, 24], "area": 152}, {"id": 2968932, "category_id": 1, "iscrowd": 0, "bbox": [134, 245, 12, 27], "area": 145}, {"id": 2304298, "category_id": 1, "iscrowd": 0, "bbox": [125, 248, 7, 24], "area": 125}, {"id": 1252151, "category_id": 1, "iscrowd": 0, "bbox": [146, 244, 10, 28], "area": 186}, {"id": 3883588, "category_id": 1, "iscrowd": 0, "bbox": [92, 250, 8, 22], "area": 125}, {"id": 1381659, "category_id": 1, "iscrowd": 0, "bbox": [62, 246, 11, 27], "area": 199}, {"id": 2501163, "category_id": 1, "iscrowd": 0, "bbox": [114, 248, 8, 24], "area": 132}, {"id": 1382426, "category_id": 1, "iscrowd": 0, "bbox": [54, 253, 8, 19], "area": 90}, {"id": 3683705, "category_id": 10, "iscrowd": 0, "bbox": [92, 243, 6, 6], "area": 25}, {"id": 3158892, "category_id": 10, "iscrowd": 0, "bbox": [55, 240, 7, 7], "area": 40}, {"id": 3553903, "category_id": 10, "iscrowd": 0, "bbox": [95, 225, 7, 8], "area": 42}, {"id": 736398, "category_id": 11, "iscrowd": 0, "bbox": [238, 238, 93, 299], "area": 19900}, {"id": 736402, "category_id": 11, "iscrowd": 0, "bbox": [289, 221, 161, 383], "area": 46625}, {"id": 1788821, "category_id": 11, "iscrowd": 0, "bbox": [155, 240, 93, 242], "area": 8723}, {"id": 2043202, "category_id": 184, "iscrowd": 0, "bbox": [153, 112, 459, 149], "area": 29194}, {"id": 15790572, "category_id": 187, "iscrowd": 0, "bbox": [15, 0, 169, 141], "area": 8872}, {"id": 12370369, "category_id": 190, "iscrowd": 0, "bbox": [0, 251, 350, 361], "area": 82929}, {"id": 3754837, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 612, 283], "area": 116788}, {"id": 2108463, "category_id": 199, "iscrowd": 0, "bbox": [0, 243, 55, 32], "area": 956}], "file_name": "000000028993.png", "image_id": 28993}, {"segments_info": [{"id": 3753038, "category_id": 1, "iscrowd": 0, "bbox": [113, 116, 120, 236], "area": 10026}, {"id": 1909805, "category_id": 19, "iscrowd": 0, "bbox": [211, 83, 252, 385], "area": 44579}, {"id": 6646119, "category_id": 154, "iscrowd": 0, "bbox": [195, 56, 403, 53], "area": 1866}, {"id": 9543844, "category_id": 185, "iscrowd": 0, "bbox": [435, 128, 205, 75], "area": 4232}, {"id": 3635831, "category_id": 193, "iscrowd": 0, "bbox": [0, 99, 640, 210], "area": 47219}, {"id": 7500915, "category_id": 194, "iscrowd": 0, "bbox": [0, 51, 640, 440], "area": 158255}, {"id": 4675406, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 73], "area": 36422}], "file_name": "000000029187.png", "image_id": 29187}, {"segments_info": [{"id": 7502755, "category_id": 18, "iscrowd": 0, "bbox": [170, 158, 195, 183], "area": 16966}, {"id": 4827585, "category_id": 55, "iscrowd": 0, "bbox": [357, 166, 13, 15], "area": 151}, {"id": 6402498, "category_id": 55, "iscrowd": 0, "bbox": [323, 231, 8, 12], "area": 72}, {"id": 5084324, "category_id": 55, "iscrowd": 0, "bbox": [344, 245, 8, 9], "area": 54}, {"id": 13872535, "category_id": 118, "iscrowd": 0, "bbox": [0, 267, 500, 108], "area": 22334}, {"id": 8487564, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 166, 78], "area": 10008}, {"id": 3488821, "category_id": 184, "iscrowd": 0, "bbox": [38, 0, 462, 291], "area": 71546}, {"id": 5460830, "category_id": 185, "iscrowd": 0, "bbox": [0, 66, 500, 154], "area": 24452}, {"id": 11896930, "category_id": 187, "iscrowd": 0, "bbox": [92, 0, 66, 29], "area": 1041}, {"id": 9009523, "category_id": 191, "iscrowd": 0, "bbox": [88, 252, 412, 93], "area": 7605}, {"id": 5071425, "category_id": 193, "iscrowd": 0, "bbox": [0, 250, 176, 110], "area": 5964}, {"id": 4933451, "category_id": 194, "iscrowd": 0, "bbox": [0, 191, 500, 162], "area": 21133}, {"id": 16512229, "category_id": 199, "iscrowd": 0, "bbox": [161, 321, 225, 54], "area": 5292}], "file_name": "000000029393.png", "image_id": 29393}, {"segments_info": [{"id": 4280515, "category_id": 1, "iscrowd": 0, "bbox": [327, 3, 213, 200], "area": 26788}, {"id": 5864345, "category_id": 15, "iscrowd": 0, "bbox": [18, 147, 591, 266], "area": 88766}, {"id": 5001327, "category_id": 190, "iscrowd": 0, "bbox": [0, 268, 640, 181], "area": 75473}, {"id": 15388059, "category_id": 195, "iscrowd": 0, "bbox": [0, 163, 65, 79], "area": 1417}, {"id": 10000790, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 310], "area": 94134}], "file_name": "000000029397.png", "image_id": 29397}, {"segments_info": [{"id": 12042952, "category_id": 47, "iscrowd": 0, "bbox": [327, 253, 11, 8], "area": 79}, {"id": 8161682, "category_id": 47, "iscrowd": 0, "bbox": [409, 257, 12, 9], "area": 102}, {"id": 2504006, "category_id": 62, "iscrowd": 0, "bbox": [436, 236, 73, 113], "area": 3329}, {"id": 2504786, "category_id": 62, "iscrowd": 0, "bbox": [264, 227, 49, 120], "area": 4002}, {"id": 1519495, "category_id": 63, "iscrowd": 0, "bbox": [1, 261, 254, 162], "area": 33837}, {"id": 6912406, "category_id": 64, "iscrowd": 0, "bbox": [32, 84, 52, 80], "area": 2306}, {"id": 11779269, "category_id": 67, "iscrowd": 0, "bbox": [313, 254, 125, 23], "area": 2078}, {"id": 6450291, "category_id": 72, "iscrowd": 0, "bbox": [567, 64, 73, 204], "area": 11778}, {"id": 6386049, "category_id": 84, "iscrowd": 0, "bbox": [507, 264, 69, 16], "area": 965}, {"id": 4678533, "category_id": 86, "iscrowd": 0, "bbox": [47, 148, 23, 17], "area": 244}, {"id": 7439512, "category_id": 86, "iscrowd": 0, "bbox": [189, 241, 11, 17], "area": 156}, {"id": 6719145, "category_id": 109, "iscrowd": 0, "bbox": [232, 52, 301, 258], "area": 55229}, {"id": 5144490, "category_id": 119, "iscrowd": 0, "bbox": [180, 226, 199, 29], "area": 600}, {"id": 9022402, "category_id": 130, "iscrowd": 0, "bbox": [197, 156, 354, 104], "area": 5866}, {"id": 11057094, "category_id": 186, "iscrowd": 0, "bbox": [114, 0, 447, 72], "area": 23979}, {"id": 1583427, "category_id": 188, "iscrowd": 0, "bbox": [155, 251, 485, 177], "area": 25971}, {"id": 10336719, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 300], "area": 55637}, {"id": 4150131, "category_id": 200, "iscrowd": 0, "bbox": [135, 288, 366, 140], "area": 20592}], "file_name": "000000029596.png", "image_id": 29596}, {"segments_info": [{"id": 7434834, "category_id": 50, "iscrowd": 0, "bbox": [421, 44, 219, 281], "area": 13606}, {"id": 3445617, "category_id": 56, "iscrowd": 0, "bbox": [146, 134, 109, 82], "area": 3291}, {"id": 2126892, "category_id": 56, "iscrowd": 0, "bbox": [86, 21, 69, 77], "area": 3758}, {"id": 3511636, "category_id": 56, "iscrowd": 0, "bbox": [0, 5, 525, 392], "area": 96912}, {"id": 3117904, "category_id": 56, "iscrowd": 0, "bbox": [26, 107, 76, 95], "area": 4043}, {"id": 1993906, "category_id": 57, "iscrowd": 0, "bbox": [287, 64, 34, 37], "area": 824}, {"id": 3452121, "category_id": 57, "iscrowd": 0, "bbox": [115, 186, 60, 54], "area": 1237}, {"id": 3968741, "category_id": 57, "iscrowd": 0, "bbox": [389, 129, 64, 47], "area": 2029}, {"id": 2321594, "category_id": 57, "iscrowd": 0, "bbox": [454, 159, 54, 53], "area": 1777}, {"id": 1201055, "category_id": 57, "iscrowd": 0, "bbox": [145, 41, 28, 24], "area": 406}, {"id": 3904970, "category_id": 57, "iscrowd": 0, "bbox": [379, 98, 53, 53], "area": 1240}, {"id": 2461652, "category_id": 57, "iscrowd": 0, "bbox": [174, 234, 42, 35], "area": 735}, {"id": 2657754, "category_id": 57, "iscrowd": 0, "bbox": [186, 125, 80, 68], "area": 2484}, {"id": 3351823, "category_id": 79, "iscrowd": 0, "bbox": [1, 202, 639, 219], "area": 23916}, {"id": 11447680, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 228], "area": 27771}, {"id": 5072771, "category_id": 196, "iscrowd": 0, "bbox": [7, 12, 558, 399], "area": 43991}], "file_name": "000000029640.png", "image_id": 29640}, {"segments_info": [{"id": 4821449, "category_id": 58, "iscrowd": 0, "bbox": [30, 157, 306, 194], "area": 30275}, {"id": 5415642, "category_id": 58, "iscrowd": 0, "bbox": [80, 226, 315, 248], "area": 41455}, {"id": 4957143, "category_id": 58, "iscrowd": 0, "bbox": [148, 343, 330, 297], "area": 59587}, {"id": 1186065, "category_id": 67, "iscrowd": 0, "bbox": [6, 0, 471, 272], "area": 72973}, {"id": 1316619, "category_id": 189, "iscrowd": 0, "bbox": [323, 0, 155, 21], "area": 331}, {"id": 10453856, "category_id": 195, "iscrowd": 0, "bbox": [378, 0, 100, 210], "area": 8574}, {"id": 5156073, "category_id": 196, "iscrowd": 0, "bbox": [128, 259, 144, 74], "area": 649}], "file_name": "000000029675.png", "image_id": 29675}, {"segments_info": [{"id": 5790312, "category_id": 1, "iscrowd": 0, "bbox": [332, 156, 27, 41], "area": 667}, {"id": 3684928, "category_id": 1, "iscrowd": 0, "bbox": [127, 216, 54, 35], "area": 865}, {"id": 3552828, "category_id": 1, "iscrowd": 0, "bbox": [219, 208, 46, 46], "area": 1187}, {"id": 6184297, "category_id": 1, "iscrowd": 0, "bbox": [283, 175, 18, 23], "area": 315}, {"id": 7321968, "category_id": 28, "iscrowd": 0, "bbox": [322, 166, 296, 110], "area": 20627}, {"id": 5654321, "category_id": 62, "iscrowd": 0, "bbox": [401, 291, 96, 145], "area": 11062}, {"id": 5324125, "category_id": 62, "iscrowd": 0, "bbox": [256, 291, 150, 147], "area": 13313}, {"id": 8227472, "category_id": 154, "iscrowd": 0, "bbox": [0, 353, 640, 139], "area": 44916}, {"id": 9669242, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 430], "area": 220865}], "file_name": "000000029984.png", "image_id": 29984}, {"segments_info": [{"id": 3822678, "category_id": 44, "iscrowd": 0, "bbox": [268, 144, 4, 7], "area": 21}, {"id": 4611950, "category_id": 44, "iscrowd": 0, "bbox": [281, 181, 30, 56], "area": 1281}, {"id": 9018785, "category_id": 44, "iscrowd": 0, "bbox": [245, 163, 12, 16], "area": 141}, {"id": 11317177, "category_id": 51, "iscrowd": 0, "bbox": [295, 221, 49, 26], "area": 998}, {"id": 4369585, "category_id": 53, "iscrowd": 0, "bbox": [570, 80, 24, 16], "area": 123}, {"id": 2661023, "category_id": 53, "iscrowd": 0, "bbox": [597, 86, 8, 8], "area": 46}, {"id": 2265758, "category_id": 53, "iscrowd": 0, "bbox": [605, 84, 17, 12], "area": 145}, {"id": 3322290, "category_id": 53, "iscrowd": 0, "bbox": [579, 87, 16, 9], "area": 109}, {"id": 4305592, "category_id": 53, "iscrowd": 0, "bbox": [602, 80, 13, 11], "area": 78}, {"id": 1788010, "category_id": 62, "iscrowd": 0, "bbox": [307, 333, 263, 111], "area": 22191}, {"id": 7572630, "category_id": 67, "iscrowd": 0, "bbox": [162, 218, 249, 231], "area": 20059}, {"id": 7047292, "category_id": 79, "iscrowd": 0, "bbox": [21, 193, 155, 113], "area": 11985}, {"id": 10728889, "category_id": 81, "iscrowd": 0, "bbox": [374, 165, 98, 68], "area": 4357}, {"id": 10989488, "category_id": 82, "iscrowd": 0, "bbox": [490, 112, 146, 240], "area": 28999}, {"id": 1124962, "category_id": 93, "iscrowd": 0, "bbox": [193, 128, 16, 28], "area": 298}, {"id": 9476768, "category_id": 109, "iscrowd": 0, "bbox": [340, 33, 121, 110], "area": 10600}, {"id": 11448757, "category_id": 168, "iscrowd": 0, "bbox": [150, 76, 59, 60], "area": 2460}, {"id": 533575, "category_id": 186, "iscrowd": 0, "bbox": [87, 0, 293, 40], "area": 5081}, {"id": 4221827, "category_id": 188, "iscrowd": 0, "bbox": [0, 63, 360, 234], "area": 21351}, {"id": 806520, "category_id": 189, "iscrowd": 0, "bbox": [188, 345, 18, 35], "area": 496}, {"id": 2116967, "category_id": 195, "iscrowd": 0, "bbox": [0, 48, 524, 401], "area": 19326}, {"id": 6060154, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 328], "area": 77708}, {"id": 2712439, "category_id": 200, "iscrowd": 0, "bbox": [47, 270, 550, 179], "area": 31010}], "file_name": "000000030213.png", "image_id": 30213}, {"segments_info": [{"id": 4607574, "category_id": 18, "iscrowd": 0, "bbox": [107, 29, 179, 193], "area": 11248}, {"id": 1519201, "category_id": 34, "iscrowd": 0, "bbox": [263, 186, 51, 13], "area": 443}, {"id": 5091745, "category_id": 184, "iscrowd": 0, "bbox": [341, 0, 299, 306], "area": 58132}], "file_name": "000000030494.png", "image_id": 30494}, {"segments_info": [{"id": 3353892, "category_id": 1, "iscrowd": 0, "bbox": [191, 110, 204, 380], "area": 23365}, {"id": 1775138, "category_id": 27, "iscrowd": 0, "bbox": [297, 140, 97, 131], "area": 7177}, {"id": 5130829, "category_id": 35, "iscrowd": 0, "bbox": [174, 404, 104, 197], "area": 6579}, {"id": 11770758, "category_id": 159, "iscrowd": 0, "bbox": [0, 70, 480, 570], "area": 213970}, {"id": 1906964, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 158], "area": 33013}, {"id": 9061912, "category_id": 187, "iscrowd": 0, "bbox": [35, 0, 445, 91], "area": 21933}], "file_name": "000000030504.png", "image_id": 30504}, {"segments_info": [{"id": 2311018, "category_id": 7, "iscrowd": 0, "bbox": [150, 137, 490, 163], "area": 66152}, {"id": 5660784, "category_id": 125, "iscrowd": 0, "bbox": [0, 297, 640, 51], "area": 13317}, {"id": 3754081, "category_id": 147, "iscrowd": 0, "bbox": [0, 291, 640, 27], "area": 9456}, {"id": 6642518, "category_id": 184, "iscrowd": 0, "bbox": [0, 43, 640, 259], "area": 61291}, {"id": 15253120, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 135], "area": 61515}, {"id": 4871275, "category_id": 194, "iscrowd": 0, "bbox": [0, 313, 640, 47], "area": 18349}], "file_name": "000000030675.png", "image_id": 30675}, {"segments_info": [{"id": 6189432, "category_id": 51, "iscrowd": 0, "bbox": [256, 39, 362, 247], "area": 37594}, {"id": 2187108, "category_id": 54, "iscrowd": 0, "bbox": [11, 179, 292, 182], "area": 35439}, {"id": 1847082, "category_id": 56, "iscrowd": 0, "bbox": [405, 95, 68, 78], "area": 3715}, {"id": 3434854, "category_id": 56, "iscrowd": 0, "bbox": [433, 170, 106, 63], "area": 4420}, {"id": 926757, "category_id": 56, "iscrowd": 0, "bbox": [295, 103, 118, 100], "area": 7994}, {"id": 2312781, "category_id": 56, "iscrowd": 0, "bbox": [472, 93, 110, 117], "area": 6954}, {"id": 2443586, "category_id": 56, "iscrowd": 0, "bbox": [401, 52, 74, 51], "area": 2535}, {"id": 2311493, "category_id": 56, "iscrowd": 0, "bbox": [351, 149, 84, 72], "area": 3525}, {"id": 2575456, "category_id": 56, "iscrowd": 0, "bbox": [365, 60, 60, 50], "area": 1666}, {"id": 2045264, "category_id": 67, "iscrowd": 0, "bbox": [5, 4, 635, 467], "area": 120834}, {"id": 2834524, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 17004}, {"id": 8492710, "category_id": 196, "iscrowd": 0, "bbox": [82, 45, 218, 160], "area": 21692}], "file_name": "000000030785.png", "image_id": 30785}, {"segments_info": [{"id": 6329830, "category_id": 1, "iscrowd": 0, "bbox": [182, 161, 394, 104], "area": 24775}, {"id": 2694732, "category_id": 3, "iscrowd": 0, "bbox": [0, 175, 20, 54], "area": 800}, {"id": 9478805, "category_id": 14, "iscrowd": 0, "bbox": [225, 76, 70, 84], "area": 4187}, {"id": 7375763, "category_id": 15, "iscrowd": 0, "bbox": [58, 157, 542, 181], "area": 24280}, {"id": 8217157, "category_id": 27, "iscrowd": 0, "bbox": [83, 187, 150, 51], "area": 5083}, {"id": 1452573, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 102], "area": 46742}, {"id": 2895656, "category_id": 185, "iscrowd": 0, "bbox": [0, 17, 640, 323], "area": 95106}, {"id": 9876657, "category_id": 187, "iscrowd": 0, "bbox": [424, 0, 31, 12], "area": 230}, {"id": 1990236, "category_id": 193, "iscrowd": 0, "bbox": [0, 261, 640, 166], "area": 68873}], "file_name": "000000030828.png", "image_id": 30828}, {"segments_info": [{"id": 3492693, "category_id": 86, "iscrowd": 0, "bbox": [159, 248, 116, 319], "area": 18794}, {"id": 11646896, "category_id": 188, "iscrowd": 0, "bbox": [0, 314, 326, 326], "area": 64207}, {"id": 14933977, "category_id": 195, "iscrowd": 0, "bbox": [313, 22, 73, 201], "area": 3591}, {"id": 4483463, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 120748}], "file_name": "000000031050.png", "image_id": 31050}, {"segments_info": [{"id": 3154456, "category_id": 1, "iscrowd": 0, "bbox": [550, 10, 30, 36], "area": 741}, {"id": 5916995, "category_id": 1, "iscrowd": 0, "bbox": [217, 77, 233, 252], "area": 25076}, {"id": 4469541, "category_id": 1, "iscrowd": 0, "bbox": [498, 0, 32, 39], "area": 687}, {"id": 1643541, "category_id": 27, "iscrowd": 0, "bbox": [620, 81, 18, 20], "area": 228}, {"id": 6050115, "category_id": 41, "iscrowd": 0, "bbox": [484, 18, 23, 9], "area": 36}, {"id": 4471089, "category_id": 41, "iscrowd": 0, "bbox": [250, 318, 89, 12], "area": 593}, {"id": 2960167, "category_id": 184, "iscrowd": 0, "bbox": [623, 8, 17, 25], "area": 303}, {"id": 5131599, "category_id": 185, "iscrowd": 0, "bbox": [524, 0, 116, 90], "area": 4997}, {"id": 9743539, "category_id": 187, "iscrowd": 0, "bbox": [617, 0, 23, 10], "area": 153}, {"id": 7430225, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 238891}, {"id": 6640199, "category_id": 197, "iscrowd": 0, "bbox": [595, 0, 35, 20], "area": 512}], "file_name": "000000031093.png", "image_id": 31093}, {"segments_info": [{"id": 4081489, "category_id": 1, "iscrowd": 0, "bbox": [294, 339, 10, 38], "area": 306}, {"id": 1778216, "category_id": 1, "iscrowd": 0, "bbox": [490, 340, 16, 49], "area": 400}, {"id": 2175552, "category_id": 1, "iscrowd": 0, "bbox": [562, 341, 14, 52], "area": 514}, {"id": 2106410, "category_id": 1, "iscrowd": 0, "bbox": [504, 344, 14, 44], "area": 414}, {"id": 1839939, "category_id": 1, "iscrowd": 0, "bbox": [573, 352, 10, 21], "area": 92}, {"id": 3226702, "category_id": 1, "iscrowd": 0, "bbox": [312, 357, 2, 5], "area": 6}, {"id": 2367291, "category_id": 1, "iscrowd": 0, "bbox": [630, 346, 10, 42], "area": 297}, {"id": 1974051, "category_id": 1, "iscrowd": 0, "bbox": [581, 345, 11, 40], "area": 352}, {"id": 1908515, "category_id": 1, "iscrowd": 0, "bbox": [160, 337, 3, 12], "area": 31}, {"id": 4079946, "category_id": 1, "iscrowd": 0, "bbox": [598, 346, 10, 37], "area": 215}, {"id": 2630951, "category_id": 1, "iscrowd": 0, "bbox": [588, 344, 9, 39], "area": 137}, {"id": 2632240, "category_id": 1, "iscrowd": 0, "bbox": [304, 340, 10, 38], "area": 268}, {"id": 3287862, "category_id": 1, "iscrowd": 0, "bbox": [558, 341, 6, 39], "area": 105}, {"id": 4541525, "category_id": 3, "iscrowd": 0, "bbox": [73, 343, 25, 21], "area": 449}, {"id": 7438217, "category_id": 3, "iscrowd": 0, "bbox": [92, 340, 15, 16], "area": 126}, {"id": 12699079, "category_id": 85, "iscrowd": 0, "bbox": [302, 105, 15, 23], "area": 274}, {"id": 12698565, "category_id": 85, "iscrowd": 0, "bbox": [329, 104, 20, 24], "area": 345}, {"id": 4478566, "category_id": 149, "iscrowd": 0, "bbox": [0, 339, 172, 56], "area": 3589}, {"id": 4739675, "category_id": 184, "iscrowd": 0, "bbox": [0, 99, 533, 270], "area": 29267}, {"id": 725016, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 308], "area": 90973}, {"id": 5595759, "category_id": 191, "iscrowd": 0, "bbox": [0, 342, 640, 85], "area": 28612}, {"id": 3228240, "category_id": 197, "iscrowd": 0, "bbox": [0, 9, 640, 418], "area": 116278}], "file_name": "000000031118.png", "image_id": 31118}, {"segments_info": [{"id": 6044725, "category_id": 1, "iscrowd": 0, "bbox": [264, 151, 133, 160], "area": 5013}, {"id": 8046514, "category_id": 37, "iscrowd": 0, "bbox": [602, 90, 7, 7], "area": 39}, {"id": 5067100, "category_id": 43, "iscrowd": 0, "bbox": [391, 165, 49, 29], "area": 846}, {"id": 9737106, "category_id": 145, "iscrowd": 0, "bbox": [0, 270, 640, 156], "area": 87649}, {"id": 2306357, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 56], "area": 26541}, {"id": 2172715, "category_id": 185, "iscrowd": 0, "bbox": [0, 27, 640, 279], "area": 151821}], "file_name": "000000031217.png", "image_id": 31217}, {"segments_info": [{"id": 10790822, "category_id": 51, "iscrowd": 0, "bbox": [259, 153, 19, 15], "area": 228}, {"id": 8423053, "category_id": 62, "iscrowd": 0, "bbox": [416, 245, 83, 84], "area": 6410}, {"id": 10067105, "category_id": 62, "iscrowd": 0, "bbox": [194, 235, 181, 95], "area": 12920}, {"id": 12632257, "category_id": 63, "iscrowd": 0, "bbox": [1, 285, 106, 45], "area": 4014}, {"id": 3359032, "category_id": 64, "iscrowd": 0, "bbox": [20, 115, 88, 208], "area": 7041}, {"id": 2699052, "category_id": 64, "iscrowd": 0, "bbox": [422, 139, 78, 111], "area": 5263}, {"id": 4083789, "category_id": 64, "iscrowd": 0, "bbox": [0, 71, 69, 220], "area": 6164}, {"id": 1514283, "category_id": 84, "iscrowd": 0, "bbox": [53, 72, 74, 36], "area": 2526}, {"id": 2304053, "category_id": 84, "iscrowd": 0, "bbox": [89, 159, 4, 29], "area": 102}, {"id": 2369579, "category_id": 84, "iscrowd": 0, "bbox": [96, 159, 7, 30], "area": 118}, {"id": 1382693, "category_id": 84, "iscrowd": 0, "bbox": [82, 162, 6, 27], "area": 137}, {"id": 2106670, "category_id": 84, "iscrowd": 0, "bbox": [55, 34, 99, 38], "area": 3533}, {"id": 3093310, "category_id": 84, "iscrowd": 0, "bbox": [54, 117, 95, 32], "area": 2630}, {"id": 2504512, "category_id": 84, "iscrowd": 0, "bbox": [443, 84, 10, 32], "area": 288}, {"id": 3093043, "category_id": 84, "iscrowd": 0, "bbox": [126, 118, 6, 28], "area": 141}, {"id": 1514029, "category_id": 84, "iscrowd": 0, "bbox": [76, 161, 7, 28], "area": 151}, {"id": 921888, "category_id": 84, "iscrowd": 0, "bbox": [384, 125, 9, 26], "area": 186}, {"id": 790041, "category_id": 84, "iscrowd": 0, "bbox": [387, 82, 4, 33], "area": 91}, {"id": 724756, "category_id": 84, "iscrowd": 0, "bbox": [392, 54, 4, 23], "area": 87}, {"id": 2961972, "category_id": 84, "iscrowd": 0, "bbox": [429, 160, 7, 28], "area": 122}, {"id": 2632497, "category_id": 118, "iscrowd": 0, "bbox": [107, 296, 313, 37], "area": 2839}, {"id": 9014670, "category_id": 130, "iscrowd": 0, "bbox": [105, 149, 314, 87], "area": 4064}, {"id": 5066321, "category_id": 156, "iscrowd": 0, "bbox": [53, 22, 418, 296], "area": 20414}, {"id": 4675661, "category_id": 184, "iscrowd": 0, "bbox": [0, 86, 500, 202], "area": 1583}, {"id": 7435383, "category_id": 186, "iscrowd": 0, "bbox": [12, 0, 488, 29], "area": 12013}, {"id": 13945022, "category_id": 188, "iscrowd": 0, "bbox": [120, 257, 29, 33], "area": 826}, {"id": 4672339, "category_id": 189, "iscrowd": 0, "bbox": [98, 231, 326, 100], "area": 6197}, {"id": 7699585, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 184], "area": 43637}], "file_name": "000000031248.png", "image_id": 31248}, {"segments_info": [{"id": 5527126, "category_id": 24, "iscrowd": 0, "bbox": [398, 167, 220, 174], "area": 19155}, {"id": 5857635, "category_id": 24, "iscrowd": 0, "bbox": [171, 192, 277, 170], "area": 26667}, {"id": 5659486, "category_id": 24, "iscrowd": 0, "bbox": [1, 211, 72, 170], "area": 6529}, {"id": 11909041, "category_id": 184, "iscrowd": 0, "bbox": [0, 69, 640, 136], "area": 44760}, {"id": 16313309, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 184], "area": 64903}, {"id": 5996420, "category_id": 193, "iscrowd": 0, "bbox": [0, 138, 640, 342], "area": 89044}, {"id": 4213330, "category_id": 194, "iscrowd": 0, "bbox": [0, 354, 640, 126], "area": 55427}], "file_name": "000000031269.png", "image_id": 31269}, {"segments_info": [{"id": 9342622, "category_id": 1, "iscrowd": 0, "bbox": [322, 96, 81, 85], "area": 3281}, {"id": 6446992, "category_id": 1, "iscrowd": 0, "bbox": [30, 109, 58, 145], "area": 3613}, {"id": 6912138, "category_id": 1, "iscrowd": 0, "bbox": [514, 101, 68, 160], "area": 4831}, {"id": 4148584, "category_id": 1, "iscrowd": 0, "bbox": [217, 99, 47, 72], "area": 1423}, {"id": 1515565, "category_id": 1, "iscrowd": 0, "bbox": [226, 63, 29, 22], "area": 432}, {"id": 7500936, "category_id": 1, "iscrowd": 0, "bbox": [369, 117, 62, 86], "area": 2474}, {"id": 10724007, "category_id": 1, "iscrowd": 0, "bbox": [64, 113, 159, 282], "area": 16955}, {"id": 3290170, "category_id": 1, "iscrowd": 0, "bbox": [561, 113, 79, 170], "area": 3976}, {"id": 2437433, "category_id": 1, "iscrowd": 0, "bbox": [412, 70, 51, 65], "area": 1840}, {"id": 11646409, "category_id": 1, "iscrowd": 0, "bbox": [142, 120, 60, 125], "area": 4778}, {"id": 5459794, "category_id": 1, "iscrowd": 0, "bbox": [348, 122, 131, 233], "area": 13582}, {"id": 8490665, "category_id": 1, "iscrowd": 0, "bbox": [197, 109, 36, 72], "area": 1817}, {"id": 8294829, "category_id": 1, "iscrowd": 0, "bbox": [277, 92, 57, 56], "area": 1832}, {"id": 8745573, "category_id": 32, "iscrowd": 0, "bbox": [422, 176, 13, 27], "area": 140}, {"id": 12042442, "category_id": 44, "iscrowd": 0, "bbox": [303, 168, 8, 15], "area": 92}, {"id": 5332612, "category_id": 44, "iscrowd": 0, "bbox": [295, 193, 5, 19], "area": 41}, {"id": 3298192, "category_id": 44, "iscrowd": 0, "bbox": [292, 140, 6, 10], "area": 45}, {"id": 5335200, "category_id": 44, "iscrowd": 0, "bbox": [274, 138, 6, 24], "area": 108}, {"id": 3771316, "category_id": 44, "iscrowd": 0, "bbox": [297, 138, 6, 15], "area": 79}, {"id": 4481381, "category_id": 44, "iscrowd": 0, "bbox": [280, 152, 5, 13], "area": 41}, {"id": 3171439, "category_id": 44, "iscrowd": 0, "bbox": [277, 181, 8, 26], "area": 118}, {"id": 6254232, "category_id": 44, "iscrowd": 0, "bbox": [288, 151, 5, 12], "area": 42}, {"id": 7317701, "category_id": 44, "iscrowd": 0, "bbox": [287, 169, 11, 31], "area": 204}, {"id": 12500929, "category_id": 47, "iscrowd": 0, "bbox": [12, 157, 9, 12], "area": 80}, {"id": 2113128, "category_id": 47, "iscrowd": 0, "bbox": [319, 141, 9, 18], "area": 106}, {"id": 13422032, "category_id": 47, "iscrowd": 0, "bbox": [249, 160, 15, 13], "area": 167}, {"id": 9609657, "category_id": 47, "iscrowd": 0, "bbox": [249, 174, 16, 13], "area": 156}, {"id": 7500674, "category_id": 47, "iscrowd": 0, "bbox": [6, 158, 8, 13], "area": 93}, {"id": 12830668, "category_id": 47, "iscrowd": 0, "bbox": [231, 169, 17, 17], "area": 244}, {"id": 8095638, "category_id": 47, "iscrowd": 0, "bbox": [212, 92, 7, 7], "area": 43}, {"id": 2043992, "category_id": 62, "iscrowd": 0, "bbox": [66, 108, 25, 24], "area": 297}, {"id": 3094137, "category_id": 62, "iscrowd": 0, "bbox": [385, 204, 91, 164], "area": 3153}, {"id": 2767968, "category_id": 62, "iscrowd": 0, "bbox": [107, 106, 33, 41], "area": 745}, {"id": 2633328, "category_id": 62, "iscrowd": 0, "bbox": [86, 259, 88, 124], "area": 3476}, {"id": 2369124, "category_id": 62, "iscrowd": 0, "bbox": [213, 255, 126, 170], "area": 13646}, {"id": 2631754, "category_id": 62, "iscrowd": 0, "bbox": [507, 146, 39, 113], "area": 489}, {"id": 986905, "category_id": 62, "iscrowd": 0, "bbox": [475, 120, 32, 63], "area": 1105}, {"id": 3558782, "category_id": 62, "iscrowd": 0, "bbox": [269, 100, 25, 51], "area": 555}, {"id": 2373479, "category_id": 62, "iscrowd": 0, "bbox": [148, 103, 28, 53], "area": 478}, {"id": 1315869, "category_id": 62, "iscrowd": 0, "bbox": [468, 113, 23, 53], "area": 396}, {"id": 1710389, "category_id": 62, "iscrowd": 0, "bbox": [550, 172, 87, 132], "area": 5876}, {"id": 3295354, "category_id": 62, "iscrowd": 0, "bbox": [235, 101, 25, 32], "area": 500}, {"id": 2242151, "category_id": 62, "iscrowd": 0, "bbox": [177, 102, 26, 15], "area": 159}, {"id": 1383483, "category_id": 62, "iscrowd": 1, "bbox": [320, 103, 33, 27], "area": 556}, {"id": 5400208, "category_id": 67, "iscrowd": 0, "bbox": [240, 139, 108, 31], "area": 1149}, {"id": 5602227, "category_id": 67, "iscrowd": 0, "bbox": [165, 194, 236, 65], "area": 8529}, {"id": 3883874, "category_id": 67, "iscrowd": 0, "bbox": [2, 167, 68, 78], "area": 641}, {"id": 1515064, "category_id": 67, "iscrowd": 0, "bbox": [493, 132, 36, 54], "area": 484}, {"id": 2831173, "category_id": 67, "iscrowd": 0, "bbox": [462, 114, 87, 18], "area": 764}, {"id": 5663128, "category_id": 67, "iscrowd": 0, "bbox": [144, 111, 126, 15], "area": 196}, {"id": 3162212, "category_id": 67, "iscrowd": 0, "bbox": [536, 163, 27, 22], "area": 337}, {"id": 2829116, "category_id": 77, "iscrowd": 0, "bbox": [423, 81, 5, 9], "area": 20}, {"id": 3229808, "category_id": 85, "iscrowd": 0, "bbox": [234, 0, 35, 30], "area": 1020}, {"id": 3492485, "category_id": 118, "iscrowd": 0, "bbox": [0, 175, 640, 250], "area": 75358}, {"id": 9026514, "category_id": 130, "iscrowd": 0, "bbox": [302, 0, 20, 14], "area": 196}, {"id": 1516356, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 640, 172], "area": 28373}, {"id": 4288921, "category_id": 188, "iscrowd": 0, "bbox": [202, 45, 98, 34], "area": 1951}, {"id": 4346482, "category_id": 189, "iscrowd": 0, "bbox": [0, 75, 640, 183], "area": 6814}, {"id": 10463422, "category_id": 195, "iscrowd": 0, "bbox": [217, 188, 152, 43], "area": 2346}, {"id": 2830395, "category_id": 199, "iscrowd": 0, "bbox": [113, 0, 352, 101], "area": 19608}], "file_name": "000000031296.png", "image_id": 31296}, {"segments_info": [{"id": 6124936, "category_id": 1, "iscrowd": 0, "bbox": [476, 15, 5, 12], "area": 38}, {"id": 4279948, "category_id": 1, "iscrowd": 0, "bbox": [481, 15, 6, 13], "area": 41}, {"id": 3616063, "category_id": 9, "iscrowd": 0, "bbox": [120, 44, 74, 30], "area": 1363}, {"id": 3487559, "category_id": 9, "iscrowd": 0, "bbox": [404, 54, 91, 35], "area": 1759}, {"id": 4406606, "category_id": 9, "iscrowd": 0, "bbox": [51, 46, 71, 31], "area": 1262}, {"id": 3621965, "category_id": 9, "iscrowd": 0, "bbox": [247, 44, 42, 17], "area": 486}, {"id": 4668491, "category_id": 9, "iscrowd": 0, "bbox": [276, 48, 51, 21], "area": 708}, {"id": 5135207, "category_id": 9, "iscrowd": 0, "bbox": [322, 51, 98, 36], "area": 2032}, {"id": 4877187, "category_id": 9, "iscrowd": 0, "bbox": [289, 25, 45, 31], "area": 427}, {"id": 1843538, "category_id": 9, "iscrowd": 0, "bbox": [468, 48, 49, 16], "area": 466}, {"id": 6783118, "category_id": 9, "iscrowd": 0, "bbox": [177, 38, 57, 22], "area": 921}, {"id": 2701908, "category_id": 9, "iscrowd": 0, "bbox": [610, 74, 30, 28], "area": 522}, {"id": 5268076, "category_id": 9, "iscrowd": 0, "bbox": [17, 53, 51, 26], "area": 792}, {"id": 10995672, "category_id": 16, "iscrowd": 0, "bbox": [108, 190, 90, 50], "area": 1493}, {"id": 9282737, "category_id": 16, "iscrowd": 0, "bbox": [365, 145, 32, 33], "area": 455}, {"id": 13164521, "category_id": 16, "iscrowd": 0, "bbox": [222, 118, 29, 23], "area": 270}, {"id": 9019306, "category_id": 16, "iscrowd": 0, "bbox": [224, 102, 33, 21], "area": 241}, {"id": 10074313, "category_id": 16, "iscrowd": 0, "bbox": [329, 131, 51, 31], "area": 549}, {"id": 6914965, "category_id": 16, "iscrowd": 0, "bbox": [411, 207, 58, 87], "area": 2570}, {"id": 10467783, "category_id": 16, "iscrowd": 0, "bbox": [240, 130, 30, 40], "area": 530}, {"id": 11125969, "category_id": 16, "iscrowd": 0, "bbox": [361, 169, 37, 45], "area": 725}, {"id": 10996185, "category_id": 16, "iscrowd": 0, "bbox": [279, 233, 48, 40], "area": 1132}, {"id": 8756910, "category_id": 16, "iscrowd": 0, "bbox": [230, 195, 34, 33], "area": 554}, {"id": 4942460, "category_id": 16, "iscrowd": 0, "bbox": [561, 188, 19, 15], "area": 142}, {"id": 8034216, "category_id": 16, "iscrowd": 0, "bbox": [456, 156, 65, 35], "area": 730}, {"id": 10534604, "category_id": 16, "iscrowd": 0, "bbox": [277, 134, 43, 14], "area": 322}, {"id": 9348787, "category_id": 16, "iscrowd": 1, "bbox": [252, 105, 296, 73], "area": 3045}, {"id": 2044223, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 640, 91], "area": 28182}, {"id": 3751239, "category_id": 178, "iscrowd": 0, "bbox": [0, 45, 640, 382], "area": 201619}, {"id": 6917273, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 23], "area": 6343}, {"id": 1780022, "category_id": 194, "iscrowd": 0, "bbox": [475, 315, 165, 112], "area": 12607}], "file_name": "000000031322.png", "image_id": 31322}, {"segments_info": [{"id": 7178155, "category_id": 1, "iscrowd": 0, "bbox": [186, 239, 194, 196], "area": 10378}, {"id": 4147554, "category_id": 1, "iscrowd": 0, "bbox": [183, 222, 54, 111], "area": 2872}, {"id": 8092798, "category_id": 1, "iscrowd": 0, "bbox": [0, 288, 30, 68], "area": 1206}, {"id": 6053218, "category_id": 1, "iscrowd": 0, "bbox": [28, 253, 61, 136], "area": 4416}, {"id": 3421263, "category_id": 32, "iscrowd": 0, "bbox": [215, 257, 10, 38], "area": 281}, {"id": 6980771, "category_id": 47, "iscrowd": 0, "bbox": [220, 314, 8, 21], "area": 162}, {"id": 6716053, "category_id": 49, "iscrowd": 0, "bbox": [184, 306, 6, 7], "area": 23}, {"id": 8163251, "category_id": 61, "iscrowd": 0, "bbox": [147, 278, 44, 53], "area": 1423}, {"id": 4476238, "category_id": 62, "iscrowd": 0, "bbox": [405, 437, 70, 203], "area": 6857}, {"id": 13615784, "category_id": 62, "iscrowd": 0, "bbox": [1, 365, 17, 31], "area": 153}, {"id": 7377580, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 234], "area": 106456}, {"id": 7568014, "category_id": 190, "iscrowd": 0, "bbox": [0, 320, 480, 320], "area": 110663}, {"id": 5929364, "category_id": 199, "iscrowd": 0, "bbox": [0, 210, 480, 169], "area": 48943}], "file_name": "000000031620.png", "image_id": 31620}, {"segments_info": [{"id": 3354670, "category_id": 63, "iscrowd": 0, "bbox": [298, 234, 342, 224], "area": 51306}, {"id": 9348017, "category_id": 64, "iscrowd": 0, "bbox": [18, 100, 202, 191], "area": 16783}, {"id": 3691104, "category_id": 64, "iscrowd": 0, "bbox": [545, 189, 56, 75], "area": 2594}, {"id": 3030349, "category_id": 84, "iscrowd": 0, "bbox": [0, 295, 37, 94], "area": 1479}, {"id": 922140, "category_id": 84, "iscrowd": 0, "bbox": [14, 315, 34, 67], "area": 1037}, {"id": 10727103, "category_id": 109, "iscrowd": 0, "bbox": [15, 21, 563, 184], "area": 30551}, {"id": 1120307, "category_id": 118, "iscrowd": 0, "bbox": [56, 374, 140, 74], "area": 3286}, {"id": 12963288, "category_id": 181, "iscrowd": 0, "bbox": [41, 35, 502, 201], "area": 24235}, {"id": 7043725, "category_id": 186, "iscrowd": 0, "bbox": [102, 0, 538, 59], "area": 16974}, {"id": 6320781, "category_id": 189, "iscrowd": 0, "bbox": [0, 263, 640, 217], "area": 40449}, {"id": 1578312, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 379], "area": 58560}, {"id": 1252940, "category_id": 200, "iscrowd": 0, "bbox": [142, 339, 369, 141], "area": 21465}], "file_name": "000000031735.png", "image_id": 31735}, {"segments_info": [{"id": 5222329, "category_id": 85, "iscrowd": 0, "bbox": [92, 258, 181, 206], "area": 29438}, {"id": 13096151, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 583], "area": 195705}], "file_name": "000000031749.png", "image_id": 31749}, {"segments_info": [{"id": 8219212, "category_id": 1, "iscrowd": 0, "bbox": [287, 1, 47, 228], "area": 3361}, {"id": 12367557, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 65, 130], "area": 5555}, {"id": 8222088, "category_id": 1, "iscrowd": 0, "bbox": [219, 0, 115, 293], "area": 14341}, {"id": 7176850, "category_id": 1, "iscrowd": 0, "bbox": [0, 69, 326, 540], "area": 90770}, {"id": 5918528, "category_id": 1, "iscrowd": 0, "bbox": [0, 78, 40, 109], "area": 2472}, {"id": 2634281, "category_id": 4, "iscrowd": 0, "bbox": [0, 216, 333, 418], "area": 63223}], "file_name": "000000031817.png", "image_id": 31817}, {"segments_info": [{"id": 1914431, "category_id": 1, "iscrowd": 0, "bbox": [0, 1, 97, 139], "area": 5567}, {"id": 597016, "category_id": 44, "iscrowd": 0, "bbox": [149, 60, 51, 51], "area": 921}, {"id": 4227985, "category_id": 59, "iscrowd": 0, "bbox": [0, 121, 330, 173], "area": 48786}, {"id": 266776, "category_id": 67, "iscrowd": 0, "bbox": [0, 245, 332, 152], "area": 25797}, {"id": 1, "category_id": 190, "iscrowd": 0, "bbox": [0, 326, 333, 174], "area": 45922}, {"id": 5206904, "category_id": 196, "iscrowd": 0, "bbox": [0, 61, 333, 242], "area": 4487}, {"id": 513, "category_id": 199, "iscrowd": 0, "bbox": [156, 0, 177, 160], "area": 20215}], "file_name": "000000032038.png", "image_id": 32038}, {"segments_info": [{"id": 6515301, "category_id": 1, "iscrowd": 0, "bbox": [113, 79, 142, 391], "area": 20802}, {"id": 7112055, "category_id": 43, "iscrowd": 0, "bbox": [75, 130, 49, 106], "area": 1724}, {"id": 4030046, "category_id": 138, "iscrowd": 0, "bbox": [0, 0, 375, 73], "area": 26601}, {"id": 5938563, "category_id": 145, "iscrowd": 0, "bbox": [0, 70, 375, 430], "area": 138022}], "file_name": "000000032081.png", "image_id": 32081}, {"segments_info": [{"id": 12238016, "category_id": 70, "iscrowd": 0, "bbox": [72, 231, 94, 171], "area": 11657}, {"id": 1647148, "category_id": 93, "iscrowd": 0, "bbox": [422, 302, 133, 89], "area": 9625}, {"id": 9088963, "category_id": 109, "iscrowd": 0, "bbox": [237, 0, 56, 423], "area": 14302}, {"id": 5398121, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 640, 423], "area": 73586}, {"id": 2239801, "category_id": 156, "iscrowd": 0, "bbox": [421, 0, 144, 423], "area": 42583}, {"id": 1250855, "category_id": 168, "iscrowd": 0, "bbox": [222, 0, 312, 297], "area": 9624}, {"id": 10136505, "category_id": 176, "iscrowd": 0, "bbox": [14, 0, 262, 387], "area": 14857}, {"id": 3490903, "category_id": 190, "iscrowd": 0, "bbox": [12, 349, 245, 74], "area": 11597}, {"id": 8031641, "category_id": 195, "iscrowd": 0, "bbox": [178, 307, 22, 34], "area": 638}, {"id": 7904938, "category_id": 199, "iscrowd": 0, "bbox": [13, 0, 338, 423], "area": 80267}], "file_name": "000000032285.png", "image_id": 32285}, {"segments_info": [{"id": 4611438, "category_id": 1, "iscrowd": 0, "bbox": [84, 90, 314, 387], "area": 46703}, {"id": 14127716, "category_id": 1, "iscrowd": 0, "bbox": [150, 112, 33, 64], "area": 996}, {"id": 2499620, "category_id": 1, "iscrowd": 0, "bbox": [2, 106, 76, 119], "area": 5175}, {"id": 2633023, "category_id": 1, "iscrowd": 0, "bbox": [229, 5, 411, 470], "area": 107653}, {"id": 6182226, "category_id": 1, "iscrowd": 0, "bbox": [36, 92, 140, 234], "area": 18863}, {"id": 15657197, "category_id": 3, "iscrowd": 0, "bbox": [587, 130, 51, 38], "area": 1305}, {"id": 11772567, "category_id": 46, "iscrowd": 0, "bbox": [0, 277, 19, 86], "area": 1071}, {"id": 4413793, "category_id": 46, "iscrowd": 0, "bbox": [262, 251, 77, 109], "area": 6755}, {"id": 5663349, "category_id": 46, "iscrowd": 0, "bbox": [166, 248, 61, 94], "area": 4773}, {"id": 9609921, "category_id": 62, "iscrowd": 0, "bbox": [183, 173, 45, 62], "area": 1082}, {"id": 9210761, "category_id": 107, "iscrowd": 0, "bbox": [0, 262, 155, 218], "area": 21012}, {"id": 4741999, "category_id": 112, "iscrowd": 0, "bbox": [34, 77, 61, 65], "area": 1460}, {"id": 12175054, "category_id": 130, "iscrowd": 0, "bbox": [86, 35, 22, 21], "area": 345}, {"id": 10930911, "category_id": 177, "iscrowd": 0, "bbox": [354, 13, 42, 209], "area": 4183}, {"id": 15527146, "category_id": 181, "iscrowd": 0, "bbox": [123, 0, 517, 275], "area": 19950}, {"id": 12831186, "category_id": 186, "iscrowd": 0, "bbox": [33, 0, 382, 70], "area": 14056}, {"id": 7304065, "category_id": 190, "iscrowd": 0, "bbox": [112, 201, 131, 279], "area": 3493}, {"id": 13155512, "category_id": 195, "iscrowd": 0, "bbox": [0, 374, 18, 21], "area": 350}, {"id": 11516098, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 382, 225], "area": 20554}], "file_name": "000000032334.png", "image_id": 32334}, {"segments_info": [{"id": 3552818, "category_id": 1, "iscrowd": 0, "bbox": [170, 162, 140, 130], "area": 5371}, {"id": 5198933, "category_id": 42, "iscrowd": 0, "bbox": [244, 250, 141, 65], "area": 3348}, {"id": 10989771, "category_id": 154, "iscrowd": 0, "bbox": [523, 163, 117, 29], "area": 2441}, {"id": 8815732, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 259886}, {"id": 12815224, "category_id": 187, "iscrowd": 0, "bbox": [594, 128, 46, 40], "area": 1187}], "file_name": "000000032570.png", "image_id": 32570}, {"segments_info": [{"id": 3028353, "category_id": 27, "iscrowd": 0, "bbox": [70, 213, 306, 214], "area": 46812}, {"id": 8225671, "category_id": 73, "iscrowd": 0, "bbox": [56, 81, 185, 178], "area": 22349}, {"id": 4807296, "category_id": 73, "iscrowd": 0, "bbox": [245, 94, 132, 128], "area": 7374}, {"id": 3161953, "category_id": 73, "iscrowd": 0, "bbox": [302, 117, 127, 138], "area": 16107}, {"id": 2175056, "category_id": 73, "iscrowd": 0, "bbox": [385, 76, 149, 124], "area": 14234}, {"id": 3618887, "category_id": 73, "iscrowd": 0, "bbox": [299, 18, 157, 99], "area": 9879}, {"id": 3225939, "category_id": 73, "iscrowd": 0, "bbox": [155, 18, 135, 161], "area": 10198}, {"id": 3034813, "category_id": 189, "iscrowd": 0, "bbox": [16, 255, 585, 172], "area": 32014}, {"id": 12047351, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 48], "area": 20570}, {"id": 3757714, "category_id": 200, "iscrowd": 0, "bbox": [0, 35, 640, 392], "area": 63607}], "file_name": "000000032610.png", "image_id": 32610}, {"segments_info": [{"id": 3610124, "category_id": 1, "iscrowd": 0, "bbox": [588, 216, 51, 107], "area": 2458}, {"id": 3095383, "category_id": 1, "iscrowd": 0, "bbox": [146, 23, 135, 126], "area": 6786}, {"id": 4210233, "category_id": 35, "iscrowd": 0, "bbox": [124, 10, 208, 202], "area": 6041}, {"id": 7358764, "category_id": 35, "iscrowd": 0, "bbox": [553, 309, 87, 15], "area": 230}, {"id": 12032648, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 257425}], "file_name": "000000032735.png", "image_id": 32735}, {"segments_info": [{"id": 4407362, "category_id": 16, "iscrowd": 0, "bbox": [84, 353, 79, 48], "area": 1300}, {"id": 14932692, "category_id": 155, "iscrowd": 0, "bbox": [36, 138, 180, 285], "area": 42332}, {"id": 1450025, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 295, 500], "area": 74727}, {"id": 519, "category_id": 199, "iscrowd": 0, "bbox": [78, 0, 297, 500], "area": 55747}], "file_name": "000000032811.png", "image_id": 32811}, {"segments_info": [{"id": 4874353, "category_id": 1, "iscrowd": 0, "bbox": [359, 60, 121, 342], "area": 15636}, {"id": 4674388, "category_id": 1, "iscrowd": 0, "bbox": [87, 0, 193, 468], "area": 43084}, {"id": 10598835, "category_id": 70, "iscrowd": 0, "bbox": [137, 361, 121, 144], "area": 11726}, {"id": 9093335, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 145, 509], "area": 45202}, {"id": 5860460, "category_id": 156, "iscrowd": 0, "bbox": [321, 0, 100, 368], "area": 11624}, {"id": 6059622, "category_id": 190, "iscrowd": 0, "bbox": [0, 366, 480, 274], "area": 46586}, {"id": 10599871, "category_id": 195, "iscrowd": 0, "bbox": [320, 247, 59, 64], "area": 2129}, {"id": 3821923, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 520], "area": 69485}], "file_name": "000000032817.png", "image_id": 32817}, {"segments_info": [{"id": 4594446, "category_id": 1, "iscrowd": 0, "bbox": [86, 198, 227, 442], "area": 61488}, {"id": 2888461, "category_id": 28, "iscrowd": 0, "bbox": [40, 47, 327, 229], "area": 27573}, {"id": 5783360, "category_id": 112, "iscrowd": 0, "bbox": [30, 128, 273, 512], "area": 34818}, {"id": 8877184, "category_id": 133, "iscrowd": 0, "bbox": [11, 74, 40, 201], "area": 3999}, {"id": 9271939, "category_id": 186, "iscrowd": 0, "bbox": [54, 0, 274, 221], "area": 25691}, {"id": 6177591, "category_id": 190, "iscrowd": 0, "bbox": [77, 575, 224, 65], "area": 5653}, {"id": 5980775, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 426, 640], "area": 89645}], "file_name": "000000032861.png", "image_id": 32861}, {"segments_info": [{"id": 4349056, "category_id": 1, "iscrowd": 0, "bbox": [97, 48, 62, 147], "area": 3379}, {"id": 4735319, "category_id": 1, "iscrowd": 0, "bbox": [373, 119, 126, 346], "area": 23691}, {"id": 7759458, "category_id": 27, "iscrowd": 0, "bbox": [447, 160, 70, 120], "area": 1616}, {"id": 6381689, "category_id": 77, "iscrowd": 0, "bbox": [141, 57, 5, 5], "area": 15}, {"id": 13947342, "category_id": 125, "iscrowd": 0, "bbox": [0, 395, 524, 85], "area": 24402}, {"id": 11514288, "category_id": 148, "iscrowd": 0, "bbox": [286, 394, 309, 86], "area": 7252}, {"id": 5526357, "category_id": 161, "iscrowd": 0, "bbox": [0, 228, 112, 136], "area": 7112}, {"id": 2170655, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 194], "area": 57563}, {"id": 2565928, "category_id": 185, "iscrowd": 0, "bbox": [119, 34, 281, 206], "area": 31559}, {"id": 5923425, "category_id": 191, "iscrowd": 0, "bbox": [0, 85, 640, 155], "area": 11440}, {"id": 2235936, "category_id": 197, "iscrowd": 0, "bbox": [466, 0, 174, 97], "area": 11143}, {"id": 5593177, "category_id": 198, "iscrowd": 0, "bbox": [0, 229, 640, 251], "area": 70754}], "file_name": "000000032887.png", "image_id": 32887}, {"segments_info": [{"id": 8947074, "category_id": 1, "iscrowd": 0, "bbox": [436, 109, 165, 435], "area": 42717}, {"id": 8818064, "category_id": 1, "iscrowd": 0, "bbox": [25, 100, 300, 445], "area": 61406}, {"id": 9477798, "category_id": 1, "iscrowd": 0, "bbox": [185, 136, 146, 398], "area": 40905}, {"id": 5988966, "category_id": 1, "iscrowd": 0, "bbox": [310, 100, 148, 446], "area": 35735}, {"id": 2241595, "category_id": 1, "iscrowd": 0, "bbox": [1, 201, 21, 144], "area": 1824}, {"id": 4274048, "category_id": 32, "iscrowd": 0, "bbox": [352, 199, 31, 182], "area": 2974}, {"id": 2108465, "category_id": 44, "iscrowd": 0, "bbox": [5, 146, 12, 32], "area": 290}, {"id": 3034717, "category_id": 44, "iscrowd": 0, "bbox": [27, 146, 13, 33], "area": 327}, {"id": 1647657, "category_id": 44, "iscrowd": 0, "bbox": [50, 150, 9, 29], "area": 206}, {"id": 3557714, "category_id": 44, "iscrowd": 0, "bbox": [17, 145, 10, 33], "area": 227}, {"id": 2638169, "category_id": 44, "iscrowd": 0, "bbox": [39, 151, 9, 28], "area": 200}, {"id": 1713966, "category_id": 44, "iscrowd": 0, "bbox": [0, 141, 8, 38], "area": 235}, {"id": 1716543, "category_id": 46, "iscrowd": 0, "bbox": [618, 263, 11, 21], "area": 176}, {"id": 2049634, "category_id": 47, "iscrowd": 0, "bbox": [618, 308, 16, 36], "area": 510}, {"id": 1908337, "category_id": 62, "iscrowd": 0, "bbox": [0, 492, 71, 54], "area": 3067}, {"id": 1711663, "category_id": 62, "iscrowd": 0, "bbox": [587, 263, 13, 36], "area": 270}, {"id": 1385531, "category_id": 62, "iscrowd": 0, "bbox": [595, 295, 35, 27], "area": 671}, {"id": 3493253, "category_id": 62, "iscrowd": 0, "bbox": [268, 487, 140, 59], "area": 6392}, {"id": 2173539, "category_id": 62, "iscrowd": 0, "bbox": [478, 415, 128, 131], "area": 13847}, {"id": 2647706, "category_id": 67, "iscrowd": 0, "bbox": [0, 379, 60, 59], "area": 1252}, {"id": 1261150, "category_id": 67, "iscrowd": 0, "bbox": [598, 319, 42, 58], "area": 1632}, {"id": 1782071, "category_id": 186, "iscrowd": 0, "bbox": [621, 0, 19, 13], "area": 201}, {"id": 6593727, "category_id": 189, "iscrowd": 0, "bbox": [0, 377, 35, 45], "area": 1189}, {"id": 1724798, "category_id": 190, "iscrowd": 0, "bbox": [0, 444, 478, 102], "area": 4293}, {"id": 5603213, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 348], "area": 97145}], "file_name": "000000032901.png", "image_id": 32901}, {"segments_info": [{"id": 6970711, "category_id": 1, "iscrowd": 0, "bbox": [369, 191, 7, 11], "area": 44}, {"id": 3946551, "category_id": 1, "iscrowd": 0, "bbox": [101, 192, 9, 28], "area": 172}, {"id": 5396576, "category_id": 1, "iscrowd": 0, "bbox": [387, 191, 6, 19], "area": 81}, {"id": 9210504, "category_id": 3, "iscrowd": 0, "bbox": [266, 197, 35, 28], "area": 817}, {"id": 5988971, "category_id": 3, "iscrowd": 0, "bbox": [262, 193, 7, 17], "area": 102}, {"id": 8420985, "category_id": 3, "iscrowd": 0, "bbox": [303, 197, 12, 9], "area": 89}, {"id": 10329243, "category_id": 3, "iscrowd": 0, "bbox": [316, 195, 34, 30], "area": 758}, {"id": 8487555, "category_id": 3, "iscrowd": 0, "bbox": [180, 193, 32, 21], "area": 522}, {"id": 6908791, "category_id": 6, "iscrowd": 0, "bbox": [317, 169, 26, 35], "area": 683}, {"id": 9731681, "category_id": 8, "iscrowd": 0, "bbox": [269, 170, 36, 32], "area": 924}, {"id": 4277870, "category_id": 10, "iscrowd": 0, "bbox": [206, 127, 10, 31], "area": 271}, {"id": 3619390, "category_id": 10, "iscrowd": 0, "bbox": [225, 146, 7, 30], "area": 155}, {"id": 8750988, "category_id": 149, "iscrowd": 0, "bbox": [0, 202, 458, 438], "area": 100215}, {"id": 8424596, "category_id": 184, "iscrowd": 0, "bbox": [272, 143, 53, 62], "area": 1305}, {"id": 15262945, "category_id": 187, "iscrowd": 0, "bbox": [49, 0, 409, 163], "area": 44015}, {"id": 6713983, "category_id": 191, "iscrowd": 0, "bbox": [14, 202, 444, 428], "area": 43083}, {"id": 5334136, "category_id": 194, "iscrowd": 0, "bbox": [0, 525, 373, 115], "area": 11983}, {"id": 6582139, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 458, 245], "area": 43791}], "file_name": "000000032941.png", "image_id": 32941}, {"segments_info": [{"id": 6184040, "category_id": 1, "iscrowd": 0, "bbox": [273, 151, 57, 182], "area": 5040}, {"id": 4734794, "category_id": 43, "iscrowd": 0, "bbox": [304, 233, 66, 34], "area": 1239}, {"id": 9278096, "category_id": 145, "iscrowd": 0, "bbox": [0, 288, 640, 138], "area": 77973}, {"id": 2499357, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 320], "area": 164484}, {"id": 723207, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 58], "area": 22648}], "file_name": "000000033005.png", "image_id": 33005}, {"segments_info": [{"id": 3485229, "category_id": 1, "iscrowd": 0, "bbox": [0, 15, 52, 240], "area": 4498}, {"id": 3284763, "category_id": 1, "iscrowd": 0, "bbox": [362, 0, 66, 97], "area": 4350}, {"id": 4208181, "category_id": 1, "iscrowd": 0, "bbox": [289, 22, 108, 160], "area": 9854}, {"id": 6177591, "category_id": 1, "iscrowd": 0, "bbox": [24, 28, 189, 435], "area": 32981}, {"id": 5722465, "category_id": 1, "iscrowd": 0, "bbox": [397, 29, 31, 265], "area": 4955}, {"id": 9268318, "category_id": 1, "iscrowd": 0, "bbox": [148, 36, 233, 439], "area": 47595}, {"id": 2313665, "category_id": 15, "iscrowd": 0, "bbox": [271, 0, 94, 57], "area": 3364}, {"id": 9067871, "category_id": 35, "iscrowd": 0, "bbox": [7, 250, 71, 29], "area": 403}, {"id": 10778461, "category_id": 35, "iscrowd": 0, "bbox": [216, 415, 91, 27], "area": 747}, {"id": 9992300, "category_id": 138, "iscrowd": 0, "bbox": [0, 159, 428, 310], "area": 58118}, {"id": 12565174, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 428, 500], "area": 38990}], "file_name": "000000033104.png", "image_id": 33104}, {"segments_info": [{"id": 6509129, "category_id": 3, "iscrowd": 0, "bbox": [480, 207, 28, 23], "area": 539}, {"id": 3682862, "category_id": 3, "iscrowd": 0, "bbox": [169, 229, 40, 9], "area": 226}, {"id": 7628641, "category_id": 3, "iscrowd": 0, "bbox": [481, 203, 13, 11], "area": 56}, {"id": 5524821, "category_id": 3, "iscrowd": 0, "bbox": [129, 236, 21, 3], "area": 53}, {"id": 6050640, "category_id": 3, "iscrowd": 0, "bbox": [470, 207, 10, 15], "area": 111}, {"id": 8945013, "category_id": 3, "iscrowd": 0, "bbox": [506, 204, 23, 17], "area": 300}, {"id": 6379855, "category_id": 6, "iscrowd": 0, "bbox": [519, 185, 26, 29], "area": 636}, {"id": 4272935, "category_id": 8, "iscrowd": 0, "bbox": [202, 95, 269, 209], "area": 43938}, {"id": 6182989, "category_id": 8, "iscrowd": 0, "bbox": [491, 189, 20, 20], "area": 297}, {"id": 4473151, "category_id": 128, "iscrowd": 0, "bbox": [0, 78, 220, 162], "area": 15326}, {"id": 7365723, "category_id": 149, "iscrowd": 0, "bbox": [0, 201, 566, 279], "area": 60448}, {"id": 1448219, "category_id": 171, "iscrowd": 0, "bbox": [0, 230, 212, 62], "area": 5070}, {"id": 6119249, "category_id": 181, "iscrowd": 0, "bbox": [71, 147, 31, 33], "area": 483}, {"id": 6447967, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 258], "area": 45264}, {"id": 16512490, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 543, 171], "area": 51123}, {"id": 3354669, "category_id": 191, "iscrowd": 0, "bbox": [327, 209, 313, 271], "area": 43272}, {"id": 1649442, "category_id": 193, "iscrowd": 0, "bbox": [0, 193, 640, 287], "area": 35907}], "file_name": "000000033109.png", "image_id": 33109}, {"segments_info": [{"id": 8815485, "category_id": 5, "iscrowd": 0, "bbox": [164, 175, 334, 101], "area": 3988}, {"id": 4212056, "category_id": 14, "iscrowd": 0, "bbox": [557, 352, 25, 34], "area": 650}, {"id": 4211287, "category_id": 14, "iscrowd": 0, "bbox": [540, 351, 15, 18], "area": 196}, {"id": 4211804, "category_id": 14, "iscrowd": 0, "bbox": [246, 336, 72, 120], "area": 5670}, {"id": 3948618, "category_id": 14, "iscrowd": 0, "bbox": [350, 332, 44, 45], "area": 1521}, {"id": 4737886, "category_id": 14, "iscrowd": 0, "bbox": [224, 345, 15, 21], "area": 235}, {"id": 4211278, "category_id": 14, "iscrowd": 0, "bbox": [160, 343, 25, 32], "area": 555}, {"id": 4342857, "category_id": 14, "iscrowd": 0, "bbox": [410, 261, 131, 140], "area": 13027}, {"id": 7172982, "category_id": 149, "iscrowd": 0, "bbox": [0, 233, 640, 186], "area": 68803}, {"id": 10527905, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 55], "area": 23434}, {"id": 10130823, "category_id": 192, "iscrowd": 0, "bbox": [0, 16, 640, 259], "area": 138445}, {"id": 4087144, "category_id": 193, "iscrowd": 0, "bbox": [0, 251, 640, 229], "area": 35196}], "file_name": "000000033114.png", "image_id": 33114}, {"segments_info": [{"id": 3619648, "category_id": 1, "iscrowd": 0, "bbox": [323, 156, 27, 99], "area": 1763}, {"id": 3223597, "category_id": 1, "iscrowd": 0, "bbox": [264, 156, 39, 109], "area": 2458}, {"id": 3619132, "category_id": 1, "iscrowd": 0, "bbox": [320, 156, 13, 28], "area": 164}, {"id": 3686726, "category_id": 1, "iscrowd": 0, "bbox": [304, 152, 6, 19], "area": 77}, {"id": 3751756, "category_id": 1, "iscrowd": 0, "bbox": [9, 102, 135, 231], "area": 17105}, {"id": 5328203, "category_id": 1, "iscrowd": 0, "bbox": [183, 159, 40, 94], "area": 1638}, {"id": 2236704, "category_id": 1, "iscrowd": 0, "bbox": [216, 157, 40, 101], "area": 2226}, {"id": 4344918, "category_id": 1, "iscrowd": 0, "bbox": [349, 158, 17, 34], "area": 189}, {"id": 4014420, "category_id": 1, "iscrowd": 0, "bbox": [295, 154, 9, 18], "area": 82}, {"id": 5662111, "category_id": 1, "iscrowd": 0, "bbox": [350, 89, 96, 240], "area": 9718}, {"id": 4737116, "category_id": 3, "iscrowd": 0, "bbox": [0, 162, 18, 10], "area": 134}, {"id": 5723991, "category_id": 3, "iscrowd": 0, "bbox": [19, 159, 23, 11], "area": 164}, {"id": 4539456, "category_id": 8, "iscrowd": 0, "bbox": [127, 146, 63, 41], "area": 1247}, {"id": 2830131, "category_id": 31, "iscrowd": 0, "bbox": [250, 213, 9, 16], "area": 57}, {"id": 3811110, "category_id": 31, "iscrowd": 0, "bbox": [349, 188, 91, 145], "area": 5805}, {"id": 2829613, "category_id": 31, "iscrowd": 0, "bbox": [194, 171, 19, 38], "area": 332}, {"id": 5461864, "category_id": 31, "iscrowd": 0, "bbox": [325, 171, 17, 29], "area": 60}, {"id": 6973547, "category_id": 43, "iscrowd": 0, "bbox": [368, 43, 125, 62], "area": 971}, {"id": 13552341, "category_id": 92, "iscrowd": 0, "bbox": [143, 75, 26, 26], "area": 337}, {"id": 8884119, "category_id": 154, "iscrowd": 0, "bbox": [0, 166, 500, 167], "area": 43618}, {"id": 4938329, "category_id": 184, "iscrowd": 0, "bbox": [0, 102, 500, 80], "area": 8720}, {"id": 16447734, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 144], "area": 51590}, {"id": 11117726, "category_id": 192, "iscrowd": 0, "bbox": [141, 91, 359, 63], "area": 12516}, {"id": 7631208, "category_id": 197, "iscrowd": 0, "bbox": [37, 91, 119, 98], "area": 4212}], "file_name": "000000033221.png", "image_id": 33221}, {"segments_info": [{"id": 8216127, "category_id": 1, "iscrowd": 0, "bbox": [158, 42, 101, 392], "area": 27799}, {"id": 5152121, "category_id": 37, "iscrowd": 0, "bbox": [180, 102, 11, 15], "area": 74}, {"id": 11113099, "category_id": 43, "iscrowd": 0, "bbox": [135, 236, 33, 84], "area": 1290}, {"id": 9860186, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 243797}], "file_name": "000000033368.png", "image_id": 33368}, {"segments_info": [{"id": 7239825, "category_id": 1, "iscrowd": 0, "bbox": [63, 244, 140, 265], "area": 13376}, {"id": 1188378, "category_id": 50, "iscrowd": 0, "bbox": [177, 350, 7, 7], "area": 20}, {"id": 2503983, "category_id": 50, "iscrowd": 0, "bbox": [368, 385, 30, 25], "area": 204}, {"id": 6766371, "category_id": 50, "iscrowd": 0, "bbox": [345, 260, 21, 68], "area": 413}, {"id": 10655117, "category_id": 51, "iscrowd": 0, "bbox": [256, 241, 24, 9], "area": 149}, {"id": 9801866, "category_id": 51, "iscrowd": 0, "bbox": [243, 239, 14, 9], "area": 103}, {"id": 662805, "category_id": 79, "iscrowd": 0, "bbox": [137, 374, 129, 211], "area": 13591}, {"id": 334095, "category_id": 79, "iscrowd": 0, "bbox": [265, 414, 160, 154], "area": 16428}, {"id": 4607304, "category_id": 107, "iscrowd": 0, "bbox": [190, 308, 226, 110], "area": 3686}, {"id": 10787479, "category_id": 112, "iscrowd": 0, "bbox": [0, 126, 212, 272], "area": 24177}, {"id": 862523, "category_id": 118, "iscrowd": 0, "bbox": [0, 387, 425, 253], "area": 11071}, {"id": 12431536, "category_id": 130, "iscrowd": 0, "bbox": [76, 92, 21, 21], "area": 305}, {"id": 4475201, "category_id": 156, "iscrowd": 0, "bbox": [221, 234, 178, 61], "area": 1623}, {"id": 5790560, "category_id": 171, "iscrowd": 0, "bbox": [118, 432, 307, 196], "area": 12407}, {"id": 9866633, "category_id": 181, "iscrowd": 0, "bbox": [201, 171, 59, 136], "area": 5000}, {"id": 8288628, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 118, 98], "area": 9666}, {"id": 5986645, "category_id": 191, "iscrowd": 0, "bbox": [0, 430, 260, 210], "area": 36792}, {"id": 2964017, "category_id": 199, "iscrowd": 0, "bbox": [0, 81, 425, 284], "area": 38444}], "file_name": "000000033638.png", "image_id": 33638}, {"segments_info": [{"id": 3893655, "category_id": 25, "iscrowd": 0, "bbox": [156, 159, 314, 372], "area": 27026}, {"id": 4418707, "category_id": 25, "iscrowd": 0, "bbox": [300, 213, 157, 293], "area": 11253}, {"id": 4020298, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 612, 401], "area": 122141}, {"id": 16514300, "category_id": 187, "iscrowd": 0, "bbox": [92, 0, 520, 140], "area": 42213}, {"id": 2057048, "category_id": 193, "iscrowd": 0, "bbox": [0, 390, 612, 222], "area": 24038}, {"id": 9094363, "category_id": 194, "iscrowd": 0, "bbox": [0, 471, 265, 141], "area": 9754}, {"id": 7843527, "category_id": 197, "iscrowd": 0, "bbox": [174, 118, 438, 373], "area": 59369}, {"id": 4091527, "category_id": 198, "iscrowd": 0, "bbox": [0, 399, 612, 213], "area": 77901}], "file_name": "000000033707.png", "image_id": 33707}, {"segments_info": [{"id": 6716036, "category_id": 1, "iscrowd": 0, "bbox": [77, 57, 192, 393], "area": 31473}, {"id": 5196081, "category_id": 3, "iscrowd": 0, "bbox": [288, 68, 53, 37], "area": 1368}, {"id": 1908249, "category_id": 8, "iscrowd": 0, "bbox": [286, 23, 338, 145], "area": 38812}, {"id": 10007234, "category_id": 37, "iscrowd": 0, "bbox": [597, 130, 27, 24], "area": 504}, {"id": 11636592, "category_id": 39, "iscrowd": 0, "bbox": [78, 174, 33, 63], "area": 579}, {"id": 3826257, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 396], "area": 180783}, {"id": 6399893, "category_id": 193, "iscrowd": 0, "bbox": [0, 372, 640, 68], "area": 20027}, {"id": 12576754, "category_id": 194, "iscrowd": 0, "bbox": [0, 421, 640, 36], "area": 18263}], "file_name": "000000033759.png", "image_id": 33759}, {"segments_info": [{"id": 5064784, "category_id": 1, "iscrowd": 0, "bbox": [455, 195, 9, 34], "area": 190}, {"id": 2695457, "category_id": 1, "iscrowd": 0, "bbox": [45, 187, 13, 37], "area": 299}, {"id": 3947078, "category_id": 1, "iscrowd": 0, "bbox": [463, 199, 6, 10], "area": 40}, {"id": 5461591, "category_id": 1, "iscrowd": 0, "bbox": [312, 190, 17, 28], "area": 331}, {"id": 4010805, "category_id": 1, "iscrowd": 0, "bbox": [128, 191, 4, 12], "area": 27}, {"id": 4477278, "category_id": 1, "iscrowd": 0, "bbox": [378, 186, 24, 35], "area": 484}, {"id": 5461341, "category_id": 1, "iscrowd": 0, "bbox": [468, 195, 5, 11], "area": 41}, {"id": 5721175, "category_id": 1, "iscrowd": 0, "bbox": [439, 194, 9, 33], "area": 161}, {"id": 2829875, "category_id": 1, "iscrowd": 0, "bbox": [405, 188, 24, 36], "area": 563}, {"id": 6447993, "category_id": 1, "iscrowd": 0, "bbox": [467, 196, 20, 50], "area": 649}, {"id": 12825016, "category_id": 1, "iscrowd": 0, "bbox": [393, 208, 6, 11], "area": 48}, {"id": 2762279, "category_id": 1, "iscrowd": 0, "bbox": [424, 188, 13, 37], "area": 216}, {"id": 2894384, "category_id": 1, "iscrowd": 0, "bbox": [446, 194, 8, 35], "area": 178}, {"id": 4208693, "category_id": 3, "iscrowd": 0, "bbox": [418, 223, 222, 199], "area": 35229}, {"id": 4537658, "category_id": 3, "iscrowd": 0, "bbox": [1, 218, 268, 203], "area": 41156}, {"id": 6508094, "category_id": 3, "iscrowd": 0, "bbox": [177, 196, 19, 8], "area": 105}, {"id": 8945532, "category_id": 3, "iscrowd": 0, "bbox": [137, 193, 29, 12], "area": 251}, {"id": 5197392, "category_id": 4, "iscrowd": 0, "bbox": [244, 209, 101, 53], "area": 1370}, {"id": 3750458, "category_id": 4, "iscrowd": 0, "bbox": [342, 204, 45, 52], "area": 1206}, {"id": 3288880, "category_id": 4, "iscrowd": 0, "bbox": [261, 218, 87, 51], "area": 2818}, {"id": 3289648, "category_id": 4, "iscrowd": 0, "bbox": [370, 216, 67, 46], "area": 2047}, {"id": 5526128, "category_id": 6, "iscrowd": 0, "bbox": [481, 145, 159, 98], "area": 10778}, {"id": 4476231, "category_id": 184, "iscrowd": 0, "bbox": [0, 64, 515, 161], "area": 29701}, {"id": 16513785, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 156], "area": 74414}, {"id": 4341051, "category_id": 190, "iscrowd": 0, "bbox": [0, 201, 640, 226], "area": 4257}, {"id": 11974844, "category_id": 191, "iscrowd": 0, "bbox": [68, 199, 451, 228], "area": 44432}, {"id": 5133391, "category_id": 193, "iscrowd": 0, "bbox": [0, 205, 18, 13], "area": 171}, {"id": 6381410, "category_id": 197, "iscrowd": 0, "bbox": [115, 65, 525, 181], "area": 20588}], "file_name": "000000033854.png", "image_id": 33854}, {"segments_info": [{"id": 2034980, "category_id": 14, "iscrowd": 0, "bbox": [61, 215, 231, 205], "area": 37654}, {"id": 2102069, "category_id": 14, "iscrowd": 0, "bbox": [291, 233, 219, 188], "area": 34014}, {"id": 10073021, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 107], "area": 46369}], "file_name": "000000034071.png", "image_id": 34071}, {"segments_info": [{"id": 4537392, "category_id": 1, "iscrowd": 0, "bbox": [450, 112, 74, 269], "area": 11716}, {"id": 2766917, "category_id": 1, "iscrowd": 0, "bbox": [452, 98, 144, 283], "area": 16466}, {"id": 1775898, "category_id": 31, "iscrowd": 0, "bbox": [436, 193, 66, 41], "area": 1722}, {"id": 5463158, "category_id": 33, "iscrowd": 0, "bbox": [27, 101, 400, 285], "area": 101442}, {"id": 1448995, "category_id": 184, "iscrowd": 0, "bbox": [577, 186, 63, 67], "area": 2373}, {"id": 7958382, "category_id": 191, "iscrowd": 0, "bbox": [0, 246, 640, 234], "area": 14769}, {"id": 6055791, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 256], "area": 37200}], "file_name": "000000034139.png", "image_id": 34139}, {"segments_info": [{"id": 1204011, "category_id": 56, "iscrowd": 0, "bbox": [547, 0, 93, 166], "area": 7046}, {"id": 2917455, "category_id": 56, "iscrowd": 0, "bbox": [292, 3, 292, 95], "area": 20554}, {"id": 1261328, "category_id": 56, "iscrowd": 0, "bbox": [580, 62, 60, 136], "area": 5549}, {"id": 4014145, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 110, 427], "area": 6918}, {"id": 5339517, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 232946}], "file_name": "000000034205.png", "image_id": 34205}, {"segments_info": [{"id": 4542277, "category_id": 56, "iscrowd": 0, "bbox": [279, 10, 136, 74], "area": 3603}, {"id": 928037, "category_id": 56, "iscrowd": 0, "bbox": [29, 2, 208, 86], "area": 11275}, {"id": 529168, "category_id": 56, "iscrowd": 0, "bbox": [229, 21, 24, 33], "area": 543}, {"id": 3625797, "category_id": 56, "iscrowd": 0, "bbox": [271, 11, 57, 38], "area": 1109}, {"id": 3697335, "category_id": 57, "iscrowd": 0, "bbox": [127, 165, 247, 115], "area": 20476}, {"id": 6066926, "category_id": 57, "iscrowd": 0, "bbox": [272, 174, 13, 27], "area": 209}, {"id": 2836552, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 500, 309], "area": 92206}], "file_name": "000000034257.png", "image_id": 34257}, {"segments_info": [{"id": 7899032, "category_id": 1, "iscrowd": 0, "bbox": [445, 54, 35, 34], "area": 609}, {"id": 5661576, "category_id": 1, "iscrowd": 0, "bbox": [339, 55, 42, 68], "area": 1328}, {"id": 8489096, "category_id": 1, "iscrowd": 0, "bbox": [124, 47, 35, 53], "area": 841}, {"id": 3889263, "category_id": 1, "iscrowd": 0, "bbox": [382, 64, 55, 56], "area": 1378}, {"id": 6843760, "category_id": 1, "iscrowd": 0, "bbox": [287, 56, 25, 43], "area": 672}, {"id": 8158106, "category_id": 1, "iscrowd": 0, "bbox": [319, 77, 12, 14], "area": 95}, {"id": 11186359, "category_id": 32, "iscrowd": 0, "bbox": [449, 72, 11, 18], "area": 101}, {"id": 7901882, "category_id": 60, "iscrowd": 0, "bbox": [202, 187, 30, 15], "area": 322}, {"id": 7770556, "category_id": 60, "iscrowd": 0, "bbox": [261, 190, 27, 11], "area": 236}, {"id": 6061995, "category_id": 60, "iscrowd": 0, "bbox": [162, 186, 34, 16], "area": 384}, {"id": 7509429, "category_id": 60, "iscrowd": 0, "bbox": [46, 222, 14, 18], "area": 188}, {"id": 7375799, "category_id": 60, "iscrowd": 0, "bbox": [233, 187, 27, 14], "area": 289}, {"id": 8427454, "category_id": 60, "iscrowd": 0, "bbox": [214, 182, 27, 14], "area": 165}, {"id": 6589363, "category_id": 60, "iscrowd": 0, "bbox": [144, 180, 33, 14], "area": 269}, {"id": 6917811, "category_id": 60, "iscrowd": 0, "bbox": [64, 200, 35, 24], "area": 542}, {"id": 7115189, "category_id": 60, "iscrowd": 0, "bbox": [104, 180, 36, 22], "area": 442}, {"id": 7902136, "category_id": 60, "iscrowd": 0, "bbox": [176, 180, 31, 18], "area": 271}, {"id": 6129327, "category_id": 60, "iscrowd": 0, "bbox": [122, 188, 33, 20], "area": 525}, {"id": 6589100, "category_id": 60, "iscrowd": 0, "bbox": [47, 230, 32, 28], "area": 673}, {"id": 6194860, "category_id": 60, "iscrowd": 0, "bbox": [84, 205, 39, 26], "area": 680}, {"id": 7505813, "category_id": 60, "iscrowd": 1, "bbox": [100, 135, 396, 45], "area": 5517}, {"id": 12302254, "category_id": 195, "iscrowd": 0, "bbox": [142, 38, 18, 20], "area": 144}, {"id": 6455192, "category_id": 196, "iscrowd": 0, "bbox": [237, 131, 263, 41], "area": 511}, {"id": 12499633, "category_id": 199, "iscrowd": 0, "bbox": [34, 0, 466, 64], "area": 8936}], "file_name": "000000034417.png", "image_id": 34417}, {"segments_info": [{"id": 5070413, "category_id": 1, "iscrowd": 0, "bbox": [319, 179, 87, 135], "area": 4940}, {"id": 6263247, "category_id": 34, "iscrowd": 0, "bbox": [326, 250, 23, 14], "area": 204}, {"id": 9345439, "category_id": 34, "iscrowd": 0, "bbox": [381, 249, 18, 22], "area": 279}, {"id": 7304825, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 325], "area": 148476}, {"id": 5992065, "category_id": 194, "iscrowd": 0, "bbox": [0, 196, 640, 284], "area": 153155}], "file_name": "000000034452.png", "image_id": 34452}, {"segments_info": [{"id": 1253921, "category_id": 44, "iscrowd": 0, "bbox": [194, 300, 12, 29], "area": 269}, {"id": 5265750, "category_id": 44, "iscrowd": 0, "bbox": [169, 316, 17, 45], "area": 628}, {"id": 4286327, "category_id": 70, "iscrowd": 0, "bbox": [209, 374, 48, 85], "area": 3204}, {"id": 8563908, "category_id": 81, "iscrowd": 0, "bbox": [2, 407, 129, 103], "area": 9267}, {"id": 4750489, "category_id": 107, "iscrowd": 0, "bbox": [0, 337, 225, 303], "area": 24400}, {"id": 2178116, "category_id": 109, "iscrowd": 0, "bbox": [293, 117, 120, 296], "area": 27313}, {"id": 8230302, "category_id": 112, "iscrowd": 0, "bbox": [380, 315, 46, 325], "area": 7844}, {"id": 15202554, "category_id": 130, "iscrowd": 0, "bbox": [0, 66, 19, 40], "area": 588}, {"id": 1128775, "category_id": 133, "iscrowd": 0, "bbox": [0, 76, 104, 316], "area": 24832}, {"id": 2710643, "category_id": 176, "iscrowd": 0, "bbox": [0, 100, 414, 354], "area": 40202}, {"id": 2837339, "category_id": 186, "iscrowd": 0, "bbox": [187, 0, 191, 22], "area": 2808}, {"id": 3825008, "category_id": 188, "iscrowd": 0, "bbox": [31, 374, 181, 266], "area": 18100}, {"id": 1787229, "category_id": 190, "iscrowd": 0, "bbox": [150, 410, 246, 230], "area": 41777}, {"id": 3957880, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 426, 518], "area": 70746}], "file_name": "000000034760.png", "image_id": 34760}, {"segments_info": [{"id": 6116960, "category_id": 47, "iscrowd": 0, "bbox": [125, 201, 23, 25], "area": 535}, {"id": 4411732, "category_id": 51, "iscrowd": 0, "bbox": [409, 195, 41, 21], "area": 650}, {"id": 4479367, "category_id": 53, "iscrowd": 0, "bbox": [307, 188, 15, 10], "area": 121}, {"id": 3490636, "category_id": 62, "iscrowd": 0, "bbox": [546, 176, 59, 96], "area": 3696}, {"id": 1053204, "category_id": 62, "iscrowd": 0, "bbox": [494, 210, 66, 53], "area": 2138}, {"id": 3555410, "category_id": 62, "iscrowd": 0, "bbox": [483, 170, 46, 49], "area": 1598}, {"id": 5989995, "category_id": 67, "iscrowd": 0, "bbox": [348, 202, 161, 27], "area": 2174}, {"id": 986895, "category_id": 72, "iscrowd": 0, "bbox": [394, 152, 45, 48], "area": 1802}, {"id": 12236469, "category_id": 81, "iscrowd": 0, "bbox": [144, 258, 147, 27], "area": 1947}, {"id": 4737867, "category_id": 107, "iscrowd": 0, "bbox": [96, 198, 391, 156], "area": 27633}, {"id": 10196371, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 108, 396], "area": 37544}, {"id": 10198171, "category_id": 168, "iscrowd": 0, "bbox": [103, 269, 63, 79], "area": 2348}, {"id": 8030339, "category_id": 181, "iscrowd": 0, "bbox": [343, 49, 253, 171], "area": 20503}, {"id": 6391206, "category_id": 188, "iscrowd": 0, "bbox": [101, 234, 436, 246], "area": 54694}, {"id": 3624289, "category_id": 189, "iscrowd": 0, "bbox": [268, 191, 351, 158], "area": 18682}, {"id": 2500904, "category_id": 190, "iscrowd": 0, "bbox": [0, 318, 640, 162], "area": 29444}, {"id": 9803413, "category_id": 199, "iscrowd": 0, "bbox": [88, 0, 552, 399], "area": 93034}], "file_name": "000000034873.png", "image_id": 34873}, {"segments_info": [{"id": 857117, "category_id": 1, "iscrowd": 0, "bbox": [156, 69, 44, 35], "area": 1247}, {"id": 1053719, "category_id": 65, "iscrowd": 0, "bbox": [0, 58, 423, 582], "area": 213857}, {"id": 592912, "category_id": 93, "iscrowd": 0, "bbox": [0, 238, 425, 402], "area": 1907}, {"id": 1780274, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 425, 241], "area": 34479}], "file_name": "000000035062.png", "image_id": 35062}, {"segments_info": [{"id": 9211020, "category_id": 1, "iscrowd": 0, "bbox": [27, 0, 233, 426], "area": 43905}, {"id": 7566195, "category_id": 1, "iscrowd": 0, "bbox": [369, 239, 46, 82], "area": 1470}, {"id": 9934743, "category_id": 41, "iscrowd": 0, "bbox": [2, 348, 194, 104], "area": 3507}, {"id": 2171169, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 79, 277], "area": 11522}, {"id": 14671839, "category_id": 187, "iscrowd": 0, "bbox": [146, 0, 283, 261], "area": 58774}, {"id": 12500670, "category_id": 191, "iscrowd": 0, "bbox": [0, 183, 429, 457], "area": 125733}, {"id": 8421504, "category_id": 197, "iscrowd": 0, "bbox": [0, 120, 429, 202], "area": 10917}, {"id": 8684676, "category_id": 199, "iscrowd": 0, "bbox": [93, 202, 300, 133], "area": 17617}], "file_name": "000000035197.png", "image_id": 35197}, {"segments_info": [{"id": 1450796, "category_id": 1, "iscrowd": 0, "bbox": [1, 221, 164, 242], "area": 25045}, {"id": 66049, "category_id": 31, "iscrowd": 0, "bbox": [405, 0, 235, 192], "area": 28833}, {"id": 7900560, "category_id": 43, "iscrowd": 0, "bbox": [240, 188, 349, 275], "area": 18201}, {"id": 6580088, "category_id": 44, "iscrowd": 0, "bbox": [446, 63, 80, 153], "area": 9839}, {"id": 6053459, "category_id": 73, "iscrowd": 0, "bbox": [165, 0, 244, 233], "area": 49627}, {"id": 526599, "category_id": 77, "iscrowd": 0, "bbox": [405, 196, 102, 70], "area": 3944}, {"id": 6447160, "category_id": 77, "iscrowd": 0, "bbox": [325, 230, 78, 72], "area": 3465}, {"id": 11255747, "category_id": 84, "iscrowd": 0, "bbox": [464, 241, 165, 174], "area": 18143}, {"id": 1317669, "category_id": 84, "iscrowd": 0, "bbox": [94, 226, 251, 166], "area": 29020}, {"id": 8032907, "category_id": 200, "iscrowd": 0, "bbox": [0, 0, 640, 463], "area": 95071}], "file_name": "000000035279.png", "image_id": 35279}, {"segments_info": [{"id": 2441607, "category_id": 44, "iscrowd": 0, "bbox": [131, 234, 56, 31], "area": 898}, {"id": 2634045, "category_id": 44, "iscrowd": 0, "bbox": [135, 285, 55, 32], "area": 936}, {"id": 2307940, "category_id": 44, "iscrowd": 0, "bbox": [128, 213, 60, 28], "area": 1148}, {"id": 3227465, "category_id": 44, "iscrowd": 0, "bbox": [133, 260, 57, 31], "area": 934}, {"id": 2240561, "category_id": 49, "iscrowd": 0, "bbox": [55, 218, 30, 40], "area": 389}, {"id": 2696735, "category_id": 79, "iscrowd": 0, "bbox": [103, 306, 520, 174], "area": 72361}, {"id": 1118477, "category_id": 107, "iscrowd": 0, "bbox": [0, 288, 166, 162], "area": 18637}, {"id": 10133659, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 626, 112], "area": 16192}, {"id": 7241338, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 319], "area": 115428}, {"id": 5134935, "category_id": 188, "iscrowd": 0, "bbox": [0, 444, 122, 36], "area": 3433}, {"id": 5991529, "category_id": 199, "iscrowd": 0, "bbox": [612, 164, 28, 316], "area": 3909}], "file_name": "000000035326.png", "image_id": 35326}, {"segments_info": [{"id": 2372927, "category_id": 1, "iscrowd": 0, "bbox": [444, 109, 36, 95], "area": 2264}, {"id": 68635, "category_id": 1, "iscrowd": 0, "bbox": [401, 106, 67, 121], "area": 3773}, {"id": 664639, "category_id": 1, "iscrowd": 0, "bbox": [96, 3, 258, 306], "area": 54895}, {"id": 465965, "category_id": 1, "iscrowd": 0, "bbox": [19, 70, 54, 63], "area": 2091}, {"id": 350839, "category_id": 31, "iscrowd": 0, "bbox": [360, 194, 63, 92], "area": 3009}, {"id": 533048, "category_id": 47, "iscrowd": 0, "bbox": [100, 278, 63, 102], "area": 5483}, {"id": 10075601, "category_id": 47, "iscrowd": 0, "bbox": [65, 374, 127, 123], "area": 10894}, {"id": 7311304, "category_id": 60, "iscrowd": 0, "bbox": [272, 330, 37, 27], "area": 770}, {"id": 1259868, "category_id": 60, "iscrowd": 0, "bbox": [207, 323, 51, 38], "area": 1566}, {"id": 1987455, "category_id": 60, "iscrowd": 0, "bbox": [255, 412, 113, 101], "area": 8671}, {"id": 404554, "category_id": 60, "iscrowd": 0, "bbox": [357, 420, 103, 93], "area": 6867}, {"id": 1128280, "category_id": 60, "iscrowd": 0, "bbox": [159, 208, 67, 56], "area": 2654}, {"id": 2965613, "category_id": 61, "iscrowd": 0, "bbox": [119, 471, 169, 169], "area": 22297}, {"id": 70450, "category_id": 62, "iscrowd": 0, "bbox": [388, 179, 37, 166], "area": 917}, {"id": 69926, "category_id": 62, "iscrowd": 0, "bbox": [442, 203, 38, 184], "area": 3650}, {"id": 1656693, "category_id": 62, "iscrowd": 0, "bbox": [0, 164, 63, 152], "area": 4627}, {"id": 7047326, "category_id": 67, "iscrowd": 0, "bbox": [7, 322, 473, 311], "area": 67390}, {"id": 1206972, "category_id": 107, "iscrowd": 0, "bbox": [0, 108, 150, 150], "area": 9001}, {"id": 4156040, "category_id": 156, "iscrowd": 0, "bbox": [0, 46, 133, 86], "area": 6416}, {"id": 270928, "category_id": 177, "iscrowd": 0, "bbox": [349, 82, 131, 180], "area": 8358}, {"id": 8762579, "category_id": 189, "iscrowd": 0, "bbox": [0, 326, 127, 314], "area": 2022}, {"id": 3041423, "category_id": 190, "iscrowd": 0, "bbox": [0, 251, 480, 313], "area": 22498}, {"id": 406086, "category_id": 199, "iscrowd": 0, "bbox": [37, 234, 69, 39], "area": 1551}], "file_name": "000000035682.png", "image_id": 35682}, {"segments_info": [{"id": 6914942, "category_id": 70, "iscrowd": 0, "bbox": [253, 19, 95, 101], "area": 6680}, {"id": 5730168, "category_id": 70, "iscrowd": 0, "bbox": [144, 462, 218, 178], "area": 31484}, {"id": 7776445, "category_id": 81, "iscrowd": 0, "bbox": [47, 26, 258, 277], "area": 45264}, {"id": 6590629, "category_id": 81, "iscrowd": 0, "bbox": [39, 116, 441, 287], "area": 52811}, {"id": 3361619, "category_id": 176, "iscrowd": 0, "bbox": [267, 0, 213, 640], "area": 65186}, {"id": 2637643, "category_id": 190, "iscrowd": 0, "bbox": [0, 174, 330, 466], "area": 49792}, {"id": 6848124, "category_id": 195, "iscrowd": 0, "bbox": [71, 0, 94, 76], "area": 4139}], "file_name": "000000035770.png", "image_id": 35770}, {"segments_info": [{"id": 12566731, "category_id": 88, "iscrowd": 0, "bbox": [276, 184, 120, 137], "area": 8356}, {"id": 11646143, "category_id": 88, "iscrowd": 0, "bbox": [167, 148, 174, 190], "area": 15407}, {"id": 5596004, "category_id": 128, "iscrowd": 0, "bbox": [0, 15, 323, 150], "area": 10354}, {"id": 2768224, "category_id": 171, "iscrowd": 0, "bbox": [28, 360, 452, 280], "area": 19776}, {"id": 1649443, "category_id": 184, "iscrowd": 0, "bbox": [33, 0, 447, 271], "area": 45183}, {"id": 7571872, "category_id": 191, "iscrowd": 0, "bbox": [0, 120, 242, 107], "area": 9000}, {"id": 3230546, "category_id": 193, "iscrowd": 0, "bbox": [0, 123, 480, 517], "area": 122684}, {"id": 9808569, "category_id": 199, "iscrowd": 0, "bbox": [142, 102, 94, 22], "area": 1834}], "file_name": "000000035963.png", "image_id": 35963}, {"segments_info": [{"id": 4217195, "category_id": 1, "iscrowd": 0, "bbox": [179, 266, 39, 122], "area": 2483}, {"id": 4083807, "category_id": 1, "iscrowd": 0, "bbox": [508, 299, 40, 61], "area": 1467}, {"id": 1646644, "category_id": 1, "iscrowd": 0, "bbox": [404, 325, 54, 98], "area": 2317}, {"id": 4544623, "category_id": 1, "iscrowd": 0, "bbox": [606, 277, 21, 34], "area": 489}, {"id": 2108990, "category_id": 1, "iscrowd": 0, "bbox": [571, 283, 41, 47], "area": 1178}, {"id": 3686730, "category_id": 1, "iscrowd": 0, "bbox": [246, 255, 42, 93], "area": 2224}, {"id": 7306898, "category_id": 1, "iscrowd": 0, "bbox": [107, 220, 36, 60], "area": 1373}, {"id": 462613, "category_id": 1, "iscrowd": 0, "bbox": [225, 274, 41, 117], "area": 3169}, {"id": 1254446, "category_id": 1, "iscrowd": 0, "bbox": [333, 350, 63, 73], "area": 2426}, {"id": 1515562, "category_id": 1, "iscrowd": 0, "bbox": [529, 284, 31, 35], "area": 727}, {"id": 2445677, "category_id": 1, "iscrowd": 0, "bbox": [401, 254, 24, 34], "area": 441}, {"id": 1913415, "category_id": 1, "iscrowd": 0, "bbox": [374, 292, 46, 65], "area": 1765}, {"id": 1781312, "category_id": 1, "iscrowd": 0, "bbox": [315, 306, 66, 63], "area": 2088}, {"id": 3886691, "category_id": 1, "iscrowd": 1, "bbox": [85, 220, 527, 165], "area": 14373}, {"id": 3694956, "category_id": 44, "iscrowd": 0, "bbox": [290, 287, 5, 14], "area": 41}, {"id": 12828903, "category_id": 44, "iscrowd": 0, "bbox": [287, 265, 4, 6], "area": 15}, {"id": 4479602, "category_id": 44, "iscrowd": 0, "bbox": [199, 200, 4, 9], "area": 21}, {"id": 3163431, "category_id": 44, "iscrowd": 0, "bbox": [388, 345, 7, 23], "area": 118}, {"id": 12634328, "category_id": 47, "iscrowd": 0, "bbox": [287, 271, 5, 2], "area": 10}, {"id": 3363431, "category_id": 51, "iscrowd": 0, "bbox": [118, 280, 25, 18], "area": 372}, {"id": 1783618, "category_id": 51, "iscrowd": 0, "bbox": [307, 369, 24, 13], "area": 247}, {"id": 1581087, "category_id": 62, "iscrowd": 0, "bbox": [416, 377, 47, 47], "area": 1439}, {"id": 334366, "category_id": 62, "iscrowd": 0, "bbox": [261, 344, 25, 70], "area": 1002}, {"id": 923158, "category_id": 62, "iscrowd": 0, "bbox": [365, 387, 50, 36], "area": 1146}, {"id": 729127, "category_id": 62, "iscrowd": 0, "bbox": [35, 362, 70, 62], "area": 2160}, {"id": 3231310, "category_id": 62, "iscrowd": 0, "bbox": [378, 255, 18, 30], "area": 279}, {"id": 335912, "category_id": 62, "iscrowd": 0, "bbox": [208, 373, 57, 52], "area": 1826}, {"id": 2115150, "category_id": 62, "iscrowd": 0, "bbox": [392, 275, 18, 13], "area": 142}, {"id": 203037, "category_id": 62, "iscrowd": 0, "bbox": [272, 389, 53, 35], "area": 995}, {"id": 3552053, "category_id": 62, "iscrowd": 0, "bbox": [533, 326, 29, 43], "area": 664}, {"id": 6586231, "category_id": 62, "iscrowd": 0, "bbox": [360, 273, 20, 15], "area": 191}, {"id": 3229761, "category_id": 62, "iscrowd": 0, "bbox": [488, 352, 35, 69], "area": 1532}, {"id": 7242617, "category_id": 62, "iscrowd": 0, "bbox": [616, 305, 13, 23], "area": 181}, {"id": 4740693, "category_id": 62, "iscrowd": 0, "bbox": [570, 321, 43, 57], "area": 1005}, {"id": 3691608, "category_id": 62, "iscrowd": 1, "bbox": [149, 252, 378, 74], "area": 4976}, {"id": 7710392, "category_id": 67, "iscrowd": 0, "bbox": [278, 272, 24, 8], "area": 110}, {"id": 7310486, "category_id": 67, "iscrowd": 0, "bbox": [359, 281, 53, 18], "area": 432}, {"id": 12566720, "category_id": 67, "iscrowd": 0, "bbox": [469, 283, 37, 13], "area": 255}, {"id": 11186881, "category_id": 67, "iscrowd": 0, "bbox": [200, 252, 9, 9], "area": 43}, {"id": 6385528, "category_id": 67, "iscrowd": 0, "bbox": [367, 254, 22, 5], "area": 41}, {"id": 1782076, "category_id": 67, "iscrowd": 0, "bbox": [288, 356, 122, 61], "area": 1835}, {"id": 1000030, "category_id": 67, "iscrowd": 0, "bbox": [69, 339, 41, 31], "area": 662}, {"id": 5407122, "category_id": 67, "iscrowd": 0, "bbox": [306, 316, 34, 36], "area": 508}, {"id": 5144992, "category_id": 67, "iscrowd": 0, "bbox": [287, 297, 15, 15], "area": 90}, {"id": 1129300, "category_id": 67, "iscrowd": 0, "bbox": [86, 363, 28, 27], "area": 385}, {"id": 5926784, "category_id": 67, "iscrowd": 0, "bbox": [534, 317, 63, 23], "area": 463}, {"id": 8359832, "category_id": 67, "iscrowd": 0, "bbox": [462, 260, 35, 16], "area": 383}, {"id": 4149339, "category_id": 67, "iscrowd": 0, "bbox": [408, 342, 60, 19], "area": 417}, {"id": 5270396, "category_id": 67, "iscrowd": 1, "bbox": [180, 252, 439, 175], "area": 1800}, {"id": 9015961, "category_id": 82, "iscrowd": 0, "bbox": [159, 200, 25, 37], "area": 825}, {"id": 9935005, "category_id": 85, "iscrowd": 0, "bbox": [389, 39, 179, 212], "area": 28281}, {"id": 2574709, "category_id": 86, "iscrowd": 0, "bbox": [350, 212, 8, 21], "area": 147}, {"id": 3101547, "category_id": 107, "iscrowd": 0, "bbox": [0, 220, 306, 108], "area": 6099}, {"id": 2707558, "category_id": 118, "iscrowd": 0, "bbox": [132, 293, 508, 141], "area": 6356}, {"id": 4949150, "category_id": 130, "iscrowd": 0, "bbox": [96, 328, 115, 96], "area": 7821}, {"id": 2177618, "category_id": 156, "iscrowd": 0, "bbox": [0, 186, 277, 90], "area": 6179}, {"id": 70436, "category_id": 177, "iscrowd": 0, "bbox": [0, 375, 53, 59], "area": 1585}, {"id": 2644100, "category_id": 181, "iscrowd": 0, "bbox": [46, 88, 192, 49], "area": 4646}, {"id": 1913404, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 119], "area": 52416}, {"id": 2515614, "category_id": 188, "iscrowd": 0, "bbox": [109, 191, 62, 51], "area": 1539}, {"id": 1061201, "category_id": 189, "iscrowd": 0, "bbox": [30, 271, 128, 123], "area": 4989}, {"id": 2774123, "category_id": 196, "iscrowd": 0, "bbox": [64, 288, 41, 26], "area": 772}, {"id": 3631748, "category_id": 199, "iscrowd": 0, "bbox": [0, 49, 640, 251], "area": 58174}], "file_name": "000000036494.png", "image_id": 36494}, {"segments_info": [{"id": 5719904, "category_id": 1, "iscrowd": 0, "bbox": [75, 359, 44, 100], "area": 2501}, {"id": 4077365, "category_id": 1, "iscrowd": 0, "bbox": [168, 293, 96, 236], "area": 16584}, {"id": 7959923, "category_id": 36, "iscrowd": 0, "bbox": [136, 515, 169, 28], "area": 1491}, {"id": 11118502, "category_id": 159, "iscrowd": 0, "bbox": [0, 29, 427, 611], "area": 209779}, {"id": 4407614, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 141], "area": 41218}, {"id": 9930872, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 168, 21], "area": 533}, {"id": 7499628, "category_id": 198, "iscrowd": 0, "bbox": [131, 251, 43, 42], "area": 859}], "file_name": "000000036539.png", "image_id": 36539}, {"segments_info": [{"id": 3950681, "category_id": 1, "iscrowd": 0, "bbox": [2, 178, 498, 140], "area": 29832}, {"id": 4017217, "category_id": 77, "iscrowd": 0, "bbox": [185, 132, 88, 97], "area": 4496}, {"id": 5133906, "category_id": 77, "iscrowd": 0, "bbox": [414, 73, 71, 100], "area": 4869}, {"id": 1843484, "category_id": 77, "iscrowd": 0, "bbox": [269, 98, 95, 105], "area": 5067}, {"id": 1646102, "category_id": 77, "iscrowd": 0, "bbox": [132, 101, 51, 68], "area": 3100}, {"id": 1913692, "category_id": 118, "iscrowd": 0, "bbox": [0, 0, 500, 323], "area": 112442}], "file_name": "000000036660.png", "image_id": 36660}, {"segments_info": [{"id": 6315078, "category_id": 9, "iscrowd": 0, "bbox": [587, 246, 41, 13], "area": 369}, {"id": 4079412, "category_id": 9, "iscrowd": 0, "bbox": [504, 239, 74, 28], "area": 1700}, {"id": 2895915, "category_id": 9, "iscrowd": 0, "bbox": [417, 238, 105, 30], "area": 1910}, {"id": 2499875, "category_id": 9, "iscrowd": 0, "bbox": [0, 234, 268, 61], "area": 11948}, {"id": 8238782, "category_id": 85, "iscrowd": 0, "bbox": [444, 172, 7, 9], "area": 49}, {"id": 8042953, "category_id": 85, "iscrowd": 0, "bbox": [455, 173, 6, 8], "area": 40}, {"id": 6447441, "category_id": 148, "iscrowd": 0, "bbox": [0, 236, 640, 125], "area": 60377}, {"id": 2105626, "category_id": 184, "iscrowd": 0, "bbox": [0, 180, 151, 72], "area": 7506}, {"id": 14209448, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 208], "area": 111396}, {"id": 5463132, "category_id": 197, "iscrowd": 0, "bbox": [117, 59, 523, 202], "area": 35419}], "file_name": "000000036678.png", "image_id": 36678}, {"segments_info": [{"id": 1119252, "category_id": 2, "iscrowd": 0, "bbox": [119, 244, 117, 160], "area": 7998}, {"id": 3423809, "category_id": 47, "iscrowd": 0, "bbox": [556, 273, 12, 18], "area": 175}, {"id": 724243, "category_id": 62, "iscrowd": 0, "bbox": [5, 252, 122, 158], "area": 13686}, {"id": 1118995, "category_id": 63, "iscrowd": 0, "bbox": [412, 281, 195, 125], "area": 9364}, {"id": 2371631, "category_id": 63, "iscrowd": 0, "bbox": [159, 253, 176, 129], "area": 9100}, {"id": 3429190, "category_id": 64, "iscrowd": 0, "bbox": [155, 206, 41, 44], "area": 931}, {"id": 7047305, "category_id": 64, "iscrowd": 0, "bbox": [215, 168, 79, 56], "area": 2267}, {"id": 2306349, "category_id": 64, "iscrowd": 0, "bbox": [55, 223, 54, 46], "area": 1254}, {"id": 5926253, "category_id": 64, "iscrowd": 0, "bbox": [240, 205, 22, 34], "area": 507}, {"id": 9344660, "category_id": 64, "iscrowd": 0, "bbox": [203, 214, 33, 30], "area": 400}, {"id": 1185301, "category_id": 72, "iscrowd": 0, "bbox": [373, 220, 51, 37], "area": 1684}, {"id": 1909024, "category_id": 72, "iscrowd": 0, "bbox": [437, 395, 142, 84], "area": 9336}, {"id": 4212292, "category_id": 75, "iscrowd": 0, "bbox": [412, 342, 24, 13], "area": 132}, {"id": 8027771, "category_id": 82, "iscrowd": 0, "bbox": [514, 344, 126, 94], "area": 8654}, {"id": 3619639, "category_id": 107, "iscrowd": 0, "bbox": [267, 214, 78, 95], "area": 4888}, {"id": 1515048, "category_id": 118, "iscrowd": 0, "bbox": [0, 303, 449, 177], "area": 43215}, {"id": 6121831, "category_id": 133, "iscrowd": 0, "bbox": [470, 210, 95, 92], "area": 4807}, {"id": 1515294, "category_id": 156, "iscrowd": 0, "bbox": [80, 248, 45, 56], "area": 1066}, {"id": 14082530, "category_id": 181, "iscrowd": 0, "bbox": [118, 65, 466, 173], "area": 21816}, {"id": 6384747, "category_id": 184, "iscrowd": 0, "bbox": [256, 204, 32, 33], "area": 537}, {"id": 5464162, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 75], "area": 33055}, {"id": 922130, "category_id": 188, "iscrowd": 0, "bbox": [99, 253, 66, 72], "area": 997}, {"id": 3028537, "category_id": 189, "iscrowd": 0, "bbox": [332, 245, 261, 185], "area": 12957}, {"id": 7635336, "category_id": 195, "iscrowd": 0, "bbox": [554, 289, 60, 69], "area": 2669}, {"id": 5201759, "category_id": 199, "iscrowd": 0, "bbox": [0, 22, 640, 263], "area": 93328}, {"id": 2369905, "category_id": 200, "iscrowd": 0, "bbox": [322, 291, 121, 58], "area": 4614}], "file_name": "000000036844.png", "image_id": 36844}, {"segments_info": [{"id": 3554617, "category_id": 14, "iscrowd": 0, "bbox": [93, 35, 77, 199], "area": 10379}, {"id": 3489080, "category_id": 14, "iscrowd": 0, "bbox": [168, 38, 73, 198], "area": 10419}, {"id": 11317423, "category_id": 149, "iscrowd": 0, "bbox": [0, 312, 480, 229], "area": 70262}, {"id": 5195065, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 480, 272], "area": 79998}, {"id": 11449011, "category_id": 191, "iscrowd": 0, "bbox": [0, 305, 480, 335], "area": 59416}, {"id": 2961452, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 339], "area": 50704}], "file_name": "000000036861.png", "image_id": 36861}, {"segments_info": [{"id": 1253429, "category_id": 1, "iscrowd": 0, "bbox": [331, 90, 151, 165], "area": 9453}, {"id": 1450803, "category_id": 1, "iscrowd": 0, "bbox": [343, 40, 240, 297], "area": 36959}, {"id": 4416387, "category_id": 47, "iscrowd": 0, "bbox": [299, 278, 26, 45], "area": 898}, {"id": 3891317, "category_id": 47, "iscrowd": 0, "bbox": [325, 297, 32, 36], "area": 925}, {"id": 1734711, "category_id": 47, "iscrowd": 0, "bbox": [86, 309, 17, 21], "area": 295}, {"id": 1133634, "category_id": 47, "iscrowd": 0, "bbox": [56, 306, 16, 19], "area": 218}, {"id": 3044672, "category_id": 47, "iscrowd": 0, "bbox": [129, 309, 17, 20], "area": 274}, {"id": 1798704, "category_id": 47, "iscrowd": 0, "bbox": [101, 304, 14, 19], "area": 221}, {"id": 2915893, "category_id": 47, "iscrowd": 0, "bbox": [115, 305, 15, 22], "area": 259}, {"id": 4946517, "category_id": 47, "iscrowd": 0, "bbox": [139, 302, 15, 20], "area": 210}, {"id": 7240866, "category_id": 47, "iscrowd": 0, "bbox": [152, 291, 26, 42], "area": 772}, {"id": 1659975, "category_id": 47, "iscrowd": 0, "bbox": [70, 300, 16, 19], "area": 221}, {"id": 6522834, "category_id": 51, "iscrowd": 0, "bbox": [277, 321, 43, 34], "area": 1173}, {"id": 2244696, "category_id": 63, "iscrowd": 0, "bbox": [239, 124, 401, 275], "area": 35174}, {"id": 1520525, "category_id": 64, "iscrowd": 0, "bbox": [158, 185, 133, 165], "area": 12625}, {"id": 7828080, "category_id": 72, "iscrowd": 0, "bbox": [71, 87, 117, 92], "area": 9421}, {"id": 3958396, "category_id": 75, "iscrowd": 0, "bbox": [593, 262, 19, 17], "area": 221}, {"id": 4547975, "category_id": 75, "iscrowd": 0, "bbox": [363, 193, 41, 28], "area": 431}, {"id": 989732, "category_id": 77, "iscrowd": 0, "bbox": [251, 375, 36, 29], "area": 848}, {"id": 3956891, "category_id": 84, "iscrowd": 0, "bbox": [287, 182, 44, 18], "area": 489}, {"id": 5211553, "category_id": 84, "iscrowd": 0, "bbox": [28, 13, 39, 6], "area": 124}, {"id": 5540775, "category_id": 84, "iscrowd": 0, "bbox": [36, 12, 36, 5], "area": 89}, {"id": 2704243, "category_id": 118, "iscrowd": 0, "bbox": [0, 297, 563, 107], "area": 10698}, {"id": 2899527, "category_id": 141, "iscrowd": 0, "bbox": [290, 183, 80, 68], "area": 1401}, {"id": 1452621, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 252, 320], "area": 53409}, {"id": 1655934, "category_id": 189, "iscrowd": 0, "bbox": [77, 304, 365, 100], "area": 13489}, {"id": 6194086, "category_id": 199, "iscrowd": 0, "bbox": [216, 0, 424, 193], "area": 51075}], "file_name": "000000036936.png", "image_id": 36936}, {"segments_info": [{"id": 2703740, "category_id": 1, "iscrowd": 0, "bbox": [437, 24, 203, 162], "area": 13761}, {"id": 7967399, "category_id": 70, "iscrowd": 0, "bbox": [1, 28, 331, 447], "area": 112883}, {"id": 6654635, "category_id": 75, "iscrowd": 0, "bbox": [235, 86, 335, 185], "area": 16405}, {"id": 2239029, "category_id": 118, "iscrowd": 0, "bbox": [298, 333, 283, 147], "area": 19720}, {"id": 6979997, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 122595}], "file_name": "000000037670.png", "image_id": 37670}, {"segments_info": [{"id": 1256795, "category_id": 1, "iscrowd": 0, "bbox": [171, 205, 8, 19], "area": 115}, {"id": 986133, "category_id": 1, "iscrowd": 0, "bbox": [92, 147, 16, 34], "area": 335}, {"id": 1451850, "category_id": 1, "iscrowd": 0, "bbox": [293, 272, 9, 21], "area": 129}, {"id": 2169623, "category_id": 1, "iscrowd": 0, "bbox": [40, 141, 20, 25], "area": 324}, {"id": 5264752, "category_id": 1, "iscrowd": 0, "bbox": [189, 211, 7, 23], "area": 87}, {"id": 794193, "category_id": 1, "iscrowd": 0, "bbox": [316, 282, 5, 20], "area": 55}, {"id": 3162730, "category_id": 1, "iscrowd": 0, "bbox": [306, 274, 7, 25], "area": 91}, {"id": 2630497, "category_id": 1, "iscrowd": 0, "bbox": [216, 64, 56, 42], "area": 1288}, {"id": 1978217, "category_id": 1, "iscrowd": 0, "bbox": [201, 220, 11, 25], "area": 197}, {"id": 2570841, "category_id": 1, "iscrowd": 0, "bbox": [277, 262, 8, 22], "area": 91}, {"id": 3489123, "category_id": 1, "iscrowd": 0, "bbox": [285, 264, 11, 27], "area": 149}, {"id": 2300692, "category_id": 1, "iscrowd": 0, "bbox": [64, 131, 14, 37], "area": 405}, {"id": 2498603, "category_id": 1, "iscrowd": 0, "bbox": [331, 138, 36, 33], "area": 732}, {"id": 9139296, "category_id": 1, "iscrowd": 1, "bbox": [0, 5, 582, 297], "area": 31999}, {"id": 7238272, "category_id": 36, "iscrowd": 0, "bbox": [201, 65, 29, 40], "area": 548}, {"id": 6447462, "category_id": 36, "iscrowd": 0, "bbox": [319, 124, 30, 63], "area": 508}, {"id": 13552326, "category_id": 159, "iscrowd": 0, "bbox": [0, 135, 640, 291], "area": 141151}, {"id": 7488021, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 205], "area": 93495}, {"id": 4010275, "category_id": 198, "iscrowd": 0, "bbox": [454, 171, 171, 18], "area": 648}], "file_name": "000000037689.png", "image_id": 37689}, {"segments_info": [{"id": 1849446, "category_id": 62, "iscrowd": 0, "bbox": [615, 155, 25, 101], "area": 1118}, {"id": 1254186, "category_id": 62, "iscrowd": 0, "bbox": [210, 235, 176, 214], "area": 15613}, {"id": 11390944, "category_id": 63, "iscrowd": 0, "bbox": [1, 331, 139, 144], "area": 14959}, {"id": 1782063, "category_id": 64, "iscrowd": 0, "bbox": [448, 185, 180, 187], "area": 20555}, {"id": 1718856, "category_id": 72, "iscrowd": 0, "bbox": [289, 150, 90, 79], "area": 6127}, {"id": 3294798, "category_id": 73, "iscrowd": 0, "bbox": [373, 187, 81, 66], "area": 2679}, {"id": 8299457, "category_id": 74, "iscrowd": 0, "bbox": [360, 250, 18, 13], "area": 167}, {"id": 6325404, "category_id": 76, "iscrowd": 0, "bbox": [389, 229, 51, 16], "area": 350}, {"id": 7973318, "category_id": 76, "iscrowd": 0, "bbox": [272, 222, 96, 28], "area": 1702}, {"id": 527124, "category_id": 84, "iscrowd": 0, "bbox": [630, 119, 10, 24], "area": 116}, {"id": 593472, "category_id": 84, "iscrowd": 0, "bbox": [626, 117, 10, 27], "area": 144}, {"id": 328779, "category_id": 84, "iscrowd": 0, "bbox": [612, 115, 8, 27], "area": 127}, {"id": 1385288, "category_id": 84, "iscrowd": 0, "bbox": [603, 193, 14, 18], "area": 81}, {"id": 725793, "category_id": 84, "iscrowd": 0, "bbox": [612, 79, 14, 27], "area": 263}, {"id": 2572137, "category_id": 84, "iscrowd": 0, "bbox": [622, 81, 15, 28], "area": 297}, {"id": 1648189, "category_id": 84, "iscrowd": 0, "bbox": [636, 47, 4, 21], "area": 58}, {"id": 992092, "category_id": 84, "iscrowd": 0, "bbox": [627, 41, 8, 28], "area": 156}, {"id": 593441, "category_id": 84, "iscrowd": 0, "bbox": [619, 116, 10, 27], "area": 231}, {"id": 988188, "category_id": 84, "iscrowd": 0, "bbox": [622, 42, 7, 27], "area": 127}, {"id": 596792, "category_id": 84, "iscrowd": 0, "bbox": [614, 159, 7, 20], "area": 51}, {"id": 468296, "category_id": 84, "iscrowd": 0, "bbox": [616, 42, 8, 27], "area": 171}, {"id": 1845564, "category_id": 84, "iscrowd": 0, "bbox": [635, 86, 4, 22], "area": 64}, {"id": 1846085, "category_id": 84, "iscrowd": 1, "bbox": [373, 115, 267, 141], "area": 1863}, {"id": 5403260, "category_id": 130, "iscrowd": 0, "bbox": [217, 116, 77, 113], "area": 4246}, {"id": 1717070, "category_id": 156, "iscrowd": 0, "bbox": [586, 31, 54, 199], "area": 3198}, {"id": 529940, "category_id": 184, "iscrowd": 0, "bbox": [546, 334, 18, 27], "area": 277}, {"id": 3160894, "category_id": 185, "iscrowd": 0, "bbox": [52, 304, 20, 25], "area": 363}, {"id": 6328996, "category_id": 189, "iscrowd": 0, "bbox": [127, 192, 328, 173], "area": 14899}, {"id": 8038080, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 378], "area": 143513}, {"id": 3888491, "category_id": 200, "iscrowd": 0, "bbox": [69, 217, 571, 263], "area": 68761}], "file_name": "000000037740.png", "image_id": 37740}, {"segments_info": [{"id": 3879987, "category_id": 1, "iscrowd": 0, "bbox": [279, 198, 57, 102], "area": 1410}, {"id": 2960181, "category_id": 4, "iscrowd": 0, "bbox": [291, 242, 35, 72], "area": 1207}, {"id": 3158066, "category_id": 4, "iscrowd": 0, "bbox": [365, 371, 175, 109], "area": 6567}, {"id": 2761766, "category_id": 27, "iscrowd": 0, "bbox": [300, 215, 27, 33], "area": 738}, {"id": 1979192, "category_id": 184, "iscrowd": 0, "bbox": [0, 232, 75, 94], "area": 4880}, {"id": 15127746, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 217], "area": 112312}, {"id": 3490113, "category_id": 192, "iscrowd": 0, "bbox": [0, 141, 640, 274], "area": 65583}, {"id": 4871259, "category_id": 194, "iscrowd": 0, "bbox": [0, 195, 640, 285], "area": 109209}], "file_name": "000000037751.png", "image_id": 37751}, {"segments_info": [{"id": 6202563, "category_id": 52, "iscrowd": 0, "bbox": [221, 179, 37, 27], "area": 353}, {"id": 2793704, "category_id": 55, "iscrowd": 0, "bbox": [231, 178, 11, 11], "area": 99}, {"id": 1872866, "category_id": 55, "iscrowd": 0, "bbox": [216, 185, 17, 16], "area": 223}, {"id": 1811173, "category_id": 55, "iscrowd": 0, "bbox": [218, 201, 14, 13], "area": 155}, {"id": 1415646, "category_id": 55, "iscrowd": 0, "bbox": [232, 201, 16, 16], "area": 205}, {"id": 1545703, "category_id": 55, "iscrowd": 0, "bbox": [205, 187, 15, 21], "area": 227}, {"id": 13160659, "category_id": 62, "iscrowd": 0, "bbox": [28, 215, 60, 15], "area": 553}, {"id": 9937583, "category_id": 62, "iscrowd": 0, "bbox": [117, 190, 50, 25], "area": 393}, {"id": 9214632, "category_id": 62, "iscrowd": 0, "bbox": [243, 180, 50, 46], "area": 605}, {"id": 6324097, "category_id": 64, "iscrowd": 0, "bbox": [103, 119, 7, 17], "area": 85}, {"id": 3886471, "category_id": 67, "iscrowd": 0, "bbox": [86, 178, 201, 49], "area": 4815}, {"id": 12172223, "category_id": 79, "iscrowd": 0, "bbox": [137, 124, 61, 71], "area": 3592}, {"id": 9805731, "category_id": 81, "iscrowd": 0, "bbox": [268, 134, 26, 4], "area": 58}, {"id": 13552068, "category_id": 82, "iscrowd": 0, "bbox": [302, 75, 49, 151], "area": 6991}, {"id": 7182527, "category_id": 100, "iscrowd": 0, "bbox": [337, 54, 15, 22], "area": 258}, {"id": 13159886, "category_id": 112, "iscrowd": 0, "bbox": [42, 81, 50, 91], "area": 3414}, {"id": 14082533, "category_id": 130, "iscrowd": 0, "bbox": [71, 0, 136, 112], "area": 588}, {"id": 5661298, "category_id": 176, "iscrowd": 0, "bbox": [185, 114, 14, 21], "area": 172}, {"id": 11646652, "category_id": 181, "iscrowd": 0, "bbox": [241, 82, 63, 47], "area": 2304}, {"id": 12369342, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 352, 79], "area": 19551}, {"id": 2908831, "category_id": 188, "iscrowd": 0, "bbox": [97, 61, 246, 120], "area": 9041}, {"id": 4281750, "category_id": 189, "iscrowd": 0, "bbox": [79, 226, 212, 4], "area": 632}, {"id": 10333111, "category_id": 190, "iscrowd": 0, "bbox": [0, 161, 312, 69], "area": 8012}, {"id": 10596797, "category_id": 199, "iscrowd": 0, "bbox": [0, 35, 352, 155], "area": 16843}], "file_name": "000000037777.png", "image_id": 37777}, {"segments_info": [{"id": 2038297, "category_id": 1, "iscrowd": 0, "bbox": [145, 2, 90, 113], "area": 4882}, {"id": 6711922, "category_id": 1, "iscrowd": 0, "bbox": [306, 143, 100, 309], "area": 11313}, {"id": 4867395, "category_id": 1, "iscrowd": 0, "bbox": [375, 3, 58, 44], "area": 1579}, {"id": 6339228, "category_id": 37, "iscrowd": 0, "bbox": [350, 61, 11, 11], "area": 104}, {"id": 6847355, "category_id": 43, "iscrowd": 0, "bbox": [282, 252, 35, 87], "area": 1314}, {"id": 6915695, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 258960}, {"id": 2693132, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 483, 130], "area": 28088}], "file_name": "000000037988.png", "image_id": 37988}, {"segments_info": [{"id": 4863792, "category_id": 1, "iscrowd": 0, "bbox": [247, 180, 35, 59], "area": 1178}, {"id": 6115663, "category_id": 3, "iscrowd": 0, "bbox": [79, 202, 12, 9], "area": 77}, {"id": 5592254, "category_id": 11, "iscrowd": 0, "bbox": [90, 194, 79, 129], "area": 6538}, {"id": 328964, "category_id": 31, "iscrowd": 0, "bbox": [276, 207, 9, 18], "area": 68}, {"id": 11580852, "category_id": 128, "iscrowd": 0, "bbox": [0, 132, 63, 65], "area": 2610}, {"id": 6247756, "category_id": 149, "iscrowd": 0, "bbox": [0, 201, 100, 33], "area": 1702}, {"id": 3488044, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 299, 230], "area": 42136}, {"id": 7241854, "category_id": 185, "iscrowd": 0, "bbox": [12, 191, 39, 18], "area": 498}, {"id": 15984325, "category_id": 187, "iscrowd": 0, "bbox": [0, 94, 105, 81], "area": 2381}, {"id": 6256497, "category_id": 190, "iscrowd": 0, "bbox": [0, 192, 100, 17], "area": 323}, {"id": 13883874, "category_id": 191, "iscrowd": 0, "bbox": [0, 228, 299, 272], "area": 67559}, {"id": 3760210, "category_id": 193, "iscrowd": 0, "bbox": [0, 215, 299, 85], "area": 8169}, {"id": 4340270, "category_id": 197, "iscrowd": 0, "bbox": [275, 24, 24, 44], "area": 618}, {"id": 1843229, "category_id": 199, "iscrowd": 0, "bbox": [178, 74, 121, 168], "area": 11101}], "file_name": "000000038048.png", "image_id": 38048}, {"segments_info": [{"id": 8290951, "category_id": 70, "iscrowd": 0, "bbox": [165, 37, 196, 318], "area": 44533}, {"id": 6382949, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 106092}, {"id": 2041138, "category_id": 200, "iscrowd": 0, "bbox": [152, 172, 213, 203], "area": 14998}], "file_name": "000000038070.png", "image_id": 38070}, {"segments_info": [{"id": 5194111, "category_id": 1, "iscrowd": 0, "bbox": [126, 219, 87, 127], "area": 4858}, {"id": 11514289, "category_id": 35, "iscrowd": 0, "bbox": [143, 355, 27, 18], "area": 300}, {"id": 13223622, "category_id": 159, "iscrowd": 0, "bbox": [0, 73, 640, 354], "area": 170759}, {"id": 9593659, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 239], "area": 97260}], "file_name": "000000038118.png", "image_id": 38118}, {"segments_info": [{"id": 4669771, "category_id": 1, "iscrowd": 0, "bbox": [70, 267, 138, 272], "area": 16368}, {"id": 6577501, "category_id": 1, "iscrowd": 0, "bbox": [24, 332, 20, 44], "area": 444}, {"id": 11117239, "category_id": 35, "iscrowd": 0, "bbox": [118, 538, 200, 20], "area": 680}, {"id": 14078415, "category_id": 159, "iscrowd": 0, "bbox": [0, 299, 428, 341], "area": 123598}, {"id": 6250074, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 428, 327], "area": 129352}, {"id": 15329252, "category_id": 187, "iscrowd": 0, "bbox": [144, 0, 130, 52], "area": 3118}], "file_name": "000000038210.png", "image_id": 38210}, {"segments_info": [{"id": 9934743, "category_id": 72, "iscrowd": 0, "bbox": [73, 38, 211, 253], "area": 49953}, {"id": 1710618, "category_id": 74, "iscrowd": 0, "bbox": [294, 362, 53, 26], "area": 1049}, {"id": 4079166, "category_id": 74, "iscrowd": 0, "bbox": [216, 511, 115, 101], "area": 7197}, {"id": 3881787, "category_id": 76, "iscrowd": 0, "bbox": [42, 378, 386, 137], "area": 43025}, {"id": 10000536, "category_id": 189, "iscrowd": 0, "bbox": [0, 270, 438, 370], "area": 93283}, {"id": 13882323, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 438, 629], "area": 85271}], "file_name": "000000038576.png", "image_id": 38576}, {"segments_info": [{"id": 3290237, "category_id": 1, "iscrowd": 0, "bbox": [74, 85, 91, 233], "area": 13407}, {"id": 2307431, "category_id": 1, "iscrowd": 0, "bbox": [54, 185, 23, 71], "area": 656}, {"id": 2633038, "category_id": 1, "iscrowd": 0, "bbox": [140, 93, 44, 161], "area": 2847}, {"id": 5853304, "category_id": 1, "iscrowd": 0, "bbox": [0, 111, 398, 491], "area": 101549}, {"id": 14538719, "category_id": 47, "iscrowd": 0, "bbox": [148, 550, 120, 90], "area": 9046}, {"id": 8368361, "category_id": 54, "iscrowd": 0, "bbox": [20, 339, 120, 97], "area": 8739}, {"id": 6123171, "category_id": 100, "iscrowd": 0, "bbox": [234, 505, 246, 135], "area": 11539}, {"id": 9937622, "category_id": 130, "iscrowd": 0, "bbox": [138, 0, 67, 87], "area": 1012}, {"id": 11447725, "category_id": 181, "iscrowd": 0, "bbox": [214, 0, 266, 624], "area": 74347}, {"id": 3686767, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 202, 165], "area": 19362}, {"id": 11773128, "category_id": 189, "iscrowd": 0, "bbox": [0, 580, 158, 60], "area": 7425}, {"id": 4869998, "category_id": 190, "iscrowd": 0, "bbox": [0, 369, 92, 237], "area": 9355}, {"id": 8815272, "category_id": 195, "iscrowd": 0, "bbox": [265, 0, 60, 135], "area": 4114}, {"id": 5133694, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 337, 341], "area": 27058}], "file_name": "000000038678.png", "image_id": 38678}, {"segments_info": [{"id": 7237996, "category_id": 24, "iscrowd": 0, "bbox": [335, 1, 305, 392], "area": 75621}, {"id": 5791584, "category_id": 24, "iscrowd": 0, "bbox": [112, 1, 356, 378], "area": 68396}, {"id": 7123089, "category_id": 193, "iscrowd": 0, "bbox": [0, 73, 640, 354], "area": 98944}, {"id": 10662325, "category_id": 194, "iscrowd": 0, "bbox": [0, 30, 163, 192], "area": 17152}], "file_name": "000000038825.png", "image_id": 38825}, {"segments_info": [{"id": 925459, "category_id": 1, "iscrowd": 0, "bbox": [392, 61, 27, 72], "area": 861}, {"id": 5857116, "category_id": 1, "iscrowd": 0, "bbox": [215, 83, 133, 309], "area": 16771}, {"id": 6182707, "category_id": 1, "iscrowd": 0, "bbox": [414, 128, 38, 100], "area": 1766}, {"id": 3360578, "category_id": 1, "iscrowd": 0, "bbox": [440, 128, 101, 196], "area": 8676}, {"id": 3555646, "category_id": 1, "iscrowd": 0, "bbox": [585, 138, 55, 118], "area": 3119}, {"id": 5001038, "category_id": 1, "iscrowd": 0, "bbox": [313, 101, 94, 256], "area": 11890}, {"id": 3231556, "category_id": 2, "iscrowd": 0, "bbox": [100, 209, 183, 203], "area": 15069}, {"id": 2307627, "category_id": 2, "iscrowd": 0, "bbox": [293, 262, 134, 146], "area": 8602}, {"id": 2305317, "category_id": 4, "iscrowd": 0, "bbox": [397, 194, 238, 168], "area": 18828}, {"id": 2504243, "category_id": 4, "iscrowd": 0, "bbox": [2, 237, 108, 148], "area": 12334}, {"id": 2695960, "category_id": 4, "iscrowd": 0, "bbox": [533, 155, 107, 86], "area": 3101}, {"id": 989207, "category_id": 27, "iscrowd": 0, "bbox": [166, 199, 50, 44], "area": 1668}, {"id": 3296063, "category_id": 149, "iscrowd": 0, "bbox": [0, 221, 640, 206], "area": 40062}, {"id": 4415066, "category_id": 161, "iscrowd": 0, "bbox": [385, 131, 107, 117], "area": 4919}, {"id": 2580294, "category_id": 184, "iscrowd": 0, "bbox": [512, 44, 86, 157], "area": 7555}, {"id": 3888975, "category_id": 191, "iscrowd": 0, "bbox": [0, 221, 158, 88], "area": 5524}, {"id": 1069370, "category_id": 193, "iscrowd": 0, "bbox": [616, 271, 24, 24], "area": 396}, {"id": 2703431, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 250], "area": 87434}, {"id": 2050105, "category_id": 199, "iscrowd": 0, "bbox": [296, 0, 207, 128], "area": 8243}], "file_name": "000000038829.png", "image_id": 38829}, {"segments_info": [{"id": 4474707, "category_id": 1, "iscrowd": 0, "bbox": [486, 64, 20, 30], "area": 352}, {"id": 1646116, "category_id": 1, "iscrowd": 0, "bbox": [563, 458, 21, 22], "area": 322}, {"id": 1646630, "category_id": 1, "iscrowd": 0, "bbox": [554, 431, 26, 27], "area": 425}, {"id": 4277854, "category_id": 1, "iscrowd": 0, "bbox": [258, 88, 15, 21], "area": 213}, {"id": 6973806, "category_id": 1, "iscrowd": 0, "bbox": [195, 48, 18, 27], "area": 302}, {"id": 987404, "category_id": 1, "iscrowd": 0, "bbox": [72, 220, 39, 73], "area": 851}, {"id": 5987429, "category_id": 1, "iscrowd": 0, "bbox": [230, 86, 22, 23], "area": 325}, {"id": 4410975, "category_id": 1, "iscrowd": 0, "bbox": [237, 45, 16, 31], "area": 346}, {"id": 4344917, "category_id": 1, "iscrowd": 0, "bbox": [455, 159, 42, 52], "area": 685}, {"id": 2565189, "category_id": 1, "iscrowd": 0, "bbox": [457, 50, 15, 26], "area": 308}, {"id": 4936285, "category_id": 1, "iscrowd": 0, "bbox": [251, 45, 16, 26], "area": 261}, {"id": 1382421, "category_id": 1, "iscrowd": 0, "bbox": [19, 321, 28, 55], "area": 879}, {"id": 5068385, "category_id": 1, "iscrowd": 0, "bbox": [206, 198, 35, 85], "area": 1186}, {"id": 3027253, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 633, 446], "area": 42983}, {"id": 1250323, "category_id": 15, "iscrowd": 0, "bbox": [0, 446, 182, 34], "area": 3617}, {"id": 1973007, "category_id": 15, "iscrowd": 0, "bbox": [26, 77, 26, 7], "area": 158}, {"id": 1578507, "category_id": 15, "iscrowd": 0, "bbox": [11, 82, 13, 9], "area": 93}, {"id": 1644301, "category_id": 15, "iscrowd": 0, "bbox": [215, 100, 16, 8], "area": 124}, {"id": 1972751, "category_id": 15, "iscrowd": 0, "bbox": [125, 103, 15, 7], "area": 91}, {"id": 1775628, "category_id": 15, "iscrowd": 0, "bbox": [51, 63, 14, 13], "area": 181}, {"id": 1841423, "category_id": 15, "iscrowd": 0, "bbox": [156, 103, 14, 6], "area": 81}, {"id": 2237989, "category_id": 27, "iscrowd": 0, "bbox": [230, 352, 33, 24], "area": 566}, {"id": 1577487, "category_id": 33, "iscrowd": 0, "bbox": [156, 351, 26, 26], "area": 544}, {"id": 2039872, "category_id": 33, "iscrowd": 0, "bbox": [214, 341, 21, 6], "area": 94}, {"id": 1071180, "category_id": 37, "iscrowd": 0, "bbox": [174, 161, 8, 4], "area": 28}, {"id": 4619119, "category_id": 37, "iscrowd": 0, "bbox": [229, 347, 2, 1], "area": 2}, {"id": 3883589, "category_id": 43, "iscrowd": 0, "bbox": [462, 188, 25, 15], "area": 91}, {"id": 1519666, "category_id": 43, "iscrowd": 0, "bbox": [187, 219, 27, 14], "area": 164}, {"id": 1781046, "category_id": 62, "iscrowd": 0, "bbox": [181, 327, 28, 43], "area": 840}, {"id": 1252640, "category_id": 62, "iscrowd": 0, "bbox": [208, 330, 31, 41], "area": 694}, {"id": 1383708, "category_id": 138, "iscrowd": 0, "bbox": [0, 195, 95, 114], "area": 4044}, {"id": 1519920, "category_id": 145, "iscrowd": 0, "bbox": [0, 125, 640, 310], "area": 154099}, {"id": 2831673, "category_id": 161, "iscrowd": 0, "bbox": [338, 0, 58, 111], "area": 3686}, {"id": 1778728, "category_id": 190, "iscrowd": 0, "bbox": [504, 416, 8, 21], "area": 20}], "file_name": "000000039405.png", "image_id": 39405}, {"segments_info": [{"id": 2369330, "category_id": 63, "iscrowd": 0, "bbox": [341, 237, 252, 184], "area": 30069}, {"id": 3164231, "category_id": 64, "iscrowd": 0, "bbox": [259, 291, 16, 18], "area": 214}, {"id": 5732459, "category_id": 64, "iscrowd": 0, "bbox": [276, 270, 23, 39], "area": 531}, {"id": 2969163, "category_id": 64, "iscrowd": 0, "bbox": [449, 46, 89, 92], "area": 5785}, {"id": 10989488, "category_id": 64, "iscrowd": 0, "bbox": [210, 220, 51, 81], "area": 1729}, {"id": 4741490, "category_id": 64, "iscrowd": 0, "bbox": [310, 273, 20, 31], "area": 294}, {"id": 2043441, "category_id": 64, "iscrowd": 0, "bbox": [534, 58, 101, 97], "area": 7529}, {"id": 6577196, "category_id": 72, "iscrowd": 0, "bbox": [0, 160, 103, 159], "area": 11239}, {"id": 5200738, "category_id": 84, "iscrowd": 0, "bbox": [34, 364, 36, 41], "area": 115}, {"id": 5135199, "category_id": 84, "iscrowd": 0, "bbox": [27, 355, 34, 36], "area": 239}, {"id": 3620155, "category_id": 84, "iscrowd": 0, "bbox": [34, 363, 39, 45], "area": 194}, {"id": 6321017, "category_id": 84, "iscrowd": 0, "bbox": [31, 366, 33, 36], "area": 206}, {"id": 4872803, "category_id": 84, "iscrowd": 0, "bbox": [30, 359, 36, 37], "area": 239}, {"id": 3031370, "category_id": 84, "iscrowd": 0, "bbox": [40, 390, 30, 31], "area": 483}, {"id": 3426160, "category_id": 86, "iscrowd": 0, "bbox": [231, 267, 26, 34], "area": 323}, {"id": 13225421, "category_id": 109, "iscrowd": 0, "bbox": [123, 43, 345, 250], "area": 66192}, {"id": 9541014, "category_id": 141, "iscrowd": 0, "bbox": [381, 223, 85, 111], "area": 4772}, {"id": 7173983, "category_id": 168, "iscrowd": 0, "bbox": [0, 158, 133, 84], "area": 1490}, {"id": 4013895, "category_id": 189, "iscrowd": 0, "bbox": [96, 290, 165, 131], "area": 11081}, {"id": 661538, "category_id": 190, "iscrowd": 0, "bbox": [76, 405, 24, 16], "area": 273}, {"id": 4546139, "category_id": 193, "iscrowd": 0, "bbox": [260, 281, 18, 23], "area": 107}, {"id": 7042682, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 421], "area": 85336}, {"id": 6056829, "category_id": 200, "iscrowd": 0, "bbox": [224, 288, 143, 133], "area": 6920}], "file_name": "000000039477.png", "image_id": 39477}, {"segments_info": [{"id": 3490989, "category_id": 1, "iscrowd": 0, "bbox": [243, 165, 99, 256], "area": 16816}, {"id": 4677798, "category_id": 43, "iscrowd": 0, "bbox": [281, 292, 140, 72], "area": 3952}, {"id": 2838953, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 220373}, {"id": 1911597, "category_id": 190, "iscrowd": 0, "bbox": [91, 0, 456, 47], "area": 5003}], "file_name": "000000039480.png", "image_id": 39480}, {"segments_info": [{"id": 2436185, "category_id": 1, "iscrowd": 0, "bbox": [519, 347, 8, 15], "area": 77}, {"id": 3686499, "category_id": 1, "iscrowd": 0, "bbox": [462, 330, 5, 6], "area": 28}, {"id": 1119009, "category_id": 1, "iscrowd": 0, "bbox": [548, 344, 10, 14], "area": 82}, {"id": 2106201, "category_id": 1, "iscrowd": 0, "bbox": [525, 344, 9, 17], "area": 85}, {"id": 3159866, "category_id": 1, "iscrowd": 0, "bbox": [117, 337, 13, 27], "area": 173}, {"id": 4797488, "category_id": 1, "iscrowd": 0, "bbox": [584, 346, 16, 40], "area": 307}, {"id": 8682104, "category_id": 1, "iscrowd": 0, "bbox": [548, 347, 21, 27], "area": 194}, {"id": 2566298, "category_id": 1, "iscrowd": 0, "bbox": [581, 345, 9, 16], "area": 89}, {"id": 4406343, "category_id": 1, "iscrowd": 0, "bbox": [604, 344, 9, 24], "area": 140}, {"id": 1053719, "category_id": 1, "iscrowd": 0, "bbox": [298, 341, 16, 40], "area": 324}, {"id": 1513508, "category_id": 1, "iscrowd": 0, "bbox": [565, 342, 18, 19], "area": 187}, {"id": 5722450, "category_id": 1, "iscrowd": 0, "bbox": [233, 332, 22, 47], "area": 472}, {"id": 1579810, "category_id": 1, "iscrowd": 0, "bbox": [613, 342, 14, 42], "area": 212}, {"id": 3356471, "category_id": 1, "iscrowd": 1, "bbox": [127, 336, 14, 28], "area": 300}, {"id": 9474439, "category_id": 3, "iscrowd": 0, "bbox": [37, 366, 229, 71], "area": 12735}, {"id": 4539458, "category_id": 3, "iscrowd": 0, "bbox": [256, 344, 44, 37], "area": 1352}, {"id": 6384758, "category_id": 3, "iscrowd": 0, "bbox": [139, 344, 40, 22], "area": 741}, {"id": 10790300, "category_id": 3, "iscrowd": 0, "bbox": [1, 350, 112, 86], "area": 4987}, {"id": 3882041, "category_id": 3, "iscrowd": 0, "bbox": [430, 340, 92, 57], "area": 3933}, {"id": 3750972, "category_id": 3, "iscrowd": 0, "bbox": [209, 331, 66, 46], "area": 1543}, {"id": 8421505, "category_id": 3, "iscrowd": 0, "bbox": [42, 340, 41, 12], "area": 347}, {"id": 4672591, "category_id": 3, "iscrowd": 0, "bbox": [314, 336, 102, 57], "area": 4295}, {"id": 4934474, "category_id": 3, "iscrowd": 0, "bbox": [392, 335, 57, 54], "area": 1388}, {"id": 5132628, "category_id": 3, "iscrowd": 0, "bbox": [178, 334, 39, 32], "area": 911}, {"id": 8883598, "category_id": 3, "iscrowd": 0, "bbox": [2, 339, 37, 17], "area": 430}, {"id": 12235186, "category_id": 5, "iscrowd": 0, "bbox": [605, 12, 27, 11], "area": 85}, {"id": 1253728, "category_id": 10, "iscrowd": 0, "bbox": [46, 310, 5, 10], "area": 43}, {"id": 789774, "category_id": 10, "iscrowd": 0, "bbox": [41, 324, 4, 11], "area": 28}, {"id": 1974598, "category_id": 10, "iscrowd": 0, "bbox": [52, 321, 7, 7], "area": 43}, {"id": 2448289, "category_id": 10, "iscrowd": 0, "bbox": [15, 303, 7, 8], "area": 53}, {"id": 1316113, "category_id": 62, "iscrowd": 0, "bbox": [551, 361, 27, 26], "area": 633}, {"id": 394499, "category_id": 62, "iscrowd": 0, "bbox": [599, 359, 9, 26], "area": 171}, {"id": 263172, "category_id": 62, "iscrowd": 0, "bbox": [613, 358, 12, 25], "area": 186}, {"id": 1052941, "category_id": 62, "iscrowd": 0, "bbox": [524, 358, 19, 24], "area": 225}, {"id": 3421485, "category_id": 67, "iscrowd": 0, "bbox": [628, 357, 12, 15], "area": 124}, {"id": 6711397, "category_id": 67, "iscrowd": 0, "bbox": [572, 361, 16, 3], "area": 39}, {"id": 10135982, "category_id": 95, "iscrowd": 0, "bbox": [0, 166, 15, 69], "area": 546}, {"id": 5463660, "category_id": 149, "iscrowd": 0, "bbox": [201, 345, 439, 92], "area": 21611}, {"id": 15395042, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 276], "area": 94134}, {"id": 3424080, "category_id": 197, "iscrowd": 0, "bbox": [0, 45, 640, 329], "area": 124343}], "file_name": "000000039484.png", "image_id": 39484}, {"segments_info": [{"id": 4545151, "category_id": 1, "iscrowd": 0, "bbox": [119, 54, 196, 285], "area": 20157}, {"id": 9822417, "category_id": 37, "iscrowd": 0, "bbox": [587, 164, 15, 13], "area": 148}, {"id": 6790546, "category_id": 43, "iscrowd": 0, "bbox": [43, 101, 92, 49], "area": 2849}, {"id": 7313282, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 249837}], "file_name": "000000039551.png", "image_id": 39551}, {"segments_info": [{"id": 6908258, "category_id": 7, "iscrowd": 0, "bbox": [49, 101, 524, 352], "area": 143220}, {"id": 10069935, "category_id": 147, "iscrowd": 0, "bbox": [262, 440, 353, 200], "area": 47349}, {"id": 2968896, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 469], "area": 141465}, {"id": 7446689, "category_id": 193, "iscrowd": 0, "bbox": [0, 414, 640, 226], "area": 77216}], "file_name": "000000039670.png", "image_id": 39670}, {"segments_info": [{"id": 8222595, "category_id": 17, "iscrowd": 0, "bbox": [18, 54, 301, 415], "area": 53306}, {"id": 8225432, "category_id": 17, "iscrowd": 0, "bbox": [349, 26, 291, 343], "area": 59627}, {"id": 8798150, "category_id": 63, "iscrowd": 0, "bbox": [1, 0, 639, 474], "area": 174579}, {"id": 14466198, "category_id": 75, "iscrowd": 0, "bbox": [42, 74, 133, 45], "area": 4068}, {"id": 12821912, "category_id": 75, "iscrowd": 0, "bbox": [333, 80, 38, 106], "area": 2118}, {"id": 10898909, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 2750}], "file_name": "000000039769.png", "image_id": 39769}, {"segments_info": [{"id": 3290680, "category_id": 1, "iscrowd": 0, "bbox": [80, 47, 9, 17], "area": 109}, {"id": 3683387, "category_id": 1, "iscrowd": 0, "bbox": [410, 117, 15, 35], "area": 156}, {"id": 4079167, "category_id": 1, "iscrowd": 0, "bbox": [202, 172, 71, 89], "area": 2007}, {"id": 7111799, "category_id": 15, "iscrowd": 0, "bbox": [166, 143, 56, 13], "area": 194}, {"id": 9670025, "category_id": 42, "iscrowd": 0, "bbox": [225, 249, 34, 26], "area": 459}, {"id": 9659932, "category_id": 42, "iscrowd": 0, "bbox": [397, 126, 35, 15], "area": 300}, {"id": 3093049, "category_id": 125, "iscrowd": 0, "bbox": [0, 249, 500, 126], "area": 51746}, {"id": 8882059, "category_id": 128, "iscrowd": 0, "bbox": [126, 26, 15, 32], "area": 279}, {"id": 5069147, "category_id": 144, "iscrowd": 0, "bbox": [63, 127, 309, 42], "area": 6110}, {"id": 11053221, "category_id": 178, "iscrowd": 0, "bbox": [0, 136, 500, 144], "area": 54536}, {"id": 1975842, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 146], "area": 51518}, {"id": 6514274, "category_id": 195, "iscrowd": 0, "bbox": [54, 107, 15, 16], "area": 214}, {"id": 1711901, "category_id": 199, "iscrowd": 0, "bbox": [0, 56, 171, 103], "area": 9675}], "file_name": "000000039785.png", "image_id": 39785}, {"segments_info": [{"id": 4076082, "category_id": 1, "iscrowd": 0, "bbox": [52, 211, 270, 352], "area": 30384}, {"id": 3753027, "category_id": 1, "iscrowd": 0, "bbox": [475, 220, 5, 8], "area": 28}, {"id": 4669253, "category_id": 1, "iscrowd": 0, "bbox": [120, 218, 8, 17], "area": 94}, {"id": 5462355, "category_id": 1, "iscrowd": 0, "bbox": [406, 225, 8, 13], "area": 74}, {"id": 5922910, "category_id": 1, "iscrowd": 0, "bbox": [458, 223, 7, 8], "area": 40}, {"id": 3419969, "category_id": 1, "iscrowd": 0, "bbox": [264, 307, 44, 217], "area": 6539}, {"id": 4937816, "category_id": 1, "iscrowd": 0, "bbox": [385, 222, 8, 16], "area": 78}, {"id": 2368042, "category_id": 1, "iscrowd": 0, "bbox": [106, 219, 7, 16], "area": 67}, {"id": 1384487, "category_id": 1, "iscrowd": 0, "bbox": [418, 216, 4, 8], "area": 21}, {"id": 2962737, "category_id": 1, "iscrowd": 0, "bbox": [437, 221, 16, 13], "area": 106}, {"id": 6118294, "category_id": 38, "iscrowd": 0, "bbox": [254, 271, 169, 122], "area": 5622}, {"id": 4999247, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 487, 238], "area": 72879}, {"id": 12685693, "category_id": 187, "iscrowd": 0, "bbox": [35, 0, 452, 124], "area": 36213}, {"id": 3495251, "category_id": 193, "iscrowd": 0, "bbox": [0, 198, 487, 442], "area": 158793}], "file_name": "000000039914.png", "image_id": 39914}, {"segments_info": [{"id": 11048071, "category_id": 1, "iscrowd": 0, "bbox": [11, 8, 34, 51], "area": 1441}, {"id": 9272946, "category_id": 1, "iscrowd": 0, "bbox": [47, 39, 43, 20], "area": 621}, {"id": 5788249, "category_id": 1, "iscrowd": 0, "bbox": [240, 163, 111, 198], "area": 9977}, {"id": 3588775, "category_id": 37, "iscrowd": 0, "bbox": [384, 277, 12, 14], "area": 137}, {"id": 5531996, "category_id": 43, "iscrowd": 0, "bbox": [325, 289, 83, 68], "area": 2448}], "file_name": "000000039951.png", "image_id": 39951}, {"segments_info": [{"id": 658969, "category_id": 62, "iscrowd": 0, "bbox": [519, 185, 121, 134], "area": 9775}, {"id": 2504282, "category_id": 65, "iscrowd": 0, "bbox": [1, 212, 360, 194], "area": 36507}, {"id": 1053988, "category_id": 93, "iscrowd": 0, "bbox": [0, 264, 351, 163], "area": 15539}, {"id": 1123143, "category_id": 100, "iscrowd": 0, "bbox": [281, 185, 315, 242], "area": 11592}, {"id": 727103, "category_id": 112, "iscrowd": 0, "bbox": [182, 63, 314, 218], "area": 23857}, {"id": 1393545, "category_id": 118, "iscrowd": 0, "bbox": [333, 338, 117, 89], "area": 6717}, {"id": 10006214, "category_id": 130, "iscrowd": 0, "bbox": [320, 14, 245, 40], "area": 770}, {"id": 8689321, "category_id": 133, "iscrowd": 0, "bbox": [506, 134, 75, 141], "area": 5042}, {"id": 5070198, "category_id": 141, "iscrowd": 0, "bbox": [0, 213, 528, 185], "area": 4488}, {"id": 4742536, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 199, 264], "area": 42199}, {"id": 8756154, "category_id": 186, "iscrowd": 0, "bbox": [100, 0, 506, 48], "area": 14348}, {"id": 7571621, "category_id": 199, "iscrowd": 0, "bbox": [186, 0, 454, 290], "area": 61784}], "file_name": "000000039956.png", "image_id": 39956}, {"segments_info": [{"id": 8091304, "category_id": 1, "iscrowd": 0, "bbox": [307, 27, 106, 194], "area": 8454}, {"id": 3424863, "category_id": 19, "iscrowd": 0, "bbox": [162, 53, 427, 342], "area": 43269}, {"id": 10851768, "category_id": 64, "iscrowd": 0, "bbox": [213, 197, 42, 39], "area": 602}, {"id": 4087898, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 396], "area": 160030}, {"id": 6055827, "category_id": 185, "iscrowd": 0, "bbox": [0, 301, 443, 126], "area": 48220}, {"id": 12837859, "category_id": 193, "iscrowd": 0, "bbox": [433, 382, 207, 45], "area": 6495}], "file_name": "000000040036.png", "image_id": 40036}, {"segments_info": [{"id": 3487029, "category_id": 1, "iscrowd": 0, "bbox": [275, 127, 11, 67], "area": 498}, {"id": 7895160, "category_id": 1, "iscrowd": 0, "bbox": [258, 139, 140, 154], "area": 10068}, {"id": 4408131, "category_id": 1, "iscrowd": 0, "bbox": [38, 111, 174, 175], "area": 10956}, {"id": 10921638, "category_id": 2, "iscrowd": 0, "bbox": [126, 157, 13, 27], "area": 218}, {"id": 5395026, "category_id": 2, "iscrowd": 0, "bbox": [290, 162, 49, 53], "area": 1514}, {"id": 14277081, "category_id": 3, "iscrowd": 0, "bbox": [271, 129, 9, 15], "area": 105}, {"id": 9211020, "category_id": 3, "iscrowd": 0, "bbox": [224, 130, 44, 59], "area": 1249}, {"id": 7237230, "category_id": 3, "iscrowd": 0, "bbox": [135, 136, 119, 73], "area": 6385}, {"id": 9868950, "category_id": 28, "iscrowd": 0, "bbox": [63, 1, 394, 110], "area": 36339}, {"id": 8553090, "category_id": 44, "iscrowd": 0, "bbox": [157, 282, 23, 21], "area": 278}, {"id": 8026746, "category_id": 62, "iscrowd": 0, "bbox": [30, 206, 93, 123], "area": 4210}, {"id": 13619151, "category_id": 149, "iscrowd": 0, "bbox": [0, 181, 261, 152], "area": 7294}, {"id": 11382189, "category_id": 166, "iscrowd": 0, "bbox": [0, 101, 249, 94], "area": 4121}, {"id": 5789784, "category_id": 175, "iscrowd": 0, "bbox": [398, 182, 64, 68], "area": 2067}, {"id": 1644825, "category_id": 184, "iscrowd": 0, "bbox": [365, 0, 135, 217], "area": 15259}, {"id": 10066329, "category_id": 191, "iscrowd": 0, "bbox": [12, 171, 427, 162], "area": 17262}, {"id": 10790052, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 405, 196], "area": 24644}], "file_name": "000000040083.png", "image_id": 40083}, {"segments_info": [{"id": 7363148, "category_id": 44, "iscrowd": 0, "bbox": [303, 326, 6, 13], "area": 71}, {"id": 5920074, "category_id": 44, "iscrowd": 0, "bbox": [318, 320, 9, 20], "area": 166}, {"id": 3750196, "category_id": 44, "iscrowd": 0, "bbox": [309, 324, 9, 16], "area": 127}, {"id": 3355693, "category_id": 44, "iscrowd": 0, "bbox": [327, 317, 12, 23], "area": 239}, {"id": 7432026, "category_id": 47, "iscrowd": 0, "bbox": [293, 251, 18, 16], "area": 229}, {"id": 4538945, "category_id": 47, "iscrowd": 0, "bbox": [164, 318, 24, 19], "area": 314}, {"id": 3024932, "category_id": 47, "iscrowd": 0, "bbox": [178, 326, 13, 22], "area": 207}, {"id": 1052687, "category_id": 49, "iscrowd": 0, "bbox": [16, 307, 20, 24], "area": 124}, {"id": 1053200, "category_id": 49, "iscrowd": 0, "bbox": [22, 319, 10, 12], "area": 35}, {"id": 394758, "category_id": 49, "iscrowd": 0, "bbox": [16, 301, 15, 16], "area": 100}, {"id": 6516596, "category_id": 50, "iscrowd": 0, "bbox": [238, 299, 6, 11], "area": 45}, {"id": 1644310, "category_id": 50, "iscrowd": 0, "bbox": [237, 304, 12, 12], "area": 79}, {"id": 1972761, "category_id": 50, "iscrowd": 0, "bbox": [217, 298, 15, 18], "area": 181}, {"id": 4078646, "category_id": 51, "iscrowd": 0, "bbox": [187, 319, 34, 24], "area": 612}, {"id": 2965827, "category_id": 52, "iscrowd": 0, "bbox": [194, 267, 29, 22], "area": 434}, {"id": 1315874, "category_id": 53, "iscrowd": 0, "bbox": [205, 217, 10, 9], "area": 65}, {"id": 7693910, "category_id": 78, "iscrowd": 0, "bbox": [32, 306, 65, 32], "area": 1968}, {"id": 11573384, "category_id": 79, "iscrowd": 0, "bbox": [2, 385, 86, 223], "area": 15941}, {"id": 8746341, "category_id": 81, "iscrowd": 0, "bbox": [1, 342, 74, 23], "area": 1505}, {"id": 5589563, "category_id": 82, "iscrowd": 0, "bbox": [336, 224, 52, 297], "area": 10805}, {"id": 4081741, "category_id": 130, "iscrowd": 0, "bbox": [97, 11, 213, 123], "area": 9684}, {"id": 6715249, "category_id": 171, "iscrowd": 0, "bbox": [0, 273, 348, 65], "area": 3988}, {"id": 10127225, "category_id": 181, "iscrowd": 0, "bbox": [86, 166, 223, 176], "area": 30556}, {"id": 2039831, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 403, 105], "area": 28437}, {"id": 10456959, "category_id": 188, "iscrowd": 0, "bbox": [0, 51, 400, 417], "area": 63874}, {"id": 2564119, "category_id": 190, "iscrowd": 0, "bbox": [0, 458, 372, 182], "area": 52728}, {"id": 5655609, "category_id": 195, "iscrowd": 0, "bbox": [0, 300, 16, 22], "area": 254}, {"id": 13685200, "category_id": 199, "iscrowd": 0, "bbox": [334, 0, 93, 640], "area": 27245}], "file_name": "000000040471.png", "image_id": 40471}, {"segments_info": [{"id": 2042177, "category_id": 1, "iscrowd": 0, "bbox": [1, 262, 400, 270], "area": 59732}, {"id": 6123904, "category_id": 65, "iscrowd": 0, "bbox": [1, 262, 422, 372], "area": 87161}, {"id": 196866, "category_id": 72, "iscrowd": 0, "bbox": [4, 2, 209, 139], "area": 25013}, {"id": 6648955, "category_id": 93, "iscrowd": 0, "bbox": [0, 400, 425, 240], "area": 3626}, {"id": 1053465, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 425, 456], "area": 94966}], "file_name": "000000040757.png", "image_id": 40757}, {"segments_info": [{"id": 14083551, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 369], "area": 71054}], "file_name": "000000041488.png", "image_id": 41488}, {"segments_info": [{"id": 5390647, "category_id": 3, "iscrowd": 0, "bbox": [607, 327, 33, 37], "area": 645}, {"id": 5257520, "category_id": 3, "iscrowd": 0, "bbox": [561, 327, 67, 44], "area": 1931}, {"id": 5260396, "category_id": 8, "iscrowd": 0, "bbox": [8, 174, 561, 250], "area": 99019}, {"id": 8949650, "category_id": 149, "iscrowd": 0, "bbox": [31, 339, 609, 90], "area": 20479}, {"id": 5591094, "category_id": 166, "iscrowd": 0, "bbox": [559, 291, 40, 41], "area": 913}, {"id": 5136458, "category_id": 184, "iscrowd": 0, "bbox": [580, 293, 60, 55], "area": 1332}, {"id": 16377800, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 321], "area": 145992}], "file_name": "000000041633.png", "image_id": 41633}, {"segments_info": [{"id": 2565927, "category_id": 21, "iscrowd": 0, "bbox": [332, 148, 306, 160], "area": 20811}, {"id": 1447446, "category_id": 21, "iscrowd": 0, "bbox": [1, 256, 32, 78], "area": 1752}, {"id": 8092539, "category_id": 21, "iscrowd": 0, "bbox": [208, 165, 207, 160], "area": 18699}, {"id": 4473924, "category_id": 21, "iscrowd": 0, "bbox": [4, 166, 245, 179], "area": 24794}, {"id": 5066061, "category_id": 184, "iscrowd": 0, "bbox": [0, 124, 201, 78], "area": 7225}, {"id": 12303291, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 172], "area": 101166}, {"id": 3947580, "category_id": 193, "iscrowd": 0, "bbox": [0, 156, 640, 324], "area": 132234}], "file_name": "000000041635.png", "image_id": 41635}, {"segments_info": [{"id": 1653362, "category_id": 62, "iscrowd": 0, "bbox": [328, 255, 104, 114], "area": 6288}, {"id": 991318, "category_id": 62, "iscrowd": 0, "bbox": [253, 252, 70, 102], "area": 2177}, {"id": 1325958, "category_id": 65, "iscrowd": 0, "bbox": [1, 215, 265, 143], "area": 19688}, {"id": 1714495, "category_id": 72, "iscrowd": 0, "bbox": [524, 88, 78, 88], "area": 6122}, {"id": 927564, "category_id": 85, "iscrowd": 0, "bbox": [178, 139, 47, 56], "area": 1997}, {"id": 1196405, "category_id": 130, "iscrowd": 0, "bbox": [86, 205, 24, 39], "area": 604}, {"id": 1189726, "category_id": 141, "iscrowd": 0, "bbox": [148, 252, 161, 159], "area": 4562}, {"id": 930676, "category_id": 156, "iscrowd": 0, "bbox": [491, 35, 149, 177], "area": 13906}, {"id": 2375511, "category_id": 176, "iscrowd": 0, "bbox": [473, 193, 167, 233], "area": 29642}, {"id": 798059, "category_id": 177, "iscrowd": 0, "bbox": [286, 83, 209, 211], "area": 3762}, {"id": 2384022, "category_id": 180, "iscrowd": 0, "bbox": [237, 95, 262, 212], "area": 42384}, {"id": 2582697, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 104], "area": 52447}, {"id": 864106, "category_id": 199, "iscrowd": 0, "bbox": [0, 63, 496, 287], "area": 38897}, {"id": 10144229, "category_id": 200, "iscrowd": 0, "bbox": [307, 332, 332, 94], "area": 16133}], "file_name": "000000041872.png", "image_id": 41872}, {"segments_info": [{"id": 4276548, "category_id": 16, "iscrowd": 0, "bbox": [196, 208, 132, 98], "area": 6246}, {"id": 5592668, "category_id": 16, "iscrowd": 0, "bbox": [291, 239, 98, 109], "area": 4612}, {"id": 5133404, "category_id": 16, "iscrowd": 0, "bbox": [376, 253, 159, 117], "area": 9494}, {"id": 7570057, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 220], "area": 59946}, {"id": 14997456, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 626, 202], "area": 72956}, {"id": 7899806, "category_id": 193, "iscrowd": 0, "bbox": [0, 174, 640, 306], "area": 153524}], "file_name": "000000041888.png", "image_id": 41888}, {"segments_info": [{"id": 4342341, "category_id": 1, "iscrowd": 0, "bbox": [216, 131, 171, 271], "area": 22474}, {"id": 5198432, "category_id": 1, "iscrowd": 0, "bbox": [43, 137, 185, 273], "area": 23185}, {"id": 3222616, "category_id": 1, "iscrowd": 0, "bbox": [368, 127, 226, 247], "area": 18647}, {"id": 8947593, "category_id": 35, "iscrowd": 0, "bbox": [95, 386, 55, 25], "area": 690}, {"id": 5986918, "category_id": 138, "iscrowd": 0, "bbox": [0, 69, 640, 93], "area": 20692}, {"id": 13025988, "category_id": 159, "iscrowd": 0, "bbox": [0, 95, 640, 385], "area": 157610}, {"id": 5000782, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 126], "area": 63099}], "file_name": "000000041990.png", "image_id": 41990}, {"segments_info": [{"id": 2304824, "category_id": 1, "iscrowd": 0, "bbox": [0, 307, 30, 57], "area": 523}, {"id": 13224137, "category_id": 3, "iscrowd": 0, "bbox": [552, 310, 26, 6], "area": 124}, {"id": 6578269, "category_id": 6, "iscrowd": 0, "bbox": [108, 18, 468, 439], "area": 181464}, {"id": 5922403, "category_id": 149, "iscrowd": 0, "bbox": [105, 323, 535, 189], "area": 42177}, {"id": 8491696, "category_id": 175, "iscrowd": 0, "bbox": [0, 15, 134, 331], "area": 32051}, {"id": 5002586, "category_id": 184, "iscrowd": 0, "bbox": [552, 231, 88, 101], "area": 5416}, {"id": 15919328, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 275], "area": 44103}, {"id": 7636879, "category_id": 191, "iscrowd": 0, "bbox": [0, 360, 147, 152], "area": 15753}, {"id": 3497312, "category_id": 193, "iscrowd": 0, "bbox": [0, 321, 640, 80], "area": 4907}, {"id": 12367544, "category_id": 197, "iscrowd": 0, "bbox": [628, 276, 12, 23], "area": 198}], "file_name": "000000042070.png", "image_id": 42070}, {"segments_info": [{"id": 3812140, "category_id": 1, "iscrowd": 0, "bbox": [20, 7, 220, 621], "area": 69857}, {"id": 1447701, "category_id": 31, "iscrowd": 0, "bbox": [11, 376, 50, 188], "area": 5325}, {"id": 7356753, "category_id": 32, "iscrowd": 0, "bbox": [124, 119, 12, 142], "area": 987}, {"id": 13419969, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 246, 552], "area": 60731}, {"id": 790332, "category_id": 200, "iscrowd": 0, "bbox": [0, 506, 246, 134], "area": 19997}], "file_name": "000000042102.png", "image_id": 42102}, {"segments_info": [{"id": 4086113, "category_id": 7, "iscrowd": 0, "bbox": [18, 230, 267, 128], "area": 17886}, {"id": 3428959, "category_id": 7, "iscrowd": 0, "bbox": [165, 229, 312, 240], "area": 39137}, {"id": 2836048, "category_id": 7, "iscrowd": 0, "bbox": [122, 287, 192, 150], "area": 16413}, {"id": 2310219, "category_id": 125, "iscrowd": 0, "bbox": [17, 213, 623, 267], "area": 50114}, {"id": 1781556, "category_id": 147, "iscrowd": 0, "bbox": [0, 306, 201, 174], "area": 12492}, {"id": 4744818, "category_id": 184, "iscrowd": 0, "bbox": [467, 72, 173, 147], "area": 17273}, {"id": 6851485, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 184], "area": 96635}], "file_name": "000000042178.png", "image_id": 42178}, {"segments_info": [{"id": 4676191, "category_id": 64, "iscrowd": 0, "bbox": [147, 17, 106, 88], "area": 4971}, {"id": 9544629, "category_id": 70, "iscrowd": 0, "bbox": [60, 15, 94, 232], "area": 15450}, {"id": 5333631, "category_id": 109, "iscrowd": 0, "bbox": [117, 0, 258, 61], "area": 6432}, {"id": 4415369, "category_id": 168, "iscrowd": 0, "bbox": [273, 39, 54, 118], "area": 3049}, {"id": 6979990, "category_id": 188, "iscrowd": 0, "bbox": [331, 11, 44, 152], "area": 5080}, {"id": 7834281, "category_id": 190, "iscrowd": 0, "bbox": [0, 158, 375, 342], "area": 57377}, {"id": 7768992, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 338, 199], "area": 28310}], "file_name": "000000042276.png", "image_id": 42276}, {"segments_info": [{"id": 11320259, "category_id": 23, "iscrowd": 0, "bbox": [148, 5, 439, 298], "area": 47926}, {"id": 6848085, "category_id": 37, "iscrowd": 0, "bbox": [0, 271, 101, 75], "area": 5881}, {"id": 3790829, "category_id": 37, "iscrowd": 0, "bbox": [98, 280, 112, 65], "area": 4883}, {"id": 5401932, "category_id": 37, "iscrowd": 0, "bbox": [188, 218, 119, 104], "area": 9859}, {"id": 5593946, "category_id": 148, "iscrowd": 0, "bbox": [0, 174, 640, 251], "area": 98490}, {"id": 3885387, "category_id": 194, "iscrowd": 0, "bbox": [0, 44, 70, 40], "area": 1792}, {"id": 7961986, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 96089}], "file_name": "000000042296.png", "image_id": 42296}, {"segments_info": [{"id": 3811889, "category_id": 1, "iscrowd": 0, "bbox": [2, 193, 514, 294], "area": 75939}, {"id": 8029082, "category_id": 62, "iscrowd": 0, "bbox": [15, 158, 275, 235], "area": 23941}, {"id": 3882564, "category_id": 77, "iscrowd": 0, "bbox": [414, 183, 119, 233], "area": 16640}, {"id": 8825034, "category_id": 118, "iscrowd": 0, "bbox": [0, 0, 322, 421], "area": 75000}, {"id": 1976391, "category_id": 177, "iscrowd": 0, "bbox": [301, 0, 339, 495], "area": 59405}, {"id": 12172229, "category_id": 181, "iscrowd": 0, "bbox": [321, 0, 264, 406], "area": 48780}, {"id": 16578543, "category_id": 187, "iscrowd": 0, "bbox": [333, 0, 102, 161], "area": 12153}], "file_name": "000000042528.png", "image_id": 42528}, {"segments_info": [{"id": 6119011, "category_id": 7, "iscrowd": 0, "bbox": [207, 453, 114, 139], "area": 11241}, {"id": 12630455, "category_id": 147, "iscrowd": 0, "bbox": [178, 423, 206, 217], "area": 20783}, {"id": 13288386, "category_id": 159, "iscrowd": 0, "bbox": [0, 499, 440, 141], "area": 13160}, {"id": 3486257, "category_id": 184, "iscrowd": 0, "bbox": [0, 139, 624, 501], "area": 192121}, {"id": 14143953, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 624, 348], "area": 161934}], "file_name": "000000042563.png", "image_id": 42563}, {"segments_info": [{"id": 1972760, "category_id": 1, "iscrowd": 0, "bbox": [533, 0, 35, 97], "area": 2155}, {"id": 2762280, "category_id": 1, "iscrowd": 0, "bbox": [273, 0, 38, 96], "area": 2317}, {"id": 3090213, "category_id": 1, "iscrowd": 0, "bbox": [481, 3, 50, 106], "area": 3327}, {"id": 8681080, "category_id": 1, "iscrowd": 0, "bbox": [385, 0, 56, 100], "area": 2194}, {"id": 1577233, "category_id": 1, "iscrowd": 0, "bbox": [226, 1, 46, 82], "area": 1909}, {"id": 3093304, "category_id": 11, "iscrowd": 0, "bbox": [386, 214, 75, 139], "area": 6699}, {"id": 2366760, "category_id": 31, "iscrowd": 0, "bbox": [531, 15, 19, 36], "area": 299}, {"id": 4208436, "category_id": 36, "iscrowd": 0, "bbox": [467, 46, 29, 53], "area": 594}, {"id": 7759716, "category_id": 149, "iscrowd": 0, "bbox": [0, 49, 640, 117], "area": 8675}, {"id": 10789029, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 229668}, {"id": 2963018, "category_id": 171, "iscrowd": 0, "bbox": [1, 0, 537, 64], "area": 13258}], "file_name": "000000042628.png", "image_id": 42628}, {"segments_info": [{"id": 3162948, "category_id": 171, "iscrowd": 0, "bbox": [0, 126, 152, 248], "area": 9663}, {"id": 3629653, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 374], "area": 143175}, {"id": 5134168, "category_id": 197, "iscrowd": 0, "bbox": [167, 222, 73, 152], "area": 6207}], "file_name": "000000042888.png", "image_id": 42888}, {"segments_info": [{"id": 2499375, "category_id": 76, "iscrowd": 0, "bbox": [64, 377, 286, 123], "area": 19284}, {"id": 6783133, "category_id": 88, "iscrowd": 0, "bbox": [58, 49, 286, 302], "area": 54763}, {"id": 3421351, "category_id": 189, "iscrowd": 0, "bbox": [93, 243, 282, 257], "area": 21911}, {"id": 2761277, "category_id": 190, "iscrowd": 0, "bbox": [54, 409, 43, 91], "area": 2398}, {"id": 2164233, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 78798}], "file_name": "000000042889.png", "image_id": 42889}, {"segments_info": [{"id": 6054261, "category_id": 1, "iscrowd": 0, "bbox": [200, 98, 135, 107], "area": 5503}, {"id": 4407873, "category_id": 1, "iscrowd": 0, "bbox": [54, 155, 12, 22], "area": 154}, {"id": 3157549, "category_id": 35, "iscrowd": 0, "bbox": [141, 61, 178, 182], "area": 3940}, {"id": 13749449, "category_id": 159, "iscrowd": 0, "bbox": [10, 177, 480, 149], "area": 62381}, {"id": 4605510, "category_id": 184, "iscrowd": 0, "bbox": [400, 0, 100, 225], "area": 13452}, {"id": 9529673, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 213, 164], "area": 14682}, {"id": 6772556, "category_id": 192, "iscrowd": 0, "bbox": [11, 0, 479, 234], "area": 52730}], "file_name": "000000043314.png", "image_id": 43314}, {"segments_info": [{"id": 2961983, "category_id": 1, "iscrowd": 0, "bbox": [463, 219, 21, 50], "area": 485}, {"id": 3558501, "category_id": 1, "iscrowd": 0, "bbox": [184, 429, 35, 44], "area": 883}, {"id": 6903628, "category_id": 42, "iscrowd": 0, "bbox": [443, 237, 66, 40], "area": 813}, {"id": 5535100, "category_id": 42, "iscrowd": 0, "bbox": [171, 467, 36, 12], "area": 204}, {"id": 9543850, "category_id": 42, "iscrowd": 0, "bbox": [106, 477, 95, 38], "area": 1153}, {"id": 9733499, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 638, 640], "area": 404580}], "file_name": "000000043435.png", "image_id": 43435}, {"segments_info": [{"id": 9453081, "category_id": 48, "iscrowd": 0, "bbox": [365, 140, 198, 33], "area": 905}, {"id": 11286542, "category_id": 49, "iscrowd": 0, "bbox": [457, 140, 46, 70], "area": 998}, {"id": 2310787, "category_id": 59, "iscrowd": 0, "bbox": [182, 194, 433, 179], "area": 62142}, {"id": 3677752, "category_id": 67, "iscrowd": 0, "bbox": [0, 69, 640, 358], "area": 150152}], "file_name": "000000043581.png", "image_id": 43581}, {"segments_info": [{"id": 2037523, "category_id": 3, "iscrowd": 0, "bbox": [162, 422, 36, 20], "area": 174}, {"id": 1577488, "category_id": 3, "iscrowd": 0, "bbox": [111, 416, 81, 38], "area": 1170}, {"id": 3876891, "category_id": 3, "iscrowd": 0, "bbox": [15, 423, 16, 13], "area": 157}, {"id": 1839631, "category_id": 3, "iscrowd": 0, "bbox": [100, 427, 66, 35], "area": 1397}, {"id": 3220508, "category_id": 3, "iscrowd": 0, "bbox": [0, 415, 17, 26], "area": 353}, {"id": 5059876, "category_id": 85, "iscrowd": 0, "bbox": [23, 121, 126, 122], "area": 10649}, {"id": 7030317, "category_id": 159, "iscrowd": 0, "bbox": [0, 442, 480, 198], "area": 32507}, {"id": 8354682, "category_id": 184, "iscrowd": 0, "bbox": [0, 303, 248, 206], "area": 9994}, {"id": 16377291, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 379], "area": 92555}, {"id": 2694166, "category_id": 191, "iscrowd": 0, "bbox": [0, 414, 480, 196], "area": 39523}, {"id": 2367006, "category_id": 197, "iscrowd": 0, "bbox": [0, 5, 480, 534], "area": 90700}], "file_name": "000000043737.png", "image_id": 43737}, {"segments_info": [{"id": 2040390, "category_id": 1, "iscrowd": 0, "bbox": [480, 193, 160, 177], "area": 9259}, {"id": 8353401, "category_id": 1, "iscrowd": 0, "bbox": [250, 81, 204, 264], "area": 18260}, {"id": 7442851, "category_id": 37, "iscrowd": 0, "bbox": [93, 216, 15, 12], "area": 155}, {"id": 7768210, "category_id": 39, "iscrowd": 0, "bbox": [319, 188, 108, 32], "area": 1157}, {"id": 3302031, "category_id": 40, "iscrowd": 0, "bbox": [481, 228, 46, 47], "area": 1374}, {"id": 4465178, "category_id": 92, "iscrowd": 0, "bbox": [246, 0, 45, 34], "area": 1247}, {"id": 4418688, "category_id": 145, "iscrowd": 0, "bbox": [0, 48, 640, 378], "area": 198398}, {"id": 2106656, "category_id": 185, "iscrowd": 0, "bbox": [92, 0, 548, 92], "area": 36382}, {"id": 597557, "category_id": 190, "iscrowd": 0, "bbox": [587, 294, 5, 13], "area": 10}], "file_name": "000000043816.png", "image_id": 43816}, {"segments_info": [{"id": 1781580, "category_id": 62, "iscrowd": 0, "bbox": [4, 18, 476, 612], "area": 169698}, {"id": 1913160, "category_id": 88, "iscrowd": 0, "bbox": [178, 161, 227, 343], "area": 54500}, {"id": 5663603, "category_id": 109, "iscrowd": 0, "bbox": [255, 0, 225, 452], "area": 38910}, {"id": 7314854, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 345, 500], "area": 34489}], "file_name": "000000044068.png", "image_id": 44068}, {"segments_info": [{"id": 2826800, "category_id": 1, "iscrowd": 0, "bbox": [161, 176, 62, 233], "area": 6746}, {"id": 3287614, "category_id": 1, "iscrowd": 0, "bbox": [52, 87, 136, 393], "area": 25704}, {"id": 1250067, "category_id": 36, "iscrowd": 0, "bbox": [128, 259, 138, 75], "area": 4539}, {"id": 10192766, "category_id": 159, "iscrowd": 0, "bbox": [0, 347, 361, 153], "area": 38432}, {"id": 12685165, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 361, 333], "area": 83001}, {"id": 10056795, "category_id": 192, "iscrowd": 0, "bbox": [0, 313, 240, 99], "area": 7879}, {"id": 2235159, "category_id": 198, "iscrowd": 0, "bbox": [230, 188, 131, 166], "area": 13790}], "file_name": "000000044195.png", "image_id": 44195}, {"segments_info": [{"id": 3033486, "category_id": 53, "iscrowd": 0, "bbox": [348, 314, 34, 35], "area": 855}, {"id": 1781875, "category_id": 53, "iscrowd": 0, "bbox": [611, 178, 29, 32], "area": 775}, {"id": 1848981, "category_id": 53, "iscrowd": 0, "bbox": [160, 5, 57, 52], "area": 2322}, {"id": 2243475, "category_id": 53, "iscrowd": 0, "bbox": [371, 356, 24, 28], "area": 530}, {"id": 1847432, "category_id": 53, "iscrowd": 0, "bbox": [213, 230, 53, 46], "area": 1740}, {"id": 2704005, "category_id": 53, "iscrowd": 0, "bbox": [243, 70, 49, 48], "area": 1801}, {"id": 5073025, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 263777}], "file_name": "000000044260.png", "image_id": 44260}, {"segments_info": [{"id": 4212047, "category_id": 1, "iscrowd": 0, "bbox": [158, 121, 140, 299], "area": 16757}, {"id": 8357525, "category_id": 1, "iscrowd": 0, "bbox": [278, 65, 294, 360], "area": 49987}, {"id": 1448222, "category_id": 49, "iscrowd": 0, "bbox": [529, 245, 13, 16], "area": 112}, {"id": 5728875, "category_id": 51, "iscrowd": 0, "bbox": [499, 197, 60, 22], "area": 1128}, {"id": 10526631, "category_id": 51, "iscrowd": 0, "bbox": [574, 108, 66, 27], "area": 1051}, {"id": 12107454, "category_id": 51, "iscrowd": 0, "bbox": [450, 358, 62, 24], "area": 946}, {"id": 10068902, "category_id": 51, "iscrowd": 0, "bbox": [172, 288, 61, 22], "area": 1071}, {"id": 8948610, "category_id": 51, "iscrowd": 0, "bbox": [513, 259, 23, 16], "area": 294}, {"id": 8685445, "category_id": 51, "iscrowd": 0, "bbox": [530, 281, 21, 16], "area": 157}, {"id": 1581354, "category_id": 79, "iscrowd": 0, "bbox": [13, 169, 187, 127], "area": 11889}, {"id": 2369839, "category_id": 79, "iscrowd": 0, "bbox": [108, 325, 80, 100], "area": 5744}, {"id": 6186621, "category_id": 100, "iscrowd": 0, "bbox": [542, 337, 48, 52], "area": 1686}, {"id": 7501686, "category_id": 107, "iscrowd": 0, "bbox": [412, 361, 167, 64], "area": 3961}, {"id": 15988470, "category_id": 130, "iscrowd": 0, "bbox": [300, 0, 101, 91], "area": 3152}, {"id": 4936019, "category_id": 156, "iscrowd": 0, "bbox": [265, 0, 375, 242], "area": 24354}, {"id": 3757929, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 154], "area": 40395}, {"id": 1845569, "category_id": 190, "iscrowd": 0, "bbox": [206, 355, 57, 70], "area": 2237}, {"id": 6385014, "category_id": 195, "iscrowd": 0, "bbox": [384, 0, 256, 246], "area": 9433}, {"id": 5069940, "category_id": 196, "iscrowd": 0, "bbox": [191, 269, 357, 116], "area": 1555}, {"id": 4083291, "category_id": 199, "iscrowd": 0, "bbox": [0, 37, 439, 175], "area": 15091}], "file_name": "000000044279.png", "image_id": 44279}, {"segments_info": [{"id": 5523015, "category_id": 1, "iscrowd": 0, "bbox": [611, 85, 11, 55], "area": 257}, {"id": 5985621, "category_id": 1, "iscrowd": 0, "bbox": [452, 100, 24, 61], "area": 895}, {"id": 4143678, "category_id": 1, "iscrowd": 0, "bbox": [465, 95, 21, 54], "area": 472}, {"id": 3881537, "category_id": 1, "iscrowd": 0, "bbox": [57, 102, 19, 33], "area": 359}, {"id": 2565155, "category_id": 1, "iscrowd": 0, "bbox": [62, 95, 51, 96], "area": 1899}, {"id": 3551576, "category_id": 1, "iscrowd": 0, "bbox": [305, 109, 22, 23], "area": 342}, {"id": 3880509, "category_id": 1, "iscrowd": 0, "bbox": [585, 87, 21, 52], "area": 740}, {"id": 6576216, "category_id": 1, "iscrowd": 0, "bbox": [487, 95, 24, 51], "area": 624}, {"id": 4276035, "category_id": 1, "iscrowd": 0, "bbox": [325, 103, 41, 79], "area": 1320}, {"id": 5130311, "category_id": 1, "iscrowd": 0, "bbox": [432, 99, 21, 54], "area": 701}, {"id": 3420985, "category_id": 1, "iscrowd": 0, "bbox": [615, 83, 21, 61], "area": 859}, {"id": 4933448, "category_id": 1, "iscrowd": 0, "bbox": [541, 96, 38, 47], "area": 789}, {"id": 4339568, "category_id": 3, "iscrowd": 0, "bbox": [573, 79, 67, 55], "area": 803}, {"id": 3881296, "category_id": 4, "iscrowd": 0, "bbox": [101, 135, 59, 48], "area": 1614}, {"id": 3224378, "category_id": 4, "iscrowd": 0, "bbox": [186, 131, 31, 39], "area": 644}, {"id": 4011577, "category_id": 4, "iscrowd": 0, "bbox": [5, 120, 55, 76], "area": 2525}, {"id": 3491143, "category_id": 4, "iscrowd": 0, "bbox": [529, 121, 59, 36], "area": 1306}, {"id": 3421758, "category_id": 4, "iscrowd": 0, "bbox": [286, 130, 37, 40], "area": 850}, {"id": 4800318, "category_id": 4, "iscrowd": 0, "bbox": [367, 125, 45, 36], "area": 1196}, {"id": 4869462, "category_id": 4, "iscrowd": 0, "bbox": [405, 120, 38, 31], "area": 629}, {"id": 3421754, "category_id": 4, "iscrowd": 0, "bbox": [53, 138, 68, 54], "area": 1917}, {"id": 6841966, "category_id": 4, "iscrowd": 0, "bbox": [276, 127, 15, 38], "area": 330}, {"id": 2237744, "category_id": 4, "iscrowd": 0, "bbox": [308, 126, 63, 59], "area": 2068}, {"id": 4605003, "category_id": 4, "iscrowd": 0, "bbox": [211, 128, 60, 48], "area": 2083}, {"id": 5525075, "category_id": 4, "iscrowd": 0, "bbox": [485, 114, 50, 30], "area": 727}, {"id": 7239299, "category_id": 149, "iscrowd": 0, "bbox": [0, 143, 640, 103], "area": 40458}, {"id": 12696500, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 171], "area": 78346}, {"id": 8098731, "category_id": 194, "iscrowd": 0, "bbox": [0, 118, 640, 93], "area": 11268}], "file_name": "000000044590.png", "image_id": 44590}, {"segments_info": [{"id": 4475215, "category_id": 5, "iscrowd": 0, "bbox": [78, 169, 193, 80], "area": 8888}, {"id": 7042429, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 263907}], "file_name": "000000044652.png", "image_id": 44652}, {"segments_info": [{"id": 6056305, "category_id": 20, "iscrowd": 0, "bbox": [105, 212, 111, 91], "area": 5515}, {"id": 7506849, "category_id": 20, "iscrowd": 0, "bbox": [474, 254, 91, 68], "area": 3885}, {"id": 5330523, "category_id": 20, "iscrowd": 0, "bbox": [438, 256, 39, 62], "area": 1640}, {"id": 8096665, "category_id": 20, "iscrowd": 0, "bbox": [214, 236, 96, 70], "area": 3413}, {"id": 8548662, "category_id": 178, "iscrowd": 0, "bbox": [194, 267, 446, 58], "area": 8349}, {"id": 15055760, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 98], "area": 49655}, {"id": 7040112, "category_id": 192, "iscrowd": 0, "bbox": [0, 57, 640, 234], "area": 116486}, {"id": 3631475, "category_id": 193, "iscrowd": 0, "bbox": [0, 263, 640, 163], "area": 82145}, {"id": 5454637, "category_id": 198, "iscrowd": 0, "bbox": [350, 254, 176, 29], "area": 1248}], "file_name": "000000044699.png", "image_id": 44699}, {"segments_info": [{"id": 5724523, "category_id": 1, "iscrowd": 0, "bbox": [106, 24, 266, 394], "area": 51742}, {"id": 6579309, "category_id": 1, "iscrowd": 0, "bbox": [332, 110, 169, 272], "area": 15547}, {"id": 6905954, "category_id": 1, "iscrowd": 0, "bbox": [0, 342, 32, 83], "area": 2176}, {"id": 4013140, "category_id": 37, "iscrowd": 0, "bbox": [31, 298, 29, 34], "area": 793}, {"id": 9145231, "category_id": 43, "iscrowd": 0, "bbox": [287, 172, 305, 127], "area": 16329}, {"id": 9278362, "category_id": 43, "iscrowd": 0, "bbox": [499, 375, 101, 52], "area": 3728}, {"id": 11974840, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 119963}], "file_name": "000000044877.png", "image_id": 44877}, {"segments_info": [{"id": 8875912, "category_id": 1, "iscrowd": 0, "bbox": [110, 40, 325, 446], "area": 74661}, {"id": 8026534, "category_id": 19, "iscrowd": 0, "bbox": [0, 438, 640, 152], "area": 80971}, {"id": 2708791, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 403], "area": 184955}, {"id": 14673368, "category_id": 187, "iscrowd": 0, "bbox": [550, 0, 72, 37], "area": 1583}, {"id": 6133903, "category_id": 193, "iscrowd": 0, "bbox": [0, 318, 640, 149], "area": 27325}, {"id": 12480909, "category_id": 200, "iscrowd": 0, "bbox": [69, 588, 551, 8], "area": 2269}], "file_name": "000000045070.png", "image_id": 45070}, {"segments_info": [{"id": 2631203, "category_id": 1, "iscrowd": 0, "bbox": [175, 89, 31, 24], "area": 340}, {"id": 2170396, "category_id": 1, "iscrowd": 0, "bbox": [296, 81, 18, 20], "area": 183}, {"id": 4539706, "category_id": 42, "iscrowd": 0, "bbox": [199, 120, 33, 11], "area": 270}, {"id": 4867384, "category_id": 42, "iscrowd": 0, "bbox": [309, 100, 14, 4], "area": 29}, {"id": 8876114, "category_id": 155, "iscrowd": 0, "bbox": [21, 21, 449, 209], "area": 87227}], "file_name": "000000045090.png", "image_id": 45090}, {"segments_info": [{"id": 2239797, "category_id": 44, "iscrowd": 0, "bbox": [128, 280, 19, 30], "area": 398}, {"id": 2571592, "category_id": 44, "iscrowd": 0, "bbox": [59, 189, 13, 31], "area": 251}, {"id": 2305329, "category_id": 44, "iscrowd": 0, "bbox": [97, 235, 13, 18], "area": 198}, {"id": 1448218, "category_id": 44, "iscrowd": 0, "bbox": [608, 156, 17, 55], "area": 693}, {"id": 1909036, "category_id": 44, "iscrowd": 0, "bbox": [524, 321, 11, 13], "area": 91}, {"id": 3884626, "category_id": 51, "iscrowd": 0, "bbox": [262, 415, 19, 12], "area": 187}, {"id": 3886146, "category_id": 64, "iscrowd": 0, "bbox": [349, 388, 31, 36], "area": 871}, {"id": 3031351, "category_id": 64, "iscrowd": 0, "bbox": [313, 387, 38, 37], "area": 1120}, {"id": 2436408, "category_id": 64, "iscrowd": 0, "bbox": [360, 369, 9, 10], "area": 78}, {"id": 2638428, "category_id": 64, "iscrowd": 0, "bbox": [369, 365, 13, 16], "area": 178}, {"id": 2369331, "category_id": 64, "iscrowd": 0, "bbox": [257, 357, 24, 27], "area": 520}, {"id": 2370616, "category_id": 64, "iscrowd": 0, "bbox": [384, 367, 13, 11], "area": 110}, {"id": 2764339, "category_id": 64, "iscrowd": 0, "bbox": [281, 354, 24, 30], "area": 536}, {"id": 2764083, "category_id": 64, "iscrowd": 0, "bbox": [303, 357, 29, 27], "area": 586}, {"id": 2370359, "category_id": 64, "iscrowd": 0, "bbox": [395, 368, 17, 10], "area": 122}, {"id": 1975867, "category_id": 79, "iscrowd": 0, "bbox": [317, 412, 71, 67], "area": 3472}, {"id": 2172710, "category_id": 79, "iscrowd": 0, "bbox": [0, 398, 97, 81], "area": 3811}, {"id": 2238761, "category_id": 79, "iscrowd": 0, "bbox": [30, 429, 71, 51], "area": 1818}, {"id": 1646628, "category_id": 84, "iscrowd": 0, "bbox": [630, 315, 10, 52], "area": 282}, {"id": 1843235, "category_id": 84, "iscrowd": 0, "bbox": [610, 307, 12, 56], "area": 617}, {"id": 1448219, "category_id": 84, "iscrowd": 0, "bbox": [596, 293, 43, 67], "area": 1225}, {"id": 1910576, "category_id": 84, "iscrowd": 0, "bbox": [625, 303, 15, 68], "area": 461}, {"id": 2041647, "category_id": 156, "iscrowd": 0, "bbox": [0, 191, 640, 289], "area": 20799}, {"id": 7701376, "category_id": 181, "iscrowd": 0, "bbox": [232, 64, 208, 319], "area": 58766}, {"id": 4084825, "category_id": 186, "iscrowd": 0, "bbox": [54, 0, 523, 71], "area": 24303}, {"id": 2243679, "category_id": 188, "iscrowd": 0, "bbox": [445, 86, 195, 394], "area": 47615}, {"id": 2172972, "category_id": 189, "iscrowd": 0, "bbox": [0, 358, 340, 122], "area": 16088}, {"id": 1910315, "category_id": 196, "iscrowd": 0, "bbox": [0, 153, 150, 100], "area": 4514}, {"id": 2306624, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 94269}], "file_name": "000000045229.png", "image_id": 45229}, {"segments_info": [{"id": 724076, "category_id": 47, "iscrowd": 0, "bbox": [244, 379, 65, 49], "area": 2761}, {"id": 790153, "category_id": 47, "iscrowd": 0, "bbox": [434, 376, 65, 52], "area": 2854}, {"id": 1053041, "category_id": 47, "iscrowd": 0, "bbox": [311, 378, 60, 47], "area": 2553}, {"id": 855657, "category_id": 47, "iscrowd": 0, "bbox": [372, 378, 64, 50], "area": 2741}, {"id": 724338, "category_id": 47, "iscrowd": 0, "bbox": [180, 383, 63, 45], "area": 2478}, {"id": 1075640, "category_id": 55, "iscrowd": 0, "bbox": [411, 173, 217, 175], "area": 24428}, {"id": 2896694, "category_id": 122, "iscrowd": 0, "bbox": [0, 0, 245, 369], "area": 65346}, {"id": 2763595, "category_id": 190, "iscrowd": 0, "bbox": [0, 301, 640, 127], "area": 39930}, {"id": 986924, "category_id": 199, "iscrowd": 0, "bbox": [370, 0, 270, 379], "area": 55747}], "file_name": "000000045472.png", "image_id": 45472}, {"segments_info": [{"id": 923674, "category_id": 1, "iscrowd": 0, "bbox": [65, 89, 32, 31], "area": 578}, {"id": 1515293, "category_id": 1, "iscrowd": 0, "bbox": [102, 61, 48, 55], "area": 1656}, {"id": 1055770, "category_id": 1, "iscrowd": 0, "bbox": [464, 88, 46, 69], "area": 1981}, {"id": 3621973, "category_id": 1, "iscrowd": 0, "bbox": [117, 5, 523, 470], "area": 116205}, {"id": 857365, "category_id": 1, "iscrowd": 0, "bbox": [600, 70, 28, 71], "area": 952}, {"id": 725522, "category_id": 1, "iscrowd": 0, "bbox": [455, 95, 25, 61], "area": 807}, {"id": 1449504, "category_id": 1, "iscrowd": 0, "bbox": [19, 85, 44, 34], "area": 944}, {"id": 5802703, "category_id": 51, "iscrowd": 0, "bbox": [96, 375, 112, 83], "area": 5707}, {"id": 4431839, "category_id": 54, "iscrowd": 0, "bbox": [149, 309, 234, 164], "area": 21586}, {"id": 2373939, "category_id": 85, "iscrowd": 0, "bbox": [199, 0, 43, 28], "area": 792}, {"id": 2243893, "category_id": 100, "iscrowd": 0, "bbox": [379, 0, 128, 110], "area": 7791}, {"id": 593165, "category_id": 190, "iscrowd": 0, "bbox": [0, 215, 622, 188], "area": 10056}, {"id": 8177114, "category_id": 196, "iscrowd": 0, "bbox": [0, 388, 160, 92], "area": 10240}, {"id": 1321519, "category_id": 199, "iscrowd": 0, "bbox": [13, 0, 627, 397], "area": 62006}], "file_name": "000000045550.png", "image_id": 45550}, {"segments_info": [{"id": 2829352, "category_id": 1, "iscrowd": 0, "bbox": [124, 348, 9, 26], "area": 139}, {"id": 3157830, "category_id": 1, "iscrowd": 0, "bbox": [59, 399, 23, 38], "area": 597}, {"id": 6381144, "category_id": 2, "iscrowd": 0, "bbox": [162, 507, 46, 19], "area": 421}, {"id": 5923165, "category_id": 2, "iscrowd": 0, "bbox": [197, 429, 53, 39], "area": 634}, {"id": 7501426, "category_id": 2, "iscrowd": 0, "bbox": [193, 419, 39, 31], "area": 307}, {"id": 6449511, "category_id": 2, "iscrowd": 0, "bbox": [153, 486, 76, 33], "area": 1231}, {"id": 5593941, "category_id": 2, "iscrowd": 0, "bbox": [149, 510, 79, 18], "area": 449}, {"id": 5463128, "category_id": 2, "iscrowd": 0, "bbox": [203, 418, 53, 37], "area": 791}, {"id": 6581105, "category_id": 2, "iscrowd": 0, "bbox": [183, 446, 57, 35], "area": 1054}, {"id": 9343620, "category_id": 3, "iscrowd": 0, "bbox": [327, 298, 15, 12], "area": 126}, {"id": 9607555, "category_id": 28, "iscrowd": 0, "bbox": [56, 384, 28, 17], "area": 320}, {"id": 9140573, "category_id": 28, "iscrowd": 0, "bbox": [117, 340, 18, 9], "area": 120}, {"id": 1712159, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 408, 640], "area": 48816}, {"id": 7771801, "category_id": 184, "iscrowd": 0, "bbox": [187, 230, 156, 107], "area": 3551}, {"id": 15592424, "category_id": 187, "iscrowd": 0, "bbox": [102, 38, 258, 198], "area": 16021}, {"id": 7964810, "category_id": 191, "iscrowd": 0, "bbox": [29, 320, 313, 320], "area": 33510}, {"id": 4481627, "category_id": 193, "iscrowd": 0, "bbox": [24, 303, 361, 242], "area": 20819}, {"id": 8357247, "category_id": 197, "iscrowd": 0, "bbox": [21, 36, 371, 604], "area": 131912}], "file_name": "000000045596.png", "image_id": 45596}, {"segments_info": [{"id": 2826269, "category_id": 48, "iscrowd": 0, "bbox": [12, 25, 344, 131], "area": 13044}, {"id": 4403242, "category_id": 49, "iscrowd": 0, "bbox": [322, 61, 316, 82], "area": 13915}, {"id": 4545886, "category_id": 196, "iscrowd": 0, "bbox": [0, 124, 640, 356], "area": 209904}], "file_name": "000000045728.png", "image_id": 45728}, {"segments_info": [{"id": 7112537, "category_id": 72, "iscrowd": 0, "bbox": [0, 2, 151, 208], "area": 24795}, {"id": 7506280, "category_id": 73, "iscrowd": 0, "bbox": [220, 101, 314, 317], "area": 64056}, {"id": 2171428, "category_id": 74, "iscrowd": 0, "bbox": [107, 293, 62, 67], "area": 2912}, {"id": 3882043, "category_id": 74, "iscrowd": 0, "bbox": [548, 351, 54, 51], "area": 2154}, {"id": 7764596, "category_id": 76, "iscrowd": 0, "bbox": [0, 289, 73, 86], "area": 4873}, {"id": 263434, "category_id": 77, "iscrowd": 0, "bbox": [109, 238, 42, 53], "area": 1704}, {"id": 15197923, "category_id": 109, "iscrowd": 0, "bbox": [270, 0, 370, 254], "area": 55319}, {"id": 12695984, "category_id": 177, "iscrowd": 0, "bbox": [262, 156, 378, 119], "area": 5329}, {"id": 13486272, "category_id": 189, "iscrowd": 0, "bbox": [0, 181, 640, 299], "area": 81616}, {"id": 10985625, "category_id": 199, "iscrowd": 0, "bbox": [107, 0, 182, 182], "area": 23114}], "file_name": "000000046031.png", "image_id": 46031}, {"segments_info": [{"id": 4612695, "category_id": 1, "iscrowd": 0, "bbox": [407, 138, 96, 135], "area": 7826}, {"id": 3885420, "category_id": 65, "iscrowd": 0, "bbox": [276, 124, 364, 351], "area": 93794}, {"id": 1844044, "category_id": 84, "iscrowd": 0, "bbox": [166, 352, 54, 15], "area": 631}, {"id": 3950956, "category_id": 84, "iscrowd": 0, "bbox": [145, 269, 35, 11], "area": 364}, {"id": 4615556, "category_id": 130, "iscrowd": 0, "bbox": [177, 198, 463, 74], "area": 2701}, {"id": 2707583, "category_id": 189, "iscrowd": 0, "bbox": [146, 264, 125, 133], "area": 6582}, {"id": 4213593, "category_id": 190, "iscrowd": 0, "bbox": [0, 357, 492, 123], "area": 32681}, {"id": 1716843, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 396], "area": 148284}], "file_name": "000000046048.png", "image_id": 46048}, {"segments_info": [{"id": 4801865, "category_id": 1, "iscrowd": 0, "bbox": [337, 234, 87, 144], "area": 7020}, {"id": 4471351, "category_id": 1, "iscrowd": 0, "bbox": [471, 174, 60, 207], "area": 7101}, {"id": 7435411, "category_id": 1, "iscrowd": 0, "bbox": [144, 176, 132, 184], "area": 8493}, {"id": 3949372, "category_id": 39, "iscrowd": 0, "bbox": [206, 131, 30, 65], "area": 417}, {"id": 2828860, "category_id": 40, "iscrowd": 0, "bbox": [337, 276, 33, 30], "area": 635}, {"id": 6393227, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 283126}], "file_name": "000000046252.png", "image_id": 46252}, {"segments_info": [{"id": 2898499, "category_id": 16, "iscrowd": 0, "bbox": [282, 108, 224, 236], "area": 20462}, {"id": 7175556, "category_id": 17, "iscrowd": 0, "bbox": [2, 0, 608, 248], "area": 100123}, {"id": 5662831, "category_id": 190, "iscrowd": 0, "bbox": [241, 0, 399, 360], "area": 65589}], "file_name": "000000046378.png", "image_id": 46378}, {"segments_info": [{"id": 6513273, "category_id": 1, "iscrowd": 0, "bbox": [1, 40, 259, 355], "area": 25569}, {"id": 6848398, "category_id": 54, "iscrowd": 0, "bbox": [29, 72, 414, 260], "area": 79227}, {"id": 9142655, "category_id": 79, "iscrowd": 0, "bbox": [0, 0, 500, 118], "area": 32027}, {"id": 10396313, "category_id": 189, "iscrowd": 0, "bbox": [23, 0, 477, 400], "area": 14466}, {"id": 4338243, "category_id": 196, "iscrowd": 0, "bbox": [64, 0, 113, 40], "area": 3972}], "file_name": "000000046463.png", "image_id": 46463}, {"segments_info": [{"id": 2963015, "category_id": 1, "iscrowd": 0, "bbox": [16, 254, 91, 78], "area": 5440}, {"id": 6908561, "category_id": 1, "iscrowd": 0, "bbox": [189, 108, 172, 220], "area": 17133}, {"id": 7368303, "category_id": 1, "iscrowd": 0, "bbox": [133, 55, 199, 273], "area": 14622}, {"id": 13751247, "category_id": 9, "iscrowd": 0, "bbox": [1, 94, 179, 238], "area": 25666}, {"id": 8546883, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 500, 332], "area": 94974}], "file_name": "000000046497.png", "image_id": 46497}, {"segments_info": [{"id": 10265765, "category_id": 20, "iscrowd": 0, "bbox": [223, 63, 236, 301], "area": 47879}, {"id": 3956831, "category_id": 193, "iscrowd": 0, "bbox": [0, 13, 640, 467], "area": 206781}, {"id": 7573653, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 180], "area": 52249}], "file_name": "000000046804.png", "image_id": 46804}, {"segments_info": [{"id": 5263966, "category_id": 1, "iscrowd": 0, "bbox": [212, 44, 89, 153], "area": 1857}, {"id": 9147045, "category_id": 1, "iscrowd": 0, "bbox": [504, 128, 95, 243], "area": 11915}, {"id": 4145498, "category_id": 3, "iscrowd": 0, "bbox": [613, 153, 27, 22], "area": 349}, {"id": 6845569, "category_id": 3, "iscrowd": 0, "bbox": [592, 158, 14, 11], "area": 124}, {"id": 3421754, "category_id": 3, "iscrowd": 0, "bbox": [604, 147, 36, 24], "area": 346}, {"id": 4609119, "category_id": 8, "iscrowd": 0, "bbox": [0, 76, 491, 204], "area": 66014}, {"id": 7372684, "category_id": 149, "iscrowd": 0, "bbox": [414, 156, 195, 71], "area": 641}, {"id": 3427401, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 172], "area": 65458}, {"id": 14408920, "category_id": 187, "iscrowd": 0, "bbox": [162, 0, 478, 54], "area": 8692}, {"id": 6254204, "category_id": 191, "iscrowd": 0, "bbox": [138, 159, 502, 232], "area": 58756}, {"id": 8029063, "category_id": 197, "iscrowd": 0, "bbox": [471, 132, 60, 45], "area": 1255}], "file_name": "000000046872.png", "image_id": 46872}, {"segments_info": [{"id": 6052715, "category_id": 21, "iscrowd": 0, "bbox": [542, 360, 43, 46], "area": 1095}, {"id": 10199984, "category_id": 25, "iscrowd": 0, "bbox": [76, 211, 143, 108], "area": 4580}, {"id": 9409703, "category_id": 25, "iscrowd": 0, "bbox": [428, 204, 90, 101], "area": 2450}, {"id": 9738660, "category_id": 25, "iscrowd": 0, "bbox": [303, 200, 104, 110], "area": 3243}, {"id": 5201245, "category_id": 154, "iscrowd": 0, "bbox": [139, 215, 21, 12], "area": 131}, {"id": 11057592, "category_id": 178, "iscrowd": 0, "bbox": [0, 376, 394, 104], "area": 32844}, {"id": 4810586, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 287], "area": 136351}, {"id": 8949652, "category_id": 198, "iscrowd": 0, "bbox": [503, 307, 137, 40], "area": 1832}], "file_name": "000000047010.png", "image_id": 47010}, {"segments_info": [{"id": 6447214, "category_id": 1, "iscrowd": 0, "bbox": [503, 121, 137, 47], "area": 2390}, {"id": 2310236, "category_id": 44, "iscrowd": 0, "bbox": [552, 0, 16, 41], "area": 393}, {"id": 3953756, "category_id": 44, "iscrowd": 0, "bbox": [74, 70, 17, 9], "area": 130}, {"id": 6649201, "category_id": 44, "iscrowd": 0, "bbox": [62, 9, 24, 12], "area": 214}, {"id": 2769735, "category_id": 44, "iscrowd": 0, "bbox": [387, 15, 33, 20], "area": 444}, {"id": 4412500, "category_id": 44, "iscrowd": 0, "bbox": [384, 0, 32, 17], "area": 366}, {"id": 7304821, "category_id": 44, "iscrowd": 0, "bbox": [36, 62, 21, 9], "area": 157}, {"id": 4937562, "category_id": 44, "iscrowd": 0, "bbox": [64, 30, 25, 12], "area": 234}, {"id": 3359825, "category_id": 44, "iscrowd": 0, "bbox": [586, 7, 10, 30], "area": 244}, {"id": 1591910, "category_id": 44, "iscrowd": 0, "bbox": [535, 5, 16, 37], "area": 321}, {"id": 7502975, "category_id": 46, "iscrowd": 0, "bbox": [397, 33, 88, 173], "area": 10413}, {"id": 4418947, "category_id": 46, "iscrowd": 0, "bbox": [295, 12, 92, 196], "area": 12460}, {"id": 8950414, "category_id": 49, "iscrowd": 0, "bbox": [97, 229, 54, 9], "area": 274}, {"id": 8023647, "category_id": 51, "iscrowd": 0, "bbox": [500, 161, 140, 79], "area": 6681}, {"id": 3366534, "category_id": 59, "iscrowd": 0, "bbox": [114, 200, 526, 280], "area": 115665}, {"id": 3226434, "category_id": 62, "iscrowd": 0, "bbox": [88, 94, 30, 20], "area": 533}, {"id": 1317193, "category_id": 62, "iscrowd": 0, "bbox": [1, 104, 25, 38], "area": 374}, {"id": 1909813, "category_id": 62, "iscrowd": 0, "bbox": [165, 97, 26, 24], "area": 450}, {"id": 333341, "category_id": 62, "iscrowd": 0, "bbox": [605, 109, 34, 43], "area": 749}, {"id": 2042422, "category_id": 62, "iscrowd": 0, "bbox": [189, 97, 30, 27], "area": 543}, {"id": 4212816, "category_id": 62, "iscrowd": 0, "bbox": [274, 98, 29, 40], "area": 837}, {"id": 2503487, "category_id": 62, "iscrowd": 0, "bbox": [232, 99, 40, 30], "area": 1029}, {"id": 3948364, "category_id": 62, "iscrowd": 0, "bbox": [12, 76, 69, 140], "area": 4221}, {"id": 8880246, "category_id": 67, "iscrowd": 0, "bbox": [0, 189, 640, 285], "area": 31713}, {"id": 9205604, "category_id": 67, "iscrowd": 0, "bbox": [50, 103, 275, 108], "area": 22105}, {"id": 9949151, "category_id": 130, "iscrowd": 0, "bbox": [139, 0, 58, 38], "area": 983}, {"id": 10264995, "category_id": 181, "iscrowd": 0, "bbox": [595, 14, 45, 84], "area": 2496}, {"id": 1653085, "category_id": 188, "iscrowd": 0, "bbox": [341, 108, 154, 98], "area": 6321}, {"id": 6905950, "category_id": 189, "iscrowd": 0, "bbox": [0, 199, 606, 281], "area": 4293}, {"id": 7370878, "category_id": 195, "iscrowd": 0, "bbox": [248, 0, 42, 69], "area": 1801}, {"id": 4020077, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 192], "area": 39652}, {"id": 2764406, "category_id": 200, "iscrowd": 0, "bbox": [0, 134, 37, 109], "area": 2505}], "file_name": "000000047112.png", "image_id": 47112}, {"segments_info": [{"id": 856593, "category_id": 17, "iscrowd": 0, "bbox": [325, 71, 315, 322], "area": 64633}, {"id": 5271183, "category_id": 44, "iscrowd": 0, "bbox": [78, 106, 59, 146], "area": 6200}, {"id": 10263450, "category_id": 51, "iscrowd": 0, "bbox": [1, 206, 73, 54], "area": 3309}, {"id": 10398127, "category_id": 81, "iscrowd": 0, "bbox": [2, 123, 638, 351], "area": 111089}, {"id": 11908015, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 340], "area": 110116}], "file_name": "000000047121.png", "image_id": 47121}, {"segments_info": [{"id": 6119782, "category_id": 1, "iscrowd": 0, "bbox": [180, 115, 75, 164], "area": 5380}, {"id": 7367533, "category_id": 1, "iscrowd": 0, "bbox": [124, 131, 59, 87], "area": 2805}, {"id": 3424335, "category_id": 19, "iscrowd": 0, "bbox": [304, 164, 274, 194], "area": 24038}, {"id": 9802891, "category_id": 178, "iscrowd": 0, "bbox": [0, 372, 639, 268], "area": 123012}, {"id": 4354141, "category_id": 184, "iscrowd": 0, "bbox": [19, 150, 620, 97], "area": 6728}, {"id": 15978636, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 639, 227], "area": 108546}, {"id": 5278091, "category_id": 193, "iscrowd": 0, "bbox": [0, 223, 639, 44], "area": 3664}, {"id": 7111568, "category_id": 194, "iscrowd": 0, "bbox": [0, 235, 639, 405], "area": 103323}, {"id": 9873062, "category_id": 197, "iscrowd": 0, "bbox": [0, 164, 471, 103], "area": 18506}], "file_name": "000000047571.png", "image_id": 47571}, {"segments_info": [{"id": 9540760, "category_id": 1, "iscrowd": 0, "bbox": [54, 179, 194, 424], "area": 56896}, {"id": 1379863, "category_id": 1, "iscrowd": 0, "bbox": [356, 190, 68, 234], "area": 12216}, {"id": 3292229, "category_id": 1, "iscrowd": 0, "bbox": [347, 189, 34, 221], "area": 2204}, {"id": 7566470, "category_id": 1, "iscrowd": 0, "bbox": [400, 202, 24, 29], "area": 453}, {"id": 1251866, "category_id": 1, "iscrowd": 0, "bbox": [180, 123, 182, 481], "area": 44388}, {"id": 7891562, "category_id": 28, "iscrowd": 0, "bbox": [21, 9, 346, 234], "area": 23215}, {"id": 2696227, "category_id": 32, "iscrowd": 0, "bbox": [241, 205, 32, 131], "area": 860}, {"id": 2371645, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 424, 291], "area": 68650}, {"id": 802864, "category_id": 193, "iscrowd": 0, "bbox": [0, 260, 424, 380], "area": 61486}], "file_name": "000000047585.png", "image_id": 47585}, {"segments_info": [{"id": 4083834, "category_id": 1, "iscrowd": 0, "bbox": [487, 329, 35, 29], "area": 803}, {"id": 2304053, "category_id": 1, "iscrowd": 0, "bbox": [351, 39, 106, 96], "area": 4002}, {"id": 3751250, "category_id": 1, "iscrowd": 0, "bbox": [0, 147, 477, 209], "area": 52382}, {"id": 3755651, "category_id": 1, "iscrowd": 0, "bbox": [185, 329, 30, 30], "area": 622}, {"id": 8947572, "category_id": 38, "iscrowd": 0, "bbox": [227, 0, 413, 237], "area": 13509}, {"id": 6906308, "category_id": 38, "iscrowd": 0, "bbox": [281, 0, 185, 119], "area": 2039}, {"id": 5268858, "category_id": 154, "iscrowd": 0, "bbox": [0, 24, 640, 335], "area": 134233}, {"id": 12764357, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 44], "area": 13706}, {"id": 13947859, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 18], "area": 5171}], "file_name": "000000047740.png", "image_id": 47740}, {"segments_info": [{"id": 1380941, "category_id": 62, "iscrowd": 0, "bbox": [316, 274, 71, 95], "area": 5497}, {"id": 1711136, "category_id": 62, "iscrowd": 0, "bbox": [304, 277, 47, 65], "area": 502}, {"id": 2435631, "category_id": 62, "iscrowd": 0, "bbox": [221, 266, 67, 88], "area": 3628}, {"id": 2572134, "category_id": 63, "iscrowd": 0, "bbox": [1, 264, 197, 111], "area": 15750}, {"id": 8755886, "category_id": 67, "iscrowd": 0, "bbox": [201, 353, 112, 22], "area": 2208}, {"id": 4606028, "category_id": 72, "iscrowd": 0, "bbox": [384, 236, 106, 131], "area": 7027}, {"id": 1913425, "category_id": 118, "iscrowd": 0, "bbox": [196, 324, 161, 51], "area": 1720}, {"id": 7640502, "category_id": 130, "iscrowd": 0, "bbox": [78, 160, 237, 141], "area": 5530}, {"id": 4610151, "category_id": 181, "iscrowd": 0, "bbox": [179, 54, 244, 237], "area": 30866}, {"id": 7176861, "category_id": 186, "iscrowd": 0, "bbox": [98, 0, 294, 45], "area": 10709}, {"id": 1646116, "category_id": 189, "iscrowd": 0, "bbox": [200, 223, 152, 152], "area": 3493}, {"id": 8295855, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 94932}], "file_name": "000000047769.png", "image_id": 47769}, {"segments_info": [{"id": 3158065, "category_id": 1, "iscrowd": 0, "bbox": [601, 392, 5, 11], "area": 44}, {"id": 991261, "category_id": 1, "iscrowd": 0, "bbox": [590, 391, 10, 18], "area": 108}, {"id": 4870248, "category_id": 1, "iscrowd": 0, "bbox": [59, 81, 501, 450], "area": 140972}, {"id": 2106419, "category_id": 1, "iscrowd": 0, "bbox": [567, 398, 5, 19], "area": 70}, {"id": 1057821, "category_id": 1, "iscrowd": 0, "bbox": [580, 390, 8, 18], "area": 114}, {"id": 9017776, "category_id": 50, "iscrowd": 0, "bbox": [211, 233, 105, 39], "area": 961}, {"id": 9740739, "category_id": 61, "iscrowd": 0, "bbox": [243, 358, 95, 75], "area": 5896}, {"id": 3360314, "category_id": 184, "iscrowd": 0, "bbox": [0, 59, 612, 376], "area": 110690}, {"id": 2059609, "category_id": 193, "iscrowd": 0, "bbox": [0, 401, 612, 131], "area": 17846}], "file_name": "000000047801.png", "image_id": 47801}, {"segments_info": [{"id": 10522266, "category_id": 1, "iscrowd": 0, "bbox": [41, 83, 77, 225], "area": 10494}, {"id": 3488584, "category_id": 19, "iscrowd": 0, "bbox": [128, 91, 351, 238], "area": 19894}, {"id": 6113906, "category_id": 33, "iscrowd": 0, "bbox": [217, 101, 81, 50], "area": 3518}, {"id": 4141652, "category_id": 33, "iscrowd": 0, "bbox": [224, 63, 90, 61], "area": 3366}, {"id": 11515070, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 211], "area": 53263}, {"id": 10268851, "category_id": 192, "iscrowd": 0, "bbox": [0, 108, 500, 62], "area": 3874}], "file_name": "000000047819.png", "image_id": 47819}, {"segments_info": [{"id": 405318, "category_id": 1, "iscrowd": 0, "bbox": [72, 238, 27, 71], "area": 932}, {"id": 869732, "category_id": 1, "iscrowd": 0, "bbox": [88, 233, 19, 57], "area": 570}, {"id": 201502, "category_id": 1, "iscrowd": 0, "bbox": [104, 235, 14, 56], "area": 519}, {"id": 2574975, "category_id": 1, "iscrowd": 0, "bbox": [180, 161, 7, 14], "area": 64}, {"id": 1192010, "category_id": 1, "iscrowd": 0, "bbox": [0, 213, 10, 37], "area": 225}, {"id": 929352, "category_id": 1, "iscrowd": 0, "bbox": [26, 211, 11, 36], "area": 253}, {"id": 597032, "category_id": 1, "iscrowd": 0, "bbox": [20, 247, 19, 59], "area": 641}, {"id": 203561, "category_id": 1, "iscrowd": 0, "bbox": [37, 244, 22, 66], "area": 894}, {"id": 670557, "category_id": 1, "iscrowd": 0, "bbox": [16, 214, 11, 33], "area": 224}, {"id": 6238267, "category_id": 1, "iscrowd": 0, "bbox": [103, 164, 5, 6], "area": 19}, {"id": 336177, "category_id": 1, "iscrowd": 0, "bbox": [56, 243, 15, 55], "area": 484}, {"id": 7248569, "category_id": 3, "iscrowd": 0, "bbox": [15, 165, 14, 9], "area": 109}, {"id": 6182753, "category_id": 9, "iscrowd": 0, "bbox": [117, 155, 114, 66], "area": 5951}, {"id": 6830385, "category_id": 95, "iscrowd": 0, "bbox": [110, 64, 530, 81], "area": 14742}, {"id": 4952510, "category_id": 149, "iscrowd": 0, "bbox": [0, 147, 46, 69], "area": 1876}, {"id": 3612185, "category_id": 155, "iscrowd": 0, "bbox": [86, 136, 554, 182], "area": 82178}, {"id": 2441812, "category_id": 184, "iscrowd": 0, "bbox": [12, 95, 75, 78], "area": 3691}, {"id": 2105121, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 143], "area": 73510}, {"id": 2122899, "category_id": 191, "iscrowd": 0, "bbox": [0, 154, 157, 164], "area": 15718}, {"id": 11258589, "category_id": 197, "iscrowd": 0, "bbox": [0, 124, 30, 33], "area": 571}], "file_name": "000000047828.png", "image_id": 47828}, {"segments_info": [{"id": 10642534, "category_id": 1, "iscrowd": 0, "bbox": [90, 76, 341, 294], "area": 59708}, {"id": 5586215, "category_id": 15, "iscrowd": 0, "bbox": [0, 3, 500, 311], "area": 103642}, {"id": 7893335, "category_id": 118, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 20611}], "file_name": "000000048153.png", "image_id": 48153}, {"segments_info": [{"id": 5003112, "category_id": 1, "iscrowd": 0, "bbox": [125, 1, 233, 420], "area": 66012}, {"id": 6379601, "category_id": 1, "iscrowd": 0, "bbox": [406, 51, 194, 328], "area": 36706}, {"id": 9080213, "category_id": 47, "iscrowd": 0, "bbox": [526, 327, 62, 62], "area": 2517}, {"id": 2502725, "category_id": 49, "iscrowd": 0, "bbox": [281, 122, 29, 163], "area": 1569}, {"id": 1514853, "category_id": 61, "iscrowd": 0, "bbox": [380, 380, 109, 46], "area": 4581}, {"id": 597060, "category_id": 62, "iscrowd": 0, "bbox": [311, 216, 42, 200], "area": 2645}, {"id": 2042176, "category_id": 67, "iscrowd": 0, "bbox": [301, 328, 339, 93], "area": 11962}, {"id": 5135210, "category_id": 112, "iscrowd": 0, "bbox": [405, 0, 226, 355], "area": 16391}, {"id": 790881, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 383, 427], "area": 84881}, {"id": 3028556, "category_id": 189, "iscrowd": 0, "bbox": [304, 342, 336, 85], "area": 1720}, {"id": 1777451, "category_id": 190, "iscrowd": 0, "bbox": [374, 343, 58, 46], "area": 960}, {"id": 6647933, "category_id": 199, "iscrowd": 0, "bbox": [360, 0, 134, 363], "area": 17800}], "file_name": "000000048396.png", "image_id": 48396}, {"segments_info": [{"id": 1120039, "category_id": 1, "iscrowd": 0, "bbox": [529, 268, 57, 137], "area": 5156}, {"id": 726048, "category_id": 1, "iscrowd": 0, "bbox": [16, 251, 33, 52], "area": 940}, {"id": 6909555, "category_id": 15, "iscrowd": 0, "bbox": [0, 179, 212, 9], "area": 1543}, {"id": 5594725, "category_id": 15, "iscrowd": 0, "bbox": [0, 201, 153, 10], "area": 1364}, {"id": 5066835, "category_id": 22, "iscrowd": 0, "bbox": [353, 230, 179, 185], "area": 24471}, {"id": 3362158, "category_id": 22, "iscrowd": 0, "bbox": [198, 202, 171, 204], "area": 25870}, {"id": 14739693, "category_id": 130, "iscrowd": 0, "bbox": [478, 183, 31, 24], "area": 549}, {"id": 3692669, "category_id": 154, "iscrowd": 0, "bbox": [0, 321, 640, 106], "area": 30135}, {"id": 6382694, "category_id": 185, "iscrowd": 0, "bbox": [0, 165, 640, 145], "area": 13716}, {"id": 3884363, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 89], "area": 26289}, {"id": 1251359, "category_id": 188, "iscrowd": 0, "bbox": [134, 266, 21, 22], "area": 357}, {"id": 2045770, "category_id": 190, "iscrowd": 0, "bbox": [0, 288, 640, 60], "area": 8433}, {"id": 5989483, "category_id": 199, "iscrowd": 0, "bbox": [0, 12, 640, 297], "area": 99631}], "file_name": "000000048504.png", "image_id": 48504}, {"segments_info": [{"id": 7441563, "category_id": 1, "iscrowd": 0, "bbox": [209, 230, 38, 50], "area": 746}, {"id": 6124674, "category_id": 1, "iscrowd": 0, "bbox": [167, 231, 43, 59], "area": 1193}, {"id": 6849170, "category_id": 1, "iscrowd": 0, "bbox": [239, 225, 19, 31], "area": 267}, {"id": 1120544, "category_id": 19, "iscrowd": 0, "bbox": [215, 253, 57, 64], "area": 1171}, {"id": 2701636, "category_id": 19, "iscrowd": 0, "bbox": [238, 247, 52, 68], "area": 761}, {"id": 1120285, "category_id": 19, "iscrowd": 0, "bbox": [86, 252, 152, 82], "area": 4136}, {"id": 7046291, "category_id": 154, "iscrowd": 0, "bbox": [207, 290, 42, 34], "area": 396}], "file_name": "000000048555.png", "image_id": 48555}, {"segments_info": [{"id": 2235938, "category_id": 1, "iscrowd": 0, "bbox": [4, 1, 420, 630], "area": 198296}, {"id": 1118488, "category_id": 77, "iscrowd": 0, "bbox": [95, 153, 46, 81], "area": 1414}, {"id": 4670531, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 291, 172], "area": 6231}, {"id": 12889503, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 41562}, {"id": 3356472, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 251], "area": 19576}], "file_name": "000000048564.png", "image_id": 48564}, {"segments_info": [{"id": 3025962, "category_id": 4, "iscrowd": 0, "bbox": [284, 108, 184, 299], "area": 20976}, {"id": 1840404, "category_id": 27, "iscrowd": 0, "bbox": [384, 225, 60, 67], "area": 2962}, {"id": 3417889, "category_id": 31, "iscrowd": 0, "bbox": [266, 204, 79, 45], "area": 2589}, {"id": 4743751, "category_id": 166, "iscrowd": 0, "bbox": [129, 140, 176, 89], "area": 9630}, {"id": 2109495, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 179], "area": 82782}, {"id": 12304323, "category_id": 187, "iscrowd": 0, "bbox": [113, 0, 482, 106], "area": 20838}, {"id": 2961975, "category_id": 193, "iscrowd": 0, "bbox": [0, 152, 640, 273], "area": 131791}], "file_name": "000000048924.png", "image_id": 48924}, {"segments_info": [{"id": 6777189, "category_id": 1, "iscrowd": 0, "bbox": [513, 197, 23, 82], "area": 1001}, {"id": 7237486, "category_id": 1, "iscrowd": 0, "bbox": [483, 189, 28, 94], "area": 1731}, {"id": 4671559, "category_id": 1, "iscrowd": 0, "bbox": [502, 199, 18, 77], "area": 575}, {"id": 5066317, "category_id": 1, "iscrowd": 0, "bbox": [468, 176, 22, 96], "area": 1053}, {"id": 4277057, "category_id": 1, "iscrowd": 0, "bbox": [419, 149, 22, 81], "area": 692}, {"id": 4079678, "category_id": 1, "iscrowd": 0, "bbox": [451, 206, 24, 72], "area": 1069}, {"id": 3619127, "category_id": 7, "iscrowd": 0, "bbox": [11, 90, 629, 316], "area": 97947}, {"id": 9868691, "category_id": 128, "iscrowd": 0, "bbox": [0, 30, 435, 177], "area": 23743}, {"id": 9802900, "category_id": 144, "iscrowd": 0, "bbox": [0, 188, 534, 101], "area": 9474}, {"id": 2829098, "category_id": 147, "iscrowd": 0, "bbox": [0, 256, 227, 155], "area": 8586}, {"id": 6776675, "category_id": 151, "iscrowd": 0, "bbox": [529, 91, 65, 15], "area": 608}, {"id": 5986903, "category_id": 184, "iscrowd": 0, "bbox": [0, 35, 534, 105], "area": 17492}, {"id": 15329769, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 101], "area": 39879}, {"id": 10526880, "category_id": 191, "iscrowd": 0, "bbox": [224, 135, 416, 276], "area": 52344}, {"id": 3486772, "category_id": 194, "iscrowd": 0, "bbox": [0, 336, 19, 47], "area": 617}, {"id": 7829620, "category_id": 197, "iscrowd": 0, "bbox": [480, 62, 160, 73], "area": 1884}], "file_name": "000000049060.png", "image_id": 49060}, {"segments_info": [{"id": 7698810, "category_id": 92, "iscrowd": 0, "bbox": [0, 0, 640, 359], "area": 70100}, {"id": 15198184, "category_id": 187, "iscrowd": 0, "bbox": [225, 0, 415, 294], "area": 38226}, {"id": 4408903, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 165594}], "file_name": "000000049091.png", "image_id": 49091}, {"segments_info": [{"id": 5856885, "category_id": 1, "iscrowd": 0, "bbox": [165, 57, 121, 78], "area": 3015}, {"id": 12237718, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 427, 126], "area": 48103}, {"id": 8358540, "category_id": 191, "iscrowd": 0, "bbox": [0, 114, 427, 40], "area": 10094}, {"id": 5401704, "category_id": 193, "iscrowd": 0, "bbox": [0, 132, 427, 508], "area": 168437}], "file_name": "000000049259.png", "image_id": 49259}, {"segments_info": [{"id": 4678775, "category_id": 18, "iscrowd": 0, "bbox": [6, 315, 270, 318], "area": 52864}, {"id": 727085, "category_id": 19, "iscrowd": 0, "bbox": [91, 28, 337, 474], "area": 76057}, {"id": 1913393, "category_id": 184, "iscrowd": 0, "bbox": [0, 239, 296, 79], "area": 11283}, {"id": 8747634, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 431, 263], "area": 50933}, {"id": 3753285, "category_id": 192, "iscrowd": 0, "bbox": [0, 228, 103, 63], "area": 2458}, {"id": 1520689, "category_id": 193, "iscrowd": 0, "bbox": [0, 277, 431, 363], "area": 79234}], "file_name": "000000049269.png", "image_id": 49269}, {"segments_info": [{"id": 1320240, "category_id": 1, "iscrowd": 0, "bbox": [30, 170, 31, 83], "area": 1422}, {"id": 3425368, "category_id": 1, "iscrowd": 0, "bbox": [406, 170, 26, 76], "area": 737}, {"id": 2833222, "category_id": 1, "iscrowd": 0, "bbox": [459, 171, 24, 90], "area": 1219}, {"id": 9271414, "category_id": 1, "iscrowd": 0, "bbox": [472, 158, 117, 299], "area": 15551}, {"id": 1977406, "category_id": 1, "iscrowd": 0, "bbox": [156, 175, 21, 57], "area": 666}, {"id": 3162448, "category_id": 1, "iscrowd": 0, "bbox": [426, 167, 22, 86], "area": 1185}, {"id": 2309206, "category_id": 1, "iscrowd": 0, "bbox": [366, 171, 14, 58], "area": 189}, {"id": 2900308, "category_id": 1, "iscrowd": 0, "bbox": [380, 170, 18, 74], "area": 849}, {"id": 2636362, "category_id": 1, "iscrowd": 0, "bbox": [355, 167, 19, 72], "area": 733}, {"id": 4798259, "category_id": 1, "iscrowd": 0, "bbox": [551, 173, 35, 110], "area": 1376}, {"id": 2764347, "category_id": 1, "iscrowd": 0, "bbox": [176, 172, 34, 71], "area": 1021}, {"id": 4869208, "category_id": 1, "iscrowd": 0, "bbox": [332, 167, 37, 96], "area": 1395}, {"id": 3557981, "category_id": 1, "iscrowd": 0, "bbox": [211, 167, 32, 110], "area": 1833}, {"id": 2833743, "category_id": 1, "iscrowd": 1, "bbox": [45, 167, 520, 66], "area": 2880}, {"id": 12831949, "category_id": 37, "iscrowd": 0, "bbox": [487, 133, 34, 34], "area": 866}, {"id": 658455, "category_id": 109, "iscrowd": 0, "bbox": [0, 37, 281, 149], "area": 17497}, {"id": 793650, "category_id": 112, "iscrowd": 0, "bbox": [150, 153, 21, 35], "area": 498}, {"id": 5267568, "category_id": 130, "iscrowd": 0, "bbox": [306, 13, 122, 56], "area": 768}, {"id": 5860483, "category_id": 176, "iscrowd": 0, "bbox": [303, 0, 337, 137], "area": 19103}, {"id": 2114664, "category_id": 177, "iscrowd": 0, "bbox": [0, 138, 640, 95], "area": 13023}, {"id": 991050, "category_id": 181, "iscrowd": 0, "bbox": [308, 0, 332, 121], "area": 8495}, {"id": 7974298, "category_id": 184, "iscrowd": 0, "bbox": [509, 153, 131, 41], "area": 2421}, {"id": 5275568, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 323, 75], "area": 17591}, {"id": 7893843, "category_id": 190, "iscrowd": 0, "bbox": [0, 198, 640, 259], "area": 135554}, {"id": 4546939, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 240], "area": 44176}], "file_name": "000000049759.png", "image_id": 49759}, {"segments_info": [{"id": 13748947, "category_id": 16, "iscrowd": 0, "bbox": [420, 218, 4, 4], "area": 9}, {"id": 11774634, "category_id": 16, "iscrowd": 0, "bbox": [407, 199, 7, 7], "area": 37}, {"id": 13488086, "category_id": 16, "iscrowd": 0, "bbox": [467, 245, 5, 4], "area": 15}, {"id": 11841717, "category_id": 16, "iscrowd": 0, "bbox": [365, 222, 7, 12], "area": 34}, {"id": 11973297, "category_id": 16, "iscrowd": 0, "bbox": [442, 241, 3, 3], "area": 7}, {"id": 11973056, "category_id": 16, "iscrowd": 0, "bbox": [395, 220, 8, 12], "area": 37}, {"id": 13552342, "category_id": 16, "iscrowd": 0, "bbox": [389, 223, 6, 6], "area": 26}, {"id": 12236732, "category_id": 16, "iscrowd": 0, "bbox": [461, 213, 5, 7], "area": 18}, {"id": 14342620, "category_id": 16, "iscrowd": 0, "bbox": [519, 206, 3, 3], "area": 6}, {"id": 15066341, "category_id": 16, "iscrowd": 0, "bbox": [505, 225, 5, 5], "area": 14}, {"id": 12499899, "category_id": 16, "iscrowd": 0, "bbox": [333, 207, 9, 6], "area": 25}, {"id": 14211290, "category_id": 16, "iscrowd": 0, "bbox": [525, 204, 5, 3], "area": 10}, {"id": 12499391, "category_id": 16, "iscrowd": 0, "bbox": [487, 219, 11, 9], "area": 78}, {"id": 11445931, "category_id": 16, "iscrowd": 1, "bbox": [0, 169, 640, 82], "area": 40265}, {"id": 6119267, "category_id": 24, "iscrowd": 0, "bbox": [129, 249, 84, 50], "area": 2626}, {"id": 6645353, "category_id": 24, "iscrowd": 0, "bbox": [263, 243, 88, 49], "area": 2446}, {"id": 6776938, "category_id": 24, "iscrowd": 0, "bbox": [518, 234, 56, 56], "area": 1968}, {"id": 7105646, "category_id": 24, "iscrowd": 0, "bbox": [346, 249, 81, 42], "area": 2164}, {"id": 11645877, "category_id": 178, "iscrowd": 0, "bbox": [0, 155, 640, 61], "area": 10533}, {"id": 9734015, "category_id": 184, "iscrowd": 0, "bbox": [0, 99, 640, 77], "area": 33091}, {"id": 10326665, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 128], "area": 70910}, {"id": 7510934, "category_id": 193, "iscrowd": 0, "bbox": [0, 267, 640, 212], "area": 115257}, {"id": 8948879, "category_id": 194, "iscrowd": 0, "bbox": [0, 232, 640, 61], "area": 18269}], "file_name": "000000049761.png", "image_id": 49761}, {"segments_info": [{"id": 6588547, "category_id": 15, "iscrowd": 0, "bbox": [184, 68, 456, 332], "area": 89712}, {"id": 8552816, "category_id": 17, "iscrowd": 0, "bbox": [1, 181, 172, 238], "area": 27855}, {"id": 7570580, "category_id": 17, "iscrowd": 0, "bbox": [114, 141, 525, 283], "area": 66696}, {"id": 2308158, "category_id": 118, "iscrowd": 0, "bbox": [186, 253, 454, 171], "area": 3842}, {"id": 2370078, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 208, 424], "area": 42169}], "file_name": "000000049810.png", "image_id": 49810}, {"segments_info": [{"id": 3684950, "category_id": 1, "iscrowd": 0, "bbox": [632, 266, 6, 10], "area": 33}, {"id": 4868173, "category_id": 1, "iscrowd": 0, "bbox": [396, 262, 5, 13], "area": 43}, {"id": 5922127, "category_id": 9, "iscrowd": 0, "bbox": [474, 325, 136, 80], "area": 3960}, {"id": 8026217, "category_id": 9, "iscrowd": 0, "bbox": [486, 260, 6, 4], "area": 19}, {"id": 5394756, "category_id": 9, "iscrowd": 0, "bbox": [530, 333, 109, 59], "area": 3072}, {"id": 5858656, "category_id": 9, "iscrowd": 0, "bbox": [5, 361, 240, 110], "area": 13093}, {"id": 5853252, "category_id": 9, "iscrowd": 0, "bbox": [384, 248, 43, 38], "area": 1129}, {"id": 5593168, "category_id": 9, "iscrowd": 0, "bbox": [331, 374, 207, 46], "area": 5916}, {"id": 6318947, "category_id": 9, "iscrowd": 0, "bbox": [202, 357, 137, 95], "area": 5578}, {"id": 4334888, "category_id": 28, "iscrowd": 0, "bbox": [572, 253, 1, 1], "area": 1}, {"id": 5716330, "category_id": 28, "iscrowd": 0, "bbox": [567, 248, 15, 5], "area": 49}, {"id": 5853766, "category_id": 95, "iscrowd": 0, "bbox": [414, 250, 226, 37], "area": 4695}, {"id": 4877175, "category_id": 125, "iscrowd": 0, "bbox": [376, 428, 109, 28], "area": 1992}, {"id": 6384477, "category_id": 130, "iscrowd": 0, "bbox": [233, 291, 20, 15], "area": 191}, {"id": 5140337, "category_id": 144, "iscrowd": 0, "bbox": [534, 403, 28, 8], "area": 150}, {"id": 5794412, "category_id": 149, "iscrowd": 0, "bbox": [498, 444, 142, 36], "area": 3148}, {"id": 8618089, "category_id": 155, "iscrowd": 0, "bbox": [0, 249, 640, 231], "area": 66338}, {"id": 5197869, "category_id": 184, "iscrowd": 0, "bbox": [0, 169, 640, 311], "area": 38013}, {"id": 2702645, "category_id": 185, "iscrowd": 0, "bbox": [88, 449, 170, 31], "area": 3287}, {"id": 14670542, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 205], "area": 118454}, {"id": 6262938, "category_id": 191, "iscrowd": 0, "bbox": [359, 413, 281, 67], "area": 8262}, {"id": 11183226, "category_id": 192, "iscrowd": 0, "bbox": [79, 173, 263, 47], "area": 5358}, {"id": 1135931, "category_id": 193, "iscrowd": 0, "bbox": [265, 398, 375, 82], "area": 6993}, {"id": 6642501, "category_id": 197, "iscrowd": 0, "bbox": [267, 192, 373, 77], "area": 12238}], "file_name": "000000050006.png", "image_id": 50006}, {"segments_info": [{"id": 6250335, "category_id": 1, "iscrowd": 0, "bbox": [470, 157, 10, 31], "area": 223}, {"id": 6645093, "category_id": 1, "iscrowd": 0, "bbox": [204, 92, 175, 228], "area": 15016}, {"id": 6118749, "category_id": 1, "iscrowd": 0, "bbox": [361, 154, 27, 55], "area": 807}, {"id": 5723991, "category_id": 1, "iscrowd": 0, "bbox": [177, 163, 43, 61], "area": 1399}, {"id": 6052956, "category_id": 2, "iscrowd": 0, "bbox": [349, 179, 40, 60], "area": 747}, {"id": 1250067, "category_id": 2, "iscrowd": 0, "bbox": [243, 196, 35, 35], "area": 715}, {"id": 3552822, "category_id": 2, "iscrowd": 0, "bbox": [153, 221, 219, 95], "area": 7491}, {"id": 3815994, "category_id": 2, "iscrowd": 0, "bbox": [390, 186, 21, 25], "area": 265}, {"id": 8158332, "category_id": 27, "iscrowd": 0, "bbox": [182, 187, 25, 42], "area": 753}, {"id": 14277081, "category_id": 28, "iscrowd": 0, "bbox": [177, 144, 71, 21], "area": 931}, {"id": 9737364, "category_id": 28, "iscrowd": 0, "bbox": [425, 143, 47, 23], "area": 748}, {"id": 13158600, "category_id": 130, "iscrowd": 0, "bbox": [370, 72, 44, 28], "area": 595}, {"id": 8618883, "category_id": 166, "iscrowd": 0, "bbox": [0, 13, 480, 267], "area": 49202}, {"id": 9408399, "category_id": 181, "iscrowd": 0, "bbox": [0, 129, 41, 82], "area": 2898}, {"id": 15987699, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 159], "area": 43450}, {"id": 8882055, "category_id": 191, "iscrowd": 0, "bbox": [0, 183, 480, 137], "area": 24487}], "file_name": "000000050145.png", "image_id": 50145}, {"segments_info": [{"id": 7836327, "category_id": 51, "iscrowd": 0, "bbox": [409, 337, 90, 27], "area": 1792}, {"id": 2719647, "category_id": 52, "iscrowd": 0, "bbox": [294, 160, 75, 97], "area": 4661}, {"id": 4106942, "category_id": 52, "iscrowd": 0, "bbox": [131, 185, 96, 168], "area": 10769}, {"id": 1600904, "category_id": 52, "iscrowd": 0, "bbox": [403, 58, 74, 120], "area": 6477}, {"id": 2065559, "category_id": 52, "iscrowd": 0, "bbox": [441, 202, 10, 19], "area": 89}, {"id": 2195618, "category_id": 52, "iscrowd": 0, "bbox": [367, 104, 11, 18], "area": 157}, {"id": 2789293, "category_id": 52, "iscrowd": 0, "bbox": [93, 36, 87, 159], "area": 9999}, {"id": 2526114, "category_id": 52, "iscrowd": 0, "bbox": [270, 122, 14, 34], "area": 253}, {"id": 2193809, "category_id": 52, "iscrowd": 0, "bbox": [417, 171, 83, 124], "area": 6625}, {"id": 3574949, "category_id": 52, "iscrowd": 0, "bbox": [73, 205, 42, 54], "area": 1648}, {"id": 2524318, "category_id": 52, "iscrowd": 0, "bbox": [295, 56, 20, 20], "area": 135}, {"id": 4299441, "category_id": 52, "iscrowd": 0, "bbox": [36, 40, 70, 162], "area": 5914}, {"id": 2267838, "category_id": 52, "iscrowd": 0, "bbox": [119, 104, 14, 28], "area": 177}, {"id": 3050666, "category_id": 52, "iscrowd": 0, "bbox": [177, 41, 83, 158], "area": 10274}, {"id": 4032415, "category_id": 52, "iscrowd": 1, "bbox": [10, 41, 404, 153], "area": 23901}, {"id": 4871776, "category_id": 100, "iscrowd": 0, "bbox": [153, 349, 45, 27], "area": 974}, {"id": 4277836, "category_id": 109, "iscrowd": 0, "bbox": [178, 65, 322, 311], "area": 34568}, {"id": 3752778, "category_id": 122, "iscrowd": 0, "bbox": [107, 0, 80, 376], "area": 6051}, {"id": 10129787, "category_id": 185, "iscrowd": 0, "bbox": [33, 11, 68, 344], "area": 6288}, {"id": 10202812, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 376], "area": 38561}], "file_name": "000000050149.png", "image_id": 50149}, {"segments_info": [{"id": 4478830, "category_id": 7, "iscrowd": 0, "bbox": [116, 247, 337, 81], "area": 20000}, {"id": 4285555, "category_id": 147, "iscrowd": 0, "bbox": [163, 314, 466, 31], "area": 5925}, {"id": 4415604, "category_id": 151, "iscrowd": 0, "bbox": [30, 255, 40, 34], "area": 919}, {"id": 4280926, "category_id": 184, "iscrowd": 0, "bbox": [99, 199, 541, 78], "area": 17156}, {"id": 13803672, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 170], "area": 90798}, {"id": 7825511, "category_id": 192, "iscrowd": 0, "bbox": [0, 111, 640, 144], "area": 52007}, {"id": 2512472, "category_id": 193, "iscrowd": 0, "bbox": [0, 250, 640, 181], "area": 81642}, {"id": 7040632, "category_id": 197, "iscrowd": 0, "bbox": [0, 234, 154, 25], "area": 2554}], "file_name": "000000050165.png", "image_id": 50165}, {"segments_info": [{"id": 5724504, "category_id": 1, "iscrowd": 0, "bbox": [11, 33, 170, 254], "area": 12359}, {"id": 6454450, "category_id": 38, "iscrowd": 0, "bbox": [437, 96, 63, 51], "area": 873}, {"id": 3487015, "category_id": 62, "iscrowd": 0, "bbox": [313, 0, 187, 260], "area": 9394}, {"id": 10922924, "category_id": 154, "iscrowd": 0, "bbox": [0, 95, 500, 280], "area": 73653}, {"id": 13023660, "category_id": 155, "iscrowd": 0, "bbox": [0, 15, 500, 333], "area": 39072}, {"id": 12625810, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 236], "area": 51791}], "file_name": "000000050326.png", "image_id": 50326}, {"segments_info": [{"id": 7963000, "category_id": 56, "iscrowd": 0, "bbox": [34, 157, 78, 111], "area": 4277}, {"id": 8691342, "category_id": 56, "iscrowd": 0, "bbox": [367, 93, 138, 143], "area": 12211}, {"id": 8226684, "category_id": 64, "iscrowd": 0, "bbox": [299, 91, 341, 389], "area": 88110}, {"id": 7766140, "category_id": 64, "iscrowd": 0, "bbox": [1, 57, 398, 417], "area": 122089}, {"id": 7631974, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 36, 35], "area": 811}, {"id": 9278124, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 75894}], "file_name": "000000050331.png", "image_id": 50331}, {"segments_info": [{"id": 9741761, "category_id": 1, "iscrowd": 0, "bbox": [189, 38, 136, 262], "area": 10662}, {"id": 5722713, "category_id": 1, "iscrowd": 0, "bbox": [333, 0, 219, 422], "area": 53117}, {"id": 855310, "category_id": 1, "iscrowd": 0, "bbox": [0, 109, 69, 296], "area": 8929}, {"id": 4216692, "category_id": 19, "iscrowd": 0, "bbox": [203, 166, 148, 257], "area": 25279}, {"id": 920844, "category_id": 62, "iscrowd": 0, "bbox": [1, 253, 119, 173], "area": 10207}, {"id": 11778749, "category_id": 112, "iscrowd": 0, "bbox": [293, 0, 129, 213], "area": 15795}, {"id": 3162252, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 609, 323], "area": 42885}, {"id": 8621718, "category_id": 181, "iscrowd": 0, "bbox": [94, 0, 467, 154], "area": 24217}, {"id": 4879485, "category_id": 184, "iscrowd": 0, "bbox": [533, 0, 107, 206], "area": 11021}, {"id": 4014405, "category_id": 191, "iscrowd": 0, "bbox": [0, 182, 640, 245], "area": 68873}], "file_name": "000000050380.png", "image_id": 50380}, {"segments_info": [{"id": 6448204, "category_id": 1, "iscrowd": 0, "bbox": [345, 65, 128, 317], "area": 22351}, {"id": 2046030, "category_id": 88, "iscrowd": 0, "bbox": [415, 169, 73, 97], "area": 2478}, {"id": 7506338, "category_id": 194, "iscrowd": 0, "bbox": [334, 67, 306, 326], "area": 53025}], "file_name": "000000050638.png", "image_id": 50638}, {"segments_info": [{"id": 12174278, "category_id": 3, "iscrowd": 0, "bbox": [33, 189, 100, 34], "area": 2318}, {"id": 5264471, "category_id": 3, "iscrowd": 0, "bbox": [0, 192, 57, 29], "area": 656}, {"id": 9474961, "category_id": 3, "iscrowd": 0, "bbox": [608, 205, 19, 14], "area": 211}, {"id": 9610660, "category_id": 3, "iscrowd": 0, "bbox": [346, 185, 41, 36], "area": 977}, {"id": 5592706, "category_id": 3, "iscrowd": 0, "bbox": [450, 195, 28, 24], "area": 467}, {"id": 7895929, "category_id": 3, "iscrowd": 0, "bbox": [476, 168, 88, 56], "area": 4216}, {"id": 6711146, "category_id": 3, "iscrowd": 0, "bbox": [418, 197, 33, 22], "area": 585}, {"id": 11777719, "category_id": 3, "iscrowd": 0, "bbox": [382, 197, 34, 22], "area": 542}, {"id": 12764874, "category_id": 3, "iscrowd": 0, "bbox": [564, 205, 6, 14], "area": 65}, {"id": 7435642, "category_id": 3, "iscrowd": 0, "bbox": [406, 194, 30, 12], "area": 170}, {"id": 8948382, "category_id": 3, "iscrowd": 0, "bbox": [571, 211, 14, 8], "area": 104}, {"id": 8883090, "category_id": 3, "iscrowd": 0, "bbox": [587, 207, 17, 12], "area": 169}, {"id": 2512038, "category_id": 55, "iscrowd": 0, "bbox": [134, 100, 213, 213], "area": 35912}, {"id": 6645866, "category_id": 149, "iscrowd": 0, "bbox": [0, 201, 640, 226], "area": 117024}, {"id": 5268587, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 222], "area": 37011}, {"id": 15855339, "category_id": 187, "iscrowd": 0, "bbox": [61, 0, 579, 221], "area": 72390}], "file_name": "000000050679.png", "image_id": 50679}, {"segments_info": [{"id": 3953771, "category_id": 1, "iscrowd": 0, "bbox": [72, 66, 392, 425], "area": 100957}, {"id": 6453639, "category_id": 32, "iscrowd": 0, "bbox": [239, 264, 64, 154], "area": 3869}, {"id": 6327203, "category_id": 44, "iscrowd": 0, "bbox": [525, 317, 70, 276], "area": 14240}, {"id": 3363688, "category_id": 44, "iscrowd": 0, "bbox": [448, 333, 20, 108], "area": 1049}, {"id": 6195100, "category_id": 44, "iscrowd": 0, "bbox": [449, 315, 73, 261], "area": 13216}, {"id": 8167348, "category_id": 51, "iscrowd": 0, "bbox": [165, 449, 204, 87], "area": 12451}, {"id": 5476274, "category_id": 67, "iscrowd": 0, "bbox": [3, 451, 637, 145], "area": 54219}, {"id": 5728112, "category_id": 75, "iscrowd": 0, "bbox": [595, 478, 45, 40], "area": 1196}, {"id": 3361130, "category_id": 77, "iscrowd": 0, "bbox": [10, 473, 45, 26], "area": 735}, {"id": 2772341, "category_id": 177, "iscrowd": 0, "bbox": [0, 339, 640, 87], "area": 10207}, {"id": 5806266, "category_id": 189, "iscrowd": 0, "bbox": [0, 478, 640, 127], "area": 7405}, {"id": 6257033, "category_id": 190, "iscrowd": 0, "bbox": [0, 410, 640, 69], "area": 6020}, {"id": 11583950, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 366], "area": 160649}], "file_name": "000000050811.png", "image_id": 50811}, {"segments_info": [{"id": 921101, "category_id": 33, "iscrowd": 0, "bbox": [84, 334, 75, 74], "area": 3351}, {"id": 4276289, "category_id": 62, "iscrowd": 0, "bbox": [1, 275, 124, 196], "area": 14639}, {"id": 9471876, "category_id": 65, "iscrowd": 0, "bbox": [147, 189, 458, 291], "area": 92989}, {"id": 8487810, "category_id": 75, "iscrowd": 0, "bbox": [63, 234, 19, 19], "area": 221}, {"id": 8617852, "category_id": 189, "iscrowd": 0, "bbox": [0, 231, 166, 137], "area": 7782}, {"id": 7174014, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 314], "area": 150338}, {"id": 1974046, "category_id": 200, "iscrowd": 0, "bbox": [0, 306, 640, 174], "area": 37299}], "file_name": "000000050828.png", "image_id": 50828}, {"segments_info": [{"id": 8425923, "category_id": 88, "iscrowd": 0, "bbox": [95, 145, 234, 336], "area": 42547}, {"id": 1661833, "category_id": 88, "iscrowd": 0, "bbox": [13, 49, 199, 335], "area": 36400}, {"id": 2383058, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 334, 302], "area": 45974}], "file_name": "000000050844.png", "image_id": 50844}, {"segments_info": [{"id": 3816540, "category_id": 51, "iscrowd": 0, "bbox": [49, 58, 531, 537], "area": 80189}, {"id": 399732, "category_id": 55, "iscrowd": 0, "bbox": [84, 287, 115, 115], "area": 7502}, {"id": 998568, "category_id": 55, "iscrowd": 0, "bbox": [192, 157, 138, 140], "area": 15305}, {"id": 135262, "category_id": 55, "iscrowd": 0, "bbox": [202, 87, 136, 94], "area": 8858}, {"id": 1128615, "category_id": 55, "iscrowd": 0, "bbox": [256, 347, 127, 143], "area": 14636}, {"id": 68709, "category_id": 55, "iscrowd": 0, "bbox": [200, 286, 114, 106], "area": 7365}, {"id": 200793, "category_id": 55, "iscrowd": 0, "bbox": [339, 121, 135, 126], "area": 12423}, {"id": 2055612, "category_id": 55, "iscrowd": 0, "bbox": [248, 466, 141, 108], "area": 10520}, {"id": 532356, "category_id": 55, "iscrowd": 0, "bbox": [297, 226, 147, 145], "area": 13893}, {"id": 1455518, "category_id": 55, "iscrowd": 0, "bbox": [114, 345, 145, 153], "area": 17219}, {"id": 403586, "category_id": 55, "iscrowd": 0, "bbox": [442, 215, 115, 141], "area": 12514}, {"id": 268398, "category_id": 55, "iscrowd": 0, "bbox": [142, 181, 71, 127], "area": 6250}, {"id": 1523106, "category_id": 55, "iscrowd": 0, "bbox": [381, 329, 151, 164], "area": 18707}, {"id": 7629168, "category_id": 67, "iscrowd": 0, "bbox": [1, 1, 635, 626], "area": 167157}, {"id": 8089460, "category_id": 200, "iscrowd": 0, "bbox": [0, 0, 640, 640], "area": 15745}], "file_name": "000000050896.png", "image_id": 50896}, {"segments_info": [{"id": 4998984, "category_id": 1, "iscrowd": 0, "bbox": [312, 192, 30, 30], "area": 390}, {"id": 6051923, "category_id": 42, "iscrowd": 0, "bbox": [320, 220, 36, 6], "area": 141}, {"id": 10917511, "category_id": 155, "iscrowd": 0, "bbox": [0, 83, 640, 236], "area": 125561}, {"id": 8482666, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 149], "area": 78023}], "file_name": "000000050943.png", "image_id": 50943}, {"segments_info": [{"id": 9475740, "category_id": 17, "iscrowd": 0, "bbox": [0, 130, 403, 350], "area": 105410}, {"id": 9605002, "category_id": 73, "iscrowd": 0, "bbox": [237, 2, 403, 470], "area": 132833}], "file_name": "000000051008.png", "image_id": 51008}, {"segments_info": [{"id": 2568250, "category_id": 19, "iscrowd": 0, "bbox": [320, 81, 303, 192], "area": 31012}, {"id": 2178147, "category_id": 19, "iscrowd": 0, "bbox": [11, 163, 198, 110], "area": 10114}, {"id": 2437432, "category_id": 19, "iscrowd": 0, "bbox": [205, 106, 146, 164], "area": 14318}, {"id": 2963009, "category_id": 19, "iscrowd": 0, "bbox": [68, 47, 274, 225], "area": 14386}, {"id": 8687240, "category_id": 128, "iscrowd": 0, "bbox": [0, 59, 89, 98], "area": 5049}, {"id": 6651246, "category_id": 184, "iscrowd": 0, "bbox": [0, 14, 617, 179], "area": 25992}, {"id": 13882064, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 88], "area": 32055}, {"id": 3436939, "category_id": 193, "iscrowd": 0, "bbox": [0, 73, 640, 287], "area": 86904}, {"id": 3820377, "category_id": 199, "iscrowd": 0, "bbox": [493, 211, 147, 64], "area": 5329}], "file_name": "000000051309.png", "image_id": 51309}, {"segments_info": [{"id": 3423034, "category_id": 1, "iscrowd": 0, "bbox": [228, 38, 217, 305], "area": 35385}, {"id": 10732487, "category_id": 42, "iscrowd": 0, "bbox": [46, 251, 169, 79], "area": 6872}, {"id": 7569023, "category_id": 154, "iscrowd": 0, "bbox": [0, 34, 222, 94], "area": 4113}, {"id": 6910303, "category_id": 155, "iscrowd": 0, "bbox": [0, 52, 640, 428], "area": 173696}, {"id": 11772048, "category_id": 187, "iscrowd": 0, "bbox": [150, 0, 490, 260], "area": 58013}, {"id": 4149331, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 279], "area": 28574}], "file_name": "000000051314.png", "image_id": 51314}, {"segments_info": [{"id": 879809, "category_id": 86, "iscrowd": 0, "bbox": [346, 159, 293, 263], "area": 64029}, {"id": 6185933, "category_id": 119, "iscrowd": 0, "bbox": [317, 20, 323, 205], "area": 34546}, {"id": 5206153, "category_id": 156, "iscrowd": 0, "bbox": [552, 11, 88, 120], "area": 5755}, {"id": 529439, "category_id": 186, "iscrowd": 0, "bbox": [100, 15, 90, 91], "area": 5127}, {"id": 264723, "category_id": 189, "iscrowd": 0, "bbox": [286, 383, 73, 44], "area": 2096}, {"id": 5731205, "category_id": 191, "iscrowd": 0, "bbox": [116, 233, 31, 194], "area": 2759}, {"id": 7114658, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 640, 374], "area": 26132}, {"id": 1200291, "category_id": 196, "iscrowd": 0, "bbox": [121, 0, 519, 427], "area": 92080}, {"id": 4083031, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 37536}], "file_name": "000000051326.png", "image_id": 51326}, {"segments_info": [{"id": 5602230, "category_id": 44, "iscrowd": 0, "bbox": [101, 319, 15, 27], "area": 228}, {"id": 5272489, "category_id": 81, "iscrowd": 0, "bbox": [0, 431, 141, 106], "area": 10124}, {"id": 4158392, "category_id": 112, "iscrowd": 0, "bbox": [250, 167, 110, 448], "area": 43069}, {"id": 4096970, "category_id": 133, "iscrowd": 0, "bbox": [0, 119, 76, 197], "area": 11933}, {"id": 1384252, "category_id": 156, "iscrowd": 0, "bbox": [70, 332, 75, 37], "area": 1416}, {"id": 999293, "category_id": 190, "iscrowd": 0, "bbox": [60, 544, 300, 96], "area": 7584}, {"id": 5542096, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 360, 640], "area": 137548}], "file_name": "000000051598.png", "image_id": 51598}, {"segments_info": [{"id": 10263708, "category_id": 1, "iscrowd": 0, "bbox": [346, 98, 241, 303], "area": 41910}, {"id": 15527148, "category_id": 65, "iscrowd": 0, "bbox": [0, 301, 640, 120], "area": 30574}, {"id": 7960953, "category_id": 73, "iscrowd": 0, "bbox": [45, 216, 249, 187], "area": 21144}, {"id": 16579836, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 366], "area": 173485}], "file_name": "000000051610.png", "image_id": 51610}, {"segments_info": [{"id": 6445911, "category_id": 1, "iscrowd": 0, "bbox": [142, 52, 163, 245], "area": 19305}, {"id": 12234942, "category_id": 35, "iscrowd": 0, "bbox": [79, 259, 251, 73], "area": 3416}, {"id": 15393499, "category_id": 159, "iscrowd": 0, "bbox": [0, 33, 640, 335], "area": 91596}, {"id": 5593424, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 326], "area": 120238}], "file_name": "000000051712.png", "image_id": 51712}, {"segments_info": [{"id": 3286302, "category_id": 33, "iscrowd": 0, "bbox": [2, 207, 52, 74], "area": 3120}, {"id": 7692363, "category_id": 62, "iscrowd": 0, "bbox": [104, 162, 113, 58], "area": 4546}, {"id": 6185570, "category_id": 65, "iscrowd": 0, "bbox": [107, 117, 393, 258], "area": 72367}, {"id": 6841949, "category_id": 109, "iscrowd": 0, "bbox": [137, 53, 65, 129], "area": 5880}, {"id": 8094855, "category_id": 130, "iscrowd": 0, "bbox": [179, 76, 133, 127], "area": 3279}, {"id": 16447993, "category_id": 180, "iscrowd": 0, "bbox": [0, 47, 142, 188], "area": 20343}, {"id": 15328482, "category_id": 181, "iscrowd": 0, "bbox": [0, 112, 135, 117], "area": 1525}, {"id": 7369843, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 58945}, {"id": 4936274, "category_id": 200, "iscrowd": 0, "bbox": [0, 224, 160, 151], "area": 14196}], "file_name": "000000051738.png", "image_id": 51738}, {"segments_info": [{"id": 7036484, "category_id": 1, "iscrowd": 0, "bbox": [399, 201, 7, 20], "area": 85}, {"id": 6243908, "category_id": 1, "iscrowd": 0, "bbox": [406, 222, 11, 28], "area": 161}, {"id": 8148566, "category_id": 1, "iscrowd": 0, "bbox": [497, 210, 5, 12], "area": 45}, {"id": 7293509, "category_id": 1, "iscrowd": 0, "bbox": [412, 219, 11, 15], "area": 76}, {"id": 7161656, "category_id": 1, "iscrowd": 0, "bbox": [506, 208, 4, 13], "area": 38}, {"id": 6832436, "category_id": 1, "iscrowd": 0, "bbox": [529, 201, 7, 16], "area": 52}, {"id": 6308150, "category_id": 1, "iscrowd": 0, "bbox": [362, 224, 17, 36], "area": 285}, {"id": 7030588, "category_id": 1, "iscrowd": 0, "bbox": [511, 205, 7, 11], "area": 43}, {"id": 6636914, "category_id": 1, "iscrowd": 0, "bbox": [271, 241, 7, 21], "area": 94}, {"id": 6971768, "category_id": 1, "iscrowd": 0, "bbox": [278, 159, 52, 119], "area": 3738}, {"id": 7493476, "category_id": 1, "iscrowd": 0, "bbox": [341, 230, 6, 13], "area": 47}, {"id": 9205894, "category_id": 35, "iscrowd": 0, "bbox": [282, 252, 37, 30], "area": 266}, {"id": 8607549, "category_id": 35, "iscrowd": 0, "bbox": [399, 221, 6, 2], "area": 5}, {"id": 11042151, "category_id": 159, "iscrowd": 0, "bbox": [0, 197, 640, 283], "area": 144330}, {"id": 12618087, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 291], "area": 146290}], "file_name": "000000051938.png", "image_id": 51938}, {"segments_info": [{"id": 9207414, "category_id": 14, "iscrowd": 0, "bbox": [232, 244, 69, 147], "area": 8387}, {"id": 4803676, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 363, 223], "area": 66740}, {"id": 11844800, "category_id": 191, "iscrowd": 0, "bbox": [0, 496, 427, 144], "area": 42064}, {"id": 7959922, "category_id": 199, "iscrowd": 0, "bbox": [0, 149, 427, 451], "area": 143682}], "file_name": "000000051961.png", "image_id": 51961}, {"segments_info": [{"id": 5979429, "category_id": 1, "iscrowd": 0, "bbox": [287, 197, 27, 46], "area": 589}, {"id": 12752217, "category_id": 42, "iscrowd": 0, "bbox": [257, 230, 55, 19], "area": 534}, {"id": 9066789, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 272747}], "file_name": "000000051976.png", "image_id": 51976}, {"segments_info": [{"id": 11053486, "category_id": 1, "iscrowd": 0, "bbox": [146, 240, 44, 42], "area": 887}, {"id": 3554135, "category_id": 1, "iscrowd": 0, "bbox": [363, 237, 45, 191], "area": 5323}, {"id": 10463164, "category_id": 1, "iscrowd": 0, "bbox": [45, 265, 6, 14], "area": 58}, {"id": 6052705, "category_id": 1, "iscrowd": 0, "bbox": [84, 273, 4, 9], "area": 15}, {"id": 4211291, "category_id": 1, "iscrowd": 0, "bbox": [317, 253, 50, 143], "area": 3897}, {"id": 10462893, "category_id": 1, "iscrowd": 0, "bbox": [219, 256, 39, 58], "area": 1405}, {"id": 7635341, "category_id": 6, "iscrowd": 0, "bbox": [89, 60, 246, 331], "area": 69162}, {"id": 6448753, "category_id": 32, "iscrowd": 0, "bbox": [158, 264, 8, 16], "area": 40}, {"id": 8166572, "category_id": 119, "iscrowd": 0, "bbox": [0, 499, 288, 141], "area": 33261}, {"id": 12700376, "category_id": 149, "iscrowd": 0, "bbox": [32, 498, 218, 38], "area": 1602}, {"id": 5806749, "category_id": 184, "iscrowd": 0, "bbox": [0, 261, 99, 52], "area": 2826}, {"id": 16448508, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 293], "area": 59506}, {"id": 8951729, "category_id": 191, "iscrowd": 0, "bbox": [0, 289, 480, 351], "area": 89103}, {"id": 9013918, "category_id": 197, "iscrowd": 0, "bbox": [0, 83, 480, 208], "area": 18391}], "file_name": "000000052007.png", "image_id": 52007}, {"segments_info": [{"id": 1382943, "category_id": 1, "iscrowd": 0, "bbox": [339, 167, 22, 21], "area": 225}, {"id": 2050429, "category_id": 5, "iscrowd": 0, "bbox": [53, 85, 429, 202], "area": 35176}, {"id": 12828862, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 236255}], "file_name": "000000052017.png", "image_id": 52017}, {"segments_info": [{"id": 8946555, "category_id": 3, "iscrowd": 0, "bbox": [236, 389, 13, 14], "area": 132}, {"id": 4604263, "category_id": 3, "iscrowd": 0, "bbox": [53, 394, 22, 9], "area": 146}, {"id": 5657468, "category_id": 3, "iscrowd": 0, "bbox": [274, 364, 6, 13], "area": 68}, {"id": 4670300, "category_id": 3, "iscrowd": 0, "bbox": [339, 379, 13, 14], "area": 137}, {"id": 8222318, "category_id": 3, "iscrowd": 0, "bbox": [182, 395, 12, 16], "area": 184}, {"id": 5525065, "category_id": 3, "iscrowd": 0, "bbox": [63, 370, 26, 9], "area": 176}, {"id": 4931640, "category_id": 3, "iscrowd": 0, "bbox": [145, 371, 13, 16], "area": 155}, {"id": 4866620, "category_id": 3, "iscrowd": 0, "bbox": [208, 367, 10, 14], "area": 114}, {"id": 9078916, "category_id": 3, "iscrowd": 0, "bbox": [593, 301, 15, 6], "area": 75}, {"id": 4538168, "category_id": 3, "iscrowd": 0, "bbox": [396, 384, 14, 16], "area": 164}, {"id": 8419696, "category_id": 3, "iscrowd": 0, "bbox": [377, 377, 13, 13], "area": 107}, {"id": 5065344, "category_id": 3, "iscrowd": 0, "bbox": [304, 359, 13, 13], "area": 101}, {"id": 7894123, "category_id": 3, "iscrowd": 0, "bbox": [566, 256, 10, 6], "area": 37}, {"id": 7106928, "category_id": 3, "iscrowd": 1, "bbox": [1, 193, 639, 233], "area": 91279}, {"id": 13290437, "category_id": 5, "iscrowd": 0, "bbox": [0, 61, 297, 143], "area": 18476}, {"id": 9672083, "category_id": 8, "iscrowd": 0, "bbox": [304, 282, 15, 8], "area": 107}, {"id": 9080204, "category_id": 8, "iscrowd": 0, "bbox": [283, 276, 16, 8], "area": 98}, {"id": 6910068, "category_id": 128, "iscrowd": 0, "bbox": [103, 162, 526, 47], "area": 6027}, {"id": 8425104, "category_id": 149, "iscrowd": 0, "bbox": [0, 186, 640, 240], "area": 22804}, {"id": 11779517, "category_id": 151, "iscrowd": 0, "bbox": [15, 183, 291, 41], "area": 6679}, {"id": 5396050, "category_id": 184, "iscrowd": 0, "bbox": [0, 131, 640, 295], "area": 32490}, {"id": 8554630, "category_id": 185, "iscrowd": 0, "bbox": [13, 283, 431, 143], "area": 863}, {"id": 12625296, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 155], "area": 76260}, {"id": 6063746, "category_id": 193, "iscrowd": 0, "bbox": [18, 152, 211, 54], "area": 1074}, {"id": 9086900, "category_id": 194, "iscrowd": 0, "bbox": [189, 132, 343, 41], "area": 3345}, {"id": 5004379, "category_id": 196, "iscrowd": 0, "bbox": [283, 185, 92, 108], "area": 1457}, {"id": 5857641, "category_id": 197, "iscrowd": 0, "bbox": [0, 129, 635, 235], "area": 9151}], "file_name": "000000052412.png", "image_id": 52412}, {"segments_info": [{"id": 7371420, "category_id": 1, "iscrowd": 0, "bbox": [0, 270, 335, 100], "area": 21572}, {"id": 4932931, "category_id": 1, "iscrowd": 0, "bbox": [0, 66, 492, 250], "area": 56574}, {"id": 3622507, "category_id": 47, "iscrowd": 0, "bbox": [188, 46, 37, 53], "area": 1639}, {"id": 921896, "category_id": 62, "iscrowd": 0, "bbox": [266, 0, 69, 96], "area": 2169}, {"id": 10060465, "category_id": 77, "iscrowd": 0, "bbox": [211, 95, 145, 228], "area": 14539}, {"id": 3093307, "category_id": 195, "iscrowd": 0, "bbox": [112, 111, 376, 264], "area": 15547}, {"id": 1780290, "category_id": 196, "iscrowd": 0, "bbox": [171, 29, 28, 60], "area": 783}, {"id": 1587819, "category_id": 199, "iscrowd": 0, "bbox": [82, 0, 197, 83], "area": 8872}], "file_name": "000000052413.png", "image_id": 52413}, {"segments_info": [{"id": 5858679, "category_id": 24, "iscrowd": 0, "bbox": [142, 124, 151, 226], "area": 20059}, {"id": 5397609, "category_id": 24, "iscrowd": 0, "bbox": [403, 94, 127, 224], "area": 16013}, {"id": 5467251, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 26798}, {"id": 10461605, "category_id": 192, "iscrowd": 0, "bbox": [49, 0, 511, 58], "area": 10108}, {"id": 9483481, "category_id": 193, "iscrowd": 0, "bbox": [0, 79, 640, 348], "area": 175233}], "file_name": "000000052462.png", "image_id": 52462}, {"segments_info": [{"id": 4019314, "category_id": 1, "iscrowd": 0, "bbox": [106, 107, 76, 184], "area": 4479}, {"id": 7525096, "category_id": 42, "iscrowd": 0, "bbox": [66, 143, 190, 105], "area": 9250}, {"id": 8749948, "category_id": 155, "iscrowd": 0, "bbox": [0, 65, 640, 373], "area": 223608}, {"id": 8746594, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 69], "area": 42745}], "file_name": "000000052507.png", "image_id": 52507}, {"segments_info": [{"id": 2960685, "category_id": 21, "iscrowd": 0, "bbox": [168, 182, 302, 205], "area": 36456}, {"id": 7960953, "category_id": 154, "iscrowd": 0, "bbox": [0, 373, 640, 85], "area": 45779}, {"id": 8750469, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 394], "area": 210566}], "file_name": "000000052565.png", "image_id": 52565}, {"segments_info": [{"id": 5066061, "category_id": 1, "iscrowd": 0, "bbox": [12, 92, 271, 537], "area": 50272}, {"id": 6842472, "category_id": 35, "iscrowd": 0, "bbox": [207, 0, 69, 611], "area": 14626}, {"id": 12303291, "category_id": 159, "iscrowd": 0, "bbox": [0, 452, 359, 188], "area": 39804}, {"id": 9276813, "category_id": 184, "iscrowd": 0, "bbox": [0, 116, 359, 380], "area": 26068}, {"id": 13487565, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 359, 495], "area": 91739}], "file_name": "000000052591.png", "image_id": 52591}, {"segments_info": [{"id": 7173990, "category_id": 1, "iscrowd": 0, "bbox": [595, 127, 3, 4], "area": 8}, {"id": 5923946, "category_id": 1, "iscrowd": 0, "bbox": [613, 127, 5, 5], "area": 15}, {"id": 7370853, "category_id": 1, "iscrowd": 0, "bbox": [605, 129, 3, 2], "area": 5}, {"id": 6713210, "category_id": 1, "iscrowd": 0, "bbox": [609, 127, 4, 5], "area": 17}, {"id": 7041898, "category_id": 1, "iscrowd": 0, "bbox": [598, 126, 3, 4], "area": 10}, {"id": 6910574, "category_id": 1, "iscrowd": 0, "bbox": [587, 128, 3, 2], "area": 5}, {"id": 5004647, "category_id": 18, "iscrowd": 0, "bbox": [146, 125, 373, 302], "area": 52322}, {"id": 501684, "category_id": 34, "iscrowd": 0, "bbox": [30, 290, 275, 132], "area": 26036}, {"id": 5866396, "category_id": 154, "iscrowd": 0, "bbox": [0, 155, 640, 272], "area": 90665}, {"id": 9936260, "category_id": 155, "iscrowd": 0, "bbox": [0, 79, 640, 112], "area": 42417}, {"id": 12365730, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 112], "area": 58816}, {"id": 8090988, "category_id": 192, "iscrowd": 0, "bbox": [506, 90, 77, 18], "area": 738}], "file_name": "000000052891.png", "image_id": 52891}, {"segments_info": [{"id": 3618874, "category_id": 1, "iscrowd": 0, "bbox": [0, 113, 92, 175], "area": 8657}, {"id": 6973802, "category_id": 1, "iscrowd": 0, "bbox": [610, 143, 30, 58], "area": 991}, {"id": 4735296, "category_id": 1, "iscrowd": 0, "bbox": [560, 102, 63, 104], "area": 1962}, {"id": 2700351, "category_id": 1, "iscrowd": 0, "bbox": [162, 99, 87, 192], "area": 10899}, {"id": 3028284, "category_id": 1, "iscrowd": 0, "bbox": [69, 129, 90, 159], "area": 8699}, {"id": 3884369, "category_id": 1, "iscrowd": 0, "bbox": [522, 120, 105, 301], "area": 22312}, {"id": 4079945, "category_id": 1, "iscrowd": 0, "bbox": [435, 123, 120, 303], "area": 18279}, {"id": 2041902, "category_id": 27, "iscrowd": 0, "bbox": [562, 194, 78, 95], "area": 2644}, {"id": 1511730, "category_id": 31, "iscrowd": 0, "bbox": [422, 174, 55, 148], "area": 1951}, {"id": 2647417, "category_id": 47, "iscrowd": 0, "bbox": [184, 269, 16, 28], "area": 358}, {"id": 3504773, "category_id": 47, "iscrowd": 0, "bbox": [136, 294, 15, 17], "area": 210}, {"id": 2914960, "category_id": 47, "iscrowd": 0, "bbox": [169, 283, 16, 29], "area": 169}, {"id": 3759975, "category_id": 47, "iscrowd": 0, "bbox": [173, 270, 12, 16], "area": 141}, {"id": 6073138, "category_id": 47, "iscrowd": 0, "bbox": [149, 252, 22, 28], "area": 521}, {"id": 6132573, "category_id": 47, "iscrowd": 0, "bbox": [118, 269, 33, 25], "area": 565}, {"id": 3373708, "category_id": 47, "iscrowd": 0, "bbox": [166, 291, 14, 20], "area": 228}, {"id": 2436146, "category_id": 49, "iscrowd": 0, "bbox": [0, 293, 68, 12], "area": 520}, {"id": 3764783, "category_id": 51, "iscrowd": 0, "bbox": [209, 279, 76, 32], "area": 1231}, {"id": 6518654, "category_id": 51, "iscrowd": 0, "bbox": [109, 307, 73, 43], "area": 2177}, {"id": 3622477, "category_id": 67, "iscrowd": 0, "bbox": [0, 250, 217, 176], "area": 23153}, {"id": 4211264, "category_id": 79, "iscrowd": 0, "bbox": [0, 215, 36, 71], "area": 1916}, {"id": 9407878, "category_id": 82, "iscrowd": 0, "bbox": [225, 114, 192, 212], "area": 31103}, {"id": 9935258, "category_id": 84, "iscrowd": 0, "bbox": [448, 226, 60, 46], "area": 1928}, {"id": 5728127, "category_id": 100, "iscrowd": 0, "bbox": [122, 48, 333, 378], "area": 10125}, {"id": 3422782, "category_id": 176, "iscrowd": 0, "bbox": [55, 155, 19, 36], "area": 278}, {"id": 526866, "category_id": 189, "iscrowd": 0, "bbox": [140, 358, 120, 68], "area": 4397}, {"id": 8289653, "category_id": 195, "iscrowd": 0, "bbox": [99, 94, 128, 57], "area": 2970}, {"id": 5200735, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 254], "area": 61850}], "file_name": "000000052996.png", "image_id": 52996}, {"segments_info": [{"id": 3899310, "category_id": 44, "iscrowd": 0, "bbox": [275, 268, 13, 44], "area": 508}, {"id": 2253199, "category_id": 44, "iscrowd": 0, "bbox": [239, 269, 12, 45], "area": 472}, {"id": 3898796, "category_id": 44, "iscrowd": 0, "bbox": [138, 272, 15, 45], "area": 513}, {"id": 3044780, "category_id": 44, "iscrowd": 0, "bbox": [163, 272, 14, 45], "area": 478}, {"id": 2453674, "category_id": 44, "iscrowd": 0, "bbox": [151, 271, 14, 45], "area": 460}, {"id": 2651053, "category_id": 44, "iscrowd": 0, "bbox": [264, 268, 12, 44], "area": 455}, {"id": 2054793, "category_id": 44, "iscrowd": 0, "bbox": [177, 272, 14, 45], "area": 521}, {"id": 3439533, "category_id": 44, "iscrowd": 0, "bbox": [251, 268, 12, 46], "area": 438}, {"id": 5084094, "category_id": 70, "iscrowd": 0, "bbox": [161, 503, 127, 128], "area": 14853}, {"id": 2513287, "category_id": 190, "iscrowd": 0, "bbox": [63, 590, 365, 50], "area": 8225}, {"id": 4292011, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 428, 640], "area": 237498}], "file_name": "000000053505.png", "image_id": 53505}, {"segments_info": [{"id": 657932, "category_id": 1, "iscrowd": 0, "bbox": [52, 65, 90, 209], "area": 15843}, {"id": 4540221, "category_id": 8, "iscrowd": 0, "bbox": [3, 0, 497, 327], "area": 104031}, {"id": 2699064, "category_id": 18, "iscrowd": 0, "bbox": [140, 197, 108, 74], "area": 6109}], "file_name": "000000053529.png", "image_id": 53529}, {"segments_info": [{"id": 8290442, "category_id": 1, "iscrowd": 0, "bbox": [244, 0, 10, 31], "area": 178}, {"id": 6051410, "category_id": 1, "iscrowd": 0, "bbox": [130, 5, 17, 58], "area": 501}, {"id": 4341856, "category_id": 1, "iscrowd": 0, "bbox": [180, 1, 12, 39], "area": 300}, {"id": 7961984, "category_id": 1, "iscrowd": 0, "bbox": [220, 13, 20, 23], "area": 318}, {"id": 5199958, "category_id": 1, "iscrowd": 0, "bbox": [150, 6, 19, 35], "area": 451}, {"id": 5792359, "category_id": 22, "iscrowd": 0, "bbox": [248, 110, 158, 274], "area": 26809}, {"id": 10528683, "category_id": 178, "iscrowd": 0, "bbox": [0, 275, 640, 143], "area": 43687}, {"id": 8817804, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 89], "area": 14164}, {"id": 12898776, "category_id": 191, "iscrowd": 0, "bbox": [0, 252, 640, 71], "area": 16302}, {"id": 8034469, "category_id": 193, "iscrowd": 0, "bbox": [0, 137, 515, 156], "area": 37804}, {"id": 8161422, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 292], "area": 79938}, {"id": 10923707, "category_id": 198, "iscrowd": 0, "bbox": [0, 352, 640, 75], "area": 25947}], "file_name": "000000053624.png", "image_id": 53624}, {"segments_info": [{"id": 6906463, "category_id": 1, "iscrowd": 0, "bbox": [372, 153, 72, 195], "area": 8259}, {"id": 4010803, "category_id": 1, "iscrowd": 0, "bbox": [292, 146, 80, 211], "area": 9241}, {"id": 7955506, "category_id": 1, "iscrowd": 0, "bbox": [125, 140, 97, 245], "area": 13799}, {"id": 7493173, "category_id": 1, "iscrowd": 0, "bbox": [233, 156, 77, 216], "area": 9986}, {"id": 11313558, "category_id": 35, "iscrowd": 0, "bbox": [258, 370, 64, 28], "area": 561}, {"id": 9405820, "category_id": 35, "iscrowd": 0, "bbox": [220, 341, 37, 56], "area": 988}, {"id": 10062724, "category_id": 35, "iscrowd": 0, "bbox": [112, 357, 68, 38], "area": 848}, {"id": 9469560, "category_id": 35, "iscrowd": 0, "bbox": [288, 344, 103, 43], "area": 979}, {"id": 11574412, "category_id": 35, "iscrowd": 0, "bbox": [136, 384, 103, 46], "area": 982}, {"id": 14207161, "category_id": 159, "iscrowd": 0, "bbox": [0, 159, 640, 321], "area": 124963}, {"id": 13077067, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 434, 74], "area": 26005}, {"id": 11575185, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 365], "area": 109407}], "file_name": "000000053626.png", "image_id": 53626}, {"segments_info": [{"id": 8489636, "category_id": 1, "iscrowd": 0, "bbox": [3, 142, 477, 489], "area": 86112}, {"id": 5855055, "category_id": 77, "iscrowd": 0, "bbox": [82, 27, 280, 548], "area": 141433}, {"id": 11455450, "category_id": 118, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 59479}, {"id": 14343124, "category_id": 199, "iscrowd": 0, "bbox": [247, 0, 233, 32], "area": 4769}], "file_name": "000000053909.png", "image_id": 53909}, {"segments_info": [{"id": 5401701, "category_id": 3, "iscrowd": 0, "bbox": [45, 22, 110, 27], "area": 901}, {"id": 7763564, "category_id": 3, "iscrowd": 0, "bbox": [18, 19, 46, 20], "area": 478}, {"id": 9275511, "category_id": 3, "iscrowd": 0, "bbox": [5, 20, 32, 15], "area": 255}, {"id": 6710144, "category_id": 14, "iscrowd": 0, "bbox": [160, 58, 218, 445], "area": 62161}, {"id": 13882836, "category_id": 149, "iscrowd": 0, "bbox": [161, 218, 320, 422], "area": 64966}, {"id": 11909557, "category_id": 177, "iscrowd": 0, "bbox": [0, 70, 238, 289], "area": 43341}, {"id": 5073762, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 481, 123], "area": 21258}, {"id": 12569546, "category_id": 191, "iscrowd": 0, "bbox": [317, 48, 86, 27], "area": 988}, {"id": 3695947, "category_id": 193, "iscrowd": 0, "bbox": [0, 13, 481, 209], "area": 23598}, {"id": 11716297, "category_id": 199, "iscrowd": 0, "bbox": [362, 38, 35, 20], "area": 514}], "file_name": "000000053994.png", "image_id": 53994}, {"segments_info": [{"id": 6056306, "category_id": 24, "iscrowd": 0, "bbox": [75, 124, 96, 166], "area": 7800}, {"id": 7900054, "category_id": 24, "iscrowd": 0, "bbox": [0, 143, 54, 219], "area": 8386}, {"id": 4607573, "category_id": 24, "iscrowd": 0, "bbox": [285, 109, 107, 26], "area": 1561}, {"id": 5595499, "category_id": 24, "iscrowd": 0, "bbox": [188, 108, 81, 41], "area": 973}, {"id": 8360860, "category_id": 24, "iscrowd": 0, "bbox": [528, 102, 112, 192], "area": 12964}, {"id": 6451067, "category_id": 24, "iscrowd": 0, "bbox": [102, 114, 444, 289], "area": 58408}, {"id": 3759974, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 255], "area": 88013}, {"id": 6919078, "category_id": 193, "iscrowd": 0, "bbox": [0, 203, 640, 225], "area": 94843}], "file_name": "000000054123.png", "image_id": 54123}, {"segments_info": [{"id": 1908001, "category_id": 1, "iscrowd": 0, "bbox": [183, 106, 148, 238], "area": 12750}, {"id": 6778744, "category_id": 42, "iscrowd": 0, "bbox": [140, 318, 126, 31], "area": 1331}, {"id": 6843234, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 258037}], "file_name": "000000054164.png", "image_id": 54164}, {"segments_info": [{"id": 5457995, "category_id": 1, "iscrowd": 0, "bbox": [100, 159, 106, 163], "area": 12714}, {"id": 2892068, "category_id": 1, "iscrowd": 0, "bbox": [291, 44, 244, 368], "area": 45474}, {"id": 1445391, "category_id": 27, "iscrowd": 0, "bbox": [438, 63, 104, 167], "area": 5506}, {"id": 3746349, "category_id": 35, "iscrowd": 0, "bbox": [63, 270, 144, 34], "area": 896}, {"id": 3023914, "category_id": 35, "iscrowd": 0, "bbox": [274, 47, 71, 364], "area": 6481}, {"id": 4929337, "category_id": 159, "iscrowd": 0, "bbox": [0, 130, 640, 288], "area": 87503}, {"id": 10458264, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 301], "area": 98660}, {"id": 4470072, "category_id": 192, "iscrowd": 0, "bbox": [0, 96, 156, 74], "area": 5906}], "file_name": "000000054592.png", "image_id": 54592}, {"segments_info": [{"id": 4737345, "category_id": 1, "iscrowd": 0, "bbox": [3, 140, 109, 189], "area": 10004}, {"id": 6706754, "category_id": 1, "iscrowd": 0, "bbox": [346, 131, 46, 108], "area": 2185}, {"id": 4998966, "category_id": 1, "iscrowd": 0, "bbox": [521, 112, 65, 129], "area": 5098}, {"id": 6906451, "category_id": 1, "iscrowd": 0, "bbox": [426, 111, 71, 122], "area": 4977}, {"id": 4211255, "category_id": 1, "iscrowd": 0, "bbox": [85, 170, 126, 165], "area": 10518}, {"id": 8351623, "category_id": 1, "iscrowd": 0, "bbox": [345, 106, 115, 233], "area": 9408}, {"id": 3552320, "category_id": 3, "iscrowd": 0, "bbox": [0, 58, 64, 88], "area": 2979}, {"id": 5657410, "category_id": 3, "iscrowd": 0, "bbox": [111, 75, 199, 108], "area": 16037}, {"id": 3749930, "category_id": 3, "iscrowd": 0, "bbox": [416, 75, 196, 88], "area": 9408}, {"id": 5064251, "category_id": 4, "iscrowd": 0, "bbox": [0, 120, 72, 82], "area": 3419}, {"id": 3682588, "category_id": 27, "iscrowd": 0, "bbox": [342, 208, 39, 30], "area": 791}, {"id": 11776686, "category_id": 37, "iscrowd": 0, "bbox": [496, 155, 15, 14], "area": 166}, {"id": 4340780, "category_id": 39, "iscrowd": 0, "bbox": [358, 65, 49, 71], "area": 566}, {"id": 3685945, "category_id": 40, "iscrowd": 0, "bbox": [207, 198, 41, 48], "area": 1349}, {"id": 5654303, "category_id": 44, "iscrowd": 0, "bbox": [526, 215, 10, 19], "area": 157}, {"id": 5730402, "category_id": 62, "iscrowd": 0, "bbox": [522, 174, 64, 61], "area": 1039}, {"id": 4674116, "category_id": 62, "iscrowd": 0, "bbox": [427, 170, 73, 63], "area": 1338}, {"id": 7169102, "category_id": 62, "iscrowd": 0, "bbox": [334, 160, 24, 51], "area": 285}, {"id": 4412995, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 276], "area": 97136}, {"id": 11186350, "category_id": 194, "iscrowd": 0, "bbox": [0, 253, 640, 174], "area": 94981}], "file_name": "000000054593.png", "image_id": 54593}, {"segments_info": [{"id": 3750727, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 301, 211], "area": 25942}, {"id": 2103839, "category_id": 1, "iscrowd": 0, "bbox": [248, 3, 72, 72], "area": 3326}, {"id": 3942171, "category_id": 1, "iscrowd": 0, "bbox": [488, 0, 50, 103], "area": 1571}, {"id": 3415317, "category_id": 1, "iscrowd": 0, "bbox": [527, 0, 84, 255], "area": 10775}, {"id": 4272402, "category_id": 47, "iscrowd": 0, "bbox": [0, 208, 79, 199], "area": 13789}, {"id": 3686982, "category_id": 47, "iscrowd": 0, "bbox": [85, 73, 175, 378], "area": 44820}, {"id": 8491404, "category_id": 48, "iscrowd": 0, "bbox": [320, 312, 201, 105], "area": 2538}, {"id": 7635067, "category_id": 48, "iscrowd": 0, "bbox": [360, 301, 171, 108], "area": 2312}, {"id": 5075575, "category_id": 61, "iscrowd": 0, "bbox": [261, 351, 257, 250], "area": 43008}, {"id": 1579292, "category_id": 62, "iscrowd": 0, "bbox": [287, 99, 100, 114], "area": 7710}, {"id": 2693656, "category_id": 62, "iscrowd": 0, "bbox": [419, 1, 49, 89], "area": 2078}, {"id": 3219479, "category_id": 62, "iscrowd": 0, "bbox": [481, 13, 95, 201], "area": 7014}, {"id": 5056276, "category_id": 67, "iscrowd": 0, "bbox": [544, 40, 68, 32], "area": 1200}, {"id": 5660767, "category_id": 67, "iscrowd": 0, "bbox": [4, 22, 608, 583], "area": 158264}, {"id": 10579013, "category_id": 67, "iscrowd": 0, "bbox": [307, 43, 42, 22], "area": 504}, {"id": 5846042, "category_id": 177, "iscrowd": 0, "bbox": [378, 112, 14, 25], "area": 192}, {"id": 921617, "category_id": 189, "iscrowd": 0, "bbox": [0, 407, 134, 205], "area": 2107}, {"id": 10516808, "category_id": 190, "iscrowd": 0, "bbox": [0, 30, 612, 205], "area": 18004}], "file_name": "000000054605.png", "image_id": 54605}, {"segments_info": [{"id": 5592920, "category_id": 1, "iscrowd": 0, "bbox": [281, 112, 21, 31], "area": 355}, {"id": 6583936, "category_id": 61, "iscrowd": 0, "bbox": [137, 373, 145, 110], "area": 10266}, {"id": 7968940, "category_id": 61, "iscrowd": 0, "bbox": [160, 159, 100, 63], "area": 5517}, {"id": 8621710, "category_id": 61, "iscrowd": 0, "bbox": [175, 31, 80, 134], "area": 8039}, {"id": 8032671, "category_id": 61, "iscrowd": 0, "bbox": [149, 275, 115, 82], "area": 7323}, {"id": 856860, "category_id": 62, "iscrowd": 0, "bbox": [262, 151, 31, 40], "area": 555}, {"id": 2241087, "category_id": 62, "iscrowd": 0, "bbox": [57, 167, 19, 18], "area": 137}, {"id": 922132, "category_id": 62, "iscrowd": 0, "bbox": [73, 212, 47, 104], "area": 1164}, {"id": 592914, "category_id": 62, "iscrowd": 0, "bbox": [258, 182, 25, 22], "area": 442}, {"id": 790293, "category_id": 62, "iscrowd": 0, "bbox": [253, 198, 82, 130], "area": 4933}, {"id": 1579549, "category_id": 62, "iscrowd": 0, "bbox": [70, 184, 23, 45], "area": 277}, {"id": 1447700, "category_id": 62, "iscrowd": 0, "bbox": [78, 148, 22, 33], "area": 379}, {"id": 723981, "category_id": 62, "iscrowd": 0, "bbox": [322, 149, 20, 29], "area": 448}, {"id": 13948864, "category_id": 62, "iscrowd": 0, "bbox": [166, 139, 8, 7], "area": 38}, {"id": 461584, "category_id": 62, "iscrowd": 0, "bbox": [312, 177, 16, 24], "area": 212}, {"id": 1907736, "category_id": 62, "iscrowd": 0, "bbox": [139, 150, 20, 22], "area": 338}, {"id": 1053975, "category_id": 62, "iscrowd": 0, "bbox": [68, 185, 46, 65], "area": 619}, {"id": 1184532, "category_id": 62, "iscrowd": 0, "bbox": [82, 199, 27, 34], "area": 205}, {"id": 3291197, "category_id": 62, "iscrowd": 1, "bbox": [246, 129, 67, 38], "area": 1372}, {"id": 4475452, "category_id": 64, "iscrowd": 0, "bbox": [330, 100, 39, 48], "area": 1045}, {"id": 2370593, "category_id": 64, "iscrowd": 0, "bbox": [43, 105, 34, 49], "area": 1036}, {"id": 2899022, "category_id": 67, "iscrowd": 0, "bbox": [244, 185, 121, 117], "area": 6075}, {"id": 4938338, "category_id": 67, "iscrowd": 0, "bbox": [83, 174, 93, 140], "area": 5447}, {"id": 3809039, "category_id": 67, "iscrowd": 0, "bbox": [2, 327, 373, 173], "area": 38406}, {"id": 4277828, "category_id": 100, "iscrowd": 0, "bbox": [54, 146, 28, 22], "area": 359}, {"id": 4017491, "category_id": 109, "iscrowd": 0, "bbox": [0, 25, 301, 205], "area": 9580}, {"id": 6323588, "category_id": 119, "iscrowd": 0, "bbox": [110, 293, 75, 93], "area": 3206}, {"id": 4287382, "category_id": 130, "iscrowd": 0, "bbox": [126, 0, 227, 105], "area": 5937}, {"id": 13026747, "category_id": 181, "iscrowd": 0, "bbox": [51, 86, 324, 84], "area": 9464}, {"id": 1844772, "category_id": 184, "iscrowd": 0, "bbox": [226, 327, 85, 61], "area": 2210}, {"id": 2638423, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 375, 95], "area": 22537}, {"id": 5401220, "category_id": 189, "iscrowd": 0, "bbox": [265, 328, 43, 20], "area": 117}, {"id": 7178369, "category_id": 196, "iscrowd": 0, "bbox": [153, 374, 15, 16], "area": 74}, {"id": 2109766, "category_id": 199, "iscrowd": 0, "bbox": [0, 75, 324, 287], "area": 5240}, {"id": 592910, "category_id": 200, "iscrowd": 0, "bbox": [23, 169, 352, 228], "area": 14568}], "file_name": "000000054628.png", "image_id": 54628}, {"segments_info": [{"id": 4668736, "category_id": 1, "iscrowd": 0, "bbox": [99, 50, 272, 583], "area": 87613}, {"id": 15132133, "category_id": 79, "iscrowd": 0, "bbox": [2, 414, 218, 222], "area": 40486}, {"id": 3359067, "category_id": 177, "iscrowd": 0, "bbox": [0, 240, 203, 126], "area": 13097}, {"id": 3818561, "category_id": 181, "iscrowd": 0, "bbox": [290, 0, 69, 197], "area": 10271}, {"id": 7439254, "category_id": 188, "iscrowd": 0, "bbox": [0, 77, 196, 134], "area": 10467}, {"id": 3029846, "category_id": 189, "iscrowd": 0, "bbox": [165, 374, 49, 109], "area": 1680}, {"id": 6131835, "category_id": 195, "iscrowd": 0, "bbox": [8, 0, 190, 115], "area": 14019}, {"id": 13490399, "category_id": 196, "iscrowd": 0, "bbox": [71, 321, 75, 29], "area": 1317}, {"id": 8227469, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 407, 478], "area": 45141}, {"id": 1053205, "category_id": 200, "iscrowd": 0, "bbox": [211, 459, 196, 181], "area": 10124}], "file_name": "000000054654.png", "image_id": 54654}, {"segments_info": [{"id": 4211028, "category_id": 1, "iscrowd": 0, "bbox": [197, 155, 186, 469], "area": 32835}, {"id": 8489359, "category_id": 19, "iscrowd": 0, "bbox": [0, 89, 148, 193], "area": 16156}, {"id": 997940, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 192], "area": 50867}, {"id": 2173739, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 427, 241], "area": 24842}, {"id": 5596013, "category_id": 194, "iscrowd": 0, "bbox": [0, 186, 427, 454], "area": 148083}], "file_name": "000000054931.png", "image_id": 54931}, {"segments_info": [{"id": 922131, "category_id": 1, "iscrowd": 0, "bbox": [385, 422, 39, 216], "area": 5009}, {"id": 5980712, "category_id": 3, "iscrowd": 0, "bbox": [151, 419, 23, 20], "area": 388}, {"id": 5918521, "category_id": 3, "iscrowd": 0, "bbox": [184, 419, 15, 17], "area": 142}, {"id": 9933447, "category_id": 3, "iscrowd": 0, "bbox": [230, 415, 11, 10], "area": 89}, {"id": 4011048, "category_id": 3, "iscrowd": 0, "bbox": [3, 433, 53, 37], "area": 1284}, {"id": 6905932, "category_id": 3, "iscrowd": 0, "bbox": [211, 418, 14, 11], "area": 113}, {"id": 8222307, "category_id": 3, "iscrowd": 0, "bbox": [202, 418, 13, 12], "area": 41}, {"id": 5392964, "category_id": 3, "iscrowd": 0, "bbox": [212, 434, 55, 42], "area": 1792}, {"id": 6378558, "category_id": 3, "iscrowd": 0, "bbox": [109, 428, 46, 35], "area": 1231}, {"id": 2301208, "category_id": 3, "iscrowd": 0, "bbox": [53, 424, 43, 38], "area": 1225}, {"id": 7959143, "category_id": 3, "iscrowd": 0, "bbox": [244, 431, 38, 35], "area": 591}, {"id": 7433304, "category_id": 3, "iscrowd": 0, "bbox": [195, 419, 17, 12], "area": 155}, {"id": 4142891, "category_id": 3, "iscrowd": 1, "bbox": [0, 421, 193, 53], "area": 706}, {"id": 2893347, "category_id": 10, "iscrowd": 0, "bbox": [98, 401, 10, 27], "area": 259}, {"id": 4278615, "category_id": 10, "iscrowd": 0, "bbox": [99, 344, 277, 62], "area": 638}, {"id": 6249064, "category_id": 10, "iscrowd": 0, "bbox": [217, 403, 3, 5], "area": 13}, {"id": 7629393, "category_id": 149, "iscrowd": 0, "bbox": [0, 412, 312, 228], "area": 56191}, {"id": 5985606, "category_id": 184, "iscrowd": 0, "bbox": [0, 142, 424, 358], "area": 49685}, {"id": 15066338, "category_id": 187, "iscrowd": 0, "bbox": [77, 0, 301, 404], "area": 32008}, {"id": 6379840, "category_id": 191, "iscrowd": 0, "bbox": [90, 431, 322, 209], "area": 8950}, {"id": 8484962, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 424, 436], "area": 71738}, {"id": 2366485, "category_id": 199, "iscrowd": 0, "bbox": [351, 482, 54, 111], "area": 5034}], "file_name": "000000054967.png", "image_id": 54967}, {"segments_info": [{"id": 2501165, "category_id": 1, "iscrowd": 0, "bbox": [155, 324, 161, 51], "area": 2802}, {"id": 8424337, "category_id": 70, "iscrowd": 0, "bbox": [131, 4, 198, 369], "area": 54241}, {"id": 9739166, "category_id": 133, "iscrowd": 0, "bbox": [433, 234, 67, 141], "area": 7130}, {"id": 9739939, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 64216}, {"id": 8361127, "category_id": 190, "iscrowd": 0, "bbox": [81, 113, 313, 262], "area": 26004}, {"id": 6056563, "category_id": 199, "iscrowd": 0, "bbox": [304, 36, 196, 339], "area": 32095}], "file_name": "000000055002.png", "image_id": 55002}, {"segments_info": [{"id": 13220791, "category_id": 1, "iscrowd": 0, "bbox": [423, 108, 22, 60], "area": 591}, {"id": 9800351, "category_id": 1, "iscrowd": 0, "bbox": [429, 91, 39, 80], "area": 883}, {"id": 3291460, "category_id": 2, "iscrowd": 0, "bbox": [197, 154, 179, 159], "area": 6320}, {"id": 5265508, "category_id": 2, "iscrowd": 0, "bbox": [326, 124, 51, 116], "area": 1269}, {"id": 3355707, "category_id": 2, "iscrowd": 0, "bbox": [246, 117, 111, 109], "area": 3822}, {"id": 4869462, "category_id": 2, "iscrowd": 0, "bbox": [135, 166, 183, 186], "area": 5394}, {"id": 6779775, "category_id": 2, "iscrowd": 0, "bbox": [245, 1, 37, 79], "area": 2115}, {"id": 5000809, "category_id": 2, "iscrowd": 0, "bbox": [26, 147, 309, 493], "area": 53854}, {"id": 2831678, "category_id": 2, "iscrowd": 0, "bbox": [252, 197, 83, 133], "area": 3794}, {"id": 6975857, "category_id": 107, "iscrowd": 0, "bbox": [327, 105, 87, 37], "area": 1275}, {"id": 12823956, "category_id": 112, "iscrowd": 0, "bbox": [412, 87, 68, 61], "area": 1601}, {"id": 9083311, "category_id": 118, "iscrowd": 0, "bbox": [0, 229, 480, 411], "area": 131847}, {"id": 14922889, "category_id": 151, "iscrowd": 0, "bbox": [413, 33, 67, 21], "area": 707}, {"id": 3356221, "category_id": 156, "iscrowd": 0, "bbox": [0, 184, 44, 42], "area": 836}, {"id": 15526369, "category_id": 184, "iscrowd": 0, "bbox": [448, 17, 32, 107], "area": 1909}, {"id": 15789533, "category_id": 186, "iscrowd": 0, "bbox": [372, 0, 108, 26], "area": 2080}, {"id": 13289659, "category_id": 190, "iscrowd": 0, "bbox": [358, 123, 122, 118], "area": 6013}, {"id": 14473941, "category_id": 191, "iscrowd": 0, "bbox": [408, 137, 72, 42], "area": 1112}, {"id": 9871786, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 376], "area": 72795}], "file_name": "000000055022.png", "image_id": 55022}, {"segments_info": [{"id": 4213334, "category_id": 25, "iscrowd": 0, "bbox": [49, 46, 463, 381], "area": 47372}, {"id": 2703421, "category_id": 184, "iscrowd": 0, "bbox": [0, 172, 640, 255], "area": 58169}, {"id": 14468789, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 212], "area": 106581}, {"id": 4807528, "category_id": 193, "iscrowd": 0, "bbox": [0, 178, 563, 249], "area": 60500}], "file_name": "000000055072.png", "image_id": 55072}, {"segments_info": [{"id": 8492460, "category_id": 1, "iscrowd": 0, "bbox": [343, 128, 113, 93], "area": 3367}, {"id": 6320817, "category_id": 1, "iscrowd": 0, "bbox": [284, 114, 81, 115], "area": 5093}, {"id": 4801858, "category_id": 3, "iscrowd": 0, "bbox": [436, 1, 204, 392], "area": 60757}, {"id": 8421239, "category_id": 3, "iscrowd": 0, "bbox": [258, 100, 131, 134], "area": 2980}, {"id": 10461078, "category_id": 3, "iscrowd": 0, "bbox": [272, 114, 200, 137], "area": 7177}, {"id": 5604241, "category_id": 3, "iscrowd": 0, "bbox": [90, 132, 126, 108], "area": 6748}, {"id": 6974579, "category_id": 3, "iscrowd": 0, "bbox": [255, 161, 12, 42], "area": 350}, {"id": 7311516, "category_id": 3, "iscrowd": 0, "bbox": [243, 149, 15, 37], "area": 363}, {"id": 9672080, "category_id": 3, "iscrowd": 0, "bbox": [206, 139, 39, 69], "area": 1414}, {"id": 3683892, "category_id": 3, "iscrowd": 0, "bbox": [0, 37, 191, 389], "area": 52468}, {"id": 3812139, "category_id": 27, "iscrowd": 0, "bbox": [332, 245, 67, 86], "area": 4173}, {"id": 4999244, "category_id": 33, "iscrowd": 0, "bbox": [265, 269, 189, 70], "area": 6620}, {"id": 2170657, "category_id": 33, "iscrowd": 0, "bbox": [285, 201, 169, 73], "area": 7468}, {"id": 13356240, "category_id": 84, "iscrowd": 0, "bbox": [291, 199, 53, 20], "area": 218}, {"id": 15329256, "category_id": 84, "iscrowd": 0, "bbox": [301, 165, 43, 37], "area": 634}, {"id": 7172468, "category_id": 149, "iscrowd": 0, "bbox": [142, 170, 303, 256], "area": 35128}, {"id": 11645095, "category_id": 166, "iscrowd": 0, "bbox": [406, 0, 234, 234], "area": 16074}, {"id": 5597020, "category_id": 184, "iscrowd": 0, "bbox": [232, 93, 191, 78], "area": 1193}, {"id": 14999252, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 439, 151], "area": 41074}, {"id": 1118224, "category_id": 197, "iscrowd": 0, "bbox": [407, 308, 35, 38], "area": 399}], "file_name": "000000055150.png", "image_id": 55150}, {"segments_info": [{"id": 11243633, "category_id": 1, "iscrowd": 0, "bbox": [233, 171, 21, 16], "area": 202}, {"id": 5914927, "category_id": 1, "iscrowd": 0, "bbox": [371, 180, 8, 11], "area": 43}, {"id": 3418923, "category_id": 1, "iscrowd": 0, "bbox": [133, 194, 12, 34], "area": 166}, {"id": 5392969, "category_id": 1, "iscrowd": 0, "bbox": [408, 183, 5, 22], "area": 78}, {"id": 6447444, "category_id": 1, "iscrowd": 0, "bbox": [418, 185, 4, 20], "area": 53}, {"id": 2761305, "category_id": 1, "iscrowd": 0, "bbox": [413, 185, 5, 19], "area": 71}, {"id": 5130312, "category_id": 3, "iscrowd": 0, "bbox": [393, 183, 15, 11], "area": 123}, {"id": 5129786, "category_id": 3, "iscrowd": 0, "bbox": [565, 213, 37, 15], "area": 385}, {"id": 6382437, "category_id": 6, "iscrowd": 0, "bbox": [210, 131, 155, 112], "area": 14466}, {"id": 8162448, "category_id": 8, "iscrowd": 0, "bbox": [162, 176, 56, 53], "area": 2501}, {"id": 6764071, "category_id": 27, "iscrowd": 0, "bbox": [133, 197, 8, 14], "area": 78}, {"id": 2171432, "category_id": 119, "iscrowd": 0, "bbox": [556, 235, 36, 20], "area": 472}, {"id": 6315359, "category_id": 128, "iscrowd": 0, "bbox": [0, 60, 640, 181], "area": 29937}, {"id": 8815751, "category_id": 149, "iscrowd": 0, "bbox": [0, 191, 424, 102], "area": 15880}, {"id": 5526358, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 313], "area": 96011}, {"id": 16250099, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 264, 61], "area": 7468}, {"id": 6382433, "category_id": 191, "iscrowd": 0, "bbox": [421, 191, 136, 42], "area": 872}, {"id": 4744802, "category_id": 193, "iscrowd": 0, "bbox": [419, 191, 67, 79], "area": 696}, {"id": 6844018, "category_id": 199, "iscrowd": 0, "bbox": [477, 208, 36, 16], "area": 373}], "file_name": "000000055167.png", "image_id": 55167}, {"segments_info": [{"id": 1909801, "category_id": 16, "iscrowd": 0, "bbox": [434, 214, 39, 112], "area": 2486}, {"id": 1584444, "category_id": 28, "iscrowd": 0, "bbox": [25, 218, 78, 33], "area": 1324}, {"id": 2769233, "category_id": 28, "iscrowd": 0, "bbox": [94, 231, 31, 34], "area": 290}, {"id": 4412769, "category_id": 154, "iscrowd": 0, "bbox": [0, 236, 274, 140], "area": 22763}, {"id": 6974562, "category_id": 155, "iscrowd": 0, "bbox": [186, 239, 454, 190], "area": 41664}, {"id": 463632, "category_id": 184, "iscrowd": 0, "bbox": [0, 149, 169, 123], "area": 8275}, {"id": 10722450, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 247], "area": 140977}, {"id": 2632484, "category_id": 192, "iscrowd": 0, "bbox": [102, 198, 324, 64], "area": 8581}, {"id": 2899270, "category_id": 198, "iscrowd": 0, "bbox": [0, 315, 640, 114], "area": 48080}], "file_name": "000000055299.png", "image_id": 55299}, {"segments_info": [{"id": 4802903, "category_id": 1, "iscrowd": 0, "bbox": [145, 5, 398, 465], "area": 91354}, {"id": 6446428, "category_id": 63, "iscrowd": 0, "bbox": [2, 70, 638, 410], "area": 79828}, {"id": 7106165, "category_id": 75, "iscrowd": 0, "bbox": [551, 420, 86, 60], "area": 3101}, {"id": 4013891, "category_id": 75, "iscrowd": 0, "bbox": [513, 422, 75, 58], "area": 2433}, {"id": 3355964, "category_id": 84, "iscrowd": 0, "bbox": [153, 430, 116, 50], "area": 3140}, {"id": 2894382, "category_id": 85, "iscrowd": 0, "bbox": [524, 294, 5, 26], "area": 87}, {"id": 5722194, "category_id": 90, "iscrowd": 0, "bbox": [448, 111, 26, 108], "area": 1458}, {"id": 1381913, "category_id": 112, "iscrowd": 0, "bbox": [431, 0, 209, 114], "area": 13963}, {"id": 5197932, "category_id": 189, "iscrowd": 0, "bbox": [505, 421, 135, 59], "area": 1016}, {"id": 8100275, "category_id": 195, "iscrowd": 0, "bbox": [57, 291, 299, 189], "area": 22195}, {"id": 12107207, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 437, 480], "area": 87053}], "file_name": "000000055528.png", "image_id": 55528}, {"segments_info": [{"id": 3949673, "category_id": 1, "iscrowd": 0, "bbox": [82, 69, 223, 321], "area": 21321}, {"id": 7066799, "category_id": 37, "iscrowd": 0, "bbox": [306, 157, 16, 17], "area": 215}, {"id": 8880231, "category_id": 43, "iscrowd": 0, "bbox": [81, 119, 113, 104], "area": 3859}, {"id": 7896423, "category_id": 138, "iscrowd": 0, "bbox": [0, 237, 426, 321], "area": 91640}, {"id": 7897701, "category_id": 145, "iscrowd": 0, "bbox": [0, 82, 426, 558], "area": 112148}, {"id": 6981711, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 426, 121], "area": 43071}], "file_name": "000000055950.png", "image_id": 55950}, {"segments_info": [{"id": 591885, "category_id": 15, "iscrowd": 0, "bbox": [485, 569, 95, 71], "area": 5944}, {"id": 799828, "category_id": 15, "iscrowd": 0, "bbox": [332, 411, 248, 170], "area": 33744}, {"id": 7498890, "category_id": 47, "iscrowd": 0, "bbox": [86, 281, 18, 25], "area": 285}, {"id": 9278130, "category_id": 47, "iscrowd": 0, "bbox": [68, 280, 22, 26], "area": 336}, {"id": 8555182, "category_id": 47, "iscrowd": 0, "bbox": [50, 280, 24, 28], "area": 464}, {"id": 10525601, "category_id": 79, "iscrowd": 0, "bbox": [129, 299, 116, 172], "area": 5460}, {"id": 1581343, "category_id": 81, "iscrowd": 0, "bbox": [347, 323, 94, 13], "area": 1065}, {"id": 3247263, "category_id": 82, "iscrowd": 0, "bbox": [351, 243, 131, 80], "area": 9970}, {"id": 4674452, "category_id": 107, "iscrowd": 0, "bbox": [49, 342, 110, 63], "area": 3374}, {"id": 9214114, "category_id": 112, "iscrowd": 0, "bbox": [182, 263, 33, 59], "area": 1147}, {"id": 13752281, "category_id": 130, "iscrowd": 0, "bbox": [92, 29, 358, 183], "area": 12277}, {"id": 3951994, "category_id": 156, "iscrowd": 0, "bbox": [47, 245, 72, 46], "area": 2150}, {"id": 2708588, "category_id": 177, "iscrowd": 0, "bbox": [319, 0, 261, 436], "area": 59747}, {"id": 8751245, "category_id": 181, "iscrowd": 0, "bbox": [206, 0, 323, 348], "area": 6957}, {"id": 3503251, "category_id": 186, "iscrowd": 0, "bbox": [59, 0, 436, 211], "area": 59033}, {"id": 5930641, "category_id": 188, "iscrowd": 0, "bbox": [0, 129, 352, 511], "area": 61306}, {"id": 7762539, "category_id": 190, "iscrowd": 0, "bbox": [95, 395, 400, 245], "area": 35612}, {"id": 6788520, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 437, 401], "area": 40510}, {"id": 5394263, "category_id": 200, "iscrowd": 0, "bbox": [184, 458, 152, 132], "area": 14169}], "file_name": "000000056127.png", "image_id": 56127}, {"segments_info": [{"id": 10137786, "category_id": 54, "iscrowd": 0, "bbox": [83, 80, 340, 252], "area": 64273}, {"id": 4343107, "category_id": 72, "iscrowd": 0, "bbox": [232, 0, 399, 166], "area": 49944}, {"id": 9534070, "category_id": 76, "iscrowd": 0, "bbox": [410, 199, 230, 76], "area": 8756}, {"id": 12688779, "category_id": 100, "iscrowd": 0, "bbox": [590, 253, 20, 19], "area": 205}, {"id": 1842995, "category_id": 189, "iscrowd": 0, "bbox": [0, 275, 640, 205], "area": 30856}, {"id": 11908009, "category_id": 196, "iscrowd": 0, "bbox": [0, 209, 640, 271], "area": 102976}, {"id": 5393488, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 241, 183], "area": 29833}], "file_name": "000000056288.png", "image_id": 56288}, {"segments_info": [{"id": 9936531, "category_id": 72, "iscrowd": 0, "bbox": [0, 154, 283, 148], "area": 31493}, {"id": 7303797, "category_id": 72, "iscrowd": 0, "bbox": [283, 155, 310, 171], "area": 33498}, {"id": 8619145, "category_id": 74, "iscrowd": 0, "bbox": [409, 404, 29, 52], "area": 1295}, {"id": 8556443, "category_id": 75, "iscrowd": 0, "bbox": [322, 350, 32, 37], "area": 535}, {"id": 8161424, "category_id": 76, "iscrowd": 0, "bbox": [181, 389, 199, 63], "area": 10118}, {"id": 3483176, "category_id": 77, "iscrowd": 0, "bbox": [200, 332, 32, 33], "area": 757}, {"id": 855824, "category_id": 77, "iscrowd": 0, "bbox": [160, 340, 39, 41], "area": 1071}, {"id": 3620420, "category_id": 189, "iscrowd": 0, "bbox": [0, 275, 559, 193], "area": 57430}, {"id": 3556694, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 141584}], "file_name": "000000056344.png", "image_id": 56344}, {"segments_info": [{"id": 8030635, "category_id": 1, "iscrowd": 0, "bbox": [94, 326, 145, 202], "area": 15213}, {"id": 7768238, "category_id": 1, "iscrowd": 0, "bbox": [293, 253, 319, 144], "area": 24188}, {"id": 6975415, "category_id": 1, "iscrowd": 0, "bbox": [202, 333, 249, 165], "area": 14194}, {"id": 5657736, "category_id": 1, "iscrowd": 0, "bbox": [315, 529, 257, 83], "area": 10420}, {"id": 8560077, "category_id": 1, "iscrowd": 0, "bbox": [388, 404, 224, 172], "area": 17317}, {"id": 6119814, "category_id": 1, "iscrowd": 0, "bbox": [75, 495, 92, 117], "area": 2985}, {"id": 2758493, "category_id": 1, "iscrowd": 0, "bbox": [62, 527, 58, 58], "area": 1515}, {"id": 3815532, "category_id": 1, "iscrowd": 0, "bbox": [6, 385, 120, 148], "area": 9102}, {"id": 5922955, "category_id": 1, "iscrowd": 0, "bbox": [143, 463, 157, 135], "area": 10377}, {"id": 9018283, "category_id": 70, "iscrowd": 0, "bbox": [341, 0, 150, 168], "area": 20674}, {"id": 2295304, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 350, 305], "area": 37302}, {"id": 6645374, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 612, 489], "area": 45932}, {"id": 3876411, "category_id": 177, "iscrowd": 0, "bbox": [0, 287, 45, 95], "area": 2449}, {"id": 8558250, "category_id": 190, "iscrowd": 0, "bbox": [0, 148, 612, 464], "area": 116787}, {"id": 7966630, "category_id": 199, "iscrowd": 0, "bbox": [35, 0, 302, 293], "area": 43446}], "file_name": "000000056350.png", "image_id": 56350}, {"segments_info": [{"id": 7237234, "category_id": 16, "iscrowd": 0, "bbox": [132, 32, 235, 597], "area": 86605}, {"id": 4810577, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 505, 640], "area": 235089}, {"id": 14343382, "category_id": 187, "iscrowd": 0, "bbox": [425, 0, 80, 640], "area": 987}], "file_name": "000000056545.png", "image_id": 56545}, {"segments_info": [{"id": 2435633, "category_id": 22, "iscrowd": 0, "bbox": [1, 174, 88, 202], "area": 10582}, {"id": 3226441, "category_id": 22, "iscrowd": 0, "bbox": [48, 24, 546, 384], "area": 133493}, {"id": 3885658, "category_id": 22, "iscrowd": 0, "bbox": [1, 2, 213, 193], "area": 22384}, {"id": 4014671, "category_id": 22, "iscrowd": 0, "bbox": [181, 262, 182, 142], "area": 17606}, {"id": 3560268, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 252], "area": 29262}, {"id": 11319742, "category_id": 194, "iscrowd": 0, "bbox": [0, 286, 640, 140], "area": 39318}, {"id": 3554889, "category_id": 198, "iscrowd": 0, "bbox": [180, 262, 74, 112], "area": 889}], "file_name": "000000057027.png", "image_id": 57027}, {"segments_info": [{"id": 9144455, "category_id": 3, "iscrowd": 0, "bbox": [270, 269, 198, 152], "area": 23677}, {"id": 11047277, "category_id": 3, "iscrowd": 0, "bbox": [334, 264, 74, 10], "area": 539}, {"id": 4482440, "category_id": 6, "iscrowd": 0, "bbox": [324, 234, 84, 38], "area": 2416}, {"id": 6973804, "category_id": 7, "iscrowd": 0, "bbox": [118, 213, 398, 91], "area": 23928}, {"id": 5853547, "category_id": 10, "iscrowd": 0, "bbox": [364, 145, 27, 16], "area": 288}, {"id": 5460306, "category_id": 10, "iscrowd": 0, "bbox": [262, 172, 33, 11], "area": 255}, {"id": 7962500, "category_id": 128, "iscrowd": 0, "bbox": [539, 153, 101, 153], "area": 7578}, {"id": 8159104, "category_id": 149, "iscrowd": 0, "bbox": [0, 288, 640, 139], "area": 47732}, {"id": 6450813, "category_id": 171, "iscrowd": 0, "bbox": [460, 166, 118, 90], "area": 3509}, {"id": 4802886, "category_id": 181, "iscrowd": 0, "bbox": [496, 205, 91, 52], "area": 849}, {"id": 3751741, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 604, 332], "area": 31452}, {"id": 13815754, "category_id": 187, "iscrowd": 0, "bbox": [16, 0, 624, 222], "area": 91165}, {"id": 7700101, "category_id": 191, "iscrowd": 0, "bbox": [0, 288, 640, 99], "area": 7679}, {"id": 5465713, "category_id": 193, "iscrowd": 0, "bbox": [591, 326, 49, 24], "area": 663}, {"id": 8684675, "category_id": 197, "iscrowd": 0, "bbox": [70, 0, 527, 337], "area": 20404}], "file_name": "000000057149.png", "image_id": 57149}, {"segments_info": [{"id": 2631992, "category_id": 1, "iscrowd": 0, "bbox": [71, 22, 20, 74], "area": 441}, {"id": 2701893, "category_id": 1, "iscrowd": 0, "bbox": [214, 16, 23, 53], "area": 645}, {"id": 7831173, "category_id": 1, "iscrowd": 0, "bbox": [127, 6, 30, 83], "area": 1397}, {"id": 4608606, "category_id": 1, "iscrowd": 0, "bbox": [16, 41, 49, 130], "area": 2848}, {"id": 6711411, "category_id": 1, "iscrowd": 0, "bbox": [47, 28, 29, 92], "area": 902}, {"id": 4279398, "category_id": 1, "iscrowd": 0, "bbox": [110, 66, 36, 128], "area": 1474}, {"id": 4145481, "category_id": 1, "iscrowd": 0, "bbox": [0, 28, 28, 99], "area": 997}, {"id": 3684933, "category_id": 1, "iscrowd": 0, "bbox": [80, 32, 31, 74], "area": 632}, {"id": 2958370, "category_id": 1, "iscrowd": 0, "bbox": [176, 22, 56, 126], "area": 3552}, {"id": 2959142, "category_id": 1, "iscrowd": 0, "bbox": [193, 45, 47, 219], "area": 4877}, {"id": 6644072, "category_id": 1, "iscrowd": 0, "bbox": [37, 86, 89, 183], "area": 6799}, {"id": 3029575, "category_id": 1, "iscrowd": 0, "bbox": [175, 13, 33, 49], "area": 626}, {"id": 4804687, "category_id": 1, "iscrowd": 1, "bbox": [40, 1, 152, 33], "area": 746}, {"id": 3420218, "category_id": 27, "iscrowd": 0, "bbox": [0, 47, 21, 42], "area": 706}, {"id": 6510214, "category_id": 27, "iscrowd": 0, "bbox": [73, 47, 18, 31], "area": 314}, {"id": 7622058, "category_id": 27, "iscrowd": 0, "bbox": [57, 50, 7, 19], "area": 88}, {"id": 2564134, "category_id": 27, "iscrowd": 0, "bbox": [83, 55, 26, 39], "area": 667}, {"id": 2432818, "category_id": 27, "iscrowd": 0, "bbox": [204, 215, 36, 105], "area": 2596}, {"id": 5453863, "category_id": 27, "iscrowd": 0, "bbox": [141, 42, 41, 47], "area": 1096}, {"id": 8936999, "category_id": 27, "iscrowd": 0, "bbox": [32, 263, 82, 52], "area": 3340}, {"id": 4406625, "category_id": 27, "iscrowd": 0, "bbox": [45, 112, 37, 60], "area": 1058}, {"id": 3946309, "category_id": 27, "iscrowd": 0, "bbox": [37, 66, 41, 47], "area": 830}, {"id": 11775920, "category_id": 88, "iscrowd": 0, "bbox": [98, 88, 116, 168], "area": 11433}, {"id": 11055027, "category_id": 88, "iscrowd": 0, "bbox": [110, 47, 15, 19], "area": 198}, {"id": 1384740, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 38, 28], "area": 827}, {"id": 3685180, "category_id": 191, "iscrowd": 0, "bbox": [0, 18, 240, 302], "area": 21209}, {"id": 3824987, "category_id": 193, "iscrowd": 0, "bbox": [32, 0, 100, 22], "area": 1564}, {"id": 3752765, "category_id": 197, "iscrowd": 0, "bbox": [185, 0, 45, 29], "area": 660}], "file_name": "000000057150.png", "image_id": 57150}, {"segments_info": [{"id": 5537454, "category_id": 39, "iscrowd": 0, "bbox": [57, 37, 329, 65], "area": 8733}, {"id": 6587832, "category_id": 39, "iscrowd": 0, "bbox": [67, 213, 354, 121], "area": 5327}, {"id": 3231889, "category_id": 39, "iscrowd": 0, "bbox": [37, 261, 239, 246], "area": 9974}, {"id": 4939136, "category_id": 39, "iscrowd": 0, "bbox": [328, 437, 213, 156], "area": 7651}, {"id": 3164014, "category_id": 39, "iscrowd": 0, "bbox": [46, 7, 316, 67], "area": 6162}, {"id": 7445699, "category_id": 39, "iscrowd": 0, "bbox": [371, 246, 215, 98], "area": 5943}, {"id": 4810908, "category_id": 39, "iscrowd": 0, "bbox": [374, 322, 187, 93], "area": 3312}, {"id": 5405366, "category_id": 39, "iscrowd": 0, "bbox": [366, 291, 207, 94], "area": 5303}, {"id": 6784935, "category_id": 39, "iscrowd": 0, "bbox": [59, 62, 340, 76], "area": 8279}, {"id": 7646142, "category_id": 39, "iscrowd": 0, "bbox": [73, 103, 320, 76], "area": 4526}, {"id": 3825825, "category_id": 39, "iscrowd": 0, "bbox": [391, 232, 215, 88], "area": 4824}, {"id": 5668005, "category_id": 39, "iscrowd": 0, "bbox": [56, 129, 353, 86], "area": 3781}, {"id": 5930928, "category_id": 39, "iscrowd": 0, "bbox": [320, 422, 200, 138], "area": 5116}, {"id": 6188664, "category_id": 39, "iscrowd": 1, "bbox": [6, 88, 593, 448], "area": 458}, {"id": 5925245, "category_id": 62, "iscrowd": 0, "bbox": [6, 14, 606, 596], "area": 173396}, {"id": 5071488, "category_id": 86, "iscrowd": 0, "bbox": [512, 58, 70, 94], "area": 4083}, {"id": 5000525, "category_id": 189, "iscrowd": 0, "bbox": [0, 126, 612, 486], "area": 59346}, {"id": 4078906, "category_id": 190, "iscrowd": 0, "bbox": [515, 233, 97, 291], "area": 5731}, {"id": 9476501, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 612, 259], "area": 22403}], "file_name": "000000057232.png", "image_id": 57232}, {"segments_info": [{"id": 792103, "category_id": 62, "iscrowd": 0, "bbox": [0, 218, 34, 154], "area": 2587}, {"id": 924720, "category_id": 62, "iscrowd": 0, "bbox": [33, 187, 84, 148], "area": 6916}, {"id": 990512, "category_id": 67, "iscrowd": 0, "bbox": [0, 219, 58, 40], "area": 1225}, {"id": 7900060, "category_id": 82, "iscrowd": 0, "bbox": [168, 56, 207, 437], "area": 75348}, {"id": 1520458, "category_id": 188, "iscrowd": 0, "bbox": [13, 77, 362, 423], "area": 24942}, {"id": 397342, "category_id": 189, "iscrowd": 0, "bbox": [17, 220, 28, 119], "area": 470}, {"id": 2902622, "category_id": 190, "iscrowd": 0, "bbox": [0, 267, 254, 233], "area": 31105}, {"id": 6715782, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 435], "area": 43060}, {"id": 2438203, "category_id": 200, "iscrowd": 0, "bbox": [22, 278, 25, 53], "area": 519}], "file_name": "000000057238.png", "image_id": 57238}, {"segments_info": [{"id": 6316653, "category_id": 7, "iscrowd": 0, "bbox": [0, 3, 640, 329], "area": 115471}, {"id": 5535837, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 140], "area": 58812}, {"id": 15524811, "category_id": 187, "iscrowd": 0, "bbox": [526, 0, 114, 39], "area": 2641}], "file_name": "000000057244.png", "image_id": 57244}, {"segments_info": [{"id": 6976374, "category_id": 1, "iscrowd": 0, "bbox": [518, 142, 90, 106], "area": 1472}, {"id": 7038309, "category_id": 1, "iscrowd": 0, "bbox": [200, 122, 15, 41], "area": 365}, {"id": 5656399, "category_id": 1, "iscrowd": 0, "bbox": [135, 93, 18, 28], "area": 314}, {"id": 7763330, "category_id": 1, "iscrowd": 0, "bbox": [276, 118, 19, 33], "area": 328}, {"id": 2574173, "category_id": 1, "iscrowd": 0, "bbox": [522, 131, 100, 148], "area": 3941}, {"id": 8749713, "category_id": 1, "iscrowd": 0, "bbox": [155, 142, 22, 18], "area": 241}, {"id": 9735831, "category_id": 1, "iscrowd": 0, "bbox": [260, 144, 14, 21], "area": 168}, {"id": 6054268, "category_id": 1, "iscrowd": 0, "bbox": [175, 122, 15, 41], "area": 394}, {"id": 7763078, "category_id": 1, "iscrowd": 0, "bbox": [255, 120, 19, 30], "area": 332}, {"id": 10130850, "category_id": 1, "iscrowd": 0, "bbox": [269, 144, 12, 20], "area": 141}, {"id": 7105405, "category_id": 1, "iscrowd": 0, "bbox": [222, 122, 12, 32], "area": 257}, {"id": 7697521, "category_id": 1, "iscrowd": 0, "bbox": [317, 153, 126, 163], "area": 6136}, {"id": 4276050, "category_id": 1, "iscrowd": 0, "bbox": [413, 166, 105, 165], "area": 5160}, {"id": 4867401, "category_id": 1, "iscrowd": 1, "bbox": [21, 85, 616, 83], "area": 8624}, {"id": 4078130, "category_id": 3, "iscrowd": 0, "bbox": [72, 85, 66, 16], "area": 598}, {"id": 2104345, "category_id": 3, "iscrowd": 0, "bbox": [520, 104, 34, 24], "area": 520}, {"id": 5262408, "category_id": 3, "iscrowd": 0, "bbox": [324, 90, 36, 17], "area": 333}, {"id": 6183250, "category_id": 3, "iscrowd": 0, "bbox": [332, 104, 95, 30], "area": 1934}, {"id": 4077619, "category_id": 8, "iscrowd": 0, "bbox": [506, 104, 49, 25], "area": 170}, {"id": 4604996, "category_id": 8, "iscrowd": 0, "bbox": [325, 89, 35, 23], "area": 132}, {"id": 6054239, "category_id": 8, "iscrowd": 0, "bbox": [227, 78, 82, 50], "area": 2666}, {"id": 5132621, "category_id": 15, "iscrowd": 0, "bbox": [130, 109, 32, 18], "area": 342}, {"id": 3684407, "category_id": 15, "iscrowd": 0, "bbox": [0, 104, 108, 20], "area": 816}, {"id": 10197402, "category_id": 15, "iscrowd": 0, "bbox": [401, 153, 25, 2], "area": 36}, {"id": 12828862, "category_id": 15, "iscrowd": 0, "bbox": [382, 144, 57, 12], "area": 286}, {"id": 5986904, "category_id": 15, "iscrowd": 0, "bbox": [212, 120, 26, 7], "area": 68}, {"id": 8749703, "category_id": 15, "iscrowd": 0, "bbox": [327, 142, 68, 22], "area": 403}, {"id": 8154460, "category_id": 27, "iscrowd": 0, "bbox": [425, 155, 9, 12], "area": 100}, {"id": 3747973, "category_id": 27, "iscrowd": 0, "bbox": [422, 148, 14, 7], "area": 70}, {"id": 9204034, "category_id": 27, "iscrowd": 0, "bbox": [397, 143, 8, 10], "area": 57}, {"id": 3485227, "category_id": 27, "iscrowd": 0, "bbox": [373, 142, 10, 10], "area": 84}, {"id": 6575158, "category_id": 27, "iscrowd": 0, "bbox": [407, 156, 11, 10], "area": 84}, {"id": 7701632, "category_id": 37, "iscrowd": 0, "bbox": [243, 286, 24, 24], "area": 460}, {"id": 2632231, "category_id": 128, "iscrowd": 0, "bbox": [64, 34, 576, 103], "area": 9516}, {"id": 3695430, "category_id": 145, "iscrowd": 0, "bbox": [0, 151, 640, 275], "area": 152687}, {"id": 3818337, "category_id": 171, "iscrowd": 0, "bbox": [0, 81, 640, 90], "area": 16082}, {"id": 920845, "category_id": 181, "iscrowd": 0, "bbox": [300, 74, 110, 48], "area": 1927}, {"id": 1057054, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 137], "area": 51120}, {"id": 4211523, "category_id": 185, "iscrowd": 0, "bbox": [0, 87, 342, 66], "area": 1989}, {"id": 4543309, "category_id": 197, "iscrowd": 0, "bbox": [337, 28, 21, 21], "area": 286}], "file_name": "000000057597.png", "image_id": 57597}, {"segments_info": [{"id": 4609669, "category_id": 1, "iscrowd": 0, "bbox": [343, 196, 59, 83], "area": 2521}, {"id": 6187399, "category_id": 1, "iscrowd": 0, "bbox": [161, 131, 52, 110], "area": 3141}, {"id": 9013904, "category_id": 1, "iscrowd": 0, "bbox": [337, 60, 11, 22], "area": 131}, {"id": 5662617, "category_id": 1, "iscrowd": 0, "bbox": [454, 192, 36, 62], "area": 1308}, {"id": 4544903, "category_id": 1, "iscrowd": 0, "bbox": [381, 198, 49, 60], "area": 1386}, {"id": 4676755, "category_id": 1, "iscrowd": 0, "bbox": [482, 199, 67, 82], "area": 2352}, {"id": 5333659, "category_id": 1, "iscrowd": 0, "bbox": [272, 187, 55, 89], "area": 2128}, {"id": 5663378, "category_id": 1, "iscrowd": 0, "bbox": [310, 182, 36, 74], "area": 1523}, {"id": 4479357, "category_id": 1, "iscrowd": 0, "bbox": [553, 198, 60, 94], "area": 2896}, {"id": 4742809, "category_id": 1, "iscrowd": 0, "bbox": [517, 193, 39, 68], "area": 1408}, {"id": 4873356, "category_id": 1, "iscrowd": 0, "bbox": [417, 192, 67, 97], "area": 2912}, {"id": 10723223, "category_id": 3, "iscrowd": 0, "bbox": [189, 57, 46, 16], "area": 498}, {"id": 8223088, "category_id": 3, "iscrowd": 0, "bbox": [67, 54, 33, 16], "area": 296}, {"id": 9603968, "category_id": 3, "iscrowd": 0, "bbox": [235, 60, 21, 11], "area": 189}, {"id": 10066078, "category_id": 8, "iscrowd": 0, "bbox": [123, 46, 49, 24], "area": 938}, {"id": 5460324, "category_id": 9, "iscrowd": 0, "bbox": [11, 191, 629, 114], "area": 17194}, {"id": 8948359, "category_id": 148, "iscrowd": 0, "bbox": [0, 102, 640, 378], "area": 193351}, {"id": 6908280, "category_id": 171, "iscrowd": 0, "bbox": [88, 10, 114, 66], "area": 4675}, {"id": 5003082, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 77], "area": 29090}, {"id": 5855569, "category_id": 185, "iscrowd": 0, "bbox": [321, 15, 319, 63], "area": 6870}, {"id": 5406567, "category_id": 193, "iscrowd": 0, "bbox": [0, 50, 640, 79], "area": 25993}, {"id": 6842212, "category_id": 197, "iscrowd": 0, "bbox": [47, 0, 384, 75], "area": 3903}, {"id": 5528656, "category_id": 198, "iscrowd": 0, "bbox": [122, 102, 40, 18], "area": 416}], "file_name": "000000057672.png", "image_id": 57672}, {"segments_info": [{"id": 12500673, "category_id": 85, "iscrowd": 0, "bbox": [414, 75, 20, 28], "area": 415}, {"id": 11250605, "category_id": 85, "iscrowd": 0, "bbox": [368, 76, 20, 28], "area": 433}, {"id": 1382426, "category_id": 95, "iscrowd": 0, "bbox": [0, 197, 640, 256], "area": 103345}, {"id": 1844002, "category_id": 148, "iscrowd": 0, "bbox": [0, 415, 640, 65], "area": 25156}, {"id": 16508881, "category_id": 187, "iscrowd": 0, "bbox": [53, 0, 266, 168], "area": 23876}, {"id": 6580338, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 153944}], "file_name": "000000057725.png", "image_id": 57725}, {"segments_info": [{"id": 9806501, "category_id": 1, "iscrowd": 0, "bbox": [241, 217, 7, 19], "area": 67}, {"id": 6252671, "category_id": 1, "iscrowd": 0, "bbox": [239, 203, 5, 19], "area": 71}, {"id": 5198958, "category_id": 1, "iscrowd": 0, "bbox": [73, 208, 13, 22], "area": 118}, {"id": 6639710, "category_id": 1, "iscrowd": 0, "bbox": [130, 207, 12, 6], "area": 53}, {"id": 2893361, "category_id": 1, "iscrowd": 0, "bbox": [126, 214, 9, 27], "area": 147}, {"id": 2100244, "category_id": 1, "iscrowd": 0, "bbox": [455, 201, 6, 17], "area": 59}, {"id": 5786979, "category_id": 1, "iscrowd": 0, "bbox": [175, 204, 9, 16], "area": 71}, {"id": 1248270, "category_id": 1, "iscrowd": 0, "bbox": [168, 198, 9, 22], "area": 101}, {"id": 2825523, "category_id": 1, "iscrowd": 0, "bbox": [346, 206, 7, 11], "area": 63}, {"id": 4868206, "category_id": 1, "iscrowd": 0, "bbox": [391, 210, 7, 21], "area": 95}, {"id": 11116719, "category_id": 1, "iscrowd": 0, "bbox": [188, 201, 9, 19], "area": 88}, {"id": 5191224, "category_id": 1, "iscrowd": 0, "bbox": [215, 203, 8, 13], "area": 67}, {"id": 2890274, "category_id": 1, "iscrowd": 0, "bbox": [287, 202, 6, 13], "area": 59}, {"id": 2763577, "category_id": 1, "iscrowd": 1, "bbox": [117, 214, 9, 19], "area": 148}, {"id": 1839386, "category_id": 18, "iscrowd": 0, "bbox": [453, 215, 5, 4], "area": 11}, {"id": 1772812, "category_id": 18, "iscrowd": 0, "bbox": [291, 211, 9, 5], "area": 29}, {"id": 1513499, "category_id": 18, "iscrowd": 0, "bbox": [116, 233, 13, 8], "area": 70}, {"id": 11643018, "category_id": 38, "iscrowd": 0, "bbox": [338, 108, 6, 17], "area": 42}, {"id": 15849107, "category_id": 38, "iscrowd": 0, "bbox": [319, 120, 2, 4], "area": 6}, {"id": 9747919, "category_id": 154, "iscrowd": 0, "bbox": [0, 209, 500, 52], "area": 17106}, {"id": 8542533, "category_id": 155, "iscrowd": 0, "bbox": [0, 183, 500, 130], "area": 43254}, {"id": 4091994, "category_id": 184, "iscrowd": 0, "bbox": [0, 184, 117, 39], "area": 2959}, {"id": 16309912, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 189], "area": 91631}], "file_name": "000000057760.png", "image_id": 57760}, {"segments_info": [{"id": 5534587, "category_id": 70, "iscrowd": 0, "bbox": [112, 354, 167, 124], "area": 5138}, {"id": 8362654, "category_id": 81, "iscrowd": 0, "bbox": [307, 415, 165, 63], "area": 7574}, {"id": 3230806, "category_id": 112, "iscrowd": 0, "bbox": [0, 132, 121, 346], "area": 37699}, {"id": 11975352, "category_id": 130, "iscrowd": 0, "bbox": [367, 14, 127, 76], "area": 5568}, {"id": 3954268, "category_id": 133, "iscrowd": 0, "bbox": [324, 75, 162, 305], "area": 39210}, {"id": 3363165, "category_id": 176, "iscrowd": 0, "bbox": [0, 84, 102, 55], "area": 4077}, {"id": 5334636, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 478], "area": 184091}], "file_name": "000000058029.png", "image_id": 58029}, {"segments_info": [{"id": 7967402, "category_id": 17, "iscrowd": 0, "bbox": [33, 23, 461, 461], "area": 107164}, {"id": 5793386, "category_id": 84, "iscrowd": 0, "bbox": [0, 67, 126, 26], "area": 1702}, {"id": 6975344, "category_id": 84, "iscrowd": 0, "bbox": [1, 24, 142, 33], "area": 4276}, {"id": 7106160, "category_id": 84, "iscrowd": 0, "bbox": [0, 55, 111, 12], "area": 783}, {"id": 4079431, "category_id": 84, "iscrowd": 0, "bbox": [167, 10, 90, 35], "area": 1318}, {"id": 3288634, "category_id": 84, "iscrowd": 0, "bbox": [152, 16, 65, 36], "area": 895}, {"id": 11909305, "category_id": 189, "iscrowd": 0, "bbox": [0, 96, 500, 394], "area": 97039}, {"id": 5132625, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 305, 131], "area": 14082}, {"id": 8552833, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 147], "area": 16661}], "file_name": "000000058111.png", "image_id": 58111}, {"segments_info": [{"id": 3819101, "category_id": 1, "iscrowd": 0, "bbox": [146, 81, 319, 395], "area": 78528}, {"id": 2706509, "category_id": 1, "iscrowd": 0, "bbox": [433, 78, 207, 392], "area": 52748}, {"id": 1391941, "category_id": 49, "iscrowd": 0, "bbox": [552, 283, 35, 83], "area": 1075}, {"id": 813696, "category_id": 49, "iscrowd": 0, "bbox": [573, 336, 67, 35], "area": 651}, {"id": 4228837, "category_id": 59, "iscrowd": 0, "bbox": [323, 278, 121, 101], "area": 7650}, {"id": 5859469, "category_id": 63, "iscrowd": 0, "bbox": [42, 155, 478, 318], "area": 45305}, {"id": 5996171, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 447], "area": 105845}], "file_name": "000000058350.png", "image_id": 58350}, {"segments_info": [{"id": 1983315, "category_id": 7, "iscrowd": 0, "bbox": [0, 179, 210, 41], "area": 7081}, {"id": 995133, "category_id": 22, "iscrowd": 0, "bbox": [304, 204, 33, 66], "area": 1485}, {"id": 1196117, "category_id": 22, "iscrowd": 0, "bbox": [273, 188, 42, 82], "area": 2441}, {"id": 1853531, "category_id": 22, "iscrowd": 0, "bbox": [329, 179, 54, 90], "area": 3301}, {"id": 2778234, "category_id": 177, "iscrowd": 0, "bbox": [162, 197, 4, 8], "area": 27}, {"id": 1195344, "category_id": 184, "iscrowd": 0, "bbox": [0, 86, 640, 126], "area": 46979}, {"id": 12049634, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 124], "area": 74453}, {"id": 3238271, "category_id": 193, "iscrowd": 0, "bbox": [0, 170, 640, 296], "area": 136085}], "file_name": "000000058384.png", "image_id": 58384}, {"segments_info": [{"id": 1973790, "category_id": 1, "iscrowd": 0, "bbox": [343, 164, 191, 77], "area": 5300}, {"id": 855309, "category_id": 1, "iscrowd": 0, "bbox": [419, 183, 61, 45], "area": 1798}, {"id": 7039851, "category_id": 15, "iscrowd": 0, "bbox": [45, 242, 547, 225], "area": 82434}, {"id": 3158064, "category_id": 154, "iscrowd": 0, "bbox": [296, 374, 328, 112], "area": 23543}, {"id": 10987431, "category_id": 155, "iscrowd": 0, "bbox": [140, 383, 412, 36], "area": 2790}], "file_name": "000000058393.png", "image_id": 58393}, {"segments_info": [{"id": 5396072, "category_id": 1, "iscrowd": 0, "bbox": [0, 27, 79, 387], "area": 17297}, {"id": 3817020, "category_id": 1, "iscrowd": 0, "bbox": [37, 18, 183, 403], "area": 49873}, {"id": 9211287, "category_id": 1, "iscrowd": 0, "bbox": [205, 84, 53, 37], "area": 987}, {"id": 2826539, "category_id": 1, "iscrowd": 0, "bbox": [219, 61, 316, 355], "area": 64631}, {"id": 8420221, "category_id": 1, "iscrowd": 0, "bbox": [434, 109, 40, 64], "area": 1497}, {"id": 13813689, "category_id": 3, "iscrowd": 0, "bbox": [416, 137, 224, 281], "area": 37524}, {"id": 9010033, "category_id": 3, "iscrowd": 0, "bbox": [214, 119, 65, 25], "area": 984}, {"id": 10919832, "category_id": 3, "iscrowd": 0, "bbox": [31, 89, 27, 32], "area": 388}, {"id": 5655871, "category_id": 3, "iscrowd": 0, "bbox": [202, 145, 99, 266], "area": 11649}, {"id": 12364181, "category_id": 3, "iscrowd": 0, "bbox": [523, 43, 117, 108], "area": 5039}, {"id": 5586476, "category_id": 32, "iscrowd": 0, "bbox": [306, 222, 50, 199], "area": 5276}, {"id": 12682322, "category_id": 151, "iscrowd": 0, "bbox": [531, 0, 86, 49], "area": 3661}, {"id": 7432806, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 163], "area": 56682}], "file_name": "000000058539.png", "image_id": 58539}, {"segments_info": [{"id": 15591902, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 634, 640], "area": 303039}], "file_name": "000000058636.png", "image_id": 58636}, {"segments_info": [{"id": 11114638, "category_id": 85, "iscrowd": 0, "bbox": [225, 133, 125, 68], "area": 6185}, {"id": 15255716, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 425, 472], "area": 81644}, {"id": 3422802, "category_id": 197, "iscrowd": 0, "bbox": [0, 24, 425, 616], "area": 152473}], "file_name": "000000058655.png", "image_id": 58655}, {"segments_info": [{"id": 6710917, "category_id": 1, "iscrowd": 0, "bbox": [249, 119, 391, 354], "area": 76270}, {"id": 7106175, "category_id": 1, "iscrowd": 0, "bbox": [1, 103, 287, 373], "area": 66841}, {"id": 3874332, "category_id": 32, "iscrowd": 0, "bbox": [140, 316, 52, 165], "area": 6474}, {"id": 10479602, "category_id": 52, "iscrowd": 0, "bbox": [45, 193, 44, 96], "area": 2615}, {"id": 5181649, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 444], "area": 149819}], "file_name": "000000058705.png", "image_id": 58705}, {"segments_info": [{"id": 2634041, "category_id": 1, "iscrowd": 0, "bbox": [329, 81, 91, 329], "area": 12703}, {"id": 4213848, "category_id": 1, "iscrowd": 0, "bbox": [68, 42, 47, 129], "area": 1607}, {"id": 1448223, "category_id": 1, "iscrowd": 0, "bbox": [434, 68, 78, 228], "area": 8187}, {"id": 2501939, "category_id": 1, "iscrowd": 0, "bbox": [170, 1, 169, 421], "area": 39278}, {"id": 1843238, "category_id": 1, "iscrowd": 0, "bbox": [308, 87, 21, 25], "area": 370}, {"id": 3028543, "category_id": 1, "iscrowd": 0, "bbox": [2, 52, 149, 264], "area": 25555}, {"id": 4017250, "category_id": 1, "iscrowd": 0, "bbox": [255, 75, 38, 59], "area": 1225}, {"id": 2831164, "category_id": 1, "iscrowd": 0, "bbox": [258, 111, 37, 119], "area": 1948}, {"id": 922130, "category_id": 1, "iscrowd": 0, "bbox": [484, 100, 44, 173], "area": 3605}, {"id": 724494, "category_id": 1, "iscrowd": 0, "bbox": [521, 78, 44, 236], "area": 6454}, {"id": 3095109, "category_id": 1, "iscrowd": 0, "bbox": [286, 98, 46, 88], "area": 2552}, {"id": 1316117, "category_id": 1, "iscrowd": 0, "bbox": [373, 78, 37, 94], "area": 1374}, {"id": 6187639, "category_id": 1, "iscrowd": 0, "bbox": [83, 61, 105, 148], "area": 8645}, {"id": 1382683, "category_id": 1, "iscrowd": 1, "bbox": [301, 62, 242, 150], "area": 5215}, {"id": 10002342, "category_id": 75, "iscrowd": 0, "bbox": [345, 183, 29, 21], "area": 332}, {"id": 13224910, "category_id": 75, "iscrowd": 0, "bbox": [119, 356, 109, 46], "area": 3061}, {"id": 8686222, "category_id": 75, "iscrowd": 0, "bbox": [308, 275, 27, 11], "area": 199}, {"id": 10331563, "category_id": 75, "iscrowd": 0, "bbox": [288, 156, 24, 28], "area": 266}, {"id": 7765900, "category_id": 75, "iscrowd": 0, "bbox": [313, 213, 26, 27], "area": 282}, {"id": 12830668, "category_id": 75, "iscrowd": 0, "bbox": [21, 308, 76, 45], "area": 1669}, {"id": 6514025, "category_id": 130, "iscrowd": 0, "bbox": [473, 24, 38, 47], "area": 1327}, {"id": 2699578, "category_id": 180, "iscrowd": 0, "bbox": [47, 13, 29, 41], "area": 858}, {"id": 2369331, "category_id": 186, "iscrowd": 0, "bbox": [487, 0, 78, 56], "area": 2885}, {"id": 1907483, "category_id": 190, "iscrowd": 0, "bbox": [255, 202, 385, 225], "area": 33334}, {"id": 2760733, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 413], "area": 43629}], "file_name": "000000059044.png", "image_id": 59044}, {"segments_info": [{"id": 12235437, "category_id": 3, "iscrowd": 0, "bbox": [264, 218, 26, 10], "area": 127}, {"id": 8424074, "category_id": 24, "iscrowd": 0, "bbox": [61, 231, 23, 24], "area": 323}, {"id": 5399930, "category_id": 25, "iscrowd": 0, "bbox": [68, 243, 140, 207], "area": 7022}, {"id": 8884631, "category_id": 25, "iscrowd": 0, "bbox": [323, 180, 8, 26], "area": 116}, {"id": 7044240, "category_id": 25, "iscrowd": 0, "bbox": [118, 260, 113, 209], "area": 7160}, {"id": 8819615, "category_id": 25, "iscrowd": 0, "bbox": [339, 180, 15, 24], "area": 160}, {"id": 5665661, "category_id": 25, "iscrowd": 0, "bbox": [144, 313, 46, 142], "area": 1232}, {"id": 5532030, "category_id": 25, "iscrowd": 0, "bbox": [266, 237, 122, 237], "area": 6446}, {"id": 5859191, "category_id": 25, "iscrowd": 0, "bbox": [214, 185, 126, 305], "area": 8792}, {"id": 3692916, "category_id": 25, "iscrowd": 0, "bbox": [258, 243, 38, 91], "area": 1039}, {"id": 8891043, "category_id": 149, "iscrowd": 0, "bbox": [270, 217, 157, 27], "area": 2450}, {"id": 5855053, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 170], "area": 61776}, {"id": 4884342, "category_id": 193, "iscrowd": 0, "bbox": [0, 117, 427, 523], "area": 155578}], "file_name": "000000059386.png", "image_id": 59386}, {"segments_info": [{"id": 1119771, "category_id": 1, "iscrowd": 0, "bbox": [532, 53, 59, 53], "area": 1624}, {"id": 856077, "category_id": 1, "iscrowd": 0, "bbox": [588, 47, 52, 186], "area": 5692}, {"id": 4171721, "category_id": 52, "iscrowd": 0, "bbox": [215, 336, 174, 94], "area": 7859}, {"id": 5402503, "category_id": 61, "iscrowd": 0, "bbox": [257, 311, 83, 70], "area": 4525}, {"id": 593425, "category_id": 62, "iscrowd": 0, "bbox": [545, 106, 76, 117], "area": 1928}, {"id": 11049361, "category_id": 73, "iscrowd": 0, "bbox": [167, 89, 285, 242], "area": 48533}, {"id": 132611, "category_id": 73, "iscrowd": 0, "bbox": [572, 84, 36, 24], "area": 516}, {"id": 5987421, "category_id": 74, "iscrowd": 0, "bbox": [505, 291, 69, 75], "area": 4017}, {"id": 5920599, "category_id": 76, "iscrowd": 0, "bbox": [215, 246, 220, 38], "area": 6108}, {"id": 6644836, "category_id": 77, "iscrowd": 0, "bbox": [65, 271, 97, 39], "area": 2838}, {"id": 1716038, "category_id": 118, "iscrowd": 0, "bbox": [154, 144, 486, 91], "area": 12530}, {"id": 9672599, "category_id": 189, "iscrowd": 0, "bbox": [0, 87, 640, 393], "area": 103381}, {"id": 11447202, "category_id": 195, "iscrowd": 0, "bbox": [0, 78, 494, 283], "area": 5527}, {"id": 4542561, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 258], "area": 58684}], "file_name": "000000059598.png", "image_id": 59598}, {"segments_info": [{"id": 3026478, "category_id": 1, "iscrowd": 0, "bbox": [350, 489, 74, 130], "area": 4738}, {"id": 7697781, "category_id": 1, "iscrowd": 0, "bbox": [105, 375, 21, 62], "area": 749}, {"id": 2302755, "category_id": 1, "iscrowd": 0, "bbox": [417, 38, 20, 60], "area": 894}, {"id": 2302752, "category_id": 1, "iscrowd": 0, "bbox": [374, 358, 25, 67], "area": 1006}, {"id": 3289650, "category_id": 1, "iscrowd": 0, "bbox": [373, 43, 27, 68], "area": 1061}, {"id": 3355443, "category_id": 1, "iscrowd": 0, "bbox": [190, 120, 59, 204], "area": 7464}, {"id": 6316128, "category_id": 1, "iscrowd": 0, "bbox": [3, 373, 27, 71], "area": 1139}, {"id": 2829099, "category_id": 1, "iscrowd": 0, "bbox": [179, 402, 23, 33], "area": 402}, {"id": 2368548, "category_id": 1, "iscrowd": 0, "bbox": [457, 27, 22, 71], "area": 995}, {"id": 3421236, "category_id": 1, "iscrowd": 0, "bbox": [74, 431, 30, 50], "area": 697}, {"id": 3421231, "category_id": 1, "iscrowd": 0, "bbox": [183, 89, 28, 75], "area": 871}, {"id": 4408131, "category_id": 1, "iscrowd": 0, "bbox": [274, 175, 101, 140], "area": 4610}, {"id": 1644825, "category_id": 1, "iscrowd": 0, "bbox": [453, 344, 24, 82], "area": 1085}, {"id": 4013373, "category_id": 1, "iscrowd": 1, "bbox": [2, 10, 480, 439], "area": 24103}, {"id": 5526612, "category_id": 2, "iscrowd": 0, "bbox": [257, 70, 21, 28], "area": 301}, {"id": 5658198, "category_id": 2, "iscrowd": 0, "bbox": [323, 75, 15, 15], "area": 164}, {"id": 2434341, "category_id": 2, "iscrowd": 0, "bbox": [329, 383, 25, 26], "area": 343}, {"id": 3750201, "category_id": 2, "iscrowd": 0, "bbox": [243, 74, 25, 19], "area": 250}, {"id": 3684408, "category_id": 2, "iscrowd": 0, "bbox": [258, 383, 23, 29], "area": 319}, {"id": 11447982, "category_id": 42, "iscrowd": 0, "bbox": [183, 112, 11, 36], "area": 119}, {"id": 9605778, "category_id": 42, "iscrowd": 0, "bbox": [55, 135, 66, 14], "area": 320}, {"id": 11513775, "category_id": 42, "iscrowd": 0, "bbox": [136, 177, 64, 104], "area": 3275}, {"id": 11579568, "category_id": 42, "iscrowd": 0, "bbox": [173, 424, 52, 45], "area": 1160}, {"id": 13290186, "category_id": 42, "iscrowd": 0, "bbox": [263, 299, 101, 27], "area": 1651}, {"id": 9671571, "category_id": 42, "iscrowd": 0, "bbox": [56, 452, 61, 8], "area": 267}, {"id": 12961221, "category_id": 42, "iscrowd": 0, "bbox": [308, 504, 113, 128], "area": 4967}, {"id": 11776947, "category_id": 178, "iscrowd": 0, "bbox": [0, 155, 486, 485], "area": 119475}, {"id": 3487029, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 486, 419], "area": 63842}], "file_name": "000000059635.png", "image_id": 59635}, {"segments_info": [{"id": 3819350, "category_id": 70, "iscrowd": 0, "bbox": [1, 417, 134, 148], "area": 11475}, {"id": 4809595, "category_id": 70, "iscrowd": 0, "bbox": [233, 317, 194, 316], "area": 29606}, {"id": 7700372, "category_id": 168, "iscrowd": 0, "bbox": [0, 292, 34, 53], "area": 1365}, {"id": 5401475, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 427, 613], "area": 183986}, {"id": 2899792, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 155, 82], "area": 9040}, {"id": 3162448, "category_id": 190, "iscrowd": 0, "bbox": [0, 480, 427, 160], "area": 30984}, {"id": 661550, "category_id": 197, "iscrowd": 0, "bbox": [0, 68, 91, 69], "area": 4883}], "file_name": "000000059920.png", "image_id": 59920}, {"segments_info": [{"id": 9737364, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 393, 423], "area": 94307}, {"id": 10000536, "category_id": 28, "iscrowd": 0, "bbox": [24, 1, 616, 420], "area": 172291}], "file_name": "000000060052.png", "image_id": 60052}, {"segments_info": [{"id": 2170916, "category_id": 1, "iscrowd": 0, "bbox": [552, 175, 12, 41], "area": 305}, {"id": 7633548, "category_id": 1, "iscrowd": 0, "bbox": [534, 182, 9, 41], "area": 230}, {"id": 6839657, "category_id": 1, "iscrowd": 0, "bbox": [541, 178, 6, 44], "area": 130}, {"id": 4931391, "category_id": 1, "iscrowd": 0, "bbox": [618, 185, 9, 46], "area": 236}, {"id": 6581370, "category_id": 1, "iscrowd": 0, "bbox": [552, 205, 12, 54], "area": 299}, {"id": 4481387, "category_id": 7, "iscrowd": 0, "bbox": [224, 98, 271, 243], "area": 45403}, {"id": 8743031, "category_id": 130, "iscrowd": 0, "bbox": [416, 127, 19, 12], "area": 141}, {"id": 9278104, "category_id": 144, "iscrowd": 0, "bbox": [247, 203, 393, 220], "area": 51603}, {"id": 7300714, "category_id": 147, "iscrowd": 0, "bbox": [0, 191, 336, 232], "area": 30642}, {"id": 7821905, "category_id": 151, "iscrowd": 0, "bbox": [0, 96, 227, 104], "area": 13835}, {"id": 9398612, "category_id": 161, "iscrowd": 0, "bbox": [0, 189, 33, 60], "area": 1407}, {"id": 2171714, "category_id": 177, "iscrowd": 0, "bbox": [559, 112, 48, 185], "area": 6122}, {"id": 6642247, "category_id": 184, "iscrowd": 0, "bbox": [0, 54, 519, 143], "area": 6367}, {"id": 9538189, "category_id": 185, "iscrowd": 0, "bbox": [125, 179, 21, 23], "area": 380}, {"id": 14863796, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 417, 226], "area": 26729}, {"id": 9211793, "category_id": 193, "iscrowd": 0, "bbox": [0, 188, 226, 74], "area": 6776}, {"id": 8817556, "category_id": 194, "iscrowd": 0, "bbox": [0, 293, 257, 130], "area": 15153}, {"id": 4211773, "category_id": 197, "iscrowd": 0, "bbox": [352, 0, 288, 241], "area": 32977}, {"id": 11773086, "category_id": 199, "iscrowd": 0, "bbox": [0, 163, 212, 77], "area": 6098}], "file_name": "000000060090.png", "image_id": 60090}, {"segments_info": [{"id": 11498337, "category_id": 1, "iscrowd": 0, "bbox": [195, 1, 437, 359], "area": 55807}, {"id": 4803429, "category_id": 1, "iscrowd": 0, "bbox": [0, 105, 305, 251], "area": 45087}, {"id": 11909815, "category_id": 37, "iscrowd": 0, "bbox": [39, 19, 110, 112], "area": 9588}, {"id": 2506820, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 113931}, {"id": 10393964, "category_id": 187, "iscrowd": 0, "bbox": [442, 0, 198, 48], "area": 4063}], "file_name": "000000060102.png", "image_id": 60102}, {"segments_info": [{"id": 5857631, "category_id": 1, "iscrowd": 0, "bbox": [103, 235, 262, 360], "area": 33360}, {"id": 3033933, "category_id": 15, "iscrowd": 0, "bbox": [135, 290, 319, 263], "area": 20104}, {"id": 3232060, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 139632}, {"id": 13622736, "category_id": 187, "iscrowd": 0, "bbox": [168, 162, 13, 42], "area": 398}], "file_name": "000000060347.png", "image_id": 60347}, {"segments_info": [{"id": 8808805, "category_id": 16, "iscrowd": 0, "bbox": [444, 188, 7, 7], "area": 27}, {"id": 8347224, "category_id": 16, "iscrowd": 0, "bbox": [395, 205, 4, 5], "area": 13}, {"id": 6966087, "category_id": 16, "iscrowd": 0, "bbox": [469, 182, 4, 7], "area": 17}, {"id": 10784135, "category_id": 16, "iscrowd": 0, "bbox": [422, 195, 7, 7], "area": 33}, {"id": 10783618, "category_id": 16, "iscrowd": 0, "bbox": [508, 203, 56, 28], "area": 32}, {"id": 11112584, "category_id": 16, "iscrowd": 0, "bbox": [433, 192, 6, 6], "area": 25}, {"id": 6834503, "category_id": 16, "iscrowd": 0, "bbox": [414, 201, 5, 3], "area": 11}, {"id": 8611668, "category_id": 16, "iscrowd": 0, "bbox": [628, 259, 4, 4], "area": 11}, {"id": 4995383, "category_id": 16, "iscrowd": 0, "bbox": [539, 217, 6, 6], "area": 15}, {"id": 7096382, "category_id": 16, "iscrowd": 0, "bbox": [498, 197, 3, 5], "area": 12}, {"id": 9072997, "category_id": 16, "iscrowd": 0, "bbox": [604, 248, 5, 5], "area": 17}, {"id": 7229252, "category_id": 16, "iscrowd": 0, "bbox": [503, 200, 5, 4], "area": 15}, {"id": 11180690, "category_id": 16, "iscrowd": 1, "bbox": [593, 243, 47, 29], "area": 243}, {"id": 11306360, "category_id": 85, "iscrowd": 0, "bbox": [61, 54, 142, 187], "area": 19502}, {"id": 2433565, "category_id": 181, "iscrowd": 0, "bbox": [210, 394, 265, 86], "area": 10288}, {"id": 16442327, "category_id": 187, "iscrowd": 0, "bbox": [55, 0, 585, 275], "area": 102438}, {"id": 8615793, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 137324}], "file_name": "000000060363.png", "image_id": 60363}, {"segments_info": [{"id": 329739, "category_id": 62, "iscrowd": 0, "bbox": [364, 510, 115, 130], "area": 5329}, {"id": 989471, "category_id": 62, "iscrowd": 0, "bbox": [0, 522, 41, 118], "area": 3203}, {"id": 2571085, "category_id": 63, "iscrowd": 0, "bbox": [363, 534, 117, 106], "area": 6891}, {"id": 3884357, "category_id": 67, "iscrowd": 0, "bbox": [0, 421, 261, 73], "area": 7580}, {"id": 1843746, "category_id": 73, "iscrowd": 0, "bbox": [43, 343, 217, 128], "area": 15686}, {"id": 8430005, "category_id": 154, "iscrowd": 0, "bbox": [445, 358, 17, 17], "area": 214}, {"id": 9082254, "category_id": 155, "iscrowd": 0, "bbox": [343, 269, 137, 73], "area": 3330}, {"id": 2767672, "category_id": 184, "iscrowd": 0, "bbox": [0, 174, 469, 254], "area": 47924}, {"id": 3688785, "category_id": 185, "iscrowd": 0, "bbox": [264, 331, 203, 163], "area": 15674}, {"id": 14277591, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 290], "area": 114751}, {"id": 3426896, "category_id": 189, "iscrowd": 0, "bbox": [0, 431, 153, 56], "area": 503}, {"id": 3491921, "category_id": 190, "iscrowd": 0, "bbox": [0, 492, 396, 148], "area": 32369}, {"id": 1517106, "category_id": 199, "iscrowd": 0, "bbox": [0, 265, 480, 269], "area": 30276}], "file_name": "000000060449.png", "image_id": 60449}, {"segments_info": [{"id": 7105934, "category_id": 1, "iscrowd": 0, "bbox": [352, 57, 20, 26], "area": 343}, {"id": 7231646, "category_id": 1, "iscrowd": 0, "bbox": [225, 58, 33, 39], "area": 802}, {"id": 6971240, "category_id": 1, "iscrowd": 0, "bbox": [125, 63, 44, 48], "area": 1153}, {"id": 9933462, "category_id": 1, "iscrowd": 0, "bbox": [529, 21, 45, 42], "area": 1080}, {"id": 13943766, "category_id": 1, "iscrowd": 0, "bbox": [153, 167, 101, 131], "area": 3512}, {"id": 6313564, "category_id": 1, "iscrowd": 0, "bbox": [304, 158, 77, 99], "area": 1942}, {"id": 9535363, "category_id": 1, "iscrowd": 0, "bbox": [305, 189, 75, 82], "area": 2971}, {"id": 12760000, "category_id": 1, "iscrowd": 0, "bbox": [252, 65, 44, 32], "area": 662}, {"id": 7365482, "category_id": 1, "iscrowd": 0, "bbox": [290, 48, 29, 44], "area": 595}, {"id": 11312306, "category_id": 1, "iscrowd": 0, "bbox": [316, 60, 34, 27], "area": 525}, {"id": 7694743, "category_id": 1, "iscrowd": 0, "bbox": [386, 52, 34, 26], "area": 443}, {"id": 9407375, "category_id": 1, "iscrowd": 0, "bbox": [193, 61, 33, 43], "area": 921}, {"id": 7570614, "category_id": 1, "iscrowd": 0, "bbox": [90, 67, 38, 45], "area": 1036}, {"id": 7104370, "category_id": 1, "iscrowd": 1, "bbox": [449, 44, 63, 29], "area": 1144}, {"id": 10991538, "category_id": 37, "iscrowd": 0, "bbox": [131, 216, 11, 9], "area": 77}, {"id": 12110052, "category_id": 39, "iscrowd": 0, "bbox": [154, 192, 36, 6], "area": 150}, {"id": 8290190, "category_id": 40, "iscrowd": 0, "bbox": [308, 214, 21, 16], "area": 215}, {"id": 14406365, "category_id": 40, "iscrowd": 0, "bbox": [197, 191, 11, 8], "area": 58}, {"id": 3945777, "category_id": 62, "iscrowd": 0, "bbox": [161, 88, 23, 17], "area": 273}, {"id": 7100510, "category_id": 77, "iscrowd": 0, "bbox": [59, 55, 2, 4], "area": 7}, {"id": 6914967, "category_id": 145, "iscrowd": 0, "bbox": [0, 121, 640, 306], "area": 167555}, {"id": 6510686, "category_id": 161, "iscrowd": 0, "bbox": [97, 0, 113, 104], "area": 4116}, {"id": 9473911, "category_id": 199, "iscrowd": 0, "bbox": [0, 48, 640, 144], "area": 43423}], "file_name": "000000060507.png", "image_id": 60507}, {"segments_info": [{"id": 10395553, "category_id": 24, "iscrowd": 0, "bbox": [124, 106, 229, 245], "area": 22173}, {"id": 8950419, "category_id": 24, "iscrowd": 0, "bbox": [0, 156, 153, 138], "area": 11776}, {"id": 6456954, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 241], "area": 86918}, {"id": 7510911, "category_id": 193, "iscrowd": 0, "bbox": [0, 133, 500, 242], "area": 65855}], "file_name": "000000060770.png", "image_id": 60770}, {"segments_info": [{"id": 6775913, "category_id": 1, "iscrowd": 0, "bbox": [169, 39, 100, 181], "area": 8256}, {"id": 3026238, "category_id": 1, "iscrowd": 0, "bbox": [38, 53, 90, 148], "area": 4828}, {"id": 9606037, "category_id": 16, "iscrowd": 0, "bbox": [588, 190, 35, 26], "area": 361}, {"id": 6512994, "category_id": 16, "iscrowd": 0, "bbox": [394, 77, 57, 56], "area": 1075}, {"id": 9538168, "category_id": 16, "iscrowd": 0, "bbox": [253, 304, 27, 18], "area": 185}, {"id": 9999492, "category_id": 16, "iscrowd": 0, "bbox": [275, 329, 24, 35], "area": 318}, {"id": 10196877, "category_id": 16, "iscrowd": 0, "bbox": [263, 346, 47, 49], "area": 719}, {"id": 9999234, "category_id": 16, "iscrowd": 0, "bbox": [377, 297, 28, 21], "area": 268}, {"id": 8485230, "category_id": 16, "iscrowd": 0, "bbox": [189, 304, 40, 29], "area": 522}, {"id": 9010802, "category_id": 16, "iscrowd": 0, "bbox": [414, 279, 16, 10], "area": 104}, {"id": 4142897, "category_id": 16, "iscrowd": 0, "bbox": [363, 435, 64, 42], "area": 1299}, {"id": 7305086, "category_id": 16, "iscrowd": 0, "bbox": [388, 130, 15, 26], "area": 246}, {"id": 8092027, "category_id": 16, "iscrowd": 0, "bbox": [554, 77, 54, 42], "area": 878}, {"id": 11183505, "category_id": 16, "iscrowd": 0, "bbox": [254, 378, 27, 56], "area": 688}, {"id": 12038555, "category_id": 16, "iscrowd": 0, "bbox": [228, 292, 16, 30], "area": 279}, {"id": 8552833, "category_id": 16, "iscrowd": 1, "bbox": [212, 119, 405, 319], "area": 2766}, {"id": 3554117, "category_id": 21, "iscrowd": 0, "bbox": [444, 120, 123, 195], "area": 18968}, {"id": 7241096, "category_id": 21, "iscrowd": 0, "bbox": [381, 269, 253, 125], "area": 19276}, {"id": 5995176, "category_id": 21, "iscrowd": 0, "bbox": [24, 279, 160, 96], "area": 9901}, {"id": 10910816, "category_id": 51, "iscrowd": 0, "bbox": [139, 217, 31, 4], "area": 92}, {"id": 2369148, "category_id": 51, "iscrowd": 0, "bbox": [115, 218, 23, 12], "area": 259}, {"id": 10777415, "category_id": 51, "iscrowd": 0, "bbox": [139, 220, 25, 10], "area": 215}, {"id": 6381761, "category_id": 51, "iscrowd": 0, "bbox": [130, 179, 22, 9], "area": 141}, {"id": 11501403, "category_id": 51, "iscrowd": 0, "bbox": [138, 214, 36, 4], "area": 103}, {"id": 5987555, "category_id": 51, "iscrowd": 0, "bbox": [141, 191, 11, 8], "area": 62}, {"id": 3750582, "category_id": 51, "iscrowd": 0, "bbox": [116, 205, 24, 13], "area": 249}, {"id": 2697076, "category_id": 51, "iscrowd": 0, "bbox": [162, 220, 27, 13], "area": 319}, {"id": 2106227, "category_id": 51, "iscrowd": 0, "bbox": [99, 213, 25, 17], "area": 272}, {"id": 13343852, "category_id": 51, "iscrowd": 0, "bbox": [138, 205, 35, 7], "area": 195}, {"id": 6581367, "category_id": 171, "iscrowd": 0, "bbox": [14, 0, 626, 311], "area": 126673}, {"id": 10989227, "category_id": 191, "iscrowd": 0, "bbox": [264, 375, 318, 57], "area": 828}, {"id": 8027518, "category_id": 194, "iscrowd": 0, "bbox": [18, 304, 622, 176], "area": 30464}], "file_name": "000000060823.png", "image_id": 60823}, {"segments_info": [{"id": 5794936, "category_id": 18, "iscrowd": 0, "bbox": [206, 44, 302, 381], "area": 51443}, {"id": 7108218, "category_id": 51, "iscrowd": 0, "bbox": [435, 326, 198, 109], "area": 16758}, {"id": 8622229, "category_id": 65, "iscrowd": 0, "bbox": [1, 295, 365, 180], "area": 47831}, {"id": 6063261, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 178211}, {"id": 6457763, "category_id": 194, "iscrowd": 0, "bbox": [323, 426, 317, 54], "area": 10322}], "file_name": "000000060835.png", "image_id": 60835}, {"segments_info": [{"id": 2570391, "category_id": 53, "iscrowd": 0, "bbox": [269, 62, 155, 161], "area": 18849}, {"id": 2185093, "category_id": 53, "iscrowd": 0, "bbox": [24, 208, 177, 176], "area": 23704}, {"id": 1265082, "category_id": 55, "iscrowd": 0, "bbox": [204, 188, 129, 136], "area": 13932}, {"id": 1790647, "category_id": 55, "iscrowd": 0, "bbox": [329, 200, 152, 160], "area": 19162}, {"id": 1852094, "category_id": 55, "iscrowd": 0, "bbox": [162, 12, 130, 112], "area": 10507}, {"id": 1722816, "category_id": 55, "iscrowd": 0, "bbox": [14, 97, 127, 132], "area": 12258}, {"id": 1199806, "category_id": 55, "iscrowd": 0, "bbox": [138, 106, 131, 126], "area": 12542}], "file_name": "000000060855.png", "image_id": 60855}, {"segments_info": [{"id": 3290950, "category_id": 1, "iscrowd": 0, "bbox": [16, 0, 22, 57], "area": 1008}, {"id": 3418934, "category_id": 1, "iscrowd": 0, "bbox": [292, 0, 14, 28], "area": 296}, {"id": 6706275, "category_id": 1, "iscrowd": 0, "bbox": [199, 148, 36, 86], "area": 965}, {"id": 7822955, "category_id": 1, "iscrowd": 0, "bbox": [242, 160, 40, 79], "area": 1579}, {"id": 3750739, "category_id": 1, "iscrowd": 0, "bbox": [475, 38, 24, 64], "area": 858}, {"id": 9205898, "category_id": 1, "iscrowd": 0, "bbox": [290, 155, 52, 82], "area": 1465}, {"id": 9533578, "category_id": 1, "iscrowd": 0, "bbox": [219, 159, 29, 77], "area": 1121}, {"id": 2303025, "category_id": 1, "iscrowd": 0, "bbox": [256, 2, 36, 61], "area": 1015}, {"id": 8023681, "category_id": 1, "iscrowd": 0, "bbox": [173, 150, 45, 82], "area": 1172}, {"id": 4209230, "category_id": 1, "iscrowd": 0, "bbox": [152, 0, 19, 24], "area": 286}, {"id": 8679296, "category_id": 1, "iscrowd": 0, "bbox": [271, 151, 38, 82], "area": 1227}, {"id": 2105653, "category_id": 1, "iscrowd": 0, "bbox": [181, 0, 29, 37], "area": 492}, {"id": 5064786, "category_id": 1, "iscrowd": 0, "bbox": [95, 139, 37, 82], "area": 1532}, {"id": 4210000, "category_id": 1, "iscrowd": 1, "bbox": [50, 0, 405, 242], "area": 9759}, {"id": 1845320, "category_id": 40, "iscrowd": 0, "bbox": [123, 167, 8, 8], "area": 51}, {"id": 3761022, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 500, 333], "area": 137966}, {"id": 526607, "category_id": 197, "iscrowd": 0, "bbox": [450, 0, 50, 34], "area": 1216}, {"id": 2300962, "category_id": 199, "iscrowd": 0, "bbox": [117, 0, 325, 31], "area": 2065}], "file_name": "000000060886.png", "image_id": 60886}, {"segments_info": [{"id": 4075823, "category_id": 1, "iscrowd": 0, "bbox": [99, 144, 140, 375], "area": 31014}, {"id": 3101109, "category_id": 19, "iscrowd": 0, "bbox": [234, 171, 21, 65], "area": 760}, {"id": 2698545, "category_id": 62, "iscrowd": 0, "bbox": [0, 121, 125, 216], "area": 17990}, {"id": 4284030, "category_id": 62, "iscrowd": 0, "bbox": [285, 141, 73, 141], "area": 4099}, {"id": 3950417, "category_id": 62, "iscrowd": 0, "bbox": [142, 266, 156, 186], "area": 13048}, {"id": 2704223, "category_id": 62, "iscrowd": 0, "bbox": [330, 167, 29, 177], "area": 1857}, {"id": 2508412, "category_id": 62, "iscrowd": 0, "bbox": [329, 139, 31, 61], "area": 411}, {"id": 7892817, "category_id": 84, "iscrowd": 0, "bbox": [0, 585, 35, 55], "area": 1740}, {"id": 6916003, "category_id": 118, "iscrowd": 0, "bbox": [32, 205, 328, 435], "area": 14566}, {"id": 15591653, "category_id": 180, "iscrowd": 0, "bbox": [146, 0, 169, 104], "area": 14093}, {"id": 15395819, "category_id": 181, "iscrowd": 0, "bbox": [145, 76, 154, 88], "area": 9681}, {"id": 7765383, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 360, 233], "area": 35363}, {"id": 2172716, "category_id": 200, "iscrowd": 0, "bbox": [0, 287, 360, 353], "area": 80468}], "file_name": "000000060899.png", "image_id": 60899}, {"segments_info": [{"id": 7039333, "category_id": 1, "iscrowd": 0, "bbox": [222, 172, 55, 53], "area": 1182}, {"id": 4144441, "category_id": 1, "iscrowd": 0, "bbox": [197, 165, 42, 133], "area": 2346}, {"id": 921101, "category_id": 1, "iscrowd": 0, "bbox": [139, 154, 54, 192], "area": 4223}, {"id": 2960424, "category_id": 1, "iscrowd": 0, "bbox": [312, 185, 27, 149], "area": 1587}, {"id": 5197127, "category_id": 1, "iscrowd": 0, "bbox": [279, 201, 11, 17], "area": 133}, {"id": 11710380, "category_id": 1, "iscrowd": 0, "bbox": [323, 68, 317, 355], "area": 71633}, {"id": 1052687, "category_id": 1, "iscrowd": 0, "bbox": [270, 222, 45, 132], "area": 2898}, {"id": 2499874, "category_id": 1, "iscrowd": 0, "bbox": [385, 177, 29, 73], "area": 1223}, {"id": 2960168, "category_id": 1, "iscrowd": 0, "bbox": [175, 187, 135, 200], "area": 14042}, {"id": 1184016, "category_id": 1, "iscrowd": 0, "bbox": [98, 178, 72, 205], "area": 9134}, {"id": 921095, "category_id": 1, "iscrowd": 0, "bbox": [58, 175, 53, 194], "area": 7103}, {"id": 1315602, "category_id": 1, "iscrowd": 0, "bbox": [189, 181, 16, 38], "area": 316}, {"id": 2170652, "category_id": 32, "iscrowd": 0, "bbox": [88, 208, 5, 17], "area": 34}, {"id": 7433833, "category_id": 32, "iscrowd": 0, "bbox": [223, 193, 6, 7], "area": 28}, {"id": 1907482, "category_id": 32, "iscrowd": 0, "bbox": [128, 215, 9, 18], "area": 47}, {"id": 4802370, "category_id": 32, "iscrowd": 0, "bbox": [521, 209, 32, 104], "area": 1982}, {"id": 4539199, "category_id": 67, "iscrowd": 0, "bbox": [0, 222, 65, 64], "area": 2838}, {"id": 1447188, "category_id": 112, "iscrowd": 0, "bbox": [620, 85, 20, 194], "area": 2460}, {"id": 8881280, "category_id": 130, "iscrowd": 0, "bbox": [147, 0, 366, 171], "area": 16051}, {"id": 2499618, "category_id": 133, "iscrowd": 0, "bbox": [151, 79, 350, 177], "area": 22243}, {"id": 3157803, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 121], "area": 42310}, {"id": 4210233, "category_id": 190, "iscrowd": 0, "bbox": [0, 255, 410, 173], "area": 30884}, {"id": 3947318, "category_id": 199, "iscrowd": 0, "bbox": [0, 67, 629, 158], "area": 30157}], "file_name": "000000060932.png", "image_id": 60932}, {"segments_info": [{"id": 5261385, "category_id": 2, "iscrowd": 0, "bbox": [118, 132, 515, 347], "area": 66593}, {"id": 5326397, "category_id": 3, "iscrowd": 0, "bbox": [464, 3, 26, 25], "area": 480}, {"id": 2236704, "category_id": 3, "iscrowd": 0, "bbox": [530, 7, 23, 13], "area": 223}, {"id": 3353897, "category_id": 3, "iscrowd": 0, "bbox": [559, 9, 27, 13], "area": 278}, {"id": 5787978, "category_id": 3, "iscrowd": 0, "bbox": [489, 5, 17, 14], "area": 195}, {"id": 10855081, "category_id": 15, "iscrowd": 0, "bbox": [167, 76, 109, 137], "area": 9958}, {"id": 11183783, "category_id": 15, "iscrowd": 0, "bbox": [55, 55, 176, 137], "area": 6645}, {"id": 9078404, "category_id": 15, "iscrowd": 0, "bbox": [7, 151, 124, 151], "area": 11773}, {"id": 3353132, "category_id": 18, "iscrowd": 0, "bbox": [137, 180, 114, 136], "area": 8785}, {"id": 6187395, "category_id": 100, "iscrowd": 0, "bbox": [378, 91, 90, 57], "area": 3630}, {"id": 1382164, "category_id": 184, "iscrowd": 0, "bbox": [385, 0, 243, 35], "area": 3668}, {"id": 7236713, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 386, 290], "area": 34946}, {"id": 6779260, "category_id": 191, "iscrowd": 0, "bbox": [0, 37, 640, 443], "area": 87727}, {"id": 4413020, "category_id": 193, "iscrowd": 0, "bbox": [177, 0, 463, 239], "area": 33937}, {"id": 7766665, "category_id": 194, "iscrowd": 0, "bbox": [0, 104, 38, 25], "area": 710}], "file_name": "000000061108.png", "image_id": 61108}, {"segments_info": [{"id": 4613016, "category_id": 19, "iscrowd": 0, "bbox": [1, 85, 280, 325], "area": 43800}, {"id": 5265277, "category_id": 21, "iscrowd": 0, "bbox": [321, 2, 151, 183], "area": 14081}, {"id": 4669243, "category_id": 21, "iscrowd": 0, "bbox": [278, 1, 82, 84], "area": 3084}, {"id": 11776947, "category_id": 21, "iscrowd": 0, "bbox": [442, 135, 198, 326], "area": 42113}, {"id": 4406584, "category_id": 21, "iscrowd": 0, "bbox": [335, 16, 303, 278], "area": 33390}, {"id": 6582685, "category_id": 21, "iscrowd": 0, "bbox": [373, 9, 257, 136], "area": 7586}, {"id": 4603707, "category_id": 21, "iscrowd": 0, "bbox": [121, 2, 205, 213], "area": 31456}, {"id": 15790320, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 56], "area": 10829}, {"id": 9151669, "category_id": 193, "iscrowd": 0, "bbox": [0, 22, 640, 458], "area": 117471}], "file_name": "000000061171.png", "image_id": 61171}, {"segments_info": [{"id": 854300, "category_id": 1, "iscrowd": 0, "bbox": [54, 276, 25, 57], "area": 599}, {"id": 4470610, "category_id": 7, "iscrowd": 0, "bbox": [163, 144, 347, 175], "area": 44448}, {"id": 2637705, "category_id": 10, "iscrowd": 0, "bbox": [136, 242, 11, 11], "area": 111}, {"id": 4406593, "category_id": 10, "iscrowd": 0, "bbox": [545, 199, 21, 37], "area": 523}, {"id": 4931128, "category_id": 10, "iscrowd": 0, "bbox": [467, 136, 17, 16], "area": 187}, {"id": 6049364, "category_id": 10, "iscrowd": 0, "bbox": [446, 141, 15, 16], "area": 165}, {"id": 526605, "category_id": 31, "iscrowd": 0, "bbox": [58, 283, 16, 31], "area": 232}, {"id": 1711134, "category_id": 95, "iscrowd": 0, "bbox": [0, 0, 211, 244], "area": 46975}, {"id": 1253414, "category_id": 147, "iscrowd": 0, "bbox": [146, 256, 436, 168], "area": 29842}, {"id": 3355185, "category_id": 149, "iscrowd": 0, "bbox": [0, 320, 446, 104], "area": 32288}, {"id": 2438188, "category_id": 184, "iscrowd": 0, "bbox": [15, 256, 555, 52], "area": 1710}, {"id": 4079161, "category_id": 185, "iscrowd": 0, "bbox": [506, 13, 134, 411], "area": 22667}, {"id": 16185077, "category_id": 187, "iscrowd": 0, "bbox": [11, 0, 629, 269], "area": 71658}, {"id": 9474964, "category_id": 197, "iscrowd": 0, "bbox": [501, 220, 66, 69], "area": 3092}], "file_name": "000000061268.png", "image_id": 61268}, {"segments_info": [{"id": 2912708, "category_id": 17, "iscrowd": 0, "bbox": [12, 102, 287, 215], "area": 37121}, {"id": 6270936, "category_id": 65, "iscrowd": 0, "bbox": [1, 137, 496, 219], "area": 65217}, {"id": 1978971, "category_id": 84, "iscrowd": 0, "bbox": [443, 59, 32, 135], "area": 1607}, {"id": 3167362, "category_id": 84, "iscrowd": 0, "bbox": [251, 63, 20, 49], "area": 531}, {"id": 2250645, "category_id": 84, "iscrowd": 0, "bbox": [185, 1, 8, 24], "area": 171}, {"id": 2301040, "category_id": 84, "iscrowd": 0, "bbox": [434, 80, 25, 111], "area": 988}, {"id": 2829426, "category_id": 84, "iscrowd": 0, "bbox": [332, 67, 20, 88], "area": 1018}, {"id": 2635850, "category_id": 84, "iscrowd": 0, "bbox": [374, 75, 23, 72], "area": 1156}, {"id": 2969996, "category_id": 84, "iscrowd": 0, "bbox": [254, 1, 246, 49], "area": 9480}, {"id": 2707072, "category_id": 84, "iscrowd": 0, "bbox": [358, 70, 24, 74], "area": 1136}, {"id": 2441335, "category_id": 84, "iscrowd": 0, "bbox": [57, 31, 187, 118], "area": 15811}, {"id": 1975614, "category_id": 84, "iscrowd": 0, "bbox": [345, 69, 18, 80], "area": 907}, {"id": 2108228, "category_id": 84, "iscrowd": 0, "bbox": [201, 0, 10, 25], "area": 233}, {"id": 2835821, "category_id": 84, "iscrowd": 0, "bbox": [325, 68, 11, 87], "area": 334}, {"id": 2241113, "category_id": 84, "iscrowd": 1, "bbox": [34, 0, 466, 226], "area": 31658}, {"id": 2305387, "category_id": 118, "iscrowd": 0, "bbox": [0, 80, 69, 66], "area": 1329}, {"id": 2969950, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 61, 130], "area": 6526}], "file_name": "000000061333.png", "image_id": 61333}, {"segments_info": [{"id": 5131854, "category_id": 1, "iscrowd": 0, "bbox": [258, 252, 120, 171], "area": 9238}, {"id": 7105644, "category_id": 1, "iscrowd": 0, "bbox": [53, 116, 27, 92], "area": 1212}, {"id": 6776679, "category_id": 1, "iscrowd": 0, "bbox": [246, 122, 33, 93], "area": 1463}, {"id": 5855577, "category_id": 1, "iscrowd": 0, "bbox": [497, 173, 79, 87], "area": 3754}, {"id": 4276545, "category_id": 1, "iscrowd": 0, "bbox": [187, 190, 71, 128], "area": 3652}, {"id": 2960685, "category_id": 1, "iscrowd": 0, "bbox": [70, 107, 26, 102], "area": 1560}, {"id": 3421236, "category_id": 1, "iscrowd": 0, "bbox": [493, 240, 115, 171], "area": 9976}, {"id": 8421504, "category_id": 9, "iscrowd": 0, "bbox": [288, 83, 161, 71], "area": 4468}, {"id": 9342606, "category_id": 9, "iscrowd": 0, "bbox": [491, 39, 136, 78], "area": 6588}, {"id": 5329233, "category_id": 62, "iscrowd": 0, "bbox": [5, 245, 114, 160], "area": 10057}, {"id": 4934475, "category_id": 62, "iscrowd": 0, "bbox": [110, 225, 88, 133], "area": 6636}, {"id": 5131853, "category_id": 62, "iscrowd": 0, "bbox": [603, 208, 23, 114], "area": 602}, {"id": 4013373, "category_id": 62, "iscrowd": 0, "bbox": [561, 225, 77, 71], "area": 1893}, {"id": 4802889, "category_id": 62, "iscrowd": 0, "bbox": [158, 210, 73, 114], "area": 3280}, {"id": 2631720, "category_id": 62, "iscrowd": 0, "bbox": [571, 325, 69, 89], "area": 1517}, {"id": 6842472, "category_id": 118, "iscrowd": 0, "bbox": [0, 186, 640, 272], "area": 107428}, {"id": 9539985, "category_id": 155, "iscrowd": 0, "bbox": [30, 101, 610, 98], "area": 29525}, {"id": 10000536, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 42, 217], "area": 7035}, {"id": 7697781, "category_id": 185, "iscrowd": 0, "bbox": [81, 151, 559, 75], "area": 11862}, {"id": 13816530, "category_id": 187, "iscrowd": 0, "bbox": [28, 0, 612, 106], "area": 54542}, {"id": 7631988, "category_id": 192, "iscrowd": 0, "bbox": [37, 87, 459, 36], "area": 6748}], "file_name": "000000061418.png", "image_id": 61418}, {"segments_info": [{"id": 6257291, "category_id": 18, "iscrowd": 0, "bbox": [272, 200, 152, 280], "area": 27717}, {"id": 4347208, "category_id": 44, "iscrowd": 0, "bbox": [181, 86, 28, 74], "area": 1443}, {"id": 8553858, "category_id": 70, "iscrowd": 0, "bbox": [175, 0, 261, 221], "area": 31314}, {"id": 12961994, "category_id": 112, "iscrowd": 0, "bbox": [569, 0, 71, 480], "area": 18009}, {"id": 7436146, "category_id": 176, "iscrowd": 0, "bbox": [141, 0, 456, 361], "area": 25273}, {"id": 6252388, "category_id": 190, "iscrowd": 0, "bbox": [121, 124, 469, 356], "area": 39590}, {"id": 8948358, "category_id": 195, "iscrowd": 0, "bbox": [160, 0, 269, 384], "area": 16133}, {"id": 14015452, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 71223}, {"id": 6056032, "category_id": 200, "iscrowd": 0, "bbox": [198, 248, 382, 232], "area": 49020}], "file_name": "000000061471.png", "image_id": 61471}, {"segments_info": [{"id": 7962537, "category_id": 1, "iscrowd": 0, "bbox": [234, 102, 55, 50], "area": 1184}, {"id": 7236255, "category_id": 1, "iscrowd": 0, "bbox": [234, 97, 81, 185], "area": 4960}, {"id": 7168863, "category_id": 19, "iscrowd": 0, "bbox": [250, 163, 74, 116], "area": 3965}, {"id": 14671583, "category_id": 62, "iscrowd": 0, "bbox": [0, 168, 37, 67], "area": 1033}, {"id": 14540510, "category_id": 62, "iscrowd": 0, "bbox": [62, 165, 39, 64], "area": 858}, {"id": 14079703, "category_id": 67, "iscrowd": 0, "bbox": [15, 174, 41, 53], "area": 530}, {"id": 6780033, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 500, 310], "area": 14136}, {"id": 6643039, "category_id": 181, "iscrowd": 0, "bbox": [0, 38, 14, 47], "area": 376}, {"id": 3098692, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 101883}, {"id": 12369622, "category_id": 190, "iscrowd": 0, "bbox": [0, 223, 266, 45], "area": 4358}, {"id": 15329515, "category_id": 191, "iscrowd": 0, "bbox": [0, 194, 500, 181], "area": 52002}], "file_name": "000000061584.png", "image_id": 61584}, {"segments_info": [{"id": 3705203, "category_id": 56, "iscrowd": 0, "bbox": [97, 236, 105, 151], "area": 9468}, {"id": 1720107, "category_id": 56, "iscrowd": 0, "bbox": [93, 393, 163, 80], "area": 9997}, {"id": 1718315, "category_id": 56, "iscrowd": 0, "bbox": [446, 12, 178, 217], "area": 22672}, {"id": 3117945, "category_id": 56, "iscrowd": 0, "bbox": [368, 116, 114, 186], "area": 12676}, {"id": 3369048, "category_id": 56, "iscrowd": 0, "bbox": [494, 0, 114, 49], "area": 3192}, {"id": 1721901, "category_id": 56, "iscrowd": 0, "bbox": [180, 152, 93, 168], "area": 8798}, {"id": 1785905, "category_id": 56, "iscrowd": 0, "bbox": [3, 309, 125, 154], "area": 11556}, {"id": 3972741, "category_id": 56, "iscrowd": 0, "bbox": [398, 3, 108, 71], "area": 3614}, {"id": 2053953, "category_id": 56, "iscrowd": 0, "bbox": [9, 209, 122, 141], "area": 10250}, {"id": 1993809, "category_id": 56, "iscrowd": 0, "bbox": [265, 159, 108, 122], "area": 8900}, {"id": 5479051, "category_id": 56, "iscrowd": 0, "bbox": [241, 258, 156, 183], "area": 17028}, {"id": 3372127, "category_id": 56, "iscrowd": 0, "bbox": [197, 336, 126, 128], "area": 6235}, {"id": 5935763, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 171623}], "file_name": "000000061658.png", "image_id": 61658}, {"segments_info": [{"id": 4733262, "category_id": 1, "iscrowd": 0, "bbox": [229, 23, 207, 489], "area": 49311}, {"id": 13550270, "category_id": 35, "iscrowd": 0, "bbox": [108, 437, 390, 137], "area": 11638}, {"id": 14338240, "category_id": 159, "iscrowd": 0, "bbox": [0, 175, 640, 399], "area": 184371}, {"id": 3093300, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 278], "area": 105166}, {"id": 8877938, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 43], "area": 16320}], "file_name": "000000061747.png", "image_id": 61747}, {"segments_info": [{"id": 3159628, "category_id": 1, "iscrowd": 0, "bbox": [20, 6, 620, 364], "area": 68287}, {"id": 4547977, "category_id": 65, "iscrowd": 0, "bbox": [5, 1, 404, 269], "area": 52370}, {"id": 4809088, "category_id": 65, "iscrowd": 0, "bbox": [71, 209, 171, 94], "area": 4838}, {"id": 6589356, "category_id": 65, "iscrowd": 0, "bbox": [1, 129, 639, 242], "area": 75354}, {"id": 5402764, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 555, 371], "area": 4782}, {"id": 6786733, "category_id": 199, "iscrowd": 0, "bbox": [80, 0, 560, 140], "area": 28306}], "file_name": "000000061960.png", "image_id": 61960}, {"segments_info": [{"id": 5334379, "category_id": 44, "iscrowd": 0, "bbox": [193, 280, 10, 24], "area": 185}, {"id": 4480362, "category_id": 44, "iscrowd": 0, "bbox": [224, 280, 8, 23], "area": 114}, {"id": 6976374, "category_id": 47, "iscrowd": 0, "bbox": [125, 281, 25, 40], "area": 924}, {"id": 6123381, "category_id": 47, "iscrowd": 0, "bbox": [83, 286, 26, 41], "area": 986}, {"id": 7961988, "category_id": 70, "iscrowd": 0, "bbox": [42, 536, 167, 95], "area": 12663}, {"id": 8422792, "category_id": 81, "iscrowd": 0, "bbox": [194, 361, 181, 96], "area": 12898}, {"id": 8365227, "category_id": 100, "iscrowd": 0, "bbox": [69, 294, 56, 25], "area": 516}, {"id": 10659758, "category_id": 112, "iscrowd": 0, "bbox": [0, 228, 59, 412], "area": 11229}, {"id": 6141654, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 210, 45], "area": 4765}, {"id": 4412501, "category_id": 133, "iscrowd": 0, "bbox": [0, 21, 217, 232], "area": 45053}, {"id": 8159619, "category_id": 176, "iscrowd": 0, "bbox": [8, 0, 450, 640], "area": 158204}, {"id": 5396059, "category_id": 190, "iscrowd": 0, "bbox": [178, 575, 224, 65], "area": 7251}, {"id": 9013641, "category_id": 195, "iscrowd": 0, "bbox": [303, 177, 25, 42], "area": 808}, {"id": 15067369, "category_id": 199, "iscrowd": 0, "bbox": [48, 0, 432, 640], "area": 30476}], "file_name": "000000062025.png", "image_id": 62025}, {"segments_info": [{"id": 3686218, "category_id": 1, "iscrowd": 0, "bbox": [136, 238, 24, 27], "area": 417}, {"id": 10328998, "category_id": 1, "iscrowd": 0, "bbox": [81, 221, 31, 48], "area": 895}, {"id": 2895669, "category_id": 1, "iscrowd": 0, "bbox": [15, 234, 8, 19], "area": 71}, {"id": 8359318, "category_id": 1, "iscrowd": 0, "bbox": [17, 229, 37, 76], "area": 1680}, {"id": 6448505, "category_id": 1, "iscrowd": 0, "bbox": [51, 233, 38, 34], "area": 716}, {"id": 1250841, "category_id": 1, "iscrowd": 0, "bbox": [2, 224, 25, 43], "area": 470}, {"id": 2766918, "category_id": 25, "iscrowd": 0, "bbox": [338, 170, 149, 164], "area": 3188}, {"id": 4479345, "category_id": 25, "iscrowd": 0, "bbox": [275, 156, 159, 178], "area": 9014}, {"id": 3951450, "category_id": 25, "iscrowd": 0, "bbox": [135, 135, 177, 227], "area": 17131}, {"id": 6331798, "category_id": 119, "iscrowd": 0, "bbox": [0, 339, 415, 141], "area": 29307}, {"id": 2700608, "category_id": 171, "iscrowd": 0, "bbox": [40, 215, 411, 99], "area": 11182}, {"id": 3491135, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 309], "area": 143937}, {"id": 3160120, "category_id": 185, "iscrowd": 0, "bbox": [0, 230, 640, 100], "area": 5458}, {"id": 9544110, "category_id": 191, "iscrowd": 0, "bbox": [183, 288, 252, 59], "area": 4542}, {"id": 10728636, "category_id": 198, "iscrowd": 0, "bbox": [0, 251, 192, 170], "area": 22057}], "file_name": "000000062353.png", "image_id": 62353}, {"segments_info": [{"id": 5128821, "category_id": 1, "iscrowd": 0, "bbox": [533, 153, 98, 180], "area": 7154}, {"id": 8154035, "category_id": 1, "iscrowd": 0, "bbox": [302, 141, 105, 174], "area": 6137}, {"id": 5595299, "category_id": 1, "iscrowd": 0, "bbox": [475, 1, 53, 40], "area": 1025}, {"id": 4081511, "category_id": 1, "iscrowd": 0, "bbox": [0, 95, 95, 185], "area": 7317}, {"id": 4010550, "category_id": 1, "iscrowd": 0, "bbox": [606, 328, 34, 100], "area": 1425}, {"id": 1384496, "category_id": 39, "iscrowd": 0, "bbox": [579, 269, 24, 64], "area": 336}, {"id": 2235727, "category_id": 40, "iscrowd": 0, "bbox": [400, 176, 9, 11], "area": 43}, {"id": 2580586, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 97024}, {"id": 5399700, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 152766}], "file_name": "000000062355.png", "image_id": 62355}, {"segments_info": [{"id": 6780024, "category_id": 48, "iscrowd": 0, "bbox": [575, 75, 65, 99], "area": 1144}, {"id": 10526876, "category_id": 51, "iscrowd": 0, "bbox": [0, 160, 463, 264], "area": 19121}, {"id": 12893628, "category_id": 51, "iscrowd": 0, "bbox": [527, 232, 113, 158], "area": 12386}, {"id": 8030108, "category_id": 51, "iscrowd": 0, "bbox": [34, 355, 606, 73], "area": 29980}, {"id": 3104593, "category_id": 56, "iscrowd": 0, "bbox": [1, 103, 397, 274], "area": 78160}, {"id": 6126205, "category_id": 67, "iscrowd": 0, "bbox": [2, 19, 638, 400], "area": 90403}, {"id": 3625552, "category_id": 196, "iscrowd": 0, "bbox": [0, 216, 48, 212], "area": 484}, {"id": 1716032, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 160], "area": 41254}], "file_name": "000000062554.png", "image_id": 62554}, {"segments_info": [{"id": 7107199, "category_id": 1, "iscrowd": 0, "bbox": [103, 281, 192, 269], "area": 15634}, {"id": 6119270, "category_id": 43, "iscrowd": 0, "bbox": [188, 393, 21, 21], "area": 262}, {"id": 6381941, "category_id": 43, "iscrowd": 0, "bbox": [204, 394, 6, 11], "area": 38}, {"id": 4409675, "category_id": 138, "iscrowd": 0, "bbox": [135, 473, 22, 23], "area": 347}, {"id": 8025705, "category_id": 145, "iscrowd": 0, "bbox": [0, 503, 427, 137], "area": 49645}, {"id": 12431531, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 55], "area": 16821}], "file_name": "000000062692.png", "image_id": 62692}, {"segments_info": [{"id": 3291972, "category_id": 1, "iscrowd": 0, "bbox": [316, 129, 28, 30], "area": 487}, {"id": 2764349, "category_id": 1, "iscrowd": 0, "bbox": [3, 12, 272, 386], "area": 55401}, {"id": 3747436, "category_id": 1, "iscrowd": 0, "bbox": [358, 6, 282, 382], "area": 61111}, {"id": 9870723, "category_id": 44, "iscrowd": 0, "bbox": [240, 169, 13, 31], "area": 250}, {"id": 5395305, "category_id": 49, "iscrowd": 0, "bbox": [489, 274, 87, 51], "area": 1997}, {"id": 4078932, "category_id": 49, "iscrowd": 0, "bbox": [465, 433, 175, 43], "area": 1380}, {"id": 3427964, "category_id": 59, "iscrowd": 0, "bbox": [133, 274, 377, 153], "area": 46442}, {"id": 11246982, "category_id": 62, "iscrowd": 0, "bbox": [238, 185, 52, 51], "area": 1452}, {"id": 1643541, "category_id": 62, "iscrowd": 0, "bbox": [319, 193, 69, 42], "area": 772}, {"id": 1710879, "category_id": 67, "iscrowd": 0, "bbox": [103, 386, 537, 87], "area": 14145}, {"id": 7367007, "category_id": 67, "iscrowd": 0, "bbox": [259, 236, 104, 37], "area": 2960}, {"id": 3557741, "category_id": 67, "iscrowd": 0, "bbox": [379, 184, 20, 7], "area": 116}, {"id": 6183507, "category_id": 67, "iscrowd": 0, "bbox": [286, 196, 35, 15], "area": 371}, {"id": 1577750, "category_id": 77, "iscrowd": 0, "bbox": [475, 111, 89, 45], "area": 3525}, {"id": 10461095, "category_id": 112, "iscrowd": 0, "bbox": [87, 0, 151, 201], "area": 8907}, {"id": 6843770, "category_id": 130, "iscrowd": 0, "bbox": [234, 0, 253, 77], "area": 3267}, {"id": 2897479, "category_id": 156, "iscrowd": 0, "bbox": [356, 44, 148, 67], "area": 4790}, {"id": 2568003, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 519, 206], "area": 27908}, {"id": 13416849, "category_id": 181, "iscrowd": 0, "bbox": [24, 0, 63, 163], "area": 4030}, {"id": 3291730, "category_id": 186, "iscrowd": 0, "bbox": [293, 0, 347, 29], "area": 4724}, {"id": 3554112, "category_id": 189, "iscrowd": 0, "bbox": [0, 195, 614, 286], "area": 6895}, {"id": 4214621, "category_id": 190, "iscrowd": 0, "bbox": [623, 373, 17, 27], "area": 93}, {"id": 7831688, "category_id": 195, "iscrowd": 0, "bbox": [314, 96, 51, 62], "area": 1552}, {"id": 6130337, "category_id": 199, "iscrowd": 0, "bbox": [288, 12, 352, 137], "area": 8102}], "file_name": "000000062808.png", "image_id": 62808}, {"segments_info": [{"id": 5197402, "category_id": 1, "iscrowd": 0, "bbox": [483, 323, 9, 74], "area": 169}, {"id": 2439521, "category_id": 1, "iscrowd": 0, "bbox": [61, 218, 328, 336], "area": 69786}, {"id": 1584446, "category_id": 1, "iscrowd": 0, "bbox": [493, 305, 36, 90], "area": 299}, {"id": 5863819, "category_id": 1, "iscrowd": 0, "bbox": [498, 306, 29, 102], "area": 2071}, {"id": 4278867, "category_id": 1, "iscrowd": 0, "bbox": [446, 308, 20, 107], "area": 1479}, {"id": 4803412, "category_id": 1, "iscrowd": 0, "bbox": [464, 314, 23, 91], "area": 1212}, {"id": 5404029, "category_id": 47, "iscrowd": 0, "bbox": [95, 350, 50, 80], "area": 1890}, {"id": 2703665, "category_id": 130, "iscrowd": 0, "bbox": [455, 149, 62, 88], "area": 3594}, {"id": 11385504, "category_id": 151, "iscrowd": 0, "bbox": [52, 54, 541, 225], "area": 44304}, {"id": 330771, "category_id": 181, "iscrowd": 0, "bbox": [97, 260, 54, 67], "area": 2846}, {"id": 1980971, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 561], "area": 144549}, {"id": 6189688, "category_id": 185, "iscrowd": 0, "bbox": [524, 325, 116, 53], "area": 2912}, {"id": 8360610, "category_id": 191, "iscrowd": 0, "bbox": [333, 357, 307, 204], "area": 45757}, {"id": 2965057, "category_id": 199, "iscrowd": 0, "bbox": [73, 236, 500, 168], "area": 33672}], "file_name": "000000063047.png", "image_id": 63047}, {"segments_info": [{"id": 6182484, "category_id": 1, "iscrowd": 0, "bbox": [254, 137, 136, 79], "area": 2569}, {"id": 12368824, "category_id": 42, "iscrowd": 0, "bbox": [244, 195, 106, 30], "area": 1402}, {"id": 10853772, "category_id": 155, "iscrowd": 0, "bbox": [0, 52, 640, 374], "area": 223182}, {"id": 3822157, "category_id": 193, "iscrowd": 0, "bbox": [82, 0, 176, 56], "area": 3595}, {"id": 6187121, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 82], "area": 41661}], "file_name": "000000063154.png", "image_id": 63154}, {"segments_info": [{"id": 3106463, "category_id": 17, "iscrowd": 0, "bbox": [0, 282, 604, 304], "area": 88029}, {"id": 2645913, "category_id": 17, "iscrowd": 0, "bbox": [134, 18, 430, 436], "area": 97118}, {"id": 1589370, "category_id": 118, "iscrowd": 0, "bbox": [0, 101, 69, 199], "area": 6542}, {"id": 10412022, "category_id": 133, "iscrowd": 0, "bbox": [105, 0, 535, 441], "area": 114015}, {"id": 16514043, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 79, 102], "area": 5397}], "file_name": "000000063552.png", "image_id": 63552}, {"segments_info": [{"id": 2376559, "category_id": 47, "iscrowd": 0, "bbox": [415, 228, 37, 67], "area": 1978}, {"id": 4998184, "category_id": 73, "iscrowd": 0, "bbox": [225, 170, 161, 201], "area": 28477}, {"id": 2045272, "category_id": 84, "iscrowd": 0, "bbox": [303, 142, 6, 21], "area": 53}, {"id": 2572918, "category_id": 84, "iscrowd": 0, "bbox": [344, 139, 10, 31], "area": 189}, {"id": 1324952, "category_id": 84, "iscrowd": 0, "bbox": [361, 158, 9, 13], "area": 88}, {"id": 2373729, "category_id": 84, "iscrowd": 0, "bbox": [338, 148, 9, 22], "area": 124}, {"id": 2118796, "category_id": 84, "iscrowd": 0, "bbox": [350, 147, 12, 23], "area": 165}, {"id": 3301264, "category_id": 84, "iscrowd": 0, "bbox": [328, 116, 10, 54], "area": 374}, {"id": 1781838, "category_id": 100, "iscrowd": 0, "bbox": [360, 82, 262, 167], "area": 16136}, {"id": 1259639, "category_id": 156, "iscrowd": 0, "bbox": [351, 140, 150, 104], "area": 6117}, {"id": 726055, "category_id": 177, "iscrowd": 0, "bbox": [572, 0, 68, 168], "area": 7036}, {"id": 3105686, "category_id": 189, "iscrowd": 0, "bbox": [126, 271, 366, 130], "area": 19067}, {"id": 1189438, "category_id": 190, "iscrowd": 0, "bbox": [31, 394, 56, 31], "area": 1362}, {"id": 4623044, "category_id": 195, "iscrowd": 0, "bbox": [138, 158, 502, 149], "area": 18862}, {"id": 3046840, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 597, 403], "area": 111542}], "file_name": "000000063602.png", "image_id": 63602}, {"segments_info": [{"id": 5395287, "category_id": 1, "iscrowd": 0, "bbox": [113, 99, 23, 22], "area": 353}, {"id": 3027510, "category_id": 1, "iscrowd": 0, "bbox": [162, 87, 38, 26], "area": 785}, {"id": 4931123, "category_id": 1, "iscrowd": 0, "bbox": [423, 36, 60, 27], "area": 1007}, {"id": 5334384, "category_id": 47, "iscrowd": 0, "bbox": [269, 263, 59, 46], "area": 1821}, {"id": 6584189, "category_id": 47, "iscrowd": 0, "bbox": [115, 292, 61, 71], "area": 3570}, {"id": 2846342, "category_id": 52, "iscrowd": 0, "bbox": [314, 313, 91, 20], "area": 1159}, {"id": 1130899, "category_id": 55, "iscrowd": 0, "bbox": [262, 291, 47, 41], "area": 1447}, {"id": 11902330, "category_id": 72, "iscrowd": 0, "bbox": [209, 33, 203, 178], "area": 35310}, {"id": 9335912, "category_id": 73, "iscrowd": 0, "bbox": [394, 51, 220, 203], "area": 29562}, {"id": 1580830, "category_id": 76, "iscrowd": 0, "bbox": [229, 330, 369, 82], "area": 25622}, {"id": 3750971, "category_id": 76, "iscrowd": 0, "bbox": [407, 194, 200, 43], "area": 6208}, {"id": 2307904, "category_id": 100, "iscrowd": 0, "bbox": [125, 229, 80, 65], "area": 3582}, {"id": 14079430, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 597, 121], "area": 14925}, {"id": 8032921, "category_id": 189, "iscrowd": 0, "bbox": [0, 281, 640, 199], "area": 79451}, {"id": 6912385, "category_id": 195, "iscrowd": 0, "bbox": [0, 104, 211, 297], "area": 6717}, {"id": 6976108, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 314], "area": 79070}], "file_name": "000000063740.png", "image_id": 63740}, {"segments_info": [{"id": 793150, "category_id": 1, "iscrowd": 0, "bbox": [3, 0, 637, 420], "area": 218575}, {"id": 1056823, "category_id": 50, "iscrowd": 0, "bbox": [63, 181, 100, 91], "area": 4690}, {"id": 5406925, "category_id": 61, "iscrowd": 0, "bbox": [207, 117, 264, 160], "area": 28275}, {"id": 6455198, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 16868}], "file_name": "000000063965.png", "image_id": 63965}, {"segments_info": [{"id": 3486015, "category_id": 1, "iscrowd": 0, "bbox": [492, 0, 147, 58], "area": 5472}, {"id": 15584951, "category_id": 44, "iscrowd": 0, "bbox": [0, 138, 106, 298], "area": 19928}, {"id": 7368039, "category_id": 44, "iscrowd": 0, "bbox": [0, 220, 55, 211], "area": 6238}, {"id": 8745579, "category_id": 44, "iscrowd": 0, "bbox": [26, 58, 128, 346], "area": 20531}, {"id": 4995378, "category_id": 49, "iscrowd": 0, "bbox": [393, 126, 137, 46], "area": 1399}, {"id": 1182730, "category_id": 49, "iscrowd": 0, "bbox": [343, 118, 136, 51], "area": 1030}, {"id": 3482653, "category_id": 49, "iscrowd": 0, "bbox": [373, 122, 122, 47], "area": 1429}, {"id": 4338478, "category_id": 50, "iscrowd": 0, "bbox": [131, 63, 141, 180], "area": 3990}, {"id": 9008752, "category_id": 51, "iscrowd": 0, "bbox": [128, 116, 214, 209], "area": 18122}, {"id": 8623782, "category_id": 54, "iscrowd": 0, "bbox": [515, 265, 117, 118], "area": 9334}, {"id": 8162713, "category_id": 54, "iscrowd": 0, "bbox": [308, 183, 214, 102], "area": 18568}, {"id": 6322055, "category_id": 54, "iscrowd": 0, "bbox": [153, 239, 220, 140], "area": 14847}, {"id": 10070450, "category_id": 54, "iscrowd": 0, "bbox": [322, 284, 201, 134], "area": 19644}, {"id": 7369844, "category_id": 54, "iscrowd": 0, "bbox": [187, 160, 228, 142], "area": 5584}, {"id": 7705250, "category_id": 54, "iscrowd": 0, "bbox": [478, 222, 145, 80], "area": 4745}, {"id": 4472640, "category_id": 67, "iscrowd": 0, "bbox": [0, 1, 640, 430], "area": 114784}, {"id": 3422016, "category_id": 67, "iscrowd": 0, "bbox": [98, 333, 179, 98], "area": 7452}], "file_name": "000000064084.png", "image_id": 64084}, {"segments_info": [{"id": 4473667, "category_id": 24, "iscrowd": 0, "bbox": [214, 114, 133, 126], "area": 6755}, {"id": 5197910, "category_id": 24, "iscrowd": 0, "bbox": [144, 124, 86, 81], "area": 3552}, {"id": 3749687, "category_id": 24, "iscrowd": 0, "bbox": [367, 153, 133, 99], "area": 7126}, {"id": 2961200, "category_id": 25, "iscrowd": 0, "bbox": [460, 27, 40, 134], "area": 3088}, {"id": 4014151, "category_id": 25, "iscrowd": 0, "bbox": [195, 0, 114, 137], "area": 6775}, {"id": 3884625, "category_id": 25, "iscrowd": 0, "bbox": [108, 4, 109, 147], "area": 4752}, {"id": 3554118, "category_id": 25, "iscrowd": 0, "bbox": [274, 15, 126, 134], "area": 6018}, {"id": 3360832, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 292, 130], "area": 18263}, {"id": 2567723, "category_id": 185, "iscrowd": 0, "bbox": [0, 73, 295, 73], "area": 5483}, {"id": 7698043, "category_id": 194, "iscrowd": 0, "bbox": [0, 128, 500, 204], "area": 75539}, {"id": 2763046, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 500, 182], "area": 25941}], "file_name": "000000064359.png", "image_id": 64359}, {"segments_info": [{"id": 1643026, "category_id": 1, "iscrowd": 0, "bbox": [171, 1, 156, 319], "area": 24375}, {"id": 11183780, "category_id": 35, "iscrowd": 0, "bbox": [203, 293, 126, 85], "area": 2685}, {"id": 13618121, "category_id": 159, "iscrowd": 0, "bbox": [0, 68, 500, 310], "area": 108843}, {"id": 2566440, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 192], "area": 52667}], "file_name": "000000064462.png", "image_id": 64462}, {"segments_info": [{"id": 6707016, "category_id": 14, "iscrowd": 0, "bbox": [231, 41, 181, 187], "area": 24061}, {"id": 11182231, "category_id": 125, "iscrowd": 0, "bbox": [0, 371, 573, 109], "area": 29021}, {"id": 9865119, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 457], "area": 216589}, {"id": 11444630, "category_id": 191, "iscrowd": 0, "bbox": [279, 428, 323, 52], "area": 8409}, {"id": 2994886, "category_id": 198, "iscrowd": 0, "bbox": [563, 225, 77, 255], "area": 11429}], "file_name": "000000064495.png", "image_id": 64495}, {"segments_info": [{"id": 2896437, "category_id": 24, "iscrowd": 0, "bbox": [98, 188, 245, 240], "area": 14345}, {"id": 5791331, "category_id": 24, "iscrowd": 0, "bbox": [1, 152, 380, 318], "area": 52602}, {"id": 3293527, "category_id": 171, "iscrowd": 0, "bbox": [62, 319, 447, 149], "area": 8888}, {"id": 4153175, "category_id": 184, "iscrowd": 0, "bbox": [192, 0, 448, 480], "area": 37328}, {"id": 132100, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 204, 25], "area": 3233}, {"id": 4411989, "category_id": 191, "iscrowd": 0, "bbox": [0, 335, 578, 145], "area": 34203}, {"id": 8488582, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 416], "area": 151500}], "file_name": "000000064499.png", "image_id": 64499}, {"segments_info": [{"id": 5133137, "category_id": 1, "iscrowd": 0, "bbox": [228, 144, 73, 146], "area": 4464}, {"id": 5527894, "category_id": 1, "iscrowd": 0, "bbox": [368, 231, 88, 213], "area": 10394}, {"id": 5396564, "category_id": 1, "iscrowd": 0, "bbox": [83, 151, 78, 275], "area": 7861}, {"id": 5856602, "category_id": 1, "iscrowd": 0, "bbox": [449, 229, 88, 215], "area": 10662}, {"id": 5922652, "category_id": 1, "iscrowd": 0, "bbox": [165, 151, 64, 145], "area": 2814}, {"id": 5198673, "category_id": 1, "iscrowd": 0, "bbox": [119, 214, 92, 221], "area": 10984}, {"id": 6054238, "category_id": 1, "iscrowd": 0, "bbox": [374, 149, 76, 134], "area": 4812}, {"id": 4409670, "category_id": 1, "iscrowd": 0, "bbox": [284, 219, 87, 225], "area": 10929}, {"id": 7567219, "category_id": 1, "iscrowd": 0, "bbox": [448, 152, 75, 153], "area": 4559}, {"id": 8817287, "category_id": 1, "iscrowd": 0, "bbox": [300, 131, 80, 135], "area": 4868}, {"id": 5527637, "category_id": 1, "iscrowd": 0, "bbox": [199, 218, 89, 219], "area": 10249}, {"id": 3554617, "category_id": 3, "iscrowd": 0, "bbox": [538, 296, 30, 18], "area": 365}, {"id": 2040866, "category_id": 43, "iscrowd": 0, "bbox": [124, 319, 47, 120], "area": 2965}, {"id": 6909804, "category_id": 43, "iscrowd": 0, "bbox": [253, 208, 36, 55], "area": 851}, {"id": 8554114, "category_id": 43, "iscrowd": 0, "bbox": [187, 201, 44, 42], "area": 1284}, {"id": 2962481, "category_id": 43, "iscrowd": 0, "bbox": [185, 237, 38, 40], "area": 1114}, {"id": 4672842, "category_id": 43, "iscrowd": 0, "bbox": [468, 223, 45, 51], "area": 680}, {"id": 1777950, "category_id": 43, "iscrowd": 0, "bbox": [304, 327, 49, 117], "area": 3212}, {"id": 3093810, "category_id": 43, "iscrowd": 0, "bbox": [470, 332, 45, 106], "area": 2400}, {"id": 7370355, "category_id": 43, "iscrowd": 0, "bbox": [332, 206, 41, 48], "area": 962}, {"id": 6186080, "category_id": 43, "iscrowd": 0, "bbox": [418, 220, 38, 52], "area": 1338}, {"id": 3488824, "category_id": 43, "iscrowd": 0, "bbox": [396, 331, 45, 113], "area": 2577}, {"id": 2172708, "category_id": 43, "iscrowd": 0, "bbox": [219, 317, 44, 126], "area": 2417}, {"id": 6317666, "category_id": 138, "iscrowd": 0, "bbox": [0, 252, 640, 162], "area": 26648}, {"id": 5462357, "category_id": 184, "iscrowd": 0, "bbox": [0, 124, 640, 185], "area": 16123}, {"id": 15262948, "category_id": 187, "iscrowd": 0, "bbox": [16, 34, 624, 263], "area": 75921}], "file_name": "000000064523.png", "image_id": 64523}, {"segments_info": [{"id": 7631987, "category_id": 168, "iscrowd": 0, "bbox": [0, 0, 479, 640], "area": 306560}], "file_name": "000000064574.png", "image_id": 64574}, {"segments_info": [{"id": 7103295, "category_id": 1, "iscrowd": 0, "bbox": [122, 45, 313, 413], "area": 45360}, {"id": 6279357, "category_id": 37, "iscrowd": 0, "bbox": [325, 55, 26, 26], "area": 505}, {"id": 10924718, "category_id": 43, "iscrowd": 0, "bbox": [65, 124, 78, 141], "area": 1471}, {"id": 3699837, "category_id": 193, "iscrowd": 0, "bbox": [0, 405, 640, 59], "area": 27370}, {"id": 7419662, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 438], "area": 181913}], "file_name": "000000064718.png", "image_id": 64718}, {"segments_info": [{"id": 7238006, "category_id": 1, "iscrowd": 0, "bbox": [10, 9, 286, 323], "area": 44568}, {"id": 10067627, "category_id": 18, "iscrowd": 0, "bbox": [179, 171, 164, 87], "area": 7414}, {"id": 4739418, "category_id": 44, "iscrowd": 0, "bbox": [358, 0, 20, 51], "area": 715}, {"id": 5726566, "category_id": 62, "iscrowd": 0, "bbox": [225, 94, 58, 59], "area": 894}, {"id": 856339, "category_id": 62, "iscrowd": 0, "bbox": [281, 0, 15, 36], "area": 251}, {"id": 3158575, "category_id": 79, "iscrowd": 0, "bbox": [195, 89, 258, 281], "area": 38461}, {"id": 8755627, "category_id": 100, "iscrowd": 0, "bbox": [405, 25, 76, 86], "area": 3482}, {"id": 9609121, "category_id": 188, "iscrowd": 0, "bbox": [0, 32, 500, 343], "area": 30436}, {"id": 8752785, "category_id": 190, "iscrowd": 0, "bbox": [12, 102, 359, 273], "area": 34307}, {"id": 6844786, "category_id": 196, "iscrowd": 0, "bbox": [419, 95, 81, 62], "area": 3572}, {"id": 3687753, "category_id": 199, "iscrowd": 0, "bbox": [277, 0, 89, 35], "area": 2312}, {"id": 3358284, "category_id": 200, "iscrowd": 0, "bbox": [56, 164, 31, 61], "area": 772}], "file_name": "000000064868.png", "image_id": 64868}, {"segments_info": [{"id": 5658772, "category_id": 1, "iscrowd": 0, "bbox": [344, 204, 54, 52], "area": 1658}, {"id": 5855352, "category_id": 1, "iscrowd": 0, "bbox": [417, 237, 108, 66], "area": 3472}, {"id": 4208185, "category_id": 42, "iscrowd": 0, "bbox": [459, 280, 103, 23], "area": 1147}, {"id": 4865100, "category_id": 42, "iscrowd": 0, "bbox": [299, 231, 80, 28], "area": 1673}, {"id": 8227480, "category_id": 155, "iscrowd": 0, "bbox": [0, 30, 640, 397], "area": 245494}, {"id": 7898257, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 31], "area": 19685}], "file_name": "000000064898.png", "image_id": 64898}, {"segments_info": [{"id": 2580394, "category_id": 65, "iscrowd": 0, "bbox": [3, 229, 421, 388], "area": 122457}, {"id": 3957378, "category_id": 84, "iscrowd": 0, "bbox": [323, 305, 25, 15], "area": 339}, {"id": 6262435, "category_id": 93, "iscrowd": 0, "bbox": [0, 318, 17, 264], "area": 1167}, {"id": 7191000, "category_id": 109, "iscrowd": 0, "bbox": [0, 91, 231, 260], "area": 19112}, {"id": 5743576, "category_id": 130, "iscrowd": 0, "bbox": [334, 262, 19, 24], "area": 310}, {"id": 4430542, "category_id": 141, "iscrowd": 0, "bbox": [286, 339, 16, 11], "area": 136}, {"id": 15268604, "category_id": 181, "iscrowd": 0, "bbox": [0, 95, 199, 256], "area": 33172}, {"id": 5939401, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 406, 36], "area": 11994}, {"id": 1376516, "category_id": 190, "iscrowd": 0, "bbox": [0, 581, 424, 59], "area": 10433}, {"id": 5018830, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 424, 351], "area": 70520}], "file_name": "000000065074.png", "image_id": 65074}, {"segments_info": [{"id": 5585983, "category_id": 1, "iscrowd": 0, "bbox": [332, 39, 38, 59], "area": 1208}, {"id": 2889755, "category_id": 1, "iscrowd": 0, "bbox": [340, 68, 38, 69], "area": 1140}, {"id": 1904916, "category_id": 1, "iscrowd": 0, "bbox": [256, 71, 42, 101], "area": 1483}, {"id": 5192765, "category_id": 1, "iscrowd": 0, "bbox": [190, 58, 78, 110], "area": 2126}, {"id": 2426376, "category_id": 1, "iscrowd": 0, "bbox": [395, 82, 28, 41], "area": 569}, {"id": 11307916, "category_id": 1, "iscrowd": 0, "bbox": [69, 54, 24, 49], "area": 581}, {"id": 5062210, "category_id": 1, "iscrowd": 0, "bbox": [278, 61, 67, 114], "area": 2843}, {"id": 3348289, "category_id": 1, "iscrowd": 0, "bbox": [167, 72, 32, 44], "area": 566}, {"id": 5653838, "category_id": 1, "iscrowd": 0, "bbox": [197, 70, 27, 51], "area": 581}, {"id": 3813940, "category_id": 1, "iscrowd": 0, "bbox": [430, 68, 28, 55], "area": 675}, {"id": 5392465, "category_id": 1, "iscrowd": 0, "bbox": [419, 68, 18, 30], "area": 413}, {"id": 4270368, "category_id": 1, "iscrowd": 0, "bbox": [610, 65, 23, 34], "area": 529}, {"id": 7030310, "category_id": 1, "iscrowd": 0, "bbox": [287, 75, 29, 44], "area": 634}, {"id": 6048331, "category_id": 1, "iscrowd": 1, "bbox": [99, 37, 515, 143], "area": 14099}, {"id": 8679530, "category_id": 2, "iscrowd": 0, "bbox": [23, 80, 31, 35], "area": 639}, {"id": 8218975, "category_id": 2, "iscrowd": 0, "bbox": [14, 94, 8, 21], "area": 104}, {"id": 6639174, "category_id": 2, "iscrowd": 0, "bbox": [19, 85, 13, 28], "area": 121}, {"id": 7692378, "category_id": 2, "iscrowd": 0, "bbox": [150, 73, 13, 21], "area": 124}, {"id": 3622228, "category_id": 16, "iscrowd": 0, "bbox": [105, 125, 76, 57], "area": 1163}, {"id": 6326175, "category_id": 16, "iscrowd": 0, "bbox": [226, 190, 121, 68], "area": 3859}, {"id": 5860476, "category_id": 16, "iscrowd": 0, "bbox": [24, 393, 56, 34], "area": 1045}, {"id": 7561297, "category_id": 27, "iscrowd": 0, "bbox": [512, 139, 127, 79], "area": 3366}, {"id": 6966856, "category_id": 27, "iscrowd": 0, "bbox": [204, 62, 10, 6], "area": 45}, {"id": 5866900, "category_id": 62, "iscrowd": 0, "bbox": [166, 176, 40, 54], "area": 1158}, {"id": 7704213, "category_id": 62, "iscrowd": 0, "bbox": [468, 114, 172, 106], "area": 9327}, {"id": 1931407, "category_id": 62, "iscrowd": 0, "bbox": [215, 238, 408, 183], "area": 67358}, {"id": 2101006, "category_id": 62, "iscrowd": 0, "bbox": [312, 104, 54, 72], "area": 802}, {"id": 1443589, "category_id": 62, "iscrowd": 0, "bbox": [387, 94, 48, 36], "area": 776}, {"id": 1443849, "category_id": 62, "iscrowd": 0, "bbox": [196, 98, 16, 32], "area": 277}, {"id": 1379086, "category_id": 62, "iscrowd": 0, "bbox": [411, 140, 36, 31], "area": 423}, {"id": 786949, "category_id": 62, "iscrowd": 0, "bbox": [182, 101, 17, 22], "area": 259}, {"id": 1443334, "category_id": 62, "iscrowd": 0, "bbox": [209, 98, 18, 26], "area": 239}, {"id": 1904141, "category_id": 62, "iscrowd": 0, "bbox": [207, 100, 61, 74], "area": 1335}, {"id": 6908777, "category_id": 62, "iscrowd": 0, "bbox": [458, 91, 58, 30], "area": 640}, {"id": 1378063, "category_id": 62, "iscrowd": 0, "bbox": [168, 101, 12, 14], "area": 94}, {"id": 5067860, "category_id": 62, "iscrowd": 1, "bbox": [127, 78, 509, 349], "area": 31299}, {"id": 8363685, "category_id": 64, "iscrowd": 0, "bbox": [0, 154, 49, 89], "area": 2283}, {"id": 5278320, "category_id": 64, "iscrowd": 0, "bbox": [558, 70, 49, 45], "area": 1607}, {"id": 3027242, "category_id": 64, "iscrowd": 0, "bbox": [43, 91, 153, 91], "area": 8659}, {"id": 8170648, "category_id": 119, "iscrowd": 0, "bbox": [558, 72, 82, 35], "area": 240}, {"id": 4873038, "category_id": 141, "iscrowd": 0, "bbox": [477, 220, 69, 24], "area": 196}, {"id": 8678496, "category_id": 181, "iscrowd": 0, "bbox": [0, 14, 209, 41], "area": 6660}, {"id": 2963500, "category_id": 184, "iscrowd": 0, "bbox": [134, 0, 506, 89], "area": 17994}, {"id": 12896199, "category_id": 191, "iscrowd": 0, "bbox": [0, 93, 164, 334], "area": 36459}, {"id": 11511724, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 137, 18], "area": 2131}, {"id": 9142127, "category_id": 197, "iscrowd": 0, "bbox": [165, 0, 475, 89], "area": 9703}, {"id": 12757404, "category_id": 199, "iscrowd": 0, "bbox": [0, 48, 640, 39], "area": 3291}], "file_name": "000000065288.png", "image_id": 65288}, {"segments_info": [{"id": 3749442, "category_id": 1, "iscrowd": 0, "bbox": [463, 32, 168, 234], "area": 15306}, {"id": 9340047, "category_id": 1, "iscrowd": 0, "bbox": [529, 72, 108, 186], "area": 8666}, {"id": 8814993, "category_id": 1, "iscrowd": 0, "bbox": [222, 44, 188, 218], "area": 20071}, {"id": 2368293, "category_id": 2, "iscrowd": 0, "bbox": [286, 24, 61, 61], "area": 1896}, {"id": 2565414, "category_id": 2, "iscrowd": 0, "bbox": [597, 1, 43, 96], "area": 2193}, {"id": 2302246, "category_id": 2, "iscrowd": 0, "bbox": [219, 4, 174, 85], "area": 8465}, {"id": 2170147, "category_id": 2, "iscrowd": 0, "bbox": [464, 0, 132, 94], "area": 6398}, {"id": 3288367, "category_id": 3, "iscrowd": 0, "bbox": [468, 42, 38, 51], "area": 1312}, {"id": 9997214, "category_id": 3, "iscrowd": 0, "bbox": [0, 0, 64, 67], "area": 3650}, {"id": 3486260, "category_id": 3, "iscrowd": 0, "bbox": [56, 1, 211, 85], "area": 9059}, {"id": 3551536, "category_id": 27, "iscrowd": 0, "bbox": [448, 187, 82, 60], "area": 1680}, {"id": 1118225, "category_id": 27, "iscrowd": 0, "bbox": [529, 219, 31, 26], "area": 265}, {"id": 4012608, "category_id": 41, "iscrowd": 0, "bbox": [193, 153, 105, 77], "area": 2352}, {"id": 3094855, "category_id": 41, "iscrowd": 0, "bbox": [534, 241, 101, 16], "area": 662}, {"id": 4735566, "category_id": 41, "iscrowd": 0, "bbox": [469, 254, 141, 33], "area": 1554}, {"id": 3488324, "category_id": 175, "iscrowd": 0, "bbox": [0, 72, 640, 156], "area": 37472}, {"id": 2370614, "category_id": 184, "iscrowd": 0, "bbox": [383, 0, 117, 243], "area": 16675}, {"id": 2894639, "category_id": 185, "iscrowd": 0, "bbox": [213, 0, 180, 49], "area": 2293}, {"id": 9536135, "category_id": 191, "iscrowd": 0, "bbox": [0, 208, 640, 182], "area": 36705}, {"id": 9803151, "category_id": 199, "iscrowd": 0, "bbox": [0, 116, 640, 311], "area": 87573}], "file_name": "000000065350.png", "image_id": 65350}, {"segments_info": [{"id": 11116429, "category_id": 1, "iscrowd": 0, "bbox": [349, 98, 10, 26], "area": 158}, {"id": 6187643, "category_id": 1, "iscrowd": 0, "bbox": [412, 84, 28, 41], "area": 527}, {"id": 6713730, "category_id": 1, "iscrowd": 0, "bbox": [347, 152, 129, 79], "area": 4259}, {"id": 10002354, "category_id": 1, "iscrowd": 0, "bbox": [468, 84, 32, 64], "area": 825}, {"id": 9608612, "category_id": 1, "iscrowd": 0, "bbox": [450, 135, 50, 58], "area": 1221}, {"id": 5725287, "category_id": 1, "iscrowd": 0, "bbox": [396, 124, 31, 61], "area": 1122}, {"id": 6713987, "category_id": 1, "iscrowd": 0, "bbox": [455, 116, 38, 37], "area": 801}, {"id": 10132639, "category_id": 1, "iscrowd": 0, "bbox": [366, 97, 14, 24], "area": 205}, {"id": 5990258, "category_id": 1, "iscrowd": 0, "bbox": [373, 265, 127, 109], "area": 8413}, {"id": 8161954, "category_id": 1, "iscrowd": 0, "bbox": [444, 98, 31, 27], "area": 572}, {"id": 7372427, "category_id": 1, "iscrowd": 0, "bbox": [400, 107, 16, 12], "area": 139}, {"id": 6845314, "category_id": 1, "iscrowd": 0, "bbox": [449, 84, 17, 15], "area": 196}, {"id": 5528940, "category_id": 1, "iscrowd": 0, "bbox": [380, 190, 120, 73], "area": 4043}, {"id": 7570063, "category_id": 1, "iscrowd": 1, "bbox": [313, 73, 187, 301], "area": 9588}, {"id": 4740704, "category_id": 25, "iscrowd": 0, "bbox": [1, 109, 312, 202], "area": 20797}, {"id": 6122617, "category_id": 25, "iscrowd": 0, "bbox": [79, 190, 156, 93], "area": 5911}, {"id": 5273194, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 196], "area": 61328}, {"id": 6979462, "category_id": 191, "iscrowd": 0, "bbox": [56, 111, 172, 52], "area": 2883}, {"id": 8956595, "category_id": 193, "iscrowd": 0, "bbox": [93, 148, 354, 227], "area": 32360}, {"id": 8097693, "category_id": 194, "iscrowd": 0, "bbox": [0, 118, 394, 257], "area": 28739}], "file_name": "000000065455.png", "image_id": 65455}, {"segments_info": [{"id": 6515343, "category_id": 3, "iscrowd": 0, "bbox": [7, 34, 633, 330], "area": 161536}, {"id": 6975608, "category_id": 18, "iscrowd": 0, "bbox": [388, 98, 85, 81], "area": 2999}, {"id": 4151899, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 126], "area": 16213}, {"id": 15591900, "category_id": 187, "iscrowd": 0, "bbox": [177, 0, 463, 114], "area": 26623}, {"id": 4350065, "category_id": 193, "iscrowd": 0, "bbox": [0, 101, 640, 263], "area": 22535}], "file_name": "000000065485.png", "image_id": 65485}, {"segments_info": [{"id": 3751490, "category_id": 1, "iscrowd": 0, "bbox": [185, 6, 191, 403], "area": 32414}, {"id": 7322285, "category_id": 37, "iscrowd": 0, "bbox": [336, 62, 22, 21], "area": 345}, {"id": 5594449, "category_id": 43, "iscrowd": 0, "bbox": [279, 25, 114, 83], "area": 4906}, {"id": 5983793, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 640, 341], "area": 181022}, {"id": 4344640, "category_id": 190, "iscrowd": 0, "bbox": [0, 324, 640, 103], "area": 54218}], "file_name": "000000065736.png", "image_id": 65736}, {"segments_info": [{"id": 4803412, "category_id": 1, "iscrowd": 0, "bbox": [457, 254, 19, 30], "area": 354}, {"id": 2697519, "category_id": 1, "iscrowd": 0, "bbox": [354, 178, 15, 15], "area": 123}, {"id": 2961982, "category_id": 1, "iscrowd": 0, "bbox": [195, 250, 24, 67], "area": 1031}, {"id": 7832985, "category_id": 1, "iscrowd": 0, "bbox": [277, 251, 42, 66], "area": 987}, {"id": 3357503, "category_id": 1, "iscrowd": 0, "bbox": [392, 232, 16, 21], "area": 211}, {"id": 4934497, "category_id": 1, "iscrowd": 0, "bbox": [448, 212, 13, 8], "area": 66}, {"id": 4740713, "category_id": 1, "iscrowd": 0, "bbox": [313, 216, 11, 10], "area": 83}, {"id": 5263191, "category_id": 1, "iscrowd": 0, "bbox": [420, 257, 24, 28], "area": 415}, {"id": 5725807, "category_id": 1, "iscrowd": 0, "bbox": [373, 214, 13, 10], "area": 77}, {"id": 8221051, "category_id": 1, "iscrowd": 0, "bbox": [266, 217, 16, 15], "area": 109}, {"id": 9937837, "category_id": 1, "iscrowd": 0, "bbox": [478, 275, 47, 109], "area": 2674}, {"id": 7632262, "category_id": 1, "iscrowd": 0, "bbox": [201, 242, 20, 17], "area": 115}, {"id": 7373202, "category_id": 1, "iscrowd": 0, "bbox": [217, 272, 28, 44], "area": 745}, {"id": 3289399, "category_id": 1, "iscrowd": 1, "bbox": [0, 32, 640, 261], "area": 111480}, {"id": 7637903, "category_id": 37, "iscrowd": 0, "bbox": [618, 446, 4, 3], "area": 8}, {"id": 5676709, "category_id": 37, "iscrowd": 0, "bbox": [261, 396, 3, 3], "area": 6}, {"id": 5329500, "category_id": 39, "iscrowd": 0, "bbox": [283, 241, 20, 15], "area": 27}, {"id": 2177095, "category_id": 40, "iscrowd": 0, "bbox": [244, 297, 9, 12], "area": 76}, {"id": 5065031, "category_id": 144, "iscrowd": 0, "bbox": [0, 0, 640, 40], "area": 13798}, {"id": 3114887, "category_id": 145, "iscrowd": 0, "bbox": [0, 264, 640, 216], "area": 118449}, {"id": 3224628, "category_id": 185, "iscrowd": 0, "bbox": [0, 91, 442, 198], "area": 3647}, {"id": 2041389, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 288], "area": 36663}, {"id": 2830379, "category_id": 199, "iscrowd": 0, "bbox": [0, 225, 541, 85], "area": 14877}], "file_name": "000000065798.png", "image_id": 65798}, {"segments_info": [{"id": 3751512, "category_id": 1, "iscrowd": 0, "bbox": [323, 235, 29, 116], "area": 1924}, {"id": 6313582, "category_id": 1, "iscrowd": 0, "bbox": [370, 254, 120, 30], "area": 1033}, {"id": 4271936, "category_id": 1, "iscrowd": 0, "bbox": [269, 244, 60, 103], "area": 3630}, {"id": 1643040, "category_id": 1, "iscrowd": 0, "bbox": [126, 247, 86, 23], "area": 582}, {"id": 6969190, "category_id": 1, "iscrowd": 0, "bbox": [220, 205, 52, 97], "area": 2270}, {"id": 3286064, "category_id": 1, "iscrowd": 0, "bbox": [161, 246, 72, 28], "area": 798}, {"id": 5390656, "category_id": 16, "iscrowd": 0, "bbox": [10, 361, 36, 26], "area": 221}, {"id": 5400410, "category_id": 28, "iscrowd": 0, "bbox": [466, 164, 142, 118], "area": 4775}, {"id": 5995427, "category_id": 28, "iscrowd": 0, "bbox": [134, 157, 212, 180], "area": 7135}, {"id": 6779670, "category_id": 28, "iscrowd": 0, "bbox": [329, 158, 189, 180], "area": 4134}, {"id": 5205092, "category_id": 28, "iscrowd": 0, "bbox": [62, 160, 121, 46], "area": 3712}, {"id": 6048065, "category_id": 62, "iscrowd": 0, "bbox": [168, 227, 107, 67], "area": 1195}, {"id": 9668221, "category_id": 62, "iscrowd": 0, "bbox": [432, 249, 99, 45], "area": 1918}, {"id": 8220262, "category_id": 62, "iscrowd": 0, "bbox": [500, 233, 122, 78], "area": 3215}, {"id": 1118298, "category_id": 62, "iscrowd": 0, "bbox": [338, 264, 38, 77], "area": 1523}, {"id": 7891045, "category_id": 62, "iscrowd": 0, "bbox": [351, 283, 74, 56], "area": 2385}, {"id": 11184554, "category_id": 154, "iscrowd": 0, "bbox": [0, 173, 640, 307], "area": 131195}, {"id": 8271914, "category_id": 168, "iscrowd": 0, "bbox": [143, 249, 456, 37], "area": 1066}, {"id": 1188634, "category_id": 184, "iscrowd": 0, "bbox": [0, 30, 640, 191], "area": 62711}, {"id": 7758163, "category_id": 187, "iscrowd": 0, "bbox": [592, 0, 48, 59], "area": 2627}, {"id": 4677729, "category_id": 193, "iscrowd": 0, "bbox": [0, 162, 615, 99], "area": 13056}, {"id": 2823690, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 593, 125], "area": 46690}], "file_name": "000000066038.png", "image_id": 66038}, {"segments_info": [{"id": 2513274, "category_id": 7, "iscrowd": 0, "bbox": [8, 37, 492, 315], "area": 105174}, {"id": 11187146, "category_id": 130, "iscrowd": 0, "bbox": [77, 0, 19, 16], "area": 227}, {"id": 5602464, "category_id": 144, "iscrowd": 0, "bbox": [0, 186, 37, 59], "area": 1890}, {"id": 2304570, "category_id": 147, "iscrowd": 0, "bbox": [0, 233, 216, 147], "area": 10936}, {"id": 1578786, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 500, 114], "area": 32196}, {"id": 4680328, "category_id": 191, "iscrowd": 0, "bbox": [182, 182, 318, 198], "area": 32194}, {"id": 2766930, "category_id": 197, "iscrowd": 0, "bbox": [0, 43, 500, 145], "area": 7019}], "file_name": "000000066135.png", "image_id": 66135}, {"segments_info": [{"id": 263691, "category_id": 1, "iscrowd": 0, "bbox": [8, 170, 43, 77], "area": 1746}, {"id": 463146, "category_id": 1, "iscrowd": 0, "bbox": [526, 183, 10, 19], "area": 127}, {"id": 6120566, "category_id": 1, "iscrowd": 0, "bbox": [300, 144, 37, 60], "area": 1168}, {"id": 1581103, "category_id": 1, "iscrowd": 0, "bbox": [245, 145, 41, 60], "area": 1523}, {"id": 132370, "category_id": 1, "iscrowd": 0, "bbox": [427, 185, 15, 13], "area": 141}, {"id": 2896966, "category_id": 1, "iscrowd": 0, "bbox": [145, 145, 57, 120], "area": 3299}, {"id": 3685966, "category_id": 1, "iscrowd": 0, "bbox": [452, 157, 47, 151], "area": 3689}, {"id": 7633288, "category_id": 1, "iscrowd": 0, "bbox": [2, 198, 79, 212], "area": 9100}, {"id": 5529979, "category_id": 1, "iscrowd": 0, "bbox": [334, 138, 111, 288], "area": 14684}, {"id": 8698589, "category_id": 44, "iscrowd": 0, "bbox": [184, 248, 7, 21], "area": 80}, {"id": 11711939, "category_id": 44, "iscrowd": 0, "bbox": [212, 230, 14, 39], "area": 411}, {"id": 3039925, "category_id": 44, "iscrowd": 0, "bbox": [177, 249, 10, 21], "area": 143}, {"id": 7176898, "category_id": 44, "iscrowd": 0, "bbox": [87, 276, 14, 44], "area": 484}, {"id": 1514791, "category_id": 49, "iscrowd": 0, "bbox": [298, 205, 10, 25], "area": 97}, {"id": 263689, "category_id": 49, "iscrowd": 0, "bbox": [315, 205, 3, 10], "area": 26}, {"id": 10662590, "category_id": 51, "iscrowd": 0, "bbox": [327, 282, 32, 11], "area": 285}, {"id": 12175569, "category_id": 51, "iscrowd": 0, "bbox": [285, 277, 45, 15], "area": 549}, {"id": 7768739, "category_id": 51, "iscrowd": 0, "bbox": [274, 265, 54, 25], "area": 683}, {"id": 7176344, "category_id": 51, "iscrowd": 0, "bbox": [252, 204, 23, 13], "area": 250}, {"id": 2121867, "category_id": 52, "iscrowd": 0, "bbox": [574, 274, 61, 56], "area": 1650}, {"id": 2661007, "category_id": 53, "iscrowd": 0, "bbox": [576, 315, 46, 31], "area": 1149}, {"id": 4410567, "category_id": 53, "iscrowd": 0, "bbox": [631, 274, 9, 18], "area": 111}, {"id": 3260653, "category_id": 55, "iscrowd": 0, "bbox": [622, 291, 18, 16], "area": 219}, {"id": 1619430, "category_id": 55, "iscrowd": 0, "bbox": [614, 304, 26, 41], "area": 828}, {"id": 3358285, "category_id": 81, "iscrowd": 0, "bbox": [99, 326, 203, 60], "area": 8036}, {"id": 2768712, "category_id": 82, "iscrowd": 0, "bbox": [490, 207, 150, 214], "area": 26433}, {"id": 11648200, "category_id": 107, "iscrowd": 0, "bbox": [68, 201, 298, 136], "area": 7827}, {"id": 1316894, "category_id": 112, "iscrowd": 0, "bbox": [0, 130, 70, 134], "area": 4930}, {"id": 263686, "category_id": 118, "iscrowd": 0, "bbox": [457, 271, 39, 44], "area": 821}, {"id": 3954535, "category_id": 122, "iscrowd": 0, "bbox": [561, 173, 79, 36], "area": 1433}, {"id": 1712421, "category_id": 130, "iscrowd": 0, "bbox": [236, 0, 275, 22], "area": 1022}, {"id": 4543578, "category_id": 156, "iscrowd": 0, "bbox": [492, 421, 148, 6], "area": 887}, {"id": 11449274, "category_id": 168, "iscrowd": 0, "bbox": [76, 304, 81, 57], "area": 2397}, {"id": 1317930, "category_id": 188, "iscrowd": 0, "bbox": [241, 184, 231, 243], "area": 17803}, {"id": 2440803, "category_id": 190, "iscrowd": 0, "bbox": [413, 309, 82, 118], "area": 5960}, {"id": 11058125, "category_id": 195, "iscrowd": 0, "bbox": [190, 253, 96, 59], "area": 2552}, {"id": 5993357, "category_id": 196, "iscrowd": 0, "bbox": [149, 168, 487, 108], "area": 4325}, {"id": 131845, "category_id": 199, "iscrowd": 0, "bbox": [50, 13, 495, 282], "area": 50056}], "file_name": "000000066231.png", "image_id": 66231}, {"segments_info": [{"id": 10199459, "category_id": 65, "iscrowd": 0, "bbox": [1, 300, 431, 327], "area": 119118}, {"id": 7830138, "category_id": 93, "iscrowd": 0, "bbox": [0, 344, 456, 296], "area": 19695}, {"id": 6912639, "category_id": 109, "iscrowd": 0, "bbox": [50, 0, 430, 640], "area": 106868}, {"id": 5792353, "category_id": 186, "iscrowd": 0, "bbox": [29, 0, 81, 34], "area": 1702}, {"id": 7044997, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 463], "area": 53480}], "file_name": "000000066523.png", "image_id": 66523}, {"segments_info": [{"id": 9935259, "category_id": 20, "iscrowd": 0, "bbox": [188, 71, 420, 299], "area": 91433}, {"id": 3025959, "category_id": 20, "iscrowd": 0, "bbox": [54, 135, 166, 256], "area": 26965}, {"id": 5333349, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 154280}], "file_name": "000000066561.png", "image_id": 66561}, {"segments_info": [{"id": 4474700, "category_id": 72, "iscrowd": 0, "bbox": [106, 41, 290, 273], "area": 65672}, {"id": 11316919, "category_id": 74, "iscrowd": 0, "bbox": [508, 337, 52, 37], "area": 1148}, {"id": 9871534, "category_id": 75, "iscrowd": 0, "bbox": [409, 292, 43, 20], "area": 363}, {"id": 13422033, "category_id": 76, "iscrowd": 0, "bbox": [233, 342, 266, 119], "area": 15275}, {"id": 2973076, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 525, 228], "area": 21785}, {"id": 1392517, "category_id": 189, "iscrowd": 0, "bbox": [0, 230, 640, 250], "area": 105255}, {"id": 8361642, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 339], "area": 86792}], "file_name": "000000066635.png", "image_id": 66635}, {"segments_info": [{"id": 7366256, "category_id": 1, "iscrowd": 0, "bbox": [523, 473, 89, 71], "area": 3152}, {"id": 5195333, "category_id": 1, "iscrowd": 0, "bbox": [359, 293, 112, 66], "area": 1939}, {"id": 3290206, "category_id": 1, "iscrowd": 0, "bbox": [357, 61, 140, 436], "area": 9499}, {"id": 7244705, "category_id": 47, "iscrowd": 0, "bbox": [261, 463, 170, 133], "area": 15007}, {"id": 9155003, "category_id": 52, "iscrowd": 0, "bbox": [163, 389, 54, 48], "area": 1850}, {"id": 8234159, "category_id": 52, "iscrowd": 0, "bbox": [116, 355, 62, 108], "area": 4606}, {"id": 7838887, "category_id": 52, "iscrowd": 0, "bbox": [154, 435, 59, 46], "area": 2270}, {"id": 8168883, "category_id": 52, "iscrowd": 0, "bbox": [118, 259, 120, 94], "area": 8136}, {"id": 5593691, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 165885}, {"id": 5857651, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 161515}], "file_name": "000000066706.png", "image_id": 66706}, {"segments_info": [{"id": 3685699, "category_id": 1, "iscrowd": 0, "bbox": [2, 0, 340, 409], "area": 98464}, {"id": 3491168, "category_id": 1, "iscrowd": 0, "bbox": [375, 2, 265, 425], "area": 77225}, {"id": 7505556, "category_id": 47, "iscrowd": 0, "bbox": [156, 429, 61, 51], "area": 2403}, {"id": 8029348, "category_id": 47, "iscrowd": 0, "bbox": [449, 391, 111, 89], "area": 8589}, {"id": 8031901, "category_id": 47, "iscrowd": 0, "bbox": [301, 401, 104, 74], "area": 6564}, {"id": 11451342, "category_id": 47, "iscrowd": 0, "bbox": [120, 331, 121, 71], "area": 6108}, {"id": 9279658, "category_id": 50, "iscrowd": 0, "bbox": [110, 346, 39, 21], "area": 265}, {"id": 10268604, "category_id": 51, "iscrowd": 0, "bbox": [66, 435, 85, 45], "area": 3247}, {"id": 2371129, "category_id": 63, "iscrowd": 0, "bbox": [309, 132, 139, 261], "area": 18452}, {"id": 1847901, "category_id": 67, "iscrowd": 0, "bbox": [1, 334, 639, 138], "area": 22900}, {"id": 3356737, "category_id": 77, "iscrowd": 0, "bbox": [368, 209, 63, 74], "area": 1987}, {"id": 2439258, "category_id": 189, "iscrowd": 0, "bbox": [0, 364, 640, 116], "area": 5651}, {"id": 14477033, "category_id": 195, "iscrowd": 0, "bbox": [364, 426, 88, 54], "area": 1921}, {"id": 15857913, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 145], "area": 37176}], "file_name": "000000066771.png", "image_id": 66771}, {"segments_info": [{"id": 6646903, "category_id": 48, "iscrowd": 0, "bbox": [222, 466, 65, 146], "area": 939}, {"id": 5661821, "category_id": 50, "iscrowd": 0, "bbox": [230, 466, 78, 138], "area": 2048}, {"id": 6908526, "category_id": 50, "iscrowd": 0, "bbox": [21, 433, 197, 172], "area": 4133}, {"id": 12505026, "category_id": 51, "iscrowd": 0, "bbox": [3, 6, 226, 227], "area": 40495}, {"id": 6258081, "category_id": 51, "iscrowd": 0, "bbox": [401, 42, 163, 160], "area": 15498}, {"id": 3100835, "category_id": 57, "iscrowd": 0, "bbox": [460, 57, 44, 33], "area": 1003}, {"id": 4087727, "category_id": 57, "iscrowd": 0, "bbox": [449, 153, 37, 34], "area": 673}, {"id": 4426703, "category_id": 57, "iscrowd": 0, "bbox": [492, 109, 44, 48], "area": 1426}, {"id": 2832510, "category_id": 57, "iscrowd": 0, "bbox": [504, 62, 27, 25], "area": 411}, {"id": 3498167, "category_id": 57, "iscrowd": 0, "bbox": [463, 136, 45, 33], "area": 893}, {"id": 4279155, "category_id": 67, "iscrowd": 0, "bbox": [3, 2, 609, 600], "area": 81254}, {"id": 7306902, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 223681}], "file_name": "000000066817.png", "image_id": 66817}, {"segments_info": [{"id": 1850450, "category_id": 44, "iscrowd": 0, "bbox": [0, 27, 94, 187], "area": 15083}, {"id": 9409439, "category_id": 50, "iscrowd": 0, "bbox": [225, 423, 43, 56], "area": 1510}, {"id": 3621969, "category_id": 50, "iscrowd": 0, "bbox": [256, 162, 63, 69], "area": 2825}, {"id": 2307137, "category_id": 50, "iscrowd": 0, "bbox": [9, 280, 61, 60], "area": 1270}, {"id": 4542040, "category_id": 50, "iscrowd": 0, "bbox": [52, 423, 47, 60], "area": 2014}, {"id": 4675687, "category_id": 50, "iscrowd": 0, "bbox": [114, 109, 82, 107], "area": 3520}, {"id": 5599876, "category_id": 80, "iscrowd": 0, "bbox": [66, 108, 259, 335], "area": 49904}, {"id": 6787233, "category_id": 107, "iscrowd": 0, "bbox": [0, 191, 336, 309], "area": 41118}, {"id": 10462382, "category_id": 176, "iscrowd": 0, "bbox": [96, 0, 240, 353], "area": 22537}], "file_name": "000000066841.png", "image_id": 66841}, {"segments_info": [{"id": 6776711, "category_id": 1, "iscrowd": 0, "bbox": [119, 33, 480, 394], "area": 145281}, {"id": 922141, "category_id": 118, "iscrowd": 0, "bbox": [0, 335, 640, 92], "area": 7831}, {"id": 4281185, "category_id": 156, "iscrowd": 0, "bbox": [201, 2, 439, 282], "area": 17471}, {"id": 3029318, "category_id": 188, "iscrowd": 0, "bbox": [582, 262, 58, 150], "area": 6682}, {"id": 6653071, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 377], "area": 59688}], "file_name": "000000066886.png", "image_id": 66886}, {"segments_info": [{"id": 6256776, "category_id": 60, "iscrowd": 0, "bbox": [1, 103, 43, 36], "area": 957}, {"id": 7506846, "category_id": 60, "iscrowd": 0, "bbox": [150, 0, 102, 47], "area": 3710}, {"id": 4017244, "category_id": 60, "iscrowd": 0, "bbox": [495, 2, 145, 79], "area": 4951}, {"id": 6915222, "category_id": 60, "iscrowd": 0, "bbox": [8, 41, 171, 85], "area": 7258}, {"id": 5534086, "category_id": 60, "iscrowd": 0, "bbox": [1, 142, 319, 284], "area": 58268}, {"id": 6522526, "category_id": 60, "iscrowd": 0, "bbox": [237, 0, 131, 59], "area": 5346}, {"id": 6389654, "category_id": 60, "iscrowd": 0, "bbox": [228, 35, 274, 183], "area": 31575}, {"id": 5402499, "category_id": 60, "iscrowd": 0, "bbox": [155, 200, 485, 274], "area": 112106}, {"id": 6323344, "category_id": 60, "iscrowd": 0, "bbox": [0, 123, 139, 99], "area": 8146}, {"id": 5863568, "category_id": 60, "iscrowd": 0, "bbox": [451, 47, 189, 184], "area": 25803}, {"id": 6784926, "category_id": 60, "iscrowd": 0, "bbox": [105, 34, 197, 122], "area": 13594}, {"id": 4547192, "category_id": 60, "iscrowd": 0, "bbox": [360, 0, 191, 74], "area": 8999}], "file_name": "000000066926.png", "image_id": 66926}, {"segments_info": [{"id": 7370371, "category_id": 1, "iscrowd": 0, "bbox": [104, 40, 250, 484], "area": 58687}, {"id": 7236977, "category_id": 15, "iscrowd": 0, "bbox": [51, 308, 429, 225], "area": 22527}, {"id": 8685453, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 480, 470], "area": 138174}, {"id": 2769714, "category_id": 193, "iscrowd": 0, "bbox": [397, 626, 21, 14], "area": 186}], "file_name": "000000067180.png", "image_id": 67180}, {"segments_info": [{"id": 5391432, "category_id": 1, "iscrowd": 0, "bbox": [447, 331, 61, 81], "area": 3006}, {"id": 3941923, "category_id": 1, "iscrowd": 0, "bbox": [279, 371, 31, 38], "area": 703}, {"id": 3088675, "category_id": 1, "iscrowd": 0, "bbox": [495, 332, 83, 79], "area": 3558}, {"id": 4737361, "category_id": 1, "iscrowd": 0, "bbox": [0, 340, 22, 69], "area": 667}, {"id": 5192758, "category_id": 1, "iscrowd": 0, "bbox": [355, 366, 43, 43], "area": 940}, {"id": 2498338, "category_id": 1, "iscrowd": 0, "bbox": [598, 339, 42, 71], "area": 2089}, {"id": 789273, "category_id": 1, "iscrowd": 0, "bbox": [5, 312, 15, 5], "area": 73}, {"id": 2828333, "category_id": 1, "iscrowd": 0, "bbox": [2, 361, 53, 54], "area": 2139}, {"id": 3944493, "category_id": 3, "iscrowd": 0, "bbox": [1, 305, 197, 107], "area": 13967}, {"id": 6441801, "category_id": 3, "iscrowd": 0, "bbox": [142, 325, 100, 80], "area": 4276}, {"id": 4404786, "category_id": 3, "iscrowd": 0, "bbox": [170, 308, 161, 31], "area": 2563}, {"id": 6444626, "category_id": 3, "iscrowd": 0, "bbox": [221, 330, 239, 80], "area": 13278}, {"id": 2496537, "category_id": 3, "iscrowd": 0, "bbox": [444, 341, 178, 68], "area": 3967}, {"id": 4801341, "category_id": 18, "iscrowd": 0, "bbox": [403, 61, 198, 199], "area": 15712}, {"id": 8086101, "category_id": 178, "iscrowd": 0, "bbox": [0, 420, 640, 57], "area": 21677}, {"id": 1384732, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 361], "area": 176975}, {"id": 9271666, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 93], "area": 15575}], "file_name": "000000067213.png", "image_id": 67213}, {"segments_info": [{"id": 4735819, "category_id": 1, "iscrowd": 0, "bbox": [186, 403, 60, 126], "area": 4431}, {"id": 10587525, "category_id": 1, "iscrowd": 0, "bbox": [151, 425, 56, 96], "area": 2794}, {"id": 8416358, "category_id": 1, "iscrowd": 0, "bbox": [134, 430, 27, 95], "area": 1577}, {"id": 7956851, "category_id": 1, "iscrowd": 0, "bbox": [188, 412, 21, 40], "area": 342}, {"id": 8352884, "category_id": 1, "iscrowd": 0, "bbox": [14, 120, 225, 249], "area": 20884}, {"id": 6186861, "category_id": 41, "iscrowd": 0, "bbox": [122, 288, 107, 97], "area": 1703}, {"id": 13550268, "category_id": 92, "iscrowd": 0, "bbox": [0, 338, 419, 143], "area": 20502}, {"id": 2833721, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 486, 361], "area": 144781}, {"id": 3223600, "category_id": 185, "iscrowd": 0, "bbox": [0, 301, 486, 196], "area": 24583}], "file_name": "000000067310.png", "image_id": 67310}, {"segments_info": [{"id": 1385271, "category_id": 1, "iscrowd": 0, "bbox": [2, 1, 539, 422], "area": 127362}, {"id": 527895, "category_id": 1, "iscrowd": 0, "bbox": [460, 1, 180, 421], "area": 38122}, {"id": 527161, "category_id": 32, "iscrowd": 0, "bbox": [520, 0, 119, 294], "area": 24834}, {"id": 528154, "category_id": 32, "iscrowd": 0, "bbox": [130, 4, 193, 423], "area": 43378}, {"id": 16185850, "category_id": 181, "iscrowd": 0, "bbox": [199, 0, 208, 51], "area": 2702}, {"id": 5081527, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 615, 427], "area": 32438}], "file_name": "000000067315.png", "image_id": 67315}, {"segments_info": [{"id": 2830127, "category_id": 1, "iscrowd": 0, "bbox": [111, 259, 21, 58], "area": 857}, {"id": 2630691, "category_id": 1, "iscrowd": 0, "bbox": [173, 252, 25, 63], "area": 864}, {"id": 4799288, "category_id": 1, "iscrowd": 0, "bbox": [379, 277, 8, 20], "area": 130}, {"id": 7892611, "category_id": 38, "iscrowd": 0, "bbox": [232, 193, 90, 80], "area": 1555}, {"id": 14336416, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 304], "area": 144938}, {"id": 3173988, "category_id": 193, "iscrowd": 0, "bbox": [0, 291, 500, 84], "area": 39010}], "file_name": "000000067406.png", "image_id": 67406}, {"segments_info": [{"id": 9933451, "category_id": 1, "iscrowd": 0, "bbox": [3, 0, 293, 640], "area": 132056}, {"id": 10522190, "category_id": 32, "iscrowd": 0, "bbox": [94, 101, 167, 533], "area": 26253}, {"id": 1582136, "category_id": 62, "iscrowd": 0, "bbox": [269, 358, 37, 142], "area": 2576}, {"id": 1514276, "category_id": 199, "iscrowd": 0, "bbox": [152, 0, 154, 278], "area": 20996}], "file_name": "000000067534.png", "image_id": 67534}, {"segments_info": [{"id": 4800828, "category_id": 1, "iscrowd": 0, "bbox": [83, 362, 30, 35], "area": 502}, {"id": 1973534, "category_id": 1, "iscrowd": 0, "bbox": [0, 344, 53, 134], "area": 3660}, {"id": 2697266, "category_id": 1, "iscrowd": 0, "bbox": [139, 366, 17, 27], "area": 259}, {"id": 2039587, "category_id": 1, "iscrowd": 0, "bbox": [114, 363, 37, 51], "area": 721}, {"id": 3946043, "category_id": 1, "iscrowd": 0, "bbox": [162, 362, 26, 36], "area": 578}, {"id": 5130825, "category_id": 2, "iscrowd": 0, "bbox": [311, 383, 26, 59], "area": 758}, {"id": 5393994, "category_id": 3, "iscrowd": 0, "bbox": [391, 340, 146, 104], "area": 11493}, {"id": 10459540, "category_id": 3, "iscrowd": 0, "bbox": [526, 360, 62, 65], "area": 2909}, {"id": 12955281, "category_id": 3, "iscrowd": 0, "bbox": [613, 356, 27, 38], "area": 417}, {"id": 8813683, "category_id": 8, "iscrowd": 0, "bbox": [550, 348, 86, 68], "area": 2859}, {"id": 4082269, "category_id": 11, "iscrowd": 0, "bbox": [218, 393, 29, 66], "area": 1133}, {"id": 2894627, "category_id": 14, "iscrowd": 0, "bbox": [380, 339, 22, 94], "area": 1573}, {"id": 6181710, "category_id": 62, "iscrowd": 0, "bbox": [224, 390, 26, 23], "area": 248}, {"id": 5655371, "category_id": 62, "iscrowd": 0, "bbox": [314, 390, 12, 29], "area": 156}, {"id": 5983305, "category_id": 62, "iscrowd": 0, "bbox": [188, 392, 11, 7], "area": 55}, {"id": 4078913, "category_id": 62, "iscrowd": 0, "bbox": [363, 380, 18, 42], "area": 311}, {"id": 3683122, "category_id": 62, "iscrowd": 0, "bbox": [114, 391, 87, 50], "area": 1069}, {"id": 2236445, "category_id": 62, "iscrowd": 0, "bbox": [83, 389, 39, 52], "area": 754}, {"id": 4998209, "category_id": 62, "iscrowd": 0, "bbox": [265, 388, 23, 43], "area": 424}, {"id": 8023145, "category_id": 62, "iscrowd": 0, "bbox": [346, 389, 22, 32], "area": 317}, {"id": 5392449, "category_id": 62, "iscrowd": 0, "bbox": [292, 381, 21, 11], "area": 126}, {"id": 4078909, "category_id": 62, "iscrowd": 0, "bbox": [340, 391, 6, 35], "area": 120}, {"id": 3433818, "category_id": 64, "iscrowd": 0, "bbox": [286, 375, 7, 16], "area": 81}, {"id": 3429974, "category_id": 64, "iscrowd": 0, "bbox": [298, 369, 12, 15], "area": 120}, {"id": 3566950, "category_id": 64, "iscrowd": 0, "bbox": [243, 377, 10, 18], "area": 74}, {"id": 13418941, "category_id": 67, "iscrowd": 0, "bbox": [214, 395, 13, 27], "area": 247}, {"id": 14075583, "category_id": 67, "iscrowd": 0, "bbox": [353, 386, 28, 20], "area": 239}, {"id": 10588042, "category_id": 67, "iscrowd": 0, "bbox": [149, 392, 33, 29], "area": 583}, {"id": 12628652, "category_id": 67, "iscrowd": 0, "bbox": [245, 394, 34, 24], "area": 551}, {"id": 9866633, "category_id": 67, "iscrowd": 0, "bbox": [340, 389, 9, 22], "area": 117}, {"id": 12759467, "category_id": 67, "iscrowd": 0, "bbox": [283, 391, 35, 26], "area": 528}, {"id": 5004687, "category_id": 86, "iscrowd": 0, "bbox": [287, 389, 6, 5], "area": 23}, {"id": 4678804, "category_id": 86, "iscrowd": 0, "bbox": [246, 391, 6, 5], "area": 26}, {"id": 4079181, "category_id": 86, "iscrowd": 0, "bbox": [300, 382, 6, 4], "area": 20}, {"id": 8616562, "category_id": 86, "iscrowd": 0, "bbox": [361, 383, 4, 6], "area": 18}, {"id": 3881798, "category_id": 86, "iscrowd": 0, "bbox": [256, 383, 6, 5], "area": 28}, {"id": 3092539, "category_id": 86, "iscrowd": 0, "bbox": [318, 386, 5, 5], "area": 19}, {"id": 5330280, "category_id": 92, "iscrowd": 0, "bbox": [197, 17, 164, 307], "area": 5792}, {"id": 4739158, "category_id": 119, "iscrowd": 0, "bbox": [214, 378, 21, 17], "area": 236}, {"id": 5527382, "category_id": 130, "iscrowd": 0, "bbox": [194, 90, 26, 74], "area": 1236}, {"id": 9801094, "category_id": 149, "iscrowd": 0, "bbox": [233, 392, 407, 88], "area": 17403}, {"id": 3423049, "category_id": 181, "iscrowd": 0, "bbox": [106, 0, 259, 339], "area": 18327}, {"id": 5396326, "category_id": 184, "iscrowd": 0, "bbox": [482, 0, 158, 350], "area": 31394}, {"id": 6711915, "category_id": 191, "iscrowd": 0, "bbox": [0, 405, 382, 75], "area": 12781}, {"id": 5727095, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 453], "area": 179632}], "file_name": "000000067616.png", "image_id": 67616}, {"segments_info": [{"id": 8289136, "category_id": 85, "iscrowd": 0, "bbox": [182, 61, 297, 287], "area": 64758}, {"id": 7173247, "category_id": 128, "iscrowd": 0, "bbox": [127, 0, 513, 480], "area": 97542}, {"id": 9934744, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 476, 398], "area": 96111}, {"id": 2763562, "category_id": 181, "iscrowd": 0, "bbox": [210, 413, 124, 67], "area": 6626}, {"id": 8817027, "category_id": 184, "iscrowd": 0, "bbox": [54, 428, 40, 26], "area": 653}, {"id": 15197412, "category_id": 187, "iscrowd": 0, "bbox": [0, 378, 94, 102], "area": 6609}, {"id": 5989225, "category_id": 199, "iscrowd": 0, "bbox": [71, 360, 78, 120], "area": 5714}], "file_name": "000000067896.png", "image_id": 67896}, {"segments_info": [{"id": 5597020, "category_id": 18, "iscrowd": 0, "bbox": [29, 492, 73, 135], "area": 5487}, {"id": 10989978, "category_id": 44, "iscrowd": 0, "bbox": [274, 277, 30, 71], "area": 1319}, {"id": 12169882, "category_id": 70, "iscrowd": 0, "bbox": [177, 346, 183, 285], "area": 31530}, {"id": 11250589, "category_id": 81, "iscrowd": 0, "bbox": [140, 296, 171, 204], "area": 15349}, {"id": 3301027, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 301, 495], "area": 108341}, {"id": 3227448, "category_id": 118, "iscrowd": 0, "bbox": [0, 442, 360, 198], "area": 7709}, {"id": 6323314, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 360, 539], "area": 40952}, {"id": 12231551, "category_id": 200, "iscrowd": 0, "bbox": [0, 478, 191, 162], "area": 16702}], "file_name": "000000068078.png", "image_id": 68078}, {"segments_info": [{"id": 9601146, "category_id": 1, "iscrowd": 0, "bbox": [350, 30, 113, 280], "area": 16754}, {"id": 10588554, "category_id": 1, "iscrowd": 0, "bbox": [380, 60, 190, 393], "area": 32714}, {"id": 2698285, "category_id": 3, "iscrowd": 0, "bbox": [332, 76, 308, 110], "area": 10128}, {"id": 5002599, "category_id": 4, "iscrowd": 0, "bbox": [0, 116, 604, 363], "area": 93023}, {"id": 5398109, "category_id": 4, "iscrowd": 0, "bbox": [232, 78, 126, 205], "area": 12187}, {"id": 1713460, "category_id": 171, "iscrowd": 0, "bbox": [67, 48, 97, 66], "area": 4014}, {"id": 9811656, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 87, 184], "area": 12755}, {"id": 2771018, "category_id": 184, "iscrowd": 0, "bbox": [83, 0, 545, 169], "area": 26549}, {"id": 2245201, "category_id": 186, "iscrowd": 0, "bbox": [56, 0, 584, 60], "area": 17608}, {"id": 6912380, "category_id": 191, "iscrowd": 0, "bbox": [128, 104, 512, 102], "area": 2994}, {"id": 4422005, "category_id": 193, "iscrowd": 0, "bbox": [0, 97, 640, 383], "area": 61998}, {"id": 2506328, "category_id": 194, "iscrowd": 0, "bbox": [159, 128, 24, 12], "area": 204}, {"id": 4681081, "category_id": 197, "iscrowd": 0, "bbox": [247, 0, 393, 122], "area": 3128}, {"id": 10402757, "category_id": 199, "iscrowd": 0, "bbox": [0, 179, 74, 34], "area": 1271}], "file_name": "000000068093.png", "image_id": 68093}, {"segments_info": [{"id": 9143433, "category_id": 65, "iscrowd": 0, "bbox": [23, 46, 528, 320], "area": 118916}, {"id": 4740436, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 640, 314], "area": 45661}, {"id": 4940408, "category_id": 190, "iscrowd": 0, "bbox": [0, 222, 640, 144], "area": 26122}, {"id": 10859967, "category_id": 199, "iscrowd": 0, "bbox": [12, 0, 458, 150], "area": 31161}, {"id": 4481663, "category_id": 200, "iscrowd": 0, "bbox": [475, 296, 165, 70], "area": 8091}], "file_name": "000000068286.png", "image_id": 68286}, {"segments_info": [{"id": 6317164, "category_id": 1, "iscrowd": 0, "bbox": [310, 150, 88, 140], "area": 5690}, {"id": 5986906, "category_id": 1, "iscrowd": 0, "bbox": [9, 6, 61, 113], "area": 4257}, {"id": 7761802, "category_id": 1, "iscrowd": 0, "bbox": [195, 241, 98, 93], "area": 4154}, {"id": 3488062, "category_id": 1, "iscrowd": 0, "bbox": [127, 195, 78, 134], "area": 4159}, {"id": 8170657, "category_id": 39, "iscrowd": 0, "bbox": [336, 109, 10, 44], "area": 323}, {"id": 3822954, "category_id": 40, "iscrowd": 0, "bbox": [279, 272, 14, 21], "area": 212}, {"id": 3227187, "category_id": 40, "iscrowd": 0, "bbox": [333, 153, 11, 12], "area": 87}, {"id": 4481166, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 471], "area": 182228}, {"id": 3700576, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 105196}], "file_name": "000000068387.png", "image_id": 68387}, {"segments_info": [{"id": 3163202, "category_id": 1, "iscrowd": 0, "bbox": [210, 2, 72, 78], "area": 2918}, {"id": 7308420, "category_id": 1, "iscrowd": 0, "bbox": [110, 17, 155, 236], "area": 17949}, {"id": 4610650, "category_id": 1, "iscrowd": 0, "bbox": [254, 1, 156, 93], "area": 7436}, {"id": 6255733, "category_id": 1, "iscrowd": 0, "bbox": [201, 16, 168, 232], "area": 21512}, {"id": 6650747, "category_id": 1, "iscrowd": 0, "bbox": [503, 1, 137, 96], "area": 7164}, {"id": 4018512, "category_id": 1, "iscrowd": 0, "bbox": [409, 0, 110, 152], "area": 7266}, {"id": 8953504, "category_id": 1, "iscrowd": 0, "bbox": [347, 7, 139, 253], "area": 21654}, {"id": 6584955, "category_id": 1, "iscrowd": 0, "bbox": [475, 19, 163, 241], "area": 22409}, {"id": 5794925, "category_id": 1, "iscrowd": 0, "bbox": [4, 6, 147, 253], "area": 20555}, {"id": 7439750, "category_id": 1, "iscrowd": 0, "bbox": [89, 0, 95, 83], "area": 4940}, {"id": 9480107, "category_id": 32, "iscrowd": 0, "bbox": [416, 80, 10, 24], "area": 158}, {"id": 5861232, "category_id": 32, "iscrowd": 0, "bbox": [454, 0, 12, 16], "area": 132}, {"id": 6650748, "category_id": 32, "iscrowd": 0, "bbox": [561, 90, 10, 21], "area": 109}, {"id": 9744308, "category_id": 32, "iscrowd": 0, "bbox": [80, 78, 15, 28], "area": 260}, {"id": 4939616, "category_id": 32, "iscrowd": 0, "bbox": [291, 90, 16, 32], "area": 255}, {"id": 7110785, "category_id": 32, "iscrowd": 0, "bbox": [193, 82, 15, 37], "area": 375}, {"id": 7440007, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 107, 168], "area": 7671}, {"id": 5334116, "category_id": 191, "iscrowd": 0, "bbox": [0, 162, 640, 101], "area": 19647}], "file_name": "000000068409.png", "image_id": 68409}, {"segments_info": [{"id": 4673383, "category_id": 1, "iscrowd": 0, "bbox": [239, 1, 252, 221], "area": 21758}, {"id": 8091257, "category_id": 41, "iscrowd": 0, "bbox": [283, 194, 114, 111], "area": 3493}, {"id": 2237998, "category_id": 112, "iscrowd": 0, "bbox": [464, 108, 110, 163], "area": 14927}, {"id": 9473432, "category_id": 149, "iscrowd": 0, "bbox": [41, 186, 16, 38], "area": 476}, {"id": 7305616, "category_id": 171, "iscrowd": 0, "bbox": [50, 0, 590, 275], "area": 72110}, {"id": 7042184, "category_id": 175, "iscrowd": 0, "bbox": [582, 86, 58, 190], "area": 9202}, {"id": 6581626, "category_id": 184, "iscrowd": 0, "bbox": [40, 17, 23, 58], "area": 618}, {"id": 15856117, "category_id": 187, "iscrowd": 0, "bbox": [45, 0, 17, 25], "area": 357}, {"id": 6645363, "category_id": 191, "iscrowd": 0, "bbox": [0, 203, 640, 224], "area": 110096}, {"id": 7172481, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 460, 291], "area": 38945}], "file_name": "000000068628.png", "image_id": 68628}, {"segments_info": [{"id": 1775128, "category_id": 74, "iscrowd": 0, "bbox": [1, 57, 156, 142], "area": 16982}, {"id": 8223870, "category_id": 76, "iscrowd": 0, "bbox": [1, 27, 573, 443], "area": 108527}, {"id": 5331551, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 148068}, {"id": 328203, "category_id": 190, "iscrowd": 0, "bbox": [432, 217, 208, 263], "area": 26681}], "file_name": "000000068765.png", "image_id": 68765}, {"segments_info": [{"id": 1121323, "category_id": 51, "iscrowd": 0, "bbox": [0, 247, 25, 19], "area": 366}, {"id": 3710149, "category_id": 51, "iscrowd": 0, "bbox": [278, 219, 32, 29], "area": 815}, {"id": 3053247, "category_id": 51, "iscrowd": 0, "bbox": [314, 228, 21, 19], "area": 319}, {"id": 926275, "category_id": 62, "iscrowd": 0, "bbox": [406, 275, 97, 162], "area": 9488}, {"id": 2708579, "category_id": 72, "iscrowd": 0, "bbox": [97, 202, 61, 40], "area": 2299}, {"id": 2501420, "category_id": 78, "iscrowd": 0, "bbox": [424, 206, 78, 39], "area": 2974}, {"id": 6256768, "category_id": 81, "iscrowd": 0, "bbox": [520, 243, 120, 10], "area": 374}, {"id": 3765921, "category_id": 82, "iscrowd": 0, "bbox": [0, 105, 91, 331], "area": 19031}, {"id": 1652557, "category_id": 85, "iscrowd": 0, "bbox": [446, 34, 35, 39], "area": 1074}, {"id": 8433366, "category_id": 93, "iscrowd": 0, "bbox": [263, 196, 50, 44], "area": 1007}, {"id": 4542814, "category_id": 109, "iscrowd": 0, "bbox": [320, 14, 320, 151], "area": 12719}, {"id": 14015726, "category_id": 130, "iscrowd": 0, "bbox": [586, 0, 25, 15], "area": 266}, {"id": 1518673, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 308], "area": 92887}, {"id": 6843494, "category_id": 181, "iscrowd": 0, "bbox": [578, 147, 62, 86], "area": 3937}, {"id": 3105157, "category_id": 186, "iscrowd": 0, "bbox": [88, 0, 403, 117], "area": 25947}, {"id": 1384762, "category_id": 188, "iscrowd": 0, "bbox": [0, 231, 640, 249], "area": 59340}, {"id": 2110050, "category_id": 200, "iscrowd": 0, "bbox": [46, 304, 551, 176], "area": 61704}], "file_name": "000000068833.png", "image_id": 68833}, {"segments_info": [{"id": 5658198, "category_id": 24, "iscrowd": 0, "bbox": [280, 49, 214, 208], "area": 26502}, {"id": 5921370, "category_id": 24, "iscrowd": 0, "bbox": [7, 59, 133, 206], "area": 18529}, {"id": 6250335, "category_id": 24, "iscrowd": 0, "bbox": [144, 52, 125, 222], "area": 17941}, {"id": 6579300, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 93], "area": 30630}, {"id": 10592673, "category_id": 185, "iscrowd": 0, "bbox": [0, 83, 32, 45], "area": 1026}, {"id": 11447982, "category_id": 193, "iscrowd": 0, "bbox": [0, 191, 500, 122], "area": 40429}, {"id": 9145227, "category_id": 194, "iscrowd": 0, "bbox": [0, 50, 500, 198], "area": 18702}, {"id": 9868950, "category_id": 197, "iscrowd": 0, "bbox": [466, 0, 34, 54], "area": 864}], "file_name": "000000068933.png", "image_id": 68933}, {"segments_info": [{"id": 6314318, "category_id": 24, "iscrowd": 0, "bbox": [297, 115, 137, 125], "area": 7689}, {"id": 6051660, "category_id": 24, "iscrowd": 0, "bbox": [75, 146, 182, 127], "area": 9380}, {"id": 7038041, "category_id": 24, "iscrowd": 0, "bbox": [207, 116, 103, 132], "area": 6114}, {"id": 5064509, "category_id": 24, "iscrowd": 0, "bbox": [57, 132, 131, 124], "area": 2215}, {"id": 5264449, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 57], "area": 21571}, {"id": 4605503, "category_id": 194, "iscrowd": 0, "bbox": [0, 200, 500, 134], "area": 26468}, {"id": 5461844, "category_id": 198, "iscrowd": 0, "bbox": [0, 36, 500, 298], "area": 87561}], "file_name": "000000069106.png", "image_id": 69106}, {"segments_info": [{"id": 3946801, "category_id": 8, "iscrowd": 0, "bbox": [33, 171, 74, 186], "area": 10922}, {"id": 1382177, "category_id": 10, "iscrowd": 0, "bbox": [100, 47, 159, 497], "area": 63620}, {"id": 8489095, "category_id": 149, "iscrowd": 0, "bbox": [0, 315, 371, 325], "area": 70606}, {"id": 2700078, "category_id": 184, "iscrowd": 0, "bbox": [254, 99, 117, 233], "area": 13542}, {"id": 6712690, "category_id": 191, "iscrowd": 0, "bbox": [252, 361, 119, 47], "area": 1956}, {"id": 3486763, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 371, 317], "area": 62905}, {"id": 4476494, "category_id": 199, "iscrowd": 0, "bbox": [252, 303, 119, 83], "area": 6621}], "file_name": "000000069138.png", "image_id": 69138}, {"segments_info": [{"id": 7897762, "category_id": 1, "iscrowd": 0, "bbox": [555, 80, 30, 15], "area": 232}, {"id": 4344932, "category_id": 1, "iscrowd": 0, "bbox": [432, 69, 69, 83], "area": 2501}, {"id": 8026223, "category_id": 1, "iscrowd": 0, "bbox": [498, 49, 13, 31], "area": 249}, {"id": 3290182, "category_id": 1, "iscrowd": 0, "bbox": [249, 44, 54, 80], "area": 2262}, {"id": 2700891, "category_id": 1, "iscrowd": 0, "bbox": [619, 48, 21, 86], "area": 1201}, {"id": 4535866, "category_id": 1, "iscrowd": 0, "bbox": [276, 10, 245, 400], "area": 68674}, {"id": 2696486, "category_id": 1, "iscrowd": 0, "bbox": [67, 18, 215, 386], "area": 59323}, {"id": 7896447, "category_id": 4, "iscrowd": 0, "bbox": [471, 101, 121, 173], "area": 10916}, {"id": 13423315, "category_id": 128, "iscrowd": 0, "bbox": [478, 0, 162, 55], "area": 7650}, {"id": 13291729, "category_id": 149, "iscrowd": 0, "bbox": [478, 41, 162, 51], "area": 4071}, {"id": 8560561, "category_id": 175, "iscrowd": 0, "bbox": [309, 63, 181, 94], "area": 3042}, {"id": 4945460, "category_id": 185, "iscrowd": 0, "bbox": [0, 392, 640, 35], "area": 11886}, {"id": 13425378, "category_id": 194, "iscrowd": 0, "bbox": [0, 64, 640, 360], "area": 56636}, {"id": 12700626, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 495, 174], "area": 41413}], "file_name": "000000069213.png", "image_id": 69213}, {"segments_info": [{"id": 6385775, "category_id": 1, "iscrowd": 0, "bbox": [49, 100, 186, 275], "area": 34795}, {"id": 3165269, "category_id": 1, "iscrowd": 0, "bbox": [199, 34, 131, 236], "area": 17149}, {"id": 8285536, "category_id": 44, "iscrowd": 0, "bbox": [195, 286, 37, 85], "area": 2283}, {"id": 5535890, "category_id": 60, "iscrowd": 0, "bbox": [226, 304, 12, 21], "area": 175}, {"id": 3622481, "category_id": 60, "iscrowd": 0, "bbox": [237, 288, 34, 24], "area": 626}, {"id": 3885112, "category_id": 62, "iscrowd": 0, "bbox": [6, 36, 31, 23], "area": 523}, {"id": 2765360, "category_id": 62, "iscrowd": 0, "bbox": [176, 263, 36, 29], "area": 403}, {"id": 4149064, "category_id": 62, "iscrowd": 0, "bbox": [9, 106, 74, 94], "area": 5451}, {"id": 4741972, "category_id": 62, "iscrowd": 0, "bbox": [0, 190, 74, 185], "area": 9241}, {"id": 1975844, "category_id": 62, "iscrowd": 0, "bbox": [140, 50, 40, 31], "area": 883}, {"id": 5003339, "category_id": 62, "iscrowd": 0, "bbox": [0, 83, 10, 26], "area": 171}, {"id": 10004624, "category_id": 67, "iscrowd": 0, "bbox": [265, 209, 235, 166], "area": 17831}, {"id": 8031609, "category_id": 67, "iscrowd": 0, "bbox": [1, 103, 73, 41], "area": 1162}, {"id": 10399406, "category_id": 100, "iscrowd": 0, "bbox": [171, 222, 209, 131], "area": 9197}, {"id": 8624272, "category_id": 176, "iscrowd": 0, "bbox": [41, 80, 55, 112], "area": 1571}, {"id": 1712672, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 500, 256], "area": 67143}, {"id": 8819065, "category_id": 189, "iscrowd": 0, "bbox": [168, 253, 332, 122], "area": 1193}, {"id": 11319467, "category_id": 195, "iscrowd": 0, "bbox": [163, 235, 337, 140], "area": 11837}, {"id": 4739930, "category_id": 196, "iscrowd": 0, "bbox": [224, 306, 32, 20], "area": 90}, {"id": 7441525, "category_id": 199, "iscrowd": 0, "bbox": [27, 0, 54, 85], "area": 3398}], "file_name": "000000069224.png", "image_id": 69224}, {"segments_info": [{"id": 5723235, "category_id": 1, "iscrowd": 0, "bbox": [437, 152, 19, 41], "area": 563}, {"id": 6512995, "category_id": 1, "iscrowd": 0, "bbox": [567, 114, 62, 265], "area": 9531}, {"id": 5132113, "category_id": 1, "iscrowd": 0, "bbox": [627, 156, 13, 112], "area": 928}, {"id": 11579836, "category_id": 1, "iscrowd": 0, "bbox": [557, 156, 20, 44], "area": 274}, {"id": 8025465, "category_id": 1, "iscrowd": 0, "bbox": [75, 111, 104, 378], "area": 24033}, {"id": 2107990, "category_id": 1, "iscrowd": 0, "bbox": [417, 131, 110, 328], "area": 25355}, {"id": 9538442, "category_id": 3, "iscrowd": 0, "bbox": [613, 157, 25, 42], "area": 463}, {"id": 4364725, "category_id": 52, "iscrowd": 0, "bbox": [320, 317, 19, 23], "area": 153}, {"id": 4560047, "category_id": 52, "iscrowd": 0, "bbox": [340, 319, 21, 30], "area": 185}, {"id": 4427687, "category_id": 52, "iscrowd": 0, "bbox": [286, 335, 40, 44], "area": 943}, {"id": 4166574, "category_id": 52, "iscrowd": 0, "bbox": [311, 341, 31, 34], "area": 626}, {"id": 5215404, "category_id": 52, "iscrowd": 0, "bbox": [326, 340, 35, 33], "area": 553}, {"id": 3838382, "category_id": 52, "iscrowd": 0, "bbox": [338, 334, 28, 25], "area": 196}, {"id": 3899290, "category_id": 52, "iscrowd": 0, "bbox": [279, 314, 68, 33], "area": 1264}, {"id": 4542615, "category_id": 53, "iscrowd": 0, "bbox": [76, 169, 16, 16], "area": 97}, {"id": 3752863, "category_id": 53, "iscrowd": 0, "bbox": [276, 298, 14, 15], "area": 130}, {"id": 4281763, "category_id": 53, "iscrowd": 0, "bbox": [221, 254, 103, 66], "area": 3324}, {"id": 4675476, "category_id": 53, "iscrowd": 0, "bbox": [352, 327, 43, 25], "area": 424}, {"id": 5009086, "category_id": 53, "iscrowd": 0, "bbox": [261, 284, 11, 9], "area": 71}, {"id": 4555193, "category_id": 53, "iscrowd": 0, "bbox": [197, 253, 11, 12], "area": 98}, {"id": 5267901, "category_id": 53, "iscrowd": 0, "bbox": [58, 204, 8, 8], "area": 40}, {"id": 4875950, "category_id": 53, "iscrowd": 0, "bbox": [142, 200, 54, 46], "area": 1460}, {"id": 12239551, "category_id": 184, "iscrowd": 0, "bbox": [574, 57, 66, 86], "area": 3395}, {"id": 6650239, "category_id": 185, "iscrowd": 0, "bbox": [144, 141, 274, 128], "area": 21630}, {"id": 12304832, "category_id": 187, "iscrowd": 0, "bbox": [177, 0, 463, 95], "area": 11077}, {"id": 5530993, "category_id": 191, "iscrowd": 0, "bbox": [0, 138, 640, 367], "area": 77495}, {"id": 14737889, "category_id": 197, "iscrowd": 0, "bbox": [592, 52, 48, 106], "area": 1472}], "file_name": "000000069356.png", "image_id": 69356}, {"segments_info": [{"id": 6120059, "category_id": 64, "iscrowd": 0, "bbox": [169, 102, 251, 303], "area": 27076}, {"id": 10134377, "category_id": 86, "iscrowd": 0, "bbox": [165, 208, 174, 196], "area": 19834}, {"id": 1974309, "category_id": 109, "iscrowd": 0, "bbox": [447, 234, 147, 61], "area": 5022}, {"id": 6390933, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 640, 380], "area": 132168}, {"id": 15001575, "category_id": 190, "iscrowd": 0, "bbox": [0, 326, 640, 154], "area": 81845}, {"id": 3484718, "category_id": 195, "iscrowd": 0, "bbox": [401, 179, 57, 77], "area": 1837}], "file_name": "000000069795.png", "image_id": 69795}, {"segments_info": [{"id": 2697521, "category_id": 46, "iscrowd": 0, "bbox": [286, 0, 112, 211], "area": 18654}, {"id": 12178649, "category_id": 51, "iscrowd": 0, "bbox": [37, 203, 292, 226], "area": 44841}, {"id": 5603451, "category_id": 51, "iscrowd": 0, "bbox": [0, 38, 217, 173], "area": 29503}, {"id": 4421290, "category_id": 54, "iscrowd": 0, "bbox": [370, 180, 221, 197], "area": 33593}, {"id": 6842733, "category_id": 67, "iscrowd": 0, "bbox": [2, 3, 637, 471], "area": 132921}, {"id": 1577489, "category_id": 189, "iscrowd": 0, "bbox": [0, 145, 109, 335], "area": 11437}], "file_name": "000000070048.png", "image_id": 70048}, {"segments_info": [{"id": 6711913, "category_id": 24, "iscrowd": 0, "bbox": [27, 98, 133, 414], "area": 32086}, {"id": 8094595, "category_id": 24, "iscrowd": 0, "bbox": [16, 23, 332, 263], "area": 39669}, {"id": 6712686, "category_id": 24, "iscrowd": 0, "bbox": [125, 187, 284, 413], "area": 65753}], "file_name": "000000070158.png", "image_id": 70158}, {"segments_info": [{"id": 10061179, "category_id": 1, "iscrowd": 0, "bbox": [453, 312, 25, 70], "area": 851}, {"id": 11117976, "category_id": 15, "iscrowd": 0, "bbox": [288, 366, 60, 67], "area": 1993}, {"id": 7959399, "category_id": 15, "iscrowd": 0, "bbox": [7, 204, 474, 422], "area": 39557}, {"id": 4274487, "category_id": 88, "iscrowd": 0, "bbox": [5, 263, 369, 369], "area": 91893}, {"id": 7443090, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 481, 366], "area": 136066}, {"id": 14144725, "category_id": 191, "iscrowd": 0, "bbox": [287, 353, 194, 209], "area": 19442}, {"id": 15133927, "category_id": 197, "iscrowd": 0, "bbox": [322, 303, 110, 61], "area": 5071}, {"id": 15724522, "category_id": 199, "iscrowd": 0, "bbox": [437, 323, 28, 38], "area": 462}], "file_name": "000000070229.png", "image_id": 70229}, {"segments_info": [{"id": 8615026, "category_id": 1, "iscrowd": 0, "bbox": [250, 152, 16, 55], "area": 625}, {"id": 6773081, "category_id": 1, "iscrowd": 0, "bbox": [210, 174, 34, 40], "area": 558}, {"id": 4539733, "category_id": 1, "iscrowd": 0, "bbox": [142, 133, 26, 112], "area": 1700}, {"id": 7821913, "category_id": 1, "iscrowd": 0, "bbox": [116, 193, 84, 118], "area": 3253}, {"id": 9076357, "category_id": 1, "iscrowd": 0, "bbox": [176, 175, 48, 75], "area": 1146}, {"id": 8549532, "category_id": 1, "iscrowd": 0, "bbox": [194, 179, 34, 42], "area": 598}, {"id": 8945029, "category_id": 1, "iscrowd": 0, "bbox": [61, 171, 53, 188], "area": 5138}, {"id": 6255699, "category_id": 7, "iscrowd": 0, "bbox": [273, 83, 221, 220], "area": 37846}, {"id": 7037278, "category_id": 15, "iscrowd": 0, "bbox": [168, 203, 41, 44], "area": 810}, {"id": 7035994, "category_id": 15, "iscrowd": 0, "bbox": [210, 200, 15, 9], "area": 46}, {"id": 5917256, "category_id": 15, "iscrowd": 0, "bbox": [104, 237, 69, 86], "area": 2643}, {"id": 3814712, "category_id": 27, "iscrowd": 0, "bbox": [241, 166, 14, 21], "area": 118}, {"id": 3618367, "category_id": 27, "iscrowd": 0, "bbox": [217, 221, 14, 22], "area": 198}, {"id": 2695198, "category_id": 31, "iscrowd": 0, "bbox": [180, 214, 16, 12], "area": 163}, {"id": 3879215, "category_id": 31, "iscrowd": 0, "bbox": [43, 236, 21, 46], "area": 521}, {"id": 4734934, "category_id": 31, "iscrowd": 0, "bbox": [71, 295, 63, 73], "area": 3324}, {"id": 7568006, "category_id": 125, "iscrowd": 0, "bbox": [367, 203, 273, 181], "area": 18751}, {"id": 9472651, "category_id": 144, "iscrowd": 0, "bbox": [31, 174, 367, 210], "area": 32749}, {"id": 4277838, "category_id": 147, "iscrowd": 0, "bbox": [303, 204, 337, 180], "area": 7558}, {"id": 5524296, "category_id": 177, "iscrowd": 0, "bbox": [0, 126, 71, 258], "area": 15207}, {"id": 5466457, "category_id": 184, "iscrowd": 0, "bbox": [11, 80, 457, 96], "area": 4419}, {"id": 9797748, "category_id": 185, "iscrowd": 0, "bbox": [66, 136, 156, 104], "area": 6303}, {"id": 14989458, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 117], "area": 48259}, {"id": 5590350, "category_id": 191, "iscrowd": 0, "bbox": [160, 291, 13, 31], "area": 142}, {"id": 7378089, "category_id": 193, "iscrowd": 0, "bbox": [491, 218, 149, 166], "area": 8961}, {"id": 9931910, "category_id": 197, "iscrowd": 0, "bbox": [0, 32, 640, 195], "area": 35743}], "file_name": "000000070254.png", "image_id": 70254}, {"segments_info": [{"id": 4277125, "category_id": 1, "iscrowd": 0, "bbox": [223, 130, 409, 345], "area": 66573}, {"id": 9013665, "category_id": 1, "iscrowd": 0, "bbox": [1, 0, 566, 474], "area": 111461}, {"id": 1908262, "category_id": 1, "iscrowd": 0, "bbox": [596, 204, 43, 149], "area": 4241}, {"id": 3421788, "category_id": 46, "iscrowd": 0, "bbox": [477, 310, 89, 170], "area": 4812}, {"id": 3749178, "category_id": 46, "iscrowd": 0, "bbox": [538, 286, 99, 194], "area": 4310}, {"id": 1910827, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 313], "area": 51073}], "file_name": "000000070739.png", "image_id": 70739}, {"segments_info": [{"id": 6513507, "category_id": 2, "iscrowd": 0, "bbox": [264, 153, 201, 28], "area": 3614}, {"id": 7434609, "category_id": 2, "iscrowd": 0, "bbox": [262, 174, 245, 50], "area": 5825}, {"id": 4605510, "category_id": 2, "iscrowd": 0, "bbox": [281, 206, 222, 71], "area": 5295}, {"id": 6447714, "category_id": 4, "iscrowd": 0, "bbox": [80, 155, 345, 229], "area": 42999}, {"id": 8553090, "category_id": 16, "iscrowd": 0, "bbox": [591, 55, 6, 9], "area": 42}, {"id": 9671571, "category_id": 16, "iscrowd": 0, "bbox": [269, 56, 10, 9], "area": 75}, {"id": 12895428, "category_id": 16, "iscrowd": 0, "bbox": [442, 73, 6, 5], "area": 26}, {"id": 11711154, "category_id": 16, "iscrowd": 0, "bbox": [438, 63, 19, 11], "area": 72}, {"id": 8092539, "category_id": 16, "iscrowd": 0, "bbox": [183, 41, 5, 7], "area": 27}, {"id": 6184542, "category_id": 16, "iscrowd": 0, "bbox": [194, 45, 8, 10], "area": 52}, {"id": 6842472, "category_id": 16, "iscrowd": 0, "bbox": [176, 47, 19, 17], "area": 118}, {"id": 11842740, "category_id": 16, "iscrowd": 0, "bbox": [305, 53, 9, 12], "area": 85}, {"id": 3750201, "category_id": 133, "iscrowd": 0, "bbox": [158, 133, 37, 31], "area": 670}, {"id": 3947580, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 311], "area": 70521}, {"id": 1776411, "category_id": 186, "iscrowd": 0, "bbox": [176, 0, 324, 159], "area": 28435}, {"id": 7105644, "category_id": 191, "iscrowd": 0, "bbox": [0, 349, 640, 76], "area": 31052}, {"id": 7697781, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 387], "area": 47244}], "file_name": "000000070774.png", "image_id": 70774}, {"segments_info": [{"id": 2501434, "category_id": 17, "iscrowd": 0, "bbox": [314, 59, 151, 71], "area": 7306}, {"id": 3359067, "category_id": 18, "iscrowd": 0, "bbox": [67, 54, 160, 163], "area": 16220}, {"id": 4350349, "category_id": 18, "iscrowd": 0, "bbox": [187, 148, 342, 268], "area": 49545}, {"id": 10134704, "category_id": 65, "iscrowd": 0, "bbox": [1, 18, 639, 399], "area": 144140}, {"id": 9815269, "category_id": 84, "iscrowd": 0, "bbox": [42, 225, 77, 83], "area": 4195}, {"id": 6191258, "category_id": 84, "iscrowd": 0, "bbox": [2, 283, 92, 62], "area": 3025}, {"id": 5069678, "category_id": 93, "iscrowd": 0, "bbox": [11, 386, 629, 40], "area": 5071}, {"id": 9805224, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 36646}], "file_name": "000000071226.png", "image_id": 71226}, {"segments_info": [{"id": 5001295, "category_id": 65, "iscrowd": 0, "bbox": [1, 168, 382, 465], "area": 151957}, {"id": 1580823, "category_id": 93, "iscrowd": 0, "bbox": [0, 291, 383, 349], "area": 4411}, {"id": 4211777, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 111, 307], "area": 30393}, {"id": 13358038, "category_id": 181, "iscrowd": 0, "bbox": [235, 154, 148, 33], "area": 2624}, {"id": 9934739, "category_id": 199, "iscrowd": 0, "bbox": [94, 0, 289, 307], "area": 54299}], "file_name": "000000071451.png", "image_id": 71451}, {"segments_info": [{"id": 5132119, "category_id": 1, "iscrowd": 0, "bbox": [593, 303, 18, 72], "area": 693}, {"id": 986895, "category_id": 1, "iscrowd": 0, "bbox": [529, 305, 19, 62], "area": 518}, {"id": 1185046, "category_id": 1, "iscrowd": 0, "bbox": [142, 303, 22, 58], "area": 721}, {"id": 7038056, "category_id": 1, "iscrowd": 0, "bbox": [289, 313, 3, 6], "area": 12}, {"id": 5851464, "category_id": 1, "iscrowd": 0, "bbox": [559, 298, 20, 67], "area": 853}, {"id": 3484715, "category_id": 1, "iscrowd": 0, "bbox": [605, 298, 25, 67], "area": 856}, {"id": 4941428, "category_id": 1, "iscrowd": 0, "bbox": [419, 298, 22, 71], "area": 836}, {"id": 7827835, "category_id": 1, "iscrowd": 0, "bbox": [592, 292, 16, 34], "area": 183}, {"id": 2433053, "category_id": 1, "iscrowd": 0, "bbox": [436, 305, 24, 59], "area": 723}, {"id": 2106658, "category_id": 1, "iscrowd": 0, "bbox": [41, 253, 29, 68], "area": 909}, {"id": 3224627, "category_id": 5, "iscrowd": 0, "bbox": [56, 169, 269, 188], "area": 22979}, {"id": 3421493, "category_id": 5, "iscrowd": 0, "bbox": [382, 218, 258, 127], "area": 15868}, {"id": 3025450, "category_id": 31, "iscrowd": 0, "bbox": [598, 318, 10, 20], "area": 78}, {"id": 2367268, "category_id": 31, "iscrowd": 0, "bbox": [434, 319, 7, 19], "area": 103}, {"id": 1118996, "category_id": 31, "iscrowd": 0, "bbox": [534, 322, 13, 18], "area": 143}, {"id": 12960705, "category_id": 130, "iscrowd": 0, "bbox": [0, 67, 640, 134], "area": 1928}, {"id": 9934230, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 307], "area": 145869}, {"id": 7698031, "category_id": 190, "iscrowd": 0, "bbox": [0, 300, 640, 127], "area": 50452}], "file_name": "000000071711.png", "image_id": 71711}, {"segments_info": [{"id": 3092271, "category_id": 23, "iscrowd": 0, "bbox": [130, 79, 192, 285], "area": 38932}, {"id": 3750201, "category_id": 23, "iscrowd": 0, "bbox": [275, 138, 163, 239], "area": 26329}, {"id": 460551, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 254], "area": 89510}, {"id": 5329489, "category_id": 194, "iscrowd": 0, "bbox": [0, 90, 640, 422], "area": 168952}], "file_name": "000000071756.png", "image_id": 71756}, {"segments_info": [{"id": 3421759, "category_id": 1, "iscrowd": 0, "bbox": [87, 44, 259, 274], "area": 23794}, {"id": 2523291, "category_id": 10, "iscrowd": 0, "bbox": [0, 183, 8, 26], "area": 189}, {"id": 4807020, "category_id": 41, "iscrowd": 0, "bbox": [188, 219, 172, 109], "area": 1977}, {"id": 2900807, "category_id": 184, "iscrowd": 0, "bbox": [78, 100, 350, 190], "area": 14338}, {"id": 15199983, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 335, 255], "area": 40628}, {"id": 5595499, "category_id": 191, "iscrowd": 0, "bbox": [0, 255, 428, 385], "area": 146847}, {"id": 5200995, "category_id": 197, "iscrowd": 0, "bbox": [324, 0, 104, 162], "area": 11211}, {"id": 2171942, "category_id": 199, "iscrowd": 0, "bbox": [286, 183, 142, 128], "area": 9886}], "file_name": "000000071877.png", "image_id": 71877}, {"segments_info": [{"id": 7172482, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 594, 480], "area": 162178}, {"id": 8224385, "category_id": 65, "iscrowd": 0, "bbox": [49, 1, 591, 473], "area": 124958}, {"id": 2962227, "category_id": 77, "iscrowd": 0, "bbox": [256, 122, 129, 169], "area": 12014}, {"id": 9934489, "category_id": 141, "iscrowd": 0, "bbox": [20, 0, 620, 480], "area": 3936}], "file_name": "000000071938.png", "image_id": 71938}, {"segments_info": [{"id": 2631469, "category_id": 1, "iscrowd": 0, "bbox": [95, 16, 259, 484], "area": 49515}, {"id": 2568244, "category_id": 41, "iscrowd": 0, "bbox": [95, 436, 268, 105], "area": 7833}, {"id": 5265489, "category_id": 151, "iscrowd": 0, "bbox": [35, 72, 392, 249], "area": 7996}, {"id": 3621467, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 137, 443], "area": 23147}, {"id": 14346739, "category_id": 187, "iscrowd": 0, "bbox": [46, 0, 381, 91], "area": 11476}, {"id": 5002074, "category_id": 189, "iscrowd": 0, "bbox": [0, 549, 393, 91], "area": 23902}, {"id": 7502980, "category_id": 191, "iscrowd": 0, "bbox": [0, 449, 427, 191], "area": 41977}, {"id": 4607050, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 427, 504], "area": 96577}, {"id": 6511434, "category_id": 199, "iscrowd": 0, "bbox": [48, 278, 118, 112], "area": 10241}], "file_name": "000000072281.png", "image_id": 72281}, {"segments_info": [{"id": 3753298, "category_id": 1, "iscrowd": 0, "bbox": [93, 429, 95, 51], "area": 3939}, {"id": 10528421, "category_id": 1, "iscrowd": 0, "bbox": [311, 252, 51, 87], "area": 2187}, {"id": 8751245, "category_id": 1, "iscrowd": 0, "bbox": [333, 373, 45, 94], "area": 2068}, {"id": 7106415, "category_id": 1, "iscrowd": 0, "bbox": [400, 275, 44, 59], "area": 1408}, {"id": 3093315, "category_id": 1, "iscrowd": 0, "bbox": [518, 251, 122, 224], "area": 21859}, {"id": 6643546, "category_id": 1, "iscrowd": 0, "bbox": [391, 192, 15, 14], "area": 135}, {"id": 4611177, "category_id": 1, "iscrowd": 0, "bbox": [426, 371, 55, 65], "area": 2177}, {"id": 3159606, "category_id": 1, "iscrowd": 0, "bbox": [439, 237, 44, 100], "area": 2068}, {"id": 10724261, "category_id": 1, "iscrowd": 0, "bbox": [336, 371, 93, 109], "area": 5872}, {"id": 3884110, "category_id": 1, "iscrowd": 0, "bbox": [184, 416, 138, 57], "area": 5360}, {"id": 2698545, "category_id": 1, "iscrowd": 0, "bbox": [284, 418, 57, 62], "area": 1807}, {"id": 8026482, "category_id": 1, "iscrowd": 0, "bbox": [53, 191, 25, 56], "area": 885}, {"id": 4080449, "category_id": 1, "iscrowd": 1, "bbox": [0, 0, 640, 480], "area": 174530}, {"id": 5007734, "category_id": 39, "iscrowd": 0, "bbox": [330, 305, 5, 26], "area": 66}, {"id": 3292224, "category_id": 40, "iscrowd": 0, "bbox": [402, 298, 11, 15], "area": 96}, {"id": 4354906, "category_id": 145, "iscrowd": 0, "bbox": [0, 212, 611, 220], "area": 64849}, {"id": 9153214, "category_id": 154, "iscrowd": 0, "bbox": [0, 160, 640, 196], "area": 14668}], "file_name": "000000072795.png", "image_id": 72795}, {"segments_info": [{"id": 1712684, "category_id": 18, "iscrowd": 0, "bbox": [229, 134, 268, 187], "area": 29757}, {"id": 12895428, "category_id": 65, "iscrowd": 0, "bbox": [0, 145, 640, 330], "area": 103556}, {"id": 526601, "category_id": 72, "iscrowd": 0, "bbox": [54, 30, 154, 143], "area": 17612}, {"id": 4341369, "category_id": 93, "iscrowd": 0, "bbox": [0, 173, 640, 307], "area": 50137}, {"id": 13618122, "category_id": 141, "iscrowd": 0, "bbox": [637, 305, 3, 129], "area": 309}, {"id": 5923686, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 217], "area": 88740}], "file_name": "000000072813.png", "image_id": 72813}, {"segments_info": [{"id": 1119765, "category_id": 1, "iscrowd": 0, "bbox": [292, 309, 35, 75], "area": 1116}, {"id": 2170655, "category_id": 1, "iscrowd": 0, "bbox": [325, 308, 31, 77], "area": 1045}, {"id": 5987158, "category_id": 2, "iscrowd": 0, "bbox": [134, 444, 156, 154], "area": 7552}, {"id": 1382165, "category_id": 31, "iscrowd": 0, "bbox": [332, 322, 22, 31], "area": 159}, {"id": 5920596, "category_id": 191, "iscrowd": 0, "bbox": [0, 353, 424, 287], "area": 67661}, {"id": 6447705, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 424, 595], "area": 179307}], "file_name": "000000072852.png", "image_id": 72852}, {"segments_info": [{"id": 9546178, "category_id": 88, "iscrowd": 0, "bbox": [0, 175, 274, 430], "area": 75323}, {"id": 8822462, "category_id": 88, "iscrowd": 0, "bbox": [109, 44, 503, 565], "area": 197625}, {"id": 5465242, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 612, 457], "area": 94274}], "file_name": "000000073118.png", "image_id": 73118}, {"segments_info": [{"id": 3947581, "category_id": 1, "iscrowd": 0, "bbox": [207, 13, 190, 621], "area": 76560}, {"id": 1250853, "category_id": 77, "iscrowd": 0, "bbox": [342, 110, 14, 16], "area": 144}, {"id": 2046519, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 159428}, {"id": 2978664, "category_id": 193, "iscrowd": 0, "bbox": [171, 289, 256, 351], "area": 36813}], "file_name": "000000073153.png", "image_id": 73153}, {"segments_info": [{"id": 6318959, "category_id": 44, "iscrowd": 0, "bbox": [165, 83, 16, 23], "area": 251}, {"id": 3292747, "category_id": 44, "iscrowd": 0, "bbox": [564, 247, 54, 96], "area": 1948}, {"id": 4347752, "category_id": 44, "iscrowd": 0, "bbox": [518, 268, 36, 67], "area": 1351}, {"id": 5004149, "category_id": 44, "iscrowd": 0, "bbox": [365, 210, 25, 55], "area": 937}, {"id": 5860733, "category_id": 44, "iscrowd": 0, "bbox": [387, 205, 20, 39], "area": 535}, {"id": 3554883, "category_id": 44, "iscrowd": 0, "bbox": [392, 317, 21, 36], "area": 503}, {"id": 5598066, "category_id": 44, "iscrowd": 0, "bbox": [408, 209, 21, 33], "area": 514}, {"id": 4543584, "category_id": 44, "iscrowd": 0, "bbox": [456, 214, 28, 73], "area": 1013}, {"id": 2107966, "category_id": 44, "iscrowd": 0, "bbox": [493, 235, 39, 88], "area": 1944}, {"id": 4544617, "category_id": 44, "iscrowd": 0, "bbox": [429, 182, 34, 84], "area": 1499}, {"id": 7567995, "category_id": 44, "iscrowd": 0, "bbox": [192, 82, 14, 22], "area": 254}, {"id": 1383713, "category_id": 44, "iscrowd": 0, "bbox": [495, 357, 33, 53], "area": 1228}, {"id": 5797512, "category_id": 51, "iscrowd": 0, "bbox": [258, 277, 49, 26], "area": 824}, {"id": 7372942, "category_id": 82, "iscrowd": 0, "bbox": [54, 0, 585, 473], "area": 212731}, {"id": 11717065, "category_id": 107, "iscrowd": 0, "bbox": [0, 90, 87, 96], "area": 3479}, {"id": 1716070, "category_id": 118, "iscrowd": 0, "bbox": [0, 394, 514, 86], "area": 20005}, {"id": 2379382, "category_id": 188, "iscrowd": 0, "bbox": [0, 174, 129, 301], "area": 30181}], "file_name": "000000073326.png", "image_id": 73326}, {"segments_info": [{"id": 2771540, "category_id": 1, "iscrowd": 0, "bbox": [6, 33, 460, 447], "area": 111722}, {"id": 4411992, "category_id": 1, "iscrowd": 0, "bbox": [306, 40, 334, 433], "area": 84518}, {"id": 9007749, "category_id": 77, "iscrowd": 0, "bbox": [274, 344, 85, 46], "area": 1029}, {"id": 3353644, "category_id": 77, "iscrowd": 0, "bbox": [473, 370, 71, 34], "area": 1610}, {"id": 5989232, "category_id": 177, "iscrowd": 0, "bbox": [0, 41, 640, 331], "area": 60782}, {"id": 14807528, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 306, 95], "area": 13401}], "file_name": "000000073533.png", "image_id": 73533}, {"segments_info": [{"id": 8085579, "category_id": 1, "iscrowd": 0, "bbox": [127, 196, 335, 444], "area": 48900}, {"id": 7039335, "category_id": 1, "iscrowd": 0, "bbox": [2, 148, 227, 469], "area": 74329}, {"id": 2169107, "category_id": 27, "iscrowd": 0, "bbox": [45, 245, 27, 108], "area": 1092}, {"id": 10582914, "category_id": 28, "iscrowd": 0, "bbox": [129, 154, 203, 74], "area": 7953}, {"id": 4609345, "category_id": 31, "iscrowd": 0, "bbox": [50, 246, 20, 109], "area": 322}, {"id": 4867129, "category_id": 31, "iscrowd": 0, "bbox": [254, 251, 210, 331], "area": 28010}, {"id": 5722953, "category_id": 181, "iscrowd": 0, "bbox": [270, 128, 77, 131], "area": 5565}, {"id": 12697790, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 464, 640], "area": 82954}], "file_name": "000000073702.png", "image_id": 73702}, {"segments_info": [{"id": 5662348, "category_id": 1, "iscrowd": 0, "bbox": [362, 69, 278, 353], "area": 62457}, {"id": 1908787, "category_id": 1, "iscrowd": 0, "bbox": [103, 93, 172, 329], "area": 41102}, {"id": 2240086, "category_id": 1, "iscrowd": 0, "bbox": [316, 390, 76, 38], "area": 2413}, {"id": 10392691, "category_id": 42, "iscrowd": 0, "bbox": [256, 44, 192, 351], "area": 54091}, {"id": 2830384, "category_id": 65, "iscrowd": 0, "bbox": [1, 66, 187, 361], "area": 39753}, {"id": 3552818, "category_id": 190, "iscrowd": 0, "bbox": [198, 392, 129, 36], "area": 1955}, {"id": 3949377, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 67169}], "file_name": "000000073946.png", "image_id": 73946}, {"segments_info": [{"id": 2829099, "category_id": 1, "iscrowd": 0, "bbox": [256, 196, 15, 35], "area": 237}, {"id": 3092271, "category_id": 1, "iscrowd": 0, "bbox": [28, 159, 74, 174], "area": 3121}, {"id": 5197647, "category_id": 1, "iscrowd": 0, "bbox": [287, 199, 30, 29], "area": 393}, {"id": 3355443, "category_id": 1, "iscrowd": 0, "bbox": [277, 200, 17, 18], "area": 175}, {"id": 3092262, "category_id": 1, "iscrowd": 0, "bbox": [128, 166, 69, 125], "area": 2460}, {"id": 5460819, "category_id": 2, "iscrowd": 0, "bbox": [445, 210, 110, 148], "area": 6085}, {"id": 5263440, "category_id": 2, "iscrowd": 0, "bbox": [425, 251, 37, 101], "area": 2507}, {"id": 4671303, "category_id": 3, "iscrowd": 0, "bbox": [584, 207, 56, 141], "area": 5631}, {"id": 9145227, "category_id": 3, "iscrowd": 0, "bbox": [585, 214, 27, 20], "area": 412}, {"id": 9342606, "category_id": 3, "iscrowd": 0, "bbox": [401, 214, 17, 17], "area": 246}, {"id": 6250335, "category_id": 3, "iscrowd": 0, "bbox": [563, 219, 30, 22], "area": 383}, {"id": 11908533, "category_id": 8, "iscrowd": 0, "bbox": [467, 197, 108, 78], "area": 4393}, {"id": 7895160, "category_id": 28, "iscrowd": 0, "bbox": [283, 133, 88, 42], "area": 2617}, {"id": 5987163, "category_id": 28, "iscrowd": 0, "bbox": [173, 33, 204, 184], "area": 15186}, {"id": 9145217, "category_id": 28, "iscrowd": 0, "bbox": [333, 166, 51, 51], "area": 987}, {"id": 3355452, "category_id": 28, "iscrowd": 0, "bbox": [41, 0, 125, 38], "area": 3043}, {"id": 10987431, "category_id": 28, "iscrowd": 0, "bbox": [344, 188, 40, 14], "area": 320}, {"id": 2434341, "category_id": 31, "iscrowd": 0, "bbox": [471, 223, 26, 50], "area": 715}, {"id": 4605510, "category_id": 62, "iscrowd": 0, "bbox": [236, 207, 16, 8], "area": 85}, {"id": 2829096, "category_id": 62, "iscrowd": 0, "bbox": [256, 219, 11, 25], "area": 146}, {"id": 2039583, "category_id": 62, "iscrowd": 0, "bbox": [41, 223, 73, 130], "area": 3675}, {"id": 1315860, "category_id": 62, "iscrowd": 0, "bbox": [132, 233, 46, 58], "area": 639}, {"id": 921102, "category_id": 62, "iscrowd": 0, "bbox": [289, 222, 17, 34], "area": 284}, {"id": 2039574, "category_id": 62, "iscrowd": 0, "bbox": [1, 241, 13, 18], "area": 168}, {"id": 4079166, "category_id": 62, "iscrowd": 0, "bbox": [202, 219, 36, 56], "area": 1156}, {"id": 4079175, "category_id": 67, "iscrowd": 0, "bbox": [170, 219, 39, 44], "area": 675}, {"id": 4013373, "category_id": 67, "iscrowd": 0, "bbox": [278, 216, 40, 8], "area": 106}, {"id": 5197651, "category_id": 149, "iscrowd": 0, "bbox": [545, 226, 95, 183], "area": 5262}, {"id": 15395562, "category_id": 181, "iscrowd": 0, "bbox": [76, 112, 28, 76], "area": 617}, {"id": 8289918, "category_id": 184, "iscrowd": 0, "bbox": [356, 32, 284, 239], "area": 21608}, {"id": 3289650, "category_id": 185, "iscrowd": 0, "bbox": [352, 216, 18, 20], "area": 179}, {"id": 16514043, "category_id": 187, "iscrowd": 0, "bbox": [236, 0, 399, 208], "area": 40434}, {"id": 6974058, "category_id": 191, "iscrowd": 0, "bbox": [0, 219, 612, 208], "area": 81581}, {"id": 3750201, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 374, 282], "area": 50494}, {"id": 6381921, "category_id": 199, "iscrowd": 0, "bbox": [128, 134, 191, 142], "area": 894}], "file_name": "000000074058.png", "image_id": 74058}, {"segments_info": [{"id": 5268353, "category_id": 1, "iscrowd": 0, "bbox": [146, 164, 88, 267], "area": 7830}, {"id": 5002855, "category_id": 1, "iscrowd": 0, "bbox": [125, 184, 26, 21], "area": 137}, {"id": 1908259, "category_id": 1, "iscrowd": 0, "bbox": [101, 192, 25, 19], "area": 153}, {"id": 1645343, "category_id": 1, "iscrowd": 0, "bbox": [151, 187, 18, 20], "area": 235}, {"id": 1315860, "category_id": 1, "iscrowd": 0, "bbox": [23, 160, 22, 33], "area": 470}, {"id": 2237998, "category_id": 1, "iscrowd": 0, "bbox": [41, 186, 15, 9], "area": 104}, {"id": 3095636, "category_id": 1, "iscrowd": 0, "bbox": [126, 192, 13, 12], "area": 92}, {"id": 2105376, "category_id": 1, "iscrowd": 0, "bbox": [67, 278, 40, 77], "area": 1307}, {"id": 2236960, "category_id": 1, "iscrowd": 0, "bbox": [110, 284, 24, 71], "area": 1109}, {"id": 3424078, "category_id": 1, "iscrowd": 0, "bbox": [1, 232, 29, 24], "area": 434}, {"id": 2106154, "category_id": 1, "iscrowd": 0, "bbox": [0, 230, 9, 23], "area": 139}, {"id": 3356480, "category_id": 1, "iscrowd": 0, "bbox": [57, 185, 21, 22], "area": 260}, {"id": 2632238, "category_id": 1, "iscrowd": 0, "bbox": [294, 295, 17, 43], "area": 442}, {"id": 3093563, "category_id": 1, "iscrowd": 1, "bbox": [5, 162, 139, 102], "area": 2486}, {"id": 4042155, "category_id": 37, "iscrowd": 0, "bbox": [229, 93, 10, 10], "area": 75}, {"id": 6713215, "category_id": 43, "iscrowd": 0, "bbox": [221, 88, 10, 75], "area": 373}, {"id": 3829580, "category_id": 145, "iscrowd": 0, "bbox": [0, 338, 332, 162], "area": 47876}, {"id": 2105378, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 332, 230], "area": 65269}, {"id": 3289137, "category_id": 199, "iscrowd": 0, "bbox": [0, 192, 332, 183], "area": 33353}], "file_name": "000000074092.png", "image_id": 74092}, {"segments_info": [{"id": 3027518, "category_id": 1, "iscrowd": 0, "bbox": [390, 348, 15, 18], "area": 138}, {"id": 4282984, "category_id": 1, "iscrowd": 0, "bbox": [402, 343, 14, 28], "area": 225}, {"id": 3353124, "category_id": 1, "iscrowd": 0, "bbox": [478, 384, 13, 39], "area": 397}, {"id": 3290947, "category_id": 1, "iscrowd": 0, "bbox": [419, 348, 11, 25], "area": 217}, {"id": 1315861, "category_id": 1, "iscrowd": 0, "bbox": [446, 385, 16, 37], "area": 346}, {"id": 10267330, "category_id": 1, "iscrowd": 0, "bbox": [1, 1, 56, 114], "area": 4136}, {"id": 5925220, "category_id": 42, "iscrowd": 0, "bbox": [48, 81, 93, 237], "area": 14412}, {"id": 7180698, "category_id": 42, "iscrowd": 0, "bbox": [258, 2, 152, 301], "area": 27982}, {"id": 5012887, "category_id": 42, "iscrowd": 0, "bbox": [431, 0, 209, 431], "area": 47824}, {"id": 3365503, "category_id": 130, "iscrowd": 0, "bbox": [379, 256, 118, 40], "area": 572}, {"id": 1518143, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 459, 437], "area": 35926}, {"id": 1846052, "category_id": 184, "iscrowd": 0, "bbox": [507, 52, 133, 214], "area": 13035}, {"id": 460808, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 262], "area": 40695}, {"id": 7831691, "category_id": 195, "iscrowd": 0, "bbox": [346, 302, 90, 123], "area": 8149}, {"id": 2171684, "category_id": 197, "iscrowd": 0, "bbox": [0, 50, 640, 392], "area": 31154}, {"id": 11251119, "category_id": 199, "iscrowd": 0, "bbox": [0, 377, 640, 103], "area": 29566}], "file_name": "000000074200.png", "image_id": 74200}, {"segments_info": [{"id": 8110256, "category_id": 44, "iscrowd": 0, "bbox": [417, 238, 10, 31], "area": 230}, {"id": 5204341, "category_id": 44, "iscrowd": 0, "bbox": [171, 197, 10, 27], "area": 220}, {"id": 6977144, "category_id": 44, "iscrowd": 0, "bbox": [163, 194, 8, 29], "area": 175}, {"id": 4673366, "category_id": 47, "iscrowd": 0, "bbox": [305, 192, 15, 30], "area": 405}, {"id": 6056299, "category_id": 51, "iscrowd": 0, "bbox": [118, 220, 25, 18], "area": 352}, {"id": 6520210, "category_id": 51, "iscrowd": 0, "bbox": [507, 226, 63, 24], "area": 652}, {"id": 4038335, "category_id": 52, "iscrowd": 0, "bbox": [515, 226, 15, 10], "area": 87}, {"id": 5201824, "category_id": 53, "iscrowd": 0, "bbox": [539, 236, 11, 10], "area": 74}, {"id": 5662120, "category_id": 53, "iscrowd": 0, "bbox": [529, 237, 12, 11], "area": 97}, {"id": 5071520, "category_id": 53, "iscrowd": 0, "bbox": [519, 234, 11, 9], "area": 82}, {"id": 2259421, "category_id": 55, "iscrowd": 0, "bbox": [529, 230, 12, 8], "area": 67}, {"id": 4034268, "category_id": 55, "iscrowd": 0, "bbox": [550, 235, 11, 7], "area": 57}, {"id": 7304824, "category_id": 62, "iscrowd": 0, "bbox": [496, 299, 88, 165], "area": 6050}, {"id": 4672589, "category_id": 62, "iscrowd": 0, "bbox": [319, 339, 90, 141], "area": 6516}, {"id": 4277832, "category_id": 62, "iscrowd": 0, "bbox": [220, 359, 100, 115], "area": 6749}, {"id": 6383208, "category_id": 62, "iscrowd": 0, "bbox": [415, 322, 86, 158], "area": 6970}, {"id": 5199965, "category_id": 67, "iscrowd": 0, "bbox": [0, 233, 618, 247], "area": 83022}, {"id": 5989481, "category_id": 79, "iscrowd": 0, "bbox": [201, 237, 79, 32], "area": 1854}, {"id": 7766924, "category_id": 81, "iscrowd": 0, "bbox": [244, 256, 169, 35], "area": 3287}, {"id": 5855319, "category_id": 82, "iscrowd": 0, "bbox": [2, 97, 112, 163], "area": 15205}, {"id": 10528945, "category_id": 85, "iscrowd": 0, "bbox": [546, 131, 45, 51], "area": 1574}, {"id": 11583681, "category_id": 112, "iscrowd": 0, "bbox": [411, 86, 112, 163], "area": 12904}, {"id": 8428460, "category_id": 130, "iscrowd": 0, "bbox": [46, 0, 350, 113], "area": 7185}, {"id": 5003103, "category_id": 188, "iscrowd": 0, "bbox": [107, 210, 258, 86], "area": 9514}, {"id": 11385020, "category_id": 190, "iscrowd": 0, "bbox": [283, 381, 357, 99], "area": 11490}, {"id": 5469349, "category_id": 196, "iscrowd": 0, "bbox": [0, 227, 128, 82], "area": 5884}, {"id": 10070963, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 385], "area": 99391}, {"id": 7041396, "category_id": 200, "iscrowd": 0, "bbox": [571, 379, 69, 55], "area": 2438}], "file_name": "000000074209.png", "image_id": 74209}, {"segments_info": [{"id": 6907240, "category_id": 1, "iscrowd": 0, "bbox": [340, 71, 261, 403], "area": 66917}, {"id": 5391935, "category_id": 1, "iscrowd": 0, "bbox": [515, 142, 116, 85], "area": 3859}, {"id": 2566443, "category_id": 1, "iscrowd": 0, "bbox": [352, 188, 22, 34], "area": 560}, {"id": 3488317, "category_id": 1, "iscrowd": 0, "bbox": [0, 56, 91, 418], "area": 13941}, {"id": 5136482, "category_id": 1, "iscrowd": 0, "bbox": [172, 78, 194, 351], "area": 47932}, {"id": 2831421, "category_id": 7, "iscrowd": 0, "bbox": [120, 86, 265, 207], "area": 21691}, {"id": 2767172, "category_id": 7, "iscrowd": 0, "bbox": [2, 113, 72, 161], "area": 6881}, {"id": 4208947, "category_id": 27, "iscrowd": 0, "bbox": [578, 181, 62, 178], "area": 7905}, {"id": 2970677, "category_id": 31, "iscrowd": 0, "bbox": [80, 330, 174, 150], "area": 5735}, {"id": 3881534, "category_id": 31, "iscrowd": 0, "bbox": [348, 393, 130, 87], "area": 7132}, {"id": 5658970, "category_id": 77, "iscrowd": 0, "bbox": [179, 338, 29, 13], "area": 180}, {"id": 3618365, "category_id": 77, "iscrowd": 0, "bbox": [68, 259, 35, 23], "area": 230}, {"id": 4610145, "category_id": 151, "iscrowd": 0, "bbox": [0, 35, 399, 84], "area": 13331}, {"id": 6711659, "category_id": 181, "iscrowd": 0, "bbox": [71, 140, 49, 45], "area": 1202}, {"id": 14868695, "category_id": 184, "iscrowd": 0, "bbox": [149, 0, 378, 74], "area": 9599}, {"id": 1710107, "category_id": 186, "iscrowd": 0, "bbox": [392, 0, 248, 35], "area": 5541}, {"id": 16382437, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 631, 58], "area": 10626}, {"id": 6640199, "category_id": 190, "iscrowd": 0, "bbox": [0, 274, 640, 206], "area": 24888}, {"id": 9213079, "category_id": 191, "iscrowd": 0, "bbox": [64, 192, 73, 99], "area": 4306}, {"id": 9801095, "category_id": 197, "iscrowd": 0, "bbox": [58, 0, 582, 234], "area": 37188}, {"id": 2962497, "category_id": 199, "iscrowd": 0, "bbox": [79, 124, 39, 36], "area": 564}], "file_name": "000000074256.png", "image_id": 74256}, {"segments_info": [{"id": 3880510, "category_id": 1, "iscrowd": 0, "bbox": [433, 158, 39, 92], "area": 1648}, {"id": 6841967, "category_id": 42, "iscrowd": 0, "bbox": [365, 187, 178, 44], "area": 4857}, {"id": 5259580, "category_id": 144, "iscrowd": 0, "bbox": [0, 146, 184, 52], "area": 6733}, {"id": 4475485, "category_id": 154, "iscrowd": 0, "bbox": [0, 236, 640, 128], "area": 76309}, {"id": 12100769, "category_id": 155, "iscrowd": 0, "bbox": [0, 151, 640, 106], "area": 42349}, {"id": 13942975, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 166], "area": 93376}, {"id": 7628393, "category_id": 197, "iscrowd": 0, "bbox": [16, 107, 162, 51], "area": 1946}, {"id": 11377047, "category_id": 199, "iscrowd": 0, "bbox": [0, 115, 61, 39], "area": 1989}], "file_name": "000000074457.png", "image_id": 74457}, {"segments_info": [{"id": 1907482, "category_id": 1, "iscrowd": 0, "bbox": [393, 456, 13, 23], "area": 144}, {"id": 4537662, "category_id": 1, "iscrowd": 0, "bbox": [19, 478, 2, 6], "area": 10}, {"id": 3946289, "category_id": 1, "iscrowd": 0, "bbox": [40, 478, 3, 5], "area": 14}, {"id": 3355191, "category_id": 1, "iscrowd": 0, "bbox": [189, 459, 12, 39], "area": 266}, {"id": 2959922, "category_id": 1, "iscrowd": 0, "bbox": [60, 477, 5, 11], "area": 31}, {"id": 3025967, "category_id": 1, "iscrowd": 0, "bbox": [80, 454, 21, 46], "area": 385}, {"id": 4471606, "category_id": 1, "iscrowd": 0, "bbox": [31, 477, 4, 8], "area": 18}, {"id": 2828326, "category_id": 1, "iscrowd": 0, "bbox": [373, 462, 9, 28], "area": 185}, {"id": 3420983, "category_id": 1, "iscrowd": 0, "bbox": [399, 476, 4, 14], "area": 50}, {"id": 1775896, "category_id": 1, "iscrowd": 0, "bbox": [388, 480, 8, 10], "area": 42}, {"id": 9798266, "category_id": 38, "iscrowd": 0, "bbox": [387, 164, 24, 24], "area": 430}, {"id": 1512024, "category_id": 47, "iscrowd": 0, "bbox": [354, 595, 41, 44], "area": 1407}, {"id": 4540235, "category_id": 62, "iscrowd": 0, "bbox": [207, 474, 22, 27], "area": 264}, {"id": 5659746, "category_id": 154, "iscrowd": 0, "bbox": [0, 467, 480, 173], "area": 71833}, {"id": 5984070, "category_id": 155, "iscrowd": 0, "bbox": [0, 453, 202, 37], "area": 3088}, {"id": 11634528, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 473], "area": 218923}, {"id": 3091240, "category_id": 192, "iscrowd": 0, "bbox": [198, 426, 282, 64], "area": 9907}], "file_name": "000000074646.png", "image_id": 74646}, {"segments_info": [{"id": 6045802, "category_id": 1, "iscrowd": 0, "bbox": [237, 80, 79, 48], "area": 2288}, {"id": 9472937, "category_id": 1, "iscrowd": 0, "bbox": [1, 0, 160, 74], "area": 6025}, {"id": 14733502, "category_id": 47, "iscrowd": 0, "bbox": [536, 123, 76, 131], "area": 8115}, {"id": 6325155, "category_id": 47, "iscrowd": 0, "bbox": [181, 39, 64, 118], "area": 6146}, {"id": 10063011, "category_id": 47, "iscrowd": 0, "bbox": [564, 234, 48, 192], "area": 3450}, {"id": 7831200, "category_id": 47, "iscrowd": 0, "bbox": [395, 323, 147, 244], "area": 21648}, {"id": 8553388, "category_id": 47, "iscrowd": 0, "bbox": [281, 395, 165, 205], "area": 27953}, {"id": 10398138, "category_id": 47, "iscrowd": 0, "bbox": [484, 273, 127, 212], "area": 14911}, {"id": 14272195, "category_id": 47, "iscrowd": 0, "bbox": [360, 1, 23, 32], "area": 660}, {"id": 7114157, "category_id": 47, "iscrowd": 0, "bbox": [116, 53, 72, 126], "area": 7118}, {"id": 5795747, "category_id": 47, "iscrowd": 0, "bbox": [48, 71, 78, 131], "area": 8261}, {"id": 5792912, "category_id": 47, "iscrowd": 0, "bbox": [305, 1, 26, 34], "area": 775}, {"id": 5391217, "category_id": 47, "iscrowd": 0, "bbox": [0, 86, 57, 150], "area": 7841}, {"id": 3749213, "category_id": 59, "iscrowd": 0, "bbox": [100, 254, 256, 148], "area": 28700}, {"id": 6124704, "category_id": 59, "iscrowd": 0, "bbox": [289, 200, 207, 134], "area": 20145}, {"id": 2492961, "category_id": 62, "iscrowd": 0, "bbox": [349, 67, 128, 75], "area": 6668}, {"id": 2755877, "category_id": 62, "iscrowd": 0, "bbox": [464, 0, 77, 128], "area": 5817}, {"id": 4730949, "category_id": 67, "iscrowd": 0, "bbox": [241, 5, 213, 77], "area": 9312}, {"id": 7037318, "category_id": 67, "iscrowd": 0, "bbox": [1, 122, 610, 483], "area": 131477}, {"id": 2562108, "category_id": 189, "iscrowd": 0, "bbox": [171, 17, 441, 595], "area": 7715}, {"id": 4926529, "category_id": 190, "iscrowd": 0, "bbox": [238, 32, 374, 126], "area": 13415}, {"id": 9141147, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 250, 570], "area": 7837}, {"id": 7699364, "category_id": 196, "iscrowd": 0, "bbox": [208, 0, 83, 85], "area": 2044}], "file_name": "000000074733.png", "image_id": 74733}, {"segments_info": [{"id": 2762794, "category_id": 1, "iscrowd": 0, "bbox": [147, 239, 96, 74], "area": 2853}, {"id": 6321002, "category_id": 36, "iscrowd": 0, "bbox": [116, 305, 129, 32], "area": 2449}, {"id": 14145496, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 267776}], "file_name": "000000074860.png", "image_id": 74860}, {"segments_info": [{"id": 4826072, "category_id": 48, "iscrowd": 0, "bbox": [176, 322, 246, 59], "area": 7823}, {"id": 6469859, "category_id": 48, "iscrowd": 0, "bbox": [22, 173, 326, 80], "area": 12643}, {"id": 5553904, "category_id": 48, "iscrowd": 0, "bbox": [280, 116, 121, 57], "area": 3777}, {"id": 3579097, "category_id": 48, "iscrowd": 0, "bbox": [400, 129, 176, 57], "area": 5552}, {"id": 12968165, "category_id": 189, "iscrowd": 0, "bbox": [0, 166, 640, 269], "area": 117741}, {"id": 8233651, "category_id": 190, "iscrowd": 0, "bbox": [0, 117, 154, 198], "area": 10955}, {"id": 14542058, "category_id": 195, "iscrowd": 0, "bbox": [184, 419, 56, 16], "area": 692}], "file_name": "000000075393.png", "image_id": 75393}, {"segments_info": [{"id": 5805506, "category_id": 59, "iscrowd": 0, "bbox": [101, 59, 434, 299], "area": 100535}], "file_name": "000000075456.png", "image_id": 75456}, {"segments_info": [{"id": 9271927, "category_id": 1, "iscrowd": 0, "bbox": [95, 189, 163, 285], "area": 30048}, {"id": 4672081, "category_id": 1, "iscrowd": 0, "bbox": [311, 171, 71, 294], "area": 13363}, {"id": 4411488, "category_id": 1, "iscrowd": 0, "bbox": [183, 173, 38, 81], "area": 1749}, {"id": 5001044, "category_id": 1, "iscrowd": 0, "bbox": [381, 191, 63, 231], "area": 9953}, {"id": 7104346, "category_id": 1, "iscrowd": 0, "bbox": [202, 205, 113, 200], "area": 8030}, {"id": 2631482, "category_id": 1, "iscrowd": 0, "bbox": [251, 181, 60, 241], "area": 8210}, {"id": 5397852, "category_id": 1, "iscrowd": 0, "bbox": [84, 222, 46, 84], "area": 2310}, {"id": 3885392, "category_id": 1, "iscrowd": 0, "bbox": [245, 168, 39, 57], "area": 842}, {"id": 3427157, "category_id": 1, "iscrowd": 0, "bbox": [140, 163, 39, 28], "area": 839}, {"id": 2239534, "category_id": 1, "iscrowd": 0, "bbox": [3, 246, 79, 81], "area": 2596}, {"id": 2039843, "category_id": 1, "iscrowd": 0, "bbox": [423, 196, 41, 198], "area": 3621}, {"id": 3818571, "category_id": 1, "iscrowd": 0, "bbox": [363, 183, 40, 117], "area": 1950}, {"id": 5259815, "category_id": 62, "iscrowd": 0, "bbox": [51, 268, 34, 21], "area": 332}, {"id": 2236995, "category_id": 62, "iscrowd": 0, "bbox": [453, 264, 31, 71], "area": 936}, {"id": 2896951, "category_id": 62, "iscrowd": 0, "bbox": [74, 275, 23, 56], "area": 856}, {"id": 2964033, "category_id": 62, "iscrowd": 0, "bbox": [1, 295, 62, 46], "area": 1035}, {"id": 2174004, "category_id": 62, "iscrowd": 0, "bbox": [302, 304, 17, 36], "area": 310}, {"id": 14538713, "category_id": 75, "iscrowd": 0, "bbox": [200, 188, 27, 14], "area": 149}, {"id": 12565700, "category_id": 75, "iscrowd": 0, "bbox": [372, 296, 12, 12], "area": 85}, {"id": 10923961, "category_id": 75, "iscrowd": 0, "bbox": [440, 286, 9, 4], "area": 26}, {"id": 10597041, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 127], "area": 67305}, {"id": 6393490, "category_id": 199, "iscrowd": 0, "bbox": [0, 55, 640, 425], "area": 96880}, {"id": 2896443, "category_id": 200, "iscrowd": 0, "bbox": [0, 293, 473, 187], "area": 35663}], "file_name": "000000075612.png", "image_id": 75612}, {"segments_info": [{"id": 11508612, "category_id": 85, "iscrowd": 0, "bbox": [377, 181, 51, 52], "area": 1949}, {"id": 5130311, "category_id": 191, "iscrowd": 0, "bbox": [0, 445, 640, 55], "area": 22806}, {"id": 8486782, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 477], "area": 295210}], "file_name": "000000076211.png", "image_id": 76211}, {"segments_info": [{"id": 9143165, "category_id": 16, "iscrowd": 0, "bbox": [367, 178, 55, 66], "area": 496}, {"id": 6313037, "category_id": 16, "iscrowd": 0, "bbox": [242, 344, 59, 41], "area": 262}, {"id": 14209736, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 262], "area": 162355}, {"id": 12627100, "category_id": 192, "iscrowd": 0, "bbox": [0, 237, 640, 190], "area": 110038}], "file_name": "000000076261.png", "image_id": 76261}, {"segments_info": [{"id": 6118284, "category_id": 1, "iscrowd": 0, "bbox": [72, 270, 17, 35], "area": 290}, {"id": 2760476, "category_id": 1, "iscrowd": 0, "bbox": [470, 265, 40, 42], "area": 877}, {"id": 10588298, "category_id": 1, "iscrowd": 0, "bbox": [0, 264, 13, 19], "area": 166}, {"id": 6111817, "category_id": 1, "iscrowd": 0, "bbox": [84, 268, 7, 15], "area": 76}, {"id": 5525337, "category_id": 2, "iscrowd": 0, "bbox": [84, 284, 29, 25], "area": 380}, {"id": 10925754, "category_id": 6, "iscrowd": 0, "bbox": [116, 130, 451, 249], "area": 81580}, {"id": 12039096, "category_id": 77, "iscrowd": 0, "bbox": [346, 221, 53, 92], "area": 2857}, {"id": 6841962, "category_id": 149, "iscrowd": 0, "bbox": [37, 311, 361, 87], "area": 6259}, {"id": 6513769, "category_id": 185, "iscrowd": 0, "bbox": [35, 285, 80, 29], "area": 678}, {"id": 9541020, "category_id": 191, "iscrowd": 0, "bbox": [0, 318, 640, 162], "area": 54504}, {"id": 8878434, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 359], "area": 124387}, {"id": 6711918, "category_id": 199, "iscrowd": 0, "bbox": [0, 288, 23, 42], "area": 727}], "file_name": "000000076416.png", "image_id": 76416}, {"segments_info": [{"id": 3619635, "category_id": 3, "iscrowd": 0, "bbox": [190, 153, 450, 317], "area": 90541}, {"id": 6973777, "category_id": 10, "iscrowd": 0, "bbox": [439, 28, 67, 132], "area": 7769}, {"id": 6250311, "category_id": 10, "iscrowd": 0, "bbox": [7, 2, 63, 126], "area": 7061}, {"id": 9477799, "category_id": 18, "iscrowd": 0, "bbox": [276, 143, 147, 163], "area": 13047}, {"id": 15852485, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 287], "area": 107302}, {"id": 9025474, "category_id": 197, "iscrowd": 0, "bbox": [0, 255, 356, 223], "area": 60767}], "file_name": "000000076417.png", "image_id": 76417}, {"segments_info": [{"id": 8951458, "category_id": 1, "iscrowd": 0, "bbox": [295, 154, 65, 170], "area": 4401}, {"id": 5397347, "category_id": 1, "iscrowd": 0, "bbox": [505, 174, 26, 28], "area": 500}, {"id": 11317433, "category_id": 1, "iscrowd": 0, "bbox": [40, 160, 26, 37], "area": 663}, {"id": 9739428, "category_id": 1, "iscrowd": 0, "bbox": [210, 154, 88, 171], "area": 5300}, {"id": 7569549, "category_id": 1, "iscrowd": 0, "bbox": [397, 126, 30, 39], "area": 762}, {"id": 4079687, "category_id": 1, "iscrowd": 0, "bbox": [420, 78, 24, 32], "area": 521}, {"id": 2435373, "category_id": 1, "iscrowd": 0, "bbox": [373, 14, 20, 31], "area": 439}, {"id": 8885154, "category_id": 1, "iscrowd": 0, "bbox": [150, 158, 29, 44], "area": 767}, {"id": 2962253, "category_id": 1, "iscrowd": 0, "bbox": [444, 75, 30, 23], "area": 382}, {"id": 9015193, "category_id": 1, "iscrowd": 0, "bbox": [120, 157, 29, 42], "area": 698}, {"id": 7894393, "category_id": 1, "iscrowd": 0, "bbox": [369, 105, 33, 41], "area": 839}, {"id": 5726350, "category_id": 1, "iscrowd": 0, "bbox": [441, 171, 35, 37], "area": 834}, {"id": 6445660, "category_id": 1, "iscrowd": 0, "bbox": [458, 49, 27, 36], "area": 499}, {"id": 4673614, "category_id": 1, "iscrowd": 1, "bbox": [0, 0, 640, 351], "area": 106062}, {"id": 6193807, "category_id": 43, "iscrowd": 0, "bbox": [246, 242, 30, 53], "area": 815}, {"id": 8037793, "category_id": 43, "iscrowd": 0, "bbox": [329, 221, 30, 59], "area": 187}, {"id": 4739374, "category_id": 62, "iscrowd": 0, "bbox": [160, 128, 25, 20], "area": 353}, {"id": 4673335, "category_id": 62, "iscrowd": 0, "bbox": [376, 68, 19, 16], "area": 184}, {"id": 4081450, "category_id": 62, "iscrowd": 0, "bbox": [86, 113, 25, 19], "area": 347}, {"id": 4541491, "category_id": 62, "iscrowd": 0, "bbox": [65, 112, 20, 15], "area": 193}, {"id": 5134428, "category_id": 62, "iscrowd": 0, "bbox": [442, 419, 98, 61], "area": 4510}, {"id": 13355209, "category_id": 62, "iscrowd": 0, "bbox": [544, 425, 96, 48], "area": 4036}, {"id": 5199672, "category_id": 62, "iscrowd": 0, "bbox": [327, 111, 21, 16], "area": 296}, {"id": 5002806, "category_id": 62, "iscrowd": 0, "bbox": [303, 112, 24, 16], "area": 335}, {"id": 7106383, "category_id": 62, "iscrowd": 0, "bbox": [367, 192, 27, 9], "area": 216}, {"id": 4541997, "category_id": 62, "iscrowd": 0, "bbox": [133, 128, 25, 19], "area": 366}, {"id": 6661533, "category_id": 145, "iscrowd": 0, "bbox": [0, 241, 640, 239], "area": 130835}, {"id": 4415348, "category_id": 161, "iscrowd": 0, "bbox": [160, 85, 69, 130], "area": 1737}, {"id": 2238244, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 85], "area": 7501}], "file_name": "000000076468.png", "image_id": 76468}, {"segments_info": [{"id": 7434356, "category_id": 1, "iscrowd": 0, "bbox": [416, 205, 171, 258], "area": 17746}, {"id": 3091499, "category_id": 2, "iscrowd": 0, "bbox": [0, 235, 197, 244], "area": 28754}, {"id": 3750986, "category_id": 7, "iscrowd": 0, "bbox": [0, 131, 248, 219], "area": 32635}, {"id": 14869993, "category_id": 10, "iscrowd": 0, "bbox": [277, 202, 18, 26], "area": 428}, {"id": 2238001, "category_id": 15, "iscrowd": 0, "bbox": [450, 413, 120, 67], "area": 5130}, {"id": 3816255, "category_id": 15, "iscrowd": 0, "bbox": [229, 296, 354, 175], "area": 18590}, {"id": 3552308, "category_id": 27, "iscrowd": 0, "bbox": [139, 284, 84, 131], "area": 6915}, {"id": 7037794, "category_id": 32, "iscrowd": 0, "bbox": [500, 263, 3, 20], "area": 42}, {"id": 3356220, "category_id": 62, "iscrowd": 0, "bbox": [330, 364, 83, 21], "area": 1411}, {"id": 2698804, "category_id": 62, "iscrowd": 0, "bbox": [496, 367, 87, 36], "area": 2425}, {"id": 5723993, "category_id": 62, "iscrowd": 0, "bbox": [492, 346, 130, 82], "area": 3884}, {"id": 3882048, "category_id": 67, "iscrowd": 0, "bbox": [308, 299, 184, 26], "area": 3275}, {"id": 6118236, "category_id": 73, "iscrowd": 0, "bbox": [385, 252, 96, 56], "area": 1806}, {"id": 4472652, "category_id": 119, "iscrowd": 0, "bbox": [214, 317, 24, 11], "area": 122}, {"id": 9405825, "category_id": 144, "iscrowd": 0, "bbox": [236, 267, 69, 58], "area": 1934}, {"id": 6116433, "category_id": 147, "iscrowd": 0, "bbox": [273, 288, 25, 36], "area": 510}, {"id": 14668481, "category_id": 151, "iscrowd": 0, "bbox": [0, 72, 78, 66], "area": 3362}, {"id": 5264214, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 237], "area": 78345}, {"id": 16382453, "category_id": 187, "iscrowd": 0, "bbox": [108, 93, 344, 114], "area": 7513}, {"id": 1514019, "category_id": 189, "iscrowd": 0, "bbox": [536, 322, 104, 158], "area": 8742}, {"id": 5723476, "category_id": 191, "iscrowd": 0, "bbox": [108, 269, 532, 211], "area": 12856}, {"id": 11052713, "category_id": 199, "iscrowd": 0, "bbox": [0, 93, 640, 387], "area": 32096}], "file_name": "000000076547.png", "image_id": 76547}, {"segments_info": [{"id": 3355440, "category_id": 1, "iscrowd": 0, "bbox": [592, 339, 48, 136], "area": 4715}, {"id": 3880758, "category_id": 1, "iscrowd": 0, "bbox": [545, 329, 17, 45], "area": 288}, {"id": 8550763, "category_id": 1, "iscrowd": 0, "bbox": [519, 343, 54, 137], "area": 4359}, {"id": 9275259, "category_id": 1, "iscrowd": 0, "bbox": [515, 335, 32, 115], "area": 726}, {"id": 4077618, "category_id": 1, "iscrowd": 0, "bbox": [564, 326, 41, 125], "area": 2366}, {"id": 4211779, "category_id": 1, "iscrowd": 0, "bbox": [600, 330, 16, 16], "area": 181}, {"id": 4078919, "category_id": 1, "iscrowd": 0, "bbox": [587, 320, 9, 21], "area": 122}, {"id": 4144183, "category_id": 1, "iscrowd": 0, "bbox": [487, 319, 30, 88], "area": 1902}, {"id": 2828583, "category_id": 1, "iscrowd": 0, "bbox": [462, 321, 28, 79], "area": 1389}, {"id": 4474214, "category_id": 1, "iscrowd": 0, "bbox": [521, 323, 19, 27], "area": 255}, {"id": 5993865, "category_id": 7, "iscrowd": 0, "bbox": [100, 166, 486, 309], "area": 83695}, {"id": 3155488, "category_id": 31, "iscrowd": 0, "bbox": [576, 351, 15, 16], "area": 60}, {"id": 9733999, "category_id": 31, "iscrowd": 0, "bbox": [578, 427, 21, 34], "area": 474}, {"id": 3100770, "category_id": 77, "iscrowd": 0, "bbox": [624, 356, 4, 6], "area": 15}, {"id": 2762793, "category_id": 77, "iscrowd": 0, "bbox": [571, 367, 8, 4], "area": 25}, {"id": 5727593, "category_id": 125, "iscrowd": 0, "bbox": [53, 364, 425, 116], "area": 12667}, {"id": 5856608, "category_id": 128, "iscrowd": 0, "bbox": [0, 29, 598, 386], "area": 64751}, {"id": 5202022, "category_id": 147, "iscrowd": 0, "bbox": [0, 341, 565, 139], "area": 2252}, {"id": 5200485, "category_id": 151, "iscrowd": 0, "bbox": [396, 191, 93, 27], "area": 1550}, {"id": 3817528, "category_id": 184, "iscrowd": 0, "bbox": [452, 250, 188, 96], "area": 4094}, {"id": 16448505, "category_id": 187, "iscrowd": 0, "bbox": [18, 0, 186, 41], "area": 4870}, {"id": 8818052, "category_id": 191, "iscrowd": 0, "bbox": [0, 364, 640, 116], "area": 17446}, {"id": 5985351, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 291], "area": 96665}, {"id": 8026736, "category_id": 194, "iscrowd": 0, "bbox": [571, 397, 21, 40], "area": 100}], "file_name": "000000076625.png", "image_id": 76625}, {"segments_info": [{"id": 7297602, "category_id": 73, "iscrowd": 0, "bbox": [50, 31, 552, 316], "area": 151009}, {"id": 802157, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 406], "area": 100835}, {"id": 4274749, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 70, 200], "area": 7630}], "file_name": "000000076731.png", "image_id": 76731}, {"segments_info": [{"id": 2501688, "category_id": 17, "iscrowd": 0, "bbox": [237, 203, 156, 166], "area": 9484}, {"id": 5136503, "category_id": 17, "iscrowd": 0, "bbox": [93, 345, 171, 135], "area": 10995}, {"id": 7114676, "category_id": 62, "iscrowd": 0, "bbox": [128, 221, 113, 131], "area": 8361}, {"id": 2573432, "category_id": 67, "iscrowd": 0, "bbox": [446, 302, 189, 175], "area": 18232}, {"id": 8685976, "category_id": 72, "iscrowd": 0, "bbox": [270, 40, 226, 149], "area": 30320}, {"id": 8489108, "category_id": 73, "iscrowd": 0, "bbox": [141, 150, 96, 66], "area": 5518}, {"id": 3421242, "category_id": 75, "iscrowd": 0, "bbox": [352, 41, 45, 7], "area": 255}, {"id": 1645600, "category_id": 75, "iscrowd": 0, "bbox": [489, 229, 24, 9], "area": 122}, {"id": 10067105, "category_id": 84, "iscrowd": 0, "bbox": [565, 307, 75, 56], "area": 3366}, {"id": 2371939, "category_id": 118, "iscrowd": 0, "bbox": [480, 455, 138, 25], "area": 1266}, {"id": 5792882, "category_id": 156, "iscrowd": 0, "bbox": [232, 178, 295, 130], "area": 26836}, {"id": 2899303, "category_id": 189, "iscrowd": 0, "bbox": [458, 363, 182, 117], "area": 1493}, {"id": 7902129, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 308], "area": 110811}, {"id": 7175833, "category_id": 200, "iscrowd": 0, "bbox": [0, 282, 640, 198], "area": 76124}], "file_name": "000000077396.png", "image_id": 77396}, {"segments_info": [{"id": 4408906, "category_id": 1, "iscrowd": 0, "bbox": [314, 565, 5, 17], "area": 53}, {"id": 6047546, "category_id": 1, "iscrowd": 0, "bbox": [172, 558, 5, 13], "area": 44}, {"id": 4741704, "category_id": 1, "iscrowd": 0, "bbox": [273, 565, 11, 35], "area": 238}, {"id": 2825240, "category_id": 1, "iscrowd": 0, "bbox": [157, 554, 7, 18], "area": 65}, {"id": 9268777, "category_id": 1, "iscrowd": 0, "bbox": [185, 565, 2, 7], "area": 13}, {"id": 9202821, "category_id": 1, "iscrowd": 0, "bbox": [147, 555, 5, 13], "area": 40}, {"id": 5979196, "category_id": 1, "iscrowd": 0, "bbox": [192, 556, 6, 20], "area": 72}, {"id": 7373692, "category_id": 1, "iscrowd": 0, "bbox": [99, 556, 18, 53], "area": 587}, {"id": 7888202, "category_id": 1, "iscrowd": 0, "bbox": [221, 563, 9, 13], "area": 71}, {"id": 8481382, "category_id": 1, "iscrowd": 0, "bbox": [235, 561, 9, 15], "area": 64}, {"id": 10518666, "category_id": 1, "iscrowd": 0, "bbox": [124, 554, 6, 12], "area": 53}, {"id": 3749231, "category_id": 1, "iscrowd": 0, "bbox": [67, 550, 23, 51], "area": 729}, {"id": 7757152, "category_id": 1, "iscrowd": 0, "bbox": [117, 557, 6, 9], "area": 37}, {"id": 7239017, "category_id": 1, "iscrowd": 1, "bbox": [0, 532, 428, 71], "area": 3864}, {"id": 11501618, "category_id": 38, "iscrowd": 0, "bbox": [46, 497, 11, 7], "area": 39}, {"id": 8219220, "category_id": 38, "iscrowd": 0, "bbox": [187, 482, 8, 10], "area": 32}, {"id": 7439233, "category_id": 38, "iscrowd": 0, "bbox": [180, 468, 7, 6], "area": 12}, {"id": 9140341, "category_id": 38, "iscrowd": 0, "bbox": [333, 399, 18, 13], "area": 48}, {"id": 8546405, "category_id": 38, "iscrowd": 0, "bbox": [235, 510, 4, 5], "area": 12}, {"id": 4013637, "category_id": 38, "iscrowd": 0, "bbox": [402, 317, 4, 4], "area": 14}, {"id": 6908530, "category_id": 38, "iscrowd": 0, "bbox": [311, 319, 13, 18], "area": 81}, {"id": 7894648, "category_id": 38, "iscrowd": 0, "bbox": [78, 379, 3, 3], "area": 9}, {"id": 10126712, "category_id": 38, "iscrowd": 0, "bbox": [266, 475, 7, 7], "area": 16}, {"id": 10522493, "category_id": 38, "iscrowd": 0, "bbox": [395, 481, 5, 9], "area": 33}, {"id": 7627136, "category_id": 38, "iscrowd": 0, "bbox": [76, 419, 10, 6], "area": 26}, {"id": 12694186, "category_id": 38, "iscrowd": 0, "bbox": [401, 316, 11, 20], "area": 72}, {"id": 8616558, "category_id": 38, "iscrowd": 0, "bbox": [383, 456, 7, 18], "area": 52}, {"id": 13217423, "category_id": 38, "iscrowd": 1, "bbox": [19, 312, 405, 243], "area": 5956}, {"id": 9011318, "category_id": 184, "iscrowd": 0, "bbox": [288, 548, 140, 33], "area": 1438}, {"id": 11903630, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 428, 579], "area": 233070}, {"id": 2587224, "category_id": 193, "iscrowd": 0, "bbox": [0, 544, 428, 96], "area": 26831}], "file_name": "000000077460.png", "image_id": 77460}, {"segments_info": [{"id": 3295577, "category_id": 17, "iscrowd": 0, "bbox": [226, 85, 305, 319], "area": 53519}, {"id": 11837081, "category_id": 65, "iscrowd": 0, "bbox": [210, 76, 430, 349], "area": 69392}, {"id": 11177084, "category_id": 73, "iscrowd": 0, "bbox": [0, 3, 289, 417], "area": 96137}, {"id": 12492945, "category_id": 93, "iscrowd": 0, "bbox": [460, 97, 41, 11], "area": 95}, {"id": 2965327, "category_id": 188, "iscrowd": 0, "bbox": [490, 0, 150, 167], "area": 19404}, {"id": 11440773, "category_id": 199, "iscrowd": 0, "bbox": [81, 0, 417, 105], "area": 26136}], "file_name": "000000077595.png", "image_id": 77595}, {"segments_info": [{"id": 6180170, "category_id": 9, "iscrowd": 0, "bbox": [593, 169, 47, 30], "area": 700}, {"id": 5853780, "category_id": 15, "iscrowd": 0, "bbox": [371, 252, 117, 85], "area": 3172}, {"id": 7300191, "category_id": 15, "iscrowd": 0, "bbox": [61, 320, 190, 63], "area": 5696}, {"id": 15052695, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 137], "area": 63746}, {"id": 10593207, "category_id": 191, "iscrowd": 0, "bbox": [0, 226, 640, 157], "area": 70208}, {"id": 5393483, "category_id": 197, "iscrowd": 0, "bbox": [0, 62, 640, 216], "area": 101361}], "file_name": "000000078032.png", "image_id": 78032}, {"segments_info": [{"id": 5000268, "category_id": 1, "iscrowd": 0, "bbox": [4, 250, 231, 299], "area": 25443}, {"id": 2631720, "category_id": 1, "iscrowd": 0, "bbox": [499, 204, 128, 225], "area": 15093}, {"id": 4539717, "category_id": 7, "iscrowd": 0, "bbox": [0, 0, 640, 639], "area": 317654}, {"id": 2763306, "category_id": 31, "iscrowd": 0, "bbox": [17, 354, 114, 157], "area": 5413}, {"id": 1907997, "category_id": 31, "iscrowd": 0, "bbox": [508, 363, 57, 70], "area": 2714}, {"id": 7039851, "category_id": 31, "iscrowd": 0, "bbox": [153, 422, 151, 96], "area": 8634}, {"id": 1513239, "category_id": 44, "iscrowd": 0, "bbox": [574, 348, 25, 60], "area": 1122}, {"id": 2500134, "category_id": 62, "iscrowd": 0, "bbox": [138, 242, 183, 212], "area": 16627}, {"id": 5592405, "category_id": 77, "iscrowd": 0, "bbox": [59, 433, 19, 13], "area": 133}, {"id": 4802889, "category_id": 77, "iscrowd": 0, "bbox": [501, 286, 18, 31], "area": 194}, {"id": 855309, "category_id": 194, "iscrowd": 0, "bbox": [342, 545, 298, 95], "area": 14266}], "file_name": "000000078170.png", "image_id": 78170}, {"segments_info": [{"id": 2321555, "category_id": 49, "iscrowd": 0, "bbox": [267, 144, 5, 23], "area": 98}, {"id": 1458014, "category_id": 49, "iscrowd": 0, "bbox": [259, 145, 4, 22], "area": 86}, {"id": 1392481, "category_id": 49, "iscrowd": 0, "bbox": [263, 145, 4, 22], "area": 70}, {"id": 2644086, "category_id": 49, "iscrowd": 0, "bbox": [251, 145, 5, 22], "area": 99}, {"id": 2386829, "category_id": 49, "iscrowd": 0, "bbox": [256, 147, 3, 19], "area": 57}, {"id": 2188688, "category_id": 49, "iscrowd": 0, "bbox": [272, 145, 5, 22], "area": 108}, {"id": 3895957, "category_id": 51, "iscrowd": 0, "bbox": [375, 211, 45, 15], "area": 456}, {"id": 3383235, "category_id": 51, "iscrowd": 0, "bbox": [260, 205, 15, 9], "area": 126}, {"id": 605654, "category_id": 55, "iscrowd": 0, "bbox": [268, 195, 12, 10], "area": 86}, {"id": 949707, "category_id": 57, "iscrowd": 0, "bbox": [273, 188, 10, 11], "area": 46}, {"id": 212382, "category_id": 57, "iscrowd": 0, "bbox": [282, 202, 5, 10], "area": 37}, {"id": 481209, "category_id": 57, "iscrowd": 0, "bbox": [284, 201, 7, 7], "area": 30}, {"id": 6263468, "category_id": 81, "iscrowd": 0, "bbox": [15, 194, 157, 35], "area": 3659}, {"id": 3826033, "category_id": 82, "iscrowd": 0, "bbox": [56, 96, 93, 109], "area": 8170}, {"id": 2203344, "category_id": 100, "iscrowd": 0, "bbox": [236, 79, 61, 57], "area": 2855}, {"id": 3111583, "category_id": 122, "iscrowd": 0, "bbox": [222, 181, 56, 45], "area": 1494}, {"id": 14871276, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 640, 123], "area": 3821}, {"id": 3433593, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 121], "area": 54124}, {"id": 531254, "category_id": 188, "iscrowd": 0, "bbox": [22, 200, 166, 75], "area": 6007}, {"id": 5801889, "category_id": 199, "iscrowd": 0, "bbox": [0, 49, 640, 372], "area": 31666}, {"id": 935269, "category_id": 200, "iscrowd": 0, "bbox": [250, 287, 390, 141], "area": 27276}], "file_name": "000000078266.png", "image_id": 78266}, {"segments_info": [{"id": 13290186, "category_id": 1, "iscrowd": 0, "bbox": [129, 15, 78, 128], "area": 5013}, {"id": 10987431, "category_id": 1, "iscrowd": 0, "bbox": [167, 2, 114, 304], "area": 13384}, {"id": 7697781, "category_id": 1, "iscrowd": 0, "bbox": [218, 9, 187, 297], "area": 22661}, {"id": 5658198, "category_id": 15, "iscrowd": 0, "bbox": [74, 139, 313, 191], "area": 31494}, {"id": 3158064, "category_id": 31, "iscrowd": 0, "bbox": [293, 258, 66, 64], "area": 2931}, {"id": 9211020, "category_id": 31, "iscrowd": 0, "bbox": [383, 283, 55, 40], "area": 1672}, {"id": 4144959, "category_id": 184, "iscrowd": 0, "bbox": [10, 34, 490, 270], "area": 34319}, {"id": 6052956, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 500, 144], "area": 31529}, {"id": 8092539, "category_id": 193, "iscrowd": 0, "bbox": [0, 142, 500, 208], "area": 29440}], "file_name": "000000078404.png", "image_id": 78404}, {"segments_info": [{"id": 1714501, "category_id": 17, "iscrowd": 0, "bbox": [290, 250, 349, 230], "area": 47497}, {"id": 395276, "category_id": 62, "iscrowd": 0, "bbox": [398, 1, 194, 155], "area": 10271}, {"id": 9212048, "category_id": 73, "iscrowd": 0, "bbox": [0, 2, 440, 473], "area": 165320}, {"id": 2308440, "category_id": 109, "iscrowd": 0, "bbox": [393, 0, 247, 153], "area": 16687}, {"id": 2902649, "category_id": 190, "iscrowd": 0, "bbox": [295, 52, 345, 238], "area": 52499}, {"id": 2041923, "category_id": 199, "iscrowd": 0, "bbox": [233, 0, 183, 76], "area": 7371}], "file_name": "000000078420.png", "image_id": 78420}, {"segments_info": [{"id": 2239803, "category_id": 17, "iscrowd": 0, "bbox": [0, 64, 272, 252], "area": 48774}, {"id": 10664141, "category_id": 47, "iscrowd": 0, "bbox": [268, 76, 88, 90], "area": 7079}, {"id": 7440022, "category_id": 67, "iscrowd": 0, "bbox": [15, 146, 485, 185], "area": 43532}, {"id": 9612227, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 112, 59], "area": 4434}, {"id": 3162447, "category_id": 189, "iscrowd": 0, "bbox": [0, 307, 500, 27], "area": 2783}, {"id": 6914199, "category_id": 195, "iscrowd": 0, "bbox": [0, 281, 43, 49], "area": 1005}, {"id": 14017517, "category_id": 199, "iscrowd": 0, "bbox": [15, 0, 485, 152], "area": 39434}], "file_name": "000000078426.png", "image_id": 78426}, {"segments_info": [{"id": 8163473, "category_id": 1, "iscrowd": 0, "bbox": [469, 287, 21, 57], "area": 539}, {"id": 7110526, "category_id": 1, "iscrowd": 0, "bbox": [315, 251, 11, 31], "area": 147}, {"id": 6057323, "category_id": 1, "iscrowd": 0, "bbox": [478, 249, 9, 14], "area": 100}, {"id": 6452851, "category_id": 1, "iscrowd": 0, "bbox": [572, 245, 9, 23], "area": 130}, {"id": 5596772, "category_id": 1, "iscrowd": 0, "bbox": [497, 263, 19, 74], "area": 854}, {"id": 4741205, "category_id": 1, "iscrowd": 0, "bbox": [544, 243, 24, 27], "area": 204}, {"id": 5860202, "category_id": 1, "iscrowd": 0, "bbox": [345, 253, 6, 23], "area": 105}, {"id": 6781561, "category_id": 1, "iscrowd": 0, "bbox": [412, 266, 24, 79], "area": 1015}, {"id": 5334113, "category_id": 1, "iscrowd": 0, "bbox": [489, 276, 15, 66], "area": 634}, {"id": 5663335, "category_id": 1, "iscrowd": 0, "bbox": [351, 250, 13, 34], "area": 257}, {"id": 6254703, "category_id": 1, "iscrowd": 0, "bbox": [333, 248, 10, 32], "area": 167}, {"id": 4542797, "category_id": 1, "iscrowd": 0, "bbox": [238, 246, 9, 18], "area": 101}, {"id": 6189423, "category_id": 1, "iscrowd": 0, "bbox": [294, 252, 7, 37], "area": 212}, {"id": 6321266, "category_id": 1, "iscrowd": 1, "bbox": [96, 222, 526, 65], "area": 1509}, {"id": 4017224, "category_id": 9, "iscrowd": 0, "bbox": [530, 260, 28, 9], "area": 177}, {"id": 9545126, "category_id": 9, "iscrowd": 0, "bbox": [256, 174, 82, 109], "area": 3621}, {"id": 8756123, "category_id": 9, "iscrowd": 0, "bbox": [465, 189, 43, 74], "area": 1523}, {"id": 5926251, "category_id": 9, "iscrowd": 0, "bbox": [587, 232, 26, 4], "area": 87}, {"id": 8821402, "category_id": 9, "iscrowd": 0, "bbox": [202, 194, 47, 71], "area": 1494}, {"id": 8624535, "category_id": 9, "iscrowd": 0, "bbox": [444, 231, 15, 3], "area": 37}, {"id": 10072242, "category_id": 9, "iscrowd": 0, "bbox": [513, 188, 40, 67], "area": 1302}, {"id": 6979454, "category_id": 9, "iscrowd": 0, "bbox": [184, 209, 29, 31], "area": 251}, {"id": 8163728, "category_id": 9, "iscrowd": 0, "bbox": [52, 215, 64, 42], "area": 648}, {"id": 7571590, "category_id": 9, "iscrowd": 0, "bbox": [357, 228, 20, 7], "area": 101}, {"id": 4214346, "category_id": 18, "iscrowd": 0, "bbox": [202, 307, 31, 16], "area": 241}, {"id": 8493208, "category_id": 154, "iscrowd": 0, "bbox": [0, 332, 640, 167], "area": 90336}, {"id": 7242882, "category_id": 155, "iscrowd": 0, "bbox": [0, 215, 640, 204], "area": 68924}, {"id": 8821916, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 251], "area": 144029}], "file_name": "000000078565.png", "image_id": 78565}, {"segments_info": [{"id": 11382705, "category_id": 1, "iscrowd": 0, "bbox": [398, 55, 31, 60], "area": 1150}, {"id": 8221818, "category_id": 1, "iscrowd": 0, "bbox": [96, 17, 108, 99], "area": 6042}, {"id": 8882065, "category_id": 1, "iscrowd": 0, "bbox": [490, 52, 38, 108], "area": 2322}, {"id": 7957862, "category_id": 1, "iscrowd": 0, "bbox": [576, 50, 64, 128], "area": 2273}, {"id": 12699843, "category_id": 1, "iscrowd": 0, "bbox": [57, 25, 48, 91], "area": 2945}, {"id": 8685238, "category_id": 1, "iscrowd": 0, "bbox": [525, 71, 26, 40], "area": 758}, {"id": 7645866, "category_id": 1, "iscrowd": 0, "bbox": [290, 18, 80, 92], "area": 4603}, {"id": 4013624, "category_id": 1, "iscrowd": 0, "bbox": [245, 13, 44, 98], "area": 3050}, {"id": 6908006, "category_id": 1, "iscrowd": 0, "bbox": [566, 59, 32, 33], "area": 464}, {"id": 8555150, "category_id": 1, "iscrowd": 0, "bbox": [583, 53, 47, 70], "area": 1402}, {"id": 11709608, "category_id": 1, "iscrowd": 0, "bbox": [441, 26, 56, 151], "area": 4466}, {"id": 5394770, "category_id": 1, "iscrowd": 0, "bbox": [200, 17, 52, 94], "area": 3260}, {"id": 6382187, "category_id": 1, "iscrowd": 0, "bbox": [365, 46, 26, 65], "area": 1102}, {"id": 6513248, "category_id": 1, "iscrowd": 1, "bbox": [0, 19, 640, 182], "area": 11180}, {"id": 2828572, "category_id": 4, "iscrowd": 0, "bbox": [545, 324, 95, 147], "area": 7260}, {"id": 5002081, "category_id": 4, "iscrowd": 0, "bbox": [0, 186, 175, 288], "area": 30223}, {"id": 5990537, "category_id": 4, "iscrowd": 0, "bbox": [192, 141, 259, 168], "area": 24393}, {"id": 7038551, "category_id": 4, "iscrowd": 0, "bbox": [444, 112, 195, 221], "area": 22264}, {"id": 6377278, "category_id": 27, "iscrowd": 0, "bbox": [560, 76, 48, 47], "area": 1052}, {"id": 4604991, "category_id": 27, "iscrowd": 0, "bbox": [429, 82, 31, 37], "area": 813}, {"id": 4819926, "category_id": 92, "iscrowd": 0, "bbox": [0, 0, 437, 274], "area": 45198}, {"id": 9407359, "category_id": 149, "iscrowd": 0, "bbox": [57, 164, 583, 316], "area": 94897}, {"id": 7302502, "category_id": 151, "iscrowd": 0, "bbox": [0, 9, 640, 65], "area": 7180}, {"id": 5329211, "category_id": 184, "iscrowd": 0, "bbox": [258, 0, 382, 92], "area": 13450}, {"id": 14468500, "category_id": 187, "iscrowd": 0, "bbox": [357, 0, 254, 61], "area": 3898}], "file_name": "000000078748.png", "image_id": 78748}, {"segments_info": [{"id": 5720396, "category_id": 3, "iscrowd": 0, "bbox": [10, 160, 466, 315], "area": 91072}, {"id": 3287588, "category_id": 3, "iscrowd": 0, "bbox": [1, 151, 187, 261], "area": 26197}, {"id": 5917769, "category_id": 3, "iscrowd": 0, "bbox": [594, 175, 45, 128], "area": 4082}, {"id": 9274286, "category_id": 18, "iscrowd": 0, "bbox": [198, 117, 170, 222], "area": 16696}, {"id": 4872523, "category_id": 64, "iscrowd": 0, "bbox": [58, 82, 132, 126], "area": 9470}, {"id": 5389363, "category_id": 149, "iscrowd": 0, "bbox": [0, 219, 640, 261], "area": 42276}, {"id": 7034445, "category_id": 191, "iscrowd": 0, "bbox": [471, 212, 129, 79], "area": 8145}, {"id": 8942700, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 253], "area": 106319}], "file_name": "000000078823.png", "image_id": 78823}, {"segments_info": [{"id": 5201804, "category_id": 1, "iscrowd": 0, "bbox": [122, 3, 478, 472], "area": 101308}, {"id": 3620976, "category_id": 1, "iscrowd": 0, "bbox": [3, 190, 440, 282], "area": 99494}, {"id": 1656135, "category_id": 32, "iscrowd": 0, "bbox": [425, 349, 88, 131], "area": 6145}, {"id": 461072, "category_id": 184, "iscrowd": 0, "bbox": [555, 0, 85, 240], "area": 14313}], "file_name": "000000078843.png", "image_id": 78843}, {"segments_info": [{"id": 6580350, "category_id": 1, "iscrowd": 0, "bbox": [39, 0, 76, 44], "area": 1659}, {"id": 6912164, "category_id": 1, "iscrowd": 0, "bbox": [359, 13, 59, 75], "area": 3099}, {"id": 5261908, "category_id": 1, "iscrowd": 0, "bbox": [459, 67, 22, 135], "area": 2255}, {"id": 9739700, "category_id": 1, "iscrowd": 0, "bbox": [132, 392, 167, 248], "area": 12447}, {"id": 10131625, "category_id": 1, "iscrowd": 0, "bbox": [115, 0, 86, 53], "area": 2429}, {"id": 11380655, "category_id": 1, "iscrowd": 0, "bbox": [243, 6, 75, 79], "area": 3406}, {"id": 13750489, "category_id": 1, "iscrowd": 0, "bbox": [190, 0, 114, 50], "area": 3006}, {"id": 8617356, "category_id": 1, "iscrowd": 0, "bbox": [74, 0, 78, 37], "area": 1438}, {"id": 6186321, "category_id": 1, "iscrowd": 0, "bbox": [257, 86, 73, 99], "area": 1838}, {"id": 9541047, "category_id": 1, "iscrowd": 0, "bbox": [317, 5, 47, 82], "area": 2938}, {"id": 7135704, "category_id": 37, "iscrowd": 0, "bbox": [136, 296, 18, 21], "area": 292}, {"id": 6199969, "category_id": 43, "iscrowd": 0, "bbox": [156, 296, 52, 111], "area": 3516}, {"id": 10656873, "category_id": 92, "iscrowd": 0, "bbox": [0, 126, 481, 158], "area": 28842}, {"id": 6528934, "category_id": 145, "iscrowd": 0, "bbox": [0, 195, 481, 445], "area": 172864}, {"id": 4869705, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 481, 275], "area": 66948}], "file_name": "000000078915.png", "image_id": 78915}, {"segments_info": [{"id": 3434835, "category_id": 52, "iscrowd": 0, "bbox": [264, 46, 31, 44], "area": 572}, {"id": 1533509, "category_id": 52, "iscrowd": 0, "bbox": [161, 68, 52, 69], "area": 1852}, {"id": 1072702, "category_id": 52, "iscrowd": 0, "bbox": [153, 0, 80, 79], "area": 3136}, {"id": 747843, "category_id": 52, "iscrowd": 0, "bbox": [199, 23, 32, 90], "area": 1976}, {"id": 2840392, "category_id": 52, "iscrowd": 0, "bbox": [80, 119, 88, 81], "area": 3264}, {"id": 2585426, "category_id": 52, "iscrowd": 0, "bbox": [245, 63, 63, 69], "area": 2098}, {"id": 3173204, "category_id": 52, "iscrowd": 0, "bbox": [166, 122, 29, 40], "area": 782}, {"id": 3107150, "category_id": 52, "iscrowd": 0, "bbox": [240, 132, 97, 37], "area": 2015}, {"id": 1993033, "category_id": 52, "iscrowd": 0, "bbox": [226, 41, 37, 76], "area": 1711}, {"id": 2384975, "category_id": 52, "iscrowd": 0, "bbox": [197, 180, 115, 61], "area": 3210}, {"id": 5081976, "category_id": 52, "iscrowd": 0, "bbox": [223, 176, 68, 26], "area": 1076}, {"id": 1863245, "category_id": 52, "iscrowd": 0, "bbox": [137, 38, 66, 62], "area": 1687}, {"id": 1206603, "category_id": 52, "iscrowd": 0, "bbox": [255, 1, 52, 88], "area": 1879}, {"id": 3750214, "category_id": 119, "iscrowd": 0, "bbox": [74, 220, 216, 309], "area": 22155}, {"id": 1724986, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 384, 640], "area": 125238}, {"id": 2176050, "category_id": 185, "iscrowd": 0, "bbox": [0, 414, 322, 152], "area": 9641}, {"id": 14012110, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 384, 383], "area": 62855}, {"id": 4482397, "category_id": 196, "iscrowd": 0, "bbox": [166, 120, 10, 43], "area": 32}], "file_name": "000000078959.png", "image_id": 78959}, {"segments_info": [{"id": 2773104, "category_id": 1, "iscrowd": 0, "bbox": [1, 89, 289, 357], "area": 60428}, {"id": 422060, "category_id": 55, "iscrowd": 0, "bbox": [146, 154, 118, 131], "area": 12657}], "file_name": "000000079014.png", "image_id": 79014}, {"segments_info": [{"id": 5195866, "category_id": 1, "iscrowd": 0, "bbox": [70, 0, 261, 368], "area": 42109}, {"id": 8223952, "category_id": 42, "iscrowd": 0, "bbox": [0, 262, 602, 159], "area": 41318}, {"id": 12106166, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 187969}], "file_name": "000000079031.png", "image_id": 79031}, {"segments_info": [{"id": 10787474, "category_id": 3, "iscrowd": 0, "bbox": [161, 101, 28, 11], "area": 213}, {"id": 11117210, "category_id": 3, "iscrowd": 0, "bbox": [203, 101, 25, 13], "area": 171}, {"id": 7038311, "category_id": 3, "iscrowd": 0, "bbox": [257, 102, 12, 13], "area": 130}, {"id": 9009261, "category_id": 3, "iscrowd": 0, "bbox": [152, 101, 7, 10], "area": 68}, {"id": 6250076, "category_id": 3, "iscrowd": 0, "bbox": [6, 100, 18, 11], "area": 142}, {"id": 12948564, "category_id": 11, "iscrowd": 0, "bbox": [211, 104, 117, 303], "area": 18159}, {"id": 4870735, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 197], "area": 86178}], "file_name": "000000079034.png", "image_id": 79034}, {"segments_info": [{"id": 2630685, "category_id": 23, "iscrowd": 0, "bbox": [138, 142, 135, 123], "area": 9269}, {"id": 2761755, "category_id": 23, "iscrowd": 0, "bbox": [255, 180, 87, 186], "area": 9938}, {"id": 11315367, "category_id": 118, "iscrowd": 0, "bbox": [538, 63, 102, 32], "area": 767}, {"id": 4806229, "category_id": 177, "iscrowd": 0, "bbox": [0, 32, 640, 222], "area": 40959}, {"id": 5797479, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 407], "area": 161116}, {"id": 4680284, "category_id": 193, "iscrowd": 0, "bbox": [320, 80, 307, 311], "area": 2598}, {"id": 7172464, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 458], "area": 68002}], "file_name": "000000079144.png", "image_id": 79144}, {"segments_info": [{"id": 5004402, "category_id": 25, "iscrowd": 0, "bbox": [0, 10, 451, 630], "area": 118570}, {"id": 4281423, "category_id": 184, "iscrowd": 0, "bbox": [0, 199, 480, 259], "area": 51076}, {"id": 15855340, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 304], "area": 93685}, {"id": 5273742, "category_id": 193, "iscrowd": 0, "bbox": [67, 405, 413, 235], "area": 42936}], "file_name": "000000079188.png", "image_id": 79188}, {"segments_info": [{"id": 4542551, "category_id": 1, "iscrowd": 0, "bbox": [331, 121, 61, 159], "area": 4110}, {"id": 4807779, "category_id": 18, "iscrowd": 0, "bbox": [108, 292, 93, 51], "area": 2489}, {"id": 6125957, "category_id": 19, "iscrowd": 0, "bbox": [203, 193, 285, 155], "area": 16616}, {"id": 3893608, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 248609}], "file_name": "000000079229.png", "image_id": 79229}, {"segments_info": [{"id": 3881912, "category_id": 13, "iscrowd": 0, "bbox": [40, 7, 375, 399], "area": 118713}, {"id": 5789784, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 148915}, {"id": 15921906, "category_id": 187, "iscrowd": 0, "bbox": [58, 0, 233, 70], "area": 4913}], "file_name": "000000079408.png", "image_id": 79408}, {"segments_info": [{"id": 4342089, "category_id": 25, "iscrowd": 0, "bbox": [220, 99, 184, 236], "area": 10706}, {"id": 5331818, "category_id": 25, "iscrowd": 0, "bbox": [127, 151, 95, 173], "area": 5947}, {"id": 6056053, "category_id": 154, "iscrowd": 0, "bbox": [0, 204, 500, 171], "area": 47967}, {"id": 4474952, "category_id": 184, "iscrowd": 0, "bbox": [0, 173, 500, 41], "area": 9724}, {"id": 16183774, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 190], "area": 88057}, {"id": 4083811, "category_id": 193, "iscrowd": 0, "bbox": [0, 274, 500, 101], "area": 24710}], "file_name": "000000079565.png", "image_id": 79565}, {"segments_info": [{"id": 2108982, "category_id": 1, "iscrowd": 0, "bbox": [321, 385, 7, 21], "area": 98}, {"id": 1382171, "category_id": 1, "iscrowd": 0, "bbox": [303, 380, 12, 42], "area": 332}, {"id": 1316953, "category_id": 1, "iscrowd": 0, "bbox": [410, 375, 13, 41], "area": 331}, {"id": 2039845, "category_id": 1, "iscrowd": 0, "bbox": [287, 383, 17, 40], "area": 348}, {"id": 1645397, "category_id": 1, "iscrowd": 0, "bbox": [391, 378, 13, 39], "area": 293}, {"id": 7177102, "category_id": 85, "iscrowd": 0, "bbox": [208, 127, 30, 51], "area": 1196}, {"id": 16580090, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 169], "area": 65677}, {"id": 7373965, "category_id": 191, "iscrowd": 0, "bbox": [0, 390, 640, 90], "area": 42680}, {"id": 3954286, "category_id": 197, "iscrowd": 0, "bbox": [0, 26, 640, 411], "area": 196111}], "file_name": "000000079588.png", "image_id": 79588}, {"segments_info": [{"id": 2240085, "category_id": 44, "iscrowd": 0, "bbox": [398, 10, 113, 367], "area": 31955}, {"id": 2766175, "category_id": 44, "iscrowd": 0, "bbox": [151, 0, 110, 389], "area": 32203}, {"id": 1650515, "category_id": 44, "iscrowd": 0, "bbox": [280, 0, 105, 378], "area": 30698}, {"id": 5152983, "category_id": 52, "iscrowd": 0, "bbox": [179, 365, 313, 109], "area": 18644}, {"id": 4298702, "category_id": 52, "iscrowd": 0, "bbox": [294, 346, 339, 114], "area": 21731}, {"id": 2257844, "category_id": 122, "iscrowd": 0, "bbox": [237, 466, 279, 12], "area": 1676}, {"id": 1518432, "category_id": 177, "iscrowd": 0, "bbox": [0, 18, 640, 326], "area": 111837}, {"id": 3435191, "category_id": 189, "iscrowd": 0, "bbox": [0, 324, 640, 154], "area": 40045}, {"id": 7705791, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 36], "area": 16405}], "file_name": "000000079651.png", "image_id": 79651}, {"segments_info": [{"id": 3487033, "category_id": 9, "iscrowd": 0, "bbox": [225, 355, 48, 22], "area": 665}, {"id": 3487291, "category_id": 9, "iscrowd": 0, "bbox": [282, 344, 75, 17], "area": 912}, {"id": 2170910, "category_id": 9, "iscrowd": 0, "bbox": [345, 341, 44, 12], "area": 339}, {"id": 2894896, "category_id": 9, "iscrowd": 0, "bbox": [81, 354, 38, 13], "area": 374}, {"id": 2828846, "category_id": 9, "iscrowd": 0, "bbox": [385, 343, 41, 11], "area": 323}, {"id": 1315862, "category_id": 9, "iscrowd": 0, "bbox": [114, 348, 89, 71], "area": 4923}, {"id": 2566188, "category_id": 9, "iscrowd": 0, "bbox": [106, 345, 29, 12], "area": 284}, {"id": 3092017, "category_id": 9, "iscrowd": 0, "bbox": [186, 343, 21, 15], "area": 256}, {"id": 1380881, "category_id": 155, "iscrowd": 0, "bbox": [0, 333, 427, 307], "area": 118497}, {"id": 3550241, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 320], "area": 131138}, {"id": 1908001, "category_id": 197, "iscrowd": 0, "bbox": [0, 291, 427, 67], "area": 15366}], "file_name": "000000079837.png", "image_id": 79837}, {"segments_info": [{"id": 11843268, "category_id": 1, "iscrowd": 0, "bbox": [291, 261, 49, 54], "area": 1295}, {"id": 9207425, "category_id": 1, "iscrowd": 0, "bbox": [175, 192, 116, 331], "area": 14807}, {"id": 9018550, "category_id": 1, "iscrowd": 0, "bbox": [335, 203, 31, 40], "area": 791}, {"id": 4474505, "category_id": 1, "iscrowd": 0, "bbox": [179, 89, 29, 38], "area": 545}, {"id": 6975622, "category_id": 1, "iscrowd": 0, "bbox": [359, 94, 15, 32], "area": 321}, {"id": 7500677, "category_id": 1, "iscrowd": 0, "bbox": [293, 75, 31, 61], "area": 986}, {"id": 9142180, "category_id": 1, "iscrowd": 0, "bbox": [342, 171, 24, 35], "area": 377}, {"id": 9210012, "category_id": 1, "iscrowd": 0, "bbox": [158, 81, 22, 27], "area": 372}, {"id": 4407911, "category_id": 1, "iscrowd": 0, "bbox": [375, 162, 24, 40], "area": 586}, {"id": 7108506, "category_id": 1, "iscrowd": 0, "bbox": [236, 109, 24, 36], "area": 503}, {"id": 2962253, "category_id": 1, "iscrowd": 0, "bbox": [293, 214, 41, 46], "area": 772}, {"id": 7306140, "category_id": 1, "iscrowd": 0, "bbox": [332, 238, 36, 43], "area": 1047}, {"id": 9737386, "category_id": 1, "iscrowd": 0, "bbox": [354, 185, 29, 41], "area": 752}, {"id": 6842757, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 425, 390], "area": 81142}, {"id": 4046767, "category_id": 37, "iscrowd": 0, "bbox": [280, 122, 11, 11], "area": 90}, {"id": 6576520, "category_id": 43, "iscrowd": 0, "bbox": [270, 109, 21, 99], "area": 769}, {"id": 7296586, "category_id": 62, "iscrowd": 0, "bbox": [281, 366, 18, 10], "area": 114}, {"id": 7429711, "category_id": 62, "iscrowd": 0, "bbox": [331, 282, 32, 31], "area": 585}, {"id": 6969164, "category_id": 62, "iscrowd": 0, "bbox": [333, 247, 29, 10], "area": 114}, {"id": 10594201, "category_id": 145, "iscrowd": 0, "bbox": [0, 387, 426, 253], "area": 97116}, {"id": 6319221, "category_id": 161, "iscrowd": 0, "bbox": [201, 268, 10, 20], "area": 124}, {"id": 6310459, "category_id": 199, "iscrowd": 0, "bbox": [0, 134, 426, 275], "area": 64178}], "file_name": "000000079969.png", "image_id": 79969}, {"segments_info": [{"id": 8746093, "category_id": 1, "iscrowd": 0, "bbox": [279, 108, 147, 318], "area": 19937}, {"id": 6465157, "category_id": 37, "iscrowd": 0, "bbox": [305, 248, 20, 21], "area": 298}, {"id": 7301734, "category_id": 43, "iscrowd": 0, "bbox": [308, 241, 94, 72], "area": 4034}, {"id": 5265749, "category_id": 138, "iscrowd": 0, "bbox": [0, 304, 640, 122], "area": 58168}, {"id": 2764330, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 361], "area": 189942}], "file_name": "000000080022.png", "image_id": 80022}, {"segments_info": [{"id": 3435668, "category_id": 88, "iscrowd": 0, "bbox": [0, 10, 381, 393], "area": 65430}, {"id": 2443109, "category_id": 200, "iscrowd": 0, "bbox": [0, 0, 423, 640], "area": 118031}], "file_name": "000000080057.png", "image_id": 80057}, {"segments_info": [{"id": 2762357, "category_id": 1, "iscrowd": 0, "bbox": [188, 128, 116, 286], "area": 16823}, {"id": 9410979, "category_id": 18, "iscrowd": 0, "bbox": [205, 359, 86, 180], "area": 7532}, {"id": 12554624, "category_id": 35, "iscrowd": 0, "bbox": [99, 372, 301, 131], "area": 2830}, {"id": 15918041, "category_id": 159, "iscrowd": 0, "bbox": [0, 148, 428, 492], "area": 176794}, {"id": 10457484, "category_id": 184, "iscrowd": 0, "bbox": [0, 52, 428, 137], "area": 34636}, {"id": 16645111, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 428, 89], "area": 25218}, {"id": 14142147, "category_id": 192, "iscrowd": 0, "bbox": [133, 29, 295, 98], "area": 9505}], "file_name": "000000080153.png", "image_id": 80153}, {"segments_info": [{"id": 5200205, "category_id": 1, "iscrowd": 0, "bbox": [172, 46, 208, 372], "area": 39125}, {"id": 10328228, "category_id": 36, "iscrowd": 0, "bbox": [113, 378, 379, 50], "area": 7878}, {"id": 15657711, "category_id": 159, "iscrowd": 0, "bbox": [0, 68, 640, 360], "area": 144729}, {"id": 13875355, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 185], "area": 76133}], "file_name": "000000080273.png", "image_id": 80273}, {"segments_info": [{"id": 5793146, "category_id": 22, "iscrowd": 0, "bbox": [71, 128, 437, 269], "area": 35267}, {"id": 6517644, "category_id": 22, "iscrowd": 0, "bbox": [185, 176, 290, 226], "area": 33560}, {"id": 13621213, "category_id": 154, "iscrowd": 0, "bbox": [0, 358, 640, 122], "area": 58956}, {"id": 2969671, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 344], "area": 128655}, {"id": 6586754, "category_id": 185, "iscrowd": 0, "bbox": [0, 192, 640, 217], "area": 49757}], "file_name": "000000080274.png", "image_id": 80274}, {"segments_info": [{"id": 3749168, "category_id": 1, "iscrowd": 0, "bbox": [254, 7, 84, 197], "area": 11209}, {"id": 4541026, "category_id": 1, "iscrowd": 0, "bbox": [0, 300, 46, 127], "area": 2767}, {"id": 10790317, "category_id": 1, "iscrowd": 0, "bbox": [527, 0, 105, 69], "area": 3931}, {"id": 1512464, "category_id": 1, "iscrowd": 0, "bbox": [421, 1, 86, 223], "area": 12757}, {"id": 8550261, "category_id": 1, "iscrowd": 0, "bbox": [146, 72, 130, 253], "area": 17911}, {"id": 7034964, "category_id": 1, "iscrowd": 0, "bbox": [330, 2, 103, 189], "area": 12043}, {"id": 9274469, "category_id": 1, "iscrowd": 0, "bbox": [490, 0, 64, 152], "area": 3875}, {"id": 10064543, "category_id": 32, "iscrowd": 0, "bbox": [182, 154, 25, 64], "area": 1042}, {"id": 5196869, "category_id": 33, "iscrowd": 0, "bbox": [235, 226, 67, 175], "area": 5824}, {"id": 12500157, "category_id": 46, "iscrowd": 0, "bbox": [533, 43, 16, 34], "area": 311}, {"id": 8881024, "category_id": 47, "iscrowd": 0, "bbox": [565, 70, 19, 34], "area": 560}, {"id": 8552574, "category_id": 47, "iscrowd": 0, "bbox": [590, 68, 21, 41], "area": 667}, {"id": 5796481, "category_id": 47, "iscrowd": 0, "bbox": [632, 55, 8, 23], "area": 136}, {"id": 6841699, "category_id": 47, "iscrowd": 0, "bbox": [611, 76, 17, 36], "area": 480}, {"id": 8421503, "category_id": 47, "iscrowd": 0, "bbox": [586, 69, 6, 33], "area": 153}, {"id": 10197140, "category_id": 47, "iscrowd": 0, "bbox": [578, 50, 11, 33], "area": 250}, {"id": 10788505, "category_id": 47, "iscrowd": 0, "bbox": [547, 48, 19, 53], "area": 731}, {"id": 12038572, "category_id": 47, "iscrowd": 0, "bbox": [563, 45, 15, 32], "area": 351}, {"id": 1843235, "category_id": 62, "iscrowd": 0, "bbox": [501, 112, 138, 201], "area": 14372}, {"id": 4145989, "category_id": 67, "iscrowd": 0, "bbox": [499, 51, 141, 264], "area": 8060}, {"id": 6316641, "category_id": 171, "iscrowd": 0, "bbox": [0, 16, 430, 330], "area": 35335}, {"id": 8686479, "category_id": 175, "iscrowd": 0, "bbox": [0, 373, 325, 54], "area": 11434}, {"id": 9802120, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 265, 160], "area": 24558}, {"id": 1781549, "category_id": 184, "iscrowd": 0, "bbox": [601, 0, 39, 52], "area": 1263}, {"id": 7305854, "category_id": 190, "iscrowd": 0, "bbox": [20, 53, 620, 374], "area": 95088}], "file_name": "000000080340.png", "image_id": 80340}, {"segments_info": [{"id": 9018278, "category_id": 88, "iscrowd": 0, "bbox": [224, 112, 169, 151], "area": 18854}], "file_name": "000000080413.png", "image_id": 80413}, {"segments_info": [{"id": 6648175, "category_id": 1, "iscrowd": 0, "bbox": [141, 65, 143, 167], "area": 9981}, {"id": 7237776, "category_id": 1, "iscrowd": 0, "bbox": [401, 60, 141, 193], "area": 10794}, {"id": 9150353, "category_id": 1, "iscrowd": 0, "bbox": [243, 63, 106, 102], "area": 4523}, {"id": 3750200, "category_id": 19, "iscrowd": 0, "bbox": [310, 94, 330, 293], "area": 36891}, {"id": 4806741, "category_id": 19, "iscrowd": 0, "bbox": [2, 185, 129, 148], "area": 8577}, {"id": 3157547, "category_id": 19, "iscrowd": 0, "bbox": [44, 85, 341, 305], "area": 37354}, {"id": 3488317, "category_id": 19, "iscrowd": 0, "bbox": [227, 256, 134, 104], "area": 2865}, {"id": 10525832, "category_id": 184, "iscrowd": 0, "bbox": [13, 34, 627, 112], "area": 8438}, {"id": 16250611, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 78], "area": 28710}, {"id": 7443852, "category_id": 193, "iscrowd": 0, "bbox": [0, 109, 640, 255], "area": 41813}, {"id": 7239294, "category_id": 194, "iscrowd": 0, "bbox": [0, 135, 640, 292], "area": 52976}, {"id": 11773329, "category_id": 197, "iscrowd": 0, "bbox": [0, 30, 640, 94], "area": 25853}], "file_name": "000000080659.png", "image_id": 80659}, {"segments_info": [{"id": 6318259, "category_id": 15, "iscrowd": 0, "bbox": [196, 148, 432, 476], "area": 119789}, {"id": 9742295, "category_id": 17, "iscrowd": 0, "bbox": [65, 121, 469, 418], "area": 58809}, {"id": 4281778, "category_id": 151, "iscrowd": 0, "bbox": [15, 0, 609, 122], "area": 24515}, {"id": 2568582, "category_id": 181, "iscrowd": 0, "bbox": [0, 74, 579, 94], "area": 14671}, {"id": 3296160, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 254], "area": 31001}, {"id": 15987958, "category_id": 187, "iscrowd": 0, "bbox": [223, 0, 402, 80], "area": 7158}, {"id": 11717612, "category_id": 191, "iscrowd": 0, "bbox": [15, 239, 256, 63], "area": 6290}, {"id": 2972594, "category_id": 193, "iscrowd": 0, "bbox": [0, 232, 288, 393], "area": 68311}, {"id": 8029626, "category_id": 197, "iscrowd": 0, "bbox": [0, 60, 607, 182], "area": 41211}], "file_name": "000000080666.png", "image_id": 80666}, {"segments_info": [{"id": 6244173, "category_id": 1, "iscrowd": 0, "bbox": [220, 117, 202, 250], "area": 27590}, {"id": 11513263, "category_id": 35, "iscrowd": 0, "bbox": [204, 331, 260, 46], "area": 2352}, {"id": 15132132, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 214756}, {"id": 3092792, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 577, 86], "area": 28241}], "file_name": "000000080671.png", "image_id": 80671}, {"segments_info": [{"id": 3618895, "category_id": 1, "iscrowd": 0, "bbox": [248, 35, 175, 350], "area": 20995}, {"id": 2567258, "category_id": 1, "iscrowd": 0, "bbox": [68, 141, 297, 321], "area": 52687}, {"id": 4080743, "category_id": 47, "iscrowd": 0, "bbox": [411, 132, 29, 44], "area": 880}, {"id": 5003631, "category_id": 47, "iscrowd": 0, "bbox": [0, 325, 50, 154], "area": 7162}, {"id": 3817830, "category_id": 47, "iscrowd": 0, "bbox": [449, 131, 24, 41], "area": 677}, {"id": 12175076, "category_id": 48, "iscrowd": 0, "bbox": [30, 170, 45, 5], "area": 156}, {"id": 3754081, "category_id": 48, "iscrowd": 0, "bbox": [61, 445, 180, 87], "area": 2802}, {"id": 4612003, "category_id": 59, "iscrowd": 0, "bbox": [162, 362, 143, 136], "area": 11462}, {"id": 1186110, "category_id": 62, "iscrowd": 0, "bbox": [48, 284, 320, 100], "area": 5600}, {"id": 5463669, "category_id": 67, "iscrowd": 0, "bbox": [2, 322, 478, 308], "area": 80208}, {"id": 4742046, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 480, 243], "area": 53823}, {"id": 2040376, "category_id": 189, "iscrowd": 0, "bbox": [0, 144, 480, 496], "area": 29619}, {"id": 1186358, "category_id": 190, "iscrowd": 0, "bbox": [36, 234, 444, 217], "area": 15596}, {"id": 2042219, "category_id": 196, "iscrowd": 0, "bbox": [202, 363, 73, 30], "area": 432}], "file_name": "000000080932.png", "image_id": 80932}, {"segments_info": [{"id": 7045550, "category_id": 17, "iscrowd": 0, "bbox": [26, 130, 599, 235], "area": 85191}, {"id": 989501, "category_id": 44, "iscrowd": 0, "bbox": [550, 0, 87, 172], "area": 10504}, {"id": 1252922, "category_id": 47, "iscrowd": 0, "bbox": [528, 0, 45, 73], "area": 2575}, {"id": 4671826, "category_id": 73, "iscrowd": 0, "bbox": [4, 2, 636, 407], "area": 121920}, {"id": 725288, "category_id": 189, "iscrowd": 0, "bbox": [0, 154, 640, 284], "area": 29191}], "file_name": "000000080949.png", "image_id": 80949}, {"segments_info": [{"id": 7032647, "category_id": 33, "iscrowd": 0, "bbox": [368, 236, 175, 103], "area": 12454}, {"id": 7181482, "category_id": 62, "iscrowd": 0, "bbox": [95, 59, 142, 219], "area": 15843}, {"id": 2582147, "category_id": 63, "iscrowd": 0, "bbox": [206, 66, 409, 190], "area": 62864}, {"id": 10528422, "category_id": 191, "iscrowd": 0, "bbox": [0, 169, 640, 273], "area": 59755}, {"id": 7579295, "category_id": 193, "iscrowd": 0, "bbox": [0, 194, 640, 162], "area": 36970}, {"id": 12108700, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 218], "area": 69971}], "file_name": "000000081061.png", "image_id": 81061}, {"segments_info": [{"id": 3422797, "category_id": 1, "iscrowd": 0, "bbox": [548, 153, 21, 31], "area": 338}, {"id": 4406935, "category_id": 3, "iscrowd": 0, "bbox": [618, 148, 22, 32], "area": 452}, {"id": 5330792, "category_id": 4, "iscrowd": 0, "bbox": [612, 179, 28, 41], "area": 500}, {"id": 6846342, "category_id": 4, "iscrowd": 0, "bbox": [522, 203, 21, 44], "area": 470}, {"id": 5067625, "category_id": 4, "iscrowd": 0, "bbox": [532, 173, 102, 51], "area": 1689}, {"id": 5659996, "category_id": 8, "iscrowd": 0, "bbox": [84, 19, 439, 417], "area": 136763}, {"id": 7438487, "category_id": 166, "iscrowd": 0, "bbox": [495, 84, 145, 131], "area": 9951}, {"id": 3553098, "category_id": 181, "iscrowd": 0, "bbox": [580, 65, 44, 44], "area": 936}, {"id": 4147543, "category_id": 191, "iscrowd": 0, "bbox": [0, 196, 640, 284], "area": 85665}, {"id": 4477796, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 343], "area": 64941}, {"id": 3228506, "category_id": 198, "iscrowd": 0, "bbox": [0, 310, 107, 51], "area": 1876}], "file_name": "000000081394.png", "image_id": 81394}, {"segments_info": [{"id": 3686216, "category_id": 1, "iscrowd": 0, "bbox": [168, 252, 134, 379], "area": 29565}, {"id": 1448216, "category_id": 28, "iscrowd": 0, "bbox": [195, 206, 190, 194], "area": 18146}, {"id": 2829614, "category_id": 31, "iscrowd": 0, "bbox": [175, 419, 22, 58], "area": 778}, {"id": 7106932, "category_id": 118, "iscrowd": 0, "bbox": [0, 359, 478, 281], "area": 102305}, {"id": 4870730, "category_id": 178, "iscrowd": 0, "bbox": [0, 286, 56, 35], "area": 1084}, {"id": 4218189, "category_id": 184, "iscrowd": 0, "bbox": [0, 191, 442, 132], "area": 9953}, {"id": 15856369, "category_id": 187, "iscrowd": 0, "bbox": [92, 151, 323, 61], "area": 2023}, {"id": 9803670, "category_id": 191, "iscrowd": 0, "bbox": [21, 312, 114, 20], "area": 345}, {"id": 10923699, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 478, 445], "area": 124118}], "file_name": "000000081594.png", "image_id": 81594}, {"segments_info": [{"id": 6250355, "category_id": 1, "iscrowd": 0, "bbox": [456, 139, 184, 334], "area": 24805}, {"id": 5264517, "category_id": 44, "iscrowd": 0, "bbox": [0, 159, 37, 250], "area": 6102}, {"id": 5267054, "category_id": 49, "iscrowd": 0, "bbox": [331, 145, 170, 77], "area": 5258}, {"id": 9676983, "category_id": 61, "iscrowd": 0, "bbox": [106, 137, 430, 239], "area": 61346}, {"id": 7371922, "category_id": 67, "iscrowd": 0, "bbox": [1, 206, 629, 267], "area": 79449}, {"id": 5205387, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 237], "area": 104380}, {"id": 197898, "category_id": 189, "iscrowd": 0, "bbox": [537, 261, 21, 24], "area": 226}, {"id": 3293511, "category_id": 196, "iscrowd": 0, "bbox": [400, 141, 18, 21], "area": 135}], "file_name": "000000081738.png", "image_id": 81738}, {"segments_info": [{"id": 2498334, "category_id": 18, "iscrowd": 0, "bbox": [231, 154, 264, 303], "area": 50669}, {"id": 5656657, "category_id": 18, "iscrowd": 0, "bbox": [31, 126, 168, 123], "area": 9548}, {"id": 11119291, "category_id": 18, "iscrowd": 0, "bbox": [472, 76, 129, 70], "area": 4648}, {"id": 8420986, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 256], "area": 66352}, {"id": 10855078, "category_id": 185, "iscrowd": 0, "bbox": [142, 66, 498, 98], "area": 30457}, {"id": 16249841, "category_id": 187, "iscrowd": 0, "bbox": [165, 0, 72, 22], "area": 1302}, {"id": 8158089, "category_id": 194, "iscrowd": 0, "bbox": [0, 317, 640, 155], "area": 19510}], "file_name": "000000081766.png", "image_id": 81766}, {"segments_info": [{"id": 3026482, "category_id": 1, "iscrowd": 0, "bbox": [269, 130, 248, 236], "area": 11831}, {"id": 1974062, "category_id": 1, "iscrowd": 0, "bbox": [175, 294, 73, 91], "area": 4286}, {"id": 2630445, "category_id": 1, "iscrowd": 0, "bbox": [471, 314, 119, 88], "area": 5069}, {"id": 3290689, "category_id": 1, "iscrowd": 0, "bbox": [320, 275, 88, 122], "area": 5689}, {"id": 1710625, "category_id": 1, "iscrowd": 0, "bbox": [47, 284, 112, 108], "area": 6608}, {"id": 3428175, "category_id": 42, "iscrowd": 0, "bbox": [313, 376, 117, 22], "area": 1631}, {"id": 4075089, "category_id": 42, "iscrowd": 0, "bbox": [473, 383, 100, 18], "area": 1464}, {"id": 4863580, "category_id": 42, "iscrowd": 0, "bbox": [182, 379, 86, 18], "area": 1265}, {"id": 5000018, "category_id": 42, "iscrowd": 0, "bbox": [70, 380, 102, 15], "area": 1171}, {"id": 7961729, "category_id": 154, "iscrowd": 0, "bbox": [0, 342, 640, 85], "area": 30336}, {"id": 11579306, "category_id": 155, "iscrowd": 0, "bbox": [0, 214, 640, 170], "area": 68601}, {"id": 13946311, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 225], "area": 133986}], "file_name": "000000081988.png", "image_id": 81988}, {"segments_info": [{"id": 6377039, "category_id": 1, "iscrowd": 0, "bbox": [10, 253, 24, 36], "area": 651}, {"id": 1989519, "category_id": 1, "iscrowd": 0, "bbox": [244, 211, 3, 18], "area": 44}, {"id": 3420472, "category_id": 1, "iscrowd": 0, "bbox": [211, 188, 12, 22], "area": 145}, {"id": 2699626, "category_id": 1, "iscrowd": 0, "bbox": [70, 178, 45, 158], "area": 2445}, {"id": 3416631, "category_id": 1, "iscrowd": 0, "bbox": [341, 218, 10, 65], "area": 286}, {"id": 3683374, "category_id": 1, "iscrowd": 0, "bbox": [573, 112, 51, 25], "area": 553}, {"id": 3947059, "category_id": 1, "iscrowd": 0, "bbox": [397, 144, 30, 76], "area": 1326}, {"id": 3553087, "category_id": 1, "iscrowd": 0, "bbox": [256, 197, 4, 10], "area": 21}, {"id": 6902609, "category_id": 1, "iscrowd": 0, "bbox": [107, 226, 15, 73], "area": 737}, {"id": 2956826, "category_id": 1, "iscrowd": 0, "bbox": [484, 133, 14, 83], "area": 606}, {"id": 7232351, "category_id": 1, "iscrowd": 0, "bbox": [604, 159, 23, 52], "area": 711}, {"id": 4736067, "category_id": 7, "iscrowd": 0, "bbox": [118, 0, 522, 406], "area": 117742}, {"id": 5464933, "category_id": 125, "iscrowd": 0, "bbox": [31, 308, 58, 90], "area": 1633}, {"id": 9734280, "category_id": 128, "iscrowd": 0, "bbox": [270, 53, 122, 82], "area": 3346}, {"id": 2894894, "category_id": 147, "iscrowd": 0, "bbox": [0, 233, 611, 195], "area": 28313}, {"id": 4144443, "category_id": 175, "iscrowd": 0, "bbox": [0, 205, 80, 40], "area": 1516}, {"id": 6645595, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 439, 273], "area": 50904}, {"id": 16579579, "category_id": 187, "iscrowd": 0, "bbox": [292, 0, 190, 32], "area": 1882}, {"id": 6316900, "category_id": 191, "iscrowd": 0, "bbox": [33, 237, 311, 126], "area": 9733}, {"id": 13615023, "category_id": 192, "iscrowd": 0, "bbox": [275, 0, 103, 86], "area": 3859}, {"id": 5537145, "category_id": 193, "iscrowd": 0, "bbox": [0, 271, 393, 157], "area": 12883}, {"id": 6255742, "category_id": 194, "iscrowd": 0, "bbox": [114, 285, 328, 143], "area": 11944}, {"id": 4407098, "category_id": 197, "iscrowd": 0, "bbox": [32, 51, 225, 171], "area": 6032}, {"id": 9538697, "category_id": 198, "iscrowd": 0, "bbox": [239, 304, 20, 19], "area": 189}], "file_name": "000000082085.png", "image_id": 82085}, {"segments_info": [{"id": 10066594, "category_id": 62, "iscrowd": 0, "bbox": [0, 0, 603, 420], "area": 206621}, {"id": 10924483, "category_id": 88, "iscrowd": 0, "bbox": [247, 148, 109, 115], "area": 8609}, {"id": 10262675, "category_id": 88, "iscrowd": 0, "bbox": [352, 169, 78, 90], "area": 4638}], "file_name": "000000082180.png", "image_id": 82180}, {"segments_info": [{"id": 5132651, "category_id": 1, "iscrowd": 0, "bbox": [292, 52, 123, 202], "area": 6688}, {"id": 3745590, "category_id": 1, "iscrowd": 0, "bbox": [309, 30, 315, 398], "area": 60536}, {"id": 13353671, "category_id": 1, "iscrowd": 0, "bbox": [0, 103, 503, 325], "area": 74380}, {"id": 12166835, "category_id": 75, "iscrowd": 0, "bbox": [428, 389, 26, 27], "area": 250}, {"id": 12234422, "category_id": 75, "iscrowd": 0, "bbox": [545, 311, 63, 25], "area": 1053}, {"id": 788747, "category_id": 77, "iscrowd": 0, "bbox": [303, 378, 23, 46], "area": 644}, {"id": 730962, "category_id": 177, "iscrowd": 0, "bbox": [61, 13, 366, 247], "area": 12980}, {"id": 7436944, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 108170}, {"id": 3761289, "category_id": 200, "iscrowd": 0, "bbox": [0, 344, 326, 84], "area": 7394}], "file_name": "000000082688.png", "image_id": 82688}, {"segments_info": [{"id": 5726307, "category_id": 1, "iscrowd": 0, "bbox": [1, 5, 112, 141], "area": 12809}, {"id": 8360602, "category_id": 16, "iscrowd": 0, "bbox": [103, 314, 138, 184], "area": 8261}, {"id": 7109770, "category_id": 47, "iscrowd": 0, "bbox": [121, 61, 19, 27], "area": 409}, {"id": 5337462, "category_id": 62, "iscrowd": 0, "bbox": [97, 151, 170, 234], "area": 19705}, {"id": 2976885, "category_id": 62, "iscrowd": 0, "bbox": [171, 121, 88, 113], "area": 3170}, {"id": 5341315, "category_id": 62, "iscrowd": 0, "bbox": [32, 141, 93, 238], "area": 9033}, {"id": 5079174, "category_id": 62, "iscrowd": 0, "bbox": [279, 141, 148, 246], "area": 7277}, {"id": 2712171, "category_id": 62, "iscrowd": 0, "bbox": [223, 132, 92, 121], "area": 3764}, {"id": 4089965, "category_id": 62, "iscrowd": 0, "bbox": [1, 139, 60, 220], "area": 7133}, {"id": 3238516, "category_id": 62, "iscrowd": 0, "bbox": [275, 134, 96, 120], "area": 3578}, {"id": 2714231, "category_id": 62, "iscrowd": 0, "bbox": [325, 115, 62, 56], "area": 1509}, {"id": 8823981, "category_id": 67, "iscrowd": 0, "bbox": [93, 143, 299, 45], "area": 6059}, {"id": 2447217, "category_id": 107, "iscrowd": 0, "bbox": [0, 67, 427, 196], "area": 23566}, {"id": 11849442, "category_id": 130, "iscrowd": 0, "bbox": [181, 11, 42, 40], "area": 998}, {"id": 926257, "category_id": 176, "iscrowd": 0, "bbox": [355, 0, 72, 53], "area": 3373}, {"id": 3296864, "category_id": 181, "iscrowd": 0, "bbox": [99, 0, 269, 72], "area": 13735}, {"id": 6851223, "category_id": 189, "iscrowd": 0, "bbox": [134, 148, 207, 38], "area": 362}, {"id": 8888230, "category_id": 190, "iscrowd": 0, "bbox": [0, 253, 427, 387], "area": 116721}, {"id": 5932439, "category_id": 196, "iscrowd": 0, "bbox": [0, 42, 427, 47], "area": 6878}], "file_name": "000000082696.png", "image_id": 82696}, {"segments_info": [{"id": 7957348, "category_id": 1, "iscrowd": 0, "bbox": [171, 119, 136, 88], "area": 3680}, {"id": 11512730, "category_id": 42, "iscrowd": 0, "bbox": [219, 71, 114, 128], "area": 3570}, {"id": 9600342, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 265819}], "file_name": "000000082715.png", "image_id": 82715}, {"segments_info": [{"id": 4211011, "category_id": 65, "iscrowd": 0, "bbox": [0, 288, 426, 352], "area": 123608}, {"id": 13487051, "category_id": 73, "iscrowd": 0, "bbox": [52, 431, 279, 99], "area": 17511}, {"id": 8750216, "category_id": 181, "iscrowd": 0, "bbox": [120, 0, 141, 163], "area": 21671}, {"id": 3487289, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 426, 326], "area": 109850}], "file_name": "000000082765.png", "image_id": 82765}, {"segments_info": [{"id": 5206424, "category_id": 18, "iscrowd": 0, "bbox": [123, 74, 392, 404], "area": 78226}, {"id": 14345189, "category_id": 61, "iscrowd": 0, "bbox": [287, 484, 158, 108], "area": 14259}, {"id": 2558513, "category_id": 62, "iscrowd": 0, "bbox": [75, 184, 398, 268], "area": 32733}, {"id": 6725581, "category_id": 67, "iscrowd": 0, "bbox": [0, 406, 640, 185], "area": 70688}, {"id": 4422314, "category_id": 189, "iscrowd": 0, "bbox": [0, 460, 640, 141], "area": 5352}, {"id": 198412, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 500], "area": 167617}], "file_name": "000000082807.png", "image_id": 82807}, {"segments_info": [{"id": 1250583, "category_id": 1, "iscrowd": 0, "bbox": [416, 223, 39, 60], "area": 1227}, {"id": 3159610, "category_id": 1, "iscrowd": 0, "bbox": [304, 252, 37, 106], "area": 1942}, {"id": 3882562, "category_id": 1, "iscrowd": 0, "bbox": [327, 241, 24, 75], "area": 775}, {"id": 4474956, "category_id": 1, "iscrowd": 0, "bbox": [377, 224, 19, 38], "area": 305}, {"id": 2566442, "category_id": 1, "iscrowd": 0, "bbox": [391, 225, 20, 42], "area": 440}, {"id": 3486257, "category_id": 1, "iscrowd": 0, "bbox": [588, 176, 52, 133], "area": 3798}, {"id": 1250325, "category_id": 1, "iscrowd": 0, "bbox": [504, 193, 68, 130], "area": 2956}, {"id": 592138, "category_id": 1, "iscrowd": 0, "bbox": [454, 203, 30, 65], "area": 759}, {"id": 2895664, "category_id": 1, "iscrowd": 0, "bbox": [249, 263, 41, 96], "area": 1221}, {"id": 855824, "category_id": 1, "iscrowd": 0, "bbox": [348, 228, 73, 132], "area": 3766}, {"id": 1842462, "category_id": 1, "iscrowd": 0, "bbox": [479, 210, 32, 75], "area": 1018}, {"id": 5594207, "category_id": 7, "iscrowd": 0, "bbox": [1, 225, 326, 130], "area": 27086}, {"id": 1316116, "category_id": 27, "iscrowd": 0, "bbox": [335, 251, 27, 31], "area": 333}, {"id": 328965, "category_id": 27, "iscrowd": 0, "bbox": [348, 264, 43, 57], "area": 1532}, {"id": 789516, "category_id": 27, "iscrowd": 0, "bbox": [262, 273, 25, 44], "area": 795}, {"id": 3029058, "category_id": 31, "iscrowd": 0, "bbox": [301, 270, 23, 47], "area": 146}, {"id": 8225413, "category_id": 31, "iscrowd": 0, "bbox": [342, 304, 22, 35], "area": 523}, {"id": 1842461, "category_id": 33, "iscrowd": 0, "bbox": [424, 274, 52, 80], "area": 2372}, {"id": 921103, "category_id": 33, "iscrowd": 0, "bbox": [304, 319, 15, 40], "area": 349}, {"id": 789517, "category_id": 33, "iscrowd": 0, "bbox": [476, 251, 24, 33], "area": 465}, {"id": 2367774, "category_id": 33, "iscrowd": 0, "bbox": [445, 244, 18, 28], "area": 290}, {"id": 986894, "category_id": 33, "iscrowd": 0, "bbox": [507, 266, 38, 46], "area": 1000}, {"id": 5064247, "category_id": 33, "iscrowd": 0, "bbox": [409, 248, 9, 15], "area": 93}, {"id": 1052725, "category_id": 33, "iscrowd": 0, "bbox": [241, 317, 33, 42], "area": 1083}, {"id": 3884620, "category_id": 144, "iscrowd": 0, "bbox": [181, 350, 19, 10], "area": 125}, {"id": 15066084, "category_id": 151, "iscrowd": 0, "bbox": [17, 70, 16, 24], "area": 178}, {"id": 7829876, "category_id": 181, "iscrowd": 0, "bbox": [0, 52, 640, 308], "area": 11080}, {"id": 11186092, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 231], "area": 86741}, {"id": 5660258, "category_id": 190, "iscrowd": 0, "bbox": [198, 225, 442, 135], "area": 18547}, {"id": 7433322, "category_id": 195, "iscrowd": 0, "bbox": [552, 153, 45, 60], "area": 1191}, {"id": 7830396, "category_id": 197, "iscrowd": 0, "bbox": [315, 121, 237, 134], "area": 4949}, {"id": 8685956, "category_id": 199, "iscrowd": 0, "bbox": [240, 82, 400, 278], "area": 2706}], "file_name": "000000082812.png", "image_id": 82812}, {"segments_info": [{"id": 4209724, "category_id": 1, "iscrowd": 0, "bbox": [583, 139, 8, 23], "area": 128}, {"id": 3225681, "category_id": 1, "iscrowd": 0, "bbox": [76, 134, 12, 29], "area": 174}, {"id": 7237995, "category_id": 1, "iscrowd": 0, "bbox": [481, 146, 9, 23], "area": 141}, {"id": 4607827, "category_id": 1, "iscrowd": 0, "bbox": [569, 138, 7, 16], "area": 58}, {"id": 1578772, "category_id": 1, "iscrowd": 0, "bbox": [598, 130, 8, 10], "area": 53}, {"id": 2303283, "category_id": 1, "iscrowd": 0, "bbox": [94, 131, 7, 26], "area": 127}, {"id": 3753811, "category_id": 2, "iscrowd": 0, "bbox": [305, 175, 10, 20], "area": 121}, {"id": 4211781, "category_id": 2, "iscrowd": 0, "bbox": [273, 175, 27, 21], "area": 265}, {"id": 5465198, "category_id": 2, "iscrowd": 0, "bbox": [314, 180, 8, 13], "area": 67}, {"id": 3356737, "category_id": 2, "iscrowd": 0, "bbox": [331, 178, 22, 14], "area": 206}, {"id": 3948613, "category_id": 2, "iscrowd": 0, "bbox": [314, 177, 13, 17], "area": 60}, {"id": 6320501, "category_id": 2, "iscrowd": 0, "bbox": [565, 144, 15, 16], "area": 126}, {"id": 5130302, "category_id": 3, "iscrowd": 0, "bbox": [523, 111, 23, 17], "area": 178}, {"id": 5920072, "category_id": 3, "iscrowd": 0, "bbox": [413, 116, 17, 9], "area": 99}, {"id": 3025960, "category_id": 3, "iscrowd": 0, "bbox": [95, 119, 8, 13], "area": 63}, {"id": 3090989, "category_id": 3, "iscrowd": 0, "bbox": [446, 117, 8, 6], "area": 37}, {"id": 4604216, "category_id": 8, "iscrowd": 0, "bbox": [12, 109, 59, 25], "area": 1221}, {"id": 4212311, "category_id": 9, "iscrowd": 0, "bbox": [541, 222, 54, 22], "area": 523}, {"id": 6247496, "category_id": 9, "iscrowd": 0, "bbox": [100, 280, 85, 40], "area": 2097}, {"id": 10140631, "category_id": 9, "iscrowd": 0, "bbox": [488, 225, 40, 27], "area": 534}, {"id": 3948357, "category_id": 9, "iscrowd": 0, "bbox": [563, 218, 69, 21], "area": 683}, {"id": 4077898, "category_id": 9, "iscrowd": 0, "bbox": [50, 282, 70, 41], "area": 1989}, {"id": 9735297, "category_id": 9, "iscrowd": 0, "bbox": [375, 237, 71, 30], "area": 1272}, {"id": 8368322, "category_id": 9, "iscrowd": 0, "bbox": [535, 225, 32, 18], "area": 225}, {"id": 8425653, "category_id": 9, "iscrowd": 0, "bbox": [456, 231, 53, 24], "area": 564}, {"id": 2634314, "category_id": 9, "iscrowd": 0, "bbox": [1, 305, 14, 23], "area": 192}, {"id": 6003635, "category_id": 9, "iscrowd": 0, "bbox": [513, 225, 40, 26], "area": 584}, {"id": 4012608, "category_id": 9, "iscrowd": 0, "bbox": [597, 215, 43, 20], "area": 305}, {"id": 2771045, "category_id": 9, "iscrowd": 0, "bbox": [0, 287, 67, 41], "area": 1745}, {"id": 8362422, "category_id": 9, "iscrowd": 0, "bbox": [418, 231, 70, 30], "area": 1191}, {"id": 7766911, "category_id": 9, "iscrowd": 1, "bbox": [554, 207, 86, 190], "area": 2638}, {"id": 10991808, "category_id": 15, "iscrowd": 0, "bbox": [530, 153, 25, 15], "area": 182}, {"id": 5662041, "category_id": 128, "iscrowd": 0, "bbox": [104, 116, 182, 90], "area": 12243}, {"id": 6716557, "category_id": 144, "iscrowd": 0, "bbox": [51, 207, 544, 87], "area": 5402}, {"id": 6119782, "category_id": 149, "iscrowd": 0, "bbox": [263, 153, 377, 37], "area": 435}, {"id": 5787457, "category_id": 166, "iscrowd": 0, "bbox": [132, 200, 90, 30], "area": 1769}, {"id": 4547936, "category_id": 178, "iscrowd": 0, "bbox": [0, 221, 640, 206], "area": 95489}, {"id": 2703168, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 172], "area": 88927}, {"id": 5202818, "category_id": 185, "iscrowd": 0, "bbox": [219, 191, 37, 34], "area": 839}, {"id": 5924979, "category_id": 191, "iscrowd": 0, "bbox": [0, 134, 547, 85], "area": 5627}, {"id": 4947327, "category_id": 193, "iscrowd": 0, "bbox": [0, 118, 640, 138], "area": 34993}], "file_name": "000000082821.png", "image_id": 82821}, {"segments_info": [{"id": 3491179, "category_id": 6, "iscrowd": 0, "bbox": [84, 171, 477, 272], "area": 104981}, {"id": 6649976, "category_id": 13, "iscrowd": 0, "bbox": [47, 185, 19, 21], "area": 260}, {"id": 4742085, "category_id": 13, "iscrowd": 0, "bbox": [60, 177, 14, 16], "area": 169}, {"id": 5006967, "category_id": 128, "iscrowd": 0, "bbox": [132, 46, 508, 297], "area": 69290}, {"id": 6846847, "category_id": 149, "iscrowd": 0, "bbox": [0, 324, 640, 130], "area": 34061}, {"id": 2576210, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 254], "area": 66994}, {"id": 10336451, "category_id": 191, "iscrowd": 0, "bbox": [0, 336, 97, 37], "area": 1541}, {"id": 1863781, "category_id": 193, "iscrowd": 0, "bbox": [0, 203, 103, 149], "area": 12251}], "file_name": "000000082846.png", "image_id": 82846}, {"segments_info": [{"id": 2763569, "category_id": 1, "iscrowd": 0, "bbox": [590, 65, 50, 177], "area": 4431}, {"id": 3946842, "category_id": 1, "iscrowd": 0, "bbox": [358, 90, 76, 118], "area": 3751}, {"id": 3291711, "category_id": 1, "iscrowd": 0, "bbox": [456, 76, 87, 163], "area": 7069}, {"id": 4933702, "category_id": 31, "iscrowd": 0, "bbox": [160, 80, 47, 100], "area": 2676}, {"id": 8222414, "category_id": 34, "iscrowd": 0, "bbox": [415, 48, 30, 9], "area": 196}, {"id": 5530211, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 444], "area": 84359}, {"id": 16118766, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 241], "area": 80490}, {"id": 7114418, "category_id": 193, "iscrowd": 0, "bbox": [0, 202, 583, 242], "area": 97387}], "file_name": "000000082986.png", "image_id": 82986}, {"segments_info": [{"id": 3294551, "category_id": 22, "iscrowd": 0, "bbox": [456, 124, 164, 196], "area": 23835}, {"id": 3293521, "category_id": 22, "iscrowd": 0, "bbox": [245, 197, 147, 78], "area": 5490}, {"id": 5201250, "category_id": 184, "iscrowd": 0, "bbox": [45, 0, 595, 328], "area": 96600}, {"id": 15788255, "category_id": 187, "iscrowd": 0, "bbox": [230, 0, 410, 243], "area": 51177}, {"id": 8629430, "category_id": 194, "iscrowd": 0, "bbox": [21, 305, 619, 175], "area": 95718}], "file_name": "000000083113.png", "image_id": 83113}, {"segments_info": [{"id": 3950488, "category_id": 1, "iscrowd": 0, "bbox": [163, 145, 78, 169], "area": 4175}, {"id": 5257245, "category_id": 1, "iscrowd": 0, "bbox": [55, 0, 43, 110], "area": 3031}, {"id": 5059368, "category_id": 1, "iscrowd": 0, "bbox": [399, 53, 39, 68], "area": 1776}, {"id": 5480351, "category_id": 37, "iscrowd": 0, "bbox": [241, 59, 7, 8], "area": 44}, {"id": 7438988, "category_id": 43, "iscrowd": 0, "bbox": [138, 168, 30, 33], "area": 457}, {"id": 3618896, "category_id": 62, "iscrowd": 0, "bbox": [396, 66, 40, 52], "area": 287}, {"id": 7697523, "category_id": 145, "iscrowd": 0, "bbox": [0, 62, 640, 365], "area": 200209}, {"id": 5257032, "category_id": 199, "iscrowd": 0, "bbox": [12, 0, 628, 122], "area": 49233}], "file_name": "000000083172.png", "image_id": 83172}, {"segments_info": [{"id": 5852228, "category_id": 1, "iscrowd": 0, "bbox": [434, 201, 66, 71], "area": 2370}, {"id": 1250581, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 88, 116], "area": 8127}, {"id": 2308193, "category_id": 1, "iscrowd": 0, "bbox": [472, 108, 28, 103], "area": 1204}, {"id": 4404300, "category_id": 44, "iscrowd": 0, "bbox": [482, 3, 18, 74], "area": 852}, {"id": 3419749, "category_id": 44, "iscrowd": 0, "bbox": [433, 0, 62, 64], "area": 2886}, {"id": 8091794, "category_id": 47, "iscrowd": 0, "bbox": [404, 16, 30, 31], "area": 641}, {"id": 3756739, "category_id": 58, "iscrowd": 0, "bbox": [197, 180, 108, 28], "area": 1609}, {"id": 4546007, "category_id": 58, "iscrowd": 0, "bbox": [269, 161, 68, 14], "area": 610}, {"id": 5009102, "category_id": 58, "iscrowd": 0, "bbox": [154, 140, 91, 27], "area": 904}, {"id": 3493042, "category_id": 58, "iscrowd": 0, "bbox": [39, 181, 139, 35], "area": 2890}, {"id": 4413891, "category_id": 58, "iscrowd": 0, "bbox": [255, 208, 81, 16], "area": 1129}, {"id": 4481725, "category_id": 58, "iscrowd": 0, "bbox": [113, 121, 103, 21], "area": 1246}, {"id": 4745680, "category_id": 58, "iscrowd": 0, "bbox": [164, 142, 98, 29], "area": 1220}, {"id": 5074644, "category_id": 58, "iscrowd": 0, "bbox": [36, 170, 144, 34], "area": 1158}, {"id": 6323674, "category_id": 58, "iscrowd": 0, "bbox": [206, 173, 87, 18], "area": 850}, {"id": 4613577, "category_id": 58, "iscrowd": 0, "bbox": [178, 163, 99, 24], "area": 1151}, {"id": 4745673, "category_id": 58, "iscrowd": 0, "bbox": [35, 156, 142, 31], "area": 1755}, {"id": 4481734, "category_id": 58, "iscrowd": 0, "bbox": [121, 131, 111, 25], "area": 1356}, {"id": 2966478, "category_id": 58, "iscrowd": 0, "bbox": [326, 199, 74, 18], "area": 788}, {"id": 3558056, "category_id": 58, "iscrowd": 1, "bbox": [20, 0, 466, 270], "area": 14701}, {"id": 3686792, "category_id": 189, "iscrowd": 0, "bbox": [292, 0, 208, 140], "area": 10166}, {"id": 6316642, "category_id": 191, "iscrowd": 0, "bbox": [77, 0, 203, 124], "area": 15383}], "file_name": "000000083531.png", "image_id": 83531}, {"segments_info": [{"id": 3354164, "category_id": 1, "iscrowd": 0, "bbox": [334, 242, 47, 174], "area": 4805}, {"id": 6507587, "category_id": 35, "iscrowd": 0, "bbox": [291, 402, 170, 17], "area": 458}, {"id": 9404283, "category_id": 159, "iscrowd": 0, "bbox": [0, 316, 640, 127], "area": 49183}, {"id": 4801870, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 389], "area": 228872}], "file_name": "000000083540.png", "image_id": 83540}, {"segments_info": [{"id": 5462642, "category_id": 1, "iscrowd": 0, "bbox": [232, 205, 10, 19], "area": 100}, {"id": 6777447, "category_id": 1, "iscrowd": 0, "bbox": [183, 254, 95, 96], "area": 4232}, {"id": 3815234, "category_id": 1, "iscrowd": 0, "bbox": [60, 32, 18, 29], "area": 211}, {"id": 7561058, "category_id": 1, "iscrowd": 0, "bbox": [26, 213, 19, 60], "area": 526}, {"id": 5597052, "category_id": 1, "iscrowd": 0, "bbox": [255, 185, 11, 25], "area": 157}, {"id": 7367540, "category_id": 1, "iscrowd": 0, "bbox": [64, 211, 15, 60], "area": 512}, {"id": 3554628, "category_id": 1, "iscrowd": 0, "bbox": [214, 208, 13, 45], "area": 422}, {"id": 9077633, "category_id": 1, "iscrowd": 0, "bbox": [398, 187, 10, 15], "area": 94}, {"id": 8615028, "category_id": 1, "iscrowd": 0, "bbox": [280, 187, 96, 148], "area": 5240}, {"id": 8088947, "category_id": 1, "iscrowd": 0, "bbox": [46, 213, 24, 57], "area": 619}, {"id": 3887203, "category_id": 1, "iscrowd": 0, "bbox": [103, 215, 15, 47], "area": 338}, {"id": 6837597, "category_id": 1, "iscrowd": 0, "bbox": [3, 218, 30, 53], "area": 571}, {"id": 4406077, "category_id": 1, "iscrowd": 0, "bbox": [98, 218, 70, 143], "area": 5909}, {"id": 5592159, "category_id": 1, "iscrowd": 1, "bbox": [79, 41, 215, 230], "area": 2812}, {"id": 8293282, "category_id": 37, "iscrowd": 0, "bbox": [423, 239, 14, 9], "area": 107}, {"id": 5660268, "category_id": 39, "iscrowd": 0, "bbox": [367, 229, 17, 32], "area": 230}, {"id": 3228242, "category_id": 40, "iscrowd": 0, "bbox": [277, 260, 19, 23], "area": 341}, {"id": 4481386, "category_id": 145, "iscrowd": 0, "bbox": [0, 203, 640, 224], "area": 103593}, {"id": 4145990, "category_id": 161, "iscrowd": 0, "bbox": [0, 237, 84, 39], "area": 653}, {"id": 7371651, "category_id": 171, "iscrowd": 0, "bbox": [114, 186, 122, 75], "area": 5246}, {"id": 4736323, "category_id": 185, "iscrowd": 0, "bbox": [216, 199, 347, 57], "area": 6564}, {"id": 13942959, "category_id": 187, "iscrowd": 0, "bbox": [429, 0, 211, 67], "area": 7336}, {"id": 7106678, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 248], "area": 122457}, {"id": 3815470, "category_id": 199, "iscrowd": 0, "bbox": [613, 171, 27, 51], "area": 1039}], "file_name": "000000084031.png", "image_id": 84031}, {"segments_info": [{"id": 394757, "category_id": 1, "iscrowd": 0, "bbox": [255, 226, 39, 34], "area": 858}, {"id": 986377, "category_id": 1, "iscrowd": 0, "bbox": [337, 228, 18, 38], "area": 451}, {"id": 9342875, "category_id": 3, "iscrowd": 0, "bbox": [83, 263, 59, 41], "area": 1970}, {"id": 8221038, "category_id": 3, "iscrowd": 0, "bbox": [133, 261, 97, 76], "area": 6053}, {"id": 9480871, "category_id": 3, "iscrowd": 0, "bbox": [219, 262, 11, 17], "area": 113}, {"id": 7958891, "category_id": 3, "iscrowd": 0, "bbox": [1, 245, 45, 44], "area": 998}, {"id": 2697519, "category_id": 6, "iscrowd": 0, "bbox": [203, 120, 242, 245], "area": 50173}, {"id": 6579567, "category_id": 149, "iscrowd": 0, "bbox": [0, 287, 495, 193], "area": 60445}, {"id": 6974058, "category_id": 178, "iscrowd": 0, "bbox": [84, 285, 461, 61], "area": 4959}, {"id": 2829092, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 616, 337], "area": 130007}, {"id": 3882558, "category_id": 191, "iscrowd": 0, "bbox": [0, 328, 598, 152], "area": 10799}, {"id": 2904130, "category_id": 193, "iscrowd": 0, "bbox": [0, 287, 611, 129], "area": 13905}], "file_name": "000000084170.png", "image_id": 84170}, {"segments_info": [{"id": 3290742, "category_id": 1, "iscrowd": 0, "bbox": [38, 6, 189, 306], "area": 36517}, {"id": 2899818, "category_id": 1, "iscrowd": 0, "bbox": [250, 33, 160, 246], "area": 24229}, {"id": 6713781, "category_id": 1, "iscrowd": 0, "bbox": [199, 23, 86, 266], "area": 14045}, {"id": 7378632, "category_id": 44, "iscrowd": 0, "bbox": [507, 45, 18, 57], "area": 509}, {"id": 6786235, "category_id": 44, "iscrowd": 0, "bbox": [434, 39, 22, 61], "area": 956}, {"id": 3556217, "category_id": 48, "iscrowd": 0, "bbox": [133, 171, 23, 30], "area": 223}, {"id": 5465243, "category_id": 50, "iscrowd": 0, "bbox": [255, 106, 14, 49], "area": 147}, {"id": 7248841, "category_id": 50, "iscrowd": 0, "bbox": [28, 323, 83, 30], "area": 217}, {"id": 8759759, "category_id": 51, "iscrowd": 0, "bbox": [306, 171, 48, 29], "area": 1031}, {"id": 6262192, "category_id": 51, "iscrowd": 0, "bbox": [0, 205, 80, 44], "area": 1352}, {"id": 4941187, "category_id": 51, "iscrowd": 0, "bbox": [465, 278, 164, 113], "area": 8386}, {"id": 6272234, "category_id": 54, "iscrowd": 0, "bbox": [442, 274, 31, 25], "area": 374}, {"id": 2387309, "category_id": 56, "iscrowd": 0, "bbox": [471, 280, 150, 62], "area": 6627}, {"id": 3177358, "category_id": 56, "iscrowd": 0, "bbox": [0, 186, 42, 34], "area": 952}, {"id": 3184030, "category_id": 56, "iscrowd": 0, "bbox": [23, 207, 48, 18], "area": 620}, {"id": 5413302, "category_id": 67, "iscrowd": 0, "bbox": [503, 190, 137, 91], "area": 5904}, {"id": 3560571, "category_id": 79, "iscrowd": 0, "bbox": [408, 91, 155, 177], "area": 17311}, {"id": 2896195, "category_id": 81, "iscrowd": 0, "bbox": [179, 187, 30, 26], "area": 581}, {"id": 8169144, "category_id": 156, "iscrowd": 0, "bbox": [175, 9, 144, 91], "area": 2978}, {"id": 5801171, "category_id": 168, "iscrowd": 0, "bbox": [379, 32, 52, 123], "area": 2740}, {"id": 8693195, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 337], "area": 43981}, {"id": 5336217, "category_id": 196, "iscrowd": 0, "bbox": [203, 264, 293, 90], "area": 5962}, {"id": 5268910, "category_id": 199, "iscrowd": 0, "bbox": [152, 0, 488, 44], "area": 9134}], "file_name": "000000084241.png", "image_id": 84241}, {"segments_info": [{"id": 790549, "category_id": 1, "iscrowd": 0, "bbox": [568, 261, 28, 61], "area": 706}, {"id": 1382429, "category_id": 1, "iscrowd": 0, "bbox": [91, 259, 53, 133], "area": 2545}, {"id": 1645602, "category_id": 1, "iscrowd": 0, "bbox": [476, 262, 12, 45], "area": 304}, {"id": 2038550, "category_id": 1, "iscrowd": 0, "bbox": [416, 267, 37, 117], "area": 1625}, {"id": 2961204, "category_id": 1, "iscrowd": 0, "bbox": [489, 257, 45, 114], "area": 1984}, {"id": 2238785, "category_id": 1, "iscrowd": 0, "bbox": [126, 265, 24, 91], "area": 975}, {"id": 1512996, "category_id": 1, "iscrowd": 0, "bbox": [228, 255, 41, 104], "area": 1668}, {"id": 3551275, "category_id": 1, "iscrowd": 0, "bbox": [208, 264, 11, 28], "area": 141}, {"id": 3947580, "category_id": 1, "iscrowd": 0, "bbox": [170, 267, 17, 50], "area": 483}, {"id": 1185821, "category_id": 1, "iscrowd": 0, "bbox": [611, 263, 25, 74], "area": 1153}, {"id": 1777191, "category_id": 1, "iscrowd": 0, "bbox": [0, 247, 84, 225], "area": 10937}, {"id": 2371118, "category_id": 1, "iscrowd": 0, "bbox": [154, 269, 13, 49], "area": 268}, {"id": 4338797, "category_id": 1, "iscrowd": 0, "bbox": [460, 265, 20, 44], "area": 567}, {"id": 5790044, "category_id": 1, "iscrowd": 1, "bbox": [1, 4, 603, 379], "area": 19045}, {"id": 2239788, "category_id": 27, "iscrowd": 0, "bbox": [152, 273, 12, 23], "area": 182}, {"id": 2434600, "category_id": 31, "iscrowd": 0, "bbox": [484, 264, 29, 70], "area": 1133}, {"id": 526599, "category_id": 31, "iscrowd": 0, "bbox": [93, 276, 41, 70], "area": 1172}, {"id": 1380361, "category_id": 31, "iscrowd": 0, "bbox": [419, 289, 9, 29], "area": 129}, {"id": 460808, "category_id": 32, "iscrowd": 0, "bbox": [617, 277, 7, 18], "area": 93}, {"id": 3953513, "category_id": 32, "iscrowd": 0, "bbox": [232, 277, 2, 8], "area": 13}, {"id": 526343, "category_id": 33, "iscrowd": 0, "bbox": [427, 332, 42, 24], "area": 859}, {"id": 1777440, "category_id": 33, "iscrowd": 0, "bbox": [431, 354, 30, 37], "area": 1047}, {"id": 1382198, "category_id": 33, "iscrowd": 0, "bbox": [525, 319, 29, 59], "area": 1083}, {"id": 592393, "category_id": 33, "iscrowd": 0, "bbox": [45, 435, 41, 44], "area": 1328}, {"id": 1710106, "category_id": 85, "iscrowd": 0, "bbox": [204, 349, 13, 25], "area": 182}, {"id": 3683392, "category_id": 85, "iscrowd": 0, "bbox": [199, 358, 6, 6], "area": 30}, {"id": 2958126, "category_id": 85, "iscrowd": 0, "bbox": [190, 357, 7, 7], "area": 40}, {"id": 2895418, "category_id": 107, "iscrowd": 0, "bbox": [174, 232, 210, 196], "area": 24836}, {"id": 8551285, "category_id": 130, "iscrowd": 0, "bbox": [0, 51, 631, 166], "area": 6712}, {"id": 3685990, "category_id": 156, "iscrowd": 0, "bbox": [427, 268, 71, 44], "area": 856}, {"id": 5725296, "category_id": 166, "iscrowd": 0, "bbox": [0, 197, 622, 118], "area": 24696}, {"id": 5658455, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 251], "area": 53558}, {"id": 7040628, "category_id": 190, "iscrowd": 0, "bbox": [0, 291, 640, 189], "area": 71930}, {"id": 7631217, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 318], "area": 19806}], "file_name": "000000084270.png", "image_id": 84270}, {"segments_info": [{"id": 2302759, "category_id": 1, "iscrowd": 0, "bbox": [374, 142, 101, 121], "area": 6054}, {"id": 13747647, "category_id": 8, "iscrowd": 0, "bbox": [236, 96, 161, 27], "area": 3460}, {"id": 723980, "category_id": 17, "iscrowd": 0, "bbox": [261, 250, 294, 198], "area": 33673}, {"id": 2171168, "category_id": 63, "iscrowd": 0, "bbox": [0, 274, 640, 200], "area": 70317}, {"id": 3816251, "category_id": 63, "iscrowd": 0, "bbox": [1, 110, 199, 278], "area": 34898}, {"id": 5988191, "category_id": 72, "iscrowd": 0, "bbox": [531, 1, 108, 151], "area": 14093}, {"id": 1578517, "category_id": 75, "iscrowd": 0, "bbox": [517, 304, 43, 13], "area": 343}, {"id": 2961976, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 107, 147], "area": 12209}, {"id": 7631989, "category_id": 128, "iscrowd": 0, "bbox": [85, 0, 555, 342], "area": 120948}], "file_name": "000000084362.png", "image_id": 84362}, {"segments_info": [{"id": 3896980, "category_id": 59, "iscrowd": 0, "bbox": [21, 257, 304, 284], "area": 51938}, {"id": 12620154, "category_id": 72, "iscrowd": 0, "bbox": [87, 71, 164, 123], "area": 18380}, {"id": 6391956, "category_id": 109, "iscrowd": 0, "bbox": [278, 0, 83, 270], "area": 19499}, {"id": 4939112, "category_id": 156, "iscrowd": 0, "bbox": [98, 182, 167, 80], "area": 5761}, {"id": 3885404, "category_id": 161, "iscrowd": 0, "bbox": [0, 104, 106, 218], "area": 8827}, {"id": 2375756, "category_id": 189, "iscrowd": 0, "bbox": [0, 535, 169, 105], "area": 8463}, {"id": 8294292, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 296, 287], "area": 42048}], "file_name": "000000084431.png", "image_id": 84431}, {"segments_info": [{"id": 5792893, "category_id": 1, "iscrowd": 0, "bbox": [283, 215, 17, 26], "area": 240}, {"id": 10896137, "category_id": 28, "iscrowd": 0, "bbox": [232, 37, 398, 327], "area": 40596}, {"id": 9871525, "category_id": 62, "iscrowd": 0, "bbox": [213, 241, 173, 151], "area": 16050}, {"id": 8752016, "category_id": 154, "iscrowd": 0, "bbox": [0, 240, 640, 187], "area": 91002}, {"id": 6641989, "category_id": 155, "iscrowd": 0, "bbox": [0, 155, 640, 112], "area": 55188}, {"id": 14076875, "category_id": 168, "iscrowd": 0, "bbox": [215, 279, 40, 75], "area": 1808}, {"id": 10122575, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 175], "area": 67909}], "file_name": "000000084477.png", "image_id": 84477}, {"segments_info": [{"id": 3355963, "category_id": 1, "iscrowd": 0, "bbox": [190, 477, 24, 39], "area": 356}, {"id": 7631737, "category_id": 1, "iscrowd": 0, "bbox": [235, 98, 174, 254], "area": 12937}, {"id": 4474956, "category_id": 3, "iscrowd": 0, "bbox": [266, 500, 71, 26], "area": 822}, {"id": 3684664, "category_id": 3, "iscrowd": 0, "bbox": [229, 494, 40, 27], "area": 669}, {"id": 4408115, "category_id": 3, "iscrowd": 0, "bbox": [389, 510, 29, 16], "area": 426}, {"id": 4277319, "category_id": 15, "iscrowd": 0, "bbox": [265, 401, 161, 152], "area": 8881}, {"id": 3623244, "category_id": 41, "iscrowd": 0, "bbox": [268, 271, 78, 132], "area": 4462}, {"id": 8491684, "category_id": 130, "iscrowd": 0, "bbox": [105, 166, 109, 261], "area": 2605}, {"id": 12049133, "category_id": 151, "iscrowd": 0, "bbox": [184, 336, 41, 30], "area": 675}, {"id": 8027521, "category_id": 184, "iscrowd": 0, "bbox": [165, 286, 261, 245], "area": 17349}, {"id": 4539975, "category_id": 185, "iscrowd": 0, "bbox": [367, 409, 2, 14], "area": 15}, {"id": 14076857, "category_id": 187, "iscrowd": 0, "bbox": [121, 0, 305, 391], "area": 67407}, {"id": 3751491, "category_id": 191, "iscrowd": 0, "bbox": [0, 492, 426, 148], "area": 49192}, {"id": 5991029, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 416, 526], "area": 86199}], "file_name": "000000084492.png", "image_id": 84492}, {"segments_info": [{"id": 3555651, "category_id": 17, "iscrowd": 0, "bbox": [280, 178, 265, 170], "area": 20330}, {"id": 789774, "category_id": 27, "iscrowd": 0, "bbox": [466, 140, 144, 186], "area": 15671}, {"id": 658444, "category_id": 27, "iscrowd": 0, "bbox": [409, 118, 125, 63], "area": 4603}, {"id": 3745589, "category_id": 31, "iscrowd": 0, "bbox": [205, 184, 122, 92], "area": 6895}, {"id": 855309, "category_id": 33, "iscrowd": 0, "bbox": [190, 237, 365, 235], "area": 52093}, {"id": 2038808, "category_id": 33, "iscrowd": 0, "bbox": [134, 114, 237, 191], "area": 17319}, {"id": 727083, "category_id": 177, "iscrowd": 0, "bbox": [76, 0, 61, 256], "area": 7644}, {"id": 725526, "category_id": 188, "iscrowd": 0, "bbox": [522, 0, 118, 267], "area": 20721}, {"id": 658439, "category_id": 190, "iscrowd": 0, "bbox": [0, 90, 115, 182], "area": 16875}, {"id": 4802621, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 538, 183], "area": 64221}, {"id": 3420968, "category_id": 200, "iscrowd": 0, "bbox": [0, 250, 640, 230], "area": 73798}], "file_name": "000000084650.png", "image_id": 84650}, {"segments_info": [{"id": 11247521, "category_id": 48, "iscrowd": 0, "bbox": [246, 380, 116, 97], "area": 2797}, {"id": 10596527, "category_id": 51, "iscrowd": 0, "bbox": [344, 80, 216, 180], "area": 29521}, {"id": 8488838, "category_id": 67, "iscrowd": 0, "bbox": [1, 1, 611, 281], "area": 71025}, {"id": 2304082, "category_id": 122, "iscrowd": 0, "bbox": [324, 297, 177, 130], "area": 12958}, {"id": 6448743, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 494, 612], "area": 8088}, {"id": 5332093, "category_id": 196, "iscrowd": 0, "bbox": [0, 123, 612, 489], "area": 179296}], "file_name": "000000084664.png", "image_id": 84664}, {"segments_info": [{"id": 2502208, "category_id": 1, "iscrowd": 0, "bbox": [145, 172, 333, 458], "area": 54340}, {"id": 4214106, "category_id": 1, "iscrowd": 0, "bbox": [0, 158, 190, 472], "area": 62209}, {"id": 4807278, "category_id": 1, "iscrowd": 0, "bbox": [196, 286, 200, 348], "area": 31660}, {"id": 5146299, "category_id": 60, "iscrowd": 0, "bbox": [253, 370, 40, 35], "area": 874}, {"id": 1121841, "category_id": 63, "iscrowd": 0, "bbox": [422, 295, 58, 32], "area": 646}, {"id": 1317157, "category_id": 63, "iscrowd": 0, "bbox": [167, 313, 44, 88], "area": 2498}, {"id": 5058081, "category_id": 72, "iscrowd": 0, "bbox": [135, 229, 40, 59], "area": 2137}, {"id": 8425370, "category_id": 84, "iscrowd": 0, "bbox": [140, 365, 19, 83], "area": 815}, {"id": 923686, "category_id": 85, "iscrowd": 0, "bbox": [395, 214, 21, 49], "area": 853}, {"id": 1059146, "category_id": 118, "iscrowd": 0, "bbox": [0, 447, 480, 193], "area": 17541}, {"id": 3759466, "category_id": 180, "iscrowd": 0, "bbox": [425, 179, 55, 121], "area": 4649}, {"id": 1850965, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 202], "area": 88487}, {"id": 3233896, "category_id": 199, "iscrowd": 0, "bbox": [0, 161, 441, 158], "area": 15037}], "file_name": "000000084674.png", "image_id": 84674}, {"segments_info": [{"id": 5920595, "category_id": 3, "iscrowd": 0, "bbox": [289, 346, 15, 10], "area": 65}, {"id": 6183771, "category_id": 3, "iscrowd": 0, "bbox": [586, 344, 32, 18], "area": 477}, {"id": 4538950, "category_id": 3, "iscrowd": 0, "bbox": [298, 344, 17, 12], "area": 96}, {"id": 6577756, "category_id": 3, "iscrowd": 0, "bbox": [518, 346, 30, 16], "area": 367}, {"id": 4407101, "category_id": 3, "iscrowd": 0, "bbox": [492, 345, 30, 20], "area": 394}, {"id": 5789270, "category_id": 3, "iscrowd": 0, "bbox": [379, 346, 17, 16], "area": 214}, {"id": 6973538, "category_id": 3, "iscrowd": 0, "bbox": [378, 340, 6, 9], "area": 49}, {"id": 5263181, "category_id": 3, "iscrowd": 0, "bbox": [529, 335, 25, 14], "area": 262}, {"id": 2697255, "category_id": 3, "iscrowd": 0, "bbox": [559, 334, 23, 9], "area": 125}, {"id": 3947852, "category_id": 5, "iscrowd": 0, "bbox": [26, 100, 592, 229], "area": 43018}, {"id": 5460820, "category_id": 8, "iscrowd": 0, "bbox": [475, 338, 29, 16], "area": 318}, {"id": 2828330, "category_id": 8, "iscrowd": 0, "bbox": [311, 340, 22, 16], "area": 266}, {"id": 3881013, "category_id": 8, "iscrowd": 0, "bbox": [550, 340, 38, 23], "area": 677}, {"id": 4935764, "category_id": 149, "iscrowd": 0, "bbox": [0, 338, 640, 65], "area": 8895}, {"id": 14933722, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 331], "area": 152017}, {"id": 5594725, "category_id": 191, "iscrowd": 0, "bbox": [148, 341, 492, 40], "area": 6701}, {"id": 3230816, "category_id": 194, "iscrowd": 0, "bbox": [0, 376, 640, 51], "area": 14066}, {"id": 2434087, "category_id": 197, "iscrowd": 0, "bbox": [0, 278, 640, 88], "area": 18260}, {"id": 2633267, "category_id": 199, "iscrowd": 0, "bbox": [37, 267, 360, 160], "area": 25432}], "file_name": "000000084752.png", "image_id": 84752}, {"segments_info": [{"id": 13226466, "category_id": 1, "iscrowd": 0, "bbox": [459, 255, 181, 157], "area": 17110}, {"id": 13423591, "category_id": 1, "iscrowd": 0, "bbox": [24, 332, 213, 88], "area": 11349}, {"id": 328707, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 305, 419], "area": 76536}, {"id": 7696505, "category_id": 46, "iscrowd": 0, "bbox": [319, 130, 272, 298], "area": 21810}, {"id": 5725288, "category_id": 46, "iscrowd": 0, "bbox": [273, 0, 156, 177], "area": 18209}, {"id": 6185340, "category_id": 46, "iscrowd": 0, "bbox": [159, 115, 169, 217], "area": 20271}, {"id": 6514047, "category_id": 46, "iscrowd": 0, "bbox": [239, 211, 179, 217], "area": 34207}, {"id": 14475485, "category_id": 199, "iscrowd": 0, "bbox": [281, 0, 359, 115], "area": 21729}], "file_name": "000000085089.png", "image_id": 85089}, {"segments_info": [{"id": 5127998, "category_id": 1, "iscrowd": 0, "bbox": [412, 88, 227, 351], "area": 25040}, {"id": 11771285, "category_id": 1, "iscrowd": 0, "bbox": [305, 115, 240, 357], "area": 52701}, {"id": 3093125, "category_id": 1, "iscrowd": 0, "bbox": [230, 113, 112, 148], "area": 9154}, {"id": 2174038, "category_id": 1, "iscrowd": 0, "bbox": [139, 124, 73, 160], "area": 6192}, {"id": 1778489, "category_id": 1, "iscrowd": 0, "bbox": [1, 107, 48, 80], "area": 1169}, {"id": 7423540, "category_id": 1, "iscrowd": 0, "bbox": [0, 98, 258, 382], "area": 66448}, {"id": 3817553, "category_id": 1, "iscrowd": 0, "bbox": [486, 93, 127, 154], "area": 7340}, {"id": 4078962, "category_id": 47, "iscrowd": 0, "bbox": [324, 217, 25, 24], "area": 518}, {"id": 4408172, "category_id": 47, "iscrowd": 0, "bbox": [209, 245, 39, 59], "area": 1516}, {"id": 3160955, "category_id": 47, "iscrowd": 0, "bbox": [268, 247, 37, 66], "area": 2047}, {"id": 1448009, "category_id": 47, "iscrowd": 0, "bbox": [341, 211, 23, 24], "area": 298}, {"id": 2170434, "category_id": 47, "iscrowd": 0, "bbox": [348, 235, 33, 44], "area": 798}, {"id": 2565468, "category_id": 47, "iscrowd": 0, "bbox": [294, 219, 29, 28], "area": 649}, {"id": 6053776, "category_id": 48, "iscrowd": 0, "bbox": [306, 303, 32, 7], "area": 54}, {"id": 2504804, "category_id": 51, "iscrowd": 0, "bbox": [299, 242, 52, 34], "area": 1343}, {"id": 2514883, "category_id": 59, "iscrowd": 0, "bbox": [301, 310, 42, 16], "area": 433}, {"id": 2561292, "category_id": 62, "iscrowd": 0, "bbox": [0, 377, 110, 103], "area": 4614}, {"id": 2826522, "category_id": 62, "iscrowd": 0, "bbox": [494, 311, 105, 169], "area": 9673}, {"id": 658187, "category_id": 62, "iscrowd": 0, "bbox": [599, 224, 36, 87], "area": 1567}, {"id": 1118493, "category_id": 62, "iscrowd": 0, "bbox": [208, 222, 24, 32], "area": 286}, {"id": 6059928, "category_id": 67, "iscrowd": 0, "bbox": [216, 216, 153, 244], "area": 15451}, {"id": 4609398, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 640, 272], "area": 72295}, {"id": 1121081, "category_id": 184, "iscrowd": 0, "bbox": [351, 0, 289, 71], "area": 14970}], "file_name": "000000085157.png", "image_id": 85157}, {"segments_info": [{"id": 7767967, "category_id": 48, "iscrowd": 0, "bbox": [253, 234, 386, 121], "area": 10242}, {"id": 6326213, "category_id": 61, "iscrowd": 0, "bbox": [264, 103, 220, 191], "area": 27774}, {"id": 13949158, "category_id": 67, "iscrowd": 0, "bbox": [0, 91, 640, 389], "area": 210580}, {"id": 4857371, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 93], "area": 58218}], "file_name": "000000085195.png", "image_id": 85195}, {"segments_info": [{"id": 5922666, "category_id": 1, "iscrowd": 0, "bbox": [253, 36, 346, 375], "area": 96304}, {"id": 855307, "category_id": 32, "iscrowd": 0, "bbox": [360, 281, 87, 128], "area": 3104}], "file_name": "000000085329.png", "image_id": 85329}, {"segments_info": [{"id": 5859210, "category_id": 1, "iscrowd": 0, "bbox": [0, 307, 18, 58], "area": 797}, {"id": 8945274, "category_id": 3, "iscrowd": 0, "bbox": [244, 332, 36, 15], "area": 304}, {"id": 6780559, "category_id": 3, "iscrowd": 0, "bbox": [3, 371, 88, 90], "area": 5233}, {"id": 7365209, "category_id": 3, "iscrowd": 0, "bbox": [206, 324, 73, 11], "area": 564}, {"id": 7367281, "category_id": 3, "iscrowd": 0, "bbox": [14, 307, 57, 20], "area": 747}, {"id": 6706505, "category_id": 3, "iscrowd": 0, "bbox": [167, 332, 99, 54], "area": 2945}, {"id": 7365472, "category_id": 3, "iscrowd": 0, "bbox": [38, 321, 154, 54], "area": 4226}, {"id": 8089710, "category_id": 3, "iscrowd": 0, "bbox": [135, 319, 66, 24], "area": 755}, {"id": 2503963, "category_id": 4, "iscrowd": 0, "bbox": [15, 413, 331, 212], "area": 33848}, {"id": 5985363, "category_id": 8, "iscrowd": 0, "bbox": [423, 320, 57, 95], "area": 3478}, {"id": 5853780, "category_id": 8, "iscrowd": 0, "bbox": [241, 316, 201, 116], "area": 16952}, {"id": 4800570, "category_id": 149, "iscrowd": 0, "bbox": [0, 399, 480, 241], "area": 52090}, {"id": 6648709, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 432], "area": 101668}, {"id": 16316918, "category_id": 187, "iscrowd": 0, "bbox": [196, 0, 284, 235], "area": 31853}, {"id": 3815993, "category_id": 190, "iscrowd": 0, "bbox": [128, 410, 203, 27], "area": 2572}, {"id": 3946295, "category_id": 191, "iscrowd": 0, "bbox": [278, 429, 17, 7], "area": 7}, {"id": 5657942, "category_id": 197, "iscrowd": 0, "bbox": [0, 223, 480, 139], "area": 12515}], "file_name": "000000085376.png", "image_id": 85376}, {"segments_info": [{"id": 7238512, "category_id": 23, "iscrowd": 0, "bbox": [313, 181, 213, 119], "area": 14940}, {"id": 5988948, "category_id": 148, "iscrowd": 0, "bbox": [0, 236, 640, 167], "area": 81023}, {"id": 4080966, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 271], "area": 138282}], "file_name": "000000085478.png", "image_id": 85478}, {"segments_info": [{"id": 14937842, "category_id": 70, "iscrowd": 0, "bbox": [0, 262, 126, 138], "area": 13736}, {"id": 10729668, "category_id": 190, "iscrowd": 0, "bbox": [65, 236, 343, 164], "area": 24314}, {"id": 12964057, "category_id": 195, "iscrowd": 0, "bbox": [233, 54, 128, 92], "area": 5746}, {"id": 7039331, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 400], "area": 146701}], "file_name": "000000085576.png", "image_id": 85576}, {"segments_info": [{"id": 9796718, "category_id": 38, "iscrowd": 0, "bbox": [235, 232, 206, 371], "area": 15177}, {"id": 16185078, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 506, 640], "area": 308445}], "file_name": "000000085665.png", "image_id": 85665}, {"segments_info": [{"id": 5130579, "category_id": 1, "iscrowd": 0, "bbox": [273, 275, 12, 30], "area": 223}, {"id": 4406355, "category_id": 1, "iscrowd": 0, "bbox": [375, 323, 14, 48], "area": 464}, {"id": 4800325, "category_id": 1, "iscrowd": 0, "bbox": [116, 207, 3, 7], "area": 12}, {"id": 1906753, "category_id": 1, "iscrowd": 0, "bbox": [479, 314, 30, 92], "area": 1875}, {"id": 3817030, "category_id": 1, "iscrowd": 0, "bbox": [331, 305, 23, 49], "area": 761}, {"id": 2829102, "category_id": 1, "iscrowd": 0, "bbox": [383, 291, 14, 33], "area": 315}, {"id": 3354158, "category_id": 1, "iscrowd": 0, "bbox": [335, 285, 21, 23], "area": 291}, {"id": 2564174, "category_id": 1, "iscrowd": 0, "bbox": [471, 311, 16, 71], "area": 547}, {"id": 1908265, "category_id": 1, "iscrowd": 0, "bbox": [402, 290, 24, 80], "area": 1083}, {"id": 4538700, "category_id": 1, "iscrowd": 0, "bbox": [356, 291, 28, 66], "area": 711}, {"id": 3220309, "category_id": 1, "iscrowd": 0, "bbox": [511, 318, 42, 108], "area": 3153}, {"id": 5129555, "category_id": 1, "iscrowd": 0, "bbox": [207, 235, 9, 20], "area": 87}, {"id": 4603450, "category_id": 1, "iscrowd": 0, "bbox": [608, 307, 32, 47], "area": 630}, {"id": 5065563, "category_id": 1, "iscrowd": 1, "bbox": [107, 203, 466, 192], "area": 6849}, {"id": 8685459, "category_id": 35, "iscrowd": 0, "bbox": [427, 379, 37, 22], "area": 106}, {"id": 7368293, "category_id": 35, "iscrowd": 0, "bbox": [208, 254, 6, 1], "area": 2}, {"id": 2170653, "category_id": 128, "iscrowd": 0, "bbox": [0, 168, 19, 24], "area": 281}, {"id": 10460830, "category_id": 159, "iscrowd": 0, "bbox": [0, 152, 640, 275], "area": 114624}, {"id": 3487285, "category_id": 184, "iscrowd": 0, "bbox": [13, 93, 627, 165], "area": 43207}, {"id": 3289178, "category_id": 185, "iscrowd": 0, "bbox": [407, 325, 75, 51], "area": 186}, {"id": 8609338, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 179], "area": 94442}], "file_name": "000000085682.png", "image_id": 85682}, {"segments_info": [{"id": 8875612, "category_id": 1, "iscrowd": 0, "bbox": [51, 69, 327, 352], "area": 43356}, {"id": 5866092, "category_id": 37, "iscrowd": 0, "bbox": [382, 294, 13, 13], "area": 146}, {"id": 9427141, "category_id": 37, "iscrowd": 0, "bbox": [598, 276, 29, 28], "area": 645}, {"id": 7762305, "category_id": 43, "iscrowd": 0, "bbox": [38, 12, 43, 205], "area": 4399}, {"id": 8754570, "category_id": 145, "iscrowd": 0, "bbox": [0, 288, 640, 139], "area": 54344}, {"id": 4934723, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 343], "area": 153409}], "file_name": "000000085772.png", "image_id": 85772}, {"segments_info": [{"id": 8608599, "category_id": 24, "iscrowd": 0, "bbox": [0, 2, 217, 339], "area": 30623}, {"id": 8081994, "category_id": 24, "iscrowd": 0, "bbox": [329, 0, 311, 360], "area": 63742}, {"id": 9200731, "category_id": 24, "iscrowd": 0, "bbox": [150, 1, 245, 343], "area": 47024}, {"id": 11247214, "category_id": 193, "iscrowd": 0, "bbox": [0, 58, 640, 369], "area": 124030}], "file_name": "000000085823.png", "image_id": 85823}, {"segments_info": [{"id": 10593994, "category_id": 38, "iscrowd": 0, "bbox": [194, 169, 246, 111], "area": 17773}, {"id": 8686730, "category_id": 148, "iscrowd": 0, "bbox": [0, 0, 640, 403], "area": 239997}], "file_name": "000000085911.png", "image_id": 85911}, {"segments_info": [{"id": 4994338, "category_id": 1, "iscrowd": 0, "bbox": [297, 226, 17, 25], "area": 269}, {"id": 8476471, "category_id": 1, "iscrowd": 0, "bbox": [170, 188, 11, 14], "area": 113}, {"id": 8613728, "category_id": 3, "iscrowd": 0, "bbox": [0, 212, 32, 24], "area": 544}, {"id": 8220777, "category_id": 3, "iscrowd": 0, "bbox": [134, 209, 311, 127], "area": 27091}, {"id": 10258551, "category_id": 6, "iscrowd": 0, "bbox": [38, 142, 477, 118], "area": 36251}, {"id": 10000535, "category_id": 149, "iscrowd": 0, "bbox": [0, 221, 640, 207], "area": 94465}, {"id": 7242880, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 253], "area": 38281}, {"id": 16309681, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 139], "area": 61347}, {"id": 9672082, "category_id": 197, "iscrowd": 0, "bbox": [17, 104, 623, 118], "area": 11989}], "file_name": "000000086220.png", "image_id": 86220}, {"segments_info": [{"id": 4269914, "category_id": 1, "iscrowd": 0, "bbox": [425, 96, 11, 14], "area": 109}, {"id": 9139051, "category_id": 3, "iscrowd": 0, "bbox": [478, 105, 22, 9], "area": 161}, {"id": 8942164, "category_id": 3, "iscrowd": 0, "bbox": [436, 104, 16, 6], "area": 89}, {"id": 6316383, "category_id": 171, "iscrowd": 0, "bbox": [0, 221, 500, 154], "area": 39533}, {"id": 3622718, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 236], "area": 36896}, {"id": 3632964, "category_id": 193, "iscrowd": 0, "bbox": [392, 128, 108, 82], "area": 5385}, {"id": 6251644, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 278, 197], "area": 36421}], "file_name": "000000086483.png", "image_id": 86483}, {"segments_info": [{"id": 8415866, "category_id": 1, "iscrowd": 0, "bbox": [1, 21, 179, 181], "area": 9962}, {"id": 3422812, "category_id": 64, "iscrowd": 0, "bbox": [70, 163, 65, 92], "area": 4724}, {"id": 4213619, "category_id": 64, "iscrowd": 0, "bbox": [206, 132, 84, 103], "area": 6098}, {"id": 3616052, "category_id": 64, "iscrowd": 0, "bbox": [140, 184, 65, 69], "area": 3689}, {"id": 4672910, "category_id": 64, "iscrowd": 0, "bbox": [292, 157, 88, 86], "area": 4878}, {"id": 5390146, "category_id": 73, "iscrowd": 0, "bbox": [310, 103, 325, 293], "area": 57802}, {"id": 1906713, "category_id": 74, "iscrowd": 0, "bbox": [398, 363, 131, 55], "area": 5214}, {"id": 8219771, "category_id": 100, "iscrowd": 0, "bbox": [235, 268, 84, 47], "area": 897}, {"id": 6790553, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 324], "area": 95184}, {"id": 5392985, "category_id": 189, "iscrowd": 0, "bbox": [29, 234, 611, 193], "area": 31564}, {"id": 7168118, "category_id": 190, "iscrowd": 0, "bbox": [0, 373, 131, 54], "area": 3716}, {"id": 7232872, "category_id": 195, "iscrowd": 0, "bbox": [0, 306, 640, 121], "area": 4671}], "file_name": "000000086582.png", "image_id": 86582}, {"segments_info": [{"id": 4208958, "category_id": 1, "iscrowd": 0, "bbox": [332, 203, 35, 98], "area": 723}, {"id": 3286832, "category_id": 1, "iscrowd": 0, "bbox": [325, 220, 70, 106], "area": 1939}, {"id": 3813171, "category_id": 27, "iscrowd": 0, "bbox": [354, 231, 23, 30], "area": 519}, {"id": 12036266, "category_id": 35, "iscrowd": 0, "bbox": [301, 309, 113, 17], "area": 280}, {"id": 8746892, "category_id": 35, "iscrowd": 0, "bbox": [304, 290, 55, 18], "area": 65}, {"id": 14338500, "category_id": 159, "iscrowd": 0, "bbox": [0, 101, 640, 379], "area": 180324}, {"id": 3092527, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 344], "area": 123114}], "file_name": "000000086755.png", "image_id": 86755}, {"segments_info": [{"id": 1715769, "category_id": 1, "iscrowd": 0, "bbox": [214, 325, 186, 306], "area": 38288}, {"id": 1188141, "category_id": 1, "iscrowd": 0, "bbox": [247, 132, 233, 505], "area": 49273}, {"id": 1851206, "category_id": 1, "iscrowd": 0, "bbox": [41, 141, 186, 375], "area": 51096}, {"id": 1322812, "category_id": 31, "iscrowd": 0, "bbox": [0, 411, 65, 111], "area": 5120}, {"id": 690338, "category_id": 39, "iscrowd": 0, "bbox": [135, 137, 129, 171], "area": 2839}, {"id": 1122858, "category_id": 63, "iscrowd": 0, "bbox": [1, 522, 122, 109], "area": 9978}, {"id": 3049894, "category_id": 112, "iscrowd": 0, "bbox": [424, 48, 56, 592], "area": 11618}, {"id": 3966883, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 632], "area": 113518}], "file_name": "000000086956.png", "image_id": 86956}, {"segments_info": [{"id": 4933975, "category_id": 1, "iscrowd": 0, "bbox": [167, 234, 16, 37], "area": 281}, {"id": 3616817, "category_id": 1, "iscrowd": 0, "bbox": [204, 229, 7, 35], "area": 181}, {"id": 6184534, "category_id": 1, "iscrowd": 0, "bbox": [195, 228, 11, 37], "area": 290}, {"id": 3684156, "category_id": 1, "iscrowd": 0, "bbox": [327, 223, 13, 39], "area": 264}, {"id": 4670529, "category_id": 1, "iscrowd": 0, "bbox": [226, 229, 12, 31], "area": 236}, {"id": 5394262, "category_id": 1, "iscrowd": 0, "bbox": [409, 231, 16, 35], "area": 241}, {"id": 3224643, "category_id": 1, "iscrowd": 0, "bbox": [240, 226, 10, 32], "area": 199}, {"id": 4342082, "category_id": 1, "iscrowd": 0, "bbox": [80, 232, 27, 51], "area": 553}, {"id": 4011350, "category_id": 1, "iscrowd": 0, "bbox": [258, 224, 44, 97], "area": 1615}, {"id": 3486783, "category_id": 1, "iscrowd": 0, "bbox": [346, 174, 72, 185], "area": 4696}, {"id": 5789275, "category_id": 1, "iscrowd": 0, "bbox": [98, 234, 20, 47], "area": 364}, {"id": 3024937, "category_id": 1, "iscrowd": 0, "bbox": [211, 231, 8, 35], "area": 225}, {"id": 5789016, "category_id": 1, "iscrowd": 0, "bbox": [68, 238, 16, 43], "area": 418}, {"id": 5130574, "category_id": 1, "iscrowd": 1, "bbox": [1, 190, 639, 102], "area": 5947}, {"id": 5658714, "category_id": 2, "iscrowd": 0, "bbox": [254, 271, 59, 61], "area": 1344}, {"id": 4341833, "category_id": 2, "iscrowd": 0, "bbox": [155, 246, 15, 22], "area": 140}, {"id": 3487290, "category_id": 41, "iscrowd": 0, "bbox": [299, 317, 64, 47], "area": 1266}, {"id": 9343131, "category_id": 144, "iscrowd": 0, "bbox": [0, 249, 640, 169], "area": 30444}, {"id": 15855856, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 205], "area": 79754}, {"id": 7501433, "category_id": 191, "iscrowd": 0, "bbox": [0, 234, 640, 246], "area": 102158}, {"id": 6580591, "category_id": 197, "iscrowd": 0, "bbox": [0, 29, 640, 277], "area": 75953}, {"id": 5662575, "category_id": 199, "iscrowd": 0, "bbox": [338, 239, 24, 21], "area": 126}], "file_name": "000000087038.png", "image_id": 87038}, {"segments_info": [{"id": 6643563, "category_id": 1, "iscrowd": 0, "bbox": [88, 59, 157, 339], "area": 24529}, {"id": 9537928, "category_id": 1, "iscrowd": 0, "bbox": [374, 78, 148, 313], "area": 26625}, {"id": 6181729, "category_id": 1, "iscrowd": 0, "bbox": [221, 151, 120, 115], "area": 6726}, {"id": 4405841, "category_id": 3, "iscrowd": 0, "bbox": [350, 32, 83, 30], "area": 2117}, {"id": 2632993, "category_id": 3, "iscrowd": 0, "bbox": [455, 32, 79, 30], "area": 1703}, {"id": 4279880, "category_id": 15, "iscrowd": 0, "bbox": [402, 148, 202, 230], "area": 13694}, {"id": 4744794, "category_id": 15, "iscrowd": 0, "bbox": [577, 142, 63, 154], "area": 8390}, {"id": 3950912, "category_id": 15, "iscrowd": 0, "bbox": [1, 144, 145, 231], "area": 14534}, {"id": 3820099, "category_id": 15, "iscrowd": 0, "bbox": [215, 147, 162, 143], "area": 13385}, {"id": 7822919, "category_id": 31, "iscrowd": 0, "bbox": [149, 200, 85, 50], "area": 2586}, {"id": 8814705, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 310, 50], "area": 9775}, {"id": 2906184, "category_id": 184, "iscrowd": 0, "bbox": [119, 0, 521, 148], "area": 24730}, {"id": 11710378, "category_id": 191, "iscrowd": 0, "bbox": [0, 49, 640, 431], "area": 85879}, {"id": 7908769, "category_id": 193, "iscrowd": 0, "bbox": [0, 27, 640, 317], "area": 65043}], "file_name": "000000087144.png", "image_id": 87144}, {"segments_info": [{"id": 6908265, "category_id": 1, "iscrowd": 0, "bbox": [183, 1, 56, 107], "area": 1206}, {"id": 4605510, "category_id": 11, "iscrowd": 0, "bbox": [149, 165, 144, 323], "area": 24734}, {"id": 1973790, "category_id": 15, "iscrowd": 0, "bbox": [228, 63, 35, 24], "area": 701}, {"id": 5131854, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 375, 179], "area": 51715}, {"id": 3223857, "category_id": 175, "iscrowd": 0, "bbox": [321, 99, 54, 309], "area": 9972}, {"id": 6842472, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 75, 169], "area": 5868}, {"id": 14606046, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 15, 11], "area": 141}, {"id": 4408131, "category_id": 191, "iscrowd": 0, "bbox": [0, 390, 375, 110], "area": 30704}, {"id": 1250067, "category_id": 193, "iscrowd": 0, "bbox": [291, 330, 72, 73], "area": 2844}, {"id": 5789784, "category_id": 194, "iscrowd": 0, "bbox": [0, 161, 375, 274], "area": 58317}], "file_name": "000000087244.png", "image_id": 87244}, {"segments_info": [{"id": 6380890, "category_id": 1, "iscrowd": 0, "bbox": [446, 101, 27, 39], "area": 257}, {"id": 7169889, "category_id": 1, "iscrowd": 0, "bbox": [29, 78, 25, 37], "area": 290}, {"id": 4211280, "category_id": 19, "iscrowd": 0, "bbox": [32, 92, 18, 24], "area": 289}, {"id": 4869717, "category_id": 19, "iscrowd": 0, "bbox": [454, 125, 21, 25], "area": 359}, {"id": 5593187, "category_id": 19, "iscrowd": 0, "bbox": [451, 117, 17, 27], "area": 117}, {"id": 4407354, "category_id": 21, "iscrowd": 0, "bbox": [412, 144, 41, 20], "area": 446}, {"id": 2762529, "category_id": 21, "iscrowd": 0, "bbox": [498, 140, 104, 135], "area": 8770}, {"id": 4082279, "category_id": 21, "iscrowd": 0, "bbox": [456, 148, 44, 79], "area": 1077}, {"id": 5394248, "category_id": 21, "iscrowd": 0, "bbox": [290, 154, 29, 16], "area": 318}, {"id": 3618093, "category_id": 21, "iscrowd": 0, "bbox": [293, 181, 89, 167], "area": 8796}, {"id": 4999489, "category_id": 21, "iscrowd": 0, "bbox": [273, 130, 21, 18], "area": 288}, {"id": 2434076, "category_id": 21, "iscrowd": 0, "bbox": [0, 131, 86, 334], "area": 16965}, {"id": 5065023, "category_id": 21, "iscrowd": 0, "bbox": [256, 151, 33, 21], "area": 433}, {"id": 3223337, "category_id": 21, "iscrowd": 0, "bbox": [418, 158, 69, 113], "area": 4764}, {"id": 3157542, "category_id": 21, "iscrowd": 0, "bbox": [195, 172, 105, 214], "area": 13720}, {"id": 3880495, "category_id": 21, "iscrowd": 0, "bbox": [199, 155, 23, 13], "area": 187}, {"id": 3814702, "category_id": 21, "iscrowd": 0, "bbox": [586, 151, 31, 73], "area": 865}, {"id": 3683633, "category_id": 21, "iscrowd": 0, "bbox": [327, 156, 107, 71], "area": 2017}, {"id": 3030360, "category_id": 21, "iscrowd": 0, "bbox": [77, 143, 150, 265], "area": 26232}, {"id": 5263434, "category_id": 21, "iscrowd": 1, "bbox": [97, 105, 543, 145], "area": 12818}, {"id": 11250339, "category_id": 149, "iscrowd": 0, "bbox": [0, 102, 640, 368], "area": 91070}, {"id": 4215883, "category_id": 184, "iscrowd": 0, "bbox": [223, 0, 92, 125], "area": 7215}, {"id": 6915982, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 172], "area": 75819}, {"id": 7764603, "category_id": 194, "iscrowd": 0, "bbox": [19, 189, 474, 244], "area": 19401}], "file_name": "000000087470.png", "image_id": 87470}, {"segments_info": [{"id": 1775646, "category_id": 1, "iscrowd": 0, "bbox": [126, 35, 53, 96], "area": 3199}, {"id": 593192, "category_id": 1, "iscrowd": 0, "bbox": [32, 42, 72, 90], "area": 4057}, {"id": 2628632, "category_id": 1, "iscrowd": 0, "bbox": [334, 137, 92, 340], "area": 16724}, {"id": 7302788, "category_id": 1, "iscrowd": 0, "bbox": [349, 64, 22, 27], "area": 249}, {"id": 855829, "category_id": 1, "iscrowd": 0, "bbox": [250, 87, 15, 21], "area": 242}, {"id": 3824242, "category_id": 1, "iscrowd": 0, "bbox": [130, 254, 193, 374], "area": 35706}, {"id": 1645347, "category_id": 1, "iscrowd": 0, "bbox": [233, 65, 32, 46], "area": 699}, {"id": 789778, "category_id": 1, "iscrowd": 0, "bbox": [170, 9, 59, 105], "area": 3182}, {"id": 4873308, "category_id": 1, "iscrowd": 0, "bbox": [138, 48, 236, 551], "area": 48565}, {"id": 7168096, "category_id": 1, "iscrowd": 0, "bbox": [366, 64, 35, 89], "area": 2374}, {"id": 5262411, "category_id": 1, "iscrowd": 0, "bbox": [345, 71, 23, 78], "area": 969}, {"id": 2303531, "category_id": 41, "iscrowd": 0, "bbox": [120, 567, 253, 72], "area": 7118}, {"id": 858658, "category_id": 42, "iscrowd": 0, "bbox": [148, 103, 98, 57], "area": 3089}, {"id": 2106405, "category_id": 92, "iscrowd": 0, "bbox": [0, 27, 53, 69], "area": 2119}, {"id": 2964576, "category_id": 118, "iscrowd": 0, "bbox": [0, 488, 427, 152], "area": 33700}, {"id": 5527641, "category_id": 149, "iscrowd": 0, "bbox": [0, 64, 376, 462], "area": 30915}, {"id": 4014152, "category_id": 166, "iscrowd": 0, "bbox": [0, 0, 427, 54], "area": 10859}, {"id": 2565670, "category_id": 181, "iscrowd": 0, "bbox": [238, 0, 58, 29], "area": 1313}, {"id": 4147276, "category_id": 190, "iscrowd": 0, "bbox": [99, 106, 40, 30], "area": 761}, {"id": 5197645, "category_id": 191, "iscrowd": 0, "bbox": [398, 120, 12, 17], "area": 121}, {"id": 8615539, "category_id": 195, "iscrowd": 0, "bbox": [157, 113, 28, 22], "area": 205}, {"id": 5460306, "category_id": 197, "iscrowd": 0, "bbox": [161, 13, 266, 73], "area": 9048}], "file_name": "000000087476.png", "image_id": 87476}, {"segments_info": [{"id": 6976886, "category_id": 86, "iscrowd": 0, "bbox": [150, 378, 64, 95], "area": 4068}, {"id": 4741728, "category_id": 180, "iscrowd": 0, "bbox": [17, 0, 100, 478], "area": 33066}, {"id": 9806498, "category_id": 181, "iscrowd": 0, "bbox": [107, 0, 194, 452], "area": 52555}, {"id": 12765636, "category_id": 189, "iscrowd": 0, "bbox": [17, 429, 303, 71], "area": 14228}, {"id": 4346715, "category_id": 199, "iscrowd": 0, "bbox": [275, 0, 91, 500], "area": 36082}], "file_name": "000000087742.png", "image_id": 87742}, {"segments_info": [{"id": 11247751, "category_id": 11, "iscrowd": 0, "bbox": [145, 168, 154, 317], "area": 27709}, {"id": 3309137, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 487], "area": 195576}, {"id": 4345654, "category_id": 185, "iscrowd": 0, "bbox": [0, 153, 312, 46], "area": 9503}, {"id": 16185331, "category_id": 187, "iscrowd": 0, "bbox": [44, 0, 362, 82], "area": 9899}, {"id": 8567715, "category_id": 193, "iscrowd": 0, "bbox": [0, 196, 432, 291], "area": 68609}], "file_name": "000000087875.png", "image_id": 87875}, {"segments_info": [{"id": 332063, "category_id": 44, "iscrowd": 0, "bbox": [348, 1, 78, 64], "area": 3815}, {"id": 3161926, "category_id": 44, "iscrowd": 0, "bbox": [274, 34, 59, 66], "area": 2890}, {"id": 3497868, "category_id": 47, "iscrowd": 0, "bbox": [62, 81, 110, 97], "area": 6428}, {"id": 4019309, "category_id": 47, "iscrowd": 0, "bbox": [50, 263, 66, 89], "area": 3695}, {"id": 3489859, "category_id": 48, "iscrowd": 0, "bbox": [324, 187, 74, 147], "area": 1361}, {"id": 2240310, "category_id": 48, "iscrowd": 0, "bbox": [50, 520, 150, 53], "area": 1655}, {"id": 2898493, "category_id": 49, "iscrowd": 0, "bbox": [0, 63, 51, 190], "area": 2450}, {"id": 4808807, "category_id": 50, "iscrowd": 0, "bbox": [41, 77, 46, 205], "area": 3599}, {"id": 5861515, "category_id": 50, "iscrowd": 0, "bbox": [81, 106, 65, 102], "area": 1742}, {"id": 1977699, "category_id": 51, "iscrowd": 0, "bbox": [262, 494, 101, 99], "area": 7796}, {"id": 4414558, "category_id": 51, "iscrowd": 0, "bbox": [106, 194, 61, 59], "area": 2734}, {"id": 1317421, "category_id": 51, "iscrowd": 0, "bbox": [316, 373, 99, 96], "area": 7323}, {"id": 4217450, "category_id": 67, "iscrowd": 0, "bbox": [0, 3, 427, 627], "area": 220625}, {"id": 661555, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 6255}], "file_name": "000000088040.png", "image_id": 88040}, {"segments_info": [{"id": 1775639, "category_id": 10, "iscrowd": 0, "bbox": [212, 279, 104, 182], "area": 14701}, {"id": 5391675, "category_id": 128, "iscrowd": 0, "bbox": [65, 519, 415, 121], "area": 15855}, {"id": 12355933, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 249934}], "file_name": "000000088218.png", "image_id": 88218}, {"segments_info": [{"id": 4738397, "category_id": 22, "iscrowd": 0, "bbox": [0, 109, 469, 310], "area": 84681}, {"id": 5658462, "category_id": 22, "iscrowd": 0, "bbox": [311, 123, 329, 297], "area": 63455}, {"id": 3556164, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 61], "area": 23306}, {"id": 6847126, "category_id": 194, "iscrowd": 0, "bbox": [0, 15, 640, 411], "area": 99816}], "file_name": "000000088250.png", "image_id": 88250}, {"segments_info": [{"id": 4343631, "category_id": 19, "iscrowd": 0, "bbox": [167, 260, 103, 207], "area": 11009}, {"id": 4210549, "category_id": 92, "iscrowd": 0, "bbox": [210, 183, 109, 94], "area": 1900}, {"id": 13157828, "category_id": 154, "iscrowd": 0, "bbox": [82, 303, 345, 337], "area": 78343}, {"id": 8032395, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 427], "area": 124442}, {"id": 16316661, "category_id": 187, "iscrowd": 0, "bbox": [220, 0, 207, 139], "area": 17905}, {"id": 4671817, "category_id": 194, "iscrowd": 0, "bbox": [0, 493, 156, 147], "area": 17298}], "file_name": "000000088265.png", "image_id": 88265}, {"segments_info": [{"id": 2106682, "category_id": 50, "iscrowd": 0, "bbox": [340, 14, 247, 132], "area": 7885}, {"id": 2898545, "category_id": 51, "iscrowd": 0, "bbox": [29, 2, 537, 312], "area": 120243}, {"id": 1586523, "category_id": 54, "iscrowd": 0, "bbox": [392, 99, 226, 228], "area": 27178}, {"id": 1850976, "category_id": 54, "iscrowd": 0, "bbox": [82, 308, 342, 172], "area": 40455}, {"id": 2440781, "category_id": 107, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 39734}, {"id": 4539191, "category_id": 188, "iscrowd": 0, "bbox": [482, 396, 158, 84], "area": 6968}, {"id": 328707, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 74, 43], "area": 2134}, {"id": 1254469, "category_id": 196, "iscrowd": 0, "bbox": [235, 311, 88, 6], "area": 281}], "file_name": "000000088269.png", "image_id": 88269}, {"segments_info": [{"id": 1843498, "category_id": 1, "iscrowd": 0, "bbox": [1, 364, 65, 61], "area": 3258}, {"id": 4804967, "category_id": 1, "iscrowd": 0, "bbox": [145, 201, 272, 224], "area": 34146}, {"id": 4212550, "category_id": 85, "iscrowd": 0, "bbox": [488, 226, 136, 136], "area": 14364}, {"id": 1516857, "category_id": 177, "iscrowd": 0, "bbox": [0, 105, 640, 101], "area": 22429}, {"id": 5066313, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 170], "area": 87088}, {"id": 6579554, "category_id": 199, "iscrowd": 0, "bbox": [0, 140, 640, 285], "area": 91522}], "file_name": "000000088345.png", "image_id": 88345}, {"segments_info": [{"id": 10198431, "category_id": 8, "iscrowd": 0, "bbox": [7, 266, 296, 134], "area": 21242}, {"id": 3244964, "category_id": 10, "iscrowd": 0, "bbox": [106, 75, 21, 45], "area": 762}, {"id": 4350577, "category_id": 10, "iscrowd": 0, "bbox": [190, 99, 11, 28], "area": 273}, {"id": 3050675, "category_id": 10, "iscrowd": 0, "bbox": [170, 79, 25, 46], "area": 845}, {"id": 3568774, "category_id": 11, "iscrowd": 0, "bbox": [130, 447, 92, 156], "area": 8311}, {"id": 6644836, "category_id": 149, "iscrowd": 0, "bbox": [0, 299, 304, 190], "area": 19684}, {"id": 8419441, "category_id": 178, "iscrowd": 0, "bbox": [49, 469, 97, 113], "area": 5616}, {"id": 3889231, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 95665}, {"id": 15588811, "category_id": 187, "iscrowd": 0, "bbox": [236, 0, 244, 92], "area": 6704}, {"id": 6846592, "category_id": 191, "iscrowd": 0, "bbox": [0, 305, 480, 303], "area": 17589}, {"id": 8228523, "category_id": 197, "iscrowd": 0, "bbox": [0, 101, 480, 233], "area": 47825}, {"id": 4613237, "category_id": 199, "iscrowd": 0, "bbox": [202, 572, 234, 68], "area": 13301}], "file_name": "000000088432.png", "image_id": 88432}, {"segments_info": [{"id": 8680826, "category_id": 3, "iscrowd": 0, "bbox": [173, 180, 60, 40], "area": 1760}, {"id": 8879228, "category_id": 3, "iscrowd": 0, "bbox": [61, 176, 10, 9], "area": 70}, {"id": 5919064, "category_id": 3, "iscrowd": 0, "bbox": [48, 156, 5, 5], "area": 20}, {"id": 6442306, "category_id": 3, "iscrowd": 0, "bbox": [45, 176, 17, 13], "area": 181}, {"id": 4141612, "category_id": 3, "iscrowd": 0, "bbox": [93, 182, 26, 22], "area": 391}, {"id": 7035221, "category_id": 3, "iscrowd": 0, "bbox": [82, 180, 18, 18], "area": 192}, {"id": 8681593, "category_id": 3, "iscrowd": 0, "bbox": [112, 185, 24, 20], "area": 337}, {"id": 4931389, "category_id": 3, "iscrowd": 0, "bbox": [79, 177, 16, 16], "area": 84}, {"id": 5193785, "category_id": 3, "iscrowd": 0, "bbox": [25, 188, 57, 42], "area": 1955}, {"id": 6839643, "category_id": 3, "iscrowd": 0, "bbox": [54, 160, 7, 8], "area": 45}, {"id": 5521469, "category_id": 3, "iscrowd": 0, "bbox": [145, 183, 39, 29], "area": 711}, {"id": 7098691, "category_id": 3, "iscrowd": 0, "bbox": [71, 176, 14, 13], "area": 122}, {"id": 8942706, "category_id": 3, "iscrowd": 0, "bbox": [131, 185, 26, 23], "area": 357}, {"id": 6259097, "category_id": 6, "iscrowd": 0, "bbox": [43, 159, 10, 11], "area": 89}, {"id": 4875136, "category_id": 6, "iscrowd": 0, "bbox": [298, 50, 342, 222], "area": 52471}, {"id": 5986186, "category_id": 13, "iscrowd": 0, "bbox": [336, 164, 15, 25], "area": 250}, {"id": 11183018, "category_id": 128, "iscrowd": 0, "bbox": [59, 103, 154, 62], "area": 5231}, {"id": 6772313, "category_id": 149, "iscrowd": 0, "bbox": [27, 156, 613, 227], "area": 89381}, {"id": 6120037, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 383], "area": 50717}, {"id": 4079180, "category_id": 185, "iscrowd": 0, "bbox": [288, 172, 30, 35], "area": 450}, {"id": 14988457, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 577, 114], "area": 32852}, {"id": 5000011, "category_id": 191, "iscrowd": 0, "bbox": [0, 214, 71, 169], "area": 5757}, {"id": 6319729, "category_id": 193, "iscrowd": 0, "bbox": [231, 187, 70, 33], "area": 975}, {"id": 7761783, "category_id": 197, "iscrowd": 0, "bbox": [189, 174, 34, 10], "area": 178}], "file_name": "000000088462.png", "image_id": 88462}, {"segments_info": [{"id": 4605773, "category_id": 1, "iscrowd": 0, "bbox": [188, 0, 233, 422], "area": 63120}, {"id": 13033182, "category_id": 34, "iscrowd": 0, "bbox": [170, 263, 117, 91], "area": 6978}, {"id": 5853770, "category_id": 184, "iscrowd": 0, "bbox": [0, 33, 237, 213], "area": 4674}, {"id": 16117992, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 592, 101], "area": 44134}, {"id": 9074799, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 153797}], "file_name": "000000088485.png", "image_id": 88485}, {"segments_info": [{"id": 5657438, "category_id": 1, "iscrowd": 0, "bbox": [518, 470, 73, 145], "area": 7075}, {"id": 4939594, "category_id": 1, "iscrowd": 0, "bbox": [469, 471, 51, 144], "area": 5332}, {"id": 5651004, "category_id": 1, "iscrowd": 0, "bbox": [566, 470, 47, 144], "area": 3443}, {"id": 4473943, "category_id": 1, "iscrowd": 0, "bbox": [144, 364, 89, 260], "area": 13259}, {"id": 10855336, "category_id": 1, "iscrowd": 0, "bbox": [411, 474, 63, 145], "area": 6070}, {"id": 7636863, "category_id": 9, "iscrowd": 0, "bbox": [323, 391, 263, 168], "area": 13551}, {"id": 2653593, "category_id": 11, "iscrowd": 0, "bbox": [131, 32, 114, 219], "area": 14213}, {"id": 7251085, "category_id": 11, "iscrowd": 0, "bbox": [411, 125, 85, 181], "area": 9006}, {"id": 5782910, "category_id": 27, "iscrowd": 0, "bbox": [577, 496, 36, 68], "area": 999}, {"id": 4870762, "category_id": 31, "iscrowd": 0, "bbox": [461, 569, 11, 26], "area": 214}, {"id": 2763570, "category_id": 31, "iscrowd": 0, "bbox": [150, 444, 26, 99], "area": 607}, {"id": 15197147, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 121, 102], "area": 4288}, {"id": 5333853, "category_id": 184, "iscrowd": 0, "bbox": [0, 253, 325, 209], "area": 37737}, {"id": 15255989, "category_id": 187, "iscrowd": 0, "bbox": [324, 371, 316, 129], "area": 24724}, {"id": 9805479, "category_id": 191, "iscrowd": 0, "bbox": [0, 396, 529, 244], "area": 56516}, {"id": 5471077, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 396], "area": 162800}, {"id": 10331566, "category_id": 194, "iscrowd": 0, "bbox": [76, 399, 86, 42], "area": 855}, {"id": 8358797, "category_id": 197, "iscrowd": 0, "bbox": [0, 274, 281, 151], "area": 7586}], "file_name": "000000088848.png", "image_id": 88848}, {"segments_info": [{"id": 6183262, "category_id": 1, "iscrowd": 0, "bbox": [129, 188, 105, 132], "area": 5099}, {"id": 3553055, "category_id": 15, "iscrowd": 0, "bbox": [68, 235, 101, 94], "area": 3800}, {"id": 11447729, "category_id": 18, "iscrowd": 0, "bbox": [243, 296, 50, 43], "area": 1297}, {"id": 6447966, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 500, 307], "area": 6551}, {"id": 9341573, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 500, 96], "area": 4556}, {"id": 4483165, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 323], "area": 121993}, {"id": 5857126, "category_id": 190, "iscrowd": 0, "bbox": [68, 266, 432, 108], "area": 1243}, {"id": 10265000, "category_id": 191, "iscrowd": 0, "bbox": [0, 235, 500, 139], "area": 34280}, {"id": 9618116, "category_id": 193, "iscrowd": 0, "bbox": [473, 317, 27, 44], "area": 703}, {"id": 6252399, "category_id": 194, "iscrowd": 0, "bbox": [0, 275, 308, 99], "area": 6870}], "file_name": "000000088951.png", "image_id": 88951}, {"segments_info": [{"id": 7177358, "category_id": 1, "iscrowd": 0, "bbox": [117, 131, 180, 336], "area": 20681}, {"id": 3531458, "category_id": 37, "iscrowd": 0, "bbox": [82, 56, 13, 15], "area": 150}, {"id": 5599091, "category_id": 43, "iscrowd": 0, "bbox": [215, 134, 67, 71], "area": 1407}, {"id": 1986141, "category_id": 145, "iscrowd": 0, "bbox": [0, 140, 333, 360], "area": 92569}], "file_name": "000000088970.png", "image_id": 88970}, {"segments_info": [{"id": 468070, "category_id": 62, "iscrowd": 0, "bbox": [66, 188, 57, 182], "area": 4743}, {"id": 3164271, "category_id": 62, "iscrowd": 0, "bbox": [592, 123, 19, 30], "area": 470}, {"id": 2833272, "category_id": 63, "iscrowd": 0, "bbox": [595, 215, 43, 61], "area": 1914}, {"id": 2971554, "category_id": 63, "iscrowd": 0, "bbox": [192, 133, 278, 97], "area": 18804}, {"id": 6587030, "category_id": 64, "iscrowd": 0, "bbox": [433, 123, 41, 46], "area": 1038}, {"id": 5208481, "category_id": 67, "iscrowd": 0, "bbox": [515, 148, 125, 19], "area": 950}, {"id": 9676208, "category_id": 84, "iscrowd": 0, "bbox": [234, 216, 88, 33], "area": 2230}, {"id": 5338492, "category_id": 85, "iscrowd": 0, "bbox": [215, 55, 16, 22], "area": 302}, {"id": 6913160, "category_id": 86, "iscrowd": 0, "bbox": [447, 158, 21, 11], "area": 165}, {"id": 804225, "category_id": 118, "iscrowd": 0, "bbox": [0, 288, 111, 137], "area": 8381}, {"id": 1453156, "category_id": 141, "iscrowd": 0, "bbox": [110, 203, 53, 42], "area": 961}, {"id": 3426157, "category_id": 156, "iscrowd": 0, "bbox": [462, 36, 178, 211], "area": 19092}, {"id": 10140108, "category_id": 186, "iscrowd": 0, "bbox": [370, 0, 270, 45], "area": 7366}, {"id": 4018529, "category_id": 193, "iscrowd": 0, "bbox": [448, 167, 19, 5], "area": 40}, {"id": 4623535, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 314], "area": 97508}, {"id": 2315635, "category_id": 200, "iscrowd": 0, "bbox": [26, 307, 109, 118], "area": 5870}], "file_name": "000000089045.png", "image_id": 89045}, {"segments_info": [{"id": 7102827, "category_id": 1, "iscrowd": 0, "bbox": [147, 14, 221, 572], "area": 72054}, {"id": 5787983, "category_id": 36, "iscrowd": 0, "bbox": [179, 556, 171, 38], "area": 2327}, {"id": 11774886, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 479, 640], "area": 231852}], "file_name": "000000089078.png", "image_id": 89078}, {"segments_info": [{"id": 3753557, "category_id": 17, "iscrowd": 0, "bbox": [0, 170, 621, 348], "area": 132074}, {"id": 11254470, "category_id": 199, "iscrowd": 0, "bbox": [371, 0, 269, 473], "area": 71240}], "file_name": "000000089271.png", "image_id": 89271}, {"segments_info": [{"id": 5454244, "category_id": 1, "iscrowd": 0, "bbox": [222, 107, 214, 318], "area": 20866}, {"id": 6048106, "category_id": 1, "iscrowd": 0, "bbox": [541, 1, 99, 256], "area": 18598}, {"id": 11643057, "category_id": 37, "iscrowd": 0, "bbox": [388, 297, 12, 12], "area": 119}, {"id": 10196640, "category_id": 37, "iscrowd": 0, "bbox": [461, 372, 13, 14], "area": 144}, {"id": 7894410, "category_id": 37, "iscrowd": 0, "bbox": [593, 334, 14, 13], "area": 143}, {"id": 4735065, "category_id": 39, "iscrowd": 0, "bbox": [347, 35, 51, 97], "area": 812}, {"id": 7433585, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 231296}], "file_name": "000000089296.png", "image_id": 89296}, {"segments_info": [{"id": 8354675, "category_id": 3, "iscrowd": 0, "bbox": [402, 129, 38, 16], "area": 468}, {"id": 6645066, "category_id": 3, "iscrowd": 0, "bbox": [107, 155, 40, 10], "area": 266}, {"id": 5593152, "category_id": 3, "iscrowd": 0, "bbox": [182, 152, 57, 41], "area": 1755}, {"id": 6776684, "category_id": 3, "iscrowd": 0, "bbox": [587, 143, 44, 43], "area": 732}, {"id": 6248787, "category_id": 3, "iscrowd": 0, "bbox": [294, 157, 123, 69], "area": 2760}, {"id": 8880510, "category_id": 3, "iscrowd": 0, "bbox": [580, 123, 39, 10], "area": 278}, {"id": 5789769, "category_id": 3, "iscrowd": 0, "bbox": [1, 166, 295, 220], "area": 44023}, {"id": 8225401, "category_id": 3, "iscrowd": 0, "bbox": [363, 137, 24, 8], "area": 98}, {"id": 9539469, "category_id": 3, "iscrowd": 0, "bbox": [267, 144, 97, 49], "area": 3265}, {"id": 4604990, "category_id": 3, "iscrowd": 0, "bbox": [251, 144, 31, 45], "area": 355}, {"id": 5527878, "category_id": 3, "iscrowd": 0, "bbox": [136, 138, 43, 13], "area": 212}, {"id": 7631470, "category_id": 8, "iscrowd": 0, "bbox": [321, 128, 307, 200], "area": 44753}, {"id": 3685164, "category_id": 8, "iscrowd": 0, "bbox": [2, 139, 77, 56], "area": 2765}, {"id": 3753289, "category_id": 11, "iscrowd": 0, "bbox": [236, 266, 76, 124], "area": 4778}, {"id": 6974562, "category_id": 95, "iscrowd": 0, "bbox": [13, 89, 627, 113], "area": 10535}, {"id": 2500648, "category_id": 149, "iscrowd": 0, "bbox": [0, 179, 640, 301], "area": 46355}, {"id": 4343099, "category_id": 184, "iscrowd": 0, "bbox": [0, 36, 640, 182], "area": 16227}, {"id": 14868959, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 130], "area": 47547}, {"id": 11055026, "category_id": 190, "iscrowd": 0, "bbox": [160, 341, 480, 139], "area": 44063}, {"id": 7171686, "category_id": 197, "iscrowd": 0, "bbox": [53, 37, 587, 106], "area": 16943}], "file_name": "000000089556.png", "image_id": 89556}, {"segments_info": [{"id": 1909289, "category_id": 1, "iscrowd": 0, "bbox": [89, 0, 122, 89], "area": 3745}, {"id": 1842208, "category_id": 1, "iscrowd": 0, "bbox": [38, 119, 169, 175], "area": 12768}, {"id": 2435634, "category_id": 1, "iscrowd": 0, "bbox": [225, 125, 179, 132], "area": 12321}, {"id": 8154991, "category_id": 1, "iscrowd": 0, "bbox": [489, 299, 143, 128], "area": 12091}, {"id": 4606804, "category_id": 1, "iscrowd": 0, "bbox": [239, 4, 118, 107], "area": 5143}, {"id": 2630696, "category_id": 1, "iscrowd": 0, "bbox": [257, 53, 98, 76], "area": 3545}, {"id": 4541018, "category_id": 1, "iscrowd": 0, "bbox": [19, 363, 184, 64], "area": 8277}, {"id": 1711393, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 68, 89], "area": 2532}, {"id": 2369839, "category_id": 1, "iscrowd": 0, "bbox": [412, 100, 134, 165], "area": 9708}, {"id": 4081498, "category_id": 1, "iscrowd": 0, "bbox": [60, 5, 146, 101], "area": 6056}, {"id": 5986124, "category_id": 1, "iscrowd": 0, "bbox": [28, 198, 215, 166], "area": 15488}, {"id": 2433827, "category_id": 27, "iscrowd": 0, "bbox": [537, 156, 30, 56], "area": 805}, {"id": 3090987, "category_id": 62, "iscrowd": 0, "bbox": [390, 39, 77, 74], "area": 1664}, {"id": 1973534, "category_id": 62, "iscrowd": 0, "bbox": [246, 301, 99, 110], "area": 4482}, {"id": 1908513, "category_id": 62, "iscrowd": 0, "bbox": [407, 149, 38, 130], "area": 1687}, {"id": 1710619, "category_id": 62, "iscrowd": 0, "bbox": [377, 0, 58, 21], "area": 600}, {"id": 1316117, "category_id": 62, "iscrowd": 0, "bbox": [412, 130, 9, 20], "area": 109}, {"id": 2302755, "category_id": 62, "iscrowd": 0, "bbox": [404, 92, 30, 46], "area": 760}, {"id": 1316118, "category_id": 62, "iscrowd": 0, "bbox": [34, 319, 118, 80], "area": 5048}, {"id": 3026481, "category_id": 62, "iscrowd": 0, "bbox": [428, 212, 96, 133], "area": 4826}, {"id": 5197650, "category_id": 62, "iscrowd": 0, "bbox": [236, 228, 96, 103], "area": 5525}, {"id": 2500393, "category_id": 62, "iscrowd": 0, "bbox": [466, 360, 40, 67], "area": 1236}, {"id": 1513497, "category_id": 62, "iscrowd": 0, "bbox": [63, 64, 97, 86], "area": 4528}, {"id": 3157809, "category_id": 62, "iscrowd": 0, "bbox": [442, 278, 94, 141], "area": 3251}, {"id": 6710631, "category_id": 62, "iscrowd": 0, "bbox": [372, 2, 77, 104], "area": 2455}, {"id": 3290681, "category_id": 62, "iscrowd": 1, "bbox": [106, 1, 261, 426], "area": 7973}, {"id": 8021080, "category_id": 73, "iscrowd": 0, "bbox": [489, 131, 67, 61], "area": 2446}, {"id": 3154218, "category_id": 77, "iscrowd": 0, "bbox": [122, 257, 17, 14], "area": 114}, {"id": 8411725, "category_id": 77, "iscrowd": 0, "bbox": [354, 64, 17, 10], "area": 93}, {"id": 6965824, "category_id": 77, "iscrowd": 0, "bbox": [355, 100, 16, 12], "area": 101}, {"id": 11040093, "category_id": 77, "iscrowd": 0, "bbox": [151, 192, 13, 11], "area": 69}, {"id": 9334377, "category_id": 77, "iscrowd": 0, "bbox": [332, 169, 16, 11], "area": 100}, {"id": 14541027, "category_id": 84, "iscrowd": 0, "bbox": [459, 242, 54, 33], "area": 1361}, {"id": 14343390, "category_id": 84, "iscrowd": 0, "bbox": [412, 69, 47, 27], "area": 892}, {"id": 14343392, "category_id": 84, "iscrowd": 0, "bbox": [478, 309, 52, 40], "area": 1255}, {"id": 14146529, "category_id": 84, "iscrowd": 0, "bbox": [275, 338, 58, 41], "area": 1798}, {"id": 14146527, "category_id": 84, "iscrowd": 0, "bbox": [255, 0, 40, 18], "area": 654}, {"id": 12307415, "category_id": 84, "iscrowd": 0, "bbox": [0, 74, 29, 38], "area": 862}, {"id": 1382427, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 544, 325], "area": 1714}, {"id": 7306890, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 111748}], "file_name": "000000089648.png", "image_id": 89648}, {"segments_info": [{"id": 5136486, "category_id": 44, "iscrowd": 0, "bbox": [565, 176, 17, 126], "area": 1665}, {"id": 4811131, "category_id": 50, "iscrowd": 0, "bbox": [0, 197, 73, 56], "area": 1191}, {"id": 3628710, "category_id": 61, "iscrowd": 0, "bbox": [125, 116, 396, 242], "area": 81562}, {"id": 7377324, "category_id": 196, "iscrowd": 0, "bbox": [0, 183, 118, 72], "area": 5510}], "file_name": "000000089670.png", "image_id": 89670}, {"segments_info": [{"id": 9477028, "category_id": 1, "iscrowd": 0, "bbox": [254, 233, 96, 128], "area": 4718}, {"id": 6714240, "category_id": 1, "iscrowd": 0, "bbox": [188, 247, 89, 106], "area": 3481}, {"id": 7438477, "category_id": 15, "iscrowd": 0, "bbox": [327, 283, 156, 69], "area": 6167}, {"id": 5004137, "category_id": 15, "iscrowd": 0, "bbox": [96, 288, 120, 65], "area": 3235}, {"id": 3753042, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 206472}, {"id": 13621472, "category_id": 191, "iscrowd": 0, "bbox": [0, 337, 640, 92], "area": 50000}], "file_name": "000000089697.png", "image_id": 89697}, {"segments_info": [{"id": 11180424, "category_id": 70, "iscrowd": 0, "bbox": [138, 317, 254, 311], "area": 48985}, {"id": 1518921, "category_id": 171, "iscrowd": 0, "bbox": [0, 124, 480, 122], "area": 2825}, {"id": 2831416, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 502], "area": 154663}, {"id": 3950669, "category_id": 194, "iscrowd": 0, "bbox": [0, 160, 480, 480], "area": 92122}], "file_name": "000000089761.png", "image_id": 89761}, {"segments_info": [{"id": 5858154, "category_id": 18, "iscrowd": 0, "bbox": [146, 13, 150, 172], "area": 12920}, {"id": 7170150, "category_id": 18, "iscrowd": 0, "bbox": [256, 43, 163, 151], "area": 13096}, {"id": 4093015, "category_id": 193, "iscrowd": 0, "bbox": [0, 14, 500, 267], "area": 100297}], "file_name": "000000089880.png", "image_id": 89880}, {"segments_info": [{"id": 1974812, "category_id": 18, "iscrowd": 0, "bbox": [144, 206, 186, 119], "area": 6188}, {"id": 2170135, "category_id": 18, "iscrowd": 0, "bbox": [223, 214, 270, 151], "area": 17990}, {"id": 2564988, "category_id": 34, "iscrowd": 0, "bbox": [136, 248, 54, 27], "area": 805}, {"id": 3691845, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 68], "area": 33050}, {"id": 6852221, "category_id": 185, "iscrowd": 0, "bbox": [0, 37, 640, 65], "area": 22710}, {"id": 4688490, "category_id": 193, "iscrowd": 0, "bbox": [0, 67, 640, 413], "area": 226131}], "file_name": "000000090003.png", "image_id": 90003}, {"segments_info": [{"id": 3225148, "category_id": 21, "iscrowd": 0, "bbox": [60, 127, 359, 269], "area": 53226}, {"id": 6190234, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 501, 227], "area": 69719}, {"id": 1318433, "category_id": 186, "iscrowd": 0, "bbox": [499, 0, 65, 41], "area": 1330}, {"id": 6520728, "category_id": 194, "iscrowd": 0, "bbox": [0, 44, 640, 381], "area": 65554}, {"id": 856593, "category_id": 197, "iscrowd": 0, "bbox": [517, 15, 123, 84], "area": 3945}], "file_name": "000000090062.png", "image_id": 90062}, {"segments_info": [{"id": 6516347, "category_id": 44, "iscrowd": 0, "bbox": [214, 224, 16, 33], "area": 346}, {"id": 6906459, "category_id": 70, "iscrowd": 0, "bbox": [526, 255, 111, 166], "area": 11837}, {"id": 8158334, "category_id": 81, "iscrowd": 0, "bbox": [107, 253, 145, 48], "area": 5149}, {"id": 12566462, "category_id": 133, "iscrowd": 0, "bbox": [89, 0, 188, 164], "area": 23218}, {"id": 9474452, "category_id": 176, "iscrowd": 0, "bbox": [69, 0, 571, 480], "area": 90271}, {"id": 3359315, "category_id": 177, "iscrowd": 0, "bbox": [260, 267, 265, 203], "area": 31241}, {"id": 9341578, "category_id": 186, "iscrowd": 0, "bbox": [296, 0, 245, 61], "area": 8315}, {"id": 2701902, "category_id": 190, "iscrowd": 0, "bbox": [85, 353, 555, 127], "area": 35121}, {"id": 9729607, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 83118}], "file_name": "000000090108.png", "image_id": 90108}, {"segments_info": [{"id": 4671044, "category_id": 7, "iscrowd": 0, "bbox": [67, 170, 455, 158], "area": 42450}, {"id": 5857386, "category_id": 125, "iscrowd": 0, "bbox": [270, 322, 370, 105], "area": 11999}, {"id": 4079940, "category_id": 147, "iscrowd": 0, "bbox": [85, 282, 555, 111], "area": 15169}, {"id": 3626060, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 120, 341], "area": 26153}, {"id": 15195084, "category_id": 187, "iscrowd": 0, "bbox": [48, 0, 592, 288], "area": 128411}, {"id": 3430483, "category_id": 193, "iscrowd": 0, "bbox": [509, 285, 131, 54], "area": 4862}], "file_name": "000000090155.png", "image_id": 90155}, {"segments_info": [{"id": 4931972, "category_id": 6, "iscrowd": 0, "bbox": [31, 106, 156, 242], "area": 30082}, {"id": 6181293, "category_id": 6, "iscrowd": 0, "bbox": [0, 138, 57, 181], "area": 6639}, {"id": 5857853, "category_id": 6, "iscrowd": 0, "bbox": [163, 37, 344, 369], "area": 93775}, {"id": 7105648, "category_id": 125, "iscrowd": 0, "bbox": [0, 313, 640, 116], "area": 50010}, {"id": 8223080, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 339], "area": 80856}, {"id": 16184532, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 394, 138], "area": 12694}], "file_name": "000000090208.png", "image_id": 90208}, {"segments_info": [{"id": 6847631, "category_id": 1, "iscrowd": 0, "bbox": [67, 143, 519, 422], "area": 48665}, {"id": 3559816, "category_id": 43, "iscrowd": 0, "bbox": [462, 339, 116, 100], "area": 3008}, {"id": 2712781, "category_id": 145, "iscrowd": 0, "bbox": [0, 101, 640, 538], "area": 281872}], "file_name": "000000090284.png", "image_id": 90284}, {"segments_info": [{"id": 6650241, "category_id": 5, "iscrowd": 0, "bbox": [177, 116, 281, 112], "area": 12157}, {"id": 12036488, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 389], "area": 236561}], "file_name": "000000090631.png", "image_id": 90631}, {"segments_info": [{"id": 11646907, "category_id": 1, "iscrowd": 0, "bbox": [244, 181, 125, 231], "area": 17911}, {"id": 2107684, "category_id": 1, "iscrowd": 0, "bbox": [518, 141, 94, 236], "area": 12061}, {"id": 9345427, "category_id": 1, "iscrowd": 0, "bbox": [144, 188, 91, 184], "area": 8163}, {"id": 7169123, "category_id": 1, "iscrowd": 0, "bbox": [51, 105, 113, 321], "area": 22025}, {"id": 5792876, "category_id": 1, "iscrowd": 0, "bbox": [425, 185, 114, 184], "area": 14712}, {"id": 2773581, "category_id": 52, "iscrowd": 0, "bbox": [492, 75, 14, 17], "area": 160}, {"id": 2520190, "category_id": 52, "iscrowd": 0, "bbox": [234, 123, 12, 11], "area": 100}, {"id": 2465965, "category_id": 52, "iscrowd": 0, "bbox": [19, 333, 28, 38], "area": 708}, {"id": 5887189, "category_id": 52, "iscrowd": 0, "bbox": [381, 352, 67, 36], "area": 1419}, {"id": 2390147, "category_id": 52, "iscrowd": 0, "bbox": [21, 246, 9, 8], "area": 40}, {"id": 3898755, "category_id": 52, "iscrowd": 0, "bbox": [220, 205, 38, 71], "area": 1671}, {"id": 4171662, "category_id": 52, "iscrowd": 0, "bbox": [369, 281, 52, 69], "area": 2803}, {"id": 3044997, "category_id": 52, "iscrowd": 0, "bbox": [94, 42, 28, 56], "area": 1111}, {"id": 3178394, "category_id": 52, "iscrowd": 0, "bbox": [414, 42, 42, 32], "area": 896}, {"id": 1987682, "category_id": 52, "iscrowd": 0, "bbox": [599, 16, 36, 34], "area": 931}, {"id": 5491148, "category_id": 52, "iscrowd": 0, "bbox": [171, 405, 21, 16], "area": 237}, {"id": 2974324, "category_id": 52, "iscrowd": 0, "bbox": [25, 58, 9, 9], "area": 52}, {"id": 2251868, "category_id": 52, "iscrowd": 0, "bbox": [194, 132, 12, 15], "area": 113}, {"id": 3173995, "category_id": 52, "iscrowd": 1, "bbox": [1, 0, 639, 431], "area": 119534}, {"id": 2725224, "category_id": 196, "iscrowd": 0, "bbox": [206, 388, 137, 43], "area": 2746}, {"id": 8622727, "category_id": 199, "iscrowd": 0, "bbox": [277, 0, 363, 93], "area": 18544}], "file_name": "000000090891.png", "image_id": 90891}, {"segments_info": [{"id": 3289395, "category_id": 1, "iscrowd": 0, "bbox": [227, 167, 78, 81], "area": 2112}, {"id": 6975340, "category_id": 35, "iscrowd": 0, "bbox": [280, 236, 40, 15], "area": 191}, {"id": 2169495, "category_id": 92, "iscrowd": 0, "bbox": [135, 114, 52, 61], "area": 1937}, {"id": 12895427, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 268976}], "file_name": "000000090956.png", "image_id": 90956}, {"segments_info": [{"id": 3290437, "category_id": 1, "iscrowd": 0, "bbox": [316, 77, 117, 243], "area": 19225}, {"id": 6379095, "category_id": 1, "iscrowd": 0, "bbox": [246, 48, 104, 252], "area": 14373}, {"id": 2764087, "category_id": 1, "iscrowd": 0, "bbox": [473, 61, 112, 334], "area": 23651}, {"id": 2895675, "category_id": 1, "iscrowd": 0, "bbox": [403, 30, 95, 300], "area": 17674}, {"id": 3755880, "category_id": 49, "iscrowd": 0, "bbox": [408, 352, 45, 39], "area": 608}, {"id": 4880306, "category_id": 59, "iscrowd": 0, "bbox": [0, 263, 170, 105], "area": 4187}, {"id": 3040661, "category_id": 59, "iscrowd": 0, "bbox": [3, 203, 21, 11], "area": 157}, {"id": 4688604, "category_id": 59, "iscrowd": 0, "bbox": [346, 412, 71, 12], "area": 403}, {"id": 5278679, "category_id": 59, "iscrowd": 0, "bbox": [129, 342, 140, 72], "area": 5641}, {"id": 3700691, "category_id": 59, "iscrowd": 0, "bbox": [166, 385, 44, 30], "area": 494}, {"id": 5741027, "category_id": 59, "iscrowd": 0, "bbox": [263, 388, 94, 36], "area": 2385}, {"id": 2104604, "category_id": 62, "iscrowd": 0, "bbox": [133, 163, 48, 64], "area": 812}, {"id": 2694681, "category_id": 62, "iscrowd": 0, "bbox": [187, 168, 19, 43], "area": 186}, {"id": 1713202, "category_id": 62, "iscrowd": 0, "bbox": [172, 148, 57, 46], "area": 858}, {"id": 3681317, "category_id": 62, "iscrowd": 0, "bbox": [223, 160, 17, 9], "area": 100}, {"id": 3492192, "category_id": 62, "iscrowd": 0, "bbox": [99, 159, 37, 29], "area": 870}, {"id": 2502719, "category_id": 67, "iscrowd": 0, "bbox": [192, 177, 80, 85], "area": 1875}, {"id": 3358286, "category_id": 67, "iscrowd": 0, "bbox": [181, 163, 69, 90], "area": 1008}, {"id": 1910068, "category_id": 67, "iscrowd": 0, "bbox": [572, 207, 68, 183], "area": 4272}, {"id": 3297143, "category_id": 67, "iscrowd": 0, "bbox": [22, 185, 130, 33], "area": 1924}, {"id": 2240061, "category_id": 67, "iscrowd": 0, "bbox": [2, 154, 171, 43], "area": 2658}, {"id": 2047344, "category_id": 67, "iscrowd": 0, "bbox": [443, 375, 197, 48], "area": 5048}, {"id": 1843491, "category_id": 72, "iscrowd": 0, "bbox": [2, 0, 68, 91], "area": 5431}, {"id": 2703703, "category_id": 84, "iscrowd": 0, "bbox": [198, 58, 4, 20], "area": 63}, {"id": 3027486, "category_id": 84, "iscrowd": 0, "bbox": [614, 149, 24, 44], "area": 718}, {"id": 3617886, "category_id": 84, "iscrowd": 0, "bbox": [582, 147, 19, 42], "area": 587}, {"id": 6644838, "category_id": 84, "iscrowd": 0, "bbox": [595, 147, 24, 42], "area": 673}, {"id": 2501961, "category_id": 84, "iscrowd": 0, "bbox": [187, 59, 3, 18], "area": 54}, {"id": 4149577, "category_id": 84, "iscrowd": 0, "bbox": [150, 61, 17, 18], "area": 240}, {"id": 2305857, "category_id": 84, "iscrowd": 0, "bbox": [191, 59, 4, 18], "area": 60}, {"id": 2636629, "category_id": 84, "iscrowd": 0, "bbox": [202, 57, 15, 20], "area": 300}, {"id": 4279104, "category_id": 84, "iscrowd": 0, "bbox": [151, 37, 9, 20], "area": 51}, {"id": 4014145, "category_id": 84, "iscrowd": 0, "bbox": [152, 83, 17, 25], "area": 374}, {"id": 2767958, "category_id": 84, "iscrowd": 0, "bbox": [194, 59, 4, 20], "area": 70}, {"id": 1515559, "category_id": 84, "iscrowd": 0, "bbox": [204, 31, 4, 19], "area": 71}, {"id": 3028281, "category_id": 84, "iscrowd": 0, "bbox": [174, 60, 4, 18], "area": 71}, {"id": 3752272, "category_id": 84, "iscrowd": 1, "bbox": [140, 26, 488, 282], "area": 4359}, {"id": 7969206, "category_id": 100, "iscrowd": 0, "bbox": [0, 208, 490, 216], "area": 49587}, {"id": 6583160, "category_id": 156, "iscrowd": 0, "bbox": [0, 18, 294, 279], "area": 13268}, {"id": 2961203, "category_id": 177, "iscrowd": 0, "bbox": [406, 140, 234, 185], "area": 2160}, {"id": 2435891, "category_id": 189, "iscrowd": 0, "bbox": [72, 372, 72, 52], "area": 1578}, {"id": 3820648, "category_id": 190, "iscrowd": 0, "bbox": [470, 372, 6, 12], "area": 5}, {"id": 3817027, "category_id": 191, "iscrowd": 0, "bbox": [0, 202, 640, 222], "area": 19905}, {"id": 3633863, "category_id": 196, "iscrowd": 0, "bbox": [152, 386, 46, 37], "area": 196}, {"id": 7570573, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 213], "area": 56750}], "file_name": "000000091406.png", "image_id": 91406}, {"segments_info": [{"id": 8224644, "category_id": 1, "iscrowd": 0, "bbox": [15, 113, 225, 310], "area": 41040}, {"id": 9213848, "category_id": 1, "iscrowd": 0, "bbox": [328, 217, 255, 197], "area": 21836}, {"id": 9016473, "category_id": 1, "iscrowd": 0, "bbox": [152, 47, 188, 328], "area": 25499}, {"id": 3163214, "category_id": 40, "iscrowd": 0, "bbox": [210, 124, 83, 78], "area": 3249}, {"id": 2651756, "category_id": 145, "iscrowd": 0, "bbox": [16, 96, 609, 226], "area": 81435}, {"id": 4819890, "category_id": 154, "iscrowd": 0, "bbox": [168, 286, 457, 139], "area": 26557}, {"id": 1249806, "category_id": 199, "iscrowd": 0, "bbox": [16, 0, 618, 109], "area": 46114}], "file_name": "000000091495.png", "image_id": 91495}, {"segments_info": [{"id": 7961468, "category_id": 1, "iscrowd": 0, "bbox": [101, 144, 410, 329], "area": 57083}, {"id": 5006715, "category_id": 1, "iscrowd": 0, "bbox": [0, 111, 285, 368], "area": 43724}, {"id": 5331554, "category_id": 44, "iscrowd": 0, "bbox": [508, 126, 20, 52], "area": 806}, {"id": 3492976, "category_id": 44, "iscrowd": 0, "bbox": [459, 128, 18, 50], "area": 410}, {"id": 3503458, "category_id": 44, "iscrowd": 0, "bbox": [470, 130, 21, 51], "area": 851}, {"id": 6131106, "category_id": 47, "iscrowd": 0, "bbox": [493, 161, 16, 25], "area": 347}, {"id": 4945288, "category_id": 51, "iscrowd": 0, "bbox": [576, 168, 35, 23], "area": 530}, {"id": 6595770, "category_id": 59, "iscrowd": 0, "bbox": [573, 182, 44, 16], "area": 376}, {"id": 2306877, "category_id": 62, "iscrowd": 0, "bbox": [571, 225, 69, 75], "area": 2299}, {"id": 7497054, "category_id": 62, "iscrowd": 0, "bbox": [517, 382, 123, 98], "area": 7500}, {"id": 2765640, "category_id": 62, "iscrowd": 0, "bbox": [48, 397, 77, 83], "area": 689}, {"id": 4803156, "category_id": 62, "iscrowd": 0, "bbox": [414, 275, 131, 198], "area": 6619}, {"id": 3492696, "category_id": 67, "iscrowd": 0, "bbox": [461, 177, 179, 105], "area": 7436}, {"id": 4546409, "category_id": 67, "iscrowd": 0, "bbox": [1, 221, 147, 80], "area": 5955}, {"id": 9348786, "category_id": 75, "iscrowd": 0, "bbox": [300, 352, 35, 21], "area": 314}, {"id": 8362413, "category_id": 75, "iscrowd": 0, "bbox": [72, 335, 40, 21], "area": 393}, {"id": 4613492, "category_id": 81, "iscrowd": 0, "bbox": [295, 128, 37, 7], "area": 173}, {"id": 1921907, "category_id": 118, "iscrowd": 0, "bbox": [0, 226, 640, 254], "area": 20697}, {"id": 4091532, "category_id": 177, "iscrowd": 0, "bbox": [0, 110, 637, 160], "area": 6862}, {"id": 1720945, "category_id": 188, "iscrowd": 0, "bbox": [96, 0, 389, 265], "area": 52826}, {"id": 2304301, "category_id": 189, "iscrowd": 0, "bbox": [88, 239, 527, 74], "area": 459}, {"id": 6326422, "category_id": 195, "iscrowd": 0, "bbox": [339, 80, 28, 51], "area": 894}, {"id": 8497077, "category_id": 196, "iscrowd": 0, "bbox": [541, 140, 40, 42], "area": 1330}, {"id": 8036268, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 376], "area": 70864}, {"id": 2765377, "category_id": 200, "iscrowd": 0, "bbox": [159, 265, 481, 215], "area": 13769}], "file_name": "000000091500.png", "image_id": 91500}, {"segments_info": [{"id": 592402, "category_id": 44, "iscrowd": 0, "bbox": [69, 146, 11, 18], "area": 148}, {"id": 6190728, "category_id": 47, "iscrowd": 0, "bbox": [453, 168, 10, 13], "area": 98}, {"id": 8361125, "category_id": 47, "iscrowd": 0, "bbox": [446, 167, 9, 15], "area": 106}, {"id": 3568810, "category_id": 51, "iscrowd": 0, "bbox": [336, 167, 33, 11], "area": 248}, {"id": 1122075, "category_id": 72, "iscrowd": 0, "bbox": [84, 44, 66, 72], "area": 3942}, {"id": 7372424, "category_id": 78, "iscrowd": 0, "bbox": [474, 37, 150, 85], "area": 11457}, {"id": 4807015, "category_id": 79, "iscrowd": 0, "bbox": [450, 142, 163, 230], "area": 29930}, {"id": 8227993, "category_id": 81, "iscrowd": 0, "bbox": [79, 240, 155, 85], "area": 9791}, {"id": 2304316, "category_id": 84, "iscrowd": 0, "bbox": [44, 153, 18, 4], "area": 43}, {"id": 1908819, "category_id": 84, "iscrowd": 0, "bbox": [42, 156, 23, 4], "area": 48}, {"id": 1052248, "category_id": 84, "iscrowd": 0, "bbox": [43, 162, 18, 3], "area": 47}, {"id": 4159104, "category_id": 86, "iscrowd": 0, "bbox": [266, 127, 21, 29], "area": 483}, {"id": 8955072, "category_id": 107, "iscrowd": 0, "bbox": [0, 136, 640, 251], "area": 52007}, {"id": 7110795, "category_id": 112, "iscrowd": 0, "bbox": [206, 45, 27, 116], "area": 2442}, {"id": 3375780, "category_id": 119, "iscrowd": 0, "bbox": [246, 92, 59, 45], "area": 1595}, {"id": 12444146, "category_id": 130, "iscrowd": 0, "bbox": [161, 0, 35, 18], "area": 428}, {"id": 1716561, "category_id": 156, "iscrowd": 0, "bbox": [35, 63, 129, 119], "area": 6046}, {"id": 4085612, "category_id": 175, "iscrowd": 0, "bbox": [64, 0, 135, 182], "area": 10478}, {"id": 3688272, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 265, 57], "area": 1899}, {"id": 4879790, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 60772}, {"id": 8625593, "category_id": 190, "iscrowd": 0, "bbox": [270, 319, 370, 106], "area": 26327}, {"id": 4810370, "category_id": 196, "iscrowd": 0, "bbox": [338, 158, 51, 23], "area": 581}, {"id": 8098466, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 194], "area": 36941}], "file_name": "000000091615.png", "image_id": 91615}, {"segments_info": [{"id": 4013236, "category_id": 13, "iscrowd": 0, "bbox": [138, 260, 117, 94], "area": 7451}, {"id": 5460818, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 427, 532], "area": 107834}, {"id": 12238789, "category_id": 191, "iscrowd": 0, "bbox": [0, 34, 427, 606], "area": 139420}], "file_name": "000000091619.png", "image_id": 91619}, {"segments_info": [{"id": 1794508, "category_id": 50, "iscrowd": 0, "bbox": [1, 0, 211, 235], "area": 20869}, {"id": 4681636, "category_id": 51, "iscrowd": 0, "bbox": [39, 0, 599, 460], "area": 212358}, {"id": 12959930, "category_id": 67, "iscrowd": 0, "bbox": [1, 1, 639, 479], "area": 46947}, {"id": 1007048, "category_id": 196, "iscrowd": 0, "bbox": [200, 458, 279, 22], "area": 4416}], "file_name": "000000091654.png", "image_id": 91654}, {"segments_info": [{"id": 16112586, "category_id": 47, "iscrowd": 0, "bbox": [406, 1, 94, 97], "area": 7289}, {"id": 8940922, "category_id": 51, "iscrowd": 0, "bbox": [575, 75, 65, 76], "area": 4415}, {"id": 3621724, "category_id": 54, "iscrowd": 0, "bbox": [109, 99, 352, 227], "area": 46471}, {"id": 7632761, "category_id": 58, "iscrowd": 0, "bbox": [0, 49, 328, 130], "area": 19219}, {"id": 2634068, "category_id": 58, "iscrowd": 0, "bbox": [211, 145, 429, 330], "area": 92131}, {"id": 5848627, "category_id": 62, "iscrowd": 0, "bbox": [21, 1, 95, 96], "area": 3041}, {"id": 5462625, "category_id": 67, "iscrowd": 0, "bbox": [1, 275, 176, 199], "area": 20113}, {"id": 11839907, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 18855}, {"id": 9792858, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 407, 104], "area": 12863}, {"id": 12233118, "category_id": 195, "iscrowd": 0, "bbox": [0, 22, 640, 458], "area": 49766}], "file_name": "000000091779.png", "image_id": 91779}, {"segments_info": [{"id": 5067872, "category_id": 24, "iscrowd": 0, "bbox": [314, 223, 288, 194], "area": 22562}, {"id": 5330786, "category_id": 24, "iscrowd": 0, "bbox": [73, 296, 158, 97], "area": 9009}, {"id": 10662856, "category_id": 154, "iscrowd": 0, "bbox": [0, 358, 640, 122], "area": 57723}, {"id": 1781286, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 253], "area": 141439}, {"id": 15130061, "category_id": 187, "iscrowd": 0, "bbox": [70, 0, 221, 20], "area": 674}, {"id": 5541256, "category_id": 193, "iscrowd": 0, "bbox": [0, 230, 640, 172], "area": 50889}, {"id": 4739928, "category_id": 198, "iscrowd": 0, "bbox": [0, 197, 640, 88], "area": 20601}], "file_name": "000000091921.png", "image_id": 91921}, {"segments_info": [{"id": 2305858, "category_id": 1, "iscrowd": 0, "bbox": [0, 181, 61, 107], "area": 3729}, {"id": 800347, "category_id": 47, "iscrowd": 0, "bbox": [274, 0, 38, 96], "area": 2385}, {"id": 1059141, "category_id": 47, "iscrowd": 0, "bbox": [310, 0, 82, 180], "area": 11420}, {"id": 2640485, "category_id": 48, "iscrowd": 0, "bbox": [342, 304, 135, 123], "area": 2332}, {"id": 2838382, "category_id": 49, "iscrowd": 0, "bbox": [327, 260, 229, 88], "area": 4039}, {"id": 2246503, "category_id": 51, "iscrowd": 0, "bbox": [96, 177, 390, 250], "area": 49096}, {"id": 3628151, "category_id": 51, "iscrowd": 0, "bbox": [66, 72, 242, 143], "area": 9406}, {"id": 2048350, "category_id": 51, "iscrowd": 0, "bbox": [369, 79, 271, 171], "area": 35839}, {"id": 863308, "category_id": 54, "iscrowd": 0, "bbox": [143, 81, 132, 113], "area": 9442}, {"id": 265247, "category_id": 60, "iscrowd": 0, "bbox": [235, 259, 118, 127], "area": 10462}, {"id": 1188918, "category_id": 67, "iscrowd": 0, "bbox": [382, 1, 258, 421], "area": 48206}, {"id": 1056562, "category_id": 118, "iscrowd": 0, "bbox": [0, 0, 530, 158], "area": 8223}, {"id": 330514, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 25203}, {"id": 132117, "category_id": 195, "iscrowd": 0, "bbox": [577, 422, 63, 5], "area": 315}, {"id": 465711, "category_id": 196, "iscrowd": 0, "bbox": [67, 47, 356, 380], "area": 23392}], "file_name": "000000092053.png", "image_id": 92053}, {"segments_info": [{"id": 8351700, "category_id": 1, "iscrowd": 0, "bbox": [244, 165, 205, 314], "area": 31458}, {"id": 6123431, "category_id": 9, "iscrowd": 0, "bbox": [542, 12, 36, 25], "area": 566}, {"id": 3029063, "category_id": 62, "iscrowd": 0, "bbox": [1, 139, 199, 264], "area": 24853}, {"id": 3487819, "category_id": 62, "iscrowd": 0, "bbox": [65, 135, 183, 210], "area": 17502}, {"id": 2566231, "category_id": 63, "iscrowd": 0, "bbox": [315, 126, 325, 198], "area": 34586}, {"id": 7696235, "category_id": 63, "iscrowd": 0, "bbox": [1, 371, 220, 107], "area": 19829}, {"id": 7499634, "category_id": 72, "iscrowd": 0, "bbox": [182, 128, 146, 105], "area": 14378}, {"id": 9811665, "category_id": 88, "iscrowd": 0, "bbox": [429, 244, 211, 140], "area": 14465}, {"id": 10600388, "category_id": 90, "iscrowd": 0, "bbox": [381, 247, 73, 68], "area": 324}, {"id": 13424092, "category_id": 109, "iscrowd": 0, "bbox": [155, 126, 42, 58], "area": 600}, {"id": 1781845, "category_id": 118, "iscrowd": 0, "bbox": [170, 288, 143, 192], "area": 13693}, {"id": 1317154, "category_id": 156, "iscrowd": 0, "bbox": [0, 271, 42, 170], "area": 1140}, {"id": 4153218, "category_id": 177, "iscrowd": 0, "bbox": [166, 0, 474, 314], "area": 69119}, {"id": 11519169, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 187, 225], "area": 28712}, {"id": 1974094, "category_id": 188, "iscrowd": 0, "bbox": [604, 289, 36, 63], "area": 448}, {"id": 2973072, "category_id": 189, "iscrowd": 0, "bbox": [383, 277, 257, 203], "area": 31303}], "file_name": "000000092091.png", "image_id": 92091}, {"segments_info": [{"id": 13422782, "category_id": 44, "iscrowd": 0, "bbox": [325, 329, 24, 58], "area": 879}, {"id": 14143423, "category_id": 70, "iscrowd": 0, "bbox": [248, 386, 112, 245], "area": 14123}, {"id": 15131609, "category_id": 81, "iscrowd": 0, "bbox": [213, 351, 142, 75], "area": 6835}, {"id": 7837908, "category_id": 109, "iscrowd": 0, "bbox": [29, 28, 320, 494], "area": 110711}, {"id": 12369577, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 93, 640], "area": 29047}, {"id": 3295052, "category_id": 118, "iscrowd": 0, "bbox": [183, 492, 177, 148], "area": 4550}, {"id": 6714727, "category_id": 176, "iscrowd": 0, "bbox": [62, 446, 195, 125], "area": 7564}, {"id": 15526107, "category_id": 186, "iscrowd": 0, "bbox": [42, 0, 201, 47], "area": 4617}, {"id": 12044483, "category_id": 199, "iscrowd": 0, "bbox": [196, 0, 164, 501], "area": 27309}, {"id": 15521216, "category_id": 200, "iscrowd": 0, "bbox": [74, 523, 183, 117], "area": 15349}], "file_name": "000000092124.png", "image_id": 92124}, {"segments_info": [{"id": 9609649, "category_id": 42, "iscrowd": 0, "bbox": [186, 231, 158, 60], "area": 4612}, {"id": 8229831, "category_id": 42, "iscrowd": 0, "bbox": [260, 192, 114, 69], "area": 3787}, {"id": 12235372, "category_id": 61, "iscrowd": 0, "bbox": [133, 179, 371, 364], "area": 105600}, {"id": 8678968, "category_id": 196, "iscrowd": 0, "bbox": [59, 17, 502, 623], "area": 88997}], "file_name": "000000092177.png", "image_id": 92177}, {"segments_info": [{"id": 11840157, "category_id": 1, "iscrowd": 0, "bbox": [0, 228, 28, 59], "area": 556}, {"id": 1513505, "category_id": 1, "iscrowd": 0, "bbox": [430, 307, 50, 333], "area": 6297}, {"id": 10789293, "category_id": 1, "iscrowd": 0, "bbox": [7, 226, 30, 58], "area": 560}, {"id": 11051943, "category_id": 1, "iscrowd": 0, "bbox": [19, 216, 25, 61], "area": 578}, {"id": 4407880, "category_id": 1, "iscrowd": 0, "bbox": [66, 48, 301, 592], "area": 111428}, {"id": 13817041, "category_id": 9, "iscrowd": 0, "bbox": [85, 153, 99, 101], "area": 6644}, {"id": 10193285, "category_id": 32, "iscrowd": 0, "bbox": [240, 271, 84, 329], "area": 6068}, {"id": 5064772, "category_id": 44, "iscrowd": 0, "bbox": [287, 387, 56, 163], "area": 3214}, {"id": 15658731, "category_id": 144, "iscrowd": 0, "bbox": [0, 197, 480, 80], "area": 6298}, {"id": 12238005, "category_id": 148, "iscrowd": 0, "bbox": [0, 158, 480, 189], "area": 36552}, {"id": 16118506, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 158], "area": 59440}, {"id": 9675914, "category_id": 192, "iscrowd": 0, "bbox": [0, 138, 480, 27], "area": 5268}, {"id": 3175005, "category_id": 193, "iscrowd": 0, "bbox": [0, 320, 480, 320], "area": 61295}, {"id": 11911617, "category_id": 198, "iscrowd": 0, "bbox": [361, 300, 119, 27], "area": 2030}], "file_name": "000000092416.png", "image_id": 92416}, {"segments_info": [{"id": 1254190, "category_id": 44, "iscrowd": 0, "bbox": [0, 1, 88, 159], "area": 11329}, {"id": 7506587, "category_id": 47, "iscrowd": 0, "bbox": [471, 16, 77, 67], "area": 4561}, {"id": 3179375, "category_id": 56, "iscrowd": 0, "bbox": [249, 196, 85, 78], "area": 4342}, {"id": 3177584, "category_id": 56, "iscrowd": 0, "bbox": [538, 190, 61, 43], "area": 1659}, {"id": 2853492, "category_id": 56, "iscrowd": 0, "bbox": [226, 228, 45, 33], "area": 753}, {"id": 3967354, "category_id": 56, "iscrowd": 0, "bbox": [340, 179, 85, 55], "area": 2765}, {"id": 2588262, "category_id": 56, "iscrowd": 0, "bbox": [475, 151, 37, 25], "area": 562}, {"id": 3836539, "category_id": 56, "iscrowd": 0, "bbox": [353, 160, 61, 32], "area": 1013}, {"id": 2651749, "category_id": 56, "iscrowd": 0, "bbox": [429, 176, 46, 29], "area": 853}, {"id": 2523245, "category_id": 56, "iscrowd": 0, "bbox": [494, 217, 81, 48], "area": 1534}, {"id": 2056019, "category_id": 56, "iscrowd": 0, "bbox": [306, 259, 92, 75], "area": 4177}, {"id": 3043942, "category_id": 56, "iscrowd": 0, "bbox": [207, 248, 60, 72], "area": 2689}, {"id": 2652265, "category_id": 56, "iscrowd": 0, "bbox": [458, 191, 41, 30], "area": 709}, {"id": 3309434, "category_id": 56, "iscrowd": 0, "bbox": [473, 227, 72, 69], "area": 2712}, {"id": 2120525, "category_id": 56, "iscrowd": 0, "bbox": [425, 121, 48, 25], "area": 829}, {"id": 5140348, "category_id": 56, "iscrowd": 1, "bbox": [396, 112, 152, 56], "area": 693}, {"id": 7053496, "category_id": 59, "iscrowd": 0, "bbox": [17, 117, 611, 243], "area": 89715}, {"id": 5071994, "category_id": 107, "iscrowd": 0, "bbox": [0, 61, 640, 366], "area": 51504}, {"id": 4805987, "category_id": 189, "iscrowd": 0, "bbox": [264, 8, 212, 77], "area": 3779}, {"id": 9940673, "category_id": 195, "iscrowd": 0, "bbox": [79, 52, 57, 65], "area": 2188}, {"id": 7639466, "category_id": 196, "iscrowd": 0, "bbox": [168, 15, 369, 116], "area": 14233}, {"id": 5198939, "category_id": 199, "iscrowd": 0, "bbox": [523, 0, 117, 33], "area": 2140}], "file_name": "000000092660.png", "image_id": 92660}, {"segments_info": [{"id": 6586259, "category_id": 23, "iscrowd": 0, "bbox": [79, 23, 561, 488], "area": 164209}, {"id": 3555657, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 640, 420], "area": 126753}, {"id": 3290165, "category_id": 198, "iscrowd": 0, "bbox": [0, 326, 640, 191], "area": 39222}], "file_name": "000000092839.png", "image_id": 92839}, {"segments_info": [{"id": 8887222, "category_id": 1, "iscrowd": 0, "bbox": [180, 126, 214, 392], "area": 44744}, {"id": 10989759, "category_id": 1, "iscrowd": 0, "bbox": [20, 114, 258, 451], "area": 61301}, {"id": 2179674, "category_id": 1, "iscrowd": 0, "bbox": [403, 229, 21, 174], "area": 1830}, {"id": 11052710, "category_id": 46, "iscrowd": 0, "bbox": [186, 605, 54, 35], "area": 1553}, {"id": 10063755, "category_id": 46, "iscrowd": 0, "bbox": [406, 487, 18, 44], "area": 666}, {"id": 5396591, "category_id": 49, "iscrowd": 0, "bbox": [266, 479, 9, 17], "area": 59}, {"id": 8289920, "category_id": 49, "iscrowd": 0, "bbox": [91, 530, 54, 79], "area": 410}, {"id": 10202062, "category_id": 61, "iscrowd": 0, "bbox": [208, 500, 167, 127], "area": 15112}, {"id": 4013882, "category_id": 62, "iscrowd": 0, "bbox": [0, 330, 27, 80], "area": 1041}, {"id": 6910313, "category_id": 62, "iscrowd": 0, "bbox": [370, 266, 26, 21], "area": 449}, {"id": 8815738, "category_id": 62, "iscrowd": 0, "bbox": [351, 265, 19, 19], "area": 175}, {"id": 5198409, "category_id": 62, "iscrowd": 0, "bbox": [0, 301, 44, 98], "area": 2231}, {"id": 7566957, "category_id": 62, "iscrowd": 0, "bbox": [394, 264, 14, 10], "area": 110}, {"id": 4081489, "category_id": 128, "iscrowd": 0, "bbox": [201, 192, 216, 64], "area": 1002}, {"id": 5002844, "category_id": 154, "iscrowd": 0, "bbox": [0, 329, 424, 275], "area": 13894}, {"id": 2570555, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 424, 387], "area": 87789}, {"id": 11578025, "category_id": 189, "iscrowd": 0, "bbox": [0, 492, 424, 148], "area": 24138}, {"id": 1387563, "category_id": 193, "iscrowd": 0, "bbox": [0, 239, 410, 98], "area": 4936}, {"id": 12237242, "category_id": 195, "iscrowd": 0, "bbox": [93, 544, 87, 68], "area": 4089}], "file_name": "000000092939.png", "image_id": 92939}, {"segments_info": [{"id": 7565155, "category_id": 3, "iscrowd": 0, "bbox": [0, 284, 38, 36], "area": 891}, {"id": 2500129, "category_id": 3, "iscrowd": 0, "bbox": [381, 255, 18, 15], "area": 214}, {"id": 6511702, "category_id": 3, "iscrowd": 0, "bbox": [351, 256, 13, 11], "area": 129}, {"id": 5921359, "category_id": 3, "iscrowd": 0, "bbox": [88, 272, 21, 17], "area": 317}, {"id": 6248533, "category_id": 3, "iscrowd": 0, "bbox": [319, 246, 10, 9], "area": 70}, {"id": 3617325, "category_id": 3, "iscrowd": 0, "bbox": [331, 252, 20, 18], "area": 294}, {"id": 4604994, "category_id": 3, "iscrowd": 0, "bbox": [277, 253, 13, 13], "area": 124}, {"id": 4801593, "category_id": 3, "iscrowd": 0, "bbox": [34, 291, 27, 25], "area": 513}, {"id": 6907226, "category_id": 3, "iscrowd": 0, "bbox": [303, 255, 18, 14], "area": 204}, {"id": 5593685, "category_id": 3, "iscrowd": 0, "bbox": [143, 274, 68, 35], "area": 1461}, {"id": 7631464, "category_id": 3, "iscrowd": 0, "bbox": [333, 247, 8, 6], "area": 35}, {"id": 9077878, "category_id": 3, "iscrowd": 0, "bbox": [315, 272, 35, 30], "area": 772}, {"id": 3025958, "category_id": 10, "iscrowd": 0, "bbox": [300, 228, 2, 5], "area": 9}, {"id": 3749940, "category_id": 10, "iscrowd": 0, "bbox": [288, 228, 3, 5], "area": 15}, {"id": 13484472, "category_id": 10, "iscrowd": 0, "bbox": [304, 230, 4, 5], "area": 15}, {"id": 5790315, "category_id": 10, "iscrowd": 0, "bbox": [334, 233, 3, 10], "area": 28}, {"id": 7894112, "category_id": 10, "iscrowd": 0, "bbox": [330, 227, 3, 6], "area": 15}, {"id": 7828586, "category_id": 10, "iscrowd": 0, "bbox": [312, 226, 4, 6], "area": 18}, {"id": 3028551, "category_id": 128, "iscrowd": 0, "bbox": [0, 199, 240, 108], "area": 9504}, {"id": 7696491, "category_id": 149, "iscrowd": 0, "bbox": [0, 235, 427, 405], "area": 93172}, {"id": 6776932, "category_id": 184, "iscrowd": 0, "bbox": [11, 82, 416, 195], "area": 18230}, {"id": 15065052, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 256], "area": 64985}, {"id": 7371904, "category_id": 191, "iscrowd": 0, "bbox": [0, 253, 289, 387], "area": 53630}, {"id": 3487799, "category_id": 197, "iscrowd": 0, "bbox": [350, 225, 60, 50], "area": 1307}], "file_name": "000000093154.png", "image_id": 93154}, {"segments_info": [{"id": 8094360, "category_id": 1, "iscrowd": 0, "bbox": [66, 72, 198, 166], "area": 1552}, {"id": 7959167, "category_id": 1, "iscrowd": 0, "bbox": [56, 34, 205, 207], "area": 24135}, {"id": 4342873, "category_id": 1, "iscrowd": 0, "bbox": [329, 244, 171, 127], "area": 7616}, {"id": 8013097, "category_id": 38, "iscrowd": 0, "bbox": [153, 113, 210, 214], "area": 11116}, {"id": 8690091, "category_id": 154, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 118627}, {"id": 9597753, "category_id": 168, "iscrowd": 0, "bbox": [53, 152, 432, 126], "area": 17054}], "file_name": "000000093261.png", "image_id": 93261}, {"segments_info": [{"id": 3161971, "category_id": 1, "iscrowd": 0, "bbox": [3, 99, 296, 379], "area": 58553}, {"id": 3576513, "category_id": 58, "iscrowd": 0, "bbox": [158, 81, 482, 362], "area": 113596}, {"id": 2303787, "category_id": 62, "iscrowd": 0, "bbox": [142, 68, 181, 63], "area": 4715}, {"id": 329480, "category_id": 62, "iscrowd": 0, "bbox": [2, 99, 103, 93], "area": 7008}, {"id": 3817543, "category_id": 84, "iscrowd": 0, "bbox": [382, 361, 114, 81], "area": 6729}, {"id": 4544609, "category_id": 181, "iscrowd": 0, "bbox": [87, 0, 553, 133], "area": 7514}, {"id": 7973291, "category_id": 184, "iscrowd": 0, "bbox": [407, 0, 233, 108], "area": 19473}, {"id": 462098, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 72, 21], "area": 1249}, {"id": 1514272, "category_id": 195, "iscrowd": 0, "bbox": [316, 344, 98, 81], "area": 3706}, {"id": 1190207, "category_id": 196, "iscrowd": 0, "bbox": [298, 91, 186, 294], "area": 867}, {"id": 13164272, "category_id": 197, "iscrowd": 0, "bbox": [407, 0, 110, 56], "area": 3771}, {"id": 790812, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 213], "area": 17731}], "file_name": "000000093353.png", "image_id": 93353}, {"segments_info": [{"id": 7889248, "category_id": 1, "iscrowd": 0, "bbox": [79, 9, 351, 346], "area": 74473}, {"id": 7173250, "category_id": 44, "iscrowd": 0, "bbox": [580, 188, 13, 18], "area": 198}, {"id": 5066844, "category_id": 47, "iscrowd": 0, "bbox": [576, 206, 18, 33], "area": 530}, {"id": 3026252, "category_id": 62, "iscrowd": 0, "bbox": [0, 179, 26, 122], "area": 2161}, {"id": 3160663, "category_id": 62, "iscrowd": 0, "bbox": [40, 204, 59, 100], "area": 2095}, {"id": 5653832, "category_id": 62, "iscrowd": 0, "bbox": [432, 170, 69, 91], "area": 2405}, {"id": 5660269, "category_id": 67, "iscrowd": 0, "bbox": [427, 275, 213, 86], "area": 11615}, {"id": 10326165, "category_id": 84, "iscrowd": 0, "bbox": [441, 213, 20, 7], "area": 119}, {"id": 14799059, "category_id": 84, "iscrowd": 0, "bbox": [455, 223, 15, 3], "area": 37}, {"id": 11836572, "category_id": 84, "iscrowd": 0, "bbox": [454, 226, 16, 3], "area": 38}, {"id": 8554388, "category_id": 84, "iscrowd": 0, "bbox": [491, 212, 33, 11], "area": 280}, {"id": 3882845, "category_id": 85, "iscrowd": 0, "bbox": [118, 164, 27, 30], "area": 612}, {"id": 4209249, "category_id": 86, "iscrowd": 0, "bbox": [148, 168, 13, 23], "area": 257}, {"id": 4540255, "category_id": 118, "iscrowd": 0, "bbox": [0, 244, 482, 117], "area": 5640}, {"id": 11644087, "category_id": 130, "iscrowd": 0, "bbox": [0, 134, 516, 65], "area": 2863}, {"id": 14671073, "category_id": 181, "iscrowd": 0, "bbox": [0, 68, 513, 136], "area": 17851}, {"id": 5330539, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 510, 58], "area": 18663}, {"id": 4084338, "category_id": 188, "iscrowd": 0, "bbox": [112, 0, 528, 346], "area": 36158}, {"id": 5193022, "category_id": 189, "iscrowd": 0, "bbox": [481, 193, 34, 23], "area": 416}, {"id": 4671833, "category_id": 190, "iscrowd": 0, "bbox": [0, 266, 34, 87], "area": 1554}, {"id": 6843771, "category_id": 195, "iscrowd": 0, "bbox": [512, 193, 42, 35], "area": 692}, {"id": 5858170, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 304], "area": 43094}], "file_name": "000000093437.png", "image_id": 93437}, {"segments_info": [{"id": 2828848, "category_id": 1, "iscrowd": 0, "bbox": [103, 358, 8, 14], "area": 82}, {"id": 4407884, "category_id": 1, "iscrowd": 0, "bbox": [209, 247, 45, 64], "area": 972}, {"id": 4342347, "category_id": 1, "iscrowd": 0, "bbox": [115, 312, 49, 64], "area": 995}, {"id": 4143673, "category_id": 1, "iscrowd": 0, "bbox": [87, 344, 17, 36], "area": 276}, {"id": 4803158, "category_id": 1, "iscrowd": 0, "bbox": [209, 53, 260, 272], "area": 17496}, {"id": 2105122, "category_id": 1, "iscrowd": 0, "bbox": [574, 220, 60, 97], "area": 3526}, {"id": 4474191, "category_id": 1, "iscrowd": 0, "bbox": [9, 335, 64, 62], "area": 1027}, {"id": 4276297, "category_id": 1, "iscrowd": 0, "bbox": [218, 344, 46, 61], "area": 1035}, {"id": 4275002, "category_id": 1, "iscrowd": 0, "bbox": [244, 276, 16, 38], "area": 374}, {"id": 4406331, "category_id": 1, "iscrowd": 0, "bbox": [532, 166, 57, 164], "area": 5769}, {"id": 4274746, "category_id": 1, "iscrowd": 0, "bbox": [254, 369, 12, 36], "area": 277}, {"id": 4340796, "category_id": 1, "iscrowd": 0, "bbox": [168, 335, 16, 39], "area": 379}, {"id": 2039328, "category_id": 2, "iscrowd": 0, "bbox": [83, 365, 28, 20], "area": 149}, {"id": 4604226, "category_id": 2, "iscrowd": 0, "bbox": [509, 296, 33, 35], "area": 258}, {"id": 1973538, "category_id": 2, "iscrowd": 0, "bbox": [485, 299, 153, 38], "area": 839}, {"id": 2499622, "category_id": 2, "iscrowd": 0, "bbox": [238, 298, 28, 16], "area": 104}, {"id": 5658716, "category_id": 41, "iscrowd": 0, "bbox": [49, 174, 6, 6], "area": 21}, {"id": 2632237, "category_id": 41, "iscrowd": 0, "bbox": [217, 301, 26, 12], "area": 180}, {"id": 3488320, "category_id": 41, "iscrowd": 0, "bbox": [372, 267, 122, 58], "area": 663}, {"id": 2896179, "category_id": 41, "iscrowd": 0, "bbox": [49, 381, 27, 17], "area": 103}, {"id": 3093045, "category_id": 41, "iscrowd": 0, "bbox": [134, 362, 31, 18], "area": 161}, {"id": 3553852, "category_id": 41, "iscrowd": 0, "bbox": [223, 390, 26, 19], "area": 81}, {"id": 9405311, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 374], "area": 66929}, {"id": 2897720, "category_id": 193, "iscrowd": 0, "bbox": [0, 320, 338, 107], "area": 10790}], "file_name": "000000093717.png", "image_id": 93717}, {"segments_info": [{"id": 5924464, "category_id": 24, "iscrowd": 0, "bbox": [57, 94, 373, 329], "area": 60358}, {"id": 5069155, "category_id": 24, "iscrowd": 0, "bbox": [421, 44, 131, 175], "area": 14078}, {"id": 3497841, "category_id": 193, "iscrowd": 0, "bbox": [0, 20, 640, 437], "area": 181728}], "file_name": "000000093965.png", "image_id": 93965}, {"segments_info": [{"id": 4277592, "category_id": 1, "iscrowd": 0, "bbox": [56, 606, 10, 32], "area": 218}, {"id": 5527410, "category_id": 1, "iscrowd": 0, "bbox": [184, 609, 9, 20], "area": 95}, {"id": 5070473, "category_id": 1, "iscrowd": 0, "bbox": [158, 606, 6, 13], "area": 36}, {"id": 6582401, "category_id": 1, "iscrowd": 0, "bbox": [66, 612, 12, 27], "area": 210}, {"id": 5792877, "category_id": 1, "iscrowd": 0, "bbox": [140, 608, 11, 30], "area": 183}, {"id": 5857895, "category_id": 1, "iscrowd": 0, "bbox": [106, 608, 9, 26], "area": 150}, {"id": 7693673, "category_id": 1, "iscrowd": 0, "bbox": [161, 606, 10, 28], "area": 164}, {"id": 5198171, "category_id": 1, "iscrowd": 0, "bbox": [223, 605, 6, 10], "area": 40}, {"id": 6652309, "category_id": 1, "iscrowd": 0, "bbox": [35, 617, 6, 12], "area": 49}, {"id": 3353949, "category_id": 1, "iscrowd": 0, "bbox": [149, 609, 11, 28], "area": 194}, {"id": 8346994, "category_id": 1, "iscrowd": 0, "bbox": [49, 618, 8, 14], "area": 61}, {"id": 7434102, "category_id": 1, "iscrowd": 0, "bbox": [86, 607, 14, 33], "area": 266}, {"id": 6841968, "category_id": 1, "iscrowd": 0, "bbox": [11, 606, 16, 34], "area": 248}, {"id": 2307900, "category_id": 1, "iscrowd": 1, "bbox": [46, 602, 167, 25], "area": 197}, {"id": 8683135, "category_id": 85, "iscrowd": 0, "bbox": [111, 212, 29, 30], "area": 668}, {"id": 2902603, "category_id": 184, "iscrowd": 0, "bbox": [0, 404, 372, 227], "area": 52779}, {"id": 15259343, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 372, 480], "area": 119442}, {"id": 6065320, "category_id": 191, "iscrowd": 0, "bbox": [61, 622, 90, 18], "area": 772}, {"id": 3243651, "category_id": 193, "iscrowd": 0, "bbox": [0, 612, 372, 28], "area": 3145}, {"id": 5726571, "category_id": 197, "iscrowd": 0, "bbox": [0, 21, 372, 611], "area": 57370}], "file_name": "000000094157.png", "image_id": 94157}, {"segments_info": [{"id": 9077641, "category_id": 1, "iscrowd": 0, "bbox": [0, 252, 25, 111], "area": 1905}, {"id": 3559270, "category_id": 88, "iscrowd": 0, "bbox": [154, 306, 17, 29], "area": 273}, {"id": 2238770, "category_id": 88, "iscrowd": 0, "bbox": [168, 243, 62, 87], "area": 3745}, {"id": 4217719, "category_id": 88, "iscrowd": 0, "bbox": [421, 272, 33, 31], "area": 705}, {"id": 4741989, "category_id": 88, "iscrowd": 0, "bbox": [468, 274, 26, 27], "area": 564}, {"id": 4874349, "category_id": 88, "iscrowd": 0, "bbox": [428, 308, 28, 32], "area": 651}, {"id": 6846585, "category_id": 88, "iscrowd": 0, "bbox": [396, 315, 31, 30], "area": 503}, {"id": 7630707, "category_id": 88, "iscrowd": 0, "bbox": [232, 222, 150, 252], "area": 30386}, {"id": 3164780, "category_id": 88, "iscrowd": 0, "bbox": [199, 200, 28, 29], "area": 580}, {"id": 2309478, "category_id": 88, "iscrowd": 0, "bbox": [153, 245, 17, 30], "area": 306}, {"id": 3884877, "category_id": 88, "iscrowd": 0, "bbox": [416, 193, 26, 39], "area": 773}, {"id": 6521491, "category_id": 88, "iscrowd": 0, "bbox": [598, 402, 30, 78], "area": 1237}, {"id": 8621200, "category_id": 112, "iscrowd": 0, "bbox": [0, 216, 19, 149], "area": 828}, {"id": 5658454, "category_id": 166, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 255102}, {"id": 11643043, "category_id": 191, "iscrowd": 0, "bbox": [0, 285, 58, 195], "area": 7825}, {"id": 12634574, "category_id": 199, "iscrowd": 0, "bbox": [12, 221, 29, 102], "area": 1215}], "file_name": "000000094185.png", "image_id": 94185}, {"segments_info": [{"id": 11578279, "category_id": 1, "iscrowd": 0, "bbox": [50, 132, 158, 301], "area": 12145}, {"id": 4544321, "category_id": 15, "iscrowd": 0, "bbox": [16, 222, 267, 160], "area": 11354}, {"id": 5664166, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 375, 235], "area": 77735}, {"id": 13159629, "category_id": 175, "iscrowd": 0, "bbox": [0, 214, 375, 70], "area": 7122}, {"id": 4607556, "category_id": 190, "iscrowd": 0, "bbox": [10, 332, 258, 94], "area": 7919}, {"id": 1198893, "category_id": 193, "iscrowd": 0, "bbox": [0, 262, 375, 238], "area": 54208}], "file_name": "000000094326.png", "image_id": 94326}, {"segments_info": [{"id": 2114145, "category_id": 17, "iscrowd": 0, "bbox": [142, 15, 247, 274], "area": 45796}, {"id": 12443885, "category_id": 81, "iscrowd": 0, "bbox": [16, 63, 472, 261], "area": 58772}, {"id": 9099758, "category_id": 199, "iscrowd": 0, "bbox": [13, 0, 474, 188], "area": 23218}], "file_name": "000000094336.png", "image_id": 94336}, {"segments_info": [{"id": 5396055, "category_id": 1, "iscrowd": 0, "bbox": [287, 71, 156, 292], "area": 24752}, {"id": 2040868, "category_id": 27, "iscrowd": 0, "bbox": [388, 100, 19, 29], "area": 271}, {"id": 1382937, "category_id": 27, "iscrowd": 0, "bbox": [333, 115, 68, 70], "area": 1135}, {"id": 12633285, "category_id": 35, "iscrowd": 0, "bbox": [235, 350, 105, 47], "area": 1155}, {"id": 7040881, "category_id": 35, "iscrowd": 0, "bbox": [224, 391, 34, 8], "area": 56}, {"id": 12303033, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 238081}, {"id": 3292993, "category_id": 184, "iscrowd": 0, "bbox": [210, 12, 95, 195], "area": 7544}], "file_name": "000000094614.png", "image_id": 94614}, {"segments_info": [{"id": 11374185, "category_id": 1, "iscrowd": 0, "bbox": [237, 250, 9, 9], "area": 52}, {"id": 5723465, "category_id": 1, "iscrowd": 0, "bbox": [57, 255, 7, 14], "area": 69}, {"id": 6316930, "category_id": 1, "iscrowd": 0, "bbox": [310, 272, 8, 12], "area": 63}, {"id": 8290156, "category_id": 1, "iscrowd": 0, "bbox": [248, 252, 7, 8], "area": 45}, {"id": 8352125, "category_id": 1, "iscrowd": 0, "bbox": [76, 253, 5, 14], "area": 54}, {"id": 11118490, "category_id": 1, "iscrowd": 0, "bbox": [201, 254, 6, 13], "area": 48}, {"id": 9671311, "category_id": 1, "iscrowd": 0, "bbox": [178, 255, 4, 13], "area": 45}, {"id": 8752772, "category_id": 1, "iscrowd": 0, "bbox": [108, 253, 7, 15], "area": 72}, {"id": 7895142, "category_id": 1, "iscrowd": 0, "bbox": [97, 253, 9, 13], "area": 73}, {"id": 9537126, "category_id": 1, "iscrowd": 0, "bbox": [273, 252, 6, 12], "area": 62}, {"id": 4866869, "category_id": 1, "iscrowd": 0, "bbox": [67, 253, 10, 16], "area": 104}, {"id": 5263163, "category_id": 3, "iscrowd": 0, "bbox": [133, 266, 34, 21], "area": 581}, {"id": 4144437, "category_id": 3, "iscrowd": 0, "bbox": [313, 274, 62, 36], "area": 1335}, {"id": 3288344, "category_id": 10, "iscrowd": 0, "bbox": [218, 231, 9, 20], "area": 175}, {"id": 5722677, "category_id": 10, "iscrowd": 0, "bbox": [1, 224, 12, 23], "area": 254}, {"id": 2762516, "category_id": 10, "iscrowd": 0, "bbox": [110, 84, 38, 75], "area": 2585}, {"id": 6844263, "category_id": 15, "iscrowd": 0, "bbox": [248, 277, 52, 5], "area": 195}, {"id": 7172953, "category_id": 149, "iscrowd": 0, "bbox": [0, 475, 375, 25], "area": 3901}, {"id": 10849620, "category_id": 155, "iscrowd": 0, "bbox": [0, 215, 302, 55], "area": 5614}, {"id": 14136962, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 375, 239], "area": 77402}, {"id": 7041626, "category_id": 191, "iscrowd": 0, "bbox": [0, 308, 375, 192], "area": 48936}, {"id": 11185821, "category_id": 197, "iscrowd": 0, "bbox": [291, 152, 84, 134], "area": 8931}], "file_name": "000000094751.png", "image_id": 94751}, {"segments_info": [{"id": 6517892, "category_id": 22, "iscrowd": 0, "bbox": [237, 248, 96, 161], "area": 6334}, {"id": 6977932, "category_id": 22, "iscrowd": 0, "bbox": [132, 119, 310, 283], "area": 40663}, {"id": 4288362, "category_id": 184, "iscrowd": 0, "bbox": [0, 36, 640, 400], "area": 124075}, {"id": 12822159, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 241], "area": 65032}, {"id": 6659241, "category_id": 193, "iscrowd": 0, "bbox": [0, 322, 640, 190], "area": 91189}], "file_name": "000000094852.png", "image_id": 94852}, {"segments_info": [{"id": 7490891, "category_id": 1, "iscrowd": 0, "bbox": [123, 0, 163, 391], "area": 29662}, {"id": 7429719, "category_id": 1, "iscrowd": 0, "bbox": [280, 1, 97, 141], "area": 9838}, {"id": 10385248, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 49, 162], "area": 3488}, {"id": 3747626, "category_id": 1, "iscrowd": 0, "bbox": [370, 77, 107, 416], "area": 23360}, {"id": 8886186, "category_id": 20, "iscrowd": 0, "bbox": [42, 130, 182, 253], "area": 21775}, {"id": 11057093, "category_id": 20, "iscrowd": 0, "bbox": [286, 123, 96, 240], "area": 12480}, {"id": 4806255, "category_id": 20, "iscrowd": 0, "bbox": [244, 209, 107, 122], "area": 2914}, {"id": 3424609, "category_id": 20, "iscrowd": 0, "bbox": [98, 413, 375, 217], "area": 63745}, {"id": 8421506, "category_id": 31, "iscrowd": 0, "bbox": [5, 0, 24, 31], "area": 411}, {"id": 7102608, "category_id": 31, "iscrowd": 0, "bbox": [250, 20, 49, 196], "area": 2370}, {"id": 6971986, "category_id": 184, "iscrowd": 0, "bbox": [160, 20, 320, 146], "area": 6503}, {"id": 16447218, "category_id": 187, "iscrowd": 0, "bbox": [138, 0, 342, 101], "area": 12078}, {"id": 8754074, "category_id": 191, "iscrowd": 0, "bbox": [354, 305, 24, 20], "area": 78}, {"id": 6784393, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 61422}, {"id": 9937061, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 395, 479], "area": 50619}], "file_name": "000000094871.png", "image_id": 94871}, {"segments_info": [{"id": 3360067, "category_id": 1, "iscrowd": 0, "bbox": [176, 189, 27, 77], "area": 949}, {"id": 1644566, "category_id": 1, "iscrowd": 0, "bbox": [358, 224, 109, 181], "area": 11465}, {"id": 3152919, "category_id": 1, "iscrowd": 0, "bbox": [570, 231, 56, 64], "area": 2277}, {"id": 2634284, "category_id": 27, "iscrowd": 0, "bbox": [175, 199, 20, 23], "area": 377}, {"id": 1447188, "category_id": 27, "iscrowd": 0, "bbox": [384, 229, 56, 99], "area": 1183}, {"id": 6973285, "category_id": 35, "iscrowd": 0, "bbox": [160, 262, 71, 7], "area": 202}, {"id": 5722703, "category_id": 35, "iscrowd": 0, "bbox": [540, 287, 89, 9], "area": 181}, {"id": 2104087, "category_id": 36, "iscrowd": 0, "bbox": [565, 263, 63, 14], "area": 375}, {"id": 3157538, "category_id": 36, "iscrowd": 0, "bbox": [338, 332, 186, 54], "area": 2945}, {"id": 8945529, "category_id": 159, "iscrowd": 0, "bbox": [0, 153, 640, 274], "area": 115491}, {"id": 10256224, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 94], "area": 47047}, {"id": 6705730, "category_id": 192, "iscrowd": 0, "bbox": [0, 61, 640, 178], "area": 90211}], "file_name": "000000094944.png", "image_id": 94944}, {"segments_info": [{"id": 7232853, "category_id": 85, "iscrowd": 0, "bbox": [264, 219, 21, 19], "area": 317}, {"id": 7170149, "category_id": 184, "iscrowd": 0, "bbox": [429, 64, 171, 167], "area": 17585}, {"id": 15915733, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 600, 450], "area": 125185}, {"id": 2306614, "category_id": 197, "iscrowd": 0, "bbox": [0, 63, 600, 387], "area": 126895}], "file_name": "000000095069.png", "image_id": 95069}, {"segments_info": [{"id": 2895177, "category_id": 1, "iscrowd": 0, "bbox": [114, 247, 106, 131], "area": 5246}, {"id": 2237248, "category_id": 1, "iscrowd": 0, "bbox": [440, 214, 139, 167], "area": 7558}, {"id": 2500428, "category_id": 1, "iscrowd": 0, "bbox": [446, 44, 76, 103], "area": 3633}, {"id": 1776959, "category_id": 1, "iscrowd": 0, "bbox": [126, 59, 69, 79], "area": 2189}, {"id": 3489331, "category_id": 36, "iscrowd": 0, "bbox": [540, 367, 41, 24], "area": 325}, {"id": 4673091, "category_id": 36, "iscrowd": 0, "bbox": [122, 126, 29, 18], "area": 104}, {"id": 6184277, "category_id": 36, "iscrowd": 0, "bbox": [152, 351, 87, 33], "area": 791}, {"id": 7636592, "category_id": 36, "iscrowd": 0, "bbox": [417, 141, 109, 18], "area": 853}, {"id": 12368827, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 252139}], "file_name": "000000095155.png", "image_id": 95155}, {"segments_info": [{"id": 8088937, "category_id": 49, "iscrowd": 0, "bbox": [504, 301, 28, 59], "area": 994}, {"id": 5129800, "category_id": 49, "iscrowd": 0, "bbox": [569, 108, 36, 208], "area": 3592}, {"id": 7957866, "category_id": 51, "iscrowd": 0, "bbox": [0, 11, 95, 94], "area": 7374}, {"id": 8222321, "category_id": 51, "iscrowd": 0, "bbox": [512, 162, 128, 179], "area": 16721}, {"id": 2898265, "category_id": 61, "iscrowd": 0, "bbox": [252, 264, 157, 96], "area": 10317}, {"id": 2833246, "category_id": 61, "iscrowd": 0, "bbox": [108, 205, 144, 139], "area": 10842}, {"id": 12039832, "category_id": 61, "iscrowd": 0, "bbox": [279, 7, 235, 228], "area": 34496}, {"id": 2053756, "category_id": 61, "iscrowd": 0, "bbox": [87, 103, 93, 128], "area": 7825}, {"id": 2893867, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 101510}, {"id": 1256277, "category_id": 118, "iscrowd": 0, "bbox": [517, 0, 123, 175], "area": 11737}], "file_name": "000000095707.png", "image_id": 95707}, {"segments_info": [{"id": 4014676, "category_id": 47, "iscrowd": 0, "bbox": [235, 164, 227, 170], "area": 34362}, {"id": 5067897, "category_id": 86, "iscrowd": 0, "bbox": [0, 31, 230, 261], "area": 49777}, {"id": 10396077, "category_id": 86, "iscrowd": 0, "bbox": [183, 0, 264, 195], "area": 37333}, {"id": 4020351, "category_id": 118, "iscrowd": 0, "bbox": [431, 14, 69, 116], "area": 4955}, {"id": 9342867, "category_id": 195, "iscrowd": 0, "bbox": [0, 122, 500, 212], "area": 27351}, {"id": 11643812, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 71], "area": 10135}], "file_name": "000000095786.png", "image_id": 95786}, {"segments_info": [{"id": 5460295, "category_id": 6, "iscrowd": 0, "bbox": [131, 63, 435, 333], "area": 110699}, {"id": 6646893, "category_id": 149, "iscrowd": 0, "bbox": [0, 257, 559, 164], "area": 43376}, {"id": 1581339, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 421], "area": 54649}, {"id": 12500155, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 469, 184], "area": 48397}, {"id": 4148565, "category_id": 191, "iscrowd": 0, "bbox": [526, 367, 114, 54], "area": 3786}, {"id": 3166791, "category_id": 193, "iscrowd": 0, "bbox": [26, 96, 261, 197], "area": 4071}, {"id": 4410188, "category_id": 197, "iscrowd": 0, "bbox": [0, 178, 101, 85], "area": 4183}], "file_name": "000000095843.png", "image_id": 95843}, {"segments_info": [{"id": 4405341, "category_id": 1, "iscrowd": 0, "bbox": [330, 299, 45, 61], "area": 1357}, {"id": 4279909, "category_id": 1, "iscrowd": 0, "bbox": [447, 285, 52, 90], "area": 4395}, {"id": 10460330, "category_id": 1, "iscrowd": 0, "bbox": [408, 110, 21, 52], "area": 670}, {"id": 5192259, "category_id": 1, "iscrowd": 0, "bbox": [335, 295, 21, 17], "area": 147}, {"id": 9538715, "category_id": 1, "iscrowd": 0, "bbox": [6, 266, 120, 104], "area": 9554}, {"id": 4477804, "category_id": 1, "iscrowd": 0, "bbox": [357, 290, 84, 80], "area": 5352}, {"id": 15717599, "category_id": 1, "iscrowd": 0, "bbox": [312, 343, 51, 32], "area": 897}, {"id": 6580629, "category_id": 1, "iscrowd": 0, "bbox": [429, 80, 7, 9], "area": 46}, {"id": 9671836, "category_id": 1, "iscrowd": 0, "bbox": [356, 109, 14, 31], "area": 256}, {"id": 6380905, "category_id": 1, "iscrowd": 0, "bbox": [95, 275, 210, 100], "area": 16449}, {"id": 4345443, "category_id": 1, "iscrowd": 0, "bbox": [266, 276, 72, 98], "area": 3565}, {"id": 8882324, "category_id": 1, "iscrowd": 0, "bbox": [59, 115, 16, 34], "area": 346}, {"id": 4933715, "category_id": 1, "iscrowd": 0, "bbox": [77, 141, 37, 86], "area": 1523}, {"id": 6646382, "category_id": 1, "iscrowd": 1, "bbox": [0, 32, 458, 326], "area": 28575}, {"id": 3754051, "category_id": 39, "iscrowd": 0, "bbox": [116, 126, 12, 24], "area": 67}, {"id": 2633518, "category_id": 40, "iscrowd": 0, "bbox": [409, 129, 5, 3], "area": 8}, {"id": 6126218, "category_id": 40, "iscrowd": 0, "bbox": [69, 128, 6, 7], "area": 29}, {"id": 5526114, "category_id": 40, "iscrowd": 0, "bbox": [360, 116, 5, 4], "area": 16}, {"id": 6130062, "category_id": 145, "iscrowd": 0, "bbox": [0, 101, 500, 210], "area": 71017}, {"id": 4808532, "category_id": 185, "iscrowd": 0, "bbox": [376, 262, 124, 34], "area": 2350}, {"id": 6183515, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 81], "area": 20830}, {"id": 6646126, "category_id": 199, "iscrowd": 0, "bbox": [0, 36, 500, 88], "area": 17674}], "file_name": "000000095862.png", "image_id": 95862}, {"segments_info": [{"id": 6048709, "category_id": 13, "iscrowd": 0, "bbox": [18, 79, 266, 233], "area": 49008}, {"id": 13808503, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 169596}], "file_name": "000000095899.png", "image_id": 95899}, {"segments_info": [{"id": 3433810, "category_id": 28, "iscrowd": 0, "bbox": [0, 196, 640, 182], "area": 22037}, {"id": 9683125, "category_id": 51, "iscrowd": 0, "bbox": [42, 58, 140, 98], "area": 9786}, {"id": 11783633, "category_id": 84, "iscrowd": 0, "bbox": [297, 1, 288, 182], "area": 26667}, {"id": 8299693, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 178647}, {"id": 11582420, "category_id": 195, "iscrowd": 0, "bbox": [106, 175, 151, 72], "area": 6244}], "file_name": "000000096001.png", "image_id": 96001}, {"segments_info": [{"id": 1387132, "category_id": 1, "iscrowd": 0, "bbox": [243, 93, 155, 334], "area": 25666}, {"id": 1188716, "category_id": 1, "iscrowd": 0, "bbox": [2, 39, 71, 382], "area": 14534}, {"id": 4466973, "category_id": 1, "iscrowd": 0, "bbox": [296, 0, 55, 135], "area": 4369}, {"id": 5532062, "category_id": 43, "iscrowd": 0, "bbox": [65, 177, 137, 63], "area": 5162}, {"id": 6977445, "category_id": 112, "iscrowd": 0, "bbox": [99, 0, 76, 158], "area": 8543}, {"id": 8026269, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 270], "area": 95056}, {"id": 3619159, "category_id": 200, "iscrowd": 0, "bbox": [48, 132, 94, 39], "area": 2291}], "file_name": "000000096427.png", "image_id": 96427}, {"segments_info": [{"id": 4077378, "category_id": 1, "iscrowd": 0, "bbox": [123, 2, 289, 394], "area": 67499}, {"id": 7634311, "category_id": 63, "iscrowd": 0, "bbox": [3, 0, 423, 640], "area": 121960}, {"id": 5257280, "category_id": 75, "iscrowd": 0, "bbox": [114, 347, 111, 40], "area": 2838}], "file_name": "000000096493.png", "image_id": 96493}, {"segments_info": [{"id": 7825502, "category_id": 5, "iscrowd": 0, "bbox": [63, 11, 562, 158], "area": 31049}, {"id": 2958373, "category_id": 184, "iscrowd": 0, "bbox": [0, 91, 640, 57], "area": 7609}, {"id": 8809036, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 101], "area": 49862}, {"id": 8747385, "category_id": 197, "iscrowd": 0, "bbox": [514, 123, 16, 10], "area": 157}], "file_name": "000000096549.png", "image_id": 96549}, {"segments_info": [{"id": 4336416, "category_id": 1, "iscrowd": 0, "bbox": [290, 240, 65, 162], "area": 6060}, {"id": 2364941, "category_id": 27, "iscrowd": 0, "bbox": [317, 254, 38, 26], "area": 144}, {"id": 7686954, "category_id": 35, "iscrowd": 0, "bbox": [275, 381, 93, 27], "area": 175}, {"id": 12892072, "category_id": 159, "iscrowd": 0, "bbox": [0, 144, 640, 359], "area": 103748}, {"id": 2763823, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 420], "area": 182659}, {"id": 7309733, "category_id": 193, "iscrowd": 0, "bbox": [0, 304, 213, 45], "area": 3182}], "file_name": "000000096825.png", "image_id": 96825}, {"segments_info": [{"id": 9998649, "category_id": 23, "iscrowd": 0, "bbox": [25, 117, 410, 301], "area": 68243}, {"id": 11044632, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 478], "area": 237327}], "file_name": "000000096960.png", "image_id": 96960}, {"segments_info": [{"id": 1644311, "category_id": 72, "iscrowd": 0, "bbox": [230, 236, 23, 18], "area": 347}, {"id": 4551062, "category_id": 78, "iscrowd": 0, "bbox": [515, 198, 99, 55], "area": 4875}, {"id": 1262475, "category_id": 79, "iscrowd": 0, "bbox": [317, 270, 100, 110], "area": 9023}, {"id": 1390437, "category_id": 79, "iscrowd": 0, "bbox": [168, 266, 68, 93], "area": 5010}, {"id": 6130091, "category_id": 80, "iscrowd": 0, "bbox": [415, 217, 47, 36], "area": 1370}, {"id": 2115438, "category_id": 81, "iscrowd": 0, "bbox": [254, 254, 81, 9], "area": 507}, {"id": 1846336, "category_id": 107, "iscrowd": 0, "bbox": [0, 216, 640, 76], "area": 17110}, {"id": 476338, "category_id": 118, "iscrowd": 0, "bbox": [0, 341, 528, 87], "area": 25434}, {"id": 7312316, "category_id": 130, "iscrowd": 0, "bbox": [95, 0, 335, 34], "area": 730}, {"id": 2184332, "category_id": 176, "iscrowd": 0, "bbox": [185, 143, 455, 105], "area": 18961}, {"id": 10194297, "category_id": 181, "iscrowd": 0, "bbox": [0, 166, 34, 110], "area": 2727}, {"id": 1527184, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 375, 84], "area": 13044}, {"id": 1598137, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 137612}, {"id": 3695241, "category_id": 199, "iscrowd": 0, "bbox": [0, 30, 183, 246], "area": 31732}], "file_name": "000000097022.png", "image_id": 97022}, {"segments_info": [{"id": 2636099, "category_id": 22, "iscrowd": 0, "bbox": [368, 195, 220, 85], "area": 7948}, {"id": 2439499, "category_id": 22, "iscrowd": 0, "bbox": [83, 169, 244, 175], "area": 24582}, {"id": 3298415, "category_id": 154, "iscrowd": 0, "bbox": [0, 302, 640, 178], "area": 79255}, {"id": 1517610, "category_id": 184, "iscrowd": 0, "bbox": [0, 189, 640, 227], "area": 68308}, {"id": 14012104, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 225], "area": 126785}], "file_name": "000000097230.png", "image_id": 97230}, {"segments_info": [{"id": 3223128, "category_id": 1, "iscrowd": 0, "bbox": [85, 78, 245, 498], "area": 68665}, {"id": 10657441, "category_id": 36, "iscrowd": 0, "bbox": [0, 542, 400, 51], "area": 8950}, {"id": 14274757, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 457, 640], "area": 173207}, {"id": 5202803, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 457, 19], "area": 6555}, {"id": 11119012, "category_id": 191, "iscrowd": 0, "bbox": [0, 117, 457, 124], "area": 33229}], "file_name": "000000097278.png", "image_id": 97278}, {"segments_info": [{"id": 10913126, "category_id": 1, "iscrowd": 0, "bbox": [182, 105, 68, 70], "area": 1761}, {"id": 10059364, "category_id": 1, "iscrowd": 0, "bbox": [244, 105, 48, 69], "area": 1972}, {"id": 12294773, "category_id": 1, "iscrowd": 0, "bbox": [166, 116, 31, 57], "area": 933}, {"id": 1514788, "category_id": 62, "iscrowd": 0, "bbox": [459, 264, 41, 43], "area": 1444}, {"id": 921107, "category_id": 63, "iscrowd": 0, "bbox": [347, 148, 153, 153], "area": 8995}, {"id": 2966632, "category_id": 63, "iscrowd": 0, "bbox": [1, 168, 129, 206], "area": 25376}, {"id": 4545132, "category_id": 67, "iscrowd": 0, "bbox": [212, 127, 213, 241], "area": 22378}, {"id": 10920870, "category_id": 72, "iscrowd": 0, "bbox": [157, 97, 143, 93], "area": 7928}, {"id": 2635604, "category_id": 93, "iscrowd": 0, "bbox": [27, 164, 184, 133], "area": 4637}, {"id": 10343144, "category_id": 130, "iscrowd": 0, "bbox": [0, 55, 59, 114], "area": 3359}, {"id": 4883631, "category_id": 141, "iscrowd": 0, "bbox": [463, 200, 37, 60], "area": 1660}, {"id": 1119264, "category_id": 180, "iscrowd": 0, "bbox": [126, 0, 295, 242], "area": 45645}, {"id": 6192537, "category_id": 189, "iscrowd": 0, "bbox": [434, 239, 66, 73], "area": 2252}, {"id": 5543098, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 214], "area": 29748}, {"id": 3758203, "category_id": 200, "iscrowd": 0, "bbox": [130, 267, 321, 108], "area": 14092}], "file_name": "000000097337.png", "image_id": 97337}, {"segments_info": [{"id": 12110029, "category_id": 86, "iscrowd": 0, "bbox": [246, 88, 98, 140], "area": 10006}, {"id": 2632558, "category_id": 86, "iscrowd": 0, "bbox": [119, 1, 90, 96], "area": 5624}, {"id": 5597573, "category_id": 86, "iscrowd": 0, "bbox": [397, 112, 63, 142], "area": 7684}, {"id": 7308941, "category_id": 86, "iscrowd": 0, "bbox": [115, 283, 99, 172], "area": 12842}, {"id": 2827312, "category_id": 86, "iscrowd": 0, "bbox": [392, 476, 87, 164], "area": 11835}, {"id": 1780802, "category_id": 86, "iscrowd": 0, "bbox": [128, 113, 65, 136], "area": 8269}, {"id": 5134706, "category_id": 86, "iscrowd": 0, "bbox": [123, 479, 73, 161], "area": 10384}, {"id": 2765628, "category_id": 86, "iscrowd": 0, "bbox": [277, 419, 64, 158], "area": 9793}, {"id": 4533581, "category_id": 86, "iscrowd": 0, "bbox": [22, 197, 50, 108], "area": 4846}, {"id": 2038047, "category_id": 86, "iscrowd": 0, "bbox": [3, 489, 58, 146], "area": 6254}, {"id": 5846051, "category_id": 86, "iscrowd": 0, "bbox": [8, 348, 70, 118], "area": 6197}, {"id": 3751515, "category_id": 86, "iscrowd": 0, "bbox": [33, 59, 62, 124], "area": 5683}, {"id": 1718097, "category_id": 86, "iscrowd": 0, "bbox": [385, 293, 95, 164], "area": 12124}, {"id": 5720379, "category_id": 86, "iscrowd": 1, "bbox": [41, 0, 403, 96], "area": 10467}, {"id": 5598323, "category_id": 119, "iscrowd": 0, "bbox": [230, 0, 250, 427], "area": 20917}, {"id": 10463924, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 160028}], "file_name": "000000097585.png", "image_id": 97585}, {"segments_info": [{"id": 5590878, "category_id": 1, "iscrowd": 0, "bbox": [275, 220, 47, 36], "area": 980}, {"id": 6381395, "category_id": 1, "iscrowd": 0, "bbox": [218, 206, 24, 37], "area": 535}, {"id": 8946556, "category_id": 3, "iscrowd": 0, "bbox": [359, 160, 274, 170], "area": 21653}, {"id": 8618107, "category_id": 3, "iscrowd": 0, "bbox": [103, 159, 418, 217], "area": 51627}, {"id": 3946808, "category_id": 36, "iscrowd": 0, "bbox": [195, 155, 134, 32], "area": 3091}, {"id": 5331291, "category_id": 125, "iscrowd": 0, "bbox": [0, 195, 640, 285], "area": 109417}, {"id": 13616322, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 212], "area": 118608}], "file_name": "000000097679.png", "image_id": 97679}, {"segments_info": [{"id": 9144717, "category_id": 1, "iscrowd": 0, "bbox": [411, 191, 83, 129], "area": 3264}, {"id": 7430748, "category_id": 1, "iscrowd": 0, "bbox": [299, 164, 123, 180], "area": 7585}, {"id": 7694949, "category_id": 1, "iscrowd": 0, "bbox": [106, 125, 128, 230], "area": 12922}, {"id": 13947598, "category_id": 8, "iscrowd": 0, "bbox": [1, 109, 62, 147], "area": 7505}, {"id": 9802901, "category_id": 8, "iscrowd": 0, "bbox": [38, 54, 339, 292], "area": 44671}, {"id": 8617595, "category_id": 19, "iscrowd": 0, "bbox": [224, 74, 217, 246], "area": 15270}, {"id": 8091764, "category_id": 184, "iscrowd": 0, "bbox": [300, 48, 300, 136], "area": 21612}, {"id": 16645629, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 600, 234], "area": 41028}, {"id": 10924732, "category_id": 193, "iscrowd": 0, "bbox": [303, 105, 297, 122], "area": 13556}, {"id": 9213346, "category_id": 194, "iscrowd": 0, "bbox": [0, 209, 600, 191], "area": 61151}], "file_name": "000000097924.png", "image_id": 97924}, {"segments_info": [{"id": 3157808, "category_id": 1, "iscrowd": 0, "bbox": [35, 233, 69, 205], "area": 7991}, {"id": 5195326, "category_id": 1, "iscrowd": 0, "bbox": [395, 248, 19, 61], "area": 599}, {"id": 1777185, "category_id": 1, "iscrowd": 0, "bbox": [182, 242, 23, 83], "area": 1282}, {"id": 5526865, "category_id": 1, "iscrowd": 0, "bbox": [438, 246, 14, 53], "area": 406}, {"id": 6190203, "category_id": 1, "iscrowd": 0, "bbox": [371, 240, 25, 63], "area": 857}, {"id": 6909551, "category_id": 1, "iscrowd": 0, "bbox": [195, 212, 125, 386], "area": 25634}, {"id": 5127755, "category_id": 1, "iscrowd": 0, "bbox": [470, 242, 20, 84], "area": 959}, {"id": 3026232, "category_id": 1, "iscrowd": 0, "bbox": [304, 240, 18, 46], "area": 417}, {"id": 7305847, "category_id": 1, "iscrowd": 0, "bbox": [85, 242, 12, 41], "area": 338}, {"id": 5333346, "category_id": 1, "iscrowd": 0, "bbox": [445, 241, 31, 86], "area": 1589}, {"id": 5395334, "category_id": 1, "iscrowd": 0, "bbox": [322, 248, 14, 43], "area": 317}, {"id": 3553858, "category_id": 1, "iscrowd": 0, "bbox": [287, 232, 22, 58], "area": 943}, {"id": 4350294, "category_id": 1, "iscrowd": 1, "bbox": [1, 227, 600, 222], "area": 24192}, {"id": 4760184, "category_id": 2, "iscrowd": 0, "bbox": [413, 275, 15, 11], "area": 121}, {"id": 3624255, "category_id": 2, "iscrowd": 0, "bbox": [97, 348, 71, 54], "area": 1167}, {"id": 2702895, "category_id": 2, "iscrowd": 0, "bbox": [16, 332, 107, 89], "area": 3209}, {"id": 4610892, "category_id": 15, "iscrowd": 0, "bbox": [319, 311, 133, 63], "area": 4608}, {"id": 2239009, "category_id": 15, "iscrowd": 0, "bbox": [90, 287, 50, 36], "area": 844}, {"id": 10924737, "category_id": 92, "iscrowd": 0, "bbox": [0, 18, 612, 182], "area": 87723}, {"id": 4089174, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 612, 413], "area": 59487}, {"id": 16251641, "category_id": 187, "iscrowd": 0, "bbox": [224, 0, 290, 63], "area": 14274}, {"id": 14674155, "category_id": 191, "iscrowd": 0, "bbox": [444, 318, 168, 47], "area": 2841}, {"id": 2321736, "category_id": 193, "iscrowd": 0, "bbox": [0, 265, 612, 347], "area": 132333}], "file_name": "000000097988.png", "image_id": 97988}, {"segments_info": [{"id": 3681335, "category_id": 44, "iscrowd": 0, "bbox": [505, 235, 27, 65], "area": 1027}, {"id": 3287078, "category_id": 47, "iscrowd": 0, "bbox": [511, 282, 35, 46], "area": 1220}, {"id": 2960171, "category_id": 47, "iscrowd": 0, "bbox": [619, 306, 21, 42], "area": 703}, {"id": 4863025, "category_id": 72, "iscrowd": 0, "bbox": [236, 170, 161, 100], "area": 15673}, {"id": 8217695, "category_id": 73, "iscrowd": 0, "bbox": [383, 201, 130, 124], "area": 9087}, {"id": 5190448, "category_id": 73, "iscrowd": 0, "bbox": [34, 244, 143, 139], "area": 7967}, {"id": 7428176, "category_id": 73, "iscrowd": 0, "bbox": [75, 182, 116, 84], "area": 5011}, {"id": 2892062, "category_id": 74, "iscrowd": 0, "bbox": [442, 327, 32, 28], "area": 585}, {"id": 2234389, "category_id": 76, "iscrowd": 0, "bbox": [393, 266, 107, 39], "area": 1991}, {"id": 5586486, "category_id": 76, "iscrowd": 0, "bbox": [218, 307, 183, 45], "area": 7373}, {"id": 4403242, "category_id": 76, "iscrowd": 0, "bbox": [63, 307, 141, 77], "area": 5054}, {"id": 3548963, "category_id": 76, "iscrowd": 0, "bbox": [86, 234, 106, 30], "area": 1280}, {"id": 2565927, "category_id": 84, "iscrowd": 0, "bbox": [593, 356, 47, 71], "area": 2685}, {"id": 4735550, "category_id": 84, "iscrowd": 0, "bbox": [603, 269, 18, 67], "area": 418}, {"id": 3552056, "category_id": 84, "iscrowd": 0, "bbox": [618, 273, 21, 63], "area": 345}, {"id": 2565155, "category_id": 84, "iscrowd": 0, "bbox": [602, 257, 28, 79], "area": 655}, {"id": 4272686, "category_id": 84, "iscrowd": 0, "bbox": [515, 329, 82, 45], "area": 2212}, {"id": 4340280, "category_id": 84, "iscrowd": 0, "bbox": [597, 259, 18, 76], "area": 433}, {"id": 1906715, "category_id": 84, "iscrowd": 0, "bbox": [592, 262, 17, 72], "area": 406}, {"id": 4469552, "category_id": 85, "iscrowd": 0, "bbox": [254, 272, 25, 18], "area": 421}, {"id": 13614009, "category_id": 109, "iscrowd": 0, "bbox": [303, 0, 337, 256], "area": 55281}, {"id": 6369325, "category_id": 141, "iscrowd": 0, "bbox": [198, 339, 216, 37], "area": 4101}, {"id": 3421758, "category_id": 156, "iscrowd": 0, "bbox": [585, 81, 55, 295], "area": 1131}, {"id": 2631468, "category_id": 177, "iscrowd": 0, "bbox": [397, 172, 99, 26], "area": 1421}, {"id": 1775385, "category_id": 189, "iscrowd": 0, "bbox": [0, 201, 614, 226], "area": 50372}, {"id": 9732472, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 640, 309], "area": 11399}, {"id": 13086886, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 362], "area": 70362}], "file_name": "000000097994.png", "image_id": 97994}, {"segments_info": [{"id": 2765897, "category_id": 50, "iscrowd": 0, "bbox": [158, 400, 17, 27], "area": 256}, {"id": 2504517, "category_id": 51, "iscrowd": 0, "bbox": [111, 413, 67, 14], "area": 549}, {"id": 10728386, "category_id": 51, "iscrowd": 0, "bbox": [106, 356, 46, 36], "area": 1214}, {"id": 11250345, "category_id": 86, "iscrowd": 0, "bbox": [9, 164, 38, 51], "area": 1113}, {"id": 2962501, "category_id": 86, "iscrowd": 0, "bbox": [383, 243, 94, 78], "area": 5315}, {"id": 13486780, "category_id": 112, "iscrowd": 0, "bbox": [254, 0, 201, 192], "area": 27048}, {"id": 7434866, "category_id": 144, "iscrowd": 0, "bbox": [0, 163, 178, 235], "area": 14818}, {"id": 11645092, "category_id": 181, "iscrowd": 0, "bbox": [11, 0, 620, 82], "area": 10089}, {"id": 13747373, "category_id": 190, "iscrowd": 0, "bbox": [9, 63, 455, 136], "area": 3445}, {"id": 9013918, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 355], "area": 89150}], "file_name": "000000098018.png", "image_id": 98018}, {"segments_info": [{"id": 3362652, "category_id": 16, "iscrowd": 0, "bbox": [21, 29, 194, 116], "area": 8147}, {"id": 3097684, "category_id": 16, "iscrowd": 0, "bbox": [193, 65, 127, 108], "area": 8329}, {"id": 12961221, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 320, 216], "area": 46816}], "file_name": "000000098261.png", "image_id": 98261}, {"segments_info": [{"id": 10132122, "category_id": 1, "iscrowd": 0, "bbox": [164, 254, 51, 117], "area": 2876}, {"id": 5131854, "category_id": 1, "iscrowd": 0, "bbox": [236, 252, 23, 35], "area": 323}, {"id": 3618615, "category_id": 1, "iscrowd": 0, "bbox": [24, 279, 59, 99], "area": 3124}, {"id": 3487029, "category_id": 1, "iscrowd": 0, "bbox": [219, 253, 17, 26], "area": 240}, {"id": 2631720, "category_id": 1, "iscrowd": 0, "bbox": [283, 248, 7, 30], "area": 148}, {"id": 3618610, "category_id": 1, "iscrowd": 0, "bbox": [361, 262, 5, 20], "area": 75}, {"id": 3289650, "category_id": 1, "iscrowd": 0, "bbox": [205, 255, 21, 26], "area": 312}, {"id": 9276813, "category_id": 1, "iscrowd": 0, "bbox": [391, 253, 8, 23], "area": 70}, {"id": 5460819, "category_id": 1, "iscrowd": 0, "bbox": [79, 252, 17, 65], "area": 623}, {"id": 6184542, "category_id": 1, "iscrowd": 0, "bbox": [0, 236, 25, 130], "area": 2267}, {"id": 4473924, "category_id": 1, "iscrowd": 0, "bbox": [115, 237, 20, 78], "area": 1006}, {"id": 6776679, "category_id": 1, "iscrowd": 0, "bbox": [380, 254, 17, 47], "area": 378}, {"id": 3355443, "category_id": 1, "iscrowd": 0, "bbox": [269, 253, 16, 26], "area": 216}, {"id": 4079166, "category_id": 1, "iscrowd": 1, "bbox": [174, 249, 16, 19], "area": 104}, {"id": 12632256, "category_id": 15, "iscrowd": 0, "bbox": [250, 285, 39, 4], "area": 79}, {"id": 7829367, "category_id": 39, "iscrowd": 0, "bbox": [163, 235, 15, 48], "area": 124}, {"id": 6250335, "category_id": 40, "iscrowd": 0, "bbox": [81, 300, 17, 16], "area": 132}, {"id": 13224393, "category_id": 154, "iscrowd": 0, "bbox": [0, 287, 415, 353], "area": 134977}, {"id": 2368548, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 415, 323], "area": 84482}, {"id": 3289658, "category_id": 185, "iscrowd": 0, "bbox": [0, 128, 415, 191], "area": 31250}, {"id": 13816530, "category_id": 187, "iscrowd": 0, "bbox": [237, 0, 86, 51], "area": 2292}], "file_name": "000000098287.png", "image_id": 98287}, {"segments_info": [{"id": 2763311, "category_id": 1, "iscrowd": 0, "bbox": [8, 524, 12, 43], "area": 240}, {"id": 4802120, "category_id": 1, "iscrowd": 0, "bbox": [327, 379, 31, 24], "area": 350}, {"id": 2631464, "category_id": 1, "iscrowd": 0, "bbox": [302, 488, 18, 21], "area": 219}, {"id": 5136495, "category_id": 3, "iscrowd": 0, "bbox": [12, 535, 42, 33], "area": 848}, {"id": 7631735, "category_id": 3, "iscrowd": 0, "bbox": [67, 531, 34, 40], "area": 920}, {"id": 8484725, "category_id": 3, "iscrowd": 0, "bbox": [244, 517, 236, 123], "area": 21429}, {"id": 5460822, "category_id": 3, "iscrowd": 0, "bbox": [39, 532, 44, 33], "area": 395}, {"id": 11907503, "category_id": 3, "iscrowd": 0, "bbox": [352, 523, 128, 62], "area": 1673}, {"id": 8617339, "category_id": 3, "iscrowd": 0, "bbox": [451, 506, 29, 40], "area": 499}, {"id": 6249308, "category_id": 6, "iscrowd": 0, "bbox": [270, 341, 210, 242], "area": 35797}, {"id": 8749443, "category_id": 85, "iscrowd": 0, "bbox": [218, 131, 49, 49], "area": 1841}, {"id": 7762549, "category_id": 149, "iscrowd": 0, "bbox": [0, 551, 271, 89], "area": 16054}, {"id": 15196900, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 323], "area": 121128}, {"id": 5859701, "category_id": 191, "iscrowd": 0, "bbox": [69, 560, 104, 41], "area": 2457}, {"id": 4606290, "category_id": 197, "iscrowd": 0, "bbox": [0, 38, 480, 545], "area": 101649}], "file_name": "000000098392.png", "image_id": 98392}, {"segments_info": [{"id": 4078396, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 605, 480], "area": 54979}, {"id": 14729121, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 129269}, {"id": 7632760, "category_id": 197, "iscrowd": 0, "bbox": [59, 50, 482, 430], "area": 91782}], "file_name": "000000098497.png", "image_id": 98497}, {"segments_info": [{"id": 8881023, "category_id": 5, "iscrowd": 0, "bbox": [85, 129, 529, 157], "area": 28111}, {"id": 6512732, "category_id": 8, "iscrowd": 0, "bbox": [86, 260, 103, 26], "area": 1596}, {"id": 4536625, "category_id": 8, "iscrowd": 0, "bbox": [0, 298, 26, 54], "area": 1172}, {"id": 11974069, "category_id": 149, "iscrowd": 0, "bbox": [158, 248, 482, 35], "area": 7492}, {"id": 13423830, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 222], "area": 126027}, {"id": 7829109, "category_id": 191, "iscrowd": 0, "bbox": [0, 237, 640, 243], "area": 130097}, {"id": 8880764, "category_id": 197, "iscrowd": 0, "bbox": [0, 172, 640, 81], "area": 9321}], "file_name": "000000098520.png", "image_id": 98520}, {"segments_info": [{"id": 8161941, "category_id": 61, "iscrowd": 0, "bbox": [27, 190, 373, 401], "area": 116319}, {"id": 1381683, "category_id": 122, "iscrowd": 0, "bbox": [13, 0, 415, 335], "area": 71781}, {"id": 3748918, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 428, 640], "area": 38823}, {"id": 10591642, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 428, 640], "area": 46647}], "file_name": "000000098633.png", "image_id": 98633}, {"segments_info": [{"id": 9803157, "category_id": 1, "iscrowd": 0, "bbox": [367, 110, 140, 89], "area": 4436}, {"id": 6513507, "category_id": 1, "iscrowd": 0, "bbox": [16, 154, 20, 36], "area": 541}, {"id": 10461087, "category_id": 1, "iscrowd": 0, "bbox": [59, 157, 21, 33], "area": 480}, {"id": 6710886, "category_id": 15, "iscrowd": 0, "bbox": [587, 147, 51, 128], "area": 5140}, {"id": 10197915, "category_id": 15, "iscrowd": 0, "bbox": [178, 177, 317, 142], "area": 22759}, {"id": 9868950, "category_id": 155, "iscrowd": 0, "bbox": [0, 10, 640, 192], "area": 99579}, {"id": 12434877, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 19], "area": 9652}, {"id": 8421504, "category_id": 191, "iscrowd": 0, "bbox": [0, 223, 640, 136], "area": 49532}, {"id": 12105912, "category_id": 199, "iscrowd": 0, "bbox": [0, 164, 640, 138], "area": 34300}], "file_name": "000000098716.png", "image_id": 98716}, {"segments_info": [{"id": 2962750, "category_id": 17, "iscrowd": 0, "bbox": [113, 114, 286, 360], "area": 52673}, {"id": 16184820, "category_id": 51, "iscrowd": 0, "bbox": [432, 275, 60, 23], "area": 1150}, {"id": 7762288, "category_id": 72, "iscrowd": 0, "bbox": [51, 59, 519, 355], "area": 121380}, {"id": 9933455, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 216, 451], "area": 34279}, {"id": 8817302, "category_id": 189, "iscrowd": 0, "bbox": [0, 396, 628, 84], "area": 24898}, {"id": 11384248, "category_id": 199, "iscrowd": 0, "bbox": [214, 0, 426, 480], "area": 59601}], "file_name": "000000098839.png", "image_id": 98839}, {"segments_info": [{"id": 9336434, "category_id": 1, "iscrowd": 0, "bbox": [197, 2, 54, 87], "area": 3583}, {"id": 4338994, "category_id": 1, "iscrowd": 0, "bbox": [45, 94, 56, 96], "area": 3659}, {"id": 6855858, "category_id": 1, "iscrowd": 0, "bbox": [84, 186, 211, 325], "area": 18586}, {"id": 5527649, "category_id": 1, "iscrowd": 0, "bbox": [293, 1, 51, 87], "area": 3194}, {"id": 4279642, "category_id": 1, "iscrowd": 0, "bbox": [352, 92, 74, 123], "area": 5110}, {"id": 6773590, "category_id": 1, "iscrowd": 0, "bbox": [221, 205, 52, 100], "area": 2617}, {"id": 7818279, "category_id": 1, "iscrowd": 0, "bbox": [100, 108, 47, 98], "area": 3419}, {"id": 4538697, "category_id": 1, "iscrowd": 0, "bbox": [50, 49, 54, 79], "area": 1869}, {"id": 9077630, "category_id": 1, "iscrowd": 0, "bbox": [311, 101, 54, 110], "area": 3488}, {"id": 4537145, "category_id": 1, "iscrowd": 0, "bbox": [0, 97, 37, 93], "area": 1936}, {"id": 4471092, "category_id": 1, "iscrowd": 0, "bbox": [245, 50, 58, 125], "area": 4533}, {"id": 6119519, "category_id": 1, "iscrowd": 0, "bbox": [139, 104, 62, 116], "area": 4025}, {"id": 6116436, "category_id": 1, "iscrowd": 0, "bbox": [102, 49, 42, 73], "area": 1933}, {"id": 4998474, "category_id": 1, "iscrowd": 1, "bbox": [0, 0, 427, 180], "area": 28378}, {"id": 5292168, "category_id": 37, "iscrowd": 0, "bbox": [0, 137, 20, 25], "area": 424}, {"id": 6842742, "category_id": 43, "iscrowd": 0, "bbox": [7, 197, 78, 63], "area": 2420}, {"id": 6378827, "category_id": 62, "iscrowd": 0, "bbox": [402, 88, 25, 50], "area": 1007}, {"id": 9735293, "category_id": 62, "iscrowd": 0, "bbox": [159, 34, 38, 41], "area": 1394}, {"id": 7167832, "category_id": 62, "iscrowd": 0, "bbox": [153, 89, 51, 48], "area": 1244}, {"id": 3026478, "category_id": 62, "iscrowd": 0, "bbox": [372, 179, 35, 30], "area": 324}, {"id": 6181193, "category_id": 62, "iscrowd": 0, "bbox": [353, 87, 50, 41], "area": 884}, {"id": 8156519, "category_id": 62, "iscrowd": 0, "bbox": [303, 142, 31, 58], "area": 505}, {"id": 6707538, "category_id": 62, "iscrowd": 0, "bbox": [301, 87, 52, 49], "area": 1305}, {"id": 9475222, "category_id": 62, "iscrowd": 0, "bbox": [265, 269, 14, 86], "area": 415}, {"id": 6838607, "category_id": 62, "iscrowd": 0, "bbox": [203, 89, 48, 52], "area": 2151}, {"id": 3755359, "category_id": 119, "iscrowd": 0, "bbox": [0, 189, 427, 69], "area": 9447}, {"id": 6067423, "category_id": 145, "iscrowd": 0, "bbox": [0, 339, 427, 301], "area": 117293}, {"id": 10790555, "category_id": 197, "iscrowd": 0, "bbox": [184, 130, 129, 73], "area": 4881}, {"id": 2632500, "category_id": 199, "iscrowd": 0, "bbox": [0, 186, 427, 172], "area": 35721}], "file_name": "000000098853.png", "image_id": 98853}, {"segments_info": [{"id": 5853770, "category_id": 1, "iscrowd": 0, "bbox": [1, 1, 340, 203], "area": 47374}, {"id": 11447200, "category_id": 38, "iscrowd": 0, "bbox": [51, 118, 459, 291], "area": 67565}, {"id": 8019769, "category_id": 87, "iscrowd": 0, "bbox": [604, 362, 36, 99], "area": 1454}, {"id": 9606546, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 482], "area": 187607}], "file_name": "000000099024.png", "image_id": 99024}, {"segments_info": [{"id": 6382974, "category_id": 1, "iscrowd": 0, "bbox": [524, 110, 114, 227], "area": 12077}, {"id": 7696769, "category_id": 46, "iscrowd": 0, "bbox": [281, 229, 202, 135], "area": 8623}, {"id": 6578546, "category_id": 48, "iscrowd": 0, "bbox": [524, 313, 22, 12], "area": 103}, {"id": 11312291, "category_id": 48, "iscrowd": 0, "bbox": [199, 306, 24, 11], "area": 121}, {"id": 8615546, "category_id": 49, "iscrowd": 0, "bbox": [128, 322, 109, 62], "area": 1466}, {"id": 11309209, "category_id": 50, "iscrowd": 0, "bbox": [383, 336, 42, 12], "area": 166}, {"id": 8878988, "category_id": 50, "iscrowd": 0, "bbox": [395, 319, 185, 79], "area": 472}, {"id": 14207689, "category_id": 50, "iscrowd": 0, "bbox": [287, 354, 23, 10], "area": 173}, {"id": 7369865, "category_id": 51, "iscrowd": 0, "bbox": [303, 336, 83, 48], "area": 3081}, {"id": 9606316, "category_id": 51, "iscrowd": 0, "bbox": [424, 335, 151, 71], "area": 4239}, {"id": 10002604, "category_id": 51, "iscrowd": 0, "bbox": [365, 356, 173, 104], "area": 12826}, {"id": 8427451, "category_id": 59, "iscrowd": 0, "bbox": [359, 298, 197, 30], "area": 3253}, {"id": 9410745, "category_id": 59, "iscrowd": 0, "bbox": [127, 308, 203, 34], "area": 4865}, {"id": 2826553, "category_id": 109, "iscrowd": 0, "bbox": [483, 0, 141, 183], "area": 11083}, {"id": 10397851, "category_id": 128, "iscrowd": 0, "bbox": [33, 33, 535, 220], "area": 37490}, {"id": 9087390, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 421, 244], "area": 52920}, {"id": 15791084, "category_id": 187, "iscrowd": 0, "bbox": [34, 0, 490, 146], "area": 29668}, {"id": 9998742, "category_id": 189, "iscrowd": 0, "bbox": [0, 302, 526, 178], "area": 52786}, {"id": 12892862, "category_id": 195, "iscrowd": 0, "bbox": [175, 282, 97, 36], "area": 1517}, {"id": 7636656, "category_id": 196, "iscrowd": 0, "bbox": [280, 288, 272, 49], "area": 1462}, {"id": 12501953, "category_id": 199, "iscrowd": 0, "bbox": [0, 217, 564, 200], "area": 33986}], "file_name": "000000099039.png", "image_id": 99039}, {"segments_info": [{"id": 1911871, "category_id": 48, "iscrowd": 0, "bbox": [404, 0, 236, 304], "area": 9690}, {"id": 4815533, "category_id": 51, "iscrowd": 0, "bbox": [38, 81, 585, 464], "area": 191704}, {"id": 2121845, "category_id": 56, "iscrowd": 0, "bbox": [360, 413, 41, 53], "area": 1438}, {"id": 2578794, "category_id": 56, "iscrowd": 0, "bbox": [227, 398, 47, 56], "area": 1856}, {"id": 1992851, "category_id": 56, "iscrowd": 0, "bbox": [448, 297, 58, 43], "area": 1606}, {"id": 1392976, "category_id": 56, "iscrowd": 0, "bbox": [392, 393, 45, 61], "area": 1496}, {"id": 2918825, "category_id": 56, "iscrowd": 0, "bbox": [95, 312, 88, 60], "area": 2788}, {"id": 10974290, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 640, 559], "area": 147048}], "file_name": "000000099053.png", "image_id": 99053}, {"segments_info": [{"id": 3154720, "category_id": 1, "iscrowd": 0, "bbox": [261, 469, 16, 26], "area": 299}, {"id": 3234907, "category_id": 1, "iscrowd": 0, "bbox": [60, 549, 43, 54], "area": 1354}, {"id": 2106144, "category_id": 1, "iscrowd": 0, "bbox": [299, 493, 31, 76], "area": 1546}, {"id": 10194301, "category_id": 5, "iscrowd": 0, "bbox": [143, 243, 120, 46], "area": 3714}, {"id": 9473929, "category_id": 5, "iscrowd": 0, "bbox": [3, 59, 424, 544], "area": 82221}, {"id": 4483450, "category_id": 8, "iscrowd": 0, "bbox": [196, 327, 34, 68], "area": 1346}, {"id": 9209729, "category_id": 128, "iscrowd": 0, "bbox": [17, 204, 41, 19], "area": 505}, {"id": 10132631, "category_id": 149, "iscrowd": 0, "bbox": [13, 224, 365, 37], "area": 1101}, {"id": 8678484, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 222], "area": 82898}, {"id": 7174270, "category_id": 191, "iscrowd": 0, "bbox": [0, 231, 427, 409], "area": 71656}, {"id": 8219222, "category_id": 192, "iscrowd": 0, "bbox": [0, 186, 188, 39], "area": 2246}, {"id": 5989984, "category_id": 193, "iscrowd": 0, "bbox": [0, 243, 20, 11], "area": 178}, {"id": 6775387, "category_id": 197, "iscrowd": 0, "bbox": [0, 184, 427, 78], "area": 13355}], "file_name": "000000099054.png", "image_id": 99054}, {"segments_info": [{"id": 2630177, "category_id": 1, "iscrowd": 0, "bbox": [406, 161, 13, 45], "area": 366}, {"id": 1774354, "category_id": 1, "iscrowd": 0, "bbox": [449, 160, 17, 55], "area": 542}, {"id": 2830389, "category_id": 1, "iscrowd": 0, "bbox": [361, 166, 23, 87], "area": 1088}, {"id": 1644569, "category_id": 1, "iscrowd": 0, "bbox": [468, 163, 11, 49], "area": 371}, {"id": 3288622, "category_id": 1, "iscrowd": 0, "bbox": [176, 152, 18, 48], "area": 385}, {"id": 2433830, "category_id": 1, "iscrowd": 0, "bbox": [309, 165, 34, 82], "area": 1550}, {"id": 921361, "category_id": 1, "iscrowd": 0, "bbox": [331, 161, 10, 25], "area": 133}, {"id": 2499365, "category_id": 1, "iscrowd": 0, "bbox": [347, 163, 12, 30], "area": 189}, {"id": 4735042, "category_id": 1, "iscrowd": 0, "bbox": [74, 151, 46, 86], "area": 2137}, {"id": 2303016, "category_id": 1, "iscrowd": 0, "bbox": [154, 149, 16, 65], "area": 342}, {"id": 921105, "category_id": 1, "iscrowd": 0, "bbox": [427, 166, 10, 39], "area": 256}, {"id": 3419435, "category_id": 1, "iscrowd": 0, "bbox": [480, 173, 12, 43], "area": 207}, {"id": 4537145, "category_id": 1, "iscrowd": 0, "bbox": [159, 157, 30, 83], "area": 1079}, {"id": 2303530, "category_id": 1, "iscrowd": 1, "bbox": [184, 147, 242, 72], "area": 1671}, {"id": 3621451, "category_id": 2, "iscrowd": 0, "bbox": [198, 181, 6, 14], "area": 58}, {"id": 3159617, "category_id": 2, "iscrowd": 0, "bbox": [195, 174, 11, 19], "area": 89}, {"id": 3751495, "category_id": 2, "iscrowd": 0, "bbox": [201, 180, 27, 26], "area": 434}, {"id": 2039095, "category_id": 10, "iscrowd": 0, "bbox": [242, 67, 18, 35], "area": 520}, {"id": 2697257, "category_id": 10, "iscrowd": 0, "bbox": [280, 64, 28, 35], "area": 679}, {"id": 4339250, "category_id": 31, "iscrowd": 0, "bbox": [164, 175, 24, 35], "area": 348}, {"id": 2169884, "category_id": 31, "iscrowd": 0, "bbox": [363, 220, 19, 26], "area": 403}, {"id": 3172979, "category_id": 92, "iscrowd": 0, "bbox": [0, 132, 27, 94], "area": 1274}, {"id": 6842735, "category_id": 149, "iscrowd": 0, "bbox": [0, 193, 500, 142], "area": 43140}, {"id": 2240558, "category_id": 184, "iscrowd": 0, "bbox": [159, 0, 341, 221], "area": 42367}, {"id": 12766161, "category_id": 187, "iscrowd": 0, "bbox": [172, 0, 44, 62], "area": 1495}, {"id": 6909299, "category_id": 191, "iscrowd": 0, "bbox": [0, 180, 500, 94], "area": 17001}, {"id": 3684927, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 488, 222], "area": 43275}], "file_name": "000000099114.png", "image_id": 99114}, {"segments_info": [{"id": 4935261, "category_id": 1, "iscrowd": 0, "bbox": [185, 1, 190, 280], "area": 27121}, {"id": 6448507, "category_id": 65, "iscrowd": 0, "bbox": [361, 173, 137, 154], "area": 16766}, {"id": 7565693, "category_id": 84, "iscrowd": 0, "bbox": [56, 89, 336, 245], "area": 42067}, {"id": 921613, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 430, 69], "area": 13903}, {"id": 2698026, "category_id": 188, "iscrowd": 0, "bbox": [0, 35, 191, 126], "area": 14718}, {"id": 2040353, "category_id": 195, "iscrowd": 0, "bbox": [292, 6, 192, 88], "area": 3586}, {"id": 3422270, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 334], "area": 45648}], "file_name": "000000099182.png", "image_id": 99182}, {"segments_info": [{"id": 6246216, "category_id": 1, "iscrowd": 0, "bbox": [290, 79, 123, 207], "area": 9569}, {"id": 9474442, "category_id": 35, "iscrowd": 0, "bbox": [315, 267, 117, 32], "area": 575}, {"id": 15130843, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 262210}], "file_name": "000000099242.png", "image_id": 99242}, {"segments_info": [{"id": 7635337, "category_id": 73, "iscrowd": 0, "bbox": [31, 0, 609, 479], "area": 85806}, {"id": 2699066, "category_id": 75, "iscrowd": 0, "bbox": [29, 46, 557, 202], "area": 74127}, {"id": 3291722, "category_id": 77, "iscrowd": 0, "bbox": [34, 169, 554, 192], "area": 55238}, {"id": 3885663, "category_id": 77, "iscrowd": 0, "bbox": [75, 260, 499, 159], "area": 25532}, {"id": 3191789, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 59347}], "file_name": "000000099428.png", "image_id": 99428}, {"segments_info": [{"id": 6056057, "category_id": 1, "iscrowd": 0, "bbox": [75, 3, 298, 325], "area": 55247}, {"id": 2902369, "category_id": 60, "iscrowd": 0, "bbox": [406, 284, 44, 41], "area": 1349}, {"id": 4152435, "category_id": 60, "iscrowd": 0, "bbox": [376, 261, 48, 40], "area": 1363}, {"id": 4284279, "category_id": 60, "iscrowd": 0, "bbox": [332, 274, 45, 46], "area": 1414}, {"id": 3560557, "category_id": 60, "iscrowd": 0, "bbox": [362, 298, 49, 34], "area": 1384}, {"id": 4416126, "category_id": 60, "iscrowd": 0, "bbox": [197, 267, 40, 31], "area": 548}, {"id": 3493990, "category_id": 62, "iscrowd": 0, "bbox": [26, 75, 328, 239], "area": 9534}, {"id": 3225663, "category_id": 67, "iscrowd": 0, "bbox": [209, 235, 291, 93], "area": 13248}, {"id": 2308692, "category_id": 118, "iscrowd": 0, "bbox": [0, 0, 77, 332], "area": 21042}, {"id": 3226697, "category_id": 189, "iscrowd": 0, "bbox": [181, 327, 319, 5], "area": 713}, {"id": 9736587, "category_id": 199, "iscrowd": 0, "bbox": [65, 0, 435, 332], "area": 50597}], "file_name": "000000099810.png", "image_id": 99810}, {"segments_info": [{"id": 5659492, "category_id": 1, "iscrowd": 0, "bbox": [195, 80, 230, 400], "area": 56023}, {"id": 5001821, "category_id": 1, "iscrowd": 0, "bbox": [348, 1, 182, 473], "area": 37768}, {"id": 9600374, "category_id": 1, "iscrowd": 0, "bbox": [490, 214, 133, 264], "area": 25498}, {"id": 8748925, "category_id": 1, "iscrowd": 0, "bbox": [1, 33, 211, 439], "area": 58570}, {"id": 5325185, "category_id": 31, "iscrowd": 0, "bbox": [176, 161, 96, 273], "area": 5639}, {"id": 3552822, "category_id": 31, "iscrowd": 0, "bbox": [364, 69, 29, 58], "area": 394}, {"id": 7135195, "category_id": 34, "iscrowd": 0, "bbox": [264, 243, 87, 58], "area": 3844}, {"id": 9022392, "category_id": 34, "iscrowd": 0, "bbox": [416, 98, 75, 77], "area": 4158}, {"id": 9600153, "category_id": 34, "iscrowd": 0, "bbox": [69, 236, 75, 67], "area": 3734}, {"id": 8866357, "category_id": 44, "iscrowd": 0, "bbox": [198, 351, 12, 14], "area": 131}, {"id": 6390396, "category_id": 119, "iscrowd": 0, "bbox": [0, 285, 48, 24], "area": 928}, {"id": 9675688, "category_id": 125, "iscrowd": 0, "bbox": [0, 261, 146, 219], "area": 2955}, {"id": 9212813, "category_id": 128, "iscrowd": 0, "bbox": [0, 148, 23, 43], "area": 703}, {"id": 6058603, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 366], "area": 41715}, {"id": 16448250, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 604, 113], "area": 39975}, {"id": 11911878, "category_id": 191, "iscrowd": 0, "bbox": [0, 358, 640, 122], "area": 15667}, {"id": 7444117, "category_id": 193, "iscrowd": 0, "bbox": [0, 306, 640, 73], "area": 4567}, {"id": 9742509, "category_id": 198, "iscrowd": 0, "bbox": [501, 278, 139, 34], "area": 1425}], "file_name": "000000100238.png", "image_id": 100238}, {"segments_info": [{"id": 7037783, "category_id": 3, "iscrowd": 0, "bbox": [173, 205, 58, 20], "area": 491}, {"id": 8684932, "category_id": 3, "iscrowd": 0, "bbox": [107, 166, 10, 13], "area": 86}, {"id": 7432543, "category_id": 3, "iscrowd": 0, "bbox": [0, 181, 14, 14], "area": 159}, {"id": 4344147, "category_id": 3, "iscrowd": 0, "bbox": [92, 170, 19, 14], "area": 219}, {"id": 3691114, "category_id": 7, "iscrowd": 0, "bbox": [489, 146, 40, 49], "area": 1642}, {"id": 7303796, "category_id": 7, "iscrowd": 0, "bbox": [266, 102, 114, 325], "area": 21990}, {"id": 7437448, "category_id": 8, "iscrowd": 0, "bbox": [90, 139, 28, 16], "area": 392}, {"id": 5532050, "category_id": 8, "iscrowd": 0, "bbox": [84, 137, 23, 15], "area": 132}, {"id": 4801598, "category_id": 8, "iscrowd": 0, "bbox": [162, 216, 70, 23], "area": 1198}, {"id": 5922658, "category_id": 95, "iscrowd": 0, "bbox": [220, 78, 53, 26], "area": 751}, {"id": 8949645, "category_id": 128, "iscrowd": 0, "bbox": [509, 67, 73, 23], "area": 1148}, {"id": 5527128, "category_id": 147, "iscrowd": 0, "bbox": [340, 114, 300, 313], "area": 24664}, {"id": 6117457, "category_id": 149, "iscrowd": 0, "bbox": [66, 101, 574, 326], "area": 46850}, {"id": 5922660, "category_id": 151, "iscrowd": 0, "bbox": [237, 117, 72, 91], "area": 3311}, {"id": 5856345, "category_id": 181, "iscrowd": 0, "bbox": [147, 169, 61, 37], "area": 1253}, {"id": 5139044, "category_id": 184, "iscrowd": 0, "bbox": [13, 64, 627, 79], "area": 14224}, {"id": 9413294, "category_id": 185, "iscrowd": 0, "bbox": [0, 135, 17, 18], "area": 269}, {"id": 15265773, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 80], "area": 46650}, {"id": 7106932, "category_id": 191, "iscrowd": 0, "bbox": [0, 96, 640, 331], "area": 67580}, {"id": 7178128, "category_id": 193, "iscrowd": 0, "bbox": [15, 135, 57, 23], "area": 948}, {"id": 3683119, "category_id": 194, "iscrowd": 0, "bbox": [329, 136, 130, 291], "area": 13008}, {"id": 7304824, "category_id": 197, "iscrowd": 0, "bbox": [0, 67, 612, 174], "area": 23868}], "file_name": "000000100274.png", "image_id": 100274}, {"segments_info": [{"id": 2770514, "category_id": 3, "iscrowd": 0, "bbox": [293, 404, 121, 24], "area": 1664}, {"id": 1845805, "category_id": 3, "iscrowd": 0, "bbox": [87, 399, 35, 19], "area": 290}, {"id": 4417657, "category_id": 3, "iscrowd": 0, "bbox": [178, 404, 97, 32], "area": 2199}, {"id": 1648682, "category_id": 3, "iscrowd": 0, "bbox": [43, 403, 45, 18], "area": 541}, {"id": 1845562, "category_id": 3, "iscrowd": 0, "bbox": [103, 405, 42, 19], "area": 425}, {"id": 1123897, "category_id": 13, "iscrowd": 0, "bbox": [207, 33, 262, 275], "area": 55570}, {"id": 4096404, "category_id": 149, "iscrowd": 0, "bbox": [0, 410, 640, 70], "area": 31611}, {"id": 3568813, "category_id": 181, "iscrowd": 0, "bbox": [137, 304, 155, 45], "area": 1475}, {"id": 2837336, "category_id": 184, "iscrowd": 0, "bbox": [376, 325, 104, 56], "area": 3997}, {"id": 1449759, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 316], "area": 128476}, {"id": 4155511, "category_id": 190, "iscrowd": 0, "bbox": [270, 395, 309, 63], "area": 4170}, {"id": 6585736, "category_id": 191, "iscrowd": 0, "bbox": [90, 391, 550, 43], "area": 2644}, {"id": 4812933, "category_id": 197, "iscrowd": 0, "bbox": [0, 245, 640, 183], "area": 68525}], "file_name": "000000100283.png", "image_id": 100283}, {"segments_info": [{"id": 10395284, "category_id": 1, "iscrowd": 0, "bbox": [119, 86, 130, 399], "area": 35673}, {"id": 10723986, "category_id": 1, "iscrowd": 0, "bbox": [264, 100, 356, 384], "area": 72955}, {"id": 4276281, "category_id": 32, "iscrowd": 0, "bbox": [186, 243, 82, 179], "area": 2234}, {"id": 2105375, "category_id": 32, "iscrowd": 0, "bbox": [284, 235, 189, 23], "area": 2576}, {"id": 9012846, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 269, 491], "area": 54379}, {"id": 1842719, "category_id": 133, "iscrowd": 0, "bbox": [88, 0, 145, 491], "area": 30451}, {"id": 3749936, "category_id": 199, "iscrowd": 0, "bbox": [225, 0, 415, 491], "area": 113206}], "file_name": "000000100428.png", "image_id": 100428}, {"segments_info": [{"id": 6833234, "category_id": 16, "iscrowd": 0, "bbox": [82, 74, 226, 289], "area": 22904}, {"id": 8292248, "category_id": 184, "iscrowd": 0, "bbox": [0, 215, 479, 425], "area": 114663}, {"id": 15576187, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 479, 566], "area": 168851}], "file_name": "000000100489.png", "image_id": 100489}, {"segments_info": [{"id": 11315116, "category_id": 1, "iscrowd": 0, "bbox": [180, 25, 84, 119], "area": 4107}, {"id": 10855886, "category_id": 1, "iscrowd": 0, "bbox": [525, 141, 43, 91], "area": 2104}, {"id": 7034196, "category_id": 1, "iscrowd": 0, "bbox": [0, 7, 18, 49], "area": 681}, {"id": 3030359, "category_id": 19, "iscrowd": 0, "bbox": [29, 71, 340, 272], "area": 25223}, {"id": 6383563, "category_id": 62, "iscrowd": 0, "bbox": [576, 185, 15, 43], "area": 479}, {"id": 5596276, "category_id": 62, "iscrowd": 0, "bbox": [325, 188, 25, 45], "area": 627}, {"id": 5345153, "category_id": 145, "iscrowd": 0, "bbox": [0, 220, 600, 180], "area": 66976}, {"id": 7698291, "category_id": 161, "iscrowd": 0, "bbox": [356, 69, 123, 159], "area": 9701}, {"id": 4673383, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 600, 229], "area": 43478}, {"id": 3232335, "category_id": 184, "iscrowd": 0, "bbox": [0, 151, 600, 81], "area": 4255}, {"id": 6256774, "category_id": 185, "iscrowd": 0, "bbox": [58, 148, 443, 216], "area": 34002}, {"id": 6656143, "category_id": 193, "iscrowd": 0, "bbox": [537, 221, 19, 16], "area": 136}, {"id": 3819342, "category_id": 194, "iscrowd": 0, "bbox": [325, 214, 17, 18], "area": 155}, {"id": 4343369, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 540, 277], "area": 45390}], "file_name": "000000100510.png", "image_id": 100510}, {"segments_info": [{"id": 7312567, "category_id": 48, "iscrowd": 0, "bbox": [338, 1, 237, 33], "area": 3948}, {"id": 3312283, "category_id": 59, "iscrowd": 0, "bbox": [2, 0, 638, 415], "area": 231751}, {"id": 8827880, "category_id": 189, "iscrowd": 0, "bbox": [361, 0, 279, 84], "area": 4532}, {"id": 6594482, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 286, 427], "area": 2594}], "file_name": "000000100582.png", "image_id": 100582}, {"segments_info": [{"id": 4743291, "category_id": 1, "iscrowd": 0, "bbox": [68, 52, 254, 369], "area": 63183}, {"id": 1451313, "category_id": 1, "iscrowd": 0, "bbox": [264, 83, 60, 163], "area": 2884}, {"id": 397082, "category_id": 1, "iscrowd": 0, "bbox": [535, 81, 42, 189], "area": 4951}, {"id": 2573909, "category_id": 1, "iscrowd": 0, "bbox": [324, 108, 59, 134], "area": 4364}, {"id": 661813, "category_id": 3, "iscrowd": 0, "bbox": [66, 97, 31, 16], "area": 428}, {"id": 992060, "category_id": 3, "iscrowd": 0, "bbox": [0, 252, 55, 164], "area": 6029}, {"id": 264976, "category_id": 27, "iscrowd": 0, "bbox": [265, 116, 52, 60], "area": 2304}, {"id": 659484, "category_id": 27, "iscrowd": 0, "bbox": [20, 212, 155, 207], "area": 13000}, {"id": 1648962, "category_id": 77, "iscrowd": 0, "bbox": [176, 132, 32, 55], "area": 908}, {"id": 6781585, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 381, 109], "area": 8170}, {"id": 669792, "category_id": 184, "iscrowd": 0, "bbox": [46, 0, 82, 47], "area": 2779}, {"id": 2245210, "category_id": 191, "iscrowd": 0, "bbox": [0, 96, 640, 331], "area": 74482}, {"id": 2375768, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 363], "area": 86147}], "file_name": "000000100624.png", "image_id": 100624}, {"segments_info": [{"id": 4601648, "category_id": 1, "iscrowd": 0, "bbox": [379, 188, 92, 144], "area": 9303}, {"id": 6903110, "category_id": 1, "iscrowd": 0, "bbox": [58, 84, 57, 96], "area": 1961}, {"id": 3157044, "category_id": 1, "iscrowd": 0, "bbox": [114, 48, 28, 87], "area": 956}, {"id": 6712188, "category_id": 1, "iscrowd": 0, "bbox": [46, 60, 27, 24], "area": 409}, {"id": 4999503, "category_id": 1, "iscrowd": 0, "bbox": [336, 73, 29, 105], "area": 1156}, {"id": 2697258, "category_id": 1, "iscrowd": 0, "bbox": [258, 111, 84, 142], "area": 5914}, {"id": 2432802, "category_id": 1, "iscrowd": 0, "bbox": [4, 192, 150, 141], "area": 13034}, {"id": 3618372, "category_id": 1, "iscrowd": 0, "bbox": [56, 141, 38, 39], "area": 1189}, {"id": 5461079, "category_id": 1, "iscrowd": 0, "bbox": [201, 183, 132, 146], "area": 10922}, {"id": 3354675, "category_id": 1, "iscrowd": 0, "bbox": [466, 10, 27, 34], "area": 550}, {"id": 5391685, "category_id": 1, "iscrowd": 0, "bbox": [8, 106, 36, 177], "area": 1368}, {"id": 8154745, "category_id": 1, "iscrowd": 0, "bbox": [202, 143, 56, 133], "area": 4102}, {"id": 3681065, "category_id": 1, "iscrowd": 0, "bbox": [110, 168, 89, 161], "area": 7938}, {"id": 5262416, "category_id": 1, "iscrowd": 1, "bbox": [4, 1, 496, 332], "area": 40511}, {"id": 6771583, "category_id": 13, "iscrowd": 0, "bbox": [206, 43, 123, 119], "area": 10053}, {"id": 3354413, "category_id": 27, "iscrowd": 0, "bbox": [362, 231, 40, 72], "area": 659}, {"id": 2038550, "category_id": 27, "iscrowd": 0, "bbox": [390, 141, 39, 32], "area": 402}, {"id": 4732204, "category_id": 31, "iscrowd": 0, "bbox": [69, 115, 7, 26], "area": 120}, {"id": 8748678, "category_id": 92, "iscrowd": 0, "bbox": [207, 0, 293, 131], "area": 7747}, {"id": 8358838, "category_id": 100, "iscrowd": 0, "bbox": [47, 79, 33, 41], "area": 471}, {"id": 11842482, "category_id": 149, "iscrowd": 0, "bbox": [0, 26, 500, 307], "area": 9971}, {"id": 11909303, "category_id": 191, "iscrowd": 0, "bbox": [7, 0, 493, 185], "area": 10475}, {"id": 10258819, "category_id": 195, "iscrowd": 0, "bbox": [0, 38, 434, 186], "area": 14429}], "file_name": "000000100723.png", "image_id": 100723}, {"segments_info": [{"id": 16315379, "category_id": 159, "iscrowd": 0, "bbox": [0, 540, 480, 100], "area": 24029}, {"id": 2440509, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 626], "area": 165685}, {"id": 4541255, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 480, 292], "area": 80972}], "file_name": "000000101022.png", "image_id": 101022}, {"segments_info": [{"id": 10788778, "category_id": 1, "iscrowd": 0, "bbox": [404, 85, 234, 342], "area": 40901}, {"id": 6778249, "category_id": 39, "iscrowd": 0, "bbox": [363, 128, 95, 115], "area": 2025}, {"id": 7442842, "category_id": 145, "iscrowd": 0, "bbox": [0, 29, 640, 398], "area": 196446}], "file_name": "000000101068.png", "image_id": 101068}, {"segments_info": [{"id": 2567477, "category_id": 17, "iscrowd": 0, "bbox": [61, 61, 201, 113], "area": 8397}, {"id": 3165580, "category_id": 63, "iscrowd": 0, "bbox": [0, 133, 498, 236], "area": 107412}, {"id": 9546946, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 450, 163], "area": 56270}, {"id": 9937587, "category_id": 199, "iscrowd": 0, "bbox": [431, 0, 69, 253], "area": 10531}], "file_name": "000000101420.png", "image_id": 101420}, {"segments_info": [{"id": 7105129, "category_id": 2, "iscrowd": 0, "bbox": [42, 0, 472, 345], "area": 128044}, {"id": 4080973, "category_id": 17, "iscrowd": 0, "bbox": [419, 73, 217, 264], "area": 16798}, {"id": 6584721, "category_id": 118, "iscrowd": 0, "bbox": [0, 251, 640, 229], "area": 106933}, {"id": 9934740, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 345], "area": 54383}], "file_name": "000000101762.png", "image_id": 101762}, {"segments_info": [{"id": 5797273, "category_id": 25, "iscrowd": 0, "bbox": [0, 309, 60, 99], "area": 2955}, {"id": 5665170, "category_id": 25, "iscrowd": 0, "bbox": [0, 258, 105, 145], "area": 3636}, {"id": 3556176, "category_id": 25, "iscrowd": 0, "bbox": [373, 222, 93, 118], "area": 4046}, {"id": 7114924, "category_id": 25, "iscrowd": 0, "bbox": [73, 174, 129, 355], "area": 15794}, {"id": 11122864, "category_id": 128, "iscrowd": 0, "bbox": [315, 292, 67, 23], "area": 629}, {"id": 9675686, "category_id": 144, "iscrowd": 0, "bbox": [8, 303, 42, 24], "area": 487}, {"id": 2837312, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 414], "area": 144981}, {"id": 8163742, "category_id": 185, "iscrowd": 0, "bbox": [258, 340, 122, 40], "area": 3645}, {"id": 16053489, "category_id": 187, "iscrowd": 0, "bbox": [0, 104, 161, 76], "area": 5919}, {"id": 8563142, "category_id": 194, "iscrowd": 0, "bbox": [0, 377, 480, 263], "area": 77402}, {"id": 11847359, "category_id": 197, "iscrowd": 0, "bbox": [32, 303, 111, 44], "area": 947}, {"id": 4481406, "category_id": 198, "iscrowd": 0, "bbox": [103, 357, 377, 152], "area": 33586}], "file_name": "000000101780.png", "image_id": 101780}, {"segments_info": [{"id": 7424312, "category_id": 5, "iscrowd": 0, "bbox": [182, 282, 39, 31], "area": 435}, {"id": 13338977, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 457, 640], "area": 292012}], "file_name": "000000101787.png", "image_id": 101787}, {"segments_info": [{"id": 6118749, "category_id": 8, "iscrowd": 0, "bbox": [162, 362, 18, 17], "area": 251}, {"id": 10592673, "category_id": 8, "iscrowd": 0, "bbox": [291, 360, 42, 31], "area": 965}, {"id": 9145227, "category_id": 85, "iscrowd": 0, "bbox": [464, 58, 38, 32], "area": 919}, {"id": 13421772, "category_id": 149, "iscrowd": 0, "bbox": [279, 361, 69, 40], "area": 1180}, {"id": 9408399, "category_id": 184, "iscrowd": 0, "bbox": [620, 196, 20, 45], "area": 532}, {"id": 15329769, "category_id": 187, "iscrowd": 0, "bbox": [131, 0, 509, 273], "area": 23105}, {"id": 9342606, "category_id": 191, "iscrowd": 0, "bbox": [47, 350, 593, 76], "area": 20609}, {"id": 4934475, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 220563}], "file_name": "000000101884.png", "image_id": 101884}, {"segments_info": [{"id": 5008713, "category_id": 1, "iscrowd": 0, "bbox": [197, 47, 78, 106], "area": 4308}, {"id": 5598061, "category_id": 4, "iscrowd": 0, "bbox": [136, 110, 227, 154], "area": 16076}, {"id": 14473174, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 101], "area": 43447}, {"id": 5799326, "category_id": 192, "iscrowd": 0, "bbox": [0, 79, 500, 278], "area": 114261}], "file_name": "000000102331.png", "image_id": 102331}, {"segments_info": [{"id": 2960182, "category_id": 1, "iscrowd": 0, "bbox": [166, 53, 238, 359], "area": 30677}, {"id": 4013879, "category_id": 4, "iscrowd": 0, "bbox": [14, 166, 358, 463], "area": 73006}, {"id": 13553636, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 75], "area": 19908}, {"id": 6974581, "category_id": 190, "iscrowd": 0, "bbox": [0, 306, 427, 334], "area": 87562}, {"id": 2910895, "category_id": 199, "iscrowd": 0, "bbox": [0, 13, 427, 316], "area": 58605}], "file_name": "000000102356.png", "image_id": 102356}, {"segments_info": [{"id": 3024412, "category_id": 1, "iscrowd": 0, "bbox": [389, 167, 41, 40], "area": 993}, {"id": 7762810, "category_id": 1, "iscrowd": 0, "bbox": [29, 142, 31, 109], "area": 2348}, {"id": 2238512, "category_id": 1, "iscrowd": 0, "bbox": [104, 198, 15, 21], "area": 193}, {"id": 2302497, "category_id": 1, "iscrowd": 0, "bbox": [240, 146, 41, 51], "area": 1196}, {"id": 1513802, "category_id": 1, "iscrowd": 0, "bbox": [179, 179, 15, 35], "area": 366}, {"id": 3355443, "category_id": 1, "iscrowd": 0, "bbox": [60, 155, 59, 97], "area": 2662}, {"id": 3684409, "category_id": 1, "iscrowd": 0, "bbox": [509, 141, 46, 52], "area": 1608}, {"id": 3815991, "category_id": 1, "iscrowd": 0, "bbox": [569, 165, 49, 67], "area": 1903}, {"id": 2434083, "category_id": 1, "iscrowd": 0, "bbox": [277, 124, 116, 196], "area": 9183}, {"id": 2500650, "category_id": 1, "iscrowd": 0, "bbox": [219, 126, 118, 228], "area": 6658}, {"id": 8028292, "category_id": 1, "iscrowd": 0, "bbox": [202, 174, 15, 39], "area": 446}, {"id": 1579806, "category_id": 3, "iscrowd": 0, "bbox": [1, 199, 38, 95], "area": 2264}, {"id": 3027252, "category_id": 4, "iscrowd": 0, "bbox": [188, 181, 228, 177], "area": 16903}, {"id": 2304817, "category_id": 31, "iscrowd": 0, "bbox": [437, 224, 9, 14], "area": 53}, {"id": 10134444, "category_id": 154, "iscrowd": 0, "bbox": [17, 172, 623, 87], "area": 10877}, {"id": 14736339, "category_id": 155, "iscrowd": 0, "bbox": [0, 48, 640, 210], "area": 45025}, {"id": 5205123, "category_id": 184, "iscrowd": 0, "bbox": [559, 283, 81, 41], "area": 1917}, {"id": 16579834, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 59], "area": 31236}, {"id": 10134185, "category_id": 191, "iscrowd": 0, "bbox": [0, 231, 640, 196], "area": 90677}, {"id": 3961977, "category_id": 193, "iscrowd": 0, "bbox": [604, 266, 36, 24], "area": 464}, {"id": 4083031, "category_id": 198, "iscrowd": 0, "bbox": [68, 186, 572, 157], "area": 7228}], "file_name": "000000102411.png", "image_id": 102411}, {"segments_info": [{"id": 9809060, "category_id": 70, "iscrowd": 0, "bbox": [34, 242, 137, 192], "area": 15962}, {"id": 2770762, "category_id": 112, "iscrowd": 0, "bbox": [0, 150, 375, 350], "area": 15342}, {"id": 2110259, "category_id": 133, "iscrowd": 0, "bbox": [179, 0, 196, 398], "area": 54422}, {"id": 7573390, "category_id": 168, "iscrowd": 0, "bbox": [310, 140, 55, 140], "area": 5625}, {"id": 3495257, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 337, 500], "area": 74614}, {"id": 6850952, "category_id": 190, "iscrowd": 0, "bbox": [28, 388, 289, 112], "area": 20404}], "file_name": "000000102644.png", "image_id": 102644}, {"segments_info": [{"id": 7045525, "category_id": 44, "iscrowd": 0, "bbox": [324, 187, 155, 405], "area": 41340}, {"id": 3355969, "category_id": 47, "iscrowd": 0, "bbox": [477, 362, 131, 243], "area": 23456}, {"id": 7109775, "category_id": 79, "iscrowd": 0, "bbox": [7, 373, 598, 233], "area": 54295}, {"id": 7175569, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 226020}, {"id": 10137801, "category_id": 189, "iscrowd": 0, "bbox": [150, 454, 65, 40], "area": 1861}], "file_name": "000000102707.png", "image_id": 102707}, {"segments_info": [{"id": 3555928, "category_id": 1, "iscrowd": 0, "bbox": [59, 76, 231, 339], "area": 43800}, {"id": 6118228, "category_id": 3, "iscrowd": 0, "bbox": [404, 261, 25, 21], "area": 310}, {"id": 2170393, "category_id": 3, "iscrowd": 0, "bbox": [379, 267, 227, 71], "area": 11317}, {"id": 9273709, "category_id": 3, "iscrowd": 0, "bbox": [378, 259, 26, 4], "area": 96}, {"id": 6183506, "category_id": 3, "iscrowd": 0, "bbox": [344, 263, 69, 25], "area": 1300}, {"id": 6644054, "category_id": 8, "iscrowd": 0, "bbox": [461, 252, 46, 16], "area": 291}, {"id": 4934986, "category_id": 9, "iscrowd": 0, "bbox": [508, 255, 40, 17], "area": 464}, {"id": 1579296, "category_id": 27, "iscrowd": 0, "bbox": [52, 395, 69, 31], "area": 731}, {"id": 1974826, "category_id": 27, "iscrowd": 0, "bbox": [154, 197, 105, 191], "area": 5770}, {"id": 4090504, "category_id": 34, "iscrowd": 0, "bbox": [230, 341, 118, 83], "area": 7551}, {"id": 7175563, "category_id": 149, "iscrowd": 0, "bbox": [0, 251, 640, 175], "area": 50721}, {"id": 9208157, "category_id": 178, "iscrowd": 0, "bbox": [0, 179, 640, 100], "area": 30149}, {"id": 3427153, "category_id": 184, "iscrowd": 0, "bbox": [0, 219, 450, 52], "area": 6792}, {"id": 14601906, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 155], "area": 73134}, {"id": 5131071, "category_id": 192, "iscrowd": 0, "bbox": [0, 96, 640, 108], "area": 36298}], "file_name": "000000102805.png", "image_id": 102805}, {"segments_info": [{"id": 6386311, "category_id": 1, "iscrowd": 0, "bbox": [23, 13, 392, 519], "area": 109476}, {"id": 4477157, "category_id": 61, "iscrowd": 0, "bbox": [46, 486, 207, 83], "area": 13617}, {"id": 10005183, "category_id": 100, "iscrowd": 0, "bbox": [235, 504, 91, 92], "area": 3669}, {"id": 9613246, "category_id": 118, "iscrowd": 0, "bbox": [287, 529, 21, 14], "area": 214}, {"id": 1644571, "category_id": 180, "iscrowd": 0, "bbox": [0, 29, 36, 55], "area": 1329}, {"id": 2840904, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 384, 411], "area": 43800}, {"id": 9611170, "category_id": 199, "iscrowd": 0, "bbox": [132, 46, 27, 40], "area": 416}], "file_name": "000000102820.png", "image_id": 102820}, {"segments_info": [{"id": 5726057, "category_id": 1, "iscrowd": 0, "bbox": [539, 208, 27, 89], "area": 1243}, {"id": 10011088, "category_id": 20, "iscrowd": 0, "bbox": [350, 210, 23, 10], "area": 152}, {"id": 11720167, "category_id": 20, "iscrowd": 0, "bbox": [395, 221, 29, 12], "area": 187}, {"id": 8495793, "category_id": 20, "iscrowd": 0, "bbox": [175, 221, 26, 27], "area": 374}, {"id": 8430517, "category_id": 20, "iscrowd": 0, "bbox": [473, 234, 37, 34], "area": 818}, {"id": 8694719, "category_id": 20, "iscrowd": 0, "bbox": [405, 237, 33, 24], "area": 417}, {"id": 8363176, "category_id": 20, "iscrowd": 0, "bbox": [247, 224, 26, 29], "area": 431}, {"id": 9415350, "category_id": 20, "iscrowd": 0, "bbox": [451, 225, 36, 34], "area": 239}, {"id": 9615817, "category_id": 20, "iscrowd": 0, "bbox": [231, 216, 24, 28], "area": 339}, {"id": 9483971, "category_id": 20, "iscrowd": 0, "bbox": [165, 211, 24, 25], "area": 193}, {"id": 9154496, "category_id": 20, "iscrowd": 0, "bbox": [335, 227, 34, 30], "area": 527}, {"id": 7573923, "category_id": 20, "iscrowd": 0, "bbox": [411, 229, 44, 30], "area": 512}, {"id": 9549514, "category_id": 20, "iscrowd": 0, "bbox": [460, 226, 42, 32], "area": 331}, {"id": 8299445, "category_id": 20, "iscrowd": 0, "bbox": [286, 216, 21, 27], "area": 208}, {"id": 8561587, "category_id": 20, "iscrowd": 0, "bbox": [204, 223, 34, 28], "area": 526}, {"id": 9088961, "category_id": 20, "iscrowd": 0, "bbox": [307, 220, 32, 28], "area": 464}, {"id": 10598081, "category_id": 20, "iscrowd": 0, "bbox": [380, 236, 21, 23], "area": 256}, {"id": 8101553, "category_id": 20, "iscrowd": 0, "bbox": [575, 232, 48, 33], "area": 890}, {"id": 8759483, "category_id": 20, "iscrowd": 0, "bbox": [394, 230, 20, 26], "area": 213}, {"id": 8626861, "category_id": 20, "iscrowd": 1, "bbox": [143, 209, 269, 53], "area": 2038}, {"id": 4740947, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 307], "area": 87543}, {"id": 15062982, "category_id": 187, "iscrowd": 0, "bbox": [156, 0, 484, 26], "area": 8972}, {"id": 13283732, "category_id": 192, "iscrowd": 0, "bbox": [280, 16, 360, 81], "area": 16265}, {"id": 6590358, "category_id": 193, "iscrowd": 0, "bbox": [0, 123, 640, 357], "area": 179584}, {"id": 8230044, "category_id": 194, "iscrowd": 0, "bbox": [181, 234, 431, 53], "area": 1497}], "file_name": "000000103548.png", "image_id": 103548}, {"segments_info": [{"id": 8419434, "category_id": 70, "iscrowd": 0, "bbox": [314, 347, 46, 70], "area": 2234}, {"id": 4157353, "category_id": 81, "iscrowd": 0, "bbox": [0, 381, 89, 53], "area": 3047}, {"id": 4689364, "category_id": 81, "iscrowd": 0, "bbox": [193, 322, 62, 19], "area": 848}, {"id": 338102, "category_id": 86, "iscrowd": 0, "bbox": [115, 309, 28, 46], "area": 843}, {"id": 3100817, "category_id": 119, "iscrowd": 0, "bbox": [113, 270, 31, 37], "area": 413}, {"id": 3367611, "category_id": 130, "iscrowd": 0, "bbox": [0, 47, 210, 86], "area": 1475}, {"id": 593689, "category_id": 133, "iscrowd": 0, "bbox": [0, 140, 35, 134], "area": 3486}, {"id": 997823, "category_id": 168, "iscrowd": 0, "bbox": [257, 258, 38, 67], "area": 1977}, {"id": 3825288, "category_id": 176, "iscrowd": 0, "bbox": [17, 299, 408, 110], "area": 3550}, {"id": 5933759, "category_id": 186, "iscrowd": 0, "bbox": [30, 0, 395, 110], "area": 21775}, {"id": 5269126, "category_id": 188, "iscrowd": 0, "bbox": [0, 305, 298, 335], "area": 51587}, {"id": 2567478, "category_id": 190, "iscrowd": 0, "bbox": [35, 381, 390, 259], "area": 60402}, {"id": 4356799, "category_id": 195, "iscrowd": 0, "bbox": [62, 332, 56, 48], "area": 1466}, {"id": 7048369, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 425, 441], "area": 116291}], "file_name": "000000103585.png", "image_id": 103585}, {"segments_info": [{"id": 6571840, "category_id": 1, "iscrowd": 0, "bbox": [368, 385, 15, 21], "area": 208}, {"id": 3746340, "category_id": 1, "iscrowd": 0, "bbox": [164, 381, 10, 30], "area": 145}, {"id": 4604486, "category_id": 1, "iscrowd": 0, "bbox": [388, 385, 19, 34], "area": 310}, {"id": 4736589, "category_id": 1, "iscrowd": 0, "bbox": [353, 384, 7, 20], "area": 107}, {"id": 6447978, "category_id": 1, "iscrowd": 0, "bbox": [404, 383, 12, 24], "area": 202}, {"id": 3419185, "category_id": 1, "iscrowd": 0, "bbox": [158, 371, 18, 18], "area": 148}, {"id": 3222314, "category_id": 1, "iscrowd": 0, "bbox": [341, 335, 139, 304], "area": 24488}, {"id": 4802634, "category_id": 22, "iscrowd": 0, "bbox": [156, 222, 230, 349], "area": 48793}, {"id": 5656135, "category_id": 128, "iscrowd": 0, "bbox": [87, 321, 309, 77], "area": 4848}, {"id": 8888247, "category_id": 154, "iscrowd": 0, "bbox": [0, 401, 406, 127], "area": 20507}, {"id": 6974561, "category_id": 184, "iscrowd": 0, "bbox": [0, 155, 480, 246], "area": 37634}, {"id": 16579835, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 306], "area": 109564}, {"id": 12441324, "category_id": 190, "iscrowd": 0, "bbox": [94, 429, 262, 43], "area": 4283}, {"id": 4473666, "category_id": 199, "iscrowd": 0, "bbox": [0, 377, 410, 263], "area": 54865}], "file_name": "000000103723.png", "image_id": 103723}, {"segments_info": [{"id": 7042165, "category_id": 16, "iscrowd": 0, "bbox": [480, 235, 138, 111], "area": 3930}, {"id": 5335396, "category_id": 16, "iscrowd": 0, "bbox": [28, 254, 97, 67], "area": 4823}, {"id": 6252139, "category_id": 16, "iscrowd": 0, "bbox": [135, 2, 295, 452], "area": 73796}, {"id": 15198693, "category_id": 187, "iscrowd": 0, "bbox": [101, 0, 311, 44], "area": 1755}], "file_name": "000000104119.png", "image_id": 104119}, {"segments_info": [{"id": 4802948, "category_id": 13, "iscrowd": 0, "bbox": [287, 118, 210, 197], "area": 33216}, {"id": 2240299, "category_id": 184, "iscrowd": 0, "bbox": [135, 168, 365, 207], "area": 21945}, {"id": 16250869, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 203], "area": 64410}, {"id": 8751756, "category_id": 197, "iscrowd": 0, "bbox": [0, 40, 306, 335], "area": 56971}], "file_name": "000000104198.png", "image_id": 104198}, {"segments_info": [{"id": 5464956, "category_id": 1, "iscrowd": 0, "bbox": [146, 163, 118, 378], "area": 26118}, {"id": 6271395, "category_id": 37, "iscrowd": 0, "bbox": [95, 359, 8, 8], "area": 46}, {"id": 8053221, "category_id": 37, "iscrowd": 0, "bbox": [231, 280, 6, 10], "area": 37}, {"id": 7766657, "category_id": 43, "iscrowd": 0, "bbox": [224, 186, 86, 123], "area": 3551}, {"id": 4542819, "category_id": 145, "iscrowd": 0, "bbox": [0, 318, 424, 322], "area": 116398}, {"id": 6386260, "category_id": 184, "iscrowd": 0, "bbox": [29, 13, 395, 198], "area": 9876}, {"id": 3690051, "category_id": 185, "iscrowd": 0, "bbox": [0, 160, 424, 182], "area": 42339}, {"id": 14072450, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 424, 216], "area": 71098}], "file_name": "000000104424.png", "image_id": 104424}, {"segments_info": [{"id": 3620162, "category_id": 24, "iscrowd": 0, "bbox": [77, 25, 521, 370], "area": 100610}, {"id": 3157809, "category_id": 24, "iscrowd": 0, "bbox": [168, 200, 191, 152], "area": 10685}, {"id": 7834001, "category_id": 154, "iscrowd": 0, "bbox": [0, 183, 640, 297], "area": 82046}, {"id": 10469059, "category_id": 185, "iscrowd": 0, "bbox": [74, 0, 566, 226], "area": 16867}, {"id": 4676448, "category_id": 193, "iscrowd": 0, "bbox": [0, 9, 640, 471], "area": 51759}, {"id": 1975076, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 78, 359], "area": 10079}], "file_name": "000000104455.png", "image_id": 104455}, {"segments_info": [{"id": 6119253, "category_id": 70, "iscrowd": 0, "bbox": [449, 201, 20, 23], "area": 315}, {"id": 10198681, "category_id": 81, "iscrowd": 0, "bbox": [373, 205, 44, 20], "area": 711}, {"id": 11776932, "category_id": 81, "iscrowd": 0, "bbox": [390, 198, 41, 17], "area": 373}, {"id": 11908006, "category_id": 81, "iscrowd": 0, "bbox": [407, 193, 34, 15], "area": 238}, {"id": 11973547, "category_id": 81, "iscrowd": 0, "bbox": [90, 292, 144, 77], "area": 7953}, {"id": 12499376, "category_id": 81, "iscrowd": 0, "bbox": [0, 360, 85, 59], "area": 4029}, {"id": 3490906, "category_id": 133, "iscrowd": 0, "bbox": [0, 63, 194, 213], "area": 29076}, {"id": 5335689, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 419], "area": 184221}, {"id": 12237243, "category_id": 186, "iscrowd": 0, "bbox": [91, 0, 412, 83], "area": 22129}, {"id": 6647151, "category_id": 190, "iscrowd": 0, "bbox": [204, 335, 294, 84], "area": 18902}], "file_name": "000000104572.png", "image_id": 104572}, {"segments_info": [{"id": 263942, "category_id": 23, "iscrowd": 0, "bbox": [422, 160, 22, 25], "area": 400}, {"id": 2502189, "category_id": 23, "iscrowd": 0, "bbox": [158, 234, 121, 66], "area": 4574}, {"id": 1846315, "category_id": 184, "iscrowd": 0, "bbox": [304, 0, 336, 262], "area": 27645}, {"id": 5801083, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 241207}], "file_name": "000000104603.png", "image_id": 104603}, {"segments_info": [{"id": 2516051, "category_id": 56, "iscrowd": 0, "bbox": [118, 323, 41, 81], "area": 2236}, {"id": 4361605, "category_id": 56, "iscrowd": 0, "bbox": [397, 47, 49, 62], "area": 1913}, {"id": 5215374, "category_id": 56, "iscrowd": 0, "bbox": [151, 98, 79, 57], "area": 2693}, {"id": 3169369, "category_id": 56, "iscrowd": 0, "bbox": [42, 119, 109, 170], "area": 12643}, {"id": 4620458, "category_id": 56, "iscrowd": 0, "bbox": [434, 78, 121, 39], "area": 3096}, {"id": 3101020, "category_id": 56, "iscrowd": 0, "bbox": [496, 304, 78, 62], "area": 2769}, {"id": 6592931, "category_id": 56, "iscrowd": 0, "bbox": [314, 203, 141, 98], "area": 5755}, {"id": 3102554, "category_id": 56, "iscrowd": 0, "bbox": [475, 240, 55, 96], "area": 2105}, {"id": 2772562, "category_id": 56, "iscrowd": 0, "bbox": [148, 274, 154, 150], "area": 13569}, {"id": 2774861, "category_id": 56, "iscrowd": 0, "bbox": [157, 135, 169, 198], "area": 21740}, {"id": 2646355, "category_id": 56, "iscrowd": 0, "bbox": [51, 287, 84, 82], "area": 4621}, {"id": 4025720, "category_id": 56, "iscrowd": 0, "bbox": [418, 97, 119, 66], "area": 3269}], "file_name": "000000104612.png", "image_id": 104612}, {"segments_info": [{"id": 7637165, "category_id": 25, "iscrowd": 0, "bbox": [137, 73, 186, 393], "area": 24853}, {"id": 4936527, "category_id": 151, "iscrowd": 0, "bbox": [396, 0, 237, 41], "area": 4651}, {"id": 11191785, "category_id": 154, "iscrowd": 0, "bbox": [0, 67, 640, 413], "area": 124432}, {"id": 4481627, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 274, 219], "area": 18928}, {"id": 5462103, "category_id": 185, "iscrowd": 0, "bbox": [86, 0, 335, 253], "area": 31232}, {"id": 5401725, "category_id": 194, "iscrowd": 0, "bbox": [87, 203, 25, 17], "area": 241}, {"id": 2633266, "category_id": 197, "iscrowd": 0, "bbox": [398, 12, 242, 279], "area": 44618}, {"id": 9612220, "category_id": 198, "iscrowd": 0, "bbox": [0, 143, 330, 81], "area": 9225}, {"id": 5469593, "category_id": 199, "iscrowd": 0, "bbox": [303, 0, 199, 239], "area": 13644}], "file_name": "000000104619.png", "image_id": 104619}, {"segments_info": [{"id": 658959, "category_id": 63, "iscrowd": 0, "bbox": [229, 229, 71, 95], "area": 3743}, {"id": 329735, "category_id": 72, "iscrowd": 0, "bbox": [523, 268, 117, 119], "area": 10500}, {"id": 4873562, "category_id": 84, "iscrowd": 0, "bbox": [96, 157, 11, 35], "area": 211}, {"id": 1119497, "category_id": 84, "iscrowd": 0, "bbox": [36, 159, 10, 39], "area": 143}, {"id": 5853499, "category_id": 84, "iscrowd": 0, "bbox": [50, 157, 15, 42], "area": 393}, {"id": 3490364, "category_id": 84, "iscrowd": 0, "bbox": [54, 246, 9, 33], "area": 164}, {"id": 10189138, "category_id": 84, "iscrowd": 0, "bbox": [92, 241, 19, 58], "area": 257}, {"id": 3088917, "category_id": 84, "iscrowd": 0, "bbox": [17, 325, 24, 20], "area": 168}, {"id": 5982773, "category_id": 84, "iscrowd": 0, "bbox": [0, 228, 141, 74], "area": 6673}, {"id": 4341810, "category_id": 84, "iscrowd": 0, "bbox": [22, 161, 13, 44], "area": 383}, {"id": 7434592, "category_id": 84, "iscrowd": 0, "bbox": [75, 155, 16, 48], "area": 455}, {"id": 5393723, "category_id": 84, "iscrowd": 0, "bbox": [60, 156, 19, 48], "area": 538}, {"id": 9729368, "category_id": 84, "iscrowd": 0, "bbox": [84, 237, 17, 62], "area": 253}, {"id": 11047291, "category_id": 84, "iscrowd": 0, "bbox": [103, 152, 22, 41], "area": 355}, {"id": 3027255, "category_id": 84, "iscrowd": 0, "bbox": [37, 320, 39, 59], "area": 1033}, {"id": 4932151, "category_id": 84, "iscrowd": 1, "bbox": [8, 151, 165, 240], "area": 9570}, {"id": 1913400, "category_id": 100, "iscrowd": 0, "bbox": [401, 118, 140, 210], "area": 14136}, {"id": 330253, "category_id": 112, "iscrowd": 0, "bbox": [339, 132, 80, 133], "area": 6109}, {"id": 1589350, "category_id": 118, "iscrowd": 0, "bbox": [256, 254, 288, 173], "area": 32281}, {"id": 1250839, "category_id": 156, "iscrowd": 0, "bbox": [0, 80, 205, 347], "area": 21075}, {"id": 4088702, "category_id": 186, "iscrowd": 0, "bbox": [118, 0, 462, 85], "area": 27310}, {"id": 1120796, "category_id": 189, "iscrowd": 0, "bbox": [168, 255, 88, 58], "area": 2513}, {"id": 3944487, "category_id": 195, "iscrowd": 0, "bbox": [0, 151, 15, 190], "area": 769}, {"id": 4217967, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 413], "area": 111974}, {"id": 460838, "category_id": 200, "iscrowd": 0, "bbox": [56, 246, 356, 181], "area": 7495}], "file_name": "000000104666.png", "image_id": 104666}, {"segments_info": [{"id": 9208705, "category_id": 48, "iscrowd": 0, "bbox": [462, 121, 37, 248], "area": 5083}, {"id": 4475473, "category_id": 49, "iscrowd": 0, "bbox": [1, 166, 74, 209], "area": 3877}, {"id": 3443633, "category_id": 55, "iscrowd": 0, "bbox": [288, 129, 92, 100], "area": 2912}, {"id": 3437430, "category_id": 56, "iscrowd": 0, "bbox": [153, 252, 26, 65], "area": 1116}, {"id": 2714721, "category_id": 56, "iscrowd": 0, "bbox": [200, 164, 185, 170], "area": 12766}, {"id": 1398703, "category_id": 57, "iscrowd": 0, "bbox": [174, 252, 12, 46], "area": 339}, {"id": 2847962, "category_id": 57, "iscrowd": 0, "bbox": [210, 215, 18, 33], "area": 362}, {"id": 1065349, "category_id": 57, "iscrowd": 0, "bbox": [236, 187, 45, 34], "area": 596}, {"id": 2515394, "category_id": 57, "iscrowd": 0, "bbox": [196, 204, 26, 43], "area": 671}, {"id": 1261984, "category_id": 57, "iscrowd": 0, "bbox": [188, 296, 23, 56], "area": 684}, {"id": 1329066, "category_id": 57, "iscrowd": 0, "bbox": [221, 176, 18, 69], "area": 918}, {"id": 1922495, "category_id": 57, "iscrowd": 0, "bbox": [321, 185, 67, 61], "area": 3191}, {"id": 940479, "category_id": 57, "iscrowd": 0, "bbox": [177, 243, 52, 77], "area": 1186}, {"id": 1266636, "category_id": 57, "iscrowd": 0, "bbox": [176, 237, 35, 28], "area": 460}, {"id": 7568003, "category_id": 67, "iscrowd": 0, "bbox": [0, 22, 500, 353], "area": 124749}], "file_name": "000000104669.png", "image_id": 104669}, {"segments_info": [{"id": 7096895, "category_id": 13, "iscrowd": 0, "bbox": [250, 70, 70, 300], "area": 16290}, {"id": 6118734, "category_id": 184, "iscrowd": 0, "bbox": [0, 124, 202, 251], "area": 37800}, {"id": 13668955, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 133268}], "file_name": "000000104782.png", "image_id": 104782}, {"segments_info": [{"id": 6383984, "category_id": 70, "iscrowd": 0, "bbox": [66, 58, 196, 397], "area": 58886}, {"id": 1581110, "category_id": 190, "iscrowd": 0, "bbox": [55, 355, 304, 145], "area": 23326}, {"id": 855567, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 105040}], "file_name": "000000104803.png", "image_id": 104803}, {"segments_info": [{"id": 4160751, "category_id": 48, "iscrowd": 0, "bbox": [216, 429, 143, 211], "area": 7066}, {"id": 3825528, "category_id": 51, "iscrowd": 0, "bbox": [29, 62, 310, 407], "area": 80297}, {"id": 1199904, "category_id": 56, "iscrowd": 0, "bbox": [264, 196, 75, 92], "area": 4616}, {"id": 2449470, "category_id": 56, "iscrowd": 0, "bbox": [262, 129, 59, 51], "area": 1159}, {"id": 4023781, "category_id": 57, "iscrowd": 0, "bbox": [235, 140, 75, 66], "area": 2951}, {"id": 13092011, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 177191}], "file_name": "000000105014.png", "image_id": 105014}, {"segments_info": [{"id": 10132638, "category_id": 70, "iscrowd": 0, "bbox": [226, 217, 120, 116], "area": 5991}, {"id": 9735307, "category_id": 81, "iscrowd": 0, "bbox": [139, 200, 76, 68], "area": 2259}, {"id": 13092036, "category_id": 81, "iscrowd": 0, "bbox": [137, 190, 80, 25], "area": 1383}, {"id": 4935002, "category_id": 112, "iscrowd": 0, "bbox": [80, 0, 420, 333], "area": 47427}, {"id": 9474708, "category_id": 176, "iscrowd": 0, "bbox": [121, 62, 299, 271], "area": 53024}, {"id": 12039605, "category_id": 181, "iscrowd": 0, "bbox": [336, 0, 60, 14], "area": 754}, {"id": 11318699, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 417, 333], "area": 48557}], "file_name": "000000105249.png", "image_id": 105249}, {"segments_info": [{"id": 1844776, "category_id": 1, "iscrowd": 0, "bbox": [41, 255, 45, 58], "area": 1182}, {"id": 2502965, "category_id": 1, "iscrowd": 0, "bbox": [316, 173, 45, 129], "area": 2101}, {"id": 1518393, "category_id": 1, "iscrowd": 0, "bbox": [538, 182, 37, 114], "area": 2254}, {"id": 2041923, "category_id": 1, "iscrowd": 0, "bbox": [397, 110, 98, 214], "area": 6680}, {"id": 3225657, "category_id": 1, "iscrowd": 0, "bbox": [15, 202, 47, 82], "area": 1330}, {"id": 2304042, "category_id": 1, "iscrowd": 0, "bbox": [483, 215, 39, 65], "area": 892}, {"id": 2237213, "category_id": 1, "iscrowd": 0, "bbox": [435, 198, 31, 99], "area": 1096}, {"id": 1711398, "category_id": 1, "iscrowd": 0, "bbox": [0, 205, 29, 75], "area": 881}, {"id": 2503477, "category_id": 21, "iscrowd": 0, "bbox": [62, 112, 294, 290], "area": 36989}, {"id": 3557198, "category_id": 154, "iscrowd": 0, "bbox": [0, 234, 640, 193], "area": 88753}, {"id": 9344920, "category_id": 155, "iscrowd": 0, "bbox": [0, 198, 640, 79], "area": 7621}, {"id": 13292755, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 234], "area": 118916}, {"id": 3686202, "category_id": 192, "iscrowd": 0, "bbox": [355, 192, 285, 48], "area": 3548}], "file_name": "000000105264.png", "image_id": 105264}, {"segments_info": [{"id": 2435400, "category_id": 1, "iscrowd": 0, "bbox": [119, 561, 211, 51], "area": 6885}, {"id": 1776153, "category_id": 1, "iscrowd": 0, "bbox": [174, 1, 423, 283], "area": 86750}, {"id": 8166582, "category_id": 51, "iscrowd": 0, "bbox": [3, 244, 609, 318], "area": 134428}, {"id": 5931921, "category_id": 56, "iscrowd": 0, "bbox": [238, 278, 47, 64], "area": 1197}, {"id": 5804759, "category_id": 57, "iscrowd": 0, "bbox": [21, 245, 97, 67], "area": 4088}, {"id": 2123996, "category_id": 57, "iscrowd": 0, "bbox": [79, 289, 124, 93], "area": 6409}, {"id": 2780345, "category_id": 57, "iscrowd": 0, "bbox": [201, 388, 40, 34], "area": 993}, {"id": 2587350, "category_id": 57, "iscrowd": 0, "bbox": [231, 307, 82, 64], "area": 882}, {"id": 4490713, "category_id": 57, "iscrowd": 0, "bbox": [268, 291, 85, 68], "area": 3819}, {"id": 3831778, "category_id": 57, "iscrowd": 0, "bbox": [389, 366, 88, 69], "area": 3953}, {"id": 3171777, "category_id": 57, "iscrowd": 0, "bbox": [0, 395, 83, 58], "area": 3394}, {"id": 4406847, "category_id": 189, "iscrowd": 0, "bbox": [0, 76, 216, 237], "area": 12685}, {"id": 8689305, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 612, 587], "area": 67662}, {"id": 5601438, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 590, 514], "area": 4584}], "file_name": "000000105335.png", "image_id": 105335}, {"segments_info": [{"id": 3093048, "category_id": 3, "iscrowd": 0, "bbox": [334, 517, 17, 15], "area": 179}, {"id": 5526611, "category_id": 85, "iscrowd": 0, "bbox": [125, 147, 61, 64], "area": 2881}, {"id": 6053212, "category_id": 85, "iscrowd": 0, "bbox": [189, 154, 26, 59], "area": 1087}, {"id": 2512173, "category_id": 92, "iscrowd": 0, "bbox": [385, 434, 26, 55], "area": 1052}, {"id": 4212556, "category_id": 149, "iscrowd": 0, "bbox": [0, 525, 427, 47], "area": 4849}, {"id": 2238769, "category_id": 175, "iscrowd": 0, "bbox": [0, 542, 389, 67], "area": 4844}, {"id": 1583149, "category_id": 184, "iscrowd": 0, "bbox": [0, 506, 324, 51], "area": 5307}, {"id": 13288900, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 475], "area": 152400}, {"id": 2830398, "category_id": 194, "iscrowd": 0, "bbox": [0, 554, 427, 86], "area": 23078}, {"id": 4541531, "category_id": 197, "iscrowd": 0, "bbox": [0, 49, 427, 563], "area": 76314}], "file_name": "000000105455.png", "image_id": 105455}, {"segments_info": [{"id": 3024965, "category_id": 1, "iscrowd": 0, "bbox": [31, 131, 13, 26], "area": 192}, {"id": 3552049, "category_id": 1, "iscrowd": 0, "bbox": [373, 157, 14, 32], "area": 215}, {"id": 3223857, "category_id": 1, "iscrowd": 0, "bbox": [55, 130, 17, 30], "area": 216}, {"id": 3748658, "category_id": 1, "iscrowd": 0, "bbox": [295, 120, 38, 80], "area": 1230}, {"id": 5459536, "category_id": 1, "iscrowd": 0, "bbox": [339, 150, 15, 41], "area": 338}, {"id": 3814194, "category_id": 1, "iscrowd": 0, "bbox": [422, 105, 32, 104], "area": 2029}, {"id": 5001051, "category_id": 1, "iscrowd": 0, "bbox": [215, 144, 13, 28], "area": 228}, {"id": 3748652, "category_id": 1, "iscrowd": 0, "bbox": [361, 156, 11, 31], "area": 191}, {"id": 5331292, "category_id": 1, "iscrowd": 0, "bbox": [235, 146, 10, 32], "area": 227}, {"id": 5262928, "category_id": 1, "iscrowd": 0, "bbox": [243, 151, 10, 27], "area": 157}, {"id": 6514793, "category_id": 1, "iscrowd": 0, "bbox": [393, 153, 5, 13], "area": 38}, {"id": 5064520, "category_id": 1, "iscrowd": 0, "bbox": [5, 121, 10, 36], "area": 208}, {"id": 3289653, "category_id": 1, "iscrowd": 1, "bbox": [228, 147, 204, 34], "area": 884}, {"id": 5262166, "category_id": 3, "iscrowd": 0, "bbox": [38, 135, 43, 26], "area": 501}, {"id": 4670529, "category_id": 3, "iscrowd": 0, "bbox": [0, 124, 35, 31], "area": 607}, {"id": 5460582, "category_id": 6, "iscrowd": 0, "bbox": [183, 111, 159, 63], "area": 4499}, {"id": 2699152, "category_id": 11, "iscrowd": 0, "bbox": [110, 97, 99, 225], "area": 15554}, {"id": 5659742, "category_id": 128, "iscrowd": 0, "bbox": [444, 72, 56, 125], "area": 5344}, {"id": 10722974, "category_id": 149, "iscrowd": 0, "bbox": [0, 141, 397, 128], "area": 18610}, {"id": 3030329, "category_id": 184, "iscrowd": 0, "bbox": [0, 63, 453, 109], "area": 13816}, {"id": 4736838, "category_id": 185, "iscrowd": 0, "bbox": [386, 149, 46, 50], "area": 1306}, {"id": 16579836, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 339, 62], "area": 8492}, {"id": 7434117, "category_id": 191, "iscrowd": 0, "bbox": [0, 192, 500, 183], "area": 68833}, {"id": 6513762, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 500, 166], "area": 39909}, {"id": 3556683, "category_id": 193, "iscrowd": 0, "bbox": [200, 159, 25, 14], "area": 139}], "file_name": "000000105912.png", "image_id": 105912}, {"segments_info": [{"id": 8093558, "category_id": 1, "iscrowd": 0, "bbox": [140, 192, 3, 10], "area": 20}, {"id": 6644841, "category_id": 1, "iscrowd": 0, "bbox": [101, 191, 4, 9], "area": 18}, {"id": 6315864, "category_id": 1, "iscrowd": 0, "bbox": [207, 192, 4, 10], "area": 31}, {"id": 5525841, "category_id": 1, "iscrowd": 0, "bbox": [225, 188, 5, 27], "area": 72}, {"id": 5263182, "category_id": 1, "iscrowd": 0, "bbox": [187, 192, 4, 9], "area": 21}, {"id": 5854552, "category_id": 1, "iscrowd": 0, "bbox": [174, 192, 4, 10], "area": 24}, {"id": 7300201, "category_id": 1, "iscrowd": 0, "bbox": [130, 190, 4, 9], "area": 27}, {"id": 4078397, "category_id": 3, "iscrowd": 0, "bbox": [31, 200, 84, 51], "area": 3394}, {"id": 4016716, "category_id": 22, "iscrowd": 0, "bbox": [422, 87, 129, 243], "area": 20190}, {"id": 8617339, "category_id": 149, "iscrowd": 0, "bbox": [0, 202, 223, 258], "area": 20190}, {"id": 4868421, "category_id": 181, "iscrowd": 0, "bbox": [309, 0, 268, 418], "area": 71397}, {"id": 15724525, "category_id": 187, "iscrowd": 0, "bbox": [69, 0, 162, 165], "area": 20952}, {"id": 8290178, "category_id": 191, "iscrowd": 0, "bbox": [0, 219, 303, 249], "area": 40834}, {"id": 7830913, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 468], "area": 68440}, {"id": 4813715, "category_id": 199, "iscrowd": 0, "bbox": [253, 0, 346, 468], "area": 53620}], "file_name": "000000105923.png", "image_id": 105923}, {"segments_info": [{"id": 8944739, "category_id": 6, "iscrowd": 0, "bbox": [145, 66, 378, 253], "area": 80217}, {"id": 3549981, "category_id": 149, "iscrowd": 0, "bbox": [0, 254, 640, 174], "area": 84732}, {"id": 1646364, "category_id": 184, "iscrowd": 0, "bbox": [0, 121, 640, 174], "area": 13390}, {"id": 16184805, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 276, 168], "area": 17486}, {"id": 5658723, "category_id": 197, "iscrowd": 0, "bbox": [32, 0, 608, 275], "area": 75309}, {"id": 2568503, "category_id": 199, "iscrowd": 0, "bbox": [0, 187, 20, 92], "area": 1528}], "file_name": "000000106048.png", "image_id": 106048}, {"segments_info": [{"id": 1912133, "category_id": 62, "iscrowd": 0, "bbox": [2, 280, 350, 192], "area": 51103}, {"id": 4614807, "category_id": 62, "iscrowd": 0, "bbox": [536, 141, 104, 174], "area": 11737}, {"id": 3956096, "category_id": 63, "iscrowd": 0, "bbox": [1, 119, 638, 354], "area": 51312}, {"id": 2571605, "category_id": 64, "iscrowd": 0, "bbox": [193, 28, 86, 128], "area": 7936}, {"id": 2572123, "category_id": 64, "iscrowd": 0, "bbox": [280, 16, 66, 127], "area": 4644}, {"id": 4942225, "category_id": 67, "iscrowd": 0, "bbox": [373, 233, 223, 182], "area": 21081}, {"id": 6518941, "category_id": 75, "iscrowd": 0, "bbox": [112, 242, 50, 13], "area": 321}, {"id": 3490657, "category_id": 75, "iscrowd": 0, "bbox": [118, 249, 60, 17], "area": 573}, {"id": 5793930, "category_id": 75, "iscrowd": 0, "bbox": [111, 271, 31, 10], "area": 278}, {"id": 4612229, "category_id": 75, "iscrowd": 0, "bbox": [446, 305, 26, 12], "area": 188}, {"id": 1323362, "category_id": 118, "iscrowd": 0, "bbox": [242, 302, 388, 82], "area": 5408}, {"id": 16055805, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 615, 252], "area": 19139}, {"id": 6916529, "category_id": 180, "iscrowd": 0, "bbox": [72, 0, 376, 172], "area": 31306}, {"id": 3096660, "category_id": 181, "iscrowd": 0, "bbox": [175, 13, 153, 135], "area": 8011}, {"id": 8689075, "category_id": 189, "iscrowd": 0, "bbox": [12, 213, 414, 98], "area": 10607}, {"id": 7247823, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 268], "area": 30468}, {"id": 728381, "category_id": 200, "iscrowd": 0, "bbox": [328, 310, 312, 170], "area": 41390}], "file_name": "000000106235.png", "image_id": 106235}, {"segments_info": [{"id": 5734566, "category_id": 59, "iscrowd": 0, "bbox": [413, 222, 184, 173], "area": 21958}, {"id": 856083, "category_id": 189, "iscrowd": 0, "bbox": [0, 9, 640, 471], "area": 42339}, {"id": 4950204, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 605, 480], "area": 206329}, {"id": 2699840, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 599, 115], "area": 12262}], "file_name": "000000106266.png", "image_id": 106266}, {"segments_info": [{"id": 12104113, "category_id": 7, "iscrowd": 0, "bbox": [103, 71, 184, 348], "area": 36414}, {"id": 7826302, "category_id": 7, "iscrowd": 0, "bbox": [183, 49, 168, 92], "area": 6612}, {"id": 9801364, "category_id": 95, "iscrowd": 0, "bbox": [64, 0, 576, 163], "area": 41678}, {"id": 5527654, "category_id": 147, "iscrowd": 0, "bbox": [0, 60, 640, 365], "area": 66442}, {"id": 3159089, "category_id": 184, "iscrowd": 0, "bbox": [142, 0, 498, 31], "area": 8663}, {"id": 5267560, "category_id": 194, "iscrowd": 0, "bbox": [0, 65, 640, 360], "area": 94390}, {"id": 10526118, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 73, 245], "area": 13368}], "file_name": "000000106281.png", "image_id": 106281}, {"segments_info": [{"id": 11976147, "category_id": 88, "iscrowd": 0, "bbox": [254, 15, 325, 380], "area": 70954}], "file_name": "000000106330.png", "image_id": 106330}, {"segments_info": [{"id": 5072009, "category_id": 17, "iscrowd": 0, "bbox": [91, 84, 143, 192], "area": 15739}, {"id": 3564013, "category_id": 62, "iscrowd": 0, "bbox": [2, 78, 316, 315], "area": 59364}, {"id": 4941460, "category_id": 65, "iscrowd": 0, "bbox": [52, 24, 265, 179], "area": 19135}, {"id": 6327739, "category_id": 84, "iscrowd": 0, "bbox": [527, 105, 74, 21], "area": 908}, {"id": 8035002, "category_id": 84, "iscrowd": 0, "bbox": [526, 90, 95, 16], "area": 763}, {"id": 10596292, "category_id": 84, "iscrowd": 0, "bbox": [503, 134, 78, 24], "area": 553}, {"id": 9343649, "category_id": 84, "iscrowd": 0, "bbox": [509, 121, 73, 29], "area": 903}, {"id": 10461361, "category_id": 84, "iscrowd": 0, "bbox": [519, 117, 65, 21], "area": 475}, {"id": 9742784, "category_id": 84, "iscrowd": 0, "bbox": [522, 98, 80, 14], "area": 421}, {"id": 7765904, "category_id": 84, "iscrowd": 0, "bbox": [519, 111, 71, 19], "area": 283}, {"id": 1596635, "category_id": 87, "iscrowd": 0, "bbox": [591, 111, 18, 21], "area": 286}, {"id": 1860204, "category_id": 87, "iscrowd": 0, "bbox": [601, 95, 16, 33], "area": 311}, {"id": 4747688, "category_id": 118, "iscrowd": 0, "bbox": [0, 190, 535, 290], "area": 70882}, {"id": 2437751, "category_id": 141, "iscrowd": 0, "bbox": [344, 0, 84, 36], "area": 2255}, {"id": 6320792, "category_id": 189, "iscrowd": 0, "bbox": [296, 19, 344, 359], "area": 76812}, {"id": 9411504, "category_id": 195, "iscrowd": 0, "bbox": [501, 130, 77, 36], "area": 640}, {"id": 7964064, "category_id": 199, "iscrowd": 0, "bbox": [320, 0, 320, 49], "area": 8295}], "file_name": "000000106389.png", "image_id": 106389}, {"segments_info": [{"id": 9675702, "category_id": 85, "iscrowd": 0, "bbox": [263, 462, 88, 90], "area": 6225}, {"id": 9544893, "category_id": 130, "iscrowd": 0, "bbox": [0, 279, 612, 301], "area": 12677}, {"id": 7828339, "category_id": 181, "iscrowd": 0, "bbox": [124, 335, 372, 277], "area": 53226}, {"id": 7563884, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 612, 539], "area": 241737}, {"id": 7372176, "category_id": 199, "iscrowd": 0, "bbox": [0, 317, 612, 295], "area": 26700}], "file_name": "000000106563.png", "image_id": 106563}, {"segments_info": [{"id": 7503987, "category_id": 1, "iscrowd": 0, "bbox": [276, 192, 5, 9], "area": 23}, {"id": 9540487, "category_id": 1, "iscrowd": 0, "bbox": [217, 223, 205, 417], "area": 70126}, {"id": 3555398, "category_id": 22, "iscrowd": 0, "bbox": [0, 36, 301, 604], "area": 118415}, {"id": 4616032, "category_id": 184, "iscrowd": 0, "bbox": [0, 10, 426, 284], "area": 27572}, {"id": 15192232, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 426, 128], "area": 25505}, {"id": 7115144, "category_id": 193, "iscrowd": 0, "bbox": [135, 284, 291, 222], "area": 3429}, {"id": 6321538, "category_id": 194, "iscrowd": 0, "bbox": [0, 423, 193, 217], "area": 19212}], "file_name": "000000106757.png", "image_id": 106757}, {"segments_info": [{"id": 8948115, "category_id": 16, "iscrowd": 0, "bbox": [208, 240, 64, 160], "area": 6855}, {"id": 6255466, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 533], "area": 132590}], "file_name": "000000106881.png", "image_id": 106881}, {"segments_info": [{"id": 7230307, "category_id": 1, "iscrowd": 0, "bbox": [235, 230, 50, 167], "area": 4864}, {"id": 6840950, "category_id": 41, "iscrowd": 0, "bbox": [217, 383, 74, 24], "area": 524}, {"id": 6180457, "category_id": 125, "iscrowd": 0, "bbox": [0, 292, 612, 96], "area": 7836}, {"id": 7693170, "category_id": 128, "iscrowd": 0, "bbox": [0, 169, 396, 100], "area": 17054}, {"id": 6508906, "category_id": 149, "iscrowd": 0, "bbox": [55, 299, 557, 63], "area": 20259}, {"id": 4863814, "category_id": 184, "iscrowd": 0, "bbox": [0, 131, 612, 234], "area": 36221}, {"id": 14928033, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 612, 232], "area": 109706}, {"id": 8623275, "category_id": 191, "iscrowd": 0, "bbox": [0, 297, 612, 315], "area": 154589}, {"id": 7949905, "category_id": 199, "iscrowd": 0, "bbox": [0, 242, 593, 65], "area": 23359}], "file_name": "000000106912.png", "image_id": 106912}, {"segments_info": [{"id": 5129804, "category_id": 3, "iscrowd": 0, "bbox": [1, 169, 636, 254], "area": 25828}, {"id": 2040355, "category_id": 17, "iscrowd": 0, "bbox": [50, 84, 210, 263], "area": 27541}, {"id": 4342599, "category_id": 62, "iscrowd": 0, "bbox": [102, 0, 387, 394], "area": 72375}, {"id": 13296354, "category_id": 181, "iscrowd": 0, "bbox": [114, 0, 526, 139], "area": 18375}], "file_name": "000000107087.png", "image_id": 107087}, {"segments_info": [{"id": 8685447, "category_id": 1, "iscrowd": 0, "bbox": [477, 78, 148, 344], "area": 25051}, {"id": 6852831, "category_id": 27, "iscrowd": 0, "bbox": [583, 189, 36, 62], "area": 773}, {"id": 8422360, "category_id": 35, "iscrowd": 0, "bbox": [365, 368, 160, 58], "area": 1738}, {"id": 2320279, "category_id": 130, "iscrowd": 0, "bbox": [371, 182, 21, 22], "area": 346}, {"id": 15987953, "category_id": 159, "iscrowd": 0, "bbox": [0, 294, 640, 132], "area": 62849}, {"id": 658702, "category_id": 184, "iscrowd": 0, "bbox": [85, 0, 223, 211], "area": 29126}, {"id": 724496, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 102], "area": 44182}, {"id": 1054495, "category_id": 197, "iscrowd": 0, "bbox": [0, 80, 640, 148], "area": 50939}], "file_name": "000000107094.png", "image_id": 107094}, {"segments_info": [{"id": 5524296, "category_id": 1, "iscrowd": 0, "bbox": [233, 127, 40, 39], "area": 780}, {"id": 6312330, "category_id": 1, "iscrowd": 0, "bbox": [36, 149, 47, 66], "area": 1564}, {"id": 4799804, "category_id": 1, "iscrowd": 0, "bbox": [347, 77, 133, 288], "area": 20962}, {"id": 4274488, "category_id": 1, "iscrowd": 0, "bbox": [64, 111, 59, 106], "area": 4350}, {"id": 4275258, "category_id": 1, "iscrowd": 0, "bbox": [137, 131, 171, 211], "area": 17019}, {"id": 5855082, "category_id": 1, "iscrowd": 0, "bbox": [267, 138, 64, 188], "area": 6463}, {"id": 5260866, "category_id": 1, "iscrowd": 0, "bbox": [344, 141, 26, 60], "area": 770}, {"id": 7824991, "category_id": 1, "iscrowd": 0, "bbox": [103, 125, 59, 116], "area": 3132}, {"id": 5392966, "category_id": 1, "iscrowd": 0, "bbox": [326, 134, 24, 79], "area": 1236}, {"id": 5063496, "category_id": 1, "iscrowd": 0, "bbox": [11, 156, 42, 61], "area": 1753}, {"id": 3946549, "category_id": 2, "iscrowd": 0, "bbox": [387, 254, 93, 237], "area": 5919}, {"id": 10462894, "category_id": 18, "iscrowd": 0, "bbox": [58, 284, 98, 228], "area": 9268}, {"id": 11974584, "category_id": 18, "iscrowd": 0, "bbox": [2, 361, 75, 228], "area": 12280}, {"id": 8752271, "category_id": 18, "iscrowd": 0, "bbox": [148, 290, 106, 206], "area": 13092}, {"id": 8484004, "category_id": 28, "iscrowd": 0, "bbox": [1, 34, 207, 75], "area": 8378}, {"id": 10583158, "category_id": 28, "iscrowd": 0, "bbox": [86, 79, 173, 49], "area": 5789}, {"id": 8944231, "category_id": 28, "iscrowd": 0, "bbox": [312, 106, 96, 36], "area": 2075}, {"id": 9401490, "category_id": 28, "iscrowd": 0, "bbox": [218, 130, 82, 25], "area": 654}, {"id": 8878753, "category_id": 92, "iscrowd": 0, "bbox": [0, 220, 164, 177], "area": 16959}, {"id": 12694951, "category_id": 184, "iscrowd": 0, "bbox": [391, 54, 89, 77], "area": 2167}, {"id": 4474208, "category_id": 185, "iscrowd": 0, "bbox": [74, 196, 375, 164], "area": 11941}, {"id": 16512236, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 143], "area": 37012}, {"id": 2838072, "category_id": 193, "iscrowd": 0, "bbox": [0, 318, 480, 322], "area": 98231}], "file_name": "000000107226.png", "image_id": 107226}, {"segments_info": [{"id": 4345439, "category_id": 1, "iscrowd": 0, "bbox": [123, 18, 61, 121], "area": 1953}, {"id": 1515569, "category_id": 1, "iscrowd": 0, "bbox": [44, 82, 40, 54], "area": 1420}, {"id": 9940665, "category_id": 63, "iscrowd": 0, "bbox": [138, 70, 102, 55], "area": 3507}, {"id": 8490386, "category_id": 63, "iscrowd": 0, "bbox": [4, 71, 136, 64], "area": 4136}, {"id": 7766152, "category_id": 75, "iscrowd": 0, "bbox": [129, 52, 3, 2], "area": 5}, {"id": 8422288, "category_id": 75, "iscrowd": 0, "bbox": [124, 53, 3, 2], "area": 5}, {"id": 6318445, "category_id": 84, "iscrowd": 0, "bbox": [153, 104, 16, 7], "area": 62}, {"id": 4673919, "category_id": 84, "iscrowd": 0, "bbox": [143, 102, 16, 6], "area": 57}, {"id": 1972510, "category_id": 118, "iscrowd": 0, "bbox": [0, 109, 240, 71], "area": 2153}, {"id": 12885628, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 115, 112], "area": 5863}, {"id": 2902132, "category_id": 189, "iscrowd": 0, "bbox": [91, 99, 85, 55], "area": 3330}, {"id": 3823765, "category_id": 199, "iscrowd": 0, "bbox": [25, 0, 215, 82], "area": 10943}, {"id": 1064361, "category_id": 200, "iscrowd": 0, "bbox": [0, 125, 240, 55], "area": 9484}], "file_name": "000000107339.png", "image_id": 107339}, {"segments_info": [{"id": 11179909, "category_id": 3, "iscrowd": 0, "bbox": [94, 175, 25, 38], "area": 795}, {"id": 12626804, "category_id": 42, "iscrowd": 0, "bbox": [0, 198, 552, 128], "area": 14525}, {"id": 7103576, "category_id": 128, "iscrowd": 0, "bbox": [14, 0, 215, 400], "area": 31263}, {"id": 9668991, "category_id": 151, "iscrowd": 0, "bbox": [14, 13, 19, 23], "area": 259}, {"id": 4409148, "category_id": 184, "iscrowd": 0, "bbox": [0, 46, 272, 434], "area": 25355}, {"id": 2170652, "category_id": 185, "iscrowd": 0, "bbox": [144, 29, 75, 24], "area": 1420}, {"id": 16185076, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 58, 270], "area": 9973}, {"id": 4805450, "category_id": 191, "iscrowd": 0, "bbox": [215, 0, 98, 480], "area": 10689}, {"id": 3966053, "category_id": 193, "iscrowd": 0, "bbox": [180, 0, 460, 480], "area": 162423}], "file_name": "000000107554.png", "image_id": 107554}, {"segments_info": [{"id": 10461637, "category_id": 1, "iscrowd": 0, "bbox": [231, 234, 9, 17], "area": 63}, {"id": 10987192, "category_id": 1, "iscrowd": 0, "bbox": [216, 234, 10, 18], "area": 71}, {"id": 11250898, "category_id": 1, "iscrowd": 0, "bbox": [241, 240, 7, 17], "area": 46}, {"id": 11579845, "category_id": 1, "iscrowd": 0, "bbox": [318, 240, 44, 83], "area": 1344}, {"id": 8750494, "category_id": 1, "iscrowd": 0, "bbox": [408, 253, 12, 17], "area": 84}, {"id": 7170689, "category_id": 1, "iscrowd": 0, "bbox": [414, 256, 23, 45], "area": 451}, {"id": 9670054, "category_id": 1, "iscrowd": 0, "bbox": [398, 252, 15, 33], "area": 329}, {"id": 10066617, "category_id": 1, "iscrowd": 0, "bbox": [225, 236, 8, 13], "area": 64}, {"id": 6638923, "category_id": 1, "iscrowd": 0, "bbox": [31, 230, 11, 20], "area": 116}, {"id": 6443087, "category_id": 1, "iscrowd": 0, "bbox": [38, 227, 24, 40], "area": 351}, {"id": 9933489, "category_id": 1, "iscrowd": 0, "bbox": [357, 241, 50, 90], "area": 2092}, {"id": 4075307, "category_id": 1, "iscrowd": 0, "bbox": [16, 229, 15, 31], "area": 315}, {"id": 10395328, "category_id": 1, "iscrowd": 0, "bbox": [392, 239, 12, 15], "area": 105}, {"id": 10396861, "category_id": 1, "iscrowd": 1, "bbox": [328, 238, 96, 29], "area": 762}, {"id": 8226471, "category_id": 22, "iscrowd": 0, "bbox": [212, 249, 46, 38], "area": 1090}, {"id": 4737620, "category_id": 22, "iscrowd": 0, "bbox": [302, 293, 101, 174], "area": 9994}, {"id": 3818058, "category_id": 22, "iscrowd": 0, "bbox": [401, 300, 33, 86], "area": 1792}, {"id": 3025963, "category_id": 22, "iscrowd": 0, "bbox": [4, 254, 58, 50], "area": 2137}, {"id": 5530985, "category_id": 184, "iscrowd": 0, "bbox": [0, 64, 640, 416], "area": 181434}, {"id": 16645886, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 238], "area": 103754}], "file_name": "000000107851.png", "image_id": 107851}, {"segments_info": [{"id": 2897753, "category_id": 1, "iscrowd": 0, "bbox": [111, 0, 529, 423], "area": 113710}, {"id": 263434, "category_id": 74, "iscrowd": 0, "bbox": [86, 123, 155, 44], "area": 3714}, {"id": 527633, "category_id": 76, "iscrowd": 0, "bbox": [0, 167, 252, 261], "area": 55401}, {"id": 1259609, "category_id": 189, "iscrowd": 0, "bbox": [0, 101, 332, 327], "area": 26538}, {"id": 859433, "category_id": 190, "iscrowd": 0, "bbox": [88, 39, 98, 50], "area": 3456}, {"id": 2307391, "category_id": 199, "iscrowd": 0, "bbox": [355, 0, 178, 53], "area": 5499}], "file_name": "000000108026.png", "image_id": 108026}, {"segments_info": [{"id": 1645339, "category_id": 17, "iscrowd": 0, "bbox": [182, 157, 354, 195], "area": 45112}, {"id": 11910333, "category_id": 100, "iscrowd": 0, "bbox": [128, 267, 464, 200], "area": 43571}, {"id": 4872557, "category_id": 195, "iscrowd": 0, "bbox": [271, 37, 70, 38], "area": 1437}, {"id": 6583421, "category_id": 200, "iscrowd": 0, "bbox": [0, 10, 640, 470], "area": 127397}], "file_name": "000000108244.png", "image_id": 108244}, {"segments_info": [{"id": 657710, "category_id": 1, "iscrowd": 0, "bbox": [0, 33, 160, 286], "area": 28250}, {"id": 1059124, "category_id": 44, "iscrowd": 0, "bbox": [243, 0, 123, 320], "area": 26751}, {"id": 2975107, "category_id": 44, "iscrowd": 0, "bbox": [420, 241, 60, 102], "area": 5718}, {"id": 3293025, "category_id": 47, "iscrowd": 0, "bbox": [1, 0, 82, 117], "area": 4311}, {"id": 4875380, "category_id": 48, "iscrowd": 0, "bbox": [188, 241, 26, 14], "area": 188}, {"id": 1387066, "category_id": 49, "iscrowd": 0, "bbox": [17, 304, 111, 15], "area": 1117}, {"id": 3231336, "category_id": 50, "iscrowd": 0, "bbox": [473, 239, 7, 9], "area": 26}, {"id": 806807, "category_id": 59, "iscrowd": 0, "bbox": [190, 296, 70, 59], "area": 1679}, {"id": 1208504, "category_id": 59, "iscrowd": 0, "bbox": [115, 271, 102, 49], "area": 2654}, {"id": 1140133, "category_id": 59, "iscrowd": 0, "bbox": [111, 270, 145, 68], "area": 3495}, {"id": 880819, "category_id": 59, "iscrowd": 0, "bbox": [1, 364, 132, 31], "area": 2766}, {"id": 5552596, "category_id": 59, "iscrowd": 0, "bbox": [123, 355, 357, 245], "area": 49767}, {"id": 7512762, "category_id": 67, "iscrowd": 0, "bbox": [2, 1, 478, 632], "area": 114758}, {"id": 1382690, "category_id": 166, "iscrowd": 0, "bbox": [0, 0, 385, 279], "area": 39653}, {"id": 329498, "category_id": 177, "iscrowd": 0, "bbox": [362, 0, 118, 218], "area": 21438}, {"id": 5076367, "category_id": 189, "iscrowd": 0, "bbox": [0, 314, 480, 326], "area": 4319}], "file_name": "000000108253.png", "image_id": 108253}, {"segments_info": [{"id": 1844000, "category_id": 7, "iscrowd": 0, "bbox": [15, 167, 487, 61], "area": 24666}, {"id": 2303784, "category_id": 95, "iscrowd": 0, "bbox": [17, 224, 623, 103], "area": 25290}, {"id": 14994636, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 628, 209], "area": 103475}, {"id": 5927032, "category_id": 191, "iscrowd": 0, "bbox": [12, 299, 616, 58], "area": 13875}, {"id": 6839137, "category_id": 192, "iscrowd": 0, "bbox": [491, 193, 137, 42], "area": 4364}, {"id": 2440260, "category_id": 193, "iscrowd": 0, "bbox": [0, 323, 640, 111], "area": 51826}, {"id": 4216415, "category_id": 194, "iscrowd": 0, "bbox": [443, 337, 19, 20], "area": 299}], "file_name": "000000108440.png", "image_id": 108440}, {"segments_info": [{"id": 5262952, "category_id": 1, "iscrowd": 0, "bbox": [74, 3, 259, 492], "area": 61357}, {"id": 6842218, "category_id": 41, "iscrowd": 0, "bbox": [93, 315, 201, 132], "area": 5918}, {"id": 12040121, "category_id": 191, "iscrowd": 0, "bbox": [0, 174, 333, 326], "area": 50947}, {"id": 3106642, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 333, 266], "area": 44937}, {"id": 4805451, "category_id": 198, "iscrowd": 0, "bbox": [60, 19, 21, 19], "area": 270}], "file_name": "000000108495.png", "image_id": 108495}, {"segments_info": [{"id": 12565442, "category_id": 1, "iscrowd": 0, "bbox": [562, 231, 2, 5], "area": 10}, {"id": 8156265, "category_id": 1, "iscrowd": 0, "bbox": [171, 257, 4, 3], "area": 8}, {"id": 11250381, "category_id": 1, "iscrowd": 0, "bbox": [513, 224, 3, 7], "area": 16}, {"id": 14732718, "category_id": 1, "iscrowd": 0, "bbox": [575, 206, 9, 8], "area": 65}, {"id": 4803152, "category_id": 1, "iscrowd": 0, "bbox": [331, 327, 26, 71], "area": 677}, {"id": 10659474, "category_id": 1, "iscrowd": 0, "bbox": [569, 229, 3, 5], "area": 10}, {"id": 12102830, "category_id": 1, "iscrowd": 0, "bbox": [590, 211, 5, 5], "area": 15}, {"id": 9345707, "category_id": 1, "iscrowd": 0, "bbox": [77, 241, 7, 17], "area": 90}, {"id": 11445416, "category_id": 1, "iscrowd": 0, "bbox": [614, 217, 6, 6], "area": 24}, {"id": 9343911, "category_id": 1, "iscrowd": 0, "bbox": [86, 260, 5, 6], "area": 18}, {"id": 15188382, "category_id": 1, "iscrowd": 0, "bbox": [623, 216, 3, 7], "area": 16}, {"id": 12758954, "category_id": 1, "iscrowd": 0, "bbox": [583, 208, 3, 9], "area": 17}, {"id": 5658718, "category_id": 1, "iscrowd": 0, "bbox": [361, 331, 29, 69], "area": 893}, {"id": 7963531, "category_id": 1, "iscrowd": 1, "bbox": [7, 204, 578, 66], "area": 3316}, {"id": 14541797, "category_id": 42, "iscrowd": 0, "bbox": [364, 339, 41, 39], "area": 359}, {"id": 14079965, "category_id": 42, "iscrowd": 0, "bbox": [316, 338, 42, 35], "area": 672}, {"id": 11517382, "category_id": 154, "iscrowd": 0, "bbox": [0, 250, 640, 177], "area": 41376}, {"id": 12955541, "category_id": 155, "iscrowd": 0, "bbox": [0, 246, 640, 164], "area": 64785}, {"id": 5328443, "category_id": 184, "iscrowd": 0, "bbox": [250, 117, 176, 76], "area": 5677}, {"id": 16368777, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 225], "area": 101169}, {"id": 4215374, "category_id": 192, "iscrowd": 0, "bbox": [0, 106, 640, 157], "area": 53909}], "file_name": "000000108503.png", "image_id": 108503}, {"segments_info": [{"id": 4868441, "category_id": 22, "iscrowd": 0, "bbox": [310, 191, 215, 216], "area": 24134}, {"id": 4407375, "category_id": 22, "iscrowd": 0, "bbox": [116, 178, 215, 215], "area": 27290}, {"id": 15590892, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 180], "area": 93119}, {"id": 14667471, "category_id": 192, "iscrowd": 0, "bbox": [0, 108, 640, 148], "area": 48094}, {"id": 5533055, "category_id": 193, "iscrowd": 0, "bbox": [0, 232, 640, 248], "area": 114141}], "file_name": "000000108864.png", "image_id": 108864}, {"segments_info": [{"id": 5725008, "category_id": 2, "iscrowd": 0, "bbox": [2, 2, 638, 472], "area": 234121}, {"id": 10855831, "category_id": 17, "iscrowd": 0, "bbox": [128, 93, 342, 353], "area": 37127}, {"id": 9935232, "category_id": 191, "iscrowd": 0, "bbox": [0, 289, 640, 191], "area": 30627}], "file_name": "000000109055.png", "image_id": 109055}, {"segments_info": [{"id": 3289651, "category_id": 1, "iscrowd": 0, "bbox": [13, 7, 166, 564], "area": 52227}, {"id": 3553080, "category_id": 1, "iscrowd": 0, "bbox": [117, 141, 235, 493], "area": 57004}, {"id": 3421237, "category_id": 1, "iscrowd": 0, "bbox": [249, 42, 237, 562], "area": 60602}, {"id": 4408646, "category_id": 37, "iscrowd": 0, "bbox": [251, 386, 25, 23], "area": 443}, {"id": 7764090, "category_id": 40, "iscrowd": 0, "bbox": [402, 323, 80, 88], "area": 5066}, {"id": 5395541, "category_id": 62, "iscrowd": 0, "bbox": [171, 435, 108, 155], "area": 5436}, {"id": 9277586, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 486, 521], "area": 79341}, {"id": 12238529, "category_id": 200, "iscrowd": 0, "bbox": [0, 569, 468, 71], "area": 22422}], "file_name": "000000109118.png", "image_id": 109118}, {"segments_info": [{"id": 7109500, "category_id": 1, "iscrowd": 0, "bbox": [37, 39, 286, 540], "area": 64137}, {"id": 2991814, "category_id": 47, "iscrowd": 0, "bbox": [220, 287, 19, 19], "area": 291}, {"id": 6182839, "category_id": 47, "iscrowd": 0, "bbox": [194, 280, 22, 27], "area": 439}, {"id": 5460820, "category_id": 63, "iscrowd": 0, "bbox": [1, 341, 72, 274], "area": 10646}, {"id": 14804207, "category_id": 75, "iscrowd": 0, "bbox": [254, 217, 45, 28], "area": 305}, {"id": 8421761, "category_id": 75, "iscrowd": 0, "bbox": [100, 355, 30, 36], "area": 529}, {"id": 11647418, "category_id": 84, "iscrowd": 0, "bbox": [413, 268, 5, 28], "area": 102}, {"id": 7366753, "category_id": 84, "iscrowd": 0, "bbox": [362, 233, 22, 23], "area": 253}, {"id": 7770267, "category_id": 84, "iscrowd": 0, "bbox": [386, 216, 25, 41], "area": 634}, {"id": 10725546, "category_id": 84, "iscrowd": 0, "bbox": [319, 267, 95, 39], "area": 2794}, {"id": 12103368, "category_id": 100, "iscrowd": 0, "bbox": [36, 215, 377, 425], "area": 21764}, {"id": 14345189, "category_id": 109, "iscrowd": 0, "bbox": [416, 59, 64, 313], "area": 15909}, {"id": 7899800, "category_id": 171, "iscrowd": 0, "bbox": [0, 232, 429, 103], "area": 11169}, {"id": 4742524, "category_id": 177, "iscrowd": 0, "bbox": [0, 49, 427, 225], "area": 53528}, {"id": 5529450, "category_id": 185, "iscrowd": 0, "bbox": [175, 418, 18, 37], "area": 205}, {"id": 11383474, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 74], "area": 26193}, {"id": 12767115, "category_id": 190, "iscrowd": 0, "bbox": [185, 481, 295, 151], "area": 19749}, {"id": 8095121, "category_id": 195, "iscrowd": 0, "bbox": [68, 235, 241, 198], "area": 2755}, {"id": 8422289, "category_id": 199, "iscrowd": 0, "bbox": [425, 30, 55, 40], "area": 1222}, {"id": 9412007, "category_id": 200, "iscrowd": 0, "bbox": [0, 429, 480, 211], "area": 18887}], "file_name": "000000109313.png", "image_id": 109313}, {"segments_info": [{"id": 4799535, "category_id": 3, "iscrowd": 0, "bbox": [161, 418, 9, 10], "area": 60}, {"id": 2234645, "category_id": 3, "iscrowd": 0, "bbox": [60, 420, 14, 7], "area": 73}, {"id": 4140326, "category_id": 3, "iscrowd": 0, "bbox": [106, 418, 15, 9], "area": 96}, {"id": 4535598, "category_id": 3, "iscrowd": 0, "bbox": [87, 420, 17, 7], "area": 34}, {"id": 4402467, "category_id": 3, "iscrowd": 0, "bbox": [125, 422, 20, 10], "area": 106}, {"id": 4934992, "category_id": 10, "iscrowd": 0, "bbox": [102, 275, 21, 40], "area": 789}, {"id": 2383492, "category_id": 10, "iscrowd": 0, "bbox": [316, 322, 10, 24], "area": 164}, {"id": 3095097, "category_id": 10, "iscrowd": 0, "bbox": [129, 333, 12, 23], "area": 246}, {"id": 3236222, "category_id": 10, "iscrowd": 0, "bbox": [350, 315, 12, 27], "area": 280}, {"id": 2836556, "category_id": 10, "iscrowd": 0, "bbox": [196, 337, 10, 22], "area": 187}, {"id": 2765888, "category_id": 10, "iscrowd": 0, "bbox": [245, 284, 16, 38], "area": 572}, {"id": 2380649, "category_id": 10, "iscrowd": 0, "bbox": [269, 301, 23, 22], "area": 437}, {"id": 3519429, "category_id": 11, "iscrowd": 0, "bbox": [458, 445, 12, 18], "area": 130}, {"id": 5130562, "category_id": 149, "iscrowd": 0, "bbox": [0, 430, 441, 50], "area": 7891}, {"id": 6194339, "category_id": 171, "iscrowd": 0, "bbox": [591, 427, 49, 53], "area": 1975}, {"id": 2836292, "category_id": 184, "iscrowd": 0, "bbox": [0, 271, 640, 199], "area": 31062}, {"id": 15317887, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 381], "area": 121030}, {"id": 6121064, "category_id": 191, "iscrowd": 0, "bbox": [0, 409, 609, 71], "area": 11925}, {"id": 7366224, "category_id": 197, "iscrowd": 0, "bbox": [75, 106, 565, 350], "area": 128776}], "file_name": "000000109441.png", "image_id": 109441}, {"segments_info": [{"id": 5472919, "category_id": 60, "iscrowd": 0, "bbox": [8, 175, 211, 140], "area": 23288}, {"id": 10601953, "category_id": 60, "iscrowd": 0, "bbox": [202, 156, 202, 166], "area": 25349}, {"id": 7634560, "category_id": 60, "iscrowd": 0, "bbox": [50, 93, 215, 86], "area": 15419}, {"id": 3106194, "category_id": 67, "iscrowd": 0, "bbox": [404, 223, 94, 105], "area": 8094}, {"id": 3563396, "category_id": 189, "iscrowd": 0, "bbox": [0, 220, 500, 113], "area": 2547}, {"id": 2767949, "category_id": 196, "iscrowd": 0, "bbox": [75, 167, 214, 166], "area": 2382}, {"id": 540515, "category_id": 199, "iscrowd": 0, "bbox": [278, 0, 102, 181], "area": 8884}], "file_name": "000000109798.png", "image_id": 109798}, {"segments_info": [{"id": 2259114, "category_id": 88, "iscrowd": 0, "bbox": [157, 129, 251, 242], "area": 31885}, {"id": 3827050, "category_id": 149, "iscrowd": 0, "bbox": [332, 0, 308, 424], "area": 118661}, {"id": 3887707, "category_id": 184, "iscrowd": 0, "bbox": [77, 0, 228, 309], "area": 25237}, {"id": 6721437, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 372, 424], "area": 94846}], "file_name": "000000109827.png", "image_id": 109827}, {"segments_info": [{"id": 2172778, "category_id": 1, "iscrowd": 0, "bbox": [185, 195, 18, 57], "area": 283}, {"id": 3095382, "category_id": 1, "iscrowd": 0, "bbox": [213, 190, 75, 155], "area": 4890}, {"id": 4280939, "category_id": 1, "iscrowd": 0, "bbox": [184, 182, 49, 150], "area": 4763}, {"id": 5792894, "category_id": 1, "iscrowd": 0, "bbox": [123, 198, 20, 57], "area": 783}, {"id": 5407135, "category_id": 1, "iscrowd": 0, "bbox": [265, 201, 34, 83], "area": 1154}, {"id": 3619642, "category_id": 1, "iscrowd": 0, "bbox": [64, 177, 63, 200], "area": 7573}, {"id": 6714247, "category_id": 1, "iscrowd": 0, "bbox": [20, 175, 55, 178], "area": 5331}, {"id": 6385252, "category_id": 1, "iscrowd": 0, "bbox": [505, 197, 20, 18], "area": 214}, {"id": 6727861, "category_id": 1, "iscrowd": 0, "bbox": [256, 199, 12, 19], "area": 135}, {"id": 4474453, "category_id": 1, "iscrowd": 0, "bbox": [293, 196, 28, 74], "area": 1240}, {"id": 8623280, "category_id": 5, "iscrowd": 0, "bbox": [105, 137, 283, 95], "area": 9004}, {"id": 5534127, "category_id": 5, "iscrowd": 0, "bbox": [0, 135, 114, 37], "area": 2655}, {"id": 4544364, "category_id": 8, "iscrowd": 0, "bbox": [367, 82, 251, 218], "area": 21260}, {"id": 1920689, "category_id": 154, "iscrowd": 0, "bbox": [0, 191, 640, 287], "area": 131464}, {"id": 12368049, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 218], "area": 113877}], "file_name": "000000109900.png", "image_id": 109900}, {"segments_info": [{"id": 1646372, "category_id": 51, "iscrowd": 0, "bbox": [109, 8, 245, 211], "area": 12760}, {"id": 3102898, "category_id": 51, "iscrowd": 0, "bbox": [282, 199, 305, 268], "area": 64197}, {"id": 1521534, "category_id": 61, "iscrowd": 0, "bbox": [122, 25, 221, 163], "area": 27695}, {"id": 1119510, "category_id": 107, "iscrowd": 0, "bbox": [0, 14, 135, 466], "area": 34203}, {"id": 5069674, "category_id": 176, "iscrowd": 0, "bbox": [100, 0, 540, 51], "area": 13322}], "file_name": "000000109916.png", "image_id": 109916}, {"segments_info": [{"id": 2369087, "category_id": 44, "iscrowd": 0, "bbox": [190, 169, 6, 27], "area": 131}, {"id": 920591, "category_id": 44, "iscrowd": 0, "bbox": [203, 171, 10, 26], "area": 204}, {"id": 2893868, "category_id": 44, "iscrowd": 0, "bbox": [177, 144, 13, 35], "area": 292}, {"id": 3025711, "category_id": 44, "iscrowd": 0, "bbox": [172, 154, 7, 24], "area": 128}, {"id": 8882056, "category_id": 78, "iscrowd": 0, "bbox": [158, 0, 219, 126], "area": 22388}, {"id": 8355456, "category_id": 79, "iscrowd": 0, "bbox": [114, 170, 264, 119], "area": 16478}, {"id": 7434096, "category_id": 79, "iscrowd": 0, "bbox": [119, 255, 139, 213], "area": 19567}, {"id": 8223868, "category_id": 188, "iscrowd": 0, "bbox": [71, 0, 569, 480], "area": 161846}, {"id": 6053223, "category_id": 190, "iscrowd": 0, "bbox": [0, 400, 150, 80], "area": 8142}, {"id": 6908013, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 381, 438], "area": 56897}], "file_name": "000000109976.png", "image_id": 109976}, {"segments_info": [{"id": 4072728, "category_id": 1, "iscrowd": 0, "bbox": [26, 204, 67, 115], "area": 3863}, {"id": 5530736, "category_id": 36, "iscrowd": 0, "bbox": [3, 311, 97, 10], "area": 457}, {"id": 4081735, "category_id": 128, "iscrowd": 0, "bbox": [0, 119, 461, 120], "area": 22743}, {"id": 11053480, "category_id": 159, "iscrowd": 0, "bbox": [0, 154, 640, 272], "area": 119011}, {"id": 1844776, "category_id": 171, "iscrowd": 0, "bbox": [463, 309, 177, 83], "area": 7404}, {"id": 2963769, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 286], "area": 119049}], "file_name": "000000109992.png", "image_id": 109992}, {"segments_info": [{"id": 2894899, "category_id": 1, "iscrowd": 0, "bbox": [335, 161, 21, 66], "area": 1055}, {"id": 2697519, "category_id": 1, "iscrowd": 0, "bbox": [294, 171, 47, 54], "area": 1546}, {"id": 2567212, "category_id": 1, "iscrowd": 0, "bbox": [82, 106, 30, 100], "area": 1793}, {"id": 2567726, "category_id": 1, "iscrowd": 0, "bbox": [25, 127, 23, 49], "area": 807}, {"id": 2700356, "category_id": 1, "iscrowd": 0, "bbox": [0, 160, 40, 391], "area": 4116}, {"id": 4085836, "category_id": 64, "iscrowd": 0, "bbox": [23, 211, 79, 80], "area": 3735}, {"id": 4679003, "category_id": 64, "iscrowd": 0, "bbox": [300, 250, 50, 76], "area": 1958}, {"id": 6128287, "category_id": 70, "iscrowd": 0, "bbox": [134, 440, 122, 169], "area": 13534}, {"id": 4949872, "category_id": 92, "iscrowd": 0, "bbox": [0, 31, 327, 191], "area": 14622}, {"id": 10723741, "category_id": 166, "iscrowd": 0, "bbox": [31, 0, 394, 229], "area": 42135}, {"id": 1650211, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 162, 63], "area": 7533}, {"id": 6183257, "category_id": 189, "iscrowd": 0, "bbox": [351, 160, 74, 97], "area": 4228}, {"id": 3697511, "category_id": 193, "iscrowd": 0, "bbox": [0, 212, 425, 428], "area": 107504}, {"id": 14209486, "category_id": 195, "iscrowd": 0, "bbox": [90, 112, 186, 219], "area": 32789}], "file_name": "000000110042.png", "image_id": 110042}, {"segments_info": [{"id": 3954543, "category_id": 24, "iscrowd": 0, "bbox": [61, 149, 54, 35], "area": 971}, {"id": 6920627, "category_id": 24, "iscrowd": 0, "bbox": [532, 180, 52, 68], "area": 1601}, {"id": 5469064, "category_id": 24, "iscrowd": 0, "bbox": [160, 133, 157, 132], "area": 8164}, {"id": 5009290, "category_id": 24, "iscrowd": 0, "bbox": [2, 132, 175, 194], "area": 15146}, {"id": 6326176, "category_id": 24, "iscrowd": 0, "bbox": [544, 160, 80, 94], "area": 3504}, {"id": 14734534, "category_id": 187, "iscrowd": 0, "bbox": [34, 0, 606, 37], "area": 14047}, {"id": 6517373, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 83], "area": 26861}, {"id": 5277860, "category_id": 193, "iscrowd": 0, "bbox": [0, 57, 640, 287], "area": 135875}, {"id": 3890548, "category_id": 194, "iscrowd": 0, "bbox": [0, 263, 543, 81], "area": 12644}], "file_name": "000000110211.png", "image_id": 110211}, {"segments_info": [{"id": 1118236, "category_id": 10, "iscrowd": 0, "bbox": [426, 86, 69, 147], "area": 9407}, {"id": 990739, "category_id": 184, "iscrowd": 0, "bbox": [398, 0, 242, 387], "area": 50187}, {"id": 16645112, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 495, 278], "area": 117357}, {"id": 1792559, "category_id": 193, "iscrowd": 0, "bbox": [0, 269, 640, 149], "area": 74899}], "file_name": "000000110282.png", "image_id": 110282}, {"segments_info": [{"id": 5392703, "category_id": 5, "iscrowd": 0, "bbox": [224, 150, 201, 228], "area": 10822}, {"id": 12556650, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 262895}], "file_name": "000000110359.png", "image_id": 110359}, {"segments_info": [{"id": 3425624, "category_id": 1, "iscrowd": 0, "bbox": [147, 16, 353, 346], "area": 70492}, {"id": 2569782, "category_id": 1, "iscrowd": 0, "bbox": [2, 15, 245, 287], "area": 38480}, {"id": 6777176, "category_id": 73, "iscrowd": 0, "bbox": [308, 259, 107, 60], "area": 2153}, {"id": 5986389, "category_id": 75, "iscrowd": 0, "bbox": [11, 91, 27, 72], "area": 910}, {"id": 7964295, "category_id": 189, "iscrowd": 0, "bbox": [0, 290, 500, 85], "area": 24273}, {"id": 5265237, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 297], "area": 33893}], "file_name": "000000110449.png", "image_id": 110449}, {"segments_info": [{"id": 3825520, "category_id": 22, "iscrowd": 0, "bbox": [0, 0, 125, 308], "area": 21301}, {"id": 3231835, "category_id": 22, "iscrowd": 0, "bbox": [229, 130, 209, 213], "area": 28978}, {"id": 3561059, "category_id": 22, "iscrowd": 0, "bbox": [107, 3, 480, 348], "area": 87625}, {"id": 8692669, "category_id": 171, "iscrowd": 0, "bbox": [102, 39, 8, 30], "area": 155}, {"id": 2443838, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 190], "area": 19351}, {"id": 10734039, "category_id": 194, "iscrowd": 0, "bbox": [0, 153, 640, 274], "area": 107826}], "file_name": "000000110638.png", "image_id": 110638}, {"segments_info": [{"id": 1119003, "category_id": 1, "iscrowd": 0, "bbox": [224, 310, 22, 53], "area": 679}, {"id": 11052957, "category_id": 5, "iscrowd": 0, "bbox": [15, 1, 623, 351], "area": 78913}, {"id": 5394497, "category_id": 112, "iscrowd": 0, "bbox": [323, 254, 82, 100], "area": 3686}, {"id": 4604984, "category_id": 161, "iscrowd": 0, "bbox": [301, 285, 151, 133], "area": 10283}, {"id": 7370099, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 418], "area": 100456}], "file_name": "000000110721.png", "image_id": 110721}, {"segments_info": [{"id": 5926541, "category_id": 1, "iscrowd": 0, "bbox": [186, 272, 48, 111], "area": 1606}, {"id": 11122370, "category_id": 6, "iscrowd": 0, "bbox": [203, 274, 84, 113], "area": 6826}, {"id": 3423051, "category_id": 8, "iscrowd": 0, "bbox": [0, 233, 273, 187], "area": 33431}, {"id": 10988716, "category_id": 149, "iscrowd": 0, "bbox": [0, 371, 433, 269], "area": 100834}, {"id": 15911840, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 107, 210], "area": 20540}, {"id": 4866627, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 433, 427], "area": 109802}], "file_name": "000000110784.png", "image_id": 110784}, {"segments_info": [{"id": 4806446, "category_id": 51, "iscrowd": 0, "bbox": [17, 348, 64, 62], "area": 1736}, {"id": 2639891, "category_id": 70, "iscrowd": 0, "bbox": [376, 447, 237, 179], "area": 26479}, {"id": 12503738, "category_id": 81, "iscrowd": 0, "bbox": [29, 351, 284, 131], "area": 26666}, {"id": 4345396, "category_id": 133, "iscrowd": 0, "bbox": [19, 18, 268, 232], "area": 50465}, {"id": 8627596, "category_id": 199, "iscrowd": 0, "bbox": [19, 0, 349, 558], "area": 59704}], "file_name": "000000110884.png", "image_id": 110884}, {"segments_info": [{"id": 1379852, "category_id": 23, "iscrowd": 0, "bbox": [85, 9, 425, 425], "area": 128132}, {"id": 3623491, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 487], "area": 183150}], "file_name": "000000110972.png", "image_id": 110972}, {"segments_info": [{"id": 669545, "category_id": 1, "iscrowd": 0, "bbox": [114, 134, 157, 177], "area": 19462}, {"id": 1252133, "category_id": 47, "iscrowd": 0, "bbox": [274, 353, 85, 121], "area": 7950}, {"id": 463130, "category_id": 48, "iscrowd": 0, "bbox": [84, 511, 63, 82], "area": 473}, {"id": 199447, "category_id": 49, "iscrowd": 0, "bbox": [99, 503, 110, 79], "area": 1706}, {"id": 265237, "category_id": 50, "iscrowd": 0, "bbox": [90, 534, 49, 51], "area": 734}, {"id": 134955, "category_id": 51, "iscrowd": 0, "bbox": [36, 405, 216, 74], "area": 6694}, {"id": 419212, "category_id": 53, "iscrowd": 0, "bbox": [91, 316, 63, 51], "area": 1486}, {"id": 78669, "category_id": 53, "iscrowd": 0, "bbox": [199, 440, 84, 89], "area": 5898}, {"id": 265019, "category_id": 53, "iscrowd": 0, "bbox": [239, 421, 62, 51], "area": 1521}, {"id": 212359, "category_id": 55, "iscrowd": 0, "bbox": [131, 384, 76, 55], "area": 2807}, {"id": 73550, "category_id": 55, "iscrowd": 0, "bbox": [280, 458, 73, 63], "area": 3624}, {"id": 468562, "category_id": 122, "iscrowd": 0, "bbox": [32, 338, 212, 101], "area": 12045}, {"id": 395540, "category_id": 189, "iscrowd": 0, "bbox": [0, 610, 359, 30], "area": 8210}, {"id": 132104, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 359, 421], "area": 25030}], "file_name": "000000110999.png", "image_id": 110999}, {"segments_info": [{"id": 9668218, "category_id": 3, "iscrowd": 0, "bbox": [252, 3, 173, 138], "area": 15789}, {"id": 3682858, "category_id": 79, "iscrowd": 0, "bbox": [43, 18, 358, 616], "area": 179726}, {"id": 2372699, "category_id": 100, "iscrowd": 0, "bbox": [0, 549, 69, 91], "area": 4945}, {"id": 1652502, "category_id": 184, "iscrowd": 0, "bbox": [111, 0, 121, 36], "area": 1969}, {"id": 6644319, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 425, 244], "area": 20236}, {"id": 2173218, "category_id": 194, "iscrowd": 0, "bbox": [89, 0, 64, 27], "area": 869}, {"id": 4609102, "category_id": 197, "iscrowd": 0, "bbox": [159, 0, 49, 18], "area": 615}], "file_name": "000000111036.png", "image_id": 111036}, {"segments_info": [{"id": 854037, "category_id": 1, "iscrowd": 0, "bbox": [437, 88, 28, 35], "area": 544}, {"id": 1973553, "category_id": 1, "iscrowd": 0, "bbox": [400, 92, 51, 46], "area": 669}, {"id": 2563111, "category_id": 1, "iscrowd": 0, "bbox": [340, 250, 29, 24], "area": 280}, {"id": 2567237, "category_id": 1, "iscrowd": 0, "bbox": [104, 226, 16, 17], "area": 147}, {"id": 3023142, "category_id": 3, "iscrowd": 0, "bbox": [124, 241, 47, 43], "area": 1446}, {"id": 3420988, "category_id": 3, "iscrowd": 0, "bbox": [188, 178, 60, 48], "area": 1719}, {"id": 5130059, "category_id": 3, "iscrowd": 0, "bbox": [73, 254, 26, 30], "area": 572}, {"id": 6446691, "category_id": 3, "iscrowd": 0, "bbox": [151, 192, 38, 33], "area": 912}, {"id": 5918542, "category_id": 3, "iscrowd": 0, "bbox": [212, 224, 87, 59], "area": 3835}, {"id": 5920866, "category_id": 3, "iscrowd": 0, "bbox": [127, 201, 29, 31], "area": 646}, {"id": 6973549, "category_id": 3, "iscrowd": 0, "bbox": [165, 228, 59, 54], "area": 2179}, {"id": 2237499, "category_id": 3, "iscrowd": 0, "bbox": [326, 140, 131, 72], "area": 6474}, {"id": 722981, "category_id": 3, "iscrowd": 0, "bbox": [98, 250, 31, 34], "area": 773}, {"id": 2037016, "category_id": 3, "iscrowd": 0, "bbox": [447, 207, 53, 105], "area": 3826}, {"id": 5198690, "category_id": 3, "iscrowd": 0, "bbox": [227, 162, 103, 58], "area": 3679}, {"id": 4273718, "category_id": 3, "iscrowd": 0, "bbox": [300, 207, 156, 103], "area": 11270}, {"id": 12368055, "category_id": 9, "iscrowd": 0, "bbox": [0, 2, 500, 213], "area": 66418}, {"id": 2302774, "category_id": 144, "iscrowd": 0, "bbox": [90, 71, 410, 164], "area": 11122}, {"id": 1313558, "category_id": 149, "iscrowd": 0, "bbox": [24, 118, 476, 218], "area": 33139}, {"id": 7368836, "category_id": 155, "iscrowd": 0, "bbox": [0, 194, 57, 54], "area": 1686}, {"id": 11770498, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 92, 102], "area": 1866}, {"id": 4410723, "category_id": 191, "iscrowd": 0, "bbox": [77, 61, 423, 159], "area": 4346}, {"id": 5066079, "category_id": 197, "iscrowd": 0, "bbox": [0, 233, 20, 31], "area": 402}], "file_name": "000000111086.png", "image_id": 111086}, {"segments_info": [{"id": 7633279, "category_id": 85, "iscrowd": 0, "bbox": [229, 153, 70, 70], "area": 3732}, {"id": 3091493, "category_id": 85, "iscrowd": 0, "bbox": [174, 172, 30, 65], "area": 1185}, {"id": 1777446, "category_id": 128, "iscrowd": 0, "bbox": [37, 613, 258, 27], "area": 3846}, {"id": 7631474, "category_id": 151, "iscrowd": 0, "bbox": [0, 47, 480, 593], "area": 113268}, {"id": 6252416, "category_id": 171, "iscrowd": 0, "bbox": [0, 521, 15, 20], "area": 251}, {"id": 14130273, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 534], "area": 137224}, {"id": 4541812, "category_id": 197, "iscrowd": 0, "bbox": [337, 268, 143, 372], "area": 47604}], "file_name": "000000111179.png", "image_id": 111179}, {"segments_info": [{"id": 4471348, "category_id": 1, "iscrowd": 0, "bbox": [156, 351, 96, 214], "area": 9069}, {"id": 3682604, "category_id": 1, "iscrowd": 0, "bbox": [102, 30, 115, 264], "area": 13683}, {"id": 6318185, "category_id": 15, "iscrowd": 0, "bbox": [183, 161, 89, 48], "area": 3592}, {"id": 5988708, "category_id": 15, "iscrowd": 0, "bbox": [266, 157, 90, 66], "area": 4431}, {"id": 5592919, "category_id": 41, "iscrowd": 0, "bbox": [157, 552, 72, 28], "area": 649}, {"id": 3620167, "category_id": 41, "iscrowd": 0, "bbox": [126, 269, 48, 18], "area": 319}, {"id": 922130, "category_id": 151, "iscrowd": 0, "bbox": [115, 0, 363, 56], "area": 11373}, {"id": 3028019, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 478, 211], "area": 31384}, {"id": 14017502, "category_id": 181, "iscrowd": 0, "bbox": [288, 50, 24, 40], "area": 791}, {"id": 9091230, "category_id": 184, "iscrowd": 0, "bbox": [0, 320, 478, 320], "area": 38043}, {"id": 7764346, "category_id": 190, "iscrowd": 0, "bbox": [0, 118, 478, 522], "area": 50446}, {"id": 2237474, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 478, 562], "area": 93342}], "file_name": "000000111207.png", "image_id": 111207}, {"segments_info": [{"id": 6318736, "category_id": 1, "iscrowd": 0, "bbox": [351, 83, 124, 271], "area": 16929}, {"id": 11380379, "category_id": 65, "iscrowd": 0, "bbox": [429, 52, 211, 370], "area": 55087}, {"id": 1249553, "category_id": 73, "iscrowd": 0, "bbox": [506, 353, 134, 76], "area": 9010}, {"id": 7631207, "category_id": 93, "iscrowd": 0, "bbox": [0, 70, 640, 359], "area": 138260}, {"id": 4084542, "category_id": 109, "iscrowd": 0, "bbox": [45, 0, 260, 70], "area": 12684}, {"id": 9010272, "category_id": 141, "iscrowd": 0, "bbox": [634, 149, 6, 193], "area": 755}, {"id": 4087160, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 123], "area": 39395}, {"id": 4616527, "category_id": 184, "iscrowd": 0, "bbox": [135, 0, 69, 39], "area": 1940}], "file_name": "000000111609.png", "image_id": 111609}, {"segments_info": [{"id": 3709412, "category_id": 70, "iscrowd": 0, "bbox": [449, 293, 191, 132], "area": 15768}, {"id": 2725869, "category_id": 81, "iscrowd": 0, "bbox": [40, 234, 118, 68], "area": 5808}, {"id": 3318258, "category_id": 81, "iscrowd": 0, "bbox": [221, 195, 70, 42], "area": 2220}, {"id": 342916, "category_id": 86, "iscrowd": 0, "bbox": [148, 217, 45, 56], "area": 2035}, {"id": 1340869, "category_id": 119, "iscrowd": 0, "bbox": [141, 155, 60, 68], "area": 2118}, {"id": 1604558, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 244, 174], "area": 38049}, {"id": 4238325, "category_id": 168, "iscrowd": 0, "bbox": [0, 200, 322, 132], "area": 2896}, {"id": 2001646, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 60928}, {"id": 1209554, "category_id": 186, "iscrowd": 0, "bbox": [333, 0, 103, 18], "area": 1479}, {"id": 2527985, "category_id": 190, "iscrowd": 0, "bbox": [0, 270, 496, 155], "area": 30311}], "file_name": "000000111951.png", "image_id": 111951}, {"segments_info": [{"id": 6773327, "category_id": 1, "iscrowd": 0, "bbox": [212, 0, 222, 299], "area": 32031}, {"id": 2105376, "category_id": 33, "iscrowd": 0, "bbox": [217, 284, 165, 80], "area": 9361}, {"id": 263431, "category_id": 130, "iscrowd": 0, "bbox": [576, 0, 64, 54], "area": 902}, {"id": 4869724, "category_id": 191, "iscrowd": 0, "bbox": [0, 52, 640, 428], "area": 202054}, {"id": 3753035, "category_id": 199, "iscrowd": 0, "bbox": [0, 22, 504, 195], "area": 38514}], "file_name": "000000112110.png", "image_id": 112110}, {"segments_info": [{"id": 1710618, "category_id": 1, "iscrowd": 0, "bbox": [129, 216, 190, 264], "area": 32128}, {"id": 8289918, "category_id": 43, "iscrowd": 0, "bbox": [58, 69, 187, 134], "area": 5862}, {"id": 4934475, "category_id": 44, "iscrowd": 0, "bbox": [380, 138, 34, 72], "area": 642}, {"id": 10461087, "category_id": 44, "iscrowd": 0, "bbox": [241, 134, 15, 74], "area": 780}, {"id": 3618615, "category_id": 44, "iscrowd": 0, "bbox": [363, 142, 19, 66], "area": 572}, {"id": 3026478, "category_id": 44, "iscrowd": 0, "bbox": [320, 164, 18, 44], "area": 705}, {"id": 4079166, "category_id": 44, "iscrowd": 0, "bbox": [306, 161, 22, 25], "area": 250}, {"id": 3487029, "category_id": 44, "iscrowd": 0, "bbox": [329, 132, 43, 77], "area": 2286}, {"id": 1710609, "category_id": 44, "iscrowd": 0, "bbox": [265, 148, 20, 63], "area": 913}, {"id": 2302755, "category_id": 156, "iscrowd": 0, "bbox": [64, 173, 317, 59], "area": 5523}, {"id": 8750469, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 243747}], "file_name": "000000112298.png", "image_id": 112298}, {"segments_info": [{"id": 11120300, "category_id": 15, "iscrowd": 0, "bbox": [0, 381, 95, 99], "area": 4705}, {"id": 2520152, "category_id": 52, "iscrowd": 0, "bbox": [234, 344, 91, 68], "area": 4718}, {"id": 6205593, "category_id": 52, "iscrowd": 0, "bbox": [216, 396, 51, 31], "area": 829}, {"id": 2717026, "category_id": 52, "iscrowd": 0, "bbox": [331, 365, 62, 39], "area": 1395}, {"id": 4757381, "category_id": 52, "iscrowd": 0, "bbox": [318, 330, 42, 23], "area": 581}, {"id": 4036223, "category_id": 52, "iscrowd": 0, "bbox": [320, 345, 38, 23], "area": 326}, {"id": 9750464, "category_id": 52, "iscrowd": 0, "bbox": [210, 323, 82, 40], "area": 1736}, {"id": 14541533, "category_id": 62, "iscrowd": 0, "bbox": [132, 145, 86, 41], "area": 1297}, {"id": 8556429, "category_id": 67, "iscrowd": 0, "bbox": [20, 254, 468, 212], "area": 36843}, {"id": 9083287, "category_id": 154, "iscrowd": 0, "bbox": [460, 293, 180, 143], "area": 16624}, {"id": 15261878, "category_id": 155, "iscrowd": 0, "bbox": [0, 122, 283, 65], "area": 9093}, {"id": 4742998, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 126935}, {"id": 15461346, "category_id": 187, "iscrowd": 0, "bbox": [57, 84, 200, 45], "area": 2091}, {"id": 10003100, "category_id": 189, "iscrowd": 0, "bbox": [45, 305, 281, 175], "area": 5155}, {"id": 4023118, "category_id": 193, "iscrowd": 0, "bbox": [0, 159, 640, 321], "area": 82532}], "file_name": "000000112378.png", "image_id": 112378}, {"segments_info": [{"id": 6645865, "category_id": 33, "iscrowd": 0, "bbox": [115, 184, 233, 385], "area": 69460}, {"id": 5596783, "category_id": 63, "iscrowd": 0, "bbox": [267, 173, 156, 299], "area": 26520}, {"id": 4745344, "category_id": 118, "iscrowd": 0, "bbox": [0, 383, 423, 257], "area": 68828}, {"id": 2435114, "category_id": 189, "iscrowd": 0, "bbox": [10, 287, 112, 121], "area": 9411}, {"id": 9939381, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 423, 389], "area": 95143}], "file_name": "000000112626.png", "image_id": 112626}, {"segments_info": [{"id": 3094599, "category_id": 25, "iscrowd": 0, "bbox": [578, 194, 62, 113], "area": 2084}, {"id": 3752016, "category_id": 25, "iscrowd": 0, "bbox": [4, 25, 573, 418], "area": 82307}, {"id": 7632490, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 594, 443], "area": 61026}, {"id": 4079166, "category_id": 185, "iscrowd": 0, "bbox": [0, 179, 614, 128], "area": 11694}, {"id": 16315864, "category_id": 187, "iscrowd": 0, "bbox": [471, 0, 169, 102], "area": 8797}, {"id": 10994901, "category_id": 194, "iscrowd": 0, "bbox": [0, 275, 640, 168], "area": 58700}, {"id": 4143675, "category_id": 197, "iscrowd": 0, "bbox": [573, 18, 67, 265], "area": 9356}, {"id": 4540241, "category_id": 198, "iscrowd": 0, "bbox": [68, 144, 412, 213], "area": 48861}], "file_name": "000000112634.png", "image_id": 112634}, {"segments_info": [{"id": 3226693, "category_id": 17, "iscrowd": 0, "bbox": [67, 139, 441, 162], "area": 53918}, {"id": 5131078, "category_id": 73, "iscrowd": 0, "bbox": [0, 47, 96, 181], "area": 16076}, {"id": 7109506, "category_id": 84, "iscrowd": 0, "bbox": [334, 96, 37, 54], "area": 1228}, {"id": 2567249, "category_id": 84, "iscrowd": 0, "bbox": [624, 129, 16, 64], "area": 385}, {"id": 1646912, "category_id": 93, "iscrowd": 0, "bbox": [418, 119, 175, 114], "area": 9273}, {"id": 1648438, "category_id": 112, "iscrowd": 0, "bbox": [328, 0, 86, 118], "area": 8306}, {"id": 4411481, "category_id": 141, "iscrowd": 0, "bbox": [229, 101, 55, 38], "area": 1002}, {"id": 2501682, "category_id": 156, "iscrowd": 0, "bbox": [540, 0, 100, 239], "area": 13743}, {"id": 988703, "category_id": 188, "iscrowd": 0, "bbox": [92, 0, 467, 158], "area": 21841}, {"id": 12897481, "category_id": 189, "iscrowd": 0, "bbox": [0, 211, 640, 148], "area": 47180}, {"id": 13092808, "category_id": 195, "iscrowd": 0, "bbox": [100, 0, 540, 359], "area": 16491}, {"id": 4869712, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 559, 166], "area": 30473}], "file_name": "000000112798.png", "image_id": 112798}, {"segments_info": [{"id": 8029907, "category_id": 1, "iscrowd": 0, "bbox": [4, 76, 399, 403], "area": 43622}, {"id": 5461090, "category_id": 77, "iscrowd": 0, "bbox": [59, 65, 368, 498], "area": 93635}, {"id": 2965086, "category_id": 100, "iscrowd": 0, "bbox": [0, 15, 129, 261], "area": 13615}, {"id": 2040620, "category_id": 190, "iscrowd": 0, "bbox": [328, 0, 152, 388], "area": 27071}, {"id": 4082282, "category_id": 200, "iscrowd": 0, "bbox": [0, 380, 380, 260], "area": 33227}], "file_name": "000000112997.png", "image_id": 112997}, {"segments_info": [{"id": 4407610, "category_id": 9, "iscrowd": 0, "bbox": [35, 198, 411, 184], "area": 49908}, {"id": 6440517, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 19, 13], "area": 212}, {"id": 2041127, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 640, 414], "area": 137576}, {"id": 3420717, "category_id": 178, "iscrowd": 0, "bbox": [0, 180, 640, 300], "area": 92353}, {"id": 7369590, "category_id": 181, "iscrowd": 0, "bbox": [423, 0, 43, 73], "area": 1774}, {"id": 16711421, "category_id": 187, "iscrowd": 0, "bbox": [0, 31, 182, 168], "area": 23435}, {"id": 14738651, "category_id": 197, "iscrowd": 0, "bbox": [162, 139, 36, 61], "area": 1719}], "file_name": "000000113051.png", "image_id": 113051}, {"segments_info": [{"id": 10925785, "category_id": 1, "iscrowd": 0, "bbox": [0, 365, 183, 110], "area": 10326}, {"id": 8489600, "category_id": 3, "iscrowd": 0, "bbox": [61, 200, 29, 11], "area": 193}, {"id": 3883084, "category_id": 19, "iscrowd": 0, "bbox": [73, 214, 61, 46], "area": 1381}, {"id": 5341399, "category_id": 57, "iscrowd": 0, "bbox": [119, 347, 271, 116], "area": 14648}, {"id": 2767664, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 264], "area": 94818}, {"id": 10596012, "category_id": 185, "iscrowd": 0, "bbox": [0, 180, 640, 128], "area": 16255}, {"id": 14603207, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 116], "area": 24198}, {"id": 5932926, "category_id": 193, "iscrowd": 0, "bbox": [0, 220, 640, 260], "area": 87043}, {"id": 6130133, "category_id": 196, "iscrowd": 0, "bbox": [116, 368, 154, 101], "area": 860}, {"id": 4212049, "category_id": 197, "iscrowd": 0, "bbox": [483, 157, 157, 84], "area": 4885}], "file_name": "000000113235.png", "image_id": 113235}, {"segments_info": [{"id": 5859440, "category_id": 24, "iscrowd": 0, "bbox": [366, 175, 116, 142], "area": 5778}, {"id": 8159621, "category_id": 24, "iscrowd": 0, "bbox": [261, 159, 140, 194], "area": 9962}, {"id": 7042162, "category_id": 24, "iscrowd": 0, "bbox": [3, 151, 265, 176], "area": 16219}, {"id": 10134433, "category_id": 194, "iscrowd": 0, "bbox": [17, 153, 623, 327], "area": 83850}], "file_name": "000000113354.png", "image_id": 113354}, {"segments_info": [{"id": 6984348, "category_id": 65, "iscrowd": 0, "bbox": [0, 0, 638, 442], "area": 203101}, {"id": 11844035, "category_id": 88, "iscrowd": 0, "bbox": [48, 98, 243, 216], "area": 29049}, {"id": 1257274, "category_id": 88, "iscrowd": 0, "bbox": [423, 156, 142, 185], "area": 14837}, {"id": 2584723, "category_id": 88, "iscrowd": 0, "bbox": [249, 97, 205, 236], "area": 32728}, {"id": 9742253, "category_id": 93, "iscrowd": 0, "bbox": [0, 160, 640, 291], "area": 6976}, {"id": 4284776, "category_id": 141, "iscrowd": 0, "bbox": [0, 0, 459, 4], "area": 1044}], "file_name": "000000113403.png", "image_id": 113403}, {"segments_info": [{"id": 7114133, "category_id": 51, "iscrowd": 0, "bbox": [366, 189, 203, 270], "area": 13159}, {"id": 2729893, "category_id": 52, "iscrowd": 0, "bbox": [369, 68, 267, 294], "area": 27602}, {"id": 8304325, "category_id": 53, "iscrowd": 0, "bbox": [391, 208, 135, 69], "area": 6047}, {"id": 2510989, "category_id": 53, "iscrowd": 0, "bbox": [377, 264, 167, 188], "area": 26156}, {"id": 1468297, "category_id": 59, "iscrowd": 0, "bbox": [82, 129, 213, 120], "area": 14645}, {"id": 2322577, "category_id": 59, "iscrowd": 0, "bbox": [124, 80, 203, 117], "area": 15317}, {"id": 1876118, "category_id": 122, "iscrowd": 0, "bbox": [370, 71, 26, 15], "area": 100}, {"id": 11453889, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 85665}, {"id": 2588000, "category_id": 196, "iscrowd": 0, "bbox": [78, 246, 286, 197], "area": 43920}], "file_name": "000000113589.png", "image_id": 113589}, {"segments_info": [{"id": 1452606, "category_id": 1, "iscrowd": 0, "bbox": [524, 108, 52, 71], "area": 2057}, {"id": 1715285, "category_id": 1, "iscrowd": 0, "bbox": [1, 0, 118, 294], "area": 19683}, {"id": 2246247, "category_id": 1, "iscrowd": 0, "bbox": [192, 56, 212, 198], "area": 22944}, {"id": 3823472, "category_id": 1, "iscrowd": 0, "bbox": [572, 116, 68, 105], "area": 1908}, {"id": 1580068, "category_id": 1, "iscrowd": 0, "bbox": [379, 19, 212, 300], "area": 34379}, {"id": 5796741, "category_id": 44, "iscrowd": 0, "bbox": [82, 116, 36, 100], "area": 2655}, {"id": 3954554, "category_id": 47, "iscrowd": 0, "bbox": [194, 202, 64, 123], "area": 6243}, {"id": 4025745, "category_id": 47, "iscrowd": 0, "bbox": [147, 170, 29, 49], "area": 688}, {"id": 3100524, "category_id": 47, "iscrowd": 0, "bbox": [280, 214, 45, 71], "area": 2109}, {"id": 5666188, "category_id": 48, "iscrowd": 0, "bbox": [67, 344, 157, 82], "area": 2634}, {"id": 5996194, "category_id": 48, "iscrowd": 0, "bbox": [212, 82, 49, 42], "area": 143}, {"id": 4414056, "category_id": 48, "iscrowd": 0, "bbox": [398, 278, 94, 11], "area": 354}, {"id": 1915221, "category_id": 49, "iscrowd": 0, "bbox": [323, 246, 17, 26], "area": 197}, {"id": 5927817, "category_id": 49, "iscrowd": 0, "bbox": [0, 342, 117, 70], "area": 1505}, {"id": 3763098, "category_id": 59, "iscrowd": 0, "bbox": [98, 325, 124, 58], "area": 4370}, {"id": 3435938, "category_id": 59, "iscrowd": 0, "bbox": [328, 253, 81, 33], "area": 1316}, {"id": 2516645, "category_id": 59, "iscrowd": 0, "bbox": [274, 274, 280, 110], "area": 16343}, {"id": 1787004, "category_id": 59, "iscrowd": 0, "bbox": [62, 216, 134, 53], "area": 6148}, {"id": 395794, "category_id": 62, "iscrowd": 0, "bbox": [584, 212, 19, 50], "area": 515}, {"id": 3165260, "category_id": 67, "iscrowd": 0, "bbox": [591, 230, 49, 56], "area": 2222}, {"id": 7376804, "category_id": 67, "iscrowd": 0, "bbox": [1, 120, 607, 301], "area": 60930}, {"id": 8888502, "category_id": 199, "iscrowd": 0, "bbox": [47, 0, 593, 232], "area": 67595}], "file_name": "000000113720.png", "image_id": 113720}, {"segments_info": [{"id": 12826795, "category_id": 85, "iscrowd": 0, "bbox": [328, 109, 45, 24], "area": 826}, {"id": 4407617, "category_id": 181, "iscrowd": 0, "bbox": [0, 117, 633, 523], "area": 27772}, {"id": 16445406, "category_id": 187, "iscrowd": 0, "bbox": [162, 0, 324, 441], "area": 59260}, {"id": 3882314, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 633, 640], "area": 317241}], "file_name": "000000113867.png", "image_id": 113867}, {"segments_info": [{"id": 2631213, "category_id": 1, "iscrowd": 0, "bbox": [171, 85, 161, 246], "area": 16902}, {"id": 4809357, "category_id": 1, "iscrowd": 0, "bbox": [286, 0, 30, 59], "area": 742}, {"id": 5198445, "category_id": 1, "iscrowd": 0, "bbox": [352, 158, 17, 81], "area": 958}, {"id": 4543853, "category_id": 1, "iscrowd": 0, "bbox": [79, 14, 118, 130], "area": 4479}, {"id": 3487004, "category_id": 1, "iscrowd": 0, "bbox": [55, 161, 86, 270], "area": 5288}, {"id": 6977927, "category_id": 1, "iscrowd": 0, "bbox": [288, 151, 42, 88], "area": 2407}, {"id": 5464171, "category_id": 27, "iscrowd": 0, "bbox": [145, 127, 114, 112], "area": 4863}, {"id": 1314329, "category_id": 33, "iscrowd": 0, "bbox": [181, 398, 103, 241], "area": 20955}, {"id": 1908256, "category_id": 33, "iscrowd": 0, "bbox": [126, 217, 61, 113], "area": 3940}, {"id": 1117976, "category_id": 33, "iscrowd": 0, "bbox": [143, 348, 137, 262], "area": 11514}, {"id": 1118740, "category_id": 33, "iscrowd": 0, "bbox": [130, 329, 120, 284], "area": 6985}, {"id": 1447453, "category_id": 33, "iscrowd": 0, "bbox": [110, 288, 53, 145], "area": 2378}, {"id": 6841189, "category_id": 62, "iscrowd": 0, "bbox": [282, 376, 46, 160], "area": 4665}, {"id": 4078396, "category_id": 62, "iscrowd": 0, "bbox": [0, 390, 46, 109], "area": 3794}, {"id": 4015177, "category_id": 62, "iscrowd": 0, "bbox": [55, 271, 55, 245], "area": 10880}, {"id": 8029854, "category_id": 77, "iscrowd": 0, "bbox": [300, 196, 7, 10], "area": 51}, {"id": 5397602, "category_id": 190, "iscrowd": 0, "bbox": [15, 413, 191, 227], "area": 16254}, {"id": 8229289, "category_id": 196, "iscrowd": 0, "bbox": [223, 217, 37, 28], "area": 559}, {"id": 5133917, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 356, 640], "area": 61066}], "file_name": "000000114049.png", "image_id": 114049}, {"segments_info": [{"id": 4938073, "category_id": 3, "iscrowd": 0, "bbox": [148, 139, 386, 195], "area": 35092}, {"id": 6120031, "category_id": 4, "iscrowd": 0, "bbox": [119, 238, 325, 157], "area": 31553}, {"id": 8947570, "category_id": 5, "iscrowd": 0, "bbox": [301, 1, 339, 175], "area": 21611}, {"id": 11974064, "category_id": 190, "iscrowd": 0, "bbox": [0, 268, 640, 135], "area": 42896}, {"id": 7041385, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 320], "area": 106634}], "file_name": "000000114770.png", "image_id": 114770}, {"segments_info": [{"id": 3446965, "category_id": 52, "iscrowd": 0, "bbox": [202, 31, 342, 330], "area": 40648}, {"id": 10990263, "category_id": 67, "iscrowd": 0, "bbox": [3, 4, 637, 417], "area": 223548}, {"id": 12237240, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 8787}], "file_name": "000000114871.png", "image_id": 114871}, {"segments_info": [{"id": 4148039, "category_id": 1, "iscrowd": 0, "bbox": [11, 102, 17, 66], "area": 735}, {"id": 3094321, "category_id": 1, "iscrowd": 0, "bbox": [106, 119, 28, 48], "area": 693}, {"id": 7162924, "category_id": 1, "iscrowd": 0, "bbox": [29, 109, 15, 58], "area": 606}, {"id": 3487802, "category_id": 1, "iscrowd": 0, "bbox": [159, 108, 15, 47], "area": 425}, {"id": 2695795, "category_id": 1, "iscrowd": 0, "bbox": [296, 99, 24, 60], "area": 808}, {"id": 5991020, "category_id": 1, "iscrowd": 0, "bbox": [337, 101, 16, 38], "area": 332}, {"id": 9934517, "category_id": 1, "iscrowd": 0, "bbox": [326, 103, 22, 59], "area": 477}, {"id": 7567228, "category_id": 1, "iscrowd": 0, "bbox": [183, 107, 19, 53], "area": 356}, {"id": 2565151, "category_id": 1, "iscrowd": 0, "bbox": [50, 105, 19, 65], "area": 786}, {"id": 5005157, "category_id": 1, "iscrowd": 0, "bbox": [320, 86, 167, 239], "area": 19600}, {"id": 4479845, "category_id": 1, "iscrowd": 0, "bbox": [371, 105, 20, 47], "area": 337}, {"id": 1319713, "category_id": 1, "iscrowd": 0, "bbox": [370, 87, 7, 16], "area": 67}, {"id": 4290915, "category_id": 1, "iscrowd": 0, "bbox": [472, 102, 21, 62], "area": 672}, {"id": 4480865, "category_id": 6, "iscrowd": 0, "bbox": [260, 78, 37, 44], "area": 1253}, {"id": 5856606, "category_id": 6, "iscrowd": 0, "bbox": [290, 83, 27, 25], "area": 479}, {"id": 7897209, "category_id": 6, "iscrowd": 0, "bbox": [87, 61, 98, 84], "area": 4999}, {"id": 7436399, "category_id": 6, "iscrowd": 0, "bbox": [179, 69, 46, 65], "area": 2100}, {"id": 8423036, "category_id": 6, "iscrowd": 0, "bbox": [1, 51, 121, 100], "area": 7252}, {"id": 9080972, "category_id": 6, "iscrowd": 0, "bbox": [218, 73, 52, 58], "area": 2151}, {"id": 6189167, "category_id": 27, "iscrowd": 0, "bbox": [169, 121, 7, 11], "area": 59}, {"id": 7891508, "category_id": 27, "iscrowd": 0, "bbox": [194, 114, 13, 19], "area": 150}, {"id": 2237987, "category_id": 31, "iscrowd": 0, "bbox": [372, 114, 17, 15], "area": 118}, {"id": 329998, "category_id": 31, "iscrowd": 0, "bbox": [463, 236, 31, 45], "area": 805}, {"id": 4146511, "category_id": 31, "iscrowd": 0, "bbox": [329, 139, 22, 18], "area": 263}, {"id": 1840497, "category_id": 33, "iscrowd": 0, "bbox": [344, 139, 20, 19], "area": 188}, {"id": 3222562, "category_id": 33, "iscrowd": 0, "bbox": [199, 134, 12, 20], "area": 188}, {"id": 2437944, "category_id": 33, "iscrowd": 0, "bbox": [175, 138, 22, 21], "area": 379}, {"id": 3553078, "category_id": 33, "iscrowd": 0, "bbox": [348, 128, 21, 22], "area": 249}, {"id": 2369053, "category_id": 33, "iscrowd": 0, "bbox": [41, 139, 21, 31], "area": 361}, {"id": 1250324, "category_id": 33, "iscrowd": 0, "bbox": [114, 150, 24, 16], "area": 188}, {"id": 1313669, "category_id": 33, "iscrowd": 0, "bbox": [74, 141, 26, 26], "area": 371}, {"id": 1908000, "category_id": 33, "iscrowd": 0, "bbox": [383, 131, 15, 17], "area": 145}, {"id": 2366491, "category_id": 33, "iscrowd": 0, "bbox": [316, 135, 14, 20], "area": 132}, {"id": 10726830, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 488, 93], "area": 31022}, {"id": 11318960, "category_id": 190, "iscrowd": 0, "bbox": [0, 100, 500, 229], "area": 73332}, {"id": 4411217, "category_id": 197, "iscrowd": 0, "bbox": [295, 73, 82, 49], "area": 1868}], "file_name": "000000114884.png", "image_id": 114884}, {"segments_info": [{"id": 7896725, "category_id": 1, "iscrowd": 0, "bbox": [34, 258, 125, 111], "area": 3251}, {"id": 7178408, "category_id": 1, "iscrowd": 0, "bbox": [151, 358, 61, 67], "area": 2582}, {"id": 10856109, "category_id": 1, "iscrowd": 0, "bbox": [243, 265, 175, 154], "area": 8542}, {"id": 11056830, "category_id": 1, "iscrowd": 0, "bbox": [271, 315, 99, 110], "area": 6704}, {"id": 5661816, "category_id": 1, "iscrowd": 0, "bbox": [507, 379, 72, 46], "area": 2710}, {"id": 7308701, "category_id": 1, "iscrowd": 0, "bbox": [347, 272, 83, 127], "area": 5223}, {"id": 4602307, "category_id": 1, "iscrowd": 0, "bbox": [0, 121, 76, 180], "area": 7073}, {"id": 6316402, "category_id": 1, "iscrowd": 0, "bbox": [34, 335, 88, 90], "area": 3616}, {"id": 10722214, "category_id": 1, "iscrowd": 0, "bbox": [42, 127, 75, 180], "area": 5520}, {"id": 8947065, "category_id": 1, "iscrowd": 0, "bbox": [126, 293, 69, 69], "area": 3068}, {"id": 5722198, "category_id": 1, "iscrowd": 0, "bbox": [316, 75, 116, 209], "area": 10205}, {"id": 7046291, "category_id": 1, "iscrowd": 0, "bbox": [517, 290, 42, 60], "area": 1667}, {"id": 5397111, "category_id": 1, "iscrowd": 0, "bbox": [80, 369, 82, 56], "area": 3269}, {"id": 7041409, "category_id": 1, "iscrowd": 1, "bbox": [0, 153, 640, 272], "area": 49967}, {"id": 10522751, "category_id": 8, "iscrowd": 0, "bbox": [1, 2, 193, 209], "area": 31890}, {"id": 4934477, "category_id": 21, "iscrowd": 0, "bbox": [193, 38, 392, 252], "area": 52309}, {"id": 7310200, "category_id": 119, "iscrowd": 0, "bbox": [581, 192, 59, 98], "area": 4573}, {"id": 1514778, "category_id": 181, "iscrowd": 0, "bbox": [207, 0, 145, 53], "area": 4378}, {"id": 7108469, "category_id": 193, "iscrowd": 0, "bbox": [490, 221, 100, 86], "area": 4950}], "file_name": "000000114907.png", "image_id": 114907}, {"segments_info": [{"id": 4937322, "category_id": 7, "iscrowd": 0, "bbox": [83, 86, 422, 258], "area": 39633}, {"id": 5857904, "category_id": 125, "iscrowd": 0, "bbox": [0, 97, 640, 330], "area": 63178}, {"id": 5659750, "category_id": 147, "iscrowd": 0, "bbox": [0, 64, 618, 363], "area": 59066}, {"id": 4343369, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 337], "area": 102477}, {"id": 15196892, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 210, 66], "area": 8115}, {"id": 14534576, "category_id": 197, "iscrowd": 0, "bbox": [80, 14, 56, 21], "area": 645}], "file_name": "000000115118.png", "image_id": 115118}, {"segments_info": [{"id": 6050644, "category_id": 1, "iscrowd": 0, "bbox": [210, 0, 80, 71], "area": 3203}, {"id": 13747629, "category_id": 1, "iscrowd": 0, "bbox": [93, 0, 58, 44], "area": 1235}, {"id": 10054959, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 27, 48], "area": 1133}, {"id": 5524794, "category_id": 27, "iscrowd": 0, "bbox": [130, 5, 110, 84], "area": 5610}, {"id": 4736820, "category_id": 27, "iscrowd": 0, "bbox": [93, 143, 127, 166], "area": 13005}, {"id": 8416348, "category_id": 27, "iscrowd": 0, "bbox": [352, 137, 146, 85], "area": 7045}, {"id": 8810831, "category_id": 31, "iscrowd": 0, "bbox": [229, 95, 74, 47], "area": 2805}, {"id": 2103829, "category_id": 33, "iscrowd": 0, "bbox": [255, 168, 310, 421], "area": 61511}, {"id": 3479824, "category_id": 33, "iscrowd": 0, "bbox": [216, 209, 126, 279], "area": 22108}, {"id": 6512214, "category_id": 33, "iscrowd": 0, "bbox": [39, 68, 89, 115], "area": 7954}, {"id": 4278922, "category_id": 62, "iscrowd": 0, "bbox": [315, 57, 25, 35], "area": 460}, {"id": 5459346, "category_id": 62, "iscrowd": 0, "bbox": [286, 46, 16, 24], "area": 264}, {"id": 3750774, "category_id": 62, "iscrowd": 0, "bbox": [424, 72, 42, 68], "area": 1429}, {"id": 6118316, "category_id": 62, "iscrowd": 0, "bbox": [152, 14, 10, 11], "area": 55}, {"id": 3552403, "category_id": 62, "iscrowd": 0, "bbox": [467, 100, 101, 89], "area": 6001}, {"id": 3221876, "category_id": 62, "iscrowd": 0, "bbox": [564, 151, 48, 58], "area": 1970}, {"id": 10467775, "category_id": 118, "iscrowd": 0, "bbox": [0, 93, 612, 519], "area": 131998}, {"id": 12045509, "category_id": 168, "iscrowd": 0, "bbox": [208, 52, 109, 90], "area": 3136}, {"id": 13025456, "category_id": 189, "iscrowd": 0, "bbox": [24, 0, 588, 398], "area": 23836}, {"id": 5792105, "category_id": 199, "iscrowd": 0, "bbox": [128, 0, 484, 188], "area": 37078}, {"id": 9470830, "category_id": 200, "iscrowd": 0, "bbox": [118, 103, 57, 61], "area": 1234}], "file_name": "000000115245.png", "image_id": 115245}, {"segments_info": [{"id": 3352883, "category_id": 1, "iscrowd": 0, "bbox": [64, 181, 90, 116], "area": 5827}, {"id": 3165311, "category_id": 1, "iscrowd": 0, "bbox": [16, 185, 63, 113], "area": 3535}, {"id": 4077378, "category_id": 1, "iscrowd": 0, "bbox": [186, 244, 430, 182], "area": 31319}, {"id": 1974305, "category_id": 1, "iscrowd": 0, "bbox": [274, 104, 59, 77], "area": 3178}, {"id": 3878705, "category_id": 1, "iscrowd": 0, "bbox": [202, 66, 71, 294], "area": 13145}, {"id": 5396574, "category_id": 47, "iscrowd": 0, "bbox": [201, 153, 14, 22], "area": 53}, {"id": 3556187, "category_id": 63, "iscrowd": 0, "bbox": [144, 178, 315, 168], "area": 26865}, {"id": 6449791, "category_id": 63, "iscrowd": 0, "bbox": [338, 223, 302, 195], "area": 16700}, {"id": 5857910, "category_id": 63, "iscrowd": 0, "bbox": [305, 199, 203, 163], "area": 10389}, {"id": 3950415, "category_id": 64, "iscrowd": 0, "bbox": [434, 82, 143, 145], "area": 13188}, {"id": 2965087, "category_id": 64, "iscrowd": 0, "bbox": [20, 274, 86, 74], "area": 4015}, {"id": 1118495, "category_id": 77, "iscrowd": 0, "bbox": [77, 189, 7, 15], "area": 60}, {"id": 8351353, "category_id": 84, "iscrowd": 0, "bbox": [81, 300, 35, 19], "area": 419}, {"id": 11116457, "category_id": 84, "iscrowd": 0, "bbox": [372, 355, 84, 52], "area": 2095}, {"id": 3883608, "category_id": 84, "iscrowd": 0, "bbox": [3, 367, 69, 26], "area": 1194}, {"id": 4346466, "category_id": 109, "iscrowd": 0, "bbox": [7, 0, 620, 253], "area": 28193}, {"id": 2172212, "category_id": 118, "iscrowd": 0, "bbox": [262, 334, 63, 37], "area": 1457}, {"id": 9345963, "category_id": 181, "iscrowd": 0, "bbox": [62, 0, 578, 271], "area": 55700}, {"id": 4016751, "category_id": 189, "iscrowd": 0, "bbox": [0, 305, 174, 121], "area": 11186}, {"id": 8688041, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 579, 242], "area": 22623}, {"id": 855573, "category_id": 200, "iscrowd": 0, "bbox": [0, 334, 201, 92], "area": 4865}], "file_name": "000000115870.png", "image_id": 115870}, {"segments_info": [{"id": 2237478, "category_id": 17, "iscrowd": 0, "bbox": [345, 4, 155, 246], "area": 22448}, {"id": 3420469, "category_id": 65, "iscrowd": 0, "bbox": [219, 167, 281, 208], "area": 34881}, {"id": 7962478, "category_id": 73, "iscrowd": 0, "bbox": [0, 34, 370, 341], "area": 85065}, {"id": 11648967, "category_id": 109, "iscrowd": 0, "bbox": [448, 0, 52, 63], "area": 2420}, {"id": 9807533, "category_id": 112, "iscrowd": 0, "bbox": [250, 0, 162, 212], "area": 23462}, {"id": 9083553, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 483, 237], "area": 17551}], "file_name": "000000115885.png", "image_id": 115885}, {"segments_info": [{"id": 2566447, "category_id": 1, "iscrowd": 0, "bbox": [281, 6, 182, 291], "area": 24892}, {"id": 14672610, "category_id": 42, "iscrowd": 0, "bbox": [140, 239, 243, 74], "area": 8539}, {"id": 8949643, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 237840}], "file_name": "000000115898.png", "image_id": 115898}, {"segments_info": [{"id": 2302491, "category_id": 1, "iscrowd": 0, "bbox": [218, 497, 10, 32], "area": 249}, {"id": 3290418, "category_id": 3, "iscrowd": 0, "bbox": [320, 499, 31, 24], "area": 539}, {"id": 4277314, "category_id": 3, "iscrowd": 0, "bbox": [308, 501, 15, 14], "area": 173}, {"id": 3223335, "category_id": 3, "iscrowd": 0, "bbox": [186, 503, 42, 26], "area": 635}, {"id": 3749418, "category_id": 3, "iscrowd": 0, "bbox": [155, 500, 32, 36], "area": 565}, {"id": 4276280, "category_id": 3, "iscrowd": 0, "bbox": [119, 503, 54, 42], "area": 1778}, {"id": 5656906, "category_id": 3, "iscrowd": 0, "bbox": [240, 503, 18, 16], "area": 235}, {"id": 4406838, "category_id": 3, "iscrowd": 0, "bbox": [226, 505, 10, 14], "area": 115}, {"id": 5789260, "category_id": 3, "iscrowd": 0, "bbox": [262, 504, 14, 11], "area": 105}, {"id": 5262918, "category_id": 3, "iscrowd": 0, "bbox": [255, 503, 10, 14], "area": 81}, {"id": 4144685, "category_id": 10, "iscrowd": 0, "bbox": [162, 111, 62, 63], "area": 2651}, {"id": 6844011, "category_id": 10, "iscrowd": 0, "bbox": [267, 446, 11, 10], "area": 100}, {"id": 4739140, "category_id": 10, "iscrowd": 0, "bbox": [249, 415, 17, 14], "area": 224}, {"id": 3028527, "category_id": 10, "iscrowd": 0, "bbox": [387, 467, 7, 14], "area": 81}, {"id": 2500896, "category_id": 10, "iscrowd": 0, "bbox": [164, 474, 8, 15], "area": 87}, {"id": 2832172, "category_id": 10, "iscrowd": 0, "bbox": [364, 461, 8, 19], "area": 95}, {"id": 2501160, "category_id": 64, "iscrowd": 0, "bbox": [58, 499, 18, 44], "area": 380}, {"id": 6058621, "category_id": 128, "iscrowd": 0, "bbox": [0, 88, 480, 475], "area": 136072}, {"id": 5854797, "category_id": 149, "iscrowd": 0, "bbox": [0, 504, 480, 136], "area": 48962}, {"id": 15196632, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 493], "area": 113771}], "file_name": "000000115946.png", "image_id": 115946}, {"segments_info": [{"id": 5065291, "category_id": 1, "iscrowd": 0, "bbox": [113, 48, 107, 326], "area": 13510}, {"id": 2896183, "category_id": 1, "iscrowd": 0, "bbox": [5, 117, 83, 235], "area": 9077}, {"id": 5000532, "category_id": 1, "iscrowd": 0, "bbox": [225, 119, 91, 251], "area": 15113}, {"id": 4872789, "category_id": 38, "iscrowd": 0, "bbox": [70, 168, 175, 196], "area": 16515}, {"id": 6188924, "category_id": 154, "iscrowd": 0, "bbox": [0, 266, 500, 109], "area": 26049}, {"id": 10658461, "category_id": 155, "iscrowd": 0, "bbox": [0, 239, 500, 85], "area": 13276}, {"id": 13879484, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 252], "area": 93424}], "file_name": "000000116068.png", "image_id": 116068}, {"segments_info": [{"id": 2960689, "category_id": 47, "iscrowd": 0, "bbox": [141, 1, 176, 117], "area": 19127}, {"id": 3554113, "category_id": 49, "iscrowd": 0, "bbox": [404, 127, 236, 248], "area": 11894}, {"id": 1988295, "category_id": 57, "iscrowd": 0, "bbox": [101, 130, 189, 215], "area": 23923}, {"id": 1907739, "category_id": 107, "iscrowd": 0, "bbox": [0, 15, 640, 465], "area": 67478}, {"id": 9865600, "category_id": 176, "iscrowd": 0, "bbox": [231, 0, 223, 24], "area": 2730}, {"id": 6978188, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 162, 363], "area": 33618}, {"id": 7507334, "category_id": 196, "iscrowd": 0, "bbox": [216, 0, 424, 401], "area": 68732}], "file_name": "000000116206.png", "image_id": 116206}, {"segments_info": [{"id": 3486252, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 221, 272], "area": 20617}, {"id": 2109228, "category_id": 44, "iscrowd": 0, "bbox": [485, 23, 84, 183], "area": 7798}, {"id": 2110235, "category_id": 44, "iscrowd": 0, "bbox": [301, 0, 62, 98], "area": 3727}, {"id": 7891540, "category_id": 44, "iscrowd": 0, "bbox": [356, 0, 53, 136], "area": 4707}, {"id": 1912627, "category_id": 44, "iscrowd": 0, "bbox": [389, 1, 72, 150], "area": 6026}, {"id": 8879478, "category_id": 46, "iscrowd": 0, "bbox": [601, 124, 39, 168], "area": 3065}, {"id": 4143147, "category_id": 46, "iscrowd": 0, "bbox": [450, 77, 58, 77], "area": 2920}, {"id": 5917497, "category_id": 46, "iscrowd": 0, "bbox": [217, 91, 64, 55], "area": 2796}, {"id": 4012595, "category_id": 46, "iscrowd": 0, "bbox": [295, 85, 63, 48], "area": 2321}, {"id": 7240320, "category_id": 47, "iscrowd": 0, "bbox": [508, 352, 132, 122], "area": 12109}, {"id": 4943503, "category_id": 59, "iscrowd": 0, "bbox": [560, 295, 80, 108], "area": 7025}, {"id": 6718876, "category_id": 59, "iscrowd": 0, "bbox": [96, 128, 480, 243], "area": 87901}, {"id": 4414591, "category_id": 59, "iscrowd": 0, "bbox": [97, 18, 93, 33], "area": 1483}, {"id": 5530230, "category_id": 59, "iscrowd": 0, "bbox": [2, 43, 114, 36], "area": 2654}, {"id": 1908768, "category_id": 62, "iscrowd": 0, "bbox": [441, 1, 49, 79], "area": 2453}, {"id": 3616031, "category_id": 62, "iscrowd": 0, "bbox": [562, 0, 78, 164], "area": 8843}, {"id": 2763044, "category_id": 62, "iscrowd": 0, "bbox": [249, 34, 205, 94], "area": 3544}, {"id": 4668200, "category_id": 62, "iscrowd": 0, "bbox": [210, 0, 84, 93], "area": 4424}, {"id": 1643793, "category_id": 62, "iscrowd": 0, "bbox": [479, 26, 13, 48], "area": 336}, {"id": 4341566, "category_id": 67, "iscrowd": 0, "bbox": [1, 240, 634, 233], "area": 35174}, {"id": 12104090, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 594, 480], "area": 5366}, {"id": 7956552, "category_id": 190, "iscrowd": 0, "bbox": [74, 0, 512, 177], "area": 12956}, {"id": 10065294, "category_id": 195, "iscrowd": 0, "bbox": [0, 181, 270, 299], "area": 10634}, {"id": 6450556, "category_id": 196, "iscrowd": 0, "bbox": [85, 144, 156, 212], "area": 1679}], "file_name": "000000116208.png", "image_id": 116208}, {"segments_info": [{"id": 8887241, "category_id": 50, "iscrowd": 0, "bbox": [26, 45, 410, 223], "area": 28918}, {"id": 9348047, "category_id": 51, "iscrowd": 0, "bbox": [73, 27, 518, 391], "area": 127615}, {"id": 9610173, "category_id": 51, "iscrowd": 0, "bbox": [23, 402, 231, 195], "area": 38408}, {"id": 7963314, "category_id": 53, "iscrowd": 0, "bbox": [442, 169, 52, 44], "area": 1382}, {"id": 7962305, "category_id": 53, "iscrowd": 0, "bbox": [340, 331, 125, 43], "area": 3573}, {"id": 8955344, "category_id": 53, "iscrowd": 0, "bbox": [191, 245, 131, 65], "area": 4934}, {"id": 7035849, "category_id": 57, "iscrowd": 0, "bbox": [314, 108, 127, 126], "area": 8024}, {"id": 7035011, "category_id": 67, "iscrowd": 0, "bbox": [29, 248, 562, 350], "area": 86622}, {"id": 7235745, "category_id": 189, "iscrowd": 0, "bbox": [24, 11, 168, 199], "area": 14887}], "file_name": "000000116362.png", "image_id": 116362}, {"segments_info": [{"id": 2961735, "category_id": 1, "iscrowd": 0, "bbox": [40, 293, 237, 146], "area": 13088}, {"id": 2961738, "category_id": 9, "iscrowd": 0, "bbox": [1, 389, 269, 124], "area": 24528}, {"id": 3092790, "category_id": 9, "iscrowd": 0, "bbox": [388, 385, 41, 34], "area": 772}, {"id": 7495800, "category_id": 31, "iscrowd": 0, "bbox": [111, 98, 60, 175], "area": 5972}, {"id": 1578049, "category_id": 31, "iscrowd": 0, "bbox": [289, 200, 32, 41], "area": 1063}, {"id": 4537995, "category_id": 31, "iscrowd": 0, "bbox": [342, 61, 86, 113], "area": 5709}, {"id": 9011579, "category_id": 31, "iscrowd": 0, "bbox": [289, 276, 28, 38], "area": 793}, {"id": 12699597, "category_id": 31, "iscrowd": 0, "bbox": [285, 0, 77, 122], "area": 7449}, {"id": 1644577, "category_id": 31, "iscrowd": 0, "bbox": [286, 144, 50, 60], "area": 2328}, {"id": 1448503, "category_id": 31, "iscrowd": 0, "bbox": [287, 233, 49, 46], "area": 1677}, {"id": 8946569, "category_id": 31, "iscrowd": 0, "bbox": [372, 64, 57, 119], "area": 1088}, {"id": 1515064, "category_id": 62, "iscrowd": 0, "bbox": [396, 284, 33, 98], "area": 2002}, {"id": 7305083, "category_id": 144, "iscrowd": 0, "bbox": [248, 339, 129, 106], "area": 7987}, {"id": 4738647, "category_id": 148, "iscrowd": 0, "bbox": [0, 400, 429, 240], "area": 69696}, {"id": 2504489, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 169, 460], "area": 48846}, {"id": 2567734, "category_id": 194, "iscrowd": 0, "bbox": [101, 321, 41, 52], "area": 1139}], "file_name": "000000116439.png", "image_id": 116439}, {"segments_info": [{"id": 1652556, "category_id": 62, "iscrowd": 0, "bbox": [43, 342, 85, 117], "area": 883}, {"id": 2441815, "category_id": 63, "iscrowd": 0, "bbox": [42, 341, 79, 114], "area": 2930}, {"id": 7238253, "category_id": 65, "iscrowd": 0, "bbox": [58, 80, 270, 552], "area": 118065}, {"id": 662340, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 411, 640], "area": 115480}, {"id": 5464438, "category_id": 190, "iscrowd": 0, "bbox": [44, 465, 284, 175], "area": 7644}, {"id": 467995, "category_id": 199, "iscrowd": 0, "bbox": [42, 180, 37, 176], "area": 4139}, {"id": 8487807, "category_id": 200, "iscrowd": 0, "bbox": [48, 541, 179, 99], "area": 9979}], "file_name": "000000116479.png", "image_id": 116479}, {"segments_info": [{"id": 6843244, "category_id": 24, "iscrowd": 0, "bbox": [262, 78, 193, 292], "area": 38781}, {"id": 6381665, "category_id": 24, "iscrowd": 0, "bbox": [377, 72, 123, 137], "area": 9074}, {"id": 5921884, "category_id": 24, "iscrowd": 0, "bbox": [0, 76, 286, 299], "area": 55733}, {"id": 9409939, "category_id": 190, "iscrowd": 0, "bbox": [0, 226, 127, 149], "area": 4314}, {"id": 8492699, "category_id": 193, "iscrowd": 0, "bbox": [84, 195, 416, 180], "area": 6751}, {"id": 8225401, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 500, 230], "area": 31896}], "file_name": "000000116589.png", "image_id": 116589}, {"segments_info": [{"id": 6779510, "category_id": 17, "iscrowd": 0, "bbox": [77, 6, 312, 350], "area": 53174}, {"id": 10452084, "category_id": 49, "iscrowd": 0, "bbox": [378, 131, 130, 129], "area": 4318}, {"id": 7292275, "category_id": 65, "iscrowd": 0, "bbox": [18, 2, 400, 353], "area": 37280}, {"id": 12016522, "category_id": 93, "iscrowd": 0, "bbox": [183, 46, 42, 6], "area": 99}, {"id": 6254200, "category_id": 177, "iscrowd": 0, "bbox": [254, 0, 386, 106], "area": 23043}, {"id": 10070451, "category_id": 189, "iscrowd": 0, "bbox": [198, 23, 442, 337], "area": 92974}], "file_name": "000000116825.png", "image_id": 116825}, {"segments_info": [{"id": 5654595, "category_id": 1, "iscrowd": 0, "bbox": [322, 113, 216, 234], "area": 22491}, {"id": 1447450, "category_id": 77, "iscrowd": 0, "bbox": [449, 157, 17, 11], "area": 52}, {"id": 10460315, "category_id": 161, "iscrowd": 0, "bbox": [0, 0, 640, 138], "area": 68769}, {"id": 3037267, "category_id": 184, "iscrowd": 0, "bbox": [118, 0, 522, 294], "area": 43442}, {"id": 7634587, "category_id": 191, "iscrowd": 0, "bbox": [0, 100, 640, 366], "area": 148301}], "file_name": "000000117197.png", "image_id": 117197}, {"segments_info": [{"id": 2700863, "category_id": 16, "iscrowd": 0, "bbox": [304, 57, 27, 56], "area": 830}, {"id": 5527132, "category_id": 17, "iscrowd": 0, "bbox": [71, 219, 91, 63], "area": 3558}, {"id": 4936543, "category_id": 17, "iscrowd": 0, "bbox": [461, 266, 90, 115], "area": 7276}, {"id": 8230567, "category_id": 154, "iscrowd": 0, "bbox": [0, 167, 640, 261], "area": 115675}, {"id": 7043710, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 137, 105], "area": 12633}, {"id": 3757664, "category_id": 184, "iscrowd": 0, "bbox": [96, 0, 213, 274], "area": 33688}, {"id": 5270136, "category_id": 191, "iscrowd": 0, "bbox": [0, 149, 640, 109], "area": 7252}, {"id": 6329495, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 239], "area": 90632}, {"id": 12041677, "category_id": 195, "iscrowd": 0, "bbox": [422, 130, 44, 39], "area": 1433}], "file_name": "000000117374.png", "image_id": 117374}, {"segments_info": [{"id": 6647944, "category_id": 1, "iscrowd": 0, "bbox": [276, 7, 297, 419], "area": 65747}, {"id": 591879, "category_id": 1, "iscrowd": 0, "bbox": [0, 41, 70, 168], "area": 8569}, {"id": 2895675, "category_id": 1, "iscrowd": 0, "bbox": [539, 1, 101, 416], "area": 31624}, {"id": 1447967, "category_id": 47, "iscrowd": 0, "bbox": [0, 191, 81, 132], "area": 8177}, {"id": 2896966, "category_id": 50, "iscrowd": 0, "bbox": [387, 182, 45, 179], "area": 1012}, {"id": 2700136, "category_id": 61, "iscrowd": 0, "bbox": [115, 241, 85, 124], "area": 4894}, {"id": 3165830, "category_id": 67, "iscrowd": 0, "bbox": [2, 188, 438, 232], "area": 61936}, {"id": 329225, "category_id": 107, "iscrowd": 0, "bbox": [97, 0, 124, 102], "area": 8844}, {"id": 1911614, "category_id": 112, "iscrowd": 0, "bbox": [275, 0, 38, 172], "area": 4050}, {"id": 594477, "category_id": 118, "iscrowd": 0, "bbox": [74, 82, 566, 344], "area": 26103}, {"id": 1646682, "category_id": 130, "iscrowd": 0, "bbox": [85, 0, 37, 40], "area": 933}, {"id": 1454700, "category_id": 189, "iscrowd": 0, "bbox": [0, 315, 468, 111], "area": 9872}, {"id": 8749943, "category_id": 199, "iscrowd": 0, "bbox": [43, 0, 597, 214], "area": 28892}], "file_name": "000000117425.png", "image_id": 117425}, {"segments_info": [{"id": 7041920, "category_id": 1, "iscrowd": 0, "bbox": [443, 171, 32, 113], "area": 2001}, {"id": 8151877, "category_id": 1, "iscrowd": 0, "bbox": [39, 227, 198, 197], "area": 21242}, {"id": 7032891, "category_id": 1, "iscrowd": 0, "bbox": [576, 145, 61, 115], "area": 3316}, {"id": 7498609, "category_id": 1, "iscrowd": 0, "bbox": [225, 158, 73, 184], "area": 3679}, {"id": 3552824, "category_id": 1, "iscrowd": 0, "bbox": [331, 170, 35, 111], "area": 2066}, {"id": 6313326, "category_id": 1, "iscrowd": 0, "bbox": [375, 131, 49, 161], "area": 4295}, {"id": 6182501, "category_id": 1, "iscrowd": 0, "bbox": [2, 171, 56, 89], "area": 2308}, {"id": 7432528, "category_id": 1, "iscrowd": 0, "bbox": [188, 198, 110, 222], "area": 9955}, {"id": 9406089, "category_id": 1, "iscrowd": 0, "bbox": [284, 137, 57, 173], "area": 5571}, {"id": 9535369, "category_id": 1, "iscrowd": 0, "bbox": [352, 151, 26, 99], "area": 1040}, {"id": 2703490, "category_id": 1, "iscrowd": 0, "bbox": [35, 199, 67, 121], "area": 4891}, {"id": 7367023, "category_id": 1, "iscrowd": 0, "bbox": [415, 217, 27, 83], "area": 1151}, {"id": 5330267, "category_id": 1, "iscrowd": 0, "bbox": [523, 190, 26, 61], "area": 1000}, {"id": 5856858, "category_id": 1, "iscrowd": 1, "bbox": [1, 132, 633, 157], "area": 19623}, {"id": 8422999, "category_id": 28, "iscrowd": 0, "bbox": [370, 143, 98, 25], "area": 858}, {"id": 3357229, "category_id": 62, "iscrowd": 0, "bbox": [0, 202, 34, 63], "area": 810}, {"id": 4938835, "category_id": 62, "iscrowd": 0, "bbox": [215, 191, 8, 39], "area": 193}, {"id": 5130057, "category_id": 62, "iscrowd": 0, "bbox": [82, 179, 13, 36], "area": 151}, {"id": 8159371, "category_id": 88, "iscrowd": 0, "bbox": [182, 280, 53, 84], "area": 2405}, {"id": 6980768, "category_id": 88, "iscrowd": 0, "bbox": [415, 229, 36, 24], "area": 358}, {"id": 9730948, "category_id": 88, "iscrowd": 0, "bbox": [439, 200, 20, 29], "area": 392}, {"id": 10000521, "category_id": 88, "iscrowd": 0, "bbox": [503, 222, 27, 32], "area": 507}, {"id": 9401970, "category_id": 88, "iscrowd": 0, "bbox": [222, 283, 68, 85], "area": 1758}, {"id": 9995398, "category_id": 88, "iscrowd": 0, "bbox": [365, 210, 12, 24], "area": 153}, {"id": 6376756, "category_id": 93, "iscrowd": 0, "bbox": [0, 278, 104, 81], "area": 3552}, {"id": 2244159, "category_id": 119, "iscrowd": 0, "bbox": [186, 177, 454, 251], "area": 42438}, {"id": 1647643, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 208], "area": 100750}, {"id": 15197922, "category_id": 187, "iscrowd": 0, "bbox": [132, 0, 151, 53], "area": 3068}, {"id": 3040334, "category_id": 193, "iscrowd": 0, "bbox": [0, 164, 640, 264], "area": 25991}], "file_name": "000000117492.png", "image_id": 117492}, {"segments_info": [{"id": 5859983, "category_id": 1, "iscrowd": 0, "bbox": [151, 81, 349, 413], "area": 85424}, {"id": 10793677, "category_id": 18, "iscrowd": 0, "bbox": [33, 317, 170, 178], "area": 18126}, {"id": 2833478, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 500], "area": 133563}], "file_name": "000000117525.png", "image_id": 117525}, {"segments_info": [{"id": 2762790, "category_id": 1, "iscrowd": 0, "bbox": [396, 166, 29, 53], "area": 749}, {"id": 4604476, "category_id": 36, "iscrowd": 0, "bbox": [415, 203, 14, 27], "area": 149}, {"id": 9472643, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 289538}, {"id": 4078646, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 111, 170], "area": 14211}], "file_name": "000000117645.png", "image_id": 117645}, {"segments_info": [{"id": 724502, "category_id": 1, "iscrowd": 0, "bbox": [415, 162, 225, 263], "area": 24161}, {"id": 2839682, "category_id": 44, "iscrowd": 0, "bbox": [0, 94, 20, 55], "area": 947}, {"id": 2040360, "category_id": 44, "iscrowd": 0, "bbox": [258, 87, 15, 36], "area": 386}, {"id": 7517149, "category_id": 44, "iscrowd": 0, "bbox": [139, 102, 29, 60], "area": 1275}, {"id": 1586532, "category_id": 44, "iscrowd": 0, "bbox": [66, 178, 22, 69], "area": 1218}, {"id": 2631209, "category_id": 44, "iscrowd": 0, "bbox": [371, 99, 11, 33], "area": 293}, {"id": 3682615, "category_id": 44, "iscrowd": 0, "bbox": [285, 89, 14, 37], "area": 383}, {"id": 2764082, "category_id": 44, "iscrowd": 0, "bbox": [358, 97, 13, 35], "area": 366}, {"id": 4340033, "category_id": 44, "iscrowd": 0, "bbox": [297, 90, 12, 37], "area": 395}, {"id": 6047566, "category_id": 44, "iscrowd": 0, "bbox": [308, 92, 12, 35], "area": 337}, {"id": 1186855, "category_id": 44, "iscrowd": 0, "bbox": [217, 97, 21, 69], "area": 1137}, {"id": 2245223, "category_id": 44, "iscrowd": 0, "bbox": [185, 102, 17, 60], "area": 806}, {"id": 2302761, "category_id": 44, "iscrowd": 0, "bbox": [271, 87, 16, 38], "area": 387}, {"id": 3224118, "category_id": 44, "iscrowd": 0, "bbox": [348, 96, 10, 35], "area": 267}, {"id": 1517377, "category_id": 44, "iscrowd": 1, "bbox": [6, 75, 475, 264], "area": 45774}, {"id": 1451843, "category_id": 46, "iscrowd": 0, "bbox": [365, 285, 29, 53], "area": 1214}, {"id": 1650512, "category_id": 46, "iscrowd": 0, "bbox": [324, 288, 20, 50], "area": 823}, {"id": 1519186, "category_id": 46, "iscrowd": 0, "bbox": [342, 283, 17, 55], "area": 687}, {"id": 526862, "category_id": 107, "iscrowd": 0, "bbox": [0, 312, 584, 113], "area": 55506}, {"id": 2516370, "category_id": 130, "iscrowd": 0, "bbox": [156, 13, 354, 291], "area": 6227}, {"id": 1122367, "category_id": 156, "iscrowd": 0, "bbox": [0, 18, 484, 306], "area": 43181}, {"id": 1583418, "category_id": 181, "iscrowd": 0, "bbox": [496, 49, 144, 210], "area": 17160}, {"id": 2902889, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 308], "area": 37401}, {"id": 988979, "category_id": 199, "iscrowd": 0, "bbox": [107, 178, 36, 19], "area": 390}], "file_name": "000000117719.png", "image_id": 117719}, {"segments_info": [{"id": 10395314, "category_id": 1, "iscrowd": 0, "bbox": [81, 28, 157, 391], "area": 39424}, {"id": 7374730, "category_id": 43, "iscrowd": 0, "bbox": [120, 363, 115, 163], "area": 12426}, {"id": 3225396, "category_id": 190, "iscrowd": 0, "bbox": [0, 242, 359, 398], "area": 63077}, {"id": 6383715, "category_id": 191, "iscrowd": 0, "bbox": [0, 211, 359, 429], "area": 35294}, {"id": 12039351, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 359, 407], "area": 79222}], "file_name": "000000117744.png", "image_id": 117744}, {"segments_info": [{"id": 3954031, "category_id": 1, "iscrowd": 0, "bbox": [0, 34, 245, 282], "area": 51598}, {"id": 3825271, "category_id": 17, "iscrowd": 0, "bbox": [351, 147, 149, 170], "area": 13802}, {"id": 2111580, "category_id": 44, "iscrowd": 0, "bbox": [266, 156, 31, 63], "area": 1066}, {"id": 857882, "category_id": 44, "iscrowd": 0, "bbox": [212, 280, 24, 40], "area": 523}, {"id": 2311805, "category_id": 44, "iscrowd": 0, "bbox": [318, 170, 36, 70], "area": 1698}, {"id": 1060430, "category_id": 44, "iscrowd": 0, "bbox": [233, 298, 16, 22], "area": 225}, {"id": 1648718, "category_id": 44, "iscrowd": 0, "bbox": [286, 161, 34, 66], "area": 1481}, {"id": 10731472, "category_id": 82, "iscrowd": 0, "bbox": [1, 2, 246, 86], "area": 14284}, {"id": 3761025, "category_id": 82, "iscrowd": 0, "bbox": [179, 124, 250, 192], "area": 27566}, {"id": 3496311, "category_id": 100, "iscrowd": 0, "bbox": [455, 241, 45, 79], "area": 2023}, {"id": 1056048, "category_id": 196, "iscrowd": 0, "bbox": [14, 259, 99, 61], "area": 3535}, {"id": 6002366, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 165], "area": 37169}], "file_name": "000000117908.png", "image_id": 117908}, {"segments_info": [{"id": 16248794, "category_id": 44, "iscrowd": 0, "bbox": [16, 246, 13, 28], "area": 266}, {"id": 11452599, "category_id": 70, "iscrowd": 0, "bbox": [9, 278, 173, 222], "area": 18411}, {"id": 11127248, "category_id": 81, "iscrowd": 0, "bbox": [133, 426, 200, 74], "area": 12313}, {"id": 7838878, "category_id": 156, "iscrowd": 0, "bbox": [166, 40, 154, 266], "area": 27484}, {"id": 7708589, "category_id": 168, "iscrowd": 0, "bbox": [154, 232, 159, 80], "area": 7295}, {"id": 12176590, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 333, 445], "area": 71430}, {"id": 15658719, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 76, 275], "area": 17897}, {"id": 7110504, "category_id": 190, "iscrowd": 0, "bbox": [0, 428, 142, 72], "area": 3183}, {"id": 12244958, "category_id": 199, "iscrowd": 0, "bbox": [67, 0, 91, 31], "area": 1589}], "file_name": "000000117914.png", "image_id": 117914}, {"segments_info": [{"id": 4276812, "category_id": 19, "iscrowd": 0, "bbox": [387, 44, 215, 407], "area": 41110}, {"id": 4148067, "category_id": 19, "iscrowd": 0, "bbox": [9, 72, 354, 380], "area": 61707}, {"id": 8751743, "category_id": 184, "iscrowd": 0, "bbox": [106, 102, 365, 33], "area": 2581}, {"id": 5864829, "category_id": 185, "iscrowd": 0, "bbox": [0, 109, 640, 371], "area": 124816}, {"id": 16055293, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 141], "area": 67271}, {"id": 8174240, "category_id": 193, "iscrowd": 0, "bbox": [0, 121, 640, 95], "area": 8763}], "file_name": "000000118209.png", "image_id": 118209}, {"segments_info": [{"id": 3881291, "category_id": 1, "iscrowd": 0, "bbox": [0, 65, 419, 329], "area": 51764}, {"id": 2715317, "category_id": 57, "iscrowd": 0, "bbox": [236, 144, 36, 21], "area": 312}, {"id": 867948, "category_id": 57, "iscrowd": 0, "bbox": [297, 226, 30, 21], "area": 434}, {"id": 2188458, "category_id": 57, "iscrowd": 0, "bbox": [186, 266, 22, 18], "area": 201}, {"id": 1660309, "category_id": 57, "iscrowd": 0, "bbox": [302, 245, 15, 20], "area": 202}, {"id": 1468869, "category_id": 57, "iscrowd": 0, "bbox": [248, 133, 41, 17], "area": 327}, {"id": 1857432, "category_id": 57, "iscrowd": 0, "bbox": [213, 243, 71, 65], "area": 1704}, {"id": 1724832, "category_id": 57, "iscrowd": 0, "bbox": [335, 160, 44, 59], "area": 984}, {"id": 5211773, "category_id": 58, "iscrowd": 0, "bbox": [154, 32, 288, 290], "area": 43142}, {"id": 3816506, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 562, 427], "area": 57412}, {"id": 11840163, "category_id": 195, "iscrowd": 0, "bbox": [141, 2, 311, 361], "area": 10882}, {"id": 4012856, "category_id": 199, "iscrowd": 0, "bbox": [98, 0, 542, 427], "area": 103407}], "file_name": "000000118367.png", "image_id": 118367}, {"segments_info": [{"id": 2893610, "category_id": 1, "iscrowd": 0, "bbox": [548, 361, 25, 66], "area": 851}, {"id": 3486046, "category_id": 51, "iscrowd": 0, "bbox": [290, 352, 22, 19], "area": 321}, {"id": 8554374, "category_id": 149, "iscrowd": 0, "bbox": [385, 446, 255, 34], "area": 5626}, {"id": 3685431, "category_id": 184, "iscrowd": 0, "bbox": [0, 123, 634, 314], "area": 67916}, {"id": 14194537, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 251], "area": 108697}, {"id": 6973546, "category_id": 197, "iscrowd": 0, "bbox": [0, 232, 640, 248], "area": 94249}], "file_name": "000000118405.png", "image_id": 118405}, {"segments_info": [{"id": 5794425, "category_id": 15, "iscrowd": 0, "bbox": [150, 200, 490, 99], "area": 24916}, {"id": 5134181, "category_id": 17, "iscrowd": 0, "bbox": [270, 119, 125, 159], "area": 10552}, {"id": 7637394, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 299], "area": 154658}], "file_name": "000000118515.png", "image_id": 118515}, {"segments_info": [{"id": 5992576, "category_id": 21, "iscrowd": 0, "bbox": [38, 19, 556, 320], "area": 80566}, {"id": 4809074, "category_id": 21, "iscrowd": 0, "bbox": [522, 6, 118, 306], "area": 16501}, {"id": 8627627, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 292], "area": 78631}, {"id": 7837338, "category_id": 193, "iscrowd": 0, "bbox": [0, 201, 640, 279], "area": 129154}], "file_name": "000000118594.png", "image_id": 118594}, {"segments_info": [{"id": 2957904, "category_id": 1, "iscrowd": 0, "bbox": [309, 132, 163, 226], "area": 11930}, {"id": 11047818, "category_id": 35, "iscrowd": 0, "bbox": [352, 323, 93, 79], "area": 828}, {"id": 9602170, "category_id": 35, "iscrowd": 0, "bbox": [387, 337, 51, 33], "area": 130}, {"id": 13883607, "category_id": 159, "iscrowd": 0, "bbox": [0, 119, 640, 308], "area": 145185}, {"id": 6911609, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 226], "area": 109627}, {"id": 14803936, "category_id": 187, "iscrowd": 0, "bbox": [489, 0, 109, 70], "area": 5282}], "file_name": "000000118921.png", "image_id": 118921}, {"segments_info": [{"id": 6119268, "category_id": 21, "iscrowd": 0, "bbox": [509, 199, 117, 125], "area": 4762}, {"id": 6120815, "category_id": 21, "iscrowd": 0, "bbox": [360, 205, 69, 66], "area": 2568}, {"id": 5987422, "category_id": 21, "iscrowd": 0, "bbox": [485, 234, 115, 100], "area": 6024}, {"id": 3623244, "category_id": 184, "iscrowd": 0, "bbox": [86, 177, 318, 303], "area": 22782}, {"id": 14793112, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 219], "area": 112646}, {"id": 10523795, "category_id": 192, "iscrowd": 0, "bbox": [0, 109, 525, 146], "area": 21970}, {"id": 3166030, "category_id": 193, "iscrowd": 0, "bbox": [0, 150, 640, 330], "area": 136195}], "file_name": "000000119038.png", "image_id": 119038}, {"segments_info": [{"id": 5659767, "category_id": 1, "iscrowd": 0, "bbox": [223, 173, 99, 113], "area": 4796}, {"id": 11771819, "category_id": 1, "iscrowd": 0, "bbox": [473, 19, 26, 78], "area": 1394}, {"id": 7762802, "category_id": 1, "iscrowd": 0, "bbox": [41, 51, 44, 121], "area": 3067}, {"id": 14538710, "category_id": 34, "iscrowd": 0, "bbox": [166, 279, 29, 10], "area": 213}, {"id": 8357765, "category_id": 148, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 168155}], "file_name": "000000119088.png", "image_id": 119088}, {"segments_info": [{"id": 3297905, "category_id": 16, "iscrowd": 0, "bbox": [381, 0, 74, 92], "area": 4750}, {"id": 7699332, "category_id": 17, "iscrowd": 0, "bbox": [13, 99, 444, 162], "area": 28852}, {"id": 7965339, "category_id": 47, "iscrowd": 0, "bbox": [21, 39, 41, 52], "area": 2015}, {"id": 4413535, "category_id": 50, "iscrowd": 0, "bbox": [336, 22, 16, 25], "area": 305}, {"id": 5465208, "category_id": 50, "iscrowd": 0, "bbox": [316, 24, 11, 25], "area": 137}, {"id": 4871527, "category_id": 50, "iscrowd": 0, "bbox": [329, 29, 8, 18], "area": 82}, {"id": 1385252, "category_id": 50, "iscrowd": 0, "bbox": [353, 20, 12, 21], "area": 166}, {"id": 5854289, "category_id": 73, "iscrowd": 0, "bbox": [61, 11, 253, 205], "area": 24967}, {"id": 3949394, "category_id": 77, "iscrowd": 0, "bbox": [0, 208, 46, 30], "area": 1036}, {"id": 2835555, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 262, 51], "area": 5767}, {"id": 2112604, "category_id": 189, "iscrowd": 0, "bbox": [0, 62, 500, 272], "area": 82571}, {"id": 2962242, "category_id": 199, "iscrowd": 0, "bbox": [260, 0, 240, 51], "area": 1872}], "file_name": "000000119233.png", "image_id": 119233}, {"segments_info": [{"id": 2703951, "category_id": 1, "iscrowd": 0, "bbox": [6, 311, 419, 323], "area": 63894}, {"id": 4878989, "category_id": 1, "iscrowd": 0, "bbox": [0, 199, 229, 348], "area": 38041}, {"id": 9211019, "category_id": 73, "iscrowd": 0, "bbox": [122, 143, 295, 343], "area": 43162}, {"id": 2238248, "category_id": 76, "iscrowd": 0, "bbox": [142, 310, 196, 117], "area": 9539}, {"id": 4473930, "category_id": 77, "iscrowd": 0, "bbox": [325, 293, 49, 82], "area": 2385}, {"id": 6519699, "category_id": 189, "iscrowd": 0, "bbox": [96, 226, 95, 212], "area": 2590}, {"id": 8095366, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 416], "area": 109602}, {"id": 2768456, "category_id": 200, "iscrowd": 0, "bbox": [365, 399, 115, 241], "area": 15601}], "file_name": "000000119365.png", "image_id": 119365}, {"segments_info": [{"id": 13159632, "category_id": 1, "iscrowd": 0, "bbox": [185, 177, 163, 209], "area": 11126}, {"id": 8946562, "category_id": 1, "iscrowd": 0, "bbox": [450, 263, 114, 135], "area": 6774}, {"id": 7039592, "category_id": 1, "iscrowd": 0, "bbox": [530, 228, 110, 173], "area": 11022}, {"id": 12832726, "category_id": 37, "iscrowd": 0, "bbox": [301, 92, 11, 11], "area": 100}, {"id": 5920852, "category_id": 39, "iscrowd": 0, "bbox": [92, 241, 88, 9], "area": 556}, {"id": 4936278, "category_id": 40, "iscrowd": 0, "bbox": [420, 281, 33, 33], "area": 573}, {"id": 2768959, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 260], "area": 128723}, {"id": 5658954, "category_id": 185, "iscrowd": 0, "bbox": [0, 169, 640, 175], "area": 54919}, {"id": 11312792, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 44, 24], "area": 640}, {"id": 9481145, "category_id": 193, "iscrowd": 0, "bbox": [0, 285, 640, 141], "area": 57654}], "file_name": "000000119445.png", "image_id": 119445}, {"segments_info": [{"id": 6127780, "category_id": 52, "iscrowd": 0, "bbox": [35, 0, 605, 480], "area": 115441}, {"id": 5013923, "category_id": 52, "iscrowd": 0, "bbox": [220, 1, 121, 132], "area": 8475}, {"id": 1774152, "category_id": 53, "iscrowd": 0, "bbox": [390, 222, 76, 83], "area": 1635}, {"id": 1840468, "category_id": 53, "iscrowd": 0, "bbox": [459, 263, 37, 78], "area": 1664}, {"id": 941767, "category_id": 55, "iscrowd": 0, "bbox": [493, 66, 147, 342], "area": 36620}, {"id": 2850784, "category_id": 55, "iscrowd": 0, "bbox": [1, 183, 312, 290], "area": 63595}, {"id": 5072251, "category_id": 122, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 65979}, {"id": 10849167, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 79, 235], "area": 10649}], "file_name": "000000119452.png", "image_id": 119452}, {"segments_info": [{"id": 2568771, "category_id": 1, "iscrowd": 0, "bbox": [625, 223, 14, 37], "area": 373}, {"id": 1517366, "category_id": 1, "iscrowd": 0, "bbox": [372, 208, 38, 144], "area": 3028}, {"id": 2567993, "category_id": 2, "iscrowd": 0, "bbox": [422, 240, 26, 41], "area": 589}, {"id": 1843491, "category_id": 4, "iscrowd": 0, "bbox": [528, 240, 48, 37], "area": 840}, {"id": 2964358, "category_id": 10, "iscrowd": 0, "bbox": [433, 127, 12, 24], "area": 161}, {"id": 1721467, "category_id": 10, "iscrowd": 0, "bbox": [625, 159, 7, 10], "area": 61}, {"id": 5598197, "category_id": 10, "iscrowd": 0, "bbox": [283, 186, 8, 9], "area": 51}, {"id": 405319, "category_id": 31, "iscrowd": 0, "bbox": [368, 304, 20, 28], "area": 423}, {"id": 1977668, "category_id": 77, "iscrowd": 0, "bbox": [375, 243, 5, 5], "area": 13}, {"id": 2634303, "category_id": 149, "iscrowd": 0, "bbox": [0, 202, 560, 225], "area": 64980}, {"id": 1517862, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 242], "area": 30344}, {"id": 4137751, "category_id": 187, "iscrowd": 0, "bbox": [426, 0, 188, 206], "area": 7527}, {"id": 2898248, "category_id": 191, "iscrowd": 0, "bbox": [0, 219, 640, 208], "area": 55631}, {"id": 3423296, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 244], "area": 106171}], "file_name": "000000119516.png", "image_id": 119516}, {"segments_info": [{"id": 11250096, "category_id": 1, "iscrowd": 0, "bbox": [276, 344, 26, 49], "area": 717}, {"id": 9933979, "category_id": 1, "iscrowd": 0, "bbox": [621, 358, 16, 31], "area": 307}, {"id": 8422558, "category_id": 1, "iscrowd": 0, "bbox": [375, 365, 18, 38], "area": 302}, {"id": 5721971, "category_id": 1, "iscrowd": 0, "bbox": [263, 369, 16, 24], "area": 281}, {"id": 12894925, "category_id": 1, "iscrowd": 0, "bbox": [128, 353, 25, 26], "area": 314}, {"id": 11842505, "category_id": 1, "iscrowd": 0, "bbox": [399, 355, 21, 28], "area": 330}, {"id": 11908042, "category_id": 1, "iscrowd": 0, "bbox": [388, 351, 14, 33], "area": 203}, {"id": 8486017, "category_id": 1, "iscrowd": 0, "bbox": [150, 350, 27, 54], "area": 778}, {"id": 11908550, "category_id": 1, "iscrowd": 0, "bbox": [356, 364, 21, 36], "area": 438}, {"id": 7236481, "category_id": 1, "iscrowd": 0, "bbox": [503, 366, 16, 32], "area": 271}, {"id": 9209265, "category_id": 1, "iscrowd": 0, "bbox": [515, 357, 19, 26], "area": 232}, {"id": 8352638, "category_id": 1, "iscrowd": 0, "bbox": [257, 342, 20, 44], "area": 505}, {"id": 8948653, "category_id": 1, "iscrowd": 0, "bbox": [340, 371, 19, 35], "area": 405}, {"id": 5199453, "category_id": 22, "iscrowd": 0, "bbox": [249, 390, 54, 68], "area": 2481}, {"id": 3553597, "category_id": 22, "iscrowd": 0, "bbox": [118, 395, 66, 78], "area": 3755}, {"id": 3947582, "category_id": 22, "iscrowd": 0, "bbox": [384, 390, 40, 54], "area": 1294}, {"id": 4606544, "category_id": 22, "iscrowd": 0, "bbox": [604, 384, 36, 46], "area": 1358}, {"id": 4737357, "category_id": 22, "iscrowd": 0, "bbox": [295, 401, 105, 49], "area": 2971}, {"id": 4211526, "category_id": 22, "iscrowd": 0, "bbox": [498, 391, 39, 45], "area": 1278}, {"id": 13413540, "category_id": 32, "iscrowd": 0, "bbox": [141, 363, 1, 6], "area": 6}, {"id": 13474427, "category_id": 32, "iscrowd": 0, "bbox": [160, 362, 6, 9], "area": 24}, {"id": 10134694, "category_id": 148, "iscrowd": 0, "bbox": [0, 353, 640, 127], "area": 58092}, {"id": 6387310, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 375], "area": 185950}, {"id": 16247000, "category_id": 187, "iscrowd": 0, "bbox": [264, 0, 376, 207], "area": 44299}], "file_name": "000000119641.png", "image_id": 119641}, {"segments_info": [{"id": 8949395, "category_id": 48, "iscrowd": 0, "bbox": [384, 238, 256, 121], "area": 10117}, {"id": 6854054, "category_id": 61, "iscrowd": 0, "bbox": [197, 41, 179, 220], "area": 28051}, {"id": 4934736, "category_id": 190, "iscrowd": 0, "bbox": [54, 74, 498, 350], "area": 112273}], "file_name": "000000119677.png", "image_id": 119677}, {"segments_info": [{"id": 198925, "category_id": 17, "iscrowd": 0, "bbox": [119, 147, 320, 157], "area": 37237}, {"id": 3231624, "category_id": 47, "iscrowd": 0, "bbox": [345, 116, 60, 49], "area": 2506}, {"id": 13684684, "category_id": 73, "iscrowd": 0, "bbox": [14, 1, 219, 218], "area": 34659}, {"id": 7246014, "category_id": 74, "iscrowd": 0, "bbox": [279, 153, 38, 23], "area": 533}, {"id": 7711962, "category_id": 75, "iscrowd": 0, "bbox": [484, 177, 16, 40], "area": 516}, {"id": 1583938, "category_id": 77, "iscrowd": 0, "bbox": [315, 58, 14, 44], "area": 277}, {"id": 132880, "category_id": 118, "iscrowd": 0, "bbox": [365, 318, 135, 57], "area": 1897}, {"id": 1388648, "category_id": 189, "iscrowd": 0, "bbox": [0, 103, 500, 272], "area": 48124}, {"id": 5456457, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 106, 150], "area": 3419}, {"id": 2377326, "category_id": 195, "iscrowd": 0, "bbox": [244, 106, 256, 269], "area": 4831}, {"id": 2839427, "category_id": 199, "iscrowd": 0, "bbox": [263, 0, 237, 161], "area": 22259}], "file_name": "000000119828.png", "image_id": 119828}, {"segments_info": [{"id": 11312042, "category_id": 1, "iscrowd": 0, "bbox": [276, 98, 145, 237], "area": 13174}, {"id": 10853783, "category_id": 3, "iscrowd": 0, "bbox": [105, 64, 27, 16], "area": 306}, {"id": 13221299, "category_id": 3, "iscrowd": 0, "bbox": [87, 65, 13, 13], "area": 92}, {"id": 11381154, "category_id": 3, "iscrowd": 0, "bbox": [97, 66, 8, 10], "area": 50}, {"id": 8355194, "category_id": 3, "iscrowd": 0, "bbox": [147, 61, 24, 14], "area": 263}, {"id": 9143174, "category_id": 3, "iscrowd": 0, "bbox": [127, 61, 20, 13], "area": 135}, {"id": 8089691, "category_id": 41, "iscrowd": 0, "bbox": [275, 302, 106, 35], "area": 2490}, {"id": 9999759, "category_id": 128, "iscrowd": 0, "bbox": [124, 0, 516, 68], "area": 22428}, {"id": 9211022, "category_id": 149, "iscrowd": 0, "bbox": [0, 61, 640, 364], "area": 176193}, {"id": 6383210, "category_id": 175, "iscrowd": 0, "bbox": [212, 51, 428, 81], "area": 16101}, {"id": 6056046, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 297, 132], "area": 14731}, {"id": 3226175, "category_id": 185, "iscrowd": 0, "bbox": [46, 61, 52, 53], "area": 1839}, {"id": 16117997, "category_id": 187, "iscrowd": 0, "bbox": [63, 0, 120, 24], "area": 887}, {"id": 9412011, "category_id": 191, "iscrowd": 0, "bbox": [0, 62, 640, 106], "area": 11119}, {"id": 4683381, "category_id": 193, "iscrowd": 0, "bbox": [177, 33, 407, 64], "area": 11657}], "file_name": "000000119911.png", "image_id": 119911}, {"segments_info": [{"id": 12893642, "category_id": 1, "iscrowd": 0, "bbox": [298, 0, 67, 14], "area": 635}, {"id": 5915717, "category_id": 1, "iscrowd": 0, "bbox": [335, 32, 117, 203], "area": 10439}, {"id": 13943167, "category_id": 1, "iscrowd": 0, "bbox": [432, 0, 36, 25], "area": 704}, {"id": 10592383, "category_id": 1, "iscrowd": 0, "bbox": [40, 12, 217, 474], "area": 38174}, {"id": 10657464, "category_id": 1, "iscrowd": 0, "bbox": [364, 0, 38, 16], "area": 344}, {"id": 12440000, "category_id": 43, "iscrowd": 0, "bbox": [257, 215, 171, 51], "area": 4819}, {"id": 11194552, "category_id": 145, "iscrowd": 0, "bbox": [0, 141, 468, 359], "area": 113678}, {"id": 14133629, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 468, 236], "area": 62170}], "file_name": "000000119995.png", "image_id": 119995}, {"segments_info": [{"id": 10456970, "category_id": 1, "iscrowd": 0, "bbox": [31, 115, 32, 53], "area": 807}, {"id": 7697021, "category_id": 1, "iscrowd": 0, "bbox": [388, 98, 20, 59], "area": 545}, {"id": 4144960, "category_id": 1, "iscrowd": 0, "bbox": [401, 118, 29, 63], "area": 1108}, {"id": 4674404, "category_id": 1, "iscrowd": 0, "bbox": [340, 100, 13, 11], "area": 85}, {"id": 5198427, "category_id": 1, "iscrowd": 0, "bbox": [468, 92, 30, 89], "area": 1380}, {"id": 5924971, "category_id": 1, "iscrowd": 0, "bbox": [115, 109, 430, 371], "area": 98663}, {"id": 5329528, "category_id": 1, "iscrowd": 0, "bbox": [431, 89, 32, 94], "area": 1933}, {"id": 7756363, "category_id": 1, "iscrowd": 0, "bbox": [13, 99, 8, 20], "area": 103}, {"id": 7632508, "category_id": 1, "iscrowd": 0, "bbox": [355, 93, 17, 28], "area": 290}, {"id": 8356232, "category_id": 1, "iscrowd": 0, "bbox": [370, 98, 20, 37], "area": 476}, {"id": 6842212, "category_id": 15, "iscrowd": 0, "bbox": [36, 150, 32, 18], "area": 262}, {"id": 6579811, "category_id": 16, "iscrowd": 0, "bbox": [202, 159, 6, 7], "area": 25}, {"id": 6712943, "category_id": 16, "iscrowd": 0, "bbox": [220, 159, 7, 6], "area": 21}, {"id": 10394527, "category_id": 16, "iscrowd": 0, "bbox": [41, 178, 14, 7], "area": 64}, {"id": 7303282, "category_id": 16, "iscrowd": 0, "bbox": [231, 156, 7, 8], "area": 28}, {"id": 6184544, "category_id": 16, "iscrowd": 0, "bbox": [9, 168, 10, 8], "area": 37}, {"id": 5326653, "category_id": 16, "iscrowd": 0, "bbox": [4, 177, 7, 8], "area": 36}, {"id": 7891554, "category_id": 16, "iscrowd": 0, "bbox": [191, 155, 6, 6], "area": 17}, {"id": 7958894, "category_id": 16, "iscrowd": 0, "bbox": [27, 169, 8, 11], "area": 43}, {"id": 7170665, "category_id": 16, "iscrowd": 0, "bbox": [208, 164, 7, 5], "area": 20}, {"id": 7371129, "category_id": 16, "iscrowd": 0, "bbox": [193, 166, 10, 6], "area": 27}, {"id": 6116690, "category_id": 16, "iscrowd": 0, "bbox": [37, 177, 7, 6], "area": 29}, {"id": 9934237, "category_id": 16, "iscrowd": 0, "bbox": [67, 173, 2, 3], "area": 5}, {"id": 7501950, "category_id": 16, "iscrowd": 0, "bbox": [224, 164, 7, 5], "area": 22}, {"id": 14538707, "category_id": 28, "iscrowd": 0, "bbox": [394, 87, 41, 33], "area": 964}, {"id": 8943981, "category_id": 77, "iscrowd": 0, "bbox": [153, 189, 272, 74], "area": 14151}, {"id": 4939868, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 330], "area": 95070}, {"id": 14474710, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 255, 56], "area": 1986}, {"id": 6774615, "category_id": 191, "iscrowd": 0, "bbox": [0, 142, 243, 23], "area": 1528}, {"id": 8098969, "category_id": 193, "iscrowd": 0, "bbox": [0, 93, 640, 387], "area": 81764}, {"id": 12964827, "category_id": 194, "iscrowd": 0, "bbox": [414, 144, 165, 60], "area": 4612}], "file_name": "000000120420.png", "image_id": 120420}, {"segments_info": [{"id": 6911625, "category_id": 15, "iscrowd": 0, "bbox": [469, 266, 41, 15], "area": 458}, {"id": 7307148, "category_id": 85, "iscrowd": 0, "bbox": [132, 124, 18, 23], "area": 305}, {"id": 4612200, "category_id": 119, "iscrowd": 0, "bbox": [0, 370, 640, 57], "area": 22741}, {"id": 5396575, "category_id": 128, "iscrowd": 0, "bbox": [103, 15, 442, 293], "area": 45225}, {"id": 7569552, "category_id": 175, "iscrowd": 0, "bbox": [0, 284, 640, 129], "area": 46802}, {"id": 2768191, "category_id": 184, "iscrowd": 0, "bbox": [0, 146, 640, 179], "area": 34352}, {"id": 12426109, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 261], "area": 108279}, {"id": 3958369, "category_id": 193, "iscrowd": 0, "bbox": [84, 273, 556, 51], "area": 10373}, {"id": 7045518, "category_id": 198, "iscrowd": 0, "bbox": [136, 257, 478, 70], "area": 4690}], "file_name": "000000120572.png", "image_id": 120572}, {"segments_info": [{"id": 9934739, "category_id": 85, "iscrowd": 0, "bbox": [267, 202, 73, 75], "area": 4100}, {"id": 1528447, "category_id": 177, "iscrowd": 0, "bbox": [0, 162, 480, 478], "area": 147180}, {"id": 11448242, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 273], "area": 106027}], "file_name": "000000120584.png", "image_id": 120584}, {"segments_info": [{"id": 12098181, "category_id": 47, "iscrowd": 0, "bbox": [285, 14, 90, 132], "area": 8351}, {"id": 3883610, "category_id": 54, "iscrowd": 0, "bbox": [293, 158, 77, 98], "area": 5278}, {"id": 4607846, "category_id": 54, "iscrowd": 0, "bbox": [122, 124, 83, 85], "area": 5368}, {"id": 12360064, "category_id": 189, "iscrowd": 0, "bbox": [0, 80, 500, 295], "area": 63565}, {"id": 4863018, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 34883}, {"id": 13345153, "category_id": 195, "iscrowd": 0, "bbox": [21, 235, 168, 140], "area": 17709}, {"id": 6780282, "category_id": 196, "iscrowd": 0, "bbox": [54, 116, 386, 180], "area": 20791}, {"id": 1512210, "category_id": 198, "iscrowd": 0, "bbox": [338, 0, 122, 46], "area": 3737}], "file_name": "000000120777.png", "image_id": 120777}, {"segments_info": [{"id": 4803526, "category_id": 47, "iscrowd": 0, "bbox": [209, 0, 117, 147], "area": 14566}, {"id": 7961224, "category_id": 51, "iscrowd": 0, "bbox": [333, 127, 306, 183], "area": 40373}, {"id": 6516356, "category_id": 54, "iscrowd": 0, "bbox": [103, 116, 245, 169], "area": 27425}, {"id": 3820908, "category_id": 54, "iscrowd": 0, "bbox": [87, 270, 514, 153], "area": 59468}, {"id": 6648208, "category_id": 57, "iscrowd": 0, "bbox": [350, 194, 76, 35], "area": 453}, {"id": 5466012, "category_id": 57, "iscrowd": 0, "bbox": [497, 189, 26, 8], "area": 148}, {"id": 6522570, "category_id": 57, "iscrowd": 0, "bbox": [566, 175, 14, 7], "area": 70}, {"id": 5406643, "category_id": 57, "iscrowd": 0, "bbox": [449, 146, 6, 12], "area": 51}, {"id": 9537932, "category_id": 67, "iscrowd": 0, "bbox": [1, 53, 639, 239], "area": 27168}, {"id": 9538186, "category_id": 77, "iscrowd": 0, "bbox": [352, 69, 137, 60], "area": 5251}, {"id": 4409148, "category_id": 189, "iscrowd": 0, "bbox": [0, 80, 640, 348], "area": 40662}, {"id": 12233647, "category_id": 190, "iscrowd": 0, "bbox": [21, 0, 619, 75], "area": 9650}, {"id": 13547442, "category_id": 195, "iscrowd": 0, "bbox": [460, 68, 180, 170], "area": 9642}, {"id": 7367022, "category_id": 196, "iscrowd": 0, "bbox": [41, 0, 420, 280], "area": 14823}], "file_name": "000000120853.png", "image_id": 120853}, {"segments_info": [{"id": 8618399, "category_id": 1, "iscrowd": 0, "bbox": [391, 161, 39, 82], "area": 1401}, {"id": 9016246, "category_id": 1, "iscrowd": 0, "bbox": [258, 153, 35, 56], "area": 387}, {"id": 4737376, "category_id": 1, "iscrowd": 0, "bbox": [129, 115, 95, 214], "area": 7840}, {"id": 8024953, "category_id": 1, "iscrowd": 0, "bbox": [211, 149, 83, 141], "area": 3599}, {"id": 3685707, "category_id": 19, "iscrowd": 0, "bbox": [231, 218, 59, 90], "area": 3119}, {"id": 3025968, "category_id": 19, "iscrowd": 0, "bbox": [76, 160, 153, 273], "area": 16900}, {"id": 3619139, "category_id": 19, "iscrowd": 0, "bbox": [385, 183, 62, 73], "area": 2284}, {"id": 6053744, "category_id": 19, "iscrowd": 0, "bbox": [268, 172, 17, 38], "area": 414}, {"id": 7835022, "category_id": 148, "iscrowd": 0, "bbox": [0, 131, 640, 320], "area": 161406}, {"id": 6134427, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 168], "area": 90495}], "file_name": "000000121031.png", "image_id": 121031}, {"segments_info": [{"id": 5262668, "category_id": 128, "iscrowd": 0, "bbox": [0, 321, 640, 159], "area": 30231}, {"id": 12225905, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 517, 160], "area": 18837}, {"id": 2435115, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 201924}], "file_name": "000000121153.png", "image_id": 121153}, {"segments_info": [{"id": 8226180, "category_id": 1, "iscrowd": 0, "bbox": [575, 194, 8, 16], "area": 68}, {"id": 7628884, "category_id": 1, "iscrowd": 0, "bbox": [570, 194, 6, 16], "area": 49}, {"id": 4342339, "category_id": 1, "iscrowd": 0, "bbox": [109, 166, 45, 51], "area": 943}, {"id": 3091500, "category_id": 1, "iscrowd": 0, "bbox": [239, 102, 55, 114], "area": 2922}, {"id": 3157288, "category_id": 1, "iscrowd": 0, "bbox": [59, 206, 49, 97], "area": 2374}, {"id": 9354422, "category_id": 1, "iscrowd": 0, "bbox": [607, 195, 6, 15], "area": 54}, {"id": 8288427, "category_id": 3, "iscrowd": 0, "bbox": [98, 194, 13, 9], "area": 72}, {"id": 7432826, "category_id": 3, "iscrowd": 0, "bbox": [28, 193, 26, 12], "area": 172}, {"id": 11842216, "category_id": 3, "iscrowd": 0, "bbox": [571, 186, 22, 14], "area": 120}, {"id": 7101524, "category_id": 3, "iscrowd": 0, "bbox": [8, 195, 16, 6], "area": 55}, {"id": 7705770, "category_id": 3, "iscrowd": 0, "bbox": [67, 192, 26, 11], "area": 166}, {"id": 9666633, "category_id": 3, "iscrowd": 0, "bbox": [59, 196, 5, 8], "area": 28}, {"id": 14078670, "category_id": 3, "iscrowd": 0, "bbox": [567, 180, 39, 12], "area": 256}, {"id": 7104873, "category_id": 3, "iscrowd": 0, "bbox": [0, 199, 14, 10], "area": 119}, {"id": 12038311, "category_id": 3, "iscrowd": 0, "bbox": [587, 187, 18, 10], "area": 72}, {"id": 8738354, "category_id": 3, "iscrowd": 0, "bbox": [618, 181, 20, 10], "area": 155}, {"id": 9272161, "category_id": 3, "iscrowd": 0, "bbox": [48, 194, 13, 7], "area": 44}, {"id": 11308632, "category_id": 3, "iscrowd": 0, "bbox": [615, 193, 25, 14], "area": 311}, {"id": 6384747, "category_id": 3, "iscrowd": 0, "bbox": [484, 191, 93, 74], "area": 3037}, {"id": 7565155, "category_id": 3, "iscrowd": 1, "bbox": [1, 182, 616, 22], "area": 2386}, {"id": 6509122, "category_id": 8, "iscrowd": 0, "bbox": [513, 191, 59, 29], "area": 994}, {"id": 7238516, "category_id": 19, "iscrowd": 0, "bbox": [316, 157, 197, 164], "area": 16662}, {"id": 11514287, "category_id": 19, "iscrowd": 0, "bbox": [331, 145, 206, 70], "area": 1818}, {"id": 3558203, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 208], "area": 72752}, {"id": 15194312, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 135], "area": 41774}, {"id": 6396804, "category_id": 193, "iscrowd": 0, "bbox": [0, 92, 640, 337], "area": 106049}], "file_name": "000000121242.png", "image_id": 121242}, {"segments_info": [{"id": 5197389, "category_id": 1, "iscrowd": 0, "bbox": [46, 1, 66, 99], "area": 3304}, {"id": 2828332, "category_id": 1, "iscrowd": 0, "bbox": [104, 152, 338, 478], "area": 68177}, {"id": 5198164, "category_id": 1, "iscrowd": 0, "bbox": [367, 0, 43, 37], "area": 845}, {"id": 10323314, "category_id": 1, "iscrowd": 0, "bbox": [159, 0, 101, 56], "area": 2549}, {"id": 3156522, "category_id": 1, "iscrowd": 0, "bbox": [411, 0, 32, 56], "area": 1351}, {"id": 5655879, "category_id": 1, "iscrowd": 0, "bbox": [204, 0, 40, 34], "area": 351}, {"id": 7299158, "category_id": 1, "iscrowd": 0, "bbox": [256, 3, 98, 63], "area": 2253}, {"id": 3288108, "category_id": 1, "iscrowd": 0, "bbox": [452, 0, 28, 51], "area": 913}, {"id": 3683636, "category_id": 1, "iscrowd": 0, "bbox": [86, 0, 31, 63], "area": 1304}, {"id": 8818066, "category_id": 15, "iscrowd": 0, "bbox": [333, 412, 146, 90], "area": 6529}, {"id": 13811672, "category_id": 28, "iscrowd": 0, "bbox": [163, 80, 273, 242], "area": 21792}, {"id": 3818314, "category_id": 31, "iscrowd": 0, "bbox": [222, 320, 66, 58], "area": 2191}, {"id": 1643802, "category_id": 77, "iscrowd": 0, "bbox": [239, 184, 25, 25], "area": 125}, {"id": 10658980, "category_id": 149, "iscrowd": 0, "bbox": [0, 131, 480, 318], "area": 76480}, {"id": 4015432, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 21, 79], "area": 1380}, {"id": 9343893, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 108432}, {"id": 1973277, "category_id": 195, "iscrowd": 0, "bbox": [123, 464, 38, 126], "area": 3219}, {"id": 7237743, "category_id": 199, "iscrowd": 0, "bbox": [16, 0, 278, 39], "area": 1543}], "file_name": "000000121417.png", "image_id": 121417}, {"segments_info": [{"id": 4147027, "category_id": 1, "iscrowd": 0, "bbox": [286, 51, 192, 303], "area": 23590}, {"id": 2830905, "category_id": 1, "iscrowd": 0, "bbox": [175, 126, 125, 157], "area": 7938}, {"id": 4209721, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 255, 480], "area": 60158}, {"id": 5065292, "category_id": 1, "iscrowd": 0, "bbox": [567, 65, 73, 356], "area": 13539}, {"id": 4738127, "category_id": 1, "iscrowd": 0, "bbox": [46, 230, 117, 145], "area": 9403}, {"id": 6975346, "category_id": 1, "iscrowd": 0, "bbox": [547, 260, 49, 67], "area": 1495}, {"id": 2372406, "category_id": 133, "iscrowd": 0, "bbox": [136, 156, 56, 42], "area": 1830}, {"id": 5268835, "category_id": 186, "iscrowd": 0, "bbox": [73, 0, 567, 210], "area": 56051}, {"id": 14411235, "category_id": 187, "iscrowd": 0, "bbox": [446, 122, 177, 258], "area": 14831}, {"id": 4606286, "category_id": 189, "iscrowd": 0, "bbox": [74, 264, 542, 216], "area": 46736}, {"id": 3285271, "category_id": 195, "iscrowd": 0, "bbox": [98, 383, 542, 97], "area": 7709}, {"id": 14738916, "category_id": 197, "iscrowd": 0, "bbox": [477, 126, 99, 181], "area": 6372}], "file_name": "000000121497.png", "image_id": 121497}, {"segments_info": [{"id": 8224136, "category_id": 3, "iscrowd": 0, "bbox": [408, 260, 120, 42], "area": 1609}, {"id": 2827822, "category_id": 15, "iscrowd": 0, "bbox": [19, 448, 120, 121], "area": 1724}, {"id": 3355434, "category_id": 15, "iscrowd": 0, "bbox": [68, 384, 108, 70], "area": 1832}, {"id": 8820140, "category_id": 28, "iscrowd": 0, "bbox": [94, 60, 485, 197], "area": 52341}, {"id": 855830, "category_id": 62, "iscrowd": 0, "bbox": [19, 452, 180, 125], "area": 7150}, {"id": 986135, "category_id": 62, "iscrowd": 0, "bbox": [397, 476, 149, 114], "area": 10764}, {"id": 4076328, "category_id": 67, "iscrowd": 0, "bbox": [26, 358, 109, 37], "area": 1343}, {"id": 2498614, "category_id": 67, "iscrowd": 0, "bbox": [25, 429, 386, 163], "area": 29595}, {"id": 3418416, "category_id": 128, "iscrowd": 0, "bbox": [0, 163, 589, 126], "area": 6171}, {"id": 1315609, "category_id": 171, "iscrowd": 0, "bbox": [448, 397, 143, 117], "area": 11586}, {"id": 3091760, "category_id": 184, "iscrowd": 0, "bbox": [19, 0, 593, 312], "area": 69936}, {"id": 4079176, "category_id": 185, "iscrowd": 0, "bbox": [22, 240, 570, 180], "area": 49814}, {"id": 12965345, "category_id": 187, "iscrowd": 0, "bbox": [263, 23, 327, 113], "area": 7717}, {"id": 2039324, "category_id": 189, "iscrowd": 0, "bbox": [0, 356, 274, 234], "area": 1772}, {"id": 5196632, "category_id": 191, "iscrowd": 0, "bbox": [77, 275, 337, 37], "area": 5716}, {"id": 2899772, "category_id": 193, "iscrowd": 0, "bbox": [0, 276, 274, 218], "area": 19161}, {"id": 1315097, "category_id": 194, "iscrowd": 0, "bbox": [272, 497, 319, 95], "area": 12218}], "file_name": "000000121506.png", "image_id": 121506}, {"segments_info": [{"id": 13277880, "category_id": 17, "iscrowd": 0, "bbox": [188, 102, 50, 47], "area": 1717}, {"id": 7167853, "category_id": 72, "iscrowd": 0, "bbox": [97, 57, 202, 137], "area": 24431}, {"id": 9339273, "category_id": 84, "iscrowd": 0, "bbox": [311, 326, 13, 69], "area": 311}, {"id": 6715539, "category_id": 84, "iscrowd": 0, "bbox": [544, 319, 48, 14], "area": 445}, {"id": 5663363, "category_id": 84, "iscrowd": 0, "bbox": [332, 423, 41, 10], "area": 232}, {"id": 1521460, "category_id": 84, "iscrowd": 0, "bbox": [614, 399, 26, 32], "area": 676}, {"id": 3489364, "category_id": 84, "iscrowd": 0, "bbox": [220, 411, 49, 28], "area": 1183}, {"id": 6905730, "category_id": 84, "iscrowd": 0, "bbox": [315, 327, 18, 68], "area": 528}, {"id": 6578309, "category_id": 84, "iscrowd": 0, "bbox": [339, 329, 13, 65], "area": 339}, {"id": 6648704, "category_id": 84, "iscrowd": 0, "bbox": [297, 322, 21, 74], "area": 880}, {"id": 9019832, "category_id": 84, "iscrowd": 0, "bbox": [600, 246, 40, 62], "area": 2248}, {"id": 6846599, "category_id": 84, "iscrowd": 0, "bbox": [540, 332, 51, 15], "area": 378}, {"id": 5195602, "category_id": 84, "iscrowd": 0, "bbox": [332, 329, 15, 63], "area": 319}, {"id": 3557723, "category_id": 84, "iscrowd": 0, "bbox": [595, 349, 44, 13], "area": 461}, {"id": 3755652, "category_id": 84, "iscrowd": 0, "bbox": [590, 327, 34, 24], "area": 686}, {"id": 4016223, "category_id": 84, "iscrowd": 1, "bbox": [34, 310, 568, 156], "area": 21519}, {"id": 3425630, "category_id": 156, "iscrowd": 0, "bbox": [0, 139, 640, 339], "area": 68313}, {"id": 9215138, "category_id": 180, "iscrowd": 0, "bbox": [353, 97, 287, 248], "area": 58558}, {"id": 9410211, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 362], "area": 122134}], "file_name": "000000121586.png", "image_id": 121586}, {"segments_info": [{"id": 7958126, "category_id": 1, "iscrowd": 0, "bbox": [256, 122, 123, 163], "area": 9630}, {"id": 1974301, "category_id": 41, "iscrowd": 0, "bbox": [259, 109, 86, 78], "area": 1660}, {"id": 16711421, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 172], "area": 31413}, {"id": 11048028, "category_id": 192, "iscrowd": 0, "bbox": [463, 167, 37, 166], "area": 3869}, {"id": 11447681, "category_id": 197, "iscrowd": 0, "bbox": [465, 267, 27, 71], "area": 1470}, {"id": 11503795, "category_id": 199, "iscrowd": 0, "bbox": [0, 16, 472, 384], "area": 148962}], "file_name": "000000121591.png", "image_id": 121591}, {"segments_info": [{"id": 5260127, "category_id": 1, "iscrowd": 0, "bbox": [153, 83, 181, 160], "area": 8416}, {"id": 5988712, "category_id": 42, "iscrowd": 0, "bbox": [178, 240, 266, 50], "area": 8757}, {"id": 12890530, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 169961}], "file_name": "000000121673.png", "image_id": 121673}, {"segments_info": [{"id": 3487038, "category_id": 1, "iscrowd": 0, "bbox": [49, 35, 33, 30], "area": 742}, {"id": 7034183, "category_id": 1, "iscrowd": 0, "bbox": [329, 5, 108, 96], "area": 6646}, {"id": 4735839, "category_id": 1, "iscrowd": 0, "bbox": [83, 16, 45, 91], "area": 2330}, {"id": 9208174, "category_id": 1, "iscrowd": 0, "bbox": [164, 80, 221, 341], "area": 39459}, {"id": 2759703, "category_id": 1, "iscrowd": 0, "bbox": [25, 18, 93, 112], "area": 5943}, {"id": 6046242, "category_id": 1, "iscrowd": 0, "bbox": [541, 2, 83, 108], "area": 3840}, {"id": 4341321, "category_id": 1, "iscrowd": 0, "bbox": [442, 0, 73, 95], "area": 5421}, {"id": 6969162, "category_id": 1, "iscrowd": 0, "bbox": [225, 3, 97, 95], "area": 5926}, {"id": 10322303, "category_id": 1, "iscrowd": 0, "bbox": [186, 1, 52, 84], "area": 2570}, {"id": 7228460, "category_id": 1, "iscrowd": 0, "bbox": [118, 6, 101, 123], "area": 7141}, {"id": 6443069, "category_id": 1, "iscrowd": 0, "bbox": [498, 30, 139, 396], "area": 30273}, {"id": 5387037, "category_id": 43, "iscrowd": 0, "bbox": [324, 169, 48, 139], "area": 3354}, {"id": 6109221, "category_id": 43, "iscrowd": 0, "bbox": [350, 167, 63, 122], "area": 2661}, {"id": 8099237, "category_id": 43, "iscrowd": 0, "bbox": [314, 286, 128, 68], "area": 6171}, {"id": 5453601, "category_id": 43, "iscrowd": 0, "bbox": [278, 173, 54, 138], "area": 3725}, {"id": 7449010, "category_id": 145, "iscrowd": 0, "bbox": [0, 265, 640, 161], "area": 50053}, {"id": 8540181, "category_id": 199, "iscrowd": 0, "bbox": [31, 93, 609, 203], "area": 39712}], "file_name": "000000121744.png", "image_id": 121744}, {"segments_info": [{"id": 8226225, "category_id": 1, "iscrowd": 0, "bbox": [82, 192, 195, 415], "area": 38806}, {"id": 12825829, "category_id": 28, "iscrowd": 0, "bbox": [123, 77, 239, 211], "area": 25402}, {"id": 1845875, "category_id": 62, "iscrowd": 0, "bbox": [102, 332, 91, 254], "area": 5302}, {"id": 1327284, "category_id": 190, "iscrowd": 0, "bbox": [0, 490, 427, 150], "area": 27449}, {"id": 4541035, "category_id": 191, "iscrowd": 0, "bbox": [0, 509, 427, 131], "area": 19254}, {"id": 2893270, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 538], "area": 156609}], "file_name": "000000122046.png", "image_id": 122046}, {"segments_info": [{"id": 3289651, "category_id": 1, "iscrowd": 0, "bbox": [77, 226, 79, 207], "area": 5971}, {"id": 6576471, "category_id": 1, "iscrowd": 0, "bbox": [568, 298, 15, 23], "area": 135}, {"id": 6839920, "category_id": 1, "iscrowd": 0, "bbox": [591, 300, 7, 20], "area": 90}, {"id": 7169639, "category_id": 1, "iscrowd": 0, "bbox": [505, 305, 15, 38], "area": 210}, {"id": 3223858, "category_id": 1, "iscrowd": 0, "bbox": [6, 287, 30, 75], "area": 1322}, {"id": 6775659, "category_id": 1, "iscrowd": 0, "bbox": [162, 256, 27, 69], "area": 1194}, {"id": 8420218, "category_id": 2, "iscrowd": 0, "bbox": [547, 304, 5, 11], "area": 50}, {"id": 4473409, "category_id": 2, "iscrowd": 0, "bbox": [88, 358, 42, 103], "area": 2894}, {"id": 14011581, "category_id": 3, "iscrowd": 0, "bbox": [552, 273, 15, 12], "area": 102}, {"id": 9667707, "category_id": 3, "iscrowd": 0, "bbox": [367, 281, 87, 78], "area": 1502}, {"id": 10324864, "category_id": 3, "iscrowd": 0, "bbox": [601, 297, 32, 19], "area": 474}, {"id": 13551551, "category_id": 3, "iscrowd": 0, "bbox": [535, 279, 14, 16], "area": 178}, {"id": 8172988, "category_id": 3, "iscrowd": 0, "bbox": [545, 285, 13, 15], "area": 106}, {"id": 10590352, "category_id": 3, "iscrowd": 0, "bbox": [320, 293, 127, 108], "area": 11010}, {"id": 11906215, "category_id": 3, "iscrowd": 0, "bbox": [516, 302, 30, 18], "area": 448}, {"id": 10982780, "category_id": 3, "iscrowd": 0, "bbox": [461, 303, 48, 45], "area": 1727}, {"id": 5260864, "category_id": 4, "iscrowd": 0, "bbox": [35, 302, 50, 103], "area": 3360}, {"id": 9602934, "category_id": 8, "iscrowd": 0, "bbox": [158, 264, 166, 149], "area": 20035}, {"id": 10457988, "category_id": 10, "iscrowd": 0, "bbox": [513, 266, 6, 8], "area": 31}, {"id": 4997947, "category_id": 10, "iscrowd": 0, "bbox": [390, 252, 11, 18], "area": 140}, {"id": 4474173, "category_id": 10, "iscrowd": 0, "bbox": [339, 192, 6, 17], "area": 91}, {"id": 7693205, "category_id": 10, "iscrowd": 0, "bbox": [581, 276, 5, 11], "area": 52}, {"id": 9008240, "category_id": 10, "iscrowd": 0, "bbox": [493, 288, 4, 8], "area": 30}, {"id": 12105025, "category_id": 10, "iscrowd": 0, "bbox": [524, 269, 5, 4], "area": 17}, {"id": 4540993, "category_id": 10, "iscrowd": 0, "bbox": [307, 237, 13, 30], "area": 309}, {"id": 4406100, "category_id": 10, "iscrowd": 0, "bbox": [325, 246, 9, 20], "area": 161}, {"id": 2237475, "category_id": 27, "iscrowd": 0, "bbox": [85, 297, 45, 62], "area": 2305}, {"id": 14079964, "category_id": 149, "iscrowd": 0, "bbox": [0, 251, 640, 229], "area": 61499}, {"id": 3902845, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 619, 394], "area": 84498}, {"id": 7368039, "category_id": 185, "iscrowd": 0, "bbox": [436, 290, 36, 50], "area": 879}, {"id": 16579835, "category_id": 187, "iscrowd": 0, "bbox": [393, 0, 247, 79], "area": 10235}, {"id": 12435649, "category_id": 191, "iscrowd": 0, "bbox": [0, 360, 177, 90], "area": 5984}, {"id": 11250082, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 364], "area": 85825}], "file_name": "000000122166.png", "image_id": 122166}, {"segments_info": [{"id": 6582884, "category_id": 1, "iscrowd": 0, "bbox": [163, 295, 61, 75], "area": 2632}, {"id": 4612683, "category_id": 1, "iscrowd": 0, "bbox": [86, 274, 55, 89], "area": 3034}, {"id": 4084048, "category_id": 41, "iscrowd": 0, "bbox": [97, 361, 26, 12], "area": 193}, {"id": 4280402, "category_id": 41, "iscrowd": 0, "bbox": [180, 363, 24, 17], "area": 210}, {"id": 2964789, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 425, 640], "area": 227344}, {"id": 989461, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 277, 192], "area": 10929}, {"id": 330248, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 211, 133], "area": 17377}], "file_name": "000000122217.png", "image_id": 122217}, {"segments_info": [{"id": 8354149, "category_id": 1, "iscrowd": 0, "bbox": [372, 157, 46, 51], "area": 1509}, {"id": 7827304, "category_id": 6, "iscrowd": 0, "bbox": [81, 12, 461, 456], "area": 175448}, {"id": 5132115, "category_id": 149, "iscrowd": 0, "bbox": [90, 233, 550, 247], "area": 43367}, {"id": 6840413, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 257], "area": 25040}, {"id": 14203036, "category_id": 187, "iscrowd": 0, "bbox": [18, 0, 622, 168], "area": 30534}, {"id": 4935508, "category_id": 191, "iscrowd": 0, "bbox": [0, 215, 127, 265], "area": 25021}, {"id": 11046780, "category_id": 197, "iscrowd": 0, "bbox": [501, 0, 59, 202], "area": 5936}], "file_name": "000000122606.png", "image_id": 122606}, {"segments_info": [{"id": 3884892, "category_id": 1, "iscrowd": 0, "bbox": [227, 109, 312, 218], "area": 17744}, {"id": 11714497, "category_id": 42, "iscrowd": 0, "bbox": [134, 245, 416, 99], "area": 22189}, {"id": 4804170, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 262881}], "file_name": "000000122672.png", "image_id": 122672}, {"segments_info": [{"id": 4013806, "category_id": 13, "iscrowd": 0, "bbox": [216, 110, 141, 143], "area": 15477}, {"id": 66053, "category_id": 184, "iscrowd": 0, "bbox": [234, 266, 77, 60], "area": 1893}, {"id": 263949, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 342], "area": 137027}], "file_name": "000000122745.png", "image_id": 122745}, {"segments_info": [{"id": 7374230, "category_id": 16, "iscrowd": 0, "bbox": [12, 170, 125, 117], "area": 4877}, {"id": 6649222, "category_id": 16, "iscrowd": 0, "bbox": [318, 159, 235, 172], "area": 10771}, {"id": 12046040, "category_id": 191, "iscrowd": 0, "bbox": [0, 171, 640, 179], "area": 78673}, {"id": 4554592, "category_id": 193, "iscrowd": 0, "bbox": [0, 309, 640, 52], "area": 16037}], "file_name": "000000122927.png", "image_id": 122927}, {"segments_info": [{"id": 3752018, "category_id": 1, "iscrowd": 0, "bbox": [289, 289, 122, 129], "area": 10155}, {"id": 2440506, "category_id": 1, "iscrowd": 0, "bbox": [428, 0, 40, 104], "area": 2734}, {"id": 1318432, "category_id": 1, "iscrowd": 0, "bbox": [41, 0, 105, 201], "area": 9747}, {"id": 2239792, "category_id": 1, "iscrowd": 0, "bbox": [107, 1, 81, 215], "area": 11234}, {"id": 1645859, "category_id": 1, "iscrowd": 0, "bbox": [497, 65, 111, 176], "area": 11223}, {"id": 3223648, "category_id": 1, "iscrowd": 0, "bbox": [441, 212, 103, 172], "area": 9599}, {"id": 5921925, "category_id": 1, "iscrowd": 0, "bbox": [243, 133, 76, 113], "area": 4021}, {"id": 4407159, "category_id": 1, "iscrowd": 0, "bbox": [145, 180, 92, 160], "area": 7416}, {"id": 5004899, "category_id": 1, "iscrowd": 0, "bbox": [209, 12, 48, 94], "area": 2507}, {"id": 2436669, "category_id": 1, "iscrowd": 0, "bbox": [204, 65, 84, 136], "area": 6637}, {"id": 4347752, "category_id": 1, "iscrowd": 0, "bbox": [58, 290, 141, 128], "area": 8748}, {"id": 6188923, "category_id": 1, "iscrowd": 0, "bbox": [331, 20, 68, 97], "area": 3552}, {"id": 4281716, "category_id": 1, "iscrowd": 0, "bbox": [301, 92, 52, 98], "area": 3127}, {"id": 3226446, "category_id": 1, "iscrowd": 1, "bbox": [1, 1, 639, 373], "area": 53622}, {"id": 4886740, "category_id": 59, "iscrowd": 0, "bbox": [268, 335, 23, 42], "area": 589}, {"id": 5938650, "category_id": 59, "iscrowd": 0, "bbox": [399, 129, 20, 7], "area": 83}, {"id": 3699383, "category_id": 59, "iscrowd": 0, "bbox": [147, 349, 65, 30], "area": 627}, {"id": 4427222, "category_id": 59, "iscrowd": 0, "bbox": [253, 232, 45, 26], "area": 550}, {"id": 5013427, "category_id": 59, "iscrowd": 0, "bbox": [138, 342, 50, 18], "area": 442}, {"id": 3896252, "category_id": 59, "iscrowd": 0, "bbox": [225, 271, 39, 20], "area": 249}, {"id": 5671356, "category_id": 59, "iscrowd": 0, "bbox": [387, 144, 20, 7], "area": 99}, {"id": 4424127, "category_id": 59, "iscrowd": 0, "bbox": [314, 206, 26, 16], "area": 140}, {"id": 4819659, "category_id": 59, "iscrowd": 0, "bbox": [341, 184, 30, 9], "area": 128}, {"id": 5606340, "category_id": 59, "iscrowd": 0, "bbox": [408, 169, 26, 12], "area": 220}, {"id": 5999046, "category_id": 59, "iscrowd": 0, "bbox": [319, 292, 26, 16], "area": 206}, {"id": 4095427, "category_id": 59, "iscrowd": 0, "bbox": [241, 283, 25, 14], "area": 228}, {"id": 4228047, "category_id": 59, "iscrowd": 0, "bbox": [328, 258, 43, 14], "area": 269}, {"id": 7967384, "category_id": 59, "iscrowd": 1, "bbox": [353, 115, 129, 111], "area": 1158}, {"id": 7908750, "category_id": 67, "iscrowd": 0, "bbox": [176, 304, 78, 61], "area": 2621}, {"id": 7579530, "category_id": 67, "iscrowd": 0, "bbox": [135, 116, 313, 300], "area": 15641}, {"id": 2040871, "category_id": 77, "iscrowd": 0, "bbox": [443, 9, 7, 8], "area": 49}, {"id": 5277612, "category_id": 118, "iscrowd": 0, "bbox": [0, 61, 640, 363], "area": 37738}, {"id": 3820889, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 318, 260], "area": 18943}, {"id": 7898717, "category_id": 189, "iscrowd": 0, "bbox": [154, 173, 243, 236], "area": 2613}, {"id": 7771061, "category_id": 195, "iscrowd": 0, "bbox": [223, 258, 134, 166], "area": 3805}, {"id": 6910060, "category_id": 196, "iscrowd": 0, "bbox": [193, 127, 183, 281], "area": 2999}, {"id": 5127727, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 63], "area": 7313}, {"id": 9069943, "category_id": 200, "iscrowd": 0, "bbox": [0, 181, 530, 243], "area": 12467}], "file_name": "000000122962.png", "image_id": 122962}, {"segments_info": [{"id": 6644577, "category_id": 24, "iscrowd": 0, "bbox": [0, 5, 433, 324], "area": 23033}, {"id": 5855581, "category_id": 24, "iscrowd": 0, "bbox": [1, 50, 386, 277], "area": 69369}], "file_name": "000000122969.png", "image_id": 122969}, {"segments_info": [{"id": 8680814, "category_id": 8, "iscrowd": 0, "bbox": [50, 226, 30, 62], "area": 1133}, {"id": 5210539, "category_id": 8, "iscrowd": 0, "bbox": [0, 220, 39, 65], "area": 1888}, {"id": 11573640, "category_id": 8, "iscrowd": 0, "bbox": [73, 183, 82, 86], "area": 2249}, {"id": 5656395, "category_id": 8, "iscrowd": 0, "bbox": [76, 30, 527, 324], "area": 57028}, {"id": 6381703, "category_id": 128, "iscrowd": 0, "bbox": [407, 236, 19, 14], "area": 198}, {"id": 8419444, "category_id": 149, "iscrowd": 0, "bbox": [0, 251, 640, 176], "area": 69996}, {"id": 6779754, "category_id": 184, "iscrowd": 0, "bbox": [407, 204, 233, 62], "area": 5850}, {"id": 16577243, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 259], "area": 121657}], "file_name": "000000123131.png", "image_id": 123131}, {"segments_info": [{"id": 5131366, "category_id": 1, "iscrowd": 0, "bbox": [176, 1, 63, 47], "area": 2004}, {"id": 11050657, "category_id": 1, "iscrowd": 0, "bbox": [92, 84, 237, 266], "area": 17678}, {"id": 2764339, "category_id": 1, "iscrowd": 0, "bbox": [410, 160, 188, 224], "area": 17215}, {"id": 8487298, "category_id": 1, "iscrowd": 0, "bbox": [170, 2, 10, 17], "area": 131}, {"id": 6250889, "category_id": 1, "iscrowd": 0, "bbox": [243, 175, 203, 206], "area": 15948}, {"id": 5329003, "category_id": 1, "iscrowd": 0, "bbox": [78, 2, 109, 52], "area": 2684}, {"id": 8224132, "category_id": 1, "iscrowd": 0, "bbox": [201, 0, 68, 62], "area": 1879}, {"id": 7171706, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 63, 49], "area": 1242}, {"id": 8092027, "category_id": 1, "iscrowd": 0, "bbox": [397, 0, 58, 79], "area": 3302}, {"id": 4407921, "category_id": 1, "iscrowd": 0, "bbox": [124, 0, 54, 34], "area": 766}, {"id": 8289405, "category_id": 1, "iscrowd": 0, "bbox": [257, 0, 49, 67], "area": 1964}, {"id": 1778491, "category_id": 15, "iscrowd": 0, "bbox": [444, 39, 49, 43], "area": 1662}, {"id": 3816768, "category_id": 39, "iscrowd": 0, "bbox": [222, 56, 61, 135], "area": 1083}, {"id": 3224375, "category_id": 40, "iscrowd": 0, "bbox": [243, 224, 30, 56], "area": 1209}, {"id": 5387566, "category_id": 62, "iscrowd": 0, "bbox": [556, 53, 53, 39], "area": 869}, {"id": 3945779, "category_id": 62, "iscrowd": 0, "bbox": [510, 48, 48, 40], "area": 703}, {"id": 4353398, "category_id": 145, "iscrowd": 0, "bbox": [0, 35, 640, 357], "area": 153304}], "file_name": "000000123213.png", "image_id": 123213}, {"segments_info": [{"id": 3893120, "category_id": 51, "iscrowd": 0, "bbox": [11, 15, 591, 585], "area": 224387}, {"id": 2912883, "category_id": 56, "iscrowd": 0, "bbox": [37, 45, 257, 268], "area": 24379}, {"id": 1656912, "category_id": 56, "iscrowd": 0, "bbox": [67, 394, 113, 65], "area": 4547}, {"id": 3251859, "category_id": 56, "iscrowd": 0, "bbox": [194, 246, 106, 97], "area": 4530}, {"id": 4696219, "category_id": 56, "iscrowd": 0, "bbox": [233, 344, 115, 114], "area": 5452}, {"id": 930888, "category_id": 56, "iscrowd": 0, "bbox": [297, 448, 92, 120], "area": 6095}, {"id": 1595232, "category_id": 56, "iscrowd": 0, "bbox": [91, 291, 62, 28], "area": 711}, {"id": 2053472, "category_id": 56, "iscrowd": 0, "bbox": [354, 65, 232, 318], "area": 42430}, {"id": 3640207, "category_id": 56, "iscrowd": 0, "bbox": [267, 248, 92, 110], "area": 4310}, {"id": 4103323, "category_id": 56, "iscrowd": 0, "bbox": [308, 130, 65, 99], "area": 4118}, {"id": 1457992, "category_id": 56, "iscrowd": 0, "bbox": [158, 465, 141, 105], "area": 9893}, {"id": 799302, "category_id": 56, "iscrowd": 0, "bbox": [385, 463, 53, 74], "area": 2264}, {"id": 1059690, "category_id": 57, "iscrowd": 0, "bbox": [49, 393, 24, 45], "area": 792}, {"id": 2854099, "category_id": 57, "iscrowd": 0, "bbox": [323, 107, 14, 16], "area": 155}, {"id": 2912433, "category_id": 57, "iscrowd": 0, "bbox": [425, 236, 34, 19], "area": 436}, {"id": 728928, "category_id": 57, "iscrowd": 0, "bbox": [549, 245, 43, 46], "area": 1108}, {"id": 1795239, "category_id": 57, "iscrowd": 0, "bbox": [385, 375, 16, 16], "area": 173}, {"id": 2978474, "category_id": 57, "iscrowd": 0, "bbox": [139, 212, 21, 15], "area": 214}, {"id": 2914496, "category_id": 57, "iscrowd": 0, "bbox": [289, 32, 77, 60], "area": 1970}, {"id": 1794462, "category_id": 57, "iscrowd": 0, "bbox": [306, 307, 23, 20], "area": 283}, {"id": 1858458, "category_id": 57, "iscrowd": 0, "bbox": [391, 73, 37, 16], "area": 486}], "file_name": "000000123321.png", "image_id": 123321}, {"segments_info": [{"id": 6842490, "category_id": 1, "iscrowd": 0, "bbox": [109, 112, 286, 349], "area": 58269}, {"id": 3156023, "category_id": 77, "iscrowd": 0, "bbox": [147, 182, 25, 82], "area": 1546}, {"id": 11576240, "category_id": 90, "iscrowd": 0, "bbox": [212, 314, 29, 27], "area": 234}, {"id": 7431041, "category_id": 90, "iscrowd": 0, "bbox": [279, 375, 17, 11], "area": 102}, {"id": 8095115, "category_id": 112, "iscrowd": 0, "bbox": [121, 69, 243, 275], "area": 27690}, {"id": 9080459, "category_id": 133, "iscrowd": 0, "bbox": [110, 0, 530, 467], "area": 135141}, {"id": 9800590, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 83904}], "file_name": "000000123480.png", "image_id": 123480}, {"segments_info": [{"id": 5461598, "category_id": 16, "iscrowd": 0, "bbox": [212, 201, 97, 190], "area": 11785}, {"id": 10724523, "category_id": 16, "iscrowd": 0, "bbox": [0, 45, 175, 105], "area": 9679}, {"id": 3750466, "category_id": 16, "iscrowd": 0, "bbox": [140, 0, 128, 60], "area": 5321}, {"id": 11711160, "category_id": 16, "iscrowd": 0, "bbox": [333, 432, 147, 155], "area": 13044}, {"id": 6316909, "category_id": 16, "iscrowd": 0, "bbox": [355, 0, 125, 66], "area": 4615}, {"id": 15461357, "category_id": 48, "iscrowd": 0, "bbox": [55, 290, 122, 32], "area": 975}, {"id": 4158902, "category_id": 122, "iscrowd": 0, "bbox": [195, 355, 133, 82], "area": 7340}, {"id": 6909556, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 253540}], "file_name": "000000123585.png", "image_id": 123585}, {"segments_info": [{"id": 6126737, "category_id": 1, "iscrowd": 0, "bbox": [115, 1, 155, 282], "area": 23637}, {"id": 8360390, "category_id": 1, "iscrowd": 0, "bbox": [456, 2, 90, 120], "area": 6499}, {"id": 6000299, "category_id": 1, "iscrowd": 0, "bbox": [122, 257, 217, 223], "area": 27889}, {"id": 4615560, "category_id": 1, "iscrowd": 0, "bbox": [361, 206, 197, 216], "area": 28715}, {"id": 3558291, "category_id": 1, "iscrowd": 0, "bbox": [300, 0, 264, 352], "area": 47900}, {"id": 10009814, "category_id": 51, "iscrowd": 0, "bbox": [524, 377, 116, 103], "area": 10762}, {"id": 2187914, "category_id": 62, "iscrowd": 0, "bbox": [83, 375, 76, 99], "area": 3848}, {"id": 4289444, "category_id": 67, "iscrowd": 0, "bbox": [270, 412, 190, 63], "area": 5879}, {"id": 4747129, "category_id": 84, "iscrowd": 0, "bbox": [618, 186, 22, 95], "area": 914}, {"id": 3957876, "category_id": 84, "iscrowd": 0, "bbox": [579, 174, 34, 103], "area": 1115}, {"id": 1978938, "category_id": 84, "iscrowd": 0, "bbox": [595, 180, 40, 100], "area": 1943}, {"id": 6127510, "category_id": 84, "iscrowd": 0, "bbox": [604, 0, 36, 43], "area": 1354}, {"id": 6986921, "category_id": 84, "iscrowd": 0, "bbox": [589, 127, 51, 33], "area": 1018}, {"id": 7374713, "category_id": 87, "iscrowd": 0, "bbox": [251, 386, 66, 66], "area": 1090}, {"id": 10206155, "category_id": 112, "iscrowd": 0, "bbox": [103, 0, 266, 290], "area": 31714}, {"id": 4483739, "category_id": 118, "iscrowd": 0, "bbox": [0, 235, 336, 245], "area": 19614}, {"id": 7971763, "category_id": 156, "iscrowd": 0, "bbox": [1, 0, 639, 373], "area": 26231}, {"id": 3564174, "category_id": 189, "iscrowd": 0, "bbox": [267, 358, 312, 122], "area": 966}, {"id": 13561073, "category_id": 195, "iscrowd": 0, "bbox": [351, 156, 277, 324], "area": 7490}, {"id": 10470863, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 547, 274], "area": 32159}], "file_name": "000000123633.png", "image_id": 123633}, {"segments_info": [{"id": 3813171, "category_id": 3, "iscrowd": 0, "bbox": [592, 301, 17, 19], "area": 249}, {"id": 10262941, "category_id": 3, "iscrowd": 0, "bbox": [432, 183, 16, 13], "area": 191}, {"id": 9800851, "category_id": 3, "iscrowd": 0, "bbox": [506, 301, 23, 12], "area": 176}, {"id": 6970456, "category_id": 7, "iscrowd": 0, "bbox": [299, 134, 312, 258], "area": 16554}, {"id": 9471625, "category_id": 7, "iscrowd": 0, "bbox": [266, 15, 35, 49], "area": 1015}, {"id": 6514030, "category_id": 128, "iscrowd": 0, "bbox": [19, 0, 451, 418], "area": 17526}, {"id": 3815227, "category_id": 147, "iscrowd": 0, "bbox": [0, 0, 640, 481], "area": 80331}, {"id": 7369854, "category_id": 149, "iscrowd": 0, "bbox": [384, 177, 256, 175], "area": 2644}, {"id": 10790573, "category_id": 151, "iscrowd": 0, "bbox": [0, 322, 263, 159], "area": 24411}, {"id": 3756110, "category_id": 184, "iscrowd": 0, "bbox": [50, 0, 590, 312], "area": 18441}, {"id": 9606817, "category_id": 185, "iscrowd": 0, "bbox": [0, 50, 579, 25], "area": 2782}, {"id": 8621724, "category_id": 191, "iscrowd": 0, "bbox": [16, 253, 624, 94], "area": 4369}, {"id": 7238786, "category_id": 194, "iscrowd": 0, "bbox": [0, 51, 640, 346], "area": 10457}, {"id": 5657688, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 481], "area": 121557}], "file_name": "000000124277.png", "image_id": 124277}, {"segments_info": [{"id": 4605529, "category_id": 1, "iscrowd": 0, "bbox": [195, 168, 90, 215], "area": 7780}, {"id": 5654832, "category_id": 38, "iscrowd": 0, "bbox": [122, 180, 71, 89], "area": 2583}, {"id": 6185045, "category_id": 128, "iscrowd": 0, "bbox": [68, 234, 21, 20], "area": 256}, {"id": 5856605, "category_id": 151, "iscrowd": 0, "bbox": [82, 232, 115, 33], "area": 1119}, {"id": 8101822, "category_id": 154, "iscrowd": 0, "bbox": [0, 330, 375, 170], "area": 55523}, {"id": 4474955, "category_id": 161, "iscrowd": 0, "bbox": [167, 149, 208, 175], "area": 10427}, {"id": 3032136, "category_id": 185, "iscrowd": 0, "bbox": [107, 223, 268, 141], "area": 18546}, {"id": 15785418, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 375, 271], "area": 80489}, {"id": 3956068, "category_id": 193, "iscrowd": 0, "bbox": [0, 240, 216, 109], "area": 10363}], "file_name": "000000124442.png", "image_id": 124442}, {"segments_info": [{"id": 4741472, "category_id": 21, "iscrowd": 0, "bbox": [524, 65, 49, 103], "area": 3290}, {"id": 2636362, "category_id": 21, "iscrowd": 0, "bbox": [26, 47, 528, 376], "area": 106368}, {"id": 3560305, "category_id": 21, "iscrowd": 0, "bbox": [430, 190, 210, 203], "area": 26338}, {"id": 6191500, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 268], "area": 64348}, {"id": 8436177, "category_id": 193, "iscrowd": 0, "bbox": [427, 231, 51, 54], "area": 1344}, {"id": 9221835, "category_id": 194, "iscrowd": 0, "bbox": [0, 150, 640, 330], "area": 102902}], "file_name": "000000124636.png", "image_id": 124636}, {"segments_info": [{"id": 663116, "category_id": 62, "iscrowd": 0, "bbox": [51, 194, 87, 110], "area": 2625}, {"id": 4083551, "category_id": 62, "iscrowd": 0, "bbox": [582, 338, 58, 125], "area": 4984}, {"id": 1850976, "category_id": 62, "iscrowd": 0, "bbox": [101, 172, 60, 87], "area": 1931}, {"id": 1067095, "category_id": 63, "iscrowd": 0, "bbox": [197, 163, 196, 69], "area": 10089}, {"id": 7901853, "category_id": 73, "iscrowd": 0, "bbox": [312, 180, 33, 24], "area": 230}, {"id": 3039619, "category_id": 84, "iscrowd": 0, "bbox": [77, 197, 9, 21], "area": 101}, {"id": 1259093, "category_id": 84, "iscrowd": 0, "bbox": [93, 114, 5, 23], "area": 59}, {"id": 5526343, "category_id": 84, "iscrowd": 0, "bbox": [152, 185, 32, 5], "area": 129}, {"id": 531239, "category_id": 84, "iscrowd": 0, "bbox": [72, 156, 12, 27], "area": 241}, {"id": 3096654, "category_id": 84, "iscrowd": 0, "bbox": [154, 177, 30, 4], "area": 62}, {"id": 1916242, "category_id": 84, "iscrowd": 0, "bbox": [95, 152, 6, 22], "area": 54}, {"id": 3237501, "category_id": 84, "iscrowd": 0, "bbox": [51, 155, 13, 9], "area": 82}, {"id": 1127025, "category_id": 84, "iscrowd": 0, "bbox": [102, 147, 11, 25], "area": 230}, {"id": 1527662, "category_id": 84, "iscrowd": 0, "bbox": [71, 113, 10, 26], "area": 158}, {"id": 341610, "category_id": 84, "iscrowd": 0, "bbox": [53, 119, 8, 27], "area": 123}, {"id": 470630, "category_id": 84, "iscrowd": 0, "bbox": [48, 112, 8, 35], "area": 166}, {"id": 2041456, "category_id": 84, "iscrowd": 0, "bbox": [154, 174, 29, 5], "area": 110}, {"id": 2710903, "category_id": 84, "iscrowd": 0, "bbox": [51, 165, 21, 27], "area": 399}, {"id": 860732, "category_id": 85, "iscrowd": 0, "bbox": [167, 219, 23, 22], "area": 392}, {"id": 736645, "category_id": 118, "iscrowd": 0, "bbox": [0, 230, 601, 250], "area": 33874}, {"id": 16514044, "category_id": 130, "iscrowd": 0, "bbox": [143, 0, 402, 206], "area": 6379}, {"id": 1193296, "category_id": 156, "iscrowd": 0, "bbox": [30, 83, 92, 198], "area": 6503}, {"id": 9680071, "category_id": 171, "iscrowd": 0, "bbox": [33, 0, 607, 313], "area": 47838}, {"id": 2315932, "category_id": 177, "iscrowd": 0, "bbox": [589, 35, 51, 271], "area": 4001}, {"id": 10398389, "category_id": 181, "iscrowd": 0, "bbox": [228, 14, 119, 97], "area": 9490}, {"id": 6060944, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 514, 60], "area": 15301}, {"id": 2175306, "category_id": 188, "iscrowd": 0, "bbox": [132, 236, 416, 177], "area": 45686}, {"id": 6450048, "category_id": 189, "iscrowd": 0, "bbox": [599, 388, 41, 92], "area": 1891}, {"id": 3430016, "category_id": 195, "iscrowd": 0, "bbox": [171, 139, 469, 201], "area": 5207}, {"id": 3954284, "category_id": 199, "iscrowd": 0, "bbox": [0, 31, 78, 274], "area": 8140}, {"id": 861764, "category_id": 200, "iscrowd": 0, "bbox": [32, 318, 546, 139], "area": 24671}], "file_name": "000000124659.png", "image_id": 124659}, {"segments_info": [{"id": 4537654, "category_id": 1, "iscrowd": 0, "bbox": [245, 268, 26, 27], "area": 456}, {"id": 4405300, "category_id": 3, "iscrowd": 0, "bbox": [592, 316, 19, 21], "area": 243}, {"id": 8156273, "category_id": 3, "iscrowd": 0, "bbox": [42, 299, 95, 71], "area": 5077}, {"id": 3812907, "category_id": 3, "iscrowd": 0, "bbox": [575, 312, 65, 114], "area": 5659}, {"id": 5588800, "category_id": 3, "iscrowd": 0, "bbox": [473, 313, 27, 25], "area": 469}, {"id": 5194301, "category_id": 3, "iscrowd": 0, "bbox": [532, 314, 19, 19], "area": 225}, {"id": 5130043, "category_id": 3, "iscrowd": 0, "bbox": [0, 294, 58, 82], "area": 3807}, {"id": 7431263, "category_id": 3, "iscrowd": 0, "bbox": [496, 314, 40, 27], "area": 913}, {"id": 4274749, "category_id": 3, "iscrowd": 0, "bbox": [547, 313, 46, 33], "area": 1132}, {"id": 5067348, "category_id": 6, "iscrowd": 0, "bbox": [171, 239, 237, 125], "area": 24271}, {"id": 5194561, "category_id": 8, "iscrowd": 0, "bbox": [409, 299, 67, 55], "area": 2967}, {"id": 7498671, "category_id": 28, "iscrowd": 0, "bbox": [3, 270, 60, 20], "area": 549}, {"id": 3286624, "category_id": 28, "iscrowd": 0, "bbox": [126, 279, 32, 14], "area": 228}, {"id": 3682147, "category_id": 28, "iscrowd": 0, "bbox": [150, 280, 26, 14], "area": 201}, {"id": 7300796, "category_id": 28, "iscrowd": 0, "bbox": [49, 272, 38, 30], "area": 459}, {"id": 7234750, "category_id": 28, "iscrowd": 0, "bbox": [100, 277, 43, 16], "area": 351}, {"id": 7038821, "category_id": 149, "iscrowd": 0, "bbox": [0, 317, 640, 110], "area": 43718}, {"id": 8616141, "category_id": 166, "iscrowd": 0, "bbox": [85, 273, 32, 18], "area": 293}, {"id": 3760216, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 325], "area": 83531}, {"id": 13474174, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 291], "area": 75084}, {"id": 9014415, "category_id": 191, "iscrowd": 0, "bbox": [149, 338, 25, 21], "area": 193}, {"id": 4276039, "category_id": 197, "iscrowd": 0, "bbox": [0, 166, 515, 145], "area": 16989}], "file_name": "000000124798.png", "image_id": 124798}, {"segments_info": [{"id": 4608087, "category_id": 24, "iscrowd": 0, "bbox": [175, 54, 412, 360], "area": 57355}, {"id": 5660775, "category_id": 24, "iscrowd": 0, "bbox": [118, 30, 470, 364], "area": 40406}, {"id": 8231332, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 173181}], "file_name": "000000124975.png", "image_id": 124975}, {"segments_info": [{"id": 2701113, "category_id": 84, "iscrowd": 0, "bbox": [206, 4, 72, 300], "area": 17268}, {"id": 2172199, "category_id": 84, "iscrowd": 0, "bbox": [324, 0, 95, 353], "area": 24707}, {"id": 9279390, "category_id": 84, "iscrowd": 0, "bbox": [262, 0, 75, 394], "area": 19231}, {"id": 4675419, "category_id": 84, "iscrowd": 0, "bbox": [157, 4, 55, 297], "area": 11892}, {"id": 856851, "category_id": 84, "iscrowd": 0, "bbox": [387, 2, 40, 364], "area": 7216}, {"id": 2306612, "category_id": 84, "iscrowd": 0, "bbox": [72, 0, 100, 267], "area": 19345}, {"id": 6516855, "category_id": 88, "iscrowd": 0, "bbox": [2, 227, 123, 215], "area": 13790}, {"id": 11318718, "category_id": 88, "iscrowd": 0, "bbox": [98, 293, 193, 267], "area": 24509}, {"id": 9280163, "category_id": 88, "iscrowd": 0, "bbox": [22, 262, 182, 230], "area": 19074}, {"id": 10792374, "category_id": 88, "iscrowd": 0, "bbox": [179, 324, 243, 299], "area": 33300}, {"id": 7043970, "category_id": 189, "iscrowd": 0, "bbox": [0, 441, 427, 199], "area": 42521}, {"id": 7110022, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 96, 460], "area": 24304}], "file_name": "000000125062.png", "image_id": 125062}, {"segments_info": [{"id": 2631462, "category_id": 21, "iscrowd": 0, "bbox": [47, 202, 14, 11], "area": 93}, {"id": 4476763, "category_id": 21, "iscrowd": 0, "bbox": [184, 195, 25, 15], "area": 244}, {"id": 5596526, "category_id": 21, "iscrowd": 0, "bbox": [137, 197, 18, 9], "area": 105}, {"id": 3488313, "category_id": 21, "iscrowd": 0, "bbox": [89, 196, 20, 15], "area": 148}, {"id": 3687249, "category_id": 21, "iscrowd": 0, "bbox": [223, 197, 28, 15], "area": 254}, {"id": 3952997, "category_id": 21, "iscrowd": 0, "bbox": [8, 196, 24, 14], "area": 218}, {"id": 11710370, "category_id": 148, "iscrowd": 0, "bbox": [34, 175, 606, 42], "area": 12946}, {"id": 6316637, "category_id": 149, "iscrowd": 0, "bbox": [0, 229, 207, 85], "area": 9178}, {"id": 15197148, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 188], "area": 106368}, {"id": 10657168, "category_id": 192, "iscrowd": 0, "bbox": [0, 141, 640, 49], "area": 10187}, {"id": 2575942, "category_id": 193, "iscrowd": 0, "bbox": [0, 197, 640, 117], "area": 55250}], "file_name": "000000125072.png", "image_id": 125072}, {"segments_info": [{"id": 2629658, "category_id": 1, "iscrowd": 0, "bbox": [99, 0, 96, 226], "area": 12935}, {"id": 13024176, "category_id": 1, "iscrowd": 0, "bbox": [137, 54, 200, 211], "area": 23878}, {"id": 2499618, "category_id": 1, "iscrowd": 0, "bbox": [365, 2, 112, 297], "area": 23847}, {"id": 2039066, "category_id": 62, "iscrowd": 0, "bbox": [178, 115, 198, 173], "area": 5583}, {"id": 2630949, "category_id": 62, "iscrowd": 0, "bbox": [452, 222, 48, 107], "area": 2694}, {"id": 2433567, "category_id": 62, "iscrowd": 0, "bbox": [0, 110, 106, 141], "area": 11706}, {"id": 5852038, "category_id": 67, "iscrowd": 0, "bbox": [2, 225, 352, 104], "area": 27484}, {"id": 5526366, "category_id": 77, "iscrowd": 0, "bbox": [247, 117, 4, 4], "area": 9}, {"id": 7763844, "category_id": 77, "iscrowd": 0, "bbox": [241, 123, 7, 7], "area": 20}, {"id": 13747629, "category_id": 84, "iscrowd": 0, "bbox": [46, 286, 114, 47], "area": 3490}, {"id": 9277840, "category_id": 176, "iscrowd": 0, "bbox": [44, 32, 456, 151], "area": 21803}, {"id": 4865405, "category_id": 189, "iscrowd": 0, "bbox": [0, 233, 326, 100], "area": 1079}, {"id": 5921885, "category_id": 190, "iscrowd": 0, "bbox": [88, 127, 412, 206], "area": 10856}, {"id": 13746865, "category_id": 195, "iscrowd": 0, "bbox": [111, 181, 85, 47], "area": 1183}, {"id": 14406847, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 113], "area": 18365}], "file_name": "000000125129.png", "image_id": 125129}, {"segments_info": [{"id": 4145732, "category_id": 24, "iscrowd": 0, "bbox": [73, 88, 567, 384], "area": 118219}, {"id": 8356738, "category_id": 128, "iscrowd": 0, "bbox": [105, 194, 47, 24], "area": 725}, {"id": 12829375, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 250], "area": 78558}, {"id": 16382193, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 215], "area": 43547}, {"id": 5400687, "category_id": 193, "iscrowd": 0, "bbox": [0, 202, 640, 278], "area": 62514}, {"id": 3820881, "category_id": 194, "iscrowd": 0, "bbox": [584, 437, 56, 43], "area": 975}, {"id": 9346710, "category_id": 197, "iscrowd": 0, "bbox": [431, 213, 23, 24], "area": 439}], "file_name": "000000125211.png", "image_id": 125211}, {"segments_info": [{"id": 4492902, "category_id": 56, "iscrowd": 0, "bbox": [146, 104, 122, 141], "area": 10270}, {"id": 5398852, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 500, 331], "area": 148062}], "file_name": "000000125245.png", "image_id": 125245}, {"segments_info": [{"id": 1183500, "category_id": 1, "iscrowd": 0, "bbox": [343, 90, 51, 141], "area": 4060}, {"id": 4405289, "category_id": 36, "iscrowd": 0, "bbox": [337, 215, 72, 23], "area": 401}, {"id": 8484980, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 289164}, {"id": 7235686, "category_id": 184, "iscrowd": 0, "bbox": [102, 40, 66, 84], "area": 2984}, {"id": 13942443, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 439, 38], "area": 10465}], "file_name": "000000125257.png", "image_id": 125257}, {"segments_info": [{"id": 3819114, "category_id": 18, "iscrowd": 0, "bbox": [221, 109, 162, 297], "area": 23262}, {"id": 6714772, "category_id": 18, "iscrowd": 0, "bbox": [450, 5, 131, 166], "area": 10729}, {"id": 2895150, "category_id": 34, "iscrowd": 0, "bbox": [234, 235, 82, 50], "area": 2045}, {"id": 10071745, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 237487}], "file_name": "000000125405.png", "image_id": 125405}, {"segments_info": [{"id": 5532789, "category_id": 1, "iscrowd": 0, "bbox": [88, 2, 315, 499], "area": 60838}, {"id": 5133659, "category_id": 41, "iscrowd": 0, "bbox": [7, 491, 280, 67], "area": 9347}, {"id": 3883845, "category_id": 184, "iscrowd": 0, "bbox": [0, 512, 427, 128], "area": 17186}, {"id": 14607591, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 637], "area": 183243}, {"id": 4937828, "category_id": 197, "iscrowd": 0, "bbox": [0, 580, 39, 60], "area": 1928}], "file_name": "000000125472.png", "image_id": 125472}, {"segments_info": [{"id": 2434344, "category_id": 1, "iscrowd": 0, "bbox": [86, 336, 17, 34], "area": 250}, {"id": 4343371, "category_id": 1, "iscrowd": 0, "bbox": [150, 337, 8, 19], "area": 89}, {"id": 4545912, "category_id": 1, "iscrowd": 0, "bbox": [441, 339, 6, 19], "area": 78}, {"id": 4340793, "category_id": 1, "iscrowd": 0, "bbox": [278, 336, 7, 27], "area": 131}, {"id": 2434600, "category_id": 1, "iscrowd": 0, "bbox": [249, 335, 7, 27], "area": 119}, {"id": 3949647, "category_id": 1, "iscrowd": 0, "bbox": [127, 333, 9, 35], "area": 159}, {"id": 4671049, "category_id": 1, "iscrowd": 0, "bbox": [254, 336, 7, 25], "area": 116}, {"id": 2434090, "category_id": 1, "iscrowd": 0, "bbox": [132, 336, 20, 32], "area": 232}, {"id": 10526113, "category_id": 1, "iscrowd": 0, "bbox": [449, 336, 10, 12], "area": 68}, {"id": 4474956, "category_id": 1, "iscrowd": 0, "bbox": [394, 316, 41, 102], "area": 1835}, {"id": 3224644, "category_id": 1, "iscrowd": 0, "bbox": [305, 336, 11, 26], "area": 122}, {"id": 4540492, "category_id": 1, "iscrowd": 0, "bbox": [238, 337, 6, 24], "area": 99}, {"id": 3290942, "category_id": 1, "iscrowd": 0, "bbox": [184, 341, 8, 15], "area": 96}, {"id": 4804435, "category_id": 1, "iscrowd": 1, "bbox": [21, 333, 520, 41], "area": 3791}, {"id": 6711919, "category_id": 2, "iscrowd": 0, "bbox": [366, 360, 96, 67], "area": 3155}, {"id": 3687503, "category_id": 4, "iscrowd": 0, "bbox": [220, 347, 15, 10], "area": 108}, {"id": 2764860, "category_id": 4, "iscrowd": 0, "bbox": [491, 343, 17, 17], "area": 121}, {"id": 7369845, "category_id": 6, "iscrowd": 0, "bbox": [47, 314, 80, 40], "area": 2730}, {"id": 5791853, "category_id": 6, "iscrowd": 0, "bbox": [16, 320, 32, 32], "area": 705}, {"id": 9079696, "category_id": 8, "iscrowd": 0, "bbox": [535, 319, 37, 38], "area": 859}, {"id": 6251108, "category_id": 8, "iscrowd": 0, "bbox": [560, 305, 80, 56], "area": 3872}, {"id": 1843232, "category_id": 10, "iscrowd": 0, "bbox": [158, 289, 9, 31], "area": 228}, {"id": 921103, "category_id": 10, "iscrowd": 0, "bbox": [318, 316, 5, 9], "area": 36}, {"id": 2765369, "category_id": 10, "iscrowd": 0, "bbox": [305, 312, 12, 14], "area": 138}, {"id": 2043435, "category_id": 10, "iscrowd": 0, "bbox": [213, 312, 11, 14], "area": 108}, {"id": 3023649, "category_id": 27, "iscrowd": 0, "bbox": [309, 340, 6, 11], "area": 45}, {"id": 4012330, "category_id": 31, "iscrowd": 0, "bbox": [429, 364, 28, 18], "area": 424}, {"id": 7963531, "category_id": 85, "iscrowd": 0, "bbox": [46, 112, 9, 24], "area": 120}, {"id": 10461860, "category_id": 85, "iscrowd": 0, "bbox": [71, 111, 29, 26], "area": 576}, {"id": 3497304, "category_id": 184, "iscrowd": 0, "bbox": [47, 266, 593, 62], "area": 10442}, {"id": 16448250, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 339], "area": 149176}, {"id": 8554638, "category_id": 191, "iscrowd": 0, "bbox": [0, 322, 640, 105], "area": 40119}, {"id": 5991545, "category_id": 197, "iscrowd": 0, "bbox": [0, 34, 610, 331], "area": 51563}], "file_name": "000000125572.png", "image_id": 125572}, {"segments_info": [{"id": 8208174, "category_id": 3, "iscrowd": 0, "bbox": [96, 138, 82, 81], "area": 4304}, {"id": 3945878, "category_id": 44, "iscrowd": 0, "bbox": [135, 210, 7, 36], "area": 176}, {"id": 5133473, "category_id": 44, "iscrowd": 0, "bbox": [125, 212, 13, 36], "area": 325}, {"id": 4732545, "category_id": 44, "iscrowd": 0, "bbox": [154, 208, 21, 33], "area": 397}, {"id": 4541099, "category_id": 44, "iscrowd": 0, "bbox": [176, 203, 9, 34], "area": 252}, {"id": 5921742, "category_id": 44, "iscrowd": 0, "bbox": [190, 201, 8, 31], "area": 207}, {"id": 4083128, "category_id": 44, "iscrowd": 0, "bbox": [183, 202, 9, 32], "area": 206}, {"id": 3552132, "category_id": 44, "iscrowd": 0, "bbox": [141, 210, 11, 36], "area": 303}, {"id": 1643544, "category_id": 62, "iscrowd": 0, "bbox": [273, 187, 156, 159], "area": 21626}, {"id": 1775388, "category_id": 63, "iscrowd": 0, "bbox": [1, 234, 301, 246], "area": 58213}, {"id": 2039585, "category_id": 64, "iscrowd": 0, "bbox": [553, 338, 62, 105], "area": 3054}, {"id": 3623513, "category_id": 64, "iscrowd": 0, "bbox": [440, 200, 43, 61], "area": 1048}, {"id": 4278618, "category_id": 86, "iscrowd": 0, "bbox": [554, 406, 39, 36], "area": 788}, {"id": 3224125, "category_id": 86, "iscrowd": 0, "bbox": [568, 376, 35, 26], "area": 212}, {"id": 4017250, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 273, 60], "area": 9564}, {"id": 2170930, "category_id": 118, "iscrowd": 0, "bbox": [247, 276, 261, 83], "area": 3174}, {"id": 15855342, "category_id": 130, "iscrowd": 0, "bbox": [69, 175, 53, 67], "area": 1623}, {"id": 5530483, "category_id": 133, "iscrowd": 0, "bbox": [566, 15, 74, 124], "area": 7691}, {"id": 7622728, "category_id": 181, "iscrowd": 0, "bbox": [0, 32, 185, 202], "area": 16966}, {"id": 3553351, "category_id": 189, "iscrowd": 0, "bbox": [439, 324, 201, 156], "area": 19362}, {"id": 6061710, "category_id": 195, "iscrowd": 0, "bbox": [471, 231, 18, 26], "area": 286}, {"id": 6850196, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 356], "area": 120716}, {"id": 6260383, "category_id": 200, "iscrowd": 0, "bbox": [263, 332, 241, 148], "area": 25228}], "file_name": "000000125778.png", "image_id": 125778}, {"segments_info": [{"id": 1381139, "category_id": 21, "iscrowd": 0, "bbox": [281, 132, 359, 288], "area": 69831}, {"id": 4209726, "category_id": 21, "iscrowd": 0, "bbox": [2, 52, 373, 368], "area": 73959}, {"id": 8689055, "category_id": 184, "iscrowd": 0, "bbox": [0, 257, 529, 168], "area": 36548}, {"id": 8955059, "category_id": 193, "iscrowd": 0, "bbox": [237, 212, 195, 144], "area": 4606}, {"id": 7303801, "category_id": 197, "iscrowd": 0, "bbox": [588, 93, 52, 51], "area": 1654}], "file_name": "000000125806.png", "image_id": 125806}, {"segments_info": [{"id": 2897211, "category_id": 17, "iscrowd": 0, "bbox": [112, 26, 466, 418], "area": 149780}, {"id": 2108721, "category_id": 51, "iscrowd": 0, "bbox": [63, 7, 529, 454], "area": 35617}, {"id": 4483994, "category_id": 118, "iscrowd": 0, "bbox": [0, 0, 640, 489], "area": 126936}], "file_name": "000000125850.png", "image_id": 125850}, {"segments_info": [{"id": 3686731, "category_id": 1, "iscrowd": 0, "bbox": [401, 65, 99, 262], "area": 18256}, {"id": 1385526, "category_id": 1, "iscrowd": 0, "bbox": [82, 131, 135, 190], "area": 10024}, {"id": 4739683, "category_id": 1, "iscrowd": 0, "bbox": [0, 98, 145, 225], "area": 20897}, {"id": 2901903, "category_id": 1, "iscrowd": 0, "bbox": [264, 114, 107, 160], "area": 5322}, {"id": 2243164, "category_id": 1, "iscrowd": 0, "bbox": [150, 121, 53, 104], "area": 1913}, {"id": 9213864, "category_id": 44, "iscrowd": 0, "bbox": [365, 116, 5, 17], "area": 60}, {"id": 6319509, "category_id": 44, "iscrowd": 0, "bbox": [381, 137, 7, 20], "area": 112}, {"id": 3099235, "category_id": 44, "iscrowd": 0, "bbox": [394, 140, 7, 16], "area": 100}, {"id": 6321292, "category_id": 44, "iscrowd": 0, "bbox": [392, 62, 9, 31], "area": 235}, {"id": 6713996, "category_id": 44, "iscrowd": 0, "bbox": [338, 59, 12, 34], "area": 313}, {"id": 4543863, "category_id": 44, "iscrowd": 0, "bbox": [389, 140, 6, 17], "area": 88}, {"id": 8885937, "category_id": 44, "iscrowd": 0, "bbox": [359, 57, 12, 35], "area": 319}, {"id": 3228003, "category_id": 44, "iscrowd": 0, "bbox": [327, 70, 6, 21], "area": 101}, {"id": 6912140, "category_id": 44, "iscrowd": 0, "bbox": [380, 56, 13, 37], "area": 376}, {"id": 8688298, "category_id": 44, "iscrowd": 0, "bbox": [370, 59, 12, 34], "area": 290}, {"id": 9083832, "category_id": 44, "iscrowd": 0, "bbox": [350, 63, 9, 31], "area": 265}, {"id": 3693676, "category_id": 44, "iscrowd": 0, "bbox": [333, 69, 7, 23], "area": 115}, {"id": 4088963, "category_id": 44, "iscrowd": 0, "bbox": [401, 140, 6, 17], "area": 93}, {"id": 2191259, "category_id": 52, "iscrowd": 0, "bbox": [292, 248, 39, 21], "area": 403}, {"id": 1862549, "category_id": 52, "iscrowd": 0, "bbox": [132, 238, 79, 82], "area": 2725}, {"id": 2788786, "category_id": 52, "iscrowd": 0, "bbox": [153, 282, 95, 41], "area": 1980}, {"id": 2450834, "category_id": 52, "iscrowd": 0, "bbox": [201, 214, 117, 42], "area": 2999}, {"id": 2522787, "category_id": 52, "iscrowd": 0, "bbox": [274, 261, 148, 62], "area": 4506}, {"id": 201033, "category_id": 53, "iscrowd": 0, "bbox": [276, 283, 31, 21], "area": 273}, {"id": 470569, "category_id": 53, "iscrowd": 0, "bbox": [208, 241, 39, 37], "area": 955}, {"id": 1402199, "category_id": 53, "iscrowd": 0, "bbox": [243, 291, 53, 32], "area": 1351}, {"id": 671093, "category_id": 53, "iscrowd": 0, "bbox": [221, 273, 41, 24], "area": 372}, {"id": 1913196, "category_id": 53, "iscrowd": 0, "bbox": [332, 262, 36, 20], "area": 329}, {"id": 472114, "category_id": 53, "iscrowd": 0, "bbox": [171, 261, 48, 44], "area": 1266}, {"id": 13617874, "category_id": 92, "iscrowd": 0, "bbox": [239, 99, 17, 34], "area": 409}, {"id": 928824, "category_id": 122, "iscrowd": 0, "bbox": [116, 254, 310, 73], "area": 4029}, {"id": 3364976, "category_id": 156, "iscrowd": 0, "bbox": [130, 62, 220, 57], "area": 1595}, {"id": 4147026, "category_id": 176, "iscrowd": 0, "bbox": [123, 50, 188, 103], "area": 2800}, {"id": 793919, "category_id": 177, "iscrowd": 0, "bbox": [13, 15, 55, 37], "area": 1118}, {"id": 2569792, "category_id": 181, "iscrowd": 0, "bbox": [428, 0, 72, 79], "area": 3515}, {"id": 4609388, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 490, 101], "area": 22580}, {"id": 5009307, "category_id": 195, "iscrowd": 0, "bbox": [63, 21, 76, 84], "area": 3027}, {"id": 4217980, "category_id": 196, "iscrowd": 0, "bbox": [156, 74, 267, 196], "area": 20357}, {"id": 264976, "category_id": 199, "iscrowd": 0, "bbox": [0, 90, 77, 63], "area": 2659}], "file_name": "000000125936.png", "image_id": 125936}, {"segments_info": [{"id": 5134172, "category_id": 33, "iscrowd": 0, "bbox": [61, 5, 250, 580], "area": 71354}, {"id": 8163226, "category_id": 191, "iscrowd": 0, "bbox": [0, 522, 358, 118], "area": 29978}, {"id": 11718106, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 358, 535], "area": 105405}], "file_name": "000000125952.png", "image_id": 125952}, {"segments_info": [{"id": 4078645, "category_id": 1, "iscrowd": 0, "bbox": [523, 368, 7, 11], "area": 43}, {"id": 1515809, "category_id": 1, "iscrowd": 0, "bbox": [631, 364, 9, 30], "area": 113}, {"id": 3815744, "category_id": 1, "iscrowd": 0, "bbox": [512, 356, 9, 22], "area": 73}, {"id": 5327687, "category_id": 1, "iscrowd": 0, "bbox": [593, 359, 9, 14], "area": 82}, {"id": 5855055, "category_id": 1, "iscrowd": 0, "bbox": [573, 366, 11, 20], "area": 111}, {"id": 2828583, "category_id": 1, "iscrowd": 0, "bbox": [569, 358, 10, 26], "area": 97}, {"id": 7303778, "category_id": 9, "iscrowd": 0, "bbox": [597, 418, 43, 61], "area": 1867}, {"id": 9276025, "category_id": 16, "iscrowd": 0, "bbox": [227, 18, 412, 232], "area": 15639}, {"id": 3885903, "category_id": 154, "iscrowd": 0, "bbox": [0, 361, 640, 119], "area": 44757}, {"id": 11186331, "category_id": 155, "iscrowd": 0, "bbox": [0, 249, 640, 198], "area": 88117}, {"id": 15000273, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 264], "area": 149403}], "file_name": "000000126107.png", "image_id": 126107}, {"segments_info": [{"id": 6308407, "category_id": 1, "iscrowd": 0, "bbox": [262, 104, 28, 88], "area": 978}, {"id": 5400929, "category_id": 8, "iscrowd": 0, "bbox": [1, 1, 318, 236], "area": 58922}, {"id": 6113064, "category_id": 18, "iscrowd": 0, "bbox": [105, 52, 56, 133], "area": 4727}, {"id": 6309670, "category_id": 184, "iscrowd": 0, "bbox": [176, 0, 144, 110], "area": 6666}], "file_name": "000000126110.png", "image_id": 126110}, {"segments_info": [{"id": 5196900, "category_id": 1, "iscrowd": 0, "bbox": [0, 46, 51, 93], "area": 3705}, {"id": 8619436, "category_id": 1, "iscrowd": 0, "bbox": [214, 0, 37, 73], "area": 1003}, {"id": 7432587, "category_id": 1, "iscrowd": 0, "bbox": [260, 0, 42, 41], "area": 640}, {"id": 8027316, "category_id": 1, "iscrowd": 0, "bbox": [277, 26, 24, 38], "area": 632}, {"id": 12565450, "category_id": 1, "iscrowd": 0, "bbox": [431, 16, 39, 51], "area": 1265}, {"id": 7891576, "category_id": 1, "iscrowd": 0, "bbox": [248, 36, 39, 33], "area": 760}, {"id": 8288392, "category_id": 1, "iscrowd": 0, "bbox": [188, 10, 45, 143], "area": 4327}, {"id": 10855606, "category_id": 1, "iscrowd": 0, "bbox": [270, 55, 50, 51], "area": 1654}, {"id": 10461105, "category_id": 1, "iscrowd": 0, "bbox": [176, 35, 299, 387], "area": 48161}, {"id": 9211327, "category_id": 1, "iscrowd": 0, "bbox": [378, 29, 32, 49], "area": 1114}, {"id": 11251149, "category_id": 1, "iscrowd": 0, "bbox": [589, 23, 51, 58], "area": 2148}, {"id": 4603707, "category_id": 1, "iscrowd": 0, "bbox": [580, 79, 59, 129], "area": 5367}, {"id": 10328745, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 544, 122], "area": 13931}, {"id": 12304576, "category_id": 43, "iscrowd": 0, "bbox": [167, 330, 72, 97], "area": 3853}, {"id": 11111273, "category_id": 62, "iscrowd": 0, "bbox": [115, 34, 64, 85], "area": 3912}, {"id": 11041365, "category_id": 62, "iscrowd": 0, "bbox": [361, 16, 45, 11], "area": 402}, {"id": 13228244, "category_id": 145, "iscrowd": 0, "bbox": [0, 308, 640, 119], "area": 48964}, {"id": 15658733, "category_id": 168, "iscrowd": 0, "bbox": [405, 41, 36, 44], "area": 923}, {"id": 10783092, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 278], "area": 59271}], "file_name": "000000126137.png", "image_id": 126137}, {"segments_info": [{"id": 3685957, "category_id": 22, "iscrowd": 0, "bbox": [405, 154, 145, 106], "area": 8473}, {"id": 2896436, "category_id": 22, "iscrowd": 0, "bbox": [189, 151, 100, 93], "area": 6020}, {"id": 3751749, "category_id": 22, "iscrowd": 0, "bbox": [296, 191, 73, 56], "area": 2881}, {"id": 1711391, "category_id": 22, "iscrowd": 0, "bbox": [148, 149, 71, 88], "area": 1774}, {"id": 5135452, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 275], "area": 130047}], "file_name": "000000126216.png", "image_id": 126216}, {"segments_info": [{"id": 1315088, "category_id": 1, "iscrowd": 0, "bbox": [106, 0, 161, 184], "area": 7116}, {"id": 12696766, "category_id": 1, "iscrowd": 0, "bbox": [370, 0, 35, 108], "area": 2734}, {"id": 4532766, "category_id": 1, "iscrowd": 0, "bbox": [22, 2, 181, 270], "area": 20058}, {"id": 5321510, "category_id": 1, "iscrowd": 0, "bbox": [96, 49, 221, 186], "area": 7220}, {"id": 4665379, "category_id": 1, "iscrowd": 0, "bbox": [0, 201, 17, 179], "area": 551}, {"id": 5124130, "category_id": 1, "iscrowd": 0, "bbox": [0, 130, 85, 217], "area": 12417}, {"id": 1578772, "category_id": 39, "iscrowd": 0, "bbox": [293, 33, 10, 102], "area": 847}, {"id": 1843488, "category_id": 39, "iscrowd": 0, "bbox": [266, 101, 10, 89], "area": 514}, {"id": 6324389, "category_id": 39, "iscrowd": 0, "bbox": [471, 74, 34, 62], "area": 420}, {"id": 2037521, "category_id": 39, "iscrowd": 0, "bbox": [357, 46, 14, 116], "area": 792}, {"id": 5471127, "category_id": 39, "iscrowd": 0, "bbox": [468, 64, 53, 55], "area": 377}, {"id": 3419432, "category_id": 39, "iscrowd": 0, "bbox": [289, 94, 76, 70], "area": 406}, {"id": 1053201, "category_id": 39, "iscrowd": 0, "bbox": [257, 32, 10, 128], "area": 976}, {"id": 6978990, "category_id": 39, "iscrowd": 0, "bbox": [449, 32, 39, 88], "area": 416}, {"id": 2633526, "category_id": 39, "iscrowd": 0, "bbox": [348, 32, 11, 121], "area": 762}, {"id": 5271169, "category_id": 40, "iscrowd": 0, "bbox": [165, 368, 109, 103], "area": 7596}, {"id": 4213075, "category_id": 40, "iscrowd": 0, "bbox": [194, 307, 89, 50], "area": 3292}, {"id": 4083552, "category_id": 40, "iscrowd": 0, "bbox": [423, 162, 18, 20], "area": 279}, {"id": 4415619, "category_id": 40, "iscrowd": 0, "bbox": [286, 253, 39, 21], "area": 510}, {"id": 3034738, "category_id": 40, "iscrowd": 0, "bbox": [363, 176, 60, 20], "area": 740}, {"id": 4215660, "category_id": 40, "iscrowd": 0, "bbox": [355, 227, 54, 33], "area": 1242}, {"id": 4151163, "category_id": 40, "iscrowd": 0, "bbox": [430, 143, 23, 20], "area": 288}, {"id": 5085054, "category_id": 145, "iscrowd": 0, "bbox": [465, 60, 175, 49], "area": 3610}, {"id": 7771818, "category_id": 154, "iscrowd": 0, "bbox": [0, 82, 640, 398], "area": 131973}, {"id": 9541015, "category_id": 185, "iscrowd": 0, "bbox": [433, 0, 36, 112], "area": 2019}, {"id": 8889278, "category_id": 191, "iscrowd": 0, "bbox": [117, 175, 320, 305], "area": 27044}, {"id": 1841979, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 192], "area": 43842}], "file_name": "000000126226.png", "image_id": 126226}, {"segments_info": [{"id": 4078651, "category_id": 3, "iscrowd": 0, "bbox": [247, 253, 31, 23], "area": 320}, {"id": 6447968, "category_id": 3, "iscrowd": 0, "bbox": [606, 260, 34, 65], "area": 1679}, {"id": 7758922, "category_id": 3, "iscrowd": 0, "bbox": [385, 249, 110, 42], "area": 1956}, {"id": 6776666, "category_id": 3, "iscrowd": 0, "bbox": [442, 255, 36, 12], "area": 198}, {"id": 8486003, "category_id": 3, "iscrowd": 0, "bbox": [317, 270, 192, 57], "area": 6236}, {"id": 3025703, "category_id": 3, "iscrowd": 0, "bbox": [0, 259, 57, 52], "area": 2401}, {"id": 3024930, "category_id": 3, "iscrowd": 0, "bbox": [112, 251, 81, 39], "area": 2180}, {"id": 7104610, "category_id": 3, "iscrowd": 0, "bbox": [183, 261, 32, 24], "area": 399}, {"id": 2499359, "category_id": 3, "iscrowd": 0, "bbox": [202, 254, 57, 28], "area": 1090}, {"id": 7108463, "category_id": 3, "iscrowd": 0, "bbox": [434, 253, 46, 16], "area": 145}, {"id": 3617064, "category_id": 3, "iscrowd": 0, "bbox": [90, 262, 50, 34], "area": 1163}, {"id": 3091498, "category_id": 3, "iscrowd": 0, "bbox": [23, 256, 72, 44], "area": 1642}, {"id": 4607711, "category_id": 13, "iscrowd": 0, "bbox": [260, 161, 137, 135], "area": 14959}, {"id": 10593707, "category_id": 149, "iscrowd": 0, "bbox": [0, 264, 640, 169], "area": 82274}, {"id": 4021075, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 322], "area": 88923}, {"id": 15655896, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 547, 194], "area": 65070}], "file_name": "000000126592.png", "image_id": 126592}, {"segments_info": [{"id": 4405043, "category_id": 1, "iscrowd": 0, "bbox": [25, 420, 24, 57], "area": 687}, {"id": 4209984, "category_id": 3, "iscrowd": 0, "bbox": [147, 408, 72, 51], "area": 2855}, {"id": 7828078, "category_id": 3, "iscrowd": 0, "bbox": [63, 382, 58, 35], "area": 1451}, {"id": 6117975, "category_id": 3, "iscrowd": 0, "bbox": [0, 348, 16, 23], "area": 279}, {"id": 10328986, "category_id": 11, "iscrowd": 0, "bbox": [387, 432, 12, 23], "area": 172}, {"id": 10987424, "category_id": 13, "iscrowd": 0, "bbox": [380, 344, 11, 22], "area": 156}, {"id": 1512983, "category_id": 31, "iscrowd": 0, "bbox": [32, 451, 12, 19], "area": 132}, {"id": 1911079, "category_id": 64, "iscrowd": 0, "bbox": [549, 407, 39, 41], "area": 1054}, {"id": 5659745, "category_id": 128, "iscrowd": 0, "bbox": [0, 111, 640, 348], "area": 164071}, {"id": 8552063, "category_id": 149, "iscrowd": 0, "bbox": [0, 360, 640, 120], "area": 23976}, {"id": 8418666, "category_id": 166, "iscrowd": 0, "bbox": [603, 410, 37, 41], "area": 1091}, {"id": 2829613, "category_id": 184, "iscrowd": 0, "bbox": [0, 247, 36, 101], "area": 2344}, {"id": 13873039, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 201], "area": 90778}, {"id": 9277844, "category_id": 191, "iscrowd": 0, "bbox": [69, 369, 494, 98], "area": 6346}], "file_name": "000000127092.png", "image_id": 127092}, {"segments_info": [{"id": 7173751, "category_id": 149, "iscrowd": 0, "bbox": [0, 33, 427, 607], "area": 93527}, {"id": 8756385, "category_id": 161, "iscrowd": 0, "bbox": [118, 0, 309, 146], "area": 22142}, {"id": 5856099, "category_id": 185, "iscrowd": 0, "bbox": [0, 266, 374, 350], "area": 63950}, {"id": 9346719, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 427, 290], "area": 32140}, {"id": 10134189, "category_id": 195, "iscrowd": 0, "bbox": [22, 16, 196, 293], "area": 43292}], "file_name": "000000127135.png", "image_id": 127135}, {"segments_info": [{"id": 4670787, "category_id": 49, "iscrowd": 0, "bbox": [8, 371, 26, 20], "area": 122}, {"id": 4605253, "category_id": 49, "iscrowd": 0, "bbox": [1, 336, 30, 30], "area": 234}, {"id": 5328718, "category_id": 49, "iscrowd": 0, "bbox": [14, 352, 24, 24], "area": 147}, {"id": 5526098, "category_id": 49, "iscrowd": 0, "bbox": [8, 342, 29, 29], "area": 190}, {"id": 4545111, "category_id": 64, "iscrowd": 0, "bbox": [315, 264, 70, 97], "area": 2865}, {"id": 3750973, "category_id": 78, "iscrowd": 0, "bbox": [52, 149, 85, 116], "area": 8376}, {"id": 2566441, "category_id": 79, "iscrowd": 0, "bbox": [19, 367, 175, 251], "area": 14288}, {"id": 2369832, "category_id": 81, "iscrowd": 0, "bbox": [392, 361, 35, 13], "area": 383}, {"id": 6249821, "category_id": 82, "iscrowd": 0, "bbox": [249, 384, 140, 168], "area": 19948}, {"id": 1712930, "category_id": 86, "iscrowd": 0, "bbox": [349, 334, 21, 32], "area": 548}, {"id": 2961455, "category_id": 107, "iscrowd": 0, "bbox": [0, 335, 427, 113], "area": 10612}, {"id": 12369597, "category_id": 109, "iscrowd": 0, "bbox": [321, 135, 106, 195], "area": 11537}, {"id": 7764087, "category_id": 168, "iscrowd": 0, "bbox": [321, 338, 42, 38], "area": 678}, {"id": 3685174, "category_id": 176, "iscrowd": 0, "bbox": [0, 271, 427, 109], "area": 19403}, {"id": 15725041, "category_id": 181, "iscrowd": 0, "bbox": [351, 182, 76, 58], "area": 3705}, {"id": 7631730, "category_id": 186, "iscrowd": 0, "bbox": [84, 0, 343, 54], "area": 15349}, {"id": 9013899, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 115054}, {"id": 5461593, "category_id": 190, "iscrowd": 0, "bbox": [118, 510, 309, 130], "area": 25178}, {"id": 6119005, "category_id": 195, "iscrowd": 0, "bbox": [187, 276, 53, 30], "area": 1365}, {"id": 8619141, "category_id": 199, "iscrowd": 0, "bbox": [67, 0, 360, 237], "area": 13670}, {"id": 2435626, "category_id": 200, "iscrowd": 0, "bbox": [376, 543, 51, 69], "area": 2224}], "file_name": "000000127182.png", "image_id": 127182}, {"segments_info": [{"id": 8096954, "category_id": 1, "iscrowd": 0, "bbox": [261, 48, 201, 357], "area": 18481}, {"id": 3557006, "category_id": 1, "iscrowd": 0, "bbox": [134, 18, 247, 351], "area": 16964}, {"id": 4085587, "category_id": 3, "iscrowd": 0, "bbox": [0, 89, 169, 48], "area": 5044}, {"id": 5265756, "category_id": 3, "iscrowd": 0, "bbox": [293, 112, 41, 36], "area": 771}, {"id": 1579801, "category_id": 3, "iscrowd": 0, "bbox": [502, 107, 138, 67], "area": 4508}, {"id": 7840166, "category_id": 34, "iscrowd": 0, "bbox": [440, 38, 45, 25], "area": 775}, {"id": 6074015, "category_id": 145, "iscrowd": 0, "bbox": [0, 303, 640, 124], "area": 65249}, {"id": 2246981, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 189], "area": 82259}, {"id": 5466476, "category_id": 185, "iscrowd": 0, "bbox": [0, 162, 581, 165], "area": 69220}, {"id": 3364696, "category_id": 193, "iscrowd": 0, "bbox": [572, 170, 68, 151], "area": 9157}], "file_name": "000000127263.png", "image_id": 127263}, {"segments_info": [{"id": 9278636, "category_id": 1, "iscrowd": 0, "bbox": [190, 0, 81, 88], "area": 3757}, {"id": 8489633, "category_id": 1, "iscrowd": 0, "bbox": [39, 50, 247, 442], "area": 32554}, {"id": 6389152, "category_id": 1, "iscrowd": 0, "bbox": [260, 0, 68, 88], "area": 4385}, {"id": 8491155, "category_id": 1, "iscrowd": 0, "bbox": [44, 0, 75, 78], "area": 3067}, {"id": 7898782, "category_id": 1, "iscrowd": 0, "bbox": [1, 0, 68, 91], "area": 4635}, {"id": 7769232, "category_id": 15, "iscrowd": 0, "bbox": [136, 20, 27, 30], "area": 421}, {"id": 3622482, "category_id": 31, "iscrowd": 0, "bbox": [276, 44, 35, 23], "area": 519}, {"id": 9676464, "category_id": 43, "iscrowd": 0, "bbox": [66, 8, 166, 103], "area": 5633}, {"id": 6707017, "category_id": 62, "iscrowd": 0, "bbox": [56, 27, 25, 61], "area": 928}, {"id": 9663316, "category_id": 92, "iscrowd": 0, "bbox": [0, 76, 328, 164], "area": 31033}, {"id": 12229236, "category_id": 145, "iscrowd": 0, "bbox": [0, 308, 328, 192], "area": 49569}, {"id": 10132378, "category_id": 185, "iscrowd": 0, "bbox": [61, 67, 208, 40], "area": 1261}, {"id": 5858664, "category_id": 190, "iscrowd": 0, "bbox": [80, 74, 21, 14], "area": 201}], "file_name": "000000127270.png", "image_id": 127270}, {"segments_info": [{"id": 2574478, "category_id": 1, "iscrowd": 0, "bbox": [330, 228, 79, 89], "area": 3203}, {"id": 793415, "category_id": 1, "iscrowd": 0, "bbox": [392, 95, 17, 51], "area": 391}, {"id": 1908786, "category_id": 1, "iscrowd": 0, "bbox": [169, 52, 108, 172], "area": 10259}, {"id": 4017776, "category_id": 1, "iscrowd": 0, "bbox": [67, 77, 128, 171], "area": 10769}, {"id": 659492, "category_id": 1, "iscrowd": 0, "bbox": [260, 49, 66, 105], "area": 4143}, {"id": 6321576, "category_id": 1, "iscrowd": 0, "bbox": [0, 86, 92, 249], "area": 15070}, {"id": 1057334, "category_id": 44, "iscrowd": 0, "bbox": [319, 159, 15, 59], "area": 350}, {"id": 1252975, "category_id": 44, "iscrowd": 0, "bbox": [334, 167, 12, 17], "area": 147}, {"id": 3692155, "category_id": 44, "iscrowd": 0, "bbox": [303, 175, 20, 44], "area": 683}, {"id": 6839392, "category_id": 47, "iscrowd": 0, "bbox": [343, 164, 25, 51], "area": 678}, {"id": 6111286, "category_id": 47, "iscrowd": 0, "bbox": [245, 167, 23, 32], "area": 575}, {"id": 5816408, "category_id": 47, "iscrowd": 0, "bbox": [354, 305, 44, 61], "area": 2131}, {"id": 3491690, "category_id": 47, "iscrowd": 0, "bbox": [163, 200, 24, 41], "area": 936}, {"id": 11259629, "category_id": 50, "iscrowd": 0, "bbox": [45, 302, 54, 34], "area": 422}, {"id": 3357767, "category_id": 50, "iscrowd": 0, "bbox": [130, 341, 39, 150], "area": 1853}, {"id": 1580586, "category_id": 50, "iscrowd": 0, "bbox": [188, 409, 142, 117], "area": 1772}, {"id": 7450840, "category_id": 50, "iscrowd": 0, "bbox": [373, 374, 36, 23], "area": 456}, {"id": 2310249, "category_id": 50, "iscrowd": 0, "bbox": [187, 287, 62, 15], "area": 219}, {"id": 2839918, "category_id": 51, "iscrowd": 0, "bbox": [98, 420, 167, 148], "area": 16674}, {"id": 2523865, "category_id": 59, "iscrowd": 0, "bbox": [63, 318, 100, 51], "area": 3312}, {"id": 264727, "category_id": 62, "iscrowd": 0, "bbox": [134, 114, 81, 108], "area": 2955}, {"id": 3103894, "category_id": 67, "iscrowd": 0, "bbox": [0, 219, 409, 409], "area": 124352}, {"id": 529208, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 172, 42], "area": 6160}, {"id": 2573429, "category_id": 189, "iscrowd": 0, "bbox": [0, 131, 409, 509], "area": 8065}, {"id": 3428726, "category_id": 196, "iscrowd": 0, "bbox": [140, 113, 269, 527], "area": 10120}, {"id": 1256556, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 409, 169], "area": 26184}], "file_name": "000000127394.png", "image_id": 127394}, {"segments_info": [{"id": 6187424, "category_id": 59, "iscrowd": 0, "bbox": [0, 44, 480, 576], "area": 186425}, {"id": 13092040, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 102, 113], "area": 7049}, {"id": 12106713, "category_id": 196, "iscrowd": 0, "bbox": [113, 0, 193, 67], "area": 8302}], "file_name": "000000127476.png", "image_id": 127476}, {"segments_info": [{"id": 5989990, "category_id": 50, "iscrowd": 0, "bbox": [10, 38, 222, 160], "area": 3947}, {"id": 921873, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 333], "area": 44833}, {"id": 9147802, "category_id": 195, "iscrowd": 0, "bbox": [251, 0, 87, 23], "area": 1003}, {"id": 2115126, "category_id": 196, "iscrowd": 0, "bbox": [41, 0, 459, 299], "area": 77180}], "file_name": "000000127494.png", "image_id": 127494}, {"segments_info": [{"id": 14141650, "category_id": 28, "iscrowd": 0, "bbox": [399, 1, 241, 157], "area": 12941}, {"id": 12436276, "category_id": 42, "iscrowd": 0, "bbox": [581, 51, 42, 289], "area": 7320}, {"id": 6464723, "category_id": 42, "iscrowd": 0, "bbox": [3, 0, 131, 456], "area": 48852}, {"id": 14453053, "category_id": 42, "iscrowd": 0, "bbox": [612, 84, 28, 230], "area": 4022}, {"id": 7252432, "category_id": 42, "iscrowd": 0, "bbox": [232, 2, 141, 418], "area": 34008}, {"id": 13344604, "category_id": 42, "iscrowd": 0, "bbox": [532, 59, 66, 297], "area": 5457}, {"id": 10723609, "category_id": 42, "iscrowd": 0, "bbox": [479, 44, 48, 310], "area": 6332}, {"id": 15831869, "category_id": 42, "iscrowd": 0, "bbox": [311, 0, 150, 405], "area": 29003}, {"id": 15174181, "category_id": 42, "iscrowd": 0, "bbox": [409, 0, 109, 382], "area": 17549}, {"id": 9944790, "category_id": 42, "iscrowd": 0, "bbox": [130, 1, 128, 434], "area": 39374}, {"id": 6310019, "category_id": 42, "iscrowd": 0, "bbox": [510, 75, 70, 290], "area": 9734}, {"id": 5267053, "category_id": 154, "iscrowd": 0, "bbox": [0, 184, 640, 296], "area": 71854}, {"id": 12761518, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 332], "area": 17671}], "file_name": "000000127517.png", "image_id": 127517}, {"segments_info": [{"id": 9337434, "category_id": 1, "iscrowd": 0, "bbox": [255, 15, 287, 425], "area": 59523}, {"id": 7787211, "category_id": 37, "iscrowd": 0, "bbox": [503, 253, 41, 39], "area": 1223}, {"id": 6643605, "category_id": 43, "iscrowd": 0, "bbox": [302, 100, 107, 100], "area": 3130}, {"id": 6846503, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 440], "area": 217238}], "file_name": "000000127530.png", "image_id": 127530}, {"segments_info": [{"id": 3163497, "category_id": 7, "iscrowd": 0, "bbox": [101, 418, 511, 147], "area": 31772}, {"id": 5392716, "category_id": 125, "iscrowd": 0, "bbox": [225, 492, 160, 101], "area": 7467}, {"id": 5420282, "category_id": 130, "iscrowd": 0, "bbox": [20, 448, 44, 35], "area": 990}, {"id": 2635873, "category_id": 147, "iscrowd": 0, "bbox": [0, 457, 612, 155], "area": 53230}, {"id": 3887822, "category_id": 155, "iscrowd": 0, "bbox": [0, 320, 229, 56], "area": 6065}, {"id": 10065312, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 612, 341], "area": 184445}, {"id": 3758970, "category_id": 191, "iscrowd": 0, "bbox": [473, 534, 139, 41], "area": 1109}, {"id": 2964580, "category_id": 197, "iscrowd": 0, "bbox": [0, 190, 612, 325], "area": 71725}], "file_name": "000000127624.png", "image_id": 127624}, {"segments_info": [{"id": 2630962, "category_id": 1, "iscrowd": 0, "bbox": [87, 11, 363, 393], "area": 89128}, {"id": 3289666, "category_id": 33, "iscrowd": 0, "bbox": [17, 136, 550, 377], "area": 102585}, {"id": 3944555, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 513], "area": 134820}], "file_name": "000000127660.png", "image_id": 127660}, {"segments_info": [{"id": 3028285, "category_id": 23, "iscrowd": 0, "bbox": [311, 32, 310, 349], "area": 70255}, {"id": 3094595, "category_id": 23, "iscrowd": 0, "bbox": [5, 96, 355, 315], "area": 66122}, {"id": 3750717, "category_id": 148, "iscrowd": 0, "bbox": [0, 175, 640, 250], "area": 41010}, {"id": 9217974, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 640, 310], "area": 89094}], "file_name": "000000127955.png", "image_id": 127955}, {"segments_info": [{"id": 11787720, "category_id": 72, "iscrowd": 0, "bbox": [310, 40, 226, 194], "area": 29850}, {"id": 4684139, "category_id": 72, "iscrowd": 0, "bbox": [24, 0, 323, 236], "area": 49847}, {"id": 1713969, "category_id": 76, "iscrowd": 0, "bbox": [346, 261, 294, 123], "area": 25230}, {"id": 1592449, "category_id": 171, "iscrowd": 0, "bbox": [479, 0, 88, 54], "area": 3684}, {"id": 3566765, "category_id": 189, "iscrowd": 0, "bbox": [0, 244, 640, 182], "area": 43797}, {"id": 8168904, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 383], "area": 105240}], "file_name": "000000127987.png", "image_id": 127987}, {"segments_info": [{"id": 6121039, "category_id": 6, "iscrowd": 0, "bbox": [116, 39, 346, 216], "area": 52201}, {"id": 6316125, "category_id": 8, "iscrowd": 0, "bbox": [564, 188, 76, 44], "area": 2025}, {"id": 7170152, "category_id": 8, "iscrowd": 0, "bbox": [1, 131, 145, 157], "area": 18455}, {"id": 10329760, "category_id": 28, "iscrowd": 0, "bbox": [88, 57, 20, 48], "area": 652}, {"id": 11118763, "category_id": 149, "iscrowd": 0, "bbox": [0, 273, 640, 87], "area": 42389}, {"id": 4544334, "category_id": 184, "iscrowd": 0, "bbox": [178, 32, 462, 214], "area": 35692}, {"id": 16514043, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 125], "area": 43722}, {"id": 7634566, "category_id": 191, "iscrowd": 0, "bbox": [0, 256, 285, 58], "area": 7213}, {"id": 4289386, "category_id": 193, "iscrowd": 0, "bbox": [128, 206, 512, 87], "area": 23359}, {"id": 9014677, "category_id": 197, "iscrowd": 0, "bbox": [0, 45, 118, 98], "area": 3131}], "file_name": "000000128051.png", "image_id": 128051}, {"segments_info": [{"id": 2435374, "category_id": 1, "iscrowd": 0, "bbox": [129, 183, 48, 97], "area": 1937}, {"id": 9475485, "category_id": 35, "iscrowd": 0, "bbox": [149, 276, 21, 12], "area": 90}, {"id": 12632517, "category_id": 159, "iscrowd": 0, "bbox": [0, 123, 425, 517], "area": 192680}, {"id": 6712434, "category_id": 184, "iscrowd": 0, "bbox": [0, 98, 409, 468], "area": 18079}, {"id": 9004620, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 425, 131], "area": 48523}, {"id": 6576210, "category_id": 192, "iscrowd": 0, "bbox": [0, 93, 425, 103], "area": 10350}], "file_name": "000000128112.png", "image_id": 128112}, {"segments_info": [{"id": 3425121, "category_id": 62, "iscrowd": 0, "bbox": [69, 193, 29, 31], "area": 407}, {"id": 3029332, "category_id": 62, "iscrowd": 0, "bbox": [0, 212, 64, 102], "area": 1614}, {"id": 3755647, "category_id": 62, "iscrowd": 0, "bbox": [68, 201, 22, 30], "area": 539}, {"id": 4736871, "category_id": 63, "iscrowd": 0, "bbox": [262, 192, 244, 127], "area": 26449}, {"id": 4145248, "category_id": 63, "iscrowd": 0, "bbox": [46, 206, 212, 162], "area": 23567}, {"id": 10977447, "category_id": 64, "iscrowd": 0, "bbox": [521, 138, 30, 63], "area": 1149}, {"id": 7887252, "category_id": 64, "iscrowd": 0, "bbox": [280, 140, 12, 50], "area": 130}, {"id": 4344942, "category_id": 67, "iscrowd": 0, "bbox": [1, 206, 67, 37], "area": 732}, {"id": 7494750, "category_id": 72, "iscrowd": 0, "bbox": [605, 202, 35, 125], "area": 3168}, {"id": 3647692, "category_id": 84, "iscrowd": 0, "bbox": [114, 205, 3, 15], "area": 26}, {"id": 8486003, "category_id": 84, "iscrowd": 0, "bbox": [106, 176, 6, 23], "area": 54}, {"id": 5132440, "category_id": 84, "iscrowd": 0, "bbox": [128, 149, 4, 16], "area": 47}, {"id": 5653323, "category_id": 84, "iscrowd": 0, "bbox": [142, 194, 9, 17], "area": 132}, {"id": 10002877, "category_id": 84, "iscrowd": 0, "bbox": [130, 169, 9, 25], "area": 58}, {"id": 4791731, "category_id": 84, "iscrowd": 0, "bbox": [104, 150, 18, 9], "area": 123}, {"id": 5067354, "category_id": 84, "iscrowd": 0, "bbox": [107, 200, 15, 20], "area": 217}, {"id": 11513004, "category_id": 84, "iscrowd": 0, "bbox": [120, 132, 10, 10], "area": 90}, {"id": 8946320, "category_id": 84, "iscrowd": 0, "bbox": [132, 146, 7, 20], "area": 81}, {"id": 7169658, "category_id": 84, "iscrowd": 0, "bbox": [112, 148, 11, 20], "area": 77}, {"id": 2434091, "category_id": 84, "iscrowd": 0, "bbox": [142, 144, 5, 21], "area": 103}, {"id": 5925235, "category_id": 84, "iscrowd": 0, "bbox": [125, 199, 6, 18], "area": 80}, {"id": 9077419, "category_id": 84, "iscrowd": 0, "bbox": [113, 124, 4, 18], "area": 54}, {"id": 6381174, "category_id": 84, "iscrowd": 1, "bbox": [93, 123, 55, 94], "area": 2284}, {"id": 10659500, "category_id": 109, "iscrowd": 0, "bbox": [186, 51, 429, 79], "area": 15421}, {"id": 10915805, "category_id": 112, "iscrowd": 0, "bbox": [194, 106, 407, 187], "area": 33939}, {"id": 5393527, "category_id": 118, "iscrowd": 0, "bbox": [17, 274, 597, 154], "area": 62723}, {"id": 2699611, "category_id": 156, "iscrowd": 0, "bbox": [72, 100, 87, 114], "area": 4042}, {"id": 9079958, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 381, 75], "area": 21926}, {"id": 10001327, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 64209}], "file_name": "000000128148.png", "image_id": 128148}, {"segments_info": [{"id": 6573897, "category_id": 1, "iscrowd": 0, "bbox": [595, 230, 16, 53], "area": 542}, {"id": 7826542, "category_id": 1, "iscrowd": 0, "bbox": [446, 222, 32, 98], "area": 1622}, {"id": 5001051, "category_id": 1, "iscrowd": 0, "bbox": [379, 203, 67, 178], "area": 7041}, {"id": 7435905, "category_id": 1, "iscrowd": 0, "bbox": [433, 219, 23, 105], "area": 950}, {"id": 8942704, "category_id": 1, "iscrowd": 0, "bbox": [577, 233, 17, 48], "area": 354}, {"id": 5527137, "category_id": 1, "iscrowd": 0, "bbox": [611, 225, 18, 53], "area": 533}, {"id": 5122684, "category_id": 1, "iscrowd": 0, "bbox": [538, 209, 41, 127], "area": 2502}, {"id": 1512229, "category_id": 1, "iscrowd": 0, "bbox": [188, 207, 28, 45], "area": 677}, {"id": 7366759, "category_id": 1, "iscrowd": 0, "bbox": [634, 230, 6, 53], "area": 123}, {"id": 10921105, "category_id": 3, "iscrowd": 0, "bbox": [366, 231, 14, 13], "area": 141}, {"id": 6451849, "category_id": 6, "iscrowd": 0, "bbox": [0, 74, 416, 305], "area": 92830}, {"id": 6451592, "category_id": 31, "iscrowd": 0, "bbox": [584, 248, 11, 10], "area": 84}, {"id": 4412784, "category_id": 31, "iscrowd": 0, "bbox": [549, 244, 28, 51], "area": 524}, {"id": 2958368, "category_id": 31, "iscrowd": 0, "bbox": [587, 260, 11, 14], "area": 94}, {"id": 10987175, "category_id": 31, "iscrowd": 0, "bbox": [530, 265, 18, 35], "area": 361}, {"id": 2433572, "category_id": 31, "iscrowd": 0, "bbox": [446, 264, 13, 11], "area": 127}, {"id": 3882561, "category_id": 149, "iscrowd": 0, "bbox": [0, 253, 543, 145], "area": 6512}, {"id": 6977907, "category_id": 184, "iscrowd": 0, "bbox": [187, 63, 453, 141], "area": 10670}, {"id": 8750720, "category_id": 185, "iscrowd": 0, "bbox": [389, 183, 251, 79], "area": 10264}, {"id": 16381685, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 174], "area": 65281}, {"id": 11912391, "category_id": 191, "iscrowd": 0, "bbox": [0, 247, 640, 180], "area": 55654}, {"id": 12829892, "category_id": 197, "iscrowd": 0, "bbox": [433, 0, 207, 325], "area": 13491}], "file_name": "000000128372.png", "image_id": 128372}, {"segments_info": [{"id": 1318184, "category_id": 1, "iscrowd": 0, "bbox": [182, 0, 194, 188], "area": 19060}, {"id": 1054752, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 147, 163], "area": 17488}, {"id": 6577765, "category_id": 47, "iscrowd": 0, "bbox": [173, 52, 34, 15], "area": 402}, {"id": 5133399, "category_id": 47, "iscrowd": 0, "bbox": [133, 52, 33, 35], "area": 998}, {"id": 2633285, "category_id": 47, "iscrowd": 0, "bbox": [537, 61, 33, 34], "area": 929}, {"id": 5988733, "category_id": 61, "iscrowd": 0, "bbox": [0, 251, 232, 170], "area": 30311}, {"id": 6120322, "category_id": 61, "iscrowd": 0, "bbox": [244, 218, 248, 202], "area": 35465}, {"id": 5593490, "category_id": 61, "iscrowd": 0, "bbox": [1, 151, 119, 110], "area": 6763}, {"id": 5926030, "category_id": 61, "iscrowd": 0, "bbox": [161, 115, 194, 124], "area": 9227}, {"id": 5859721, "category_id": 61, "iscrowd": 0, "bbox": [297, 127, 294, 214], "area": 28561}, {"id": 5662845, "category_id": 61, "iscrowd": 0, "bbox": [575, 187, 65, 82], "area": 3848}, {"id": 5200764, "category_id": 61, "iscrowd": 0, "bbox": [87, 177, 202, 140], "area": 16343}, {"id": 6054786, "category_id": 61, "iscrowd": 0, "bbox": [502, 266, 138, 160], "area": 18325}, {"id": 1451571, "category_id": 100, "iscrowd": 0, "bbox": [193, 0, 447, 106], "area": 20084}, {"id": 989975, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 38747}, {"id": 3097175, "category_id": 196, "iscrowd": 0, "bbox": [22, 0, 618, 271], "area": 18268}], "file_name": "000000128476.png", "image_id": 128476}, {"segments_info": [{"id": 3114421, "category_id": 53, "iscrowd": 0, "bbox": [0, 202, 252, 249], "area": 46494}, {"id": 3177898, "category_id": 53, "iscrowd": 0, "bbox": [250, 1, 230, 203], "area": 38565}, {"id": 2905502, "category_id": 55, "iscrowd": 0, "bbox": [34, 434, 202, 200], "area": 32058}, {"id": 1185615, "category_id": 55, "iscrowd": 0, "bbox": [186, 148, 161, 160], "area": 16861}, {"id": 1454700, "category_id": 55, "iscrowd": 0, "bbox": [36, 22, 116, 114], "area": 8227}, {"id": 1386615, "category_id": 55, "iscrowd": 0, "bbox": [114, 73, 146, 137], "area": 12333}, {"id": 2708381, "category_id": 55, "iscrowd": 0, "bbox": [240, 467, 223, 166], "area": 30111}, {"id": 1514844, "category_id": 55, "iscrowd": 0, "bbox": [0, 390, 57, 186], "area": 5752}, {"id": 2258596, "category_id": 55, "iscrowd": 0, "bbox": [0, 101, 147, 190], "area": 16328}, {"id": 1850023, "category_id": 55, "iscrowd": 0, "bbox": [225, 316, 192, 172], "area": 22837}, {"id": 1914251, "category_id": 55, "iscrowd": 0, "bbox": [367, 179, 113, 173], "area": 15133}, {"id": 2180714, "category_id": 122, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 60840}], "file_name": "000000128598.png", "image_id": 128598}, {"segments_info": [{"id": 4142925, "category_id": 1, "iscrowd": 0, "bbox": [71, 31, 407, 345], "area": 33041}, {"id": 881533, "category_id": 34, "iscrowd": 0, "bbox": [176, 275, 77, 39], "area": 2201}, {"id": 12888719, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 384], "area": 156407}], "file_name": "000000128654.png", "image_id": 128654}, {"segments_info": [{"id": 5936294, "category_id": 52, "iscrowd": 0, "bbox": [375, 125, 186, 179], "area": 17266}, {"id": 4411514, "category_id": 122, "iscrowd": 0, "bbox": [68, 78, 479, 333], "area": 32742}, {"id": 11644080, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 132865}, {"id": 6123140, "category_id": 196, "iscrowd": 0, "bbox": [98, 44, 397, 304], "area": 62242}], "file_name": "000000128658.png", "image_id": 128658}, {"segments_info": [{"id": 3554624, "category_id": 1, "iscrowd": 0, "bbox": [338, 310, 51, 133], "area": 2753}, {"id": 3684417, "category_id": 1, "iscrowd": 0, "bbox": [441, 410, 28, 19], "area": 268}, {"id": 7171185, "category_id": 1, "iscrowd": 0, "bbox": [113, 252, 19, 17], "area": 132}, {"id": 13944209, "category_id": 38, "iscrowd": 0, "bbox": [321, 15, 36, 69], "area": 1562}, {"id": 9143233, "category_id": 42, "iscrowd": 0, "bbox": [472, 420, 146, 8], "area": 722}, {"id": 2564385, "category_id": 42, "iscrowd": 0, "bbox": [122, 266, 8, 3], "area": 16}, {"id": 6977455, "category_id": 42, "iscrowd": 0, "bbox": [322, 343, 125, 58], "area": 1007}, {"id": 11643546, "category_id": 155, "iscrowd": 0, "bbox": [0, 220, 640, 260], "area": 155245}, {"id": 3880210, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 231], "area": 139088}, {"id": 4801840, "category_id": 198, "iscrowd": 0, "bbox": [368, 199, 103, 28], "area": 1895}], "file_name": "000000128675.png", "image_id": 128675}, {"segments_info": [{"id": 5794939, "category_id": 1, "iscrowd": 0, "bbox": [329, 263, 22, 68], "area": 937}, {"id": 2702409, "category_id": 1, "iscrowd": 0, "bbox": [228, 316, 36, 31], "area": 640}, {"id": 2045512, "category_id": 1, "iscrowd": 0, "bbox": [105, 367, 25, 33], "area": 504}, {"id": 1914441, "category_id": 1, "iscrowd": 0, "bbox": [0, 407, 33, 54], "area": 1027}, {"id": 5002546, "category_id": 1, "iscrowd": 0, "bbox": [138, 346, 42, 39], "area": 950}, {"id": 1719362, "category_id": 1, "iscrowd": 0, "bbox": [20, 394, 37, 49], "area": 849}, {"id": 2243652, "category_id": 1, "iscrowd": 0, "bbox": [244, 300, 28, 39], "area": 536}, {"id": 2045250, "category_id": 1, "iscrowd": 0, "bbox": [123, 347, 21, 43], "area": 533}, {"id": 2768976, "category_id": 1, "iscrowd": 0, "bbox": [213, 315, 23, 24], "area": 311}, {"id": 1188143, "category_id": 1, "iscrowd": 0, "bbox": [255, 295, 46, 37], "area": 822}, {"id": 3488828, "category_id": 1, "iscrowd": 0, "bbox": [124, 50, 141, 162], "area": 12115}, {"id": 1849155, "category_id": 1, "iscrowd": 0, "bbox": [192, 316, 41, 48], "area": 951}, {"id": 3952469, "category_id": 41, "iscrowd": 0, "bbox": [112, 198, 75, 37], "area": 1327}, {"id": 6849733, "category_id": 144, "iscrowd": 0, "bbox": [45, 308, 306, 192], "area": 40008}, {"id": 11910065, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 351, 379], "area": 96954}, {"id": 4413530, "category_id": 197, "iscrowd": 0, "bbox": [0, 245, 351, 186], "area": 13155}], "file_name": "000000128699.png", "image_id": 128699}, {"segments_info": [{"id": 6120043, "category_id": 1, "iscrowd": 0, "bbox": [0, 80, 209, 529], "area": 67644}, {"id": 10655906, "category_id": 1, "iscrowd": 0, "bbox": [156, 44, 196, 546], "area": 55723}, {"id": 1844266, "category_id": 1, "iscrowd": 0, "bbox": [308, 98, 156, 534], "area": 53639}, {"id": 3160902, "category_id": 39, "iscrowd": 0, "bbox": [292, 451, 49, 143], "area": 1901}, {"id": 1054748, "category_id": 40, "iscrowd": 0, "bbox": [0, 347, 20, 67], "area": 1022}, {"id": 2118020, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 491, 640], "area": 108652}, {"id": 1137750, "category_id": 193, "iscrowd": 0, "bbox": [146, 100, 345, 355], "area": 22501}], "file_name": "000000128748.png", "image_id": 128748}, {"segments_info": [{"id": 9082267, "category_id": 24, "iscrowd": 0, "bbox": [254, 194, 43, 45], "area": 1007}, {"id": 8029064, "category_id": 24, "iscrowd": 0, "bbox": [75, 201, 49, 35], "area": 911}, {"id": 6253420, "category_id": 24, "iscrowd": 0, "bbox": [336, 200, 51, 33], "area": 558}, {"id": 6187115, "category_id": 24, "iscrowd": 0, "bbox": [361, 197, 50, 35], "area": 716}, {"id": 5991019, "category_id": 24, "iscrowd": 0, "bbox": [309, 191, 35, 46], "area": 805}, {"id": 6714485, "category_id": 24, "iscrowd": 0, "bbox": [294, 198, 27, 37], "area": 372}, {"id": 8358287, "category_id": 24, "iscrowd": 0, "bbox": [422, 200, 27, 53], "area": 851}, {"id": 7307393, "category_id": 24, "iscrowd": 0, "bbox": [142, 192, 20, 52], "area": 663}, {"id": 6384237, "category_id": 24, "iscrowd": 0, "bbox": [191, 207, 10, 35], "area": 231}, {"id": 8424078, "category_id": 24, "iscrowd": 0, "bbox": [197, 193, 29, 50], "area": 798}, {"id": 7897737, "category_id": 24, "iscrowd": 0, "bbox": [384, 200, 44, 54], "area": 1230}, {"id": 9017496, "category_id": 24, "iscrowd": 0, "bbox": [176, 198, 20, 27], "area": 270}, {"id": 5991014, "category_id": 24, "iscrowd": 0, "bbox": [131, 203, 14, 24], "area": 233}, {"id": 6978174, "category_id": 24, "iscrowd": 1, "bbox": [63, 205, 13, 24], "area": 276}, {"id": 7432275, "category_id": 184, "iscrowd": 0, "bbox": [95, 80, 405, 36], "area": 1229}, {"id": 10655609, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 500, 69], "area": 32291}, {"id": 7115913, "category_id": 193, "iscrowd": 0, "bbox": [0, 62, 500, 313], "area": 144615}], "file_name": "000000129054.png", "image_id": 129054}, {"segments_info": [{"id": 9660505, "category_id": 1, "iscrowd": 0, "bbox": [533, 343, 92, 132], "area": 6461}, {"id": 7824212, "category_id": 14, "iscrowd": 0, "bbox": [0, 198, 112, 276], "area": 25424}, {"id": 10915712, "category_id": 14, "iscrowd": 0, "bbox": [143, 381, 21, 46], "area": 718}, {"id": 13737599, "category_id": 28, "iscrowd": 0, "bbox": [451, 302, 136, 50], "area": 3997}, {"id": 3683663, "category_id": 67, "iscrowd": 0, "bbox": [108, 425, 188, 55], "area": 3839}, {"id": 4209749, "category_id": 67, "iscrowd": 0, "bbox": [313, 416, 179, 60], "area": 3724}, {"id": 2565957, "category_id": 67, "iscrowd": 0, "bbox": [431, 426, 82, 54], "area": 2742}, {"id": 4999002, "category_id": 92, "iscrowd": 0, "bbox": [82, 119, 49, 66], "area": 1857}, {"id": 3159905, "category_id": 119, "iscrowd": 0, "bbox": [142, 273, 364, 48], "area": 2969}, {"id": 8886182, "category_id": 130, "iscrowd": 0, "bbox": [482, 216, 46, 55], "area": 1665}, {"id": 8884645, "category_id": 151, "iscrowd": 0, "bbox": [75, 0, 433, 295], "area": 46023}, {"id": 6250613, "category_id": 171, "iscrowd": 0, "bbox": [466, 106, 174, 320], "area": 19257}, {"id": 5393226, "category_id": 177, "iscrowd": 0, "bbox": [379, 448, 69, 23], "area": 573}, {"id": 5394507, "category_id": 181, "iscrowd": 0, "bbox": [79, 33, 561, 170], "area": 30129}, {"id": 4609859, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 215], "area": 72898}, {"id": 5260634, "category_id": 185, "iscrowd": 0, "bbox": [84, 394, 556, 86], "area": 19204}, {"id": 5589612, "category_id": 191, "iscrowd": 0, "bbox": [377, 464, 108, 16], "area": 1222}, {"id": 4542337, "category_id": 197, "iscrowd": 0, "bbox": [92, 251, 548, 180], "area": 49808}, {"id": 8423276, "category_id": 199, "iscrowd": 0, "bbox": [519, 126, 45, 290], "area": 9141}], "file_name": "000000129062.png", "image_id": 129062}, {"segments_info": [{"id": 5064006, "category_id": 50, "iscrowd": 0, "bbox": [23, 151, 589, 159], "area": 36017}, {"id": 6255483, "category_id": 67, "iscrowd": 0, "bbox": [0, 3, 640, 472], "area": 256711}], "file_name": "000000129113.png", "image_id": 129113}, {"segments_info": [{"id": 4618357, "category_id": 7, "iscrowd": 0, "bbox": [1, 163, 639, 187], "area": 109919}, {"id": 4671822, "category_id": 15, "iscrowd": 0, "bbox": [301, 367, 245, 99], "area": 14661}, {"id": 2633267, "category_id": 147, "iscrowd": 0, "bbox": [0, 328, 640, 52], "area": 19779}, {"id": 5329746, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 640, 195], "area": 55203}, {"id": 7045491, "category_id": 184, "iscrowd": 0, "bbox": [232, 110, 247, 59], "area": 4119}, {"id": 15724011, "category_id": 187, "iscrowd": 0, "bbox": [286, 106, 263, 29], "area": 4072}, {"id": 7435381, "category_id": 191, "iscrowd": 0, "bbox": [0, 370, 640, 110], "area": 54097}, {"id": 9935003, "category_id": 197, "iscrowd": 0, "bbox": [0, 107, 640, 235], "area": 15911}], "file_name": "000000129135.png", "image_id": 129135}, {"segments_info": [{"id": 4939124, "category_id": 70, "iscrowd": 0, "bbox": [157, 395, 90, 199], "area": 11172}, {"id": 6253701, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 103552}, {"id": 3293265, "category_id": 130, "iscrowd": 0, "bbox": [357, 0, 34, 147], "area": 1870}, {"id": 7106686, "category_id": 176, "iscrowd": 0, "bbox": [282, 287, 111, 353], "area": 23786}, {"id": 5400187, "category_id": 186, "iscrowd": 0, "bbox": [71, 0, 326, 184], "area": 24316}, {"id": 7962768, "category_id": 190, "iscrowd": 0, "bbox": [79, 341, 246, 299], "area": 25457}, {"id": 10592173, "category_id": 195, "iscrowd": 0, "bbox": [310, 427, 38, 39], "area": 1005}, {"id": 4414064, "category_id": 199, "iscrowd": 0, "bbox": [48, 0, 348, 640], "area": 107744}], "file_name": "000000129322.png", "image_id": 129322}, {"segments_info": [{"id": 3026728, "category_id": 21, "iscrowd": 0, "bbox": [175, 231, 26, 21], "area": 373}, {"id": 7041652, "category_id": 21, "iscrowd": 0, "bbox": [57, 214, 17, 24], "area": 274}, {"id": 5987934, "category_id": 21, "iscrowd": 0, "bbox": [142, 213, 47, 31], "area": 855}, {"id": 4213332, "category_id": 21, "iscrowd": 0, "bbox": [30, 212, 23, 35], "area": 583}, {"id": 7765109, "category_id": 21, "iscrowd": 0, "bbox": [270, 216, 32, 18], "area": 127}, {"id": 3355439, "category_id": 21, "iscrowd": 0, "bbox": [197, 225, 23, 26], "area": 381}, {"id": 3157801, "category_id": 21, "iscrowd": 0, "bbox": [262, 220, 45, 33], "area": 901}, {"id": 4409158, "category_id": 21, "iscrowd": 0, "bbox": [83, 214, 19, 38], "area": 178}, {"id": 2631457, "category_id": 21, "iscrowd": 0, "bbox": [410, 219, 61, 39], "area": 1406}, {"id": 9605773, "category_id": 184, "iscrowd": 0, "bbox": [0, 25, 500, 241], "area": 99897}, {"id": 16580093, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 45], "area": 16373}, {"id": 5599338, "category_id": 193, "iscrowd": 0, "bbox": [0, 206, 500, 169], "area": 65864}], "file_name": "000000129416.png", "image_id": 129416}, {"segments_info": [{"id": 3552313, "category_id": 1, "iscrowd": 0, "bbox": [260, 2, 196, 185], "area": 21592}, {"id": 9410214, "category_id": 1, "iscrowd": 0, "bbox": [329, 143, 171, 222], "area": 15415}, {"id": 9147295, "category_id": 1, "iscrowd": 0, "bbox": [157, 78, 319, 400], "area": 61041}, {"id": 921383, "category_id": 62, "iscrowd": 0, "bbox": [212, 0, 263, 199], "area": 5337}, {"id": 9737625, "category_id": 75, "iscrowd": 0, "bbox": [393, 273, 46, 31], "area": 701}, {"id": 3091765, "category_id": 75, "iscrowd": 0, "bbox": [370, 374, 39, 37], "area": 773}, {"id": 5133416, "category_id": 84, "iscrowd": 0, "bbox": [3, 146, 107, 58], "area": 1706}, {"id": 1908772, "category_id": 84, "iscrowd": 0, "bbox": [0, 123, 61, 42], "area": 1389}, {"id": 3621458, "category_id": 84, "iscrowd": 0, "bbox": [0, 129, 86, 43], "area": 1301}, {"id": 1646398, "category_id": 118, "iscrowd": 0, "bbox": [56, 0, 584, 480], "area": 108565}, {"id": 529709, "category_id": 185, "iscrowd": 0, "bbox": [33, 0, 164, 154], "area": 15164}, {"id": 2770535, "category_id": 189, "iscrowd": 0, "bbox": [0, 156, 216, 324], "area": 48899}, {"id": 3556951, "category_id": 200, "iscrowd": 0, "bbox": [90, 407, 413, 73], "area": 12093}], "file_name": "000000129492.png", "image_id": 129492}, {"segments_info": [{"id": 6116174, "category_id": 1, "iscrowd": 0, "bbox": [247, 217, 61, 138], "area": 4261}, {"id": 5591378, "category_id": 18, "iscrowd": 0, "bbox": [62, 325, 61, 33], "area": 1140}, {"id": 5328461, "category_id": 18, "iscrowd": 0, "bbox": [400, 339, 35, 25], "area": 503}, {"id": 7370104, "category_id": 20, "iscrowd": 0, "bbox": [353, 372, 53, 87], "area": 2531}, {"id": 7830142, "category_id": 20, "iscrowd": 0, "bbox": [395, 371, 59, 85], "area": 2594}, {"id": 8290949, "category_id": 20, "iscrowd": 0, "bbox": [480, 371, 39, 97], "area": 2642}, {"id": 7896191, "category_id": 20, "iscrowd": 0, "bbox": [434, 370, 47, 98], "area": 2986}, {"id": 5922916, "category_id": 20, "iscrowd": 0, "bbox": [552, 400, 45, 65], "area": 2137}, {"id": 7172469, "category_id": 20, "iscrowd": 0, "bbox": [510, 393, 42, 75], "area": 1888}, {"id": 3228220, "category_id": 184, "iscrowd": 0, "bbox": [214, 90, 314, 127], "area": 8123}, {"id": 16447728, "category_id": 187, "iscrowd": 0, "bbox": [454, 0, 186, 105], "area": 10126}, {"id": 6779001, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 202], "area": 67203}, {"id": 5143408, "category_id": 193, "iscrowd": 0, "bbox": [0, 16, 640, 464], "area": 200536}], "file_name": "000000129756.png", "image_id": 129756}, {"segments_info": [{"id": 1249308, "category_id": 1, "iscrowd": 0, "bbox": [196, 2, 208, 259], "area": 34109}, {"id": 5000792, "category_id": 35, "iscrowd": 0, "bbox": [30, 75, 594, 275], "area": 11392}, {"id": 6510682, "category_id": 159, "iscrowd": 0, "bbox": [0, 404, 640, 22], "area": 4933}, {"id": 2371388, "category_id": 184, "iscrowd": 0, "bbox": [0, 104, 640, 322], "area": 66691}, {"id": 10197671, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 418], "area": 150312}], "file_name": "000000129812.png", "image_id": 129812}, {"segments_info": [{"id": 8620947, "category_id": 1, "iscrowd": 0, "bbox": [142, 52, 163, 183], "area": 8190}, {"id": 8685203, "category_id": 1, "iscrowd": 0, "bbox": [318, 120, 139, 108], "area": 6004}, {"id": 4409414, "category_id": 1, "iscrowd": 0, "bbox": [447, 82, 169, 149], "area": 9321}, {"id": 8302022, "category_id": 39, "iscrowd": 0, "bbox": [275, 41, 70, 43], "area": 478}, {"id": 2833995, "category_id": 40, "iscrowd": 0, "bbox": [319, 171, 26, 22], "area": 391}, {"id": 1909539, "category_id": 185, "iscrowd": 0, "bbox": [29, 0, 611, 58], "area": 21989}, {"id": 4477011, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 75], "area": 6624}, {"id": 3839883, "category_id": 193, "iscrowd": 0, "bbox": [0, 59, 640, 261], "area": 39893}, {"id": 4944013, "category_id": 194, "iscrowd": 0, "bbox": [0, 13, 640, 307], "area": 111029}], "file_name": "000000129945.png", "image_id": 129945}, {"segments_info": [{"id": 3288621, "category_id": 1, "iscrowd": 0, "bbox": [76, 442, 9, 38], "area": 246}, {"id": 4868173, "category_id": 1, "iscrowd": 0, "bbox": [28, 435, 8, 26], "area": 131}, {"id": 4408904, "category_id": 1, "iscrowd": 0, "bbox": [217, 426, 8, 17], "area": 77}, {"id": 2828592, "category_id": 1, "iscrowd": 0, "bbox": [34, 438, 8, 23], "area": 109}, {"id": 2694424, "category_id": 1, "iscrowd": 0, "bbox": [47, 462, 36, 38], "area": 864}, {"id": 5328233, "category_id": 1, "iscrowd": 0, "bbox": [191, 429, 3, 8], "area": 22}, {"id": 4933447, "category_id": 2, "iscrowd": 0, "bbox": [263, 458, 23, 39], "area": 201}, {"id": 5393486, "category_id": 2, "iscrowd": 0, "bbox": [271, 456, 26, 41], "area": 431}, {"id": 5064780, "category_id": 2, "iscrowd": 0, "bbox": [340, 462, 28, 38], "area": 684}, {"id": 6710370, "category_id": 3, "iscrowd": 0, "bbox": [172, 437, 54, 31], "area": 1298}, {"id": 5197907, "category_id": 15, "iscrowd": 0, "bbox": [114, 473, 45, 27], "area": 874}, {"id": 3948092, "category_id": 15, "iscrowd": 0, "bbox": [53, 458, 17, 19], "area": 149}, {"id": 6579040, "category_id": 149, "iscrowd": 0, "bbox": [113, 445, 262, 55], "area": 4878}, {"id": 5788774, "category_id": 184, "iscrowd": 0, "bbox": [54, 359, 35, 106], "area": 1653}, {"id": 16711147, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 375, 375], "area": 58198}, {"id": 7238258, "category_id": 191, "iscrowd": 0, "bbox": [0, 441, 375, 59], "area": 7861}, {"id": 5526107, "category_id": 197, "iscrowd": 0, "bbox": [0, 152, 375, 301], "area": 50995}], "file_name": "000000130386.png", "image_id": 130386}, {"segments_info": [{"id": 7039851, "category_id": 85, "iscrowd": 0, "bbox": [127, 215, 47, 44], "area": 1343}, {"id": 5987163, "category_id": 85, "iscrowd": 0, "bbox": [447, 102, 96, 67], "area": 4712}, {"id": 15395562, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 414], "area": 108221}, {"id": 4408131, "category_id": 197, "iscrowd": 0, "bbox": [0, 23, 640, 405], "area": 159519}], "file_name": "000000130465.png", "image_id": 130465}, {"segments_info": [{"id": 5199201, "category_id": 7, "iscrowd": 0, "bbox": [20, 117, 559, 198], "area": 32513}, {"id": 6327170, "category_id": 119, "iscrowd": 0, "bbox": [0, 285, 376, 130], "area": 19423}, {"id": 6515316, "category_id": 147, "iscrowd": 0, "bbox": [154, 130, 486, 297], "area": 41425}, {"id": 4352602, "category_id": 184, "iscrowd": 0, "bbox": [0, 58, 640, 229], "area": 49175}, {"id": 16051940, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 92], "area": 51161}, {"id": 3764321, "category_id": 193, "iscrowd": 0, "bbox": [0, 116, 394, 311], "area": 59027}, {"id": 13159106, "category_id": 197, "iscrowd": 0, "bbox": [468, 90, 148, 28], "area": 1943}], "file_name": "000000130566.png", "image_id": 130566}, {"segments_info": [{"id": 11117734, "category_id": 1, "iscrowd": 0, "bbox": [174, 71, 159, 486], "area": 43046}, {"id": 2106152, "category_id": 40, "iscrowd": 0, "bbox": [176, 187, 64, 57], "area": 2698}, {"id": 1663338, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 388, 640], "area": 202307}], "file_name": "000000130579.png", "image_id": 130579}, {"segments_info": [{"id": 4538695, "category_id": 1, "iscrowd": 0, "bbox": [104, 221, 222, 419], "area": 44903}, {"id": 11840186, "category_id": 38, "iscrowd": 0, "bbox": [18, 65, 179, 218], "area": 16519}, {"id": 8216149, "category_id": 128, "iscrowd": 0, "bbox": [0, 256, 37, 45], "area": 1493}, {"id": 3028281, "category_id": 184, "iscrowd": 0, "bbox": [0, 215, 427, 151], "area": 30427}, {"id": 16645372, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 288], "area": 87796}, {"id": 4819083, "category_id": 193, "iscrowd": 0, "bbox": [0, 336, 427, 304], "area": 91646}], "file_name": "000000130586.png", "image_id": 130586}, {"segments_info": [{"id": 5261910, "category_id": 1, "iscrowd": 0, "bbox": [0, 113, 464, 362], "area": 58440}, {"id": 10069935, "category_id": 125, "iscrowd": 0, "bbox": [0, 321, 640, 159], "area": 47096}, {"id": 5990248, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 628, 361], "area": 71512}, {"id": 13027018, "category_id": 185, "iscrowd": 0, "bbox": [576, 356, 64, 26], "area": 1148}, {"id": 14988683, "category_id": 187, "iscrowd": 0, "bbox": [14, 0, 626, 144], "area": 63038}, {"id": 9148322, "category_id": 192, "iscrowd": 0, "bbox": [0, 100, 640, 267], "area": 41148}], "file_name": "000000130599.png", "image_id": 130599}, {"segments_info": [{"id": 8822707, "category_id": 48, "iscrowd": 0, "bbox": [592, 337, 48, 52], "area": 1063}, {"id": 5726581, "category_id": 49, "iscrowd": 0, "bbox": [131, 6, 181, 39], "area": 3101}, {"id": 1730511, "category_id": 57, "iscrowd": 0, "bbox": [434, 147, 128, 114], "area": 4734}, {"id": 2454229, "category_id": 57, "iscrowd": 0, "bbox": [601, 146, 37, 201], "area": 4764}, {"id": 6720441, "category_id": 67, "iscrowd": 0, "bbox": [236, 1, 404, 50], "area": 13173}, {"id": 2768215, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 22585}, {"id": 5138297, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 111210}], "file_name": "000000130613.png", "image_id": 130613}, {"segments_info": [{"id": 4211773, "category_id": 1, "iscrowd": 0, "bbox": [468, 225, 38, 116], "area": 2921}, {"id": 5454892, "category_id": 1, "iscrowd": 0, "bbox": [261, 230, 38, 89], "area": 1820}, {"id": 5850428, "category_id": 1, "iscrowd": 0, "bbox": [364, 235, 57, 91], "area": 1620}, {"id": 4014138, "category_id": 1, "iscrowd": 0, "bbox": [602, 257, 38, 136], "area": 2675}, {"id": 5455677, "category_id": 1, "iscrowd": 0, "bbox": [497, 227, 22, 45], "area": 387}, {"id": 4670011, "category_id": 1, "iscrowd": 0, "bbox": [83, 228, 35, 82], "area": 1259}, {"id": 3352868, "category_id": 1, "iscrowd": 0, "bbox": [495, 52, 12, 20], "area": 183}, {"id": 4144433, "category_id": 3, "iscrowd": 0, "bbox": [196, 236, 47, 9], "area": 378}, {"id": 8354925, "category_id": 3, "iscrowd": 0, "bbox": [570, 64, 49, 10], "area": 280}, {"id": 4999765, "category_id": 3, "iscrowd": 0, "bbox": [451, 241, 89, 53], "area": 1305}, {"id": 7762266, "category_id": 3, "iscrowd": 0, "bbox": [565, 231, 71, 19], "area": 1168}, {"id": 5919818, "category_id": 3, "iscrowd": 0, "bbox": [13, 243, 45, 44], "area": 1542}, {"id": 10460046, "category_id": 3, "iscrowd": 0, "bbox": [381, 246, 42, 27], "area": 448}, {"id": 3158314, "category_id": 3, "iscrowd": 0, "bbox": [437, 256, 18, 36], "area": 403}, {"id": 4012593, "category_id": 3, "iscrowd": 0, "bbox": [524, 240, 36, 52], "area": 1063}, {"id": 6841689, "category_id": 8, "iscrowd": 0, "bbox": [190, 28, 207, 43], "area": 6697}, {"id": 8030077, "category_id": 34, "iscrowd": 0, "bbox": [372, 121, 28, 9], "area": 192}, {"id": 3948347, "category_id": 128, "iscrowd": 0, "bbox": [71, 0, 569, 74], "area": 27189}, {"id": 4211769, "category_id": 171, "iscrowd": 0, "bbox": [80, 62, 560, 98], "area": 34914}, {"id": 2830895, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 479, 255], "area": 29867}, {"id": 4540480, "category_id": 185, "iscrowd": 0, "bbox": [0, 238, 640, 63], "area": 6327}, {"id": 3622460, "category_id": 192, "iscrowd": 0, "bbox": [100, 119, 540, 78], "area": 15822}, {"id": 4086336, "category_id": 193, "iscrowd": 0, "bbox": [0, 231, 640, 196], "area": 90006}, {"id": 2830379, "category_id": 198, "iscrowd": 0, "bbox": [0, 148, 640, 113], "area": 37288}], "file_name": "000000130699.png", "image_id": 130699}, {"segments_info": [{"id": 2105891, "category_id": 1, "iscrowd": 0, "bbox": [206, 0, 81, 59], "area": 4281}, {"id": 9209727, "category_id": 1, "iscrowd": 0, "bbox": [13, 57, 329, 417], "area": 52565}, {"id": 4471088, "category_id": 1, "iscrowd": 0, "bbox": [53, 4, 100, 185], "area": 9785}, {"id": 9466540, "category_id": 1, "iscrowd": 0, "bbox": [281, 1, 108, 197], "area": 10836}, {"id": 11907762, "category_id": 1, "iscrowd": 0, "bbox": [380, 0, 84, 133], "area": 6550}, {"id": 8941154, "category_id": 1, "iscrowd": 0, "bbox": [209, 67, 277, 413], "area": 52310}, {"id": 6847106, "category_id": 15, "iscrowd": 0, "bbox": [0, 167, 640, 313], "area": 55016}, {"id": 3025960, "category_id": 31, "iscrowd": 0, "bbox": [369, 315, 112, 99], "area": 7809}, {"id": 2828328, "category_id": 31, "iscrowd": 0, "bbox": [58, 2, 41, 73], "area": 1483}, {"id": 6451576, "category_id": 189, "iscrowd": 0, "bbox": [202, 55, 14, 22], "area": 187}, {"id": 9343892, "category_id": 191, "iscrowd": 0, "bbox": [0, 3, 640, 477], "area": 51297}], "file_name": "000000130826.png", "image_id": 130826}, {"segments_info": [{"id": 3686992, "category_id": 17, "iscrowd": 0, "bbox": [80, 194, 293, 281], "area": 44040}, {"id": 9013391, "category_id": 72, "iscrowd": 0, "bbox": [54, 88, 507, 331], "area": 115725}, {"id": 13747905, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 236, 448], "area": 43769}, {"id": 9540251, "category_id": 189, "iscrowd": 0, "bbox": [0, 314, 626, 166], "area": 29206}, {"id": 15593712, "category_id": 199, "iscrowd": 0, "bbox": [72, 0, 568, 480], "area": 71736}], "file_name": "000000131131.png", "image_id": 131131}, {"segments_info": [{"id": 4868692, "category_id": 1, "iscrowd": 0, "bbox": [535, 119, 22, 21], "area": 294}, {"id": 3095145, "category_id": 47, "iscrowd": 0, "bbox": [224, 377, 42, 57], "area": 1914}, {"id": 1580845, "category_id": 47, "iscrowd": 0, "bbox": [126, 337, 44, 49], "area": 1649}, {"id": 5005943, "category_id": 47, "iscrowd": 0, "bbox": [178, 336, 42, 56], "area": 1923}, {"id": 4080208, "category_id": 50, "iscrowd": 0, "bbox": [132, 385, 39, 28], "area": 204}, {"id": 1452600, "category_id": 64, "iscrowd": 0, "bbox": [125, 111, 123, 113], "area": 3275}, {"id": 3749422, "category_id": 72, "iscrowd": 0, "bbox": [152, 120, 167, 183], "area": 23787}, {"id": 7497821, "category_id": 73, "iscrowd": 0, "bbox": [314, 144, 136, 115], "area": 10803}, {"id": 3355705, "category_id": 74, "iscrowd": 0, "bbox": [265, 361, 33, 29], "area": 708}, {"id": 8481624, "category_id": 76, "iscrowd": 0, "bbox": [268, 297, 151, 78], "area": 5335}, {"id": 3024418, "category_id": 76, "iscrowd": 0, "bbox": [326, 221, 97, 19], "area": 1281}, {"id": 3095366, "category_id": 130, "iscrowd": 0, "bbox": [0, 126, 138, 78], "area": 4889}, {"id": 6514797, "category_id": 177, "iscrowd": 0, "bbox": [422, 56, 218, 232], "area": 5467}, {"id": 11445925, "category_id": 181, "iscrowd": 0, "bbox": [393, 0, 247, 174], "area": 36355}, {"id": 5200742, "category_id": 189, "iscrowd": 0, "bbox": [50, 215, 590, 265], "area": 88441}, {"id": 8220529, "category_id": 195, "iscrowd": 0, "bbox": [0, 322, 309, 158], "area": 18063}, {"id": 2833739, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 84237}], "file_name": "000000131138.png", "image_id": 131138}, {"segments_info": [{"id": 5925215, "category_id": 18, "iscrowd": 0, "bbox": [120, 0, 360, 596], "area": 137634}, {"id": 3365964, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 431, 131], "area": 24130}, {"id": 6461841, "category_id": 193, "iscrowd": 0, "bbox": [0, 104, 261, 129], "area": 19338}], "file_name": "000000131273.png", "image_id": 131273}, {"segments_info": [{"id": 5666738, "category_id": 61, "iscrowd": 0, "bbox": [0, 5, 640, 467], "area": 291144}, {"id": 4613010, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 8992}], "file_name": "000000131379.png", "image_id": 131379}, {"segments_info": [{"id": 4469796, "category_id": 5, "iscrowd": 0, "bbox": [513, 184, 127, 151], "area": 6460}, {"id": 3615259, "category_id": 5, "iscrowd": 0, "bbox": [152, 206, 338, 175], "area": 19639}, {"id": 4207139, "category_id": 5, "iscrowd": 0, "bbox": [226, 192, 321, 113], "area": 7760}, {"id": 3746331, "category_id": 5, "iscrowd": 0, "bbox": [378, 187, 230, 165], "area": 8697}, {"id": 15655118, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 227023}], "file_name": "000000131386.png", "image_id": 131386}, {"segments_info": [{"id": 8364479, "category_id": 85, "iscrowd": 0, "bbox": [151, 239, 95, 151], "area": 8690}, {"id": 13284249, "category_id": 187, "iscrowd": 0, "bbox": [308, 0, 117, 372], "area": 33912}, {"id": 4943754, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 425, 640], "area": 229351}], "file_name": "000000131431.png", "image_id": 131431}, {"segments_info": [{"id": 7034986, "category_id": 1, "iscrowd": 0, "bbox": [68, 5, 411, 623], "area": 175797}, {"id": 5390403, "category_id": 32, "iscrowd": 0, "bbox": [180, 360, 86, 265], "area": 15829}, {"id": 6512474, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 108713}], "file_name": "000000131444.png", "image_id": 131444}, {"segments_info": [{"id": 1906463, "category_id": 1, "iscrowd": 0, "bbox": [524, 181, 7, 25], "area": 105}, {"id": 3747656, "category_id": 1, "iscrowd": 0, "bbox": [221, 220, 23, 50], "area": 467}, {"id": 1713982, "category_id": 1, "iscrowd": 0, "bbox": [578, 172, 10, 26], "area": 139}, {"id": 6311234, "category_id": 1, "iscrowd": 0, "bbox": [230, 86, 377, 214], "area": 14952}, {"id": 5726053, "category_id": 1, "iscrowd": 0, "bbox": [547, 177, 11, 26], "area": 167}, {"id": 9736578, "category_id": 35, "iscrowd": 0, "bbox": [130, 272, 319, 41], "area": 2118}, {"id": 15459806, "category_id": 159, "iscrowd": 0, "bbox": [0, 177, 640, 248], "area": 115235}, {"id": 2829613, "category_id": 184, "iscrowd": 0, "bbox": [0, 47, 640, 216], "area": 37922}, {"id": 16315889, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 158], "area": 73661}, {"id": 14671063, "category_id": 192, "iscrowd": 0, "bbox": [0, 113, 499, 95], "area": 18074}], "file_name": "000000131556.png", "image_id": 131556}, {"segments_info": [{"id": 5003885, "category_id": 17, "iscrowd": 0, "bbox": [110, 18, 301, 589], "area": 104490}, {"id": 11113099, "category_id": 32, "iscrowd": 0, "bbox": [126, 186, 199, 291], "area": 18397}, {"id": 8353904, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 463, 541], "area": 86900}], "file_name": "000000131938.png", "image_id": 131938}, {"segments_info": [{"id": 6127463, "category_id": 51, "iscrowd": 0, "bbox": [1, 268, 432, 344], "area": 88533}, {"id": 5465962, "category_id": 51, "iscrowd": 0, "bbox": [334, 1, 275, 339], "area": 48238}, {"id": 1591337, "category_id": 56, "iscrowd": 0, "bbox": [471, 182, 141, 131], "area": 9866}, {"id": 3964773, "category_id": 56, "iscrowd": 0, "bbox": [196, 271, 167, 145], "area": 15520}, {"id": 3634273, "category_id": 56, "iscrowd": 0, "bbox": [336, 66, 155, 146], "area": 15618}, {"id": 5003643, "category_id": 56, "iscrowd": 0, "bbox": [410, 208, 78, 68], "area": 3762}, {"id": 2247490, "category_id": 56, "iscrowd": 0, "bbox": [213, 362, 194, 215], "area": 23469}, {"id": 3817320, "category_id": 67, "iscrowd": 0, "bbox": [1, 1, 611, 611], "area": 151501}, {"id": 4935532, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 4870}, {"id": 2318422, "category_id": 196, "iscrowd": 0, "bbox": [596, 0, 16, 218], "area": 607}], "file_name": "000000132116.png", "image_id": 132116}, {"segments_info": [{"id": 2367792, "category_id": 44, "iscrowd": 0, "bbox": [107, 86, 54, 129], "area": 5224}, {"id": 4611452, "category_id": 44, "iscrowd": 0, "bbox": [217, 33, 51, 181], "area": 7563}, {"id": 5071483, "category_id": 44, "iscrowd": 0, "bbox": [266, 32, 56, 183], "area": 8018}, {"id": 4676991, "category_id": 44, "iscrowd": 0, "bbox": [164, 31, 51, 182], "area": 7511}, {"id": 5995936, "category_id": 82, "iscrowd": 0, "bbox": [3, 3, 423, 632], "area": 221463}], "file_name": "000000132329.png", "image_id": 132329}, {"segments_info": [{"id": 8357014, "category_id": 1, "iscrowd": 0, "bbox": [571, 46, 11, 21], "area": 137}, {"id": 8749182, "category_id": 1, "iscrowd": 0, "bbox": [582, 44, 15, 24], "area": 255}, {"id": 10457739, "category_id": 1, "iscrowd": 0, "bbox": [555, 50, 21, 22], "area": 291}, {"id": 11179651, "category_id": 2, "iscrowd": 0, "bbox": [597, 34, 43, 35], "area": 1087}, {"id": 9272954, "category_id": 2, "iscrowd": 0, "bbox": [495, 52, 40, 19], "area": 502}, {"id": 8225437, "category_id": 67, "iscrowd": 0, "bbox": [0, 250, 640, 230], "area": 101747}, {"id": 10659764, "category_id": 86, "iscrowd": 0, "bbox": [330, 212, 134, 240], "area": 22765}, {"id": 11117970, "category_id": 112, "iscrowd": 0, "bbox": [575, 0, 36, 54], "area": 1464}, {"id": 9011890, "category_id": 119, "iscrowd": 0, "bbox": [234, 47, 291, 222], "area": 41074}, {"id": 13547944, "category_id": 149, "iscrowd": 0, "bbox": [517, 75, 123, 73], "area": 7107}, {"id": 5726345, "category_id": 166, "iscrowd": 0, "bbox": [301, 0, 274, 77], "area": 15284}, {"id": 2891136, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 150, 349], "area": 41529}, {"id": 8155798, "category_id": 189, "iscrowd": 0, "bbox": [0, 310, 85, 74], "area": 126}, {"id": 12495513, "category_id": 191, "iscrowd": 0, "bbox": [502, 51, 138, 40], "area": 2499}, {"id": 8618629, "category_id": 197, "iscrowd": 0, "bbox": [266, 0, 323, 79], "area": 3490}, {"id": 2897744, "category_id": 199, "iscrowd": 0, "bbox": [289, 0, 351, 330], "area": 30161}], "file_name": "000000132375.png", "image_id": 132375}, {"segments_info": [{"id": 6448229, "category_id": 1, "iscrowd": 0, "bbox": [395, 305, 21, 57], "area": 630}, {"id": 3423297, "category_id": 1, "iscrowd": 0, "bbox": [32, 296, 64, 144], "area": 5078}, {"id": 4476755, "category_id": 1, "iscrowd": 0, "bbox": [421, 321, 8, 66], "area": 470}, {"id": 2308437, "category_id": 19, "iscrowd": 0, "bbox": [128, 256, 104, 222], "area": 15992}, {"id": 1714492, "category_id": 19, "iscrowd": 0, "bbox": [233, 238, 117, 243], "area": 17234}, {"id": 6847877, "category_id": 19, "iscrowd": 0, "bbox": [364, 309, 60, 45], "area": 1130}, {"id": 3955060, "category_id": 154, "iscrowd": 0, "bbox": [0, 394, 429, 246], "area": 65543}, {"id": 1653043, "category_id": 184, "iscrowd": 0, "bbox": [0, 136, 429, 243], "area": 55669}, {"id": 12895680, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 429, 225], "area": 74906}, {"id": 3365728, "category_id": 193, "iscrowd": 0, "bbox": [0, 342, 429, 206], "area": 36265}], "file_name": "000000132408.png", "image_id": 132408}, {"segments_info": [{"id": 3486562, "category_id": 1, "iscrowd": 0, "bbox": [16, 10, 165, 356], "area": 27967}, {"id": 2301979, "category_id": 1, "iscrowd": 0, "bbox": [282, 197, 32, 58], "area": 874}, {"id": 1381394, "category_id": 1, "iscrowd": 0, "bbox": [597, 98, 43, 140], "area": 3247}, {"id": 3814453, "category_id": 1, "iscrowd": 0, "bbox": [585, 62, 33, 177], "area": 2577}, {"id": 2435116, "category_id": 1, "iscrowd": 0, "bbox": [334, 158, 128, 192], "area": 10536}, {"id": 2367777, "category_id": 1, "iscrowd": 0, "bbox": [576, 0, 64, 111], "area": 5595}, {"id": 1643027, "category_id": 1, "iscrowd": 0, "bbox": [436, 81, 93, 202], "area": 9867}, {"id": 5460576, "category_id": 1, "iscrowd": 0, "bbox": [482, 75, 118, 287], "area": 16926}, {"id": 3353919, "category_id": 1, "iscrowd": 0, "bbox": [241, 196, 57, 59], "area": 1958}, {"id": 2762792, "category_id": 1, "iscrowd": 0, "bbox": [307, 148, 71, 107], "area": 3480}, {"id": 8026225, "category_id": 3, "iscrowd": 0, "bbox": [1, 110, 301, 208], "area": 24775}, {"id": 5388075, "category_id": 28, "iscrowd": 0, "bbox": [286, 71, 171, 103], "area": 11294}, {"id": 3782046, "category_id": 37, "iscrowd": 0, "bbox": [354, 236, 20, 20], "area": 320}, {"id": 8352093, "category_id": 39, "iscrowd": 0, "bbox": [380, 194, 105, 29], "area": 1074}, {"id": 1645596, "category_id": 40, "iscrowd": 0, "bbox": [369, 220, 49, 46], "area": 1736}, {"id": 5790799, "category_id": 184, "iscrowd": 0, "bbox": [68, 0, 188, 91], "area": 10928}, {"id": 3355955, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 345], "area": 76978}, {"id": 7115956, "category_id": 194, "iscrowd": 0, "bbox": [0, 303, 640, 124], "area": 58768}, {"id": 5922914, "category_id": 199, "iscrowd": 0, "bbox": [68, 298, 49, 33], "area": 836}], "file_name": "000000132544.png", "image_id": 132544}, {"segments_info": [{"id": 1315860, "category_id": 1, "iscrowd": 0, "bbox": [15, 17, 297, 388], "area": 39349}, {"id": 921102, "category_id": 1, "iscrowd": 0, "bbox": [312, 0, 56, 84], "area": 2326}, {"id": 526344, "category_id": 1, "iscrowd": 0, "bbox": [503, 0, 41, 70], "area": 1416}, {"id": 1776411, "category_id": 1, "iscrowd": 0, "bbox": [0, 127, 16, 30], "area": 335}, {"id": 1447446, "category_id": 1, "iscrowd": 0, "bbox": [246, 0, 42, 46], "area": 1072}, {"id": 723723, "category_id": 1, "iscrowd": 0, "bbox": [233, 0, 32, 35], "area": 508}, {"id": 13684944, "category_id": 15, "iscrowd": 0, "bbox": [264, 134, 376, 291], "area": 61624}, {"id": 723732, "category_id": 16, "iscrowd": 0, "bbox": [0, 74, 13, 13], "area": 83}, {"id": 8947848, "category_id": 44, "iscrowd": 0, "bbox": [286, 199, 36, 87], "area": 2054}, {"id": 8487297, "category_id": 44, "iscrowd": 0, "bbox": [167, 278, 13, 18], "area": 129}, {"id": 4934475, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 153131}], "file_name": "000000132587.png", "image_id": 132587}, {"segments_info": [{"id": 9015187, "category_id": 23, "iscrowd": 0, "bbox": [11, 4, 560, 508], "area": 208465}, {"id": 5343609, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 512], "area": 118815}], "file_name": "000000132622.png", "image_id": 132622}, {"segments_info": [{"id": 3819125, "category_id": 1, "iscrowd": 0, "bbox": [91, 146, 207, 171], "area": 14378}, {"id": 3289913, "category_id": 41, "iscrowd": 0, "bbox": [94, 309, 179, 55], "area": 4354}, {"id": 10790563, "category_id": 161, "iscrowd": 0, "bbox": [0, 284, 426, 356], "area": 130502}, {"id": 14133642, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 426, 380], "area": 123055}], "file_name": "000000132703.png", "image_id": 132703}, {"segments_info": [{"id": 8358299, "category_id": 1, "iscrowd": 0, "bbox": [401, 62, 147, 184], "area": 9263}, {"id": 9009000, "category_id": 1, "iscrowd": 0, "bbox": [0, 146, 147, 184], "area": 4869}, {"id": 5722455, "category_id": 1, "iscrowd": 0, "bbox": [291, 68, 112, 332], "area": 16600}, {"id": 2701898, "category_id": 15, "iscrowd": 0, "bbox": [408, 140, 173, 134], "area": 11512}, {"id": 5065806, "category_id": 15, "iscrowd": 0, "bbox": [37, 230, 123, 109], "area": 1384}, {"id": 4671040, "category_id": 22, "iscrowd": 0, "bbox": [2, 329, 165, 91], "area": 9566}, {"id": 2894376, "category_id": 22, "iscrowd": 0, "bbox": [146, 187, 494, 233], "area": 80591}, {"id": 3221030, "category_id": 27, "iscrowd": 0, "bbox": [440, 105, 68, 71], "area": 1195}, {"id": 4602422, "category_id": 62, "iscrowd": 0, "bbox": [48, 232, 103, 109], "area": 5269}, {"id": 5468510, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 308], "area": 116700}, {"id": 16184818, "category_id": 187, "iscrowd": 0, "bbox": [0, 254, 8, 33], "area": 206}], "file_name": "000000132796.png", "image_id": 132796}, {"segments_info": [{"id": 8160159, "category_id": 1, "iscrowd": 0, "bbox": [318, 64, 131, 293], "area": 19567}, {"id": 8682873, "category_id": 1, "iscrowd": 0, "bbox": [171, 102, 80, 227], "area": 10185}, {"id": 4871769, "category_id": 40, "iscrowd": 0, "bbox": [177, 182, 29, 30], "area": 672}, {"id": 8420735, "category_id": 92, "iscrowd": 0, "bbox": [0, 0, 640, 283], "area": 150907}, {"id": 7189416, "category_id": 145, "iscrowd": 0, "bbox": [0, 263, 640, 164], "area": 63089}, {"id": 5732495, "category_id": 194, "iscrowd": 0, "bbox": [0, 319, 640, 108], "area": 28433}], "file_name": "000000132931.png", "image_id": 132931}, {"segments_info": [{"id": 5259556, "category_id": 1, "iscrowd": 0, "bbox": [167, 254, 17, 19], "area": 223}, {"id": 10655868, "category_id": 1, "iscrowd": 0, "bbox": [100, 248, 20, 16], "area": 164}, {"id": 5131076, "category_id": 7, "iscrowd": 0, "bbox": [69, 174, 533, 232], "area": 77442}, {"id": 9409679, "category_id": 95, "iscrowd": 0, "bbox": [0, 114, 640, 233], "area": 26457}, {"id": 10591893, "category_id": 130, "iscrowd": 0, "bbox": [138, 370, 23, 20], "area": 243}, {"id": 6381918, "category_id": 147, "iscrowd": 0, "bbox": [0, 98, 640, 329], "area": 35080}, {"id": 6250074, "category_id": 149, "iscrowd": 0, "bbox": [0, 170, 120, 169], "area": 1714}, {"id": 2636593, "category_id": 184, "iscrowd": 0, "bbox": [0, 61, 640, 366], "area": 14534}, {"id": 9605257, "category_id": 185, "iscrowd": 0, "bbox": [0, 265, 498, 162], "area": 12896}, {"id": 11049350, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 139], "area": 55969}, {"id": 4547943, "category_id": 193, "iscrowd": 0, "bbox": [0, 166, 87, 43], "area": 2595}, {"id": 7434861, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 44096}, {"id": 4933696, "category_id": 199, "iscrowd": 0, "bbox": [0, 200, 83, 27], "area": 1457}], "file_name": "000000133000.png", "image_id": 133000}, {"segments_info": [{"id": 4543379, "category_id": 10, "iscrowd": 0, "bbox": [152, 131, 25, 61], "area": 1508}, {"id": 988710, "category_id": 10, "iscrowd": 0, "bbox": [437, 75, 28, 57], "area": 1516}, {"id": 988458, "category_id": 10, "iscrowd": 0, "bbox": [97, 131, 26, 61], "area": 1098}, {"id": 1712954, "category_id": 10, "iscrowd": 0, "bbox": [475, 67, 39, 95], "area": 3064}, {"id": 6120333, "category_id": 130, "iscrowd": 0, "bbox": [106, 132, 320, 96], "area": 1923}, {"id": 1978657, "category_id": 184, "iscrowd": 0, "bbox": [0, 33, 205, 225], "area": 22579}, {"id": 131587, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 104], "area": 38501}, {"id": 5340064, "category_id": 191, "iscrowd": 0, "bbox": [0, 250, 640, 179], "area": 85893}, {"id": 2632504, "category_id": 197, "iscrowd": 0, "bbox": [0, 28, 640, 342], "area": 106068}], "file_name": "000000133087.png", "image_id": 133087}, {"segments_info": [{"id": 7236719, "category_id": 9, "iscrowd": 0, "bbox": [360, 202, 45, 41], "area": 621}, {"id": 9673106, "category_id": 9, "iscrowd": 0, "bbox": [440, 232, 40, 10], "area": 298}, {"id": 11508371, "category_id": 9, "iscrowd": 0, "bbox": [399, 227, 35, 12], "area": 250}, {"id": 5593947, "category_id": 9, "iscrowd": 0, "bbox": [391, 239, 38, 13], "area": 391}, {"id": 8882314, "category_id": 9, "iscrowd": 0, "bbox": [65, 208, 29, 20], "area": 361}, {"id": 9079691, "category_id": 9, "iscrowd": 0, "bbox": [250, 238, 76, 38], "area": 1780}, {"id": 8290950, "category_id": 9, "iscrowd": 0, "bbox": [221, 228, 24, 21], "area": 362}, {"id": 3948095, "category_id": 9, "iscrowd": 0, "bbox": [411, 204, 89, 23], "area": 577}, {"id": 10459012, "category_id": 9, "iscrowd": 0, "bbox": [131, 218, 31, 26], "area": 557}, {"id": 8816525, "category_id": 9, "iscrowd": 0, "bbox": [165, 220, 15, 12], "area": 130}, {"id": 8553086, "category_id": 9, "iscrowd": 0, "bbox": [505, 166, 131, 90], "area": 6175}, {"id": 8815753, "category_id": 9, "iscrowd": 0, "bbox": [213, 216, 19, 10], "area": 158}, {"id": 10988460, "category_id": 9, "iscrowd": 0, "bbox": [417, 223, 30, 13], "area": 200}, {"id": 7698039, "category_id": 9, "iscrowd": 1, "bbox": [16, 186, 558, 73], "area": 13830}, {"id": 5527640, "category_id": 95, "iscrowd": 0, "bbox": [72, 219, 526, 100], "area": 13129}, {"id": 7961958, "category_id": 155, "iscrowd": 0, "bbox": [0, 190, 640, 171], "area": 57147}, {"id": 8686719, "category_id": 178, "iscrowd": 0, "bbox": [378, 241, 18, 15], "area": 143}, {"id": 3289647, "category_id": 184, "iscrowd": 0, "bbox": [607, 188, 33, 19], "area": 397}, {"id": 14471626, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 152], "area": 75465}, {"id": 5850679, "category_id": 192, "iscrowd": 0, "bbox": [0, 55, 640, 170], "area": 50351}, {"id": 3618867, "category_id": 197, "iscrowd": 0, "bbox": [0, 176, 640, 185], "area": 5681}], "file_name": "000000133233.png", "image_id": 133233}, {"segments_info": [{"id": 2831953, "category_id": 1, "iscrowd": 0, "bbox": [298, 34, 36, 49], "area": 1190}, {"id": 5665162, "category_id": 1, "iscrowd": 0, "bbox": [74, 36, 39, 47], "area": 1213}, {"id": 7767703, "category_id": 1, "iscrowd": 0, "bbox": [325, 13, 36, 55], "area": 1082}, {"id": 4473678, "category_id": 1, "iscrowd": 0, "bbox": [331, 49, 31, 34], "area": 687}, {"id": 9541283, "category_id": 1, "iscrowd": 0, "bbox": [257, 39, 40, 46], "area": 845}, {"id": 10396593, "category_id": 1, "iscrowd": 0, "bbox": [493, 32, 54, 52], "area": 1576}, {"id": 8418942, "category_id": 1, "iscrowd": 0, "bbox": [417, 38, 40, 45], "area": 1171}, {"id": 7832219, "category_id": 1, "iscrowd": 0, "bbox": [459, 35, 41, 48], "area": 1209}, {"id": 5006974, "category_id": 1, "iscrowd": 0, "bbox": [381, 38, 35, 45], "area": 1115}, {"id": 10526896, "category_id": 1, "iscrowd": 0, "bbox": [106, 35, 46, 48], "area": 1276}, {"id": 3094340, "category_id": 1, "iscrowd": 0, "bbox": [138, 6, 39, 72], "area": 1389}, {"id": 4211268, "category_id": 1, "iscrowd": 0, "bbox": [200, 107, 124, 204], "area": 9012}, {"id": 5266278, "category_id": 1, "iscrowd": 0, "bbox": [544, 132, 62, 71], "area": 2568}, {"id": 5463661, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 639, 117], "area": 38078}, {"id": 7633802, "category_id": 43, "iscrowd": 0, "bbox": [242, 219, 22, 52], "area": 569}, {"id": 4035494, "category_id": 44, "iscrowd": 0, "bbox": [440, 171, 7, 17], "area": 108}, {"id": 7498858, "category_id": 62, "iscrowd": 0, "bbox": [218, 75, 62, 59], "area": 1844}, {"id": 7433835, "category_id": 62, "iscrowd": 0, "bbox": [420, 97, 65, 90], "area": 4035}, {"id": 9081230, "category_id": 62, "iscrowd": 0, "bbox": [367, 118, 65, 68], "area": 1532}, {"id": 3880757, "category_id": 62, "iscrowd": 0, "bbox": [186, 21, 24, 57], "area": 366}, {"id": 4469039, "category_id": 62, "iscrowd": 0, "bbox": [235, 56, 43, 21], "area": 862}, {"id": 5723220, "category_id": 138, "iscrowd": 0, "bbox": [301, 106, 339, 253], "area": 31994}, {"id": 8154472, "category_id": 145, "iscrowd": 0, "bbox": [0, 208, 640, 151], "area": 64214}, {"id": 6323337, "category_id": 161, "iscrowd": 0, "bbox": [590, 48, 18, 35], "area": 278}, {"id": 5800314, "category_id": 190, "iscrowd": 0, "bbox": [0, 126, 604, 88], "area": 32799}, {"id": 6508612, "category_id": 199, "iscrowd": 0, "bbox": [0, 59, 611, 78], "area": 24868}], "file_name": "000000133244.png", "image_id": 133244}, {"segments_info": [{"id": 2832465, "category_id": 1, "iscrowd": 0, "bbox": [2, 10, 291, 464], "area": 107292}, {"id": 733501, "category_id": 32, "iscrowd": 0, "bbox": [72, 302, 90, 166], "area": 5271}, {"id": 1578260, "category_id": 109, "iscrowd": 0, "bbox": [48, 0, 247, 56], "area": 4906}, {"id": 464666, "category_id": 141, "iscrowd": 0, "bbox": [0, 13, 295, 239], "area": 11807}, {"id": 2110020, "category_id": 190, "iscrowd": 0, "bbox": [243, 104, 52, 45], "area": 1304}, {"id": 2436914, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 295, 122], "area": 8045}], "file_name": "000000133343.png", "image_id": 133343}, {"segments_info": [{"id": 6576751, "category_id": 1, "iscrowd": 0, "bbox": [304, 37, 193, 382], "area": 48401}, {"id": 3624328, "category_id": 43, "iscrowd": 0, "bbox": [387, 268, 253, 159], "area": 13489}, {"id": 2247839, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 209475}], "file_name": "000000133418.png", "image_id": 133418}, {"segments_info": [{"id": 5984592, "category_id": 1, "iscrowd": 0, "bbox": [34, 198, 98, 230], "area": 14363}, {"id": 9208188, "category_id": 7, "iscrowd": 0, "bbox": [1, 83, 577, 210], "area": 86029}, {"id": 7036503, "category_id": 149, "iscrowd": 0, "bbox": [0, 241, 640, 187], "area": 84899}, {"id": 9546172, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 398, 191], "area": 18490}, {"id": 12631741, "category_id": 185, "iscrowd": 0, "bbox": [562, 182, 78, 73], "area": 3711}, {"id": 16578243, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 225, 106], "area": 17468}, {"id": 14936560, "category_id": 191, "iscrowd": 0, "bbox": [590, 252, 50, 37], "area": 1333}, {"id": 10463451, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 159], "area": 38840}, {"id": 9012098, "category_id": 199, "iscrowd": 0, "bbox": [533, 133, 107, 59], "area": 3304}], "file_name": "000000133567.png", "image_id": 133567}, {"segments_info": [{"id": 4084832, "category_id": 22, "iscrowd": 0, "bbox": [93, 51, 332, 561], "area": 109623}, {"id": 6251106, "category_id": 185, "iscrowd": 0, "bbox": [0, 78, 147, 357], "area": 11352}, {"id": 8559784, "category_id": 194, "iscrowd": 0, "bbox": [0, 384, 425, 256], "area": 70586}, {"id": 2635074, "category_id": 198, "iscrowd": 0, "bbox": [0, 526, 136, 55], "area": 3598}, {"id": 3948334, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 425, 100], "area": 16889}], "file_name": "000000133631.png", "image_id": 133631}, {"segments_info": [{"id": 8949911, "category_id": 9, "iscrowd": 0, "bbox": [294, 124, 56, 23], "area": 875}, {"id": 5789776, "category_id": 9, "iscrowd": 0, "bbox": [208, 184, 140, 118], "area": 12250}, {"id": 8227216, "category_id": 9, "iscrowd": 0, "bbox": [86, 149, 22, 15], "area": 172}, {"id": 8620945, "category_id": 9, "iscrowd": 0, "bbox": [505, 131, 19, 6], "area": 64}, {"id": 5924982, "category_id": 9, "iscrowd": 0, "bbox": [32, 157, 51, 8], "area": 358}, {"id": 7105901, "category_id": 9, "iscrowd": 0, "bbox": [177, 137, 32, 9], "area": 161}, {"id": 5661031, "category_id": 9, "iscrowd": 0, "bbox": [131, 145, 79, 7], "area": 451}, {"id": 2499619, "category_id": 15, "iscrowd": 0, "bbox": [404, 319, 98, 89], "area": 4036}, {"id": 5261384, "category_id": 118, "iscrowd": 0, "bbox": [106, 254, 534, 173], "area": 16245}, {"id": 14608110, "category_id": 130, "iscrowd": 0, "bbox": [247, 169, 23, 26], "area": 375}, {"id": 5656645, "category_id": 148, "iscrowd": 0, "bbox": [0, 125, 640, 272], "area": 93429}, {"id": 3160629, "category_id": 175, "iscrowd": 0, "bbox": [0, 252, 47, 37], "area": 1141}, {"id": 1977639, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 173], "area": 92352}, {"id": 3621438, "category_id": 191, "iscrowd": 0, "bbox": [0, 282, 43, 22], "area": 467}, {"id": 1851193, "category_id": 193, "iscrowd": 0, "bbox": [0, 252, 601, 175], "area": 49154}], "file_name": "000000133645.png", "image_id": 133645}, {"segments_info": [{"id": 7905478, "category_id": 21, "iscrowd": 0, "bbox": [60, 77, 509, 304], "area": 65779}, {"id": 1515564, "category_id": 21, "iscrowd": 0, "bbox": [110, 162, 344, 237], "area": 42032}, {"id": 3035999, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 413, 41], "area": 4011}, {"id": 6464934, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 483], "area": 196022}], "file_name": "000000133778.png", "image_id": 133778}, {"segments_info": [{"id": 3027510, "category_id": 1, "iscrowd": 0, "bbox": [502, 203, 17, 26], "area": 198}, {"id": 10134450, "category_id": 1, "iscrowd": 0, "bbox": [61, 212, 15, 31], "area": 217}, {"id": 5856881, "category_id": 1, "iscrowd": 0, "bbox": [0, 211, 23, 35], "area": 438}, {"id": 2763303, "category_id": 1, "iscrowd": 0, "bbox": [436, 205, 24, 32], "area": 322}, {"id": 5526889, "category_id": 1, "iscrowd": 0, "bbox": [99, 209, 21, 68], "area": 845}, {"id": 4272734, "category_id": 1, "iscrowd": 0, "bbox": [469, 207, 22, 27], "area": 251}, {"id": 4737617, "category_id": 1, "iscrowd": 0, "bbox": [67, 207, 22, 77], "area": 818}, {"id": 3092276, "category_id": 1, "iscrowd": 0, "bbox": [46, 208, 18, 36], "area": 333}, {"id": 6118001, "category_id": 1, "iscrowd": 0, "bbox": [26, 211, 29, 34], "area": 584}, {"id": 3091240, "category_id": 1, "iscrowd": 0, "bbox": [490, 210, 19, 22], "area": 185}, {"id": 4535862, "category_id": 1, "iscrowd": 0, "bbox": [95, 211, 8, 28], "area": 160}, {"id": 4142117, "category_id": 6, "iscrowd": 0, "bbox": [618, 164, 22, 101], "area": 1923}, {"id": 6909854, "category_id": 6, "iscrowd": 0, "bbox": [481, 128, 159, 132], "area": 4951}, {"id": 6971973, "category_id": 6, "iscrowd": 0, "bbox": [146, 85, 420, 277], "area": 91686}, {"id": 3552311, "category_id": 10, "iscrowd": 0, "bbox": [64, 115, 28, 65], "area": 1179}, {"id": 1512211, "category_id": 10, "iscrowd": 0, "bbox": [549, 4, 45, 72], "area": 2573}, {"id": 3222305, "category_id": 10, "iscrowd": 0, "bbox": [301, 211, 7, 9], "area": 46}, {"id": 3420982, "category_id": 10, "iscrowd": 0, "bbox": [100, 133, 21, 48], "area": 724}, {"id": 3552050, "category_id": 14, "iscrowd": 0, "bbox": [577, 255, 43, 73], "area": 3089}, {"id": 6710891, "category_id": 31, "iscrowd": 0, "bbox": [13, 232, 9, 14], "area": 96}, {"id": 2301985, "category_id": 31, "iscrowd": 0, "bbox": [106, 247, 12, 19], "area": 87}, {"id": 6252685, "category_id": 128, "iscrowd": 0, "bbox": [367, 37, 273, 129], "area": 16969}, {"id": 6184544, "category_id": 149, "iscrowd": 0, "bbox": [0, 283, 534, 142], "area": 42426}, {"id": 4013374, "category_id": 185, "iscrowd": 0, "bbox": [0, 219, 640, 206], "area": 20959}, {"id": 15986928, "category_id": 187, "iscrowd": 0, "bbox": [26, 0, 614, 145], "area": 42096}, {"id": 8356744, "category_id": 191, "iscrowd": 0, "bbox": [0, 268, 640, 157], "area": 9414}, {"id": 3372686, "category_id": 195, "iscrowd": 0, "bbox": [110, 206, 17, 14], "area": 99}, {"id": 7567217, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 244, 238], "area": 20708}], "file_name": "000000133819.png", "image_id": 133819}, {"segments_info": [{"id": 11177861, "category_id": 1, "iscrowd": 0, "bbox": [584, 112, 56, 204], "area": 6934}, {"id": 10853536, "category_id": 1, "iscrowd": 0, "bbox": [315, 142, 203, 234], "area": 15170}, {"id": 10059381, "category_id": 1, "iscrowd": 0, "bbox": [265, 108, 60, 204], "area": 5505}, {"id": 4473414, "category_id": 1, "iscrowd": 0, "bbox": [0, 138, 115, 235], "area": 14253}, {"id": 9863029, "category_id": 1, "iscrowd": 0, "bbox": [544, 178, 65, 137], "area": 4803}, {"id": 9535094, "category_id": 1, "iscrowd": 0, "bbox": [447, 128, 63, 193], "area": 6537}, {"id": 8810083, "category_id": 1, "iscrowd": 0, "bbox": [215, 177, 76, 143], "area": 5331}, {"id": 11643307, "category_id": 1, "iscrowd": 0, "bbox": [439, 129, 28, 124], "area": 1597}, {"id": 5392194, "category_id": 1, "iscrowd": 0, "bbox": [375, 119, 30, 47], "area": 415}, {"id": 11970984, "category_id": 1, "iscrowd": 0, "bbox": [322, 122, 61, 81], "area": 2250}, {"id": 9272694, "category_id": 1, "iscrowd": 0, "bbox": [210, 111, 57, 106], "area": 3178}, {"id": 5459022, "category_id": 1, "iscrowd": 0, "bbox": [62, 211, 172, 164], "area": 16183}, {"id": 8286057, "category_id": 1, "iscrowd": 0, "bbox": [304, 177, 69, 140], "area": 4287}, {"id": 7495767, "category_id": 1, "iscrowd": 1, "bbox": [57, 111, 386, 209], "area": 3044}, {"id": 5786691, "category_id": 15, "iscrowd": 0, "bbox": [80, 249, 463, 10], "area": 496}, {"id": 7891813, "category_id": 39, "iscrowd": 0, "bbox": [355, 110, 16, 121], "area": 770}, {"id": 4143676, "category_id": 40, "iscrowd": 0, "bbox": [229, 278, 29, 44], "area": 901}, {"id": 8428194, "category_id": 145, "iscrowd": 0, "bbox": [0, 269, 640, 158], "area": 63397}, {"id": 13288895, "category_id": 187, "iscrowd": 0, "bbox": [98, 0, 542, 21], "area": 7956}, {"id": 3354666, "category_id": 199, "iscrowd": 0, "bbox": [0, 42, 640, 283], "area": 69663}], "file_name": "000000133969.png", "image_id": 133969}, {"segments_info": [{"id": 1588091, "category_id": 19, "iscrowd": 0, "bbox": [362, 262, 60, 85], "area": 3098}, {"id": 5927556, "category_id": 19, "iscrowd": 0, "bbox": [86, 260, 51, 95], "area": 3075}, {"id": 4413544, "category_id": 128, "iscrowd": 0, "bbox": [0, 203, 475, 72], "area": 3750}, {"id": 4602139, "category_id": 181, "iscrowd": 0, "bbox": [440, 244, 11, 14], "area": 142}, {"id": 3100481, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 475, 500], "area": 103494}, {"id": 14073483, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 475, 215], "area": 16432}, {"id": 5147284, "category_id": 193, "iscrowd": 0, "bbox": [0, 240, 475, 260], "area": 66384}, {"id": 8495012, "category_id": 197, "iscrowd": 0, "bbox": [114, 209, 95, 77], "area": 2855}], "file_name": "000000134034.png", "image_id": 134034}, {"segments_info": [{"id": 2377320, "category_id": 17, "iscrowd": 0, "bbox": [215, 106, 425, 367], "area": 111467}, {"id": 5015471, "category_id": 70, "iscrowd": 0, "bbox": [417, 133, 138, 94], "area": 6385}, {"id": 5542584, "category_id": 70, "iscrowd": 0, "bbox": [1, 133, 38, 180], "area": 6369}, {"id": 7384528, "category_id": 81, "iscrowd": 0, "bbox": [2, 406, 363, 74], "area": 20957}, {"id": 8503004, "category_id": 133, "iscrowd": 0, "bbox": [148, 0, 228, 28], "area": 4309}, {"id": 4560319, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 630, 92], "area": 29759}, {"id": 7584739, "category_id": 176, "iscrowd": 0, "bbox": [16, 0, 624, 38], "area": 10261}, {"id": 5281727, "category_id": 199, "iscrowd": 0, "bbox": [0, 17, 640, 410], "area": 110443}], "file_name": "000000134096.png", "image_id": 134096}, {"segments_info": [{"id": 7437186, "category_id": 18, "iscrowd": 0, "bbox": [194, 66, 294, 206], "area": 33236}, {"id": 7243157, "category_id": 65, "iscrowd": 0, "bbox": [2, 6, 497, 341], "area": 83099}, {"id": 4801346, "category_id": 73, "iscrowd": 0, "bbox": [2, 89, 393, 245], "area": 49570}, {"id": 9086390, "category_id": 93, "iscrowd": 0, "bbox": [0, 74, 500, 283], "area": 6115}, {"id": 6848147, "category_id": 141, "iscrowd": 0, "bbox": [0, 0, 500, 246], "area": 4998}], "file_name": "000000134112.png", "image_id": 134112}, {"segments_info": [{"id": 5260882, "category_id": 1, "iscrowd": 0, "bbox": [203, 315, 4, 18], "area": 52}, {"id": 2829091, "category_id": 1, "iscrowd": 0, "bbox": [206, 374, 14, 30], "area": 225}, {"id": 4342073, "category_id": 1, "iscrowd": 0, "bbox": [5, 366, 12, 41], "area": 334}, {"id": 5062208, "category_id": 1, "iscrowd": 0, "bbox": [433, 327, 5, 22], "area": 56}, {"id": 4534078, "category_id": 1, "iscrowd": 0, "bbox": [395, 325, 7, 20], "area": 86}, {"id": 3548964, "category_id": 1, "iscrowd": 0, "bbox": [147, 305, 9, 26], "area": 153}, {"id": 4271656, "category_id": 1, "iscrowd": 0, "bbox": [321, 318, 5, 24], "area": 96}, {"id": 4208957, "category_id": 1, "iscrowd": 0, "bbox": [107, 301, 7, 27], "area": 141}, {"id": 3814962, "category_id": 1, "iscrowd": 0, "bbox": [41, 299, 8, 25], "area": 142}, {"id": 3747119, "category_id": 1, "iscrowd": 0, "bbox": [354, 322, 4, 10], "area": 22}, {"id": 1776150, "category_id": 1, "iscrowd": 0, "bbox": [25, 368, 19, 40], "area": 438}, {"id": 4994383, "category_id": 1, "iscrowd": 0, "bbox": [45, 461, 26, 19], "area": 272}, {"id": 5387297, "category_id": 1, "iscrowd": 0, "bbox": [316, 328, 7, 21], "area": 88}, {"id": 5064516, "category_id": 1, "iscrowd": 1, "bbox": [1, 275, 633, 133], "area": 14110}, {"id": 6053476, "category_id": 38, "iscrowd": 0, "bbox": [523, 46, 85, 74], "area": 3450}, {"id": 6055007, "category_id": 148, "iscrowd": 0, "bbox": [0, 382, 640, 98], "area": 33855}, {"id": 3947646, "category_id": 151, "iscrowd": 0, "bbox": [0, 254, 112, 33], "area": 2571}, {"id": 3687482, "category_id": 161, "iscrowd": 0, "bbox": [462, 331, 69, 47], "area": 989}, {"id": 3159335, "category_id": 184, "iscrowd": 0, "bbox": [535, 296, 44, 47], "area": 828}, {"id": 3028534, "category_id": 185, "iscrowd": 0, "bbox": [0, 375, 640, 77], "area": 15670}, {"id": 14672609, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 340], "area": 182122}, {"id": 2774593, "category_id": 193, "iscrowd": 0, "bbox": [0, 296, 558, 120], "area": 18420}, {"id": 8619135, "category_id": 197, "iscrowd": 0, "bbox": [0, 141, 639, 226], "area": 15667}], "file_name": "000000134322.png", "image_id": 134322}, {"segments_info": [{"id": 3228762, "category_id": 25, "iscrowd": 0, "bbox": [39, 76, 335, 502], "area": 46495}, {"id": 5069393, "category_id": 184, "iscrowd": 0, "bbox": [49, 234, 223, 93], "area": 4727}, {"id": 13089192, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 317], "area": 110278}, {"id": 4679021, "category_id": 193, "iscrowd": 0, "bbox": [0, 296, 427, 215], "area": 52669}, {"id": 4742000, "category_id": 194, "iscrowd": 0, "bbox": [0, 454, 427, 186], "area": 58616}], "file_name": "000000134689.png", "image_id": 134689}, {"segments_info": [{"id": 5786184, "category_id": 7, "iscrowd": 0, "bbox": [194, 190, 445, 196], "area": 54952}, {"id": 6515577, "category_id": 15, "iscrowd": 0, "bbox": [0, 290, 42, 36], "area": 794}, {"id": 2432026, "category_id": 125, "iscrowd": 0, "bbox": [0, 318, 640, 162], "area": 18359}, {"id": 4010800, "category_id": 144, "iscrowd": 0, "bbox": [0, 312, 640, 168], "area": 41736}, {"id": 1379856, "category_id": 147, "iscrowd": 0, "bbox": [0, 330, 577, 132], "area": 25361}, {"id": 8554376, "category_id": 184, "iscrowd": 0, "bbox": [0, 107, 640, 203], "area": 32427}, {"id": 2695205, "category_id": 186, "iscrowd": 0, "bbox": [572, 0, 68, 116], "area": 4179}, {"id": 16378064, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 259], "area": 111030}, {"id": 4285038, "category_id": 194, "iscrowd": 0, "bbox": [119, 302, 78, 24], "area": 1130}, {"id": 8035016, "category_id": 197, "iscrowd": 0, "bbox": [0, 143, 131, 185], "area": 16947}], "file_name": "000000134722.png", "image_id": 134722}, {"segments_info": [{"id": 7694427, "category_id": 1, "iscrowd": 0, "bbox": [166, 374, 8, 19], "area": 96}, {"id": 7363926, "category_id": 1, "iscrowd": 0, "bbox": [59, 372, 6, 11], "area": 38}, {"id": 6049606, "category_id": 1, "iscrowd": 0, "bbox": [305, 375, 6, 20], "area": 65}, {"id": 6378312, "category_id": 19, "iscrowd": 0, "bbox": [154, 381, 25, 21], "area": 174}, {"id": 6903887, "category_id": 19, "iscrowd": 0, "bbox": [50, 377, 21, 22], "area": 192}, {"id": 6444359, "category_id": 19, "iscrowd": 0, "bbox": [295, 380, 25, 23], "area": 196}, {"id": 9472380, "category_id": 154, "iscrowd": 0, "bbox": [0, 391, 640, 89], "area": 51689}, {"id": 10851965, "category_id": 155, "iscrowd": 0, "bbox": [0, 289, 640, 115], "area": 56958}, {"id": 12168603, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 189], "area": 102484}, {"id": 10060649, "category_id": 192, "iscrowd": 0, "bbox": [0, 135, 640, 179], "area": 95201}], "file_name": "000000134856.png", "image_id": 134856}, {"segments_info": [{"id": 1115907, "category_id": 17, "iscrowd": 0, "bbox": [273, 329, 151, 64], "area": 7462}, {"id": 12359076, "category_id": 65, "iscrowd": 0, "bbox": [27, 348, 590, 273], "area": 137042}, {"id": 4337947, "category_id": 73, "iscrowd": 0, "bbox": [468, 383, 151, 43], "area": 4114}, {"id": 14332348, "category_id": 84, "iscrowd": 0, "bbox": [40, 261, 28, 87], "area": 1093}, {"id": 9467757, "category_id": 84, "iscrowd": 0, "bbox": [209, 130, 15, 75], "area": 1072}, {"id": 11442351, "category_id": 84, "iscrowd": 0, "bbox": [76, 165, 102, 35], "area": 2523}, {"id": 8349289, "category_id": 84, "iscrowd": 0, "bbox": [164, 252, 31, 53], "area": 723}, {"id": 4733253, "category_id": 84, "iscrowd": 0, "bbox": [223, 126, 16, 80], "area": 1120}, {"id": 5918518, "category_id": 84, "iscrowd": 0, "bbox": [134, 121, 47, 56], "area": 1269}, {"id": 7694724, "category_id": 84, "iscrowd": 0, "bbox": [79, 149, 85, 22], "area": 1043}, {"id": 12296890, "category_id": 84, "iscrowd": 0, "bbox": [179, 118, 31, 86], "area": 1460}, {"id": 9599870, "category_id": 84, "iscrowd": 0, "bbox": [58, 101, 34, 87], "area": 1905}, {"id": 12886696, "category_id": 84, "iscrowd": 0, "bbox": [44, 274, 13, 72], "area": 858}, {"id": 10780550, "category_id": 84, "iscrowd": 0, "bbox": [219, 243, 14, 43], "area": 515}, {"id": 10981274, "category_id": 84, "iscrowd": 0, "bbox": [167, 122, 28, 79], "area": 1279}, {"id": 8287615, "category_id": 84, "iscrowd": 0, "bbox": [86, 139, 60, 18], "area": 611}, {"id": 7297365, "category_id": 84, "iscrowd": 1, "bbox": [21, 102, 225, 248], "area": 17530}, {"id": 5322289, "category_id": 88, "iscrowd": 0, "bbox": [231, 260, 54, 50], "area": 1774}, {"id": 5063751, "category_id": 141, "iscrowd": 0, "bbox": [151, 296, 167, 78], "area": 6602}, {"id": 5400443, "category_id": 156, "iscrowd": 0, "bbox": [0, 82, 247, 194], "area": 15208}, {"id": 6908257, "category_id": 186, "iscrowd": 0, "bbox": [154, 23, 327, 84], "area": 16973}, {"id": 9407123, "category_id": 199, "iscrowd": 0, "bbox": [137, 23, 481, 367], "area": 111614}], "file_name": "000000134882.png", "image_id": 134882}, {"segments_info": [{"id": 2367773, "category_id": 1, "iscrowd": 0, "bbox": [455, 382, 11, 9], "area": 59}, {"id": 2441534, "category_id": 1, "iscrowd": 0, "bbox": [578, 368, 10, 14], "area": 92}, {"id": 5332844, "category_id": 1, "iscrowd": 0, "bbox": [551, 369, 23, 30], "area": 381}, {"id": 5460306, "category_id": 1, "iscrowd": 0, "bbox": [493, 409, 8, 21], "area": 108}, {"id": 2236705, "category_id": 1, "iscrowd": 0, "bbox": [582, 347, 22, 24], "area": 318}, {"id": 5856869, "category_id": 1, "iscrowd": 0, "bbox": [610, 367, 13, 11], "area": 91}, {"id": 2367778, "category_id": 1, "iscrowd": 0, "bbox": [505, 391, 11, 18], "area": 126}, {"id": 4277834, "category_id": 1, "iscrowd": 0, "bbox": [418, 382, 17, 33], "area": 328}, {"id": 3621195, "category_id": 1, "iscrowd": 0, "bbox": [505, 376, 36, 62], "area": 619}, {"id": 2897476, "category_id": 1, "iscrowd": 0, "bbox": [601, 369, 11, 12], "area": 48}, {"id": 5131854, "category_id": 3, "iscrowd": 0, "bbox": [431, 374, 62, 60], "area": 2748}, {"id": 6644319, "category_id": 5, "iscrowd": 0, "bbox": [140, 183, 228, 68], "area": 7307}, {"id": 11577247, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 416], "area": 233466}, {"id": 5333358, "category_id": 193, "iscrowd": 0, "bbox": [0, 340, 640, 140], "area": 56560}, {"id": 5268080, "category_id": 194, "iscrowd": 0, "bbox": [411, 410, 114, 70], "area": 4546}], "file_name": "000000134886.png", "image_id": 134886}, {"segments_info": [{"id": 2499360, "category_id": 1, "iscrowd": 0, "bbox": [207, 196, 81, 147], "area": 4747}, {"id": 4603444, "category_id": 2, "iscrowd": 0, "bbox": [0, 493, 102, 147], "area": 5469}, {"id": 4605253, "category_id": 3, "iscrowd": 0, "bbox": [117, 199, 170, 39], "area": 3164}, {"id": 4933956, "category_id": 3, "iscrowd": 0, "bbox": [154, 222, 225, 94], "area": 3291}, {"id": 5590853, "category_id": 3, "iscrowd": 0, "bbox": [0, 222, 54, 91], "area": 3248}, {"id": 1447187, "category_id": 3, "iscrowd": 0, "bbox": [375, 217, 71, 20], "area": 1117}, {"id": 2236442, "category_id": 3, "iscrowd": 0, "bbox": [334, 249, 129, 71], "area": 5173}, {"id": 6970957, "category_id": 3, "iscrowd": 0, "bbox": [1, 215, 70, 46], "area": 1684}, {"id": 1907738, "category_id": 4, "iscrowd": 0, "bbox": [177, 254, 188, 109], "area": 7093}, {"id": 1710872, "category_id": 14, "iscrowd": 0, "bbox": [47, 217, 140, 319], "area": 34636}, {"id": 10988457, "category_id": 149, "iscrowd": 0, "bbox": [0, 303, 480, 232], "area": 52754}, {"id": 2367771, "category_id": 161, "iscrowd": 0, "bbox": [172, 0, 308, 640], "area": 44945}, {"id": 2503980, "category_id": 184, "iscrowd": 0, "bbox": [24, 0, 456, 221], "area": 47239}, {"id": 16645628, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 66, 140], "area": 7333}, {"id": 12285743, "category_id": 190, "iscrowd": 0, "bbox": [135, 500, 345, 140], "area": 33880}, {"id": 3485478, "category_id": 197, "iscrowd": 0, "bbox": [54, 0, 426, 234], "area": 20599}, {"id": 6842468, "category_id": 199, "iscrowd": 0, "bbox": [0, 88, 480, 150], "area": 11085}], "file_name": "000000135410.png", "image_id": 135410}, {"segments_info": [{"id": 1975080, "category_id": 44, "iscrowd": 0, "bbox": [406, 265, 12, 21], "area": 194}, {"id": 987153, "category_id": 47, "iscrowd": 0, "bbox": [557, 375, 20, 21], "area": 341}, {"id": 3094337, "category_id": 51, "iscrowd": 0, "bbox": [415, 326, 30, 18], "area": 455}, {"id": 3292231, "category_id": 51, "iscrowd": 0, "bbox": [408, 285, 20, 10], "area": 150}, {"id": 2830135, "category_id": 80, "iscrowd": 0, "bbox": [101, 380, 82, 54], "area": 3209}, {"id": 2370095, "category_id": 81, "iscrowd": 0, "bbox": [566, 397, 52, 28], "area": 867}, {"id": 4412519, "category_id": 82, "iscrowd": 0, "bbox": [247, 278, 159, 195], "area": 26396}, {"id": 3687760, "category_id": 85, "iscrowd": 0, "bbox": [433, 222, 17, 15], "area": 201}, {"id": 2963026, "category_id": 100, "iscrowd": 0, "bbox": [179, 392, 63, 38], "area": 1637}, {"id": 4875388, "category_id": 107, "iscrowd": 0, "bbox": [36, 383, 604, 97], "area": 11454}, {"id": 4541785, "category_id": 109, "iscrowd": 0, "bbox": [571, 176, 69, 198], "area": 11190}, {"id": 3423557, "category_id": 112, "iscrowd": 0, "bbox": [461, 181, 133, 271], "area": 24413}, {"id": 2897215, "category_id": 156, "iscrowd": 0, "bbox": [306, 141, 168, 328], "area": 27129}, {"id": 987150, "category_id": 171, "iscrowd": 0, "bbox": [0, 67, 201, 413], "area": 29064}, {"id": 4345679, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 181], "area": 82436}, {"id": 9217464, "category_id": 188, "iscrowd": 0, "bbox": [36, 69, 318, 411], "area": 61314}, {"id": 4410965, "category_id": 199, "iscrowd": 0, "bbox": [237, 157, 403, 120], "area": 6336}], "file_name": "000000135561.png", "image_id": 135561}, {"segments_info": [{"id": 10196380, "category_id": 1, "iscrowd": 0, "bbox": [455, 38, 100, 300], "area": 17357}, {"id": 8550773, "category_id": 3, "iscrowd": 0, "bbox": [405, 99, 28, 17], "area": 230}, {"id": 11185068, "category_id": 37, "iscrowd": 0, "bbox": [425, 284, 40, 36], "area": 1177}, {"id": 5938326, "category_id": 145, "iscrowd": 0, "bbox": [0, 85, 640, 342], "area": 183264}, {"id": 3886154, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 91], "area": 43320}, {"id": 5067858, "category_id": 185, "iscrowd": 0, "bbox": [79, 64, 561, 69], "area": 18727}, {"id": 14274506, "category_id": 187, "iscrowd": 0, "bbox": [236, 0, 351, 83], "area": 5240}], "file_name": "000000135604.png", "image_id": 135604}, {"segments_info": [{"id": 7365469, "category_id": 2, "iscrowd": 0, "bbox": [197, 200, 105, 173], "area": 10334}, {"id": 1865627, "category_id": 112, "iscrowd": 0, "bbox": [0, 83, 127, 367], "area": 30281}, {"id": 16119799, "category_id": 130, "iscrowd": 0, "bbox": [123, 0, 177, 101], "area": 3473}, {"id": 12493716, "category_id": 181, "iscrowd": 0, "bbox": [43, 105, 235, 212], "area": 12874}, {"id": 8622226, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 375, 155], "area": 27516}, {"id": 4670016, "category_id": 190, "iscrowd": 0, "bbox": [0, 334, 375, 166], "area": 32907}, {"id": 9015444, "category_id": 199, "iscrowd": 0, "bbox": [0, 12, 375, 459], "area": 65168}], "file_name": "000000135670.png", "image_id": 135670}, {"segments_info": [{"id": 11507587, "category_id": 5, "iscrowd": 0, "bbox": [221, 162, 125, 44], "area": 1327}, {"id": 14736867, "category_id": 5, "iscrowd": 0, "bbox": [313, 200, 104, 47], "area": 1572}, {"id": 14401443, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 270213}], "file_name": "000000135673.png", "image_id": 135673}, {"segments_info": [{"id": 9083816, "category_id": 47, "iscrowd": 0, "bbox": [379, 142, 17, 18], "area": 250}, {"id": 2633265, "category_id": 62, "iscrowd": 0, "bbox": [389, 145, 149, 246], "area": 12099}, {"id": 2174004, "category_id": 72, "iscrowd": 0, "bbox": [191, 178, 34, 89], "area": 575}, {"id": 6316901, "category_id": 72, "iscrowd": 0, "bbox": [271, 43, 88, 100], "area": 7749}, {"id": 7044752, "category_id": 73, "iscrowd": 0, "bbox": [186, 174, 110, 98], "area": 2520}, {"id": 10529203, "category_id": 74, "iscrowd": 0, "bbox": [408, 157, 21, 9], "area": 148}, {"id": 9600632, "category_id": 74, "iscrowd": 0, "bbox": [410, 170, 3, 3], "area": 5}, {"id": 13422288, "category_id": 74, "iscrowd": 0, "bbox": [411, 167, 16, 10], "area": 99}, {"id": 14013398, "category_id": 74, "iscrowd": 0, "bbox": [383, 169, 19, 7], "area": 108}, {"id": 3817798, "category_id": 76, "iscrowd": 0, "bbox": [334, 177, 69, 29], "area": 1091}, {"id": 12832985, "category_id": 76, "iscrowd": 0, "bbox": [309, 168, 60, 29], "area": 799}, {"id": 10791906, "category_id": 84, "iscrowd": 0, "bbox": [299, 208, 67, 31], "area": 1589}, {"id": 7633790, "category_id": 112, "iscrowd": 0, "bbox": [612, 215, 28, 95], "area": 1550}, {"id": 2374735, "category_id": 188, "iscrowd": 0, "bbox": [0, 321, 189, 106], "area": 13380}, {"id": 5270404, "category_id": 189, "iscrowd": 0, "bbox": [109, 101, 387, 306], "area": 30130}, {"id": 5331807, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 343], "area": 123824}, {"id": 4999754, "category_id": 200, "iscrowd": 0, "bbox": [172, 208, 468, 219], "area": 55855}], "file_name": "000000135872.png", "image_id": 135872}, {"segments_info": [{"id": 263461, "category_id": 1, "iscrowd": 0, "bbox": [261, 552, 7, 9], "area": 33}, {"id": 788232, "category_id": 1, "iscrowd": 0, "bbox": [47, 557, 12, 17], "area": 147}, {"id": 525575, "category_id": 1, "iscrowd": 0, "bbox": [0, 556, 7, 15], "area": 89}, {"id": 262915, "category_id": 1, "iscrowd": 0, "bbox": [19, 555, 10, 17], "area": 119}, {"id": 920593, "category_id": 1, "iscrowd": 0, "bbox": [102, 553, 13, 23], "area": 226}, {"id": 591111, "category_id": 1, "iscrowd": 0, "bbox": [258, 558, 9, 21], "area": 154}, {"id": 460039, "category_id": 1, "iscrowd": 0, "bbox": [84, 558, 9, 17], "area": 90}, {"id": 1643023, "category_id": 1, "iscrowd": 0, "bbox": [31, 552, 9, 20], "area": 136}, {"id": 1443591, "category_id": 1, "iscrowd": 0, "bbox": [275, 547, 10, 32], "area": 219}, {"id": 197124, "category_id": 1, "iscrowd": 0, "bbox": [290, 556, 12, 20], "area": 154}, {"id": 3880240, "category_id": 85, "iscrowd": 0, "bbox": [174, 107, 38, 48], "area": 1130}, {"id": 3485740, "category_id": 85, "iscrowd": 0, "bbox": [105, 108, 37, 49], "area": 1011}, {"id": 1971731, "category_id": 149, "iscrowd": 0, "bbox": [0, 574, 428, 66], "area": 17766}, {"id": 12824475, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 428, 453], "area": 133553}, {"id": 791325, "category_id": 197, "iscrowd": 0, "bbox": [0, 44, 428, 565], "area": 118909}], "file_name": "000000135890.png", "image_id": 135890}, {"segments_info": [{"id": 3487834, "category_id": 1, "iscrowd": 0, "bbox": [564, 241, 12, 38], "area": 283}, {"id": 9859447, "category_id": 7, "iscrowd": 0, "bbox": [560, 218, 80, 58], "area": 2771}, {"id": 3161169, "category_id": 7, "iscrowd": 0, "bbox": [2, 105, 544, 257], "area": 79514}, {"id": 6974316, "category_id": 144, "iscrowd": 0, "bbox": [0, 243, 640, 182], "area": 64846}, {"id": 3685703, "category_id": 147, "iscrowd": 0, "bbox": [512, 289, 128, 96], "area": 9755}, {"id": 10396321, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 640, 200], "area": 98398}, {"id": 4871517, "category_id": 185, "iscrowd": 0, "bbox": [0, 190, 128, 44], "area": 2938}, {"id": 9678012, "category_id": 199, "iscrowd": 0, "bbox": [0, 114, 640, 148], "area": 10359}], "file_name": "000000135902.png", "image_id": 135902}, {"segments_info": [{"id": 1335174, "category_id": 64, "iscrowd": 0, "bbox": [368, 326, 21, 44], "area": 561}, {"id": 8363962, "category_id": 81, "iscrowd": 0, "bbox": [315, 371, 119, 52], "area": 4034}, {"id": 6396877, "category_id": 130, "iscrowd": 0, "bbox": [409, 46, 123, 58], "area": 2793}, {"id": 929109, "category_id": 133, "iscrowd": 0, "bbox": [408, 96, 121, 248], "area": 24182}, {"id": 1710884, "category_id": 176, "iscrowd": 0, "bbox": [273, 340, 242, 88], "area": 10362}, {"id": 204453, "category_id": 186, "iscrowd": 0, "bbox": [94, 0, 165, 36], "area": 3868}, {"id": 1204679, "category_id": 199, "iscrowd": 0, "bbox": [96, 0, 440, 428], "area": 122062}], "file_name": "000000136033.png", "image_id": 136033}, {"segments_info": [{"id": 4210791, "category_id": 1, "iscrowd": 0, "bbox": [191, 277, 83, 106], "area": 4564}, {"id": 5657177, "category_id": 35, "iscrowd": 0, "bbox": [201, 375, 120, 16], "area": 1018}, {"id": 12237500, "category_id": 159, "iscrowd": 0, "bbox": [0, 123, 640, 357], "area": 192748}, {"id": 1843499, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 237], "area": 108760}], "file_name": "000000136334.png", "image_id": 136334}, {"segments_info": [{"id": 1317931, "category_id": 44, "iscrowd": 0, "bbox": [222, 88, 17, 26], "area": 390}, {"id": 1319479, "category_id": 51, "iscrowd": 0, "bbox": [243, 251, 44, 20], "area": 694}, {"id": 1316913, "category_id": 51, "iscrowd": 0, "bbox": [478, 287, 58, 37], "area": 1342}, {"id": 789786, "category_id": 51, "iscrowd": 0, "bbox": [534, 288, 58, 31], "area": 1010}, {"id": 924483, "category_id": 55, "iscrowd": 0, "bbox": [491, 298, 16, 10], "area": 124}, {"id": 726585, "category_id": 55, "iscrowd": 0, "bbox": [508, 299, 17, 11], "area": 131}, {"id": 203323, "category_id": 55, "iscrowd": 0, "bbox": [555, 300, 14, 6], "area": 60}, {"id": 265508, "category_id": 55, "iscrowd": 0, "bbox": [567, 297, 14, 9], "area": 107}, {"id": 5598352, "category_id": 62, "iscrowd": 0, "bbox": [362, 236, 45, 185], "area": 2513}, {"id": 2502204, "category_id": 62, "iscrowd": 0, "bbox": [46, 254, 95, 167], "area": 5242}, {"id": 3823225, "category_id": 62, "iscrowd": 0, "bbox": [181, 224, 29, 39], "area": 527}, {"id": 2904930, "category_id": 64, "iscrowd": 0, "bbox": [183, 161, 92, 140], "area": 5554}, {"id": 8950938, "category_id": 64, "iscrowd": 0, "bbox": [327, 124, 55, 63], "area": 1967}, {"id": 11196861, "category_id": 64, "iscrowd": 0, "bbox": [449, 176, 64, 122], "area": 2928}, {"id": 9351591, "category_id": 64, "iscrowd": 0, "bbox": [328, 1, 238, 186], "area": 11901}, {"id": 7181435, "category_id": 64, "iscrowd": 0, "bbox": [513, 84, 91, 71], "area": 4250}, {"id": 6585236, "category_id": 67, "iscrowd": 0, "bbox": [74, 249, 314, 173], "area": 30688}, {"id": 9800322, "category_id": 82, "iscrowd": 0, "bbox": [581, 75, 59, 346], "area": 14534}, {"id": 2319955, "category_id": 86, "iscrowd": 0, "bbox": [213, 242, 35, 60], "area": 1650}, {"id": 530478, "category_id": 118, "iscrowd": 0, "bbox": [0, 299, 75, 111], "area": 5250}, {"id": 2834521, "category_id": 130, "iscrowd": 0, "bbox": [203, 12, 51, 76], "area": 2659}, {"id": 3360869, "category_id": 156, "iscrowd": 0, "bbox": [188, 102, 95, 163], "area": 4594}, {"id": 16250870, "category_id": 181, "iscrowd": 0, "bbox": [384, 35, 163, 222], "area": 22736}, {"id": 13624282, "category_id": 184, "iscrowd": 0, "bbox": [511, 98, 88, 44], "area": 235}, {"id": 6452367, "category_id": 188, "iscrowd": 0, "bbox": [457, 310, 139, 117], "area": 11910}, {"id": 2241871, "category_id": 189, "iscrowd": 0, "bbox": [95, 259, 226, 168], "area": 4473}, {"id": 8750473, "category_id": 190, "iscrowd": 0, "bbox": [0, 341, 463, 86], "area": 12212}, {"id": 7959923, "category_id": 195, "iscrowd": 0, "bbox": [137, 68, 42, 52], "area": 1655}, {"id": 9212823, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 357], "area": 101737}], "file_name": "000000136355.png", "image_id": 136355}, {"segments_info": [{"id": 6649213, "category_id": 79, "iscrowd": 0, "bbox": [33, 94, 288, 382], "area": 97107}, {"id": 5335947, "category_id": 85, "iscrowd": 0, "bbox": [110, 275, 27, 27], "area": 561}, {"id": 7377048, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 332, 485], "area": 43741}, {"id": 1583919, "category_id": 190, "iscrowd": 0, "bbox": [0, 391, 332, 109], "area": 10882}], "file_name": "000000136466.png", "image_id": 136466}, {"segments_info": [{"id": 7702932, "category_id": 44, "iscrowd": 0, "bbox": [184, 59, 51, 115], "area": 5357}, {"id": 9215911, "category_id": 44, "iscrowd": 0, "bbox": [409, 56, 59, 108], "area": 5207}, {"id": 2567505, "category_id": 51, "iscrowd": 0, "bbox": [494, 314, 31, 34], "area": 898}, {"id": 8159364, "category_id": 73, "iscrowd": 0, "bbox": [219, 197, 242, 223], "area": 42552}, {"id": 1580581, "category_id": 77, "iscrowd": 0, "bbox": [151, 378, 25, 32], "area": 656}, {"id": 1713212, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 457], "area": 183416}, {"id": 11450298, "category_id": 199, "iscrowd": 0, "bbox": [96, 0, 432, 161], "area": 50404}], "file_name": "000000136600.png", "image_id": 136600}, {"segments_info": [{"id": 2108458, "category_id": 1, "iscrowd": 0, "bbox": [134, 253, 13, 48], "area": 438}, {"id": 1975068, "category_id": 1, "iscrowd": 0, "bbox": [156, 258, 11, 31], "area": 184}, {"id": 1645337, "category_id": 1, "iscrowd": 0, "bbox": [78, 257, 13, 25], "area": 153}, {"id": 395294, "category_id": 1, "iscrowd": 0, "bbox": [68, 257, 14, 25], "area": 240}, {"id": 7828846, "category_id": 1, "iscrowd": 0, "bbox": [170, 254, 10, 28], "area": 160}, {"id": 1644311, "category_id": 1, "iscrowd": 0, "bbox": [7, 256, 27, 88], "area": 1189}, {"id": 1185300, "category_id": 1, "iscrowd": 0, "bbox": [108, 252, 14, 48], "area": 485}, {"id": 1382693, "category_id": 1, "iscrowd": 0, "bbox": [120, 253, 16, 54], "area": 631}, {"id": 1514267, "category_id": 1, "iscrowd": 0, "bbox": [257, 256, 29, 54], "area": 934}, {"id": 3292221, "category_id": 1, "iscrowd": 0, "bbox": [103, 264, 8, 20], "area": 90}, {"id": 530197, "category_id": 1, "iscrowd": 0, "bbox": [77, 302, 23, 104], "area": 1283}, {"id": 722701, "category_id": 1, "iscrowd": 0, "bbox": [12, 253, 74, 219], "area": 9339}, {"id": 6713468, "category_id": 28, "iscrowd": 0, "bbox": [145, 239, 33, 13], "area": 282}, {"id": 1514780, "category_id": 28, "iscrowd": 0, "bbox": [46, 240, 41, 20], "area": 569}, {"id": 5203317, "category_id": 28, "iscrowd": 0, "bbox": [117, 204, 101, 104], "area": 2197}, {"id": 1388905, "category_id": 28, "iscrowd": 0, "bbox": [58, 0, 365, 446], "area": 59258}, {"id": 2575725, "category_id": 51, "iscrowd": 0, "bbox": [212, 479, 94, 64], "area": 4553}, {"id": 8566455, "category_id": 51, "iscrowd": 0, "bbox": [195, 430, 58, 24], "area": 1130}, {"id": 725784, "category_id": 130, "iscrowd": 0, "bbox": [14, 235, 22, 57], "area": 432}, {"id": 1712415, "category_id": 149, "iscrowd": 0, "bbox": [0, 294, 427, 346], "area": 54328}, {"id": 3818560, "category_id": 151, "iscrowd": 0, "bbox": [68, 231, 103, 51], "area": 2217}, {"id": 4871503, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 86, 257], "area": 15472}, {"id": 14672094, "category_id": 187, "iscrowd": 0, "bbox": [34, 0, 328, 54], "area": 3581}, {"id": 2703943, "category_id": 189, "iscrowd": 0, "bbox": [221, 371, 43, 21], "area": 547}, {"id": 593420, "category_id": 191, "iscrowd": 0, "bbox": [31, 292, 139, 218], "area": 1583}, {"id": 4217963, "category_id": 196, "iscrowd": 0, "bbox": [64, 268, 363, 245], "area": 53017}, {"id": 6254187, "category_id": 197, "iscrowd": 0, "bbox": [65, 0, 362, 254], "area": 15162}], "file_name": "000000136633.png", "image_id": 136633}, {"segments_info": [{"id": 2565672, "category_id": 1, "iscrowd": 0, "bbox": [138, 49, 243, 351], "area": 21292}, {"id": 3881789, "category_id": 1, "iscrowd": 0, "bbox": [29, 52, 26, 48], "area": 774}, {"id": 4934747, "category_id": 1, "iscrowd": 0, "bbox": [158, 109, 26, 31], "area": 553}, {"id": 4406585, "category_id": 1, "iscrowd": 0, "bbox": [109, 106, 53, 169], "area": 4327}, {"id": 4144760, "category_id": 1, "iscrowd": 0, "bbox": [376, 93, 50, 39], "area": 1268}, {"id": 3025264, "category_id": 1, "iscrowd": 0, "bbox": [404, 75, 38, 57], "area": 1056}, {"id": 2696231, "category_id": 1, "iscrowd": 0, "bbox": [445, 80, 56, 152], "area": 4154}, {"id": 4212576, "category_id": 1, "iscrowd": 0, "bbox": [453, 61, 22, 52], "area": 471}, {"id": 3489098, "category_id": 1, "iscrowd": 0, "bbox": [486, 89, 23, 29], "area": 389}, {"id": 4540509, "category_id": 1, "iscrowd": 0, "bbox": [383, 74, 28, 20], "area": 330}, {"id": 9141614, "category_id": 1, "iscrowd": 0, "bbox": [1, 71, 85, 349], "area": 12402}, {"id": 9145746, "category_id": 1, "iscrowd": 0, "bbox": [334, 89, 44, 44], "area": 793}, {"id": 2698545, "category_id": 1, "iscrowd": 0, "bbox": [472, 64, 20, 24], "area": 330}, {"id": 5658468, "category_id": 1, "iscrowd": 1, "bbox": [27, 18, 561, 129], "area": 6363}, {"id": 2829095, "category_id": 3, "iscrowd": 0, "bbox": [512, 46, 128, 269], "area": 26520}, {"id": 5197391, "category_id": 4, "iscrowd": 0, "bbox": [361, 138, 93, 143], "area": 5932}, {"id": 3816509, "category_id": 4, "iscrowd": 0, "bbox": [26, 225, 53, 84], "area": 2937}, {"id": 3155487, "category_id": 4, "iscrowd": 0, "bbox": [68, 175, 60, 101], "area": 3230}, {"id": 4933699, "category_id": 4, "iscrowd": 0, "bbox": [77, 104, 356, 317], "area": 63257}, {"id": 3945775, "category_id": 4, "iscrowd": 0, "bbox": [454, 213, 64, 65], "area": 2253}, {"id": 7038849, "category_id": 92, "iscrowd": 0, "bbox": [359, 0, 239, 205], "area": 6586}, {"id": 10396306, "category_id": 149, "iscrowd": 0, "bbox": [0, 256, 640, 169], "area": 36495}, {"id": 3561548, "category_id": 184, "iscrowd": 0, "bbox": [267, 0, 249, 96], "area": 7420}, {"id": 4736837, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 126], "area": 33041}], "file_name": "000000136715.png", "image_id": 136715}, {"segments_info": [{"id": 5986755, "category_id": 51, "iscrowd": 0, "bbox": [66, 20, 370, 297], "area": 60391}, {"id": 6658790, "category_id": 55, "iscrowd": 0, "bbox": [74, 31, 303, 195], "area": 23898}, {"id": 14141642, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 334], "area": 82469}], "file_name": "000000136772.png", "image_id": 136772}, {"segments_info": [{"id": 6253175, "category_id": 1, "iscrowd": 0, "bbox": [75, 78, 255, 344], "area": 46348}, {"id": 6319745, "category_id": 1, "iscrowd": 0, "bbox": [413, 112, 166, 310], "area": 35109}, {"id": 3622252, "category_id": 1, "iscrowd": 0, "bbox": [579, 289, 61, 138], "area": 5236}, {"id": 2302248, "category_id": 32, "iscrowd": 0, "bbox": [213, 175, 33, 160], "area": 1723}, {"id": 9812173, "category_id": 39, "iscrowd": 0, "bbox": [126, 266, 202, 85], "area": 3045}, {"id": 1843492, "category_id": 62, "iscrowd": 0, "bbox": [627, 220, 13, 67], "area": 604}, {"id": 7696495, "category_id": 84, "iscrowd": 0, "bbox": [126, 3, 11, 69], "area": 682}, {"id": 6907235, "category_id": 84, "iscrowd": 0, "bbox": [157, 2, 31, 72], "area": 2057}, {"id": 6249824, "category_id": 84, "iscrowd": 0, "bbox": [11, 213, 47, 15], "area": 423}, {"id": 7700094, "category_id": 112, "iscrowd": 0, "bbox": [439, 80, 38, 161], "area": 1655}, {"id": 6451833, "category_id": 130, "iscrowd": 0, "bbox": [623, 80, 17, 24], "area": 332}, {"id": 3750720, "category_id": 156, "iscrowd": 0, "bbox": [0, 48, 636, 207], "area": 7514}, {"id": 6120035, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 126], "area": 8726}, {"id": 1513497, "category_id": 189, "iscrowd": 0, "bbox": [0, 341, 372, 86], "area": 10846}, {"id": 3423042, "category_id": 190, "iscrowd": 0, "bbox": [574, 251, 66, 67], "area": 2652}, {"id": 8948361, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 88150}], "file_name": "000000136915.png", "image_id": 136915}, {"segments_info": [{"id": 6974588, "category_id": 1, "iscrowd": 0, "bbox": [1, 165, 491, 170], "area": 47866}, {"id": 9671312, "category_id": 65, "iscrowd": 0, "bbox": [0, 2, 640, 425], "area": 221571}], "file_name": "000000137106.png", "image_id": 137106}, {"segments_info": [{"id": 4278878, "category_id": 1, "iscrowd": 0, "bbox": [136, 74, 189, 256], "area": 30711}, {"id": 7236728, "category_id": 1, "iscrowd": 0, "bbox": [369, 94, 56, 149], "area": 4695}, {"id": 8016667, "category_id": 15, "iscrowd": 0, "bbox": [126, 156, 13, 12], "area": 111}, {"id": 6772812, "category_id": 15, "iscrowd": 0, "bbox": [0, 201, 71, 44], "area": 2370}, {"id": 10788735, "category_id": 15, "iscrowd": 0, "bbox": [81, 187, 67, 71], "area": 3453}, {"id": 11375427, "category_id": 15, "iscrowd": 0, "bbox": [124, 168, 43, 18], "area": 472}, {"id": 5848599, "category_id": 15, "iscrowd": 0, "bbox": [0, 154, 102, 18], "area": 708}, {"id": 5917569, "category_id": 28, "iscrowd": 0, "bbox": [132, 21, 70, 66], "area": 528}, {"id": 10916496, "category_id": 28, "iscrowd": 0, "bbox": [100, 25, 165, 57], "area": 6157}, {"id": 7500186, "category_id": 28, "iscrowd": 0, "bbox": [0, 32, 57, 51], "area": 2051}, {"id": 7034203, "category_id": 28, "iscrowd": 0, "bbox": [6, 54, 97, 112], "area": 1650}, {"id": 10992331, "category_id": 58, "iscrowd": 0, "bbox": [256, 209, 65, 53], "area": 1820}, {"id": 4675668, "category_id": 64, "iscrowd": 0, "bbox": [288, 173, 107, 126], "area": 8438}, {"id": 6439716, "category_id": 67, "iscrowd": 0, "bbox": [147, 141, 19, 18], "area": 146}, {"id": 4796946, "category_id": 67, "iscrowd": 0, "bbox": [22, 136, 64, 14], "area": 586}, {"id": 6901536, "category_id": 67, "iscrowd": 0, "bbox": [0, 165, 29, 46], "area": 579}, {"id": 5721149, "category_id": 67, "iscrowd": 0, "bbox": [123, 167, 45, 55], "area": 485}, {"id": 3358031, "category_id": 128, "iscrowd": 0, "bbox": [150, 27, 350, 112], "area": 11799}, {"id": 4017576, "category_id": 138, "iscrowd": 0, "bbox": [410, 106, 35, 26], "area": 505}, {"id": 2567975, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 135], "area": 28389}, {"id": 8221556, "category_id": 190, "iscrowd": 0, "bbox": [0, 148, 304, 158], "area": 11764}, {"id": 10526875, "category_id": 191, "iscrowd": 0, "bbox": [0, 102, 500, 231], "area": 32220}, {"id": 6647667, "category_id": 194, "iscrowd": 0, "bbox": [0, 127, 500, 57], "area": 2911}, {"id": 3942944, "category_id": 199, "iscrowd": 0, "bbox": [35, 80, 220, 76], "area": 5057}], "file_name": "000000137246.png", "image_id": 137246}, {"segments_info": [{"id": 6310989, "category_id": 1, "iscrowd": 0, "bbox": [264, 146, 375, 281], "area": 51004}, {"id": 3618106, "category_id": 1, "iscrowd": 0, "bbox": [441, 174, 55, 67], "area": 1423}, {"id": 4347743, "category_id": 79, "iscrowd": 0, "bbox": [152, 175, 295, 250], "area": 34847}, {"id": 3290937, "category_id": 151, "iscrowd": 0, "bbox": [351, 85, 289, 57], "area": 8993}, {"id": 7896956, "category_id": 166, "iscrowd": 0, "bbox": [0, 0, 499, 427], "area": 112989}, {"id": 6121307, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 108], "area": 24818}, {"id": 7502467, "category_id": 185, "iscrowd": 0, "bbox": [441, 123, 199, 63], "area": 5412}, {"id": 16174235, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 610, 75], "area": 10929}, {"id": 5997697, "category_id": 193, "iscrowd": 0, "bbox": [357, 148, 283, 279], "area": 13611}, {"id": 3816232, "category_id": 199, "iscrowd": 0, "bbox": [316, 115, 129, 93], "area": 8305}], "file_name": "000000137294.png", "image_id": 137294}, {"segments_info": [{"id": 3554363, "category_id": 21, "iscrowd": 0, "bbox": [306, 186, 43, 42], "area": 989}, {"id": 7303276, "category_id": 21, "iscrowd": 0, "bbox": [2, 309, 118, 172], "area": 8702}, {"id": 1579545, "category_id": 21, "iscrowd": 0, "bbox": [269, 205, 68, 78], "area": 1294}, {"id": 4216942, "category_id": 21, "iscrowd": 0, "bbox": [255, 212, 60, 87], "area": 3308}, {"id": 3355440, "category_id": 21, "iscrowd": 0, "bbox": [44, 185, 191, 162], "area": 11817}, {"id": 4937572, "category_id": 21, "iscrowd": 0, "bbox": [126, 274, 99, 123], "area": 6420}, {"id": 9803668, "category_id": 21, "iscrowd": 0, "bbox": [0, 363, 56, 132], "area": 5204}, {"id": 4934475, "category_id": 21, "iscrowd": 0, "bbox": [204, 164, 115, 66], "area": 1931}, {"id": 6320505, "category_id": 21, "iscrowd": 0, "bbox": [315, 180, 44, 79], "area": 990}, {"id": 5067606, "category_id": 171, "iscrowd": 0, "bbox": [0, 91, 584, 103], "area": 38296}, {"id": 5593946, "category_id": 185, "iscrowd": 0, "bbox": [0, 145, 498, 325], "area": 47285}, {"id": 5328457, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 171, 95], "area": 9548}, {"id": 5792100, "category_id": 191, "iscrowd": 0, "bbox": [307, 340, 333, 223], "area": 50917}, {"id": 5731710, "category_id": 193, "iscrowd": 0, "bbox": [0, 90, 640, 473], "area": 89746}, {"id": 2894376, "category_id": 199, "iscrowd": 0, "bbox": [19, 0, 621, 102], "area": 33558}], "file_name": "000000137576.png", "image_id": 137576}, {"segments_info": [{"id": 2110553, "category_id": 1, "iscrowd": 0, "bbox": [231, 157, 19, 38], "area": 516}, {"id": 3090474, "category_id": 1, "iscrowd": 0, "bbox": [241, 186, 43, 52], "area": 1076}, {"id": 3687501, "category_id": 1, "iscrowd": 0, "bbox": [560, 188, 19, 23], "area": 173}, {"id": 6118247, "category_id": 3, "iscrowd": 0, "bbox": [583, 195, 32, 29], "area": 771}, {"id": 5199198, "category_id": 3, "iscrowd": 0, "bbox": [611, 205, 14, 16], "area": 134}, {"id": 9012611, "category_id": 7, "iscrowd": 0, "bbox": [1, 92, 571, 172], "area": 50926}, {"id": 3746600, "category_id": 27, "iscrowd": 0, "bbox": [277, 253, 25, 14], "area": 299}, {"id": 1907740, "category_id": 27, "iscrowd": 0, "bbox": [432, 263, 28, 32], "area": 685}, {"id": 4083537, "category_id": 27, "iscrowd": 0, "bbox": [319, 250, 11, 11], "area": 110}, {"id": 5915182, "category_id": 27, "iscrowd": 0, "bbox": [331, 210, 15, 12], "area": 151}, {"id": 1973795, "category_id": 31, "iscrowd": 0, "bbox": [460, 261, 19, 32], "area": 417}, {"id": 3685951, "category_id": 31, "iscrowd": 0, "bbox": [319, 249, 12, 14], "area": 51}, {"id": 2303013, "category_id": 33, "iscrowd": 0, "bbox": [389, 207, 13, 15], "area": 184}, {"id": 2565199, "category_id": 33, "iscrowd": 0, "bbox": [333, 231, 20, 29], "area": 523}, {"id": 3879731, "category_id": 33, "iscrowd": 0, "bbox": [379, 205, 11, 17], "area": 123}, {"id": 2301742, "category_id": 33, "iscrowd": 0, "bbox": [306, 247, 13, 17], "area": 168}, {"id": 3092528, "category_id": 33, "iscrowd": 0, "bbox": [223, 231, 26, 42], "area": 635}, {"id": 2762797, "category_id": 33, "iscrowd": 0, "bbox": [254, 232, 22, 37], "area": 687}, {"id": 2039326, "category_id": 33, "iscrowd": 0, "bbox": [207, 237, 25, 38], "area": 846}, {"id": 2104603, "category_id": 33, "iscrowd": 0, "bbox": [299, 199, 18, 23], "area": 253}, {"id": 1907741, "category_id": 33, "iscrowd": 0, "bbox": [287, 231, 21, 32], "area": 508}, {"id": 3879209, "category_id": 33, "iscrowd": 0, "bbox": [356, 210, 11, 12], "area": 106}, {"id": 5722703, "category_id": 33, "iscrowd": 0, "bbox": [247, 240, 8, 29], "area": 178}, {"id": 2565152, "category_id": 33, "iscrowd": 0, "bbox": [288, 211, 11, 11], "area": 92}, {"id": 1643279, "category_id": 33, "iscrowd": 0, "bbox": [276, 239, 11, 17], "area": 171}, {"id": 5989999, "category_id": 149, "iscrowd": 0, "bbox": [570, 194, 70, 66], "area": 1006}, {"id": 3025963, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 640, 178], "area": 33671}, {"id": 10789016, "category_id": 181, "iscrowd": 0, "bbox": [0, 51, 324, 114], "area": 10929}, {"id": 16514043, "category_id": 187, "iscrowd": 0, "bbox": [135, 0, 505, 180], "area": 38295}, {"id": 8094084, "category_id": 191, "iscrowd": 0, "bbox": [0, 209, 640, 150], "area": 48880}, {"id": 3627348, "category_id": 193, "iscrowd": 0, "bbox": [162, 290, 478, 69], "area": 23073}, {"id": 8026229, "category_id": 197, "iscrowd": 0, "bbox": [315, 116, 325, 89], "area": 2456}], "file_name": "000000137727.png", "image_id": 137727}, {"segments_info": [{"id": 4476247, "category_id": 5, "iscrowd": 0, "bbox": [5, 32, 528, 141], "area": 21753}, {"id": 3028801, "category_id": 184, "iscrowd": 0, "bbox": [0, 267, 640, 148], "area": 69786}, {"id": 10398651, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 294], "area": 156262}, {"id": 4805987, "category_id": 193, "iscrowd": 0, "bbox": [55, 365, 251, 50], "area": 5875}, {"id": 8029328, "category_id": 197, "iscrowd": 0, "bbox": [77, 366, 563, 49], "area": 11632}], "file_name": "000000137950.png", "image_id": 137950}, {"segments_info": [{"id": 5527413, "category_id": 1, "iscrowd": 0, "bbox": [1, 6, 447, 597], "area": 168076}, {"id": 955373, "category_id": 55, "iscrowd": 0, "bbox": [101, 320, 209, 193], "area": 28618}, {"id": 11583425, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 448, 378], "area": 70942}], "file_name": "000000138115.png", "image_id": 138115}, {"segments_info": [{"id": 4347013, "category_id": 58, "iscrowd": 0, "bbox": [104, 213, 258, 241], "area": 31931}, {"id": 9085902, "category_id": 67, "iscrowd": 0, "bbox": [0, 2, 480, 637], "area": 272146}], "file_name": "000000138241.png", "image_id": 138241}, {"segments_info": [{"id": 5397859, "category_id": 18, "iscrowd": 0, "bbox": [90, 45, 285, 562], "area": 79643}, {"id": 12027289, "category_id": 34, "iscrowd": 0, "bbox": [89, 93, 135, 61], "area": 5418}, {"id": 3373681, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 187792}], "file_name": "000000138492.png", "image_id": 138492}, {"segments_info": [{"id": 5463428, "category_id": 11, "iscrowd": 0, "bbox": [264, 121, 104, 222], "area": 14128}, {"id": 3547420, "category_id": 62, "iscrowd": 0, "bbox": [402, 26, 87, 90], "area": 6653}, {"id": 3683382, "category_id": 62, "iscrowd": 0, "bbox": [95, 40, 124, 199], "area": 4235}, {"id": 4469035, "category_id": 67, "iscrowd": 0, "bbox": [168, 45, 149, 198], "area": 11418}, {"id": 5393246, "category_id": 144, "iscrowd": 0, "bbox": [0, 15, 629, 164], "area": 19775}, {"id": 2101005, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 256], "area": 76302}, {"id": 8950168, "category_id": 191, "iscrowd": 0, "bbox": [0, 150, 640, 278], "area": 122342}], "file_name": "000000138550.png", "image_id": 138550}, {"segments_info": [{"id": 3620938, "category_id": 1, "iscrowd": 0, "bbox": [188, 314, 8, 18], "area": 106}, {"id": 855822, "category_id": 1, "iscrowd": 0, "bbox": [211, 314, 8, 19], "area": 115}, {"id": 1580066, "category_id": 1, "iscrowd": 0, "bbox": [166, 317, 10, 14], "area": 83}, {"id": 2039843, "category_id": 1, "iscrowd": 0, "bbox": [104, 317, 17, 26], "area": 189}, {"id": 2307636, "category_id": 1, "iscrowd": 0, "bbox": [33, 308, 21, 31], "area": 309}, {"id": 3025706, "category_id": 1, "iscrowd": 0, "bbox": [81, 303, 7, 20], "area": 97}, {"id": 1973272, "category_id": 1, "iscrowd": 0, "bbox": [400, 325, 47, 137], "area": 2885}, {"id": 2434596, "category_id": 1, "iscrowd": 0, "bbox": [70, 304, 5, 17], "area": 60}, {"id": 1514272, "category_id": 1, "iscrowd": 0, "bbox": [291, 316, 8, 24], "area": 140}, {"id": 1908256, "category_id": 1, "iscrowd": 0, "bbox": [135, 319, 54, 83], "area": 2197}, {"id": 2565408, "category_id": 1, "iscrowd": 0, "bbox": [569, 327, 69, 153], "area": 5961}, {"id": 2435886, "category_id": 1, "iscrowd": 0, "bbox": [196, 314, 13, 23], "area": 152}, {"id": 3158839, "category_id": 1, "iscrowd": 0, "bbox": [60, 304, 6, 20], "area": 77}, {"id": 3160123, "category_id": 1, "iscrowd": 1, "bbox": [0, 252, 632, 108], "area": 5214}, {"id": 3749945, "category_id": 2, "iscrowd": 0, "bbox": [124, 361, 76, 58], "area": 2103}, {"id": 6646120, "category_id": 3, "iscrowd": 0, "bbox": [389, 328, 28, 20], "area": 358}, {"id": 3619125, "category_id": 3, "iscrowd": 0, "bbox": [431, 329, 35, 21], "area": 619}, {"id": 1711137, "category_id": 10, "iscrowd": 0, "bbox": [149, 259, 12, 19], "area": 185}, {"id": 1380621, "category_id": 31, "iscrowd": 0, "bbox": [409, 346, 32, 68], "area": 770}, {"id": 1184273, "category_id": 31, "iscrowd": 0, "bbox": [573, 355, 14, 44], "area": 260}, {"id": 9605547, "category_id": 92, "iscrowd": 0, "bbox": [609, 230, 21, 22], "area": 314}, {"id": 4080708, "category_id": 149, "iscrowd": 0, "bbox": [515, 324, 23, 21], "area": 46}, {"id": 1717042, "category_id": 184, "iscrowd": 0, "bbox": [0, 232, 599, 114], "area": 9225}, {"id": 15714214, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 609, 268], "area": 60536}, {"id": 5066063, "category_id": 191, "iscrowd": 0, "bbox": [0, 302, 640, 178], "area": 78386}, {"id": 7567221, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 363], "area": 136261}], "file_name": "000000138639.png", "image_id": 138639}, {"segments_info": [{"id": 7499885, "category_id": 70, "iscrowd": 0, "bbox": [476, 368, 146, 112], "area": 10930}, {"id": 11184554, "category_id": 81, "iscrowd": 0, "bbox": [122, 22, 347, 206], "area": 53310}, {"id": 1384791, "category_id": 112, "iscrowd": 0, "bbox": [547, 359, 93, 121], "area": 5630}, {"id": 5988703, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 402], "area": 178860}, {"id": 1779781, "category_id": 190, "iscrowd": 0, "bbox": [0, 375, 493, 105], "area": 42586}, {"id": 7565935, "category_id": 195, "iscrowd": 0, "bbox": [483, 287, 46, 32], "area": 1043}], "file_name": "000000138819.png", "image_id": 138819}, {"segments_info": [{"id": 6650498, "category_id": 51, "iscrowd": 0, "bbox": [348, 150, 65, 33], "area": 1773}, {"id": 4019292, "category_id": 79, "iscrowd": 0, "bbox": [0, 0, 640, 472], "area": 234635}, {"id": 13025461, "category_id": 107, "iscrowd": 0, "bbox": [0, 17, 135, 246], "area": 8723}, {"id": 11567194, "category_id": 190, "iscrowd": 0, "bbox": [0, 349, 44, 131], "area": 3183}, {"id": 4410958, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 72, 31], "area": 1486}, {"id": 343879, "category_id": 199, "iscrowd": 0, "bbox": [560, 0, 80, 54], "area": 2278}], "file_name": "000000138856.png", "image_id": 138856}, {"segments_info": [{"id": 5802954, "category_id": 53, "iscrowd": 0, "bbox": [287, 77, 258, 480], "area": 62995}, {"id": 5793652, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 307197}, {"id": 921625, "category_id": 189, "iscrowd": 0, "bbox": [70, 0, 542, 378], "area": 3822}], "file_name": "000000138954.png", "image_id": 138954}, {"segments_info": [{"id": 1908780, "category_id": 1, "iscrowd": 0, "bbox": [187, 186, 45, 47], "area": 1364}, {"id": 2565671, "category_id": 1, "iscrowd": 0, "bbox": [77, 216, 48, 107], "area": 2273}, {"id": 3812390, "category_id": 1, "iscrowd": 0, "bbox": [49, 226, 39, 149], "area": 4041}, {"id": 5328731, "category_id": 1, "iscrowd": 0, "bbox": [183, 204, 16, 18], "area": 168}, {"id": 3222560, "category_id": 1, "iscrowd": 0, "bbox": [292, 179, 50, 64], "area": 1614}, {"id": 3222841, "category_id": 3, "iscrowd": 0, "bbox": [312, 174, 328, 247], "area": 71734}, {"id": 6447971, "category_id": 6, "iscrowd": 0, "bbox": [76, 88, 564, 294], "area": 84191}, {"id": 10986417, "category_id": 100, "iscrowd": 0, "bbox": [180, 0, 31, 85], "area": 1652}, {"id": 9276556, "category_id": 130, "iscrowd": 0, "bbox": [489, 0, 22, 14], "area": 248}, {"id": 5921369, "category_id": 149, "iscrowd": 0, "bbox": [0, 369, 353, 57], "area": 13029}, {"id": 3293750, "category_id": 184, "iscrowd": 0, "bbox": [0, 173, 120, 135], "area": 9858}, {"id": 8230811, "category_id": 191, "iscrowd": 0, "bbox": [0, 285, 168, 114], "area": 8717}, {"id": 9934488, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 264], "area": 68134}], "file_name": "000000138979.png", "image_id": 138979}, {"segments_info": [{"id": 4015481, "category_id": 1, "iscrowd": 0, "bbox": [131, 132, 59, 212], "area": 8306}, {"id": 8951639, "category_id": 72, "iscrowd": 0, "bbox": [280, 0, 156, 156], "area": 20400}, {"id": 3024683, "category_id": 73, "iscrowd": 0, "bbox": [362, 325, 58, 48], "area": 1802}, {"id": 8166862, "category_id": 75, "iscrowd": 0, "bbox": [161, 182, 39, 39], "area": 556}, {"id": 6713480, "category_id": 84, "iscrowd": 0, "bbox": [134, 118, 34, 8], "area": 174}, {"id": 8749196, "category_id": 84, "iscrowd": 0, "bbox": [134, 123, 36, 6], "area": 105}, {"id": 7437472, "category_id": 84, "iscrowd": 0, "bbox": [172, 122, 44, 13], "area": 352}, {"id": 4670800, "category_id": 141, "iscrowd": 0, "bbox": [96, 55, 76, 73], "area": 3354}, {"id": 8031391, "category_id": 161, "iscrowd": 0, "bbox": [66, 0, 118, 114], "area": 6267}, {"id": 8555162, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 35, 126], "area": 3745}, {"id": 4606815, "category_id": 188, "iscrowd": 0, "bbox": [74, 107, 347, 220], "area": 31806}, {"id": 7301233, "category_id": 195, "iscrowd": 0, "bbox": [187, 122, 196, 38], "area": 891}, {"id": 8691387, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 55293}, {"id": 9475492, "category_id": 200, "iscrowd": 0, "bbox": [0, 131, 420, 244], "area": 52979}], "file_name": "000000139077.png", "image_id": 139077}, {"segments_info": [{"id": 11577512, "category_id": 1, "iscrowd": 0, "bbox": [250, 88, 61, 95], "area": 1399}, {"id": 11245723, "category_id": 1, "iscrowd": 0, "bbox": [49, 100, 77, 80], "area": 2668}, {"id": 9270671, "category_id": 1, "iscrowd": 0, "bbox": [353, 96, 35, 84], "area": 1889}, {"id": 4865598, "category_id": 1, "iscrowd": 0, "bbox": [224, 102, 38, 58], "area": 1006}, {"id": 10325131, "category_id": 1, "iscrowd": 0, "bbox": [172, 92, 48, 100], "area": 1782}, {"id": 3813181, "category_id": 1, "iscrowd": 0, "bbox": [118, 107, 55, 63], "area": 1355}, {"id": 7887973, "category_id": 1, "iscrowd": 0, "bbox": [0, 151, 210, 265], "area": 26146}, {"id": 7685221, "category_id": 1, "iscrowd": 0, "bbox": [499, 108, 49, 95], "area": 1870}, {"id": 4143174, "category_id": 1, "iscrowd": 0, "bbox": [12, 159, 66, 63], "area": 1868}, {"id": 8282973, "category_id": 1, "iscrowd": 0, "bbox": [305, 62, 241, 384], "area": 39922}, {"id": 8285289, "category_id": 1, "iscrowd": 0, "bbox": [557, 90, 56, 145], "area": 4658}, {"id": 7695732, "category_id": 1, "iscrowd": 0, "bbox": [216, 99, 23, 50], "area": 758}, {"id": 6311010, "category_id": 1, "iscrowd": 0, "bbox": [252, 109, 66, 208], "area": 7080}, {"id": 8088429, "category_id": 1, "iscrowd": 1, "bbox": [137, 85, 503, 118], "area": 10134}, {"id": 5785678, "category_id": 2, "iscrowd": 0, "bbox": [157, 149, 90, 76], "area": 1370}, {"id": 7888724, "category_id": 3, "iscrowd": 0, "bbox": [510, 99, 127, 107], "area": 4034}, {"id": 4994350, "category_id": 4, "iscrowd": 0, "bbox": [219, 251, 421, 202], "area": 41153}, {"id": 11112072, "category_id": 18, "iscrowd": 0, "bbox": [303, 165, 126, 122], "area": 4062}, {"id": 3219229, "category_id": 27, "iscrowd": 0, "bbox": [44, 197, 62, 89], "area": 1096}, {"id": 7502943, "category_id": 28, "iscrowd": 0, "bbox": [0, 7, 133, 29], "area": 2752}, {"id": 12886191, "category_id": 31, "iscrowd": 0, "bbox": [135, 131, 24, 49], "area": 464}, {"id": 7821644, "category_id": 31, "iscrowd": 0, "bbox": [177, 151, 24, 40], "area": 661}, {"id": 4996411, "category_id": 31, "iscrowd": 0, "bbox": [172, 115, 17, 54], "area": 303}, {"id": 4337715, "category_id": 31, "iscrowd": 0, "bbox": [13, 197, 94, 88], "area": 264}, {"id": 3621188, "category_id": 31, "iscrowd": 0, "bbox": [352, 145, 7, 10], "area": 16}, {"id": 9668757, "category_id": 31, "iscrowd": 0, "bbox": [557, 145, 11, 24], "area": 207}, {"id": 4359313, "category_id": 52, "iscrowd": 0, "bbox": [0, 387, 34, 50], "area": 1168}, {"id": 10930100, "category_id": 53, "iscrowd": 0, "bbox": [221, 220, 10, 11], "area": 82}, {"id": 7252368, "category_id": 53, "iscrowd": 0, "bbox": [214, 220, 46, 27], "area": 589}, {"id": 7247013, "category_id": 53, "iscrowd": 0, "bbox": [212, 236, 41, 18], "area": 387}, {"id": 7299211, "category_id": 122, "iscrowd": 0, "bbox": [0, 329, 206, 124], "area": 14360}, {"id": 3160646, "category_id": 130, "iscrowd": 0, "bbox": [0, 51, 222, 76], "area": 1827}, {"id": 7626585, "category_id": 149, "iscrowd": 0, "bbox": [355, 263, 285, 176], "area": 1678}, {"id": 7182217, "category_id": 184, "iscrowd": 0, "bbox": [252, 0, 388, 106], "area": 29383}, {"id": 9532267, "category_id": 190, "iscrowd": 0, "bbox": [494, 162, 146, 257], "area": 13519}, {"id": 9996935, "category_id": 195, "iscrowd": 0, "bbox": [179, 146, 59, 95], "area": 2236}, {"id": 4932948, "category_id": 196, "iscrowd": 0, "bbox": [0, 205, 16, 51], "area": 444}, {"id": 4013118, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 205], "area": 33040}], "file_name": "000000139099.png", "image_id": 139099}, {"segments_info": [{"id": 5448729, "category_id": 50, "iscrowd": 0, "bbox": [78, 0, 46, 222], "area": 3418}, {"id": 5268863, "category_id": 51, "iscrowd": 0, "bbox": [1, 167, 639, 196], "area": 38072}, {"id": 4944259, "category_id": 52, "iscrowd": 0, "bbox": [465, 133, 112, 58], "area": 3907}, {"id": 7510438, "category_id": 52, "iscrowd": 0, "bbox": [78, 181, 520, 126], "area": 38408}, {"id": 5341842, "category_id": 52, "iscrowd": 0, "bbox": [67, 137, 120, 63], "area": 4847}, {"id": 7177621, "category_id": 67, "iscrowd": 0, "bbox": [0, 3, 640, 378], "area": 152829}, {"id": 6585481, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 388], "area": 6373}], "file_name": "000000139260.png", "image_id": 139260}, {"segments_info": [{"id": 1644829, "category_id": 17, "iscrowd": 0, "bbox": [190, 237, 141, 58], "area": 5572}, {"id": 2629678, "category_id": 62, "iscrowd": 0, "bbox": [301, 135, 101, 89], "area": 6036}, {"id": 2695200, "category_id": 62, "iscrowd": 0, "bbox": [365, 164, 124, 127], "area": 7545}, {"id": 3159871, "category_id": 63, "iscrowd": 0, "bbox": [2, 206, 412, 123], "area": 28556}, {"id": 7693146, "category_id": 67, "iscrowd": 0, "bbox": [174, 206, 97, 55], "area": 2102}, {"id": 1512468, "category_id": 72, "iscrowd": 0, "bbox": [156, 94, 70, 47], "area": 3233}, {"id": 7765584, "category_id": 84, "iscrowd": 0, "bbox": [188, 194, 23, 11], "area": 151}, {"id": 11580059, "category_id": 84, "iscrowd": 0, "bbox": [185, 199, 42, 10], "area": 232}, {"id": 2569285, "category_id": 84, "iscrowd": 0, "bbox": [195, 210, 31, 11], "area": 172}, {"id": 4804175, "category_id": 84, "iscrowd": 0, "bbox": [184, 202, 42, 12], "area": 212}, {"id": 4222335, "category_id": 86, "iscrowd": 0, "bbox": [281, 90, 10, 24], "area": 188}, {"id": 3317171, "category_id": 86, "iscrowd": 0, "bbox": [231, 130, 10, 15], "area": 105}, {"id": 15525862, "category_id": 109, "iscrowd": 0, "bbox": [196, 61, 223, 90], "area": 8263}, {"id": 1978178, "category_id": 118, "iscrowd": 0, "bbox": [61, 182, 439, 151], "area": 9390}, {"id": 5930891, "category_id": 130, "iscrowd": 0, "bbox": [414, 102, 28, 44], "area": 794}, {"id": 10461344, "category_id": 133, "iscrowd": 0, "bbox": [33, 0, 438, 134], "area": 3946}, {"id": 5736856, "category_id": 156, "iscrowd": 0, "bbox": [278, 0, 152, 171], "area": 5117}, {"id": 16251128, "category_id": 181, "iscrowd": 0, "bbox": [207, 0, 219, 78], "area": 8686}, {"id": 1909811, "category_id": 189, "iscrowd": 0, "bbox": [160, 135, 120, 63], "area": 5416}, {"id": 9219250, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 290], "area": 57505}, {"id": 3947323, "category_id": 200, "iscrowd": 0, "bbox": [115, 215, 337, 118], "area": 5772}], "file_name": "000000139684.png", "image_id": 139684}, {"segments_info": [{"id": 7962497, "category_id": 5, "iscrowd": 0, "bbox": [15, 97, 612, 218], "area": 53798}, {"id": 2569506, "category_id": 184, "iscrowd": 0, "bbox": [0, 104, 640, 91], "area": 35071}, {"id": 14338744, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 129], "area": 74119}, {"id": 10332076, "category_id": 191, "iscrowd": 0, "bbox": [0, 284, 640, 143], "area": 78521}, {"id": 4157048, "category_id": 193, "iscrowd": 0, "bbox": [0, 184, 640, 128], "area": 26034}, {"id": 5533561, "category_id": 195, "iscrowd": 0, "bbox": [523, 295, 65, 24], "area": 1055}], "file_name": "000000139871.png", "image_id": 139871}, {"segments_info": [{"id": 3357256, "category_id": 1, "iscrowd": 0, "bbox": [589, 343, 50, 137], "area": 2425}, {"id": 14606821, "category_id": 1, "iscrowd": 0, "bbox": [0, 159, 99, 315], "area": 21434}, {"id": 8423050, "category_id": 18, "iscrowd": 0, "bbox": [67, 32, 415, 395], "area": 45523}, {"id": 7433949, "category_id": 34, "iscrowd": 0, "bbox": [407, 323, 140, 130], "area": 14073}, {"id": 8031124, "category_id": 191, "iscrowd": 0, "bbox": [105, 0, 535, 74], "area": 20038}, {"id": 3371870, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 202920}], "file_name": "000000139872.png", "image_id": 139872}, {"segments_info": [{"id": 5127068, "category_id": 34, "iscrowd": 0, "bbox": [250, 295, 90, 68], "area": 3809}, {"id": 12500157, "category_id": 34, "iscrowd": 0, "bbox": [144, 348, 125, 78], "area": 5767}, {"id": 7702680, "category_id": 34, "iscrowd": 0, "bbox": [75, 407, 97, 20], "area": 743}, {"id": 5859664, "category_id": 34, "iscrowd": 0, "bbox": [253, 398, 104, 29], "area": 2220}, {"id": 8752525, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 598, 427], "area": 208352}, {"id": 15588565, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 52024}], "file_name": "000000139883.png", "image_id": 139883}, {"segments_info": [{"id": 3882039, "category_id": 44, "iscrowd": 0, "bbox": [40, 264, 23, 23], "area": 188}, {"id": 6902852, "category_id": 44, "iscrowd": 0, "bbox": [21, 163, 7, 10], "area": 60}, {"id": 4796960, "category_id": 44, "iscrowd": 0, "bbox": [0, 293, 24, 23], "area": 216}, {"id": 9676451, "category_id": 44, "iscrowd": 0, "bbox": [5, 150, 5, 25], "area": 112}, {"id": 8286813, "category_id": 44, "iscrowd": 0, "bbox": [10, 154, 8, 31], "area": 152}, {"id": 7891803, "category_id": 44, "iscrowd": 0, "bbox": [44, 158, 16, 51], "area": 507}, {"id": 3616552, "category_id": 44, "iscrowd": 0, "bbox": [23, 263, 25, 22], "area": 240}, {"id": 11178875, "category_id": 44, "iscrowd": 0, "bbox": [35, 159, 11, 36], "area": 189}, {"id": 6511698, "category_id": 44, "iscrowd": 0, "bbox": [252, 293, 26, 82], "area": 1484}, {"id": 13411197, "category_id": 46, "iscrowd": 0, "bbox": [30, 221, 9, 23], "area": 145}, {"id": 12622454, "category_id": 46, "iscrowd": 0, "bbox": [10, 227, 11, 27], "area": 213}, {"id": 11572089, "category_id": 46, "iscrowd": 0, "bbox": [34, 216, 16, 52], "area": 419}, {"id": 12754559, "category_id": 46, "iscrowd": 0, "bbox": [0, 213, 64, 39], "area": 432}, {"id": 12951420, "category_id": 46, "iscrowd": 0, "bbox": [20, 224, 13, 31], "area": 228}, {"id": 4142642, "category_id": 62, "iscrowd": 0, "bbox": [364, 226, 67, 122], "area": 4520}, {"id": 5125675, "category_id": 62, "iscrowd": 0, "bbox": [19, 264, 97, 107], "area": 7223}, {"id": 5329518, "category_id": 62, "iscrowd": 0, "bbox": [222, 178, 84, 77], "area": 2889}, {"id": 2565156, "category_id": 62, "iscrowd": 0, "bbox": [421, 268, 79, 100], "area": 5641}, {"id": 4272686, "category_id": 62, "iscrowd": 0, "bbox": [81, 222, 60, 118], "area": 3860}, {"id": 4999559, "category_id": 67, "iscrowd": 0, "bbox": [79, 212, 340, 163], "area": 29303}, {"id": 8162643, "category_id": 86, "iscrowd": 0, "bbox": [237, 272, 34, 59], "area": 1253}, {"id": 3952484, "category_id": 118, "iscrowd": 0, "bbox": [0, 309, 436, 66], "area": 1919}, {"id": 7561554, "category_id": 156, "iscrowd": 0, "bbox": [0, 180, 72, 144], "area": 5282}, {"id": 2960790, "category_id": 189, "iscrowd": 0, "bbox": [195, 370, 222, 5], "area": 647}, {"id": 11777724, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 334], "area": 75625}], "file_name": "000000140076.png", "image_id": 140076}, {"segments_info": [{"id": 5658729, "category_id": 1, "iscrowd": 0, "bbox": [509, 20, 80, 226], "area": 5857}, {"id": 7826033, "category_id": 1, "iscrowd": 0, "bbox": [17, 19, 21, 65], "area": 459}, {"id": 6840433, "category_id": 1, "iscrowd": 0, "bbox": [8, 47, 19, 66], "area": 676}, {"id": 3158100, "category_id": 1, "iscrowd": 0, "bbox": [0, 119, 43, 291], "area": 7914}, {"id": 3945287, "category_id": 1, "iscrowd": 0, "bbox": [229, 48, 25, 43], "area": 659}, {"id": 9864592, "category_id": 1, "iscrowd": 0, "bbox": [0, 21, 28, 48], "area": 628}, {"id": 9931652, "category_id": 8, "iscrowd": 0, "bbox": [19, 0, 485, 390], "area": 167242}, {"id": 2764090, "category_id": 18, "iscrowd": 0, "bbox": [485, 43, 93, 72], "area": 3211}, {"id": 5986140, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 97004}], "file_name": "000000140203.png", "image_id": 140203}, {"segments_info": [{"id": 4801863, "category_id": 1, "iscrowd": 0, "bbox": [292, 62, 59, 161], "area": 3799}, {"id": 5264985, "category_id": 19, "iscrowd": 0, "bbox": [213, 137, 278, 167], "area": 18965}, {"id": 9605518, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 600, 126], "area": 64246}, {"id": 11521990, "category_id": 185, "iscrowd": 0, "bbox": [0, 193, 600, 73], "area": 11025}, {"id": 6204051, "category_id": 193, "iscrowd": 0, "bbox": [0, 90, 600, 310], "area": 139634}], "file_name": "000000140270.png", "image_id": 140270}, {"segments_info": [{"id": 2635060, "category_id": 1, "iscrowd": 0, "bbox": [418, 226, 99, 102], "area": 2296}, {"id": 1184293, "category_id": 1, "iscrowd": 0, "bbox": [255, 265, 28, 73], "area": 756}, {"id": 4740206, "category_id": 19, "iscrowd": 0, "bbox": [97, 249, 172, 197], "area": 15956}, {"id": 6843260, "category_id": 149, "iscrowd": 0, "bbox": [0, 409, 640, 112], "area": 54657}, {"id": 2831173, "category_id": 191, "iscrowd": 0, "bbox": [0, 340, 640, 118], "area": 21559}, {"id": 800868, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 398], "area": 198225}], "file_name": "000000140286.png", "image_id": 140286}, {"segments_info": [{"id": 2041637, "category_id": 4, "iscrowd": 0, "bbox": [403, 233, 45, 76], "area": 1976}, {"id": 8751234, "category_id": 148, "iscrowd": 0, "bbox": [31, 238, 101, 53], "area": 1660}, {"id": 2048048, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 213863}, {"id": 3698531, "category_id": 193, "iscrowd": 0, "bbox": [493, 253, 147, 86], "area": 4295}, {"id": 5135456, "category_id": 194, "iscrowd": 0, "bbox": [129, 248, 511, 180], "area": 52079}], "file_name": "000000140420.png", "image_id": 140420}, {"segments_info": [{"id": 6907748, "category_id": 64, "iscrowd": 0, "bbox": [1, 255, 38, 61], "area": 688}, {"id": 8097421, "category_id": 64, "iscrowd": 0, "bbox": [93, 290, 32, 45], "area": 674}, {"id": 8558760, "category_id": 64, "iscrowd": 0, "bbox": [137, 282, 31, 55], "area": 719}, {"id": 8226953, "category_id": 64, "iscrowd": 0, "bbox": [34, 256, 45, 76], "area": 836}, {"id": 9873082, "category_id": 67, "iscrowd": 0, "bbox": [32, 556, 364, 72], "area": 14198}, {"id": 8687004, "category_id": 86, "iscrowd": 0, "bbox": [35, 290, 50, 49], "area": 1856}, {"id": 9344408, "category_id": 86, "iscrowd": 0, "bbox": [169, 316, 117, 312], "area": 32045}, {"id": 12041932, "category_id": 86, "iscrowd": 0, "bbox": [94, 315, 30, 24], "area": 624}, {"id": 12833242, "category_id": 86, "iscrowd": 0, "bbox": [128, 270, 41, 67], "area": 1094}, {"id": 6718614, "category_id": 119, "iscrowd": 0, "bbox": [31, 16, 397, 310], "area": 57259}, {"id": 15066086, "category_id": 180, "iscrowd": 0, "bbox": [253, 0, 175, 523], "area": 61315}, {"id": 11057869, "category_id": 189, "iscrowd": 0, "bbox": [0, 508, 428, 132], "area": 19141}, {"id": 11191253, "category_id": 195, "iscrowd": 0, "bbox": [337, 496, 91, 67], "area": 3876}, {"id": 13422810, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 308, 563], "area": 74603}], "file_name": "000000140439.png", "image_id": 140439}, {"segments_info": [{"id": 4874853, "category_id": 1, "iscrowd": 0, "bbox": [466, 17, 153, 434], "area": 46110}, {"id": 3755862, "category_id": 1, "iscrowd": 0, "bbox": [56, 71, 116, 379], "area": 27420}, {"id": 3694433, "category_id": 1, "iscrowd": 0, "bbox": [136, 6, 203, 445], "area": 60824}, {"id": 6124660, "category_id": 1, "iscrowd": 0, "bbox": [285, 74, 85, 239], "area": 4372}, {"id": 8750210, "category_id": 8, "iscrowd": 0, "bbox": [5, 259, 42, 15], "area": 394}, {"id": 2907274, "category_id": 11, "iscrowd": 0, "bbox": [381, 241, 111, 216], "area": 15076}, {"id": 7371913, "category_id": 154, "iscrowd": 0, "bbox": [0, 269, 640, 188], "area": 45954}, {"id": 11107925, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 239], "area": 81200}, {"id": 6449004, "category_id": 192, "iscrowd": 0, "bbox": [0, 195, 640, 103], "area": 10051}], "file_name": "000000140556.png", "image_id": 140556}, {"segments_info": [{"id": 2695706, "category_id": 1, "iscrowd": 0, "bbox": [318, 257, 21, 37], "area": 468}, {"id": 3024672, "category_id": 1, "iscrowd": 0, "bbox": [289, 263, 15, 38], "area": 336}, {"id": 3812414, "category_id": 8, "iscrowd": 0, "bbox": [161, 258, 40, 28], "area": 958}, {"id": 2366741, "category_id": 20, "iscrowd": 0, "bbox": [411, 295, 24, 42], "area": 680}, {"id": 2630168, "category_id": 20, "iscrowd": 0, "bbox": [455, 294, 23, 45], "area": 760}, {"id": 1905672, "category_id": 20, "iscrowd": 0, "bbox": [368, 296, 16, 44], "area": 188}, {"id": 2760980, "category_id": 20, "iscrowd": 0, "bbox": [349, 288, 22, 52], "area": 773}, {"id": 2958622, "category_id": 20, "iscrowd": 0, "bbox": [428, 285, 19, 44], "area": 430}, {"id": 1445637, "category_id": 20, "iscrowd": 0, "bbox": [444, 293, 14, 37], "area": 373}, {"id": 1576709, "category_id": 20, "iscrowd": 0, "bbox": [386, 292, 23, 51], "area": 765}, {"id": 3943962, "category_id": 20, "iscrowd": 0, "bbox": [323, 292, 14, 33], "area": 243}, {"id": 3813667, "category_id": 20, "iscrowd": 0, "bbox": [475, 291, 18, 47], "area": 594}, {"id": 3222566, "category_id": 20, "iscrowd": 0, "bbox": [522, 298, 27, 49], "area": 845}, {"id": 4405030, "category_id": 20, "iscrowd": 0, "bbox": [334, 289, 17, 36], "area": 254}, {"id": 1775116, "category_id": 20, "iscrowd": 0, "bbox": [494, 295, 26, 42], "area": 689}, {"id": 5393476, "category_id": 20, "iscrowd": 0, "bbox": [309, 281, 12, 10], "area": 71}, {"id": 4867389, "category_id": 20, "iscrowd": 1, "bbox": [262, 265, 268, 44], "area": 2983}, {"id": 3747878, "category_id": 21, "iscrowd": 0, "bbox": [437, 270, 40, 28], "area": 693}, {"id": 2827288, "category_id": 21, "iscrowd": 0, "bbox": [367, 288, 22, 50], "area": 574}, {"id": 4142639, "category_id": 21, "iscrowd": 0, "bbox": [470, 268, 39, 28], "area": 548}, {"id": 4011047, "category_id": 21, "iscrowd": 0, "bbox": [421, 273, 19, 15], "area": 182}, {"id": 5586470, "category_id": 125, "iscrowd": 0, "bbox": [0, 291, 640, 69], "area": 3443}, {"id": 4599310, "category_id": 149, "iscrowd": 0, "bbox": [0, 271, 640, 207], "area": 98561}, {"id": 14607806, "category_id": 187, "iscrowd": 0, "bbox": [83, 0, 557, 155], "area": 51000}, {"id": 10264734, "category_id": 192, "iscrowd": 0, "bbox": [132, 34, 508, 277], "area": 86578}, {"id": 2631442, "category_id": 193, "iscrowd": 0, "bbox": [45, 287, 106, 55], "area": 2255}, {"id": 4803921, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 178, 343], "area": 46745}], "file_name": "000000140583.png", "image_id": 140583}, {"segments_info": [{"id": 4147299, "category_id": 1, "iscrowd": 0, "bbox": [273, 52, 208, 374], "area": 48574}, {"id": 2435402, "category_id": 1, "iscrowd": 0, "bbox": [111, 54, 189, 368], "area": 51588}, {"id": 2829887, "category_id": 1, "iscrowd": 0, "bbox": [436, 89, 167, 282], "area": 25869}, {"id": 5662080, "category_id": 49, "iscrowd": 0, "bbox": [427, 356, 56, 31], "area": 576}, {"id": 9278651, "category_id": 61, "iscrowd": 0, "bbox": [413, 402, 37, 23], "area": 741}, {"id": 10534610, "category_id": 61, "iscrowd": 0, "bbox": [480, 365, 113, 60], "area": 4808}, {"id": 9423327, "category_id": 61, "iscrowd": 0, "bbox": [450, 385, 35, 18], "area": 457}, {"id": 6138836, "category_id": 61, "iscrowd": 0, "bbox": [483, 397, 32, 29], "area": 734}, {"id": 12042731, "category_id": 61, "iscrowd": 0, "bbox": [451, 410, 41, 14], "area": 463}, {"id": 1587004, "category_id": 64, "iscrowd": 0, "bbox": [429, 14, 154, 148], "area": 11016}, {"id": 5332078, "category_id": 67, "iscrowd": 0, "bbox": [406, 343, 234, 83], "area": 6558}, {"id": 2108216, "category_id": 112, "iscrowd": 0, "bbox": [491, 0, 117, 353], "area": 12422}, {"id": 4940406, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 97214}], "file_name": "000000140640.png", "image_id": 140640}, {"segments_info": [{"id": 10127223, "category_id": 85, "iscrowd": 0, "bbox": [145, 124, 39, 36], "area": 956}, {"id": 16579822, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 539], "area": 87330}, {"id": 4210751, "category_id": 197, "iscrowd": 0, "bbox": [0, 19, 480, 621], "area": 218890}], "file_name": "000000140658.png", "image_id": 140658}, {"segments_info": [{"id": 2500650, "category_id": 1, "iscrowd": 0, "bbox": [204, 98, 15, 48], "area": 423}, {"id": 3948108, "category_id": 1, "iscrowd": 0, "bbox": [347, 136, 10, 12], "area": 72}, {"id": 3818577, "category_id": 1, "iscrowd": 0, "bbox": [47, 124, 6, 13], "area": 32}, {"id": 4407855, "category_id": 1, "iscrowd": 0, "bbox": [32, 125, 4, 13], "area": 33}, {"id": 3566208, "category_id": 1, "iscrowd": 0, "bbox": [70, 114, 9, 22], "area": 86}, {"id": 5857122, "category_id": 8, "iscrowd": 0, "bbox": [462, 109, 30, 26], "area": 678}, {"id": 4081816, "category_id": 38, "iscrowd": 0, "bbox": [358, 168, 105, 87], "area": 5565}, {"id": 6846100, "category_id": 38, "iscrowd": 0, "bbox": [335, 172, 24, 62], "area": 1148}, {"id": 9990459, "category_id": 38, "iscrowd": 0, "bbox": [317, 133, 15, 34], "area": 268}, {"id": 2113207, "category_id": 38, "iscrowd": 0, "bbox": [374, 136, 26, 33], "area": 411}, {"id": 9807288, "category_id": 38, "iscrowd": 0, "bbox": [135, 172, 70, 68], "area": 3058}, {"id": 4962725, "category_id": 38, "iscrowd": 0, "bbox": [240, 129, 13, 26], "area": 195}, {"id": 9279676, "category_id": 38, "iscrowd": 0, "bbox": [259, 192, 68, 55], "area": 3162}, {"id": 6848950, "category_id": 38, "iscrowd": 0, "bbox": [274, 128, 37, 29], "area": 330}, {"id": 4610703, "category_id": 38, "iscrowd": 0, "bbox": [0, 187, 40, 39], "area": 663}, {"id": 5789357, "category_id": 38, "iscrowd": 0, "bbox": [62, 192, 83, 27], "area": 742}, {"id": 7094738, "category_id": 38, "iscrowd": 0, "bbox": [356, 135, 13, 23], "area": 184}, {"id": 4145056, "category_id": 38, "iscrowd": 0, "bbox": [218, 171, 35, 50], "area": 1262}, {"id": 4211096, "category_id": 38, "iscrowd": 0, "bbox": [34, 198, 28, 32], "area": 584}, {"id": 5532821, "category_id": 38, "iscrowd": 1, "bbox": [1, 106, 444, 86], "area": 7637}, {"id": 5010573, "category_id": 154, "iscrowd": 0, "bbox": [0, 111, 500, 170], "area": 54032}, {"id": 13687002, "category_id": 166, "iscrowd": 0, "bbox": [25, 116, 13, 8], "area": 48}, {"id": 2569524, "category_id": 184, "iscrowd": 0, "bbox": [10, 92, 490, 46], "area": 3295}, {"id": 14540248, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 125], "area": 54737}, {"id": 4873321, "category_id": 197, "iscrowd": 0, "bbox": [219, 102, 201, 31], "area": 1224}], "file_name": "000000140840.png", "image_id": 140840}, {"segments_info": [{"id": 10528681, "category_id": 85, "iscrowd": 0, "bbox": [210, 22, 430, 253], "area": 85208}, {"id": 16315122, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 401], "area": 83436}], "file_name": "000000140929.png", "image_id": 140929}, {"segments_info": [{"id": 4206882, "category_id": 1, "iscrowd": 0, "bbox": [264, 101, 161, 224], "area": 18385}, {"id": 6189971, "category_id": 1, "iscrowd": 0, "bbox": [273, 132, 62, 91], "area": 1540}, {"id": 9343394, "category_id": 1, "iscrowd": 0, "bbox": [59, 141, 309, 293], "area": 49266}, {"id": 7041917, "category_id": 1, "iscrowd": 0, "bbox": [139, 101, 65, 43], "area": 2015}, {"id": 14598049, "category_id": 1, "iscrowd": 0, "bbox": [2, 66, 67, 155], "area": 6120}, {"id": 4277075, "category_id": 1, "iscrowd": 0, "bbox": [16, 119, 139, 315], "area": 9295}, {"id": 6260119, "category_id": 47, "iscrowd": 0, "bbox": [388, 335, 37, 138], "area": 3930}, {"id": 10334888, "category_id": 47, "iscrowd": 0, "bbox": [18, 220, 30, 39], "area": 928}, {"id": 8622227, "category_id": 47, "iscrowd": 0, "bbox": [284, 467, 141, 173], "area": 19717}, {"id": 9483196, "category_id": 47, "iscrowd": 0, "bbox": [282, 195, 32, 38], "area": 851}, {"id": 4353720, "category_id": 59, "iscrowd": 0, "bbox": [105, 412, 190, 110], "area": 15600}, {"id": 3029313, "category_id": 62, "iscrowd": 0, "bbox": [322, 261, 103, 160], "area": 8022}, {"id": 10598859, "category_id": 62, "iscrowd": 0, "bbox": [298, 330, 62, 78], "area": 1719}, {"id": 1386293, "category_id": 62, "iscrowd": 0, "bbox": [78, 302, 20, 39], "area": 520}, {"id": 4738614, "category_id": 64, "iscrowd": 0, "bbox": [352, 38, 73, 102], "area": 4337}, {"id": 5922903, "category_id": 64, "iscrowd": 0, "bbox": [218, 56, 116, 99], "area": 5840}, {"id": 2773109, "category_id": 67, "iscrowd": 0, "bbox": [3, 421, 405, 219], "area": 25408}, {"id": 6188664, "category_id": 67, "iscrowd": 0, "bbox": [9, 249, 62, 47], "area": 1598}, {"id": 14808313, "category_id": 130, "iscrowd": 0, "bbox": [144, 0, 120, 85], "area": 1668}, {"id": 14999503, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 425, 155], "area": 30848}, {"id": 4479596, "category_id": 189, "iscrowd": 0, "bbox": [0, 213, 425, 427], "area": 4464}, {"id": 11053487, "category_id": 195, "iscrowd": 0, "bbox": [0, 518, 250, 122], "area": 18086}, {"id": 7443646, "category_id": 196, "iscrowd": 0, "bbox": [272, 442, 53, 53], "area": 742}], "file_name": "000000140987.png", "image_id": 140987}, {"segments_info": [{"id": 2505773, "category_id": 50, "iscrowd": 0, "bbox": [471, 2, 102, 126], "area": 4714}, {"id": 4489617, "category_id": 51, "iscrowd": 0, "bbox": [1, 1, 639, 473], "area": 241470}, {"id": 273690, "category_id": 56, "iscrowd": 0, "bbox": [34, 415, 74, 65], "area": 3376}, {"id": 3180903, "category_id": 56, "iscrowd": 0, "bbox": [375, 1, 67, 55], "area": 2478}, {"id": 544053, "category_id": 56, "iscrowd": 0, "bbox": [35, 347, 139, 103], "area": 6439}, {"id": 139021, "category_id": 56, "iscrowd": 0, "bbox": [0, 431, 35, 49], "area": 1562}, {"id": 2321999, "category_id": 56, "iscrowd": 0, "bbox": [448, 297, 79, 76], "area": 4276}, {"id": 1009240, "category_id": 56, "iscrowd": 0, "bbox": [218, 6, 28, 44], "area": 735}, {"id": 1070398, "category_id": 56, "iscrowd": 0, "bbox": [186, 237, 77, 37], "area": 1933}, {"id": 3120253, "category_id": 56, "iscrowd": 0, "bbox": [136, 79, 46, 87], "area": 1913}, {"id": 932385, "category_id": 56, "iscrowd": 0, "bbox": [444, 180, 108, 121], "area": 8987}, {"id": 3180912, "category_id": 56, "iscrowd": 0, "bbox": [77, 4, 139, 60], "area": 3943}, {"id": 3571050, "category_id": 56, "iscrowd": 0, "bbox": [5, 165, 78, 76], "area": 3667}, {"id": 3050104, "category_id": 56, "iscrowd": 0, "bbox": [371, 144, 65, 73], "area": 2802}, {"id": 1535053, "category_id": 56, "iscrowd": 0, "bbox": [8, 188, 110, 168], "area": 6544}, {"id": 5857632, "category_id": 191, "iscrowd": 0, "bbox": [117, 0, 523, 71], "area": 5028}, {"id": 3630188, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 5426}], "file_name": "000000141328.png", "image_id": 141328}, {"segments_info": [{"id": 3684661, "category_id": 3, "iscrowd": 0, "bbox": [378, 235, 176, 116], "area": 14789}, {"id": 5657684, "category_id": 3, "iscrowd": 0, "bbox": [545, 243, 72, 87], "area": 3860}, {"id": 6249045, "category_id": 8, "iscrowd": 0, "bbox": [39, 131, 361, 199], "area": 51372}, {"id": 8157813, "category_id": 130, "iscrowd": 0, "bbox": [33, 68, 597, 168], "area": 1658}, {"id": 9342863, "category_id": 149, "iscrowd": 0, "bbox": [0, 386, 640, 41], "area": 14151}, {"id": 10068386, "category_id": 191, "iscrowd": 0, "bbox": [0, 287, 640, 126], "area": 50765}, {"id": 12368312, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 340], "area": 108662}], "file_name": "000000141597.png", "image_id": 141597}, {"segments_info": [{"id": 4473924, "category_id": 1, "iscrowd": 0, "bbox": [395, 206, 19, 34], "area": 264}, {"id": 7039851, "category_id": 1, "iscrowd": 0, "bbox": [335, 273, 26, 31], "area": 282}, {"id": 5263440, "category_id": 1, "iscrowd": 0, "bbox": [116, 206, 13, 34], "area": 174}, {"id": 5789784, "category_id": 1, "iscrowd": 0, "bbox": [368, 236, 21, 40], "area": 356}, {"id": 6250335, "category_id": 1, "iscrowd": 0, "bbox": [224, 187, 10, 26], "area": 157}, {"id": 2829099, "category_id": 1, "iscrowd": 0, "bbox": [140, 284, 27, 38], "area": 528}, {"id": 4079166, "category_id": 1, "iscrowd": 0, "bbox": [44, 186, 11, 28], "area": 187}, {"id": 3223857, "category_id": 1, "iscrowd": 0, "bbox": [220, 246, 20, 32], "area": 266}, {"id": 3289650, "category_id": 1, "iscrowd": 0, "bbox": [107, 206, 13, 25], "area": 184}, {"id": 4079163, "category_id": 1, "iscrowd": 0, "bbox": [93, 181, 23, 30], "area": 272}, {"id": 4276545, "category_id": 1, "iscrowd": 0, "bbox": [322, 272, 28, 41], "area": 450}, {"id": 5395026, "category_id": 1, "iscrowd": 0, "bbox": [57, 180, 13, 34], "area": 284}, {"id": 4737096, "category_id": 1, "iscrowd": 0, "bbox": [19, 182, 11, 34], "area": 243}, {"id": 6250331, "category_id": 1, "iscrowd": 1, "bbox": [1, 175, 438, 160], "area": 4494}, {"id": 4934475, "category_id": 4, "iscrowd": 0, "bbox": [102, 217, 46, 26], "area": 555}, {"id": 5526612, "category_id": 4, "iscrowd": 0, "bbox": [357, 252, 55, 28], "area": 812}, {"id": 5460819, "category_id": 4, "iscrowd": 0, "bbox": [317, 292, 69, 34], "area": 1277}, {"id": 5723991, "category_id": 4, "iscrowd": 0, "bbox": [243, 197, 43, 22], "area": 661}, {"id": 10724259, "category_id": 15, "iscrowd": 0, "bbox": [503, 190, 42, 18], "area": 491}, {"id": 8421504, "category_id": 15, "iscrowd": 0, "bbox": [133, 200, 39, 17], "area": 424}, {"id": 9605778, "category_id": 15, "iscrowd": 0, "bbox": [313, 197, 40, 17], "area": 442}, {"id": 8026746, "category_id": 15, "iscrowd": 0, "bbox": [184, 200, 39, 17], "area": 407}, {"id": 3947580, "category_id": 19, "iscrowd": 0, "bbox": [181, 249, 82, 44], "area": 1552}, {"id": 5066061, "category_id": 19, "iscrowd": 0, "bbox": [359, 181, 58, 39], "area": 924}, {"id": 4605510, "category_id": 19, "iscrowd": 0, "bbox": [361, 210, 77, 46], "area": 1269}, {"id": 4539717, "category_id": 19, "iscrowd": 0, "bbox": [91, 283, 100, 48], "area": 1565}, {"id": 7763574, "category_id": 92, "iscrowd": 0, "bbox": [416, 226, 23, 63], "area": 818}, {"id": 8618883, "category_id": 128, "iscrowd": 0, "bbox": [0, 10, 640, 218], "area": 99968}, {"id": 7829367, "category_id": 145, "iscrowd": 0, "bbox": [0, 194, 640, 141], "area": 68561}, {"id": 9671571, "category_id": 149, "iscrowd": 0, "bbox": [317, 88, 90, 79], "area": 2086}, {"id": 7237230, "category_id": 184, "iscrowd": 0, "bbox": [226, 75, 20, 16], "area": 227}, {"id": 9868950, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 19], "area": 8632}, {"id": 9079434, "category_id": 193, "iscrowd": 0, "bbox": [133, 58, 242, 156], "area": 1987}], "file_name": "000000141671.png", "image_id": 141671}, {"segments_info": [{"id": 3419212, "category_id": 1, "iscrowd": 0, "bbox": [1, 47, 66, 112], "area": 3196}, {"id": 9798801, "category_id": 1, "iscrowd": 0, "bbox": [47, 1, 537, 113], "area": 30134}, {"id": 11901575, "category_id": 44, "iscrowd": 0, "bbox": [515, 156, 125, 317], "area": 26743}, {"id": 6057094, "category_id": 51, "iscrowd": 0, "bbox": [1, 286, 94, 100], "area": 8037}, {"id": 6977163, "category_id": 59, "iscrowd": 0, "bbox": [83, 106, 458, 363], "area": 124106}, {"id": 5199975, "category_id": 189, "iscrowd": 0, "bbox": [0, 17, 602, 463], "area": 30450}, {"id": 5065036, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 140], "area": 16232}, {"id": 11182753, "category_id": 195, "iscrowd": 0, "bbox": [0, 17, 571, 463], "area": 48616}, {"id": 6975079, "category_id": 196, "iscrowd": 0, "bbox": [50, 29, 590, 451], "area": 15677}], "file_name": "000000141821.png", "image_id": 141821}, {"segments_info": [{"id": 6323104, "category_id": 59, "iscrowd": 0, "bbox": [145, 64, 371, 333], "area": 97333}, {"id": 3292511, "category_id": 100, "iscrowd": 0, "bbox": [34, 32, 565, 433], "area": 111492}, {"id": 1447981, "category_id": 118, "iscrowd": 0, "bbox": [448, 249, 192, 231], "area": 16109}, {"id": 7697020, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 454], "area": 51966}], "file_name": "000000142092.png", "image_id": 142092}, {"segments_info": [{"id": 5920342, "category_id": 1, "iscrowd": 0, "bbox": [282, 207, 48, 149], "area": 3528}, {"id": 5134193, "category_id": 1, "iscrowd": 0, "bbox": [420, 183, 49, 173], "area": 3751}, {"id": 4739689, "category_id": 1, "iscrowd": 0, "bbox": [271, 118, 53, 141], "area": 2301}, {"id": 6248795, "category_id": 1, "iscrowd": 0, "bbox": [337, 208, 54, 149], "area": 4076}, {"id": 6122348, "category_id": 1, "iscrowd": 0, "bbox": [47, 221, 36, 138], "area": 2931}, {"id": 5200750, "category_id": 1, "iscrowd": 0, "bbox": [436, 125, 70, 151], "area": 2969}, {"id": 4478570, "category_id": 1, "iscrowd": 0, "bbox": [241, 183, 45, 171], "area": 3557}, {"id": 3631726, "category_id": 1, "iscrowd": 0, "bbox": [618, 248, 22, 68], "area": 477}, {"id": 3493979, "category_id": 1, "iscrowd": 0, "bbox": [470, 211, 63, 142], "area": 3968}, {"id": 5658738, "category_id": 1, "iscrowd": 0, "bbox": [0, 242, 9, 44], "area": 153}, {"id": 5396570, "category_id": 1, "iscrowd": 0, "bbox": [153, 217, 58, 140], "area": 3330}, {"id": 7632499, "category_id": 1, "iscrowd": 0, "bbox": [586, 229, 13, 39], "area": 355}, {"id": 8950942, "category_id": 1, "iscrowd": 0, "bbox": [270, 124, 26, 61], "area": 636}, {"id": 4940646, "category_id": 1, "iscrowd": 1, "bbox": [75, 111, 517, 262], "area": 24295}, {"id": 8955567, "category_id": 37, "iscrowd": 0, "bbox": [360, 116, 16, 17], "area": 175}, {"id": 3362387, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 263], "area": 130762}, {"id": 15660019, "category_id": 187, "iscrowd": 0, "bbox": [440, 0, 200, 103], "area": 8204}, {"id": 1739893, "category_id": 193, "iscrowd": 0, "bbox": [0, 241, 640, 186], "area": 75100}], "file_name": "000000142238.png", "image_id": 142238}, {"segments_info": [{"id": 2302239, "category_id": 1, "iscrowd": 0, "bbox": [194, 172, 67, 168], "area": 6014}, {"id": 6183517, "category_id": 1, "iscrowd": 0, "bbox": [0, 139, 77, 245], "area": 13637}, {"id": 2959918, "category_id": 1, "iscrowd": 0, "bbox": [73, 203, 47, 164], "area": 3458}, {"id": 5262426, "category_id": 1, "iscrowd": 0, "bbox": [117, 187, 20, 68], "area": 585}, {"id": 3034691, "category_id": 1, "iscrowd": 0, "bbox": [285, 195, 44, 96], "area": 1689}, {"id": 2697513, "category_id": 1, "iscrowd": 0, "bbox": [67, 159, 59, 119], "area": 2270}, {"id": 2894900, "category_id": 1, "iscrowd": 0, "bbox": [394, 207, 43, 44], "area": 972}, {"id": 4407115, "category_id": 1, "iscrowd": 0, "bbox": [586, 200, 54, 106], "area": 3066}, {"id": 5661540, "category_id": 1, "iscrowd": 0, "bbox": [123, 189, 40, 143], "area": 3996}, {"id": 7168351, "category_id": 1, "iscrowd": 0, "bbox": [268, 192, 27, 33], "area": 462}, {"id": 4802896, "category_id": 1, "iscrowd": 0, "bbox": [196, 196, 13, 14], "area": 108}, {"id": 6181971, "category_id": 1, "iscrowd": 0, "bbox": [295, 178, 44, 103], "area": 1347}, {"id": 7104362, "category_id": 1, "iscrowd": 0, "bbox": [347, 147, 126, 134], "area": 6029}, {"id": 4078912, "category_id": 1, "iscrowd": 1, "bbox": [151, 179, 399, 164], "area": 14935}, {"id": 2236447, "category_id": 2, "iscrowd": 0, "bbox": [211, 262, 37, 98], "area": 1356}, {"id": 3552819, "category_id": 2, "iscrowd": 0, "bbox": [313, 250, 11, 53], "area": 439}, {"id": 3551791, "category_id": 4, "iscrowd": 0, "bbox": [272, 218, 19, 37], "area": 544}, {"id": 6053213, "category_id": 4, "iscrowd": 0, "bbox": [347, 246, 110, 206], "area": 14821}, {"id": 4211010, "category_id": 8, "iscrowd": 0, "bbox": [459, 194, 39, 14], "area": 245}, {"id": 4538955, "category_id": 31, "iscrowd": 0, "bbox": [36, 315, 46, 135], "area": 4516}, {"id": 5859953, "category_id": 92, "iscrowd": 0, "bbox": [84, 106, 99, 101], "area": 5266}, {"id": 5196879, "category_id": 128, "iscrowd": 0, "bbox": [395, 41, 83, 90], "area": 3762}, {"id": 5986909, "category_id": 149, "iscrowd": 0, "bbox": [0, 238, 640, 242], "area": 80837}, {"id": 6579818, "category_id": 166, "iscrowd": 0, "bbox": [555, 105, 85, 76], "area": 3374}, {"id": 1709334, "category_id": 181, "iscrowd": 0, "bbox": [50, 15, 46, 80], "area": 2028}, {"id": 10326929, "category_id": 187, "iscrowd": 0, "bbox": [69, 0, 430, 98], "area": 26492}, {"id": 5394515, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 233], "area": 65519}], "file_name": "000000142324.png", "image_id": 142324}, {"segments_info": [{"id": 3353644, "category_id": 1, "iscrowd": 0, "bbox": [526, 363, 7, 24], "area": 87}, {"id": 6444874, "category_id": 1, "iscrowd": 0, "bbox": [380, 357, 26, 60], "area": 655}, {"id": 6249568, "category_id": 1, "iscrowd": 0, "bbox": [535, 371, 5, 18], "area": 64}, {"id": 4472395, "category_id": 1, "iscrowd": 0, "bbox": [540, 366, 9, 23], "area": 111}, {"id": 4867398, "category_id": 1, "iscrowd": 0, "bbox": [279, 338, 23, 31], "area": 417}, {"id": 2828074, "category_id": 1, "iscrowd": 0, "bbox": [392, 363, 34, 62], "area": 672}, {"id": 6906979, "category_id": 3, "iscrowd": 0, "bbox": [463, 365, 60, 36], "area": 1424}, {"id": 4012363, "category_id": 3, "iscrowd": 0, "bbox": [203, 373, 131, 62], "area": 6301}, {"id": 8618631, "category_id": 3, "iscrowd": 0, "bbox": [351, 373, 39, 40], "area": 880}, {"id": 7959927, "category_id": 3, "iscrowd": 0, "bbox": [414, 370, 54, 39], "area": 1494}, {"id": 4142434, "category_id": 6, "iscrowd": 0, "bbox": [576, 327, 63, 65], "area": 3584}, {"id": 6644576, "category_id": 149, "iscrowd": 0, "bbox": [0, 376, 640, 104], "area": 36312}, {"id": 4869986, "category_id": 151, "iscrowd": 0, "bbox": [0, 66, 506, 208], "area": 11631}, {"id": 10660782, "category_id": 181, "iscrowd": 0, "bbox": [0, 175, 283, 111], "area": 7756}, {"id": 2633517, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 238], "area": 78437}, {"id": 16053234, "category_id": 187, "iscrowd": 0, "bbox": [0, 3, 640, 296], "area": 58243}, {"id": 6514795, "category_id": 191, "iscrowd": 0, "bbox": [0, 376, 640, 87], "area": 10769}, {"id": 6513514, "category_id": 197, "iscrowd": 0, "bbox": [0, 157, 640, 252], "area": 86045}], "file_name": "000000142472.png", "image_id": 142472}, {"segments_info": [{"id": 7434072, "category_id": 1, "iscrowd": 0, "bbox": [96, 285, 33, 70], "area": 793}, {"id": 1913907, "category_id": 1, "iscrowd": 0, "bbox": [92, 287, 73, 149], "area": 3952}, {"id": 2762011, "category_id": 3, "iscrowd": 0, "bbox": [173, 310, 20, 25], "area": 160}, {"id": 4867381, "category_id": 3, "iscrowd": 0, "bbox": [153, 307, 36, 72], "area": 1388}, {"id": 4800554, "category_id": 3, "iscrowd": 0, "bbox": [348, 295, 27, 64], "area": 1141}, {"id": 5920579, "category_id": 3, "iscrowd": 0, "bbox": [178, 267, 188, 176], "area": 24550}, {"id": 2764332, "category_id": 4, "iscrowd": 0, "bbox": [127, 348, 30, 95], "area": 2393}, {"id": 4475483, "category_id": 6, "iscrowd": 0, "bbox": [0, 0, 89, 493], "area": 39501}, {"id": 4082304, "category_id": 10, "iscrowd": 0, "bbox": [222, 228, 25, 42], "area": 878}, {"id": 4014970, "category_id": 10, "iscrowd": 0, "bbox": [94, 226, 14, 33], "area": 344}, {"id": 6909535, "category_id": 95, "iscrowd": 0, "bbox": [88, 167, 287, 70], "area": 13230}, {"id": 4210476, "category_id": 149, "iscrowd": 0, "bbox": [40, 367, 335, 133], "area": 23603}, {"id": 5068097, "category_id": 184, "iscrowd": 0, "bbox": [104, 69, 271, 255], "area": 9415}, {"id": 2828323, "category_id": 186, "iscrowd": 0, "bbox": [89, 221, 286, 41], "area": 4838}, {"id": 15724267, "category_id": 187, "iscrowd": 0, "bbox": [63, 0, 312, 181], "area": 29235}, {"id": 5199710, "category_id": 197, "iscrowd": 0, "bbox": [111, 250, 89, 32], "area": 2078}], "file_name": "000000142585.png", "image_id": 142585}, {"segments_info": [{"id": 4010300, "category_id": 1, "iscrowd": 0, "bbox": [279, 6, 341, 414], "area": 75036}, {"id": 8339734, "category_id": 44, "iscrowd": 0, "bbox": [74, 281, 50, 79], "area": 2896}, {"id": 12629160, "category_id": 44, "iscrowd": 0, "bbox": [111, 204, 37, 112], "area": 2691}, {"id": 7100513, "category_id": 47, "iscrowd": 0, "bbox": [230, 380, 47, 46], "area": 1847}, {"id": 11702923, "category_id": 47, "iscrowd": 0, "bbox": [165, 378, 49, 48], "area": 2054}, {"id": 9662566, "category_id": 47, "iscrowd": 0, "bbox": [235, 293, 44, 40], "area": 1320}, {"id": 10062211, "category_id": 49, "iscrowd": 0, "bbox": [252, 267, 49, 15], "area": 273}, {"id": 10448214, "category_id": 50, "iscrowd": 0, "bbox": [111, 333, 70, 44], "area": 484}, {"id": 8280143, "category_id": 50, "iscrowd": 0, "bbox": [191, 314, 40, 12], "area": 118}, {"id": 10648687, "category_id": 51, "iscrowd": 0, "bbox": [254, 321, 101, 55], "area": 2897}, {"id": 10253670, "category_id": 51, "iscrowd": 0, "bbox": [100, 351, 60, 48], "area": 1882}, {"id": 5093079, "category_id": 55, "iscrowd": 0, "bbox": [187, 292, 21, 22], "area": 361}, {"id": 7700367, "category_id": 62, "iscrowd": 0, "bbox": [159, 104, 186, 165], "area": 22787}, {"id": 4869221, "category_id": 62, "iscrowd": 0, "bbox": [504, 114, 136, 303], "area": 11787}, {"id": 7824738, "category_id": 67, "iscrowd": 0, "bbox": [0, 210, 354, 211], "area": 29642}, {"id": 3296079, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 205], "area": 58681}, {"id": 4280932, "category_id": 185, "iscrowd": 0, "bbox": [0, 86, 323, 54], "area": 8808}, {"id": 5585714, "category_id": 189, "iscrowd": 0, "bbox": [0, 421, 326, 5], "area": 1040}, {"id": 4615028, "category_id": 193, "iscrowd": 0, "bbox": [0, 114, 519, 312], "area": 41164}], "file_name": "000000142620.png", "image_id": 142620}, {"segments_info": [{"id": 3420981, "category_id": 1, "iscrowd": 0, "bbox": [151, 172, 145, 111], "area": 9284}, {"id": 3947066, "category_id": 1, "iscrowd": 0, "bbox": [258, 143, 166, 124], "area": 8461}, {"id": 10065574, "category_id": 35, "iscrowd": 0, "bbox": [365, 239, 77, 54], "area": 745}, {"id": 5262680, "category_id": 36, "iscrowd": 0, "bbox": [8, 278, 302, 46], "area": 4803}, {"id": 14738402, "category_id": 159, "iscrowd": 0, "bbox": [0, 181, 500, 194], "area": 69855}, {"id": 8028546, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 310, 227], "area": 51275}, {"id": 14672611, "category_id": 187, "iscrowd": 0, "bbox": [177, 0, 323, 185], "area": 42659}], "file_name": "000000142790.png", "image_id": 142790}, {"segments_info": [{"id": 3683907, "category_id": 1, "iscrowd": 0, "bbox": [309, 190, 122, 128], "area": 6918}, {"id": 2038042, "category_id": 1, "iscrowd": 0, "bbox": [415, 211, 94, 87], "area": 4288}, {"id": 3023669, "category_id": 1, "iscrowd": 0, "bbox": [94, 109, 147, 148], "area": 7338}, {"id": 2827360, "category_id": 1, "iscrowd": 0, "bbox": [177, 73, 133, 155], "area": 11947}, {"id": 11179391, "category_id": 42, "iscrowd": 0, "bbox": [28, 156, 386, 103], "area": 11677}, {"id": 9938867, "category_id": 42, "iscrowd": 0, "bbox": [106, 273, 451, 48], "area": 9245}, {"id": 8611664, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 221221}], "file_name": "000000142971.png", "image_id": 142971}, {"segments_info": [{"id": 6776698, "category_id": 1, "iscrowd": 0, "bbox": [133, 158, 1, 5], "area": 5}, {"id": 6839911, "category_id": 1, "iscrowd": 0, "bbox": [374, 147, 2, 4], "area": 7}, {"id": 3159882, "category_id": 1, "iscrowd": 0, "bbox": [620, 140, 11, 29], "area": 196}, {"id": 2827793, "category_id": 1, "iscrowd": 0, "bbox": [625, 122, 15, 69], "area": 632}, {"id": 8547472, "category_id": 1, "iscrowd": 0, "bbox": [149, 156, 2, 6], "area": 8}, {"id": 4345172, "category_id": 1, "iscrowd": 0, "bbox": [533, 129, 48, 83], "area": 2430}, {"id": 10651271, "category_id": 1, "iscrowd": 0, "bbox": [579, 136, 48, 77], "area": 1673}, {"id": 6247284, "category_id": 1, "iscrowd": 0, "bbox": [103, 156, 3, 9], "area": 8}, {"id": 5927040, "category_id": 1, "iscrowd": 0, "bbox": [93, 155, 5, 10], "area": 35}, {"id": 5723763, "category_id": 1, "iscrowd": 0, "bbox": [501, 127, 32, 86], "area": 1533}, {"id": 7560289, "category_id": 1, "iscrowd": 0, "bbox": [126, 158, 3, 5], "area": 13}, {"id": 11504755, "category_id": 1, "iscrowd": 0, "bbox": [143, 157, 3, 4], "area": 9}, {"id": 10194572, "category_id": 1, "iscrowd": 1, "bbox": [1, 126, 631, 50], "area": 2107}, {"id": 7630033, "category_id": 38, "iscrowd": 0, "bbox": [231, 121, 76, 68], "area": 1218}, {"id": 10392160, "category_id": 38, "iscrowd": 0, "bbox": [151, 22, 177, 38], "area": 2298}, {"id": 11366015, "category_id": 38, "iscrowd": 0, "bbox": [434, 90, 81, 60], "area": 823}, {"id": 8279688, "category_id": 92, "iscrowd": 0, "bbox": [164, 124, 256, 69], "area": 4770}, {"id": 9007193, "category_id": 95, "iscrowd": 0, "bbox": [55, 124, 381, 44], "area": 4638}, {"id": 4340802, "category_id": 144, "iscrowd": 0, "bbox": [537, 168, 103, 45], "area": 736}, {"id": 9743820, "category_id": 154, "iscrowd": 0, "bbox": [0, 130, 606, 83], "area": 25863}, {"id": 11046257, "category_id": 155, "iscrowd": 0, "bbox": [0, 131, 168, 38], "area": 3068}, {"id": 9600114, "category_id": 185, "iscrowd": 0, "bbox": [498, 180, 23, 8], "area": 68}, {"id": 16309444, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 141], "area": 80845}, {"id": 7826792, "category_id": 197, "iscrowd": 0, "bbox": [431, 120, 170, 32], "area": 2457}], "file_name": "000000143068.png", "image_id": 143068}, {"segments_info": [{"id": 3950683, "category_id": 1, "iscrowd": 0, "bbox": [369, 237, 42, 54], "area": 1357}, {"id": 1578261, "category_id": 1, "iscrowd": 0, "bbox": [440, 204, 33, 62], "area": 838}, {"id": 5920624, "category_id": 1, "iscrowd": 0, "bbox": [391, 211, 32, 55], "area": 751}, {"id": 10918033, "category_id": 1, "iscrowd": 0, "bbox": [422, 218, 25, 18], "area": 323}, {"id": 5393234, "category_id": 1, "iscrowd": 0, "bbox": [135, 226, 44, 58], "area": 754}, {"id": 1776155, "category_id": 1, "iscrowd": 0, "bbox": [378, 232, 92, 243], "area": 4555}, {"id": 5261885, "category_id": 1, "iscrowd": 0, "bbox": [15, 233, 224, 289], "area": 15197}, {"id": 3157830, "category_id": 4, "iscrowd": 0, "bbox": [20, 299, 178, 329], "area": 39799}, {"id": 2697522, "category_id": 4, "iscrowd": 0, "bbox": [374, 271, 106, 229], "area": 11857}, {"id": 2237994, "category_id": 4, "iscrowd": 0, "bbox": [337, 268, 64, 177], "area": 3914}, {"id": 7440012, "category_id": 95, "iscrowd": 0, "bbox": [0, 232, 388, 162], "area": 17625}, {"id": 3884875, "category_id": 149, "iscrowd": 0, "bbox": [0, 323, 480, 317], "area": 63839}, {"id": 14538439, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 240], "area": 102401}], "file_name": "000000143556.png", "image_id": 143556}, {"segments_info": [{"id": 4735304, "category_id": 1, "iscrowd": 0, "bbox": [182, 150, 27, 55], "area": 925}, {"id": 8289930, "category_id": 1, "iscrowd": 0, "bbox": [237, 138, 24, 26], "area": 292}, {"id": 5469049, "category_id": 1, "iscrowd": 0, "bbox": [230, 170, 183, 254], "area": 12089}, {"id": 6578278, "category_id": 1, "iscrowd": 0, "bbox": [174, 130, 26, 36], "area": 458}, {"id": 8018261, "category_id": 1, "iscrowd": 0, "bbox": [481, 220, 31, 25], "area": 389}, {"id": 3960983, "category_id": 1, "iscrowd": 0, "bbox": [154, 277, 52, 34], "area": 871}, {"id": 4739174, "category_id": 1, "iscrowd": 0, "bbox": [426, 151, 35, 59], "area": 815}, {"id": 8815243, "category_id": 1, "iscrowd": 0, "bbox": [119, 142, 30, 53], "area": 739}, {"id": 7105643, "category_id": 1, "iscrowd": 0, "bbox": [238, 152, 27, 60], "area": 1095}, {"id": 4735296, "category_id": 1, "iscrowd": 0, "bbox": [405, 140, 28, 47], "area": 729}, {"id": 5788797, "category_id": 1, "iscrowd": 0, "bbox": [203, 137, 22, 34], "area": 371}, {"id": 7504286, "category_id": 1, "iscrowd": 0, "bbox": [427, 37, 21, 30], "area": 328}, {"id": 10129808, "category_id": 1, "iscrowd": 0, "bbox": [559, 51, 27, 36], "area": 618}, {"id": 4868174, "category_id": 1, "iscrowd": 1, "bbox": [55, 146, 536, 233], "area": 5676}, {"id": 6640719, "category_id": 43, "iscrowd": 0, "bbox": [150, 200, 98, 50], "area": 1900}, {"id": 6838858, "category_id": 138, "iscrowd": 0, "bbox": [17, 304, 502, 120], "area": 22723}, {"id": 7237486, "category_id": 161, "iscrowd": 0, "bbox": [235, 0, 139, 214], "area": 16304}, {"id": 7170156, "category_id": 185, "iscrowd": 0, "bbox": [19, 149, 496, 63], "area": 3558}, {"id": 10263683, "category_id": 190, "iscrowd": 0, "bbox": [61, 350, 579, 74], "area": 31967}, {"id": 8611146, "category_id": 199, "iscrowd": 0, "bbox": [50, 218, 590, 162], "area": 35704}], "file_name": "000000143572.png", "image_id": 143572}, {"segments_info": [{"id": 2564901, "category_id": 1, "iscrowd": 0, "bbox": [450, 156, 87, 139], "area": 5803}, {"id": 5913896, "category_id": 6, "iscrowd": 0, "bbox": [0, 0, 639, 472], "area": 220376}, {"id": 2566185, "category_id": 149, "iscrowd": 0, "bbox": [182, 328, 458, 152], "area": 30259}, {"id": 11307372, "category_id": 187, "iscrowd": 0, "bbox": [15, 0, 625, 176], "area": 40758}], "file_name": "000000143931.png", "image_id": 143931}, {"segments_info": [{"id": 6643826, "category_id": 1, "iscrowd": 0, "bbox": [310, 187, 119, 120], "area": 6063}, {"id": 4210242, "category_id": 1, "iscrowd": 0, "bbox": [483, 179, 115, 167], "area": 9265}, {"id": 4606552, "category_id": 1, "iscrowd": 0, "bbox": [117, 63, 42, 79], "area": 1961}, {"id": 8615801, "category_id": 1, "iscrowd": 0, "bbox": [83, 16, 68, 107], "area": 3929}, {"id": 5461339, "category_id": 1, "iscrowd": 0, "bbox": [132, 158, 98, 194], "area": 14470}, {"id": 7762299, "category_id": 1, "iscrowd": 0, "bbox": [251, 239, 102, 113], "area": 8158}, {"id": 7304327, "category_id": 1, "iscrowd": 0, "bbox": [57, 153, 77, 131], "area": 6866}, {"id": 6052960, "category_id": 1, "iscrowd": 0, "bbox": [161, 73, 144, 81], "area": 4475}, {"id": 5726315, "category_id": 1, "iscrowd": 0, "bbox": [448, 268, 114, 88], "area": 4882}, {"id": 3618361, "category_id": 1, "iscrowd": 0, "bbox": [1, 141, 81, 185], "area": 9438}, {"id": 4342335, "category_id": 1, "iscrowd": 0, "bbox": [585, 126, 54, 226], "area": 8804}, {"id": 4278612, "category_id": 1, "iscrowd": 0, "bbox": [232, 24, 76, 71], "area": 2407}, {"id": 5266807, "category_id": 1, "iscrowd": 0, "bbox": [23, 124, 75, 96], "area": 2247}, {"id": 7175290, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 577, 356], "area": 54694}, {"id": 5136498, "category_id": 18, "iscrowd": 0, "bbox": [150, 87, 83, 62], "area": 1716}, {"id": 6452858, "category_id": 18, "iscrowd": 0, "bbox": [233, 3, 56, 39], "area": 1206}, {"id": 5988197, "category_id": 27, "iscrowd": 0, "bbox": [188, 34, 22, 27], "area": 247}, {"id": 4804692, "category_id": 27, "iscrowd": 0, "bbox": [131, 119, 61, 40], "area": 1778}, {"id": 12707300, "category_id": 28, "iscrowd": 0, "bbox": [296, 8, 109, 93], "area": 3991}, {"id": 3701486, "category_id": 28, "iscrowd": 0, "bbox": [300, 11, 312, 258], "area": 48918}, {"id": 4211526, "category_id": 31, "iscrowd": 0, "bbox": [367, 288, 66, 60], "area": 2312}, {"id": 14732773, "category_id": 93, "iscrowd": 0, "bbox": [351, 301, 38, 33], "area": 633}, {"id": 4824198, "category_id": 193, "iscrowd": 0, "bbox": [0, 58, 640, 298], "area": 8680}], "file_name": "000000143961.png", "image_id": 143961}, {"segments_info": [{"id": 10595000, "category_id": 49, "iscrowd": 0, "bbox": [366, 127, 246, 197], "area": 23130}, {"id": 2238109, "category_id": 57, "iscrowd": 0, "bbox": [47, 411, 132, 201], "area": 5466}, {"id": 2573516, "category_id": 57, "iscrowd": 0, "bbox": [22, 8, 355, 508], "area": 22740}, {"id": 3167697, "category_id": 57, "iscrowd": 0, "bbox": [64, 115, 342, 407], "area": 18302}, {"id": 2906586, "category_id": 57, "iscrowd": 0, "bbox": [43, 28, 416, 422], "area": 19919}, {"id": 2896548, "category_id": 57, "iscrowd": 0, "bbox": [3, 45, 291, 476], "area": 17696}, {"id": 6984643, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 612, 603], "area": 212902}, {"id": 3480635, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 30753}, {"id": 3887752, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 556, 596], "area": 17392}], "file_name": "000000143998.png", "image_id": 143998}, {"segments_info": [{"id": 3225405, "category_id": 1, "iscrowd": 0, "bbox": [193, 0, 193, 181], "area": 6448}, {"id": 4478564, "category_id": 1, "iscrowd": 0, "bbox": [185, 19, 227, 349], "area": 22767}, {"id": 8423323, "category_id": 1, "iscrowd": 0, "bbox": [22, 89, 222, 267], "area": 25205}, {"id": 5067609, "category_id": 1, "iscrowd": 0, "bbox": [108, 2, 107, 159], "area": 7274}, {"id": 5264493, "category_id": 1, "iscrowd": 0, "bbox": [331, 0, 169, 340], "area": 28925}, {"id": 4407115, "category_id": 1, "iscrowd": 0, "bbox": [277, 1, 174, 188], "area": 4484}, {"id": 9539990, "category_id": 49, "iscrowd": 0, "bbox": [152, 255, 49, 10], "area": 156}, {"id": 10267313, "category_id": 51, "iscrowd": 0, "bbox": [372, 202, 55, 47], "area": 1526}, {"id": 6062485, "category_id": 61, "iscrowd": 0, "bbox": [179, 213, 111, 83], "area": 5408}, {"id": 1907783, "category_id": 62, "iscrowd": 0, "bbox": [369, 175, 101, 185], "area": 9150}, {"id": 13883866, "category_id": 67, "iscrowd": 0, "bbox": [126, 178, 249, 192], "area": 27505}, {"id": 2764079, "category_id": 75, "iscrowd": 0, "bbox": [362, 212, 35, 25], "area": 474}, {"id": 13353145, "category_id": 82, "iscrowd": 0, "bbox": [0, 143, 155, 228], "area": 13423}, {"id": 9674923, "category_id": 100, "iscrowd": 0, "bbox": [210, 183, 56, 20], "area": 166}, {"id": 6126473, "category_id": 118, "iscrowd": 0, "bbox": [317, 279, 54, 96], "area": 1393}, {"id": 7963010, "category_id": 156, "iscrowd": 0, "bbox": [52, 0, 133, 68], "area": 3372}, {"id": 3885649, "category_id": 188, "iscrowd": 0, "bbox": [282, 21, 55, 79], "area": 1021}, {"id": 12896455, "category_id": 189, "iscrowd": 0, "bbox": [140, 363, 189, 12], "area": 936}, {"id": 1908771, "category_id": 190, "iscrowd": 0, "bbox": [364, 222, 119, 153], "area": 3434}, {"id": 8882570, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 201, 241], "area": 13829}], "file_name": "000000144003.png", "image_id": 144003}, {"segments_info": [{"id": 4010839, "category_id": 1, "iscrowd": 0, "bbox": [284, 221, 35, 31], "area": 607}, {"id": 7368063, "category_id": 5, "iscrowd": 0, "bbox": [25, 189, 556, 151], "area": 23428}, {"id": 16445156, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 600, 400], "area": 215486}], "file_name": "000000144114.png", "image_id": 144114}, {"segments_info": [{"id": 8219490, "category_id": 1, "iscrowd": 0, "bbox": [509, 68, 69, 110], "area": 2524}, {"id": 4338990, "category_id": 1, "iscrowd": 0, "bbox": [606, 68, 34, 188], "area": 2769}, {"id": 5132395, "category_id": 4, "iscrowd": 0, "bbox": [45, 70, 537, 319], "area": 108983}, {"id": 5786686, "category_id": 6, "iscrowd": 0, "bbox": [300, 51, 77, 99], "area": 5167}, {"id": 6310455, "category_id": 8, "iscrowd": 0, "bbox": [356, 56, 139, 118], "area": 10777}, {"id": 9607578, "category_id": 8, "iscrowd": 0, "bbox": [0, 1, 320, 231], "area": 42820}, {"id": 4867131, "category_id": 8, "iscrowd": 0, "bbox": [574, 142, 53, 37], "area": 911}, {"id": 5001038, "category_id": 149, "iscrowd": 0, "bbox": [0, 155, 640, 272], "area": 61446}, {"id": 16051950, "category_id": 187, "iscrowd": 0, "bbox": [221, 0, 419, 165], "area": 27980}], "file_name": "000000144300.png", "image_id": 144300}, {"segments_info": [{"id": 3225676, "category_id": 1, "iscrowd": 0, "bbox": [117, 123, 187, 344], "area": 24462}, {"id": 4011831, "category_id": 2, "iscrowd": 0, "bbox": [75, 281, 278, 345], "area": 46053}, {"id": 14934744, "category_id": 3, "iscrowd": 0, "bbox": [0, 128, 62, 68], "area": 2082}, {"id": 11117213, "category_id": 3, "iscrowd": 0, "bbox": [4, 133, 269, 139], "area": 11799}, {"id": 14143180, "category_id": 3, "iscrowd": 0, "bbox": [304, 138, 98, 103], "area": 7974}, {"id": 15396592, "category_id": 3, "iscrowd": 0, "bbox": [211, 104, 165, 110], "area": 8849}, {"id": 4734522, "category_id": 31, "iscrowd": 0, "bbox": [221, 255, 114, 72], "area": 5013}, {"id": 525875, "category_id": 77, "iscrowd": 0, "bbox": [186, 195, 16, 39], "area": 417}, {"id": 13748164, "category_id": 130, "iscrowd": 0, "bbox": [338, 457, 21, 17], "area": 195}, {"id": 14012880, "category_id": 149, "iscrowd": 0, "bbox": [0, 188, 426, 237], "area": 16309}, {"id": 2632497, "category_id": 171, "iscrowd": 0, "bbox": [0, 310, 426, 303], "area": 22006}, {"id": 5336930, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 426, 475], "area": 27877}, {"id": 7234660, "category_id": 191, "iscrowd": 0, "bbox": [0, 404, 426, 236], "area": 44069}, {"id": 4945007, "category_id": 193, "iscrowd": 0, "bbox": [322, 419, 104, 74], "area": 3642}, {"id": 13618126, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 404, 150], "area": 35173}], "file_name": "000000144333.png", "image_id": 144333}, {"segments_info": [{"id": 6971734, "category_id": 3, "iscrowd": 0, "bbox": [397, 371, 50, 26], "area": 919}, {"id": 7103315, "category_id": 8, "iscrowd": 0, "bbox": [495, 369, 53, 36], "area": 1369}, {"id": 6642764, "category_id": 10, "iscrowd": 0, "bbox": [167, 156, 22, 42], "area": 681}, {"id": 5327932, "category_id": 10, "iscrowd": 0, "bbox": [477, 236, 24, 56], "area": 1199}, {"id": 2501458, "category_id": 10, "iscrowd": 0, "bbox": [477, 308, 23, 18], "area": 408}, {"id": 9207661, "category_id": 10, "iscrowd": 0, "bbox": [269, 121, 32, 63], "area": 1501}, {"id": 5329738, "category_id": 128, "iscrowd": 0, "bbox": [0, 263, 449, 121], "area": 17256}, {"id": 5393987, "category_id": 149, "iscrowd": 0, "bbox": [0, 376, 576, 104], "area": 42349}, {"id": 5000256, "category_id": 184, "iscrowd": 0, "bbox": [117, 55, 523, 345], "area": 57625}, {"id": 13352102, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 363], "area": 149225}, {"id": 5788745, "category_id": 191, "iscrowd": 0, "bbox": [19, 371, 621, 109], "area": 7723}, {"id": 4804418, "category_id": 193, "iscrowd": 0, "bbox": [0, 354, 394, 46], "area": 6296}, {"id": 4670006, "category_id": 197, "iscrowd": 0, "bbox": [0, 248, 92, 82], "area": 4659}], "file_name": "000000144706.png", "image_id": 144706}, {"segments_info": [{"id": 7101556, "category_id": 1, "iscrowd": 0, "bbox": [244, 340, 131, 151], "area": 10037}, {"id": 5918543, "category_id": 107, "iscrowd": 0, "bbox": [0, 168, 375, 332], "area": 64774}, {"id": 5531498, "category_id": 196, "iscrowd": 0, "bbox": [163, 165, 145, 118], "area": 12684}, {"id": 11448257, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 232], "area": 18859}], "file_name": "000000144784.png", "image_id": 144784}, {"segments_info": [{"id": 818558, "category_id": 44, "iscrowd": 0, "bbox": [387, 164, 38, 87], "area": 2116}, {"id": 7712711, "category_id": 47, "iscrowd": 0, "bbox": [182, 189, 49, 77], "area": 2785}, {"id": 8892865, "category_id": 70, "iscrowd": 0, "bbox": [156, 458, 269, 174], "area": 40022}, {"id": 3694466, "category_id": 84, "iscrowd": 0, "bbox": [33, 396, 92, 100], "area": 4734}, {"id": 1258324, "category_id": 190, "iscrowd": 0, "bbox": [0, 365, 425, 275], "area": 51552}, {"id": 6462391, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 425, 157], "area": 56141}, {"id": 3371158, "category_id": 200, "iscrowd": 0, "bbox": [0, 554, 109, 86], "area": 8204}], "file_name": "000000144798.png", "image_id": 144798}, {"segments_info": [{"id": 4934982, "category_id": 1, "iscrowd": 0, "bbox": [528, 200, 6, 10], "area": 37}, {"id": 3491399, "category_id": 1, "iscrowd": 0, "bbox": [502, 220, 4, 4], "area": 11}, {"id": 2702657, "category_id": 9, "iscrowd": 0, "bbox": [478, 184, 79, 49], "area": 1128}, {"id": 8487034, "category_id": 95, "iscrowd": 0, "bbox": [0, 173, 195, 20], "area": 3095}, {"id": 8883079, "category_id": 155, "iscrowd": 0, "bbox": [0, 185, 640, 240], "area": 150612}, {"id": 10394776, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 179], "area": 103337}, {"id": 7302759, "category_id": 192, "iscrowd": 0, "bbox": [190, 143, 450, 48], "area": 13710}], "file_name": "000000144932.png", "image_id": 144932}, {"segments_info": [{"id": 1451602, "category_id": 1, "iscrowd": 0, "bbox": [79, 175, 319, 458], "area": 71881}, {"id": 5131328, "category_id": 63, "iscrowd": 0, "bbox": [0, 306, 145, 77], "area": 5724}, {"id": 1579289, "category_id": 63, "iscrowd": 0, "bbox": [0, 319, 426, 321], "area": 56985}, {"id": 6846845, "category_id": 75, "iscrowd": 0, "bbox": [326, 387, 27, 41], "area": 725}, {"id": 5793134, "category_id": 75, "iscrowd": 0, "bbox": [89, 433, 67, 59], "area": 1572}, {"id": 8559516, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 426, 338], "area": 119842}], "file_name": "000000144984.png", "image_id": 144984}, {"segments_info": [{"id": 6439741, "category_id": 1, "iscrowd": 0, "bbox": [115, 196, 28, 32], "area": 402}, {"id": 2900865, "category_id": 1, "iscrowd": 0, "bbox": [64, 199, 5, 11], "area": 29}, {"id": 1578266, "category_id": 1, "iscrowd": 0, "bbox": [218, 202, 19, 68], "area": 727}, {"id": 8150089, "category_id": 1, "iscrowd": 0, "bbox": [0, 193, 29, 84], "area": 1271}, {"id": 5262425, "category_id": 1, "iscrowd": 0, "bbox": [140, 195, 18, 29], "area": 286}, {"id": 2630180, "category_id": 1, "iscrowd": 0, "bbox": [259, 193, 21, 83], "area": 600}, {"id": 6771782, "category_id": 1, "iscrowd": 0, "bbox": [166, 212, 18, 62], "area": 658}, {"id": 4933719, "category_id": 1, "iscrowd": 0, "bbox": [258, 181, 18, 22], "area": 219}, {"id": 2111113, "category_id": 1, "iscrowd": 0, "bbox": [26, 200, 3, 8], "area": 16}, {"id": 3418930, "category_id": 1, "iscrowd": 0, "bbox": [87, 218, 16, 60], "area": 560}, {"id": 2630182, "category_id": 1, "iscrowd": 0, "bbox": [203, 191, 17, 45], "area": 355}, {"id": 5260102, "category_id": 1, "iscrowd": 0, "bbox": [0, 243, 42, 60], "area": 1260}, {"id": 3552857, "category_id": 1, "iscrowd": 0, "bbox": [47, 240, 47, 59], "area": 1647}, {"id": 4275265, "category_id": 1, "iscrowd": 1, "bbox": [27, 201, 210, 69], "area": 1992}, {"id": 1785984, "category_id": 88, "iscrowd": 0, "bbox": [531, 210, 109, 147], "area": 10298}, {"id": 2572684, "category_id": 88, "iscrowd": 0, "bbox": [569, 107, 46, 54], "area": 1392}, {"id": 2971789, "category_id": 88, "iscrowd": 0, "bbox": [529, 148, 49, 69], "area": 2050}, {"id": 2641272, "category_id": 88, "iscrowd": 0, "bbox": [557, 147, 56, 63], "area": 1325}, {"id": 8943984, "category_id": 166, "iscrowd": 0, "bbox": [0, 155, 229, 89], "area": 3219}, {"id": 4215383, "category_id": 184, "iscrowd": 0, "bbox": [0, 32, 640, 229], "area": 11736}, {"id": 11572097, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 606, 140], "area": 34645}, {"id": 5854297, "category_id": 191, "iscrowd": 0, "bbox": [0, 238, 319, 123], "area": 26316}, {"id": 10461349, "category_id": 197, "iscrowd": 0, "bbox": [29, 59, 424, 180], "area": 36042}], "file_name": "000000145020.png", "image_id": 145020}, {"segments_info": [{"id": 4340274, "category_id": 85, "iscrowd": 0, "bbox": [295, 49, 317, 425], "area": 98749}, {"id": 4345411, "category_id": 184, "iscrowd": 0, "bbox": [123, 87, 517, 393], "area": 54165}, {"id": 16568735, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 289], "area": 113869}, {"id": 13685699, "category_id": 197, "iscrowd": 0, "bbox": [0, 251, 297, 229], "area": 39819}], "file_name": "000000145591.png", "image_id": 145591}, {"segments_info": [{"id": 4801359, "category_id": 1, "iscrowd": 0, "bbox": [316, 10, 156, 209], "area": 18664}, {"id": 5330277, "category_id": 1, "iscrowd": 0, "bbox": [0, 65, 188, 415], "area": 39741}, {"id": 3818327, "category_id": 1, "iscrowd": 0, "bbox": [38, 13, 123, 197], "area": 16657}, {"id": 3884886, "category_id": 1, "iscrowd": 0, "bbox": [356, 123, 284, 357], "area": 54615}, {"id": 4147293, "category_id": 1, "iscrowd": 0, "bbox": [477, 33, 163, 232], "area": 13251}, {"id": 1447968, "category_id": 31, "iscrowd": 0, "bbox": [167, 355, 97, 125], "area": 8835}, {"id": 1515055, "category_id": 31, "iscrowd": 0, "bbox": [445, 157, 52, 61], "area": 2008}, {"id": 1710112, "category_id": 44, "iscrowd": 0, "bbox": [300, 304, 55, 57], "area": 1434}, {"id": 8029366, "category_id": 44, "iscrowd": 0, "bbox": [99, 220, 80, 37], "area": 842}, {"id": 2961984, "category_id": 44, "iscrowd": 0, "bbox": [107, 232, 72, 34], "area": 1058}, {"id": 4804943, "category_id": 46, "iscrowd": 0, "bbox": [296, 160, 15, 19], "area": 243}, {"id": 1779257, "category_id": 47, "iscrowd": 0, "bbox": [299, 270, 26, 33], "area": 677}, {"id": 2631494, "category_id": 47, "iscrowd": 0, "bbox": [359, 325, 24, 37], "area": 693}, {"id": 7978456, "category_id": 55, "iscrowd": 0, "bbox": [388, 255, 7, 4], "area": 18}, {"id": 2656169, "category_id": 55, "iscrowd": 0, "bbox": [371, 282, 14, 15], "area": 134}, {"id": 1462892, "category_id": 55, "iscrowd": 0, "bbox": [377, 291, 12, 10], "area": 79}, {"id": 1799055, "category_id": 55, "iscrowd": 0, "bbox": [385, 286, 11, 9], "area": 68}, {"id": 2593454, "category_id": 55, "iscrowd": 0, "bbox": [382, 279, 12, 10], "area": 75}, {"id": 4083294, "category_id": 55, "iscrowd": 0, "bbox": [378, 300, 16, 18], "area": 204}, {"id": 3552868, "category_id": 93, "iscrowd": 0, "bbox": [143, 143, 353, 337], "area": 26431}, {"id": 4142648, "category_id": 100, "iscrowd": 0, "bbox": [193, 160, 20, 19], "area": 275}, {"id": 3032642, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 78946}, {"id": 4018277, "category_id": 194, "iscrowd": 0, "bbox": [460, 425, 30, 21], "area": 355}, {"id": 9409953, "category_id": 195, "iscrowd": 0, "bbox": [187, 177, 259, 99], "area": 1330}, {"id": 5858950, "category_id": 196, "iscrowd": 0, "bbox": [87, 180, 361, 192], "area": 32556}], "file_name": "000000145597.png", "image_id": 145597}, {"segments_info": [{"id": 3092271, "category_id": 1, "iscrowd": 0, "bbox": [304, 93, 117, 163], "area": 7146}, {"id": 2697513, "category_id": 1, "iscrowd": 0, "bbox": [514, 68, 10, 52], "area": 234}, {"id": 3487029, "category_id": 1, "iscrowd": 0, "bbox": [521, 68, 13, 55], "area": 511}, {"id": 6316128, "category_id": 1, "iscrowd": 0, "bbox": [495, 69, 17, 52], "area": 581}, {"id": 3552822, "category_id": 4, "iscrowd": 0, "bbox": [301, 167, 131, 157], "area": 9288}, {"id": 6184542, "category_id": 184, "iscrowd": 0, "bbox": [11, 0, 618, 98], "area": 24947}, {"id": 14935011, "category_id": 187, "iscrowd": 0, "bbox": [11, 11, 618, 55], "area": 14736}, {"id": 7171437, "category_id": 193, "iscrowd": 0, "bbox": [0, 35, 629, 390], "area": 176140}, {"id": 10987431, "category_id": 194, "iscrowd": 0, "bbox": [11, 179, 618, 150], "area": 22529}], "file_name": "000000145620.png", "image_id": 145620}, {"segments_info": [{"id": 1843252, "category_id": 1, "iscrowd": 0, "bbox": [1, 278, 197, 264], "area": 35479}, {"id": 2501950, "category_id": 41, "iscrowd": 0, "bbox": [383, 263, 46, 33], "area": 939}, {"id": 78912, "category_id": 184, "iscrowd": 0, "bbox": [77, 14, 278, 122], "area": 20410}, {"id": 2045000, "category_id": 191, "iscrowd": 0, "bbox": [0, 235, 429, 405], "area": 128143}, {"id": 71948, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 408, 128], "area": 21817}, {"id": 135477, "category_id": 194, "iscrowd": 0, "bbox": [0, 43, 429, 203], "area": 51044}, {"id": 3099747, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 429, 275], "area": 16570}], "file_name": "000000145665.png", "image_id": 145665}, {"segments_info": [{"id": 3224889, "category_id": 18, "iscrowd": 0, "bbox": [4, 0, 600, 340], "area": 123085}, {"id": 5924960, "category_id": 44, "iscrowd": 0, "bbox": [0, 166, 97, 138], "area": 11398}, {"id": 7433069, "category_id": 44, "iscrowd": 0, "bbox": [311, 203, 329, 277], "area": 61467}, {"id": 6714742, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 143], "area": 18783}, {"id": 10988974, "category_id": 200, "iscrowd": 0, "bbox": [0, 120, 640, 360], "area": 81353}], "file_name": "000000145781.png", "image_id": 145781}, {"segments_info": [{"id": 4869984, "category_id": 1, "iscrowd": 0, "bbox": [6, 110, 187, 402], "area": 49333}, {"id": 1188680, "category_id": 1, "iscrowd": 0, "bbox": [569, 172, 71, 235], "area": 9898}, {"id": 3231847, "category_id": 1, "iscrowd": 0, "bbox": [0, 372, 35, 139], "area": 2443}, {"id": 7107456, "category_id": 1, "iscrowd": 0, "bbox": [157, 18, 226, 494], "area": 77406}, {"id": 4278889, "category_id": 1, "iscrowd": 0, "bbox": [108, 122, 84, 109], "area": 4983}, {"id": 1252905, "category_id": 44, "iscrowd": 0, "bbox": [397, 221, 33, 15], "area": 350}, {"id": 1976376, "category_id": 44, "iscrowd": 0, "bbox": [453, 249, 14, 60], "area": 683}, {"id": 2240064, "category_id": 44, "iscrowd": 0, "bbox": [484, 245, 15, 62], "area": 722}, {"id": 791338, "category_id": 44, "iscrowd": 0, "bbox": [442, 173, 13, 56], "area": 552}, {"id": 1580589, "category_id": 44, "iscrowd": 0, "bbox": [491, 341, 16, 53], "area": 394}, {"id": 2833488, "category_id": 44, "iscrowd": 0, "bbox": [476, 246, 11, 62], "area": 509}, {"id": 725530, "category_id": 44, "iscrowd": 0, "bbox": [398, 185, 30, 16], "area": 300}, {"id": 1123385, "category_id": 44, "iscrowd": 0, "bbox": [446, 339, 12, 46], "area": 402}, {"id": 989478, "category_id": 44, "iscrowd": 0, "bbox": [398, 257, 34, 16], "area": 332}, {"id": 989993, "category_id": 44, "iscrowd": 0, "bbox": [467, 338, 13, 51], "area": 497}, {"id": 593948, "category_id": 44, "iscrowd": 0, "bbox": [399, 203, 31, 16], "area": 288}, {"id": 2306112, "category_id": 44, "iscrowd": 0, "bbox": [444, 251, 11, 56], "area": 413}, {"id": 1777446, "category_id": 44, "iscrowd": 0, "bbox": [467, 249, 10, 58], "area": 470}, {"id": 1582907, "category_id": 44, "iscrowd": 1, "bbox": [145, 48, 482, 341], "area": 18080}, {"id": 3488588, "category_id": 46, "iscrowd": 0, "bbox": [133, 210, 33, 89], "area": 705}, {"id": 4223138, "category_id": 46, "iscrowd": 0, "bbox": [329, 144, 43, 119], "area": 783}, {"id": 2703455, "category_id": 46, "iscrowd": 0, "bbox": [487, 286, 116, 134], "area": 10652}, {"id": 1783910, "category_id": 107, "iscrowd": 0, "bbox": [188, 366, 452, 146], "area": 33079}, {"id": 3698308, "category_id": 130, "iscrowd": 0, "bbox": [0, 35, 209, 198], "area": 2580}, {"id": 3034732, "category_id": 156, "iscrowd": 0, "bbox": [364, 239, 225, 135], "area": 761}, {"id": 1715533, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 405, 221], "area": 34153}, {"id": 3561843, "category_id": 188, "iscrowd": 0, "bbox": [361, 119, 263, 284], "area": 20509}, {"id": 1457533, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 280], "area": 32869}], "file_name": "000000146155.png", "image_id": 146155}, {"segments_info": [{"id": 3227207, "category_id": 1, "iscrowd": 0, "bbox": [178, 94, 137, 353], "area": 26321}, {"id": 9614270, "category_id": 1, "iscrowd": 0, "bbox": [253, 114, 134, 496], "area": 45345}, {"id": 7501961, "category_id": 1, "iscrowd": 0, "bbox": [144, 143, 42, 66], "area": 781}, {"id": 4015457, "category_id": 1, "iscrowd": 0, "bbox": [156, 134, 61, 82], "area": 2440}, {"id": 12245210, "category_id": 32, "iscrowd": 0, "bbox": [270, 185, 26, 79], "area": 1109}, {"id": 11385539, "category_id": 46, "iscrowd": 0, "bbox": [104, 221, 11, 40], "area": 290}, {"id": 4741218, "category_id": 49, "iscrowd": 0, "bbox": [192, 259, 56, 21], "area": 190}, {"id": 9742274, "category_id": 61, "iscrowd": 0, "bbox": [22, 262, 144, 160], "area": 15529}, {"id": 4739941, "category_id": 62, "iscrowd": 0, "bbox": [0, 179, 43, 62], "area": 1108}, {"id": 7174021, "category_id": 62, "iscrowd": 0, "bbox": [69, 179, 81, 68], "area": 3054}, {"id": 7574435, "category_id": 67, "iscrowd": 0, "bbox": [2, 375, 273, 234], "area": 52242}, {"id": 13292761, "category_id": 109, "iscrowd": 0, "bbox": [0, 15, 388, 240], "area": 43040}, {"id": 6847923, "category_id": 119, "iscrowd": 0, "bbox": [0, 210, 189, 68], "area": 6734}, {"id": 9478058, "category_id": 199, "iscrowd": 0, "bbox": [27, 16, 361, 228], "area": 12142}], "file_name": "000000146358.png", "image_id": 146358}, {"segments_info": [{"id": 4146503, "category_id": 28, "iscrowd": 0, "bbox": [218, 84, 256, 146], "area": 11850}, {"id": 2893856, "category_id": 62, "iscrowd": 0, "bbox": [105, 311, 116, 64], "area": 3235}, {"id": 2236961, "category_id": 62, "iscrowd": 0, "bbox": [213, 220, 204, 93], "area": 7733}, {"id": 3819599, "category_id": 154, "iscrowd": 0, "bbox": [0, 197, 500, 178], "area": 38542}, {"id": 8484966, "category_id": 155, "iscrowd": 0, "bbox": [0, 78, 500, 179], "area": 54426}, {"id": 12434347, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 91], "area": 35891}, {"id": 1184015, "category_id": 198, "iscrowd": 0, "bbox": [71, 62, 429, 313], "area": 31761}], "file_name": "000000146363.png", "image_id": 146363}, {"segments_info": [{"id": 5000541, "category_id": 1, "iscrowd": 0, "bbox": [178, 0, 157, 263], "area": 22799}, {"id": 5000039, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 261, 362], "area": 48842}, {"id": 4079693, "category_id": 44, "iscrowd": 0, "bbox": [349, 43, 22, 69], "area": 1132}, {"id": 7103598, "category_id": 44, "iscrowd": 0, "bbox": [500, 88, 10, 33], "area": 248}, {"id": 11378838, "category_id": 44, "iscrowd": 0, "bbox": [508, 59, 35, 66], "area": 1810}, {"id": 3289145, "category_id": 44, "iscrowd": 0, "bbox": [201, 43, 10, 20], "area": 115}, {"id": 6777210, "category_id": 44, "iscrowd": 0, "bbox": [541, 190, 57, 100], "area": 4451}, {"id": 9999754, "category_id": 44, "iscrowd": 0, "bbox": [581, 79, 19, 54], "area": 803}, {"id": 3488623, "category_id": 51, "iscrowd": 0, "bbox": [572, 399, 68, 81], "area": 4505}, {"id": 9083315, "category_id": 59, "iscrowd": 0, "bbox": [322, 276, 127, 50], "area": 4032}, {"id": 9016234, "category_id": 59, "iscrowd": 0, "bbox": [386, 244, 137, 50], "area": 4938}, {"id": 5330797, "category_id": 62, "iscrowd": 0, "bbox": [1, 287, 98, 92], "area": 3634}, {"id": 6976905, "category_id": 67, "iscrowd": 0, "bbox": [0, 217, 622, 257], "area": 82261}, {"id": 9670285, "category_id": 107, "iscrowd": 0, "bbox": [323, 96, 317, 72], "area": 8900}, {"id": 1315626, "category_id": 118, "iscrowd": 0, "bbox": [0, 345, 60, 55], "area": 1698}, {"id": 1906464, "category_id": 168, "iscrowd": 0, "bbox": [0, 252, 64, 121], "area": 3543}, {"id": 4933453, "category_id": 176, "iscrowd": 0, "bbox": [196, 14, 338, 100], "area": 13584}, {"id": 15855079, "category_id": 181, "iscrowd": 0, "bbox": [531, 0, 109, 110], "area": 10537}, {"id": 9080731, "category_id": 188, "iscrowd": 0, "bbox": [195, 0, 445, 274], "area": 33791}, {"id": 6517127, "category_id": 189, "iscrowd": 0, "bbox": [0, 331, 604, 149], "area": 3220}, {"id": 8024433, "category_id": 195, "iscrowd": 0, "bbox": [439, 56, 80, 51], "area": 2079}, {"id": 11446443, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 223, 270], "area": 13626}], "file_name": "000000146457.png", "image_id": 146457}, {"segments_info": [{"id": 3878714, "category_id": 44, "iscrowd": 0, "bbox": [181, 4, 110, 319], "area": 26566}, {"id": 3290171, "category_id": 46, "iscrowd": 0, "bbox": [1, 80, 202, 330], "area": 40954}, {"id": 3223345, "category_id": 46, "iscrowd": 0, "bbox": [70, 0, 126, 171], "area": 11408}, {"id": 3892092, "category_id": 59, "iscrowd": 0, "bbox": [318, 145, 309, 117], "area": 23961}, {"id": 5331815, "category_id": 67, "iscrowd": 0, "bbox": [2, 2, 638, 478], "area": 129888}, {"id": 789258, "category_id": 77, "iscrowd": 0, "bbox": [1, 280, 87, 136], "area": 7232}, {"id": 1318958, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 45345}, {"id": 724496, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 21666}], "file_name": "000000146489.png", "image_id": 146489}, {"segments_info": [{"id": 9211533, "category_id": 3, "iscrowd": 0, "bbox": [107, 303, 19, 10], "area": 127}, {"id": 9343374, "category_id": 3, "iscrowd": 0, "bbox": [100, 275, 9, 3], "area": 18}, {"id": 7170699, "category_id": 3, "iscrowd": 0, "bbox": [131, 272, 14, 5], "area": 53}, {"id": 8158324, "category_id": 3, "iscrowd": 0, "bbox": [109, 279, 18, 8], "area": 98}, {"id": 9146513, "category_id": 3, "iscrowd": 0, "bbox": [113, 275, 15, 5], "area": 56}, {"id": 5331805, "category_id": 3, "iscrowd": 0, "bbox": [130, 298, 8, 8], "area": 49}, {"id": 7569539, "category_id": 125, "iscrowd": 0, "bbox": [176, 303, 464, 177], "area": 61081}, {"id": 15724526, "category_id": 130, "iscrowd": 0, "bbox": [216, 144, 19, 18], "area": 342}, {"id": 7436150, "category_id": 149, "iscrowd": 0, "bbox": [106, 265, 40, 22], "area": 446}, {"id": 6185780, "category_id": 151, "iscrowd": 0, "bbox": [412, 229, 72, 20], "area": 1125}, {"id": 3557953, "category_id": 184, "iscrowd": 0, "bbox": [0, 86, 640, 259], "area": 29665}, {"id": 5004127, "category_id": 185, "iscrowd": 0, "bbox": [373, 218, 267, 95], "area": 15764}, {"id": 16316664, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 239], "area": 93016}, {"id": 5993077, "category_id": 191, "iscrowd": 0, "bbox": [361, 287, 279, 50], "area": 2401}, {"id": 4216677, "category_id": 193, "iscrowd": 0, "bbox": [0, 284, 640, 196], "area": 43942}, {"id": 9212820, "category_id": 197, "iscrowd": 0, "bbox": [0, 124, 640, 153], "area": 9773}, {"id": 7108983, "category_id": 199, "iscrowd": 0, "bbox": [181, 264, 194, 50], "area": 4132}], "file_name": "000000146498.png", "image_id": 146498}, {"segments_info": [{"id": 4343369, "category_id": 1, "iscrowd": 0, "bbox": [163, 2, 45, 126], "area": 2269}, {"id": 5853518, "category_id": 1, "iscrowd": 0, "bbox": [27, 25, 51, 119], "area": 2889}, {"id": 3222817, "category_id": 1, "iscrowd": 0, "bbox": [541, 24, 42, 106], "area": 2576}, {"id": 7958887, "category_id": 1, "iscrowd": 0, "bbox": [64, 17, 45, 121], "area": 1669}, {"id": 1774872, "category_id": 1, "iscrowd": 0, "bbox": [478, 17, 39, 41], "area": 559}, {"id": 6052716, "category_id": 1, "iscrowd": 0, "bbox": [334, 25, 27, 60], "area": 793}, {"id": 5136493, "category_id": 1, "iscrowd": 0, "bbox": [149, 50, 22, 21], "area": 274}, {"id": 3882832, "category_id": 1, "iscrowd": 0, "bbox": [432, 14, 45, 70], "area": 1055}, {"id": 4803412, "category_id": 1, "iscrowd": 0, "bbox": [229, 5, 48, 192], "area": 4782}, {"id": 2564388, "category_id": 1, "iscrowd": 0, "bbox": [530, 9, 19, 114], "area": 1353}, {"id": 5261903, "category_id": 1, "iscrowd": 0, "bbox": [270, 38, 187, 268], "area": 30031}, {"id": 3488065, "category_id": 1, "iscrowd": 0, "bbox": [512, 15, 24, 105], "area": 1517}, {"id": 4075560, "category_id": 3, "iscrowd": 0, "bbox": [582, 3, 58, 97], "area": 4475}, {"id": 7368037, "category_id": 3, "iscrowd": 0, "bbox": [106, 0, 132, 54], "area": 3692}, {"id": 3880756, "category_id": 4, "iscrowd": 0, "bbox": [5, 49, 512, 479], "area": 119060}, {"id": 2828582, "category_id": 27, "iscrowd": 0, "bbox": [162, 18, 31, 38], "area": 831}, {"id": 2827296, "category_id": 31, "iscrowd": 0, "bbox": [71, 38, 27, 41], "area": 465}, {"id": 8289405, "category_id": 31, "iscrowd": 0, "bbox": [374, 23, 14, 38], "area": 200}, {"id": 6710627, "category_id": 31, "iscrowd": 0, "bbox": [349, 52, 30, 33], "area": 538}, {"id": 5461554, "category_id": 31, "iscrowd": 0, "bbox": [230, 108, 13, 24], "area": 165}, {"id": 6580860, "category_id": 31, "iscrowd": 0, "bbox": [21, 42, 32, 43], "area": 404}, {"id": 1380884, "category_id": 31, "iscrowd": 0, "bbox": [432, 51, 22, 33], "area": 373}, {"id": 3156262, "category_id": 31, "iscrowd": 0, "bbox": [412, 130, 32, 55], "area": 427}, {"id": 1450581, "category_id": 53, "iscrowd": 0, "bbox": [400, 31, 3, 3], "area": 9}, {"id": 9737630, "category_id": 100, "iscrowd": 0, "bbox": [471, 103, 17, 29], "area": 325}, {"id": 6182274, "category_id": 119, "iscrowd": 0, "bbox": [327, 37, 18, 22], "area": 173}, {"id": 9013635, "category_id": 149, "iscrowd": 0, "bbox": [0, 79, 640, 460], "area": 84924}, {"id": 4669492, "category_id": 184, "iscrowd": 0, "bbox": [511, 12, 62, 29], "area": 272}, {"id": 13683912, "category_id": 189, "iscrowd": 0, "bbox": [0, 63, 496, 476], "area": 17415}, {"id": 8234424, "category_id": 191, "iscrowd": 0, "bbox": [271, 132, 19, 17], "area": 169}, {"id": 3314594, "category_id": 195, "iscrowd": 0, "bbox": [67, 15, 240, 524], "area": 5976}, {"id": 3497290, "category_id": 196, "iscrowd": 0, "bbox": [95, 40, 522, 241], "area": 8742}, {"id": 8415569, "category_id": 199, "iscrowd": 0, "bbox": [192, 0, 418, 33], "area": 1784}], "file_name": "000000146667.png", "image_id": 146667}, {"segments_info": [{"id": 5919055, "category_id": 1, "iscrowd": 0, "bbox": [39, 152, 17, 52], "area": 710}, {"id": 4866627, "category_id": 1, "iscrowd": 0, "bbox": [11, 146, 20, 57], "area": 584}, {"id": 3746343, "category_id": 1, "iscrowd": 0, "bbox": [56, 148, 9, 47], "area": 234}, {"id": 4011315, "category_id": 1, "iscrowd": 0, "bbox": [25, 139, 21, 62], "area": 513}, {"id": 4142906, "category_id": 1, "iscrowd": 0, "bbox": [48, 143, 11, 40], "area": 130}, {"id": 4472902, "category_id": 1, "iscrowd": 0, "bbox": [63, 144, 5, 17], "area": 43}, {"id": 4343396, "category_id": 7, "iscrowd": 0, "bbox": [51, 81, 587, 196], "area": 83149}, {"id": 3947607, "category_id": 31, "iscrowd": 0, "bbox": [13, 158, 19, 25], "area": 110}, {"id": 3678807, "category_id": 31, "iscrowd": 0, "bbox": [56, 166, 8, 9], "area": 48}, {"id": 3950164, "category_id": 85, "iscrowd": 0, "bbox": [316, 17, 31, 42], "area": 1020}, {"id": 5196360, "category_id": 95, "iscrowd": 0, "bbox": [319, 10, 321, 95], "area": 21636}, {"id": 9079434, "category_id": 125, "iscrowd": 0, "bbox": [57, 168, 583, 141], "area": 28538}, {"id": 2170398, "category_id": 147, "iscrowd": 0, "bbox": [0, 214, 579, 95], "area": 8474}, {"id": 2960687, "category_id": 171, "iscrowd": 0, "bbox": [0, 199, 640, 82], "area": 4614}, {"id": 3619133, "category_id": 186, "iscrowd": 0, "bbox": [338, 0, 302, 43], "area": 7508}, {"id": 10329242, "category_id": 191, "iscrowd": 0, "bbox": [0, 183, 640, 56], "area": 2717}, {"id": 6052702, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 203], "area": 37312}], "file_name": "000000146825.png", "image_id": 146825}, {"segments_info": [{"id": 8089436, "category_id": 1, "iscrowd": 0, "bbox": [271, 147, 89, 213], "area": 7359}, {"id": 2367780, "category_id": 1, "iscrowd": 0, "bbox": [1, 248, 108, 156], "area": 6331}, {"id": 8218971, "category_id": 3, "iscrowd": 0, "bbox": [217, 144, 32, 8], "area": 144}, {"id": 7629155, "category_id": 3, "iscrowd": 0, "bbox": [126, 133, 89, 21], "area": 1205}, {"id": 9275787, "category_id": 41, "iscrowd": 0, "bbox": [294, 308, 74, 63], "area": 1352}, {"id": 8681598, "category_id": 128, "iscrowd": 0, "bbox": [610, 114, 30, 24], "area": 535}, {"id": 7435383, "category_id": 144, "iscrowd": 0, "bbox": [0, 157, 640, 271], "area": 130310}, {"id": 9536893, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 627, 171], "area": 37514}, {"id": 6055007, "category_id": 185, "iscrowd": 0, "bbox": [0, 47, 640, 279], "area": 59296}, {"id": 15456453, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 107], "area": 17110}, {"id": 6709347, "category_id": 192, "iscrowd": 0, "bbox": [608, 85, 32, 30], "area": 553}, {"id": 2170914, "category_id": 199, "iscrowd": 0, "bbox": [485, 218, 155, 65], "area": 7653}], "file_name": "000000146831.png", "image_id": 146831}, {"segments_info": [{"id": 5271971, "category_id": 61, "iscrowd": 0, "bbox": [0, 95, 104, 122], "area": 8742}, {"id": 4807807, "category_id": 67, "iscrowd": 0, "bbox": [1, 1, 639, 431], "area": 265481}, {"id": 4809601, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 19], "area": 977}], "file_name": "000000147205.png", "image_id": 147205}, {"segments_info": [{"id": 14013395, "category_id": 3, "iscrowd": 0, "bbox": [583, 104, 12, 27], "area": 218}, {"id": 10589071, "category_id": 3, "iscrowd": 0, "bbox": [43, 142, 115, 58], "area": 3859}, {"id": 6970970, "category_id": 3, "iscrowd": 0, "bbox": [599, 98, 41, 21], "area": 618}, {"id": 8287347, "category_id": 3, "iscrowd": 0, "bbox": [2, 156, 148, 137], "area": 14913}, {"id": 4737868, "category_id": 6, "iscrowd": 0, "bbox": [157, 46, 399, 288], "area": 94768}, {"id": 5260613, "category_id": 149, "iscrowd": 0, "bbox": [0, 117, 640, 243], "area": 28961}, {"id": 3495758, "category_id": 184, "iscrowd": 0, "bbox": [234, 0, 406, 289], "area": 26572}, {"id": 4144447, "category_id": 191, "iscrowd": 0, "bbox": [325, 214, 315, 146], "area": 22388}, {"id": 7566198, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 265], "area": 34677}], "file_name": "000000147223.png", "image_id": 147223}, {"segments_info": [{"id": 5523774, "category_id": 3, "iscrowd": 0, "bbox": [0, 76, 185, 135], "area": 14232}, {"id": 7169107, "category_id": 8, "iscrowd": 0, "bbox": [409, 27, 71, 46], "area": 2377}, {"id": 9009501, "category_id": 8, "iscrowd": 0, "bbox": [0, 101, 50, 18], "area": 734}, {"id": 3089992, "category_id": 8, "iscrowd": 0, "bbox": [187, 40, 293, 181], "area": 25438}, {"id": 5338248, "category_id": 11, "iscrowd": 0, "bbox": [121, 95, 253, 466], "area": 58971}, {"id": 7697785, "category_id": 125, "iscrowd": 0, "bbox": [0, 227, 480, 413], "area": 99615}, {"id": 6250336, "category_id": 149, "iscrowd": 0, "bbox": [0, 143, 480, 109], "area": 8310}, {"id": 3161650, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 121], "area": 7257}, {"id": 14467217, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 78], "area": 16080}, {"id": 12303801, "category_id": 191, "iscrowd": 0, "bbox": [123, 470, 357, 170], "area": 25251}, {"id": 3953488, "category_id": 193, "iscrowd": 0, "bbox": [0, 216, 480, 424], "area": 15554}, {"id": 4932714, "category_id": 197, "iscrowd": 0, "bbox": [32, 31, 407, 88], "area": 5409}, {"id": 7696240, "category_id": 199, "iscrowd": 0, "bbox": [0, 177, 400, 164], "area": 12094}], "file_name": "000000147338.png", "image_id": 147338}, {"segments_info": [{"id": 197637, "category_id": 1, "iscrowd": 0, "bbox": [353, 5, 287, 468], "area": 93963}, {"id": 1186852, "category_id": 44, "iscrowd": 0, "bbox": [400, 300, 29, 51], "area": 1130}, {"id": 1120803, "category_id": 44, "iscrowd": 0, "bbox": [388, 303, 12, 46], "area": 289}, {"id": 1582897, "category_id": 47, "iscrowd": 0, "bbox": [464, 284, 40, 45], "area": 1532}, {"id": 723723, "category_id": 62, "iscrowd": 0, "bbox": [69, 142, 260, 108], "area": 17821}, {"id": 12041147, "category_id": 73, "iscrowd": 0, "bbox": [82, 220, 311, 246], "area": 33248}, {"id": 922908, "category_id": 75, "iscrowd": 0, "bbox": [26, 421, 46, 59], "area": 2290}, {"id": 5728620, "category_id": 76, "iscrowd": 0, "bbox": [156, 359, 174, 57], "area": 1140}, {"id": 3161173, "category_id": 84, "iscrowd": 0, "bbox": [91, 403, 97, 71], "area": 4157}, {"id": 3098966, "category_id": 84, "iscrowd": 0, "bbox": [201, 335, 239, 134], "area": 17602}, {"id": 2506573, "category_id": 112, "iscrowd": 0, "bbox": [295, 0, 242, 308], "area": 33848}, {"id": 3298148, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 202, 114], "area": 22212}, {"id": 3560547, "category_id": 195, "iscrowd": 0, "bbox": [0, 343, 420, 130], "area": 7630}, {"id": 2506315, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 544, 332], "area": 38841}], "file_name": "000000147415.png", "image_id": 147415}, {"segments_info": [{"id": 8942931, "category_id": 16, "iscrowd": 0, "bbox": [363, 155, 9, 9], "area": 42}, {"id": 6246715, "category_id": 16, "iscrowd": 0, "bbox": [373, 185, 6, 9], "area": 23}, {"id": 7169626, "category_id": 16, "iscrowd": 0, "bbox": [375, 262, 8, 7], "area": 27}, {"id": 6641734, "category_id": 16, "iscrowd": 0, "bbox": [322, 240, 10, 7], "area": 35}, {"id": 5853248, "category_id": 16, "iscrowd": 0, "bbox": [349, 246, 8, 5], "area": 15}, {"id": 6576714, "category_id": 16, "iscrowd": 0, "bbox": [310, 283, 6, 5], "area": 17}, {"id": 3946026, "category_id": 16, "iscrowd": 0, "bbox": [280, 285, 7, 6], "area": 19}, {"id": 4274731, "category_id": 16, "iscrowd": 0, "bbox": [179, 317, 8, 8], "area": 32}, {"id": 9797729, "category_id": 16, "iscrowd": 0, "bbox": [349, 214, 7, 7], "area": 23}, {"id": 4734513, "category_id": 16, "iscrowd": 0, "bbox": [190, 402, 8, 6], "area": 18}, {"id": 5720631, "category_id": 16, "iscrowd": 0, "bbox": [176, 377, 4, 4], "area": 11}, {"id": 8419687, "category_id": 16, "iscrowd": 0, "bbox": [150, 306, 7, 10], "area": 39}, {"id": 5852732, "category_id": 16, "iscrowd": 0, "bbox": [199, 367, 6, 5], "area": 17}, {"id": 5063217, "category_id": 16, "iscrowd": 0, "bbox": [165, 370, 9, 6], "area": 26}, {"id": 3946030, "category_id": 16, "iscrowd": 0, "bbox": [295, 162, 9, 6], "area": 22}, {"id": 6051145, "category_id": 16, "iscrowd": 0, "bbox": [173, 288, 9, 8], "area": 36}, {"id": 4933178, "category_id": 16, "iscrowd": 0, "bbox": [291, 297, 10, 7], "area": 29}, {"id": 5261885, "category_id": 16, "iscrowd": 0, "bbox": [268, 219, 6, 4], "area": 12}, {"id": 9996916, "category_id": 16, "iscrowd": 0, "bbox": [289, 306, 7, 7], "area": 28}, {"id": 5984317, "category_id": 16, "iscrowd": 0, "bbox": [207, 326, 8, 7], "area": 38}, {"id": 5326392, "category_id": 16, "iscrowd": 0, "bbox": [229, 327, 3, 4], "area": 8}, {"id": 4800565, "category_id": 16, "iscrowd": 0, "bbox": [224, 339, 8, 5], "area": 20}, {"id": 12889227, "category_id": 16, "iscrowd": 1, "bbox": [1, 93, 485, 431], "area": 97096}, {"id": 6056316, "category_id": 154, "iscrowd": 0, "bbox": [171, 160, 469, 364], "area": 82800}, {"id": 12166797, "category_id": 155, "iscrowd": 0, "bbox": [141, 127, 499, 397], "area": 11251}, {"id": 14009520, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 524], "area": 139921}], "file_name": "000000147498.png", "image_id": 147498}, {"segments_info": [{"id": 8027780, "category_id": 70, "iscrowd": 0, "bbox": [161, 316, 157, 138], "area": 16712}, {"id": 5201521, "category_id": 70, "iscrowd": 0, "bbox": [114, 443, 139, 172], "area": 16822}, {"id": 7898261, "category_id": 81, "iscrowd": 0, "bbox": [414, 337, 66, 52], "area": 2343}, {"id": 4804439, "category_id": 84, "iscrowd": 0, "bbox": [320, 460, 34, 54], "area": 1044}, {"id": 3884361, "category_id": 109, "iscrowd": 0, "bbox": [22, 0, 157, 562], "area": 57206}, {"id": 5725536, "category_id": 133, "iscrowd": 0, "bbox": [391, 0, 89, 271], "area": 20796}, {"id": 3290684, "category_id": 168, "iscrowd": 0, "bbox": [352, 234, 117, 93], "area": 7868}, {"id": 6515574, "category_id": 176, "iscrowd": 0, "bbox": [13, 392, 60, 78], "area": 3614}, {"id": 2502985, "category_id": 188, "iscrowd": 0, "bbox": [175, 16, 305, 624], "area": 50987}, {"id": 2764596, "category_id": 190, "iscrowd": 0, "bbox": [44, 517, 354, 123], "area": 16257}, {"id": 8160911, "category_id": 195, "iscrowd": 0, "bbox": [317, 363, 41, 56], "area": 1295}, {"id": 9343640, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 88561}], "file_name": "000000147518.png", "image_id": 147518}, {"segments_info": [{"id": 1777690, "category_id": 1, "iscrowd": 0, "bbox": [316, 157, 27, 28], "area": 410}, {"id": 1055518, "category_id": 1, "iscrowd": 0, "bbox": [606, 183, 13, 31], "area": 304}, {"id": 2633260, "category_id": 3, "iscrowd": 0, "bbox": [132, 180, 22, 34], "area": 550}, {"id": 1582636, "category_id": 3, "iscrowd": 0, "bbox": [560, 182, 47, 45], "area": 1054}, {"id": 8818054, "category_id": 3, "iscrowd": 0, "bbox": [122, 172, 14, 24], "area": 93}, {"id": 4015685, "category_id": 3, "iscrowd": 0, "bbox": [402, 175, 175, 91], "area": 10290}, {"id": 5924971, "category_id": 3, "iscrowd": 0, "bbox": [536, 184, 52, 35], "area": 753}, {"id": 2900554, "category_id": 3, "iscrowd": 0, "bbox": [33, 182, 7, 34], "area": 185}, {"id": 2372147, "category_id": 6, "iscrowd": 0, "bbox": [153, 112, 231, 145], "area": 28549}, {"id": 3818562, "category_id": 8, "iscrowd": 0, "bbox": [72, 171, 78, 96], "area": 6145}, {"id": 5467508, "category_id": 149, "iscrowd": 0, "bbox": [67, 207, 573, 186], "area": 80426}, {"id": 2832441, "category_id": 181, "iscrowd": 0, "bbox": [474, 120, 20, 23], "area": 276}, {"id": 4149071, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 445, 244], "area": 22065}, {"id": 13747886, "category_id": 187, "iscrowd": 0, "bbox": [61, 0, 579, 148], "area": 55272}, {"id": 4481643, "category_id": 191, "iscrowd": 0, "bbox": [0, 192, 640, 201], "area": 11831}, {"id": 3161665, "category_id": 197, "iscrowd": 0, "bbox": [403, 77, 237, 133], "area": 17980}], "file_name": "000000147725.png", "image_id": 147725}, {"segments_info": [{"id": 395017, "category_id": 1, "iscrowd": 0, "bbox": [468, 27, 32, 74], "area": 1242}, {"id": 857118, "category_id": 1, "iscrowd": 0, "bbox": [229, 92, 54, 68], "area": 1808}, {"id": 723733, "category_id": 1, "iscrowd": 0, "bbox": [342, 105, 135, 106], "area": 7382}, {"id": 1051714, "category_id": 1, "iscrowd": 0, "bbox": [243, 122, 87, 188], "area": 4119}, {"id": 1514015, "category_id": 1, "iscrowd": 0, "bbox": [307, 201, 185, 168], "area": 26920}, {"id": 2368810, "category_id": 1, "iscrowd": 0, "bbox": [0, 87, 311, 288], "area": 55418}, {"id": 723725, "category_id": 1, "iscrowd": 0, "bbox": [286, 99, 83, 141], "area": 6862}, {"id": 6580842, "category_id": 1, "iscrowd": 0, "bbox": [1, 78, 161, 235], "area": 16569}, {"id": 526602, "category_id": 1, "iscrowd": 0, "bbox": [327, 65, 62, 81], "area": 3114}, {"id": 3025964, "category_id": 77, "iscrowd": 0, "bbox": [254, 118, 50, 74], "area": 1303}, {"id": 723982, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 423, 155], "area": 22102}, {"id": 3761017, "category_id": 194, "iscrowd": 0, "bbox": [378, 0, 122, 55], "area": 2891}], "file_name": "000000147729.png", "image_id": 147729}, {"segments_info": [{"id": 7038583, "category_id": 1, "iscrowd": 0, "bbox": [4, 145, 93, 206], "area": 7739}, {"id": 3942796, "category_id": 1, "iscrowd": 0, "bbox": [193, 293, 262, 179], "area": 34671}, {"id": 2697789, "category_id": 1, "iscrowd": 0, "bbox": [376, 144, 19, 34], "area": 452}, {"id": 5262470, "category_id": 1, "iscrowd": 0, "bbox": [107, 221, 37, 132], "area": 2297}, {"id": 8159639, "category_id": 1, "iscrowd": 0, "bbox": [383, 129, 42, 115], "area": 3372}, {"id": 7034718, "category_id": 1, "iscrowd": 0, "bbox": [558, 83, 82, 388], "area": 17933}, {"id": 4931407, "category_id": 1, "iscrowd": 0, "bbox": [67, 168, 61, 186], "area": 4107}, {"id": 8818319, "category_id": 3, "iscrowd": 0, "bbox": [0, 286, 182, 188], "area": 15137}, {"id": 4144198, "category_id": 4, "iscrowd": 0, "bbox": [377, 207, 55, 155], "area": 4836}, {"id": 9276303, "category_id": 4, "iscrowd": 0, "bbox": [0, 203, 90, 186], "area": 7846}, {"id": 1379407, "category_id": 31, "iscrowd": 0, "bbox": [225, 351, 75, 127], "area": 1632}, {"id": 5207926, "category_id": 52, "iscrowd": 0, "bbox": [230, 126, 161, 152], "area": 16784}, {"id": 3163467, "category_id": 52, "iscrowd": 0, "bbox": [366, 229, 30, 54], "area": 483}, {"id": 7566713, "category_id": 128, "iscrowd": 0, "bbox": [375, 0, 265, 480], "area": 82393}, {"id": 7435399, "category_id": 149, "iscrowd": 0, "bbox": [48, 272, 223, 208], "area": 16998}, {"id": 6120293, "category_id": 184, "iscrowd": 0, "bbox": [354, 0, 156, 38], "area": 4062}, {"id": 6909038, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 440, 297], "area": 66014}], "file_name": "000000147740.png", "image_id": 147740}, {"segments_info": [{"id": 6580843, "category_id": 8, "iscrowd": 0, "bbox": [354, 130, 225, 237], "area": 44748}, {"id": 6778221, "category_id": 8, "iscrowd": 0, "bbox": [32, 26, 347, 390], "area": 91973}, {"id": 12239292, "category_id": 151, "iscrowd": 0, "bbox": [577, 245, 63, 29], "area": 1069}, {"id": 7762789, "category_id": 185, "iscrowd": 0, "bbox": [17, 237, 623, 94], "area": 4455}, {"id": 15329508, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 250], "area": 83234}, {"id": 8427428, "category_id": 191, "iscrowd": 0, "bbox": [0, 320, 640, 160], "area": 67448}, {"id": 4413028, "category_id": 194, "iscrowd": 0, "bbox": [0, 248, 640, 232], "area": 13663}], "file_name": "000000147745.png", "image_id": 147745}, {"segments_info": [{"id": 12829635, "category_id": 1, "iscrowd": 0, "bbox": [292, 216, 9, 22], "area": 123}, {"id": 6316128, "category_id": 1, "iscrowd": 0, "bbox": [152, 220, 10, 43], "area": 309}, {"id": 8487297, "category_id": 1, "iscrowd": 0, "bbox": [576, 171, 43, 38], "area": 1028}, {"id": 14606046, "category_id": 1, "iscrowd": 0, "bbox": [54, 220, 17, 60], "area": 591}, {"id": 1513239, "category_id": 1, "iscrowd": 0, "bbox": [237, 287, 136, 133], "area": 14057}, {"id": 7171437, "category_id": 1, "iscrowd": 0, "bbox": [428, 179, 41, 199], "area": 2977}, {"id": 12303291, "category_id": 1, "iscrowd": 0, "bbox": [455, 186, 77, 210], "area": 5721}, {"id": 7500402, "category_id": 1, "iscrowd": 0, "bbox": [321, 210, 15, 35], "area": 259}, {"id": 4868682, "category_id": 1, "iscrowd": 0, "bbox": [29, 220, 20, 74], "area": 959}, {"id": 9671572, "category_id": 1, "iscrowd": 0, "bbox": [91, 238, 30, 40], "area": 674}, {"id": 9803158, "category_id": 1, "iscrowd": 0, "bbox": [42, 223, 17, 64], "area": 345}, {"id": 11053224, "category_id": 1, "iscrowd": 0, "bbox": [120, 223, 18, 46], "area": 461}, {"id": 4210752, "category_id": 1, "iscrowd": 0, "bbox": [457, 188, 50, 209], "area": 4826}, {"id": 5131855, "category_id": 1, "iscrowd": 1, "bbox": [3, 163, 637, 262], "area": 35381}, {"id": 7171439, "category_id": 3, "iscrowd": 0, "bbox": [475, 163, 29, 12], "area": 264}, {"id": 4737099, "category_id": 3, "iscrowd": 0, "bbox": [377, 200, 31, 25], "area": 637}, {"id": 5528772, "category_id": 6, "iscrowd": 0, "bbox": [167, 117, 111, 157], "area": 15577}, {"id": 11053228, "category_id": 95, "iscrowd": 0, "bbox": [412, 98, 85, 67], "area": 1696}, {"id": 12698050, "category_id": 128, "iscrowd": 0, "bbox": [0, 155, 503, 105], "area": 2384}, {"id": 5329234, "category_id": 130, "iscrowd": 0, "bbox": [368, 160, 19, 35], "area": 364}, {"id": 9868950, "category_id": 149, "iscrowd": 0, "bbox": [0, 158, 566, 267], "area": 65324}, {"id": 5592405, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 228], "area": 95416}, {"id": 14211288, "category_id": 187, "iscrowd": 0, "bbox": [126, 0, 249, 34], "area": 2884}, {"id": 9934743, "category_id": 191, "iscrowd": 0, "bbox": [395, 195, 11, 13], "area": 22}, {"id": 5131854, "category_id": 197, "iscrowd": 0, "bbox": [95, 0, 545, 198], "area": 5470}], "file_name": "000000148508.png", "image_id": 148508}, {"segments_info": [{"id": 13285263, "category_id": 72, "iscrowd": 0, "bbox": [222, 62, 207, 136], "area": 26248}, {"id": 6907999, "category_id": 73, "iscrowd": 0, "bbox": [27, 141, 170, 136], "area": 14716}, {"id": 5996937, "category_id": 74, "iscrowd": 0, "bbox": [453, 258, 35, 29], "area": 775}, {"id": 8433600, "category_id": 76, "iscrowd": 0, "bbox": [221, 228, 202, 53], "area": 6775}, {"id": 5796986, "category_id": 76, "iscrowd": 0, "bbox": [52, 222, 117, 31], "area": 1737}, {"id": 2770270, "category_id": 100, "iscrowd": 0, "bbox": [0, 70, 254, 160], "area": 15418}, {"id": 2641270, "category_id": 112, "iscrowd": 0, "bbox": [391, 0, 45, 144], "area": 3106}, {"id": 5212068, "category_id": 189, "iscrowd": 0, "bbox": [0, 187, 500, 188], "area": 50709}, {"id": 3367552, "category_id": 190, "iscrowd": 0, "bbox": [0, 141, 500, 234], "area": 21993}, {"id": 5475236, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 151], "area": 43170}], "file_name": "000000148620.png", "image_id": 148620}, {"segments_info": [{"id": 2046042, "category_id": 1, "iscrowd": 0, "bbox": [82, 0, 557, 480], "area": 175897}, {"id": 1514777, "category_id": 1, "iscrowd": 0, "bbox": [70, 0, 353, 236], "area": 37470}, {"id": 1383191, "category_id": 1, "iscrowd": 0, "bbox": [1, 0, 141, 247], "area": 18111}, {"id": 1997774, "category_id": 58, "iscrowd": 0, "bbox": [75, 308, 136, 127], "area": 11944}, {"id": 2062498, "category_id": 190, "iscrowd": 0, "bbox": [7, 98, 122, 151], "area": 5630}, {"id": 8507128, "category_id": 195, "iscrowd": 0, "bbox": [0, 183, 172, 297], "area": 29477}, {"id": 608888, "category_id": 199, "iscrowd": 0, "bbox": [88, 0, 104, 111], "area": 3853}], "file_name": "000000148662.png", "image_id": 148662}, {"segments_info": [{"id": 6463418, "category_id": 55, "iscrowd": 0, "bbox": [315, 194, 72, 73], "area": 3965}, {"id": 5472906, "category_id": 55, "iscrowd": 0, "bbox": [215, 176, 65, 69], "area": 2322}, {"id": 6717533, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 293780}, {"id": 16250609, "category_id": 187, "iscrowd": 0, "bbox": [244, 0, 396, 275], "area": 7017}], "file_name": "000000148707.png", "image_id": 148707}, {"segments_info": [{"id": 10520716, "category_id": 1, "iscrowd": 0, "bbox": [2, 120, 41, 43], "area": 786}, {"id": 7301753, "category_id": 8, "iscrowd": 0, "bbox": [231, 119, 42, 30], "area": 655}, {"id": 11313054, "category_id": 8, "iscrowd": 0, "bbox": [193, 117, 29, 34], "area": 746}, {"id": 7959675, "category_id": 8, "iscrowd": 0, "bbox": [0, 108, 259, 212], "area": 25687}, {"id": 9339774, "category_id": 8, "iscrowd": 0, "bbox": [545, 116, 89, 68], "area": 4090}, {"id": 5724025, "category_id": 8, "iscrowd": 0, "bbox": [96, 96, 486, 283], "area": 86598}, {"id": 5466721, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 165], "area": 74413}, {"id": 4873559, "category_id": 193, "iscrowd": 0, "bbox": [0, 138, 640, 342], "area": 113400}], "file_name": "000000148719.png", "image_id": 148719}, {"segments_info": [{"id": 11586273, "category_id": 9, "iscrowd": 0, "bbox": [546, 242, 44, 14], "area": 400}, {"id": 6320518, "category_id": 9, "iscrowd": 0, "bbox": [214, 102, 278, 191], "area": 26709}, {"id": 8163495, "category_id": 95, "iscrowd": 0, "bbox": [32, 234, 608, 163], "area": 32808}, {"id": 10993880, "category_id": 154, "iscrowd": 0, "bbox": [306, 337, 334, 90], "area": 19355}, {"id": 9216698, "category_id": 155, "iscrowd": 0, "bbox": [0, 168, 640, 259], "area": 69202}, {"id": 11783909, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 168], "area": 98398}, {"id": 8163751, "category_id": 194, "iscrowd": 0, "bbox": [0, 149, 640, 107], "area": 21151}, {"id": 10467536, "category_id": 197, "iscrowd": 0, "bbox": [34, 196, 47, 164], "area": 5017}], "file_name": "000000148730.png", "image_id": 148730}, {"segments_info": [{"id": 5199459, "category_id": 1, "iscrowd": 0, "bbox": [74, 120, 91, 121], "area": 3645}, {"id": 13623517, "category_id": 42, "iscrowd": 0, "bbox": [141, 231, 35, 16], "area": 315}, {"id": 11721965, "category_id": 154, "iscrowd": 0, "bbox": [219, 401, 421, 25], "area": 4766}, {"id": 12436402, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 256592}, {"id": 2634808, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 21], "area": 7211}], "file_name": "000000148739.png", "image_id": 148739}, {"segments_info": [{"id": 4013373, "category_id": 24, "iscrowd": 0, "bbox": [83, 191, 355, 378], "area": 62723}, {"id": 4342338, "category_id": 24, "iscrowd": 0, "bbox": [298, 122, 141, 341], "area": 14479}, {"id": 9539985, "category_id": 125, "iscrowd": 0, "bbox": [0, 82, 448, 558], "area": 91697}, {"id": 3421236, "category_id": 184, "iscrowd": 0, "bbox": [0, 99, 448, 541], "area": 47252}, {"id": 3618615, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 448, 107], "area": 42015}, {"id": 8553090, "category_id": 193, "iscrowd": 0, "bbox": [0, 170, 448, 425], "area": 26352}], "file_name": "000000148783.png", "image_id": 148783}, {"segments_info": [{"id": 4740973, "category_id": 60, "iscrowd": 0, "bbox": [47, 273, 219, 186], "area": 32188}, {"id": 6849707, "category_id": 60, "iscrowd": 0, "bbox": [406, 51, 173, 192], "area": 26507}, {"id": 6325933, "category_id": 60, "iscrowd": 0, "bbox": [67, 105, 188, 169], "area": 24099}, {"id": 3699618, "category_id": 60, "iscrowd": 0, "bbox": [431, 237, 192, 197], "area": 29584}, {"id": 4673640, "category_id": 60, "iscrowd": 0, "bbox": [239, 206, 213, 186], "area": 31139}, {"id": 4943523, "category_id": 60, "iscrowd": 0, "bbox": [227, 70, 180, 146], "area": 20838}, {"id": 9014669, "category_id": 100, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 113406}, {"id": 4088183, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 28758}], "file_name": "000000148957.png", "image_id": 148957}, {"segments_info": [{"id": 6909035, "category_id": 1, "iscrowd": 0, "bbox": [489, 109, 134, 129], "area": 6182}, {"id": 4210802, "category_id": 1, "iscrowd": 0, "bbox": [449, 334, 11, 13], "area": 84}, {"id": 5529448, "category_id": 1, "iscrowd": 0, "bbox": [255, 189, 43, 45], "area": 1074}, {"id": 7240067, "category_id": 1, "iscrowd": 0, "bbox": [300, 166, 43, 60], "area": 1238}, {"id": 1580330, "category_id": 1, "iscrowd": 0, "bbox": [345, 347, 7, 7], "area": 29}, {"id": 2303799, "category_id": 1, "iscrowd": 0, "bbox": [478, 334, 9, 11], "area": 60}, {"id": 1450033, "category_id": 1, "iscrowd": 0, "bbox": [437, 340, 7, 8], "area": 41}, {"id": 1646888, "category_id": 1, "iscrowd": 0, "bbox": [329, 344, 8, 11], "area": 73}, {"id": 2041396, "category_id": 1, "iscrowd": 0, "bbox": [534, 335, 6, 7], "area": 29}, {"id": 1909808, "category_id": 1, "iscrowd": 0, "bbox": [413, 342, 5, 8], "area": 26}, {"id": 3553604, "category_id": 1, "iscrowd": 0, "bbox": [496, 333, 8, 11], "area": 66}, {"id": 6119265, "category_id": 1, "iscrowd": 0, "bbox": [423, 122, 66, 117], "area": 4771}, {"id": 2501169, "category_id": 1, "iscrowd": 0, "bbox": [416, 342, 9, 8], "area": 45}, {"id": 3157804, "category_id": 7, "iscrowd": 0, "bbox": [83, 313, 483, 104], "area": 31877}, {"id": 3159609, "category_id": 10, "iscrowd": 0, "bbox": [78, 186, 19, 25], "area": 286}, {"id": 4409931, "category_id": 19, "iscrowd": 0, "bbox": [31, 186, 144, 123], "area": 6381}, {"id": 8294540, "category_id": 185, "iscrowd": 0, "bbox": [34, 387, 30, 24], "area": 457}, {"id": 15660021, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 315], "area": 85631}, {"id": 7831432, "category_id": 197, "iscrowd": 0, "bbox": [0, 82, 640, 319], "area": 92955}, {"id": 3423805, "category_id": 199, "iscrowd": 0, "bbox": [18, 253, 66, 139], "area": 1130}], "file_name": "000000148999.png", "image_id": 148999}, {"segments_info": [{"id": 9869199, "category_id": 1, "iscrowd": 0, "bbox": [195, 150, 14, 14], "area": 124}, {"id": 9011053, "category_id": 1, "iscrowd": 0, "bbox": [163, 76, 41, 35], "area": 786}, {"id": 9141629, "category_id": 1, "iscrowd": 0, "bbox": [237, 73, 11, 16], "area": 109}, {"id": 8427424, "category_id": 17, "iscrowd": 0, "bbox": [234, 210, 29, 36], "area": 702}, {"id": 9015978, "category_id": 57, "iscrowd": 0, "bbox": [56, 79, 21, 15], "area": 112}, {"id": 4741731, "category_id": 72, "iscrowd": 0, "bbox": [280, 2, 142, 195], "area": 23194}, {"id": 11184533, "category_id": 72, "iscrowd": 0, "bbox": [4, 0, 288, 251], "area": 60100}, {"id": 8753294, "category_id": 74, "iscrowd": 0, "bbox": [379, 288, 61, 40], "area": 1522}, {"id": 8228238, "category_id": 76, "iscrowd": 0, "bbox": [79, 291, 299, 87], "area": 14329}, {"id": 5401718, "category_id": 189, "iscrowd": 0, "bbox": [23, 165, 477, 218], "area": 13003}, {"id": 8028539, "category_id": 195, "iscrowd": 0, "bbox": [0, 68, 500, 315], "area": 33820}, {"id": 6253423, "category_id": 196, "iscrowd": 0, "bbox": [80, 202, 222, 152], "area": 9345}, {"id": 1850220, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 183], "area": 7309}], "file_name": "000000149222.png", "image_id": 149222}, {"segments_info": [{"id": 1184274, "category_id": 1, "iscrowd": 0, "bbox": [121, 150, 28, 46], "area": 631}, {"id": 1250067, "category_id": 1, "iscrowd": 0, "bbox": [515, 142, 22, 74], "area": 845}, {"id": 7036510, "category_id": 1, "iscrowd": 0, "bbox": [208, 42, 185, 333], "area": 19380}, {"id": 1316377, "category_id": 1, "iscrowd": 0, "bbox": [88, 139, 20, 58], "area": 795}, {"id": 8355202, "category_id": 41, "iscrowd": 0, "bbox": [218, 298, 107, 85], "area": 3209}, {"id": 1644827, "category_id": 41, "iscrowd": 0, "bbox": [526, 191, 18, 22], "area": 162}, {"id": 3948870, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 515, 132], "area": 3247}, {"id": 789517, "category_id": 185, "iscrowd": 0, "bbox": [377, 171, 263, 48], "area": 6180}, {"id": 460552, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 129], "area": 58532}, {"id": 5593937, "category_id": 193, "iscrowd": 0, "bbox": [208, 453, 122, 32], "area": 1874}, {"id": 2171170, "category_id": 199, "iscrowd": 0, "bbox": [0, 69, 640, 129], "area": 44654}], "file_name": "000000149375.png", "image_id": 149375}, {"segments_info": [{"id": 5463142, "category_id": 4, "iscrowd": 0, "bbox": [86, 364, 403, 235], "area": 56063}, {"id": 6188643, "category_id": 112, "iscrowd": 0, "bbox": [0, 127, 640, 441], "area": 179526}, {"id": 4347244, "category_id": 171, "iscrowd": 0, "bbox": [0, 118, 106, 469], "area": 43532}, {"id": 2830383, "category_id": 186, "iscrowd": 0, "bbox": [36, 0, 604, 147], "area": 75930}, {"id": 9146261, "category_id": 191, "iscrowd": 0, "bbox": [0, 554, 640, 84], "area": 40840}, {"id": 12962504, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 129, 147], "area": 10418}], "file_name": "000000149406.png", "image_id": 149406}, {"segments_info": [{"id": 6314594, "category_id": 1, "iscrowd": 0, "bbox": [145, 0, 184, 396], "area": 32737}, {"id": 3290943, "category_id": 18, "iscrowd": 0, "bbox": [125, 115, 329, 369], "area": 60458}, {"id": 5923948, "category_id": 18, "iscrowd": 0, "bbox": [103, 115, 253, 179], "area": 4670}, {"id": 7438777, "category_id": 34, "iscrowd": 0, "bbox": [82, 162, 49, 30], "area": 901}, {"id": 9939381, "category_id": 154, "iscrowd": 0, "bbox": [0, 57, 640, 492], "area": 212250}, {"id": 3490630, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 94], "area": 36749}], "file_name": "000000149568.png", "image_id": 149568}, {"segments_info": [{"id": 5991279, "category_id": 16, "iscrowd": 0, "bbox": [156, 151, 134, 181], "area": 17383}, {"id": 5530476, "category_id": 16, "iscrowd": 0, "bbox": [378, 101, 113, 166], "area": 8635}, {"id": 5347199, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 453], "area": 263603}], "file_name": "000000149622.png", "image_id": 149622}, {"segments_info": [{"id": 2177858, "category_id": 1, "iscrowd": 0, "bbox": [65, 31, 81, 78], "area": 2380}, {"id": 7908288, "category_id": 42, "iscrowd": 0, "bbox": [60, 97, 84, 13], "area": 442}, {"id": 9946320, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 200, 145], "area": 25593}], "file_name": "000000149770.png", "image_id": 149770}, {"segments_info": [{"id": 2369062, "category_id": 1, "iscrowd": 0, "bbox": [379, 282, 97, 136], "area": 3358}, {"id": 2633009, "category_id": 1, "iscrowd": 0, "bbox": [410, 268, 124, 108], "area": 3460}, {"id": 2961973, "category_id": 1, "iscrowd": 0, "bbox": [346, 214, 78, 185], "area": 7437}, {"id": 2566699, "category_id": 1, "iscrowd": 0, "bbox": [206, 290, 85, 115], "area": 6446}, {"id": 2238250, "category_id": 1, "iscrowd": 0, "bbox": [408, 242, 45, 109], "area": 1870}, {"id": 2830644, "category_id": 1, "iscrowd": 0, "bbox": [313, 337, 24, 25], "area": 537}, {"id": 1975363, "category_id": 27, "iscrowd": 0, "bbox": [588, 336, 52, 36], "area": 1406}, {"id": 2894122, "category_id": 27, "iscrowd": 0, "bbox": [577, 369, 63, 51], "area": 2803}, {"id": 2104861, "category_id": 27, "iscrowd": 0, "bbox": [538, 365, 42, 54], "area": 1199}, {"id": 6647155, "category_id": 28, "iscrowd": 0, "bbox": [34, 103, 288, 99], "area": 13432}, {"id": 2171681, "category_id": 31, "iscrowd": 0, "bbox": [166, 372, 54, 37], "area": 1527}, {"id": 2235931, "category_id": 31, "iscrowd": 0, "bbox": [273, 362, 76, 53], "area": 3147}, {"id": 1448217, "category_id": 62, "iscrowd": 0, "bbox": [429, 316, 126, 105], "area": 8044}, {"id": 3225914, "category_id": 154, "iscrowd": 0, "bbox": [0, 390, 640, 37], "area": 3702}, {"id": 10132635, "category_id": 155, "iscrowd": 0, "bbox": [0, 167, 640, 260], "area": 100836}, {"id": 11776946, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 190], "area": 103919}], "file_name": "000000150224.png", "image_id": 150224}, {"segments_info": [{"id": 2696222, "category_id": 1, "iscrowd": 0, "bbox": [68, 30, 52, 103], "area": 2471}, {"id": 2960421, "category_id": 1, "iscrowd": 0, "bbox": [162, 0, 28, 78], "area": 1464}, {"id": 3817286, "category_id": 1, "iscrowd": 0, "bbox": [122, 375, 200, 255], "area": 32174}, {"id": 3883073, "category_id": 1, "iscrowd": 0, "bbox": [12, 79, 151, 323], "area": 28825}, {"id": 1053968, "category_id": 1, "iscrowd": 0, "bbox": [18, 0, 61, 104], "area": 3338}, {"id": 1908249, "category_id": 1, "iscrowd": 0, "bbox": [91, 0, 40, 69], "area": 1052}, {"id": 2127003, "category_id": 11, "iscrowd": 0, "bbox": [306, 164, 38, 103], "area": 2803}, {"id": 1381911, "category_id": 31, "iscrowd": 0, "bbox": [250, 447, 36, 92], "area": 1562}, {"id": 3815734, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 480, 322], "area": 62992}, {"id": 7370113, "category_id": 191, "iscrowd": 0, "bbox": [0, 80, 480, 560], "area": 117800}], "file_name": "000000150265.png", "image_id": 150265}, {"segments_info": [{"id": 2368371, "category_id": 1, "iscrowd": 0, "bbox": [114, 71, 227, 265], "area": 38777}, {"id": 5000800, "category_id": 1, "iscrowd": 0, "bbox": [381, 2, 259, 448], "area": 52039}, {"id": 1258548, "category_id": 47, "iscrowd": 0, "bbox": [51, 108, 18, 17], "area": 279}, {"id": 13289138, "category_id": 47, "iscrowd": 0, "bbox": [350, 235, 38, 43], "area": 589}, {"id": 8728025, "category_id": 47, "iscrowd": 0, "bbox": [478, 191, 26, 44], "area": 938}, {"id": 288550, "category_id": 47, "iscrowd": 0, "bbox": [35, 103, 16, 22], "area": 287}, {"id": 13817790, "category_id": 51, "iscrowd": 0, "bbox": [359, 243, 109, 91], "area": 8180}, {"id": 8104363, "category_id": 61, "iscrowd": 0, "bbox": [270, 308, 113, 94], "area": 8751}, {"id": 1448991, "category_id": 62, "iscrowd": 0, "bbox": [106, 148, 179, 178], "area": 2581}, {"id": 11184018, "category_id": 67, "iscrowd": 0, "bbox": [182, 168, 410, 305], "area": 47614}, {"id": 6581349, "category_id": 82, "iscrowd": 0, "bbox": [280, 0, 233, 260], "area": 45247}, {"id": 4882051, "category_id": 107, "iscrowd": 0, "bbox": [0, 102, 164, 41], "area": 3150}, {"id": 15920869, "category_id": 130, "iscrowd": 0, "bbox": [504, 67, 87, 111], "area": 4141}, {"id": 2047050, "category_id": 168, "iscrowd": 0, "bbox": [268, 118, 12, 52], "area": 356}, {"id": 664376, "category_id": 176, "iscrowd": 0, "bbox": [0, 62, 93, 51], "area": 3524}, {"id": 1516841, "category_id": 177, "iscrowd": 0, "bbox": [85, 0, 476, 197], "area": 13735}, {"id": 599111, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 160, 480], "area": 41301}, {"id": 13949111, "category_id": 189, "iscrowd": 0, "bbox": [268, 473, 133, 7], "area": 886}, {"id": 16645340, "category_id": 195, "iscrowd": 0, "bbox": [193, 461, 79, 19], "area": 534}, {"id": 1135217, "category_id": 199, "iscrowd": 0, "bbox": [268, 0, 12, 52], "area": 579}, {"id": 4212039, "category_id": 200, "iscrowd": 0, "bbox": [50, 292, 60, 66], "area": 2581}], "file_name": "000000150417.png", "image_id": 150417}, {"segments_info": [{"id": 8351844, "category_id": 1, "iscrowd": 0, "bbox": [170, 6, 28, 55], "area": 514}, {"id": 1184021, "category_id": 1, "iscrowd": 0, "bbox": [499, 0, 80, 80], "area": 3924}, {"id": 4012605, "category_id": 1, "iscrowd": 0, "bbox": [146, 14, 54, 74], "area": 2444}, {"id": 6378580, "category_id": 1, "iscrowd": 0, "bbox": [183, 0, 147, 89], "area": 9535}, {"id": 10010043, "category_id": 44, "iscrowd": 0, "bbox": [549, 106, 48, 121], "area": 3714}, {"id": 3687235, "category_id": 44, "iscrowd": 0, "bbox": [302, 148, 52, 163], "area": 2457}, {"id": 3757915, "category_id": 44, "iscrowd": 0, "bbox": [382, 112, 55, 131], "area": 5085}, {"id": 4607308, "category_id": 44, "iscrowd": 0, "bbox": [149, 173, 30, 112], "area": 1759}, {"id": 6186096, "category_id": 44, "iscrowd": 0, "bbox": [467, 100, 33, 54], "area": 1106}, {"id": 5002055, "category_id": 44, "iscrowd": 0, "bbox": [439, 100, 30, 54], "area": 954}, {"id": 3355047, "category_id": 47, "iscrowd": 0, "bbox": [613, 66, 27, 25], "area": 573}, {"id": 1446483, "category_id": 47, "iscrowd": 0, "bbox": [366, 140, 27, 43], "area": 842}, {"id": 3156843, "category_id": 47, "iscrowd": 0, "bbox": [359, 247, 51, 71], "area": 2745}, {"id": 8753629, "category_id": 47, "iscrowd": 0, "bbox": [511, 170, 39, 26], "area": 799}, {"id": 4796965, "category_id": 47, "iscrowd": 0, "bbox": [591, 69, 11, 14], "area": 115}, {"id": 2762068, "category_id": 47, "iscrowd": 0, "bbox": [313, 39, 24, 35], "area": 598}, {"id": 6056143, "category_id": 47, "iscrowd": 0, "bbox": [514, 197, 42, 57], "area": 1783}, {"id": 4405044, "category_id": 67, "iscrowd": 0, "bbox": [0, 66, 607, 397], "area": 154525}, {"id": 3817797, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 87], "area": 18026}, {"id": 15987954, "category_id": 187, "iscrowd": 0, "bbox": [145, 0, 42, 24], "area": 567}, {"id": 2501428, "category_id": 189, "iscrowd": 0, "bbox": [187, 436, 202, 33], "area": 1969}, {"id": 4214358, "category_id": 194, "iscrowd": 0, "bbox": [138, 14, 502, 210], "area": 9823}], "file_name": "000000150638.png", "image_id": 150638}, {"segments_info": [{"id": 2893864, "category_id": 1, "iscrowd": 0, "bbox": [109, 146, 79, 120], "area": 3526}, {"id": 2038811, "category_id": 1, "iscrowd": 0, "bbox": [447, 141, 53, 149], "area": 3757}, {"id": 2433570, "category_id": 1, "iscrowd": 0, "bbox": [317, 37, 59, 91], "area": 2044}, {"id": 6973027, "category_id": 1, "iscrowd": 0, "bbox": [398, 82, 2, 4], "area": 7}, {"id": 2433566, "category_id": 1, "iscrowd": 0, "bbox": [120, 22, 73, 105], "area": 2643}, {"id": 2367520, "category_id": 1, "iscrowd": 0, "bbox": [204, 21, 71, 98], "area": 2312}, {"id": 5788759, "category_id": 41, "iscrowd": 0, "bbox": [117, 121, 36, 13], "area": 284}, {"id": 5657687, "category_id": 41, "iscrowd": 0, "bbox": [328, 119, 49, 16], "area": 377}, {"id": 4603454, "category_id": 41, "iscrowd": 0, "bbox": [467, 246, 33, 50], "area": 459}, {"id": 4734784, "category_id": 41, "iscrowd": 0, "bbox": [113, 234, 34, 40], "area": 287}, {"id": 7039340, "category_id": 41, "iscrowd": 0, "bbox": [198, 117, 42, 10], "area": 332}, {"id": 7498599, "category_id": 128, "iscrowd": 0, "bbox": [260, 57, 164, 30], "area": 986}, {"id": 3424062, "category_id": 184, "iscrowd": 0, "bbox": [0, 54, 500, 38], "area": 5529}, {"id": 10456198, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 66], "area": 23524}, {"id": 7692373, "category_id": 192, "iscrowd": 0, "bbox": [0, 37, 500, 37], "area": 5400}, {"id": 3100742, "category_id": 193, "iscrowd": 0, "bbox": [0, 68, 500, 70], "area": 17151}, {"id": 6380889, "category_id": 197, "iscrowd": 0, "bbox": [281, 37, 189, 51], "area": 971}], "file_name": "000000150649.png", "image_id": 150649}, {"segments_info": [{"id": 5464693, "category_id": 25, "iscrowd": 0, "bbox": [56, 204, 212, 259], "area": 15782}, {"id": 5134438, "category_id": 25, "iscrowd": 0, "bbox": [150, 170, 258, 267], "area": 21476}, {"id": 1451295, "category_id": 184, "iscrowd": 0, "bbox": [70, 0, 410, 334], "area": 77061}, {"id": 7771544, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 155119}, {"id": 7502726, "category_id": 198, "iscrowd": 0, "bbox": [126, 431, 354, 209], "area": 37290}], "file_name": "000000150726.png", "image_id": 150726}, {"segments_info": [{"id": 8620172, "category_id": 85, "iscrowd": 0, "bbox": [123, 173, 136, 226], "area": 20358}, {"id": 12042436, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 411, 640], "area": 242524}], "file_name": "000000150930.png", "image_id": 150930}, {"segments_info": [{"id": 6383204, "category_id": 1, "iscrowd": 0, "bbox": [492, 266, 56, 160], "area": 3098}, {"id": 1984345, "category_id": 1, "iscrowd": 0, "bbox": [600, 379, 40, 47], "area": 1168}, {"id": 3290170, "category_id": 1, "iscrowd": 0, "bbox": [137, 140, 114, 285], "area": 17591}, {"id": 5531775, "category_id": 1, "iscrowd": 0, "bbox": [363, 178, 60, 202], "area": 3501}, {"id": 8028809, "category_id": 1, "iscrowd": 0, "bbox": [178, 35, 213, 382], "area": 45725}, {"id": 5660783, "category_id": 1, "iscrowd": 0, "bbox": [567, 320, 40, 106], "area": 3283}, {"id": 6911618, "category_id": 1, "iscrowd": 0, "bbox": [453, 224, 65, 200], "area": 7653}, {"id": 3685709, "category_id": 31, "iscrowd": 0, "bbox": [225, 170, 76, 231], "area": 5694}, {"id": 4413817, "category_id": 31, "iscrowd": 0, "bbox": [489, 384, 27, 41], "area": 495}, {"id": 4932678, "category_id": 31, "iscrowd": 0, "bbox": [557, 367, 26, 45], "area": 340}, {"id": 657437, "category_id": 32, "iscrowd": 0, "bbox": [207, 229, 18, 22], "area": 242}, {"id": 5659747, "category_id": 77, "iscrowd": 0, "bbox": [167, 281, 32, 21], "area": 312}, {"id": 13686490, "category_id": 77, "iscrowd": 0, "bbox": [246, 47, 51, 29], "area": 942}, {"id": 7309947, "category_id": 166, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 175089}, {"id": 925975, "category_id": 184, "iscrowd": 0, "bbox": [417, 216, 83, 178], "area": 4702}], "file_name": "000000151000.png", "image_id": 151000}, {"segments_info": [{"id": 2368835, "category_id": 1, "iscrowd": 0, "bbox": [132, 201, 133, 117], "area": 7718}, {"id": 9739165, "category_id": 35, "iscrowd": 0, "bbox": [133, 332, 232, 85], "area": 3606}, {"id": 10790309, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 478], "area": 294376}], "file_name": "000000151051.png", "image_id": 151051}, {"segments_info": [{"id": 10127739, "category_id": 1, "iscrowd": 0, "bbox": [266, 185, 53, 144], "area": 3813}, {"id": 6180671, "category_id": 1, "iscrowd": 0, "bbox": [354, 42, 25, 81], "area": 1042}, {"id": 10324343, "category_id": 1, "iscrowd": 0, "bbox": [384, 188, 51, 129], "area": 3727}, {"id": 9799546, "category_id": 1, "iscrowd": 0, "bbox": [170, 175, 53, 144], "area": 3406}, {"id": 7693657, "category_id": 1, "iscrowd": 0, "bbox": [369, 28, 37, 94], "area": 2308}, {"id": 8019554, "category_id": 1, "iscrowd": 0, "bbox": [251, 182, 35, 90], "area": 921}, {"id": 9403760, "category_id": 1, "iscrowd": 0, "bbox": [294, 181, 42, 133], "area": 2075}, {"id": 13611926, "category_id": 1, "iscrowd": 0, "bbox": [410, 73, 29, 48], "area": 852}, {"id": 9864570, "category_id": 1, "iscrowd": 0, "bbox": [208, 173, 44, 148], "area": 3507}, {"id": 10257272, "category_id": 1, "iscrowd": 0, "bbox": [312, 64, 28, 57], "area": 920}, {"id": 7164195, "category_id": 1, "iscrowd": 0, "bbox": [241, 45, 21, 69], "area": 419}, {"id": 13417642, "category_id": 27, "iscrowd": 0, "bbox": [178, 205, 34, 39], "area": 923}, {"id": 11501742, "category_id": 27, "iscrowd": 0, "bbox": [259, 205, 23, 49], "area": 610}, {"id": 6051149, "category_id": 27, "iscrowd": 0, "bbox": [187, 94, 29, 24], "area": 292}, {"id": 4802356, "category_id": 40, "iscrowd": 0, "bbox": [377, 250, 17, 15], "area": 178}, {"id": 5461313, "category_id": 40, "iscrowd": 0, "bbox": [249, 259, 16, 16], "area": 158}, {"id": 5327674, "category_id": 40, "iscrowd": 0, "bbox": [169, 247, 12, 16], "area": 172}, {"id": 6251639, "category_id": 40, "iscrowd": 0, "bbox": [302, 253, 16, 14], "area": 86}, {"id": 7236771, "category_id": 92, "iscrowd": 0, "bbox": [178, 122, 462, 121], "area": 38760}, {"id": 3549727, "category_id": 112, "iscrowd": 0, "bbox": [324, 14, 57, 61], "area": 2227}, {"id": 6528124, "category_id": 145, "iscrowd": 0, "bbox": [0, 238, 640, 242], "area": 137408}, {"id": 4997941, "category_id": 185, "iscrowd": 0, "bbox": [0, 47, 640, 97], "area": 28727}, {"id": 5001557, "category_id": 194, "iscrowd": 0, "bbox": [0, 224, 640, 43], "area": 6851}, {"id": 4409402, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 248], "area": 65956}], "file_name": "000000151480.png", "image_id": 151480}, {"segments_info": [{"id": 2898779, "category_id": 16, "iscrowd": 0, "bbox": [204, 225, 268, 90], "area": 8103}, {"id": 6645349, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 265016}], "file_name": "000000151516.png", "image_id": 151516}, {"segments_info": [{"id": 11055540, "category_id": 1, "iscrowd": 0, "bbox": [39, 257, 325, 375], "area": 42340}, {"id": 10991031, "category_id": 1, "iscrowd": 0, "bbox": [93, 467, 38, 107], "area": 2287}, {"id": 8687033, "category_id": 1, "iscrowd": 0, "bbox": [22, 464, 86, 141], "area": 4498}, {"id": 8114888, "category_id": 37, "iscrowd": 0, "bbox": [94, 487, 11, 13], "area": 107}, {"id": 9550262, "category_id": 43, "iscrowd": 0, "bbox": [14, 538, 22, 51], "area": 717}, {"id": 8885139, "category_id": 43, "iscrowd": 0, "bbox": [260, 365, 87, 66], "area": 722}, {"id": 9882816, "category_id": 145, "iscrowd": 0, "bbox": [0, 558, 427, 82], "area": 23466}, {"id": 5664106, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 548], "area": 190434}, {"id": 13096913, "category_id": 185, "iscrowd": 0, "bbox": [13, 508, 412, 27], "area": 1550}, {"id": 5935221, "category_id": 193, "iscrowd": 0, "bbox": [0, 494, 427, 71], "area": 6502}], "file_name": "000000151629.png", "image_id": 151629}, {"segments_info": [{"id": 3809833, "category_id": 1, "iscrowd": 0, "bbox": [199, 108, 143, 525], "area": 48518}, {"id": 2037276, "category_id": 1, "iscrowd": 0, "bbox": [10, 17, 205, 617], "area": 86244}, {"id": 6371757, "category_id": 32, "iscrowd": 0, "bbox": [142, 144, 38, 197], "area": 4780}, {"id": 1523046, "category_id": 177, "iscrowd": 0, "bbox": [0, 494, 385, 69], "area": 2839}, {"id": 10529708, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 385, 530], "area": 74573}, {"id": 5196619, "category_id": 200, "iscrowd": 0, "bbox": [0, 543, 385, 97], "area": 11610}], "file_name": "000000151657.png", "image_id": 151657}, {"segments_info": [{"id": 7634326, "category_id": 25, "iscrowd": 0, "bbox": [73, 155, 397, 320], "area": 30582}, {"id": 6909550, "category_id": 25, "iscrowd": 0, "bbox": [68, 207, 48, 32], "area": 836}, {"id": 10330273, "category_id": 175, "iscrowd": 0, "bbox": [73, 0, 567, 238], "area": 94010}, {"id": 8553858, "category_id": 185, "iscrowd": 0, "bbox": [0, 176, 640, 304], "area": 149315}, {"id": 7369073, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 328, 202], "area": 31941}], "file_name": "000000151662.png", "image_id": 151662}, {"segments_info": [{"id": 2831158, "category_id": 1, "iscrowd": 0, "bbox": [543, 151, 56, 104], "area": 2072}, {"id": 3359330, "category_id": 1, "iscrowd": 0, "bbox": [354, 141, 91, 90], "area": 4506}, {"id": 1842208, "category_id": 1, "iscrowd": 0, "bbox": [343, 159, 182, 268], "area": 15513}, {"id": 4077371, "category_id": 1, "iscrowd": 0, "bbox": [250, 139, 86, 96], "area": 5646}, {"id": 3287339, "category_id": 1, "iscrowd": 0, "bbox": [67, 145, 144, 239], "area": 17770}, {"id": 1776931, "category_id": 1, "iscrowd": 0, "bbox": [504, 176, 97, 179], "area": 7508}, {"id": 6571325, "category_id": 1, "iscrowd": 0, "bbox": [137, 132, 102, 131], "area": 6769}, {"id": 2834517, "category_id": 31, "iscrowd": 0, "bbox": [592, 272, 38, 146], "area": 2800}, {"id": 10922420, "category_id": 44, "iscrowd": 0, "bbox": [388, 201, 19, 46], "area": 419}, {"id": 12037295, "category_id": 46, "iscrowd": 0, "bbox": [227, 244, 16, 32], "area": 364}, {"id": 11115684, "category_id": 46, "iscrowd": 0, "bbox": [214, 227, 16, 30], "area": 340}, {"id": 9938866, "category_id": 46, "iscrowd": 0, "bbox": [332, 222, 15, 32], "area": 295}, {"id": 10857135, "category_id": 46, "iscrowd": 0, "bbox": [349, 240, 16, 30], "area": 343}, {"id": 14144469, "category_id": 47, "iscrowd": 0, "bbox": [303, 234, 18, 17], "area": 232}, {"id": 10133422, "category_id": 47, "iscrowd": 0, "bbox": [191, 252, 20, 14], "area": 114}, {"id": 13484739, "category_id": 47, "iscrowd": 0, "bbox": [246, 234, 15, 17], "area": 212}, {"id": 7697806, "category_id": 50, "iscrowd": 0, "bbox": [512, 223, 9, 9], "area": 35}, {"id": 9343391, "category_id": 50, "iscrowd": 0, "bbox": [217, 267, 10, 16], "area": 73}, {"id": 4539730, "category_id": 62, "iscrowd": 0, "bbox": [249, 189, 15, 27], "area": 252}, {"id": 1055536, "category_id": 62, "iscrowd": 0, "bbox": [131, 310, 152, 117], "area": 14280}, {"id": 2173746, "category_id": 62, "iscrowd": 0, "bbox": [597, 211, 40, 63], "area": 1776}, {"id": 527903, "category_id": 62, "iscrowd": 0, "bbox": [498, 271, 139, 154], "area": 9099}, {"id": 5792376, "category_id": 62, "iscrowd": 0, "bbox": [353, 186, 20, 21], "area": 280}, {"id": 1449005, "category_id": 62, "iscrowd": 0, "bbox": [35, 228, 40, 194], "area": 2422}, {"id": 791589, "category_id": 62, "iscrowd": 0, "bbox": [349, 292, 163, 129], "area": 13516}, {"id": 9934236, "category_id": 67, "iscrowd": 0, "bbox": [189, 219, 235, 87], "area": 10709}, {"id": 15461614, "category_id": 180, "iscrowd": 0, "bbox": [187, 0, 453, 154], "area": 47063}, {"id": 8689316, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 640, 323], "area": 36247}, {"id": 659483, "category_id": 189, "iscrowd": 0, "bbox": [275, 338, 86, 89], "area": 3208}, {"id": 1448744, "category_id": 190, "iscrowd": 0, "bbox": [0, 304, 640, 123], "area": 17321}, {"id": 10588824, "category_id": 195, "iscrowd": 0, "bbox": [155, 252, 35, 24], "area": 460}, {"id": 2042702, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 411], "area": 42415}, {"id": 329233, "category_id": 200, "iscrowd": 0, "bbox": [64, 356, 531, 71], "area": 1552}], "file_name": "000000151820.png", "image_id": 151820}, {"segments_info": [{"id": 8947848, "category_id": 7, "iscrowd": 0, "bbox": [51, 69, 589, 328], "area": 123060}, {"id": 8158332, "category_id": 144, "iscrowd": 0, "bbox": [0, 235, 640, 218], "area": 53434}, {"id": 3552822, "category_id": 147, "iscrowd": 0, "bbox": [0, 337, 260, 116], "area": 14705}, {"id": 657930, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 120], "area": 49908}, {"id": 15921906, "category_id": 187, "iscrowd": 0, "bbox": [538, 98, 102, 56], "area": 3731}, {"id": 12895428, "category_id": 197, "iscrowd": 0, "bbox": [489, 113, 151, 47], "area": 2019}, {"id": 1381653, "category_id": 199, "iscrowd": 0, "bbox": [0, 49, 173, 220], "area": 20538}], "file_name": "000000151857.png", "image_id": 151857}, {"segments_info": [{"id": 593190, "category_id": 1, "iscrowd": 0, "bbox": [320, 1, 150, 630], "area": 74047}, {"id": 594458, "category_id": 1, "iscrowd": 0, "bbox": [7, 3, 308, 626], "area": 106559}, {"id": 2829616, "category_id": 1, "iscrowd": 0, "bbox": [261, 158, 46, 72], "area": 1738}, {"id": 3620683, "category_id": 1, "iscrowd": 0, "bbox": [273, 168, 80, 119], "area": 5757}, {"id": 6120044, "category_id": 28, "iscrowd": 0, "bbox": [237, 107, 144, 54], "area": 5037}, {"id": 4419688, "category_id": 44, "iscrowd": 0, "bbox": [243, 177, 10, 48], "area": 345}, {"id": 7441812, "category_id": 46, "iscrowd": 0, "bbox": [247, 213, 13, 13], "area": 140}, {"id": 10865883, "category_id": 47, "iscrowd": 0, "bbox": [220, 439, 49, 85], "area": 3551}, {"id": 11844030, "category_id": 67, "iscrowd": 0, "bbox": [162, 173, 178, 250], "area": 30757}, {"id": 1977151, "category_id": 118, "iscrowd": 0, "bbox": [189, 419, 139, 113], "area": 6470}, {"id": 3434625, "category_id": 184, "iscrowd": 0, "bbox": [81, 17, 326, 90], "area": 5615}, {"id": 12765650, "category_id": 189, "iscrowd": 0, "bbox": [160, 220, 165, 329], "area": 4330}, {"id": 5333360, "category_id": 190, "iscrowd": 0, "bbox": [339, 141, 36, 46], "area": 764}, {"id": 3881788, "category_id": 197, "iscrowd": 0, "bbox": [156, 117, 207, 121], "area": 7796}, {"id": 4347495, "category_id": 199, "iscrowd": 0, "bbox": [35, 0, 427, 147], "area": 30051}], "file_name": "000000151938.png", "image_id": 151938}, {"segments_info": [{"id": 470847, "category_id": 1, "iscrowd": 0, "bbox": [54, 379, 37, 90], "area": 1484}, {"id": 2705730, "category_id": 3, "iscrowd": 0, "bbox": [65, 98, 405, 374], "area": 116997}, {"id": 3502965, "category_id": 18, "iscrowd": 0, "bbox": [343, 240, 107, 119], "area": 7150}, {"id": 6992294, "category_id": 149, "iscrowd": 0, "bbox": [465, 366, 43, 107], "area": 3489}, {"id": 4823936, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 479], "area": 92042}, {"id": 12446171, "category_id": 187, "iscrowd": 0, "bbox": [306, 111, 201, 235], "area": 20469}], "file_name": "000000151962.png", "image_id": 151962}, {"segments_info": [{"id": 6839632, "category_id": 1, "iscrowd": 0, "bbox": [225, 26, 241, 286], "area": 28269}, {"id": 5132618, "category_id": 4, "iscrowd": 0, "bbox": [74, 143, 524, 278], "area": 78266}, {"id": 6975613, "category_id": 149, "iscrowd": 0, "bbox": [0, 341, 640, 86], "area": 28557}, {"id": 8495007, "category_id": 185, "iscrowd": 0, "bbox": [256, 45, 297, 216], "area": 4956}, {"id": 8032667, "category_id": 191, "iscrowd": 0, "bbox": [0, 314, 640, 60], "area": 4642}, {"id": 6922902, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 350], "area": 125816}], "file_name": "000000152120.png", "image_id": 152120}, {"segments_info": [{"id": 5721429, "category_id": 1, "iscrowd": 0, "bbox": [75, 4, 399, 623], "area": 157383}, {"id": 4079473, "category_id": 32, "iscrowd": 0, "bbox": [193, 367, 95, 272], "area": 16666}, {"id": 5204893, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 125638}], "file_name": "000000152214.png", "image_id": 152214}, {"segments_info": [{"id": 8881559, "category_id": 11, "iscrowd": 0, "bbox": [414, 31, 130, 408], "area": 32292}, {"id": 9012363, "category_id": 128, "iscrowd": 0, "bbox": [373, 22, 115, 48], "area": 2311}, {"id": 13615026, "category_id": 149, "iscrowd": 0, "bbox": [538, 138, 102, 54], "area": 2376}, {"id": 5988699, "category_id": 184, "iscrowd": 0, "bbox": [305, 19, 335, 167], "area": 13705}, {"id": 8486779, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 545, 217], "area": 71668}, {"id": 16119284, "category_id": 187, "iscrowd": 0, "bbox": [355, 0, 285, 102], "area": 11759}, {"id": 5856086, "category_id": 193, "iscrowd": 0, "bbox": [338, 349, 82, 70], "area": 3753}, {"id": 9277327, "category_id": 194, "iscrowd": 0, "bbox": [0, 126, 640, 390], "area": 175115}], "file_name": "000000152465.png", "image_id": 152465}, {"segments_info": [{"id": 11770518, "category_id": 1, "iscrowd": 0, "bbox": [0, 111, 35, 278], "area": 7188}, {"id": 7896513, "category_id": 1, "iscrowd": 0, "bbox": [231, 23, 176, 366], "area": 25203}, {"id": 7786176, "category_id": 37, "iscrowd": 0, "bbox": [614, 90, 22, 18], "area": 286}, {"id": 9738911, "category_id": 43, "iscrowd": 0, "bbox": [311, 12, 84, 49], "area": 2015}, {"id": 3818091, "category_id": 190, "iscrowd": 0, "bbox": [0, 363, 640, 37], "area": 16625}, {"id": 7236625, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 383], "area": 203420}], "file_name": "000000152686.png", "image_id": 152686}, {"segments_info": [{"id": 2502710, "category_id": 21, "iscrowd": 0, "bbox": [147, 177, 36, 66], "area": 1625}, {"id": 2108477, "category_id": 21, "iscrowd": 0, "bbox": [177, 130, 53, 37], "area": 1302}, {"id": 1712420, "category_id": 21, "iscrowd": 0, "bbox": [403, 224, 55, 57], "area": 1883}, {"id": 3030859, "category_id": 21, "iscrowd": 0, "bbox": [301, 148, 71, 52], "area": 2156}, {"id": 5074056, "category_id": 21, "iscrowd": 0, "bbox": [486, 253, 23, 30], "area": 540}, {"id": 1975850, "category_id": 21, "iscrowd": 0, "bbox": [457, 147, 52, 46], "area": 1456}, {"id": 2832971, "category_id": 21, "iscrowd": 0, "bbox": [166, 120, 45, 32], "area": 586}, {"id": 1844006, "category_id": 21, "iscrowd": 0, "bbox": [167, 166, 82, 51], "area": 2459}, {"id": 3230042, "category_id": 21, "iscrowd": 0, "bbox": [582, 248, 58, 40], "area": 1412}, {"id": 2700347, "category_id": 21, "iscrowd": 0, "bbox": [250, 86, 66, 37], "area": 1590}, {"id": 2898760, "category_id": 21, "iscrowd": 0, "bbox": [241, 92, 26, 23], "area": 204}, {"id": 3294291, "category_id": 21, "iscrowd": 0, "bbox": [534, 114, 40, 36], "area": 860}, {"id": 2570047, "category_id": 21, "iscrowd": 0, "bbox": [351, 124, 18, 26], "area": 380}, {"id": 2305075, "category_id": 21, "iscrowd": 0, "bbox": [92, 109, 23, 34], "area": 544}, {"id": 4020069, "category_id": 21, "iscrowd": 1, "bbox": [196, 105, 253, 94], "area": 5623}, {"id": 6395307, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 331], "area": 188588}], "file_name": "000000152740.png", "image_id": 152740}, {"segments_info": [{"id": 6784397, "category_id": 2, "iscrowd": 0, "bbox": [336, 284, 113, 84], "area": 3286}, {"id": 2896948, "category_id": 3, "iscrowd": 0, "bbox": [607, 275, 31, 28], "area": 622}, {"id": 5069916, "category_id": 3, "iscrowd": 0, "bbox": [568, 274, 31, 28], "area": 600}, {"id": 4281167, "category_id": 3, "iscrowd": 0, "bbox": [2, 260, 64, 32], "area": 1186}, {"id": 1526106, "category_id": 11, "iscrowd": 0, "bbox": [241, 295, 19, 33], "area": 361}, {"id": 1194586, "category_id": 11, "iscrowd": 0, "bbox": [614, 296, 9, 22], "area": 100}, {"id": 8235959, "category_id": 149, "iscrowd": 0, "bbox": [197, 286, 443, 43], "area": 3451}, {"id": 1255973, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 436], "area": 191939}, {"id": 7575207, "category_id": 191, "iscrowd": 0, "bbox": [0, 301, 640, 178], "area": 86473}, {"id": 3174521, "category_id": 193, "iscrowd": 0, "bbox": [0, 269, 640, 84], "area": 18305}], "file_name": "000000152771.png", "image_id": 152771}, {"segments_info": [{"id": 3884896, "category_id": 25, "iscrowd": 0, "bbox": [210, 26, 209, 592], "area": 42016}, {"id": 5657697, "category_id": 25, "iscrowd": 0, "bbox": [143, 268, 45, 71], "area": 935}, {"id": 5261370, "category_id": 184, "iscrowd": 0, "bbox": [0, 126, 512, 185], "area": 64585}, {"id": 16053235, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 512, 173], "area": 61462}, {"id": 15457747, "category_id": 192, "iscrowd": 0, "bbox": [0, 75, 226, 80], "area": 9091}], "file_name": "000000152870.png", "image_id": 152870}, {"segments_info": [{"id": 1842987, "category_id": 1, "iscrowd": 0, "bbox": [25, 220, 47, 93], "area": 1892}, {"id": 1973533, "category_id": 1, "iscrowd": 0, "bbox": [97, 201, 107, 182], "area": 6480}, {"id": 4406857, "category_id": 1, "iscrowd": 0, "bbox": [20, 230, 18, 53], "area": 421}, {"id": 2236968, "category_id": 1, "iscrowd": 0, "bbox": [0, 205, 26, 150], "area": 3011}, {"id": 1513241, "category_id": 1, "iscrowd": 0, "bbox": [217, 193, 30, 96], "area": 1671}, {"id": 3289657, "category_id": 1, "iscrowd": 0, "bbox": [137, 217, 45, 106], "area": 1206}, {"id": 3619138, "category_id": 1, "iscrowd": 0, "bbox": [414, 202, 29, 137], "area": 1725}, {"id": 658190, "category_id": 1, "iscrowd": 0, "bbox": [165, 192, 31, 50], "area": 1032}, {"id": 724238, "category_id": 1, "iscrowd": 0, "bbox": [430, 209, 44, 141], "area": 3494}, {"id": 8551275, "category_id": 3, "iscrowd": 0, "bbox": [326, 217, 72, 36], "area": 1689}, {"id": 11316904, "category_id": 3, "iscrowd": 0, "bbox": [463, 215, 19, 26], "area": 394}, {"id": 11318200, "category_id": 3, "iscrowd": 0, "bbox": [365, 214, 56, 24], "area": 758}, {"id": 5657423, "category_id": 3, "iscrowd": 0, "bbox": [363, 212, 18, 9], "area": 132}, {"id": 10262161, "category_id": 8, "iscrowd": 0, "bbox": [0, 113, 317, 165], "area": 32095}, {"id": 4480342, "category_id": 8, "iscrowd": 0, "bbox": [480, 118, 160, 185], "area": 24414}, {"id": 11442800, "category_id": 31, "iscrowd": 0, "bbox": [174, 235, 31, 38], "area": 922}, {"id": 2172197, "category_id": 31, "iscrowd": 0, "bbox": [467, 234, 17, 46], "area": 403}, {"id": 4736337, "category_id": 62, "iscrowd": 0, "bbox": [41, 254, 53, 91], "area": 2141}, {"id": 5131867, "category_id": 62, "iscrowd": 0, "bbox": [75, 283, 90, 126], "area": 6309}, {"id": 6249045, "category_id": 67, "iscrowd": 0, "bbox": [513, 265, 79, 116], "area": 1890}, {"id": 5261900, "category_id": 67, "iscrowd": 0, "bbox": [25, 254, 22, 8], "area": 127}, {"id": 9407620, "category_id": 67, "iscrowd": 0, "bbox": [346, 241, 49, 69], "area": 521}, {"id": 3485997, "category_id": 67, "iscrowd": 0, "bbox": [222, 236, 50, 73], "area": 752}, {"id": 8156781, "category_id": 67, "iscrowd": 0, "bbox": [367, 249, 47, 86], "area": 761}, {"id": 3158354, "category_id": 119, "iscrowd": 0, "bbox": [324, 191, 19, 20], "area": 297}, {"id": 7171953, "category_id": 149, "iscrowd": 0, "bbox": [377, 234, 38, 21], "area": 278}, {"id": 5331817, "category_id": 151, "iscrowd": 0, "bbox": [324, 171, 58, 31], "area": 1036}, {"id": 5923700, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 239, 143], "area": 28291}, {"id": 5471604, "category_id": 184, "iscrowd": 0, "bbox": [229, 0, 411, 237], "area": 40004}, {"id": 15988470, "category_id": 187, "iscrowd": 0, "bbox": [229, 0, 313, 183], "area": 19561}, {"id": 7171956, "category_id": 191, "iscrowd": 0, "bbox": [0, 247, 640, 233], "area": 111677}, {"id": 2578749, "category_id": 193, "iscrowd": 0, "bbox": [332, 245, 74, 24], "area": 403}, {"id": 5400944, "category_id": 197, "iscrowd": 0, "bbox": [360, 161, 125, 66], "area": 1578}, {"id": 3752777, "category_id": 199, "iscrowd": 0, "bbox": [326, 193, 72, 30], "area": 1013}], "file_name": "000000153011.png", "image_id": 153011}, {"segments_info": [{"id": 5922905, "category_id": 4, "iscrowd": 0, "bbox": [41, 2, 334, 416], "area": 76437}, {"id": 2763819, "category_id": 17, "iscrowd": 0, "bbox": [17, 315, 143, 174], "area": 13401}, {"id": 6058633, "category_id": 171, "iscrowd": 0, "bbox": [10, 0, 365, 156], "area": 17484}, {"id": 8491141, "category_id": 181, "iscrowd": 0, "bbox": [153, 0, 194, 136], "area": 11644}, {"id": 6845042, "category_id": 191, "iscrowd": 0, "bbox": [0, 309, 375, 191], "area": 17843}, {"id": 6007419, "category_id": 193, "iscrowd": 0, "bbox": [0, 279, 375, 221], "area": 27038}], "file_name": "000000153217.png", "image_id": 153217}, {"segments_info": [{"id": 2771783, "category_id": 1, "iscrowd": 0, "bbox": [339, 147, 155, 297], "area": 16396}, {"id": 1383033, "category_id": 1, "iscrowd": 0, "bbox": [517, 218, 123, 236], "area": 16548}, {"id": 2306411, "category_id": 1, "iscrowd": 0, "bbox": [169, 33, 131, 372], "area": 14241}, {"id": 10858416, "category_id": 1, "iscrowd": 0, "bbox": [519, 178, 61, 211], "area": 4222}, {"id": 2506557, "category_id": 1, "iscrowd": 0, "bbox": [234, 31, 103, 361], "area": 14748}, {"id": 10069410, "category_id": 1, "iscrowd": 0, "bbox": [121, 224, 69, 170], "area": 5802}, {"id": 10005423, "category_id": 1, "iscrowd": 0, "bbox": [118, 206, 83, 176], "area": 2986}, {"id": 12110029, "category_id": 34, "iscrowd": 0, "bbox": [524, 238, 17, 34], "area": 322}, {"id": 14540510, "category_id": 34, "iscrowd": 0, "bbox": [340, 10, 43, 10], "area": 302}, {"id": 4414306, "category_id": 128, "iscrowd": 0, "bbox": [17, 29, 623, 211], "area": 53092}, {"id": 5200216, "category_id": 151, "iscrowd": 0, "bbox": [406, 0, 69, 37], "area": 1891}, {"id": 1187354, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 230], "area": 67594}, {"id": 3301733, "category_id": 185, "iscrowd": 0, "bbox": [0, 212, 640, 87], "area": 18586}, {"id": 2657392, "category_id": 193, "iscrowd": 0, "bbox": [0, 282, 640, 175], "area": 70772}], "file_name": "000000153229.png", "image_id": 153229}, {"segments_info": [{"id": 6123923, "category_id": 25, "iscrowd": 0, "bbox": [31, 33, 370, 447], "area": 41796}, {"id": 7050420, "category_id": 25, "iscrowd": 0, "bbox": [58, 209, 214, 280], "area": 21405}, {"id": 2645136, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 461, 469], "area": 136337}, {"id": 9089474, "category_id": 194, "iscrowd": 0, "bbox": [0, 459, 461, 41], "area": 13856}, {"id": 6654617, "category_id": 199, "iscrowd": 0, "bbox": [133, 381, 328, 100], "area": 16172}], "file_name": "000000153299.png", "image_id": 153299}, {"segments_info": [{"id": 4017513, "category_id": 88, "iscrowd": 0, "bbox": [362, 162, 202, 221], "area": 26665}, {"id": 2835276, "category_id": 88, "iscrowd": 0, "bbox": [65, 163, 222, 224], "area": 28012}, {"id": 1784376, "category_id": 119, "iscrowd": 0, "bbox": [0, 358, 640, 80], "area": 31583}, {"id": 3029831, "category_id": 130, "iscrowd": 0, "bbox": [51, 33, 414, 29], "area": 2499}, {"id": 7646398, "category_id": 181, "iscrowd": 0, "bbox": [569, 137, 71, 157], "area": 9972}, {"id": 1316630, "category_id": 184, "iscrowd": 0, "bbox": [44, 29, 540, 352], "area": 107021}, {"id": 1909026, "category_id": 191, "iscrowd": 0, "bbox": [0, 406, 640, 74], "area": 32477}, {"id": 2105375, "category_id": 194, "iscrowd": 0, "bbox": [534, 414, 48, 50], "area": 1367}, {"id": 1384228, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 333], "area": 59616}], "file_name": "000000153343.png", "image_id": 153343}, {"segments_info": [{"id": 3172439, "category_id": 56, "iscrowd": 0, "bbox": [382, 10, 100, 60], "area": 2981}, {"id": 2781302, "category_id": 56, "iscrowd": 0, "bbox": [67, 57, 52, 57], "area": 1427}, {"id": 4095127, "category_id": 56, "iscrowd": 0, "bbox": [478, 229, 61, 72], "area": 3021}, {"id": 4621452, "category_id": 56, "iscrowd": 0, "bbox": [419, 44, 129, 162], "area": 9592}, {"id": 4623781, "category_id": 56, "iscrowd": 0, "bbox": [240, 118, 120, 134], "area": 10976}, {"id": 1655984, "category_id": 57, "iscrowd": 0, "bbox": [270, 304, 74, 27], "area": 1141}, {"id": 6396341, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 226071}], "file_name": "000000153510.png", "image_id": 153510}, {"segments_info": [{"id": 2298649, "category_id": 1, "iscrowd": 0, "bbox": [460, 50, 18, 52], "area": 422}, {"id": 2824740, "category_id": 1, "iscrowd": 0, "bbox": [423, 47, 27, 37], "area": 428}, {"id": 3089726, "category_id": 1, "iscrowd": 0, "bbox": [479, 52, 21, 37], "area": 365}, {"id": 6971517, "category_id": 1, "iscrowd": 0, "bbox": [472, 54, 10, 21], "area": 122}, {"id": 2368820, "category_id": 2, "iscrowd": 0, "bbox": [91, 64, 18, 44], "area": 432}, {"id": 5191746, "category_id": 44, "iscrowd": 0, "bbox": [161, 300, 30, 38], "area": 687}, {"id": 4081764, "category_id": 49, "iscrowd": 0, "bbox": [144, 220, 64, 10], "area": 460}, {"id": 1049645, "category_id": 62, "iscrowd": 0, "bbox": [448, 69, 19, 31], "area": 351}, {"id": 918815, "category_id": 62, "iscrowd": 0, "bbox": [470, 70, 30, 31], "area": 407}, {"id": 3948367, "category_id": 62, "iscrowd": 0, "bbox": [371, 69, 34, 55], "area": 1452}, {"id": 3289414, "category_id": 62, "iscrowd": 0, "bbox": [284, 63, 35, 59], "area": 1309}, {"id": 3290957, "category_id": 62, "iscrowd": 0, "bbox": [407, 69, 45, 54], "area": 832}, {"id": 3747636, "category_id": 62, "iscrowd": 0, "bbox": [408, 64, 16, 36], "area": 372}, {"id": 854563, "category_id": 62, "iscrowd": 0, "bbox": [202, 60, 45, 47], "area": 1632}, {"id": 4605528, "category_id": 100, "iscrowd": 0, "bbox": [163, 93, 89, 39], "area": 2022}, {"id": 4610143, "category_id": 161, "iscrowd": 0, "bbox": [386, 151, 114, 38], "area": 1815}, {"id": 2761525, "category_id": 171, "iscrowd": 0, "bbox": [25, 0, 397, 87], "area": 7815}, {"id": 3355190, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 85], "area": 8434}, {"id": 7235954, "category_id": 191, "iscrowd": 0, "bbox": [0, 83, 250, 292], "area": 35788}, {"id": 4613231, "category_id": 193, "iscrowd": 0, "bbox": [77, 75, 423, 300], "area": 35761}, {"id": 5332339, "category_id": 194, "iscrowd": 0, "bbox": [351, 94, 117, 47], "area": 1414}, {"id": 4008743, "category_id": 199, "iscrowd": 0, "bbox": [308, 0, 192, 86], "area": 8470}], "file_name": "000000153527.png", "image_id": 153527}, {"segments_info": [{"id": 4011586, "category_id": 1, "iscrowd": 0, "bbox": [1, 98, 55, 309], "area": 8783}, {"id": 5067592, "category_id": 1, "iscrowd": 0, "bbox": [239, 127, 14, 14], "area": 68}, {"id": 11646651, "category_id": 1, "iscrowd": 0, "bbox": [281, 39, 146, 541], "area": 51042}, {"id": 5988186, "category_id": 1, "iscrowd": 0, "bbox": [121, 115, 24, 142], "area": 1527}, {"id": 9475221, "category_id": 1, "iscrowd": 0, "bbox": [1, 278, 48, 57], "area": 519}, {"id": 3026476, "category_id": 1, "iscrowd": 0, "bbox": [192, 92, 51, 162], "area": 4631}, {"id": 5655613, "category_id": 1, "iscrowd": 0, "bbox": [134, 82, 59, 200], "area": 7977}, {"id": 4473138, "category_id": 1, "iscrowd": 0, "bbox": [98, 137, 9, 23], "area": 113}, {"id": 3945775, "category_id": 27, "iscrowd": 0, "bbox": [101, 239, 46, 42], "area": 860}, {"id": 4999494, "category_id": 27, "iscrowd": 0, "bbox": [169, 281, 124, 207], "area": 17404}, {"id": 4602163, "category_id": 27, "iscrowd": 0, "bbox": [139, 354, 38, 122], "area": 2830}, {"id": 2894639, "category_id": 31, "iscrowd": 0, "bbox": [0, 159, 62, 118], "area": 1958}, {"id": 4013886, "category_id": 31, "iscrowd": 0, "bbox": [297, 252, 9, 47], "area": 285}, {"id": 3026217, "category_id": 33, "iscrowd": 0, "bbox": [156, 389, 132, 242], "area": 20519}, {"id": 3157543, "category_id": 33, "iscrowd": 0, "bbox": [73, 254, 57, 41], "area": 1725}, {"id": 6974310, "category_id": 33, "iscrowd": 0, "bbox": [224, 187, 51, 73], "area": 3210}, {"id": 8883853, "category_id": 144, "iscrowd": 0, "bbox": [0, 219, 480, 421], "area": 94549}, {"id": 5858669, "category_id": 147, "iscrowd": 0, "bbox": [44, 164, 428, 91], "area": 5949}, {"id": 16513788, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 293, 52], "area": 12407}, {"id": 7830643, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 287], "area": 61688}], "file_name": "000000153529.png", "image_id": 153529}, {"segments_info": [{"id": 8747678, "category_id": 13, "iscrowd": 0, "bbox": [0, 3, 500, 368], "area": 149723}, {"id": 8166598, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 99, 400], "area": 15562}, {"id": 12635109, "category_id": 191, "iscrowd": 0, "bbox": [70, 0, 430, 400], "area": 32608}], "file_name": "000000153568.png", "image_id": 153568}, {"segments_info": [{"id": 2306375, "category_id": 48, "iscrowd": 0, "bbox": [1, 124, 22, 76], "area": 923}, {"id": 1448480, "category_id": 49, "iscrowd": 0, "bbox": [14, 3, 314, 187], "area": 9284}, {"id": 3102853, "category_id": 51, "iscrowd": 0, "bbox": [44, 0, 173, 50], "area": 6126}, {"id": 7438478, "category_id": 67, "iscrowd": 0, "bbox": [0, 2, 639, 469], "area": 282415}, {"id": 6581632, "category_id": 189, "iscrowd": 0, "bbox": [201, 0, 439, 15], "area": 1296}], "file_name": "000000153632.png", "image_id": 153632}, {"segments_info": [{"id": 4803774, "category_id": 1, "iscrowd": 0, "bbox": [321, 1, 69, 85], "area": 3462}, {"id": 5396335, "category_id": 1, "iscrowd": 0, "bbox": [0, 127, 78, 173], "area": 7591}, {"id": 4342613, "category_id": 1, "iscrowd": 0, "bbox": [502, 206, 38, 66], "area": 922}, {"id": 3881374, "category_id": 1, "iscrowd": 0, "bbox": [280, 1, 56, 65], "area": 2021}, {"id": 2303548, "category_id": 1, "iscrowd": 0, "bbox": [578, 207, 36, 103], "area": 2689}, {"id": 5199217, "category_id": 1, "iscrowd": 0, "bbox": [51, 119, 68, 183], "area": 6374}, {"id": 10530768, "category_id": 1, "iscrowd": 0, "bbox": [238, 41, 56, 44], "area": 1334}, {"id": 7041155, "category_id": 1, "iscrowd": 0, "bbox": [281, 102, 82, 199], "area": 7802}, {"id": 9207672, "category_id": 1, "iscrowd": 0, "bbox": [345, 55, 213, 349], "area": 27739}, {"id": 5065820, "category_id": 1, "iscrowd": 0, "bbox": [451, 200, 52, 108], "area": 3319}, {"id": 5003884, "category_id": 1, "iscrowd": 0, "bbox": [421, 28, 52, 59], "area": 1884}, {"id": 4937324, "category_id": 1, "iscrowd": 0, "bbox": [110, 128, 75, 172], "area": 7370}, {"id": 4144222, "category_id": 1, "iscrowd": 0, "bbox": [490, 192, 100, 118], "area": 6402}, {"id": 6184048, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 639, 336], "area": 49545}, {"id": 4146758, "category_id": 15, "iscrowd": 0, "bbox": [207, 241, 76, 60], "area": 3408}, {"id": 7895177, "category_id": 39, "iscrowd": 0, "bbox": [424, 25, 94, 101], "area": 1799}, {"id": 2239535, "category_id": 40, "iscrowd": 0, "bbox": [590, 304, 35, 43], "area": 1056}, {"id": 5397332, "category_id": 145, "iscrowd": 0, "bbox": [0, 307, 640, 80], "area": 21430}, {"id": 3817516, "category_id": 185, "iscrowd": 0, "bbox": [0, 158, 627, 185], "area": 35924}, {"id": 3758148, "category_id": 193, "iscrowd": 0, "bbox": [0, 334, 640, 42], "area": 8873}, {"id": 3291980, "category_id": 194, "iscrowd": 0, "bbox": [0, 366, 640, 61], "area": 31312}, {"id": 1316881, "category_id": 199, "iscrowd": 0, "bbox": [0, 78, 640, 110], "area": 37407}], "file_name": "000000153669.png", "image_id": 153669}, {"segments_info": [{"id": 9736063, "category_id": 85, "iscrowd": 0, "bbox": [113, 203, 51, 48], "area": 1900}, {"id": 13551529, "category_id": 85, "iscrowd": 0, "bbox": [75, 217, 9, 44], "area": 302}, {"id": 5455171, "category_id": 130, "iscrowd": 0, "bbox": [146, 154, 259, 188], "area": 15900}, {"id": 16226183, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 416, 541], "area": 93954}, {"id": 6715250, "category_id": 197, "iscrowd": 0, "bbox": [0, 44, 416, 596], "area": 130315}], "file_name": "000000153782.png", "image_id": 153782}, {"segments_info": [{"id": 10391715, "category_id": 1, "iscrowd": 0, "bbox": [323, 107, 113, 221], "area": 9976}, {"id": 12898782, "category_id": 37, "iscrowd": 0, "bbox": [142, 97, 13, 12], "area": 125}, {"id": 5854303, "category_id": 40, "iscrowd": 0, "bbox": [387, 182, 30, 44], "area": 739}, {"id": 4818046, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 500, 400], "area": 134225}, {"id": 7576798, "category_id": 194, "iscrowd": 0, "bbox": [68, 233, 432, 167], "area": 54705}], "file_name": "000000153797.png", "image_id": 153797}, {"segments_info": [{"id": 5855065, "category_id": 8, "iscrowd": 0, "bbox": [34, 63, 511, 376], "area": 116524}, {"id": 8026229, "category_id": 8, "iscrowd": 0, "bbox": [497, 178, 76, 195], "area": 5089}, {"id": 3290413, "category_id": 8, "iscrowd": 0, "bbox": [602, 268, 38, 24], "area": 744}, {"id": 8027002, "category_id": 184, "iscrowd": 0, "bbox": [0, 266, 606, 36], "area": 1336}, {"id": 7233872, "category_id": 185, "iscrowd": 0, "bbox": [0, 288, 640, 78], "area": 6087}, {"id": 15196122, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 296], "area": 115611}, {"id": 4874088, "category_id": 193, "iscrowd": 0, "bbox": [0, 285, 59, 36], "area": 1192}, {"id": 7964820, "category_id": 194, "iscrowd": 0, "bbox": [0, 343, 640, 137], "area": 59667}], "file_name": "000000154000.png", "image_id": 154000}, {"segments_info": [{"id": 7378577, "category_id": 1, "iscrowd": 0, "bbox": [124, 56, 46, 187], "area": 6013}, {"id": 7305351, "category_id": 1, "iscrowd": 0, "bbox": [72, 107, 51, 48], "area": 1102}, {"id": 8423841, "category_id": 1, "iscrowd": 0, "bbox": [205, 71, 24, 94], "area": 1406}, {"id": 4080722, "category_id": 1, "iscrowd": 0, "bbox": [325, 113, 21, 29], "area": 135}, {"id": 5068907, "category_id": 1, "iscrowd": 0, "bbox": [225, 184, 99, 111], "area": 6178}, {"id": 4936547, "category_id": 1, "iscrowd": 0, "bbox": [315, 172, 89, 97], "area": 2820}, {"id": 4803930, "category_id": 1, "iscrowd": 0, "bbox": [189, 71, 23, 88], "area": 1016}, {"id": 7963278, "category_id": 1, "iscrowd": 0, "bbox": [356, 102, 38, 30], "area": 367}, {"id": 5858682, "category_id": 1, "iscrowd": 0, "bbox": [322, 126, 62, 65], "area": 1686}, {"id": 7764864, "category_id": 1, "iscrowd": 0, "bbox": [266, 107, 26, 36], "area": 643}, {"id": 5463667, "category_id": 1, "iscrowd": 0, "bbox": [318, 115, 37, 35], "area": 478}, {"id": 8359324, "category_id": 1, "iscrowd": 0, "bbox": [454, 119, 61, 41], "area": 516}, {"id": 5075060, "category_id": 1, "iscrowd": 0, "bbox": [166, 64, 31, 99], "area": 1849}, {"id": 5988486, "category_id": 1, "iscrowd": 1, "bbox": [1, 50, 446, 289], "area": 18715}, {"id": 3692658, "category_id": 42, "iscrowd": 0, "bbox": [296, 93, 104, 34], "area": 1308}, {"id": 6449255, "category_id": 128, "iscrowd": 0, "bbox": [117, 33, 161, 70], "area": 4861}, {"id": 9415101, "category_id": 154, "iscrowd": 0, "bbox": [0, 82, 640, 345], "area": 164662}, {"id": 10656921, "category_id": 155, "iscrowd": 0, "bbox": [371, 101, 269, 38], "area": 6110}, {"id": 4938328, "category_id": 184, "iscrowd": 0, "bbox": [460, 64, 22, 17], "area": 202}, {"id": 11311756, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 33], "area": 6997}, {"id": 4482908, "category_id": 193, "iscrowd": 0, "bbox": [336, 68, 304, 33], "area": 3659}], "file_name": "000000154004.png", "image_id": 154004}, {"segments_info": [{"id": 3157553, "category_id": 1, "iscrowd": 0, "bbox": [220, 302, 36, 96], "area": 2200}, {"id": 5130828, "category_id": 1, "iscrowd": 0, "bbox": [19, 291, 22, 102], "area": 1119}, {"id": 3358274, "category_id": 1, "iscrowd": 0, "bbox": [249, 291, 44, 114], "area": 3001}, {"id": 1447207, "category_id": 1, "iscrowd": 0, "bbox": [0, 281, 89, 135], "area": 5663}, {"id": 5001037, "category_id": 35, "iscrowd": 0, "bbox": [0, 414, 67, 5], "area": 173}, {"id": 11183523, "category_id": 159, "iscrowd": 0, "bbox": [0, 377, 640, 103], "area": 48999}, {"id": 8814970, "category_id": 185, "iscrowd": 0, "bbox": [31, 361, 16, 26], "area": 230}, {"id": 13683656, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 255], "area": 120515}, {"id": 11381676, "category_id": 192, "iscrowd": 0, "bbox": [0, 124, 640, 293], "area": 124110}], "file_name": "000000154087.png", "image_id": 154087}, {"segments_info": [{"id": 4473932, "category_id": 87, "iscrowd": 0, "bbox": [384, 122, 116, 213], "area": 7764}, {"id": 10006235, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 92321}, {"id": 8560580, "category_id": 196, "iscrowd": 0, "bbox": [26, 26, 371, 314], "area": 87274}], "file_name": "000000154213.png", "image_id": 154213}, {"segments_info": [{"id": 7292516, "category_id": 85, "iscrowd": 0, "bbox": [149, 79, 317, 287], "area": 65380}, {"id": 7817588, "category_id": 85, "iscrowd": 0, "bbox": [489, 256, 132, 126], "area": 12975}], "file_name": "000000154339.png", "image_id": 154339}, {"segments_info": [{"id": 1250855, "category_id": 1, "iscrowd": 0, "bbox": [21, 299, 51, 69], "area": 1265}, {"id": 1384528, "category_id": 31, "iscrowd": 0, "bbox": [241, 362, 38, 43], "area": 834}, {"id": 1252144, "category_id": 31, "iscrowd": 0, "bbox": [97, 425, 80, 72], "area": 4603}, {"id": 790557, "category_id": 31, "iscrowd": 0, "bbox": [275, 391, 37, 24], "area": 740}, {"id": 660246, "category_id": 31, "iscrowd": 0, "bbox": [40, 448, 61, 46], "area": 2067}, {"id": 793400, "category_id": 62, "iscrowd": 0, "bbox": [332, 469, 51, 104], "area": 2984}, {"id": 1448280, "category_id": 62, "iscrowd": 0, "bbox": [2, 306, 77, 61], "area": 1793}, {"id": 1909095, "category_id": 62, "iscrowd": 0, "bbox": [158, 304, 65, 70], "area": 3099}, {"id": 2108765, "category_id": 62, "iscrowd": 0, "bbox": [262, 299, 28, 62], "area": 870}, {"id": 5600933, "category_id": 64, "iscrowd": 0, "bbox": [243, 271, 36, 41], "area": 777}, {"id": 2770808, "category_id": 64, "iscrowd": 0, "bbox": [60, 365, 24, 27], "area": 261}, {"id": 10987711, "category_id": 67, "iscrowd": 0, "bbox": [21, 379, 110, 53], "area": 4416}, {"id": 7561825, "category_id": 84, "iscrowd": 0, "bbox": [24, 383, 32, 10], "area": 174}, {"id": 3552327, "category_id": 84, "iscrowd": 0, "bbox": [38, 315, 33, 14], "area": 340}, {"id": 1518670, "category_id": 86, "iscrowd": 0, "bbox": [64, 378, 14, 13], "area": 146}, {"id": 2304841, "category_id": 86, "iscrowd": 0, "bbox": [254, 290, 11, 16], "area": 118}, {"id": 4079698, "category_id": 86, "iscrowd": 0, "bbox": [307, 282, 11, 20], "area": 156}, {"id": 2496810, "category_id": 86, "iscrowd": 0, "bbox": [365, 270, 26, 44], "area": 813}, {"id": 1914976, "category_id": 100, "iscrowd": 0, "bbox": [368, 0, 59, 640], "area": 24970}, {"id": 8159124, "category_id": 109, "iscrowd": 0, "bbox": [287, 279, 22, 40], "area": 566}, {"id": 1452130, "category_id": 118, "iscrowd": 0, "bbox": [0, 339, 398, 301], "area": 53160}, {"id": 1386837, "category_id": 119, "iscrowd": 0, "bbox": [367, 237, 28, 35], "area": 712}, {"id": 5074603, "category_id": 133, "iscrowd": 0, "bbox": [325, 141, 75, 152], "area": 5872}, {"id": 12898530, "category_id": 180, "iscrowd": 0, "bbox": [0, 157, 248, 204], "area": 20163}, {"id": 8030371, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 408, 156], "area": 54168}, {"id": 4876980, "category_id": 199, "iscrowd": 0, "bbox": [0, 62, 408, 303], "area": 43915}, {"id": 2305099, "category_id": 200, "iscrowd": 0, "bbox": [0, 349, 308, 242], "area": 33609}], "file_name": "000000154358.png", "image_id": 154358}, {"segments_info": [{"id": 6186093, "category_id": 1, "iscrowd": 0, "bbox": [140, 1, 272, 419], "area": 46420}, {"id": 14672345, "category_id": 38, "iscrowd": 0, "bbox": [362, 151, 244, 207], "area": 8026}, {"id": 4670018, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 640, 245], "area": 106536}, {"id": 14081759, "category_id": 191, "iscrowd": 0, "bbox": [0, 239, 640, 186], "area": 75950}, {"id": 3044169, "category_id": 193, "iscrowd": 0, "bbox": [0, 190, 640, 132], "area": 32490}, {"id": 10921375, "category_id": 197, "iscrowd": 0, "bbox": [147, 0, 113, 13], "area": 403}], "file_name": "000000154425.png", "image_id": 154425}, {"segments_info": [{"id": 4405811, "category_id": 72, "iscrowd": 0, "bbox": [77, 28, 188, 198], "area": 31558}, {"id": 7829363, "category_id": 75, "iscrowd": 0, "bbox": [126, 322, 49, 23], "area": 556}, {"id": 3355186, "category_id": 75, "iscrowd": 0, "bbox": [195, 264, 44, 16], "area": 516}, {"id": 8158075, "category_id": 84, "iscrowd": 0, "bbox": [200, 353, 29, 18], "area": 234}, {"id": 3553332, "category_id": 84, "iscrowd": 0, "bbox": [114, 267, 65, 25], "area": 1166}, {"id": 10065814, "category_id": 84, "iscrowd": 0, "bbox": [202, 341, 33, 18], "area": 328}, {"id": 4604994, "category_id": 84, "iscrowd": 0, "bbox": [82, 281, 32, 16], "area": 248}, {"id": 8156273, "category_id": 84, "iscrowd": 0, "bbox": [195, 361, 44, 25], "area": 649}, {"id": 8488318, "category_id": 84, "iscrowd": 0, "bbox": [82, 295, 35, 15], "area": 226}, {"id": 5920595, "category_id": 84, "iscrowd": 0, "bbox": [83, 289, 32, 14], "area": 170}, {"id": 3158324, "category_id": 86, "iscrowd": 0, "bbox": [2, 141, 37, 103], "area": 2529}, {"id": 3422783, "category_id": 86, "iscrowd": 0, "bbox": [39, 143, 48, 95], "area": 2594}, {"id": 9408141, "category_id": 112, "iscrowd": 0, "bbox": [557, 0, 83, 373], "area": 25872}, {"id": 6714752, "category_id": 177, "iscrowd": 0, "bbox": [318, 0, 322, 380], "area": 12648}, {"id": 8686469, "category_id": 181, "iscrowd": 0, "bbox": [277, 0, 279, 358], "area": 75886}, {"id": 13158080, "category_id": 188, "iscrowd": 0, "bbox": [276, 86, 54, 133], "area": 5520}, {"id": 12170419, "category_id": 190, "iscrowd": 0, "bbox": [148, 335, 492, 109], "area": 32067}, {"id": 2764850, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 201, 202], "area": 16829}], "file_name": "000000154431.png", "image_id": 154431}, {"segments_info": [{"id": 3289650, "category_id": 1, "iscrowd": 0, "bbox": [3, 61, 496, 432], "area": 131926}, {"id": 5526612, "category_id": 1, "iscrowd": 0, "bbox": [386, 83, 114, 322], "area": 24522}, {"id": 5987163, "category_id": 46, "iscrowd": 0, "bbox": [0, 89, 56, 338], "area": 11926}, {"id": 2894892, "category_id": 77, "iscrowd": 0, "bbox": [224, 164, 113, 64], "area": 5602}, {"id": 7237230, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 500, 187], "area": 51223}, {"id": 6052956, "category_id": 199, "iscrowd": 0, "bbox": [0, 110, 184, 309], "area": 19194}], "file_name": "000000154644.png", "image_id": 154644}, {"segments_info": [{"id": 10262675, "category_id": 72, "iscrowd": 0, "bbox": [334, 195, 99, 83], "area": 7245}, {"id": 4342847, "category_id": 73, "iscrowd": 0, "bbox": [217, 207, 82, 61], "area": 4160}, {"id": 1841942, "category_id": 74, "iscrowd": 0, "bbox": [419, 304, 18, 18], "area": 262}, {"id": 5327685, "category_id": 74, "iscrowd": 0, "bbox": [520, 312, 29, 21], "area": 490}, {"id": 8485749, "category_id": 76, "iscrowd": 0, "bbox": [322, 275, 119, 31], "area": 1878}, {"id": 12498099, "category_id": 76, "iscrowd": 0, "bbox": [201, 274, 100, 16], "area": 1378}, {"id": 7367015, "category_id": 84, "iscrowd": 0, "bbox": [198, 201, 35, 40], "area": 1072}, {"id": 2172720, "category_id": 84, "iscrowd": 0, "bbox": [139, 200, 68, 53], "area": 1947}, {"id": 922136, "category_id": 118, "iscrowd": 0, "bbox": [116, 372, 349, 92], "area": 16234}, {"id": 9077890, "category_id": 189, "iscrowd": 0, "bbox": [8, 272, 622, 192], "area": 31809}, {"id": 12432557, "category_id": 195, "iscrowd": 0, "bbox": [334, 53, 278, 232], "area": 19485}, {"id": 6317929, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 464], "area": 180675}], "file_name": "000000154705.png", "image_id": 154705}, {"segments_info": [{"id": 2568756, "category_id": 1, "iscrowd": 0, "bbox": [35, 326, 331, 169], "area": 34354}, {"id": 9345430, "category_id": 70, "iscrowd": 0, "bbox": [30, 45, 266, 324], "area": 48276}, {"id": 4610926, "category_id": 100, "iscrowd": 0, "bbox": [66, 27, 215, 71], "area": 2612}, {"id": 3817799, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 375, 475], "area": 50944}, {"id": 3488572, "category_id": 190, "iscrowd": 0, "bbox": [52, 180, 298, 256], "area": 21308}, {"id": 9604281, "category_id": 195, "iscrowd": 0, "bbox": [59, 10, 238, 129], "area": 8107}], "file_name": "000000154718.png", "image_id": 154718}, {"segments_info": [{"id": 10855845, "category_id": 20, "iscrowd": 0, "bbox": [229, 436, 168, 167], "area": 14920}, {"id": 16448250, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 232], "area": 142273}, {"id": 9539985, "category_id": 193, "iscrowd": 0, "bbox": [0, 218, 640, 422], "area": 252203}], "file_name": "000000154947.png", "image_id": 154947}, {"segments_info": [{"id": 1321782, "category_id": 85, "iscrowd": 0, "bbox": [373, 7, 261, 294], "area": 56406}, {"id": 256, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 249901}], "file_name": "000000155051.png", "image_id": 155051}, {"segments_info": [{"id": 5792871, "category_id": 1, "iscrowd": 0, "bbox": [330, 176, 24, 23], "area": 303}, {"id": 5789792, "category_id": 1, "iscrowd": 0, "bbox": [118, 194, 27, 32], "area": 566}, {"id": 8156798, "category_id": 1, "iscrowd": 0, "bbox": [312, 174, 25, 28], "area": 386}, {"id": 5000781, "category_id": 9, "iscrowd": 0, "bbox": [0, 195, 20, 31], "area": 311}, {"id": 9338462, "category_id": 9, "iscrowd": 0, "bbox": [96, 186, 311, 34], "area": 3752}, {"id": 11709855, "category_id": 9, "iscrowd": 0, "bbox": [54, 208, 155, 19], "area": 1873}, {"id": 6454173, "category_id": 28, "iscrowd": 0, "bbox": [206, 165, 54, 37], "area": 1464}, {"id": 5799302, "category_id": 148, "iscrowd": 0, "bbox": [0, 209, 500, 166], "area": 76730}, {"id": 3292474, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 198, 18], "area": 2476}, {"id": 5664113, "category_id": 192, "iscrowd": 0, "bbox": [0, 27, 500, 199], "area": 56730}, {"id": 5603448, "category_id": 193, "iscrowd": 0, "bbox": [194, 71, 256, 84], "area": 10737}], "file_name": "000000155145.png", "image_id": 155145}, {"segments_info": [{"id": 10067356, "category_id": 70, "iscrowd": 0, "bbox": [81, 271, 106, 76], "area": 5426}, {"id": 5527647, "category_id": 109, "iscrowd": 0, "bbox": [318, 289, 57, 211], "area": 6308}, {"id": 9933716, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 41592}, {"id": 15855856, "category_id": 130, "iscrowd": 0, "bbox": [162, 0, 201, 22], "area": 1477}, {"id": 5792098, "category_id": 190, "iscrowd": 0, "bbox": [174, 399, 95, 101], "area": 5673}, {"id": 10856873, "category_id": 195, "iscrowd": 0, "bbox": [182, 194, 75, 115], "area": 5503}, {"id": 9803413, "category_id": 199, "iscrowd": 0, "bbox": [27, 0, 296, 308], "area": 31664}], "file_name": "000000155154.png", "image_id": 155154}, {"segments_info": [{"id": 6717577, "category_id": 61, "iscrowd": 0, "bbox": [12, 0, 621, 404], "area": 215310}, {"id": 3481101, "category_id": 67, "iscrowd": 0, "bbox": [2, 385, 637, 76], "area": 9630}, {"id": 8016693, "category_id": 189, "iscrowd": 0, "bbox": [0, 170, 640, 298], "area": 10178}], "file_name": "000000155179.png", "image_id": 155179}, {"segments_info": [{"id": 5729674, "category_id": 17, "iscrowd": 0, "bbox": [35, 82, 560, 268], "area": 66812}, {"id": 3364219, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 87527}, {"id": 7633782, "category_id": 181, "iscrowd": 0, "bbox": [102, 0, 538, 357], "area": 118549}], "file_name": "000000155291.png", "image_id": 155291}, {"segments_info": [{"id": 7368826, "category_id": 1, "iscrowd": 0, "bbox": [178, 266, 17, 28], "area": 315}, {"id": 8292492, "category_id": 1, "iscrowd": 0, "bbox": [227, 264, 18, 22], "area": 254}, {"id": 4015694, "category_id": 1, "iscrowd": 0, "bbox": [20, 259, 17, 48], "area": 542}, {"id": 3158329, "category_id": 1, "iscrowd": 0, "bbox": [194, 278, 22, 9], "area": 151}, {"id": 8223615, "category_id": 1, "iscrowd": 0, "bbox": [277, 272, 16, 19], "area": 199}, {"id": 1118753, "category_id": 1, "iscrowd": 0, "bbox": [227, 306, 29, 29], "area": 459}, {"id": 3025987, "category_id": 3, "iscrowd": 0, "bbox": [152, 287, 241, 129], "area": 19508}, {"id": 3357521, "category_id": 8, "iscrowd": 0, "bbox": [50, 214, 218, 94], "area": 15459}, {"id": 1517889, "category_id": 8, "iscrowd": 0, "bbox": [263, 220, 339, 111], "area": 20397}, {"id": 5594727, "category_id": 149, "iscrowd": 0, "bbox": [0, 267, 640, 213], "area": 82377}, {"id": 3424831, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 309], "area": 75915}, {"id": 14801877, "category_id": 187, "iscrowd": 0, "bbox": [34, 0, 485, 238], "area": 74435}, {"id": 4016210, "category_id": 191, "iscrowd": 0, "bbox": [0, 286, 640, 106], "area": 8473}, {"id": 6119520, "category_id": 197, "iscrowd": 0, "bbox": [197, 205, 202, 110], "area": 3858}], "file_name": "000000155341.png", "image_id": 155341}, {"segments_info": [{"id": 5657685, "category_id": 7, "iscrowd": 0, "bbox": [160, 197, 216, 87], "area": 13924}, {"id": 6443859, "category_id": 7, "iscrowd": 0, "bbox": [589, 201, 51, 68], "area": 3137}, {"id": 3551078, "category_id": 10, "iscrowd": 0, "bbox": [208, 182, 6, 7], "area": 31}, {"id": 6707541, "category_id": 95, "iscrowd": 0, "bbox": [161, 138, 308, 79], "area": 12643}, {"id": 5589835, "category_id": 128, "iscrowd": 0, "bbox": [368, 4, 272, 176], "area": 35362}, {"id": 7171954, "category_id": 144, "iscrowd": 0, "bbox": [0, 243, 640, 180], "area": 69211}, {"id": 3223087, "category_id": 147, "iscrowd": 0, "bbox": [321, 275, 319, 148], "area": 29243}, {"id": 4602422, "category_id": 171, "iscrowd": 0, "bbox": [372, 188, 205, 73], "area": 6301}, {"id": 10326118, "category_id": 185, "iscrowd": 0, "bbox": [384, 223, 193, 34], "area": 2820}, {"id": 4144446, "category_id": 186, "iscrowd": 0, "bbox": [459, 139, 181, 66], "area": 4524}, {"id": 15856113, "category_id": 187, "iscrowd": 0, "bbox": [280, 0, 360, 154], "area": 14885}, {"id": 3025189, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 627, 316], "area": 59825}, {"id": 3421236, "category_id": 199, "iscrowd": 0, "bbox": [125, 0, 452, 266], "area": 13571}], "file_name": "000000155443.png", "image_id": 155443}, {"segments_info": [{"id": 2571880, "category_id": 3, "iscrowd": 0, "bbox": [360, 387, 16, 12], "area": 144}, {"id": 6791873, "category_id": 3, "iscrowd": 0, "bbox": [536, 337, 11, 5], "area": 36}, {"id": 4022678, "category_id": 3, "iscrowd": 0, "bbox": [558, 330, 9, 11], "area": 67}, {"id": 6913820, "category_id": 10, "iscrowd": 0, "bbox": [491, 1, 113, 137], "area": 8763}, {"id": 2970558, "category_id": 10, "iscrowd": 0, "bbox": [505, 315, 9, 10], "area": 74}, {"id": 11391127, "category_id": 10, "iscrowd": 0, "bbox": [569, 312, 10, 11], "area": 71}, {"id": 8233078, "category_id": 10, "iscrowd": 0, "bbox": [526, 305, 31, 20], "area": 454}, {"id": 4239831, "category_id": 10, "iscrowd": 0, "bbox": [437, 340, 4, 5], "area": 15}, {"id": 2639137, "category_id": 10, "iscrowd": 0, "bbox": [461, 30, 79, 127], "area": 4792}, {"id": 2058400, "category_id": 10, "iscrowd": 0, "bbox": [454, 333, 5, 5], "area": 22}, {"id": 395562, "category_id": 95, "iscrowd": 0, "bbox": [0, 0, 493, 449], "area": 135047}, {"id": 2124957, "category_id": 130, "iscrowd": 0, "bbox": [521, 214, 119, 78], "area": 780}, {"id": 1522559, "category_id": 149, "iscrowd": 0, "bbox": [80, 325, 503, 155], "area": 29663}, {"id": 464659, "category_id": 184, "iscrowd": 0, "bbox": [571, 89, 69, 243], "area": 4962}, {"id": 1459562, "category_id": 187, "iscrowd": 0, "bbox": [182, 0, 458, 382], "area": 67648}, {"id": 531786, "category_id": 191, "iscrowd": 0, "bbox": [98, 305, 542, 175], "area": 11741}, {"id": 2121896, "category_id": 197, "iscrowd": 0, "bbox": [139, 235, 501, 202], "area": 17397}, {"id": 666980, "category_id": 199, "iscrowd": 0, "bbox": [0, 345, 227, 135], "area": 12014}], "file_name": "000000155451.png", "image_id": 155451}, {"segments_info": [{"id": 6909817, "category_id": 22, "iscrowd": 0, "bbox": [13, 8, 402, 415], "area": 111054}, {"id": 8294771, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 162306}], "file_name": "000000155571.png", "image_id": 155571}, {"segments_info": [{"id": 5659226, "category_id": 1, "iscrowd": 0, "bbox": [462, 132, 62, 131], "area": 3990}, {"id": 10516585, "category_id": 1, "iscrowd": 0, "bbox": [215, 45, 29, 27], "area": 476}, {"id": 7367037, "category_id": 1, "iscrowd": 0, "bbox": [228, 102, 71, 149], "area": 2997}, {"id": 5001320, "category_id": 1, "iscrowd": 0, "bbox": [8, 203, 127, 215], "area": 11290}, {"id": 6181970, "category_id": 1, "iscrowd": 0, "bbox": [565, 80, 49, 187], "area": 4137}, {"id": 6908269, "category_id": 1, "iscrowd": 0, "bbox": [388, 79, 26, 36], "area": 485}, {"id": 9734274, "category_id": 1, "iscrowd": 0, "bbox": [420, 85, 39, 98], "area": 1479}, {"id": 5329493, "category_id": 1, "iscrowd": 0, "bbox": [0, 139, 52, 132], "area": 4776}, {"id": 6578791, "category_id": 1, "iscrowd": 0, "bbox": [603, 96, 37, 126], "area": 1756}, {"id": 7238266, "category_id": 1, "iscrowd": 0, "bbox": [281, 78, 29, 28], "area": 418}, {"id": 8361846, "category_id": 1, "iscrowd": 0, "bbox": [341, 112, 69, 128], "area": 4528}, {"id": 7761774, "category_id": 1, "iscrowd": 0, "bbox": [506, 96, 59, 169], "area": 3490}, {"id": 4999556, "category_id": 1, "iscrowd": 0, "bbox": [274, 100, 40, 67], "area": 1363}, {"id": 8224390, "category_id": 1, "iscrowd": 1, "bbox": [0, 0, 640, 463], "area": 62663}, {"id": 7432802, "category_id": 3, "iscrowd": 0, "bbox": [448, 74, 80, 47], "area": 1981}, {"id": 6445653, "category_id": 3, "iscrowd": 0, "bbox": [306, 76, 160, 46], "area": 4139}, {"id": 9284786, "category_id": 20, "iscrowd": 0, "bbox": [342, 230, 62, 75], "area": 2222}, {"id": 11046272, "category_id": 92, "iscrowd": 0, "bbox": [37, 158, 260, 80], "area": 11868}, {"id": 7299931, "category_id": 185, "iscrowd": 0, "bbox": [0, 37, 640, 177], "area": 18732}, {"id": 5472920, "category_id": 194, "iscrowd": 0, "bbox": [6, 159, 634, 321], "area": 112490}, {"id": 6309947, "category_id": 199, "iscrowd": 0, "bbox": [540, 70, 100, 19], "area": 460}], "file_name": "000000156071.png", "image_id": 156071}, {"segments_info": [{"id": 5725060, "category_id": 1, "iscrowd": 0, "bbox": [0, 5, 199, 272], "area": 35231}, {"id": 5267313, "category_id": 1, "iscrowd": 0, "bbox": [395, 3, 223, 188], "area": 24451}, {"id": 2766439, "category_id": 1, "iscrowd": 0, "bbox": [133, 1, 149, 205], "area": 17984}, {"id": 3881045, "category_id": 44, "iscrowd": 0, "bbox": [260, 179, 34, 65], "area": 1958}, {"id": 6118034, "category_id": 44, "iscrowd": 0, "bbox": [333, 127, 29, 69], "area": 1269}, {"id": 4742795, "category_id": 44, "iscrowd": 0, "bbox": [319, 130, 20, 76], "area": 971}, {"id": 10665425, "category_id": 47, "iscrowd": 0, "bbox": [455, 125, 34, 35], "area": 803}, {"id": 1775132, "category_id": 48, "iscrowd": 0, "bbox": [185, 211, 13, 14], "area": 132}, {"id": 2105904, "category_id": 49, "iscrowd": 0, "bbox": [158, 221, 57, 11], "area": 229}, {"id": 1643810, "category_id": 50, "iscrowd": 0, "bbox": [469, 102, 29, 27], "area": 148}, {"id": 8567503, "category_id": 51, "iscrowd": 0, "bbox": [513, 191, 96, 32], "area": 2018}, {"id": 1725846, "category_id": 59, "iscrowd": 0, "bbox": [470, 170, 68, 18], "area": 263}, {"id": 6858708, "category_id": 59, "iscrowd": 0, "bbox": [331, 196, 237, 82], "area": 9190}, {"id": 4749488, "category_id": 59, "iscrowd": 0, "bbox": [141, 261, 336, 179], "area": 28898}, {"id": 3641811, "category_id": 59, "iscrowd": 0, "bbox": [190, 230, 19, 12], "area": 119}, {"id": 2381460, "category_id": 59, "iscrowd": 0, "bbox": [139, 335, 171, 91], "area": 6992}, {"id": 2975397, "category_id": 59, "iscrowd": 0, "bbox": [201, 339, 119, 113], "area": 6413}, {"id": 5206158, "category_id": 67, "iscrowd": 0, "bbox": [2, 124, 605, 348], "area": 90612}, {"id": 2104105, "category_id": 77, "iscrowd": 0, "bbox": [209, 148, 26, 15], "area": 269}, {"id": 9031393, "category_id": 100, "iscrowd": 0, "bbox": [237, 323, 403, 155], "area": 19362}, {"id": 1981258, "category_id": 154, "iscrowd": 0, "bbox": [557, 219, 83, 118], "area": 4210}, {"id": 1650497, "category_id": 177, "iscrowd": 0, "bbox": [274, 0, 366, 235], "area": 20667}, {"id": 5259573, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 242, 157], "area": 9041}, {"id": 2698289, "category_id": 188, "iscrowd": 0, "bbox": [242, 0, 143, 184], "area": 14263}, {"id": 1321020, "category_id": 189, "iscrowd": 0, "bbox": [0, 245, 238, 233], "area": 1188}, {"id": 2176835, "category_id": 190, "iscrowd": 0, "bbox": [18, 270, 622, 208], "area": 5450}, {"id": 4939620, "category_id": 199, "iscrowd": 0, "bbox": [430, 0, 66, 67], "area": 1880}], "file_name": "000000156076.png", "image_id": 156076}, {"segments_info": [{"id": 4211794, "category_id": 49, "iscrowd": 0, "bbox": [542, 207, 22, 3], "area": 52}, {"id": 5197900, "category_id": 49, "iscrowd": 0, "bbox": [347, 186, 38, 7], "area": 123}, {"id": 4080463, "category_id": 49, "iscrowd": 0, "bbox": [534, 161, 45, 7], "area": 201}, {"id": 5921107, "category_id": 49, "iscrowd": 0, "bbox": [341, 172, 44, 5], "area": 146}, {"id": 3948883, "category_id": 49, "iscrowd": 0, "bbox": [536, 170, 37, 7], "area": 140}, {"id": 5067366, "category_id": 49, "iscrowd": 0, "bbox": [522, 208, 3, 33], "area": 69}, {"id": 4608604, "category_id": 49, "iscrowd": 0, "bbox": [352, 193, 26, 3], "area": 61}, {"id": 3488072, "category_id": 49, "iscrowd": 0, "bbox": [536, 183, 37, 7], "area": 105}, {"id": 4475227, "category_id": 49, "iscrowd": 0, "bbox": [540, 196, 25, 3], "area": 56}, {"id": 4343900, "category_id": 49, "iscrowd": 0, "bbox": [540, 200, 25, 3], "area": 50}, {"id": 4279396, "category_id": 49, "iscrowd": 0, "bbox": [542, 211, 21, 3], "area": 49}, {"id": 8223090, "category_id": 49, "iscrowd": 0, "bbox": [323, 159, 61, 5], "area": 175}, {"id": 4278103, "category_id": 49, "iscrowd": 0, "bbox": [539, 191, 30, 3], "area": 66}, {"id": 7962758, "category_id": 49, "iscrowd": 1, "bbox": [123, 144, 457, 95], "area": 2543}, {"id": 9288404, "category_id": 51, "iscrowd": 0, "bbox": [422, 385, 112, 40], "area": 3821}, {"id": 2833203, "category_id": 51, "iscrowd": 0, "bbox": [288, 352, 40, 18], "area": 577}, {"id": 1385510, "category_id": 51, "iscrowd": 0, "bbox": [279, 305, 57, 28], "area": 790}, {"id": 1254969, "category_id": 51, "iscrowd": 0, "bbox": [182, 358, 44, 39], "area": 1268}, {"id": 1846316, "category_id": 51, "iscrowd": 0, "bbox": [283, 358, 53, 33], "area": 994}, {"id": 1186362, "category_id": 53, "iscrowd": 0, "bbox": [582, 241, 10, 3], "area": 15}, {"id": 1779000, "category_id": 53, "iscrowd": 0, "bbox": [606, 240, 8, 5], "area": 31}, {"id": 991105, "category_id": 53, "iscrowd": 0, "bbox": [595, 241, 7, 4], "area": 21}, {"id": 2243677, "category_id": 62, "iscrowd": 0, "bbox": [526, 343, 91, 40], "area": 3013}, {"id": 1654633, "category_id": 62, "iscrowd": 0, "bbox": [295, 399, 91, 26], "area": 1645}, {"id": 6846352, "category_id": 81, "iscrowd": 0, "bbox": [468, 259, 71, 15], "area": 747}, {"id": 3423292, "category_id": 81, "iscrowd": 0, "bbox": [407, 265, 56, 11], "area": 439}, {"id": 1383197, "category_id": 82, "iscrowd": 0, "bbox": [78, 287, 87, 128], "area": 10453}, {"id": 1973278, "category_id": 84, "iscrowd": 0, "bbox": [62, 232, 20, 41], "area": 587}, {"id": 10725295, "category_id": 85, "iscrowd": 0, "bbox": [438, 42, 44, 44], "area": 1505}, {"id": 3492451, "category_id": 107, "iscrowd": 0, "bbox": [56, 234, 584, 159], "area": 16280}, {"id": 8949140, "category_id": 112, "iscrowd": 0, "bbox": [0, 27, 72, 398], "area": 20152}, {"id": 10200752, "category_id": 130, "iscrowd": 0, "bbox": [333, 126, 233, 35], "area": 1648}, {"id": 3690074, "category_id": 156, "iscrowd": 0, "bbox": [165, 275, 196, 150], "area": 15085}, {"id": 6975079, "category_id": 176, "iscrowd": 0, "bbox": [45, 44, 69, 215], "area": 8769}, {"id": 6582660, "category_id": 180, "iscrowd": 0, "bbox": [180, 79, 460, 197], "area": 52627}, {"id": 14208194, "category_id": 186, "iscrowd": 0, "bbox": [94, 0, 546, 20], "area": 8740}, {"id": 6911590, "category_id": 188, "iscrowd": 0, "bbox": [322, 272, 305, 135], "area": 26159}, {"id": 1398173, "category_id": 189, "iscrowd": 0, "bbox": [379, 382, 261, 43], "area": 4206}, {"id": 1448989, "category_id": 190, "iscrowd": 0, "bbox": [68, 390, 241, 35], "area": 916}, {"id": 11448756, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 62859}], "file_name": "000000156278.png", "image_id": 156278}, {"segments_info": [{"id": 5651505, "category_id": 1, "iscrowd": 0, "bbox": [184, 501, 45, 131], "area": 3164}, {"id": 6972519, "category_id": 1, "iscrowd": 0, "bbox": [62, 378, 63, 174], "area": 7122}, {"id": 10193796, "category_id": 31, "iscrowd": 0, "bbox": [183, 520, 31, 62], "area": 314}, {"id": 7566965, "category_id": 85, "iscrowd": 0, "bbox": [278, 244, 62, 59], "area": 2866}, {"id": 8159102, "category_id": 85, "iscrowd": 0, "bbox": [66, 244, 62, 59], "area": 2813}, {"id": 8685705, "category_id": 85, "iscrowd": 0, "bbox": [59, 306, 68, 67], "area": 3676}, {"id": 8882037, "category_id": 85, "iscrowd": 0, "bbox": [144, 394, 126, 122], "area": 11286}, {"id": 9211268, "category_id": 85, "iscrowd": 0, "bbox": [134, 242, 138, 130], "area": 13611}, {"id": 9668480, "category_id": 191, "iscrowd": 0, "bbox": [0, 609, 428, 31], "area": 11112}, {"id": 7568006, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 428, 614], "area": 177899}], "file_name": "000000156292.png", "image_id": 156292}, {"segments_info": [{"id": 3751501, "category_id": 9, "iscrowd": 0, "bbox": [0, 274, 335, 217], "area": 29276}, {"id": 3750974, "category_id": 27, "iscrowd": 0, "bbox": [46, 319, 173, 181], "area": 14352}, {"id": 3159360, "category_id": 27, "iscrowd": 0, "bbox": [4, 369, 91, 129], "area": 8213}, {"id": 5205885, "category_id": 62, "iscrowd": 0, "bbox": [121, 283, 146, 217], "area": 12879}, {"id": 2566470, "category_id": 118, "iscrowd": 0, "bbox": [0, 471, 335, 29], "area": 2117}, {"id": 12239533, "category_id": 155, "iscrowd": 0, "bbox": [0, 190, 335, 143], "area": 33906}, {"id": 14670283, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 335, 199], "area": 62611}], "file_name": "000000156372.png", "image_id": 156372}, {"segments_info": [{"id": 5783383, "category_id": 1, "iscrowd": 0, "bbox": [261, 169, 20, 18], "area": 276}, {"id": 2237487, "category_id": 1, "iscrowd": 0, "bbox": [0, 126, 46, 209], "area": 9009}, {"id": 4801611, "category_id": 1, "iscrowd": 0, "bbox": [476, 127, 33, 67], "area": 1356}, {"id": 6177094, "category_id": 1, "iscrowd": 0, "bbox": [133, 1, 108, 327], "area": 13914}, {"id": 6848662, "category_id": 1, "iscrowd": 0, "bbox": [287, 146, 14, 42], "area": 221}, {"id": 8947342, "category_id": 1, "iscrowd": 0, "bbox": [199, 135, 283, 225], "area": 33245}, {"id": 3360342, "category_id": 1, "iscrowd": 0, "bbox": [562, 160, 78, 141], "area": 7501}, {"id": 3685198, "category_id": 1, "iscrowd": 0, "bbox": [509, 179, 69, 96], "area": 3832}, {"id": 6122117, "category_id": 1, "iscrowd": 0, "bbox": [509, 162, 14, 26], "area": 211}, {"id": 5058610, "category_id": 1, "iscrowd": 0, "bbox": [507, 178, 35, 36], "area": 771}, {"id": 4605516, "category_id": 44, "iscrowd": 0, "bbox": [9, 7, 193, 468], "area": 64447}, {"id": 3428191, "category_id": 47, "iscrowd": 0, "bbox": [485, 311, 74, 111], "area": 6606}, {"id": 5327183, "category_id": 49, "iscrowd": 0, "bbox": [266, 283, 23, 59], "area": 802}, {"id": 8295325, "category_id": 61, "iscrowd": 0, "bbox": [224, 319, 184, 118], "area": 17223}, {"id": 3424851, "category_id": 62, "iscrowd": 0, "bbox": [568, 193, 30, 28], "area": 381}, {"id": 2370104, "category_id": 62, "iscrowd": 0, "bbox": [527, 271, 63, 37], "area": 826}, {"id": 1976628, "category_id": 62, "iscrowd": 0, "bbox": [583, 293, 57, 107], "area": 3691}, {"id": 9937835, "category_id": 67, "iscrowd": 0, "bbox": [186, 326, 295, 152], "area": 17590}, {"id": 5992569, "category_id": 67, "iscrowd": 0, "bbox": [1, 334, 639, 140], "area": 11652}, {"id": 3225422, "category_id": 67, "iscrowd": 0, "bbox": [453, 243, 78, 68], "area": 2808}, {"id": 6576480, "category_id": 88, "iscrowd": 0, "bbox": [294, 0, 209, 256], "area": 27933}, {"id": 7963785, "category_id": 100, "iscrowd": 0, "bbox": [184, 324, 314, 78], "area": 1722}, {"id": 7033181, "category_id": 109, "iscrowd": 0, "bbox": [285, 99, 26, 64], "area": 275}, {"id": 4542309, "category_id": 130, "iscrowd": 0, "bbox": [0, 75, 584, 33], "area": 710}, {"id": 5134169, "category_id": 177, "iscrowd": 0, "bbox": [497, 177, 43, 20], "area": 229}, {"id": 11179731, "category_id": 181, "iscrowd": 0, "bbox": [476, 107, 164, 77], "area": 5737}, {"id": 2627871, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 126], "area": 29509}, {"id": 13088447, "category_id": 187, "iscrowd": 0, "bbox": [206, 81, 104, 84], "area": 5574}, {"id": 5662833, "category_id": 189, "iscrowd": 0, "bbox": [0, 335, 640, 145], "area": 2282}, {"id": 2960944, "category_id": 190, "iscrowd": 0, "bbox": [212, 287, 428, 131], "area": 2619}, {"id": 7645884, "category_id": 196, "iscrowd": 0, "bbox": [178, 273, 348, 207], "area": 3751}, {"id": 4540248, "category_id": 199, "iscrowd": 0, "bbox": [0, 46, 640, 101], "area": 7725}], "file_name": "000000156643.png", "image_id": 156643}, {"segments_info": [{"id": 1513250, "category_id": 1, "iscrowd": 0, "bbox": [52, 45, 244, 283], "area": 25686}, {"id": 5267832, "category_id": 1, "iscrowd": 0, "bbox": [196, 89, 272, 241], "area": 32067}, {"id": 987688, "category_id": 62, "iscrowd": 0, "bbox": [115, 185, 48, 147], "area": 4815}, {"id": 6320003, "category_id": 75, "iscrowd": 0, "bbox": [179, 310, 30, 17], "area": 431}, {"id": 4017000, "category_id": 75, "iscrowd": 0, "bbox": [266, 166, 24, 30], "area": 108}, {"id": 7240592, "category_id": 75, "iscrowd": 0, "bbox": [122, 143, 15, 14], "area": 157}, {"id": 7170943, "category_id": 75, "iscrowd": 0, "bbox": [34, 157, 32, 21], "area": 341}, {"id": 3493220, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 500, 323], "area": 58724}, {"id": 2237741, "category_id": 181, "iscrowd": 0, "bbox": [0, 15, 500, 210], "area": 16126}, {"id": 5532024, "category_id": 186, "iscrowd": 0, "bbox": [273, 0, 227, 55], "area": 7312}, {"id": 1649986, "category_id": 190, "iscrowd": 0, "bbox": [0, 308, 154, 25], "area": 1481}, {"id": 3560292, "category_id": 199, "iscrowd": 0, "bbox": [0, 210, 500, 117], "area": 5142}], "file_name": "000000156924.png", "image_id": 156924}, {"segments_info": [{"id": 3564637, "category_id": 1, "iscrowd": 0, "bbox": [341, 198, 158, 170], "area": 18113}, {"id": 2650229, "category_id": 1, "iscrowd": 0, "bbox": [2, 68, 88, 261], "area": 14795}, {"id": 11450795, "category_id": 75, "iscrowd": 0, "bbox": [295, 153, 152, 222], "area": 9373}, {"id": 3756092, "category_id": 190, "iscrowd": 0, "bbox": [14, 291, 391, 84], "area": 19373}, {"id": 9350301, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 124812}], "file_name": "000000157046.png", "image_id": 157046}, {"segments_info": [{"id": 6650001, "category_id": 25, "iscrowd": 0, "bbox": [97, 19, 125, 314], "area": 15028}, {"id": 4082006, "category_id": 25, "iscrowd": 0, "bbox": [437, 61, 63, 155], "area": 4039}, {"id": 7044237, "category_id": 25, "iscrowd": 0, "bbox": [198, 12, 178, 317], "area": 18496}, {"id": 2041122, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 232], "area": 82655}, {"id": 15724010, "category_id": 187, "iscrowd": 0, "bbox": [322, 0, 30, 17], "area": 287}, {"id": 4290407, "category_id": 193, "iscrowd": 0, "bbox": [0, 209, 500, 124], "area": 24339}, {"id": 5069925, "category_id": 194, "iscrowd": 0, "bbox": [115, 276, 385, 57], "area": 11372}, {"id": 5204081, "category_id": 198, "iscrowd": 0, "bbox": [4, 195, 445, 138], "area": 8396}], "file_name": "000000157098.png", "image_id": 157098}, {"segments_info": [{"id": 10070474, "category_id": 81, "iscrowd": 0, "bbox": [3, 130, 377, 176], "area": 34572}, {"id": 12962273, "category_id": 107, "iscrowd": 0, "bbox": [88, 91, 367, 248], "area": 20993}, {"id": 4676729, "category_id": 112, "iscrowd": 0, "bbox": [592, 0, 48, 145], "area": 4054}, {"id": 2968437, "category_id": 156, "iscrowd": 0, "bbox": [588, 142, 52, 282], "area": 10902}, {"id": 10267342, "category_id": 188, "iscrowd": 0, "bbox": [193, 0, 371, 424], "area": 58670}, {"id": 2634309, "category_id": 190, "iscrowd": 0, "bbox": [362, 0, 268, 424], "area": 53519}, {"id": 9152716, "category_id": 199, "iscrowd": 0, "bbox": [207, 0, 203, 96], "area": 15218}], "file_name": "000000157124.png", "image_id": 157124}, {"segments_info": [{"id": 6450309, "category_id": 48, "iscrowd": 0, "bbox": [175, 195, 314, 106], "area": 7993}, {"id": 6126232, "category_id": 61, "iscrowd": 0, "bbox": [75, 29, 195, 189], "area": 22220}, {"id": 8422812, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 353], "area": 82762}, {"id": 5527177, "category_id": 196, "iscrowd": 0, "bbox": [149, 178, 50, 72], "area": 1410}], "file_name": "000000157138.png", "image_id": 157138}, {"segments_info": [{"id": 4151659, "category_id": 22, "iscrowd": 0, "bbox": [275, 75, 120, 145], "area": 10308}, {"id": 3244144, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 200167}, {"id": 6594994, "category_id": 193, "iscrowd": 0, "bbox": [14, 0, 626, 57], "area": 19794}], "file_name": "000000157213.png", "image_id": 157213}, {"segments_info": [{"id": 6974090, "category_id": 1, "iscrowd": 0, "bbox": [109, 117, 122, 356], "area": 26026}, {"id": 4009261, "category_id": 3, "iscrowd": 0, "bbox": [209, 161, 74, 73], "area": 3654}, {"id": 4206110, "category_id": 3, "iscrowd": 0, "bbox": [3, 172, 108, 69], "area": 2722}, {"id": 1314057, "category_id": 3, "iscrowd": 0, "bbox": [355, 114, 72, 123], "area": 6397}, {"id": 2759697, "category_id": 3, "iscrowd": 0, "bbox": [2, 193, 123, 183], "area": 17272}, {"id": 6462979, "category_id": 10, "iscrowd": 0, "bbox": [232, 90, 13, 14], "area": 136}, {"id": 2108485, "category_id": 10, "iscrowd": 0, "bbox": [0, 90, 12, 59], "area": 576}, {"id": 989441, "category_id": 10, "iscrowd": 0, "bbox": [313, 16, 32, 36], "area": 1094}, {"id": 1908772, "category_id": 41, "iscrowd": 0, "bbox": [142, 468, 66, 28], "area": 1280}, {"id": 4209726, "category_id": 149, "iscrowd": 0, "bbox": [0, 137, 427, 503], "area": 146164}, {"id": 395014, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 190], "area": 63731}, {"id": 1447440, "category_id": 193, "iscrowd": 0, "bbox": [258, 148, 58, 24], "area": 776}], "file_name": "000000157365.png", "image_id": 157365}, {"segments_info": [{"id": 12308197, "category_id": 51, "iscrowd": 0, "bbox": [28, 0, 589, 472], "area": 78260}, {"id": 5412991, "category_id": 56, "iscrowd": 0, "bbox": [254, 94, 104, 98], "area": 8458}, {"id": 6071200, "category_id": 56, "iscrowd": 0, "bbox": [380, 99, 52, 33], "area": 832}, {"id": 7125422, "category_id": 56, "iscrowd": 0, "bbox": [360, 128, 148, 246], "area": 13351}, {"id": 4888982, "category_id": 56, "iscrowd": 0, "bbox": [263, 220, 57, 55], "area": 1593}, {"id": 6467226, "category_id": 56, "iscrowd": 0, "bbox": [237, 293, 174, 153], "area": 15342}, {"id": 6861212, "category_id": 56, "iscrowd": 0, "bbox": [85, 154, 117, 109], "area": 9949}, {"id": 6271398, "category_id": 56, "iscrowd": 0, "bbox": [186, 246, 66, 63], "area": 1518}, {"id": 2323177, "category_id": 57, "iscrowd": 0, "bbox": [250, 39, 173, 95], "area": 6641}, {"id": 1862647, "category_id": 57, "iscrowd": 0, "bbox": [195, 88, 43, 128], "area": 2313}, {"id": 2323442, "category_id": 57, "iscrowd": 0, "bbox": [381, 82, 147, 188], "area": 13666}, {"id": 2125292, "category_id": 57, "iscrowd": 0, "bbox": [111, 253, 228, 192], "area": 15427}, {"id": 2192114, "category_id": 57, "iscrowd": 0, "bbox": [308, 285, 126, 75], "area": 5745}, {"id": 1863927, "category_id": 57, "iscrowd": 0, "bbox": [162, 84, 40, 83], "area": 2610}, {"id": 2323439, "category_id": 57, "iscrowd": 0, "bbox": [282, 186, 126, 112], "area": 7291}, {"id": 1600752, "category_id": 57, "iscrowd": 0, "bbox": [213, 56, 39, 88], "area": 2531}, {"id": 1534193, "category_id": 57, "iscrowd": 0, "bbox": [221, 140, 69, 95], "area": 3343}, {"id": 3377403, "category_id": 57, "iscrowd": 0, "bbox": [92, 260, 115, 73], "area": 5717}, {"id": 2191353, "category_id": 57, "iscrowd": 0, "bbox": [154, 32, 93, 56], "area": 2608}, {"id": 2519522, "category_id": 57, "iscrowd": 0, "bbox": [465, 246, 69, 91], "area": 2034}, {"id": 3445754, "category_id": 57, "iscrowd": 0, "bbox": [201, 253, 79, 81], "area": 2667}, {"id": 5198934, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 638, 480], "area": 100660}], "file_name": "000000157390.png", "image_id": 157390}, {"segments_info": [{"id": 7370375, "category_id": 44, "iscrowd": 0, "bbox": [36, 26, 137, 280], "area": 21375}, {"id": 9202531, "category_id": 47, "iscrowd": 0, "bbox": [151, 178, 69, 80], "area": 4192}, {"id": 7367526, "category_id": 51, "iscrowd": 0, "bbox": [221, 314, 259, 318], "area": 50999}, {"id": 3682129, "category_id": 51, "iscrowd": 0, "bbox": [1, 200, 99, 121], "area": 8525}, {"id": 11377563, "category_id": 51, "iscrowd": 0, "bbox": [158, 239, 282, 112], "area": 5884}, {"id": 3949651, "category_id": 54, "iscrowd": 0, "bbox": [413, 311, 65, 221], "area": 12655}, {"id": 7109001, "category_id": 54, "iscrowd": 0, "bbox": [197, 220, 257, 109], "area": 19614}, {"id": 4734795, "category_id": 67, "iscrowd": 0, "bbox": [0, 262, 478, 369], "area": 36250}, {"id": 4536900, "category_id": 189, "iscrowd": 0, "bbox": [0, 534, 398, 106], "area": 3802}, {"id": 9731194, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 312], "area": 92396}], "file_name": "000000157418.png", "image_id": 157418}, {"segments_info": [{"id": 4674414, "category_id": 1, "iscrowd": 0, "bbox": [0, 85, 331, 333], "area": 64713}, {"id": 3953524, "category_id": 47, "iscrowd": 0, "bbox": [194, 306, 203, 277], "area": 46515}, {"id": 5141420, "category_id": 54, "iscrowd": 0, "bbox": [114, 212, 146, 126], "area": 4455}, {"id": 6257327, "category_id": 58, "iscrowd": 0, "bbox": [111, 189, 134, 145], "area": 4966}, {"id": 4936047, "category_id": 67, "iscrowd": 0, "bbox": [169, 498, 443, 106], "area": 13526}, {"id": 16053491, "category_id": 181, "iscrowd": 0, "bbox": [315, 0, 297, 323], "area": 84269}, {"id": 5865898, "category_id": 188, "iscrowd": 0, "bbox": [57, 0, 139, 162], "area": 13103}, {"id": 2633802, "category_id": 189, "iscrowd": 0, "bbox": [0, 496, 612, 116], "area": 3280}, {"id": 8362155, "category_id": 195, "iscrowd": 0, "bbox": [0, 352, 231, 260], "area": 41575}, {"id": 8690086, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 363, 309], "area": 24618}], "file_name": "000000157601.png", "image_id": 157601}, {"segments_info": [{"id": 1710365, "category_id": 1, "iscrowd": 0, "bbox": [448, 451, 16, 24], "area": 236}, {"id": 1579808, "category_id": 1, "iscrowd": 0, "bbox": [88, 441, 15, 66], "area": 543}, {"id": 6973826, "category_id": 1, "iscrowd": 0, "bbox": [402, 453, 30, 63], "area": 847}, {"id": 1709072, "category_id": 1, "iscrowd": 0, "bbox": [103, 449, 8, 15], "area": 66}, {"id": 2697529, "category_id": 1, "iscrowd": 0, "bbox": [397, 443, 19, 30], "area": 182}, {"id": 2696749, "category_id": 1, "iscrowd": 0, "bbox": [319, 446, 9, 17], "area": 85}, {"id": 3487804, "category_id": 1, "iscrowd": 0, "bbox": [157, 442, 7, 23], "area": 106}, {"id": 1183760, "category_id": 1, "iscrowd": 0, "bbox": [32, 439, 28, 74], "area": 1190}, {"id": 4540228, "category_id": 1, "iscrowd": 0, "bbox": [70, 437, 24, 72], "area": 1083}, {"id": 2961719, "category_id": 1, "iscrowd": 0, "bbox": [466, 453, 12, 24], "area": 176}, {"id": 3355957, "category_id": 2, "iscrowd": 0, "bbox": [232, 467, 51, 41], "area": 947}, {"id": 3684924, "category_id": 3, "iscrowd": 0, "bbox": [6, 442, 70, 45], "area": 1394}, {"id": 10395568, "category_id": 3, "iscrowd": 0, "bbox": [314, 458, 18, 32], "area": 279}, {"id": 4607067, "category_id": 8, "iscrowd": 0, "bbox": [320, 447, 115, 61], "area": 3642}, {"id": 2631209, "category_id": 10, "iscrowd": 0, "bbox": [407, 390, 18, 46], "area": 541}, {"id": 2697021, "category_id": 10, "iscrowd": 0, "bbox": [461, 421, 9, 15], "area": 101}, {"id": 4143674, "category_id": 10, "iscrowd": 0, "bbox": [377, 373, 20, 46], "area": 730}, {"id": 2959127, "category_id": 10, "iscrowd": 0, "bbox": [471, 403, 9, 22], "area": 127}, {"id": 1512980, "category_id": 31, "iscrowd": 0, "bbox": [54, 465, 7, 9], "area": 30}, {"id": 12177355, "category_id": 85, "iscrowd": 0, "bbox": [227, 153, 40, 34], "area": 1035}, {"id": 1842721, "category_id": 184, "iscrowd": 0, "bbox": [358, 140, 122, 227], "area": 14646}, {"id": 262914, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 386], "area": 119348}, {"id": 3095111, "category_id": 191, "iscrowd": 0, "bbox": [0, 450, 480, 190], "area": 71378}, {"id": 3159869, "category_id": 197, "iscrowd": 0, "bbox": [0, 32, 480, 483], "area": 87644}], "file_name": "000000157756.png", "image_id": 157756}, {"segments_info": [{"id": 7174534, "category_id": 1, "iscrowd": 0, "bbox": [480, 191, 20, 27], "area": 149}, {"id": 2107953, "category_id": 1, "iscrowd": 0, "bbox": [197, 145, 118, 276], "area": 17233}, {"id": 4937570, "category_id": 1, "iscrowd": 0, "bbox": [75, 178, 66, 199], "area": 7350}, {"id": 5862537, "category_id": 1, "iscrowd": 0, "bbox": [392, 178, 29, 44], "area": 607}, {"id": 2964293, "category_id": 1, "iscrowd": 0, "bbox": [177, 193, 34, 123], "area": 2059}, {"id": 4873064, "category_id": 1, "iscrowd": 0, "bbox": [563, 60, 77, 362], "area": 17071}, {"id": 4216426, "category_id": 1, "iscrowd": 0, "bbox": [477, 195, 11, 14], "area": 110}, {"id": 2503741, "category_id": 1, "iscrowd": 0, "bbox": [447, 165, 38, 114], "area": 2780}, {"id": 857385, "category_id": 1, "iscrowd": 0, "bbox": [31, 201, 48, 170], "area": 3818}, {"id": 4480368, "category_id": 1, "iscrowd": 0, "bbox": [329, 157, 94, 113], "area": 5490}, {"id": 3949646, "category_id": 1, "iscrowd": 0, "bbox": [468, 159, 91, 262], "area": 10462}, {"id": 1712423, "category_id": 1, "iscrowd": 0, "bbox": [1, 191, 49, 204], "area": 6065}, {"id": 3226692, "category_id": 1, "iscrowd": 0, "bbox": [132, 185, 47, 160], "area": 3638}, {"id": 4677739, "category_id": 31, "iscrowd": 0, "bbox": [191, 188, 58, 217], "area": 4016}, {"id": 1384228, "category_id": 31, "iscrowd": 0, "bbox": [171, 243, 14, 29], "area": 264}, {"id": 2855856, "category_id": 47, "iscrowd": 0, "bbox": [282, 231, 13, 24], "area": 220}, {"id": 12373714, "category_id": 47, "iscrowd": 0, "bbox": [392, 258, 22, 14], "area": 231}, {"id": 13819874, "category_id": 47, "iscrowd": 0, "bbox": [335, 272, 17, 13], "area": 186}, {"id": 8754844, "category_id": 50, "iscrowd": 0, "bbox": [337, 262, 6, 9], "area": 29}, {"id": 8365239, "category_id": 50, "iscrowd": 0, "bbox": [412, 252, 8, 9], "area": 25}, {"id": 10663609, "category_id": 51, "iscrowd": 0, "bbox": [376, 269, 30, 16], "area": 346}, {"id": 1712418, "category_id": 67, "iscrowd": 0, "bbox": [309, 286, 220, 140], "area": 24170}, {"id": 1186082, "category_id": 77, "iscrowd": 0, "bbox": [393, 227, 10, 9], "area": 82}, {"id": 7566731, "category_id": 77, "iscrowd": 0, "bbox": [300, 233, 18, 11], "area": 36}, {"id": 5842217, "category_id": 84, "iscrowd": 0, "bbox": [360, 217, 26, 22], "area": 406}, {"id": 7188682, "category_id": 118, "iscrowd": 0, "bbox": [0, 259, 613, 168], "area": 26709}, {"id": 15331314, "category_id": 130, "iscrowd": 0, "bbox": [76, 24, 316, 41], "area": 449}, {"id": 5017268, "category_id": 177, "iscrowd": 0, "bbox": [0, 83, 518, 222], "area": 30764}, {"id": 3308972, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 160], "area": 69813}, {"id": 14344676, "category_id": 195, "iscrowd": 0, "bbox": [542, 251, 19, 14], "area": 189}, {"id": 8103097, "category_id": 196, "iscrowd": 0, "bbox": [334, 255, 164, 59], "area": 5130}], "file_name": "000000157767.png", "image_id": 157767}, {"segments_info": [{"id": 3889527, "category_id": 17, "iscrowd": 0, "bbox": [104, 156, 375, 219], "area": 38450}, {"id": 10070972, "category_id": 70, "iscrowd": 0, "bbox": [97, 292, 284, 135], "area": 27198}, {"id": 7244710, "category_id": 81, "iscrowd": 0, "bbox": [539, 103, 101, 113], "area": 7702}, {"id": 5600915, "category_id": 176, "iscrowd": 0, "bbox": [273, 0, 367, 427], "area": 95719}, {"id": 5798810, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 305, 427], "area": 86095}], "file_name": "000000157807.png", "image_id": 157807}, {"segments_info": [{"id": 4142893, "category_id": 16, "iscrowd": 0, "bbox": [377, 94, 26, 20], "area": 189}, {"id": 6116410, "category_id": 184, "iscrowd": 0, "bbox": [0, 145, 640, 240], "area": 139573}, {"id": 15193279, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 84], "area": 46677}, {"id": 12227944, "category_id": 192, "iscrowd": 0, "bbox": [0, 64, 640, 117], "area": 56658}, {"id": 7771517, "category_id": 193, "iscrowd": 0, "bbox": [0, 157, 640, 52], "area": 3284}], "file_name": "000000157847.png", "image_id": 157847}, {"segments_info": [{"id": 2569277, "category_id": 1, "iscrowd": 0, "bbox": [261, 134, 174, 169], "area": 16905}, {"id": 1381148, "category_id": 1, "iscrowd": 0, "bbox": [94, 25, 122, 341], "area": 24740}, {"id": 2499879, "category_id": 3, "iscrowd": 0, "bbox": [0, 99, 109, 148], "area": 12684}, {"id": 4080195, "category_id": 3, "iscrowd": 0, "bbox": [180, 103, 121, 99], "area": 5367}, {"id": 3223856, "category_id": 27, "iscrowd": 0, "bbox": [114, 19, 87, 109], "area": 2890}, {"id": 2893602, "category_id": 27, "iscrowd": 0, "bbox": [298, 84, 145, 85], "area": 7146}, {"id": 10855839, "category_id": 35, "iscrowd": 0, "bbox": [260, 260, 220, 195], "area": 7316}, {"id": 7763573, "category_id": 35, "iscrowd": 0, "bbox": [266, 260, 251, 155], "area": 3708}, {"id": 11184554, "category_id": 159, "iscrowd": 0, "bbox": [0, 140, 640, 340], "area": 143931}, {"id": 856336, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 148], "area": 68442}], "file_name": "000000157928.png", "image_id": 157928}, {"segments_info": [{"id": 6771804, "category_id": 1, "iscrowd": 0, "bbox": [112, 9, 265, 343], "area": 50279}, {"id": 14408146, "category_id": 39, "iscrowd": 0, "bbox": [108, 37, 51, 250], "area": 4130}, {"id": 5729405, "category_id": 184, "iscrowd": 0, "bbox": [0, 212, 500, 133], "area": 17923}, {"id": 5471588, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 500, 297], "area": 89249}, {"id": 6781057, "category_id": 194, "iscrowd": 0, "bbox": [0, 273, 500, 84], "area": 15790}], "file_name": "000000158227.png", "image_id": 158227}, {"segments_info": [{"id": 10788259, "category_id": 1, "iscrowd": 0, "bbox": [281, 191, 9, 8], "area": 36}, {"id": 12700107, "category_id": 1, "iscrowd": 0, "bbox": [590, 186, 5, 10], "area": 36}, {"id": 12954295, "category_id": 1, "iscrowd": 0, "bbox": [252, 192, 3, 7], "area": 10}, {"id": 9673124, "category_id": 1, "iscrowd": 0, "bbox": [619, 186, 8, 20], "area": 76}, {"id": 10722458, "category_id": 1, "iscrowd": 0, "bbox": [225, 191, 12, 16], "area": 115}, {"id": 10982315, "category_id": 1, "iscrowd": 0, "bbox": [259, 192, 4, 10], "area": 23}, {"id": 8153201, "category_id": 1, "iscrowd": 0, "bbox": [491, 186, 5, 16], "area": 49}, {"id": 10327964, "category_id": 1, "iscrowd": 0, "bbox": [514, 189, 5, 13], "area": 43}, {"id": 10924216, "category_id": 1, "iscrowd": 0, "bbox": [602, 189, 7, 15], "area": 60}, {"id": 5652567, "category_id": 1, "iscrowd": 0, "bbox": [585, 183, 6, 9], "area": 39}, {"id": 9143178, "category_id": 1, "iscrowd": 0, "bbox": [499, 184, 7, 15], "area": 55}, {"id": 7426144, "category_id": 1, "iscrowd": 0, "bbox": [208, 183, 15, 41], "area": 314}, {"id": 7889759, "category_id": 1, "iscrowd": 0, "bbox": [530, 181, 45, 79], "area": 1166}, {"id": 7766405, "category_id": 1, "iscrowd": 1, "bbox": [489, 174, 151, 38], "area": 2779}, {"id": 7360344, "category_id": 3, "iscrowd": 0, "bbox": [543, 193, 4, 4], "area": 8}, {"id": 12039084, "category_id": 3, "iscrowd": 0, "bbox": [430, 186, 37, 18], "area": 564}, {"id": 6439239, "category_id": 4, "iscrowd": 0, "bbox": [383, 172, 26, 25], "area": 307}, {"id": 13489873, "category_id": 8, "iscrowd": 0, "bbox": [299, 165, 21, 20], "area": 382}, {"id": 10457473, "category_id": 8, "iscrowd": 0, "bbox": [328, 161, 147, 37], "area": 4373}, {"id": 9411746, "category_id": 20, "iscrowd": 0, "bbox": [140, 236, 45, 70], "area": 2084}, {"id": 10191223, "category_id": 92, "iscrowd": 0, "bbox": [53, 164, 203, 51], "area": 5046}, {"id": 6839128, "category_id": 184, "iscrowd": 0, "bbox": [0, 30, 640, 172], "area": 60314}, {"id": 5654354, "category_id": 185, "iscrowd": 0, "bbox": [484, 178, 8, 24], "area": 107}, {"id": 15849631, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 109], "area": 49239}, {"id": 6857363, "category_id": 193, "iscrowd": 0, "bbox": [0, 195, 640, 287], "area": 175218}, {"id": 9930887, "category_id": 197, "iscrowd": 0, "bbox": [50, 105, 63, 78], "area": 2480}, {"id": 5458005, "category_id": 199, "iscrowd": 0, "bbox": [0, 165, 330, 44], "area": 3191}], "file_name": "000000158548.png", "image_id": 158548}, {"segments_info": [{"id": 3226197, "category_id": 1, "iscrowd": 0, "bbox": [1, 97, 58, 78], "area": 1322}, {"id": 1646384, "category_id": 1, "iscrowd": 0, "bbox": [473, 6, 139, 286], "area": 18987}, {"id": 7111572, "category_id": 51, "iscrowd": 0, "bbox": [71, 252, 255, 115], "area": 16007}, {"id": 9675956, "category_id": 51, "iscrowd": 0, "bbox": [335, 279, 277, 144], "area": 13506}, {"id": 3438241, "category_id": 52, "iscrowd": 0, "bbox": [71, 183, 250, 110], "area": 19671}, {"id": 4336816, "category_id": 53, "iscrowd": 0, "bbox": [437, 265, 130, 80], "area": 7282}, {"id": 3942564, "category_id": 53, "iscrowd": 0, "bbox": [515, 264, 96, 80], "area": 4184}, {"id": 3089536, "category_id": 53, "iscrowd": 0, "bbox": [324, 205, 133, 125], "area": 11595}, {"id": 1840725, "category_id": 53, "iscrowd": 0, "bbox": [382, 267, 86, 72], "area": 1542}, {"id": 2173492, "category_id": 79, "iscrowd": 0, "bbox": [394, 127, 149, 124], "area": 10052}, {"id": 8161175, "category_id": 107, "iscrowd": 0, "bbox": [306, 174, 133, 152], "area": 5012}, {"id": 1452894, "category_id": 196, "iscrowd": 0, "bbox": [0, 180, 71, 125], "area": 4464}, {"id": 874067, "category_id": 199, "iscrowd": 0, "bbox": [256, 0, 334, 52], "area": 12842}], "file_name": "000000158660.png", "image_id": 158660}, {"segments_info": [{"id": 526089, "category_id": 1, "iscrowd": 0, "bbox": [451, 79, 73, 245], "area": 8709}, {"id": 1775123, "category_id": 3, "iscrowd": 0, "bbox": [606, 94, 33, 29], "area": 521}, {"id": 3157296, "category_id": 3, "iscrowd": 0, "bbox": [631, 102, 9, 25], "area": 181}, {"id": 1183245, "category_id": 3, "iscrowd": 0, "bbox": [593, 92, 45, 30], "area": 329}, {"id": 4472122, "category_id": 3, "iscrowd": 0, "bbox": [321, 114, 20, 14], "area": 216}, {"id": 4931903, "category_id": 11, "iscrowd": 0, "bbox": [377, 115, 8, 12], "area": 59}, {"id": 5721159, "category_id": 11, "iscrowd": 0, "bbox": [535, 113, 6, 11], "area": 42}, {"id": 855341, "category_id": 33, "iscrowd": 0, "bbox": [434, 237, 30, 58], "area": 1509}, {"id": 14804979, "category_id": 62, "iscrowd": 0, "bbox": [145, 174, 150, 95], "area": 12236}, {"id": 6509386, "category_id": 62, "iscrowd": 0, "bbox": [486, 164, 88, 113], "area": 3862}, {"id": 15462647, "category_id": 62, "iscrowd": 0, "bbox": [25, 143, 114, 97], "area": 8177}, {"id": 9738141, "category_id": 133, "iscrowd": 0, "bbox": [0, 173, 36, 66], "area": 1478}, {"id": 5065551, "category_id": 149, "iscrowd": 0, "bbox": [0, 111, 640, 240], "area": 56611}, {"id": 5334880, "category_id": 184, "iscrowd": 0, "bbox": [255, 0, 66, 179], "area": 6166}, {"id": 12764875, "category_id": 185, "iscrowd": 0, "bbox": [0, 51, 182, 147], "area": 17614}, {"id": 3946301, "category_id": 191, "iscrowd": 0, "bbox": [0, 113, 640, 311], "area": 49210}, {"id": 6776938, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 195], "area": 66233}], "file_name": "000000158744.png", "image_id": 158744}, {"segments_info": [{"id": 6248017, "category_id": 1, "iscrowd": 0, "bbox": [393, 256, 34, 115], "area": 1026}, {"id": 8812906, "category_id": 1, "iscrowd": 0, "bbox": [98, 43, 59, 184], "area": 6410}, {"id": 6183772, "category_id": 22, "iscrowd": 0, "bbox": [134, 173, 278, 419], "area": 76427}, {"id": 4473409, "category_id": 62, "iscrowd": 0, "bbox": [210, 109, 190, 130], "area": 14079}, {"id": 7904642, "category_id": 193, "iscrowd": 0, "bbox": [0, 303, 478, 172], "area": 15015}, {"id": 9014417, "category_id": 194, "iscrowd": 0, "bbox": [0, 302, 478, 338], "area": 87255}, {"id": 3949131, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 205, 395], "area": 37389}, {"id": 4014400, "category_id": 198, "iscrowd": 0, "bbox": [11, 18, 467, 309], "area": 41632}], "file_name": "000000158945.png", "image_id": 158945}, {"segments_info": [{"id": 2635380, "category_id": 1, "iscrowd": 0, "bbox": [169, 39, 324, 379], "area": 51662}, {"id": 4343719, "category_id": 31, "iscrowd": 0, "bbox": [214, 375, 50, 45], "area": 2127}, {"id": 3027810, "category_id": 49, "iscrowd": 0, "bbox": [206, 171, 12, 150], "area": 727}, {"id": 5799067, "category_id": 61, "iscrowd": 0, "bbox": [167, 309, 127, 44], "area": 4474}, {"id": 1447500, "category_id": 62, "iscrowd": 0, "bbox": [608, 314, 32, 111], "area": 2708}, {"id": 3554888, "category_id": 144, "iscrowd": 0, "bbox": [0, 271, 356, 154], "area": 32004}, {"id": 1248850, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 197, 132], "area": 24571}, {"id": 3952230, "category_id": 189, "iscrowd": 0, "bbox": [139, 345, 167, 80], "area": 6204}, {"id": 3294339, "category_id": 190, "iscrowd": 0, "bbox": [476, 393, 147, 32], "area": 1970}, {"id": 10006975, "category_id": 195, "iscrowd": 0, "bbox": [132, 332, 179, 28], "area": 1270}, {"id": 4608878, "category_id": 196, "iscrowd": 0, "bbox": [189, 352, 21, 7], "area": 88}, {"id": 3294652, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 417], "area": 139063}], "file_name": "000000158956.png", "image_id": 158956}, {"segments_info": [{"id": 4675718, "category_id": 59, "iscrowd": 0, "bbox": [1, 2, 639, 443], "area": 274533}, {"id": 3492987, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 434], "area": 2956}], "file_name": "000000159112.png", "image_id": 159112}, {"segments_info": [{"id": 1520692, "category_id": 64, "iscrowd": 0, "bbox": [64, 2, 447, 413], "area": 65884}, {"id": 5003091, "category_id": 86, "iscrowd": 0, "bbox": [229, 190, 74, 225], "area": 14830}, {"id": 462352, "category_id": 119, "iscrowd": 0, "bbox": [49, 0, 291, 89], "area": 3809}, {"id": 2303269, "category_id": 181, "iscrowd": 0, "bbox": [407, 0, 233, 205], "area": 16872}, {"id": 4674376, "category_id": 184, "iscrowd": 0, "bbox": [202, 0, 438, 205], "area": 17017}, {"id": 15980456, "category_id": 187, "iscrowd": 0, "bbox": [498, 0, 129, 45], "area": 3497}, {"id": 7237484, "category_id": 189, "iscrowd": 0, "bbox": [0, 113, 640, 313], "area": 77005}, {"id": 13217927, "category_id": 192, "iscrowd": 0, "bbox": [475, 0, 54, 36], "area": 1331}, {"id": 460551, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 357], "area": 44375}], "file_name": "000000159282.png", "image_id": 159282}, {"segments_info": [{"id": 4805723, "category_id": 24, "iscrowd": 0, "bbox": [50, 2, 297, 224], "area": 14070}, {"id": 5266017, "category_id": 24, "iscrowd": 0, "bbox": [2, 1, 307, 268], "area": 42079}, {"id": 5798779, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 500, 333], "area": 108933}], "file_name": "000000159311.png", "image_id": 159311}, {"segments_info": [{"id": 4210243, "category_id": 1, "iscrowd": 0, "bbox": [173, 339, 8, 11], "area": 58}, {"id": 4809319, "category_id": 1, "iscrowd": 0, "bbox": [232, 331, 13, 20], "area": 167}, {"id": 3751996, "category_id": 1, "iscrowd": 0, "bbox": [554, 313, 48, 51], "area": 1003}, {"id": 2173994, "category_id": 1, "iscrowd": 0, "bbox": [339, 279, 44, 118], "area": 1961}, {"id": 5198939, "category_id": 1, "iscrowd": 0, "bbox": [153, 330, 20, 22], "area": 224}, {"id": 6117460, "category_id": 1, "iscrowd": 0, "bbox": [255, 335, 7, 15], "area": 82}, {"id": 2171174, "category_id": 27, "iscrowd": 0, "bbox": [346, 315, 21, 28], "area": 423}, {"id": 11576218, "category_id": 38, "iscrowd": 0, "bbox": [192, 83, 54, 44], "area": 100}, {"id": 8755336, "category_id": 38, "iscrowd": 0, "bbox": [264, 36, 42, 20], "area": 434}, {"id": 4739916, "category_id": 184, "iscrowd": 0, "bbox": [0, 15, 640, 339], "area": 89373}, {"id": 13353909, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 348], "area": 123147}, {"id": 1988677, "category_id": 193, "iscrowd": 0, "bbox": [0, 338, 640, 142], "area": 82617}, {"id": 2040099, "category_id": 197, "iscrowd": 0, "bbox": [316, 265, 140, 86], "area": 7341}], "file_name": "000000159399.png", "image_id": 159399}, {"segments_info": [{"id": 9750752, "category_id": 18, "iscrowd": 0, "bbox": [220, 217, 91, 35], "area": 2016}, {"id": 5670317, "category_id": 62, "iscrowd": 0, "bbox": [525, 247, 115, 182], "area": 6717}, {"id": 8360093, "category_id": 65, "iscrowd": 0, "bbox": [112, 163, 405, 301], "area": 78713}, {"id": 3243446, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 56, 361], "area": 13865}, {"id": 3761293, "category_id": 118, "iscrowd": 0, "bbox": [10, 323, 573, 157], "area": 42836}, {"id": 6000815, "category_id": 186, "iscrowd": 0, "bbox": [341, 0, 112, 21], "area": 1666}, {"id": 11711137, "category_id": 188, "iscrowd": 0, "bbox": [0, 244, 19, 236], "area": 2790}, {"id": 5019836, "category_id": 199, "iscrowd": 0, "bbox": [30, 0, 610, 377], "area": 145110}], "file_name": "000000159458.png", "image_id": 159458}, {"segments_info": [{"id": 7302254, "category_id": 7, "iscrowd": 0, "bbox": [73, 140, 567, 218], "area": 77304}, {"id": 9472893, "category_id": 85, "iscrowd": 0, "bbox": [7, 117, 32, 32], "area": 799}, {"id": 7896187, "category_id": 144, "iscrowd": 0, "bbox": [0, 270, 640, 118], "area": 20100}, {"id": 4275514, "category_id": 147, "iscrowd": 0, "bbox": [0, 253, 640, 135], "area": 29384}, {"id": 6647152, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 211], "area": 105757}, {"id": 15130586, "category_id": 197, "iscrowd": 0, "bbox": [602, 194, 38, 21], "area": 548}, {"id": 9411484, "category_id": 199, "iscrowd": 0, "bbox": [0, 127, 144, 175], "area": 11522}], "file_name": "000000159684.png", "image_id": 159684}, {"segments_info": [{"id": 7954521, "category_id": 1, "iscrowd": 0, "bbox": [166, 283, 26, 43], "area": 753}, {"id": 6513529, "category_id": 1, "iscrowd": 0, "bbox": [147, 204, 12, 30], "area": 114}, {"id": 6250370, "category_id": 1, "iscrowd": 0, "bbox": [149, 215, 7, 15], "area": 83}, {"id": 7758440, "category_id": 1, "iscrowd": 0, "bbox": [216, 316, 15, 24], "area": 251}, {"id": 6574169, "category_id": 1, "iscrowd": 0, "bbox": [265, 306, 23, 28], "area": 409}, {"id": 6506077, "category_id": 1, "iscrowd": 0, "bbox": [259, 328, 30, 34], "area": 527}, {"id": 4210011, "category_id": 1, "iscrowd": 0, "bbox": [138, 215, 7, 17], "area": 76}, {"id": 4403511, "category_id": 1, "iscrowd": 0, "bbox": [230, 314, 27, 29], "area": 412}, {"id": 6569275, "category_id": 16, "iscrowd": 0, "bbox": [283, 64, 21, 18], "area": 126}, {"id": 7365211, "category_id": 51, "iscrowd": 0, "bbox": [70, 239, 41, 11], "area": 313}, {"id": 2103829, "category_id": 62, "iscrowd": 0, "bbox": [1, 295, 124, 80], "area": 8072}, {"id": 7696233, "category_id": 78, "iscrowd": 0, "bbox": [0, 193, 30, 51], "area": 1370}, {"id": 920844, "category_id": 79, "iscrowd": 0, "bbox": [24, 246, 97, 107], "area": 5382}, {"id": 921100, "category_id": 79, "iscrowd": 0, "bbox": [37, 194, 73, 48], "area": 3117}, {"id": 9796724, "category_id": 82, "iscrowd": 0, "bbox": [110, 1, 304, 368], "area": 99964}, {"id": 1250065, "category_id": 181, "iscrowd": 0, "bbox": [463, 0, 37, 157], "area": 5455}, {"id": 10459543, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 225, 297], "area": 20575}, {"id": 7761770, "category_id": 195, "iscrowd": 0, "bbox": [12, 154, 77, 56], "area": 2654}, {"id": 9331286, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 349], "area": 29138}], "file_name": "000000159791.png", "image_id": 159791}, {"segments_info": [{"id": 10063234, "category_id": 16, "iscrowd": 0, "bbox": [238, 102, 6, 13], "area": 46}, {"id": 5657162, "category_id": 16, "iscrowd": 0, "bbox": [260, 114, 4, 7], "area": 18}, {"id": 4869707, "category_id": 24, "iscrowd": 0, "bbox": [199, 225, 48, 89], "area": 1993}, {"id": 3097430, "category_id": 25, "iscrowd": 0, "bbox": [333, 54, 188, 282], "area": 15856}, {"id": 12299165, "category_id": 148, "iscrowd": 0, "bbox": [0, 62, 640, 59], "area": 27277}, {"id": 6907748, "category_id": 154, "iscrowd": 0, "bbox": [0, 43, 640, 37], "area": 9187}, {"id": 4014388, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 20, 55], "area": 903}, {"id": 3165503, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 424], "area": 204558}, {"id": 3159095, "category_id": 194, "iscrowd": 0, "bbox": [158, 201, 482, 62], "area": 11234}], "file_name": "000000159977.png", "image_id": 159977}, {"segments_info": [{"id": 1918335, "category_id": 1, "iscrowd": 0, "bbox": [156, 0, 383, 183], "area": 47951}, {"id": 5349059, "category_id": 3, "iscrowd": 0, "bbox": [508, 6, 106, 67], "area": 4836}, {"id": 601143, "category_id": 44, "iscrowd": 0, "bbox": [2, 1, 107, 389], "area": 32668}, {"id": 728656, "category_id": 48, "iscrowd": 0, "bbox": [506, 144, 19, 20], "area": 174}, {"id": 530737, "category_id": 49, "iscrowd": 0, "bbox": [485, 133, 34, 21], "area": 202}, {"id": 1793994, "category_id": 59, "iscrowd": 0, "bbox": [394, 155, 235, 78], "area": 11190}, {"id": 2254793, "category_id": 59, "iscrowd": 0, "bbox": [105, 200, 515, 261], "area": 103751}, {"id": 132875, "category_id": 62, "iscrowd": 0, "bbox": [1, 85, 148, 112], "area": 4457}, {"id": 2110021, "category_id": 67, "iscrowd": 0, "bbox": [3, 161, 636, 293], "area": 38756}, {"id": 4035529, "category_id": 149, "iscrowd": 0, "bbox": [469, 16, 171, 154], "area": 15044}, {"id": 332054, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 239, 86], "area": 12204}, {"id": 3954800, "category_id": 189, "iscrowd": 0, "bbox": [0, 138, 640, 323], "area": 6897}, {"id": 337220, "category_id": 190, "iscrowd": 0, "bbox": [86, 112, 153, 117], "area": 3410}, {"id": 466730, "category_id": 193, "iscrowd": 0, "bbox": [82, 71, 110, 48], "area": 1846}, {"id": 3424843, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 119], "area": 2600}], "file_name": "000000160012.png", "image_id": 160012}, {"segments_info": [{"id": 789779, "category_id": 1, "iscrowd": 0, "bbox": [455, 77, 184, 346], "area": 43624}, {"id": 10718334, "category_id": 72, "iscrowd": 0, "bbox": [279, 134, 127, 129], "area": 7388}, {"id": 2299405, "category_id": 73, "iscrowd": 0, "bbox": [440, 243, 33, 28], "area": 507}, {"id": 5919305, "category_id": 76, "iscrowd": 0, "bbox": [347, 273, 115, 57], "area": 4008}, {"id": 2167828, "category_id": 77, "iscrowd": 0, "bbox": [395, 245, 19, 40], "area": 723}, {"id": 1842975, "category_id": 77, "iscrowd": 0, "bbox": [565, 142, 38, 43], "area": 569}, {"id": 3815743, "category_id": 78, "iscrowd": 0, "bbox": [1, 110, 348, 266], "area": 76341}, {"id": 4268299, "category_id": 88, "iscrowd": 0, "bbox": [182, 108, 34, 29], "area": 789}, {"id": 4473658, "category_id": 88, "iscrowd": 0, "bbox": [14, 57, 83, 67], "area": 3135}, {"id": 3619951, "category_id": 92, "iscrowd": 0, "bbox": [0, 0, 413, 147], "area": 10568}, {"id": 6449003, "category_id": 130, "iscrowd": 0, "bbox": [16, 0, 515, 124], "area": 2333}, {"id": 2039842, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 150], "area": 57688}, {"id": 7039079, "category_id": 189, "iscrowd": 0, "bbox": [0, 291, 527, 137], "area": 33128}, {"id": 789259, "category_id": 190, "iscrowd": 0, "bbox": [291, 328, 251, 100], "area": 10822}, {"id": 4082261, "category_id": 199, "iscrowd": 0, "bbox": [315, 82, 325, 176], "area": 14658}], "file_name": "000000160556.png", "image_id": 160556}, {"segments_info": [{"id": 3686548, "category_id": 90, "iscrowd": 0, "bbox": [0, 240, 570, 171], "area": 26715}, {"id": 8953013, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 219808}], "file_name": "000000160666.png", "image_id": 160666}, {"segments_info": [{"id": 3486011, "category_id": 1, "iscrowd": 0, "bbox": [214, 277, 16, 14], "area": 141}, {"id": 3816001, "category_id": 1, "iscrowd": 0, "bbox": [228, 250, 6, 10], "area": 42}, {"id": 3681835, "category_id": 1, "iscrowd": 0, "bbox": [190, 257, 6, 13], "area": 55}, {"id": 2301468, "category_id": 1, "iscrowd": 0, "bbox": [203, 272, 9, 17], "area": 60}, {"id": 7170412, "category_id": 1, "iscrowd": 0, "bbox": [592, 269, 6, 8], "area": 32}, {"id": 3618624, "category_id": 1, "iscrowd": 0, "bbox": [193, 272, 9, 13], "area": 74}, {"id": 3945538, "category_id": 1, "iscrowd": 0, "bbox": [247, 275, 35, 80], "area": 1255}, {"id": 3486776, "category_id": 1, "iscrowd": 0, "bbox": [269, 266, 70, 120], "area": 3484}, {"id": 3090471, "category_id": 1, "iscrowd": 0, "bbox": [600, 266, 8, 7], "area": 34}, {"id": 2696745, "category_id": 1, "iscrowd": 0, "bbox": [609, 316, 19, 24], "area": 310}, {"id": 2762036, "category_id": 1, "iscrowd": 0, "bbox": [200, 280, 11, 14], "area": 99}, {"id": 4602679, "category_id": 1, "iscrowd": 0, "bbox": [581, 265, 11, 14], "area": 86}, {"id": 3026223, "category_id": 1, "iscrowd": 0, "bbox": [203, 251, 6, 11], "area": 40}, {"id": 6710115, "category_id": 3, "iscrowd": 0, "bbox": [471, 236, 16, 8], "area": 67}, {"id": 4670011, "category_id": 3, "iscrowd": 0, "bbox": [544, 236, 18, 8], "area": 69}, {"id": 4406075, "category_id": 3, "iscrowd": 0, "bbox": [513, 239, 13, 5], "area": 50}, {"id": 9868689, "category_id": 3, "iscrowd": 0, "bbox": [498, 239, 9, 6], "area": 27}, {"id": 9996671, "category_id": 3, "iscrowd": 0, "bbox": [508, 236, 8, 6], "area": 27}, {"id": 5656647, "category_id": 3, "iscrowd": 0, "bbox": [463, 238, 12, 7], "area": 60}, {"id": 8156267, "category_id": 3, "iscrowd": 0, "bbox": [481, 239, 11, 5], "area": 29}, {"id": 4801343, "category_id": 3, "iscrowd": 0, "bbox": [489, 237, 18, 8], "area": 70}, {"id": 5988186, "category_id": 3, "iscrowd": 0, "bbox": [455, 237, 11, 8], "area": 50}, {"id": 7299923, "category_id": 9, "iscrowd": 0, "bbox": [277, 200, 59, 61], "area": 1564}, {"id": 6445132, "category_id": 9, "iscrowd": 0, "bbox": [0, 245, 41, 25], "area": 888}, {"id": 6116677, "category_id": 9, "iscrowd": 0, "bbox": [196, 263, 47, 16], "area": 386}, {"id": 3494471, "category_id": 9, "iscrowd": 0, "bbox": [140, 346, 150, 38], "area": 3028}, {"id": 6773572, "category_id": 9, "iscrowd": 0, "bbox": [331, 249, 70, 22], "area": 1069}, {"id": 4735539, "category_id": 9, "iscrowd": 0, "bbox": [243, 253, 44, 13], "area": 344}, {"id": 3748396, "category_id": 9, "iscrowd": 0, "bbox": [142, 280, 91, 19], "area": 713}, {"id": 6050629, "category_id": 9, "iscrowd": 0, "bbox": [392, 246, 30, 18], "area": 323}, {"id": 7497561, "category_id": 9, "iscrowd": 0, "bbox": [574, 274, 41, 10], "area": 271}, {"id": 6972500, "category_id": 9, "iscrowd": 0, "bbox": [272, 243, 30, 20], "area": 302}, {"id": 7432543, "category_id": 9, "iscrowd": 0, "bbox": [176, 288, 68, 16], "area": 577}, {"id": 3879477, "category_id": 9, "iscrowd": 0, "bbox": [473, 242, 62, 25], "area": 881}, {"id": 6049851, "category_id": 9, "iscrowd": 0, "bbox": [38, 249, 76, 12], "area": 800}, {"id": 10789276, "category_id": 9, "iscrowd": 1, "bbox": [76, 371, 114, 55], "area": 635}, {"id": 10131092, "category_id": 42, "iscrowd": 0, "bbox": [80, 367, 104, 59], "area": 3378}, {"id": 10985656, "category_id": 42, "iscrowd": 0, "bbox": [153, 333, 126, 22], "area": 451}, {"id": 4012343, "category_id": 128, "iscrowd": 0, "bbox": [249, 200, 243, 57], "area": 6073}, {"id": 9932154, "category_id": 155, "iscrowd": 0, "bbox": [0, 234, 640, 192], "area": 86747}, {"id": 14599076, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 258], "area": 126482}, {"id": 2829355, "category_id": 192, "iscrowd": 0, "bbox": [389, 120, 251, 131], "area": 20737}, {"id": 3815221, "category_id": 197, "iscrowd": 0, "bbox": [374, 218, 266, 45], "area": 4677}, {"id": 4801602, "category_id": 198, "iscrowd": 0, "bbox": [0, 233, 221, 24], "area": 1868}], "file_name": "000000160728.png", "image_id": 160728}, {"segments_info": [{"id": 7438218, "category_id": 1, "iscrowd": 0, "bbox": [462, 217, 4, 8], "area": 24}, {"id": 9012623, "category_id": 1, "iscrowd": 0, "bbox": [166, 219, 9, 10], "area": 61}, {"id": 7632763, "category_id": 1, "iscrowd": 0, "bbox": [272, 223, 9, 8], "area": 48}, {"id": 6580859, "category_id": 1, "iscrowd": 0, "bbox": [234, 223, 11, 8], "area": 58}, {"id": 7561049, "category_id": 1, "iscrowd": 0, "bbox": [160, 217, 7, 15], "area": 64}, {"id": 3553085, "category_id": 1, "iscrowd": 0, "bbox": [186, 224, 7, 9], "area": 40}, {"id": 3025967, "category_id": 1, "iscrowd": 0, "bbox": [254, 221, 8, 9], "area": 33}, {"id": 4210755, "category_id": 1, "iscrowd": 0, "bbox": [260, 223, 10, 9], "area": 41}, {"id": 8749441, "category_id": 1, "iscrowd": 0, "bbox": [307, 220, 14, 11], "area": 70}, {"id": 4276035, "category_id": 1, "iscrowd": 0, "bbox": [335, 222, 8, 8], "area": 52}, {"id": 9343634, "category_id": 9, "iscrowd": 0, "bbox": [85, 134, 472, 133], "area": 28896}, {"id": 4541510, "category_id": 155, "iscrowd": 0, "bbox": [0, 232, 640, 280], "area": 162045}, {"id": 10853498, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 255], "area": 130618}, {"id": 8025963, "category_id": 197, "iscrowd": 0, "bbox": [265, 90, 65, 106], "area": 5359}], "file_name": "000000160772.png", "image_id": 160772}, {"segments_info": [{"id": 11047295, "category_id": 1, "iscrowd": 0, "bbox": [284, 59, 241, 301], "area": 20441}, {"id": 9864822, "category_id": 1, "iscrowd": 0, "bbox": [543, 45, 68, 213], "area": 8144}, {"id": 10259063, "category_id": 1, "iscrowd": 0, "bbox": [436, 68, 151, 233], "area": 11756}, {"id": 10849399, "category_id": 1, "iscrowd": 0, "bbox": [133, 86, 123, 211], "area": 8876}, {"id": 5654331, "category_id": 1, "iscrowd": 0, "bbox": [181, 0, 90, 86], "area": 5573}, {"id": 6705735, "category_id": 1, "iscrowd": 0, "bbox": [6, 169, 183, 202], "area": 18302}, {"id": 9472896, "category_id": 37, "iscrowd": 0, "bbox": [624, 223, 8, 7], "area": 47}, {"id": 8349810, "category_id": 39, "iscrowd": 0, "bbox": [572, 171, 16, 95], "area": 383}, {"id": 6644333, "category_id": 39, "iscrowd": 0, "bbox": [130, 43, 83, 63], "area": 529}, {"id": 9531740, "category_id": 39, "iscrowd": 0, "bbox": [311, 19, 60, 90], "area": 1022}, {"id": 5656910, "category_id": 39, "iscrowd": 0, "bbox": [252, 270, 48, 12], "area": 221}, {"id": 10392938, "category_id": 39, "iscrowd": 0, "bbox": [452, 19, 36, 70], "area": 539}, {"id": 7168339, "category_id": 40, "iscrowd": 0, "bbox": [593, 151, 15, 26], "area": 240}, {"id": 4012080, "category_id": 40, "iscrowd": 0, "bbox": [398, 254, 27, 17], "area": 270}, {"id": 7172215, "category_id": 40, "iscrowd": 0, "bbox": [150, 229, 46, 47], "area": 1135}, {"id": 1974045, "category_id": 40, "iscrowd": 0, "bbox": [529, 83, 13, 24], "area": 221}, {"id": 7822903, "category_id": 62, "iscrowd": 0, "bbox": [280, 168, 41, 92], "area": 850}, {"id": 6576203, "category_id": 62, "iscrowd": 0, "bbox": [290, 173, 53, 96], "area": 2366}, {"id": 10665416, "category_id": 138, "iscrowd": 0, "bbox": [0, 0, 354, 100], "area": 22809}, {"id": 7370874, "category_id": 145, "iscrowd": 0, "bbox": [0, 242, 640, 147], "area": 59626}, {"id": 6249818, "category_id": 194, "iscrowd": 0, "bbox": [88, 238, 235, 48], "area": 2681}, {"id": 6908774, "category_id": 197, "iscrowd": 0, "bbox": [310, 0, 330, 278], "area": 44273}, {"id": 8211234, "category_id": 199, "iscrowd": 0, "bbox": [0, 81, 356, 179], "area": 35809}], "file_name": "000000160864.png", "image_id": 160864}, {"segments_info": [{"id": 5526866, "category_id": 87, "iscrowd": 0, "bbox": [84, 0, 491, 474], "area": 60659}, {"id": 1582383, "category_id": 118, "iscrowd": 0, "bbox": [0, 245, 25, 235], "area": 4108}, {"id": 5332315, "category_id": 195, "iscrowd": 0, "bbox": [455, 318, 106, 162], "area": 7334}, {"id": 2631977, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 264], "area": 31071}], "file_name": "000000161008.png", "image_id": 161008}, {"segments_info": [{"id": 3754075, "category_id": 1, "iscrowd": 0, "bbox": [354, 201, 171, 199], "area": 18930}, {"id": 3818874, "category_id": 28, "iscrowd": 0, "bbox": [325, 146, 152, 123], "area": 7307}, {"id": 1779251, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 184470}, {"id": 15725813, "category_id": 184, "iscrowd": 0, "bbox": [446, 141, 112, 74], "area": 5562}, {"id": 1120551, "category_id": 186, "iscrowd": 0, "bbox": [231, 0, 206, 38], "area": 5032}, {"id": 16251385, "category_id": 187, "iscrowd": 0, "bbox": [448, 91, 112, 66], "area": 4066}, {"id": 3491158, "category_id": 194, "iscrowd": 0, "bbox": [83, 317, 557, 163], "area": 77194}, {"id": 15133679, "category_id": 197, "iscrowd": 0, "bbox": [501, 199, 55, 55], "area": 1598}], "file_name": "000000161032.png", "image_id": 161032}, {"segments_info": [{"id": 4209724, "category_id": 5, "iscrowd": 0, "bbox": [307, 160, 23, 24], "area": 232}, {"id": 3091241, "category_id": 5, "iscrowd": 0, "bbox": [361, 183, 22, 22], "area": 186}, {"id": 11116441, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 229], "area": 146097}], "file_name": "000000161044.png", "image_id": 161044}, {"segments_info": [{"id": 1907765, "category_id": 1, "iscrowd": 0, "bbox": [107, 390, 8, 27], "area": 154}, {"id": 1974315, "category_id": 1, "iscrowd": 0, "bbox": [137, 386, 8, 25], "area": 102}, {"id": 722961, "category_id": 1, "iscrowd": 0, "bbox": [97, 387, 9, 30], "area": 161}, {"id": 6182998, "category_id": 3, "iscrowd": 0, "bbox": [0, 391, 50, 47], "area": 1636}, {"id": 2037797, "category_id": 3, "iscrowd": 0, "bbox": [307, 383, 28, 14], "area": 197}, {"id": 3618366, "category_id": 3, "iscrowd": 0, "bbox": [1, 401, 10, 55], "area": 291}, {"id": 5525083, "category_id": 3, "iscrowd": 0, "bbox": [146, 384, 8, 5], "area": 34}, {"id": 919562, "category_id": 3, "iscrowd": 0, "bbox": [41, 380, 37, 37], "area": 1096}, {"id": 1116938, "category_id": 3, "iscrowd": 0, "bbox": [285, 381, 18, 10], "area": 130}, {"id": 1906454, "category_id": 3, "iscrowd": 0, "bbox": [269, 390, 47, 26], "area": 882}, {"id": 919561, "category_id": 3, "iscrowd": 0, "bbox": [233, 387, 10, 18], "area": 127}, {"id": 919305, "category_id": 8, "iscrowd": 0, "bbox": [200, 358, 38, 82], "area": 2405}, {"id": 1973549, "category_id": 11, "iscrowd": 0, "bbox": [361, 399, 4, 10], "area": 34}, {"id": 4934997, "category_id": 149, "iscrowd": 0, "bbox": [0, 389, 375, 111], "area": 15749}, {"id": 2894122, "category_id": 184, "iscrowd": 0, "bbox": [0, 101, 375, 349], "area": 44232}, {"id": 12493456, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 375, 369], "area": 75352}, {"id": 2368557, "category_id": 191, "iscrowd": 0, "bbox": [0, 391, 375, 109], "area": 11518}, {"id": 3354417, "category_id": 197, "iscrowd": 0, "bbox": [26, 335, 349, 57], "area": 3847}, {"id": 2897206, "category_id": 199, "iscrowd": 0, "bbox": [306, 389, 15, 10], "area": 80}], "file_name": "000000161128.png", "image_id": 161128}, {"segments_info": [{"id": 3160646, "category_id": 1, "iscrowd": 0, "bbox": [282, 0, 84, 180], "area": 9575}, {"id": 7506835, "category_id": 86, "iscrowd": 0, "bbox": [91, 279, 149, 86], "area": 10804}, {"id": 7831431, "category_id": 86, "iscrowd": 0, "bbox": [0, 234, 110, 115], "area": 10309}, {"id": 7635094, "category_id": 119, "iscrowd": 0, "bbox": [0, 11, 316, 304], "area": 64232}, {"id": 2700096, "category_id": 189, "iscrowd": 0, "bbox": [0, 163, 359, 317], "area": 47047}, {"id": 12633801, "category_id": 190, "iscrowd": 0, "bbox": [275, 86, 365, 394], "area": 115309}], "file_name": "000000161397.png", "image_id": 161397}, {"segments_info": [{"id": 1252128, "category_id": 1, "iscrowd": 0, "bbox": [159, 212, 48, 134], "area": 2995}, {"id": 922907, "category_id": 1, "iscrowd": 0, "bbox": [109, 189, 60, 151], "area": 5101}, {"id": 2171685, "category_id": 1, "iscrowd": 0, "bbox": [278, 68, 362, 408], "area": 86143}, {"id": 2577787, "category_id": 18, "iscrowd": 0, "bbox": [245, 270, 131, 78], "area": 6912}, {"id": 3618877, "category_id": 27, "iscrowd": 0, "bbox": [72, 202, 362, 272], "area": 26412}, {"id": 5069672, "category_id": 31, "iscrowd": 0, "bbox": [139, 276, 19, 46], "area": 483}, {"id": 1848120, "category_id": 31, "iscrowd": 0, "bbox": [182, 228, 26, 56], "area": 438}, {"id": 14016229, "category_id": 130, "iscrowd": 0, "bbox": [90, 116, 130, 72], "area": 1827}, {"id": 595770, "category_id": 161, "iscrowd": 0, "bbox": [0, 265, 240, 215], "area": 24217}, {"id": 7443110, "category_id": 185, "iscrowd": 0, "bbox": [0, 183, 277, 143], "area": 8029}, {"id": 2178649, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 286], "area": 71212}, {"id": 4873319, "category_id": 199, "iscrowd": 0, "bbox": [0, 26, 613, 342], "area": 49253}], "file_name": "000000161609.png", "image_id": 161609}, {"segments_info": [{"id": 11645618, "category_id": 85, "iscrowd": 0, "bbox": [144, 185, 146, 145], "area": 16091}, {"id": 11252151, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 287633}], "file_name": "000000161642.png", "image_id": 161642}, {"segments_info": [{"id": 8287079, "category_id": 1, "iscrowd": 0, "bbox": [261, 20, 205, 342], "area": 29544}, {"id": 12363159, "category_id": 35, "iscrowd": 0, "bbox": [144, 335, 358, 47], "area": 3573}, {"id": 15523541, "category_id": 159, "iscrowd": 0, "bbox": [0, 198, 640, 230], "area": 107752}], "file_name": "000000161781.png", "image_id": 161781}, {"segments_info": [{"id": 12301234, "category_id": 1, "iscrowd": 0, "bbox": [49, 227, 22, 40], "area": 360}, {"id": 9469550, "category_id": 1, "iscrowd": 0, "bbox": [326, 238, 10, 38], "area": 224}, {"id": 8613215, "category_id": 1, "iscrowd": 0, "bbox": [301, 240, 13, 39], "area": 176}, {"id": 8548198, "category_id": 1, "iscrowd": 0, "bbox": [192, 73, 113, 163], "area": 6647}, {"id": 9597789, "category_id": 1, "iscrowd": 0, "bbox": [287, 245, 9, 28], "area": 131}, {"id": 7368824, "category_id": 1, "iscrowd": 0, "bbox": [579, 212, 36, 78], "area": 1138}, {"id": 9602683, "category_id": 41, "iscrowd": 0, "bbox": [221, 193, 71, 49], "area": 591}, {"id": 7894627, "category_id": 41, "iscrowd": 0, "bbox": [591, 286, 15, 6], "area": 58}, {"id": 8154991, "category_id": 128, "iscrowd": 0, "bbox": [615, 220, 25, 64], "area": 975}, {"id": 9545121, "category_id": 184, "iscrowd": 0, "bbox": [0, 152, 640, 140], "area": 22602}, {"id": 16579833, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 259], "area": 124294}, {"id": 11706244, "category_id": 191, "iscrowd": 0, "bbox": [0, 257, 640, 170], "area": 96526}, {"id": 4813400, "category_id": 193, "iscrowd": 0, "bbox": [615, 272, 25, 21], "area": 248}, {"id": 7965840, "category_id": 197, "iscrowd": 0, "bbox": [33, 206, 326, 81], "area": 11865}, {"id": 8616870, "category_id": 199, "iscrowd": 0, "bbox": [452, 138, 188, 152], "area": 3979}], "file_name": "000000161799.png", "image_id": 161799}, {"segments_info": [{"id": 4617316, "category_id": 52, "iscrowd": 0, "bbox": [78, 2, 350, 632], "area": 181498}, {"id": 3101255, "category_id": 122, "iscrowd": 0, "bbox": [188, 0, 240, 640], "area": 3706}, {"id": 5194336, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 200, 640], "area": 88084}], "file_name": "000000161820.png", "image_id": 161820}, {"segments_info": [{"id": 11112855, "category_id": 1, "iscrowd": 0, "bbox": [177, 79, 99, 237], "area": 9951}, {"id": 10065570, "category_id": 43, "iscrowd": 0, "bbox": [148, 179, 75, 51], "area": 1329}, {"id": 9541535, "category_id": 145, "iscrowd": 0, "bbox": [0, 112, 406, 213], "area": 47747}, {"id": 6914169, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 128268}], "file_name": "000000161861.png", "image_id": 161861}, {"segments_info": [{"id": 2500136, "category_id": 1, "iscrowd": 0, "bbox": [174, 73, 108, 313], "area": 20608}, {"id": 395051, "category_id": 32, "iscrowd": 0, "bbox": [224, 125, 17, 45], "area": 418}, {"id": 6649208, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 227], "area": 74570}, {"id": 15462130, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 388, 84], "area": 21136}, {"id": 5541763, "category_id": 193, "iscrowd": 0, "bbox": [0, 106, 640, 267], "area": 53787}, {"id": 2897211, "category_id": 194, "iscrowd": 0, "bbox": [0, 218, 640, 204], "area": 98993}], "file_name": "000000161875.png", "image_id": 161875}, {"segments_info": [{"id": 2631720, "category_id": 1, "iscrowd": 0, "bbox": [55, 1, 182, 340], "area": 27911}, {"id": 4144959, "category_id": 41, "iscrowd": 0, "bbox": [11, 296, 200, 59], "area": 3246}, {"id": 8882055, "category_id": 144, "iscrowd": 0, "bbox": [0, 341, 640, 228], "area": 83406}, {"id": 2105376, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 286, 99], "area": 9314}, {"id": 5658198, "category_id": 185, "iscrowd": 0, "bbox": [201, 0, 439, 283], "area": 81824}, {"id": 16448250, "category_id": 187, "iscrowd": 0, "bbox": [224, 0, 416, 44], "area": 6012}, {"id": 4868682, "category_id": 197, "iscrowd": 0, "bbox": [285, 0, 42, 23], "area": 718}, {"id": 855309, "category_id": 199, "iscrowd": 0, "bbox": [0, 94, 117, 94], "area": 7142}], "file_name": "000000161879.png", "image_id": 161879}, {"segments_info": [{"id": 3156520, "category_id": 1, "iscrowd": 0, "bbox": [247, 93, 173, 540], "area": 59112}, {"id": 6778981, "category_id": 1, "iscrowd": 0, "bbox": [0, 101, 182, 532], "area": 64394}, {"id": 8629194, "category_id": 59, "iscrowd": 0, "bbox": [175, 301, 77, 34], "area": 2081}, {"id": 3161430, "category_id": 107, "iscrowd": 0, "bbox": [198, 246, 270, 152], "area": 5687}, {"id": 14082531, "category_id": 112, "iscrowd": 0, "bbox": [177, 78, 42, 123], "area": 3540}, {"id": 9745866, "category_id": 177, "iscrowd": 0, "bbox": [108, 34, 242, 201], "area": 20309}, {"id": 12107711, "category_id": 185, "iscrowd": 0, "bbox": [0, 124, 16, 15], "area": 186}, {"id": 2435108, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 80], "area": 24137}, {"id": 5200483, "category_id": 198, "iscrowd": 0, "bbox": [462, 432, 18, 40], "area": 595}, {"id": 12239812, "category_id": 199, "iscrowd": 0, "bbox": [0, 19, 480, 310], "area": 36591}], "file_name": "000000161925.png", "image_id": 161925}, {"segments_info": [{"id": 8018495, "category_id": 1, "iscrowd": 0, "bbox": [531, 10, 98, 113], "area": 5519}, {"id": 4933697, "category_id": 1, "iscrowd": 0, "bbox": [262, 163, 44, 90], "area": 2867}, {"id": 9204307, "category_id": 1, "iscrowd": 0, "bbox": [399, 11, 48, 45], "area": 1130}, {"id": 9335635, "category_id": 1, "iscrowd": 0, "bbox": [179, 298, 52, 72], "area": 2574}, {"id": 7889229, "category_id": 1, "iscrowd": 0, "bbox": [190, 10, 45, 76], "area": 2369}, {"id": 3749688, "category_id": 1, "iscrowd": 0, "bbox": [248, 9, 126, 89], "area": 3985}, {"id": 5847854, "category_id": 1, "iscrowd": 0, "bbox": [281, 297, 108, 92], "area": 4874}, {"id": 6047802, "category_id": 1, "iscrowd": 0, "bbox": [30, 296, 47, 58], "area": 1673}, {"id": 5727619, "category_id": 1, "iscrowd": 0, "bbox": [451, 308, 44, 28], "area": 597}, {"id": 9076596, "category_id": 1, "iscrowd": 0, "bbox": [550, 295, 77, 72], "area": 2530}, {"id": 7692876, "category_id": 1, "iscrowd": 0, "bbox": [33, 166, 81, 86], "area": 4702}, {"id": 3813160, "category_id": 1, "iscrowd": 0, "bbox": [508, 166, 48, 90], "area": 2293}, {"id": 6573885, "category_id": 1, "iscrowd": 0, "bbox": [423, 165, 50, 116], "area": 3322}, {"id": 7170667, "category_id": 1, "iscrowd": 1, "bbox": [482, 162, 32, 94], "area": 2081}, {"id": 6975337, "category_id": 41, "iscrowd": 0, "bbox": [238, 77, 88, 26], "area": 962}, {"id": 6251886, "category_id": 41, "iscrowd": 0, "bbox": [16, 48, 521, 315], "area": 2275}, {"id": 6709601, "category_id": 41, "iscrowd": 0, "bbox": [543, 108, 83, 41], "area": 1049}, {"id": 4868429, "category_id": 41, "iscrowd": 0, "bbox": [164, 363, 76, 20], "area": 523}, {"id": 5063244, "category_id": 41, "iscrowd": 0, "bbox": [275, 372, 149, 36], "area": 1319}, {"id": 8819356, "category_id": 41, "iscrowd": 0, "bbox": [442, 329, 138, 48], "area": 1904}, {"id": 10066583, "category_id": 171, "iscrowd": 0, "bbox": [555, 164, 71, 107], "area": 5060}, {"id": 10069405, "category_id": 185, "iscrowd": 0, "bbox": [15, 0, 588, 334], "area": 7944}, {"id": 13416612, "category_id": 187, "iscrowd": 0, "bbox": [406, 164, 81, 21], "area": 675}, {"id": 11250602, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 433], "area": 192652}, {"id": 14674415, "category_id": 199, "iscrowd": 0, "bbox": [436, 296, 146, 45], "area": 4280}], "file_name": "000000161978.png", "image_id": 161978}, {"segments_info": [{"id": 1315345, "category_id": 1, "iscrowd": 0, "bbox": [253, 0, 53, 47], "area": 1036}, {"id": 1512467, "category_id": 1, "iscrowd": 0, "bbox": [57, 1, 146, 326], "area": 28482}, {"id": 7693918, "category_id": 1, "iscrowd": 0, "bbox": [401, 0, 57, 18], "area": 364}, {"id": 4937832, "category_id": 88, "iscrowd": 0, "bbox": [257, 6, 89, 137], "area": 6440}, {"id": 4674141, "category_id": 88, "iscrowd": 0, "bbox": [368, 149, 89, 201], "area": 8752}, {"id": 5195845, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 102532}], "file_name": "000000162035.png", "image_id": 162035}, {"segments_info": [{"id": 1648452, "category_id": 1, "iscrowd": 0, "bbox": [92, 72, 166, 162], "area": 16334}, {"id": 790302, "category_id": 1, "iscrowd": 0, "bbox": [69, 54, 41, 152], "area": 3675}, {"id": 1778230, "category_id": 1, "iscrowd": 0, "bbox": [1, 49, 91, 175], "area": 12459}, {"id": 1713212, "category_id": 1, "iscrowd": 0, "bbox": [295, 95, 61, 134], "area": 6350}, {"id": 1514022, "category_id": 1, "iscrowd": 0, "bbox": [203, 73, 69, 86], "area": 1913}, {"id": 263434, "category_id": 1, "iscrowd": 0, "bbox": [224, 95, 79, 131], "area": 7387}, {"id": 592664, "category_id": 1, "iscrowd": 0, "bbox": [251, 42, 366, 598], "area": 133833}, {"id": 2043976, "category_id": 1, "iscrowd": 0, "bbox": [1, 258, 94, 381], "area": 23934}, {"id": 1647686, "category_id": 1, "iscrowd": 0, "bbox": [239, 44, 62, 54], "area": 1623}, {"id": 790563, "category_id": 1, "iscrowd": 0, "bbox": [106, 39, 54, 60], "area": 1977}, {"id": 1317689, "category_id": 1, "iscrowd": 0, "bbox": [185, 50, 45, 83], "area": 2689}, {"id": 4544895, "category_id": 48, "iscrowd": 0, "bbox": [234, 280, 90, 75], "area": 852}, {"id": 988460, "category_id": 61, "iscrowd": 0, "bbox": [232, 508, 102, 48], "area": 3183}, {"id": 4216460, "category_id": 61, "iscrowd": 0, "bbox": [91, 492, 106, 71], "area": 5789}, {"id": 658460, "category_id": 61, "iscrowd": 0, "bbox": [219, 529, 213, 78], "area": 8713}, {"id": 724772, "category_id": 62, "iscrowd": 0, "bbox": [138, 610, 224, 23], "area": 3494}, {"id": 460817, "category_id": 122, "iscrowd": 0, "bbox": [200, 569, 167, 53], "area": 2952}, {"id": 2176593, "category_id": 130, "iscrowd": 0, "bbox": [518, 0, 122, 192], "area": 7939}, {"id": 858931, "category_id": 184, "iscrowd": 0, "bbox": [103, 0, 263, 107], "area": 6861}, {"id": 3427441, "category_id": 189, "iscrowd": 0, "bbox": [63, 490, 187, 150], "area": 8320}, {"id": 790837, "category_id": 196, "iscrowd": 0, "bbox": [583, 539, 57, 93], "area": 3549}, {"id": 5860242, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 527], "area": 89029}], "file_name": "000000162092.png", "image_id": 162092}, {"segments_info": [{"id": 1321008, "category_id": 15, "iscrowd": 0, "bbox": [120, 311, 213, 124], "area": 10577}, {"id": 1657411, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 341], "area": 140644}, {"id": 16513271, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 271, 212], "area": 47709}, {"id": 3820392, "category_id": 191, "iscrowd": 0, "bbox": [154, 382, 171, 54], "area": 4100}, {"id": 1588545, "category_id": 193, "iscrowd": 0, "bbox": [0, 244, 640, 236], "area": 92620}], "file_name": "000000162130.png", "image_id": 162130}, {"segments_info": [{"id": 2368294, "category_id": 14, "iscrowd": 0, "bbox": [358, 158, 181, 243], "area": 38771}, {"id": 5526873, "category_id": 95, "iscrowd": 0, "bbox": [522, 166, 118, 45], "area": 3988}, {"id": 12501186, "category_id": 148, "iscrowd": 0, "bbox": [523, 202, 117, 48], "area": 1847}, {"id": 7042967, "category_id": 171, "iscrowd": 0, "bbox": [0, 35, 496, 376], "area": 132734}, {"id": 9211539, "category_id": 185, "iscrowd": 0, "bbox": [524, 201, 116, 159], "area": 11546}, {"id": 12435134, "category_id": 187, "iscrowd": 0, "bbox": [507, 54, 133, 114], "area": 10344}, {"id": 4540241, "category_id": 190, "iscrowd": 0, "bbox": [524, 339, 116, 71], "area": 6156}, {"id": 6251883, "category_id": 191, "iscrowd": 0, "bbox": [527, 304, 113, 54], "area": 2908}, {"id": 10527141, "category_id": 197, "iscrowd": 0, "bbox": [528, 135, 112, 46], "area": 2701}], "file_name": "000000162366.png", "image_id": 162366}, {"segments_info": [{"id": 5983846, "category_id": 1, "iscrowd": 0, "bbox": [39, 99, 450, 532], "area": 134722}, {"id": 3685428, "category_id": 40, "iscrowd": 0, "bbox": [272, 293, 206, 234], "area": 27925}, {"id": 15198437, "category_id": 187, "iscrowd": 0, "bbox": [93, 0, 443, 97], "area": 13775}], "file_name": "000000162415.png", "image_id": 162415}, {"segments_info": [{"id": 2896697, "category_id": 22, "iscrowd": 0, "bbox": [340, 163, 76, 82], "area": 3178}, {"id": 3028023, "category_id": 22, "iscrowd": 0, "bbox": [278, 159, 69, 108], "area": 5323}, {"id": 6055796, "category_id": 22, "iscrowd": 0, "bbox": [247, 150, 57, 26], "area": 554}, {"id": 4277839, "category_id": 22, "iscrowd": 0, "bbox": [464, 135, 56, 89], "area": 2984}, {"id": 2698286, "category_id": 22, "iscrowd": 0, "bbox": [208, 162, 73, 107], "area": 3855}, {"id": 11843003, "category_id": 28, "iscrowd": 0, "bbox": [52, 159, 23, 6], "area": 106}, {"id": 2833465, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 127895}, {"id": 4805730, "category_id": 185, "iscrowd": 0, "bbox": [143, 120, 278, 137], "area": 4062}, {"id": 16251380, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 107], "area": 44987}, {"id": 4555907, "category_id": 193, "iscrowd": 0, "bbox": [0, 180, 523, 34], "area": 2207}, {"id": 7047072, "category_id": 194, "iscrowd": 0, "bbox": [0, 162, 468, 116], "area": 15123}, {"id": 5592159, "category_id": 197, "iscrowd": 0, "bbox": [0, 102, 304, 73], "area": 11336}, {"id": 3355961, "category_id": 198, "iscrowd": 0, "bbox": [405, 119, 235, 83], "area": 7501}], "file_name": "000000162543.png", "image_id": 162543}, {"segments_info": [{"id": 7764874, "category_id": 1, "iscrowd": 0, "bbox": [150, 142, 178, 369], "area": 27258}, {"id": 5930363, "category_id": 43, "iscrowd": 0, "bbox": [146, 67, 71, 116], "area": 3514}, {"id": 5470317, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 275345}], "file_name": "000000162581.png", "image_id": 162581}, {"segments_info": [{"id": 5853792, "category_id": 1, "iscrowd": 0, "bbox": [19, 17, 130, 405], "area": 32677}, {"id": 6049620, "category_id": 1, "iscrowd": 0, "bbox": [114, 37, 148, 390], "area": 34401}, {"id": 5078403, "category_id": 1, "iscrowd": 0, "bbox": [530, 7, 110, 413], "area": 29518}, {"id": 8476246, "category_id": 1, "iscrowd": 0, "bbox": [211, 31, 116, 390], "area": 16756}, {"id": 9986655, "category_id": 1, "iscrowd": 0, "bbox": [227, 23, 223, 404], "area": 36428}, {"id": 11575192, "category_id": 37, "iscrowd": 0, "bbox": [82, 171, 67, 52], "area": 2031}, {"id": 14275023, "category_id": 92, "iscrowd": 0, "bbox": [7, 254, 633, 173], "area": 41156}, {"id": 6133377, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 59189}], "file_name": "000000162732.png", "image_id": 162732}, {"segments_info": [{"id": 5516830, "category_id": 1, "iscrowd": 0, "bbox": [20, 342, 21, 56], "area": 612}, {"id": 4073240, "category_id": 2, "iscrowd": 0, "bbox": [21, 369, 16, 31], "area": 196}, {"id": 4730659, "category_id": 3, "iscrowd": 0, "bbox": [0, 320, 17, 56], "area": 720}, {"id": 8612694, "category_id": 3, "iscrowd": 0, "bbox": [360, 340, 67, 203], "area": 8095}, {"id": 5915432, "category_id": 3, "iscrowd": 0, "bbox": [50, 346, 158, 131], "area": 16102}, {"id": 8876638, "category_id": 3, "iscrowd": 0, "bbox": [44, 273, 37, 35], "area": 808}, {"id": 7821118, "category_id": 3, "iscrowd": 0, "bbox": [0, 298, 23, 39], "area": 392}, {"id": 11707550, "category_id": 3, "iscrowd": 0, "bbox": [302, 339, 126, 149], "area": 9265}, {"id": 8611402, "category_id": 3, "iscrowd": 0, "bbox": [0, 312, 21, 44], "area": 362}, {"id": 10519137, "category_id": 3, "iscrowd": 0, "bbox": [102, 241, 9, 5], "area": 37}, {"id": 6046774, "category_id": 3, "iscrowd": 0, "bbox": [263, 326, 136, 131], "area": 6317}, {"id": 8084289, "category_id": 3, "iscrowd": 0, "bbox": [52, 326, 40, 17], "area": 418}, {"id": 5652041, "category_id": 3, "iscrowd": 0, "bbox": [81, 318, 114, 57], "area": 2043}, {"id": 5781801, "category_id": 3, "iscrowd": 0, "bbox": [38, 338, 43, 44], "area": 1423}, {"id": 5784889, "category_id": 3, "iscrowd": 0, "bbox": [125, 245, 24, 19], "area": 350}, {"id": 3484228, "category_id": 10, "iscrowd": 0, "bbox": [148, 165, 15, 53], "area": 617}, {"id": 3154509, "category_id": 10, "iscrowd": 0, "bbox": [300, 170, 14, 36], "area": 432}, {"id": 10193272, "category_id": 149, "iscrowd": 0, "bbox": [0, 238, 428, 402], "area": 99592}, {"id": 10064525, "category_id": 184, "iscrowd": 0, "bbox": [0, 50, 428, 288], "area": 77297}, {"id": 16639685, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 428, 136], "area": 33069}, {"id": 7236965, "category_id": 193, "iscrowd": 0, "bbox": [52, 253, 376, 106], "area": 3667}, {"id": 12761518, "category_id": 197, "iscrowd": 0, "bbox": [78, 32, 77, 208], "area": 7061}], "file_name": "000000162858.png", "image_id": 162858}, {"segments_info": [{"id": 6775394, "category_id": 1, "iscrowd": 0, "bbox": [407, 271, 9, 22], "area": 113}, {"id": 2763306, "category_id": 1, "iscrowd": 0, "bbox": [134, 266, 13, 38], "area": 283}, {"id": 5922394, "category_id": 1, "iscrowd": 0, "bbox": [313, 268, 22, 55], "area": 614}, {"id": 4538959, "category_id": 1, "iscrowd": 0, "bbox": [281, 271, 11, 22], "area": 112}, {"id": 1710104, "category_id": 1, "iscrowd": 0, "bbox": [44, 245, 54, 135], "area": 4243}, {"id": 6511448, "category_id": 1, "iscrowd": 0, "bbox": [334, 266, 11, 37], "area": 264}, {"id": 3750457, "category_id": 1, "iscrowd": 0, "bbox": [492, 265, 14, 39], "area": 354}, {"id": 5197391, "category_id": 1, "iscrowd": 0, "bbox": [424, 266, 26, 46], "area": 471}, {"id": 3749453, "category_id": 1, "iscrowd": 0, "bbox": [228, 261, 12, 46], "area": 360}, {"id": 3617367, "category_id": 1, "iscrowd": 0, "bbox": [207, 281, 7, 20], "area": 79}, {"id": 1973540, "category_id": 1, "iscrowd": 0, "bbox": [218, 271, 13, 36], "area": 213}, {"id": 4538426, "category_id": 1, "iscrowd": 0, "bbox": [448, 262, 23, 60], "area": 791}, {"id": 3487808, "category_id": 1, "iscrowd": 0, "bbox": [324, 261, 12, 53], "area": 280}, {"id": 4606797, "category_id": 1, "iscrowd": 1, "bbox": [5, 257, 635, 71], "area": 14800}, {"id": 5459532, "category_id": 3, "iscrowd": 0, "bbox": [570, 267, 14, 7], "area": 72}, {"id": 9929856, "category_id": 3, "iscrowd": 0, "bbox": [567, 268, 4, 7], "area": 22}, {"id": 3947090, "category_id": 3, "iscrowd": 0, "bbox": [290, 270, 17, 10], "area": 88}, {"id": 7565165, "category_id": 3, "iscrowd": 0, "bbox": [577, 268, 13, 7], "area": 60}, {"id": 9078412, "category_id": 38, "iscrowd": 0, "bbox": [457, 138, 44, 43], "area": 1135}, {"id": 8224393, "category_id": 38, "iscrowd": 0, "bbox": [146, 147, 29, 11], "area": 178}, {"id": 11765627, "category_id": 38, "iscrowd": 0, "bbox": [618, 21, 9, 13], "area": 69}, {"id": 5993612, "category_id": 38, "iscrowd": 0, "bbox": [167, 270, 18, 29], "area": 105}, {"id": 11116207, "category_id": 38, "iscrowd": 0, "bbox": [345, 161, 12, 11], "area": 80}, {"id": 6316385, "category_id": 184, "iscrowd": 0, "bbox": [0, 88, 640, 202], "area": 56325}, {"id": 16440010, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 214], "area": 109169}, {"id": 3893344, "category_id": 193, "iscrowd": 0, "bbox": [0, 264, 640, 216], "area": 114494}, {"id": 9078407, "category_id": 197, "iscrowd": 0, "bbox": [196, 176, 402, 46], "area": 1630}], "file_name": "000000163057.png", "image_id": 163057}, {"segments_info": [{"id": 3948866, "category_id": 1, "iscrowd": 0, "bbox": [92, 261, 10, 15], "area": 76}, {"id": 2895663, "category_id": 1, "iscrowd": 0, "bbox": [130, 259, 46, 237], "area": 4610}, {"id": 6120548, "category_id": 1, "iscrowd": 0, "bbox": [115, 275, 26, 43], "area": 442}, {"id": 2764334, "category_id": 1, "iscrowd": 0, "bbox": [16, 260, 12, 42], "area": 329}, {"id": 4277830, "category_id": 1, "iscrowd": 0, "bbox": [222, 201, 152, 292], "area": 29812}, {"id": 3948865, "category_id": 1, "iscrowd": 0, "bbox": [56, 259, 13, 48], "area": 481}, {"id": 3356728, "category_id": 1, "iscrowd": 0, "bbox": [73, 270, 12, 36], "area": 261}, {"id": 4344137, "category_id": 1, "iscrowd": 0, "bbox": [228, 276, 33, 38], "area": 331}, {"id": 1908511, "category_id": 1, "iscrowd": 0, "bbox": [88, 271, 44, 163], "area": 3976}, {"id": 2961456, "category_id": 1, "iscrowd": 0, "bbox": [150, 230, 83, 264], "area": 16225}, {"id": 1316374, "category_id": 1, "iscrowd": 0, "bbox": [38, 266, 12, 37], "area": 341}, {"id": 1316377, "category_id": 1, "iscrowd": 0, "bbox": [0, 273, 20, 81], "area": 1183}, {"id": 1052945, "category_id": 27, "iscrowd": 0, "bbox": [247, 279, 116, 159], "area": 4279}, {"id": 921359, "category_id": 31, "iscrowd": 0, "bbox": [157, 302, 79, 62], "area": 966}, {"id": 263429, "category_id": 31, "iscrowd": 0, "bbox": [117, 329, 16, 38], "area": 344}, {"id": 4015196, "category_id": 38, "iscrowd": 0, "bbox": [152, 168, 7, 10], "area": 56}, {"id": 5655740, "category_id": 38, "iscrowd": 0, "bbox": [183, 142, 10, 12], "area": 68}, {"id": 2631243, "category_id": 38, "iscrowd": 0, "bbox": [45, 197, 18, 23], "area": 235}, {"id": 6054786, "category_id": 38, "iscrowd": 0, "bbox": [215, 205, 7, 7], "area": 30}, {"id": 4210776, "category_id": 38, "iscrowd": 0, "bbox": [124, 181, 12, 15], "area": 105}, {"id": 5198194, "category_id": 38, "iscrowd": 0, "bbox": [221, 192, 8, 10], "area": 53}, {"id": 6973056, "category_id": 38, "iscrowd": 0, "bbox": [164, 94, 13, 17], "area": 106}, {"id": 5000310, "category_id": 38, "iscrowd": 0, "bbox": [268, 138, 12, 11], "area": 63}, {"id": 7166164, "category_id": 38, "iscrowd": 0, "bbox": [92, 111, 12, 14], "area": 87}, {"id": 4871798, "category_id": 38, "iscrowd": 0, "bbox": [69, 17, 21, 31], "area": 362}, {"id": 4736349, "category_id": 38, "iscrowd": 0, "bbox": [23, 149, 16, 17], "area": 161}, {"id": 2502483, "category_id": 38, "iscrowd": 0, "bbox": [181, 178, 14, 18], "area": 150}, {"id": 13885408, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 376, 283], "area": 93952}, {"id": 3553850, "category_id": 193, "iscrowd": 0, "bbox": [0, 267, 250, 233], "area": 23045}, {"id": 2961713, "category_id": 197, "iscrowd": 0, "bbox": [343, 266, 33, 29], "area": 281}], "file_name": "000000163117.png", "image_id": 163117}, {"segments_info": [{"id": 5007254, "category_id": 1, "iscrowd": 0, "bbox": [151, 77, 145, 299], "area": 11448}, {"id": 5001564, "category_id": 1, "iscrowd": 0, "bbox": [265, 71, 111, 355], "area": 12584}, {"id": 11779266, "category_id": 34, "iscrowd": 0, "bbox": [271, 56, 50, 31], "area": 1108}, {"id": 2046310, "category_id": 112, "iscrowd": 0, "bbox": [474, 9, 105, 230], "area": 18706}, {"id": 7306534, "category_id": 145, "iscrowd": 0, "bbox": [0, 173, 640, 253], "area": 127208}, {"id": 3155485, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 274], "area": 100118}], "file_name": "000000163118.png", "image_id": 163118}, {"segments_info": [{"id": 4872301, "category_id": 17, "iscrowd": 0, "bbox": [6, 154, 537, 245], "area": 64605}, {"id": 5532572, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 640, 370], "area": 99687}, {"id": 8361134, "category_id": 190, "iscrowd": 0, "bbox": [0, 363, 640, 64], "area": 23416}, {"id": 6319749, "category_id": 191, "iscrowd": 0, "bbox": [99, 186, 541, 207], "area": 45796}, {"id": 3753046, "category_id": 199, "iscrowd": 0, "bbox": [100, 112, 540, 92], "area": 39278}], "file_name": "000000163155.png", "image_id": 163155}, {"segments_info": [{"id": 4802891, "category_id": 1, "iscrowd": 0, "bbox": [372, 87, 53, 121], "area": 2369}, {"id": 3827277, "category_id": 1, "iscrowd": 0, "bbox": [42, 0, 344, 633], "area": 82116}, {"id": 6508982, "category_id": 28, "iscrowd": 0, "bbox": [101, 161, 211, 46], "area": 5574}, {"id": 9347982, "category_id": 168, "iscrowd": 0, "bbox": [369, 164, 45, 46], "area": 1118}, {"id": 3163725, "category_id": 184, "iscrowd": 0, "bbox": [18, 0, 407, 186], "area": 37797}, {"id": 13618638, "category_id": 191, "iscrowd": 0, "bbox": [0, 257, 425, 383], "area": 112262}, {"id": 5465200, "category_id": 194, "iscrowd": 0, "bbox": [0, 181, 371, 111], "area": 13330}], "file_name": "000000163257.png", "image_id": 163257}, {"segments_info": [{"id": 6721433, "category_id": 70, "iscrowd": 0, "bbox": [92, 219, 170, 261], "area": 30816}, {"id": 6853535, "category_id": 81, "iscrowd": 0, "bbox": [547, 221, 92, 59], "area": 3839}, {"id": 5605267, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 526, 480], "area": 71550}, {"id": 9287613, "category_id": 133, "iscrowd": 0, "bbox": [589, 0, 51, 125], "area": 5355}, {"id": 8499645, "category_id": 176, "iscrowd": 0, "bbox": [56, 0, 584, 480], "area": 132767}, {"id": 3755860, "category_id": 190, "iscrowd": 0, "bbox": [123, 341, 513, 139], "area": 13460}, {"id": 6786198, "category_id": 199, "iscrowd": 0, "bbox": [352, 0, 288, 480], "area": 45296}], "file_name": "000000163258.png", "image_id": 163258}, {"segments_info": [{"id": 6581882, "category_id": 24, "iscrowd": 0, "bbox": [31, 440, 198, 148], "area": 19510}, {"id": 7240078, "category_id": 25, "iscrowd": 0, "bbox": [186, 331, 39, 30], "area": 279}, {"id": 7175565, "category_id": 25, "iscrowd": 0, "bbox": [253, 286, 60, 229], "area": 7694}, {"id": 5592914, "category_id": 184, "iscrowd": 0, "bbox": [0, 215, 480, 220], "area": 55627}, {"id": 5259313, "category_id": 185, "iscrowd": 0, "bbox": [164, 184, 80, 75], "area": 3783}, {"id": 15965530, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 332], "area": 129764}, {"id": 6913158, "category_id": 193, "iscrowd": 0, "bbox": [0, 391, 480, 249], "area": 83387}, {"id": 6847108, "category_id": 194, "iscrowd": 0, "bbox": [37, 398, 275, 184], "area": 2793}], "file_name": "000000163290.png", "image_id": 163290}, {"segments_info": [{"id": 5985114, "category_id": 1, "iscrowd": 0, "bbox": [409, 236, 24, 58], "area": 599}, {"id": 3156793, "category_id": 1, "iscrowd": 0, "bbox": [323, 219, 9, 26], "area": 173}, {"id": 4606557, "category_id": 1, "iscrowd": 0, "bbox": [363, 232, 17, 55], "area": 376}, {"id": 3355459, "category_id": 1, "iscrowd": 0, "bbox": [61, 234, 24, 63], "area": 866}, {"id": 8947609, "category_id": 1, "iscrowd": 0, "bbox": [298, 232, 28, 61], "area": 728}, {"id": 2632246, "category_id": 1, "iscrowd": 0, "bbox": [427, 237, 25, 54], "area": 372}, {"id": 4538959, "category_id": 1, "iscrowd": 0, "bbox": [291, 225, 16, 29], "area": 172}, {"id": 6908277, "category_id": 1, "iscrowd": 0, "bbox": [349, 230, 19, 60], "area": 546}, {"id": 3422070, "category_id": 1, "iscrowd": 0, "bbox": [139, 231, 15, 52], "area": 511}, {"id": 7894154, "category_id": 1, "iscrowd": 0, "bbox": [298, 231, 10, 55], "area": 208}, {"id": 6184825, "category_id": 1, "iscrowd": 0, "bbox": [99, 238, 23, 52], "area": 454}, {"id": 3357264, "category_id": 1, "iscrowd": 0, "bbox": [179, 230, 18, 48], "area": 407}, {"id": 3554122, "category_id": 1, "iscrowd": 0, "bbox": [44, 234, 21, 54], "area": 478}, {"id": 2435635, "category_id": 1, "iscrowd": 1, "bbox": [163, 225, 311, 75], "area": 1723}, {"id": 4605259, "category_id": 27, "iscrowd": 0, "bbox": [109, 245, 14, 18], "area": 138}, {"id": 1316371, "category_id": 27, "iscrowd": 0, "bbox": [476, 253, 11, 17], "area": 144}, {"id": 4211791, "category_id": 27, "iscrowd": 0, "bbox": [317, 251, 8, 11], "area": 48}, {"id": 4935777, "category_id": 27, "iscrowd": 0, "bbox": [343, 255, 11, 23], "area": 196}, {"id": 4273582, "category_id": 31, "iscrowd": 0, "bbox": [417, 264, 15, 18], "area": 218}, {"id": 1315608, "category_id": 31, "iscrowd": 0, "bbox": [432, 254, 10, 14], "area": 106}, {"id": 8025727, "category_id": 31, "iscrowd": 0, "bbox": [179, 245, 11, 14], "area": 113}, {"id": 2765129, "category_id": 33, "iscrowd": 0, "bbox": [136, 258, 19, 20], "area": 131}, {"id": 8091001, "category_id": 149, "iscrowd": 0, "bbox": [0, 283, 500, 48], "area": 16076}, {"id": 3423307, "category_id": 166, "iscrowd": 0, "bbox": [0, 142, 500, 146], "area": 47557}, {"id": 5921121, "category_id": 191, "iscrowd": 0, "bbox": [0, 266, 500, 41], "area": 8550}, {"id": 5723997, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 279], "area": 71849}], "file_name": "000000163314.png", "image_id": 163314}, {"segments_info": [{"id": 4146321, "category_id": 1, "iscrowd": 0, "bbox": [135, 0, 318, 333], "area": 68706}, {"id": 9080506, "category_id": 34, "iscrowd": 0, "bbox": [87, 225, 111, 73], "area": 6483}, {"id": 11446405, "category_id": 155, "iscrowd": 0, "bbox": [0, 90, 500, 162], "area": 32886}, {"id": 5136728, "category_id": 184, "iscrowd": 0, "bbox": [0, 115, 500, 218], "area": 18320}, {"id": 15526355, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 118], "area": 25690}, {"id": 4354163, "category_id": 193, "iscrowd": 0, "bbox": [0, 234, 231, 99], "area": 13469}], "file_name": "000000163562.png", "image_id": 163562}, {"segments_info": [{"id": 4209989, "category_id": 47, "iscrowd": 0, "bbox": [172, 3, 104, 130], "area": 10676}, {"id": 6317679, "category_id": 48, "iscrowd": 0, "bbox": [50, 335, 216, 137], "area": 9424}, {"id": 3357788, "category_id": 49, "iscrowd": 0, "bbox": [586, 176, 54, 18], "area": 810}, {"id": 5538998, "category_id": 59, "iscrowd": 0, "bbox": [1, 109, 639, 371], "area": 170983}, {"id": 3690097, "category_id": 59, "iscrowd": 0, "bbox": [0, 4, 182, 115], "area": 15273}, {"id": 2633015, "category_id": 67, "iscrowd": 0, "bbox": [4, 1, 636, 214], "area": 38382}, {"id": 1382175, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 189], "area": 1965}, {"id": 8948106, "category_id": 195, "iscrowd": 0, "bbox": [250, 0, 390, 101], "area": 15308}], "file_name": "000000163611.png", "image_id": 163611}, {"segments_info": [{"id": 5654573, "category_id": 1, "iscrowd": 0, "bbox": [447, 132, 164, 325], "area": 35971}, {"id": 5196093, "category_id": 1, "iscrowd": 0, "bbox": [102, 137, 189, 320], "area": 40817}, {"id": 3291690, "category_id": 1, "iscrowd": 0, "bbox": [290, 162, 90, 148], "area": 6443}, {"id": 5193252, "category_id": 27, "iscrowd": 0, "bbox": [85, 264, 36, 131], "area": 2743}, {"id": 5922632, "category_id": 51, "iscrowd": 0, "bbox": [250, 275, 115, 45], "area": 4189}, {"id": 3827602, "category_id": 60, "iscrowd": 0, "bbox": [259, 249, 33, 31], "area": 801}, {"id": 4083536, "category_id": 107, "iscrowd": 0, "bbox": [259, 316, 353, 28], "area": 3180}, {"id": 2234640, "category_id": 109, "iscrowd": 0, "bbox": [499, 339, 114, 118], "area": 3905}, {"id": 4805951, "category_id": 176, "iscrowd": 0, "bbox": [188, 96, 423, 361], "area": 67713}, {"id": 8360350, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 457], "area": 116352}], "file_name": "000000163640.png", "image_id": 163640}, {"segments_info": [{"id": 7955042, "category_id": 1, "iscrowd": 0, "bbox": [47, 132, 343, 508], "area": 101295}, {"id": 7226777, "category_id": 32, "iscrowd": 0, "bbox": [192, 272, 59, 210], "area": 5584}, {"id": 1645080, "category_id": 62, "iscrowd": 0, "bbox": [14, 339, 174, 294], "area": 14058}, {"id": 10535871, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 427, 390], "area": 121885}, {"id": 7241075, "category_id": 189, "iscrowd": 0, "bbox": [0, 368, 427, 142], "area": 10968}, {"id": 856851, "category_id": 190, "iscrowd": 0, "bbox": [0, 529, 427, 111], "area": 7291}], "file_name": "000000163682.png", "image_id": 163682}, {"segments_info": [{"id": 6909827, "category_id": 1, "iscrowd": 0, "bbox": [387, 218, 60, 182], "area": 6676}, {"id": 7763592, "category_id": 1, "iscrowd": 0, "bbox": [362, 246, 9, 12], "area": 65}, {"id": 8291231, "category_id": 1, "iscrowd": 0, "bbox": [18, 245, 8, 12], "area": 47}, {"id": 7175835, "category_id": 1, "iscrowd": 0, "bbox": [27, 253, 11, 12], "area": 68}, {"id": 7176084, "category_id": 1, "iscrowd": 0, "bbox": [371, 254, 9, 12], "area": 72}, {"id": 6185577, "category_id": 1, "iscrowd": 0, "bbox": [329, 253, 10, 7], "area": 41}, {"id": 7109763, "category_id": 1, "iscrowd": 0, "bbox": [343, 251, 31, 45], "area": 800}, {"id": 6976138, "category_id": 1, "iscrowd": 0, "bbox": [59, 218, 51, 178], "area": 5631}, {"id": 8554394, "category_id": 1, "iscrowd": 0, "bbox": [451, 161, 123, 316], "area": 17551}, {"id": 7044227, "category_id": 1, "iscrowd": 0, "bbox": [0, 248, 31, 47], "area": 903}, {"id": 8423323, "category_id": 1, "iscrowd": 0, "bbox": [127, 160, 123, 319], "area": 18539}, {"id": 4010787, "category_id": 5, "iscrowd": 0, "bbox": [177, 1, 52, 58], "area": 960}, {"id": 4076837, "category_id": 5, "iscrowd": 0, "bbox": [520, 0, 54, 61], "area": 1007}, {"id": 6849940, "category_id": 154, "iscrowd": 0, "bbox": [0, 451, 468, 37], "area": 7329}, {"id": 8160382, "category_id": 155, "iscrowd": 0, "bbox": [0, 219, 640, 269], "area": 112698}, {"id": 14267271, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 245], "area": 138797}], "file_name": "000000163746.png", "image_id": 163746}, {"segments_info": [{"id": 2703978, "category_id": 52, "iscrowd": 0, "bbox": [133, 217, 220, 219], "area": 14255}, {"id": 9279651, "category_id": 62, "iscrowd": 0, "bbox": [186, 413, 113, 108], "area": 6393}], "file_name": "000000163951.png", "image_id": 163951}, {"segments_info": [{"id": 7827578, "category_id": 2, "iscrowd": 0, "bbox": [71, 182, 110, 193], "area": 6556}, {"id": 8155747, "category_id": 42, "iscrowd": 0, "bbox": [117, 202, 216, 211], "area": 22644}, {"id": 11907244, "category_id": 149, "iscrowd": 0, "bbox": [478, 119, 22, 27], "area": 480}, {"id": 6573644, "category_id": 175, "iscrowd": 0, "bbox": [0, 31, 253, 137], "area": 28073}, {"id": 5262147, "category_id": 184, "iscrowd": 0, "bbox": [173, 0, 327, 183], "area": 38248}, {"id": 6314331, "category_id": 185, "iscrowd": 0, "bbox": [0, 143, 264, 242], "area": 13470}, {"id": 15456408, "category_id": 187, "iscrowd": 0, "bbox": [350, 0, 55, 53], "area": 1656}, {"id": 8416613, "category_id": 191, "iscrowd": 0, "bbox": [0, 134, 500, 366], "area": 81962}, {"id": 2502442, "category_id": 193, "iscrowd": 0, "bbox": [0, 144, 500, 257], "area": 6274}, {"id": 3818579, "category_id": 194, "iscrowd": 0, "bbox": [0, 155, 353, 345], "area": 30336}, {"id": 6638664, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 84], "area": 7865}, {"id": 9006425, "category_id": 198, "iscrowd": 0, "bbox": [95, 157, 134, 55], "area": 1178}], "file_name": "000000164115.png", "image_id": 164115}, {"segments_info": [{"id": 9610948, "category_id": 85, "iscrowd": 0, "bbox": [58, 7, 512, 504], "area": 205559}, {"id": 1513774, "category_id": 112, "iscrowd": 0, "bbox": [0, 255, 640, 349], "area": 15190}], "file_name": "000000164363.png", "image_id": 164363}, {"segments_info": [{"id": 3824006, "category_id": 1, "iscrowd": 0, "bbox": [245, 128, 302, 352], "area": 50425}, {"id": 5271965, "category_id": 1, "iscrowd": 0, "bbox": [11, 69, 469, 405], "area": 86583}, {"id": 6847370, "category_id": 81, "iscrowd": 0, "bbox": [1, 306, 86, 67], "area": 2281}, {"id": 8097174, "category_id": 81, "iscrowd": 0, "bbox": [463, 359, 88, 67], "area": 4009}, {"id": 1261646, "category_id": 90, "iscrowd": 0, "bbox": [244, 164, 46, 23], "area": 297}, {"id": 2835568, "category_id": 90, "iscrowd": 0, "bbox": [352, 217, 48, 8], "area": 79}, {"id": 5663872, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 612, 480], "area": 101301}, {"id": 8427194, "category_id": 176, "iscrowd": 0, "bbox": [593, 0, 47, 480], "area": 4015}], "file_name": "000000164602.png", "image_id": 164602}, {"segments_info": [{"id": 7505306, "category_id": 81, "iscrowd": 0, "bbox": [109, 311, 272, 49], "area": 11163}, {"id": 5464421, "category_id": 133, "iscrowd": 0, "bbox": [138, 31, 208, 225], "area": 39338}, {"id": 3689563, "category_id": 168, "iscrowd": 0, "bbox": [0, 269, 128, 99], "area": 7251}, {"id": 4018266, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 164071}, {"id": 4747392, "category_id": 188, "iscrowd": 0, "bbox": [117, 359, 264, 241], "area": 35379}, {"id": 3690320, "category_id": 190, "iscrowd": 0, "bbox": [14, 534, 466, 106], "area": 38476}], "file_name": "000000164637.png", "image_id": 164637}, {"segments_info": [{"id": 5136238, "category_id": 1, "iscrowd": 0, "bbox": [0, 2, 285, 369], "area": 68830}, {"id": 8157803, "category_id": 72, "iscrowd": 0, "bbox": [204, 2, 296, 368], "area": 95299}, {"id": 8686734, "category_id": 75, "iscrowd": 0, "bbox": [192, 330, 45, 43], "area": 1158}, {"id": 12436416, "category_id": 75, "iscrowd": 0, "bbox": [219, 313, 48, 48], "area": 1445}, {"id": 1846332, "category_id": 189, "iscrowd": 0, "bbox": [232, 361, 58, 14], "area": 300}, {"id": 1318695, "category_id": 195, "iscrowd": 0, "bbox": [0, 100, 54, 66], "area": 2025}], "file_name": "000000164883.png", "image_id": 164883}, {"segments_info": [{"id": 3438176, "category_id": 1, "iscrowd": 0, "bbox": [285, 101, 58, 152], "area": 5783}, {"id": 5656934, "category_id": 1, "iscrowd": 0, "bbox": [402, 244, 11, 29], "area": 159}, {"id": 8874845, "category_id": 1, "iscrowd": 0, "bbox": [464, 262, 15, 10], "area": 64}, {"id": 6701113, "category_id": 1, "iscrowd": 0, "bbox": [349, 264, 8, 17], "area": 83}, {"id": 7883828, "category_id": 1, "iscrowd": 0, "bbox": [168, 305, 8, 20], "area": 122}, {"id": 5195068, "category_id": 1, "iscrowd": 0, "bbox": [483, 244, 8, 18], "area": 70}, {"id": 5591622, "category_id": 1, "iscrowd": 0, "bbox": [286, 297, 14, 15], "area": 97}, {"id": 8624543, "category_id": 35, "iscrowd": 0, "bbox": [252, 249, 107, 11], "area": 549}, {"id": 14204843, "category_id": 159, "iscrowd": 0, "bbox": [0, 188, 640, 239], "area": 104826}, {"id": 8617590, "category_id": 184, "iscrowd": 0, "bbox": [0, 188, 498, 142], "area": 20258}, {"id": 16511692, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 274], "area": 139766}, {"id": 5590340, "category_id": 197, "iscrowd": 0, "bbox": [492, 196, 71, 26], "area": 1229}], "file_name": "000000164885.png", "image_id": 164885}, {"segments_info": [{"id": 1205437, "category_id": 59, "iscrowd": 0, "bbox": [83, 23, 420, 399], "area": 135605}, {"id": 1396381, "category_id": 100, "iscrowd": 0, "bbox": [66, 0, 460, 428], "area": 48362}, {"id": 6333906, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 83329}], "file_name": "000000164969.png", "image_id": 164969}, {"segments_info": [{"id": 7046342, "category_id": 1, "iscrowd": 0, "bbox": [458, 150, 8, 13], "area": 52}, {"id": 7771586, "category_id": 1, "iscrowd": 0, "bbox": [465, 155, 6, 7], "area": 29}, {"id": 5136248, "category_id": 1, "iscrowd": 0, "bbox": [424, 155, 9, 11], "area": 68}, {"id": 6778495, "category_id": 1, "iscrowd": 0, "bbox": [544, 141, 16, 40], "area": 319}, {"id": 5529720, "category_id": 1, "iscrowd": 0, "bbox": [406, 159, 8, 10], "area": 52}, {"id": 8886463, "category_id": 1, "iscrowd": 0, "bbox": [456, 153, 5, 9], "area": 31}, {"id": 5459810, "category_id": 1, "iscrowd": 0, "bbox": [484, 148, 13, 15], "area": 122}, {"id": 7958380, "category_id": 1, "iscrowd": 0, "bbox": [535, 146, 13, 31], "area": 266}, {"id": 5202552, "category_id": 1, "iscrowd": 0, "bbox": [440, 154, 6, 10], "area": 37}, {"id": 10264739, "category_id": 3, "iscrowd": 0, "bbox": [6, 203, 18, 32], "area": 310}, {"id": 6250334, "category_id": 3, "iscrowd": 0, "bbox": [49, 199, 62, 61], "area": 566}, {"id": 3751508, "category_id": 3, "iscrowd": 0, "bbox": [41, 188, 19, 58], "area": 344}, {"id": 3380647, "category_id": 3, "iscrowd": 0, "bbox": [383, 162, 183, 78], "area": 10913}, {"id": 9278616, "category_id": 3, "iscrowd": 0, "bbox": [19, 192, 32, 62], "area": 1292}, {"id": 1913419, "category_id": 3, "iscrowd": 0, "bbox": [609, 163, 31, 58], "area": 1507}, {"id": 6707269, "category_id": 3, "iscrowd": 0, "bbox": [0, 193, 27, 21], "area": 334}, {"id": 3354928, "category_id": 3, "iscrowd": 0, "bbox": [0, 214, 24, 54], "area": 850}, {"id": 3488319, "category_id": 6, "iscrowd": 0, "bbox": [91, 48, 312, 295], "area": 72830}, {"id": 2764843, "category_id": 10, "iscrowd": 0, "bbox": [9, 145, 7, 26], "area": 151}, {"id": 3950669, "category_id": 10, "iscrowd": 0, "bbox": [355, 11, 29, 78], "area": 1554}, {"id": 1910835, "category_id": 10, "iscrowd": 0, "bbox": [549, 1, 31, 42], "area": 1039}, {"id": 5662064, "category_id": 10, "iscrowd": 0, "bbox": [406, 93, 8, 37], "area": 178}, {"id": 4676204, "category_id": 10, "iscrowd": 0, "bbox": [440, 100, 8, 20], "area": 113}, {"id": 3685439, "category_id": 149, "iscrowd": 0, "bbox": [0, 167, 640, 260], "area": 83967}, {"id": 7833489, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 205], "area": 14957}, {"id": 15261909, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 153, 131], "area": 9162}, {"id": 4869973, "category_id": 191, "iscrowd": 0, "bbox": [0, 150, 640, 277], "area": 6828}, {"id": 9610412, "category_id": 197, "iscrowd": 0, "bbox": [148, 0, 492, 174], "area": 32861}], "file_name": "000000165039.png", "image_id": 165039}, {"segments_info": [{"id": 8024945, "category_id": 81, "iscrowd": 0, "bbox": [328, 87, 131, 26], "area": 1583}, {"id": 8419965, "category_id": 100, "iscrowd": 0, "bbox": [68, 4, 478, 119], "area": 16290}, {"id": 3617073, "category_id": 107, "iscrowd": 0, "bbox": [0, 52, 572, 139], "area": 19663}, {"id": 3292501, "category_id": 118, "iscrowd": 0, "bbox": [0, 221, 640, 138], "area": 29865}, {"id": 4801350, "category_id": 176, "iscrowd": 0, "bbox": [0, 47, 468, 102], "area": 12528}, {"id": 13158856, "category_id": 181, "iscrowd": 0, "bbox": [266, 0, 45, 16], "area": 602}, {"id": 5862558, "category_id": 188, "iscrowd": 0, "bbox": [0, 87, 596, 272], "area": 94478}, {"id": 11048594, "category_id": 195, "iscrowd": 0, "bbox": [85, 59, 141, 80], "area": 2797}, {"id": 6582906, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 359], "area": 38659}], "file_name": "000000165257.png", "image_id": 165257}, {"segments_info": [{"id": 7041393, "category_id": 25, "iscrowd": 0, "bbox": [204, 173, 155, 238], "area": 9890}, {"id": 7237736, "category_id": 25, "iscrowd": 0, "bbox": [311, 132, 165, 282], "area": 13658}, {"id": 6913128, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 365], "area": 191791}, {"id": 16251128, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 191], "area": 17432}, {"id": 12171679, "category_id": 191, "iscrowd": 0, "bbox": [6, 340, 634, 60], "area": 13556}, {"id": 8434855, "category_id": 193, "iscrowd": 0, "bbox": [0, 342, 640, 138], "area": 60494}], "file_name": "000000165336.png", "image_id": 165336}, {"segments_info": [{"id": 10214899, "category_id": 52, "iscrowd": 0, "bbox": [185, 178, 170, 81], "area": 9400}, {"id": 10933991, "category_id": 52, "iscrowd": 0, "bbox": [0, 241, 544, 177], "area": 32565}, {"id": 9164017, "category_id": 52, "iscrowd": 0, "bbox": [441, 225, 91, 105], "area": 6376}, {"id": 9950442, "category_id": 52, "iscrowd": 0, "bbox": [137, 67, 413, 109], "area": 10087}, {"id": 9621993, "category_id": 52, "iscrowd": 0, "bbox": [114, 121, 426, 133], "area": 9703}, {"id": 1380956, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 612, 52], "area": 4164}, {"id": 6117246, "category_id": 189, "iscrowd": 0, "bbox": [93, 0, 23, 18], "area": 101}, {"id": 6910065, "category_id": 190, "iscrowd": 0, "bbox": [416, 0, 196, 40], "area": 4843}, {"id": 4944288, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 278582}], "file_name": "000000165351.png", "image_id": 165351}, {"segments_info": [{"id": 8958153, "category_id": 23, "iscrowd": 0, "bbox": [270, 257, 41, 26], "area": 815}, {"id": 6785702, "category_id": 23, "iscrowd": 0, "bbox": [418, 262, 93, 49], "area": 3509}, {"id": 6979727, "category_id": 23, "iscrowd": 0, "bbox": [175, 252, 34, 27], "area": 764}, {"id": 7035721, "category_id": 125, "iscrowd": 0, "bbox": [0, 338, 640, 142], "area": 64333}, {"id": 7705753, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 153], "area": 67342}, {"id": 16448505, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 69], "area": 17513}, {"id": 10006189, "category_id": 192, "iscrowd": 0, "bbox": [0, 20, 612, 70], "area": 7257}, {"id": 6259837, "category_id": 193, "iscrowd": 0, "bbox": [0, 125, 640, 293], "area": 145533}], "file_name": "000000165500.png", "image_id": 165500}, {"segments_info": [{"id": 7958137, "category_id": 1, "iscrowd": 0, "bbox": [249, 174, 174, 287], "area": 16810}, {"id": 8552336, "category_id": 4, "iscrowd": 0, "bbox": [261, 263, 173, 247], "area": 18253}, {"id": 6114902, "category_id": 149, "iscrowd": 0, "bbox": [0, 266, 612, 346], "area": 126640}, {"id": 9075579, "category_id": 184, "iscrowd": 0, "bbox": [373, 312, 239, 89], "area": 12306}, {"id": 10192258, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 612, 361], "area": 178747}, {"id": 7563373, "category_id": 194, "iscrowd": 0, "bbox": [395, 355, 217, 179], "area": 21131}], "file_name": "000000165518.png", "image_id": 165518}, {"segments_info": [{"id": 2959658, "category_id": 1, "iscrowd": 0, "bbox": [373, 54, 13, 23], "area": 223}, {"id": 5328461, "category_id": 1, "iscrowd": 0, "bbox": [138, 112, 8, 35], "area": 185}, {"id": 8354683, "category_id": 1, "iscrowd": 0, "bbox": [318, 116, 58, 110], "area": 3788}, {"id": 3749430, "category_id": 1, "iscrowd": 0, "bbox": [302, 70, 16, 13], "area": 111}, {"id": 2235678, "category_id": 1, "iscrowd": 0, "bbox": [154, 115, 13, 18], "area": 135}, {"id": 8947077, "category_id": 1, "iscrowd": 0, "bbox": [309, 110, 26, 108], "area": 1495}, {"id": 4736068, "category_id": 1, "iscrowd": 0, "bbox": [384, 52, 31, 54], "area": 842}, {"id": 5261899, "category_id": 1, "iscrowd": 0, "bbox": [417, 46, 26, 59], "area": 692}, {"id": 6578271, "category_id": 1, "iscrowd": 0, "bbox": [346, 61, 25, 50], "area": 687}, {"id": 1644055, "category_id": 1, "iscrowd": 0, "bbox": [318, 67, 10, 15], "area": 97}, {"id": 3880759, "category_id": 1, "iscrowd": 0, "bbox": [354, 107, 52, 151], "area": 3881}, {"id": 4670018, "category_id": 1, "iscrowd": 1, "bbox": [1, 40, 518, 92], "area": 4639}, {"id": 11315623, "category_id": 3, "iscrowd": 0, "bbox": [109, 119, 26, 25], "area": 449}, {"id": 4735811, "category_id": 4, "iscrowd": 0, "bbox": [103, 233, 313, 206], "area": 11202}, {"id": 4932677, "category_id": 4, "iscrowd": 0, "bbox": [424, 346, 216, 91], "area": 11135}, {"id": 7630446, "category_id": 4, "iscrowd": 0, "bbox": [199, 284, 140, 154], "area": 8061}, {"id": 5788756, "category_id": 4, "iscrowd": 0, "bbox": [44, 182, 52, 60], "area": 553}, {"id": 5788748, "category_id": 4, "iscrowd": 0, "bbox": [75, 173, 175, 239], "area": 11050}, {"id": 5459534, "category_id": 4, "iscrowd": 0, "bbox": [518, 138, 121, 117], "area": 7214}, {"id": 5590863, "category_id": 4, "iscrowd": 0, "bbox": [274, 279, 315, 160], "area": 22637}, {"id": 5854549, "category_id": 4, "iscrowd": 0, "bbox": [458, 129, 116, 105], "area": 5054}, {"id": 5985878, "category_id": 4, "iscrowd": 0, "bbox": [385, 253, 174, 85], "area": 8228}, {"id": 6249564, "category_id": 4, "iscrowd": 0, "bbox": [46, 169, 127, 137], "area": 3075}, {"id": 5723220, "category_id": 4, "iscrowd": 0, "bbox": [55, 157, 114, 160], "area": 3530}, {"id": 4998984, "category_id": 4, "iscrowd": 0, "bbox": [290, 130, 25, 64], "area": 863}, {"id": 7301995, "category_id": 4, "iscrowd": 0, "bbox": [48, 153, 91, 72], "area": 1425}, {"id": 5788763, "category_id": 4, "iscrowd": 1, "bbox": [20, 112, 620, 332], "area": 60357}, {"id": 4406846, "category_id": 8, "iscrowd": 0, "bbox": [82, 94, 97, 37], "area": 1244}, {"id": 8288889, "category_id": 67, "iscrowd": 0, "bbox": [122, 91, 57, 10], "area": 508}, {"id": 6709345, "category_id": 184, "iscrowd": 0, "bbox": [0, 32, 137, 91], "area": 3569}, {"id": 7301738, "category_id": 191, "iscrowd": 0, "bbox": [0, 120, 638, 324], "area": 27023}, {"id": 5722963, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 220], "area": 75815}], "file_name": "000000165681.png", "image_id": 165681}, {"segments_info": [{"id": 4343884, "category_id": 11, "iscrowd": 0, "bbox": [104, 139, 160, 435], "area": 43132}, {"id": 1973022, "category_id": 149, "iscrowd": 0, "bbox": [238, 0, 187, 448], "area": 41315}, {"id": 6647412, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 425, 640], "area": 147515}], "file_name": "000000165713.png", "image_id": 165713}, {"segments_info": [{"id": 672856, "category_id": 44, "iscrowd": 0, "bbox": [520, 0, 120, 80], "area": 6854}, {"id": 3954541, "category_id": 51, "iscrowd": 0, "bbox": [0, 97, 640, 353], "area": 111874}, {"id": 2310201, "category_id": 56, "iscrowd": 0, "bbox": [119, 231, 59, 64], "area": 2836}, {"id": 1778206, "category_id": 56, "iscrowd": 0, "bbox": [418, 292, 56, 60], "area": 2186}, {"id": 2113591, "category_id": 56, "iscrowd": 0, "bbox": [175, 153, 147, 99], "area": 8068}, {"id": 1846053, "category_id": 56, "iscrowd": 0, "bbox": [449, 139, 114, 98], "area": 6152}, {"id": 2243124, "category_id": 56, "iscrowd": 0, "bbox": [137, 249, 144, 93], "area": 8397}, {"id": 2046255, "category_id": 56, "iscrowd": 0, "bbox": [324, 110, 81, 51], "area": 2956}, {"id": 659796, "category_id": 57, "iscrowd": 0, "bbox": [384, 373, 109, 52], "area": 3250}, {"id": 2507388, "category_id": 57, "iscrowd": 0, "bbox": [301, 178, 68, 98], "area": 3946}, {"id": 730246, "category_id": 57, "iscrowd": 0, "bbox": [129, 351, 90, 67], "area": 4673}, {"id": 1521546, "category_id": 57, "iscrowd": 0, "bbox": [505, 194, 79, 81], "area": 4248}, {"id": 2900623, "category_id": 57, "iscrowd": 0, "bbox": [333, 237, 74, 81], "area": 3161}, {"id": 990569, "category_id": 57, "iscrowd": 0, "bbox": [363, 276, 151, 133], "area": 8336}, {"id": 929680, "category_id": 57, "iscrowd": 0, "bbox": [496, 304, 131, 128], "area": 11410}, {"id": 1128078, "category_id": 57, "iscrowd": 0, "bbox": [64, 143, 57, 58], "area": 1869}, {"id": 1984926, "category_id": 57, "iscrowd": 0, "bbox": [116, 104, 73, 57], "area": 2679}, {"id": 659027, "category_id": 57, "iscrowd": 0, "bbox": [259, 376, 95, 51], "area": 3865}, {"id": 2703758, "category_id": 57, "iscrowd": 0, "bbox": [245, 257, 96, 98], "area": 5232}, {"id": 1127313, "category_id": 57, "iscrowd": 0, "bbox": [541, 140, 82, 74], "area": 4281}, {"id": 3168180, "category_id": 57, "iscrowd": 0, "bbox": [90, 299, 83, 74], "area": 3722}, {"id": 5210263, "category_id": 67, "iscrowd": 0, "bbox": [0, 3, 640, 470], "area": 84232}, {"id": 3817036, "category_id": 188, "iscrowd": 0, "bbox": [0, 473, 474, 7], "area": 3317}], "file_name": "000000165831.png", "image_id": 165831}, {"segments_info": [{"id": 7830159, "category_id": 1, "iscrowd": 0, "bbox": [266, 23, 225, 292], "area": 33721}, {"id": 6318990, "category_id": 1, "iscrowd": 0, "bbox": [89, 333, 100, 235], "area": 10178}, {"id": 7173768, "category_id": 43, "iscrowd": 0, "bbox": [316, 98, 226, 176], "area": 3540}, {"id": 4874385, "category_id": 43, "iscrowd": 0, "bbox": [159, 340, 18, 69], "area": 706}, {"id": 3825832, "category_id": 138, "iscrowd": 0, "bbox": [0, 0, 551, 101], "area": 35193}, {"id": 3236792, "category_id": 145, "iscrowd": 0, "bbox": [0, 53, 551, 587], "area": 214138}, {"id": 4616620, "category_id": 185, "iscrowd": 0, "bbox": [50, 314, 446, 128], "area": 40706}], "file_name": "000000166165.png", "image_id": 166165}, {"segments_info": [{"id": 1581088, "category_id": 62, "iscrowd": 0, "bbox": [360, 101, 38, 81], "area": 2162}, {"id": 723214, "category_id": 62, "iscrowd": 0, "bbox": [401, 104, 46, 77], "area": 704}, {"id": 657932, "category_id": 62, "iscrowd": 0, "bbox": [16, 122, 133, 123], "area": 9404}, {"id": 3682876, "category_id": 67, "iscrowd": 0, "bbox": [396, 119, 35, 82], "area": 746}, {"id": 6771790, "category_id": 72, "iscrowd": 0, "bbox": [168, 96, 88, 65], "area": 5349}, {"id": 4933966, "category_id": 75, "iscrowd": 0, "bbox": [169, 233, 32, 14], "area": 276}, {"id": 2433831, "category_id": 84, "iscrowd": 0, "bbox": [356, 288, 36, 34], "area": 416}, {"id": 4736856, "category_id": 84, "iscrowd": 0, "bbox": [352, 251, 148, 91], "area": 8874}, {"id": 657939, "category_id": 86, "iscrowd": 0, "bbox": [296, 173, 51, 119], "area": 4641}, {"id": 660265, "category_id": 118, "iscrowd": 0, "bbox": [0, 154, 500, 159], "area": 13831}, {"id": 1381400, "category_id": 156, "iscrowd": 0, "bbox": [166, 123, 145, 97], "area": 7454}, {"id": 6051162, "category_id": 186, "iscrowd": 0, "bbox": [352, 0, 43, 14], "area": 383}, {"id": 921885, "category_id": 189, "iscrowd": 0, "bbox": [0, 217, 500, 158], "area": 40598}, {"id": 2368556, "category_id": 195, "iscrowd": 0, "bbox": [336, 262, 164, 99], "area": 4368}, {"id": 6514540, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 230], "area": 58455}, {"id": 593430, "category_id": 200, "iscrowd": 0, "bbox": [0, 294, 182, 81], "area": 4931}], "file_name": "000000166166.png", "image_id": 166166}, {"segments_info": [{"id": 5791337, "category_id": 16, "iscrowd": 0, "bbox": [288, 181, 48, 122], "area": 1855}, {"id": 5069680, "category_id": 16, "iscrowd": 0, "bbox": [155, 165, 79, 134], "area": 5027}, {"id": 3819612, "category_id": 16, "iscrowd": 0, "bbox": [296, 148, 110, 189], "area": 9701}, {"id": 4740455, "category_id": 16, "iscrowd": 0, "bbox": [234, 179, 72, 133], "area": 5010}, {"id": 12104881, "category_id": 118, "iscrowd": 0, "bbox": [0, 237, 640, 190], "area": 103278}, {"id": 4602155, "category_id": 175, "iscrowd": 0, "bbox": [335, 0, 305, 305], "area": 5276}, {"id": 3419946, "category_id": 177, "iscrowd": 0, "bbox": [273, 0, 187, 56], "area": 7801}, {"id": 2433039, "category_id": 185, "iscrowd": 0, "bbox": [149, 0, 491, 259], "area": 39391}, {"id": 5787724, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 272], "area": 93330}, {"id": 4669230, "category_id": 199, "iscrowd": 0, "bbox": [151, 29, 125, 26], "area": 2223}], "file_name": "000000166259.png", "image_id": 166259}, {"segments_info": [{"id": 7963792, "category_id": 17, "iscrowd": 0, "bbox": [1, 3, 361, 497], "area": 111970}, {"id": 5588035, "category_id": 47, "iscrowd": 0, "bbox": [325, 240, 123, 177], "area": 17209}, {"id": 6910846, "category_id": 47, "iscrowd": 0, "bbox": [166, 311, 161, 238], "area": 18607}, {"id": 5794944, "category_id": 47, "iscrowd": 0, "bbox": [424, 180, 56, 168], "area": 7190}, {"id": 1448734, "category_id": 189, "iscrowd": 0, "bbox": [91, 344, 389, 296], "area": 56080}, {"id": 2502451, "category_id": 190, "iscrowd": 0, "bbox": [149, 550, 279, 90], "area": 4190}, {"id": 4084867, "category_id": 196, "iscrowd": 0, "bbox": [459, 180, 21, 3], "area": 40}, {"id": 987944, "category_id": 199, "iscrowd": 0, "bbox": [161, 0, 319, 237], "area": 43949}], "file_name": "000000166277.png", "image_id": 166277}, {"segments_info": [{"id": 8683646, "category_id": 16, "iscrowd": 0, "bbox": [394, 179, 34, 12], "area": 168}, {"id": 4667952, "category_id": 16, "iscrowd": 0, "bbox": [278, 34, 35, 32], "area": 143}, {"id": 6049604, "category_id": 16, "iscrowd": 0, "bbox": [251, 149, 34, 20], "area": 226}, {"id": 6378569, "category_id": 16, "iscrowd": 0, "bbox": [29, 156, 30, 13], "area": 187}, {"id": 5062968, "category_id": 16, "iscrowd": 0, "bbox": [93, 134, 28, 7], "area": 138}, {"id": 6246987, "category_id": 16, "iscrowd": 0, "bbox": [477, 118, 44, 9], "area": 138}, {"id": 5063737, "category_id": 16, "iscrowd": 0, "bbox": [154, 147, 29, 10], "area": 136}, {"id": 2830893, "category_id": 16, "iscrowd": 0, "bbox": [596, 205, 26, 26], "area": 299}, {"id": 9998731, "category_id": 16, "iscrowd": 0, "bbox": [10, 107, 22, 14], "area": 163}, {"id": 3747625, "category_id": 16, "iscrowd": 0, "bbox": [359, 172, 31, 8], "area": 123}, {"id": 6710878, "category_id": 16, "iscrowd": 0, "bbox": [587, 168, 45, 18], "area": 235}, {"id": 4011310, "category_id": 16, "iscrowd": 0, "bbox": [212, 155, 33, 12], "area": 162}, {"id": 9472642, "category_id": 16, "iscrowd": 0, "bbox": [32, 180, 33, 28], "area": 289}, {"id": 4148051, "category_id": 16, "iscrowd": 1, "bbox": [1, 52, 509, 265], "area": 3564}, {"id": 1580840, "category_id": 21, "iscrowd": 0, "bbox": [532, 212, 51, 95], "area": 3508}, {"id": 1448477, "category_id": 21, "iscrowd": 0, "bbox": [151, 222, 91, 87], "area": 4397}, {"id": 1710616, "category_id": 21, "iscrowd": 0, "bbox": [222, 184, 139, 127], "area": 7400}, {"id": 7300442, "category_id": 148, "iscrowd": 0, "bbox": [0, 323, 640, 157], "area": 88444}, {"id": 9601395, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 256], "area": 137887}, {"id": 1912374, "category_id": 193, "iscrowd": 0, "bbox": [0, 203, 640, 146], "area": 58301}], "file_name": "000000166287.png", "image_id": 166287}, {"segments_info": [{"id": 5592642, "category_id": 3, "iscrowd": 0, "bbox": [211, 359, 10, 7], "area": 57}, {"id": 4277300, "category_id": 3, "iscrowd": 0, "bbox": [140, 357, 11, 14], "area": 103}, {"id": 3421221, "category_id": 3, "iscrowd": 0, "bbox": [232, 358, 7, 6], "area": 34}, {"id": 3684137, "category_id": 3, "iscrowd": 0, "bbox": [242, 359, 12, 8], "area": 58}, {"id": 4671543, "category_id": 3, "iscrowd": 0, "bbox": [224, 358, 9, 7], "area": 56}, {"id": 3223079, "category_id": 3, "iscrowd": 0, "bbox": [376, 355, 14, 12], "area": 130}, {"id": 4278074, "category_id": 3, "iscrowd": 0, "bbox": [148, 355, 26, 17], "area": 380}, {"id": 3683882, "category_id": 3, "iscrowd": 0, "bbox": [578, 336, 62, 46], "area": 2156}, {"id": 3288866, "category_id": 3, "iscrowd": 0, "bbox": [101, 352, 35, 21], "area": 521}, {"id": 3882031, "category_id": 8, "iscrowd": 0, "bbox": [337, 345, 29, 26], "area": 612}, {"id": 4079151, "category_id": 8, "iscrowd": 0, "bbox": [456, 342, 51, 35], "area": 1293}, {"id": 4736822, "category_id": 8, "iscrowd": 0, "bbox": [28, 339, 64, 38], "area": 1982}, {"id": 3882289, "category_id": 8, "iscrowd": 0, "bbox": [312, 353, 16, 13], "area": 159}, {"id": 3487015, "category_id": 8, "iscrowd": 0, "bbox": [173, 353, 16, 15], "area": 191}, {"id": 4277543, "category_id": 10, "iscrowd": 0, "bbox": [509, 251, 12, 21], "area": 192}, {"id": 1841182, "category_id": 10, "iscrowd": 0, "bbox": [354, 212, 8, 28], "area": 224}, {"id": 4538159, "category_id": 10, "iscrowd": 0, "bbox": [204, 210, 12, 26], "area": 261}, {"id": 2367768, "category_id": 10, "iscrowd": 0, "bbox": [365, 213, 12, 28], "area": 238}, {"id": 3946537, "category_id": 10, "iscrowd": 0, "bbox": [51, 186, 17, 34], "area": 434}, {"id": 2762525, "category_id": 10, "iscrowd": 0, "bbox": [291, 200, 14, 30], "area": 359}, {"id": 3090460, "category_id": 10, "iscrowd": 0, "bbox": [69, 188, 14, 29], "area": 319}, {"id": 4077865, "category_id": 10, "iscrowd": 0, "bbox": [293, 230, 8, 21], "area": 162}, {"id": 3025452, "category_id": 10, "iscrowd": 0, "bbox": [269, 188, 13, 36], "area": 391}, {"id": 3355672, "category_id": 10, "iscrowd": 0, "bbox": [444, 228, 9, 29], "area": 211}, {"id": 3223330, "category_id": 10, "iscrowd": 0, "bbox": [477, 240, 10, 25], "area": 186}, {"id": 7499343, "category_id": 10, "iscrowd": 1, "bbox": [252, 343, 63, 14], "area": 554}, {"id": 5924437, "category_id": 149, "iscrowd": 0, "bbox": [0, 349, 640, 78], "area": 36076}, {"id": 3159336, "category_id": 184, "iscrowd": 0, "bbox": [0, 309, 640, 65], "area": 8925}, {"id": 10062177, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 213540}, {"id": 3161903, "category_id": 193, "iscrowd": 0, "bbox": [0, 350, 579, 28], "area": 2531}], "file_name": "000000166391.png", "image_id": 166391}, {"segments_info": [{"id": 656910, "category_id": 44, "iscrowd": 0, "bbox": [292, 2, 45, 198], "area": 6526}, {"id": 1391224, "category_id": 44, "iscrowd": 0, "bbox": [153, 11, 88, 262], "area": 14814}, {"id": 725021, "category_id": 44, "iscrowd": 0, "bbox": [362, 3, 49, 204], "area": 6655}, {"id": 2906538, "category_id": 47, "iscrowd": 0, "bbox": [207, 75, 34, 63], "area": 1051}, {"id": 1922254, "category_id": 47, "iscrowd": 0, "bbox": [317, 168, 86, 110], "area": 7512}, {"id": 1982313, "category_id": 48, "iscrowd": 0, "bbox": [440, 66, 23, 42], "area": 390}, {"id": 2769247, "category_id": 48, "iscrowd": 0, "bbox": [2, 353, 125, 202], "area": 4509}, {"id": 3955850, "category_id": 49, "iscrowd": 0, "bbox": [498, 350, 47, 198], "area": 3834}, {"id": 1124424, "category_id": 49, "iscrowd": 0, "bbox": [238, 61, 14, 36], "area": 190}, {"id": 331285, "category_id": 62, "iscrowd": 0, "bbox": [211, 21, 159, 36], "area": 2149}, {"id": 2711973, "category_id": 67, "iscrowd": 0, "bbox": [0, 40, 587, 592], "area": 294003}, {"id": 2046813, "category_id": 109, "iscrowd": 0, "bbox": [190, 0, 363, 66], "area": 13214}, {"id": 2053019, "category_id": 189, "iscrowd": 0, "bbox": [0, 631, 587, 9], "area": 4529}, {"id": 1454160, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 587, 303], "area": 14562}], "file_name": "000000166426.png", "image_id": 166426}, {"segments_info": [{"id": 3355960, "category_id": 1, "iscrowd": 0, "bbox": [73, 82, 507, 337], "area": 53077}, {"id": 9409686, "category_id": 51, "iscrowd": 0, "bbox": [191, 13, 44, 26], "area": 926}, {"id": 8489869, "category_id": 51, "iscrowd": 0, "bbox": [0, 1, 33, 31], "area": 861}, {"id": 9870494, "category_id": 51, "iscrowd": 0, "bbox": [103, 2, 60, 32], "area": 1439}, {"id": 1710873, "category_id": 63, "iscrowd": 0, "bbox": [2, 165, 637, 257], "area": 83457}, {"id": 1710616, "category_id": 73, "iscrowd": 0, "bbox": [94, 231, 139, 110], "area": 13653}, {"id": 5392698, "category_id": 77, "iscrowd": 0, "bbox": [413, 253, 91, 34], "area": 1635}, {"id": 11054257, "category_id": 84, "iscrowd": 0, "bbox": [415, 276, 102, 28], "area": 1435}, {"id": 2510724, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 640, 211], "area": 43187}, {"id": 10132123, "category_id": 199, "iscrowd": 0, "bbox": [317, 0, 323, 217], "area": 56264}], "file_name": "000000166478.png", "image_id": 166478}, {"segments_info": [{"id": 3163736, "category_id": 10, "iscrowd": 0, "bbox": [562, 78, 29, 73], "area": 1860}, {"id": 5135970, "category_id": 10, "iscrowd": 0, "bbox": [165, 51, 17, 37], "area": 427}, {"id": 6707260, "category_id": 149, "iscrowd": 0, "bbox": [0, 301, 445, 134], "area": 34755}, {"id": 5005633, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 400], "area": 203374}, {"id": 5525559, "category_id": 185, "iscrowd": 0, "bbox": [269, 290, 371, 110], "area": 14050}, {"id": 4212281, "category_id": 194, "iscrowd": 0, "bbox": [271, 309, 225, 107], "area": 6230}], "file_name": "000000166509.png", "image_id": 166509}, {"segments_info": [{"id": 2431515, "category_id": 63, "iscrowd": 0, "bbox": [524, 344, 115, 82], "area": 5882}, {"id": 3483941, "category_id": 72, "iscrowd": 0, "bbox": [194, 135, 168, 146], "area": 20694}, {"id": 2829099, "category_id": 72, "iscrowd": 0, "bbox": [389, 278, 112, 102], "area": 8919}, {"id": 13880769, "category_id": 84, "iscrowd": 0, "bbox": [344, 400, 3, 13], "area": 37}, {"id": 6982554, "category_id": 84, "iscrowd": 0, "bbox": [324, 350, 8, 39], "area": 257}, {"id": 8814715, "category_id": 84, "iscrowd": 0, "bbox": [303, 351, 6, 41], "area": 235}, {"id": 6128962, "category_id": 84, "iscrowd": 0, "bbox": [341, 347, 7, 40], "area": 227}, {"id": 6639719, "category_id": 84, "iscrowd": 0, "bbox": [310, 348, 5, 43], "area": 174}, {"id": 4677290, "category_id": 84, "iscrowd": 0, "bbox": [354, 348, 7, 38], "area": 240}, {"id": 10589319, "category_id": 84, "iscrowd": 0, "bbox": [242, 404, 25, 12], "area": 216}, {"id": 1581165, "category_id": 84, "iscrowd": 0, "bbox": [282, 317, 51, 7], "area": 243}, {"id": 12235950, "category_id": 84, "iscrowd": 0, "bbox": [297, 352, 5, 40], "area": 177}, {"id": 6379341, "category_id": 84, "iscrowd": 0, "bbox": [320, 403, 10, 11], "area": 98}, {"id": 3226428, "category_id": 84, "iscrowd": 0, "bbox": [273, 353, 2, 42], "area": 84}, {"id": 9867408, "category_id": 84, "iscrowd": 0, "bbox": [282, 353, 16, 42], "area": 530}, {"id": 7372718, "category_id": 84, "iscrowd": 0, "bbox": [335, 350, 5, 37], "area": 133}, {"id": 4867923, "category_id": 112, "iscrowd": 0, "bbox": [0, 75, 141, 351], "area": 13245}, {"id": 3751497, "category_id": 130, "iscrowd": 0, "bbox": [0, 62, 158, 356], "area": 6962}, {"id": 4674148, "category_id": 156, "iscrowd": 0, "bbox": [188, 275, 350, 151], "area": 32658}, {"id": 9670286, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 262], "area": 50388}, {"id": 1123668, "category_id": 188, "iscrowd": 0, "bbox": [14, 260, 26, 42], "area": 868}, {"id": 1842721, "category_id": 190, "iscrowd": 0, "bbox": [0, 359, 41, 67], "area": 2128}, {"id": 8291203, "category_id": 199, "iscrowd": 0, "bbox": [0, 10, 640, 416], "area": 109598}], "file_name": "000000166521.png", "image_id": 166521}, {"segments_info": [{"id": 5131341, "category_id": 22, "iscrowd": 0, "bbox": [80, 43, 442, 330], "area": 50176}, {"id": 7038567, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 408], "area": 127774}], "file_name": "000000166563.png", "image_id": 166563}, {"segments_info": [{"id": 7305600, "category_id": 22, "iscrowd": 0, "bbox": [51, 57, 486, 272], "area": 91869}, {"id": 7833224, "category_id": 95, "iscrowd": 0, "bbox": [0, 18, 452, 180], "area": 19762}, {"id": 7252637, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 221], "area": 47497}, {"id": 7044229, "category_id": 185, "iscrowd": 0, "bbox": [0, 216, 629, 133], "area": 9005}, {"id": 15528167, "category_id": 187, "iscrowd": 0, "bbox": [32, 0, 388, 33], "area": 3062}, {"id": 6123140, "category_id": 198, "iscrowd": 0, "bbox": [0, 124, 640, 356], "area": 135315}], "file_name": "000000166642.png", "image_id": 166642}, {"segments_info": [{"id": 8356231, "category_id": 3, "iscrowd": 0, "bbox": [0, 144, 138, 283], "area": 27376}, {"id": 3359062, "category_id": 22, "iscrowd": 0, "bbox": [383, 51, 175, 242], "area": 27042}, {"id": 11646652, "category_id": 149, "iscrowd": 0, "bbox": [106, 275, 534, 152], "area": 71522}, {"id": 4019799, "category_id": 184, "iscrowd": 0, "bbox": [79, 146, 561, 145], "area": 30551}, {"id": 14934751, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 118], "area": 53994}, {"id": 6842459, "category_id": 192, "iscrowd": 0, "bbox": [0, 66, 640, 105], "area": 30126}, {"id": 5663088, "category_id": 193, "iscrowd": 0, "bbox": [64, 153, 576, 171], "area": 20673}], "file_name": "000000166664.png", "image_id": 166664}, {"segments_info": [{"id": 5064831, "category_id": 1, "iscrowd": 0, "bbox": [158, 88, 31, 79], "area": 1222}, {"id": 7959414, "category_id": 1, "iscrowd": 0, "bbox": [70, 235, 52, 155], "area": 5714}, {"id": 8423057, "category_id": 1, "iscrowd": 0, "bbox": [109, 237, 27, 94], "area": 1092}, {"id": 6383732, "category_id": 1, "iscrowd": 0, "bbox": [230, 111, 58, 67], "area": 950}, {"id": 5394005, "category_id": 1, "iscrowd": 0, "bbox": [149, 253, 17, 28], "area": 158}, {"id": 6056310, "category_id": 1, "iscrowd": 0, "bbox": [187, 108, 32, 62], "area": 1211}, {"id": 5920873, "category_id": 1, "iscrowd": 0, "bbox": [215, 108, 17, 29], "area": 223}, {"id": 8285852, "category_id": 1, "iscrowd": 0, "bbox": [339, 280, 9, 32], "area": 120}, {"id": 9935003, "category_id": 1, "iscrowd": 0, "bbox": [138, 241, 12, 15], "area": 113}, {"id": 8220531, "category_id": 1, "iscrowd": 0, "bbox": [156, 92, 16, 33], "area": 236}, {"id": 6644881, "category_id": 1, "iscrowd": 0, "bbox": [136, 255, 15, 42], "area": 479}, {"id": 7829636, "category_id": 1, "iscrowd": 0, "bbox": [259, 114, 14, 29], "area": 234}, {"id": 7629170, "category_id": 1, "iscrowd": 0, "bbox": [339, 288, 11, 24], "area": 115}, {"id": 9601655, "category_id": 1, "iscrowd": 1, "bbox": [126, 109, 150, 156], "area": 1763}, {"id": 5266521, "category_id": 8, "iscrowd": 0, "bbox": [157, 118, 137, 194], "area": 14447}, {"id": 5278375, "category_id": 15, "iscrowd": 0, "bbox": [205, 134, 48, 33], "area": 872}, {"id": 6514281, "category_id": 19, "iscrowd": 0, "bbox": [213, 211, 68, 150], "area": 5613}, {"id": 3814965, "category_id": 31, "iscrowd": 0, "bbox": [61, 265, 21, 49], "area": 474}, {"id": 9870239, "category_id": 118, "iscrowd": 0, "bbox": [0, 276, 375, 224], "area": 46292}, {"id": 11383997, "category_id": 154, "iscrowd": 0, "bbox": [0, 294, 375, 52], "area": 896}, {"id": 11306338, "category_id": 155, "iscrowd": 0, "bbox": [0, 252, 375, 58], "area": 6530}, {"id": 14915936, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 375, 236], "area": 67579}, {"id": 8812655, "category_id": 190, "iscrowd": 0, "bbox": [211, 316, 164, 149], "area": 9744}, {"id": 6187371, "category_id": 192, "iscrowd": 0, "bbox": [0, 208, 375, 52], "area": 7715}, {"id": 7506306, "category_id": 193, "iscrowd": 0, "bbox": [0, 305, 375, 158], "area": 7485}], "file_name": "000000166747.png", "image_id": 166747}, {"segments_info": [{"id": 8888772, "category_id": 1, "iscrowd": 0, "bbox": [73, 20, 353, 611], "area": 115782}, {"id": 7770311, "category_id": 1, "iscrowd": 0, "bbox": [0, 125, 187, 511], "area": 56853}, {"id": 9153999, "category_id": 32, "iscrowd": 0, "bbox": [310, 225, 107, 405], "area": 29840}, {"id": 14542832, "category_id": 181, "iscrowd": 0, "bbox": [20, 0, 134, 379], "area": 19529}, {"id": 8039124, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 426, 267], "area": 45151}], "file_name": "000000166768.png", "image_id": 166768}, {"segments_info": [{"id": 2567236, "category_id": 1, "iscrowd": 0, "bbox": [145, 308, 48, 43], "area": 953}, {"id": 7306141, "category_id": 1, "iscrowd": 0, "bbox": [370, 261, 24, 30], "area": 289}, {"id": 1382178, "category_id": 1, "iscrowd": 0, "bbox": [34, 266, 67, 143], "area": 5554}, {"id": 1777722, "category_id": 1, "iscrowd": 0, "bbox": [440, 285, 40, 48], "area": 1215}, {"id": 2697529, "category_id": 1, "iscrowd": 0, "bbox": [296, 290, 47, 47], "area": 992}, {"id": 2634313, "category_id": 1, "iscrowd": 0, "bbox": [101, 283, 49, 49], "area": 624}, {"id": 4278622, "category_id": 1, "iscrowd": 0, "bbox": [396, 286, 84, 153], "area": 7919}, {"id": 5133671, "category_id": 1, "iscrowd": 0, "bbox": [210, 265, 40, 65], "area": 1444}, {"id": 7372952, "category_id": 1, "iscrowd": 0, "bbox": [420, 247, 25, 35], "area": 467}, {"id": 3818325, "category_id": 1, "iscrowd": 0, "bbox": [349, 277, 40, 61], "area": 1616}, {"id": 1645861, "category_id": 1, "iscrowd": 0, "bbox": [97, 294, 66, 83], "area": 2954}, {"id": 1910066, "category_id": 1, "iscrowd": 0, "bbox": [1, 296, 51, 126], "area": 4892}, {"id": 2962501, "category_id": 1, "iscrowd": 0, "bbox": [398, 250, 25, 39], "area": 483}, {"id": 1908772, "category_id": 44, "iscrowd": 0, "bbox": [256, 324, 14, 37], "area": 355}, {"id": 1645598, "category_id": 44, "iscrowd": 0, "bbox": [277, 318, 6, 19], "area": 84}, {"id": 1646627, "category_id": 44, "iscrowd": 0, "bbox": [174, 381, 25, 95], "area": 1374}, {"id": 2503998, "category_id": 44, "iscrowd": 0, "bbox": [325, 294, 12, 9], "area": 48}, {"id": 2831186, "category_id": 44, "iscrowd": 0, "bbox": [217, 306, 5, 16], "area": 58}, {"id": 3686476, "category_id": 46, "iscrowd": 0, "bbox": [225, 323, 7, 8], "area": 49}, {"id": 5728117, "category_id": 46, "iscrowd": 0, "bbox": [374, 452, 37, 92], "area": 1358}, {"id": 6581880, "category_id": 46, "iscrowd": 0, "bbox": [352, 345, 10, 12], "area": 109}, {"id": 4344673, "category_id": 46, "iscrowd": 0, "bbox": [303, 567, 79, 73], "area": 4210}, {"id": 8160399, "category_id": 46, "iscrowd": 0, "bbox": [344, 349, 7, 19], "area": 82}, {"id": 4806760, "category_id": 46, "iscrowd": 0, "bbox": [120, 368, 23, 45], "area": 511}, {"id": 4017501, "category_id": 46, "iscrowd": 0, "bbox": [80, 409, 27, 46], "area": 728}, {"id": 5463920, "category_id": 46, "iscrowd": 0, "bbox": [186, 344, 12, 37], "area": 265}, {"id": 4476507, "category_id": 46, "iscrowd": 0, "bbox": [450, 561, 30, 78], "area": 2049}, {"id": 5663097, "category_id": 46, "iscrowd": 0, "bbox": [377, 395, 18, 57], "area": 670}, {"id": 4147801, "category_id": 46, "iscrowd": 0, "bbox": [56, 419, 25, 61], "area": 1011}, {"id": 4608095, "category_id": 46, "iscrowd": 0, "bbox": [415, 561, 42, 65], "area": 1787}, {"id": 4082003, "category_id": 46, "iscrowd": 0, "bbox": [53, 404, 25, 32], "area": 423}, {"id": 4739940, "category_id": 46, "iscrowd": 1, "bbox": [77, 315, 353, 295], "area": 9063}, {"id": 3159870, "category_id": 47, "iscrowd": 0, "bbox": [124, 368, 17, 10], "area": 122}, {"id": 6056569, "category_id": 47, "iscrowd": 0, "bbox": [340, 405, 33, 40], "area": 1193}, {"id": 5793140, "category_id": 47, "iscrowd": 0, "bbox": [237, 333, 19, 24], "area": 260}, {"id": 6516351, "category_id": 47, "iscrowd": 0, "bbox": [330, 369, 19, 30], "area": 502}, {"id": 5070187, "category_id": 47, "iscrowd": 0, "bbox": [331, 445, 44, 58], "area": 1733}, {"id": 3491161, "category_id": 47, "iscrowd": 0, "bbox": [352, 480, 44, 91], "area": 3147}, {"id": 6714502, "category_id": 47, "iscrowd": 0, "bbox": [329, 395, 26, 30], "area": 406}, {"id": 4015952, "category_id": 48, "iscrowd": 0, "bbox": [414, 489, 66, 10], "area": 243}, {"id": 4674910, "category_id": 49, "iscrowd": 0, "bbox": [416, 443, 35, 3], "area": 72}, {"id": 2502454, "category_id": 49, "iscrowd": 0, "bbox": [23, 423, 30, 3], "area": 68}, {"id": 5135204, "category_id": 49, "iscrowd": 0, "bbox": [406, 500, 74, 6], "area": 342}, {"id": 2438481, "category_id": 50, "iscrowd": 0, "bbox": [335, 542, 23, 12], "area": 103}, {"id": 3029583, "category_id": 67, "iscrowd": 0, "bbox": [4, 357, 377, 272], "area": 38583}, {"id": 4478825, "category_id": 112, "iscrowd": 0, "bbox": [140, 233, 85, 95], "area": 4965}, {"id": 13030094, "category_id": 130, "iscrowd": 0, "bbox": [36, 212, 329, 48], "area": 1336}, {"id": 3161677, "category_id": 177, "iscrowd": 0, "bbox": [71, 301, 240, 29], "area": 1285}, {"id": 6517894, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 218], "area": 96273}, {"id": 2370618, "category_id": 189, "iscrowd": 0, "bbox": [0, 338, 480, 302], "area": 14146}, {"id": 7436162, "category_id": 195, "iscrowd": 0, "bbox": [0, 323, 480, 317], "area": 15253}, {"id": 3359317, "category_id": 196, "iscrowd": 0, "bbox": [70, 343, 183, 269], "area": 17732}, {"id": 11255758, "category_id": 199, "iscrowd": 0, "bbox": [0, 174, 480, 151], "area": 33482}], "file_name": "000000166918.png", "image_id": 166918}, {"segments_info": [{"id": 5004147, "category_id": 1, "iscrowd": 0, "bbox": [3, 0, 372, 493], "area": 114595}, {"id": 790548, "category_id": 32, "iscrowd": 0, "bbox": [185, 275, 142, 72], "area": 5448}, {"id": 11717342, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 465], "area": 60181}], "file_name": "000000167067.png", "image_id": 167067}, {"segments_info": [{"id": 6649176, "category_id": 1, "iscrowd": 0, "bbox": [395, 199, 11, 21], "area": 143}, {"id": 7766872, "category_id": 3, "iscrowd": 0, "bbox": [171, 206, 50, 12], "area": 404}, {"id": 1907472, "category_id": 3, "iscrowd": 0, "bbox": [33, 216, 607, 264], "area": 139507}, {"id": 3223576, "category_id": 3, "iscrowd": 0, "bbox": [551, 213, 28, 12], "area": 226}, {"id": 6188088, "category_id": 3, "iscrowd": 0, "bbox": [228, 202, 86, 17], "area": 1095}, {"id": 3026971, "category_id": 17, "iscrowd": 0, "bbox": [297, 142, 84, 78], "area": 3117}, {"id": 13754291, "category_id": 130, "iscrowd": 0, "bbox": [213, 156, 357, 42], "area": 981}, {"id": 1182730, "category_id": 149, "iscrowd": 0, "bbox": [0, 265, 640, 215], "area": 14337}, {"id": 4807486, "category_id": 185, "iscrowd": 0, "bbox": [0, 146, 640, 81], "area": 25743}, {"id": 2170386, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 187], "area": 107196}, {"id": 2368284, "category_id": 199, "iscrowd": 0, "bbox": [0, 208, 640, 79], "area": 13817}], "file_name": "000000167122.png", "image_id": 167122}, {"segments_info": [{"id": 7697015, "category_id": 22, "iscrowd": 0, "bbox": [287, 6, 353, 414], "area": 94360}, {"id": 8684425, "category_id": 22, "iscrowd": 0, "bbox": [297, 238, 162, 189], "area": 24533}, {"id": 7499891, "category_id": 22, "iscrowd": 0, "bbox": [110, 9, 288, 401], "area": 43890}, {"id": 4605767, "category_id": 184, "iscrowd": 0, "bbox": [356, 0, 250, 427], "area": 13621}, {"id": 10927799, "category_id": 193, "iscrowd": 0, "bbox": [0, 253, 640, 174], "area": 42987}], "file_name": "000000167128.png", "image_id": 167128}, {"segments_info": [{"id": 6515818, "category_id": 65, "iscrowd": 0, "bbox": [0, 1, 500, 370], "area": 159213}, {"id": 3829614, "category_id": 84, "iscrowd": 0, "bbox": [110, 197, 143, 168], "area": 14409}, {"id": 4476228, "category_id": 93, "iscrowd": 0, "bbox": [0, 69, 500, 306], "area": 2721}, {"id": 593696, "category_id": 189, "iscrowd": 0, "bbox": [422, 0, 78, 96], "area": 2393}, {"id": 4934984, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 308, 81], "area": 8065}], "file_name": "000000167159.png", "image_id": 167159}, {"segments_info": [{"id": 2105422, "category_id": 86, "iscrowd": 0, "bbox": [132, 116, 223, 306], "area": 52934}, {"id": 2768221, "category_id": 189, "iscrowd": 0, "bbox": [0, 385, 640, 42], "area": 16601}, {"id": 7698554, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 399], "area": 202670}], "file_name": "000000167240.png", "image_id": 167240}, {"segments_info": [{"id": 4806000, "category_id": 85, "iscrowd": 0, "bbox": [0, 38, 316, 602], "area": 122417}, {"id": 9019569, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 184448}], "file_name": "000000167353.png", "image_id": 167353}, {"segments_info": [{"id": 1972272, "category_id": 1, "iscrowd": 0, "bbox": [369, 175, 30, 122], "area": 1648}, {"id": 2305102, "category_id": 1, "iscrowd": 0, "bbox": [147, 81, 118, 345], "area": 19628}, {"id": 1058159, "category_id": 1, "iscrowd": 0, "bbox": [251, 188, 34, 70], "area": 1695}, {"id": 8745100, "category_id": 1, "iscrowd": 0, "bbox": [493, 154, 41, 149], "area": 2550}, {"id": 2173806, "category_id": 1, "iscrowd": 0, "bbox": [217, 198, 33, 36], "area": 313}, {"id": 8160199, "category_id": 1, "iscrowd": 0, "bbox": [480, 194, 25, 64], "area": 695}, {"id": 593702, "category_id": 1, "iscrowd": 0, "bbox": [205, 134, 26, 37], "area": 412}, {"id": 1119777, "category_id": 2, "iscrowd": 0, "bbox": [307, 302, 42, 40], "area": 841}, {"id": 2439497, "category_id": 2, "iscrowd": 0, "bbox": [238, 232, 133, 220], "area": 16511}, {"id": 9206678, "category_id": 72, "iscrowd": 0, "bbox": [265, 7, 197, 270], "area": 31563}, {"id": 530773, "category_id": 92, "iscrowd": 0, "bbox": [0, 108, 143, 113], "area": 8794}, {"id": 7768972, "category_id": 130, "iscrowd": 0, "bbox": [573, 124, 29, 36], "area": 766}, {"id": 987681, "category_id": 144, "iscrowd": 0, "bbox": [304, 252, 323, 130], "area": 23736}, {"id": 9015961, "category_id": 168, "iscrowd": 0, "bbox": [0, 249, 67, 96], "area": 4359}, {"id": 461837, "category_id": 186, "iscrowd": 0, "bbox": [375, 0, 265, 144], "area": 18667}, {"id": 9807299, "category_id": 189, "iscrowd": 0, "bbox": [125, 358, 56, 45], "area": 1152}, {"id": 988717, "category_id": 199, "iscrowd": 0, "bbox": [128, 0, 512, 254], "area": 43707}], "file_name": "000000167486.png", "image_id": 167486}, {"segments_info": [{"id": 6636592, "category_id": 5, "iscrowd": 0, "bbox": [164, 77, 323, 253], "area": 17965}, {"id": 15115632, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 254992}], "file_name": "000000167540.png", "image_id": 167540}, {"segments_info": [{"id": 7233633, "category_id": 1, "iscrowd": 0, "bbox": [509, 0, 131, 151], "area": 14008}, {"id": 4015449, "category_id": 1, "iscrowd": 0, "bbox": [173, 0, 341, 128], "area": 16391}, {"id": 7171448, "category_id": 47, "iscrowd": 0, "bbox": [152, 358, 118, 67], "area": 5255}, {"id": 4802133, "category_id": 47, "iscrowd": 0, "bbox": [270, 392, 88, 33], "area": 2273}, {"id": 5133157, "category_id": 48, "iscrowd": 0, "bbox": [493, 249, 100, 27], "area": 1411}, {"id": 3355708, "category_id": 49, "iscrowd": 0, "bbox": [448, 290, 152, 33], "area": 2612}, {"id": 2574662, "category_id": 51, "iscrowd": 0, "bbox": [102, 52, 178, 299], "area": 34902}, {"id": 3032153, "category_id": 54, "iscrowd": 0, "bbox": [303, 3, 215, 200], "area": 25888}, {"id": 3493995, "category_id": 54, "iscrowd": 0, "bbox": [308, 176, 201, 214], "area": 25928}, {"id": 2727878, "category_id": 55, "iscrowd": 0, "bbox": [144, 273, 63, 125], "area": 5466}, {"id": 5392964, "category_id": 62, "iscrowd": 0, "bbox": [502, 0, 75, 129], "area": 1627}, {"id": 1186094, "category_id": 67, "iscrowd": 0, "bbox": [0, 1, 155, 119], "area": 8360}, {"id": 3486775, "category_id": 67, "iscrowd": 0, "bbox": [66, 127, 564, 293], "area": 39565}, {"id": 5461869, "category_id": 100, "iscrowd": 0, "bbox": [116, 200, 394, 225], "area": 13422}, {"id": 5460313, "category_id": 189, "iscrowd": 0, "bbox": [110, 367, 482, 58], "area": 2710}, {"id": 3093052, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 577, 425], "area": 38723}, {"id": 8748166, "category_id": 195, "iscrowd": 0, "bbox": [608, 230, 32, 98], "area": 855}, {"id": 1263204, "category_id": 196, "iscrowd": 0, "bbox": [236, 0, 130, 387], "area": 18364}], "file_name": "000000167572.png", "image_id": 167572}, {"segments_info": [{"id": 10067373, "category_id": 44, "iscrowd": 0, "bbox": [433, 78, 30, 75], "area": 1416}, {"id": 9735574, "category_id": 70, "iscrowd": 0, "bbox": [372, 270, 247, 210], "area": 29207}, {"id": 8749972, "category_id": 81, "iscrowd": 0, "bbox": [250, 177, 216, 100], "area": 14926}, {"id": 9866391, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 266, 416], "area": 92066}, {"id": 8355468, "category_id": 133, "iscrowd": 0, "bbox": [323, 0, 127, 56], "area": 6466}, {"id": 6646917, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 68444}, {"id": 16182755, "category_id": 188, "iscrowd": 0, "bbox": [586, 216, 54, 264], "area": 7562}, {"id": 2965617, "category_id": 190, "iscrowd": 0, "bbox": [50, 380, 275, 100], "area": 14706}, {"id": 10722984, "category_id": 199, "iscrowd": 0, "bbox": [253, 0, 387, 156], "area": 38325}], "file_name": "000000167898.png", "image_id": 167898}, {"segments_info": [{"id": 4811875, "category_id": 16, "iscrowd": 0, "bbox": [106, 58, 234, 246], "area": 25077}, {"id": 5004624, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 143308}, {"id": 3355191, "category_id": 194, "iscrowd": 0, "bbox": [0, 265, 475, 110], "area": 18896}], "file_name": "000000167902.png", "image_id": 167902}, {"segments_info": [{"id": 3682609, "category_id": 3, "iscrowd": 0, "bbox": [0, 190, 27, 39], "area": 799}, {"id": 7430226, "category_id": 3, "iscrowd": 0, "bbox": [132, 194, 24, 18], "area": 364}, {"id": 3815219, "category_id": 3, "iscrowd": 0, "bbox": [80, 198, 40, 19], "area": 570}, {"id": 4931127, "category_id": 3, "iscrowd": 0, "bbox": [12, 186, 49, 41], "area": 1322}, {"id": 3159663, "category_id": 11, "iscrowd": 0, "bbox": [185, 208, 14, 33], "area": 286}, {"id": 10546671, "category_id": 85, "iscrowd": 0, "bbox": [366, 59, 36, 39], "area": 1345}, {"id": 5551049, "category_id": 85, "iscrowd": 0, "bbox": [348, 60, 10, 42], "area": 331}, {"id": 3684152, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 255], "area": 99464}, {"id": 13686992, "category_id": 130, "iscrowd": 0, "bbox": [123, 29, 48, 81], "area": 539}, {"id": 4868173, "category_id": 149, "iscrowd": 0, "bbox": [0, 195, 640, 195], "area": 91230}, {"id": 6969165, "category_id": 184, "iscrowd": 0, "bbox": [60, 0, 230, 217], "area": 15537}, {"id": 12752767, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 237, 164], "area": 23986}, {"id": 5263701, "category_id": 191, "iscrowd": 0, "bbox": [138, 208, 502, 63], "area": 9538}], "file_name": "000000168330.png", "image_id": 168330}, {"segments_info": [{"id": 1907228, "category_id": 1, "iscrowd": 0, "bbox": [44, 228, 56, 158], "area": 4193}, {"id": 2566709, "category_id": 1, "iscrowd": 0, "bbox": [539, 173, 45, 134], "area": 3065}, {"id": 2762057, "category_id": 11, "iscrowd": 0, "bbox": [302, 307, 51, 87], "area": 3002}, {"id": 1578262, "category_id": 27, "iscrowd": 0, "bbox": [472, 282, 32, 31], "area": 778}, {"id": 2564125, "category_id": 27, "iscrowd": 0, "bbox": [556, 187, 25, 44], "area": 846}, {"id": 1512466, "category_id": 33, "iscrowd": 0, "bbox": [23, 324, 62, 78], "area": 3465}, {"id": 9276815, "category_id": 92, "iscrowd": 0, "bbox": [461, 0, 140, 96], "area": 9263}, {"id": 2041402, "category_id": 112, "iscrowd": 0, "bbox": [451, 106, 182, 208], "area": 27421}, {"id": 5590085, "category_id": 149, "iscrowd": 0, "bbox": [0, 405, 640, 75], "area": 42361}, {"id": 5132113, "category_id": 161, "iscrowd": 0, "bbox": [460, 305, 180, 52], "area": 7571}, {"id": 7302508, "category_id": 191, "iscrowd": 0, "bbox": [0, 347, 640, 85], "area": 18918}, {"id": 3621689, "category_id": 193, "iscrowd": 0, "bbox": [614, 383, 26, 16], "area": 252}, {"id": 1643536, "category_id": 197, "iscrowd": 0, "bbox": [0, 138, 45, 246], "area": 6581}, {"id": 6382955, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 401], "area": 175091}], "file_name": "000000168337.png", "image_id": 168337}, {"segments_info": [{"id": 4809563, "category_id": 86, "iscrowd": 0, "bbox": [130, 339, 64, 196], "area": 11038}, {"id": 5723470, "category_id": 119, "iscrowd": 0, "bbox": [27, 18, 315, 335], "area": 47526}, {"id": 3296388, "category_id": 189, "iscrowd": 0, "bbox": [12, 508, 404, 132], "area": 41881}, {"id": 11911617, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 425, 640], "area": 156864}], "file_name": "000000168458.png", "image_id": 168458}, {"segments_info": [{"id": 2040877, "category_id": 62, "iscrowd": 0, "bbox": [512, 223, 126, 219], "area": 17026}, {"id": 10065556, "category_id": 82, "iscrowd": 0, "bbox": [256, 111, 134, 335], "area": 38921}, {"id": 5800055, "category_id": 82, "iscrowd": 0, "bbox": [0, 120, 275, 360], "area": 92656}, {"id": 6188407, "category_id": 181, "iscrowd": 0, "bbox": [355, 0, 285, 258], "area": 65143}, {"id": 2765883, "category_id": 190, "iscrowd": 0, "bbox": [270, 343, 370, 137], "area": 27065}, {"id": 5658714, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 378], "area": 62522}], "file_name": "000000168593.png", "image_id": 168593}, {"segments_info": [{"id": 3098164, "category_id": 15, "iscrowd": 0, "bbox": [118, 268, 41, 44], "area": 795}, {"id": 5662063, "category_id": 128, "iscrowd": 0, "bbox": [231, 211, 391, 44], "area": 5240}, {"id": 3821415, "category_id": 151, "iscrowd": 0, "bbox": [391, 213, 39, 24], "area": 560}, {"id": 2440002, "category_id": 184, "iscrowd": 0, "bbox": [17, 108, 587, 148], "area": 21456}, {"id": 5069150, "category_id": 185, "iscrowd": 0, "bbox": [179, 225, 167, 34], "area": 3217}, {"id": 10786191, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 636, 263], "area": 113073}, {"id": 5003361, "category_id": 191, "iscrowd": 0, "bbox": [0, 258, 238, 213], "area": 28651}, {"id": 3367012, "category_id": 193, "iscrowd": 0, "bbox": [0, 198, 640, 282], "area": 104708}, {"id": 8753570, "category_id": 197, "iscrowd": 0, "bbox": [444, 231, 25, 22], "area": 328}], "file_name": "000000168619.png", "image_id": 168619}, {"segments_info": [{"id": 3882565, "category_id": 1, "iscrowd": 0, "bbox": [407, 391, 72, 230], "area": 7970}, {"id": 10000774, "category_id": 1, "iscrowd": 0, "bbox": [0, 27, 175, 605], "area": 79409}, {"id": 5855074, "category_id": 1, "iscrowd": 0, "bbox": [291, 463, 187, 177], "area": 20734}, {"id": 7624830, "category_id": 1, "iscrowd": 0, "bbox": [137, 122, 238, 511], "area": 83537}, {"id": 5459787, "category_id": 31, "iscrowd": 0, "bbox": [108, 391, 72, 118], "area": 5828}, {"id": 7169893, "category_id": 77, "iscrowd": 0, "bbox": [192, 195, 26, 31], "area": 353}, {"id": 7380133, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 479, 22], "area": 769}, {"id": 2312023, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 479, 442], "area": 91689}, {"id": 3298407, "category_id": 189, "iscrowd": 0, "bbox": [369, 286, 98, 61], "area": 3611}], "file_name": "000000168883.png", "image_id": 168883}, {"segments_info": [{"id": 7431784, "category_id": 1, "iscrowd": 0, "bbox": [0, 87, 321, 407], "area": 71787}, {"id": 5195844, "category_id": 75, "iscrowd": 0, "bbox": [95, 32, 89, 27], "area": 1763}, {"id": 4735298, "category_id": 77, "iscrowd": 0, "bbox": [108, 293, 132, 56], "area": 2880}, {"id": 3227476, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 327, 256], "area": 57309}, {"id": 1581617, "category_id": 190, "iscrowd": 0, "bbox": [0, 218, 375, 282], "area": 38672}, {"id": 2961717, "category_id": 199, "iscrowd": 0, "bbox": [316, 0, 59, 283], "area": 13243}], "file_name": "000000168974.png", "image_id": 168974}, {"segments_info": [{"id": 8483177, "category_id": 1, "iscrowd": 0, "bbox": [54, 76, 125, 130], "area": 8076}, {"id": 11320783, "category_id": 1, "iscrowd": 0, "bbox": [154, 111, 99, 99], "area": 5495}, {"id": 1443113, "category_id": 18, "iscrowd": 0, "bbox": [223, 293, 369, 302], "area": 87380}, {"id": 5464215, "category_id": 65, "iscrowd": 0, "bbox": [316, 329, 89, 58], "area": 1640}, {"id": 4538977, "category_id": 72, "iscrowd": 0, "bbox": [23, 30, 270, 235], "area": 45879}, {"id": 4283018, "category_id": 188, "iscrowd": 0, "bbox": [20, 34, 592, 427], "area": 88654}, {"id": 2036286, "category_id": 199, "iscrowd": 0, "bbox": [243, 0, 119, 420], "area": 19974}, {"id": 1971522, "category_id": 200, "iscrowd": 0, "bbox": [0, 454, 265, 158], "area": 27211}], "file_name": "000000169076.png", "image_id": 169076}, {"segments_info": [{"id": 9274502, "category_id": 1, "iscrowd": 0, "bbox": [580, 364, 14, 60], "area": 582}, {"id": 7759212, "category_id": 1, "iscrowd": 0, "bbox": [379, 366, 21, 53], "area": 656}, {"id": 7627349, "category_id": 1, "iscrowd": 0, "bbox": [312, 364, 27, 51], "area": 846}, {"id": 6903913, "category_id": 1, "iscrowd": 0, "bbox": [428, 366, 11, 51], "area": 144}, {"id": 7362423, "category_id": 1, "iscrowd": 0, "bbox": [291, 364, 23, 63], "area": 865}, {"id": 6574960, "category_id": 1, "iscrowd": 0, "bbox": [552, 361, 24, 81], "area": 833}, {"id": 5198179, "category_id": 1, "iscrowd": 0, "bbox": [594, 367, 37, 71], "area": 1440}, {"id": 8419724, "category_id": 1, "iscrowd": 0, "bbox": [551, 371, 5, 39], "area": 101}, {"id": 7694441, "category_id": 1, "iscrowd": 0, "bbox": [410, 365, 8, 54], "area": 243}, {"id": 6709350, "category_id": 1, "iscrowd": 0, "bbox": [480, 366, 20, 39], "area": 577}, {"id": 13088436, "category_id": 1, "iscrowd": 0, "bbox": [245, 350, 39, 107], "area": 1300}, {"id": 5854298, "category_id": 1, "iscrowd": 0, "bbox": [531, 363, 16, 69], "area": 829}, {"id": 6710142, "category_id": 1, "iscrowd": 0, "bbox": [553, 364, 9, 19], "area": 91}, {"id": 6777964, "category_id": 1, "iscrowd": 1, "bbox": [83, 165, 557, 293], "area": 6815}, {"id": 2696224, "category_id": 3, "iscrowd": 0, "bbox": [395, 365, 90, 43], "area": 2146}, {"id": 5132401, "category_id": 10, "iscrowd": 0, "bbox": [633, 310, 7, 26], "area": 156}, {"id": 7047039, "category_id": 64, "iscrowd": 0, "bbox": [117, 399, 104, 81], "area": 5754}, {"id": 7765366, "category_id": 64, "iscrowd": 0, "bbox": [301, 411, 63, 57], "area": 2647}, {"id": 8830127, "category_id": 64, "iscrowd": 0, "bbox": [1, 405, 74, 53], "area": 3036}, {"id": 8751999, "category_id": 64, "iscrowd": 0, "bbox": [446, 410, 46, 20], "area": 673}, {"id": 8026927, "category_id": 92, "iscrowd": 0, "bbox": [280, 85, 187, 313], "area": 43363}, {"id": 14211800, "category_id": 130, "iscrowd": 0, "bbox": [47, 178, 593, 132], "area": 8680}, {"id": 6198397, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 614, 480], "area": 81428}, {"id": 13292501, "category_id": 191, "iscrowd": 0, "bbox": [0, 392, 640, 88], "area": 20944}, {"id": 6118487, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 436], "area": 95121}], "file_name": "000000169169.png", "image_id": 169169}, {"segments_info": [{"id": 5134446, "category_id": 1, "iscrowd": 0, "bbox": [229, 0, 258, 236], "area": 22942}, {"id": 2895409, "category_id": 41, "iscrowd": 0, "bbox": [243, 180, 235, 145], "area": 14680}, {"id": 5790823, "category_id": 144, "iscrowd": 0, "bbox": [0, 354, 640, 126], "area": 62377}, {"id": 3750781, "category_id": 171, "iscrowd": 0, "bbox": [0, 50, 42, 40], "area": 656}, {"id": 3033672, "category_id": 184, "iscrowd": 0, "bbox": [53, 0, 587, 445], "area": 26597}, {"id": 9146255, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 440], "area": 45114}, {"id": 11775658, "category_id": 191, "iscrowd": 0, "bbox": [0, 68, 365, 412], "area": 56935}, {"id": 7111313, "category_id": 197, "iscrowd": 0, "bbox": [83, 0, 557, 377], "area": 76830}], "file_name": "000000169356.png", "image_id": 169356}, {"segments_info": [{"id": 6248530, "category_id": 1, "iscrowd": 0, "bbox": [405, 284, 74, 104], "area": 3198}, {"id": 5193013, "category_id": 1, "iscrowd": 0, "bbox": [340, 287, 13, 18], "area": 104}, {"id": 5852743, "category_id": 1, "iscrowd": 0, "bbox": [301, 320, 26, 25], "area": 202}, {"id": 4538170, "category_id": 1, "iscrowd": 0, "bbox": [171, 287, 74, 128], "area": 4253}, {"id": 3222831, "category_id": 1, "iscrowd": 0, "bbox": [156, 282, 13, 19], "area": 182}, {"id": 7302774, "category_id": 2, "iscrowd": 0, "bbox": [400, 329, 81, 98], "area": 3674}, {"id": 4998729, "category_id": 2, "iscrowd": 0, "bbox": [152, 344, 108, 96], "area": 4708}, {"id": 5326661, "category_id": 3, "iscrowd": 0, "bbox": [569, 294, 50, 46], "area": 1447}, {"id": 4997441, "category_id": 3, "iscrowd": 0, "bbox": [213, 304, 195, 124], "area": 14980}, {"id": 12367285, "category_id": 8, "iscrowd": 0, "bbox": [244, 262, 176, 81], "area": 6766}, {"id": 4275779, "category_id": 8, "iscrowd": 0, "bbox": [2, 264, 263, 161], "area": 20569}, {"id": 5393726, "category_id": 10, "iscrowd": 0, "bbox": [159, 127, 21, 33], "area": 433}, {"id": 6183493, "category_id": 10, "iscrowd": 0, "bbox": [200, 147, 10, 8], "area": 63}, {"id": 6709826, "category_id": 10, "iscrowd": 0, "bbox": [265, 248, 21, 29], "area": 432}, {"id": 4933431, "category_id": 10, "iscrowd": 0, "bbox": [236, 225, 22, 34], "area": 630}, {"id": 4471865, "category_id": 10, "iscrowd": 0, "bbox": [207, 203, 23, 61], "area": 1329}, {"id": 9671573, "category_id": 149, "iscrowd": 0, "bbox": [0, 322, 632, 158], "area": 32514}, {"id": 5003380, "category_id": 151, "iscrowd": 0, "bbox": [0, 126, 38, 31], "area": 832}, {"id": 5072485, "category_id": 184, "iscrowd": 0, "bbox": [0, 83, 189, 238], "area": 27412}, {"id": 11711930, "category_id": 191, "iscrowd": 0, "bbox": [79, 370, 561, 110], "area": 19972}, {"id": 5868932, "category_id": 193, "iscrowd": 0, "bbox": [467, 360, 111, 18], "area": 1184}, {"id": 9408919, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 422], "area": 151450}], "file_name": "000000169996.png", "image_id": 169996}, {"segments_info": [{"id": 10067378, "category_id": 1, "iscrowd": 0, "bbox": [14, 37, 348, 435], "area": 81807}, {"id": 1710983, "category_id": 32, "iscrowd": 0, "bbox": [98, 204, 90, 269], "area": 7659}, {"id": 2317755, "category_id": 63, "iscrowd": 0, "bbox": [307, 248, 300, 225], "area": 55772}, {"id": 3690046, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 640, 478], "area": 88647}, {"id": 661025, "category_id": 177, "iscrowd": 0, "bbox": [620, 0, 20, 154], "area": 2093}, {"id": 5991547, "category_id": 195, "iscrowd": 0, "bbox": [267, 29, 332, 274], "area": 66931}], "file_name": "000000170099.png", "image_id": 170099}, {"segments_info": [{"id": 4868693, "category_id": 1, "iscrowd": 0, "bbox": [113, 23, 17, 39], "area": 335}, {"id": 8678741, "category_id": 1, "iscrowd": 0, "bbox": [592, 169, 27, 65], "area": 1349}, {"id": 5726070, "category_id": 1, "iscrowd": 0, "bbox": [144, 64, 15, 30], "area": 254}, {"id": 3025711, "category_id": 1, "iscrowd": 0, "bbox": [123, 18, 24, 45], "area": 703}, {"id": 8945011, "category_id": 1, "iscrowd": 0, "bbox": [573, 167, 20, 71], "area": 648}, {"id": 5658732, "category_id": 1, "iscrowd": 0, "bbox": [121, 63, 39, 41], "area": 910}, {"id": 3289915, "category_id": 1, "iscrowd": 0, "bbox": [103, 63, 21, 43], "area": 587}, {"id": 6447992, "category_id": 1, "iscrowd": 0, "bbox": [113, 104, 42, 40], "area": 939}, {"id": 6120037, "category_id": 82, "iscrowd": 0, "bbox": [81, 0, 559, 474], "area": 249075}, {"id": 725777, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 148, 480], "area": 47806}, {"id": 9938346, "category_id": 195, "iscrowd": 0, "bbox": [221, 472, 190, 8], "area": 1339}], "file_name": "000000170116.png", "image_id": 170116}, {"segments_info": [{"id": 2304310, "category_id": 1, "iscrowd": 0, "bbox": [447, 9, 186, 511], "area": 63094}, {"id": 1973042, "category_id": 33, "iscrowd": 0, "bbox": [115, 478, 169, 45], "area": 4894}, {"id": 9277586, "category_id": 65, "iscrowd": 0, "bbox": [0, 170, 478, 344], "area": 107739}, {"id": 12367017, "category_id": 93, "iscrowd": 0, "bbox": [155, 473, 41, 13], "area": 251}, {"id": 10803448, "category_id": 130, "iscrowd": 0, "bbox": [602, 102, 19, 20], "area": 234}, {"id": 3359050, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 416], "area": 68145}, {"id": 2501421, "category_id": 200, "iscrowd": 0, "bbox": [379, 364, 261, 167], "area": 14757}], "file_name": "000000170191.png", "image_id": 170191}, {"segments_info": [{"id": 3162187, "category_id": 18, "iscrowd": 0, "bbox": [123, 144, 476, 335], "area": 85318}, {"id": 7099710, "category_id": 65, "iscrowd": 0, "bbox": [5, 128, 634, 368], "area": 123865}, {"id": 1711386, "category_id": 156, "iscrowd": 0, "bbox": [315, 0, 119, 136], "area": 9531}, {"id": 2502470, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 60, 42], "area": 2111}, {"id": 1322565, "category_id": 188, "iscrowd": 0, "bbox": [89, 0, 237, 151], "area": 30906}, {"id": 4015939, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 205], "area": 46603}], "file_name": "000000170278.png", "image_id": 170278}, {"segments_info": [{"id": 6909256, "category_id": 1, "iscrowd": 0, "bbox": [153, 27, 304, 449], "area": 56523}, {"id": 8709099, "category_id": 37, "iscrowd": 0, "bbox": [346, 34, 26, 28], "area": 577}, {"id": 6848132, "category_id": 43, "iscrowd": 0, "bbox": [65, 313, 119, 150], "area": 7488}, {"id": 12694803, "category_id": 62, "iscrowd": 0, "bbox": [490, 408, 109, 62], "area": 5765}, {"id": 600617, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 51], "area": 24459}, {"id": 6909219, "category_id": 199, "iscrowd": 0, "bbox": [0, 30, 640, 446], "area": 208482}], "file_name": "000000170474.png", "image_id": 170474}, {"segments_info": [{"id": 462112, "category_id": 3, "iscrowd": 0, "bbox": [284, 292, 22, 14], "area": 264}, {"id": 856357, "category_id": 3, "iscrowd": 0, "bbox": [122, 281, 26, 13], "area": 247}, {"id": 4609900, "category_id": 10, "iscrowd": 0, "bbox": [519, 287, 3, 5], "area": 14}, {"id": 203072, "category_id": 10, "iscrowd": 0, "bbox": [65, 186, 10, 21], "area": 139}, {"id": 733270, "category_id": 10, "iscrowd": 0, "bbox": [272, 228, 12, 16], "area": 141}, {"id": 1126230, "category_id": 10, "iscrowd": 0, "bbox": [240, 213, 9, 27], "area": 161}, {"id": 1912182, "category_id": 10, "iscrowd": 0, "bbox": [194, 219, 11, 17], "area": 159}, {"id": 203069, "category_id": 10, "iscrowd": 0, "bbox": [117, 166, 15, 35], "area": 428}, {"id": 1252183, "category_id": 10, "iscrowd": 0, "bbox": [487, 226, 9, 26], "area": 232}, {"id": 2434112, "category_id": 10, "iscrowd": 0, "bbox": [489, 283, 7, 13], "area": 76}, {"id": 203071, "category_id": 10, "iscrowd": 0, "bbox": [90, 177, 10, 25], "area": 202}, {"id": 2571115, "category_id": 130, "iscrowd": 0, "bbox": [0, 215, 488, 60], "area": 2209}, {"id": 1847906, "category_id": 149, "iscrowd": 0, "bbox": [0, 286, 640, 112], "area": 42177}, {"id": 7174752, "category_id": 186, "iscrowd": 0, "bbox": [317, 0, 285, 51], "area": 8065}, {"id": 394504, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 295], "area": 146628}, {"id": 5068624, "category_id": 191, "iscrowd": 0, "bbox": [0, 287, 640, 193], "area": 64973}, {"id": 1122353, "category_id": 193, "iscrowd": 0, "bbox": [360, 288, 280, 125], "area": 4577}, {"id": 1317423, "category_id": 197, "iscrowd": 0, "bbox": [0, 212, 640, 101], "area": 22123}], "file_name": "000000170545.png", "image_id": 170545}, {"segments_info": [{"id": 4747162, "category_id": 54, "iscrowd": 0, "bbox": [301, 202, 289, 229], "area": 45040}, {"id": 5454153, "category_id": 67, "iscrowd": 0, "bbox": [23, 153, 571, 436], "area": 79498}, {"id": 10993091, "category_id": 93, "iscrowd": 0, "bbox": [22, 20, 572, 224], "area": 84707}], "file_name": "000000170595.png", "image_id": 170595}, {"segments_info": [{"id": 2958115, "category_id": 1, "iscrowd": 0, "bbox": [24, 162, 200, 335], "area": 23033}, {"id": 5986145, "category_id": 1, "iscrowd": 0, "bbox": [264, 180, 141, 272], "area": 11398}, {"id": 13682882, "category_id": 42, "iscrowd": 0, "bbox": [206, 252, 209, 107], "area": 14729}, {"id": 14739435, "category_id": 42, "iscrowd": 0, "bbox": [29, 159, 113, 211], "area": 15666}, {"id": 12171176, "category_id": 155, "iscrowd": 0, "bbox": [16, 115, 407, 509], "area": 138019}, {"id": 14005412, "category_id": 187, "iscrowd": 0, "bbox": [17, 16, 406, 112], "area": 43150}], "file_name": "000000170613.png", "image_id": 170613}, {"segments_info": [{"id": 1715552, "category_id": 44, "iscrowd": 0, "bbox": [338, 58, 36, 94], "area": 2307}, {"id": 3488576, "category_id": 44, "iscrowd": 0, "bbox": [30, 239, 71, 102], "area": 4948}, {"id": 1711668, "category_id": 44, "iscrowd": 0, "bbox": [425, 73, 39, 112], "area": 2996}, {"id": 1778236, "category_id": 44, "iscrowd": 0, "bbox": [384, 65, 35, 105], "area": 2581}, {"id": 7501710, "category_id": 47, "iscrowd": 0, "bbox": [395, 231, 82, 149], "area": 8765}, {"id": 5987955, "category_id": 47, "iscrowd": 0, "bbox": [76, 209, 86, 143], "area": 8633}, {"id": 9409427, "category_id": 47, "iscrowd": 0, "bbox": [464, 78, 62, 118], "area": 5027}, {"id": 6125457, "category_id": 47, "iscrowd": 0, "bbox": [291, 66, 49, 98], "area": 3571}, {"id": 12365994, "category_id": 48, "iscrowd": 0, "bbox": [562, 202, 42, 87], "area": 669}, {"id": 11577250, "category_id": 48, "iscrowd": 0, "bbox": [547, 204, 70, 86], "area": 605}, {"id": 11183773, "category_id": 48, "iscrowd": 0, "bbox": [581, 268, 40, 38], "area": 306}, {"id": 12500152, "category_id": 48, "iscrowd": 0, "bbox": [584, 258, 48, 23], "area": 510}, {"id": 13288123, "category_id": 48, "iscrowd": 0, "bbox": [511, 199, 96, 109], "area": 535}, {"id": 4013124, "category_id": 51, "iscrowd": 0, "bbox": [181, 164, 114, 77], "area": 3874}, {"id": 3618635, "category_id": 51, "iscrowd": 0, "bbox": [65, 196, 135, 87], "area": 4382}, {"id": 8621227, "category_id": 51, "iscrowd": 0, "bbox": [375, 196, 210, 162], "area": 15463}, {"id": 4027519, "category_id": 51, "iscrowd": 0, "bbox": [289, 148, 125, 103], "area": 8688}, {"id": 2256872, "category_id": 57, "iscrowd": 0, "bbox": [210, 183, 72, 48], "area": 2529}, {"id": 3693184, "category_id": 62, "iscrowd": 0, "bbox": [519, 39, 121, 82], "area": 3924}, {"id": 3565451, "category_id": 62, "iscrowd": 0, "bbox": [52, 1, 167, 120], "area": 8692}, {"id": 7305861, "category_id": 67, "iscrowd": 0, "bbox": [0, 58, 640, 363], "area": 122068}, {"id": 3489591, "category_id": 125, "iscrowd": 0, "bbox": [0, 0, 640, 221], "area": 37523}, {"id": 1648424, "category_id": 184, "iscrowd": 0, "bbox": [254, 0, 386, 37], "area": 8926}, {"id": 8423568, "category_id": 189, "iscrowd": 0, "bbox": [0, 235, 640, 191], "area": 3460}, {"id": 3620672, "category_id": 193, "iscrowd": 0, "bbox": [241, 28, 399, 112], "area": 10844}], "file_name": "000000170670.png", "image_id": 170670}, {"segments_info": [{"id": 4344151, "category_id": 22, "iscrowd": 0, "bbox": [214, 38, 272, 475], "area": 62004}, {"id": 4672086, "category_id": 22, "iscrowd": 0, "bbox": [467, 52, 173, 456], "area": 51897}, {"id": 4606033, "category_id": 22, "iscrowd": 0, "bbox": [0, 73, 234, 356], "area": 51828}, {"id": 11317677, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 186], "area": 13029}, {"id": 4473187, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 455], "area": 32859}, {"id": 6708854, "category_id": 186, "iscrowd": 0, "bbox": [196, 0, 416, 111], "area": 17176}, {"id": 16382457, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 290, 92], "area": 12947}, {"id": 9541023, "category_id": 190, "iscrowd": 0, "bbox": [0, 275, 640, 228], "area": 44339}, {"id": 13093331, "category_id": 191, "iscrowd": 0, "bbox": [122, 324, 42, 27], "area": 810}, {"id": 6976645, "category_id": 194, "iscrowd": 0, "bbox": [0, 443, 640, 71], "area": 29324}], "file_name": "000000170739.png", "image_id": 170739}, {"segments_info": [{"id": 5335417, "category_id": 18, "iscrowd": 0, "bbox": [271, 81, 367, 393], "area": 57977}, {"id": 10000277, "category_id": 70, "iscrowd": 0, "bbox": [66, 312, 342, 163], "area": 45077}, {"id": 10001046, "category_id": 109, "iscrowd": 0, "bbox": [285, 0, 355, 54], "area": 8390}, {"id": 8947578, "category_id": 168, "iscrowd": 0, "bbox": [0, 108, 33, 73], "area": 1541}, {"id": 10067355, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 440], "area": 151331}, {"id": 3094587, "category_id": 190, "iscrowd": 0, "bbox": [395, 436, 245, 44], "area": 1675}, {"id": 10527393, "category_id": 195, "iscrowd": 0, "bbox": [271, 73, 108, 86], "area": 4392}], "file_name": "000000170893.png", "image_id": 170893}, {"segments_info": [{"id": 2236967, "category_id": 1, "iscrowd": 0, "bbox": [408, 6, 230, 415], "area": 51701}, {"id": 7885898, "category_id": 32, "iscrowd": 0, "bbox": [467, 121, 19, 95], "area": 780}, {"id": 10993351, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 219440}], "file_name": "000000170955.png", "image_id": 170955}, {"segments_info": [{"id": 6311508, "category_id": 11, "iscrowd": 0, "bbox": [174, 251, 296, 382], "area": 67850}, {"id": 3217425, "category_id": 112, "iscrowd": 0, "bbox": [173, 14, 245, 460], "area": 56098}, {"id": 12960970, "category_id": 149, "iscrowd": 0, "bbox": [0, 464, 480, 176], "area": 32556}, {"id": 4671103, "category_id": 171, "iscrowd": 0, "bbox": [10, 0, 228, 396], "area": 61237}, {"id": 8088947, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 480, 565], "area": 87854}], "file_name": "000000171050.png", "image_id": 171050}, {"segments_info": [{"id": 1904666, "category_id": 1, "iscrowd": 0, "bbox": [313, 144, 82, 135], "area": 5263}, {"id": 1837855, "category_id": 1, "iscrowd": 0, "bbox": [116, 141, 84, 126], "area": 5718}, {"id": 5186072, "category_id": 1, "iscrowd": 0, "bbox": [507, 180, 133, 170], "area": 7785}, {"id": 3152933, "category_id": 1, "iscrowd": 0, "bbox": [203, 147, 72, 97], "area": 3767}, {"id": 1969690, "category_id": 1, "iscrowd": 0, "bbox": [53, 144, 91, 195], "area": 7421}, {"id": 1510161, "category_id": 1, "iscrowd": 0, "bbox": [270, 138, 70, 122], "area": 5014}, {"id": 13142631, "category_id": 1, "iscrowd": 0, "bbox": [0, 347, 341, 128], "area": 18241}, {"id": 4203302, "category_id": 1, "iscrowd": 0, "bbox": [492, 141, 101, 190], "area": 9630}, {"id": 7551273, "category_id": 1, "iscrowd": 0, "bbox": [0, 261, 301, 209], "area": 19346}, {"id": 1903633, "category_id": 1, "iscrowd": 0, "bbox": [376, 127, 121, 177], "area": 10153}, {"id": 2233632, "category_id": 44, "iscrowd": 0, "bbox": [271, 205, 16, 60], "area": 539}, {"id": 1575712, "category_id": 44, "iscrowd": 0, "bbox": [212, 212, 16, 65], "area": 543}, {"id": 3876391, "category_id": 44, "iscrowd": 0, "bbox": [198, 216, 22, 75], "area": 1143}, {"id": 2364453, "category_id": 44, "iscrowd": 0, "bbox": [358, 225, 22, 44], "area": 522}, {"id": 4731442, "category_id": 44, "iscrowd": 0, "bbox": [413, 229, 39, 141], "area": 3526}, {"id": 1707281, "category_id": 44, "iscrowd": 0, "bbox": [172, 201, 18, 74], "area": 1000}, {"id": 5137805, "category_id": 44, "iscrowd": 0, "bbox": [310, 247, 28, 98], "area": 1753}, {"id": 9465719, "category_id": 44, "iscrowd": 0, "bbox": [342, 269, 53, 99], "area": 4291}, {"id": 6578047, "category_id": 44, "iscrowd": 0, "bbox": [335, 252, 18, 99], "area": 747}, {"id": 1313309, "category_id": 46, "iscrowd": 0, "bbox": [162, 200, 10, 11], "area": 93}, {"id": 1181196, "category_id": 46, "iscrowd": 0, "bbox": [286, 175, 9, 12], "area": 61}, {"id": 2758434, "category_id": 46, "iscrowd": 0, "bbox": [45, 225, 33, 82], "area": 1197}, {"id": 5518915, "category_id": 46, "iscrowd": 0, "bbox": [233, 260, 11, 31], "area": 286}, {"id": 3089470, "category_id": 46, "iscrowd": 0, "bbox": [401, 139, 15, 34], "area": 256}, {"id": 11040885, "category_id": 46, "iscrowd": 0, "bbox": [443, 331, 31, 59], "area": 1226}, {"id": 2825254, "category_id": 46, "iscrowd": 0, "bbox": [40, 188, 10, 19], "area": 141}, {"id": 6239544, "category_id": 46, "iscrowd": 0, "bbox": [1, 282, 12, 64], "area": 493}, {"id": 2823965, "category_id": 46, "iscrowd": 0, "bbox": [589, 197, 18, 40], "area": 279}, {"id": 4269611, "category_id": 46, "iscrowd": 0, "bbox": [449, 263, 27, 68], "area": 1139}, {"id": 2890023, "category_id": 46, "iscrowd": 0, "bbox": [2, 157, 24, 40], "area": 712}, {"id": 2824752, "category_id": 46, "iscrowd": 0, "bbox": [345, 166, 16, 14], "area": 98}, {"id": 4269618, "category_id": 46, "iscrowd": 0, "bbox": [544, 185, 10, 14], "area": 113}, {"id": 2627360, "category_id": 46, "iscrowd": 1, "bbox": [251, 231, 13, 32], "area": 312}, {"id": 5189436, "category_id": 47, "iscrowd": 0, "bbox": [232, 258, 28, 34], "area": 229}, {"id": 8476509, "category_id": 47, "iscrowd": 0, "bbox": [290, 279, 17, 34], "area": 495}, {"id": 7555417, "category_id": 49, "iscrowd": 0, "bbox": [257, 322, 44, 9], "area": 193}, {"id": 2167064, "category_id": 62, "iscrowd": 0, "bbox": [577, 293, 63, 92], "area": 3416}, {"id": 14792098, "category_id": 67, "iscrowd": 0, "bbox": [139, 262, 496, 212], "area": 50161}, {"id": 1183263, "category_id": 112, "iscrowd": 0, "bbox": [444, 37, 44, 126], "area": 3616}, {"id": 5663653, "category_id": 130, "iscrowd": 0, "bbox": [69, 53, 46, 44], "area": 1532}, {"id": 2499652, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 525, 237], "area": 81994}, {"id": 1248804, "category_id": 186, "iscrowd": 0, "bbox": [522, 0, 118, 20], "area": 988}, {"id": 2035737, "category_id": 190, "iscrowd": 0, "bbox": [126, 300, 365, 40], "area": 648}, {"id": 4468812, "category_id": 199, "iscrowd": 0, "bbox": [446, 0, 194, 182], "area": 12064}, {"id": 3614520, "category_id": 200, "iscrowd": 0, "bbox": [89, 283, 234, 187], "area": 872}], "file_name": "000000171190.png", "image_id": 171190}, {"segments_info": [{"id": 6913153, "category_id": 6, "iscrowd": 0, "bbox": [469, 80, 171, 330], "area": 45557}, {"id": 6910331, "category_id": 6, "iscrowd": 0, "bbox": [1, 51, 169, 383], "area": 46344}, {"id": 10853793, "category_id": 6, "iscrowd": 0, "bbox": [159, 64, 371, 379], "area": 110898}, {"id": 6377042, "category_id": 149, "iscrowd": 0, "bbox": [0, 339, 640, 141], "area": 39695}, {"id": 7633261, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 520, 360], "area": 45532}, {"id": 15256761, "category_id": 197, "iscrowd": 0, "bbox": [413, 0, 227, 101], "area": 15914}], "file_name": "000000171298.png", "image_id": 171298}, {"segments_info": [{"id": 5594480, "category_id": 1, "iscrowd": 0, "bbox": [114, 152, 47, 132], "area": 1547}, {"id": 3814235, "category_id": 1, "iscrowd": 0, "bbox": [173, 185, 39, 93], "area": 1678}, {"id": 7693922, "category_id": 1, "iscrowd": 0, "bbox": [229, 187, 20, 30], "area": 333}, {"id": 7830413, "category_id": 1, "iscrowd": 0, "bbox": [390, 153, 33, 130], "area": 2506}, {"id": 8947347, "category_id": 1, "iscrowd": 0, "bbox": [363, 145, 35, 137], "area": 2531}, {"id": 5921635, "category_id": 1, "iscrowd": 0, "bbox": [10, 149, 32, 135], "area": 2234}, {"id": 8217426, "category_id": 1, "iscrowd": 0, "bbox": [255, 181, 17, 39], "area": 355}, {"id": 6512224, "category_id": 1, "iscrowd": 0, "bbox": [441, 151, 46, 132], "area": 2898}, {"id": 5130559, "category_id": 1, "iscrowd": 0, "bbox": [106, 13, 199, 245], "area": 19903}, {"id": 6578280, "category_id": 1, "iscrowd": 0, "bbox": [487, 126, 70, 184], "area": 6538}, {"id": 6119012, "category_id": 3, "iscrowd": 0, "bbox": [599, 194, 14, 13], "area": 148}, {"id": 4153730, "category_id": 3, "iscrowd": 0, "bbox": [262, 184, 180, 65], "area": 6245}, {"id": 6260905, "category_id": 3, "iscrowd": 0, "bbox": [0, 175, 275, 102], "area": 10877}, {"id": 4148842, "category_id": 3, "iscrowd": 0, "bbox": [543, 183, 36, 27], "area": 816}, {"id": 3486264, "category_id": 3, "iscrowd": 0, "bbox": [618, 194, 20, 18], "area": 299}, {"id": 6051927, "category_id": 3, "iscrowd": 0, "bbox": [577, 191, 22, 23], "area": 380}, {"id": 10665338, "category_id": 10, "iscrowd": 0, "bbox": [540, 152, 4, 5], "area": 16}, {"id": 3165292, "category_id": 10, "iscrowd": 0, "bbox": [114, 73, 13, 21], "area": 176}, {"id": 6904640, "category_id": 10, "iscrowd": 0, "bbox": [553, 162, 5, 9], "area": 36}, {"id": 2568743, "category_id": 10, "iscrowd": 0, "bbox": [623, 179, 5, 7], "area": 21}, {"id": 9681966, "category_id": 10, "iscrowd": 0, "bbox": [618, 179, 3, 3], "area": 7}, {"id": 4154967, "category_id": 10, "iscrowd": 0, "bbox": [598, 152, 5, 10], "area": 39}, {"id": 4546620, "category_id": 10, "iscrowd": 0, "bbox": [596, 163, 5, 10], "area": 41}, {"id": 6059830, "category_id": 10, "iscrowd": 0, "bbox": [578, 175, 5, 5], "area": 20}, {"id": 6057019, "category_id": 10, "iscrowd": 0, "bbox": [581, 181, 4, 5], "area": 18}, {"id": 3164702, "category_id": 10, "iscrowd": 0, "bbox": [613, 183, 5, 5], "area": 17}, {"id": 11124550, "category_id": 10, "iscrowd": 0, "bbox": [560, 167, 4, 3], "area": 11}, {"id": 7969973, "category_id": 10, "iscrowd": 0, "bbox": [505, 67, 35, 32], "area": 935}, {"id": 7508394, "category_id": 10, "iscrowd": 1, "bbox": [103, 68, 465, 104], "area": 848}, {"id": 1776932, "category_id": 27, "iscrowd": 0, "bbox": [33, 178, 16, 30], "area": 286}, {"id": 3223596, "category_id": 27, "iscrowd": 0, "bbox": [378, 182, 22, 22], "area": 90}, {"id": 5132636, "category_id": 27, "iscrowd": 0, "bbox": [140, 171, 10, 8], "area": 34}, {"id": 10135227, "category_id": 28, "iscrowd": 0, "bbox": [290, 149, 34, 20], "area": 359}, {"id": 5198677, "category_id": 28, "iscrowd": 0, "bbox": [250, 148, 52, 20], "area": 703}, {"id": 2565411, "category_id": 31, "iscrowd": 0, "bbox": [454, 168, 28, 55], "area": 736}, {"id": 5131081, "category_id": 41, "iscrowd": 0, "bbox": [134, 223, 118, 145], "area": 5507}, {"id": 2831433, "category_id": 77, "iscrowd": 0, "bbox": [528, 140, 9, 9], "area": 5}, {"id": 7171437, "category_id": 149, "iscrowd": 0, "bbox": [55, 205, 585, 88], "area": 10266}, {"id": 4803396, "category_id": 180, "iscrowd": 0, "bbox": [0, 53, 21, 31], "area": 481}, {"id": 3950915, "category_id": 184, "iscrowd": 0, "bbox": [576, 148, 55, 48], "area": 1524}, {"id": 9013126, "category_id": 191, "iscrowd": 0, "bbox": [0, 253, 640, 173], "area": 90744}, {"id": 6908007, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 282], "area": 98005}], "file_name": "000000171382.png", "image_id": 171382}, {"segments_info": [{"id": 6444891, "category_id": 1, "iscrowd": 0, "bbox": [157, 242, 35, 57], "area": 900}, {"id": 10328986, "category_id": 9, "iscrowd": 0, "bbox": [57, 251, 330, 75], "area": 11407}, {"id": 11248546, "category_id": 9, "iscrowd": 0, "bbox": [501, 49, 77, 201], "area": 3412}, {"id": 10258814, "category_id": 9, "iscrowd": 0, "bbox": [345, 83, 58, 160], "area": 1507}, {"id": 4606042, "category_id": 18, "iscrowd": 0, "bbox": [328, 263, 30, 21], "area": 361}, {"id": 10461347, "category_id": 95, "iscrowd": 0, "bbox": [0, 369, 493, 74], "area": 25990}, {"id": 13616575, "category_id": 155, "iscrowd": 0, "bbox": [0, 230, 640, 186], "area": 72017}, {"id": 6457730, "category_id": 184, "iscrowd": 0, "bbox": [0, 129, 640, 314], "area": 64547}, {"id": 15847880, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 190], "area": 99365}, {"id": 6255460, "category_id": 197, "iscrowd": 0, "bbox": [0, 207, 36, 163], "area": 3466}], "file_name": "000000171611.png", "image_id": 171611}, {"segments_info": [{"id": 6646741, "category_id": 47, "iscrowd": 0, "bbox": [516, 256, 31, 36], "area": 990}, {"id": 3022114, "category_id": 63, "iscrowd": 0, "bbox": [0, 249, 434, 231], "area": 75963}, {"id": 8687511, "category_id": 85, "iscrowd": 0, "bbox": [162, 5, 22, 36], "area": 625}, {"id": 10401980, "category_id": 130, "iscrowd": 0, "bbox": [304, 106, 84, 169], "area": 6562}, {"id": 8093829, "category_id": 133, "iscrowd": 0, "bbox": [65, 55, 117, 171], "area": 11151}, {"id": 4933203, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 266, 266], "area": 51077}, {"id": 9474970, "category_id": 186, "iscrowd": 0, "bbox": [255, 0, 385, 109], "area": 2717}, {"id": 3945291, "category_id": 189, "iscrowd": 0, "bbox": [311, 253, 329, 227], "area": 28552}, {"id": 4142401, "category_id": 190, "iscrowd": 0, "bbox": [258, 264, 382, 216], "area": 11210}, {"id": 13620185, "category_id": 195, "iscrowd": 0, "bbox": [361, 0, 279, 354], "area": 20743}, {"id": 10135470, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 429], "area": 52041}, {"id": 3548729, "category_id": 200, "iscrowd": 0, "bbox": [376, 420, 264, 60], "area": 8565}], "file_name": "000000171740.png", "image_id": 171740}, {"segments_info": [{"id": 5268354, "category_id": 1, "iscrowd": 0, "bbox": [403, 141, 135, 339], "area": 10894}, {"id": 5599374, "category_id": 1, "iscrowd": 0, "bbox": [415, 159, 121, 321], "area": 21394}, {"id": 1385540, "category_id": 1, "iscrowd": 0, "bbox": [55, 129, 258, 351], "area": 45536}, {"id": 922151, "category_id": 62, "iscrowd": 0, "bbox": [39, 315, 36, 39], "area": 1309}, {"id": 988449, "category_id": 62, "iscrowd": 0, "bbox": [4, 354, 123, 90], "area": 6087}, {"id": 3231859, "category_id": 62, "iscrowd": 0, "bbox": [282, 309, 82, 139], "area": 6320}, {"id": 10659247, "category_id": 63, "iscrowd": 0, "bbox": [523, 346, 112, 134], "area": 12050}, {"id": 2969986, "category_id": 75, "iscrowd": 0, "bbox": [244, 162, 25, 19], "area": 125}, {"id": 3167351, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 183], "area": 96151}, {"id": 2572125, "category_id": 190, "iscrowd": 0, "bbox": [15, 408, 426, 72], "area": 15282}, {"id": 3757689, "category_id": 199, "iscrowd": 0, "bbox": [0, 124, 640, 356], "area": 68448}], "file_name": "000000171757.png", "image_id": 171757}, {"segments_info": [{"id": 6776696, "category_id": 1, "iscrowd": 0, "bbox": [65, 109, 362, 517], "area": 45745}, {"id": 4182214, "category_id": 37, "iscrowd": 0, "bbox": [403, 348, 23, 26], "area": 464}, {"id": 7769264, "category_id": 43, "iscrowd": 0, "bbox": [269, 363, 56, 160], "area": 5134}, {"id": 6917309, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 212500}, {"id": 2829356, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 138, 85], "area": 7523}], "file_name": "000000171788.png", "image_id": 171788}, {"segments_info": [{"id": 400188, "category_id": 81, "iscrowd": 0, "bbox": [350, 223, 100, 97], "area": 6771}, {"id": 8365482, "category_id": 81, "iscrowd": 0, "bbox": [522, 112, 64, 21], "area": 667}, {"id": 3559001, "category_id": 81, "iscrowd": 0, "bbox": [532, 107, 50, 16], "area": 307}, {"id": 4940909, "category_id": 81, "iscrowd": 0, "bbox": [459, 124, 127, 78], "area": 4138}, {"id": 3882050, "category_id": 133, "iscrowd": 0, "bbox": [450, 0, 59, 48], "area": 1945}, {"id": 3816809, "category_id": 189, "iscrowd": 0, "bbox": [0, 106, 618, 254], "area": 87216}, {"id": 3885912, "category_id": 190, "iscrowd": 0, "bbox": [553, 250, 87, 110], "area": 7599}, {"id": 5730430, "category_id": 195, "iscrowd": 0, "bbox": [584, 23, 22, 23], "area": 324}, {"id": 1905186, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 316], "area": 106179}], "file_name": "000000172083.png", "image_id": 172083}, {"segments_info": [{"id": 7235686, "category_id": 3, "iscrowd": 0, "bbox": [61, 1, 579, 311], "area": 116170}, {"id": 9208705, "category_id": 3, "iscrowd": 0, "bbox": [472, 80, 166, 304], "area": 35998}, {"id": 4075050, "category_id": 3, "iscrowd": 0, "bbox": [1, 2, 268, 209], "area": 22408}, {"id": 6843764, "category_id": 17, "iscrowd": 0, "bbox": [244, 219, 177, 115], "area": 9772}, {"id": 6120041, "category_id": 149, "iscrowd": 0, "bbox": [0, 283, 594, 197], "area": 23438}, {"id": 3892317, "category_id": 184, "iscrowd": 0, "bbox": [339, 302, 19, 24], "area": 282}, {"id": 4685176, "category_id": 193, "iscrowd": 0, "bbox": [0, 199, 640, 281], "area": 94909}], "file_name": "000000172330.png", "image_id": 172330}, {"segments_info": [{"id": 8167872, "category_id": 59, "iscrowd": 0, "bbox": [137, 124, 379, 112], "area": 36297}, {"id": 2435374, "category_id": 79, "iscrowd": 0, "bbox": [2, 2, 636, 344], "area": 158580}, {"id": 7239562, "category_id": 190, "iscrowd": 0, "bbox": [0, 176, 74, 175], "area": 8626}, {"id": 6516094, "category_id": 199, "iscrowd": 0, "bbox": [0, 61, 28, 125], "area": 1643}], "file_name": "000000172396.png", "image_id": 172396}, {"segments_info": [{"id": 3164498, "category_id": 19, "iscrowd": 0, "bbox": [398, 322, 20, 11], "area": 114}, {"id": 593428, "category_id": 19, "iscrowd": 0, "bbox": [220, 314, 5, 5], "area": 13}, {"id": 3298419, "category_id": 19, "iscrowd": 0, "bbox": [233, 310, 12, 6], "area": 29}, {"id": 2506320, "category_id": 19, "iscrowd": 0, "bbox": [256, 307, 9, 6], "area": 33}, {"id": 3953497, "category_id": 19, "iscrowd": 0, "bbox": [327, 320, 15, 7], "area": 52}, {"id": 2046541, "category_id": 19, "iscrowd": 0, "bbox": [445, 323, 18, 11], "area": 107}, {"id": 3165525, "category_id": 19, "iscrowd": 0, "bbox": [422, 323, 19, 11], "area": 115}, {"id": 2176557, "category_id": 178, "iscrowd": 0, "bbox": [61, 386, 88, 35], "area": 1426}, {"id": 1658439, "category_id": 184, "iscrowd": 0, "bbox": [0, 302, 400, 178], "area": 23329}, {"id": 14989975, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 237], "area": 104347}, {"id": 3501411, "category_id": 192, "iscrowd": 0, "bbox": [0, 71, 640, 409], "area": 177572}], "file_name": "000000172547.png", "image_id": 172547}, {"segments_info": [{"id": 8284784, "category_id": 1, "iscrowd": 0, "bbox": [264, 2, 376, 78], "area": 15591}, {"id": 5269871, "category_id": 46, "iscrowd": 0, "bbox": [491, 1, 134, 206], "area": 10953}, {"id": 9143672, "category_id": 47, "iscrowd": 0, "bbox": [177, 1, 89, 131], "area": 10660}, {"id": 10132898, "category_id": 48, "iscrowd": 0, "bbox": [369, 64, 208, 52], "area": 1210}, {"id": 7953247, "category_id": 49, "iscrowd": 0, "bbox": [268, 84, 90, 61], "area": 1011}, {"id": 6648702, "category_id": 49, "iscrowd": 0, "bbox": [309, 32, 125, 173], "area": 7411}, {"id": 4681887, "category_id": 59, "iscrowd": 0, "bbox": [491, 55, 127, 61], "area": 4072}, {"id": 4751546, "category_id": 59, "iscrowd": 0, "bbox": [104, 118, 421, 236], "area": 68033}, {"id": 4277064, "category_id": 189, "iscrowd": 0, "bbox": [90, 62, 550, 299], "area": 50157}, {"id": 11112821, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 240, 361], "area": 44630}], "file_name": "000000172571.png", "image_id": 172571}, {"segments_info": [{"id": 1315600, "category_id": 27, "iscrowd": 0, "bbox": [219, 194, 102, 92], "area": 6489}, {"id": 15639117, "category_id": 44, "iscrowd": 0, "bbox": [603, 104, 9, 23], "area": 123}, {"id": 14604765, "category_id": 44, "iscrowd": 0, "bbox": [209, 11, 9, 12], "area": 52}, {"id": 8343127, "category_id": 62, "iscrowd": 0, "bbox": [21, 34, 212, 326], "area": 32636}, {"id": 3948347, "category_id": 62, "iscrowd": 0, "bbox": [0, 1, 43, 48], "area": 837}, {"id": 13151340, "category_id": 72, "iscrowd": 0, "bbox": [350, 20, 116, 142], "area": 11483}, {"id": 10263442, "category_id": 72, "iscrowd": 0, "bbox": [480, 2, 78, 71], "area": 3837}, {"id": 4540746, "category_id": 72, "iscrowd": 0, "bbox": [573, 6, 67, 114], "area": 4734}, {"id": 12105644, "category_id": 73, "iscrowd": 0, "bbox": [229, 32, 107, 112], "area": 8424}, {"id": 6183765, "category_id": 74, "iscrowd": 0, "bbox": [340, 192, 37, 28], "area": 593}, {"id": 6646116, "category_id": 76, "iscrowd": 0, "bbox": [254, 142, 109, 65], "area": 3524}, {"id": 4473921, "category_id": 76, "iscrowd": 0, "bbox": [55, 22, 26, 3], "area": 73}, {"id": 10984080, "category_id": 77, "iscrowd": 0, "bbox": [209, 115, 17, 8], "area": 76}, {"id": 8825772, "category_id": 84, "iscrowd": 0, "bbox": [549, 118, 56, 29], "area": 1023}, {"id": 7763319, "category_id": 189, "iscrowd": 0, "bbox": [56, 0, 584, 360], "area": 60874}, {"id": 7567992, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 63872}, {"id": 13998514, "category_id": 199, "iscrowd": 0, "bbox": [192, 0, 448, 65], "area": 8492}, {"id": 6510578, "category_id": 200, "iscrowd": 0, "bbox": [10, 106, 190, 138], "area": 4544}], "file_name": "000000172595.png", "image_id": 172595}, {"segments_info": [{"id": 9805758, "category_id": 1, "iscrowd": 0, "bbox": [116, 0, 248, 400], "area": 48540}, {"id": 5658705, "category_id": 33, "iscrowd": 0, "bbox": [4, 84, 179, 237], "area": 12278}, {"id": 11185604, "category_id": 84, "iscrowd": 0, "bbox": [86, 201, 69, 46], "area": 605}, {"id": 7177098, "category_id": 84, "iscrowd": 0, "bbox": [0, 250, 21, 30], "area": 396}, {"id": 11251914, "category_id": 84, "iscrowd": 0, "bbox": [70, 190, 84, 42], "area": 870}, {"id": 8689862, "category_id": 84, "iscrowd": 0, "bbox": [45, 172, 110, 47], "area": 1012}, {"id": 14606568, "category_id": 84, "iscrowd": 0, "bbox": [0, 208, 73, 83], "area": 2236}, {"id": 10400226, "category_id": 84, "iscrowd": 0, "bbox": [209, 51, 103, 44], "area": 1893}, {"id": 15658994, "category_id": 84, "iscrowd": 0, "bbox": [1, 155, 57, 75], "area": 2338}, {"id": 12830675, "category_id": 84, "iscrowd": 0, "bbox": [30, 192, 79, 81], "area": 3398}, {"id": 10004683, "category_id": 84, "iscrowd": 0, "bbox": [51, 172, 91, 39], "area": 634}, {"id": 14079454, "category_id": 84, "iscrowd": 0, "bbox": [41, 124, 107, 76], "area": 4567}, {"id": 6580318, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 98575}], "file_name": "000000172617.png", "image_id": 172617}, {"segments_info": [{"id": 4289890, "category_id": 1, "iscrowd": 0, "bbox": [332, 203, 74, 191], "area": 8222}, {"id": 3571308, "category_id": 1, "iscrowd": 0, "bbox": [81, 215, 31, 62], "area": 967}, {"id": 5064517, "category_id": 3, "iscrowd": 0, "bbox": [1, 217, 24, 37], "area": 742}, {"id": 4802119, "category_id": 8, "iscrowd": 0, "bbox": [194, 130, 445, 256], "area": 49854}, {"id": 8092282, "category_id": 112, "iscrowd": 0, "bbox": [123, 190, 90, 83], "area": 4280}, {"id": 6316645, "category_id": 149, "iscrowd": 0, "bbox": [0, 244, 640, 236], "area": 96609}, {"id": 16575697, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 250, 114], "area": 14620}, {"id": 8094087, "category_id": 191, "iscrowd": 0, "bbox": [16, 235, 624, 137], "area": 5438}, {"id": 3884878, "category_id": 194, "iscrowd": 0, "bbox": [434, 247, 49, 25], "area": 733}, {"id": 7763833, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 310], "area": 124629}], "file_name": "000000172648.png", "image_id": 172648}, {"segments_info": [{"id": 5000070, "category_id": 1, "iscrowd": 0, "bbox": [424, 47, 150, 114], "area": 6967}, {"id": 3683914, "category_id": 41, "iscrowd": 0, "bbox": [411, 113, 33, 48], "area": 559}, {"id": 16443094, "category_id": 187, "iscrowd": 0, "bbox": [616, 0, 24, 33], "area": 669}, {"id": 8222073, "category_id": 191, "iscrowd": 0, "bbox": [266, 233, 374, 194], "area": 35122}, {"id": 14210001, "category_id": 197, "iscrowd": 0, "bbox": [605, 0, 35, 251], "area": 7504}, {"id": 6249417, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 617, 427], "area": 222237}], "file_name": "000000172649.png", "image_id": 172649}, {"segments_info": [{"id": 9671857, "category_id": 13, "iscrowd": 0, "bbox": [132, 195, 146, 200], "area": 21400}, {"id": 4082523, "category_id": 184, "iscrowd": 0, "bbox": [0, 337, 640, 143], "area": 57292}, {"id": 10517096, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 402], "area": 208136}, {"id": 5720651, "category_id": 192, "iscrowd": 0, "bbox": [0, 339, 640, 87], "area": 7591}, {"id": 5001337, "category_id": 198, "iscrowd": 0, "bbox": [378, 357, 133, 41], "area": 1617}], "file_name": "000000172856.png", "image_id": 172856}, {"segments_info": [{"id": 1716278, "category_id": 1, "iscrowd": 0, "bbox": [106, 68, 401, 407], "area": 92644}, {"id": 1717323, "category_id": 32, "iscrowd": 0, "bbox": [296, 189, 27, 110], "area": 2157}, {"id": 2121106, "category_id": 44, "iscrowd": 0, "bbox": [602, 102, 12, 50], "area": 393}, {"id": 4225932, "category_id": 44, "iscrowd": 0, "bbox": [612, 94, 28, 57], "area": 1238}, {"id": 1784902, "category_id": 63, "iscrowd": 0, "bbox": [264, 296, 298, 184], "area": 18285}, {"id": 1589586, "category_id": 63, "iscrowd": 0, "bbox": [0, 288, 148, 186], "area": 24949}, {"id": 1778822, "category_id": 85, "iscrowd": 0, "bbox": [579, 144, 61, 28], "area": 736}, {"id": 1919316, "category_id": 85, "iscrowd": 0, "bbox": [372, 290, 18, 14], "area": 168}, {"id": 13755900, "category_id": 130, "iscrowd": 0, "bbox": [446, 83, 150, 122], "area": 12097}, {"id": 3370362, "category_id": 188, "iscrowd": 0, "bbox": [413, 144, 227, 336], "area": 36276}, {"id": 4029323, "category_id": 195, "iscrowd": 0, "bbox": [69, 0, 219, 180], "area": 33011}, {"id": 6204607, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 365], "area": 76309}], "file_name": "000000172877.png", "image_id": 172877}, {"segments_info": [{"id": 9079434, "category_id": 1, "iscrowd": 0, "bbox": [155, 95, 78, 87], "area": 2216}, {"id": 10197915, "category_id": 1, "iscrowd": 0, "bbox": [301, 254, 71, 100], "area": 1341}, {"id": 5000268, "category_id": 9, "iscrowd": 0, "bbox": [20, 262, 92, 21], "area": 1112}, {"id": 10263708, "category_id": 9, "iscrowd": 0, "bbox": [125, 262, 132, 26], "area": 2024}, {"id": 9145227, "category_id": 35, "iscrowd": 0, "bbox": [170, 150, 99, 58], "area": 912}, {"id": 7237230, "category_id": 155, "iscrowd": 0, "bbox": [0, 233, 488, 131], "area": 50112}, {"id": 4671303, "category_id": 184, "iscrowd": 0, "bbox": [5, 79, 483, 190], "area": 65878}, {"id": 11776947, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 488, 136], "area": 50008}], "file_name": "000000172935.png", "image_id": 172935}, {"segments_info": [{"id": 2501423, "category_id": 1, "iscrowd": 0, "bbox": [0, 25, 174, 609], "area": 32331}, {"id": 2236977, "category_id": 1, "iscrowd": 0, "bbox": [316, 116, 111, 440], "area": 29599}, {"id": 3291718, "category_id": 1, "iscrowd": 0, "bbox": [320, 111, 26, 65], "area": 1022}, {"id": 3885915, "category_id": 1, "iscrowd": 0, "bbox": [182, 106, 45, 136], "area": 2885}, {"id": 3949919, "category_id": 1, "iscrowd": 0, "bbox": [112, 111, 88, 172], "area": 10111}, {"id": 1777182, "category_id": 1, "iscrowd": 0, "bbox": [222, 102, 29, 53], "area": 696}, {"id": 3092789, "category_id": 1, "iscrowd": 0, "bbox": [197, 102, 180, 503], "area": 36464}, {"id": 5918805, "category_id": 1, "iscrowd": 0, "bbox": [280, 74, 56, 143], "area": 4395}, {"id": 3159613, "category_id": 1, "iscrowd": 0, "bbox": [159, 71, 60, 46], "area": 1920}, {"id": 2699577, "category_id": 1, "iscrowd": 0, "bbox": [12, 86, 188, 312], "area": 23958}, {"id": 10329761, "category_id": 1, "iscrowd": 0, "bbox": [280, 172, 21, 83], "area": 1150}, {"id": 2699319, "category_id": 1, "iscrowd": 0, "bbox": [343, 129, 31, 46], "area": 1123}, {"id": 4014925, "category_id": 1, "iscrowd": 0, "bbox": [74, 107, 135, 525], "area": 13133}, {"id": 10577228, "category_id": 72, "iscrowd": 0, "bbox": [326, 92, 49, 42], "area": 1501}, {"id": 10001572, "category_id": 75, "iscrowd": 0, "bbox": [229, 239, 20, 14], "area": 158}, {"id": 9606295, "category_id": 75, "iscrowd": 0, "bbox": [233, 266, 25, 11], "area": 187}, {"id": 6777202, "category_id": 75, "iscrowd": 0, "bbox": [129, 397, 56, 24], "area": 818}, {"id": 5133147, "category_id": 75, "iscrowd": 0, "bbox": [72, 383, 46, 23], "area": 474}, {"id": 9804190, "category_id": 75, "iscrowd": 0, "bbox": [343, 172, 13, 15], "area": 121}, {"id": 5659237, "category_id": 75, "iscrowd": 0, "bbox": [174, 269, 30, 17], "area": 279}, {"id": 9080982, "category_id": 75, "iscrowd": 0, "bbox": [190, 255, 20, 15], "area": 199}, {"id": 3290166, "category_id": 190, "iscrowd": 0, "bbox": [217, 390, 188, 139], "area": 7186}, {"id": 5194049, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 437], "area": 41252}, {"id": 3613984, "category_id": 200, "iscrowd": 0, "bbox": [150, 442, 277, 198], "area": 22788}], "file_name": "000000172946.png", "image_id": 172946}, {"segments_info": [{"id": 6255229, "category_id": 24, "iscrowd": 0, "bbox": [34, 29, 517, 449], "area": 107504}, {"id": 3891279, "category_id": 184, "iscrowd": 0, "bbox": [16, 0, 624, 40], "area": 18469}, {"id": 5470835, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 376], "area": 103062}, {"id": 6528159, "category_id": 193, "iscrowd": 0, "bbox": [0, 375, 640, 100], "area": 11686}, {"id": 7572638, "category_id": 194, "iscrowd": 0, "bbox": [0, 288, 640, 198], "area": 69253}], "file_name": "000000172977.png", "image_id": 172977}, {"segments_info": [{"id": 2243630, "category_id": 44, "iscrowd": 0, "bbox": [92, 0, 61, 121], "area": 3466}, {"id": 2309437, "category_id": 44, "iscrowd": 0, "bbox": [23, 0, 117, 170], "area": 10448}, {"id": 6118499, "category_id": 44, "iscrowd": 0, "bbox": [0, 46, 87, 194], "area": 12293}, {"id": 4015934, "category_id": 47, "iscrowd": 0, "bbox": [128, 6, 86, 147], "area": 8625}, {"id": 4607560, "category_id": 48, "iscrowd": 0, "bbox": [399, 223, 184, 82], "area": 1898}, {"id": 6580578, "category_id": 48, "iscrowd": 0, "bbox": [197, 49, 121, 24], "area": 661}, {"id": 2634541, "category_id": 49, "iscrowd": 0, "bbox": [364, 59, 137, 21], "area": 716}, {"id": 5529946, "category_id": 49, "iscrowd": 0, "bbox": [123, 217, 159, 152], "area": 3688}, {"id": 5207175, "category_id": 59, "iscrowd": 0, "bbox": [470, 163, 170, 91], "area": 9828}, {"id": 4352896, "category_id": 59, "iscrowd": 0, "bbox": [285, 58, 94, 63], "area": 3660}, {"id": 8298429, "category_id": 59, "iscrowd": 0, "bbox": [263, 182, 151, 125], "area": 12091}, {"id": 4614267, "category_id": 59, "iscrowd": 0, "bbox": [452, 102, 134, 65], "area": 5977}, {"id": 4935752, "category_id": 62, "iscrowd": 0, "bbox": [363, 0, 176, 53], "area": 1951}, {"id": 5001801, "category_id": 62, "iscrowd": 0, "bbox": [204, 1, 135, 52], "area": 3193}, {"id": 2894885, "category_id": 67, "iscrowd": 0, "bbox": [0, 49, 640, 431], "area": 181821}, {"id": 4209711, "category_id": 189, "iscrowd": 0, "bbox": [0, 328, 2, 152], "area": 237}, {"id": 5331284, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 630, 78], "area": 20545}], "file_name": "000000173004.png", "image_id": 173004}, {"segments_info": [{"id": 5529188, "category_id": 1, "iscrowd": 0, "bbox": [243, 67, 265, 408], "area": 68332}, {"id": 6773332, "category_id": 47, "iscrowd": 0, "bbox": [488, 265, 24, 44], "area": 849}, {"id": 5538194, "category_id": 52, "iscrowd": 0, "bbox": [258, 196, 54, 94], "area": 2265}, {"id": 2972527, "category_id": 52, "iscrowd": 0, "bbox": [31, 423, 113, 57], "area": 1877}, {"id": 670077, "category_id": 55, "iscrowd": 0, "bbox": [50, 444, 44, 31], "area": 975}, {"id": 14210524, "category_id": 61, "iscrowd": 0, "bbox": [145, 382, 16, 10], "area": 114}, {"id": 8229025, "category_id": 61, "iscrowd": 0, "bbox": [175, 325, 33, 20], "area": 374}, {"id": 9806519, "category_id": 61, "iscrowd": 0, "bbox": [105, 364, 47, 19], "area": 666}, {"id": 10861000, "category_id": 61, "iscrowd": 0, "bbox": [125, 354, 21, 16], "area": 182}, {"id": 11713727, "category_id": 61, "iscrowd": 0, "bbox": [212, 317, 16, 21], "area": 246}, {"id": 12502734, "category_id": 61, "iscrowd": 0, "bbox": [195, 341, 19, 12], "area": 193}, {"id": 14210776, "category_id": 61, "iscrowd": 0, "bbox": [141, 341, 35, 34], "area": 768}, {"id": 14339268, "category_id": 61, "iscrowd": 0, "bbox": [167, 405, 21, 19], "area": 294}, {"id": 13287349, "category_id": 78, "iscrowd": 0, "bbox": [346, 93, 98, 105], "area": 4823}, {"id": 5785150, "category_id": 79, "iscrowd": 0, "bbox": [226, 272, 47, 115], "area": 2594}, {"id": 3746862, "category_id": 79, "iscrowd": 0, "bbox": [474, 320, 49, 158], "area": 4462}, {"id": 3485227, "category_id": 80, "iscrowd": 0, "bbox": [0, 301, 67, 124], "area": 7128}, {"id": 10127491, "category_id": 87, "iscrowd": 0, "bbox": [189, 399, 51, 22], "area": 384}, {"id": 4869954, "category_id": 100, "iscrowd": 0, "bbox": [268, 263, 322, 132], "area": 4277}, {"id": 3683638, "category_id": 107, "iscrowd": 0, "bbox": [0, 284, 636, 196], "area": 15861}, {"id": 1331053, "category_id": 122, "iscrowd": 0, "bbox": [249, 242, 13, 24], "area": 211}, {"id": 16052973, "category_id": 168, "iscrowd": 0, "bbox": [619, 306, 21, 36], "area": 573}, {"id": 1841432, "category_id": 176, "iscrowd": 0, "bbox": [586, 268, 54, 40], "area": 1695}, {"id": 4812445, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 133327}, {"id": 5275789, "category_id": 199, "iscrowd": 0, "bbox": [0, 196, 640, 154], "area": 31358}], "file_name": "000000173008.png", "image_id": 173008}, {"segments_info": [{"id": 2107710, "category_id": 23, "iscrowd": 0, "bbox": [142, 352, 89, 81], "area": 5041}, {"id": 1974837, "category_id": 23, "iscrowd": 0, "bbox": [182, 206, 217, 288], "area": 36890}, {"id": 8497343, "category_id": 190, "iscrowd": 0, "bbox": [0, 355, 480, 285], "area": 110433}, {"id": 11325412, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 420], "area": 118481}], "file_name": "000000173033.png", "image_id": 173033}, {"segments_info": [{"id": 5789258, "category_id": 85, "iscrowd": 0, "bbox": [62, 305, 51, 50], "area": 2046}, {"id": 15059648, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 359, 577], "area": 60985}, {"id": 7369072, "category_id": 197, "iscrowd": 0, "bbox": [0, 72, 359, 568], "area": 166697}], "file_name": "000000173044.png", "image_id": 173044}, {"segments_info": [{"id": 3814196, "category_id": 1, "iscrowd": 0, "bbox": [272, 478, 9, 19], "area": 79}, {"id": 6445142, "category_id": 1, "iscrowd": 0, "bbox": [67, 478, 18, 22], "area": 215}, {"id": 5910188, "category_id": 1, "iscrowd": 0, "bbox": [323, 583, 24, 57], "area": 1012}, {"id": 4538176, "category_id": 1, "iscrowd": 0, "bbox": [92, 543, 46, 69], "area": 1468}, {"id": 9266267, "category_id": 1, "iscrowd": 0, "bbox": [45, 483, 13, 20], "area": 181}, {"id": 5789794, "category_id": 1, "iscrowd": 0, "bbox": [155, 527, 45, 61], "area": 988}, {"id": 8156828, "category_id": 1, "iscrowd": 0, "bbox": [174, 522, 29, 64], "area": 817}, {"id": 5918814, "category_id": 1, "iscrowd": 0, "bbox": [7, 540, 31, 71], "area": 1277}, {"id": 7630755, "category_id": 1, "iscrowd": 0, "bbox": [30, 482, 14, 23], "area": 195}, {"id": 8818086, "category_id": 1, "iscrowd": 0, "bbox": [4, 485, 19, 19], "area": 218}, {"id": 5525086, "category_id": 1, "iscrowd": 0, "bbox": [424, 482, 14, 25], "area": 249}, {"id": 5129807, "category_id": 1, "iscrowd": 0, "bbox": [334, 578, 26, 62], "area": 656}, {"id": 8555173, "category_id": 1, "iscrowd": 0, "bbox": [253, 512, 28, 30], "area": 471}, {"id": 5064269, "category_id": 1, "iscrowd": 1, "bbox": [21, 452, 220, 53], "area": 2798}, {"id": 3881017, "category_id": 15, "iscrowd": 0, "bbox": [128, 512, 251, 83], "area": 5533}, {"id": 3419694, "category_id": 15, "iscrowd": 0, "bbox": [26, 571, 88, 42], "area": 2689}, {"id": 12827831, "category_id": 85, "iscrowd": 0, "bbox": [202, 125, 49, 57], "area": 2430}, {"id": 14342102, "category_id": 85, "iscrowd": 0, "bbox": [273, 131, 26, 62], "area": 1280}, {"id": 3748913, "category_id": 144, "iscrowd": 0, "bbox": [0, 507, 358, 72], "area": 5016}, {"id": 10395525, "category_id": 178, "iscrowd": 0, "bbox": [0, 485, 330, 86], "area": 10247}, {"id": 3425338, "category_id": 184, "iscrowd": 0, "bbox": [351, 197, 129, 312], "area": 31110}, {"id": 13940121, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 283], "area": 96297}, {"id": 9739947, "category_id": 191, "iscrowd": 0, "bbox": [0, 470, 480, 170], "area": 36147}, {"id": 10395292, "category_id": 195, "iscrowd": 0, "bbox": [116, 519, 152, 57], "area": 226}, {"id": 6644320, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 396, 512], "area": 104605}, {"id": 2761506, "category_id": 199, "iscrowd": 0, "bbox": [0, 575, 130, 19], "area": 127}], "file_name": "000000173057.png", "image_id": 173057}, {"segments_info": [{"id": 8492446, "category_id": 44, "iscrowd": 0, "bbox": [336, 48, 221, 406], "area": 65162}, {"id": 5262225, "category_id": 53, "iscrowd": 0, "bbox": [185, 353, 144, 121], "area": 12713}, {"id": 12114132, "category_id": 54, "iscrowd": 0, "bbox": [40, 84, 287, 363], "area": 52360}, {"id": 10269117, "category_id": 67, "iscrowd": 0, "bbox": [9, 10, 591, 594], "area": 212790}], "file_name": "000000173091.png", "image_id": 173091}, {"segments_info": [{"id": 5872549, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 110176}, {"id": 16184267, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 96230}], "file_name": "000000173183.png", "image_id": 173183}, {"segments_info": [{"id": 10133674, "category_id": 1, "iscrowd": 0, "bbox": [266, 167, 47, 58], "area": 1609}, {"id": 8160145, "category_id": 1, "iscrowd": 0, "bbox": [307, 161, 34, 65], "area": 1200}, {"id": 4869699, "category_id": 44, "iscrowd": 0, "bbox": [573, 224, 9, 24], "area": 146}, {"id": 8159366, "category_id": 44, "iscrowd": 0, "bbox": [249, 209, 10, 14], "area": 96}, {"id": 5134729, "category_id": 44, "iscrowd": 0, "bbox": [415, 143, 8, 16], "area": 90}, {"id": 3354677, "category_id": 44, "iscrowd": 0, "bbox": [594, 232, 7, 13], "area": 73}, {"id": 3092550, "category_id": 44, "iscrowd": 0, "bbox": [400, 99, 14, 30], "area": 341}, {"id": 4082328, "category_id": 44, "iscrowd": 0, "bbox": [435, 178, 8, 14], "area": 93}, {"id": 10791601, "category_id": 51, "iscrowd": 0, "bbox": [89, 158, 12, 4], "area": 37}, {"id": 10791346, "category_id": 51, "iscrowd": 0, "bbox": [61, 157, 11, 6], "area": 40}, {"id": 11580604, "category_id": 51, "iscrowd": 0, "bbox": [76, 158, 13, 5], "area": 37}, {"id": 3093330, "category_id": 62, "iscrowd": 0, "bbox": [286, 226, 73, 133], "area": 4779}, {"id": 6381418, "category_id": 62, "iscrowd": 0, "bbox": [450, 284, 96, 14], "area": 576}, {"id": 5130575, "category_id": 62, "iscrowd": 0, "bbox": [529, 268, 60, 32], "area": 1578}, {"id": 4145497, "category_id": 62, "iscrowd": 0, "bbox": [201, 227, 98, 192], "area": 9715}, {"id": 4144969, "category_id": 62, "iscrowd": 0, "bbox": [337, 322, 136, 102], "area": 5346}, {"id": 1514276, "category_id": 62, "iscrowd": 0, "bbox": [566, 250, 55, 12], "area": 380}, {"id": 5391941, "category_id": 62, "iscrowd": 0, "bbox": [590, 290, 49, 16], "area": 486}, {"id": 1842466, "category_id": 62, "iscrowd": 0, "bbox": [513, 246, 22, 19], "area": 308}, {"id": 3420759, "category_id": 62, "iscrowd": 0, "bbox": [354, 222, 49, 83], "area": 2034}, {"id": 12752495, "category_id": 67, "iscrowd": 0, "bbox": [341, 290, 299, 71], "area": 12847}, {"id": 11771021, "category_id": 67, "iscrowd": 0, "bbox": [502, 256, 137, 45], "area": 2147}, {"id": 5198165, "category_id": 67, "iscrowd": 0, "bbox": [525, 223, 115, 39], "area": 1222}, {"id": 2369334, "category_id": 79, "iscrowd": 0, "bbox": [208, 220, 39, 11], "area": 304}, {"id": 7433577, "category_id": 112, "iscrowd": 0, "bbox": [478, 130, 69, 158], "area": 6135}, {"id": 4222842, "category_id": 130, "iscrowd": 0, "bbox": [33, 0, 607, 145], "area": 3392}, {"id": 4408649, "category_id": 186, "iscrowd": 0, "bbox": [16, 0, 624, 97], "area": 34307}, {"id": 6515830, "category_id": 189, "iscrowd": 0, "bbox": [0, 206, 365, 219], "area": 38714}, {"id": 6836553, "category_id": 190, "iscrowd": 0, "bbox": [99, 270, 406, 155], "area": 10935}, {"id": 11641760, "category_id": 195, "iscrowd": 0, "bbox": [0, 137, 101, 111], "area": 2978}, {"id": 5921115, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 288], "area": 52266}], "file_name": "000000173302.png", "image_id": 173302}, {"segments_info": [{"id": 9352900, "category_id": 47, "iscrowd": 0, "bbox": [552, 45, 60, 121], "area": 5484}, {"id": 10988463, "category_id": 48, "iscrowd": 0, "bbox": [309, 0, 203, 85], "area": 3707}, {"id": 4210248, "category_id": 48, "iscrowd": 0, "bbox": [565, 399, 47, 213], "area": 3512}, {"id": 4870240, "category_id": 48, "iscrowd": 0, "bbox": [30, 352, 50, 221], "area": 3455}, {"id": 14539466, "category_id": 49, "iscrowd": 0, "bbox": [426, 10, 186, 152], "area": 3601}, {"id": 2570875, "category_id": 59, "iscrowd": 0, "bbox": [3, 83, 70, 261], "area": 11732}, {"id": 5471387, "category_id": 59, "iscrowd": 0, "bbox": [288, 384, 160, 148], "area": 10792}, {"id": 5802149, "category_id": 59, "iscrowd": 0, "bbox": [72, 85, 338, 336], "area": 67453}, {"id": 3294848, "category_id": 59, "iscrowd": 0, "bbox": [2, 450, 62, 96], "area": 3205}, {"id": 8292760, "category_id": 67, "iscrowd": 0, "bbox": [1, 1, 610, 607], "area": 247788}, {"id": 3683905, "category_id": 189, "iscrowd": 0, "bbox": [245, 8, 367, 604], "area": 2519}, {"id": 5202567, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 331, 418], "area": 1694}], "file_name": "000000173371.png", "image_id": 173371}, {"segments_info": [{"id": 3238346, "category_id": 47, "iscrowd": 0, "bbox": [470, 203, 35, 45], "area": 1388}, {"id": 2773113, "category_id": 49, "iscrowd": 0, "bbox": [37, 303, 203, 91], "area": 5339}, {"id": 6848164, "category_id": 61, "iscrowd": 0, "bbox": [141, 54, 230, 241], "area": 38290}, {"id": 4937066, "category_id": 67, "iscrowd": 0, "bbox": [0, 208, 640, 217], "area": 104244}, {"id": 1650811, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 299], "area": 102195}, {"id": 10138326, "category_id": 181, "iscrowd": 0, "bbox": [495, 0, 145, 160], "area": 20409}], "file_name": "000000173383.png", "image_id": 173383}, {"segments_info": [{"id": 7043978, "category_id": 1, "iscrowd": 0, "bbox": [8, 177, 167, 338], "area": 24137}, {"id": 6252906, "category_id": 1, "iscrowd": 0, "bbox": [156, 189, 118, 288], "area": 13796}, {"id": 4481410, "category_id": 22, "iscrowd": 0, "bbox": [278, 181, 99, 72], "area": 4376}, {"id": 6323357, "category_id": 22, "iscrowd": 0, "bbox": [474, 172, 61, 51], "area": 1450}, {"id": 4350341, "category_id": 22, "iscrowd": 0, "bbox": [531, 223, 94, 74], "area": 3413}, {"id": 4679566, "category_id": 22, "iscrowd": 0, "bbox": [252, 259, 227, 155], "area": 15954}, {"id": 5535391, "category_id": 22, "iscrowd": 0, "bbox": [396, 225, 100, 38], "area": 2572}, {"id": 5073804, "category_id": 22, "iscrowd": 0, "bbox": [227, 166, 47, 63], "area": 1353}, {"id": 6062241, "category_id": 22, "iscrowd": 0, "bbox": [237, 254, 90, 59], "area": 2669}, {"id": 5205394, "category_id": 22, "iscrowd": 0, "bbox": [61, 162, 77, 64], "area": 2257}, {"id": 5007498, "category_id": 22, "iscrowd": 0, "bbox": [343, 232, 58, 51], "area": 1899}, {"id": 8826074, "category_id": 22, "iscrowd": 0, "bbox": [361, 213, 109, 30], "area": 1374}, {"id": 8233157, "category_id": 22, "iscrowd": 0, "bbox": [470, 196, 57, 31], "area": 1088}, {"id": 5535647, "category_id": 22, "iscrowd": 0, "bbox": [478, 219, 57, 76], "area": 1954}, {"id": 5599634, "category_id": 22, "iscrowd": 0, "bbox": [68, 133, 73, 49], "area": 1970}, {"id": 5073797, "category_id": 22, "iscrowd": 1, "bbox": [224, 151, 362, 257], "area": 23774}, {"id": 5271133, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 206], "area": 105957}, {"id": 6325122, "category_id": 185, "iscrowd": 0, "bbox": [578, 165, 62, 59], "area": 1839}, {"id": 15454398, "category_id": 187, "iscrowd": 0, "bbox": [257, 0, 383, 37], "area": 7045}, {"id": 6594972, "category_id": 193, "iscrowd": 0, "bbox": [0, 193, 640, 331], "area": 82974}], "file_name": "000000173799.png", "image_id": 173799}, {"segments_info": [{"id": 2960431, "category_id": 1, "iscrowd": 0, "bbox": [187, 186, 231, 381], "area": 51751}, {"id": 7301486, "category_id": 35, "iscrowd": 0, "bbox": [122, 554, 384, 30], "area": 4617}, {"id": 14276051, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 593, 640], "area": 241265}, {"id": 3685183, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 555, 189], "area": 52262}], "file_name": "000000173830.png", "image_id": 173830}, {"segments_info": [{"id": 4089201, "category_id": 8, "iscrowd": 0, "bbox": [14, 109, 602, 266], "area": 92803}, {"id": 4942923, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 231], "area": 98517}, {"id": 16250866, "category_id": 187, "iscrowd": 0, "bbox": [90, 0, 203, 88], "area": 7898}, {"id": 5145198, "category_id": 193, "iscrowd": 0, "bbox": [0, 181, 640, 299], "area": 107608}], "file_name": "000000174004.png", "image_id": 174004}, {"segments_info": [{"id": 6647187, "category_id": 88, "iscrowd": 0, "bbox": [5, 14, 193, 295], "area": 35386}, {"id": 7690153, "category_id": 88, "iscrowd": 0, "bbox": [86, 4, 413, 347], "area": 90155}, {"id": 4085622, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 500, 351], "area": 45474}, {"id": 5927041, "category_id": 141, "iscrowd": 0, "bbox": [0, 142, 54, 158], "area": 3699}], "file_name": "000000174018.png", "image_id": 174018}, {"segments_info": [{"id": 9213388, "category_id": 1, "iscrowd": 0, "bbox": [117, 346, 151, 53], "area": 3783}, {"id": 2369093, "category_id": 1, "iscrowd": 0, "bbox": [351, 0, 148, 38], "area": 4689}, {"id": 6905952, "category_id": 48, "iscrowd": 0, "bbox": [51, 106, 129, 277], "area": 11761}, {"id": 3026236, "category_id": 49, "iscrowd": 0, "bbox": [308, 0, 59, 59], "area": 1550}, {"id": 5273769, "category_id": 59, "iscrowd": 0, "bbox": [0, 0, 495, 369], "area": 126819}, {"id": 6510707, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 500, 399], "area": 19119}], "file_name": "000000174123.png", "image_id": 174123}, {"segments_info": [{"id": 2309438, "category_id": 17, "iscrowd": 0, "bbox": [69, 181, 248, 105], "area": 12239}, {"id": 1718832, "category_id": 62, "iscrowd": 0, "bbox": [0, 203, 150, 297], "area": 19008}, {"id": 5989728, "category_id": 73, "iscrowd": 0, "bbox": [67, 141, 276, 200], "area": 22932}, {"id": 12239012, "category_id": 130, "iscrowd": 0, "bbox": [150, 0, 38, 17], "area": 560}, {"id": 8555633, "category_id": 181, "iscrowd": 0, "bbox": [239, 0, 136, 170], "area": 20979}, {"id": 4079200, "category_id": 189, "iscrowd": 0, "bbox": [67, 218, 308, 233], "area": 25845}, {"id": 7832946, "category_id": 190, "iscrowd": 0, "bbox": [0, 332, 375, 168], "area": 29303}, {"id": 14012341, "category_id": 195, "iscrowd": 0, "bbox": [274, 191, 101, 35], "area": 2227}, {"id": 10992812, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 208], "area": 46750}], "file_name": "000000174231.png", "image_id": 174231}, {"segments_info": [{"id": 3950697, "category_id": 1, "iscrowd": 0, "bbox": [305, 172, 83, 324], "area": 7062}, {"id": 3483047, "category_id": 1, "iscrowd": 0, "bbox": [80, 133, 152, 369], "area": 32359}, {"id": 3948951, "category_id": 1, "iscrowd": 0, "bbox": [366, 164, 44, 142], "area": 3017}, {"id": 5984336, "category_id": 1, "iscrowd": 0, "bbox": [235, 93, 405, 409], "area": 84320}, {"id": 4079704, "category_id": 1, "iscrowd": 0, "bbox": [1, 144, 133, 345], "area": 30399}, {"id": 6836117, "category_id": 1, "iscrowd": 0, "bbox": [194, 162, 164, 343], "area": 35924}, {"id": 11574434, "category_id": 44, "iscrowd": 0, "bbox": [3, 479, 104, 32], "area": 1915}, {"id": 1907744, "category_id": 77, "iscrowd": 0, "bbox": [231, 362, 66, 26], "area": 780}, {"id": 11451583, "category_id": 128, "iscrowd": 0, "bbox": [285, 112, 341, 114], "area": 8476}, {"id": 6325882, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 257], "area": 73560}, {"id": 15001828, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 223], "area": 23029}, {"id": 8896960, "category_id": 193, "iscrowd": 0, "bbox": [0, 206, 640, 291], "area": 11507}], "file_name": "000000174371.png", "image_id": 174371}, {"segments_info": [{"id": 7039076, "category_id": 2, "iscrowd": 0, "bbox": [188, 6, 310, 380], "area": 71319}, {"id": 9217469, "category_id": 3, "iscrowd": 0, "bbox": [123, 79, 9, 15], "area": 93}, {"id": 9408927, "category_id": 3, "iscrowd": 0, "bbox": [81, 76, 27, 19], "area": 395}, {"id": 9407893, "category_id": 3, "iscrowd": 0, "bbox": [364, 87, 32, 23], "area": 509}, {"id": 7894389, "category_id": 3, "iscrowd": 0, "bbox": [148, 72, 92, 44], "area": 3035}, {"id": 8488330, "category_id": 3, "iscrowd": 0, "bbox": [398, 81, 81, 36], "area": 2052}, {"id": 9738396, "category_id": 8, "iscrowd": 0, "bbox": [506, 25, 134, 112], "area": 11157}, {"id": 10526620, "category_id": 8, "iscrowd": 0, "bbox": [477, 81, 43, 40], "area": 861}, {"id": 8174300, "category_id": 10, "iscrowd": 0, "bbox": [109, 27, 9, 11], "area": 67}, {"id": 6196116, "category_id": 10, "iscrowd": 0, "bbox": [95, 68, 7, 8], "area": 42}, {"id": 6586193, "category_id": 10, "iscrowd": 0, "bbox": [33, 58, 5, 4], "area": 19}, {"id": 11645354, "category_id": 149, "iscrowd": 0, "bbox": [70, 81, 570, 288], "area": 45138}, {"id": 5137776, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 210], "area": 26171}, {"id": 9013127, "category_id": 191, "iscrowd": 0, "bbox": [0, 92, 640, 296], "area": 68062}, {"id": 6713728, "category_id": 194, "iscrowd": 0, "bbox": [78, 184, 115, 39], "area": 1836}, {"id": 9148589, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 543, 106], "area": 15762}], "file_name": "000000174482.png", "image_id": 174482}, {"segments_info": [{"id": 5661087, "category_id": 1, "iscrowd": 0, "bbox": [93, 19, 519, 587], "area": 194549}, {"id": 6848869, "category_id": 90, "iscrowd": 0, "bbox": [301, 352, 215, 57], "area": 3910}, {"id": 3750749, "category_id": 176, "iscrowd": 0, "bbox": [0, 145, 193, 367], "area": 44722}, {"id": 6850720, "category_id": 181, "iscrowd": 0, "bbox": [481, 0, 131, 213], "area": 25459}, {"id": 4944531, "category_id": 199, "iscrowd": 0, "bbox": [319, 0, 293, 541], "area": 50849}], "file_name": "000000175251.png", "image_id": 175251}, {"segments_info": [{"id": 4082516, "category_id": 44, "iscrowd": 0, "bbox": [241, 58, 15, 35], "area": 379}, {"id": 2238766, "category_id": 44, "iscrowd": 0, "bbox": [230, 52, 13, 42], "area": 380}, {"id": 4743021, "category_id": 44, "iscrowd": 0, "bbox": [233, 116, 12, 26], "area": 257}, {"id": 2305079, "category_id": 46, "iscrowd": 0, "bbox": [578, 107, 22, 36], "area": 454}, {"id": 4347480, "category_id": 47, "iscrowd": 0, "bbox": [462, 76, 6, 13], "area": 63}, {"id": 6125700, "category_id": 47, "iscrowd": 0, "bbox": [447, 124, 19, 17], "area": 271}, {"id": 3687762, "category_id": 47, "iscrowd": 0, "bbox": [433, 79, 10, 14], "area": 129}, {"id": 3620938, "category_id": 47, "iscrowd": 0, "bbox": [425, 81, 8, 13], "area": 90}, {"id": 3227463, "category_id": 47, "iscrowd": 0, "bbox": [447, 80, 12, 12], "area": 130}, {"id": 3030874, "category_id": 47, "iscrowd": 0, "bbox": [43, 127, 15, 24], "area": 288}, {"id": 6651040, "category_id": 50, "iscrowd": 0, "bbox": [343, 197, 13, 22], "area": 81}, {"id": 2634300, "category_id": 51, "iscrowd": 0, "bbox": [556, 320, 45, 33], "area": 1117}, {"id": 8098716, "category_id": 67, "iscrowd": 0, "bbox": [235, 305, 378, 150], "area": 40922}, {"id": 2763821, "category_id": 79, "iscrowd": 0, "bbox": [159, 250, 103, 178], "area": 14299}, {"id": 3094073, "category_id": 79, "iscrowd": 0, "bbox": [431, 232, 150, 122], "area": 9986}, {"id": 4086889, "category_id": 80, "iscrowd": 0, "bbox": [67, 218, 61, 41], "area": 1789}, {"id": 6518653, "category_id": 80, "iscrowd": 0, "bbox": [405, 200, 48, 31], "area": 1197}, {"id": 6322049, "category_id": 81, "iscrowd": 0, "bbox": [260, 228, 78, 17], "area": 715}, {"id": 3752775, "category_id": 107, "iscrowd": 0, "bbox": [0, 216, 614, 93], "area": 15828}, {"id": 10729668, "category_id": 130, "iscrowd": 0, "bbox": [130, 0, 350, 129], "area": 2971}, {"id": 2899536, "category_id": 156, "iscrowd": 0, "bbox": [0, 14, 614, 428], "area": 57296}, {"id": 16514557, "category_id": 181, "iscrowd": 0, "bbox": [251, 67, 107, 107], "area": 8847}, {"id": 8754839, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 614, 68], "area": 23418}, {"id": 3226199, "category_id": 188, "iscrowd": 0, "bbox": [277, 256, 158, 75], "area": 6760}, {"id": 5138547, "category_id": 189, "iscrowd": 0, "bbox": [284, 410, 330, 51], "area": 2119}, {"id": 3094588, "category_id": 190, "iscrowd": 0, "bbox": [61, 400, 285, 61], "area": 8045}, {"id": 4747395, "category_id": 195, "iscrowd": 0, "bbox": [31, 215, 41, 47], "area": 1172}, {"id": 8362915, "category_id": 199, "iscrowd": 0, "bbox": [0, 33, 614, 238], "area": 40984}], "file_name": "000000175364.png", "image_id": 175364}, {"segments_info": [{"id": 14211276, "category_id": 70, "iscrowd": 0, "bbox": [168, 197, 104, 149], "area": 11936}, {"id": 5655815, "category_id": 112, "iscrowd": 0, "bbox": [251, 0, 249, 363], "area": 72317}, {"id": 14145741, "category_id": 176, "iscrowd": 0, "bbox": [119, 0, 381, 375], "area": 37216}, {"id": 7431250, "category_id": 190, "iscrowd": 0, "bbox": [123, 265, 284, 110], "area": 17500}, {"id": 13160143, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 138, 375], "area": 46739}], "file_name": "000000175387.png", "image_id": 175387}, {"segments_info": [{"id": 11446696, "category_id": 3, "iscrowd": 0, "bbox": [283, 225, 24, 15], "area": 171}, {"id": 9670028, "category_id": 3, "iscrowd": 0, "bbox": [292, 228, 21, 20], "area": 275}, {"id": 6378563, "category_id": 3, "iscrowd": 0, "bbox": [238, 213, 24, 17], "area": 308}, {"id": 5721672, "category_id": 3, "iscrowd": 0, "bbox": [391, 239, 55, 41], "area": 1688}, {"id": 8748411, "category_id": 3, "iscrowd": 0, "bbox": [224, 239, 33, 24], "area": 563}, {"id": 4865078, "category_id": 3, "iscrowd": 0, "bbox": [249, 240, 43, 27], "area": 909}, {"id": 5064515, "category_id": 3, "iscrowd": 0, "bbox": [330, 243, 20, 15], "area": 235}, {"id": 6314578, "category_id": 3, "iscrowd": 0, "bbox": [325, 231, 42, 21], "area": 325}, {"id": 4801599, "category_id": 3, "iscrowd": 0, "bbox": [359, 237, 40, 25], "area": 794}, {"id": 6506548, "category_id": 3, "iscrowd": 0, "bbox": [437, 245, 69, 41], "area": 2281}, {"id": 8485757, "category_id": 3, "iscrowd": 0, "bbox": [202, 232, 32, 25], "area": 532}, {"id": 5061165, "category_id": 3, "iscrowd": 0, "bbox": [584, 237, 56, 72], "area": 3446}, {"id": 4800570, "category_id": 3, "iscrowd": 0, "bbox": [505, 231, 85, 65], "area": 4495}, {"id": 5131852, "category_id": 3, "iscrowd": 1, "bbox": [166, 205, 179, 41], "area": 2091}, {"id": 5853774, "category_id": 10, "iscrowd": 0, "bbox": [362, 106, 19, 54], "area": 778}, {"id": 4868168, "category_id": 10, "iscrowd": 0, "bbox": [108, 124, 26, 55], "area": 1241}, {"id": 1907739, "category_id": 10, "iscrowd": 0, "bbox": [16, 92, 29, 67], "area": 1635}, {"id": 4342337, "category_id": 64, "iscrowd": 0, "bbox": [0, 243, 51, 64], "area": 1748}, {"id": 8288374, "category_id": 85, "iscrowd": 0, "bbox": [297, 80, 45, 45], "area": 1598}, {"id": 7041913, "category_id": 128, "iscrowd": 0, "bbox": [251, 105, 389, 154], "area": 7768}, {"id": 6578792, "category_id": 149, "iscrowd": 0, "bbox": [0, 216, 640, 252], "area": 82188}, {"id": 3358528, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 273], "area": 72125}, {"id": 2895407, "category_id": 185, "iscrowd": 0, "bbox": [0, 214, 312, 80], "area": 8778}, {"id": 14466200, "category_id": 187, "iscrowd": 0, "bbox": [115, 0, 525, 165], "area": 55549}, {"id": 9014422, "category_id": 191, "iscrowd": 0, "bbox": [0, 218, 409, 177], "area": 22637}], "file_name": "000000175438.png", "image_id": 175438}, {"segments_info": [{"id": 927299, "category_id": 64, "iscrowd": 0, "bbox": [10, 402, 40, 157], "area": 3137}, {"id": 3294333, "category_id": 88, "iscrowd": 0, "bbox": [124, 256, 240, 313], "area": 47598}, {"id": 10926012, "category_id": 130, "iscrowd": 0, "bbox": [355, 307, 24, 179], "area": 392}, {"id": 1980992, "category_id": 184, "iscrowd": 0, "bbox": [12, 0, 468, 640], "area": 184823}, {"id": 990797, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 200, 237], "area": 34548}, {"id": 2706287, "category_id": 190, "iscrowd": 0, "bbox": [0, 538, 93, 102], "area": 5677}, {"id": 2903678, "category_id": 199, "iscrowd": 0, "bbox": [0, 185, 143, 379], "area": 21732}], "file_name": "000000175443.png", "image_id": 175443}, {"segments_info": [{"id": 4475497, "category_id": 48, "iscrowd": 0, "bbox": [455, 453, 23, 46], "area": 331}, {"id": 7098726, "category_id": 49, "iscrowd": 0, "bbox": [256, 0, 75, 36], "area": 1288}, {"id": 3812983, "category_id": 51, "iscrowd": 0, "bbox": [0, 518, 167, 122], "area": 17360}, {"id": 4817594, "category_id": 51, "iscrowd": 0, "bbox": [168, 444, 228, 186], "area": 35153}, {"id": 5267630, "category_id": 54, "iscrowd": 0, "bbox": [242, 216, 198, 164], "area": 23496}, {"id": 5397154, "category_id": 54, "iscrowd": 0, "bbox": [0, 188, 224, 203], "area": 31051}, {"id": 9403281, "category_id": 67, "iscrowd": 0, "bbox": [1, 3, 476, 628], "area": 190628}, {"id": 5920899, "category_id": 189, "iscrowd": 0, "bbox": [0, 276, 478, 364], "area": 1987}, {"id": 2656210, "category_id": 196, "iscrowd": 0, "bbox": [166, 631, 193, 9], "area": 1625}], "file_name": "000000175535.png", "image_id": 175535}, {"segments_info": [{"id": 3813165, "category_id": 1, "iscrowd": 0, "bbox": [61, 212, 22, 46], "area": 382}, {"id": 2566698, "category_id": 1, "iscrowd": 0, "bbox": [211, 215, 16, 38], "area": 237}, {"id": 3226431, "category_id": 1, "iscrowd": 0, "bbox": [203, 217, 15, 34], "area": 210}, {"id": 4673618, "category_id": 1, "iscrowd": 0, "bbox": [583, 219, 13, 31], "area": 235}, {"id": 4478556, "category_id": 1, "iscrowd": 0, "bbox": [564, 221, 8, 26], "area": 173}, {"id": 2370348, "category_id": 3, "iscrowd": 0, "bbox": [575, 227, 55, 19], "area": 636}, {"id": 3365738, "category_id": 3, "iscrowd": 0, "bbox": [557, 224, 49, 18], "area": 222}, {"id": 2567743, "category_id": 3, "iscrowd": 0, "bbox": [40, 217, 13, 21], "area": 210}, {"id": 3226430, "category_id": 3, "iscrowd": 0, "bbox": [541, 224, 22, 18], "area": 194}, {"id": 4545644, "category_id": 3, "iscrowd": 0, "bbox": [235, 211, 10, 7], "area": 54}, {"id": 5857377, "category_id": 6, "iscrowd": 0, "bbox": [274, 128, 265, 199], "area": 43353}, {"id": 3882041, "category_id": 10, "iscrowd": 0, "bbox": [287, 136, 14, 26], "area": 274}, {"id": 3952226, "category_id": 10, "iscrowd": 0, "bbox": [545, 200, 8, 12], "area": 86}, {"id": 2304069, "category_id": 27, "iscrowd": 0, "bbox": [216, 221, 4, 10], "area": 24}, {"id": 3485997, "category_id": 27, "iscrowd": 0, "bbox": [65, 216, 15, 16], "area": 160}, {"id": 8158071, "category_id": 130, "iscrowd": 0, "bbox": [560, 90, 21, 49], "area": 795}, {"id": 4870480, "category_id": 149, "iscrowd": 0, "bbox": [206, 202, 434, 229], "area": 59990}, {"id": 3101008, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 288, 395], "area": 39866}, {"id": 1382169, "category_id": 187, "iscrowd": 0, "bbox": [197, 0, 59, 41], "area": 1997}, {"id": 5134939, "category_id": 191, "iscrowd": 0, "bbox": [0, 220, 640, 211], "area": 40352}, {"id": 3357501, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 263], "area": 77016}], "file_name": "000000176037.png", "image_id": 176037}, {"segments_info": [{"id": 11840694, "category_id": 84, "iscrowd": 0, "bbox": [421, 480, 59, 80], "area": 3646}, {"id": 5074086, "category_id": 86, "iscrowd": 0, "bbox": [171, 390, 108, 230], "area": 17718}, {"id": 6389911, "category_id": 119, "iscrowd": 0, "bbox": [8, 108, 464, 306], "area": 76763}, {"id": 8816756, "category_id": 189, "iscrowd": 0, "bbox": [0, 550, 54, 90], "area": 1074}, {"id": 14538198, "category_id": 195, "iscrowd": 0, "bbox": [16, 507, 464, 133], "area": 27373}, {"id": 16316922, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 556], "area": 140706}], "file_name": "000000176232.png", "image_id": 176232}, {"segments_info": [{"id": 3288876, "category_id": 73, "iscrowd": 0, "bbox": [2, 0, 228, 253], "area": 29969}, {"id": 6725808, "category_id": 84, "iscrowd": 0, "bbox": [223, 25, 417, 251], "area": 56972}, {"id": 6973795, "category_id": 181, "iscrowd": 0, "bbox": [505, 0, 135, 91], "area": 7819}, {"id": 5331289, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 189029}, {"id": 15067107, "category_id": 195, "iscrowd": 0, "bbox": [503, 328, 137, 152], "area": 13816}], "file_name": "000000176446.png", "image_id": 176446}, {"segments_info": [{"id": 5466969, "category_id": 1, "iscrowd": 0, "bbox": [25, 179, 45, 169], "area": 4335}, {"id": 13488075, "category_id": 3, "iscrowd": 0, "bbox": [63, 195, 66, 54], "area": 2524}, {"id": 11713203, "category_id": 20, "iscrowd": 0, "bbox": [214, 101, 245, 269], "area": 25407}, {"id": 3093041, "category_id": 77, "iscrowd": 0, "bbox": [29, 250, 8, 6], "area": 34}, {"id": 6325927, "category_id": 177, "iscrowd": 0, "bbox": [143, 0, 257, 344], "area": 54627}, {"id": 12236715, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 165, 368], "area": 48505}, {"id": 4028247, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 153353}], "file_name": "000000176606.png", "image_id": 176606}, {"segments_info": [{"id": 5730684, "category_id": 24, "iscrowd": 0, "bbox": [77, 3, 563, 468], "area": 158233}, {"id": 5343859, "category_id": 193, "iscrowd": 0, "bbox": [434, 303, 56, 23], "area": 743}, {"id": 7901074, "category_id": 194, "iscrowd": 0, "bbox": [0, 88, 640, 392], "area": 83293}, {"id": 3360583, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 583, 155], "area": 16139}], "file_name": "000000176634.png", "image_id": 176634}, {"segments_info": [{"id": 4804939, "category_id": 149, "iscrowd": 0, "bbox": [588, 470, 52, 10], "area": 375}, {"id": 4212538, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 197923}, {"id": 15722710, "category_id": 187, "iscrowd": 0, "bbox": [141, 0, 499, 324], "area": 62722}, {"id": 5466725, "category_id": 191, "iscrowd": 0, "bbox": [545, 453, 93, 27], "area": 1042}, {"id": 4411710, "category_id": 193, "iscrowd": 0, "bbox": [410, 423, 230, 57], "area": 5019}, {"id": 8551270, "category_id": 195, "iscrowd": 0, "bbox": [471, 304, 52, 61], "area": 1729}], "file_name": "000000176701.png", "image_id": 176701}, {"segments_info": [{"id": 1059145, "category_id": 17, "iscrowd": 0, "bbox": [264, 398, 74, 242], "area": 9406}, {"id": 10328988, "category_id": 70, "iscrowd": 0, "bbox": [12, 211, 289, 336], "area": 49815}, {"id": 3230558, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 427, 450], "area": 101466}, {"id": 592913, "category_id": 188, "iscrowd": 0, "bbox": [0, 405, 115, 235], "area": 19214}, {"id": 3097167, "category_id": 190, "iscrowd": 0, "bbox": [65, 427, 362, 213], "area": 41206}], "file_name": "000000176778.png", "image_id": 176778}, {"segments_info": [{"id": 4805467, "category_id": 1, "iscrowd": 0, "bbox": [72, 174, 53, 27], "area": 805}, {"id": 9077893, "category_id": 1, "iscrowd": 0, "bbox": [386, 75, 110, 137], "area": 3729}, {"id": 2961458, "category_id": 1, "iscrowd": 0, "bbox": [50, 212, 49, 119], "area": 2840}, {"id": 5602429, "category_id": 41, "iscrowd": 0, "bbox": [85, 274, 16, 56], "area": 514}, {"id": 4342339, "category_id": 41, "iscrowd": 0, "bbox": [387, 174, 46, 47], "area": 366}, {"id": 8022884, "category_id": 77, "iscrowd": 0, "bbox": [98, 186, 4, 4], "area": 11}, {"id": 8551810, "category_id": 92, "iscrowd": 0, "bbox": [476, 0, 121, 26], "area": 1393}, {"id": 10853785, "category_id": 144, "iscrowd": 0, "bbox": [0, 225, 640, 201], "area": 16414}, {"id": 7829637, "category_id": 161, "iscrowd": 0, "bbox": [24, 181, 418, 245], "area": 15594}, {"id": 2170912, "category_id": 171, "iscrowd": 0, "bbox": [254, 167, 386, 259], "area": 40307}, {"id": 3754819, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 596, 329], "area": 70407}, {"id": 2368801, "category_id": 185, "iscrowd": 0, "bbox": [0, 188, 178, 89], "area": 9670}, {"id": 7432803, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 65269}, {"id": 9672341, "category_id": 199, "iscrowd": 0, "bbox": [0, 143, 640, 283], "area": 17738}], "file_name": "000000176799.png", "image_id": 176799}, {"segments_info": [{"id": 3551274, "category_id": 16, "iscrowd": 0, "bbox": [248, 217, 269, 143], "area": 14638}, {"id": 5409655, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 292434}], "file_name": "000000176847.png", "image_id": 176847}, {"segments_info": [{"id": 5526355, "category_id": 1, "iscrowd": 0, "bbox": [145, 11, 30, 65], "area": 1081}, {"id": 5853793, "category_id": 1, "iscrowd": 0, "bbox": [110, 34, 120, 192], "area": 6915}, {"id": 8416352, "category_id": 1, "iscrowd": 0, "bbox": [336, 93, 9, 13], "area": 66}, {"id": 7298147, "category_id": 1, "iscrowd": 0, "bbox": [227, 4, 66, 153], "area": 6338}, {"id": 6118490, "category_id": 1, "iscrowd": 0, "bbox": [357, 83, 21, 65], "area": 714}, {"id": 3881786, "category_id": 1, "iscrowd": 0, "bbox": [77, 20, 81, 219], "area": 7403}, {"id": 6378334, "category_id": 1, "iscrowd": 0, "bbox": [295, 23, 41, 65], "area": 962}, {"id": 3748655, "category_id": 1, "iscrowd": 0, "bbox": [347, 77, 14, 65], "area": 520}, {"id": 5131613, "category_id": 1, "iscrowd": 0, "bbox": [114, 0, 35, 19], "area": 524}, {"id": 5460565, "category_id": 1, "iscrowd": 0, "bbox": [259, 62, 101, 155], "area": 9471}, {"id": 4142952, "category_id": 1, "iscrowd": 0, "bbox": [162, 63, 69, 160], "area": 6128}, {"id": 7234917, "category_id": 1, "iscrowd": 0, "bbox": [391, 147, 46, 43], "area": 355}, {"id": 5263957, "category_id": 17, "iscrowd": 0, "bbox": [217, 140, 47, 81], "area": 2767}, {"id": 2893347, "category_id": 31, "iscrowd": 0, "bbox": [268, 92, 30, 63], "area": 657}, {"id": 9209487, "category_id": 77, "iscrowd": 0, "bbox": [247, 29, 16, 10], "area": 95}, {"id": 7038312, "category_id": 77, "iscrowd": 0, "bbox": [150, 87, 18, 10], "area": 89}, {"id": 14344419, "category_id": 130, "iscrowd": 0, "bbox": [202, 0, 110, 37], "area": 1795}, {"id": 14802654, "category_id": 187, "iscrowd": 0, "bbox": [229, 82, 13, 16], "area": 99}, {"id": 8817292, "category_id": 190, "iscrowd": 0, "bbox": [49, 142, 451, 233], "area": 69067}, {"id": 9141105, "category_id": 197, "iscrowd": 0, "bbox": [143, 0, 226, 113], "area": 9472}, {"id": 8225156, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 56406}], "file_name": "000000176857.png", "image_id": 176857}, {"segments_info": [{"id": 3354205, "category_id": 1, "iscrowd": 0, "bbox": [357, 82, 71, 141], "area": 5576}, {"id": 3812912, "category_id": 1, "iscrowd": 0, "bbox": [302, 224, 115, 116], "area": 8112}, {"id": 3289138, "category_id": 1, "iscrowd": 0, "bbox": [166, 89, 83, 92], "area": 3416}, {"id": 10196890, "category_id": 35, "iscrowd": 0, "bbox": [244, 239, 99, 47], "area": 758}, {"id": 9473166, "category_id": 35, "iscrowd": 0, "bbox": [310, 183, 162, 70], "area": 1316}, {"id": 8881547, "category_id": 35, "iscrowd": 0, "bbox": [132, 160, 119, 31], "area": 578}, {"id": 10920612, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 359], "area": 175319}, {"id": 4540492, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 148], "area": 34250}], "file_name": "000000176901.png", "image_id": 176901}, {"segments_info": [{"id": 3687514, "category_id": 1, "iscrowd": 0, "bbox": [3, 5, 637, 470], "area": 85515}, {"id": 2700876, "category_id": 17, "iscrowd": 0, "bbox": [314, 183, 297, 178], "area": 29237}, {"id": 4018785, "category_id": 63, "iscrowd": 0, "bbox": [2, 162, 81, 244], "area": 8808}, {"id": 4877194, "category_id": 63, "iscrowd": 0, "bbox": [179, 191, 461, 289], "area": 49010}, {"id": 3095631, "category_id": 73, "iscrowd": 0, "bbox": [9, 173, 286, 241], "area": 26224}, {"id": 920846, "category_id": 82, "iscrowd": 0, "bbox": [96, 2, 109, 245], "area": 22454}, {"id": 1579289, "category_id": 93, "iscrowd": 0, "bbox": [0, 360, 393, 120], "area": 2753}, {"id": 4617385, "category_id": 112, "iscrowd": 0, "bbox": [302, 0, 87, 201], "area": 14343}, {"id": 2503014, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 62518}], "file_name": "000000177015.png", "image_id": 177015}, {"segments_info": [{"id": 5717324, "category_id": 1, "iscrowd": 0, "bbox": [168, 221, 31, 79], "area": 1278}, {"id": 4598310, "category_id": 1, "iscrowd": 0, "bbox": [173, 208, 77, 295], "area": 13602}, {"id": 8618128, "category_id": 1, "iscrowd": 0, "bbox": [46, 9, 135, 545], "area": 36017}, {"id": 7505815, "category_id": 1, "iscrowd": 0, "bbox": [142, 180, 58, 102], "area": 2512}, {"id": 8098195, "category_id": 1, "iscrowd": 0, "bbox": [349, 208, 107, 198], "area": 7838}, {"id": 4861478, "category_id": 27, "iscrowd": 0, "bbox": [304, 262, 54, 39], "area": 1531}, {"id": 5603032, "category_id": 37, "iscrowd": 0, "bbox": [346, 312, 17, 17], "area": 212}, {"id": 4928032, "category_id": 43, "iscrowd": 0, "bbox": [262, 383, 34, 104], "area": 1359}, {"id": 9339765, "category_id": 43, "iscrowd": 0, "bbox": [37, 252, 136, 129], "area": 5299}, {"id": 8496038, "category_id": 43, "iscrowd": 0, "bbox": [22, 140, 137, 69], "area": 3450}, {"id": 7166036, "category_id": 43, "iscrowd": 0, "bbox": [152, 370, 22, 61], "area": 829}, {"id": 7102292, "category_id": 138, "iscrowd": 0, "bbox": [176, 160, 127, 404], "area": 15178}, {"id": 13410416, "category_id": 145, "iscrowd": 0, "bbox": [0, 164, 640, 400], "area": 141416}, {"id": 2840388, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 116], "area": 34424}, {"id": 7833715, "category_id": 185, "iscrowd": 0, "bbox": [0, 49, 640, 241], "area": 76955}, {"id": 15132078, "category_id": 187, "iscrowd": 0, "bbox": [113, 0, 97, 24], "area": 1269}, {"id": 8830656, "category_id": 192, "iscrowd": 0, "bbox": [0, 102, 640, 36], "area": 11429}], "file_name": "000000177065.png", "image_id": 177065}, {"segments_info": [{"id": 263432, "category_id": 1, "iscrowd": 0, "bbox": [171, 0, 469, 140], "area": 48769}, {"id": 8363440, "category_id": 47, "iscrowd": 0, "bbox": [585, 147, 55, 207], "area": 5940}, {"id": 1793949, "category_id": 47, "iscrowd": 0, "bbox": [564, 111, 76, 151], "area": 6988}, {"id": 4021371, "category_id": 48, "iscrowd": 0, "bbox": [462, 141, 111, 34], "area": 1108}, {"id": 1711393, "category_id": 49, "iscrowd": 0, "bbox": [418, 138, 64, 6], "area": 205}, {"id": 4231388, "category_id": 59, "iscrowd": 0, "bbox": [97, 87, 411, 225], "area": 68643}, {"id": 12241877, "category_id": 67, "iscrowd": 0, "bbox": [0, 107, 633, 247], "area": 60379}, {"id": 13490654, "category_id": 189, "iscrowd": 0, "bbox": [0, 352, 640, 7], "area": 2183}, {"id": 8431292, "category_id": 190, "iscrowd": 0, "bbox": [0, 65, 204, 264], "area": 13457}, {"id": 9348027, "category_id": 195, "iscrowd": 0, "bbox": [397, 113, 159, 24], "area": 1371}, {"id": 6460339, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 183, 89], "area": 14177}], "file_name": "000000177213.png", "image_id": 177213}, {"segments_info": [{"id": 4408396, "category_id": 1, "iscrowd": 0, "bbox": [71, 139, 317, 114], "area": 10594}, {"id": 13160911, "category_id": 42, "iscrowd": 0, "bbox": [217, 153, 314, 154], "area": 19990}, {"id": 8748136, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 396], "area": 222426}], "file_name": "000000177357.png", "image_id": 177357}, {"segments_info": [{"id": 2903911, "category_id": 7, "iscrowd": 0, "bbox": [9, 67, 379, 418], "area": 123983}, {"id": 7370363, "category_id": 144, "iscrowd": 0, "bbox": [0, 368, 33, 272], "area": 6771}, {"id": 4474956, "category_id": 147, "iscrowd": 0, "bbox": [19, 372, 406, 268], "area": 74662}, {"id": 13086879, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 425, 277], "area": 53114}, {"id": 4278344, "category_id": 197, "iscrowd": 0, "bbox": [0, 61, 425, 313], "area": 11921}, {"id": 8618882, "category_id": 199, "iscrowd": 0, "bbox": [365, 318, 30, 22], "area": 429}], "file_name": "000000177383.png", "image_id": 177383}, {"segments_info": [{"id": 7497599, "category_id": 1, "iscrowd": 0, "bbox": [341, 82, 271, 320], "area": 38038}, {"id": 7431273, "category_id": 1, "iscrowd": 0, "bbox": [59, 118, 291, 355], "area": 44595}, {"id": 5262412, "category_id": 44, "iscrowd": 0, "bbox": [441, 145, 19, 43], "area": 588}, {"id": 3951197, "category_id": 44, "iscrowd": 0, "bbox": [473, 127, 19, 61], "area": 764}, {"id": 2827041, "category_id": 46, "iscrowd": 0, "bbox": [200, 207, 22, 56], "area": 671}, {"id": 6183257, "category_id": 46, "iscrowd": 0, "bbox": [308, 230, 23, 32], "area": 612}, {"id": 2765639, "category_id": 46, "iscrowd": 0, "bbox": [360, 203, 19, 44], "area": 436}, {"id": 2632251, "category_id": 48, "iscrowd": 0, "bbox": [264, 248, 49, 17], "area": 147}, {"id": 2237745, "category_id": 50, "iscrowd": 0, "bbox": [405, 73, 13, 58], "area": 278}, {"id": 2699071, "category_id": 50, "iscrowd": 0, "bbox": [423, 73, 15, 55], "area": 247}, {"id": 2895939, "category_id": 51, "iscrowd": 0, "bbox": [256, 199, 61, 23], "area": 544}, {"id": 1646915, "category_id": 51, "iscrowd": 0, "bbox": [231, 217, 83, 47], "area": 2566}, {"id": 1212895, "category_id": 55, "iscrowd": 0, "bbox": [276, 203, 17, 9], "area": 121}, {"id": 1929698, "category_id": 55, "iscrowd": 0, "bbox": [262, 199, 18, 13], "area": 128}, {"id": 1456771, "category_id": 55, "iscrowd": 0, "bbox": [292, 209, 5, 4], "area": 17}, {"id": 3959195, "category_id": 59, "iscrowd": 0, "bbox": [320, 259, 36, 14], "area": 297}, {"id": 5473196, "category_id": 59, "iscrowd": 0, "bbox": [355, 262, 32, 11], "area": 279}, {"id": 4074017, "category_id": 62, "iscrowd": 0, "bbox": [47, 277, 225, 195], "area": 858}, {"id": 2760994, "category_id": 62, "iscrowd": 0, "bbox": [323, 203, 44, 35], "area": 1023}, {"id": 3221806, "category_id": 62, "iscrowd": 0, "bbox": [360, 264, 273, 209], "area": 15501}, {"id": 2699056, "category_id": 67, "iscrowd": 0, "bbox": [193, 199, 254, 176], "area": 10790}, {"id": 3750474, "category_id": 107, "iscrowd": 0, "bbox": [373, 143, 226, 60], "area": 2872}, {"id": 6840429, "category_id": 118, "iscrowd": 0, "bbox": [276, 271, 364, 207], "area": 22406}, {"id": 5794437, "category_id": 130, "iscrowd": 0, "bbox": [557, 0, 22, 19], "area": 313}, {"id": 5270414, "category_id": 156, "iscrowd": 0, "bbox": [523, 14, 22, 23], "area": 340}, {"id": 7505313, "category_id": 176, "iscrowd": 0, "bbox": [369, 49, 232, 127], "area": 15117}, {"id": 10923197, "category_id": 188, "iscrowd": 0, "bbox": [371, 0, 231, 253], "area": 15217}, {"id": 3429721, "category_id": 196, "iscrowd": 0, "bbox": [329, 228, 45, 17], "area": 211}, {"id": 10592682, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 478], "area": 88002}], "file_name": "000000177489.png", "image_id": 177489}, {"segments_info": [{"id": 5002319, "category_id": 1, "iscrowd": 0, "bbox": [261, 0, 220, 302], "area": 27083}, {"id": 14016213, "category_id": 42, "iscrowd": 0, "bbox": [0, 5, 316, 422], "area": 99289}, {"id": 9280137, "category_id": 154, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 120620}, {"id": 11515034, "category_id": 155, "iscrowd": 0, "bbox": [426, 80, 214, 38], "area": 4353}, {"id": 10198920, "category_id": 187, "iscrowd": 0, "bbox": [370, 0, 270, 91], "area": 21265}], "file_name": "000000177539.png", "image_id": 177539}, {"segments_info": [{"id": 1123638, "category_id": 48, "iscrowd": 0, "bbox": [579, 105, 60, 54], "area": 1185}, {"id": 1583440, "category_id": 53, "iscrowd": 0, "bbox": [182, 63, 89, 58], "area": 4194}, {"id": 280774, "category_id": 57, "iscrowd": 0, "bbox": [292, 209, 58, 34], "area": 1424}, {"id": 739515, "category_id": 57, "iscrowd": 0, "bbox": [79, 216, 85, 42], "area": 2110}, {"id": 345517, "category_id": 57, "iscrowd": 0, "bbox": [374, 203, 58, 57], "area": 1109}, {"id": 534375, "category_id": 57, "iscrowd": 0, "bbox": [367, 54, 50, 55], "area": 1314}, {"id": 539050, "category_id": 57, "iscrowd": 0, "bbox": [358, 167, 35, 52], "area": 1197}, {"id": 203370, "category_id": 57, "iscrowd": 0, "bbox": [226, 111, 36, 29], "area": 572}, {"id": 343470, "category_id": 57, "iscrowd": 0, "bbox": [122, 239, 92, 84], "area": 5106}, {"id": 79808, "category_id": 57, "iscrowd": 0, "bbox": [589, 291, 51, 42], "area": 1601}, {"id": 674733, "category_id": 57, "iscrowd": 0, "bbox": [377, 113, 40, 39], "area": 855}, {"id": 2318477, "category_id": 196, "iscrowd": 0, "bbox": [85, 34, 555, 375], "area": 134818}], "file_name": "000000177714.png", "image_id": 177714}, {"segments_info": [{"id": 1643798, "category_id": 1, "iscrowd": 0, "bbox": [117, 295, 47, 119], "area": 2380}, {"id": 1511182, "category_id": 1, "iscrowd": 0, "bbox": [310, 294, 73, 213], "area": 9392}, {"id": 1645345, "category_id": 1, "iscrowd": 0, "bbox": [1, 354, 70, 286], "area": 10614}, {"id": 2761758, "category_id": 1, "iscrowd": 0, "bbox": [12, 293, 42, 96], "area": 1955}, {"id": 2171169, "category_id": 2, "iscrowd": 0, "bbox": [464, 377, 16, 51], "area": 608}, {"id": 6774103, "category_id": 3, "iscrowd": 0, "bbox": [141, 297, 36, 25], "area": 332}, {"id": 4604250, "category_id": 3, "iscrowd": 0, "bbox": [160, 306, 55, 32], "area": 1337}, {"id": 6178879, "category_id": 3, "iscrowd": 0, "bbox": [259, 303, 54, 20], "area": 590}, {"id": 1380112, "category_id": 27, "iscrowd": 0, "bbox": [127, 308, 30, 42], "area": 980}, {"id": 1643026, "category_id": 27, "iscrowd": 0, "bbox": [148, 304, 7, 29], "area": 82}, {"id": 4931391, "category_id": 28, "iscrowd": 0, "bbox": [86, 274, 76, 22], "area": 955}, {"id": 1445905, "category_id": 28, "iscrowd": 0, "bbox": [298, 374, 30, 88], "area": 1015}, {"id": 5720394, "category_id": 28, "iscrowd": 0, "bbox": [267, 234, 147, 62], "area": 4498}, {"id": 2235683, "category_id": 28, "iscrowd": 0, "bbox": [156, 345, 19, 53], "area": 533}, {"id": 2826016, "category_id": 28, "iscrowd": 0, "bbox": [290, 381, 26, 67], "area": 464}, {"id": 8882832, "category_id": 28, "iscrowd": 0, "bbox": [36, 282, 45, 14], "area": 359}, {"id": 1183247, "category_id": 31, "iscrowd": 0, "bbox": [368, 359, 28, 67], "area": 1171}, {"id": 2368813, "category_id": 62, "iscrowd": 0, "bbox": [419, 375, 39, 58], "area": 653}, {"id": 4998983, "category_id": 67, "iscrowd": 0, "bbox": [388, 375, 62, 70], "area": 1017}, {"id": 7234919, "category_id": 130, "iscrowd": 0, "bbox": [216, 160, 15, 24], "area": 195}, {"id": 4802382, "category_id": 149, "iscrowd": 0, "bbox": [196, 306, 41, 36], "area": 701}, {"id": 4078916, "category_id": 181, "iscrowd": 0, "bbox": [138, 190, 14, 23], "area": 263}, {"id": 3685694, "category_id": 184, "iscrowd": 0, "bbox": [175, 145, 305, 200], "area": 17213}, {"id": 3617844, "category_id": 185, "iscrowd": 0, "bbox": [370, 319, 110, 115], "area": 6291}, {"id": 16643041, "category_id": 187, "iscrowd": 0, "bbox": [99, 0, 381, 219], "area": 60868}, {"id": 6971229, "category_id": 191, "iscrowd": 0, "bbox": [0, 296, 480, 344], "area": 111811}, {"id": 2376249, "category_id": 193, "iscrowd": 0, "bbox": [372, 318, 25, 15], "area": 285}, {"id": 5594473, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 343], "area": 64398}], "file_name": "000000177861.png", "image_id": 177861}, {"segments_info": [{"id": 9274747, "category_id": 3, "iscrowd": 0, "bbox": [580, 199, 34, 23], "area": 365}, {"id": 11711402, "category_id": 3, "iscrowd": 0, "bbox": [525, 203, 55, 19], "area": 577}, {"id": 6511713, "category_id": 6, "iscrowd": 0, "bbox": [70, 144, 463, 137], "area": 54883}, {"id": 10724258, "category_id": 149, "iscrowd": 0, "bbox": [0, 269, 640, 159], "area": 94122}, {"id": 9280404, "category_id": 184, "iscrowd": 0, "bbox": [0, 14, 597, 247], "area": 33456}, {"id": 16645629, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 629, 124], "area": 59100}, {"id": 7829117, "category_id": 191, "iscrowd": 0, "bbox": [0, 252, 640, 38], "area": 4242}, {"id": 9736846, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 276], "area": 19270}, {"id": 8946818, "category_id": 199, "iscrowd": 0, "bbox": [527, 213, 64, 55], "area": 2572}], "file_name": "000000177893.png", "image_id": 177893}, {"segments_info": [{"id": 2893357, "category_id": 1, "iscrowd": 0, "bbox": [404, 148, 41, 140], "area": 3388}, {"id": 5524835, "category_id": 1, "iscrowd": 0, "bbox": [353, 154, 52, 185], "area": 5499}, {"id": 3682102, "category_id": 1, "iscrowd": 0, "bbox": [189, 145, 45, 75], "area": 1934}, {"id": 6051432, "category_id": 1, "iscrowd": 0, "bbox": [228, 165, 43, 113], "area": 2485}, {"id": 4736847, "category_id": 1, "iscrowd": 0, "bbox": [464, 151, 66, 127], "area": 3566}, {"id": 5525598, "category_id": 1, "iscrowd": 0, "bbox": [392, 151, 19, 56], "area": 444}, {"id": 5719607, "category_id": 3, "iscrowd": 0, "bbox": [555, 168, 46, 39], "area": 1305}, {"id": 6441016, "category_id": 3, "iscrowd": 0, "bbox": [428, 163, 37, 41], "area": 749}, {"id": 4865842, "category_id": 3, "iscrowd": 0, "bbox": [544, 161, 42, 34], "area": 563}, {"id": 11051414, "category_id": 3, "iscrowd": 0, "bbox": [299, 170, 75, 60], "area": 3147}, {"id": 7631210, "category_id": 3, "iscrowd": 0, "bbox": [458, 158, 97, 74], "area": 3801}, {"id": 12826528, "category_id": 3, "iscrowd": 0, "bbox": [304, 166, 49, 30], "area": 467}, {"id": 3879737, "category_id": 4, "iscrowd": 0, "bbox": [70, 197, 258, 170], "area": 20100}, {"id": 4735039, "category_id": 4, "iscrowd": 0, "bbox": [183, 188, 52, 87], "area": 2239}, {"id": 2893351, "category_id": 8, "iscrowd": 0, "bbox": [258, 148, 71, 49], "area": 2018}, {"id": 7103072, "category_id": 8, "iscrowd": 0, "bbox": [0, 102, 257, 129], "area": 23548}, {"id": 10325126, "category_id": 8, "iscrowd": 0, "bbox": [422, 153, 18, 13], "area": 147}, {"id": 4698524, "category_id": 44, "iscrowd": 0, "bbox": [571, 283, 10, 25], "area": 188}, {"id": 7561885, "category_id": 92, "iscrowd": 0, "bbox": [320, 238, 29, 38], "area": 637}, {"id": 4798819, "category_id": 119, "iscrowd": 0, "bbox": [0, 52, 113, 60], "area": 3623}, {"id": 7433323, "category_id": 128, "iscrowd": 0, "bbox": [376, 122, 134, 59], "area": 3955}, {"id": 6906982, "category_id": 133, "iscrowd": 0, "bbox": [252, 211, 19, 24], "area": 179}, {"id": 8486778, "category_id": 149, "iscrowd": 0, "bbox": [0, 177, 640, 303], "area": 111912}, {"id": 2968124, "category_id": 184, "iscrowd": 0, "bbox": [255, 0, 385, 217], "area": 32018}, {"id": 16382178, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 477, 137], "area": 43056}, {"id": 8290693, "category_id": 191, "iscrowd": 0, "bbox": [0, 195, 640, 110], "area": 20657}, {"id": 7562082, "category_id": 197, "iscrowd": 0, "bbox": [0, 32, 640, 153], "area": 7121}], "file_name": "000000177934.png", "image_id": 177934}, {"segments_info": [{"id": 4409677, "category_id": 49, "iscrowd": 0, "bbox": [78, 189, 27, 29], "area": 193}, {"id": 3554627, "category_id": 49, "iscrowd": 0, "bbox": [81, 172, 31, 36], "area": 299}, {"id": 2698028, "category_id": 49, "iscrowd": 0, "bbox": [43, 202, 58, 45], "area": 367}, {"id": 3093302, "category_id": 49, "iscrowd": 0, "bbox": [80, 235, 20, 16], "area": 119}, {"id": 2237735, "category_id": 49, "iscrowd": 0, "bbox": [70, 233, 22, 18], "area": 81}, {"id": 1908513, "category_id": 49, "iscrowd": 0, "bbox": [47, 191, 49, 38], "area": 525}, {"id": 3817800, "category_id": 49, "iscrowd": 0, "bbox": [79, 199, 22, 25], "area": 150}, {"id": 3356734, "category_id": 49, "iscrowd": 0, "bbox": [80, 182, 28, 30], "area": 231}, {"id": 3819100, "category_id": 50, "iscrowd": 0, "bbox": [5, 153, 20, 31], "area": 429}, {"id": 3619659, "category_id": 50, "iscrowd": 0, "bbox": [53, 176, 24, 23], "area": 225}, {"id": 2699313, "category_id": 50, "iscrowd": 0, "bbox": [47, 164, 9, 12], "area": 68}, {"id": 7961210, "category_id": 79, "iscrowd": 0, "bbox": [0, 261, 452, 379], "area": 145566}, {"id": 7637660, "category_id": 85, "iscrowd": 0, "bbox": [278, 159, 35, 35], "area": 919}, {"id": 3487544, "category_id": 107, "iscrowd": 0, "bbox": [0, 264, 108, 77], "area": 3825}, {"id": 8423561, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 130, 505], "area": 15469}, {"id": 5328462, "category_id": 190, "iscrowd": 0, "bbox": [0, 546, 152, 94], "area": 5321}, {"id": 6260373, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 252], "area": 54567}], "file_name": "000000177935.png", "image_id": 177935}, {"segments_info": [{"id": 11450560, "category_id": 44, "iscrowd": 0, "bbox": [90, 303, 19, 51], "area": 795}, {"id": 1844273, "category_id": 46, "iscrowd": 0, "bbox": [251, 221, 27, 88], "area": 481}, {"id": 2568255, "category_id": 47, "iscrowd": 0, "bbox": [253, 210, 21, 13], "area": 217}, {"id": 2633529, "category_id": 47, "iscrowd": 0, "bbox": [277, 221, 24, 43], "area": 855}, {"id": 3028292, "category_id": 47, "iscrowd": 0, "bbox": [274, 212, 20, 12], "area": 201}, {"id": 2370357, "category_id": 47, "iscrowd": 0, "bbox": [256, 223, 22, 39], "area": 722}, {"id": 11387610, "category_id": 81, "iscrowd": 0, "bbox": [126, 306, 155, 88], "area": 10435}, {"id": 6784424, "category_id": 89, "iscrowd": 0, "bbox": [351, 37, 24, 69], "area": 837}, {"id": 5339540, "category_id": 89, "iscrowd": 0, "bbox": [184, 35, 33, 68], "area": 902}, {"id": 2439751, "category_id": 89, "iscrowd": 0, "bbox": [334, 41, 15, 21], "area": 243}, {"id": 1057073, "category_id": 107, "iscrowd": 0, "bbox": [0, 211, 375, 289], "area": 67346}, {"id": 1916512, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 357, 309], "area": 84773}, {"id": 927298, "category_id": 188, "iscrowd": 0, "bbox": [175, 322, 200, 178], "area": 12705}, {"id": 661802, "category_id": 190, "iscrowd": 0, "bbox": [344, 474, 31, 26], "area": 634}, {"id": 7115703, "category_id": 199, "iscrowd": 0, "bbox": [335, 0, 40, 240], "area": 5817}], "file_name": "000000178028.png", "image_id": 178028}, {"segments_info": [{"id": 2630434, "category_id": 47, "iscrowd": 0, "bbox": [90, 138, 53, 127], "area": 5619}, {"id": 4738114, "category_id": 47, "iscrowd": 0, "bbox": [461, 163, 82, 92], "area": 4693}, {"id": 10585967, "category_id": 73, "iscrowd": 0, "bbox": [92, 77, 450, 331], "area": 90505}, {"id": 11974323, "category_id": 76, "iscrowd": 0, "bbox": [133, 279, 364, 65], "area": 18772}, {"id": 11574956, "category_id": 84, "iscrowd": 0, "bbox": [82, 29, 11, 32], "area": 193}, {"id": 8416164, "category_id": 84, "iscrowd": 0, "bbox": [88, 30, 12, 30], "area": 102}, {"id": 9406859, "category_id": 84, "iscrowd": 0, "bbox": [75, 30, 10, 31], "area": 200}, {"id": 4669762, "category_id": 100, "iscrowd": 0, "bbox": [475, 186, 165, 241], "area": 23555}, {"id": 10653577, "category_id": 188, "iscrowd": 0, "bbox": [3, 0, 637, 153], "area": 23839}, {"id": 2764343, "category_id": 189, "iscrowd": 0, "bbox": [0, 221, 594, 206], "area": 34484}, {"id": 8155531, "category_id": 195, "iscrowd": 0, "bbox": [0, 129, 640, 98], "area": 6004}, {"id": 8947849, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 597, 137], "area": 15971}], "file_name": "000000178469.png", "image_id": 178469}, {"segments_info": [{"id": 2967406, "category_id": 22, "iscrowd": 0, "bbox": [0, 274, 26, 92], "area": 1966}, {"id": 3429768, "category_id": 22, "iscrowd": 0, "bbox": [209, 286, 30, 33], "area": 569}, {"id": 2046309, "category_id": 22, "iscrowd": 0, "bbox": [236, 239, 177, 187], "area": 17580}, {"id": 6913949, "category_id": 184, "iscrowd": 0, "bbox": [0, 163, 446, 210], "area": 60365}, {"id": 14342875, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 446, 281], "area": 82388}, {"id": 2839712, "category_id": 194, "iscrowd": 0, "bbox": [0, 347, 446, 293], "area": 122286}], "file_name": "000000178618.png", "image_id": 178618}, {"segments_info": [{"id": 8615295, "category_id": 1, "iscrowd": 0, "bbox": [210, 223, 11, 12], "area": 83}, {"id": 9273483, "category_id": 1, "iscrowd": 0, "bbox": [257, 228, 10, 12], "area": 79}, {"id": 6253980, "category_id": 1, "iscrowd": 0, "bbox": [177, 221, 6, 8], "area": 31}, {"id": 8814725, "category_id": 1, "iscrowd": 0, "bbox": [214, 235, 10, 9], "area": 45}, {"id": 4362409, "category_id": 1, "iscrowd": 0, "bbox": [227, 241, 9, 16], "area": 96}, {"id": 2170403, "category_id": 1, "iscrowd": 0, "bbox": [375, 194, 10, 14], "area": 77}, {"id": 8152143, "category_id": 1, "iscrowd": 0, "bbox": [248, 228, 11, 16], "area": 99}, {"id": 10124914, "category_id": 1, "iscrowd": 0, "bbox": [187, 219, 7, 13], "area": 70}, {"id": 8877128, "category_id": 1, "iscrowd": 0, "bbox": [233, 231, 6, 9], "area": 43}, {"id": 4091793, "category_id": 9, "iscrowd": 0, "bbox": [169, 164, 219, 124], "area": 15482}, {"id": 8357268, "category_id": 95, "iscrowd": 0, "bbox": [184, 63, 298, 71], "area": 9082}, {"id": 8026220, "category_id": 148, "iscrowd": 0, "bbox": [0, 101, 640, 327], "area": 165668}, {"id": 16645629, "category_id": 187, "iscrowd": 0, "bbox": [234, 0, 159, 70], "area": 4208}, {"id": 10398643, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 225], "area": 78708}], "file_name": "000000178744.png", "image_id": 178744}, {"segments_info": [{"id": 329489, "category_id": 1, "iscrowd": 0, "bbox": [322, 244, 52, 107], "area": 1890}, {"id": 461357, "category_id": 1, "iscrowd": 0, "bbox": [459, 248, 40, 92], "area": 1674}, {"id": 657705, "category_id": 4, "iscrowd": 0, "bbox": [451, 283, 59, 72], "area": 1692}, {"id": 920605, "category_id": 4, "iscrowd": 0, "bbox": [322, 283, 47, 77], "area": 1580}, {"id": 4683749, "category_id": 10, "iscrowd": 0, "bbox": [566, 200, 17, 16], "area": 229}, {"id": 133663, "category_id": 10, "iscrowd": 0, "bbox": [504, 193, 10, 23], "area": 203}, {"id": 3687069, "category_id": 10, "iscrowd": 0, "bbox": [501, 56, 13, 41], "area": 505}, {"id": 203633, "category_id": 10, "iscrowd": 0, "bbox": [562, 184, 14, 19], "area": 197}, {"id": 2633789, "category_id": 10, "iscrowd": 0, "bbox": [472, 62, 21, 51], "area": 843}, {"id": 2573978, "category_id": 130, "iscrowd": 0, "bbox": [80, 174, 382, 72], "area": 2191}, {"id": 790303, "category_id": 149, "iscrowd": 0, "bbox": [0, 267, 640, 160], "area": 76982}, {"id": 4332831, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 86], "area": 33472}, {"id": 529452, "category_id": 197, "iscrowd": 0, "bbox": [0, 60, 640, 281], "area": 133931}], "file_name": "000000178982.png", "image_id": 178982}, {"segments_info": [{"id": 1390991, "category_id": 1, "iscrowd": 0, "bbox": [15, 2, 334, 369], "area": 78439}, {"id": 725313, "category_id": 77, "iscrowd": 0, "bbox": [200, 135, 63, 99], "area": 4409}, {"id": 4824269, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 102393}], "file_name": "000000179112.png", "image_id": 179112}, {"segments_info": [{"id": 1849434, "category_id": 1, "iscrowd": 0, "bbox": [446, 43, 194, 431], "area": 55135}, {"id": 1386818, "category_id": 1, "iscrowd": 0, "bbox": [276, 0, 285, 467], "area": 60782}, {"id": 397863, "category_id": 1, "iscrowd": 0, "bbox": [0, 4, 191, 273], "area": 33378}, {"id": 464436, "category_id": 1, "iscrowd": 0, "bbox": [110, 50, 170, 306], "area": 24930}, {"id": 727590, "category_id": 47, "iscrowd": 0, "bbox": [293, 272, 39, 65], "area": 2018}, {"id": 1725344, "category_id": 59, "iscrowd": 0, "bbox": [82, 419, 278, 57], "area": 10075}, {"id": 398632, "category_id": 67, "iscrowd": 0, "bbox": [206, 293, 270, 139], "area": 12020}, {"id": 531770, "category_id": 100, "iscrowd": 0, "bbox": [0, 173, 415, 307], "area": 50465}, {"id": 992052, "category_id": 189, "iscrowd": 0, "bbox": [416, 370, 16, 23], "area": 57}, {"id": 8758452, "category_id": 195, "iscrowd": 0, "bbox": [311, 353, 109, 66], "area": 4841}, {"id": 1660834, "category_id": 196, "iscrowd": 0, "bbox": [92, 466, 273, 14], "area": 1338}], "file_name": "000000179141.png", "image_id": 179141}, {"segments_info": [{"id": 8617598, "category_id": 1, "iscrowd": 0, "bbox": [391, 112, 25, 70], "area": 1020}, {"id": 7301744, "category_id": 1, "iscrowd": 0, "bbox": [344, 115, 12, 29], "area": 197}, {"id": 4607580, "category_id": 1, "iscrowd": 0, "bbox": [309, 32, 26, 64], "area": 788}, {"id": 1382173, "category_id": 1, "iscrowd": 0, "bbox": [134, 114, 16, 27], "area": 151}, {"id": 1973794, "category_id": 1, "iscrowd": 0, "bbox": [311, 96, 27, 57], "area": 1065}, {"id": 5983568, "category_id": 1, "iscrowd": 0, "bbox": [360, 114, 19, 62], "area": 737}, {"id": 4934227, "category_id": 1, "iscrowd": 0, "bbox": [414, 115, 14, 56], "area": 537}, {"id": 4079175, "category_id": 1, "iscrowd": 0, "bbox": [334, 117, 17, 50], "area": 480}, {"id": 12352342, "category_id": 28, "iscrowd": 0, "bbox": [81, 69, 113, 39], "area": 2726}, {"id": 8489614, "category_id": 33, "iscrowd": 0, "bbox": [136, 178, 69, 28], "area": 1489}, {"id": 2371129, "category_id": 33, "iscrowd": 0, "bbox": [233, 159, 64, 24], "area": 1283}, {"id": 7167572, "category_id": 33, "iscrowd": 0, "bbox": [1, 416, 131, 104], "area": 3301}, {"id": 3750719, "category_id": 33, "iscrowd": 0, "bbox": [47, 223, 89, 31], "area": 1978}, {"id": 1448479, "category_id": 33, "iscrowd": 0, "bbox": [66, 255, 59, 70], "area": 2107}, {"id": 8884114, "category_id": 33, "iscrowd": 0, "bbox": [133, 135, 62, 28], "area": 1237}, {"id": 2435112, "category_id": 33, "iscrowd": 0, "bbox": [101, 270, 104, 53], "area": 4747}, {"id": 2109241, "category_id": 33, "iscrowd": 0, "bbox": [188, 221, 54, 39], "area": 1812}, {"id": 3618612, "category_id": 33, "iscrowd": 0, "bbox": [122, 256, 60, 16], "area": 803}, {"id": 5521713, "category_id": 33, "iscrowd": 0, "bbox": [197, 266, 105, 60], "area": 5109}, {"id": 2563869, "category_id": 33, "iscrowd": 0, "bbox": [138, 154, 62, 29], "area": 1253}, {"id": 6381414, "category_id": 33, "iscrowd": 0, "bbox": [1, 319, 97, 68], "area": 5659}, {"id": 6971484, "category_id": 33, "iscrowd": 0, "bbox": [3, 460, 135, 174], "area": 20055}, {"id": 5262671, "category_id": 33, "iscrowd": 1, "bbox": [0, 56, 428, 480], "area": 53437}, {"id": 12630452, "category_id": 185, "iscrowd": 0, "bbox": [0, 85, 139, 70], "area": 6490}, {"id": 14734540, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 428, 90], "area": 9698}, {"id": 10330790, "category_id": 191, "iscrowd": 0, "bbox": [0, 132, 428, 508], "area": 113925}, {"id": 8880764, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 428, 163], "area": 30265}], "file_name": "000000179174.png", "image_id": 179174}, {"segments_info": [{"id": 4287131, "category_id": 59, "iscrowd": 0, "bbox": [0, 198, 338, 273], "area": 72361}, {"id": 11712958, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 139, 184], "area": 10273}], "file_name": "000000179214.png", "image_id": 179214}, {"segments_info": [{"id": 1710103, "category_id": 1, "iscrowd": 0, "bbox": [585, 159, 5, 11], "area": 33}, {"id": 6053985, "category_id": 1, "iscrowd": 0, "bbox": [390, 103, 7, 14], "area": 55}, {"id": 6439467, "category_id": 3, "iscrowd": 0, "bbox": [224, 164, 62, 25], "area": 1129}, {"id": 2451841, "category_id": 6, "iscrowd": 0, "bbox": [286, 150, 152, 110], "area": 13857}, {"id": 8023137, "category_id": 8, "iscrowd": 0, "bbox": [462, 158, 57, 35], "area": 929}, {"id": 3488305, "category_id": 14, "iscrowd": 0, "bbox": [284, 162, 6, 16], "area": 79}, {"id": 3025451, "category_id": 15, "iscrowd": 0, "bbox": [438, 208, 9, 26], "area": 163}, {"id": 3552825, "category_id": 15, "iscrowd": 0, "bbox": [452, 215, 32, 20], "area": 373}, {"id": 10327440, "category_id": 149, "iscrowd": 0, "bbox": [37, 110, 603, 316], "area": 102098}, {"id": 2112299, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 123038}, {"id": 14998484, "category_id": 187, "iscrowd": 0, "bbox": [140, 0, 500, 45], "area": 11489}, {"id": 9077892, "category_id": 191, "iscrowd": 0, "bbox": [149, 219, 491, 169], "area": 11325}, {"id": 3699043, "category_id": 193, "iscrowd": 0, "bbox": [553, 213, 87, 29], "area": 1561}, {"id": 6380631, "category_id": 199, "iscrowd": 0, "bbox": [360, 138, 142, 102], "area": 3941}], "file_name": "000000179265.png", "image_id": 179265}, {"segments_info": [{"id": 5815710, "category_id": 37, "iscrowd": 0, "bbox": [206, 240, 155, 164], "area": 19156}, {"id": 3696201, "category_id": 43, "iscrowd": 0, "bbox": [16, 21, 412, 596], "area": 179826}, {"id": 3434569, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 428, 640], "area": 74580}], "file_name": "000000179285.png", "image_id": 179285}, {"segments_info": [{"id": 2041125, "category_id": 18, "iscrowd": 0, "bbox": [122, 52, 356, 495], "area": 96991}, {"id": 14804452, "category_id": 72, "iscrowd": 0, "bbox": [62, 2, 418, 259], "area": 67377}, {"id": 5535623, "category_id": 76, "iscrowd": 0, "bbox": [389, 430, 91, 137], "area": 9240}, {"id": 3556924, "category_id": 84, "iscrowd": 0, "bbox": [1, 116, 92, 155], "area": 6490}, {"id": 3821661, "category_id": 84, "iscrowd": 0, "bbox": [0, 286, 141, 201], "area": 11847}, {"id": 265755, "category_id": 189, "iscrowd": 0, "bbox": [0, 412, 480, 228], "area": 62662}, {"id": 4874603, "category_id": 195, "iscrowd": 0, "bbox": [0, 123, 144, 404], "area": 8705}, {"id": 4941949, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 87, 275], "area": 10881}], "file_name": "000000179392.png", "image_id": 179392}, {"segments_info": [{"id": 6710901, "category_id": 1, "iscrowd": 0, "bbox": [81, 134, 49, 56], "area": 1489}, {"id": 8026502, "category_id": 1, "iscrowd": 0, "bbox": [19, 130, 64, 126], "area": 5517}, {"id": 4275021, "category_id": 1, "iscrowd": 0, "bbox": [64, 195, 67, 64], "area": 2360}, {"id": 8621495, "category_id": 1, "iscrowd": 0, "bbox": [184, 157, 26, 32], "area": 591}, {"id": 7635618, "category_id": 1, "iscrowd": 0, "bbox": [141, 225, 235, 358], "area": 33175}, {"id": 5198700, "category_id": 1, "iscrowd": 0, "bbox": [225, 171, 55, 59], "area": 1529}, {"id": 5856620, "category_id": 1, "iscrowd": 0, "bbox": [455, 199, 57, 221], "area": 3278}, {"id": 5588817, "category_id": 1, "iscrowd": 0, "bbox": [174, 143, 72, 105], "area": 3628}, {"id": 8290957, "category_id": 1, "iscrowd": 0, "bbox": [265, 132, 16, 75], "area": 711}, {"id": 6247007, "category_id": 1, "iscrowd": 0, "bbox": [334, 114, 71, 289], "area": 12285}, {"id": 11909315, "category_id": 1, "iscrowd": 0, "bbox": [109, 150, 71, 109], "area": 4575}, {"id": 6053473, "category_id": 1, "iscrowd": 0, "bbox": [229, 126, 49, 59], "area": 1284}, {"id": 6908533, "category_id": 1, "iscrowd": 1, "bbox": [0, 159, 41, 106], "area": 1543}, {"id": 6344642, "category_id": 37, "iscrowd": 0, "bbox": [182, 340, 26, 24], "area": 470}, {"id": 3976613, "category_id": 37, "iscrowd": 0, "bbox": [397, 250, 12, 14], "area": 124}, {"id": 10855080, "category_id": 43, "iscrowd": 0, "bbox": [250, 296, 49, 90], "area": 3242}, {"id": 5670788, "category_id": 145, "iscrowd": 0, "bbox": [0, 373, 512, 267], "area": 106416}, {"id": 3037264, "category_id": 184, "iscrowd": 0, "bbox": [31, 0, 398, 100], "area": 9066}, {"id": 13352881, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 512, 97], "area": 21872}, {"id": 3686177, "category_id": 199, "iscrowd": 0, "bbox": [0, 13, 512, 404], "area": 112701}], "file_name": "000000179487.png", "image_id": 179487}, {"segments_info": [{"id": 8814224, "category_id": 1, "iscrowd": 0, "bbox": [209, 0, 76, 63], "area": 2910}, {"id": 6252391, "category_id": 1, "iscrowd": 0, "bbox": [381, 1, 130, 76], "area": 6939}, {"id": 7628901, "category_id": 1, "iscrowd": 0, "bbox": [569, 0, 71, 79], "area": 1887}, {"id": 11512769, "category_id": 1, "iscrowd": 0, "bbox": [281, 0, 70, 67], "area": 2562}, {"id": 10060153, "category_id": 1, "iscrowd": 0, "bbox": [497, 0, 104, 76], "area": 6098}, {"id": 7434659, "category_id": 1, "iscrowd": 0, "bbox": [247, 0, 32, 44], "area": 1008}, {"id": 5396592, "category_id": 1, "iscrowd": 0, "bbox": [161, 96, 240, 331], "area": 26553}, {"id": 3948405, "category_id": 1, "iscrowd": 0, "bbox": [1, 18, 103, 400], "area": 29750}, {"id": 8553621, "category_id": 1, "iscrowd": 0, "bbox": [328, 11, 50, 60], "area": 1993}, {"id": 2566734, "category_id": 1, "iscrowd": 0, "bbox": [110, 0, 102, 401], "area": 22632}, {"id": 7373433, "category_id": 43, "iscrowd": 0, "bbox": [126, 379, 75, 48], "area": 2846}, {"id": 9673623, "category_id": 43, "iscrowd": 0, "bbox": [147, 289, 92, 92], "area": 1846}, {"id": 6510416, "category_id": 44, "iscrowd": 0, "bbox": [247, 387, 21, 40], "area": 614}, {"id": 6774106, "category_id": 44, "iscrowd": 0, "bbox": [230, 384, 17, 43], "area": 603}, {"id": 13350295, "category_id": 62, "iscrowd": 0, "bbox": [370, 18, 25, 19], "area": 318}, {"id": 7689266, "category_id": 62, "iscrowd": 0, "bbox": [275, 13, 31, 52], "area": 934}, {"id": 7170139, "category_id": 62, "iscrowd": 0, "bbox": [415, 277, 153, 150], "area": 7996}, {"id": 12360556, "category_id": 62, "iscrowd": 0, "bbox": [0, 1, 80, 48], "area": 1950}, {"id": 11171115, "category_id": 62, "iscrowd": 0, "bbox": [85, 1, 37, 39], "area": 1001}, {"id": 9660725, "category_id": 62, "iscrowd": 0, "bbox": [474, 20, 41, 55], "area": 821}, {"id": 8022110, "category_id": 62, "iscrowd": 0, "bbox": [205, 192, 155, 212], "area": 5789}, {"id": 7045233, "category_id": 145, "iscrowd": 0, "bbox": [80, 368, 478, 59], "area": 8714}, {"id": 12824484, "category_id": 168, "iscrowd": 0, "bbox": [188, 49, 223, 133], "area": 13922}, {"id": 8742737, "category_id": 197, "iscrowd": 0, "bbox": [348, 50, 40, 23], "area": 337}], "file_name": "000000179642.png", "image_id": 179642}, {"segments_info": [{"id": 6975595, "category_id": 85, "iscrowd": 0, "bbox": [207, 162, 93, 93], "area": 6350}, {"id": 5792093, "category_id": 149, "iscrowd": 0, "bbox": [609, 421, 31, 59], "area": 1499}, {"id": 1582638, "category_id": 177, "iscrowd": 0, "bbox": [69, 373, 419, 107], "area": 41662}, {"id": 6579809, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 224820}, {"id": 16184302, "category_id": 187, "iscrowd": 0, "bbox": [72, 0, 543, 293], "area": 27830}], "file_name": "000000179653.png", "image_id": 179653}, {"segments_info": [{"id": 6773852, "category_id": 4, "iscrowd": 0, "bbox": [94, 7, 510, 381], "area": 83982}, {"id": 9340801, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 585, 165], "area": 27426}, {"id": 5858649, "category_id": 184, "iscrowd": 0, "bbox": [163, 0, 477, 106], "area": 38354}, {"id": 14734543, "category_id": 187, "iscrowd": 0, "bbox": [623, 0, 17, 21], "area": 210}, {"id": 6977390, "category_id": 193, "iscrowd": 0, "bbox": [0, 74, 640, 406], "area": 156472}], "file_name": "000000179765.png", "image_id": 179765}, {"segments_info": [{"id": 5134677, "category_id": 1, "iscrowd": 0, "bbox": [432, 146, 85, 148], "area": 7201}, {"id": 9343118, "category_id": 1, "iscrowd": 0, "bbox": [473, 182, 167, 203], "area": 13539}, {"id": 4864305, "category_id": 1, "iscrowd": 0, "bbox": [500, 298, 137, 182], "area": 18375}, {"id": 3488299, "category_id": 1, "iscrowd": 0, "bbox": [361, 117, 89, 109], "area": 4875}, {"id": 5595487, "category_id": 1, "iscrowd": 0, "bbox": [526, 135, 61, 125], "area": 4360}, {"id": 8418674, "category_id": 1, "iscrowd": 0, "bbox": [0, 204, 127, 252], "area": 16577}, {"id": 3421495, "category_id": 1, "iscrowd": 0, "bbox": [106, 195, 75, 72], "area": 3375}, {"id": 7501432, "category_id": 1, "iscrowd": 0, "bbox": [97, 21, 386, 459], "area": 68984}, {"id": 12098988, "category_id": 1, "iscrowd": 0, "bbox": [0, 332, 61, 143], "area": 5092}, {"id": 6973563, "category_id": 27, "iscrowd": 0, "bbox": [378, 38, 44, 49], "area": 1248}, {"id": 7118531, "category_id": 58, "iscrowd": 0, "bbox": [88, 243, 196, 157], "area": 18860}, {"id": 7052733, "category_id": 58, "iscrowd": 0, "bbox": [281, 225, 143, 185], "area": 21011}, {"id": 4276311, "category_id": 62, "iscrowd": 0, "bbox": [120, 155, 85, 64], "area": 2575}, {"id": 5196606, "category_id": 62, "iscrowd": 0, "bbox": [127, 102, 45, 40], "area": 1226}, {"id": 8024955, "category_id": 62, "iscrowd": 0, "bbox": [38, 118, 63, 26], "area": 1031}, {"id": 4471879, "category_id": 62, "iscrowd": 0, "bbox": [1, 185, 83, 102], "area": 2310}, {"id": 8025197, "category_id": 62, "iscrowd": 0, "bbox": [2, 90, 53, 62], "area": 1542}, {"id": 14013903, "category_id": 67, "iscrowd": 0, "bbox": [0, 125, 218, 77], "area": 8015}, {"id": 5978911, "category_id": 84, "iscrowd": 0, "bbox": [617, 87, 14, 39], "area": 161}, {"id": 7844785, "category_id": 84, "iscrowd": 0, "bbox": [196, 12, 41, 67], "area": 928}, {"id": 12757900, "category_id": 84, "iscrowd": 0, "bbox": [610, 70, 27, 57], "area": 248}, {"id": 9802624, "category_id": 84, "iscrowd": 0, "bbox": [612, 75, 20, 51], "area": 376}, {"id": 8152910, "category_id": 84, "iscrowd": 0, "bbox": [631, 72, 9, 58], "area": 399}, {"id": 12038814, "category_id": 84, "iscrowd": 0, "bbox": [214, 26, 32, 52], "area": 1244}, {"id": 5322271, "category_id": 84, "iscrowd": 0, "bbox": [627, 85, 7, 42], "area": 152}, {"id": 3094587, "category_id": 84, "iscrowd": 0, "bbox": [501, 161, 36, 17], "area": 416}, {"id": 11382695, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 128, 128], "area": 12515}, {"id": 6120794, "category_id": 156, "iscrowd": 0, "bbox": [161, 0, 479, 228], "area": 31675}, {"id": 3751222, "category_id": 189, "iscrowd": 0, "bbox": [0, 93, 640, 110], "area": 4458}, {"id": 3618872, "category_id": 190, "iscrowd": 0, "bbox": [48, 396, 592, 69], "area": 1207}, {"id": 7105377, "category_id": 195, "iscrowd": 0, "bbox": [94, 13, 543, 196], "area": 4160}, {"id": 7045258, "category_id": 196, "iscrowd": 0, "bbox": [88, 320, 21, 24], "area": 148}, {"id": 2905698, "category_id": 199, "iscrowd": 0, "bbox": [380, 20, 260, 103], "area": 4135}, {"id": 5725536, "category_id": 200, "iscrowd": 0, "bbox": [0, 160, 640, 320], "area": 10366}], "file_name": "000000179898.png", "image_id": 179898}, {"segments_info": [{"id": 5588019, "category_id": 1, "iscrowd": 0, "bbox": [213, 462, 217, 171], "area": 18857}, {"id": 7763055, "category_id": 25, "iscrowd": 0, "bbox": [304, 178, 111, 258], "area": 13376}, {"id": 11713987, "category_id": 25, "iscrowd": 0, "bbox": [2, 491, 191, 149], "area": 15633}, {"id": 4013886, "category_id": 25, "iscrowd": 0, "bbox": [0, 133, 220, 415], "area": 35943}, {"id": 5132366, "category_id": 25, "iscrowd": 0, "bbox": [396, 285, 84, 355], "area": 15015}, {"id": 4012854, "category_id": 25, "iscrowd": 0, "bbox": [79, 296, 291, 344], "area": 27344}, {"id": 8618101, "category_id": 151, "iscrowd": 0, "bbox": [353, 124, 127, 61], "area": 4904}, {"id": 5134668, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 615], "area": 77491}, {"id": 9278086, "category_id": 185, "iscrowd": 0, "bbox": [0, 166, 480, 86], "area": 12673}, {"id": 5730669, "category_id": 193, "iscrowd": 0, "bbox": [0, 140, 57, 43], "area": 1879}, {"id": 7892590, "category_id": 194, "iscrowd": 0, "bbox": [0, 207, 480, 433], "area": 55635}, {"id": 9013633, "category_id": 197, "iscrowd": 0, "bbox": [158, 34, 322, 149], "area": 18839}], "file_name": "000000180011.png", "image_id": 180011}, {"segments_info": [{"id": 5071492, "category_id": 1, "iscrowd": 0, "bbox": [0, 342, 108, 138], "area": 9863}, {"id": 1184789, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 60, 247], "area": 8273}, {"id": 5070722, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 336, 218], "area": 28562}, {"id": 3034009, "category_id": 1, "iscrowd": 0, "bbox": [360, 41, 173, 269], "area": 26952}, {"id": 12495453, "category_id": 48, "iscrowd": 0, "bbox": [79, 408, 129, 72], "area": 1452}, {"id": 10523227, "category_id": 48, "iscrowd": 0, "bbox": [397, 296, 25, 62], "area": 693}, {"id": 2706569, "category_id": 59, "iscrowd": 0, "bbox": [85, 229, 61, 39], "area": 1423}, {"id": 3093605, "category_id": 61, "iscrowd": 0, "bbox": [169, 203, 169, 125], "area": 17961}, {"id": 4871788, "category_id": 62, "iscrowd": 0, "bbox": [482, 161, 141, 244], "area": 11599}, {"id": 790042, "category_id": 62, "iscrowd": 0, "bbox": [231, 123, 143, 103], "area": 6563}, {"id": 3233722, "category_id": 67, "iscrowd": 0, "bbox": [22, 188, 567, 285], "area": 101168}, {"id": 2975109, "category_id": 100, "iscrowd": 0, "bbox": [0, 174, 29, 186], "area": 3911}, {"id": 1054764, "category_id": 118, "iscrowd": 0, "bbox": [525, 249, 115, 231], "area": 12098}, {"id": 2241633, "category_id": 177, "iscrowd": 0, "bbox": [196, 109, 49, 84], "area": 1817}, {"id": 926350, "category_id": 189, "iscrowd": 0, "bbox": [232, 181, 40, 11], "area": 146}, {"id": 2899787, "category_id": 199, "iscrowd": 0, "bbox": [27, 0, 613, 212], "area": 61168}], "file_name": "000000180101.png", "image_id": 180101}, {"segments_info": [{"id": 3559283, "category_id": 1, "iscrowd": 0, "bbox": [0, 5, 253, 457], "area": 57217}, {"id": 2647452, "category_id": 41, "iscrowd": 0, "bbox": [1, 349, 237, 140], "area": 16341}], "file_name": "000000180135.png", "image_id": 180135}, {"segments_info": [{"id": 4408908, "category_id": 7, "iscrowd": 0, "bbox": [18, 103, 622, 254], "area": 80115}, {"id": 8752273, "category_id": 125, "iscrowd": 0, "bbox": [0, 216, 640, 255], "area": 68831}, {"id": 7961462, "category_id": 128, "iscrowd": 0, "bbox": [0, 176, 138, 101], "area": 9383}, {"id": 3289913, "category_id": 147, "iscrowd": 0, "bbox": [14, 254, 493, 161], "area": 12817}, {"id": 16711422, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 187], "area": 96525}, {"id": 11646907, "category_id": 194, "iscrowd": 0, "bbox": [17, 445, 453, 35], "area": 8327}], "file_name": "000000180188.png", "image_id": 180188}, {"segments_info": [{"id": 2828841, "category_id": 27, "iscrowd": 0, "bbox": [340, 133, 300, 223], "area": 42391}, {"id": 6447970, "category_id": 33, "iscrowd": 0, "bbox": [118, 91, 522, 269], "area": 56922}, {"id": 988960, "category_id": 62, "iscrowd": 0, "bbox": [0, 92, 59, 45], "area": 1346}, {"id": 8956361, "category_id": 62, "iscrowd": 0, "bbox": [495, 0, 120, 64], "area": 3137}, {"id": 3359577, "category_id": 62, "iscrowd": 0, "bbox": [24, 8, 175, 92], "area": 2720}, {"id": 14672093, "category_id": 168, "iscrowd": 0, "bbox": [0, 198, 107, 90], "area": 6076}, {"id": 7440798, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 219, 49], "area": 3111}, {"id": 7707615, "category_id": 200, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 68621}], "file_name": "000000180296.png", "image_id": 180296}, {"segments_info": [{"id": 11894430, "category_id": 1, "iscrowd": 0, "bbox": [315, 100, 102, 80], "area": 4299}, {"id": 2178141, "category_id": 21, "iscrowd": 0, "bbox": [26, 51, 597, 369], "area": 89282}, {"id": 8079670, "category_id": 72, "iscrowd": 0, "bbox": [268, 78, 182, 167], "area": 22787}, {"id": 9081483, "category_id": 85, "iscrowd": 0, "bbox": [0, 325, 30, 57], "area": 1276}, {"id": 3432309, "category_id": 177, "iscrowd": 0, "bbox": [0, 376, 534, 104], "area": 42363}, {"id": 927293, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 92], "area": 35607}, {"id": 6386555, "category_id": 199, "iscrowd": 0, "bbox": [0, 32, 640, 448], "area": 109302}], "file_name": "000000180383.png", "image_id": 180383}, {"segments_info": [{"id": 5659485, "category_id": 1, "iscrowd": 0, "bbox": [40, 81, 342, 305], "area": 46282}, {"id": 8418929, "category_id": 1, "iscrowd": 0, "bbox": [550, 123, 90, 228], "area": 12524}, {"id": 3888222, "category_id": 28, "iscrowd": 0, "bbox": [51, 58, 241, 136], "area": 15103}, {"id": 4281974, "category_id": 47, "iscrowd": 0, "bbox": [416, 295, 73, 49], "area": 3010}, {"id": 4012334, "category_id": 62, "iscrowd": 0, "bbox": [133, 362, 95, 65], "area": 2520}, {"id": 12960954, "category_id": 67, "iscrowd": 0, "bbox": [213, 338, 427, 84], "area": 19208}, {"id": 13487823, "category_id": 128, "iscrowd": 0, "bbox": [287, 35, 353, 166], "area": 28793}, {"id": 2509883, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 173], "area": 54780}, {"id": 5922147, "category_id": 185, "iscrowd": 0, "bbox": [0, 131, 626, 296], "area": 55520}, {"id": 13683656, "category_id": 189, "iscrowd": 0, "bbox": [293, 343, 347, 84], "area": 6341}], "file_name": "000000180487.png", "image_id": 180487}, {"segments_info": [{"id": 2565414, "category_id": 1, "iscrowd": 0, "bbox": [1, 9, 368, 412], "area": 90852}, {"id": 1316125, "category_id": 1, "iscrowd": 0, "bbox": [251, 55, 355, 371], "area": 74777}, {"id": 8429500, "category_id": 61, "iscrowd": 0, "bbox": [262, 341, 86, 59], "area": 2910}, {"id": 4210996, "category_id": 109, "iscrowd": 0, "bbox": [273, 0, 41, 136], "area": 2530}, {"id": 12302235, "category_id": 180, "iscrowd": 0, "bbox": [97, 0, 543, 332], "area": 43967}, {"id": 1844520, "category_id": 199, "iscrowd": 0, "bbox": [300, 0, 293, 214], "area": 25102}, {"id": 4539710, "category_id": 200, "iscrowd": 0, "bbox": [0, 0, 598, 277], "area": 8502}], "file_name": "000000180560.png", "image_id": 180560}, {"segments_info": [{"id": 6649262, "category_id": 1, "iscrowd": 0, "bbox": [586, 340, 54, 62], "area": 2291}, {"id": 3226513, "category_id": 1, "iscrowd": 0, "bbox": [25, 10, 226, 371], "area": 50199}, {"id": 4934481, "category_id": 44, "iscrowd": 0, "bbox": [388, 146, 33, 165], "area": 3404}, {"id": 7316644, "category_id": 44, "iscrowd": 0, "bbox": [201, 135, 11, 31], "area": 177}, {"id": 2633024, "category_id": 44, "iscrowd": 0, "bbox": [297, 118, 60, 303], "area": 13362}, {"id": 3683708, "category_id": 44, "iscrowd": 0, "bbox": [360, 145, 34, 176], "area": 3932}, {"id": 5330270, "category_id": 44, "iscrowd": 0, "bbox": [339, 147, 26, 185], "area": 2025}, {"id": 9074799, "category_id": 44, "iscrowd": 0, "bbox": [580, 142, 17, 58], "area": 681}, {"id": 7182750, "category_id": 44, "iscrowd": 0, "bbox": [212, 127, 12, 51], "area": 465}, {"id": 4538171, "category_id": 44, "iscrowd": 0, "bbox": [437, 120, 22, 159], "area": 2912}, {"id": 4737099, "category_id": 44, "iscrowd": 0, "bbox": [453, 170, 13, 109], "area": 815}, {"id": 4998984, "category_id": 44, "iscrowd": 0, "bbox": [413, 118, 26, 157], "area": 2638}, {"id": 6129803, "category_id": 44, "iscrowd": 0, "bbox": [227, 127, 11, 51], "area": 422}, {"id": 8101281, "category_id": 44, "iscrowd": 0, "bbox": [238, 131, 12, 46], "area": 415}, {"id": 4149112, "category_id": 46, "iscrowd": 0, "bbox": [135, 354, 82, 119], "area": 6990}, {"id": 6252930, "category_id": 46, "iscrowd": 0, "bbox": [412, 277, 50, 104], "area": 3278}, {"id": 7569042, "category_id": 51, "iscrowd": 0, "bbox": [513, 183, 69, 41], "area": 1719}, {"id": 5002863, "category_id": 67, "iscrowd": 0, "bbox": [6, 116, 634, 358], "area": 92201}, {"id": 5656663, "category_id": 72, "iscrowd": 0, "bbox": [0, 0, 61, 31], "area": 1503}, {"id": 15325631, "category_id": 72, "iscrowd": 0, "bbox": [499, 91, 64, 65], "area": 2553}, {"id": 11573637, "category_id": 82, "iscrowd": 0, "bbox": [454, 120, 75, 109], "area": 6247}, {"id": 5606056, "category_id": 107, "iscrowd": 0, "bbox": [0, 241, 59, 29], "area": 864}, {"id": 13421253, "category_id": 156, "iscrowd": 0, "bbox": [194, 73, 446, 127], "area": 6137}, {"id": 9866382, "category_id": 186, "iscrowd": 0, "bbox": [291, 0, 349, 91], "area": 21699}, {"id": 9408928, "category_id": 188, "iscrowd": 0, "bbox": [0, 54, 455, 349], "area": 15122}, {"id": 3491174, "category_id": 189, "iscrowd": 0, "bbox": [0, 367, 640, 113], "area": 2697}, {"id": 5658984, "category_id": 196, "iscrowd": 0, "bbox": [247, 219, 56, 68], "area": 2111}, {"id": 12765383, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 256], "area": 52909}], "file_name": "000000180751.png", "image_id": 180751}, {"segments_info": [{"id": 3426367, "category_id": 70, "iscrowd": 0, "bbox": [131, 313, 106, 180], "area": 15481}, {"id": 12759450, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 73, 500], "area": 25126}, {"id": 7570819, "category_id": 176, "iscrowd": 0, "bbox": [29, 0, 315, 500], "area": 94710}, {"id": 6718346, "category_id": 181, "iscrowd": 0, "bbox": [64, 0, 192, 127], "area": 18713}, {"id": 1977885, "category_id": 190, "iscrowd": 0, "bbox": [83, 457, 181, 43], "area": 3189}, {"id": 9538949, "category_id": 195, "iscrowd": 0, "bbox": [50, 321, 29, 100], "area": 918}, {"id": 12296840, "category_id": 199, "iscrowd": 0, "bbox": [321, 0, 54, 500], "area": 21681}], "file_name": "000000180792.png", "image_id": 180792}, {"segments_info": [{"id": 5393991, "category_id": 77, "iscrowd": 0, "bbox": [176, 146, 127, 305], "area": 25722}], "file_name": "000000180798.png", "image_id": 180798}, {"segments_info": [{"id": 2301793, "category_id": 3, "iscrowd": 0, "bbox": [406, 201, 101, 111], "area": 8993}, {"id": 9276815, "category_id": 61, "iscrowd": 0, "bbox": [117, 38, 310, 307], "area": 73490}, {"id": 3222817, "category_id": 77, "iscrowd": 0, "bbox": [355, 299, 167, 81], "area": 7236}], "file_name": "000000180878.png", "image_id": 180878}, {"segments_info": [{"id": 5791065, "category_id": 1, "iscrowd": 0, "bbox": [228, 82, 60, 228], "area": 10886}, {"id": 14472652, "category_id": 38, "iscrowd": 0, "bbox": [186, 50, 135, 77], "area": 5191}, {"id": 4346446, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 230], "area": 121404}, {"id": 3559242, "category_id": 185, "iscrowd": 0, "bbox": [41, 162, 256, 76], "area": 5548}, {"id": 5015930, "category_id": 193, "iscrowd": 0, "bbox": [0, 166, 640, 192], "area": 85758}], "file_name": "000000181303.png", "image_id": 181303}, {"segments_info": [{"id": 7174529, "category_id": 1, "iscrowd": 0, "bbox": [339, 152, 87, 110], "area": 3966}, {"id": 5920071, "category_id": 1, "iscrowd": 0, "bbox": [303, 167, 71, 96], "area": 2955}, {"id": 5856863, "category_id": 1, "iscrowd": 0, "bbox": [391, 167, 84, 96], "area": 4505}, {"id": 8358527, "category_id": 9, "iscrowd": 0, "bbox": [138, 233, 477, 88], "area": 26431}, {"id": 7647469, "category_id": 28, "iscrowd": 0, "bbox": [277, 108, 191, 60], "area": 6885}, {"id": 7105627, "category_id": 148, "iscrowd": 0, "bbox": [0, 199, 640, 247], "area": 114200}, {"id": 5856845, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 227], "area": 125586}], "file_name": "000000181421.png", "image_id": 181421}, {"segments_info": [{"id": 3694475, "category_id": 1, "iscrowd": 0, "bbox": [167, 383, 120, 123], "area": 6122}, {"id": 12368786, "category_id": 73, "iscrowd": 0, "bbox": [231, 6, 409, 499], "area": 115691}, {"id": 9020330, "category_id": 76, "iscrowd": 0, "bbox": [256, 263, 371, 147], "area": 43744}, {"id": 1904675, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 559, 288], "area": 54809}, {"id": 1380888, "category_id": 189, "iscrowd": 0, "bbox": [0, 171, 640, 342], "area": 32805}, {"id": 2829873, "category_id": 190, "iscrowd": 0, "bbox": [607, 111, 33, 165], "area": 2429}], "file_name": "000000181499.png", "image_id": 181499}, {"segments_info": [{"id": 6974058, "category_id": 1, "iscrowd": 0, "bbox": [104, 112, 112, 299], "area": 16114}, {"id": 3815994, "category_id": 1, "iscrowd": 0, "bbox": [541, 147, 99, 218], "area": 14942}, {"id": 11579568, "category_id": 1, "iscrowd": 0, "bbox": [608, 123, 24, 41], "area": 363}, {"id": 5855577, "category_id": 1, "iscrowd": 0, "bbox": [364, 122, 9, 18], "area": 94}, {"id": 9934743, "category_id": 1, "iscrowd": 0, "bbox": [194, 130, 117, 333], "area": 23370}, {"id": 12171705, "category_id": 1, "iscrowd": 0, "bbox": [286, 117, 23, 28], "area": 436}, {"id": 2500134, "category_id": 1, "iscrowd": 0, "bbox": [330, 125, 19, 18], "area": 180}, {"id": 6974049, "category_id": 1, "iscrowd": 0, "bbox": [272, 114, 13, 35], "area": 252}, {"id": 5526612, "category_id": 1, "iscrowd": 0, "bbox": [308, 127, 14, 17], "area": 181}, {"id": 2500138, "category_id": 1, "iscrowd": 0, "bbox": [351, 126, 21, 19], "area": 230}, {"id": 8882055, "category_id": 1, "iscrowd": 0, "bbox": [216, 119, 13, 30], "area": 261}, {"id": 5723991, "category_id": 1, "iscrowd": 0, "bbox": [431, 116, 139, 209], "area": 11136}, {"id": 8882047, "category_id": 1, "iscrowd": 0, "bbox": [34, 161, 70, 101], "area": 4240}, {"id": 7697781, "category_id": 1, "iscrowd": 1, "bbox": [0, 105, 614, 144], "area": 1659}, {"id": 11513775, "category_id": 3, "iscrowd": 0, "bbox": [1, 130, 122, 72], "area": 5525}, {"id": 4408131, "category_id": 4, "iscrowd": 0, "bbox": [13, 259, 348, 153], "area": 22993}, {"id": 5855567, "category_id": 4, "iscrowd": 0, "bbox": [0, 254, 72, 99], "area": 3379}, {"id": 4671303, "category_id": 4, "iscrowd": 0, "bbox": [363, 251, 191, 126], "area": 9117}, {"id": 3750201, "category_id": 4, "iscrowd": 0, "bbox": [373, 306, 267, 194], "area": 35744}, {"id": 8158332, "category_id": 6, "iscrowd": 0, "bbox": [1, 69, 199, 116], "area": 13208}, {"id": 7697790, "category_id": 8, "iscrowd": 0, "bbox": [273, 114, 192, 131], "area": 15411}, {"id": 9605778, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 514, 189], "area": 52924}, {"id": 9276813, "category_id": 149, "iscrowd": 0, "bbox": [0, 198, 640, 402], "area": 115694}, {"id": 5987163, "category_id": 171, "iscrowd": 0, "bbox": [0, 257, 36, 62], "area": 912}, {"id": 6250335, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 266], "area": 11553}, {"id": 8026746, "category_id": 191, "iscrowd": 0, "bbox": [509, 143, 62, 61], "area": 1719}, {"id": 11447982, "category_id": 197, "iscrowd": 0, "bbox": [553, 0, 87, 142], "area": 2771}, {"id": 13948116, "category_id": 199, "iscrowd": 0, "bbox": [44, 56, 314, 89], "area": 330}], "file_name": "000000181542.png", "image_id": 181542}, {"segments_info": [{"id": 2960688, "category_id": 1, "iscrowd": 0, "bbox": [0, 183, 16, 78], "area": 952}, {"id": 2633788, "category_id": 1, "iscrowd": 0, "bbox": [52, 189, 23, 27], "area": 345}, {"id": 5004645, "category_id": 1, "iscrowd": 0, "bbox": [273, 166, 52, 104], "area": 3579}, {"id": 1908774, "category_id": 20, "iscrowd": 0, "bbox": [442, 266, 21, 32], "area": 429}, {"id": 986897, "category_id": 20, "iscrowd": 0, "bbox": [168, 303, 48, 115], "area": 3753}, {"id": 2041133, "category_id": 20, "iscrowd": 0, "bbox": [539, 292, 55, 114], "area": 3441}, {"id": 2303019, "category_id": 20, "iscrowd": 0, "bbox": [469, 256, 34, 32], "area": 497}, {"id": 6719656, "category_id": 20, "iscrowd": 0, "bbox": [459, 214, 45, 28], "area": 774}, {"id": 1845049, "category_id": 20, "iscrowd": 0, "bbox": [0, 285, 27, 87], "area": 1552}, {"id": 3160127, "category_id": 20, "iscrowd": 0, "bbox": [274, 268, 77, 143], "area": 4782}, {"id": 2369838, "category_id": 20, "iscrowd": 0, "bbox": [600, 280, 40, 104], "area": 3050}, {"id": 1842206, "category_id": 20, "iscrowd": 0, "bbox": [219, 314, 53, 111], "area": 3999}, {"id": 2764856, "category_id": 20, "iscrowd": 0, "bbox": [80, 289, 73, 121], "area": 4544}, {"id": 3687512, "category_id": 20, "iscrowd": 0, "bbox": [340, 276, 89, 116], "area": 5256}, {"id": 2567478, "category_id": 20, "iscrowd": 0, "bbox": [481, 300, 71, 103], "area": 4546}, {"id": 6717074, "category_id": 20, "iscrowd": 0, "bbox": [429, 299, 65, 107], "area": 4576}, {"id": 14856076, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 192], "area": 105117}, {"id": 9277856, "category_id": 192, "iscrowd": 0, "bbox": [173, 111, 467, 91], "area": 9174}, {"id": 6326191, "category_id": 193, "iscrowd": 0, "bbox": [479, 237, 19, 8], "area": 110}, {"id": 6454425, "category_id": 194, "iscrowd": 0, "bbox": [0, 156, 640, 269], "area": 62538}, {"id": 6059409, "category_id": 197, "iscrowd": 0, "bbox": [465, 153, 65, 28], "area": 1168}], "file_name": "000000181666.png", "image_id": 181666}, {"segments_info": [{"id": 5328726, "category_id": 19, "iscrowd": 0, "bbox": [33, 92, 71, 110], "area": 2915}, {"id": 1052989, "category_id": 47, "iscrowd": 0, "bbox": [359, 348, 32, 28], "area": 612}, {"id": 921907, "category_id": 51, "iscrowd": 0, "bbox": [356, 345, 36, 32], "area": 187}, {"id": 1121330, "category_id": 62, "iscrowd": 0, "bbox": [516, 272, 124, 151], "area": 12080}, {"id": 1122871, "category_id": 63, "iscrowd": 0, "bbox": [49, 241, 254, 178], "area": 30504}, {"id": 1385787, "category_id": 63, "iscrowd": 0, "bbox": [333, 230, 262, 161], "area": 28254}, {"id": 3224900, "category_id": 67, "iscrowd": 0, "bbox": [234, 339, 257, 77], "area": 13541}, {"id": 4410451, "category_id": 84, "iscrowd": 0, "bbox": [254, 293, 30, 4], "area": 79}, {"id": 5529960, "category_id": 84, "iscrowd": 0, "bbox": [259, 291, 22, 4], "area": 54}, {"id": 7503237, "category_id": 84, "iscrowd": 0, "bbox": [261, 283, 14, 6], "area": 79}, {"id": 6188662, "category_id": 84, "iscrowd": 0, "bbox": [257, 289, 23, 3], "area": 61}, {"id": 6121319, "category_id": 84, "iscrowd": 0, "bbox": [251, 297, 37, 7], "area": 177}, {"id": 3160903, "category_id": 86, "iscrowd": 0, "bbox": [299, 257, 18, 28], "area": 422}, {"id": 7571606, "category_id": 109, "iscrowd": 0, "bbox": [206, 0, 434, 357], "area": 99995}, {"id": 3885662, "category_id": 119, "iscrowd": 0, "bbox": [266, 173, 90, 87], "area": 4420}, {"id": 856866, "category_id": 189, "iscrowd": 0, "bbox": [234, 290, 252, 133], "area": 4862}, {"id": 5203053, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 357, 423], "area": 55834}, {"id": 660251, "category_id": 200, "iscrowd": 0, "bbox": [449, 369, 67, 54], "area": 1065}], "file_name": "000000181753.png", "image_id": 181753}, {"segments_info": [{"id": 11641495, "category_id": 46, "iscrowd": 0, "bbox": [106, 0, 133, 198], "area": 12767}, {"id": 9210756, "category_id": 47, "iscrowd": 0, "bbox": [476, 32, 45, 34], "area": 738}, {"id": 8287852, "category_id": 47, "iscrowd": 0, "bbox": [495, 48, 58, 51], "area": 2203}, {"id": 10591384, "category_id": 47, "iscrowd": 0, "bbox": [214, 61, 85, 93], "area": 5814}, {"id": 8487035, "category_id": 47, "iscrowd": 0, "bbox": [520, 29, 44, 29], "area": 824}, {"id": 12432287, "category_id": 47, "iscrowd": 0, "bbox": [241, 2, 46, 34], "area": 1270}, {"id": 9206120, "category_id": 48, "iscrowd": 0, "bbox": [408, 178, 187, 42], "area": 1638}, {"id": 4802119, "category_id": 49, "iscrowd": 0, "bbox": [422, 154, 218, 197], "area": 4535}, {"id": 6973025, "category_id": 49, "iscrowd": 0, "bbox": [311, 50, 194, 52], "area": 2000}, {"id": 6642501, "category_id": 50, "iscrowd": 0, "bbox": [427, 6, 83, 13], "area": 328}, {"id": 7893610, "category_id": 50, "iscrowd": 0, "bbox": [542, 39, 46, 26], "area": 163}, {"id": 6383724, "category_id": 50, "iscrowd": 0, "bbox": [494, 0, 12, 47], "area": 291}, {"id": 12104627, "category_id": 50, "iscrowd": 0, "bbox": [96, 165, 133, 44], "area": 1106}, {"id": 5856862, "category_id": 50, "iscrowd": 0, "bbox": [544, 12, 16, 27], "area": 223}, {"id": 6778231, "category_id": 67, "iscrowd": 0, "bbox": [2, 17, 632, 338], "area": 175368}, {"id": 5265516, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 56, 133], "area": 3464}, {"id": 16053750, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 26, 65], "area": 1141}, {"id": 5856358, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 8634}, {"id": 10132897, "category_id": 195, "iscrowd": 0, "bbox": [37, 0, 72, 73], "area": 1587}, {"id": 4541005, "category_id": 196, "iscrowd": 0, "bbox": [373, 0, 267, 30], "area": 2559}], "file_name": "000000181796.png", "image_id": 181796}, {"segments_info": [{"id": 7899011, "category_id": 1, "iscrowd": 0, "bbox": [8, 28, 19, 58], "area": 695}, {"id": 3813930, "category_id": 1, "iscrowd": 0, "bbox": [116, 28, 13, 40], "area": 315}, {"id": 5921638, "category_id": 1, "iscrowd": 0, "bbox": [182, 77, 127, 388], "area": 26927}, {"id": 4208432, "category_id": 3, "iscrowd": 0, "bbox": [261, 57, 54, 25], "area": 1151}, {"id": 6642773, "category_id": 3, "iscrowd": 0, "bbox": [276, 63, 362, 114], "area": 29132}, {"id": 9278633, "category_id": 15, "iscrowd": 0, "bbox": [117, 212, 433, 199], "area": 41054}, {"id": 8688257, "category_id": 64, "iscrowd": 0, "bbox": [608, 29, 32, 90], "area": 1618}, {"id": 6779491, "category_id": 64, "iscrowd": 0, "bbox": [530, 42, 48, 62], "area": 1898}, {"id": 6583661, "category_id": 64, "iscrowd": 0, "bbox": [152, 34, 77, 110], "area": 4393}, {"id": 5533788, "category_id": 64, "iscrowd": 0, "bbox": [39, 90, 125, 52], "area": 3014}, {"id": 5991778, "category_id": 64, "iscrowd": 0, "bbox": [27, 73, 79, 76], "area": 3103}, {"id": 13091520, "category_id": 149, "iscrowd": 0, "bbox": [0, 132, 640, 164], "area": 46396}, {"id": 5856345, "category_id": 181, "iscrowd": 0, "bbox": [102, 0, 490, 104], "area": 28002}, {"id": 4145473, "category_id": 184, "iscrowd": 0, "bbox": [72, 0, 42, 107], "area": 2440}, {"id": 9344922, "category_id": 190, "iscrowd": 0, "bbox": [623, 72, 17, 25], "area": 211}, {"id": 13684946, "category_id": 191, "iscrowd": 0, "bbox": [0, 94, 640, 386], "area": 72391}, {"id": 12566197, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 121], "area": 16054}], "file_name": "000000181816.png", "image_id": 181816}, {"segments_info": [{"id": 3110821, "category_id": 17, "iscrowd": 0, "bbox": [97, 222, 231, 268], "area": 37102}, {"id": 4166852, "category_id": 81, "iscrowd": 0, "bbox": [65, 267, 293, 278], "area": 22110}, {"id": 5025500, "category_id": 107, "iscrowd": 0, "bbox": [340, 326, 15, 19], "area": 158}, {"id": 3902125, "category_id": 133, "iscrowd": 0, "bbox": [204, 0, 222, 258], "area": 32961}, {"id": 3556170, "category_id": 168, "iscrowd": 0, "bbox": [0, 0, 91, 110], "area": 6635}, {"id": 7125470, "category_id": 199, "iscrowd": 0, "bbox": [70, 0, 152, 69], "area": 7912}], "file_name": "000000181859.png", "image_id": 181859}, {"segments_info": [{"id": 608092, "category_id": 18, "iscrowd": 0, "bbox": [18, 23, 555, 609], "area": 274854}, {"id": 3578027, "category_id": 63, "iscrowd": 0, "bbox": [3, 0, 570, 626], "area": 54187}], "file_name": "000000181969.png", "image_id": 181969}, {"segments_info": [{"id": 6845329, "category_id": 1, "iscrowd": 0, "bbox": [167, 317, 16, 26], "area": 305}, {"id": 11508635, "category_id": 1, "iscrowd": 0, "bbox": [50, 212, 115, 139], "area": 9798}, {"id": 7696503, "category_id": 1, "iscrowd": 0, "bbox": [149, 70, 155, 284], "area": 19557}, {"id": 6325101, "category_id": 39, "iscrowd": 0, "bbox": [120, 19, 69, 122], "area": 1764}, {"id": 4541019, "category_id": 40, "iscrowd": 0, "bbox": [135, 294, 48, 50], "area": 1072}, {"id": 11848157, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 40588}, {"id": 7184777, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 324], "area": 155402}], "file_name": "000000182021.png", "image_id": 182021}, {"segments_info": [{"id": 8096424, "category_id": 1, "iscrowd": 0, "bbox": [339, 52, 206, 367], "area": 42971}, {"id": 7833511, "category_id": 1, "iscrowd": 0, "bbox": [95, 22, 498, 399], "area": 72815}, {"id": 856859, "category_id": 63, "iscrowd": 0, "bbox": [3, 266, 539, 155], "area": 26069}, {"id": 12368844, "category_id": 75, "iscrowd": 0, "bbox": [218, 150, 30, 102], "area": 797}, {"id": 13291746, "category_id": 75, "iscrowd": 0, "bbox": [491, 98, 20, 38], "area": 404}, {"id": 13618394, "category_id": 75, "iscrowd": 0, "bbox": [508, 244, 76, 37], "area": 1225}, {"id": 11252678, "category_id": 75, "iscrowd": 0, "bbox": [457, 90, 29, 81], "area": 814}, {"id": 1251373, "category_id": 112, "iscrowd": 0, "bbox": [579, 0, 61, 426], "area": 18148}, {"id": 2190476, "category_id": 141, "iscrowd": 0, "bbox": [0, 374, 113, 52], "area": 2409}, {"id": 5871791, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 614, 426], "area": 96691}], "file_name": "000000182155.png", "image_id": 182155}, {"segments_info": [{"id": 1316119, "category_id": 33, "iscrowd": 0, "bbox": [116, 301, 58, 83], "area": 3874}, {"id": 1841433, "category_id": 63, "iscrowd": 0, "bbox": [105, 160, 187, 171], "area": 20426}, {"id": 1446932, "category_id": 73, "iscrowd": 0, "bbox": [12, 231, 76, 37], "area": 1203}, {"id": 4078651, "category_id": 75, "iscrowd": 0, "bbox": [61, 265, 24, 14], "area": 113}, {"id": 7372415, "category_id": 75, "iscrowd": 0, "bbox": [18, 271, 43, 10], "area": 266}, {"id": 5065030, "category_id": 84, "iscrowd": 0, "bbox": [46, 100, 5, 20], "area": 46}, {"id": 2965830, "category_id": 84, "iscrowd": 0, "bbox": [59, 145, 16, 5], "area": 55}, {"id": 2383459, "category_id": 84, "iscrowd": 0, "bbox": [66, 107, 12, 12], "area": 118}, {"id": 2565935, "category_id": 84, "iscrowd": 0, "bbox": [37, 67, 18, 27], "area": 425}, {"id": 6921630, "category_id": 100, "iscrowd": 0, "bbox": [46, 329, 46, 21], "area": 516}, {"id": 5996931, "category_id": 112, "iscrowd": 0, "bbox": [508, 47, 39, 179], "area": 4074}, {"id": 1207192, "category_id": 118, "iscrowd": 0, "bbox": [156, 288, 424, 137], "area": 35366}, {"id": 1584188, "category_id": 130, "iscrowd": 0, "bbox": [275, 165, 55, 34], "area": 900}, {"id": 6649716, "category_id": 141, "iscrowd": 0, "bbox": [57, 193, 90, 47], "area": 2428}, {"id": 1710364, "category_id": 156, "iscrowd": 0, "bbox": [25, 46, 91, 168], "area": 10686}, {"id": 6920602, "category_id": 177, "iscrowd": 0, "bbox": [283, 0, 319, 322], "area": 20468}, {"id": 1516079, "category_id": 189, "iscrowd": 0, "bbox": [0, 231, 610, 194], "area": 18226}, {"id": 11198695, "category_id": 190, "iscrowd": 0, "bbox": [529, 175, 43, 46], "area": 1376}, {"id": 7640982, "category_id": 196, "iscrowd": 0, "bbox": [274, 213, 50, 34], "area": 910}, {"id": 6987934, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 115958}, {"id": 2573917, "category_id": 200, "iscrowd": 0, "bbox": [0, 217, 566, 208], "area": 22717}], "file_name": "000000182162.png", "image_id": 182162}, {"segments_info": [{"id": 8226196, "category_id": 67, "iscrowd": 0, "bbox": [0, 28, 640, 351], "area": 72111}, {"id": 11382957, "category_id": 73, "iscrowd": 0, "bbox": [155, 0, 484, 312], "area": 88302}, {"id": 14077635, "category_id": 76, "iscrowd": 0, "bbox": [243, 1, 397, 91], "area": 22932}, {"id": 6912133, "category_id": 77, "iscrowd": 0, "bbox": [58, 103, 275, 234], "area": 47878}, {"id": 4605022, "category_id": 189, "iscrowd": 0, "bbox": [0, 368, 640, 17], "area": 3852}], "file_name": "000000182202.png", "image_id": 182202}, {"segments_info": [{"id": 8355706, "category_id": 47, "iscrowd": 0, "bbox": [517, 2, 123, 178], "area": 17264}, {"id": 10855077, "category_id": 50, "iscrowd": 0, "bbox": [340, 202, 191, 195], "area": 10912}, {"id": 9143424, "category_id": 50, "iscrowd": 0, "bbox": [0, 251, 31, 42], "area": 772}, {"id": 8487037, "category_id": 51, "iscrowd": 0, "bbox": [539, 404, 101, 76], "area": 5509}, {"id": 8749951, "category_id": 51, "iscrowd": 0, "bbox": [0, 222, 49, 83], "area": 2044}, {"id": 3561327, "category_id": 61, "iscrowd": 0, "bbox": [189, 208, 213, 137], "area": 14263}, {"id": 4743021, "category_id": 61, "iscrowd": 0, "bbox": [213, 164, 156, 94], "area": 9674}, {"id": 8554897, "category_id": 67, "iscrowd": 0, "bbox": [1, 95, 639, 379], "area": 177028}, {"id": 11775387, "category_id": 148, "iscrowd": 0, "bbox": [0, 0, 532, 174], "area": 36403}, {"id": 1513767, "category_id": 189, "iscrowd": 0, "bbox": [0, 289, 549, 191], "area": 4049}, {"id": 10855586, "category_id": 195, "iscrowd": 0, "bbox": [0, 141, 93, 71], "area": 2899}, {"id": 7836566, "category_id": 196, "iscrowd": 0, "bbox": [178, 0, 238, 107], "area": 13930}], "file_name": "000000182417.png", "image_id": 182417}, {"segments_info": [{"id": 2561815, "category_id": 1, "iscrowd": 0, "bbox": [223, 291, 34, 91], "area": 1726}, {"id": 4867145, "category_id": 16, "iscrowd": 0, "bbox": [105, 204, 24, 10], "area": 95}, {"id": 8881283, "category_id": 16, "iscrowd": 0, "bbox": [296, 226, 9, 10], "area": 54}, {"id": 8749441, "category_id": 16, "iscrowd": 0, "bbox": [429, 233, 24, 26], "area": 266}, {"id": 5328210, "category_id": 16, "iscrowd": 0, "bbox": [216, 253, 26, 14], "area": 189}, {"id": 4604491, "category_id": 16, "iscrowd": 0, "bbox": [439, 120, 41, 27], "area": 493}, {"id": 9604492, "category_id": 16, "iscrowd": 0, "bbox": [282, 240, 9, 9], "area": 50}, {"id": 6052193, "category_id": 16, "iscrowd": 0, "bbox": [235, 205, 16, 19], "area": 108}, {"id": 5722706, "category_id": 16, "iscrowd": 0, "bbox": [336, 72, 10, 12], "area": 54}, {"id": 4143425, "category_id": 16, "iscrowd": 0, "bbox": [554, 230, 33, 24], "area": 362}, {"id": 9472906, "category_id": 16, "iscrowd": 0, "bbox": [181, 252, 13, 8], "area": 56}, {"id": 5592410, "category_id": 16, "iscrowd": 0, "bbox": [496, 264, 11, 22], "area": 120}, {"id": 11117474, "category_id": 16, "iscrowd": 0, "bbox": [248, 137, 27, 15], "area": 75}, {"id": 9801616, "category_id": 16, "iscrowd": 0, "bbox": [297, 183, 39, 17], "area": 259}, {"id": 7169642, "category_id": 16, "iscrowd": 0, "bbox": [148, 189, 19, 11], "area": 72}, {"id": 4144451, "category_id": 16, "iscrowd": 0, "bbox": [51, 241, 21, 18], "area": 185}, {"id": 6776170, "category_id": 16, "iscrowd": 0, "bbox": [257, 156, 51, 17], "area": 248}, {"id": 4538692, "category_id": 16, "iscrowd": 0, "bbox": [479, 146, 17, 30], "area": 258}, {"id": 6051675, "category_id": 16, "iscrowd": 0, "bbox": [486, 199, 39, 36], "area": 469}, {"id": 6051932, "category_id": 16, "iscrowd": 0, "bbox": [43, 209, 48, 25], "area": 445}, {"id": 9605006, "category_id": 16, "iscrowd": 0, "bbox": [240, 157, 12, 11], "area": 32}, {"id": 6381155, "category_id": 16, "iscrowd": 0, "bbox": [226, 191, 54, 16], "area": 238}, {"id": 10065036, "category_id": 16, "iscrowd": 0, "bbox": [227, 86, 25, 11], "area": 51}, {"id": 5921121, "category_id": 16, "iscrowd": 0, "bbox": [441, 271, 24, 19], "area": 200}, {"id": 9341577, "category_id": 16, "iscrowd": 0, "bbox": [339, 246, 14, 8], "area": 52}, {"id": 5787730, "category_id": 16, "iscrowd": 0, "bbox": [361, 93, 24, 12], "area": 107}, {"id": 9999247, "category_id": 16, "iscrowd": 1, "bbox": [1, 0, 639, 368], "area": 35659}, {"id": 11053741, "category_id": 154, "iscrowd": 0, "bbox": [0, 330, 640, 69], "area": 34114}, {"id": 11380896, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 355], "area": 175632}], "file_name": "000000182441.png", "image_id": 182441}, {"segments_info": [{"id": 7236979, "category_id": 1, "iscrowd": 0, "bbox": [45, 0, 317, 434], "area": 58236}, {"id": 6188699, "category_id": 1, "iscrowd": 0, "bbox": [271, 66, 209, 546], "area": 20319}, {"id": 2105126, "category_id": 44, "iscrowd": 0, "bbox": [192, 239, 21, 49], "area": 800}, {"id": 6706778, "category_id": 44, "iscrowd": 0, "bbox": [236, 250, 19, 42], "area": 673}, {"id": 7300196, "category_id": 44, "iscrowd": 0, "bbox": [255, 256, 11, 29], "area": 239}, {"id": 4340810, "category_id": 44, "iscrowd": 0, "bbox": [266, 261, 5, 18], "area": 67}, {"id": 9143425, "category_id": 47, "iscrowd": 0, "bbox": [321, 557, 98, 73], "area": 5703}, {"id": 3619139, "category_id": 50, "iscrowd": 0, "bbox": [284, 554, 36, 45], "area": 503}, {"id": 5001051, "category_id": 51, "iscrowd": 0, "bbox": [81, 553, 52, 49], "area": 1908}, {"id": 3355199, "category_id": 51, "iscrowd": 0, "bbox": [382, 411, 95, 94], "area": 7388}, {"id": 4408659, "category_id": 51, "iscrowd": 0, "bbox": [191, 498, 154, 120], "area": 13305}, {"id": 5327968, "category_id": 51, "iscrowd": 0, "bbox": [117, 571, 62, 40], "area": 1716}, {"id": 8679276, "category_id": 51, "iscrowd": 0, "bbox": [137, 537, 49, 44], "area": 1433}, {"id": 7692638, "category_id": 51, "iscrowd": 0, "bbox": [371, 496, 82, 117], "area": 1878}, {"id": 4075307, "category_id": 51, "iscrowd": 0, "bbox": [173, 593, 51, 45], "area": 741}, {"id": 1976121, "category_id": 51, "iscrowd": 0, "bbox": [372, 356, 99, 61], "area": 4235}, {"id": 5653822, "category_id": 51, "iscrowd": 0, "bbox": [216, 615, 60, 25], "area": 1126}, {"id": 3614757, "category_id": 51, "iscrowd": 0, "bbox": [37, 530, 61, 37], "area": 1498}, {"id": 6254717, "category_id": 54, "iscrowd": 0, "bbox": [0, 459, 33, 64], "area": 1283}, {"id": 11058635, "category_id": 61, "iscrowd": 0, "bbox": [204, 372, 59, 64], "area": 2926}, {"id": 5602979, "category_id": 61, "iscrowd": 0, "bbox": [258, 366, 93, 77], "area": 5532}, {"id": 5199707, "category_id": 67, "iscrowd": 0, "bbox": [0, 266, 478, 365], "area": 63297}, {"id": 11900793, "category_id": 79, "iscrowd": 0, "bbox": [0, 211, 50, 260], "area": 8087}, {"id": 5066060, "category_id": 112, "iscrowd": 0, "bbox": [202, 0, 184, 272], "area": 25133}, {"id": 1841965, "category_id": 189, "iscrowd": 0, "bbox": [16, 255, 464, 385], "area": 4319}, {"id": 4931643, "category_id": 190, "iscrowd": 0, "bbox": [43, 385, 44, 67], "area": 1073}, {"id": 4474974, "category_id": 195, "iscrowd": 0, "bbox": [393, 0, 87, 123], "area": 6476}, {"id": 3687769, "category_id": 196, "iscrowd": 0, "bbox": [52, 242, 428, 398], "area": 5256}, {"id": 7566963, "category_id": 199, "iscrowd": 0, "bbox": [372, 0, 108, 139], "area": 3371}], "file_name": "000000182611.png", "image_id": 182611}, {"segments_info": [{"id": 4013402, "category_id": 1, "iscrowd": 0, "bbox": [95, 0, 328, 353], "area": 62595}, {"id": 1973549, "category_id": 18, "iscrowd": 0, "bbox": [329, 185, 234, 171], "area": 27976}, {"id": 4145767, "category_id": 18, "iscrowd": 0, "bbox": [280, 132, 93, 213], "area": 10160}, {"id": 14014183, "category_id": 28, "iscrowd": 0, "bbox": [308, 0, 332, 119], "area": 19684}, {"id": 3879483, "category_id": 31, "iscrowd": 0, "bbox": [45, 91, 189, 269], "area": 4513}, {"id": 6914241, "category_id": 93, "iscrowd": 0, "bbox": [0, 222, 640, 138], "area": 17377}, {"id": 12303546, "category_id": 148, "iscrowd": 0, "bbox": [0, 0, 640, 167], "area": 48145}, {"id": 6792351, "category_id": 193, "iscrowd": 0, "bbox": [0, 129, 640, 217], "area": 37825}], "file_name": "000000182805.png", "image_id": 182805}, {"segments_info": [{"id": 9476781, "category_id": 1, "iscrowd": 0, "bbox": [49, 41, 225, 393], "area": 25173}, {"id": 10457253, "category_id": 1, "iscrowd": 0, "bbox": [86, 0, 46, 67], "area": 1766}, {"id": 8156804, "category_id": 1, "iscrowd": 0, "bbox": [274, 105, 82, 143], "area": 6043}, {"id": 12364467, "category_id": 1, "iscrowd": 0, "bbox": [319, 41, 54, 90], "area": 3027}, {"id": 8881071, "category_id": 1, "iscrowd": 0, "bbox": [140, 47, 49, 84], "area": 2494}, {"id": 11637647, "category_id": 1, "iscrowd": 0, "bbox": [271, 54, 49, 76], "area": 2237}, {"id": 11772075, "category_id": 1, "iscrowd": 0, "bbox": [98, 38, 51, 87], "area": 2481}, {"id": 12099746, "category_id": 1, "iscrowd": 0, "bbox": [0, 82, 72, 129], "area": 4478}, {"id": 11838126, "category_id": 1, "iscrowd": 0, "bbox": [166, 7, 54, 68], "area": 1689}, {"id": 6050652, "category_id": 1, "iscrowd": 0, "bbox": [221, 48, 51, 83], "area": 2799}, {"id": 8288113, "category_id": 1, "iscrowd": 0, "bbox": [184, 51, 41, 67], "area": 1858}, {"id": 10853533, "category_id": 1, "iscrowd": 0, "bbox": [10, 40, 47, 74], "area": 1934}, {"id": 7762576, "category_id": 1, "iscrowd": 0, "bbox": [264, 12, 41, 86], "area": 1914}, {"id": 7234674, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 374, 250], "area": 19772}, {"id": 8150087, "category_id": 32, "iscrowd": 0, "bbox": [34, 114, 14, 42], "area": 314}, {"id": 9340044, "category_id": 43, "iscrowd": 0, "bbox": [2, 7, 55, 46], "area": 1606}, {"id": 5083519, "category_id": 145, "iscrowd": 0, "bbox": [0, 219, 375, 281], "area": 87216}], "file_name": "000000182923.png", "image_id": 182923}, {"segments_info": [{"id": 6458504, "category_id": 84, "iscrowd": 0, "bbox": [341, 313, 18, 100], "area": 1066}, {"id": 6642255, "category_id": 84, "iscrowd": 0, "bbox": [176, 277, 38, 130], "area": 1704}, {"id": 9145478, "category_id": 84, "iscrowd": 0, "bbox": [232, 98, 41, 131], "area": 3401}, {"id": 5789785, "category_id": 84, "iscrowd": 0, "bbox": [255, 101, 53, 131], "area": 4162}, {"id": 4143932, "category_id": 84, "iscrowd": 0, "bbox": [227, 272, 48, 136], "area": 3371}, {"id": 6585241, "category_id": 84, "iscrowd": 0, "bbox": [1, 420, 336, 141], "area": 41783}, {"id": 4286091, "category_id": 84, "iscrowd": 0, "bbox": [199, 298, 40, 110], "area": 2398}, {"id": 6378319, "category_id": 84, "iscrowd": 0, "bbox": [193, 93, 48, 135], "area": 4951}, {"id": 6514562, "category_id": 84, "iscrowd": 0, "bbox": [273, 280, 39, 133], "area": 1671}, {"id": 5196182, "category_id": 84, "iscrowd": 0, "bbox": [303, 278, 41, 136], "area": 1757}, {"id": 12351279, "category_id": 84, "iscrowd": 0, "bbox": [261, 291, 34, 124], "area": 1639}, {"id": 12964311, "category_id": 84, "iscrowd": 0, "bbox": [85, 86, 24, 134], "area": 2588}, {"id": 9406320, "category_id": 84, "iscrowd": 0, "bbox": [1, 287, 189, 122], "area": 19726}, {"id": 8158343, "category_id": 84, "iscrowd": 1, "bbox": [55, 88, 349, 296], "area": 6102}, {"id": 5857143, "category_id": 85, "iscrowd": 0, "bbox": [396, 449, 31, 84], "area": 1610}, {"id": 2170140, "category_id": 156, "iscrowd": 0, "bbox": [0, 216, 427, 424], "area": 60395}, {"id": 7762545, "category_id": 195, "iscrowd": 0, "bbox": [0, 75, 427, 340], "area": 41026}, {"id": 11498798, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 588], "area": 72296}], "file_name": "000000183049.png", "image_id": 183049}, {"segments_info": [{"id": 5598084, "category_id": 25, "iscrowd": 0, "bbox": [30, 182, 309, 285], "area": 54499}, {"id": 3293783, "category_id": 25, "iscrowd": 0, "bbox": [242, 47, 387, 303], "area": 57941}, {"id": 8165800, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 348, 476], "area": 101707}, {"id": 10578504, "category_id": 187, "iscrowd": 0, "bbox": [612, 0, 28, 64], "area": 1201}], "file_name": "000000183104.png", "image_id": 183104}, {"segments_info": [{"id": 4012084, "category_id": 1, "iscrowd": 0, "bbox": [379, 181, 61, 62], "area": 1616}, {"id": 9536881, "category_id": 42, "iscrowd": 0, "bbox": [351, 219, 99, 44], "area": 1243}, {"id": 9471855, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 270831}], "file_name": "000000183127.png", "image_id": 183127}, {"segments_info": [{"id": 3155492, "category_id": 1, "iscrowd": 0, "bbox": [216, 209, 5, 12], "area": 53}, {"id": 3288884, "category_id": 1, "iscrowd": 0, "bbox": [203, 196, 8, 26], "area": 113}, {"id": 3618608, "category_id": 3, "iscrowd": 0, "bbox": [327, 239, 43, 74], "area": 1538}, {"id": 2238765, "category_id": 3, "iscrowd": 0, "bbox": [397, 293, 34, 27], "area": 573}, {"id": 8685443, "category_id": 3, "iscrowd": 0, "bbox": [306, 266, 10, 6], "area": 55}, {"id": 5395277, "category_id": 3, "iscrowd": 0, "bbox": [216, 0, 284, 400], "area": 48298}, {"id": 7500654, "category_id": 3, "iscrowd": 0, "bbox": [285, 260, 21, 11], "area": 201}, {"id": 1252149, "category_id": 8, "iscrowd": 0, "bbox": [161, 228, 119, 55], "area": 4657}, {"id": 3025706, "category_id": 10, "iscrowd": 0, "bbox": [363, 80, 10, 30], "area": 195}, {"id": 5660554, "category_id": 10, "iscrowd": 0, "bbox": [257, 125, 14, 30], "area": 293}, {"id": 8685976, "category_id": 10, "iscrowd": 0, "bbox": [343, 87, 18, 32], "area": 387}, {"id": 5006493, "category_id": 10, "iscrowd": 0, "bbox": [234, 149, 16, 34], "area": 442}, {"id": 3810850, "category_id": 10, "iscrowd": 0, "bbox": [270, 162, 5, 14], "area": 62}, {"id": 3027263, "category_id": 10, "iscrowd": 0, "bbox": [431, 112, 20, 26], "area": 178}, {"id": 3224122, "category_id": 10, "iscrowd": 0, "bbox": [447, 91, 40, 50], "area": 560}, {"id": 2302780, "category_id": 10, "iscrowd": 0, "bbox": [323, 52, 14, 54], "area": 642}, {"id": 8222865, "category_id": 10, "iscrowd": 0, "bbox": [257, 162, 8, 18], "area": 126}, {"id": 2172453, "category_id": 149, "iscrowd": 0, "bbox": [0, 259, 328, 141], "area": 31952}, {"id": 9147017, "category_id": 184, "iscrowd": 0, "bbox": [111, 234, 55, 29], "area": 816}, {"id": 15987692, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 487, 272], "area": 101813}, {"id": 2171940, "category_id": 197, "iscrowd": 0, "bbox": [0, 233, 147, 54], "area": 5233}], "file_name": "000000183246.png", "image_id": 183246}, {"segments_info": [{"id": 5200747, "category_id": 1, "iscrowd": 0, "bbox": [215, 162, 46, 69], "area": 1474}, {"id": 2698549, "category_id": 1, "iscrowd": 0, "bbox": [262, 244, 42, 85], "area": 1949}, {"id": 5451569, "category_id": 1, "iscrowd": 0, "bbox": [81, 250, 50, 50], "area": 1288}, {"id": 5332845, "category_id": 1, "iscrowd": 0, "bbox": [299, 239, 47, 78], "area": 2370}, {"id": 1974570, "category_id": 1, "iscrowd": 0, "bbox": [241, 215, 44, 58], "area": 1456}, {"id": 5592416, "category_id": 1, "iscrowd": 0, "bbox": [232, 193, 40, 63], "area": 1199}, {"id": 6053995, "category_id": 1, "iscrowd": 0, "bbox": [211, 141, 41, 56], "area": 803}, {"id": 6906222, "category_id": 1, "iscrowd": 0, "bbox": [71, 97, 34, 73], "area": 974}, {"id": 5332115, "category_id": 1, "iscrowd": 0, "bbox": [211, 112, 277, 482], "area": 43423}, {"id": 3948939, "category_id": 1, "iscrowd": 0, "bbox": [246, 317, 52, 59], "area": 1958}, {"id": 7830407, "category_id": 1, "iscrowd": 0, "bbox": [111, 192, 48, 52], "area": 1136}, {"id": 4139822, "category_id": 1, "iscrowd": 0, "bbox": [82, 121, 26, 50], "area": 891}, {"id": 8223360, "category_id": 1, "iscrowd": 0, "bbox": [33, 183, 50, 67], "area": 2182}, {"id": 3224889, "category_id": 1, "iscrowd": 1, "bbox": [0, 0, 632, 381], "area": 79682}, {"id": 6843275, "category_id": 43, "iscrowd": 0, "bbox": [90, 8, 145, 135], "area": 7145}, {"id": 4545098, "category_id": 62, "iscrowd": 0, "bbox": [141, 340, 43, 31], "area": 1101}, {"id": 5598553, "category_id": 62, "iscrowd": 0, "bbox": [135, 309, 38, 26], "area": 791}, {"id": 5465428, "category_id": 62, "iscrowd": 0, "bbox": [89, 309, 46, 26], "area": 916}, {"id": 5268561, "category_id": 62, "iscrowd": 0, "bbox": [0, 249, 31, 22], "area": 649}, {"id": 7700853, "category_id": 62, "iscrowd": 0, "bbox": [99, 342, 14, 25], "area": 225}, {"id": 4676171, "category_id": 62, "iscrowd": 0, "bbox": [324, 341, 30, 31], "area": 849}, {"id": 5530712, "category_id": 62, "iscrowd": 0, "bbox": [111, 342, 28, 25], "area": 498}, {"id": 2898732, "category_id": 62, "iscrowd": 0, "bbox": [80, 222, 28, 28], "area": 538}, {"id": 6057308, "category_id": 62, "iscrowd": 0, "bbox": [75, 250, 29, 21], "area": 474}, {"id": 3687737, "category_id": 62, "iscrowd": 0, "bbox": [125, 279, 41, 48], "area": 1143}, {"id": 9407634, "category_id": 62, "iscrowd": 0, "bbox": [54, 328, 14, 7], "area": 56}, {"id": 3952187, "category_id": 62, "iscrowd": 0, "bbox": [73, 196, 27, 22], "area": 497}, {"id": 4742217, "category_id": 62, "iscrowd": 0, "bbox": [309, 310, 44, 32], "area": 1132}, {"id": 4545101, "category_id": 62, "iscrowd": 1, "bbox": [107, 75, 216, 293], "area": 1555}, {"id": 5197495, "category_id": 92, "iscrowd": 0, "bbox": [0, 381, 554, 83], "area": 27577}, {"id": 4014923, "category_id": 161, "iscrowd": 0, "bbox": [122, 92, 150, 286], "area": 17316}, {"id": 12174529, "category_id": 190, "iscrowd": 0, "bbox": [0, 435, 632, 205], "area": 108611}, {"id": 1447447, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 632, 450], "area": 60191}], "file_name": "000000183391.png", "image_id": 183391}, {"segments_info": [{"id": 10131872, "category_id": 1, "iscrowd": 0, "bbox": [101, 217, 33, 32], "area": 503}, {"id": 5848626, "category_id": 1, "iscrowd": 0, "bbox": [178, 229, 102, 119], "area": 5326}, {"id": 10591901, "category_id": 1, "iscrowd": 0, "bbox": [130, 175, 50, 148], "area": 4380}, {"id": 10916746, "category_id": 1, "iscrowd": 0, "bbox": [178, 180, 48, 103], "area": 2631}, {"id": 6055018, "category_id": 22, "iscrowd": 0, "bbox": [62, 283, 321, 338], "area": 45339}, {"id": 9873072, "category_id": 22, "iscrowd": 0, "bbox": [79, 257, 46, 64], "area": 1503}, {"id": 6454638, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 233], "area": 54575}, {"id": 16117714, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 364, 156], "area": 23830}, {"id": 4940636, "category_id": 193, "iscrowd": 0, "bbox": [0, 199, 427, 313], "area": 16322}, {"id": 7965590, "category_id": 194, "iscrowd": 0, "bbox": [0, 235, 427, 405], "area": 78627}, {"id": 4147792, "category_id": 197, "iscrowd": 0, "bbox": [117, 137, 310, 338], "area": 37465}], "file_name": "000000183437.png", "image_id": 183437}, {"segments_info": [{"id": 3751241, "category_id": 1, "iscrowd": 0, "bbox": [307, 201, 19, 29], "area": 399}, {"id": 7964579, "category_id": 5, "iscrowd": 0, "bbox": [94, 76, 444, 264], "area": 39531}, {"id": 11383728, "category_id": 187, "iscrowd": 0, "bbox": [13, 13, 615, 405], "area": 205194}, {"id": 15856369, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 640, 430], "area": 29765}], "file_name": "000000183500.png", "image_id": 183500}, {"segments_info": [{"id": 3617330, "category_id": 1, "iscrowd": 0, "bbox": [194, 198, 175, 230], "area": 24995}, {"id": 9601414, "category_id": 1, "iscrowd": 0, "bbox": [456, 179, 118, 249], "area": 22204}, {"id": 8481083, "category_id": 1, "iscrowd": 0, "bbox": [117, 210, 138, 211], "area": 18167}, {"id": 4935761, "category_id": 22, "iscrowd": 0, "bbox": [0, 0, 572, 428], "area": 135330}, {"id": 12894650, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 579, 205], "area": 14314}, {"id": 6912623, "category_id": 185, "iscrowd": 0, "bbox": [309, 262, 171, 57], "area": 5055}, {"id": 13026244, "category_id": 187, "iscrowd": 0, "bbox": [171, 0, 341, 18], "area": 1605}, {"id": 12045261, "category_id": 194, "iscrowd": 0, "bbox": [10, 299, 460, 129], "area": 18204}], "file_name": "000000183648.png", "image_id": 183648}, {"segments_info": [{"id": 6841194, "category_id": 1, "iscrowd": 0, "bbox": [353, 15, 181, 391], "area": 37027}, {"id": 3946560, "category_id": 19, "iscrowd": 0, "bbox": [114, 113, 526, 299], "area": 67753}, {"id": 7769462, "category_id": 184, "iscrowd": 0, "bbox": [523, 171, 117, 86], "area": 6002}, {"id": 9339232, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 235], "area": 104144}, {"id": 6931639, "category_id": 193, "iscrowd": 0, "bbox": [0, 244, 640, 168], "area": 39297}, {"id": 10792369, "category_id": 194, "iscrowd": 0, "bbox": [0, 224, 640, 62], "area": 6341}], "file_name": "000000183675.png", "image_id": 183675}, {"segments_info": [{"id": 9530957, "category_id": 1, "iscrowd": 0, "bbox": [310, 252, 4, 22], "area": 67}, {"id": 6051147, "category_id": 1, "iscrowd": 0, "bbox": [257, 234, 14, 43], "area": 365}, {"id": 7759955, "category_id": 1, "iscrowd": 0, "bbox": [293, 230, 13, 48], "area": 491}, {"id": 5722179, "category_id": 1, "iscrowd": 0, "bbox": [271, 231, 9, 45], "area": 233}, {"id": 7499613, "category_id": 1, "iscrowd": 0, "bbox": [215, 224, 17, 54], "area": 493}, {"id": 7039842, "category_id": 1, "iscrowd": 0, "bbox": [244, 230, 11, 47], "area": 458}, {"id": 2566178, "category_id": 1, "iscrowd": 0, "bbox": [79, 212, 237, 422], "area": 38445}, {"id": 6910561, "category_id": 1, "iscrowd": 0, "bbox": [311, 228, 23, 53], "area": 696}, {"id": 7955526, "category_id": 1, "iscrowd": 0, "bbox": [301, 112, 176, 516], "area": 39886}, {"id": 2829351, "category_id": 1, "iscrowd": 0, "bbox": [0, 219, 110, 139], "area": 6132}, {"id": 5130298, "category_id": 1, "iscrowd": 0, "bbox": [279, 226, 15, 50], "area": 456}, {"id": 2103316, "category_id": 1, "iscrowd": 0, "bbox": [0, 245, 136, 347], "area": 28532}, {"id": 7634030, "category_id": 3, "iscrowd": 0, "bbox": [403, 242, 45, 63], "area": 2088}, {"id": 9471855, "category_id": 3, "iscrowd": 0, "bbox": [45, 237, 55, 31], "area": 1198}, {"id": 7897197, "category_id": 3, "iscrowd": 0, "bbox": [396, 240, 29, 32], "area": 465}, {"id": 5788226, "category_id": 3, "iscrowd": 0, "bbox": [337, 236, 61, 44], "area": 2118}, {"id": 9145203, "category_id": 3, "iscrowd": 0, "bbox": [135, 230, 15, 22], "area": 180}, {"id": 6120528, "category_id": 10, "iscrowd": 0, "bbox": [356, 206, 9, 17], "area": 125}, {"id": 6712146, "category_id": 10, "iscrowd": 0, "bbox": [209, 189, 14, 33], "area": 309}, {"id": 6515538, "category_id": 10, "iscrowd": 0, "bbox": [198, 188, 10, 23], "area": 184}, {"id": 7700082, "category_id": 10, "iscrowd": 0, "bbox": [213, 140, 41, 55], "area": 1774}, {"id": 1184529, "category_id": 31, "iscrowd": 0, "bbox": [93, 330, 140, 310], "area": 16104}, {"id": 5391939, "category_id": 31, "iscrowd": 0, "bbox": [266, 243, 10, 16], "area": 106}, {"id": 4407348, "category_id": 31, "iscrowd": 0, "bbox": [325, 236, 8, 24], "area": 126}, {"id": 8291703, "category_id": 100, "iscrowd": 0, "bbox": [160, 121, 320, 222], "area": 10096}, {"id": 10200467, "category_id": 149, "iscrowd": 0, "bbox": [28, 246, 407, 394], "area": 45356}, {"id": 6583916, "category_id": 184, "iscrowd": 0, "bbox": [0, 51, 60, 169], "area": 6194}, {"id": 15790574, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 351, 166], "area": 43056}, {"id": 9477260, "category_id": 197, "iscrowd": 0, "bbox": [26, 0, 454, 269], "area": 49133}], "file_name": "000000183709.png", "image_id": 183709}, {"segments_info": [{"id": 7755609, "category_id": 1, "iscrowd": 0, "bbox": [149, 15, 203, 468], "area": 55508}, {"id": 5781563, "category_id": 1, "iscrowd": 0, "bbox": [2, 47, 219, 448], "area": 74745}, {"id": 3024422, "category_id": 32, "iscrowd": 0, "bbox": [86, 260, 32, 41], "area": 925}, {"id": 3812136, "category_id": 32, "iscrowd": 0, "bbox": [220, 229, 52, 248], "area": 9142}, {"id": 5590093, "category_id": 62, "iscrowd": 0, "bbox": [9, 74, 340, 156], "area": 4475}, {"id": 5660272, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 353, 269], "area": 22660}], "file_name": "000000183716.png", "image_id": 183716}, {"segments_info": [{"id": 3819638, "category_id": 47, "iscrowd": 0, "bbox": [134, 89, 168, 151], "area": 18566}, {"id": 921876, "category_id": 51, "iscrowd": 0, "bbox": [337, 153, 226, 227], "area": 8530}, {"id": 1655950, "category_id": 58, "iscrowd": 0, "bbox": [382, 211, 122, 146], "area": 11986}, {"id": 3621194, "category_id": 67, "iscrowd": 0, "bbox": [2, 1, 638, 471], "area": 221653}, {"id": 462368, "category_id": 177, "iscrowd": 0, "bbox": [378, 0, 262, 176], "area": 23984}, {"id": 922904, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 558, 480], "area": 8493}], "file_name": "000000183965.png", "image_id": 183965}, {"segments_info": [{"id": 5329216, "category_id": 7, "iscrowd": 0, "bbox": [162, 173, 106, 114], "area": 9337}, {"id": 3817279, "category_id": 130, "iscrowd": 0, "bbox": [82, 73, 70, 128], "area": 1673}, {"id": 3753037, "category_id": 144, "iscrowd": 0, "bbox": [268, 233, 372, 247], "area": 16765}, {"id": 1975080, "category_id": 147, "iscrowd": 0, "bbox": [145, 215, 495, 265], "area": 60029}, {"id": 1650995, "category_id": 184, "iscrowd": 0, "bbox": [0, 33, 640, 301], "area": 84077}, {"id": 11580085, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 197], "area": 65905}, {"id": 6447707, "category_id": 191, "iscrowd": 0, "bbox": [0, 238, 368, 242], "area": 59303}], "file_name": "000000184321.png", "image_id": 184321}, {"segments_info": [{"id": 1250069, "category_id": 1, "iscrowd": 0, "bbox": [364, 243, 27, 61], "area": 818}, {"id": 2633011, "category_id": 1, "iscrowd": 0, "bbox": [10, 321, 95, 104], "area": 5125}, {"id": 3358287, "category_id": 1, "iscrowd": 0, "bbox": [34, 227, 14, 24], "area": 209}, {"id": 2962751, "category_id": 1, "iscrowd": 0, "bbox": [351, 233, 18, 55], "area": 564}, {"id": 460551, "category_id": 1, "iscrowd": 0, "bbox": [80, 241, 56, 147], "area": 4054}, {"id": 4343630, "category_id": 1, "iscrowd": 0, "bbox": [327, 233, 12, 18], "area": 102}, {"id": 1974046, "category_id": 1, "iscrowd": 0, "bbox": [565, 251, 28, 70], "area": 910}, {"id": 1052430, "category_id": 1, "iscrowd": 0, "bbox": [32, 219, 52, 163], "area": 4440}, {"id": 2500392, "category_id": 1, "iscrowd": 0, "bbox": [235, 226, 12, 32], "area": 264}, {"id": 592137, "category_id": 1, "iscrowd": 0, "bbox": [439, 250, 17, 56], "area": 644}, {"id": 723722, "category_id": 1, "iscrowd": 0, "bbox": [2, 221, 31, 111], "area": 2335}, {"id": 2105377, "category_id": 1, "iscrowd": 0, "bbox": [414, 252, 26, 59], "area": 692}, {"id": 1907228, "category_id": 1, "iscrowd": 0, "bbox": [337, 232, 13, 25], "area": 174}, {"id": 2961203, "category_id": 1, "iscrowd": 1, "bbox": [3, 199, 595, 226], "area": 28369}, {"id": 4868430, "category_id": 2, "iscrowd": 0, "bbox": [458, 272, 23, 40], "area": 455}, {"id": 3750976, "category_id": 2, "iscrowd": 0, "bbox": [455, 304, 78, 55], "area": 1330}, {"id": 4079940, "category_id": 2, "iscrowd": 0, "bbox": [461, 338, 87, 56], "area": 1812}, {"id": 5591374, "category_id": 3, "iscrowd": 0, "bbox": [280, 233, 15, 10], "area": 79}, {"id": 5196359, "category_id": 3, "iscrowd": 0, "bbox": [105, 224, 16, 15], "area": 185}, {"id": 5591629, "category_id": 3, "iscrowd": 0, "bbox": [244, 234, 27, 16], "area": 249}, {"id": 2236721, "category_id": 3, "iscrowd": 0, "bbox": [427, 243, 35, 21], "area": 406}, {"id": 4863792, "category_id": 3, "iscrowd": 0, "bbox": [277, 237, 68, 33], "area": 1240}, {"id": 4144960, "category_id": 3, "iscrowd": 0, "bbox": [455, 242, 20, 17], "area": 251}, {"id": 7564649, "category_id": 8, "iscrowd": 0, "bbox": [118, 206, 40, 52], "area": 1718}, {"id": 3487063, "category_id": 13, "iscrowd": 0, "bbox": [307, 218, 11, 11], "area": 93}, {"id": 2696493, "category_id": 27, "iscrowd": 0, "bbox": [416, 263, 15, 24], "area": 125}, {"id": 4605771, "category_id": 28, "iscrowd": 0, "bbox": [584, 291, 8, 18], "area": 60}, {"id": 2565671, "category_id": 31, "iscrowd": 0, "bbox": [546, 348, 45, 62], "area": 844}, {"id": 855052, "category_id": 31, "iscrowd": 0, "bbox": [70, 306, 10, 24], "area": 139}, {"id": 3158838, "category_id": 31, "iscrowd": 0, "bbox": [105, 262, 16, 40], "area": 247}, {"id": 10129807, "category_id": 130, "iscrowd": 0, "bbox": [447, 48, 23, 21], "area": 294}, {"id": 5066061, "category_id": 149, "iscrowd": 0, "bbox": [0, 237, 640, 188], "area": 54052}, {"id": 4409679, "category_id": 184, "iscrowd": 0, "bbox": [168, 156, 58, 68], "area": 2117}, {"id": 15129814, "category_id": 187, "iscrowd": 0, "bbox": [69, 0, 408, 213], "area": 36666}, {"id": 5067869, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 338], "area": 115736}], "file_name": "000000184324.png", "image_id": 184324}, {"segments_info": [{"id": 7894903, "category_id": 8, "iscrowd": 0, "bbox": [16, 8, 532, 414], "area": 124037}, {"id": 2697519, "category_id": 166, "iscrowd": 0, "bbox": [465, 179, 82, 65], "area": 3497}, {"id": 8146469, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 188], "area": 76149}, {"id": 4938096, "category_id": 194, "iscrowd": 0, "bbox": [0, 155, 640, 272], "area": 66413}, {"id": 3224116, "category_id": 197, "iscrowd": 0, "bbox": [15, 148, 7, 9], "area": 11}], "file_name": "000000184338.png", "image_id": 184338}, {"segments_info": [{"id": 1841182, "category_id": 1, "iscrowd": 0, "bbox": [393, 1, 129, 59], "area": 7010}, {"id": 1910596, "category_id": 47, "iscrowd": 0, "bbox": [96, 2, 120, 205], "area": 12614}, {"id": 11900296, "category_id": 47, "iscrowd": 0, "bbox": [3, 3, 122, 315], "area": 31937}, {"id": 1929869, "category_id": 55, "iscrowd": 0, "bbox": [339, 353, 173, 120], "area": 10201}, {"id": 7504788, "category_id": 61, "iscrowd": 0, "bbox": [155, 16, 348, 355], "area": 83198}, {"id": 1775167, "category_id": 67, "iscrowd": 0, "bbox": [0, 182, 640, 292], "area": 29522}, {"id": 7122090, "category_id": 122, "iscrowd": 0, "bbox": [200, 374, 324, 106], "area": 15038}, {"id": 1645374, "category_id": 189, "iscrowd": 0, "bbox": [0, 380, 640, 100], "area": 1421}, {"id": 2709843, "category_id": 196, "iscrowd": 0, "bbox": [237, 56, 396, 383], "area": 35041}], "file_name": "000000184384.png", "image_id": 184384}, {"segments_info": [{"id": 6705226, "category_id": 7, "iscrowd": 0, "bbox": [4, 206, 450, 110], "area": 37047}, {"id": 4801351, "category_id": 10, "iscrowd": 0, "bbox": [549, 460, 36, 20], "area": 597}, {"id": 3749688, "category_id": 95, "iscrowd": 0, "bbox": [0, 266, 640, 214], "area": 105516}, {"id": 4146514, "category_id": 171, "iscrowd": 0, "bbox": [121, 444, 218, 36], "area": 4055}, {"id": 4210750, "category_id": 181, "iscrowd": 0, "bbox": [216, 446, 26, 34], "area": 544}, {"id": 5073506, "category_id": 184, "iscrowd": 0, "bbox": [0, 453, 45, 27], "area": 980}, {"id": 12037276, "category_id": 187, "iscrowd": 0, "bbox": [123, 0, 517, 229], "area": 102480}, {"id": 8490642, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 160, 480], "area": 39028}], "file_name": "000000184400.png", "image_id": 184400}, {"segments_info": [{"id": 1051657, "category_id": 1, "iscrowd": 0, "bbox": [168, 121, 18, 29], "area": 334}, {"id": 1250338, "category_id": 1, "iscrowd": 0, "bbox": [249, 119, 22, 39], "area": 513}, {"id": 1380880, "category_id": 1, "iscrowd": 0, "bbox": [533, 96, 13, 35], "area": 247}, {"id": 1316117, "category_id": 1, "iscrowd": 0, "bbox": [228, 115, 21, 45], "area": 620}, {"id": 1250323, "category_id": 1, "iscrowd": 0, "bbox": [544, 93, 9, 37], "area": 266}, {"id": 1118480, "category_id": 1, "iscrowd": 0, "bbox": [432, 100, 21, 46], "area": 576}, {"id": 2563657, "category_id": 1, "iscrowd": 0, "bbox": [175, 126, 38, 52], "area": 783}, {"id": 1315859, "category_id": 1, "iscrowd": 0, "bbox": [500, 99, 16, 32], "area": 344}, {"id": 1315860, "category_id": 1, "iscrowd": 0, "bbox": [0, 130, 60, 200], "area": 4929}, {"id": 6575185, "category_id": 1, "iscrowd": 0, "bbox": [427, 131, 46, 118], "area": 2612}, {"id": 6112837, "category_id": 1, "iscrowd": 0, "bbox": [105, 108, 175, 346], "area": 22450}, {"id": 1578774, "category_id": 1, "iscrowd": 0, "bbox": [559, 99, 12, 35], "area": 255}, {"id": 3419703, "category_id": 1, "iscrowd": 0, "bbox": [257, 123, 37, 36], "area": 688}, {"id": 3289402, "category_id": 1, "iscrowd": 1, "bbox": [64, 109, 576, 324], "area": 9367}, {"id": 5789541, "category_id": 2, "iscrowd": 0, "bbox": [70, 152, 362, 323], "area": 47903}, {"id": 5129284, "category_id": 3, "iscrowd": 0, "bbox": [595, 99, 27, 20], "area": 478}, {"id": 7101016, "category_id": 3, "iscrowd": 0, "bbox": [622, 100, 18, 16], "area": 133}, {"id": 1182812, "category_id": 31, "iscrowd": 0, "bbox": [1, 157, 78, 58], "area": 3455}, {"id": 8679278, "category_id": 33, "iscrowd": 0, "bbox": [260, 179, 72, 113], "area": 5509}, {"id": 2238491, "category_id": 33, "iscrowd": 0, "bbox": [473, 171, 35, 21], "area": 703}, {"id": 3616393, "category_id": 33, "iscrowd": 0, "bbox": [457, 128, 32, 26], "area": 438}, {"id": 2236962, "category_id": 33, "iscrowd": 0, "bbox": [378, 254, 44, 78], "area": 1941}, {"id": 526858, "category_id": 33, "iscrowd": 0, "bbox": [208, 241, 85, 70], "area": 3746}, {"id": 395013, "category_id": 112, "iscrowd": 0, "bbox": [7, 63, 66, 103], "area": 4923}, {"id": 5791336, "category_id": 149, "iscrowd": 0, "bbox": [0, 105, 640, 375], "area": 65375}, {"id": 13618900, "category_id": 151, "iscrowd": 0, "bbox": [593, 0, 47, 35], "area": 1266}, {"id": 10791864, "category_id": 191, "iscrowd": 0, "bbox": [0, 112, 640, 368], "area": 40709}, {"id": 4210240, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 191], "area": 73055}], "file_name": "000000184611.png", "image_id": 184611}, {"segments_info": [{"id": 2055560, "category_id": 85, "iscrowd": 0, "bbox": [2, 2, 432, 369], "area": 140105}], "file_name": "000000184762.png", "image_id": 184762}, {"segments_info": [{"id": 7763347, "category_id": 51, "iscrowd": 0, "bbox": [132, 312, 154, 87], "area": 8853}, {"id": 9468537, "category_id": 51, "iscrowd": 0, "bbox": [347, 196, 96, 48], "area": 2539}, {"id": 4998770, "category_id": 55, "iscrowd": 0, "bbox": [92, 222, 64, 68], "area": 3213}, {"id": 5787509, "category_id": 55, "iscrowd": 0, "bbox": [135, 199, 48, 38], "area": 1325}, {"id": 8553412, "category_id": 55, "iscrowd": 0, "bbox": [441, 251, 74, 70], "area": 3818}, {"id": 7434421, "category_id": 55, "iscrowd": 0, "bbox": [267, 270, 24, 15], "area": 296}, {"id": 8292813, "category_id": 55, "iscrowd": 0, "bbox": [317, 273, 79, 76], "area": 4617}, {"id": 13289929, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 500], "area": 55448}], "file_name": "000000184791.png", "image_id": 184791}, {"segments_info": [{"id": 5127477, "category_id": 1, "iscrowd": 0, "bbox": [146, 295, 108, 186], "area": 10375}, {"id": 6838869, "category_id": 36, "iscrowd": 0, "bbox": [177, 478, 55, 12], "area": 360}, {"id": 12627621, "category_id": 159, "iscrowd": 0, "bbox": [0, 23, 480, 617], "area": 206999}, {"id": 8417385, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 354, 311], "area": 84964}, {"id": 14736089, "category_id": 187, "iscrowd": 0, "bbox": [328, 0, 152, 41], "area": 4327}], "file_name": "000000184978.png", "image_id": 184978}, {"segments_info": [{"id": 4016471, "category_id": 2, "iscrowd": 0, "bbox": [0, 511, 59, 115], "area": 3104}, {"id": 3228237, "category_id": 2, "iscrowd": 0, "bbox": [14, 531, 283, 109], "area": 10962}, {"id": 3290940, "category_id": 2, "iscrowd": 0, "bbox": [58, 556, 37, 19], "area": 571}, {"id": 3488833, "category_id": 2, "iscrowd": 0, "bbox": [149, 575, 73, 65], "area": 1664}, {"id": 5661806, "category_id": 2, "iscrowd": 0, "bbox": [236, 555, 138, 84], "area": 5447}, {"id": 5071474, "category_id": 2, "iscrowd": 0, "bbox": [115, 522, 59, 53], "area": 1163}, {"id": 3910072, "category_id": 130, "iscrowd": 0, "bbox": [204, 201, 56, 92], "area": 2737}, {"id": 8302026, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 426, 624], "area": 103198}, {"id": 8894164, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 414, 640], "area": 111720}], "file_name": "000000185157.png", "image_id": 185157}, {"segments_info": [{"id": 7635091, "category_id": 1, "iscrowd": 0, "bbox": [0, 355, 11, 68], "area": 462}, {"id": 3092882, "category_id": 1, "iscrowd": 0, "bbox": [115, 195, 103, 292], "area": 15225}, {"id": 5400946, "category_id": 18, "iscrowd": 0, "bbox": [167, 387, 109, 181], "area": 9899}, {"id": 4700134, "category_id": 34, "iscrowd": 0, "bbox": [122, 365, 10, 36], "area": 235}, {"id": 5084607, "category_id": 34, "iscrowd": 0, "bbox": [125, 61, 41, 42], "area": 1269}, {"id": 4624567, "category_id": 138, "iscrowd": 0, "bbox": [0, 282, 399, 77], "area": 18996}, {"id": 11648954, "category_id": 171, "iscrowd": 0, "bbox": [0, 203, 308, 90], "area": 10458}, {"id": 4611158, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 399, 355], "area": 77717}, {"id": 16448507, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 399, 192], "area": 21756}, {"id": 2979449, "category_id": 193, "iscrowd": 0, "bbox": [0, 332, 399, 308], "area": 98512}], "file_name": "000000185250.png", "image_id": 185250}, {"segments_info": [{"id": 3088407, "category_id": 1, "iscrowd": 0, "bbox": [177, 434, 25, 47], "area": 461}, {"id": 7168084, "category_id": 42, "iscrowd": 0, "bbox": [179, 477, 38, 9], "area": 141}, {"id": 10126195, "category_id": 155, "iscrowd": 0, "bbox": [0, 180, 421, 460], "area": 189616}, {"id": 11640700, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 421, 149], "area": 59220}, {"id": 5521179, "category_id": 197, "iscrowd": 0, "bbox": [0, 108, 421, 83], "area": 19944}], "file_name": "000000185292.png", "image_id": 185292}, {"segments_info": [{"id": 5797257, "category_id": 24, "iscrowd": 0, "bbox": [0, 96, 28, 53], "area": 967}, {"id": 5070957, "category_id": 24, "iscrowd": 0, "bbox": [358, 157, 162, 155], "area": 12987}, {"id": 6058884, "category_id": 24, "iscrowd": 0, "bbox": [3, 115, 68, 44], "area": 1717}, {"id": 6455958, "category_id": 24, "iscrowd": 0, "bbox": [54, 64, 66, 63], "area": 1774}, {"id": 5798283, "category_id": 24, "iscrowd": 0, "bbox": [85, 77, 99, 152], "area": 2669}, {"id": 4610662, "category_id": 24, "iscrowd": 0, "bbox": [148, 109, 119, 205], "area": 12014}, {"id": 4742506, "category_id": 24, "iscrowd": 0, "bbox": [239, 137, 174, 186], "area": 12956}, {"id": 4282472, "category_id": 24, "iscrowd": 0, "bbox": [440, 112, 167, 209], "area": 15036}, {"id": 6718615, "category_id": 24, "iscrowd": 0, "bbox": [18, 76, 67, 54], "area": 1351}, {"id": 5597816, "category_id": 24, "iscrowd": 0, "bbox": [600, 153, 40, 90], "area": 2636}, {"id": 4677488, "category_id": 24, "iscrowd": 0, "bbox": [1, 107, 160, 196], "area": 14027}, {"id": 5532540, "category_id": 24, "iscrowd": 0, "bbox": [524, 124, 88, 85], "area": 3073}, {"id": 4681849, "category_id": 184, "iscrowd": 0, "bbox": [45, 0, 578, 36], "area": 7455}, {"id": 6003120, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 424], "area": 180010}], "file_name": "000000185409.png", "image_id": 185409}, {"segments_info": [{"id": 5797269, "category_id": 1, "iscrowd": 0, "bbox": [455, 157, 97, 201], "area": 9971}, {"id": 4738397, "category_id": 1, "iscrowd": 0, "bbox": [588, 139, 52, 168], "area": 4344}, {"id": 7566936, "category_id": 1, "iscrowd": 0, "bbox": [410, 157, 20, 12], "area": 132}, {"id": 8619397, "category_id": 1, "iscrowd": 0, "bbox": [595, 348, 45, 124], "area": 2806}, {"id": 7702146, "category_id": 2, "iscrowd": 0, "bbox": [426, 241, 63, 127], "area": 4631}, {"id": 6512977, "category_id": 2, "iscrowd": 0, "bbox": [619, 314, 21, 28], "area": 269}, {"id": 7109493, "category_id": 7, "iscrowd": 0, "bbox": [372, 121, 113, 109], "area": 9751}, {"id": 4331432, "category_id": 27, "iscrowd": 0, "bbox": [620, 252, 20, 89], "area": 1054}, {"id": 3158067, "category_id": 27, "iscrowd": 0, "bbox": [590, 264, 31, 44], "area": 527}, {"id": 3884867, "category_id": 125, "iscrowd": 0, "bbox": [540, 227, 25, 26], "area": 348}, {"id": 7308937, "category_id": 147, "iscrowd": 0, "bbox": [0, 174, 546, 306], "area": 69502}, {"id": 2972488, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 199], "area": 78461}, {"id": 15133154, "category_id": 187, "iscrowd": 0, "bbox": [408, 0, 170, 164], "area": 18223}, {"id": 11781831, "category_id": 190, "iscrowd": 0, "bbox": [264, 226, 376, 254], "area": 51562}, {"id": 2927779, "category_id": 193, "iscrowd": 0, "bbox": [0, 201, 378, 162], "area": 9892}, {"id": 5398886, "category_id": 197, "iscrowd": 0, "bbox": [284, 52, 356, 214], "area": 10967}, {"id": 6322550, "category_id": 199, "iscrowd": 0, "bbox": [591, 108, 49, 93], "area": 2432}], "file_name": "000000185472.png", "image_id": 185472}, {"segments_info": [{"id": 2105390, "category_id": 1, "iscrowd": 0, "bbox": [538, 64, 16, 19], "area": 214}, {"id": 4475487, "category_id": 1, "iscrowd": 0, "bbox": [398, 32, 45, 41], "area": 800}, {"id": 1973819, "category_id": 1, "iscrowd": 0, "bbox": [553, 63, 16, 16], "area": 140}, {"id": 4143941, "category_id": 1, "iscrowd": 0, "bbox": [473, 66, 22, 26], "area": 302}, {"id": 3220526, "category_id": 1, "iscrowd": 0, "bbox": [505, 66, 19, 33], "area": 346}, {"id": 922647, "category_id": 19, "iscrowd": 0, "bbox": [116, 51, 72, 118], "area": 4207}, {"id": 1058874, "category_id": 19, "iscrowd": 0, "bbox": [334, 76, 44, 92], "area": 2477}, {"id": 5211554, "category_id": 19, "iscrowd": 0, "bbox": [516, 70, 73, 103], "area": 4282}, {"id": 1848390, "category_id": 19, "iscrowd": 0, "bbox": [273, 57, 69, 112], "area": 2954}, {"id": 725269, "category_id": 19, "iscrowd": 0, "bbox": [61, 66, 54, 99], "area": 3399}, {"id": 1784660, "category_id": 19, "iscrowd": 0, "bbox": [396, 54, 71, 117], "area": 4543}, {"id": 991027, "category_id": 19, "iscrowd": 0, "bbox": [217, 47, 78, 125], "area": 6031}, {"id": 1054753, "category_id": 19, "iscrowd": 0, "bbox": [188, 58, 40, 111], "area": 2882}, {"id": 1517621, "category_id": 19, "iscrowd": 0, "bbox": [359, 59, 43, 107], "area": 1589}, {"id": 660249, "category_id": 19, "iscrowd": 0, "bbox": [488, 91, 43, 72], "area": 1090}, {"id": 3163991, "category_id": 19, "iscrowd": 0, "bbox": [333, 64, 25, 22], "area": 277}, {"id": 329222, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 126], "area": 49797}, {"id": 606546, "category_id": 193, "iscrowd": 0, "bbox": [0, 140, 640, 54], "area": 24146}], "file_name": "000000185473.png", "image_id": 185473}, {"segments_info": [{"id": 671155, "category_id": 53, "iscrowd": 0, "bbox": [415, 126, 225, 347], "area": 63284}, {"id": 2450591, "category_id": 53, "iscrowd": 0, "bbox": [203, 221, 240, 251], "area": 42338}, {"id": 2849967, "category_id": 53, "iscrowd": 0, "bbox": [175, 51, 164, 177], "area": 19475}, {"id": 1205949, "category_id": 55, "iscrowd": 0, "bbox": [2, 3, 240, 472], "area": 90410}, {"id": 1361384, "category_id": 55, "iscrowd": 0, "bbox": [334, 0, 306, 236], "area": 54335}, {"id": 3621977, "category_id": 122, "iscrowd": 0, "bbox": [0, 0, 583, 480], "area": 23723}], "file_name": "000000185599.png", "image_id": 185599}, {"segments_info": [{"id": 6115381, "category_id": 28, "iscrowd": 0, "bbox": [229, 375, 85, 181], "area": 5414}, {"id": 1662331, "category_id": 52, "iscrowd": 0, "bbox": [33, 111, 200, 354], "area": 27140}, {"id": 2124162, "category_id": 62, "iscrowd": 0, "bbox": [349, 429, 130, 198], "area": 13068}, {"id": 2255234, "category_id": 62, "iscrowd": 0, "bbox": [3, 374, 252, 232], "area": 29345}, {"id": 1798796, "category_id": 122, "iscrowd": 0, "bbox": [88, 116, 94, 349], "area": 326}, {"id": 6583935, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 480, 453], "area": 52439}, {"id": 14735539, "category_id": 154, "iscrowd": 0, "bbox": [157, 197, 209, 27], "area": 2214}, {"id": 14790477, "category_id": 155, "iscrowd": 0, "bbox": [132, 196, 322, 169], "area": 34074}, {"id": 1798023, "category_id": 177, "iscrowd": 0, "bbox": [31, 451, 5, 13], "area": 17}, {"id": 11573107, "category_id": 181, "iscrowd": 0, "bbox": [82, 0, 398, 366], "area": 24038}, {"id": 7975810, "category_id": 184, "iscrowd": 0, "bbox": [141, 88, 256, 133], "area": 18049}, {"id": 16113088, "category_id": 187, "iscrowd": 0, "bbox": [108, 0, 372, 212], "area": 42844}, {"id": 6518400, "category_id": 200, "iscrowd": 0, "bbox": [0, 376, 480, 264], "area": 55485}], "file_name": "000000185802.png", "image_id": 185802}, {"segments_info": [{"id": 1056050, "category_id": 1, "iscrowd": 0, "bbox": [58, 42, 33, 45], "area": 755}, {"id": 6057079, "category_id": 1, "iscrowd": 0, "bbox": [31, 39, 235, 569], "area": 53170}, {"id": 2568513, "category_id": 1, "iscrowd": 0, "bbox": [274, 80, 220, 454], "area": 39505}, {"id": 2637920, "category_id": 1, "iscrowd": 0, "bbox": [174, 65, 49, 64], "area": 1953}, {"id": 791323, "category_id": 1, "iscrowd": 0, "bbox": [0, 36, 32, 197], "area": 4570}, {"id": 1850726, "category_id": 46, "iscrowd": 0, "bbox": [204, 131, 9, 18], "area": 93}, {"id": 1783646, "category_id": 46, "iscrowd": 0, "bbox": [303, 115, 14, 29], "area": 216}, {"id": 2377071, "category_id": 46, "iscrowd": 0, "bbox": [215, 129, 9, 20], "area": 110}, {"id": 2046557, "category_id": 46, "iscrowd": 0, "bbox": [312, 122, 10, 22], "area": 161}, {"id": 1652320, "category_id": 67, "iscrowd": 0, "bbox": [160, 115, 78, 36], "area": 1071}, {"id": 3299976, "category_id": 67, "iscrowd": 0, "bbox": [271, 137, 68, 11], "area": 266}, {"id": 12433591, "category_id": 75, "iscrowd": 0, "bbox": [450, 162, 16, 20], "area": 196}, {"id": 11577507, "category_id": 75, "iscrowd": 0, "bbox": [360, 142, 16, 46], "area": 216}, {"id": 11972521, "category_id": 75, "iscrowd": 0, "bbox": [153, 160, 39, 69], "area": 776}, {"id": 14406863, "category_id": 75, "iscrowd": 0, "bbox": [240, 105, 15, 26], "area": 247}, {"id": 2905738, "category_id": 130, "iscrowd": 0, "bbox": [48, 0, 369, 82], "area": 5880}, {"id": 992582, "category_id": 189, "iscrowd": 0, "bbox": [264, 127, 21, 24], "area": 311}, {"id": 1848660, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 509, 259], "area": 50377}, {"id": 3158849, "category_id": 200, "iscrowd": 0, "bbox": [0, 176, 509, 464], "area": 147427}], "file_name": "000000185890.png", "image_id": 185890}, {"segments_info": [{"id": 4344155, "category_id": 1, "iscrowd": 0, "bbox": [67, 65, 193, 253], "area": 18396}, {"id": 7110279, "category_id": 41, "iscrowd": 0, "bbox": [154, 309, 42, 46], "area": 1214}, {"id": 3293253, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 300, 160], "area": 23941}, {"id": 11315880, "category_id": 187, "iscrowd": 0, "bbox": [20, 0, 317, 81], "area": 13785}, {"id": 11582661, "category_id": 191, "iscrowd": 0, "bbox": [0, 113, 337, 387], "area": 107094}], "file_name": "000000185950.png", "image_id": 185950}, {"segments_info": [{"id": 1645599, "category_id": 1, "iscrowd": 0, "bbox": [112, 65, 90, 184], "area": 10640}, {"id": 6910052, "category_id": 35, "iscrowd": 0, "bbox": [94, 240, 158, 20], "area": 725}, {"id": 9274231, "category_id": 159, "iscrowd": 0, "bbox": [0, 199, 640, 161], "area": 92404}, {"id": 1053976, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 346, 221], "area": 51035}, {"id": 10333100, "category_id": 187, "iscrowd": 0, "bbox": [274, 0, 366, 212], "area": 70089}], "file_name": "000000186042.png", "image_id": 186042}, {"segments_info": [{"id": 9200483, "category_id": 72, "iscrowd": 0, "bbox": [272, 1, 243, 309], "area": 60382}, {"id": 7044763, "category_id": 74, "iscrowd": 0, "bbox": [359, 358, 124, 46], "area": 3541}, {"id": 6848414, "category_id": 76, "iscrowd": 0, "bbox": [170, 274, 161, 61], "area": 4866}, {"id": 4742012, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 83, 427], "area": 32296}, {"id": 5203071, "category_id": 189, "iscrowd": 0, "bbox": [116, 237, 524, 190], "area": 40803}, {"id": 4737853, "category_id": 199, "iscrowd": 0, "bbox": [72, 0, 568, 427], "area": 93241}], "file_name": "000000186282.png", "image_id": 186282}, {"segments_info": [{"id": 7895932, "category_id": 17, "iscrowd": 0, "bbox": [42, 123, 535, 291], "area": 77266}, {"id": 5069358, "category_id": 200, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 229454}], "file_name": "000000186296.png", "image_id": 186296}, {"segments_info": [{"id": 8484462, "category_id": 16, "iscrowd": 0, "bbox": [280, 56, 10, 18], "area": 75}, {"id": 8416609, "category_id": 16, "iscrowd": 0, "bbox": [318, 40, 14, 17], "area": 110}, {"id": 8221547, "category_id": 16, "iscrowd": 0, "bbox": [262, 83, 14, 18], "area": 114}, {"id": 8158329, "category_id": 16, "iscrowd": 0, "bbox": [277, 67, 9, 10], "area": 44}, {"id": 3948203, "category_id": 38, "iscrowd": 0, "bbox": [189, 193, 36, 55], "area": 960}, {"id": 3901862, "category_id": 38, "iscrowd": 0, "bbox": [32, 62, 57, 89], "area": 2139}, {"id": 6178684, "category_id": 38, "iscrowd": 0, "bbox": [243, 227, 38, 65], "area": 1418}, {"id": 2973109, "category_id": 38, "iscrowd": 0, "bbox": [138, 146, 32, 58], "area": 836}, {"id": 10250826, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 345], "area": 195031}, {"id": 8630198, "category_id": 193, "iscrowd": 0, "bbox": [0, 283, 640, 148], "area": 74852}], "file_name": "000000186345.png", "image_id": 186345}, {"segments_info": [{"id": 8752021, "category_id": 16, "iscrowd": 0, "bbox": [499, 277, 63, 71], "area": 1624}, {"id": 2830909, "category_id": 23, "iscrowd": 0, "bbox": [189, 107, 264, 198], "area": 25842}, {"id": 13158599, "category_id": 148, "iscrowd": 0, "bbox": [0, 213, 640, 214], "area": 71996}, {"id": 5736071, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 48], "area": 5499}, {"id": 5791840, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 369], "area": 168010}], "file_name": "000000186422.png", "image_id": 186422}, {"segments_info": [{"id": 6184542, "category_id": 1, "iscrowd": 0, "bbox": [372, 35, 64, 165], "area": 5942}, {"id": 5263440, "category_id": 1, "iscrowd": 0, "bbox": [215, 13, 89, 153], "area": 7341}, {"id": 4342338, "category_id": 1, "iscrowd": 0, "bbox": [63, 0, 170, 234], "area": 14530}, {"id": 5987163, "category_id": 1, "iscrowd": 0, "bbox": [317, 13, 61, 127], "area": 5302}, {"id": 14145495, "category_id": 1, "iscrowd": 0, "bbox": [197, 1, 48, 62], "area": 1833}, {"id": 6381921, "category_id": 1, "iscrowd": 0, "bbox": [118, 181, 262, 424], "area": 52323}, {"id": 5592405, "category_id": 1, "iscrowd": 0, "bbox": [0, 3, 36, 250], "area": 5279}, {"id": 4934475, "category_id": 15, "iscrowd": 0, "bbox": [0, 134, 436, 456], "area": 40191}, {"id": 3750201, "category_id": 27, "iscrowd": 0, "bbox": [183, 97, 68, 73], "area": 3852}, {"id": 6447714, "category_id": 27, "iscrowd": 0, "bbox": [75, 4, 88, 125], "area": 8296}, {"id": 8026746, "category_id": 27, "iscrowd": 0, "bbox": [26, 17, 53, 103], "area": 2793}, {"id": 5658198, "category_id": 31, "iscrowd": 0, "bbox": [396, 148, 40, 50], "area": 1301}, {"id": 2697513, "category_id": 33, "iscrowd": 0, "bbox": [261, 225, 105, 232], "area": 11840}, {"id": 2368548, "category_id": 33, "iscrowd": 0, "bbox": [174, 160, 82, 38], "area": 1644}, {"id": 1118481, "category_id": 33, "iscrowd": 0, "bbox": [31, 179, 60, 101], "area": 4727}, {"id": 6579300, "category_id": 190, "iscrowd": 0, "bbox": [0, 238, 436, 402], "area": 72772}, {"id": 3618615, "category_id": 191, "iscrowd": 0, "bbox": [0, 191, 132, 112], "area": 1914}, {"id": 10790052, "category_id": 197, "iscrowd": 0, "bbox": [144, 0, 180, 40], "area": 3211}], "file_name": "000000186449.png", "image_id": 186449}, {"segments_info": [{"id": 6249052, "category_id": 1, "iscrowd": 0, "bbox": [40, 298, 58, 180], "area": 4602}, {"id": 4078648, "category_id": 7, "iscrowd": 0, "bbox": [1, 113, 209, 301], "area": 34933}, {"id": 5593179, "category_id": 7, "iscrowd": 0, "bbox": [128, 2, 512, 514], "area": 155304}, {"id": 6774104, "category_id": 27, "iscrowd": 0, "bbox": [79, 312, 23, 29], "area": 272}, {"id": 4671048, "category_id": 31, "iscrowd": 0, "bbox": [31, 314, 45, 46], "area": 349}, {"id": 7764347, "category_id": 151, "iscrowd": 0, "bbox": [156, 0, 484, 168], "area": 43895}, {"id": 15526891, "category_id": 187, "iscrowd": 0, "bbox": [74, 0, 381, 216], "area": 13665}, {"id": 10132640, "category_id": 191, "iscrowd": 0, "bbox": [0, 209, 640, 344], "area": 65479}, {"id": 3421242, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 402, 227], "area": 27901}], "file_name": "000000186624.png", "image_id": 186624}, {"segments_info": [{"id": 3230565, "category_id": 44, "iscrowd": 0, "bbox": [187, 361, 17, 40], "area": 481}, {"id": 2969188, "category_id": 44, "iscrowd": 0, "bbox": [413, 388, 27, 52], "area": 841}, {"id": 4348270, "category_id": 44, "iscrowd": 0, "bbox": [166, 361, 18, 37], "area": 458}, {"id": 4679551, "category_id": 44, "iscrowd": 0, "bbox": [168, 398, 24, 55], "area": 895}, {"id": 7362894, "category_id": 72, "iscrowd": 0, "bbox": [3, 213, 167, 94], "area": 14367}, {"id": 3426895, "category_id": 81, "iscrowd": 0, "bbox": [460, 406, 20, 39], "area": 529}, {"id": 2240825, "category_id": 86, "iscrowd": 0, "bbox": [254, 372, 88, 70], "area": 3809}, {"id": 987413, "category_id": 112, "iscrowd": 0, "bbox": [306, 107, 174, 309], "area": 42474}, {"id": 2320053, "category_id": 119, "iscrowd": 0, "bbox": [249, 340, 93, 41], "area": 2420}, {"id": 10468040, "category_id": 130, "iscrowd": 0, "bbox": [178, 0, 302, 186], "area": 41816}, {"id": 1184792, "category_id": 177, "iscrowd": 0, "bbox": [0, 175, 212, 166], "area": 17136}, {"id": 8560554, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 294, 141], "area": 26548}, {"id": 5468803, "category_id": 189, "iscrowd": 0, "bbox": [16, 368, 464, 272], "area": 99269}, {"id": 3694448, "category_id": 190, "iscrowd": 0, "bbox": [0, 477, 119, 163], "area": 11350}, {"id": 4085613, "category_id": 199, "iscrowd": 0, "bbox": [0, 102, 307, 386], "area": 44492}], "file_name": "000000186632.png", "image_id": 186632}, {"segments_info": [{"id": 7705269, "category_id": 25, "iscrowd": 0, "bbox": [144, 131, 225, 289], "area": 22445}, {"id": 7115129, "category_id": 193, "iscrowd": 0, "bbox": [174, 182, 40, 30], "area": 734}], "file_name": "000000186637.png", "image_id": 186637}, {"segments_info": [{"id": 8949937, "category_id": 1, "iscrowd": 0, "bbox": [246, 205, 19, 30], "area": 331}, {"id": 11716052, "category_id": 1, "iscrowd": 0, "bbox": [341, 198, 27, 44], "area": 782}, {"id": 12175314, "category_id": 1, "iscrowd": 0, "bbox": [265, 204, 24, 31], "area": 475}, {"id": 7435159, "category_id": 1, "iscrowd": 0, "bbox": [107, 197, 19, 26], "area": 337}, {"id": 9349065, "category_id": 1, "iscrowd": 0, "bbox": [167, 213, 33, 23], "area": 443}, {"id": 9284301, "category_id": 1, "iscrowd": 0, "bbox": [291, 208, 20, 27], "area": 361}, {"id": 7830392, "category_id": 1, "iscrowd": 0, "bbox": [208, 205, 21, 26], "area": 363}, {"id": 10530245, "category_id": 1, "iscrowd": 0, "bbox": [312, 205, 34, 41], "area": 822}, {"id": 9014987, "category_id": 1, "iscrowd": 0, "bbox": [224, 202, 27, 32], "area": 514}, {"id": 3022147, "category_id": 9, "iscrowd": 0, "bbox": [93, 220, 519, 62], "area": 15865}, {"id": 4863044, "category_id": 148, "iscrowd": 0, "bbox": [0, 208, 612, 404], "area": 201518}], "file_name": "000000186873.png", "image_id": 186873}, {"segments_info": [{"id": 2061525, "category_id": 55, "iscrowd": 0, "bbox": [0, 1, 333, 493], "area": 145522}], "file_name": "000000186929.png", "image_id": 186929}, {"segments_info": [{"id": 6513510, "category_id": 16, "iscrowd": 0, "bbox": [223, 47, 378, 317], "area": 48270}, {"id": 6317674, "category_id": 154, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 218706}, {"id": 7826525, "category_id": 198, "iscrowd": 0, "bbox": [117, 64, 136, 68], "area": 5972}], "file_name": "000000186938.png", "image_id": 186938}, {"segments_info": [{"id": 6313587, "category_id": 46, "iscrowd": 0, "bbox": [224, 307, 19, 59], "area": 711}, {"id": 7564699, "category_id": 49, "iscrowd": 0, "bbox": [297, 328, 46, 19], "area": 177}, {"id": 6577282, "category_id": 49, "iscrowd": 0, "bbox": [198, 367, 37, 17], "area": 217}, {"id": 6776721, "category_id": 50, "iscrowd": 0, "bbox": [218, 366, 31, 19], "area": 140}, {"id": 3677244, "category_id": 51, "iscrowd": 0, "bbox": [272, 315, 33, 17], "area": 428}, {"id": 4727624, "category_id": 51, "iscrowd": 0, "bbox": [163, 343, 43, 25], "area": 843}, {"id": 7965877, "category_id": 62, "iscrowd": 0, "bbox": [47, 291, 186, 341], "area": 36035}, {"id": 6651568, "category_id": 62, "iscrowd": 0, "bbox": [233, 263, 125, 255], "area": 8771}, {"id": 5203360, "category_id": 67, "iscrowd": 0, "bbox": [15, 306, 398, 323], "area": 42668}, {"id": 10129822, "category_id": 78, "iscrowd": 0, "bbox": [407, 213, 50, 52], "area": 2453}, {"id": 6907000, "category_id": 79, "iscrowd": 0, "bbox": [431, 261, 26, 192], "area": 3908}, {"id": 5260384, "category_id": 81, "iscrowd": 0, "bbox": [285, 251, 50, 16], "area": 572}, {"id": 6116465, "category_id": 81, "iscrowd": 0, "bbox": [196, 249, 76, 13], "area": 592}, {"id": 13552588, "category_id": 82, "iscrowd": 0, "bbox": [17, 145, 140, 217], "area": 20035}, {"id": 8553118, "category_id": 107, "iscrowd": 0, "bbox": [334, 245, 123, 46], "area": 1907}, {"id": 4214404, "category_id": 118, "iscrowd": 0, "bbox": [0, 391, 457, 249], "area": 51917}, {"id": 4999790, "category_id": 130, "iscrowd": 0, "bbox": [148, 0, 165, 188], "area": 16507}, {"id": 5398162, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 457, 395], "area": 40916}, {"id": 3090501, "category_id": 181, "iscrowd": 0, "bbox": [253, 64, 116, 161], "area": 11907}, {"id": 7634343, "category_id": 188, "iscrowd": 0, "bbox": [47, 44, 410, 277], "area": 37598}], "file_name": "000000186980.png", "image_id": 186980}, {"segments_info": [{"id": 3029051, "category_id": 1, "iscrowd": 0, "bbox": [196, 317, 133, 301], "area": 17436}, {"id": 7174278, "category_id": 1, "iscrowd": 0, "bbox": [0, 315, 321, 324], "area": 56484}, {"id": 10860483, "category_id": 1, "iscrowd": 0, "bbox": [176, 127, 175, 334], "area": 17846}, {"id": 12578537, "category_id": 37, "iscrowd": 0, "bbox": [302, 316, 22, 19], "area": 252}, {"id": 11523822, "category_id": 37, "iscrowd": 0, "bbox": [279, 196, 33, 33], "area": 889}, {"id": 8297903, "category_id": 43, "iscrowd": 0, "bbox": [285, 195, 140, 288], "area": 27516}, {"id": 2195116, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 425, 325], "area": 105107}, {"id": 10995410, "category_id": 190, "iscrowd": 0, "bbox": [0, 321, 425, 319], "area": 40818}], "file_name": "000000187055.png", "image_id": 187055}, {"segments_info": [{"id": 8419706, "category_id": 1, "iscrowd": 0, "bbox": [410, 244, 8, 18], "area": 81}, {"id": 7698563, "category_id": 1, "iscrowd": 0, "bbox": [398, 248, 26, 77], "area": 1081}, {"id": 7565694, "category_id": 1, "iscrowd": 0, "bbox": [449, 233, 26, 87], "area": 1114}, {"id": 9007467, "category_id": 1, "iscrowd": 0, "bbox": [425, 248, 16, 61], "area": 419}, {"id": 7040116, "category_id": 1, "iscrowd": 0, "bbox": [367, 250, 32, 80], "area": 927}, {"id": 7565945, "category_id": 1, "iscrowd": 0, "bbox": [539, 244, 11, 22], "area": 179}, {"id": 9206394, "category_id": 1, "iscrowd": 0, "bbox": [438, 244, 20, 53], "area": 255}, {"id": 6644335, "category_id": 1, "iscrowd": 0, "bbox": [414, 245, 25, 74], "area": 483}, {"id": 4208179, "category_id": 1, "iscrowd": 0, "bbox": [480, 245, 17, 51], "area": 540}, {"id": 9014151, "category_id": 6, "iscrowd": 0, "bbox": [2, 120, 407, 263], "area": 78679}, {"id": 9537411, "category_id": 6, "iscrowd": 0, "bbox": [547, 219, 93, 34], "area": 2735}, {"id": 8485754, "category_id": 7, "iscrowd": 0, "bbox": [407, 219, 233, 33], "area": 1936}, {"id": 1052688, "category_id": 27, "iscrowd": 0, "bbox": [470, 250, 12, 22], "area": 168}, {"id": 5195846, "category_id": 31, "iscrowd": 0, "bbox": [479, 254, 8, 18], "area": 78}, {"id": 6707797, "category_id": 31, "iscrowd": 0, "bbox": [369, 260, 20, 31], "area": 366}, {"id": 855567, "category_id": 31, "iscrowd": 0, "bbox": [392, 275, 10, 19], "area": 114}, {"id": 5393490, "category_id": 31, "iscrowd": 0, "bbox": [407, 260, 8, 17], "area": 25}, {"id": 6382437, "category_id": 125, "iscrowd": 0, "bbox": [48, 250, 513, 230], "area": 45847}, {"id": 5330004, "category_id": 149, "iscrowd": 0, "bbox": [324, 244, 134, 87], "area": 824}, {"id": 2306350, "category_id": 184, "iscrowd": 0, "bbox": [243, 135, 397, 117], "area": 20854}, {"id": 16249326, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 174], "area": 88735}, {"id": 6578526, "category_id": 191, "iscrowd": 0, "bbox": [0, 323, 310, 157], "area": 15787}, {"id": 4869444, "category_id": 192, "iscrowd": 0, "bbox": [0, 84, 125, 142], "area": 5482}, {"id": 5270903, "category_id": 193, "iscrowd": 0, "bbox": [428, 250, 212, 230], "area": 36821}, {"id": 8357790, "category_id": 197, "iscrowd": 0, "bbox": [470, 220, 77, 54], "area": 1910}], "file_name": "000000187144.png", "image_id": 187144}, {"segments_info": [{"id": 399162, "category_id": 17, "iscrowd": 0, "bbox": [296, 46, 274, 182], "area": 27791}, {"id": 521, "category_id": 17, "iscrowd": 0, "bbox": [0, 222, 412, 252], "area": 73896}, {"id": 660266, "category_id": 62, "iscrowd": 0, "bbox": [5, 102, 75, 128], "area": 2883}, {"id": 201017, "category_id": 63, "iscrowd": 0, "bbox": [114, 0, 526, 407], "area": 107961}, {"id": 17, "category_id": 93, "iscrowd": 0, "bbox": [232, 388, 408, 92], "area": 28884}, {"id": 1585508, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 269, 184], "area": 31041}, {"id": 531532, "category_id": 200, "iscrowd": 0, "bbox": [0, 108, 201, 324], "area": 19149}], "file_name": "000000187236.png", "image_id": 187236}, {"segments_info": [{"id": 5853773, "category_id": 1, "iscrowd": 0, "bbox": [0, 237, 314, 397], "area": 61262}, {"id": 12369860, "category_id": 70, "iscrowd": 0, "bbox": [276, 55, 151, 291], "area": 29969}, {"id": 11121344, "category_id": 81, "iscrowd": 0, "bbox": [0, 27, 65, 29], "area": 1647}, {"id": 7505311, "category_id": 107, "iscrowd": 0, "bbox": [0, 32, 168, 48], "area": 4532}, {"id": 4937817, "category_id": 168, "iscrowd": 0, "bbox": [295, 0, 150, 76], "area": 8443}, {"id": 11845578, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 98610}, {"id": 10792631, "category_id": 190, "iscrowd": 0, "bbox": [0, 227, 346, 401], "area": 49929}, {"id": 7963539, "category_id": 195, "iscrowd": 0, "bbox": [126, 120, 55, 63], "area": 2005}, {"id": 11646911, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 327, 240], "area": 27466}, {"id": 7312277, "category_id": 200, "iscrowd": 0, "bbox": [0, 268, 376, 372], "area": 13102}], "file_name": "000000187243.png", "image_id": 187243}, {"segments_info": [{"id": 5720645, "category_id": 1, "iscrowd": 0, "bbox": [137, 126, 238, 190], "area": 30508}, {"id": 5259587, "category_id": 1, "iscrowd": 0, "bbox": [268, 127, 186, 192], "area": 23811}, {"id": 5265240, "category_id": 44, "iscrowd": 0, "bbox": [474, 0, 166, 473], "area": 75883}, {"id": 724493, "category_id": 72, "iscrowd": 0, "bbox": [37, 2, 448, 384], "area": 107914}, {"id": 263941, "category_id": 184, "iscrowd": 0, "bbox": [0, 125, 52, 252], "area": 10676}, {"id": 267565, "category_id": 189, "iscrowd": 0, "bbox": [0, 374, 640, 106], "area": 48540}, {"id": 2635822, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 166, 161], "area": 7203}], "file_name": "000000187249.png", "image_id": 187249}, {"segments_info": [{"id": 7837342, "category_id": 82, "iscrowd": 0, "bbox": [98, 149, 249, 466], "area": 106940}, {"id": 1381663, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 39], "area": 16217}, {"id": 3492466, "category_id": 188, "iscrowd": 0, "bbox": [0, 31, 466, 552], "area": 142037}, {"id": 3551800, "category_id": 190, "iscrowd": 0, "bbox": [0, 563, 480, 77], "area": 23084}, {"id": 4933714, "category_id": 199, "iscrowd": 0, "bbox": [0, 37, 480, 589], "area": 18600}], "file_name": "000000187271.png", "image_id": 187271}, {"segments_info": [{"id": 3225177, "category_id": 1, "iscrowd": 0, "bbox": [257, 170, 86, 219], "area": 8901}, {"id": 5726549, "category_id": 42, "iscrowd": 0, "bbox": [291, 225, 63, 94], "area": 2373}, {"id": 7041406, "category_id": 154, "iscrowd": 0, "bbox": [0, 378, 640, 47], "area": 22674}, {"id": 9605263, "category_id": 155, "iscrowd": 0, "bbox": [0, 61, 640, 344], "area": 196671}, {"id": 9670025, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 66], "area": 41091}], "file_name": "000000187362.png", "image_id": 187362}, {"segments_info": [{"id": 5992311, "category_id": 70, "iscrowd": 0, "bbox": [107, 455, 150, 184], "area": 7622}, {"id": 11978180, "category_id": 81, "iscrowd": 0, "bbox": [21, 490, 103, 36], "area": 2684}, {"id": 10991288, "category_id": 107, "iscrowd": 0, "bbox": [0, 472, 187, 168], "area": 15998}, {"id": 7242627, "category_id": 112, "iscrowd": 0, "bbox": [163, 175, 264, 465], "area": 51684}, {"id": 11189178, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 346, 171], "area": 9047}, {"id": 6914174, "category_id": 133, "iscrowd": 0, "bbox": [0, 190, 49, 226], "area": 8577}, {"id": 7440007, "category_id": 176, "iscrowd": 0, "bbox": [307, 255, 88, 310], "area": 21685}, {"id": 4282196, "category_id": 186, "iscrowd": 0, "bbox": [62, 0, 365, 112], "area": 24567}, {"id": 3032937, "category_id": 188, "iscrowd": 0, "bbox": [0, 511, 182, 129], "area": 9514}, {"id": 7636100, "category_id": 190, "iscrowd": 0, "bbox": [180, 573, 216, 67], "area": 8607}, {"id": 3428681, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 498], "area": 91723}], "file_name": "000000187513.png", "image_id": 187513}, {"segments_info": [{"id": 7628927, "category_id": 1, "iscrowd": 0, "bbox": [111, 0, 439, 343], "area": 75409}, {"id": 4016230, "category_id": 41, "iscrowd": 0, "bbox": [63, 0, 149, 292], "area": 15635}, {"id": 5591390, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 436], "area": 186553}, {"id": 5524571, "category_id": 191, "iscrowd": 0, "bbox": [83, 128, 23, 45], "area": 498}], "file_name": "000000187585.png", "image_id": 187585}, {"segments_info": [{"id": 2434864, "category_id": 1, "iscrowd": 0, "bbox": [209, 240, 70, 72], "area": 3153}, {"id": 5398127, "category_id": 1, "iscrowd": 0, "bbox": [88, 126, 28, 126], "area": 1362}, {"id": 4080205, "category_id": 1, "iscrowd": 0, "bbox": [270, 233, 62, 69], "area": 1885}, {"id": 4872565, "category_id": 1, "iscrowd": 0, "bbox": [111, 140, 94, 268], "area": 11527}, {"id": 6319751, "category_id": 1, "iscrowd": 0, "bbox": [0, 129, 15, 66], "area": 510}, {"id": 3949914, "category_id": 1, "iscrowd": 0, "bbox": [107, 137, 13, 35], "area": 161}, {"id": 6252142, "category_id": 1, "iscrowd": 0, "bbox": [2, 109, 49, 126], "area": 2080}, {"id": 2502459, "category_id": 1, "iscrowd": 0, "bbox": [14, 140, 42, 240], "area": 4802}, {"id": 2500654, "category_id": 1, "iscrowd": 0, "bbox": [41, 108, 89, 345], "area": 18283}, {"id": 3887205, "category_id": 1, "iscrowd": 0, "bbox": [159, 116, 55, 160], "area": 3901}, {"id": 2335395, "category_id": 37, "iscrowd": 0, "bbox": [525, 295, 10, 9], "area": 75}, {"id": 2140589, "category_id": 37, "iscrowd": 0, "bbox": [525, 275, 5, 11], "area": 37}, {"id": 2672059, "category_id": 37, "iscrowd": 0, "bbox": [515, 302, 10, 10], "area": 70}, {"id": 2927012, "category_id": 37, "iscrowd": 0, "bbox": [529, 273, 10, 12], "area": 99}, {"id": 2735284, "category_id": 37, "iscrowd": 0, "bbox": [526, 304, 9, 10], "area": 71}, {"id": 3192243, "category_id": 37, "iscrowd": 0, "bbox": [506, 274, 9, 9], "area": 61}, {"id": 1870205, "category_id": 37, "iscrowd": 0, "bbox": [517, 312, 7, 7], "area": 40}, {"id": 2790539, "category_id": 37, "iscrowd": 0, "bbox": [493, 282, 12, 13], "area": 109}, {"id": 2140330, "category_id": 37, "iscrowd": 0, "bbox": [521, 285, 8, 10], "area": 56}, {"id": 2991532, "category_id": 37, "iscrowd": 0, "bbox": [516, 293, 9, 10], "area": 77}, {"id": 2997171, "category_id": 37, "iscrowd": 0, "bbox": [505, 307, 11, 10], "area": 83}, {"id": 2731686, "category_id": 37, "iscrowd": 0, "bbox": [503, 290, 9, 8], "area": 67}, {"id": 2864815, "category_id": 37, "iscrowd": 0, "bbox": [529, 285, 9, 10], "area": 68}, {"id": 2909558, "category_id": 37, "iscrowd": 1, "bbox": [487, 270, 58, 54], "area": 1180}, {"id": 10463669, "category_id": 43, "iscrowd": 0, "bbox": [127, 216, 62, 49], "area": 1440}, {"id": 8422560, "category_id": 43, "iscrowd": 0, "bbox": [196, 275, 29, 32], "area": 455}, {"id": 13359068, "category_id": 62, "iscrowd": 0, "bbox": [411, 84, 44, 36], "area": 1141}, {"id": 11050912, "category_id": 92, "iscrowd": 0, "bbox": [18, 0, 601, 287], "area": 118504}, {"id": 8027271, "category_id": 138, "iscrowd": 0, "bbox": [575, 212, 65, 77], "area": 3436}, {"id": 1787178, "category_id": 145, "iscrowd": 0, "bbox": [0, 297, 640, 183], "area": 82939}, {"id": 7240575, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 24, 80], "area": 1725}, {"id": 5131343, "category_id": 190, "iscrowd": 0, "bbox": [323, 267, 234, 22], "area": 1324}, {"id": 6713483, "category_id": 195, "iscrowd": 0, "bbox": [0, 305, 452, 109], "area": 9770}, {"id": 7372159, "category_id": 199, "iscrowd": 0, "bbox": [0, 75, 25, 82], "area": 1416}, {"id": 2894963, "category_id": 200, "iscrowd": 0, "bbox": [195, 269, 445, 52], "area": 9639}], "file_name": "000000187734.png", "image_id": 187734}, {"segments_info": [{"id": 4543836, "category_id": 5, "iscrowd": 0, "bbox": [208, 166, 115, 70], "area": 3188}, {"id": 4813645, "category_id": 184, "iscrowd": 0, "bbox": [0, 397, 76, 83], "area": 4597}, {"id": 12487767, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 299300}], "file_name": "000000187745.png", "image_id": 187745}, {"segments_info": [{"id": 6252139, "category_id": 1, "iscrowd": 0, "bbox": [184, 52, 186, 153], "area": 10138}, {"id": 3424848, "category_id": 41, "iscrowd": 0, "bbox": [333, 176, 42, 47], "area": 927}, {"id": 2905709, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 68469}, {"id": 11577243, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 485, 353], "area": 107762}], "file_name": "000000187990.png", "image_id": 187990}, {"segments_info": [{"id": 7502752, "category_id": 1, "iscrowd": 0, "bbox": [506, 180, 27, 24], "area": 410}, {"id": 4144705, "category_id": 1, "iscrowd": 0, "bbox": [407, 249, 73, 215], "area": 9527}, {"id": 9608357, "category_id": 1, "iscrowd": 0, "bbox": [568, 174, 72, 291], "area": 12324}, {"id": 10524049, "category_id": 1, "iscrowd": 0, "bbox": [82, 203, 159, 302], "area": 21740}, {"id": 12366775, "category_id": 1, "iscrowd": 0, "bbox": [436, 140, 169, 455], "area": 41980}, {"id": 9936803, "category_id": 1, "iscrowd": 0, "bbox": [189, 57, 173, 415], "area": 23131}, {"id": 9800847, "category_id": 1, "iscrowd": 0, "bbox": [259, 33, 118, 395], "area": 23108}, {"id": 14013653, "category_id": 3, "iscrowd": 0, "bbox": [362, 243, 50, 25], "area": 760}, {"id": 10395018, "category_id": 3, "iscrowd": 0, "bbox": [1, 289, 118, 99], "area": 10211}, {"id": 11315352, "category_id": 3, "iscrowd": 0, "bbox": [182, 300, 55, 47], "area": 804}, {"id": 4866429, "category_id": 3, "iscrowd": 0, "bbox": [369, 260, 32, 30], "area": 700}, {"id": 4143394, "category_id": 8, "iscrowd": 0, "bbox": [345, 235, 110, 151], "area": 6541}, {"id": 6249110, "category_id": 37, "iscrowd": 0, "bbox": [287, 37, 36, 33], "area": 823}, {"id": 6328697, "category_id": 145, "iscrowd": 0, "bbox": [0, 424, 640, 185], "area": 87270}, {"id": 7112082, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 387], "area": 88020}, {"id": 8818821, "category_id": 185, "iscrowd": 0, "bbox": [0, 132, 497, 254], "area": 40825}, {"id": 6722468, "category_id": 193, "iscrowd": 0, "bbox": [0, 357, 626, 101], "area": 19406}], "file_name": "000000188296.png", "image_id": 188296}, {"segments_info": [{"id": 3550529, "category_id": 1, "iscrowd": 0, "bbox": [405, 255, 12, 31], "area": 263}, {"id": 6188134, "category_id": 8, "iscrowd": 0, "bbox": [76, 209, 329, 172], "area": 41840}, {"id": 4868676, "category_id": 149, "iscrowd": 0, "bbox": [0, 291, 564, 117], "area": 29715}, {"id": 6845550, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 298], "area": 86514}, {"id": 15394777, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 629, 142], "area": 35850}, {"id": 4807780, "category_id": 193, "iscrowd": 0, "bbox": [27, 123, 410, 151], "area": 27961}, {"id": 5337736, "category_id": 194, "iscrowd": 0, "bbox": [0, 220, 640, 188], "area": 32207}], "file_name": "000000188439.png", "image_id": 188439}, {"segments_info": [{"id": 1515040, "category_id": 1, "iscrowd": 0, "bbox": [58, 133, 29, 27], "area": 389}, {"id": 1055003, "category_id": 1, "iscrowd": 0, "bbox": [135, 134, 26, 36], "area": 564}, {"id": 8551294, "category_id": 1, "iscrowd": 0, "bbox": [464, 113, 33, 30], "area": 553}, {"id": 1910826, "category_id": 1, "iscrowd": 0, "bbox": [391, 184, 51, 79], "area": 1999}, {"id": 7762804, "category_id": 1, "iscrowd": 0, "bbox": [455, 93, 36, 28], "area": 593}, {"id": 1252123, "category_id": 1, "iscrowd": 0, "bbox": [118, 152, 32, 57], "area": 1231}, {"id": 1930334, "category_id": 1, "iscrowd": 0, "bbox": [176, 106, 35, 74], "area": 1531}, {"id": 8814719, "category_id": 1, "iscrowd": 0, "bbox": [94, 154, 26, 33], "area": 603}, {"id": 6773076, "category_id": 1, "iscrowd": 0, "bbox": [363, 212, 46, 53], "area": 1114}, {"id": 8422791, "category_id": 1, "iscrowd": 0, "bbox": [318, 173, 70, 98], "area": 2558}, {"id": 8950423, "category_id": 1, "iscrowd": 0, "bbox": [232, 249, 95, 120], "area": 4247}, {"id": 4151134, "category_id": 1, "iscrowd": 0, "bbox": [47, 171, 22, 34], "area": 578}, {"id": 4276040, "category_id": 1, "iscrowd": 0, "bbox": [292, 186, 21, 20], "area": 231}, {"id": 2041126, "category_id": 1, "iscrowd": 1, "bbox": [0, 0, 640, 219], "area": 108738}, {"id": 5263696, "category_id": 39, "iscrowd": 0, "bbox": [383, 157, 31, 25], "area": 133}, {"id": 2697772, "category_id": 40, "iscrowd": 0, "bbox": [365, 240, 12, 12], "area": 74}, {"id": 1319195, "category_id": 62, "iscrowd": 0, "bbox": [427, 177, 25, 16], "area": 349}, {"id": 1709842, "category_id": 62, "iscrowd": 0, "bbox": [586, 175, 12, 28], "area": 126}, {"id": 1120790, "category_id": 62, "iscrowd": 0, "bbox": [479, 176, 25, 28], "area": 171}, {"id": 2372917, "category_id": 62, "iscrowd": 0, "bbox": [622, 172, 18, 13], "area": 197}, {"id": 1384990, "category_id": 62, "iscrowd": 0, "bbox": [451, 198, 28, 12], "area": 283}, {"id": 1581855, "category_id": 62, "iscrowd": 0, "bbox": [425, 198, 10, 10], "area": 68}, {"id": 1252904, "category_id": 62, "iscrowd": 0, "bbox": [400, 177, 27, 16], "area": 285}, {"id": 1187353, "category_id": 62, "iscrowd": 0, "bbox": [466, 177, 27, 16], "area": 379}, {"id": 3696486, "category_id": 145, "iscrowd": 0, "bbox": [0, 169, 640, 285], "area": 149329}, {"id": 2501417, "category_id": 185, "iscrowd": 0, "bbox": [369, 168, 43, 56], "area": 710}, {"id": 1649194, "category_id": 197, "iscrowd": 0, "bbox": [186, 0, 81, 208], "area": 9555}], "file_name": "000000188465.png", "image_id": 188465}, {"segments_info": [{"id": 4672840, "category_id": 1, "iscrowd": 0, "bbox": [73, 128, 270, 512], "area": 91816}, {"id": 2899073, "category_id": 53, "iscrowd": 0, "bbox": [188, 321, 90, 64], "area": 3612}, {"id": 13020061, "category_id": 93, "iscrowd": 0, "bbox": [0, 244, 480, 396], "area": 79218}, {"id": 2175281, "category_id": 144, "iscrowd": 0, "bbox": [53, 177, 427, 82], "area": 8099}, {"id": 2306362, "category_id": 184, "iscrowd": 0, "bbox": [70, 208, 410, 149], "area": 22539}, {"id": 1256233, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 480, 231], "area": 79949}, {"id": 6384230, "category_id": 195, "iscrowd": 0, "bbox": [123, 247, 39, 29], "area": 607}], "file_name": "000000188592.png", "image_id": 188592}, {"segments_info": [{"id": 3552822, "category_id": 9, "iscrowd": 0, "bbox": [36, 118, 268, 88], "area": 12744}, {"id": 2894892, "category_id": 9, "iscrowd": 0, "bbox": [34, 80, 165, 100], "area": 1697}, {"id": 4605510, "category_id": 9, "iscrowd": 0, "bbox": [26, 150, 28, 21], "area": 338}, {"id": 3092271, "category_id": 154, "iscrowd": 0, "bbox": [0, 146, 333, 354], "area": 100026}, {"id": 2960685, "category_id": 155, "iscrowd": 0, "bbox": [206, 156, 120, 79], "area": 4199}, {"id": 6184542, "category_id": 187, "iscrowd": 0, "bbox": [0, 8, 326, 156], "area": 38156}, {"id": 394758, "category_id": 192, "iscrowd": 0, "bbox": [12, 91, 43, 71], "area": 1745}], "file_name": "000000188689.png", "image_id": 188689}, {"segments_info": [{"id": 4482963, "category_id": 52, "iscrowd": 0, "bbox": [0, 1, 499, 358], "area": 99917}, {"id": 4217479, "category_id": 122, "iscrowd": 0, "bbox": [0, 100, 500, 264], "area": 5677}, {"id": 6648193, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 456, 303], "area": 33676}], "file_name": "000000188906.png", "image_id": 188906}, {"segments_info": [{"id": 6464954, "category_id": 52, "iscrowd": 0, "bbox": [60, 45, 121, 44], "area": 2805}, {"id": 4755627, "category_id": 52, "iscrowd": 0, "bbox": [21, 75, 178, 130], "area": 4429}, {"id": 4692408, "category_id": 52, "iscrowd": 0, "bbox": [21, 67, 153, 86], "area": 6414}, {"id": 1840705, "category_id": 53, "iscrowd": 0, "bbox": [335, 7, 143, 192], "area": 17443}, {"id": 1863839, "category_id": 55, "iscrowd": 0, "bbox": [261, 61, 90, 75], "area": 4690}, {"id": 2724806, "category_id": 55, "iscrowd": 0, "bbox": [252, 120, 103, 100], "area": 7932}, {"id": 2124944, "category_id": 55, "iscrowd": 0, "bbox": [184, 47, 83, 88], "area": 5506}, {"id": 2964096, "category_id": 122, "iscrowd": 0, "bbox": [48, 90, 229, 175], "area": 20756}, {"id": 4280939, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 334], "area": 18180}], "file_name": "000000189078.png", "image_id": 189078}, {"segments_info": [{"id": 8223088, "category_id": 62, "iscrowd": 0, "bbox": [346, 158, 79, 129], "area": 4676}, {"id": 12042688, "category_id": 62, "iscrowd": 0, "bbox": [126, 179, 55, 60], "area": 2636}, {"id": 8355706, "category_id": 82, "iscrowd": 0, "bbox": [225, 47, 97, 151], "area": 11852}, {"id": 4935240, "category_id": 100, "iscrowd": 0, "bbox": [60, 256, 224, 33], "area": 2143}, {"id": 2497041, "category_id": 141, "iscrowd": 0, "bbox": [256, 232, 89, 58], "area": 2607}, {"id": 6186622, "category_id": 151, "iscrowd": 0, "bbox": [83, 11, 89, 58], "area": 3864}, {"id": 4803922, "category_id": 171, "iscrowd": 0, "bbox": [0, 57, 189, 209], "area": 11932}, {"id": 3956306, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 127], "area": 35730}, {"id": 10068124, "category_id": 185, "iscrowd": 0, "bbox": [14, 56, 486, 137], "area": 28483}, {"id": 14869216, "category_id": 187, "iscrowd": 0, "bbox": [62, 0, 72, 18], "area": 955}, {"id": 3615259, "category_id": 191, "iscrowd": 0, "bbox": [0, 235, 500, 140], "area": 26739}, {"id": 1713681, "category_id": 193, "iscrowd": 0, "bbox": [0, 143, 500, 212], "area": 34215}], "file_name": "000000189213.png", "image_id": 189213}, {"segments_info": [{"id": 5852033, "category_id": 11, "iscrowd": 0, "bbox": [366, 186, 93, 206], "area": 11735}, {"id": 4537390, "category_id": 128, "iscrowd": 0, "bbox": [0, 17, 155, 194], "area": 20826}, {"id": 4996134, "category_id": 149, "iscrowd": 0, "bbox": [0, 224, 239, 203], "area": 26660}, {"id": 8616819, "category_id": 175, "iscrowd": 0, "bbox": [141, 0, 499, 278], "area": 98138}, {"id": 10588553, "category_id": 181, "iscrowd": 0, "bbox": [516, 0, 124, 200], "area": 22221}, {"id": 13156529, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 143, 106], "area": 7985}, {"id": 8681055, "category_id": 191, "iscrowd": 0, "bbox": [0, 186, 640, 241], "area": 83914}, {"id": 3616035, "category_id": 197, "iscrowd": 0, "bbox": [99, 0, 76, 59], "area": 1162}], "file_name": "000000189226.png", "image_id": 189226}, {"segments_info": [{"id": 333410, "category_id": 62, "iscrowd": 0, "bbox": [189, 349, 114, 119], "area": 10945}, {"id": 4742776, "category_id": 109, "iscrowd": 0, "bbox": [0, 132, 419, 320], "area": 47531}, {"id": 2641257, "category_id": 112, "iscrowd": 0, "bbox": [306, 211, 56, 173], "area": 6453}, {"id": 66067, "category_id": 118, "iscrowd": 0, "bbox": [319, 371, 132, 79], "area": 7157}, {"id": 15397367, "category_id": 130, "iscrowd": 0, "bbox": [431, 282, 209, 198], "area": 19589}, {"id": 3826570, "category_id": 133, "iscrowd": 0, "bbox": [555, 198, 85, 145], "area": 10779}, {"id": 1186339, "category_id": 181, "iscrowd": 0, "bbox": [0, 220, 472, 260], "area": 7747}, {"id": 10202821, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 172], "area": 102206}, {"id": 329483, "category_id": 189, "iscrowd": 0, "bbox": [0, 399, 42, 81], "area": 2483}, {"id": 132109, "category_id": 190, "iscrowd": 0, "bbox": [374, 323, 126, 69], "area": 5188}, {"id": 4619659, "category_id": 199, "iscrowd": 0, "bbox": [134, 157, 506, 282], "area": 70081}, {"id": 4152699, "category_id": 200, "iscrowd": 0, "bbox": [36, 424, 396, 56], "area": 12396}], "file_name": "000000189310.png", "image_id": 189310}, {"segments_info": [{"id": 3950228, "category_id": 32, "iscrowd": 0, "bbox": [81, 240, 244, 132], "area": 9074}, {"id": 12568005, "category_id": 67, "iscrowd": 0, "bbox": [1, 416, 479, 218], "area": 46095}, {"id": 6644831, "category_id": 72, "iscrowd": 0, "bbox": [350, 124, 73, 59], "area": 4236}, {"id": 3289648, "category_id": 72, "iscrowd": 0, "bbox": [83, 108, 72, 71], "area": 4378}, {"id": 5864860, "category_id": 88, "iscrowd": 0, "bbox": [3, 56, 378, 557], "area": 116991}, {"id": 15329509, "category_id": 130, "iscrowd": 0, "bbox": [0, 30, 480, 192], "area": 6084}, {"id": 11183779, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 162], "area": 48751}, {"id": 8356226, "category_id": 189, "iscrowd": 0, "bbox": [0, 217, 480, 423], "area": 9232}, {"id": 11775911, "category_id": 199, "iscrowd": 0, "bbox": [330, 167, 150, 71], "area": 5858}], "file_name": "000000189436.png", "image_id": 189436}, {"segments_info": [{"id": 2304309, "category_id": 49, "iscrowd": 0, "bbox": [218, 0, 105, 222], "area": 6875}, {"id": 1250335, "category_id": 61, "iscrowd": 0, "bbox": [314, 27, 225, 274], "area": 42548}, {"id": 3093570, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 41321}], "file_name": "000000189451.png", "image_id": 189451}, {"segments_info": [{"id": 5857137, "category_id": 1, "iscrowd": 0, "bbox": [237, 18, 82, 135], "area": 4575}, {"id": 8027527, "category_id": 1, "iscrowd": 0, "bbox": [1, 86, 51, 180], "area": 4237}, {"id": 9672609, "category_id": 1, "iscrowd": 0, "bbox": [23, 71, 33, 38], "area": 457}, {"id": 5987951, "category_id": 1, "iscrowd": 0, "bbox": [408, 34, 89, 123], "area": 3492}, {"id": 4671565, "category_id": 1, "iscrowd": 0, "bbox": [401, 57, 32, 69], "area": 1098}, {"id": 4409692, "category_id": 1, "iscrowd": 0, "bbox": [4, 21, 213, 331], "area": 36841}, {"id": 9080991, "category_id": 1, "iscrowd": 0, "bbox": [231, 88, 130, 202], "area": 16482}, {"id": 7499125, "category_id": 1, "iscrowd": 0, "bbox": [352, 102, 63, 67], "area": 2287}, {"id": 7243184, "category_id": 1, "iscrowd": 0, "bbox": [323, 67, 31, 66], "area": 1367}, {"id": 7370119, "category_id": 1, "iscrowd": 0, "bbox": [171, 99, 50, 79], "area": 1826}, {"id": 3488071, "category_id": 1, "iscrowd": 0, "bbox": [398, 92, 102, 141], "area": 9939}, {"id": 6796236, "category_id": 44, "iscrowd": 0, "bbox": [62, 295, 46, 57], "area": 1777}, {"id": 4607616, "category_id": 44, "iscrowd": 0, "bbox": [118, 240, 54, 126], "area": 3129}, {"id": 3885658, "category_id": 44, "iscrowd": 0, "bbox": [161, 309, 31, 66], "area": 1196}, {"id": 8098715, "category_id": 47, "iscrowd": 0, "bbox": [23, 333, 40, 42], "area": 1155}, {"id": 3359806, "category_id": 47, "iscrowd": 0, "bbox": [167, 254, 38, 104], "area": 2675}, {"id": 9085095, "category_id": 47, "iscrowd": 0, "bbox": [360, 244, 41, 59], "area": 2103}, {"id": 4019014, "category_id": 47, "iscrowd": 0, "bbox": [455, 247, 45, 123], "area": 4925}, {"id": 3360320, "category_id": 47, "iscrowd": 0, "bbox": [375, 196, 39, 81], "area": 1662}, {"id": 7175556, "category_id": 47, "iscrowd": 0, "bbox": [407, 220, 37, 71], "area": 2107}, {"id": 8883599, "category_id": 48, "iscrowd": 0, "bbox": [201, 336, 76, 16], "area": 247}, {"id": 6841704, "category_id": 49, "iscrowd": 0, "bbox": [335, 333, 57, 15], "area": 222}, {"id": 9409173, "category_id": 49, "iscrowd": 0, "bbox": [200, 319, 114, 17], "area": 1058}, {"id": 6711402, "category_id": 49, "iscrowd": 0, "bbox": [332, 338, 83, 26], "area": 520}, {"id": 8163497, "category_id": 59, "iscrowd": 0, "bbox": [252, 332, 64, 20], "area": 632}, {"id": 3557470, "category_id": 62, "iscrowd": 0, "bbox": [338, 164, 60, 97], "area": 3095}, {"id": 5007230, "category_id": 62, "iscrowd": 0, "bbox": [4, 244, 10, 44], "area": 279}, {"id": 5457986, "category_id": 62, "iscrowd": 0, "bbox": [216, 143, 24, 38], "area": 616}, {"id": 4346994, "category_id": 62, "iscrowd": 0, "bbox": [198, 177, 61, 120], "area": 2372}, {"id": 4014381, "category_id": 64, "iscrowd": 0, "bbox": [357, 24, 68, 46], "area": 1195}, {"id": 9082262, "category_id": 64, "iscrowd": 0, "bbox": [175, 29, 76, 102], "area": 2539}, {"id": 7372946, "category_id": 67, "iscrowd": 0, "bbox": [203, 276, 160, 40], "area": 2575}, {"id": 6582654, "category_id": 67, "iscrowd": 0, "bbox": [286, 227, 211, 104], "area": 5147}, {"id": 10266035, "category_id": 82, "iscrowd": 0, "bbox": [362, 68, 48, 62], "area": 2063}, {"id": 3617059, "category_id": 86, "iscrowd": 0, "bbox": [387, 52, 17, 15], "area": 236}, {"id": 5401498, "category_id": 86, "iscrowd": 0, "bbox": [208, 65, 36, 66], "area": 1565}, {"id": 8167338, "category_id": 122, "iscrowd": 0, "bbox": [389, 220, 32, 25], "area": 297}, {"id": 13283452, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 276, 63], "area": 9135}, {"id": 5788751, "category_id": 181, "iscrowd": 0, "bbox": [302, 0, 92, 72], "area": 3937}, {"id": 8225649, "category_id": 184, "iscrowd": 0, "bbox": [391, 24, 25, 13], "area": 43}, {"id": 7103577, "category_id": 186, "iscrowd": 0, "bbox": [246, 0, 22, 15], "area": 152}, {"id": 6185829, "category_id": 189, "iscrowd": 0, "bbox": [0, 291, 500, 84], "area": 5748}, {"id": 11909050, "category_id": 195, "iscrowd": 0, "bbox": [0, 31, 500, 344], "area": 7881}, {"id": 7242848, "category_id": 196, "iscrowd": 0, "bbox": [82, 347, 61, 23], "area": 244}, {"id": 7764598, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 111], "area": 9453}], "file_name": "000000189475.png", "image_id": 189475}, {"segments_info": [{"id": 9016212, "category_id": 8, "iscrowd": 0, "bbox": [102, 293, 166, 125], "area": 16185}, {"id": 8820884, "category_id": 128, "iscrowd": 0, "bbox": [183, 246, 302, 91], "area": 4452}, {"id": 10071212, "category_id": 149, "iscrowd": 0, "bbox": [0, 367, 370, 61], "area": 13814}, {"id": 2247568, "category_id": 177, "iscrowd": 0, "bbox": [384, 332, 25, 96], "area": 1300}, {"id": 3295284, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 410], "area": 209282}, {"id": 2520177, "category_id": 193, "iscrowd": 0, "bbox": [0, 360, 103, 32], "area": 911}], "file_name": "000000189698.png", "image_id": 189698}, {"segments_info": [{"id": 3223855, "category_id": 1, "iscrowd": 0, "bbox": [143, 1, 496, 237], "area": 79129}, {"id": 7769241, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 97, 114], "area": 6144}, {"id": 11776932, "category_id": 1, "iscrowd": 0, "bbox": [99, 1, 75, 106], "area": 4291}, {"id": 2701633, "category_id": 46, "iscrowd": 0, "bbox": [501, 63, 120, 165], "area": 16283}, {"id": 10134182, "category_id": 47, "iscrowd": 0, "bbox": [44, 62, 36, 63], "area": 1565}, {"id": 6775912, "category_id": 48, "iscrowd": 0, "bbox": [250, 101, 72, 127], "area": 1120}, {"id": 3881784, "category_id": 49, "iscrowd": 0, "bbox": [77, 344, 424, 99], "area": 12148}, {"id": 4874892, "category_id": 59, "iscrowd": 0, "bbox": [299, 195, 138, 51], "area": 3964}, {"id": 4219534, "category_id": 59, "iscrowd": 0, "bbox": [352, 217, 282, 141], "area": 26941}, {"id": 4146255, "category_id": 62, "iscrowd": 0, "bbox": [0, 214, 213, 39], "area": 4252}, {"id": 6582382, "category_id": 67, "iscrowd": 0, "bbox": [1, 197, 639, 283], "area": 118564}, {"id": 10264729, "category_id": 67, "iscrowd": 0, "bbox": [1, 105, 157, 51], "area": 4834}, {"id": 13091509, "category_id": 100, "iscrowd": 0, "bbox": [182, 15, 16, 22], "area": 292}, {"id": 6254709, "category_id": 177, "iscrowd": 0, "bbox": [14, 0, 199, 95], "area": 5458}, {"id": 3421749, "category_id": 189, "iscrowd": 0, "bbox": [0, 104, 305, 376], "area": 7431}, {"id": 8031115, "category_id": 196, "iscrowd": 0, "bbox": [0, 84, 149, 396], "area": 2660}], "file_name": "000000189752.png", "image_id": 189752}, {"segments_info": [{"id": 8752533, "category_id": 1, "iscrowd": 0, "bbox": [86, 91, 44, 167], "area": 3566}, {"id": 2766659, "category_id": 1, "iscrowd": 0, "bbox": [417, 87, 34, 52], "area": 1038}, {"id": 6126216, "category_id": 1, "iscrowd": 0, "bbox": [520, 70, 29, 52], "area": 1111}, {"id": 12506592, "category_id": 1, "iscrowd": 0, "bbox": [447, 105, 44, 45], "area": 624}, {"id": 6457758, "category_id": 1, "iscrowd": 0, "bbox": [398, 120, 38, 53], "area": 1433}, {"id": 6183276, "category_id": 1, "iscrowd": 0, "bbox": [352, 124, 39, 48], "area": 1251}, {"id": 4011578, "category_id": 1, "iscrowd": 0, "bbox": [164, 76, 50, 84], "area": 2485}, {"id": 4940661, "category_id": 1, "iscrowd": 0, "bbox": [393, 108, 26, 40], "area": 477}, {"id": 8618369, "category_id": 1, "iscrowd": 0, "bbox": [312, 130, 43, 43], "area": 1054}, {"id": 8426660, "category_id": 1, "iscrowd": 0, "bbox": [532, 111, 42, 47], "area": 1154}, {"id": 9217196, "category_id": 1, "iscrowd": 0, "bbox": [154, 109, 135, 237], "area": 10571}, {"id": 5333642, "category_id": 1, "iscrowd": 0, "bbox": [485, 115, 46, 61], "area": 1978}, {"id": 5663121, "category_id": 1, "iscrowd": 0, "bbox": [552, 61, 34, 47], "area": 937}, {"id": 5463140, "category_id": 1, "iscrowd": 1, "bbox": [0, 0, 640, 270], "area": 66399}, {"id": 8358280, "category_id": 43, "iscrowd": 0, "bbox": [96, 145, 62, 64], "area": 2176}, {"id": 9722922, "category_id": 62, "iscrowd": 0, "bbox": [248, 114, 35, 28], "area": 736}, {"id": 7689526, "category_id": 62, "iscrowd": 0, "bbox": [201, 89, 13, 18], "area": 147}, {"id": 8610105, "category_id": 62, "iscrowd": 0, "bbox": [132, 88, 14, 20], "area": 209}, {"id": 9199662, "category_id": 62, "iscrowd": 0, "bbox": [336, 67, 29, 31], "area": 590}, {"id": 8215092, "category_id": 62, "iscrowd": 0, "bbox": [538, 20, 21, 24], "area": 390}, {"id": 6114107, "category_id": 62, "iscrowd": 0, "bbox": [237, 45, 6, 14], "area": 58}, {"id": 9591078, "category_id": 62, "iscrowd": 0, "bbox": [275, 114, 44, 39], "area": 766}, {"id": 8609848, "category_id": 62, "iscrowd": 0, "bbox": [198, 66, 19, 17], "area": 194}, {"id": 9067303, "category_id": 62, "iscrowd": 0, "bbox": [522, 44, 30, 20], "area": 380}, {"id": 8871469, "category_id": 62, "iscrowd": 0, "bbox": [159, 66, 25, 22], "area": 425}, {"id": 6452081, "category_id": 92, "iscrowd": 0, "bbox": [0, 145, 640, 127], "area": 33932}, {"id": 13020568, "category_id": 145, "iscrowd": 0, "bbox": [0, 227, 640, 253], "area": 149037}, {"id": 7836048, "category_id": 161, "iscrowd": 0, "bbox": [347, 15, 136, 113], "area": 4667}, {"id": 6847612, "category_id": 185, "iscrowd": 0, "bbox": [57, 0, 439, 164], "area": 7126}, {"id": 5729133, "category_id": 197, "iscrowd": 0, "bbox": [0, 9, 148, 82], "area": 5012}, {"id": 5728877, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 166, 23], "area": 2131}], "file_name": "000000189775.png", "image_id": 189775}, {"segments_info": [{"id": 3685949, "category_id": 17, "iscrowd": 0, "bbox": [131, 165, 94, 105], "area": 5210}, {"id": 3485737, "category_id": 18, "iscrowd": 0, "bbox": [264, 193, 179, 103], "area": 10864}, {"id": 5791574, "category_id": 63, "iscrowd": 0, "bbox": [24, 6, 48, 78], "area": 2529}, {"id": 8944469, "category_id": 63, "iscrowd": 0, "bbox": [449, 29, 51, 168], "area": 3121}, {"id": 5404558, "category_id": 118, "iscrowd": 0, "bbox": [0, 65, 500, 335], "area": 57859}, {"id": 10134427, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 286, 221], "area": 7940}, {"id": 16250860, "category_id": 181, "iscrowd": 0, "bbox": [11, 0, 81, 15], "area": 843}, {"id": 4078647, "category_id": 189, "iscrowd": 0, "bbox": [345, 85, 155, 142], "area": 9020}, {"id": 6710354, "category_id": 190, "iscrowd": 0, "bbox": [0, 56, 44, 34], "area": 875}, {"id": 9412243, "category_id": 195, "iscrowd": 0, "bbox": [0, 245, 12, 45], "area": 471}, {"id": 7235658, "category_id": 197, "iscrowd": 0, "bbox": [461, 231, 29, 35], "area": 529}, {"id": 12106404, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 224], "area": 45587}, {"id": 5599353, "category_id": 200, "iscrowd": 0, "bbox": [0, 168, 95, 112], "area": 7758}], "file_name": "000000189806.png", "image_id": 189806}, {"segments_info": [{"id": 11975869, "category_id": 47, "iscrowd": 0, "bbox": [206, 177, 25, 40], "area": 765}, {"id": 4931642, "category_id": 62, "iscrowd": 0, "bbox": [367, 135, 252, 277], "area": 36165}, {"id": 7633273, "category_id": 72, "iscrowd": 0, "bbox": [191, 82, 84, 97], "area": 5902}, {"id": 5264210, "category_id": 72, "iscrowd": 0, "bbox": [0, 73, 46, 45], "area": 1710}, {"id": 7368557, "category_id": 74, "iscrowd": 0, "bbox": [161, 269, 33, 20], "area": 475}, {"id": 9539725, "category_id": 76, "iscrowd": 0, "bbox": [364, 158, 75, 24], "area": 1206}, {"id": 3684406, "category_id": 76, "iscrowd": 0, "bbox": [85, 341, 190, 81], "area": 8100}, {"id": 6246218, "category_id": 76, "iscrowd": 0, "bbox": [248, 185, 64, 30], "area": 979}, {"id": 11309717, "category_id": 84, "iscrowd": 0, "bbox": [149, 144, 34, 74], "area": 871}, {"id": 11824839, "category_id": 84, "iscrowd": 0, "bbox": [325, 129, 6, 34], "area": 164}, {"id": 10792381, "category_id": 84, "iscrowd": 0, "bbox": [357, 119, 4, 33], "area": 107}, {"id": 14404291, "category_id": 84, "iscrowd": 0, "bbox": [20, 254, 127, 61], "area": 3937}, {"id": 10843232, "category_id": 84, "iscrowd": 0, "bbox": [31, 167, 57, 102], "area": 3895}, {"id": 11843518, "category_id": 84, "iscrowd": 0, "bbox": [327, 118, 21, 39], "area": 125}, {"id": 9469819, "category_id": 84, "iscrowd": 0, "bbox": [148, 150, 26, 70], "area": 706}, {"id": 9078951, "category_id": 84, "iscrowd": 0, "bbox": [330, 122, 6, 39], "area": 177}, {"id": 14541537, "category_id": 181, "iscrowd": 0, "bbox": [32, 0, 608, 149], "area": 40907}, {"id": 5729414, "category_id": 189, "iscrowd": 0, "bbox": [0, 86, 640, 341], "area": 56078}, {"id": 9143170, "category_id": 195, "iscrowd": 0, "bbox": [20, 99, 358, 241], "area": 13471}, {"id": 10135726, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 272], "area": 24438}, {"id": 2763319, "category_id": 200, "iscrowd": 0, "bbox": [199, 260, 434, 167], "area": 31096}], "file_name": "000000189820.png", "image_id": 189820}, {"segments_info": [{"id": 9683351, "category_id": 5, "iscrowd": 0, "bbox": [368, 102, 198, 100], "area": 5181}, {"id": 8229527, "category_id": 184, "iscrowd": 0, "bbox": [18, 264, 573, 348], "area": 90206}, {"id": 11591128, "category_id": 187, "iscrowd": 0, "bbox": [0, 22, 592, 569], "area": 227291}], "file_name": "000000189828.png", "image_id": 189828}, {"segments_info": [{"id": 5590869, "category_id": 1, "iscrowd": 0, "bbox": [246, 155, 75, 94], "area": 2578}, {"id": 7435617, "category_id": 42, "iscrowd": 0, "bbox": [282, 243, 68, 29], "area": 984}, {"id": 10260076, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 381], "area": 240195}], "file_name": "000000190007.png", "image_id": 190007}, {"segments_info": [{"id": 3362933, "category_id": 1, "iscrowd": 0, "bbox": [159, 142, 137, 161], "area": 7472}, {"id": 6313550, "category_id": 9, "iscrowd": 0, "bbox": [3, 163, 537, 213], "area": 53864}, {"id": 6573372, "category_id": 9, "iscrowd": 0, "bbox": [0, 1, 640, 156], "area": 82903}, {"id": 4279135, "category_id": 18, "iscrowd": 0, "bbox": [356, 155, 78, 147], "area": 6291}, {"id": 4536107, "category_id": 148, "iscrowd": 0, "bbox": [0, 83, 640, 345], "area": 119036}], "file_name": "000000190140.png", "image_id": 190140}, {"segments_info": [{"id": 5658692, "category_id": 27, "iscrowd": 0, "bbox": [200, 316, 105, 71], "area": 5969}, {"id": 10249585, "category_id": 37, "iscrowd": 0, "bbox": [579, 212, 59, 102], "area": 4025}, {"id": 3356742, "category_id": 44, "iscrowd": 0, "bbox": [278, 100, 7, 25], "area": 139}, {"id": 5655620, "category_id": 44, "iscrowd": 0, "bbox": [475, 148, 14, 11], "area": 99}, {"id": 11638408, "category_id": 44, "iscrowd": 0, "bbox": [139, 180, 18, 36], "area": 453}, {"id": 10315331, "category_id": 44, "iscrowd": 0, "bbox": [487, 136, 15, 37], "area": 440}, {"id": 9739682, "category_id": 44, "iscrowd": 0, "bbox": [122, 198, 20, 37], "area": 405}, {"id": 3098972, "category_id": 44, "iscrowd": 0, "bbox": [271, 104, 7, 22], "area": 117}, {"id": 14012365, "category_id": 47, "iscrowd": 0, "bbox": [460, 138, 18, 35], "area": 442}, {"id": 13948628, "category_id": 47, "iscrowd": 0, "bbox": [448, 162, 23, 26], "area": 466}, {"id": 14538445, "category_id": 47, "iscrowd": 0, "bbox": [474, 155, 15, 27], "area": 311}, {"id": 6249295, "category_id": 62, "iscrowd": 0, "bbox": [251, 160, 107, 134], "area": 6939}, {"id": 6980991, "category_id": 64, "iscrowd": 0, "bbox": [564, 96, 51, 62], "area": 1886}, {"id": 8159092, "category_id": 72, "iscrowd": 0, "bbox": [168, 78, 56, 64], "area": 2248}, {"id": 3946571, "category_id": 72, "iscrowd": 0, "bbox": [349, 72, 55, 54], "area": 2584}, {"id": 3816308, "category_id": 72, "iscrowd": 0, "bbox": [297, 74, 50, 53], "area": 2170}, {"id": 5721676, "category_id": 73, "iscrowd": 0, "bbox": [385, 111, 71, 63], "area": 2061}, {"id": 6580860, "category_id": 74, "iscrowd": 0, "bbox": [375, 147, 9, 8], "area": 61}, {"id": 1315344, "category_id": 74, "iscrowd": 0, "bbox": [296, 142, 4, 6], "area": 21}, {"id": 3288359, "category_id": 76, "iscrowd": 0, "bbox": [199, 133, 39, 23], "area": 486}, {"id": 7237743, "category_id": 76, "iscrowd": 0, "bbox": [308, 135, 60, 23], "area": 879}, {"id": 3553592, "category_id": 76, "iscrowd": 0, "bbox": [397, 149, 48, 20], "area": 463}, {"id": 11711666, "category_id": 84, "iscrowd": 0, "bbox": [236, 135, 29, 14], "area": 215}, {"id": 9347763, "category_id": 84, "iscrowd": 0, "bbox": [131, 129, 24, 10], "area": 208}, {"id": 10788508, "category_id": 84, "iscrowd": 0, "bbox": [130, 146, 23, 6], "area": 106}, {"id": 7702937, "category_id": 84, "iscrowd": 0, "bbox": [238, 127, 23, 15], "area": 275}, {"id": 10462120, "category_id": 86, "iscrowd": 0, "bbox": [548, 89, 17, 45], "area": 554}, {"id": 10012383, "category_id": 100, "iscrowd": 0, "bbox": [63, 224, 34, 38], "area": 618}, {"id": 8161664, "category_id": 168, "iscrowd": 0, "bbox": [125, 203, 83, 72], "area": 3794}, {"id": 8227739, "category_id": 171, "iscrowd": 0, "bbox": [65, 0, 558, 217], "area": 32563}, {"id": 5330261, "category_id": 188, "iscrowd": 0, "bbox": [80, 15, 483, 118], "area": 12064}, {"id": 6513763, "category_id": 189, "iscrowd": 0, "bbox": [10, 42, 567, 351], "area": 73598}, {"id": 5322070, "category_id": 190, "iscrowd": 0, "bbox": [564, 301, 76, 31], "area": 1168}, {"id": 9746888, "category_id": 195, "iscrowd": 0, "bbox": [127, 29, 174, 166], "area": 700}, {"id": 3952235, "category_id": 199, "iscrowd": 0, "bbox": [563, 110, 15, 9], "area": 85}, {"id": 5263184, "category_id": 200, "iscrowd": 0, "bbox": [0, 216, 581, 177], "area": 37632}], "file_name": "000000190236.png", "image_id": 190236}, {"segments_info": [{"id": 7369339, "category_id": 1, "iscrowd": 0, "bbox": [210, 25, 129, 499], "area": 33443}, {"id": 12631479, "category_id": 42, "iscrowd": 0, "bbox": [240, 464, 86, 65], "area": 3296}, {"id": 13286809, "category_id": 155, "iscrowd": 0, "bbox": [0, 205, 540, 435], "area": 205903}, {"id": 8292235, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 540, 232], "area": 102567}], "file_name": "000000190307.png", "image_id": 190307}, {"segments_info": [{"id": 3426935, "category_id": 1, "iscrowd": 0, "bbox": [14, 182, 364, 240], "area": 17531}, {"id": 11187136, "category_id": 65, "iscrowd": 0, "bbox": [2, 148, 426, 483], "area": 104946}, {"id": 11053234, "category_id": 75, "iscrowd": 0, "bbox": [313, 268, 61, 91], "area": 1776}, {"id": 12960972, "category_id": 75, "iscrowd": 0, "bbox": [19, 370, 62, 49], "area": 1686}, {"id": 7963786, "category_id": 93, "iscrowd": 0, "bbox": [0, 266, 428, 374], "area": 47439}, {"id": 12568017, "category_id": 141, "iscrowd": 0, "bbox": [0, 146, 428, 263], "area": 1378}, {"id": 1450031, "category_id": 156, "iscrowd": 0, "bbox": [347, 115, 81, 63], "area": 2584}, {"id": 4345938, "category_id": 180, "iscrowd": 0, "bbox": [32, 167, 259, 58], "area": 5402}, {"id": 1648431, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 428, 138], "area": 50895}, {"id": 1845812, "category_id": 199, "iscrowd": 0, "bbox": [0, 98, 428, 133], "area": 25052}], "file_name": "000000190637.png", "image_id": 190637}, {"segments_info": [{"id": 593971, "category_id": 62, "iscrowd": 0, "bbox": [313, 226, 106, 63], "area": 3428}, {"id": 3883080, "category_id": 65, "iscrowd": 0, "bbox": [54, 261, 457, 214], "area": 63930}, {"id": 727086, "category_id": 100, "iscrowd": 0, "bbox": [33, 263, 136, 98], "area": 4285}, {"id": 664651, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 382], "area": 181295}, {"id": 8754098, "category_id": 181, "iscrowd": 0, "bbox": [410, 100, 119, 92], "area": 8508}, {"id": 132613, "category_id": 190, "iscrowd": 0, "bbox": [510, 340, 52, 46], "area": 1428}, {"id": 132101, "category_id": 194, "iscrowd": 0, "bbox": [0, 358, 365, 122], "area": 23055}], "file_name": "000000190648.png", "image_id": 190648}, {"segments_info": [{"id": 3027765, "category_id": 1, "iscrowd": 0, "bbox": [433, 100, 13, 41], "area": 363}, {"id": 1187139, "category_id": 1, "iscrowd": 0, "bbox": [214, 112, 9, 24], "area": 152}, {"id": 5924721, "category_id": 1, "iscrowd": 0, "bbox": [533, 92, 13, 67], "area": 461}, {"id": 1251359, "category_id": 1, "iscrowd": 0, "bbox": [516, 94, 20, 61], "area": 772}, {"id": 4803924, "category_id": 1, "iscrowd": 0, "bbox": [508, 95, 14, 59], "area": 522}, {"id": 3747371, "category_id": 1, "iscrowd": 0, "bbox": [203, 113, 10, 26], "area": 124}, {"id": 3816761, "category_id": 1, "iscrowd": 0, "bbox": [315, 103, 13, 51], "area": 474}, {"id": 1646376, "category_id": 1, "iscrowd": 0, "bbox": [466, 98, 14, 43], "area": 233}, {"id": 5859963, "category_id": 1, "iscrowd": 0, "bbox": [555, 30, 83, 229], "area": 13258}, {"id": 4016982, "category_id": 1, "iscrowd": 0, "bbox": [478, 98, 16, 47], "area": 507}, {"id": 1185047, "category_id": 1, "iscrowd": 0, "bbox": [493, 99, 13, 47], "area": 417}, {"id": 6911620, "category_id": 1, "iscrowd": 0, "bbox": [540, 96, 22, 76], "area": 1169}, {"id": 3093046, "category_id": 1, "iscrowd": 0, "bbox": [567, 93, 22, 31], "area": 98}, {"id": 6846597, "category_id": 1, "iscrowd": 1, "bbox": [100, 88, 485, 95], "area": 5164}, {"id": 6442041, "category_id": 5, "iscrowd": 0, "bbox": [6, 72, 217, 74], "area": 11114}, {"id": 14334109, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 123], "area": 47609}, {"id": 6519441, "category_id": 191, "iscrowd": 0, "bbox": [0, 104, 575, 160], "area": 72949}, {"id": 9408145, "category_id": 192, "iscrowd": 0, "bbox": [205, 85, 294, 45], "area": 5857}], "file_name": "000000190676.png", "image_id": 190676}, {"segments_info": [{"id": 8882068, "category_id": 1, "iscrowd": 0, "bbox": [346, 250, 36, 62], "area": 1158}, {"id": 7105390, "category_id": 1, "iscrowd": 0, "bbox": [590, 218, 17, 19], "area": 117}, {"id": 4075583, "category_id": 1, "iscrowd": 0, "bbox": [225, 256, 43, 55], "area": 1430}, {"id": 3485741, "category_id": 1, "iscrowd": 0, "bbox": [511, 220, 19, 27], "area": 273}, {"id": 2761010, "category_id": 1, "iscrowd": 0, "bbox": [354, 227, 34, 42], "area": 541}, {"id": 7104125, "category_id": 1, "iscrowd": 0, "bbox": [167, 246, 53, 165], "area": 4104}, {"id": 13288410, "category_id": 1, "iscrowd": 0, "bbox": [243, 254, 91, 121], "area": 5449}, {"id": 8419456, "category_id": 2, "iscrowd": 0, "bbox": [439, 257, 34, 44], "area": 1082}, {"id": 6122117, "category_id": 15, "iscrowd": 0, "bbox": [126, 261, 66, 37], "area": 1157}, {"id": 8289411, "category_id": 15, "iscrowd": 0, "bbox": [233, 279, 207, 155], "area": 10488}, {"id": 5924468, "category_id": 15, "iscrowd": 0, "bbox": [60, 262, 79, 46], "area": 2267}, {"id": 3947590, "category_id": 15, "iscrowd": 0, "bbox": [506, 231, 27, 16], "area": 208}, {"id": 3949375, "category_id": 15, "iscrowd": 0, "bbox": [627, 222, 11, 8], "area": 61}, {"id": 11315375, "category_id": 15, "iscrowd": 0, "bbox": [434, 256, 93, 88], "area": 3757}, {"id": 6119545, "category_id": 15, "iscrowd": 0, "bbox": [315, 245, 39, 27], "area": 692}, {"id": 5067350, "category_id": 15, "iscrowd": 0, "bbox": [585, 226, 15, 12], "area": 102}, {"id": 4010809, "category_id": 27, "iscrowd": 0, "bbox": [351, 285, 31, 19], "area": 298}, {"id": 2365212, "category_id": 33, "iscrowd": 0, "bbox": [383, 312, 75, 91], "area": 5563}, {"id": 9470336, "category_id": 41, "iscrowd": 0, "bbox": [613, 247, 13, 4], "area": 39}, {"id": 15395049, "category_id": 62, "iscrowd": 0, "bbox": [218, 291, 13, 23], "area": 141}, {"id": 12959424, "category_id": 62, "iscrowd": 0, "bbox": [157, 302, 16, 40], "area": 392}, {"id": 2700593, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 270], "area": 137775}, {"id": 16119799, "category_id": 187, "iscrowd": 0, "bbox": [578, 0, 62, 68], "area": 2967}, {"id": 9736344, "category_id": 189, "iscrowd": 0, "bbox": [189, 305, 59, 36], "area": 896}, {"id": 12300469, "category_id": 191, "iscrowd": 0, "bbox": [0, 228, 640, 250], "area": 48682}, {"id": 6262657, "category_id": 193, "iscrowd": 0, "bbox": [0, 201, 640, 277], "area": 60316}, {"id": 5133676, "category_id": 194, "iscrowd": 0, "bbox": [213, 268, 31, 26], "area": 405}, {"id": 5396058, "category_id": 199, "iscrowd": 0, "bbox": [0, 273, 67, 27], "area": 753}], "file_name": "000000190753.png", "image_id": 190753}, {"segments_info": [{"id": 5786690, "category_id": 1, "iscrowd": 0, "bbox": [130, 33, 293, 163], "area": 14180}, {"id": 8088156, "category_id": 4, "iscrowd": 0, "bbox": [117, 103, 376, 321], "area": 45756}, {"id": 13480342, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 246629}], "file_name": "000000190756.png", "image_id": 190756}, {"segments_info": [{"id": 7828097, "category_id": 1, "iscrowd": 0, "bbox": [339, 50, 122, 140], "area": 9523}, {"id": 5401721, "category_id": 41, "iscrowd": 0, "bbox": [348, 182, 98, 22], "area": 1048}, {"id": 10588536, "category_id": 128, "iscrowd": 0, "bbox": [493, 109, 36, 24], "area": 365}, {"id": 3489096, "category_id": 144, "iscrowd": 0, "bbox": [293, 216, 347, 76], "area": 15517}, {"id": 13884383, "category_id": 149, "iscrowd": 0, "bbox": [408, 180, 232, 30], "area": 4095}, {"id": 3292475, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 224], "area": 70014}, {"id": 3029312, "category_id": 185, "iscrowd": 0, "bbox": [0, 164, 172, 63], "area": 6420}, {"id": 16314844, "category_id": 187, "iscrowd": 0, "bbox": [303, 0, 212, 128], "area": 13852}, {"id": 11975100, "category_id": 191, "iscrowd": 0, "bbox": [0, 181, 640, 246], "area": 125018}, {"id": 11646649, "category_id": 197, "iscrowd": 0, "bbox": [154, 96, 486, 108], "area": 23763}], "file_name": "000000190841.png", "image_id": 190841}, {"segments_info": [{"id": 4801625, "category_id": 1, "iscrowd": 0, "bbox": [0, 401, 279, 239], "area": 46103}, {"id": 8555407, "category_id": 52, "iscrowd": 0, "bbox": [3, 142, 376, 365], "area": 69995}, {"id": 4353158, "category_id": 122, "iscrowd": 0, "bbox": [252, 282, 76, 24], "area": 837}, {"id": 6574661, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 383, 406], "area": 71783}], "file_name": "000000190853.png", "image_id": 190853}, {"segments_info": [{"id": 1973285, "category_id": 1, "iscrowd": 0, "bbox": [178, 264, 5, 18], "area": 74}, {"id": 8417906, "category_id": 1, "iscrowd": 0, "bbox": [208, 272, 5, 26], "area": 83}, {"id": 10722726, "category_id": 1, "iscrowd": 0, "bbox": [304, 290, 8, 34], "area": 174}, {"id": 4280158, "category_id": 1, "iscrowd": 0, "bbox": [331, 296, 14, 32], "area": 263}, {"id": 5064013, "category_id": 1, "iscrowd": 0, "bbox": [273, 282, 6, 31], "area": 129}, {"id": 8750229, "category_id": 1, "iscrowd": 0, "bbox": [298, 290, 7, 35], "area": 163}, {"id": 7895949, "category_id": 1, "iscrowd": 0, "bbox": [318, 294, 10, 33], "area": 200}, {"id": 6777986, "category_id": 1, "iscrowd": 0, "bbox": [328, 297, 47, 203], "area": 6265}, {"id": 8420482, "category_id": 1, "iscrowd": 0, "bbox": [293, 287, 7, 35], "area": 162}, {"id": 10985885, "category_id": 1, "iscrowd": 0, "bbox": [0, 226, 34, 162], "area": 2950}, {"id": 7892344, "category_id": 1, "iscrowd": 0, "bbox": [164, 258, 7, 23], "area": 104}, {"id": 8417904, "category_id": 1, "iscrowd": 0, "bbox": [203, 269, 7, 23], "area": 110}, {"id": 6445147, "category_id": 1, "iscrowd": 0, "bbox": [215, 273, 7, 27], "area": 116}, {"id": 5525844, "category_id": 1, "iscrowd": 1, "bbox": [58, 236, 176, 71], "area": 1468}, {"id": 12500672, "category_id": 8, "iscrowd": 0, "bbox": [10, 196, 42, 59], "area": 1793}, {"id": 2170394, "category_id": 10, "iscrowd": 0, "bbox": [261, 2, 69, 109], "area": 6839}, {"id": 5203036, "category_id": 31, "iscrowd": 0, "bbox": [308, 353, 64, 108], "area": 2117}, {"id": 9470089, "category_id": 92, "iscrowd": 0, "bbox": [279, 192, 31, 49], "area": 1023}, {"id": 10658985, "category_id": 149, "iscrowd": 0, "bbox": [34, 250, 341, 250], "area": 19054}, {"id": 4676428, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 375, 399], "area": 51022}, {"id": 5525330, "category_id": 185, "iscrowd": 0, "bbox": [15, 254, 27, 30], "area": 330}, {"id": 9211019, "category_id": 191, "iscrowd": 0, "bbox": [0, 249, 348, 251], "area": 41823}, {"id": 5657946, "category_id": 197, "iscrowd": 0, "bbox": [45, 0, 330, 323], "area": 41343}], "file_name": "000000190923.png", "image_id": 190923}, {"segments_info": [{"id": 2239808, "category_id": 1, "iscrowd": 0, "bbox": [366, 564, 13, 14], "area": 106}, {"id": 2962494, "category_id": 1, "iscrowd": 0, "bbox": [60, 543, 24, 41], "area": 589}, {"id": 2171449, "category_id": 3, "iscrowd": 0, "bbox": [306, 551, 133, 61], "area": 5444}, {"id": 3162439, "category_id": 3, "iscrowd": 0, "bbox": [451, 567, 23, 36], "area": 612}, {"id": 2386572, "category_id": 3, "iscrowd": 0, "bbox": [44, 553, 180, 87], "area": 10524}, {"id": 6451066, "category_id": 3, "iscrowd": 0, "bbox": [0, 622, 209, 18], "area": 3083}, {"id": 8820644, "category_id": 8, "iscrowd": 0, "bbox": [123, 521, 145, 87], "area": 7176}, {"id": 6859484, "category_id": 85, "iscrowd": 0, "bbox": [142, 210, 189, 188], "area": 27589}, {"id": 5528664, "category_id": 149, "iscrowd": 0, "bbox": [0, 575, 474, 65], "area": 9450}, {"id": 5068380, "category_id": 166, "iscrowd": 0, "bbox": [17, 510, 114, 71], "area": 4467}, {"id": 2377078, "category_id": 184, "iscrowd": 0, "bbox": [165, 437, 129, 92], "area": 6386}, {"id": 15123346, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 474, 526], "area": 107236}, {"id": 5335959, "category_id": 197, "iscrowd": 0, "bbox": [0, 99, 474, 517], "area": 120140}], "file_name": "000000191013.png", "image_id": 191013}, {"segments_info": [{"id": 4999758, "category_id": 1, "iscrowd": 0, "bbox": [258, 0, 133, 203], "area": 8482}, {"id": 3621982, "category_id": 19, "iscrowd": 0, "bbox": [118, 65, 430, 315], "area": 44310}, {"id": 7437945, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 600, 336], "area": 96658}, {"id": 9152169, "category_id": 185, "iscrowd": 0, "bbox": [0, 117, 600, 283], "area": 50104}, {"id": 14077638, "category_id": 187, "iscrowd": 0, "bbox": [102, 0, 498, 241], "area": 12666}, {"id": 8825779, "category_id": 192, "iscrowd": 0, "bbox": [538, 252, 40, 49], "area": 1405}, {"id": 7975101, "category_id": 193, "iscrowd": 0, "bbox": [221, 330, 367, 60], "area": 7830}], "file_name": "000000191288.png", "image_id": 191288}, {"segments_info": [{"id": 5655192, "category_id": 13, "iscrowd": 0, "bbox": [120, 23, 391, 398], "area": 117309}, {"id": 7441077, "category_id": 128, "iscrowd": 0, "bbox": [0, 358, 629, 122], "area": 18133}, {"id": 8095108, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 75428}, {"id": 15523288, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 561, 480], "area": 96008}], "file_name": "000000191471.png", "image_id": 191471}, {"segments_info": [{"id": 5143699, "category_id": 44, "iscrowd": 0, "bbox": [69, 0, 91, 82], "area": 5425}, {"id": 6322048, "category_id": 48, "iscrowd": 0, "bbox": [259, 16, 120, 181], "area": 3840}, {"id": 9545909, "category_id": 49, "iscrowd": 0, "bbox": [389, 184, 68, 268], "area": 6342}, {"id": 4170451, "category_id": 54, "iscrowd": 0, "bbox": [286, 202, 75, 161], "area": 8783}, {"id": 2590914, "category_id": 54, "iscrowd": 0, "bbox": [194, 306, 130, 144], "area": 8953}, {"id": 1658677, "category_id": 56, "iscrowd": 0, "bbox": [80, 193, 206, 208], "area": 26452}, {"id": 2070130, "category_id": 56, "iscrowd": 0, "bbox": [251, 196, 55, 63], "area": 2270}, {"id": 1521504, "category_id": 62, "iscrowd": 0, "bbox": [0, 534, 409, 106], "area": 26279}, {"id": 5276320, "category_id": 67, "iscrowd": 0, "bbox": [3, 1, 475, 630], "area": 212651}, {"id": 2247790, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 478, 640], "area": 3516}], "file_name": "000000191580.png", "image_id": 191580}, {"segments_info": [{"id": 4943238, "category_id": 1, "iscrowd": 0, "bbox": [348, 290, 34, 67], "area": 898}, {"id": 1713743, "category_id": 19, "iscrowd": 0, "bbox": [296, 303, 129, 101], "area": 4385}, {"id": 2243695, "category_id": 19, "iscrowd": 0, "bbox": [73, 310, 155, 170], "area": 15486}, {"id": 6064541, "category_id": 145, "iscrowd": 0, "bbox": [0, 316, 612, 111], "area": 28562}, {"id": 8294787, "category_id": 151, "iscrowd": 0, "bbox": [0, 259, 151, 80], "area": 5862}, {"id": 3164504, "category_id": 184, "iscrowd": 0, "bbox": [0, 92, 612, 279], "area": 85222}, {"id": 3763566, "category_id": 185, "iscrowd": 0, "bbox": [74, 322, 402, 40], "area": 1201}, {"id": 16378329, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 612, 270], "area": 111336}, {"id": 1333341, "category_id": 193, "iscrowd": 0, "bbox": [0, 390, 612, 222], "area": 120956}], "file_name": "000000191614.png", "image_id": 191614}, {"segments_info": [{"id": 5198422, "category_id": 1, "iscrowd": 0, "bbox": [364, 153, 118, 97], "area": 5155}, {"id": 10133148, "category_id": 42, "iscrowd": 0, "bbox": [397, 199, 40, 84], "area": 1872}, {"id": 8161928, "category_id": 155, "iscrowd": 0, "bbox": [0, 131, 640, 297], "area": 166615}, {"id": 14868436, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 159], "area": 86295}], "file_name": "000000191672.png", "image_id": 191672}, {"segments_info": [{"id": 5598083, "category_id": 51, "iscrowd": 0, "bbox": [43, 28, 457, 302], "area": 59758}, {"id": 5735837, "category_id": 52, "iscrowd": 0, "bbox": [297, 108, 203, 94], "area": 12807}, {"id": 6998743, "category_id": 55, "iscrowd": 0, "bbox": [278, 195, 131, 80], "area": 8015}, {"id": 6994893, "category_id": 55, "iscrowd": 0, "bbox": [379, 199, 117, 85], "area": 6126}, {"id": 9144964, "category_id": 198, "iscrowd": 0, "bbox": [21, 212, 479, 163], "area": 38042}], "file_name": "000000191761.png", "image_id": 191761}, {"segments_info": [{"id": 4670542, "category_id": 1, "iscrowd": 0, "bbox": [283, 101, 66, 93], "area": 1793}, {"id": 7101785, "category_id": 1, "iscrowd": 0, "bbox": [269, 196, 75, 85], "area": 1714}, {"id": 4797336, "category_id": 1, "iscrowd": 0, "bbox": [111, 104, 38, 67], "area": 1064}, {"id": 4140587, "category_id": 1, "iscrowd": 0, "bbox": [340, 42, 69, 104], "area": 2184}, {"id": 5325634, "category_id": 1, "iscrowd": 0, "bbox": [494, 12, 60, 111], "area": 2004}, {"id": 2760740, "category_id": 1, "iscrowd": 0, "bbox": [215, 155, 63, 83], "area": 1215}, {"id": 5203322, "category_id": 1, "iscrowd": 0, "bbox": [144, 113, 59, 99], "area": 2291}, {"id": 1708307, "category_id": 1, "iscrowd": 0, "bbox": [223, 225, 60, 94], "area": 2036}, {"id": 7762023, "category_id": 1, "iscrowd": 0, "bbox": [134, 246, 74, 90], "area": 2024}, {"id": 10455167, "category_id": 1, "iscrowd": 0, "bbox": [158, 22, 38, 36], "area": 619}, {"id": 5853265, "category_id": 1, "iscrowd": 0, "bbox": [176, 75, 65, 68], "area": 1815}, {"id": 3615015, "category_id": 1, "iscrowd": 0, "bbox": [419, 216, 44, 98], "area": 1083}, {"id": 3878194, "category_id": 1, "iscrowd": 0, "bbox": [258, 0, 43, 57], "area": 996}, {"id": 5461339, "category_id": 1, "iscrowd": 1, "bbox": [0, 0, 640, 361], "area": 70291}, {"id": 11131597, "category_id": 28, "iscrowd": 0, "bbox": [433, 241, 114, 71], "area": 5863}, {"id": 15250086, "category_id": 28, "iscrowd": 0, "bbox": [394, 168, 89, 52], "area": 3213}, {"id": 14400244, "category_id": 28, "iscrowd": 0, "bbox": [214, 70, 64, 38], "area": 1307}, {"id": 13356245, "category_id": 28, "iscrowd": 0, "bbox": [257, 66, 69, 49], "area": 1911}, {"id": 15919576, "category_id": 28, "iscrowd": 0, "bbox": [108, 210, 69, 47], "area": 2026}, {"id": 9988942, "category_id": 28, "iscrowd": 0, "bbox": [211, 134, 39, 60], "area": 742}, {"id": 7699062, "category_id": 28, "iscrowd": 0, "bbox": [86, 16, 43, 37], "area": 743}, {"id": 16115618, "category_id": 28, "iscrowd": 0, "bbox": [201, 183, 67, 49], "area": 2126}, {"id": 9136981, "category_id": 28, "iscrowd": 0, "bbox": [52, 141, 63, 38], "area": 1460}, {"id": 15186318, "category_id": 28, "iscrowd": 0, "bbox": [24, 89, 41, 35], "area": 600}, {"id": 8162193, "category_id": 28, "iscrowd": 0, "bbox": [252, 153, 66, 50], "area": 1856}, {"id": 15390686, "category_id": 28, "iscrowd": 0, "bbox": [167, 44, 52, 35], "area": 1202}, {"id": 6836569, "category_id": 28, "iscrowd": 1, "bbox": [65, 18, 575, 181], "area": 5288}, {"id": 2431778, "category_id": 31, "iscrowd": 0, "bbox": [473, 88, 24, 25], "area": 508}, {"id": 7104921, "category_id": 31, "iscrowd": 0, "bbox": [128, 106, 23, 19], "area": 168}, {"id": 3420213, "category_id": 31, "iscrowd": 0, "bbox": [436, 218, 31, 37], "area": 602}, {"id": 6906207, "category_id": 31, "iscrowd": 0, "bbox": [575, 99, 31, 36], "area": 770}, {"id": 6840936, "category_id": 31, "iscrowd": 0, "bbox": [112, 82, 29, 25], "area": 201}, {"id": 2893095, "category_id": 31, "iscrowd": 0, "bbox": [81, 233, 22, 32], "area": 515}, {"id": 4673356, "category_id": 31, "iscrowd": 0, "bbox": [135, 263, 30, 30], "area": 490}, {"id": 1707792, "category_id": 31, "iscrowd": 0, "bbox": [497, 53, 16, 21], "area": 212}, {"id": 2367009, "category_id": 31, "iscrowd": 0, "bbox": [10, 158, 18, 33], "area": 376}, {"id": 2570333, "category_id": 31, "iscrowd": 0, "bbox": [523, 311, 51, 40], "area": 1490}, {"id": 12231824, "category_id": 31, "iscrowd": 0, "bbox": [25, 14, 11, 15], "area": 70}, {"id": 8218211, "category_id": 33, "iscrowd": 0, "bbox": [408, 258, 30, 38], "area": 884}, {"id": 6388614, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 640, 361], "area": 72613}, {"id": 5656143, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 361], "area": 8555}], "file_name": "000000191845.png", "image_id": 191845}, {"segments_info": [{"id": 8419958, "category_id": 81, "iscrowd": 0, "bbox": [86, 518, 348, 115], "area": 28002}, {"id": 4607564, "category_id": 130, "iscrowd": 0, "bbox": [84, 0, 153, 115], "area": 10937}, {"id": 8685955, "category_id": 133, "iscrowd": 0, "bbox": [74, 143, 145, 256], "area": 28383}, {"id": 9735307, "category_id": 188, "iscrowd": 0, "bbox": [0, 484, 56, 45], "area": 1764}, {"id": 8422015, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 234668}], "file_name": "000000192047.png", "image_id": 192047}, {"segments_info": [{"id": 2506884, "category_id": 59, "iscrowd": 0, "bbox": [127, 396, 172, 143], "area": 19652}, {"id": 5529198, "category_id": 79, "iscrowd": 0, "bbox": [1, 44, 424, 586], "area": 179023}, {"id": 990269, "category_id": 112, "iscrowd": 0, "bbox": [369, 0, 111, 590], "area": 38643}, {"id": 4481405, "category_id": 190, "iscrowd": 0, "bbox": [365, 124, 88, 516], "area": 6075}, {"id": 4543837, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 60021}], "file_name": "000000192191.png", "image_id": 192191}, {"segments_info": [{"id": 6448018, "category_id": 1, "iscrowd": 0, "bbox": [457, 224, 62, 159], "area": 5388}, {"id": 3158835, "category_id": 8, "iscrowd": 0, "bbox": [2, 210, 468, 202], "area": 68325}, {"id": 5598810, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 242], "area": 109334}, {"id": 15987697, "category_id": 187, "iscrowd": 0, "bbox": [507, 0, 25, 37], "area": 566}, {"id": 6910067, "category_id": 194, "iscrowd": 0, "bbox": [0, 140, 640, 285], "area": 64679}], "file_name": "000000192607.png", "image_id": 192607}, {"segments_info": [{"id": 3880766, "category_id": 1, "iscrowd": 0, "bbox": [551, 100, 41, 110], "area": 2285}, {"id": 11441552, "category_id": 1, "iscrowd": 0, "bbox": [0, 155, 34, 58], "area": 1014}, {"id": 8483714, "category_id": 1, "iscrowd": 0, "bbox": [367, 121, 146, 242], "area": 14680}, {"id": 9863292, "category_id": 1, "iscrowd": 0, "bbox": [10, 124, 49, 85], "area": 1807}, {"id": 4666950, "category_id": 1, "iscrowd": 0, "bbox": [543, 101, 20, 56], "area": 419}, {"id": 5000807, "category_id": 1, "iscrowd": 0, "bbox": [108, 232, 142, 160], "area": 11033}, {"id": 6052709, "category_id": 1, "iscrowd": 0, "bbox": [508, 114, 33, 92], "area": 1902}, {"id": 6775658, "category_id": 1, "iscrowd": 0, "bbox": [602, 86, 37, 123], "area": 1822}, {"id": 4405829, "category_id": 1, "iscrowd": 0, "bbox": [584, 96, 37, 114], "area": 2075}, {"id": 9470580, "category_id": 3, "iscrowd": 0, "bbox": [224, 95, 174, 83], "area": 10523}, {"id": 6511965, "category_id": 3, "iscrowd": 0, "bbox": [544, 81, 43, 17], "area": 512}, {"id": 9735040, "category_id": 3, "iscrowd": 0, "bbox": [1, 119, 162, 77], "area": 4205}, {"id": 6446176, "category_id": 3, "iscrowd": 0, "bbox": [360, 93, 156, 66], "area": 5278}, {"id": 7832700, "category_id": 3, "iscrowd": 0, "bbox": [55, 102, 106, 56], "area": 3456}, {"id": 9999243, "category_id": 8, "iscrowd": 0, "bbox": [166, 101, 61, 62], "area": 2755}, {"id": 10267325, "category_id": 37, "iscrowd": 0, "bbox": [565, 173, 19, 13], "area": 180}, {"id": 12368047, "category_id": 39, "iscrowd": 0, "bbox": [500, 195, 42, 35], "area": 491}, {"id": 5074079, "category_id": 40, "iscrowd": 0, "bbox": [222, 266, 36, 43], "area": 968}, {"id": 5197246, "category_id": 44, "iscrowd": 0, "bbox": [566, 114, 7, 17], "area": 89}, {"id": 9340021, "category_id": 62, "iscrowd": 0, "bbox": [79, 155, 50, 58], "area": 2193}, {"id": 9670270, "category_id": 62, "iscrowd": 0, "bbox": [43, 166, 17, 46], "area": 430}, {"id": 6056801, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 228], "area": 78427}, {"id": 7453349, "category_id": 193, "iscrowd": 0, "bbox": [0, 169, 640, 173], "area": 58903}, {"id": 12043735, "category_id": 194, "iscrowd": 0, "bbox": [0, 293, 640, 140], "area": 70105}], "file_name": "000000192670.png", "image_id": 192670}, {"segments_info": [{"id": 5916744, "category_id": 1, "iscrowd": 0, "bbox": [262, 42, 263, 415], "area": 59913}, {"id": 8547694, "category_id": 1, "iscrowd": 0, "bbox": [0, 201, 315, 250], "area": 42400}, {"id": 11904676, "category_id": 4, "iscrowd": 0, "bbox": [97, 379, 207, 78], "area": 6043}, {"id": 10727565, "category_id": 4, "iscrowd": 0, "bbox": [419, 291, 221, 160], "area": 19953}, {"id": 2564127, "category_id": 27, "iscrowd": 0, "bbox": [491, 262, 42, 74], "area": 1224}, {"id": 4345940, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 457], "area": 102580}], "file_name": "000000192699.png", "image_id": 192699}, {"segments_info": [{"id": 4468519, "category_id": 1, "iscrowd": 0, "bbox": [40, 596, 13, 28], "area": 215}, {"id": 8413538, "category_id": 3, "iscrowd": 0, "bbox": [0, 589, 55, 50], "area": 1811}, {"id": 4734254, "category_id": 3, "iscrowd": 0, "bbox": [138, 595, 96, 45], "area": 2645}, {"id": 3879839, "category_id": 13, "iscrowd": 0, "bbox": [109, 171, 305, 319], "area": 77667}, {"id": 10327947, "category_id": 128, "iscrowd": 0, "bbox": [0, 412, 518, 228], "area": 50759}, {"id": 6652525, "category_id": 184, "iscrowd": 0, "bbox": [0, 156, 518, 405], "area": 59396}, {"id": 7957078, "category_id": 185, "iscrowd": 0, "bbox": [244, 522, 181, 118], "area": 16114}, {"id": 16378582, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 518, 404], "area": 103088}], "file_name": "000000192716.png", "image_id": 192716}, {"segments_info": [{"id": 3495540, "category_id": 51, "iscrowd": 0, "bbox": [37, 147, 570, 280], "area": 32328}, {"id": 2455209, "category_id": 52, "iscrowd": 0, "bbox": [36, 354, 86, 62], "area": 2917}, {"id": 5221843, "category_id": 53, "iscrowd": 0, "bbox": [144, 161, 208, 206], "area": 32593}, {"id": 3764182, "category_id": 55, "iscrowd": 0, "bbox": [123, 307, 118, 114], "area": 7464}, {"id": 1472204, "category_id": 55, "iscrowd": 0, "bbox": [70, 158, 128, 153], "area": 11795}, {"id": 3640561, "category_id": 55, "iscrowd": 0, "bbox": [236, 318, 227, 108], "area": 12992}, {"id": 1677030, "category_id": 55, "iscrowd": 0, "bbox": [383, 166, 169, 133], "area": 12690}, {"id": 2990069, "category_id": 55, "iscrowd": 0, "bbox": [349, 247, 158, 145], "area": 17141}, {"id": 2900562, "category_id": 67, "iscrowd": 0, "bbox": [487, 334, 153, 93], "area": 9000}, {"id": 5080491, "category_id": 67, "iscrowd": 0, "bbox": [0, 350, 146, 77], "area": 4100}, {"id": 1121057, "category_id": 107, "iscrowd": 0, "bbox": [234, 51, 406, 50], "area": 7098}, {"id": 199701, "category_id": 188, "iscrowd": 0, "bbox": [250, 81, 390, 194], "area": 26663}, {"id": 3029320, "category_id": 189, "iscrowd": 0, "bbox": [474, 307, 166, 120], "area": 1937}, {"id": 1449245, "category_id": 199, "iscrowd": 0, "bbox": [166, 0, 431, 118], "area": 10898}], "file_name": "000000192871.png", "image_id": 192871}, {"segments_info": [{"id": 7241402, "category_id": 47, "iscrowd": 0, "bbox": [177, 155, 85, 92], "area": 6063}, {"id": 8031428, "category_id": 47, "iscrowd": 0, "bbox": [298, 228, 118, 90], "area": 7319}, {"id": 2237016, "category_id": 50, "iscrowd": 0, "bbox": [296, 309, 127, 23], "area": 1348}, {"id": 4476792, "category_id": 50, "iscrowd": 0, "bbox": [257, 187, 13, 79], "area": 559}, {"id": 4343415, "category_id": 50, "iscrowd": 0, "bbox": [376, 139, 28, 25], "area": 75}, {"id": 3360670, "category_id": 60, "iscrowd": 0, "bbox": [361, 72, 106, 91], "area": 6699}, {"id": 11120080, "category_id": 65, "iscrowd": 0, "bbox": [1, 1, 639, 431], "area": 251923}, {"id": 12106968, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 640, 436], "area": 5054}], "file_name": "000000192904.png", "image_id": 192904}, {"segments_info": [{"id": 9276813, "category_id": 1, "iscrowd": 0, "bbox": [93, 61, 193, 292], "area": 24176}, {"id": 4671303, "category_id": 15, "iscrowd": 0, "bbox": [337, 503, 91, 56], "area": 2991}, {"id": 7631988, "category_id": 41, "iscrowd": 0, "bbox": [81, 334, 104, 52], "area": 1976}, {"id": 3289650, "category_id": 171, "iscrowd": 0, "bbox": [393, 545, 22, 19], "area": 252}, {"id": 3158064, "category_id": 177, "iscrowd": 0, "bbox": [340, 509, 21, 12], "area": 89}, {"id": 986895, "category_id": 184, "iscrowd": 0, "bbox": [0, 238, 257, 199], "area": 22342}, {"id": 263172, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 428, 401], "area": 103829}, {"id": 8618883, "category_id": 199, "iscrowd": 0, "bbox": [318, 497, 40, 39], "area": 578}], "file_name": "000000192964.png", "image_id": 192964}, {"segments_info": [{"id": 5525343, "category_id": 1, "iscrowd": 0, "bbox": [395, 98, 93, 68], "area": 2255}, {"id": 9475472, "category_id": 18, "iscrowd": 0, "bbox": [100, 220, 76, 69], "area": 2633}, {"id": 8488578, "category_id": 20, "iscrowd": 0, "bbox": [2, 249, 77, 94], "area": 4119}, {"id": 5395023, "category_id": 21, "iscrowd": 0, "bbox": [304, 134, 152, 198], "area": 18578}, {"id": 2571559, "category_id": 184, "iscrowd": 0, "bbox": [555, 44, 85, 384], "area": 23904}, {"id": 6001263, "category_id": 185, "iscrowd": 0, "bbox": [0, 96, 567, 85], "area": 17967}, {"id": 14800835, "category_id": 187, "iscrowd": 0, "bbox": [584, 0, 56, 11], "area": 382}, {"id": 5344358, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 158638}, {"id": 4738124, "category_id": 194, "iscrowd": 0, "bbox": [0, 283, 531, 145], "area": 42855}], "file_name": "000000193162.png", "image_id": 193162}, {"segments_info": [{"id": 9280414, "category_id": 1, "iscrowd": 0, "bbox": [284, 58, 43, 68], "area": 1727}, {"id": 5461589, "category_id": 1, "iscrowd": 0, "bbox": [189, 325, 231, 243], "area": 34228}, {"id": 5809588, "category_id": 1, "iscrowd": 0, "bbox": [248, 60, 47, 64], "area": 1789}, {"id": 4480628, "category_id": 1, "iscrowd": 0, "bbox": [340, 71, 24, 32], "area": 436}, {"id": 11514286, "category_id": 1, "iscrowd": 0, "bbox": [45, 4, 55, 99], "area": 3119}, {"id": 8490385, "category_id": 1, "iscrowd": 0, "bbox": [22, 111, 286, 389], "area": 34560}, {"id": 6977911, "category_id": 1, "iscrowd": 0, "bbox": [14, 2, 46, 120], "area": 3714}, {"id": 6447448, "category_id": 1, "iscrowd": 0, "bbox": [390, 63, 36, 66], "area": 1445}, {"id": 9410968, "category_id": 1, "iscrowd": 0, "bbox": [380, 43, 41, 52], "area": 935}, {"id": 9740201, "category_id": 1, "iscrowd": 0, "bbox": [115, 10, 35, 63], "area": 1653}, {"id": 5397351, "category_id": 1, "iscrowd": 0, "bbox": [155, 42, 35, 59], "area": 1282}, {"id": 8161162, "category_id": 1, "iscrowd": 0, "bbox": [236, 23, 58, 66], "area": 1429}, {"id": 8229014, "category_id": 1, "iscrowd": 0, "bbox": [328, 6, 37, 51], "area": 1052}, {"id": 6910060, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 425, 164], "area": 28459}, {"id": 7436661, "category_id": 39, "iscrowd": 0, "bbox": [212, 35, 29, 126], "area": 1208}, {"id": 8165793, "category_id": 40, "iscrowd": 0, "bbox": [192, 433, 47, 41], "area": 1100}, {"id": 6919600, "category_id": 145, "iscrowd": 0, "bbox": [0, 169, 426, 471], "area": 75911}, {"id": 7107427, "category_id": 185, "iscrowd": 0, "bbox": [0, 103, 426, 103], "area": 18102}, {"id": 3776124, "category_id": 193, "iscrowd": 0, "bbox": [0, 205, 426, 233], "area": 51429}], "file_name": "000000193181.png", "image_id": 193181}, {"segments_info": [{"id": 4610660, "category_id": 1, "iscrowd": 0, "bbox": [152, 202, 30, 67], "area": 1093}, {"id": 3096394, "category_id": 1, "iscrowd": 0, "bbox": [295, 201, 9, 35], "area": 189}, {"id": 4412250, "category_id": 1, "iscrowd": 0, "bbox": [463, 166, 35, 124], "area": 2060}, {"id": 4675964, "category_id": 1, "iscrowd": 0, "bbox": [399, 192, 18, 39], "area": 357}, {"id": 4217697, "category_id": 1, "iscrowd": 0, "bbox": [374, 192, 5, 13], "area": 30}, {"id": 4675941, "category_id": 1, "iscrowd": 0, "bbox": [323, 193, 2, 10], "area": 19}, {"id": 3884108, "category_id": 1, "iscrowd": 0, "bbox": [417, 183, 26, 69], "area": 1113}, {"id": 6980239, "category_id": 1, "iscrowd": 0, "bbox": [328, 194, 5, 12], "area": 44}, {"id": 6580833, "category_id": 1, "iscrowd": 0, "bbox": [79, 177, 68, 196], "area": 8195}, {"id": 2370611, "category_id": 1, "iscrowd": 0, "bbox": [414, 196, 6, 25], "area": 81}, {"id": 6321534, "category_id": 1, "iscrowd": 0, "bbox": [252, 179, 43, 109], "area": 2102}, {"id": 7239029, "category_id": 1, "iscrowd": 0, "bbox": [240, 191, 27, 85], "area": 940}, {"id": 8952229, "category_id": 1, "iscrowd": 0, "bbox": [334, 200, 8, 27], "area": 173}, {"id": 6060421, "category_id": 1, "iscrowd": 1, "bbox": [358, 187, 56, 28], "area": 700}, {"id": 11190731, "category_id": 38, "iscrowd": 0, "bbox": [361, 0, 26, 11], "area": 96}, {"id": 6739416, "category_id": 38, "iscrowd": 0, "bbox": [176, 1, 40, 26], "area": 771}, {"id": 13288372, "category_id": 38, "iscrowd": 0, "bbox": [74, 118, 13, 8], "area": 83}, {"id": 10191984, "category_id": 38, "iscrowd": 0, "bbox": [214, 23, 30, 37], "area": 352}, {"id": 13749445, "category_id": 38, "iscrowd": 0, "bbox": [235, 77, 14, 10], "area": 40}, {"id": 6579841, "category_id": 38, "iscrowd": 0, "bbox": [126, 6, 17, 12], "area": 69}, {"id": 13424591, "category_id": 38, "iscrowd": 0, "bbox": [229, 0, 21, 8], "area": 93}, {"id": 12040379, "category_id": 38, "iscrowd": 0, "bbox": [471, 48, 27, 17], "area": 281}, {"id": 10052248, "category_id": 38, "iscrowd": 0, "bbox": [273, 0, 39, 16], "area": 325}, {"id": 5991518, "category_id": 38, "iscrowd": 0, "bbox": [400, 95, 6, 5], "area": 21}, {"id": 4506787, "category_id": 38, "iscrowd": 0, "bbox": [149, 56, 30, 20], "area": 296}, {"id": 13549729, "category_id": 38, "iscrowd": 0, "bbox": [73, 136, 11, 7], "area": 58}, {"id": 10661542, "category_id": 178, "iscrowd": 0, "bbox": [0, 191, 200, 25], "area": 2137}, {"id": 14803671, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 182], "area": 74515}, {"id": 8158064, "category_id": 192, "iscrowd": 0, "bbox": [0, 143, 500, 70], "area": 19442}, {"id": 4488069, "category_id": 193, "iscrowd": 0, "bbox": [0, 190, 495, 185], "area": 68576}], "file_name": "000000193245.png", "image_id": 193245}, {"segments_info": [{"id": 5147336, "category_id": 1, "iscrowd": 0, "bbox": [0, 78, 426, 550], "area": 172540}, {"id": 3692612, "category_id": 90, "iscrowd": 0, "bbox": [259, 391, 167, 186], "area": 6366}, {"id": 5679298, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 426, 479], "area": 85502}], "file_name": "000000193348.png", "image_id": 193348}, {"segments_info": [{"id": 5396312, "category_id": 1, "iscrowd": 0, "bbox": [208, 101, 214, 203], "area": 22552}, {"id": 12498350, "category_id": 36, "iscrowd": 0, "bbox": [135, 277, 384, 97], "area": 23026}, {"id": 14340815, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 216415}, {"id": 8362906, "category_id": 192, "iscrowd": 0, "bbox": [348, 4, 292, 81], "area": 11633}], "file_name": "000000193429.png", "image_id": 193429}, {"segments_info": [{"id": 10789777, "category_id": 65, "iscrowd": 0, "bbox": [69, 331, 260, 254], "area": 45535}, {"id": 9268278, "category_id": 109, "iscrowd": 0, "bbox": [0, 66, 426, 481], "area": 127569}, {"id": 5333618, "category_id": 190, "iscrowd": 0, "bbox": [0, 423, 426, 217], "area": 44125}], "file_name": "000000193494.png", "image_id": 193494}, {"segments_info": [{"id": 1512467, "category_id": 1, "iscrowd": 0, "bbox": [427, 121, 147, 162], "area": 12762}, {"id": 723209, "category_id": 18, "iscrowd": 0, "bbox": [406, 163, 56, 175], "area": 4734}, {"id": 11515060, "category_id": 42, "iscrowd": 0, "bbox": [239, 222, 318, 82], "area": 8111}, {"id": 6710366, "category_id": 155, "iscrowd": 0, "bbox": [0, 49, 640, 431], "area": 245163}, {"id": 14076606, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 61], "area": 36012}], "file_name": "000000193674.png", "image_id": 193674}, {"segments_info": [{"id": 10392714, "category_id": 1, "iscrowd": 0, "bbox": [400, 119, 102, 186], "area": 6445}, {"id": 10327956, "category_id": 3, "iscrowd": 0, "bbox": [0, 174, 41, 48], "area": 1316}, {"id": 11316645, "category_id": 3, "iscrowd": 0, "bbox": [354, 200, 49, 29], "area": 1129}, {"id": 8619168, "category_id": 3, "iscrowd": 0, "bbox": [291, 202, 63, 24], "area": 856}, {"id": 13619913, "category_id": 3, "iscrowd": 0, "bbox": [477, 216, 44, 19], "area": 666}, {"id": 12370107, "category_id": 3, "iscrowd": 0, "bbox": [83, 197, 43, 19], "area": 317}, {"id": 7435103, "category_id": 10, "iscrowd": 0, "bbox": [340, 138, 8, 20], "area": 111}, {"id": 8419430, "category_id": 10, "iscrowd": 0, "bbox": [130, 78, 18, 26], "area": 351}, {"id": 6251082, "category_id": 10, "iscrowd": 0, "bbox": [329, 131, 8, 25], "area": 160}, {"id": 8681574, "category_id": 10, "iscrowd": 0, "bbox": [315, 27, 14, 36], "area": 384}, {"id": 2630445, "category_id": 11, "iscrowd": 0, "bbox": [39, 32, 362, 579], "area": 86692}, {"id": 8349009, "category_id": 31, "iscrowd": 0, "bbox": [447, 196, 19, 23], "area": 193}, {"id": 8615790, "category_id": 149, "iscrowd": 0, "bbox": [0, 212, 521, 330], "area": 83761}, {"id": 6259312, "category_id": 184, "iscrowd": 0, "bbox": [0, 56, 521, 156], "area": 25840}, {"id": 16514041, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 521, 153], "area": 48312}, {"id": 6311490, "category_id": 191, "iscrowd": 0, "bbox": [0, 466, 521, 174], "area": 57553}, {"id": 12567489, "category_id": 197, "iscrowd": 0, "bbox": [35, 31, 399, 197], "area": 16385}, {"id": 15200497, "category_id": 199, "iscrowd": 0, "bbox": [459, 195, 62, 44], "area": 1061}], "file_name": "000000193717.png", "image_id": 193717}, {"segments_info": [{"id": 921877, "category_id": 1, "iscrowd": 0, "bbox": [341, 616, 69, 24], "area": 1258}, {"id": 4351118, "category_id": 1, "iscrowd": 0, "bbox": [222, 605, 94, 28], "area": 1490}, {"id": 5133680, "category_id": 1, "iscrowd": 0, "bbox": [116, 43, 281, 587], "area": 60047}, {"id": 926039, "category_id": 1, "iscrowd": 0, "bbox": [368, 0, 57, 43], "area": 1242}, {"id": 5655894, "category_id": 43, "iscrowd": 0, "bbox": [375, 381, 16, 152], "area": 1840}, {"id": 6307905, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 204719}], "file_name": "000000193743.png", "image_id": 193743}, {"segments_info": [{"id": 5720177, "category_id": 13, "iscrowd": 0, "bbox": [376, 119, 63, 60], "area": 3050}, {"id": 4606257, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 276], "area": 44473}, {"id": 11439960, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 626, 182], "area": 83387}, {"id": 6646363, "category_id": 191, "iscrowd": 0, "bbox": [0, 268, 640, 212], "area": 98466}, {"id": 4283462, "category_id": 193, "iscrowd": 0, "bbox": [516, 431, 124, 49], "area": 4117}, {"id": 10924192, "category_id": 197, "iscrowd": 0, "bbox": [0, 176, 640, 220], "area": 60055}, {"id": 10860463, "category_id": 199, "iscrowd": 0, "bbox": [319, 287, 22, 25], "area": 355}], "file_name": "000000193884.png", "image_id": 193884}, {"segments_info": [{"id": 8276557, "category_id": 1, "iscrowd": 0, "bbox": [412, 320, 209, 142], "area": 17668}, {"id": 6382471, "category_id": 1, "iscrowd": 0, "bbox": [25, 254, 84, 135], "area": 2188}, {"id": 8023654, "category_id": 2, "iscrowd": 0, "bbox": [368, 18, 245, 66], "area": 9308}, {"id": 3876388, "category_id": 27, "iscrowd": 0, "bbox": [370, 95, 246, 130], "area": 16272}, {"id": 2309960, "category_id": 51, "iscrowd": 0, "bbox": [19, 13, 331, 214], "area": 23567}, {"id": 11777225, "category_id": 52, "iscrowd": 0, "bbox": [381, 267, 81, 162], "area": 3114}, {"id": 8303058, "category_id": 52, "iscrowd": 0, "bbox": [381, 116, 205, 80], "area": 5610}, {"id": 4288402, "category_id": 52, "iscrowd": 0, "bbox": [33, 19, 248, 207], "area": 19447}, {"id": 6199218, "category_id": 52, "iscrowd": 0, "bbox": [159, 24, 187, 202], "area": 13971}, {"id": 1128524, "category_id": 53, "iscrowd": 0, "bbox": [149, 95, 67, 51], "area": 1634}, {"id": 1192501, "category_id": 53, "iscrowd": 0, "bbox": [22, 86, 65, 82], "area": 4163}, {"id": 143966, "category_id": 55, "iscrowd": 0, "bbox": [87, 78, 66, 55], "area": 2602}, {"id": 7566197, "category_id": 125, "iscrowd": 0, "bbox": [2, 226, 281, 251], "area": 39510}, {"id": 5593446, "category_id": 189, "iscrowd": 0, "bbox": [7, 0, 347, 225], "area": 2658}, {"id": 8615030, "category_id": 190, "iscrowd": 0, "bbox": [325, 16, 46, 34], "area": 909}], "file_name": "000000193926.png", "image_id": 193926}, {"segments_info": [{"id": 4016476, "category_id": 23, "iscrowd": 0, "bbox": [194, 98, 52, 64], "area": 2123}, {"id": 5594997, "category_id": 23, "iscrowd": 0, "bbox": [165, 137, 22, 29], "area": 357}, {"id": 2435641, "category_id": 23, "iscrowd": 0, "bbox": [122, 138, 17, 25], "area": 327}, {"id": 4475975, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 294], "area": 122315}, {"id": 6187130, "category_id": 194, "iscrowd": 0, "bbox": [0, 164, 640, 130], "area": 40849}], "file_name": "000000194216.png", "image_id": 194216}, {"segments_info": [{"id": 6774356, "category_id": 1, "iscrowd": 0, "bbox": [68, 138, 167, 195], "area": 12101}, {"id": 1582903, "category_id": 41, "iscrowd": 0, "bbox": [130, 310, 128, 53], "area": 3978}, {"id": 5661540, "category_id": 184, "iscrowd": 0, "bbox": [0, 281, 334, 36], "area": 3916}, {"id": 12752223, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 334, 311], "area": 86751}, {"id": 4013629, "category_id": 197, "iscrowd": 0, "bbox": [208, 284, 79, 48], "area": 2382}], "file_name": "000000194471.png", "image_id": 194471}, {"segments_info": [{"id": 2765884, "category_id": 23, "iscrowd": 0, "bbox": [284, 144, 130, 98], "area": 8092}, {"id": 3161413, "category_id": 23, "iscrowd": 0, "bbox": [81, 118, 219, 157], "area": 17293}, {"id": 7895676, "category_id": 178, "iscrowd": 0, "bbox": [0, 0, 638, 498], "area": 222593}, {"id": 3038804, "category_id": 184, "iscrowd": 0, "bbox": [0, 289, 357, 209], "area": 40163}, {"id": 2567985, "category_id": 198, "iscrowd": 0, "bbox": [323, 0, 317, 498], "area": 30328}], "file_name": "000000194506.png", "image_id": 194506}, {"segments_info": [{"id": 6055801, "category_id": 1, "iscrowd": 0, "bbox": [148, 37, 329, 384], "area": 74913}, {"id": 7170706, "category_id": 1, "iscrowd": 0, "bbox": [373, 110, 145, 310], "area": 25225}, {"id": 4209198, "category_id": 3, "iscrowd": 0, "bbox": [545, 1, 95, 29], "area": 2080}, {"id": 7098758, "category_id": 77, "iscrowd": 0, "bbox": [378, 212, 58, 19], "area": 720}, {"id": 9474177, "category_id": 175, "iscrowd": 0, "bbox": [0, 84, 640, 343], "area": 20953}, {"id": 5730386, "category_id": 184, "iscrowd": 0, "bbox": [79, 410, 25, 17], "area": 279}, {"id": 10197387, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 256], "area": 52013}, {"id": 3949889, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 55395}], "file_name": "000000194716.png", "image_id": 194716}, {"segments_info": [{"id": 6995647, "category_id": 44, "iscrowd": 0, "bbox": [280, 0, 20, 54], "area": 954}, {"id": 2899304, "category_id": 44, "iscrowd": 0, "bbox": [418, 0, 100, 259], "area": 16917}, {"id": 5672400, "category_id": 44, "iscrowd": 0, "bbox": [262, 0, 18, 53], "area": 908}, {"id": 5787731, "category_id": 44, "iscrowd": 0, "bbox": [171, 0, 22, 54], "area": 944}, {"id": 15195839, "category_id": 44, "iscrowd": 0, "bbox": [340, 3, 18, 48], "area": 740}, {"id": 7763048, "category_id": 44, "iscrowd": 0, "bbox": [191, 3, 24, 49], "area": 788}, {"id": 4670270, "category_id": 44, "iscrowd": 0, "bbox": [210, 1, 23, 50], "area": 872}, {"id": 9867447, "category_id": 44, "iscrowd": 0, "bbox": [300, 0, 21, 52], "area": 978}, {"id": 2700611, "category_id": 47, "iscrowd": 0, "bbox": [515, 133, 94, 129], "area": 8283}, {"id": 5539742, "category_id": 48, "iscrowd": 0, "bbox": [97, 274, 61, 59], "area": 757}, {"id": 1789054, "category_id": 59, "iscrowd": 0, "bbox": [395, 335, 155, 107], "area": 8834}, {"id": 2182771, "category_id": 59, "iscrowd": 0, "bbox": [233, 261, 303, 158], "area": 23130}, {"id": 1854065, "category_id": 59, "iscrowd": 0, "bbox": [284, 338, 194, 116], "area": 13120}, {"id": 2705787, "category_id": 62, "iscrowd": 0, "bbox": [511, 42, 128, 100], "area": 8055}, {"id": 3429467, "category_id": 62, "iscrowd": 0, "bbox": [0, 98, 35, 111], "area": 2019}, {"id": 2705773, "category_id": 67, "iscrowd": 0, "bbox": [1, 119, 639, 354], "area": 35596}, {"id": 6640195, "category_id": 77, "iscrowd": 0, "bbox": [576, 222, 64, 68], "area": 3316}, {"id": 6712709, "category_id": 82, "iscrowd": 0, "bbox": [102, 1, 284, 136], "area": 27730}, {"id": 11254979, "category_id": 84, "iscrowd": 0, "bbox": [82, 139, 348, 104], "area": 24164}, {"id": 2373723, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 23587}, {"id": 7444140, "category_id": 195, "iscrowd": 0, "bbox": [48, 115, 592, 227], "area": 12302}, {"id": 2840452, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 33697}], "file_name": "000000194724.png", "image_id": 194724}, {"segments_info": [{"id": 7773881, "category_id": 59, "iscrowd": 0, "bbox": [194, 113, 158, 53], "area": 6473}, {"id": 3950150, "category_id": 79, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 179647}, {"id": 15922935, "category_id": 199, "iscrowd": 0, "bbox": [485, 265, 15, 110], "area": 894}], "file_name": "000000194746.png", "image_id": 194746}, {"segments_info": [{"id": 5396314, "category_id": 6, "iscrowd": 0, "bbox": [2, 1, 638, 417], "area": 152354}, {"id": 1315604, "category_id": 62, "iscrowd": 0, "bbox": [349, 219, 232, 109], "area": 14331}, {"id": 1118739, "category_id": 62, "iscrowd": 0, "bbox": [57, 222, 230, 127], "area": 15948}, {"id": 3355444, "category_id": 62, "iscrowd": 0, "bbox": [334, 169, 121, 65], "area": 2720}, {"id": 3355446, "category_id": 62, "iscrowd": 0, "bbox": [172, 165, 123, 68], "area": 2810}, {"id": 1776412, "category_id": 62, "iscrowd": 0, "bbox": [125, 185, 165, 85], "area": 6398}, {"id": 1776155, "category_id": 62, "iscrowd": 0, "bbox": [342, 188, 158, 77], "area": 5936}, {"id": 3947581, "category_id": 62, "iscrowd": 0, "bbox": [200, 159, 83, 8], "area": 428}, {"id": 1776417, "category_id": 63, "iscrowd": 0, "bbox": [429, 207, 211, 214], "area": 29697}, {"id": 1316380, "category_id": 63, "iscrowd": 0, "bbox": [3, 204, 213, 216], "area": 29625}, {"id": 13090234, "category_id": 72, "iscrowd": 0, "bbox": [280, 91, 63, 44], "area": 2495}, {"id": 658446, "category_id": 190, "iscrowd": 0, "bbox": [163, 418, 342, 7], "area": 2138}], "file_name": "000000194832.png", "image_id": 194832}, {"segments_info": [{"id": 1050891, "category_id": 1, "iscrowd": 0, "bbox": [388, 240, 119, 121], "area": 3448}, {"id": 1380376, "category_id": 1, "iscrowd": 0, "bbox": [441, 145, 76, 144], "area": 5909}, {"id": 3288119, "category_id": 1, "iscrowd": 0, "bbox": [512, 237, 75, 83], "area": 3887}, {"id": 6567479, "category_id": 1, "iscrowd": 0, "bbox": [293, 157, 72, 135], "area": 4707}, {"id": 2957346, "category_id": 1, "iscrowd": 0, "bbox": [160, 223, 97, 101], "area": 5729}, {"id": 462111, "category_id": 1, "iscrowd": 0, "bbox": [390, 154, 56, 76], "area": 1516}, {"id": 8082768, "category_id": 1, "iscrowd": 0, "bbox": [5, 229, 95, 96], "area": 3876}, {"id": 5982040, "category_id": 1, "iscrowd": 0, "bbox": [444, 244, 56, 77], "area": 1190}, {"id": 3420490, "category_id": 1, "iscrowd": 0, "bbox": [220, 169, 89, 121], "area": 5972}, {"id": 2299934, "category_id": 1, "iscrowd": 0, "bbox": [268, 235, 60, 99], "area": 4047}, {"id": 460038, "category_id": 1, "iscrowd": 0, "bbox": [589, 240, 51, 60], "area": 1772}, {"id": 2761533, "category_id": 4, "iscrowd": 0, "bbox": [290, 289, 348, 264], "area": 37600}, {"id": 1709075, "category_id": 4, "iscrowd": 0, "bbox": [45, 292, 424, 260], "area": 62740}, {"id": 4273978, "category_id": 4, "iscrowd": 0, "bbox": [0, 329, 128, 238], "area": 22171}, {"id": 2693661, "category_id": 31, "iscrowd": 0, "bbox": [305, 206, 49, 73], "area": 598}, {"id": 1459079, "category_id": 44, "iscrowd": 0, "bbox": [401, 102, 12, 34], "area": 313}, {"id": 1531267, "category_id": 44, "iscrowd": 0, "bbox": [447, 95, 11, 26], "area": 192}, {"id": 599642, "category_id": 44, "iscrowd": 0, "bbox": [435, 98, 13, 24], "area": 191}, {"id": 1461891, "category_id": 44, "iscrowd": 0, "bbox": [389, 93, 10, 43], "area": 359}, {"id": 1713468, "category_id": 44, "iscrowd": 0, "bbox": [250, 130, 14, 39], "area": 375}, {"id": 605579, "category_id": 44, "iscrowd": 0, "bbox": [378, 93, 12, 43], "area": 320}, {"id": 930404, "category_id": 44, "iscrowd": 0, "bbox": [458, 95, 11, 30], "area": 213}, {"id": 1855368, "category_id": 44, "iscrowd": 0, "bbox": [413, 102, 12, 33], "area": 277}, {"id": 332313, "category_id": 44, "iscrowd": 0, "bbox": [367, 98, 11, 38], "area": 308}, {"id": 866181, "category_id": 44, "iscrowd": 0, "bbox": [345, 96, 10, 40], "area": 292}, {"id": 1062540, "category_id": 44, "iscrowd": 0, "bbox": [322, 95, 12, 41], "area": 376}, {"id": 1063841, "category_id": 44, "iscrowd": 0, "bbox": [310, 97, 12, 39], "area": 340}, {"id": 8352648, "category_id": 47, "iscrowd": 0, "bbox": [417, 211, 13, 24], "area": 271}, {"id": 7822178, "category_id": 47, "iscrowd": 0, "bbox": [110, 278, 12, 40], "area": 409}, {"id": 7428714, "category_id": 47, "iscrowd": 0, "bbox": [389, 206, 11, 31], "area": 258}, {"id": 4408411, "category_id": 62, "iscrowd": 0, "bbox": [248, 287, 30, 33], "area": 495}, {"id": 1907234, "category_id": 62, "iscrowd": 0, "bbox": [1, 288, 62, 63], "area": 3171}, {"id": 3550257, "category_id": 62, "iscrowd": 0, "bbox": [512, 274, 19, 34], "area": 287}, {"id": 5391696, "category_id": 62, "iscrowd": 0, "bbox": [580, 298, 60, 177], "area": 5079}, {"id": 2893618, "category_id": 62, "iscrowd": 0, "bbox": [393, 298, 97, 65], "area": 2881}, {"id": 5191490, "category_id": 64, "iscrowd": 0, "bbox": [121, 287, 34, 43], "area": 750}, {"id": 2897750, "category_id": 67, "iscrowd": 0, "bbox": [185, 323, 29, 10], "area": 171}, {"id": 2103841, "category_id": 67, "iscrowd": 0, "bbox": [351, 224, 116, 51], "area": 2062}, {"id": 6506563, "category_id": 86, "iscrowd": 0, "bbox": [395, 201, 9, 24], "area": 175}, {"id": 856098, "category_id": 107, "iscrowd": 0, "bbox": [212, 152, 323, 100], "area": 5123}, {"id": 2891318, "category_id": 112, "iscrowd": 0, "bbox": [505, 0, 135, 303], "area": 30808}, {"id": 1716315, "category_id": 119, "iscrowd": 0, "bbox": [373, 153, 49, 60], "area": 989}, {"id": 2107457, "category_id": 130, "iscrowd": 0, "bbox": [270, 15, 208, 200], "area": 4502}, {"id": 5456200, "category_id": 149, "iscrowd": 0, "bbox": [0, 516, 640, 58], "area": 19882}, {"id": 1971737, "category_id": 191, "iscrowd": 0, "bbox": [171, 475, 469, 73], "area": 4210}, {"id": 6702712, "category_id": 195, "iscrowd": 0, "bbox": [481, 126, 48, 40], "area": 1300}, {"id": 4432598, "category_id": 196, "iscrowd": 0, "bbox": [458, 35, 31, 24], "area": 420}, {"id": 4932164, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 545, 309], "area": 100191}], "file_name": "000000194875.png", "image_id": 194875}, {"segments_info": [{"id": 2440522, "category_id": 47, "iscrowd": 0, "bbox": [2, 0, 207, 169], "area": 23359}, {"id": 924202, "category_id": 51, "iscrowd": 0, "bbox": [281, 72, 147, 140], "area": 8538}, {"id": 1195350, "category_id": 51, "iscrowd": 0, "bbox": [153, 140, 144, 152], "area": 15246}, {"id": 862545, "category_id": 51, "iscrowd": 0, "bbox": [305, 206, 129, 133], "area": 13629}, {"id": 744031, "category_id": 56, "iscrowd": 0, "bbox": [168, 190, 64, 68], "area": 2276}, {"id": 416724, "category_id": 57, "iscrowd": 0, "bbox": [300, 132, 67, 29], "area": 1308}, {"id": 347078, "category_id": 57, "iscrowd": 0, "bbox": [308, 160, 69, 21], "area": 1079}, {"id": 478918, "category_id": 57, "iscrowd": 0, "bbox": [296, 108, 108, 65], "area": 2302}, {"id": 544705, "category_id": 57, "iscrowd": 0, "bbox": [363, 102, 54, 53], "area": 1088}, {"id": 546518, "category_id": 57, "iscrowd": 0, "bbox": [328, 147, 56, 24], "area": 485}, {"id": 413644, "category_id": 57, "iscrowd": 0, "bbox": [378, 140, 24, 22], "area": 317}, {"id": 809418, "category_id": 57, "iscrowd": 0, "bbox": [340, 169, 58, 22], "area": 763}, {"id": 7314612, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 108641}], "file_name": "000000194940.png", "image_id": 194940}, {"segments_info": [{"id": 5001293, "category_id": 15, "iscrowd": 0, "bbox": [423, 295, 50, 62], "area": 1671}, {"id": 2832693, "category_id": 15, "iscrowd": 0, "bbox": [0, 269, 43, 29], "area": 759}, {"id": 4082763, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 346], "area": 103765}, {"id": 2237218, "category_id": 185, "iscrowd": 0, "bbox": [0, 245, 78, 30], "area": 1432}, {"id": 16169079, "category_id": 187, "iscrowd": 0, "bbox": [14, 0, 495, 181], "area": 37862}, {"id": 6913921, "category_id": 191, "iscrowd": 0, "bbox": [0, 271, 640, 88], "area": 8207}, {"id": 2643785, "category_id": 193, "iscrowd": 0, "bbox": [0, 272, 640, 208], "area": 103205}, {"id": 4935767, "category_id": 197, "iscrowd": 0, "bbox": [51, 157, 468, 104], "area": 25890}, {"id": 9606292, "category_id": 199, "iscrowd": 0, "bbox": [0, 180, 640, 94], "area": 12440}], "file_name": "000000195045.png", "image_id": 195045}, {"segments_info": [{"id": 2248583, "category_id": 44, "iscrowd": 0, "bbox": [357, 198, 18, 34], "area": 435}, {"id": 2367333, "category_id": 44, "iscrowd": 0, "bbox": [344, 187, 10, 43], "area": 321}, {"id": 3288383, "category_id": 44, "iscrowd": 0, "bbox": [392, 266, 13, 25], "area": 258}, {"id": 4147296, "category_id": 44, "iscrowd": 0, "bbox": [327, 200, 14, 32], "area": 316}, {"id": 1647398, "category_id": 44, "iscrowd": 0, "bbox": [543, 237, 20, 24], "area": 306}, {"id": 4415859, "category_id": 44, "iscrowd": 0, "bbox": [376, 244, 19, 46], "area": 670}, {"id": 5467281, "category_id": 44, "iscrowd": 0, "bbox": [316, 203, 12, 33], "area": 299}, {"id": 4827323, "category_id": 44, "iscrowd": 0, "bbox": [415, 207, 19, 22], "area": 352}, {"id": 4745096, "category_id": 44, "iscrowd": 0, "bbox": [330, 263, 18, 50], "area": 693}, {"id": 2302051, "category_id": 44, "iscrowd": 0, "bbox": [352, 184, 8, 45], "area": 247}, {"id": 3755102, "category_id": 44, "iscrowd": 1, "bbox": [295, 196, 263, 136], "area": 2441}, {"id": 4940658, "category_id": 51, "iscrowd": 0, "bbox": [505, 236, 20, 8], "area": 121}, {"id": 11319746, "category_id": 51, "iscrowd": 0, "bbox": [489, 197, 21, 13], "area": 170}, {"id": 10269113, "category_id": 51, "iscrowd": 0, "bbox": [505, 225, 19, 11], "area": 152}, {"id": 9610419, "category_id": 51, "iscrowd": 0, "bbox": [485, 217, 20, 11], "area": 148}, {"id": 2373429, "category_id": 51, "iscrowd": 0, "bbox": [490, 275, 71, 42], "area": 2459}, {"id": 1911604, "category_id": 70, "iscrowd": 0, "bbox": [0, 351, 67, 119], "area": 5028}, {"id": 13690341, "category_id": 81, "iscrowd": 0, "bbox": [351, 291, 145, 41], "area": 4271}, {"id": 1910354, "category_id": 100, "iscrowd": 0, "bbox": [317, 97, 278, 198], "area": 3743}, {"id": 4808559, "category_id": 133, "iscrowd": 0, "bbox": [326, 0, 256, 227], "area": 41858}, {"id": 5534601, "category_id": 156, "iscrowd": 0, "bbox": [300, 215, 264, 60], "area": 4837}, {"id": 14542823, "category_id": 168, "iscrowd": 0, "bbox": [331, 317, 145, 32], "area": 1832}, {"id": 793127, "category_id": 171, "iscrowd": 0, "bbox": [0, 114, 54, 312], "area": 9307}, {"id": 662051, "category_id": 176, "iscrowd": 0, "bbox": [284, 108, 356, 370], "area": 39681}, {"id": 3362922, "category_id": 177, "iscrowd": 0, "bbox": [23, 0, 305, 478], "area": 106377}, {"id": 330256, "category_id": 190, "iscrowd": 0, "bbox": [0, 423, 68, 55], "area": 1772}, {"id": 9875388, "category_id": 195, "iscrowd": 0, "bbox": [248, 0, 392, 326], "area": 8162}, {"id": 5143188, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 206], "area": 15801}], "file_name": "000000195165.png", "image_id": 195165}, {"segments_info": [{"id": 263688, "category_id": 62, "iscrowd": 0, "bbox": [405, 309, 203, 108], "area": 16686}, {"id": 198153, "category_id": 62, "iscrowd": 0, "bbox": [490, 235, 116, 87], "area": 3807}, {"id": 989215, "category_id": 62, "iscrowd": 0, "bbox": [63, 231, 171, 134], "area": 12635}, {"id": 2839428, "category_id": 62, "iscrowd": 0, "bbox": [304, 170, 15, 34], "area": 430}, {"id": 3103866, "category_id": 63, "iscrowd": 0, "bbox": [195, 188, 155, 93], "area": 8752}, {"id": 1194585, "category_id": 67, "iscrowd": 0, "bbox": [155, 228, 72, 74], "area": 1937}, {"id": 8410691, "category_id": 72, "iscrowd": 0, "bbox": [449, 137, 95, 93], "area": 6847}, {"id": 1849420, "category_id": 109, "iscrowd": 0, "bbox": [591, 95, 49, 243], "area": 2540}, {"id": 2376282, "category_id": 130, "iscrowd": 0, "bbox": [239, 63, 369, 258], "area": 12452}, {"id": 661546, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 457, 425], "area": 30800}, {"id": 1715773, "category_id": 177, "iscrowd": 0, "bbox": [300, 35, 340, 390], "area": 29466}, {"id": 1123122, "category_id": 186, "iscrowd": 0, "bbox": [41, 0, 599, 113], "area": 52601}, {"id": 792352, "category_id": 189, "iscrowd": 0, "bbox": [189, 124, 403, 199], "area": 3648}, {"id": 3494770, "category_id": 190, "iscrowd": 0, "bbox": [70, 241, 444, 184], "area": 29640}, {"id": 3565187, "category_id": 199, "iscrowd": 0, "bbox": [48, 74, 275, 216], "area": 26825}], "file_name": "000000195754.png", "image_id": 195754}, {"segments_info": [{"id": 3420977, "category_id": 1, "iscrowd": 0, "bbox": [415, 48, 150, 426], "area": 36126}, {"id": 509335, "category_id": 51, "iscrowd": 0, "bbox": [139, 445, 101, 35], "area": 3087}, {"id": 930396, "category_id": 62, "iscrowd": 0, "bbox": [584, 314, 55, 105], "area": 3492}, {"id": 5268579, "category_id": 63, "iscrowd": 0, "bbox": [566, 385, 74, 89], "area": 4219}, {"id": 3495003, "category_id": 63, "iscrowd": 0, "bbox": [280, 288, 172, 96], "area": 12013}, {"id": 6644051, "category_id": 72, "iscrowd": 0, "bbox": [169, 196, 91, 84], "area": 7161}, {"id": 9281973, "category_id": 75, "iscrowd": 0, "bbox": [421, 131, 8, 31], "area": 178}, {"id": 10926020, "category_id": 75, "iscrowd": 0, "bbox": [443, 144, 8, 10], "area": 54}, {"id": 6323597, "category_id": 85, "iscrowd": 0, "bbox": [497, 19, 39, 40], "area": 1180}, {"id": 12303009, "category_id": 141, "iscrowd": 0, "bbox": [591, 430, 49, 50], "area": 407}, {"id": 1257301, "category_id": 156, "iscrowd": 0, "bbox": [28, 86, 612, 329], "area": 71049}, {"id": 465719, "category_id": 189, "iscrowd": 0, "bbox": [637, 345, 3, 41], "area": 98}, {"id": 3092789, "category_id": 190, "iscrowd": 0, "bbox": [0, 355, 596, 125], "area": 45265}, {"id": 6656932, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 399], "area": 116772}], "file_name": "000000195842.png", "image_id": 195842}, {"segments_info": [{"id": 1118480, "category_id": 62, "iscrowd": 0, "bbox": [0, 378, 186, 50], "area": 7845}, {"id": 11184294, "category_id": 72, "iscrowd": 0, "bbox": [37, 118, 206, 159], "area": 26998}, {"id": 328195, "category_id": 72, "iscrowd": 0, "bbox": [301, 122, 183, 127], "area": 23087}, {"id": 2828326, "category_id": 73, "iscrowd": 0, "bbox": [529, 189, 111, 145], "area": 6868}, {"id": 1841690, "category_id": 74, "iscrowd": 0, "bbox": [285, 285, 34, 19], "area": 527}, {"id": 5724245, "category_id": 76, "iscrowd": 0, "bbox": [99, 295, 169, 44], "area": 3448}, {"id": 9474186, "category_id": 130, "iscrowd": 0, "bbox": [593, 117, 47, 111], "area": 1751}, {"id": 11777716, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 431, 189], "area": 58903}, {"id": 5066573, "category_id": 189, "iscrowd": 0, "bbox": [0, 232, 640, 196], "area": 92774}, {"id": 10658719, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 276], "area": 48410}], "file_name": "000000195918.png", "image_id": 195918}, {"segments_info": [{"id": 10197137, "category_id": 50, "iscrowd": 0, "bbox": [183, 320, 389, 76], "area": 15710}, {"id": 2121157, "category_id": 57, "iscrowd": 0, "bbox": [216, 0, 422, 139], "area": 38554}, {"id": 2318519, "category_id": 57, "iscrowd": 0, "bbox": [0, 78, 640, 240], "area": 91442}, {"id": 9868917, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 155127}, {"id": 868519, "category_id": 196, "iscrowd": 0, "bbox": [238, 0, 402, 239], "area": 455}], "file_name": "000000196009.png", "image_id": 196009}, {"segments_info": [{"id": 4075312, "category_id": 1, "iscrowd": 0, "bbox": [36, 68, 31, 95], "area": 1868}, {"id": 6510676, "category_id": 1, "iscrowd": 0, "bbox": [441, 73, 17, 33], "area": 285}, {"id": 6107454, "category_id": 1, "iscrowd": 0, "bbox": [454, 207, 177, 211], "area": 20925}, {"id": 8743002, "category_id": 1, "iscrowd": 0, "bbox": [556, 100, 48, 112], "area": 2788}, {"id": 4736625, "category_id": 1, "iscrowd": 0, "bbox": [248, 74, 169, 301], "area": 17048}, {"id": 4077359, "category_id": 3, "iscrowd": 0, "bbox": [358, 82, 40, 41], "area": 672}, {"id": 3681314, "category_id": 3, "iscrowd": 0, "bbox": [244, 76, 56, 42], "area": 1468}, {"id": 3154716, "category_id": 3, "iscrowd": 0, "bbox": [469, 72, 114, 65], "area": 3436}, {"id": 3090728, "category_id": 3, "iscrowd": 0, "bbox": [166, 72, 68, 43], "area": 1510}, {"id": 2760474, "category_id": 3, "iscrowd": 0, "bbox": [76, 62, 74, 44], "area": 2147}, {"id": 7968406, "category_id": 37, "iscrowd": 0, "bbox": [0, 112, 22, 18], "area": 296}, {"id": 6776153, "category_id": 39, "iscrowd": 0, "bbox": [159, 151, 95, 32], "area": 762}, {"id": 4674652, "category_id": 40, "iscrowd": 0, "bbox": [452, 208, 43, 43], "area": 1235}, {"id": 1055765, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 92], "area": 33174}, {"id": 3226165, "category_id": 185, "iscrowd": 0, "bbox": [0, 27, 640, 166], "area": 41145}, {"id": 3502161, "category_id": 193, "iscrowd": 0, "bbox": [0, 97, 640, 244], "area": 54942}, {"id": 9944784, "category_id": 194, "iscrowd": 0, "bbox": [0, 160, 640, 269], "area": 86664}], "file_name": "000000196141.png", "image_id": 196141}, {"segments_info": [{"id": 4339765, "category_id": 5, "iscrowd": 0, "bbox": [107, 155, 418, 121], "area": 12670}, {"id": 6248281, "category_id": 149, "iscrowd": 0, "bbox": [0, 325, 640, 90], "area": 33281}, {"id": 13093065, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 289], "area": 161641}, {"id": 8414031, "category_id": 192, "iscrowd": 0, "bbox": [0, 254, 640, 108], "area": 41755}, {"id": 2172211, "category_id": 193, "iscrowd": 0, "bbox": [0, 392, 640, 35], "area": 11656}], "file_name": "000000196185.png", "image_id": 196185}, {"segments_info": [{"id": 12040375, "category_id": 1, "iscrowd": 0, "bbox": [342, 345, 4, 6], "area": 12}, {"id": 6710383, "category_id": 1, "iscrowd": 0, "bbox": [322, 340, 13, 19], "area": 112}, {"id": 5259582, "category_id": 1, "iscrowd": 0, "bbox": [100, 152, 115, 132], "area": 2905}, {"id": 7959665, "category_id": 1, "iscrowd": 0, "bbox": [547, 347, 6, 9], "area": 27}, {"id": 10655120, "category_id": 35, "iscrowd": 0, "bbox": [99, 224, 152, 66], "area": 2886}, {"id": 14408409, "category_id": 159, "iscrowd": 0, "bbox": [0, 268, 640, 159], "area": 90781}, {"id": 14602698, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 309], "area": 176381}], "file_name": "000000196442.png", "image_id": 196442}, {"segments_info": [{"id": 10389231, "category_id": 13, "iscrowd": 0, "bbox": [119, 293, 81, 85], "area": 5512}, {"id": 3815990, "category_id": 62, "iscrowd": 0, "bbox": [216, 302, 159, 198], "area": 25558}, {"id": 8485838, "category_id": 92, "iscrowd": 0, "bbox": [176, 156, 62, 83], "area": 4477}, {"id": 5842447, "category_id": 109, "iscrowd": 0, "bbox": [260, 0, 115, 348], "area": 23695}, {"id": 9736342, "category_id": 149, "iscrowd": 0, "bbox": [0, 294, 141, 130], "area": 10694}, {"id": 4927775, "category_id": 181, "iscrowd": 0, "bbox": [333, 90, 42, 213], "area": 3501}, {"id": 4939851, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 284, 302], "area": 42583}, {"id": 4274988, "category_id": 186, "iscrowd": 0, "bbox": [311, 0, 64, 141], "area": 4683}, {"id": 16445919, "category_id": 187, "iscrowd": 0, "bbox": [49, 0, 245, 168], "area": 18328}, {"id": 11644861, "category_id": 191, "iscrowd": 0, "bbox": [124, 349, 122, 71], "area": 2687}, {"id": 6325879, "category_id": 193, "iscrowd": 0, "bbox": [0, 277, 219, 223], "area": 20686}, {"id": 6445154, "category_id": 197, "iscrowd": 0, "bbox": [179, 232, 90, 124], "area": 6427}], "file_name": "000000196754.png", "image_id": 196754}, {"segments_info": [{"id": 1380624, "category_id": 3, "iscrowd": 0, "bbox": [531, 231, 46, 19], "area": 512}, {"id": 7369580, "category_id": 3, "iscrowd": 0, "bbox": [0, 240, 42, 30], "area": 915}, {"id": 1249554, "category_id": 3, "iscrowd": 0, "bbox": [576, 229, 50, 27], "area": 1041}, {"id": 8487288, "category_id": 8, "iscrowd": 0, "bbox": [44, 168, 574, 255], "area": 98216}, {"id": 2107170, "category_id": 184, "iscrowd": 0, "bbox": [0, 110, 640, 154], "area": 11667}, {"id": 10581308, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 215], "area": 106860}, {"id": 3882814, "category_id": 191, "iscrowd": 0, "bbox": [0, 248, 640, 232], "area": 81999}, {"id": 2435632, "category_id": 197, "iscrowd": 0, "bbox": [0, 195, 570, 56], "area": 1855}], "file_name": "000000196759.png", "image_id": 196759}, {"segments_info": [{"id": 5457988, "category_id": 2, "iscrowd": 0, "bbox": [0, 366, 16, 23], "area": 296}, {"id": 5131597, "category_id": 2, "iscrowd": 0, "bbox": [443, 264, 115, 144], "area": 7787}, {"id": 3682607, "category_id": 2, "iscrowd": 0, "bbox": [0, 378, 134, 102], "area": 10740}, {"id": 5141381, "category_id": 6, "iscrowd": 0, "bbox": [1, 51, 638, 379], "area": 167135}, {"id": 11186633, "category_id": 128, "iscrowd": 0, "bbox": [197, 0, 255, 108], "area": 20167}, {"id": 2828585, "category_id": 149, "iscrowd": 0, "bbox": [118, 365, 287, 115], "area": 15020}, {"id": 6585716, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 196], "area": 28295}, {"id": 16382199, "category_id": 187, "iscrowd": 0, "bbox": [430, 0, 210, 165], "area": 16453}, {"id": 9671058, "category_id": 191, "iscrowd": 0, "bbox": [211, 295, 429, 185], "area": 35796}], "file_name": "000000196843.png", "image_id": 196843}, {"segments_info": [{"id": 4754869, "category_id": 54, "iscrowd": 0, "bbox": [75, 20, 530, 382], "area": 153332}, {"id": 5455931, "category_id": 76, "iscrowd": 0, "bbox": [173, 1, 467, 147], "area": 21820}, {"id": 4672621, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 277], "area": 14566}, {"id": 3708301, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 411, 427], "area": 33464}], "file_name": "000000197004.png", "image_id": 197004}, {"segments_info": [{"id": 6518168, "category_id": 59, "iscrowd": 0, "bbox": [169, 346, 470, 132], "area": 54447}, {"id": 6255510, "category_id": 59, "iscrowd": 0, "bbox": [26, 58, 482, 282], "area": 104870}, {"id": 10722457, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 478], "area": 104116}], "file_name": "000000197022.png", "image_id": 197022}, {"segments_info": [{"id": 6312318, "category_id": 1, "iscrowd": 0, "bbox": [288, 62, 74, 161], "area": 3363}, {"id": 4865099, "category_id": 1, "iscrowd": 0, "bbox": [540, 49, 100, 222], "area": 8903}, {"id": 8412788, "category_id": 1, "iscrowd": 0, "bbox": [1, 44, 89, 220], "area": 8258}, {"id": 9396048, "category_id": 1, "iscrowd": 0, "bbox": [140, 102, 222, 238], "area": 13771}, {"id": 5718344, "category_id": 1, "iscrowd": 0, "bbox": [373, 171, 266, 217], "area": 13869}, {"id": 10265498, "category_id": 35, "iscrowd": 0, "bbox": [234, 330, 162, 29], "area": 821}, {"id": 9213325, "category_id": 35, "iscrowd": 0, "bbox": [268, 219, 126, 22], "area": 360}, {"id": 12040109, "category_id": 35, "iscrowd": 0, "bbox": [0, 259, 106, 37], "area": 671}, {"id": 9344397, "category_id": 35, "iscrowd": 0, "bbox": [142, 271, 495, 58], "area": 594}, {"id": 11706517, "category_id": 128, "iscrowd": 0, "bbox": [0, 56, 546, 149], "area": 38182}, {"id": 15785685, "category_id": 159, "iscrowd": 0, "bbox": [0, 153, 640, 239], "area": 101232}, {"id": 10588032, "category_id": 184, "iscrowd": 0, "bbox": [398, 48, 174, 112], "area": 13056}, {"id": 11442573, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 145], "area": 43775}], "file_name": "000000197388.png", "image_id": 197388}, {"segments_info": [{"id": 7305594, "category_id": 17, "iscrowd": 0, "bbox": [129, 116, 262, 521], "area": 89350}, {"id": 8751237, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 211492}, {"id": 15526891, "category_id": 199, "iscrowd": 0, "bbox": [0, 543, 123, 97], "area": 6049}], "file_name": "000000197528.png", "image_id": 197528}, {"segments_info": [{"id": 10528181, "category_id": 1, "iscrowd": 0, "bbox": [179, 141, 383, 438], "area": 65115}, {"id": 5334659, "category_id": 40, "iscrowd": 0, "bbox": [155, 394, 95, 66], "area": 4654}, {"id": 5211048, "category_id": 194, "iscrowd": 0, "bbox": [0, 171, 582, 469], "area": 198805}, {"id": 2695450, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 582, 190], "area": 103153}], "file_name": "000000197658.png", "image_id": 197658}, {"segments_info": [{"id": 9932146, "category_id": 44, "iscrowd": 0, "bbox": [313, 58, 24, 98], "area": 1288}, {"id": 3938863, "category_id": 44, "iscrowd": 0, "bbox": [66, 85, 59, 135], "area": 4049}, {"id": 7820109, "category_id": 44, "iscrowd": 0, "bbox": [213, 96, 16, 75], "area": 891}, {"id": 10777971, "category_id": 44, "iscrowd": 0, "bbox": [116, 121, 37, 85], "area": 1887}, {"id": 7577744, "category_id": 44, "iscrowd": 0, "bbox": [282, 61, 22, 108], "area": 1660}, {"id": 2166550, "category_id": 44, "iscrowd": 0, "bbox": [229, 104, 26, 71], "area": 1577}, {"id": 8551290, "category_id": 81, "iscrowd": 0, "bbox": [80, 248, 296, 230], "area": 34764}, {"id": 1642513, "category_id": 112, "iscrowd": 0, "bbox": [606, 391, 34, 87], "area": 2482}, {"id": 7631217, "category_id": 133, "iscrowd": 0, "bbox": [34, 12, 89, 94], "area": 4943}, {"id": 8743263, "category_id": 168, "iscrowd": 0, "bbox": [455, 134, 133, 161], "area": 15156}, {"id": 9211021, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 478], "area": 121853}, {"id": 9391434, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 302, 191], "area": 35185}, {"id": 3883336, "category_id": 190, "iscrowd": 0, "bbox": [359, 388, 175, 90], "area": 8316}, {"id": 9799298, "category_id": 195, "iscrowd": 0, "bbox": [238, 85, 340, 83], "area": 3931}], "file_name": "000000197796.png", "image_id": 197796}, {"segments_info": [{"id": 7629384, "category_id": 1, "iscrowd": 0, "bbox": [505, 70, 73, 186], "area": 7439}, {"id": 1316632, "category_id": 15, "iscrowd": 0, "bbox": [1, 131, 505, 222], "area": 40817}, {"id": 11777464, "category_id": 16, "iscrowd": 0, "bbox": [50, 191, 158, 187], "area": 11513}, {"id": 11452097, "category_id": 154, "iscrowd": 0, "bbox": [443, 198, 197, 35], "area": 3014}, {"id": 2058596, "category_id": 184, "iscrowd": 0, "bbox": [499, 0, 141, 212], "area": 16968}, {"id": 3486506, "category_id": 191, "iscrowd": 0, "bbox": [0, 206, 640, 219], "area": 72370}, {"id": 4026686, "category_id": 193, "iscrowd": 0, "bbox": [31, 33, 609, 290], "area": 45029}, {"id": 10266546, "category_id": 197, "iscrowd": 0, "bbox": [270, 0, 312, 68], "area": 6923}], "file_name": "000000197870.png", "image_id": 197870}, {"segments_info": [{"id": 5786962, "category_id": 1, "iscrowd": 0, "bbox": [105, 93, 172, 339], "area": 35508}, {"id": 5587769, "category_id": 3, "iscrowd": 0, "bbox": [190, 39, 238, 111], "area": 17036}, {"id": 9526452, "category_id": 28, "iscrowd": 0, "bbox": [0, 415, 314, 179], "area": 43051}, {"id": 4807802, "category_id": 64, "iscrowd": 0, "bbox": [65, 59, 104, 169], "area": 10487}, {"id": 8747891, "category_id": 149, "iscrowd": 0, "bbox": [0, 129, 428, 80], "area": 16408}, {"id": 3224884, "category_id": 184, "iscrowd": 0, "bbox": [340, 0, 66, 53], "area": 1788}, {"id": 9014166, "category_id": 191, "iscrowd": 0, "bbox": [0, 190, 428, 450], "area": 116335}, {"id": 4415312, "category_id": 193, "iscrowd": 0, "bbox": [0, 95, 428, 124], "area": 2698}, {"id": 3816770, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 428, 119], "area": 28468}], "file_name": "000000198489.png", "image_id": 198489}, {"segments_info": [{"id": 1516857, "category_id": 1, "iscrowd": 0, "bbox": [269, 190, 231, 443], "area": 64433}, {"id": 8362926, "category_id": 7, "iscrowd": 0, "bbox": [1, 13, 255, 413], "area": 60241}, {"id": 2174268, "category_id": 147, "iscrowd": 0, "bbox": [144, 479, 378, 161], "area": 18896}, {"id": 10866154, "category_id": 184, "iscrowd": 0, "bbox": [539, 337, 101, 23], "area": 962}, {"id": 1715273, "category_id": 185, "iscrowd": 0, "bbox": [461, 371, 179, 56], "area": 6939}, {"id": 14021117, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 151784}, {"id": 1450550, "category_id": 194, "iscrowd": 0, "bbox": [0, 327, 640, 313], "area": 74390}, {"id": 7317987, "category_id": 199, "iscrowd": 0, "bbox": [452, 340, 188, 46], "area": 3844}], "file_name": "000000198510.png", "image_id": 198510}, {"segments_info": [{"id": 460805, "category_id": 17, "iscrowd": 0, "bbox": [221, 191, 272, 232], "area": 34471}, {"id": 14932877, "category_id": 72, "iscrowd": 0, "bbox": [95, 113, 290, 192], "area": 47893}, {"id": 14602665, "category_id": 72, "iscrowd": 0, "bbox": [1, 112, 110, 241], "area": 20767}, {"id": 2768458, "category_id": 73, "iscrowd": 0, "bbox": [413, 178, 162, 121], "area": 12107}, {"id": 3691370, "category_id": 73, "iscrowd": 0, "bbox": [428, 299, 168, 62], "area": 7527}, {"id": 2235925, "category_id": 76, "iscrowd": 0, "bbox": [0, 364, 266, 108], "area": 20128}, {"id": 333069, "category_id": 85, "iscrowd": 0, "bbox": [572, 276, 17, 20], "area": 259}, {"id": 3162711, "category_id": 189, "iscrowd": 0, "bbox": [59, 298, 581, 181], "area": 34824}, {"id": 4154495, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 479], "area": 108995}], "file_name": "000000198641.png", "image_id": 198641}, {"segments_info": [{"id": 4735330, "category_id": 3, "iscrowd": 0, "bbox": [23, 233, 46, 23], "area": 209}, {"id": 9864823, "category_id": 3, "iscrowd": 0, "bbox": [51, 228, 45, 20], "area": 369}, {"id": 4867908, "category_id": 3, "iscrowd": 0, "bbox": [0, 231, 8, 18], "area": 116}, {"id": 3944813, "category_id": 3, "iscrowd": 0, "bbox": [11, 235, 128, 46], "area": 1985}, {"id": 3746851, "category_id": 3, "iscrowd": 0, "bbox": [54, 249, 82, 55], "area": 3068}, {"id": 8412999, "category_id": 8, "iscrowd": 0, "bbox": [68, 216, 78, 30], "area": 1037}, {"id": 9669770, "category_id": 8, "iscrowd": 0, "bbox": [37, 227, 57, 22], "area": 181}, {"id": 2719890, "category_id": 8, "iscrowd": 0, "bbox": [129, 156, 483, 234], "area": 69150}, {"id": 8421255, "category_id": 149, "iscrowd": 0, "bbox": [9, 221, 41, 37], "area": 599}, {"id": 2044706, "category_id": 184, "iscrowd": 0, "bbox": [14, 0, 626, 260], "area": 57298}, {"id": 11760707, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 244], "area": 75798}, {"id": 6188150, "category_id": 191, "iscrowd": 0, "bbox": [0, 235, 640, 163], "area": 42108}, {"id": 733730, "category_id": 193, "iscrowd": 0, "bbox": [596, 253, 44, 73], "area": 2311}], "file_name": "000000198805.png", "image_id": 198805}, {"segments_info": [{"id": 7039076, "category_id": 184, "iscrowd": 0, "bbox": [26, 314, 360, 90], "area": 23428}, {"id": 12286539, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 404], "area": 164976}], "file_name": "000000198915.png", "image_id": 198915}, {"segments_info": [{"id": 3421487, "category_id": 1, "iscrowd": 0, "bbox": [246, 398, 62, 182], "area": 6418}, {"id": 8225928, "category_id": 3, "iscrowd": 0, "bbox": [83, 382, 13, 3], "area": 25}, {"id": 3289903, "category_id": 3, "iscrowd": 0, "bbox": [104, 378, 24, 7], "area": 124}, {"id": 10199201, "category_id": 6, "iscrowd": 0, "bbox": [126, 368, 80, 18], "area": 1203}, {"id": 1909029, "category_id": 10, "iscrowd": 0, "bbox": [277, 323, 32, 36], "area": 921}, {"id": 5133647, "category_id": 10, "iscrowd": 0, "bbox": [292, 165, 63, 134], "area": 7727}, {"id": 5856605, "category_id": 130, "iscrowd": 0, "bbox": [283, 0, 64, 112], "area": 4403}, {"id": 6118489, "category_id": 149, "iscrowd": 0, "bbox": [0, 396, 237, 244], "area": 54829}, {"id": 15788770, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 326], "area": 117926}, {"id": 7697778, "category_id": 191, "iscrowd": 0, "bbox": [193, 380, 287, 260], "area": 45945}, {"id": 4739414, "category_id": 197, "iscrowd": 0, "bbox": [0, 127, 480, 304], "area": 53974}], "file_name": "000000198928.png", "image_id": 198928}, {"segments_info": [{"id": 6776679, "category_id": 20, "iscrowd": 0, "bbox": [271, 212, 232, 154], "area": 17198}, {"id": 5921370, "category_id": 20, "iscrowd": 0, "bbox": [391, 192, 192, 154], "area": 7504}, {"id": 5855577, "category_id": 20, "iscrowd": 0, "bbox": [77, 174, 244, 180], "area": 20117}, {"id": 6645093, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 258], "area": 137771}, {"id": 9408399, "category_id": 193, "iscrowd": 0, "bbox": [0, 274, 640, 151], "area": 69934}], "file_name": "000000198960.png", "image_id": 198960}, {"segments_info": [{"id": 5985892, "category_id": 1, "iscrowd": 0, "bbox": [144, 35, 248, 565], "area": 68239}, {"id": 5198677, "category_id": 41, "iscrowd": 0, "bbox": [163, 489, 187, 123], "area": 6988}, {"id": 8688280, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 480, 543], "area": 156195}, {"id": 7176068, "category_id": 191, "iscrowd": 0, "bbox": [0, 344, 480, 296], "area": 68717}], "file_name": "000000199055.png", "image_id": 199055}, {"segments_info": [{"id": 8227481, "category_id": 1, "iscrowd": 0, "bbox": [209, 193, 19, 21], "area": 264}, {"id": 6319233, "category_id": 1, "iscrowd": 0, "bbox": [502, 197, 24, 28], "area": 358}, {"id": 4677232, "category_id": 1, "iscrowd": 0, "bbox": [148, 181, 30, 36], "area": 762}, {"id": 5067863, "category_id": 1, "iscrowd": 0, "bbox": [611, 177, 21, 118], "area": 1553}, {"id": 4215628, "category_id": 1, "iscrowd": 0, "bbox": [536, 167, 28, 57], "area": 880}, {"id": 4866686, "category_id": 1, "iscrowd": 0, "bbox": [417, 181, 36, 108], "area": 1992}, {"id": 5726858, "category_id": 1, "iscrowd": 0, "bbox": [466, 190, 25, 33], "area": 598}, {"id": 2896184, "category_id": 1, "iscrowd": 0, "bbox": [559, 178, 17, 45], "area": 490}, {"id": 8490384, "category_id": 1, "iscrowd": 0, "bbox": [220, 63, 91, 241], "area": 10434}, {"id": 4609903, "category_id": 1, "iscrowd": 0, "bbox": [188, 182, 13, 25], "area": 178}, {"id": 4676210, "category_id": 1, "iscrowd": 0, "bbox": [476, 169, 19, 37], "area": 355}, {"id": 7306123, "category_id": 1, "iscrowd": 0, "bbox": [484, 166, 49, 62], "area": 1267}, {"id": 6116691, "category_id": 1, "iscrowd": 0, "bbox": [573, 172, 38, 82], "area": 1428}, {"id": 5792118, "category_id": 1, "iscrowd": 1, "bbox": [1, 170, 570, 54], "area": 2574}, {"id": 5469067, "category_id": 19, "iscrowd": 0, "bbox": [103, 128, 308, 273], "area": 32952}, {"id": 5093337, "category_id": 92, "iscrowd": 0, "bbox": [527, 265, 37, 40], "area": 874}, {"id": 1057818, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 234], "area": 113092}, {"id": 5600388, "category_id": 185, "iscrowd": 0, "bbox": [0, 205, 640, 201], "area": 36345}, {"id": 8962235, "category_id": 193, "iscrowd": 0, "bbox": [0, 267, 640, 157], "area": 62505}], "file_name": "000000199236.png", "image_id": 199236}, {"segments_info": [{"id": 5000514, "category_id": 1, "iscrowd": 0, "bbox": [217, 35, 210, 598], "area": 72915}, {"id": 7574935, "category_id": 43, "iscrowd": 0, "bbox": [138, 128, 102, 135], "area": 8526}, {"id": 1975373, "category_id": 119, "iscrowd": 0, "bbox": [0, 351, 56, 60], "area": 2169}, {"id": 1260322, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 514], "area": 135517}, {"id": 5097886, "category_id": 193, "iscrowd": 0, "bbox": [0, 449, 427, 191], "area": 52772}], "file_name": "000000199310.png", "image_id": 199310}, {"segments_info": [{"id": 4535594, "category_id": 1, "iscrowd": 0, "bbox": [44, 472, 5, 12], "area": 37}, {"id": 3284072, "category_id": 1, "iscrowd": 0, "bbox": [174, 474, 6, 11], "area": 37}, {"id": 7693906, "category_id": 1, "iscrowd": 0, "bbox": [233, 479, 4, 7], "area": 23}, {"id": 6382445, "category_id": 1, "iscrowd": 0, "bbox": [319, 489, 26, 29], "area": 456}, {"id": 4671823, "category_id": 1, "iscrowd": 0, "bbox": [51, 483, 19, 23], "area": 209}, {"id": 6842479, "category_id": 1, "iscrowd": 0, "bbox": [27, 478, 6, 8], "area": 32}, {"id": 6371147, "category_id": 1, "iscrowd": 0, "bbox": [333, 471, 8, 13], "area": 64}, {"id": 4731945, "category_id": 1, "iscrowd": 0, "bbox": [33, 471, 5, 13], "area": 39}, {"id": 3223348, "category_id": 1, "iscrowd": 0, "bbox": [32, 480, 3, 2], "area": 5}, {"id": 3493709, "category_id": 1, "iscrowd": 0, "bbox": [37, 472, 3, 12], "area": 21}, {"id": 6575440, "category_id": 1, "iscrowd": 0, "bbox": [10, 472, 7, 12], "area": 51}, {"id": 8086094, "category_id": 9, "iscrowd": 0, "bbox": [84, 446, 14, 4], "area": 47}, {"id": 6579037, "category_id": 38, "iscrowd": 0, "bbox": [91, 191, 70, 62], "area": 1519}, {"id": 8095890, "category_id": 154, "iscrowd": 0, "bbox": [0, 473, 427, 167], "area": 66548}, {"id": 7492657, "category_id": 155, "iscrowd": 0, "bbox": [0, 443, 427, 45], "area": 14768}, {"id": 12620133, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 448], "area": 189259}], "file_name": "000000199395.png", "image_id": 199395}, {"segments_info": [{"id": 6315095, "category_id": 1, "iscrowd": 0, "bbox": [262, 77, 181, 163], "area": 13241}, {"id": 13488590, "category_id": 42, "iscrowd": 0, "bbox": [165, 204, 242, 62], "area": 9484}, {"id": 14342602, "category_id": 155, "iscrowd": 0, "bbox": [0, 189, 640, 244], "area": 131398}, {"id": 11770235, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 235], "area": 122059}], "file_name": "000000199442.png", "image_id": 199442}, {"segments_info": [{"id": 4537411, "category_id": 1, "iscrowd": 0, "bbox": [123, 152, 300, 102], "area": 17320}, {"id": 10980224, "category_id": 65, "iscrowd": 0, "bbox": [0, 167, 640, 256], "area": 131602}, {"id": 10453111, "category_id": 93, "iscrowd": 0, "bbox": [0, 247, 640, 181], "area": 3454}], "file_name": "000000199551.png", "image_id": 199551}, {"segments_info": [{"id": 2369322, "category_id": 78, "iscrowd": 0, "bbox": [2, 1, 638, 479], "area": 234569}, {"id": 1711908, "category_id": 88, "iscrowd": 0, "bbox": [119, 19, 197, 244], "area": 34887}, {"id": 3028798, "category_id": 190, "iscrowd": 0, "bbox": [0, 267, 301, 213], "area": 21994}], "file_name": "000000199681.png", "image_id": 199681}, {"segments_info": [{"id": 1910060, "category_id": 1, "iscrowd": 0, "bbox": [375, 67, 191, 297], "area": 29941}, {"id": 1580064, "category_id": 1, "iscrowd": 0, "bbox": [0, 126, 15, 158], "area": 1400}, {"id": 2305851, "category_id": 1, "iscrowd": 0, "bbox": [149, 75, 44, 166], "area": 2848}, {"id": 1250844, "category_id": 1, "iscrowd": 0, "bbox": [544, 24, 96, 375], "area": 23756}, {"id": 1843493, "category_id": 1, "iscrowd": 0, "bbox": [157, 69, 60, 171], "area": 4508}, {"id": 2172975, "category_id": 1, "iscrowd": 0, "bbox": [307, 28, 103, 256], "area": 15940}, {"id": 3358021, "category_id": 1, "iscrowd": 0, "bbox": [9, 60, 85, 109], "area": 1865}, {"id": 3162718, "category_id": 1, "iscrowd": 0, "bbox": [0, 91, 87, 136], "area": 3098}, {"id": 2634557, "category_id": 1, "iscrowd": 0, "bbox": [37, 55, 193, 361], "area": 36883}, {"id": 2567991, "category_id": 1, "iscrowd": 0, "bbox": [245, 104, 98, 167], "area": 9266}, {"id": 9215679, "category_id": 44, "iscrowd": 0, "bbox": [368, 264, 72, 157], "area": 8051}, {"id": 8076086, "category_id": 47, "iscrowd": 0, "bbox": [286, 292, 84, 128], "area": 9559}, {"id": 12371408, "category_id": 47, "iscrowd": 0, "bbox": [256, 391, 45, 34], "area": 1280}, {"id": 7960704, "category_id": 49, "iscrowd": 0, "bbox": [394, 336, 185, 83], "area": 3376}, {"id": 7176078, "category_id": 51, "iscrowd": 0, "bbox": [191, 294, 114, 97], "area": 7299}, {"id": 2379409, "category_id": 54, "iscrowd": 0, "bbox": [476, 387, 66, 38], "area": 1230}, {"id": 3042992, "category_id": 54, "iscrowd": 0, "bbox": [548, 377, 90, 47], "area": 2393}, {"id": 2048647, "category_id": 54, "iscrowd": 0, "bbox": [412, 399, 82, 26], "area": 1249}, {"id": 10199974, "category_id": 84, "iscrowd": 0, "bbox": [561, 47, 40, 22], "area": 822}, {"id": 15463413, "category_id": 85, "iscrowd": 0, "bbox": [494, 0, 23, 26], "area": 458}, {"id": 8036276, "category_id": 100, "iscrowd": 0, "bbox": [430, 0, 182, 402], "area": 11716}, {"id": 9348533, "category_id": 107, "iscrowd": 0, "bbox": [547, 195, 11, 20], "area": 107}, {"id": 15660021, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 264, 77], "area": 6523}, {"id": 8428726, "category_id": 156, "iscrowd": 0, "bbox": [158, 42, 320, 171], "area": 10499}, {"id": 9217973, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 296, 85], "area": 9265}, {"id": 3292234, "category_id": 189, "iscrowd": 0, "bbox": [173, 367, 119, 58], "area": 3279}, {"id": 4544361, "category_id": 191, "iscrowd": 0, "bbox": [0, 194, 588, 231], "area": 9811}, {"id": 4942707, "category_id": 196, "iscrowd": 0, "bbox": [163, 266, 413, 159], "area": 4977}, {"id": 13031392, "category_id": 199, "iscrowd": 0, "bbox": [43, 0, 597, 174], "area": 27432}, {"id": 2174813, "category_id": 200, "iscrowd": 0, "bbox": [0, 272, 40, 51], "area": 1207}], "file_name": "000000199771.png", "image_id": 199771}, {"segments_info": [{"id": 10318415, "category_id": 5, "iscrowd": 0, "bbox": [92, 153, 131, 158], "area": 9549}, {"id": 11962978, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 297606}], "file_name": "000000199977.png", "image_id": 199977}, {"segments_info": [{"id": 1384016, "category_id": 130, "iscrowd": 0, "bbox": [112, 0, 436, 427], "area": 28156}, {"id": 197897, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 181614}], "file_name": "000000200152.png", "image_id": 200152}, {"segments_info": [{"id": 5000527, "category_id": 7, "iscrowd": 0, "bbox": [4, 156, 571, 183], "area": 64549}, {"id": 3486515, "category_id": 10, "iscrowd": 0, "bbox": [317, 54, 25, 26], "area": 439}, {"id": 2631463, "category_id": 10, "iscrowd": 0, "bbox": [484, 4, 31, 37], "area": 805}, {"id": 1381397, "category_id": 10, "iscrowd": 0, "bbox": [496, 51, 15, 16], "area": 173}, {"id": 3091244, "category_id": 10, "iscrowd": 0, "bbox": [249, 0, 44, 84], "area": 3101}, {"id": 3091759, "category_id": 10, "iscrowd": 0, "bbox": [212, 164, 8, 15], "area": 108}, {"id": 3617590, "category_id": 10, "iscrowd": 0, "bbox": [95, 1, 41, 63], "area": 2288}, {"id": 2630692, "category_id": 10, "iscrowd": 0, "bbox": [404, 2, 46, 95], "area": 3189}, {"id": 3420723, "category_id": 10, "iscrowd": 0, "bbox": [310, 1, 37, 58], "area": 1547}, {"id": 6842989, "category_id": 144, "iscrowd": 0, "bbox": [561, 254, 79, 87], "area": 4542}, {"id": 5988203, "category_id": 147, "iscrowd": 0, "bbox": [0, 222, 640, 203], "area": 79472}, {"id": 5527376, "category_id": 184, "iscrowd": 0, "bbox": [0, 183, 640, 76], "area": 2890}, {"id": 14801364, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 208], "area": 77731}, {"id": 11512743, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 292], "area": 14167}], "file_name": "000000200162.png", "image_id": 200162}, {"segments_info": [{"id": 10786705, "category_id": 65, "iscrowd": 0, "bbox": [17, 112, 483, 263], "area": 67433}, {"id": 2304560, "category_id": 84, "iscrowd": 0, "bbox": [383, 201, 42, 17], "area": 390}, {"id": 2106920, "category_id": 84, "iscrowd": 0, "bbox": [379, 195, 23, 5], "area": 83}, {"id": 6250850, "category_id": 93, "iscrowd": 0, "bbox": [464, 270, 14, 10], "area": 17}, {"id": 527629, "category_id": 109, "iscrowd": 0, "bbox": [438, 0, 62, 155], "area": 8195}, {"id": 2568246, "category_id": 130, "iscrowd": 0, "bbox": [407, 74, 42, 79], "area": 1198}, {"id": 593424, "category_id": 189, "iscrowd": 0, "bbox": [350, 141, 138, 132], "area": 6935}, {"id": 1055522, "category_id": 195, "iscrowd": 0, "bbox": [407, 199, 20, 10], "area": 88}, {"id": 5333878, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 80899}, {"id": 724751, "category_id": 200, "iscrowd": 0, "bbox": [470, 255, 30, 62], "area": 881}], "file_name": "000000200252.png", "image_id": 200252}, {"segments_info": [{"id": 4999761, "category_id": 1, "iscrowd": 0, "bbox": [127, 127, 376, 346], "area": 72339}, {"id": 3684414, "category_id": 43, "iscrowd": 0, "bbox": [382, 2, 258, 473], "area": 91986}, {"id": 1644057, "category_id": 65, "iscrowd": 0, "bbox": [2, 78, 392, 382], "area": 63111}, {"id": 921365, "category_id": 93, "iscrowd": 0, "bbox": [0, 74, 33, 234], "area": 1058}, {"id": 3307984, "category_id": 100, "iscrowd": 0, "bbox": [222, 0, 129, 155], "area": 13822}, {"id": 856350, "category_id": 130, "iscrowd": 0, "bbox": [17, 0, 58, 89], "area": 3379}, {"id": 1645859, "category_id": 190, "iscrowd": 0, "bbox": [0, 307, 130, 173], "area": 11155}, {"id": 3752276, "category_id": 199, "iscrowd": 0, "bbox": [54, 0, 513, 190], "area": 31380}], "file_name": "000000200421.png", "image_id": 200421}, {"segments_info": [{"id": 6253170, "category_id": 21, "iscrowd": 0, "bbox": [179, 176, 171, 144], "area": 13009}, {"id": 2964035, "category_id": 185, "iscrowd": 0, "bbox": [0, 161, 387, 113], "area": 12038}, {"id": 3619405, "category_id": 190, "iscrowd": 0, "bbox": [305, 335, 335, 90], "area": 16560}, {"id": 3752262, "category_id": 191, "iscrowd": 0, "bbox": [0, 270, 486, 155], "area": 32314}, {"id": 10921382, "category_id": 199, "iscrowd": 0, "bbox": [436, 0, 204, 360], "area": 31780}], "file_name": "000000200667.png", "image_id": 200667}, {"segments_info": [{"id": 6506351, "category_id": 1, "iscrowd": 0, "bbox": [2, 224, 29, 58], "area": 834}, {"id": 8480860, "category_id": 6, "iscrowd": 0, "bbox": [88, 168, 378, 150], "area": 38081}, {"id": 3682359, "category_id": 84, "iscrowd": 0, "bbox": [303, 193, 37, 50], "area": 1256}, {"id": 1062755, "category_id": 84, "iscrowd": 0, "bbox": [235, 202, 29, 42], "area": 692}, {"id": 549761, "category_id": 84, "iscrowd": 0, "bbox": [144, 241, 33, 28], "area": 624}, {"id": 4401770, "category_id": 84, "iscrowd": 0, "bbox": [197, 236, 37, 39], "area": 898}, {"id": 1663772, "category_id": 84, "iscrowd": 0, "bbox": [358, 196, 51, 65], "area": 2102}, {"id": 7435646, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 638, 255], "area": 61417}, {"id": 3893334, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 455], "area": 83770}, {"id": 5862008, "category_id": 185, "iscrowd": 0, "bbox": [0, 248, 17, 40], "area": 484}, {"id": 14935258, "category_id": 187, "iscrowd": 0, "bbox": [547, 0, 93, 18], "area": 730}, {"id": 10268348, "category_id": 191, "iscrowd": 0, "bbox": [87, 289, 21, 18], "area": 207}, {"id": 5553821, "category_id": 193, "iscrowd": 0, "bbox": [13, 237, 627, 197], "area": 36436}], "file_name": "000000200839.png", "image_id": 200839}, {"segments_info": [{"id": 12825775, "category_id": 1, "iscrowd": 0, "bbox": [289, 158, 17, 28], "area": 246}, {"id": 9995899, "category_id": 1, "iscrowd": 0, "bbox": [254, 197, 95, 161], "area": 7814}, {"id": 12762555, "category_id": 3, "iscrowd": 0, "bbox": [516, 158, 30, 14], "area": 316}, {"id": 7366285, "category_id": 8, "iscrowd": 0, "bbox": [435, 141, 31, 17], "area": 359}, {"id": 6247334, "category_id": 8, "iscrowd": 0, "bbox": [456, 147, 55, 30], "area": 1324}, {"id": 14012623, "category_id": 8, "iscrowd": 0, "bbox": [350, 136, 91, 40], "area": 2941}, {"id": 7694948, "category_id": 8, "iscrowd": 0, "bbox": [300, 155, 61, 29], "area": 1231}, {"id": 15857137, "category_id": 34, "iscrowd": 0, "bbox": [229, 211, 34, 42], "area": 1118}, {"id": 6914991, "category_id": 128, "iscrowd": 0, "bbox": [0, 115, 108, 90], "area": 7524}, {"id": 7900562, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 191], "area": 99751}, {"id": 7909270, "category_id": 193, "iscrowd": 0, "bbox": [0, 151, 640, 276], "area": 148431}, {"id": 6450038, "category_id": 194, "iscrowd": 0, "bbox": [425, 149, 175, 32], "area": 753}, {"id": 13092293, "category_id": 197, "iscrowd": 0, "bbox": [507, 131, 90, 26], "area": 1000}], "file_name": "000000200961.png", "image_id": 200961}, {"segments_info": [{"id": 2308412, "category_id": 22, "iscrowd": 0, "bbox": [79, 33, 296, 445], "area": 55305}, {"id": 3561054, "category_id": 22, "iscrowd": 0, "bbox": [1, 1, 150, 488], "area": 40470}, {"id": 2377034, "category_id": 148, "iscrowd": 0, "bbox": [0, 544, 242, 52], "area": 4845}, {"id": 1649968, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 400, 604], "area": 98889}, {"id": 1588025, "category_id": 193, "iscrowd": 0, "bbox": [0, 383, 315, 221], "area": 30093}], "file_name": "000000201025.png", "image_id": 201025}, {"segments_info": [{"id": 10063481, "category_id": 1, "iscrowd": 0, "bbox": [47, 17, 41, 52], "area": 1443}, {"id": 5328197, "category_id": 1, "iscrowd": 0, "bbox": [348, 30, 51, 52], "area": 1685}, {"id": 9214141, "category_id": 1, "iscrowd": 0, "bbox": [80, 20, 327, 603], "area": 68841}, {"id": 8751534, "category_id": 1, "iscrowd": 0, "bbox": [234, 10, 69, 67], "area": 2825}, {"id": 6121064, "category_id": 43, "iscrowd": 0, "bbox": [28, 204, 84, 100], "area": 5282}, {"id": 6392272, "category_id": 138, "iscrowd": 0, "bbox": [0, 302, 411, 338], "area": 100439}, {"id": 6055520, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 411, 82], "area": 19428}, {"id": 2964512, "category_id": 199, "iscrowd": 0, "bbox": [0, 58, 411, 259], "area": 60906}], "file_name": "000000201072.png", "image_id": 201072}, {"segments_info": [{"id": 2237479, "category_id": 1, "iscrowd": 0, "bbox": [537, 128, 7, 10], "area": 51}, {"id": 2171943, "category_id": 1, "iscrowd": 0, "bbox": [547, 121, 13, 18], "area": 111}, {"id": 7500396, "category_id": 7, "iscrowd": 0, "bbox": [145, 156, 207, 74], "area": 10457}, {"id": 6382188, "category_id": 10, "iscrowd": 0, "bbox": [450, 127, 35, 46], "area": 1157}, {"id": 5463654, "category_id": 125, "iscrowd": 0, "bbox": [45, 221, 595, 138], "area": 22533}, {"id": 4938084, "category_id": 147, "iscrowd": 0, "bbox": [0, 204, 640, 155], "area": 36239}, {"id": 7114143, "category_id": 151, "iscrowd": 0, "bbox": [481, 64, 150, 64], "area": 4420}, {"id": 4406589, "category_id": 171, "iscrowd": 0, "bbox": [492, 148, 22, 34], "area": 556}, {"id": 10062206, "category_id": 181, "iscrowd": 0, "bbox": [492, 117, 18, 35], "area": 517}, {"id": 7245710, "category_id": 184, "iscrowd": 0, "bbox": [0, 85, 640, 161], "area": 27149}, {"id": 8753553, "category_id": 185, "iscrowd": 0, "bbox": [54, 190, 68, 51], "area": 2203}, {"id": 15919324, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 167], "area": 77242}, {"id": 4611922, "category_id": 193, "iscrowd": 0, "bbox": [0, 228, 640, 131], "area": 14398}, {"id": 5994137, "category_id": 197, "iscrowd": 0, "bbox": [492, 106, 142, 166], "area": 14215}], "file_name": "000000201148.png", "image_id": 201148}, {"segments_info": [{"id": 4278873, "category_id": 1, "iscrowd": 0, "bbox": [211, 139, 10, 21], "area": 128}, {"id": 1185821, "category_id": 1, "iscrowd": 0, "bbox": [387, 142, 15, 22], "area": 197}, {"id": 5463397, "category_id": 1, "iscrowd": 0, "bbox": [478, 138, 16, 36], "area": 405}, {"id": 4344406, "category_id": 1, "iscrowd": 0, "bbox": [155, 143, 14, 13], "area": 85}, {"id": 1779763, "category_id": 1, "iscrowd": 0, "bbox": [439, 143, 23, 27], "area": 348}, {"id": 1053460, "category_id": 1, "iscrowd": 0, "bbox": [172, 139, 11, 26], "area": 180}, {"id": 4734514, "category_id": 1, "iscrowd": 0, "bbox": [137, 142, 30, 74], "area": 1175}, {"id": 2172716, "category_id": 1, "iscrowd": 0, "bbox": [470, 142, 10, 30], "area": 224}, {"id": 3686209, "category_id": 1, "iscrowd": 0, "bbox": [413, 136, 15, 31], "area": 350}, {"id": 5066317, "category_id": 1, "iscrowd": 0, "bbox": [134, 142, 10, 46], "area": 277}, {"id": 1913142, "category_id": 1, "iscrowd": 0, "bbox": [88, 139, 10, 38], "area": 216}, {"id": 2633525, "category_id": 1, "iscrowd": 0, "bbox": [98, 140, 14, 21], "area": 191}, {"id": 4011574, "category_id": 1, "iscrowd": 0, "bbox": [43, 135, 70, 240], "area": 10287}, {"id": 1910832, "category_id": 1, "iscrowd": 1, "bbox": [43, 136, 427, 38], "area": 2167}, {"id": 4082281, "category_id": 31, "iscrowd": 0, "bbox": [102, 267, 10, 14], "area": 93}, {"id": 3554107, "category_id": 33, "iscrowd": 0, "bbox": [198, 193, 32, 30], "area": 607}, {"id": 1118481, "category_id": 33, "iscrowd": 0, "bbox": [172, 198, 23, 18], "area": 252}, {"id": 5785406, "category_id": 33, "iscrowd": 0, "bbox": [268, 318, 157, 53], "area": 4882}, {"id": 3946036, "category_id": 33, "iscrowd": 0, "bbox": [288, 228, 79, 75], "area": 3958}, {"id": 2504757, "category_id": 33, "iscrowd": 0, "bbox": [164, 176, 14, 11], "area": 81}, {"id": 4275000, "category_id": 33, "iscrowd": 0, "bbox": [215, 228, 84, 90], "area": 4893}, {"id": 1578298, "category_id": 33, "iscrowd": 0, "bbox": [165, 177, 26, 15], "area": 192}, {"id": 2434082, "category_id": 33, "iscrowd": 0, "bbox": [195, 218, 59, 48], "area": 1438}, {"id": 2302497, "category_id": 33, "iscrowd": 0, "bbox": [185, 212, 29, 33], "area": 570}, {"id": 1448216, "category_id": 33, "iscrowd": 0, "bbox": [163, 164, 33, 18], "area": 336}, {"id": 13025462, "category_id": 72, "iscrowd": 0, "bbox": [314, 107, 51, 67], "area": 2697}, {"id": 9925964, "category_id": 72, "iscrowd": 0, "bbox": [209, 130, 12, 7], "area": 74}, {"id": 10384724, "category_id": 72, "iscrowd": 0, "bbox": [248, 131, 4, 5], "area": 19}, {"id": 11569009, "category_id": 72, "iscrowd": 0, "bbox": [224, 131, 3, 5], "area": 15}, {"id": 3753033, "category_id": 130, "iscrowd": 0, "bbox": [0, 26, 240, 104], "area": 1394}, {"id": 7634046, "category_id": 144, "iscrowd": 0, "bbox": [196, 154, 304, 116], "area": 14448}, {"id": 2768193, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 500, 148], "area": 59850}, {"id": 6189433, "category_id": 190, "iscrowd": 0, "bbox": [0, 152, 226, 223], "area": 27748}, {"id": 2438718, "category_id": 199, "iscrowd": 0, "bbox": [0, 109, 329, 100], "area": 7763}], "file_name": "000000201418.png", "image_id": 201418}, {"segments_info": [{"id": 9415350, "category_id": 1, "iscrowd": 0, "bbox": [388, 65, 252, 338], "area": 40744}, {"id": 8686219, "category_id": 1, "iscrowd": 0, "bbox": [0, 7, 298, 401], "area": 69528}, {"id": 12426615, "category_id": 47, "iscrowd": 0, "bbox": [490, 277, 100, 123], "area": 8832}, {"id": 13216908, "category_id": 47, "iscrowd": 0, "bbox": [49, 304, 120, 155], "area": 14395}, {"id": 7184825, "category_id": 59, "iscrowd": 0, "bbox": [222, 386, 188, 60], "area": 7257}, {"id": 5678489, "category_id": 61, "iscrowd": 0, "bbox": [0, 159, 72, 53], "area": 2888}, {"id": 6725451, "category_id": 62, "iscrowd": 0, "bbox": [380, 263, 55, 108], "area": 655}, {"id": 6396464, "category_id": 62, "iscrowd": 0, "bbox": [380, 266, 44, 100], "area": 1065}, {"id": 5456797, "category_id": 67, "iscrowd": 0, "bbox": [0, 360, 637, 120], "area": 47763}, {"id": 3498765, "category_id": 112, "iscrowd": 0, "bbox": [614, 0, 26, 340], "area": 5962}, {"id": 3560768, "category_id": 181, "iscrowd": 0, "bbox": [82, 0, 367, 133], "area": 32308}, {"id": 2305923, "category_id": 189, "iscrowd": 0, "bbox": [0, 198, 640, 292], "area": 15825}, {"id": 10865623, "category_id": 195, "iscrowd": 0, "bbox": [202, 356, 78, 41], "area": 1505}, {"id": 5148545, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 625, 366], "area": 57655}], "file_name": "000000201426.png", "image_id": 201426}, {"segments_info": [{"id": 7569046, "category_id": 1, "iscrowd": 0, "bbox": [1, 1, 288, 426], "area": 87011}, {"id": 2698058, "category_id": 62, "iscrowd": 0, "bbox": [267, 323, 189, 98], "area": 14743}, {"id": 12370889, "category_id": 75, "iscrowd": 0, "bbox": [42, 318, 65, 47], "area": 1813}, {"id": 8095686, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 166991}], "file_name": "000000201646.png", "image_id": 201646}, {"segments_info": [{"id": 8301246, "category_id": 24, "iscrowd": 0, "bbox": [365, 115, 99, 73], "area": 3781}, {"id": 5599622, "category_id": 24, "iscrowd": 0, "bbox": [197, 127, 162, 285], "area": 6311}, {"id": 7051449, "category_id": 24, "iscrowd": 0, "bbox": [599, 129, 21, 58], "area": 597}, {"id": 9284801, "category_id": 24, "iscrowd": 0, "bbox": [605, 115, 33, 71], "area": 1178}, {"id": 6850975, "category_id": 24, "iscrowd": 0, "bbox": [219, 143, 96, 292], "area": 17503}, {"id": 9809595, "category_id": 24, "iscrowd": 0, "bbox": [515, 117, 88, 70], "area": 3250}, {"id": 5730948, "category_id": 24, "iscrowd": 0, "bbox": [304, 125, 173, 320], "area": 31357}, {"id": 3892593, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 182], "area": 71250}, {"id": 6269627, "category_id": 193, "iscrowd": 0, "bbox": [0, 73, 640, 407], "area": 170963}], "file_name": "000000201676.png", "image_id": 201676}, {"segments_info": [{"id": 9679562, "category_id": 70, "iscrowd": 0, "bbox": [350, 222, 93, 130], "area": 9722}, {"id": 9155014, "category_id": 70, "iscrowd": 0, "bbox": [235, 227, 77, 120], "area": 7168}, {"id": 14414840, "category_id": 81, "iscrowd": 0, "bbox": [1, 243, 144, 72], "area": 5514}, {"id": 4287368, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 78, 212], "area": 14201}, {"id": 4549511, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 500, 382], "area": 148046}, {"id": 1978433, "category_id": 190, "iscrowd": 0, "bbox": [163, 348, 104, 34], "area": 2326}], "file_name": "000000201775.png", "image_id": 201775}, {"segments_info": [{"id": 6116157, "category_id": 3, "iscrowd": 0, "bbox": [284, 159, 21, 26], "area": 237}, {"id": 10061677, "category_id": 3, "iscrowd": 0, "bbox": [307, 156, 14, 17], "area": 152}, {"id": 5850412, "category_id": 3, "iscrowd": 0, "bbox": [312, 155, 12, 12], "area": 54}, {"id": 5920066, "category_id": 3, "iscrowd": 0, "bbox": [263, 160, 34, 33], "area": 600}, {"id": 9271392, "category_id": 3, "iscrowd": 0, "bbox": [291, 156, 20, 22], "area": 154}, {"id": 9406049, "category_id": 6, "iscrowd": 0, "bbox": [1, 59, 262, 239], "area": 52418}, {"id": 2304287, "category_id": 95, "iscrowd": 0, "bbox": [0, 0, 326, 167], "area": 19129}, {"id": 5066551, "category_id": 149, "iscrowd": 0, "bbox": [0, 264, 185, 111], "area": 12039}, {"id": 8485967, "category_id": 185, "iscrowd": 0, "bbox": [391, 11, 109, 353], "area": 23659}, {"id": 12554053, "category_id": 187, "iscrowd": 0, "bbox": [174, 0, 326, 131], "area": 23864}, {"id": 10196595, "category_id": 191, "iscrowd": 0, "bbox": [97, 141, 403, 234], "area": 44655}], "file_name": "000000201934.png", "image_id": 201934}, {"segments_info": [{"id": 4076084, "category_id": 1, "iscrowd": 0, "bbox": [52, 51, 404, 405], "area": 95677}, {"id": 1055255, "category_id": 63, "iscrowd": 0, "bbox": [1, 285, 499, 176], "area": 28561}, {"id": 9665399, "category_id": 77, "iscrowd": 0, "bbox": [44, 229, 41, 47], "area": 783}, {"id": 11317937, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 315], "area": 100513}], "file_name": "000000202001.png", "image_id": 202001}, {"segments_info": [{"id": 2238005, "category_id": 1, "iscrowd": 0, "bbox": [129, 172, 183, 304], "area": 33108}, {"id": 9211788, "category_id": 133, "iscrowd": 0, "bbox": [34, 0, 326, 502], "area": 108712}, {"id": 6844531, "category_id": 195, "iscrowd": 0, "bbox": [87, 557, 43, 60], "area": 1936}, {"id": 9869721, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 149669}], "file_name": "000000202228.png", "image_id": 202228}, {"segments_info": [{"id": 1907489, "category_id": 1, "iscrowd": 0, "bbox": [103, 36, 173, 400], "area": 27414}, {"id": 2040100, "category_id": 1, "iscrowd": 0, "bbox": [459, 561, 21, 37], "area": 501}, {"id": 5329237, "category_id": 6, "iscrowd": 0, "bbox": [0, 0, 83, 328], "area": 19628}, {"id": 5987681, "category_id": 6, "iscrowd": 0, "bbox": [209, 71, 254, 225], "area": 39138}, {"id": 920898, "category_id": 31, "iscrowd": 0, "bbox": [74, 283, 59, 92], "area": 4038}, {"id": 7826808, "category_id": 32, "iscrowd": 0, "bbox": [150, 107, 12, 67], "area": 559}, {"id": 658187, "category_id": 33, "iscrowd": 0, "bbox": [406, 309, 74, 256], "area": 15372}, {"id": 9672083, "category_id": 149, "iscrowd": 0, "bbox": [0, 216, 480, 149], "area": 7898}, {"id": 9542296, "category_id": 186, "iscrowd": 0, "bbox": [350, 0, 130, 108], "area": 7244}, {"id": 16119286, "category_id": 187, "iscrowd": 0, "bbox": [16, 0, 436, 168], "area": 31219}, {"id": 4869463, "category_id": 191, "iscrowd": 0, "bbox": [0, 260, 480, 380], "area": 133422}, {"id": 7961245, "category_id": 195, "iscrowd": 0, "bbox": [171, 51, 100, 110], "area": 6261}, {"id": 12108223, "category_id": 197, "iscrowd": 0, "bbox": [343, 85, 137, 132], "area": 5608}], "file_name": "000000202339.png", "image_id": 202339}, {"segments_info": [{"id": 7182777, "category_id": 17, "iscrowd": 0, "bbox": [142, 265, 445, 267], "area": 47939}, {"id": 13028302, "category_id": 65, "iscrowd": 0, "bbox": [11, 159, 580, 438], "area": 155756}], "file_name": "000000202445.png", "image_id": 202445}, {"segments_info": [{"id": 4224969, "category_id": 53, "iscrowd": 0, "bbox": [503, 298, 84, 79], "area": 4987}, {"id": 2578261, "category_id": 56, "iscrowd": 0, "bbox": [299, 107, 106, 61], "area": 4691}, {"id": 1794753, "category_id": 57, "iscrowd": 0, "bbox": [425, 150, 66, 97], "area": 2736}, {"id": 2583240, "category_id": 57, "iscrowd": 0, "bbox": [402, 138, 42, 99], "area": 2552}, {"id": 3820124, "category_id": 79, "iscrowd": 0, "bbox": [0, 109, 116, 308], "area": 25827}, {"id": 10268099, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 200], "area": 71582}, {"id": 12437463, "category_id": 189, "iscrowd": 0, "bbox": [0, 102, 640, 378], "area": 67290}, {"id": 10005701, "category_id": 195, "iscrowd": 0, "bbox": [78, 94, 332, 166], "area": 22489}, {"id": 6191796, "category_id": 196, "iscrowd": 0, "bbox": [81, 113, 559, 315], "area": 82179}], "file_name": "000000203095.png", "image_id": 203095}, {"segments_info": [{"id": 3948108, "category_id": 1, "iscrowd": 0, "bbox": [65, 224, 22, 90], "area": 754}, {"id": 7427687, "category_id": 1, "iscrowd": 0, "bbox": [40, 209, 44, 124], "area": 2862}, {"id": 5853272, "category_id": 1, "iscrowd": 0, "bbox": [119, 221, 44, 94], "area": 2252}, {"id": 7565171, "category_id": 6, "iscrowd": 0, "bbox": [150, 110, 390, 233], "area": 73920}, {"id": 1972768, "category_id": 8, "iscrowd": 0, "bbox": [534, 212, 106, 126], "area": 11550}, {"id": 4607853, "category_id": 27, "iscrowd": 0, "bbox": [27, 239, 16, 29], "area": 289}, {"id": 6246256, "category_id": 31, "iscrowd": 0, "bbox": [26, 238, 18, 32], "area": 81}, {"id": 6383209, "category_id": 149, "iscrowd": 0, "bbox": [0, 251, 640, 229], "area": 106035}, {"id": 4084560, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 261], "area": 95311}, {"id": 16053489, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 531, 162], "area": 13707}], "file_name": "000000203294.png", "image_id": 203294}, {"segments_info": [{"id": 6249323, "category_id": 2, "iscrowd": 0, "bbox": [213, 211, 257, 204], "area": 20558}, {"id": 7500399, "category_id": 112, "iscrowd": 0, "bbox": [69, 101, 146, 278], "area": 36037}, {"id": 2896446, "category_id": 180, "iscrowd": 0, "bbox": [281, 134, 130, 167], "area": 17932}, {"id": 10324347, "category_id": 191, "iscrowd": 0, "bbox": [0, 370, 500, 53], "area": 14788}, {"id": 7044254, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 408], "area": 121926}], "file_name": "000000203317.png", "image_id": 203317}, {"segments_info": [{"id": 7831707, "category_id": 1, "iscrowd": 0, "bbox": [177, 205, 76, 111], "area": 3237}, {"id": 11317696, "category_id": 1, "iscrowd": 0, "bbox": [32, 235, 134, 183], "area": 4473}, {"id": 15395045, "category_id": 1, "iscrowd": 0, "bbox": [48, 344, 53, 49], "area": 1305}, {"id": 8420215, "category_id": 1, "iscrowd": 0, "bbox": [329, 150, 278, 259], "area": 17918}, {"id": 8353417, "category_id": 1, "iscrowd": 0, "bbox": [356, 250, 227, 230], "area": 31578}, {"id": 11634288, "category_id": 1, "iscrowd": 0, "bbox": [543, 183, 97, 297], "area": 16126}, {"id": 12434110, "category_id": 1, "iscrowd": 0, "bbox": [0, 229, 181, 243], "area": 18348}, {"id": 6712171, "category_id": 1, "iscrowd": 0, "bbox": [182, 199, 184, 281], "area": 17918}, {"id": 6776163, "category_id": 1, "iscrowd": 0, "bbox": [82, 257, 55, 83], "area": 1063}, {"id": 6579557, "category_id": 4, "iscrowd": 0, "bbox": [203, 331, 199, 149], "area": 15027}, {"id": 6974579, "category_id": 4, "iscrowd": 0, "bbox": [144, 319, 70, 131], "area": 2201}, {"id": 7432034, "category_id": 27, "iscrowd": 0, "bbox": [38, 298, 57, 77], "area": 1891}, {"id": 4539466, "category_id": 27, "iscrowd": 0, "bbox": [179, 246, 41, 28], "area": 299}, {"id": 4802630, "category_id": 27, "iscrowd": 0, "bbox": [228, 257, 86, 58], "area": 1258}, {"id": 7367007, "category_id": 27, "iscrowd": 0, "bbox": [409, 232, 117, 68], "area": 1517}, {"id": 9345682, "category_id": 148, "iscrowd": 0, "bbox": [106, 246, 516, 173], "area": 13743}, {"id": 6912871, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 284], "area": 110549}, {"id": 16514042, "category_id": 187, "iscrowd": 0, "bbox": [17, 0, 623, 133], "area": 35958}], "file_name": "000000203389.png", "image_id": 203389}, {"segments_info": [{"id": 5790299, "category_id": 14, "iscrowd": 0, "bbox": [421, 195, 81, 190], "area": 11074}, {"id": 2440808, "category_id": 15, "iscrowd": 0, "bbox": [473, 323, 167, 157], "area": 19454}, {"id": 1512722, "category_id": 112, "iscrowd": 0, "bbox": [0, 265, 42, 170], "area": 5939}, {"id": 1315601, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 216, 467], "area": 46862}, {"id": 5459518, "category_id": 181, "iscrowd": 0, "bbox": [0, 11, 218, 263], "area": 44169}, {"id": 9674143, "category_id": 184, "iscrowd": 0, "bbox": [235, 0, 194, 480], "area": 58554}, {"id": 5526605, "category_id": 191, "iscrowd": 0, "bbox": [0, 429, 282, 51], "area": 7092}, {"id": 12433111, "category_id": 195, "iscrowd": 0, "bbox": [253, 122, 87, 167], "area": 11279}, {"id": 2761563, "category_id": 199, "iscrowd": 0, "bbox": [214, 0, 426, 480], "area": 97433}], "file_name": "000000203488.png", "image_id": 203488}, {"segments_info": [{"id": 6513256, "category_id": 23, "iscrowd": 0, "bbox": [230, 66, 292, 250], "area": 57143}, {"id": 6383705, "category_id": 178, "iscrowd": 0, "bbox": [0, 8, 640, 449], "area": 204880}, {"id": 7764355, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 85], "area": 30269}], "file_name": "000000203546.png", "image_id": 203546}, {"segments_info": [{"id": 3026482, "category_id": 15, "iscrowd": 0, "bbox": [334, 219, 218, 107], "area": 7142}, {"id": 11835826, "category_id": 28, "iscrowd": 0, "bbox": [316, 56, 261, 85], "area": 13187}, {"id": 4012605, "category_id": 67, "iscrowd": 0, "bbox": [340, 227, 210, 41], "area": 4169}, {"id": 5538715, "category_id": 92, "iscrowd": 0, "bbox": [234, 14, 75, 57], "area": 2583}, {"id": 5130825, "category_id": 112, "iscrowd": 0, "bbox": [102, 84, 118, 237], "area": 20304}, {"id": 7768216, "category_id": 149, "iscrowd": 0, "bbox": [0, 376, 640, 51], "area": 24626}, {"id": 4604481, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 225, 224], "area": 4068}, {"id": 1188636, "category_id": 184, "iscrowd": 0, "bbox": [573, 0, 67, 37], "area": 2129}, {"id": 7371139, "category_id": 191, "iscrowd": 0, "bbox": [0, 289, 640, 109], "area": 49957}, {"id": 791565, "category_id": 193, "iscrowd": 0, "bbox": [338, 82, 302, 229], "area": 38057}, {"id": 7430761, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 325], "area": 101750}], "file_name": "000000203580.png", "image_id": 203580}, {"segments_info": [{"id": 989216, "category_id": 1, "iscrowd": 0, "bbox": [436, 159, 34, 55], "area": 750}, {"id": 1711649, "category_id": 1, "iscrowd": 0, "bbox": [155, 162, 60, 56], "area": 2201}, {"id": 397081, "category_id": 1, "iscrowd": 0, "bbox": [1, 184, 27, 57], "area": 778}, {"id": 1254465, "category_id": 1, "iscrowd": 0, "bbox": [419, 183, 50, 45], "area": 1274}, {"id": 131846, "category_id": 1, "iscrowd": 0, "bbox": [95, 155, 36, 71], "area": 982}, {"id": 197897, "category_id": 1, "iscrowd": 0, "bbox": [105, 162, 60, 151], "area": 6354}, {"id": 923422, "category_id": 1, "iscrowd": 0, "bbox": [460, 157, 43, 60], "area": 1649}, {"id": 725267, "category_id": 1, "iscrowd": 0, "bbox": [361, 154, 70, 122], "area": 5376}, {"id": 4480638, "category_id": 1, "iscrowd": 0, "bbox": [150, 135, 236, 283], "area": 39664}, {"id": 5198173, "category_id": 1, "iscrowd": 0, "bbox": [2, 145, 199, 276], "area": 34293}, {"id": 3229526, "category_id": 1, "iscrowd": 0, "bbox": [385, 173, 255, 254], "area": 40596}, {"id": 3424338, "category_id": 47, "iscrowd": 0, "bbox": [577, 345, 60, 74], "area": 3806}, {"id": 8236733, "category_id": 47, "iscrowd": 0, "bbox": [484, 358, 70, 60], "area": 3333}, {"id": 2368815, "category_id": 77, "iscrowd": 0, "bbox": [275, 196, 12, 19], "area": 155}, {"id": 14937067, "category_id": 130, "iscrowd": 0, "bbox": [123, 43, 337, 27], "area": 1823}, {"id": 10132901, "category_id": 181, "iscrowd": 0, "bbox": [0, 129, 640, 122], "area": 26825}, {"id": 3817545, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 101], "area": 60306}, {"id": 4943250, "category_id": 189, "iscrowd": 0, "bbox": [375, 271, 265, 156], "area": 2272}, {"id": 6648180, "category_id": 199, "iscrowd": 0, "bbox": [0, 95, 640, 48], "area": 23661}], "file_name": "000000203629.png", "image_id": 203629}, {"segments_info": [{"id": 7424356, "category_id": 1, "iscrowd": 0, "bbox": [81, 39, 242, 579], "area": 63137}, {"id": 920156, "category_id": 32, "iscrowd": 0, "bbox": [201, 152, 44, 87], "area": 1681}, {"id": 10986150, "category_id": 184, "iscrowd": 0, "bbox": [0, 52, 486, 91], "area": 22133}, {"id": 15724784, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 486, 103], "area": 36527}, {"id": 9686723, "category_id": 193, "iscrowd": 0, "bbox": [0, 128, 486, 272], "area": 73989}, {"id": 5725802, "category_id": 194, "iscrowd": 0, "bbox": [0, 323, 486, 317], "area": 112548}], "file_name": "000000203639.png", "image_id": 203639}, {"segments_info": [{"id": 8885411, "category_id": 1, "iscrowd": 0, "bbox": [252, 101, 181, 338], "area": 22192}, {"id": 4214101, "category_id": 1, "iscrowd": 0, "bbox": [109, 83, 108, 255], "area": 11370}, {"id": 5952982, "category_id": 37, "iscrowd": 0, "bbox": [113, 156, 12, 9], "area": 73}, {"id": 6122349, "category_id": 43, "iscrowd": 0, "bbox": [338, 273, 85, 54], "area": 2704}, {"id": 5337707, "category_id": 43, "iscrowd": 0, "bbox": [79, 163, 37, 36], "area": 736}, {"id": 6454643, "category_id": 138, "iscrowd": 0, "bbox": [0, 0, 640, 474], "area": 218053}, {"id": 6719093, "category_id": 145, "iscrowd": 0, "bbox": [0, 447, 640, 44], "area": 13676}, {"id": 3700581, "category_id": 193, "iscrowd": 0, "bbox": [0, 154, 640, 106], "area": 44789}], "file_name": "000000203864.png", "image_id": 203864}, {"segments_info": [{"id": 9009315, "category_id": 1, "iscrowd": 0, "bbox": [286, 134, 19, 27], "area": 151}, {"id": 5789052, "category_id": 1, "iscrowd": 0, "bbox": [175, 105, 26, 27], "area": 281}, {"id": 4141988, "category_id": 1, "iscrowd": 0, "bbox": [152, 30, 22, 23], "area": 206}, {"id": 5852826, "category_id": 1, "iscrowd": 0, "bbox": [134, 113, 28, 32], "area": 410}, {"id": 4341127, "category_id": 1, "iscrowd": 0, "bbox": [307, 211, 25, 41], "area": 520}, {"id": 4600379, "category_id": 1, "iscrowd": 0, "bbox": [18, 22, 41, 48], "area": 782}, {"id": 5195122, "category_id": 1, "iscrowd": 0, "bbox": [253, 367, 57, 69], "area": 2661}, {"id": 4932525, "category_id": 1, "iscrowd": 0, "bbox": [319, 236, 33, 47], "area": 635}, {"id": 6765128, "category_id": 1, "iscrowd": 0, "bbox": [72, 120, 31, 43], "area": 717}, {"id": 5785785, "category_id": 1, "iscrowd": 0, "bbox": [238, 100, 29, 32], "area": 323}, {"id": 8748451, "category_id": 1, "iscrowd": 0, "bbox": [115, 183, 190, 412], "area": 34449}, {"id": 5918822, "category_id": 1, "iscrowd": 0, "bbox": [91, 107, 31, 52], "area": 810}, {"id": 5655407, "category_id": 1, "iscrowd": 0, "bbox": [65, 65, 21, 35], "area": 388}, {"id": 5984631, "category_id": 1, "iscrowd": 1, "bbox": [0, 0, 428, 452], "area": 112823}, {"id": 3361905, "category_id": 15, "iscrowd": 0, "bbox": [1, 398, 159, 46], "area": 3172}, {"id": 10069182, "category_id": 39, "iscrowd": 0, "bbox": [200, 111, 82, 81], "area": 1493}, {"id": 11446965, "category_id": 40, "iscrowd": 0, "bbox": [172, 199, 31, 33], "area": 587}, {"id": 7116179, "category_id": 145, "iscrowd": 0, "bbox": [0, 423, 428, 217], "area": 74058}, {"id": 3092257, "category_id": 197, "iscrowd": 0, "bbox": [0, 269, 428, 189], "area": 30389}], "file_name": "000000203931.png", "image_id": 203931}, {"segments_info": [{"id": 6906982, "category_id": 1, "iscrowd": 0, "bbox": [39, 65, 42, 129], "area": 2068}, {"id": 5853860, "category_id": 1, "iscrowd": 0, "bbox": [83, 47, 62, 68], "area": 1422}, {"id": 5523781, "category_id": 1, "iscrowd": 0, "bbox": [158, 51, 196, 234], "area": 15250}, {"id": 7231062, "category_id": 1, "iscrowd": 0, "bbox": [477, 56, 23, 37], "area": 621}, {"id": 6182771, "category_id": 1, "iscrowd": 0, "bbox": [28, 51, 35, 58], "area": 873}, {"id": 7762812, "category_id": 1, "iscrowd": 0, "bbox": [147, 63, 37, 121], "area": 1504}, {"id": 5589315, "category_id": 1, "iscrowd": 0, "bbox": [521, 67, 41, 123], "area": 3004}, {"id": 5259571, "category_id": 1, "iscrowd": 0, "bbox": [271, 57, 116, 152], "area": 7184}, {"id": 6905695, "category_id": 1, "iscrowd": 0, "bbox": [351, 63, 41, 47], "area": 1131}, {"id": 7892834, "category_id": 1, "iscrowd": 0, "bbox": [101, 74, 50, 113], "area": 3464}, {"id": 4406326, "category_id": 1, "iscrowd": 0, "bbox": [513, 53, 21, 41], "area": 536}, {"id": 6842225, "category_id": 1, "iscrowd": 0, "bbox": [321, 71, 31, 22], "area": 283}, {"id": 6770239, "category_id": 1, "iscrowd": 0, "bbox": [458, 65, 27, 85], "area": 1000}, {"id": 6181974, "category_id": 1, "iscrowd": 1, "bbox": [0, 37, 640, 89], "area": 18201}, {"id": 6248266, "category_id": 4, "iscrowd": 0, "bbox": [338, 108, 173, 109], "area": 7107}, {"id": 4475209, "category_id": 4, "iscrowd": 0, "bbox": [123, 163, 434, 320], "area": 87224}, {"id": 9394709, "category_id": 27, "iscrowd": 0, "bbox": [592, 71, 7, 21], "area": 100}, {"id": 3745319, "category_id": 27, "iscrowd": 0, "bbox": [558, 82, 32, 20], "area": 88}, {"id": 8742732, "category_id": 31, "iscrowd": 0, "bbox": [136, 89, 18, 51], "area": 260}, {"id": 4666912, "category_id": 31, "iscrowd": 0, "bbox": [373, 90, 7, 6], "area": 29}, {"id": 3222562, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 104], "area": 34782}, {"id": 5983810, "category_id": 185, "iscrowd": 0, "bbox": [0, 91, 640, 114], "area": 24980}, {"id": 4499334, "category_id": 193, "iscrowd": 0, "bbox": [0, 181, 640, 332], "area": 112988}], "file_name": "000000204186.png", "image_id": 204186}, {"segments_info": [{"id": 5793164, "category_id": 1, "iscrowd": 0, "bbox": [29, 273, 5, 4], "area": 13}, {"id": 9204619, "category_id": 1, "iscrowd": 0, "bbox": [346, 239, 71, 6], "area": 17}, {"id": 5003638, "category_id": 1, "iscrowd": 0, "bbox": [17, 271, 37, 9], "area": 140}, {"id": 7308730, "category_id": 1, "iscrowd": 0, "bbox": [173, 273, 28, 17], "area": 222}, {"id": 6580607, "category_id": 1, "iscrowd": 0, "bbox": [354, 240, 5, 5], "area": 14}, {"id": 8818083, "category_id": 1, "iscrowd": 0, "bbox": [242, 245, 8, 27], "area": 132}, {"id": 7898017, "category_id": 1, "iscrowd": 0, "bbox": [6, 246, 3, 6], "area": 16}, {"id": 9412799, "category_id": 1, "iscrowd": 0, "bbox": [227, 278, 19, 14], "area": 119}, {"id": 4106096, "category_id": 42, "iscrowd": 0, "bbox": [58, 123, 114, 380], "area": 31794}, {"id": 15661306, "category_id": 154, "iscrowd": 0, "bbox": [0, 269, 425, 371], "area": 132438}, {"id": 13091757, "category_id": 155, "iscrowd": 0, "bbox": [0, 226, 425, 66], "area": 14385}, {"id": 12750945, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 425, 164], "area": 59272}, {"id": 8808245, "category_id": 192, "iscrowd": 0, "bbox": [0, 119, 425, 129], "area": 32729}], "file_name": "000000204329.png", "image_id": 204329}, {"segments_info": [{"id": 3154981, "category_id": 1, "iscrowd": 0, "bbox": [189, 104, 24, 86], "area": 1153}, {"id": 5063493, "category_id": 1, "iscrowd": 0, "bbox": [477, 132, 10, 13], "area": 81}, {"id": 2629667, "category_id": 1, "iscrowd": 0, "bbox": [176, 147, 10, 25], "area": 181}, {"id": 9670031, "category_id": 3, "iscrowd": 0, "bbox": [372, 112, 84, 81], "area": 3655}, {"id": 9075317, "category_id": 3, "iscrowd": 0, "bbox": [553, 118, 59, 67], "area": 3014}, {"id": 8945276, "category_id": 3, "iscrowd": 0, "bbox": [438, 129, 71, 55], "area": 2010}, {"id": 9931403, "category_id": 6, "iscrowd": 0, "bbox": [556, 93, 55, 40], "area": 1213}, {"id": 6247781, "category_id": 6, "iscrowd": 0, "bbox": [452, 97, 103, 75], "area": 4188}, {"id": 7963450, "category_id": 10, "iscrowd": 0, "bbox": [224, 10, 23, 29], "area": 580}, {"id": 6315879, "category_id": 10, "iscrowd": 0, "bbox": [254, 12, 16, 26], "area": 229}, {"id": 3880048, "category_id": 11, "iscrowd": 0, "bbox": [122, 47, 412, 555], "area": 114494}, {"id": 8947083, "category_id": 149, "iscrowd": 0, "bbox": [0, 134, 612, 259], "area": 52257}, {"id": 4738379, "category_id": 184, "iscrowd": 0, "bbox": [259, 0, 353, 151], "area": 30182}, {"id": 13817810, "category_id": 187, "iscrowd": 0, "bbox": [167, 0, 81, 117], "area": 6160}, {"id": 10003121, "category_id": 191, "iscrowd": 0, "bbox": [0, 149, 612, 463], "area": 109899}, {"id": 7828854, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 43143}], "file_name": "000000204871.png", "image_id": 204871}, {"segments_info": [{"id": 4542788, "category_id": 1, "iscrowd": 0, "bbox": [142, 128, 161, 300], "area": 16711}, {"id": 3110778, "category_id": 37, "iscrowd": 0, "bbox": [174, 309, 6, 6], "area": 28}, {"id": 3704966, "category_id": 37, "iscrowd": 0, "bbox": [627, 308, 9, 7], "area": 39}, {"id": 3049096, "category_id": 37, "iscrowd": 0, "bbox": [319, 308, 6, 6], "area": 30}, {"id": 3313037, "category_id": 37, "iscrowd": 0, "bbox": [283, 308, 5, 5], "area": 19}, {"id": 5284270, "category_id": 37, "iscrowd": 0, "bbox": [337, 272, 4, 5], "area": 15}, {"id": 2711133, "category_id": 37, "iscrowd": 0, "bbox": [616, 264, 3, 6], "area": 14}, {"id": 3765884, "category_id": 37, "iscrowd": 0, "bbox": [188, 311, 7, 7], "area": 40}, {"id": 7391422, "category_id": 37, "iscrowd": 0, "bbox": [329, 20, 11, 11], "area": 100}, {"id": 3378830, "category_id": 37, "iscrowd": 0, "bbox": [608, 259, 5, 5], "area": 20}, {"id": 6782607, "category_id": 37, "iscrowd": 0, "bbox": [443, 307, 5, 5], "area": 20}, {"id": 4683670, "category_id": 37, "iscrowd": 0, "bbox": [325, 273, 4, 5], "area": 12}, {"id": 3836302, "category_id": 37, "iscrowd": 0, "bbox": [280, 312, 7, 5], "area": 29}, {"id": 2438971, "category_id": 37, "iscrowd": 1, "bbox": [169, 20, 469, 303], "area": 1912}, {"id": 4869211, "category_id": 43, "iscrowd": 0, "bbox": [147, 107, 54, 84], "area": 2416}, {"id": 5461332, "category_id": 145, "iscrowd": 0, "bbox": [0, 302, 640, 126], "area": 62859}, {"id": 659729, "category_id": 184, "iscrowd": 0, "bbox": [85, 28, 326, 85], "area": 18469}, {"id": 1842462, "category_id": 185, "iscrowd": 0, "bbox": [0, 95, 640, 232], "area": 123149}, {"id": 131586, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 107], "area": 47656}], "file_name": "000000205105.png", "image_id": 205105}, {"segments_info": [{"id": 5200753, "category_id": 25, "iscrowd": 0, "bbox": [291, 36, 337, 443], "area": 48914}, {"id": 4476763, "category_id": 25, "iscrowd": 0, "bbox": [612, 295, 26, 54], "area": 578}, {"id": 4279393, "category_id": 25, "iscrowd": 0, "bbox": [102, 262, 99, 104], "area": 2934}, {"id": 3688788, "category_id": 25, "iscrowd": 0, "bbox": [12, 182, 255, 295], "area": 25742}, {"id": 4279900, "category_id": 25, "iscrowd": 0, "bbox": [224, 341, 167, 133], "area": 6760}, {"id": 15130846, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 284], "area": 126334}, {"id": 4215122, "category_id": 193, "iscrowd": 0, "bbox": [0, 163, 640, 317], "area": 95366}], "file_name": "000000205282.png", "image_id": 205282}, {"segments_info": [{"id": 7500402, "category_id": 1, "iscrowd": 0, "bbox": [265, 146, 50, 56], "area": 1301}, {"id": 4868682, "category_id": 8, "iscrowd": 0, "bbox": [147, 121, 338, 163], "area": 31915}, {"id": 11974326, "category_id": 128, "iscrowd": 0, "bbox": [0, 111, 640, 110], "area": 16716}, {"id": 7763574, "category_id": 184, "iscrowd": 0, "bbox": [0, 116, 640, 105], "area": 15613}, {"id": 14474460, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 144], "area": 81976}, {"id": 10921638, "category_id": 193, "iscrowd": 0, "bbox": [0, 204, 640, 247], "area": 137042}, {"id": 13948116, "category_id": 197, "iscrowd": 0, "bbox": [324, 132, 92, 33], "area": 2367}], "file_name": "000000205289.png", "image_id": 205289}, {"segments_info": [{"id": 4801095, "category_id": 1, "iscrowd": 0, "bbox": [52, 0, 137, 278], "area": 5227}, {"id": 5392457, "category_id": 1, "iscrowd": 0, "bbox": [3, 21, 242, 251], "area": 23814}, {"id": 14603215, "category_id": 34, "iscrowd": 0, "bbox": [305, 217, 59, 16], "area": 788}, {"id": 4670786, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 262], "area": 48123}, {"id": 10850434, "category_id": 187, "iscrowd": 0, "bbox": [163, 0, 477, 47], "area": 6371}, {"id": 6782853, "category_id": 193, "iscrowd": 0, "bbox": [0, 175, 640, 250], "area": 136289}], "file_name": "000000205324.png", "image_id": 205324}, {"segments_info": [{"id": 5387567, "category_id": 1, "iscrowd": 0, "bbox": [139, 82, 21, 58], "area": 749}, {"id": 5653820, "category_id": 1, "iscrowd": 0, "bbox": [79, 105, 11, 30], "area": 200}, {"id": 8085323, "category_id": 35, "iscrowd": 0, "bbox": [119, 140, 59, 6], "area": 58}, {"id": 11571052, "category_id": 159, "iscrowd": 0, "bbox": [0, 126, 230, 38], "area": 6580}, {"id": 12099717, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 164], "area": 85006}, {"id": 10850425, "category_id": 192, "iscrowd": 0, "bbox": [221, 63, 341, 101], "area": 11640}], "file_name": "000000205333.png", "image_id": 205333}, {"segments_info": [{"id": 3947580, "category_id": 1, "iscrowd": 0, "bbox": [415, 217, 25, 18], "area": 356}, {"id": 2697513, "category_id": 1, "iscrowd": 0, "bbox": [330, 237, 12, 25], "area": 219}, {"id": 10066329, "category_id": 5, "iscrowd": 0, "bbox": [106, 143, 436, 128], "area": 21530}, {"id": 4342338, "category_id": 9, "iscrowd": 0, "bbox": [370, 221, 86, 38], "area": 2163}, {"id": 5197647, "category_id": 154, "iscrowd": 0, "bbox": [0, 169, 640, 239], "area": 36997}, {"id": 10526880, "category_id": 155, "iscrowd": 0, "bbox": [0, 170, 640, 233], "area": 88650}, {"id": 3289650, "category_id": 184, "iscrowd": 0, "bbox": [0, 141, 87, 33], "area": 2327}, {"id": 16579836, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 158], "area": 88768}, {"id": 8882055, "category_id": 192, "iscrowd": 0, "bbox": [0, 102, 640, 83], "area": 19733}], "file_name": "000000205401.png", "image_id": 205401}, {"segments_info": [{"id": 7510170, "category_id": 62, "iscrowd": 0, "bbox": [468, 241, 111, 141], "area": 8971}, {"id": 7112067, "category_id": 62, "iscrowd": 0, "bbox": [541, 235, 91, 124], "area": 3900}, {"id": 9548986, "category_id": 62, "iscrowd": 0, "bbox": [153, 189, 80, 120], "area": 3662}, {"id": 9614009, "category_id": 62, "iscrowd": 0, "bbox": [5, 183, 108, 111], "area": 8473}, {"id": 13952223, "category_id": 63, "iscrowd": 0, "bbox": [347, 196, 148, 47], "area": 2830}, {"id": 9744563, "category_id": 63, "iscrowd": 0, "bbox": [369, 197, 164, 115], "area": 11256}, {"id": 9284015, "category_id": 63, "iscrowd": 0, "bbox": [167, 178, 167, 193], "area": 20627}, {"id": 6850949, "category_id": 64, "iscrowd": 0, "bbox": [83, 226, 23, 29], "area": 408}, {"id": 7179139, "category_id": 64, "iscrowd": 0, "bbox": [0, 122, 43, 177], "area": 2457}, {"id": 4016974, "category_id": 67, "iscrowd": 0, "bbox": [609, 235, 31, 32], "area": 780}, {"id": 14930829, "category_id": 72, "iscrowd": 0, "bbox": [218, 125, 61, 50], "area": 2933}, {"id": 2238501, "category_id": 84, "iscrowd": 0, "bbox": [133, 181, 13, 9], "area": 65}, {"id": 9407640, "category_id": 84, "iscrowd": 0, "bbox": [83, 69, 3, 27], "area": 78}, {"id": 8605511, "category_id": 84, "iscrowd": 0, "bbox": [145, 120, 4, 27], "area": 86}, {"id": 6268149, "category_id": 84, "iscrowd": 0, "bbox": [323, 144, 2, 13], "area": 25}, {"id": 12873836, "category_id": 84, "iscrowd": 0, "bbox": [98, 166, 6, 25], "area": 129}, {"id": 14738310, "category_id": 84, "iscrowd": 0, "bbox": [319, 111, 4, 14], "area": 45}, {"id": 16430485, "category_id": 84, "iscrowd": 0, "bbox": [314, 175, 2, 9], "area": 17}, {"id": 12567743, "category_id": 84, "iscrowd": 0, "bbox": [91, 164, 4, 24], "area": 78}, {"id": 6746858, "category_id": 84, "iscrowd": 0, "bbox": [325, 144, 3, 14], "area": 32}, {"id": 12501441, "category_id": 84, "iscrowd": 0, "bbox": [87, 164, 5, 26], "area": 100}, {"id": 9392713, "category_id": 84, "iscrowd": 0, "bbox": [81, 113, 36, 33], "area": 1064}, {"id": 8796218, "category_id": 86, "iscrowd": 0, "bbox": [107, 73, 16, 25], "area": 328}, {"id": 4480184, "category_id": 86, "iscrowd": 0, "bbox": [125, 124, 13, 22], "area": 238}, {"id": 14472893, "category_id": 109, "iscrowd": 0, "bbox": [354, 63, 260, 186], "area": 33405}, {"id": 12899786, "category_id": 133, "iscrowd": 0, "bbox": [0, 45, 321, 150], "area": 7894}, {"id": 12899028, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 612, 102], "area": 40364}, {"id": 11978171, "category_id": 188, "iscrowd": 0, "bbox": [69, 40, 301, 216], "area": 16192}, {"id": 4149074, "category_id": 189, "iscrowd": 0, "bbox": [51, 236, 87, 102], "area": 3379}, {"id": 8628657, "category_id": 190, "iscrowd": 0, "bbox": [0, 297, 610, 129], "area": 40624}, {"id": 10336179, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 341], "area": 32032}, {"id": 4879753, "category_id": 200, "iscrowd": 0, "bbox": [0, 252, 640, 174], "area": 26426}], "file_name": "000000205514.png", "image_id": 205514}, {"segments_info": [{"id": 6516623, "category_id": 88, "iscrowd": 0, "bbox": [206, 86, 160, 176], "area": 17160}, {"id": 5924715, "category_id": 190, "iscrowd": 0, "bbox": [0, 277, 480, 363], "area": 25705}, {"id": 8751756, "category_id": 199, "iscrowd": 0, "bbox": [0, 23, 197, 319], "area": 43728}], "file_name": "000000205542.png", "image_id": 205542}, {"segments_info": [{"id": 11841719, "category_id": 8, "iscrowd": 0, "bbox": [48, 207, 476, 113], "area": 40240}, {"id": 8355713, "category_id": 149, "iscrowd": 0, "bbox": [0, 287, 640, 58], "area": 14758}, {"id": 8622487, "category_id": 184, "iscrowd": 0, "bbox": [0, 328, 640, 99], "area": 51778}, {"id": 14923927, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 215], "area": 98613}, {"id": 9013394, "category_id": 192, "iscrowd": 0, "bbox": [0, 109, 640, 201], "area": 56512}, {"id": 10002083, "category_id": 194, "iscrowd": 0, "bbox": [0, 274, 640, 117], "area": 10986}], "file_name": "000000205647.png", "image_id": 205647}, {"segments_info": [{"id": 2901082, "category_id": 23, "iscrowd": 0, "bbox": [92, 28, 442, 241], "area": 57338}, {"id": 13555418, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 627, 200], "area": 44269}, {"id": 5926014, "category_id": 194, "iscrowd": 0, "bbox": [0, 306, 640, 119], "area": 42606}, {"id": 3360342, "category_id": 199, "iscrowd": 0, "bbox": [0, 192, 640, 163], "area": 28664}], "file_name": "000000205776.png", "image_id": 205776}, {"segments_info": [{"id": 5266555, "category_id": 18, "iscrowd": 0, "bbox": [129, 21, 411, 387], "area": 86103}, {"id": 10986664, "category_id": 51, "iscrowd": 0, "bbox": [144, 297, 227, 125], "area": 22133}, {"id": 5395544, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 146868}], "file_name": "000000205834.png", "image_id": 205834}, {"segments_info": [{"id": 5921123, "category_id": 1, "iscrowd": 0, "bbox": [4, 79, 420, 551], "area": 140161}, {"id": 8937559, "category_id": 32, "iscrowd": 0, "bbox": [167, 373, 85, 267], "area": 17270}, {"id": 4347222, "category_id": 184, "iscrowd": 0, "bbox": [50, 0, 374, 416], "area": 28413}, {"id": 14597806, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 424, 384], "area": 79039}], "file_name": "000000206025.png", "image_id": 206025}, {"segments_info": [{"id": 9339530, "category_id": 44, "iscrowd": 0, "bbox": [84, 1, 99, 238], "area": 20685}, {"id": 5725842, "category_id": 44, "iscrowd": 0, "bbox": [251, 1, 98, 213], "area": 18938}, {"id": 3088425, "category_id": 44, "iscrowd": 0, "bbox": [363, 1, 106, 239], "area": 18644}, {"id": 3686511, "category_id": 44, "iscrowd": 0, "bbox": [2, 2, 97, 280], "area": 24378}, {"id": 7634345, "category_id": 59, "iscrowd": 0, "bbox": [68, 260, 483, 192], "area": 54100}, {"id": 5260113, "category_id": 67, "iscrowd": 0, "bbox": [3, 161, 637, 315], "area": 56127}, {"id": 5588045, "category_id": 189, "iscrowd": 0, "bbox": [0, 91, 640, 389], "area": 17844}, {"id": 2894651, "category_id": 190, "iscrowd": 0, "bbox": [616, 461, 24, 19], "area": 358}, {"id": 14669010, "category_id": 195, "iscrowd": 0, "bbox": [40, 292, 581, 188], "area": 44526}, {"id": 1841980, "category_id": 196, "iscrowd": 0, "bbox": [0, 162, 3, 126], "area": 264}, {"id": 1838865, "category_id": 199, "iscrowd": 0, "bbox": [84, 0, 556, 255], "area": 45431}], "file_name": "000000206027.png", "image_id": 206027}, {"segments_info": [{"id": 4082525, "category_id": 21, "iscrowd": 0, "bbox": [172, 302, 62, 138], "area": 5226}, {"id": 3752788, "category_id": 21, "iscrowd": 0, "bbox": [117, 308, 58, 133], "area": 5434}, {"id": 5266538, "category_id": 21, "iscrowd": 0, "bbox": [232, 297, 69, 139], "area": 5734}, {"id": 5069160, "category_id": 21, "iscrowd": 0, "bbox": [40, 304, 79, 152], "area": 8006}, {"id": 10129285, "category_id": 85, "iscrowd": 0, "bbox": [140, 112, 22, 20], "area": 343}, {"id": 5004629, "category_id": 184, "iscrowd": 0, "bbox": [10, 0, 322, 340], "area": 9736}, {"id": 16448250, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 332, 314], "area": 63000}, {"id": 7898254, "category_id": 191, "iscrowd": 0, "bbox": [0, 337, 332, 163], "area": 35259}, {"id": 9340796, "category_id": 197, "iscrowd": 0, "bbox": [22, 0, 271, 339], "area": 30045}], "file_name": "000000206135.png", "image_id": 206135}, {"segments_info": [{"id": 13488335, "category_id": 73, "iscrowd": 0, "bbox": [360, 101, 268, 216], "area": 35064}, {"id": 8413527, "category_id": 76, "iscrowd": 0, "bbox": [394, 232, 174, 44], "area": 4809}, {"id": 1255228, "category_id": 100, "iscrowd": 0, "bbox": [0, 165, 162, 168], "area": 20340}, {"id": 3820373, "category_id": 190, "iscrowd": 0, "bbox": [0, 37, 640, 443], "area": 96458}], "file_name": "000000206218.png", "image_id": 206218}, {"segments_info": [{"id": 9612161, "category_id": 70, "iscrowd": 0, "bbox": [22, 301, 97, 138], "area": 9356}, {"id": 10402200, "category_id": 70, "iscrowd": 0, "bbox": [215, 294, 99, 136], "area": 9712}, {"id": 7117445, "category_id": 176, "iscrowd": 0, "bbox": [0, 264, 323, 327], "area": 62739}, {"id": 789000, "category_id": 190, "iscrowd": 0, "bbox": [0, 583, 323, 57], "area": 12297}, {"id": 11129808, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 323, 285], "area": 78453}], "file_name": "000000206271.png", "image_id": 206271}, {"segments_info": [{"id": 7502992, "category_id": 1, "iscrowd": 0, "bbox": [2, 194, 175, 182], "area": 18133}, {"id": 10922141, "category_id": 70, "iscrowd": 0, "bbox": [173, 1, 298, 359], "area": 76069}, {"id": 4147011, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 126353}, {"id": 5331029, "category_id": 190, "iscrowd": 0, "bbox": [136, 124, 419, 356], "area": 77810}], "file_name": "000000206411.png", "image_id": 206411}, {"segments_info": [{"id": 2768958, "category_id": 1, "iscrowd": 0, "bbox": [476, 198, 85, 157], "area": 6898}, {"id": 2242110, "category_id": 1, "iscrowd": 0, "bbox": [525, 204, 49, 166], "area": 1841}, {"id": 4149587, "category_id": 3, "iscrowd": 0, "bbox": [0, 210, 240, 270], "area": 51484}, {"id": 3033928, "category_id": 3, "iscrowd": 0, "bbox": [409, 280, 56, 40], "area": 1087}, {"id": 6124404, "category_id": 3, "iscrowd": 0, "bbox": [318, 311, 26, 10], "area": 190}, {"id": 1387049, "category_id": 4, "iscrowd": 0, "bbox": [484, 281, 73, 130], "area": 6118}, {"id": 5796210, "category_id": 6, "iscrowd": 0, "bbox": [1, 143, 449, 178], "area": 50254}, {"id": 2900808, "category_id": 8, "iscrowd": 0, "bbox": [553, 171, 87, 309], "area": 20865}, {"id": 7178636, "category_id": 128, "iscrowd": 0, "bbox": [0, 60, 494, 255], "area": 29726}, {"id": 5468787, "category_id": 149, "iscrowd": 0, "bbox": [150, 298, 490, 182], "area": 49378}, {"id": 4876644, "category_id": 184, "iscrowd": 0, "bbox": [433, 76, 207, 203], "area": 22010}, {"id": 15725041, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 145], "area": 60798}], "file_name": "000000206487.png", "image_id": 206487}, {"segments_info": [{"id": 2042174, "category_id": 1, "iscrowd": 0, "bbox": [473, 0, 148, 190], "area": 13613}, {"id": 2305340, "category_id": 1, "iscrowd": 0, "bbox": [101, 0, 78, 43], "area": 1678}, {"id": 1449515, "category_id": 1, "iscrowd": 0, "bbox": [1, 1, 433, 473], "area": 128972}, {"id": 7702956, "category_id": 47, "iscrowd": 0, "bbox": [552, 217, 64, 58], "area": 2797}, {"id": 7243701, "category_id": 61, "iscrowd": 0, "bbox": [396, 281, 190, 119], "area": 12714}, {"id": 3556454, "category_id": 62, "iscrowd": 0, "bbox": [374, 47, 178, 215], "area": 28581}, {"id": 11254483, "category_id": 67, "iscrowd": 0, "bbox": [281, 182, 359, 294], "area": 58138}, {"id": 4806264, "category_id": 84, "iscrowd": 0, "bbox": [608, 275, 32, 31], "area": 503}, {"id": 3225928, "category_id": 177, "iscrowd": 0, "bbox": [179, 0, 461, 331], "area": 25571}, {"id": 9938370, "category_id": 189, "iscrowd": 0, "bbox": [392, 473, 248, 7], "area": 1299}, {"id": 1451059, "category_id": 190, "iscrowd": 0, "bbox": [0, 311, 395, 169], "area": 18585}, {"id": 3291194, "category_id": 195, "iscrowd": 0, "bbox": [20, 0, 91, 58], "area": 4040}], "file_name": "000000206579.png", "image_id": 206579}, {"segments_info": [{"id": 3300969, "category_id": 18, "iscrowd": 0, "bbox": [19, 48, 621, 378], "area": 151654}, {"id": 5665137, "category_id": 177, "iscrowd": 0, "bbox": [182, 0, 458, 229], "area": 76238}, {"id": 2977886, "category_id": 193, "iscrowd": 0, "bbox": [0, 355, 640, 72], "area": 10386}], "file_name": "000000206831.png", "image_id": 206831}, {"segments_info": [{"id": 7109544, "category_id": 1, "iscrowd": 0, "bbox": [197, 92, 94, 243], "area": 10062}, {"id": 7569315, "category_id": 1, "iscrowd": 0, "bbox": [336, 95, 129, 277], "area": 14676}, {"id": 4410715, "category_id": 19, "iscrowd": 0, "bbox": [326, 168, 245, 273], "area": 33676}, {"id": 6579556, "category_id": 19, "iscrowd": 0, "bbox": [114, 138, 193, 225], "area": 21760}, {"id": 11517901, "category_id": 154, "iscrowd": 0, "bbox": [0, 183, 640, 71], "area": 11488}, {"id": 7966586, "category_id": 155, "iscrowd": 0, "bbox": [0, 235, 640, 245], "area": 98695}, {"id": 13674653, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 177], "area": 98373}, {"id": 5072227, "category_id": 192, "iscrowd": 0, "bbox": [0, 144, 640, 72], "area": 17090}], "file_name": "000000206838.png", "image_id": 206838}, {"segments_info": [{"id": 3694476, "category_id": 7, "iscrowd": 0, "bbox": [222, 194, 378, 135], "area": 41143}, {"id": 6439976, "category_id": 15, "iscrowd": 0, "bbox": [83, 278, 53, 30], "area": 1185}, {"id": 10068650, "category_id": 125, "iscrowd": 0, "bbox": [0, 296, 640, 131], "area": 52172}, {"id": 5265513, "category_id": 144, "iscrowd": 0, "bbox": [0, 304, 238, 52], "area": 7042}, {"id": 4148575, "category_id": 147, "iscrowd": 0, "bbox": [0, 275, 640, 152], "area": 15573}, {"id": 2305066, "category_id": 184, "iscrowd": 0, "bbox": [0, 12, 640, 273], "area": 100694}, {"id": 5595988, "category_id": 185, "iscrowd": 0, "bbox": [0, 269, 226, 51], "area": 2498}, {"id": 15386271, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 132], "area": 43252}, {"id": 5395011, "category_id": 197, "iscrowd": 0, "bbox": [27, 219, 148, 101], "area": 8889}], "file_name": "000000206994.png", "image_id": 206994}, {"segments_info": [{"id": 3616559, "category_id": 1, "iscrowd": 0, "bbox": [85, 177, 14, 31], "area": 266}, {"id": 10200231, "category_id": 88, "iscrowd": 0, "bbox": [46, 148, 222, 206], "area": 29540}, {"id": 4802373, "category_id": 149, "iscrowd": 0, "bbox": [0, 209, 375, 291], "area": 40131}, {"id": 11308911, "category_id": 187, "iscrowd": 0, "bbox": [79, 0, 197, 169], "area": 13205}, {"id": 5396312, "category_id": 191, "iscrowd": 0, "bbox": [0, 182, 312, 318], "area": 29876}, {"id": 9802385, "category_id": 195, "iscrowd": 0, "bbox": [120, 54, 52, 117], "area": 4067}, {"id": 3685443, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 375, 226], "area": 52213}], "file_name": "000000207306.png", "image_id": 207306}, {"segments_info": [{"id": 7695984, "category_id": 78, "iscrowd": 0, "bbox": [103, 153, 308, 189], "area": 52179}, {"id": 9545372, "category_id": 176, "iscrowd": 0, "bbox": [0, 281, 500, 94], "area": 26336}, {"id": 1251086, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 310, 34], "area": 4904}, {"id": 3230050, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 500, 340], "area": 102706}], "file_name": "000000207538.png", "image_id": 207538}, {"segments_info": [{"id": 5395072, "category_id": 32, "iscrowd": 0, "bbox": [130, 232, 70, 62], "area": 2367}, {"id": 6716829, "category_id": 32, "iscrowd": 0, "bbox": [341, 137, 78, 59], "area": 2991}, {"id": 9675958, "category_id": 88, "iscrowd": 0, "bbox": [233, 43, 293, 400], "area": 38392}, {"id": 8821424, "category_id": 88, "iscrowd": 0, "bbox": [180, 71, 214, 380], "area": 44820}, {"id": 9082796, "category_id": 88, "iscrowd": 0, "bbox": [432, 111, 171, 213], "area": 20778}, {"id": 5658724, "category_id": 88, "iscrowd": 0, "bbox": [58, 151, 200, 281], "area": 31201}, {"id": 6445122, "category_id": 148, "iscrowd": 0, "bbox": [0, 298, 61, 28], "area": 1067}, {"id": 4342080, "category_id": 175, "iscrowd": 0, "bbox": [0, 217, 640, 263], "area": 66144}, {"id": 2636325, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 170], "area": 55454}, {"id": 15322536, "category_id": 187, "iscrowd": 0, "bbox": [110, 0, 432, 76], "area": 21223}, {"id": 3693650, "category_id": 193, "iscrowd": 0, "bbox": [0, 134, 640, 194], "area": 18624}], "file_name": "000000207585.png", "image_id": 207585}, {"segments_info": [{"id": 7113379, "category_id": 20, "iscrowd": 0, "bbox": [86, 191, 331, 178], "area": 30193}, {"id": 8428208, "category_id": 20, "iscrowd": 0, "bbox": [137, 55, 337, 317], "area": 39160}, {"id": 14340815, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 373], "area": 86585}, {"id": 7963273, "category_id": 184, "iscrowd": 0, "bbox": [493, 0, 147, 343], "area": 23438}, {"id": 2897222, "category_id": 198, "iscrowd": 0, "bbox": [0, 203, 640, 170], "area": 47908}], "file_name": "000000207728.png", "image_id": 207728}, {"segments_info": [{"id": 4476004, "category_id": 1, "iscrowd": 0, "bbox": [343, 250, 24, 26], "area": 397}, {"id": 1909315, "category_id": 1, "iscrowd": 0, "bbox": [510, 303, 86, 49], "area": 2479}, {"id": 4342090, "category_id": 1, "iscrowd": 0, "bbox": [299, 236, 11, 34], "area": 205}, {"id": 4804962, "category_id": 1, "iscrowd": 0, "bbox": [421, 253, 18, 20], "area": 174}, {"id": 3818584, "category_id": 1, "iscrowd": 0, "bbox": [366, 247, 36, 35], "area": 718}, {"id": 4148839, "category_id": 1, "iscrowd": 0, "bbox": [210, 238, 10, 14], "area": 95}, {"id": 7234915, "category_id": 1, "iscrowd": 0, "bbox": [337, 226, 20, 44], "area": 472}, {"id": 2896462, "category_id": 1, "iscrowd": 0, "bbox": [361, 222, 15, 47], "area": 328}, {"id": 1252424, "category_id": 1, "iscrowd": 0, "bbox": [95, 328, 76, 81], "area": 1706}, {"id": 3685453, "category_id": 1, "iscrowd": 0, "bbox": [223, 230, 14, 19], "area": 186}, {"id": 6183508, "category_id": 1, "iscrowd": 0, "bbox": [235, 245, 8, 8], "area": 39}, {"id": 4537147, "category_id": 1, "iscrowd": 0, "bbox": [631, 267, 9, 18], "area": 115}, {"id": 6181441, "category_id": 1, "iscrowd": 0, "bbox": [541, 255, 4, 6], "area": 16}, {"id": 5394775, "category_id": 1, "iscrowd": 1, "bbox": [36, 227, 591, 181], "area": 9820}, {"id": 12633303, "category_id": 28, "iscrowd": 0, "bbox": [0, 169, 253, 159], "area": 13017}, {"id": 12435666, "category_id": 28, "iscrowd": 0, "bbox": [1, 181, 25, 28], "area": 374}, {"id": 9410745, "category_id": 28, "iscrowd": 0, "bbox": [411, 150, 229, 106], "area": 16778}, {"id": 10265279, "category_id": 28, "iscrowd": 0, "bbox": [371, 202, 62, 28], "area": 750}, {"id": 12699094, "category_id": 28, "iscrowd": 0, "bbox": [238, 195, 126, 72], "area": 2875}, {"id": 15592428, "category_id": 28, "iscrowd": 0, "bbox": [213, 196, 32, 18], "area": 233}, {"id": 4213099, "category_id": 47, "iscrowd": 0, "bbox": [208, 398, 13, 20], "area": 212}, {"id": 2635095, "category_id": 62, "iscrowd": 0, "bbox": [269, 268, 53, 69], "area": 2028}, {"id": 6778761, "category_id": 62, "iscrowd": 0, "bbox": [94, 251, 74, 57], "area": 1440}, {"id": 2371152, "category_id": 62, "iscrowd": 0, "bbox": [211, 264, 73, 62], "area": 1901}, {"id": 2501714, "category_id": 62, "iscrowd": 0, "bbox": [0, 242, 34, 49], "area": 857}, {"id": 6451079, "category_id": 62, "iscrowd": 0, "bbox": [139, 401, 264, 72], "area": 7464}, {"id": 2042699, "category_id": 62, "iscrowd": 0, "bbox": [42, 247, 37, 56], "area": 1311}, {"id": 1449536, "category_id": 62, "iscrowd": 0, "bbox": [16, 246, 37, 52], "area": 958}, {"id": 2963801, "category_id": 62, "iscrowd": 0, "bbox": [70, 249, 37, 57], "area": 1453}, {"id": 1580611, "category_id": 62, "iscrowd": 0, "bbox": [46, 332, 110, 147], "area": 9768}, {"id": 4477550, "category_id": 62, "iscrowd": 0, "bbox": [309, 271, 107, 71], "area": 3250}, {"id": 3161182, "category_id": 62, "iscrowd": 0, "bbox": [177, 259, 45, 61], "area": 1612}, {"id": 3423064, "category_id": 62, "iscrowd": 0, "bbox": [422, 302, 48, 54], "area": 1652}, {"id": 3491432, "category_id": 84, "iscrowd": 0, "bbox": [130, 363, 41, 31], "area": 703}, {"id": 7308692, "category_id": 154, "iscrowd": 0, "bbox": [0, 254, 640, 226], "area": 74370}, {"id": 9006416, "category_id": 155, "iscrowd": 0, "bbox": [149, 215, 491, 88], "area": 7917}, {"id": 7370891, "category_id": 168, "iscrowd": 0, "bbox": [0, 254, 595, 213], "area": 8991}, {"id": 11496274, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 195], "area": 96702}, {"id": 10921642, "category_id": 189, "iscrowd": 0, "bbox": [219, 410, 32, 19], "area": 259}, {"id": 3420214, "category_id": 192, "iscrowd": 0, "bbox": [230, 142, 205, 89], "area": 8557}, {"id": 2630442, "category_id": 197, "iscrowd": 0, "bbox": [0, 94, 239, 107], "area": 12031}], "file_name": "000000207844.png", "image_id": 207844}, {"segments_info": [{"id": 11447972, "category_id": 5, "iscrowd": 0, "bbox": [269, 1, 371, 240], "area": 39390}, {"id": 7304313, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 261323}], "file_name": "000000208208.png", "image_id": 208208}, {"segments_info": [{"id": 5396044, "category_id": 1, "iscrowd": 0, "bbox": [111, 81, 68, 134], "area": 5769}, {"id": 3882309, "category_id": 1, "iscrowd": 0, "bbox": [325, 27, 67, 89], "area": 3496}, {"id": 5527142, "category_id": 1, "iscrowd": 0, "bbox": [409, 136, 197, 326], "area": 19820}, {"id": 8545362, "category_id": 1, "iscrowd": 0, "bbox": [529, 111, 87, 109], "area": 5173}, {"id": 4408159, "category_id": 1, "iscrowd": 0, "bbox": [196, 74, 81, 129], "area": 5169}, {"id": 3224379, "category_id": 1, "iscrowd": 0, "bbox": [1, 214, 200, 261], "area": 36219}, {"id": 7496023, "category_id": 1, "iscrowd": 0, "bbox": [206, 124, 180, 355], "area": 32211}, {"id": 8483685, "category_id": 1, "iscrowd": 0, "bbox": [363, 89, 69, 99], "area": 2803}, {"id": 7241582, "category_id": 1, "iscrowd": 0, "bbox": [443, 222, 197, 253], "area": 22520}, {"id": 5131331, "category_id": 1, "iscrowd": 0, "bbox": [395, 96, 89, 161], "area": 7269}, {"id": 7107731, "category_id": 1, "iscrowd": 0, "bbox": [302, 85, 43, 43], "area": 1076}, {"id": 9014936, "category_id": 1, "iscrowd": 0, "bbox": [1, 71, 64, 98], "area": 1914}, {"id": 4275783, "category_id": 1, "iscrowd": 0, "bbox": [2, 102, 84, 145], "area": 7949}, {"id": 6116692, "category_id": 1, "iscrowd": 1, "bbox": [0, 114, 434, 366], "area": 9871}, {"id": 9812192, "category_id": 59, "iscrowd": 0, "bbox": [441, 352, 56, 36], "area": 1288}, {"id": 8830935, "category_id": 59, "iscrowd": 0, "bbox": [305, 199, 32, 34], "area": 524}, {"id": 10071499, "category_id": 59, "iscrowd": 0, "bbox": [466, 209, 44, 24], "area": 626}, {"id": 9023178, "category_id": 59, "iscrowd": 0, "bbox": [69, 171, 197, 276], "area": 404}, {"id": 5538768, "category_id": 59, "iscrowd": 0, "bbox": [495, 467, 48, 13], "area": 271}, {"id": 7384034, "category_id": 59, "iscrowd": 0, "bbox": [232, 130, 16, 6], "area": 56}, {"id": 6989013, "category_id": 59, "iscrowd": 0, "bbox": [473, 406, 24, 10], "area": 141}, {"id": 5593945, "category_id": 62, "iscrowd": 0, "bbox": [215, 302, 161, 178], "area": 7085}, {"id": 2828581, "category_id": 62, "iscrowd": 0, "bbox": [233, 192, 13, 104], "area": 241}, {"id": 2894632, "category_id": 62, "iscrowd": 0, "bbox": [188, 182, 51, 114], "area": 908}, {"id": 2565154, "category_id": 62, "iscrowd": 0, "bbox": [238, 196, 10, 77], "area": 267}, {"id": 5266006, "category_id": 62, "iscrowd": 0, "bbox": [576, 360, 20, 45], "area": 737}, {"id": 3355956, "category_id": 62, "iscrowd": 0, "bbox": [184, 178, 45, 86], "area": 1421}, {"id": 3881010, "category_id": 62, "iscrowd": 0, "bbox": [374, 213, 58, 135], "area": 2060}, {"id": 2170653, "category_id": 62, "iscrowd": 0, "bbox": [188, 201, 65, 89], "area": 976}, {"id": 3223084, "category_id": 62, "iscrowd": 0, "bbox": [194, 219, 61, 84], "area": 394}, {"id": 3750200, "category_id": 62, "iscrowd": 0, "bbox": [169, 188, 73, 199], "area": 664}, {"id": 5136228, "category_id": 62, "iscrowd": 0, "bbox": [417, 253, 49, 84], "area": 2326}, {"id": 2039067, "category_id": 62, "iscrowd": 0, "bbox": [143, 189, 17, 11], "area": 150}, {"id": 7042425, "category_id": 62, "iscrowd": 1, "bbox": [8, 245, 395, 152], "area": 3371}, {"id": 8693694, "category_id": 100, "iscrowd": 0, "bbox": [0, 158, 564, 322], "area": 20501}, {"id": 13817300, "category_id": 109, "iscrowd": 0, "bbox": [335, 0, 72, 94], "area": 3857}, {"id": 5278124, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 118, 196], "area": 14265}, {"id": 6392221, "category_id": 177, "iscrowd": 0, "bbox": [107, 0, 80, 148], "area": 8234}, {"id": 9878749, "category_id": 196, "iscrowd": 0, "bbox": [487, 454, 61, 26], "area": 790}, {"id": 12963522, "category_id": 199, "iscrowd": 0, "bbox": [177, 0, 463, 202], "area": 48981}, {"id": 7965065, "category_id": 200, "iscrowd": 0, "bbox": [100, 181, 540, 299], "area": 10267}], "file_name": "000000208363.png", "image_id": 208363}, {"segments_info": [{"id": 9540757, "category_id": 1, "iscrowd": 0, "bbox": [416, 432, 9, 21], "area": 112}, {"id": 10790566, "category_id": 1, "iscrowd": 0, "bbox": [493, 420, 9, 16], "area": 98}, {"id": 6970447, "category_id": 3, "iscrowd": 0, "bbox": [350, 451, 110, 29], "area": 2266}, {"id": 4931957, "category_id": 3, "iscrowd": 0, "bbox": [330, 421, 57, 38], "area": 1590}, {"id": 4341566, "category_id": 3, "iscrowd": 0, "bbox": [186, 431, 94, 49], "area": 3323}, {"id": 6840412, "category_id": 3, "iscrowd": 0, "bbox": [269, 427, 77, 42], "area": 2131}, {"id": 4143413, "category_id": 3, "iscrowd": 0, "bbox": [66, 438, 126, 42], "area": 4007}, {"id": 4074271, "category_id": 3, "iscrowd": 0, "bbox": [522, 469, 112, 11], "area": 897}, {"id": 11834484, "category_id": 38, "iscrowd": 0, "bbox": [285, 265, 6, 7], "area": 12}, {"id": 9926247, "category_id": 38, "iscrowd": 0, "bbox": [389, 115, 7, 4], "area": 13}, {"id": 8091002, "category_id": 38, "iscrowd": 0, "bbox": [341, 235, 13, 10], "area": 87}, {"id": 11633763, "category_id": 38, "iscrowd": 0, "bbox": [273, 127, 6, 7], "area": 26}, {"id": 8411201, "category_id": 38, "iscrowd": 0, "bbox": [298, 49, 33, 41], "area": 131}, {"id": 11634797, "category_id": 38, "iscrowd": 0, "bbox": [232, 155, 16, 15], "area": 83}, {"id": 10781295, "category_id": 38, "iscrowd": 0, "bbox": [424, 272, 4, 2], "area": 7}, {"id": 11377033, "category_id": 38, "iscrowd": 0, "bbox": [493, 321, 30, 28], "area": 229}, {"id": 10253663, "category_id": 38, "iscrowd": 0, "bbox": [460, 98, 25, 20], "area": 104}, {"id": 11572088, "category_id": 38, "iscrowd": 0, "bbox": [430, 339, 2, 2], "area": 3}, {"id": 10648927, "category_id": 38, "iscrowd": 0, "bbox": [568, 213, 19, 10], "area": 34}, {"id": 13345922, "category_id": 38, "iscrowd": 1, "bbox": [139, 240, 301, 106], "area": 1819}, {"id": 3159866, "category_id": 95, "iscrowd": 0, "bbox": [0, 393, 253, 37], "area": 3484}, {"id": 5461851, "category_id": 149, "iscrowd": 0, "bbox": [177, 446, 198, 34], "area": 2083}, {"id": 11910851, "category_id": 151, "iscrowd": 0, "bbox": [0, 420, 167, 32], "area": 2778}, {"id": 6516339, "category_id": 184, "iscrowd": 0, "bbox": [122, 363, 293, 84], "area": 8531}, {"id": 8159362, "category_id": 185, "iscrowd": 0, "bbox": [412, 388, 228, 92], "area": 8241}, {"id": 12423275, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 394], "area": 232590}, {"id": 9076602, "category_id": 192, "iscrowd": 0, "bbox": [54, 367, 586, 76], "area": 12514}, {"id": 5001298, "category_id": 197, "iscrowd": 0, "bbox": [231, 425, 20, 9], "area": 87}], "file_name": "000000208423.png", "image_id": 208423}, {"segments_info": [{"id": 4276288, "category_id": 5, "iscrowd": 0, "bbox": [233, 148, 193, 136], "area": 7089}, {"id": 10853784, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 265975}], "file_name": "000000208901.png", "image_id": 208901}, {"segments_info": [{"id": 9414558, "category_id": 48, "iscrowd": 0, "bbox": [93, 134, 172, 291], "area": 14337}, {"id": 9679537, "category_id": 49, "iscrowd": 0, "bbox": [219, 11, 421, 239], "area": 23430}, {"id": 8626066, "category_id": 51, "iscrowd": 0, "bbox": [0, 0, 639, 425], "area": 180084}, {"id": 4886399, "category_id": 56, "iscrowd": 0, "bbox": [223, 58, 135, 137], "area": 13597}, {"id": 5414032, "category_id": 56, "iscrowd": 0, "bbox": [474, 294, 80, 80], "area": 3793}, {"id": 6123110, "category_id": 56, "iscrowd": 0, "bbox": [234, 342, 54, 57], "area": 1849}, {"id": 4555888, "category_id": 56, "iscrowd": 0, "bbox": [181, 255, 133, 88], "area": 7288}, {"id": 4618595, "category_id": 56, "iscrowd": 0, "bbox": [87, 112, 51, 60], "area": 1651}, {"id": 3826004, "category_id": 56, "iscrowd": 0, "bbox": [186, 134, 119, 123], "area": 4310}, {"id": 4820100, "category_id": 56, "iscrowd": 0, "bbox": [150, 85, 58, 62], "area": 1617}, {"id": 4952967, "category_id": 56, "iscrowd": 0, "bbox": [347, 114, 62, 77], "area": 3684}, {"id": 4160360, "category_id": 56, "iscrowd": 0, "bbox": [488, 69, 37, 38], "area": 652}, {"id": 3371954, "category_id": 57, "iscrowd": 0, "bbox": [348, 219, 18, 22], "area": 213}, {"id": 11975098, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 14951}], "file_name": "000000209142.png", "image_id": 209142}, {"segments_info": [{"id": 5263440, "category_id": 1, "iscrowd": 0, "bbox": [453, 119, 8, 14], "area": 62}, {"id": 6447714, "category_id": 1, "iscrowd": 0, "bbox": [411, 198, 150, 179], "area": 5694}, {"id": 2697513, "category_id": 1, "iscrowd": 0, "bbox": [459, 119, 42, 46], "area": 714}, {"id": 4605510, "category_id": 1, "iscrowd": 0, "bbox": [200, 122, 35, 48], "area": 582}, {"id": 3092271, "category_id": 1, "iscrowd": 0, "bbox": [432, 120, 17, 32], "area": 271}, {"id": 6316128, "category_id": 1, "iscrowd": 0, "bbox": [273, 113, 9, 19], "area": 117}, {"id": 2697512, "category_id": 1, "iscrowd": 0, "bbox": [227, 121, 12, 45], "area": 302}, {"id": 9013641, "category_id": 1, "iscrowd": 0, "bbox": [485, 124, 27, 47], "area": 550}, {"id": 2829099, "category_id": 1, "iscrowd": 0, "bbox": [322, 124, 20, 23], "area": 197}, {"id": 6974058, "category_id": 1, "iscrowd": 0, "bbox": [107, 106, 46, 87], "area": 1047}, {"id": 7105644, "category_id": 1, "iscrowd": 0, "bbox": [404, 105, 13, 39], "area": 262}, {"id": 986895, "category_id": 1, "iscrowd": 0, "bbox": [223, 119, 8, 14], "area": 81}, {"id": 723723, "category_id": 1, "iscrowd": 0, "bbox": [459, 119, 9, 12], "area": 66}, {"id": 2697516, "category_id": 1, "iscrowd": 1, "bbox": [164, 95, 321, 91], "area": 3457}, {"id": 5066061, "category_id": 3, "iscrowd": 0, "bbox": [385, 107, 24, 25], "area": 411}, {"id": 6579300, "category_id": 8, "iscrowd": 0, "bbox": [292, 102, 55, 21], "area": 795}, {"id": 2565927, "category_id": 15, "iscrowd": 0, "bbox": [470, 255, 125, 137], "area": 9242}, {"id": 3026478, "category_id": 31, "iscrowd": 0, "bbox": [120, 126, 16, 33], "area": 187}, {"id": 2039583, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 340], "area": 78857}, {"id": 4342338, "category_id": 185, "iscrowd": 0, "bbox": [0, 100, 627, 90], "area": 4114}, {"id": 6118749, "category_id": 191, "iscrowd": 0, "bbox": [0, 116, 640, 311], "area": 141201}, {"id": 1118481, "category_id": 194, "iscrowd": 0, "bbox": [570, 265, 70, 162], "area": 5558}, {"id": 2697508, "category_id": 197, "iscrowd": 0, "bbox": [173, 0, 336, 140], "area": 10335}, {"id": 6250335, "category_id": 199, "iscrowd": 0, "bbox": [0, 117, 640, 170], "area": 3894}], "file_name": "000000209222.png", "image_id": 209222}, {"segments_info": [{"id": 3690092, "category_id": 1, "iscrowd": 0, "bbox": [258, 161, 76, 74], "area": 1689}, {"id": 1579822, "category_id": 1, "iscrowd": 0, "bbox": [412, 82, 213, 314], "area": 34921}, {"id": 1318706, "category_id": 1, "iscrowd": 0, "bbox": [97, 131, 167, 225], "area": 20666}, {"id": 1317929, "category_id": 1, "iscrowd": 0, "bbox": [184, 152, 53, 102], "area": 3406}, {"id": 1909299, "category_id": 1, "iscrowd": 0, "bbox": [0, 2, 169, 426], "area": 49262}, {"id": 1911099, "category_id": 1, "iscrowd": 0, "bbox": [303, 165, 64, 80], "area": 2856}, {"id": 2306373, "category_id": 1, "iscrowd": 0, "bbox": [345, 133, 98, 182], "area": 8896}, {"id": 1379875, "category_id": 44, "iscrowd": 0, "bbox": [381, 303, 66, 124], "area": 1944}, {"id": 1779247, "category_id": 44, "iscrowd": 0, "bbox": [431, 217, 25, 79], "area": 1307}, {"id": 854545, "category_id": 44, "iscrowd": 0, "bbox": [289, 279, 22, 32], "area": 546}, {"id": 2435641, "category_id": 46, "iscrowd": 0, "bbox": [288, 366, 82, 62], "area": 4273}, {"id": 2500920, "category_id": 46, "iscrowd": 0, "bbox": [300, 299, 56, 92], "area": 3297}, {"id": 1908278, "category_id": 47, "iscrowd": 0, "bbox": [373, 343, 73, 85], "area": 4670}, {"id": 4482445, "category_id": 47, "iscrowd": 0, "bbox": [285, 231, 8, 12], "area": 87}, {"id": 2171956, "category_id": 49, "iscrowd": 0, "bbox": [193, 369, 94, 58], "area": 1153}, {"id": 2106936, "category_id": 49, "iscrowd": 0, "bbox": [224, 302, 12, 3], "area": 32}, {"id": 2958897, "category_id": 49, "iscrowd": 0, "bbox": [351, 333, 45, 8], "area": 158}, {"id": 2444663, "category_id": 59, "iscrowd": 0, "bbox": [212, 242, 172, 28], "area": 2783}, {"id": 2181504, "category_id": 59, "iscrowd": 0, "bbox": [249, 189, 26, 14], "area": 156}, {"id": 1654633, "category_id": 59, "iscrowd": 0, "bbox": [219, 212, 33, 15], "area": 209}, {"id": 1588075, "category_id": 59, "iscrowd": 0, "bbox": [181, 349, 65, 50], "area": 1860}, {"id": 2111561, "category_id": 72, "iscrowd": 0, "bbox": [153, 42, 53, 43], "area": 2125}, {"id": 10148584, "category_id": 130, "iscrowd": 0, "bbox": [136, 0, 41, 27], "area": 760}, {"id": 3031386, "category_id": 186, "iscrowd": 0, "bbox": [50, 0, 255, 80], "area": 10408}, {"id": 2238264, "category_id": 189, "iscrowd": 0, "bbox": [153, 276, 432, 152], "area": 17267}, {"id": 2372437, "category_id": 199, "iscrowd": 0, "bbox": [89, 0, 551, 428], "area": 80475}], "file_name": "000000209530.png", "image_id": 209530}, {"segments_info": [{"id": 3683638, "category_id": 18, "iscrowd": 0, "bbox": [169, 183, 32, 30], "area": 554}, {"id": 5196619, "category_id": 18, "iscrowd": 0, "bbox": [131, 182, 31, 35], "area": 633}, {"id": 2170656, "category_id": 18, "iscrowd": 0, "bbox": [556, 233, 50, 47], "area": 1363}, {"id": 6317419, "category_id": 20, "iscrowd": 0, "bbox": [180, 247, 94, 61], "area": 1016}, {"id": 5791073, "category_id": 20, "iscrowd": 0, "bbox": [108, 247, 93, 96], "area": 3848}, {"id": 5659745, "category_id": 20, "iscrowd": 0, "bbox": [49, 274, 71, 103], "area": 4515}, {"id": 7304570, "category_id": 20, "iscrowd": 0, "bbox": [218, 244, 102, 84], "area": 3490}, {"id": 7041399, "category_id": 20, "iscrowd": 0, "bbox": [301, 234, 119, 103], "area": 6179}, {"id": 6120296, "category_id": 20, "iscrowd": 0, "bbox": [156, 262, 118, 89], "area": 6093}, {"id": 6119268, "category_id": 125, "iscrowd": 0, "bbox": [0, 198, 640, 206], "area": 67068}, {"id": 1912370, "category_id": 184, "iscrowd": 0, "bbox": [388, 0, 252, 92], "area": 13795}, {"id": 2769218, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 160383}, {"id": 7172467, "category_id": 198, "iscrowd": 0, "bbox": [0, 377, 599, 50], "area": 3703}], "file_name": "000000209613.png", "image_id": 209613}, {"segments_info": [{"id": 10525847, "category_id": 17, "iscrowd": 0, "bbox": [171, 60, 170, 223], "area": 23513}, {"id": 13616832, "category_id": 81, "iscrowd": 0, "bbox": [0, 148, 500, 202], "area": 66264}, {"id": 11905692, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 500, 350], "area": 70560}], "file_name": "000000209747.png", "image_id": 209747}, {"segments_info": [{"id": 1579291, "category_id": 1, "iscrowd": 0, "bbox": [42, 65, 383, 565], "area": 142138}, {"id": 8152929, "category_id": 72, "iscrowd": 0, "bbox": [363, 346, 102, 113], "area": 8317}, {"id": 920586, "category_id": 77, "iscrowd": 0, "bbox": [309, 350, 56, 36], "area": 974}, {"id": 7443391, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 467, 171], "area": 6367}, {"id": 6246989, "category_id": 197, "iscrowd": 0, "bbox": [94, 0, 58, 267], "area": 9359}, {"id": 6325674, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 467, 640], "area": 108434}], "file_name": "000000209753.png", "image_id": 209753}, {"segments_info": [{"id": 6909292, "category_id": 1, "iscrowd": 0, "bbox": [126, 26, 222, 303], "area": 24290}, {"id": 5657945, "category_id": 1, "iscrowd": 0, "bbox": [310, 172, 21, 63], "area": 773}, {"id": 6250080, "category_id": 1, "iscrowd": 0, "bbox": [331, 179, 11, 25], "area": 163}, {"id": 5196622, "category_id": 1, "iscrowd": 0, "bbox": [352, 176, 12, 33], "area": 257}, {"id": 5197135, "category_id": 1, "iscrowd": 0, "bbox": [365, 185, 12, 24], "area": 163}, {"id": 7170415, "category_id": 1, "iscrowd": 0, "bbox": [384, 176, 19, 46], "area": 437}, {"id": 7631982, "category_id": 1, "iscrowd": 0, "bbox": [65, 188, 24, 41], "area": 473}, {"id": 5396054, "category_id": 41, "iscrowd": 0, "bbox": [178, 310, 139, 34], "area": 2199}, {"id": 5790546, "category_id": 41, "iscrowd": 0, "bbox": [72, 227, 14, 3], "area": 25}, {"id": 9608360, "category_id": 187, "iscrowd": 0, "bbox": [10, 0, 407, 126], "area": 33265}, {"id": 5460826, "category_id": 191, "iscrowd": 0, "bbox": [0, 180, 426, 460], "area": 147306}, {"id": 6776168, "category_id": 197, "iscrowd": 0, "bbox": [0, 64, 426, 158], "area": 32324}], "file_name": "000000209757.png", "image_id": 209757}, {"segments_info": [{"id": 4670276, "category_id": 1, "iscrowd": 0, "bbox": [398, 226, 45, 39], "area": 924}, {"id": 6512226, "category_id": 1, "iscrowd": 0, "bbox": [567, 239, 33, 28], "area": 537}, {"id": 5590599, "category_id": 1, "iscrowd": 0, "bbox": [340, 141, 59, 155], "area": 4670}, {"id": 12699076, "category_id": 42, "iscrowd": 0, "bbox": [321, 285, 61, 8], "area": 196}, {"id": 10589561, "category_id": 155, "iscrowd": 0, "bbox": [0, 108, 640, 372], "area": 228421}, {"id": 4409419, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 118], "area": 72289}], "file_name": "000000209829.png", "image_id": 209829}, {"segments_info": [{"id": 9147017, "category_id": 9, "iscrowd": 0, "bbox": [333, 47, 117, 190], "area": 4092}, {"id": 8293257, "category_id": 154, "iscrowd": 0, "bbox": [0, 167, 640, 132], "area": 75223}, {"id": 11382174, "category_id": 155, "iscrowd": 0, "bbox": [0, 82, 640, 102], "area": 58193}, {"id": 13489100, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 211], "area": 53691}], "file_name": "000000209972.png", "image_id": 209972}, {"segments_info": [{"id": 4342863, "category_id": 48, "iscrowd": 0, "bbox": [238, 135, 159, 227], "area": 5337}, {"id": 6252670, "category_id": 61, "iscrowd": 0, "bbox": [100, 66, 231, 214], "area": 30340}, {"id": 9934494, "category_id": 67, "iscrowd": 0, "bbox": [1, 2, 498, 392], "area": 156068}, {"id": 9539732, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 400], "area": 7267}], "file_name": "000000210030.png", "image_id": 210030}, {"segments_info": [{"id": 8033206, "category_id": 1, "iscrowd": 0, "bbox": [132, 0, 145, 83], "area": 5694}, {"id": 5194809, "category_id": 1, "iscrowd": 0, "bbox": [1, 140, 58, 57], "area": 1314}, {"id": 4272690, "category_id": 1, "iscrowd": 0, "bbox": [35, 40, 54, 40], "area": 1165}, {"id": 6123673, "category_id": 1, "iscrowd": 0, "bbox": [27, 41, 25, 40], "area": 471}, {"id": 4148572, "category_id": 16, "iscrowd": 0, "bbox": [521, 89, 115, 131], "area": 4017}, {"id": 3160905, "category_id": 16, "iscrowd": 0, "bbox": [382, 136, 257, 103], "area": 13022}, {"id": 5600920, "category_id": 47, "iscrowd": 0, "bbox": [89, 59, 28, 35], "area": 865}, {"id": 10927573, "category_id": 47, "iscrowd": 0, "bbox": [199, 59, 21, 33], "area": 664}, {"id": 9808341, "category_id": 47, "iscrowd": 0, "bbox": [176, 59, 25, 33], "area": 670}, {"id": 4340540, "category_id": 48, "iscrowd": 0, "bbox": [40, 173, 95, 80], "area": 1633}, {"id": 4674927, "category_id": 49, "iscrowd": 0, "bbox": [5, 164, 125, 117], "area": 2239}, {"id": 4818114, "category_id": 54, "iscrowd": 0, "bbox": [105, 159, 253, 113], "area": 22174}, {"id": 2629405, "category_id": 62, "iscrowd": 0, "bbox": [31, 79, 57, 42], "area": 974}, {"id": 2564378, "category_id": 62, "iscrowd": 0, "bbox": [44, 90, 301, 101], "area": 22956}, {"id": 7507370, "category_id": 67, "iscrowd": 0, "bbox": [1, 163, 639, 233], "area": 104424}, {"id": 7105639, "category_id": 155, "iscrowd": 0, "bbox": [327, 63, 313, 147], "area": 18503}, {"id": 4276292, "category_id": 185, "iscrowd": 0, "bbox": [229, 0, 267, 94], "area": 5837}, {"id": 11384502, "category_id": 187, "iscrowd": 0, "bbox": [240, 0, 400, 29], "area": 2980}, {"id": 7044744, "category_id": 189, "iscrowd": 0, "bbox": [0, 202, 640, 199], "area": 3609}, {"id": 5197126, "category_id": 192, "iscrowd": 0, "bbox": [322, 0, 318, 54], "area": 9551}, {"id": 5597048, "category_id": 194, "iscrowd": 0, "bbox": [334, 78, 166, 32], "area": 2477}, {"id": 7179967, "category_id": 196, "iscrowd": 0, "bbox": [0, 263, 3, 127], "area": 281}, {"id": 9544103, "category_id": 197, "iscrowd": 0, "bbox": [40, 0, 600, 90], "area": 20042}], "file_name": "000000210032.png", "image_id": 210032}, {"segments_info": [{"id": 2836328, "category_id": 17, "iscrowd": 0, "bbox": [155, 82, 229, 367], "area": 32885}, {"id": 3227211, "category_id": 62, "iscrowd": 0, "bbox": [36, 65, 578, 408], "area": 135222}, {"id": 4939117, "category_id": 118, "iscrowd": 0, "bbox": [0, 440, 640, 98], "area": 8036}, {"id": 1054751, "category_id": 161, "iscrowd": 0, "bbox": [0, 0, 508, 493], "area": 74817}, {"id": 662580, "category_id": 171, "iscrowd": 0, "bbox": [91, 459, 29, 15], "area": 280}], "file_name": "000000210099.png", "image_id": 210099}, {"segments_info": [{"id": 7104107, "category_id": 1, "iscrowd": 0, "bbox": [0, 301, 109, 150], "area": 9577}, {"id": 4013893, "category_id": 1, "iscrowd": 0, "bbox": [160, 235, 58, 73], "area": 2049}, {"id": 10660013, "category_id": 1, "iscrowd": 0, "bbox": [210, 268, 28, 32], "area": 464}, {"id": 3359326, "category_id": 1, "iscrowd": 0, "bbox": [214, 158, 101, 86], "area": 5669}, {"id": 1909572, "category_id": 1, "iscrowd": 0, "bbox": [33, 229, 58, 66], "area": 2246}, {"id": 2303017, "category_id": 1, "iscrowd": 0, "bbox": [71, 187, 126, 192], "area": 10064}, {"id": 3553856, "category_id": 1, "iscrowd": 0, "bbox": [192, 53, 432, 399], "area": 84280}, {"id": 6118752, "category_id": 1, "iscrowd": 0, "bbox": [0, 233, 28, 57], "area": 727}, {"id": 6396143, "category_id": 57, "iscrowd": 0, "bbox": [311, 410, 53, 10], "area": 131}, {"id": 4938374, "category_id": 58, "iscrowd": 0, "bbox": [238, 414, 62, 28], "area": 459}, {"id": 3234738, "category_id": 58, "iscrowd": 0, "bbox": [240, 412, 155, 42], "area": 1430}, {"id": 6398947, "category_id": 58, "iscrowd": 0, "bbox": [163, 303, 143, 49], "area": 3856}, {"id": 4620762, "category_id": 58, "iscrowd": 0, "bbox": [314, 408, 47, 7], "area": 260}, {"id": 3371743, "category_id": 58, "iscrowd": 0, "bbox": [310, 415, 48, 12], "area": 289}, {"id": 7050716, "category_id": 58, "iscrowd": 0, "bbox": [306, 404, 10, 7], "area": 34}, {"id": 8429237, "category_id": 100, "iscrowd": 0, "bbox": [610, 307, 30, 85], "area": 2122}, {"id": 10462623, "category_id": 112, "iscrowd": 0, "bbox": [550, 182, 70, 97], "area": 1476}, {"id": 7026989, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 640, 226], "area": 103003}, {"id": 15659505, "category_id": 187, "iscrowd": 0, "bbox": [0, 202, 237, 48], "area": 4686}, {"id": 6581103, "category_id": 190, "iscrowd": 0, "bbox": [614, 388, 26, 21], "area": 344}, {"id": 13621465, "category_id": 191, "iscrowd": 0, "bbox": [606, 400, 34, 47], "area": 1086}, {"id": 9619177, "category_id": 196, "iscrowd": 0, "bbox": [0, 257, 241, 124], "area": 1649}, {"id": 13818068, "category_id": 197, "iscrowd": 0, "bbox": [10, 234, 244, 55], "area": 2759}, {"id": 15987699, "category_id": 199, "iscrowd": 0, "bbox": [0, 134, 640, 182], "area": 7723}], "file_name": "000000210230.png", "image_id": 210230}, {"segments_info": [{"id": 7104617, "category_id": 1, "iscrowd": 0, "bbox": [234, 110, 10, 25], "area": 147}, {"id": 6775908, "category_id": 1, "iscrowd": 0, "bbox": [206, 125, 7, 29], "area": 150}, {"id": 4736066, "category_id": 1, "iscrowd": 0, "bbox": [117, 168, 11, 31], "area": 194}, {"id": 4935252, "category_id": 1, "iscrowd": 0, "bbox": [109, 184, 14, 23], "area": 207}, {"id": 3618102, "category_id": 1, "iscrowd": 0, "bbox": [68, 212, 12, 36], "area": 239}, {"id": 2761505, "category_id": 1, "iscrowd": 0, "bbox": [1, 256, 16, 57], "area": 659}, {"id": 5328720, "category_id": 1, "iscrowd": 0, "bbox": [156, 170, 19, 20], "area": 212}, {"id": 7895426, "category_id": 1, "iscrowd": 0, "bbox": [531, 155, 17, 39], "area": 291}, {"id": 7303290, "category_id": 1, "iscrowd": 0, "bbox": [472, 157, 22, 41], "area": 355}, {"id": 5920082, "category_id": 1, "iscrowd": 0, "bbox": [188, 138, 15, 29], "area": 192}, {"id": 4737100, "category_id": 1, "iscrowd": 0, "bbox": [130, 177, 11, 21], "area": 137}, {"id": 8422804, "category_id": 1, "iscrowd": 0, "bbox": [483, 159, 6, 15], "area": 44}, {"id": 6709602, "category_id": 1, "iscrowd": 0, "bbox": [221, 113, 7, 25], "area": 123}, {"id": 9474974, "category_id": 2, "iscrowd": 0, "bbox": [490, 177, 17, 16], "area": 89}, {"id": 8948886, "category_id": 2, "iscrowd": 0, "bbox": [468, 179, 34, 17], "area": 192}, {"id": 8092809, "category_id": 3, "iscrowd": 0, "bbox": [503, 138, 38, 27], "area": 704}, {"id": 10658725, "category_id": 3, "iscrowd": 0, "bbox": [268, 218, 56, 49], "area": 1958}, {"id": 8421508, "category_id": 3, "iscrowd": 0, "bbox": [421, 139, 31, 40], "area": 985}, {"id": 10263972, "category_id": 3, "iscrowd": 0, "bbox": [412, 110, 24, 14], "area": 286}, {"id": 8947849, "category_id": 3, "iscrowd": 0, "bbox": [307, 227, 67, 46], "area": 1308}, {"id": 7236718, "category_id": 3, "iscrowd": 0, "bbox": [299, 251, 74, 69], "area": 3630}, {"id": 7631992, "category_id": 3, "iscrowd": 0, "bbox": [418, 262, 82, 76], "area": 4719}, {"id": 10132904, "category_id": 3, "iscrowd": 0, "bbox": [518, 115, 34, 21], "area": 456}, {"id": 11515327, "category_id": 3, "iscrowd": 0, "bbox": [409, 177, 47, 34], "area": 917}, {"id": 8882831, "category_id": 3, "iscrowd": 0, "bbox": [319, 309, 74, 62], "area": 3602}, {"id": 8159113, "category_id": 3, "iscrowd": 0, "bbox": [584, 122, 39, 37], "area": 1172}, {"id": 11317431, "category_id": 3, "iscrowd": 0, "bbox": [331, 199, 49, 42], "area": 1376}, {"id": 6709858, "category_id": 3, "iscrowd": 0, "bbox": [177, 298, 77, 66], "area": 4234}, {"id": 9211799, "category_id": 3, "iscrowd": 1, "bbox": [91, 61, 549, 262], "area": 11759}, {"id": 9343640, "category_id": 6, "iscrowd": 0, "bbox": [307, 142, 69, 74], "area": 3724}, {"id": 9276064, "category_id": 6, "iscrowd": 0, "bbox": [450, 75, 29, 32], "area": 607}, {"id": 7502452, "category_id": 6, "iscrowd": 0, "bbox": [229, 134, 65, 88], "area": 5048}, {"id": 6516074, "category_id": 6, "iscrowd": 0, "bbox": [97, 189, 126, 130], "area": 14202}, {"id": 7699860, "category_id": 6, "iscrowd": 0, "bbox": [576, 159, 64, 75], "area": 4322}, {"id": 9540245, "category_id": 6, "iscrowd": 0, "bbox": [294, 100, 46, 60], "area": 2051}, {"id": 9212578, "category_id": 6, "iscrowd": 0, "bbox": [573, 72, 35, 37], "area": 973}, {"id": 9738143, "category_id": 6, "iscrowd": 0, "bbox": [355, 87, 34, 33], "area": 326}, {"id": 10396329, "category_id": 6, "iscrowd": 0, "bbox": [325, 71, 23, 29], "area": 601}, {"id": 9474717, "category_id": 6, "iscrowd": 0, "bbox": [357, 71, 28, 19], "area": 411}, {"id": 9212815, "category_id": 6, "iscrowd": 0, "bbox": [340, 92, 42, 51], "area": 1713}, {"id": 10132638, "category_id": 6, "iscrowd": 0, "bbox": [362, 118, 63, 77], "area": 3375}, {"id": 7039344, "category_id": 6, "iscrowd": 0, "bbox": [594, 79, 37, 42], "area": 1312}, {"id": 9673641, "category_id": 6, "iscrowd": 1, "bbox": [379, 72, 143, 212], "area": 6677}, {"id": 8488592, "category_id": 149, "iscrowd": 0, "bbox": [0, 96, 640, 294], "area": 62833}, {"id": 4868682, "category_id": 184, "iscrowd": 0, "bbox": [0, 57, 578, 215], "area": 30430}, {"id": 4672335, "category_id": 185, "iscrowd": 0, "bbox": [15, 189, 97, 84], "area": 1475}, {"id": 8290699, "category_id": 197, "iscrowd": 0, "bbox": [266, 37, 374, 66], "area": 4981}], "file_name": "000000210273.png", "image_id": 210273}, {"segments_info": [{"id": 4149859, "category_id": 1, "iscrowd": 0, "bbox": [127, 124, 128, 202], "area": 9505}, {"id": 3951192, "category_id": 2, "iscrowd": 0, "bbox": [137, 184, 124, 217], "area": 9716}, {"id": 10203061, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 287463}], "file_name": "000000210299.png", "image_id": 210299}, {"segments_info": [{"id": 2697768, "category_id": 1, "iscrowd": 0, "bbox": [314, 208, 85, 159], "area": 7435}, {"id": 4604002, "category_id": 1, "iscrowd": 0, "bbox": [193, 155, 114, 213], "area": 14095}, {"id": 3157552, "category_id": 1, "iscrowd": 0, "bbox": [1, 141, 76, 270], "area": 14262}, {"id": 3552323, "category_id": 33, "iscrowd": 0, "bbox": [281, 259, 58, 84], "area": 3174}, {"id": 9933965, "category_id": 159, "iscrowd": 0, "bbox": [0, 187, 640, 239], "area": 43799}, {"id": 14933979, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 388], "area": 184596}], "file_name": "000000210388.png", "image_id": 210388}, {"segments_info": [{"id": 4738646, "category_id": 1, "iscrowd": 0, "bbox": [104, 228, 15, 30], "area": 206}, {"id": 4672084, "category_id": 1, "iscrowd": 0, "bbox": [209, 228, 16, 46], "area": 292}, {"id": 5331564, "category_id": 1, "iscrowd": 0, "bbox": [138, 227, 10, 32], "area": 181}, {"id": 8885671, "category_id": 1, "iscrowd": 0, "bbox": [243, 225, 13, 22], "area": 164}, {"id": 4341311, "category_id": 1, "iscrowd": 0, "bbox": [461, 232, 14, 62], "area": 519}, {"id": 2894394, "category_id": 1, "iscrowd": 0, "bbox": [586, 231, 21, 54], "area": 488}, {"id": 4406590, "category_id": 1, "iscrowd": 0, "bbox": [455, 229, 9, 19], "area": 94}, {"id": 3947852, "category_id": 1, "iscrowd": 0, "bbox": [507, 229, 10, 37], "area": 223}, {"id": 3619391, "category_id": 1, "iscrowd": 0, "bbox": [499, 227, 42, 101], "area": 1821}, {"id": 7303038, "category_id": 1, "iscrowd": 0, "bbox": [194, 223, 21, 49], "area": 463}, {"id": 3092541, "category_id": 1, "iscrowd": 0, "bbox": [479, 227, 26, 80], "area": 1190}, {"id": 7704232, "category_id": 1, "iscrowd": 0, "bbox": [551, 230, 21, 49], "area": 535}, {"id": 4671544, "category_id": 1, "iscrowd": 0, "bbox": [420, 225, 42, 108], "area": 2403}, {"id": 5001820, "category_id": 1, "iscrowd": 1, "bbox": [47, 225, 593, 74], "area": 4796}, {"id": 3224633, "category_id": 2, "iscrowd": 0, "bbox": [551, 253, 87, 62], "area": 2460}, {"id": 7831944, "category_id": 4, "iscrowd": 0, "bbox": [183, 243, 36, 44], "area": 935}, {"id": 4409426, "category_id": 4, "iscrowd": 0, "bbox": [243, 243, 9, 15], "area": 98}, {"id": 6184034, "category_id": 6, "iscrowd": 0, "bbox": [252, 132, 188, 196], "area": 29582}, {"id": 12770797, "category_id": 92, "iscrowd": 0, "bbox": [437, 173, 90, 25], "area": 1440}, {"id": 7031479, "category_id": 119, "iscrowd": 0, "bbox": [550, 190, 49, 31], "area": 769}, {"id": 3355959, "category_id": 149, "iscrowd": 0, "bbox": [0, 246, 640, 234], "area": 116863}, {"id": 6911366, "category_id": 166, "iscrowd": 0, "bbox": [179, 210, 57, 40], "area": 687}, {"id": 7569026, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 234], "area": 16748}, {"id": 14071708, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 626, 215], "area": 82927}, {"id": 4474963, "category_id": 191, "iscrowd": 0, "bbox": [0, 227, 255, 82], "area": 7655}, {"id": 7702681, "category_id": 197, "iscrowd": 0, "bbox": [0, 96, 640, 160], "area": 27571}], "file_name": "000000210394.png", "image_id": 210394}, {"segments_info": [{"id": 6117729, "category_id": 7, "iscrowd": 0, "bbox": [0, 31, 640, 413], "area": 247659}, {"id": 1973018, "category_id": 95, "iscrowd": 0, "bbox": [65, 0, 220, 35], "area": 6685}, {"id": 1777444, "category_id": 125, "iscrowd": 0, "bbox": [0, 383, 640, 97], "area": 16980}, {"id": 988704, "category_id": 147, "iscrowd": 0, "bbox": [0, 340, 640, 135], "area": 18120}, {"id": 15390923, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 51], "area": 16556}], "file_name": "000000210502.png", "image_id": 210502}, {"segments_info": [{"id": 4346501, "category_id": 46, "iscrowd": 0, "bbox": [269, 0, 98, 112], "area": 5534}, {"id": 5592678, "category_id": 46, "iscrowd": 0, "bbox": [514, 0, 62, 45], "area": 2293}, {"id": 8223357, "category_id": 47, "iscrowd": 0, "bbox": [425, 0, 60, 40], "area": 1628}, {"id": 3886705, "category_id": 47, "iscrowd": 0, "bbox": [165, 267, 70, 69], "area": 3832}, {"id": 6318711, "category_id": 47, "iscrowd": 0, "bbox": [0, 203, 124, 140], "area": 13815}, {"id": 11845836, "category_id": 47, "iscrowd": 0, "bbox": [347, 99, 124, 156], "area": 12270}, {"id": 5531522, "category_id": 48, "iscrowd": 0, "bbox": [114, 382, 24, 182], "area": 1903}, {"id": 5333892, "category_id": 49, "iscrowd": 0, "bbox": [395, 374, 26, 166], "area": 1408}, {"id": 7233889, "category_id": 50, "iscrowd": 0, "bbox": [571, 210, 32, 97], "area": 1060}, {"id": 4410461, "category_id": 50, "iscrowd": 0, "bbox": [421, 375, 29, 140], "area": 1605}, {"id": 6446955, "category_id": 50, "iscrowd": 0, "bbox": [576, 203, 26, 25], "area": 472}, {"id": 9606035, "category_id": 50, "iscrowd": 0, "bbox": [424, 161, 148, 76], "area": 2792}, {"id": 4410014, "category_id": 51, "iscrowd": 0, "bbox": [464, 51, 146, 257], "area": 26144}, {"id": 4477810, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 290445}, {"id": 7240870, "category_id": 86, "iscrowd": 0, "bbox": [254, 36, 75, 174], "area": 7459}, {"id": 4734821, "category_id": 86, "iscrowd": 0, "bbox": [187, 189, 31, 24], "area": 383}], "file_name": "000000210520.png", "image_id": 210520}, {"segments_info": [{"id": 4736841, "category_id": 22, "iscrowd": 0, "bbox": [44, 140, 307, 146], "area": 17503}, {"id": 5002587, "category_id": 22, "iscrowd": 0, "bbox": [113, 7, 268, 262], "area": 41235}, {"id": 9401443, "category_id": 178, "iscrowd": 0, "bbox": [0, 188, 500, 145], "area": 45836}, {"id": 3174493, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 147], "area": 32434}, {"id": 7975090, "category_id": 193, "iscrowd": 0, "bbox": [374, 143, 17, 9], "area": 116}, {"id": 8824754, "category_id": 194, "iscrowd": 0, "bbox": [0, 53, 500, 180], "area": 28957}], "file_name": "000000210708.png", "image_id": 210708}, {"segments_info": [{"id": 10923454, "category_id": 1, "iscrowd": 0, "bbox": [126, 236, 66, 207], "area": 8536}, {"id": 5132366, "category_id": 1, "iscrowd": 0, "bbox": [153, 124, 91, 304], "area": 11889}, {"id": 3421232, "category_id": 8, "iscrowd": 0, "bbox": [223, 148, 136, 80], "area": 7488}, {"id": 11315352, "category_id": 8, "iscrowd": 0, "bbox": [10, 107, 42, 66], "area": 2088}, {"id": 5063044, "category_id": 28, "iscrowd": 0, "bbox": [32, 85, 273, 109], "area": 18351}, {"id": 12763061, "category_id": 151, "iscrowd": 0, "bbox": [0, 68, 359, 62], "area": 3002}, {"id": 4079667, "category_id": 184, "iscrowd": 0, "bbox": [10, 0, 359, 128], "area": 31132}, {"id": 8423815, "category_id": 191, "iscrowd": 0, "bbox": [0, 168, 369, 352], "area": 69229}, {"id": 5152107, "category_id": 193, "iscrowd": 0, "bbox": [10, 175, 349, 190], "area": 22105}, {"id": 3554102, "category_id": 197, "iscrowd": 0, "bbox": [49, 115, 310, 33], "area": 1927}], "file_name": "000000210789.png", "image_id": 210789}, {"segments_info": [{"id": 2773880, "category_id": 44, "iscrowd": 0, "bbox": [358, 234, 13, 36], "area": 364}, {"id": 4022399, "category_id": 44, "iscrowd": 0, "bbox": [346, 236, 14, 35], "area": 400}, {"id": 3038595, "category_id": 70, "iscrowd": 0, "bbox": [194, 255, 76, 136], "area": 5246}, {"id": 5473446, "category_id": 81, "iscrowd": 0, "bbox": [416, 282, 89, 21], "area": 1224}, {"id": 1789303, "category_id": 86, "iscrowd": 0, "bbox": [384, 243, 11, 27], "area": 201}, {"id": 598070, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 71631}, {"id": 11579833, "category_id": 130, "iscrowd": 0, "bbox": [593, 114, 15, 27], "area": 293}, {"id": 1914701, "category_id": 133, "iscrowd": 0, "bbox": [341, 15, 282, 243], "area": 55950}, {"id": 198673, "category_id": 156, "iscrowd": 0, "bbox": [304, 284, 293, 143], "area": 20637}, {"id": 2507359, "category_id": 168, "iscrowd": 0, "bbox": [321, 281, 280, 131], "area": 8836}, {"id": 3763351, "category_id": 176, "iscrowd": 0, "bbox": [126, 0, 482, 427], "area": 79031}, {"id": 3694981, "category_id": 186, "iscrowd": 0, "bbox": [215, 0, 409, 52], "area": 12769}, {"id": 1523561, "category_id": 190, "iscrowd": 0, "bbox": [183, 327, 362, 100], "area": 8848}], "file_name": "000000210855.png", "image_id": 210855}, {"segments_info": [{"id": 6712940, "category_id": 1, "iscrowd": 0, "bbox": [132, 116, 284, 181], "area": 13103}, {"id": 8489088, "category_id": 42, "iscrowd": 0, "bbox": [289, 61, 177, 121], "area": 10387}, {"id": 12369843, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 283319}], "file_name": "000000210915.png", "image_id": 210915}, {"segments_info": [{"id": 1516087, "category_id": 17, "iscrowd": 0, "bbox": [161, 187, 126, 355], "area": 19276}, {"id": 4878747, "category_id": 70, "iscrowd": 0, "bbox": [166, 213, 206, 128], "area": 13042}, {"id": 4285577, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 241, 326], "area": 25011}, {"id": 4484243, "category_id": 188, "iscrowd": 0, "bbox": [0, 169, 88, 469], "area": 23824}, {"id": 3360866, "category_id": 190, "iscrowd": 0, "bbox": [0, 303, 458, 337], "area": 70717}, {"id": 4021380, "category_id": 195, "iscrowd": 0, "bbox": [17, 47, 192, 316], "area": 7958}, {"id": 3232116, "category_id": 199, "iscrowd": 0, "bbox": [206, 136, 252, 189], "area": 2761}, {"id": 3429757, "category_id": 200, "iscrowd": 0, "bbox": [301, 365, 157, 275], "area": 29094}], "file_name": "000000211042.png", "image_id": 211042}, {"segments_info": [{"id": 9676212, "category_id": 25, "iscrowd": 0, "bbox": [0, 226, 129, 150], "area": 10825}, {"id": 8097443, "category_id": 25, "iscrowd": 0, "bbox": [254, 198, 193, 204], "area": 10301}, {"id": 3364165, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 421], "area": 185281}, {"id": 7052706, "category_id": 193, "iscrowd": 0, "bbox": [0, 130, 640, 350], "area": 100521}], "file_name": "000000211069.png", "image_id": 211069}, {"segments_info": [{"id": 3484714, "category_id": 8, "iscrowd": 0, "bbox": [0, 1, 640, 144], "area": 47216}, {"id": 9738180, "category_id": 51, "iscrowd": 0, "bbox": [471, 231, 56, 41], "area": 1664}, {"id": 10395054, "category_id": 88, "iscrowd": 0, "bbox": [217, 44, 153, 221], "area": 24325}, {"id": 10460079, "category_id": 88, "iscrowd": 0, "bbox": [394, 42, 174, 225], "area": 24273}, {"id": 8818090, "category_id": 88, "iscrowd": 0, "bbox": [33, 62, 151, 186], "area": 19941}, {"id": 12300735, "category_id": 88, "iscrowd": 0, "bbox": [536, 97, 104, 70], "area": 3927}, {"id": 8426123, "category_id": 119, "iscrowd": 0, "bbox": [0, 141, 640, 238], "area": 14928}, {"id": 3889223, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 379], "area": 31903}, {"id": 6376848, "category_id": 200, "iscrowd": 0, "bbox": [33, 142, 564, 231], "area": 68586}], "file_name": "000000211120.png", "image_id": 211120}, {"segments_info": [{"id": 8421771, "category_id": 1, "iscrowd": 0, "bbox": [422, 24, 50, 35], "area": 851}, {"id": 3290691, "category_id": 1, "iscrowd": 0, "bbox": [259, 83, 36, 36], "area": 550}, {"id": 7238011, "category_id": 1, "iscrowd": 0, "bbox": [377, 11, 40, 34], "area": 608}, {"id": 5263213, "category_id": 1, "iscrowd": 0, "bbox": [101, 255, 8, 26], "area": 137}, {"id": 3619390, "category_id": 1, "iscrowd": 0, "bbox": [86, 252, 6, 14], "area": 53}, {"id": 4803156, "category_id": 1, "iscrowd": 0, "bbox": [251, 95, 18, 27], "area": 264}, {"id": 5789011, "category_id": 1, "iscrowd": 0, "bbox": [381, 201, 55, 64], "area": 1546}, {"id": 3815759, "category_id": 1, "iscrowd": 0, "bbox": [264, 84, 17, 23], "area": 226}, {"id": 4474710, "category_id": 1, "iscrowd": 0, "bbox": [284, 45, 33, 40], "area": 837}, {"id": 5591919, "category_id": 1, "iscrowd": 0, "bbox": [346, 28, 41, 58], "area": 878}, {"id": 6185331, "category_id": 1, "iscrowd": 0, "bbox": [325, 28, 15, 18], "area": 190}, {"id": 5986402, "category_id": 1, "iscrowd": 0, "bbox": [218, 153, 9, 30], "area": 124}, {"id": 6514292, "category_id": 1, "iscrowd": 0, "bbox": [239, 109, 25, 23], "area": 149}, {"id": 8158339, "category_id": 1, "iscrowd": 1, "bbox": [229, 135, 20, 22], "area": 220}, {"id": 6841186, "category_id": 3, "iscrowd": 0, "bbox": [185, 259, 15, 10], "area": 109}, {"id": 4868458, "category_id": 6, "iscrowd": 0, "bbox": [205, 38, 337, 352], "area": 91749}, {"id": 4608088, "category_id": 64, "iscrowd": 0, "bbox": [5, 244, 22, 22], "area": 291}, {"id": 6317414, "category_id": 149, "iscrowd": 0, "bbox": [0, 254, 640, 152], "area": 38924}, {"id": 5727841, "category_id": 184, "iscrowd": 0, "bbox": [0, 144, 640, 130], "area": 8975}, {"id": 15789804, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 243], "area": 88266}, {"id": 9542301, "category_id": 191, "iscrowd": 0, "bbox": [0, 265, 640, 104], "area": 7114}, {"id": 3823701, "category_id": 193, "iscrowd": 0, "bbox": [605, 290, 20, 15], "area": 184}, {"id": 5205362, "category_id": 194, "iscrowd": 0, "bbox": [537, 292, 103, 45], "area": 2193}, {"id": 5593950, "category_id": 197, "iscrowd": 0, "bbox": [0, 189, 560, 119], "area": 10367}], "file_name": "000000211674.png", "image_id": 211674}, {"segments_info": [{"id": 7368807, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 488, 296], "area": 79591}, {"id": 3026213, "category_id": 1, "iscrowd": 0, "bbox": [587, 85, 53, 202], "area": 6545}, {"id": 7301733, "category_id": 61, "iscrowd": 0, "bbox": [230, 192, 144, 155], "area": 17613}, {"id": 2828842, "category_id": 79, "iscrowd": 0, "bbox": [458, 56, 182, 221], "area": 30938}, {"id": 2441309, "category_id": 84, "iscrowd": 0, "bbox": [410, 105, 31, 27], "area": 671}, {"id": 1845045, "category_id": 84, "iscrowd": 0, "bbox": [391, 95, 19, 35], "area": 390}, {"id": 5855329, "category_id": 100, "iscrowd": 0, "bbox": [18, 286, 22, 24], "area": 407}, {"id": 3491931, "category_id": 107, "iscrowd": 0, "bbox": [430, 106, 49, 55], "area": 906}, {"id": 4937564, "category_id": 176, "iscrowd": 0, "bbox": [409, 86, 50, 26], "area": 835}, {"id": 6446670, "category_id": 188, "iscrowd": 0, "bbox": [28, 118, 451, 157], "area": 20559}, {"id": 9868936, "category_id": 189, "iscrowd": 0, "bbox": [0, 247, 640, 233], "area": 119253}, {"id": 9670528, "category_id": 195, "iscrowd": 0, "bbox": [0, 38, 397, 327], "area": 4233}, {"id": 3953253, "category_id": 196, "iscrowd": 0, "bbox": [267, 111, 190, 238], "area": 278}, {"id": 4679547, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 101], "area": 20817}], "file_name": "000000211825.png", "image_id": 211825}, {"segments_info": [{"id": 5066941, "category_id": 13, "iscrowd": 0, "bbox": [310, 30, 150, 148], "area": 16252}, {"id": 6524598, "category_id": 100, "iscrowd": 0, "bbox": [372, 277, 17, 33], "area": 347}, {"id": 8290177, "category_id": 149, "iscrowd": 0, "bbox": [0, 291, 500, 84], "area": 30749}, {"id": 7041657, "category_id": 166, "iscrowd": 0, "bbox": [0, 73, 500, 239], "area": 92290}, {"id": 6910336, "category_id": 171, "iscrowd": 0, "bbox": [359, 83, 113, 223], "area": 232}, {"id": 1984557, "category_id": 184, "iscrowd": 0, "bbox": [24, 275, 22, 18], "area": 261}, {"id": 13605215, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 85], "area": 32950}], "file_name": "000000212072.png", "image_id": 212072}, {"segments_info": [{"id": 4805015, "category_id": 1, "iscrowd": 0, "bbox": [86, 13, 447, 398], "area": 132287}, {"id": 5863896, "category_id": 196, "iscrowd": 0, "bbox": [203, 401, 409, 211], "area": 59860}, {"id": 6262473, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 612, 419], "area": 86610}], "file_name": "000000212166.png", "image_id": 212166}, {"segments_info": [{"id": 6842991, "category_id": 1, "iscrowd": 0, "bbox": [236, 84, 158, 186], "area": 12846}, {"id": 4289665, "category_id": 8, "iscrowd": 0, "bbox": [55, 1, 363, 330], "area": 67613}, {"id": 4278081, "category_id": 128, "iscrowd": 0, "bbox": [36, 101, 93, 84], "area": 3343}, {"id": 14606045, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 335], "area": 59043}], "file_name": "000000212226.png", "image_id": 212226}, {"segments_info": [{"id": 5131343, "category_id": 1, "iscrowd": 0, "bbox": [314, 1, 46, 101], "area": 2604}, {"id": 6710373, "category_id": 1, "iscrowd": 0, "bbox": [71, 0, 67, 112], "area": 4633}, {"id": 4670534, "category_id": 1, "iscrowd": 0, "bbox": [363, 100, 35, 92], "area": 1850}, {"id": 6381408, "category_id": 1, "iscrowd": 0, "bbox": [138, 0, 64, 109], "area": 4136}, {"id": 4406593, "category_id": 1, "iscrowd": 0, "bbox": [371, 16, 46, 83], "area": 3095}, {"id": 4671307, "category_id": 1, "iscrowd": 0, "bbox": [209, 109, 50, 98], "area": 2990}, {"id": 5065549, "category_id": 1, "iscrowd": 0, "bbox": [406, 0, 48, 96], "area": 3138}, {"id": 4736585, "category_id": 1, "iscrowd": 0, "bbox": [153, 114, 57, 95], "area": 3429}, {"id": 7501944, "category_id": 70, "iscrowd": 0, "bbox": [198, 313, 267, 327], "area": 47058}, {"id": 2694470, "category_id": 168, "iscrowd": 0, "bbox": [431, 0, 49, 234], "area": 7370}, {"id": 1712164, "category_id": 190, "iscrowd": 0, "bbox": [163, 593, 127, 47], "area": 3843}, {"id": 2630182, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 222396}], "file_name": "000000212453.png", "image_id": 212453}, {"segments_info": [{"id": 10260629, "category_id": 20, "iscrowd": 0, "bbox": [212, 139, 78, 116], "area": 6365}, {"id": 5920093, "category_id": 20, "iscrowd": 0, "bbox": [276, 154, 88, 62], "area": 3106}, {"id": 4538949, "category_id": 20, "iscrowd": 0, "bbox": [1, 205, 30, 119], "area": 2065}, {"id": 3092791, "category_id": 20, "iscrowd": 0, "bbox": [513, 100, 73, 74], "area": 3147}, {"id": 10591911, "category_id": 20, "iscrowd": 0, "bbox": [0, 247, 408, 245], "area": 50375}, {"id": 9404295, "category_id": 20, "iscrowd": 0, "bbox": [586, 105, 54, 22], "area": 640}, {"id": 6643040, "category_id": 20, "iscrowd": 0, "bbox": [513, 148, 82, 45], "area": 2033}, {"id": 8551041, "category_id": 20, "iscrowd": 0, "bbox": [585, 121, 55, 75], "area": 3033}, {"id": 10261661, "category_id": 20, "iscrowd": 0, "bbox": [405, 187, 113, 68], "area": 5434}, {"id": 9077901, "category_id": 20, "iscrowd": 0, "bbox": [526, 180, 92, 57], "area": 3982}, {"id": 3946297, "category_id": 177, "iscrowd": 0, "bbox": [376, 0, 247, 74], "area": 14832}], "file_name": "000000212559.png", "image_id": 212559}, {"segments_info": [{"id": 5067623, "category_id": 1, "iscrowd": 0, "bbox": [259, 57, 128, 372], "area": 30413}, {"id": 4211782, "category_id": 1, "iscrowd": 0, "bbox": [374, 68, 83, 347], "area": 19421}, {"id": 3947827, "category_id": 3, "iscrowd": 0, "bbox": [0, 119, 169, 136], "area": 16494}, {"id": 4934216, "category_id": 3, "iscrowd": 0, "bbox": [214, 127, 68, 88], "area": 3440}, {"id": 9739167, "category_id": 3, "iscrowd": 0, "bbox": [246, 107, 13, 14], "area": 133}, {"id": 9409167, "category_id": 3, "iscrowd": 0, "bbox": [433, 113, 20, 12], "area": 164}, {"id": 7370613, "category_id": 3, "iscrowd": 0, "bbox": [173, 125, 12, 22], "area": 172}, {"id": 5470596, "category_id": 3, "iscrowd": 0, "bbox": [484, 98, 156, 101], "area": 11542}, {"id": 11581878, "category_id": 3, "iscrowd": 0, "bbox": [237, 122, 26, 22], "area": 310}, {"id": 8356732, "category_id": 3, "iscrowd": 0, "bbox": [446, 112, 50, 30], "area": 1131}, {"id": 8816769, "category_id": 3, "iscrowd": 0, "bbox": [230, 118, 12, 11], "area": 90}, {"id": 5520039, "category_id": 10, "iscrowd": 0, "bbox": [163, 56, 11, 9], "area": 99}, {"id": 2829868, "category_id": 10, "iscrowd": 0, "bbox": [56, 1, 79, 104], "area": 5977}, {"id": 3689369, "category_id": 10, "iscrowd": 0, "bbox": [144, 93, 8, 14], "area": 90}, {"id": 6511701, "category_id": 28, "iscrowd": 0, "bbox": [254, 5, 175, 70], "area": 5767}, {"id": 10462368, "category_id": 149, "iscrowd": 0, "bbox": [0, 139, 640, 323], "area": 105020}, {"id": 5528917, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 238], "area": 48606}, {"id": 11318190, "category_id": 187, "iscrowd": 0, "bbox": [223, 0, 70, 25], "area": 1177}, {"id": 9738390, "category_id": 191, "iscrowd": 0, "bbox": [0, 126, 640, 433], "area": 94864}, {"id": 4870484, "category_id": 197, "iscrowd": 0, "bbox": [131, 55, 81, 120], "area": 5841}], "file_name": "000000212573.png", "image_id": 212573}, {"segments_info": [{"id": 1975854, "category_id": 1, "iscrowd": 0, "bbox": [201, 200, 42, 58], "area": 1372}, {"id": 7173525, "category_id": 1, "iscrowd": 0, "bbox": [402, 192, 38, 36], "area": 819}, {"id": 7502224, "category_id": 1, "iscrowd": 0, "bbox": [438, 188, 34, 36], "area": 692}, {"id": 1580579, "category_id": 1, "iscrowd": 0, "bbox": [106, 162, 47, 81], "area": 2230}, {"id": 1909289, "category_id": 1, "iscrowd": 0, "bbox": [104, 164, 24, 35], "area": 564}, {"id": 6252676, "category_id": 1, "iscrowd": 0, "bbox": [423, 186, 21, 29], "area": 195}, {"id": 1776931, "category_id": 1, "iscrowd": 0, "bbox": [78, 176, 29, 55], "area": 970}, {"id": 3290429, "category_id": 1, "iscrowd": 0, "bbox": [220, 198, 45, 66], "area": 1757}, {"id": 5990771, "category_id": 1, "iscrowd": 0, "bbox": [171, 179, 44, 74], "area": 1752}, {"id": 1975083, "category_id": 1, "iscrowd": 0, "bbox": [325, 197, 45, 67], "area": 1506}, {"id": 2699063, "category_id": 1, "iscrowd": 0, "bbox": [141, 181, 38, 64], "area": 1520}, {"id": 4276549, "category_id": 1, "iscrowd": 0, "bbox": [284, 205, 76, 73], "area": 2850}, {"id": 10594742, "category_id": 1, "iscrowd": 0, "bbox": [254, 206, 51, 65], "area": 1440}, {"id": 2238510, "category_id": 1, "iscrowd": 1, "bbox": [51, 154, 362, 96], "area": 4481}, {"id": 10659012, "category_id": 9, "iscrowd": 0, "bbox": [43, 214, 519, 138], "area": 37527}, {"id": 8025961, "category_id": 28, "iscrowd": 0, "bbox": [241, 116, 67, 30], "area": 608}, {"id": 9931644, "category_id": 28, "iscrowd": 0, "bbox": [26, 131, 74, 49], "area": 1297}, {"id": 7957855, "category_id": 28, "iscrowd": 0, "bbox": [317, 144, 99, 51], "area": 2393}, {"id": 10852488, "category_id": 28, "iscrowd": 0, "bbox": [50, 129, 88, 45], "area": 1627}, {"id": 1381908, "category_id": 28, "iscrowd": 0, "bbox": [434, 151, 79, 72], "area": 3185}, {"id": 7432284, "category_id": 28, "iscrowd": 0, "bbox": [105, 112, 118, 85], "area": 2981}, {"id": 10974815, "category_id": 28, "iscrowd": 0, "bbox": [186, 173, 83, 26], "area": 1544}, {"id": 8287592, "category_id": 28, "iscrowd": 0, "bbox": [229, 127, 117, 45], "area": 2909}, {"id": 5985097, "category_id": 28, "iscrowd": 0, "bbox": [343, 126, 103, 37], "area": 2438}, {"id": 6846553, "category_id": 28, "iscrowd": 0, "bbox": [169, 122, 77, 49], "area": 1551}, {"id": 13420737, "category_id": 28, "iscrowd": 0, "bbox": [256, 166, 101, 56], "area": 2512}, {"id": 3749424, "category_id": 28, "iscrowd": 0, "bbox": [341, 108, 110, 39], "area": 1521}, {"id": 12571855, "category_id": 28, "iscrowd": 0, "bbox": [188, 121, 62, 19], "area": 539}, {"id": 6318693, "category_id": 148, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 114025}, {"id": 3425091, "category_id": 171, "iscrowd": 0, "bbox": [71, 0, 569, 172], "area": 29997}, {"id": 2304611, "category_id": 181, "iscrowd": 0, "bbox": [521, 0, 19, 31], "area": 526}, {"id": 3163235, "category_id": 185, "iscrowd": 0, "bbox": [202, 45, 438, 95], "area": 21951}], "file_name": "000000212800.png", "image_id": 212800}, {"segments_info": [{"id": 4608346, "category_id": 25, "iscrowd": 0, "bbox": [183, 28, 115, 603], "area": 38779}, {"id": 14268328, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 321], "area": 136355}, {"id": 5073507, "category_id": 193, "iscrowd": 0, "bbox": [0, 300, 480, 340], "area": 131650}], "file_name": "000000212895.png", "image_id": 212895}, {"segments_info": [{"id": 2302541, "category_id": 1, "iscrowd": 0, "bbox": [122, 196, 219, 437], "area": 57683}, {"id": 6382433, "category_id": 9, "iscrowd": 0, "bbox": [450, 216, 30, 69], "area": 379}, {"id": 5985105, "category_id": 9, "iscrowd": 0, "bbox": [5, 266, 16, 4], "area": 55}, {"id": 7697775, "category_id": 9, "iscrowd": 0, "bbox": [401, 272, 44, 11], "area": 362}, {"id": 8421500, "category_id": 9, "iscrowd": 0, "bbox": [20, 259, 20, 12], "area": 142}, {"id": 3353385, "category_id": 28, "iscrowd": 0, "bbox": [23, 140, 311, 172], "area": 23809}, {"id": 3884367, "category_id": 125, "iscrowd": 0, "bbox": [0, 513, 480, 64], "area": 13134}, {"id": 3816521, "category_id": 128, "iscrowd": 0, "bbox": [174, 227, 306, 49], "area": 7068}, {"id": 6512475, "category_id": 155, "iscrowd": 0, "bbox": [0, 259, 480, 254], "area": 67444}, {"id": 2567979, "category_id": 184, "iscrowd": 0, "bbox": [306, 189, 174, 56], "area": 2998}, {"id": 16184299, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 180], "area": 68243}, {"id": 4739935, "category_id": 191, "iscrowd": 0, "bbox": [0, 542, 480, 98], "area": 27236}, {"id": 4867646, "category_id": 192, "iscrowd": 0, "bbox": [0, 109, 480, 108], "area": 16721}, {"id": 5264471, "category_id": 197, "iscrowd": 0, "bbox": [0, 180, 480, 92], "area": 7816}, {"id": 2302759, "category_id": 199, "iscrowd": 0, "bbox": [285, 265, 116, 23], "area": 1374}], "file_name": "000000213033.png", "image_id": 213033}, {"segments_info": [{"id": 8752295, "category_id": 1, "iscrowd": 0, "bbox": [0, 110, 311, 235], "area": 44205}, {"id": 4079693, "category_id": 1, "iscrowd": 0, "bbox": [305, 59, 331, 368], "area": 80655}, {"id": 2500921, "category_id": 1, "iscrowd": 0, "bbox": [199, 3, 256, 109], "area": 17104}, {"id": 3420735, "category_id": 46, "iscrowd": 0, "bbox": [177, 0, 67, 136], "area": 2545}, {"id": 1381916, "category_id": 77, "iscrowd": 0, "bbox": [238, 171, 90, 64], "area": 3195}, {"id": 1184278, "category_id": 77, "iscrowd": 0, "bbox": [314, 168, 78, 54], "area": 2651}], "file_name": "000000213035.png", "image_id": 213035}, {"segments_info": [{"id": 12890787, "category_id": 1, "iscrowd": 0, "bbox": [1, 112, 142, 326], "area": 28634}, {"id": 3685698, "category_id": 79, "iscrowd": 0, "bbox": [99, 147, 275, 350], "area": 63647}, {"id": 5479562, "category_id": 84, "iscrowd": 0, "bbox": [236, 75, 46, 60], "area": 1407}, {"id": 7106750, "category_id": 84, "iscrowd": 0, "bbox": [250, 96, 15, 40], "area": 484}, {"id": 13884133, "category_id": 86, "iscrowd": 0, "bbox": [262, 94, 30, 60], "area": 1572}, {"id": 4413832, "category_id": 156, "iscrowd": 0, "bbox": [126, 0, 147, 305], "area": 30565}, {"id": 11518421, "category_id": 176, "iscrowd": 0, "bbox": [269, 0, 106, 154], "area": 8356}, {"id": 4019850, "category_id": 188, "iscrowd": 0, "bbox": [335, 292, 40, 208], "area": 4141}, {"id": 7505091, "category_id": 189, "iscrowd": 0, "bbox": [250, 131, 13, 23], "area": 212}, {"id": 11385026, "category_id": 190, "iscrowd": 0, "bbox": [0, 265, 348, 235], "area": 18320}, {"id": 11385038, "category_id": 195, "iscrowd": 0, "bbox": [271, 0, 55, 149], "area": 2996}, {"id": 12436428, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 136, 216], "area": 18081}], "file_name": "000000213086.png", "image_id": 213086}, {"segments_info": [{"id": 7961470, "category_id": 1, "iscrowd": 0, "bbox": [139, 145, 118, 299], "area": 18677}, {"id": 4808053, "category_id": 40, "iscrowd": 0, "bbox": [213, 285, 34, 45], "area": 1222}, {"id": 5726830, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 375, 59], "area": 19454}, {"id": 7172459, "category_id": 185, "iscrowd": 0, "bbox": [0, 39, 375, 174], "area": 55037}, {"id": 11195102, "category_id": 193, "iscrowd": 0, "bbox": [0, 196, 375, 304], "area": 92048}], "file_name": "000000213171.png", "image_id": 213171}, {"segments_info": [{"id": 1315875, "category_id": 62, "iscrowd": 0, "bbox": [0, 432, 50, 30], "area": 1033}, {"id": 4291008, "category_id": 62, "iscrowd": 0, "bbox": [0, 372, 46, 66], "area": 2067}, {"id": 2249359, "category_id": 62, "iscrowd": 0, "bbox": [386, 349, 41, 110], "area": 3617}, {"id": 1396381, "category_id": 67, "iscrowd": 0, "bbox": [0, 414, 427, 225], "area": 72351}, {"id": 2903126, "category_id": 86, "iscrowd": 0, "bbox": [206, 325, 116, 186], "area": 15561}, {"id": 724304, "category_id": 86, "iscrowd": 0, "bbox": [61, 376, 60, 160], "area": 7139}, {"id": 857110, "category_id": 109, "iscrowd": 0, "bbox": [15, 132, 49, 151], "area": 5147}, {"id": 5862802, "category_id": 119, "iscrowd": 0, "bbox": [0, 33, 427, 441], "area": 82295}, {"id": 1325414, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 138, 379], "area": 23698}, {"id": 3696282, "category_id": 188, "iscrowd": 0, "bbox": [171, 61, 235, 383], "area": 13405}, {"id": 1463463, "category_id": 189, "iscrowd": 0, "bbox": [0, 414, 427, 226], "area": 1186}, {"id": 8293789, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 428], "area": 39350}], "file_name": "000000213224.png", "image_id": 213224}, {"segments_info": [{"id": 5198167, "category_id": 1, "iscrowd": 0, "bbox": [2, 11, 221, 620], "area": 82642}, {"id": 659232, "category_id": 3, "iscrowd": 0, "bbox": [117, 135, 90, 66], "area": 4359}, {"id": 924986, "category_id": 3, "iscrowd": 0, "bbox": [474, 134, 6, 7], "area": 32}, {"id": 1451321, "category_id": 3, "iscrowd": 0, "bbox": [439, 145, 14, 13], "area": 127}, {"id": 1516357, "category_id": 3, "iscrowd": 0, "bbox": [332, 136, 55, 31], "area": 1256}, {"id": 992059, "category_id": 3, "iscrowd": 0, "bbox": [192, 136, 153, 83], "area": 9677}, {"id": 1387872, "category_id": 3, "iscrowd": 0, "bbox": [464, 131, 12, 23], "area": 165}, {"id": 1320014, "category_id": 3, "iscrowd": 0, "bbox": [388, 133, 50, 38], "area": 1377}, {"id": 11128564, "category_id": 10, "iscrowd": 0, "bbox": [467, 89, 5, 6], "area": 16}, {"id": 3037355, "category_id": 10, "iscrowd": 0, "bbox": [374, 106, 7, 12], "area": 81}, {"id": 66062, "category_id": 10, "iscrowd": 0, "bbox": [361, 94, 4, 8], "area": 23}, {"id": 1318817, "category_id": 44, "iscrowd": 0, "bbox": [274, 404, 54, 133], "area": 4488}, {"id": 12178143, "category_id": 44, "iscrowd": 0, "bbox": [186, 403, 46, 127], "area": 4539}, {"id": 897237, "category_id": 44, "iscrowd": 0, "bbox": [231, 401, 48, 132], "area": 5112}, {"id": 4221063, "category_id": 54, "iscrowd": 0, "bbox": [346, 393, 33, 56], "area": 1331}, {"id": 990785, "category_id": 58, "iscrowd": 0, "bbox": [329, 359, 15, 34], "area": 382}, {"id": 2308196, "category_id": 58, "iscrowd": 0, "bbox": [257, 375, 73, 10], "area": 509}, {"id": 3753829, "category_id": 58, "iscrowd": 0, "bbox": [365, 339, 17, 30], "area": 352}, {"id": 4279398, "category_id": 58, "iscrowd": 0, "bbox": [321, 339, 14, 26], "area": 297}, {"id": 2636646, "category_id": 58, "iscrowd": 0, "bbox": [253, 342, 12, 25], "area": 226}, {"id": 2907530, "category_id": 58, "iscrowd": 0, "bbox": [317, 388, 33, 61], "area": 1456}, {"id": 2308719, "category_id": 58, "iscrowd": 0, "bbox": [297, 372, 31, 5], "area": 133}, {"id": 2503762, "category_id": 58, "iscrowd": 0, "bbox": [345, 371, 14, 22], "area": 246}, {"id": 4082276, "category_id": 58, "iscrowd": 0, "bbox": [336, 340, 14, 26], "area": 266}, {"id": 726322, "category_id": 58, "iscrowd": 0, "bbox": [376, 365, 19, 31], "area": 439}, {"id": 3556965, "category_id": 58, "iscrowd": 0, "bbox": [359, 366, 17, 26], "area": 337}, {"id": 3031395, "category_id": 58, "iscrowd": 0, "bbox": [379, 340, 19, 29], "area": 382}, {"id": 3623540, "category_id": 58, "iscrowd": 0, "bbox": [273, 365, 55, 8], "area": 350}, {"id": 3230835, "category_id": 58, "iscrowd": 1, "bbox": [257, 340, 111, 111], "area": 3323}, {"id": 3355306, "category_id": 100, "iscrowd": 0, "bbox": [317, 445, 139, 110], "area": 10802}, {"id": 331555, "category_id": 149, "iscrowd": 0, "bbox": [123, 146, 357, 178], "area": 20098}, {"id": 198417, "category_id": 184, "iscrowd": 0, "bbox": [160, 69, 110, 69], "area": 3811}, {"id": 857126, "category_id": 191, "iscrowd": 0, "bbox": [0, 162, 480, 478], "area": 53245}, {"id": 9939395, "category_id": 195, "iscrowd": 0, "bbox": [280, 413, 118, 156], "area": 1032}, {"id": 4678258, "category_id": 196, "iscrowd": 0, "bbox": [158, 334, 272, 124], "area": 9261}, {"id": 462622, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 164], "area": 49349}], "file_name": "000000213255.png", "image_id": 213255}, {"segments_info": [{"id": 5591885, "category_id": 62, "iscrowd": 0, "bbox": [50, 163, 38, 58], "area": 1507}, {"id": 5919577, "category_id": 65, "iscrowd": 0, "bbox": [0, 161, 555, 261], "area": 121453}, {"id": 3420468, "category_id": 93, "iscrowd": 0, "bbox": [0, 222, 546, 206], "area": 5149}, {"id": 1710112, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 110, 226], "area": 20989}, {"id": 7697524, "category_id": 133, "iscrowd": 0, "bbox": [263, 0, 313, 59], "area": 5204}, {"id": 5919581, "category_id": 141, "iscrowd": 0, "bbox": [426, 171, 102, 48], "area": 162}, {"id": 2763057, "category_id": 177, "iscrowd": 0, "bbox": [151, 32, 489, 230], "area": 62668}, {"id": 4210241, "category_id": 189, "iscrowd": 0, "bbox": [82, 176, 107, 44], "area": 2663}, {"id": 262917, "category_id": 190, "iscrowd": 0, "bbox": [541, 354, 99, 74], "area": 6354}, {"id": 5657962, "category_id": 199, "iscrowd": 0, "bbox": [91, 0, 549, 184], "area": 36600}], "file_name": "000000213422.png", "image_id": 213422}, {"segments_info": [{"id": 4744314, "category_id": 17, "iscrowd": 0, "bbox": [106, 107, 198, 285], "area": 42553}, {"id": 3761279, "category_id": 51, "iscrowd": 0, "bbox": [85, 312, 265, 121], "area": 13347}, {"id": 2313325, "category_id": 62, "iscrowd": 0, "bbox": [110, 2, 132, 111], "area": 9444}, {"id": 3435656, "category_id": 62, "iscrowd": 0, "bbox": [222, 7, 186, 284], "area": 34137}, {"id": 8767194, "category_id": 84, "iscrowd": 0, "bbox": [201, 64, 20, 21], "area": 300}, {"id": 8369611, "category_id": 84, "iscrowd": 0, "bbox": [202, 30, 31, 26], "area": 656}, {"id": 3042974, "category_id": 84, "iscrowd": 0, "bbox": [283, 0, 6, 25], "area": 141}, {"id": 3829141, "category_id": 84, "iscrowd": 0, "bbox": [12, 37, 24, 76], "area": 1531}, {"id": 3371941, "category_id": 84, "iscrowd": 0, "bbox": [276, 1, 7, 24], "area": 138}, {"id": 5807030, "category_id": 84, "iscrowd": 0, "bbox": [14, 125, 25, 84], "area": 1881}, {"id": 2055293, "category_id": 84, "iscrowd": 0, "bbox": [4, 125, 11, 84], "area": 895}, {"id": 3638453, "category_id": 84, "iscrowd": 0, "bbox": [239, 0, 55, 25], "area": 1014}, {"id": 2383741, "category_id": 84, "iscrowd": 0, "bbox": [0, 42, 14, 70], "area": 813}, {"id": 3520482, "category_id": 118, "iscrowd": 0, "bbox": [0, 211, 109, 97], "area": 5886}, {"id": 596784, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 240, 220], "area": 10406}, {"id": 6394280, "category_id": 189, "iscrowd": 0, "bbox": [57, 351, 351, 149], "area": 33406}, {"id": 3102311, "category_id": 200, "iscrowd": 0, "bbox": [0, 208, 408, 292], "area": 25938}], "file_name": "000000213445.png", "image_id": 213445}, {"segments_info": [{"id": 2697776, "category_id": 1, "iscrowd": 0, "bbox": [124, 140, 231, 467], "area": 59090}, {"id": 2566191, "category_id": 1, "iscrowd": 0, "bbox": [276, 134, 204, 496], "area": 49540}, {"id": 4015693, "category_id": 19, "iscrowd": 0, "bbox": [164, 449, 134, 189], "area": 19772}, {"id": 9011568, "category_id": 44, "iscrowd": 0, "bbox": [42, 316, 22, 39], "area": 593}, {"id": 10589324, "category_id": 44, "iscrowd": 0, "bbox": [91, 276, 13, 23], "area": 215}, {"id": 7758687, "category_id": 44, "iscrowd": 0, "bbox": [62, 318, 8, 34], "area": 172}, {"id": 3557442, "category_id": 44, "iscrowd": 0, "bbox": [60, 358, 9, 31], "area": 233}, {"id": 5201499, "category_id": 44, "iscrowd": 0, "bbox": [51, 360, 10, 30], "area": 219}, {"id": 11703159, "category_id": 44, "iscrowd": 0, "bbox": [28, 260, 13, 38], "area": 345}, {"id": 13352119, "category_id": 44, "iscrowd": 0, "bbox": [71, 268, 11, 32], "area": 266}, {"id": 4141096, "category_id": 44, "iscrowd": 0, "bbox": [77, 314, 14, 40], "area": 402}, {"id": 8820608, "category_id": 44, "iscrowd": 0, "bbox": [41, 263, 10, 36], "area": 273}, {"id": 8947584, "category_id": 44, "iscrowd": 0, "bbox": [50, 264, 9, 35], "area": 215}, {"id": 1842204, "category_id": 44, "iscrowd": 0, "bbox": [89, 358, 11, 34], "area": 284}, {"id": 9806038, "category_id": 44, "iscrowd": 0, "bbox": [58, 277, 12, 23], "area": 225}, {"id": 5261644, "category_id": 44, "iscrowd": 0, "bbox": [37, 361, 11, 29], "area": 264}, {"id": 4413552, "category_id": 44, "iscrowd": 1, "bbox": [441, 131, 39, 72], "area": 1899}, {"id": 7240354, "category_id": 61, "iscrowd": 0, "bbox": [252, 327, 47, 19], "area": 661}, {"id": 6315094, "category_id": 82, "iscrowd": 0, "bbox": [11, 228, 132, 249], "area": 22077}, {"id": 13811864, "category_id": 85, "iscrowd": 0, "bbox": [269, 0, 16, 17], "area": 233}, {"id": 5529452, "category_id": 100, "iscrowd": 0, "bbox": [0, 123, 237, 149], "area": 20986}, {"id": 7964279, "category_id": 156, "iscrowd": 0, "bbox": [115, 269, 257, 200], "area": 10110}, {"id": 6194341, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 480, 329], "area": 22137}, {"id": 2311511, "category_id": 189, "iscrowd": 0, "bbox": [0, 306, 28, 174], "area": 3069}, {"id": 5658707, "category_id": 190, "iscrowd": 0, "bbox": [0, 465, 383, 175], "area": 24745}, {"id": 4281712, "category_id": 196, "iscrowd": 0, "bbox": [306, 123, 156, 130], "area": 10870}, {"id": 7435130, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 240], "area": 45997}], "file_name": "000000213547.png", "image_id": 213547}, {"segments_info": [{"id": 3285282, "category_id": 1, "iscrowd": 0, "bbox": [520, 380, 30, 46], "area": 765}, {"id": 3353130, "category_id": 1, "iscrowd": 0, "bbox": [548, 378, 16, 48], "area": 621}, {"id": 1318200, "category_id": 3, "iscrowd": 0, "bbox": [200, 377, 74, 49], "area": 2376}, {"id": 1844556, "category_id": 3, "iscrowd": 0, "bbox": [260, 383, 59, 42], "area": 1664}, {"id": 4604487, "category_id": 3, "iscrowd": 0, "bbox": [431, 390, 51, 35], "area": 985}, {"id": 3423059, "category_id": 3, "iscrowd": 0, "bbox": [315, 391, 39, 32], "area": 830}, {"id": 3030114, "category_id": 3, "iscrowd": 0, "bbox": [93, 398, 94, 28], "area": 2136}, {"id": 4607637, "category_id": 3, "iscrowd": 0, "bbox": [393, 398, 70, 28], "area": 1524}, {"id": 13156185, "category_id": 10, "iscrowd": 0, "bbox": [511, 358, 12, 9], "area": 89}, {"id": 1251144, "category_id": 13, "iscrowd": 0, "bbox": [132, 88, 125, 129], "area": 12987}, {"id": 4673895, "category_id": 130, "iscrowd": 0, "bbox": [422, 285, 152, 112], "area": 3937}, {"id": 4666441, "category_id": 187, "iscrowd": 0, "bbox": [251, 0, 310, 298], "area": 54509}, {"id": 1319480, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 177762}], "file_name": "000000213593.png", "image_id": 213593}, {"segments_info": [{"id": 1643536, "category_id": 1, "iscrowd": 0, "bbox": [103, 448, 34, 31], "area": 503}, {"id": 5786186, "category_id": 3, "iscrowd": 0, "bbox": [359, 445, 121, 148], "area": 14757}, {"id": 8610134, "category_id": 4, "iscrowd": 0, "bbox": [416, 580, 64, 60], "area": 2232}, {"id": 6380890, "category_id": 6, "iscrowd": 0, "bbox": [17, 365, 368, 202], "area": 57937}, {"id": 9145484, "category_id": 149, "iscrowd": 0, "bbox": [0, 526, 480, 114], "area": 34590}, {"id": 9214353, "category_id": 184, "iscrowd": 0, "bbox": [155, 0, 325, 304], "area": 17771}, {"id": 16511452, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 270], "area": 78319}, {"id": 2629401, "category_id": 191, "iscrowd": 0, "bbox": [0, 537, 49, 39], "area": 968}, {"id": 8156543, "category_id": 197, "iscrowd": 0, "bbox": [0, 53, 480, 484], "area": 92095}], "file_name": "000000213605.png", "image_id": 213605}, {"segments_info": [{"id": 8223095, "category_id": 7, "iscrowd": 0, "bbox": [1, 4, 639, 431], "area": 247547}, {"id": 6450055, "category_id": 171, "iscrowd": 0, "bbox": [537, 0, 103, 37], "area": 1210}, {"id": 10596802, "category_id": 190, "iscrowd": 0, "bbox": [0, 357, 640, 123], "area": 52561}], "file_name": "000000213816.png", "image_id": 213816}, {"segments_info": [{"id": 4927525, "category_id": 1, "iscrowd": 0, "bbox": [0, 204, 35, 82], "area": 1651}, {"id": 6181968, "category_id": 1, "iscrowd": 0, "bbox": [412, 205, 27, 54], "area": 523}, {"id": 7359815, "category_id": 1, "iscrowd": 0, "bbox": [277, 192, 112, 229], "area": 11513}, {"id": 4607315, "category_id": 1, "iscrowd": 0, "bbox": [492, 202, 20, 38], "area": 487}, {"id": 6703431, "category_id": 1, "iscrowd": 0, "bbox": [201, 172, 110, 139], "area": 3274}, {"id": 5542765, "category_id": 37, "iscrowd": 0, "bbox": [408, 240, 4, 2], "area": 8}, {"id": 5747100, "category_id": 37, "iscrowd": 0, "bbox": [394, 219, 15, 8], "area": 81}, {"id": 7497053, "category_id": 43, "iscrowd": 0, "bbox": [204, 173, 215, 185], "area": 1762}, {"id": 5127205, "category_id": 62, "iscrowd": 0, "bbox": [21, 236, 32, 43], "area": 710}, {"id": 5844504, "category_id": 62, "iscrowd": 0, "bbox": [24, 233, 4, 10], "area": 22}, {"id": 3487036, "category_id": 128, "iscrowd": 0, "bbox": [84, 14, 164, 75], "area": 4983}, {"id": 5853514, "category_id": 145, "iscrowd": 0, "bbox": [0, 254, 640, 173], "area": 90842}, {"id": 2707802, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 121], "area": 52623}, {"id": 5136223, "category_id": 185, "iscrowd": 0, "bbox": [0, 66, 595, 222], "area": 96405}, {"id": 9536386, "category_id": 199, "iscrowd": 0, "bbox": [576, 115, 64, 141], "area": 7025}], "file_name": "000000213830.png", "image_id": 213830}, {"segments_info": [{"id": 5719941, "category_id": 53, "iscrowd": 0, "bbox": [0, 22, 246, 397], "area": 43648}, {"id": 6710171, "category_id": 53, "iscrowd": 0, "bbox": [327, 42, 275, 279], "area": 60747}, {"id": 4804174, "category_id": 53, "iscrowd": 0, "bbox": [501, 0, 139, 193], "area": 13685}, {"id": 2132432, "category_id": 55, "iscrowd": 0, "bbox": [62, 136, 276, 281], "area": 57415}, {"id": 5791072, "category_id": 122, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 95487}], "file_name": "000000213935.png", "image_id": 213935}, {"segments_info": [{"id": 5729166, "category_id": 1, "iscrowd": 0, "bbox": [234, 151, 220, 218], "area": 14492}, {"id": 2767955, "category_id": 1, "iscrowd": 0, "bbox": [451, 18, 123, 204], "area": 11086}, {"id": 3032157, "category_id": 4, "iscrowd": 0, "bbox": [352, 282, 117, 107], "area": 6002}, {"id": 2830646, "category_id": 4, "iscrowd": 0, "bbox": [500, 118, 129, 101], "area": 5210}, {"id": 5085080, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 382, 88], "area": 18750}, {"id": 5994128, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 629, 425], "area": 200774}], "file_name": "000000214192.png", "image_id": 214192}, {"segments_info": [{"id": 4407877, "category_id": 3, "iscrowd": 0, "bbox": [304, 487, 121, 48], "area": 3499}, {"id": 2696762, "category_id": 3, "iscrowd": 0, "bbox": [29, 487, 398, 140], "area": 37279}, {"id": 5394243, "category_id": 3, "iscrowd": 0, "bbox": [328, 454, 99, 35], "area": 1980}, {"id": 5062365, "category_id": 13, "iscrowd": 0, "bbox": [98, 180, 220, 255], "area": 44932}, {"id": 4410978, "category_id": 100, "iscrowd": 0, "bbox": [220, 472, 35, 19], "area": 494}, {"id": 3160136, "category_id": 128, "iscrowd": 0, "bbox": [0, 290, 427, 205], "area": 28634}, {"id": 3291199, "category_id": 149, "iscrowd": 0, "bbox": [0, 492, 427, 148], "area": 15817}, {"id": 9670287, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 467], "area": 96014}, {"id": 13484733, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 254], "area": 25587}, {"id": 5992835, "category_id": 191, "iscrowd": 0, "bbox": [31, 456, 396, 184], "area": 2681}, {"id": 3163214, "category_id": 193, "iscrowd": 0, "bbox": [0, 437, 427, 92], "area": 9394}], "file_name": "000000214200.png", "image_id": 214200}, {"segments_info": [{"id": 8028813, "category_id": 5, "iscrowd": 0, "bbox": [253, 311, 151, 48], "area": 3077}, {"id": 10001306, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 439], "area": 277772}], "file_name": "000000214205.png", "image_id": 214205}, {"segments_info": [{"id": 4744060, "category_id": 44, "iscrowd": 0, "bbox": [377, 260, 35, 121], "area": 1315}, {"id": 5539213, "category_id": 44, "iscrowd": 0, "bbox": [284, 231, 43, 149], "area": 4075}, {"id": 2247032, "category_id": 44, "iscrowd": 0, "bbox": [239, 231, 45, 128], "area": 3623}, {"id": 3759742, "category_id": 44, "iscrowd": 0, "bbox": [197, 236, 37, 125], "area": 1891}, {"id": 5209763, "category_id": 44, "iscrowd": 0, "bbox": [335, 276, 33, 103], "area": 2862}, {"id": 1849180, "category_id": 47, "iscrowd": 0, "bbox": [428, 262, 19, 17], "area": 251}, {"id": 4158103, "category_id": 47, "iscrowd": 0, "bbox": [187, 320, 56, 39], "area": 1486}, {"id": 725358, "category_id": 84, "iscrowd": 0, "bbox": [392, 274, 50, 104], "area": 4620}, {"id": 1665162, "category_id": 122, "iscrowd": 0, "bbox": [234, 333, 23, 26], "area": 326}, {"id": 3160127, "category_id": 177, "iscrowd": 0, "bbox": [15, 347, 501, 80], "area": 26216}, {"id": 12311269, "category_id": 196, "iscrowd": 0, "bbox": [252, 348, 47, 26], "area": 314}, {"id": 4744825, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 196831}], "file_name": "000000214224.png", "image_id": 214224}, {"segments_info": [{"id": 2967122, "category_id": 1, "iscrowd": 0, "bbox": [122, 194, 45, 88], "area": 1965}, {"id": 5071746, "category_id": 1, "iscrowd": 0, "bbox": [482, 158, 30, 104], "area": 1658}, {"id": 3494757, "category_id": 1, "iscrowd": 0, "bbox": [117, 196, 10, 21], "area": 130}, {"id": 3494242, "category_id": 1, "iscrowd": 0, "bbox": [140, 192, 73, 83], "area": 1818}, {"id": 7574938, "category_id": 1, "iscrowd": 0, "bbox": [568, 61, 72, 279], "area": 13963}, {"id": 2571851, "category_id": 1, "iscrowd": 0, "bbox": [93, 193, 38, 91], "area": 1044}, {"id": 5994105, "category_id": 1, "iscrowd": 0, "bbox": [229, 94, 224, 263], "area": 17349}, {"id": 4087662, "category_id": 1, "iscrowd": 0, "bbox": [80, 190, 36, 96], "area": 1526}, {"id": 2768733, "category_id": 1, "iscrowd": 0, "bbox": [25, 190, 25, 51], "area": 901}, {"id": 2836056, "category_id": 1, "iscrowd": 0, "bbox": [108, 196, 12, 20], "area": 175}, {"id": 2769501, "category_id": 1, "iscrowd": 0, "bbox": [44, 185, 20, 31], "area": 399}, {"id": 3491684, "category_id": 1, "iscrowd": 0, "bbox": [189, 189, 60, 86], "area": 2344}, {"id": 3560789, "category_id": 1, "iscrowd": 0, "bbox": [201, 174, 19, 29], "area": 303}, {"id": 4019296, "category_id": 1, "iscrowd": 1, "bbox": [1, 55, 570, 240], "area": 12143}, {"id": 7179415, "category_id": 15, "iscrowd": 0, "bbox": [402, 213, 52, 19], "area": 881}, {"id": 12768732, "category_id": 15, "iscrowd": 0, "bbox": [349, 231, 93, 10], "area": 592}, {"id": 10002093, "category_id": 37, "iscrowd": 0, "bbox": [267, 310, 38, 38], "area": 1065}, {"id": 2767679, "category_id": 161, "iscrowd": 0, "bbox": [17, 84, 256, 125], "area": 4178}, {"id": 6915728, "category_id": 166, "iscrowd": 0, "bbox": [0, 98, 501, 149], "area": 17619}, {"id": 1514525, "category_id": 184, "iscrowd": 0, "bbox": [286, 0, 192, 145], "area": 10890}, {"id": 3688524, "category_id": 185, "iscrowd": 0, "bbox": [354, 150, 61, 92], "area": 2687}, {"id": 1185046, "category_id": 187, "iscrowd": 0, "bbox": [39, 0, 601, 189], "area": 53271}, {"id": 9941695, "category_id": 190, "iscrowd": 0, "bbox": [0, 223, 575, 105], "area": 16675}, {"id": 10468813, "category_id": 191, "iscrowd": 0, "bbox": [386, 216, 194, 41], "area": 715}, {"id": 5144440, "category_id": 193, "iscrowd": 0, "bbox": [0, 248, 640, 179], "area": 82708}, {"id": 2701887, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 587, 240], "area": 3393}, {"id": 3098184, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 271, 202], "area": 10423}], "file_name": "000000214539.png", "image_id": 214539}, {"segments_info": [{"id": 3554372, "category_id": 1, "iscrowd": 0, "bbox": [232, 320, 133, 51], "area": 2322}, {"id": 2829361, "category_id": 1, "iscrowd": 0, "bbox": [261, 385, 122, 58], "area": 2441}, {"id": 7369849, "category_id": 42, "iscrowd": 0, "bbox": [239, 355, 61, 18], "area": 480}, {"id": 7631477, "category_id": 42, "iscrowd": 0, "bbox": [226, 413, 70, 28], "area": 708}, {"id": 8025715, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 267138}], "file_name": "000000214703.png", "image_id": 214703}, {"segments_info": [{"id": 2632273, "category_id": 1, "iscrowd": 0, "bbox": [21, 194, 288, 139], "area": 20844}, {"id": 2897212, "category_id": 49, "iscrowd": 0, "bbox": [102, 367, 134, 37], "area": 1065}, {"id": 3886179, "category_id": 61, "iscrowd": 0, "bbox": [122, 322, 90, 60], "area": 4276}, {"id": 2238026, "category_id": 62, "iscrowd": 0, "bbox": [49, 221, 86, 51], "area": 2229}, {"id": 9212583, "category_id": 62, "iscrowd": 0, "bbox": [261, 223, 89, 86], "area": 6375}, {"id": 3226491, "category_id": 63, "iscrowd": 0, "bbox": [177, 116, 198, 110], "area": 14387}, {"id": 12304086, "category_id": 63, "iscrowd": 0, "bbox": [58, 143, 133, 77], "area": 6438}, {"id": 4738894, "category_id": 64, "iscrowd": 0, "bbox": [132, 25, 78, 132], "area": 5226}, {"id": 3490625, "category_id": 64, "iscrowd": 0, "bbox": [296, 6, 79, 132], "area": 5072}, {"id": 8095357, "category_id": 64, "iscrowd": 0, "bbox": [228, 36, 27, 34], "area": 496}, {"id": 9412281, "category_id": 67, "iscrowd": 0, "bbox": [1, 309, 374, 181], "area": 56227}, {"id": 11446962, "category_id": 130, "iscrowd": 0, "bbox": [110, 16, 38, 143], "area": 2560}, {"id": 12758704, "category_id": 180, "iscrowd": 0, "bbox": [153, 0, 141, 55], "area": 5564}, {"id": 10127232, "category_id": 181, "iscrowd": 0, "bbox": [186, 35, 101, 48], "area": 2575}, {"id": 1844774, "category_id": 184, "iscrowd": 0, "bbox": [292, 10, 50, 97], "area": 338}, {"id": 6716312, "category_id": 189, "iscrowd": 0, "bbox": [0, 181, 375, 319], "area": 6757}, {"id": 5263450, "category_id": 190, "iscrowd": 0, "bbox": [40, 141, 126, 39], "area": 1258}, {"id": 8550791, "category_id": 195, "iscrowd": 0, "bbox": [0, 185, 375, 315], "area": 9586}, {"id": 11250356, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 174], "area": 20453}, {"id": 6849178, "category_id": 200, "iscrowd": 0, "bbox": [196, 212, 179, 97], "area": 3218}], "file_name": "000000214720.png", "image_id": 214720}, {"segments_info": [{"id": 3946038, "category_id": 1, "iscrowd": 0, "bbox": [361, 115, 56, 134], "area": 2873}, {"id": 5124640, "category_id": 1, "iscrowd": 0, "bbox": [233, 126, 63, 122], "area": 2428}, {"id": 3025452, "category_id": 19, "iscrowd": 0, "bbox": [253, 193, 61, 114], "area": 4617}, {"id": 3355964, "category_id": 19, "iscrowd": 0, "bbox": [324, 167, 151, 155], "area": 10090}, {"id": 10923436, "category_id": 154, "iscrowd": 0, "bbox": [0, 95, 640, 329], "area": 143214}, {"id": 13417379, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 244], "area": 99061}, {"id": 7169369, "category_id": 198, "iscrowd": 0, "bbox": [0, 93, 640, 164], "area": 8632}], "file_name": "000000214753.png", "image_id": 214753}, {"segments_info": [{"id": 5337723, "category_id": 1, "iscrowd": 0, "bbox": [0, 3, 640, 472], "area": 233937}, {"id": 2109486, "category_id": 77, "iscrowd": 0, "bbox": [230, 232, 183, 241], "area": 36226}], "file_name": "000000214869.png", "image_id": 214869}, {"segments_info": [{"id": 8616574, "category_id": 1, "iscrowd": 0, "bbox": [222, 184, 167, 174], "area": 15251}, {"id": 4472388, "category_id": 1, "iscrowd": 0, "bbox": [115, 149, 130, 232], "area": 16720}, {"id": 8421282, "category_id": 28, "iscrowd": 0, "bbox": [245, 1, 392, 257], "area": 40116}, {"id": 4147530, "category_id": 44, "iscrowd": 0, "bbox": [197, 416, 20, 34], "area": 494}, {"id": 5532275, "category_id": 44, "iscrowd": 0, "bbox": [219, 413, 19, 36], "area": 462}, {"id": 9210503, "category_id": 47, "iscrowd": 0, "bbox": [247, 364, 37, 41], "area": 1024}, {"id": 4210753, "category_id": 51, "iscrowd": 0, "bbox": [258, 434, 43, 17], "area": 609}, {"id": 6711405, "category_id": 62, "iscrowd": 0, "bbox": [257, 240, 159, 205], "area": 9104}, {"id": 4343643, "category_id": 62, "iscrowd": 0, "bbox": [47, 240, 94, 187], "area": 6709}, {"id": 9999503, "category_id": 154, "iscrowd": 0, "bbox": [0, 25, 640, 128], "area": 14070}, {"id": 11115662, "category_id": 155, "iscrowd": 0, "bbox": [33, 12, 607, 32], "area": 4569}, {"id": 4670783, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 55, 58], "area": 900}, {"id": 13551037, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 29], "area": 10231}, {"id": 8881540, "category_id": 191, "iscrowd": 0, "bbox": [0, 195, 640, 256], "area": 59485}, {"id": 4744788, "category_id": 193, "iscrowd": 0, "bbox": [0, 62, 640, 296], "area": 90694}], "file_name": "000000215072.png", "image_id": 215072}, {"segments_info": [{"id": 2436416, "category_id": 1, "iscrowd": 0, "bbox": [168, 128, 156, 380], "area": 26452}, {"id": 4155755, "category_id": 44, "iscrowd": 0, "bbox": [276, 245, 38, 103], "area": 3222}, {"id": 4279383, "category_id": 44, "iscrowd": 0, "bbox": [287, 480, 44, 80], "area": 1416}, {"id": 4804468, "category_id": 44, "iscrowd": 0, "bbox": [296, 204, 43, 120], "area": 3006}, {"id": 1463670, "category_id": 44, "iscrowd": 0, "bbox": [299, 433, 34, 57], "area": 1338}, {"id": 3554379, "category_id": 44, "iscrowd": 0, "bbox": [272, 517, 57, 108], "area": 4190}, {"id": 8227217, "category_id": 82, "iscrowd": 0, "bbox": [0, 2, 500, 630], "area": 233700}, {"id": 6712175, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 150, 3], "area": 377}, {"id": 7566453, "category_id": 199, "iscrowd": 0, "bbox": [455, 0, 43, 74], "area": 1933}, {"id": 1909541, "category_id": 200, "iscrowd": 0, "bbox": [469, 337, 79, 236], "area": 11686}], "file_name": "000000215114.png", "image_id": 215114}, {"segments_info": [{"id": 4150372, "category_id": 24, "iscrowd": 0, "bbox": [193, 204, 43, 23], "area": 545}, {"id": 5202805, "category_id": 24, "iscrowd": 0, "bbox": [325, 309, 80, 102], "area": 6149}, {"id": 3753809, "category_id": 24, "iscrowd": 0, "bbox": [161, 291, 171, 124], "area": 12711}, {"id": 3226178, "category_id": 24, "iscrowd": 0, "bbox": [14, 269, 205, 153], "area": 11573}, {"id": 3820120, "category_id": 24, "iscrowd": 0, "bbox": [161, 200, 46, 30], "area": 657}, {"id": 6516346, "category_id": 24, "iscrowd": 0, "bbox": [309, 268, 140, 71], "area": 4333}, {"id": 5005420, "category_id": 24, "iscrowd": 0, "bbox": [233, 199, 57, 34], "area": 1301}, {"id": 15788770, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 129], "area": 76997}, {"id": 6526886, "category_id": 192, "iscrowd": 0, "bbox": [0, 103, 640, 377], "area": 192042}, {"id": 7580356, "category_id": 193, "iscrowd": 0, "bbox": [0, 197, 19, 19], "area": 315}], "file_name": "000000215245.png", "image_id": 215245}, {"segments_info": [{"id": 9017526, "category_id": 1, "iscrowd": 0, "bbox": [20, 79, 205, 368], "area": 22989}, {"id": 6511759, "category_id": 1, "iscrowd": 0, "bbox": [177, 96, 104, 354], "area": 18370}, {"id": 2503019, "category_id": 63, "iscrowd": 0, "bbox": [0, 221, 119, 155], "area": 11495}, {"id": 2236719, "category_id": 75, "iscrowd": 0, "bbox": [305, 332, 26, 12], "area": 174}, {"id": 13554399, "category_id": 75, "iscrowd": 0, "bbox": [276, 160, 10, 9], "area": 67}, {"id": 14739951, "category_id": 75, "iscrowd": 0, "bbox": [163, 147, 18, 13], "area": 161}, {"id": 12895965, "category_id": 75, "iscrowd": 0, "bbox": [261, 159, 16, 33], "area": 79}, {"id": 13816304, "category_id": 75, "iscrowd": 0, "bbox": [199, 162, 17, 16], "area": 190}, {"id": 1052956, "category_id": 112, "iscrowd": 0, "bbox": [0, 132, 27, 103], "area": 1770}, {"id": 2041908, "category_id": 141, "iscrowd": 0, "bbox": [152, 311, 93, 81], "area": 2835}, {"id": 12238789, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 336, 171], "area": 26315}, {"id": 2438732, "category_id": 188, "iscrowd": 0, "bbox": [153, 285, 44, 40], "area": 1089}, {"id": 1119781, "category_id": 189, "iscrowd": 0, "bbox": [237, 326, 99, 90], "area": 3009}, {"id": 3421762, "category_id": 195, "iscrowd": 0, "bbox": [247, 313, 74, 90], "area": 2311}, {"id": 7575207, "category_id": 199, "iscrowd": 0, "bbox": [0, 37, 336, 329], "area": 39221}, {"id": 8884126, "category_id": 200, "iscrowd": 0, "bbox": [0, 370, 336, 130], "area": 33989}], "file_name": "000000215259.png", "image_id": 215259}, {"segments_info": [{"id": 2501944, "category_id": 50, "iscrowd": 0, "bbox": [502, 413, 7, 24], "area": 70}, {"id": 6451840, "category_id": 51, "iscrowd": 0, "bbox": [506, 432, 33, 47], "area": 386}, {"id": 6518407, "category_id": 51, "iscrowd": 0, "bbox": [514, 432, 29, 48], "area": 288}, {"id": 6583685, "category_id": 51, "iscrowd": 0, "bbox": [497, 437, 38, 43], "area": 359}, {"id": 4345687, "category_id": 51, "iscrowd": 0, "bbox": [599, 403, 12, 77], "area": 206}, {"id": 3160127, "category_id": 51, "iscrowd": 0, "bbox": [610, 424, 20, 38], "area": 559}, {"id": 6977666, "category_id": 51, "iscrowd": 0, "bbox": [479, 437, 38, 43], "area": 620}, {"id": 7373973, "category_id": 51, "iscrowd": 0, "bbox": [488, 437, 37, 43], "area": 326}, {"id": 5264216, "category_id": 78, "iscrowd": 0, "bbox": [209, 212, 248, 141], "area": 32490}, {"id": 7638433, "category_id": 186, "iscrowd": 0, "bbox": [151, 0, 362, 19], "area": 5171}, {"id": 3162717, "category_id": 188, "iscrowd": 0, "bbox": [0, 16, 640, 464], "area": 143636}, {"id": 7834781, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 103470}], "file_name": "000000215644.png", "image_id": 215644}, {"segments_info": [{"id": 3771542, "category_id": 1, "iscrowd": 0, "bbox": [178, 113, 119, 151], "area": 10617}, {"id": 4296599, "category_id": 1, "iscrowd": 0, "bbox": [347, 132, 122, 126], "area": 9434}, {"id": 8939614, "category_id": 8, "iscrowd": 0, "bbox": [5, 92, 633, 381], "area": 133878}, {"id": 2366494, "category_id": 10, "iscrowd": 0, "bbox": [371, 0, 144, 171], "area": 16541}, {"id": 5207022, "category_id": 28, "iscrowd": 0, "bbox": [77, 30, 343, 93], "area": 22569}, {"id": 986140, "category_id": 189, "iscrowd": 0, "bbox": [278, 207, 112, 59], "area": 3667}, {"id": 6180794, "category_id": 195, "iscrowd": 0, "bbox": [305, 187, 29, 31], "area": 561}, {"id": 3747904, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 253], "area": 36286}, {"id": 2235698, "category_id": 199, "iscrowd": 0, "bbox": [104, 115, 59, 56], "area": 2112}], "file_name": "000000215723.png", "image_id": 215723}, {"segments_info": [{"id": 10132644, "category_id": 47, "iscrowd": 0, "bbox": [467, 125, 35, 48], "area": 526}, {"id": 2631556, "category_id": 47, "iscrowd": 0, "bbox": [474, 139, 67, 61], "area": 2881}, {"id": 8025975, "category_id": 73, "iscrowd": 0, "bbox": [133, 35, 414, 360], "area": 70910}, {"id": 4609112, "category_id": 74, "iscrowd": 0, "bbox": [561, 233, 78, 59], "area": 2821}, {"id": 3617332, "category_id": 76, "iscrowd": 0, "bbox": [411, 164, 81, 35], "area": 749}, {"id": 10396579, "category_id": 76, "iscrowd": 0, "bbox": [164, 202, 303, 83], "area": 14942}, {"id": 7098428, "category_id": 84, "iscrowd": 0, "bbox": [301, 2, 40, 47], "area": 861}, {"id": 1315161, "category_id": 84, "iscrowd": 0, "bbox": [242, 0, 22, 41], "area": 354}, {"id": 11171668, "category_id": 84, "iscrowd": 0, "bbox": [251, 0, 23, 43], "area": 349}, {"id": 10981515, "category_id": 84, "iscrowd": 0, "bbox": [258, 0, 23, 43], "area": 339}, {"id": 4667551, "category_id": 84, "iscrowd": 0, "bbox": [387, 10, 35, 52], "area": 418}, {"id": 12299937, "category_id": 84, "iscrowd": 0, "bbox": [331, 1, 61, 52], "area": 1663}, {"id": 9263681, "category_id": 84, "iscrowd": 0, "bbox": [326, 1, 29, 48], "area": 358}, {"id": 9076094, "category_id": 84, "iscrowd": 0, "bbox": [268, 0, 23, 44], "area": 308}, {"id": 6638144, "category_id": 84, "iscrowd": 0, "bbox": [398, 1, 55, 101], "area": 1476}, {"id": 10787227, "category_id": 84, "iscrowd": 0, "bbox": [394, 0, 47, 90], "area": 1074}, {"id": 10722204, "category_id": 84, "iscrowd": 0, "bbox": [289, 0, 28, 46], "area": 464}, {"id": 1971229, "category_id": 84, "iscrowd": 0, "bbox": [273, 0, 34, 45], "area": 759}, {"id": 7037534, "category_id": 84, "iscrowd": 0, "bbox": [363, 1, 51, 54], "area": 632}, {"id": 2904208, "category_id": 122, "iscrowd": 0, "bbox": [476, 90, 25, 37], "area": 537}, {"id": 4609385, "category_id": 156, "iscrowd": 0, "bbox": [400, 99, 79, 35], "area": 1404}, {"id": 14342097, "category_id": 181, "iscrowd": 0, "bbox": [505, 0, 135, 107], "area": 7578}, {"id": 5205129, "category_id": 189, "iscrowd": 0, "bbox": [0, 126, 640, 301], "area": 84405}, {"id": 6381673, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 640, 221], "area": 55561}, {"id": 657688, "category_id": 199, "iscrowd": 0, "bbox": [117, 59, 52, 27], "area": 857}], "file_name": "000000215778.png", "image_id": 215778}, {"segments_info": [{"id": 7631755, "category_id": 1, "iscrowd": 0, "bbox": [454, 2, 186, 162], "area": 17809}, {"id": 6067616, "category_id": 53, "iscrowd": 0, "bbox": [87, 128, 255, 245], "area": 48213}, {"id": 5853514, "category_id": 77, "iscrowd": 0, "bbox": [393, 75, 137, 170], "area": 18818}, {"id": 8882081, "category_id": 122, "iscrowd": 0, "bbox": [111, 156, 26, 22], "area": 88}, {"id": 10193019, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 221452}], "file_name": "000000216277.png", "image_id": 216277}, {"segments_info": [{"id": 2760772, "category_id": 1, "iscrowd": 0, "bbox": [291, 0, 89, 160], "area": 7133}, {"id": 10267563, "category_id": 1, "iscrowd": 0, "bbox": [193, 124, 187, 278], "area": 16845}, {"id": 5590598, "category_id": 1, "iscrowd": 0, "bbox": [478, 42, 124, 198], "area": 11201}, {"id": 7180691, "category_id": 43, "iscrowd": 0, "bbox": [295, 125, 39, 42], "area": 1098}, {"id": 5071466, "category_id": 85, "iscrowd": 0, "bbox": [536, 155, 7, 5], "area": 31}, {"id": 7771778, "category_id": 145, "iscrowd": 0, "bbox": [0, 106, 640, 321], "area": 160050}, {"id": 13613240, "category_id": 168, "iscrowd": 0, "bbox": [64, 99, 31, 18], "area": 373}, {"id": 3685151, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 184], "area": 76028}], "file_name": "000000216296.png", "image_id": 216296}, {"segments_info": [{"id": 6197934, "category_id": 10, "iscrowd": 0, "bbox": [583, 337, 23, 53], "area": 919}, {"id": 7960944, "category_id": 85, "iscrowd": 0, "bbox": [108, 96, 156, 149], "area": 18400}, {"id": 6974276, "category_id": 130, "iscrowd": 0, "bbox": [354, 422, 33, 29], "area": 783}, {"id": 3356237, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 83, 467], "area": 28405}, {"id": 16578794, "category_id": 187, "iscrowd": 0, "bbox": [424, 0, 216, 467], "area": 68484}, {"id": 7830149, "category_id": 197, "iscrowd": 0, "bbox": [15, 0, 625, 467], "area": 155525}], "file_name": "000000216419.png", "image_id": 216419}, {"segments_info": [{"id": 2697768, "category_id": 62, "iscrowd": 0, "bbox": [334, 253, 68, 134], "area": 3923}, {"id": 3816764, "category_id": 62, "iscrowd": 0, "bbox": [293, 244, 51, 135], "area": 2761}, {"id": 3618355, "category_id": 62, "iscrowd": 0, "bbox": [386, 270, 82, 181], "area": 5458}, {"id": 1118738, "category_id": 63, "iscrowd": 0, "bbox": [0, 260, 118, 179], "area": 17336}, {"id": 11249571, "category_id": 67, "iscrowd": 0, "bbox": [327, 239, 267, 213], "area": 24771}, {"id": 6776420, "category_id": 78, "iscrowd": 0, "bbox": [286, 169, 53, 38], "area": 1881}, {"id": 8287345, "category_id": 79, "iscrowd": 0, "bbox": [537, 228, 103, 128], "area": 4995}, {"id": 5462104, "category_id": 81, "iscrowd": 0, "bbox": [369, 245, 67, 13], "area": 415}, {"id": 6650524, "category_id": 112, "iscrowd": 0, "bbox": [124, 119, 287, 156], "area": 16767}, {"id": 15460839, "category_id": 181, "iscrowd": 0, "bbox": [531, 173, 109, 67], "area": 5863}, {"id": 9211789, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 130], "area": 26417}, {"id": 10000016, "category_id": 188, "iscrowd": 0, "bbox": [425, 111, 215, 256], "area": 19975}, {"id": 4869196, "category_id": 190, "iscrowd": 0, "bbox": [0, 216, 640, 264], "area": 72409}, {"id": 7963011, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 319], "area": 82837}], "file_name": "000000216497.png", "image_id": 216497}, {"segments_info": [{"id": 4143415, "category_id": 1, "iscrowd": 0, "bbox": [136, 118, 110, 470], "area": 35360}, {"id": 9868429, "category_id": 35, "iscrowd": 0, "bbox": [0, 528, 410, 90], "area": 5003}, {"id": 13616572, "category_id": 159, "iscrowd": 0, "bbox": [0, 253, 480, 387], "area": 139854}, {"id": 7038560, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 325], "area": 91674}, {"id": 10841924, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 147], "area": 34689}], "file_name": "000000216516.png", "image_id": 216516}, {"segments_info": [{"id": 1581377, "category_id": 61, "iscrowd": 0, "bbox": [1, 1, 459, 343], "area": 124361}, {"id": 1981590, "category_id": 130, "iscrowd": 0, "bbox": [403, 13, 237, 414], "area": 77845}, {"id": 200990, "category_id": 196, "iscrowd": 0, "bbox": [0, 156, 461, 208], "area": 24015}], "file_name": "000000216636.png", "image_id": 216636}, {"segments_info": [{"id": 4015442, "category_id": 16, "iscrowd": 0, "bbox": [0, 305, 18, 32], "area": 275}, {"id": 2239806, "category_id": 16, "iscrowd": 0, "bbox": [28, 243, 31, 55], "area": 462}, {"id": 4341328, "category_id": 16, "iscrowd": 0, "bbox": [30, 255, 16, 26], "area": 145}, {"id": 3295854, "category_id": 25, "iscrowd": 0, "bbox": [0, 49, 423, 378], "area": 60530}, {"id": 5070685, "category_id": 184, "iscrowd": 0, "bbox": [148, 0, 492, 427], "area": 44325}, {"id": 14078404, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 582, 427], "area": 166951}], "file_name": "000000216739.png", "image_id": 216739}, {"segments_info": [{"id": 4993067, "category_id": 5, "iscrowd": 0, "bbox": [247, 304, 81, 70], "area": 2293}, {"id": 12811357, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 440], "area": 279242}], "file_name": "000000217060.png", "image_id": 217060}, {"segments_info": [{"id": 6584976, "category_id": 65, "iscrowd": 0, "bbox": [1, 2, 639, 351], "area": 194688}, {"id": 3825030, "category_id": 93, "iscrowd": 0, "bbox": [0, 120, 640, 239], "area": 3500}, {"id": 9930605, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 122], "area": 30569}], "file_name": "000000217219.png", "image_id": 217219}, {"segments_info": [{"id": 12162445, "category_id": 1, "iscrowd": 0, "bbox": [336, 76, 44, 45], "area": 1143}, {"id": 10447708, "category_id": 1, "iscrowd": 0, "bbox": [173, 46, 48, 67], "area": 1992}, {"id": 9262229, "category_id": 1, "iscrowd": 0, "bbox": [599, 40, 41, 51], "area": 1488}, {"id": 11635840, "category_id": 1, "iscrowd": 0, "bbox": [377, 210, 98, 212], "area": 11297}, {"id": 11377310, "category_id": 1, "iscrowd": 0, "bbox": [423, 57, 42, 60], "area": 1616}, {"id": 10183768, "category_id": 1, "iscrowd": 0, "bbox": [308, 73, 37, 48], "area": 970}, {"id": 11179164, "category_id": 1, "iscrowd": 0, "bbox": [262, 162, 107, 253], "area": 12161}, {"id": 8416453, "category_id": 1, "iscrowd": 0, "bbox": [59, 73, 47, 38], "area": 1015}, {"id": 9865109, "category_id": 1, "iscrowd": 0, "bbox": [577, 183, 52, 86], "area": 2957}, {"id": 13478821, "category_id": 1, "iscrowd": 0, "bbox": [239, 48, 74, 66], "area": 2382}, {"id": 3812910, "category_id": 1, "iscrowd": 0, "bbox": [511, 168, 72, 259], "area": 13613}, {"id": 9204118, "category_id": 1, "iscrowd": 0, "bbox": [531, 27, 63, 61], "area": 1339}, {"id": 9139126, "category_id": 1, "iscrowd": 0, "bbox": [132, 70, 42, 44], "area": 1063}, {"id": 8875887, "category_id": 1, "iscrowd": 1, "bbox": [1, 1, 639, 268], "area": 94102}, {"id": 9798003, "category_id": 39, "iscrowd": 0, "bbox": [324, 130, 32, 108], "area": 637}, {"id": 4339768, "category_id": 40, "iscrowd": 0, "bbox": [409, 323, 37, 35], "area": 928}, {"id": 7362317, "category_id": 62, "iscrowd": 0, "bbox": [612, 108, 28, 22], "area": 317}, {"id": 8874260, "category_id": 62, "iscrowd": 0, "bbox": [560, 87, 36, 18], "area": 509}, {"id": 8677143, "category_id": 62, "iscrowd": 0, "bbox": [594, 89, 36, 18], "area": 552}, {"id": 9202966, "category_id": 62, "iscrowd": 0, "bbox": [595, 108, 34, 20], "area": 532}, {"id": 8480019, "category_id": 62, "iscrowd": 0, "bbox": [505, 103, 56, 24], "area": 842}, {"id": 6508046, "category_id": 62, "iscrowd": 0, "bbox": [528, 87, 33, 19], "area": 511}, {"id": 9268750, "category_id": 62, "iscrowd": 0, "bbox": [484, 103, 36, 22], "area": 342}, {"id": 6443541, "category_id": 62, "iscrowd": 0, "bbox": [445, 101, 49, 23], "area": 672}, {"id": 7691534, "category_id": 62, "iscrowd": 0, "bbox": [626, 90, 14, 19], "area": 212}, {"id": 9870009, "category_id": 145, "iscrowd": 0, "bbox": [0, 218, 640, 209], "area": 42330}, {"id": 7234130, "category_id": 185, "iscrowd": 0, "bbox": [0, 154, 640, 121], "area": 5243}, {"id": 7316366, "category_id": 193, "iscrowd": 0, "bbox": [0, 267, 640, 129], "area": 44557}, {"id": 9205089, "category_id": 197, "iscrowd": 0, "bbox": [0, 89, 640, 103], "area": 25126}], "file_name": "000000217285.png", "image_id": 217285}, {"segments_info": [{"id": 9209996, "category_id": 1, "iscrowd": 0, "bbox": [94, 225, 10, 14], "area": 79}, {"id": 7107710, "category_id": 1, "iscrowd": 0, "bbox": [258, 219, 22, 22], "area": 284}, {"id": 8225403, "category_id": 7, "iscrowd": 0, "bbox": [0, 131, 536, 236], "area": 87859}, {"id": 5594732, "category_id": 125, "iscrowd": 0, "bbox": [180, 326, 460, 154], "area": 9850}, {"id": 7368819, "category_id": 144, "iscrowd": 0, "bbox": [485, 293, 155, 102], "area": 9985}, {"id": 3618363, "category_id": 147, "iscrowd": 0, "bbox": [0, 276, 640, 179], "area": 18250}, {"id": 10396326, "category_id": 176, "iscrowd": 0, "bbox": [535, 142, 72, 169], "area": 6830}, {"id": 11515322, "category_id": 181, "iscrowd": 0, "bbox": [536, 191, 52, 68], "area": 2655}, {"id": 3552053, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 253], "area": 95985}, {"id": 16250614, "category_id": 187, "iscrowd": 0, "bbox": [501, 123, 102, 65], "area": 1387}, {"id": 10988980, "category_id": 190, "iscrowd": 0, "bbox": [0, 286, 611, 194], "area": 60337}, {"id": 11248289, "category_id": 199, "iscrowd": 0, "bbox": [436, 84, 204, 222], "area": 13360}], "file_name": "000000217400.png", "image_id": 217400}, {"segments_info": [{"id": 11583680, "category_id": 85, "iscrowd": 0, "bbox": [233, 137, 154, 118], "area": 14392}, {"id": 10000272, "category_id": 130, "iscrowd": 0, "bbox": [558, 271, 43, 41], "area": 571}, {"id": 12094272, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 151558}, {"id": 3873292, "category_id": 197, "iscrowd": 0, "bbox": [77, 33, 462, 447], "area": 137091}], "file_name": "000000217425.png", "image_id": 217425}, {"segments_info": [{"id": 7638179, "category_id": 25, "iscrowd": 0, "bbox": [162, 392, 89, 150], "area": 5803}, {"id": 3888983, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 489], "area": 219842}, {"id": 5936285, "category_id": 193, "iscrowd": 0, "bbox": [0, 427, 480, 213], "area": 81430}], "file_name": "000000217614.png", "image_id": 217614}, {"segments_info": [{"id": 2565454, "category_id": 53, "iscrowd": 0, "bbox": [98, 262, 61, 48], "area": 1912}, {"id": 3815505, "category_id": 53, "iscrowd": 0, "bbox": [0, 259, 141, 182], "area": 21839}, {"id": 5395082, "category_id": 53, "iscrowd": 0, "bbox": [353, 222, 49, 50], "area": 1744}, {"id": 4358248, "category_id": 53, "iscrowd": 0, "bbox": [1, 182, 47, 40], "area": 1603}, {"id": 6263933, "category_id": 53, "iscrowd": 0, "bbox": [40, 154, 45, 48], "area": 1618}, {"id": 5262476, "category_id": 53, "iscrowd": 0, "bbox": [272, 229, 46, 44], "area": 1609}, {"id": 5659278, "category_id": 53, "iscrowd": 0, "bbox": [370, 266, 43, 28], "area": 793}, {"id": 6711202, "category_id": 53, "iscrowd": 0, "bbox": [324, 196, 41, 45], "area": 1520}, {"id": 5478271, "category_id": 53, "iscrowd": 0, "bbox": [116, 149, 67, 79], "area": 3597}, {"id": 1476014, "category_id": 55, "iscrowd": 0, "bbox": [462, 167, 178, 118], "area": 10053}, {"id": 4887243, "category_id": 55, "iscrowd": 0, "bbox": [534, 353, 63, 65], "area": 3110}, {"id": 2332365, "category_id": 55, "iscrowd": 0, "bbox": [470, 252, 43, 33], "area": 1169}, {"id": 4031163, "category_id": 55, "iscrowd": 0, "bbox": [479, 303, 161, 159], "area": 19121}, {"id": 1871787, "category_id": 55, "iscrowd": 0, "bbox": [590, 168, 44, 47], "area": 1538}, {"id": 2401996, "category_id": 55, "iscrowd": 0, "bbox": [563, 252, 49, 34], "area": 1342}, {"id": 1277616, "category_id": 55, "iscrowd": 0, "bbox": [497, 167, 54, 58], "area": 1982}, {"id": 1746887, "category_id": 55, "iscrowd": 0, "bbox": [512, 209, 49, 42], "area": 1621}, {"id": 2007758, "category_id": 55, "iscrowd": 0, "bbox": [512, 248, 54, 35], "area": 1591}, {"id": 4215647, "category_id": 100, "iscrowd": 0, "bbox": [0, 200, 640, 271], "area": 22270}, {"id": 7503499, "category_id": 122, "iscrowd": 0, "bbox": [0, 0, 610, 453], "area": 98552}, {"id": 2571069, "category_id": 189, "iscrowd": 0, "bbox": [117, 0, 353, 480], "area": 5124}, {"id": 3684660, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 269, 93], "area": 4117}, {"id": 15131623, "category_id": 195, "iscrowd": 0, "bbox": [106, 18, 457, 439], "area": 5399}], "file_name": "000000217753.png", "image_id": 217753}, {"segments_info": [{"id": 1644053, "category_id": 1, "iscrowd": 0, "bbox": [152, 168, 146, 75], "area": 4747}, {"id": 7304306, "category_id": 36, "iscrowd": 0, "bbox": [149, 179, 81, 54], "area": 982}, {"id": 11381409, "category_id": 159, "iscrowd": 0, "bbox": [0, 305, 334, 195], "area": 38539}, {"id": 7885596, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 334, 447], "area": 122629}], "file_name": "000000217872.png", "image_id": 217872}, {"segments_info": [{"id": 1714237, "category_id": 23, "iscrowd": 0, "bbox": [361, 2, 279, 98], "area": 20946}, {"id": 1385273, "category_id": 23, "iscrowd": 0, "bbox": [223, 206, 368, 214], "area": 54279}, {"id": 1119778, "category_id": 23, "iscrowd": 0, "bbox": [272, 81, 368, 259], "area": 51702}, {"id": 5724507, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 525, 425], "area": 127641}, {"id": 4014665, "category_id": 194, "iscrowd": 0, "bbox": [189, 337, 451, 88], "area": 12731}], "file_name": "000000217948.png", "image_id": 217948}, {"segments_info": [{"id": 9871002, "category_id": 85, "iscrowd": 0, "bbox": [179, 328, 94, 117], "area": 7989}, {"id": 8817540, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 433, 640], "area": 78591}, {"id": 3423543, "category_id": 181, "iscrowd": 0, "bbox": [215, 0, 25, 20], "area": 399}, {"id": 4350027, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 335], "area": 25488}, {"id": 16580092, "category_id": 187, "iscrowd": 0, "bbox": [338, 0, 142, 640], "area": 48930}, {"id": 4084310, "category_id": 197, "iscrowd": 0, "bbox": [46, 46, 364, 530], "area": 98741}, {"id": 5984837, "category_id": 199, "iscrowd": 0, "bbox": [28, 123, 352, 491], "area": 46995}], "file_name": "000000217957.png", "image_id": 217957}, {"segments_info": [{"id": 1908004, "category_id": 62, "iscrowd": 0, "bbox": [175, 385, 61, 39], "area": 1232}, {"id": 526876, "category_id": 62, "iscrowd": 0, "bbox": [0, 170, 154, 110], "area": 10677}, {"id": 460295, "category_id": 63, "iscrowd": 0, "bbox": [0, 232, 94, 153], "area": 9664}, {"id": 8029339, "category_id": 65, "iscrowd": 0, "bbox": [224, 100, 220, 163], "area": 22358}, {"id": 1187370, "category_id": 72, "iscrowd": 0, "bbox": [570, 143, 45, 89], "area": 2383}, {"id": 1974826, "category_id": 75, "iscrowd": 0, "bbox": [521, 198, 29, 10], "area": 184}, {"id": 3563143, "category_id": 112, "iscrowd": 0, "bbox": [479, 48, 132, 156], "area": 10559}, {"id": 10407651, "category_id": 130, "iscrowd": 0, "bbox": [283, 96, 201, 58], "area": 2671}, {"id": 5338774, "category_id": 133, "iscrowd": 0, "bbox": [64, 31, 124, 167], "area": 15407}, {"id": 7311792, "category_id": 186, "iscrowd": 0, "bbox": [186, 0, 446, 79], "area": 9464}, {"id": 1450303, "category_id": 189, "iscrowd": 0, "bbox": [102, 232, 536, 197], "area": 51943}, {"id": 14871029, "category_id": 195, "iscrowd": 0, "bbox": [442, 367, 58, 38], "area": 1198}, {"id": 6784162, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 429], "area": 77425}, {"id": 2370109, "category_id": 200, "iscrowd": 0, "bbox": [0, 184, 574, 245], "area": 33199}], "file_name": "000000218091.png", "image_id": 218091}, {"segments_info": [{"id": 3109802, "category_id": 54, "iscrowd": 0, "bbox": [201, 71, 322, 182], "area": 42237}, {"id": 4946354, "category_id": 67, "iscrowd": 0, "bbox": [1, 2, 639, 419], "area": 201160}, {"id": 1783489, "category_id": 100, "iscrowd": 0, "bbox": [366, 422, 274, 5], "area": 1368}, {"id": 3503288, "category_id": 196, "iscrowd": 0, "bbox": [0, 253, 367, 174], "area": 2202}], "file_name": "000000218249.png", "image_id": 218249}, {"segments_info": [{"id": 10721672, "category_id": 85, "iscrowd": 0, "bbox": [242, 133, 205, 123], "area": 19694}, {"id": 4936522, "category_id": 85, "iscrowd": 0, "bbox": [417, 54, 73, 92], "area": 4652}, {"id": 661023, "category_id": 85, "iscrowd": 0, "bbox": [485, 301, 70, 89], "area": 4543}, {"id": 6915733, "category_id": 85, "iscrowd": 0, "bbox": [98, 1, 151, 66], "area": 7465}, {"id": 7174228, "category_id": 85, "iscrowd": 0, "bbox": [498, 84, 52, 81], "area": 3142}, {"id": 659993, "category_id": 85, "iscrowd": 0, "bbox": [280, 1, 105, 116], "area": 9105}, {"id": 198153, "category_id": 85, "iscrowd": 0, "bbox": [175, 270, 180, 148], "area": 25450}, {"id": 2765615, "category_id": 85, "iscrowd": 0, "bbox": [560, 103, 78, 113], "area": 6163}, {"id": 663604, "category_id": 133, "iscrowd": 0, "bbox": [0, 46, 177, 380], "area": 61239}, {"id": 3227201, "category_id": 186, "iscrowd": 0, "bbox": [353, 0, 287, 131], "area": 19025}, {"id": 258, "category_id": 188, "iscrowd": 0, "bbox": [537, 187, 103, 239], "area": 18972}, {"id": 4352638, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 89832}], "file_name": "000000218362.png", "image_id": 218362}, {"segments_info": [{"id": 6778485, "category_id": 24, "iscrowd": 0, "bbox": [233, 122, 201, 265], "area": 18974}, {"id": 6648440, "category_id": 24, "iscrowd": 0, "bbox": [76, 86, 166, 293], "area": 6004}, {"id": 6514799, "category_id": 24, "iscrowd": 0, "bbox": [95, 139, 215, 279], "area": 28702}, {"id": 8159622, "category_id": 24, "iscrowd": 0, "bbox": [400, 79, 133, 319], "area": 23729}, {"id": 6788242, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 189133}, {"id": 6452353, "category_id": 194, "iscrowd": 0, "bbox": [0, 236, 611, 183], "area": 38893}], "file_name": "000000218424.png", "image_id": 218424}, {"segments_info": [{"id": 5465707, "category_id": 1, "iscrowd": 0, "bbox": [217, 276, 10, 16], "area": 90}, {"id": 7699081, "category_id": 1, "iscrowd": 0, "bbox": [446, 180, 28, 34], "area": 491}, {"id": 3620433, "category_id": 1, "iscrowd": 0, "bbox": [246, 266, 20, 27], "area": 332}, {"id": 4867902, "category_id": 1, "iscrowd": 0, "bbox": [423, 237, 21, 24], "area": 280}, {"id": 3158899, "category_id": 1, "iscrowd": 0, "bbox": [437, 230, 23, 24], "area": 297}, {"id": 7500644, "category_id": 1, "iscrowd": 0, "bbox": [415, 243, 16, 26], "area": 281}, {"id": 5404767, "category_id": 1, "iscrowd": 0, "bbox": [0, 193, 449, 441], "area": 84606}, {"id": 15856628, "category_id": 47, "iscrowd": 0, "bbox": [372, 438, 70, 106], "area": 6825}, {"id": 7303795, "category_id": 65, "iscrowd": 0, "bbox": [0, 407, 160, 174], "area": 10367}, {"id": 9211779, "category_id": 65, "iscrowd": 0, "bbox": [99, 358, 381, 282], "area": 13992}, {"id": 6316382, "category_id": 72, "iscrowd": 0, "bbox": [0, 311, 55, 118], "area": 5766}, {"id": 8820898, "category_id": 77, "iscrowd": 0, "bbox": [344, 412, 39, 21], "area": 542}, {"id": 11784134, "category_id": 90, "iscrowd": 0, "bbox": [284, 309, 63, 17], "area": 119}, {"id": 10061671, "category_id": 93, "iscrowd": 0, "bbox": [434, 392, 46, 96], "area": 596}, {"id": 2835809, "category_id": 156, "iscrowd": 0, "bbox": [0, 411, 61, 36], "area": 1188}, {"id": 5592409, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 446], "area": 155973}], "file_name": "000000218439.png", "image_id": 218439}, {"segments_info": [{"id": 3748391, "category_id": 1, "iscrowd": 0, "bbox": [55, 77, 101, 322], "area": 18322}, {"id": 10859194, "category_id": 1, "iscrowd": 0, "bbox": [530, 88, 6, 12], "area": 50}, {"id": 7626364, "category_id": 1, "iscrowd": 0, "bbox": [127, 46, 108, 291], "area": 18471}, {"id": 5195149, "category_id": 1, "iscrowd": 0, "bbox": [236, 87, 13, 35], "area": 225}, {"id": 4864878, "category_id": 1, "iscrowd": 0, "bbox": [243, 64, 91, 274], "area": 12257}, {"id": 8091818, "category_id": 1, "iscrowd": 0, "bbox": [488, 76, 14, 18], "area": 205}, {"id": 9407437, "category_id": 1, "iscrowd": 0, "bbox": [567, 87, 7, 13], "area": 67}, {"id": 2498642, "category_id": 1, "iscrowd": 0, "bbox": [295, 345, 141, 129], "area": 7366}, {"id": 10790608, "category_id": 1, "iscrowd": 0, "bbox": [605, 106, 13, 24], "area": 192}, {"id": 3878799, "category_id": 1, "iscrowd": 0, "bbox": [115, 64, 37, 24], "area": 528}, {"id": 12040162, "category_id": 1, "iscrowd": 0, "bbox": [583, 100, 11, 31], "area": 219}, {"id": 5982688, "category_id": 1, "iscrowd": 0, "bbox": [252, 98, 16, 22], "area": 161}, {"id": 13426144, "category_id": 37, "iscrowd": 0, "bbox": [423, 174, 4, 4], "area": 13}, {"id": 9472911, "category_id": 37, "iscrowd": 0, "bbox": [411, 327, 10, 5], "area": 21}, {"id": 12959411, "category_id": 37, "iscrowd": 0, "bbox": [417, 224, 6, 4], "area": 19}, {"id": 9275775, "category_id": 37, "iscrowd": 0, "bbox": [260, 224, 8, 8], "area": 51}, {"id": 11644069, "category_id": 37, "iscrowd": 0, "bbox": [341, 414, 17, 17], "area": 209}, {"id": 10065045, "category_id": 37, "iscrowd": 0, "bbox": [424, 326, 11, 8], "area": 65}, {"id": 12834004, "category_id": 37, "iscrowd": 0, "bbox": [491, 167, 4, 4], "area": 12}, {"id": 12172979, "category_id": 37, "iscrowd": 0, "bbox": [42, 215, 6, 4], "area": 21}, {"id": 11716040, "category_id": 37, "iscrowd": 0, "bbox": [338, 189, 5, 5], "area": 22}, {"id": 11645615, "category_id": 37, "iscrowd": 0, "bbox": [548, 145, 8, 8], "area": 46}, {"id": 3815524, "category_id": 39, "iscrowd": 0, "bbox": [220, 392, 172, 13], "area": 1190}, {"id": 8613474, "category_id": 39, "iscrowd": 0, "bbox": [152, 352, 14, 31], "area": 343}, {"id": 2959396, "category_id": 39, "iscrowd": 0, "bbox": [251, 215, 11, 123], "area": 946}, {"id": 1906721, "category_id": 39, "iscrowd": 0, "bbox": [206, 213, 20, 111], "area": 738}, {"id": 6245951, "category_id": 39, "iscrowd": 0, "bbox": [116, 510, 54, 62], "area": 801}, {"id": 11980278, "category_id": 145, "iscrowd": 0, "bbox": [0, 147, 70, 56], "area": 2402}, {"id": 6449511, "category_id": 185, "iscrowd": 0, "bbox": [213, 0, 427, 393], "area": 129874}, {"id": 2836016, "category_id": 193, "iscrowd": 0, "bbox": [0, 114, 582, 508], "area": 33425}, {"id": 4541049, "category_id": 194, "iscrowd": 0, "bbox": [0, 283, 640, 186], "area": 40104}, {"id": 12437954, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 224, 128], "area": 21149}], "file_name": "000000218997.png", "image_id": 218997}, {"segments_info": [{"id": 9144455, "category_id": 1, "iscrowd": 0, "bbox": [323, 317, 27, 53], "area": 742}, {"id": 9144460, "category_id": 1, "iscrowd": 0, "bbox": [130, 426, 67, 74], "area": 2989}, {"id": 7170666, "category_id": 1, "iscrowd": 0, "bbox": [31, 353, 10, 13], "area": 89}, {"id": 5065294, "category_id": 1, "iscrowd": 0, "bbox": [246, 359, 22, 60], "area": 706}, {"id": 11446953, "category_id": 1, "iscrowd": 0, "bbox": [164, 424, 10, 19], "area": 104}, {"id": 4868170, "category_id": 1, "iscrowd": 0, "bbox": [38, 357, 12, 32], "area": 223}, {"id": 3749177, "category_id": 1, "iscrowd": 0, "bbox": [217, 388, 25, 89], "area": 1379}, {"id": 4867915, "category_id": 1, "iscrowd": 0, "bbox": [0, 377, 14, 44], "area": 388}, {"id": 4604999, "category_id": 1, "iscrowd": 0, "bbox": [113, 425, 23, 22], "area": 216}, {"id": 6118235, "category_id": 1, "iscrowd": 0, "bbox": [56, 469, 25, 31], "area": 501}, {"id": 5789017, "category_id": 1, "iscrowd": 0, "bbox": [300, 332, 27, 43], "area": 676}, {"id": 2170656, "category_id": 1, "iscrowd": 0, "bbox": [73, 485, 30, 15], "area": 340}, {"id": 5460052, "category_id": 1, "iscrowd": 0, "bbox": [263, 355, 21, 59], "area": 707}, {"id": 6710116, "category_id": 1, "iscrowd": 1, "bbox": [83, 46, 267, 454], "area": 15084}, {"id": 4801863, "category_id": 8, "iscrowd": 0, "bbox": [3, 351, 129, 118], "area": 9604}, {"id": 8881542, "category_id": 8, "iscrowd": 0, "bbox": [332, 260, 18, 28], "area": 256}, {"id": 6644581, "category_id": 8, "iscrowd": 0, "bbox": [191, 281, 107, 111], "area": 6437}, {"id": 10065814, "category_id": 8, "iscrowd": 0, "bbox": [319, 264, 24, 34], "area": 672}, {"id": 6841702, "category_id": 8, "iscrowd": 0, "bbox": [263, 275, 60, 58], "area": 2358}, {"id": 5394515, "category_id": 184, "iscrowd": 0, "bbox": [267, 243, 28, 41], "area": 429}, {"id": 15591912, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 350, 198], "area": 46003}, {"id": 9276555, "category_id": 190, "iscrowd": 0, "bbox": [308, 326, 17, 26], "area": 133}, {"id": 8947590, "category_id": 192, "iscrowd": 0, "bbox": [0, 87, 350, 279], "area": 62212}, {"id": 6973804, "category_id": 193, "iscrowd": 0, "bbox": [216, 288, 134, 212], "area": 7066}, {"id": 6973802, "category_id": 194, "iscrowd": 0, "bbox": [0, 299, 340, 190], "area": 4752}, {"id": 11052195, "category_id": 198, "iscrowd": 0, "bbox": [262, 401, 11, 14], "area": 63}], "file_name": "000000219271.png", "image_id": 219271}, {"segments_info": [{"id": 8158332, "category_id": 51, "iscrowd": 0, "bbox": [58, 324, 117, 61], "area": 5750}, {"id": 7763574, "category_id": 52, "iscrowd": 0, "bbox": [121, 292, 55, 40], "area": 1200}, {"id": 6842472, "category_id": 52, "iscrowd": 0, "bbox": [97, 302, 27, 21], "area": 327}, {"id": 7631988, "category_id": 52, "iscrowd": 0, "bbox": [396, 321, 42, 54], "area": 1534}, {"id": 9145227, "category_id": 88, "iscrowd": 0, "bbox": [177, 217, 132, 172], "area": 17068}, {"id": 6118749, "category_id": 100, "iscrowd": 0, "bbox": [0, 57, 500, 332], "area": 123456}, {"id": 986895, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 500, 98], "area": 30997}, {"id": 3750201, "category_id": 194, "iscrowd": 0, "bbox": [0, 377, 176, 123], "area": 13402}, {"id": 6974058, "category_id": 195, "iscrowd": 0, "bbox": [144, 355, 167, 50], "area": 4062}], "file_name": "000000219283.png", "image_id": 219283}, {"segments_info": [{"id": 3355443, "category_id": 21, "iscrowd": 0, "bbox": [594, 152, 29, 13], "area": 213}, {"id": 1052688, "category_id": 21, "iscrowd": 0, "bbox": [485, 172, 155, 252], "area": 27254}, {"id": 2697513, "category_id": 21, "iscrowd": 0, "bbox": [17, 231, 111, 190], "area": 13329}, {"id": 5395026, "category_id": 21, "iscrowd": 0, "bbox": [3, 131, 333, 295], "area": 52699}, {"id": 3026478, "category_id": 21, "iscrowd": 0, "bbox": [232, 143, 368, 278], "area": 52348}, {"id": 2829099, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 293], "area": 29042}, {"id": 12829635, "category_id": 187, "iscrowd": 0, "bbox": [49, 0, 591, 267], "area": 76882}, {"id": 3552822, "category_id": 193, "iscrowd": 0, "bbox": [0, 152, 640, 274], "area": 19196}], "file_name": "000000219440.png", "image_id": 219440}, {"segments_info": [{"id": 3487286, "category_id": 17, "iscrowd": 0, "bbox": [201, 541, 52, 84], "area": 2944}, {"id": 7893094, "category_id": 181, "iscrowd": 0, "bbox": [0, 113, 422, 527], "area": 180306}, {"id": 2962227, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 422, 350], "area": 86782}], "file_name": "000000219485.png", "image_id": 219485}, {"segments_info": [{"id": 8496073, "category_id": 17, "iscrowd": 0, "bbox": [421, 148, 216, 129], "area": 13302}, {"id": 3959959, "category_id": 18, "iscrowd": 0, "bbox": [30, 116, 438, 247], "area": 49902}, {"id": 3693769, "category_id": 63, "iscrowd": 0, "bbox": [9, 29, 631, 258], "area": 67985}, {"id": 3879037, "category_id": 63, "iscrowd": 0, "bbox": [0, 140, 238, 283], "area": 40610}, {"id": 9278371, "category_id": 93, "iscrowd": 0, "bbox": [204, 258, 436, 169], "area": 58114}, {"id": 6996980, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 156], "area": 39424}], "file_name": "000000219578.png", "image_id": 219578}, {"segments_info": [{"id": 6123424, "category_id": 88, "iscrowd": 0, "bbox": [64, 27, 248, 275], "area": 44665}, {"id": 11577001, "category_id": 100, "iscrowd": 0, "bbox": [243, 73, 90, 241], "area": 7206}, {"id": 197378, "category_id": 191, "iscrowd": 0, "bbox": [0, 310, 155, 190], "area": 11762}, {"id": 1118736, "category_id": 195, "iscrowd": 0, "bbox": [25, 325, 56, 70], "area": 1789}, {"id": 1844267, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 333, 106], "area": 18992}], "file_name": "000000220310.png", "image_id": 220310}, {"segments_info": [{"id": 4998472, "category_id": 1, "iscrowd": 0, "bbox": [250, 154, 174, 109], "area": 7518}, {"id": 9400921, "category_id": 42, "iscrowd": 0, "bbox": [383, 292, 109, 39], "area": 3312}, {"id": 11577761, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 262210}], "file_name": "000000220584.png", "image_id": 220584}, {"segments_info": [{"id": 6250854, "category_id": 1, "iscrowd": 0, "bbox": [362, 195, 18, 35], "area": 231}, {"id": 9210763, "category_id": 3, "iscrowd": 0, "bbox": [450, 236, 177, 41], "area": 3759}, {"id": 9018796, "category_id": 3, "iscrowd": 0, "bbox": [0, 259, 46, 19], "area": 462}, {"id": 9014409, "category_id": 3, "iscrowd": 0, "bbox": [194, 260, 120, 18], "area": 1737}, {"id": 9409942, "category_id": 6, "iscrowd": 0, "bbox": [0, 276, 640, 204], "area": 110341}, {"id": 7500142, "category_id": 6, "iscrowd": 0, "bbox": [415, 164, 223, 93], "area": 17069}, {"id": 7895162, "category_id": 6, "iscrowd": 0, "bbox": [1, 171, 108, 78], "area": 5448}, {"id": 10660524, "category_id": 8, "iscrowd": 0, "bbox": [18, 170, 358, 107], "area": 30345}, {"id": 7370360, "category_id": 149, "iscrowd": 0, "bbox": [363, 199, 277, 79], "area": 4194}, {"id": 9473667, "category_id": 171, "iscrowd": 0, "bbox": [0, 138, 93, 23], "area": 1394}, {"id": 6973543, "category_id": 181, "iscrowd": 0, "bbox": [65, 109, 20, 23], "area": 382}, {"id": 8553093, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 171], "area": 33766}, {"id": 11572354, "category_id": 187, "iscrowd": 0, "bbox": [501, 0, 131, 54], "area": 3948}, {"id": 6117731, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 219], "area": 71936}], "file_name": "000000220732.png", "image_id": 220732}, {"segments_info": [{"id": 10918304, "category_id": 1, "iscrowd": 0, "bbox": [170, 173, 26, 66], "area": 662}, {"id": 6184808, "category_id": 27, "iscrowd": 0, "bbox": [176, 181, 17, 16], "area": 81}, {"id": 7502466, "category_id": 35, "iscrowd": 0, "bbox": [181, 239, 11, 5], "area": 29}, {"id": 11712446, "category_id": 159, "iscrowd": 0, "bbox": [0, 218, 640, 209], "area": 126112}, {"id": 13027271, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 235], "area": 138942}, {"id": 6449268, "category_id": 192, "iscrowd": 0, "bbox": [0, 198, 640, 41], "area": 7263}], "file_name": "000000220764.png", "image_id": 220764}, {"segments_info": [{"id": 6189950, "category_id": 1, "iscrowd": 0, "bbox": [34, 118, 3, 8], "area": 19}, {"id": 6638154, "category_id": 1, "iscrowd": 0, "bbox": [22, 116, 4, 7], "area": 21}, {"id": 4472900, "category_id": 1, "iscrowd": 0, "bbox": [119, 128, 14, 20], "area": 166}, {"id": 6115917, "category_id": 1, "iscrowd": 0, "bbox": [285, 108, 8, 17], "area": 87}, {"id": 4866885, "category_id": 1, "iscrowd": 0, "bbox": [96, 126, 22, 27], "area": 279}, {"id": 6248794, "category_id": 9, "iscrowd": 0, "bbox": [168, 213, 318, 114], "area": 22828}, {"id": 8619402, "category_id": 16, "iscrowd": 0, "bbox": [5, 122, 10, 9], "area": 45}, {"id": 5658965, "category_id": 16, "iscrowd": 0, "bbox": [228, 27, 12, 17], "area": 63}, {"id": 10853273, "category_id": 16, "iscrowd": 0, "bbox": [184, 142, 8, 6], "area": 30}, {"id": 5725797, "category_id": 154, "iscrowd": 0, "bbox": [0, 122, 500, 245], "area": 61169}, {"id": 8615533, "category_id": 155, "iscrowd": 0, "bbox": [38, 109, 462, 199], "area": 39258}, {"id": 11179145, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 117], "area": 56014}, {"id": 4738893, "category_id": 198, "iscrowd": 0, "bbox": [0, 108, 326, 38], "area": 3226}], "file_name": "000000220858.png", "image_id": 220858}, {"segments_info": [{"id": 922921, "category_id": 16, "iscrowd": 0, "bbox": [243, 228, 195, 201], "area": 15601}, {"id": 8231344, "category_id": 154, "iscrowd": 0, "bbox": [6, 170, 388, 48], "area": 7712}, {"id": 12170666, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 197], "area": 112267}, {"id": 3955046, "category_id": 193, "iscrowd": 0, "bbox": [0, 153, 640, 327], "area": 171381}], "file_name": "000000221017.png", "image_id": 221017}, {"segments_info": [{"id": 7303023, "category_id": 21, "iscrowd": 0, "bbox": [137, 344, 109, 90], "area": 5861}, {"id": 5921370, "category_id": 21, "iscrowd": 0, "bbox": [346, 342, 152, 120], "area": 12230}, {"id": 3223857, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 353], "area": 77592}, {"id": 4605510, "category_id": 177, "iscrowd": 0, "bbox": [90, 254, 21, 38], "area": 627}, {"id": 4210752, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 497, 360], "area": 108308}, {"id": 4342338, "category_id": 187, "iscrowd": 0, "bbox": [15, 0, 454, 108], "area": 7990}, {"id": 7434609, "category_id": 193, "iscrowd": 0, "bbox": [0, 320, 640, 192], "area": 77957}, {"id": 4408131, "category_id": 197, "iscrowd": 0, "bbox": [15, 0, 580, 392], "area": 26436}], "file_name": "000000221155.png", "image_id": 221155}, {"segments_info": [{"id": 5858676, "category_id": 7, "iscrowd": 0, "bbox": [26, 47, 614, 377], "area": 78728}, {"id": 4740451, "category_id": 7, "iscrowd": 0, "bbox": [1, 83, 244, 343], "area": 51497}, {"id": 3752784, "category_id": 147, "iscrowd": 0, "bbox": [47, 51, 593, 429], "area": 58624}, {"id": 9803673, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 436, 23], "area": 6819}, {"id": 4543329, "category_id": 192, "iscrowd": 0, "bbox": [452, 0, 188, 126], "area": 16746}, {"id": 3556179, "category_id": 194, "iscrowd": 0, "bbox": [0, 67, 640, 413], "area": 63721}, {"id": 8226964, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 505, 110], "area": 29308}], "file_name": "000000221213.png", "image_id": 221213}, {"segments_info": [{"id": 6189706, "category_id": 25, "iscrowd": 0, "bbox": [0, 254, 51, 101], "area": 1158}, {"id": 3688795, "category_id": 25, "iscrowd": 0, "bbox": [0, 177, 296, 406], "area": 26891}, {"id": 4284028, "category_id": 25, "iscrowd": 0, "bbox": [143, 309, 136, 166], "area": 8497}, {"id": 5204317, "category_id": 184, "iscrowd": 0, "bbox": [0, 97, 359, 118], "area": 25990}, {"id": 16514041, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 359, 161], "area": 45008}, {"id": 3368796, "category_id": 193, "iscrowd": 0, "bbox": [0, 183, 359, 457], "area": 34310}, {"id": 6059655, "category_id": 194, "iscrowd": 0, "bbox": [0, 188, 359, 410], "area": 83645}], "file_name": "000000221281.png", "image_id": 221281}, {"segments_info": [{"id": 9604962, "category_id": 1, "iscrowd": 0, "bbox": [164, 293, 80, 207], "area": 12701}, {"id": 11578287, "category_id": 38, "iscrowd": 0, "bbox": [176, 102, 28, 49], "area": 246}, {"id": 5728625, "category_id": 184, "iscrowd": 0, "bbox": [0, 321, 335, 86], "area": 5719}, {"id": 14931659, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 335, 376], "area": 114720}, {"id": 5677210, "category_id": 193, "iscrowd": 0, "bbox": [0, 354, 335, 146], "area": 30515}, {"id": 10863053, "category_id": 194, "iscrowd": 0, "bbox": [127, 362, 121, 30], "area": 340}], "file_name": "000000221291.png", "image_id": 221291}, {"segments_info": [{"id": 4016218, "category_id": 15, "iscrowd": 0, "bbox": [86, 61, 470, 196], "area": 49232}, {"id": 4877959, "category_id": 64, "iscrowd": 0, "bbox": [14, 119, 122, 138], "area": 10794}, {"id": 5009548, "category_id": 119, "iscrowd": 0, "bbox": [80, 111, 551, 148], "area": 11273}, {"id": 10332595, "category_id": 191, "iscrowd": 0, "bbox": [0, 211, 640, 109], "area": 53434}, {"id": 6066590, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 280], "area": 79429}], "file_name": "000000221502.png", "image_id": 221502}, {"segments_info": [{"id": 4870223, "category_id": 18, "iscrowd": 0, "bbox": [73, 18, 452, 403], "area": 64386}, {"id": 9745906, "category_id": 34, "iscrowd": 0, "bbox": [441, 248, 157, 138], "area": 13726}, {"id": 4883292, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 193731}], "file_name": "000000221693.png", "image_id": 221693}, {"segments_info": [{"id": 1784170, "category_id": 62, "iscrowd": 0, "bbox": [271, 265, 113, 207], "area": 13663}, {"id": 4290480, "category_id": 62, "iscrowd": 0, "bbox": [284, 254, 45, 29], "area": 441}, {"id": 797529, "category_id": 62, "iscrowd": 0, "bbox": [373, 267, 93, 177], "area": 6197}, {"id": 4283272, "category_id": 62, "iscrowd": 0, "bbox": [210, 256, 76, 168], "area": 5490}, {"id": 4945585, "category_id": 64, "iscrowd": 0, "bbox": [310, 251, 50, 43], "area": 874}, {"id": 3303848, "category_id": 67, "iscrowd": 0, "bbox": [240, 265, 205, 70], "area": 3698}, {"id": 2436147, "category_id": 72, "iscrowd": 0, "bbox": [427, 229, 29, 33], "area": 757}, {"id": 9210781, "category_id": 81, "iscrowd": 0, "bbox": [65, 256, 34, 3], "area": 78}, {"id": 11846096, "category_id": 82, "iscrowd": 0, "bbox": [133, 172, 107, 181], "area": 14931}, {"id": 12171211, "category_id": 107, "iscrowd": 0, "bbox": [0, 247, 86, 59], "area": 2963}, {"id": 3487291, "category_id": 109, "iscrowd": 0, "bbox": [40, 130, 108, 35], "area": 2629}, {"id": 2315653, "category_id": 112, "iscrowd": 0, "bbox": [257, 156, 36, 168], "area": 3989}, {"id": 4548239, "category_id": 156, "iscrowd": 0, "bbox": [0, 160, 36, 39], "area": 1005}, {"id": 3961773, "category_id": 177, "iscrowd": 0, "bbox": [0, 35, 480, 397], "area": 66690}, {"id": 15054748, "category_id": 181, "iscrowd": 0, "bbox": [53, 152, 93, 79], "area": 5137}, {"id": 11452116, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 119], "area": 42094}, {"id": 1123665, "category_id": 188, "iscrowd": 0, "bbox": [0, 251, 153, 296], "area": 26910}, {"id": 3098224, "category_id": 190, "iscrowd": 0, "bbox": [0, 302, 480, 338], "area": 106410}], "file_name": "000000221708.png", "image_id": 221708}, {"segments_info": [{"id": 3090976, "category_id": 1, "iscrowd": 0, "bbox": [511, 266, 7, 28], "area": 148}, {"id": 4077626, "category_id": 1, "iscrowd": 0, "bbox": [496, 265, 11, 26], "area": 214}, {"id": 3354926, "category_id": 1, "iscrowd": 0, "bbox": [504, 266, 8, 30], "area": 154}, {"id": 4472123, "category_id": 1, "iscrowd": 0, "bbox": [236, 260, 4, 20], "area": 61}, {"id": 3617584, "category_id": 1, "iscrowd": 0, "bbox": [489, 267, 8, 27], "area": 154}, {"id": 6247758, "category_id": 1, "iscrowd": 0, "bbox": [283, 262, 6, 23], "area": 86}, {"id": 5129537, "category_id": 1, "iscrowd": 0, "bbox": [244, 263, 13, 26], "area": 133}, {"id": 7104615, "category_id": 3, "iscrowd": 0, "bbox": [71, 261, 16, 10], "area": 95}, {"id": 4539731, "category_id": 3, "iscrowd": 0, "bbox": [85, 259, 22, 12], "area": 209}, {"id": 7104098, "category_id": 8, "iscrowd": 0, "bbox": [152, 261, 36, 18], "area": 481}, {"id": 7827307, "category_id": 8, "iscrowd": 0, "bbox": [580, 271, 60, 28], "area": 1509}, {"id": 1842466, "category_id": 10, "iscrowd": 0, "bbox": [535, 176, 21, 54], "area": 994}, {"id": 5657681, "category_id": 10, "iscrowd": 0, "bbox": [578, 169, 26, 66], "area": 1583}, {"id": 1644821, "category_id": 10, "iscrowd": 0, "bbox": [555, 177, 11, 54], "area": 282}, {"id": 8289146, "category_id": 149, "iscrowd": 0, "bbox": [0, 260, 640, 167], "area": 85680}, {"id": 3359290, "category_id": 184, "iscrowd": 0, "bbox": [48, 136, 114, 104], "area": 8108}, {"id": 16645628, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 189], "area": 54427}, {"id": 5000010, "category_id": 191, "iscrowd": 0, "bbox": [186, 271, 257, 35], "area": 1164}, {"id": 5070171, "category_id": 193, "iscrowd": 0, "bbox": [64, 256, 432, 109], "area": 2337}, {"id": 9210247, "category_id": 197, "iscrowd": 0, "bbox": [0, 16, 640, 280], "area": 109408}], "file_name": "000000221754.png", "image_id": 221754}, {"segments_info": [{"id": 3157295, "category_id": 48, "iscrowd": 0, "bbox": [554, 2, 79, 424], "area": 13579}, {"id": 10589288, "category_id": 51, "iscrowd": 0, "bbox": [378, 0, 198, 178], "area": 31918}, {"id": 6059457, "category_id": 51, "iscrowd": 0, "bbox": [8, 3, 397, 419], "area": 101472}, {"id": 2389100, "category_id": 51, "iscrowd": 0, "bbox": [392, 177, 220, 245], "area": 47234}, {"id": 1984967, "category_id": 57, "iscrowd": 0, "bbox": [28, 262, 362, 143], "area": 16302}, {"id": 2049988, "category_id": 57, "iscrowd": 0, "bbox": [52, 292, 331, 116], "area": 15665}, {"id": 1915806, "category_id": 57, "iscrowd": 0, "bbox": [29, 231, 328, 115], "area": 10227}, {"id": 1251877, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 36, 204], "area": 4416}], "file_name": "000000221872.png", "image_id": 221872}, {"segments_info": [{"id": 7035993, "category_id": 3, "iscrowd": 0, "bbox": [22, 215, 90, 27], "area": 1579}, {"id": 5196373, "category_id": 3, "iscrowd": 0, "bbox": [107, 221, 18, 16], "area": 191}, {"id": 5127999, "category_id": 3, "iscrowd": 0, "bbox": [313, 208, 17, 12], "area": 45}, {"id": 4667972, "category_id": 3, "iscrowd": 0, "bbox": [290, 214, 27, 18], "area": 344}, {"id": 4076340, "category_id": 3, "iscrowd": 0, "bbox": [128, 209, 37, 25], "area": 570}, {"id": 3154465, "category_id": 8, "iscrowd": 0, "bbox": [316, 209, 13, 16], "area": 128}, {"id": 7760490, "category_id": 8, "iscrowd": 0, "bbox": [170, 208, 22, 20], "area": 345}, {"id": 8878193, "category_id": 8, "iscrowd": 0, "bbox": [260, 212, 34, 29], "area": 544}, {"id": 4340802, "category_id": 8, "iscrowd": 0, "bbox": [218, 213, 50, 42], "area": 1732}, {"id": 5587115, "category_id": 13, "iscrowd": 0, "bbox": [108, 82, 50, 75], "area": 2948}, {"id": 2959146, "category_id": 128, "iscrowd": 0, "bbox": [0, 155, 500, 89], "area": 15062}, {"id": 9274247, "category_id": 149, "iscrowd": 0, "bbox": [0, 221, 198, 45], "area": 3826}, {"id": 2303265, "category_id": 184, "iscrowd": 0, "bbox": [224, 142, 166, 68], "area": 2218}, {"id": 15379844, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 171], "area": 73211}, {"id": 10132393, "category_id": 191, "iscrowd": 0, "bbox": [0, 248, 159, 33], "area": 2290}, {"id": 3288359, "category_id": 192, "iscrowd": 0, "bbox": [0, 136, 500, 85], "area": 13049}, {"id": 4808292, "category_id": 193, "iscrowd": 0, "bbox": [0, 222, 500, 153], "area": 54218}, {"id": 4673620, "category_id": 198, "iscrowd": 0, "bbox": [276, 294, 76, 58], "area": 1696}], "file_name": "000000222094.png", "image_id": 222094}, {"segments_info": [{"id": 3816270, "category_id": 1, "iscrowd": 0, "bbox": [153, 131, 210, 292], "area": 28292}, {"id": 5200283, "category_id": 31, "iscrowd": 0, "bbox": [185, 297, 158, 130], "area": 11126}, {"id": 2565169, "category_id": 77, "iscrowd": 0, "bbox": [247, 198, 5, 13], "area": 39}, {"id": 14014695, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 233380}], "file_name": "000000222118.png", "image_id": 222118}, {"segments_info": [{"id": 7111038, "category_id": 16, "iscrowd": 0, "bbox": [251, 74, 90, 69], "area": 2728}, {"id": 4476749, "category_id": 17, "iscrowd": 0, "bbox": [120, 130, 312, 257], "area": 35275}, {"id": 5802621, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 630, 427], "area": 76856}, {"id": 7369335, "category_id": 194, "iscrowd": 0, "bbox": [0, 122, 640, 305], "area": 48012}, {"id": 9998224, "category_id": 198, "iscrowd": 0, "bbox": [59, 380, 152, 47], "area": 4538}], "file_name": "000000222235.png", "image_id": 222235}, {"segments_info": [{"id": 7959659, "category_id": 44, "iscrowd": 0, "bbox": [277, 209, 29, 91], "area": 1906}, {"id": 5720902, "category_id": 44, "iscrowd": 0, "bbox": [134, 43, 88, 35], "area": 2121}, {"id": 7565158, "category_id": 44, "iscrowd": 0, "bbox": [271, 137, 91, 29], "area": 2046}, {"id": 4083049, "category_id": 65, "iscrowd": 0, "bbox": [5, 1, 495, 367], "area": 151078}, {"id": 790553, "category_id": 73, "iscrowd": 0, "bbox": [360, 50, 96, 101], "area": 7657}, {"id": 4603487, "category_id": 77, "iscrowd": 0, "bbox": [409, 155, 42, 23], "area": 890}, {"id": 7965085, "category_id": 84, "iscrowd": 0, "bbox": [393, 242, 48, 64], "area": 2860}, {"id": 11712159, "category_id": 84, "iscrowd": 0, "bbox": [163, 145, 109, 73], "area": 7425}, {"id": 3097431, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 10701}], "file_name": "000000222299.png", "image_id": 222299}, {"segments_info": [{"id": 2902633, "category_id": 18, "iscrowd": 0, "bbox": [223, 198, 228, 89], "area": 9228}, {"id": 6386292, "category_id": 63, "iscrowd": 0, "bbox": [98, 96, 542, 379], "area": 143475}, {"id": 1843235, "category_id": 75, "iscrowd": 0, "bbox": [0, 428, 20, 13], "area": 238}, {"id": 861767, "category_id": 118, "iscrowd": 0, "bbox": [53, 375, 113, 105], "area": 5054}, {"id": 1788539, "category_id": 177, "iscrowd": 0, "bbox": [288, 0, 352, 170], "area": 44870}, {"id": 5276841, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 203, 63], "area": 9118}, {"id": 5268078, "category_id": 181, "iscrowd": 0, "bbox": [0, 33, 206, 64], "area": 9093}, {"id": 2966347, "category_id": 189, "iscrowd": 0, "bbox": [0, 398, 86, 82], "area": 2710}, {"id": 4086647, "category_id": 195, "iscrowd": 0, "bbox": [32, 375, 30, 26], "area": 410}, {"id": 10204615, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 298, 342], "area": 49240}, {"id": 4938857, "category_id": 200, "iscrowd": 0, "bbox": [34, 399, 91, 81], "area": 2140}], "file_name": "000000222317.png", "image_id": 222317}, {"segments_info": [{"id": 600672, "category_id": 78, "iscrowd": 0, "bbox": [23, 296, 548, 297], "area": 142677}, {"id": 13359328, "category_id": 130, "iscrowd": 0, "bbox": [91, 88, 449, 151], "area": 43417}], "file_name": "000000222455.png", "image_id": 222455}, {"segments_info": [{"id": 3158064, "category_id": 1, "iscrowd": 0, "bbox": [587, 206, 14, 33], "area": 301}, {"id": 2302755, "category_id": 1, "iscrowd": 0, "bbox": [600, 205, 15, 32], "area": 276}, {"id": 3289650, "category_id": 1, "iscrowd": 0, "bbox": [451, 196, 33, 87], "area": 1553}, {"id": 4013373, "category_id": 1, "iscrowd": 0, "bbox": [534, 212, 8, 18], "area": 91}, {"id": 3552822, "category_id": 1, "iscrowd": 0, "bbox": [511, 206, 13, 27], "area": 174}, {"id": 9474192, "category_id": 15, "iscrowd": 0, "bbox": [593, 240, 43, 28], "area": 495}, {"id": 6842472, "category_id": 15, "iscrowd": 0, "bbox": [565, 220, 17, 9], "area": 85}, {"id": 11513775, "category_id": 15, "iscrowd": 0, "bbox": [234, 258, 142, 88], "area": 5767}, {"id": 11053224, "category_id": 15, "iscrowd": 0, "bbox": [487, 250, 66, 40], "area": 1312}, {"id": 4342338, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 276, 232], "area": 46183}, {"id": 14079702, "category_id": 159, "iscrowd": 0, "bbox": [0, 190, 640, 234], "area": 88944}, {"id": 7829367, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 288], "area": 110213}, {"id": 13816530, "category_id": 187, "iscrowd": 0, "bbox": [128, 0, 512, 151], "area": 2851}, {"id": 2631720, "category_id": 199, "iscrowd": 0, "bbox": [0, 256, 488, 78], "area": 4883}], "file_name": "000000222458.png", "image_id": 222458}, {"segments_info": [{"id": 3552822, "category_id": 1, "iscrowd": 0, "bbox": [606, 309, 20, 24], "area": 141}, {"id": 4737096, "category_id": 1, "iscrowd": 0, "bbox": [349, 344, 11, 38], "area": 179}, {"id": 8487297, "category_id": 1, "iscrowd": 0, "bbox": [486, 210, 4, 6], "area": 18}, {"id": 4473924, "category_id": 1, "iscrowd": 0, "bbox": [409, 232, 6, 13], "area": 43}, {"id": 2829099, "category_id": 1, "iscrowd": 0, "bbox": [405, 351, 12, 44], "area": 288}, {"id": 5658198, "category_id": 1, "iscrowd": 0, "bbox": [176, 357, 18, 34], "area": 255}, {"id": 5921370, "category_id": 1, "iscrowd": 0, "bbox": [339, 356, 19, 33], "area": 181}, {"id": 4737102, "category_id": 1, "iscrowd": 0, "bbox": [242, 377, 21, 32], "area": 248}, {"id": 3026478, "category_id": 1, "iscrowd": 0, "bbox": [579, 302, 10, 20], "area": 69}, {"id": 2500134, "category_id": 1, "iscrowd": 0, "bbox": [214, 190, 2, 3], "area": 4}, {"id": 4408131, "category_id": 1, "iscrowd": 0, "bbox": [15, 335, 12, 17], "area": 86}, {"id": 9079434, "category_id": 1, "iscrowd": 1, "bbox": [239, 208, 24, 8], "area": 87}, {"id": 1644825, "category_id": 9, "iscrowd": 0, "bbox": [231, 210, 98, 15], "area": 1069}, {"id": 2105376, "category_id": 9, "iscrowd": 0, "bbox": [579, 206, 21, 10], "area": 99}, {"id": 4144959, "category_id": 9, "iscrowd": 0, "bbox": [323, 201, 26, 16], "area": 209}, {"id": 5855577, "category_id": 9, "iscrowd": 0, "bbox": [376, 198, 12, 6], "area": 50}, {"id": 5263440, "category_id": 9, "iscrowd": 0, "bbox": [0, 144, 74, 71], "area": 1823}, {"id": 7303023, "category_id": 9, "iscrowd": 0, "bbox": [203, 186, 6, 3], "area": 17}, {"id": 6908265, "category_id": 9, "iscrowd": 0, "bbox": [405, 176, 21, 13], "area": 184}, {"id": 2565927, "category_id": 9, "iscrowd": 0, "bbox": [370, 192, 45, 10], "area": 249}, {"id": 2565932, "category_id": 9, "iscrowd": 0, "bbox": [243, 153, 65, 56], "area": 709}, {"id": 1973790, "category_id": 9, "iscrowd": 0, "bbox": [422, 190, 14, 5], "area": 46}, {"id": 4079166, "category_id": 9, "iscrowd": 0, "bbox": [297, 152, 58, 50], "area": 667}, {"id": 6250335, "category_id": 9, "iscrowd": 0, "bbox": [457, 160, 36, 67], "area": 577}, {"id": 9934743, "category_id": 9, "iscrowd": 1, "bbox": [139, 178, 454, 21], "area": 759}, {"id": 9868950, "category_id": 42, "iscrowd": 0, "bbox": [608, 330, 24, 5], "area": 46}, {"id": 4473919, "category_id": 42, "iscrowd": 0, "bbox": [8, 344, 14, 10], "area": 60}, {"id": 7303015, "category_id": 154, "iscrowd": 0, "bbox": [0, 373, 640, 53], "area": 13423}, {"id": 10263708, "category_id": 155, "iscrowd": 0, "bbox": [0, 166, 640, 260], "area": 132455}, {"id": 11776947, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 200], "area": 117725}], "file_name": "000000222559.png", "image_id": 222559}, {"segments_info": [{"id": 12303291, "category_id": 1, "iscrowd": 0, "bbox": [156, 28, 116, 129], "area": 10067}, {"id": 1315860, "category_id": 63, "iscrowd": 0, "bbox": [2, 112, 154, 299], "area": 40575}, {"id": 7631988, "category_id": 67, "iscrowd": 0, "bbox": [0, 352, 474, 288], "area": 75470}, {"id": 8092539, "category_id": 72, "iscrowd": 0, "bbox": [141, 3, 275, 181], "area": 36393}, {"id": 7105644, "category_id": 75, "iscrowd": 0, "bbox": [10, 319, 384, 288], "area": 53338}, {"id": 3421236, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 308, 239], "area": 18737}], "file_name": "000000222735.png", "image_id": 222735}, {"segments_info": [{"id": 6390434, "category_id": 44, "iscrowd": 0, "bbox": [173, 347, 12, 37], "area": 388}, {"id": 7440022, "category_id": 79, "iscrowd": 0, "bbox": [269, 323, 158, 277], "area": 28601}, {"id": 9806772, "category_id": 82, "iscrowd": 0, "bbox": [73, 242, 83, 323], "area": 24905}, {"id": 3432069, "category_id": 107, "iscrowd": 0, "bbox": [154, 341, 273, 204], "area": 21969}, {"id": 15134967, "category_id": 130, "iscrowd": 0, "bbox": [163, 64, 22, 16], "area": 226}, {"id": 7903921, "category_id": 151, "iscrowd": 0, "bbox": [50, 0, 377, 190], "area": 61327}, {"id": 4555446, "category_id": 188, "iscrowd": 0, "bbox": [70, 164, 301, 145], "area": 31148}, {"id": 5271691, "category_id": 190, "iscrowd": 0, "bbox": [66, 519, 361, 121], "area": 26550}, {"id": 8229538, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 71437}], "file_name": "000000222825.png", "image_id": 222825}, {"segments_info": [{"id": 2040361, "category_id": 21, "iscrowd": 0, "bbox": [146, 1, 243, 425], "area": 67595}, {"id": 6063484, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 204529}], "file_name": "000000222863.png", "image_id": 222863}, {"segments_info": [{"id": 2301888, "category_id": 28, "iscrowd": 0, "bbox": [120, 2, 71, 542], "area": 16262}, {"id": 10271174, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 598], "area": 205218}, {"id": 7905720, "category_id": 200, "iscrowd": 0, "bbox": [0, 445, 480, 195], "area": 41275}], "file_name": "000000222991.png", "image_id": 222991}, {"segments_info": [{"id": 3161679, "category_id": 49, "iscrowd": 0, "bbox": [45, 74, 89, 397], "area": 22132}, {"id": 3567573, "category_id": 57, "iscrowd": 0, "bbox": [154, 229, 58, 191], "area": 4973}, {"id": 2971548, "category_id": 57, "iscrowd": 0, "bbox": [159, 181, 39, 98], "area": 2065}, {"id": 3498184, "category_id": 57, "iscrowd": 0, "bbox": [124, 192, 41, 197], "area": 4454}, {"id": 8624812, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 452], "area": 61290}, {"id": 5078387, "category_id": 196, "iscrowd": 0, "bbox": [13, 0, 599, 449], "area": 142544}], "file_name": "000000223090.png", "image_id": 223090}, {"segments_info": [{"id": 3296617, "category_id": 25, "iscrowd": 0, "bbox": [136, 146, 184, 450], "area": 28287}, {"id": 5728633, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 425, 583], "area": 139526}, {"id": 13745067, "category_id": 187, "iscrowd": 0, "bbox": [14, 0, 411, 338], "area": 71463}, {"id": 5272717, "category_id": 193, "iscrowd": 0, "bbox": [0, 507, 425, 133], "area": 25872}], "file_name": "000000223130.png", "image_id": 223130}, {"segments_info": [{"id": 11714769, "category_id": 1, "iscrowd": 0, "bbox": [0, 117, 40, 56], "area": 1218}, {"id": 6113186, "category_id": 1, "iscrowd": 0, "bbox": [522, 2, 117, 521], "area": 36288}, {"id": 6974844, "category_id": 1, "iscrowd": 0, "bbox": [44, 31, 157, 146], "area": 14519}, {"id": 5921118, "category_id": 1, "iscrowd": 0, "bbox": [312, 0, 125, 132], "area": 8553}, {"id": 8681874, "category_id": 1, "iscrowd": 0, "bbox": [225, 25, 274, 499], "area": 57665}, {"id": 8424745, "category_id": 15, "iscrowd": 0, "bbox": [0, 324, 410, 192], "area": 49773}, {"id": 7896432, "category_id": 43, "iscrowd": 0, "bbox": [171, 298, 100, 221], "area": 10770}, {"id": 14540003, "category_id": 44, "iscrowd": 0, "bbox": [408, 413, 33, 109], "area": 2794}, {"id": 13553627, "category_id": 44, "iscrowd": 0, "bbox": [362, 442, 24, 79], "area": 1292}, {"id": 5988124, "category_id": 62, "iscrowd": 0, "bbox": [25, 119, 444, 215], "area": 2961}, {"id": 7239703, "category_id": 62, "iscrowd": 0, "bbox": [479, 0, 59, 53], "area": 2431}, {"id": 8107760, "category_id": 145, "iscrowd": 0, "bbox": [0, 490, 640, 48], "area": 15196}, {"id": 13094353, "category_id": 161, "iscrowd": 0, "bbox": [360, 34, 241, 396], "area": 19873}, {"id": 12228988, "category_id": 168, "iscrowd": 0, "bbox": [155, 144, 326, 214], "area": 8568}, {"id": 10132629, "category_id": 185, "iscrowd": 0, "bbox": [104, 0, 536, 170], "area": 24052}, {"id": 4214404, "category_id": 190, "iscrowd": 0, "bbox": [488, 435, 49, 21], "area": 565}, {"id": 6911534, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 513, 518], "area": 39556}, {"id": 3292285, "category_id": 200, "iscrowd": 0, "bbox": [480, 416, 127, 83], "area": 7062}], "file_name": "000000223182.png", "image_id": 223182}, {"segments_info": [{"id": 6455702, "category_id": 1, "iscrowd": 0, "bbox": [33, 63, 346, 525], "area": 74576}, {"id": 5067858, "category_id": 21, "iscrowd": 0, "bbox": [0, 158, 427, 474], "area": 97373}, {"id": 7370616, "category_id": 85, "iscrowd": 0, "bbox": [123, 157, 28, 29], "area": 419}, {"id": 5006170, "category_id": 184, "iscrowd": 0, "bbox": [0, 8, 427, 397], "area": 82121}, {"id": 16053491, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 70], "area": 12984}], "file_name": "000000223188.png", "image_id": 223188}, {"segments_info": [{"id": 2106184, "category_id": 1, "iscrowd": 0, "bbox": [1, 93, 78, 144], "area": 3576}, {"id": 2827803, "category_id": 1, "iscrowd": 0, "bbox": [67, 11, 107, 226], "area": 10562}, {"id": 10856631, "category_id": 1, "iscrowd": 0, "bbox": [620, 94, 14, 146], "area": 1532}, {"id": 8552106, "category_id": 1, "iscrowd": 0, "bbox": [273, 89, 324, 518], "area": 55010}, {"id": 3024669, "category_id": 1, "iscrowd": 0, "bbox": [190, 5, 115, 224], "area": 15768}, {"id": 10398655, "category_id": 37, "iscrowd": 0, "bbox": [66, 196, 31, 27], "area": 569}, {"id": 6904411, "category_id": 39, "iscrowd": 0, "bbox": [220, 241, 72, 76], "area": 1616}, {"id": 8895177, "category_id": 145, "iscrowd": 0, "bbox": [0, 443, 634, 197], "area": 90971}, {"id": 6906452, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 634, 487], "area": 215815}, {"id": 11979221, "category_id": 191, "iscrowd": 0, "bbox": [0, 416, 634, 80], "area": 8664}], "file_name": "000000223738.png", "image_id": 223738}, {"segments_info": [{"id": 2237226, "category_id": 1, "iscrowd": 0, "bbox": [249, 99, 188, 194], "area": 22771}, {"id": 1316115, "category_id": 17, "iscrowd": 0, "bbox": [40, 223, 443, 147], "area": 39096}, {"id": 2237473, "category_id": 65, "iscrowd": 0, "bbox": [118, 71, 382, 299], "area": 21151}, {"id": 4344914, "category_id": 93, "iscrowd": 0, "bbox": [404, 100, 96, 246], "area": 14994}, {"id": 7506369, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 370], "area": 32299}], "file_name": "000000223747.png", "image_id": 223747}, {"segments_info": [{"id": 4086927, "category_id": 44, "iscrowd": 0, "bbox": [214, 133, 26, 58], "area": 935}, {"id": 3562134, "category_id": 44, "iscrowd": 0, "bbox": [183, 137, 27, 60], "area": 820}, {"id": 6462146, "category_id": 81, "iscrowd": 0, "bbox": [1, 260, 284, 224], "area": 42800}, {"id": 462469, "category_id": 119, "iscrowd": 0, "bbox": [77, 165, 269, 101], "area": 2975}, {"id": 5737395, "category_id": 133, "iscrowd": 0, "bbox": [90, 0, 256, 210], "area": 45481}, {"id": 1131402, "category_id": 156, "iscrowd": 0, "bbox": [20, 166, 326, 108], "area": 9265}, {"id": 6790086, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 346, 500], "area": 67844}], "file_name": "000000223789.png", "image_id": 223789}, {"segments_info": [{"id": 6116950, "category_id": 1, "iscrowd": 0, "bbox": [175, 67, 186, 263], "area": 21216}, {"id": 2562230, "category_id": 34, "iscrowd": 0, "bbox": [189, 79, 34, 49], "area": 1170}, {"id": 923147, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 106], "area": 48870}, {"id": 5339220, "category_id": 193, "iscrowd": 0, "bbox": [0, 94, 500, 239], "area": 93013}], "file_name": "000000223955.png", "image_id": 223955}, {"segments_info": [{"id": 6518905, "category_id": 1, "iscrowd": 0, "bbox": [142, 29, 176, 589], "area": 60477}, {"id": 8952212, "category_id": 43, "iscrowd": 0, "bbox": [134, 6, 56, 242], "area": 6586}, {"id": 6916475, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 211607}], "file_name": "000000223959.png", "image_id": 223959}, {"segments_info": [{"id": 5662867, "category_id": 2, "iscrowd": 0, "bbox": [349, 75, 155, 288], "area": 25732}, {"id": 8952494, "category_id": 3, "iscrowd": 0, "bbox": [239, 162, 68, 51], "area": 2882}, {"id": 4349840, "category_id": 3, "iscrowd": 0, "bbox": [313, 175, 24, 23], "area": 397}, {"id": 8426143, "category_id": 149, "iscrowd": 0, "bbox": [219, 171, 421, 123], "area": 15851}, {"id": 6059157, "category_id": 185, "iscrowd": 0, "bbox": [0, 101, 640, 221], "area": 14723}, {"id": 16054779, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 210], "area": 96242}, {"id": 9148577, "category_id": 191, "iscrowd": 0, "bbox": [0, 184, 608, 244], "area": 78203}, {"id": 8624805, "category_id": 199, "iscrowd": 0, "bbox": [152, 190, 488, 238], "area": 25881}], "file_name": "000000224051.png", "image_id": 224051}, {"segments_info": [{"id": 2763306, "category_id": 21, "iscrowd": 0, "bbox": [22, 136, 73, 52], "area": 2368}, {"id": 4013373, "category_id": 21, "iscrowd": 0, "bbox": [415, 119, 16, 24], "area": 286}, {"id": 2368548, "category_id": 21, "iscrowd": 0, "bbox": [147, 117, 43, 29], "area": 824}, {"id": 1907997, "category_id": 21, "iscrowd": 0, "bbox": [328, 116, 46, 38], "area": 1016}, {"id": 2039583, "category_id": 21, "iscrowd": 0, "bbox": [264, 128, 8, 8], "area": 36}, {"id": 2763314, "category_id": 21, "iscrowd": 0, "bbox": [404, 134, 56, 33], "area": 1156}, {"id": 5329233, "category_id": 21, "iscrowd": 0, "bbox": [237, 119, 15, 27], "area": 275}, {"id": 4013367, "category_id": 128, "iscrowd": 0, "bbox": [373, 78, 240, 56], "area": 3508}, {"id": 5460819, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 138], "area": 48686}, {"id": 4934475, "category_id": 185, "iscrowd": 0, "bbox": [0, 126, 254, 17], "area": 1107}, {"id": 13553358, "category_id": 187, "iscrowd": 0, "bbox": [166, 0, 474, 106], "area": 30371}, {"id": 6513507, "category_id": 193, "iscrowd": 0, "bbox": [0, 123, 640, 193], "area": 112373}], "file_name": "000000224093.png", "image_id": 224093}, {"segments_info": [{"id": 1641998, "category_id": 1, "iscrowd": 0, "bbox": [178, 147, 69, 98], "area": 3206}, {"id": 2630189, "category_id": 1, "iscrowd": 0, "bbox": [244, 172, 22, 22], "area": 321}, {"id": 2037272, "category_id": 1, "iscrowd": 0, "bbox": [383, 225, 14, 17], "area": 158}, {"id": 2102296, "category_id": 1, "iscrowd": 0, "bbox": [81, 184, 65, 21], "area": 823}, {"id": 2692887, "category_id": 72, "iscrowd": 0, "bbox": [133, 0, 136, 26], "area": 3418}, {"id": 2166541, "category_id": 72, "iscrowd": 0, "bbox": [358, 183, 23, 17], "area": 315}, {"id": 2035472, "category_id": 72, "iscrowd": 0, "bbox": [127, 173, 24, 20], "area": 415}, {"id": 2102035, "category_id": 72, "iscrowd": 0, "bbox": [372, 202, 18, 12], "area": 104}, {"id": 1969934, "category_id": 72, "iscrowd": 0, "bbox": [340, 161, 33, 25], "area": 766}, {"id": 2233108, "category_id": 72, "iscrowd": 0, "bbox": [366, 192, 21, 17], "area": 215}, {"id": 2101007, "category_id": 72, "iscrowd": 0, "bbox": [31, 146, 33, 31], "area": 915}, {"id": 2166799, "category_id": 72, "iscrowd": 0, "bbox": [298, 115, 52, 39], "area": 1995}, {"id": 1839892, "category_id": 109, "iscrowd": 0, "bbox": [252, 152, 119, 59], "area": 3900}, {"id": 5458506, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 531, 215], "area": 69292}, {"id": 5654855, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 243], "area": 42330}], "file_name": "000000224119.png", "image_id": 224119}, {"segments_info": [{"id": 4284793, "category_id": 11, "iscrowd": 0, "bbox": [411, 1, 229, 489], "area": 79517}, {"id": 2831421, "category_id": 18, "iscrowd": 0, "bbox": [57, 240, 252, 266], "area": 40859}, {"id": 4999234, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 320, 110], "area": 11116}, {"id": 2105378, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 266, 82], "area": 12543}, {"id": 3566729, "category_id": 191, "iscrowd": 0, "bbox": [0, 343, 640, 297], "area": 119291}, {"id": 6127263, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 366], "area": 92775}], "file_name": "000000224200.png", "image_id": 224200}, {"segments_info": [{"id": 5076098, "category_id": 1, "iscrowd": 0, "bbox": [260, 75, 67, 112], "area": 2997}, {"id": 6846882, "category_id": 1, "iscrowd": 0, "bbox": [32, 188, 71, 63], "area": 1914}, {"id": 7239831, "category_id": 1, "iscrowd": 0, "bbox": [445, 188, 62, 73], "area": 1828}, {"id": 6185557, "category_id": 42, "iscrowd": 0, "bbox": [230, 164, 74, 31], "area": 460}, {"id": 10329218, "category_id": 155, "iscrowd": 0, "bbox": [0, 82, 640, 344], "area": 211472}, {"id": 11704684, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 86], "area": 53717}], "file_name": "000000224222.png", "image_id": 224222}, {"segments_info": [{"id": 3024957, "category_id": 1, "iscrowd": 0, "bbox": [396, 168, 50, 119], "area": 4678}, {"id": 197638, "category_id": 1, "iscrowd": 0, "bbox": [440, 144, 199, 212], "area": 22434}, {"id": 6250883, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 365, 425], "area": 137984}, {"id": 2497801, "category_id": 1, "iscrowd": 0, "bbox": [424, 153, 83, 144], "area": 5596}, {"id": 7569295, "category_id": 59, "iscrowd": 0, "bbox": [234, 291, 266, 70], "area": 9346}, {"id": 12827574, "category_id": 181, "iscrowd": 0, "bbox": [584, 0, 56, 224], "area": 7612}, {"id": 5331293, "category_id": 199, "iscrowd": 0, "bbox": [287, 0, 313, 258], "area": 36017}], "file_name": "000000224337.png", "image_id": 224337}, {"segments_info": [{"id": 6316907, "category_id": 1, "iscrowd": 0, "bbox": [374, 249, 6, 12], "area": 34}, {"id": 6646390, "category_id": 1, "iscrowd": 0, "bbox": [305, 224, 3, 7], "area": 16}, {"id": 5726584, "category_id": 1, "iscrowd": 0, "bbox": [369, 251, 5, 15], "area": 63}, {"id": 9142393, "category_id": 1, "iscrowd": 0, "bbox": [626, 228, 2, 6], "area": 9}, {"id": 6244990, "category_id": 1, "iscrowd": 0, "bbox": [406, 306, 10, 10], "area": 59}, {"id": 7831179, "category_id": 1, "iscrowd": 0, "bbox": [194, 219, 4, 4], "area": 12}, {"id": 5659752, "category_id": 1, "iscrowd": 0, "bbox": [513, 256, 9, 7], "area": 34}, {"id": 7634053, "category_id": 1, "iscrowd": 0, "bbox": [218, 220, 3, 8], "area": 16}, {"id": 13352893, "category_id": 38, "iscrowd": 0, "bbox": [398, 164, 10, 8], "area": 26}, {"id": 8159900, "category_id": 38, "iscrowd": 0, "bbox": [257, 194, 9, 13], "area": 50}, {"id": 9011365, "category_id": 38, "iscrowd": 0, "bbox": [231, 181, 8, 9], "area": 32}, {"id": 12891554, "category_id": 38, "iscrowd": 0, "bbox": [365, 152, 18, 19], "area": 86}, {"id": 4601666, "category_id": 38, "iscrowd": 0, "bbox": [562, 73, 30, 17], "area": 103}, {"id": 13281937, "category_id": 38, "iscrowd": 0, "bbox": [306, 175, 5, 5], "area": 10}, {"id": 10061737, "category_id": 38, "iscrowd": 0, "bbox": [272, 147, 10, 11], "area": 46}, {"id": 8094607, "category_id": 154, "iscrowd": 0, "bbox": [87, 193, 553, 225], "area": 47848}, {"id": 12367285, "category_id": 155, "iscrowd": 0, "bbox": [196, 195, 444, 41], "area": 9809}, {"id": 14865867, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 218], "area": 127437}, {"id": 4213848, "category_id": 194, "iscrowd": 0, "bbox": [287, 282, 353, 198], "area": 26033}], "file_name": "000000224664.png", "image_id": 224664}, {"segments_info": [{"id": 7892341, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 194, 296], "area": 34198}, {"id": 4208956, "category_id": 1, "iscrowd": 0, "bbox": [282, 49, 118, 246], "area": 19518}, {"id": 1381135, "category_id": 31, "iscrowd": 0, "bbox": [0, 69, 117, 231], "area": 9267}, {"id": 4415122, "category_id": 38, "iscrowd": 0, "bbox": [131, 37, 64, 175], "area": 4910}, {"id": 1655933, "category_id": 38, "iscrowd": 0, "bbox": [363, 101, 37, 94], "area": 2248}, {"id": 2962741, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 194, 78], "area": 2396}, {"id": 10855076, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 400, 300], "area": 39402}, {"id": 2109221, "category_id": 184, "iscrowd": 0, "bbox": [208, 0, 15, 10], "area": 109}, {"id": 10920886, "category_id": 191, "iscrowd": 0, "bbox": [113, 0, 214, 88], "area": 2685}, {"id": 2778966, "category_id": 193, "iscrowd": 0, "bbox": [89, 0, 196, 67], "area": 3585}], "file_name": "000000224675.png", "image_id": 224675}, {"segments_info": [{"id": 2434611, "category_id": 1, "iscrowd": 0, "bbox": [337, 526, 19, 29], "area": 325}, {"id": 4672857, "category_id": 1, "iscrowd": 0, "bbox": [391, 509, 11, 25], "area": 171}, {"id": 11451330, "category_id": 1, "iscrowd": 0, "bbox": [409, 513, 11, 23], "area": 200}, {"id": 2764082, "category_id": 1, "iscrowd": 0, "bbox": [182, 489, 50, 150], "area": 3265}, {"id": 3487291, "category_id": 1, "iscrowd": 0, "bbox": [402, 508, 8, 26], "area": 133}, {"id": 11515317, "category_id": 3, "iscrowd": 0, "bbox": [285, 510, 136, 54], "area": 2577}, {"id": 5396058, "category_id": 3, "iscrowd": 0, "bbox": [284, 515, 35, 57], "area": 1181}, {"id": 5857901, "category_id": 4, "iscrowd": 0, "bbox": [316, 540, 74, 37], "area": 847}, {"id": 329223, "category_id": 31, "iscrowd": 0, "bbox": [161, 515, 41, 50], "area": 1072}, {"id": 6907232, "category_id": 92, "iscrowd": 0, "bbox": [56, 0, 242, 331], "area": 33952}, {"id": 9277071, "category_id": 149, "iscrowd": 0, "bbox": [391, 535, 89, 55], "area": 3565}, {"id": 8690343, "category_id": 151, "iscrowd": 0, "bbox": [285, 0, 195, 77], "area": 13219}, {"id": 5395799, "category_id": 166, "iscrowd": 0, "bbox": [0, 0, 314, 640], "area": 124602}, {"id": 7503999, "category_id": 181, "iscrowd": 0, "bbox": [0, 391, 74, 249], "area": 16161}, {"id": 6457989, "category_id": 184, "iscrowd": 0, "bbox": [339, 304, 141, 233], "area": 17770}, {"id": 14079702, "category_id": 187, "iscrowd": 0, "bbox": [424, 59, 56, 284], "area": 11315}, {"id": 8092794, "category_id": 190, "iscrowd": 0, "bbox": [125, 552, 355, 88], "area": 18038}, {"id": 10396319, "category_id": 197, "iscrowd": 0, "bbox": [267, 69, 213, 467], "area": 45465}], "file_name": "000000224724.png", "image_id": 224724}, {"segments_info": [{"id": 1646913, "category_id": 1, "iscrowd": 0, "bbox": [63, 63, 34, 38], "area": 813}, {"id": 1120033, "category_id": 1, "iscrowd": 0, "bbox": [564, 29, 55, 65], "area": 1849}, {"id": 6186870, "category_id": 1, "iscrowd": 0, "bbox": [314, 58, 106, 132], "area": 6411}, {"id": 5855576, "category_id": 1, "iscrowd": 0, "bbox": [15, 48, 80, 159], "area": 4830}, {"id": 5525061, "category_id": 1, "iscrowd": 0, "bbox": [164, 52, 58, 107], "area": 3205}, {"id": 7828849, "category_id": 1, "iscrowd": 0, "bbox": [572, 80, 68, 133], "area": 5836}, {"id": 1776931, "category_id": 1, "iscrowd": 0, "bbox": [0, 139, 314, 289], "area": 50726}, {"id": 7760223, "category_id": 1, "iscrowd": 0, "bbox": [299, 104, 276, 324], "area": 41499}, {"id": 1317157, "category_id": 1, "iscrowd": 0, "bbox": [92, 63, 34, 39], "area": 991}, {"id": 2764611, "category_id": 1, "iscrowd": 0, "bbox": [65, 69, 111, 111], "area": 4999}, {"id": 1512233, "category_id": 1, "iscrowd": 0, "bbox": [512, 91, 99, 243], "area": 5251}, {"id": 2304568, "category_id": 1, "iscrowd": 0, "bbox": [201, 57, 98, 119], "area": 7209}, {"id": 2107998, "category_id": 1, "iscrowd": 0, "bbox": [397, 71, 96, 165], "area": 6367}, {"id": 2830398, "category_id": 1, "iscrowd": 1, "bbox": [0, 19, 640, 151], "area": 20717}, {"id": 1380629, "category_id": 27, "iscrowd": 0, "bbox": [501, 222, 117, 206], "area": 3328}, {"id": 1709844, "category_id": 31, "iscrowd": 0, "bbox": [554, 223, 66, 205], "area": 4111}, {"id": 1184273, "category_id": 31, "iscrowd": 0, "bbox": [182, 150, 17, 19], "area": 231}, {"id": 1841444, "category_id": 31, "iscrowd": 0, "bbox": [554, 191, 50, 36], "area": 287}, {"id": 2631460, "category_id": 31, "iscrowd": 0, "bbox": [345, 117, 16, 27], "area": 151}, {"id": 4999204, "category_id": 31, "iscrowd": 0, "bbox": [1, 271, 142, 126], "area": 2543}, {"id": 1120293, "category_id": 31, "iscrowd": 0, "bbox": [599, 248, 41, 72], "area": 1924}, {"id": 3361942, "category_id": 47, "iscrowd": 0, "bbox": [323, 251, 22, 34], "area": 623}, {"id": 2246271, "category_id": 47, "iscrowd": 0, "bbox": [387, 134, 15, 24], "area": 315}, {"id": 3362198, "category_id": 47, "iscrowd": 0, "bbox": [131, 248, 22, 35], "area": 633}, {"id": 3753892, "category_id": 47, "iscrowd": 0, "bbox": [257, 247, 18, 37], "area": 607}, {"id": 2376861, "category_id": 47, "iscrowd": 0, "bbox": [345, 209, 17, 29], "area": 413}, {"id": 10132122, "category_id": 50, "iscrowd": 0, "bbox": [371, 202, 33, 9], "area": 156}, {"id": 13354433, "category_id": 50, "iscrowd": 0, "bbox": [387, 247, 24, 27], "area": 167}, {"id": 14144458, "category_id": 50, "iscrowd": 0, "bbox": [318, 282, 47, 15], "area": 256}, {"id": 12631994, "category_id": 50, "iscrowd": 0, "bbox": [365, 235, 67, 12], "area": 467}, {"id": 8026744, "category_id": 50, "iscrowd": 0, "bbox": [320, 206, 34, 8], "area": 164}, {"id": 12894651, "category_id": 50, "iscrowd": 0, "bbox": [209, 186, 25, 8], "area": 66}, {"id": 8359833, "category_id": 51, "iscrowd": 0, "bbox": [229, 188, 112, 42], "area": 3410}, {"id": 13421763, "category_id": 51, "iscrowd": 0, "bbox": [153, 268, 38, 17], "area": 489}, {"id": 9475496, "category_id": 51, "iscrowd": 0, "bbox": [398, 221, 32, 19], "area": 473}, {"id": 13681847, "category_id": 51, "iscrowd": 0, "bbox": [287, 271, 36, 29], "area": 780}, {"id": 11448755, "category_id": 51, "iscrowd": 0, "bbox": [324, 182, 23, 15], "area": 201}, {"id": 6317701, "category_id": 51, "iscrowd": 0, "bbox": [187, 190, 10, 16], "area": 128}, {"id": 11710906, "category_id": 51, "iscrowd": 0, "bbox": [361, 262, 35, 24], "area": 544}, {"id": 10199216, "category_id": 51, "iscrowd": 0, "bbox": [195, 180, 21, 17], "area": 242}, {"id": 9607337, "category_id": 51, "iscrowd": 0, "bbox": [244, 168, 22, 15], "area": 237}, {"id": 396119, "category_id": 62, "iscrowd": 0, "bbox": [295, 141, 30, 36], "area": 330}, {"id": 659271, "category_id": 62, "iscrowd": 0, "bbox": [175, 142, 25, 35], "area": 446}, {"id": 3160422, "category_id": 67, "iscrowd": 0, "bbox": [263, 87, 24, 26], "area": 341}, {"id": 5397926, "category_id": 67, "iscrowd": 0, "bbox": [145, 173, 296, 155], "area": 22837}, {"id": 3554917, "category_id": 67, "iscrowd": 0, "bbox": [0, 101, 32, 56], "area": 1001}, {"id": 460809, "category_id": 112, "iscrowd": 0, "bbox": [31, 15, 36, 19], "area": 553}, {"id": 661552, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 123], "area": 26833}, {"id": 2830124, "category_id": 186, "iscrowd": 0, "bbox": [30, 0, 193, 19], "area": 2147}, {"id": 4014144, "category_id": 190, "iscrowd": 0, "bbox": [235, 238, 405, 190], "area": 7663}, {"id": 1383197, "category_id": 199, "iscrowd": 0, "bbox": [58, 0, 235, 91], "area": 6105}], "file_name": "000000224807.png", "image_id": 224807}, {"segments_info": [{"id": 3358272, "category_id": 18, "iscrowd": 0, "bbox": [193, 353, 41, 41], "area": 948}, {"id": 8432824, "category_id": 20, "iscrowd": 0, "bbox": [269, 431, 54, 70], "area": 2406}, {"id": 8956590, "category_id": 20, "iscrowd": 0, "bbox": [379, 432, 51, 62], "area": 2211}, {"id": 8298924, "category_id": 20, "iscrowd": 0, "bbox": [323, 456, 46, 63], "area": 1446}, {"id": 3836275, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 457, 640], "area": 285240}], "file_name": "000000225184.png", "image_id": 225184}, {"segments_info": [{"id": 7366977, "category_id": 1, "iscrowd": 0, "bbox": [107, 45, 178, 407], "area": 30412}, {"id": 5791588, "category_id": 1, "iscrowd": 0, "bbox": [339, 100, 168, 340], "area": 21897}, {"id": 6712940, "category_id": 1, "iscrowd": 0, "bbox": [309, 19, 29, 82], "area": 1183}, {"id": 12043462, "category_id": 37, "iscrowd": 0, "bbox": [288, 332, 53, 52], "area": 2190}, {"id": 5939857, "category_id": 145, "iscrowd": 0, "bbox": [0, 30, 640, 441], "area": 221353}, {"id": 4941148, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 52], "area": 23745}], "file_name": "000000225405.png", "image_id": 225405}, {"segments_info": [{"id": 1121072, "category_id": 3, "iscrowd": 0, "bbox": [295, 244, 19, 16], "area": 212}, {"id": 1382681, "category_id": 3, "iscrowd": 0, "bbox": [369, 221, 131, 130], "area": 11871}, {"id": 7901326, "category_id": 3, "iscrowd": 0, "bbox": [192, 242, 30, 19], "area": 312}, {"id": 2506847, "category_id": 3, "iscrowd": 0, "bbox": [275, 247, 22, 11], "area": 207}, {"id": 3363204, "category_id": 3, "iscrowd": 0, "bbox": [227, 247, 36, 19], "area": 473}, {"id": 2637378, "category_id": 3, "iscrowd": 0, "bbox": [332, 247, 19, 10], "area": 109}, {"id": 2042412, "category_id": 3, "iscrowd": 0, "bbox": [351, 248, 17, 10], "area": 132}, {"id": 2961970, "category_id": 3, "iscrowd": 0, "bbox": [264, 239, 6, 4], "area": 15}, {"id": 1250839, "category_id": 149, "iscrowd": 0, "bbox": [230, 233, 270, 142], "area": 19256}, {"id": 11517891, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 223], "area": 89472}, {"id": 922387, "category_id": 191, "iscrowd": 0, "bbox": [0, 266, 220, 109], "area": 15327}, {"id": 3358786, "category_id": 197, "iscrowd": 0, "bbox": [0, 201, 500, 58], "area": 14160}, {"id": 1713705, "category_id": 199, "iscrowd": 0, "bbox": [0, 234, 292, 141], "area": 17621}], "file_name": "000000225532.png", "image_id": 225532}, {"segments_info": [{"id": 10065817, "category_id": 15, "iscrowd": 0, "bbox": [252, 302, 46, 3], "area": 99}, {"id": 11842999, "category_id": 15, "iscrowd": 0, "bbox": [450, 299, 51, 7], "area": 252}, {"id": 10264222, "category_id": 15, "iscrowd": 0, "bbox": [211, 316, 36, 15], "area": 500}, {"id": 13092551, "category_id": 15, "iscrowd": 0, "bbox": [299, 300, 49, 4], "area": 101}, {"id": 13224137, "category_id": 15, "iscrowd": 0, "bbox": [293, 306, 50, 3], "area": 148}, {"id": 13159114, "category_id": 15, "iscrowd": 0, "bbox": [467, 277, 47, 6], "area": 205}, {"id": 11447983, "category_id": 15, "iscrowd": 0, "bbox": [116, 281, 45, 4], "area": 129}, {"id": 11909047, "category_id": 15, "iscrowd": 0, "bbox": [305, 294, 49, 6], "area": 215}, {"id": 10592933, "category_id": 15, "iscrowd": 0, "bbox": [50, 297, 40, 4], "area": 110}, {"id": 11974840, "category_id": 15, "iscrowd": 0, "bbox": [359, 287, 58, 6], "area": 257}, {"id": 11185069, "category_id": 15, "iscrowd": 0, "bbox": [244, 308, 49, 4], "area": 139}, {"id": 12764098, "category_id": 15, "iscrowd": 0, "bbox": [239, 277, 43, 4], "area": 151}, {"id": 13290186, "category_id": 15, "iscrowd": 0, "bbox": [475, 268, 45, 4], "area": 157}, {"id": 10132637, "category_id": 15, "iscrowd": 1, "bbox": [34, 111, 606, 244], "area": 59683}, {"id": 4867647, "category_id": 18, "iscrowd": 0, "bbox": [248, 142, 153, 95], "area": 6443}, {"id": 6967107, "category_id": 34, "iscrowd": 0, "bbox": [438, 159, 31, 19], "area": 389}, {"id": 9924690, "category_id": 92, "iscrowd": 0, "bbox": [0, 168, 640, 259], "area": 45265}, {"id": 11576970, "category_id": 178, "iscrowd": 0, "bbox": [0, 334, 640, 65], "area": 14400}, {"id": 3159347, "category_id": 184, "iscrowd": 0, "bbox": [0, 154, 52, 169], "area": 3726}, {"id": 7034941, "category_id": 185, "iscrowd": 0, "bbox": [354, 227, 20, 10], "area": 156}, {"id": 15194310, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 244], "area": 133882}, {"id": 7960678, "category_id": 199, "iscrowd": 0, "bbox": [0, 218, 562, 141], "area": 5627}], "file_name": "000000225670.png", "image_id": 225670}, {"segments_info": [{"id": 5925221, "category_id": 72, "iscrowd": 0, "bbox": [126, 48, 171, 134], "area": 20580}, {"id": 4345154, "category_id": 72, "iscrowd": 0, "bbox": [1, 60, 78, 114], "area": 6840}, {"id": 4804148, "category_id": 72, "iscrowd": 0, "bbox": [319, 41, 162, 154], "area": 19255}, {"id": 4156532, "category_id": 73, "iscrowd": 0, "bbox": [315, 231, 160, 123], "area": 9835}, {"id": 2176313, "category_id": 74, "iscrowd": 0, "bbox": [251, 283, 44, 55], "area": 1808}, {"id": 1778722, "category_id": 75, "iscrowd": 0, "bbox": [96, 218, 70, 20], "area": 893}, {"id": 9480356, "category_id": 76, "iscrowd": 0, "bbox": [88, 233, 185, 67], "area": 9956}, {"id": 4609106, "category_id": 77, "iscrowd": 0, "bbox": [267, 195, 21, 47], "area": 829}, {"id": 3951688, "category_id": 77, "iscrowd": 0, "bbox": [81, 193, 21, 42], "area": 629}, {"id": 7375494, "category_id": 130, "iscrowd": 0, "bbox": [56, 39, 16, 17], "area": 215}, {"id": 5206390, "category_id": 156, "iscrowd": 0, "bbox": [0, 8, 500, 279], "area": 11890}, {"id": 5341330, "category_id": 189, "iscrowd": 0, "bbox": [0, 137, 493, 230], "area": 30938}, {"id": 1842960, "category_id": 190, "iscrowd": 0, "bbox": [36, 330, 244, 37], "area": 4626}, {"id": 3756624, "category_id": 195, "iscrowd": 0, "bbox": [479, 110, 21, 99], "area": 1268}, {"id": 6848111, "category_id": 199, "iscrowd": 0, "bbox": [80, 35, 420, 151], "area": 9042}], "file_name": "000000225757.png", "image_id": 225757}, {"segments_info": [{"id": 3426121, "category_id": 7, "iscrowd": 0, "bbox": [183, 160, 327, 114], "area": 22446}, {"id": 2700086, "category_id": 13, "iscrowd": 0, "bbox": [67, 204, 32, 55], "area": 844}, {"id": 5400699, "category_id": 125, "iscrowd": 0, "bbox": [0, 240, 493, 101], "area": 11801}, {"id": 3098727, "category_id": 147, "iscrowd": 0, "bbox": [0, 267, 241, 25], "area": 3653}, {"id": 1979446, "category_id": 184, "iscrowd": 0, "bbox": [0, 177, 640, 114], "area": 20079}, {"id": 13414553, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 247], "area": 128511}, {"id": 2838881, "category_id": 193, "iscrowd": 0, "bbox": [0, 259, 535, 104], "area": 16171}, {"id": 4220806, "category_id": 194, "iscrowd": 0, "bbox": [0, 252, 640, 211], "area": 92333}], "file_name": "000000225946.png", "image_id": 225946}, {"segments_info": [{"id": 5271436, "category_id": 63, "iscrowd": 0, "bbox": [1, 43, 639, 432], "area": 106360}, {"id": 7567284, "category_id": 88, "iscrowd": 0, "bbox": [273, 155, 236, 259], "area": 39593}, {"id": 4678527, "category_id": 88, "iscrowd": 0, "bbox": [152, 129, 219, 260], "area": 30067}, {"id": 1249145, "category_id": 141, "iscrowd": 0, "bbox": [0, 94, 640, 386], "area": 75216}, {"id": 6448227, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 128], "area": 48097}], "file_name": "000000226058.png", "image_id": 226058}, {"segments_info": [{"id": 10661044, "category_id": 184, "iscrowd": 0, "bbox": [0, 518, 358, 122], "area": 5014}, {"id": 16316400, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 51276}, {"id": 3162692, "category_id": 197, "iscrowd": 0, "bbox": [316, 280, 164, 360], "area": 31904}], "file_name": "000000226111.png", "image_id": 226111}, {"segments_info": [{"id": 535180, "category_id": 58, "iscrowd": 0, "bbox": [13, 148, 570, 273], "area": 100436}, {"id": 606097, "category_id": 58, "iscrowd": 0, "bbox": [229, 50, 356, 177], "area": 33813}, {"id": 6854849, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 135448}], "file_name": "000000226130.png", "image_id": 226130}, {"segments_info": [{"id": 5261649, "category_id": 1, "iscrowd": 0, "bbox": [132, 2, 114, 225], "area": 12067}, {"id": 4673383, "category_id": 1, "iscrowd": 0, "bbox": [207, 0, 273, 410], "area": 56852}, {"id": 1184061, "category_id": 31, "iscrowd": 0, "bbox": [202, 268, 81, 50], "area": 2879}, {"id": 1248270, "category_id": 31, "iscrowd": 0, "bbox": [272, 114, 180, 182], "area": 6074}, {"id": 2169416, "category_id": 31, "iscrowd": 0, "bbox": [167, 0, 64, 95], "area": 2110}, {"id": 9212071, "category_id": 47, "iscrowd": 0, "bbox": [91, 371, 83, 112], "area": 7244}, {"id": 5986392, "category_id": 48, "iscrowd": 0, "bbox": [196, 355, 16, 9], "area": 83}, {"id": 5328467, "category_id": 48, "iscrowd": 0, "bbox": [195, 328, 56, 40], "area": 389}, {"id": 6774886, "category_id": 48, "iscrowd": 0, "bbox": [418, 572, 42, 68], "area": 1544}, {"id": 4341314, "category_id": 49, "iscrowd": 0, "bbox": [157, 320, 81, 56], "area": 831}, {"id": 4273986, "category_id": 50, "iscrowd": 0, "bbox": [451, 589, 29, 51], "area": 1144}, {"id": 5407643, "category_id": 54, "iscrowd": 0, "bbox": [96, 491, 132, 118], "area": 11457}, {"id": 4810627, "category_id": 54, "iscrowd": 0, "bbox": [244, 351, 141, 48], "area": 4584}, {"id": 4882298, "category_id": 54, "iscrowd": 0, "bbox": [222, 533, 74, 56], "area": 3306}, {"id": 1844024, "category_id": 62, "iscrowd": 0, "bbox": [258, 103, 70, 44], "area": 805}, {"id": 4477537, "category_id": 62, "iscrowd": 0, "bbox": [9, 227, 143, 58], "area": 3797}, {"id": 8554632, "category_id": 67, "iscrowd": 0, "bbox": [0, 256, 480, 374], "area": 113162}, {"id": 6053741, "category_id": 77, "iscrowd": 0, "bbox": [278, 218, 79, 32], "area": 1184}, {"id": 4080211, "category_id": 85, "iscrowd": 0, "bbox": [193, 46, 9, 15], "area": 99}, {"id": 4541258, "category_id": 86, "iscrowd": 0, "bbox": [33, 219, 54, 208], "area": 7851}, {"id": 13352366, "category_id": 112, "iscrowd": 0, "bbox": [207, 0, 39, 152], "area": 1214}, {"id": 3685741, "category_id": 119, "iscrowd": 0, "bbox": [0, 0, 160, 95], "area": 7433}, {"id": 1251882, "category_id": 177, "iscrowd": 0, "bbox": [217, 0, 263, 189], "area": 17911}, {"id": 9138268, "category_id": 181, "iscrowd": 0, "bbox": [49, 0, 43, 54], "area": 1440}, {"id": 8355455, "category_id": 189, "iscrowd": 0, "bbox": [0, 273, 418, 367], "area": 2757}, {"id": 3156832, "category_id": 190, "iscrowd": 0, "bbox": [0, 147, 234, 151], "area": 12043}, {"id": 4021094, "category_id": 196, "iscrowd": 0, "bbox": [211, 629, 156, 11], "area": 1547}, {"id": 3222579, "category_id": 199, "iscrowd": 0, "bbox": [104, 0, 98, 159], "area": 2589}], "file_name": "000000226147.png", "image_id": 226147}, {"segments_info": [{"id": 2830637, "category_id": 1, "iscrowd": 0, "bbox": [207, 170, 62, 55], "area": 1770}, {"id": 724237, "category_id": 1, "iscrowd": 0, "bbox": [61, 257, 37, 50], "area": 974}, {"id": 3489080, "category_id": 1, "iscrowd": 0, "bbox": [294, 191, 37, 34], "area": 719}, {"id": 2105117, "category_id": 1, "iscrowd": 0, "bbox": [87, 254, 36, 75], "area": 866}, {"id": 2303788, "category_id": 4, "iscrowd": 0, "bbox": [62, 273, 69, 74], "area": 2187}, {"id": 3621430, "category_id": 6, "iscrowd": 0, "bbox": [146, 105, 385, 278], "area": 81939}, {"id": 3883074, "category_id": 149, "iscrowd": 0, "bbox": [0, 250, 640, 257], "area": 81825}, {"id": 2964028, "category_id": 184, "iscrowd": 0, "bbox": [89, 0, 551, 327], "area": 12239}, {"id": 12895684, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 234], "area": 99283}, {"id": 4346987, "category_id": 194, "iscrowd": 0, "bbox": [0, 286, 640, 221], "area": 31333}, {"id": 5399404, "category_id": 197, "iscrowd": 0, "bbox": [0, 204, 142, 101], "area": 6970}], "file_name": "000000226154.png", "image_id": 226154}, {"segments_info": [{"id": 6843490, "category_id": 44, "iscrowd": 0, "bbox": [203, 153, 51, 172], "area": 6375}, {"id": 5402225, "category_id": 47, "iscrowd": 0, "bbox": [53, 285, 95, 113], "area": 8382}, {"id": 8093045, "category_id": 47, "iscrowd": 0, "bbox": [600, 177, 29, 34], "area": 843}, {"id": 11709844, "category_id": 72, "iscrowd": 0, "bbox": [246, 6, 349, 238], "area": 76993}, {"id": 1056014, "category_id": 73, "iscrowd": 0, "bbox": [51, 142, 177, 144], "area": 17839}, {"id": 1517082, "category_id": 76, "iscrowd": 0, "bbox": [273, 278, 367, 109], "area": 31985}, {"id": 4542520, "category_id": 77, "iscrowd": 0, "bbox": [0, 278, 69, 37], "area": 1653}, {"id": 13158847, "category_id": 109, "iscrowd": 0, "bbox": [556, 0, 84, 133], "area": 5496}, {"id": 5663070, "category_id": 130, "iscrowd": 0, "bbox": [67, 34, 100, 134], "area": 5910}, {"id": 6255778, "category_id": 171, "iscrowd": 0, "bbox": [593, 125, 47, 54], "area": 1858}, {"id": 11316379, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 640, 168], "area": 5399}, {"id": 3759481, "category_id": 189, "iscrowd": 0, "bbox": [0, 233, 640, 247], "area": 89910}, {"id": 11381662, "category_id": 195, "iscrowd": 0, "bbox": [0, 283, 220, 90], "area": 5271}, {"id": 5138017, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 557, 249], "area": 34946}], "file_name": "000000226171.png", "image_id": 226171}, {"segments_info": [{"id": 9868950, "category_id": 1, "iscrowd": 0, "bbox": [19, 118, 368, 283], "area": 57939}, {"id": 9145227, "category_id": 65, "iscrowd": 0, "bbox": [0, 115, 307, 348], "area": 34849}, {"id": 11119017, "category_id": 88, "iscrowd": 0, "bbox": [105, 0, 205, 170], "area": 18410}, {"id": 1644825, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 640, 469], "area": 95213}, {"id": 13948116, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 188, 44], "area": 3659}], "file_name": "000000226408.png", "image_id": 226408}, {"segments_info": [{"id": 5196361, "category_id": 1, "iscrowd": 0, "bbox": [252, 175, 10, 13], "area": 60}, {"id": 3749949, "category_id": 1, "iscrowd": 0, "bbox": [352, 165, 39, 68], "area": 867}, {"id": 4601647, "category_id": 1, "iscrowd": 0, "bbox": [181, 174, 5, 8], "area": 29}, {"id": 3354418, "category_id": 1, "iscrowd": 0, "bbox": [304, 162, 48, 87], "area": 1480}, {"id": 3354158, "category_id": 1, "iscrowd": 0, "bbox": [278, 175, 12, 36], "area": 161}, {"id": 4208694, "category_id": 1, "iscrowd": 0, "bbox": [183, 159, 50, 98], "area": 1745}, {"id": 5655903, "category_id": 1, "iscrowd": 0, "bbox": [95, 161, 51, 100], "area": 1459}, {"id": 4273459, "category_id": 1, "iscrowd": 0, "bbox": [280, 164, 32, 86], "area": 777}, {"id": 9266257, "category_id": 1, "iscrowd": 0, "bbox": [476, 163, 24, 79], "area": 563}, {"id": 3485744, "category_id": 1, "iscrowd": 0, "bbox": [0, 169, 50, 119], "area": 3350}, {"id": 5001052, "category_id": 2, "iscrowd": 0, "bbox": [362, 203, 24, 48], "area": 749}, {"id": 8222580, "category_id": 2, "iscrowd": 0, "bbox": [450, 192, 49, 51], "area": 1303}, {"id": 8617336, "category_id": 3, "iscrowd": 0, "bbox": [155, 181, 44, 39], "area": 1153}, {"id": 6644575, "category_id": 4, "iscrowd": 0, "bbox": [252, 186, 10, 17], "area": 117}, {"id": 5526359, "category_id": 4, "iscrowd": 0, "bbox": [291, 188, 59, 86], "area": 1661}, {"id": 6709886, "category_id": 4, "iscrowd": 0, "bbox": [102, 188, 44, 80], "area": 1473}, {"id": 6381928, "category_id": 4, "iscrowd": 0, "bbox": [195, 198, 36, 65], "area": 1437}, {"id": 5525584, "category_id": 4, "iscrowd": 0, "bbox": [281, 181, 13, 34], "area": 74}, {"id": 4348782, "category_id": 10, "iscrowd": 0, "bbox": [412, 60, 15, 42], "area": 469}, {"id": 5067356, "category_id": 10, "iscrowd": 0, "bbox": [54, 68, 22, 50], "area": 1054}, {"id": 5132646, "category_id": 11, "iscrowd": 0, "bbox": [430, 210, 16, 25], "area": 245}, {"id": 6319753, "category_id": 27, "iscrowd": 0, "bbox": [299, 192, 20, 36], "area": 467}, {"id": 7363968, "category_id": 27, "iscrowd": 0, "bbox": [370, 181, 15, 23], "area": 259}, {"id": 3887989, "category_id": 31, "iscrowd": 0, "bbox": [0, 231, 21, 34], "area": 527}, {"id": 3683639, "category_id": 31, "iscrowd": 0, "bbox": [129, 204, 12, 9], "area": 76}, {"id": 11908019, "category_id": 149, "iscrowd": 0, "bbox": [0, 193, 500, 140], "area": 46419}, {"id": 4015707, "category_id": 171, "iscrowd": 0, "bbox": [347, 0, 75, 146], "area": 7016}, {"id": 14013648, "category_id": 187, "iscrowd": 0, "bbox": [327, 0, 23, 14], "area": 169}, {"id": 6843502, "category_id": 191, "iscrowd": 0, "bbox": [47, 180, 439, 67], "area": 1989}, {"id": 6579560, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 236], "area": 84751}], "file_name": "000000226417.png", "image_id": 226417}, {"segments_info": [{"id": 6055825, "category_id": 65, "iscrowd": 0, "bbox": [71, 25, 569, 419], "area": 125844}, {"id": 951737, "category_id": 100, "iscrowd": 0, "bbox": [0, 45, 123, 269], "area": 6342}, {"id": 10533601, "category_id": 109, "iscrowd": 0, "bbox": [528, 0, 112, 90], "area": 8525}, {"id": 593973, "category_id": 112, "iscrowd": 0, "bbox": [355, 0, 74, 134], "area": 8148}, {"id": 3300050, "category_id": 168, "iscrowd": 0, "bbox": [138, 325, 204, 128], "area": 12861}, {"id": 7845082, "category_id": 189, "iscrowd": 0, "bbox": [0, 392, 38, 88], "area": 1956}, {"id": 6057876, "category_id": 190, "iscrowd": 0, "bbox": [0, 117, 640, 363], "area": 28196}, {"id": 9139842, "category_id": 195, "iscrowd": 0, "bbox": [0, 59, 108, 231], "area": 16885}, {"id": 4022954, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 168], "area": 39839}, {"id": 3358298, "category_id": 200, "iscrowd": 0, "bbox": [0, 253, 640, 227], "area": 58229}], "file_name": "000000226592.png", "image_id": 226592}, {"segments_info": [{"id": 2565927, "category_id": 1, "iscrowd": 0, "bbox": [484, 11, 78, 203], "area": 9977}, {"id": 1381653, "category_id": 1, "iscrowd": 0, "bbox": [548, 9, 52, 198], "area": 7131}, {"id": 3815994, "category_id": 4, "iscrowd": 0, "bbox": [10, 10, 517, 314], "area": 47569}, {"id": 3618615, "category_id": 4, "iscrowd": 0, "bbox": [88, 18, 517, 427], "area": 128863}, {"id": 5197647, "category_id": 149, "iscrowd": 0, "bbox": [0, 72, 580, 381], "area": 38019}, {"id": 6250335, "category_id": 191, "iscrowd": 0, "bbox": [489, 133, 151, 320], "area": 14815}], "file_name": "000000226662.png", "image_id": 226662}, {"segments_info": [{"id": 1644311, "category_id": 1, "iscrowd": 0, "bbox": [23, 191, 19, 53], "area": 603}, {"id": 3156524, "category_id": 1, "iscrowd": 0, "bbox": [334, 189, 8, 27], "area": 122}, {"id": 2433598, "category_id": 1, "iscrowd": 0, "bbox": [317, 189, 7, 24], "area": 109}, {"id": 1972759, "category_id": 1, "iscrowd": 0, "bbox": [17, 190, 9, 16], "area": 73}, {"id": 1709592, "category_id": 1, "iscrowd": 0, "bbox": [450, 191, 12, 28], "area": 195}, {"id": 3616558, "category_id": 1, "iscrowd": 0, "bbox": [386, 192, 10, 22], "area": 99}, {"id": 2169886, "category_id": 1, "iscrowd": 0, "bbox": [410, 193, 8, 28], "area": 139}, {"id": 3478799, "category_id": 1, "iscrowd": 0, "bbox": [489, 189, 8, 19], "area": 97}, {"id": 3155746, "category_id": 1, "iscrowd": 0, "bbox": [283, 189, 9, 18], "area": 71}, {"id": 1646104, "category_id": 1, "iscrowd": 0, "bbox": [57, 191, 16, 29], "area": 156}, {"id": 2894377, "category_id": 1, "iscrowd": 0, "bbox": [112, 186, 23, 63], "area": 844}, {"id": 2168598, "category_id": 1, "iscrowd": 0, "bbox": [473, 188, 7, 20], "area": 69}, {"id": 2037519, "category_id": 1, "iscrowd": 0, "bbox": [599, 191, 13, 33], "area": 212}, {"id": 2301985, "category_id": 1, "iscrowd": 1, "bbox": [185, 181, 420, 43], "area": 2219}, {"id": 2966831, "category_id": 3, "iscrowd": 0, "bbox": [569, 194, 62, 25], "area": 824}, {"id": 5260341, "category_id": 3, "iscrowd": 0, "bbox": [519, 193, 51, 24], "area": 927}, {"id": 5715745, "category_id": 3, "iscrowd": 0, "bbox": [505, 188, 22, 22], "area": 253}, {"id": 2696754, "category_id": 4, "iscrowd": 0, "bbox": [366, 200, 35, 22], "area": 388}, {"id": 2829126, "category_id": 6, "iscrowd": 0, "bbox": [371, 167, 72, 46], "area": 2448}, {"id": 2960955, "category_id": 6, "iscrowd": 0, "bbox": [363, 177, 9, 17], "area": 131}, {"id": 3749692, "category_id": 6, "iscrowd": 0, "bbox": [328, 178, 36, 21], "area": 641}, {"id": 3880506, "category_id": 6, "iscrowd": 0, "bbox": [240, 176, 80, 27], "area": 1633}, {"id": 2371125, "category_id": 6, "iscrowd": 0, "bbox": [439, 172, 25, 34], "area": 528}, {"id": 5591138, "category_id": 149, "iscrowd": 0, "bbox": [0, 192, 640, 168], "area": 96043}, {"id": 2043687, "category_id": 184, "iscrowd": 0, "bbox": [0, 116, 640, 80], "area": 13762}, {"id": 2763305, "category_id": 185, "iscrowd": 0, "bbox": [600, 175, 40, 41], "area": 886}, {"id": 16447989, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 598, 171], "area": 49963}, {"id": 4670795, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 217], "area": 55159}], "file_name": "000000226802.png", "image_id": 226802}, {"segments_info": [{"id": 3950161, "category_id": 19, "iscrowd": 0, "bbox": [478, 190, 91, 125], "area": 5932}, {"id": 9537154, "category_id": 128, "iscrowd": 0, "bbox": [0, 50, 272, 419], "area": 59680}, {"id": 5727843, "category_id": 184, "iscrowd": 0, "bbox": [142, 0, 498, 345], "area": 95345}, {"id": 16579836, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 233, 115], "area": 17792}, {"id": 2763818, "category_id": 193, "iscrowd": 0, "bbox": [235, 272, 22, 23], "area": 345}], "file_name": "000000226883.png", "image_id": 226883}, {"segments_info": [{"id": 15518594, "category_id": 1, "iscrowd": 0, "bbox": [561, 67, 79, 169], "area": 6313}, {"id": 10854545, "category_id": 2, "iscrowd": 0, "bbox": [328, 99, 106, 83], "area": 4965}, {"id": 5859167, "category_id": 44, "iscrowd": 0, "bbox": [205, 120, 29, 65], "area": 822}, {"id": 3957631, "category_id": 44, "iscrowd": 0, "bbox": [211, 156, 23, 32], "area": 575}, {"id": 4606284, "category_id": 49, "iscrowd": 0, "bbox": [325, 255, 86, 25], "area": 657}, {"id": 7435126, "category_id": 50, "iscrowd": 0, "bbox": [347, 251, 41, 46], "area": 527}, {"id": 1977150, "category_id": 54, "iscrowd": 0, "bbox": [604, 302, 36, 36], "area": 889}, {"id": 2833230, "category_id": 54, "iscrowd": 0, "bbox": [412, 299, 120, 39], "area": 1732}, {"id": 4093075, "category_id": 61, "iscrowd": 0, "bbox": [134, 198, 32, 25], "area": 381}, {"id": 4221586, "category_id": 61, "iscrowd": 0, "bbox": [283, 191, 42, 19], "area": 614}, {"id": 3488587, "category_id": 61, "iscrowd": 0, "bbox": [472, 226, 43, 23], "area": 872}, {"id": 4215655, "category_id": 61, "iscrowd": 0, "bbox": [544, 304, 54, 21], "area": 762}, {"id": 2570058, "category_id": 61, "iscrowd": 0, "bbox": [259, 226, 43, 24], "area": 744}, {"id": 2773109, "category_id": 61, "iscrowd": 0, "bbox": [164, 193, 26, 28], "area": 571}, {"id": 2501192, "category_id": 61, "iscrowd": 0, "bbox": [241, 212, 40, 34], "area": 733}, {"id": 2041666, "category_id": 61, "iscrowd": 0, "bbox": [207, 221, 37, 25], "area": 728}, {"id": 5278914, "category_id": 61, "iscrowd": 0, "bbox": [212, 187, 25, 7], "area": 168}, {"id": 2969962, "category_id": 61, "iscrowd": 0, "bbox": [86, 194, 40, 33], "area": 860}, {"id": 5994119, "category_id": 61, "iscrowd": 0, "bbox": [290, 217, 77, 54], "area": 3127}, {"id": 1586524, "category_id": 61, "iscrowd": 0, "bbox": [124, 198, 31, 27], "area": 633}, {"id": 6915488, "category_id": 61, "iscrowd": 1, "bbox": [68, 130, 495, 95], "area": 2712}, {"id": 7568003, "category_id": 67, "iscrowd": 0, "bbox": [8, 191, 631, 172], "area": 51691}, {"id": 16448507, "category_id": 130, "iscrowd": 0, "bbox": [138, 0, 50, 24], "area": 748}, {"id": 13091260, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 640, 223], "area": 78305}, {"id": 3027252, "category_id": 188, "iscrowd": 0, "bbox": [0, 208, 640, 272], "area": 87755}, {"id": 987667, "category_id": 189, "iscrowd": 0, "bbox": [502, 353, 20, 8], "area": 114}, {"id": 12691864, "category_id": 190, "iscrowd": 0, "bbox": [331, 387, 228, 93], "area": 9747}, {"id": 9607844, "category_id": 195, "iscrowd": 0, "bbox": [63, 122, 577, 134], "area": 5693}, {"id": 5725539, "category_id": 199, "iscrowd": 0, "bbox": [96, 0, 179, 204], "area": 25361}], "file_name": "000000226903.png", "image_id": 226903}, {"segments_info": [{"id": 1188661, "category_id": 44, "iscrowd": 0, "bbox": [118, 198, 8, 23], "area": 160}, {"id": 2371125, "category_id": 44, "iscrowd": 0, "bbox": [129, 200, 28, 55], "area": 1118}, {"id": 864054, "category_id": 44, "iscrowd": 0, "bbox": [465, 191, 12, 11], "area": 104}, {"id": 7372682, "category_id": 44, "iscrowd": 0, "bbox": [178, 214, 27, 73], "area": 1403}, {"id": 5528167, "category_id": 46, "iscrowd": 0, "bbox": [80, 220, 25, 45], "area": 439}, {"id": 7635600, "category_id": 46, "iscrowd": 0, "bbox": [102, 223, 22, 38], "area": 435}, {"id": 3756381, "category_id": 46, "iscrowd": 0, "bbox": [25, 225, 29, 78], "area": 1425}, {"id": 5464951, "category_id": 47, "iscrowd": 0, "bbox": [501, 80, 18, 24], "area": 341}, {"id": 527892, "category_id": 49, "iscrowd": 0, "bbox": [171, 175, 6, 16], "area": 35}, {"id": 1120029, "category_id": 49, "iscrowd": 0, "bbox": [180, 188, 8, 15], "area": 55}, {"id": 330515, "category_id": 49, "iscrowd": 0, "bbox": [163, 171, 4, 13], "area": 35}, {"id": 1582639, "category_id": 49, "iscrowd": 0, "bbox": [183, 176, 7, 14], "area": 24}, {"id": 858399, "category_id": 49, "iscrowd": 0, "bbox": [180, 176, 4, 13], "area": 23}, {"id": 660764, "category_id": 49, "iscrowd": 0, "bbox": [177, 169, 2, 4], "area": 5}, {"id": 527890, "category_id": 49, "iscrowd": 0, "bbox": [167, 169, 7, 16], "area": 44}, {"id": 725527, "category_id": 49, "iscrowd": 0, "bbox": [179, 179, 3, 8], "area": 14}, {"id": 857112, "category_id": 49, "iscrowd": 0, "bbox": [170, 172, 7, 14], "area": 34}, {"id": 528661, "category_id": 49, "iscrowd": 0, "bbox": [174, 176, 6, 15], "area": 35}, {"id": 9808564, "category_id": 51, "iscrowd": 0, "bbox": [173, 211, 17, 12], "area": 162}, {"id": 1256495, "category_id": 64, "iscrowd": 0, "bbox": [451, 13, 64, 57], "area": 2606}, {"id": 2506050, "category_id": 64, "iscrowd": 0, "bbox": [290, 9, 92, 49], "area": 3245}, {"id": 6585228, "category_id": 79, "iscrowd": 0, "bbox": [284, 171, 119, 178], "area": 18076}, {"id": 2702406, "category_id": 81, "iscrowd": 0, "bbox": [154, 230, 60, 18], "area": 564}, {"id": 6979212, "category_id": 82, "iscrowd": 0, "bbox": [466, 100, 75, 297], "area": 15142}, {"id": 3361899, "category_id": 93, "iscrowd": 0, "bbox": [219, 289, 22, 55], "area": 586}, {"id": 3432557, "category_id": 100, "iscrowd": 0, "bbox": [421, 88, 124, 131], "area": 1101}, {"id": 7243669, "category_id": 112, "iscrowd": 0, "bbox": [533, 0, 107, 427], "area": 38358}, {"id": 1460833, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 531, 427], "area": 105516}, {"id": 4813961, "category_id": 190, "iscrowd": 0, "bbox": [337, 334, 198, 93], "area": 8594}, {"id": 2573395, "category_id": 195, "iscrowd": 0, "bbox": [131, 0, 107, 222], "area": 3175}, {"id": 5139323, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 568, 427], "area": 36470}, {"id": 2244437, "category_id": 200, "iscrowd": 0, "bbox": [219, 336, 304, 91], "area": 14500}], "file_name": "000000226984.png", "image_id": 226984}, {"segments_info": [{"id": 5739693, "category_id": 17, "iscrowd": 0, "bbox": [121, 41, 514, 389], "area": 75217}, {"id": 2910314, "category_id": 47, "iscrowd": 0, "bbox": [5, 1, 70, 40], "area": 2584}, {"id": 5477798, "category_id": 47, "iscrowd": 0, "bbox": [195, 0, 64, 41], "area": 2246}, {"id": 4885395, "category_id": 47, "iscrowd": 0, "bbox": [114, 0, 61, 43], "area": 2206}, {"id": 4422798, "category_id": 70, "iscrowd": 0, "bbox": [627, 400, 13, 51], "area": 452}, {"id": 8765910, "category_id": 81, "iscrowd": 0, "bbox": [5, 229, 464, 232], "area": 56166}, {"id": 2518919, "category_id": 176, "iscrowd": 0, "bbox": [0, 159, 640, 321], "area": 68944}, {"id": 2518148, "category_id": 190, "iscrowd": 0, "bbox": [452, 393, 188, 87], "area": 8355}, {"id": 7186368, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 218], "area": 71807}], "file_name": "000000227044.png", "image_id": 227044}, {"segments_info": [{"id": 6262423, "category_id": 16, "iscrowd": 0, "bbox": [0, 211, 46, 41], "area": 983}, {"id": 6387326, "category_id": 16, "iscrowd": 0, "bbox": [243, 211, 55, 57], "area": 1510}, {"id": 2239555, "category_id": 16, "iscrowd": 0, "bbox": [381, 205, 76, 55], "area": 1595}, {"id": 5142143, "category_id": 16, "iscrowd": 0, "bbox": [82, 187, 94, 68], "area": 2195}, {"id": 4022889, "category_id": 16, "iscrowd": 0, "bbox": [112, 161, 44, 39], "area": 922}, {"id": 10995925, "category_id": 52, "iscrowd": 0, "bbox": [0, 236, 122, 49], "area": 3699}, {"id": 13888753, "category_id": 52, "iscrowd": 0, "bbox": [143, 300, 108, 27], "area": 1766}, {"id": 10935015, "category_id": 52, "iscrowd": 0, "bbox": [319, 278, 79, 20], "area": 839}, {"id": 7325656, "category_id": 52, "iscrowd": 0, "bbox": [52, 223, 59, 18], "area": 606}, {"id": 9355726, "category_id": 52, "iscrowd": 0, "bbox": [272, 255, 48, 37], "area": 905}, {"id": 13559021, "category_id": 52, "iscrowd": 0, "bbox": [222, 254, 53, 44], "area": 1119}, {"id": 6589310, "category_id": 178, "iscrowd": 0, "bbox": [0, 0, 640, 463], "area": 61735}, {"id": 5864562, "category_id": 184, "iscrowd": 0, "bbox": [33, 0, 607, 480], "area": 145670}, {"id": 8303006, "category_id": 193, "iscrowd": 0, "bbox": [0, 392, 640, 88], "area": 12184}], "file_name": "000000227187.png", "image_id": 227187}, {"segments_info": [{"id": 5001319, "category_id": 1, "iscrowd": 0, "bbox": [0, 214, 19, 135], "area": 1412}, {"id": 9336699, "category_id": 1, "iscrowd": 0, "bbox": [53, 203, 28, 49], "area": 553}, {"id": 2763838, "category_id": 1, "iscrowd": 0, "bbox": [383, 173, 44, 67], "area": 1561}, {"id": 3420479, "category_id": 1, "iscrowd": 0, "bbox": [465, 169, 30, 127], "area": 2119}, {"id": 2762807, "category_id": 1, "iscrowd": 0, "bbox": [494, 180, 39, 107], "area": 2543}, {"id": 2106682, "category_id": 1, "iscrowd": 0, "bbox": [443, 179, 14, 30], "area": 167}, {"id": 5791341, "category_id": 1, "iscrowd": 0, "bbox": [79, 192, 49, 129], "area": 3545}, {"id": 2893098, "category_id": 1, "iscrowd": 0, "bbox": [130, 225, 11, 31], "area": 225}, {"id": 2697561, "category_id": 1, "iscrowd": 0, "bbox": [579, 156, 35, 47], "area": 692}, {"id": 2960725, "category_id": 1, "iscrowd": 0, "bbox": [616, 159, 24, 80], "area": 984}, {"id": 3616049, "category_id": 1, "iscrowd": 0, "bbox": [10, 191, 79, 145], "area": 5127}, {"id": 2631992, "category_id": 1, "iscrowd": 0, "bbox": [137, 199, 71, 150], "area": 6804}, {"id": 2829383, "category_id": 1, "iscrowd": 0, "bbox": [429, 175, 29, 70], "area": 1203}, {"id": 3026230, "category_id": 1, "iscrowd": 1, "bbox": [124, 174, 353, 114], "area": 2384}, {"id": 5001567, "category_id": 2, "iscrowd": 0, "bbox": [16, 255, 68, 141], "area": 4445}, {"id": 5394525, "category_id": 2, "iscrowd": 0, "bbox": [67, 291, 13, 12], "area": 94}, {"id": 657426, "category_id": 4, "iscrowd": 0, "bbox": [534, 184, 106, 158], "area": 11850}, {"id": 5596277, "category_id": 7, "iscrowd": 0, "bbox": [105, 91, 355, 296], "area": 51298}, {"id": 3420474, "category_id": 27, "iscrowd": 0, "bbox": [91, 231, 18, 25], "area": 378}, {"id": 1711137, "category_id": 31, "iscrowd": 0, "bbox": [467, 223, 24, 26], "area": 383}, {"id": 3879743, "category_id": 31, "iscrowd": 0, "bbox": [425, 200, 18, 32], "area": 105}, {"id": 1052180, "category_id": 31, "iscrowd": 0, "bbox": [494, 232, 18, 13], "area": 185}, {"id": 787761, "category_id": 31, "iscrowd": 0, "bbox": [436, 216, 23, 13], "area": 150}, {"id": 2761511, "category_id": 33, "iscrowd": 0, "bbox": [205, 283, 17, 34], "area": 425}, {"id": 7698302, "category_id": 112, "iscrowd": 0, "bbox": [587, 35, 53, 135], "area": 5871}, {"id": 3882050, "category_id": 149, "iscrowd": 0, "bbox": [0, 248, 640, 234], "area": 78459}, {"id": 6584699, "category_id": 184, "iscrowd": 0, "bbox": [0, 86, 235, 142], "area": 8642}, {"id": 15064021, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 208, 185], "area": 31052}, {"id": 2631727, "category_id": 191, "iscrowd": 0, "bbox": [451, 253, 189, 180], "area": 15396}, {"id": 11839652, "category_id": 192, "iscrowd": 0, "bbox": [85, 179, 116, 21], "area": 1362}, {"id": 5789792, "category_id": 195, "iscrowd": 0, "bbox": [518, 0, 98, 113], "area": 7918}, {"id": 6317423, "category_id": 197, "iscrowd": 0, "bbox": [197, 0, 443, 292], "area": 56987}], "file_name": "000000227399.png", "image_id": 227399}, {"segments_info": [{"id": 3748917, "category_id": 1, "iscrowd": 0, "bbox": [18, 146, 310, 297], "area": 20570}, {"id": 2893608, "category_id": 1, "iscrowd": 0, "bbox": [28, 130, 221, 270], "area": 13627}, {"id": 5393742, "category_id": 15, "iscrowd": 0, "bbox": [77, 153, 275, 321], "area": 24873}, {"id": 5920086, "category_id": 15, "iscrowd": 0, "bbox": [60, 20, 157, 63], "area": 5037}, {"id": 7433582, "category_id": 15, "iscrowd": 0, "bbox": [122, 77, 256, 71], "area": 3683}, {"id": 8881028, "category_id": 31, "iscrowd": 0, "bbox": [139, 289, 49, 25], "area": 810}, {"id": 5722707, "category_id": 171, "iscrowd": 0, "bbox": [270, 0, 186, 54], "area": 4888}, {"id": 6249051, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 131], "area": 25274}, {"id": 10722975, "category_id": 191, "iscrowd": 0, "bbox": [0, 31, 545, 449], "area": 56843}, {"id": 8354427, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 144901}, {"id": 6314844, "category_id": 199, "iscrowd": 0, "bbox": [238, 0, 54, 72], "area": 1774}], "file_name": "000000227478.png", "image_id": 227478}, {"segments_info": [{"id": 8027526, "category_id": 1, "iscrowd": 0, "bbox": [72, 125, 341, 355], "area": 51920}, {"id": 13356750, "category_id": 34, "iscrowd": 0, "bbox": [102, 333, 145, 76], "area": 7675}, {"id": 658442, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 252], "area": 81538}, {"id": 987666, "category_id": 185, "iscrowd": 0, "bbox": [0, 18, 640, 239], "area": 57659}, {"id": 1654317, "category_id": 193, "iscrowd": 0, "bbox": [0, 312, 640, 168], "area": 54668}, {"id": 1186330, "category_id": 194, "iscrowd": 0, "bbox": [0, 249, 640, 180], "area": 52710}], "file_name": "000000227482.png", "image_id": 227482}, {"segments_info": [{"id": 1249298, "category_id": 1, "iscrowd": 0, "bbox": [144, 160, 180, 315], "area": 35055}, {"id": 4932420, "category_id": 15, "iscrowd": 0, "bbox": [41, 341, 528, 139], "area": 29111}, {"id": 3546889, "category_id": 44, "iscrowd": 0, "bbox": [303, 341, 35, 60], "area": 1655}, {"id": 2173768, "category_id": 54, "iscrowd": 0, "bbox": [140, 256, 27, 27], "area": 451}, {"id": 2830402, "category_id": 60, "iscrowd": 0, "bbox": [307, 327, 31, 15], "area": 345}, {"id": 9931143, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 236344}, {"id": 2499620, "category_id": 184, "iscrowd": 0, "bbox": [90, 0, 172, 75], "area": 2935}], "file_name": "000000227491.png", "image_id": 227491}, {"segments_info": [{"id": 5592658, "category_id": 3, "iscrowd": 0, "bbox": [183, 259, 12, 9], "area": 58}, {"id": 5460304, "category_id": 3, "iscrowd": 0, "bbox": [66, 287, 160, 88], "area": 11536}, {"id": 5197130, "category_id": 3, "iscrowd": 0, "bbox": [138, 261, 15, 8], "area": 89}, {"id": 8750209, "category_id": 3, "iscrowd": 0, "bbox": [157, 257, 18, 14], "area": 197}, {"id": 4736837, "category_id": 3, "iscrowd": 0, "bbox": [225, 261, 43, 33], "area": 1112}, {"id": 4935242, "category_id": 3, "iscrowd": 0, "bbox": [243, 258, 28, 27], "area": 185}, {"id": 1319017, "category_id": 11, "iscrowd": 0, "bbox": [80, 272, 5, 8], "area": 27}, {"id": 7369331, "category_id": 149, "iscrowd": 0, "bbox": [0, 263, 261, 112], "area": 10298}, {"id": 4348756, "category_id": 184, "iscrowd": 0, "bbox": [28, 0, 472, 375], "area": 82695}, {"id": 16580092, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 490, 217], "area": 34465}, {"id": 8687507, "category_id": 191, "iscrowd": 0, "bbox": [0, 266, 386, 109], "area": 9089}, {"id": 1590579, "category_id": 193, "iscrowd": 0, "bbox": [25, 248, 475, 127], "area": 6548}, {"id": 3555144, "category_id": 197, "iscrowd": 0, "bbox": [0, 79, 199, 205], "area": 14154}], "file_name": "000000227511.png", "image_id": 227511}, {"segments_info": [{"id": 988443, "category_id": 19, "iscrowd": 0, "bbox": [18, 227, 325, 398], "area": 73955}, {"id": 4284781, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 191082}], "file_name": "000000227686.png", "image_id": 227686}, {"segments_info": [{"id": 2577543, "category_id": 50, "iscrowd": 0, "bbox": [305, 171, 334, 197], "area": 10875}, {"id": 886983, "category_id": 57, "iscrowd": 0, "bbox": [266, 163, 27, 26], "area": 492}, {"id": 543902, "category_id": 57, "iscrowd": 0, "bbox": [143, 218, 20, 27], "area": 350}, {"id": 620745, "category_id": 57, "iscrowd": 0, "bbox": [321, 258, 36, 34], "area": 966}, {"id": 1286638, "category_id": 57, "iscrowd": 0, "bbox": [276, 244, 25, 29], "area": 391}, {"id": 811677, "category_id": 57, "iscrowd": 0, "bbox": [140, 93, 341, 346], "area": 73376}, {"id": 490695, "category_id": 57, "iscrowd": 0, "bbox": [146, 262, 155, 132], "area": 10870}, {"id": 1664952, "category_id": 57, "iscrowd": 0, "bbox": [215, 140, 21, 31], "area": 562}, {"id": 4945528, "category_id": 107, "iscrowd": 0, "bbox": [0, 123, 235, 357], "area": 5231}], "file_name": "000000227765.png", "image_id": 227765}, {"segments_info": [{"id": 6117980, "category_id": 1, "iscrowd": 0, "bbox": [325, 139, 73, 105], "area": 2837}, {"id": 7169385, "category_id": 1, "iscrowd": 0, "bbox": [469, 174, 46, 38], "area": 887}, {"id": 8282968, "category_id": 1, "iscrowd": 0, "bbox": [501, 186, 50, 84], "area": 1975}, {"id": 12430248, "category_id": 1, "iscrowd": 0, "bbox": [440, 199, 53, 74], "area": 1335}, {"id": 12626075, "category_id": 1, "iscrowd": 0, "bbox": [0, 243, 16, 20], "area": 214}, {"id": 11510939, "category_id": 3, "iscrowd": 0, "bbox": [578, 188, 62, 116], "area": 4936}, {"id": 8030857, "category_id": 15, "iscrowd": 0, "bbox": [52, 243, 63, 44], "area": 1574}, {"id": 4674148, "category_id": 19, "iscrowd": 0, "bbox": [47, 198, 217, 148], "area": 14654}, {"id": 11770756, "category_id": 119, "iscrowd": 0, "bbox": [503, 158, 42, 100], "area": 646}, {"id": 13159370, "category_id": 149, "iscrowd": 0, "bbox": [0, 287, 640, 137], "area": 63657}, {"id": 11579805, "category_id": 151, "iscrowd": 0, "bbox": [395, 0, 155, 166], "area": 15543}, {"id": 12174278, "category_id": 175, "iscrowd": 0, "bbox": [0, 255, 279, 74], "area": 6997}, {"id": 4360052, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 272], "area": 104836}, {"id": 11917533, "category_id": 185, "iscrowd": 0, "bbox": [415, 208, 34, 27], "area": 492}, {"id": 11053481, "category_id": 191, "iscrowd": 0, "bbox": [0, 282, 554, 66], "area": 8409}, {"id": 11190979, "category_id": 193, "iscrowd": 0, "bbox": [0, 252, 245, 57], "area": 3347}, {"id": 8550251, "category_id": 197, "iscrowd": 0, "bbox": [0, 123, 292, 139], "area": 6148}], "file_name": "000000227898.png", "image_id": 227898}, {"segments_info": [{"id": 9213335, "category_id": 49, "iscrowd": 0, "bbox": [544, 54, 96, 88], "area": 2221}, {"id": 5272728, "category_id": 54, "iscrowd": 0, "bbox": [65, 2, 354, 389], "area": 68316}, {"id": 4679571, "category_id": 54, "iscrowd": 0, "bbox": [321, 111, 274, 319], "area": 58052}, {"id": 2107210, "category_id": 67, "iscrowd": 0, "bbox": [0, 1, 640, 474], "area": 66753}, {"id": 4874657, "category_id": 122, "iscrowd": 0, "bbox": [91, 0, 235, 110], "area": 11829}, {"id": 5200241, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 9864}], "file_name": "000000227985.png", "image_id": 227985}, {"segments_info": [{"id": 4276545, "category_id": 62, "iscrowd": 0, "bbox": [2, 75, 214, 336], "area": 34968}, {"id": 3618615, "category_id": 62, "iscrowd": 0, "bbox": [195, 2, 369, 424], "area": 62434}, {"id": 4605510, "category_id": 62, "iscrowd": 0, "bbox": [546, 113, 93, 226], "area": 17416}, {"id": 8684676, "category_id": 67, "iscrowd": 0, "bbox": [0, 293, 58, 133], "area": 6690}, {"id": 10263708, "category_id": 133, "iscrowd": 0, "bbox": [270, 35, 208, 265], "area": 42383}, {"id": 11579568, "category_id": 190, "iscrowd": 0, "bbox": [493, 311, 147, 115], "area": 12851}, {"id": 11645361, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 374], "area": 84965}, {"id": 1250067, "category_id": 200, "iscrowd": 0, "bbox": [46, 348, 171, 78], "area": 9864}], "file_name": "000000228144.png", "image_id": 228144}, {"segments_info": [{"id": 8814710, "category_id": 1, "iscrowd": 0, "bbox": [373, 388, 26, 73], "area": 919}, {"id": 4867660, "category_id": 1, "iscrowd": 0, "bbox": [1, 19, 385, 604], "area": 159561}, {"id": 8418399, "category_id": 1, "iscrowd": 0, "bbox": [397, 381, 32, 82], "area": 1273}, {"id": 9538166, "category_id": 1, "iscrowd": 0, "bbox": [288, 476, 118, 164], "area": 10999}, {"id": 15132388, "category_id": 28, "iscrowd": 0, "bbox": [343, 266, 86, 66], "area": 4706}, {"id": 12170161, "category_id": 28, "iscrowd": 0, "bbox": [341, 323, 88, 140], "area": 4578}, {"id": 10261368, "category_id": 44, "iscrowd": 0, "bbox": [124, 385, 65, 169], "area": 5704}, {"id": 2762542, "category_id": 77, "iscrowd": 0, "bbox": [195, 331, 57, 46], "area": 1612}, {"id": 7632706, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 203, 245], "area": 30125}, {"id": 11316899, "category_id": 186, "iscrowd": 0, "bbox": [201, 0, 228, 138], "area": 15918}, {"id": 10397088, "category_id": 191, "iscrowd": 0, "bbox": [328, 424, 101, 216], "area": 9608}, {"id": 11259302, "category_id": 193, "iscrowd": 0, "bbox": [340, 224, 89, 49], "area": 2191}, {"id": 10066552, "category_id": 197, "iscrowd": 0, "bbox": [271, 128, 158, 118], "area": 14291}], "file_name": "000000228214.png", "image_id": 228214}, {"segments_info": [{"id": 6447197, "category_id": 2, "iscrowd": 0, "bbox": [51, 182, 7, 14], "area": 63}, {"id": 6843241, "category_id": 2, "iscrowd": 0, "bbox": [112, 171, 444, 311], "area": 75455}, {"id": 5591886, "category_id": 3, "iscrowd": 0, "bbox": [81, 143, 41, 19], "area": 271}, {"id": 7302765, "category_id": 3, "iscrowd": 0, "bbox": [385, 145, 22, 8], "area": 141}, {"id": 5394507, "category_id": 3, "iscrowd": 0, "bbox": [462, 146, 23, 14], "area": 231}, {"id": 5394764, "category_id": 3, "iscrowd": 0, "bbox": [0, 162, 37, 54], "area": 1244}, {"id": 5987931, "category_id": 3, "iscrowd": 0, "bbox": [120, 142, 14, 12], "area": 103}, {"id": 7632241, "category_id": 3, "iscrowd": 0, "bbox": [30, 152, 64, 31], "area": 882}, {"id": 8421241, "category_id": 3, "iscrowd": 0, "bbox": [369, 143, 22, 11], "area": 152}, {"id": 5129850, "category_id": 3, "iscrowd": 0, "bbox": [503, 148, 47, 15], "area": 344}, {"id": 9408392, "category_id": 3, "iscrowd": 0, "bbox": [8, 154, 61, 35], "area": 684}, {"id": 7763567, "category_id": 3, "iscrowd": 0, "bbox": [110, 142, 16, 12], "area": 70}, {"id": 5394251, "category_id": 3, "iscrowd": 0, "bbox": [0, 207, 11, 19], "area": 122}, {"id": 6053723, "category_id": 3, "iscrowd": 0, "bbox": [133, 137, 10, 11], "area": 86}, {"id": 6447456, "category_id": 3, "iscrowd": 0, "bbox": [428, 145, 17, 8], "area": 107}, {"id": 5658455, "category_id": 3, "iscrowd": 1, "bbox": [271, 125, 285, 46], "area": 2328}, {"id": 8548188, "category_id": 9, "iscrowd": 0, "bbox": [351, 165, 34, 16], "area": 373}, {"id": 4937311, "category_id": 9, "iscrowd": 0, "bbox": [100, 165, 153, 130], "area": 13477}, {"id": 4474694, "category_id": 9, "iscrowd": 0, "bbox": [370, 152, 152, 45], "area": 4405}, {"id": 7566196, "category_id": 9, "iscrowd": 0, "bbox": [237, 135, 22, 15], "area": 221}, {"id": 4736843, "category_id": 9, "iscrowd": 0, "bbox": [288, 138, 68, 29], "area": 1428}, {"id": 7039077, "category_id": 9, "iscrowd": 0, "bbox": [190, 158, 22, 15], "area": 245}, {"id": 9473154, "category_id": 9, "iscrowd": 0, "bbox": [223, 143, 10, 2], "area": 20}, {"id": 5396561, "category_id": 9, "iscrowd": 0, "bbox": [165, 156, 28, 15], "area": 330}, {"id": 3883844, "category_id": 9, "iscrowd": 0, "bbox": [0, 273, 107, 155], "area": 8500}, {"id": 4606021, "category_id": 9, "iscrowd": 0, "bbox": [515, 150, 125, 58], "area": 5414}, {"id": 8027515, "category_id": 9, "iscrowd": 0, "bbox": [161, 135, 26, 9], "area": 110}, {"id": 8553088, "category_id": 9, "iscrowd": 0, "bbox": [144, 142, 48, 21], "area": 566}, {"id": 6381159, "category_id": 9, "iscrowd": 0, "bbox": [254, 136, 35, 18], "area": 421}, {"id": 8289144, "category_id": 95, "iscrowd": 0, "bbox": [160, 122, 21, 18], "area": 236}, {"id": 4081220, "category_id": 144, "iscrowd": 0, "bbox": [0, 139, 393, 196], "area": 6788}, {"id": 6185826, "category_id": 148, "iscrowd": 0, "bbox": [70, 134, 570, 320], "area": 49736}, {"id": 6711399, "category_id": 184, "iscrowd": 0, "bbox": [12, 0, 628, 184], "area": 44051}, {"id": 1842452, "category_id": 185, "iscrowd": 0, "bbox": [342, 207, 19, 26], "area": 380}, {"id": 16184818, "category_id": 187, "iscrowd": 0, "bbox": [33, 0, 384, 122], "area": 13193}, {"id": 6383204, "category_id": 191, "iscrowd": 0, "bbox": [0, 414, 640, 71], "area": 20552}, {"id": 7040365, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 180], "area": 36001}], "file_name": "000000228436.png", "image_id": 228436}, {"segments_info": [{"id": 1647693, "category_id": 171, "iscrowd": 0, "bbox": [94, 0, 546, 427], "area": 99024}, {"id": 2171171, "category_id": 181, "iscrowd": 0, "bbox": [368, 101, 272, 326], "area": 83134}], "file_name": "000000228771.png", "image_id": 228771}, {"segments_info": [{"id": 1848915, "category_id": 1, "iscrowd": 0, "bbox": [572, 126, 16, 24], "area": 278}, {"id": 725797, "category_id": 1, "iscrowd": 0, "bbox": [587, 127, 10, 22], "area": 162}, {"id": 1253679, "category_id": 1, "iscrowd": 0, "bbox": [612, 125, 10, 13], "area": 60}, {"id": 990527, "category_id": 1, "iscrowd": 0, "bbox": [522, 126, 12, 49], "area": 303}, {"id": 1254460, "category_id": 1, "iscrowd": 0, "bbox": [567, 123, 14, 28], "area": 131}, {"id": 1649985, "category_id": 1, "iscrowd": 0, "bbox": [524, 129, 19, 47], "area": 465}, {"id": 795966, "category_id": 1, "iscrowd": 0, "bbox": [78, 114, 22, 24], "area": 346}, {"id": 859184, "category_id": 1, "iscrowd": 0, "bbox": [165, 152, 46, 37], "area": 1002}, {"id": 1789038, "category_id": 1, "iscrowd": 0, "bbox": [81, 110, 26, 29], "area": 232}, {"id": 1253426, "category_id": 1, "iscrowd": 0, "bbox": [543, 121, 17, 36], "area": 460}, {"id": 1650757, "category_id": 1, "iscrowd": 0, "bbox": [602, 130, 10, 14], "area": 86}, {"id": 2573404, "category_id": 3, "iscrowd": 0, "bbox": [1, 133, 380, 165], "area": 41406}, {"id": 1782607, "category_id": 3, "iscrowd": 0, "bbox": [539, 125, 101, 110], "area": 8193}, {"id": 8634325, "category_id": 7, "iscrowd": 0, "bbox": [69, 22, 506, 162], "area": 53304}, {"id": 1527140, "category_id": 10, "iscrowd": 0, "bbox": [613, 103, 10, 17], "area": 144}, {"id": 1057837, "category_id": 10, "iscrowd": 0, "bbox": [630, 34, 10, 46], "area": 441}, {"id": 2798042, "category_id": 10, "iscrowd": 0, "bbox": [631, 97, 7, 11], "area": 70}, {"id": 3629271, "category_id": 10, "iscrowd": 0, "bbox": [2, 18, 12, 17], "area": 160}, {"id": 4022891, "category_id": 130, "iscrowd": 0, "bbox": [337, 41, 195, 41], "area": 347}, {"id": 1654359, "category_id": 149, "iscrowd": 0, "bbox": [0, 156, 640, 163], "area": 51026}, {"id": 924708, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 146], "area": 25260}, {"id": 1652805, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 337, 100], "area": 15505}], "file_name": "000000228942.png", "image_id": 228942}, {"segments_info": [{"id": 5127995, "category_id": 77, "iscrowd": 0, "bbox": [403, 151, 84, 189], "area": 14493}, {"id": 6708569, "category_id": 77, "iscrowd": 0, "bbox": [94, 125, 153, 248], "area": 34806}, {"id": 10983308, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 257570}], "file_name": "000000228981.png", "image_id": 228981}, {"segments_info": [{"id": 2963284, "category_id": 1, "iscrowd": 0, "bbox": [69, 19, 303, 474], "area": 91395}, {"id": 6976890, "category_id": 75, "iscrowd": 0, "bbox": [105, 146, 67, 207], "area": 11063}, {"id": 8488581, "category_id": 75, "iscrowd": 0, "bbox": [31, 140, 88, 258], "area": 16522}, {"id": 4932401, "category_id": 109, "iscrowd": 0, "bbox": [335, 165, 40, 65], "area": 1093}, {"id": 2108734, "category_id": 171, "iscrowd": 0, "bbox": [166, 176, 55, 106], "area": 3045}, {"id": 4542284, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 375, 123], "area": 25496}, {"id": 12369586, "category_id": 181, "iscrowd": 0, "bbox": [315, 192, 31, 73], "area": 1210}, {"id": 4674648, "category_id": 199, "iscrowd": 0, "bbox": [0, 81, 375, 189], "area": 17768}, {"id": 3885648, "category_id": 200, "iscrowd": 0, "bbox": [0, 390, 110, 110], "area": 8957}], "file_name": "000000229111.png", "image_id": 229111}, {"segments_info": [{"id": 5792950, "category_id": 1, "iscrowd": 0, "bbox": [144, 11, 442, 411], "area": 91572}, {"id": 6188698, "category_id": 1, "iscrowd": 0, "bbox": [50, 6, 307, 414], "area": 65737}, {"id": 7502748, "category_id": 77, "iscrowd": 0, "bbox": [127, 366, 42, 30], "area": 218}, {"id": 4347505, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 607, 426], "area": 42149}, {"id": 1854264, "category_id": 184, "iscrowd": 0, "bbox": [286, 0, 354, 426], "area": 56350}], "file_name": "000000229216.png", "image_id": 229216}, {"segments_info": [{"id": 4342338, "category_id": 21, "iscrowd": 0, "bbox": [146, 92, 337, 329], "area": 69801}, {"id": 4737096, "category_id": 21, "iscrowd": 0, "bbox": [448, 242, 75, 34], "area": 1418}, {"id": 3815994, "category_id": 184, "iscrowd": 0, "bbox": [0, 47, 640, 143], "area": 42460}, {"id": 16514043, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 120], "area": 57580}, {"id": 6645093, "category_id": 193, "iscrowd": 0, "bbox": [0, 165, 640, 262], "area": 101645}], "file_name": "000000229221.png", "image_id": 229221}, {"segments_info": [{"id": 10199984, "category_id": 44, "iscrowd": 0, "bbox": [365, 199, 20, 64], "area": 775}, {"id": 1189447, "category_id": 51, "iscrowd": 0, "bbox": [53, 169, 36, 17], "area": 372}, {"id": 5725536, "category_id": 81, "iscrowd": 0, "bbox": [131, 222, 270, 109], "area": 13808}, {"id": 7902362, "category_id": 86, "iscrowd": 0, "bbox": [234, 163, 22, 21], "area": 392}, {"id": 3502231, "category_id": 86, "iscrowd": 0, "bbox": [218, 150, 13, 30], "area": 260}, {"id": 4740448, "category_id": 176, "iscrowd": 0, "bbox": [88, 0, 412, 286], "area": 21560}, {"id": 1590140, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 90, 186], "area": 9966}, {"id": 6513760, "category_id": 181, "iscrowd": 0, "bbox": [204, 0, 296, 225], "area": 56975}, {"id": 6124170, "category_id": 188, "iscrowd": 0, "bbox": [37, 0, 167, 116], "area": 17163}], "file_name": "000000229311.png", "image_id": 229311}, {"segments_info": [{"id": 9939128, "category_id": 1, "iscrowd": 0, "bbox": [272, 95, 106, 148], "area": 8020}, {"id": 5596265, "category_id": 1, "iscrowd": 0, "bbox": [464, 0, 176, 423], "area": 53476}, {"id": 2436904, "category_id": 32, "iscrowd": 0, "bbox": [299, 171, 12, 71], "area": 536}, {"id": 2830380, "category_id": 32, "iscrowd": 0, "bbox": [469, 1, 27, 152], "area": 597}, {"id": 8293263, "category_id": 44, "iscrowd": 0, "bbox": [199, 76, 17, 43], "area": 531}, {"id": 2439729, "category_id": 47, "iscrowd": 0, "bbox": [452, 323, 30, 38], "area": 916}, {"id": 994095, "category_id": 51, "iscrowd": 0, "bbox": [411, 301, 47, 15], "area": 467}, {"id": 4213318, "category_id": 77, "iscrowd": 0, "bbox": [336, 151, 18, 21], "area": 183}, {"id": 7898502, "category_id": 81, "iscrowd": 0, "bbox": [306, 360, 249, 61], "area": 7298}, {"id": 6323834, "category_id": 90, "iscrowd": 0, "bbox": [370, 280, 22, 81], "area": 387}, {"id": 10202799, "category_id": 133, "iscrowd": 0, "bbox": [252, 12, 202, 230], "area": 27020}, {"id": 7964547, "category_id": 156, "iscrowd": 0, "bbox": [64, 0, 305, 274], "area": 42845}, {"id": 6449791, "category_id": 168, "iscrowd": 0, "bbox": [0, 0, 129, 240], "area": 19468}, {"id": 3236450, "category_id": 176, "iscrowd": 0, "bbox": [0, 16, 556, 407], "area": 94207}, {"id": 16514300, "category_id": 199, "iscrowd": 0, "bbox": [71, 0, 398, 33], "area": 4873}], "file_name": "000000229358.png", "image_id": 229358}, {"segments_info": [{"id": 5921387, "category_id": 1, "iscrowd": 0, "bbox": [59, 56, 445, 316], "area": 51932}, {"id": 5792606, "category_id": 41, "iscrowd": 0, "bbox": [162, 362, 383, 65], "area": 7581}, {"id": 10196115, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 488], "area": 251721}], "file_name": "000000229553.png", "image_id": 229553}, {"segments_info": [{"id": 3427980, "category_id": 1, "iscrowd": 0, "bbox": [88, 75, 174, 277], "area": 12673}, {"id": 3551820, "category_id": 1, "iscrowd": 0, "bbox": [470, 67, 119, 291], "area": 18894}, {"id": 1973547, "category_id": 1, "iscrowd": 0, "bbox": [158, 124, 7, 16], "area": 51}, {"id": 5200504, "category_id": 1, "iscrowd": 0, "bbox": [64, 126, 6, 14], "area": 47}, {"id": 3226191, "category_id": 1, "iscrowd": 0, "bbox": [230, 107, 30, 75], "area": 1178}, {"id": 6053250, "category_id": 1, "iscrowd": 0, "bbox": [196, 95, 25, 101], "area": 1434}, {"id": 5989241, "category_id": 1, "iscrowd": 0, "bbox": [106, 120, 18, 53], "area": 504}, {"id": 1844285, "category_id": 1, "iscrowd": 0, "bbox": [71, 124, 9, 22], "area": 140}, {"id": 2438483, "category_id": 1, "iscrowd": 0, "bbox": [88, 126, 6, 14], "area": 56}, {"id": 2767710, "category_id": 40, "iscrowd": 0, "bbox": [110, 130, 5, 8], "area": 32}, {"id": 1319738, "category_id": 40, "iscrowd": 0, "bbox": [472, 207, 24, 47], "area": 728}, {"id": 3751243, "category_id": 130, "iscrowd": 0, "bbox": [15, 19, 192, 119], "area": 5029}, {"id": 1737631, "category_id": 145, "iscrowd": 0, "bbox": [0, 133, 640, 161], "area": 60957}, {"id": 856854, "category_id": 184, "iscrowd": 0, "bbox": [219, 0, 421, 154], "area": 54237}, {"id": 1119002, "category_id": 185, "iscrowd": 0, "bbox": [14, 99, 164, 39], "area": 3116}, {"id": 592139, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 256, 115], "area": 16739}, {"id": 880081, "category_id": 194, "iscrowd": 0, "bbox": [0, 166, 640, 261], "area": 92549}, {"id": 789519, "category_id": 197, "iscrowd": 0, "bbox": [0, 49, 184, 89], "area": 3702}], "file_name": "000000229601.png", "image_id": 229601}, {"segments_info": [{"id": 5595254, "category_id": 1, "iscrowd": 0, "bbox": [479, 28, 82, 120], "area": 5329}, {"id": 3826844, "category_id": 1, "iscrowd": 0, "bbox": [230, 157, 45, 50], "area": 1715}, {"id": 8820153, "category_id": 1, "iscrowd": 0, "bbox": [129, 129, 83, 84], "area": 3660}, {"id": 3703225, "category_id": 44, "iscrowd": 0, "bbox": [15, 122, 7, 19], "area": 87}, {"id": 5474230, "category_id": 44, "iscrowd": 0, "bbox": [44, 124, 8, 21], "area": 105}, {"id": 5409720, "category_id": 44, "iscrowd": 0, "bbox": [5, 114, 10, 27], "area": 188}, {"id": 4890592, "category_id": 44, "iscrowd": 0, "bbox": [98, 125, 8, 23], "area": 115}, {"id": 3300223, "category_id": 44, "iscrowd": 0, "bbox": [72, 123, 5, 24], "area": 80}, {"id": 3763353, "category_id": 44, "iscrowd": 0, "bbox": [38, 123, 7, 21], "area": 103}, {"id": 4102878, "category_id": 44, "iscrowd": 0, "bbox": [94, 123, 6, 24], "area": 85}, {"id": 4884658, "category_id": 44, "iscrowd": 0, "bbox": [82, 124, 9, 24], "area": 159}, {"id": 4817587, "category_id": 44, "iscrowd": 0, "bbox": [57, 123, 9, 22], "area": 164}, {"id": 4090529, "category_id": 44, "iscrowd": 0, "bbox": [28, 125, 5, 19], "area": 71}, {"id": 6199237, "category_id": 44, "iscrowd": 0, "bbox": [35, 123, 4, 21], "area": 70}, {"id": 5011874, "category_id": 44, "iscrowd": 0, "bbox": [67, 122, 6, 24], "area": 102}, {"id": 5935806, "category_id": 44, "iscrowd": 0, "bbox": [52, 125, 5, 23], "area": 90}, {"id": 4359861, "category_id": 44, "iscrowd": 1, "bbox": [19, 120, 82, 30], "area": 346}, {"id": 1582927, "category_id": 62, "iscrowd": 0, "bbox": [339, 200, 30, 71], "area": 653}, {"id": 2701659, "category_id": 62, "iscrowd": 0, "bbox": [119, 214, 195, 213], "area": 25626}, {"id": 1850452, "category_id": 62, "iscrowd": 0, "bbox": [16, 295, 73, 119], "area": 4069}, {"id": 2112103, "category_id": 62, "iscrowd": 0, "bbox": [213, 206, 69, 12], "area": 613}, {"id": 1585518, "category_id": 62, "iscrowd": 0, "bbox": [304, 196, 37, 24], "area": 737}, {"id": 1847392, "category_id": 62, "iscrowd": 0, "bbox": [273, 196, 30, 21], "area": 305}, {"id": 1848660, "category_id": 62, "iscrowd": 0, "bbox": [58, 210, 109, 221], "area": 12108}, {"id": 4616888, "category_id": 67, "iscrowd": 0, "bbox": [18, 335, 325, 139], "area": 21072}, {"id": 5663893, "category_id": 67, "iscrowd": 0, "bbox": [312, 218, 59, 24], "area": 1013}, {"id": 3823224, "category_id": 67, "iscrowd": 0, "bbox": [118, 244, 42, 44], "area": 1233}, {"id": 10326655, "category_id": 72, "iscrowd": 0, "bbox": [339, 142, 300, 329], "area": 86530}, {"id": 8439265, "category_id": 85, "iscrowd": 0, "bbox": [71, 27, 22, 27], "area": 458}, {"id": 10920122, "category_id": 109, "iscrowd": 0, "bbox": [360, 123, 54, 46], "area": 1562}, {"id": 11191516, "category_id": 130, "iscrowd": 0, "bbox": [109, 0, 410, 158], "area": 2682}, {"id": 4225707, "category_id": 156, "iscrowd": 0, "bbox": [0, 108, 145, 102], "area": 6521}, {"id": 2571384, "category_id": 186, "iscrowd": 0, "bbox": [108, 0, 395, 127], "area": 23212}, {"id": 1853073, "category_id": 189, "iscrowd": 0, "bbox": [36, 461, 322, 19], "area": 1890}, {"id": 3963302, "category_id": 190, "iscrowd": 0, "bbox": [0, 304, 349, 176], "area": 11580}, {"id": 7583201, "category_id": 196, "iscrowd": 0, "bbox": [126, 144, 25, 23], "area": 363}, {"id": 6924753, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 161], "area": 41501}], "file_name": "000000229659.png", "image_id": 229659}, {"segments_info": [{"id": 3292230, "category_id": 5, "iscrowd": 0, "bbox": [172, 192, 249, 153], "area": 10714}, {"id": 8486525, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 541], "area": 335304}], "file_name": "000000229747.png", "image_id": 229747}, {"segments_info": [{"id": 5270144, "category_id": 25, "iscrowd": 0, "bbox": [200, 200, 169, 218], "area": 18052}, {"id": 4809078, "category_id": 25, "iscrowd": 0, "bbox": [394, 150, 144, 270], "area": 16203}, {"id": 2703951, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 77604}, {"id": 15788773, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 158977}, {"id": 7964295, "category_id": 197, "iscrowd": 0, "bbox": [368, 273, 245, 108], "area": 1997}], "file_name": "000000229753.png", "image_id": 229753}, {"segments_info": [{"id": 4939116, "category_id": 1, "iscrowd": 0, "bbox": [164, 378, 71, 43], "area": 1928}, {"id": 10591657, "category_id": 1, "iscrowd": 0, "bbox": [13, 355, 65, 64], "area": 2606}, {"id": 12039093, "category_id": 1, "iscrowd": 0, "bbox": [93, 312, 58, 67], "area": 1823}, {"id": 10788775, "category_id": 1, "iscrowd": 0, "bbox": [387, 281, 38, 75], "area": 1408}, {"id": 8688819, "category_id": 1, "iscrowd": 0, "bbox": [381, 239, 42, 49], "area": 1125}, {"id": 6252945, "category_id": 1, "iscrowd": 0, "bbox": [360, 289, 47, 81], "area": 2087}, {"id": 10790074, "category_id": 1, "iscrowd": 0, "bbox": [44, 321, 53, 62], "area": 1789}, {"id": 5526118, "category_id": 1, "iscrowd": 0, "bbox": [94, 354, 57, 67], "area": 2557}, {"id": 8291997, "category_id": 1, "iscrowd": 0, "bbox": [307, 100, 34, 51], "area": 1234}, {"id": 10785676, "category_id": 1, "iscrowd": 0, "bbox": [333, 234, 57, 73], "area": 1993}, {"id": 9079206, "category_id": 1, "iscrowd": 0, "bbox": [212, 246, 35, 48], "area": 1030}, {"id": 8088415, "category_id": 1, "iscrowd": 0, "bbox": [151, 152, 257, 377], "area": 23184}, {"id": 9147047, "category_id": 1, "iscrowd": 0, "bbox": [139, 246, 71, 45], "area": 1227}, {"id": 7960192, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 426, 431], "area": 67142}, {"id": 10196373, "category_id": 43, "iscrowd": 0, "bbox": [60, 124, 92, 52], "area": 2708}, {"id": 9860961, "category_id": 62, "iscrowd": 0, "bbox": [47, 305, 40, 17], "area": 548}, {"id": 7294522, "category_id": 62, "iscrowd": 0, "bbox": [28, 321, 32, 19], "area": 345}, {"id": 8479565, "category_id": 62, "iscrowd": 0, "bbox": [116, 260, 32, 15], "area": 326}, {"id": 6177584, "category_id": 62, "iscrowd": 0, "bbox": [140, 338, 26, 42], "area": 481}, {"id": 7820865, "category_id": 62, "iscrowd": 0, "bbox": [54, 245, 33, 19], "area": 460}, {"id": 9202773, "category_id": 62, "iscrowd": 0, "bbox": [135, 247, 34, 14], "area": 427}, {"id": 6968386, "category_id": 62, "iscrowd": 0, "bbox": [143, 320, 49, 44], "area": 934}, {"id": 8217682, "category_id": 62, "iscrowd": 0, "bbox": [395, 360, 32, 23], "area": 668}, {"id": 7165251, "category_id": 62, "iscrowd": 0, "bbox": [170, 305, 42, 57], "area": 1227}, {"id": 8612183, "category_id": 62, "iscrowd": 0, "bbox": [274, 171, 35, 19], "area": 390}, {"id": 8083520, "category_id": 62, "iscrowd": 0, "bbox": [63, 216, 25, 16], "area": 257}, {"id": 9268052, "category_id": 62, "iscrowd": 0, "bbox": [87, 305, 40, 19], "area": 612}, {"id": 8807760, "category_id": 62, "iscrowd": 0, "bbox": [109, 288, 40, 17], "area": 446}, {"id": 7626577, "category_id": 62, "iscrowd": 1, "bbox": [0, 16, 427, 365], "area": 24147}, {"id": 8872518, "category_id": 92, "iscrowd": 0, "bbox": [0, 406, 427, 82], "area": 23517}, {"id": 9410168, "category_id": 145, "iscrowd": 0, "bbox": [0, 477, 427, 163], "area": 64737}, {"id": 9540497, "category_id": 161, "iscrowd": 0, "bbox": [0, 0, 410, 383], "area": 9172}, {"id": 7034702, "category_id": 197, "iscrowd": 0, "bbox": [34, 293, 82, 47], "area": 546}, {"id": 7042434, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 422], "area": 22674}], "file_name": "000000229849.png", "image_id": 229849}, {"segments_info": [{"id": 7628414, "category_id": 21, "iscrowd": 0, "bbox": [300, 254, 59, 256], "area": 9210}, {"id": 7561831, "category_id": 21, "iscrowd": 0, "bbox": [216, 120, 114, 322], "area": 16903}, {"id": 5012817, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 478], "area": 193507}], "file_name": "000000229858.png", "image_id": 229858}, {"segments_info": [{"id": 7303023, "category_id": 1, "iscrowd": 0, "bbox": [621, 160, 19, 63], "area": 971}, {"id": 7500402, "category_id": 1, "iscrowd": 0, "bbox": [52, 182, 28, 26], "area": 447}, {"id": 7697781, "category_id": 1, "iscrowd": 0, "bbox": [147, 164, 11, 36], "area": 257}, {"id": 9934743, "category_id": 1, "iscrowd": 0, "bbox": [83, 175, 38, 32], "area": 633}, {"id": 13092807, "category_id": 1, "iscrowd": 0, "bbox": [0, 185, 16, 45], "area": 391}, {"id": 3026478, "category_id": 1, "iscrowd": 0, "bbox": [89, 181, 7, 15], "area": 75}, {"id": 5592405, "category_id": 1, "iscrowd": 0, "bbox": [24, 182, 32, 44], "area": 487}, {"id": 5987163, "category_id": 1, "iscrowd": 0, "bbox": [201, 111, 87, 135], "area": 4887}, {"id": 6645093, "category_id": 1, "iscrowd": 0, "bbox": [290, 174, 26, 52], "area": 650}, {"id": 4276545, "category_id": 1, "iscrowd": 0, "bbox": [116, 175, 38, 32], "area": 549}, {"id": 5460819, "category_id": 1, "iscrowd": 0, "bbox": [606, 186, 18, 29], "area": 399}, {"id": 7895160, "category_id": 1, "iscrowd": 0, "bbox": [605, 169, 16, 19], "area": 192}, {"id": 2500134, "category_id": 1, "iscrowd": 0, "bbox": [7, 187, 22, 42], "area": 493}, {"id": 4671303, "category_id": 8, "iscrowd": 0, "bbox": [368, 2, 272, 155], "area": 29822}, {"id": 5000268, "category_id": 19, "iscrowd": 0, "bbox": [303, 86, 228, 247], "area": 26255}, {"id": 3092271, "category_id": 19, "iscrowd": 0, "bbox": [387, 122, 228, 208], "area": 13992}, {"id": 3026483, "category_id": 32, "iscrowd": 0, "bbox": [223, 142, 11, 16], "area": 59}, {"id": 7039851, "category_id": 32, "iscrowd": 0, "bbox": [127, 199, 3, 7], "area": 15}, {"id": 5000271, "category_id": 92, "iscrowd": 0, "bbox": [0, 146, 509, 150], "area": 4283}, {"id": 9934751, "category_id": 151, "iscrowd": 0, "bbox": [0, 14, 230, 72], "area": 11306}, {"id": 7303029, "category_id": 185, "iscrowd": 0, "bbox": [533, 196, 107, 99], "area": 8065}, {"id": 15724527, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 287, 39], "area": 5821}, {"id": 7171437, "category_id": 193, "iscrowd": 0, "bbox": [0, 273, 640, 155], "area": 75085}], "file_name": "000000229948.png", "image_id": 229948}, {"segments_info": [{"id": 2631711, "category_id": 16, "iscrowd": 0, "bbox": [416, 309, 143, 81], "area": 5786}, {"id": 1907217, "category_id": 16, "iscrowd": 0, "bbox": [0, 260, 96, 94], "area": 4854}, {"id": 4272936, "category_id": 16, "iscrowd": 0, "bbox": [274, 291, 109, 113], "area": 5181}, {"id": 3354921, "category_id": 16, "iscrowd": 0, "bbox": [133, 61, 62, 104], "area": 3389}, {"id": 1513488, "category_id": 16, "iscrowd": 0, "bbox": [221, 40, 97, 90], "area": 3405}, {"id": 3354157, "category_id": 23, "iscrowd": 0, "bbox": [196, 116, 235, 190], "area": 27260}, {"id": 1671000, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 161007}, {"id": 5661267, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 324, 306], "area": 6031}], "file_name": "000000229997.png", "image_id": 229997}, {"segments_info": [{"id": 5324098, "category_id": 1, "iscrowd": 0, "bbox": [156, 61, 77, 289], "area": 12679}, {"id": 7491122, "category_id": 1, "iscrowd": 0, "bbox": [447, 100, 49, 51], "area": 832}, {"id": 5916734, "category_id": 3, "iscrowd": 0, "bbox": [434, 74, 206, 237], "area": 32957}, {"id": 5919057, "category_id": 4, "iscrowd": 0, "bbox": [14, 86, 430, 268], "area": 51356}, {"id": 10134185, "category_id": 149, "iscrowd": 0, "bbox": [0, 282, 640, 78], "area": 19027}, {"id": 2642525, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 316], "area": 88592}, {"id": 5529716, "category_id": 185, "iscrowd": 0, "bbox": [433, 0, 207, 169], "area": 14212}, {"id": 7106419, "category_id": 191, "iscrowd": 0, "bbox": [0, 304, 29, 29], "area": 591}], "file_name": "000000230008.png", "image_id": 230008}, {"segments_info": [{"id": 3424332, "category_id": 20, "iscrowd": 0, "bbox": [543, 202, 58, 43], "area": 1098}, {"id": 8031388, "category_id": 20, "iscrowd": 0, "bbox": [582, 168, 58, 87], "area": 989}, {"id": 5464941, "category_id": 20, "iscrowd": 0, "bbox": [298, 166, 195, 133], "area": 16609}, {"id": 7966879, "category_id": 20, "iscrowd": 0, "bbox": [246, 202, 52, 47], "area": 1562}, {"id": 10070202, "category_id": 20, "iscrowd": 0, "bbox": [346, 176, 35, 14], "area": 279}, {"id": 5135722, "category_id": 20, "iscrowd": 0, "bbox": [1, 179, 36, 57], "area": 1437}, {"id": 5926524, "category_id": 20, "iscrowd": 0, "bbox": [188, 184, 62, 75], "area": 3008}, {"id": 5333360, "category_id": 20, "iscrowd": 0, "bbox": [15, 175, 51, 74], "area": 954}, {"id": 6650250, "category_id": 20, "iscrowd": 0, "bbox": [18, 159, 114, 110], "area": 4516}, {"id": 5861751, "category_id": 20, "iscrowd": 0, "bbox": [54, 175, 139, 109], "area": 9096}, {"id": 5993860, "category_id": 20, "iscrowd": 0, "bbox": [592, 210, 48, 80], "area": 2159}, {"id": 7571353, "category_id": 20, "iscrowd": 0, "bbox": [590, 186, 50, 84], "area": 1330}, {"id": 11188165, "category_id": 20, "iscrowd": 0, "bbox": [280, 174, 50, 38], "area": 849}, {"id": 7768984, "category_id": 20, "iscrowd": 1, "bbox": [137, 163, 428, 73], "area": 4095}, {"id": 3489590, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 222], "area": 107706}, {"id": 15722980, "category_id": 187, "iscrowd": 0, "bbox": [278, 0, 362, 71], "area": 7793}, {"id": 4095864, "category_id": 193, "iscrowd": 0, "bbox": [0, 215, 640, 213], "area": 109629}], "file_name": "000000230166.png", "image_id": 230166}, {"segments_info": [{"id": 9344145, "category_id": 9, "iscrowd": 0, "bbox": [121, 322, 41, 21], "area": 547}, {"id": 5856606, "category_id": 9, "iscrowd": 0, "bbox": [427, 313, 27, 21], "area": 455}, {"id": 8620424, "category_id": 9, "iscrowd": 0, "bbox": [275, 173, 77, 167], "area": 1878}, {"id": 6055785, "category_id": 9, "iscrowd": 0, "bbox": [78, 165, 59, 173], "area": 1401}, {"id": 6252135, "category_id": 9, "iscrowd": 0, "bbox": [202, 323, 26, 22], "area": 429}, {"id": 6909807, "category_id": 9, "iscrowd": 0, "bbox": [487, 334, 133, 31], "area": 2208}, {"id": 7963524, "category_id": 9, "iscrowd": 0, "bbox": [255, 297, 41, 29], "area": 588}, {"id": 7107445, "category_id": 9, "iscrowd": 0, "bbox": [335, 183, 128, 167], "area": 3861}, {"id": 6188664, "category_id": 9, "iscrowd": 0, "bbox": [453, 315, 73, 20], "area": 938}, {"id": 6711655, "category_id": 9, "iscrowd": 0, "bbox": [212, 311, 77, 33], "area": 1433}, {"id": 3883851, "category_id": 9, "iscrowd": 0, "bbox": [608, 312, 32, 59], "area": 1375}, {"id": 4608344, "category_id": 9, "iscrowd": 0, "bbox": [461, 322, 57, 30], "area": 696}, {"id": 5987675, "category_id": 9, "iscrowd": 0, "bbox": [147, 212, 60, 129], "area": 1219}, {"id": 4014658, "category_id": 155, "iscrowd": 0, "bbox": [0, 320, 640, 158], "area": 84669}, {"id": 3225916, "category_id": 184, "iscrowd": 0, "bbox": [0, 257, 640, 72], "area": 21965}, {"id": 11118503, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 290], "area": 174179}], "file_name": "000000230362.png", "image_id": 230362}, {"segments_info": [{"id": 5792097, "category_id": 3, "iscrowd": 0, "bbox": [301, 248, 73, 15], "area": 656}, {"id": 4212313, "category_id": 4, "iscrowd": 0, "bbox": [362, 250, 40, 15], "area": 235}, {"id": 1054514, "category_id": 10, "iscrowd": 0, "bbox": [395, 227, 10, 18], "area": 138}, {"id": 1385034, "category_id": 10, "iscrowd": 0, "bbox": [304, 172, 9, 20], "area": 155}, {"id": 725056, "category_id": 10, "iscrowd": 0, "bbox": [397, 250, 7, 6], "area": 39}, {"id": 1713705, "category_id": 14, "iscrowd": 0, "bbox": [182, 228, 78, 176], "area": 10736}, {"id": 1715251, "category_id": 14, "iscrowd": 0, "bbox": [112, 238, 23, 53], "area": 919}, {"id": 1252641, "category_id": 14, "iscrowd": 0, "bbox": [134, 238, 50, 96], "area": 3257}, {"id": 1581346, "category_id": 14, "iscrowd": 0, "bbox": [419, 203, 221, 268], "area": 50289}, {"id": 2375756, "category_id": 14, "iscrowd": 0, "bbox": [103, 239, 16, 45], "area": 403}, {"id": 5530987, "category_id": 128, "iscrowd": 0, "bbox": [482, 55, 158, 178], "area": 18717}, {"id": 6781059, "category_id": 149, "iscrowd": 0, "bbox": [160, 253, 305, 227], "area": 43759}, {"id": 1251610, "category_id": 184, "iscrowd": 0, "bbox": [518, 6, 122, 99], "area": 5963}, {"id": 4542809, "category_id": 185, "iscrowd": 0, "bbox": [0, 215, 640, 111], "area": 2628}, {"id": 12174796, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 131], "area": 28601}, {"id": 5005678, "category_id": 191, "iscrowd": 0, "bbox": [0, 253, 235, 227], "area": 27913}, {"id": 3490124, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 626, 398], "area": 102247}], "file_name": "000000230450.png", "image_id": 230450}, {"segments_info": [{"id": 5921105, "category_id": 1, "iscrowd": 0, "bbox": [202, 153, 81, 121], "area": 3460}, {"id": 8226686, "category_id": 42, "iscrowd": 0, "bbox": [222, 266, 72, 18], "area": 759}, {"id": 7237482, "category_id": 128, "iscrowd": 0, "bbox": [0, 17, 545, 39], "area": 1754}, {"id": 9536091, "category_id": 155, "iscrowd": 0, "bbox": [0, 118, 640, 314], "area": 194116}, {"id": 13353666, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 52], "area": 23210}, {"id": 6579032, "category_id": 197, "iscrowd": 0, "bbox": [0, 13, 640, 113], "area": 53024}], "file_name": "000000230819.png", "image_id": 230819}, {"segments_info": [{"id": 4276563, "category_id": 1, "iscrowd": 0, "bbox": [149, 147, 141, 174], "area": 9898}, {"id": 5460818, "category_id": 3, "iscrowd": 0, "bbox": [383, 214, 6, 22], "area": 89}, {"id": 8486521, "category_id": 3, "iscrowd": 0, "bbox": [387, 213, 16, 38], "area": 202}, {"id": 6710640, "category_id": 3, "iscrowd": 0, "bbox": [407, 211, 23, 63], "area": 894}, {"id": 6119264, "category_id": 3, "iscrowd": 0, "bbox": [420, 240, 10, 49], "area": 357}, {"id": 6973542, "category_id": 3, "iscrowd": 0, "bbox": [395, 210, 32, 54], "area": 585}, {"id": 6712429, "category_id": 41, "iscrowd": 0, "bbox": [163, 312, 57, 80], "area": 2106}, {"id": 3160897, "category_id": 149, "iscrowd": 0, "bbox": [413, 272, 17, 27], "area": 149}, {"id": 9606041, "category_id": 184, "iscrowd": 0, "bbox": [331, 82, 99, 135], "area": 3200}, {"id": 15392472, "category_id": 187, "iscrowd": 0, "bbox": [303, 0, 127, 206], "area": 21037}, {"id": 12565950, "category_id": 191, "iscrowd": 0, "bbox": [0, 218, 430, 422], "area": 148571}, {"id": 7896707, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 412, 345], "area": 84602}], "file_name": "000000230983.png", "image_id": 230983}, {"segments_info": [{"id": 265532, "category_id": 1, "iscrowd": 0, "bbox": [99, 225, 184, 177], "area": 18512}, {"id": 4881328, "category_id": 1, "iscrowd": 0, "bbox": [370, 186, 134, 212], "area": 17200}, {"id": 3363297, "category_id": 28, "iscrowd": 0, "bbox": [53, 41, 343, 217], "area": 54593}, {"id": 7376579, "category_id": 28, "iscrowd": 0, "bbox": [370, 66, 249, 131], "area": 22372}, {"id": 397142, "category_id": 31, "iscrowd": 0, "bbox": [312, 218, 102, 187], "area": 7491}, {"id": 264063, "category_id": 31, "iscrowd": 0, "bbox": [222, 249, 59, 101], "area": 3352}, {"id": 1056314, "category_id": 149, "iscrowd": 0, "bbox": [3, 0, 637, 408], "area": 100612}, {"id": 5009297, "category_id": 191, "iscrowd": 0, "bbox": [0, 180, 308, 228], "area": 25241}], "file_name": "000000230993.png", "image_id": 230993}, {"segments_info": [{"id": 10854302, "category_id": 28, "iscrowd": 0, "bbox": [29, 387, 189, 159], "area": 18362}, {"id": 11646857, "category_id": 28, "iscrowd": 0, "bbox": [1, 176, 224, 216], "area": 34528}, {"id": 8152668, "category_id": 28, "iscrowd": 0, "bbox": [102, 1, 273, 268], "area": 54752}, {"id": 10900258, "category_id": 28, "iscrowd": 0, "bbox": [171, 346, 192, 139], "area": 17861}, {"id": 5723827, "category_id": 28, "iscrowd": 0, "bbox": [236, 457, 189, 171], "area": 18950}, {"id": 4671398, "category_id": 28, "iscrowd": 0, "bbox": [69, 514, 196, 112], "area": 14667}, {"id": 5327947, "category_id": 128, "iscrowd": 0, "bbox": [0, 318, 425, 322], "area": 39481}, {"id": 10056021, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 425, 430], "area": 69638}], "file_name": "000000231088.png", "image_id": 231088}, {"segments_info": [{"id": 3290934, "category_id": 47, "iscrowd": 0, "bbox": [6, 0, 114, 58], "area": 5309}, {"id": 1053460, "category_id": 48, "iscrowd": 0, "bbox": [504, 1, 116, 69], "area": 2117}, {"id": 1119253, "category_id": 48, "iscrowd": 0, "bbox": [350, 73, 206, 125], "area": 3945}, {"id": 2566954, "category_id": 51, "iscrowd": 0, "bbox": [1, 90, 45, 124], "area": 2488}, {"id": 1459002, "category_id": 56, "iscrowd": 0, "bbox": [254, 157, 99, 160], "area": 7616}, {"id": 596243, "category_id": 56, "iscrowd": 0, "bbox": [225, 185, 57, 57], "area": 959}, {"id": 791313, "category_id": 56, "iscrowd": 0, "bbox": [331, 213, 168, 94], "area": 12557}, {"id": 993826, "category_id": 56, "iscrowd": 0, "bbox": [116, 197, 148, 126], "area": 10924}, {"id": 857392, "category_id": 57, "iscrowd": 0, "bbox": [173, 172, 50, 47], "area": 1438}, {"id": 2634034, "category_id": 67, "iscrowd": 0, "bbox": [1, 2, 639, 478], "area": 255264}], "file_name": "000000231097.png", "image_id": 231097}, {"segments_info": [{"id": 6003884, "category_id": 1, "iscrowd": 0, "bbox": [35, 126, 69, 111], "area": 4989}, {"id": 2452655, "category_id": 1, "iscrowd": 0, "bbox": [81, 127, 160, 199], "area": 22529}, {"id": 1339296, "category_id": 60, "iscrowd": 0, "bbox": [4, 345, 21, 38], "area": 575}, {"id": 1669805, "category_id": 60, "iscrowd": 0, "bbox": [20, 348, 22, 37], "area": 501}, {"id": 3308967, "category_id": 60, "iscrowd": 0, "bbox": [58, 417, 34, 30], "area": 807}, {"id": 2583958, "category_id": 60, "iscrowd": 0, "bbox": [35, 409, 33, 34], "area": 733}, {"id": 2721970, "category_id": 60, "iscrowd": 0, "bbox": [3, 383, 27, 23], "area": 405}, {"id": 2982317, "category_id": 60, "iscrowd": 0, "bbox": [121, 427, 36, 33], "area": 793}, {"id": 1803188, "category_id": 60, "iscrowd": 0, "bbox": [37, 352, 25, 29], "area": 437}, {"id": 2452630, "category_id": 60, "iscrowd": 0, "bbox": [5, 406, 35, 29], "area": 782}, {"id": 3179952, "category_id": 60, "iscrowd": 0, "bbox": [87, 420, 39, 34], "area": 875}, {"id": 1341098, "category_id": 60, "iscrowd": 0, "bbox": [83, 363, 31, 32], "area": 766}, {"id": 2200258, "category_id": 60, "iscrowd": 0, "bbox": [69, 358, 19, 35], "area": 403}, {"id": 1739195, "category_id": 60, "iscrowd": 0, "bbox": [52, 357, 20, 32], "area": 478}, {"id": 2391726, "category_id": 60, "iscrowd": 0, "bbox": [22, 380, 37, 32], "area": 734}, {"id": 1190200, "category_id": 107, "iscrowd": 0, "bbox": [41, 282, 297, 218], "area": 7609}, {"id": 4027009, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 48, 368], "area": 11706}, {"id": 6926275, "category_id": 195, "iscrowd": 0, "bbox": [75, 209, 47, 108], "area": 3114}, {"id": 3314357, "category_id": 196, "iscrowd": 0, "bbox": [0, 126, 375, 342], "area": 16593}, {"id": 7323072, "category_id": 199, "iscrowd": 0, "bbox": [98, 122, 247, 80], "area": 3731}], "file_name": "000000231125.png", "image_id": 231125}, {"segments_info": [{"id": 7566195, "category_id": 7, "iscrowd": 0, "bbox": [147, 106, 280, 334], "area": 44276}, {"id": 11053224, "category_id": 128, "iscrowd": 0, "bbox": [117, 80, 101, 43], "area": 2532}, {"id": 7105644, "category_id": 147, "iscrowd": 0, "bbox": [97, 151, 397, 303], "area": 34368}, {"id": 8224125, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 454], "area": 127834}, {"id": 16382457, "category_id": 187, "iscrowd": 0, "bbox": [100, 0, 360, 70], "area": 19260}, {"id": 8355711, "category_id": 193, "iscrowd": 0, "bbox": [409, 250, 231, 204], "area": 32731}, {"id": 4473924, "category_id": 197, "iscrowd": 0, "bbox": [395, 139, 245, 158], "area": 28759}], "file_name": "000000231169.png", "image_id": 231169}, {"segments_info": [{"id": 1534090, "category_id": 64, "iscrowd": 0, "bbox": [65, 18, 245, 244], "area": 27855}, {"id": 5865625, "category_id": 86, "iscrowd": 0, "bbox": [87, 251, 169, 207], "area": 22574}, {"id": 11786984, "category_id": 190, "iscrowd": 0, "bbox": [0, 361, 334, 139], "area": 33123}, {"id": 1456734, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 334, 377], "area": 73518}], "file_name": "000000231237.png", "image_id": 231237}, {"segments_info": [{"id": 7894157, "category_id": 1, "iscrowd": 0, "bbox": [195, 199, 236, 303], "area": 36179}, {"id": 3883351, "category_id": 51, "iscrowd": 0, "bbox": [230, 123, 109, 67], "area": 4110}, {"id": 7568005, "category_id": 82, "iscrowd": 0, "bbox": [97, 1, 383, 456], "area": 117297}, {"id": 2841240, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 137, 437], "area": 48721}, {"id": 4415357, "category_id": 190, "iscrowd": 0, "bbox": [0, 367, 480, 273], "area": 98195}], "file_name": "000000231339.png", "image_id": 231339}, {"segments_info": [{"id": 7177366, "category_id": 1, "iscrowd": 0, "bbox": [69, 234, 41, 36], "area": 835}, {"id": 5661565, "category_id": 1, "iscrowd": 0, "bbox": [63, 216, 155, 178], "area": 7142}, {"id": 4675695, "category_id": 1, "iscrowd": 0, "bbox": [193, 148, 40, 54], "area": 1219}, {"id": 8098983, "category_id": 1, "iscrowd": 0, "bbox": [249, 211, 47, 65], "area": 1279}, {"id": 7833499, "category_id": 1, "iscrowd": 0, "bbox": [175, 101, 25, 57], "area": 449}, {"id": 8161947, "category_id": 1, "iscrowd": 0, "bbox": [30, 222, 14, 48], "area": 447}, {"id": 8755893, "category_id": 1, "iscrowd": 0, "bbox": [231, 187, 24, 40], "area": 343}, {"id": 5201258, "category_id": 1, "iscrowd": 0, "bbox": [156, 106, 22, 54], "area": 638}, {"id": 7897715, "category_id": 1, "iscrowd": 0, "bbox": [154, 222, 31, 26], "area": 361}, {"id": 8028832, "category_id": 1, "iscrowd": 0, "bbox": [221, 219, 41, 56], "area": 825}, {"id": 7440051, "category_id": 1, "iscrowd": 0, "bbox": [56, 247, 17, 20], "area": 196}, {"id": 4608166, "category_id": 1, "iscrowd": 0, "bbox": [234, 201, 29, 29], "area": 342}, {"id": 6253688, "category_id": 1, "iscrowd": 0, "bbox": [199, 105, 17, 41], "area": 428}, {"id": 5597045, "category_id": 1, "iscrowd": 1, "bbox": [1, 83, 334, 213], "area": 13358}, {"id": 7700867, "category_id": 3, "iscrowd": 0, "bbox": [128, 103, 93, 42], "area": 1552}, {"id": 5462356, "category_id": 3, "iscrowd": 0, "bbox": [225, 112, 71, 40], "area": 2355}, {"id": 6322819, "category_id": 15, "iscrowd": 0, "bbox": [103, 172, 20, 22], "area": 145}, {"id": 7176328, "category_id": 15, "iscrowd": 0, "bbox": [71, 181, 34, 25], "area": 186}, {"id": 2773627, "category_id": 37, "iscrowd": 0, "bbox": [31, 65, 9, 8], "area": 54}, {"id": 1582894, "category_id": 40, "iscrowd": 0, "bbox": [156, 306, 32, 18], "area": 341}, {"id": 1845033, "category_id": 62, "iscrowd": 0, "bbox": [216, 158, 40, 39], "area": 846}, {"id": 4546143, "category_id": 62, "iscrowd": 0, "bbox": [265, 239, 31, 36], "area": 338}, {"id": 3029824, "category_id": 62, "iscrowd": 0, "bbox": [160, 159, 37, 37], "area": 509}, {"id": 7242887, "category_id": 62, "iscrowd": 0, "bbox": [113, 230, 31, 33], "area": 583}, {"id": 5333930, "category_id": 62, "iscrowd": 0, "bbox": [214, 180, 9, 17], "area": 72}, {"id": 2371895, "category_id": 62, "iscrowd": 0, "bbox": [262, 233, 5, 8], "area": 17}, {"id": 2579544, "category_id": 145, "iscrowd": 0, "bbox": [0, 291, 335, 209], "area": 50435}, {"id": 4744309, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 297, 52], "area": 2711}, {"id": 3627389, "category_id": 175, "iscrowd": 0, "bbox": [0, 37, 31, 16], "area": 358}, {"id": 1324595, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 296, 127], "area": 26530}, {"id": 4217949, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 335, 288], "area": 20850}, {"id": 3629160, "category_id": 193, "iscrowd": 0, "bbox": [104, 152, 231, 48], "area": 4352}, {"id": 4551315, "category_id": 194, "iscrowd": 0, "bbox": [0, 254, 335, 162], "area": 20008}, {"id": 5658969, "category_id": 197, "iscrowd": 0, "bbox": [263, 0, 65, 42], "area": 902}], "file_name": "000000231508.png", "image_id": 231508}, {"segments_info": [{"id": 3052482, "category_id": 47, "iscrowd": 0, "bbox": [161, 290, 123, 172], "area": 18685}, {"id": 1672368, "category_id": 47, "iscrowd": 0, "bbox": [70, 159, 136, 179], "area": 19468}, {"id": 6588331, "category_id": 49, "iscrowd": 0, "bbox": [72, 461, 263, 179], "area": 8825}, {"id": 96723, "category_id": 55, "iscrowd": 0, "bbox": [256, 117, 111, 114], "area": 8306}, {"id": 1809634, "category_id": 55, "iscrowd": 0, "bbox": [2, 360, 155, 161], "area": 19716}, {"id": 2137048, "category_id": 55, "iscrowd": 0, "bbox": [301, 467, 126, 165], "area": 16042}, {"id": 92627, "category_id": 55, "iscrowd": 0, "bbox": [328, 146, 98, 126], "area": 10471}, {"id": 5001819, "category_id": 67, "iscrowd": 0, "bbox": [5, 8, 419, 620], "area": 144589}, {"id": 1121578, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 10874}], "file_name": "000000231527.png", "image_id": 231527}, {"segments_info": [{"id": 15197928, "category_id": 47, "iscrowd": 0, "bbox": [89, 411, 18, 28], "area": 428}, {"id": 10330538, "category_id": 65, "iscrowd": 0, "bbox": [120, 350, 388, 130], "area": 40370}, {"id": 3748652, "category_id": 85, "iscrowd": 0, "bbox": [561, 407, 62, 17], "area": 896}, {"id": 13159125, "category_id": 93, "iscrowd": 0, "bbox": [306, 463, 212, 17], "area": 551}, {"id": 15987699, "category_id": 130, "iscrowd": 0, "bbox": [68, 247, 511, 81], "area": 6124}, {"id": 8950178, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 59], "area": 31138}, {"id": 13684691, "category_id": 189, "iscrowd": 0, "bbox": [0, 392, 640, 60], "area": 3764}, {"id": 14868709, "category_id": 195, "iscrowd": 0, "bbox": [113, 461, 15, 19], "area": 80}, {"id": 6451328, "category_id": 199, "iscrowd": 0, "bbox": [0, 11, 640, 469], "area": 219141}], "file_name": "000000231549.png", "image_id": 231549}, {"segments_info": [{"id": 7828345, "category_id": 1, "iscrowd": 0, "bbox": [310, 280, 132, 167], "area": 11777}, {"id": 9081753, "category_id": 1, "iscrowd": 0, "bbox": [18, 314, 184, 166], "area": 20696}, {"id": 6511195, "category_id": 1, "iscrowd": 0, "bbox": [15, 110, 58, 157], "area": 5399}, {"id": 5521255, "category_id": 1, "iscrowd": 0, "bbox": [0, 125, 31, 159], "area": 3510}, {"id": 6515319, "category_id": 1, "iscrowd": 0, "bbox": [141, 368, 235, 107], "area": 17197}, {"id": 11438956, "category_id": 1, "iscrowd": 0, "bbox": [143, 31, 171, 361], "area": 26068}, {"id": 8092796, "category_id": 1, "iscrowd": 0, "bbox": [570, 323, 70, 148], "area": 8624}, {"id": 4341318, "category_id": 21, "iscrowd": 0, "bbox": [291, 111, 241, 157], "area": 19617}, {"id": 5198671, "category_id": 62, "iscrowd": 0, "bbox": [285, 215, 88, 95], "area": 3106}, {"id": 11050905, "category_id": 67, "iscrowd": 0, "bbox": [95, 194, 301, 57], "area": 4091}, {"id": 4876380, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 197], "area": 77306}, {"id": 6387808, "category_id": 193, "iscrowd": 0, "bbox": [0, 180, 597, 300], "area": 48973}, {"id": 5728355, "category_id": 194, "iscrowd": 0, "bbox": [62, 176, 578, 173], "area": 23821}], "file_name": "000000231580.png", "image_id": 231580}, {"segments_info": [{"id": 985095, "category_id": 1, "iscrowd": 0, "bbox": [153, 151, 13, 41], "area": 414}, {"id": 3223361, "category_id": 1, "iscrowd": 0, "bbox": [313, 3, 61, 135], "area": 4585}, {"id": 4871771, "category_id": 37, "iscrowd": 0, "bbox": [195, 186, 10, 11], "area": 86}, {"id": 1778473, "category_id": 39, "iscrowd": 0, "bbox": [564, 277, 32, 110], "area": 854}, {"id": 2838374, "category_id": 39, "iscrowd": 0, "bbox": [59, 322, 105, 61], "area": 715}, {"id": 3097941, "category_id": 39, "iscrowd": 0, "bbox": [444, 101, 16, 20], "area": 98}, {"id": 2304564, "category_id": 39, "iscrowd": 0, "bbox": [566, 48, 70, 75], "area": 772}, {"id": 1320502, "category_id": 39, "iscrowd": 0, "bbox": [287, 248, 8, 91], "area": 360}, {"id": 1648434, "category_id": 39, "iscrowd": 0, "bbox": [102, 242, 69, 86], "area": 1169}, {"id": 2709363, "category_id": 39, "iscrowd": 0, "bbox": [115, 270, 49, 77], "area": 487}, {"id": 4545391, "category_id": 39, "iscrowd": 0, "bbox": [327, 368, 83, 30], "area": 402}, {"id": 2236708, "category_id": 40, "iscrowd": 0, "bbox": [589, 112, 34, 35], "area": 895}, {"id": 2504518, "category_id": 40, "iscrowd": 0, "bbox": [206, 313, 25, 28], "area": 581}, {"id": 4410189, "category_id": 40, "iscrowd": 0, "bbox": [323, 236, 53, 47], "area": 1696}, {"id": 1645343, "category_id": 40, "iscrowd": 0, "bbox": [140, 343, 28, 36], "area": 871}, {"id": 2568761, "category_id": 92, "iscrowd": 0, "bbox": [28, 236, 118, 55], "area": 3070}, {"id": 5331032, "category_id": 156, "iscrowd": 0, "bbox": [194, 46, 96, 21], "area": 1239}, {"id": 4409165, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 626, 400], "area": 50315}, {"id": 4144442, "category_id": 181, "iscrowd": 0, "bbox": [299, 0, 201, 161], "area": 10797}, {"id": 2828328, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 640, 400], "area": 71268}, {"id": 5985875, "category_id": 195, "iscrowd": 0, "bbox": [81, 126, 518, 274], "area": 13485}, {"id": 3354927, "category_id": 199, "iscrowd": 0, "bbox": [444, 139, 196, 261], "area": 9878}], "file_name": "000000231747.png", "image_id": 231747}, {"segments_info": [{"id": 7969373, "category_id": 44, "iscrowd": 0, "bbox": [461, 0, 39, 101], "area": 3053}, {"id": 4223142, "category_id": 47, "iscrowd": 0, "bbox": [88, 24, 75, 130], "area": 7784}, {"id": 1860000, "category_id": 47, "iscrowd": 0, "bbox": [193, 2, 67, 133], "area": 7399}, {"id": 6382190, "category_id": 48, "iscrowd": 0, "bbox": [299, 195, 47, 138], "area": 2778}, {"id": 10067640, "category_id": 49, "iscrowd": 0, "bbox": [334, 202, 17, 102], "area": 1182}, {"id": 6977688, "category_id": 50, "iscrowd": 0, "bbox": [296, 169, 108, 73], "area": 1371}, {"id": 4624847, "category_id": 51, "iscrowd": 0, "bbox": [322, 139, 112, 76], "area": 6529}, {"id": 5735875, "category_id": 54, "iscrowd": 0, "bbox": [58, 180, 120, 99], "area": 7992}, {"id": 5276093, "category_id": 54, "iscrowd": 0, "bbox": [155, 140, 120, 101], "area": 7350}, {"id": 4427674, "category_id": 56, "iscrowd": 0, "bbox": [183, 233, 41, 34], "area": 839}, {"id": 2454649, "category_id": 56, "iscrowd": 0, "bbox": [232, 207, 54, 71], "area": 2209}, {"id": 5611423, "category_id": 56, "iscrowd": 0, "bbox": [212, 232, 30, 37], "area": 479}, {"id": 2303809, "category_id": 61, "iscrowd": 0, "bbox": [354, 252, 82, 66], "area": 4904}, {"id": 6651289, "category_id": 67, "iscrowd": 0, "bbox": [2, 4, 498, 351], "area": 118676}, {"id": 7437208, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 361], "area": 5465}, {"id": 5204192, "category_id": 195, "iscrowd": 0, "bbox": [309, 0, 169, 5], "area": 727}], "file_name": "000000231822.png", "image_id": 231822}, {"segments_info": [{"id": 658445, "category_id": 17, "iscrowd": 0, "bbox": [37, 161, 443, 479], "area": 105480}, {"id": 6977918, "category_id": 62, "iscrowd": 0, "bbox": [21, 0, 134, 164], "area": 3935}, {"id": 1646112, "category_id": 77, "iscrowd": 0, "bbox": [0, 190, 74, 40], "area": 2334}, {"id": 13883080, "category_id": 84, "iscrowd": 0, "bbox": [149, 399, 88, 41], "area": 2651}, {"id": 8886427, "category_id": 84, "iscrowd": 0, "bbox": [221, 196, 112, 64], "area": 2956}, {"id": 10136760, "category_id": 84, "iscrowd": 0, "bbox": [197, 176, 112, 104], "area": 4690}, {"id": 10331813, "category_id": 84, "iscrowd": 0, "bbox": [18, 142, 127, 49], "area": 4345}, {"id": 9274220, "category_id": 87, "iscrowd": 0, "bbox": [37, 125, 76, 26], "area": 948}, {"id": 12241085, "category_id": 112, "iscrowd": 0, "bbox": [116, 0, 174, 132], "area": 18277}, {"id": 3619705, "category_id": 189, "iscrowd": 0, "bbox": [0, 169, 481, 471], "area": 63270}, {"id": 9674126, "category_id": 190, "iscrowd": 0, "bbox": [140, 118, 152, 60], "area": 5279}, {"id": 5990512, "category_id": 195, "iscrowd": 0, "bbox": [0, 19, 481, 621], "area": 32424}, {"id": 11319492, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 481, 134], "area": 24812}, {"id": 8486509, "category_id": 200, "iscrowd": 0, "bbox": [144, 123, 337, 457], "area": 19640}], "file_name": "000000231831.png", "image_id": 231831}, {"segments_info": [{"id": 10463145, "category_id": 1, "iscrowd": 0, "bbox": [449, 0, 109, 421], "area": 12986}, {"id": 11056056, "category_id": 1, "iscrowd": 0, "bbox": [122, 1, 174, 148], "area": 19708}, {"id": 8288117, "category_id": 1, "iscrowd": 0, "bbox": [292, 2, 195, 424], "area": 57107}, {"id": 11185067, "category_id": 1, "iscrowd": 0, "bbox": [238, 115, 97, 201], "area": 12814}, {"id": 9271665, "category_id": 1, "iscrowd": 0, "bbox": [63, 132, 226, 289], "area": 44426}, {"id": 13685196, "category_id": 61, "iscrowd": 0, "bbox": [419, 113, 120, 90], "area": 5507}, {"id": 7504257, "category_id": 62, "iscrowd": 0, "bbox": [25, 358, 38, 68], "area": 1735}, {"id": 5930642, "category_id": 62, "iscrowd": 0, "bbox": [454, 271, 184, 149], "area": 13355}, {"id": 7370611, "category_id": 67, "iscrowd": 0, "bbox": [528, 184, 112, 172], "area": 9110}, {"id": 4948139, "category_id": 151, "iscrowd": 0, "bbox": [31, 0, 154, 33], "area": 3295}, {"id": 2237216, "category_id": 177, "iscrowd": 0, "bbox": [529, 92, 111, 102], "area": 6817}, {"id": 3826298, "category_id": 185, "iscrowd": 0, "bbox": [0, 14, 303, 265], "area": 30428}, {"id": 14280426, "category_id": 187, "iscrowd": 0, "bbox": [185, 0, 365, 49], "area": 3919}, {"id": 6647397, "category_id": 191, "iscrowd": 0, "bbox": [303, 318, 337, 108], "area": 5721}, {"id": 4423254, "category_id": 193, "iscrowd": 0, "bbox": [0, 201, 640, 225], "area": 11892}], "file_name": "000000231879.png", "image_id": 231879}, {"segments_info": [{"id": 7637390, "category_id": 62, "iscrowd": 0, "bbox": [316, 277, 180, 92], "area": 8781}, {"id": 5793642, "category_id": 63, "iscrowd": 0, "bbox": [122, 266, 446, 208], "area": 55786}, {"id": 1579802, "category_id": 72, "iscrowd": 0, "bbox": [54, 140, 161, 121], "area": 17485}, {"id": 5395272, "category_id": 73, "iscrowd": 0, "bbox": [579, 397, 61, 42], "area": 683}, {"id": 2104342, "category_id": 74, "iscrowd": 0, "bbox": [615, 462, 10, 7], "area": 47}, {"id": 3290932, "category_id": 75, "iscrowd": 0, "bbox": [447, 270, 28, 11], "area": 174}, {"id": 1315599, "category_id": 76, "iscrowd": 0, "bbox": [528, 415, 98, 51], "area": 1919}, {"id": 1251132, "category_id": 109, "iscrowd": 0, "bbox": [440, 113, 155, 143], "area": 14879}, {"id": 4476237, "category_id": 181, "iscrowd": 0, "bbox": [428, 132, 109, 164], "area": 6923}, {"id": 7047054, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 224, 24], "area": 3731}, {"id": 1052427, "category_id": 189, "iscrowd": 0, "bbox": [514, 424, 126, 56], "area": 4332}, {"id": 7506573, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 138316}, {"id": 5138807, "category_id": 200, "iscrowd": 0, "bbox": [0, 284, 215, 196], "area": 24156}], "file_name": "000000232088.png", "image_id": 232088}, {"segments_info": [{"id": 5857690, "category_id": 22, "iscrowd": 0, "bbox": [3, 33, 481, 342], "area": 93904}, {"id": 6789787, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 128], "area": 31087}, {"id": 6452631, "category_id": 194, "iscrowd": 0, "bbox": [0, 124, 125, 251], "area": 3581}], "file_name": "000000232244.png", "image_id": 232244}, {"segments_info": [{"id": 7369074, "category_id": 80, "iscrowd": 0, "bbox": [126, 143, 285, 330], "area": 80031}, {"id": 10197399, "category_id": 176, "iscrowd": 0, "bbox": [70, 73, 525, 221], "area": 52249}, {"id": 7633789, "category_id": 189, "iscrowd": 0, "bbox": [29, 267, 611, 235], "area": 77959}, {"id": 8623718, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 502], "area": 77933}], "file_name": "000000232348.png", "image_id": 232348}, {"segments_info": [{"id": 5076130, "category_id": 59, "iscrowd": 0, "bbox": [0, 37, 627, 582], "area": 197867}, {"id": 5664392, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 640], "area": 84760}, {"id": 12044481, "category_id": 195, "iscrowd": 0, "bbox": [573, 300, 67, 202], "area": 8343}, {"id": 7243419, "category_id": 196, "iscrowd": 0, "bbox": [199, 54, 208, 561], "area": 4811}], "file_name": "000000232489.png", "image_id": 232489}, {"segments_info": [{"id": 6444880, "category_id": 3, "iscrowd": 0, "bbox": [23, 285, 39, 21], "area": 491}, {"id": 5457986, "category_id": 3, "iscrowd": 0, "bbox": [0, 282, 33, 24], "area": 554}, {"id": 4670279, "category_id": 7, "iscrowd": 0, "bbox": [85, 196, 415, 165], "area": 45315}, {"id": 4010666, "category_id": 15, "iscrowd": 0, "bbox": [532, 307, 80, 35], "area": 1429}, {"id": 6845047, "category_id": 130, "iscrowd": 0, "bbox": [557, 0, 26, 17], "area": 341}, {"id": 3361093, "category_id": 147, "iscrowd": 0, "bbox": [0, 341, 127, 41], "area": 3025}, {"id": 4477278, "category_id": 171, "iscrowd": 0, "bbox": [357, 208, 283, 135], "area": 9520}, {"id": 4410696, "category_id": 184, "iscrowd": 0, "bbox": [0, 206, 92, 130], "area": 6002}, {"id": 15456195, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 255], "area": 119539}, {"id": 9014926, "category_id": 191, "iscrowd": 0, "bbox": [0, 312, 640, 168], "area": 84884}, {"id": 9540243, "category_id": 197, "iscrowd": 0, "bbox": [322, 7, 318, 335], "area": 23576}], "file_name": "000000232538.png", "image_id": 232538}, {"segments_info": [{"id": 1646627, "category_id": 1, "iscrowd": 0, "bbox": [0, 280, 136, 350], "area": 23788}, {"id": 790548, "category_id": 1, "iscrowd": 0, "bbox": [97, 94, 270, 527], "area": 102335}, {"id": 10446522, "category_id": 28, "iscrowd": 0, "bbox": [1, 219, 126, 73], "area": 5237}, {"id": 6645864, "category_id": 28, "iscrowd": 0, "bbox": [2, 0, 434, 229], "area": 65200}, {"id": 3422008, "category_id": 31, "iscrowd": 0, "bbox": [345, 393, 39, 156], "area": 4355}, {"id": 2306363, "category_id": 149, "iscrowd": 0, "bbox": [70, 322, 54, 127], "area": 3480}, {"id": 1584695, "category_id": 191, "iscrowd": 0, "bbox": [0, 461, 480, 179], "area": 20588}, {"id": 2635572, "category_id": 197, "iscrowd": 0, "bbox": [0, 55, 369, 248], "area": 16595}, {"id": 1185045, "category_id": 199, "iscrowd": 0, "bbox": [356, 0, 124, 542], "area": 48241}], "file_name": "000000232563.png", "image_id": 232563}, {"segments_info": [{"id": 1908038, "category_id": 13, "iscrowd": 0, "bbox": [498, 95, 97, 99], "area": 7845}, {"id": 4803921, "category_id": 149, "iscrowd": 0, "bbox": [0, 332, 640, 66], "area": 24908}, {"id": 13552846, "category_id": 159, "iscrowd": 0, "bbox": [0, 313, 640, 199], "area": 94387}, {"id": 6250079, "category_id": 178, "iscrowd": 0, "bbox": [0, 239, 627, 96], "area": 34724}, {"id": 3750717, "category_id": 184, "iscrowd": 0, "bbox": [49, 227, 591, 106], "area": 11791}, {"id": 11381418, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 253], "area": 144284}, {"id": 4933188, "category_id": 192, "iscrowd": 0, "bbox": [0, 241, 158, 17], "area": 1356}, {"id": 3882304, "category_id": 197, "iscrowd": 0, "bbox": [210, 224, 430, 33], "area": 4178}], "file_name": "000000232646.png", "image_id": 232646}, {"segments_info": [{"id": 3421261, "category_id": 1, "iscrowd": 0, "bbox": [5, 0, 87, 108], "area": 6708}, {"id": 7498065, "category_id": 70, "iscrowd": 0, "bbox": [123, 320, 252, 180], "area": 25421}, {"id": 12694195, "category_id": 81, "iscrowd": 0, "bbox": [1, 228, 204, 128], "area": 20197}, {"id": 8030096, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 169, 143], "area": 14420}, {"id": 9344136, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 375, 443], "area": 84290}, {"id": 1777181, "category_id": 190, "iscrowd": 0, "bbox": [0, 409, 375, 91], "area": 15552}, {"id": 14537170, "category_id": 195, "iscrowd": 0, "bbox": [98, 195, 100, 43], "area": 2751}], "file_name": "000000232649.png", "image_id": 232649}, {"segments_info": [{"id": 197639, "category_id": 1, "iscrowd": 0, "bbox": [248, 10, 391, 411], "area": 95473}, {"id": 10198179, "category_id": 73, "iscrowd": 0, "bbox": [42, 167, 270, 231], "area": 35347}, {"id": 2, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 174, 240], "area": 33702}, {"id": 9, "category_id": 189, "iscrowd": 0, "bbox": [0, 271, 340, 156], "area": 29280}, {"id": 258, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 78691}], "file_name": "000000232684.png", "image_id": 232684}, {"segments_info": [{"id": 9085392, "category_id": 1, "iscrowd": 0, "bbox": [585, 92, 35, 52], "area": 1240}, {"id": 5463417, "category_id": 1, "iscrowd": 0, "bbox": [493, 145, 23, 25], "area": 346}, {"id": 2104866, "category_id": 1, "iscrowd": 0, "bbox": [461, 37, 65, 52], "area": 1220}, {"id": 8230589, "category_id": 1, "iscrowd": 0, "bbox": [620, 93, 20, 55], "area": 519}, {"id": 3418148, "category_id": 1, "iscrowd": 0, "bbox": [412, 49, 46, 44], "area": 782}, {"id": 5661051, "category_id": 1, "iscrowd": 0, "bbox": [257, 45, 142, 170], "area": 7500}, {"id": 2103583, "category_id": 1, "iscrowd": 0, "bbox": [452, 44, 26, 36], "area": 417}, {"id": 10129822, "category_id": 42, "iscrowd": 0, "bbox": [256, 194, 140, 31], "area": 865}, {"id": 4804251, "category_id": 42, "iscrowd": 0, "bbox": [524, 141, 114, 9], "area": 587}, {"id": 5920854, "category_id": 148, "iscrowd": 0, "bbox": [0, 83, 640, 342], "area": 195893}, {"id": 1514780, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 128], "area": 58139}], "file_name": "000000232692.png", "image_id": 232692}, {"segments_info": [{"id": 13684123, "category_id": 28, "iscrowd": 0, "bbox": [135, 98, 338, 237], "area": 19348}, {"id": 6124411, "category_id": 62, "iscrowd": 0, "bbox": [128, 311, 97, 160], "area": 5442}, {"id": 6190969, "category_id": 62, "iscrowd": 0, "bbox": [183, 295, 46, 87], "area": 1929}, {"id": 6518654, "category_id": 62, "iscrowd": 0, "bbox": [344, 306, 118, 162], "area": 6008}, {"id": 6781572, "category_id": 62, "iscrowd": 0, "bbox": [220, 353, 118, 127], "area": 12735}, {"id": 2579020, "category_id": 64, "iscrowd": 0, "bbox": [1, 294, 76, 114], "area": 5490}, {"id": 4800320, "category_id": 64, "iscrowd": 0, "bbox": [512, 345, 34, 61], "area": 941}, {"id": 6253159, "category_id": 67, "iscrowd": 0, "bbox": [228, 333, 158, 39], "area": 2926}, {"id": 4611194, "category_id": 118, "iscrowd": 0, "bbox": [92, 396, 518, 84], "area": 19257}, {"id": 11185569, "category_id": 128, "iscrowd": 0, "bbox": [451, 53, 189, 427], "area": 50879}, {"id": 4019289, "category_id": 130, "iscrowd": 0, "bbox": [288, 182, 76, 88], "area": 1330}, {"id": 2177065, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 131796}, {"id": 2578248, "category_id": 193, "iscrowd": 0, "bbox": [97, 273, 322, 102], "area": 5612}, {"id": 1847604, "category_id": 197, "iscrowd": 0, "bbox": [0, 199, 97, 191], "area": 8594}], "file_name": "000000233033.png", "image_id": 233033}, {"segments_info": [{"id": 2176864, "category_id": 85, "iscrowd": 0, "bbox": [52, 172, 176, 176], "area": 28447}, {"id": 3955575, "category_id": 85, "iscrowd": 0, "bbox": [535, 204, 104, 135], "area": 12902}, {"id": 3955841, "category_id": 156, "iscrowd": 0, "bbox": [0, 357, 640, 52], "area": 18392}], "file_name": "000000233139.png", "image_id": 233139}, {"segments_info": [{"id": 5194581, "category_id": 1, "iscrowd": 0, "bbox": [6, 124, 137, 330], "area": 13884}, {"id": 3551821, "category_id": 1, "iscrowd": 0, "bbox": [71, 124, 119, 195], "area": 8731}, {"id": 5849935, "category_id": 1, "iscrowd": 0, "bbox": [335, 129, 145, 370], "area": 28533}, {"id": 5065063, "category_id": 1, "iscrowd": 0, "bbox": [1, 142, 62, 383], "area": 9396}, {"id": 3945539, "category_id": 1, "iscrowd": 0, "bbox": [132, 169, 107, 145], "area": 7059}, {"id": 2563896, "category_id": 1, "iscrowd": 0, "bbox": [309, 171, 104, 132], "area": 5274}, {"id": 2565695, "category_id": 1, "iscrowd": 0, "bbox": [40, 177, 157, 180], "area": 6354}, {"id": 5324116, "category_id": 1, "iscrowd": 0, "bbox": [114, 164, 54, 155], "area": 3059}, {"id": 2300711, "category_id": 1, "iscrowd": 0, "bbox": [319, 189, 46, 109], "area": 1340}, {"id": 3094619, "category_id": 44, "iscrowd": 0, "bbox": [123, 434, 47, 196], "area": 5791}, {"id": 7499379, "category_id": 44, "iscrowd": 0, "bbox": [177, 459, 55, 181], "area": 7917}, {"id": 2108471, "category_id": 44, "iscrowd": 0, "bbox": [156, 459, 25, 138], "area": 1643}, {"id": 4867668, "category_id": 44, "iscrowd": 0, "bbox": [233, 491, 71, 144], "area": 6637}, {"id": 4144006, "category_id": 44, "iscrowd": 0, "bbox": [153, 409, 21, 51], "area": 895}, {"id": 7695482, "category_id": 44, "iscrowd": 0, "bbox": [343, 428, 68, 176], "area": 8417}, {"id": 1777711, "category_id": 44, "iscrowd": 0, "bbox": [171, 476, 14, 123], "area": 795}, {"id": 4803427, "category_id": 44, "iscrowd": 0, "bbox": [6, 374, 39, 142], "area": 2326}, {"id": 8813703, "category_id": 50, "iscrowd": 0, "bbox": [112, 416, 108, 46], "area": 887}, {"id": 2372388, "category_id": 50, "iscrowd": 0, "bbox": [301, 533, 43, 17], "area": 212}, {"id": 4009536, "category_id": 50, "iscrowd": 0, "bbox": [413, 546, 67, 36], "area": 977}, {"id": 4536899, "category_id": 50, "iscrowd": 0, "bbox": [194, 305, 61, 16], "area": 321}, {"id": 4276036, "category_id": 51, "iscrowd": 0, "bbox": [181, 430, 181, 105], "area": 12065}, {"id": 7560277, "category_id": 62, "iscrowd": 0, "bbox": [261, 245, 49, 45], "area": 1287}, {"id": 4273746, "category_id": 67, "iscrowd": 0, "bbox": [2, 394, 478, 238], "area": 48489}, {"id": 5128277, "category_id": 67, "iscrowd": 0, "bbox": [109, 322, 289, 111], "area": 21232}, {"id": 5523278, "category_id": 166, "iscrowd": 0, "bbox": [0, 0, 465, 292], "area": 29792}, {"id": 4935508, "category_id": 184, "iscrowd": 0, "bbox": [33, 0, 447, 237], "area": 56074}, {"id": 3088969, "category_id": 189, "iscrowd": 0, "bbox": [0, 463, 480, 177], "area": 5194}, {"id": 10852775, "category_id": 194, "iscrowd": 0, "bbox": [248, 230, 89, 48], "area": 1283}, {"id": 6444639, "category_id": 196, "iscrowd": 0, "bbox": [177, 269, 181, 65], "area": 5313}], "file_name": "000000233238.png", "image_id": 233238}, {"segments_info": [{"id": 8754868, "category_id": 1, "iscrowd": 0, "bbox": [12, 397, 406, 149], "area": 13727}, {"id": 460552, "category_id": 33, "iscrowd": 0, "bbox": [72, 274, 300, 188], "area": 38736}, {"id": 6976636, "category_id": 191, "iscrowd": 0, "bbox": [0, 68, 427, 572], "area": 114294}, {"id": 1521975, "category_id": 193, "iscrowd": 0, "bbox": [0, 119, 391, 237], "area": 10538}, {"id": 7569288, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 324], "area": 95558}], "file_name": "000000233370.png", "image_id": 233370}, {"segments_info": [{"id": 9279664, "category_id": 20, "iscrowd": 0, "bbox": [459, 147, 20, 175], "area": 2038}, {"id": 8820138, "category_id": 20, "iscrowd": 0, "bbox": [70, 171, 303, 297], "area": 30470}, {"id": 14608629, "category_id": 20, "iscrowd": 0, "bbox": [119, 53, 134, 101], "area": 7510}, {"id": 15200506, "category_id": 20, "iscrowd": 0, "bbox": [319, 58, 130, 104], "area": 8527}, {"id": 9872056, "category_id": 20, "iscrowd": 0, "bbox": [93, 90, 274, 157], "area": 13731}, {"id": 2895152, "category_id": 20, "iscrowd": 0, "bbox": [124, 246, 178, 371], "area": 34798}, {"id": 9215414, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 68469}, {"id": 13031660, "category_id": 193, "iscrowd": 0, "bbox": [160, 141, 47, 12], "area": 235}], "file_name": "000000233567.png", "image_id": 233567}, {"segments_info": [{"id": 7893850, "category_id": 1, "iscrowd": 0, "bbox": [206, 186, 28, 48], "area": 292}, {"id": 10713692, "category_id": 1, "iscrowd": 0, "bbox": [25, 209, 10, 18], "area": 128}, {"id": 7888976, "category_id": 1, "iscrowd": 0, "bbox": [582, 201, 33, 79], "area": 1570}, {"id": 7823936, "category_id": 1, "iscrowd": 0, "bbox": [475, 220, 25, 67], "area": 1013}, {"id": 4471094, "category_id": 1, "iscrowd": 0, "bbox": [36, 213, 10, 28], "area": 151}, {"id": 7295561, "category_id": 1, "iscrowd": 0, "bbox": [505, 221, 27, 62], "area": 1007}, {"id": 5327968, "category_id": 1, "iscrowd": 0, "bbox": [533, 197, 9, 21], "area": 131}, {"id": 7631736, "category_id": 1, "iscrowd": 0, "bbox": [518, 200, 9, 12], "area": 78}, {"id": 9077108, "category_id": 1, "iscrowd": 0, "bbox": [360, 179, 36, 37], "area": 605}, {"id": 5788753, "category_id": 2, "iscrowd": 0, "bbox": [495, 227, 11, 34], "area": 180}, {"id": 5129285, "category_id": 2, "iscrowd": 0, "bbox": [611, 224, 29, 33], "area": 603}, {"id": 5393224, "category_id": 2, "iscrowd": 0, "bbox": [454, 223, 26, 35], "area": 306}, {"id": 7103840, "category_id": 2, "iscrowd": 0, "bbox": [492, 213, 16, 15], "area": 140}, {"id": 4604488, "category_id": 2, "iscrowd": 0, "bbox": [554, 216, 25, 49], "area": 396}, {"id": 4407618, "category_id": 2, "iscrowd": 0, "bbox": [571, 221, 21, 41], "area": 372}, {"id": 10459284, "category_id": 2, "iscrowd": 0, "bbox": [481, 213, 13, 10], "area": 59}, {"id": 5592409, "category_id": 2, "iscrowd": 0, "bbox": [530, 222, 27, 41], "area": 512}, {"id": 8684920, "category_id": 6, "iscrowd": 0, "bbox": [81, 83, 378, 246], "area": 74079}, {"id": 9276814, "category_id": 149, "iscrowd": 0, "bbox": [0, 274, 640, 153], "area": 75800}, {"id": 16447733, "category_id": 187, "iscrowd": 0, "bbox": [208, 0, 330, 59], "area": 9026}, {"id": 7959927, "category_id": 191, "iscrowd": 0, "bbox": [0, 236, 640, 88], "area": 12556}, {"id": 8027007, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 260], "area": 93024}], "file_name": "000000233727.png", "image_id": 233727}, {"segments_info": [{"id": 3815994, "category_id": 1, "iscrowd": 0, "bbox": [533, 392, 24, 34], "area": 342}, {"id": 10658466, "category_id": 1, "iscrowd": 0, "bbox": [543, 360, 74, 149], "area": 6318}, {"id": 131586, "category_id": 1, "iscrowd": 0, "bbox": [350, 489, 45, 46], "area": 1166}, {"id": 1644825, "category_id": 1, "iscrowd": 0, "bbox": [541, 408, 97, 232], "area": 14444}, {"id": 7500401, "category_id": 1, "iscrowd": 0, "bbox": [250, 444, 36, 76], "area": 1046}, {"id": 8355711, "category_id": 1, "iscrowd": 0, "bbox": [462, 408, 108, 193], "area": 10239}, {"id": 3487029, "category_id": 1, "iscrowd": 0, "bbox": [484, 394, 31, 75], "area": 1015}, {"id": 1184275, "category_id": 1, "iscrowd": 0, "bbox": [86, 379, 189, 261], "area": 27834}, {"id": 723723, "category_id": 1, "iscrowd": 0, "bbox": [381, 447, 110, 193], "area": 13638}, {"id": 263172, "category_id": 1, "iscrowd": 0, "bbox": [230, 441, 155, 199], "area": 20164}, {"id": 7763574, "category_id": 6, "iscrowd": 0, "bbox": [1, 324, 62, 121], "area": 6608}, {"id": 7829367, "category_id": 6, "iscrowd": 0, "bbox": [58, 322, 446, 133], "area": 21758}, {"id": 2236962, "category_id": 28, "iscrowd": 0, "bbox": [335, 396, 180, 69], "area": 5172}, {"id": 10908015, "category_id": 28, "iscrowd": 0, "bbox": [173, 356, 312, 103], "area": 16642}, {"id": 197379, "category_id": 31, "iscrowd": 0, "bbox": [308, 538, 84, 99], "area": 2066}, {"id": 986895, "category_id": 31, "iscrowd": 0, "bbox": [470, 464, 77, 170], "area": 3147}, {"id": 13684944, "category_id": 85, "iscrowd": 0, "bbox": [527, 102, 13, 30], "area": 303}, {"id": 14079702, "category_id": 130, "iscrowd": 0, "bbox": [196, 0, 107, 71], "area": 5422}, {"id": 12895428, "category_id": 149, "iscrowd": 0, "bbox": [0, 400, 123, 182], "area": 7006}, {"id": 3158064, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 367, 470], "area": 92326}, {"id": 16448250, "category_id": 187, "iscrowd": 0, "bbox": [280, 0, 185, 323], "area": 28950}, {"id": 14408667, "category_id": 191, "iscrowd": 0, "bbox": [0, 484, 110, 156], "area": 11925}, {"id": 12698049, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 429], "area": 97978}], "file_name": "000000233771.png", "image_id": 233771}, {"segments_info": [{"id": 2369577, "category_id": 63, "iscrowd": 0, "bbox": [7, 351, 207, 129], "area": 15210}, {"id": 5328461, "category_id": 67, "iscrowd": 0, "bbox": [166, 311, 155, 123], "area": 6471}, {"id": 2039582, "category_id": 72, "iscrowd": 0, "bbox": [498, 148, 142, 175], "area": 21472}, {"id": 3023906, "category_id": 75, "iscrowd": 0, "bbox": [292, 439, 39, 10], "area": 287}, {"id": 4869203, "category_id": 84, "iscrowd": 0, "bbox": [429, 255, 4, 24], "area": 68}, {"id": 1644087, "category_id": 84, "iscrowd": 0, "bbox": [480, 258, 4, 30], "area": 101}, {"id": 1710364, "category_id": 84, "iscrowd": 0, "bbox": [464, 258, 4, 26], "area": 104}, {"id": 2039070, "category_id": 84, "iscrowd": 0, "bbox": [439, 387, 12, 30], "area": 265}, {"id": 3353904, "category_id": 84, "iscrowd": 0, "bbox": [445, 253, 5, 29], "area": 106}, {"id": 3486776, "category_id": 84, "iscrowd": 0, "bbox": [421, 379, 5, 26], "area": 88}, {"id": 1381915, "category_id": 84, "iscrowd": 0, "bbox": [480, 301, 2, 19], "area": 22}, {"id": 6775903, "category_id": 84, "iscrowd": 0, "bbox": [434, 351, 4, 29], "area": 88}, {"id": 4144700, "category_id": 84, "iscrowd": 0, "bbox": [420, 281, 34, 33], "area": 883}, {"id": 7830651, "category_id": 84, "iscrowd": 0, "bbox": [468, 257, 2, 27], "area": 54}, {"id": 4272427, "category_id": 84, "iscrowd": 0, "bbox": [439, 319, 2, 24], "area": 47}, {"id": 1315116, "category_id": 84, "iscrowd": 0, "bbox": [432, 384, 9, 27], "area": 132}, {"id": 3289910, "category_id": 84, "iscrowd": 0, "bbox": [416, 345, 35, 42], "area": 967}, {"id": 3027257, "category_id": 84, "iscrowd": 1, "bbox": [408, 249, 100, 187], "area": 7595}, {"id": 2171202, "category_id": 86, "iscrowd": 0, "bbox": [458, 222, 24, 29], "area": 395}, {"id": 7894898, "category_id": 86, "iscrowd": 0, "bbox": [232, 291, 24, 38], "area": 697}, {"id": 2963267, "category_id": 118, "iscrowd": 0, "bbox": [177, 360, 309, 120], "area": 17200}, {"id": 8158850, "category_id": 119, "iscrowd": 0, "bbox": [191, 244, 107, 59], "area": 3695}, {"id": 9929592, "category_id": 130, "iscrowd": 0, "bbox": [0, 316, 109, 164], "area": 10119}, {"id": 2303015, "category_id": 156, "iscrowd": 0, "bbox": [407, 269, 102, 129], "area": 676}, {"id": 2566448, "category_id": 171, "iscrowd": 0, "bbox": [413, 234, 97, 182], "area": 3050}, {"id": 9934229, "category_id": 181, "iscrowd": 0, "bbox": [51, 104, 345, 246], "area": 47333}, {"id": 6909036, "category_id": 186, "iscrowd": 0, "bbox": [32, 0, 562, 92], "area": 38707}, {"id": 5919823, "category_id": 189, "iscrowd": 0, "bbox": [250, 425, 131, 55], "area": 4422}, {"id": 6316642, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 106525}, {"id": 2829102, "category_id": 200, "iscrowd": 0, "bbox": [209, 446, 312, 34], "area": 3204}], "file_name": "000000233825.png", "image_id": 233825}, {"segments_info": [{"id": 11649220, "category_id": 85, "iscrowd": 0, "bbox": [228, 233, 37, 37], "area": 1047}, {"id": 7764606, "category_id": 149, "iscrowd": 0, "bbox": [0, 500, 480, 140], "area": 34035}, {"id": 3295032, "category_id": 184, "iscrowd": 0, "bbox": [62, 282, 418, 171], "area": 8234}, {"id": 13278848, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 379], "area": 144450}, {"id": 8093830, "category_id": 191, "iscrowd": 0, "bbox": [412, 481, 68, 43], "area": 2443}, {"id": 4551012, "category_id": 193, "iscrowd": 0, "bbox": [69, 524, 411, 72], "area": 9290}, {"id": 2301983, "category_id": 194, "iscrowd": 0, "bbox": [0, 462, 449, 70], "area": 3933}, {"id": 6184803, "category_id": 197, "iscrowd": 0, "bbox": [0, 71, 450, 509], "area": 102469}, {"id": 2696997, "category_id": 199, "iscrowd": 0, "bbox": [432, 449, 48, 37], "area": 1274}], "file_name": "000000234366.png", "image_id": 234366}, {"segments_info": [{"id": 9603716, "category_id": 70, "iscrowd": 0, "bbox": [150, 46, 294, 410], "area": 66387}, {"id": 5661289, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 452], "area": 153882}, {"id": 6910834, "category_id": 190, "iscrowd": 0, "bbox": [0, 329, 640, 151], "area": 39068}, {"id": 5659741, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 306, 480], "area": 44005}, {"id": 10791586, "category_id": 200, "iscrowd": 0, "bbox": [447, 431, 124, 49], "area": 3598}], "file_name": "000000234413.png", "image_id": 234413}, {"segments_info": [{"id": 4156584, "category_id": 1, "iscrowd": 0, "bbox": [251, 301, 274, 305], "area": 44454}, {"id": 6712436, "category_id": 1, "iscrowd": 0, "bbox": [413, 130, 4, 7], "area": 15}, {"id": 3621965, "category_id": 1, "iscrowd": 0, "bbox": [332, 128, 3, 11], "area": 22}, {"id": 5198938, "category_id": 1, "iscrowd": 0, "bbox": [270, 123, 5, 12], "area": 46}, {"id": 4286061, "category_id": 1, "iscrowd": 0, "bbox": [469, 135, 4, 13], "area": 50}, {"id": 3949900, "category_id": 1, "iscrowd": 0, "bbox": [460, 132, 5, 14], "area": 53}, {"id": 4412251, "category_id": 1, "iscrowd": 0, "bbox": [424, 128, 6, 16], "area": 73}, {"id": 3290172, "category_id": 1, "iscrowd": 0, "bbox": [405, 130, 4, 11], "area": 31}, {"id": 5859009, "category_id": 1, "iscrowd": 0, "bbox": [517, 268, 95, 343], "area": 17101}, {"id": 4149084, "category_id": 1, "iscrowd": 0, "bbox": [392, 134, 5, 7], "area": 23}, {"id": 5136262, "category_id": 25, "iscrowd": 0, "bbox": [0, 110, 254, 241], "area": 35317}, {"id": 7977693, "category_id": 154, "iscrowd": 0, "bbox": [0, 218, 598, 394], "area": 37813}, {"id": 4805726, "category_id": 184, "iscrowd": 0, "bbox": [0, 18, 612, 505], "area": 49179}, {"id": 3948893, "category_id": 185, "iscrowd": 0, "bbox": [0, 147, 612, 465], "area": 52126}, {"id": 15457756, "category_id": 187, "iscrowd": 0, "bbox": [225, 0, 387, 46], "area": 13102}, {"id": 7762287, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 612, 94], "area": 29999}, {"id": 5472910, "category_id": 193, "iscrowd": 0, "bbox": [103, 68, 509, 183], "area": 38248}, {"id": 11521502, "category_id": 199, "iscrowd": 0, "bbox": [0, 247, 608, 308], "area": 54017}], "file_name": "000000234526.png", "image_id": 234526}, {"segments_info": [{"id": 4211807, "category_id": 1, "iscrowd": 0, "bbox": [1, 86, 189, 368], "area": 31188}, {"id": 7831953, "category_id": 1, "iscrowd": 0, "bbox": [166, 74, 209, 388], "area": 42418}, {"id": 15397625, "category_id": 75, "iscrowd": 0, "bbox": [168, 251, 12, 10], "area": 76}, {"id": 13750459, "category_id": 75, "iscrowd": 0, "bbox": [128, 266, 43, 15], "area": 213}, {"id": 14805239, "category_id": 75, "iscrowd": 0, "bbox": [176, 263, 8, 16], "area": 84}, {"id": 8951990, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 375, 411], "area": 71181}, {"id": 5928594, "category_id": 190, "iscrowd": 0, "bbox": [0, 369, 375, 131], "area": 30898}], "file_name": "000000234607.png", "image_id": 234607}, {"segments_info": [{"id": 11973547, "category_id": 7, "iscrowd": 0, "bbox": [36, 90, 581, 234], "area": 63169}, {"id": 13683651, "category_id": 7, "iscrowd": 0, "bbox": [237, 103, 403, 362], "area": 70718}, {"id": 3490642, "category_id": 190, "iscrowd": 0, "bbox": [0, 250, 366, 230], "area": 48826}, {"id": 4673106, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 273], "area": 89961}], "file_name": "000000234660.png", "image_id": 234660}, {"segments_info": [{"id": 4734520, "category_id": 14, "iscrowd": 0, "bbox": [285, 76, 72, 285], "area": 14229}, {"id": 9273985, "category_id": 15, "iscrowd": 0, "bbox": [153, 21, 42, 25], "area": 651}, {"id": 9605782, "category_id": 15, "iscrowd": 0, "bbox": [361, 210, 66, 61], "area": 2086}, {"id": 15065054, "category_id": 178, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 276745}], "file_name": "000000234757.png", "image_id": 234757}, {"segments_info": [{"id": 4682154, "category_id": 54, "iscrowd": 0, "bbox": [239, 136, 344, 248], "area": 65215}, {"id": 2838659, "category_id": 54, "iscrowd": 0, "bbox": [87, 85, 197, 146], "area": 24001}, {"id": 3425117, "category_id": 189, "iscrowd": 0, "bbox": [0, 129, 640, 298], "area": 48778}, {"id": 7965097, "category_id": 196, "iscrowd": 0, "bbox": [86, 83, 470, 316], "area": 8252}, {"id": 2906744, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 530, 197], "area": 62186}], "file_name": "000000234779.png", "image_id": 234779}, {"segments_info": [{"id": 3359816, "category_id": 19, "iscrowd": 0, "bbox": [129, 219, 88, 190], "area": 9949}, {"id": 2371644, "category_id": 19, "iscrowd": 0, "bbox": [3, 239, 84, 52], "area": 2051}, {"id": 4344651, "category_id": 19, "iscrowd": 0, "bbox": [511, 169, 129, 293], "area": 28818}, {"id": 4087396, "category_id": 125, "iscrowd": 0, "bbox": [0, 289, 142, 173], "area": 15809}, {"id": 1319729, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 268], "area": 102235}, {"id": 1070661, "category_id": 193, "iscrowd": 0, "bbox": [0, 197, 640, 265], "area": 96196}, {"id": 3292743, "category_id": 197, "iscrowd": 0, "bbox": [114, 84, 407, 152], "area": 36243}], "file_name": "000000234807.png", "image_id": 234807}, {"segments_info": [{"id": 5921120, "category_id": 25, "iscrowd": 0, "bbox": [30, 1, 309, 490], "area": 51982}, {"id": 4540997, "category_id": 178, "iscrowd": 0, "bbox": [0, 84, 480, 545], "area": 144302}, {"id": 3354926, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 113], "area": 31253}, {"id": 7897470, "category_id": 198, "iscrowd": 0, "bbox": [0, 284, 480, 356], "area": 79289}], "file_name": "000000235057.png", "image_id": 235057}, {"segments_info": [{"id": 5331819, "category_id": 23, "iscrowd": 0, "bbox": [113, 131, 433, 288], "area": 85155}, {"id": 6259575, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 432], "area": 173591}, {"id": 10991814, "category_id": 198, "iscrowd": 0, "bbox": [0, 386, 640, 94], "area": 45171}], "file_name": "000000235064.png", "image_id": 235064}, {"segments_info": [{"id": 4082814, "category_id": 1, "iscrowd": 0, "bbox": [516, 326, 85, 101], "area": 5221}, {"id": 3954317, "category_id": 1, "iscrowd": 0, "bbox": [437, 397, 34, 29], "area": 796}, {"id": 3877782, "category_id": 1, "iscrowd": 0, "bbox": [182, 69, 298, 353], "area": 46190}, {"id": 4016495, "category_id": 1, "iscrowd": 0, "bbox": [595, 378, 45, 49], "area": 1679}, {"id": 2903660, "category_id": 1, "iscrowd": 0, "bbox": [43, 46, 152, 380], "area": 37129}, {"id": 8674397, "category_id": 28, "iscrowd": 0, "bbox": [346, 303, 191, 84], "area": 9647}, {"id": 5365465, "category_id": 34, "iscrowd": 0, "bbox": [441, 57, 131, 119], "area": 6838}, {"id": 13086616, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 163102}], "file_name": "000000235241.png", "image_id": 235241}, {"segments_info": [{"id": 4542295, "category_id": 25, "iscrowd": 0, "bbox": [241, 155, 96, 140], "area": 4048}, {"id": 3423040, "category_id": 25, "iscrowd": 0, "bbox": [267, 161, 83, 126], "area": 1736}, {"id": 4147536, "category_id": 25, "iscrowd": 0, "bbox": [342, 156, 81, 124], "area": 3392}, {"id": 7107449, "category_id": 184, "iscrowd": 0, "bbox": [0, 98, 640, 230], "area": 64961}, {"id": 12960706, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 224], "area": 104830}, {"id": 6522270, "category_id": 193, "iscrowd": 0, "bbox": [0, 247, 640, 114], "area": 23412}, {"id": 6455448, "category_id": 194, "iscrowd": 0, "bbox": [0, 332, 640, 95], "area": 55060}], "file_name": "000000235252.png", "image_id": 235252}, {"segments_info": [{"id": 5593949, "category_id": 8, "iscrowd": 0, "bbox": [85, 0, 415, 369], "area": 133843}, {"id": 12173765, "category_id": 18, "iscrowd": 0, "bbox": [163, 226, 68, 92], "area": 4000}, {"id": 5529959, "category_id": 65, "iscrowd": 0, "bbox": [305, 202, 82, 97], "area": 6805}, {"id": 10535368, "category_id": 149, "iscrowd": 0, "bbox": [68, 359, 41, 16], "area": 505}, {"id": 8234392, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 295], "area": 20376}, {"id": 16580093, "category_id": 187, "iscrowd": 0, "bbox": [23, 0, 162, 98], "area": 5647}, {"id": 13160914, "category_id": 191, "iscrowd": 0, "bbox": [0, 273, 84, 21], "area": 1549}, {"id": 6602146, "category_id": 193, "iscrowd": 0, "bbox": [0, 247, 500, 128], "area": 12351}], "file_name": "000000235399.png", "image_id": 235399}, {"segments_info": [{"id": 5139347, "category_id": 1, "iscrowd": 0, "bbox": [248, 126, 203, 206], "area": 16691}, {"id": 1913173, "category_id": 1, "iscrowd": 0, "bbox": [524, 253, 80, 78], "area": 5153}, {"id": 3567294, "category_id": 38, "iscrowd": 0, "bbox": [237, 155, 19, 30], "area": 226}, {"id": 12233679, "category_id": 38, "iscrowd": 0, "bbox": [629, 24, 11, 39], "area": 263}, {"id": 1457316, "category_id": 38, "iscrowd": 0, "bbox": [576, 26, 60, 285], "area": 6340}, {"id": 6454200, "category_id": 38, "iscrowd": 0, "bbox": [356, 106, 57, 106], "area": 3108}, {"id": 2449136, "category_id": 38, "iscrowd": 0, "bbox": [481, 62, 54, 116], "area": 3485}, {"id": 3046317, "category_id": 38, "iscrowd": 0, "bbox": [140, 117, 48, 210], "area": 4520}, {"id": 7617513, "category_id": 38, "iscrowd": 0, "bbox": [191, 128, 51, 102], "area": 2876}, {"id": 8558524, "category_id": 38, "iscrowd": 0, "bbox": [96, 112, 49, 214], "area": 4562}, {"id": 5859710, "category_id": 38, "iscrowd": 0, "bbox": [56, 94, 38, 192], "area": 2676}, {"id": 11389905, "category_id": 38, "iscrowd": 0, "bbox": [412, 90, 49, 108], "area": 2971}, {"id": 1122867, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 337], "area": 130475}], "file_name": "000000235778.png", "image_id": 235778}, {"segments_info": [{"id": 2895689, "category_id": 1, "iscrowd": 0, "bbox": [241, 148, 105, 263], "area": 13692}, {"id": 2962490, "category_id": 27, "iscrowd": 0, "bbox": [214, 186, 40, 112], "area": 2912}, {"id": 10527398, "category_id": 159, "iscrowd": 0, "bbox": [0, 156, 640, 303], "area": 167329}, {"id": 12572376, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 186], "area": 109128}], "file_name": "000000235784.png", "image_id": 235784}, {"segments_info": [{"id": 6053252, "category_id": 1, "iscrowd": 0, "bbox": [220, 282, 156, 326], "area": 25594}, {"id": 6055089, "category_id": 37, "iscrowd": 0, "bbox": [135, 412, 32, 32], "area": 781}, {"id": 8698821, "category_id": 62, "iscrowd": 0, "bbox": [0, 273, 69, 108], "area": 3297}, {"id": 12172205, "category_id": 62, "iscrowd": 0, "bbox": [283, 230, 144, 181], "area": 9220}, {"id": 11119003, "category_id": 62, "iscrowd": 0, "bbox": [68, 226, 152, 170], "area": 14590}, {"id": 5594977, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 359, 346], "area": 57342}, {"id": 8693940, "category_id": 144, "iscrowd": 0, "bbox": [0, 327, 239, 51], "area": 1515}, {"id": 4014396, "category_id": 181, "iscrowd": 0, "bbox": [0, 83, 173, 85], "area": 8214}, {"id": 4549994, "category_id": 184, "iscrowd": 0, "bbox": [155, 0, 272, 356], "area": 53200}, {"id": 5410949, "category_id": 193, "iscrowd": 0, "bbox": [0, 309, 427, 331], "area": 96846}], "file_name": "000000235836.png", "image_id": 235836}, {"segments_info": [{"id": 2895155, "category_id": 21, "iscrowd": 0, "bbox": [361, 82, 99, 37], "area": 2447}, {"id": 2765879, "category_id": 21, "iscrowd": 0, "bbox": [52, 114, 270, 164], "area": 25646}, {"id": 2968213, "category_id": 21, "iscrowd": 0, "bbox": [255, 107, 294, 245], "area": 42583}, {"id": 10003881, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 110], "area": 49084}, {"id": 16381674, "category_id": 187, "iscrowd": 0, "bbox": [254, 0, 274, 38], "area": 4705}, {"id": 5480082, "category_id": 193, "iscrowd": 0, "bbox": [0, 70, 640, 356], "area": 147558}], "file_name": "000000235857.png", "image_id": 235857}, {"segments_info": [{"id": 8554121, "category_id": 1, "iscrowd": 0, "bbox": [0, 2, 426, 628], "area": 151414}, {"id": 6250340, "category_id": 18, "iscrowd": 0, "bbox": [8, 327, 352, 272], "area": 52711}, {"id": 16514040, "category_id": 187, "iscrowd": 0, "bbox": [66, 0, 360, 257], "area": 22337}], "file_name": "000000236166.png", "image_id": 236166}, {"segments_info": [{"id": 5324667, "category_id": 1, "iscrowd": 0, "bbox": [50, 149, 56, 129], "area": 2800}, {"id": 6381405, "category_id": 1, "iscrowd": 0, "bbox": [175, 187, 47, 91], "area": 1338}, {"id": 8943990, "category_id": 1, "iscrowd": 0, "bbox": [524, 188, 6, 15], "area": 57}, {"id": 2830384, "category_id": 27, "iscrowd": 0, "bbox": [50, 167, 33, 46], "area": 1190}, {"id": 2956142, "category_id": 27, "iscrowd": 0, "bbox": [178, 188, 26, 39], "area": 740}, {"id": 8810078, "category_id": 35, "iscrowd": 0, "bbox": [182, 271, 36, 6], "area": 37}, {"id": 12100501, "category_id": 35, "iscrowd": 0, "bbox": [35, 265, 74, 12], "area": 268}, {"id": 13682370, "category_id": 159, "iscrowd": 0, "bbox": [0, 117, 640, 251], "area": 137401}, {"id": 13212794, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 160], "area": 91476}], "file_name": "000000236308.png", "image_id": 236308}, {"segments_info": [{"id": 5325631, "category_id": 50, "iscrowd": 0, "bbox": [552, 60, 60, 41], "area": 1227}, {"id": 7636373, "category_id": 59, "iscrowd": 0, "bbox": [94, 54, 485, 374], "area": 141047}, {"id": 4407139, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 90464}, {"id": 5793917, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 541, 379], "area": 33241}], "file_name": "000000236412.png", "image_id": 236412}, {"segments_info": [{"id": 7564670, "category_id": 1, "iscrowd": 0, "bbox": [153, 3, 47, 56], "area": 1270}, {"id": 9008766, "category_id": 1, "iscrowd": 0, "bbox": [50, 0, 55, 61], "area": 1521}, {"id": 5129034, "category_id": 1, "iscrowd": 0, "bbox": [103, 3, 47, 60], "area": 1429}, {"id": 5987454, "category_id": 1, "iscrowd": 0, "bbox": [254, 22, 38, 41], "area": 878}, {"id": 7166817, "category_id": 1, "iscrowd": 0, "bbox": [272, 13, 25, 50], "area": 528}, {"id": 5268337, "category_id": 1, "iscrowd": 0, "bbox": [203, 29, 40, 35], "area": 1073}, {"id": 7760756, "category_id": 1, "iscrowd": 0, "bbox": [103, 38, 41, 27], "area": 623}, {"id": 3879192, "category_id": 1, "iscrowd": 0, "bbox": [21, 96, 101, 133], "area": 4997}, {"id": 8025736, "category_id": 1, "iscrowd": 0, "bbox": [157, 31, 38, 33], "area": 705}, {"id": 6310474, "category_id": 1, "iscrowd": 0, "bbox": [298, 29, 47, 35], "area": 823}, {"id": 9531736, "category_id": 1, "iscrowd": 0, "bbox": [296, 0, 57, 63], "area": 1349}, {"id": 3748194, "category_id": 1, "iscrowd": 0, "bbox": [51, 30, 45, 36], "area": 949}, {"id": 8417649, "category_id": 1, "iscrowd": 0, "bbox": [261, 64, 145, 217], "area": 8979}, {"id": 5330248, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 639, 248], "area": 16769}, {"id": 6381144, "category_id": 37, "iscrowd": 0, "bbox": [171, 165, 18, 19], "area": 246}, {"id": 6476225, "category_id": 37, "iscrowd": 0, "bbox": [159, 229, 10, 11], "area": 86}, {"id": 7372694, "category_id": 43, "iscrowd": 0, "bbox": [363, 88, 19, 22], "area": 116}, {"id": 4008215, "category_id": 62, "iscrowd": 0, "bbox": [11, 39, 41, 17], "area": 378}, {"id": 3023641, "category_id": 62, "iscrowd": 0, "bbox": [12, 52, 41, 11], "area": 377}, {"id": 4141346, "category_id": 62, "iscrowd": 0, "bbox": [132, 14, 21, 32], "area": 250}, {"id": 11044242, "category_id": 138, "iscrowd": 0, "bbox": [0, 351, 640, 78], "area": 48023}, {"id": 11250600, "category_id": 145, "iscrowd": 0, "bbox": [0, 200, 640, 156], "area": 84897}, {"id": 7501164, "category_id": 161, "iscrowd": 0, "bbox": [319, 0, 321, 67], "area": 15304}, {"id": 2962712, "category_id": 199, "iscrowd": 0, "bbox": [0, 34, 640, 194], "area": 76845}], "file_name": "000000236426.png", "image_id": 236426}, {"segments_info": [{"id": 3948882, "category_id": 18, "iscrowd": 0, "bbox": [2, 168, 241, 305], "area": 46548}, {"id": 4542556, "category_id": 79, "iscrowd": 0, "bbox": [232, 0, 408, 480], "area": 186297}, {"id": 4807784, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 260, 398], "area": 61333}, {"id": 1449253, "category_id": 200, "iscrowd": 0, "bbox": [0, 392, 294, 88], "area": 10163}], "file_name": "000000236592.png", "image_id": 236592}, {"segments_info": [{"id": 3158580, "category_id": 1, "iscrowd": 0, "bbox": [411, 265, 27, 34], "area": 525}, {"id": 3750196, "category_id": 1, "iscrowd": 0, "bbox": [323, 164, 10, 24], "area": 164}, {"id": 3026734, "category_id": 1, "iscrowd": 0, "bbox": [280, 174, 11, 18], "area": 96}, {"id": 3881034, "category_id": 1, "iscrowd": 0, "bbox": [239, 212, 9, 44], "area": 181}, {"id": 6644578, "category_id": 38, "iscrowd": 0, "bbox": [279, 89, 36, 47], "area": 872}, {"id": 8823485, "category_id": 38, "iscrowd": 0, "bbox": [306, 96, 40, 49], "area": 723}, {"id": 6125701, "category_id": 38, "iscrowd": 0, "bbox": [164, 45, 32, 28], "area": 573}, {"id": 12372178, "category_id": 38, "iscrowd": 0, "bbox": [73, 37, 116, 95], "area": 4931}, {"id": 4342869, "category_id": 38, "iscrowd": 0, "bbox": [426, 50, 48, 32], "area": 499}, {"id": 5124416, "category_id": 38, "iscrowd": 0, "bbox": [210, 63, 75, 50], "area": 1824}, {"id": 2963793, "category_id": 38, "iscrowd": 0, "bbox": [0, 44, 27, 111], "area": 1084}, {"id": 4803417, "category_id": 38, "iscrowd": 0, "bbox": [464, 70, 36, 23], "area": 227}, {"id": 9327714, "category_id": 38, "iscrowd": 0, "bbox": [370, 96, 30, 19], "area": 223}, {"id": 10458271, "category_id": 38, "iscrowd": 0, "bbox": [49, 85, 100, 84], "area": 3327}, {"id": 4278367, "category_id": 38, "iscrowd": 0, "bbox": [181, 66, 46, 27], "area": 843}, {"id": 11644332, "category_id": 144, "iscrowd": 0, "bbox": [480, 160, 20, 34], "area": 475}, {"id": 9600869, "category_id": 155, "iscrowd": 0, "bbox": [0, 126, 488, 69], "area": 16158}, {"id": 4408892, "category_id": 184, "iscrowd": 0, "bbox": [313, 50, 187, 121], "area": 7828}, {"id": 1712683, "category_id": 185, "iscrowd": 0, "bbox": [0, 169, 475, 177], "area": 4485}, {"id": 16307895, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 142], "area": 47665}, {"id": 2244914, "category_id": 193, "iscrowd": 0, "bbox": [0, 164, 500, 182], "area": 78001}, {"id": 5261899, "category_id": 197, "iscrowd": 0, "bbox": [454, 139, 46, 40], "area": 941}, {"id": 5264469, "category_id": 198, "iscrowd": 0, "bbox": [236, 159, 26, 21], "area": 319}], "file_name": "000000236599.png", "image_id": 236599}, {"segments_info": [{"id": 12300458, "category_id": 16, "iscrowd": 0, "bbox": [312, 28, 175, 308], "area": 20785}, {"id": 8737292, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 399], "area": 234432}], "file_name": "000000236690.png", "image_id": 236690}, {"segments_info": [{"id": 5134189, "category_id": 47, "iscrowd": 0, "bbox": [105, 109, 61, 59], "area": 2796}, {"id": 8494514, "category_id": 47, "iscrowd": 0, "bbox": [546, 305, 81, 84], "area": 5121}, {"id": 1856115, "category_id": 47, "iscrowd": 0, "bbox": [434, 283, 103, 102], "area": 7415}, {"id": 5463928, "category_id": 47, "iscrowd": 0, "bbox": [163, 126, 64, 62], "area": 3107}, {"id": 4279906, "category_id": 50, "iscrowd": 0, "bbox": [161, 106, 123, 20], "area": 1099}, {"id": 8231857, "category_id": 51, "iscrowd": 0, "bbox": [316, 75, 121, 116], "area": 5609}, {"id": 10534353, "category_id": 51, "iscrowd": 0, "bbox": [225, 118, 57, 60], "area": 2511}, {"id": 5864092, "category_id": 51, "iscrowd": 0, "bbox": [67, 182, 234, 231], "area": 40682}, {"id": 1209242, "category_id": 52, "iscrowd": 0, "bbox": [426, 88, 140, 117], "area": 8217}, {"id": 7828095, "category_id": 100, "iscrowd": 0, "bbox": [268, 76, 223, 200], "area": 12140}, {"id": 8758205, "category_id": 195, "iscrowd": 0, "bbox": [221, 143, 375, 181], "area": 13266}, {"id": 10402766, "category_id": 196, "iscrowd": 0, "bbox": [484, 232, 41, 43], "area": 1325}, {"id": 2704230, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 469, 250], "area": 46615}, {"id": 1053228, "category_id": 200, "iscrowd": 0, "bbox": [0, 71, 640, 409], "area": 49460}], "file_name": "000000236721.png", "image_id": 236721}, {"segments_info": [{"id": 4544363, "category_id": 24, "iscrowd": 0, "bbox": [0, 16, 379, 618], "area": 158788}, {"id": 7179942, "category_id": 154, "iscrowd": 0, "bbox": [266, 120, 214, 160], "area": 23784}, {"id": 10537954, "category_id": 194, "iscrowd": 0, "bbox": [65, 16, 415, 624], "area": 101005}, {"id": 6653596, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 480, 111], "area": 20609}], "file_name": "000000236730.png", "image_id": 236730}, {"segments_info": [{"id": 987407, "category_id": 18, "iscrowd": 0, "bbox": [2, 194, 241, 154], "area": 19667}, {"id": 5335917, "category_id": 18, "iscrowd": 0, "bbox": [233, 193, 264, 132], "area": 20435}, {"id": 4350048, "category_id": 63, "iscrowd": 0, "bbox": [0, 98, 500, 297], "area": 98778}, {"id": 14212811, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 500, 129], "area": 6554}, {"id": 2305849, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 450, 122], "area": 3836}, {"id": 12900294, "category_id": 199, "iscrowd": 0, "bbox": [8, 0, 424, 130], "area": 43719}], "file_name": "000000236784.png", "image_id": 236784}, {"segments_info": [{"id": 6184803, "category_id": 3, "iscrowd": 0, "bbox": [48, 427, 53, 42], "area": 1666}, {"id": 6051675, "category_id": 149, "iscrowd": 0, "bbox": [0, 446, 167, 194], "area": 22533}, {"id": 14736088, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 390, 289], "area": 17988}, {"id": 3619136, "category_id": 191, "iscrowd": 0, "bbox": [368, 427, 127, 213], "area": 19450}, {"id": 4606292, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 495, 503], "area": 105457}], "file_name": "000000236845.png", "image_id": 236845}, {"segments_info": [{"id": 3227723, "category_id": 44, "iscrowd": 0, "bbox": [487, 102, 129, 298], "area": 31069}, {"id": 266051, "category_id": 62, "iscrowd": 0, "bbox": [1, 135, 61, 302], "area": 10948}, {"id": 10924736, "category_id": 67, "iscrowd": 0, "bbox": [16, 313, 620, 129], "area": 43160}, {"id": 3949429, "category_id": 88, "iscrowd": 0, "bbox": [288, 115, 204, 204], "area": 28844}, {"id": 6584716, "category_id": 88, "iscrowd": 0, "bbox": [21, 18, 366, 401], "area": 84461}, {"id": 12763845, "category_id": 189, "iscrowd": 0, "bbox": [0, 410, 640, 39], "area": 5107}, {"id": 263431, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 410], "area": 80698}], "file_name": "000000236914.png", "image_id": 236914}, {"segments_info": [{"id": 8152402, "category_id": 1, "iscrowd": 0, "bbox": [183, 104, 285, 323], "area": 34965}, {"id": 7981226, "category_id": 37, "iscrowd": 0, "bbox": [362, 151, 26, 25], "area": 508}, {"id": 6052960, "category_id": 43, "iscrowd": 0, "bbox": [104, 259, 97, 81], "area": 3889}, {"id": 3553323, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 219750}, {"id": 5995109, "category_id": 190, "iscrowd": 0, "bbox": [262, 360, 378, 67], "area": 13772}], "file_name": "000000237071.png", "image_id": 237071}, {"segments_info": [{"id": 2241088, "category_id": 1, "iscrowd": 0, "bbox": [241, 151, 225, 467], "area": 62549}, {"id": 7573923, "category_id": 31, "iscrowd": 0, "bbox": [424, 388, 43, 209], "area": 3849}, {"id": 3363167, "category_id": 82, "iscrowd": 0, "bbox": [211, 210, 100, 405], "area": 26605}, {"id": 7447999, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 580, 628], "area": 120033}], "file_name": "000000237118.png", "image_id": 237118}, {"segments_info": [{"id": 12236477, "category_id": 70, "iscrowd": 0, "bbox": [63, 260, 100, 220], "area": 14071}, {"id": 12894152, "category_id": 81, "iscrowd": 0, "bbox": [167, 244, 95, 45], "area": 3267}, {"id": 14473694, "category_id": 112, "iscrowd": 0, "bbox": [251, 0, 103, 500], "area": 43861}, {"id": 11973308, "category_id": 176, "iscrowd": 0, "bbox": [0, 206, 267, 294], "area": 41589}, {"id": 2888540, "category_id": 180, "iscrowd": 0, "bbox": [113, 0, 115, 32], "area": 3149}, {"id": 13222337, "category_id": 181, "iscrowd": 0, "bbox": [106, 15, 149, 212], "area": 24895}, {"id": 9147810, "category_id": 190, "iscrowd": 0, "bbox": [32, 402, 236, 98], "area": 15708}, {"id": 12367294, "category_id": 195, "iscrowd": 0, "bbox": [69, 224, 70, 45], "area": 1394}, {"id": 13419464, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 39350}], "file_name": "000000237316.png", "image_id": 237316}, {"segments_info": [{"id": 8093056, "category_id": 48, "iscrowd": 0, "bbox": [169, 262, 41, 82], "area": 226}, {"id": 14665927, "category_id": 48, "iscrowd": 0, "bbox": [93, 587, 36, 53], "area": 1185}, {"id": 5455933, "category_id": 49, "iscrowd": 0, "bbox": [66, 481, 245, 61], "area": 2944}, {"id": 7629422, "category_id": 50, "iscrowd": 0, "bbox": [170, 263, 39, 80], "area": 417}, {"id": 7569538, "category_id": 51, "iscrowd": 0, "bbox": [336, 391, 142, 127], "area": 15271}, {"id": 7962749, "category_id": 51, "iscrowd": 0, "bbox": [294, 309, 110, 75], "area": 6626}, {"id": 3683396, "category_id": 62, "iscrowd": 0, "bbox": [36, 175, 201, 128], "area": 18351}, {"id": 4867919, "category_id": 62, "iscrowd": 0, "bbox": [151, 119, 135, 189], "area": 5247}, {"id": 2368562, "category_id": 64, "iscrowd": 0, "bbox": [2, 88, 164, 419], "area": 34209}, {"id": 5791344, "category_id": 67, "iscrowd": 0, "bbox": [9, 297, 467, 332], "area": 96923}, {"id": 2048324, "category_id": 184, "iscrowd": 0, "bbox": [98, 0, 380, 172], "area": 40992}, {"id": 4539225, "category_id": 189, "iscrowd": 0, "bbox": [0, 388, 478, 252], "area": 4746}, {"id": 9340326, "category_id": 190, "iscrowd": 0, "bbox": [252, 157, 226, 233], "area": 22641}, {"id": 5339272, "category_id": 193, "iscrowd": 0, "bbox": [262, 158, 216, 99], "area": 10020}, {"id": 9748956, "category_id": 196, "iscrowd": 0, "bbox": [119, 630, 207, 10], "area": 1975}, {"id": 4145234, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 84, 235], "area": 15909}], "file_name": "000000237517.png", "image_id": 237517}, {"segments_info": [{"id": 4739951, "category_id": 18, "iscrowd": 0, "bbox": [436, 244, 48, 79], "area": 1569}, {"id": 3160134, "category_id": 22, "iscrowd": 0, "bbox": [64, 117, 269, 189], "area": 26908}, {"id": 5197367, "category_id": 184, "iscrowd": 0, "bbox": [0, 89, 640, 173], "area": 61129}, {"id": 15128509, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 130], "area": 63262}, {"id": 13152649, "category_id": 192, "iscrowd": 0, "bbox": [169, 85, 471, 47], "area": 7045}, {"id": 4543080, "category_id": 198, "iscrowd": 0, "bbox": [0, 218, 640, 85], "area": 14092}], "file_name": "000000237864.png", "image_id": 237864}, {"segments_info": [{"id": 987155, "category_id": 78, "iscrowd": 0, "bbox": [77, 239, 127, 73], "area": 8671}, {"id": 2435377, "category_id": 79, "iscrowd": 0, "bbox": [2, 322, 87, 46], "area": 2053}, {"id": 1382954, "category_id": 79, "iscrowd": 0, "bbox": [2, 345, 113, 246], "area": 19308}, {"id": 3621199, "category_id": 82, "iscrowd": 0, "bbox": [286, 88, 147, 444], "area": 60210}, {"id": 658200, "category_id": 176, "iscrowd": 0, "bbox": [0, 221, 296, 101], "area": 11987}, {"id": 4214111, "category_id": 186, "iscrowd": 0, "bbox": [32, 0, 425, 65], "area": 16450}, {"id": 8294048, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 301, 547], "area": 83853}, {"id": 1842726, "category_id": 189, "iscrowd": 0, "bbox": [0, 255, 290, 89], "area": 6271}, {"id": 3688023, "category_id": 199, "iscrowd": 0, "bbox": [120, 32, 337, 532], "area": 23965}, {"id": 5994134, "category_id": 200, "iscrowd": 0, "bbox": [53, 490, 404, 150], "area": 44313}], "file_name": "000000237928.png", "image_id": 237928}, {"segments_info": [{"id": 3492685, "category_id": 15, "iscrowd": 0, "bbox": [29, 135, 609, 282], "area": 51880}, {"id": 1909788, "category_id": 62, "iscrowd": 0, "bbox": [112, 95, 132, 134], "area": 11091}, {"id": 3289653, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 195186}], "file_name": "000000237984.png", "image_id": 237984}, {"segments_info": [{"id": 8816262, "category_id": 1, "iscrowd": 0, "bbox": [43, 63, 251, 266], "area": 23951}, {"id": 10921638, "category_id": 37, "iscrowd": 0, "bbox": [392, 135, 40, 34], "area": 1009}, {"id": 12632256, "category_id": 37, "iscrowd": 0, "bbox": [260, 316, 24, 17], "area": 304}, {"id": 2894892, "category_id": 43, "iscrowd": 0, "bbox": [0, 202, 56, 37], "area": 1015}, {"id": 9605778, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 500, 45], "area": 13169}], "file_name": "000000238013.png", "image_id": 238013}, {"segments_info": [{"id": 7501435, "category_id": 20, "iscrowd": 0, "bbox": [125, 314, 201, 279], "area": 24389}, {"id": 6779253, "category_id": 125, "iscrowd": 0, "bbox": [159, 535, 18, 23], "area": 32}, {"id": 3621173, "category_id": 184, "iscrowd": 0, "bbox": [0, 13, 480, 627], "area": 134949}, {"id": 15987180, "category_id": 187, "iscrowd": 0, "bbox": [16, 0, 464, 226], "area": 35657}, {"id": 4414037, "category_id": 193, "iscrowd": 0, "bbox": [90, 212, 373, 428], "area": 8756}, {"id": 8554895, "category_id": 194, "iscrowd": 0, "bbox": [0, 127, 434, 513], "area": 95928}], "file_name": "000000238039.png", "image_id": 238039}, {"segments_info": [{"id": 6970458, "category_id": 1, "iscrowd": 0, "bbox": [367, 193, 142, 151], "area": 7384}, {"id": 9408415, "category_id": 1, "iscrowd": 0, "bbox": [170, 169, 79, 96], "area": 4073}, {"id": 5195845, "category_id": 1, "iscrowd": 0, "bbox": [374, 201, 252, 246], "area": 11173}, {"id": 5977125, "category_id": 1, "iscrowd": 0, "bbox": [0, 372, 196, 100], "area": 11366}, {"id": 5723488, "category_id": 1, "iscrowd": 0, "bbox": [72, 189, 184, 160], "area": 9040}, {"id": 2629406, "category_id": 1, "iscrowd": 0, "bbox": [388, 209, 188, 149], "area": 7833}, {"id": 4670293, "category_id": 1, "iscrowd": 0, "bbox": [22, 199, 229, 246], "area": 13804}, {"id": 5657195, "category_id": 1, "iscrowd": 0, "bbox": [295, 173, 65, 99], "area": 3590}, {"id": 4141611, "category_id": 1, "iscrowd": 0, "bbox": [346, 270, 293, 202], "area": 25782}, {"id": 13161175, "category_id": 28, "iscrowd": 0, "bbox": [347, 2, 61, 248], "area": 6397}, {"id": 12691859, "category_id": 44, "iscrowd": 0, "bbox": [302, 269, 15, 35], "area": 402}, {"id": 12693668, "category_id": 44, "iscrowd": 0, "bbox": [306, 255, 13, 25], "area": 157}, {"id": 6116432, "category_id": 44, "iscrowd": 0, "bbox": [335, 236, 16, 55], "area": 574}, {"id": 12427647, "category_id": 44, "iscrowd": 0, "bbox": [299, 313, 21, 53], "area": 847}, {"id": 8749969, "category_id": 46, "iscrowd": 0, "bbox": [123, 260, 21, 48], "area": 550}, {"id": 13813949, "category_id": 46, "iscrowd": 0, "bbox": [217, 207, 9, 9], "area": 63}, {"id": 10791345, "category_id": 46, "iscrowd": 0, "bbox": [141, 237, 20, 32], "area": 460}, {"id": 6969166, "category_id": 46, "iscrowd": 0, "bbox": [454, 282, 29, 61], "area": 826}, {"id": 6445400, "category_id": 46, "iscrowd": 0, "bbox": [480, 314, 49, 93], "area": 1943}, {"id": 6314333, "category_id": 46, "iscrowd": 0, "bbox": [96, 360, 35, 85], "area": 1388}, {"id": 6709355, "category_id": 46, "iscrowd": 0, "bbox": [318, 246, 15, 22], "area": 248}, {"id": 9742804, "category_id": 62, "iscrowd": 0, "bbox": [378, 172, 82, 67], "area": 2570}, {"id": 10994930, "category_id": 62, "iscrowd": 0, "bbox": [272, 190, 28, 36], "area": 549}, {"id": 10534120, "category_id": 62, "iscrowd": 0, "bbox": [245, 158, 59, 32], "area": 1170}, {"id": 6248801, "category_id": 62, "iscrowd": 0, "bbox": [367, 207, 147, 121], "area": 1919}, {"id": 3353662, "category_id": 62, "iscrowd": 0, "bbox": [1, 234, 173, 194], "area": 10896}, {"id": 2366746, "category_id": 62, "iscrowd": 0, "bbox": [446, 361, 89, 69], "area": 1853}, {"id": 9807016, "category_id": 62, "iscrowd": 0, "bbox": [491, 159, 30, 39], "area": 646}, {"id": 8558017, "category_id": 62, "iscrowd": 0, "bbox": [212, 186, 63, 56], "area": 1012}, {"id": 5263976, "category_id": 62, "iscrowd": 0, "bbox": [148, 195, 131, 82], "area": 2075}, {"id": 4996667, "category_id": 62, "iscrowd": 0, "bbox": [433, 278, 31, 20], "area": 322}, {"id": 9216727, "category_id": 62, "iscrowd": 0, "bbox": [218, 165, 63, 52], "area": 1274}, {"id": 4272941, "category_id": 62, "iscrowd": 0, "bbox": [50, 390, 59, 33], "area": 1443}, {"id": 13162728, "category_id": 62, "iscrowd": 1, "bbox": [356, 140, 107, 67], "area": 2359}, {"id": 6729647, "category_id": 64, "iscrowd": 0, "bbox": [266, 124, 32, 54], "area": 1209}, {"id": 9023687, "category_id": 64, "iscrowd": 0, "bbox": [349, 150, 25, 55], "area": 662}, {"id": 10126961, "category_id": 67, "iscrowd": 0, "bbox": [225, 260, 158, 215], "area": 19935}, {"id": 8089956, "category_id": 85, "iscrowd": 0, "bbox": [494, 397, 14, 16], "area": 99}, {"id": 12896204, "category_id": 125, "iscrowd": 0, "bbox": [393, 160, 135, 127], "area": 3068}, {"id": 5798517, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 592, 199], "area": 78402}, {"id": 8299420, "category_id": 193, "iscrowd": 0, "bbox": [0, 130, 434, 350], "area": 13636}, {"id": 6513762, "category_id": 198, "iscrowd": 0, "bbox": [234, 431, 133, 49], "area": 5131}, {"id": 11386829, "category_id": 199, "iscrowd": 0, "bbox": [555, 0, 85, 263], "area": 15606}], "file_name": "000000238410.png", "image_id": 238410}, {"segments_info": [{"id": 10856359, "category_id": 60, "iscrowd": 0, "bbox": [283, 174, 99, 75], "area": 5124}, {"id": 9672085, "category_id": 60, "iscrowd": 0, "bbox": [465, 269, 107, 92], "area": 7503}, {"id": 13948373, "category_id": 60, "iscrowd": 0, "bbox": [115, 332, 123, 100], "area": 9661}, {"id": 13224650, "category_id": 60, "iscrowd": 0, "bbox": [33, 221, 127, 100], "area": 9586}, {"id": 10658980, "category_id": 60, "iscrowd": 0, "bbox": [337, 87, 87, 62], "area": 3585}, {"id": 10067100, "category_id": 60, "iscrowd": 0, "bbox": [347, 47, 75, 46], "area": 2611}, {"id": 10461601, "category_id": 60, "iscrowd": 0, "bbox": [276, 301, 124, 111], "area": 10512}, {"id": 10724773, "category_id": 60, "iscrowd": 0, "bbox": [131, 84, 95, 57], "area": 3577}, {"id": 10724771, "category_id": 60, "iscrowd": 0, "bbox": [194, 148, 98, 77], "area": 5231}, {"id": 10001050, "category_id": 60, "iscrowd": 0, "bbox": [381, 138, 100, 64], "area": 4381}, {"id": 9869464, "category_id": 60, "iscrowd": 0, "bbox": [142, 196, 104, 86], "area": 6823}, {"id": 10790566, "category_id": 60, "iscrowd": 0, "bbox": [217, 102, 92, 63], "area": 4059}, {"id": 10658974, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 439], "area": 60399}, {"id": 10395807, "category_id": 196, "iscrowd": 0, "bbox": [49, 20, 548, 419], "area": 91869}, {"id": 14869218, "category_id": 199, "iscrowd": 0, "bbox": [399, 0, 241, 64], "area": 7816}], "file_name": "000000238866.png", "image_id": 238866}, {"segments_info": [{"id": 3554629, "category_id": 44, "iscrowd": 0, "bbox": [31, 280, 29, 62], "area": 965}, {"id": 15978191, "category_id": 72, "iscrowd": 0, "bbox": [270, 206, 88, 63], "area": 4672}, {"id": 4150883, "category_id": 81, "iscrowd": 0, "bbox": [0, 295, 87, 127], "area": 6345}, {"id": 5729146, "category_id": 89, "iscrowd": 0, "bbox": [61, 191, 48, 53], "area": 1260}, {"id": 2505293, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 40, 21], "area": 641}, {"id": 4412251, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 485, 340], "area": 97767}, {"id": 6321799, "category_id": 168, "iscrowd": 0, "bbox": [101, 386, 97, 41], "area": 2851}, {"id": 5071986, "category_id": 176, "iscrowd": 0, "bbox": [143, 329, 407, 98], "area": 26499}, {"id": 3159627, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 126902}], "file_name": "000000239041.png", "image_id": 239041}, {"segments_info": [{"id": 5002597, "category_id": 1, "iscrowd": 0, "bbox": [268, 384, 15, 31], "area": 329}, {"id": 4805992, "category_id": 1, "iscrowd": 0, "bbox": [560, 442, 20, 43], "area": 472}, {"id": 8297628, "category_id": 1, "iscrowd": 0, "bbox": [316, 388, 22, 39], "area": 491}, {"id": 9078926, "category_id": 1, "iscrowd": 0, "bbox": [281, 384, 18, 45], "area": 449}, {"id": 5525068, "category_id": 1, "iscrowd": 0, "bbox": [336, 360, 12, 27], "area": 173}, {"id": 5068392, "category_id": 1, "iscrowd": 0, "bbox": [128, 285, 5, 8], "area": 28}, {"id": 8228267, "category_id": 1, "iscrowd": 0, "bbox": [354, 390, 18, 23], "area": 240}, {"id": 8023125, "category_id": 1, "iscrowd": 0, "bbox": [324, 367, 11, 26], "area": 179}, {"id": 4212043, "category_id": 1, "iscrowd": 0, "bbox": [301, 350, 10, 33], "area": 159}, {"id": 1909808, "category_id": 1, "iscrowd": 0, "bbox": [525, 461, 21, 31], "area": 436}, {"id": 5803181, "category_id": 1, "iscrowd": 0, "bbox": [557, 431, 12, 35], "area": 249}, {"id": 4078396, "category_id": 1, "iscrowd": 0, "bbox": [296, 364, 12, 37], "area": 301}, {"id": 5328994, "category_id": 1, "iscrowd": 0, "bbox": [343, 363, 14, 35], "area": 306}, {"id": 8884626, "category_id": 9, "iscrowd": 0, "bbox": [69, 184, 336, 332], "area": 53069}, {"id": 6188619, "category_id": 155, "iscrowd": 0, "bbox": [0, 175, 581, 465], "area": 140584}, {"id": 11970954, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 581, 176], "area": 72399}, {"id": 4015426, "category_id": 192, "iscrowd": 0, "bbox": [13, 107, 568, 122], "area": 53031}, {"id": 7181736, "category_id": 198, "iscrowd": 0, "bbox": [72, 463, 509, 177], "area": 48626}], "file_name": "000000239274.png", "image_id": 239274}, {"segments_info": [{"id": 472647, "category_id": 62, "iscrowd": 0, "bbox": [310, 19, 65, 228], "area": 2825}, {"id": 727058, "category_id": 73, "iscrowd": 0, "bbox": [40, 14, 314, 398], "area": 62570}, {"id": 1982262, "category_id": 76, "iscrowd": 0, "bbox": [52, 318, 281, 137], "area": 31014}, {"id": 2047793, "category_id": 76, "iscrowd": 0, "bbox": [75, 236, 248, 88], "area": 18851}, {"id": 1720383, "category_id": 200, "iscrowd": 0, "bbox": [0, 110, 79, 390], "area": 9610}], "file_name": "000000239318.png", "image_id": 239318}, {"segments_info": [{"id": 11122377, "category_id": 1, "iscrowd": 0, "bbox": [206, 157, 324, 135], "area": 15467}, {"id": 5662588, "category_id": 1, "iscrowd": 0, "bbox": [305, 136, 115, 116], "area": 6109}, {"id": 12501708, "category_id": 32, "iscrowd": 0, "bbox": [334, 201, 21, 25], "area": 258}, {"id": 8160395, "category_id": 65, "iscrowd": 0, "bbox": [124, 119, 406, 199], "area": 42392}, {"id": 2572106, "category_id": 184, "iscrowd": 0, "bbox": [178, 391, 342, 89], "area": 26905}, {"id": 4017754, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 140034}, {"id": 11513774, "category_id": 199, "iscrowd": 0, "bbox": [126, 52, 403, 177], "area": 31286}], "file_name": "000000239347.png", "image_id": 239347}, {"segments_info": [{"id": 11579317, "category_id": 1, "iscrowd": 0, "bbox": [264, 25, 258, 381], "area": 35204}, {"id": 7597777, "category_id": 37, "iscrowd": 0, "bbox": [210, 259, 20, 16], "area": 251}, {"id": 8686213, "category_id": 43, "iscrowd": 0, "bbox": [275, 224, 44, 88], "area": 896}, {"id": 6395785, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 436], "area": 242254}], "file_name": "000000239537.png", "image_id": 239537}, {"segments_info": [{"id": 2766420, "category_id": 44, "iscrowd": 0, "bbox": [390, 0, 74, 112], "area": 6139}, {"id": 1914919, "category_id": 44, "iscrowd": 0, "bbox": [465, 1, 89, 106], "area": 5105}, {"id": 4928671, "category_id": 47, "iscrowd": 0, "bbox": [329, 279, 57, 59], "area": 2355}, {"id": 6796401, "category_id": 47, "iscrowd": 0, "bbox": [359, 329, 108, 64], "area": 5359}, {"id": 5330777, "category_id": 50, "iscrowd": 0, "bbox": [426, 173, 75, 76], "area": 950}, {"id": 3290163, "category_id": 50, "iscrowd": 0, "bbox": [343, 208, 60, 59], "area": 815}, {"id": 8750469, "category_id": 50, "iscrowd": 0, "bbox": [456, 289, 84, 75], "area": 1228}, {"id": 7830907, "category_id": 51, "iscrowd": 0, "bbox": [411, 198, 69, 62], "area": 2442}, {"id": 6053472, "category_id": 51, "iscrowd": 0, "bbox": [333, 212, 62, 68], "area": 2708}, {"id": 8423810, "category_id": 51, "iscrowd": 0, "bbox": [442, 270, 68, 69], "area": 2865}, {"id": 9803156, "category_id": 81, "iscrowd": 0, "bbox": [0, 49, 615, 373], "area": 171802}, {"id": 5399924, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 56842}], "file_name": "000000239627.png", "image_id": 239627}, {"segments_info": [{"id": 4930627, "category_id": 1, "iscrowd": 0, "bbox": [393, 135, 109, 153], "area": 9165}, {"id": 4341831, "category_id": 1, "iscrowd": 0, "bbox": [0, 76, 554, 557], "area": 195647}, {"id": 13271762, "category_id": 1, "iscrowd": 0, "bbox": [382, 97, 39, 53], "area": 1178}, {"id": 8807275, "category_id": 1, "iscrowd": 0, "bbox": [324, 126, 218, 203], "area": 6771}, {"id": 14119797, "category_id": 1, "iscrowd": 0, "bbox": [367, 97, 25, 65], "area": 964}, {"id": 6437680, "category_id": 1, "iscrowd": 0, "bbox": [454, 60, 64, 115], "area": 4017}, {"id": 7363939, "category_id": 1, "iscrowd": 0, "bbox": [219, 177, 49, 78], "area": 2325}, {"id": 4403814, "category_id": 1, "iscrowd": 0, "bbox": [498, 55, 55, 220], "area": 8500}, {"id": 9401486, "category_id": 44, "iscrowd": 0, "bbox": [305, 196, 27, 57], "area": 772}, {"id": 7094632, "category_id": 112, "iscrowd": 0, "bbox": [315, 70, 54, 102], "area": 2400}, {"id": 11108759, "category_id": 171, "iscrowd": 0, "bbox": [106, 0, 297, 142], "area": 27144}, {"id": 16711164, "category_id": 181, "iscrowd": 0, "bbox": [0, 29, 69, 183], "area": 5559}, {"id": 7169639, "category_id": 189, "iscrowd": 0, "bbox": [0, 412, 113, 74], "area": 2469}, {"id": 6846607, "category_id": 196, "iscrowd": 0, "bbox": [0, 468, 417, 172], "area": 1611}, {"id": 10712228, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 554, 397], "area": 45816}], "file_name": "000000239717.png", "image_id": 239717}, {"segments_info": [{"id": 2701376, "category_id": 1, "iscrowd": 0, "bbox": [414, 140, 85, 199], "area": 8048}, {"id": 8420220, "category_id": 1, "iscrowd": 0, "bbox": [100, 64, 201, 276], "area": 24391}, {"id": 10210020, "category_id": 37, "iscrowd": 0, "bbox": [91, 172, 17, 16], "area": 224}, {"id": 3753561, "category_id": 39, "iscrowd": 0, "bbox": [159, 4, 134, 164], "area": 1924}, {"id": 2836576, "category_id": 40, "iscrowd": 0, "bbox": [407, 244, 55, 56], "area": 2239}, {"id": 9604496, "category_id": 40, "iscrowd": 0, "bbox": [245, 122, 50, 53], "area": 1332}, {"id": 3048388, "category_id": 190, "iscrowd": 0, "bbox": [0, 158, 485, 50], "area": 11679}, {"id": 2529143, "category_id": 193, "iscrowd": 0, "bbox": [0, 117, 500, 227], "area": 65263}], "file_name": "000000239773.png", "image_id": 239773}, {"segments_info": [{"id": 5791408, "category_id": 13, "iscrowd": 0, "bbox": [201, 156, 80, 215], "area": 12418}, {"id": 6914406, "category_id": 184, "iscrowd": 0, "bbox": [279, 200, 221, 175], "area": 21726}, {"id": 14855549, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 127879}], "file_name": "000000239843.png", "image_id": 239843}, {"segments_info": [{"id": 2039587, "category_id": 1, "iscrowd": 0, "bbox": [70, 135, 27, 40], "area": 760}, {"id": 2302498, "category_id": 1, "iscrowd": 0, "bbox": [8, 128, 37, 96], "area": 1977}, {"id": 1711391, "category_id": 1, "iscrowd": 0, "bbox": [293, 122, 70, 151], "area": 4910}, {"id": 2957342, "category_id": 1, "iscrowd": 0, "bbox": [28, 126, 28, 45], "area": 786}, {"id": 4500873, "category_id": 34, "iscrowd": 0, "bbox": [275, 142, 27, 17], "area": 216}, {"id": 2236963, "category_id": 62, "iscrowd": 0, "bbox": [81, 175, 27, 37], "area": 717}, {"id": 1644412, "category_id": 62, "iscrowd": 0, "bbox": [194, 176, 27, 34], "area": 619}, {"id": 2038115, "category_id": 62, "iscrowd": 0, "bbox": [108, 176, 29, 36], "area": 643}, {"id": 1775975, "category_id": 62, "iscrowd": 0, "bbox": [134, 177, 28, 33], "area": 554}, {"id": 3420484, "category_id": 62, "iscrowd": 0, "bbox": [194, 168, 21, 6], "area": 102}, {"id": 2236240, "category_id": 62, "iscrowd": 0, "bbox": [53, 175, 30, 35], "area": 501}, {"id": 2039147, "category_id": 62, "iscrowd": 0, "bbox": [222, 175, 30, 34], "area": 648}, {"id": 3355445, "category_id": 62, "iscrowd": 0, "bbox": [248, 171, 17, 37], "area": 231}, {"id": 2696500, "category_id": 62, "iscrowd": 0, "bbox": [227, 169, 23, 10], "area": 151}, {"id": 1644164, "category_id": 62, "iscrowd": 0, "bbox": [168, 176, 26, 34], "area": 545}, {"id": 2367800, "category_id": 62, "iscrowd": 0, "bbox": [134, 170, 19, 4], "area": 44}, {"id": 2696770, "category_id": 62, "iscrowd": 0, "bbox": [165, 166, 22, 38], "area": 190}, {"id": 2368809, "category_id": 62, "iscrowd": 0, "bbox": [29, 169, 26, 43], "area": 594}, {"id": 4802639, "category_id": 62, "iscrowd": 1, "bbox": [105, 170, 24, 9], "area": 83}, {"id": 7235954, "category_id": 67, "iscrowd": 0, "bbox": [97, 172, 133, 5], "area": 375}, {"id": 10132379, "category_id": 154, "iscrowd": 0, "bbox": [0, 176, 500, 157], "area": 66168}, {"id": 7039338, "category_id": 166, "iscrowd": 0, "bbox": [0, 38, 500, 161], "area": 29888}, {"id": 4607575, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 500, 176], "area": 53560}], "file_name": "000000239857.png", "image_id": 239857}, {"segments_info": [{"id": 7109804, "category_id": 1, "iscrowd": 0, "bbox": [262, 0, 93, 32], "area": 2011}, {"id": 4213614, "category_id": 1, "iscrowd": 0, "bbox": [387, 1, 93, 50], "area": 2440}, {"id": 8352384, "category_id": 1, "iscrowd": 0, "bbox": [214, 142, 190, 498], "area": 58796}, {"id": 3298949, "category_id": 1, "iscrowd": 0, "bbox": [159, 0, 76, 30], "area": 1458}, {"id": 3360658, "category_id": 1, "iscrowd": 0, "bbox": [68, 0, 74, 26], "area": 1395}, {"id": 2368582, "category_id": 1, "iscrowd": 0, "bbox": [131, 0, 36, 25], "area": 519}, {"id": 5034696, "category_id": 37, "iscrowd": 0, "bbox": [178, 557, 26, 28], "area": 570}, {"id": 6719120, "category_id": 43, "iscrowd": 0, "bbox": [147, 409, 165, 56], "area": 4703}, {"id": 2893356, "category_id": 62, "iscrowd": 0, "bbox": [401, 96, 79, 120], "area": 4496}, {"id": 6194556, "category_id": 190, "iscrowd": 0, "bbox": [0, 228, 480, 204], "area": 61350}], "file_name": "000000240023.png", "image_id": 240023}, {"segments_info": [{"id": 2958368, "category_id": 1, "iscrowd": 0, "bbox": [188, 174, 238, 457], "area": 56326}, {"id": 11703998, "category_id": 1, "iscrowd": 0, "bbox": [178, 187, 121, 338], "area": 19096}, {"id": 6975362, "category_id": 25, "iscrowd": 0, "bbox": [356, 102, 70, 108], "area": 4454}, {"id": 7831183, "category_id": 25, "iscrowd": 0, "bbox": [26, 140, 274, 258], "area": 18674}, {"id": 12564399, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 426, 130], "area": 6395}, {"id": 6975342, "category_id": 185, "iscrowd": 0, "bbox": [0, 127, 426, 513], "area": 73793}, {"id": 16579835, "category_id": 187, "iscrowd": 0, "bbox": [161, 0, 265, 58], "area": 10230}, {"id": 8167066, "category_id": 193, "iscrowd": 0, "bbox": [0, 218, 114, 94], "area": 7329}, {"id": 8293777, "category_id": 194, "iscrowd": 0, "bbox": [0, 220, 426, 189], "area": 11867}, {"id": 11052188, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 393, 205], "area": 47432}, {"id": 8817551, "category_id": 199, "iscrowd": 0, "bbox": [0, 371, 426, 95], "area": 13361}], "file_name": "000000240049.png", "image_id": 240049}, {"segments_info": [{"id": 1319233, "category_id": 1, "iscrowd": 0, "bbox": [123, 64, 48, 107], "area": 1960}, {"id": 4736074, "category_id": 1, "iscrowd": 0, "bbox": [260, 103, 222, 119], "area": 2978}, {"id": 5599362, "category_id": 1, "iscrowd": 0, "bbox": [200, 8, 311, 380], "area": 65878}, {"id": 2369573, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 63, 323], "area": 8658}, {"id": 1121327, "category_id": 1, "iscrowd": 0, "bbox": [90, 69, 51, 58], "area": 1311}, {"id": 526875, "category_id": 1, "iscrowd": 0, "bbox": [38, 14, 79, 186], "area": 3726}, {"id": 860502, "category_id": 1, "iscrowd": 0, "bbox": [135, 45, 31, 34], "area": 583}, {"id": 928117, "category_id": 1, "iscrowd": 0, "bbox": [165, 51, 35, 42], "area": 950}, {"id": 1055531, "category_id": 1, "iscrowd": 0, "bbox": [157, 79, 61, 74], "area": 2510}, {"id": 2698033, "category_id": 47, "iscrowd": 0, "bbox": [560, 307, 52, 155], "area": 6911}, {"id": 8159611, "category_id": 48, "iscrowd": 0, "bbox": [320, 327, 75, 22], "area": 468}, {"id": 3753552, "category_id": 49, "iscrowd": 0, "bbox": [244, 332, 76, 34], "area": 842}, {"id": 4760787, "category_id": 59, "iscrowd": 0, "bbox": [3, 457, 257, 147], "area": 21853}, {"id": 7393257, "category_id": 59, "iscrowd": 0, "bbox": [297, 416, 140, 168], "area": 15353}, {"id": 6272989, "category_id": 59, "iscrowd": 0, "bbox": [432, 425, 154, 108], "area": 10195}, {"id": 658708, "category_id": 62, "iscrowd": 0, "bbox": [158, 106, 70, 111], "area": 2030}, {"id": 988971, "category_id": 62, "iscrowd": 0, "bbox": [105, 109, 17, 21], "area": 180}, {"id": 461319, "category_id": 62, "iscrowd": 0, "bbox": [0, 151, 91, 206], "area": 8751}, {"id": 526859, "category_id": 62, "iscrowd": 0, "bbox": [79, 125, 84, 164], "area": 4401}, {"id": 2303276, "category_id": 62, "iscrowd": 0, "bbox": [251, 248, 272, 121], "area": 2123}, {"id": 1583951, "category_id": 67, "iscrowd": 0, "bbox": [131, 105, 31, 16], "area": 233}, {"id": 9805472, "category_id": 67, "iscrowd": 0, "bbox": [3, 355, 609, 246], "area": 88213}, {"id": 1981540, "category_id": 130, "iscrowd": 0, "bbox": [20, 0, 539, 49], "area": 2882}, {"id": 725546, "category_id": 175, "iscrowd": 0, "bbox": [194, 49, 84, 70], "area": 1819}, {"id": 727607, "category_id": 177, "iscrowd": 0, "bbox": [55, 0, 163, 110], "area": 2298}, {"id": 859448, "category_id": 184, "iscrowd": 0, "bbox": [361, 0, 251, 97], "area": 17139}, {"id": 3087645, "category_id": 185, "iscrowd": 0, "bbox": [410, 84, 202, 280], "area": 20746}, {"id": 3356731, "category_id": 189, "iscrowd": 0, "bbox": [158, 359, 454, 253], "area": 3276}, {"id": 857895, "category_id": 191, "iscrowd": 0, "bbox": [0, 58, 612, 392], "area": 45858}, {"id": 1787784, "category_id": 199, "iscrowd": 0, "bbox": [55, 0, 287, 82], "area": 13160}], "file_name": "000000240250.png", "image_id": 240250}, {"segments_info": [{"id": 12833506, "category_id": 21, "iscrowd": 0, "bbox": [470, 64, 169, 251], "area": 24391}, {"id": 2042421, "category_id": 21, "iscrowd": 0, "bbox": [204, 80, 260, 286], "area": 35370}, {"id": 3360350, "category_id": 21, "iscrowd": 0, "bbox": [23, 196, 166, 98], "area": 5999}, {"id": 3826319, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 256], "area": 49556}, {"id": 3758698, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 227], "area": 6904}], "file_name": "000000240754.png", "image_id": 240754}, {"segments_info": [{"id": 10658726, "category_id": 151, "iscrowd": 0, "bbox": [137, 0, 205, 249], "area": 14774}, {"id": 7369112, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 339, 375], "area": 100191}, {"id": 14142657, "category_id": 184, "iscrowd": 0, "bbox": [428, 206, 72, 113], "area": 4865}, {"id": 16645371, "category_id": 187, "iscrowd": 0, "bbox": [231, 0, 269, 316], "area": 44207}, {"id": 10787215, "category_id": 197, "iscrowd": 0, "bbox": [361, 146, 139, 229], "area": 13985}, {"id": 9736335, "category_id": 199, "iscrowd": 0, "bbox": [326, 243, 25, 132], "area": 1679}], "file_name": "000000240767.png", "image_id": 240767}, {"segments_info": [{"id": 12164210, "category_id": 3, "iscrowd": 0, "bbox": [187, 66, 12, 10], "area": 99}, {"id": 2897214, "category_id": 17, "iscrowd": 0, "bbox": [118, 307, 86, 187], "area": 8247}, {"id": 11574910, "category_id": 72, "iscrowd": 0, "bbox": [106, 3, 185, 138], "area": 24295}, {"id": 10459027, "category_id": 82, "iscrowd": 0, "bbox": [3, 1, 88, 295], "area": 22912}, {"id": 2496788, "category_id": 84, "iscrowd": 0, "bbox": [344, 0, 3, 20], "area": 31}, {"id": 4077373, "category_id": 84, "iscrowd": 0, "bbox": [339, 129, 18, 52], "area": 805}, {"id": 10457992, "category_id": 84, "iscrowd": 0, "bbox": [328, 32, 4, 32], "area": 64}, {"id": 2307383, "category_id": 84, "iscrowd": 0, "bbox": [351, 290, 6, 52], "area": 199}, {"id": 9205866, "category_id": 84, "iscrowd": 0, "bbox": [326, 72, 31, 47], "area": 1200}, {"id": 5064511, "category_id": 84, "iscrowd": 0, "bbox": [322, 182, 15, 45], "area": 487}, {"id": 5061436, "category_id": 84, "iscrowd": 0, "bbox": [349, 26, 8, 36], "area": 130}, {"id": 5992568, "category_id": 84, "iscrowd": 0, "bbox": [334, 129, 9, 47], "area": 250}, {"id": 9080972, "category_id": 84, "iscrowd": 0, "bbox": [336, 183, 8, 45], "area": 204}, {"id": 13029332, "category_id": 84, "iscrowd": 0, "bbox": [346, 184, 11, 47], "area": 451}, {"id": 9465703, "category_id": 84, "iscrowd": 0, "bbox": [352, 84, 5, 35], "area": 77}, {"id": 11566164, "category_id": 84, "iscrowd": 0, "bbox": [341, 180, 14, 50], "area": 251}, {"id": 3619653, "category_id": 156, "iscrowd": 0, "bbox": [297, 0, 60, 354], "area": 8722}, {"id": 3167910, "category_id": 188, "iscrowd": 0, "bbox": [63, 0, 241, 342], "area": 45112}, {"id": 2376276, "category_id": 190, "iscrowd": 0, "bbox": [0, 227, 89, 85], "area": 2706}, {"id": 6596027, "category_id": 195, "iscrowd": 0, "bbox": [0, 100, 4, 44], "area": 169}, {"id": 12043470, "category_id": 199, "iscrowd": 0, "bbox": [296, 0, 31, 307], "area": 6104}, {"id": 931679, "category_id": 200, "iscrowd": 0, "bbox": [0, 292, 357, 208], "area": 54494}], "file_name": "000000240940.png", "image_id": 240940}, {"segments_info": [{"id": 3045788, "category_id": 7, "iscrowd": 0, "bbox": [138, 136, 300, 249], "area": 51153}, {"id": 4549253, "category_id": 125, "iscrowd": 0, "bbox": [0, 252, 462, 176], "area": 20204}, {"id": 2571595, "category_id": 147, "iscrowd": 0, "bbox": [0, 236, 459, 192], "area": 16763}, {"id": 4549784, "category_id": 171, "iscrowd": 0, "bbox": [0, 152, 543, 89], "area": 8972}, {"id": 2512724, "category_id": 184, "iscrowd": 0, "bbox": [0, 15, 640, 398], "area": 89600}, {"id": 2512750, "category_id": 185, "iscrowd": 0, "bbox": [0, 221, 527, 59], "area": 4706}, {"id": 14475478, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 154], "area": 55595}, {"id": 4880527, "category_id": 193, "iscrowd": 0, "bbox": [357, 220, 283, 208], "area": 20596}, {"id": 5865891, "category_id": 197, "iscrowd": 0, "bbox": [444, 116, 16, 21], "area": 188}], "file_name": "000000241297.png", "image_id": 241297}, {"segments_info": [{"id": 1450296, "category_id": 31, "iscrowd": 0, "bbox": [0, 177, 134, 148], "area": 15092}, {"id": 4087618, "category_id": 44, "iscrowd": 0, "bbox": [105, 38, 38, 93], "area": 2475}, {"id": 3293276, "category_id": 47, "iscrowd": 0, "bbox": [107, 222, 69, 94], "area": 4130}, {"id": 7048091, "category_id": 47, "iscrowd": 0, "bbox": [511, 214, 77, 93], "area": 4879}, {"id": 6194064, "category_id": 47, "iscrowd": 0, "bbox": [470, 229, 41, 16], "area": 425}, {"id": 8762061, "category_id": 81, "iscrowd": 0, "bbox": [1, 319, 639, 71], "area": 39421}, {"id": 3743570, "category_id": 90, "iscrowd": 0, "bbox": [129, 103, 71, 204], "area": 3449}, {"id": 4927348, "category_id": 90, "iscrowd": 0, "bbox": [197, 152, 42, 87], "area": 796}, {"id": 8228765, "category_id": 90, "iscrowd": 0, "bbox": [457, 123, 114, 182], "area": 2722}, {"id": 8102317, "category_id": 90, "iscrowd": 0, "bbox": [429, 154, 56, 92], "area": 886}, {"id": 10600915, "category_id": 107, "iscrowd": 0, "bbox": [0, 235, 640, 241], "area": 84574}, {"id": 8368325, "category_id": 133, "iscrowd": 0, "bbox": [97, 0, 346, 259], "area": 69835}, {"id": 4745074, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 258], "area": 64398}], "file_name": "000000241319.png", "image_id": 241319}, {"segments_info": [{"id": 5724005, "category_id": 17, "iscrowd": 0, "bbox": [26, 83, 153, 149], "area": 16671}, {"id": 2897215, "category_id": 18, "iscrowd": 0, "bbox": [302, 189, 166, 170], "area": 10990}, {"id": 8093846, "category_id": 63, "iscrowd": 0, "bbox": [0, 1, 364, 370], "area": 88796}, {"id": 10926020, "category_id": 112, "iscrowd": 0, "bbox": [80, 0, 90, 37], "area": 2710}, {"id": 3636392, "category_id": 189, "iscrowd": 0, "bbox": [396, 135, 104, 107], "area": 5611}, {"id": 7266528, "category_id": 199, "iscrowd": 0, "bbox": [226, 0, 274, 141], "area": 27964}, {"id": 11322058, "category_id": 200, "iscrowd": 0, "bbox": [289, 101, 211, 274], "area": 24954}], "file_name": "000000241326.png", "image_id": 241326}, {"segments_info": [{"id": 4744584, "category_id": 44, "iscrowd": 0, "bbox": [546, 224, 6, 30], "area": 158}, {"id": 5925508, "category_id": 44, "iscrowd": 0, "bbox": [539, 224, 9, 29], "area": 164}, {"id": 3306113, "category_id": 64, "iscrowd": 0, "bbox": [197, 180, 25, 48], "area": 371}, {"id": 7579584, "category_id": 70, "iscrowd": 0, "bbox": [180, 265, 53, 87], "area": 3707}, {"id": 13030875, "category_id": 81, "iscrowd": 0, "bbox": [454, 246, 64, 12], "area": 565}, {"id": 13028045, "category_id": 81, "iscrowd": 0, "bbox": [457, 252, 126, 13], "area": 933}, {"id": 1781064, "category_id": 86, "iscrowd": 0, "bbox": [207, 203, 12, 25], "area": 228}, {"id": 5213358, "category_id": 112, "iscrowd": 0, "bbox": [65, 49, 43, 324], "area": 10928}, {"id": 2108479, "category_id": 118, "iscrowd": 0, "bbox": [66, 361, 38, 30], "area": 433}, {"id": 3557720, "category_id": 133, "iscrowd": 0, "bbox": [502, 54, 75, 164], "area": 9800}, {"id": 4687018, "category_id": 177, "iscrowd": 0, "bbox": [0, 216, 442, 211], "area": 18562}, {"id": 6260377, "category_id": 186, "iscrowd": 0, "bbox": [168, 0, 326, 21], "area": 5681}, {"id": 7839160, "category_id": 188, "iscrowd": 0, "bbox": [424, 208, 175, 219], "area": 27124}, {"id": 6399949, "category_id": 190, "iscrowd": 0, "bbox": [22, 319, 464, 108], "area": 30634}, {"id": 9021109, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 160176}], "file_name": "000000241602.png", "image_id": 241602}, {"segments_info": [{"id": 2307936, "category_id": 1, "iscrowd": 0, "bbox": [229, 88, 158, 544], "area": 43983}, {"id": 8167111, "category_id": 1, "iscrowd": 0, "bbox": [0, 28, 313, 601], "area": 120339}, {"id": 526881, "category_id": 32, "iscrowd": 0, "bbox": [263, 282, 52, 325], "area": 2359}, {"id": 3955319, "category_id": 61, "iscrowd": 0, "bbox": [291, 432, 66, 46], "area": 2037}, {"id": 1126506, "category_id": 62, "iscrowd": 0, "bbox": [27, 431, 31, 117], "area": 2685}, {"id": 333892, "category_id": 107, "iscrowd": 0, "bbox": [330, 487, 130, 120], "area": 8101}, {"id": 4284801, "category_id": 177, "iscrowd": 0, "bbox": [0, 339, 42, 265], "area": 7551}, {"id": 5011080, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 460, 530], "area": 86059}, {"id": 794159, "category_id": 200, "iscrowd": 0, "bbox": [407, 575, 53, 33], "area": 1206}], "file_name": "000000241668.png", "image_id": 241668}, {"segments_info": [{"id": 6319482, "category_id": 1, "iscrowd": 0, "bbox": [455, 285, 29, 27], "area": 416}, {"id": 5258043, "category_id": 1, "iscrowd": 0, "bbox": [362, 293, 24, 27], "area": 355}, {"id": 4145274, "category_id": 1, "iscrowd": 0, "bbox": [494, 270, 17, 27], "area": 296}, {"id": 6712182, "category_id": 19, "iscrowd": 0, "bbox": [383, 171, 27, 55], "area": 742}, {"id": 5527919, "category_id": 19, "iscrowd": 0, "bbox": [296, 309, 51, 75], "area": 1702}, {"id": 6054769, "category_id": 19, "iscrowd": 0, "bbox": [347, 321, 74, 67], "area": 2250}, {"id": 5856363, "category_id": 19, "iscrowd": 0, "bbox": [547, 342, 39, 95], "area": 2612}, {"id": 5660274, "category_id": 19, "iscrowd": 0, "bbox": [354, 185, 29, 55], "area": 739}, {"id": 7303292, "category_id": 19, "iscrowd": 0, "bbox": [303, 244, 39, 69], "area": 950}, {"id": 3750211, "category_id": 19, "iscrowd": 0, "bbox": [481, 321, 63, 88], "area": 2525}, {"id": 6909297, "category_id": 19, "iscrowd": 0, "bbox": [1, 185, 38, 42], "area": 919}, {"id": 6646654, "category_id": 19, "iscrowd": 0, "bbox": [317, 203, 33, 53], "area": 736}, {"id": 6316905, "category_id": 19, "iscrowd": 0, "bbox": [218, 173, 68, 48], "area": 1561}, {"id": 4804190, "category_id": 19, "iscrowd": 0, "bbox": [443, 332, 45, 91], "area": 2364}, {"id": 4934486, "category_id": 19, "iscrowd": 0, "bbox": [321, 281, 28, 43], "area": 823}, {"id": 6053214, "category_id": 19, "iscrowd": 0, "bbox": [131, 177, 79, 45], "area": 1842}, {"id": 6381393, "category_id": 95, "iscrowd": 0, "bbox": [0, 84, 435, 158], "area": 14698}, {"id": 7631213, "category_id": 128, "iscrowd": 0, "bbox": [591, 138, 49, 140], "area": 4448}, {"id": 15393237, "category_id": 148, "iscrowd": 0, "bbox": [0, 380, 167, 100], "area": 2645}, {"id": 5593686, "category_id": 161, "iscrowd": 0, "bbox": [301, 265, 17, 24], "area": 66}, {"id": 5861780, "category_id": 171, "iscrowd": 0, "bbox": [505, 277, 13, 17], "area": 96}, {"id": 6515030, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 414], "area": 171672}, {"id": 16645626, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 25, 40], "area": 635}, {"id": 6778746, "category_id": 190, "iscrowd": 0, "bbox": [305, 359, 23, 23], "area": 132}, {"id": 10198947, "category_id": 194, "iscrowd": 0, "bbox": [18, 266, 622, 214], "area": 58618}, {"id": 7303799, "category_id": 197, "iscrowd": 0, "bbox": [250, 177, 221, 212], "area": 14107}, {"id": 9933712, "category_id": 198, "iscrowd": 0, "bbox": [0, 338, 114, 108], "area": 8729}], "file_name": "000000241677.png", "image_id": 241677}, {"segments_info": [{"id": 9028530, "category_id": 47, "iscrowd": 0, "bbox": [237, 0, 66, 109], "area": 2904}, {"id": 6268823, "category_id": 47, "iscrowd": 0, "bbox": [205, 47, 79, 143], "area": 9260}, {"id": 10334877, "category_id": 47, "iscrowd": 0, "bbox": [288, 18, 71, 127], "area": 7161}, {"id": 10070191, "category_id": 50, "iscrowd": 0, "bbox": [0, 218, 212, 93], "area": 2697}, {"id": 11253691, "category_id": 50, "iscrowd": 0, "bbox": [7, 237, 241, 33], "area": 2084}, {"id": 5735579, "category_id": 50, "iscrowd": 0, "bbox": [123, 243, 45, 15], "area": 254}, {"id": 9084325, "category_id": 50, "iscrowd": 0, "bbox": [18, 245, 230, 35], "area": 2420}, {"id": 3303575, "category_id": 61, "iscrowd": 0, "bbox": [426, 191, 79, 88], "area": 4608}, {"id": 3237525, "category_id": 61, "iscrowd": 0, "bbox": [441, 249, 85, 95], "area": 6411}, {"id": 3237264, "category_id": 61, "iscrowd": 0, "bbox": [345, 227, 86, 92], "area": 6517}, {"id": 3696790, "category_id": 61, "iscrowd": 0, "bbox": [327, 146, 290, 168], "area": 22276}, {"id": 10791599, "category_id": 67, "iscrowd": 0, "bbox": [2, 2, 638, 451], "area": 94295}, {"id": 6932445, "category_id": 122, "iscrowd": 0, "bbox": [421, 13, 127, 64], "area": 5293}, {"id": 4804951, "category_id": 168, "iscrowd": 0, "bbox": [605, 437, 35, 22], "area": 505}, {"id": 5873029, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 444], "area": 13252}, {"id": 11120820, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 459], "area": 7162}], "file_name": "000000242060.png", "image_id": 242060}, {"segments_info": [{"id": 6118494, "category_id": 2, "iscrowd": 0, "bbox": [19, 383, 315, 244], "area": 42067}, {"id": 7109775, "category_id": 100, "iscrowd": 0, "bbox": [0, 355, 67, 159], "area": 5203}, {"id": 7175565, "category_id": 112, "iscrowd": 0, "bbox": [87, 0, 267, 623], "area": 103986}, {"id": 10132641, "category_id": 171, "iscrowd": 0, "bbox": [320, 0, 106, 612], "area": 42870}, {"id": 3756391, "category_id": 177, "iscrowd": 0, "bbox": [0, 29, 122, 550], "area": 12704}, {"id": 10130579, "category_id": 191, "iscrowd": 0, "bbox": [0, 559, 426, 81], "area": 17323}, {"id": 7443374, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 126, 411], "area": 25232}], "file_name": "000000242287.png", "image_id": 242287}, {"segments_info": [{"id": 3819096, "category_id": 1, "iscrowd": 0, "bbox": [237, 588, 61, 52], "area": 2117}, {"id": 12891042, "category_id": 3, "iscrowd": 0, "bbox": [91, 608, 73, 32], "area": 1779}, {"id": 13217172, "category_id": 3, "iscrowd": 0, "bbox": [287, 599, 137, 41], "area": 4287}, {"id": 15986928, "category_id": 3, "iscrowd": 0, "bbox": [126, 624, 116, 16], "area": 836}, {"id": 7893611, "category_id": 8, "iscrowd": 0, "bbox": [8, 570, 94, 70], "area": 5008}, {"id": 7961979, "category_id": 8, "iscrowd": 0, "bbox": [160, 522, 177, 111], "area": 15049}, {"id": 5264777, "category_id": 10, "iscrowd": 0, "bbox": [77, 565, 10, 7], "area": 53}, {"id": 5658210, "category_id": 10, "iscrowd": 0, "bbox": [32, 500, 12, 25], "area": 274}, {"id": 9076596, "category_id": 85, "iscrowd": 0, "bbox": [105, 247, 10, 60], "area": 440}, {"id": 8157812, "category_id": 85, "iscrowd": 0, "bbox": [146, 239, 71, 69], "area": 3776}, {"id": 16313829, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 424, 415], "area": 112413}, {"id": 8946817, "category_id": 197, "iscrowd": 0, "bbox": [0, 111, 424, 512], "area": 115152}], "file_name": "000000242411.png", "image_id": 242411}, {"segments_info": [{"id": 6974841, "category_id": 1, "iscrowd": 0, "bbox": [352, 163, 61, 64], "area": 1120}, {"id": 1974574, "category_id": 19, "iscrowd": 0, "bbox": [320, 184, 118, 131], "area": 5155}, {"id": 5334928, "category_id": 92, "iscrowd": 0, "bbox": [196, 173, 369, 47], "area": 1750}, {"id": 3692899, "category_id": 119, "iscrowd": 0, "bbox": [67, 266, 546, 76], "area": 4103}, {"id": 9223652, "category_id": 154, "iscrowd": 0, "bbox": [0, 251, 640, 230], "area": 105676}, {"id": 6254466, "category_id": 171, "iscrowd": 0, "bbox": [421, 210, 176, 79], "area": 2694}, {"id": 2569261, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 232], "area": 96929}, {"id": 9872816, "category_id": 185, "iscrowd": 0, "bbox": [0, 198, 640, 182], "area": 13350}, {"id": 14870501, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 440, 67], "area": 10802}, {"id": 4225903, "category_id": 193, "iscrowd": 0, "bbox": [0, 152, 640, 118], "area": 5577}], "file_name": "000000242678.png", "image_id": 242678}, {"segments_info": [{"id": 6780830, "category_id": 1, "iscrowd": 0, "bbox": [331, 121, 72, 198], "area": 7918}, {"id": 7242668, "category_id": 1, "iscrowd": 0, "bbox": [106, 99, 115, 223], "area": 9711}, {"id": 8357254, "category_id": 19, "iscrowd": 0, "bbox": [82, 142, 228, 194], "area": 20105}, {"id": 3291463, "category_id": 19, "iscrowd": 0, "bbox": [250, 176, 274, 150], "area": 16860}, {"id": 12108492, "category_id": 154, "iscrowd": 0, "bbox": [0, 197, 469, 54], "area": 5848}, {"id": 8363140, "category_id": 155, "iscrowd": 0, "bbox": [0, 213, 640, 267], "area": 122721}, {"id": 13544350, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 220], "area": 98461}, {"id": 5267032, "category_id": 192, "iscrowd": 0, "bbox": [0, 142, 640, 89], "area": 24715}], "file_name": "000000242724.png", "image_id": 242724}, {"segments_info": [{"id": 1647641, "category_id": 62, "iscrowd": 0, "bbox": [50, 97, 87, 98], "area": 6029}, {"id": 668738, "category_id": 62, "iscrowd": 0, "bbox": [33, 157, 36, 52], "area": 1243}, {"id": 1053205, "category_id": 63, "iscrowd": 0, "bbox": [147, 98, 267, 98], "area": 18512}, {"id": 1781052, "category_id": 67, "iscrowd": 0, "bbox": [394, 98, 40, 41], "area": 384}, {"id": 3369853, "category_id": 72, "iscrowd": 0, "bbox": [29, 1, 19, 137], "area": 2021}, {"id": 2238514, "category_id": 84, "iscrowd": 0, "bbox": [277, 72, 7, 11], "area": 76}, {"id": 4211522, "category_id": 84, "iscrowd": 0, "bbox": [316, 76, 2, 9], "area": 17}, {"id": 7160341, "category_id": 84, "iscrowd": 0, "bbox": [310, 76, 3, 8], "area": 16}, {"id": 6909295, "category_id": 84, "iscrowd": 0, "bbox": [284, 88, 2, 6], "area": 12}, {"id": 8552577, "category_id": 84, "iscrowd": 0, "bbox": [297, 77, 2, 7], "area": 11}, {"id": 3817797, "category_id": 84, "iscrowd": 0, "bbox": [284, 76, 13, 8], "area": 104}, {"id": 3622721, "category_id": 84, "iscrowd": 0, "bbox": [282, 87, 3, 7], "area": 13}, {"id": 4476244, "category_id": 84, "iscrowd": 0, "bbox": [279, 60, 40, 10], "area": 319}, {"id": 7369076, "category_id": 84, "iscrowd": 0, "bbox": [302, 76, 3, 9], "area": 23}, {"id": 3103347, "category_id": 84, "iscrowd": 0, "bbox": [305, 77, 4, 8], "area": 23}, {"id": 4474199, "category_id": 84, "iscrowd": 0, "bbox": [298, 76, 4, 8], "area": 26}, {"id": 2961457, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 451, 156], "area": 5585}, {"id": 11317682, "category_id": 112, "iscrowd": 0, "bbox": [78, 22, 66, 125], "area": 5005}, {"id": 599105, "category_id": 118, "iscrowd": 0, "bbox": [44, 116, 413, 111], "area": 6792}, {"id": 5269616, "category_id": 130, "iscrowd": 0, "bbox": [41, 44, 459, 115], "area": 2966}, {"id": 5270919, "category_id": 133, "iscrowd": 0, "bbox": [221, 56, 22, 25], "area": 415}, {"id": 3883333, "category_id": 156, "iscrowd": 0, "bbox": [263, 41, 61, 66], "area": 1450}, {"id": 4740445, "category_id": 181, "iscrowd": 0, "bbox": [396, 54, 48, 48], "area": 1306}, {"id": 7438216, "category_id": 186, "iscrowd": 0, "bbox": [32, 0, 457, 60], "area": 10090}, {"id": 3951691, "category_id": 188, "iscrowd": 0, "bbox": [0, 149, 489, 78], "area": 4688}, {"id": 1251357, "category_id": 189, "iscrowd": 0, "bbox": [208, 160, 145, 67], "area": 6724}, {"id": 7965589, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 168], "area": 26501}, {"id": 1776924, "category_id": 200, "iscrowd": 0, "bbox": [106, 174, 310, 53], "area": 7078}], "file_name": "000000242934.png", "image_id": 242934}, {"segments_info": [{"id": 3091771, "category_id": 1, "iscrowd": 0, "bbox": [415, 26, 60, 73], "area": 2861}, {"id": 4210250, "category_id": 1, "iscrowd": 0, "bbox": [407, 1, 233, 238], "area": 26866}, {"id": 6382201, "category_id": 1, "iscrowd": 0, "bbox": [207, 0, 152, 175], "area": 16484}, {"id": 4677221, "category_id": 1, "iscrowd": 0, "bbox": [510, 16, 41, 84], "area": 1213}, {"id": 5396331, "category_id": 1, "iscrowd": 0, "bbox": [9, 0, 166, 203], "area": 23178}, {"id": 5726586, "category_id": 47, "iscrowd": 0, "bbox": [297, 225, 48, 54], "area": 2221}, {"id": 10262421, "category_id": 47, "iscrowd": 0, "bbox": [235, 166, 35, 49], "area": 1544}, {"id": 9078660, "category_id": 47, "iscrowd": 0, "bbox": [219, 171, 19, 32], "area": 431}, {"id": 10460053, "category_id": 47, "iscrowd": 0, "bbox": [468, 80, 13, 23], "area": 247}, {"id": 8024935, "category_id": 47, "iscrowd": 0, "bbox": [585, 299, 55, 112], "area": 4491}, {"id": 8750730, "category_id": 47, "iscrowd": 0, "bbox": [150, 170, 41, 29], "area": 761}, {"id": 4939905, "category_id": 47, "iscrowd": 0, "bbox": [561, 245, 59, 59], "area": 2107}, {"id": 11051675, "category_id": 47, "iscrowd": 0, "bbox": [364, 159, 31, 49], "area": 1348}, {"id": 9471889, "category_id": 50, "iscrowd": 0, "bbox": [421, 182, 40, 40], "area": 455}, {"id": 3620439, "category_id": 51, "iscrowd": 0, "bbox": [0, 435, 32, 45], "area": 1246}, {"id": 6384271, "category_id": 51, "iscrowd": 0, "bbox": [252, 246, 47, 28], "area": 1070}, {"id": 9801345, "category_id": 51, "iscrowd": 0, "bbox": [449, 368, 191, 105], "area": 17059}, {"id": 12432812, "category_id": 51, "iscrowd": 0, "bbox": [493, 79, 10, 4], "area": 38}, {"id": 10854556, "category_id": 51, "iscrowd": 0, "bbox": [271, 175, 79, 50], "area": 2948}, {"id": 8487810, "category_id": 51, "iscrowd": 0, "bbox": [25, 199, 68, 34], "area": 959}, {"id": 9538953, "category_id": 51, "iscrowd": 0, "bbox": [42, 453, 110, 22], "area": 1704}, {"id": 10984337, "category_id": 51, "iscrowd": 0, "bbox": [585, 224, 55, 41], "area": 1519}, {"id": 3497909, "category_id": 57, "iscrowd": 0, "bbox": [227, 218, 28, 40], "area": 719}, {"id": 3891376, "category_id": 57, "iscrowd": 0, "bbox": [307, 367, 66, 41], "area": 1041}, {"id": 2379694, "category_id": 57, "iscrowd": 0, "bbox": [289, 384, 14, 30], "area": 125}, {"id": 3303893, "category_id": 57, "iscrowd": 0, "bbox": [266, 389, 67, 60], "area": 1561}, {"id": 6060743, "category_id": 57, "iscrowd": 0, "bbox": [307, 385, 61, 50], "area": 901}, {"id": 3041992, "category_id": 57, "iscrowd": 0, "bbox": [296, 363, 12, 45], "area": 324}, {"id": 537221, "category_id": 57, "iscrowd": 0, "bbox": [98, 420, 49, 40], "area": 750}, {"id": 2580170, "category_id": 57, "iscrowd": 0, "bbox": [221, 223, 12, 31], "area": 190}, {"id": 2382006, "category_id": 57, "iscrowd": 0, "bbox": [281, 372, 13, 44], "area": 282}, {"id": 1132720, "category_id": 57, "iscrowd": 0, "bbox": [211, 227, 11, 28], "area": 163}, {"id": 3421243, "category_id": 62, "iscrowd": 0, "bbox": [406, 66, 12, 23], "area": 179}, {"id": 3026476, "category_id": 62, "iscrowd": 0, "bbox": [331, 78, 70, 85], "area": 1827}, {"id": 6778743, "category_id": 62, "iscrowd": 0, "bbox": [210, 117, 11, 51], "area": 401}, {"id": 2170907, "category_id": 62, "iscrowd": 0, "bbox": [2, 109, 10, 96], "area": 783}, {"id": 4670267, "category_id": 62, "iscrowd": 0, "bbox": [499, 59, 13, 9], "area": 88}, {"id": 1841170, "category_id": 62, "iscrowd": 0, "bbox": [400, 103, 93, 96], "area": 4283}, {"id": 7303799, "category_id": 67, "iscrowd": 0, "bbox": [479, 84, 35, 9], "area": 179}, {"id": 6058357, "category_id": 67, "iscrowd": 0, "bbox": [0, 148, 640, 326], "area": 136796}, {"id": 10854043, "category_id": 67, "iscrowd": 0, "bbox": [361, 91, 164, 47], "area": 3128}, {"id": 3362682, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 523, 206], "area": 20897}, {"id": 13092543, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 574, 53], "area": 13744}], "file_name": "000000242946.png", "image_id": 242946}, {"segments_info": [{"id": 461071, "category_id": 1, "iscrowd": 0, "bbox": [292, 548, 19, 32], "area": 388}, {"id": 3028798, "category_id": 1, "iscrowd": 0, "bbox": [400, 531, 7, 18], "area": 93}, {"id": 198153, "category_id": 1, "iscrowd": 0, "bbox": [79, 566, 29, 28], "area": 538}, {"id": 2306095, "category_id": 1, "iscrowd": 0, "bbox": [286, 532, 6, 25], "area": 101}, {"id": 1778994, "category_id": 1, "iscrowd": 0, "bbox": [20, 536, 10, 23], "area": 135}, {"id": 1844516, "category_id": 1, "iscrowd": 0, "bbox": [102, 537, 5, 19], "area": 67}, {"id": 527118, "category_id": 1, "iscrowd": 0, "bbox": [120, 548, 20, 29], "area": 394}, {"id": 1516070, "category_id": 1, "iscrowd": 0, "bbox": [107, 536, 5, 21], "area": 89}, {"id": 1123902, "category_id": 1, "iscrowd": 0, "bbox": [127, 538, 10, 12], "area": 49}, {"id": 726309, "category_id": 1, "iscrowd": 0, "bbox": [34, 542, 8, 18], "area": 113}, {"id": 7057103, "category_id": 85, "iscrowd": 0, "bbox": [189, 242, 44, 39], "area": 1261}, {"id": 1583402, "category_id": 130, "iscrowd": 0, "bbox": [306, 548, 121, 49], "area": 1143}, {"id": 1318431, "category_id": 161, "iscrowd": 0, "bbox": [0, 474, 17, 33], "area": 391}, {"id": 1450537, "category_id": 178, "iscrowd": 0, "bbox": [16, 543, 357, 97], "area": 19927}, {"id": 1187359, "category_id": 184, "iscrowd": 0, "bbox": [0, 204, 427, 379], "area": 65734}, {"id": 723980, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 492], "area": 118907}, {"id": 1185303, "category_id": 190, "iscrowd": 0, "bbox": [0, 558, 427, 82], "area": 6760}, {"id": 329736, "category_id": 191, "iscrowd": 0, "bbox": [393, 594, 34, 19], "area": 503}, {"id": 791829, "category_id": 193, "iscrowd": 0, "bbox": [391, 577, 18, 18], "area": 288}, {"id": 3234435, "category_id": 197, "iscrowd": 0, "bbox": [98, 83, 329, 486], "area": 54044}], "file_name": "000000243034.png", "image_id": 243034}, {"segments_info": [{"id": 6323075, "category_id": 23, "iscrowd": 0, "bbox": [1, 84, 550, 483], "area": 138097}, {"id": 8755347, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 573], "area": 225282}], "file_name": "000000243075.png", "image_id": 243075}, {"segments_info": [{"id": 5660993, "category_id": 1, "iscrowd": 0, "bbox": [130, 73, 352, 283], "area": 51503}, {"id": 12501150, "category_id": 1, "iscrowd": 0, "bbox": [255, 2, 385, 353], "area": 62788}, {"id": 9081997, "category_id": 35, "iscrowd": 0, "bbox": [121, 186, 363, 146], "area": 1079}, {"id": 9733199, "category_id": 35, "iscrowd": 0, "bbox": [350, 243, 216, 51], "area": 1782}, {"id": 15133656, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 603, 360], "area": 108323}], "file_name": "000000243148.png", "image_id": 243148}, {"segments_info": [{"id": 4289155, "category_id": 65, "iscrowd": 0, "bbox": [0, 31, 387, 299], "area": 67467}, {"id": 4213309, "category_id": 73, "iscrowd": 0, "bbox": [260, 4, 237, 324], "area": 43476}, {"id": 2913927, "category_id": 93, "iscrowd": 0, "bbox": [0, 258, 248, 75], "area": 1231}, {"id": 14861964, "category_id": 180, "iscrowd": 0, "bbox": [26, 0, 226, 105], "area": 19174}, {"id": 5004377, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 392, 259], "area": 30997}], "file_name": "000000243199.png", "image_id": 243199}, {"segments_info": [{"id": 4733490, "category_id": 1, "iscrowd": 0, "bbox": [199, 36, 281, 594], "area": 112004}, {"id": 3815473, "category_id": 50, "iscrowd": 0, "bbox": [4, 309, 134, 148], "area": 8103}, {"id": 5204597, "category_id": 54, "iscrowd": 0, "bbox": [46, 453, 70, 71], "area": 3214}, {"id": 5594718, "category_id": 79, "iscrowd": 0, "bbox": [3, 314, 265, 319], "area": 48564}, {"id": 3820891, "category_id": 112, "iscrowd": 0, "bbox": [340, 0, 91, 94], "area": 5529}, {"id": 7701644, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 256, 202], "area": 22283}, {"id": 10068640, "category_id": 190, "iscrowd": 0, "bbox": [0, 109, 286, 335], "area": 42773}, {"id": 8422021, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 269], "area": 30960}, {"id": 8550789, "category_id": 200, "iscrowd": 0, "bbox": [212, 195, 120, 215], "area": 13638}], "file_name": "000000243204.png", "image_id": 243204}, {"segments_info": [{"id": 1918060, "category_id": 17, "iscrowd": 0, "bbox": [178, 162, 102, 191], "area": 13165}, {"id": 2573423, "category_id": 82, "iscrowd": 0, "bbox": [132, 308, 348, 323], "area": 97727}, {"id": 987488, "category_id": 112, "iscrowd": 0, "bbox": [0, 287, 62, 353], "area": 15926}, {"id": 2182264, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 255], "area": 73775}, {"id": 3243196, "category_id": 188, "iscrowd": 0, "bbox": [172, 31, 308, 317], "area": 54301}, {"id": 4621493, "category_id": 199, "iscrowd": 0, "bbox": [0, 195, 181, 445], "area": 41332}], "file_name": "000000243344.png", "image_id": 243344}, {"segments_info": [{"id": 6590382, "category_id": 70, "iscrowd": 0, "bbox": [192, 166, 160, 311], "area": 39446}, {"id": 11063527, "category_id": 107, "iscrowd": 0, "bbox": [67, 97, 308, 75], "area": 16328}, {"id": 726614, "category_id": 109, "iscrowd": 0, "bbox": [190, 0, 185, 111], "area": 19945}, {"id": 2242894, "category_id": 190, "iscrowd": 0, "bbox": [83, 307, 292, 193], "area": 27024}, {"id": 9879253, "category_id": 195, "iscrowd": 0, "bbox": [38, 251, 72, 87], "area": 3241}, {"id": 6128025, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 59789}], "file_name": "000000243495.png", "image_id": 243495}, {"segments_info": [{"id": 10731211, "category_id": 47, "iscrowd": 0, "bbox": [68, 1, 78, 53], "area": 3354}, {"id": 7961727, "category_id": 48, "iscrowd": 0, "bbox": [296, 46, 77, 182], "area": 3500}, {"id": 10072253, "category_id": 189, "iscrowd": 0, "bbox": [18, 0, 367, 289], "area": 29937}, {"id": 2118479, "category_id": 196, "iscrowd": 0, "bbox": [33, 53, 298, 150], "area": 14560}], "file_name": "000000243626.png", "image_id": 243626}, {"segments_info": [{"id": 5850941, "category_id": 1, "iscrowd": 0, "bbox": [0, 223, 34, 42], "area": 1055}, {"id": 9273982, "category_id": 3, "iscrowd": 0, "bbox": [3, 213, 235, 140], "area": 25459}, {"id": 7956324, "category_id": 3, "iscrowd": 0, "bbox": [547, 208, 91, 214], "area": 13802}, {"id": 10459801, "category_id": 6, "iscrowd": 0, "bbox": [54, 101, 492, 210], "area": 70055}, {"id": 6511959, "category_id": 149, "iscrowd": 0, "bbox": [0, 253, 595, 175], "area": 67798}, {"id": 16711163, "category_id": 187, "iscrowd": 0, "bbox": [225, 0, 415, 63], "area": 14165}, {"id": 10919832, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 258], "area": 79887}], "file_name": "000000243867.png", "image_id": 243867}, {"segments_info": [{"id": 3884916, "category_id": 1, "iscrowd": 0, "bbox": [0, 364, 15, 32], "area": 288}, {"id": 7169394, "category_id": 1, "iscrowd": 0, "bbox": [155, 66, 219, 372], "area": 43945}, {"id": 2174290, "category_id": 1, "iscrowd": 0, "bbox": [394, 355, 77, 83], "area": 3297}, {"id": 3166075, "category_id": 1, "iscrowd": 0, "bbox": [28, 407, 55, 31], "area": 1070}, {"id": 6383743, "category_id": 1, "iscrowd": 0, "bbox": [481, 332, 19, 106], "area": 1261}, {"id": 8092822, "category_id": 1, "iscrowd": 0, "bbox": [84, 177, 111, 256], "area": 7443}, {"id": 6644086, "category_id": 1, "iscrowd": 0, "bbox": [314, 190, 132, 242], "area": 12948}, {"id": 2437465, "category_id": 41, "iscrowd": 0, "bbox": [121, 250, 152, 168], "area": 9099}, {"id": 4611947, "category_id": 128, "iscrowd": 0, "bbox": [0, 370, 125, 39], "area": 678}, {"id": 4150904, "category_id": 151, "iscrowd": 0, "bbox": [0, 199, 452, 167], "area": 15011}, {"id": 3158828, "category_id": 166, "iscrowd": 0, "bbox": [0, 308, 104, 81], "area": 5967}, {"id": 1117967, "category_id": 181, "iscrowd": 0, "bbox": [30, 327, 88, 83], "area": 2219}, {"id": 8491144, "category_id": 184, "iscrowd": 0, "bbox": [311, 164, 189, 274], "area": 14827}, {"id": 3885148, "category_id": 185, "iscrowd": 0, "bbox": [0, 400, 140, 38], "area": 2389}, {"id": 13817294, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 316], "area": 93288}], "file_name": "000000243989.png", "image_id": 243989}, {"segments_info": [{"id": 6116964, "category_id": 11, "iscrowd": 0, "bbox": [265, 107, 83, 262], "area": 12664}, {"id": 9931661, "category_id": 149, "iscrowd": 0, "bbox": [0, 388, 640, 43], "area": 20766}, {"id": 9604756, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 640, 310], "area": 147516}, {"id": 6512999, "category_id": 181, "iscrowd": 0, "bbox": [200, 0, 440, 58], "area": 24166}, {"id": 10461612, "category_id": 191, "iscrowd": 0, "bbox": [0, 285, 640, 129], "area": 56689}], "file_name": "000000244019.png", "image_id": 244019}, {"segments_info": [{"id": 3814974, "category_id": 1, "iscrowd": 0, "bbox": [185, 98, 45, 84], "area": 1581}, {"id": 2898505, "category_id": 19, "iscrowd": 0, "bbox": [149, 132, 114, 84], "area": 3912}, {"id": 9800326, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 99], "area": 58151}, {"id": 8419707, "category_id": 192, "iscrowd": 0, "bbox": [0, 83, 453, 30], "area": 5602}, {"id": 5400950, "category_id": 193, "iscrowd": 0, "bbox": [0, 88, 640, 340], "area": 204459}], "file_name": "000000244099.png", "image_id": 244099}, {"segments_info": [{"id": 4539977, "category_id": 44, "iscrowd": 0, "bbox": [48, 0, 159, 131], "area": 15627}, {"id": 1260653, "category_id": 54, "iscrowd": 0, "bbox": [4, 199, 372, 236], "area": 52047}, {"id": 4026513, "category_id": 54, "iscrowd": 0, "bbox": [424, 54, 171, 132], "area": 17131}, {"id": 3367316, "category_id": 54, "iscrowd": 0, "bbox": [113, 89, 386, 225], "area": 55539}, {"id": 6831666, "category_id": 67, "iscrowd": 0, "bbox": [0, 29, 640, 445], "area": 39448}, {"id": 1591652, "category_id": 122, "iscrowd": 0, "bbox": [0, 199, 38, 90], "area": 1059}, {"id": 2567220, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 141], "area": 16415}, {"id": 11315627, "category_id": 195, "iscrowd": 0, "bbox": [226, 17, 173, 94], "area": 8669}, {"id": 4220299, "category_id": 196, "iscrowd": 0, "bbox": [34, 69, 282, 363], "area": 6187}], "file_name": "000000244181.png", "image_id": 244181}, {"segments_info": [{"id": 1381400, "category_id": 3, "iscrowd": 0, "bbox": [286, 295, 10, 8], "area": 73}, {"id": 1184027, "category_id": 10, "iscrowd": 0, "bbox": [87, 54, 29, 56], "area": 1374}, {"id": 986653, "category_id": 10, "iscrowd": 0, "bbox": [206, 50, 28, 56], "area": 1495}, {"id": 3619386, "category_id": 149, "iscrowd": 0, "bbox": [0, 290, 640, 174], "area": 71287}, {"id": 460808, "category_id": 184, "iscrowd": 0, "bbox": [0, 184, 259, 160], "area": 25903}, {"id": 12305084, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 295], "area": 157239}, {"id": 3423555, "category_id": 191, "iscrowd": 0, "bbox": [291, 291, 308, 76], "area": 2118}, {"id": 1252645, "category_id": 193, "iscrowd": 0, "bbox": [0, 260, 640, 132], "area": 32901}], "file_name": "000000244379.png", "image_id": 244379}, {"segments_info": [{"id": 4085089, "category_id": 21, "iscrowd": 0, "bbox": [341, 266, 21, 12], "area": 162}, {"id": 1513759, "category_id": 21, "iscrowd": 0, "bbox": [355, 134, 146, 214], "area": 19983}, {"id": 1912111, "category_id": 21, "iscrowd": 0, "bbox": [225, 219, 27, 12], "area": 212}, {"id": 2839121, "category_id": 21, "iscrowd": 0, "bbox": [511, 131, 6, 3], "area": 12}, {"id": 3097927, "category_id": 21, "iscrowd": 0, "bbox": [17, 206, 24, 11], "area": 177}, {"id": 1054744, "category_id": 21, "iscrowd": 0, "bbox": [273, 268, 40, 14], "area": 311}, {"id": 1383199, "category_id": 21, "iscrowd": 0, "bbox": [59, 150, 20, 8], "area": 104}, {"id": 7249048, "category_id": 21, "iscrowd": 0, "bbox": [586, 181, 9, 4], "area": 33}, {"id": 1393472, "category_id": 21, "iscrowd": 0, "bbox": [545, 133, 4, 2], "area": 5}, {"id": 1579550, "category_id": 21, "iscrowd": 0, "bbox": [74, 149, 170, 160], "area": 14304}, {"id": 2896427, "category_id": 184, "iscrowd": 0, "bbox": [214, 73, 426, 34], "area": 6619}, {"id": 14865352, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 73], "area": 35505}, {"id": 3963758, "category_id": 193, "iscrowd": 0, "bbox": [0, 23, 640, 457], "area": 229212}], "file_name": "000000244411.png", "image_id": 244411}, {"segments_info": [{"id": 2961204, "category_id": 1, "iscrowd": 0, "bbox": [10, 51, 254, 449], "area": 75315}, {"id": 5856488, "category_id": 32, "iscrowd": 0, "bbox": [105, 183, 48, 248], "area": 8790}, {"id": 3948865, "category_id": 112, "iscrowd": 0, "bbox": [0, 58, 229, 442], "area": 15466}, {"id": 3750972, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 276, 500], "area": 36837}], "file_name": "000000244496.png", "image_id": 244496}, {"segments_info": [{"id": 8025978, "category_id": 24, "iscrowd": 0, "bbox": [55, 126, 123, 140], "area": 11753}, {"id": 5920087, "category_id": 24, "iscrowd": 0, "bbox": [143, 120, 122, 137], "area": 9737}, {"id": 8880774, "category_id": 24, "iscrowd": 0, "bbox": [216, 59, 284, 311], "area": 34668}, {"id": 4079932, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 222], "area": 64989}, {"id": 6249052, "category_id": 198, "iscrowd": 0, "bbox": [0, 166, 500, 208], "area": 65320}], "file_name": "000000244592.png", "image_id": 244592}, {"segments_info": [{"id": 1449266, "category_id": 1, "iscrowd": 0, "bbox": [98, 86, 179, 194], "area": 14000}, {"id": 724770, "category_id": 1, "iscrowd": 0, "bbox": [43, 142, 88, 122], "area": 5575}, {"id": 1120296, "category_id": 1, "iscrowd": 0, "bbox": [231, 149, 65, 94], "area": 3517}, {"id": 663070, "category_id": 1, "iscrowd": 0, "bbox": [341, 174, 52, 109], "area": 3948}, {"id": 10857136, "category_id": 46, "iscrowd": 0, "bbox": [224, 272, 47, 131], "area": 3540}, {"id": 11383483, "category_id": 46, "iscrowd": 0, "bbox": [175, 276, 44, 127], "area": 2960}, {"id": 11185590, "category_id": 46, "iscrowd": 0, "bbox": [127, 275, 44, 132], "area": 3237}, {"id": 7175044, "category_id": 47, "iscrowd": 0, "bbox": [8, 310, 45, 96], "area": 3921}, {"id": 11053742, "category_id": 67, "iscrowd": 0, "bbox": [0, 359, 392, 104], "area": 22684}, {"id": 1515817, "category_id": 130, "iscrowd": 0, "bbox": [313, 63, 80, 62], "area": 3585}, {"id": 6263728, "category_id": 171, "iscrowd": 0, "bbox": [6, 56, 117, 137], "area": 8383}, {"id": 4287083, "category_id": 181, "iscrowd": 0, "bbox": [10, 0, 133, 204], "area": 6492}, {"id": 6054244, "category_id": 189, "iscrowd": 0, "bbox": [0, 382, 52, 31], "area": 192}, {"id": 395276, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 393, 284], "area": 54284}], "file_name": "000000244750.png", "image_id": 244750}, {"segments_info": [{"id": 4874376, "category_id": 1, "iscrowd": 0, "bbox": [548, 13, 66, 106], "area": 4983}, {"id": 7634821, "category_id": 1, "iscrowd": 0, "bbox": [392, 33, 147, 116], "area": 6248}, {"id": 2173773, "category_id": 1, "iscrowd": 0, "bbox": [328, 11, 91, 87], "area": 3751}, {"id": 4214127, "category_id": 1, "iscrowd": 0, "bbox": [185, 5, 78, 64], "area": 2404}, {"id": 4041657, "category_id": 4, "iscrowd": 0, "bbox": [1, 3, 470, 424], "area": 48742}, {"id": 5271643, "category_id": 4, "iscrowd": 0, "bbox": [399, 47, 241, 375], "area": 57175}, {"id": 2304928, "category_id": 62, "iscrowd": 0, "bbox": [294, 176, 51, 39], "area": 674}, {"id": 3700376, "category_id": 62, "iscrowd": 0, "bbox": [88, 134, 95, 103], "area": 4997}, {"id": 4030640, "category_id": 62, "iscrowd": 0, "bbox": [119, 68, 69, 71], "area": 2890}, {"id": 4225712, "category_id": 62, "iscrowd": 0, "bbox": [180, 63, 60, 64], "area": 2859}, {"id": 5411512, "category_id": 62, "iscrowd": 0, "bbox": [351, 97, 44, 41], "area": 1298}, {"id": 3567519, "category_id": 62, "iscrowd": 0, "bbox": [69, 70, 68, 71], "area": 2810}, {"id": 3503778, "category_id": 62, "iscrowd": 0, "bbox": [163, 115, 88, 103], "area": 5166}, {"id": 3039365, "category_id": 62, "iscrowd": 0, "bbox": [366, 147, 120, 176], "area": 7456}, {"id": 2974880, "category_id": 62, "iscrowd": 0, "bbox": [0, 239, 96, 189], "area": 10615}, {"id": 2447234, "category_id": 62, "iscrowd": 0, "bbox": [215, 100, 95, 104], "area": 4924}, {"id": 4091537, "category_id": 62, "iscrowd": 0, "bbox": [317, 155, 108, 182], "area": 11279}, {"id": 3042463, "category_id": 62, "iscrowd": 0, "bbox": [29, 200, 210, 223], "area": 18522}, {"id": 3829914, "category_id": 62, "iscrowd": 0, "bbox": [382, 80, 61, 64], "area": 2375}, {"id": 3956872, "category_id": 62, "iscrowd": 1, "bbox": [20, 55, 484, 174], "area": 8200}, {"id": 9539468, "category_id": 73, "iscrowd": 0, "bbox": [330, 94, 58, 59], "area": 986}, {"id": 9941179, "category_id": 133, "iscrowd": 0, "bbox": [47, 153, 33, 36], "area": 722}, {"id": 7895145, "category_id": 180, "iscrowd": 0, "bbox": [602, 0, 38, 85], "area": 2331}, {"id": 5205105, "category_id": 190, "iscrowd": 0, "bbox": [524, 158, 116, 270], "area": 3976}, {"id": 4343111, "category_id": 199, "iscrowd": 0, "bbox": [102, 0, 511, 139], "area": 24199}], "file_name": "000000244833.png", "image_id": 244833}, {"segments_info": [{"id": 2435129, "category_id": 1, "iscrowd": 0, "bbox": [179, 33, 246, 274], "area": 36840}, {"id": 5064006, "category_id": 47, "iscrowd": 0, "bbox": [522, 343, 64, 78], "area": 4133}, {"id": 9805218, "category_id": 61, "iscrowd": 0, "bbox": [191, 271, 240, 135], "area": 28422}, {"id": 6775139, "category_id": 84, "iscrowd": 0, "bbox": [518, 357, 113, 42], "area": 1596}, {"id": 8751501, "category_id": 100, "iscrowd": 0, "bbox": [171, 286, 265, 119], "area": 2221}, {"id": 528169, "category_id": 188, "iscrowd": 0, "bbox": [418, 172, 222, 218], "area": 35694}, {"id": 4804708, "category_id": 189, "iscrowd": 0, "bbox": [37, 330, 489, 94], "area": 16222}, {"id": 7765380, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 228], "area": 76864}], "file_name": "000000245026.png", "image_id": 245026}, {"segments_info": [{"id": 10523378, "category_id": 10, "iscrowd": 0, "bbox": [404, 144, 25, 30], "area": 614}, {"id": 5724770, "category_id": 130, "iscrowd": 0, "bbox": [272, 11, 58, 146], "area": 2859}, {"id": 9475728, "category_id": 159, "iscrowd": 0, "bbox": [0, 188, 640, 239], "area": 91575}, {"id": 5002331, "category_id": 161, "iscrowd": 0, "bbox": [461, 140, 91, 134], "area": 6552}, {"id": 2566709, "category_id": 186, "iscrowd": 0, "bbox": [239, 0, 135, 153], "area": 10788}, {"id": 659227, "category_id": 187, "iscrowd": 0, "bbox": [470, 0, 170, 153], "area": 12236}, {"id": 4609869, "category_id": 197, "iscrowd": 0, "bbox": [523, 68, 117, 268], "area": 23856}, {"id": 5725797, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 444, 390], "area": 78173}], "file_name": "000000245102.png", "image_id": 245102}, {"segments_info": [{"id": 5003614, "category_id": 2, "iscrowd": 0, "bbox": [404, 546, 25, 32], "area": 359}, {"id": 3424326, "category_id": 2, "iscrowd": 0, "bbox": [430, 547, 43, 32], "area": 861}, {"id": 4148046, "category_id": 85, "iscrowd": 0, "bbox": [243, 162, 43, 40], "area": 1229}, {"id": 4151651, "category_id": 128, "iscrowd": 0, "bbox": [358, 372, 122, 198], "area": 13259}, {"id": 14603200, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 487], "area": 121091}, {"id": 3487797, "category_id": 191, "iscrowd": 0, "bbox": [0, 569, 480, 71], "area": 13789}, {"id": 4216418, "category_id": 197, "iscrowd": 0, "bbox": [0, 20, 476, 610], "area": 156523}], "file_name": "000000245173.png", "image_id": 245173}, {"segments_info": [{"id": 6181982, "category_id": 1, "iscrowd": 0, "bbox": [185, 83, 195, 321], "area": 35853}, {"id": 6909569, "category_id": 1, "iscrowd": 0, "bbox": [421, 173, 169, 235], "area": 9795}, {"id": 8495811, "category_id": 51, "iscrowd": 0, "bbox": [261, 388, 334, 131], "area": 22162}, {"id": 11914448, "category_id": 51, "iscrowd": 0, "bbox": [279, 324, 260, 92], "area": 16348}, {"id": 3233205, "category_id": 60, "iscrowd": 0, "bbox": [463, 432, 33, 35], "area": 731}, {"id": 7829166, "category_id": 60, "iscrowd": 0, "bbox": [333, 433, 18, 11], "area": 71}, {"id": 4026057, "category_id": 60, "iscrowd": 0, "bbox": [370, 455, 36, 22], "area": 414}, {"id": 3302343, "category_id": 60, "iscrowd": 0, "bbox": [398, 470, 40, 28], "area": 842}, {"id": 5269173, "category_id": 60, "iscrowd": 0, "bbox": [348, 425, 30, 28], "area": 612}, {"id": 7704523, "category_id": 60, "iscrowd": 0, "bbox": [249, 404, 37, 29], "area": 771}, {"id": 4674977, "category_id": 60, "iscrowd": 0, "bbox": [194, 382, 32, 28], "area": 565}, {"id": 3428523, "category_id": 60, "iscrowd": 0, "bbox": [442, 419, 25, 29], "area": 450}, {"id": 8227516, "category_id": 60, "iscrowd": 0, "bbox": [230, 397, 35, 33], "area": 639}, {"id": 4157647, "category_id": 60, "iscrowd": 0, "bbox": [357, 463, 32, 30], "area": 725}, {"id": 3364529, "category_id": 60, "iscrowd": 0, "bbox": [494, 450, 32, 32], "area": 500}, {"id": 3301308, "category_id": 60, "iscrowd": 0, "bbox": [452, 471, 36, 26], "area": 777}, {"id": 7374272, "category_id": 60, "iscrowd": 0, "bbox": [188, 434, 34, 12], "area": 239}, {"id": 5597339, "category_id": 60, "iscrowd": 1, "bbox": [118, 388, 476, 193], "area": 4115}, {"id": 6976630, "category_id": 130, "iscrowd": 0, "bbox": [302, 19, 210, 28], "area": 1801}, {"id": 6578532, "category_id": 186, "iscrowd": 0, "bbox": [18, 22, 594, 114], "area": 40509}, {"id": 6716305, "category_id": 189, "iscrowd": 0, "bbox": [301, 397, 290, 192], "area": 19153}, {"id": 7565971, "category_id": 196, "iscrowd": 0, "bbox": [344, 224, 167, 107], "area": 4703}], "file_name": "000000245311.png", "image_id": 245311}, {"segments_info": [{"id": 5131594, "category_id": 1, "iscrowd": 0, "bbox": [410, 248, 14, 64], "area": 559}, {"id": 2762044, "category_id": 1, "iscrowd": 0, "bbox": [180, 92, 203, 200], "area": 16334}, {"id": 8748668, "category_id": 3, "iscrowd": 0, "bbox": [366, 245, 57, 66], "area": 2576}, {"id": 7041915, "category_id": 41, "iscrowd": 0, "bbox": [227, 270, 111, 50], "area": 1920}, {"id": 2305837, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 424, 321], "area": 57579}, {"id": 9474706, "category_id": 185, "iscrowd": 0, "bbox": [74, 145, 350, 161], "area": 34227}, {"id": 12106169, "category_id": 191, "iscrowd": 0, "bbox": [0, 311, 424, 329], "area": 122422}, {"id": 14145238, "category_id": 199, "iscrowd": 0, "bbox": [0, 99, 410, 285], "area": 35225}], "file_name": "000000245320.png", "image_id": 245320}, {"segments_info": [{"id": 5742986, "category_id": 1, "iscrowd": 0, "bbox": [236, 154, 26, 63], "area": 1015}, {"id": 4810075, "category_id": 1, "iscrowd": 0, "bbox": [63, 147, 83, 218], "area": 9127}, {"id": 7964283, "category_id": 1, "iscrowd": 0, "bbox": [378, 147, 45, 86], "area": 2260}, {"id": 5801858, "category_id": 1, "iscrowd": 0, "bbox": [275, 134, 93, 139], "area": 5938}, {"id": 4469803, "category_id": 1, "iscrowd": 0, "bbox": [157, 115, 127, 305], "area": 20116}, {"id": 4209981, "category_id": 4, "iscrowd": 0, "bbox": [614, 180, 26, 34], "area": 400}, {"id": 4275523, "category_id": 4, "iscrowd": 0, "bbox": [478, 181, 54, 37], "area": 964}, {"id": 4547702, "category_id": 4, "iscrowd": 0, "bbox": [287, 196, 24, 17], "area": 260}, {"id": 6119009, "category_id": 4, "iscrowd": 0, "bbox": [243, 174, 293, 198], "area": 29798}, {"id": 3815480, "category_id": 4, "iscrowd": 0, "bbox": [439, 188, 27, 28], "area": 414}, {"id": 7829107, "category_id": 8, "iscrowd": 0, "bbox": [0, 175, 163, 84], "area": 6005}, {"id": 6249561, "category_id": 130, "iscrowd": 0, "bbox": [0, 41, 21, 11], "area": 167}, {"id": 4347466, "category_id": 184, "iscrowd": 0, "bbox": [0, 107, 57, 93], "area": 3874}, {"id": 16514043, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 111], "area": 26139}, {"id": 5987162, "category_id": 191, "iscrowd": 0, "bbox": [0, 203, 640, 277], "area": 110497}, {"id": 6054509, "category_id": 197, "iscrowd": 0, "bbox": [35, 12, 605, 221], "area": 86961}], "file_name": "000000245448.png", "image_id": 245448}, {"segments_info": [{"id": 8290671, "category_id": 13, "iscrowd": 0, "bbox": [126, 212, 7, 7], "area": 43}, {"id": 9872811, "category_id": 16, "iscrowd": 0, "bbox": [436, 263, 17, 12], "area": 83}, {"id": 9281699, "category_id": 16, "iscrowd": 0, "bbox": [323, 255, 13, 39], "area": 330}, {"id": 5465712, "category_id": 25, "iscrowd": 0, "bbox": [196, 124, 100, 161], "area": 4839}, {"id": 2639412, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 284], "area": 88794}, {"id": 6453362, "category_id": 185, "iscrowd": 0, "bbox": [0, 206, 500, 78], "area": 16014}, {"id": 14729639, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 290, 168], "area": 24328}, {"id": 6127496, "category_id": 193, "iscrowd": 0, "bbox": [0, 255, 500, 126], "area": 54547}, {"id": 4149574, "category_id": 199, "iscrowd": 0, "bbox": [387, 196, 62, 33], "area": 1291}], "file_name": "000000245513.png", "image_id": 245513}, {"segments_info": [{"id": 3042213, "category_id": 17, "iscrowd": 0, "bbox": [206, 10, 366, 384], "area": 79180}, {"id": 2835547, "category_id": 47, "iscrowd": 0, "bbox": [97, 113, 49, 67], "area": 2434}, {"id": 6581093, "category_id": 72, "iscrowd": 0, "bbox": [290, 4, 318, 143], "area": 13966}, {"id": 11513257, "category_id": 76, "iscrowd": 0, "bbox": [98, 294, 542, 172], "area": 70851}, {"id": 1052688, "category_id": 77, "iscrowd": 0, "bbox": [197, 72, 74, 110], "area": 6709}, {"id": 987659, "category_id": 87, "iscrowd": 0, "bbox": [73, 7, 58, 69], "area": 2738}, {"id": 1783124, "category_id": 189, "iscrowd": 0, "bbox": [0, 186, 640, 286], "area": 64038}, {"id": 1912837, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 295, 472], "area": 29435}], "file_name": "000000245576.png", "image_id": 245576}, {"segments_info": [{"id": 7830900, "category_id": 61, "iscrowd": 0, "bbox": [2, 35, 361, 337], "area": 92275}, {"id": 2892831, "category_id": 189, "iscrowd": 0, "bbox": [0, 10, 375, 490], "area": 61769}, {"id": 3350294, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 375, 58], "area": 11854}, {"id": 10853259, "category_id": 195, "iscrowd": 0, "bbox": [0, 64, 21, 52], "area": 607}], "file_name": "000000245651.png", "image_id": 245651}, {"segments_info": [{"id": 1316125, "category_id": 17, "iscrowd": 0, "bbox": [194, 177, 301, 303], "area": 43458}, {"id": 10066333, "category_id": 70, "iscrowd": 0, "bbox": [271, 15, 312, 465], "area": 72461}, {"id": 13751244, "category_id": 109, "iscrowd": 0, "bbox": [102, 0, 298, 203], "area": 49661}, {"id": 5463397, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 92, 480], "area": 33768}, {"id": 12634051, "category_id": 176, "iscrowd": 0, "bbox": [53, 0, 489, 146], "area": 15663}, {"id": 13025986, "category_id": 188, "iscrowd": 0, "bbox": [557, 48, 83, 432], "area": 29542}, {"id": 9543343, "category_id": 190, "iscrowd": 0, "bbox": [257, 364, 57, 116], "area": 3898}, {"id": 12368826, "category_id": 195, "iscrowd": 0, "bbox": [552, 0, 88, 65], "area": 4573}, {"id": 3249603, "category_id": 200, "iscrowd": 0, "bbox": [77, 389, 224, 91], "area": 12660}], "file_name": "000000245764.png", "image_id": 245764}, {"segments_info": [{"id": 6388363, "category_id": 22, "iscrowd": 0, "bbox": [222, 150, 100, 47], "area": 2969}, {"id": 6189953, "category_id": 22, "iscrowd": 0, "bbox": [73, 122, 98, 57], "area": 2460}, {"id": 6585743, "category_id": 22, "iscrowd": 0, "bbox": [299, 116, 64, 52], "area": 1791}, {"id": 6519694, "category_id": 22, "iscrowd": 0, "bbox": [180, 143, 87, 46], "area": 1649}, {"id": 5597819, "category_id": 22, "iscrowd": 0, "bbox": [439, 100, 52, 48], "area": 1261}, {"id": 6189181, "category_id": 22, "iscrowd": 0, "bbox": [39, 101, 45, 49], "area": 1241}, {"id": 7375258, "category_id": 22, "iscrowd": 0, "bbox": [245, 125, 67, 34], "area": 1370}, {"id": 6586258, "category_id": 22, "iscrowd": 0, "bbox": [271, 191, 93, 75], "area": 3891}, {"id": 5269367, "category_id": 22, "iscrowd": 0, "bbox": [377, 190, 96, 57], "area": 3529}, {"id": 4544101, "category_id": 22, "iscrowd": 0, "bbox": [446, 205, 54, 72], "area": 1779}, {"id": 5268079, "category_id": 22, "iscrowd": 0, "bbox": [390, 118, 95, 49], "area": 2571}, {"id": 6258329, "category_id": 22, "iscrowd": 0, "bbox": [403, 165, 90, 44], "area": 2040}, {"id": 5467268, "category_id": 22, "iscrowd": 0, "bbox": [481, 120, 19, 48], "area": 423}, {"id": 6255231, "category_id": 22, "iscrowd": 1, "bbox": [79, 127, 141, 58], "area": 2824}, {"id": 8357510, "category_id": 148, "iscrowd": 0, "bbox": [0, 24, 500, 309], "area": 110718}, {"id": 10011366, "category_id": 154, "iscrowd": 0, "bbox": [0, 0, 500, 63], "area": 25222}], "file_name": "000000245915.png", "image_id": 245915}, {"segments_info": [{"id": 2236444, "category_id": 62, "iscrowd": 0, "bbox": [28, 563, 81, 77], "area": 3645}, {"id": 4342082, "category_id": 72, "iscrowd": 0, "bbox": [227, 377, 163, 118], "area": 16528}, {"id": 6776426, "category_id": 73, "iscrowd": 0, "bbox": [109, 408, 131, 128], "area": 14149}, {"id": 1118996, "category_id": 74, "iscrowd": 0, "bbox": [312, 590, 39, 32], "area": 870}, {"id": 2895411, "category_id": 76, "iscrowd": 0, "bbox": [116, 581, 196, 53], "area": 9393}, {"id": 6646378, "category_id": 130, "iscrowd": 0, "bbox": [371, 377, 109, 147], "area": 7044}, {"id": 6120038, "category_id": 156, "iscrowd": 0, "bbox": [20, 122, 441, 149], "area": 14874}, {"id": 2041924, "category_id": 189, "iscrowd": 0, "bbox": [0, 471, 480, 169], "area": 45235}, {"id": 9337433, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 158829}], "file_name": "000000246308.png", "image_id": 246308}, {"segments_info": [{"id": 2242116, "category_id": 1, "iscrowd": 0, "bbox": [0, 4, 396, 629], "area": 143472}, {"id": 2827372, "category_id": 47, "iscrowd": 0, "bbox": [238, 404, 42, 58], "area": 1770}, {"id": 6064220, "category_id": 51, "iscrowd": 0, "bbox": [167, 415, 64, 33], "area": 1367}, {"id": 9344667, "category_id": 51, "iscrowd": 0, "bbox": [185, 439, 66, 39], "area": 1971}, {"id": 5089465, "category_id": 59, "iscrowd": 0, "bbox": [263, 472, 168, 88], "area": 10282}, {"id": 11575429, "category_id": 78, "iscrowd": 0, "bbox": [221, 318, 119, 43], "area": 2890}, {"id": 4017738, "category_id": 79, "iscrowd": 0, "bbox": [180, 449, 300, 181], "area": 22350}, {"id": 8422524, "category_id": 176, "iscrowd": 0, "bbox": [269, 131, 211, 343], "area": 28481}, {"id": 1978681, "category_id": 188, "iscrowd": 0, "bbox": [65, 0, 415, 364], "area": 60527}, {"id": 9075307, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 78, 122], "area": 6613}], "file_name": "000000246436.png", "image_id": 246436}, {"segments_info": [{"id": 3947580, "category_id": 1, "iscrowd": 0, "bbox": [122, 16, 422, 543], "area": 93454}, {"id": 1052688, "category_id": 1, "iscrowd": 0, "bbox": [0, 2, 95, 337], "area": 26194}, {"id": 3223857, "category_id": 18, "iscrowd": 0, "bbox": [3, 219, 321, 371], "area": 28783}, {"id": 5789784, "category_id": 18, "iscrowd": 0, "bbox": [0, 271, 318, 161], "area": 16682}, {"id": 9408399, "category_id": 31, "iscrowd": 0, "bbox": [439, 338, 154, 267], "area": 27462}, {"id": 10329501, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 640], "area": 186995}], "file_name": "000000246454.png", "image_id": 246454}, {"segments_info": [{"id": 3556679, "category_id": 85, "iscrowd": 0, "bbox": [226, 288, 35, 39], "area": 1036}, {"id": 16244946, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 481], "area": 135018}, {"id": 2765626, "category_id": 197, "iscrowd": 0, "bbox": [0, 31, 427, 609], "area": 137201}], "file_name": "000000246522.png", "image_id": 246522}, {"segments_info": [{"id": 3290430, "category_id": 1, "iscrowd": 0, "bbox": [385, 229, 36, 129], "area": 2741}, {"id": 2695716, "category_id": 1, "iscrowd": 0, "bbox": [258, 226, 47, 125], "area": 3044}, {"id": 2435897, "category_id": 42, "iscrowd": 0, "bbox": [330, 264, 151, 40], "area": 3201}, {"id": 7234909, "category_id": 42, "iscrowd": 0, "bbox": [294, 264, 27, 47], "area": 585}, {"id": 7896445, "category_id": 154, "iscrowd": 0, "bbox": [0, 265, 640, 215], "area": 121281}, {"id": 11644070, "category_id": 155, "iscrowd": 0, "bbox": [0, 214, 640, 96], "area": 33307}, {"id": 13485501, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 234], "area": 142750}], "file_name": "000000246883.png", "image_id": 246883}, {"segments_info": [{"id": 13552065, "category_id": 1, "iscrowd": 0, "bbox": [84, 98, 54, 47], "area": 1114}, {"id": 9801349, "category_id": 1, "iscrowd": 0, "bbox": [441, 150, 87, 145], "area": 3747}, {"id": 9737882, "category_id": 1, "iscrowd": 0, "bbox": [151, 122, 66, 91], "area": 1557}, {"id": 10459792, "category_id": 1, "iscrowd": 0, "bbox": [361, 130, 77, 118], "area": 2497}, {"id": 9212055, "category_id": 1, "iscrowd": 0, "bbox": [222, 109, 55, 110], "area": 1480}, {"id": 10460317, "category_id": 4, "iscrowd": 0, "bbox": [461, 226, 73, 91], "area": 4547}, {"id": 8289923, "category_id": 4, "iscrowd": 0, "bbox": [214, 137, 60, 83], "area": 1476}, {"id": 10000033, "category_id": 4, "iscrowd": 0, "bbox": [394, 193, 37, 58], "area": 1388}, {"id": 9539478, "category_id": 4, "iscrowd": 0, "bbox": [168, 151, 66, 91], "area": 4183}, {"id": 10000021, "category_id": 4, "iscrowd": 0, "bbox": [90, 136, 60, 79], "area": 3263}, {"id": 9672909, "category_id": 13, "iscrowd": 0, "bbox": [438, 82, 42, 44], "area": 1514}, {"id": 14145493, "category_id": 149, "iscrowd": 0, "bbox": [0, 188, 640, 232], "area": 121147}, {"id": 7244662, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 290], "area": 119459}, {"id": 10991787, "category_id": 193, "iscrowd": 0, "bbox": [435, 210, 33, 37], "area": 655}], "file_name": "000000246963.png", "image_id": 246963}, {"segments_info": [{"id": 2897740, "category_id": 1, "iscrowd": 0, "bbox": [183, 135, 120, 181], "area": 13183}, {"id": 6252125, "category_id": 44, "iscrowd": 0, "bbox": [125, 232, 12, 38], "area": 333}, {"id": 5873600, "category_id": 44, "iscrowd": 0, "bbox": [384, 288, 8, 20], "area": 140}, {"id": 4094370, "category_id": 44, "iscrowd": 0, "bbox": [423, 243, 18, 69], "area": 746}, {"id": 7966629, "category_id": 44, "iscrowd": 0, "bbox": [91, 238, 10, 28], "area": 219}, {"id": 5803696, "category_id": 44, "iscrowd": 0, "bbox": [399, 240, 27, 79], "area": 1468}, {"id": 3170703, "category_id": 44, "iscrowd": 0, "bbox": [438, 243, 14, 52], "area": 296}, {"id": 1916504, "category_id": 44, "iscrowd": 0, "bbox": [380, 254, 17, 36], "area": 379}, {"id": 4410948, "category_id": 44, "iscrowd": 0, "bbox": [131, 219, 12, 31], "area": 236}, {"id": 6387838, "category_id": 46, "iscrowd": 0, "bbox": [68, 280, 24, 55], "area": 722}, {"id": 6846083, "category_id": 47, "iscrowd": 0, "bbox": [146, 303, 22, 28], "area": 421}, {"id": 4220007, "category_id": 47, "iscrowd": 0, "bbox": [89, 268, 57, 76], "area": 2741}, {"id": 4151405, "category_id": 50, "iscrowd": 0, "bbox": [139, 283, 24, 45], "area": 127}, {"id": 1661314, "category_id": 52, "iscrowd": 0, "bbox": [364, 233, 32, 21], "area": 259}, {"id": 1858689, "category_id": 52, "iscrowd": 0, "bbox": [350, 235, 27, 18], "area": 239}, {"id": 7234140, "category_id": 62, "iscrowd": 0, "bbox": [328, 389, 150, 34], "area": 3659}, {"id": 3949635, "category_id": 64, "iscrowd": 0, "bbox": [2, 191, 54, 149], "area": 3539}, {"id": 5134430, "category_id": 75, "iscrowd": 0, "bbox": [89, 341, 41, 14], "area": 372}, {"id": 1252645, "category_id": 78, "iscrowd": 0, "bbox": [297, 159, 84, 63], "area": 4925}, {"id": 790808, "category_id": 79, "iscrowd": 0, "bbox": [300, 159, 85, 142], "area": 3431}, {"id": 8809821, "category_id": 81, "iscrowd": 0, "bbox": [145, 294, 15, 10], "area": 96}, {"id": 3951448, "category_id": 81, "iscrowd": 0, "bbox": [123, 273, 44, 30], "area": 557}, {"id": 4745080, "category_id": 107, "iscrowd": 0, "bbox": [0, 181, 538, 240], "area": 50402}, {"id": 5005697, "category_id": 112, "iscrowd": 0, "bbox": [506, 122, 88, 221], "area": 14917}, {"id": 1325175, "category_id": 118, "iscrowd": 0, "bbox": [527, 335, 113, 93], "area": 7559}, {"id": 12771301, "category_id": 130, "iscrowd": 0, "bbox": [82, 0, 390, 79], "area": 10977}, {"id": 3756396, "category_id": 177, "iscrowd": 0, "bbox": [445, 107, 178, 238], "area": 7824}, {"id": 6450002, "category_id": 180, "iscrowd": 0, "bbox": [494, 163, 21, 41], "area": 623}, {"id": 4349808, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 63, 226], "area": 10672}, {"id": 2377326, "category_id": 186, "iscrowd": 0, "bbox": [18, 0, 622, 103], "area": 37658}, {"id": 995674, "category_id": 188, "iscrowd": 0, "bbox": [56, 47, 402, 241], "area": 40354}, {"id": 5534091, "category_id": 195, "iscrowd": 0, "bbox": [81, 253, 559, 140], "area": 5838}, {"id": 1714485, "category_id": 199, "iscrowd": 0, "bbox": [163, 86, 477, 256], "area": 20631}], "file_name": "000000246968.png", "image_id": 246968}, {"segments_info": [{"id": 5793387, "category_id": 85, "iscrowd": 0, "bbox": [338, 230, 43, 45], "area": 1206}, {"id": 14801874, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 151711}, {"id": 2372412, "category_id": 197, "iscrowd": 0, "bbox": [0, 16, 617, 464], "area": 154267}], "file_name": "000000247806.png", "image_id": 247806}, {"segments_info": [{"id": 3355450, "category_id": 21, "iscrowd": 0, "bbox": [310, 279, 34, 41], "area": 948}, {"id": 5726587, "category_id": 21, "iscrowd": 0, "bbox": [549, 272, 13, 19], "area": 190}, {"id": 2631727, "category_id": 21, "iscrowd": 0, "bbox": [565, 270, 36, 18], "area": 517}, {"id": 3091502, "category_id": 21, "iscrowd": 0, "bbox": [344, 262, 27, 15], "area": 324}, {"id": 3158589, "category_id": 21, "iscrowd": 0, "bbox": [362, 280, 16, 20], "area": 206}, {"id": 2434608, "category_id": 21, "iscrowd": 0, "bbox": [475, 299, 35, 25], "area": 688}, {"id": 2897486, "category_id": 21, "iscrowd": 0, "bbox": [627, 254, 13, 15], "area": 154}, {"id": 3621469, "category_id": 21, "iscrowd": 0, "bbox": [462, 269, 30, 24], "area": 424}, {"id": 4276299, "category_id": 21, "iscrowd": 0, "bbox": [597, 268, 22, 26], "area": 428}, {"id": 2106158, "category_id": 21, "iscrowd": 0, "bbox": [435, 296, 40, 41], "area": 1103}, {"id": 2368816, "category_id": 21, "iscrowd": 0, "bbox": [387, 287, 62, 42], "area": 1567}, {"id": 5065552, "category_id": 21, "iscrowd": 0, "bbox": [169, 266, 59, 37], "area": 1475}, {"id": 10856624, "category_id": 148, "iscrowd": 0, "bbox": [0, 331, 640, 94], "area": 21914}, {"id": 13090494, "category_id": 159, "iscrowd": 0, "bbox": [0, 198, 640, 227], "area": 91539}, {"id": 5330523, "category_id": 184, "iscrowd": 0, "bbox": [0, 41, 640, 232], "area": 57217}, {"id": 13286068, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 185], "area": 93003}], "file_name": "000000247838.png", "image_id": 247838}, {"segments_info": [{"id": 4871553, "category_id": 1, "iscrowd": 0, "bbox": [149, 239, 113, 349], "area": 23193}, {"id": 3560372, "category_id": 1, "iscrowd": 0, "bbox": [336, 98, 148, 202], "area": 12660}, {"id": 2571146, "category_id": 1, "iscrowd": 0, "bbox": [162, 207, 94, 120], "area": 1810}, {"id": 4214146, "category_id": 1, "iscrowd": 0, "bbox": [34, 209, 117, 388], "area": 27989}, {"id": 3028882, "category_id": 1, "iscrowd": 0, "bbox": [52, 56, 169, 498], "area": 26653}, {"id": 2963044, "category_id": 1, "iscrowd": 0, "bbox": [250, 241, 86, 336], "area": 19324}, {"id": 5000818, "category_id": 1, "iscrowd": 0, "bbox": [387, 215, 96, 342], "area": 18926}, {"id": 2502771, "category_id": 1, "iscrowd": 0, "bbox": [308, 200, 52, 113], "area": 3637}, {"id": 3685992, "category_id": 1, "iscrowd": 0, "bbox": [328, 241, 86, 331], "area": 17559}, {"id": 4871297, "category_id": 1, "iscrowd": 0, "bbox": [460, 223, 138, 335], "area": 21234}, {"id": 1516083, "category_id": 40, "iscrowd": 0, "bbox": [461, 404, 30, 52], "area": 848}, {"id": 2107457, "category_id": 40, "iscrowd": 0, "bbox": [148, 347, 60, 60], "area": 2403}, {"id": 2898774, "category_id": 40, "iscrowd": 0, "bbox": [297, 421, 45, 65], "area": 2196}, {"id": 3424335, "category_id": 40, "iscrowd": 0, "bbox": [376, 412, 40, 62], "area": 1564}, {"id": 1053732, "category_id": 40, "iscrowd": 0, "bbox": [120, 409, 40, 70], "area": 1834}, {"id": 1316119, "category_id": 40, "iscrowd": 0, "bbox": [556, 386, 36, 54], "area": 1544}, {"id": 3497816, "category_id": 145, "iscrowd": 0, "bbox": [0, 168, 612, 444], "area": 88243}, {"id": 3228737, "category_id": 184, "iscrowd": 0, "bbox": [0, 88, 612, 123], "area": 24440}, {"id": 15390406, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 612, 169], "area": 74554}], "file_name": "000000247917.png", "image_id": 247917}, {"segments_info": [{"id": 3354136, "category_id": 31, "iscrowd": 0, "bbox": [343, 389, 55, 38], "area": 1480}, {"id": 4473683, "category_id": 44, "iscrowd": 0, "bbox": [416, 246, 11, 27], "area": 185}, {"id": 5856647, "category_id": 47, "iscrowd": 0, "bbox": [311, 366, 15, 23], "area": 261}, {"id": 10459545, "category_id": 79, "iscrowd": 0, "bbox": [320, 249, 76, 110], "area": 4708}, {"id": 6250080, "category_id": 81, "iscrowd": 0, "bbox": [199, 260, 73, 22], "area": 821}, {"id": 12039092, "category_id": 82, "iscrowd": 0, "bbox": [427, 194, 109, 233], "area": 22526}, {"id": 5395553, "category_id": 107, "iscrowd": 0, "bbox": [170, 245, 186, 49], "area": 3579}, {"id": 8884123, "category_id": 130, "iscrowd": 0, "bbox": [216, 68, 158, 69], "area": 1866}, {"id": 7635606, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 511, 148], "area": 51025}, {"id": 3758471, "category_id": 188, "iscrowd": 0, "bbox": [156, 151, 303, 247], "area": 33593}, {"id": 5596289, "category_id": 190, "iscrowd": 0, "bbox": [155, 322, 350, 105], "area": 13973}, {"id": 9933211, "category_id": 195, "iscrowd": 0, "bbox": [202, 376, 22, 23], "area": 347}, {"id": 12567238, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 135218}], "file_name": "000000248111.png", "image_id": 248111}, {"segments_info": [{"id": 2894635, "category_id": 1, "iscrowd": 0, "bbox": [627, 208, 13, 80], "area": 700}, {"id": 2369576, "category_id": 1, "iscrowd": 0, "bbox": [261, 199, 42, 130], "area": 3155}, {"id": 2700593, "category_id": 43, "iscrowd": 0, "bbox": [236, 215, 35, 38], "area": 313}, {"id": 3095352, "category_id": 43, "iscrowd": 0, "bbox": [600, 257, 32, 15], "area": 289}, {"id": 2961461, "category_id": 128, "iscrowd": 0, "bbox": [569, 126, 71, 27], "area": 1414}, {"id": 3359033, "category_id": 138, "iscrowd": 0, "bbox": [0, 380, 362, 100], "area": 18198}, {"id": 3558719, "category_id": 145, "iscrowd": 0, "bbox": [0, 251, 640, 229], "area": 114679}, {"id": 4935241, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 305], "area": 147768}, {"id": 10590868, "category_id": 187, "iscrowd": 0, "bbox": [412, 0, 228, 95], "area": 20533}], "file_name": "000000248112.png", "image_id": 248112}, {"segments_info": [{"id": 1446156, "category_id": 1, "iscrowd": 0, "bbox": [358, 123, 69, 191], "area": 9327}, {"id": 1710102, "category_id": 1, "iscrowd": 0, "bbox": [255, 151, 128, 260], "area": 16439}, {"id": 9947895, "category_id": 10, "iscrowd": 0, "bbox": [300, 142, 21, 19], "area": 352}, {"id": 6729686, "category_id": 10, "iscrowd": 0, "bbox": [176, 30, 26, 39], "area": 859}, {"id": 4409692, "category_id": 28, "iscrowd": 0, "bbox": [284, 81, 142, 78], "area": 5331}, {"id": 5463405, "category_id": 31, "iscrowd": 0, "bbox": [256, 231, 52, 87], "area": 2750}, {"id": 8501201, "category_id": 130, "iscrowd": 0, "bbox": [130, 62, 228, 95], "area": 2105}, {"id": 7639992, "category_id": 159, "iscrowd": 0, "bbox": [0, 219, 427, 421], "area": 127866}, {"id": 8098490, "category_id": 187, "iscrowd": 0, "bbox": [221, 0, 206, 152], "area": 14123}, {"id": 4941451, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 427, 501], "area": 87230}], "file_name": "000000248284.png", "image_id": 248284}, {"segments_info": [{"id": 8881562, "category_id": 44, "iscrowd": 0, "bbox": [368, 0, 40, 84], "area": 2765}, {"id": 6250337, "category_id": 50, "iscrowd": 0, "bbox": [298, 246, 90, 64], "area": 1127}, {"id": 5598061, "category_id": 51, "iscrowd": 0, "bbox": [230, 298, 104, 85], "area": 6607}, {"id": 1513494, "category_id": 62, "iscrowd": 0, "bbox": [448, 1, 189, 326], "area": 19339}, {"id": 7238009, "category_id": 62, "iscrowd": 0, "bbox": [538, 362, 102, 118], "area": 9823}, {"id": 7236971, "category_id": 73, "iscrowd": 0, "bbox": [0, 9, 358, 317], "area": 43482}, {"id": 3881788, "category_id": 74, "iscrowd": 0, "bbox": [224, 385, 114, 79], "area": 6025}, {"id": 11644589, "category_id": 76, "iscrowd": 0, "bbox": [118, 127, 195, 160], "area": 14151}, {"id": 8947848, "category_id": 118, "iscrowd": 0, "bbox": [361, 34, 279, 446], "area": 42943}, {"id": 8227219, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 581, 480], "area": 123692}, {"id": 14993864, "category_id": 195, "iscrowd": 0, "bbox": [374, 59, 151, 90], "area": 7058}, {"id": 8886697, "category_id": 196, "iscrowd": 0, "bbox": [285, 177, 172, 133], "area": 9839}], "file_name": "000000248314.png", "image_id": 248314}, {"segments_info": [{"id": 4146531, "category_id": 1, "iscrowd": 0, "bbox": [485, 184, 12, 27], "area": 141}, {"id": 3555157, "category_id": 1, "iscrowd": 0, "bbox": [388, 192, 17, 26], "area": 330}, {"id": 5131871, "category_id": 1, "iscrowd": 0, "bbox": [416, 181, 42, 38], "area": 686}, {"id": 1842736, "category_id": 1, "iscrowd": 0, "bbox": [452, 187, 10, 25], "area": 150}, {"id": 5659249, "category_id": 1, "iscrowd": 0, "bbox": [442, 185, 12, 25], "area": 210}, {"id": 6911128, "category_id": 1, "iscrowd": 0, "bbox": [465, 196, 17, 31], "area": 327}, {"id": 4100260, "category_id": 1, "iscrowd": 0, "bbox": [329, 171, 61, 47], "area": 1193}, {"id": 2830408, "category_id": 1, "iscrowd": 0, "bbox": [417, 194, 13, 20], "area": 188}, {"id": 4277592, "category_id": 1, "iscrowd": 0, "bbox": [469, 187, 17, 34], "area": 324}, {"id": 5793391, "category_id": 9, "iscrowd": 0, "bbox": [194, 64, 306, 223], "area": 51842}, {"id": 7573661, "category_id": 148, "iscrowd": 0, "bbox": [0, 243, 500, 132], "area": 54462}, {"id": 3428676, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 268], "area": 77491}], "file_name": "000000248334.png", "image_id": 248334}, {"segments_info": [{"id": 3683145, "category_id": 1, "iscrowd": 0, "bbox": [0, 7, 252, 411], "area": 58153}, {"id": 5534341, "category_id": 51, "iscrowd": 0, "bbox": [554, 274, 85, 61], "area": 4157}, {"id": 2446236, "category_id": 59, "iscrowd": 0, "bbox": [273, 371, 250, 51], "area": 10142}, {"id": 1989203, "category_id": 64, "iscrowd": 0, "bbox": [194, 143, 43, 122], "area": 3006}, {"id": 5005698, "category_id": 100, "iscrowd": 0, "bbox": [224, 137, 341, 290], "area": 57916}, {"id": 8422531, "category_id": 176, "iscrowd": 0, "bbox": [83, 232, 557, 117], "area": 14967}, {"id": 10528163, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 176, 258], "area": 12145}, {"id": 11450308, "category_id": 188, "iscrowd": 0, "bbox": [173, 0, 467, 105], "area": 42199}, {"id": 4016463, "category_id": 189, "iscrowd": 0, "bbox": [177, 317, 463, 110], "area": 11041}, {"id": 4608089, "category_id": 195, "iscrowd": 0, "bbox": [248, 118, 161, 35], "area": 4166}, {"id": 2513572, "category_id": 196, "iscrowd": 0, "bbox": [289, 422, 85, 5], "area": 415}, {"id": 5069924, "category_id": 199, "iscrowd": 0, "bbox": [75, 0, 565, 278], "area": 43942}], "file_name": "000000248400.png", "image_id": 248400}, {"segments_info": [{"id": 8557476, "category_id": 1, "iscrowd": 0, "bbox": [370, 84, 216, 262], "area": 19736}, {"id": 6846861, "category_id": 1, "iscrowd": 0, "bbox": [182, 73, 132, 304], "area": 20483}, {"id": 7963796, "category_id": 1, "iscrowd": 0, "bbox": [0, 71, 184, 328], "area": 27070}, {"id": 5684148, "category_id": 37, "iscrowd": 0, "bbox": [515, 252, 22, 22], "area": 380}, {"id": 9935528, "category_id": 43, "iscrowd": 0, "bbox": [463, 205, 29, 54], "area": 756}, {"id": 7171443, "category_id": 43, "iscrowd": 0, "bbox": [166, 219, 21, 14], "area": 88}, {"id": 6386548, "category_id": 43, "iscrowd": 0, "bbox": [238, 58, 59, 123], "area": 3028}, {"id": 4410195, "category_id": 128, "iscrowd": 0, "bbox": [542, 185, 98, 74], "area": 3873}, {"id": 6922396, "category_id": 145, "iscrowd": 0, "bbox": [0, 268, 640, 159], "area": 60851}, {"id": 4348492, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 328], "area": 101636}, {"id": 15983824, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 172], "area": 26092}, {"id": 4814958, "category_id": 193, "iscrowd": 0, "bbox": [0, 248, 640, 102], "area": 6258}], "file_name": "000000248616.png", "image_id": 248616}, {"segments_info": [{"id": 8346442, "category_id": 73, "iscrowd": 0, "bbox": [3, 91, 426, 343], "area": 99238}, {"id": 4999241, "category_id": 74, "iscrowd": 0, "bbox": [461, 274, 158, 165], "area": 13765}, {"id": 9212819, "category_id": 189, "iscrowd": 0, "bbox": [0, 216, 640, 264], "area": 66542}, {"id": 10527136, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 365], "area": 126670}], "file_name": "000000248631.png", "image_id": 248631}, {"segments_info": [{"id": 10589330, "category_id": 1, "iscrowd": 0, "bbox": [146, 78, 268, 291], "area": 33644}, {"id": 2896439, "category_id": 39, "iscrowd": 0, "bbox": [222, 91, 138, 66], "area": 1996}, {"id": 3166313, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 149213}], "file_name": "000000248752.png", "image_id": 248752}, {"segments_info": [{"id": 5527914, "category_id": 1, "iscrowd": 0, "bbox": [238, 140, 8, 21], "area": 92}, {"id": 8685977, "category_id": 25, "iscrowd": 0, "bbox": [62, 132, 237, 336], "area": 21352}, {"id": 5131856, "category_id": 95, "iscrowd": 0, "bbox": [208, 156, 60, 27], "area": 532}, {"id": 3031601, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 375, 259], "area": 67836}, {"id": 8093829, "category_id": 185, "iscrowd": 0, "bbox": [21, 178, 354, 322], "area": 46301}, {"id": 8159881, "category_id": 191, "iscrowd": 0, "bbox": [0, 378, 196, 122], "area": 11168}, {"id": 7699848, "category_id": 194, "iscrowd": 0, "bbox": [0, 197, 375, 193], "area": 10471}, {"id": 8818075, "category_id": 198, "iscrowd": 0, "bbox": [0, 162, 375, 229], "area": 29405}], "file_name": "000000248810.png", "image_id": 248810}, {"segments_info": [{"id": 9160672, "category_id": 55, "iscrowd": 0, "bbox": [245, 52, 56, 35], "area": 1247}, {"id": 2647704, "category_id": 55, "iscrowd": 0, "bbox": [185, 164, 43, 41], "area": 977}, {"id": 3560050, "category_id": 55, "iscrowd": 0, "bbox": [278, 133, 64, 58], "area": 1779}, {"id": 4229041, "category_id": 55, "iscrowd": 0, "bbox": [200, 216, 72, 48], "area": 1562}, {"id": 1722168, "category_id": 56, "iscrowd": 0, "bbox": [344, 135, 45, 79], "area": 2448}, {"id": 3895136, "category_id": 56, "iscrowd": 0, "bbox": [124, 41, 93, 65], "area": 3697}, {"id": 4559229, "category_id": 56, "iscrowd": 0, "bbox": [93, 108, 106, 108], "area": 5899}, {"id": 1652783, "category_id": 56, "iscrowd": 0, "bbox": [278, 183, 53, 50], "area": 1780}, {"id": 3565150, "category_id": 56, "iscrowd": 0, "bbox": [198, 101, 64, 51], "area": 2213}, {"id": 2645836, "category_id": 56, "iscrowd": 0, "bbox": [298, 35, 53, 64], "area": 1973}, {"id": 4155482, "category_id": 196, "iscrowd": 0, "bbox": [43, 0, 414, 339], "area": 66303}], "file_name": "000000248980.png", "image_id": 248980}, {"segments_info": [{"id": 7965605, "category_id": 86, "iscrowd": 0, "bbox": [108, 197, 191, 247], "area": 30615}, {"id": 5549029, "category_id": 119, "iscrowd": 0, "bbox": [46, 41, 290, 255], "area": 32304}, {"id": 732319, "category_id": 189, "iscrowd": 0, "bbox": [0, 367, 394, 133], "area": 37604}, {"id": 7119558, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 394, 390], "area": 96337}], "file_name": "000000249025.png", "image_id": 249025}, {"segments_info": [{"id": 330019, "category_id": 47, "iscrowd": 0, "bbox": [210, 198, 12, 17], "area": 154}, {"id": 1403352, "category_id": 49, "iscrowd": 0, "bbox": [187, 232, 18, 4], "area": 47}, {"id": 265023, "category_id": 62, "iscrowd": 0, "bbox": [204, 295, 90, 78], "area": 4492}, {"id": 734087, "category_id": 62, "iscrowd": 0, "bbox": [539, 276, 101, 114], "area": 4668}, {"id": 732799, "category_id": 62, "iscrowd": 0, "bbox": [424, 71, 92, 159], "area": 2941}, {"id": 464723, "category_id": 62, "iscrowd": 0, "bbox": [98, 199, 88, 128], "area": 4293}, {"id": 733566, "category_id": 62, "iscrowd": 0, "bbox": [2, 157, 68, 68], "area": 2140}, {"id": 598377, "category_id": 62, "iscrowd": 0, "bbox": [337, 225, 89, 85], "area": 3246}, {"id": 866982, "category_id": 67, "iscrowd": 0, "bbox": [183, 199, 178, 69], "area": 7262}, {"id": 532607, "category_id": 85, "iscrowd": 0, "bbox": [587, 89, 12, 22], "area": 178}, {"id": 598632, "category_id": 88, "iscrowd": 0, "bbox": [108, 156, 76, 121], "area": 6371}, {"id": 866673, "category_id": 88, "iscrowd": 0, "bbox": [402, 63, 108, 121], "area": 7637}, {"id": 1067180, "category_id": 88, "iscrowd": 0, "bbox": [186, 155, 103, 58], "area": 3671}, {"id": 800633, "category_id": 88, "iscrowd": 0, "bbox": [330, 172, 97, 99], "area": 5299}, {"id": 600423, "category_id": 88, "iscrowd": 0, "bbox": [546, 178, 94, 143], "area": 8466}, {"id": 533344, "category_id": 88, "iscrowd": 0, "bbox": [198, 220, 103, 106], "area": 6554}, {"id": 731768, "category_id": 88, "iscrowd": 0, "bbox": [0, 40, 77, 131], "area": 6184}, {"id": 332577, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 640, 179], "area": 18168}, {"id": 598405, "category_id": 156, "iscrowd": 0, "bbox": [541, 187, 41, 85], "area": 2126}, {"id": 928862, "category_id": 181, "iscrowd": 0, "bbox": [21, 12, 428, 83], "area": 2762}, {"id": 1060714, "category_id": 184, "iscrowd": 0, "bbox": [191, 0, 123, 204], "area": 10987}, {"id": 1135794, "category_id": 190, "iscrowd": 0, "bbox": [0, 167, 640, 260], "area": 94340}, {"id": 2196442, "category_id": 199, "iscrowd": 0, "bbox": [51, 0, 589, 240], "area": 69248}], "file_name": "000000249129.png", "image_id": 249129}, {"segments_info": [{"id": 3947577, "category_id": 1, "iscrowd": 0, "bbox": [347, 147, 52, 59], "area": 1244}, {"id": 4736059, "category_id": 1, "iscrowd": 0, "bbox": [140, 211, 60, 203], "area": 8212}, {"id": 5391162, "category_id": 1, "iscrowd": 0, "bbox": [461, 264, 14, 35], "area": 288}, {"id": 1184532, "category_id": 77, "iscrowd": 0, "bbox": [156, 226, 11, 13], "area": 49}, {"id": 4013102, "category_id": 161, "iscrowd": 0, "bbox": [134, 217, 506, 210], "area": 38622}, {"id": 7240596, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 470, 287], "area": 84442}, {"id": 13097437, "category_id": 176, "iscrowd": 0, "bbox": [0, 287, 142, 23], "area": 2685}, {"id": 11317932, "category_id": 181, "iscrowd": 0, "bbox": [64, 186, 91, 105], "area": 8130}, {"id": 9146772, "category_id": 185, "iscrowd": 0, "bbox": [0, 119, 640, 308], "area": 68017}, {"id": 14864575, "category_id": 187, "iscrowd": 0, "bbox": [460, 0, 180, 162], "area": 25408}, {"id": 8026222, "category_id": 197, "iscrowd": 0, "bbox": [35, 0, 436, 159], "area": 15870}, {"id": 11453898, "category_id": 199, "iscrowd": 0, "bbox": [385, 358, 69, 37], "area": 1451}], "file_name": "000000249180.png", "image_id": 249180}, {"segments_info": [{"id": 5986415, "category_id": 6, "iscrowd": 0, "bbox": [93, 184, 426, 272], "area": 98176}, {"id": 9145739, "category_id": 149, "iscrowd": 0, "bbox": [0, 427, 640, 52], "area": 22521}, {"id": 8424610, "category_id": 151, "iscrowd": 0, "bbox": [36, 154, 530, 120], "area": 7355}, {"id": 10783071, "category_id": 166, "iscrowd": 0, "bbox": [508, 296, 62, 46], "area": 1130}, {"id": 5668760, "category_id": 171, "iscrowd": 0, "bbox": [0, 325, 93, 61], "area": 690}, {"id": 4348752, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 125856}, {"id": 6449768, "category_id": 185, "iscrowd": 0, "bbox": [512, 322, 121, 92], "area": 7959}, {"id": 16316920, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 258], "area": 30901}, {"id": 8952479, "category_id": 191, "iscrowd": 0, "bbox": [482, 417, 158, 39], "area": 2757}, {"id": 3499860, "category_id": 193, "iscrowd": 0, "bbox": [43, 373, 597, 60], "area": 2148}, {"id": 8885138, "category_id": 197, "iscrowd": 0, "bbox": [506, 234, 112, 192], "area": 4297}], "file_name": "000000249219.png", "image_id": 249219}, {"segments_info": [{"id": 8688521, "category_id": 64, "iscrowd": 0, "bbox": [290, 223, 101, 147], "area": 7164}, {"id": 7637634, "category_id": 64, "iscrowd": 0, "bbox": [258, 256, 31, 26], "area": 519}, {"id": 8488596, "category_id": 65, "iscrowd": 0, "bbox": [3, 199, 254, 419], "area": 96956}, {"id": 5922412, "category_id": 93, "iscrowd": 0, "bbox": [0, 272, 248, 353], "area": 3157}, {"id": 7768993, "category_id": 118, "iscrowd": 0, "bbox": [242, 348, 173, 277], "area": 20103}, {"id": 8886949, "category_id": 189, "iscrowd": 0, "bbox": [233, 243, 110, 159], "area": 5484}, {"id": 10527384, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 415, 383], "area": 102729}, {"id": 10791338, "category_id": 200, "iscrowd": 0, "bbox": [245, 383, 155, 69], "area": 570}], "file_name": "000000249550.png", "image_id": 249550}, {"segments_info": [{"id": 5917493, "category_id": 1, "iscrowd": 0, "bbox": [353, 196, 28, 28], "area": 534}, {"id": 5393723, "category_id": 7, "iscrowd": 0, "bbox": [506, 179, 133, 95], "area": 9220}, {"id": 6381646, "category_id": 7, "iscrowd": 0, "bbox": [1, 55, 506, 396], "area": 143549}, {"id": 8029812, "category_id": 125, "iscrowd": 0, "bbox": [438, 289, 202, 172], "area": 10210}, {"id": 4736053, "category_id": 147, "iscrowd": 0, "bbox": [288, 213, 352, 248], "area": 20481}, {"id": 13885399, "category_id": 187, "iscrowd": 0, "bbox": [253, 46, 23, 20], "area": 276}, {"id": 9743000, "category_id": 191, "iscrowd": 0, "bbox": [0, 221, 347, 240], "area": 33751}, {"id": 8689538, "category_id": 197, "iscrowd": 0, "bbox": [551, 271, 27, 21], "area": 256}], "file_name": "000000249643.png", "image_id": 249643}, {"segments_info": [{"id": 9336436, "category_id": 1, "iscrowd": 0, "bbox": [257, 264, 4, 9], "area": 23}, {"id": 3944780, "category_id": 1, "iscrowd": 0, "bbox": [337, 234, 7, 13], "area": 23}, {"id": 6643017, "category_id": 1, "iscrowd": 0, "bbox": [95, 307, 5, 12], "area": 34}, {"id": 7627624, "category_id": 1, "iscrowd": 0, "bbox": [527, 192, 8, 9], "area": 47}, {"id": 9340285, "category_id": 1, "iscrowd": 0, "bbox": [246, 252, 5, 9], "area": 32}, {"id": 6510954, "category_id": 1, "iscrowd": 0, "bbox": [99, 335, 7, 11], "area": 48}, {"id": 4534834, "category_id": 1, "iscrowd": 0, "bbox": [344, 232, 7, 14], "area": 40}, {"id": 8683651, "category_id": 1, "iscrowd": 0, "bbox": [90, 331, 9, 14], "area": 74}, {"id": 6247506, "category_id": 1, "iscrowd": 0, "bbox": [299, 121, 46, 58], "area": 1632}, {"id": 5915226, "category_id": 1, "iscrowd": 0, "bbox": [349, 232, 3, 4], "area": 9}, {"id": 7697262, "category_id": 1, "iscrowd": 0, "bbox": [317, 237, 4, 7], "area": 15}, {"id": 8480616, "category_id": 35, "iscrowd": 0, "bbox": [279, 164, 92, 26], "area": 776}, {"id": 6119263, "category_id": 128, "iscrowd": 0, "bbox": [592, 165, 33, 30], "area": 459}, {"id": 13419968, "category_id": 159, "iscrowd": 0, "bbox": [0, 173, 640, 255], "area": 125679}, {"id": 4278084, "category_id": 184, "iscrowd": 0, "bbox": [0, 136, 640, 172], "area": 19768}, {"id": 11754016, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 259], "area": 123342}], "file_name": "000000249786.png", "image_id": 249786}, {"segments_info": [{"id": 8156551, "category_id": 1, "iscrowd": 0, "bbox": [237, 185, 137, 418], "area": 34895}, {"id": 4413000, "category_id": 7, "iscrowd": 0, "bbox": [1, 1, 639, 597], "area": 243073}, {"id": 12500645, "category_id": 28, "iscrowd": 0, "bbox": [142, 144, 263, 150], "area": 20266}, {"id": 4865888, "category_id": 31, "iscrowd": 0, "bbox": [220, 250, 65, 154], "area": 4022}, {"id": 7892360, "category_id": 77, "iscrowd": 0, "bbox": [327, 287, 16, 15], "area": 150}, {"id": 854304, "category_id": 147, "iscrowd": 0, "bbox": [0, 403, 555, 162], "area": 55339}, {"id": 7172735, "category_id": 181, "iscrowd": 0, "bbox": [0, 40, 640, 244], "area": 1267}, {"id": 1447471, "category_id": 191, "iscrowd": 0, "bbox": [0, 555, 640, 85], "area": 45803}], "file_name": "000000250127.png", "image_id": 250127}, {"segments_info": [{"id": 6054791, "category_id": 1, "iscrowd": 0, "bbox": [153, 185, 257, 326], "area": 47157}, {"id": 8821442, "category_id": 1, "iscrowd": 0, "bbox": [0, 452, 31, 188], "area": 2492}, {"id": 3489632, "category_id": 1, "iscrowd": 0, "bbox": [448, 219, 32, 140], "area": 2952}, {"id": 7371430, "category_id": 1, "iscrowd": 0, "bbox": [427, 227, 43, 64], "area": 1306}, {"id": 5000026, "category_id": 1, "iscrowd": 0, "bbox": [56, 198, 108, 356], "area": 12387}, {"id": 10724786, "category_id": 1, "iscrowd": 0, "bbox": [0, 192, 159, 448], "area": 27740}, {"id": 7043226, "category_id": 1, "iscrowd": 0, "bbox": [330, 249, 58, 79], "area": 2067}, {"id": 3949411, "category_id": 1, "iscrowd": 0, "bbox": [351, 209, 38, 47], "area": 1035}, {"id": 6056327, "category_id": 1, "iscrowd": 0, "bbox": [366, 236, 114, 240], "area": 13264}, {"id": 9476784, "category_id": 1, "iscrowd": 0, "bbox": [0, 229, 22, 47], "area": 444}, {"id": 14605532, "category_id": 28, "iscrowd": 0, "bbox": [3, 8, 428, 143], "area": 45462}, {"id": 5658710, "category_id": 31, "iscrowd": 0, "bbox": [406, 401, 49, 232], "area": 4917}, {"id": 3947067, "category_id": 31, "iscrowd": 0, "bbox": [146, 312, 285, 322], "area": 38674}, {"id": 12177892, "category_id": 47, "iscrowd": 0, "bbox": [73, 306, 26, 37], "area": 538}, {"id": 3748666, "category_id": 92, "iscrowd": 0, "bbox": [435, 201, 45, 35], "area": 602}, {"id": 6645106, "category_id": 184, "iscrowd": 0, "bbox": [0, 144, 71, 96], "area": 3985}, {"id": 5133167, "category_id": 186, "iscrowd": 0, "bbox": [9, 120, 471, 122], "area": 15208}, {"id": 16247765, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 63, 58], "area": 1906}, {"id": 4145221, "category_id": 191, "iscrowd": 0, "bbox": [0, 482, 196, 158], "area": 14119}, {"id": 5198177, "category_id": 197, "iscrowd": 0, "bbox": [0, 143, 418, 393], "area": 24877}], "file_name": "000000250137.png", "image_id": 250137}, {"segments_info": [{"id": 7897485, "category_id": 16, "iscrowd": 0, "bbox": [198, 127, 182, 200], "area": 11798}, {"id": 7501954, "category_id": 16, "iscrowd": 0, "bbox": [88, 123, 152, 175], "area": 8542}, {"id": 10657950, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 457], "area": 184766}, {"id": 4877703, "category_id": 198, "iscrowd": 0, "bbox": [0, 300, 614, 157], "area": 42338}], "file_name": "000000250205.png", "image_id": 250205}, {"segments_info": [{"id": 4934475, "category_id": 1, "iscrowd": 0, "bbox": [207, 43, 35, 88], "area": 2313}, {"id": 7237230, "category_id": 1, "iscrowd": 0, "bbox": [121, 86, 46, 108], "area": 2893}, {"id": 9342606, "category_id": 1, "iscrowd": 0, "bbox": [373, 132, 54, 133], "area": 3444}, {"id": 9474192, "category_id": 1, "iscrowd": 0, "bbox": [205, 191, 63, 137], "area": 5193}, {"id": 4737096, "category_id": 1, "iscrowd": 0, "bbox": [246, 41, 57, 90], "area": 2693}, {"id": 5197647, "category_id": 1, "iscrowd": 0, "bbox": [173, 276, 86, 135], "area": 7196}, {"id": 10724259, "category_id": 1, "iscrowd": 0, "bbox": [343, 183, 64, 139], "area": 4374}, {"id": 10790052, "category_id": 1, "iscrowd": 0, "bbox": [557, 197, 76, 173], "area": 6433}, {"id": 7303023, "category_id": 1, "iscrowd": 0, "bbox": [343, 78, 55, 105], "area": 2825}, {"id": 7434609, "category_id": 1, "iscrowd": 0, "bbox": [267, 136, 55, 130], "area": 2993}, {"id": 5460819, "category_id": 1, "iscrowd": 0, "bbox": [286, 90, 53, 139], "area": 3014}, {"id": 8553090, "category_id": 1, "iscrowd": 0, "bbox": [462, 95, 66, 101], "area": 3272}, {"id": 7237224, "category_id": 1, "iscrowd": 0, "bbox": [2, 187, 69, 198], "area": 8512}, {"id": 7105644, "category_id": 1, "iscrowd": 1, "bbox": [0, 34, 640, 389], "area": 167442}, {"id": 6513507, "category_id": 32, "iscrowd": 0, "bbox": [162, 78, 9, 24], "area": 104}, {"id": 5789784, "category_id": 32, "iscrowd": 0, "bbox": [496, 317, 11, 15], "area": 83}, {"id": 7566195, "category_id": 32, "iscrowd": 0, "bbox": [357, 310, 10, 22], "area": 137}, {"id": 8355711, "category_id": 32, "iscrowd": 0, "bbox": [559, 137, 7, 15], "area": 78}, {"id": 8684676, "category_id": 32, "iscrowd": 0, "bbox": [425, 312, 13, 19], "area": 143}, {"id": 6118749, "category_id": 32, "iscrowd": 0, "bbox": [416, 122, 9, 8], "area": 35}, {"id": 6776679, "category_id": 32, "iscrowd": 0, "bbox": [330, 80, 6, 9], "area": 39}, {"id": 8882055, "category_id": 32, "iscrowd": 0, "bbox": [270, 80, 15, 7], "area": 69}, {"id": 3947580, "category_id": 32, "iscrowd": 0, "bbox": [86, 126, 9, 11], "area": 75}, {"id": 5329233, "category_id": 32, "iscrowd": 0, "bbox": [369, 230, 12, 45], "area": 334}, {"id": 9013641, "category_id": 32, "iscrowd": 0, "bbox": [449, 89, 13, 38], "area": 290}, {"id": 8289918, "category_id": 32, "iscrowd": 0, "bbox": [287, 309, 7, 21], "area": 92}, {"id": 4539717, "category_id": 32, "iscrowd": 0, "bbox": [158, 309, 6, 17], "area": 87}, {"id": 10921638, "category_id": 190, "iscrowd": 0, "bbox": [0, 206, 640, 220], "area": 9758}, {"id": 5460818, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 179], "area": 36612}], "file_name": "000000250282.png", "image_id": 250282}, {"segments_info": [{"id": 5392983, "category_id": 1, "iscrowd": 0, "bbox": [264, 299, 190, 67], "area": 5933}, {"id": 4019032, "category_id": 27, "iscrowd": 0, "bbox": [239, 288, 77, 33], "area": 776}, {"id": 4156571, "category_id": 28, "iscrowd": 0, "bbox": [204, 107, 285, 235], "area": 18536}, {"id": 4341573, "category_id": 31, "iscrowd": 0, "bbox": [245, 314, 20, 14], "area": 155}, {"id": 2825502, "category_id": 31, "iscrowd": 0, "bbox": [219, 307, 33, 33], "area": 762}, {"id": 7166505, "category_id": 31, "iscrowd": 0, "bbox": [180, 306, 43, 39], "area": 1172}, {"id": 12632006, "category_id": 154, "iscrowd": 0, "bbox": [0, 119, 640, 362], "area": 188342}, {"id": 11571083, "category_id": 168, "iscrowd": 0, "bbox": [344, 286, 195, 111], "area": 6717}, {"id": 12224884, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 130], "area": 78028}, {"id": 8489345, "category_id": 193, "iscrowd": 0, "bbox": [0, 110, 596, 36], "area": 6554}], "file_name": "000000250619.png", "image_id": 250619}, {"segments_info": [{"id": 5135220, "category_id": 24, "iscrowd": 0, "bbox": [20, 163, 75, 46], "area": 2147}, {"id": 5004401, "category_id": 24, "iscrowd": 0, "bbox": [122, 113, 408, 279], "area": 49740}, {"id": 2704457, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 132], "area": 57351}, {"id": 13750481, "category_id": 187, "iscrowd": 0, "bbox": [309, 0, 216, 25], "area": 2693}, {"id": 6194583, "category_id": 193, "iscrowd": 0, "bbox": [0, 68, 640, 412], "area": 194844}], "file_name": "000000250758.png", "image_id": 250758}, {"segments_info": [{"id": 9869230, "category_id": 48, "iscrowd": 0, "bbox": [42, 0, 351, 266], "area": 11575}, {"id": 10526640, "category_id": 49, "iscrowd": 0, "bbox": [1, 44, 406, 153], "area": 9849}, {"id": 5991057, "category_id": 54, "iscrowd": 0, "bbox": [114, 63, 386, 341], "area": 100827}, {"id": 1199501, "category_id": 57, "iscrowd": 0, "bbox": [443, 92, 19, 28], "area": 242}, {"id": 12628680, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 498, 399], "area": 39979}, {"id": 11246511, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 410], "area": 2192}, {"id": 5531508, "category_id": 196, "iscrowd": 0, "bbox": [264, 404, 236, 6], "area": 1414}], "file_name": "000000250766.png", "image_id": 250766}, {"segments_info": [{"id": 657928, "category_id": 1, "iscrowd": 0, "bbox": [212, 1, 203, 129], "area": 20602}, {"id": 5000791, "category_id": 1, "iscrowd": 0, "bbox": [416, 1, 224, 163], "area": 27075}, {"id": 6645102, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 208, 307], "area": 30173}, {"id": 7104870, "category_id": 54, "iscrowd": 0, "bbox": [361, 129, 140, 173], "area": 10047}, {"id": 3360320, "category_id": 54, "iscrowd": 0, "bbox": [176, 163, 173, 157], "area": 9196}, {"id": 5331795, "category_id": 84, "iscrowd": 0, "bbox": [50, 115, 97, 66], "area": 2778}, {"id": 1716768, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 66161}, {"id": 6121327, "category_id": 195, "iscrowd": 0, "bbox": [0, 101, 509, 325], "area": 96615}], "file_name": "000000250901.png", "image_id": 250901}, {"segments_info": [{"id": 5068120, "category_id": 70, "iscrowd": 0, "bbox": [133, 126, 223, 407], "area": 70728}, {"id": 8491936, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 480, 343], "area": 99117}, {"id": 5530475, "category_id": 190, "iscrowd": 0, "bbox": [43, 320, 412, 320], "area": 77300}, {"id": 2571597, "category_id": 199, "iscrowd": 0, "bbox": [0, 178, 480, 462], "area": 53121}], "file_name": "000000251065.png", "image_id": 251065}, {"segments_info": [{"id": 5275056, "category_id": 54, "iscrowd": 0, "bbox": [67, 173, 433, 157], "area": 49351}, {"id": 5266010, "category_id": 100, "iscrowd": 0, "bbox": [0, 0, 500, 344], "area": 63754}, {"id": 4544866, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 18812}, {"id": 11976906, "category_id": 195, "iscrowd": 0, "bbox": [218, 317, 137, 48], "area": 4260}, {"id": 4806759, "category_id": 196, "iscrowd": 0, "bbox": [17, 38, 461, 185], "area": 44697}], "file_name": "000000251119.png", "image_id": 251119}, {"segments_info": [{"id": 5065309, "category_id": 1, "iscrowd": 0, "bbox": [125, 202, 88, 220], "area": 6949}, {"id": 7896217, "category_id": 1, "iscrowd": 0, "bbox": [191, 275, 78, 89], "area": 3581}, {"id": 5001067, "category_id": 2, "iscrowd": 0, "bbox": [182, 209, 33, 107], "area": 2622}, {"id": 4735825, "category_id": 2, "iscrowd": 0, "bbox": [172, 280, 181, 185], "area": 17164}, {"id": 7308448, "category_id": 84, "iscrowd": 0, "bbox": [15, 54, 337, 420], "area": 106700}, {"id": 6783134, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 50106}], "file_name": "000000251140.png", "image_id": 251140}, {"segments_info": [{"id": 7239348, "category_id": 57, "iscrowd": 0, "bbox": [433, 309, 190, 283], "area": 15744}, {"id": 7767187, "category_id": 67, "iscrowd": 0, "bbox": [3, 3, 637, 209], "area": 90400}, {"id": 8226456, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 223], "area": 7051}, {"id": 9744290, "category_id": 196, "iscrowd": 0, "bbox": [0, 21, 640, 194], "area": 38552}], "file_name": "000000251537.png", "image_id": 251537}, {"segments_info": [{"id": 5594212, "category_id": 1, "iscrowd": 0, "bbox": [42, 8, 597, 412], "area": 111937}, {"id": 9279391, "category_id": 18, "iscrowd": 0, "bbox": [191, 128, 449, 297], "area": 75890}, {"id": 6516343, "category_id": 63, "iscrowd": 0, "bbox": [0, 101, 171, 320], "area": 33691}], "file_name": "000000251572.png", "image_id": 251572}, {"segments_info": [{"id": 4353964, "category_id": 1, "iscrowd": 0, "bbox": [0, 105, 500, 266], "area": 48224}, {"id": 6847128, "category_id": 84, "iscrowd": 0, "bbox": [470, 88, 30, 62], "area": 1111}, {"id": 4347765, "category_id": 87, "iscrowd": 0, "bbox": [365, 162, 135, 143], "area": 3945}, {"id": 12965858, "category_id": 100, "iscrowd": 0, "bbox": [0, 22, 59, 151], "area": 5399}, {"id": 4290470, "category_id": 189, "iscrowd": 0, "bbox": [13, 4, 487, 371], "area": 54411}, {"id": 12701400, "category_id": 195, "iscrowd": 0, "bbox": [405, 69, 95, 102], "area": 3070}], "file_name": "000000251824.png", "image_id": 251824}, {"segments_info": [{"id": 5071205, "category_id": 19, "iscrowd": 0, "bbox": [277, 36, 258, 411], "area": 55631}, {"id": 1983816, "category_id": 184, "iscrowd": 0, "bbox": [0, 89, 640, 369], "area": 68789}, {"id": 12565429, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 128], "area": 66878}, {"id": 2779499, "category_id": 193, "iscrowd": 0, "bbox": [0, 100, 613, 358], "area": 69068}], "file_name": "000000252216.png", "image_id": 252216}, {"segments_info": [{"id": 8160405, "category_id": 1, "iscrowd": 0, "bbox": [10, 167, 122, 227], "area": 7772}, {"id": 4996146, "category_id": 1, "iscrowd": 0, "bbox": [510, 171, 124, 216], "area": 11341}, {"id": 6446170, "category_id": 1, "iscrowd": 0, "bbox": [326, 175, 72, 197], "area": 8384}, {"id": 7893105, "category_id": 10, "iscrowd": 0, "bbox": [337, 44, 61, 57], "area": 3188}, {"id": 3101277, "category_id": 28, "iscrowd": 0, "bbox": [561, 90, 79, 67], "area": 2944}, {"id": 4009761, "category_id": 31, "iscrowd": 0, "bbox": [46, 213, 34, 50], "area": 611}, {"id": 8748406, "category_id": 47, "iscrowd": 0, "bbox": [345, 226, 11, 22], "area": 140}, {"id": 8947339, "category_id": 191, "iscrowd": 0, "bbox": [0, 325, 640, 103], "area": 35051}, {"id": 4670528, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 410], "area": 49423}, {"id": 10320957, "category_id": 199, "iscrowd": 0, "bbox": [32, 0, 466, 367], "area": 109152}], "file_name": "000000252219.png", "image_id": 252219}, {"segments_info": [{"id": 2966112, "category_id": 1, "iscrowd": 0, "bbox": [53, 48, 186, 413], "area": 25045}, {"id": 5857395, "category_id": 1, "iscrowd": 0, "bbox": [230, 80, 75, 166], "area": 5120}, {"id": 13818305, "category_id": 47, "iscrowd": 0, "bbox": [338, 124, 24, 40], "area": 774}, {"id": 5255954, "category_id": 65, "iscrowd": 0, "bbox": [1, 3, 163, 492], "area": 49881}, {"id": 9933435, "category_id": 65, "iscrowd": 0, "bbox": [75, 1, 217, 490], "area": 35963}, {"id": 6902840, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 239, 500], "area": 2341}, {"id": 15065323, "category_id": 181, "iscrowd": 0, "bbox": [237, 0, 138, 60], "area": 6152}, {"id": 11842754, "category_id": 189, "iscrowd": 0, "bbox": [255, 110, 120, 79], "area": 4141}, {"id": 4669517, "category_id": 190, "iscrowd": 0, "bbox": [237, 154, 138, 346], "area": 34105}, {"id": 10399687, "category_id": 195, "iscrowd": 0, "bbox": [269, 111, 41, 63], "area": 1054}], "file_name": "000000252294.png", "image_id": 252294}, {"segments_info": [{"id": 7819744, "category_id": 13, "iscrowd": 0, "bbox": [83, 1, 455, 454], "area": 163683}, {"id": 2635563, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 113971}, {"id": 4940378, "category_id": 193, "iscrowd": 0, "bbox": [0, 321, 280, 159], "area": 26593}], "file_name": "000000252332.png", "image_id": 252332}, {"segments_info": [{"id": 3882041, "category_id": 1, "iscrowd": 0, "bbox": [137, 277, 58, 146], "area": 3875}, {"id": 11314338, "category_id": 35, "iscrowd": 0, "bbox": [115, 406, 112, 26], "area": 417}, {"id": 14340812, "category_id": 159, "iscrowd": 0, "bbox": [0, 300, 375, 200], "area": 56705}, {"id": 2831152, "category_id": 184, "iscrowd": 0, "bbox": [0, 174, 375, 180], "area": 26919}, {"id": 10255194, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 375, 241], "area": 81502}, {"id": 12170156, "category_id": 192, "iscrowd": 0, "bbox": [0, 194, 375, 120], "area": 17921}], "file_name": "000000252507.png", "image_id": 252507}, {"segments_info": [{"id": 6509384, "category_id": 1, "iscrowd": 0, "bbox": [46, 459, 22, 69], "area": 1077}, {"id": 5654586, "category_id": 1, "iscrowd": 0, "bbox": [64, 457, 24, 84], "area": 1247}, {"id": 6902337, "category_id": 1, "iscrowd": 0, "bbox": [88, 463, 23, 75], "area": 1224}, {"id": 5588541, "category_id": 1, "iscrowd": 0, "bbox": [0, 458, 18, 73], "area": 922}, {"id": 7826277, "category_id": 1, "iscrowd": 0, "bbox": [83, 464, 10, 64], "area": 342}, {"id": 4932154, "category_id": 1, "iscrowd": 0, "bbox": [216, 451, 55, 174], "area": 3888}, {"id": 6973295, "category_id": 1, "iscrowd": 0, "bbox": [145, 491, 35, 124], "area": 2110}, {"id": 8680043, "category_id": 1, "iscrowd": 0, "bbox": [166, 472, 72, 165], "area": 7517}, {"id": 5923192, "category_id": 1, "iscrowd": 0, "bbox": [61, 458, 10, 14], "area": 88}, {"id": 8421743, "category_id": 1, "iscrowd": 0, "bbox": [43, 454, 10, 18], "area": 118}, {"id": 8876901, "category_id": 1, "iscrowd": 0, "bbox": [16, 464, 15, 58], "area": 464}, {"id": 5852226, "category_id": 1, "iscrowd": 0, "bbox": [25, 459, 22, 70], "area": 915}, {"id": 7630943, "category_id": 1, "iscrowd": 0, "bbox": [107, 460, 28, 70], "area": 1214}, {"id": 16447993, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 159, 453], "area": 42633}, {"id": 8354414, "category_id": 191, "iscrowd": 0, "bbox": [0, 486, 480, 154], "area": 34309}, {"id": 5857137, "category_id": 197, "iscrowd": 0, "bbox": [52, 0, 428, 581], "area": 206893}], "file_name": "000000252559.png", "image_id": 252559}, {"segments_info": [{"id": 6843526, "category_id": 1, "iscrowd": 0, "bbox": [302, 29, 72, 48], "area": 1589}, {"id": 4604483, "category_id": 1, "iscrowd": 0, "bbox": [165, 31, 149, 227], "area": 9467}, {"id": 13482857, "category_id": 42, "iscrowd": 0, "bbox": [136, 197, 194, 113], "area": 4422}, {"id": 5657171, "category_id": 42, "iscrowd": 0, "bbox": [337, 64, 31, 10], "area": 117}, {"id": 11382175, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 378], "area": 225942}], "file_name": "000000252701.png", "image_id": 252701}, {"segments_info": [{"id": 5002579, "category_id": 1, "iscrowd": 0, "bbox": [71, 255, 7, 9], "area": 41}, {"id": 5393753, "category_id": 1, "iscrowd": 0, "bbox": [207, 249, 6, 17], "area": 79}, {"id": 6117467, "category_id": 1, "iscrowd": 0, "bbox": [269, 184, 31, 107], "area": 1699}, {"id": 13138466, "category_id": 34, "iscrowd": 0, "bbox": [206, 522, 182, 95], "area": 13104}, {"id": 4671042, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 426, 344], "area": 25876}, {"id": 15655898, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 426, 239], "area": 88112}, {"id": 2778717, "category_id": 193, "iscrowd": 0, "bbox": [0, 255, 426, 385], "area": 143529}], "file_name": "000000252716.png", "image_id": 252716}, {"segments_info": [{"id": 4211798, "category_id": 1, "iscrowd": 0, "bbox": [0, 133, 83, 482], "area": 27864}, {"id": 7104875, "category_id": 1, "iscrowd": 0, "bbox": [63, 0, 86, 45], "area": 2644}, {"id": 7501456, "category_id": 1, "iscrowd": 0, "bbox": [75, 56, 284, 584], "area": 89061}, {"id": 2369316, "category_id": 15, "iscrowd": 0, "bbox": [50, 357, 110, 203], "area": 17724}, {"id": 3290180, "category_id": 43, "iscrowd": 0, "bbox": [165, 531, 20, 23], "area": 329}, {"id": 4804922, "category_id": 92, "iscrowd": 0, "bbox": [0, 30, 418, 497], "area": 89224}, {"id": 2239824, "category_id": 145, "iscrowd": 0, "bbox": [47, 557, 109, 16], "area": 1324}, {"id": 3356210, "category_id": 185, "iscrowd": 0, "bbox": [98, 0, 320, 65], "area": 11619}], "file_name": "000000252776.png", "image_id": 252776}, {"segments_info": [{"id": 5128832, "category_id": 6, "iscrowd": 0, "bbox": [0, 1, 640, 420], "area": 267683}], "file_name": "000000253002.png", "image_id": 253002}, {"segments_info": [{"id": 1380105, "category_id": 1, "iscrowd": 0, "bbox": [419, 2, 81, 319], "area": 17359}, {"id": 3092006, "category_id": 1, "iscrowd": 0, "bbox": [2, 1, 82, 276], "area": 7752}, {"id": 1514525, "category_id": 18, "iscrowd": 0, "bbox": [148, 25, 309, 303], "area": 62424}], "file_name": "000000253386.png", "image_id": 253386}, {"segments_info": [{"id": 4009558, "category_id": 63, "iscrowd": 0, "bbox": [0, 2, 640, 471], "area": 179721}, {"id": 6912925, "category_id": 88, "iscrowd": 0, "bbox": [118, 11, 403, 456], "area": 117326}, {"id": 6509717, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 5706}, {"id": 3154259, "category_id": 177, "iscrowd": 0, "bbox": [269, 0, 371, 83], "area": 4186}], "file_name": "000000253433.png", "image_id": 253433}, {"segments_info": [{"id": 5073281, "category_id": 47, "iscrowd": 0, "bbox": [444, 151, 196, 212], "area": 33493}, {"id": 4280666, "category_id": 48, "iscrowd": 0, "bbox": [9, 80, 41, 114], "area": 2510}, {"id": 2371382, "category_id": 49, "iscrowd": 0, "bbox": [24, 94, 39, 82], "area": 846}, {"id": 1845039, "category_id": 49, "iscrowd": 0, "bbox": [101, 0, 30, 22], "area": 335}, {"id": 4805722, "category_id": 50, "iscrowd": 0, "bbox": [0, 73, 31, 75], "area": 1003}, {"id": 870549, "category_id": 57, "iscrowd": 0, "bbox": [143, 149, 170, 72], "area": 2699}, {"id": 1466788, "category_id": 57, "iscrowd": 0, "bbox": [103, 192, 21, 17], "area": 248}, {"id": 1662367, "category_id": 60, "iscrowd": 0, "bbox": [496, 64, 121, 74], "area": 3175}, {"id": 1727387, "category_id": 60, "iscrowd": 0, "bbox": [372, 76, 101, 74], "area": 5635}, {"id": 1924511, "category_id": 60, "iscrowd": 0, "bbox": [458, 52, 82, 51], "area": 1950}, {"id": 1330056, "category_id": 60, "iscrowd": 0, "bbox": [323, 77, 108, 84], "area": 3173}, {"id": 1329803, "category_id": 60, "iscrowd": 0, "bbox": [457, 79, 125, 92], "area": 8032}, {"id": 1528723, "category_id": 60, "iscrowd": 0, "bbox": [363, 30, 104, 54], "area": 4355}, {"id": 2905203, "category_id": 61, "iscrowd": 0, "bbox": [74, 23, 169, 98], "area": 11359}, {"id": 5470093, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 193700}], "file_name": "000000253452.png", "image_id": 253452}, {"segments_info": [{"id": 8684431, "category_id": 1, "iscrowd": 0, "bbox": [70, 50, 310, 582], "area": 73779}, {"id": 990492, "category_id": 40, "iscrowd": 0, "bbox": [260, 37, 114, 132], "area": 7200}, {"id": 2573644, "category_id": 145, "iscrowd": 0, "bbox": [0, 49, 427, 25], "area": 6079}, {"id": 2651231, "category_id": 193, "iscrowd": 0, "bbox": [0, 50, 427, 590], "area": 162931}, {"id": 1575171, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 53], "area": 21532}], "file_name": "000000253695.png", "image_id": 253695}, {"segments_info": [{"id": 5985882, "category_id": 1, "iscrowd": 0, "bbox": [156, 110, 69, 133], "area": 6309}, {"id": 9864325, "category_id": 1, "iscrowd": 0, "bbox": [250, 126, 55, 114], "area": 3812}, {"id": 3026997, "category_id": 1, "iscrowd": 0, "bbox": [586, 151, 37, 105], "area": 2118}, {"id": 5788510, "category_id": 1, "iscrowd": 0, "bbox": [104, 110, 60, 133], "area": 4360}, {"id": 8680292, "category_id": 1, "iscrowd": 0, "bbox": [392, 94, 137, 378], "area": 23158}, {"id": 9669001, "category_id": 1, "iscrowd": 0, "bbox": [299, 110, 66, 140], "area": 5917}, {"id": 7368309, "category_id": 1, "iscrowd": 0, "bbox": [539, 156, 47, 111], "area": 2478}, {"id": 3157809, "category_id": 1, "iscrowd": 0, "bbox": [622, 195, 17, 60], "area": 662}, {"id": 8815233, "category_id": 1, "iscrowd": 0, "bbox": [358, 181, 36, 70], "area": 1658}, {"id": 4669517, "category_id": 1, "iscrowd": 0, "bbox": [25, 117, 68, 157], "area": 7067}, {"id": 9938833, "category_id": 28, "iscrowd": 0, "bbox": [207, 141, 51, 17], "area": 679}, {"id": 15393242, "category_id": 28, "iscrowd": 0, "bbox": [520, 122, 80, 37], "area": 1692}, {"id": 2958370, "category_id": 28, "iscrowd": 0, "bbox": [284, 95, 127, 88], "area": 4733}, {"id": 13086935, "category_id": 28, "iscrowd": 0, "bbox": [83, 95, 84, 55], "area": 2132}, {"id": 12698048, "category_id": 28, "iscrowd": 0, "bbox": [338, 0, 278, 186], "area": 20011}, {"id": 7432808, "category_id": 28, "iscrowd": 0, "bbox": [233, 105, 70, 30], "area": 991}, {"id": 13480624, "category_id": 28, "iscrowd": 0, "bbox": [606, 154, 34, 37], "area": 831}, {"id": 16441793, "category_id": 28, "iscrowd": 0, "bbox": [607, 108, 33, 48], "area": 915}, {"id": 4028881, "category_id": 28, "iscrowd": 0, "bbox": [301, 67, 49, 37], "area": 813}, {"id": 8156527, "category_id": 28, "iscrowd": 0, "bbox": [139, 81, 139, 80], "area": 3505}, {"id": 13747382, "category_id": 28, "iscrowd": 0, "bbox": [0, 100, 42, 23], "area": 616}, {"id": 3091387, "category_id": 28, "iscrowd": 0, "bbox": [1, 105, 101, 60], "area": 2968}, {"id": 11960699, "category_id": 28, "iscrowd": 0, "bbox": [579, 127, 35, 19], "area": 363}, {"id": 7103060, "category_id": 28, "iscrowd": 1, "bbox": [593, 109, 37, 25], "area": 449}, {"id": 2433572, "category_id": 31, "iscrowd": 0, "bbox": [97, 169, 23, 35], "area": 433}, {"id": 10718069, "category_id": 31, "iscrowd": 0, "bbox": [410, 199, 64, 87], "area": 3312}, {"id": 3620415, "category_id": 31, "iscrowd": 0, "bbox": [236, 192, 9, 21], "area": 152}, {"id": 2893607, "category_id": 31, "iscrowd": 0, "bbox": [102, 142, 46, 87], "area": 557}, {"id": 2244142, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 198], "area": 51835}, {"id": 8621463, "category_id": 191, "iscrowd": 0, "bbox": [0, 216, 640, 264], "area": 97989}, {"id": 3686726, "category_id": 194, "iscrowd": 0, "bbox": [492, 156, 142, 83], "area": 3710}], "file_name": "000000253742.png", "image_id": 253742}, {"segments_info": [{"id": 6116944, "category_id": 1, "iscrowd": 0, "bbox": [197, 5, 275, 316], "area": 19693}, {"id": 9141363, "category_id": 41, "iscrowd": 0, "bbox": [300, 239, 109, 105], "area": 1884}, {"id": 13289411, "category_id": 128, "iscrowd": 0, "bbox": [0, 100, 91, 56], "area": 2012}, {"id": 10655631, "category_id": 149, "iscrowd": 0, "bbox": [0, 201, 640, 226], "area": 75493}, {"id": 15329510, "category_id": 159, "iscrowd": 0, "bbox": [0, 198, 640, 146], "area": 15259}, {"id": 6518653, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 244], "area": 79945}, {"id": 16119283, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 142], "area": 42232}, {"id": 11644072, "category_id": 191, "iscrowd": 0, "bbox": [264, 301, 376, 126], "area": 36452}], "file_name": "000000253819.png", "image_id": 253819}, {"segments_info": [{"id": 3947851, "category_id": 1, "iscrowd": 0, "bbox": [483, 107, 94, 330], "area": 17166}, {"id": 2962251, "category_id": 1, "iscrowd": 0, "bbox": [456, 270, 40, 79], "area": 1617}, {"id": 5329755, "category_id": 7, "iscrowd": 0, "bbox": [2, 136, 275, 203], "area": 35809}, {"id": 5130312, "category_id": 10, "iscrowd": 0, "bbox": [413, 191, 11, 10], "area": 87}, {"id": 9735824, "category_id": 10, "iscrowd": 0, "bbox": [453, 159, 15, 23], "area": 320}, {"id": 2170914, "category_id": 27, "iscrowd": 0, "bbox": [400, 263, 116, 161], "area": 10293}, {"id": 2959403, "category_id": 27, "iscrowd": 0, "bbox": [515, 153, 105, 122], "area": 3793}, {"id": 7759464, "category_id": 44, "iscrowd": 0, "bbox": [494, 178, 43, 66], "area": 932}, {"id": 10723744, "category_id": 85, "iscrowd": 0, "bbox": [365, 167, 20, 20], "area": 325}, {"id": 7171696, "category_id": 128, "iscrowd": 0, "bbox": [0, 123, 640, 167], "area": 22447}, {"id": 2764341, "category_id": 147, "iscrowd": 0, "bbox": [0, 250, 640, 120], "area": 9122}, {"id": 4014654, "category_id": 184, "iscrowd": 0, "bbox": [304, 206, 83, 63], "area": 3389}, {"id": 13749450, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 241], "area": 106667}, {"id": 6517114, "category_id": 191, "iscrowd": 0, "bbox": [0, 265, 640, 215], "area": 93754}], "file_name": "000000253835.png", "image_id": 253835}, {"segments_info": [{"id": 5857900, "category_id": 1, "iscrowd": 0, "bbox": [237, 1, 182, 131], "area": 9284}, {"id": 11974841, "category_id": 51, "iscrowd": 0, "bbox": [339, 75, 141, 56], "area": 5476}, {"id": 1263987, "category_id": 60, "iscrowd": 0, "bbox": [294, 199, 34, 18], "area": 423}, {"id": 5078688, "category_id": 60, "iscrowd": 0, "bbox": [381, 139, 35, 30], "area": 862}, {"id": 1856636, "category_id": 60, "iscrowd": 0, "bbox": [328, 203, 35, 19], "area": 495}, {"id": 1396347, "category_id": 60, "iscrowd": 0, "bbox": [370, 173, 36, 33], "area": 1002}, {"id": 5274521, "category_id": 60, "iscrowd": 0, "bbox": [405, 175, 30, 33], "area": 574}, {"id": 1595527, "category_id": 60, "iscrowd": 0, "bbox": [277, 210, 37, 17], "area": 496}, {"id": 3172242, "category_id": 60, "iscrowd": 0, "bbox": [347, 138, 35, 33], "area": 814}, {"id": 1131375, "category_id": 60, "iscrowd": 0, "bbox": [336, 172, 34, 32], "area": 949}, {"id": 1068672, "category_id": 60, "iscrowd": 0, "bbox": [304, 172, 34, 30], "area": 754}, {"id": 2253714, "category_id": 60, "iscrowd": 0, "bbox": [317, 135, 31, 31], "area": 772}, {"id": 6199725, "category_id": 60, "iscrowd": 0, "bbox": [205, 369, 65, 43], "area": 2205}, {"id": 6459309, "category_id": 60, "iscrowd": 0, "bbox": [416, 140, 31, 30], "area": 758}, {"id": 7447216, "category_id": 60, "iscrowd": 0, "bbox": [236, 331, 61, 38], "area": 1798}, {"id": 5602444, "category_id": 60, "iscrowd": 1, "bbox": [14, 116, 456, 345], "area": 33112}, {"id": 5397595, "category_id": 178, "iscrowd": 0, "bbox": [119, 265, 266, 214], "area": 10206}, {"id": 1393241, "category_id": 190, "iscrowd": 0, "bbox": [362, 345, 118, 295], "area": 18809}, {"id": 6848150, "category_id": 196, "iscrowd": 0, "bbox": [357, 32, 33, 45], "area": 1081}], "file_name": "000000254016.png", "image_id": 254016}, {"segments_info": [{"id": 10066329, "category_id": 1, "iscrowd": 0, "bbox": [33, 66, 359, 393], "area": 70950}, {"id": 10132122, "category_id": 65, "iscrowd": 0, "bbox": [12, 123, 377, 511], "area": 92769}, {"id": 10197915, "category_id": 93, "iscrowd": 0, "bbox": [160, 239, 232, 355], "area": 5397}, {"id": 2039583, "category_id": 190, "iscrowd": 0, "bbox": [0, 529, 163, 111], "area": 11174}, {"id": 11316396, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 372, 548], "area": 42779}], "file_name": "000000254368.png", "image_id": 254368}, {"segments_info": [{"id": 13284522, "category_id": 1, "iscrowd": 0, "bbox": [26, 0, 90, 43], "area": 3712}, {"id": 659219, "category_id": 1, "iscrowd": 0, "bbox": [101, 107, 89, 154], "area": 7854}, {"id": 7762557, "category_id": 1, "iscrowd": 0, "bbox": [587, 158, 53, 188], "area": 4716}, {"id": 9209718, "category_id": 1, "iscrowd": 0, "bbox": [419, 146, 103, 172], "area": 9913}, {"id": 8290159, "category_id": 1, "iscrowd": 0, "bbox": [329, 248, 111, 145], "area": 11946}, {"id": 8419961, "category_id": 1, "iscrowd": 0, "bbox": [214, 97, 189, 325], "area": 38907}, {"id": 5198427, "category_id": 1, "iscrowd": 0, "bbox": [2, 216, 38, 90], "area": 2922}, {"id": 7432811, "category_id": 1, "iscrowd": 0, "bbox": [480, 160, 152, 205], "area": 16174}, {"id": 9403758, "category_id": 1, "iscrowd": 0, "bbox": [173, 215, 62, 198], "area": 5111}, {"id": 4090762, "category_id": 15, "iscrowd": 0, "bbox": [62, 259, 101, 81], "area": 2054}, {"id": 7368823, "category_id": 39, "iscrowd": 0, "bbox": [250, 0, 113, 165], "area": 2724}, {"id": 3686763, "category_id": 145, "iscrowd": 0, "bbox": [408, 373, 232, 54], "area": 7045}, {"id": 4939599, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 261], "area": 93909}], "file_name": "000000254516.png", "image_id": 254516}, {"segments_info": [{"id": 7826277, "category_id": 1, "iscrowd": 0, "bbox": [552, 285, 21, 45], "area": 531}, {"id": 6189677, "category_id": 1, "iscrowd": 0, "bbox": [540, 315, 22, 33], "area": 450}, {"id": 7629928, "category_id": 1, "iscrowd": 0, "bbox": [170, 277, 30, 45], "area": 520}, {"id": 7102037, "category_id": 1, "iscrowd": 0, "bbox": [488, 78, 12, 25], "area": 158}, {"id": 6317158, "category_id": 1, "iscrowd": 0, "bbox": [60, 200, 20, 29], "area": 270}, {"id": 6181981, "category_id": 1, "iscrowd": 0, "bbox": [504, 302, 16, 25], "area": 235}, {"id": 9010804, "category_id": 1, "iscrowd": 0, "bbox": [109, 116, 19, 28], "area": 324}, {"id": 6837323, "category_id": 1, "iscrowd": 0, "bbox": [588, 191, 23, 37], "area": 309}, {"id": 6641748, "category_id": 1, "iscrowd": 0, "bbox": [452, 290, 16, 20], "area": 200}, {"id": 7631470, "category_id": 1, "iscrowd": 0, "bbox": [521, 290, 21, 41], "area": 520}, {"id": 8154988, "category_id": 1, "iscrowd": 0, "bbox": [468, 281, 16, 34], "area": 415}, {"id": 9601660, "category_id": 1, "iscrowd": 0, "bbox": [281, 216, 21, 23], "area": 204}, {"id": 5262407, "category_id": 1, "iscrowd": 0, "bbox": [488, 178, 18, 36], "area": 278}, {"id": 6973284, "category_id": 1, "iscrowd": 1, "bbox": [25, 23, 601, 346], "area": 37127}, {"id": 4603971, "category_id": 2, "iscrowd": 0, "bbox": [70, 274, 49, 22], "area": 726}, {"id": 5131852, "category_id": 2, "iscrowd": 0, "bbox": [561, 314, 13, 31], "area": 246}, {"id": 5262925, "category_id": 2, "iscrowd": 0, "bbox": [225, 235, 46, 31], "area": 436}, {"id": 6776674, "category_id": 2, "iscrowd": 0, "bbox": [497, 130, 32, 25], "area": 338}, {"id": 5329488, "category_id": 2, "iscrowd": 0, "bbox": [265, 231, 20, 20], "area": 256}, {"id": 5722956, "category_id": 2, "iscrowd": 0, "bbox": [328, 222, 15, 30], "area": 231}, {"id": 6052952, "category_id": 2, "iscrowd": 0, "bbox": [589, 179, 36, 27], "area": 331}, {"id": 6052435, "category_id": 2, "iscrowd": 0, "bbox": [188, 204, 16, 17], "area": 209}, {"id": 5132108, "category_id": 3, "iscrowd": 0, "bbox": [9, 163, 82, 57], "area": 3240}, {"id": 9079942, "category_id": 3, "iscrowd": 0, "bbox": [380, 309, 164, 117], "area": 13112}, {"id": 4605254, "category_id": 4, "iscrowd": 0, "bbox": [546, 346, 18, 24], "area": 317}, {"id": 5657166, "category_id": 4, "iscrowd": 0, "bbox": [45, 216, 50, 31], "area": 645}, {"id": 5658454, "category_id": 4, "iscrowd": 0, "bbox": [127, 234, 26, 31], "area": 458}, {"id": 5723473, "category_id": 4, "iscrowd": 0, "bbox": [476, 188, 41, 34], "area": 654}, {"id": 4868423, "category_id": 4, "iscrowd": 0, "bbox": [579, 202, 41, 36], "area": 822}, {"id": 4670785, "category_id": 4, "iscrowd": 0, "bbox": [348, 179, 37, 28], "area": 494}, {"id": 6183257, "category_id": 4, "iscrowd": 0, "bbox": [228, 190, 34, 26], "area": 418}, {"id": 5987682, "category_id": 4, "iscrowd": 0, "bbox": [236, 251, 27, 32], "area": 452}, {"id": 6051171, "category_id": 4, "iscrowd": 0, "bbox": [285, 234, 16, 33], "area": 362}, {"id": 4539972, "category_id": 4, "iscrowd": 0, "bbox": [93, 250, 47, 29], "area": 633}, {"id": 5460559, "category_id": 4, "iscrowd": 0, "bbox": [394, 182, 47, 30], "area": 723}, {"id": 5131337, "category_id": 4, "iscrowd": 0, "bbox": [147, 261, 34, 25], "area": 417}, {"id": 5328460, "category_id": 4, "iscrowd": 1, "bbox": [510, 141, 97, 39], "area": 2411}, {"id": 8290688, "category_id": 6, "iscrowd": 0, "bbox": [303, 275, 129, 92], "area": 7073}, {"id": 9276545, "category_id": 8, "iscrowd": 0, "bbox": [0, 51, 80, 79], "area": 4988}, {"id": 8028023, "category_id": 8, "iscrowd": 0, "bbox": [151, 45, 111, 53], "area": 4263}, {"id": 3750713, "category_id": 10, "iscrowd": 0, "bbox": [218, 263, 9, 17], "area": 125}, {"id": 5792865, "category_id": 10, "iscrowd": 0, "bbox": [419, 99, 13, 29], "area": 287}, {"id": 3421775, "category_id": 10, "iscrowd": 0, "bbox": [212, 200, 15, 37], "area": 332}, {"id": 4214880, "category_id": 95, "iscrowd": 0, "bbox": [352, 0, 78, 75], "area": 2415}, {"id": 8094853, "category_id": 130, "iscrowd": 0, "bbox": [193, 321, 115, 159], "area": 5342}, {"id": 7633015, "category_id": 149, "iscrowd": 0, "bbox": [0, 32, 640, 448], "area": 152290}, {"id": 6190192, "category_id": 180, "iscrowd": 0, "bbox": [170, 0, 29, 28], "area": 376}, {"id": 4343108, "category_id": 181, "iscrowd": 0, "bbox": [573, 412, 44, 54], "area": 1530}, {"id": 3426634, "category_id": 184, "iscrowd": 0, "bbox": [180, 10, 415, 470], "area": 1790}, {"id": 5858158, "category_id": 185, "iscrowd": 0, "bbox": [142, 0, 38, 31], "area": 888}, {"id": 7634817, "category_id": 191, "iscrowd": 0, "bbox": [215, 54, 425, 269], "area": 4317}, {"id": 5599081, "category_id": 193, "iscrowd": 0, "bbox": [251, 55, 389, 40], "area": 5494}, {"id": 6122091, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 92], "area": 33754}], "file_name": "000000254814.png", "image_id": 254814}, {"segments_info": [{"id": 5069933, "category_id": 47, "iscrowd": 0, "bbox": [421, 374, 40, 41], "area": 1259}, {"id": 2641759, "category_id": 72, "iscrowd": 0, "bbox": [190, 67, 87, 89], "area": 6506}, {"id": 12419942, "category_id": 72, "iscrowd": 0, "bbox": [358, 238, 137, 125], "area": 13759}, {"id": 11961954, "category_id": 72, "iscrowd": 0, "bbox": [219, 240, 130, 105], "area": 12993}, {"id": 2305073, "category_id": 73, "iscrowd": 0, "bbox": [0, 287, 162, 140], "area": 11563}, {"id": 4410713, "category_id": 74, "iscrowd": 0, "bbox": [473, 370, 32, 29], "area": 550}, {"id": 5467001, "category_id": 76, "iscrowd": 0, "bbox": [217, 376, 154, 32], "area": 3912}, {"id": 5531247, "category_id": 76, "iscrowd": 0, "bbox": [199, 403, 171, 40], "area": 5492}, {"id": 1317664, "category_id": 76, "iscrowd": 0, "bbox": [23, 366, 105, 41], "area": 1720}, {"id": 3359302, "category_id": 84, "iscrowd": 0, "bbox": [170, 200, 11, 67], "area": 301}, {"id": 924196, "category_id": 84, "iscrowd": 0, "bbox": [144, 290, 33, 55], "area": 1161}, {"id": 3159605, "category_id": 84, "iscrowd": 0, "bbox": [534, 457, 73, 23], "area": 944}, {"id": 5529433, "category_id": 84, "iscrowd": 0, "bbox": [565, 319, 44, 31], "area": 942}, {"id": 1717318, "category_id": 84, "iscrowd": 0, "bbox": [160, 194, 14, 69], "area": 679}, {"id": 2235422, "category_id": 84, "iscrowd": 0, "bbox": [180, 310, 7, 29], "area": 122}, {"id": 7895158, "category_id": 84, "iscrowd": 0, "bbox": [560, 385, 56, 24], "area": 365}, {"id": 2109233, "category_id": 84, "iscrowd": 0, "bbox": [138, 202, 11, 54], "area": 387}, {"id": 1257299, "category_id": 84, "iscrowd": 0, "bbox": [146, 201, 14, 59], "area": 558}, {"id": 2963266, "category_id": 84, "iscrowd": 0, "bbox": [496, 408, 40, 21], "area": 471}, {"id": 2174007, "category_id": 84, "iscrowd": 0, "bbox": [188, 308, 7, 34], "area": 180}, {"id": 5065035, "category_id": 84, "iscrowd": 0, "bbox": [570, 378, 65, 24], "area": 978}, {"id": 2041391, "category_id": 84, "iscrowd": 0, "bbox": [129, 200, 13, 56], "area": 488}, {"id": 4148821, "category_id": 84, "iscrowd": 1, "bbox": [122, 270, 518, 210], "area": 8512}, {"id": 2436151, "category_id": 156, "iscrowd": 0, "bbox": [118, 140, 82, 201], "area": 5606}, {"id": 13881027, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 98, 201], "area": 18288}, {"id": 2111569, "category_id": 189, "iscrowd": 0, "bbox": [16, 339, 624, 141], "area": 34492}, {"id": 657938, "category_id": 190, "iscrowd": 0, "bbox": [0, 440, 396, 40], "area": 9568}, {"id": 6448742, "category_id": 195, "iscrowd": 0, "bbox": [537, 319, 103, 121], "area": 2792}, {"id": 5406084, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 455], "area": 104499}], "file_name": "000000255165.png", "image_id": 255165}, {"segments_info": [{"id": 3495768, "category_id": 44, "iscrowd": 0, "bbox": [387, 407, 29, 46], "area": 902}, {"id": 4815253, "category_id": 44, "iscrowd": 0, "bbox": [354, 431, 34, 22], "area": 398}, {"id": 5205877, "category_id": 70, "iscrowd": 0, "bbox": [31, 35, 107, 236], "area": 17229}, {"id": 5862780, "category_id": 70, "iscrowd": 0, "bbox": [192, 115, 92, 173], "area": 10519}, {"id": 5599862, "category_id": 81, "iscrowd": 0, "bbox": [310, 160, 106, 198], "area": 18770}, {"id": 6786713, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 416, 500], "area": 59374}, {"id": 11123648, "category_id": 188, "iscrowd": 0, "bbox": [349, 64, 67, 109], "area": 3405}, {"id": 11254723, "category_id": 190, "iscrowd": 0, "bbox": [0, 206, 416, 294], "area": 68896}, {"id": 12174021, "category_id": 195, "iscrowd": 0, "bbox": [373, 54, 43, 80], "area": 2409}, {"id": 4481389, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 416, 409], "area": 13868}], "file_name": "000000255401.png", "image_id": 255401}, {"segments_info": [{"id": 13619151, "category_id": 1, "iscrowd": 0, "bbox": [5, 213, 430, 211], "area": 29092}, {"id": 15066597, "category_id": 84, "iscrowd": 0, "bbox": [18, 124, 217, 284], "area": 39106}, {"id": 10329501, "category_id": 87, "iscrowd": 0, "bbox": [172, 269, 114, 32], "area": 661}, {"id": 6908265, "category_id": 189, "iscrowd": 0, "bbox": [8, 14, 444, 406], "area": 39023}, {"id": 14935011, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 452, 500], "area": 93708}], "file_name": "000000255483.png", "image_id": 255483}, {"segments_info": [{"id": 9133413, "category_id": 1, "iscrowd": 0, "bbox": [125, 119, 24, 33], "area": 306}, {"id": 4993594, "category_id": 1, "iscrowd": 0, "bbox": [135, 120, 29, 30], "area": 328}, {"id": 8807246, "category_id": 4, "iscrowd": 0, "bbox": [119, 130, 58, 22], "area": 336}, {"id": 2313508, "category_id": 28, "iscrowd": 0, "bbox": [184, 120, 191, 187], "area": 7920}, {"id": 4541817, "category_id": 62, "iscrowd": 0, "bbox": [31, 220, 43, 86], "area": 2350}, {"id": 3557736, "category_id": 62, "iscrowd": 0, "bbox": [71, 236, 49, 68], "area": 1355}, {"id": 1447960, "category_id": 62, "iscrowd": 0, "bbox": [167, 226, 75, 95], "area": 5047}, {"id": 1709845, "category_id": 62, "iscrowd": 0, "bbox": [111, 232, 55, 85], "area": 1661}, {"id": 6112809, "category_id": 95, "iscrowd": 0, "bbox": [0, 52, 400, 102], "area": 27333}, {"id": 2251076, "category_id": 185, "iscrowd": 0, "bbox": [0, 162, 400, 152], "area": 38738}, {"id": 16627777, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 400, 93], "area": 28417}, {"id": 3698008, "category_id": 193, "iscrowd": 0, "bbox": [0, 141, 400, 185], "area": 8687}, {"id": 7501452, "category_id": 194, "iscrowd": 0, "bbox": [0, 284, 400, 116], "area": 36655}], "file_name": "000000255536.png", "image_id": 255536}, {"segments_info": [{"id": 10337745, "category_id": 18, "iscrowd": 0, "bbox": [94, 42, 229, 297], "area": 22322}, {"id": 14743283, "category_id": 34, "iscrowd": 0, "bbox": [315, 51, 57, 53], "area": 1726}, {"id": 5744005, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 163124}], "file_name": "000000255664.png", "image_id": 255664}, {"segments_info": [{"id": 5265769, "category_id": 11, "iscrowd": 0, "bbox": [102, 56, 286, 552], "area": 103922}, {"id": 10200761, "category_id": 147, "iscrowd": 0, "bbox": [90, 570, 22, 20], "area": 306}, {"id": 15396593, "category_id": 149, "iscrowd": 0, "bbox": [0, 574, 154, 58], "area": 3418}, {"id": 4611930, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 514], "area": 103705}, {"id": 9739947, "category_id": 185, "iscrowd": 0, "bbox": [0, 496, 480, 84], "area": 14913}, {"id": 15724526, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 343], "area": 5279}, {"id": 12439016, "category_id": 191, "iscrowd": 0, "bbox": [0, 553, 480, 87], "area": 23835}, {"id": 11520232, "category_id": 197, "iscrowd": 0, "bbox": [0, 199, 480, 309], "area": 45766}], "file_name": "000000255718.png", "image_id": 255718}, {"segments_info": [{"id": 4285339, "category_id": 54, "iscrowd": 0, "bbox": [8, 3, 249, 190], "area": 31959}, {"id": 3297423, "category_id": 54, "iscrowd": 0, "bbox": [104, 85, 455, 327], "area": 108813}, {"id": 7507114, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 149151}, {"id": 1973036, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 124], "area": 8128}], "file_name": "000000255747.png", "image_id": 255747}, {"segments_info": [{"id": 2565927, "category_id": 1, "iscrowd": 0, "bbox": [232, 170, 34, 46], "area": 1178}, {"id": 2434341, "category_id": 1, "iscrowd": 0, "bbox": [167, 170, 47, 58], "area": 1510}, {"id": 1644825, "category_id": 1, "iscrowd": 0, "bbox": [87, 185, 34, 140], "area": 3155}, {"id": 2434335, "category_id": 1, "iscrowd": 0, "bbox": [269, 181, 45, 32], "area": 896}, {"id": 2039583, "category_id": 6, "iscrowd": 0, "bbox": [114, 117, 356, 199], "area": 58538}, {"id": 1381653, "category_id": 130, "iscrowd": 0, "bbox": [15, 97, 34, 45], "area": 917}, {"id": 2894892, "category_id": 149, "iscrowd": 0, "bbox": [0, 224, 640, 200], "area": 86164}, {"id": 1184274, "category_id": 159, "iscrowd": 0, "bbox": [0, 223, 606, 64], "area": 9429}, {"id": 131586, "category_id": 184, "iscrowd": 0, "bbox": [305, 0, 320, 241], "area": 49244}, {"id": 8, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 241], "area": 60048}], "file_name": "000000255749.png", "image_id": 255749}, {"segments_info": [{"id": 10006461, "category_id": 47, "iscrowd": 0, "bbox": [243, 1, 322, 189], "area": 44263}, {"id": 4222622, "category_id": 61, "iscrowd": 0, "bbox": [151, 145, 313, 277], "area": 45695}, {"id": 9151423, "category_id": 67, "iscrowd": 0, "bbox": [0, 1, 639, 477], "area": 201015}, {"id": 2977201, "category_id": 189, "iscrowd": 0, "bbox": [579, 133, 61, 155], "area": 350}, {"id": 1846101, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 188], "area": 13467}], "file_name": "000000255824.png", "image_id": 255824}, {"segments_info": [{"id": 11238790, "category_id": 44, "iscrowd": 0, "bbox": [557, 1, 83, 98], "area": 7281}, {"id": 7242654, "category_id": 54, "iscrowd": 0, "bbox": [291, 15, 273, 118], "area": 14115}, {"id": 5597571, "category_id": 54, "iscrowd": 0, "bbox": [297, 65, 276, 231], "area": 40534}, {"id": 3758138, "category_id": 56, "iscrowd": 0, "bbox": [154, 212, 130, 100], "area": 7791}, {"id": 6840921, "category_id": 67, "iscrowd": 0, "bbox": [0, 1, 640, 354], "area": 156506}], "file_name": "000000255912.png", "image_id": 255912}, {"segments_info": [{"id": 3349782, "category_id": 1, "iscrowd": 0, "bbox": [353, 332, 5, 6], "area": 20}, {"id": 4075117, "category_id": 3, "iscrowd": 0, "bbox": [175, 332, 80, 57], "area": 3672}, {"id": 4075888, "category_id": 3, "iscrowd": 0, "bbox": [271, 333, 30, 43], "area": 867}, {"id": 7364196, "category_id": 3, "iscrowd": 0, "bbox": [51, 330, 79, 55], "area": 3502}, {"id": 8020568, "category_id": 3, "iscrowd": 0, "bbox": [324, 328, 81, 34], "area": 1972}, {"id": 6640728, "category_id": 3, "iscrowd": 0, "bbox": [275, 325, 41, 43], "area": 522}, {"id": 6111028, "category_id": 3, "iscrowd": 0, "bbox": [186, 313, 35, 11], "area": 286}, {"id": 11577510, "category_id": 3, "iscrowd": 0, "bbox": [235, 260, 27, 21], "area": 465}, {"id": 3286830, "category_id": 3, "iscrowd": 0, "bbox": [215, 317, 64, 65], "area": 1945}, {"id": 6508369, "category_id": 3, "iscrowd": 0, "bbox": [116, 328, 59, 48], "area": 1854}, {"id": 8939609, "category_id": 3, "iscrowd": 0, "bbox": [203, 304, 28, 19], "area": 314}, {"id": 10390934, "category_id": 3, "iscrowd": 0, "bbox": [150, 330, 36, 34], "area": 441}, {"id": 5716540, "category_id": 3, "iscrowd": 0, "bbox": [176, 322, 43, 13], "area": 354}, {"id": 7101283, "category_id": 3, "iscrowd": 0, "bbox": [269, 328, 37, 42], "area": 303}, {"id": 6244166, "category_id": 3, "iscrowd": 1, "bbox": [59, 253, 253, 83], "area": 2573}, {"id": 4928311, "category_id": 8, "iscrowd": 0, "bbox": [166, 290, 34, 31], "area": 793}, {"id": 4274776, "category_id": 10, "iscrowd": 0, "bbox": [223, 218, 19, 21], "area": 378}, {"id": 9934250, "category_id": 128, "iscrowd": 0, "bbox": [25, 131, 232, 127], "area": 16287}, {"id": 14601923, "category_id": 130, "iscrowd": 0, "bbox": [236, 15, 36, 21], "area": 600}, {"id": 10259856, "category_id": 149, "iscrowd": 0, "bbox": [0, 218, 384, 209], "area": 30392}, {"id": 8486800, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 394], "area": 118187}, {"id": 16377556, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 154], "area": 52002}, {"id": 11380911, "category_id": 191, "iscrowd": 0, "bbox": [0, 237, 413, 190], "area": 7745}, {"id": 9743552, "category_id": 193, "iscrowd": 0, "bbox": [255, 361, 385, 66], "area": 12036}, {"id": 13419458, "category_id": 197, "iscrowd": 0, "bbox": [370, 0, 67, 105], "area": 3381}], "file_name": "000000255917.png", "image_id": 255917}, {"segments_info": [{"id": 5596542, "category_id": 17, "iscrowd": 0, "bbox": [0, 148, 548, 248], "area": 69498}, {"id": 6783414, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 640, 363], "area": 92404}, {"id": 7175574, "category_id": 191, "iscrowd": 0, "bbox": [0, 98, 640, 329], "area": 110965}], "file_name": "000000255965.png", "image_id": 255965}, {"segments_info": [{"id": 2894927, "category_id": 1, "iscrowd": 0, "bbox": [352, 70, 26, 39], "area": 614}, {"id": 4214629, "category_id": 1, "iscrowd": 0, "bbox": [241, 64, 23, 23], "area": 145}, {"id": 1381656, "category_id": 1, "iscrowd": 0, "bbox": [152, 22, 46, 82], "area": 1754}, {"id": 1843788, "category_id": 1, "iscrowd": 0, "bbox": [81, 62, 39, 116], "area": 2057}, {"id": 7303545, "category_id": 1, "iscrowd": 0, "bbox": [182, 61, 20, 41], "area": 543}, {"id": 2171432, "category_id": 1, "iscrowd": 0, "bbox": [372, 62, 26, 44], "area": 615}, {"id": 3026226, "category_id": 1, "iscrowd": 0, "bbox": [202, 50, 33, 51], "area": 707}, {"id": 4207974, "category_id": 1, "iscrowd": 0, "bbox": [499, 108, 19, 53], "area": 642}, {"id": 5524805, "category_id": 1, "iscrowd": 0, "bbox": [49, 71, 45, 117], "area": 2856}, {"id": 1842207, "category_id": 1, "iscrowd": 0, "bbox": [121, 10, 36, 81], "area": 1364}, {"id": 5195590, "category_id": 1, "iscrowd": 0, "bbox": [243, 76, 34, 41], "area": 730}, {"id": 2894894, "category_id": 1, "iscrowd": 0, "bbox": [388, 79, 30, 85], "area": 1194}, {"id": 7370629, "category_id": 1, "iscrowd": 0, "bbox": [22, 35, 32, 75], "area": 1023}, {"id": 3290168, "category_id": 1, "iscrowd": 1, "bbox": [0, 0, 640, 356], "area": 56506}, {"id": 3366487, "category_id": 4, "iscrowd": 0, "bbox": [90, 69, 478, 378], "area": 102293}, {"id": 10922923, "category_id": 31, "iscrowd": 0, "bbox": [584, 144, 20, 25], "area": 371}, {"id": 9540240, "category_id": 31, "iscrowd": 0, "bbox": [589, 106, 17, 32], "area": 347}, {"id": 7174788, "category_id": 31, "iscrowd": 0, "bbox": [13, 113, 40, 38], "area": 984}, {"id": 3948350, "category_id": 149, "iscrowd": 0, "bbox": [0, 136, 640, 344], "area": 99396}, {"id": 4613532, "category_id": 171, "iscrowd": 0, "bbox": [356, 0, 59, 70], "area": 2548}, {"id": 10398381, "category_id": 181, "iscrowd": 0, "bbox": [254, 30, 38, 21], "area": 410}, {"id": 4209718, "category_id": 185, "iscrowd": 0, "bbox": [55, 159, 469, 20], "area": 99}, {"id": 4343108, "category_id": 191, "iscrowd": 0, "bbox": [53, 178, 19, 23], "area": 342}, {"id": 4345690, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 88], "area": 25671}], "file_name": "000000256192.png", "image_id": 256192}, {"segments_info": [{"id": 5002111, "category_id": 7, "iscrowd": 0, "bbox": [102, 59, 462, 329], "area": 114178}, {"id": 7763053, "category_id": 95, "iscrowd": 0, "bbox": [228, 0, 412, 111], "area": 36109}, {"id": 1382426, "category_id": 144, "iscrowd": 0, "bbox": [0, 308, 135, 86], "area": 6933}, {"id": 4278097, "category_id": 147, "iscrowd": 0, "bbox": [0, 180, 640, 247], "area": 56620}, {"id": 4008998, "category_id": 161, "iscrowd": 0, "bbox": [0, 0, 171, 181], "area": 17037}, {"id": 6384242, "category_id": 171, "iscrowd": 0, "bbox": [17, 0, 224, 271], "area": 7761}, {"id": 6847362, "category_id": 175, "iscrowd": 0, "bbox": [0, 101, 73, 103], "area": 4241}, {"id": 4601395, "category_id": 185, "iscrowd": 0, "bbox": [0, 149, 109, 131], "area": 6477}, {"id": 14935521, "category_id": 187, "iscrowd": 0, "bbox": [124, 0, 516, 17], "area": 1155}, {"id": 9741753, "category_id": 191, "iscrowd": 0, "bbox": [0, 256, 640, 171], "area": 12664}, {"id": 5660775, "category_id": 199, "iscrowd": 0, "bbox": [0, 97, 640, 174], "area": 8918}], "file_name": "000000256195.png", "image_id": 256195}, {"segments_info": [{"id": 4155783, "category_id": 47, "iscrowd": 0, "bbox": [333, 285, 43, 37], "area": 1167}, {"id": 6128031, "category_id": 47, "iscrowd": 0, "bbox": [278, 194, 34, 41], "area": 1035}, {"id": 7506075, "category_id": 47, "iscrowd": 0, "bbox": [228, 401, 37, 43], "area": 1156}, {"id": 6980763, "category_id": 47, "iscrowd": 0, "bbox": [168, 198, 35, 39], "area": 954}, {"id": 8431039, "category_id": 47, "iscrowd": 0, "bbox": [124, 235, 41, 36], "area": 1021}, {"id": 6586259, "category_id": 47, "iscrowd": 0, "bbox": [123, 350, 43, 35], "area": 1005}, {"id": 4154752, "category_id": 47, "iscrowd": 0, "bbox": [322, 343, 46, 40], "area": 1233}, {"id": 5932710, "category_id": 47, "iscrowd": 0, "bbox": [109, 291, 47, 39], "area": 1229}, {"id": 6919348, "category_id": 47, "iscrowd": 0, "bbox": [221, 181, 38, 42], "area": 1078}, {"id": 6125453, "category_id": 47, "iscrowd": 0, "bbox": [290, 382, 36, 43], "area": 1099}, {"id": 3367037, "category_id": 47, "iscrowd": 0, "bbox": [170, 387, 36, 43], "area": 1109}, {"id": 4746628, "category_id": 47, "iscrowd": 0, "bbox": [315, 231, 43, 40], "area": 1207}, {"id": 7442602, "category_id": 85, "iscrowd": 0, "bbox": [99, 180, 285, 278], "area": 45773}, {"id": 269445, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 247926}], "file_name": "000000256407.png", "image_id": 256407}, {"segments_info": [{"id": 8225673, "category_id": 47, "iscrowd": 0, "bbox": [431, 46, 126, 167], "area": 15897}, {"id": 5333107, "category_id": 47, "iscrowd": 0, "bbox": [183, 0, 99, 116], "area": 9028}, {"id": 10460317, "category_id": 50, "iscrowd": 0, "bbox": [506, 229, 134, 139], "area": 2015}, {"id": 2766142, "category_id": 50, "iscrowd": 0, "bbox": [86, 151, 53, 14], "area": 501}, {"id": 7636369, "category_id": 51, "iscrowd": 0, "bbox": [275, 0, 238, 96], "area": 12027}, {"id": 5012126, "category_id": 54, "iscrowd": 0, "bbox": [95, 145, 226, 151], "area": 15645}, {"id": 2048886, "category_id": 54, "iscrowd": 0, "bbox": [322, 38, 130, 43], "area": 4159}, {"id": 5398894, "category_id": 67, "iscrowd": 0, "bbox": [2, 1, 637, 421], "area": 179260}, {"id": 1447964, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 27614}], "file_name": "000000256518.png", "image_id": 256518}, {"segments_info": [{"id": 3946042, "category_id": 1, "iscrowd": 0, "bbox": [479, 274, 27, 113], "area": 1627}, {"id": 4738648, "category_id": 1, "iscrowd": 0, "bbox": [224, 290, 14, 20], "area": 182}, {"id": 3752803, "category_id": 1, "iscrowd": 0, "bbox": [454, 302, 58, 135], "area": 2783}, {"id": 4145225, "category_id": 1, "iscrowd": 0, "bbox": [381, 314, 34, 98], "area": 1746}, {"id": 7824972, "category_id": 1, "iscrowd": 0, "bbox": [393, 272, 10, 22], "area": 109}, {"id": 6185572, "category_id": 1, "iscrowd": 0, "bbox": [285, 273, 9, 28], "area": 193}, {"id": 6050644, "category_id": 1, "iscrowd": 0, "bbox": [275, 274, 9, 25], "area": 147}, {"id": 9141880, "category_id": 38, "iscrowd": 0, "bbox": [499, 17, 117, 172], "area": 11697}, {"id": 4808811, "category_id": 154, "iscrowd": 0, "bbox": [0, 288, 640, 192], "area": 110788}, {"id": 10855068, "category_id": 155, "iscrowd": 0, "bbox": [0, 262, 640, 49], "area": 14193}, {"id": 14210256, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 277], "area": 162732}], "file_name": "000000256775.png", "image_id": 256775}, {"segments_info": [{"id": 8420997, "category_id": 1, "iscrowd": 0, "bbox": [588, 249, 12, 31], "area": 178}, {"id": 9867406, "category_id": 1, "iscrowd": 0, "bbox": [409, 206, 88, 65], "area": 2196}, {"id": 5524032, "category_id": 1, "iscrowd": 0, "bbox": [312, 60, 102, 191], "area": 6907}, {"id": 13027529, "category_id": 1, "iscrowd": 0, "bbox": [11, 190, 18, 28], "area": 241}, {"id": 5660516, "category_id": 1, "iscrowd": 0, "bbox": [138, 180, 159, 201], "area": 12417}, {"id": 7304825, "category_id": 15, "iscrowd": 0, "bbox": [45, 224, 23, 28], "area": 530}, {"id": 8094088, "category_id": 15, "iscrowd": 0, "bbox": [122, 226, 44, 33], "area": 814}, {"id": 6382435, "category_id": 15, "iscrowd": 0, "bbox": [373, 226, 70, 35], "area": 1291}, {"id": 5724508, "category_id": 15, "iscrowd": 0, "bbox": [517, 227, 49, 62], "area": 1216}, {"id": 5790301, "category_id": 15, "iscrowd": 0, "bbox": [439, 227, 86, 62], "area": 2637}, {"id": 7764605, "category_id": 15, "iscrowd": 0, "bbox": [84, 226, 48, 28], "area": 852}, {"id": 9079172, "category_id": 41, "iscrowd": 0, "bbox": [314, 227, 74, 38], "area": 913}, {"id": 6181960, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 624, 186], "area": 12238}, {"id": 4938327, "category_id": 184, "iscrowd": 0, "bbox": [190, 0, 450, 259], "area": 20448}, {"id": 16448249, "category_id": 187, "iscrowd": 0, "bbox": [264, 0, 53, 27], "area": 1273}, {"id": 13882839, "category_id": 191, "iscrowd": 0, "bbox": [436, 255, 204, 64], "area": 7231}, {"id": 6601131, "category_id": 193, "iscrowd": 0, "bbox": [0, 359, 640, 69], "area": 31594}, {"id": 8420732, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 282], "area": 105423}, {"id": 6449502, "category_id": 199, "iscrowd": 0, "bbox": [0, 237, 640, 172], "area": 60472}], "file_name": "000000256868.png", "image_id": 256868}, {"segments_info": [{"id": 2699073, "category_id": 49, "iscrowd": 0, "bbox": [105, 127, 107, 34], "area": 1706}, {"id": 2108738, "category_id": 49, "iscrowd": 0, "bbox": [206, 412, 64, 68], "area": 2572}, {"id": 4350628, "category_id": 59, "iscrowd": 0, "bbox": [156, 26, 235, 157], "area": 19320}, {"id": 4483483, "category_id": 59, "iscrowd": 0, "bbox": [1, 48, 108, 80], "area": 5278}, {"id": 3560852, "category_id": 59, "iscrowd": 0, "bbox": [534, 176, 106, 258], "area": 22842}, {"id": 3956910, "category_id": 59, "iscrowd": 0, "bbox": [79, 210, 364, 249], "area": 56167}, {"id": 263687, "category_id": 62, "iscrowd": 0, "bbox": [443, 3, 138, 165], "area": 9826}, {"id": 526603, "category_id": 62, "iscrowd": 0, "bbox": [559, 0, 81, 178], "area": 6907}, {"id": 3960983, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 639, 479], "area": 55278}, {"id": 6449013, "category_id": 100, "iscrowd": 0, "bbox": [0, 0, 52, 52], "area": 1821}, {"id": 2501690, "category_id": 171, "iscrowd": 0, "bbox": [374, 0, 59, 92], "area": 3690}, {"id": 5137792, "category_id": 189, "iscrowd": 0, "bbox": [0, 162, 441, 318], "area": 5876}, {"id": 461582, "category_id": 190, "iscrowd": 0, "bbox": [0, 311, 128, 169], "area": 11095}, {"id": 9805231, "category_id": 195, "iscrowd": 0, "bbox": [340, 139, 252, 341], "area": 14491}, {"id": 4677511, "category_id": 196, "iscrowd": 0, "bbox": [90, 25, 550, 299], "area": 1862}], "file_name": "000000256916.png", "image_id": 256916}, {"segments_info": [{"id": 2960412, "category_id": 2, "iscrowd": 0, "bbox": [0, 251, 86, 244], "area": 4940}, {"id": 3420452, "category_id": 2, "iscrowd": 0, "bbox": [108, 226, 174, 274], "area": 9236}, {"id": 9070914, "category_id": 28, "iscrowd": 0, "bbox": [22, 0, 310, 106], "area": 24660}, {"id": 1712661, "category_id": 176, "iscrowd": 0, "bbox": [0, 96, 332, 394], "area": 94793}, {"id": 528906, "category_id": 190, "iscrowd": 0, "bbox": [0, 481, 332, 19], "area": 3982}, {"id": 2505309, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 332, 107], "area": 9270}], "file_name": "000000256941.png", "image_id": 256941}, {"segments_info": [{"id": 6908501, "category_id": 1, "iscrowd": 0, "bbox": [363, 0, 98, 187], "area": 11642}, {"id": 2566980, "category_id": 1, "iscrowd": 0, "bbox": [313, 1, 72, 168], "area": 8349}, {"id": 1842969, "category_id": 1, "iscrowd": 0, "bbox": [169, 1, 166, 184], "area": 16969}, {"id": 7960677, "category_id": 1, "iscrowd": 0, "bbox": [171, 111, 29, 79], "area": 1044}, {"id": 6645602, "category_id": 1, "iscrowd": 0, "bbox": [147, 113, 22, 65], "area": 798}, {"id": 5661549, "category_id": 1, "iscrowd": 0, "bbox": [274, 0, 48, 118], "area": 3609}, {"id": 6383254, "category_id": 1, "iscrowd": 0, "bbox": [130, 134, 15, 35], "area": 350}, {"id": 7902358, "category_id": 41, "iscrowd": 0, "bbox": [164, 120, 62, 32], "area": 290}, {"id": 1382675, "category_id": 41, "iscrowd": 0, "bbox": [433, 183, 51, 17], "area": 563}, {"id": 6256275, "category_id": 41, "iscrowd": 0, "bbox": [206, 157, 179, 59], "area": 3183}, {"id": 8496294, "category_id": 62, "iscrowd": 0, "bbox": [123, 184, 35, 36], "area": 563}, {"id": 7048621, "category_id": 118, "iscrowd": 0, "bbox": [0, 165, 500, 168], "area": 58079}, {"id": 6917309, "category_id": 144, "iscrowd": 0, "bbox": [267, 141, 22, 30], "area": 234}, {"id": 7568231, "category_id": 185, "iscrowd": 0, "bbox": [0, 23, 253, 241], "area": 38565}, {"id": 13613968, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 400, 53], "area": 5959}], "file_name": "000000257084.png", "image_id": 257084}, {"segments_info": [{"id": 6188186, "category_id": 1, "iscrowd": 0, "bbox": [260, 308, 219, 129], "area": 12847}, {"id": 4674149, "category_id": 31, "iscrowd": 0, "bbox": [282, 475, 71, 76], "area": 3444}, {"id": 7304830, "category_id": 70, "iscrowd": 0, "bbox": [268, 450, 212, 181], "area": 23695}, {"id": 1910577, "category_id": 89, "iscrowd": 0, "bbox": [148, 265, 330, 224], "area": 26511}, {"id": 6779509, "category_id": 109, "iscrowd": 0, "bbox": [125, 403, 148, 237], "area": 13629}, {"id": 8490909, "category_id": 168, "iscrowd": 0, "bbox": [0, 0, 480, 554], "area": 115120}, {"id": 11581114, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 91790}, {"id": 6121578, "category_id": 199, "iscrowd": 0, "bbox": [57, 574, 144, 66], "area": 5737}], "file_name": "000000257169.png", "image_id": 257169}, {"segments_info": [{"id": 3356993, "category_id": 1, "iscrowd": 0, "bbox": [494, 56, 146, 419], "area": 27888}, {"id": 2830401, "category_id": 1, "iscrowd": 0, "bbox": [0, 51, 182, 422], "area": 51619}, {"id": 5795973, "category_id": 64, "iscrowd": 0, "bbox": [505, 15, 78, 122], "area": 3555}, {"id": 7505551, "category_id": 72, "iscrowd": 0, "bbox": [274, 159, 341, 316], "area": 57298}, {"id": 9151424, "category_id": 75, "iscrowd": 0, "bbox": [581, 59, 59, 23], "area": 264}, {"id": 12437719, "category_id": 75, "iscrowd": 0, "bbox": [114, 175, 16, 50], "area": 216}, {"id": 4609123, "category_id": 100, "iscrowd": 0, "bbox": [130, 339, 42, 126], "area": 2829}, {"id": 4149613, "category_id": 118, "iscrowd": 0, "bbox": [0, 429, 579, 51], "area": 9704}, {"id": 2172197, "category_id": 156, "iscrowd": 0, "bbox": [331, 122, 254, 28], "area": 4053}, {"id": 7176079, "category_id": 189, "iscrowd": 0, "bbox": [0, 355, 17, 102], "area": 1161}, {"id": 7968428, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 466], "area": 129242}], "file_name": "000000257370.png", "image_id": 257370}, {"segments_info": [{"id": 12299432, "category_id": 1, "iscrowd": 0, "bbox": [254, 22, 178, 351], "area": 22889}, {"id": 3092007, "category_id": 40, "iscrowd": 0, "bbox": [372, 164, 45, 45], "area": 1301}, {"id": 5010276, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 500, 398], "area": 174556}], "file_name": "000000257478.png", "image_id": 257478}, {"segments_info": [{"id": 9276048, "category_id": 1, "iscrowd": 0, "bbox": [252, 118, 13, 31], "area": 198}, {"id": 8815501, "category_id": 1, "iscrowd": 0, "bbox": [318, 105, 33, 26], "area": 406}, {"id": 10123607, "category_id": 1, "iscrowd": 0, "bbox": [274, 110, 13, 18], "area": 125}, {"id": 10188622, "category_id": 1, "iscrowd": 0, "bbox": [285, 119, 11, 9], "area": 68}, {"id": 7433331, "category_id": 1, "iscrowd": 0, "bbox": [209, 109, 25, 68], "area": 881}, {"id": 5258816, "category_id": 1, "iscrowd": 0, "bbox": [227, 109, 10, 31], "area": 106}, {"id": 5325381, "category_id": 1, "iscrowd": 0, "bbox": [229, 112, 8, 61], "area": 141}, {"id": 6711670, "category_id": 1, "iscrowd": 0, "bbox": [291, 99, 30, 37], "area": 636}, {"id": 8088438, "category_id": 1, "iscrowd": 0, "bbox": [0, 234, 64, 246], "area": 9112}, {"id": 3486002, "category_id": 9, "iscrowd": 0, "bbox": [258, 134, 133, 109], "area": 12259}, {"id": 3615269, "category_id": 9, "iscrowd": 0, "bbox": [251, 115, 45, 59], "area": 935}, {"id": 5123874, "category_id": 31, "iscrowd": 0, "bbox": [235, 131, 7, 18], "area": 80}, {"id": 5192848, "category_id": 31, "iscrowd": 0, "bbox": [209, 119, 12, 29], "area": 168}, {"id": 6977642, "category_id": 77, "iscrowd": 0, "bbox": [347, 113, 3, 4], "area": 10}, {"id": 11251379, "category_id": 144, "iscrowd": 0, "bbox": [19, 141, 271, 339], "area": 54195}, {"id": 5002318, "category_id": 178, "iscrowd": 0, "bbox": [248, 163, 392, 317], "area": 66559}, {"id": 3033140, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 345], "area": 119872}, {"id": 6051672, "category_id": 198, "iscrowd": 0, "bbox": [384, 195, 256, 222], "area": 11479}], "file_name": "000000257566.png", "image_id": 257566}, {"segments_info": [{"id": 5060698, "category_id": 1, "iscrowd": 0, "bbox": [118, 1, 262, 629], "area": 108154}, {"id": 12695985, "category_id": 37, "iscrowd": 0, "bbox": [66, 603, 103, 37], "area": 2413}, {"id": 10588031, "category_id": 37, "iscrowd": 0, "bbox": [117, 568, 102, 72], "area": 5101}, {"id": 1190164, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 424, 179], "area": 45105}, {"id": 4952429, "category_id": 193, "iscrowd": 0, "bbox": [0, 140, 424, 500], "area": 106230}], "file_name": "000000257624.png", "image_id": 257624}, {"segments_info": [{"id": 10328739, "category_id": 1, "iscrowd": 0, "bbox": [170, 79, 193, 341], "area": 41531}, {"id": 6053465, "category_id": 43, "iscrowd": 0, "bbox": [234, 380, 165, 46], "area": 692}, {"id": 1118994, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 229712}], "file_name": "000000257865.png", "image_id": 257865}, {"segments_info": [{"id": 3820880, "category_id": 1, "iscrowd": 0, "bbox": [122, 23, 353, 610], "area": 135223}, {"id": 3553607, "category_id": 32, "iscrowd": 0, "bbox": [216, 321, 42, 57], "area": 1330}, {"id": 5205908, "category_id": 112, "iscrowd": 0, "bbox": [52, 338, 38, 92], "area": 1923}, {"id": 7706545, "category_id": 130, "iscrowd": 0, "bbox": [29, 336, 43, 30], "area": 873}, {"id": 4015723, "category_id": 144, "iscrowd": 0, "bbox": [414, 249, 66, 391], "area": 4223}, {"id": 1648448, "category_id": 147, "iscrowd": 0, "bbox": [0, 252, 432, 388], "area": 33292}, {"id": 2041661, "category_id": 184, "iscrowd": 0, "bbox": [373, 165, 107, 111], "area": 7547}, {"id": 15589324, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 192], "area": 62302}, {"id": 2699329, "category_id": 197, "iscrowd": 0, "bbox": [0, 142, 480, 380], "area": 52418}], "file_name": "000000257896.png", "image_id": 257896}, {"segments_info": [{"id": 1778489, "category_id": 1, "iscrowd": 0, "bbox": [409, 105, 103, 255], "area": 11732}, {"id": 1251881, "category_id": 1, "iscrowd": 0, "bbox": [144, 66, 123, 240], "area": 15547}, {"id": 1447710, "category_id": 1, "iscrowd": 0, "bbox": [519, 210, 47, 99], "area": 2886}, {"id": 988705, "category_id": 41, "iscrowd": 0, "bbox": [151, 298, 80, 33], "area": 1262}, {"id": 1448742, "category_id": 112, "iscrowd": 0, "bbox": [612, 194, 28, 114], "area": 2477}, {"id": 330266, "category_id": 171, "iscrowd": 0, "bbox": [0, 127, 640, 181], "area": 60860}, {"id": 12698304, "category_id": 181, "iscrowd": 0, "bbox": [128, 173, 418, 54], "area": 4341}, {"id": 198935, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 179], "area": 92680}, {"id": 1186345, "category_id": 190, "iscrowd": 0, "bbox": [0, 287, 640, 138], "area": 67017}, {"id": 133657, "category_id": 197, "iscrowd": 0, "bbox": [225, 255, 94, 51], "area": 2620}, {"id": 1511475, "category_id": 199, "iscrowd": 0, "bbox": [114, 281, 194, 116], "area": 10128}], "file_name": "000000258388.png", "image_id": 258388}, {"segments_info": [{"id": 10910341, "category_id": 1, "iscrowd": 0, "bbox": [19, 29, 243, 414], "area": 63013}, {"id": 4212155, "category_id": 32, "iscrowd": 0, "bbox": [105, 142, 47, 232], "area": 6430}, {"id": 2114957, "category_id": 186, "iscrowd": 0, "bbox": [91, 0, 245, 123], "area": 18699}, {"id": 1133463, "category_id": 190, "iscrowd": 0, "bbox": [0, 225, 336, 223], "area": 22522}, {"id": 2377864, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 336, 399], "area": 38723}], "file_name": "000000258541.png", "image_id": 258541}, {"segments_info": [{"id": 1512469, "category_id": 1, "iscrowd": 0, "bbox": [180, 232, 16, 36], "area": 320}, {"id": 3748654, "category_id": 3, "iscrowd": 0, "bbox": [593, 233, 23, 14], "area": 228}, {"id": 3485486, "category_id": 3, "iscrowd": 0, "bbox": [576, 233, 21, 11], "area": 190}, {"id": 1315863, "category_id": 14, "iscrowd": 0, "bbox": [440, 376, 93, 96], "area": 6783}, {"id": 2434606, "category_id": 149, "iscrowd": 0, "bbox": [0, 238, 640, 238], "area": 122071}, {"id": 1578781, "category_id": 185, "iscrowd": 0, "bbox": [0, 225, 640, 53], "area": 10797}, {"id": 15921648, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 233], "area": 76750}, {"id": 3092020, "category_id": 191, "iscrowd": 0, "bbox": [0, 239, 640, 237], "area": 10200}, {"id": 3224898, "category_id": 197, "iscrowd": 0, "bbox": [0, 10, 640, 251], "area": 76894}], "file_name": "000000258793.png", "image_id": 258793}, {"segments_info": [{"id": 7634585, "category_id": 1, "iscrowd": 0, "bbox": [0, 65, 280, 283], "area": 34059}, {"id": 12633798, "category_id": 51, "iscrowd": 0, "bbox": [223, 189, 126, 53], "area": 3887}, {"id": 11122871, "category_id": 59, "iscrowd": 0, "bbox": [19, 302, 290, 115], "area": 19776}, {"id": 9544360, "category_id": 59, "iscrowd": 0, "bbox": [318, 342, 108, 123], "area": 9809}, {"id": 10593181, "category_id": 59, "iscrowd": 0, "bbox": [0, 465, 351, 135], "area": 35290}, {"id": 12696235, "category_id": 85, "iscrowd": 0, "bbox": [60, 153, 27, 34], "area": 775}, {"id": 10397868, "category_id": 196, "iscrowd": 0, "bbox": [10, 58, 314, 432], "area": 39313}, {"id": 4948132, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 426, 308], "area": 53841}], "file_name": "000000258883.png", "image_id": 258883}, {"segments_info": [{"id": 2831422, "category_id": 1, "iscrowd": 0, "bbox": [544, 200, 96, 224], "area": 4761}, {"id": 4344142, "category_id": 1, "iscrowd": 0, "bbox": [545, 103, 93, 317], "area": 13535}, {"id": 3628968, "category_id": 1, "iscrowd": 0, "bbox": [316, 88, 39, 86], "area": 1824}, {"id": 2897728, "category_id": 21, "iscrowd": 0, "bbox": [355, 191, 128, 115], "area": 6167}, {"id": 2703445, "category_id": 21, "iscrowd": 0, "bbox": [11, 153, 422, 85], "area": 8775}, {"id": 2506323, "category_id": 21, "iscrowd": 0, "bbox": [112, 143, 341, 61], "area": 5879}, {"id": 3559271, "category_id": 21, "iscrowd": 0, "bbox": [1, 191, 415, 203], "area": 19736}, {"id": 2706283, "category_id": 21, "iscrowd": 0, "bbox": [4, 211, 372, 208], "area": 49146}, {"id": 7241093, "category_id": 185, "iscrowd": 0, "bbox": [349, 101, 291, 156], "area": 19873}, {"id": 9672858, "category_id": 190, "iscrowd": 0, "bbox": [414, 234, 191, 192], "area": 24832}, {"id": 8690596, "category_id": 199, "iscrowd": 0, "bbox": [42, 0, 598, 157], "area": 43834}], "file_name": "000000258911.png", "image_id": 258911}, {"segments_info": [{"id": 4481714, "category_id": 1, "iscrowd": 0, "bbox": [193, 143, 40, 114], "area": 2423}, {"id": 6451946, "category_id": 34, "iscrowd": 0, "bbox": [203, 120, 15, 4], "area": 52}, {"id": 15130315, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 185], "area": 87071}, {"id": 2965568, "category_id": 192, "iscrowd": 0, "bbox": [0, 167, 500, 51], "area": 16009}], "file_name": "000000259097.png", "image_id": 259097}, {"segments_info": [{"id": 6188931, "category_id": 25, "iscrowd": 0, "bbox": [134, 97, 289, 228], "area": 21419}, {"id": 11253693, "category_id": 154, "iscrowd": 0, "bbox": [0, 236, 640, 232], "area": 97137}, {"id": 2897210, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 640, 270], "area": 138856}, {"id": 4344907, "category_id": 191, "iscrowd": 0, "bbox": [0, 371, 456, 109], "area": 20663}, {"id": 3692875, "category_id": 193, "iscrowd": 0, "bbox": [0, 233, 640, 247], "area": 26967}], "file_name": "000000259382.png", "image_id": 259382}, {"segments_info": [{"id": 5857669, "category_id": 1, "iscrowd": 0, "bbox": [304, 79, 33, 31], "area": 481}, {"id": 4734294, "category_id": 1, "iscrowd": 0, "bbox": [228, 57, 10, 47], "area": 229}, {"id": 7763620, "category_id": 1, "iscrowd": 0, "bbox": [255, 56, 32, 38], "area": 314}, {"id": 6778254, "category_id": 1, "iscrowd": 0, "bbox": [339, 81, 30, 29], "area": 492}, {"id": 7040903, "category_id": 1, "iscrowd": 0, "bbox": [230, 67, 34, 43], "area": 857}, {"id": 6185585, "category_id": 1, "iscrowd": 0, "bbox": [402, 87, 26, 25], "area": 326}, {"id": 10064549, "category_id": 1, "iscrowd": 0, "bbox": [368, 75, 23, 36], "area": 353}, {"id": 7040137, "category_id": 1, "iscrowd": 0, "bbox": [263, 63, 20, 49], "area": 500}, {"id": 7435667, "category_id": 1, "iscrowd": 0, "bbox": [272, 82, 23, 35], "area": 557}, {"id": 5394605, "category_id": 1, "iscrowd": 0, "bbox": [422, 79, 10, 12], "area": 104}, {"id": 8684187, "category_id": 1, "iscrowd": 0, "bbox": [414, 77, 38, 30], "area": 640}, {"id": 4210048, "category_id": 1, "iscrowd": 0, "bbox": [369, 60, 24, 31], "area": 347}, {"id": 8748952, "category_id": 1, "iscrowd": 0, "bbox": [380, 67, 34, 45], "area": 630}, {"id": 4210488, "category_id": 1, "iscrowd": 1, "bbox": [237, 55, 132, 40], "area": 106}, {"id": 5467019, "category_id": 6, "iscrowd": 0, "bbox": [25, 87, 154, 135], "area": 15307}, {"id": 3621989, "category_id": 8, "iscrowd": 0, "bbox": [166, 56, 295, 222], "area": 44925}, {"id": 5264713, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 196], "area": 45862}, {"id": 4339759, "category_id": 185, "iscrowd": 0, "bbox": [460, 129, 40, 53], "area": 1384}, {"id": 15791863, "category_id": 187, "iscrowd": 0, "bbox": [58, 0, 16, 22], "area": 274}, {"id": 8622752, "category_id": 191, "iscrowd": 0, "bbox": [0, 167, 500, 114], "area": 15671}, {"id": 8697042, "category_id": 193, "iscrowd": 0, "bbox": [0, 205, 292, 76], "area": 6267}], "file_name": "000000259571.png", "image_id": 259571}, {"segments_info": [{"id": 3684158, "category_id": 1, "iscrowd": 0, "bbox": [452, 24, 75, 206], "area": 6162}, {"id": 2437976, "category_id": 1, "iscrowd": 0, "bbox": [348, 14, 73, 139], "area": 6424}, {"id": 1054256, "category_id": 1, "iscrowd": 0, "bbox": [432, 84, 26, 68], "area": 1236}, {"id": 856865, "category_id": 1, "iscrowd": 0, "bbox": [273, 80, 52, 67], "area": 1987}, {"id": 330004, "category_id": 1, "iscrowd": 0, "bbox": [30, 94, 76, 119], "area": 4632}, {"id": 1514543, "category_id": 1, "iscrowd": 0, "bbox": [320, 88, 28, 64], "area": 1186}, {"id": 1053983, "category_id": 1, "iscrowd": 0, "bbox": [517, 45, 52, 113], "area": 4032}, {"id": 1121076, "category_id": 1, "iscrowd": 0, "bbox": [230, 91, 35, 53], "area": 1026}, {"id": 1054505, "category_id": 1, "iscrowd": 0, "bbox": [24, 28, 272, 276], "area": 41161}, {"id": 3892106, "category_id": 1, "iscrowd": 0, "bbox": [335, 70, 24, 42], "area": 441}, {"id": 1318183, "category_id": 1, "iscrowd": 0, "bbox": [563, 48, 50, 109], "area": 2911}, {"id": 1846601, "category_id": 1, "iscrowd": 0, "bbox": [597, 56, 42, 106], "area": 2935}, {"id": 923710, "category_id": 1, "iscrowd": 0, "bbox": [10, 77, 30, 58], "area": 1162}, {"id": 2770782, "category_id": 1, "iscrowd": 1, "bbox": [0, 32, 579, 195], "area": 15828}, {"id": 857895, "category_id": 15, "iscrowd": 0, "bbox": [248, 147, 391, 159], "area": 44244}, {"id": 198159, "category_id": 62, "iscrowd": 0, "bbox": [372, 184, 73, 113], "area": 5793}, {"id": 1979212, "category_id": 62, "iscrowd": 0, "bbox": [1, 180, 38, 80], "area": 810}, {"id": 1585229, "category_id": 62, "iscrowd": 0, "bbox": [32, 161, 21, 49], "area": 290}, {"id": 7700624, "category_id": 77, "iscrowd": 0, "bbox": [209, 105, 26, 70], "area": 1136}, {"id": 1848913, "category_id": 112, "iscrowd": 0, "bbox": [12, 0, 319, 149], "area": 2854}, {"id": 7123647, "category_id": 184, "iscrowd": 0, "bbox": [237, 0, 343, 102], "area": 11580}, {"id": 2639468, "category_id": 189, "iscrowd": 0, "bbox": [264, 141, 60, 7], "area": 217}, {"id": 2174788, "category_id": 191, "iscrowd": 0, "bbox": [0, 180, 601, 132], "area": 9599}, {"id": 8630461, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 153], "area": 26436}], "file_name": "000000259597.png", "image_id": 259597}, {"segments_info": [{"id": 6188411, "category_id": 22, "iscrowd": 0, "bbox": [141, 163, 239, 144], "area": 18427}, {"id": 8819361, "category_id": 151, "iscrowd": 0, "bbox": [119, 52, 51, 22], "area": 652}, {"id": 7506323, "category_id": 178, "iscrowd": 0, "bbox": [17, 301, 54, 26], "area": 857}, {"id": 6257019, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 293], "area": 81741}, {"id": 8292742, "category_id": 185, "iscrowd": 0, "bbox": [0, 42, 538, 385], "area": 24576}, {"id": 8883866, "category_id": 191, "iscrowd": 0, "bbox": [268, 373, 372, 54], "area": 13134}, {"id": 6457988, "category_id": 193, "iscrowd": 0, "bbox": [15, 81, 625, 330], "area": 28874}, {"id": 11911624, "category_id": 194, "iscrowd": 0, "bbox": [9, 77, 557, 350], "area": 65320}, {"id": 11578794, "category_id": 197, "iscrowd": 0, "bbox": [619, 25, 21, 130], "area": 2066}, {"id": 11056311, "category_id": 198, "iscrowd": 0, "bbox": [96, 74, 245, 44], "area": 1429}], "file_name": "000000259625.png", "image_id": 259625}, {"segments_info": [{"id": 789801, "category_id": 1, "iscrowd": 0, "bbox": [552, 223, 29, 73], "area": 1143}, {"id": 1120295, "category_id": 1, "iscrowd": 0, "bbox": [459, 221, 26, 90], "area": 939}, {"id": 3690339, "category_id": 1, "iscrowd": 0, "bbox": [397, 205, 112, 221], "area": 8773}, {"id": 876115, "category_id": 1, "iscrowd": 0, "bbox": [584, 220, 39, 61], "area": 1141}, {"id": 593173, "category_id": 1, "iscrowd": 0, "bbox": [350, 228, 25, 127], "area": 2056}, {"id": 2302765, "category_id": 1, "iscrowd": 0, "bbox": [355, 213, 39, 136], "area": 1501}, {"id": 1185827, "category_id": 1, "iscrowd": 0, "bbox": [484, 228, 32, 96], "area": 1096}, {"id": 1322609, "category_id": 1, "iscrowd": 0, "bbox": [412, 223, 16, 19], "area": 160}, {"id": 658462, "category_id": 1, "iscrowd": 0, "bbox": [516, 224, 28, 100], "area": 1784}, {"id": 593429, "category_id": 2, "iscrowd": 0, "bbox": [547, 268, 93, 87], "area": 3610}, {"id": 921881, "category_id": 2, "iscrowd": 0, "bbox": [398, 339, 91, 87], "area": 3760}, {"id": 726048, "category_id": 2, "iscrowd": 0, "bbox": [386, 262, 21, 48], "area": 552}, {"id": 593686, "category_id": 2, "iscrowd": 0, "bbox": [509, 269, 20, 46], "area": 576}, {"id": 8035251, "category_id": 8, "iscrowd": 0, "bbox": [77, 62, 275, 294], "area": 55343}, {"id": 1909544, "category_id": 27, "iscrowd": 0, "bbox": [575, 241, 27, 35], "area": 654}, {"id": 1253208, "category_id": 31, "iscrowd": 0, "bbox": [419, 243, 81, 148], "area": 3150}, {"id": 1253166, "category_id": 31, "iscrowd": 0, "bbox": [492, 256, 26, 35], "area": 253}, {"id": 279381, "category_id": 55, "iscrowd": 0, "bbox": [0, 347, 140, 44], "area": 4287}, {"id": 411485, "category_id": 55, "iscrowd": 0, "bbox": [109, 340, 115, 46], "area": 3305}, {"id": 1001656, "category_id": 55, "iscrowd": 0, "bbox": [92, 338, 20, 18], "area": 274}, {"id": 412017, "category_id": 55, "iscrowd": 0, "bbox": [132, 358, 9, 8], "area": 60}, {"id": 1390712, "category_id": 100, "iscrowd": 0, "bbox": [0, 175, 248, 252], "area": 15399}, {"id": 350334, "category_id": 122, "iscrowd": 0, "bbox": [51, 385, 53, 13], "area": 186}, {"id": 264203, "category_id": 149, "iscrowd": 0, "bbox": [229, 336, 125, 56], "area": 2191}, {"id": 5600400, "category_id": 166, "iscrowd": 0, "bbox": [0, 55, 204, 282], "area": 17230}, {"id": 10596026, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 116], "area": 50820}, {"id": 793127, "category_id": 191, "iscrowd": 0, "bbox": [309, 301, 331, 126], "area": 19965}, {"id": 12236232, "category_id": 195, "iscrowd": 0, "bbox": [136, 393, 68, 34], "area": 1382}, {"id": 1914193, "category_id": 197, "iscrowd": 0, "bbox": [348, 56, 292, 253], "area": 45211}], "file_name": "000000259640.png", "image_id": 259640}, {"segments_info": [{"id": 8684436, "category_id": 1, "iscrowd": 0, "bbox": [176, 121, 39, 75], "area": 1252}, {"id": 7564687, "category_id": 1, "iscrowd": 0, "bbox": [70, 107, 36, 64], "area": 880}, {"id": 7302276, "category_id": 1, "iscrowd": 0, "bbox": [207, 102, 14, 30], "area": 167}, {"id": 8883071, "category_id": 1, "iscrowd": 0, "bbox": [167, 105, 21, 40], "area": 464}, {"id": 4607582, "category_id": 1, "iscrowd": 0, "bbox": [148, 136, 212, 213], "area": 15438}, {"id": 7039589, "category_id": 1, "iscrowd": 0, "bbox": [244, 128, 18, 49], "area": 432}, {"id": 9275277, "category_id": 1, "iscrowd": 0, "bbox": [27, 105, 45, 52], "area": 952}, {"id": 7696253, "category_id": 1, "iscrowd": 0, "bbox": [293, 85, 137, 301], "area": 21777}, {"id": 10656156, "category_id": 1, "iscrowd": 0, "bbox": [67, 129, 29, 75], "area": 1399}, {"id": 10590368, "category_id": 1, "iscrowd": 0, "bbox": [194, 104, 22, 41], "area": 459}, {"id": 8027268, "category_id": 1, "iscrowd": 0, "bbox": [252, 128, 23, 43], "area": 391}, {"id": 7041162, "category_id": 1, "iscrowd": 0, "bbox": [103, 125, 33, 76], "area": 1441}, {"id": 10982804, "category_id": 1, "iscrowd": 0, "bbox": [148, 123, 32, 78], "area": 1514}, {"id": 8093061, "category_id": 1, "iscrowd": 1, "bbox": [27, 98, 226, 115], "area": 4392}, {"id": 7829364, "category_id": 3, "iscrowd": 0, "bbox": [447, 113, 128, 37], "area": 2858}, {"id": 10460047, "category_id": 3, "iscrowd": 0, "bbox": [404, 129, 27, 10], "area": 184}, {"id": 11777457, "category_id": 3, "iscrowd": 0, "bbox": [410, 130, 50, 28], "area": 887}, {"id": 11248797, "category_id": 3, "iscrowd": 0, "bbox": [620, 116, 20, 5], "area": 92}, {"id": 5987674, "category_id": 6, "iscrowd": 0, "bbox": [543, 78, 97, 74], "area": 2993}, {"id": 8093050, "category_id": 8, "iscrowd": 0, "bbox": [574, 119, 65, 34], "area": 1549}, {"id": 6184542, "category_id": 8, "iscrowd": 0, "bbox": [546, 100, 75, 21], "area": 670}, {"id": 10389602, "category_id": 15, "iscrowd": 0, "bbox": [133, 149, 17, 3], "area": 48}, {"id": 8812374, "category_id": 15, "iscrowd": 0, "bbox": [36, 163, 129, 34], "area": 408}, {"id": 8750978, "category_id": 15, "iscrowd": 0, "bbox": [175, 162, 67, 27], "area": 714}, {"id": 4738905, "category_id": 39, "iscrowd": 0, "bbox": [381, 167, 91, 44], "area": 818}, {"id": 2897732, "category_id": 62, "iscrowd": 0, "bbox": [159, 219, 176, 193], "area": 11419}, {"id": 5014403, "category_id": 145, "iscrowd": 0, "bbox": [0, 159, 640, 114], "area": 18147}, {"id": 4541248, "category_id": 184, "iscrowd": 0, "bbox": [593, 39, 47, 40], "area": 1409}, {"id": 6121572, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 225], "area": 57279}, {"id": 15855852, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 71], "area": 24983}, {"id": 8235702, "category_id": 193, "iscrowd": 0, "bbox": [200, 192, 28, 20], "area": 295}], "file_name": "000000259690.png", "image_id": 259690}, {"segments_info": [{"id": 7773623, "category_id": 1, "iscrowd": 0, "bbox": [0, 349, 35, 107], "area": 2191}, {"id": 4212812, "category_id": 2, "iscrowd": 0, "bbox": [268, 445, 94, 123], "area": 5500}, {"id": 4477528, "category_id": 2, "iscrowd": 0, "bbox": [339, 427, 86, 152], "area": 6292}, {"id": 5202018, "category_id": 2, "iscrowd": 0, "bbox": [220, 477, 68, 83], "area": 1159}, {"id": 2896436, "category_id": 4, "iscrowd": 0, "bbox": [2, 384, 119, 149], "area": 11472}, {"id": 5198675, "category_id": 149, "iscrowd": 0, "bbox": [0, 396, 425, 244], "area": 13426}, {"id": 12043221, "category_id": 181, "iscrowd": 0, "bbox": [22, 175, 188, 166], "area": 941}, {"id": 4808298, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 211, 307], "area": 49627}, {"id": 5529443, "category_id": 191, "iscrowd": 0, "bbox": [0, 481, 425, 154], "area": 32158}, {"id": 6455178, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 425, 499], "area": 133153}], "file_name": "000000259830.png", "image_id": 259830}, {"segments_info": [{"id": 5393233, "category_id": 1, "iscrowd": 0, "bbox": [298, 396, 42, 70], "area": 1336}, {"id": 4281422, "category_id": 184, "iscrowd": 0, "bbox": [127, 253, 513, 227], "area": 32106}, {"id": 16576990, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 619, 449], "area": 174129}, {"id": 6049352, "category_id": 197, "iscrowd": 0, "bbox": [0, 199, 563, 281], "area": 41292}, {"id": 4869971, "category_id": 199, "iscrowd": 0, "bbox": [542, 0, 98, 397], "area": 25510}], "file_name": "000000259854.png", "image_id": 259854}, {"segments_info": [{"id": 3816270, "category_id": 47, "iscrowd": 0, "bbox": [276, 0, 90, 59], "area": 4601}, {"id": 4803412, "category_id": 48, "iscrowd": 0, "bbox": [416, 2, 150, 125], "area": 3213}, {"id": 1644826, "category_id": 49, "iscrowd": 0, "bbox": [473, 18, 53, 98], "area": 1176}, {"id": 4803417, "category_id": 50, "iscrowd": 0, "bbox": [243, 8, 36, 20], "area": 587}, {"id": 3558518, "category_id": 59, "iscrowd": 0, "bbox": [0, 1, 105, 25], "area": 1707}, {"id": 7764624, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 88206}, {"id": 1316380, "category_id": 190, "iscrowd": 0, "bbox": [490, 0, 150, 91], "area": 5346}, {"id": 4999297, "category_id": 195, "iscrowd": 0, "bbox": [0, 145, 91, 167], "area": 8204}, {"id": 7246519, "category_id": 196, "iscrowd": 0, "bbox": [17, 0, 611, 446], "area": 141574}], "file_name": "000000260105.png", "image_id": 260105}, {"segments_info": [{"id": 8290731, "category_id": 1, "iscrowd": 0, "bbox": [72, 408, 23, 80], "area": 1109}, {"id": 7302773, "category_id": 1, "iscrowd": 0, "bbox": [168, 91, 160, 205], "area": 8528}, {"id": 13421519, "category_id": 1, "iscrowd": 0, "bbox": [0, 332, 21, 47], "area": 596}, {"id": 10527149, "category_id": 1, "iscrowd": 0, "bbox": [99, 394, 39, 94], "area": 1504}, {"id": 2962758, "category_id": 19, "iscrowd": 0, "bbox": [111, 111, 266, 365], "area": 30951}, {"id": 3161433, "category_id": 19, "iscrowd": 0, "bbox": [0, 394, 61, 95], "area": 2381}, {"id": 3557439, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 400, 448], "area": 92125}, {"id": 8947587, "category_id": 185, "iscrowd": 0, "bbox": [0, 420, 11, 16], "area": 140}, {"id": 6262921, "category_id": 193, "iscrowd": 0, "bbox": [0, 269, 400, 331], "area": 63701}, {"id": 9415095, "category_id": 194, "iscrowd": 0, "bbox": [0, 436, 400, 51], "area": 2074}, {"id": 11906979, "category_id": 197, "iscrowd": 0, "bbox": [368, 203, 32, 58], "area": 1439}], "file_name": "000000260106.png", "image_id": 260106}, {"segments_info": [{"id": 3157034, "category_id": 1, "iscrowd": 0, "bbox": [396, 223, 6, 8], "area": 37}, {"id": 5459015, "category_id": 1, "iscrowd": 0, "bbox": [174, 155, 169, 470], "area": 40265}, {"id": 6586505, "category_id": 8, "iscrowd": 0, "bbox": [3, 174, 352, 291], "area": 60945}, {"id": 6512995, "category_id": 49, "iscrowd": 0, "bbox": [180, 286, 40, 33], "area": 578}, {"id": 3305087, "category_id": 122, "iscrowd": 0, "bbox": [0, 186, 219, 161], "area": 1702}, {"id": 7305340, "category_id": 149, "iscrowd": 0, "bbox": [101, 233, 325, 382], "area": 37846}, {"id": 1580058, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 426, 240], "area": 57403}, {"id": 13283467, "category_id": 187, "iscrowd": 0, "bbox": [47, 101, 348, 91], "area": 1130}, {"id": 5333115, "category_id": 191, "iscrowd": 0, "bbox": [0, 297, 426, 343], "area": 46696}, {"id": 4541261, "category_id": 197, "iscrowd": 0, "bbox": [27, 103, 352, 138], "area": 2726}, {"id": 5130306, "category_id": 199, "iscrowd": 0, "bbox": [385, 133, 41, 120], "area": 3097}], "file_name": "000000260261.png", "image_id": 260261}, {"segments_info": [{"id": 2367259, "category_id": 3, "iscrowd": 0, "bbox": [177, 527, 39, 27], "area": 736}, {"id": 2236702, "category_id": 3, "iscrowd": 0, "bbox": [51, 516, 74, 36], "area": 1933}, {"id": 4210237, "category_id": 3, "iscrowd": 0, "bbox": [123, 523, 59, 34], "area": 1396}, {"id": 2300949, "category_id": 3, "iscrowd": 0, "bbox": [257, 536, 10, 7], "area": 48}, {"id": 992034, "category_id": 10, "iscrowd": 0, "bbox": [312, 43, 36, 92], "area": 2482}, {"id": 3354674, "category_id": 10, "iscrowd": 0, "bbox": [349, 404, 18, 37], "area": 567}, {"id": 3683638, "category_id": 10, "iscrowd": 0, "bbox": [347, 32, 40, 113], "area": 3751}, {"id": 2369847, "category_id": 10, "iscrowd": 0, "bbox": [331, 402, 15, 38], "area": 497}, {"id": 2172198, "category_id": 149, "iscrowd": 0, "bbox": [0, 535, 479, 105], "area": 40916}, {"id": 4607311, "category_id": 184, "iscrowd": 0, "bbox": [0, 396, 479, 217], "area": 34505}, {"id": 12814696, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 479, 508], "area": 194742}, {"id": 4151922, "category_id": 197, "iscrowd": 0, "bbox": [0, 358, 165, 176], "area": 21341}], "file_name": "000000260266.png", "image_id": 260266}, {"segments_info": [{"id": 4670524, "category_id": 1, "iscrowd": 0, "bbox": [256, 54, 14, 45], "area": 398}, {"id": 4405034, "category_id": 1, "iscrowd": 0, "bbox": [267, 55, 11, 41], "area": 244}, {"id": 2565258, "category_id": 1, "iscrowd": 0, "bbox": [12, 57, 166, 150], "area": 19516}, {"id": 1454138, "category_id": 1, "iscrowd": 0, "bbox": [607, 0, 33, 186], "area": 3778}, {"id": 6181701, "category_id": 1, "iscrowd": 0, "bbox": [177, 56, 23, 60], "area": 782}, {"id": 7960948, "category_id": 1, "iscrowd": 0, "bbox": [278, 53, 62, 81], "area": 3553}, {"id": 13875095, "category_id": 3, "iscrowd": 0, "bbox": [328, 59, 103, 67], "area": 4111}, {"id": 1591403, "category_id": 60, "iscrowd": 0, "bbox": [496, 130, 31, 25], "area": 603}, {"id": 6064558, "category_id": 61, "iscrowd": 0, "bbox": [368, 201, 57, 36], "area": 1362}, {"id": 5078425, "category_id": 61, "iscrowd": 0, "bbox": [44, 244, 234, 183], "area": 31113}, {"id": 3760308, "category_id": 61, "iscrowd": 0, "bbox": [341, 139, 24, 24], "area": 320}, {"id": 1521508, "category_id": 61, "iscrowd": 0, "bbox": [511, 150, 34, 25], "area": 669}, {"id": 7835817, "category_id": 61, "iscrowd": 0, "bbox": [395, 236, 70, 34], "area": 1905}, {"id": 5734305, "category_id": 61, "iscrowd": 0, "bbox": [421, 205, 57, 40], "area": 1466}, {"id": 9023183, "category_id": 61, "iscrowd": 0, "bbox": [3, 194, 235, 83], "area": 11000}, {"id": 4746635, "category_id": 61, "iscrowd": 0, "bbox": [457, 189, 41, 34], "area": 943}, {"id": 3764905, "category_id": 61, "iscrowd": 0, "bbox": [312, 144, 25, 22], "area": 389}, {"id": 7707833, "category_id": 61, "iscrowd": 0, "bbox": [337, 225, 65, 35], "area": 1797}, {"id": 7709114, "category_id": 61, "iscrowd": 0, "bbox": [322, 159, 33, 32], "area": 808}, {"id": 5996701, "category_id": 61, "iscrowd": 0, "bbox": [418, 186, 39, 30], "area": 750}, {"id": 2901081, "category_id": 61, "iscrowd": 0, "bbox": [1, 247, 66, 71], "area": 3607}, {"id": 5141922, "category_id": 61, "iscrowd": 1, "bbox": [231, 92, 311, 193], "area": 21684}, {"id": 5280931, "category_id": 119, "iscrowd": 0, "bbox": [450, 0, 124, 70], "area": 4639}, {"id": 11114889, "category_id": 149, "iscrowd": 0, "bbox": [12, 99, 276, 112], "area": 5204}, {"id": 14795696, "category_id": 151, "iscrowd": 0, "bbox": [281, 0, 89, 38], "area": 1377}, {"id": 5333344, "category_id": 184, "iscrowd": 0, "bbox": [98, 0, 86, 32], "area": 1167}, {"id": 5857381, "category_id": 189, "iscrowd": 0, "bbox": [0, 76, 618, 351], "area": 51343}, {"id": 1027, "category_id": 190, "iscrowd": 0, "bbox": [544, 255, 96, 172], "area": 10766}, {"id": 11313290, "category_id": 191, "iscrowd": 0, "bbox": [188, 68, 92, 57], "area": 2670}, {"id": 7049133, "category_id": 195, "iscrowd": 0, "bbox": [230, 0, 220, 240], "area": 3668}, {"id": 5204877, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 461, 254], "area": 18150}, {"id": 12101786, "category_id": 197, "iscrowd": 0, "bbox": [179, 0, 251, 36], "area": 2691}, {"id": 2838879, "category_id": 199, "iscrowd": 0, "bbox": [555, 0, 68, 30], "area": 1297}], "file_name": "000000260470.png", "image_id": 260470}, {"segments_info": [{"id": 5659481, "category_id": 184, "iscrowd": 0, "bbox": [270, 202, 230, 67], "area": 9550}, {"id": 11841963, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 269], "area": 81706}], "file_name": "000000260657.png", "image_id": 260657}, {"segments_info": [{"id": 799045, "category_id": 1, "iscrowd": 0, "bbox": [547, 36, 13, 21], "area": 143}, {"id": 3298383, "category_id": 3, "iscrowd": 0, "bbox": [1, 29, 639, 445], "area": 215836}, {"id": 3963261, "category_id": 17, "iscrowd": 0, "bbox": [71, 236, 495, 190], "area": 48154}, {"id": 1792879, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 123], "area": 26412}, {"id": 464923, "category_id": 181, "iscrowd": 0, "bbox": [119, 17, 18, 18], "area": 282}, {"id": 533793, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 109, 114], "area": 6396}, {"id": 2576718, "category_id": 191, "iscrowd": 0, "bbox": [0, 110, 72, 107], "area": 1537}, {"id": 340257, "category_id": 193, "iscrowd": 0, "bbox": [0, 105, 59, 40], "area": 1825}, {"id": 1134454, "category_id": 197, "iscrowd": 0, "bbox": [157, 18, 93, 26], "area": 1670}], "file_name": "000000260925.png", "image_id": 260925}, {"segments_info": [{"id": 5860984, "category_id": 1, "iscrowd": 0, "bbox": [308, 6, 23, 108], "area": 1685}, {"id": 4603462, "category_id": 1, "iscrowd": 0, "bbox": [41, 126, 107, 327], "area": 17983}, {"id": 6120297, "category_id": 1, "iscrowd": 0, "bbox": [44, 1, 34, 111], "area": 2117}, {"id": 4545774, "category_id": 34, "iscrowd": 0, "bbox": [170, 432, 56, 12], "area": 489}, {"id": 8599403, "category_id": 34, "iscrowd": 0, "bbox": [163, 441, 58, 11], "area": 434}, {"id": 14848949, "category_id": 34, "iscrowd": 0, "bbox": [85, 88, 71, 38], "area": 2024}, {"id": 5468008, "category_id": 184, "iscrowd": 0, "bbox": [184, 0, 57, 17], "area": 810}, {"id": 9808055, "category_id": 191, "iscrowd": 0, "bbox": [0, 484, 17, 16], "area": 176}, {"id": 6136491, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 333, 500], "area": 119039}, {"id": 6512213, "category_id": 199, "iscrowd": 0, "bbox": [13, 0, 297, 28], "area": 2621}], "file_name": "000000261036.png", "image_id": 261036}, {"segments_info": [{"id": 4082534, "category_id": 1, "iscrowd": 0, "bbox": [260, 42, 112, 292], "area": 18228}, {"id": 4733720, "category_id": 39, "iscrowd": 0, "bbox": [133, 230, 112, 9], "area": 760}, {"id": 5594677, "category_id": 64, "iscrowd": 0, "bbox": [21, 75, 99, 48], "area": 3185}, {"id": 7893311, "category_id": 64, "iscrowd": 0, "bbox": [165, 98, 40, 55], "area": 1592}, {"id": 7501127, "category_id": 64, "iscrowd": 0, "bbox": [6, 124, 106, 65], "area": 4804}, {"id": 8482869, "category_id": 119, "iscrowd": 0, "bbox": [89, 74, 200, 68], "area": 6547}, {"id": 9013097, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 500, 109], "area": 33805}, {"id": 2244369, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 119, 82], "area": 6305}, {"id": 2123033, "category_id": 193, "iscrowd": 0, "bbox": [0, 74, 500, 260], "area": 82363}, {"id": 4805433, "category_id": 194, "iscrowd": 0, "bbox": [0, 119, 251, 92], "area": 5784}], "file_name": "000000261061.png", "image_id": 261061}, {"segments_info": [{"id": 9674433, "category_id": 1, "iscrowd": 0, "bbox": [188, 182, 27, 33], "area": 500}, {"id": 2239563, "category_id": 1, "iscrowd": 0, "bbox": [121, 164, 14, 16], "area": 109}, {"id": 1250858, "category_id": 1, "iscrowd": 0, "bbox": [1, 131, 25, 35], "area": 633}, {"id": 4477042, "category_id": 1, "iscrowd": 0, "bbox": [274, 183, 23, 30], "area": 264}, {"id": 6386589, "category_id": 1, "iscrowd": 0, "bbox": [228, 165, 25, 23], "area": 329}, {"id": 2636118, "category_id": 1, "iscrowd": 0, "bbox": [26, 105, 19, 17], "area": 201}, {"id": 6382190, "category_id": 1, "iscrowd": 0, "bbox": [129, 188, 68, 235], "area": 9647}, {"id": 7111082, "category_id": 1, "iscrowd": 0, "bbox": [246, 185, 26, 31], "area": 467}, {"id": 855831, "category_id": 1, "iscrowd": 0, "bbox": [278, 448, 55, 52], "area": 2503}, {"id": 1185832, "category_id": 1, "iscrowd": 0, "bbox": [227, 97, 20, 30], "area": 341}, {"id": 3422021, "category_id": 1, "iscrowd": 0, "bbox": [67, 222, 35, 54], "area": 1122}, {"id": 923179, "category_id": 1, "iscrowd": 0, "bbox": [124, 43, 16, 27], "area": 230}, {"id": 7962273, "category_id": 1, "iscrowd": 0, "bbox": [45, 195, 26, 21], "area": 327}, {"id": 2436679, "category_id": 1, "iscrowd": 1, "bbox": [0, 0, 333, 500], "area": 67540}, {"id": 1842221, "category_id": 15, "iscrowd": 0, "bbox": [231, 188, 27, 28], "area": 413}, {"id": 2367273, "category_id": 15, "iscrowd": 0, "bbox": [4, 181, 64, 13], "area": 290}, {"id": 1578528, "category_id": 15, "iscrowd": 0, "bbox": [252, 179, 73, 8], "area": 424}, {"id": 1909049, "category_id": 15, "iscrowd": 0, "bbox": [98, 188, 28, 8], "area": 173}, {"id": 1449011, "category_id": 15, "iscrowd": 0, "bbox": [97, 176, 32, 8], "area": 195}, {"id": 2499899, "category_id": 15, "iscrowd": 0, "bbox": [230, 216, 65, 23], "area": 521}, {"id": 2368824, "category_id": 15, "iscrowd": 0, "bbox": [97, 197, 14, 13], "area": 150}, {"id": 3292513, "category_id": 15, "iscrowd": 0, "bbox": [181, 215, 39, 6], "area": 115}, {"id": 2564397, "category_id": 15, "iscrowd": 0, "bbox": [233, 178, 100, 60], "area": 1907}, {"id": 1186119, "category_id": 15, "iscrowd": 0, "bbox": [86, 86, 65, 8], "area": 182}, {"id": 2368567, "category_id": 15, "iscrowd": 1, "bbox": [4, 179, 226, 54], "area": 2007}, {"id": 9275535, "category_id": 43, "iscrowd": 0, "bbox": [138, 326, 33, 69], "area": 869}, {"id": 3358749, "category_id": 62, "iscrowd": 0, "bbox": [87, 244, 37, 49], "area": 1034}, {"id": 11705220, "category_id": 145, "iscrowd": 0, "bbox": [0, 285, 333, 215], "area": 55829}, {"id": 1187390, "category_id": 161, "iscrowd": 0, "bbox": [8, 0, 88, 103], "area": 1623}, {"id": 4157743, "category_id": 185, "iscrowd": 0, "bbox": [0, 213, 333, 86], "area": 13149}], "file_name": "000000261097.png", "image_id": 261097}, {"segments_info": [{"id": 8678787, "category_id": 1, "iscrowd": 0, "bbox": [0, 221, 176, 150], "area": 16281}, {"id": 6644843, "category_id": 1, "iscrowd": 0, "bbox": [340, 206, 160, 169], "area": 10962}, {"id": 4145474, "category_id": 15, "iscrowd": 0, "bbox": [109, 282, 391, 88], "area": 26380}, {"id": 14669774, "category_id": 48, "iscrowd": 0, "bbox": [255, 126, 103, 63], "area": 1232}, {"id": 14079696, "category_id": 48, "iscrowd": 0, "bbox": [451, 166, 49, 21], "area": 655}, {"id": 10000295, "category_id": 61, "iscrowd": 0, "bbox": [230, 141, 75, 47], "area": 2252}, {"id": 11839642, "category_id": 61, "iscrowd": 0, "bbox": [0, 2, 152, 94], "area": 13228}, {"id": 10073029, "category_id": 61, "iscrowd": 0, "bbox": [0, 156, 31, 49], "area": 980}, {"id": 11975102, "category_id": 61, "iscrowd": 0, "bbox": [16, 138, 50, 45], "area": 1444}, {"id": 11714762, "category_id": 61, "iscrowd": 0, "bbox": [408, 111, 87, 73], "area": 4027}, {"id": 11369801, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 500, 228], "area": 81530}, {"id": 10249776, "category_id": 189, "iscrowd": 0, "bbox": [199, 0, 301, 14], "area": 1106}, {"id": 1905681, "category_id": 191, "iscrowd": 0, "bbox": [0, 194, 500, 105], "area": 15061}, {"id": 9595991, "category_id": 196, "iscrowd": 0, "bbox": [80, 0, 119, 2], "area": 174}], "file_name": "000000261116.png", "image_id": 261116}, {"segments_info": [{"id": 6967920, "category_id": 15, "iscrowd": 0, "bbox": [1, 115, 251, 280], "area": 49211}, {"id": 6116687, "category_id": 18, "iscrowd": 0, "bbox": [324, 27, 272, 399], "area": 62384}, {"id": 6251861, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 224], "area": 48161}, {"id": 15724527, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 107], "area": 40586}, {"id": 7172724, "category_id": 191, "iscrowd": 0, "bbox": [186, 273, 454, 67], "area": 8481}, {"id": 6316901, "category_id": 194, "iscrowd": 0, "bbox": [0, 203, 640, 223], "area": 62912}], "file_name": "000000261161.png", "image_id": 261161}, {"segments_info": [{"id": 6451067, "category_id": 1, "iscrowd": 0, "bbox": [92, 179, 195, 272], "area": 16464}, {"id": 1315601, "category_id": 31, "iscrowd": 0, "bbox": [74, 450, 73, 105], "area": 6296}, {"id": 8482144, "category_id": 33, "iscrowd": 0, "bbox": [0, 354, 76, 285], "area": 18583}, {"id": 657671, "category_id": 33, "iscrowd": 0, "bbox": [354, 393, 72, 237], "area": 15373}, {"id": 4803187, "category_id": 62, "iscrowd": 0, "bbox": [127, 309, 208, 330], "area": 46074}, {"id": 3488577, "category_id": 77, "iscrowd": 0, "bbox": [173, 219, 27, 45], "area": 166}, {"id": 9084836, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 427, 393], "area": 55331}, {"id": 6118486, "category_id": 191, "iscrowd": 0, "bbox": [0, 384, 427, 256], "area": 31616}, {"id": 855310, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 408], "area": 80596}], "file_name": "000000261318.png", "image_id": 261318}, {"segments_info": [{"id": 8555157, "category_id": 1, "iscrowd": 0, "bbox": [197, 115, 134, 433], "area": 32083}, {"id": 6062214, "category_id": 37, "iscrowd": 0, "bbox": [46, 555, 26, 20], "area": 376}, {"id": 5667712, "category_id": 37, "iscrowd": 0, "bbox": [76, 533, 22, 21], "area": 312}, {"id": 7905187, "category_id": 37, "iscrowd": 0, "bbox": [207, 319, 8, 13], "area": 63}, {"id": 4480857, "category_id": 37, "iscrowd": 0, "bbox": [131, 578, 18, 18], "area": 252}, {"id": 5535611, "category_id": 37, "iscrowd": 0, "bbox": [396, 495, 20, 18], "area": 242}, {"id": 3487290, "category_id": 43, "iscrowd": 0, "bbox": [306, 335, 70, 154], "area": 4035}, {"id": 4801862, "category_id": 107, "iscrowd": 0, "bbox": [0, 219, 198, 47], "area": 4296}, {"id": 4081743, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 433, 463], "area": 108246}, {"id": 4735813, "category_id": 190, "iscrowd": 0, "bbox": [0, 441, 433, 199], "area": 72120}, {"id": 5792109, "category_id": 199, "iscrowd": 0, "bbox": [15, 0, 400, 231], "area": 53916}], "file_name": "000000261535.png", "image_id": 261535}, {"segments_info": [{"id": 3947067, "category_id": 17, "iscrowd": 0, "bbox": [101, 60, 269, 567], "area": 71561}, {"id": 4079947, "category_id": 63, "iscrowd": 0, "bbox": [1, 1, 476, 630], "area": 161523}, {"id": 9868172, "category_id": 75, "iscrowd": 0, "bbox": [131, 220, 73, 55], "area": 2108}, {"id": 7697009, "category_id": 141, "iscrowd": 0, "bbox": [138, 96, 117, 106], "area": 1185}], "file_name": "000000261706.png", "image_id": 261706}, {"segments_info": [{"id": 7570578, "category_id": 25, "iscrowd": 0, "bbox": [203, 176, 64, 146], "area": 3397}, {"id": 6254720, "category_id": 25, "iscrowd": 0, "bbox": [329, 153, 131, 188], "area": 7115}, {"id": 6188386, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 476], "area": 171433}, {"id": 6779755, "category_id": 185, "iscrowd": 0, "bbox": [0, 213, 293, 80], "area": 15100}, {"id": 16242113, "category_id": 187, "iscrowd": 0, "bbox": [527, 0, 113, 53], "area": 5033}, {"id": 3833948, "category_id": 193, "iscrowd": 0, "bbox": [120, 204, 520, 272], "area": 51954}, {"id": 8492964, "category_id": 194, "iscrowd": 0, "bbox": [221, 275, 419, 201], "area": 39094}, {"id": 6650496, "category_id": 198, "iscrowd": 0, "bbox": [171, 252, 469, 108], "area": 9900}, {"id": 9874360, "category_id": 199, "iscrowd": 0, "bbox": [180, 271, 129, 35], "area": 1316}], "file_name": "000000261712.png", "image_id": 261712}, {"segments_info": [{"id": 8089972, "category_id": 1, "iscrowd": 0, "bbox": [146, 44, 162, 311], "area": 19732}, {"id": 1862470, "category_id": 37, "iscrowd": 0, "bbox": [437, 218, 12, 6], "area": 56}, {"id": 2812101, "category_id": 37, "iscrowd": 0, "bbox": [425, 147, 15, 13], "area": 160}, {"id": 9142859, "category_id": 43, "iscrowd": 0, "bbox": [290, 75, 103, 43], "area": 2454}, {"id": 12090188, "category_id": 145, "iscrowd": 0, "bbox": [0, 204, 640, 234], "area": 128719}, {"id": 5128247, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 244], "area": 51018}], "file_name": "000000261732.png", "image_id": 261732}, {"segments_info": [{"id": 6250335, "category_id": 128, "iscrowd": 0, "bbox": [0, 17, 523, 476], "area": 176576}, {"id": 6776679, "category_id": 149, "iscrowd": 0, "bbox": [0, 503, 476, 137], "area": 35006}, {"id": 3750201, "category_id": 184, "iscrowd": 0, "bbox": [0, 8, 198, 426], "area": 12798}, {"id": 5658198, "category_id": 185, "iscrowd": 0, "bbox": [462, 414, 61, 219], "area": 10258}, {"id": 14277081, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 523, 167], "area": 44649}, {"id": 8750469, "category_id": 191, "iscrowd": 0, "bbox": [0, 466, 523, 174], "area": 31012}], "file_name": "000000261796.png", "image_id": 261796}, {"segments_info": [{"id": 4475485, "category_id": 1, "iscrowd": 0, "bbox": [362, 143, 96, 250], "area": 7972}, {"id": 4277576, "category_id": 2, "iscrowd": 0, "bbox": [339, 252, 189, 146], "area": 13660}, {"id": 6502485, "category_id": 13, "iscrowd": 0, "bbox": [236, 221, 9, 10], "area": 71}, {"id": 2566187, "category_id": 19, "iscrowd": 0, "bbox": [284, 234, 31, 58], "area": 1043}, {"id": 1381138, "category_id": 19, "iscrowd": 0, "bbox": [240, 231, 30, 62], "area": 1129}, {"id": 3093046, "category_id": 27, "iscrowd": 0, "bbox": [432, 181, 44, 69], "area": 1623}, {"id": 4803919, "category_id": 149, "iscrowd": 0, "bbox": [0, 260, 640, 166], "area": 64702}, {"id": 1318679, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 357], "area": 70930}, {"id": 14530178, "category_id": 187, "iscrowd": 0, "bbox": [32, 0, 608, 285], "area": 110141}], "file_name": "000000261888.png", "image_id": 261888}, {"segments_info": [{"id": 3090981, "category_id": 1, "iscrowd": 0, "bbox": [85, 0, 297, 398], "area": 52078}, {"id": 3814959, "category_id": 3, "iscrowd": 0, "bbox": [410, 121, 47, 91], "area": 3060}, {"id": 9473408, "category_id": 3, "iscrowd": 0, "bbox": [358, 110, 99, 91], "area": 4474}, {"id": 6445643, "category_id": 3, "iscrowd": 0, "bbox": [0, 9, 250, 214], "area": 28237}, {"id": 1051915, "category_id": 41, "iscrowd": 0, "bbox": [160, 212, 190, 231], "area": 15106}, {"id": 11845570, "category_id": 191, "iscrowd": 0, "bbox": [0, 270, 457, 370], "area": 141864}, {"id": 9420218, "category_id": 193, "iscrowd": 0, "bbox": [0, 187, 457, 110], "area": 19022}], "file_name": "000000261982.png", "image_id": 261982}, {"segments_info": [{"id": 5134233, "category_id": 1, "iscrowd": 0, "bbox": [540, 263, 13, 39], "area": 280}, {"id": 4604044, "category_id": 1, "iscrowd": 0, "bbox": [38, 184, 74, 211], "area": 7654}, {"id": 4078500, "category_id": 1, "iscrowd": 0, "bbox": [279, 359, 247, 202], "area": 25815}, {"id": 4214447, "category_id": 1, "iscrowd": 0, "bbox": [23, 384, 290, 142], "area": 21711}, {"id": 5660558, "category_id": 1, "iscrowd": 0, "bbox": [551, 253, 5, 12], "area": 45}, {"id": 6450845, "category_id": 1, "iscrowd": 0, "bbox": [537, 258, 12, 9], "area": 53}, {"id": 4734061, "category_id": 1, "iscrowd": 0, "bbox": [569, 265, 14, 12], "area": 81}, {"id": 4473487, "category_id": 1, "iscrowd": 0, "bbox": [548, 304, 39, 66], "area": 1002}, {"id": 4277634, "category_id": 1, "iscrowd": 0, "bbox": [519, 262, 7, 13], "area": 60}, {"id": 4346287, "category_id": 1, "iscrowd": 0, "bbox": [121, 314, 32, 67], "area": 1277}, {"id": 4135398, "category_id": 28, "iscrowd": 0, "bbox": [73, 144, 438, 222], "area": 68466}, {"id": 7115461, "category_id": 42, "iscrowd": 0, "bbox": [448, 373, 98, 6], "area": 441}, {"id": 8161457, "category_id": 42, "iscrowd": 0, "bbox": [12, 363, 224, 67], "area": 4627}, {"id": 6855121, "category_id": 154, "iscrowd": 0, "bbox": [22, 359, 590, 141], "area": 14642}, {"id": 7047601, "category_id": 155, "iscrowd": 0, "bbox": [22, 230, 567, 158], "area": 17450}, {"id": 5660079, "category_id": 168, "iscrowd": 0, "bbox": [56, 430, 534, 159], "area": 18629}, {"id": 10201789, "category_id": 187, "iscrowd": 0, "bbox": [23, 23, 566, 224], "area": 90649}, {"id": 5395083, "category_id": 192, "iscrowd": 0, "bbox": [460, 204, 129, 30], "area": 2278}], "file_name": "000000262048.png", "image_id": 262048}, {"segments_info": [{"id": 10398124, "category_id": 72, "iscrowd": 0, "bbox": [0, 40, 214, 592], "area": 104412}, {"id": 1322584, "category_id": 73, "iscrowd": 0, "bbox": [173, 221, 196, 337], "area": 48011}, {"id": 1721461, "category_id": 84, "iscrowd": 0, "bbox": [425, 145, 46, 59], "area": 1932}, {"id": 1060454, "category_id": 84, "iscrowd": 0, "bbox": [376, 257, 11, 16], "area": 153}, {"id": 1399968, "category_id": 84, "iscrowd": 0, "bbox": [446, 246, 28, 63], "area": 1292}, {"id": 1000576, "category_id": 84, "iscrowd": 0, "bbox": [382, 257, 12, 52], "area": 249}, {"id": 937361, "category_id": 84, "iscrowd": 0, "bbox": [364, 354, 19, 53], "area": 570}, {"id": 926528, "category_id": 84, "iscrowd": 0, "bbox": [407, 163, 15, 45], "area": 551}, {"id": 396318, "category_id": 84, "iscrowd": 0, "bbox": [411, 250, 19, 51], "area": 727}, {"id": 1723784, "category_id": 84, "iscrowd": 0, "bbox": [383, 153, 25, 56], "area": 986}, {"id": 1194609, "category_id": 84, "iscrowd": 0, "bbox": [373, 273, 12, 34], "area": 280}, {"id": 1061215, "category_id": 112, "iscrowd": 0, "bbox": [231, 164, 78, 84], "area": 3214}, {"id": 10345972, "category_id": 130, "iscrowd": 0, "bbox": [347, 146, 54, 44], "area": 1341}, {"id": 1989779, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 474, 124], "area": 43223}, {"id": 1592966, "category_id": 189, "iscrowd": 0, "bbox": [0, 488, 474, 152], "area": 12333}, {"id": 396064, "category_id": 195, "iscrowd": 0, "bbox": [436, 250, 17, 44], "area": 492}, {"id": 1724291, "category_id": 199, "iscrowd": 0, "bbox": [165, 100, 309, 294], "area": 29959}, {"id": 597321, "category_id": 200, "iscrowd": 0, "bbox": [272, 365, 202, 169], "area": 9984}], "file_name": "000000262227.png", "image_id": 262227}, {"segments_info": [{"id": 5132113, "category_id": 44, "iscrowd": 0, "bbox": [58, 362, 13, 29], "area": 269}, {"id": 7632757, "category_id": 70, "iscrowd": 0, "bbox": [209, 317, 43, 77], "area": 2012}, {"id": 7629928, "category_id": 81, "iscrowd": 0, "bbox": [287, 334, 60, 18], "area": 766}, {"id": 5067090, "category_id": 112, "iscrowd": 0, "bbox": [0, 15, 400, 625], "area": 23038}, {"id": 5263697, "category_id": 130, "iscrowd": 0, "bbox": [174, 75, 73, 56], "area": 3123}, {"id": 10920345, "category_id": 133, "iscrowd": 0, "bbox": [315, 221, 55, 84], "area": 2426}, {"id": 1710096, "category_id": 168, "iscrowd": 0, "bbox": [330, 120, 70, 145], "area": 8521}, {"id": 8685189, "category_id": 176, "iscrowd": 0, "bbox": [27, 286, 332, 101], "area": 16620}, {"id": 13882838, "category_id": 181, "iscrowd": 0, "bbox": [109, 203, 71, 36], "area": 1754}, {"id": 7105900, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 400, 194], "area": 60865}, {"id": 3289393, "category_id": 188, "iscrowd": 0, "bbox": [28, 334, 329, 196], "area": 18318}, {"id": 5460561, "category_id": 190, "iscrowd": 0, "bbox": [33, 383, 350, 257], "area": 64754}, {"id": 9672087, "category_id": 199, "iscrowd": 0, "bbox": [14, 81, 320, 227], "area": 34229}], "file_name": "000000262440.png", "image_id": 262440}, {"segments_info": [{"id": 6048338, "category_id": 1, "iscrowd": 0, "bbox": [234, 278, 98, 199], "area": 13828}, {"id": 11972543, "category_id": 1, "iscrowd": 0, "bbox": [130, 109, 116, 260], "area": 14716}, {"id": 9272496, "category_id": 1, "iscrowd": 0, "bbox": [198, 274, 231, 190], "area": 7182}, {"id": 5588817, "category_id": 39, "iscrowd": 0, "bbox": [222, 97, 43, 99], "area": 485}, {"id": 6644371, "category_id": 145, "iscrowd": 0, "bbox": [0, 15, 640, 465], "area": 254133}, {"id": 5992556, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 54], "area": 16400}], "file_name": "000000262487.png", "image_id": 262487}, {"segments_info": [{"id": 4671051, "category_id": 1, "iscrowd": 0, "bbox": [328, 155, 86, 79], "area": 2155}, {"id": 10994126, "category_id": 42, "iscrowd": 0, "bbox": [338, 212, 77, 38], "area": 745}, {"id": 7044755, "category_id": 154, "iscrowd": 0, "bbox": [0, 360, 640, 120], "area": 74054}, {"id": 10264217, "category_id": 155, "iscrowd": 0, "bbox": [0, 105, 640, 267], "area": 145876}, {"id": 9798772, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 159], "area": 84241}], "file_name": "000000262587.png", "image_id": 262587}, {"segments_info": [{"id": 4939408, "category_id": 1, "iscrowd": 0, "bbox": [64, 491, 31, 57], "area": 982}, {"id": 4016249, "category_id": 1, "iscrowd": 0, "bbox": [102, 507, 22, 43], "area": 714}, {"id": 3026750, "category_id": 1, "iscrowd": 0, "bbox": [0, 534, 31, 20], "area": 530}, {"id": 2377341, "category_id": 44, "iscrowd": 0, "bbox": [95, 455, 9, 21], "area": 139}, {"id": 2831961, "category_id": 44, "iscrowd": 0, "bbox": [14, 473, 10, 23], "area": 186}, {"id": 2897001, "category_id": 44, "iscrowd": 0, "bbox": [38, 452, 8, 21], "area": 135}, {"id": 3100034, "category_id": 44, "iscrowd": 0, "bbox": [34, 477, 10, 19], "area": 150}, {"id": 1714780, "category_id": 44, "iscrowd": 0, "bbox": [20, 454, 6, 19], "area": 96}, {"id": 3359855, "category_id": 44, "iscrowd": 0, "bbox": [83, 453, 12, 24], "area": 242}, {"id": 1976115, "category_id": 44, "iscrowd": 0, "bbox": [100, 478, 5, 19], "area": 78}, {"id": 2047097, "category_id": 44, "iscrowd": 0, "bbox": [57, 455, 7, 19], "area": 86}, {"id": 2569287, "category_id": 86, "iscrowd": 0, "bbox": [74, 87, 291, 470], "area": 105177}, {"id": 1976118, "category_id": 86, "iscrowd": 0, "bbox": [339, 326, 105, 215], "area": 15539}, {"id": 10334142, "category_id": 130, "iscrowd": 0, "bbox": [251, 0, 229, 91], "area": 1473}, {"id": 2436689, "category_id": 156, "iscrowd": 0, "bbox": [0, 426, 122, 99], "area": 8233}, {"id": 3156567, "category_id": 177, "iscrowd": 0, "bbox": [471, 429, 9, 32], "area": 153}, {"id": 987416, "category_id": 181, "iscrowd": 0, "bbox": [0, 69, 480, 116], "area": 21509}, {"id": 2635862, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 398], "area": 44444}, {"id": 1910869, "category_id": 189, "iscrowd": 0, "bbox": [0, 518, 480, 122], "area": 45259}, {"id": 2239052, "category_id": 199, "iscrowd": 0, "bbox": [0, 17, 480, 511], "area": 55427}], "file_name": "000000262631.png", "image_id": 262631}, {"segments_info": [{"id": 3557724, "category_id": 50, "iscrowd": 0, "bbox": [19, 348, 11, 15], "area": 103}, {"id": 2631982, "category_id": 50, "iscrowd": 0, "bbox": [30, 350, 2, 12], "area": 13}, {"id": 3752527, "category_id": 50, "iscrowd": 0, "bbox": [32, 351, 6, 11], "area": 54}, {"id": 4408134, "category_id": 50, "iscrowd": 0, "bbox": [29, 286, 13, 44], "area": 203}, {"id": 6382440, "category_id": 64, "iscrowd": 0, "bbox": [369, 342, 26, 56], "area": 712}, {"id": 2369322, "category_id": 79, "iscrowd": 0, "bbox": [37, 357, 94, 139], "area": 10721}, {"id": 8748925, "category_id": 81, "iscrowd": 0, "bbox": [275, 408, 71, 31], "area": 1391}, {"id": 10588299, "category_id": 81, "iscrowd": 0, "bbox": [220, 381, 85, 43], "area": 2069}, {"id": 5395556, "category_id": 107, "iscrowd": 0, "bbox": [0, 353, 427, 226], "area": 11630}, {"id": 6578788, "category_id": 176, "iscrowd": 0, "bbox": [0, 288, 427, 158], "area": 12772}, {"id": 13949144, "category_id": 181, "iscrowd": 0, "bbox": [338, 219, 89, 160], "area": 9555}, {"id": 7238258, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 427, 207], "area": 76991}, {"id": 1580829, "category_id": 188, "iscrowd": 0, "bbox": [0, 174, 427, 466], "area": 44375}, {"id": 527640, "category_id": 190, "iscrowd": 0, "bbox": [0, 458, 322, 182], "area": 41224}, {"id": 11515064, "category_id": 196, "iscrowd": 0, "bbox": [335, 340, 24, 33], "area": 529}, {"id": 8882570, "category_id": 199, "iscrowd": 0, "bbox": [0, 114, 427, 245], "area": 32337}], "file_name": "000000262682.png", "image_id": 262682}, {"segments_info": [{"id": 2173499, "category_id": 1, "iscrowd": 0, "bbox": [0, 6, 334, 494], "area": 130007}, {"id": 855318, "category_id": 32, "iscrowd": 0, "bbox": [153, 302, 127, 193], "area": 11657}, {"id": 2567468, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 334, 231], "area": 25101}], "file_name": "000000262895.png", "image_id": 262895}, {"segments_info": [{"id": 5019825, "category_id": 18, "iscrowd": 0, "bbox": [256, 14, 326, 240], "area": 47454}, {"id": 11519710, "category_id": 18, "iscrowd": 0, "bbox": [117, 242, 176, 138], "area": 14207}, {"id": 8484466, "category_id": 18, "iscrowd": 0, "bbox": [1, 45, 312, 206], "area": 45249}, {"id": 8033722, "category_id": 18, "iscrowd": 0, "bbox": [435, 246, 167, 112], "area": 9579}, {"id": 8226452, "category_id": 84, "iscrowd": 0, "bbox": [3, 221, 637, 242], "area": 84601}, {"id": 1248523, "category_id": 93, "iscrowd": 0, "bbox": [0, 412, 640, 68], "area": 23177}, {"id": 7632771, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 640, 468], "area": 30778}, {"id": 3750202, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 112, 84], "area": 5094}], "file_name": "000000262938.png", "image_id": 262938}, {"segments_info": [{"id": 3621451, "category_id": 1, "iscrowd": 0, "bbox": [195, 43, 86, 170], "area": 6966}, {"id": 5924196, "category_id": 41, "iscrowd": 0, "bbox": [190, 131, 31, 71], "area": 1143}, {"id": 199436, "category_id": 184, "iscrowd": 0, "bbox": [142, 0, 188, 210], "area": 17379}, {"id": 1, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 330, 214], "area": 43854}, {"id": 5531767, "category_id": 190, "iscrowd": 0, "bbox": [0, 208, 330, 292], "area": 95458}], "file_name": "000000263068.png", "image_id": 263068}, {"segments_info": [{"id": 2633770, "category_id": 7, "iscrowd": 0, "bbox": [6, 3, 292, 318], "area": 63826}, {"id": 6386530, "category_id": 125, "iscrowd": 0, "bbox": [155, 163, 119, 172], "area": 8454}, {"id": 2577471, "category_id": 184, "iscrowd": 0, "bbox": [205, 0, 295, 335], "area": 81905}, {"id": 16053487, "category_id": 187, "iscrowd": 0, "bbox": [182, 0, 124, 117], "area": 7826}], "file_name": "000000263299.png", "image_id": 263299}, {"segments_info": [{"id": 2560807, "category_id": 1, "iscrowd": 0, "bbox": [335, 61, 77, 122], "area": 3377}, {"id": 9735826, "category_id": 42, "iscrowd": 0, "bbox": [389, 80, 33, 105], "area": 920}, {"id": 9670022, "category_id": 155, "iscrowd": 0, "bbox": [0, 127, 638, 267], "area": 164840}, {"id": 15395038, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 638, 145], "area": 81717}], "file_name": "000000263403.png", "image_id": 263403}, {"segments_info": [{"id": 3685193, "category_id": 1, "iscrowd": 0, "bbox": [184, 101, 99, 116], "area": 5248}, {"id": 6448501, "category_id": 1, "iscrowd": 0, "bbox": [390, 38, 93, 148], "area": 7343}, {"id": 5263437, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 613, 161], "area": 21075}, {"id": 5525825, "category_id": 151, "iscrowd": 0, "bbox": [0, 19, 119, 51], "area": 2051}, {"id": 2242611, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 439, 289], "area": 63814}, {"id": 8951200, "category_id": 190, "iscrowd": 0, "bbox": [524, 145, 27, 22], "area": 409}, {"id": 2574153, "category_id": 193, "iscrowd": 0, "bbox": [0, 116, 640, 312], "area": 36702}, {"id": 3432093, "category_id": 196, "iscrowd": 0, "bbox": [320, 184, 138, 102], "area": 5906}], "file_name": "000000263425.png", "image_id": 263425}, {"segments_info": [{"id": 6381660, "category_id": 3, "iscrowd": 0, "bbox": [1, 72, 545, 355], "area": 142504}, {"id": 7564648, "category_id": 6, "iscrowd": 0, "bbox": [387, 292, 30, 26], "area": 546}, {"id": 5341639, "category_id": 15, "iscrowd": 0, "bbox": [261, 339, 378, 83], "area": 25900}, {"id": 5856091, "category_id": 18, "iscrowd": 0, "bbox": [299, 114, 90, 137], "area": 6486}, {"id": 9215412, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 94508}, {"id": 13750996, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 16, 47], "area": 553}], "file_name": "000000263463.png", "image_id": 263463}, {"segments_info": [{"id": 9081758, "category_id": 70, "iscrowd": 0, "bbox": [10, 201, 374, 416], "area": 82031}, {"id": 8625330, "category_id": 109, "iscrowd": 0, "bbox": [132, 0, 183, 54], "area": 5617}, {"id": 1056831, "category_id": 188, "iscrowd": 0, "bbox": [357, 68, 122, 229], "area": 24274}, {"id": 8161430, "category_id": 190, "iscrowd": 0, "bbox": [0, 282, 479, 358], "area": 59939}, {"id": 9016482, "category_id": 195, "iscrowd": 0, "bbox": [196, 179, 40, 36], "area": 1012}, {"id": 8095367, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 479, 593], "area": 114881}, {"id": 9345959, "category_id": 200, "iscrowd": 0, "bbox": [394, 593, 85, 47], "area": 2647}], "file_name": "000000263474.png", "image_id": 263474}, {"segments_info": [{"id": 8286030, "category_id": 3, "iscrowd": 0, "bbox": [119, 159, 28, 11], "area": 151}, {"id": 8092282, "category_id": 3, "iscrowd": 0, "bbox": [451, 173, 49, 59], "area": 2169}, {"id": 6969422, "category_id": 3, "iscrowd": 0, "bbox": [46, 165, 81, 25], "area": 1206}, {"id": 4012073, "category_id": 3, "iscrowd": 0, "bbox": [456, 144, 44, 38], "area": 930}, {"id": 9140314, "category_id": 3, "iscrowd": 0, "bbox": [457, 137, 43, 24], "area": 521}, {"id": 10652531, "category_id": 3, "iscrowd": 0, "bbox": [84, 159, 36, 8], "area": 187}, {"id": 5062954, "category_id": 3, "iscrowd": 0, "bbox": [0, 168, 58, 78], "area": 1974}, {"id": 11514800, "category_id": 3, "iscrowd": 0, "bbox": [298, 146, 111, 34], "area": 1679}, {"id": 9933707, "category_id": 3, "iscrowd": 0, "bbox": [34, 142, 425, 148], "area": 38966}, {"id": 9996922, "category_id": 8, "iscrowd": 0, "bbox": [16, 148, 67, 39], "area": 1659}, {"id": 10790571, "category_id": 16, "iscrowd": 0, "bbox": [126, 268, 41, 30], "area": 521}, {"id": 9409431, "category_id": 149, "iscrowd": 0, "bbox": [0, 167, 500, 214], "area": 62342}, {"id": 5264972, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 186], "area": 34409}, {"id": 16447669, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 449, 128], "area": 28473}, {"id": 7569286, "category_id": 197, "iscrowd": 0, "bbox": [12, 98, 462, 71], "area": 12105}], "file_name": "000000263594.png", "image_id": 263594}, {"segments_info": [{"id": 8885927, "category_id": 65, "iscrowd": 0, "bbox": [70, 392, 357, 218], "area": 39732}, {"id": 2633529, "category_id": 133, "iscrowd": 0, "bbox": [19, 259, 143, 174], "area": 14375}, {"id": 9805477, "category_id": 181, "iscrowd": 0, "bbox": [207, 132, 258, 269], "area": 20731}, {"id": 9800328, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 363, 70], "area": 10686}, {"id": 922396, "category_id": 188, "iscrowd": 0, "bbox": [187, 388, 76, 36], "area": 1387}, {"id": 12497843, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 473, 566], "area": 77963}, {"id": 2107961, "category_id": 200, "iscrowd": 0, "bbox": [0, 552, 473, 88], "area": 20563}], "file_name": "000000263644.png", "image_id": 263644}, {"segments_info": [{"id": 5257774, "category_id": 1, "iscrowd": 0, "bbox": [125, 222, 61, 112], "area": 3488}, {"id": 6377285, "category_id": 1, "iscrowd": 0, "bbox": [466, 171, 57, 144], "area": 4119}, {"id": 4601133, "category_id": 1, "iscrowd": 0, "bbox": [348, 261, 8, 13], "area": 65}, {"id": 3683919, "category_id": 1, "iscrowd": 0, "bbox": [308, 255, 45, 20], "area": 378}, {"id": 1126311, "category_id": 38, "iscrowd": 0, "bbox": [110, 246, 10, 9], "area": 41}, {"id": 5066333, "category_id": 38, "iscrowd": 0, "bbox": [105, 234, 9, 8], "area": 31}, {"id": 1710110, "category_id": 38, "iscrowd": 0, "bbox": [107, 63, 212, 266], "area": 32113}, {"id": 10657439, "category_id": 154, "iscrowd": 0, "bbox": [0, 224, 640, 204], "area": 98171}, {"id": 4471599, "category_id": 184, "iscrowd": 0, "bbox": [0, 206, 408, 70], "area": 8249}, {"id": 6117207, "category_id": 185, "iscrowd": 0, "bbox": [0, 220, 132, 72], "area": 4487}, {"id": 12948313, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 244], "area": 118903}, {"id": 8808522, "category_id": 197, "iscrowd": 0, "bbox": [406, 218, 234, 38], "area": 3305}], "file_name": "000000263679.png", "image_id": 263679}, {"segments_info": [{"id": 2239834, "category_id": 70, "iscrowd": 0, "bbox": [183, 262, 171, 330], "area": 39997}, {"id": 5861760, "category_id": 190, "iscrowd": 0, "bbox": [0, 463, 468, 177], "area": 55925}, {"id": 9019820, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 399, 483], "area": 17551}], "file_name": "000000263796.png", "image_id": 263796}, {"segments_info": [{"id": 6578532, "category_id": 22, "iscrowd": 0, "bbox": [260, 87, 380, 339], "area": 86749}, {"id": 6446174, "category_id": 22, "iscrowd": 0, "bbox": [0, 51, 307, 375], "area": 66193}, {"id": 8815479, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 307], "area": 40860}, {"id": 16185074, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 514, 30], "area": 5528}, {"id": 10199973, "category_id": 193, "iscrowd": 0, "bbox": [0, 46, 640, 380], "area": 72744}], "file_name": "000000263860.png", "image_id": 263860}, {"segments_info": [{"id": 11783136, "category_id": 1, "iscrowd": 0, "bbox": [96, 331, 96, 92], "area": 3361}, {"id": 3358274, "category_id": 19, "iscrowd": 0, "bbox": [197, 36, 215, 374], "area": 37129}, {"id": 11651537, "category_id": 20, "iscrowd": 0, "bbox": [450, 176, 134, 197], "area": 6424}, {"id": 5004113, "category_id": 184, "iscrowd": 0, "bbox": [63, 0, 452, 217], "area": 46214}, {"id": 2767681, "category_id": 185, "iscrowd": 0, "bbox": [46, 190, 549, 234], "area": 75567}, {"id": 14803938, "category_id": 187, "iscrowd": 0, "bbox": [94, 0, 472, 212], "area": 16656}, {"id": 7575950, "category_id": 192, "iscrowd": 0, "bbox": [433, 80, 164, 124], "area": 8218}], "file_name": "000000263966.png", "image_id": 263966}, {"segments_info": [{"id": 2960952, "category_id": 1, "iscrowd": 0, "bbox": [225, 58, 414, 542], "area": 93503}, {"id": 10068403, "category_id": 1, "iscrowd": 0, "bbox": [221, 145, 237, 454], "area": 57510}, {"id": 3546641, "category_id": 32, "iscrowd": 0, "bbox": [409, 205, 36, 79], "area": 1440}, {"id": 5197143, "category_id": 49, "iscrowd": 0, "bbox": [155, 441, 89, 34], "area": 1275}, {"id": 6851501, "category_id": 61, "iscrowd": 0, "bbox": [82, 461, 167, 141], "area": 16817}, {"id": 4220047, "category_id": 122, "iscrowd": 0, "bbox": [78, 592, 124, 18], "area": 1004}, {"id": 3749964, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 348, 610], "area": 97643}, {"id": 16119285, "category_id": 189, "iscrowd": 0, "bbox": [13, 566, 238, 44], "area": 2166}, {"id": 3300225, "category_id": 196, "iscrowd": 0, "bbox": [200, 599, 46, 11], "area": 392}, {"id": 2368552, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 594], "area": 74546}], "file_name": "000000263969.png", "image_id": 263969}, {"segments_info": [{"id": 2242367, "category_id": 16, "iscrowd": 0, "bbox": [63, 47, 284, 545], "area": 51131}, {"id": 13871747, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 255553}], "file_name": "000000264335.png", "image_id": 264335}, {"segments_info": [{"id": 9539988, "category_id": 17, "iscrowd": 0, "bbox": [16, 199, 356, 219], "area": 46819}, {"id": 2434080, "category_id": 62, "iscrowd": 0, "bbox": [1, 5, 373, 487], "area": 110483}, {"id": 9871269, "category_id": 100, "iscrowd": 0, "bbox": [0, 61, 127, 79], "area": 7097}, {"id": 3695719, "category_id": 195, "iscrowd": 0, "bbox": [110, 0, 48, 41], "area": 1300}, {"id": 4676194, "category_id": 199, "iscrowd": 0, "bbox": [52, 0, 99, 108], "area": 4373}], "file_name": "000000264441.png", "image_id": 264441}, {"segments_info": [{"id": 2565928, "category_id": 1, "iscrowd": 0, "bbox": [504, 239, 14, 55], "area": 528}, {"id": 7434100, "category_id": 1, "iscrowd": 0, "bbox": [374, 160, 217, 329], "area": 30661}, {"id": 4210240, "category_id": 1, "iscrowd": 0, "bbox": [574, 239, 20, 55], "area": 636}, {"id": 4737345, "category_id": 15, "iscrowd": 0, "bbox": [50, 251, 384, 326], "area": 58459}, {"id": 14080478, "category_id": 84, "iscrowd": 0, "bbox": [501, 291, 50, 21], "area": 610}, {"id": 3421491, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 612, 311], "area": 149894}, {"id": 5459796, "category_id": 191, "iscrowd": 0, "bbox": [0, 411, 612, 201], "area": 86049}, {"id": 5988970, "category_id": 193, "iscrowd": 0, "bbox": [0, 224, 612, 303], "area": 30393}, {"id": 7369596, "category_id": 194, "iscrowd": 0, "bbox": [145, 375, 328, 108], "area": 14635}], "file_name": "000000264535.png", "image_id": 264535}, {"segments_info": [{"id": 5791579, "category_id": 1, "iscrowd": 0, "bbox": [140, 0, 22, 22], "area": 367}, {"id": 7175305, "category_id": 1, "iscrowd": 0, "bbox": [245, 0, 55, 93], "area": 3929}, {"id": 10464436, "category_id": 1, "iscrowd": 0, "bbox": [194, 1, 54, 98], "area": 4111}, {"id": 7368059, "category_id": 1, "iscrowd": 0, "bbox": [114, 21, 155, 466], "area": 28526}, {"id": 2896960, "category_id": 1, "iscrowd": 0, "bbox": [61, 0, 46, 121], "area": 3314}, {"id": 3552307, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 62, 179], "area": 7469}, {"id": 3031113, "category_id": 1, "iscrowd": 0, "bbox": [160, 1, 40, 93], "area": 1815}, {"id": 3160903, "category_id": 39, "iscrowd": 0, "bbox": [171, 92, 70, 221], "area": 3003}, {"id": 5016437, "category_id": 145, "iscrowd": 0, "bbox": [0, 152, 334, 348], "area": 31878}, {"id": 13230830, "category_id": 154, "iscrowd": 0, "bbox": [313, 481, 21, 19], "area": 226}], "file_name": "000000264968.png", "image_id": 264968}, {"segments_info": [{"id": 7372422, "category_id": 28, "iscrowd": 0, "bbox": [197, 424, 23, 187], "area": 2525}, {"id": 6046513, "category_id": 33, "iscrowd": 0, "bbox": [250, 387, 102, 223], "area": 14816}, {"id": 7966387, "category_id": 154, "iscrowd": 0, "bbox": [0, 560, 427, 80], "area": 24064}, {"id": 4678256, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 427, 597], "area": 223067}], "file_name": "000000265108.png", "image_id": 265108}, {"segments_info": [{"id": 5734304, "category_id": 47, "iscrowd": 0, "bbox": [57, 43, 163, 153], "area": 17826}, {"id": 7768214, "category_id": 48, "iscrowd": 0, "bbox": [100, 405, 288, 153], "area": 5325}, {"id": 3765883, "category_id": 54, "iscrowd": 0, "bbox": [251, 186, 212, 189], "area": 23398}, {"id": 3968872, "category_id": 56, "iscrowd": 0, "bbox": [368, 216, 32, 33], "area": 421}, {"id": 5019763, "category_id": 56, "iscrowd": 0, "bbox": [378, 254, 43, 29], "area": 842}, {"id": 5729652, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 281075}], "file_name": "000000265518.png", "image_id": 265518}, {"segments_info": [{"id": 4940728, "category_id": 1, "iscrowd": 0, "bbox": [224, 10, 299, 364], "area": 49873}, {"id": 7646014, "category_id": 46, "iscrowd": 0, "bbox": [534, 140, 61, 203], "area": 7023}, {"id": 6325791, "category_id": 46, "iscrowd": 0, "bbox": [255, 101, 76, 282], "area": 14571}, {"id": 4548535, "category_id": 59, "iscrowd": 0, "bbox": [12, 485, 553, 117], "area": 49381}, {"id": 4681405, "category_id": 59, "iscrowd": 0, "bbox": [58, 395, 448, 143], "area": 32695}, {"id": 8567752, "category_id": 67, "iscrowd": 0, "bbox": [3, 299, 604, 273], "area": 57141}, {"id": 5141397, "category_id": 112, "iscrowd": 0, "bbox": [154, 7, 144, 344], "area": 30256}, {"id": 4352445, "category_id": 122, "iscrowd": 0, "bbox": [137, 485, 353, 57], "area": 1222}, {"id": 5667488, "category_id": 177, "iscrowd": 0, "bbox": [491, 256, 37, 45], "area": 932}, {"id": 10542325, "category_id": 195, "iscrowd": 0, "bbox": [157, 379, 455, 233], "area": 6278}, {"id": 4810388, "category_id": 196, "iscrowd": 0, "bbox": [531, 579, 25, 26], "area": 33}, {"id": 9952492, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 612, 414], "area": 99942}], "file_name": "000000265777.png", "image_id": 265777}, {"segments_info": [{"id": 8288893, "category_id": 1, "iscrowd": 0, "bbox": [376, 221, 69, 103], "area": 3332}, {"id": 12106425, "category_id": 19, "iscrowd": 0, "bbox": [148, 253, 154, 136], "area": 7837}, {"id": 1579055, "category_id": 64, "iscrowd": 0, "bbox": [242, 325, 24, 26], "area": 383}, {"id": 3368016, "category_id": 64, "iscrowd": 0, "bbox": [92, 274, 59, 76], "area": 2727}, {"id": 3027775, "category_id": 64, "iscrowd": 0, "bbox": [340, 305, 38, 49], "area": 1115}, {"id": 2041394, "category_id": 112, "iscrowd": 0, "bbox": [155, 228, 89, 92], "area": 3104}, {"id": 7763833, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 357], "area": 149580}, {"id": 2172712, "category_id": 130, "iscrowd": 0, "bbox": [523, 113, 26, 35], "area": 632}, {"id": 12304319, "category_id": 149, "iscrowd": 0, "bbox": [0, 367, 640, 39], "area": 13552}, {"id": 3622978, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 370], "area": 47966}, {"id": 6715511, "category_id": 191, "iscrowd": 0, "bbox": [0, 334, 640, 62], "area": 19174}], "file_name": "000000265816.png", "image_id": 265816}, {"segments_info": [{"id": 2704038, "category_id": 11, "iscrowd": 0, "bbox": [112, 268, 162, 232], "area": 21432}, {"id": 11906473, "category_id": 184, "iscrowd": 0, "bbox": [0, 459, 16, 41], "area": 585}, {"id": 16444901, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 49, 461], "area": 15746}, {"id": 6841438, "category_id": 197, "iscrowd": 0, "bbox": [13, 0, 362, 500], "area": 149537}], "file_name": "000000266082.png", "image_id": 266082}, {"segments_info": [{"id": 3755611, "category_id": 44, "iscrowd": 0, "bbox": [263, 283, 24, 45], "area": 642}, {"id": 1259100, "category_id": 44, "iscrowd": 0, "bbox": [255, 301, 11, 31], "area": 251}, {"id": 4349037, "category_id": 112, "iscrowd": 0, "bbox": [101, 62, 171, 539], "area": 67427}, {"id": 2179954, "category_id": 118, "iscrowd": 0, "bbox": [0, 594, 427, 46], "area": 10625}, {"id": 14345194, "category_id": 130, "iscrowd": 0, "bbox": [249, 137, 46, 32], "area": 1083}, {"id": 5736609, "category_id": 133, "iscrowd": 0, "bbox": [250, 166, 51, 163], "area": 4659}, {"id": 2969960, "category_id": 177, "iscrowd": 0, "bbox": [0, 24, 427, 604], "area": 43006}, {"id": 9481405, "category_id": 186, "iscrowd": 0, "bbox": [131, 0, 296, 93], "area": 6073}, {"id": 332319, "category_id": 188, "iscrowd": 0, "bbox": [248, 345, 60, 151], "area": 7669}, {"id": 4286080, "category_id": 190, "iscrowd": 0, "bbox": [135, 495, 176, 117], "area": 10640}, {"id": 2906224, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 615], "area": 114145}], "file_name": "000000266206.png", "image_id": 266206}, {"segments_info": [{"id": 1051660, "category_id": 1, "iscrowd": 0, "bbox": [38, 1, 37, 53], "area": 924}, {"id": 6775141, "category_id": 1, "iscrowd": 0, "bbox": [0, 1, 15, 138], "area": 825}, {"id": 5197389, "category_id": 2, "iscrowd": 0, "bbox": [72, 38, 34, 75], "area": 1148}, {"id": 3028541, "category_id": 4, "iscrowd": 0, "bbox": [107, 52, 522, 339], "area": 106262}, {"id": 4670272, "category_id": 4, "iscrowd": 0, "bbox": [136, 4, 100, 22], "area": 887}, {"id": 3025964, "category_id": 4, "iscrowd": 0, "bbox": [140, 0, 162, 78], "area": 4131}, {"id": 3223357, "category_id": 4, "iscrowd": 0, "bbox": [154, 41, 210, 85], "area": 6124}, {"id": 2631465, "category_id": 4, "iscrowd": 0, "bbox": [83, 115, 310, 136], "area": 13250}, {"id": 4865080, "category_id": 4, "iscrowd": 0, "bbox": [126, 26, 206, 71], "area": 4101}, {"id": 3420465, "category_id": 4, "iscrowd": 0, "bbox": [131, 1, 117, 60], "area": 2941}, {"id": 3024933, "category_id": 4, "iscrowd": 0, "bbox": [170, 0, 48, 16], "area": 368}, {"id": 5460306, "category_id": 4, "iscrowd": 0, "bbox": [99, 3, 373, 150], "area": 9789}, {"id": 13421771, "category_id": 149, "iscrowd": 0, "bbox": [270, 0, 370, 396], "area": 47318}, {"id": 12895428, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 396], "area": 48166}], "file_name": "000000266400.png", "image_id": 266400}, {"segments_info": [{"id": 5650993, "category_id": 1, "iscrowd": 0, "bbox": [327, 151, 125, 299], "area": 22091}, {"id": 11178117, "category_id": 35, "iscrowd": 0, "bbox": [373, 440, 54, 40], "area": 978}, {"id": 13809575, "category_id": 159, "iscrowd": 0, "bbox": [0, 179, 640, 301], "area": 146372}, {"id": 10717820, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 267], "area": 87798}, {"id": 12887701, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 577, 162], "area": 49658}], "file_name": "000000266409.png", "image_id": 266409}, {"segments_info": [{"id": 5396850, "category_id": 1, "iscrowd": 0, "bbox": [127, 258, 63, 171], "area": 5278}, {"id": 2764087, "category_id": 1, "iscrowd": 0, "bbox": [171, 237, 25, 31], "area": 495}, {"id": 9344412, "category_id": 1, "iscrowd": 0, "bbox": [322, 230, 26, 28], "area": 240}, {"id": 9810595, "category_id": 1, "iscrowd": 0, "bbox": [309, 247, 31, 75], "area": 978}, {"id": 5195643, "category_id": 1, "iscrowd": 0, "bbox": [62, 287, 195, 282], "area": 22546}, {"id": 6446436, "category_id": 1, "iscrowd": 0, "bbox": [269, 241, 44, 54], "area": 1364}, {"id": 4211259, "category_id": 1, "iscrowd": 0, "bbox": [423, 242, 63, 105], "area": 2668}, {"id": 3157554, "category_id": 1, "iscrowd": 0, "bbox": [214, 252, 48, 53], "area": 1307}, {"id": 2566223, "category_id": 1, "iscrowd": 0, "bbox": [154, 254, 61, 124], "area": 3662}, {"id": 9733762, "category_id": 1, "iscrowd": 0, "bbox": [344, 276, 161, 301], "area": 23041}, {"id": 5659755, "category_id": 1, "iscrowd": 0, "bbox": [106, 256, 32, 36], "area": 596}, {"id": 4211797, "category_id": 1, "iscrowd": 0, "bbox": [319, 252, 101, 150], "area": 8301}, {"id": 5721420, "category_id": 1, "iscrowd": 0, "bbox": [240, 250, 38, 42], "area": 739}, {"id": 4080964, "category_id": 15, "iscrowd": 0, "bbox": [419, 485, 78, 27], "area": 1284}, {"id": 4607054, "category_id": 15, "iscrowd": 0, "bbox": [60, 485, 76, 38], "area": 1961}, {"id": 5510690, "category_id": 47, "iscrowd": 0, "bbox": [316, 373, 21, 24], "area": 430}, {"id": 7941175, "category_id": 47, "iscrowd": 0, "bbox": [203, 358, 17, 29], "area": 452}, {"id": 8223362, "category_id": 51, "iscrowd": 0, "bbox": [315, 396, 32, 19], "area": 483}, {"id": 11639972, "category_id": 51, "iscrowd": 0, "bbox": [207, 344, 19, 8], "area": 94}, {"id": 3817020, "category_id": 67, "iscrowd": 0, "bbox": [74, 392, 410, 199], "area": 16302}, {"id": 6384478, "category_id": 77, "iscrowd": 0, "bbox": [190, 413, 38, 9], "area": 285}, {"id": 9857357, "category_id": 112, "iscrowd": 0, "bbox": [201, 184, 26, 59], "area": 1326}, {"id": 6582894, "category_id": 128, "iscrowd": 0, "bbox": [147, 78, 348, 219], "area": 34143}, {"id": 8619644, "category_id": 151, "iscrowd": 0, "bbox": [484, 108, 128, 134], "area": 1115}, {"id": 4148040, "category_id": 161, "iscrowd": 0, "bbox": [485, 284, 127, 66], "area": 5660}, {"id": 7236720, "category_id": 177, "iscrowd": 0, "bbox": [544, 130, 68, 150], "area": 6212}, {"id": 12101786, "category_id": 181, "iscrowd": 0, "bbox": [281, 96, 37, 48], "area": 1371}, {"id": 5203290, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 590, 559], "area": 110497}, {"id": 3685696, "category_id": 185, "iscrowd": 0, "bbox": [466, 226, 127, 79], "area": 6029}, {"id": 16645882, "category_id": 187, "iscrowd": 0, "bbox": [412, 0, 200, 141], "area": 20886}, {"id": 4606029, "category_id": 189, "iscrowd": 0, "bbox": [312, 344, 43, 54], "area": 833}, {"id": 3362625, "category_id": 193, "iscrowd": 0, "bbox": [0, 260, 612, 352], "area": 54201}, {"id": 5926254, "category_id": 194, "iscrowd": 0, "bbox": [0, 521, 88, 56], "area": 1523}], "file_name": "000000266768.png", "image_id": 266768}, {"segments_info": [{"id": 5330790, "category_id": 1, "iscrowd": 0, "bbox": [406, 173, 21, 18], "area": 240}, {"id": 5789855, "category_id": 1, "iscrowd": 0, "bbox": [32, 161, 33, 30], "area": 571}, {"id": 1777706, "category_id": 1, "iscrowd": 0, "bbox": [473, 143, 17, 48], "area": 589}, {"id": 4871275, "category_id": 1, "iscrowd": 0, "bbox": [374, 135, 16, 39], "area": 286}, {"id": 2501950, "category_id": 1, "iscrowd": 0, "bbox": [458, 151, 16, 31], "area": 388}, {"id": 4080728, "category_id": 1, "iscrowd": 0, "bbox": [409, 145, 22, 46], "area": 536}, {"id": 8881356, "category_id": 1, "iscrowd": 0, "bbox": [341, 139, 29, 44], "area": 613}, {"id": 5462090, "category_id": 1, "iscrowd": 0, "bbox": [361, 140, 24, 49], "area": 665}, {"id": 7305139, "category_id": 1, "iscrowd": 0, "bbox": [340, 170, 32, 21], "area": 397}, {"id": 2962239, "category_id": 1, "iscrowd": 0, "bbox": [429, 146, 23, 25], "area": 384}, {"id": 3884376, "category_id": 1, "iscrowd": 0, "bbox": [109, 162, 33, 29], "area": 582}, {"id": 8423594, "category_id": 1, "iscrowd": 0, "bbox": [387, 147, 26, 37], "area": 547}, {"id": 2567740, "category_id": 1, "iscrowd": 0, "bbox": [189, 139, 25, 40], "area": 572}, {"id": 5793650, "category_id": 1, "iscrowd": 1, "bbox": [0, 86, 640, 304], "area": 48706}, {"id": 7441823, "category_id": 43, "iscrowd": 0, "bbox": [285, 100, 30, 79], "area": 1459}, {"id": 8426387, "category_id": 43, "iscrowd": 0, "bbox": [226, 206, 23, 38], "area": 440}, {"id": 1650773, "category_id": 62, "iscrowd": 0, "bbox": [25, 187, 10, 3], "area": 22}, {"id": 6073266, "category_id": 145, "iscrowd": 0, "bbox": [0, 231, 640, 196], "area": 108627}, {"id": 10923678, "category_id": 151, "iscrowd": 0, "bbox": [0, 36, 640, 95], "area": 20235}, {"id": 1388328, "category_id": 184, "iscrowd": 0, "bbox": [3, 0, 637, 127], "area": 44587}, {"id": 15132642, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 377, 68], "area": 10117}, {"id": 8688534, "category_id": 197, "iscrowd": 0, "bbox": [429, 102, 211, 40], "area": 4141}, {"id": 3358263, "category_id": 199, "iscrowd": 0, "bbox": [340, 122, 300, 29], "area": 2228}], "file_name": "000000266892.png", "image_id": 266892}, {"segments_info": [{"id": 5327442, "category_id": 1, "iscrowd": 0, "bbox": [340, 379, 72, 205], "area": 6917}, {"id": 6583946, "category_id": 1, "iscrowd": 0, "bbox": [189, 415, 97, 157], "area": 6223}, {"id": 11048596, "category_id": 1, "iscrowd": 0, "bbox": [73, 410, 10, 22], "area": 137}, {"id": 9669004, "category_id": 1, "iscrowd": 0, "bbox": [220, 406, 10, 13], "area": 77}, {"id": 8747642, "category_id": 1, "iscrowd": 0, "bbox": [40, 408, 9, 22], "area": 117}, {"id": 4932687, "category_id": 1, "iscrowd": 0, "bbox": [117, 403, 7, 8], "area": 40}, {"id": 3092289, "category_id": 1, "iscrowd": 0, "bbox": [87, 406, 9, 26], "area": 141}, {"id": 7171193, "category_id": 1, "iscrowd": 0, "bbox": [136, 402, 9, 10], "area": 49}, {"id": 4674408, "category_id": 1, "iscrowd": 0, "bbox": [160, 409, 42, 102], "area": 2055}, {"id": 8218208, "category_id": 1, "iscrowd": 0, "bbox": [51, 402, 16, 35], "area": 294}, {"id": 3025718, "category_id": 1, "iscrowd": 0, "bbox": [95, 414, 27, 28], "area": 342}, {"id": 8547942, "category_id": 1, "iscrowd": 0, "bbox": [107, 404, 9, 9], "area": 64}, {"id": 7499636, "category_id": 1, "iscrowd": 0, "bbox": [98, 400, 9, 14], "area": 89}, {"id": 6581620, "category_id": 1, "iscrowd": 1, "bbox": [64, 394, 344, 44], "area": 1621}, {"id": 5788495, "category_id": 3, "iscrowd": 0, "bbox": [112, 417, 57, 33], "area": 1257}, {"id": 5726317, "category_id": 3, "iscrowd": 0, "bbox": [379, 407, 17, 18], "area": 221}, {"id": 7234904, "category_id": 3, "iscrowd": 0, "bbox": [176, 409, 10, 5], "area": 27}, {"id": 7432544, "category_id": 3, "iscrowd": 0, "bbox": [121, 412, 58, 27], "area": 510}, {"id": 5592665, "category_id": 3, "iscrowd": 0, "bbox": [214, 405, 212, 29], "area": 532}, {"id": 5787978, "category_id": 3, "iscrowd": 0, "bbox": [145, 410, 39, 22], "area": 314}, {"id": 4804694, "category_id": 3, "iscrowd": 0, "bbox": [309, 408, 17, 13], "area": 180}, {"id": 9142648, "category_id": 3, "iscrowd": 0, "bbox": [396, 412, 19, 8], "area": 119}, {"id": 7695459, "category_id": 3, "iscrowd": 0, "bbox": [199, 404, 17, 8], "area": 74}, {"id": 8812907, "category_id": 3, "iscrowd": 0, "bbox": [200, 410, 23, 24], "area": 358}, {"id": 6647164, "category_id": 3, "iscrowd": 0, "bbox": [279, 405, 20, 17], "area": 283}, {"id": 6579820, "category_id": 3, "iscrowd": 0, "bbox": [324, 411, 68, 39], "area": 778}, {"id": 3756650, "category_id": 6, "iscrowd": 0, "bbox": [266, 392, 40, 27], "area": 677}, {"id": 2497393, "category_id": 33, "iscrowd": 0, "bbox": [273, 444, 58, 145], "area": 4077}, {"id": 4801085, "category_id": 33, "iscrowd": 0, "bbox": [106, 453, 19, 11], "area": 134}, {"id": 6910339, "category_id": 175, "iscrowd": 0, "bbox": [67, 444, 224, 196], "area": 11496}, {"id": 5920837, "category_id": 184, "iscrowd": 0, "bbox": [0, 271, 225, 142], "area": 2091}, {"id": 16578010, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 426, 257], "area": 41434}, {"id": 7103326, "category_id": 191, "iscrowd": 0, "bbox": [105, 403, 321, 237], "area": 25207}, {"id": 2705979, "category_id": 193, "iscrowd": 0, "bbox": [0, 429, 223, 211], "area": 32779}, {"id": 10260069, "category_id": 197, "iscrowd": 0, "bbox": [0, 28, 426, 401], "area": 122736}], "file_name": "000000266981.png", "image_id": 266981}, {"segments_info": [{"id": 3093812, "category_id": 1, "iscrowd": 0, "bbox": [235, 2, 124, 167], "area": 8393}, {"id": 3489603, "category_id": 1, "iscrowd": 0, "bbox": [484, 154, 155, 130], "area": 9245}, {"id": 3888014, "category_id": 22, "iscrowd": 0, "bbox": [372, 240, 217, 188], "area": 30508}, {"id": 3821443, "category_id": 22, "iscrowd": 0, "bbox": [1, 85, 460, 337], "area": 105827}, {"id": 14146533, "category_id": 44, "iscrowd": 0, "bbox": [436, 89, 130, 141], "area": 8035}, {"id": 4083791, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 240], "area": 59897}, {"id": 12499122, "category_id": 187, "iscrowd": 0, "bbox": [86, 0, 168, 19], "area": 625}, {"id": 7701928, "category_id": 194, "iscrowd": 0, "bbox": [0, 46, 640, 382], "area": 46067}], "file_name": "000000267169.png", "image_id": 267169}, {"segments_info": [{"id": 10454395, "category_id": 1, "iscrowd": 0, "bbox": [25, 232, 114, 122], "area": 3530}, {"id": 8552581, "category_id": 1, "iscrowd": 0, "bbox": [525, 55, 115, 191], "area": 10968}, {"id": 3883076, "category_id": 22, "iscrowd": 0, "bbox": [228, 338, 129, 142], "area": 10273}, {"id": 6581364, "category_id": 22, "iscrowd": 0, "bbox": [0, 266, 236, 214], "area": 38633}, {"id": 6185322, "category_id": 22, "iscrowd": 0, "bbox": [16, 45, 624, 426], "area": 151688}, {"id": 8294796, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 326], "area": 66558}, {"id": 16711422, "category_id": 187, "iscrowd": 0, "bbox": [432, 0, 208, 74], "area": 11767}, {"id": 9740452, "category_id": 194, "iscrowd": 0, "bbox": [236, 423, 195, 57], "area": 4524}], "file_name": "000000267191.png", "image_id": 267191}, {"segments_info": [{"id": 5665665, "category_id": 18, "iscrowd": 0, "bbox": [1, 28, 639, 397], "area": 126739}, {"id": 7511219, "category_id": 64, "iscrowd": 0, "bbox": [70, 1, 141, 211], "area": 20614}, {"id": 3492953, "category_id": 65, "iscrowd": 0, "bbox": [4, 161, 635, 143], "area": 31942}, {"id": 1784412, "category_id": 177, "iscrowd": 0, "bbox": [197, 0, 443, 168], "area": 34673}, {"id": 1787750, "category_id": 196, "iscrowd": 0, "bbox": [120, 286, 63, 24], "area": 857}, {"id": 12706796, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 211, 216], "area": 9324}, {"id": 4814732, "category_id": 200, "iscrowd": 0, "bbox": [0, 191, 640, 289], "area": 70237}], "file_name": "000000267300.png", "image_id": 267300}, {"segments_info": [{"id": 7168866, "category_id": 85, "iscrowd": 0, "bbox": [435, 255, 92, 75], "area": 5425}, {"id": 11447208, "category_id": 85, "iscrowd": 0, "bbox": [340, 295, 21, 93], "area": 1160}, {"id": 14196302, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 197084}, {"id": 8752793, "category_id": 197, "iscrowd": 0, "bbox": [311, 16, 297, 410], "area": 68864}], "file_name": "000000267351.png", "image_id": 267351}, {"segments_info": [{"id": 790544, "category_id": 21, "iscrowd": 0, "bbox": [279, 195, 79, 166], "area": 7741}, {"id": 1844519, "category_id": 21, "iscrowd": 0, "bbox": [474, 224, 56, 120], "area": 3665}, {"id": 1252380, "category_id": 21, "iscrowd": 0, "bbox": [340, 220, 92, 141], "area": 6577}, {"id": 3622731, "category_id": 21, "iscrowd": 0, "bbox": [519, 218, 120, 115], "area": 7392}, {"id": 2703169, "category_id": 21, "iscrowd": 0, "bbox": [43, 209, 100, 226], "area": 14395}, {"id": 1252124, "category_id": 21, "iscrowd": 0, "bbox": [402, 204, 91, 151], "area": 7642}, {"id": 4348773, "category_id": 21, "iscrowd": 0, "bbox": [95, 203, 163, 251], "area": 19427}, {"id": 5994885, "category_id": 128, "iscrowd": 0, "bbox": [186, 125, 267, 146], "area": 15046}, {"id": 2374205, "category_id": 175, "iscrowd": 0, "bbox": [0, 199, 640, 281], "area": 10545}, {"id": 4087133, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 241], "area": 97795}, {"id": 16053490, "category_id": 187, "iscrowd": 0, "bbox": [6, 0, 634, 190], "area": 25745}, {"id": 798242, "category_id": 193, "iscrowd": 0, "bbox": [0, 262, 631, 218], "area": 90079}], "file_name": "000000267434.png", "image_id": 267434}, {"segments_info": [{"id": 5068878, "category_id": 1, "iscrowd": 0, "bbox": [499, 0, 137, 235], "area": 16552}, {"id": 6451301, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 80, 233], "area": 13626}, {"id": 3489081, "category_id": 1, "iscrowd": 0, "bbox": [190, 109, 96, 126], "area": 7866}, {"id": 3818555, "category_id": 1, "iscrowd": 0, "bbox": [166, 0, 82, 68], "area": 3806}, {"id": 9149590, "category_id": 1, "iscrowd": 0, "bbox": [49, 0, 36, 61], "area": 1462}, {"id": 2435366, "category_id": 1, "iscrowd": 0, "bbox": [388, 0, 36, 54], "area": 1081}, {"id": 4278341, "category_id": 1, "iscrowd": 0, "bbox": [341, 83, 134, 225], "area": 14004}, {"id": 5529173, "category_id": 1, "iscrowd": 0, "bbox": [280, 113, 234, 260], "area": 24527}, {"id": 4608069, "category_id": 1, "iscrowd": 0, "bbox": [107, 107, 192, 278], "area": 26349}, {"id": 8754315, "category_id": 1, "iscrowd": 0, "bbox": [69, 0, 109, 160], "area": 7856}, {"id": 5727061, "category_id": 15, "iscrowd": 0, "bbox": [600, 80, 40, 11], "area": 407}, {"id": 3818298, "category_id": 15, "iscrowd": 0, "bbox": [413, 95, 86, 28], "area": 1959}, {"id": 4739653, "category_id": 15, "iscrowd": 0, "bbox": [415, 140, 113, 20], "area": 1738}, {"id": 3686201, "category_id": 15, "iscrowd": 0, "bbox": [180, 64, 112, 24], "area": 1273}, {"id": 3488563, "category_id": 15, "iscrowd": 0, "bbox": [446, 165, 91, 27], "area": 2068}, {"id": 3752506, "category_id": 15, "iscrowd": 0, "bbox": [401, 75, 108, 25], "area": 970}, {"id": 3357748, "category_id": 15, "iscrowd": 0, "bbox": [330, 50, 194, 17], "area": 1811}, {"id": 3686711, "category_id": 15, "iscrowd": 0, "bbox": [319, 29, 319, 22], "area": 1513}, {"id": 3291186, "category_id": 15, "iscrowd": 0, "bbox": [448, 195, 192, 51], "area": 7709}, {"id": 2896173, "category_id": 15, "iscrowd": 0, "bbox": [409, 128, 231, 42], "area": 1865}, {"id": 4739397, "category_id": 15, "iscrowd": 0, "bbox": [463, 245, 175, 64], "area": 8188}, {"id": 6188386, "category_id": 15, "iscrowd": 0, "bbox": [2, 244, 123, 75], "area": 5279}, {"id": 3422524, "category_id": 28, "iscrowd": 0, "bbox": [265, 61, 171, 79], "area": 6064}, {"id": 6055270, "category_id": 28, "iscrowd": 0, "bbox": [90, 77, 190, 128], "area": 7997}, {"id": 3028784, "category_id": 32, "iscrowd": 0, "bbox": [164, 160, 17, 29], "area": 191}, {"id": 5002571, "category_id": 161, "iscrowd": 0, "bbox": [0, 0, 640, 463], "area": 86304}], "file_name": "000000267537.png", "image_id": 267537}, {"segments_info": [{"id": 6260134, "category_id": 44, "iscrowd": 0, "bbox": [199, 200, 20, 42], "area": 585}, {"id": 9080470, "category_id": 81, "iscrowd": 0, "bbox": [110, 239, 240, 77], "area": 10806}, {"id": 6451322, "category_id": 112, "iscrowd": 0, "bbox": [335, 0, 115, 600], "area": 51348}, {"id": 8424336, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 339, 230], "area": 47144}, {"id": 7963015, "category_id": 168, "iscrowd": 0, "bbox": [352, 128, 53, 82], "area": 3575}, {"id": 6382705, "category_id": 176, "iscrowd": 0, "bbox": [0, 416, 354, 117], "area": 7772}, {"id": 3885923, "category_id": 190, "iscrowd": 0, "bbox": [0, 437, 450, 163], "area": 35281}, {"id": 7832722, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 355, 505], "area": 89235}, {"id": 7698042, "category_id": 200, "iscrowd": 0, "bbox": [36, 538, 231, 62], "area": 10513}], "file_name": "000000267670.png", "image_id": 267670}, {"segments_info": [{"id": 4082517, "category_id": 70, "iscrowd": 0, "bbox": [355, 247, 170, 179], "area": 17204}, {"id": 7042682, "category_id": 81, "iscrowd": 0, "bbox": [76, 14, 259, 170], "area": 32257}, {"id": 4936537, "category_id": 118, "iscrowd": 0, "bbox": [0, 369, 612, 57], "area": 20527}, {"id": 6581618, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 202334}], "file_name": "000000267903.png", "image_id": 267903}, {"segments_info": [{"id": 8155503, "category_id": 19, "iscrowd": 0, "bbox": [213, 89, 45, 26], "area": 635}, {"id": 8549229, "category_id": 19, "iscrowd": 0, "bbox": [314, 91, 44, 27], "area": 566}, {"id": 7628643, "category_id": 19, "iscrowd": 0, "bbox": [93, 90, 46, 26], "area": 544}, {"id": 7169124, "category_id": 19, "iscrowd": 0, "bbox": [134, 90, 33, 22], "area": 310}, {"id": 3024169, "category_id": 19, "iscrowd": 0, "bbox": [357, 89, 20, 28], "area": 375}, {"id": 7957865, "category_id": 19, "iscrowd": 0, "bbox": [155, 89, 47, 26], "area": 629}, {"id": 4996925, "category_id": 19, "iscrowd": 0, "bbox": [59, 91, 36, 25], "area": 413}, {"id": 6446175, "category_id": 19, "iscrowd": 0, "bbox": [293, 87, 33, 28], "area": 251}, {"id": 7629415, "category_id": 19, "iscrowd": 0, "bbox": [266, 89, 41, 24], "area": 543}, {"id": 8219235, "category_id": 19, "iscrowd": 0, "bbox": [419, 91, 42, 28], "area": 546}, {"id": 6248280, "category_id": 19, "iscrowd": 0, "bbox": [248, 90, 30, 24], "area": 249}, {"id": 11118752, "category_id": 148, "iscrowd": 0, "bbox": [0, 120, 500, 80], "area": 24867}, {"id": 4142899, "category_id": 184, "iscrowd": 0, "bbox": [0, 10, 500, 111], "area": 27005}, {"id": 11510673, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 74], "area": 25692}, {"id": 4347199, "category_id": 193, "iscrowd": 0, "bbox": [0, 112, 500, 216], "area": 81015}], "file_name": "000000267933.png", "image_id": 267933}, {"segments_info": [{"id": 5065545, "category_id": 9, "iscrowd": 0, "bbox": [175, 148, 366, 140], "area": 18058}, {"id": 3817536, "category_id": 15, "iscrowd": 0, "bbox": [491, 283, 17, 21], "area": 198}, {"id": 3947062, "category_id": 155, "iscrowd": 0, "bbox": [0, 262, 640, 218], "area": 105195}, {"id": 11841709, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 255], "area": 137796}, {"id": 4343366, "category_id": 191, "iscrowd": 0, "bbox": [505, 268, 135, 60], "area": 5126}, {"id": 6115393, "category_id": 192, "iscrowd": 0, "bbox": [0, 199, 493, 74], "area": 8492}, {"id": 3422007, "category_id": 197, "iscrowd": 0, "bbox": [466, 148, 174, 130], "area": 11958}], "file_name": "000000267940.png", "image_id": 267940}, {"segments_info": [{"id": 9083024, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 332], "area": 64408}, {"id": 16382457, "category_id": 187, "iscrowd": 0, "bbox": [244, 0, 217, 332], "area": 7134}, {"id": 15593718, "category_id": 197, "iscrowd": 0, "bbox": [299, 261, 192, 71], "area": 10617}], "file_name": "000000267946.png", "image_id": 267946}, {"segments_info": [{"id": 4272176, "category_id": 1, "iscrowd": 0, "bbox": [601, 176, 37, 81], "area": 940}, {"id": 3090735, "category_id": 1, "iscrowd": 0, "bbox": [620, 147, 20, 55], "area": 590}, {"id": 6775913, "category_id": 7, "iscrowd": 0, "bbox": [426, 166, 164, 50], "area": 5107}, {"id": 7040110, "category_id": 144, "iscrowd": 0, "bbox": [0, 187, 435, 129], "area": 20183}, {"id": 2631979, "category_id": 147, "iscrowd": 0, "bbox": [0, 205, 554, 155], "area": 47129}, {"id": 8618366, "category_id": 161, "iscrowd": 0, "bbox": [0, 14, 427, 199], "area": 26537}, {"id": 5200216, "category_id": 184, "iscrowd": 0, "bbox": [148, 161, 46, 36], "area": 994}, {"id": 11381416, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 614, 139], "area": 35919}, {"id": 15921392, "category_id": 187, "iscrowd": 0, "bbox": [417, 125, 170, 42], "area": 3554}, {"id": 8618112, "category_id": 190, "iscrowd": 0, "bbox": [0, 188, 640, 172], "area": 27688}, {"id": 5788503, "category_id": 195, "iscrowd": 0, "bbox": [587, 187, 44, 27], "area": 530}, {"id": 7170667, "category_id": 197, "iscrowd": 0, "bbox": [135, 0, 505, 214], "area": 41276}, {"id": 12631484, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 289, 239], "area": 19279}], "file_name": "000000268000.png", "image_id": 268000}, {"segments_info": [{"id": 4539718, "category_id": 22, "iscrowd": 0, "bbox": [0, 85, 640, 275], "area": 75657}, {"id": 5592150, "category_id": 22, "iscrowd": 0, "bbox": [156, 83, 264, 257], "area": 33325}, {"id": 5204817, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 409], "area": 83058}, {"id": 8553853, "category_id": 191, "iscrowd": 0, "bbox": [0, 235, 640, 175], "area": 39531}, {"id": 8037267, "category_id": 193, "iscrowd": 0, "bbox": [0, 347, 640, 77], "area": 10776}, {"id": 6313029, "category_id": 194, "iscrowd": 0, "bbox": [41, 297, 19, 14], "area": 185}, {"id": 10526877, "category_id": 198, "iscrowd": 0, "bbox": [167, 286, 441, 138], "area": 12252}], "file_name": "000000268375.png", "image_id": 268375}, {"segments_info": [{"id": 4410993, "category_id": 1, "iscrowd": 0, "bbox": [210, 125, 93, 101], "area": 4620}, {"id": 1974123, "category_id": 1, "iscrowd": 0, "bbox": [76, 47, 74, 176], "area": 5371}, {"id": 8094879, "category_id": 1, "iscrowd": 0, "bbox": [391, 144, 230, 215], "area": 26760}, {"id": 2895725, "category_id": 1, "iscrowd": 0, "bbox": [348, 117, 112, 129], "area": 7497}, {"id": 5261898, "category_id": 1, "iscrowd": 0, "bbox": [0, 58, 113, 301], "area": 16862}, {"id": 8094623, "category_id": 1, "iscrowd": 0, "bbox": [363, 129, 149, 169], "area": 7888}, {"id": 4540294, "category_id": 1, "iscrowd": 0, "bbox": [230, 55, 77, 142], "area": 4730}, {"id": 7701411, "category_id": 1, "iscrowd": 0, "bbox": [92, 119, 84, 196], "area": 7530}, {"id": 4275911, "category_id": 1, "iscrowd": 0, "bbox": [117, 143, 166, 216], "area": 17204}, {"id": 5133425, "category_id": 46, "iscrowd": 0, "bbox": [267, 217, 18, 42], "area": 392}, {"id": 5726582, "category_id": 46, "iscrowd": 0, "bbox": [366, 257, 24, 43], "area": 884}, {"id": 2764614, "category_id": 46, "iscrowd": 0, "bbox": [290, 204, 14, 32], "area": 297}, {"id": 4671894, "category_id": 46, "iscrowd": 0, "bbox": [322, 249, 21, 53], "area": 504}, {"id": 5133408, "category_id": 47, "iscrowd": 0, "bbox": [314, 274, 27, 49], "area": 978}, {"id": 12959950, "category_id": 48, "iscrowd": 0, "bbox": [408, 260, 26, 45], "area": 180}, {"id": 11183811, "category_id": 48, "iscrowd": 0, "bbox": [250, 240, 24, 24], "area": 117}, {"id": 2242152, "category_id": 62, "iscrowd": 0, "bbox": [83, 233, 45, 109], "area": 1447}, {"id": 2505327, "category_id": 62, "iscrowd": 0, "bbox": [73, 271, 45, 88], "area": 2194}, {"id": 8424583, "category_id": 67, "iscrowd": 0, "bbox": [199, 227, 226, 127], "area": 8577}, {"id": 12040378, "category_id": 109, "iscrowd": 0, "bbox": [190, 0, 182, 154], "area": 11839}, {"id": 1649741, "category_id": 177, "iscrowd": 0, "bbox": [74, 0, 315, 171], "area": 4965}, {"id": 9016213, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 217, 154], "area": 16522}, {"id": 2966109, "category_id": 188, "iscrowd": 0, "bbox": [0, 169, 7, 99], "area": 464}, {"id": 5924988, "category_id": 189, "iscrowd": 0, "bbox": [258, 145, 190, 214], "area": 2998}, {"id": 1714236, "category_id": 190, "iscrowd": 0, "bbox": [53, 328, 42, 31], "area": 558}, {"id": 9014461, "category_id": 195, "iscrowd": 0, "bbox": [266, 223, 193, 123], "area": 3001}, {"id": 6713256, "category_id": 196, "iscrowd": 0, "bbox": [216, 188, 223, 143], "area": 5217}, {"id": 8818584, "category_id": 199, "iscrowd": 0, "bbox": [253, 0, 387, 359], "area": 51698}], "file_name": "000000268378.png", "image_id": 268378}, {"segments_info": [{"id": 8423568, "category_id": 1, "iscrowd": 0, "bbox": [1, 225, 9, 17], "area": 112}, {"id": 9736359, "category_id": 1, "iscrowd": 0, "bbox": [376, 206, 5, 6], "area": 21}, {"id": 9803164, "category_id": 1, "iscrowd": 0, "bbox": [13, 228, 13, 12], "area": 91}, {"id": 7564694, "category_id": 1, "iscrowd": 0, "bbox": [382, 206, 7, 6], "area": 21}, {"id": 11252915, "category_id": 1, "iscrowd": 0, "bbox": [356, 199, 6, 13], "area": 56}, {"id": 4474694, "category_id": 24, "iscrowd": 0, "bbox": [199, 270, 138, 129], "area": 7888}, {"id": 3882816, "category_id": 24, "iscrowd": 0, "bbox": [83, 262, 108, 126], "area": 6993}, {"id": 3619643, "category_id": 24, "iscrowd": 0, "bbox": [331, 304, 258, 171], "area": 20031}, {"id": 3817022, "category_id": 24, "iscrowd": 0, "bbox": [301, 283, 160, 120], "area": 7702}, {"id": 7437187, "category_id": 25, "iscrowd": 0, "bbox": [273, 112, 46, 170], "area": 4161}, {"id": 5923419, "category_id": 130, "iscrowd": 0, "bbox": [126, 197, 25, 21], "area": 378}, {"id": 5730151, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 278], "area": 127469}, {"id": 9607579, "category_id": 185, "iscrowd": 0, "bbox": [0, 209, 640, 112], "area": 30215}, {"id": 2634296, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 249, 108], "area": 6023}, {"id": 14865327, "category_id": 187, "iscrowd": 0, "bbox": [125, 0, 515, 90], "area": 6903}, {"id": 13029845, "category_id": 194, "iscrowd": 0, "bbox": [394, 229, 40, 26], "area": 726}, {"id": 8752279, "category_id": 198, "iscrowd": 0, "bbox": [86, 215, 470, 60], "area": 1601}], "file_name": "000000268729.png", "image_id": 268729}, {"segments_info": [{"id": 10264473, "category_id": 70, "iscrowd": 0, "bbox": [68, 94, 31, 50], "area": 1060}, {"id": 8159871, "category_id": 70, "iscrowd": 0, "bbox": [26, 119, 27, 30], "area": 618}, {"id": 12566977, "category_id": 81, "iscrowd": 0, "bbox": [141, 148, 95, 34], "area": 2441}, {"id": 7435634, "category_id": 190, "iscrowd": 0, "bbox": [20, 123, 120, 59], "area": 4365}], "file_name": "000000268831.png", "image_id": 268831}, {"segments_info": [{"id": 16645629, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 294, 375], "area": 44035}, {"id": 5661024, "category_id": 197, "iscrowd": 0, "bbox": [206, 0, 294, 375], "area": 92114}], "file_name": "000000268996.png", "image_id": 268996}, {"segments_info": [{"id": 4343892, "category_id": 18, "iscrowd": 0, "bbox": [434, 151, 174, 217], "area": 14882}, {"id": 6979981, "category_id": 18, "iscrowd": 0, "bbox": [28, 79, 141, 205], "area": 10541}, {"id": 5460559, "category_id": 18, "iscrowd": 0, "bbox": [306, 94, 99, 116], "area": 6333}, {"id": 7764609, "category_id": 18, "iscrowd": 0, "bbox": [467, 194, 118, 58], "area": 731}, {"id": 6327164, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 457], "area": 259350}], "file_name": "000000269113.png", "image_id": 269113}, {"segments_info": [{"id": 9540247, "category_id": 1, "iscrowd": 0, "bbox": [148, 30, 207, 565], "area": 42945}, {"id": 5069915, "category_id": 43, "iscrowd": 0, "bbox": [331, 211, 101, 125], "area": 4766}, {"id": 8490110, "category_id": 145, "iscrowd": 0, "bbox": [0, 371, 480, 269], "area": 105913}, {"id": 2108453, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 450, 39], "area": 15582}, {"id": 10267323, "category_id": 199, "iscrowd": 0, "bbox": [446, 0, 34, 33], "area": 1019}], "file_name": "000000269121.png", "image_id": 269121}, {"segments_info": [{"id": 4473925, "category_id": 20, "iscrowd": 0, "bbox": [399, 147, 241, 280], "area": 43926}, {"id": 5526611, "category_id": 20, "iscrowd": 0, "bbox": [179, 188, 252, 233], "area": 37146}, {"id": 7632247, "category_id": 20, "iscrowd": 0, "bbox": [182, 108, 245, 192], "area": 18511}, {"id": 6711146, "category_id": 20, "iscrowd": 0, "bbox": [1, 48, 128, 144], "area": 8225}, {"id": 5131856, "category_id": 20, "iscrowd": 0, "bbox": [6, 136, 187, 213], "area": 24681}, {"id": 13153191, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 92664}, {"id": 10192765, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 125], "area": 12609}, {"id": 4143411, "category_id": 198, "iscrowd": 0, "bbox": [65, 272, 575, 155], "area": 11336}], "file_name": "000000269196.png", "image_id": 269196}, {"segments_info": [{"id": 4345431, "category_id": 17, "iscrowd": 0, "bbox": [286, 174, 95, 93], "area": 3395}, {"id": 3692101, "category_id": 52, "iscrowd": 0, "bbox": [92, 265, 188, 168], "area": 11048}, {"id": 2970179, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 136079}, {"id": 16305077, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 156429}], "file_name": "000000269314.png", "image_id": 269314}, {"segments_info": [{"id": 5396092, "category_id": 1, "iscrowd": 0, "bbox": [396, 147, 215, 251], "area": 14717}, {"id": 9671837, "category_id": 1, "iscrowd": 0, "bbox": [205, 139, 178, 270], "area": 16956}, {"id": 6513802, "category_id": 1, "iscrowd": 0, "bbox": [33, 136, 189, 271], "area": 16544}, {"id": 11711418, "category_id": 1, "iscrowd": 0, "bbox": [498, 180, 95, 210], "area": 8573}, {"id": 15000547, "category_id": 34, "iscrowd": 0, "bbox": [169, 90, 49, 17], "area": 525}, {"id": 4277822, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 258], "area": 130646}, {"id": 9416364, "category_id": 193, "iscrowd": 0, "bbox": [0, 183, 640, 245], "area": 84768}], "file_name": "000000269316.png", "image_id": 269316}, {"segments_info": [{"id": 1381142, "category_id": 1, "iscrowd": 0, "bbox": [39, 224, 23, 79], "area": 1222}, {"id": 2235163, "category_id": 3, "iscrowd": 0, "bbox": [58, 243, 38, 35], "area": 1154}, {"id": 5854556, "category_id": 3, "iscrowd": 0, "bbox": [493, 274, 38, 49], "area": 1387}, {"id": 1249811, "category_id": 3, "iscrowd": 0, "bbox": [555, 237, 85, 108], "area": 7633}, {"id": 1980750, "category_id": 6, "iscrowd": 0, "bbox": [99, 54, 393, 307], "area": 98437}, {"id": 2367262, "category_id": 130, "iscrowd": 0, "bbox": [51, 184, 20, 19], "area": 310}, {"id": 3816768, "category_id": 149, "iscrowd": 0, "bbox": [52, 256, 588, 171], "area": 51153}, {"id": 1839633, "category_id": 187, "iscrowd": 0, "bbox": [38, 0, 202, 189], "area": 16413}, {"id": 4342848, "category_id": 191, "iscrowd": 0, "bbox": [0, 286, 560, 141], "area": 8348}, {"id": 1184535, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 308], "area": 73099}], "file_name": "000000269632.png", "image_id": 269632}, {"segments_info": [{"id": 1187403, "category_id": 10, "iscrowd": 0, "bbox": [618, 404, 9, 20], "area": 125}, {"id": 1714999, "category_id": 10, "iscrowd": 0, "bbox": [328, 409, 10, 22], "area": 171}, {"id": 1646906, "category_id": 10, "iscrowd": 0, "bbox": [552, 409, 12, 24], "area": 129}, {"id": 1780793, "category_id": 10, "iscrowd": 0, "bbox": [347, 415, 9, 21], "area": 148}, {"id": 1716547, "category_id": 10, "iscrowd": 0, "bbox": [423, 330, 13, 28], "area": 336}, {"id": 1519165, "category_id": 10, "iscrowd": 0, "bbox": [256, 337, 27, 31], "area": 528}, {"id": 1650752, "category_id": 10, "iscrowd": 0, "bbox": [553, 312, 18, 33], "area": 421}, {"id": 1318192, "category_id": 10, "iscrowd": 0, "bbox": [393, 462, 11, 17], "area": 165}, {"id": 1190456, "category_id": 10, "iscrowd": 0, "bbox": [202, 433, 9, 37], "area": 324}, {"id": 4409934, "category_id": 10, "iscrowd": 0, "bbox": [297, 326, 19, 48], "area": 557}, {"id": 1382161, "category_id": 184, "iscrowd": 0, "bbox": [0, 242, 640, 238], "area": 47009}, {"id": 9404783, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 471], "area": 250154}], "file_name": "000000269682.png", "image_id": 269682}, {"segments_info": [{"id": 4737099, "category_id": 78, "iscrowd": 0, "bbox": [110, 51, 420, 341], "area": 111493}, {"id": 9739171, "category_id": 107, "iscrowd": 0, "bbox": [0, 172, 640, 255], "area": 83150}, {"id": 4487061, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 640, 52], "area": 5414}, {"id": 11780293, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 361], "area": 71470}], "file_name": "000000269866.png", "image_id": 269866}, {"segments_info": [{"id": 7239859, "category_id": 19, "iscrowd": 0, "bbox": [210, 54, 165, 175], "area": 10026}, {"id": 3161751, "category_id": 62, "iscrowd": 0, "bbox": [34, 45, 341, 454], "area": 75221}, {"id": 5594208, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 310, 411], "area": 11239}, {"id": 5799812, "category_id": 184, "iscrowd": 0, "bbox": [244, 317, 98, 82], "area": 3977}, {"id": 14989697, "category_id": 187, "iscrowd": 0, "bbox": [23, 0, 352, 296], "area": 38132}, {"id": 6251624, "category_id": 191, "iscrowd": 0, "bbox": [0, 365, 346, 99], "area": 10394}, {"id": 3304027, "category_id": 193, "iscrowd": 0, "bbox": [0, 359, 375, 141], "area": 17341}, {"id": 6975602, "category_id": 197, "iscrowd": 0, "bbox": [10, 165, 365, 218], "area": 15185}, {"id": 3025443, "category_id": 199, "iscrowd": 0, "bbox": [0, 362, 129, 32], "area": 2348}], "file_name": "000000269932.png", "image_id": 269932}, {"segments_info": [{"id": 5920100, "category_id": 3, "iscrowd": 0, "bbox": [93, 453, 34, 19], "area": 235}, {"id": 8089963, "category_id": 3, "iscrowd": 0, "bbox": [92, 445, 7, 7], "area": 41}, {"id": 2827306, "category_id": 3, "iscrowd": 0, "bbox": [92, 460, 60, 49], "area": 2240}, {"id": 5656912, "category_id": 3, "iscrowd": 0, "bbox": [105, 445, 7, 5], "area": 33}, {"id": 3814196, "category_id": 10, "iscrowd": 0, "bbox": [262, 258, 32, 60], "area": 940}, {"id": 1251376, "category_id": 10, "iscrowd": 0, "bbox": [377, 422, 7, 17], "area": 89}, {"id": 1182732, "category_id": 10, "iscrowd": 0, "bbox": [64, 422, 10, 14], "area": 101}, {"id": 2301722, "category_id": 10, "iscrowd": 0, "bbox": [182, 158, 50, 98], "area": 4101}, {"id": 3747880, "category_id": 10, "iscrowd": 0, "bbox": [68, 392, 5, 11], "area": 40}, {"id": 5524810, "category_id": 10, "iscrowd": 0, "bbox": [173, 279, 25, 54], "area": 661}, {"id": 4209204, "category_id": 149, "iscrowd": 0, "bbox": [0, 447, 198, 193], "area": 25431}, {"id": 1776408, "category_id": 184, "iscrowd": 0, "bbox": [0, 233, 480, 278], "area": 51063}, {"id": 14338748, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 421], "area": 144656}, {"id": 4341565, "category_id": 191, "iscrowd": 0, "bbox": [104, 468, 349, 172], "area": 43684}, {"id": 3090981, "category_id": 197, "iscrowd": 0, "bbox": [231, 433, 20, 21], "area": 269}], "file_name": "000000269942.png", "image_id": 269942}, {"segments_info": [{"id": 6710116, "category_id": 4, "iscrowd": 0, "bbox": [93, 102, 483, 280], "area": 80298}, {"id": 11054753, "category_id": 8, "iscrowd": 0, "bbox": [66, 1, 513, 153], "area": 59345}, {"id": 6118237, "category_id": 149, "iscrowd": 0, "bbox": [0, 69, 640, 411], "area": 102550}, {"id": 10529458, "category_id": 191, "iscrowd": 0, "bbox": [0, 138, 640, 152], "area": 29707}, {"id": 11512228, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 77], "area": 14196}], "file_name": "000000270066.png", "image_id": 270066}, {"segments_info": [{"id": 6902083, "category_id": 1, "iscrowd": 0, "bbox": [304, 180, 36, 48], "area": 625}, {"id": 13745070, "category_id": 42, "iscrowd": 0, "bbox": [311, 226, 17, 7], "area": 72}, {"id": 11836294, "category_id": 155, "iscrowd": 0, "bbox": [0, 150, 640, 277], "area": 169907}, {"id": 13348768, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 173], "area": 102640}], "file_name": "000000270122.png", "image_id": 270122}, {"segments_info": [{"id": 8949390, "category_id": 24, "iscrowd": 0, "bbox": [103, 145, 255, 192], "area": 24993}, {"id": 3162914, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 344], "area": 155041}, {"id": 5196835, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 66], "area": 14766}, {"id": 3445094, "category_id": 193, "iscrowd": 0, "bbox": [0, 231, 640, 197], "area": 78887}], "file_name": "000000270244.png", "image_id": 270244}, {"segments_info": [{"id": 4084391, "category_id": 1, "iscrowd": 0, "bbox": [181, 215, 16, 34], "area": 337}, {"id": 4807790, "category_id": 7, "iscrowd": 0, "bbox": [267, 199, 116, 121], "area": 11635}, {"id": 4867908, "category_id": 7, "iscrowd": 0, "bbox": [173, 133, 45, 29], "area": 932}, {"id": 8752536, "category_id": 125, "iscrowd": 0, "bbox": [0, 186, 640, 241], "area": 42757}, {"id": 8489345, "category_id": 128, "iscrowd": 0, "bbox": [30, 43, 610, 95], "area": 16534}, {"id": 6712694, "category_id": 147, "iscrowd": 0, "bbox": [0, 148, 629, 279], "area": 58972}, {"id": 3301971, "category_id": 184, "iscrowd": 0, "bbox": [0, 13, 640, 366], "area": 103565}, {"id": 14866629, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 63], "area": 24764}, {"id": 6914438, "category_id": 193, "iscrowd": 0, "bbox": [299, 173, 76, 43], "area": 1300}, {"id": 6452854, "category_id": 194, "iscrowd": 0, "bbox": [49, 215, 222, 144], "area": 10841}, {"id": 9607818, "category_id": 197, "iscrowd": 0, "bbox": [495, 239, 44, 31], "area": 749}], "file_name": "000000270297.png", "image_id": 270297}, {"segments_info": [{"id": 8552571, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 121858}], "file_name": "000000270386.png", "image_id": 270386}, {"segments_info": [{"id": 6182481, "category_id": 22, "iscrowd": 0, "bbox": [80, 32, 121, 251], "area": 9829}, {"id": 6510928, "category_id": 22, "iscrowd": 0, "bbox": [69, 74, 282, 285], "area": 47907}, {"id": 4804442, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 68, 426], "area": 22568}, {"id": 6443324, "category_id": 185, "iscrowd": 0, "bbox": [52, 0, 588, 238], "area": 86185}, {"id": 11251636, "category_id": 194, "iscrowd": 0, "bbox": [45, 191, 595, 235], "area": 105274}], "file_name": "000000270402.png", "image_id": 270402}, {"segments_info": [{"id": 7700396, "category_id": 1, "iscrowd": 0, "bbox": [190, 12, 138, 359], "area": 30140}, {"id": 6987738, "category_id": 39, "iscrowd": 0, "bbox": [288, 127, 193, 111], "area": 3595}, {"id": 1712681, "category_id": 161, "iscrowd": 0, "bbox": [445, 0, 55, 227], "area": 6332}, {"id": 7698807, "category_id": 177, "iscrowd": 0, "bbox": [18, 0, 482, 309], "area": 98235}, {"id": 6913944, "category_id": 184, "iscrowd": 0, "bbox": [29, 254, 471, 71], "area": 7632}, {"id": 2963000, "category_id": 190, "iscrowd": 0, "bbox": [432, 208, 68, 29], "area": 1051}, {"id": 5607295, "category_id": 193, "iscrowd": 0, "bbox": [0, 273, 500, 102], "area": 31034}], "file_name": "000000270474.png", "image_id": 270474}, {"segments_info": [{"id": 6382668, "category_id": 1, "iscrowd": 0, "bbox": [184, 91, 269, 548], "area": 95652}, {"id": 6063500, "category_id": 41, "iscrowd": 0, "bbox": [418, 497, 77, 143], "area": 3259}, {"id": 4287080, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 634, 246], "area": 130686}, {"id": 2044719, "category_id": 185, "iscrowd": 0, "bbox": [0, 199, 634, 425], "area": 145010}, {"id": 13490137, "category_id": 187, "iscrowd": 0, "bbox": [182, 0, 44, 224], "area": 1045}, {"id": 1130280, "category_id": 193, "iscrowd": 0, "bbox": [0, 497, 634, 143], "area": 29140}], "file_name": "000000270677.png", "image_id": 270677}, {"segments_info": [{"id": 5075341, "category_id": 16, "iscrowd": 0, "bbox": [134, 25, 232, 538], "area": 80683}, {"id": 5725534, "category_id": 109, "iscrowd": 0, "bbox": [293, 0, 182, 640], "area": 67796}, {"id": 16382458, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 592], "area": 112150}], "file_name": "000000270705.png", "image_id": 270705}, {"segments_info": [{"id": 6055279, "category_id": 1, "iscrowd": 0, "bbox": [66, 96, 481, 219], "area": 37835}, {"id": 6909810, "category_id": 65, "iscrowd": 0, "bbox": [5, 3, 635, 390], "area": 134428}, {"id": 7173495, "category_id": 85, "iscrowd": 0, "bbox": [248, 71, 14, 14], "area": 128}, {"id": 2040870, "category_id": 130, "iscrowd": 0, "bbox": [185, 0, 93, 88], "area": 5703}, {"id": 3686460, "category_id": 177, "iscrowd": 0, "bbox": [0, 24, 300, 298], "area": 32595}, {"id": 395015, "category_id": 189, "iscrowd": 0, "bbox": [176, 67, 123, 106], "area": 6431}, {"id": 1384229, "category_id": 190, "iscrowd": 0, "bbox": [533, 272, 107, 121], "area": 6040}, {"id": 4016462, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 100], "area": 16901}], "file_name": "000000270883.png", "image_id": 270883}, {"segments_info": [{"id": 8096157, "category_id": 1, "iscrowd": 0, "bbox": [32, 30, 335, 177], "area": 14588}, {"id": 5463147, "category_id": 43, "iscrowd": 0, "bbox": [339, 151, 147, 122], "area": 5141}, {"id": 4608871, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 500, 299], "area": 129470}], "file_name": "000000270908.png", "image_id": 270908}, {"segments_info": [{"id": 7235697, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 339, 424], "area": 72629}, {"id": 4408136, "category_id": 1, "iscrowd": 0, "bbox": [285, 169, 18, 19], "area": 211}, {"id": 6186876, "category_id": 1, "iscrowd": 0, "bbox": [254, 174, 19, 23], "area": 221}, {"id": 5200240, "category_id": 1, "iscrowd": 0, "bbox": [382, 154, 73, 70], "area": 1691}, {"id": 2895419, "category_id": 1, "iscrowd": 0, "bbox": [335, 45, 305, 377], "area": 58045}, {"id": 3029065, "category_id": 1, "iscrowd": 0, "bbox": [364, 187, 17, 14], "area": 128}, {"id": 4543340, "category_id": 1, "iscrowd": 0, "bbox": [350, 177, 22, 29], "area": 310}, {"id": 4150387, "category_id": 1, "iscrowd": 0, "bbox": [376, 168, 35, 44], "area": 495}, {"id": 7112616, "category_id": 1, "iscrowd": 0, "bbox": [33, 80, 65, 20], "area": 868}, {"id": 6192036, "category_id": 1, "iscrowd": 0, "bbox": [347, 186, 14, 15], "area": 86}, {"id": 5726064, "category_id": 1, "iscrowd": 0, "bbox": [273, 154, 74, 67], "area": 2277}, {"id": 1975603, "category_id": 1, "iscrowd": 0, "bbox": [445, 178, 25, 50], "area": 618}, {"id": 7107473, "category_id": 1, "iscrowd": 0, "bbox": [236, 165, 26, 33], "area": 408}, {"id": 9673633, "category_id": 32, "iscrowd": 0, "bbox": [146, 126, 60, 237], "area": 3417}, {"id": 9538189, "category_id": 32, "iscrowd": 0, "bbox": [241, 187, 7, 11], "area": 50}, {"id": 4739678, "category_id": 32, "iscrowd": 0, "bbox": [308, 190, 7, 32], "area": 49}, {"id": 4934548, "category_id": 32, "iscrowd": 0, "bbox": [411, 192, 10, 23], "area": 74}, {"id": 1905429, "category_id": 32, "iscrowd": 0, "bbox": [461, 185, 91, 151], "area": 2291}, {"id": 3162733, "category_id": 46, "iscrowd": 0, "bbox": [389, 200, 14, 13], "area": 146}, {"id": 5534373, "category_id": 46, "iscrowd": 0, "bbox": [465, 203, 11, 34], "area": 236}, {"id": 3895726, "category_id": 46, "iscrowd": 0, "bbox": [426, 202, 21, 37], "area": 590}, {"id": 5861277, "category_id": 46, "iscrowd": 0, "bbox": [309, 199, 14, 25], "area": 242}, {"id": 4086690, "category_id": 46, "iscrowd": 0, "bbox": [330, 200, 21, 36], "area": 632}, {"id": 4938125, "category_id": 46, "iscrowd": 0, "bbox": [261, 197, 15, 27], "area": 286}, {"id": 5797033, "category_id": 46, "iscrowd": 0, "bbox": [475, 202, 13, 29], "area": 277}, {"id": 14279400, "category_id": 47, "iscrowd": 0, "bbox": [338, 232, 28, 19], "area": 465}, {"id": 12702428, "category_id": 47, "iscrowd": 0, "bbox": [285, 212, 15, 9], "area": 117}, {"id": 11847892, "category_id": 47, "iscrowd": 0, "bbox": [403, 222, 23, 18], "area": 327}, {"id": 13096414, "category_id": 48, "iscrowd": 0, "bbox": [292, 243, 23, 11], "area": 59}, {"id": 11057606, "category_id": 50, "iscrowd": 0, "bbox": [311, 245, 20, 10], "area": 68}, {"id": 724762, "category_id": 62, "iscrowd": 0, "bbox": [607, 236, 33, 165], "area": 3713}, {"id": 1777970, "category_id": 62, "iscrowd": 0, "bbox": [0, 195, 111, 218], "area": 12152}, {"id": 9540247, "category_id": 67, "iscrowd": 0, "bbox": [242, 212, 244, 141], "area": 20713}, {"id": 3879223, "category_id": 77, "iscrowd": 0, "bbox": [116, 312, 35, 11], "area": 261}, {"id": 5130592, "category_id": 77, "iscrowd": 0, "bbox": [371, 327, 27, 30], "area": 407}, {"id": 14607078, "category_id": 181, "iscrowd": 0, "bbox": [237, 152, 259, 61], "area": 3772}, {"id": 7702428, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 189], "area": 68340}, {"id": 14936300, "category_id": 195, "iscrowd": 0, "bbox": [348, 157, 38, 32], "area": 587}, {"id": 5464699, "category_id": 196, "iscrowd": 0, "bbox": [352, 195, 40, 19], "area": 284}], "file_name": "000000271116.png", "image_id": 271116}, {"segments_info": [{"id": 9669777, "category_id": 1, "iscrowd": 0, "bbox": [130, 96, 282, 470], "area": 38564}, {"id": 8748673, "category_id": 1, "iscrowd": 0, "bbox": [25, 63, 166, 512], "area": 46146}, {"id": 7894147, "category_id": 43, "iscrowd": 0, "bbox": [193, 309, 108, 227], "area": 7051}, {"id": 7104607, "category_id": 149, "iscrowd": 0, "bbox": [0, 226, 424, 414], "area": 95125}, {"id": 6986644, "category_id": 184, "iscrowd": 0, "bbox": [277, 149, 62, 47], "area": 1902}, {"id": 10986888, "category_id": 185, "iscrowd": 0, "bbox": [0, 74, 424, 234], "area": 21534}, {"id": 16644587, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 424, 191], "area": 51969}, {"id": 12113116, "category_id": 197, "iscrowd": 0, "bbox": [334, 129, 72, 69], "area": 3090}], "file_name": "000000271402.png", "image_id": 271402}, {"segments_info": [{"id": 986896, "category_id": 15, "iscrowd": 0, "bbox": [164, 209, 336, 120], "area": 23989}, {"id": 2958881, "category_id": 95, "iscrowd": 0, "bbox": [0, 22, 500, 44], "area": 4893}, {"id": 11243898, "category_id": 148, "iscrowd": 0, "bbox": [0, 39, 500, 123], "area": 43554}, {"id": 4278874, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 333], "area": 92502}, {"id": 15658474, "category_id": 187, "iscrowd": 0, "bbox": [369, 0, 119, 14], "area": 1388}], "file_name": "000000271457.png", "image_id": 271457}, {"segments_info": [{"id": 1722457, "category_id": 1, "iscrowd": 0, "bbox": [102, 1, 387, 239], "area": 42484}, {"id": 4353669, "category_id": 1, "iscrowd": 0, "bbox": [330, 1, 296, 179], "area": 37139}, {"id": 555424, "category_id": 52, "iscrowd": 0, "bbox": [93, 224, 57, 80], "area": 2419}, {"id": 160673, "category_id": 52, "iscrowd": 0, "bbox": [107, 260, 127, 66], "area": 3804}, {"id": 292773, "category_id": 52, "iscrowd": 0, "bbox": [168, 192, 237, 106], "area": 9663}, {"id": 358310, "category_id": 52, "iscrowd": 0, "bbox": [196, 219, 251, 127], "area": 17433}, {"id": 292002, "category_id": 52, "iscrowd": 0, "bbox": [142, 153, 249, 115], "area": 11458}, {"id": 1387836, "category_id": 189, "iscrowd": 0, "bbox": [0, 182, 640, 246], "area": 71952}, {"id": 4100522, "category_id": 195, "iscrowd": 0, "bbox": [335, 249, 210, 118], "area": 15122}, {"id": 1325654, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 184, 139], "area": 8472}], "file_name": "000000271471.png", "image_id": 271471}, {"segments_info": [{"id": 7771058, "category_id": 17, "iscrowd": 0, "bbox": [114, 210, 143, 84], "area": 7325}, {"id": 4418462, "category_id": 47, "iscrowd": 0, "bbox": [175, 95, 38, 46], "area": 1528}, {"id": 4539205, "category_id": 63, "iscrowd": 0, "bbox": [0, 89, 333, 333], "area": 83631}, {"id": 12566721, "category_id": 63, "iscrowd": 0, "bbox": [491, 49, 148, 207], "area": 23440}, {"id": 3027529, "category_id": 73, "iscrowd": 0, "bbox": [424, 178, 119, 82], "area": 4745}, {"id": 4079685, "category_id": 75, "iscrowd": 0, "bbox": [138, 307, 93, 22], "area": 1543}, {"id": 13948375, "category_id": 84, "iscrowd": 0, "bbox": [600, 277, 39, 30], "area": 993}, {"id": 10135218, "category_id": 84, "iscrowd": 0, "bbox": [576, 276, 64, 38], "area": 834}, {"id": 1187128, "category_id": 118, "iscrowd": 0, "bbox": [322, 236, 57, 46], "area": 1296}, {"id": 3890069, "category_id": 188, "iscrowd": 0, "bbox": [141, 0, 366, 246], "area": 62199}, {"id": 3031928, "category_id": 189, "iscrowd": 0, "bbox": [204, 115, 436, 312], "area": 11011}, {"id": 11316657, "category_id": 195, "iscrowd": 0, "bbox": [562, 283, 68, 43], "area": 1063}, {"id": 8885921, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 193], "area": 22791}, {"id": 3034744, "category_id": 200, "iscrowd": 0, "bbox": [325, 273, 40, 84], "area": 1754}], "file_name": "000000271728.png", "image_id": 271728}, {"segments_info": [{"id": 5529211, "category_id": 1, "iscrowd": 0, "bbox": [1, 4, 485, 627], "area": 224747}, {"id": 3090488, "category_id": 32, "iscrowd": 0, "bbox": [148, 587, 152, 53], "area": 4988}, {"id": 11979994, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 488, 557], "area": 76164}], "file_name": "000000271997.png", "image_id": 271997}, {"segments_info": [{"id": 11840680, "category_id": 5, "iscrowd": 0, "bbox": [0, 39, 199, 72], "area": 9749}, {"id": 4816542, "category_id": 8, "iscrowd": 0, "bbox": [52, 32, 467, 385], "area": 121229}, {"id": 11056040, "category_id": 184, "iscrowd": 0, "bbox": [562, 116, 78, 61], "area": 3643}, {"id": 6580585, "category_id": 185, "iscrowd": 0, "bbox": [0, 156, 640, 271], "area": 17185}, {"id": 16382972, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 190], "area": 53257}, {"id": 11052966, "category_id": 191, "iscrowd": 0, "bbox": [0, 237, 55, 36], "area": 1499}, {"id": 4355689, "category_id": 193, "iscrowd": 0, "bbox": [0, 255, 640, 172], "area": 48881}, {"id": 10068138, "category_id": 197, "iscrowd": 0, "bbox": [0, 148, 56, 94], "area": 4590}], "file_name": "000000272049.png", "image_id": 272049}, {"segments_info": [{"id": 2184852, "category_id": 1, "iscrowd": 0, "bbox": [90, 249, 19, 25], "area": 292}, {"id": 5856872, "category_id": 5, "iscrowd": 0, "bbox": [3, 52, 637, 370], "area": 184416}, {"id": 1518671, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 140], "area": 59004}, {"id": 3300475, "category_id": 199, "iscrowd": 0, "bbox": [0, 115, 238, 156], "area": 24781}], "file_name": "000000272136.png", "image_id": 272136}, {"segments_info": [{"id": 4409929, "category_id": 1, "iscrowd": 0, "bbox": [281, 262, 15, 18], "area": 121}, {"id": 4080969, "category_id": 1, "iscrowd": 0, "bbox": [199, 251, 13, 13], "area": 95}, {"id": 7303535, "category_id": 1, "iscrowd": 0, "bbox": [248, 170, 5, 2], "area": 7}, {"id": 5133903, "category_id": 1, "iscrowd": 0, "bbox": [145, 225, 20, 13], "area": 102}, {"id": 5461593, "category_id": 1, "iscrowd": 0, "bbox": [112, 208, 9, 5], "area": 22}, {"id": 5991539, "category_id": 1, "iscrowd": 0, "bbox": [538, 155, 5, 8], "area": 25}, {"id": 8553597, "category_id": 1, "iscrowd": 0, "bbox": [125, 184, 17, 6], "area": 37}, {"id": 7631983, "category_id": 1, "iscrowd": 0, "bbox": [121, 177, 6, 4], "area": 17}, {"id": 1581354, "category_id": 1, "iscrowd": 0, "bbox": [259, 325, 48, 16], "area": 291}, {"id": 4802889, "category_id": 1, "iscrowd": 0, "bbox": [286, 184, 2, 4], "area": 8}, {"id": 1119267, "category_id": 1, "iscrowd": 0, "bbox": [554, 160, 1, 7], "area": 7}, {"id": 2237215, "category_id": 1, "iscrowd": 0, "bbox": [147, 214, 5, 10], "area": 31}, {"id": 8166563, "category_id": 1, "iscrowd": 1, "bbox": [140, 141, 484, 50], "area": 980}, {"id": 8685944, "category_id": 42, "iscrowd": 0, "bbox": [275, 266, 14, 8], "area": 66}, {"id": 6186591, "category_id": 42, "iscrowd": 0, "bbox": [161, 217, 7, 4], "area": 23}, {"id": 6254951, "category_id": 42, "iscrowd": 0, "bbox": [263, 335, 55, 8], "area": 159}, {"id": 10466735, "category_id": 42, "iscrowd": 0, "bbox": [163, 228, 2, 3], "area": 5}, {"id": 6185300, "category_id": 42, "iscrowd": 0, "bbox": [114, 213, 5, 2], "area": 9}, {"id": 6515538, "category_id": 42, "iscrowd": 0, "bbox": [152, 232, 14, 8], "area": 42}, {"id": 8750970, "category_id": 42, "iscrowd": 0, "bbox": [199, 259, 7, 6], "area": 19}, {"id": 7567214, "category_id": 42, "iscrowd": 0, "bbox": [234, 184, 20, 2], "area": 17}, {"id": 9080960, "category_id": 42, "iscrowd": 0, "bbox": [133, 185, 9, 4], "area": 27}, {"id": 13224901, "category_id": 42, "iscrowd": 1, "bbox": [116, 154, 185, 38], "area": 875}, {"id": 7840172, "category_id": 154, "iscrowd": 0, "bbox": [301, 139, 339, 37], "area": 5100}, {"id": 8620149, "category_id": 155, "iscrowd": 0, "bbox": [0, 125, 640, 253], "area": 143228}, {"id": 15790319, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 140], "area": 80129}, {"id": 13879992, "category_id": 192, "iscrowd": 0, "bbox": [0, 115, 211, 26], "area": 2832}, {"id": 5792093, "category_id": 197, "iscrowd": 0, "bbox": [157, 120, 483, 38], "area": 7511}], "file_name": "000000272148.png", "image_id": 272148}, {"segments_info": [{"id": 3948863, "category_id": 21, "iscrowd": 0, "bbox": [494, 273, 34, 33], "area": 551}, {"id": 4475467, "category_id": 21, "iscrowd": 0, "bbox": [152, 279, 82, 71], "area": 3118}, {"id": 4079935, "category_id": 21, "iscrowd": 0, "bbox": [518, 272, 75, 40], "area": 1763}, {"id": 10132895, "category_id": 128, "iscrowd": 0, "bbox": [104, 200, 224, 77], "area": 10724}, {"id": 14078931, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 256], "area": 150495}, {"id": 10856102, "category_id": 192, "iscrowd": 0, "bbox": [321, 233, 319, 74], "area": 14592}, {"id": 3756622, "category_id": 193, "iscrowd": 0, "bbox": [0, 251, 640, 229], "area": 125782}], "file_name": "000000272212.png", "image_id": 272212}, {"segments_info": [{"id": 7896460, "category_id": 25, "iscrowd": 0, "bbox": [59, 214, 147, 415], "area": 30409}, {"id": 5726852, "category_id": 25, "iscrowd": 0, "bbox": [259, 103, 169, 537], "area": 50922}, {"id": 8226456, "category_id": 25, "iscrowd": 0, "bbox": [162, 273, 57, 109], "area": 2575}, {"id": 6908278, "category_id": 25, "iscrowd": 0, "bbox": [141, 151, 185, 489], "area": 33535}, {"id": 10986396, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 428, 640], "area": 93584}, {"id": 14013384, "category_id": 187, "iscrowd": 0, "bbox": [258, 171, 28, 35], "area": 261}, {"id": 9345172, "category_id": 193, "iscrowd": 0, "bbox": [170, 614, 167, 26], "area": 478}, {"id": 15132388, "category_id": 199, "iscrowd": 0, "bbox": [26, 0, 107, 592], "area": 15855}], "file_name": "000000272364.png", "image_id": 272364}, {"segments_info": [{"id": 13617852, "category_id": 70, "iscrowd": 0, "bbox": [282, 153, 313, 195], "area": 45826}, {"id": 7700617, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 364], "area": 17775}, {"id": 2639720, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 205662}], "file_name": "000000272416.png", "image_id": 272416}, {"segments_info": [{"id": 2635073, "category_id": 1, "iscrowd": 0, "bbox": [339, 126, 57, 138], "area": 3286}, {"id": 4808297, "category_id": 1, "iscrowd": 0, "bbox": [207, 90, 173, 219], "area": 21440}, {"id": 3821669, "category_id": 47, "iscrowd": 0, "bbox": [300, 137, 19, 29], "area": 91}, {"id": 3248267, "category_id": 52, "iscrowd": 0, "bbox": [371, 341, 20, 24], "area": 298}, {"id": 4432050, "category_id": 52, "iscrowd": 0, "bbox": [313, 309, 45, 20], "area": 463}, {"id": 2262673, "category_id": 52, "iscrowd": 0, "bbox": [124, 202, 26, 18], "area": 282}, {"id": 1000272, "category_id": 52, "iscrowd": 0, "bbox": [131, 218, 13, 10], "area": 83}, {"id": 5155776, "category_id": 52, "iscrowd": 0, "bbox": [353, 266, 44, 75], "area": 1858}, {"id": 7132125, "category_id": 52, "iscrowd": 0, "bbox": [452, 314, 29, 36], "area": 353}, {"id": 4368833, "category_id": 52, "iscrowd": 0, "bbox": [324, 277, 37, 22], "area": 545}, {"id": 4235953, "category_id": 52, "iscrowd": 0, "bbox": [457, 287, 45, 29], "area": 858}, {"id": 5554383, "category_id": 52, "iscrowd": 0, "bbox": [379, 301, 39, 48], "area": 1323}, {"id": 5554124, "category_id": 52, "iscrowd": 0, "bbox": [424, 307, 29, 33], "area": 560}, {"id": 5423308, "category_id": 52, "iscrowd": 0, "bbox": [324, 332, 39, 23], "area": 471}, {"id": 4304836, "category_id": 52, "iscrowd": 0, "bbox": [396, 254, 69, 59], "area": 2344}, {"id": 5225664, "category_id": 52, "iscrowd": 0, "bbox": [327, 333, 49, 44], "area": 1203}, {"id": 3769230, "category_id": 52, "iscrowd": 1, "bbox": [100, 181, 418, 221], "area": 18026}, {"id": 4882377, "category_id": 53, "iscrowd": 0, "bbox": [208, 315, 20, 20], "area": 276}, {"id": 5077956, "category_id": 53, "iscrowd": 0, "bbox": [75, 308, 221, 101], "area": 13557}, {"id": 2904771, "category_id": 53, "iscrowd": 0, "bbox": [140, 348, 26, 24], "area": 491}, {"id": 9866357, "category_id": 112, "iscrowd": 0, "bbox": [590, 0, 50, 36], "area": 1004}, {"id": 6849169, "category_id": 171, "iscrowd": 0, "bbox": [182, 18, 458, 256], "area": 24030}, {"id": 3695182, "category_id": 184, "iscrowd": 0, "bbox": [191, 0, 422, 122], "area": 32079}, {"id": 3363914, "category_id": 185, "iscrowd": 0, "bbox": [309, 0, 202, 122], "area": 4813}, {"id": 3690073, "category_id": 190, "iscrowd": 0, "bbox": [200, 235, 297, 104], "area": 5439}, {"id": 9019565, "category_id": 194, "iscrowd": 0, "bbox": [0, 255, 640, 196], "area": 35630}, {"id": 10006719, "category_id": 195, "iscrowd": 0, "bbox": [0, 306, 115, 137], "area": 4786}, {"id": 6989234, "category_id": 196, "iscrowd": 0, "bbox": [495, 299, 145, 88], "area": 6725}, {"id": 9549531, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 195, 273], "area": 37546}, {"id": 1987702, "category_id": 200, "iscrowd": 0, "bbox": [577, 359, 63, 51], "area": 1372}], "file_name": "000000272566.png", "image_id": 272566}, {"segments_info": [{"id": 9407877, "category_id": 1, "iscrowd": 0, "bbox": [123, 188, 379, 436], "area": 85859}, {"id": 7104863, "category_id": 15, "iscrowd": 0, "bbox": [12, 274, 588, 347], "area": 49948}, {"id": 4999230, "category_id": 31, "iscrowd": 0, "bbox": [24, 317, 247, 173], "area": 30378}, {"id": 8355188, "category_id": 128, "iscrowd": 0, "bbox": [0, 21, 640, 317], "area": 102828}, {"id": 8289652, "category_id": 184, "iscrowd": 0, "bbox": [14, 21, 608, 256], "area": 8762}, {"id": 8355196, "category_id": 185, "iscrowd": 0, "bbox": [0, 216, 622, 329], "area": 37607}, {"id": 16053747, "category_id": 187, "iscrowd": 0, "bbox": [81, 0, 559, 78], "area": 19859}, {"id": 8948099, "category_id": 191, "iscrowd": 0, "bbox": [0, 498, 126, 119], "area": 8418}], "file_name": "000000273132.png", "image_id": 273132}, {"segments_info": [{"id": 2893606, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 103, 206], "area": 10828}, {"id": 4080197, "category_id": 3, "iscrowd": 0, "bbox": [89, 0, 28, 19], "area": 339}, {"id": 6710375, "category_id": 3, "iscrowd": 0, "bbox": [113, 0, 110, 37], "area": 3163}, {"id": 1907997, "category_id": 3, "iscrowd": 0, "bbox": [257, 0, 129, 33], "area": 1684}, {"id": 6776934, "category_id": 11, "iscrowd": 0, "bbox": [74, 77, 52, 135], "area": 5526}, {"id": 10525606, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 110006}, {"id": 8759497, "category_id": 178, "iscrowd": 0, "bbox": [124, 111, 376, 225], "area": 42450}, {"id": 4015176, "category_id": 184, "iscrowd": 0, "bbox": [263, 0, 88, 96], "area": 4114}, {"id": 3750725, "category_id": 191, "iscrowd": 0, "bbox": [0, 186, 16, 22], "area": 108}], "file_name": "000000273198.png", "image_id": 273198}, {"segments_info": [{"id": 2106415, "category_id": 1, "iscrowd": 0, "bbox": [178, 175, 143, 204], "area": 9349}, {"id": 3880242, "category_id": 1, "iscrowd": 0, "bbox": [20, 225, 9, 9], "area": 53}, {"id": 4735550, "category_id": 1, "iscrowd": 0, "bbox": [436, 225, 4, 5], "area": 12}, {"id": 1384759, "category_id": 18, "iscrowd": 0, "bbox": [360, 279, 103, 84], "area": 3536}, {"id": 3749697, "category_id": 38, "iscrowd": 0, "bbox": [393, 35, 31, 33], "area": 419}, {"id": 8749694, "category_id": 38, "iscrowd": 0, "bbox": [123, 200, 5, 4], "area": 15}, {"id": 3686735, "category_id": 38, "iscrowd": 0, "bbox": [40, 41, 34, 23], "area": 332}, {"id": 2302506, "category_id": 38, "iscrowd": 0, "bbox": [529, 173, 10, 17], "area": 79}, {"id": 7628126, "category_id": 38, "iscrowd": 0, "bbox": [523, 211, 4, 6], "area": 11}, {"id": 9472393, "category_id": 38, "iscrowd": 0, "bbox": [117, 219, 4, 4], "area": 12}, {"id": 8684927, "category_id": 38, "iscrowd": 0, "bbox": [104, 216, 2, 2], "area": 3}, {"id": 9602951, "category_id": 38, "iscrowd": 0, "bbox": [548, 210, 2, 3], "area": 6}, {"id": 8421508, "category_id": 38, "iscrowd": 0, "bbox": [461, 197, 5, 7], "area": 26}, {"id": 11514290, "category_id": 38, "iscrowd": 0, "bbox": [631, 210, 2, 3], "area": 4}, {"id": 7894890, "category_id": 42, "iscrowd": 0, "bbox": [25, 231, 10, 4], "area": 31}, {"id": 7175052, "category_id": 42, "iscrowd": 0, "bbox": [259, 68, 129, 155], "area": 14280}, {"id": 10001302, "category_id": 155, "iscrowd": 0, "bbox": [0, 223, 640, 202], "area": 113999}, {"id": 12957609, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 247], "area": 124244}], "file_name": "000000273232.png", "image_id": 273232}, {"segments_info": [{"id": 7171696, "category_id": 1, "iscrowd": 0, "bbox": [170, 108, 100, 198], "area": 9160}, {"id": 16574405, "category_id": 3, "iscrowd": 0, "bbox": [383, 217, 43, 19], "area": 590}, {"id": 7232602, "category_id": 47, "iscrowd": 0, "bbox": [175, 287, 16, 24], "area": 312}, {"id": 4540239, "category_id": 62, "iscrowd": 0, "bbox": [123, 242, 61, 82], "area": 3274}, {"id": 14933464, "category_id": 65, "iscrowd": 0, "bbox": [2, 295, 497, 101], "area": 20823}, {"id": 4014149, "category_id": 77, "iscrowd": 0, "bbox": [191, 126, 11, 20], "area": 106}, {"id": 6516342, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 113, 370], "area": 31356}, {"id": 11313053, "category_id": 181, "iscrowd": 0, "bbox": [364, 74, 136, 197], "area": 23395}, {"id": 9148305, "category_id": 186, "iscrowd": 0, "bbox": [94, 0, 302, 32], "area": 5615}, {"id": 8617850, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 384], "area": 93293}], "file_name": "000000273420.png", "image_id": 273420}, {"segments_info": [{"id": 8950678, "category_id": 1, "iscrowd": 0, "bbox": [366, 158, 24, 46], "area": 577}, {"id": 8095625, "category_id": 1, "iscrowd": 0, "bbox": [69, 119, 53, 125], "area": 2880}, {"id": 7264444, "category_id": 37, "iscrowd": 0, "bbox": [321, 134, 3, 2], "area": 6}, {"id": 4162421, "category_id": 43, "iscrowd": 0, "bbox": [110, 189, 10, 15], "area": 111}, {"id": 4675925, "category_id": 43, "iscrowd": 0, "bbox": [393, 175, 12, 5], "area": 50}, {"id": 3305821, "category_id": 138, "iscrowd": 0, "bbox": [12, 152, 488, 86], "area": 19391}, {"id": 3622205, "category_id": 184, "iscrowd": 0, "bbox": [0, 46, 500, 107], "area": 33200}, {"id": 15723240, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 106], "area": 36895}, {"id": 2258266, "category_id": 193, "iscrowd": 0, "bbox": [0, 172, 500, 161], "area": 54944}], "file_name": "000000273493.png", "image_id": 273493}, {"segments_info": [{"id": 4079157, "category_id": 4, "iscrowd": 0, "bbox": [459, 200, 181, 252], "area": 34241}, {"id": 3883066, "category_id": 4, "iscrowd": 0, "bbox": [50, 192, 423, 258], "area": 63320}, {"id": 5199179, "category_id": 4, "iscrowd": 0, "bbox": [0, 223, 130, 161], "area": 11909}, {"id": 8356748, "category_id": 92, "iscrowd": 0, "bbox": [0, 84, 640, 73], "area": 19628}, {"id": 7044730, "category_id": 149, "iscrowd": 0, "bbox": [0, 346, 492, 111], "area": 13406}, {"id": 5269859, "category_id": 184, "iscrowd": 0, "bbox": [369, 47, 201, 107], "area": 3327}, {"id": 15450251, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 119], "area": 62845}, {"id": 8879987, "category_id": 192, "iscrowd": 0, "bbox": [0, 73, 640, 64], "area": 4240}, {"id": 7058601, "category_id": 193, "iscrowd": 0, "bbox": [0, 132, 640, 309], "area": 75060}, {"id": 10931406, "category_id": 198, "iscrowd": 0, "bbox": [209, 204, 81, 36], "area": 1320}], "file_name": "000000273551.png", "image_id": 273551}, {"segments_info": [{"id": 2371237, "category_id": 13, "iscrowd": 0, "bbox": [129, 165, 36, 39], "area": 1088}, {"id": 11066100, "category_id": 130, "iscrowd": 0, "bbox": [488, 66, 26, 37], "area": 685}, {"id": 2959942, "category_id": 149, "iscrowd": 0, "bbox": [65, 366, 575, 61], "area": 25764}, {"id": 2234137, "category_id": 184, "iscrowd": 0, "bbox": [0, 130, 467, 245], "area": 35108}, {"id": 9000745, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 379], "area": 195508}, {"id": 1644587, "category_id": 191, "iscrowd": 0, "bbox": [0, 357, 222, 70], "area": 3632}, {"id": 1386303, "category_id": 193, "iscrowd": 0, "bbox": [0, 337, 207, 75], "area": 11179}], "file_name": "000000273617.png", "image_id": 273617}, {"segments_info": [{"id": 3355197, "category_id": 18, "iscrowd": 0, "bbox": [8, 6, 367, 494], "area": 117731}, {"id": 7831696, "category_id": 75, "iscrowd": 0, "bbox": [2, 225, 219, 267], "area": 19774}, {"id": 5857133, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 195, 466], "area": 29386}], "file_name": "000000273642.png", "image_id": 273642}, {"segments_info": [{"id": 790034, "category_id": 1, "iscrowd": 0, "bbox": [549, 0, 91, 70], "area": 2385}, {"id": 3751503, "category_id": 1, "iscrowd": 0, "bbox": [534, 44, 104, 430], "area": 16960}, {"id": 4746883, "category_id": 50, "iscrowd": 0, "bbox": [374, 281, 70, 57], "area": 500}, {"id": 6055050, "category_id": 51, "iscrowd": 0, "bbox": [257, 236, 103, 77], "area": 5734}, {"id": 6515055, "category_id": 51, "iscrowd": 0, "bbox": [221, 298, 124, 88], "area": 7592}, {"id": 10335938, "category_id": 51, "iscrowd": 0, "bbox": [161, 363, 171, 111], "area": 14355}, {"id": 4807570, "category_id": 51, "iscrowd": 0, "bbox": [153, 280, 95, 82], "area": 4172}, {"id": 5726892, "category_id": 51, "iscrowd": 0, "bbox": [355, 254, 80, 78], "area": 3761}, {"id": 9743281, "category_id": 51, "iscrowd": 0, "bbox": [450, 202, 114, 71], "area": 6621}, {"id": 5213592, "category_id": 51, "iscrowd": 0, "bbox": [448, 183, 87, 20], "area": 1378}, {"id": 4357024, "category_id": 51, "iscrowd": 0, "bbox": [345, 299, 65, 70], "area": 3172}, {"id": 4168104, "category_id": 53, "iscrowd": 0, "bbox": [78, 257, 89, 39], "area": 2148}, {"id": 9414582, "category_id": 54, "iscrowd": 0, "bbox": [383, 395, 55, 59], "area": 1967}, {"id": 8625068, "category_id": 54, "iscrowd": 0, "bbox": [434, 373, 45, 24], "area": 714}, {"id": 8887725, "category_id": 54, "iscrowd": 0, "bbox": [432, 383, 69, 77], "area": 3505}, {"id": 9348791, "category_id": 54, "iscrowd": 0, "bbox": [355, 400, 79, 60], "area": 2291}, {"id": 2910608, "category_id": 54, "iscrowd": 0, "bbox": [389, 219, 47, 40], "area": 1523}, {"id": 9611704, "category_id": 54, "iscrowd": 0, "bbox": [328, 391, 26, 51], "area": 866}, {"id": 9678269, "category_id": 54, "iscrowd": 0, "bbox": [343, 394, 20, 55], "area": 624}, {"id": 9414326, "category_id": 54, "iscrowd": 0, "bbox": [341, 369, 63, 34], "area": 1125}, {"id": 9282740, "category_id": 54, "iscrowd": 0, "bbox": [389, 373, 45, 24], "area": 890}, {"id": 1987969, "category_id": 55, "iscrowd": 0, "bbox": [215, 233, 32, 34], "area": 783}, {"id": 1397914, "category_id": 55, "iscrowd": 0, "bbox": [250, 219, 42, 19], "area": 356}, {"id": 874154, "category_id": 55, "iscrowd": 0, "bbox": [214, 217, 37, 20], "area": 578}, {"id": 1793973, "category_id": 55, "iscrowd": 0, "bbox": [237, 253, 33, 34], "area": 879}, {"id": 1856957, "category_id": 57, "iscrowd": 0, "bbox": [177, 305, 59, 27], "area": 503}, {"id": 1920954, "category_id": 57, "iscrowd": 0, "bbox": [201, 308, 15, 12], "area": 135}, {"id": 5263950, "category_id": 62, "iscrowd": 0, "bbox": [1, 214, 78, 178], "area": 6740}, {"id": 5000261, "category_id": 62, "iscrowd": 0, "bbox": [539, 236, 84, 209], "area": 4186}, {"id": 2040353, "category_id": 62, "iscrowd": 0, "bbox": [2, 97, 49, 75], "area": 1814}, {"id": 1250581, "category_id": 62, "iscrowd": 0, "bbox": [54, 0, 68, 114], "area": 3793}, {"id": 4016458, "category_id": 62, "iscrowd": 0, "bbox": [451, 59, 98, 88], "area": 5921}, {"id": 4214609, "category_id": 62, "iscrowd": 0, "bbox": [217, 16, 106, 53], "area": 2512}, {"id": 1250074, "category_id": 62, "iscrowd": 0, "bbox": [23, 286, 41, 79], "area": 1958}, {"id": 6911366, "category_id": 67, "iscrowd": 0, "bbox": [56, 76, 510, 404], "area": 101720}, {"id": 2304047, "category_id": 122, "iscrowd": 0, "bbox": [62, 287, 22, 20], "area": 283}, {"id": 2964807, "category_id": 188, "iscrowd": 0, "bbox": [90, 0, 465, 141], "area": 28398}, {"id": 2697784, "category_id": 189, "iscrowd": 0, "bbox": [51, 102, 510, 378], "area": 2641}, {"id": 3223855, "category_id": 190, "iscrowd": 0, "bbox": [0, 105, 640, 375], "area": 31227}, {"id": 5203829, "category_id": 196, "iscrowd": 0, "bbox": [65, 29, 531, 243], "area": 9892}, {"id": 658187, "category_id": 199, "iscrowd": 0, "bbox": [69, 86, 55, 23], "area": 899}], "file_name": "000000273711.png", "image_id": 273711}, {"segments_info": [{"id": 2435883, "category_id": 82, "iscrowd": 0, "bbox": [1, 81, 314, 519], "area": 133365}, {"id": 11975869, "category_id": 100, "iscrowd": 0, "bbox": [377, 340, 60, 74], "area": 2598}, {"id": 8359584, "category_id": 112, "iscrowd": 0, "bbox": [50, 35, 414, 440], "area": 39619}, {"id": 7834783, "category_id": 118, "iscrowd": 0, "bbox": [0, 510, 361, 106], "area": 5249}, {"id": 10139844, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 480, 528], "area": 66209}, {"id": 4605818, "category_id": 190, "iscrowd": 0, "bbox": [0, 379, 480, 261], "area": 55897}, {"id": 12308174, "category_id": 199, "iscrowd": 0, "bbox": [25, 59, 156, 63], "area": 2862}], "file_name": "000000273712.png", "image_id": 273712}, {"segments_info": [{"id": 1776160, "category_id": 1, "iscrowd": 0, "bbox": [60, 179, 19, 34], "area": 502}, {"id": 8352620, "category_id": 1, "iscrowd": 0, "bbox": [257, 160, 58, 117], "area": 2264}, {"id": 5532530, "category_id": 1, "iscrowd": 0, "bbox": [438, 154, 62, 147], "area": 5062}, {"id": 3229259, "category_id": 1, "iscrowd": 0, "bbox": [164, 175, 38, 98], "area": 1907}, {"id": 9803423, "category_id": 35, "iscrowd": 0, "bbox": [260, 275, 29, 9], "area": 65}, {"id": 12695992, "category_id": 159, "iscrowd": 0, "bbox": [0, 183, 500, 150], "area": 48787}, {"id": 9012609, "category_id": 184, "iscrowd": 0, "bbox": [0, 110, 242, 91], "area": 4570}, {"id": 11773343, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 210], "area": 48084}, {"id": 10788764, "category_id": 192, "iscrowd": 0, "bbox": [180, 136, 320, 79], "area": 14265}, {"id": 2959405, "category_id": 197, "iscrowd": 0, "bbox": [35, 166, 76, 62], "area": 1940}], "file_name": "000000273715.png", "image_id": 273715}, {"segments_info": [{"id": 11897966, "category_id": 1, "iscrowd": 0, "bbox": [127, 35, 176, 510], "area": 40562}, {"id": 8027255, "category_id": 43, "iscrowd": 0, "bbox": [130, 294, 29, 92], "area": 2023}, {"id": 7510411, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 467, 640], "area": 255818}], "file_name": "000000273760.png", "image_id": 273760}, {"segments_info": [{"id": 2235937, "category_id": 1, "iscrowd": 0, "bbox": [374, 185, 29, 25], "area": 417}, {"id": 3881801, "category_id": 1, "iscrowd": 0, "bbox": [263, 154, 183, 165], "area": 9672}, {"id": 5128760, "category_id": 1, "iscrowd": 0, "bbox": [415, 46, 89, 87], "area": 3243}, {"id": 3419698, "category_id": 1, "iscrowd": 0, "bbox": [172, 88, 155, 193], "area": 13819}, {"id": 3552058, "category_id": 1, "iscrowd": 0, "bbox": [406, 116, 116, 111], "area": 5467}, {"id": 13339211, "category_id": 42, "iscrowd": 0, "bbox": [353, 113, 56, 18], "area": 538}, {"id": 1793135, "category_id": 42, "iscrowd": 0, "bbox": [12, 209, 255, 133], "area": 14472}, {"id": 8151885, "category_id": 42, "iscrowd": 0, "bbox": [478, 123, 33, 8], "area": 170}, {"id": 13748420, "category_id": 42, "iscrowd": 0, "bbox": [477, 216, 102, 36], "area": 1967}, {"id": 11579050, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 222835}], "file_name": "000000274066.png", "image_id": 274066}, {"segments_info": [{"id": 5658198, "category_id": 1, "iscrowd": 0, "bbox": [3, 6, 461, 624], "area": 200369}, {"id": 2236962, "category_id": 32, "iscrowd": 0, "bbox": [176, 324, 84, 44], "area": 2043}], "file_name": "000000274219.png", "image_id": 274219}, {"segments_info": [{"id": 5853772, "category_id": 1, "iscrowd": 0, "bbox": [435, 293, 51, 128], "area": 2860}, {"id": 4736062, "category_id": 1, "iscrowd": 0, "bbox": [404, 350, 42, 94], "area": 2643}, {"id": 5459783, "category_id": 1, "iscrowd": 0, "bbox": [252, 350, 87, 57], "area": 2105}, {"id": 8025201, "category_id": 1, "iscrowd": 0, "bbox": [152, 422, 22, 15], "area": 195}, {"id": 9867921, "category_id": 3, "iscrowd": 0, "bbox": [30, 383, 185, 93], "area": 13237}, {"id": 8947082, "category_id": 3, "iscrowd": 0, "bbox": [0, 393, 82, 87], "area": 4151}, {"id": 6512992, "category_id": 6, "iscrowd": 0, "bbox": [182, 200, 458, 280], "area": 82794}, {"id": 6249548, "category_id": 10, "iscrowd": 0, "bbox": [211, 190, 43, 46], "area": 1344}, {"id": 5987646, "category_id": 10, "iscrowd": 0, "bbox": [567, 192, 38, 28], "area": 1004}, {"id": 5920854, "category_id": 185, "iscrowd": 0, "bbox": [0, 337, 213, 97], "area": 7790}, {"id": 14339259, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 583, 363], "area": 48854}, {"id": 7433839, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 366], "area": 93102}, {"id": 5989480, "category_id": 199, "iscrowd": 0, "bbox": [450, 328, 190, 152], "area": 27213}], "file_name": "000000274272.png", "image_id": 274272}, {"segments_info": [{"id": 7701400, "category_id": 1, "iscrowd": 0, "bbox": [148, 142, 117, 396], "area": 24280}, {"id": 2895663, "category_id": 3, "iscrowd": 0, "bbox": [2, 156, 393, 313], "area": 66336}, {"id": 2829610, "category_id": 3, "iscrowd": 0, "bbox": [315, 232, 111, 77], "area": 5046}, {"id": 9628903, "category_id": 37, "iscrowd": 0, "bbox": [199, 313, 18, 18], "area": 239}, {"id": 5137520, "category_id": 43, "iscrowd": 0, "bbox": [152, 333, 36, 123], "area": 1606}, {"id": 13688033, "category_id": 138, "iscrowd": 0, "bbox": [0, 379, 426, 47], "area": 11146}, {"id": 5662298, "category_id": 145, "iscrowd": 0, "bbox": [0, 475, 426, 165], "area": 62889}, {"id": 2962227, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 426, 497], "area": 100032}], "file_name": "000000274411.png", "image_id": 274411}, {"segments_info": [{"id": 7438463, "category_id": 1, "iscrowd": 0, "bbox": [354, 190, 36, 90], "area": 1999}, {"id": 4014502, "category_id": 1, "iscrowd": 0, "bbox": [324, 250, 71, 102], "area": 2247}, {"id": 8214588, "category_id": 1, "iscrowd": 0, "bbox": [260, 170, 57, 156], "area": 5042}, {"id": 6254180, "category_id": 1, "iscrowd": 0, "bbox": [33, 290, 103, 120], "area": 4637}, {"id": 4146592, "category_id": 1, "iscrowd": 0, "bbox": [341, 272, 49, 106], "area": 3299}, {"id": 3169639, "category_id": 1, "iscrowd": 0, "bbox": [450, 281, 55, 95], "area": 2818}, {"id": 7764368, "category_id": 1, "iscrowd": 0, "bbox": [511, 212, 44, 106], "area": 1897}, {"id": 3157037, "category_id": 1, "iscrowd": 0, "bbox": [310, 188, 48, 131], "area": 2949}, {"id": 5014479, "category_id": 1, "iscrowd": 0, "bbox": [438, 185, 58, 147], "area": 3728}, {"id": 5520266, "category_id": 1, "iscrowd": 0, "bbox": [154, 175, 52, 140], "area": 4221}, {"id": 5802581, "category_id": 1, "iscrowd": 0, "bbox": [8, 197, 37, 94], "area": 1897}, {"id": 3619156, "category_id": 1, "iscrowd": 0, "bbox": [205, 184, 66, 146], "area": 4998}, {"id": 8488283, "category_id": 1, "iscrowd": 0, "bbox": [131, 291, 88, 117], "area": 3628}, {"id": 10328986, "category_id": 2, "iscrowd": 0, "bbox": [236, 180, 27, 13], "area": 201}, {"id": 6578523, "category_id": 2, "iscrowd": 0, "bbox": [22, 181, 32, 15], "area": 273}, {"id": 7302239, "category_id": 27, "iscrowd": 0, "bbox": [112, 262, 45, 22], "area": 774}, {"id": 14870246, "category_id": 42, "iscrowd": 0, "bbox": [140, 335, 64, 88], "area": 2738}, {"id": 15988212, "category_id": 42, "iscrowd": 0, "bbox": [285, 332, 62, 79], "area": 2696}, {"id": 13293782, "category_id": 42, "iscrowd": 0, "bbox": [27, 338, 86, 27], "area": 770}, {"id": 15327371, "category_id": 42, "iscrowd": 0, "bbox": [501, 326, 101, 71], "area": 2472}, {"id": 12242122, "category_id": 154, "iscrowd": 0, "bbox": [0, 184, 640, 270], "area": 105854}, {"id": 7504246, "category_id": 175, "iscrowd": 0, "bbox": [575, 190, 65, 25], "area": 602}, {"id": 3691839, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 210], "area": 70277}, {"id": 16645885, "category_id": 187, "iscrowd": 0, "bbox": [421, 0, 219, 139], "area": 20130}, {"id": 10854793, "category_id": 197, "iscrowd": 0, "bbox": [0, 69, 640, 158], "area": 35722}, {"id": 5595483, "category_id": 199, "iscrowd": 0, "bbox": [519, 200, 23, 19], "area": 221}], "file_name": "000000274460.png", "image_id": 274460}, {"segments_info": [{"id": 4799799, "category_id": 2, "iscrowd": 0, "bbox": [2, 104, 638, 371], "area": 84296}, {"id": 10264736, "category_id": 62, "iscrowd": 0, "bbox": [413, 0, 158, 253], "area": 17888}, {"id": 5920603, "category_id": 65, "iscrowd": 0, "bbox": [0, 124, 425, 294], "area": 90566}, {"id": 4803149, "category_id": 93, "iscrowd": 0, "bbox": [0, 145, 8, 215], "area": 960}, {"id": 12235940, "category_id": 112, "iscrowd": 0, "bbox": [56, 0, 584, 238], "area": 41623}, {"id": 8565421, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 603, 188], "area": 29920}, {"id": 4535849, "category_id": 200, "iscrowd": 0, "bbox": [73, 226, 567, 254], "area": 28503}], "file_name": "000000274687.png", "image_id": 274687}, {"segments_info": [{"id": 3553079, "category_id": 1, "iscrowd": 0, "bbox": [299, 211, 30, 55], "area": 705}, {"id": 1250324, "category_id": 1, "iscrowd": 0, "bbox": [97, 165, 40, 101], "area": 2375}, {"id": 8948618, "category_id": 1, "iscrowd": 0, "bbox": [356, 235, 18, 22], "area": 164}, {"id": 2434616, "category_id": 1, "iscrowd": 0, "bbox": [338, 199, 14, 29], "area": 251}, {"id": 9144210, "category_id": 1, "iscrowd": 0, "bbox": [240, 191, 22, 26], "area": 303}, {"id": 7041394, "category_id": 1, "iscrowd": 0, "bbox": [255, 193, 21, 26], "area": 203}, {"id": 8883082, "category_id": 35, "iscrowd": 0, "bbox": [88, 244, 59, 36], "area": 313}], "file_name": "000000274708.png", "image_id": 274708}, {"segments_info": [{"id": 2499620, "category_id": 1, "iscrowd": 0, "bbox": [206, 149, 71, 134], "area": 4022}, {"id": 2170141, "category_id": 42, "iscrowd": 0, "bbox": [174, 264, 83, 46], "area": 1564}, {"id": 9539471, "category_id": 155, "iscrowd": 0, "bbox": [0, 98, 427, 542], "area": 221750}, {"id": 7171951, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 117], "area": 45322}], "file_name": "000000275058.png", "image_id": 275058}, {"segments_info": [{"id": 4802378, "category_id": 1, "iscrowd": 0, "bbox": [0, 44, 184, 436], "area": 37429}, {"id": 2498599, "category_id": 1, "iscrowd": 0, "bbox": [299, 115, 124, 135], "area": 8659}, {"id": 4346243, "category_id": 1, "iscrowd": 0, "bbox": [453, 176, 49, 75], "area": 2928}, {"id": 2698805, "category_id": 1, "iscrowd": 0, "bbox": [204, 181, 93, 101], "area": 5028}, {"id": 1447964, "category_id": 1, "iscrowd": 0, "bbox": [487, 258, 153, 205], "area": 14779}, {"id": 8886688, "category_id": 28, "iscrowd": 0, "bbox": [295, 47, 246, 110], "area": 16988}, {"id": 8554580, "category_id": 28, "iscrowd": 0, "bbox": [502, 101, 138, 92], "area": 9123}, {"id": 3352870, "category_id": 28, "iscrowd": 0, "bbox": [134, 148, 207, 114], "area": 9641}, {"id": 2631795, "category_id": 44, "iscrowd": 0, "bbox": [445, 264, 27, 67], "area": 1371}, {"id": 4080750, "category_id": 44, "iscrowd": 0, "bbox": [401, 251, 20, 42], "area": 534}, {"id": 5003606, "category_id": 44, "iscrowd": 0, "bbox": [252, 248, 18, 53], "area": 730}, {"id": 8355457, "category_id": 44, "iscrowd": 0, "bbox": [262, 260, 37, 115], "area": 2263}, {"id": 5795446, "category_id": 47, "iscrowd": 0, "bbox": [313, 261, 18, 16], "area": 267}, {"id": 6315638, "category_id": 47, "iscrowd": 0, "bbox": [198, 313, 24, 42], "area": 839}, {"id": 7827832, "category_id": 47, "iscrowd": 0, "bbox": [309, 331, 24, 44], "area": 892}, {"id": 5409693, "category_id": 47, "iscrowd": 0, "bbox": [380, 232, 15, 20], "area": 249}, {"id": 7241860, "category_id": 47, "iscrowd": 0, "bbox": [424, 268, 14, 30], "area": 324}, {"id": 9147552, "category_id": 47, "iscrowd": 0, "bbox": [396, 230, 19, 20], "area": 320}, {"id": 8419187, "category_id": 47, "iscrowd": 0, "bbox": [277, 345, 28, 47], "area": 1033}, {"id": 8947334, "category_id": 48, "iscrowd": 0, "bbox": [194, 391, 19, 49], "area": 334}, {"id": 13028813, "category_id": 48, "iscrowd": 0, "bbox": [482, 299, 8, 29], "area": 96}, {"id": 11251381, "category_id": 48, "iscrowd": 0, "bbox": [388, 350, 68, 23], "area": 237}, {"id": 7835298, "category_id": 49, "iscrowd": 0, "bbox": [344, 239, 30, 9], "area": 103}, {"id": 7503231, "category_id": 49, "iscrowd": 0, "bbox": [472, 294, 11, 37], "area": 233}, {"id": 4604228, "category_id": 49, "iscrowd": 0, "bbox": [194, 314, 42, 22], "area": 70}, {"id": 7301481, "category_id": 49, "iscrowd": 0, "bbox": [230, 379, 15, 46], "area": 172}, {"id": 7302508, "category_id": 49, "iscrowd": 0, "bbox": [233, 385, 5, 41], "area": 173}, {"id": 4933703, "category_id": 50, "iscrowd": 0, "bbox": [240, 286, 8, 27], "area": 98}, {"id": 7371139, "category_id": 50, "iscrowd": 0, "bbox": [323, 240, 27, 22], "area": 163}, {"id": 9669772, "category_id": 50, "iscrowd": 0, "bbox": [483, 301, 7, 27], "area": 45}, {"id": 7040129, "category_id": 50, "iscrowd": 0, "bbox": [339, 285, 25, 18], "area": 172}, {"id": 9213597, "category_id": 51, "iscrowd": 0, "bbox": [380, 248, 56, 41], "area": 1014}, {"id": 7444142, "category_id": 51, "iscrowd": 0, "bbox": [263, 276, 92, 46], "area": 2495}, {"id": 6319474, "category_id": 51, "iscrowd": 0, "bbox": [330, 246, 42, 32], "area": 780}, {"id": 4749975, "category_id": 51, "iscrowd": 0, "bbox": [357, 289, 83, 44], "area": 2838}, {"id": 11970939, "category_id": 51, "iscrowd": 0, "bbox": [295, 317, 37, 37], "area": 711}, {"id": 6250616, "category_id": 62, "iscrowd": 0, "bbox": [287, 140, 39, 27], "area": 669}, {"id": 2043457, "category_id": 62, "iscrowd": 0, "bbox": [496, 225, 11, 27], "area": 100}, {"id": 5591625, "category_id": 62, "iscrowd": 0, "bbox": [353, 415, 183, 65], "area": 7342}, {"id": 7698040, "category_id": 67, "iscrowd": 0, "bbox": [85, 229, 476, 243], "area": 48540}, {"id": 9477543, "category_id": 171, "iscrowd": 0, "bbox": [232, 0, 144, 40], "area": 3089}, {"id": 4806234, "category_id": 177, "iscrowd": 0, "bbox": [19, 0, 621, 353], "area": 42516}, {"id": 1597780, "category_id": 184, "iscrowd": 0, "bbox": [118, 0, 522, 335], "area": 36119}, {"id": 3026475, "category_id": 189, "iscrowd": 0, "bbox": [0, 253, 542, 227], "area": 2833}, {"id": 3423040, "category_id": 190, "iscrowd": 0, "bbox": [0, 228, 548, 252], "area": 16205}, {"id": 5988449, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 234, 101], "area": 5292}], "file_name": "000000275198.png", "image_id": 275198}, {"segments_info": [{"id": 3555910, "category_id": 1, "iscrowd": 0, "bbox": [139, 91, 200, 374], "area": 18233}, {"id": 1915738, "category_id": 19, "iscrowd": 0, "bbox": [67, 113, 235, 512], "area": 55244}, {"id": 16645630, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 265], "area": 93859}, {"id": 1066554, "category_id": 193, "iscrowd": 0, "bbox": [0, 232, 480, 408], "area": 126337}, {"id": 3431789, "category_id": 194, "iscrowd": 0, "bbox": [0, 282, 470, 101], "area": 10176}], "file_name": "000000275392.png", "image_id": 275392}, {"segments_info": [{"id": 3822424, "category_id": 7, "iscrowd": 0, "bbox": [28, 143, 529, 245], "area": 73592}, {"id": 2632764, "category_id": 10, "iscrowd": 0, "bbox": [6, 203, 18, 42], "area": 686}, {"id": 5201512, "category_id": 147, "iscrowd": 0, "bbox": [81, 287, 559, 188], "area": 33198}, {"id": 2703928, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 294], "area": 110430}, {"id": 5463386, "category_id": 185, "iscrowd": 0, "bbox": [546, 214, 94, 106], "area": 7625}, {"id": 16448250, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 261, 104], "area": 17822}, {"id": 12506076, "category_id": 191, "iscrowd": 0, "bbox": [0, 276, 640, 199], "area": 49652}, {"id": 4607051, "category_id": 197, "iscrowd": 0, "bbox": [0, 202, 18, 55], "area": 433}, {"id": 2566698, "category_id": 199, "iscrowd": 0, "bbox": [511, 321, 129, 89], "area": 6337}], "file_name": "000000275727.png", "image_id": 275727}, {"segments_info": [{"id": 790037, "category_id": 1, "iscrowd": 0, "bbox": [158, 73, 46, 50], "area": 590}, {"id": 1711394, "category_id": 1, "iscrowd": 0, "bbox": [167, 96, 61, 141], "area": 2605}, {"id": 1645344, "category_id": 1, "iscrowd": 0, "bbox": [125, 94, 97, 202], "area": 8664}, {"id": 1776669, "category_id": 1, "iscrowd": 0, "bbox": [312, 125, 88, 226], "area": 12429}, {"id": 5529702, "category_id": 1, "iscrowd": 0, "bbox": [61, 97, 92, 142], "area": 8108}, {"id": 2634042, "category_id": 1, "iscrowd": 0, "bbox": [271, 193, 58, 146], "area": 5302}, {"id": 4276802, "category_id": 44, "iscrowd": 0, "bbox": [280, 320, 18, 55], "area": 744}, {"id": 3556430, "category_id": 44, "iscrowd": 0, "bbox": [217, 309, 20, 49], "area": 707}, {"id": 2565930, "category_id": 44, "iscrowd": 0, "bbox": [216, 263, 13, 44], "area": 403}, {"id": 4279116, "category_id": 47, "iscrowd": 0, "bbox": [235, 288, 13, 24], "area": 239}, {"id": 5327027, "category_id": 47, "iscrowd": 0, "bbox": [239, 328, 25, 37], "area": 682}, {"id": 1381653, "category_id": 62, "iscrowd": 0, "bbox": [260, 226, 20, 80], "area": 829}, {"id": 8360846, "category_id": 67, "iscrowd": 0, "bbox": [160, 337, 207, 34], "area": 2724}, {"id": 5987145, "category_id": 72, "iscrowd": 0, "bbox": [0, 291, 13, 63], "area": 656}, {"id": 2698281, "category_id": 72, "iscrowd": 0, "bbox": [45, 234, 69, 141], "area": 7845}, {"id": 1973787, "category_id": 72, "iscrowd": 0, "bbox": [109, 224, 80, 148], "area": 9959}, {"id": 1513235, "category_id": 72, "iscrowd": 0, "bbox": [12, 233, 51, 81], "area": 2375}, {"id": 7699315, "category_id": 73, "iscrowd": 0, "bbox": [0, 342, 74, 29], "area": 1591}, {"id": 3290422, "category_id": 74, "iscrowd": 0, "bbox": [249, 357, 32, 14], "area": 337}, {"id": 1184534, "category_id": 112, "iscrowd": 0, "bbox": [119, 24, 104, 130], "area": 7617}, {"id": 5397592, "category_id": 189, "iscrowd": 0, "bbox": [0, 249, 350, 126], "area": 7025}, {"id": 8754062, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 98107}], "file_name": "000000275749.png", "image_id": 275749}, {"segments_info": [{"id": 6314338, "category_id": 7, "iscrowd": 0, "bbox": [198, 144, 286, 100], "area": 15559}, {"id": 6517866, "category_id": 9, "iscrowd": 0, "bbox": [562, 210, 78, 41], "area": 1888}, {"id": 5194862, "category_id": 9, "iscrowd": 0, "bbox": [151, 294, 231, 127], "area": 20915}, {"id": 5265251, "category_id": 9, "iscrowd": 0, "bbox": [335, 264, 143, 104], "area": 9431}, {"id": 3682364, "category_id": 9, "iscrowd": 0, "bbox": [514, 325, 126, 97], "area": 9277}, {"id": 10198434, "category_id": 9, "iscrowd": 0, "bbox": [492, 249, 148, 67], "area": 7948}, {"id": 4011574, "category_id": 9, "iscrowd": 0, "bbox": [464, 228, 138, 83], "area": 4812}, {"id": 10463410, "category_id": 9, "iscrowd": 0, "bbox": [0, 354, 179, 68], "area": 8729}, {"id": 5133922, "category_id": 125, "iscrowd": 0, "bbox": [85, 231, 104, 44], "area": 1752}, {"id": 6322835, "category_id": 144, "iscrowd": 0, "bbox": [0, 264, 88, 31], "area": 1602}, {"id": 3092793, "category_id": 147, "iscrowd": 0, "bbox": [0, 221, 245, 58], "area": 3665}, {"id": 6511197, "category_id": 148, "iscrowd": 0, "bbox": [291, 294, 349, 133], "area": 16966}, {"id": 10332853, "category_id": 175, "iscrowd": 0, "bbox": [0, 220, 393, 170], "area": 24642}, {"id": 4674139, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 255], "area": 92944}, {"id": 12560027, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 83], "area": 24167}, {"id": 4282975, "category_id": 193, "iscrowd": 0, "bbox": [0, 83, 640, 344], "area": 8786}, {"id": 6253949, "category_id": 194, "iscrowd": 0, "bbox": [0, 187, 203, 75], "area": 5625}, {"id": 6250083, "category_id": 198, "iscrowd": 0, "bbox": [0, 206, 19, 39], "area": 576}], "file_name": "000000275791.png", "image_id": 275791}, {"segments_info": [{"id": 9010095, "category_id": 1, "iscrowd": 0, "bbox": [66, 115, 70, 165], "area": 6850}, {"id": 9871252, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 130, 640], "area": 35914}, {"id": 12428726, "category_id": 1, "iscrowd": 0, "bbox": [123, 35, 161, 171], "area": 7521}, {"id": 5522772, "category_id": 1, "iscrowd": 0, "bbox": [156, 125, 260, 427], "area": 35199}, {"id": 13811680, "category_id": 1, "iscrowd": 0, "bbox": [114, 190, 105, 83], "area": 4274}, {"id": 9086642, "category_id": 1, "iscrowd": 0, "bbox": [377, 17, 39, 147], "area": 3705}, {"id": 3354675, "category_id": 1, "iscrowd": 0, "bbox": [24, 252, 180, 388], "area": 32271}, {"id": 2367002, "category_id": 1, "iscrowd": 0, "bbox": [256, 17, 121, 240], "area": 12810}, {"id": 6575430, "category_id": 1, "iscrowd": 0, "bbox": [143, 254, 116, 381], "area": 20921}, {"id": 9596078, "category_id": 1, "iscrowd": 0, "bbox": [148, 22, 121, 257], "area": 11120}, {"id": 5657693, "category_id": 88, "iscrowd": 0, "bbox": [48, 373, 95, 162], "area": 6442}, {"id": 10920606, "category_id": 88, "iscrowd": 0, "bbox": [298, 27, 49, 72], "area": 1842}, {"id": 1449494, "category_id": 184, "iscrowd": 0, "bbox": [96, 0, 320, 79], "area": 11640}, {"id": 8814454, "category_id": 191, "iscrowd": 0, "bbox": [251, 79, 75, 327], "area": 3102}, {"id": 2580290, "category_id": 193, "iscrowd": 0, "bbox": [21, 41, 395, 599], "area": 56773}], "file_name": "000000276018.png", "image_id": 276018}, {"segments_info": [{"id": 4147540, "category_id": 1, "iscrowd": 0, "bbox": [236, 205, 48, 116], "area": 2179}, {"id": 4802626, "category_id": 1, "iscrowd": 0, "bbox": [484, 203, 69, 81], "area": 1815}, {"id": 4477011, "category_id": 19, "iscrowd": 0, "bbox": [497, 262, 47, 94], "area": 2988}, {"id": 6386294, "category_id": 19, "iscrowd": 0, "bbox": [248, 265, 42, 103], "area": 2801}, {"id": 4613236, "category_id": 21, "iscrowd": 0, "bbox": [189, 300, 27, 56], "area": 781}, {"id": 2635063, "category_id": 21, "iscrowd": 0, "bbox": [285, 294, 28, 61], "area": 885}, {"id": 1843488, "category_id": 21, "iscrowd": 0, "bbox": [356, 270, 42, 87], "area": 2401}, {"id": 2374725, "category_id": 21, "iscrowd": 0, "bbox": [61, 274, 36, 73], "area": 1324}, {"id": 2568754, "category_id": 21, "iscrowd": 0, "bbox": [137, 272, 49, 88], "area": 2780}, {"id": 4410447, "category_id": 125, "iscrowd": 0, "bbox": [138, 336, 502, 144], "area": 55815}, {"id": 5204834, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 402], "area": 175538}, {"id": 16448248, "category_id": 187, "iscrowd": 0, "bbox": [105, 0, 256, 201], "area": 18845}, {"id": 3561808, "category_id": 193, "iscrowd": 0, "bbox": [0, 268, 640, 212], "area": 35945}], "file_name": "000000276024.png", "image_id": 276024}, {"segments_info": [{"id": 5724524, "category_id": 1, "iscrowd": 0, "bbox": [79, 24, 347, 346], "area": 54131}, {"id": 7561286, "category_id": 28, "iscrowd": 0, "bbox": [327, 43, 173, 318], "area": 15579}, {"id": 10784095, "category_id": 44, "iscrowd": 0, "bbox": [430, 321, 13, 36], "area": 332}, {"id": 5598827, "category_id": 47, "iscrowd": 0, "bbox": [310, 156, 56, 96], "area": 3115}, {"id": 4877226, "category_id": 57, "iscrowd": 0, "bbox": [63, 115, 31, 102], "area": 2160}, {"id": 4607317, "category_id": 62, "iscrowd": 0, "bbox": [144, 341, 33, 34], "area": 932}, {"id": 2565927, "category_id": 62, "iscrowd": 0, "bbox": [467, 324, 32, 28], "area": 592}, {"id": 8885148, "category_id": 67, "iscrowd": 0, "bbox": [375, 349, 124, 26], "area": 2446}, {"id": 7374982, "category_id": 128, "iscrowd": 0, "bbox": [0, 76, 156, 299], "area": 31267}, {"id": 4014154, "category_id": 177, "iscrowd": 0, "bbox": [148, 266, 229, 109], "area": 5480}, {"id": 4543306, "category_id": 184, "iscrowd": 0, "bbox": [121, 0, 379, 340], "area": 23294}, {"id": 3485481, "category_id": 185, "iscrowd": 0, "bbox": [121, 237, 35, 138], "area": 3901}, {"id": 16448249, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 405, 208], "area": 32825}, {"id": 5551272, "category_id": 196, "iscrowd": 0, "bbox": [45, 33, 95, 171], "area": 3250}], "file_name": "000000276055.png", "image_id": 276055}, {"segments_info": [{"id": 5383458, "category_id": 3, "iscrowd": 0, "bbox": [14, 197, 19, 21], "area": 230}, {"id": 6107953, "category_id": 3, "iscrowd": 0, "bbox": [120, 194, 26, 14], "area": 268}, {"id": 3741719, "category_id": 3, "iscrowd": 0, "bbox": [22, 202, 44, 32], "area": 942}, {"id": 2562074, "category_id": 3, "iscrowd": 0, "bbox": [185, 182, 53, 30], "area": 1221}, {"id": 4865336, "category_id": 4, "iscrowd": 0, "bbox": [168, 228, 279, 277], "area": 40422}, {"id": 8407882, "category_id": 130, "iscrowd": 0, "bbox": [33, 73, 382, 131], "area": 4101}, {"id": 5384487, "category_id": 184, "iscrowd": 0, "bbox": [0, 108, 500, 110], "area": 25807}, {"id": 13124645, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 183], "area": 70965}, {"id": 3883071, "category_id": 191, "iscrowd": 0, "bbox": [0, 194, 500, 446], "area": 175726}], "file_name": "000000276284.png", "image_id": 276284}, {"segments_info": [{"id": 1711677, "category_id": 1, "iscrowd": 0, "bbox": [81, 2, 309, 139], "area": 24666}, {"id": 11579066, "category_id": 47, "iscrowd": 0, "bbox": [397, 112, 30, 148], "area": 3938}, {"id": 7771053, "category_id": 47, "iscrowd": 0, "bbox": [0, 74, 72, 124], "area": 7365}, {"id": 4544114, "category_id": 47, "iscrowd": 0, "bbox": [322, 49, 58, 87], "area": 4143}, {"id": 5271962, "category_id": 48, "iscrowd": 0, "bbox": [244, 505, 91, 125], "area": 4757}, {"id": 2569044, "category_id": 49, "iscrowd": 0, "bbox": [137, 126, 88, 36], "area": 1512}, {"id": 4554463, "category_id": 59, "iscrowd": 0, "bbox": [72, 239, 245, 113], "area": 21510}, {"id": 1974836, "category_id": 62, "iscrowd": 0, "bbox": [355, 18, 72, 96], "area": 4287}, {"id": 1318217, "category_id": 62, "iscrowd": 0, "bbox": [1, 4, 88, 72], "area": 5874}, {"id": 6128055, "category_id": 67, "iscrowd": 0, "bbox": [6, 140, 421, 271], "area": 25118}, {"id": 1988518, "category_id": 122, "iscrowd": 0, "bbox": [51, 71, 41, 65], "area": 919}, {"id": 4478583, "category_id": 189, "iscrowd": 0, "bbox": [0, 87, 427, 553], "area": 35910}, {"id": 4275378, "category_id": 195, "iscrowd": 0, "bbox": [0, 223, 427, 417], "area": 21117}, {"id": 3305369, "category_id": 196, "iscrowd": 0, "bbox": [96, 139, 331, 442], "area": 53026}], "file_name": "000000276285.png", "image_id": 276285}, {"segments_info": [{"id": 4017252, "category_id": 1, "iscrowd": 0, "bbox": [351, 1, 289, 360], "area": 30577}, {"id": 8878729, "category_id": 1, "iscrowd": 0, "bbox": [365, 1, 275, 237], "area": 21669}, {"id": 2568807, "category_id": 49, "iscrowd": 0, "bbox": [328, 212, 48, 35], "area": 446}, {"id": 801386, "category_id": 55, "iscrowd": 0, "bbox": [181, 150, 98, 23], "area": 1361}, {"id": 1132656, "category_id": 55, "iscrowd": 0, "bbox": [244, 284, 103, 41], "area": 2572}, {"id": 2186636, "category_id": 55, "iscrowd": 0, "bbox": [334, 257, 20, 26], "area": 291}, {"id": 1066343, "category_id": 55, "iscrowd": 0, "bbox": [181, 117, 40, 13], "area": 203}, {"id": 7302769, "category_id": 61, "iscrowd": 0, "bbox": [136, 107, 175, 130], "area": 15402}, {"id": 7168092, "category_id": 61, "iscrowd": 0, "bbox": [1, 84, 147, 133], "area": 14761}, {"id": 5331559, "category_id": 61, "iscrowd": 0, "bbox": [129, 225, 245, 182], "area": 32515}, {"id": 9939931, "category_id": 67, "iscrowd": 0, "bbox": [4, 200, 631, 218], "area": 78066}, {"id": 4540227, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 240], "area": 65065}, {"id": 9940445, "category_id": 189, "iscrowd": 0, "bbox": [0, 232, 640, 195], "area": 7737}], "file_name": "000000276434.png", "image_id": 276434}, {"segments_info": [{"id": 1776667, "category_id": 1, "iscrowd": 0, "bbox": [466, 390, 20, 57], "area": 792}, {"id": 1184274, "category_id": 1, "iscrowd": 0, "bbox": [400, 402, 10, 57], "area": 408}, {"id": 5592922, "category_id": 1, "iscrowd": 0, "bbox": [621, 411, 19, 67], "area": 809}, {"id": 8617328, "category_id": 3, "iscrowd": 0, "bbox": [0, 450, 111, 30], "area": 2133}, {"id": 2433829, "category_id": 112, "iscrowd": 0, "bbox": [207, 388, 44, 92], "area": 3696}, {"id": 11446681, "category_id": 181, "iscrowd": 0, "bbox": [306, 434, 27, 23], "area": 344}, {"id": 14064475, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 55], "area": 15489}, {"id": 6053733, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 217862}], "file_name": "000000276707.png", "image_id": 276707}, {"segments_info": [{"id": 5200741, "category_id": 3, "iscrowd": 0, "bbox": [207, 281, 13, 12], "area": 124}, {"id": 3885185, "category_id": 3, "iscrowd": 0, "bbox": [243, 280, 26, 21], "area": 423}, {"id": 3950977, "category_id": 8, "iscrowd": 0, "bbox": [276, 282, 35, 34], "area": 935}, {"id": 3890544, "category_id": 128, "iscrowd": 0, "bbox": [0, 18, 640, 414], "area": 132020}, {"id": 2436144, "category_id": 149, "iscrowd": 0, "bbox": [52, 279, 588, 201], "area": 49792}, {"id": 1463131, "category_id": 184, "iscrowd": 0, "bbox": [433, 149, 207, 103], "area": 5376}, {"id": 13087128, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 219], "area": 87743}, {"id": 2636615, "category_id": 191, "iscrowd": 0, "bbox": [0, 302, 640, 178], "area": 27444}, {"id": 5935521, "category_id": 197, "iscrowd": 0, "bbox": [581, 140, 18, 30], "area": 331}], "file_name": "000000276720.png", "image_id": 276720}, {"segments_info": [{"id": 13623525, "category_id": 1, "iscrowd": 0, "bbox": [297, 368, 19, 48], "area": 486}, {"id": 14345448, "category_id": 1, "iscrowd": 0, "bbox": [152, 380, 28, 80], "area": 1132}, {"id": 8093833, "category_id": 1, "iscrowd": 0, "bbox": [220, 474, 46, 112], "area": 2238}, {"id": 4936541, "category_id": 1, "iscrowd": 0, "bbox": [283, 473, 56, 138], "area": 4356}, {"id": 10396330, "category_id": 1, "iscrowd": 0, "bbox": [281, 520, 25, 79], "area": 921}, {"id": 6001824, "category_id": 39, "iscrowd": 0, "bbox": [229, 440, 28, 51], "area": 185}, {"id": 5269364, "category_id": 40, "iscrowd": 0, "bbox": [178, 395, 10, 10], "area": 70}, {"id": 9350860, "category_id": 40, "iscrowd": 0, "bbox": [307, 382, 5, 6], "area": 20}, {"id": 6052200, "category_id": 92, "iscrowd": 0, "bbox": [322, 53, 113, 107], "area": 6692}, {"id": 8111567, "category_id": 145, "iscrowd": 0, "bbox": [0, 358, 512, 282], "area": 129537}, {"id": 1972761, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 512, 329], "area": 148405}, {"id": 5265250, "category_id": 197, "iscrowd": 0, "bbox": [0, 255, 512, 123], "area": 33293}], "file_name": "000000276804.png", "image_id": 276804}, {"segments_info": [{"id": 7440264, "category_id": 88, "iscrowd": 0, "bbox": [40, 199, 203, 325], "area": 37407}, {"id": 9284772, "category_id": 88, "iscrowd": 0, "bbox": [200, 227, 172, 379], "area": 44894}], "file_name": "000000276921.png", "image_id": 276921}, {"segments_info": [{"id": 986895, "category_id": 1, "iscrowd": 0, "bbox": [132, 267, 25, 66], "area": 746}, {"id": 6381151, "category_id": 1, "iscrowd": 0, "bbox": [44, 274, 57, 86], "area": 2209}, {"id": 1315862, "category_id": 1, "iscrowd": 0, "bbox": [152, 271, 22, 61], "area": 753}, {"id": 4142903, "category_id": 1, "iscrowd": 0, "bbox": [625, 274, 15, 52], "area": 486}, {"id": 3683641, "category_id": 1, "iscrowd": 0, "bbox": [176, 273, 21, 80], "area": 746}, {"id": 3881275, "category_id": 1, "iscrowd": 0, "bbox": [284, 272, 13, 51], "area": 372}, {"id": 1250839, "category_id": 1, "iscrowd": 0, "bbox": [83, 271, 8, 11], "area": 69}, {"id": 2369327, "category_id": 1, "iscrowd": 0, "bbox": [225, 272, 23, 86], "area": 1138}, {"id": 3223606, "category_id": 1, "iscrowd": 0, "bbox": [187, 258, 45, 128], "area": 3328}, {"id": 1776155, "category_id": 1, "iscrowd": 0, "bbox": [97, 259, 34, 96], "area": 1880}, {"id": 5656917, "category_id": 1, "iscrowd": 0, "bbox": [608, 279, 16, 48], "area": 471}, {"id": 1578515, "category_id": 1, "iscrowd": 0, "bbox": [89, 263, 11, 55], "area": 368}, {"id": 3879987, "category_id": 1, "iscrowd": 0, "bbox": [596, 276, 12, 49], "area": 334}, {"id": 1776157, "category_id": 1, "iscrowd": 1, "bbox": [114, 259, 294, 72], "area": 1953}, {"id": 5855315, "category_id": 2, "iscrowd": 0, "bbox": [16, 321, 112, 63], "area": 3701}, {"id": 6645091, "category_id": 3, "iscrowd": 0, "bbox": [392, 251, 161, 85], "area": 4482}, {"id": 8616825, "category_id": 3, "iscrowd": 0, "bbox": [552, 285, 35, 35], "area": 1000}, {"id": 4932922, "category_id": 7, "iscrowd": 0, "bbox": [48, 219, 399, 101], "area": 22626}, {"id": 855308, "category_id": 27, "iscrowd": 0, "bbox": [129, 277, 12, 29], "area": 257}, {"id": 3552567, "category_id": 27, "iscrowd": 0, "bbox": [48, 297, 16, 14], "area": 137}, {"id": 1973276, "category_id": 27, "iscrowd": 0, "bbox": [193, 280, 10, 28], "area": 93}, {"id": 9275784, "category_id": 149, "iscrowd": 0, "bbox": [0, 296, 640, 130], "area": 56604}, {"id": 12565942, "category_id": 151, "iscrowd": 0, "bbox": [0, 163, 609, 60], "area": 17096}, {"id": 5069664, "category_id": 181, "iscrowd": 0, "bbox": [250, 157, 92, 18], "area": 548}, {"id": 6520709, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 339], "area": 99830}, {"id": 6974571, "category_id": 197, "iscrowd": 0, "bbox": [0, 65, 640, 294], "area": 36167}], "file_name": "000000277005.png", "image_id": 277005}, {"segments_info": [{"id": 2104610, "category_id": 1, "iscrowd": 0, "bbox": [187, 80, 157, 275], "area": 20412}, {"id": 3091508, "category_id": 1, "iscrowd": 0, "bbox": [0, 9, 247, 351], "area": 51762}, {"id": 65537, "category_id": 1, "iscrowd": 0, "bbox": [446, 2, 194, 355], "area": 50869}, {"id": 2104875, "category_id": 1, "iscrowd": 0, "bbox": [347, 129, 119, 146], "area": 8773}, {"id": 723469, "category_id": 32, "iscrowd": 0, "bbox": [425, 208, 13, 29], "area": 253}, {"id": 3287597, "category_id": 32, "iscrowd": 0, "bbox": [283, 187, 20, 89], "area": 1017}, {"id": 3223868, "category_id": 47, "iscrowd": 0, "bbox": [386, 249, 29, 37], "area": 924}, {"id": 1118226, "category_id": 51, "iscrowd": 0, "bbox": [370, 259, 18, 22], "area": 342}, {"id": 3551801, "category_id": 51, "iscrowd": 0, "bbox": [193, 211, 50, 25], "area": 194}, {"id": 4144188, "category_id": 62, "iscrowd": 0, "bbox": [177, 297, 17, 42], "area": 496}, {"id": 1512727, "category_id": 62, "iscrowd": 0, "bbox": [143, 326, 105, 34], "area": 1695}, {"id": 5529469, "category_id": 67, "iscrowd": 0, "bbox": [223, 251, 227, 84], "area": 9291}, {"id": 1513507, "category_id": 177, "iscrowd": 0, "bbox": [259, 0, 326, 187], "area": 30709}, {"id": 12634580, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 134, 151], "area": 6299}, {"id": 12173254, "category_id": 181, "iscrowd": 0, "bbox": [116, 0, 277, 360], "area": 36745}, {"id": 854797, "category_id": 189, "iscrowd": 0, "bbox": [359, 323, 93, 37], "area": 2770}, {"id": 7764875, "category_id": 196, "iscrowd": 0, "bbox": [191, 192, 47, 35], "area": 731}], "file_name": "000000277020.png", "image_id": 277020}, {"segments_info": [{"id": 6580856, "category_id": 16, "iscrowd": 0, "bbox": [65, 194, 310, 168], "area": 20920}, {"id": 4739177, "category_id": 16, "iscrowd": 0, "bbox": [500, 99, 86, 50], "area": 1565}, {"id": 5265250, "category_id": 16, "iscrowd": 0, "bbox": [255, 173, 183, 154], "area": 10583}, {"id": 5206449, "category_id": 44, "iscrowd": 0, "bbox": [55, 3, 131, 303], "area": 28737}, {"id": 5922919, "category_id": 49, "iscrowd": 0, "bbox": [25, 339, 482, 82], "area": 10960}, {"id": 7437452, "category_id": 62, "iscrowd": 0, "bbox": [427, 65, 144, 112], "area": 6795}, {"id": 9015962, "category_id": 62, "iscrowd": 0, "bbox": [615, 71, 25, 47], "area": 877}, {"id": 9868471, "category_id": 67, "iscrowd": 0, "bbox": [0, 284, 640, 138], "area": 49132}, {"id": 6382257, "category_id": 67, "iscrowd": 0, "bbox": [472, 133, 168, 41], "area": 2901}, {"id": 7169966, "category_id": 189, "iscrowd": 0, "bbox": [446, 422, 194, 5], "area": 836}, {"id": 9340802, "category_id": 191, "iscrowd": 0, "bbox": [184, 12, 280, 298], "area": 49294}, {"id": 5533270, "category_id": 193, "iscrowd": 0, "bbox": [185, 0, 83, 67], "area": 3341}, {"id": 5862272, "category_id": 199, "iscrowd": 0, "bbox": [444, 0, 196, 125], "area": 16915}], "file_name": "000000277051.png", "image_id": 277051}, {"segments_info": [{"id": 7243918, "category_id": 62, "iscrowd": 0, "bbox": [304, 245, 72, 97], "area": 4316}, {"id": 5202796, "category_id": 62, "iscrowd": 0, "bbox": [28, 240, 111, 150], "area": 8094}, {"id": 7697534, "category_id": 63, "iscrowd": 0, "bbox": [92, 251, 154, 64], "area": 6425}, {"id": 10987428, "category_id": 63, "iscrowd": 0, "bbox": [429, 246, 168, 165], "area": 20479}, {"id": 4473962, "category_id": 64, "iscrowd": 0, "bbox": [161, 253, 30, 35], "area": 335}, {"id": 6710368, "category_id": 67, "iscrowd": 0, "bbox": [180, 330, 204, 85], "area": 10577}, {"id": 9142394, "category_id": 86, "iscrowd": 0, "bbox": [245, 306, 63, 63], "area": 2225}, {"id": 6381150, "category_id": 86, "iscrowd": 0, "bbox": [162, 267, 29, 21], "area": 508}, {"id": 3157556, "category_id": 86, "iscrowd": 0, "bbox": [457, 240, 11, 22], "area": 145}, {"id": 3753299, "category_id": 118, "iscrowd": 0, "bbox": [0, 285, 600, 131], "area": 10098}, {"id": 6578068, "category_id": 119, "iscrowd": 0, "bbox": [245, 279, 72, 42], "area": 1952}, {"id": 7434086, "category_id": 130, "iscrowd": 0, "bbox": [416, 205, 56, 51], "area": 1441}, {"id": 10921371, "category_id": 181, "iscrowd": 0, "bbox": [11, 128, 400, 132], "area": 14539}, {"id": 13351855, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 499, 133], "area": 43013}, {"id": 2832197, "category_id": 189, "iscrowd": 0, "bbox": [376, 255, 91, 56], "area": 2646}, {"id": 12565944, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 600, 291], "area": 84975}, {"id": 5724261, "category_id": 200, "iscrowd": 0, "bbox": [0, 300, 517, 116], "area": 21963}], "file_name": "000000277197.png", "image_id": 277197}, {"segments_info": [{"id": 7963790, "category_id": 15, "iscrowd": 0, "bbox": [11, 131, 587, 266], "area": 111659}, {"id": 5462883, "category_id": 17, "iscrowd": 0, "bbox": [256, 144, 209, 245], "area": 12381}, {"id": 8158337, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 99777}, {"id": 3423302, "category_id": 194, "iscrowd": 0, "bbox": [52, 0, 561, 147], "area": 72157}], "file_name": "000000277584.png", "image_id": 277584}, {"segments_info": [{"id": 11314588, "category_id": 46, "iscrowd": 0, "bbox": [140, 280, 77, 90], "area": 3508}, {"id": 10985878, "category_id": 46, "iscrowd": 0, "bbox": [213, 282, 19, 61], "area": 764}, {"id": 9410971, "category_id": 46, "iscrowd": 0, "bbox": [559, 276, 43, 60], "area": 1617}, {"id": 10792362, "category_id": 46, "iscrowd": 0, "bbox": [318, 283, 21, 34], "area": 600}, {"id": 9928559, "category_id": 46, "iscrowd": 0, "bbox": [84, 338, 123, 86], "area": 7876}, {"id": 10720134, "category_id": 46, "iscrowd": 0, "bbox": [10, 278, 89, 146], "area": 9726}, {"id": 10720648, "category_id": 46, "iscrowd": 0, "bbox": [5, 301, 135, 102], "area": 1407}, {"id": 7971241, "category_id": 46, "iscrowd": 0, "bbox": [601, 281, 35, 28], "area": 658}, {"id": 10920868, "category_id": 46, "iscrowd": 0, "bbox": [337, 282, 22, 51], "area": 822}, {"id": 10719358, "category_id": 46, "iscrowd": 0, "bbox": [209, 297, 69, 63], "area": 1429}, {"id": 10784122, "category_id": 46, "iscrowd": 0, "bbox": [92, 301, 100, 61], "area": 2472}, {"id": 7759450, "category_id": 46, "iscrowd": 0, "bbox": [601, 330, 39, 39], "area": 671}, {"id": 11186353, "category_id": 47, "iscrowd": 0, "bbox": [276, 312, 41, 67], "area": 1297}, {"id": 9994610, "category_id": 47, "iscrowd": 0, "bbox": [205, 339, 81, 71], "area": 3779}, {"id": 8351331, "category_id": 47, "iscrowd": 0, "bbox": [602, 300, 38, 46], "area": 1457}, {"id": 10857931, "category_id": 61, "iscrowd": 0, "bbox": [286, 209, 354, 210], "area": 48003}, {"id": 10847604, "category_id": 67, "iscrowd": 0, "bbox": [0, 393, 252, 25], "area": 1495}, {"id": 7250850, "category_id": 184, "iscrowd": 0, "bbox": [79, 88, 561, 248], "area": 41679}, {"id": 15850690, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 310], "area": 133223}, {"id": 11045756, "category_id": 189, "iscrowd": 0, "bbox": [0, 390, 258, 34], "area": 916}, {"id": 9996675, "category_id": 195, "iscrowd": 0, "bbox": [249, 354, 391, 70], "area": 1859}], "file_name": "000000277689.png", "image_id": 277689}, {"segments_info": [{"id": 4871517, "category_id": 128, "iscrowd": 0, "bbox": [0, 17, 640, 410], "area": 200957}, {"id": 5334126, "category_id": 184, "iscrowd": 0, "bbox": [458, 89, 182, 34], "area": 2592}, {"id": 13683138, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 142], "area": 56803}], "file_name": "000000278006.png", "image_id": 278006}, {"segments_info": [{"id": 8690337, "category_id": 20, "iscrowd": 0, "bbox": [86, 43, 445, 569], "area": 142080}, {"id": 6714485, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 596, 158], "area": 43483}, {"id": 5805192, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 596, 640], "area": 195271}], "file_name": "000000278353.png", "image_id": 278353}, {"segments_info": [{"id": 2501166, "category_id": 17, "iscrowd": 0, "bbox": [125, 240, 101, 96], "area": 8198}, {"id": 5131344, "category_id": 44, "iscrowd": 0, "bbox": [62, 264, 39, 80], "area": 2104}, {"id": 7047586, "category_id": 44, "iscrowd": 0, "bbox": [447, 255, 26, 47], "area": 829}, {"id": 2831698, "category_id": 47, "iscrowd": 0, "bbox": [40, 341, 52, 78], "area": 2646}, {"id": 2436141, "category_id": 64, "iscrowd": 0, "bbox": [1, 214, 65, 188], "area": 5545}, {"id": 7633787, "category_id": 73, "iscrowd": 0, "bbox": [216, 223, 151, 155], "area": 21153}, {"id": 4550030, "category_id": 77, "iscrowd": 0, "bbox": [439, 311, 36, 27], "area": 548}, {"id": 3487034, "category_id": 84, "iscrowd": 0, "bbox": [559, 377, 71, 17], "area": 1007}, {"id": 7308939, "category_id": 84, "iscrowd": 0, "bbox": [560, 341, 66, 8], "area": 73}, {"id": 11186635, "category_id": 84, "iscrowd": 0, "bbox": [364, 328, 154, 81], "area": 8903}, {"id": 7038376, "category_id": 84, "iscrowd": 0, "bbox": [556, 331, 66, 13], "area": 333}, {"id": 7504783, "category_id": 84, "iscrowd": 0, "bbox": [559, 343, 68, 9], "area": 231}, {"id": 6058906, "category_id": 84, "iscrowd": 0, "bbox": [297, 198, 59, 26], "area": 1432}, {"id": 9672355, "category_id": 84, "iscrowd": 0, "bbox": [532, 288, 71, 32], "area": 1129}, {"id": 8291207, "category_id": 84, "iscrowd": 0, "bbox": [547, 386, 83, 22], "area": 1048}, {"id": 2242129, "category_id": 177, "iscrowd": 0, "bbox": [175, 177, 465, 58], "area": 14425}, {"id": 4021883, "category_id": 189, "iscrowd": 0, "bbox": [0, 269, 640, 211], "area": 67965}, {"id": 263173, "category_id": 190, "iscrowd": 0, "bbox": [0, 434, 18, 46], "area": 413}, {"id": 6711933, "category_id": 195, "iscrowd": 0, "bbox": [93, 286, 547, 132], "area": 11979}, {"id": 10264223, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 288], "area": 122542}], "file_name": "000000278463.png", "image_id": 278463}, {"segments_info": [{"id": 3881794, "category_id": 1, "iscrowd": 0, "bbox": [94, 115, 102, 172], "area": 7347}, {"id": 7104622, "category_id": 1, "iscrowd": 0, "bbox": [361, 118, 150, 218], "area": 11625}, {"id": 8085327, "category_id": 3, "iscrowd": 0, "bbox": [454, 147, 109, 119], "area": 8714}, {"id": 4341571, "category_id": 3, "iscrowd": 0, "bbox": [9, 135, 306, 137], "area": 25145}, {"id": 8223875, "category_id": 41, "iscrowd": 0, "bbox": [102, 277, 87, 25], "area": 490}, {"id": 8224124, "category_id": 41, "iscrowd": 0, "bbox": [340, 310, 100, 28], "area": 709}, {"id": 9408144, "category_id": 149, "iscrowd": 0, "bbox": [0, 227, 564, 193], "area": 80095}, {"id": 6645891, "category_id": 171, "iscrowd": 0, "bbox": [91, 0, 472, 149], "area": 14028}, {"id": 5066078, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 93, 19], "area": 1658}, {"id": 10132124, "category_id": 191, "iscrowd": 0, "bbox": [17, 212, 532, 268], "area": 37485}, {"id": 10789802, "category_id": 197, "iscrowd": 0, "bbox": [0, 14, 562, 207], "area": 73672}, {"id": 12434876, "category_id": 199, "iscrowd": 0, "bbox": [611, 0, 29, 480], "area": 8100}], "file_name": "000000278705.png", "image_id": 278705}, {"segments_info": [{"id": 7697781, "category_id": 1, "iscrowd": 0, "bbox": [468, 138, 32, 31], "area": 718}, {"id": 7368816, "category_id": 1, "iscrowd": 0, "bbox": [222, 110, 8, 24], "area": 129}, {"id": 10066329, "category_id": 1, "iscrowd": 0, "bbox": [243, 108, 12, 33], "area": 228}, {"id": 11711154, "category_id": 1, "iscrowd": 0, "bbox": [327, 122, 62, 184], "area": 6183}, {"id": 11184810, "category_id": 1, "iscrowd": 0, "bbox": [228, 109, 5, 22], "area": 70}, {"id": 8224125, "category_id": 1, "iscrowd": 0, "bbox": [257, 108, 7, 17], "area": 81}, {"id": 7105644, "category_id": 1, "iscrowd": 0, "bbox": [232, 108, 10, 35], "area": 196}, {"id": 7105635, "category_id": 1, "iscrowd": 0, "bbox": [114, 98, 32, 92], "area": 1687}, {"id": 4408131, "category_id": 1, "iscrowd": 0, "bbox": [238, 115, 5, 15], "area": 24}, {"id": 5789784, "category_id": 1, "iscrowd": 0, "bbox": [459, 95, 21, 74], "area": 741}, {"id": 5658198, "category_id": 1, "iscrowd": 0, "bbox": [42, 98, 44, 118], "area": 3756}, {"id": 7303023, "category_id": 1, "iscrowd": 0, "bbox": [205, 105, 17, 41], "area": 402}, {"id": 7171437, "category_id": 3, "iscrowd": 0, "bbox": [179, 115, 28, 20], "area": 428}, {"id": 9474192, "category_id": 3, "iscrowd": 0, "bbox": [113, 107, 13, 11], "area": 84}, {"id": 9145227, "category_id": 3, "iscrowd": 0, "bbox": [79, 108, 37, 19], "area": 449}, {"id": 9671571, "category_id": 31, "iscrowd": 0, "bbox": [143, 129, 8, 11], "area": 58}, {"id": 5789792, "category_id": 31, "iscrowd": 0, "bbox": [238, 117, 3, 5], "area": 12}, {"id": 9934743, "category_id": 92, "iscrowd": 0, "bbox": [273, 16, 200, 126], "area": 18838}, {"id": 8092539, "category_id": 149, "iscrowd": 0, "bbox": [0, 113, 190, 83], "area": 4732}, {"id": 3223857, "category_id": 184, "iscrowd": 0, "bbox": [0, 42, 264, 88], "area": 11541}, {"id": 15395562, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 266, 68], "area": 8284}, {"id": 9474197, "category_id": 191, "iscrowd": 0, "bbox": [0, 120, 500, 213], "area": 73752}, {"id": 7303027, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 207], "area": 31066}], "file_name": "000000278749.png", "image_id": 278749}, {"segments_info": [{"id": 1447446, "category_id": 1, "iscrowd": 0, "bbox": [83, 382, 107, 258], "area": 17107}, {"id": 1184274, "category_id": 1, "iscrowd": 0, "bbox": [358, 393, 81, 212], "area": 8187}, {"id": 1118481, "category_id": 1, "iscrowd": 0, "bbox": [169, 361, 69, 272], "area": 12117}, {"id": 921102, "category_id": 1, "iscrowd": 0, "bbox": [298, 429, 63, 188], "area": 6982}, {"id": 8882055, "category_id": 3, "iscrowd": 0, "bbox": [404, 343, 34, 35], "area": 868}, {"id": 9539985, "category_id": 3, "iscrowd": 0, "bbox": [437, 353, 42, 41], "area": 1507}, {"id": 4013373, "category_id": 6, "iscrowd": 0, "bbox": [70, 44, 318, 258], "area": 51261}, {"id": 9605778, "category_id": 28, "iscrowd": 0, "bbox": [102, 274, 173, 53], "area": 5896}, {"id": 3750201, "category_id": 28, "iscrowd": 0, "bbox": [254, 332, 160, 104], "area": 12143}, {"id": 6579300, "category_id": 28, "iscrowd": 0, "bbox": [282, 291, 149, 51], "area": 4217}, {"id": 10395294, "category_id": 149, "iscrowd": 0, "bbox": [405, 360, 75, 96], "area": 3648}, {"id": 6118749, "category_id": 184, "iscrowd": 0, "bbox": [367, 139, 113, 216], "area": 12510}, {"id": 16579836, "category_id": 187, "iscrowd": 0, "bbox": [274, 0, 206, 238], "area": 31905}, {"id": 5329233, "category_id": 191, "iscrowd": 0, "bbox": [0, 447, 480, 193], "area": 33885}, {"id": 6776679, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 401, 222], "area": 27430}], "file_name": "000000278848.png", "image_id": 278848}, {"segments_info": [{"id": 4008515, "category_id": 1, "iscrowd": 0, "bbox": [82, 102, 195, 192], "area": 20824}, {"id": 8685460, "category_id": 42, "iscrowd": 0, "bbox": [150, 260, 144, 57], "area": 4411}, {"id": 10917239, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 247157}], "file_name": "000000278973.png", "image_id": 278973}, {"segments_info": [{"id": 5923176, "category_id": 15, "iscrowd": 0, "bbox": [194, 147, 274, 236], "area": 33521}, {"id": 8950165, "category_id": 17, "iscrowd": 0, "bbox": [104, 323, 103, 145], "area": 6839}, {"id": 3239013, "category_id": 64, "iscrowd": 0, "bbox": [406, 27, 94, 135], "area": 4500}, {"id": 2775366, "category_id": 64, "iscrowd": 0, "bbox": [12, 4, 145, 173], "area": 12122}, {"id": 2109763, "category_id": 64, "iscrowd": 0, "bbox": [333, 71, 65, 67], "area": 2428}, {"id": 2839631, "category_id": 64, "iscrowd": 0, "bbox": [283, 311, 237, 169], "area": 15335}, {"id": 4028256, "category_id": 64, "iscrowd": 0, "bbox": [146, 24, 132, 173], "area": 12169}, {"id": 2966596, "category_id": 64, "iscrowd": 0, "bbox": [502, 144, 138, 307], "area": 31855}, {"id": 2588540, "category_id": 64, "iscrowd": 0, "bbox": [2, 91, 163, 320], "area": 26038}, {"id": 3883604, "category_id": 100, "iscrowd": 0, "bbox": [341, 109, 75, 59], "area": 2018}, {"id": 6122890, "category_id": 107, "iscrowd": 0, "bbox": [309, 139, 144, 47], "area": 1633}, {"id": 4349318, "category_id": 118, "iscrowd": 0, "bbox": [468, 414, 145, 66], "area": 3813}, {"id": 1645859, "category_id": 125, "iscrowd": 0, "bbox": [230, 278, 118, 78], "area": 3598}, {"id": 2305854, "category_id": 175, "iscrowd": 0, "bbox": [159, 191, 43, 98], "area": 1923}, {"id": 8484713, "category_id": 177, "iscrowd": 0, "bbox": [152, 0, 312, 166], "area": 9762}, {"id": 9674120, "category_id": 181, "iscrowd": 0, "bbox": [176, 0, 127, 154], "area": 9749}, {"id": 2439734, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 203, 434], "area": 4479}, {"id": 8890784, "category_id": 185, "iscrowd": 0, "bbox": [178, 199, 31, 55], "area": 866}, {"id": 4217724, "category_id": 190, "iscrowd": 0, "bbox": [31, 284, 492, 196], "area": 30693}, {"id": 3490875, "category_id": 191, "iscrowd": 0, "bbox": [0, 198, 40, 52], "area": 740}, {"id": 2309422, "category_id": 193, "iscrowd": 0, "bbox": [0, 217, 162, 56], "area": 661}, {"id": 1648430, "category_id": 194, "iscrowd": 0, "bbox": [382, 321, 123, 97], "area": 4240}, {"id": 1777960, "category_id": 198, "iscrowd": 0, "bbox": [431, 102, 118, 271], "area": 14492}, {"id": 10069419, "category_id": 199, "iscrowd": 0, "bbox": [445, 444, 79, 36], "area": 962}], "file_name": "000000279145.png", "image_id": 279145}, {"segments_info": [{"id": 6252422, "category_id": 1, "iscrowd": 0, "bbox": [236, 1, 78, 245], "area": 10470}, {"id": 6843252, "category_id": 1, "iscrowd": 0, "bbox": [288, 0, 61, 183], "area": 5806}, {"id": 4867914, "category_id": 1, "iscrowd": 0, "bbox": [157, 1, 133, 289], "area": 20635}, {"id": 4214113, "category_id": 1, "iscrowd": 0, "bbox": [90, 0, 46, 81], "area": 1050}, {"id": 6513529, "category_id": 1, "iscrowd": 0, "bbox": [565, 17, 75, 406], "area": 13373}, {"id": 3949917, "category_id": 1, "iscrowd": 0, "bbox": [345, 0, 136, 321], "area": 24100}, {"id": 7103852, "category_id": 1, "iscrowd": 0, "bbox": [141, 13, 44, 191], "area": 4153}, {"id": 4276285, "category_id": 2, "iscrowd": 0, "bbox": [1, 258, 278, 165], "area": 13674}, {"id": 4803398, "category_id": 2, "iscrowd": 0, "bbox": [464, 58, 61, 93], "area": 3020}, {"id": 4802882, "category_id": 2, "iscrowd": 0, "bbox": [0, 90, 17, 81], "area": 714}, {"id": 6645856, "category_id": 2, "iscrowd": 0, "bbox": [0, 11, 107, 89], "area": 4441}, {"id": 3157291, "category_id": 2, "iscrowd": 0, "bbox": [2, 81, 45, 80], "area": 2167}, {"id": 4409160, "category_id": 2, "iscrowd": 0, "bbox": [119, 40, 29, 54], "area": 642}, {"id": 4802369, "category_id": 2, "iscrowd": 0, "bbox": [109, 36, 39, 118], "area": 1407}, {"id": 3948351, "category_id": 2, "iscrowd": 0, "bbox": [505, 25, 135, 125], "area": 2498}, {"id": 5466982, "category_id": 2, "iscrowd": 0, "bbox": [483, 24, 121, 121], "area": 6050}, {"id": 4736066, "category_id": 2, "iscrowd": 0, "bbox": [335, 49, 30, 109], "area": 1553}, {"id": 5131326, "category_id": 2, "iscrowd": 1, "bbox": [15, 5, 113, 153], "area": 7177}, {"id": 8554894, "category_id": 18, "iscrowd": 0, "bbox": [506, 158, 73, 81], "area": 3286}, {"id": 5989492, "category_id": 31, "iscrowd": 0, "bbox": [283, 57, 26, 69], "area": 535}, {"id": 2241357, "category_id": 31, "iscrowd": 0, "bbox": [456, 65, 24, 58], "area": 1003}, {"id": 3486338, "category_id": 41, "iscrowd": 0, "bbox": [262, 174, 114, 117], "area": 3614}, {"id": 10263262, "category_id": 47, "iscrowd": 0, "bbox": [532, 0, 56, 65], "area": 3089}, {"id": 5393734, "category_id": 149, "iscrowd": 0, "bbox": [0, 89, 616, 340], "area": 120571}, {"id": 3092010, "category_id": 191, "iscrowd": 0, "bbox": [30, 93, 31, 31], "area": 367}], "file_name": "000000279278.png", "image_id": 279278}, {"segments_info": [{"id": 2760996, "category_id": 1, "iscrowd": 0, "bbox": [112, 0, 144, 125], "area": 7031}, {"id": 4084838, "category_id": 59, "iscrowd": 0, "bbox": [83, 89, 35, 9], "area": 181}, {"id": 5930910, "category_id": 59, "iscrowd": 0, "bbox": [2, 122, 137, 36], "area": 2497}, {"id": 4085897, "category_id": 59, "iscrowd": 0, "bbox": [0, 96, 56, 10], "area": 337}, {"id": 5998765, "category_id": 59, "iscrowd": 0, "bbox": [345, 202, 118, 78], "area": 5404}, {"id": 4744068, "category_id": 59, "iscrowd": 0, "bbox": [0, 107, 63, 22], "area": 907}, {"id": 6521507, "category_id": 59, "iscrowd": 0, "bbox": [403, 161, 75, 63], "area": 2933}, {"id": 4942987, "category_id": 59, "iscrowd": 0, "bbox": [140, 118, 156, 30], "area": 2520}, {"id": 5867178, "category_id": 59, "iscrowd": 0, "bbox": [177, 188, 214, 52], "area": 6599}, {"id": 5400955, "category_id": 59, "iscrowd": 0, "bbox": [252, 128, 152, 50], "area": 6202}, {"id": 5603501, "category_id": 59, "iscrowd": 0, "bbox": [99, 147, 137, 49], "area": 3334}, {"id": 10653304, "category_id": 100, "iscrowd": 0, "bbox": [68, 85, 70, 43], "area": 1358}, {"id": 5465699, "category_id": 107, "iscrowd": 0, "bbox": [0, 117, 478, 523], "area": 110117}, {"id": 14737372, "category_id": 130, "iscrowd": 0, "bbox": [0, 39, 478, 47], "area": 7007}, {"id": 2892575, "category_id": 188, "iscrowd": 0, "bbox": [322, 72, 156, 103], "area": 10787}, {"id": 4148560, "category_id": 189, "iscrowd": 0, "bbox": [353, 173, 57, 48], "area": 945}, {"id": 462869, "category_id": 190, "iscrowd": 0, "bbox": [0, 355, 263, 285], "area": 39013}, {"id": 4487079, "category_id": 196, "iscrowd": 0, "bbox": [18, 105, 460, 171], "area": 705}, {"id": 1054762, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 464, 640], "area": 57797}], "file_name": "000000279541.png", "image_id": 279541}, {"segments_info": [{"id": 3424335, "category_id": 3, "iscrowd": 0, "bbox": [0, 429, 41, 185], "area": 5251}, {"id": 8159879, "category_id": 3, "iscrowd": 0, "bbox": [222, 434, 203, 172], "area": 25394}, {"id": 4022115, "category_id": 14, "iscrowd": 0, "bbox": [33, 426, 229, 202], "area": 37113}, {"id": 10394264, "category_id": 37, "iscrowd": 0, "bbox": [356, 344, 20, 22], "area": 330}, {"id": 9347246, "category_id": 39, "iscrowd": 0, "bbox": [143, 35, 90, 403], "area": 12784}, {"id": 3159350, "category_id": 149, "iscrowd": 0, "bbox": [197, 562, 228, 78], "area": 10523}, {"id": 16577765, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 425, 337], "area": 91425}, {"id": 10003361, "category_id": 191, "iscrowd": 0, "bbox": [403, 624, 22, 16], "area": 181}, {"id": 4738404, "category_id": 197, "iscrowd": 0, "bbox": [0, 158, 425, 336], "area": 83471}], "file_name": "000000279714.png", "image_id": 279714}, {"segments_info": [{"id": 2177165, "category_id": 1, "iscrowd": 0, "bbox": [411, 102, 89, 142], "area": 7346}, {"id": 2703246, "category_id": 1, "iscrowd": 0, "bbox": [0, 1, 97, 141], "area": 8083}, {"id": 3232421, "category_id": 1, "iscrowd": 0, "bbox": [196, 207, 176, 121], "area": 10202}, {"id": 3295633, "category_id": 47, "iscrowd": 0, "bbox": [46, 167, 131, 166], "area": 18353}, {"id": 4082844, "category_id": 47, "iscrowd": 0, "bbox": [391, 31, 82, 96], "area": 5584}, {"id": 1652607, "category_id": 54, "iscrowd": 0, "bbox": [197, 129, 218, 152], "area": 20691}, {"id": 1316943, "category_id": 189, "iscrowd": 0, "bbox": [36, 104, 464, 229], "area": 9441}], "file_name": "000000279730.png", "image_id": 279730}, {"segments_info": [{"id": 4048869, "category_id": 52, "iscrowd": 0, "bbox": [127, 75, 309, 93], "area": 14557}, {"id": 2782138, "category_id": 67, "iscrowd": 0, "bbox": [449, 89, 191, 318], "area": 23954}, {"id": 7766455, "category_id": 100, "iscrowd": 0, "bbox": [138, 0, 42, 52], "area": 1521}, {"id": 1184788, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 131, 108], "area": 10328}, {"id": 1662892, "category_id": 189, "iscrowd": 0, "bbox": [0, 135, 640, 137], "area": 1844}, {"id": 14345191, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 243053}, {"id": 4086384, "category_id": 199, "iscrowd": 0, "bbox": [118, 0, 28, 71], "area": 1188}], "file_name": "000000279769.png", "image_id": 279769}, {"segments_info": [{"id": 8556443, "category_id": 1, "iscrowd": 0, "bbox": [82, 80, 31, 76], "area": 1369}, {"id": 6914927, "category_id": 1, "iscrowd": 0, "bbox": [191, 65, 10, 33], "area": 194}, {"id": 4936025, "category_id": 1, "iscrowd": 0, "bbox": [265, 81, 42, 44], "area": 863}, {"id": 9085610, "category_id": 1, "iscrowd": 0, "bbox": [258, 86, 32, 37], "area": 316}, {"id": 12570327, "category_id": 1, "iscrowd": 0, "bbox": [193, 64, 39, 93], "area": 2250}, {"id": 6908529, "category_id": 1, "iscrowd": 0, "bbox": [45, 154, 211, 338], "area": 25359}, {"id": 8614775, "category_id": 39, "iscrowd": 0, "bbox": [170, 266, 134, 54], "area": 1596}, {"id": 8301494, "category_id": 62, "iscrowd": 0, "bbox": [237, 82, 26, 39], "area": 708}, {"id": 6589343, "category_id": 62, "iscrowd": 0, "bbox": [289, 106, 15, 15], "area": 91}, {"id": 5079207, "category_id": 154, "iscrowd": 0, "bbox": [0, 125, 415, 375], "area": 123979}, {"id": 3169623, "category_id": 184, "iscrowd": 0, "bbox": [26, 0, 389, 117], "area": 32369}, {"id": 7508889, "category_id": 185, "iscrowd": 0, "bbox": [40, 56, 375, 89], "area": 4057}, {"id": 5807255, "category_id": 193, "iscrowd": 0, "bbox": [0, 73, 415, 67], "area": 10419}, {"id": 7974336, "category_id": 194, "iscrowd": 0, "bbox": [165, 101, 188, 40], "area": 934}, {"id": 9745338, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 41, 84], "area": 2357}], "file_name": "000000279774.png", "image_id": 279774}, {"segments_info": [{"id": 5860490, "category_id": 4, "iscrowd": 0, "bbox": [423, 122, 120, 118], "area": 8149}, {"id": 8819874, "category_id": 4, "iscrowd": 0, "bbox": [239, 159, 32, 59], "area": 703}, {"id": 3297662, "category_id": 4, "iscrowd": 0, "bbox": [114, 94, 457, 328], "area": 56883}, {"id": 5991828, "category_id": 4, "iscrowd": 0, "bbox": [370, 144, 76, 62], "area": 3358}, {"id": 5202866, "category_id": 4, "iscrowd": 0, "bbox": [543, 156, 97, 81], "area": 6277}, {"id": 2566989, "category_id": 4, "iscrowd": 0, "bbox": [1, 158, 126, 94], "area": 7365}, {"id": 5267847, "category_id": 4, "iscrowd": 0, "bbox": [151, 150, 79, 77], "area": 3892}, {"id": 3357779, "category_id": 4, "iscrowd": 0, "bbox": [217, 161, 32, 41], "area": 941}, {"id": 5265252, "category_id": 4, "iscrowd": 0, "bbox": [279, 149, 36, 51], "area": 1141}, {"id": 2702689, "category_id": 4, "iscrowd": 0, "bbox": [88, 156, 81, 80], "area": 3345}, {"id": 13945773, "category_id": 130, "iscrowd": 0, "bbox": [596, 343, 26, 15], "area": 295}, {"id": 9019325, "category_id": 144, "iscrowd": 0, "bbox": [394, 204, 246, 158], "area": 23624}, {"id": 5860482, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 112], "area": 55662}, {"id": 5069421, "category_id": 190, "iscrowd": 0, "bbox": [0, 163, 640, 264], "area": 62478}, {"id": 13162478, "category_id": 195, "iscrowd": 0, "bbox": [172, 215, 16, 23], "area": 286}, {"id": 6253990, "category_id": 199, "iscrowd": 0, "bbox": [0, 68, 640, 134], "area": 35680}], "file_name": "000000279887.png", "image_id": 279887}, {"segments_info": [{"id": 5988263, "category_id": 1, "iscrowd": 0, "bbox": [122, 216, 42, 145], "area": 3830}, {"id": 7896193, "category_id": 1, "iscrowd": 0, "bbox": [400, 248, 6, 7], "area": 28}, {"id": 6451356, "category_id": 1, "iscrowd": 0, "bbox": [438, 325, 16, 18], "area": 123}, {"id": 4345708, "category_id": 1, "iscrowd": 0, "bbox": [159, 218, 42, 130], "area": 2495}, {"id": 1906572, "category_id": 1, "iscrowd": 0, "bbox": [190, 239, 68, 140], "area": 5294}, {"id": 2174006, "category_id": 1, "iscrowd": 0, "bbox": [56, 218, 34, 115], "area": 2251}, {"id": 11977428, "category_id": 1, "iscrowd": 0, "bbox": [314, 257, 8, 10], "area": 50}, {"id": 8820924, "category_id": 1, "iscrowd": 0, "bbox": [589, 291, 15, 22], "area": 136}, {"id": 4675952, "category_id": 1, "iscrowd": 0, "bbox": [74, 202, 53, 152], "area": 3752}, {"id": 8029342, "category_id": 1, "iscrowd": 0, "bbox": [477, 286, 9, 22], "area": 117}, {"id": 10465233, "category_id": 1, "iscrowd": 0, "bbox": [434, 285, 11, 26], "area": 154}, {"id": 8164290, "category_id": 1, "iscrowd": 0, "bbox": [404, 356, 16, 25], "area": 214}, {"id": 11976398, "category_id": 1, "iscrowd": 0, "bbox": [528, 310, 16, 23], "area": 195}, {"id": 7833493, "category_id": 1, "iscrowd": 1, "bbox": [1, 26, 639, 355], "area": 66262}, {"id": 3881885, "category_id": 28, "iscrowd": 0, "bbox": [211, 214, 63, 30], "area": 1343}, {"id": 1908101, "category_id": 28, "iscrowd": 0, "bbox": [33, 181, 60, 68], "area": 1187}, {"id": 15066589, "category_id": 28, "iscrowd": 0, "bbox": [155, 205, 52, 17], "area": 494}, {"id": 13486211, "category_id": 155, "iscrowd": 0, "bbox": [317, 217, 323, 225], "area": 17818}, {"id": 6978376, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 208, 246], "area": 20249}, {"id": 14278535, "category_id": 187, "iscrowd": 0, "bbox": [40, 0, 600, 245], "area": 113669}, {"id": 6591600, "category_id": 193, "iscrowd": 0, "bbox": [0, 305, 518, 137], "area": 39666}, {"id": 9607575, "category_id": 197, "iscrowd": 0, "bbox": [28, 231, 34, 33], "area": 360}, {"id": 10924942, "category_id": 198, "iscrowd": 0, "bbox": [0, 349, 37, 33], "area": 787}], "file_name": "000000279927.png", "image_id": 279927}, {"segments_info": [{"id": 3357508, "category_id": 14, "iscrowd": 0, "bbox": [339, 161, 153, 197], "area": 20535}, {"id": 8885665, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 377], "area": 167810}], "file_name": "000000280325.png", "image_id": 280325}, {"segments_info": [{"id": 1513238, "category_id": 1, "iscrowd": 0, "bbox": [160, 278, 92, 197], "area": 10286}, {"id": 1250067, "category_id": 1, "iscrowd": 0, "bbox": [19, 271, 78, 209], "area": 9551}, {"id": 2105888, "category_id": 1, "iscrowd": 0, "bbox": [274, 295, 70, 179], "area": 7524}, {"id": 5000014, "category_id": 1, "iscrowd": 0, "bbox": [442, 290, 23, 23], "area": 354}, {"id": 5068397, "category_id": 1, "iscrowd": 0, "bbox": [303, 289, 9, 7], "area": 50}, {"id": 4408392, "category_id": 1, "iscrowd": 0, "bbox": [602, 290, 33, 78], "area": 1432}, {"id": 4541006, "category_id": 1, "iscrowd": 0, "bbox": [336, 285, 29, 74], "area": 1251}, {"id": 4343629, "category_id": 1, "iscrowd": 0, "bbox": [48, 278, 11, 31], "area": 184}, {"id": 3092024, "category_id": 1, "iscrowd": 0, "bbox": [264, 288, 24, 65], "area": 876}, {"id": 3946037, "category_id": 1, "iscrowd": 0, "bbox": [28, 290, 8, 23], "area": 109}, {"id": 2764850, "category_id": 1, "iscrowd": 0, "bbox": [516, 273, 67, 168], "area": 5991}, {"id": 6183789, "category_id": 6, "iscrowd": 0, "bbox": [84, 243, 56, 54], "area": 2472}, {"id": 5722727, "category_id": 6, "iscrowd": 0, "bbox": [24, 270, 23, 23], "area": 410}, {"id": 4869974, "category_id": 6, "iscrowd": 0, "bbox": [496, 262, 36, 74], "area": 1600}, {"id": 4806246, "category_id": 6, "iscrowd": 0, "bbox": [158, 205, 341, 150], "area": 32256}, {"id": 5066587, "category_id": 10, "iscrowd": 0, "bbox": [44, 255, 5, 16], "area": 62}, {"id": 3288876, "category_id": 10, "iscrowd": 0, "bbox": [45, 273, 2, 10], "area": 18}, {"id": 1513006, "category_id": 27, "iscrowd": 0, "bbox": [10, 315, 70, 87], "area": 2058}, {"id": 2765612, "category_id": 31, "iscrowd": 0, "bbox": [303, 419, 56, 61], "area": 1666}, {"id": 4015173, "category_id": 31, "iscrowd": 0, "bbox": [334, 317, 9, 7], "area": 49}, {"id": 2828585, "category_id": 31, "iscrowd": 0, "bbox": [602, 308, 11, 17], "area": 109}, {"id": 2960428, "category_id": 33, "iscrowd": 0, "bbox": [409, 331, 34, 29], "area": 276}, {"id": 10460317, "category_id": 130, "iscrowd": 0, "bbox": [32, 68, 59, 150], "area": 3175}, {"id": 5922914, "category_id": 149, "iscrowd": 0, "bbox": [39, 284, 20, 22], "area": 117}, {"id": 9013643, "category_id": 184, "iscrowd": 0, "bbox": [32, 46, 385, 264], "area": 15521}, {"id": 6908786, "category_id": 185, "iscrowd": 0, "bbox": [590, 302, 50, 22], "area": 372}, {"id": 16645629, "category_id": 187, "iscrowd": 0, "bbox": [37, 0, 603, 134], "area": 62009}, {"id": 10657952, "category_id": 191, "iscrowd": 0, "bbox": [0, 299, 640, 181], "area": 54540}, {"id": 7776421, "category_id": 195, "iscrowd": 0, "bbox": [520, 287, 11, 24], "area": 157}, {"id": 7435640, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 451], "area": 81151}, {"id": 7960442, "category_id": 199, "iscrowd": 0, "bbox": [12, 261, 42, 62], "area": 772}], "file_name": "000000280710.png", "image_id": 280710}, {"segments_info": [{"id": 2762048, "category_id": 1, "iscrowd": 0, "bbox": [331, 142, 106, 301], "area": 15881}, {"id": 1775390, "category_id": 27, "iscrowd": 0, "bbox": [348, 185, 51, 56], "area": 687}, {"id": 13087135, "category_id": 35, "iscrowd": 0, "bbox": [291, 406, 145, 40], "area": 838}, {"id": 14402738, "category_id": 159, "iscrowd": 0, "bbox": [0, 116, 640, 385], "area": 183172}, {"id": 9535341, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 274], "area": 119806}], "file_name": "000000280779.png", "image_id": 280779}, {"segments_info": [{"id": 1118740, "category_id": 1, "iscrowd": 0, "bbox": [254, 14, 134, 132], "area": 6483}, {"id": 1580584, "category_id": 1, "iscrowd": 0, "bbox": [1, 110, 49, 225], "area": 3870}, {"id": 5272965, "category_id": 1, "iscrowd": 0, "bbox": [118, 97, 305, 411], "area": 69201}, {"id": 6911638, "category_id": 1, "iscrowd": 0, "bbox": [24, 0, 223, 403], "area": 55231}, {"id": 3686221, "category_id": 31, "iscrowd": 0, "bbox": [109, 74, 36, 156], "area": 1593}, {"id": 3428703, "category_id": 44, "iscrowd": 0, "bbox": [375, 464, 52, 174], "area": 7838}, {"id": 2565285, "category_id": 53, "iscrowd": 0, "bbox": [160, 517, 84, 59], "area": 3142}, {"id": 3488474, "category_id": 53, "iscrowd": 0, "bbox": [135, 448, 79, 67], "area": 3824}, {"id": 3286470, "category_id": 53, "iscrowd": 0, "bbox": [110, 510, 57, 82], "area": 2955}, {"id": 3289302, "category_id": 53, "iscrowd": 0, "bbox": [7, 607, 113, 33], "area": 2244}, {"id": 1776037, "category_id": 53, "iscrowd": 0, "bbox": [146, 396, 60, 57], "area": 2556}, {"id": 4602819, "category_id": 53, "iscrowd": 0, "bbox": [0, 562, 88, 78], "area": 4328}, {"id": 2927833, "category_id": 55, "iscrowd": 0, "bbox": [17, 519, 93, 85], "area": 4006}, {"id": 752082, "category_id": 55, "iscrowd": 0, "bbox": [278, 475, 73, 50], "area": 1431}, {"id": 2997237, "category_id": 55, "iscrowd": 0, "bbox": [0, 397, 96, 76], "area": 5496}, {"id": 1215459, "category_id": 55, "iscrowd": 0, "bbox": [203, 421, 94, 81], "area": 5493}, {"id": 946352, "category_id": 55, "iscrowd": 0, "bbox": [242, 569, 83, 71], "area": 4523}, {"id": 949978, "category_id": 55, "iscrowd": 0, "bbox": [272, 493, 94, 96], "area": 6351}, {"id": 2866935, "category_id": 55, "iscrowd": 0, "bbox": [58, 458, 81, 81], "area": 4626}, {"id": 683192, "category_id": 55, "iscrowd": 0, "bbox": [205, 499, 71, 75], "area": 2840}, {"id": 1279972, "category_id": 55, "iscrowd": 0, "bbox": [175, 373, 57, 55], "area": 2171}, {"id": 1547757, "category_id": 55, "iscrowd": 0, "bbox": [138, 559, 117, 81], "area": 7199}, {"id": 609438, "category_id": 55, "iscrowd": 0, "bbox": [276, 425, 54, 53], "area": 1806}, {"id": 4750791, "category_id": 122, "iscrowd": 0, "bbox": [0, 387, 346, 253], "area": 13425}, {"id": 4609645, "category_id": 190, "iscrowd": 0, "bbox": [0, 196, 107, 216], "area": 6368}, {"id": 3885162, "category_id": 199, "iscrowd": 0, "bbox": [167, 0, 260, 174], "area": 12457}], "file_name": "000000280891.png", "image_id": 280891}, {"segments_info": [{"id": 3359830, "category_id": 1, "iscrowd": 0, "bbox": [0, 9, 256, 471], "area": 57184}, {"id": 5532806, "category_id": 1, "iscrowd": 0, "bbox": [83, 38, 288, 442], "area": 66153}, {"id": 8435108, "category_id": 44, "iscrowd": 0, "bbox": [572, 160, 37, 70], "area": 2006}, {"id": 1646370, "category_id": 50, "iscrowd": 0, "bbox": [321, 352, 92, 52], "area": 932}, {"id": 4015946, "category_id": 79, "iscrowd": 0, "bbox": [184, 104, 456, 375], "area": 86700}, {"id": 11256520, "category_id": 82, "iscrowd": 0, "bbox": [97, 1, 221, 96], "area": 8489}, {"id": 6908003, "category_id": 100, "iscrowd": 0, "bbox": [389, 86, 81, 113], "area": 4611}, {"id": 5793890, "category_id": 107, "iscrowd": 0, "bbox": [314, 164, 80, 78], "area": 2445}, {"id": 11648194, "category_id": 188, "iscrowd": 0, "bbox": [108, 0, 416, 457], "area": 20725}, {"id": 11779268, "category_id": 190, "iscrowd": 0, "bbox": [70, 347, 236, 133], "area": 6798}, {"id": 10925235, "category_id": 195, "iscrowd": 0, "bbox": [358, 173, 38, 27], "area": 592}, {"id": 5140854, "category_id": 196, "iscrowd": 0, "bbox": [326, 141, 64, 39], "area": 1863}, {"id": 9220538, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 352], "area": 38696}], "file_name": "000000280918.png", "image_id": 280918}, {"segments_info": [{"id": 7108212, "category_id": 1, "iscrowd": 0, "bbox": [256, 2, 266, 418], "area": 56476}, {"id": 8034716, "category_id": 44, "iscrowd": 0, "bbox": [242, 52, 42, 40], "area": 1468}, {"id": 7236973, "category_id": 79, "iscrowd": 0, "bbox": [1, 248, 243, 172], "area": 36602}, {"id": 6714490, "category_id": 82, "iscrowd": 0, "bbox": [488, 127, 152, 291], "area": 37456}, {"id": 8879442, "category_id": 100, "iscrowd": 0, "bbox": [0, 0, 487, 354], "area": 14695}, {"id": 3161959, "category_id": 156, "iscrowd": 0, "bbox": [0, 58, 640, 70], "area": 18496}, {"id": 2503525, "category_id": 171, "iscrowd": 0, "bbox": [365, 258, 16, 118], "area": 734}, {"id": 6127000, "category_id": 176, "iscrowd": 0, "bbox": [142, 159, 277, 192], "area": 10589}, {"id": 12175579, "category_id": 196, "iscrowd": 0, "bbox": [251, 288, 201, 61], "area": 4543}, {"id": 789279, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 373, 317], "area": 40154}], "file_name": "000000280930.png", "image_id": 280930}, {"segments_info": [{"id": 5600145, "category_id": 1, "iscrowd": 0, "bbox": [211, 53, 351, 369], "area": 70186}, {"id": 263947, "category_id": 50, "iscrowd": 0, "bbox": [201, 273, 32, 16], "area": 173}, {"id": 4608606, "category_id": 79, "iscrowd": 0, "bbox": [0, 338, 299, 84], "area": 15415}, {"id": 791318, "category_id": 79, "iscrowd": 0, "bbox": [297, 398, 62, 29], "area": 1329}, {"id": 2505807, "category_id": 156, "iscrowd": 0, "bbox": [551, 308, 89, 119], "area": 7329}, {"id": 6196654, "category_id": 171, "iscrowd": 0, "bbox": [371, 0, 269, 322], "area": 50875}, {"id": 9214631, "category_id": 195, "iscrowd": 0, "bbox": [82, 421, 188, 6], "area": 946}, {"id": 2704986, "category_id": 196, "iscrowd": 0, "bbox": [130, 256, 510, 102], "area": 5671}, {"id": 5275293, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 372, 303], "area": 52944}], "file_name": "000000281032.png", "image_id": 281032}, {"segments_info": [{"id": 13419517, "category_id": 10, "iscrowd": 0, "bbox": [111, 4, 18, 18], "area": 322}, {"id": 1135221, "category_id": 10, "iscrowd": 0, "bbox": [163, 35, 8, 21], "area": 99}, {"id": 1777441, "category_id": 10, "iscrowd": 0, "bbox": [76, 55, 13, 24], "area": 217}, {"id": 1200291, "category_id": 10, "iscrowd": 0, "bbox": [108, 23, 8, 31], "area": 194}, {"id": 10067039, "category_id": 10, "iscrowd": 0, "bbox": [145, 46, 8, 11], "area": 80}, {"id": 2830671, "category_id": 10, "iscrowd": 0, "bbox": [79, 21, 11, 18], "area": 179}, {"id": 3684944, "category_id": 10, "iscrowd": 0, "bbox": [145, 24, 11, 22], "area": 171}, {"id": 2436699, "category_id": 10, "iscrowd": 0, "bbox": [145, 56, 10, 27], "area": 186}, {"id": 1590618, "category_id": 11, "iscrowd": 0, "bbox": [242, 126, 11, 22], "area": 148}, {"id": 401732, "category_id": 15, "iscrowd": 0, "bbox": [620, 136, 20, 37], "area": 551}, {"id": 10731472, "category_id": 130, "iscrowd": 0, "bbox": [0, 31, 593, 44], "area": 2371}, {"id": 2378103, "category_id": 149, "iscrowd": 0, "bbox": [0, 128, 640, 238], "area": 65153}, {"id": 598595, "category_id": 171, "iscrowd": 0, "bbox": [497, 53, 76, 76], "area": 5033}, {"id": 2632244, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 455, 144], "area": 31471}, {"id": 864085, "category_id": 191, "iscrowd": 0, "bbox": [0, 90, 640, 390], "area": 69156}, {"id": 203311, "category_id": 193, "iscrowd": 0, "bbox": [0, 129, 546, 351], "area": 60946}, {"id": 2904952, "category_id": 197, "iscrowd": 0, "bbox": [66, 0, 574, 180], "area": 37752}, {"id": 1599649, "category_id": 199, "iscrowd": 0, "bbox": [39, 48, 601, 113], "area": 2146}], "file_name": "000000281179.png", "image_id": 281179}, {"segments_info": [{"id": 4144451, "category_id": 1, "iscrowd": 0, "bbox": [10, 162, 129, 241], "area": 14418}, {"id": 10986173, "category_id": 1, "iscrowd": 0, "bbox": [296, 1, 95, 54], "area": 2104}, {"id": 12825031, "category_id": 1, "iscrowd": 0, "bbox": [393, 0, 75, 35], "area": 1591}, {"id": 4997712, "category_id": 1, "iscrowd": 0, "bbox": [80, 228, 193, 177], "area": 17904}, {"id": 5658465, "category_id": 1, "iscrowd": 0, "bbox": [51, 1, 61, 67], "area": 3071}, {"id": 7292991, "category_id": 1, "iscrowd": 0, "bbox": [381, 4, 87, 70], "area": 3304}, {"id": 9209738, "category_id": 1, "iscrowd": 0, "bbox": [332, 113, 253, 296], "area": 21501}, {"id": 12697029, "category_id": 1, "iscrowd": 0, "bbox": [318, 4, 65, 73], "area": 3100}, {"id": 9865606, "category_id": 1, "iscrowd": 0, "bbox": [135, 0, 90, 95], "area": 5694}, {"id": 12104640, "category_id": 1, "iscrowd": 0, "bbox": [5, 0, 57, 85], "area": 1901}, {"id": 6438711, "category_id": 1, "iscrowd": 0, "bbox": [482, 0, 77, 71], "area": 3743}, {"id": 4142395, "category_id": 1, "iscrowd": 0, "bbox": [556, 0, 83, 72], "area": 4068}, {"id": 5328203, "category_id": 39, "iscrowd": 0, "bbox": [344, 185, 61, 35], "area": 644}, {"id": 5538737, "category_id": 40, "iscrowd": 0, "bbox": [233, 330, 38, 40], "area": 1000}, {"id": 11698020, "category_id": 62, "iscrowd": 0, "bbox": [312, 33, 74, 41], "area": 664}, {"id": 11236954, "category_id": 62, "iscrowd": 0, "bbox": [472, 33, 19, 38], "area": 437}, {"id": 13015685, "category_id": 62, "iscrowd": 0, "bbox": [2, 45, 50, 43], "area": 1813}, {"id": 11895144, "category_id": 62, "iscrowd": 0, "bbox": [393, 32, 74, 32], "area": 334}, {"id": 11499358, "category_id": 62, "iscrowd": 0, "bbox": [0, 3, 18, 42], "area": 564}, {"id": 5348488, "category_id": 145, "iscrowd": 0, "bbox": [0, 190, 640, 168], "area": 42076}, {"id": 9342088, "category_id": 161, "iscrowd": 0, "bbox": [50, 0, 104, 86], "area": 3625}, {"id": 5650995, "category_id": 185, "iscrowd": 0, "bbox": [0, 30, 640, 207], "area": 59697}, {"id": 10721684, "category_id": 191, "iscrowd": 0, "bbox": [0, 62, 257, 47], "area": 4322}, {"id": 10072012, "category_id": 194, "iscrowd": 0, "bbox": [0, 170, 640, 257], "area": 61708}, {"id": 11051934, "category_id": 199, "iscrowd": 0, "bbox": [177, 0, 143, 90], "area": 6861}], "file_name": "000000281409.png", "image_id": 281409}, {"segments_info": [{"id": 6514027, "category_id": 1, "iscrowd": 0, "bbox": [64, 108, 252, 472], "area": 48173}, {"id": 3154220, "category_id": 27, "iscrowd": 0, "bbox": [285, 300, 158, 103], "area": 12543}, {"id": 2236456, "category_id": 77, "iscrowd": 0, "bbox": [200, 250, 31, 12], "area": 176}, {"id": 4544368, "category_id": 171, "iscrowd": 0, "bbox": [0, 292, 443, 348], "area": 99250}, {"id": 3557961, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 443, 407], "area": 89268}, {"id": 9933715, "category_id": 197, "iscrowd": 0, "bbox": [84, 8, 359, 188], "area": 10950}], "file_name": "000000281414.png", "image_id": 281414}, {"segments_info": [{"id": 1913660, "category_id": 19, "iscrowd": 0, "bbox": [36, 182, 23, 26], "area": 325}, {"id": 7115428, "category_id": 19, "iscrowd": 0, "bbox": [86, 169, 18, 41], "area": 463}, {"id": 4418201, "category_id": 19, "iscrowd": 0, "bbox": [249, 134, 328, 282], "area": 62235}, {"id": 13153701, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 76], "area": 36670}, {"id": 4667689, "category_id": 192, "iscrowd": 0, "bbox": [0, 39, 640, 123], "area": 54967}, {"id": 4947862, "category_id": 193, "iscrowd": 0, "bbox": [0, 135, 640, 286], "area": 113025}], "file_name": "000000281447.png", "image_id": 281447}, {"segments_info": [{"id": 3226440, "category_id": 1, "iscrowd": 0, "bbox": [258, 223, 31, 40], "area": 668}, {"id": 724495, "category_id": 1, "iscrowd": 0, "bbox": [103, 248, 20, 46], "area": 460}, {"id": 2043193, "category_id": 1, "iscrowd": 0, "bbox": [365, 161, 129, 214], "area": 13427}, {"id": 2240832, "category_id": 1, "iscrowd": 0, "bbox": [3, 125, 144, 244], "area": 18797}, {"id": 461324, "category_id": 1, "iscrowd": 0, "bbox": [134, 247, 16, 46], "area": 505}, {"id": 2304828, "category_id": 1, "iscrowd": 0, "bbox": [230, 245, 12, 51], "area": 399}, {"id": 1908783, "category_id": 1, "iscrowd": 0, "bbox": [199, 212, 34, 163], "area": 3522}, {"id": 3161930, "category_id": 1, "iscrowd": 0, "bbox": [301, 134, 133, 241], "area": 12645}, {"id": 2375511, "category_id": 1, "iscrowd": 0, "bbox": [240, 246, 18, 41], "area": 396}, {"id": 1251876, "category_id": 1, "iscrowd": 0, "bbox": [79, 227, 34, 121], "area": 2343}, {"id": 3555392, "category_id": 3, "iscrowd": 0, "bbox": [151, 252, 8, 25], "area": 124}, {"id": 1382940, "category_id": 31, "iscrowd": 0, "bbox": [393, 284, 63, 65], "area": 3031}, {"id": 1578002, "category_id": 31, "iscrowd": 0, "bbox": [214, 208, 145, 163], "area": 13172}, {"id": 2964041, "category_id": 77, "iscrowd": 0, "bbox": [325, 166, 50, 25], "area": 288}, {"id": 3226698, "category_id": 77, "iscrowd": 0, "bbox": [90, 136, 12, 12], "area": 62}, {"id": 2436663, "category_id": 77, "iscrowd": 0, "bbox": [403, 252, 14, 16], "area": 97}, {"id": 7177601, "category_id": 184, "iscrowd": 0, "bbox": [127, 0, 184, 262], "area": 32986}, {"id": 13351333, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 158], "area": 43421}, {"id": 8887480, "category_id": 190, "iscrowd": 0, "bbox": [70, 251, 141, 124], "area": 9953}, {"id": 6651554, "category_id": 191, "iscrowd": 0, "bbox": [227, 280, 150, 95], "area": 239}, {"id": 3621717, "category_id": 194, "iscrowd": 0, "bbox": [211, 340, 33, 35], "area": 250}, {"id": 3423810, "category_id": 197, "iscrowd": 0, "bbox": [0, 48, 500, 327], "area": 25638}], "file_name": "000000281687.png", "image_id": 281687}, {"segments_info": [{"id": 5463658, "category_id": 5, "iscrowd": 0, "bbox": [0, 136, 164, 173], "area": 13466}, {"id": 3421495, "category_id": 5, "iscrowd": 0, "bbox": [558, 255, 82, 81], "area": 4572}, {"id": 9149378, "category_id": 5, "iscrowd": 0, "bbox": [580, 135, 59, 72], "area": 1994}, {"id": 10529981, "category_id": 5, "iscrowd": 0, "bbox": [61, 58, 544, 236], "area": 50112}, {"id": 4081227, "category_id": 8, "iscrowd": 0, "bbox": [360, 280, 102, 57], "area": 5121}, {"id": 1393490, "category_id": 8, "iscrowd": 0, "bbox": [32, 281, 49, 33], "area": 958}, {"id": 1844265, "category_id": 149, "iscrowd": 0, "bbox": [0, 286, 526, 81], "area": 11067}, {"id": 5265501, "category_id": 184, "iscrowd": 0, "bbox": [56, 176, 560, 45], "area": 1629}, {"id": 10526360, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 231], "area": 110582}, {"id": 5204600, "category_id": 191, "iscrowd": 0, "bbox": [0, 281, 640, 200], "area": 52490}, {"id": 144951, "category_id": 193, "iscrowd": 0, "bbox": [0, 379, 640, 79], "area": 42482}, {"id": 5397601, "category_id": 197, "iscrowd": 0, "bbox": [138, 156, 502, 172], "area": 5042}], "file_name": "000000281693.png", "image_id": 281693}, {"segments_info": [{"id": 5792639, "category_id": 1, "iscrowd": 0, "bbox": [50, 20, 179, 568], "area": 58692}, {"id": 8093339, "category_id": 1, "iscrowd": 0, "bbox": [145, 190, 154, 430], "area": 33977}, {"id": 11245471, "category_id": 28, "iscrowd": 0, "bbox": [32, 0, 381, 220], "area": 33795}, {"id": 7958390, "category_id": 31, "iscrowd": 0, "bbox": [0, 242, 57, 72], "area": 3331}, {"id": 11777460, "category_id": 191, "iscrowd": 0, "bbox": [0, 557, 419, 83], "area": 20910}, {"id": 9607271, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 419, 610], "area": 110158}], "file_name": "000000281754.png", "image_id": 281754}, {"segments_info": [{"id": 4407649, "category_id": 1, "iscrowd": 0, "bbox": [382, 140, 84, 278], "area": 13076}, {"id": 4737371, "category_id": 1, "iscrowd": 0, "bbox": [213, 192, 14, 78], "area": 241}, {"id": 4278884, "category_id": 1, "iscrowd": 0, "bbox": [99, 98, 100, 305], "area": 17174}, {"id": 4937834, "category_id": 1, "iscrowd": 0, "bbox": [460, 141, 73, 281], "area": 13055}, {"id": 3946825, "category_id": 1, "iscrowd": 0, "bbox": [206, 135, 78, 271], "area": 11329}, {"id": 5396848, "category_id": 1, "iscrowd": 0, "bbox": [300, 144, 77, 272], "area": 7393}, {"id": 5462884, "category_id": 8, "iscrowd": 0, "bbox": [33, 300, 76, 21], "area": 982}, {"id": 11248824, "category_id": 28, "iscrowd": 0, "bbox": [344, 103, 137, 110], "area": 7529}, {"id": 13223879, "category_id": 28, "iscrowd": 0, "bbox": [464, 92, 137, 122], "area": 10626}, {"id": 7825822, "category_id": 28, "iscrowd": 0, "bbox": [263, 235, 161, 112], "area": 12696}, {"id": 12165499, "category_id": 28, "iscrowd": 0, "bbox": [200, 87, 129, 113], "area": 8656}, {"id": 8299409, "category_id": 28, "iscrowd": 0, "bbox": [55, 73, 150, 131], "area": 8264}, {"id": 6055536, "category_id": 128, "iscrowd": 0, "bbox": [0, 202, 563, 138], "area": 6153}, {"id": 6975608, "category_id": 149, "iscrowd": 0, "bbox": [0, 353, 640, 74], "area": 24226}, {"id": 3357246, "category_id": 184, "iscrowd": 0, "bbox": [0, 110, 640, 267], "area": 20163}, {"id": 1515043, "category_id": 185, "iscrowd": 0, "bbox": [575, 318, 24, 20], "area": 327}, {"id": 14407374, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 310], "area": 88170}, {"id": 5660520, "category_id": 191, "iscrowd": 0, "bbox": [0, 310, 640, 102], "area": 7828}, {"id": 4545633, "category_id": 193, "iscrowd": 0, "bbox": [0, 308, 640, 84], "area": 12728}], "file_name": "000000281759.png", "image_id": 281759}, {"segments_info": [{"id": 4016472, "category_id": 1, "iscrowd": 0, "bbox": [257, 63, 170, 415], "area": 29602}, {"id": 5597288, "category_id": 2, "iscrowd": 0, "bbox": [116, 203, 401, 274], "area": 50509}, {"id": 3222835, "category_id": 32, "iscrowd": 0, "bbox": [327, 123, 21, 57], "area": 549}, {"id": 3499634, "category_id": 119, "iscrowd": 0, "bbox": [16, 379, 60, 42], "area": 877}, {"id": 8553602, "category_id": 128, "iscrowd": 0, "bbox": [32, 0, 608, 414], "area": 151146}, {"id": 3295556, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 539, 475], "area": 30846}, {"id": 15054222, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 90, 296], "area": 20766}, {"id": 3092047, "category_id": 190, "iscrowd": 0, "bbox": [499, 398, 141, 66], "area": 6647}, {"id": 13622255, "category_id": 191, "iscrowd": 0, "bbox": [360, 450, 280, 54], "area": 9629}, {"id": 8109241, "category_id": 193, "iscrowd": 0, "bbox": [0, 431, 434, 73], "area": 20430}], "file_name": "000000281929.png", "image_id": 281929}, {"segments_info": [{"id": 12366750, "category_id": 1, "iscrowd": 0, "bbox": [90, 135, 10, 25], "area": 160}, {"id": 13222062, "category_id": 1, "iscrowd": 0, "bbox": [82, 134, 9, 26], "area": 156}, {"id": 8023376, "category_id": 1, "iscrowd": 0, "bbox": [520, 82, 7, 17], "area": 73}, {"id": 11776416, "category_id": 1, "iscrowd": 0, "bbox": [414, 131, 25, 44], "area": 410}, {"id": 10920093, "category_id": 1, "iscrowd": 0, "bbox": [599, 53, 6, 9], "area": 40}, {"id": 12892865, "category_id": 1, "iscrowd": 0, "bbox": [425, 195, 215, 254], "area": 36071}, {"id": 7826286, "category_id": 1, "iscrowd": 0, "bbox": [501, 123, 7, 10], "area": 46}, {"id": 7958129, "category_id": 1, "iscrowd": 0, "bbox": [523, 121, 11, 12], "area": 81}, {"id": 11052184, "category_id": 1, "iscrowd": 0, "bbox": [464, 133, 17, 43], "area": 390}, {"id": 4867717, "category_id": 1, "iscrowd": 0, "bbox": [487, 124, 10, 9], "area": 55}, {"id": 10726835, "category_id": 1, "iscrowd": 0, "bbox": [127, 88, 69, 126], "area": 3019}, {"id": 12828076, "category_id": 1, "iscrowd": 0, "bbox": [74, 131, 10, 29], "area": 188}, {"id": 11317927, "category_id": 1, "iscrowd": 0, "bbox": [601, 126, 16, 55], "area": 575}, {"id": 8355440, "category_id": 1, "iscrowd": 1, "bbox": [56, 11, 584, 155], "area": 8674}, {"id": 9937578, "category_id": 37, "iscrowd": 0, "bbox": [200, 71, 13, 13], "area": 125}, {"id": 4213073, "category_id": 40, "iscrowd": 0, "bbox": [380, 317, 62, 64], "area": 2963}, {"id": 8157023, "category_id": 62, "iscrowd": 0, "bbox": [468, 87, 8, 10], "area": 64}, {"id": 8552546, "category_id": 62, "iscrowd": 0, "bbox": [574, 35, 4, 3], "area": 12}, {"id": 7565650, "category_id": 62, "iscrowd": 0, "bbox": [555, 59, 10, 5], "area": 45}, {"id": 10655616, "category_id": 62, "iscrowd": 0, "bbox": [587, 32, 3, 3], "area": 8}, {"id": 3026209, "category_id": 62, "iscrowd": 0, "bbox": [617, 91, 4, 8], "area": 27}, {"id": 9800568, "category_id": 62, "iscrowd": 0, "bbox": [376, 78, 8, 4], "area": 30}, {"id": 8617312, "category_id": 62, "iscrowd": 0, "bbox": [552, 38, 5, 3], "area": 14}, {"id": 8025933, "category_id": 62, "iscrowd": 0, "bbox": [568, 45, 5, 2], "area": 9}, {"id": 8289627, "category_id": 62, "iscrowd": 0, "bbox": [512, 57, 7, 3], "area": 20}, {"id": 8486239, "category_id": 62, "iscrowd": 0, "bbox": [551, 53, 7, 5], "area": 26}, {"id": 11575696, "category_id": 62, "iscrowd": 0, "bbox": [422, 79, 9, 3], "area": 21}, {"id": 8881514, "category_id": 62, "iscrowd": 0, "bbox": [583, 50, 6, 4], "area": 19}, {"id": 8945265, "category_id": 62, "iscrowd": 1, "bbox": [357, 8, 283, 88], "area": 4146}, {"id": 5684373, "category_id": 145, "iscrowd": 0, "bbox": [0, 138, 640, 207], "area": 82006}, {"id": 12897980, "category_id": 181, "iscrowd": 0, "bbox": [255, 14, 53, 40], "area": 1883}, {"id": 5392185, "category_id": 185, "iscrowd": 0, "bbox": [0, 115, 625, 65], "area": 7968}, {"id": 15460836, "category_id": 187, "iscrowd": 0, "bbox": [317, 0, 323, 100], "area": 11065}, {"id": 10399958, "category_id": 194, "iscrowd": 0, "bbox": [0, 168, 640, 281], "area": 61685}, {"id": 7106910, "category_id": 197, "iscrowd": 0, "bbox": [252, 0, 388, 108], "area": 8226}, {"id": 3882297, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 174], "area": 50996}], "file_name": "000000282037.png", "image_id": 282037}, {"segments_info": [{"id": 7894125, "category_id": 15, "iscrowd": 0, "bbox": [76, 166, 111, 79], "area": 3799}, {"id": 9408915, "category_id": 154, "iscrowd": 0, "bbox": [0, 83, 500, 215], "area": 100027}, {"id": 13746618, "category_id": 155, "iscrowd": 0, "bbox": [0, 57, 500, 43], "area": 14940}, {"id": 15983836, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 65], "area": 30185}], "file_name": "000000282046.png", "image_id": 282046}, {"segments_info": [{"id": 2569284, "category_id": 44, "iscrowd": 0, "bbox": [0, 584, 50, 56], "area": 1843}, {"id": 2502456, "category_id": 44, "iscrowd": 0, "bbox": [12, 552, 50, 87], "area": 2011}, {"id": 6845815, "category_id": 82, "iscrowd": 0, "bbox": [86, 54, 270, 494], "area": 119070}, {"id": 15989242, "category_id": 130, "iscrowd": 0, "bbox": [440, 0, 36, 12], "area": 322}, {"id": 1119257, "category_id": 156, "iscrowd": 0, "bbox": [0, 14, 101, 78], "area": 5482}, {"id": 2240060, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 456, 471], "area": 54314}, {"id": 3166824, "category_id": 190, "iscrowd": 0, "bbox": [56, 300, 424, 340], "area": 52806}, {"id": 4614002, "category_id": 199, "iscrowd": 0, "bbox": [428, 0, 52, 272], "area": 10273}], "file_name": "000000282296.png", "image_id": 282296}, {"segments_info": [{"id": 2700087, "category_id": 1, "iscrowd": 0, "bbox": [526, 277, 46, 137], "area": 3563}, {"id": 3227703, "category_id": 1, "iscrowd": 0, "bbox": [363, 268, 69, 199], "area": 7763}, {"id": 2500649, "category_id": 1, "iscrowd": 0, "bbox": [356, 274, 21, 125], "area": 1024}, {"id": 2238510, "category_id": 1, "iscrowd": 0, "bbox": [342, 266, 22, 94], "area": 643}, {"id": 2501933, "category_id": 1, "iscrowd": 0, "bbox": [450, 273, 45, 120], "area": 2919}, {"id": 2634285, "category_id": 1, "iscrowd": 0, "bbox": [253, 272, 53, 170], "area": 5062}, {"id": 3028781, "category_id": 1, "iscrowd": 0, "bbox": [1, 269, 62, 155], "area": 5903}, {"id": 2500904, "category_id": 1, "iscrowd": 0, "bbox": [99, 272, 52, 163], "area": 4708}, {"id": 2698025, "category_id": 1, "iscrowd": 0, "bbox": [217, 263, 46, 146], "area": 3373}, {"id": 3434602, "category_id": 1, "iscrowd": 0, "bbox": [404, 278, 28, 71], "area": 782}, {"id": 2898749, "category_id": 1, "iscrowd": 0, "bbox": [42, 268, 31, 57], "area": 867}, {"id": 3160622, "category_id": 1, "iscrowd": 0, "bbox": [179, 260, 58, 219], "area": 7405}, {"id": 3228491, "category_id": 1, "iscrowd": 0, "bbox": [302, 271, 27, 72], "area": 903}, {"id": 3555396, "category_id": 1, "iscrowd": 1, "bbox": [1, 253, 639, 227], "area": 28694}, {"id": 3420751, "category_id": 27, "iscrowd": 0, "bbox": [337, 288, 8, 25], "area": 171}, {"id": 3953236, "category_id": 27, "iscrowd": 0, "bbox": [352, 293, 21, 42], "area": 468}, {"id": 2171680, "category_id": 31, "iscrowd": 0, "bbox": [92, 329, 23, 40], "area": 548}, {"id": 16448249, "category_id": 85, "iscrowd": 0, "bbox": [472, 44, 105, 98], "area": 9840}, {"id": 15593452, "category_id": 85, "iscrowd": 0, "bbox": [451, 57, 10, 103], "area": 656}, {"id": 12569551, "category_id": 130, "iscrowd": 0, "bbox": [220, 44, 285, 232], "area": 804}, {"id": 2181207, "category_id": 181, "iscrowd": 0, "bbox": [32, 0, 135, 108], "area": 1063}, {"id": 3627107, "category_id": 186, "iscrowd": 0, "bbox": [53, 0, 578, 202], "area": 65817}, {"id": 6588040, "category_id": 190, "iscrowd": 0, "bbox": [0, 303, 589, 177], "area": 45479}, {"id": 4745850, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 277], "area": 60278}, {"id": 6189178, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 486, 289], "area": 20232}], "file_name": "000000282298.png", "image_id": 282298}, {"segments_info": [{"id": 8686754, "category_id": 25, "iscrowd": 0, "bbox": [1, 114, 445, 520], "area": 67916}, {"id": 3428676, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 563], "area": 139753}, {"id": 6974833, "category_id": 198, "iscrowd": 0, "bbox": [62, 371, 418, 269], "area": 55526}], "file_name": "000000282912.png", "image_id": 282912}, {"segments_info": [{"id": 5335424, "category_id": 3, "iscrowd": 0, "bbox": [1, 357, 92, 90], "area": 6329}, {"id": 3885184, "category_id": 10, "iscrowd": 0, "bbox": [191, 200, 35, 70], "area": 2290}, {"id": 3090711, "category_id": 92, "iscrowd": 0, "bbox": [47, 0, 258, 119], "area": 29142}, {"id": 4149604, "category_id": 149, "iscrowd": 0, "bbox": [0, 405, 427, 235], "area": 92904}, {"id": 4665386, "category_id": 184, "iscrowd": 0, "bbox": [378, 14, 49, 94], "area": 2997}, {"id": 525830, "category_id": 187, "iscrowd": 0, "bbox": [18, 0, 409, 227], "area": 21542}, {"id": 5468826, "category_id": 191, "iscrowd": 0, "bbox": [78, 375, 349, 60], "area": 7466}, {"id": 1323570, "category_id": 193, "iscrowd": 0, "bbox": [21, 320, 406, 87], "area": 23272}, {"id": 2502959, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 427, 369], "area": 76747}], "file_name": "000000283037.png", "image_id": 283037}, {"segments_info": [{"id": 11642013, "category_id": 3, "iscrowd": 0, "bbox": [0, 187, 48, 28], "area": 977}, {"id": 10721169, "category_id": 8, "iscrowd": 0, "bbox": [53, 164, 71, 40], "area": 1618}, {"id": 3759725, "category_id": 10, "iscrowd": 0, "bbox": [355, 111, 9, 16], "area": 128}, {"id": 2914198, "category_id": 10, "iscrowd": 0, "bbox": [31, 139, 7, 11], "area": 48}, {"id": 6971240, "category_id": 10, "iscrowd": 0, "bbox": [81, 160, 8, 8], "area": 64}, {"id": 4801170, "category_id": 13, "iscrowd": 0, "bbox": [114, 12, 225, 244], "area": 43455}, {"id": 12237498, "category_id": 149, "iscrowd": 0, "bbox": [0, 165, 500, 116], "area": 15721}, {"id": 3099967, "category_id": 184, "iscrowd": 0, "bbox": [296, 118, 204, 163], "area": 21924}, {"id": 15578498, "category_id": 187, "iscrowd": 0, "bbox": [42, 0, 187, 160], "area": 11602}, {"id": 8026236, "category_id": 191, "iscrowd": 0, "bbox": [416, 253, 84, 28], "area": 1475}, {"id": 6182492, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 199], "area": 37353}, {"id": 5720642, "category_id": 199, "iscrowd": 0, "bbox": [297, 154, 203, 127], "area": 888}], "file_name": "000000283038.png", "image_id": 283038}, {"segments_info": [{"id": 3249871, "category_id": 55, "iscrowd": 0, "bbox": [505, 201, 119, 54], "area": 4812}, {"id": 4305370, "category_id": 55, "iscrowd": 0, "bbox": [251, 161, 121, 110], "area": 10953}, {"id": 3116997, "category_id": 55, "iscrowd": 0, "bbox": [502, 286, 117, 62], "area": 5768}, {"id": 886225, "category_id": 55, "iscrowd": 0, "bbox": [18, 139, 137, 128], "area": 13766}, {"id": 2857681, "category_id": 55, "iscrowd": 0, "bbox": [508, 98, 120, 64], "area": 5806}, {"id": 2123406, "category_id": 122, "iscrowd": 0, "bbox": [289, 268, 16, 4], "area": 14}, {"id": 5003367, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 232389}], "file_name": "000000283070.png", "image_id": 283070}, {"segments_info": [{"id": 3092518, "category_id": 47, "iscrowd": 0, "bbox": [207, 0, 158, 106], "area": 14620}, {"id": 3432315, "category_id": 58, "iscrowd": 0, "bbox": [312, 105, 168, 333], "area": 36177}, {"id": 3234426, "category_id": 58, "iscrowd": 0, "bbox": [2, 102, 289, 418], "area": 87722}, {"id": 6315344, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 55166}, {"id": 9604220, "category_id": 195, "iscrowd": 0, "bbox": [137, 50, 251, 72], "area": 5096}], "file_name": "000000283113.png", "image_id": 283113}, {"segments_info": [{"id": 4870473, "category_id": 1, "iscrowd": 0, "bbox": [314, 0, 228, 392], "area": 37401}, {"id": 5265520, "category_id": 1, "iscrowd": 0, "bbox": [0, 235, 437, 187], "area": 20930}, {"id": 4018331, "category_id": 58, "iscrowd": 0, "bbox": [194, 162, 262, 171], "area": 32928}, {"id": 6580580, "category_id": 199, "iscrowd": 0, "bbox": [155, 0, 301, 178], "area": 12056}], "file_name": "000000283268.png", "image_id": 283268}, {"segments_info": [{"id": 7166889, "category_id": 1, "iscrowd": 0, "bbox": [602, 265, 6, 19], "area": 87}, {"id": 3551281, "category_id": 1, "iscrowd": 0, "bbox": [369, 264, 10, 23], "area": 126}, {"id": 3882302, "category_id": 1, "iscrowd": 0, "bbox": [595, 267, 5, 18], "area": 46}, {"id": 6839112, "category_id": 3, "iscrowd": 0, "bbox": [423, 268, 11, 14], "area": 104}, {"id": 12104878, "category_id": 3, "iscrowd": 0, "bbox": [472, 270, 12, 5], "area": 39}, {"id": 4735289, "category_id": 3, "iscrowd": 0, "bbox": [467, 274, 50, 57], "area": 882}, {"id": 4206400, "category_id": 3, "iscrowd": 0, "bbox": [480, 276, 100, 76], "area": 5767}, {"id": 9335639, "category_id": 3, "iscrowd": 0, "bbox": [455, 270, 23, 17], "area": 104}, {"id": 4886229, "category_id": 11, "iscrowd": 0, "bbox": [509, 336, 25, 64], "area": 1093}, {"id": 9013641, "category_id": 149, "iscrowd": 0, "bbox": [510, 267, 130, 160], "area": 10628}, {"id": 4476013, "category_id": 166, "iscrowd": 0, "bbox": [0, 0, 393, 397], "area": 117838}, {"id": 7568509, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 74056}, {"id": 16183266, "category_id": 187, "iscrowd": 0, "bbox": [358, 0, 272, 220], "area": 6874}, {"id": 8818327, "category_id": 191, "iscrowd": 0, "bbox": [15, 271, 546, 156], "area": 30846}, {"id": 11779267, "category_id": 197, "iscrowd": 0, "bbox": [562, 39, 78, 253], "area": 2247}], "file_name": "000000283318.png", "image_id": 283318}, {"segments_info": [{"id": 8160389, "category_id": 18, "iscrowd": 0, "bbox": [2, 2, 439, 416], "area": 123530}, {"id": 7303790, "category_id": 47, "iscrowd": 0, "bbox": [0, 284, 134, 143], "area": 17069}, {"id": 9216695, "category_id": 65, "iscrowd": 0, "bbox": [427, 100, 211, 163], "area": 15255}, {"id": 4866883, "category_id": 141, "iscrowd": 0, "bbox": [0, 0, 440, 300], "area": 23580}, {"id": 4346721, "category_id": 189, "iscrowd": 0, "bbox": [132, 122, 508, 305], "area": 16585}, {"id": 14276308, "category_id": 195, "iscrowd": 0, "bbox": [318, 122, 322, 295], "area": 50908}, {"id": 9410181, "category_id": 199, "iscrowd": 0, "bbox": [375, 0, 265, 127], "area": 25262}], "file_name": "000000283412.png", "image_id": 283412}, {"segments_info": [{"id": 9408393, "category_id": 1, "iscrowd": 0, "bbox": [329, 126, 136, 255], "area": 14005}, {"id": 7232595, "category_id": 1, "iscrowd": 0, "bbox": [171, 130, 70, 238], "area": 11117}, {"id": 6966735, "category_id": 34, "iscrowd": 0, "bbox": [451, 243, 19, 20], "area": 219}, {"id": 8675883, "category_id": 34, "iscrowd": 0, "bbox": [224, 198, 23, 17], "area": 233}, {"id": 4412743, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 199841}, {"id": 9214117, "category_id": 194, "iscrowd": 0, "bbox": [0, 302, 563, 124], "area": 46356}], "file_name": "000000283520.png", "image_id": 283520}, {"segments_info": [{"id": 2433569, "category_id": 78, "iscrowd": 0, "bbox": [279, 148, 346, 185], "area": 56393}, {"id": 13351871, "category_id": 79, "iscrowd": 0, "bbox": [296, 42, 295, 113], "area": 29003}, {"id": 10656673, "category_id": 100, "iscrowd": 0, "bbox": [0, 359, 55, 26], "area": 1032}, {"id": 2368291, "category_id": 156, "iscrowd": 0, "bbox": [0, 230, 184, 250], "area": 32435}, {"id": 3753286, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 278, 237], "area": 58543}, {"id": 3818585, "category_id": 190, "iscrowd": 0, "bbox": [120, 413, 172, 67], "area": 4524}, {"id": 5001846, "category_id": 195, "iscrowd": 0, "bbox": [284, 0, 356, 480], "area": 53700}, {"id": 3819851, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 27329}], "file_name": "000000283717.png", "image_id": 283717}, {"segments_info": [{"id": 1319214, "category_id": 1, "iscrowd": 0, "bbox": [7, 147, 101, 184], "area": 10771}, {"id": 4538449, "category_id": 1, "iscrowd": 0, "bbox": [408, 294, 92, 38], "area": 2532}, {"id": 661281, "category_id": 1, "iscrowd": 0, "bbox": [382, 138, 39, 55], "area": 1149}, {"id": 1387079, "category_id": 1, "iscrowd": 0, "bbox": [328, 200, 20, 28], "area": 330}, {"id": 1322572, "category_id": 1, "iscrowd": 0, "bbox": [382, 189, 16, 26], "area": 274}, {"id": 1516590, "category_id": 1, "iscrowd": 0, "bbox": [394, 175, 26, 26], "area": 347}, {"id": 1778478, "category_id": 1, "iscrowd": 0, "bbox": [278, 196, 28, 91], "area": 1261}, {"id": 999532, "category_id": 1, "iscrowd": 0, "bbox": [162, 84, 73, 247], "area": 10236}, {"id": 1385267, "category_id": 1, "iscrowd": 0, "bbox": [427, 190, 15, 21], "area": 145}, {"id": 1054755, "category_id": 1, "iscrowd": 0, "bbox": [465, 157, 30, 54], "area": 917}, {"id": 4536904, "category_id": 1, "iscrowd": 0, "bbox": [382, 202, 40, 128], "area": 2584}, {"id": 1448745, "category_id": 1, "iscrowd": 0, "bbox": [339, 189, 45, 129], "area": 2674}, {"id": 4217212, "category_id": 1, "iscrowd": 0, "bbox": [205, 232, 26, 39], "area": 650}, {"id": 2107703, "category_id": 1, "iscrowd": 1, "bbox": [58, 146, 442, 165], "area": 15479}, {"id": 3699838, "category_id": 84, "iscrowd": 0, "bbox": [298, 157, 2, 9], "area": 18}, {"id": 2120033, "category_id": 84, "iscrowd": 0, "bbox": [305, 158, 2, 8], "area": 15}, {"id": 2314364, "category_id": 84, "iscrowd": 0, "bbox": [127, 187, 19, 23], "area": 389}, {"id": 8083537, "category_id": 84, "iscrowd": 0, "bbox": [133, 164, 4, 13], "area": 41}, {"id": 2906462, "category_id": 84, "iscrowd": 0, "bbox": [289, 157, 3, 9], "area": 19}, {"id": 3167095, "category_id": 84, "iscrowd": 0, "bbox": [115, 187, 8, 23], "area": 180}, {"id": 1125235, "category_id": 84, "iscrowd": 0, "bbox": [96, 185, 19, 24], "area": 419}, {"id": 8158591, "category_id": 84, "iscrowd": 0, "bbox": [113, 162, 20, 16], "area": 191}, {"id": 6452108, "category_id": 84, "iscrowd": 0, "bbox": [233, 164, 27, 13], "area": 81}, {"id": 1853262, "category_id": 84, "iscrowd": 0, "bbox": [287, 157, 40, 13], "area": 343}, {"id": 11904934, "category_id": 84, "iscrowd": 0, "bbox": [137, 165, 6, 12], "area": 61}, {"id": 5727862, "category_id": 88, "iscrowd": 0, "bbox": [249, 235, 43, 30], "area": 576}, {"id": 5400182, "category_id": 88, "iscrowd": 0, "bbox": [210, 266, 23, 26], "area": 392}, {"id": 1583932, "category_id": 88, "iscrowd": 0, "bbox": [377, 221, 30, 30], "area": 585}, {"id": 7238026, "category_id": 88, "iscrowd": 0, "bbox": [337, 214, 37, 51], "area": 996}, {"id": 7692897, "category_id": 88, "iscrowd": 0, "bbox": [446, 240, 52, 69], "area": 2201}, {"id": 5072762, "category_id": 88, "iscrowd": 0, "bbox": [48, 205, 41, 35], "area": 931}, {"id": 6452115, "category_id": 156, "iscrowd": 0, "bbox": [54, 158, 64, 92], "area": 1792}, {"id": 7758167, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 159, 174], "area": 13781}, {"id": 4411218, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 500, 158], "area": 54186}, {"id": 1975591, "category_id": 189, "iscrowd": 0, "bbox": [75, 196, 210, 73], "area": 2467}, {"id": 5787475, "category_id": 190, "iscrowd": 0, "bbox": [83, 285, 329, 51], "area": 10026}, {"id": 2635326, "category_id": 195, "iscrowd": 0, "bbox": [6, 75, 494, 242], "area": 16716}, {"id": 2251366, "category_id": 199, "iscrowd": 0, "bbox": [151, 102, 349, 94], "area": 5357}], "file_name": "000000283785.png", "image_id": 283785}, {"segments_info": [{"id": 8758979, "category_id": 51, "iscrowd": 0, "bbox": [217, 75, 195, 102], "area": 14429}, {"id": 7376294, "category_id": 51, "iscrowd": 0, "bbox": [95, 54, 123, 86], "area": 8604}, {"id": 1661913, "category_id": 57, "iscrowd": 0, "bbox": [247, 179, 62, 47], "area": 1172}, {"id": 461333, "category_id": 67, "iscrowd": 0, "bbox": [1, 100, 639, 316], "area": 9619}, {"id": 922130, "category_id": 107, "iscrowd": 0, "bbox": [285, 0, 100, 36], "area": 3050}, {"id": 5070178, "category_id": 188, "iscrowd": 0, "bbox": [138, 0, 170, 64], "area": 5924}, {"id": 2503308, "category_id": 189, "iscrowd": 0, "bbox": [0, 93, 640, 328], "area": 101106}, {"id": 1383198, "category_id": 190, "iscrowd": 0, "bbox": [126, 31, 165, 86], "area": 4830}, {"id": 2973337, "category_id": 196, "iscrowd": 0, "bbox": [60, 123, 343, 227], "area": 36768}, {"id": 3358275, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 147, 122], "area": 12944}], "file_name": "000000284106.png", "image_id": 284106}, {"segments_info": [{"id": 3495538, "category_id": 16, "iscrowd": 0, "bbox": [348, 161, 236, 240], "area": 22749}], "file_name": "000000284279.png", "image_id": 284279}, {"segments_info": [{"id": 5859167, "category_id": 67, "iscrowd": 0, "bbox": [64, 92, 435, 237], "area": 46784}, {"id": 6844518, "category_id": 189, "iscrowd": 0, "bbox": [64, 329, 436, 4], "area": 1738}, {"id": 1580834, "category_id": 190, "iscrowd": 0, "bbox": [49, 78, 263, 255], "area": 4263}, {"id": 4804176, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 394, 333], "area": 39177}], "file_name": "000000284282.png", "image_id": 284282}, {"segments_info": [{"id": 5735595, "category_id": 25, "iscrowd": 0, "bbox": [97, 124, 123, 111], "area": 5980}, {"id": 6130610, "category_id": 25, "iscrowd": 0, "bbox": [399, 166, 127, 105], "area": 6738}, {"id": 6459315, "category_id": 25, "iscrowd": 0, "bbox": [256, 139, 103, 109], "area": 4654}, {"id": 9278358, "category_id": 178, "iscrowd": 0, "bbox": [0, 220, 427, 72], "area": 19290}, {"id": 4939887, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 141], "area": 56629}, {"id": 12168866, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 63], "area": 23172}], "file_name": "000000284296.png", "image_id": 284296}, {"segments_info": [{"id": 4206222, "category_id": 1, "iscrowd": 0, "bbox": [438, 330, 31, 87], "area": 1480}, {"id": 658446, "category_id": 1, "iscrowd": 0, "bbox": [604, 320, 36, 250], "area": 5858}, {"id": 1908516, "category_id": 1, "iscrowd": 0, "bbox": [167, 307, 133, 287], "area": 20070}, {"id": 1710618, "category_id": 1, "iscrowd": 0, "bbox": [543, 330, 55, 183], "area": 6567}, {"id": 4737627, "category_id": 1, "iscrowd": 0, "bbox": [388, 316, 39, 91], "area": 1335}, {"id": 2301982, "category_id": 1, "iscrowd": 0, "bbox": [352, 315, 64, 214], "area": 9091}, {"id": 3948869, "category_id": 1, "iscrowd": 0, "bbox": [583, 321, 38, 128], "area": 1800}, {"id": 3619879, "category_id": 1, "iscrowd": 0, "bbox": [516, 315, 44, 139], "area": 2728}, {"id": 2105635, "category_id": 1, "iscrowd": 0, "bbox": [286, 327, 69, 202], "area": 10295}, {"id": 1908512, "category_id": 1, "iscrowd": 0, "bbox": [460, 317, 67, 202], "area": 7561}, {"id": 4279649, "category_id": 1, "iscrowd": 0, "bbox": [271, 342, 17, 35], "area": 292}, {"id": 6185837, "category_id": 1, "iscrowd": 0, "bbox": [464, 329, 20, 28], "area": 309}, {"id": 3160129, "category_id": 1, "iscrowd": 0, "bbox": [284, 336, 24, 55], "area": 451}, {"id": 5133404, "category_id": 1, "iscrowd": 1, "bbox": [112, 322, 335, 95], "area": 5486}, {"id": 5263738, "category_id": 3, "iscrowd": 0, "bbox": [572, 324, 30, 42], "area": 811}, {"id": 7303802, "category_id": 6, "iscrowd": 0, "bbox": [4, 321, 30, 29], "area": 806}, {"id": 6974587, "category_id": 6, "iscrowd": 0, "bbox": [99, 333, 38, 12], "area": 318}, {"id": 5262668, "category_id": 10, "iscrowd": 0, "bbox": [150, 278, 15, 31], "area": 376}, {"id": 2698026, "category_id": 10, "iscrowd": 0, "bbox": [122, 312, 7, 17], "area": 113}, {"id": 4277078, "category_id": 10, "iscrowd": 0, "bbox": [172, 288, 13, 24], "area": 181}, {"id": 2894668, "category_id": 10, "iscrowd": 0, "bbox": [428, 275, 14, 26], "area": 321}, {"id": 2829099, "category_id": 10, "iscrowd": 0, "bbox": [185, 176, 40, 69], "area": 1059}, {"id": 1907997, "category_id": 10, "iscrowd": 0, "bbox": [226, 156, 76, 115], "area": 4071}, {"id": 789773, "category_id": 27, "iscrowd": 0, "bbox": [195, 362, 84, 55], "area": 673}, {"id": 5789522, "category_id": 149, "iscrowd": 0, "bbox": [0, 339, 616, 163], "area": 28688}, {"id": 4474699, "category_id": 184, "iscrowd": 0, "bbox": [0, 261, 135, 91], "area": 5900}, {"id": 15919586, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 302, 316], "area": 66572}, {"id": 5531769, "category_id": 191, "iscrowd": 0, "bbox": [0, 345, 640, 249], "area": 61911}, {"id": 6450535, "category_id": 197, "iscrowd": 0, "bbox": [115, 0, 525, 367], "area": 132026}], "file_name": "000000284445.png", "image_id": 284445}, {"segments_info": [{"id": 2697513, "category_id": 17, "iscrowd": 0, "bbox": [37, 0, 428, 413], "area": 107531}, {"id": 9402283, "category_id": 44, "iscrowd": 0, "bbox": [37, 178, 61, 151], "area": 5233}, {"id": 8157828, "category_id": 44, "iscrowd": 0, "bbox": [177, 148, 47, 69], "area": 1812}, {"id": 8356997, "category_id": 81, "iscrowd": 0, "bbox": [2, 360, 561, 55], "area": 7207}, {"id": 12494764, "category_id": 90, "iscrowd": 0, "bbox": [116, 200, 23, 39], "area": 516}, {"id": 11777719, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 291], "area": 102099}], "file_name": "000000284623.png", "image_id": 284623}, {"segments_info": [{"id": 4084079, "category_id": 1, "iscrowd": 0, "bbox": [20, 165, 202, 168], "area": 19028}, {"id": 2766390, "category_id": 4, "iscrowd": 0, "bbox": [1, 156, 233, 344], "area": 25789}, {"id": 3488049, "category_id": 148, "iscrowd": 0, "bbox": [138, 104, 237, 138], "area": 18643}, {"id": 7635848, "category_id": 149, "iscrowd": 0, "bbox": [0, 112, 72, 48], "area": 1240}, {"id": 4672570, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 135, 116], "area": 4364}, {"id": 16645369, "category_id": 187, "iscrowd": 0, "bbox": [55, 0, 218, 35], "area": 4041}, {"id": 3758684, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 113595}], "file_name": "000000284698.png", "image_id": 284698}, {"segments_info": [{"id": 5461321, "category_id": 1, "iscrowd": 0, "bbox": [410, 176, 13, 20], "area": 103}, {"id": 7630737, "category_id": 1, "iscrowd": 0, "bbox": [524, 128, 7, 10], "area": 42}, {"id": 8613830, "category_id": 1, "iscrowd": 0, "bbox": [186, 145, 16, 20], "area": 135}, {"id": 9994200, "category_id": 1, "iscrowd": 0, "bbox": [402, 134, 6, 15], "area": 71}, {"id": 9009605, "category_id": 1, "iscrowd": 0, "bbox": [630, 120, 9, 23], "area": 147}, {"id": 10454986, "category_id": 1, "iscrowd": 0, "bbox": [373, 141, 13, 11], "area": 107}, {"id": 10456958, "category_id": 3, "iscrowd": 0, "bbox": [277, 138, 58, 13], "area": 400}, {"id": 12958920, "category_id": 3, "iscrowd": 0, "bbox": [80, 151, 75, 19], "area": 674}, {"id": 10723222, "category_id": 3, "iscrowd": 0, "bbox": [608, 126, 22, 20], "area": 278}, {"id": 4734526, "category_id": 3, "iscrowd": 0, "bbox": [148, 290, 230, 86], "area": 13848}, {"id": 7234138, "category_id": 3, "iscrowd": 0, "bbox": [0, 153, 54, 30], "area": 1379}, {"id": 12299441, "category_id": 3, "iscrowd": 0, "bbox": [357, 135, 58, 16], "area": 382}, {"id": 5392242, "category_id": 6, "iscrowd": 0, "bbox": [68, 135, 433, 175], "area": 50419}, {"id": 9340544, "category_id": 149, "iscrowd": 0, "bbox": [0, 140, 558, 196], "area": 14440}, {"id": 6450787, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 330], "area": 102516}, {"id": 9211018, "category_id": 185, "iscrowd": 0, "bbox": [0, 118, 640, 223], "area": 7599}, {"id": 11251119, "category_id": 191, "iscrowd": 0, "bbox": [0, 203, 640, 224], "area": 61935}, {"id": 15725297, "category_id": 197, "iscrowd": 0, "bbox": [64, 0, 576, 84], "area": 17218}], "file_name": "000000284725.png", "image_id": 284725}, {"segments_info": [{"id": 1645351, "category_id": 1, "iscrowd": 0, "bbox": [403, 54, 128, 205], "area": 14718}, {"id": 725537, "category_id": 1, "iscrowd": 0, "bbox": [189, 57, 82, 121], "area": 2721}, {"id": 1645606, "category_id": 1, "iscrowd": 0, "bbox": [276, 22, 106, 187], "area": 12442}, {"id": 4080986, "category_id": 1, "iscrowd": 0, "bbox": [40, 92, 312, 292], "area": 31026}, {"id": 4343705, "category_id": 1, "iscrowd": 0, "bbox": [419, 56, 221, 364], "area": 38481}, {"id": 8695767, "category_id": 39, "iscrowd": 0, "bbox": [40, 93, 320, 204], "area": 7091}, {"id": 6573871, "category_id": 130, "iscrowd": 0, "bbox": [397, 0, 104, 101], "area": 5941}, {"id": 460037, "category_id": 195, "iscrowd": 0, "bbox": [489, 224, 44, 48], "area": 1105}], "file_name": "000000284743.png", "image_id": 284743}, {"segments_info": [{"id": 6246998, "category_id": 10, "iscrowd": 0, "bbox": [142, 53, 144, 332], "area": 44751}, {"id": 13483455, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 200961}], "file_name": "000000284762.png", "image_id": 284762}, {"segments_info": [{"id": 4679600, "category_id": 1, "iscrowd": 0, "bbox": [1, 2, 507, 420], "area": 115563}, {"id": 7449036, "category_id": 47, "iscrowd": 0, "bbox": [462, 238, 69, 90], "area": 2031}, {"id": 2701378, "category_id": 49, "iscrowd": 0, "bbox": [351, 251, 51, 33], "area": 412}, {"id": 5015465, "category_id": 50, "iscrowd": 0, "bbox": [419, 255, 102, 105], "area": 767}, {"id": 6075085, "category_id": 51, "iscrowd": 0, "bbox": [429, 294, 211, 124], "area": 16594}, {"id": 13823224, "category_id": 67, "iscrowd": 0, "bbox": [383, 155, 257, 165], "area": 23566}, {"id": 4223142, "category_id": 77, "iscrowd": 0, "bbox": [110, 201, 143, 221], "area": 6944}, {"id": 14873851, "category_id": 181, "iscrowd": 0, "bbox": [212, 0, 428, 176], "area": 44496}, {"id": 5467509, "category_id": 189, "iscrowd": 0, "bbox": [405, 391, 235, 36], "area": 1628}, {"id": 7118515, "category_id": 196, "iscrowd": 0, "bbox": [632, 317, 8, 77], "area": 352}, {"id": 10665937, "category_id": 199, "iscrowd": 0, "bbox": [111, 0, 529, 325], "area": 56290}], "file_name": "000000284764.png", "image_id": 284764}, {"segments_info": [{"id": 3354938, "category_id": 1, "iscrowd": 0, "bbox": [86, 1, 551, 422], "area": 137956}, {"id": 2370475, "category_id": 44, "iscrowd": 0, "bbox": [155, 121, 245, 110], "area": 7869}, {"id": 9083016, "category_id": 181, "iscrowd": 0, "bbox": [128, 131, 358, 280], "area": 36065}, {"id": 3025706, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 82034}], "file_name": "000000284991.png", "image_id": 284991}, {"segments_info": [{"id": 6051925, "category_id": 1, "iscrowd": 0, "bbox": [1, 150, 423, 479], "area": 119192}, {"id": 15657703, "category_id": 47, "iscrowd": 0, "bbox": [195, 541, 64, 50], "area": 2409}, {"id": 9735818, "category_id": 77, "iscrowd": 0, "bbox": [337, 474, 67, 44], "area": 1204}, {"id": 15525077, "category_id": 149, "iscrowd": 0, "bbox": [256, 20, 171, 171], "area": 16607}, {"id": 6130802, "category_id": 184, "iscrowd": 0, "bbox": [0, 216, 82, 212], "area": 8788}, {"id": 6114362, "category_id": 189, "iscrowd": 0, "bbox": [0, 553, 427, 87], "area": 21145}, {"id": 14866375, "category_id": 190, "iscrowd": 0, "bbox": [0, 460, 333, 127], "area": 1267}, {"id": 16645627, "category_id": 191, "iscrowd": 0, "bbox": [307, 172, 107, 180], "area": 14476}, {"id": 4210224, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 549], "area": 67611}], "file_name": "000000285047.png", "image_id": 285047}, {"segments_info": [{"id": 3625353, "category_id": 86, "iscrowd": 0, "bbox": [22, 34, 403, 341], "area": 112425}], "file_name": "000000285349.png", "image_id": 285349}, {"segments_info": [{"id": 8749962, "category_id": 16, "iscrowd": 0, "bbox": [407, 250, 44, 78], "area": 1844}, {"id": 1776155, "category_id": 25, "iscrowd": 0, "bbox": [90, 122, 24, 32], "area": 355}, {"id": 8160149, "category_id": 25, "iscrowd": 0, "bbox": [192, 152, 73, 164], "area": 4341}, {"id": 4606036, "category_id": 25, "iscrowd": 0, "bbox": [113, 119, 77, 110], "area": 1565}, {"id": 4350033, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 273], "area": 66891}, {"id": 10534852, "category_id": 194, "iscrowd": 0, "bbox": [0, 285, 640, 196], "area": 113700}, {"id": 3750986, "category_id": 198, "iscrowd": 0, "bbox": [0, 33, 640, 311], "area": 118886}], "file_name": "000000285788.png", "image_id": 285788}, {"segments_info": [{"id": 2697771, "category_id": 1, "iscrowd": 0, "bbox": [2, 134, 124, 194], "area": 18233}, {"id": 1844265, "category_id": 1, "iscrowd": 0, "bbox": [222, 233, 142, 96], "area": 10224}, {"id": 1776153, "category_id": 1, "iscrowd": 0, "bbox": [394, 54, 106, 271], "area": 18142}, {"id": 4676980, "category_id": 25, "iscrowd": 0, "bbox": [85, 191, 98, 133], "area": 3859}, {"id": 5132366, "category_id": 25, "iscrowd": 0, "bbox": [127, 28, 144, 301], "area": 12951}, {"id": 9416642, "category_id": 154, "iscrowd": 0, "bbox": [69, 216, 394, 113], "area": 12691}, {"id": 7501668, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 236], "area": 55353}, {"id": 4870223, "category_id": 185, "iscrowd": 0, "bbox": [112, 183, 356, 105], "area": 9552}, {"id": 16448248, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 123], "area": 21762}], "file_name": "000000285894.png", "image_id": 285894}, {"segments_info": [{"id": 6590639, "category_id": 1, "iscrowd": 0, "bbox": [221, 95, 137, 211], "area": 17550}, {"id": 468809, "category_id": 44, "iscrowd": 0, "bbox": [28, 178, 20, 37], "area": 503}, {"id": 1718342, "category_id": 44, "iscrowd": 0, "bbox": [44, 183, 30, 47], "area": 1039}, {"id": 8826555, "category_id": 44, "iscrowd": 0, "bbox": [212, 100, 17, 32], "area": 351}, {"id": 1257281, "category_id": 44, "iscrowd": 0, "bbox": [191, 194, 43, 93], "area": 1716}, {"id": 1321270, "category_id": 44, "iscrowd": 0, "bbox": [191, 200, 19, 41], "area": 428}, {"id": 923171, "category_id": 44, "iscrowd": 0, "bbox": [127, 197, 24, 38], "area": 712}, {"id": 332314, "category_id": 44, "iscrowd": 0, "bbox": [4, 165, 22, 58], "area": 823}, {"id": 792093, "category_id": 44, "iscrowd": 0, "bbox": [83, 176, 37, 57], "area": 1412}, {"id": 1515303, "category_id": 44, "iscrowd": 0, "bbox": [169, 197, 26, 45], "area": 719}, {"id": 1317150, "category_id": 44, "iscrowd": 0, "bbox": [151, 194, 23, 41], "area": 729}, {"id": 4299966, "category_id": 48, "iscrowd": 0, "bbox": [91, 456, 98, 22], "area": 596}, {"id": 5417171, "category_id": 48, "iscrowd": 0, "bbox": [355, 454, 55, 20], "area": 316}, {"id": 1549522, "category_id": 50, "iscrowd": 0, "bbox": [270, 371, 97, 25], "area": 832}, {"id": 2583689, "category_id": 51, "iscrowd": 0, "bbox": [225, 333, 62, 55], "area": 2094}, {"id": 2127767, "category_id": 51, "iscrowd": 0, "bbox": [118, 270, 122, 72], "area": 6192}, {"id": 2058386, "category_id": 51, "iscrowd": 0, "bbox": [146, 336, 67, 53], "area": 2828}, {"id": 4936280, "category_id": 51, "iscrowd": 0, "bbox": [266, 435, 118, 110], "area": 7210}, {"id": 2111840, "category_id": 51, "iscrowd": 0, "bbox": [143, 475, 113, 106], "area": 9362}, {"id": 1984051, "category_id": 56, "iscrowd": 0, "bbox": [300, 449, 24, 18], "area": 231}, {"id": 2189152, "category_id": 56, "iscrowd": 0, "bbox": [272, 470, 17, 27], "area": 185}, {"id": 1995372, "category_id": 56, "iscrowd": 0, "bbox": [345, 491, 23, 28], "area": 368}, {"id": 1004618, "category_id": 56, "iscrowd": 0, "bbox": [307, 471, 14, 11], "area": 102}, {"id": 1140058, "category_id": 56, "iscrowd": 0, "bbox": [323, 489, 19, 13], "area": 179}, {"id": 1805442, "category_id": 56, "iscrowd": 0, "bbox": [320, 465, 12, 18], "area": 138}, {"id": 2834999, "category_id": 56, "iscrowd": 0, "bbox": [271, 444, 29, 33], "area": 649}, {"id": 1531998, "category_id": 56, "iscrowd": 0, "bbox": [308, 493, 28, 29], "area": 311}, {"id": 1337173, "category_id": 56, "iscrowd": 0, "bbox": [327, 468, 25, 28], "area": 329}, {"id": 617439, "category_id": 57, "iscrowd": 0, "bbox": [280, 331, 15, 10], "area": 94}, {"id": 292847, "category_id": 57, "iscrowd": 0, "bbox": [261, 310, 9, 9], "area": 60}, {"id": 411824, "category_id": 62, "iscrowd": 0, "bbox": [378, 403, 100, 111], "area": 5769}, {"id": 815025, "category_id": 67, "iscrowd": 0, "bbox": [42, 255, 431, 377], "area": 33381}, {"id": 3489185, "category_id": 84, "iscrowd": 0, "bbox": [459, 373, 19, 34], "area": 255}, {"id": 2243154, "category_id": 84, "iscrowd": 0, "bbox": [436, 329, 42, 72], "area": 1890}, {"id": 1782630, "category_id": 84, "iscrowd": 0, "bbox": [429, 324, 47, 50], "area": 557}, {"id": 2189470, "category_id": 100, "iscrowd": 0, "bbox": [164, 105, 54, 65], "area": 2044}, {"id": 401748, "category_id": 118, "iscrowd": 0, "bbox": [0, 320, 478, 320], "area": 31816}, {"id": 1848644, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 226, 124], "area": 22953}, {"id": 726554, "category_id": 188, "iscrowd": 0, "bbox": [0, 170, 232, 138], "area": 9156}, {"id": 1060693, "category_id": 189, "iscrowd": 0, "bbox": [0, 119, 458, 521], "area": 28562}, {"id": 7053235, "category_id": 195, "iscrowd": 0, "bbox": [29, 80, 233, 94], "area": 5211}, {"id": 1479120, "category_id": 196, "iscrowd": 0, "bbox": [233, 296, 79, 76], "area": 2145}, {"id": 4371672, "category_id": 199, "iscrowd": 0, "bbox": [218, 0, 260, 172], "area": 35284}], "file_name": "000000286182.png", "image_id": 286182}, {"segments_info": [{"id": 10066849, "category_id": 1, "iscrowd": 0, "bbox": [267, 282, 11, 27], "area": 220}, {"id": 4017248, "category_id": 1, "iscrowd": 0, "bbox": [232, 291, 16, 7], "area": 77}, {"id": 4937849, "category_id": 1, "iscrowd": 0, "bbox": [139, 274, 21, 45], "area": 623}, {"id": 5529475, "category_id": 1, "iscrowd": 0, "bbox": [370, 223, 29, 78], "area": 1100}, {"id": 11840675, "category_id": 9, "iscrowd": 0, "bbox": [96, 21, 446, 349], "area": 75462}, {"id": 3691385, "category_id": 18, "iscrowd": 0, "bbox": [395, 286, 47, 20], "area": 484}, {"id": 10392490, "category_id": 92, "iscrowd": 0, "bbox": [77, 269, 22, 42], "area": 621}, {"id": 11250862, "category_id": 148, "iscrowd": 0, "bbox": [0, 310, 640, 115], "area": 47125}, {"id": 8353635, "category_id": 184, "iscrowd": 0, "bbox": [0, 208, 638, 117], "area": 19591}, {"id": 8552320, "category_id": 185, "iscrowd": 0, "bbox": [110, 286, 69, 35], "area": 1335}, {"id": 13614250, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 289], "area": 122218}, {"id": 11903626, "category_id": 192, "iscrowd": 0, "bbox": [384, 262, 256, 48], "area": 1514}, {"id": 8548963, "category_id": 197, "iscrowd": 0, "bbox": [63, 302, 51, 38], "area": 852}], "file_name": "000000286422.png", "image_id": 286422}, {"segments_info": [{"id": 1119512, "category_id": 27, "iscrowd": 0, "bbox": [25, 3, 102, 121], "area": 8390}, {"id": 4212852, "category_id": 33, "iscrowd": 0, "bbox": [349, 12, 106, 128], "area": 9735}, {"id": 6515068, "category_id": 33, "iscrowd": 0, "bbox": [60, 21, 251, 281], "area": 47610}, {"id": 3617571, "category_id": 88, "iscrowd": 0, "bbox": [320, 104, 45, 40], "area": 1120}, {"id": 2107702, "category_id": 88, "iscrowd": 0, "bbox": [321, 51, 38, 54], "area": 1425}, {"id": 865118, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 99, 181], "area": 6150}, {"id": 7111072, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 455, 310], "area": 42032}], "file_name": "000000286458.png", "image_id": 286458}, {"segments_info": [{"id": 8617675, "category_id": 1, "iscrowd": 0, "bbox": [163, 286, 18, 26], "area": 294}, {"id": 12433351, "category_id": 1, "iscrowd": 0, "bbox": [144, 289, 17, 24], "area": 280}, {"id": 9468275, "category_id": 1, "iscrowd": 0, "bbox": [300, 289, 14, 19], "area": 149}, {"id": 7637924, "category_id": 22, "iscrowd": 0, "bbox": [234, 179, 292, 201], "area": 23449}, {"id": 4478805, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 359], "area": 96871}, {"id": 11515321, "category_id": 185, "iscrowd": 0, "bbox": [0, 304, 565, 45], "area": 2429}, {"id": 14993576, "category_id": 187, "iscrowd": 0, "bbox": [31, 0, 609, 97], "area": 8361}, {"id": 9941956, "category_id": 193, "iscrowd": 0, "bbox": [272, 130, 47, 59], "area": 1676}, {"id": 7042946, "category_id": 194, "iscrowd": 0, "bbox": [0, 315, 640, 112], "area": 41077}, {"id": 7896446, "category_id": 197, "iscrowd": 0, "bbox": [30, 0, 610, 360], "area": 82005}, {"id": 10137795, "category_id": 198, "iscrowd": 0, "bbox": [506, 272, 18, 25], "area": 114}, {"id": 10395814, "category_id": 199, "iscrowd": 0, "bbox": [0, 365, 559, 62], "area": 2724}], "file_name": "000000286503.png", "image_id": 286503}, {"segments_info": [{"id": 5853027, "category_id": 7, "iscrowd": 0, "bbox": [114, 153, 488, 140], "area": 39705}, {"id": 13877177, "category_id": 159, "iscrowd": 0, "bbox": [0, 179, 640, 255], "area": 121812}, {"id": 8151143, "category_id": 184, "iscrowd": 0, "bbox": [0, 85, 640, 184], "area": 32649}, {"id": 14730670, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 148], "area": 83282}], "file_name": "000000286507.png", "image_id": 286507}, {"segments_info": [{"id": 5263228, "category_id": 1, "iscrowd": 0, "bbox": [1, 157, 522, 348], "area": 99943}, {"id": 2170921, "category_id": 77, "iscrowd": 0, "bbox": [423, 319, 60, 134], "area": 1070}, {"id": 11322577, "category_id": 130, "iscrowd": 0, "bbox": [155, 87, 103, 128], "area": 574}, {"id": 9081245, "category_id": 181, "iscrowd": 0, "bbox": [209, 0, 431, 514], "area": 118687}, {"id": 8095369, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 342, 243], "area": 54250}, {"id": 16184820, "category_id": 187, "iscrowd": 0, "bbox": [0, 215, 59, 222], "area": 6048}, {"id": 6381411, "category_id": 197, "iscrowd": 0, "bbox": [0, 210, 224, 193], "area": 29344}], "file_name": "000000286523.png", "image_id": 286523}, {"segments_info": [{"id": 5264255, "category_id": 1, "iscrowd": 0, "bbox": [53, 12, 334, 350], "area": 63591}, {"id": 5064782, "category_id": 1, "iscrowd": 0, "bbox": [279, 59, 361, 421], "area": 85442}, {"id": 1407340, "category_id": 28, "iscrowd": 0, "bbox": [35, 146, 36, 103], "area": 1106}, {"id": 3105875, "category_id": 28, "iscrowd": 0, "bbox": [12, 140, 36, 105], "area": 1370}, {"id": 5991553, "category_id": 44, "iscrowd": 0, "bbox": [0, 383, 19, 97], "area": 315}, {"id": 8554374, "category_id": 44, "iscrowd": 0, "bbox": [11, 379, 58, 101], "area": 3281}, {"id": 9080212, "category_id": 47, "iscrowd": 0, "bbox": [250, 329, 30, 56], "area": 1433}, {"id": 5469327, "category_id": 47, "iscrowd": 0, "bbox": [1, 392, 17, 88], "area": 1237}, {"id": 8761301, "category_id": 47, "iscrowd": 0, "bbox": [191, 448, 67, 32], "area": 1742}, {"id": 9012357, "category_id": 48, "iscrowd": 0, "bbox": [231, 387, 107, 14], "area": 486}, {"id": 4935002, "category_id": 48, "iscrowd": 0, "bbox": [154, 379, 83, 47], "area": 389}, {"id": 9079175, "category_id": 49, "iscrowd": 0, "bbox": [300, 392, 44, 9], "area": 239}, {"id": 3033190, "category_id": 49, "iscrowd": 0, "bbox": [40, 405, 73, 26], "area": 502}, {"id": 5541573, "category_id": 59, "iscrowd": 0, "bbox": [39, 357, 174, 95], "area": 10988}, {"id": 7976171, "category_id": 59, "iscrowd": 0, "bbox": [186, 406, 193, 68], "area": 8816}, {"id": 3419945, "category_id": 62, "iscrowd": 0, "bbox": [431, 401, 62, 72], "area": 2853}, {"id": 1578521, "category_id": 62, "iscrowd": 0, "bbox": [16, 270, 40, 112], "area": 3105}, {"id": 11843769, "category_id": 67, "iscrowd": 0, "bbox": [10, 335, 431, 145], "area": 18505}, {"id": 12962771, "category_id": 109, "iscrowd": 0, "bbox": [282, 0, 169, 291], "area": 23689}, {"id": 1842467, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 40, 256], "area": 7082}, {"id": 3030872, "category_id": 181, "iscrowd": 0, "bbox": [448, 0, 192, 278], "area": 34055}, {"id": 5599119, "category_id": 199, "iscrowd": 0, "bbox": [16, 0, 286, 297], "area": 29184}], "file_name": "000000286553.png", "image_id": 286553}, {"segments_info": [{"id": 6846817, "category_id": 1, "iscrowd": 0, "bbox": [96, 2, 275, 498], "area": 58148}, {"id": 6983519, "category_id": 88, "iscrowd": 0, "bbox": [6, 85, 244, 415], "area": 71699}, {"id": 6051369, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 371, 500], "area": 54916}], "file_name": "000000286660.png", "image_id": 286660}, {"segments_info": [{"id": 6711146, "category_id": 17, "iscrowd": 0, "bbox": [37, 107, 603, 342], "area": 157827}, {"id": 6117989, "category_id": 100, "iscrowd": 0, "bbox": [249, 0, 270, 58], "area": 8036}, {"id": 4211542, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 582, 185], "area": 10126}, {"id": 1978963, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 141, 126], "area": 9674}, {"id": 4542534, "category_id": 200, "iscrowd": 0, "bbox": [0, 416, 113, 65], "area": 6033}], "file_name": "000000286708.png", "image_id": 286708}, {"segments_info": [{"id": 4279386, "category_id": 25, "iscrowd": 0, "bbox": [104, 97, 182, 154], "area": 9754}, {"id": 4739936, "category_id": 25, "iscrowd": 0, "bbox": [58, 75, 91, 85], "area": 3257}, {"id": 4542042, "category_id": 25, "iscrowd": 0, "bbox": [122, 314, 135, 112], "area": 7514}, {"id": 4081746, "category_id": 25, "iscrowd": 0, "bbox": [112, 196, 155, 118], "area": 7376}, {"id": 1909791, "category_id": 184, "iscrowd": 0, "bbox": [206, 0, 127, 458], "area": 22050}, {"id": 5725792, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 333, 500], "area": 116210}], "file_name": "000000286849.png", "image_id": 286849}, {"segments_info": [{"id": 8485455, "category_id": 70, "iscrowd": 0, "bbox": [233, 341, 148, 225], "area": 17084}, {"id": 3035776, "category_id": 112, "iscrowd": 0, "bbox": [458, 105, 22, 189], "area": 2969}, {"id": 10916694, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 440, 640], "area": 202681}, {"id": 4740445, "category_id": 177, "iscrowd": 0, "bbox": [426, 24, 54, 360], "area": 6313}, {"id": 11578269, "category_id": 186, "iscrowd": 0, "bbox": [95, 0, 385, 58], "area": 14508}, {"id": 4018772, "category_id": 190, "iscrowd": 0, "bbox": [56, 290, 424, 350], "area": 49901}, {"id": 6843485, "category_id": 199, "iscrowd": 0, "bbox": [129, 37, 351, 522], "area": 8981}], "file_name": "000000286907.png", "image_id": 286907}, {"segments_info": [{"id": 2106929, "category_id": 47, "iscrowd": 0, "bbox": [153, 289, 59, 63], "area": 2879}, {"id": 8625574, "category_id": 51, "iscrowd": 0, "bbox": [37, 8, 86, 79], "area": 5264}, {"id": 7574712, "category_id": 51, "iscrowd": 0, "bbox": [106, 95, 108, 106], "area": 8603}, {"id": 11126749, "category_id": 51, "iscrowd": 0, "bbox": [15, 300, 144, 123], "area": 14538}, {"id": 12834274, "category_id": 51, "iscrowd": 0, "bbox": [6, 437, 133, 146], "area": 16066}, {"id": 11785441, "category_id": 51, "iscrowd": 0, "bbox": [396, 487, 137, 141], "area": 14496}, {"id": 6054512, "category_id": 51, "iscrowd": 0, "bbox": [146, 507, 77, 77], "area": 5279}, {"id": 6521768, "category_id": 51, "iscrowd": 0, "bbox": [222, 306, 96, 107], "area": 8422}, {"id": 12370364, "category_id": 51, "iscrowd": 0, "bbox": [207, 218, 73, 43], "area": 2542}, {"id": 4357285, "category_id": 51, "iscrowd": 0, "bbox": [221, 515, 97, 118], "area": 9776}, {"id": 2042432, "category_id": 51, "iscrowd": 0, "bbox": [214, 87, 103, 125], "area": 10165}, {"id": 11979225, "category_id": 51, "iscrowd": 0, "bbox": [6, 72, 93, 139], "area": 10877}, {"id": 12697564, "category_id": 51, "iscrowd": 0, "bbox": [323, 345, 82, 110], "area": 7293}, {"id": 8891085, "category_id": 51, "iscrowd": 1, "bbox": [63, 0, 577, 640], "area": 91746}, {"id": 6261955, "category_id": 60, "iscrowd": 0, "bbox": [553, 193, 65, 57], "area": 2937}, {"id": 7501186, "category_id": 67, "iscrowd": 0, "bbox": [6, 518, 239, 115], "area": 7616}, {"id": 6847115, "category_id": 67, "iscrowd": 0, "bbox": [1, 216, 323, 207], "area": 36610}, {"id": 11714513, "category_id": 67, "iscrowd": 0, "bbox": [324, 242, 313, 73], "area": 6635}, {"id": 6517385, "category_id": 67, "iscrowd": 0, "bbox": [320, 322, 313, 307], "area": 67424}, {"id": 9804964, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 640], "area": 42097}, {"id": 7574714, "category_id": 196, "iscrowd": 0, "bbox": [134, 0, 199, 527], "area": 25564}], "file_name": "000000286908.png", "image_id": 286908}, {"segments_info": [{"id": 5331300, "category_id": 22, "iscrowd": 0, "bbox": [252, 242, 20, 12], "area": 170}, {"id": 4871008, "category_id": 22, "iscrowd": 0, "bbox": [52, 225, 35, 16], "area": 410}, {"id": 4739164, "category_id": 22, "iscrowd": 0, "bbox": [489, 224, 48, 24], "area": 914}, {"id": 3949388, "category_id": 22, "iscrowd": 0, "bbox": [0, 217, 26, 21], "area": 413}, {"id": 4475477, "category_id": 22, "iscrowd": 0, "bbox": [297, 233, 33, 21], "area": 440}, {"id": 5134179, "category_id": 22, "iscrowd": 0, "bbox": [363, 240, 25, 10], "area": 174}, {"id": 4805216, "category_id": 22, "iscrowd": 0, "bbox": [115, 218, 52, 32], "area": 1046}, {"id": 3620168, "category_id": 22, "iscrowd": 0, "bbox": [330, 313, 110, 72], "area": 4404}, {"id": 5133921, "category_id": 22, "iscrowd": 0, "bbox": [272, 240, 23, 13], "area": 210}, {"id": 10656663, "category_id": 178, "iscrowd": 0, "bbox": [0, 358, 640, 103], "area": 19678}, {"id": 14930888, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 147], "area": 64927}, {"id": 5530988, "category_id": 192, "iscrowd": 0, "bbox": [0, 77, 640, 153], "area": 73728}, {"id": 6256516, "category_id": 193, "iscrowd": 0, "bbox": [0, 202, 640, 100], "area": 39701}, {"id": 8819364, "category_id": 194, "iscrowd": 0, "bbox": [0, 269, 640, 211], "area": 100676}], "file_name": "000000286994.png", "image_id": 286994}, {"segments_info": [{"id": 3487546, "category_id": 1, "iscrowd": 0, "bbox": [333, 176, 22, 52], "area": 518}, {"id": 7169907, "category_id": 1, "iscrowd": 0, "bbox": [329, 177, 9, 46], "area": 225}, {"id": 3948873, "category_id": 1, "iscrowd": 0, "bbox": [248, 174, 20, 56], "area": 561}, {"id": 3553850, "category_id": 1, "iscrowd": 0, "bbox": [137, 157, 31, 91], "area": 1879}, {"id": 4014403, "category_id": 1, "iscrowd": 0, "bbox": [101, 168, 14, 59], "area": 275}, {"id": 8881789, "category_id": 1, "iscrowd": 0, "bbox": [432, 184, 7, 9], "area": 51}, {"id": 6842214, "category_id": 3, "iscrowd": 0, "bbox": [476, 190, 24, 37], "area": 689}, {"id": 8224123, "category_id": 3, "iscrowd": 0, "bbox": [0, 226, 129, 145], "area": 13058}, {"id": 6120793, "category_id": 3, "iscrowd": 0, "bbox": [0, 183, 95, 73], "area": 1364}, {"id": 8422271, "category_id": 3, "iscrowd": 0, "bbox": [305, 186, 22, 30], "area": 338}, {"id": 6452602, "category_id": 3, "iscrowd": 0, "bbox": [353, 189, 29, 32], "area": 829}, {"id": 7895677, "category_id": 3, "iscrowd": 0, "bbox": [265, 198, 15, 16], "area": 165}, {"id": 8224127, "category_id": 8, "iscrowd": 0, "bbox": [382, 176, 84, 54], "area": 3389}, {"id": 5724249, "category_id": 8, "iscrowd": 0, "bbox": [458, 182, 41, 31], "area": 730}, {"id": 3755663, "category_id": 10, "iscrowd": 0, "bbox": [154, 64, 14, 32], "area": 375}, {"id": 3289902, "category_id": 10, "iscrowd": 0, "bbox": [109, 19, 42, 36], "area": 1361}, {"id": 2371149, "category_id": 10, "iscrowd": 0, "bbox": [110, 61, 41, 37], "area": 1224}, {"id": 10000534, "category_id": 149, "iscrowd": 0, "bbox": [86, 214, 414, 161], "area": 47304}, {"id": 2375731, "category_id": 184, "iscrowd": 0, "bbox": [0, 25, 500, 231], "area": 21689}, {"id": 16579836, "category_id": 187, "iscrowd": 0, "bbox": [210, 0, 290, 104], "area": 16443}, {"id": 7501687, "category_id": 191, "iscrowd": 0, "bbox": [92, 199, 273, 70], "area": 5065}, {"id": 6451841, "category_id": 195, "iscrowd": 0, "bbox": [248, 207, 11, 18], "area": 112}, {"id": 8422790, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 213], "area": 26182}], "file_name": "000000287291.png", "image_id": 287291}, {"segments_info": [{"id": 2698033, "category_id": 1, "iscrowd": 0, "bbox": [175, 100, 112, 301], "area": 12500}, {"id": 1382694, "category_id": 1, "iscrowd": 0, "bbox": [68, 57, 266, 457], "area": 50840}, {"id": 1185570, "category_id": 44, "iscrowd": 0, "bbox": [445, 268, 13, 47], "area": 251}, {"id": 2309962, "category_id": 44, "iscrowd": 0, "bbox": [434, 268, 16, 20], "area": 258}, {"id": 1648186, "category_id": 44, "iscrowd": 0, "bbox": [390, 270, 36, 119], "area": 3103}, {"id": 1583151, "category_id": 44, "iscrowd": 0, "bbox": [425, 287, 34, 110], "area": 2455}, {"id": 2170928, "category_id": 44, "iscrowd": 0, "bbox": [465, 290, 4, 10], "area": 33}, {"id": 4816037, "category_id": 47, "iscrowd": 0, "bbox": [178, 489, 98, 149], "area": 12909}, {"id": 6132154, "category_id": 47, "iscrowd": 0, "bbox": [78, 596, 116, 44], "area": 3915}, {"id": 1387079, "category_id": 49, "iscrowd": 0, "bbox": [270, 363, 33, 19], "area": 90}, {"id": 4610929, "category_id": 49, "iscrowd": 0, "bbox": [212, 455, 143, 31], "area": 903}, {"id": 3951951, "category_id": 51, "iscrowd": 0, "bbox": [288, 306, 32, 18], "area": 433}, {"id": 5867691, "category_id": 59, "iscrowd": 0, "bbox": [229, 359, 123, 31], "area": 1706}, {"id": 5213104, "category_id": 59, "iscrowd": 0, "bbox": [203, 394, 156, 46], "area": 5653}, {"id": 6852262, "category_id": 73, "iscrowd": 0, "bbox": [0, 574, 112, 66], "area": 5303}, {"id": 4021635, "category_id": 107, "iscrowd": 0, "bbox": [138, 335, 340, 209], "area": 15713}, {"id": 5272189, "category_id": 112, "iscrowd": 0, "bbox": [242, 108, 62, 216], "area": 5639}, {"id": 1600417, "category_id": 122, "iscrowd": 0, "bbox": [275, 298, 153, 149], "area": 4020}, {"id": 15988721, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 342, 86], "area": 26340}, {"id": 8821928, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 478, 454], "area": 31787}, {"id": 2321574, "category_id": 189, "iscrowd": 0, "bbox": [0, 503, 478, 137], "area": 35450}, {"id": 2451651, "category_id": 190, "iscrowd": 0, "bbox": [0, 425, 146, 89], "area": 7957}, {"id": 8959171, "category_id": 195, "iscrowd": 0, "bbox": [392, 251, 27, 28], "area": 406}, {"id": 6198699, "category_id": 196, "iscrowd": 0, "bbox": [299, 269, 106, 130], "area": 1510}, {"id": 6530502, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 478, 426], "area": 43229}], "file_name": "000000287347.png", "image_id": 287347}, {"segments_info": [{"id": 7507152, "category_id": 1, "iscrowd": 0, "bbox": [250, 0, 389, 636], "area": 207842}, {"id": 5073338, "category_id": 1, "iscrowd": 0, "bbox": [1, 4, 304, 630], "area": 173523}, {"id": 329036, "category_id": 32, "iscrowd": 0, "bbox": [494, 447, 136, 182], "area": 11032}], "file_name": "000000287527.png", "image_id": 287527}, {"segments_info": [{"id": 6383209, "category_id": 25, "iscrowd": 0, "bbox": [63, 110, 346, 246], "area": 30874}, {"id": 5133659, "category_id": 25, "iscrowd": 0, "bbox": [239, 244, 68, 104], "area": 4001}, {"id": 4941685, "category_id": 112, "iscrowd": 0, "bbox": [192, 0, 122, 346], "area": 21446}, {"id": 6122321, "category_id": 161, "iscrowd": 0, "bbox": [0, 333, 640, 130], "area": 22109}, {"id": 15921903, "category_id": 181, "iscrowd": 0, "bbox": [506, 52, 37, 171], "area": 4955}, {"id": 5333348, "category_id": 185, "iscrowd": 0, "bbox": [0, 247, 640, 136], "area": 46812}, {"id": 13487260, "category_id": 186, "iscrowd": 0, "bbox": [519, 28, 27, 26], "area": 490}, {"id": 6516080, "category_id": 190, "iscrowd": 0, "bbox": [0, 432, 640, 48], "area": 18286}, {"id": 6517370, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 283], "area": 114626}], "file_name": "000000287545.png", "image_id": 287545}, {"segments_info": [{"id": 4741742, "category_id": 17, "iscrowd": 0, "bbox": [137, 6, 503, 396], "area": 101034}, {"id": 1973534, "category_id": 76, "iscrowd": 0, "bbox": [1, 396, 639, 84], "area": 42196}, {"id": 11974074, "category_id": 84, "iscrowd": 0, "bbox": [468, 0, 172, 66], "area": 8928}, {"id": 3759751, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 129097}, {"id": 9670802, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 595, 202], "area": 2999}], "file_name": "000000287649.png", "image_id": 287649}, {"segments_info": [{"id": 8036034, "category_id": 49, "iscrowd": 0, "bbox": [236, 27, 82, 77], "area": 1658}, {"id": 1392276, "category_id": 57, "iscrowd": 0, "bbox": [422, 192, 192, 73], "area": 8225}, {"id": 3429023, "category_id": 57, "iscrowd": 0, "bbox": [294, 189, 182, 139], "area": 12413}, {"id": 3422287, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 235203}, {"id": 8214347, "category_id": 84, "iscrowd": 0, "bbox": [0, 314, 81, 161], "area": 7615}, {"id": 2895428, "category_id": 188, "iscrowd": 0, "bbox": [320, 0, 320, 130], "area": 25019}], "file_name": "000000287667.png", "image_id": 287667}, {"segments_info": [{"id": 9211531, "category_id": 44, "iscrowd": 0, "bbox": [419, 210, 22, 87], "area": 1529}, {"id": 8291979, "category_id": 44, "iscrowd": 0, "bbox": [439, 213, 25, 91], "area": 1974}, {"id": 5077153, "category_id": 47, "iscrowd": 0, "bbox": [410, 288, 25, 36], "area": 775}, {"id": 5271955, "category_id": 47, "iscrowd": 0, "bbox": [608, 350, 32, 54], "area": 1513}, {"id": 11255233, "category_id": 81, "iscrowd": 0, "bbox": [422, 334, 159, 66], "area": 7384}, {"id": 16317692, "category_id": 130, "iscrowd": 0, "bbox": [341, 70, 47, 57], "area": 2075}, {"id": 4420483, "category_id": 133, "iscrowd": 0, "bbox": [376, 0, 264, 255], "area": 58483}, {"id": 9804441, "category_id": 168, "iscrowd": 0, "bbox": [171, 7, 197, 427], "area": 3447}, {"id": 6255999, "category_id": 176, "iscrowd": 0, "bbox": [0, 226, 344, 254], "area": 38266}, {"id": 3362155, "category_id": 188, "iscrowd": 0, "bbox": [296, 233, 344, 247], "area": 59104}, {"id": 7310742, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 289], "area": 97694}], "file_name": "000000287714.png", "image_id": 287714}, {"segments_info": [{"id": 5589326, "category_id": 1, "iscrowd": 0, "bbox": [366, 190, 9, 12], "area": 56}, {"id": 4272427, "category_id": 1, "iscrowd": 0, "bbox": [156, 160, 7, 20], "area": 79}, {"id": 4143160, "category_id": 1, "iscrowd": 0, "bbox": [412, 205, 11, 42], "area": 265}, {"id": 5062984, "category_id": 1, "iscrowd": 0, "bbox": [399, 215, 13, 19], "area": 149}, {"id": 4010030, "category_id": 1, "iscrowd": 0, "bbox": [419, 205, 15, 52], "area": 378}, {"id": 2235934, "category_id": 1, "iscrowd": 0, "bbox": [450, 222, 10, 49], "area": 296}, {"id": 2499881, "category_id": 1, "iscrowd": 0, "bbox": [437, 219, 14, 53], "area": 409}, {"id": 4867658, "category_id": 1, "iscrowd": 0, "bbox": [433, 206, 7, 26], "area": 79}, {"id": 4602169, "category_id": 1, "iscrowd": 0, "bbox": [387, 193, 14, 24], "area": 168}, {"id": 8486529, "category_id": 7, "iscrowd": 0, "bbox": [201, 127, 203, 187], "area": 17353}, {"id": 9466229, "category_id": 15, "iscrowd": 0, "bbox": [103, 257, 23, 30], "area": 250}, {"id": 9925737, "category_id": 15, "iscrowd": 0, "bbox": [118, 227, 21, 24], "area": 151}, {"id": 8423822, "category_id": 31, "iscrowd": 0, "bbox": [447, 250, 9, 12], "area": 73}, {"id": 1446418, "category_id": 33, "iscrowd": 0, "bbox": [422, 241, 8, 14], "area": 86}, {"id": 1249811, "category_id": 33, "iscrowd": 0, "bbox": [432, 246, 14, 21], "area": 207}, {"id": 6646642, "category_id": 125, "iscrowd": 0, "bbox": [222, 203, 343, 231], "area": 11759}, {"id": 13222072, "category_id": 130, "iscrowd": 0, "bbox": [37, 128, 103, 53], "area": 714}, {"id": 10856624, "category_id": 144, "iscrowd": 0, "bbox": [49, 166, 170, 268], "area": 26164}, {"id": 6250853, "category_id": 147, "iscrowd": 0, "bbox": [167, 116, 327, 318], "area": 37238}, {"id": 7569029, "category_id": 184, "iscrowd": 0, "bbox": [0, 32, 640, 208], "area": 25253}, {"id": 7825251, "category_id": 185, "iscrowd": 0, "bbox": [0, 98, 640, 336], "area": 36899}, {"id": 16579578, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 108], "area": 54308}, {"id": 11251893, "category_id": 191, "iscrowd": 0, "bbox": [401, 237, 239, 197], "area": 20755}, {"id": 8823721, "category_id": 193, "iscrowd": 0, "bbox": [34, 86, 606, 209], "area": 5700}, {"id": 10201270, "category_id": 194, "iscrowd": 0, "bbox": [157, 149, 17, 22], "area": 253}, {"id": 11774379, "category_id": 197, "iscrowd": 0, "bbox": [233, 83, 362, 112], "area": 2279}], "file_name": "000000287874.png", "image_id": 287874}, {"segments_info": [{"id": 4550790, "category_id": 54, "iscrowd": 0, "bbox": [1, 0, 447, 446], "area": 137803}, {"id": 4870262, "category_id": 196, "iscrowd": 0, "bbox": [136, 175, 464, 305], "area": 52997}], "file_name": "000000287959.png", "image_id": 287959}, {"segments_info": [{"id": 2631461, "category_id": 1, "iscrowd": 0, "bbox": [551, 197, 52, 163], "area": 5276}, {"id": 9472906, "category_id": 8, "iscrowd": 0, "bbox": [237, 234, 21, 8], "area": 143}, {"id": 7358784, "category_id": 28, "iscrowd": 0, "bbox": [531, 162, 95, 59], "area": 2197}, {"id": 3555641, "category_id": 148, "iscrowd": 0, "bbox": [0, 250, 297, 206], "area": 43913}, {"id": 1258021, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 309], "area": 57171}, {"id": 14996947, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 593, 122], "area": 52590}, {"id": 3752755, "category_id": 192, "iscrowd": 0, "bbox": [0, 93, 396, 112], "area": 23110}, {"id": 1589812, "category_id": 196, "iscrowd": 0, "bbox": [0, 269, 364, 184], "area": 14547}, {"id": 5791586, "category_id": 197, "iscrowd": 0, "bbox": [160, 92, 480, 388], "area": 90257}], "file_name": "000000288042.png", "image_id": 288042}, {"segments_info": [{"id": 6518359, "category_id": 70, "iscrowd": 0, "bbox": [122, 337, 238, 252], "area": 44094}, {"id": 11511979, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 108, 640], "area": 37121}, {"id": 10446092, "category_id": 176, "iscrowd": 0, "bbox": [12, 0, 482, 561], "area": 143313}, {"id": 3757921, "category_id": 190, "iscrowd": 0, "bbox": [98, 534, 421, 106], "area": 36150}, {"id": 7299904, "category_id": 199, "iscrowd": 0, "bbox": [411, 0, 108, 573], "area": 21819}], "file_name": "000000288062.png", "image_id": 288062}, {"segments_info": [{"id": 6130590, "category_id": 77, "iscrowd": 0, "bbox": [10, 47, 155, 300], "area": 39655}, {"id": 1517610, "category_id": 181, "iscrowd": 0, "bbox": [0, 56, 76, 434], "area": 15470}, {"id": 6921381, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 155035}], "file_name": "000000288391.png", "image_id": 288391}, {"segments_info": [{"id": 3884599, "category_id": 1, "iscrowd": 0, "bbox": [90, 150, 9, 25], "area": 142}, {"id": 5658718, "category_id": 1, "iscrowd": 0, "bbox": [147, 140, 5, 9], "area": 39}, {"id": 8355715, "category_id": 1, "iscrowd": 0, "bbox": [124, 141, 8, 6], "area": 27}, {"id": 5591903, "category_id": 1, "iscrowd": 0, "bbox": [89, 180, 37, 87], "area": 1466}, {"id": 5397330, "category_id": 1, "iscrowd": 0, "bbox": [47, 148, 10, 28], "area": 161}, {"id": 3552307, "category_id": 1, "iscrowd": 0, "bbox": [277, 162, 62, 124], "area": 3189}, {"id": 2895159, "category_id": 1, "iscrowd": 0, "bbox": [251, 195, 24, 39], "area": 402}, {"id": 5262915, "category_id": 9, "iscrowd": 0, "bbox": [471, 135, 29, 11], "area": 252}, {"id": 6116423, "category_id": 9, "iscrowd": 0, "bbox": [424, 134, 10, 2], "area": 19}, {"id": 7565159, "category_id": 9, "iscrowd": 0, "bbox": [348, 130, 12, 4], "area": 33}, {"id": 6906969, "category_id": 9, "iscrowd": 0, "bbox": [379, 131, 7, 3], "area": 16}, {"id": 7499363, "category_id": 9, "iscrowd": 0, "bbox": [455, 140, 16, 4], "area": 50}, {"id": 7169624, "category_id": 9, "iscrowd": 0, "bbox": [401, 131, 9, 5], "area": 26}, {"id": 6511437, "category_id": 9, "iscrowd": 0, "bbox": [439, 132, 10, 5], "area": 37}, {"id": 7961242, "category_id": 38, "iscrowd": 0, "bbox": [155, 132, 140, 70], "area": 2831}, {"id": 5065799, "category_id": 128, "iscrowd": 0, "bbox": [461, 123, 39, 15], "area": 410}, {"id": 9870752, "category_id": 154, "iscrowd": 0, "bbox": [0, 125, 500, 250], "area": 106927}, {"id": 9473154, "category_id": 155, "iscrowd": 0, "bbox": [278, 114, 222, 68], "area": 7442}, {"id": 13156272, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 127], "area": 59086}, {"id": 6117714, "category_id": 192, "iscrowd": 0, "bbox": [0, 111, 462, 28], "area": 4552}], "file_name": "000000288430.png", "image_id": 288430}, {"segments_info": [{"id": 7563364, "category_id": 1, "iscrowd": 0, "bbox": [399, 144, 90, 255], "area": 11604}, {"id": 5855573, "category_id": 1, "iscrowd": 0, "bbox": [546, 39, 62, 73], "area": 1621}, {"id": 7956850, "category_id": 1, "iscrowd": 0, "bbox": [19, 295, 86, 131], "area": 6861}, {"id": 6248797, "category_id": 1, "iscrowd": 0, "bbox": [619, 117, 21, 104], "area": 966}, {"id": 7565168, "category_id": 1, "iscrowd": 0, "bbox": [119, 84, 71, 249], "area": 9358}, {"id": 6119002, "category_id": 1, "iscrowd": 0, "bbox": [477, 90, 41, 164], "area": 4015}, {"id": 8938078, "category_id": 1, "iscrowd": 0, "bbox": [128, 258, 83, 168], "area": 9103}, {"id": 7824476, "category_id": 1, "iscrowd": 0, "bbox": [524, 78, 89, 105], "area": 3456}, {"id": 5192757, "category_id": 1, "iscrowd": 0, "bbox": [544, 120, 74, 125], "area": 5687}, {"id": 3747883, "category_id": 27, "iscrowd": 0, "bbox": [423, 178, 23, 67], "area": 323}, {"id": 2430223, "category_id": 27, "iscrowd": 0, "bbox": [587, 107, 9, 21], "area": 78}, {"id": 2825752, "category_id": 27, "iscrowd": 0, "bbox": [626, 154, 10, 33], "area": 167}, {"id": 3680028, "category_id": 27, "iscrowd": 0, "bbox": [546, 106, 12, 20], "area": 92}, {"id": 3616301, "category_id": 31, "iscrowd": 0, "bbox": [75, 337, 45, 90], "area": 1572}, {"id": 3288383, "category_id": 31, "iscrowd": 0, "bbox": [184, 301, 37, 76], "area": 667}, {"id": 9212047, "category_id": 62, "iscrowd": 0, "bbox": [180, 167, 61, 90], "area": 1548}, {"id": 3881006, "category_id": 62, "iscrowd": 0, "bbox": [6, 0, 53, 53], "area": 1277}, {"id": 13026759, "category_id": 67, "iscrowd": 0, "bbox": [100, 120, 106, 26], "area": 1029}, {"id": 2241059, "category_id": 184, "iscrowd": 0, "bbox": [51, 0, 589, 427], "area": 54292}, {"id": 3027218, "category_id": 185, "iscrowd": 0, "bbox": [271, 0, 369, 185], "area": 34842}, {"id": 8681845, "category_id": 191, "iscrowd": 0, "bbox": [0, 64, 364, 363], "area": 16622}, {"id": 8097670, "category_id": 193, "iscrowd": 0, "bbox": [0, 16, 627, 411], "area": 74975}], "file_name": "000000288584.png", "image_id": 288584}, {"segments_info": [{"id": 9931418, "category_id": 1, "iscrowd": 0, "bbox": [272, 103, 53, 61], "area": 2080}, {"id": 9864326, "category_id": 1, "iscrowd": 0, "bbox": [81, 78, 94, 168], "area": 9062}, {"id": 5724279, "category_id": 1, "iscrowd": 0, "bbox": [381, 97, 50, 66], "area": 1451}, {"id": 7560601, "category_id": 1, "iscrowd": 0, "bbox": [136, 90, 36, 52], "area": 778}, {"id": 7824775, "category_id": 1, "iscrowd": 0, "bbox": [171, 95, 40, 67], "area": 1532}, {"id": 7627835, "category_id": 1, "iscrowd": 0, "bbox": [478, 147, 49, 129], "area": 3433}, {"id": 10785953, "category_id": 1, "iscrowd": 0, "bbox": [320, 89, 58, 94], "area": 2360}, {"id": 8155266, "category_id": 1, "iscrowd": 0, "bbox": [23, 89, 46, 61], "area": 1004}, {"id": 4737406, "category_id": 1, "iscrowd": 0, "bbox": [225, 115, 36, 64], "area": 1432}, {"id": 9404826, "category_id": 1, "iscrowd": 0, "bbox": [0, 105, 67, 72], "area": 2228}, {"id": 7961989, "category_id": 1, "iscrowd": 0, "bbox": [511, 118, 47, 74], "area": 2074}, {"id": 7700044, "category_id": 1, "iscrowd": 0, "bbox": [2, 151, 52, 138], "area": 4150}, {"id": 4802142, "category_id": 1, "iscrowd": 0, "bbox": [429, 96, 63, 77], "area": 2688}, {"id": 6449734, "category_id": 1, "iscrowd": 1, "bbox": [1, 71, 639, 246], "area": 44527}, {"id": 8883258, "category_id": 15, "iscrowd": 0, "bbox": [516, 224, 30, 11], "area": 236}, {"id": 6713140, "category_id": 15, "iscrowd": 0, "bbox": [324, 245, 209, 46], "area": 7279}, {"id": 8552575, "category_id": 18, "iscrowd": 0, "bbox": [291, 286, 50, 58], "area": 2051}, {"id": 8095642, "category_id": 20, "iscrowd": 0, "bbox": [74, 225, 124, 142], "area": 3847}, {"id": 10593448, "category_id": 20, "iscrowd": 0, "bbox": [254, 240, 26, 21], "area": 253}, {"id": 7307911, "category_id": 20, "iscrowd": 0, "bbox": [257, 258, 67, 112], "area": 1594}, {"id": 9014935, "category_id": 20, "iscrowd": 0, "bbox": [162, 235, 159, 138], "area": 9404}, {"id": 6122102, "category_id": 20, "iscrowd": 0, "bbox": [48, 236, 105, 130], "area": 7269}, {"id": 13814996, "category_id": 31, "iscrowd": 0, "bbox": [175, 117, 24, 52], "area": 334}, {"id": 5924659, "category_id": 138, "iscrowd": 0, "bbox": [0, 183, 621, 140], "area": 14480}, {"id": 4871245, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 178], "area": 35400}, {"id": 6910260, "category_id": 185, "iscrowd": 0, "bbox": [148, 203, 361, 57], "area": 2528}, {"id": 15127497, "category_id": 187, "iscrowd": 0, "bbox": [12, 0, 468, 117], "area": 35058}, {"id": 6984844, "category_id": 193, "iscrowd": 0, "bbox": [0, 298, 640, 138], "area": 71453}], "file_name": "000000288685.png", "image_id": 288685}, {"segments_info": [{"id": 12760745, "category_id": 48, "iscrowd": 0, "bbox": [249, 27, 391, 147], "area": 10476}, {"id": 356854, "category_id": 57, "iscrowd": 0, "bbox": [412, 158, 30, 70], "area": 771}, {"id": 962039, "category_id": 57, "iscrowd": 0, "bbox": [453, 143, 39, 37], "area": 567}, {"id": 556753, "category_id": 57, "iscrowd": 0, "bbox": [232, 121, 99, 98], "area": 2326}, {"id": 1935596, "category_id": 57, "iscrowd": 0, "bbox": [308, 18, 59, 77], "area": 992}, {"id": 358604, "category_id": 57, "iscrowd": 0, "bbox": [296, 123, 92, 61], "area": 1477}, {"id": 825310, "category_id": 57, "iscrowd": 0, "bbox": [221, 245, 120, 45], "area": 1456}, {"id": 673439, "category_id": 57, "iscrowd": 0, "bbox": [215, 197, 58, 65], "area": 1092}, {"id": 884424, "category_id": 57, "iscrowd": 0, "bbox": [215, 320, 70, 25], "area": 440}, {"id": 744918, "category_id": 57, "iscrowd": 0, "bbox": [251, 85, 25, 29], "area": 250}, {"id": 959221, "category_id": 57, "iscrowd": 0, "bbox": [178, 294, 46, 13], "area": 376}, {"id": 762098, "category_id": 57, "iscrowd": 0, "bbox": [427, 181, 67, 82], "area": 1969}, {"id": 2003177, "category_id": 57, "iscrowd": 0, "bbox": [356, 302, 71, 24], "area": 1077}, {"id": 630777, "category_id": 57, "iscrowd": 0, "bbox": [440, 162, 28, 24], "area": 410}, {"id": 14005915, "category_id": 67, "iscrowd": 0, "bbox": [1, 0, 639, 419], "area": 97523}, {"id": 14335914, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 5764}, {"id": 3505561, "category_id": 196, "iscrowd": 0, "bbox": [173, 71, 318, 314], "area": 59735}], "file_name": "000000288762.png", "image_id": 288762}, {"segments_info": [{"id": 2104606, "category_id": 1, "iscrowd": 0, "bbox": [303, 406, 22, 56], "area": 627}, {"id": 5329494, "category_id": 1, "iscrowd": 0, "bbox": [149, 159, 144, 324], "area": 18978}, {"id": 6703912, "category_id": 1, "iscrowd": 0, "bbox": [377, 332, 50, 97], "area": 2350}, {"id": 657419, "category_id": 1, "iscrowd": 0, "bbox": [321, 417, 13, 42], "area": 417}, {"id": 5459542, "category_id": 41, "iscrowd": 0, "bbox": [375, 397, 52, 31], "area": 912}, {"id": 7245989, "category_id": 41, "iscrowd": 0, "bbox": [113, 133, 137, 63], "area": 1626}, {"id": 263946, "category_id": 112, "iscrowd": 0, "bbox": [62, 219, 99, 141], "area": 10389}, {"id": 594968, "category_id": 118, "iscrowd": 0, "bbox": [0, 347, 260, 149], "area": 25393}, {"id": 8356228, "category_id": 130, "iscrowd": 0, "bbox": [0, 179, 310, 97], "area": 1081}, {"id": 4610663, "category_id": 144, "iscrowd": 0, "bbox": [0, 408, 427, 232], "area": 70159}, {"id": 1974567, "category_id": 177, "iscrowd": 0, "bbox": [195, 120, 185, 342], "area": 5505}, {"id": 2566703, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 427, 290], "area": 78250}, {"id": 4540748, "category_id": 199, "iscrowd": 0, "bbox": [0, 79, 427, 390], "area": 48246}], "file_name": "000000288862.png", "image_id": 288862}, {"segments_info": [{"id": 4809339, "category_id": 25, "iscrowd": 0, "bbox": [353, 2, 113, 357], "area": 22433}, {"id": 3359050, "category_id": 25, "iscrowd": 0, "bbox": [119, 2, 262, 356], "area": 45158}, {"id": 10465211, "category_id": 177, "iscrowd": 0, "bbox": [551, 260, 89, 99], "area": 7054}, {"id": 8553861, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 359], "area": 93739}, {"id": 5271681, "category_id": 185, "iscrowd": 0, "bbox": [0, 191, 320, 168], "area": 29870}, {"id": 9547453, "category_id": 197, "iscrowd": 0, "bbox": [282, 148, 294, 211], "area": 30910}], "file_name": "000000288882.png", "image_id": 288882}, {"segments_info": [{"id": 7691368, "category_id": 1, "iscrowd": 0, "bbox": [3, 39, 386, 435], "area": 91593}, {"id": 4143677, "category_id": 1, "iscrowd": 0, "bbox": [349, 0, 173, 368], "area": 29521}, {"id": 10459016, "category_id": 43, "iscrowd": 0, "bbox": [351, 278, 200, 132], "area": 15971}, {"id": 10930873, "category_id": 145, "iscrowd": 0, "bbox": [0, 364, 640, 116], "area": 44650}, {"id": 8936000, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 401], "area": 124658}], "file_name": "000000289059.png", "image_id": 289059}, {"segments_info": [{"id": 7830418, "category_id": 1, "iscrowd": 0, "bbox": [299, 416, 59, 64], "area": 2775}, {"id": 7302524, "category_id": 6, "iscrowd": 0, "bbox": [0, 384, 142, 96], "area": 12249}, {"id": 3418943, "category_id": 10, "iscrowd": 0, "bbox": [260, 193, 112, 103], "area": 11204}, {"id": 4077106, "category_id": 10, "iscrowd": 0, "bbox": [415, 84, 144, 311], "area": 37781}, {"id": 3023389, "category_id": 10, "iscrowd": 0, "bbox": [152, 299, 219, 101], "area": 20967}, {"id": 5465448, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 72, 275], "area": 11774}, {"id": 10000794, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 186439}, {"id": 11841199, "category_id": 199, "iscrowd": 0, "bbox": [65, 358, 59, 31], "area": 578}], "file_name": "000000289222.png", "image_id": 289222}, {"segments_info": [{"id": 13883617, "category_id": 1, "iscrowd": 0, "bbox": [48, 17, 290, 483], "area": 92760}, {"id": 5391698, "category_id": 32, "iscrowd": 0, "bbox": [160, 167, 30, 65], "area": 1077}, {"id": 15330284, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 362, 500], "area": 86897}], "file_name": "000000289229.png", "image_id": 289229}, {"segments_info": [{"id": 5789784, "category_id": 1, "iscrowd": 0, "bbox": [204, 235, 61, 177], "area": 5088}, {"id": 5855577, "category_id": 2, "iscrowd": 0, "bbox": [206, 304, 51, 152], "area": 1524}, {"id": 9605778, "category_id": 15, "iscrowd": 0, "bbox": [0, 500, 340, 106], "area": 10322}, {"id": 13948116, "category_id": 18, "iscrowd": 0, "bbox": [473, 396, 39, 29], "area": 703}, {"id": 8882055, "category_id": 149, "iscrowd": 0, "bbox": [0, 394, 529, 102], "area": 42226}, {"id": 9868950, "category_id": 181, "iscrowd": 0, "bbox": [232, 52, 292, 261], "area": 20534}, {"id": 8553090, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 453, 527], "area": 67048}, {"id": 10197915, "category_id": 191, "iscrowd": 0, "bbox": [0, 373, 529, 267], "area": 78953}, {"id": 9539985, "category_id": 197, "iscrowd": 0, "bbox": [15, 0, 514, 385], "area": 106640}], "file_name": "000000289343.png", "image_id": 289343}, {"segments_info": [{"id": 5219245, "category_id": 16, "iscrowd": 0, "bbox": [523, 333, 117, 141], "area": 10159}, {"id": 2710913, "category_id": 21, "iscrowd": 0, "bbox": [81, 202, 275, 210], "area": 34416}, {"id": 1254217, "category_id": 25, "iscrowd": 0, "bbox": [33, 86, 242, 149], "area": 9491}, {"id": 3557710, "category_id": 64, "iscrowd": 0, "bbox": [0, 21, 39, 296], "area": 3596}, {"id": 5805472, "category_id": 190, "iscrowd": 0, "bbox": [0, 287, 640, 193], "area": 71346}, {"id": 4678794, "category_id": 199, "iscrowd": 0, "bbox": [360, 0, 166, 237], "area": 32536}], "file_name": "000000289393.png", "image_id": 289393}, {"segments_info": [{"id": 2633535, "category_id": 1, "iscrowd": 0, "bbox": [210, 41, 244, 124], "area": 15316}, {"id": 2962230, "category_id": 50, "iscrowd": 0, "bbox": [3, 216, 70, 127], "area": 1412}, {"id": 1585491, "category_id": 59, "iscrowd": 0, "bbox": [189, 119, 85, 16], "area": 782}, {"id": 6723786, "category_id": 59, "iscrowd": 0, "bbox": [187, 187, 170, 61], "area": 5468}, {"id": 3628685, "category_id": 59, "iscrowd": 0, "bbox": [50, 150, 76, 34], "area": 1722}, {"id": 7773384, "category_id": 59, "iscrowd": 0, "bbox": [173, 159, 45, 21], "area": 525}, {"id": 3892106, "category_id": 59, "iscrowd": 0, "bbox": [9, 126, 631, 284], "area": 33923}, {"id": 3956356, "category_id": 59, "iscrowd": 0, "bbox": [303, 253, 137, 70], "area": 6603}, {"id": 6264011, "category_id": 59, "iscrowd": 0, "bbox": [137, 162, 58, 24], "area": 1030}, {"id": 1316890, "category_id": 107, "iscrowd": 0, "bbox": [0, 78, 640, 350], "area": 49097}, {"id": 4871522, "category_id": 189, "iscrowd": 0, "bbox": [0, 131, 512, 297], "area": 41420}, {"id": 3951191, "category_id": 196, "iscrowd": 0, "bbox": [0, 125, 577, 283], "area": 5322}, {"id": 1, "category_id": 199, "iscrowd": 0, "bbox": [442, 55, 198, 64], "area": 8074}], "file_name": "000000289415.png", "image_id": 289415}, {"segments_info": [{"id": 4276544, "category_id": 1, "iscrowd": 0, "bbox": [429, 46, 31, 57], "area": 954}, {"id": 3947065, "category_id": 1, "iscrowd": 0, "bbox": [272, 26, 111, 194], "area": 9815}, {"id": 5394253, "category_id": 1, "iscrowd": 0, "bbox": [259, 7, 39, 55], "area": 1266}, {"id": 1973274, "category_id": 1, "iscrowd": 0, "bbox": [201, 7, 50, 94], "area": 2857}, {"id": 5457984, "category_id": 1, "iscrowd": 0, "bbox": [452, 24, 26, 69], "area": 1128}, {"id": 2630434, "category_id": 1, "iscrowd": 0, "bbox": [253, 49, 38, 47], "area": 974}, {"id": 7168859, "category_id": 15, "iscrowd": 0, "bbox": [143, 72, 43, 11], "area": 373}, {"id": 7168866, "category_id": 15, "iscrowd": 0, "bbox": [90, 72, 41, 10], "area": 348}, {"id": 6576461, "category_id": 15, "iscrowd": 0, "bbox": [56, 74, 22, 7], "area": 123}, {"id": 7759966, "category_id": 35, "iscrowd": 0, "bbox": [246, 187, 124, 47], "area": 987}, {"id": 7760225, "category_id": 35, "iscrowd": 0, "bbox": [436, 93, 23, 9], "area": 50}, {"id": 6970962, "category_id": 35, "iscrowd": 0, "bbox": [456, 88, 16, 3], "area": 28}, {"id": 6051149, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 57, 82], "area": 3110}, {"id": 10654596, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 158011}, {"id": 4209203, "category_id": 184, "iscrowd": 0, "bbox": [209, 0, 291, 55], "area": 6901}], "file_name": "000000289417.png", "image_id": 289417}, {"segments_info": [{"id": 10532276, "category_id": 85, "iscrowd": 0, "bbox": [120, 187, 126, 137], "area": 13274}, {"id": 4151623, "category_id": 85, "iscrowd": 0, "bbox": [39, 199, 33, 130], "area": 3413}, {"id": 3758410, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 304, 540], "area": 75340}, {"id": 16313041, "category_id": 187, "iscrowd": 0, "bbox": [0, 3, 245, 337], "area": 32564}], "file_name": "000000289516.png", "image_id": 289516}, {"segments_info": [{"id": 5338513, "category_id": 25, "iscrowd": 0, "bbox": [92, 97, 334, 543], "area": 57650}, {"id": 5207171, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 426, 640], "area": 214799}], "file_name": "000000289586.png", "image_id": 289586}, {"segments_info": [{"id": 3026478, "category_id": 1, "iscrowd": 0, "bbox": [336, 231, 67, 231], "area": 10913}, {"id": 8684676, "category_id": 3, "iscrowd": 0, "bbox": [20, 264, 27, 25], "area": 278}, {"id": 6513507, "category_id": 3, "iscrowd": 0, "bbox": [23, 269, 42, 37], "area": 1085}, {"id": 4013373, "category_id": 128, "iscrowd": 0, "bbox": [106, 0, 413, 292], "area": 39153}, {"id": 11974326, "category_id": 149, "iscrowd": 0, "bbox": [0, 263, 469, 377], "area": 76782}, {"id": 11250603, "category_id": 151, "iscrowd": 0, "bbox": [195, 0, 227, 146], "area": 8638}, {"id": 5197647, "category_id": 161, "iscrowd": 0, "bbox": [246, 305, 62, 56], "area": 2523}, {"id": 3487029, "category_id": 171, "iscrowd": 0, "bbox": [486, 174, 33, 127], "area": 3027}, {"id": 2631720, "category_id": 175, "iscrowd": 0, "bbox": [449, 156, 39, 26], "area": 620}, {"id": 4934475, "category_id": 184, "iscrowd": 0, "bbox": [0, 19, 491, 296], "area": 65985}, {"id": 1579032, "category_id": 185, "iscrowd": 0, "bbox": [337, 177, 162, 81], "area": 5745}, {"id": 15198183, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 272, 78], "area": 11740}, {"id": 6184542, "category_id": 191, "iscrowd": 0, "bbox": [56, 273, 463, 367], "area": 68136}, {"id": 2894892, "category_id": 193, "iscrowd": 0, "bbox": [124, 272, 395, 161], "area": 18982}], "file_name": "000000289594.png", "image_id": 289594}, {"segments_info": [{"id": 4545918, "category_id": 25, "iscrowd": 0, "bbox": [202, 76, 327, 292], "area": 27299}, {"id": 7044745, "category_id": 128, "iscrowd": 0, "bbox": [147, 32, 493, 75], "area": 13444}, {"id": 10003115, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 532, 123], "area": 41670}, {"id": 3884629, "category_id": 185, "iscrowd": 0, "bbox": [0, 82, 86, 39], "area": 1524}, {"id": 16316664, "category_id": 187, "iscrowd": 0, "bbox": [220, 0, 420, 55], "area": 4605}, {"id": 7180974, "category_id": 193, "iscrowd": 0, "bbox": [185, 64, 455, 60], "area": 3121}, {"id": 6456477, "category_id": 194, "iscrowd": 0, "bbox": [0, 112, 640, 314], "area": 160762}, {"id": 7901857, "category_id": 198, "iscrowd": 0, "bbox": [0, 117, 586, 107], "area": 10640}], "file_name": "000000289659.png", "image_id": 289659}, {"segments_info": [{"id": 5132112, "category_id": 18, "iscrowd": 0, "bbox": [330, 199, 276, 223], "area": 31080}, {"id": 6909803, "category_id": 18, "iscrowd": 0, "bbox": [138, 43, 153, 206], "area": 15829}, {"id": 10133924, "category_id": 133, "iscrowd": 0, "bbox": [65, 0, 446, 352], "area": 72861}, {"id": 5206940, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 530, 371], "area": 19791}, {"id": 10726066, "category_id": 191, "iscrowd": 0, "bbox": [0, 11, 640, 416], "area": 84196}, {"id": 8756134, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 270], "area": 18014}], "file_name": "000000289702.png", "image_id": 289702}, {"segments_info": [{"id": 6905692, "category_id": 1, "iscrowd": 0, "bbox": [157, 308, 7, 7], "area": 36}, {"id": 5061702, "category_id": 1, "iscrowd": 0, "bbox": [30, 402, 33, 78], "area": 1734}, {"id": 4933976, "category_id": 1, "iscrowd": 0, "bbox": [368, 295, 16, 46], "area": 328}, {"id": 2236985, "category_id": 1, "iscrowd": 0, "bbox": [101, 429, 31, 42], "area": 536}, {"id": 8614508, "category_id": 1, "iscrowd": 0, "bbox": [198, 295, 12, 9], "area": 50}, {"id": 6968919, "category_id": 1, "iscrowd": 0, "bbox": [60, 339, 25, 44], "area": 685}, {"id": 6576735, "category_id": 1, "iscrowd": 0, "bbox": [386, 312, 14, 20], "area": 163}, {"id": 3355461, "category_id": 1, "iscrowd": 0, "bbox": [87, 372, 24, 16], "area": 194}, {"id": 4539223, "category_id": 1, "iscrowd": 0, "bbox": [607, 313, 20, 33], "area": 184}, {"id": 5001053, "category_id": 1, "iscrowd": 0, "bbox": [151, 387, 25, 64], "area": 738}, {"id": 5000025, "category_id": 1, "iscrowd": 0, "bbox": [610, 311, 24, 24], "area": 184}, {"id": 6378833, "category_id": 1, "iscrowd": 0, "bbox": [150, 304, 8, 10], "area": 50}, {"id": 6053505, "category_id": 1, "iscrowd": 0, "bbox": [182, 408, 40, 22], "area": 397}, {"id": 4666406, "category_id": 9, "iscrowd": 0, "bbox": [157, 157, 17, 5], "area": 74}, {"id": 8019270, "category_id": 9, "iscrowd": 0, "bbox": [198, 71, 259, 87], "area": 13082}, {"id": 8017465, "category_id": 9, "iscrowd": 0, "bbox": [452, 64, 156, 98], "area": 10320}, {"id": 6249565, "category_id": 28, "iscrowd": 0, "bbox": [429, 264, 101, 63], "area": 2538}, {"id": 6053991, "category_id": 28, "iscrowd": 0, "bbox": [0, 237, 28, 36], "area": 668}, {"id": 5855578, "category_id": 28, "iscrowd": 0, "bbox": [15, 253, 89, 83], "area": 2859}, {"id": 5526872, "category_id": 28, "iscrowd": 0, "bbox": [241, 326, 186, 141], "area": 17359}, {"id": 5987423, "category_id": 28, "iscrowd": 0, "bbox": [382, 288, 133, 83], "area": 6967}, {"id": 5987422, "category_id": 28, "iscrowd": 0, "bbox": [255, 263, 100, 67], "area": 3934}, {"id": 8613201, "category_id": 31, "iscrowd": 0, "bbox": [61, 454, 9, 23], "area": 122}, {"id": 4072218, "category_id": 31, "iscrowd": 0, "bbox": [97, 441, 22, 39], "area": 496}, {"id": 2499367, "category_id": 31, "iscrowd": 0, "bbox": [57, 419, 20, 25], "area": 272}, {"id": 12229000, "category_id": 62, "iscrowd": 0, "bbox": [194, 324, 37, 15], "area": 246}, {"id": 8106434, "category_id": 62, "iscrowd": 0, "bbox": [542, 400, 29, 18], "area": 418}, {"id": 7697524, "category_id": 62, "iscrowd": 0, "bbox": [100, 313, 27, 20], "area": 296}, {"id": 7890002, "category_id": 62, "iscrowd": 0, "bbox": [474, 424, 38, 50], "area": 1137}, {"id": 8224115, "category_id": 62, "iscrowd": 0, "bbox": [217, 420, 41, 34], "area": 539}, {"id": 9591366, "category_id": 62, "iscrowd": 0, "bbox": [4, 396, 59, 19], "area": 408}, {"id": 8684680, "category_id": 62, "iscrowd": 0, "bbox": [119, 317, 15, 17], "area": 130}, {"id": 7300456, "category_id": 62, "iscrowd": 0, "bbox": [154, 336, 45, 28], "area": 505}, {"id": 8688545, "category_id": 62, "iscrowd": 0, "bbox": [129, 314, 39, 20], "area": 394}, {"id": 3952736, "category_id": 62, "iscrowd": 0, "bbox": [127, 415, 32, 18], "area": 321}, {"id": 3482394, "category_id": 62, "iscrowd": 0, "bbox": [492, 398, 16, 8], "area": 65}, {"id": 7296327, "category_id": 62, "iscrowd": 0, "bbox": [513, 429, 41, 45], "area": 990}, {"id": 9999750, "category_id": 62, "iscrowd": 0, "bbox": [69, 312, 35, 20], "area": 319}, {"id": 7500913, "category_id": 62, "iscrowd": 1, "bbox": [13, 319, 474, 103], "area": 3761}, {"id": 5589549, "category_id": 95, "iscrowd": 0, "bbox": [0, 148, 470, 54], "area": 7249}, {"id": 9797706, "category_id": 155, "iscrowd": 0, "bbox": [0, 143, 640, 144], "area": 59559}, {"id": 8939331, "category_id": 178, "iscrowd": 0, "bbox": [107, 267, 521, 91], "area": 15493}, {"id": 5723473, "category_id": 186, "iscrowd": 0, "bbox": [254, 299, 100, 28], "area": 39}, {"id": 13408108, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 160], "area": 76593}, {"id": 8619653, "category_id": 191, "iscrowd": 0, "bbox": [0, 223, 640, 257], "area": 73379}], "file_name": "000000289741.png", "image_id": 289741}, {"segments_info": [{"id": 2502985, "category_id": 1, "iscrowd": 0, "bbox": [361, 216, 6, 26], "area": 122}, {"id": 3358300, "category_id": 1, "iscrowd": 0, "bbox": [328, 219, 9, 30], "area": 171}, {"id": 1580851, "category_id": 1, "iscrowd": 0, "bbox": [376, 218, 11, 24], "area": 142}, {"id": 2438731, "category_id": 1, "iscrowd": 0, "bbox": [93, 217, 7, 15], "area": 59}, {"id": 3030358, "category_id": 1, "iscrowd": 0, "bbox": [85, 214, 8, 17], "area": 101}, {"id": 3423065, "category_id": 3, "iscrowd": 0, "bbox": [551, 218, 31, 41], "area": 940}, {"id": 4219022, "category_id": 3, "iscrowd": 0, "bbox": [0, 218, 62, 23], "area": 1070}, {"id": 2498609, "category_id": 3, "iscrowd": 0, "bbox": [576, 215, 64, 62], "area": 3433}, {"id": 4160724, "category_id": 28, "iscrowd": 0, "bbox": [2, 118, 210, 71], "area": 9825}, {"id": 1382955, "category_id": 31, "iscrowd": 0, "bbox": [336, 229, 4, 8], "area": 24}, {"id": 7837616, "category_id": 44, "iscrowd": 0, "bbox": [270, 182, 7, 18], "area": 99}, {"id": 10665937, "category_id": 44, "iscrowd": 0, "bbox": [214, 182, 8, 19], "area": 115}, {"id": 9416643, "category_id": 44, "iscrowd": 0, "bbox": [277, 181, 8, 20], "area": 116}, {"id": 3887747, "category_id": 44, "iscrowd": 0, "bbox": [251, 217, 7, 19], "area": 119}, {"id": 5994386, "category_id": 44, "iscrowd": 0, "bbox": [227, 185, 5, 16], "area": 66}, {"id": 8366797, "category_id": 44, "iscrowd": 0, "bbox": [205, 182, 6, 11], "area": 50}, {"id": 9744068, "category_id": 44, "iscrowd": 0, "bbox": [288, 182, 10, 23], "area": 149}, {"id": 7243165, "category_id": 44, "iscrowd": 0, "bbox": [232, 177, 8, 25], "area": 156}, {"id": 7384797, "category_id": 44, "iscrowd": 0, "bbox": [227, 215, 7, 20], "area": 98}, {"id": 7243447, "category_id": 44, "iscrowd": 0, "bbox": [192, 184, 7, 19], "area": 93}, {"id": 6782618, "category_id": 44, "iscrowd": 0, "bbox": [239, 183, 6, 18], "area": 79}, {"id": 6985664, "category_id": 44, "iscrowd": 0, "bbox": [257, 183, 7, 18], "area": 101}, {"id": 7111579, "category_id": 44, "iscrowd": 0, "bbox": [187, 184, 7, 19], "area": 88}, {"id": 6518936, "category_id": 44, "iscrowd": 1, "bbox": [117, 176, 216, 64], "area": 4148}, {"id": 5140141, "category_id": 58, "iscrowd": 0, "bbox": [225, 275, 32, 21], "area": 407}, {"id": 3955092, "category_id": 58, "iscrowd": 0, "bbox": [221, 312, 32, 19], "area": 372}, {"id": 4349347, "category_id": 58, "iscrowd": 0, "bbox": [154, 294, 26, 21], "area": 381}, {"id": 6390466, "category_id": 58, "iscrowd": 0, "bbox": [227, 259, 21, 15], "area": 241}, {"id": 4734313, "category_id": 149, "iscrowd": 0, "bbox": [0, 204, 640, 222], "area": 94252}, {"id": 3956098, "category_id": 191, "iscrowd": 0, "bbox": [52, 216, 499, 46], "area": 3760}, {"id": 3685209, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 250], "area": 127085}], "file_name": "000000289938.png", "image_id": 289938}, {"segments_info": [{"id": 1842204, "category_id": 1, "iscrowd": 0, "bbox": [441, 291, 49, 106], "area": 1721}, {"id": 6118749, "category_id": 38, "iscrowd": 0, "bbox": [47, 83, 188, 117], "area": 2432}, {"id": 2565927, "category_id": 154, "iscrowd": 0, "bbox": [0, 374, 640, 106], "area": 51458}, {"id": 6579300, "category_id": 155, "iscrowd": 0, "bbox": [0, 305, 640, 111], "area": 53688}, {"id": 11842740, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 325], "area": 197511}], "file_name": "000000289960.png", "image_id": 289960}, {"segments_info": [{"id": 7105895, "category_id": 81, "iscrowd": 0, "bbox": [32, 300, 251, 124], "area": 23021}, {"id": 8356221, "category_id": 156, "iscrowd": 0, "bbox": [0, 214, 66, 34], "area": 1424}, {"id": 6908774, "category_id": 176, "iscrowd": 0, "bbox": [0, 244, 175, 180], "area": 10495}, {"id": 6646373, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 179, 222], "area": 37630}, {"id": 5593948, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 424], "area": 169731}], "file_name": "000000289992.png", "image_id": 289992}, {"segments_info": [{"id": 2700882, "category_id": 51, "iscrowd": 0, "bbox": [1, 341, 611, 264], "area": 87388}, {"id": 2063081, "category_id": 55, "iscrowd": 0, "bbox": [0, 32, 612, 394], "area": 145497}, {"id": 7182797, "category_id": 67, "iscrowd": 0, "bbox": [345, 434, 267, 170], "area": 27942}, {"id": 3633620, "category_id": 67, "iscrowd": 0, "bbox": [0, 428, 239, 184], "area": 20821}, {"id": 1519243, "category_id": 122, "iscrowd": 0, "bbox": [0, 351, 19, 77], "area": 126}, {"id": 7702690, "category_id": 189, "iscrowd": 0, "bbox": [340, 418, 272, 194], "area": 3710}, {"id": 9546967, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 612, 282], "area": 84695}], "file_name": "000000290081.png", "image_id": 290081}, {"segments_info": [{"id": 4869992, "category_id": 1, "iscrowd": 0, "bbox": [0, 2, 272, 404], "area": 47086}, {"id": 7889259, "category_id": 1, "iscrowd": 0, "bbox": [139, 186, 287, 272], "area": 46447}, {"id": 5660787, "category_id": 1, "iscrowd": 0, "bbox": [1, 277, 227, 282], "area": 34020}, {"id": 1974298, "category_id": 1, "iscrowd": 0, "bbox": [429, 0, 83, 166], "area": 6261}, {"id": 1120535, "category_id": 51, "iscrowd": 0, "bbox": [492, 355, 20, 55], "area": 815}, {"id": 1518131, "category_id": 51, "iscrowd": 0, "bbox": [401, 352, 81, 63], "area": 3379}, {"id": 2503731, "category_id": 51, "iscrowd": 0, "bbox": [429, 328, 73, 51], "area": 2045}, {"id": 660253, "category_id": 51, "iscrowd": 0, "bbox": [490, 320, 22, 37], "area": 635}, {"id": 3026742, "category_id": 51, "iscrowd": 0, "bbox": [426, 399, 81, 70], "area": 4208}, {"id": 6525359, "category_id": 59, "iscrowd": 0, "bbox": [258, 433, 137, 75], "area": 6886}, {"id": 3229780, "category_id": 62, "iscrowd": 0, "bbox": [169, 1, 98, 173], "area": 6363}, {"id": 2239780, "category_id": 62, "iscrowd": 0, "bbox": [378, 56, 134, 276], "area": 23632}, {"id": 9672859, "category_id": 67, "iscrowd": 0, "bbox": [5, 330, 507, 308], "area": 79665}, {"id": 9344667, "category_id": 93, "iscrowd": 0, "bbox": [340, 384, 50, 31], "area": 272}, {"id": 858912, "category_id": 190, "iscrowd": 0, "bbox": [128, 85, 363, 278], "area": 19452}, {"id": 3754839, "category_id": 196, "iscrowd": 0, "bbox": [281, 0, 191, 43], "area": 1833}], "file_name": "000000290163.png", "image_id": 290163}, {"segments_info": [{"id": 4672849, "category_id": 1, "iscrowd": 0, "bbox": [26, 352, 3, 3], "area": 7}, {"id": 7501395, "category_id": 1, "iscrowd": 0, "bbox": [158, 328, 1, 2], "area": 2}, {"id": 4870491, "category_id": 1, "iscrowd": 0, "bbox": [23, 352, 2, 3], "area": 6}, {"id": 3357499, "category_id": 1, "iscrowd": 0, "bbox": [154, 329, 2, 4], "area": 5}, {"id": 3684408, "category_id": 3, "iscrowd": 0, "bbox": [256, 324, 9, 4], "area": 25}, {"id": 5920596, "category_id": 3, "iscrowd": 0, "bbox": [331, 356, 8, 5], "area": 27}, {"id": 4803432, "category_id": 6, "iscrowd": 0, "bbox": [104, 330, 17, 7], "area": 74}, {"id": 3879991, "category_id": 6, "iscrowd": 0, "bbox": [339, 357, 4, 4], "area": 11}, {"id": 5397344, "category_id": 6, "iscrowd": 0, "bbox": [133, 320, 12, 5], "area": 58}, {"id": 5789270, "category_id": 6, "iscrowd": 0, "bbox": [303, 346, 28, 13], "area": 211}, {"id": 3818322, "category_id": 8, "iscrowd": 0, "bbox": [74, 332, 21, 13], "area": 179}, {"id": 6974320, "category_id": 9, "iscrowd": 0, "bbox": [323, 381, 34, 18], "area": 368}, {"id": 7040637, "category_id": 9, "iscrowd": 0, "bbox": [176, 345, 46, 19], "area": 562}, {"id": 8749957, "category_id": 9, "iscrowd": 0, "bbox": [258, 364, 33, 16], "area": 334}, {"id": 8882825, "category_id": 85, "iscrowd": 0, "bbox": [233, 238, 7, 8], "area": 46}, {"id": 8883858, "category_id": 85, "iscrowd": 0, "bbox": [222, 238, 5, 9], "area": 40}, {"id": 4673106, "category_id": 95, "iscrowd": 0, "bbox": [0, 309, 223, 68], "area": 4507}, {"id": 4344914, "category_id": 144, "iscrowd": 0, "bbox": [185, 323, 414, 103], "area": 7484}, {"id": 5530733, "category_id": 148, "iscrowd": 0, "bbox": [0, 288, 525, 138], "area": 29432}, {"id": 5397087, "category_id": 149, "iscrowd": 0, "bbox": [220, 302, 397, 124], "area": 2793}, {"id": 2637112, "category_id": 184, "iscrowd": 0, "bbox": [0, 216, 640, 210], "area": 24493}, {"id": 9539212, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 209], "area": 130111}, {"id": 5988710, "category_id": 191, "iscrowd": 0, "bbox": [306, 338, 20, 19], "area": 136}, {"id": 6382952, "category_id": 197, "iscrowd": 0, "bbox": [0, 196, 640, 215], "area": 71594}], "file_name": "000000290179.png", "image_id": 290179}, {"segments_info": [{"id": 1974311, "category_id": 1, "iscrowd": 0, "bbox": [128, 315, 20, 34], "area": 387}, {"id": 7040128, "category_id": 1, "iscrowd": 0, "bbox": [107, 323, 28, 94], "area": 1456}, {"id": 6515315, "category_id": 1, "iscrowd": 0, "bbox": [135, 319, 29, 96], "area": 1076}, {"id": 6254992, "category_id": 1, "iscrowd": 0, "bbox": [252, 327, 31, 105], "area": 1506}, {"id": 3026998, "category_id": 1, "iscrowd": 0, "bbox": [48, 323, 41, 54], "area": 1490}, {"id": 8093848, "category_id": 1, "iscrowd": 0, "bbox": [176, 326, 20, 88], "area": 637}, {"id": 5790616, "category_id": 1, "iscrowd": 0, "bbox": [328, 334, 28, 112], "area": 2033}, {"id": 8817828, "category_id": 1, "iscrowd": 0, "bbox": [261, 315, 16, 27], "area": 220}, {"id": 7370627, "category_id": 1, "iscrowd": 0, "bbox": [234, 320, 16, 27], "area": 247}, {"id": 6514807, "category_id": 1, "iscrowd": 0, "bbox": [152, 325, 37, 52], "area": 1142}, {"id": 3094081, "category_id": 1, "iscrowd": 0, "bbox": [379, 331, 46, 130], "area": 3119}, {"id": 3422820, "category_id": 1, "iscrowd": 0, "bbox": [190, 318, 15, 81], "area": 451}, {"id": 4605519, "category_id": 1, "iscrowd": 0, "bbox": [440, 343, 43, 124], "area": 2466}, {"id": 5395811, "category_id": 1, "iscrowd": 1, "bbox": [0, 269, 640, 189], "area": 36736}, {"id": 3948094, "category_id": 8, "iscrowd": 0, "bbox": [2, 366, 118, 106], "area": 9464}, {"id": 2433578, "category_id": 27, "iscrowd": 0, "bbox": [19, 341, 19, 18], "area": 134}, {"id": 2631204, "category_id": 27, "iscrowd": 0, "bbox": [483, 344, 3, 22], "area": 19}, {"id": 3487295, "category_id": 31, "iscrowd": 0, "bbox": [252, 369, 20, 17], "area": 194}, {"id": 6122103, "category_id": 31, "iscrowd": 0, "bbox": [243, 342, 14, 28], "area": 83}, {"id": 12698319, "category_id": 31, "iscrowd": 0, "bbox": [429, 413, 21, 23], "area": 348}, {"id": 8358035, "category_id": 31, "iscrowd": 0, "bbox": [190, 356, 14, 18], "area": 173}, {"id": 4013632, "category_id": 31, "iscrowd": 0, "bbox": [418, 357, 17, 38], "area": 142}, {"id": 3157550, "category_id": 31, "iscrowd": 0, "bbox": [136, 335, 10, 28], "area": 92}, {"id": 1842976, "category_id": 31, "iscrowd": 0, "bbox": [384, 360, 23, 45], "area": 495}, {"id": 3618361, "category_id": 31, "iscrowd": 0, "bbox": [81, 329, 16, 23], "area": 67}, {"id": 1513500, "category_id": 31, "iscrowd": 0, "bbox": [457, 362, 21, 48], "area": 300}, {"id": 4273203, "category_id": 33, "iscrowd": 0, "bbox": [217, 396, 32, 32], "area": 644}, {"id": 5068635, "category_id": 185, "iscrowd": 0, "bbox": [588, 87, 52, 80], "area": 3383}, {"id": 16514291, "category_id": 187, "iscrowd": 0, "bbox": [174, 0, 351, 146], "area": 37466}, {"id": 12305094, "category_id": 191, "iscrowd": 0, "bbox": [91, 363, 498, 117], "area": 25054}, {"id": 4410199, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 414], "area": 167216}], "file_name": "000000290248.png", "image_id": 290248}, {"segments_info": [{"id": 3169131, "category_id": 1, "iscrowd": 0, "bbox": [560, 182, 27, 46], "area": 643}, {"id": 4352887, "category_id": 1, "iscrowd": 0, "bbox": [602, 186, 8, 49], "area": 242}, {"id": 1123366, "category_id": 1, "iscrowd": 0, "bbox": [539, 199, 10, 43], "area": 279}, {"id": 2771533, "category_id": 7, "iscrowd": 0, "bbox": [9, 59, 455, 201], "area": 56813}, {"id": 595479, "category_id": 125, "iscrowd": 0, "bbox": [98, 242, 266, 84], "area": 5362}, {"id": 11786716, "category_id": 130, "iscrowd": 0, "bbox": [165, 0, 459, 211], "area": 10112}, {"id": 922903, "category_id": 144, "iscrowd": 0, "bbox": [0, 229, 57, 24], "area": 687}, {"id": 396814, "category_id": 147, "iscrowd": 0, "bbox": [0, 221, 452, 105], "area": 28051}, {"id": 4228493, "category_id": 186, "iscrowd": 0, "bbox": [27, 0, 613, 210], "area": 62915}, {"id": 8239553, "category_id": 190, "iscrowd": 0, "bbox": [386, 210, 254, 116], "area": 21344}, {"id": 3892844, "category_id": 197, "iscrowd": 0, "bbox": [475, 151, 104, 95], "area": 5601}, {"id": 2377811, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 239], "area": 13532}], "file_name": "000000290293.png", "image_id": 290293}, {"segments_info": [{"id": 6459573, "category_id": 20, "iscrowd": 0, "bbox": [65, 83, 74, 62], "area": 2042}, {"id": 991805, "category_id": 20, "iscrowd": 0, "bbox": [399, 120, 139, 259], "area": 19325}, {"id": 3428460, "category_id": 20, "iscrowd": 0, "bbox": [0, 80, 100, 190], "area": 5688}, {"id": 1717070, "category_id": 20, "iscrowd": 0, "bbox": [376, 92, 58, 57], "area": 1442}, {"id": 726304, "category_id": 20, "iscrowd": 0, "bbox": [514, 117, 84, 210], "area": 8871}, {"id": 6063789, "category_id": 20, "iscrowd": 0, "bbox": [98, 104, 153, 220], "area": 12362}, {"id": 5735337, "category_id": 20, "iscrowd": 0, "bbox": [199, 106, 123, 225], "area": 13441}, {"id": 924201, "category_id": 20, "iscrowd": 0, "bbox": [53, 93, 115, 191], "area": 8061}, {"id": 2312041, "category_id": 20, "iscrowd": 0, "bbox": [590, 112, 50, 156], "area": 4831}, {"id": 2907535, "category_id": 20, "iscrowd": 0, "bbox": [286, 128, 102, 218], "area": 11068}, {"id": 1055528, "category_id": 20, "iscrowd": 0, "bbox": [427, 94, 78, 93], "area": 3516}, {"id": 8367310, "category_id": 20, "iscrowd": 0, "bbox": [193, 79, 67, 77], "area": 1516}, {"id": 3100758, "category_id": 185, "iscrowd": 0, "bbox": [0, 14, 640, 124], "area": 29732}, {"id": 1659734, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 132479}], "file_name": "000000290592.png", "image_id": 290592}, {"segments_info": [{"id": 741998, "category_id": 52, "iscrowd": 0, "bbox": [50, 62, 230, 385], "area": 35877}, {"id": 5458509, "category_id": 107, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 260087}], "file_name": "000000290619.png", "image_id": 290619}, {"segments_info": [{"id": 7046011, "category_id": 44, "iscrowd": 0, "bbox": [265, 151, 11, 42], "area": 392}, {"id": 3877187, "category_id": 47, "iscrowd": 0, "bbox": [152, 189, 19, 68], "area": 575}, {"id": 3482172, "category_id": 47, "iscrowd": 0, "bbox": [83, 193, 60, 72], "area": 3561}, {"id": 4469837, "category_id": 47, "iscrowd": 0, "bbox": [165, 192, 75, 73], "area": 4280}, {"id": 10134958, "category_id": 47, "iscrowd": 0, "bbox": [300, 182, 22, 34], "area": 591}, {"id": 3745339, "category_id": 49, "iscrowd": 0, "bbox": [196, 95, 27, 47], "area": 652}, {"id": 2758187, "category_id": 49, "iscrowd": 0, "bbox": [211, 101, 25, 42], "area": 313}, {"id": 6971760, "category_id": 79, "iscrowd": 0, "bbox": [230, 203, 148, 398], "area": 25568}, {"id": 10399666, "category_id": 81, "iscrowd": 0, "bbox": [321, 185, 39, 12], "area": 238}, {"id": 5326688, "category_id": 107, "iscrowd": 0, "bbox": [0, 184, 397, 124], "area": 17269}, {"id": 14674922, "category_id": 181, "iscrowd": 0, "bbox": [394, 0, 218, 248], "area": 51437}, {"id": 4206664, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 404, 612], "area": 103883}, {"id": 8684171, "category_id": 190, "iscrowd": 0, "bbox": [287, 357, 325, 255], "area": 63956}, {"id": 6381690, "category_id": 195, "iscrowd": 0, "bbox": [128, 114, 75, 96], "area": 4393}, {"id": 8621461, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 612, 252], "area": 57992}], "file_name": "000000290768.png", "image_id": 290768}, {"segments_info": [{"id": 5456457, "category_id": 47, "iscrowd": 0, "bbox": [240, 346, 13, 32], "area": 340}, {"id": 15453383, "category_id": 62, "iscrowd": 0, "bbox": [79, 278, 37, 29], "area": 689}, {"id": 14998233, "category_id": 62, "iscrowd": 0, "bbox": [50, 269, 20, 35], "area": 461}, {"id": 1511192, "category_id": 62, "iscrowd": 0, "bbox": [67, 409, 275, 62], "area": 7897}, {"id": 1182477, "category_id": 62, "iscrowd": 0, "bbox": [318, 374, 276, 97], "area": 17743}, {"id": 6836819, "category_id": 62, "iscrowd": 0, "bbox": [534, 241, 106, 90], "area": 4809}, {"id": 15851738, "category_id": 62, "iscrowd": 0, "bbox": [0, 284, 15, 27], "area": 253}, {"id": 4076604, "category_id": 63, "iscrowd": 0, "bbox": [288, 252, 282, 156], "area": 26321}, {"id": 10191233, "category_id": 67, "iscrowd": 0, "bbox": [188, 325, 147, 96], "area": 6711}, {"id": 4275005, "category_id": 72, "iscrowd": 0, "bbox": [1, 290, 40, 149], "area": 2193}, {"id": 10653059, "category_id": 84, "iscrowd": 0, "bbox": [37, 401, 47, 24], "area": 801}, {"id": 2367019, "category_id": 84, "iscrowd": 0, "bbox": [40, 425, 43, 11], "area": 182}, {"id": 5390908, "category_id": 84, "iscrowd": 0, "bbox": [593, 218, 19, 8], "area": 110}, {"id": 3547939, "category_id": 84, "iscrowd": 0, "bbox": [221, 350, 53, 22], "area": 637}, {"id": 2104876, "category_id": 84, "iscrowd": 0, "bbox": [42, 430, 45, 12], "area": 170}, {"id": 6970205, "category_id": 84, "iscrowd": 0, "bbox": [30, 376, 42, 12], "area": 378}, {"id": 1775130, "category_id": 84, "iscrowd": 0, "bbox": [40, 418, 43, 14], "area": 282}, {"id": 7179699, "category_id": 118, "iscrowd": 0, "bbox": [14, 307, 626, 170], "area": 18241}, {"id": 4802916, "category_id": 141, "iscrowd": 0, "bbox": [319, 252, 52, 51], "area": 1904}, {"id": 5855849, "category_id": 156, "iscrowd": 0, "bbox": [560, 133, 80, 139], "area": 6235}, {"id": 9082773, "category_id": 181, "iscrowd": 0, "bbox": [0, 20, 552, 342], "area": 118115}, {"id": 7696246, "category_id": 186, "iscrowd": 0, "bbox": [331, 0, 309, 46], "area": 8486}, {"id": 4931399, "category_id": 189, "iscrowd": 0, "bbox": [0, 418, 100, 59], "area": 3264}, {"id": 9278624, "category_id": 193, "iscrowd": 0, "bbox": [0, 285, 292, 89], "area": 9027}, {"id": 6908276, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 292], "area": 51460}, {"id": 3085948, "category_id": 200, "iscrowd": 0, "bbox": [96, 373, 163, 88], "area": 8429}], "file_name": "000000290771.png", "image_id": 290771}, {"segments_info": [{"id": 6321024, "category_id": 24, "iscrowd": 0, "bbox": [12, 116, 279, 240], "area": 29414}, {"id": 7568513, "category_id": 24, "iscrowd": 0, "bbox": [204, 50, 434, 314], "area": 61099}, {"id": 4290911, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 277], "area": 89415}, {"id": 6595220, "category_id": 193, "iscrowd": 0, "bbox": [0, 234, 640, 193], "area": 92482}], "file_name": "000000290833.png", "image_id": 290833}, {"segments_info": [{"id": 1910318, "category_id": 1, "iscrowd": 0, "bbox": [216, 61, 212, 561], "area": 23112}, {"id": 5139322, "category_id": 17, "iscrowd": 0, "bbox": [22, 246, 220, 256], "area": 27006}, {"id": 8822941, "category_id": 65, "iscrowd": 0, "bbox": [1, 3, 425, 629], "area": 132254}, {"id": 1651002, "category_id": 73, "iscrowd": 0, "bbox": [187, 103, 241, 364], "area": 69265}, {"id": 4814190, "category_id": 93, "iscrowd": 0, "bbox": [0, 409, 428, 231], "area": 5478}, {"id": 3426666, "category_id": 141, "iscrowd": 0, "bbox": [71, 281, 76, 112], "area": 1319}, {"id": 9544353, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 428, 409], "area": 12331}], "file_name": "000000290843.png", "image_id": 290843}, {"segments_info": [{"id": 6976663, "category_id": 17, "iscrowd": 0, "bbox": [117, 77, 246, 242], "area": 27150}, {"id": 4338237, "category_id": 65, "iscrowd": 0, "bbox": [0, 2, 640, 387], "area": 172761}, {"id": 2497826, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 640, 393], "area": 6261}, {"id": 4532512, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 540, 234], "area": 43316}], "file_name": "000000291490.png", "image_id": 291490}, {"segments_info": [{"id": 9078160, "category_id": 1, "iscrowd": 0, "bbox": [151, 425, 28, 54], "area": 942}, {"id": 5919110, "category_id": 1, "iscrowd": 0, "bbox": [127, 428, 28, 48], "area": 651}, {"id": 10064798, "category_id": 1, "iscrowd": 0, "bbox": [192, 425, 14, 38], "area": 115}, {"id": 5787459, "category_id": 1, "iscrowd": 0, "bbox": [147, 110, 262, 305], "area": 31895}, {"id": 5920338, "category_id": 15, "iscrowd": 0, "bbox": [169, 446, 31, 21], "area": 181}, {"id": 4937048, "category_id": 41, "iscrowd": 0, "bbox": [229, 391, 158, 167], "area": 6156}, {"id": 8685972, "category_id": 41, "iscrowd": 0, "bbox": [130, 451, 16, 19], "area": 205}, {"id": 2778976, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 428, 394], "area": 97588}, {"id": 2575692, "category_id": 185, "iscrowd": 0, "bbox": [0, 352, 428, 163], "area": 35720}, {"id": 15721950, "category_id": 187, "iscrowd": 0, "bbox": [73, 0, 322, 289], "area": 32572}, {"id": 6974835, "category_id": 191, "iscrowd": 0, "bbox": [0, 465, 428, 175], "area": 62022}], "file_name": "000000291551.png", "image_id": 291551}, {"segments_info": [{"id": 4013912, "category_id": 1, "iscrowd": 0, "bbox": [342, 100, 88, 184], "area": 6072}, {"id": 6575172, "category_id": 1, "iscrowd": 0, "bbox": [131, 129, 99, 193], "area": 8628}, {"id": 12760766, "category_id": 34, "iscrowd": 0, "bbox": [407, 117, 27, 12], "area": 138}, {"id": 5269343, "category_id": 193, "iscrowd": 0, "bbox": [0, 249, 640, 178], "area": 107971}, {"id": 920332, "category_id": 199, "iscrowd": 0, "bbox": [306, 85, 334, 124], "area": 24208}], "file_name": "000000291619.png", "image_id": 291619}, {"segments_info": [{"id": 3620938, "category_id": 1, "iscrowd": 0, "bbox": [218, 197, 18, 55], "area": 628}, {"id": 4737871, "category_id": 1, "iscrowd": 0, "bbox": [350, 189, 35, 92], "area": 1822}, {"id": 3616300, "category_id": 1, "iscrowd": 0, "bbox": [0, 195, 15, 90], "area": 851}, {"id": 7828588, "category_id": 1, "iscrowd": 0, "bbox": [134, 201, 7, 28], "area": 116}, {"id": 4805973, "category_id": 1, "iscrowd": 0, "bbox": [139, 200, 9, 31], "area": 165}, {"id": 5261706, "category_id": 1, "iscrowd": 0, "bbox": [285, 193, 19, 96], "area": 813}, {"id": 2564896, "category_id": 1, "iscrowd": 0, "bbox": [205, 196, 16, 52], "area": 319}, {"id": 3488063, "category_id": 1, "iscrowd": 0, "bbox": [163, 202, 18, 36], "area": 423}, {"id": 5195594, "category_id": 1, "iscrowd": 0, "bbox": [315, 194, 25, 94], "area": 1372}, {"id": 8348756, "category_id": 1, "iscrowd": 0, "bbox": [9, 193, 25, 84], "area": 1296}, {"id": 7303530, "category_id": 2, "iscrowd": 0, "bbox": [40, 317, 368, 254], "area": 39912}, {"id": 6116479, "category_id": 4, "iscrowd": 0, "bbox": [15, 218, 167, 133], "area": 3634}, {"id": 4800854, "category_id": 4, "iscrowd": 0, "bbox": [19, 266, 23, 43], "area": 342}, {"id": 9472128, "category_id": 4, "iscrowd": 0, "bbox": [28, 213, 21, 44], "area": 514}, {"id": 5788745, "category_id": 4, "iscrowd": 0, "bbox": [58, 244, 353, 209], "area": 25215}, {"id": 5722181, "category_id": 4, "iscrowd": 0, "bbox": [17, 224, 151, 160], "area": 10791}, {"id": 8157039, "category_id": 4, "iscrowd": 0, "bbox": [33, 239, 21, 25], "area": 162}, {"id": 10397098, "category_id": 149, "iscrowd": 0, "bbox": [0, 252, 433, 388], "area": 64904}, {"id": 6580071, "category_id": 166, "iscrowd": 0, "bbox": [0, 0, 433, 274], "area": 48976}, {"id": 3429698, "category_id": 184, "iscrowd": 0, "bbox": [11, 0, 322, 226], "area": 29606}, {"id": 14995625, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 106, 185], "area": 12201}, {"id": 11909820, "category_id": 191, "iscrowd": 0, "bbox": [222, 239, 211, 255], "area": 18646}, {"id": 5658717, "category_id": 197, "iscrowd": 0, "bbox": [18, 0, 378, 261], "area": 3699}], "file_name": "000000291634.png", "image_id": 291634}, {"segments_info": [{"id": 5463755, "category_id": 11, "iscrowd": 0, "bbox": [131, 65, 184, 396], "area": 45258}, {"id": 7707836, "category_id": 18, "iscrowd": 0, "bbox": [281, 169, 209, 329], "area": 33674}, {"id": 8887971, "category_id": 184, "iscrowd": 0, "bbox": [15, 0, 105, 81], "area": 5970}, {"id": 8170667, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 588, 640], "area": 261885}, {"id": 12770027, "category_id": 194, "iscrowd": 0, "bbox": [0, 182, 588, 67], "area": 17562}, {"id": 13557988, "category_id": 197, "iscrowd": 0, "bbox": [113, 450, 215, 71], "area": 11291}], "file_name": "000000291664.png", "image_id": 291664}, {"segments_info": [{"id": 9544351, "category_id": 1, "iscrowd": 0, "bbox": [140, 1, 155, 99], "area": 6828}, {"id": 3755610, "category_id": 1, "iscrowd": 0, "bbox": [0, 1, 120, 277], "area": 22475}, {"id": 5860712, "category_id": 1, "iscrowd": 0, "bbox": [289, 0, 104, 100], "area": 5238}, {"id": 3757905, "category_id": 4, "iscrowd": 0, "bbox": [13, 32, 575, 446], "area": 130561}, {"id": 3760484, "category_id": 27, "iscrowd": 0, "bbox": [531, 148, 97, 142], "area": 10880}, {"id": 2504769, "category_id": 31, "iscrowd": 0, "bbox": [198, 0, 62, 54], "area": 1297}, {"id": 3771322, "category_id": 185, "iscrowd": 0, "bbox": [0, 30, 172, 101], "area": 2032}, {"id": 16185592, "category_id": 187, "iscrowd": 0, "bbox": [273, 0, 367, 168], "area": 35216}, {"id": 5091236, "category_id": 193, "iscrowd": 0, "bbox": [0, 94, 640, 405], "area": 97680}], "file_name": "000000291791.png", "image_id": 291791}, {"segments_info": [{"id": 5855577, "category_id": 24, "iscrowd": 0, "bbox": [98, 79, 536, 346], "area": 102130}, {"id": 2500134, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 169380}], "file_name": "000000291861.png", "image_id": 291861}, {"segments_info": [{"id": 6382198, "category_id": 44, "iscrowd": 0, "bbox": [219, 454, 18, 50], "area": 757}, {"id": 5791345, "category_id": 44, "iscrowd": 0, "bbox": [202, 453, 18, 55], "area": 795}, {"id": 1320493, "category_id": 44, "iscrowd": 0, "bbox": [185, 466, 17, 44], "area": 524}, {"id": 4811167, "category_id": 70, "iscrowd": 0, "bbox": [304, 522, 94, 101], "area": 4139}, {"id": 6195134, "category_id": 81, "iscrowd": 0, "bbox": [409, 626, 71, 14], "area": 672}, {"id": 3695002, "category_id": 107, "iscrowd": 0, "bbox": [243, 571, 237, 69], "area": 5788}, {"id": 4086922, "category_id": 109, "iscrowd": 0, "bbox": [0, 139, 130, 501], "area": 55447}, {"id": 5929903, "category_id": 168, "iscrowd": 0, "bbox": [321, 537, 80, 48], "area": 2799}, {"id": 3430555, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 301, 44], "area": 8806}, {"id": 3039668, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 581], "area": 199813}], "file_name": "000000292005.png", "image_id": 292005}, {"segments_info": [{"id": 2504550, "category_id": 1, "iscrowd": 0, "bbox": [156, 2, 456, 451], "area": 99307}, {"id": 3034971, "category_id": 47, "iscrowd": 0, "bbox": [536, 470, 76, 142], "area": 9277}, {"id": 2107195, "category_id": 48, "iscrowd": 0, "bbox": [451, 317, 111, 73], "area": 1915}, {"id": 2913994, "category_id": 59, "iscrowd": 0, "bbox": [285, 367, 286, 190], "area": 30689}, {"id": 3183072, "category_id": 59, "iscrowd": 0, "bbox": [6, 325, 328, 255], "area": 55870}, {"id": 1521769, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 612, 472], "area": 122794}, {"id": 3236278, "category_id": 196, "iscrowd": 0, "bbox": [174, 322, 284, 55], "area": 294}], "file_name": "000000292024.png", "image_id": 292024}, {"segments_info": [{"id": 9413560, "category_id": 44, "iscrowd": 0, "bbox": [203, 360, 14, 33], "area": 326}, {"id": 5332589, "category_id": 47, "iscrowd": 0, "bbox": [207, 272, 26, 29], "area": 439}, {"id": 4213076, "category_id": 47, "iscrowd": 0, "bbox": [271, 272, 25, 27], "area": 430}, {"id": 5858412, "category_id": 47, "iscrowd": 0, "bbox": [179, 270, 26, 30], "area": 465}, {"id": 4148319, "category_id": 47, "iscrowd": 0, "bbox": [298, 272, 25, 27], "area": 433}, {"id": 855566, "category_id": 49, "iscrowd": 0, "bbox": [323, 344, 11, 11], "area": 47}, {"id": 2371380, "category_id": 49, "iscrowd": 0, "bbox": [315, 365, 9, 12], "area": 39}, {"id": 527635, "category_id": 49, "iscrowd": 0, "bbox": [313, 344, 9, 12], "area": 36}, {"id": 461320, "category_id": 49, "iscrowd": 0, "bbox": [321, 351, 10, 12], "area": 40}, {"id": 987405, "category_id": 49, "iscrowd": 0, "bbox": [322, 364, 12, 12], "area": 65}, {"id": 1185295, "category_id": 49, "iscrowd": 0, "bbox": [319, 365, 8, 11], "area": 29}, {"id": 987407, "category_id": 49, "iscrowd": 0, "bbox": [326, 351, 11, 13], "area": 64}, {"id": 394757, "category_id": 49, "iscrowd": 0, "bbox": [316, 344, 11, 14], "area": 54}, {"id": 1776923, "category_id": 78, "iscrowd": 0, "bbox": [358, 350, 50, 44], "area": 1813}, {"id": 11443862, "category_id": 79, "iscrowd": 0, "bbox": [0, 352, 172, 286], "area": 43674}, {"id": 10066074, "category_id": 81, "iscrowd": 0, "bbox": [171, 385, 177, 29], "area": 2920}, {"id": 12825000, "category_id": 82, "iscrowd": 0, "bbox": [397, 228, 31, 402], "area": 7852}, {"id": 1776925, "category_id": 107, "iscrowd": 0, "bbox": [123, 367, 284, 59], "area": 6596}, {"id": 13621726, "category_id": 130, "iscrowd": 0, "bbox": [152, 66, 108, 72], "area": 4275}, {"id": 10466751, "category_id": 171, "iscrowd": 0, "bbox": [0, 214, 410, 171], "area": 38519}, {"id": 3687746, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 428, 102], "area": 28652}, {"id": 11511457, "category_id": 188, "iscrowd": 0, "bbox": [0, 35, 428, 548], "area": 110900}, {"id": 3026985, "category_id": 190, "iscrowd": 0, "bbox": [0, 543, 406, 97], "area": 20375}, {"id": 3485729, "category_id": 200, "iscrowd": 0, "bbox": [389, 596, 39, 44], "area": 593}], "file_name": "000000292060.png", "image_id": 292060}, {"segments_info": [{"id": 10459798, "category_id": 1, "iscrowd": 0, "bbox": [249, 207, 225, 412], "area": 50983}, {"id": 6907233, "category_id": 1, "iscrowd": 0, "bbox": [73, 169, 207, 322], "area": 38826}, {"id": 5196357, "category_id": 32, "iscrowd": 0, "bbox": [195, 331, 48, 80], "area": 1240}, {"id": 6578268, "category_id": 32, "iscrowd": 0, "bbox": [310, 325, 50, 18], "area": 327}, {"id": 5920595, "category_id": 62, "iscrowd": 0, "bbox": [25, 237, 524, 338], "area": 27879}, {"id": 6775904, "category_id": 109, "iscrowd": 0, "bbox": [299, 0, 341, 561], "area": 101102}, {"id": 2434596, "category_id": 189, "iscrowd": 0, "bbox": [545, 460, 75, 64], "area": 3763}, {"id": 11249572, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 338, 418], "area": 65093}], "file_name": "000000292082.png", "image_id": 292082}, {"segments_info": [{"id": 4870226, "category_id": 1, "iscrowd": 0, "bbox": [466, 442, 83, 38], "area": 2339}, {"id": 6647669, "category_id": 28, "iscrowd": 0, "bbox": [1, 4, 469, 471], "area": 185964}, {"id": 2369309, "category_id": 184, "iscrowd": 0, "bbox": [425, 48, 215, 432], "area": 45149}, {"id": 8808773, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 71449}], "file_name": "000000292155.png", "image_id": 292155}, {"segments_info": [{"id": 8091760, "category_id": 1, "iscrowd": 0, "bbox": [231, 152, 15, 23], "area": 199}, {"id": 6580323, "category_id": 1, "iscrowd": 0, "bbox": [65, 131, 33, 45], "area": 566}, {"id": 7830905, "category_id": 43, "iscrowd": 0, "bbox": [96, 146, 15, 11], "area": 99}, {"id": 7435362, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 320, 191], "area": 55147}, {"id": 16447991, "category_id": 187, "iscrowd": 0, "bbox": [45, 0, 275, 110], "area": 4265}, {"id": 4169587, "category_id": 193, "iscrowd": 0, "bbox": [0, 180, 320, 60], "area": 16462}], "file_name": "000000292225.png", "image_id": 292225}, {"segments_info": [{"id": 7091767, "category_id": 1, "iscrowd": 0, "bbox": [25, 119, 32, 127], "area": 2137}, {"id": 8545144, "category_id": 1, "iscrowd": 0, "bbox": [49, 106, 23, 79], "area": 1215}, {"id": 3091773, "category_id": 1, "iscrowd": 0, "bbox": [0, 113, 32, 349], "area": 7758}, {"id": 7553861, "category_id": 1, "iscrowd": 0, "bbox": [103, 91, 110, 395], "area": 29766}, {"id": 2759463, "category_id": 1, "iscrowd": 0, "bbox": [55, 121, 64, 316], "area": 12207}, {"id": 9798058, "category_id": 7, "iscrowd": 0, "bbox": [202, 44, 130, 117], "area": 13854}, {"id": 2759456, "category_id": 33, "iscrowd": 0, "bbox": [55, 352, 56, 79], "area": 1567}, {"id": 7229282, "category_id": 144, "iscrowd": 0, "bbox": [0, 183, 290, 317], "area": 26863}, {"id": 6442346, "category_id": 147, "iscrowd": 0, "bbox": [190, 151, 142, 349], "area": 36522}, {"id": 2302251, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 194, 69], "area": 8747}, {"id": 11697807, "category_id": 187, "iscrowd": 0, "bbox": [202, 0, 130, 45], "area": 4118}, {"id": 9467028, "category_id": 191, "iscrowd": 0, "bbox": [13, 127, 195, 58], "area": 2172}, {"id": 6444915, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 332, 142], "area": 17378}], "file_name": "000000292236.png", "image_id": 292236}, {"segments_info": [{"id": 3034745, "category_id": 18, "iscrowd": 0, "bbox": [176, 30, 457, 295], "area": 82815}, {"id": 2961203, "category_id": 39, "iscrowd": 0, "bbox": [135, 280, 381, 30], "area": 5056}, {"id": 4883808, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 277], "area": 76642}, {"id": 8822966, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 512], "area": 150315}], "file_name": "000000292330.png", "image_id": 292330}, {"segments_info": [{"id": 2961197, "category_id": 1, "iscrowd": 0, "bbox": [73, 126, 148, 125], "area": 5386}, {"id": 855308, "category_id": 41, "iscrowd": 0, "bbox": [197, 192, 23, 72], "area": 782}, {"id": 725001, "category_id": 144, "iscrowd": 0, "bbox": [0, 146, 333, 354], "area": 62790}, {"id": 3292218, "category_id": 184, "iscrowd": 0, "bbox": [116, 0, 217, 329], "area": 5576}, {"id": 10399376, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 330, 392], "area": 80292}], "file_name": "000000292415.png", "image_id": 292415}, {"segments_info": [{"id": 7102581, "category_id": 1, "iscrowd": 0, "bbox": [367, 109, 124, 102], "area": 6911}, {"id": 7895163, "category_id": 1, "iscrowd": 0, "bbox": [262, 83, 17, 29], "area": 403}, {"id": 5986923, "category_id": 1, "iscrowd": 0, "bbox": [266, 189, 346, 165], "area": 39236}, {"id": 6573640, "category_id": 1, "iscrowd": 0, "bbox": [194, 62, 58, 108], "area": 3710}, {"id": 3348245, "category_id": 1, "iscrowd": 0, "bbox": [0, 108, 11, 28], "area": 176}, {"id": 5143229, "category_id": 59, "iscrowd": 0, "bbox": [279, 385, 135, 93], "area": 6676}, {"id": 3751268, "category_id": 59, "iscrowd": 0, "bbox": [535, 373, 62, 39], "area": 1511}, {"id": 5007769, "category_id": 59, "iscrowd": 0, "bbox": [452, 362, 72, 34], "area": 1261}, {"id": 3484524, "category_id": 59, "iscrowd": 0, "bbox": [75, 418, 88, 73], "area": 4119}, {"id": 8954529, "category_id": 72, "iscrowd": 0, "bbox": [242, 108, 108, 181], "area": 13646}, {"id": 5583131, "category_id": 72, "iscrowd": 0, "bbox": [33, 1, 77, 108], "area": 5536}, {"id": 5782062, "category_id": 72, "iscrowd": 0, "bbox": [144, 75, 42, 70], "area": 1834}, {"id": 6842467, "category_id": 73, "iscrowd": 0, "bbox": [27, 38, 122, 117], "area": 2631}, {"id": 5267590, "category_id": 100, "iscrowd": 0, "bbox": [0, 74, 612, 538], "area": 140403}, {"id": 6776163, "category_id": 156, "iscrowd": 0, "bbox": [34, 0, 198, 225], "area": 14407}, {"id": 10665641, "category_id": 180, "iscrowd": 0, "bbox": [228, 12, 210, 75], "area": 12472}, {"id": 4875406, "category_id": 189, "iscrowd": 0, "bbox": [10, 208, 602, 404], "area": 26770}, {"id": 1704194, "category_id": 190, "iscrowd": 0, "bbox": [533, 569, 79, 43], "area": 2114}, {"id": 5264989, "category_id": 195, "iscrowd": 0, "bbox": [0, 152, 533, 460], "area": 5583}, {"id": 3946331, "category_id": 196, "iscrowd": 0, "bbox": [112, 303, 500, 280], "area": 21488}, {"id": 8358778, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 612, 182], "area": 46518}], "file_name": "000000292446.png", "image_id": 292446}, {"segments_info": [{"id": 5143715, "category_id": 1, "iscrowd": 0, "bbox": [322, 69, 32, 92], "area": 2057}, {"id": 1714228, "category_id": 1, "iscrowd": 0, "bbox": [130, 32, 60, 238], "area": 6779}, {"id": 2700355, "category_id": 1, "iscrowd": 0, "bbox": [185, 46, 127, 255], "area": 5345}, {"id": 7698548, "category_id": 4, "iscrowd": 0, "bbox": [250, 174, 143, 167], "area": 10866}, {"id": 6458541, "category_id": 31, "iscrowd": 0, "bbox": [149, 154, 75, 65], "area": 3471}, {"id": 6259868, "category_id": 31, "iscrowd": 0, "bbox": [313, 157, 48, 70], "area": 2513}, {"id": 2503994, "category_id": 64, "iscrowd": 0, "bbox": [190, 113, 26, 40], "area": 608}, {"id": 2500913, "category_id": 112, "iscrowd": 0, "bbox": [0, 16, 63, 359], "area": 20780}, {"id": 7376544, "category_id": 149, "iscrowd": 0, "bbox": [223, 198, 277, 168], "area": 19632}, {"id": 7050144, "category_id": 184, "iscrowd": 0, "bbox": [390, 70, 59, 136], "area": 4293}, {"id": 13492968, "category_id": 191, "iscrowd": 0, "bbox": [73, 178, 427, 161], "area": 20866}, {"id": 8229790, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 224], "area": 58132}, {"id": 10792902, "category_id": 199, "iscrowd": 0, "bbox": [56, 340, 279, 35], "area": 6113}], "file_name": "000000292456.png", "image_id": 292456}, {"segments_info": [{"id": 1119256, "category_id": 1, "iscrowd": 0, "bbox": [73, 69, 348, 357], "area": 87604}, {"id": 2566955, "category_id": 77, "iscrowd": 0, "bbox": [344, 111, 29, 80], "area": 1635}, {"id": 4080199, "category_id": 184, "iscrowd": 0, "bbox": [102, 0, 480, 426], "area": 37307}], "file_name": "000000292488.png", "image_id": 292488}, {"segments_info": [{"id": 3692933, "category_id": 1, "iscrowd": 0, "bbox": [179, 132, 45, 60], "area": 780}, {"id": 1586519, "category_id": 42, "iscrowd": 0, "bbox": [202, 168, 67, 21], "area": 392}, {"id": 8492455, "category_id": 155, "iscrowd": 0, "bbox": [0, 126, 384, 514], "area": 194394}, {"id": 11527421, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 384, 135], "area": 50094}], "file_name": "000000292908.png", "image_id": 292908}, {"segments_info": [{"id": 3424067, "category_id": 1, "iscrowd": 0, "bbox": [432, 240, 11, 9], "area": 60}, {"id": 2171935, "category_id": 1, "iscrowd": 0, "bbox": [364, 229, 14, 17], "area": 156}, {"id": 3880761, "category_id": 1, "iscrowd": 0, "bbox": [608, 230, 30, 70], "area": 1060}, {"id": 7106160, "category_id": 3, "iscrowd": 0, "bbox": [313, 248, 204, 67], "area": 9746}, {"id": 9278357, "category_id": 3, "iscrowd": 0, "bbox": [325, 229, 26, 17], "area": 376}, {"id": 8028550, "category_id": 3, "iscrowd": 0, "bbox": [409, 235, 72, 35], "area": 1359}, {"id": 7040112, "category_id": 3, "iscrowd": 0, "bbox": [0, 212, 190, 171], "area": 24412}, {"id": 5388083, "category_id": 8, "iscrowd": 0, "bbox": [392, 195, 193, 72], "area": 5920}, {"id": 3222387, "category_id": 10, "iscrowd": 0, "bbox": [515, 194, 15, 19], "area": 170}, {"id": 4013435, "category_id": 10, "iscrowd": 0, "bbox": [474, 111, 36, 56], "area": 1686}, {"id": 1841955, "category_id": 10, "iscrowd": 0, "bbox": [5, 163, 14, 26], "area": 192}, {"id": 3092050, "category_id": 10, "iscrowd": 0, "bbox": [506, 195, 12, 18], "area": 146}, {"id": 4801979, "category_id": 10, "iscrowd": 0, "bbox": [215, 198, 12, 13], "area": 139}, {"id": 11711154, "category_id": 159, "iscrowd": 0, "bbox": [0, 236, 640, 244], "area": 114698}, {"id": 6581108, "category_id": 184, "iscrowd": 0, "bbox": [14, 0, 626, 255], "area": 49345}, {"id": 12435135, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 172], "area": 58865}, {"id": 4739685, "category_id": 197, "iscrowd": 0, "bbox": [0, 27, 640, 232], "area": 36569}], "file_name": "000000292997.png", "image_id": 292997}, {"segments_info": [{"id": 3684962, "category_id": 50, "iscrowd": 0, "bbox": [73, 64, 98, 74], "area": 1492}, {"id": 6259355, "category_id": 54, "iscrowd": 0, "bbox": [153, 24, 117, 117], "area": 11439}, {"id": 2118318, "category_id": 57, "iscrowd": 0, "bbox": [88, 17, 66, 59], "area": 2973}, {"id": 5404043, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 288, 160], "area": 8594}], "file_name": "000000293044.png", "image_id": 293044}, {"segments_info": [{"id": 3815508, "category_id": 3, "iscrowd": 0, "bbox": [274, 181, 59, 58], "area": 2731}, {"id": 4670547, "category_id": 3, "iscrowd": 0, "bbox": [0, 153, 91, 66], "area": 4239}, {"id": 5195328, "category_id": 3, "iscrowd": 0, "bbox": [73, 149, 205, 82], "area": 12020}, {"id": 8683660, "category_id": 11, "iscrowd": 0, "bbox": [82, 246, 84, 230], "area": 11043}, {"id": 6645359, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 335, 206], "area": 55138}, {"id": 10920865, "category_id": 149, "iscrowd": 0, "bbox": [0, 203, 335, 297], "area": 81930}], "file_name": "000000293071.png", "image_id": 293071}, {"segments_info": [{"id": 7362441, "category_id": 1, "iscrowd": 0, "bbox": [319, 131, 27, 30], "area": 473}, {"id": 3616813, "category_id": 1, "iscrowd": 0, "bbox": [80, 98, 43, 147], "area": 3287}, {"id": 5403530, "category_id": 1, "iscrowd": 0, "bbox": [308, 152, 135, 275], "area": 16935}, {"id": 11178888, "category_id": 1, "iscrowd": 0, "bbox": [503, 123, 35, 71], "area": 1595}, {"id": 7890873, "category_id": 1, "iscrowd": 0, "bbox": [610, 135, 25, 40], "area": 701}, {"id": 9865101, "category_id": 1, "iscrowd": 0, "bbox": [275, 127, 35, 58], "area": 1275}, {"id": 5264456, "category_id": 1, "iscrowd": 0, "bbox": [93, 78, 111, 322], "area": 23334}, {"id": 8025719, "category_id": 1, "iscrowd": 0, "bbox": [0, 176, 59, 246], "area": 10837}, {"id": 6510686, "category_id": 1, "iscrowd": 0, "bbox": [377, 131, 44, 69], "area": 1164}, {"id": 9463949, "category_id": 1, "iscrowd": 0, "bbox": [415, 145, 13, 27], "area": 165}, {"id": 10660265, "category_id": 1, "iscrowd": 0, "bbox": [0, 83, 100, 308], "area": 10438}, {"id": 6574170, "category_id": 1, "iscrowd": 0, "bbox": [167, 116, 72, 244], "area": 5581}, {"id": 8090498, "category_id": 1, "iscrowd": 0, "bbox": [463, 163, 46, 31], "area": 591}, {"id": 6644324, "category_id": 1, "iscrowd": 1, "bbox": [71, 84, 551, 121], "area": 17700}, {"id": 8800036, "category_id": 27, "iscrowd": 0, "bbox": [198, 151, 12, 12], "area": 64}, {"id": 6059631, "category_id": 38, "iscrowd": 0, "bbox": [140, 132, 86, 126], "area": 2210}, {"id": 11114918, "category_id": 38, "iscrowd": 0, "bbox": [220, 0, 41, 84], "area": 1090}, {"id": 12890807, "category_id": 38, "iscrowd": 0, "bbox": [590, 170, 50, 36], "area": 999}, {"id": 12958648, "category_id": 44, "iscrowd": 0, "bbox": [112, 151, 14, 27], "area": 264}, {"id": 13418939, "category_id": 44, "iscrowd": 0, "bbox": [124, 149, 15, 29], "area": 254}, {"id": 6778734, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 154], "area": 70848}, {"id": 8954012, "category_id": 191, "iscrowd": 0, "bbox": [250, 163, 390, 49], "area": 3063}, {"id": 6265733, "category_id": 193, "iscrowd": 0, "bbox": [36, 150, 604, 277], "area": 88202}, {"id": 10067358, "category_id": 197, "iscrowd": 0, "bbox": [48, 0, 189, 141], "area": 2280}], "file_name": "000000293200.png", "image_id": 293200}, {"segments_info": [{"id": 6379870, "category_id": 4, "iscrowd": 0, "bbox": [169, 138, 416, 313], "area": 72211}, {"id": 3421749, "category_id": 64, "iscrowd": 0, "bbox": [587, 201, 23, 27], "area": 462}, {"id": 3682866, "category_id": 64, "iscrowd": 0, "bbox": [490, 207, 16, 21], "area": 176}, {"id": 2368546, "category_id": 64, "iscrowd": 0, "bbox": [378, 184, 26, 35], "area": 575}, {"id": 4602944, "category_id": 181, "iscrowd": 0, "bbox": [354, 68, 239, 186], "area": 25081}, {"id": 3158834, "category_id": 184, "iscrowd": 0, "bbox": [591, 72, 49, 182], "area": 6074}, {"id": 12500676, "category_id": 191, "iscrowd": 0, "bbox": [0, 232, 640, 248], "area": 68437}, {"id": 4866890, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 84985}], "file_name": "000000293245.png", "image_id": 293245}, {"segments_info": [{"id": 8620461, "category_id": 1, "iscrowd": 0, "bbox": [0, 281, 91, 141], "area": 10017}, {"id": 5070703, "category_id": 22, "iscrowd": 0, "bbox": [209, 75, 265, 236], "area": 34885}, {"id": 3950416, "category_id": 22, "iscrowd": 0, "bbox": [118, 146, 119, 139], "area": 6709}, {"id": 6116171, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 578, 316], "area": 62802}, {"id": 9802378, "category_id": 185, "iscrowd": 0, "bbox": [48, 0, 262, 292], "area": 20596}, {"id": 11041623, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 320], "area": 58232}, {"id": 8097721, "category_id": 198, "iscrowd": 0, "bbox": [55, 411, 30, 16], "area": 214}], "file_name": "000000293300.png", "image_id": 293300}, {"segments_info": [{"id": 13687257, "category_id": 5, "iscrowd": 0, "bbox": [190, 273, 216, 37], "area": 3691}, {"id": 12626577, "category_id": 5, "iscrowd": 0, "bbox": [83, 233, 116, 76], "area": 3871}, {"id": 11643296, "category_id": 5, "iscrowd": 0, "bbox": [369, 227, 213, 94], "area": 7668}, {"id": 11501405, "category_id": 5, "iscrowd": 0, "bbox": [32, 276, 29, 27], "area": 421}, {"id": 9209720, "category_id": 6, "iscrowd": 0, "bbox": [29, 303, 112, 27], "area": 2760}, {"id": 7965333, "category_id": 8, "iscrowd": 0, "bbox": [164, 293, 70, 38], "area": 1781}, {"id": 5734035, "category_id": 8, "iscrowd": 0, "bbox": [302, 306, 15, 21], "area": 227}, {"id": 7897735, "category_id": 8, "iscrowd": 0, "bbox": [544, 313, 38, 16], "area": 330}, {"id": 8160650, "category_id": 8, "iscrowd": 0, "bbox": [587, 315, 38, 14], "area": 280}, {"id": 6584454, "category_id": 8, "iscrowd": 0, "bbox": [231, 301, 72, 30], "area": 1734}, {"id": 7242127, "category_id": 149, "iscrowd": 0, "bbox": [0, 317, 640, 89], "area": 50199}, {"id": 5069138, "category_id": 184, "iscrowd": 0, "bbox": [0, 299, 30, 28], "area": 597}, {"id": 13215873, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 309], "area": 158837}, {"id": 5922392, "category_id": 197, "iscrowd": 0, "bbox": [302, 123, 338, 215], "area": 26054}], "file_name": "000000293324.png", "image_id": 293324}, {"segments_info": [{"id": 4485279, "category_id": 44, "iscrowd": 0, "bbox": [392, 21, 27, 70], "area": 1418}, {"id": 14081766, "category_id": 81, "iscrowd": 0, "bbox": [192, 84, 194, 54], "area": 8266}, {"id": 10723217, "category_id": 90, "iscrowd": 0, "bbox": [470, 9, 8, 37], "area": 103}, {"id": 9609367, "category_id": 90, "iscrowd": 0, "bbox": [495, 11, 7, 38], "area": 150}, {"id": 11048317, "category_id": 90, "iscrowd": 0, "bbox": [457, 9, 12, 35], "area": 174}, {"id": 9282226, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 58, 182], "area": 7444}, {"id": 2172729, "category_id": 168, "iscrowd": 0, "bbox": [87, 0, 70, 98], "area": 4831}, {"id": 2442355, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 618, 420], "area": 22487}, {"id": 2248085, "category_id": 188, "iscrowd": 0, "bbox": [32, 160, 512, 258], "area": 109404}, {"id": 5074317, "category_id": 190, "iscrowd": 0, "bbox": [0, 299, 564, 181], "area": 49673}, {"id": 7770540, "category_id": 199, "iscrowd": 0, "bbox": [37, 0, 603, 480], "area": 47556}], "file_name": "000000293390.png", "image_id": 293390}, {"segments_info": [{"id": 4553092, "category_id": 11, "iscrowd": 0, "bbox": [212, 150, 78, 125], "area": 5296}, {"id": 5659472, "category_id": 84, "iscrowd": 0, "bbox": [345, 27, 8, 16], "area": 77}, {"id": 6054230, "category_id": 84, "iscrowd": 0, "bbox": [351, 28, 10, 24], "area": 84}, {"id": 5725009, "category_id": 84, "iscrowd": 0, "bbox": [354, 28, 31, 24], "area": 588}, {"id": 5989211, "category_id": 84, "iscrowd": 0, "bbox": [380, 29, 12, 23], "area": 124}, {"id": 5201500, "category_id": 84, "iscrowd": 0, "bbox": [386, 38, 10, 16], "area": 120}, {"id": 11185067, "category_id": 149, "iscrowd": 0, "bbox": [0, 323, 500, 10], "area": 3762}, {"id": 5922387, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 500, 173], "area": 45386}, {"id": 11776175, "category_id": 191, "iscrowd": 0, "bbox": [0, 204, 500, 123], "area": 54441}, {"id": 10001565, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 223], "area": 56478}], "file_name": "000000293474.png", "image_id": 293474}, {"segments_info": [{"id": 9736851, "category_id": 1, "iscrowd": 0, "bbox": [1, 28, 306, 446], "area": 90115}, {"id": 2763327, "category_id": 1, "iscrowd": 0, "bbox": [251, 159, 294, 314], "area": 40154}, {"id": 2041382, "category_id": 44, "iscrowd": 0, "bbox": [575, 138, 27, 105], "area": 2015}, {"id": 4935797, "category_id": 46, "iscrowd": 0, "bbox": [526, 430, 74, 50], "area": 3368}, {"id": 7368309, "category_id": 63, "iscrowd": 0, "bbox": [400, 316, 116, 89], "area": 8507}, {"id": 1382687, "category_id": 64, "iscrowd": 0, "bbox": [533, 73, 107, 168], "area": 4811}, {"id": 7030145, "category_id": 75, "iscrowd": 0, "bbox": [486, 395, 52, 44], "area": 1008}, {"id": 15852758, "category_id": 75, "iscrowd": 0, "bbox": [78, 198, 109, 155], "area": 3476}, {"id": 7501183, "category_id": 109, "iscrowd": 0, "bbox": [456, 0, 103, 320], "area": 20412}, {"id": 5316390, "category_id": 130, "iscrowd": 0, "bbox": [375, 191, 18, 27], "area": 331}, {"id": 1713716, "category_id": 181, "iscrowd": 0, "bbox": [539, 0, 101, 243], "area": 14733}, {"id": 7962492, "category_id": 195, "iscrowd": 0, "bbox": [536, 355, 104, 111], "area": 7801}, {"id": 8880520, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 409], "area": 97706}], "file_name": "000000293625.png", "image_id": 293625}, {"segments_info": [{"id": 7625039, "category_id": 1, "iscrowd": 0, "bbox": [97, 292, 75, 87], "area": 2682}, {"id": 985869, "category_id": 1, "iscrowd": 0, "bbox": [26, 322, 101, 247], "area": 14874}, {"id": 6313295, "category_id": 1, "iscrowd": 0, "bbox": [230, 286, 27, 66], "area": 812}, {"id": 2302513, "category_id": 1, "iscrowd": 0, "bbox": [253, 290, 18, 28], "area": 195}, {"id": 3221291, "category_id": 1, "iscrowd": 0, "bbox": [262, 246, 134, 107], "area": 6834}, {"id": 1774354, "category_id": 1, "iscrowd": 0, "bbox": [0, 249, 37, 312], "area": 8642}, {"id": 11438209, "category_id": 3, "iscrowd": 0, "bbox": [210, 287, 24, 15], "area": 270}, {"id": 12089674, "category_id": 3, "iscrowd": 0, "bbox": [204, 286, 9, 5], "area": 33}, {"id": 10254928, "category_id": 3, "iscrowd": 0, "bbox": [196, 290, 15, 11], "area": 117}, {"id": 1445904, "category_id": 32, "iscrowd": 0, "bbox": [318, 300, 12, 23], "area": 172}, {"id": 1464162, "category_id": 52, "iscrowd": 0, "bbox": [0, 569, 124, 71], "area": 7328}, {"id": 1195338, "category_id": 52, "iscrowd": 0, "bbox": [236, 533, 57, 100], "area": 2406}, {"id": 1329237, "category_id": 52, "iscrowd": 0, "bbox": [328, 530, 100, 110], "area": 9306}, {"id": 1987421, "category_id": 52, "iscrowd": 0, "bbox": [49, 526, 99, 105], "area": 4962}, {"id": 1331524, "category_id": 52, "iscrowd": 0, "bbox": [122, 450, 64, 74], "area": 2523}, {"id": 1331809, "category_id": 52, "iscrowd": 0, "bbox": [133, 502, 107, 79], "area": 3705}, {"id": 2445920, "category_id": 52, "iscrowd": 0, "bbox": [292, 448, 79, 88], "area": 2583}, {"id": 1658186, "category_id": 52, "iscrowd": 0, "bbox": [239, 486, 117, 73], "area": 3252}, {"id": 1397088, "category_id": 52, "iscrowd": 0, "bbox": [237, 350, 75, 63], "area": 2533}, {"id": 1986395, "category_id": 52, "iscrowd": 0, "bbox": [347, 414, 56, 43], "area": 1631}, {"id": 1461076, "category_id": 52, "iscrowd": 0, "bbox": [160, 409, 76, 103], "area": 4252}, {"id": 1529707, "category_id": 52, "iscrowd": 0, "bbox": [121, 528, 55, 111], "area": 2899}, {"id": 1660770, "category_id": 52, "iscrowd": 0, "bbox": [149, 431, 42, 64], "area": 1397}, {"id": 1657172, "category_id": 52, "iscrowd": 1, "bbox": [68, 331, 360, 309], "area": 47086}, {"id": 7765684, "category_id": 92, "iscrowd": 0, "bbox": [352, 283, 58, 25], "area": 878}, {"id": 8351076, "category_id": 100, "iscrowd": 0, "bbox": [26, 64, 402, 404], "area": 8130}, {"id": 3032927, "category_id": 122, "iscrowd": 0, "bbox": [28, 272, 138, 368], "area": 2486}, {"id": 2763821, "category_id": 125, "iscrowd": 0, "bbox": [0, 325, 205, 269], "area": 3867}, {"id": 10067610, "category_id": 130, "iscrowd": 0, "bbox": [0, 9, 107, 166], "area": 3562}, {"id": 3619132, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 428, 205], "area": 52800}, {"id": 16184563, "category_id": 187, "iscrowd": 0, "bbox": [40, 140, 319, 66], "area": 10552}, {"id": 13618636, "category_id": 197, "iscrowd": 0, "bbox": [60, 155, 353, 173], "area": 23545}, {"id": 7830145, "category_id": 199, "iscrowd": 0, "bbox": [0, 148, 159, 173], "area": 11387}], "file_name": "000000293794.png", "image_id": 293794}, {"segments_info": [{"id": 396320, "category_id": 62, "iscrowd": 0, "bbox": [260, 186, 240, 143], "area": 24458}, {"id": 462114, "category_id": 63, "iscrowd": 0, "bbox": [3, 187, 204, 141], "area": 26314}, {"id": 660782, "category_id": 64, "iscrowd": 0, "bbox": [97, 159, 33, 31], "area": 431}, {"id": 1651008, "category_id": 64, "iscrowd": 0, "bbox": [290, 180, 23, 57], "area": 379}, {"id": 1123404, "category_id": 86, "iscrowd": 0, "bbox": [296, 207, 19, 30], "area": 459}, {"id": 991844, "category_id": 109, "iscrowd": 0, "bbox": [324, 0, 176, 243], "area": 35595}, {"id": 1124957, "category_id": 130, "iscrowd": 0, "bbox": [71, 52, 68, 106], "area": 2419}, {"id": 6659792, "category_id": 171, "iscrowd": 0, "bbox": [180, 0, 130, 161], "area": 18079}, {"id": 926543, "category_id": 177, "iscrowd": 0, "bbox": [202, 266, 79, 21], "area": 1294}, {"id": 3436728, "category_id": 186, "iscrowd": 0, "bbox": [228, 0, 120, 39], "area": 2399}, {"id": 2907809, "category_id": 190, "iscrowd": 0, "bbox": [195, 282, 85, 51], "area": 3051}, {"id": 2050185, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 366, 273], "area": 36525}], "file_name": "000000293804.png", "image_id": 293804}, {"segments_info": [{"id": 10919066, "category_id": 44, "iscrowd": 0, "bbox": [378, 19, 117, 252], "area": 16951}, {"id": 7767433, "category_id": 47, "iscrowd": 0, "bbox": [323, 81, 80, 126], "area": 8481}, {"id": 728953, "category_id": 57, "iscrowd": 0, "bbox": [119, 213, 21, 22], "area": 149}, {"id": 2315664, "category_id": 57, "iscrowd": 0, "bbox": [113, 177, 23, 11], "area": 146}, {"id": 1724069, "category_id": 57, "iscrowd": 0, "bbox": [123, 208, 33, 37], "area": 280}, {"id": 6392521, "category_id": 57, "iscrowd": 0, "bbox": [120, 150, 135, 110], "area": 6913}, {"id": 6131127, "category_id": 58, "iscrowd": 0, "bbox": [84, 201, 368, 211], "area": 51670}, {"id": 1449762, "category_id": 62, "iscrowd": 0, "bbox": [49, 3, 138, 178], "area": 13037}, {"id": 1383713, "category_id": 62, "iscrowd": 0, "bbox": [228, 5, 68, 131], "area": 6062}, {"id": 7177368, "category_id": 67, "iscrowd": 0, "bbox": [3, 131, 497, 316], "area": 68008}, {"id": 8688800, "category_id": 67, "iscrowd": 0, "bbox": [136, 4, 113, 31], "area": 2843}, {"id": 6322309, "category_id": 189, "iscrowd": 0, "bbox": [163, 132, 260, 319], "area": 1676}, {"id": 2502191, "category_id": 190, "iscrowd": 0, "bbox": [0, 14, 237, 177], "area": 11726}], "file_name": "000000293858.png", "image_id": 293858}, {"segments_info": [{"id": 6385801, "category_id": 73, "iscrowd": 0, "bbox": [49, 75, 342, 380], "area": 112686}, {"id": 8885427, "category_id": 74, "iscrowd": 0, "bbox": [337, 416, 130, 118], "area": 9882}], "file_name": "000000294162.png", "image_id": 294162}, {"segments_info": [{"id": 11705192, "category_id": 85, "iscrowd": 0, "bbox": [274, 483, 63, 69], "area": 3286}, {"id": 7955020, "category_id": 85, "iscrowd": 0, "bbox": [222, 494, 30, 72], "area": 1468}, {"id": 12535072, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 393, 461], "area": 124025}, {"id": 15880715, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 429, 640], "area": 108717}, {"id": 13406287, "category_id": 197, "iscrowd": 0, "bbox": [212, 236, 144, 404], "area": 36977}], "file_name": "000000294163.png", "image_id": 294163}, {"segments_info": [{"id": 10661568, "category_id": 1, "iscrowd": 0, "bbox": [323, 190, 43, 79], "area": 1850}, {"id": 4213854, "category_id": 1, "iscrowd": 0, "bbox": [136, 134, 70, 193], "area": 5277}, {"id": 790032, "category_id": 1, "iscrowd": 0, "bbox": [524, 126, 114, 299], "area": 25648}, {"id": 8357013, "category_id": 1, "iscrowd": 0, "bbox": [261, 165, 76, 134], "area": 6324}, {"id": 2304820, "category_id": 1, "iscrowd": 0, "bbox": [70, 127, 61, 34], "area": 1325}, {"id": 3094593, "category_id": 1, "iscrowd": 0, "bbox": [232, 90, 285, 335], "area": 48516}, {"id": 1383460, "category_id": 1, "iscrowd": 0, "bbox": [225, 219, 29, 84], "area": 2124}, {"id": 8569065, "category_id": 44, "iscrowd": 0, "bbox": [206, 163, 18, 43], "area": 571}, {"id": 5027040, "category_id": 44, "iscrowd": 0, "bbox": [216, 159, 22, 52], "area": 774}, {"id": 4806254, "category_id": 51, "iscrowd": 0, "bbox": [0, 0, 95, 153], "area": 10385}, {"id": 2922919, "category_id": 52, "iscrowd": 0, "bbox": [238, 337, 48, 75], "area": 513}, {"id": 9415614, "category_id": 79, "iscrowd": 0, "bbox": [486, 162, 10, 35], "area": 292}, {"id": 5993350, "category_id": 79, "iscrowd": 0, "bbox": [495, 153, 37, 114], "area": 2936}, {"id": 3688535, "category_id": 100, "iscrowd": 0, "bbox": [126, 302, 25, 22], "area": 318}, {"id": 15397107, "category_id": 130, "iscrowd": 0, "bbox": [88, 52, 529, 128], "area": 7388}, {"id": 4347242, "category_id": 156, "iscrowd": 0, "bbox": [0, 126, 274, 209], "area": 13247}, {"id": 3688279, "category_id": 181, "iscrowd": 0, "bbox": [176, 169, 20, 23], "area": 329}, {"id": 7768989, "category_id": 186, "iscrowd": 0, "bbox": [1, 0, 639, 178], "area": 56112}, {"id": 4345955, "category_id": 189, "iscrowd": 0, "bbox": [144, 296, 247, 129], "area": 2207}, {"id": 5273256, "category_id": 196, "iscrowd": 0, "bbox": [218, 291, 119, 76], "area": 2822}, {"id": 9544881, "category_id": 199, "iscrowd": 0, "bbox": [64, 0, 576, 240], "area": 21478}], "file_name": "000000294350.png", "image_id": 294350}, {"segments_info": [{"id": 3555154, "category_id": 1, "iscrowd": 0, "bbox": [221, 290, 46, 117], "area": 2824}, {"id": 6776153, "category_id": 1, "iscrowd": 0, "bbox": [55, 224, 9, 9], "area": 51}, {"id": 3156764, "category_id": 1, "iscrowd": 0, "bbox": [124, 222, 2, 5], "area": 7}, {"id": 4670020, "category_id": 1, "iscrowd": 0, "bbox": [555, 185, 51, 136], "area": 3778}, {"id": 2964307, "category_id": 1, "iscrowd": 0, "bbox": [109, 278, 45, 109], "area": 1908}, {"id": 2763814, "category_id": 1, "iscrowd": 0, "bbox": [606, 187, 34, 144], "area": 3699}, {"id": 6510429, "category_id": 1, "iscrowd": 0, "bbox": [72, 221, 5, 11], "area": 26}, {"id": 2436186, "category_id": 1, "iscrowd": 0, "bbox": [600, 207, 12, 27], "area": 185}, {"id": 8288062, "category_id": 38, "iscrowd": 0, "bbox": [117, 20, 257, 147], "area": 5869}, {"id": 7429253, "category_id": 92, "iscrowd": 0, "bbox": [236, 144, 342, 124], "area": 6414}, {"id": 7295814, "category_id": 95, "iscrowd": 0, "bbox": [13, 168, 605, 102], "area": 13440}, {"id": 6717322, "category_id": 154, "iscrowd": 0, "bbox": [0, 207, 615, 220], "area": 89508}, {"id": 8811092, "category_id": 155, "iscrowd": 0, "bbox": [0, 199, 155, 44], "area": 2814}, {"id": 14006155, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 207], "area": 113946}, {"id": 5921099, "category_id": 190, "iscrowd": 0, "bbox": [338, 293, 302, 134], "area": 24692}, {"id": 7234640, "category_id": 197, "iscrowd": 0, "bbox": [458, 185, 162, 29], "area": 1989}, {"id": 9605245, "category_id": 198, "iscrowd": 0, "bbox": [424, 341, 32, 86], "area": 1589}], "file_name": "000000294695.png", "image_id": 294695}, {"segments_info": [{"id": 4863540, "category_id": 27, "iscrowd": 0, "bbox": [302, 264, 25, 30], "area": 620}, {"id": 4210270, "category_id": 33, "iscrowd": 0, "bbox": [332, 264, 37, 31], "area": 813}, {"id": 530976, "category_id": 63, "iscrowd": 0, "bbox": [321, 227, 57, 34], "area": 1511}, {"id": 13218731, "category_id": 65, "iscrowd": 0, "bbox": [22, 293, 280, 129], "area": 16503}, {"id": 12043979, "category_id": 84, "iscrowd": 0, "bbox": [560, 254, 5, 18], "area": 66}, {"id": 12430766, "category_id": 84, "iscrowd": 0, "bbox": [595, 291, 10, 19], "area": 79}, {"id": 10331575, "category_id": 84, "iscrowd": 0, "bbox": [526, 247, 27, 24], "area": 480}, {"id": 8291692, "category_id": 84, "iscrowd": 0, "bbox": [550, 218, 13, 24], "area": 95}, {"id": 12034992, "category_id": 84, "iscrowd": 0, "bbox": [598, 253, 12, 22], "area": 65}, {"id": 13356241, "category_id": 84, "iscrowd": 0, "bbox": [546, 280, 9, 24], "area": 120}, {"id": 9018023, "category_id": 84, "iscrowd": 0, "bbox": [522, 246, 5, 22], "area": 90}, {"id": 8422764, "category_id": 84, "iscrowd": 0, "bbox": [523, 218, 5, 21], "area": 105}, {"id": 9797481, "category_id": 84, "iscrowd": 0, "bbox": [571, 290, 8, 18], "area": 97}, {"id": 14406354, "category_id": 84, "iscrowd": 0, "bbox": [552, 253, 6, 18], "area": 74}, {"id": 12889250, "category_id": 84, "iscrowd": 0, "bbox": [622, 221, 17, 23], "area": 360}, {"id": 14669783, "category_id": 84, "iscrowd": 0, "bbox": [615, 291, 11, 23], "area": 105}, {"id": 9353419, "category_id": 84, "iscrowd": 0, "bbox": [539, 219, 8, 22], "area": 89}, {"id": 7819129, "category_id": 84, "iscrowd": 0, "bbox": [579, 291, 5, 16], "area": 28}, {"id": 10465476, "category_id": 84, "iscrowd": 0, "bbox": [586, 252, 11, 23], "area": 168}, {"id": 6517377, "category_id": 84, "iscrowd": 1, "bbox": [389, 177, 251, 141], "area": 7145}, {"id": 13550015, "category_id": 85, "iscrowd": 0, "bbox": [578, 218, 32, 21], "area": 609}, {"id": 13020855, "category_id": 93, "iscrowd": 0, "bbox": [85, 421, 33, 7], "area": 213}, {"id": 3432573, "category_id": 112, "iscrowd": 0, "bbox": [220, 168, 228, 140], "area": 7819}, {"id": 3751506, "category_id": 118, "iscrowd": 0, "bbox": [0, 253, 640, 175], "area": 62856}, {"id": 756430, "category_id": 130, "iscrowd": 0, "bbox": [184, 87, 211, 77], "area": 1026}, {"id": 2571600, "category_id": 156, "iscrowd": 0, "bbox": [507, 144, 133, 212], "area": 16042}, {"id": 13023425, "category_id": 168, "iscrowd": 0, "bbox": [99, 223, 21, 74], "area": 972}, {"id": 1590369, "category_id": 177, "iscrowd": 0, "bbox": [0, 65, 640, 259], "area": 73880}, {"id": 14542825, "category_id": 181, "iscrowd": 0, "bbox": [0, 143, 85, 114], "area": 8010}, {"id": 1124668, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 156], "area": 65655}], "file_name": "000000294783.png", "image_id": 294783}, {"segments_info": [{"id": 4019058, "category_id": 1, "iscrowd": 0, "bbox": [515, 153, 125, 202], "area": 18089}, {"id": 2712925, "category_id": 47, "iscrowd": 0, "bbox": [612, 4, 28, 49], "area": 1205}, {"id": 3957365, "category_id": 59, "iscrowd": 0, "bbox": [172, 113, 351, 198], "area": 48064}, {"id": 7378853, "category_id": 67, "iscrowd": 0, "bbox": [300, 22, 340, 81], "area": 7983}, {"id": 6256511, "category_id": 73, "iscrowd": 0, "bbox": [485, 10, 139, 114], "area": 9405}, {"id": 6450288, "category_id": 195, "iscrowd": 0, "bbox": [389, 56, 193, 305], "area": 8254}, {"id": 7374998, "category_id": 200, "iscrowd": 0, "bbox": [0, 0, 640, 361], "area": 66597}], "file_name": "000000294831.png", "image_id": 294831}, {"segments_info": [{"id": 2893866, "category_id": 33, "iscrowd": 0, "bbox": [2, 1, 263, 169], "area": 36614}, {"id": 6452620, "category_id": 44, "iscrowd": 0, "bbox": [278, 153, 27, 46], "area": 662}, {"id": 263699, "category_id": 188, "iscrowd": 0, "bbox": [199, 0, 301, 113], "area": 25342}, {"id": 13487827, "category_id": 195, "iscrowd": 0, "bbox": [250, 181, 142, 86], "area": 5936}, {"id": 7637924, "category_id": 200, "iscrowd": 0, "bbox": [0, 96, 500, 279], "area": 90289}], "file_name": "000000294855.png", "image_id": 294855}, {"segments_info": [{"id": 8158332, "category_id": 1, "iscrowd": 0, "bbox": [162, 0, 224, 342], "area": 29695}, {"id": 2302755, "category_id": 15, "iscrowd": 0, "bbox": [187, 250, 92, 72], "area": 1412}, {"id": 4079166, "category_id": 41, "iscrowd": 0, "bbox": [155, 263, 21, 55], "area": 735}, {"id": 11119017, "category_id": 41, "iscrowd": 0, "bbox": [169, 329, 220, 43], "area": 3209}, {"id": 1052688, "category_id": 112, "iscrowd": 0, "bbox": [60, 160, 67, 100], "area": 5240}, {"id": 1776411, "category_id": 151, "iscrowd": 0, "bbox": [0, 33, 119, 67], "area": 3682}, {"id": 2697513, "category_id": 181, "iscrowd": 0, "bbox": [445, 1, 21, 194], "area": 1652}, {"id": 921102, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 273], "area": 27943}, {"id": 15461355, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 84, 55], "area": 2804}, {"id": 1118481, "category_id": 189, "iscrowd": 0, "bbox": [144, 224, 19, 19], "area": 299}, {"id": 7105644, "category_id": 191, "iscrowd": 0, "bbox": [0, 205, 640, 218], "area": 93847}, {"id": 9539985, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 510, 321], "area": 30997}], "file_name": "000000295138.png", "image_id": 295138}, {"segments_info": [{"id": 9342606, "category_id": 20, "iscrowd": 0, "bbox": [0, 165, 279, 383], "area": 16637}, {"id": 9737364, "category_id": 20, "iscrowd": 0, "bbox": [0, 83, 187, 160], "area": 21312}, {"id": 3618615, "category_id": 20, "iscrowd": 0, "bbox": [311, 161, 148, 160], "area": 11404}, {"id": 7105644, "category_id": 20, "iscrowd": 0, "bbox": [157, 107, 193, 126], "area": 12389}, {"id": 5987163, "category_id": 20, "iscrowd": 0, "bbox": [344, 66, 136, 145], "area": 11984}, {"id": 12763842, "category_id": 20, "iscrowd": 0, "bbox": [2, 12, 390, 111], "area": 24247}, {"id": 8618883, "category_id": 20, "iscrowd": 0, "bbox": [1, 216, 369, 402], "area": 81047}], "file_name": "000000295231.png", "image_id": 295231}, {"segments_info": [{"id": 7890774, "category_id": 1, "iscrowd": 0, "bbox": [94, 201, 38, 32], "area": 460}, {"id": 5653571, "category_id": 1, "iscrowd": 0, "bbox": [351, 173, 31, 45], "area": 824}, {"id": 2431788, "category_id": 1, "iscrowd": 0, "bbox": [362, 245, 72, 27], "area": 620}, {"id": 7952711, "category_id": 1, "iscrowd": 0, "bbox": [184, 174, 45, 55], "area": 1044}, {"id": 6719102, "category_id": 42, "iscrowd": 0, "bbox": [113, 204, 18, 20], "area": 85}, {"id": 4143145, "category_id": 42, "iscrowd": 0, "bbox": [378, 259, 35, 12], "area": 139}, {"id": 9411441, "category_id": 42, "iscrowd": 0, "bbox": [310, 216, 66, 8], "area": 269}, {"id": 11846333, "category_id": 42, "iscrowd": 0, "bbox": [171, 222, 40, 11], "area": 257}, {"id": 4336151, "category_id": 128, "iscrowd": 0, "bbox": [72, 178, 44, 25], "area": 759}, {"id": 7169843, "category_id": 155, "iscrowd": 0, "bbox": [0, 173, 640, 307], "area": 178355}, {"id": 4008985, "category_id": 184, "iscrowd": 0, "bbox": [0, 171, 189, 37], "area": 3019}, {"id": 14975795, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 381], "area": 121139}], "file_name": "000000295316.png", "image_id": 295316}, {"segments_info": [{"id": 2301465, "category_id": 1, "iscrowd": 0, "bbox": [470, 287, 27, 64], "area": 983}, {"id": 4273711, "category_id": 3, "iscrowd": 0, "bbox": [59, 290, 33, 29], "area": 757}, {"id": 6185324, "category_id": 3, "iscrowd": 0, "bbox": [57, 272, 11, 11], "area": 97}, {"id": 5718318, "category_id": 8, "iscrowd": 0, "bbox": [160, 168, 278, 216], "area": 46492}, {"id": 3944486, "category_id": 8, "iscrowd": 0, "bbox": [99, 283, 47, 42], "area": 1532}, {"id": 2962499, "category_id": 128, "iscrowd": 0, "bbox": [103, 140, 537, 186], "area": 19491}, {"id": 2169620, "category_id": 149, "iscrowd": 0, "bbox": [0, 266, 640, 214], "area": 56945}, {"id": 3092534, "category_id": 151, "iscrowd": 0, "bbox": [376, 115, 264, 105], "area": 12241}, {"id": 724237, "category_id": 171, "iscrowd": 0, "bbox": [434, 283, 206, 83], "area": 5415}, {"id": 8223608, "category_id": 184, "iscrowd": 0, "bbox": [0, 35, 640, 303], "area": 37554}, {"id": 1381136, "category_id": 185, "iscrowd": 0, "bbox": [446, 300, 21, 22], "area": 345}, {"id": 16510935, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 221], "area": 93641}, {"id": 2894116, "category_id": 191, "iscrowd": 0, "bbox": [0, 324, 631, 141], "area": 16687}, {"id": 990225, "category_id": 193, "iscrowd": 0, "bbox": [0, 316, 640, 164], "area": 11471}], "file_name": "000000295420.png", "image_id": 295420}, {"segments_info": [{"id": 4213870, "category_id": 1, "iscrowd": 0, "bbox": [152, 36, 196, 579], "area": 49532}, {"id": 11713247, "category_id": 18, "iscrowd": 0, "bbox": [49, 493, 91, 83], "area": 4145}, {"id": 5737653, "category_id": 31, "iscrowd": 0, "bbox": [199, 227, 134, 135], "area": 6644}, {"id": 792631, "category_id": 112, "iscrowd": 0, "bbox": [121, 15, 135, 285], "area": 16831}, {"id": 1519719, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 512, 399], "area": 120253}, {"id": 3695236, "category_id": 199, "iscrowd": 0, "bbox": [0, 294, 512, 197], "area": 45163}], "file_name": "000000295478.png", "image_id": 295478}, {"segments_info": [{"id": 8682629, "category_id": 1, "iscrowd": 0, "bbox": [528, 46, 28, 25], "area": 350}, {"id": 6381686, "category_id": 1, "iscrowd": 0, "bbox": [189, 1, 33, 54], "area": 704}, {"id": 3946814, "category_id": 1, "iscrowd": 0, "bbox": [414, 101, 127, 269], "area": 16540}, {"id": 6579569, "category_id": 1, "iscrowd": 0, "bbox": [601, 0, 28, 49], "area": 633}, {"id": 7103881, "category_id": 1, "iscrowd": 0, "bbox": [548, 12, 62, 58], "area": 1740}, {"id": 5784901, "category_id": 1, "iscrowd": 0, "bbox": [542, 1, 49, 59], "area": 1486}, {"id": 7108211, "category_id": 1, "iscrowd": 0, "bbox": [590, 0, 9, 15], "area": 87}, {"id": 3750207, "category_id": 15, "iscrowd": 0, "bbox": [50, 232, 199, 125], "area": 7521}, {"id": 3947327, "category_id": 15, "iscrowd": 0, "bbox": [356, 252, 279, 116], "area": 22841}, {"id": 3751234, "category_id": 15, "iscrowd": 0, "bbox": [259, 158, 330, 128], "area": 21675}, {"id": 1645603, "category_id": 31, "iscrowd": 0, "bbox": [377, 188, 76, 72], "area": 4147}, {"id": 2171438, "category_id": 77, "iscrowd": 0, "bbox": [452, 161, 19, 15], "area": 143}, {"id": 6977148, "category_id": 161, "iscrowd": 0, "bbox": [428, 15, 212, 31], "area": 1221}, {"id": 9607320, "category_id": 178, "iscrowd": 0, "bbox": [171, 29, 382, 71], "area": 14115}, {"id": 4347998, "category_id": 184, "iscrowd": 0, "bbox": [16, 0, 624, 273], "area": 14567}, {"id": 11975619, "category_id": 191, "iscrowd": 0, "bbox": [0, 4, 640, 423], "area": 96480}, {"id": 3756117, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 339], "area": 20359}, {"id": 7371131, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 185], "area": 25810}], "file_name": "000000295713.png", "image_id": 295713}, {"segments_info": [{"id": 5271420, "category_id": 85, "iscrowd": 0, "bbox": [95, 394, 120, 148], "area": 13668}, {"id": 1846061, "category_id": 85, "iscrowd": 0, "bbox": [260, 406, 101, 148], "area": 10779}, {"id": 7233601, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 148035}, {"id": 4808294, "category_id": 197, "iscrowd": 0, "bbox": [0, 98, 389, 542], "area": 100634}], "file_name": "000000295797.png", "image_id": 295797}, {"segments_info": [{"id": 3551537, "category_id": 1, "iscrowd": 0, "bbox": [292, 117, 6, 17], "area": 56}, {"id": 8345685, "category_id": 1, "iscrowd": 0, "bbox": [249, 112, 7, 27], "area": 129}, {"id": 10001822, "category_id": 2, "iscrowd": 0, "bbox": [126, 291, 339, 203], "area": 36115}, {"id": 6907750, "category_id": 3, "iscrowd": 0, "bbox": [296, 120, 22, 18], "area": 281}, {"id": 4815284, "category_id": 3, "iscrowd": 0, "bbox": [355, 125, 8, 8], "area": 46}, {"id": 8814460, "category_id": 3, "iscrowd": 0, "bbox": [322, 120, 12, 13], "area": 106}, {"id": 8557729, "category_id": 3, "iscrowd": 0, "bbox": [534, 108, 106, 32], "area": 1780}, {"id": 6448228, "category_id": 3, "iscrowd": 0, "bbox": [51, 103, 100, 38], "area": 2499}, {"id": 6184028, "category_id": 3, "iscrowd": 0, "bbox": [305, 117, 18, 19], "area": 127}, {"id": 4215882, "category_id": 10, "iscrowd": 0, "bbox": [521, 62, 7, 20], "area": 128}, {"id": 5136238, "category_id": 10, "iscrowd": 0, "bbox": [404, 99, 3, 11], "area": 33}, {"id": 6847094, "category_id": 10, "iscrowd": 0, "bbox": [85, 66, 10, 16], "area": 132}, {"id": 4808537, "category_id": 10, "iscrowd": 0, "bbox": [72, 68, 5, 14], "area": 68}, {"id": 2828842, "category_id": 10, "iscrowd": 0, "bbox": [505, 61, 10, 19], "area": 143}, {"id": 6120804, "category_id": 10, "iscrowd": 0, "bbox": [72, 39, 10, 25], "area": 236}, {"id": 5331041, "category_id": 10, "iscrowd": 0, "bbox": [233, 68, 9, 21], "area": 137}, {"id": 7566425, "category_id": 10, "iscrowd": 0, "bbox": [379, 22, 7, 22], "area": 135}, {"id": 1973533, "category_id": 10, "iscrowd": 0, "bbox": [608, 15, 8, 34], "area": 167}, {"id": 5727337, "category_id": 10, "iscrowd": 0, "bbox": [83, 35, 11, 30], "area": 270}, {"id": 5071574, "category_id": 11, "iscrowd": 0, "bbox": [433, 131, 4, 6], "area": 18}, {"id": 12172473, "category_id": 112, "iscrowd": 0, "bbox": [523, 73, 19, 46], "area": 569}, {"id": 7041651, "category_id": 128, "iscrowd": 0, "bbox": [504, 68, 23, 22], "area": 250}, {"id": 5855836, "category_id": 149, "iscrowd": 0, "bbox": [0, 122, 640, 390], "area": 198837}, {"id": 8288625, "category_id": 181, "iscrowd": 0, "bbox": [18, 0, 595, 114], "area": 6513}, {"id": 4608606, "category_id": 184, "iscrowd": 0, "bbox": [364, 0, 276, 132], "area": 4780}, {"id": 16514300, "category_id": 187, "iscrowd": 0, "bbox": [302, 0, 155, 117], "area": 8562}, {"id": 6124676, "category_id": 191, "iscrowd": 0, "bbox": [0, 126, 640, 73], "area": 4477}, {"id": 5629679, "category_id": 193, "iscrowd": 0, "bbox": [0, 130, 66, 22], "area": 896}, {"id": 8360866, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 140], "area": 59169}], "file_name": "000000295809.png", "image_id": 295809}, {"segments_info": [{"id": 3355201, "category_id": 1, "iscrowd": 0, "bbox": [129, 39, 394, 436], "area": 84903}, {"id": 1511700, "category_id": 31, "iscrowd": 0, "bbox": [278, 333, 115, 95], "area": 7627}, {"id": 14577994, "category_id": 47, "iscrowd": 0, "bbox": [456, 163, 48, 68], "area": 2539}, {"id": 9219783, "category_id": 48, "iscrowd": 0, "bbox": [313, 446, 49, 14], "area": 274}, {"id": 5343935, "category_id": 59, "iscrowd": 0, "bbox": [359, 423, 61, 36], "area": 1477}, {"id": 6777721, "category_id": 62, "iscrowd": 0, "bbox": [30, 294, 88, 180], "area": 11005}, {"id": 5663349, "category_id": 62, "iscrowd": 0, "bbox": [539, 380, 101, 94], "area": 2377}, {"id": 1979481, "category_id": 62, "iscrowd": 0, "bbox": [1, 296, 34, 179], "area": 5304}, {"id": 10264002, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 126, 212], "area": 24258}, {"id": 2394505, "category_id": 122, "iscrowd": 0, "bbox": [617, 461, 23, 19], "area": 354}, {"id": 10863318, "category_id": 199, "iscrowd": 0, "bbox": [108, 0, 532, 225], "area": 86778}], "file_name": "000000296222.png", "image_id": 296222}, {"segments_info": [{"id": 5526838, "category_id": 1, "iscrowd": 0, "bbox": [333, 197, 79, 57], "area": 2756}, {"id": 4735571, "category_id": 3, "iscrowd": 0, "bbox": [0, 186, 57, 38], "area": 1579}, {"id": 5261896, "category_id": 3, "iscrowd": 0, "bbox": [82, 194, 35, 44], "area": 1079}, {"id": 6643791, "category_id": 3, "iscrowd": 0, "bbox": [0, 173, 21, 16], "area": 215}, {"id": 6644316, "category_id": 6, "iscrowd": 0, "bbox": [54, 32, 529, 439], "area": 163374}, {"id": 3224632, "category_id": 149, "iscrowd": 0, "bbox": [0, 360, 640, 120], "area": 41636}, {"id": 7761004, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 366], "area": 39477}, {"id": 5722958, "category_id": 185, "iscrowd": 0, "bbox": [0, 124, 119, 134], "area": 7152}, {"id": 15654867, "category_id": 187, "iscrowd": 0, "bbox": [394, 0, 246, 253], "area": 33417}, {"id": 2634551, "category_id": 191, "iscrowd": 0, "bbox": [0, 316, 165, 96], "area": 8991}, {"id": 2112561, "category_id": 193, "iscrowd": 0, "bbox": [0, 192, 95, 131], "area": 7084}], "file_name": "000000296224.png", "image_id": 296224}, {"segments_info": [{"id": 11188691, "category_id": 1, "iscrowd": 0, "bbox": [18, 32, 16, 48], "area": 417}, {"id": 8158071, "category_id": 1, "iscrowd": 0, "bbox": [31, 105, 39, 66], "area": 2035}, {"id": 6714495, "category_id": 1, "iscrowd": 0, "bbox": [43, 207, 37, 51], "area": 599}, {"id": 2303529, "category_id": 62, "iscrowd": 0, "bbox": [572, 303, 68, 177], "area": 8067}, {"id": 9739687, "category_id": 64, "iscrowd": 0, "bbox": [390, 67, 63, 73], "area": 1043}, {"id": 3486769, "category_id": 64, "iscrowd": 0, "bbox": [568, 145, 72, 95], "area": 3541}, {"id": 9801608, "category_id": 72, "iscrowd": 0, "bbox": [159, 231, 188, 233], "area": 28175}, {"id": 2368042, "category_id": 84, "iscrowd": 0, "bbox": [533, 369, 16, 53], "area": 698}, {"id": 3159115, "category_id": 84, "iscrowd": 0, "bbox": [510, 367, 16, 48], "area": 527}, {"id": 8421249, "category_id": 84, "iscrowd": 0, "bbox": [527, 366, 6, 52], "area": 286}, {"id": 2895671, "category_id": 84, "iscrowd": 0, "bbox": [464, 343, 28, 60], "area": 785}, {"id": 5331298, "category_id": 84, "iscrowd": 0, "bbox": [475, 355, 25, 52], "area": 618}, {"id": 3751232, "category_id": 84, "iscrowd": 0, "bbox": [485, 356, 26, 51], "area": 471}, {"id": 3617070, "category_id": 84, "iscrowd": 0, "bbox": [569, 364, 23, 64], "area": 736}, {"id": 4410193, "category_id": 84, "iscrowd": 0, "bbox": [437, 339, 26, 57], "area": 748}, {"id": 8687254, "category_id": 84, "iscrowd": 0, "bbox": [455, 343, 20, 57], "area": 444}, {"id": 4279385, "category_id": 84, "iscrowd": 0, "bbox": [497, 369, 10, 41], "area": 315}, {"id": 8686995, "category_id": 85, "iscrowd": 0, "bbox": [505, 200, 22, 25], "area": 436}, {"id": 12308188, "category_id": 85, "iscrowd": 0, "bbox": [267, 249, 18, 26], "area": 385}, {"id": 6647154, "category_id": 86, "iscrowd": 0, "bbox": [438, 197, 25, 26], "area": 487}, {"id": 4737356, "category_id": 86, "iscrowd": 0, "bbox": [495, 290, 16, 38], "area": 511}, {"id": 4670525, "category_id": 109, "iscrowd": 0, "bbox": [450, 0, 190, 234], "area": 34710}, {"id": 4606027, "category_id": 156, "iscrowd": 0, "bbox": [172, 0, 468, 480], "area": 80869}, {"id": 14148581, "category_id": 180, "iscrowd": 0, "bbox": [0, 211, 38, 269], "area": 5847}, {"id": 13949661, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 456, 480], "area": 93371}, {"id": 4409158, "category_id": 200, "iscrowd": 0, "bbox": [339, 378, 270, 102], "area": 16658}], "file_name": "000000296231.png", "image_id": 296231}, {"segments_info": [{"id": 2970754, "category_id": 60, "iscrowd": 0, "bbox": [100, 79, 33, 35], "area": 725}, {"id": 2774151, "category_id": 60, "iscrowd": 0, "bbox": [147, 77, 36, 37], "area": 948}, {"id": 2315144, "category_id": 60, "iscrowd": 0, "bbox": [126, 81, 32, 34], "area": 724}, {"id": 2118020, "category_id": 60, "iscrowd": 0, "bbox": [100, 210, 36, 45], "area": 1135}, {"id": 2642307, "category_id": 60, "iscrowd": 0, "bbox": [75, 84, 31, 32], "area": 660}, {"id": 2641532, "category_id": 60, "iscrowd": 0, "bbox": [15, 219, 45, 37], "area": 1331}, {"id": 2901607, "category_id": 60, "iscrowd": 0, "bbox": [0, 219, 26, 41], "area": 676}, {"id": 2377846, "category_id": 60, "iscrowd": 0, "bbox": [9, 79, 44, 39], "area": 1226}, {"id": 2447498, "category_id": 60, "iscrowd": 0, "bbox": [129, 211, 43, 43], "area": 1477}, {"id": 2380418, "category_id": 60, "iscrowd": 0, "bbox": [77, 211, 38, 44], "area": 1028}, {"id": 5265507, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 270, 360], "area": 53805}, {"id": 4874628, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 219, 360], "area": 31203}, {"id": 3563401, "category_id": 196, "iscrowd": 0, "bbox": [180, 344, 30, 16], "area": 327}], "file_name": "000000296284.png", "image_id": 296284}, {"segments_info": [{"id": 4737358, "category_id": 25, "iscrowd": 0, "bbox": [312, 316, 49, 81], "area": 1203}, {"id": 3619124, "category_id": 25, "iscrowd": 0, "bbox": [276, 334, 38, 66], "area": 841}, {"id": 5592147, "category_id": 25, "iscrowd": 0, "bbox": [278, 284, 33, 30], "area": 477}, {"id": 4801848, "category_id": 184, "iscrowd": 0, "bbox": [173, 134, 334, 50], "area": 5796}, {"id": 12746053, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 97], "area": 53848}, {"id": 6378061, "category_id": 192, "iscrowd": 0, "bbox": [0, 64, 640, 115], "area": 39561}, {"id": 5134660, "category_id": 193, "iscrowd": 0, "bbox": [0, 138, 640, 312], "area": 112399}, {"id": 7959925, "category_id": 194, "iscrowd": 0, "bbox": [0, 139, 640, 341], "area": 89613}, {"id": 6377795, "category_id": 197, "iscrowd": 0, "bbox": [503, 137, 59, 25], "area": 1179}, {"id": 6773331, "category_id": 198, "iscrowd": 0, "bbox": [520, 282, 94, 51], "area": 2124}], "file_name": "000000296317.png", "image_id": 296317}, {"segments_info": [{"id": 8488845, "category_id": 51, "iscrowd": 0, "bbox": [234, 41, 374, 378], "area": 132816}, {"id": 5662337, "category_id": 51, "iscrowd": 0, "bbox": [41, 225, 185, 181], "area": 29849}, {"id": 9604745, "category_id": 51, "iscrowd": 0, "bbox": [45, 41, 179, 177], "area": 6823}, {"id": 2374468, "category_id": 56, "iscrowd": 0, "bbox": [54, 45, 162, 166], "area": 24313}, {"id": 1523593, "category_id": 57, "iscrowd": 0, "bbox": [176, 248, 47, 10], "area": 200}, {"id": 1590156, "category_id": 57, "iscrowd": 0, "bbox": [183, 378, 36, 8], "area": 151}, {"id": 1323382, "category_id": 57, "iscrowd": 0, "bbox": [65, 322, 13, 32], "area": 216}, {"id": 3097482, "category_id": 57, "iscrowd": 0, "bbox": [50, 257, 13, 39], "area": 260}, {"id": 1394330, "category_id": 57, "iscrowd": 0, "bbox": [94, 359, 49, 8], "area": 218}, {"id": 1393561, "category_id": 57, "iscrowd": 0, "bbox": [115, 235, 67, 33], "area": 548}, {"id": 1328282, "category_id": 57, "iscrowd": 0, "bbox": [152, 361, 61, 5], "area": 234}, {"id": 1194119, "category_id": 57, "iscrowd": 0, "bbox": [58, 306, 44, 42], "area": 391}], "file_name": "000000296634.png", "image_id": 296634}, {"segments_info": [{"id": 5064261, "category_id": 1, "iscrowd": 0, "bbox": [2, 267, 114, 155], "area": 7853}, {"id": 2761761, "category_id": 1, "iscrowd": 0, "bbox": [121, 271, 16, 25], "area": 296}, {"id": 2500373, "category_id": 1, "iscrowd": 0, "bbox": [257, 281, 13, 42], "area": 239}, {"id": 3616556, "category_id": 1, "iscrowd": 0, "bbox": [259, 281, 26, 35], "area": 474}, {"id": 4868445, "category_id": 1, "iscrowd": 0, "bbox": [269, 274, 9, 18], "area": 77}, {"id": 4406847, "category_id": 1, "iscrowd": 0, "bbox": [274, 292, 51, 130], "area": 3076}, {"id": 4604482, "category_id": 1, "iscrowd": 0, "bbox": [281, 276, 15, 41], "area": 312}, {"id": 527115, "category_id": 1, "iscrowd": 0, "bbox": [557, 310, 31, 45], "area": 675}, {"id": 4340799, "category_id": 1, "iscrowd": 0, "bbox": [323, 291, 65, 127], "area": 3677}, {"id": 1906969, "category_id": 1, "iscrowd": 0, "bbox": [105, 268, 17, 29], "area": 332}, {"id": 1907488, "category_id": 1, "iscrowd": 0, "bbox": [424, 271, 104, 129], "area": 7661}, {"id": 3617585, "category_id": 1, "iscrowd": 0, "bbox": [495, 277, 91, 125], "area": 4867}, {"id": 3158840, "category_id": 1, "iscrowd": 1, "bbox": [300, 280, 26, 55], "area": 1001}, {"id": 5462107, "category_id": 2, "iscrowd": 0, "bbox": [257, 313, 25, 66], "area": 807}, {"id": 8223859, "category_id": 3, "iscrowd": 0, "bbox": [429, 329, 211, 94], "area": 8957}, {"id": 4208434, "category_id": 3, "iscrowd": 0, "bbox": [229, 282, 34, 33], "area": 875}, {"id": 5259834, "category_id": 3, "iscrowd": 0, "bbox": [231, 271, 32, 16], "area": 342}, {"id": 4735818, "category_id": 3, "iscrowd": 0, "bbox": [349, 288, 19, 25], "area": 261}, {"id": 3157034, "category_id": 4, "iscrowd": 0, "bbox": [0, 325, 175, 102], "area": 8060}, {"id": 4012346, "category_id": 4, "iscrowd": 0, "bbox": [421, 360, 152, 46], "area": 533}, {"id": 4014406, "category_id": 4, "iscrowd": 0, "bbox": [259, 329, 174, 98], "area": 6347}, {"id": 4408382, "category_id": 16, "iscrowd": 0, "bbox": [563, 44, 5, 3], "area": 10}, {"id": 3092780, "category_id": 16, "iscrowd": 0, "bbox": [554, 106, 3, 4], "area": 7}, {"id": 5987158, "category_id": 16, "iscrowd": 0, "bbox": [449, 35, 4, 4], "area": 10}, {"id": 2235420, "category_id": 16, "iscrowd": 0, "bbox": [457, 126, 4, 2], "area": 5}, {"id": 6051161, "category_id": 92, "iscrowd": 0, "bbox": [223, 197, 168, 26], "area": 2782}, {"id": 6186608, "category_id": 149, "iscrowd": 0, "bbox": [347, 339, 58, 31], "area": 164}, {"id": 5005148, "category_id": 184, "iscrowd": 0, "bbox": [254, 269, 20, 33], "area": 164}, {"id": 15920872, "category_id": 187, "iscrowd": 0, "bbox": [200, 0, 440, 270], "area": 30431}, {"id": 7569803, "category_id": 191, "iscrowd": 0, "bbox": [120, 289, 334, 138], "area": 15710}, {"id": 5855836, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 357], "area": 159792}], "file_name": "000000296649.png", "image_id": 296649}, {"segments_info": [{"id": 6380644, "category_id": 1, "iscrowd": 0, "bbox": [55, 138, 140, 125], "area": 6778}, {"id": 10986918, "category_id": 1, "iscrowd": 0, "bbox": [285, 156, 53, 162], "area": 2873}, {"id": 7958898, "category_id": 1, "iscrowd": 0, "bbox": [151, 138, 96, 126], "area": 4776}, {"id": 8025204, "category_id": 1, "iscrowd": 0, "bbox": [344, 126, 84, 202], "area": 7320}, {"id": 7366507, "category_id": 1, "iscrowd": 0, "bbox": [154, 85, 190, 253], "area": 11244}, {"id": 7823968, "category_id": 1, "iscrowd": 0, "bbox": [435, 99, 163, 229], "area": 11230}, {"id": 7380406, "category_id": 11, "iscrowd": 0, "bbox": [197, 273, 5, 17], "area": 65}, {"id": 15722447, "category_id": 32, "iscrowd": 0, "bbox": [375, 156, 31, 32], "area": 343}, {"id": 9474694, "category_id": 32, "iscrowd": 0, "bbox": [195, 175, 20, 28], "area": 223}, {"id": 13221026, "category_id": 32, "iscrowd": 0, "bbox": [498, 138, 28, 44], "area": 527}, {"id": 8881013, "category_id": 32, "iscrowd": 0, "bbox": [121, 180, 18, 20], "area": 127}, {"id": 16179394, "category_id": 32, "iscrowd": 0, "bbox": [277, 121, 23, 62], "area": 609}, {"id": 11250588, "category_id": 32, "iscrowd": 0, "bbox": [299, 197, 10, 17], "area": 67}, {"id": 8816052, "category_id": 77, "iscrowd": 0, "bbox": [564, 103, 8, 4], "area": 24}, {"id": 7831939, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 314], "area": 137212}, {"id": 16382456, "category_id": 187, "iscrowd": 0, "bbox": [606, 136, 34, 53], "area": 1515}, {"id": 10726071, "category_id": 191, "iscrowd": 0, "bbox": [12, 252, 450, 60], "area": 3201}, {"id": 4490089, "category_id": 193, "iscrowd": 0, "bbox": [0, 268, 640, 159], "area": 81025}, {"id": 6847868, "category_id": 194, "iscrowd": 0, "bbox": [270, 289, 292, 22], "area": 630}, {"id": 13028301, "category_id": 197, "iscrowd": 0, "bbox": [509, 199, 131, 74], "area": 2536}], "file_name": "000000296657.png", "image_id": 296657}, {"segments_info": [{"id": 8030610, "category_id": 25, "iscrowd": 0, "bbox": [618, 203, 22, 110], "area": 1218}, {"id": 9149616, "category_id": 25, "iscrowd": 0, "bbox": [130, 30, 193, 293], "area": 19877}, {"id": 11318724, "category_id": 25, "iscrowd": 0, "bbox": [611, 59, 29, 72], "area": 822}, {"id": 6388891, "category_id": 25, "iscrowd": 0, "bbox": [318, 209, 117, 108], "area": 5173}, {"id": 8162724, "category_id": 25, "iscrowd": 0, "bbox": [364, 70, 255, 249], "area": 11196}, {"id": 7966120, "category_id": 25, "iscrowd": 0, "bbox": [424, 74, 129, 245], "area": 12394}, {"id": 6057610, "category_id": 25, "iscrowd": 0, "bbox": [59, 296, 114, 29], "area": 1877}, {"id": 3886656, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 361], "area": 136469}, {"id": 6534570, "category_id": 193, "iscrowd": 0, "bbox": [16, 307, 624, 97], "area": 4643}, {"id": 10202039, "category_id": 194, "iscrowd": 0, "bbox": [0, 295, 640, 132], "area": 40135}, {"id": 10533834, "category_id": 198, "iscrowd": 0, "bbox": [184, 340, 456, 87], "area": 25161}], "file_name": "000000296969.png", "image_id": 296969}, {"segments_info": [{"id": 4541513, "category_id": 1, "iscrowd": 0, "bbox": [192, 222, 53, 99], "area": 3290}, {"id": 4278598, "category_id": 1, "iscrowd": 0, "bbox": [125, 208, 65, 122], "area": 3799}, {"id": 4344391, "category_id": 1, "iscrowd": 0, "bbox": [260, 141, 56, 194], "area": 5450}, {"id": 4870992, "category_id": 8, "iscrowd": 0, "bbox": [82, 125, 500, 226], "area": 56213}, {"id": 5266010, "category_id": 184, "iscrowd": 0, "bbox": [0, 143, 640, 112], "area": 20629}, {"id": 16185852, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 171], "area": 93530}, {"id": 6845814, "category_id": 193, "iscrowd": 0, "bbox": [0, 215, 640, 289], "area": 137349}], "file_name": "000000297022.png", "image_id": 297022}, {"segments_info": [{"id": 10460843, "category_id": 1, "iscrowd": 0, "bbox": [146, 3, 392, 411], "area": 94984}, {"id": 5466241, "category_id": 44, "iscrowd": 0, "bbox": [222, 414, 65, 191], "area": 8137}, {"id": 6708104, "category_id": 44, "iscrowd": 0, "bbox": [324, 436, 59, 169], "area": 5845}, {"id": 6117223, "category_id": 46, "iscrowd": 0, "bbox": [169, 161, 21, 61], "area": 448}, {"id": 7499125, "category_id": 46, "iscrowd": 0, "bbox": [179, 162, 34, 52], "area": 1281}, {"id": 13683136, "category_id": 47, "iscrowd": 0, "bbox": [149, 381, 82, 154], "area": 8154}, {"id": 12695728, "category_id": 47, "iscrowd": 0, "bbox": [67, 501, 137, 111], "area": 8445}, {"id": 10913414, "category_id": 50, "iscrowd": 0, "bbox": [430, 525, 62, 87], "area": 887}, {"id": 6904705, "category_id": 51, "iscrowd": 0, "bbox": [270, 535, 54, 67], "area": 2582}, {"id": 12827056, "category_id": 51, "iscrowd": 0, "bbox": [77, 560, 125, 47], "area": 1574}, {"id": 11575967, "category_id": 51, "iscrowd": 0, "bbox": [390, 570, 121, 42], "area": 3902}, {"id": 4074568, "category_id": 62, "iscrowd": 0, "bbox": [33, 265, 113, 142], "area": 4867}, {"id": 9472918, "category_id": 67, "iscrowd": 0, "bbox": [4, 404, 600, 197], "area": 69695}, {"id": 4998751, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 612, 414], "area": 51581}, {"id": 8229264, "category_id": 181, "iscrowd": 0, "bbox": [113, 0, 420, 206], "area": 18530}, {"id": 3878217, "category_id": 189, "iscrowd": 0, "bbox": [0, 192, 322, 420], "area": 11013}, {"id": 4140621, "category_id": 190, "iscrowd": 0, "bbox": [18, 285, 134, 130], "area": 5045}, {"id": 6642027, "category_id": 195, "iscrowd": 0, "bbox": [85, 284, 71, 57], "area": 2419}, {"id": 7562871, "category_id": 196, "iscrowd": 0, "bbox": [184, 597, 208, 15], "area": 1565}, {"id": 6580086, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 514, 342], "area": 14747}], "file_name": "000000297084.png", "image_id": 297084}, {"segments_info": [{"id": 2434864, "category_id": 17, "iscrowd": 0, "bbox": [208, 89, 57, 120], "area": 3690}, {"id": 10065816, "category_id": 72, "iscrowd": 0, "bbox": [123, 11, 223, 153], "area": 27199}, {"id": 4609391, "category_id": 88, "iscrowd": 0, "bbox": [163, 116, 39, 53], "area": 1080}, {"id": 3556440, "category_id": 88, "iscrowd": 0, "bbox": [274, 135, 24, 32], "area": 553}, {"id": 3819873, "category_id": 88, "iscrowd": 0, "bbox": [299, 132, 24, 34], "area": 551}, {"id": 3624302, "category_id": 100, "iscrowd": 0, "bbox": [0, 145, 500, 230], "area": 9433}, {"id": 1515310, "category_id": 112, "iscrowd": 0, "bbox": [474, 0, 26, 153], "area": 3402}, {"id": 3623267, "category_id": 156, "iscrowd": 0, "bbox": [0, 111, 500, 229], "area": 17288}, {"id": 4813975, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 294, 188], "area": 18016}, {"id": 3556967, "category_id": 189, "iscrowd": 0, "bbox": [0, 180, 142, 173], "area": 6895}, {"id": 5070197, "category_id": 195, "iscrowd": 0, "bbox": [0, 207, 175, 150], "area": 11314}, {"id": 2040111, "category_id": 199, "iscrowd": 0, "bbox": [347, 0, 132, 197], "area": 16828}, {"id": 2501983, "category_id": 200, "iscrowd": 0, "bbox": [165, 265, 281, 110], "area": 24177}], "file_name": "000000297085.png", "image_id": 297085}, {"segments_info": [{"id": 5788282, "category_id": 1, "iscrowd": 0, "bbox": [62, 30, 11, 28], "area": 177}, {"id": 5328207, "category_id": 1, "iscrowd": 0, "bbox": [24, 36, 7, 10], "area": 30}, {"id": 5328201, "category_id": 4, "iscrowd": 0, "bbox": [14, 14, 602, 435], "area": 123659}, {"id": 5984076, "category_id": 4, "iscrowd": 0, "bbox": [24, 41, 7, 6], "area": 29}, {"id": 6776503, "category_id": 92, "iscrowd": 0, "bbox": [40, 0, 245, 88], "area": 3059}, {"id": 10795982, "category_id": 125, "iscrowd": 0, "bbox": [54, 0, 586, 361], "area": 35752}, {"id": 10858161, "category_id": 149, "iscrowd": 0, "bbox": [0, 31, 640, 449], "area": 91310}, {"id": 5197902, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 238, 57], "area": 5256}], "file_name": "000000297147.png", "image_id": 297147}, {"segments_info": [{"id": 2704299, "category_id": 13, "iscrowd": 0, "bbox": [59, 155, 190, 192], "area": 25612}, {"id": 5204862, "category_id": 181, "iscrowd": 0, "bbox": [219, 0, 111, 52], "area": 2865}, {"id": 197893, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 18, 34], "area": 595}, {"id": 528653, "category_id": 193, "iscrowd": 0, "bbox": [0, 34, 154, 398], "area": 29529}, {"id": 10992595, "category_id": 199, "iscrowd": 0, "bbox": [17, 0, 623, 432], "area": 217469}], "file_name": "000000297343.png", "image_id": 297343}, {"segments_info": [{"id": 3685960, "category_id": 1, "iscrowd": 0, "bbox": [176, 63, 297, 421], "area": 40044}, {"id": 990244, "category_id": 44, "iscrowd": 0, "bbox": [596, 387, 16, 48], "area": 611}, {"id": 920854, "category_id": 65, "iscrowd": 0, "bbox": [45, 368, 530, 216], "area": 56711}, {"id": 3495029, "category_id": 84, "iscrowd": 0, "bbox": [85, 424, 56, 19], "area": 852}, {"id": 3291211, "category_id": 141, "iscrowd": 0, "bbox": [410, 360, 94, 84], "area": 3524}, {"id": 396567, "category_id": 188, "iscrowd": 0, "bbox": [14, 397, 626, 125], "area": 15024}, {"id": 2706281, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 482], "area": 201416}], "file_name": "000000297353.png", "image_id": 297353}, {"segments_info": [{"id": 933450, "category_id": 49, "iscrowd": 0, "bbox": [115, 0, 83, 85], "area": 1692}, {"id": 3624811, "category_id": 61, "iscrowd": 0, "bbox": [160, 23, 99, 102], "area": 6327}, {"id": 3689059, "category_id": 61, "iscrowd": 0, "bbox": [357, 1, 142, 95], "area": 10910}, {"id": 2637149, "category_id": 61, "iscrowd": 0, "bbox": [280, 40, 75, 48], "area": 2357}, {"id": 3493482, "category_id": 61, "iscrowd": 0, "bbox": [276, 20, 40, 37], "area": 749}, {"id": 2440800, "category_id": 61, "iscrowd": 0, "bbox": [70, 76, 163, 158], "area": 17619}, {"id": 2175573, "category_id": 61, "iscrowd": 0, "bbox": [327, 85, 173, 166], "area": 25652}, {"id": 2440033, "category_id": 61, "iscrowd": 0, "bbox": [206, 69, 142, 158], "area": 15541}, {"id": 6259077, "category_id": 67, "iscrowd": 0, "bbox": [0, 102, 500, 268], "area": 42488}, {"id": 5468023, "category_id": 181, "iscrowd": 0, "bbox": [52, 14, 48, 46], "area": 1489}, {"id": 2179684, "category_id": 196, "iscrowd": 0, "bbox": [194, 0, 306, 149], "area": 2586}, {"id": 473174, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 451, 121], "area": 11061}], "file_name": "000000297396.png", "image_id": 297396}, {"segments_info": [{"id": 3949925, "category_id": 1, "iscrowd": 0, "bbox": [330, 474, 248, 136], "area": 21682}, {"id": 3156517, "category_id": 1, "iscrowd": 0, "bbox": [99, 0, 157, 112], "area": 8937}, {"id": 6057621, "category_id": 1, "iscrowd": 0, "bbox": [82, 1, 476, 192], "area": 26058}, {"id": 5273259, "category_id": 60, "iscrowd": 0, "bbox": [174, 86, 345, 218], "area": 59173}, {"id": 3817797, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 423, 640], "area": 44784}, {"id": 11512485, "category_id": 195, "iscrowd": 0, "bbox": [0, 92, 580, 538], "area": 107471}, {"id": 3627116, "category_id": 196, "iscrowd": 0, "bbox": [151, 81, 415, 424], "area": 65711}], "file_name": "000000297427.png", "image_id": 297427}, {"segments_info": [{"id": 1052690, "category_id": 1, "iscrowd": 0, "bbox": [581, 1, 59, 153], "area": 5564}, {"id": 2233633, "category_id": 1, "iscrowd": 0, "bbox": [431, 55, 32, 127], "area": 1749}, {"id": 2759972, "category_id": 1, "iscrowd": 0, "bbox": [422, 46, 26, 47], "area": 247}, {"id": 1446679, "category_id": 1, "iscrowd": 0, "bbox": [229, 98, 35, 97], "area": 2481}, {"id": 3486007, "category_id": 1, "iscrowd": 0, "bbox": [17, 207, 396, 273], "area": 43515}, {"id": 1906710, "category_id": 1, "iscrowd": 0, "bbox": [487, 38, 74, 241], "area": 8663}, {"id": 3355445, "category_id": 1, "iscrowd": 0, "bbox": [520, 74, 120, 341], "area": 20120}, {"id": 4153750, "category_id": 1, "iscrowd": 0, "bbox": [223, 201, 207, 279], "area": 28752}, {"id": 2562842, "category_id": 1, "iscrowd": 0, "bbox": [445, 145, 36, 87], "area": 1891}, {"id": 1051661, "category_id": 1, "iscrowd": 0, "bbox": [397, 44, 68, 219], "area": 6054}, {"id": 15311446, "category_id": 3, "iscrowd": 0, "bbox": [272, 98, 29, 25], "area": 587}, {"id": 5256335, "category_id": 62, "iscrowd": 0, "bbox": [395, 306, 134, 166], "area": 15320}, {"id": 4795011, "category_id": 62, "iscrowd": 0, "bbox": [362, 185, 77, 37], "area": 1643}, {"id": 4474192, "category_id": 87, "iscrowd": 0, "bbox": [233, 211, 156, 25], "area": 773}, {"id": 8478045, "category_id": 92, "iscrowd": 0, "bbox": [218, 0, 411, 129], "area": 8424}, {"id": 10123878, "category_id": 112, "iscrowd": 0, "bbox": [360, 0, 146, 186], "area": 9430}, {"id": 4552082, "category_id": 189, "iscrowd": 0, "bbox": [105, 181, 41, 40], "area": 999}, {"id": 8284502, "category_id": 190, "iscrowd": 0, "bbox": [400, 182, 240, 298], "area": 22929}, {"id": 14128217, "category_id": 192, "iscrowd": 0, "bbox": [199, 14, 357, 91], "area": 6206}, {"id": 10651771, "category_id": 199, "iscrowd": 0, "bbox": [209, 0, 278, 40], "area": 3465}], "file_name": "000000297562.png", "image_id": 297562}, {"segments_info": [{"id": 2563607, "category_id": 1, "iscrowd": 0, "bbox": [15, 95, 62, 154], "area": 4293}, {"id": 3752521, "category_id": 1, "iscrowd": 0, "bbox": [83, 16, 90, 265], "area": 12069}, {"id": 5921121, "category_id": 1, "iscrowd": 0, "bbox": [153, 8, 173, 269], "area": 26704}, {"id": 3354928, "category_id": 3, "iscrowd": 0, "bbox": [121, 204, 55, 74], "area": 2234}, {"id": 4867910, "category_id": 3, "iscrowd": 0, "bbox": [0, 156, 20, 61], "area": 933}, {"id": 5722962, "category_id": 3, "iscrowd": 0, "bbox": [51, 130, 29, 31], "area": 562}, {"id": 2959913, "category_id": 3, "iscrowd": 0, "bbox": [419, 98, 56, 112], "area": 5137}, {"id": 1513240, "category_id": 3, "iscrowd": 0, "bbox": [425, 183, 53, 78], "area": 3186}, {"id": 1578260, "category_id": 31, "iscrowd": 0, "bbox": [235, 175, 69, 105], "area": 5199}, {"id": 4999762, "category_id": 32, "iscrowd": 0, "bbox": [241, 76, 28, 121], "area": 1442}, {"id": 5593688, "category_id": 112, "iscrowd": 0, "bbox": [131, 0, 137, 220], "area": 7177}, {"id": 6381924, "category_id": 191, "iscrowd": 0, "bbox": [0, 144, 108, 137], "area": 8353}, {"id": 6720665, "category_id": 195, "iscrowd": 0, "bbox": [147, 52, 46, 56], "area": 1082}, {"id": 9540757, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 477, 135], "area": 12976}, {"id": 4146252, "category_id": 199, "iscrowd": 0, "bbox": [264, 0, 170, 281], "area": 33958}], "file_name": "000000297578.png", "image_id": 297578}, {"segments_info": [{"id": 4277072, "category_id": 1, "iscrowd": 0, "bbox": [137, 231, 42, 36], "area": 580}, {"id": 10659745, "category_id": 42, "iscrowd": 0, "bbox": [140, 265, 62, 14], "area": 533}, {"id": 11906718, "category_id": 155, "iscrowd": 0, "bbox": [0, 112, 640, 315], "area": 192440}, {"id": 13679265, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 136], "area": 79661}], "file_name": "000000297595.png", "image_id": 297595}, {"segments_info": [{"id": 4675943, "category_id": 3, "iscrowd": 0, "bbox": [404, 285, 129, 49], "area": 4577}, {"id": 2569536, "category_id": 178, "iscrowd": 0, "bbox": [0, 252, 640, 181], "area": 79855}, {"id": 1386025, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 308], "area": 150442}, {"id": 3622236, "category_id": 187, "iscrowd": 0, "bbox": [374, 0, 153, 36], "area": 1882}, {"id": 6319737, "category_id": 193, "iscrowd": 0, "bbox": [513, 264, 127, 42], "area": 2732}], "file_name": "000000297681.png", "image_id": 297681}, {"segments_info": [{"id": 2105376, "category_id": 1, "iscrowd": 0, "bbox": [305, 185, 206, 87], "area": 5766}, {"id": 1315860, "category_id": 1, "iscrowd": 0, "bbox": [421, 378, 17, 21], "area": 250}, {"id": 1381653, "category_id": 1, "iscrowd": 0, "bbox": [539, 384, 17, 25], "area": 276}, {"id": 1118481, "category_id": 1, "iscrowd": 0, "bbox": [385, 384, 18, 15], "area": 167}, {"id": 1052688, "category_id": 1, "iscrowd": 0, "bbox": [562, 374, 23, 67], "area": 1272}, {"id": 3092271, "category_id": 35, "iscrowd": 0, "bbox": [296, 218, 307, 83], "area": 4665}, {"id": 8092539, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 441], "area": 223810}, {"id": 3289650, "category_id": 197, "iscrowd": 0, "bbox": [214, 238, 426, 203], "area": 45551}], "file_name": "000000297698.png", "image_id": 297698}, {"segments_info": [{"id": 4938863, "category_id": 18, "iscrowd": 0, "bbox": [161, 59, 314, 485], "area": 98046}, {"id": 5197144, "category_id": 44, "iscrowd": 0, "bbox": [121, 431, 45, 166], "area": 5188}, {"id": 5655627, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 293, 486], "area": 93204}, {"id": 6718356, "category_id": 118, "iscrowd": 0, "bbox": [0, 469, 512, 171], "area": 58391}, {"id": 11908021, "category_id": 128, "iscrowd": 0, "bbox": [291, 0, 221, 528], "area": 68848}], "file_name": "000000297830.png", "image_id": 297830}, {"segments_info": [{"id": 7372943, "category_id": 24, "iscrowd": 0, "bbox": [561, 63, 24, 40], "area": 637}, {"id": 11383993, "category_id": 24, "iscrowd": 0, "bbox": [416, 109, 51, 17], "area": 597}, {"id": 9478065, "category_id": 24, "iscrowd": 0, "bbox": [266, 70, 30, 11], "area": 280}, {"id": 7176341, "category_id": 24, "iscrowd": 0, "bbox": [71, 92, 65, 42], "area": 1227}, {"id": 7832980, "category_id": 24, "iscrowd": 0, "bbox": [258, 45, 22, 34], "area": 475}, {"id": 6978962, "category_id": 24, "iscrowd": 0, "bbox": [503, 81, 17, 30], "area": 266}, {"id": 7637405, "category_id": 24, "iscrowd": 0, "bbox": [184, 80, 20, 13], "area": 181}, {"id": 7765895, "category_id": 24, "iscrowd": 0, "bbox": [379, 71, 17, 29], "area": 271}, {"id": 6583429, "category_id": 24, "iscrowd": 0, "bbox": [522, 106, 41, 39], "area": 1018}, {"id": 7644093, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 159], "area": 96536}], "file_name": "000000298251.png", "image_id": 298251}, {"segments_info": [{"id": 9806248, "category_id": 49, "iscrowd": 0, "bbox": [149, 160, 29, 7], "area": 116}, {"id": 5989997, "category_id": 49, "iscrowd": 0, "bbox": [155, 189, 19, 3], "area": 30}, {"id": 9938090, "category_id": 49, "iscrowd": 0, "bbox": [141, 148, 40, 8], "area": 204}, {"id": 7043722, "category_id": 49, "iscrowd": 0, "bbox": [156, 194, 19, 2], "area": 37}, {"id": 1514791, "category_id": 49, "iscrowd": 0, "bbox": [385, 266, 7, 30], "area": 96}, {"id": 3556180, "category_id": 49, "iscrowd": 0, "bbox": [378, 261, 4, 43], "area": 86}, {"id": 9347762, "category_id": 49, "iscrowd": 0, "bbox": [157, 206, 17, 3], "area": 40}, {"id": 2767697, "category_id": 49, "iscrowd": 0, "bbox": [402, 258, 8, 39], "area": 107}, {"id": 5792106, "category_id": 49, "iscrowd": 0, "bbox": [154, 196, 21, 4], "area": 37}, {"id": 9081237, "category_id": 49, "iscrowd": 0, "bbox": [149, 174, 30, 8], "area": 100}, {"id": 7831175, "category_id": 49, "iscrowd": 0, "bbox": [159, 184, 18, 2], "area": 23}, {"id": 6780801, "category_id": 49, "iscrowd": 0, "bbox": [138, 208, 6, 38], "area": 82}, {"id": 6913162, "category_id": 51, "iscrowd": 0, "bbox": [353, 388, 119, 76], "area": 5831}, {"id": 10857670, "category_id": 51, "iscrowd": 0, "bbox": [300, 227, 19, 14], "area": 237}, {"id": 16448250, "category_id": 51, "iscrowd": 0, "bbox": [162, 247, 16, 12], "area": 136}, {"id": 5017766, "category_id": 52, "iscrowd": 0, "bbox": [366, 412, 64, 22], "area": 786}, {"id": 1254980, "category_id": 62, "iscrowd": 0, "bbox": [310, 324, 54, 68], "area": 2164}, {"id": 1847370, "category_id": 62, "iscrowd": 0, "bbox": [448, 312, 132, 28], "area": 1902}, {"id": 5795467, "category_id": 62, "iscrowd": 0, "bbox": [371, 215, 88, 136], "area": 6220}, {"id": 1515053, "category_id": 62, "iscrowd": 0, "bbox": [608, 363, 32, 109], "area": 2046}, {"id": 3498625, "category_id": 67, "iscrowd": 0, "bbox": [239, 324, 370, 149], "area": 32951}, {"id": 5595498, "category_id": 79, "iscrowd": 0, "bbox": [454, 282, 105, 39], "area": 2226}, {"id": 5726060, "category_id": 79, "iscrowd": 0, "bbox": [457, 148, 108, 118], "area": 12262}, {"id": 9608353, "category_id": 81, "iscrowd": 0, "bbox": [64, 263, 186, 53], "area": 3797}, {"id": 7965589, "category_id": 85, "iscrowd": 0, "bbox": [40, 1, 50, 41], "area": 1610}, {"id": 8821418, "category_id": 87, "iscrowd": 0, "bbox": [409, 174, 11, 19], "area": 109}, {"id": 4543324, "category_id": 87, "iscrowd": 0, "bbox": [423, 174, 13, 14], "area": 107}, {"id": 10924999, "category_id": 107, "iscrowd": 0, "bbox": [198, 227, 202, 44], "area": 2618}, {"id": 12569041, "category_id": 130, "iscrowd": 0, "bbox": [142, 103, 52, 46], "area": 1621}, {"id": 11714765, "category_id": 176, "iscrowd": 0, "bbox": [341, 195, 113, 28], "area": 941}, {"id": 7111315, "category_id": 180, "iscrowd": 0, "bbox": [0, 36, 272, 240], "area": 40293}, {"id": 5857635, "category_id": 186, "iscrowd": 0, "bbox": [224, 0, 101, 17], "area": 1156}, {"id": 5398104, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 580, 480], "area": 88784}, {"id": 5340819, "category_id": 189, "iscrowd": 0, "bbox": [282, 409, 18, 13], "area": 16}, {"id": 9082523, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 326], "area": 40314}, {"id": 2106668, "category_id": 200, "iscrowd": 0, "bbox": [115, 313, 525, 167], "area": 10284}], "file_name": "000000298396.png", "image_id": 298396}, {"segments_info": [{"id": 3097683, "category_id": 19, "iscrowd": 0, "bbox": [376, 217, 31, 20], "area": 245}, {"id": 5012114, "category_id": 21, "iscrowd": 0, "bbox": [538, 234, 19, 9], "area": 131}, {"id": 4745080, "category_id": 21, "iscrowd": 0, "bbox": [449, 213, 32, 22], "area": 356}, {"id": 5076616, "category_id": 21, "iscrowd": 0, "bbox": [353, 226, 35, 18], "area": 357}, {"id": 4679788, "category_id": 184, "iscrowd": 0, "bbox": [0, 157, 640, 100], "area": 17304}, {"id": 12105652, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 164], "area": 100547}, {"id": 6716803, "category_id": 192, "iscrowd": 0, "bbox": [32, 144, 608, 57], "area": 13251}, {"id": 4553364, "category_id": 193, "iscrowd": 0, "bbox": [0, 187, 640, 293], "area": 172405}, {"id": 5532537, "category_id": 197, "iscrowd": 0, "bbox": [159, 160, 473, 44], "area": 2502}], "file_name": "000000298697.png", "image_id": 298697}, {"segments_info": [{"id": 4738897, "category_id": 23, "iscrowd": 0, "bbox": [0, 128, 427, 503], "area": 114541}, {"id": 659977, "category_id": 184, "iscrowd": 0, "bbox": [369, 50, 58, 86], "area": 2933}, {"id": 3357246, "category_id": 194, "iscrowd": 0, "bbox": [356, 578, 71, 62], "area": 2863}], "file_name": "000000298738.png", "image_id": 298738}, {"segments_info": [{"id": 7237495, "category_id": 86, "iscrowd": 0, "bbox": [56, 14, 344, 607], "area": 149008}, {"id": 5202295, "category_id": 189, "iscrowd": 0, "bbox": [0, 537, 464, 103], "area": 22943}, {"id": 10195855, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 557], "area": 122520}], "file_name": "000000298904.png", "image_id": 298904}, {"segments_info": [{"id": 5472356, "category_id": 56, "iscrowd": 0, "bbox": [295, 135, 29, 75], "area": 1384}, {"id": 4812368, "category_id": 56, "iscrowd": 0, "bbox": [323, 143, 38, 62], "area": 1567}, {"id": 4877136, "category_id": 56, "iscrowd": 0, "bbox": [265, 110, 37, 34], "area": 664}, {"id": 5209429, "category_id": 56, "iscrowd": 0, "bbox": [318, 117, 22, 17], "area": 283}, {"id": 5011803, "category_id": 56, "iscrowd": 0, "bbox": [358, 153, 50, 59], "area": 1667}, {"id": 4292564, "category_id": 57, "iscrowd": 0, "bbox": [103, 157, 12, 85], "area": 530}, {"id": 4018036, "category_id": 57, "iscrowd": 0, "bbox": [129, 133, 21, 98], "area": 567}, {"id": 3959997, "category_id": 57, "iscrowd": 0, "bbox": [67, 144, 48, 68], "area": 886}, {"id": 4805228, "category_id": 57, "iscrowd": 0, "bbox": [111, 143, 18, 103], "area": 1058}, {"id": 12046305, "category_id": 195, "iscrowd": 0, "bbox": [48, 232, 159, 196], "area": 25812}, {"id": 3828578, "category_id": 196, "iscrowd": 0, "bbox": [65, 0, 549, 428], "area": 121849}], "file_name": "000000298994.png", "image_id": 298994}, {"segments_info": [{"id": 4085577, "category_id": 56, "iscrowd": 0, "bbox": [137, 265, 126, 100], "area": 7097}, {"id": 4283212, "category_id": 56, "iscrowd": 0, "bbox": [44, 155, 256, 181], "area": 22981}, {"id": 5728360, "category_id": 196, "iscrowd": 0, "bbox": [141, 82, 267, 226], "area": 34324}], "file_name": "000000299355.png", "image_id": 299355}, {"segments_info": [{"id": 724756, "category_id": 1, "iscrowd": 0, "bbox": [74, 426, 12, 36], "area": 323}, {"id": 1776668, "category_id": 1, "iscrowd": 0, "bbox": [194, 446, 15, 54], "area": 578}, {"id": 2435112, "category_id": 1, "iscrowd": 0, "bbox": [179, 452, 19, 48], "area": 681}, {"id": 3750971, "category_id": 1, "iscrowd": 0, "bbox": [123, 413, 8, 11], "area": 51}, {"id": 3026734, "category_id": 1, "iscrowd": 0, "bbox": [101, 405, 10, 22], "area": 146}, {"id": 2565925, "category_id": 1, "iscrowd": 0, "bbox": [272, 357, 35, 71], "area": 1223}, {"id": 2105633, "category_id": 1, "iscrowd": 0, "bbox": [39, 473, 17, 27], "area": 352}, {"id": 3157805, "category_id": 1, "iscrowd": 0, "bbox": [111, 410, 8, 24], "area": 146}, {"id": 923157, "category_id": 1, "iscrowd": 0, "bbox": [174, 416, 8, 25], "area": 102}, {"id": 1514267, "category_id": 1, "iscrowd": 0, "bbox": [348, 360, 22, 72], "area": 1045}, {"id": 1119001, "category_id": 1, "iscrowd": 0, "bbox": [301, 344, 27, 79], "area": 1498}, {"id": 1054750, "category_id": 1, "iscrowd": 0, "bbox": [298, 467, 43, 32], "area": 932}, {"id": 923688, "category_id": 1, "iscrowd": 0, "bbox": [198, 402, 11, 22], "area": 163}, {"id": 4276022, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 374, 500], "area": 33184}, {"id": 8157552, "category_id": 38, "iscrowd": 0, "bbox": [164, 230, 16, 52], "area": 348}, {"id": 3554113, "category_id": 38, "iscrowd": 0, "bbox": [340, 286, 19, 15], "area": 221}, {"id": 11833708, "category_id": 38, "iscrowd": 0, "bbox": [121, 110, 37, 15], "area": 98}, {"id": 5788502, "category_id": 38, "iscrowd": 0, "bbox": [186, 174, 33, 59], "area": 476}, {"id": 1251093, "category_id": 184, "iscrowd": 0, "bbox": [137, 284, 238, 166], "area": 4566}, {"id": 11244664, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 375, 323], "area": 107952}, {"id": 2960676, "category_id": 192, "iscrowd": 0, "bbox": [0, 304, 350, 100], "area": 15078}, {"id": 1385770, "category_id": 194, "iscrowd": 0, "bbox": [0, 365, 375, 135], "area": 9536}, {"id": 2040868, "category_id": 197, "iscrowd": 0, "bbox": [239, 419, 136, 81], "area": 8335}], "file_name": "000000299553.png", "image_id": 299553}, {"segments_info": [{"id": 856336, "category_id": 19, "iscrowd": 0, "bbox": [187, 324, 104, 86], "area": 4022}, {"id": 1843739, "category_id": 184, "iscrowd": 0, "bbox": [40, 242, 600, 49], "area": 12695}, {"id": 12626822, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 201], "area": 89390}, {"id": 7367508, "category_id": 192, "iscrowd": 0, "bbox": [0, 87, 640, 182], "area": 71333}, {"id": 1259564, "category_id": 193, "iscrowd": 0, "bbox": [0, 264, 640, 216], "area": 129597}], "file_name": "000000299609.png", "image_id": 299609}, {"segments_info": [{"id": 5661820, "category_id": 25, "iscrowd": 0, "bbox": [320, 2, 199, 425], "area": 46851}, {"id": 1975087, "category_id": 177, "iscrowd": 0, "bbox": [510, 0, 130, 427], "area": 53674}, {"id": 5924209, "category_id": 184, "iscrowd": 0, "bbox": [54, 0, 322, 427], "area": 59547}, {"id": 13031648, "category_id": 194, "iscrowd": 0, "bbox": [0, 301, 504, 126], "area": 43435}], "file_name": "000000299720.png", "image_id": 299720}, {"segments_info": [{"id": 4604744, "category_id": 1, "iscrowd": 0, "bbox": [211, 106, 231, 372], "area": 44721}, {"id": 7629164, "category_id": 1, "iscrowd": 0, "bbox": [370, 122, 149, 358], "area": 33901}, {"id": 5068906, "category_id": 4, "iscrowd": 0, "bbox": [5, 130, 315, 345], "area": 68756}, {"id": 7700616, "category_id": 8, "iscrowd": 0, "bbox": [0, 180, 47, 35], "area": 908}, {"id": 12635605, "category_id": 151, "iscrowd": 0, "bbox": [0, 126, 82, 40], "area": 1849}, {"id": 6194047, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 505, 240], "area": 75120}, {"id": 8763578, "category_id": 193, "iscrowd": 0, "bbox": [0, 192, 93, 288], "area": 7433}, {"id": 2304817, "category_id": 194, "iscrowd": 0, "bbox": [495, 357, 128, 123], "area": 7488}, {"id": 8561075, "category_id": 197, "iscrowd": 0, "bbox": [17, 157, 24, 42], "area": 583}, {"id": 6913922, "category_id": 199, "iscrowd": 0, "bbox": [484, 0, 156, 480], "area": 60051}], "file_name": "000000299887.png", "image_id": 299887}, {"segments_info": [{"id": 398163, "category_id": 1, "iscrowd": 0, "bbox": [0, 44, 193, 274], "area": 33053}, {"id": 3489381, "category_id": 44, "iscrowd": 0, "bbox": [190, 128, 42, 131], "area": 3400}, {"id": 199220, "category_id": 44, "iscrowd": 0, "bbox": [313, 2, 100, 166], "area": 11711}, {"id": 4213866, "category_id": 47, "iscrowd": 0, "bbox": [223, 171, 42, 53], "area": 1810}, {"id": 65816, "category_id": 47, "iscrowd": 0, "bbox": [436, 0, 64, 122], "area": 7218}, {"id": 14540765, "category_id": 47, "iscrowd": 0, "bbox": [152, 173, 38, 66], "area": 1605}, {"id": 3501502, "category_id": 47, "iscrowd": 0, "bbox": [200, 0, 103, 131], "area": 9420}, {"id": 65876, "category_id": 67, "iscrowd": 0, "bbox": [325, 57, 175, 312], "area": 27209}, {"id": 2960984, "category_id": 77, "iscrowd": 0, "bbox": [87, 98, 344, 230], "area": 42145}, {"id": 265551, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 374], "area": 32758}, {"id": 7325943, "category_id": 195, "iscrowd": 0, "bbox": [0, 255, 248, 119], "area": 15258}], "file_name": "000000300039.png", "image_id": 300039}, {"segments_info": [{"id": 5331559, "category_id": 16, "iscrowd": 0, "bbox": [280, 154, 176, 197], "area": 19830}, {"id": 3044181, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 253317}], "file_name": "000000300155.png", "image_id": 300155}, {"segments_info": [{"id": 2373957, "category_id": 44, "iscrowd": 0, "bbox": [464, 98, 162, 142], "area": 14808}, {"id": 12963791, "category_id": 50, "iscrowd": 0, "bbox": [243, 84, 113, 116], "area": 6008}, {"id": 10400705, "category_id": 50, "iscrowd": 0, "bbox": [154, 115, 114, 121], "area": 6397}, {"id": 6714488, "category_id": 51, "iscrowd": 0, "bbox": [132, 245, 220, 223], "area": 34428}, {"id": 6841431, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 489], "area": 232310}], "file_name": "000000300233.png", "image_id": 300233}, {"segments_info": [{"id": 4474775, "category_id": 1, "iscrowd": 0, "bbox": [128, 154, 14, 27], "area": 233}, {"id": 7758453, "category_id": 1, "iscrowd": 0, "bbox": [307, 40, 162, 227], "area": 21626}, {"id": 6838635, "category_id": 1, "iscrowd": 0, "bbox": [139, 55, 121, 213], "area": 15632}, {"id": 3218551, "category_id": 1, "iscrowd": 0, "bbox": [3, 73, 112, 202], "area": 8122}, {"id": 8558485, "category_id": 15, "iscrowd": 0, "bbox": [286, 178, 23, 24], "area": 277}, {"id": 5197696, "category_id": 51, "iscrowd": 0, "bbox": [212, 290, 43, 34], "area": 1084}, {"id": 11902887, "category_id": 51, "iscrowd": 0, "bbox": [249, 246, 41, 16], "area": 478}, {"id": 12758708, "category_id": 51, "iscrowd": 0, "bbox": [261, 265, 43, 19], "area": 642}, {"id": 4737323, "category_id": 61, "iscrowd": 0, "bbox": [404, 320, 24, 24], "area": 468}, {"id": 2498844, "category_id": 61, "iscrowd": 0, "bbox": [454, 323, 30, 28], "area": 611}, {"id": 11512470, "category_id": 61, "iscrowd": 0, "bbox": [239, 300, 126, 51], "area": 4741}, {"id": 1841699, "category_id": 61, "iscrowd": 0, "bbox": [443, 287, 26, 18], "area": 311}, {"id": 2500148, "category_id": 61, "iscrowd": 0, "bbox": [424, 286, 19, 14], "area": 201}, {"id": 8882068, "category_id": 61, "iscrowd": 0, "bbox": [415, 275, 10, 7], "area": 59}, {"id": 5197413, "category_id": 61, "iscrowd": 0, "bbox": [388, 280, 23, 22], "area": 293}, {"id": 3025451, "category_id": 61, "iscrowd": 0, "bbox": [483, 325, 22, 29], "area": 509}, {"id": 4407642, "category_id": 61, "iscrowd": 0, "bbox": [403, 284, 21, 18], "area": 283}, {"id": 4934491, "category_id": 61, "iscrowd": 0, "bbox": [427, 275, 20, 16], "area": 201}, {"id": 2893870, "category_id": 61, "iscrowd": 0, "bbox": [378, 317, 24, 26], "area": 463}, {"id": 7695446, "category_id": 61, "iscrowd": 0, "bbox": [296, 258, 94, 40], "area": 2874}, {"id": 5983526, "category_id": 61, "iscrowd": 0, "bbox": [433, 325, 24, 22], "area": 422}, {"id": 6774860, "category_id": 61, "iscrowd": 1, "bbox": [216, 260, 288, 71], "area": 3657}, {"id": 2382565, "category_id": 62, "iscrowd": 0, "bbox": [102, 179, 33, 25], "area": 146}, {"id": 4666661, "category_id": 62, "iscrowd": 0, "bbox": [108, 185, 33, 37], "area": 547}, {"id": 9602715, "category_id": 62, "iscrowd": 0, "bbox": [104, 178, 29, 5], "area": 61}, {"id": 2644966, "category_id": 62, "iscrowd": 0, "bbox": [106, 184, 30, 22], "area": 125}, {"id": 1117047, "category_id": 67, "iscrowd": 0, "bbox": [112, 306, 146, 49], "area": 2634}, {"id": 11643569, "category_id": 67, "iscrowd": 0, "bbox": [248, 214, 313, 67], "area": 6237}, {"id": 7697787, "category_id": 67, "iscrowd": 0, "bbox": [126, 161, 21, 5], "area": 20}, {"id": 10337719, "category_id": 67, "iscrowd": 0, "bbox": [285, 184, 22, 11], "area": 50}, {"id": 4999779, "category_id": 100, "iscrowd": 0, "bbox": [438, 193, 93, 47], "area": 2752}, {"id": 8545134, "category_id": 133, "iscrowd": 0, "bbox": [527, 247, 45, 55], "area": 1426}, {"id": 14930365, "category_id": 155, "iscrowd": 0, "bbox": [63, 99, 577, 41], "area": 3748}, {"id": 4875608, "category_id": 184, "iscrowd": 0, "bbox": [0, 39, 640, 201], "area": 34517}, {"id": 2764353, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 70], "area": 26882}, {"id": 15920095, "category_id": 187, "iscrowd": 0, "bbox": [11, 16, 629, 94], "area": 22135}, {"id": 4995207, "category_id": 189, "iscrowd": 0, "bbox": [116, 301, 288, 58], "area": 2052}, {"id": 6661274, "category_id": 193, "iscrowd": 0, "bbox": [74, 161, 236, 60], "area": 2659}, {"id": 6113673, "category_id": 195, "iscrowd": 0, "bbox": [580, 313, 60, 46], "area": 2205}, {"id": 7757693, "category_id": 196, "iscrowd": 0, "bbox": [283, 287, 291, 66], "area": 1887}, {"id": 6251626, "category_id": 198, "iscrowd": 0, "bbox": [452, 118, 105, 88], "area": 3708}], "file_name": "000000300276.png", "image_id": 300276}, {"segments_info": [{"id": 4607069, "category_id": 1, "iscrowd": 0, "bbox": [363, 345, 69, 82], "area": 3179}, {"id": 4277066, "category_id": 1, "iscrowd": 0, "bbox": [47, 82, 206, 340], "area": 41254}, {"id": 5000276, "category_id": 1, "iscrowd": 0, "bbox": [402, 1, 199, 426], "area": 49063}, {"id": 1384768, "category_id": 1, "iscrowd": 0, "bbox": [294, 400, 31, 27], "area": 745}, {"id": 3029065, "category_id": 1, "iscrowd": 0, "bbox": [285, 338, 74, 89], "area": 4074}, {"id": 988720, "category_id": 1, "iscrowd": 0, "bbox": [0, 351, 62, 76], "area": 2762}, {"id": 7105907, "category_id": 75, "iscrowd": 0, "bbox": [458, 12, 23, 29], "area": 467}, {"id": 7829891, "category_id": 75, "iscrowd": 0, "bbox": [96, 96, 72, 25], "area": 654}, {"id": 7961995, "category_id": 75, "iscrowd": 0, "bbox": [423, 160, 30, 40], "area": 623}, {"id": 2436406, "category_id": 112, "iscrowd": 0, "bbox": [239, 359, 30, 68], "area": 1150}, {"id": 12768471, "category_id": 130, "iscrowd": 0, "bbox": [346, 0, 87, 293], "area": 3306}, {"id": 1318957, "category_id": 156, "iscrowd": 0, "bbox": [264, 354, 41, 73], "area": 558}, {"id": 4080975, "category_id": 180, "iscrowd": 0, "bbox": [0, 203, 69, 201], "area": 8253}, {"id": 3621455, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 363], "area": 117135}, {"id": 991293, "category_id": 188, "iscrowd": 0, "bbox": [356, 360, 35, 67], "area": 970}, {"id": 3292742, "category_id": 195, "iscrowd": 0, "bbox": [282, 370, 15, 18], "area": 76}, {"id": 3621714, "category_id": 199, "iscrowd": 0, "bbox": [0, 114, 640, 313], "area": 31717}], "file_name": "000000300341.png", "image_id": 300341}, {"segments_info": [{"id": 7629951, "category_id": 5, "iscrowd": 0, "bbox": [309, 165, 28, 48], "area": 345}, {"id": 7826819, "category_id": 5, "iscrowd": 0, "bbox": [255, 182, 29, 44], "area": 345}, {"id": 7103351, "category_id": 5, "iscrowd": 0, "bbox": [207, 194, 26, 45], "area": 323}, {"id": 7760758, "category_id": 5, "iscrowd": 0, "bbox": [230, 62, 26, 48], "area": 350}, {"id": 7364713, "category_id": 5, "iscrowd": 0, "bbox": [306, 283, 29, 48], "area": 422}, {"id": 8024966, "category_id": 5, "iscrowd": 0, "bbox": [269, 114, 28, 49], "area": 381}, {"id": 7432061, "category_id": 5, "iscrowd": 0, "bbox": [312, 222, 28, 48], "area": 343}, {"id": 13611147, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 227681}], "file_name": "000000300659.png", "image_id": 300659}, {"segments_info": [{"id": 5786203, "category_id": 41, "iscrowd": 0, "bbox": [161, 138, 479, 224], "area": 34817}, {"id": 12237754, "category_id": 190, "iscrowd": 0, "bbox": [0, 228, 640, 198], "area": 98008}, {"id": 9339527, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 262], "area": 111413}], "file_name": "000000300842.png", "image_id": 300842}, {"segments_info": [{"id": 6320247, "category_id": 17, "iscrowd": 0, "bbox": [8, 5, 492, 366], "area": 88881}, {"id": 2843237, "category_id": 63, "iscrowd": 0, "bbox": [0, 2, 500, 368], "area": 77724}, {"id": 3816562, "category_id": 63, "iscrowd": 0, "bbox": [122, 1, 119, 59], "area": 3958}, {"id": 204301, "category_id": 93, "iscrowd": 0, "bbox": [0, 370, 254, 5], "area": 1013}, {"id": 2634037, "category_id": 200, "iscrowd": 0, "bbox": [0, 0, 124, 136], "area": 5785}], "file_name": "000000300913.png", "image_id": 300913}, {"segments_info": [{"id": 3685966, "category_id": 1, "iscrowd": 0, "bbox": [6, 285, 65, 314], "area": 10880}, {"id": 6976122, "category_id": 8, "iscrowd": 0, "bbox": [0, 4, 480, 625], "area": 264403}, {"id": 4936030, "category_id": 22, "iscrowd": 0, "bbox": [128, 156, 197, 252], "area": 15366}, {"id": 16711422, "category_id": 187, "iscrowd": 0, "bbox": [54, 0, 19, 18], "area": 330}], "file_name": "000000301061.png", "image_id": 301061}, {"segments_info": [{"id": 6650260, "category_id": 1, "iscrowd": 0, "bbox": [234, 398, 102, 150], "area": 3932}, {"id": 4673389, "category_id": 1, "iscrowd": 0, "bbox": [125, 384, 57, 49], "area": 697}, {"id": 5858695, "category_id": 1, "iscrowd": 0, "bbox": [207, 396, 72, 145], "area": 4065}, {"id": 2763057, "category_id": 1, "iscrowd": 0, "bbox": [134, 373, 26, 41], "area": 674}, {"id": 7630007, "category_id": 1, "iscrowd": 0, "bbox": [286, 451, 129, 71], "area": 5646}, {"id": 8090222, "category_id": 1, "iscrowd": 0, "bbox": [280, 341, 14, 37], "area": 275}, {"id": 3883089, "category_id": 1, "iscrowd": 0, "bbox": [106, 389, 81, 111], "area": 2708}, {"id": 5851209, "category_id": 1, "iscrowd": 0, "bbox": [66, 382, 85, 110], "area": 2290}, {"id": 11316142, "category_id": 1, "iscrowd": 0, "bbox": [308, 339, 17, 25], "area": 256}, {"id": 10324872, "category_id": 1, "iscrowd": 0, "bbox": [247, 339, 15, 40], "area": 331}, {"id": 2699326, "category_id": 1, "iscrowd": 0, "bbox": [17, 323, 36, 165], "area": 3711}, {"id": 1908254, "category_id": 2, "iscrowd": 0, "bbox": [49, 360, 56, 47], "area": 700}, {"id": 9144176, "category_id": 3, "iscrowd": 0, "bbox": [48, 344, 11, 14], "area": 126}, {"id": 2105120, "category_id": 3, "iscrowd": 0, "bbox": [300, 350, 111, 46], "area": 3867}, {"id": 9669503, "category_id": 3, "iscrowd": 0, "bbox": [90, 350, 41, 25], "area": 612}, {"id": 6709850, "category_id": 3, "iscrowd": 0, "bbox": [124, 346, 59, 32], "area": 1084}, {"id": 1118994, "category_id": 15, "iscrowd": 0, "bbox": [140, 446, 41, 43], "area": 380}, {"id": 5068615, "category_id": 15, "iscrowd": 0, "bbox": [277, 444, 149, 123], "area": 2714}, {"id": 2499363, "category_id": 27, "iscrowd": 0, "bbox": [0, 347, 28, 56], "area": 821}, {"id": 855051, "category_id": 27, "iscrowd": 0, "bbox": [60, 432, 28, 40], "area": 828}, {"id": 12700115, "category_id": 31, "iscrowd": 0, "bbox": [277, 456, 25, 16], "area": 306}, {"id": 3025724, "category_id": 31, "iscrowd": 0, "bbox": [222, 442, 51, 34], "area": 863}, {"id": 2828587, "category_id": 31, "iscrowd": 0, "bbox": [127, 423, 38, 19], "area": 588}, {"id": 3554614, "category_id": 130, "iscrowd": 0, "bbox": [167, 21, 54, 81], "area": 2278}, {"id": 6841696, "category_id": 149, "iscrowd": 0, "bbox": [99, 368, 329, 53], "area": 4561}, {"id": 1584929, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 428, 474], "area": 116122}, {"id": 9280162, "category_id": 191, "iscrowd": 0, "bbox": [0, 348, 428, 292], "area": 64078}, {"id": 8357261, "category_id": 197, "iscrowd": 0, "bbox": [0, 59, 428, 328], "area": 37841}], "file_name": "000000301135.png", "image_id": 301135}, {"segments_info": [{"id": 6184297, "category_id": 1, "iscrowd": 0, "bbox": [290, 368, 41, 75], "area": 953}, {"id": 4142902, "category_id": 1, "iscrowd": 0, "bbox": [208, 366, 9, 38], "area": 201}, {"id": 3615529, "category_id": 1, "iscrowd": 0, "bbox": [197, 360, 11, 45], "area": 293}, {"id": 4271657, "category_id": 1, "iscrowd": 0, "bbox": [182, 357, 22, 52], "area": 503}, {"id": 5130057, "category_id": 2, "iscrowd": 0, "bbox": [307, 398, 23, 52], "area": 647}, {"id": 7695204, "category_id": 3, "iscrowd": 0, "bbox": [235, 366, 44, 46], "area": 585}, {"id": 9339004, "category_id": 3, "iscrowd": 0, "bbox": [279, 362, 12, 10], "area": 80}, {"id": 8812913, "category_id": 3, "iscrowd": 0, "bbox": [216, 364, 28, 34], "area": 174}, {"id": 6641488, "category_id": 3, "iscrowd": 0, "bbox": [1, 392, 97, 86], "area": 5128}, {"id": 9862248, "category_id": 3, "iscrowd": 0, "bbox": [291, 363, 31, 16], "area": 242}, {"id": 10129548, "category_id": 3, "iscrowd": 0, "bbox": [323, 370, 10, 30], "area": 214}, {"id": 6312518, "category_id": 3, "iscrowd": 0, "bbox": [247, 373, 55, 45], "area": 1530}, {"id": 4270623, "category_id": 10, "iscrowd": 0, "bbox": [65, 0, 46, 132], "area": 3233}, {"id": 4012360, "category_id": 10, "iscrowd": 0, "bbox": [261, 266, 19, 35], "area": 480}, {"id": 4007968, "category_id": 10, "iscrowd": 0, "bbox": [282, 298, 4, 22], "area": 88}, {"id": 3482137, "category_id": 10, "iscrowd": 0, "bbox": [83, 95, 28, 58], "area": 935}, {"id": 2564383, "category_id": 10, "iscrowd": 0, "bbox": [82, 256, 18, 39], "area": 582}, {"id": 3358017, "category_id": 10, "iscrowd": 0, "bbox": [311, 318, 4, 11], "area": 34}, {"id": 3417126, "category_id": 10, "iscrowd": 0, "bbox": [263, 210, 21, 50], "area": 811}, {"id": 2102548, "category_id": 14, "iscrowd": 0, "bbox": [218, 369, 5, 11], "area": 45}, {"id": 2633273, "category_id": 31, "iscrowd": 0, "bbox": [306, 379, 15, 19], "area": 70}, {"id": 6639685, "category_id": 92, "iscrowd": 0, "bbox": [235, 309, 20, 29], "area": 430}, {"id": 3814193, "category_id": 100, "iscrowd": 0, "bbox": [250, 309, 35, 30], "area": 553}, {"id": 10396071, "category_id": 149, "iscrowd": 0, "bbox": [0, 380, 333, 120], "area": 11171}, {"id": 2828844, "category_id": 171, "iscrowd": 0, "bbox": [0, 297, 195, 146], "area": 12167}, {"id": 4148033, "category_id": 184, "iscrowd": 0, "bbox": [233, 312, 100, 54], "area": 1896}, {"id": 16249835, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 333, 336], "area": 52145}, {"id": 6114883, "category_id": 191, "iscrowd": 0, "bbox": [26, 390, 274, 89], "area": 10645}, {"id": 3488321, "category_id": 197, "iscrowd": 0, "bbox": [0, 138, 333, 299], "area": 39416}], "file_name": "000000301376.png", "image_id": 301376}, {"segments_info": [{"id": 4869733, "category_id": 3, "iscrowd": 0, "bbox": [296, 97, 81, 58], "area": 3566}, {"id": 3422018, "category_id": 62, "iscrowd": 0, "bbox": [561, 195, 79, 232], "area": 9397}, {"id": 658187, "category_id": 62, "iscrowd": 0, "bbox": [6, 287, 177, 133], "area": 13186}, {"id": 6581342, "category_id": 72, "iscrowd": 0, "bbox": [281, 54, 151, 127], "area": 12513}, {"id": 1381394, "category_id": 73, "iscrowd": 0, "bbox": [245, 281, 254, 134], "area": 15073}, {"id": 3157033, "category_id": 74, "iscrowd": 0, "bbox": [341, 293, 45, 44], "area": 1540}, {"id": 12301489, "category_id": 75, "iscrowd": 0, "bbox": [228, 248, 35, 15], "area": 227}, {"id": 9275267, "category_id": 76, "iscrowd": 0, "bbox": [137, 235, 118, 64], "area": 3634}, {"id": 1118478, "category_id": 77, "iscrowd": 0, "bbox": [214, 238, 44, 20], "area": 427}, {"id": 592650, "category_id": 77, "iscrowd": 0, "bbox": [348, 224, 34, 58], "area": 1319}, {"id": 8028294, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 74, 359], "area": 13542}, {"id": 4674395, "category_id": 189, "iscrowd": 0, "bbox": [33, 166, 559, 261], "area": 75118}, {"id": 8417364, "category_id": 199, "iscrowd": 0, "bbox": [23, 0, 617, 415], "area": 96864}], "file_name": "000000301421.png", "image_id": 301421}, {"segments_info": [{"id": 1645338, "category_id": 1, "iscrowd": 0, "bbox": [215, 83, 160, 211], "area": 17325}, {"id": 1250064, "category_id": 1, "iscrowd": 0, "bbox": [169, 52, 44, 64], "area": 1007}, {"id": 1979195, "category_id": 1, "iscrowd": 0, "bbox": [64, 47, 34, 70], "area": 1317}, {"id": 1185075, "category_id": 27, "iscrowd": 0, "bbox": [223, 105, 78, 64], "area": 461}, {"id": 6120030, "category_id": 35, "iscrowd": 0, "bbox": [184, 110, 27, 9], "area": 60}, {"id": 3490633, "category_id": 35, "iscrowd": 0, "bbox": [94, 119, 31, 7], "area": 56}, {"id": 5462104, "category_id": 35, "iscrowd": 0, "bbox": [262, 276, 154, 36], "area": 2454}, {"id": 11777977, "category_id": 159, "iscrowd": 0, "bbox": [0, 77, 640, 351], "area": 170192}, {"id": 4335887, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 178], "area": 80678}], "file_name": "000000301563.png", "image_id": 301563}, {"segments_info": [{"id": 4474455, "category_id": 1, "iscrowd": 0, "bbox": [4, 23, 209, 257], "area": 32270}, {"id": 2237493, "category_id": 1, "iscrowd": 0, "bbox": [305, 0, 175, 372], "area": 29721}, {"id": 4471099, "category_id": 44, "iscrowd": 0, "bbox": [27, 268, 47, 108], "area": 2599}, {"id": 3621685, "category_id": 44, "iscrowd": 0, "bbox": [154, 210, 59, 179], "area": 8289}, {"id": 9934482, "category_id": 47, "iscrowd": 0, "bbox": [3, 299, 57, 188], "area": 9038}, {"id": 3029844, "category_id": 48, "iscrowd": 0, "bbox": [348, 289, 32, 27], "area": 237}, {"id": 7037030, "category_id": 48, "iscrowd": 0, "bbox": [44, 228, 58, 49], "area": 593}, {"id": 7562854, "category_id": 49, "iscrowd": 0, "bbox": [296, 397, 184, 20], "area": 1285}, {"id": 7301987, "category_id": 49, "iscrowd": 0, "bbox": [16, 483, 42, 147], "area": 4351}, {"id": 10855589, "category_id": 51, "iscrowd": 0, "bbox": [72, 320, 84, 45], "area": 1715}, {"id": 12563379, "category_id": 67, "iscrowd": 0, "bbox": [3, 274, 477, 358], "area": 62362}, {"id": 3423055, "category_id": 100, "iscrowd": 0, "bbox": [228, 227, 165, 61], "area": 4217}, {"id": 9351348, "category_id": 122, "iscrowd": 0, "bbox": [83, 317, 397, 314], "area": 12655}, {"id": 10787986, "category_id": 189, "iscrowd": 0, "bbox": [0, 285, 480, 355], "area": 3822}, {"id": 7505037, "category_id": 196, "iscrowd": 0, "bbox": [56, 263, 424, 377], "area": 48799}, {"id": 2571090, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 449, 281], "area": 63308}], "file_name": "000000301718.png", "image_id": 301718}, {"segments_info": [{"id": 7962778, "category_id": 1, "iscrowd": 0, "bbox": [147, 109, 117, 371], "area": 29292}, {"id": 7770276, "category_id": 1, "iscrowd": 0, "bbox": [352, 117, 137, 363], "area": 22385}, {"id": 5728863, "category_id": 1, "iscrowd": 0, "bbox": [256, 102, 133, 378], "area": 26842}, {"id": 14541542, "category_id": 28, "iscrowd": 0, "bbox": [209, 40, 238, 134], "area": 10531}, {"id": 4997211, "category_id": 31, "iscrowd": 0, "bbox": [242, 349, 30, 68], "area": 1362}, {"id": 5929371, "category_id": 31, "iscrowd": 0, "bbox": [119, 174, 73, 161], "area": 2551}, {"id": 5849924, "category_id": 31, "iscrowd": 0, "bbox": [429, 182, 107, 143], "area": 7248}, {"id": 10529459, "category_id": 191, "iscrowd": 0, "bbox": [458, 448, 182, 32], "area": 3735}, {"id": 6583935, "category_id": 197, "iscrowd": 0, "bbox": [86, 0, 554, 112], "area": 33420}, {"id": 8554117, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 432, 43], "area": 5687}, {"id": 5660017, "category_id": 199, "iscrowd": 0, "bbox": [0, 18, 640, 462], "area": 155176}], "file_name": "000000301867.png", "image_id": 301867}, {"segments_info": [{"id": 8423058, "category_id": 25, "iscrowd": 0, "bbox": [184, 124, 363, 263], "area": 44341}, {"id": 3879717, "category_id": 130, "iscrowd": 0, "bbox": [464, 0, 42, 38], "area": 1322}, {"id": 8553612, "category_id": 184, "iscrowd": 0, "bbox": [0, 215, 108, 265], "area": 7978}, {"id": 12571354, "category_id": 198, "iscrowd": 0, "bbox": [0, 339, 640, 141], "area": 51088}, {"id": 3159094, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 440], "area": 202186}], "file_name": "000000301981.png", "image_id": 301981}, {"segments_info": [{"id": 593709, "category_id": 62, "iscrowd": 0, "bbox": [390, 175, 250, 179], "area": 39382}, {"id": 1122637, "category_id": 62, "iscrowd": 0, "bbox": [0, 93, 157, 152], "area": 13042}, {"id": 5391156, "category_id": 72, "iscrowd": 0, "bbox": [436, 1, 102, 87], "area": 8594}, {"id": 7698815, "category_id": 73, "iscrowd": 0, "bbox": [0, 136, 226, 219], "area": 25699}, {"id": 8487035, "category_id": 74, "iscrowd": 0, "bbox": [563, 110, 22, 17], "area": 258}, {"id": 9145224, "category_id": 76, "iscrowd": 0, "bbox": [419, 91, 136, 37], "area": 3178}, {"id": 606899, "category_id": 84, "iscrowd": 0, "bbox": [187, 17, 21, 53], "area": 823}, {"id": 5665426, "category_id": 84, "iscrowd": 0, "bbox": [136, 19, 9, 47], "area": 180}, {"id": 4744803, "category_id": 84, "iscrowd": 0, "bbox": [175, 113, 126, 39], "area": 2897}, {"id": 4349054, "category_id": 84, "iscrowd": 0, "bbox": [177, 17, 14, 51], "area": 367}, {"id": 593673, "category_id": 84, "iscrowd": 0, "bbox": [157, 97, 17, 46], "area": 474}, {"id": 5665429, "category_id": 84, "iscrowd": 0, "bbox": [139, 18, 10, 48], "area": 206}, {"id": 2042697, "category_id": 84, "iscrowd": 0, "bbox": [1, 2, 102, 40], "area": 3309}, {"id": 2569289, "category_id": 84, "iscrowd": 0, "bbox": [15, 44, 98, 67], "area": 4686}, {"id": 8560568, "category_id": 84, "iscrowd": 0, "bbox": [194, 92, 108, 21], "area": 1857}, {"id": 3429197, "category_id": 84, "iscrowd": 0, "bbox": [188, 107, 110, 18], "area": 1293}, {"id": 6186852, "category_id": 84, "iscrowd": 0, "bbox": [163, 13, 15, 56], "area": 573}, {"id": 5863061, "category_id": 84, "iscrowd": 0, "bbox": [109, 22, 17, 44], "area": 436}, {"id": 10985378, "category_id": 84, "iscrowd": 0, "bbox": [196, 265, 207, 92], "area": 15323}, {"id": 3361638, "category_id": 84, "iscrowd": 1, "bbox": [105, 1, 113, 159], "area": 5243}, {"id": 1514280, "category_id": 118, "iscrowd": 0, "bbox": [394, 209, 27, 30], "area": 383}, {"id": 2515111, "category_id": 119, "iscrowd": 0, "bbox": [264, 53, 44, 33], "area": 745}, {"id": 12315384, "category_id": 130, "iscrowd": 0, "bbox": [261, 0, 71, 28], "area": 1457}, {"id": 4217714, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 257, 164], "area": 10890}, {"id": 7174789, "category_id": 189, "iscrowd": 0, "bbox": [0, 101, 614, 258], "area": 19716}, {"id": 10067882, "category_id": 195, "iscrowd": 0, "bbox": [149, 0, 306, 285], "area": 26514}, {"id": 5465459, "category_id": 199, "iscrowd": 0, "bbox": [250, 0, 390, 214], "area": 29391}], "file_name": "000000302030.png", "image_id": 302030}, {"segments_info": [{"id": 8023993, "category_id": 1, "iscrowd": 0, "bbox": [0, 300, 112, 273], "area": 11074}, {"id": 8091520, "category_id": 1, "iscrowd": 0, "bbox": [92, 174, 255, 346], "area": 29206}, {"id": 8225161, "category_id": 1, "iscrowd": 0, "bbox": [246, 141, 39, 55], "area": 846}, {"id": 11644593, "category_id": 39, "iscrowd": 0, "bbox": [168, 348, 123, 56], "area": 1467}, {"id": 6386086, "category_id": 40, "iscrowd": 0, "bbox": [53, 487, 58, 49], "area": 1847}, {"id": 9869980, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 427, 106], "area": 15926}, {"id": 10663368, "category_id": 145, "iscrowd": 0, "bbox": [0, 237, 427, 403], "area": 123433}, {"id": 4475210, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 391, 162], "area": 26679}, {"id": 9738644, "category_id": 185, "iscrowd": 0, "bbox": [0, 82, 427, 191], "area": 58085}, {"id": 8562068, "category_id": 193, "iscrowd": 0, "bbox": [267, 147, 130, 39], "area": 1088}, {"id": 7893092, "category_id": 197, "iscrowd": 0, "bbox": [399, 40, 28, 48], "area": 829}], "file_name": "000000302107.png", "image_id": 302107}, {"segments_info": [{"id": 9470080, "category_id": 21, "iscrowd": 0, "bbox": [555, 184, 38, 37], "area": 582}, {"id": 2172455, "category_id": 21, "iscrowd": 0, "bbox": [105, 232, 281, 139], "area": 22177}, {"id": 6974063, "category_id": 21, "iscrowd": 0, "bbox": [420, 205, 100, 49], "area": 1091}, {"id": 8477519, "category_id": 21, "iscrowd": 0, "bbox": [572, 182, 32, 28], "area": 381}, {"id": 12490377, "category_id": 21, "iscrowd": 0, "bbox": [572, 170, 49, 27], "area": 455}, {"id": 8608588, "category_id": 21, "iscrowd": 0, "bbox": [573, 175, 38, 33], "area": 345}, {"id": 6969686, "category_id": 21, "iscrowd": 0, "bbox": [381, 134, 192, 124], "area": 11393}, {"id": 6255482, "category_id": 21, "iscrowd": 0, "bbox": [192, 223, 291, 111], "area": 15811}, {"id": 3028022, "category_id": 21, "iscrowd": 0, "bbox": [3, 310, 214, 165], "area": 24677}, {"id": 6186089, "category_id": 21, "iscrowd": 0, "bbox": [311, 208, 209, 76], "area": 5626}, {"id": 10326415, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 420, 113], "area": 6268}, {"id": 14336447, "category_id": 181, "iscrowd": 0, "bbox": [374, 33, 35, 44], "area": 1091}, {"id": 9868695, "category_id": 185, "iscrowd": 0, "bbox": [0, 71, 491, 270], "area": 62237}, {"id": 7431780, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 120], "area": 40829}, {"id": 16446706, "category_id": 187, "iscrowd": 0, "bbox": [41, 69, 599, 99], "area": 6617}, {"id": 6647405, "category_id": 190, "iscrowd": 0, "bbox": [390, 251, 216, 229], "area": 6046}, {"id": 5136747, "category_id": 193, "iscrowd": 0, "bbox": [88, 125, 552, 355], "area": 48023}, {"id": 3619128, "category_id": 194, "iscrowd": 0, "bbox": [428, 195, 212, 285], "area": 28757}, {"id": 11773869, "category_id": 199, "iscrowd": 0, "bbox": [259, 0, 250, 136], "area": 11515}], "file_name": "000000302165.png", "image_id": 302165}, {"segments_info": [{"id": 6714501, "category_id": 1, "iscrowd": 0, "bbox": [87, 183, 30, 46], "area": 1104}, {"id": 5137522, "category_id": 1, "iscrowd": 0, "bbox": [84, 143, 42, 59], "area": 1371}, {"id": 5201781, "category_id": 1, "iscrowd": 0, "bbox": [211, 158, 59, 80], "area": 2726}, {"id": 6188407, "category_id": 1, "iscrowd": 0, "bbox": [116, 176, 45, 74], "area": 2286}, {"id": 6057336, "category_id": 1, "iscrowd": 0, "bbox": [88, 223, 64, 57], "area": 2474}, {"id": 6318964, "category_id": 1, "iscrowd": 0, "bbox": [0, 179, 55, 112], "area": 3947}, {"id": 8353638, "category_id": 1, "iscrowd": 0, "bbox": [391, 187, 12, 43], "area": 370}, {"id": 8953524, "category_id": 1, "iscrowd": 0, "bbox": [309, 218, 26, 44], "area": 940}, {"id": 7240843, "category_id": 1, "iscrowd": 0, "bbox": [310, 169, 80, 92], "area": 4176}, {"id": 7904434, "category_id": 25, "iscrowd": 0, "bbox": [134, 106, 136, 297], "area": 21242}, {"id": 14608362, "category_id": 44, "iscrowd": 0, "bbox": [203, 69, 43, 48], "area": 1108}, {"id": 7438219, "category_id": 77, "iscrowd": 0, "bbox": [358, 202, 11, 11], "area": 90}, {"id": 7768745, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 384, 105], "area": 12857}, {"id": 5736611, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 403, 403], "area": 100324}, {"id": 6519419, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 168, 30], "area": 3497}], "file_name": "000000302452.png", "image_id": 302452}, {"segments_info": [{"id": 4800582, "category_id": 1, "iscrowd": 0, "bbox": [1, 307, 70, 63], "area": 2085}, {"id": 5590866, "category_id": 1, "iscrowd": 0, "bbox": [115, 33, 191, 339], "area": 36130}, {"id": 3027304, "category_id": 37, "iscrowd": 0, "bbox": [107, 184, 6, 4], "area": 21}, {"id": 329482, "category_id": 37, "iscrowd": 0, "bbox": [108, 172, 4, 4], "area": 13}, {"id": 1774646, "category_id": 37, "iscrowd": 0, "bbox": [117, 172, 5, 6], "area": 25}, {"id": 4084063, "category_id": 37, "iscrowd": 0, "bbox": [102, 175, 4, 4], "area": 14}, {"id": 4345682, "category_id": 37, "iscrowd": 0, "bbox": [112, 178, 5, 6], "area": 24}, {"id": 2102290, "category_id": 37, "iscrowd": 0, "bbox": [85, 177, 5, 6], "area": 28}, {"id": 3883330, "category_id": 63, "iscrowd": 0, "bbox": [227, 210, 114, 134], "area": 11774}, {"id": 12367558, "category_id": 75, "iscrowd": 0, "bbox": [283, 190, 18, 12], "area": 154}, {"id": 2569031, "category_id": 109, "iscrowd": 0, "bbox": [0, 39, 170, 225], "area": 5801}, {"id": 1579036, "category_id": 112, "iscrowd": 0, "bbox": [24, 57, 131, 181], "area": 14227}, {"id": 9146272, "category_id": 130, "iscrowd": 0, "bbox": [347, 156, 20, 45], "area": 599}, {"id": 4085360, "category_id": 133, "iscrowd": 0, "bbox": [380, 0, 120, 98], "area": 10844}, {"id": 3887214, "category_id": 156, "iscrowd": 0, "bbox": [346, 199, 154, 48], "area": 2528}, {"id": 6189446, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 303, 36], "area": 7021}, {"id": 1512474, "category_id": 189, "iscrowd": 0, "bbox": [0, 151, 138, 147], "area": 6515}, {"id": 1381659, "category_id": 190, "iscrowd": 0, "bbox": [311, 304, 163, 71], "area": 5990}, {"id": 9736608, "category_id": 195, "iscrowd": 0, "bbox": [393, 176, 103, 55], "area": 2061}, {"id": 7436684, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 294], "area": 48144}, {"id": 3686994, "category_id": 200, "iscrowd": 0, "bbox": [0, 235, 376, 140], "area": 17751}], "file_name": "000000302536.png", "image_id": 302536}, {"segments_info": [{"id": 3892631, "category_id": 44, "iscrowd": 0, "bbox": [215, 111, 25, 79], "area": 1370}, {"id": 12104614, "category_id": 44, "iscrowd": 0, "bbox": [426, 263, 55, 112], "area": 4412}, {"id": 13358818, "category_id": 81, "iscrowd": 0, "bbox": [171, 198, 147, 67], "area": 7373}, {"id": 4147776, "category_id": 133, "iscrowd": 0, "bbox": [164, 0, 336, 142], "area": 35707}, {"id": 5461586, "category_id": 197, "iscrowd": 0, "bbox": [0, 106, 500, 269], "area": 97555}, {"id": 7896413, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 372], "area": 40863}], "file_name": "000000302760.png", "image_id": 302760}, {"segments_info": [{"id": 7434609, "category_id": 1, "iscrowd": 0, "bbox": [0, 56, 388, 344], "area": 75766}, {"id": 1644825, "category_id": 77, "iscrowd": 0, "bbox": [230, 87, 93, 226], "area": 16372}, {"id": 5395026, "category_id": 180, "iscrowd": 0, "bbox": [349, 155, 46, 197], "area": 5453}, {"id": 1710618, "category_id": 188, "iscrowd": 0, "bbox": [445, 124, 55, 227], "area": 11243}, {"id": 1776411, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 400], "area": 80728}], "file_name": "000000302882.png", "image_id": 302882}, {"segments_info": [{"id": 3026992, "category_id": 1, "iscrowd": 0, "bbox": [475, 34, 52, 44], "area": 1295}, {"id": 2896188, "category_id": 1, "iscrowd": 0, "bbox": [241, 139, 223, 143], "area": 9489}, {"id": 12570089, "category_id": 42, "iscrowd": 0, "bbox": [273, 234, 80, 111], "area": 5363}, {"id": 13619910, "category_id": 42, "iscrowd": 0, "bbox": [523, 54, 39, 21], "area": 396}, {"id": 10132619, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 256415}], "file_name": "000000302990.png", "image_id": 302990}, {"segments_info": [{"id": 526085, "category_id": 1, "iscrowd": 0, "bbox": [229, 195, 13, 13], "area": 114}, {"id": 920842, "category_id": 1, "iscrowd": 0, "bbox": [182, 171, 21, 44], "area": 675}, {"id": 1642765, "category_id": 1, "iscrowd": 0, "bbox": [479, 147, 30, 61], "area": 1600}, {"id": 1511499, "category_id": 3, "iscrowd": 0, "bbox": [591, 203, 49, 52], "area": 1771}, {"id": 6183527, "category_id": 6, "iscrowd": 0, "bbox": [18, 56, 609, 305], "area": 124209}, {"id": 4014664, "category_id": 149, "iscrowd": 0, "bbox": [0, 213, 640, 267], "area": 45883}, {"id": 1515032, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 197], "area": 18578}, {"id": 12477738, "category_id": 187, "iscrowd": 0, "bbox": [47, 0, 593, 142], "area": 46437}, {"id": 7831424, "category_id": 191, "iscrowd": 0, "bbox": [0, 267, 625, 213], "area": 64938}, {"id": 5138300, "category_id": 197, "iscrowd": 0, "bbox": [592, 163, 48, 41], "area": 1786}], "file_name": "000000303305.png", "image_id": 303305}, {"segments_info": [{"id": 5459412, "category_id": 1, "iscrowd": 0, "bbox": [41, 16, 120, 293], "area": 11669}, {"id": 5264983, "category_id": 1, "iscrowd": 0, "bbox": [172, 259, 13, 38], "area": 238}, {"id": 5788875, "category_id": 1, "iscrowd": 0, "bbox": [196, 37, 137, 271], "area": 10703}, {"id": 3357251, "category_id": 19, "iscrowd": 0, "bbox": [210, 284, 19, 50], "area": 647}, {"id": 3620679, "category_id": 19, "iscrowd": 0, "bbox": [145, 244, 31, 90], "area": 1178}, {"id": 3817804, "category_id": 19, "iscrowd": 0, "bbox": [309, 255, 24, 80], "area": 1162}, {"id": 3554119, "category_id": 19, "iscrowd": 0, "bbox": [183, 186, 143, 263], "area": 20159}, {"id": 3685703, "category_id": 19, "iscrowd": 0, "bbox": [4, 160, 173, 293], "area": 31216}, {"id": 7244455, "category_id": 125, "iscrowd": 0, "bbox": [0, 283, 333, 217], "area": 42625}, {"id": 15316881, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 333, 119], "area": 26223}, {"id": 13358301, "category_id": 197, "iscrowd": 0, "bbox": [0, 64, 333, 236], "area": 19026}], "file_name": "000000303499.png", "image_id": 303499}, {"segments_info": [{"id": 1514018, "category_id": 1, "iscrowd": 0, "bbox": [257, 81, 46, 83], "area": 2293}, {"id": 657703, "category_id": 1, "iscrowd": 0, "bbox": [197, 98, 55, 68], "area": 2296}, {"id": 2697517, "category_id": 1, "iscrowd": 0, "bbox": [470, 71, 44, 139], "area": 2994}, {"id": 987432, "category_id": 1, "iscrowd": 0, "bbox": [563, 110, 75, 165], "area": 6442}, {"id": 4535081, "category_id": 1, "iscrowd": 0, "bbox": [426, 74, 54, 119], "area": 2743}, {"id": 789260, "category_id": 1, "iscrowd": 0, "bbox": [19, 26, 125, 218], "area": 17182}, {"id": 5124939, "category_id": 1, "iscrowd": 0, "bbox": [167, 87, 34, 85], "area": 1527}, {"id": 987415, "category_id": 1, "iscrowd": 0, "bbox": [573, 78, 34, 63], "area": 1321}, {"id": 1911091, "category_id": 1, "iscrowd": 0, "bbox": [0, 103, 50, 208], "area": 4107}, {"id": 3682393, "category_id": 1, "iscrowd": 0, "bbox": [305, 98, 35, 66], "area": 1432}, {"id": 2041127, "category_id": 1, "iscrowd": 0, "bbox": [541, 58, 51, 51], "area": 708}, {"id": 2107443, "category_id": 1, "iscrowd": 0, "bbox": [123, 54, 41, 151], "area": 3262}, {"id": 1907493, "category_id": 1, "iscrowd": 0, "bbox": [522, 78, 51, 183], "area": 6169}, {"id": 2632239, "category_id": 1, "iscrowd": 1, "bbox": [94, 56, 489, 190], "area": 12259}, {"id": 6248532, "category_id": 3, "iscrowd": 0, "bbox": [346, 93, 19, 16], "area": 101}, {"id": 4734544, "category_id": 3, "iscrowd": 0, "bbox": [334, 83, 9, 4], "area": 30}, {"id": 11973027, "category_id": 3, "iscrowd": 0, "bbox": [213, 86, 36, 22], "area": 175}, {"id": 6643279, "category_id": 3, "iscrowd": 0, "bbox": [207, 88, 41, 33], "area": 618}, {"id": 7038299, "category_id": 3, "iscrowd": 0, "bbox": [299, 90, 25, 16], "area": 138}, {"id": 4473921, "category_id": 3, "iscrowd": 0, "bbox": [342, 87, 43, 19], "area": 211}, {"id": 7631980, "category_id": 3, "iscrowd": 0, "bbox": [340, 91, 7, 5], "area": 24}, {"id": 4405038, "category_id": 3, "iscrowd": 0, "bbox": [426, 85, 19, 28], "area": 297}, {"id": 394288, "category_id": 27, "iscrowd": 0, "bbox": [440, 98, 28, 52], "area": 960}, {"id": 4275005, "category_id": 31, "iscrowd": 0, "bbox": [9, 163, 37, 59], "area": 1225}, {"id": 1512468, "category_id": 31, "iscrowd": 0, "bbox": [295, 103, 17, 37], "area": 287}, {"id": 591885, "category_id": 31, "iscrowd": 0, "bbox": [192, 152, 15, 13], "area": 158}, {"id": 3284786, "category_id": 31, "iscrowd": 0, "bbox": [180, 110, 15, 40], "area": 141}, {"id": 2106681, "category_id": 31, "iscrowd": 0, "bbox": [0, 201, 44, 35], "area": 656}, {"id": 1648781, "category_id": 53, "iscrowd": 0, "bbox": [292, 354, 147, 72], "area": 6252}, {"id": 2965128, "category_id": 53, "iscrowd": 0, "bbox": [19, 289, 116, 52], "area": 3564}, {"id": 1316989, "category_id": 53, "iscrowd": 0, "bbox": [326, 305, 19, 23], "area": 310}, {"id": 1911654, "category_id": 53, "iscrowd": 0, "bbox": [0, 344, 71, 75], "area": 2519}, {"id": 1580936, "category_id": 53, "iscrowd": 0, "bbox": [318, 338, 94, 59], "area": 3036}, {"id": 1979012, "category_id": 53, "iscrowd": 0, "bbox": [343, 313, 21, 19], "area": 241}, {"id": 1854367, "category_id": 53, "iscrowd": 0, "bbox": [504, 308, 136, 66], "area": 6314}, {"id": 1912203, "category_id": 53, "iscrowd": 0, "bbox": [388, 276, 100, 57], "area": 3916}, {"id": 1451391, "category_id": 53, "iscrowd": 0, "bbox": [411, 326, 182, 100], "area": 11487}, {"id": 1520032, "category_id": 53, "iscrowd": 0, "bbox": [433, 380, 28, 29], "area": 605}, {"id": 1125525, "category_id": 53, "iscrowd": 0, "bbox": [566, 380, 74, 39], "area": 2228}, {"id": 1270371, "category_id": 53, "iscrowd": 0, "bbox": [41, 340, 154, 82], "area": 8497}, {"id": 528236, "category_id": 53, "iscrowd": 0, "bbox": [567, 325, 19, 19], "area": 280}, {"id": 1913990, "category_id": 53, "iscrowd": 1, "bbox": [7, 275, 632, 151], "area": 7361}, {"id": 1721248, "category_id": 55, "iscrowd": 0, "bbox": [299, 172, 5, 6], "area": 19}, {"id": 4348310, "category_id": 55, "iscrowd": 0, "bbox": [291, 163, 50, 24], "area": 896}, {"id": 1985704, "category_id": 55, "iscrowd": 0, "bbox": [163, 221, 59, 22], "area": 923}, {"id": 2379694, "category_id": 55, "iscrowd": 0, "bbox": [212, 215, 13, 8], "area": 73}, {"id": 2906548, "category_id": 55, "iscrowd": 0, "bbox": [213, 207, 30, 16], "area": 260}, {"id": 1718167, "category_id": 55, "iscrowd": 0, "bbox": [281, 182, 6, 2], "area": 10}, {"id": 2052018, "category_id": 55, "iscrowd": 0, "bbox": [192, 199, 60, 10], "area": 434}, {"id": 2047633, "category_id": 55, "iscrowd": 0, "bbox": [260, 160, 46, 24], "area": 566}, {"id": 1190792, "category_id": 55, "iscrowd": 0, "bbox": [267, 173, 7, 9], "area": 47}, {"id": 1127837, "category_id": 55, "iscrowd": 0, "bbox": [200, 213, 11, 9], "area": 66}, {"id": 728688, "category_id": 55, "iscrowd": 0, "bbox": [272, 173, 4, 5], "area": 13}, {"id": 1653143, "category_id": 55, "iscrowd": 0, "bbox": [279, 172, 6, 8], "area": 31}, {"id": 1127835, "category_id": 55, "iscrowd": 0, "bbox": [282, 174, 10, 8], "area": 58}, {"id": 2640786, "category_id": 55, "iscrowd": 1, "bbox": [160, 162, 162, 82], "area": 5354}, {"id": 2110284, "category_id": 100, "iscrowd": 0, "bbox": [0, 277, 300, 149], "area": 9917}, {"id": 1725538, "category_id": 122, "iscrowd": 0, "bbox": [82, 139, 558, 287], "area": 19840}, {"id": 3028797, "category_id": 125, "iscrowd": 0, "bbox": [0, 167, 640, 175], "area": 6701}, {"id": 3029306, "category_id": 149, "iscrowd": 0, "bbox": [166, 102, 375, 160], "area": 293}, {"id": 8289145, "category_id": 151, "iscrowd": 0, "bbox": [508, 0, 132, 51], "area": 3926}, {"id": 5133905, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 224, 94], "area": 4331}, {"id": 14275012, "category_id": 187, "iscrowd": 0, "bbox": [16, 0, 529, 102], "area": 31575}, {"id": 2830127, "category_id": 191, "iscrowd": 0, "bbox": [423, 136, 10, 20], "area": 157}, {"id": 11250338, "category_id": 195, "iscrowd": 0, "bbox": [494, 270, 44, 28], "area": 570}, {"id": 3359811, "category_id": 196, "iscrowd": 0, "bbox": [332, 117, 78, 39], "area": 1854}, {"id": 5063482, "category_id": 197, "iscrowd": 0, "bbox": [203, 58, 184, 47], "area": 4577}], "file_name": "000000303566.png", "image_id": 303566}, {"segments_info": [{"id": 6317931, "category_id": 1, "iscrowd": 0, "bbox": [395, 95, 68, 163], "area": 5240}, {"id": 11121877, "category_id": 1, "iscrowd": 0, "bbox": [10, 110, 74, 150], "area": 3658}, {"id": 4343632, "category_id": 1, "iscrowd": 0, "bbox": [217, 70, 69, 194], "area": 6315}, {"id": 5072253, "category_id": 19, "iscrowd": 0, "bbox": [341, 163, 210, 138], "area": 11796}, {"id": 7115697, "category_id": 19, "iscrowd": 0, "bbox": [3, 161, 124, 118], "area": 5263}, {"id": 3095630, "category_id": 19, "iscrowd": 0, "bbox": [72, 162, 315, 197], "area": 26096}, {"id": 11319735, "category_id": 62, "iscrowd": 0, "bbox": [584, 163, 34, 38], "area": 779}, {"id": 5994101, "category_id": 133, "iscrowd": 0, "bbox": [0, 97, 640, 207], "area": 51132}, {"id": 2832950, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 241], "area": 64400}, {"id": 4149073, "category_id": 193, "iscrowd": 0, "bbox": [0, 275, 460, 64], "area": 512}, {"id": 5002078, "category_id": 194, "iscrowd": 0, "bbox": [0, 321, 640, 105], "area": 57035}], "file_name": "000000303653.png", "image_id": 303653}, {"segments_info": [{"id": 4345695, "category_id": 1, "iscrowd": 0, "bbox": [341, 425, 49, 101], "area": 1497}, {"id": 3827600, "category_id": 1, "iscrowd": 0, "bbox": [259, 282, 23, 31], "area": 421}, {"id": 2835827, "category_id": 1, "iscrowd": 0, "bbox": [0, 420, 20, 36], "area": 586}, {"id": 6579319, "category_id": 1, "iscrowd": 0, "bbox": [229, 376, 34, 44], "area": 874}, {"id": 3885915, "category_id": 1, "iscrowd": 0, "bbox": [56, 428, 63, 113], "area": 3682}, {"id": 4021631, "category_id": 1, "iscrowd": 0, "bbox": [292, 294, 44, 40], "area": 597}, {"id": 4078918, "category_id": 1, "iscrowd": 0, "bbox": [274, 421, 75, 102], "area": 1717}, {"id": 2567473, "category_id": 1, "iscrowd": 0, "bbox": [319, 197, 32, 30], "area": 414}, {"id": 1319249, "category_id": 1, "iscrowd": 0, "bbox": [284, 363, 23, 31], "area": 385}, {"id": 7567758, "category_id": 1, "iscrowd": 0, "bbox": [89, 327, 170, 306], "area": 22060}, {"id": 1976886, "category_id": 1, "iscrowd": 0, "bbox": [52, 320, 46, 50], "area": 1114}, {"id": 7636897, "category_id": 1, "iscrowd": 0, "bbox": [129, 330, 27, 33], "area": 487}, {"id": 5860247, "category_id": 1, "iscrowd": 0, "bbox": [24, 423, 29, 32], "area": 491}, {"id": 1910586, "category_id": 1, "iscrowd": 1, "bbox": [0, 42, 427, 431], "area": 140816}, {"id": 921874, "category_id": 27, "iscrowd": 0, "bbox": [11, 507, 45, 32], "area": 1270}, {"id": 4343658, "category_id": 27, "iscrowd": 0, "bbox": [117, 499, 65, 43], "area": 2064}, {"id": 2800050, "category_id": 37, "iscrowd": 0, "bbox": [231, 86, 10, 10], "area": 85}, {"id": 7438240, "category_id": 43, "iscrowd": 0, "bbox": [89, 320, 22, 63], "area": 707}, {"id": 1582125, "category_id": 62, "iscrowd": 0, "bbox": [48, 464, 21, 38], "area": 349}, {"id": 1251613, "category_id": 62, "iscrowd": 0, "bbox": [156, 480, 20, 33], "area": 382}, {"id": 1320302, "category_id": 62, "iscrowd": 0, "bbox": [338, 423, 26, 9], "area": 184}, {"id": 2174784, "category_id": 62, "iscrowd": 0, "bbox": [344, 449, 9, 9], "area": 53}, {"id": 2568249, "category_id": 62, "iscrowd": 0, "bbox": [233, 463, 37, 73], "area": 910}, {"id": 1384491, "category_id": 62, "iscrowd": 0, "bbox": [334, 458, 16, 33], "area": 289}, {"id": 2765365, "category_id": 73, "iscrowd": 0, "bbox": [379, 448, 33, 17], "area": 359}, {"id": 9400676, "category_id": 145, "iscrowd": 0, "bbox": [0, 509, 427, 131], "area": 37458}, {"id": 13950698, "category_id": 168, "iscrowd": 0, "bbox": [223, 463, 13, 23], "area": 160}, {"id": 2040613, "category_id": 189, "iscrowd": 0, "bbox": [0, 415, 427, 124], "area": 17226}], "file_name": "000000303713.png", "image_id": 303713}, {"segments_info": [{"id": 6907230, "category_id": 1, "iscrowd": 0, "bbox": [155, 191, 21, 64], "area": 814}, {"id": 3685981, "category_id": 1, "iscrowd": 0, "bbox": [252, 201, 29, 71], "area": 948}, {"id": 10067375, "category_id": 1, "iscrowd": 0, "bbox": [173, 191, 23, 59], "area": 657}, {"id": 7174033, "category_id": 1, "iscrowd": 0, "bbox": [12, 185, 14, 32], "area": 289}, {"id": 7236997, "category_id": 1, "iscrowd": 0, "bbox": [311, 201, 28, 76], "area": 1019}, {"id": 11313824, "category_id": 1, "iscrowd": 0, "bbox": [268, 206, 6, 24], "area": 88}, {"id": 7630455, "category_id": 1, "iscrowd": 0, "bbox": [290, 202, 21, 75], "area": 959}, {"id": 10000043, "category_id": 1, "iscrowd": 0, "bbox": [198, 186, 30, 72], "area": 676}, {"id": 5132402, "category_id": 1, "iscrowd": 0, "bbox": [190, 196, 26, 70], "area": 827}, {"id": 9343402, "category_id": 1, "iscrowd": 0, "bbox": [182, 181, 16, 63], "area": 323}, {"id": 4868232, "category_id": 1, "iscrowd": 0, "bbox": [240, 195, 15, 63], "area": 647}, {"id": 5264497, "category_id": 1, "iscrowd": 0, "bbox": [37, 181, 15, 19], "area": 181}, {"id": 4340542, "category_id": 3, "iscrowd": 0, "bbox": [5, 198, 129, 78], "area": 7637}, {"id": 6379609, "category_id": 3, "iscrowd": 0, "bbox": [111, 170, 11, 6], "area": 49}, {"id": 5861762, "category_id": 6, "iscrowd": 0, "bbox": [313, 66, 167, 245], "area": 30760}, {"id": 3421762, "category_id": 27, "iscrowd": 0, "bbox": [162, 200, 12, 18], "area": 117}, {"id": 4012612, "category_id": 31, "iscrowd": 0, "bbox": [211, 224, 16, 23], "area": 268}, {"id": 10922677, "category_id": 31, "iscrowd": 0, "bbox": [188, 219, 8, 15], "area": 68}, {"id": 11568999, "category_id": 92, "iscrowd": 0, "bbox": [151, 106, 64, 42], "area": 931}, {"id": 8618628, "category_id": 149, "iscrowd": 0, "bbox": [0, 176, 480, 368], "area": 118221}, {"id": 2437938, "category_id": 184, "iscrowd": 0, "bbox": [0, 18, 360, 227], "area": 28741}, {"id": 7962758, "category_id": 191, "iscrowd": 0, "bbox": [0, 163, 480, 477], "area": 57408}, {"id": 8945526, "category_id": 192, "iscrowd": 0, "bbox": [115, 0, 169, 69], "area": 8296}, {"id": 10334140, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 166], "area": 37367}, {"id": 7767197, "category_id": 199, "iscrowd": 0, "bbox": [161, 159, 181, 113], "area": 3666}], "file_name": "000000303818.png", "image_id": 303818}, {"segments_info": [{"id": 7437437, "category_id": 1, "iscrowd": 0, "bbox": [115, 201, 8, 14], "area": 76}, {"id": 8684943, "category_id": 1, "iscrowd": 0, "bbox": [18, 209, 7, 7], "area": 34}, {"id": 10059889, "category_id": 1, "iscrowd": 0, "bbox": [499, 184, 16, 24], "area": 287}, {"id": 5658201, "category_id": 1, "iscrowd": 0, "bbox": [603, 201, 35, 97], "area": 712}, {"id": 5987171, "category_id": 1, "iscrowd": 0, "bbox": [614, 217, 20, 80], "area": 656}, {"id": 7691095, "category_id": 1, "iscrowd": 0, "bbox": [567, 207, 31, 88], "area": 1249}, {"id": 6709878, "category_id": 1, "iscrowd": 0, "bbox": [131, 200, 11, 19], "area": 142}, {"id": 5655368, "category_id": 7, "iscrowd": 0, "bbox": [2, 120, 583, 224], "area": 95056}, {"id": 4275517, "category_id": 31, "iscrowd": 0, "bbox": [621, 242, 14, 21], "area": 187}, {"id": 7700107, "category_id": 125, "iscrowd": 0, "bbox": [0, 320, 481, 111], "area": 18137}, {"id": 5528421, "category_id": 144, "iscrowd": 0, "bbox": [576, 290, 64, 70], "area": 3567}, {"id": 4211531, "category_id": 147, "iscrowd": 0, "bbox": [3, 297, 637, 134], "area": 9284}, {"id": 3623487, "category_id": 184, "iscrowd": 0, "bbox": [402, 0, 238, 295], "area": 30960}, {"id": 5727355, "category_id": 185, "iscrowd": 0, "bbox": [0, 245, 640, 186], "area": 42274}, {"id": 10855328, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 583, 241], "area": 64533}, {"id": 1249297, "category_id": 199, "iscrowd": 0, "bbox": [561, 325, 23, 18], "area": 277}], "file_name": "000000303863.png", "image_id": 303863}, {"segments_info": [{"id": 4341311, "category_id": 1, "iscrowd": 0, "bbox": [307, 91, 228, 282], "area": 28178}, {"id": 6381910, "category_id": 1, "iscrowd": 0, "bbox": [88, 47, 241, 363], "area": 41699}, {"id": 5991016, "category_id": 15, "iscrowd": 0, "bbox": [618, 32, 22, 24], "area": 379}, {"id": 5662822, "category_id": 15, "iscrowd": 0, "bbox": [461, 18, 152, 50], "area": 2888}, {"id": 10921615, "category_id": 54, "iscrowd": 0, "bbox": [233, 262, 54, 17], "area": 480}, {"id": 4938594, "category_id": 54, "iscrowd": 0, "bbox": [390, 187, 54, 35], "area": 874}, {"id": 9206893, "category_id": 100, "iscrowd": 0, "bbox": [364, 243, 98, 50], "area": 2647}, {"id": 6909553, "category_id": 128, "iscrowd": 0, "bbox": [370, 0, 38, 33], "area": 888}, {"id": 7245954, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 632, 58], "area": 11681}, {"id": 11708573, "category_id": 191, "iscrowd": 0, "bbox": [0, 181, 640, 193], "area": 39323}, {"id": 6983291, "category_id": 193, "iscrowd": 0, "bbox": [0, 34, 640, 393], "area": 83146}, {"id": 12437962, "category_id": 197, "iscrowd": 0, "bbox": [50, 0, 590, 52], "area": 7648}, {"id": 7961464, "category_id": 198, "iscrowd": 0, "bbox": [0, 33, 640, 394], "area": 43556}], "file_name": "000000303893.png", "image_id": 303893}, {"segments_info": [{"id": 6311489, "category_id": 3, "iscrowd": 0, "bbox": [399, 37, 13, 7], "area": 80}, {"id": 7558724, "category_id": 9, "iscrowd": 0, "bbox": [344, 61, 56, 20], "area": 749}, {"id": 5062971, "category_id": 9, "iscrowd": 0, "bbox": [270, 62, 89, 23], "area": 1340}, {"id": 4272945, "category_id": 9, "iscrowd": 0, "bbox": [396, 66, 45, 14], "area": 493}, {"id": 3945782, "category_id": 15, "iscrowd": 0, "bbox": [93, 204, 488, 223], "area": 93005}, {"id": 3354416, "category_id": 15, "iscrowd": 0, "bbox": [564, 234, 76, 187], "area": 8431}, {"id": 13420225, "category_id": 155, "iscrowd": 0, "bbox": [0, 64, 640, 210], "area": 68179}, {"id": 10453102, "category_id": 166, "iscrowd": 0, "bbox": [0, 9, 187, 48], "area": 7618}, {"id": 3092266, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 629, 57], "area": 21330}, {"id": 4273970, "category_id": 185, "iscrowd": 0, "bbox": [511, 37, 15, 15], "area": 178}, {"id": 7762030, "category_id": 190, "iscrowd": 0, "bbox": [0, 219, 640, 208], "area": 23646}, {"id": 5392965, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 171], "area": 12777}, {"id": 4142384, "category_id": 199, "iscrowd": 0, "bbox": [0, 47, 640, 45], "area": 14985}], "file_name": "000000303908.png", "image_id": 303908}, {"segments_info": [{"id": 2572993, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 127, 141], "area": 12000}, {"id": 263791, "category_id": 1, "iscrowd": 0, "bbox": [420, 84, 82, 103], "area": 6242}, {"id": 7962306, "category_id": 1, "iscrowd": 0, "bbox": [547, 69, 93, 342], "area": 23909}, {"id": 2897850, "category_id": 1, "iscrowd": 0, "bbox": [274, 93, 123, 312], "area": 15039}, {"id": 2902931, "category_id": 41, "iscrowd": 0, "bbox": [276, 259, 68, 141], "area": 2292}, {"id": 3822756, "category_id": 92, "iscrowd": 0, "bbox": [0, 82, 13, 47], "area": 185}, {"id": 3893206, "category_id": 100, "iscrowd": 0, "bbox": [93, 47, 394, 97], "area": 6141}, {"id": 529270, "category_id": 107, "iscrowd": 0, "bbox": [383, 175, 122, 20], "area": 1295}, {"id": 7840727, "category_id": 154, "iscrowd": 0, "bbox": [0, 73, 269, 80], "area": 4569}, {"id": 5785969, "category_id": 155, "iscrowd": 0, "bbox": [233, 65, 31, 20], "area": 411}, {"id": 8618124, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 361, 214], "area": 30339}, {"id": 7383521, "category_id": 177, "iscrowd": 0, "bbox": [0, 188, 640, 230], "area": 95896}, {"id": 5721501, "category_id": 181, "iscrowd": 0, "bbox": [350, 0, 290, 197], "area": 27067}, {"id": 5067923, "category_id": 184, "iscrowd": 0, "bbox": [29, 0, 243, 133], "area": 4680}, {"id": 9728897, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 255, 86], "area": 10574}, {"id": 7765957, "category_id": 191, "iscrowd": 0, "bbox": [0, 383, 640, 35], "area": 16033}, {"id": 463282, "category_id": 195, "iscrowd": 0, "bbox": [391, 0, 73, 42], "area": 2978}, {"id": 4475831, "category_id": 196, "iscrowd": 0, "bbox": [303, 155, 17, 16], "area": 144}, {"id": 13156319, "category_id": 199, "iscrowd": 0, "bbox": [362, 112, 20, 37], "area": 524}], "file_name": "000000304180.png", "image_id": 304180}, {"segments_info": [{"id": 3557212, "category_id": 19, "iscrowd": 0, "bbox": [273, 101, 146, 274], "area": 20805}, {"id": 6991778, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 409], "area": 117244}, {"id": 11655898, "category_id": 193, "iscrowd": 0, "bbox": [0, 154, 640, 273], "area": 33915}, {"id": 10729412, "category_id": 194, "iscrowd": 0, "bbox": [0, 219, 640, 208], "area": 77474}], "file_name": "000000304291.png", "image_id": 304291}, {"segments_info": [{"id": 3881292, "category_id": 1, "iscrowd": 0, "bbox": [449, 309, 28, 56], "area": 879}, {"id": 4741208, "category_id": 7, "iscrowd": 0, "bbox": [245, 234, 162, 164], "area": 18971}, {"id": 1710104, "category_id": 31, "iscrowd": 0, "bbox": [446, 338, 10, 17], "area": 133}, {"id": 6581614, "category_id": 125, "iscrowd": 0, "bbox": [45, 219, 178, 208], "area": 10143}, {"id": 5723731, "category_id": 144, "iscrowd": 0, "bbox": [404, 322, 215, 105], "area": 10478}, {"id": 5593435, "category_id": 147, "iscrowd": 0, "bbox": [156, 215, 286, 212], "area": 20538}, {"id": 2637879, "category_id": 184, "iscrowd": 0, "bbox": [0, 45, 640, 247], "area": 47579}, {"id": 9215134, "category_id": 185, "iscrowd": 0, "bbox": [337, 233, 225, 150], "area": 7751}, {"id": 11573119, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 187], "area": 80222}, {"id": 5203820, "category_id": 192, "iscrowd": 0, "bbox": [0, 157, 241, 270], "area": 36871}, {"id": 6514017, "category_id": 197, "iscrowd": 0, "bbox": [116, 83, 524, 344], "area": 35369}, {"id": 7960432, "category_id": 199, "iscrowd": 0, "bbox": [304, 235, 202, 126], "area": 4122}], "file_name": "000000304365.png", "image_id": 304365}, {"segments_info": [{"id": 13094601, "category_id": 85, "iscrowd": 0, "bbox": [215, 139, 62, 62], "area": 2793}, {"id": 9868686, "category_id": 85, "iscrowd": 0, "bbox": [101, 151, 40, 82], "area": 2241}, {"id": 11703416, "category_id": 185, "iscrowd": 0, "bbox": [185, 32, 104, 66], "area": 1864}, {"id": 14527617, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 425, 390], "area": 81861}, {"id": 11713484, "category_id": 197, "iscrowd": 0, "bbox": [0, 15, 425, 625], "area": 183152}], "file_name": "000000304396.png", "image_id": 304396}, {"segments_info": [{"id": 9466990, "category_id": 1, "iscrowd": 0, "bbox": [501, 154, 20, 65], "area": 396}, {"id": 8739656, "category_id": 1, "iscrowd": 0, "bbox": [443, 175, 51, 64], "area": 1705}, {"id": 10584430, "category_id": 1, "iscrowd": 0, "bbox": [362, 123, 37, 118], "area": 2724}, {"id": 8809827, "category_id": 1, "iscrowd": 0, "bbox": [16, 53, 32, 31], "area": 615}, {"id": 10058346, "category_id": 1, "iscrowd": 0, "bbox": [399, 121, 40, 117], "area": 2502}, {"id": 3942686, "category_id": 1, "iscrowd": 0, "bbox": [159, 171, 48, 73], "area": 2075}, {"id": 4670285, "category_id": 1, "iscrowd": 0, "bbox": [0, 168, 99, 153], "area": 8102}, {"id": 6842478, "category_id": 1, "iscrowd": 0, "bbox": [169, 91, 173, 221], "area": 11462}, {"id": 10843996, "category_id": 1, "iscrowd": 0, "bbox": [599, 124, 41, 109], "area": 2216}, {"id": 10450790, "category_id": 1, "iscrowd": 0, "bbox": [477, 161, 41, 77], "area": 1698}, {"id": 10911342, "category_id": 1, "iscrowd": 0, "bbox": [529, 159, 50, 78], "area": 1804}, {"id": 2236455, "category_id": 1, "iscrowd": 0, "bbox": [287, 61, 27, 27], "area": 473}, {"id": 8417910, "category_id": 1, "iscrowd": 0, "bbox": [201, 59, 24, 26], "area": 421}, {"id": 6838094, "category_id": 1, "iscrowd": 1, "bbox": [0, 17, 605, 235], "area": 34186}, {"id": 13746840, "category_id": 28, "iscrowd": 0, "bbox": [132, 0, 151, 24], "area": 2463}, {"id": 11180146, "category_id": 28, "iscrowd": 0, "bbox": [0, 0, 108, 52], "area": 2020}, {"id": 8878959, "category_id": 39, "iscrowd": 0, "bbox": [249, 124, 58, 52], "area": 518}, {"id": 7373212, "category_id": 40, "iscrowd": 0, "bbox": [94, 213, 33, 31], "area": 592}, {"id": 792592, "category_id": 112, "iscrowd": 0, "bbox": [627, 101, 13, 54], "area": 612}, {"id": 7647124, "category_id": 145, "iscrowd": 0, "bbox": [0, 217, 640, 211], "area": 72217}, {"id": 4607055, "category_id": 161, "iscrowd": 0, "bbox": [340, 118, 38, 24], "area": 575}, {"id": 2503235, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 640, 250], "area": 35314}, {"id": 1918788, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 613, 150], "area": 38034}, {"id": 4013342, "category_id": 186, "iscrowd": 0, "bbox": [0, 133, 559, 26], "area": 5354}, {"id": 8034182, "category_id": 193, "iscrowd": 0, "bbox": [454, 124, 22, 16], "area": 248}, {"id": 11255262, "category_id": 194, "iscrowd": 0, "bbox": [0, 286, 640, 87], "area": 39397}, {"id": 5589548, "category_id": 197, "iscrowd": 0, "bbox": [76, 0, 247, 42], "area": 1947}, {"id": 5521465, "category_id": 199, "iscrowd": 0, "bbox": [170, 154, 470, 90], "area": 889}], "file_name": "000000304404.png", "image_id": 304404}, {"segments_info": [{"id": 6119528, "category_id": 33, "iscrowd": 0, "bbox": [1, 2, 639, 520], "area": 318202}, {"id": 15527149, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 522], "area": 15711}], "file_name": "000000304545.png", "image_id": 304545}, {"segments_info": [{"id": 1843233, "category_id": 17, "iscrowd": 0, "bbox": [0, 101, 452, 320], "area": 71200}, {"id": 7709610, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 200366}], "file_name": "000000304560.png", "image_id": 304560}, {"segments_info": [{"id": 1120030, "category_id": 1, "iscrowd": 0, "bbox": [94, 379, 31, 73], "area": 926}, {"id": 2632496, "category_id": 1, "iscrowd": 0, "bbox": [79, 349, 3, 6], "area": 14}, {"id": 1645601, "category_id": 1, "iscrowd": 0, "bbox": [176, 404, 20, 15], "area": 178}, {"id": 3622485, "category_id": 1, "iscrowd": 0, "bbox": [310, 353, 4, 3], "area": 8}, {"id": 3957631, "category_id": 1, "iscrowd": 0, "bbox": [241, 347, 5, 10], "area": 31}, {"id": 2702152, "category_id": 1, "iscrowd": 0, "bbox": [289, 354, 4, 3], "area": 7}, {"id": 5139589, "category_id": 42, "iscrowd": 0, "bbox": [242, 356, 6, 2], "area": 7}, {"id": 2566957, "category_id": 42, "iscrowd": 0, "bbox": [75, 352, 4, 3], "area": 8}, {"id": 660768, "category_id": 42, "iscrowd": 0, "bbox": [77, 391, 57, 40], "area": 595}, {"id": 856084, "category_id": 154, "iscrowd": 0, "bbox": [0, 420, 428, 220], "area": 83814}, {"id": 4478561, "category_id": 155, "iscrowd": 0, "bbox": [0, 331, 428, 135], "area": 42570}, {"id": 6447196, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 428, 346], "area": 145656}], "file_name": "000000304812.png", "image_id": 304812}, {"segments_info": [{"id": 6909805, "category_id": 36, "iscrowd": 0, "bbox": [39, 211, 552, 235], "area": 41037}, {"id": 1651267, "category_id": 177, "iscrowd": 0, "bbox": [0, 364, 640, 116], "area": 47222}, {"id": 461836, "category_id": 184, "iscrowd": 0, "bbox": [228, 387, 80, 30], "area": 1073}], "file_name": "000000304817.png", "image_id": 304817}, {"segments_info": [{"id": 13093825, "category_id": 46, "iscrowd": 0, "bbox": [284, 0, 101, 126], "area": 9122}, {"id": 11121593, "category_id": 48, "iscrowd": 0, "bbox": [13, 128, 81, 158], "area": 4282}, {"id": 2856154, "category_id": 51, "iscrowd": 0, "bbox": [32, 72, 129, 83], "area": 3933}, {"id": 11384510, "category_id": 51, "iscrowd": 0, "bbox": [152, 169, 109, 68], "area": 3768}, {"id": 4361140, "category_id": 54, "iscrowd": 0, "bbox": [92, 104, 105, 101], "area": 5287}, {"id": 4495298, "category_id": 54, "iscrowd": 0, "bbox": [181, 107, 188, 111], "area": 10780}, {"id": 2990318, "category_id": 55, "iscrowd": 0, "bbox": [34, 49, 120, 57], "area": 4957}, {"id": 15593456, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 385, 156], "area": 30018}, {"id": 9018272, "category_id": 195, "iscrowd": 0, "bbox": [0, 135, 154, 154], "area": 11286}, {"id": 4161960, "category_id": 196, "iscrowd": 0, "bbox": [226, 168, 138, 90], "area": 6565}], "file_name": "000000304984.png", "image_id": 304984}, {"segments_info": [{"id": 7831169, "category_id": 1, "iscrowd": 0, "bbox": [79, 135, 98, 212], "area": 2087}, {"id": 9475736, "category_id": 1, "iscrowd": 0, "bbox": [0, 104, 188, 300], "area": 34135}, {"id": 7501946, "category_id": 1, "iscrowd": 0, "bbox": [380, 52, 141, 322], "area": 18943}, {"id": 1119509, "category_id": 39, "iscrowd": 0, "bbox": [510, 2, 82, 62], "area": 426}, {"id": 3751745, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 216], "area": 111520}, {"id": 7831683, "category_id": 193, "iscrowd": 0, "bbox": [0, 186, 640, 220], "area": 91900}], "file_name": "000000305309.png", "image_id": 305309}, {"segments_info": [{"id": 4539449, "category_id": 1, "iscrowd": 0, "bbox": [266, 402, 8, 21], "area": 105}, {"id": 3755333, "category_id": 1, "iscrowd": 0, "bbox": [190, 416, 9, 20], "area": 94}, {"id": 2904121, "category_id": 1, "iscrowd": 0, "bbox": [85, 412, 6, 8], "area": 33}, {"id": 4606275, "category_id": 1, "iscrowd": 0, "bbox": [132, 403, 11, 33], "area": 240}, {"id": 6377793, "category_id": 1, "iscrowd": 0, "bbox": [16, 400, 11, 34], "area": 253}, {"id": 4347737, "category_id": 1, "iscrowd": 0, "bbox": [68, 416, 13, 19], "area": 145}, {"id": 4277044, "category_id": 1, "iscrowd": 0, "bbox": [171, 408, 12, 27], "area": 173}, {"id": 4015944, "category_id": 1, "iscrowd": 0, "bbox": [141, 404, 7, 31], "area": 143}, {"id": 3553885, "category_id": 1, "iscrowd": 0, "bbox": [187, 404, 6, 20], "area": 79}, {"id": 2569003, "category_id": 1, "iscrowd": 0, "bbox": [93, 409, 7, 26], "area": 96}, {"id": 8815471, "category_id": 1, "iscrowd": 0, "bbox": [232, 409, 9, 23], "area": 111}, {"id": 4145208, "category_id": 1, "iscrowd": 0, "bbox": [110, 407, 11, 28], "area": 178}, {"id": 4283732, "category_id": 1, "iscrowd": 0, "bbox": [46, 404, 6, 17], "area": 81}, {"id": 3822411, "category_id": 1, "iscrowd": 1, "bbox": [223, 405, 13, 28], "area": 310}, {"id": 4938309, "category_id": 38, "iscrowd": 0, "bbox": [25, 421, 16, 15], "area": 151}, {"id": 7363730, "category_id": 38, "iscrowd": 0, "bbox": [207, 134, 6, 6], "area": 27}, {"id": 14007221, "category_id": 38, "iscrowd": 0, "bbox": [50, 96, 29, 38], "area": 184}, {"id": 4151717, "category_id": 38, "iscrowd": 0, "bbox": [251, 345, 16, 79], "area": 532}, {"id": 3095607, "category_id": 184, "iscrowd": 0, "bbox": [0, 362, 334, 54], "area": 12442}, {"id": 15781812, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 334, 376], "area": 122189}, {"id": 1663547, "category_id": 193, "iscrowd": 0, "bbox": [0, 398, 334, 102], "area": 29152}], "file_name": "000000305317.png", "image_id": 305317}, {"segments_info": [{"id": 4936541, "category_id": 18, "iscrowd": 0, "bbox": [341, 151, 219, 207], "area": 35859}, {"id": 7112083, "category_id": 47, "iscrowd": 0, "bbox": [60, 125, 245, 267], "area": 56061}], "file_name": "000000305343.png", "image_id": 305343}, {"segments_info": [{"id": 4860700, "category_id": 1, "iscrowd": 0, "bbox": [295, 2, 317, 156], "area": 38743}, {"id": 8821672, "category_id": 44, "iscrowd": 0, "bbox": [207, 264, 58, 104], "area": 4340}, {"id": 4733487, "category_id": 48, "iscrowd": 0, "bbox": [517, 111, 95, 100], "area": 1521}, {"id": 6254975, "category_id": 49, "iscrowd": 0, "bbox": [592, 321, 19, 22], "area": 206}, {"id": 7898764, "category_id": 50, "iscrowd": 0, "bbox": [109, 281, 31, 114], "area": 1041}, {"id": 7824469, "category_id": 50, "iscrowd": 0, "bbox": [343, 53, 21, 95], "area": 898}, {"id": 8237000, "category_id": 51, "iscrowd": 0, "bbox": [17, 354, 190, 144], "area": 20519}, {"id": 9022145, "category_id": 51, "iscrowd": 0, "bbox": [338, 109, 114, 61], "area": 3395}, {"id": 7972042, "category_id": 54, "iscrowd": 0, "bbox": [364, 286, 135, 176], "area": 12065}, {"id": 7300747, "category_id": 54, "iscrowd": 0, "bbox": [301, 140, 147, 52], "area": 3579}, {"id": 6849962, "category_id": 54, "iscrowd": 0, "bbox": [237, 380, 170, 173], "area": 22172}, {"id": 5920607, "category_id": 67, "iscrowd": 0, "bbox": [1, 160, 611, 445], "area": 67411}, {"id": 5263439, "category_id": 189, "iscrowd": 0, "bbox": [0, 490, 612, 122], "area": 10007}, {"id": 7296839, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 55, 187], "area": 6837}, {"id": 8956354, "category_id": 195, "iscrowd": 0, "bbox": [109, 302, 503, 140], "area": 14490}, {"id": 7970497, "category_id": 196, "iscrowd": 0, "bbox": [0, 144, 612, 407], "area": 83425}], "file_name": "000000305609.png", "image_id": 305609}, {"segments_info": [{"id": 8747650, "category_id": 3, "iscrowd": 0, "bbox": [96, 217, 27, 12], "area": 200}, {"id": 9601927, "category_id": 8, "iscrowd": 0, "bbox": [0, 214, 130, 168], "area": 13594}, {"id": 6118751, "category_id": 24, "iscrowd": 0, "bbox": [468, 239, 39, 40], "area": 746}, {"id": 7566964, "category_id": 24, "iscrowd": 0, "bbox": [227, 245, 50, 72], "area": 1975}, {"id": 6909295, "category_id": 24, "iscrowd": 0, "bbox": [414, 227, 53, 42], "area": 744}, {"id": 5063237, "category_id": 24, "iscrowd": 0, "bbox": [527, 242, 54, 38], "area": 501}, {"id": 5919318, "category_id": 24, "iscrowd": 0, "bbox": [546, 236, 62, 46], "area": 1483}, {"id": 8155511, "category_id": 149, "iscrowd": 0, "bbox": [0, 340, 507, 140], "area": 36101}, {"id": 10980220, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 275], "area": 102018}, {"id": 16180405, "category_id": 187, "iscrowd": 0, "bbox": [0, 16, 640, 151], "area": 9570}, {"id": 6580075, "category_id": 192, "iscrowd": 0, "bbox": [0, 95, 592, 106], "area": 29881}, {"id": 5993583, "category_id": 193, "iscrowd": 0, "bbox": [0, 192, 640, 243], "area": 87677}], "file_name": "000000305695.png", "image_id": 305695}, {"segments_info": [{"id": 791064, "category_id": 1, "iscrowd": 0, "bbox": [252, 398, 47, 53], "area": 1666}, {"id": 1518396, "category_id": 1, "iscrowd": 0, "bbox": [386, 406, 22, 45], "area": 418}, {"id": 460808, "category_id": 1, "iscrowd": 0, "bbox": [295, 380, 19, 68], "area": 878}, {"id": 592396, "category_id": 1, "iscrowd": 0, "bbox": [96, 429, 27, 38], "area": 427}, {"id": 329480, "category_id": 1, "iscrowd": 0, "bbox": [80, 443, 35, 98], "area": 2093}, {"id": 922912, "category_id": 2, "iscrowd": 0, "bbox": [36, 443, 50, 121], "area": 4302}, {"id": 1583945, "category_id": 6, "iscrowd": 0, "bbox": [101, 324, 326, 289], "area": 77381}, {"id": 856858, "category_id": 149, "iscrowd": 0, "bbox": [0, 553, 428, 87], "area": 23866}, {"id": 594197, "category_id": 191, "iscrowd": 0, "bbox": [0, 492, 113, 71], "area": 2473}, {"id": 1648960, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 428, 511], "area": 149632}], "file_name": "000000306136.png", "image_id": 306136}, {"segments_info": [{"id": 2696995, "category_id": 1, "iscrowd": 0, "bbox": [351, 209, 214, 217], "area": 27723}, {"id": 1710879, "category_id": 1, "iscrowd": 0, "bbox": [324, 114, 108, 138], "area": 6938}, {"id": 1316119, "category_id": 1, "iscrowd": 0, "bbox": [339, 37, 58, 135], "area": 4142}, {"id": 2961200, "category_id": 1, "iscrowd": 0, "bbox": [278, 108, 77, 105], "area": 4657}, {"id": 3094084, "category_id": 1, "iscrowd": 0, "bbox": [130, 129, 83, 137], "area": 4826}, {"id": 4470829, "category_id": 1, "iscrowd": 0, "bbox": [115, 194, 81, 152], "area": 6076}, {"id": 2435119, "category_id": 1, "iscrowd": 0, "bbox": [145, 179, 188, 238], "area": 18524}, {"id": 3553084, "category_id": 1, "iscrowd": 0, "bbox": [473, 124, 128, 171], "area": 11619}, {"id": 1710104, "category_id": 27, "iscrowd": 0, "bbox": [146, 325, 135, 101], "area": 9879}, {"id": 4741461, "category_id": 44, "iscrowd": 0, "bbox": [557, 280, 20, 62], "area": 793}, {"id": 1059172, "category_id": 62, "iscrowd": 0, "bbox": [423, 198, 83, 59], "area": 844}, {"id": 10920341, "category_id": 62, "iscrowd": 0, "bbox": [63, 319, 143, 107], "area": 5896}, {"id": 1391240, "category_id": 62, "iscrowd": 0, "bbox": [5, 135, 31, 68], "area": 554}, {"id": 10526608, "category_id": 62, "iscrowd": 0, "bbox": [1, 90, 22, 30], "area": 524}, {"id": 9539201, "category_id": 62, "iscrowd": 0, "bbox": [579, 221, 51, 71], "area": 2258}, {"id": 8485746, "category_id": 62, "iscrowd": 0, "bbox": [124, 205, 15, 51], "area": 389}, {"id": 790037, "category_id": 62, "iscrowd": 0, "bbox": [4, 221, 54, 148], "area": 3236}, {"id": 4607552, "category_id": 67, "iscrowd": 0, "bbox": [250, 188, 390, 231], "area": 13390}, {"id": 4605254, "category_id": 67, "iscrowd": 0, "bbox": [9, 149, 106, 93], "area": 2881}, {"id": 3557687, "category_id": 73, "iscrowd": 0, "bbox": [316, 79, 31, 21], "area": 285}, {"id": 2039321, "category_id": 73, "iscrowd": 0, "bbox": [261, 188, 95, 61], "area": 3315}, {"id": 4872254, "category_id": 73, "iscrowd": 0, "bbox": [252, 227, 30, 49], "area": 735}, {"id": 7373912, "category_id": 73, "iscrowd": 0, "bbox": [374, 237, 41, 47], "area": 1344}, {"id": 8293230, "category_id": 73, "iscrowd": 0, "bbox": [295, 238, 80, 90], "area": 3638}, {"id": 5401147, "category_id": 73, "iscrowd": 0, "bbox": [484, 264, 57, 37], "area": 1264}, {"id": 4280631, "category_id": 73, "iscrowd": 0, "bbox": [511, 300, 96, 100], "area": 2909}, {"id": 4671040, "category_id": 107, "iscrowd": 0, "bbox": [329, 108, 44, 67], "area": 1022}, {"id": 5856600, "category_id": 112, "iscrowd": 0, "bbox": [218, 13, 312, 140], "area": 7432}, {"id": 5790549, "category_id": 176, "iscrowd": 0, "bbox": [61, 0, 320, 105], "area": 17649}, {"id": 2173483, "category_id": 188, "iscrowd": 0, "bbox": [166, 100, 19, 29], "area": 379}, {"id": 7434851, "category_id": 189, "iscrowd": 0, "bbox": [477, 291, 122, 135], "area": 399}, {"id": 2040611, "category_id": 190, "iscrowd": 0, "bbox": [0, 150, 640, 276], "area": 24814}, {"id": 3424586, "category_id": 196, "iscrowd": 0, "bbox": [47, 81, 78, 27], "area": 1263}, {"id": 6185824, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 204], "area": 46301}], "file_name": "000000306139.png", "image_id": 306139}, {"segments_info": [{"id": 3884115, "category_id": 1, "iscrowd": 0, "bbox": [173, 307, 77, 128], "area": 4177}, {"id": 460810, "category_id": 2, "iscrowd": 0, "bbox": [150, 377, 25, 37], "area": 535}, {"id": 131843, "category_id": 2, "iscrowd": 0, "bbox": [384, 375, 35, 42], "area": 451}, {"id": 263430, "category_id": 2, "iscrowd": 0, "bbox": [409, 390, 17, 26], "area": 363}, {"id": 131587, "category_id": 2, "iscrowd": 0, "bbox": [89, 376, 68, 40], "area": 1761}, {"id": 6383210, "category_id": 15, "iscrowd": 0, "bbox": [161, 439, 265, 177], "area": 33684}, {"id": 3553083, "category_id": 41, "iscrowd": 0, "bbox": [204, 396, 49, 36], "area": 423}, {"id": 8290695, "category_id": 191, "iscrowd": 0, "bbox": [77, 425, 266, 215], "area": 26155}, {"id": 3498349, "category_id": 193, "iscrowd": 0, "bbox": [302, 564, 124, 76], "area": 5732}, {"id": 4078393, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 426, 440], "area": 153907}, {"id": 4605252, "category_id": 199, "iscrowd": 0, "bbox": [168, 421, 258, 44], "area": 7536}], "file_name": "000000306437.png", "image_id": 306437}, {"segments_info": [{"id": 10926533, "category_id": 21, "iscrowd": 0, "bbox": [434, 248, 119, 87], "area": 3615}, {"id": 9744319, "category_id": 21, "iscrowd": 0, "bbox": [379, 267, 64, 60], "area": 1186}, {"id": 5338520, "category_id": 21, "iscrowd": 0, "bbox": [447, 265, 119, 63], "area": 1261}, {"id": 6192032, "category_id": 21, "iscrowd": 0, "bbox": [295, 248, 79, 75], "area": 3093}, {"id": 11651543, "category_id": 21, "iscrowd": 0, "bbox": [590, 257, 50, 67], "area": 1803}, {"id": 11321548, "category_id": 21, "iscrowd": 0, "bbox": [227, 235, 78, 85], "area": 1803}, {"id": 8560563, "category_id": 21, "iscrowd": 0, "bbox": [153, 231, 78, 74], "area": 1056}, {"id": 4285541, "category_id": 184, "iscrowd": 0, "bbox": [18, 0, 622, 311], "area": 112939}, {"id": 8030618, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 589, 269], "area": 28811}, {"id": 5141379, "category_id": 193, "iscrowd": 0, "bbox": [15, 300, 625, 180], "area": 97628}], "file_name": "000000306582.png", "image_id": 306582}, {"segments_info": [{"id": 7301496, "category_id": 1, "iscrowd": 0, "bbox": [26, 67, 335, 404], "area": 58769}, {"id": 4275509, "category_id": 48, "iscrowd": 0, "bbox": [435, 493, 45, 51], "area": 916}, {"id": 2772638, "category_id": 59, "iscrowd": 0, "bbox": [51, 353, 357, 255], "area": 73019}, {"id": 3751486, "category_id": 67, "iscrowd": 0, "bbox": [2, 465, 478, 167], "area": 30805}, {"id": 9471871, "category_id": 100, "iscrowd": 0, "bbox": [396, 420, 84, 82], "area": 4352}, {"id": 4079935, "category_id": 189, "iscrowd": 0, "bbox": [0, 434, 480, 206], "area": 5932}, {"id": 11774609, "category_id": 195, "iscrowd": 0, "bbox": [405, 481, 75, 118], "area": 3089}, {"id": 4475748, "category_id": 196, "iscrowd": 0, "bbox": [393, 427, 74, 45], "area": 718}, {"id": 1645414, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 450], "area": 121121}], "file_name": "000000306700.png", "image_id": 306700}, {"segments_info": [{"id": 2772082, "category_id": 44, "iscrowd": 0, "bbox": [586, 324, 16, 39], "area": 506}, {"id": 8241130, "category_id": 44, "iscrowd": 0, "bbox": [96, 362, 40, 63], "area": 1837}, {"id": 2772601, "category_id": 44, "iscrowd": 0, "bbox": [572, 323, 16, 40], "area": 529}, {"id": 2247528, "category_id": 64, "iscrowd": 0, "bbox": [282, 254, 184, 101], "area": 10150}, {"id": 4821680, "category_id": 64, "iscrowd": 0, "bbox": [0, 299, 50, 101], "area": 3774}, {"id": 5080765, "category_id": 70, "iscrowd": 0, "bbox": [446, 326, 100, 100], "area": 2691}, {"id": 10146799, "category_id": 81, "iscrowd": 0, "bbox": [187, 394, 174, 32], "area": 3820}, {"id": 8042718, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 105, 343], "area": 29479}, {"id": 7714265, "category_id": 119, "iscrowd": 0, "bbox": [0, 337, 104, 89], "area": 5575}, {"id": 7384018, "category_id": 133, "iscrowd": 0, "bbox": [80, 0, 436, 376], "area": 125266}, {"id": 14014684, "category_id": 181, "iscrowd": 0, "bbox": [613, 13, 27, 26], "area": 505}, {"id": 6989270, "category_id": 199, "iscrowd": 0, "bbox": [483, 0, 157, 392], "area": 38639}], "file_name": "000000306733.png", "image_id": 306733}, {"segments_info": [{"id": 4078133, "category_id": 1, "iscrowd": 0, "bbox": [72, 189, 10, 14], "area": 96}, {"id": 5526351, "category_id": 1, "iscrowd": 0, "bbox": [57, 188, 12, 16], "area": 85}, {"id": 3552818, "category_id": 1, "iscrowd": 0, "bbox": [99, 196, 4, 8], "area": 26}, {"id": 4146242, "category_id": 1, "iscrowd": 0, "bbox": [350, 197, 5, 11], "area": 44}, {"id": 3288360, "category_id": 1, "iscrowd": 0, "bbox": [437, 201, 7, 8], "area": 45}, {"id": 3157289, "category_id": 1, "iscrowd": 0, "bbox": [398, 201, 5, 8], "area": 31}, {"id": 4407623, "category_id": 1, "iscrowd": 0, "bbox": [105, 181, 20, 24], "area": 361}, {"id": 3487281, "category_id": 1, "iscrowd": 0, "bbox": [418, 196, 13, 14], "area": 105}, {"id": 4340536, "category_id": 1, "iscrowd": 0, "bbox": [166, 195, 8, 9], "area": 51}, {"id": 5393733, "category_id": 4, "iscrowd": 0, "bbox": [1, 238, 57, 82], "area": 3618}, {"id": 4012593, "category_id": 4, "iscrowd": 0, "bbox": [451, 242, 49, 80], "area": 3016}, {"id": 6382446, "category_id": 7, "iscrowd": 0, "bbox": [6, 160, 494, 97], "area": 39648}, {"id": 4342328, "category_id": 10, "iscrowd": 0, "bbox": [447, 103, 17, 44], "area": 371}, {"id": 5196118, "category_id": 10, "iscrowd": 0, "bbox": [40, 40, 10, 34], "area": 289}, {"id": 3353902, "category_id": 10, "iscrowd": 0, "bbox": [463, 113, 17, 51], "area": 691}, {"id": 7107180, "category_id": 10, "iscrowd": 0, "bbox": [21, 39, 17, 36], "area": 501}, {"id": 5986905, "category_id": 10, "iscrowd": 0, "bbox": [25, 102, 21, 55], "area": 1077}, {"id": 4803147, "category_id": 10, "iscrowd": 0, "bbox": [444, 47, 38, 39], "area": 1196}, {"id": 5328219, "category_id": 10, "iscrowd": 0, "bbox": [52, 40, 10, 35], "area": 304}, {"id": 4999241, "category_id": 11, "iscrowd": 0, "bbox": [81, 220, 21, 70], "area": 989}, {"id": 3420460, "category_id": 11, "iscrowd": 0, "bbox": [405, 227, 17, 66], "area": 732}, {"id": 9476248, "category_id": 147, "iscrowd": 0, "bbox": [50, 233, 219, 34], "area": 562}, {"id": 8686726, "category_id": 149, "iscrowd": 0, "bbox": [48, 246, 411, 53], "area": 12521}, {"id": 8097937, "category_id": 191, "iscrowd": 0, "bbox": [0, 286, 500, 82], "area": 34276}, {"id": 7569275, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 298], "area": 75331}], "file_name": "000000306893.png", "image_id": 306893}, {"segments_info": [{"id": 6444627, "category_id": 3, "iscrowd": 0, "bbox": [217, 273, 18, 10], "area": 101}, {"id": 6773586, "category_id": 3, "iscrowd": 0, "bbox": [179, 275, 13, 8], "area": 71}, {"id": 856337, "category_id": 3, "iscrowd": 0, "bbox": [219, 271, 10, 5], "area": 30}, {"id": 4800058, "category_id": 3, "iscrowd": 0, "bbox": [163, 278, 23, 11], "area": 190}, {"id": 4139813, "category_id": 3, "iscrowd": 0, "bbox": [132, 271, 7, 5], "area": 24}, {"id": 4864822, "category_id": 3, "iscrowd": 0, "bbox": [124, 271, 7, 6], "area": 40}, {"id": 3693942, "category_id": 3, "iscrowd": 0, "bbox": [243, 267, 6, 4], "area": 18}, {"id": 3484770, "category_id": 3, "iscrowd": 0, "bbox": [193, 275, 18, 10], "area": 120}, {"id": 3681580, "category_id": 3, "iscrowd": 0, "bbox": [147, 278, 18, 12], "area": 141}, {"id": 6376772, "category_id": 3, "iscrowd": 0, "bbox": [121, 282, 26, 14], "area": 231}, {"id": 2299665, "category_id": 3, "iscrowd": 0, "bbox": [289, 276, 31, 12], "area": 154}, {"id": 4865856, "category_id": 3, "iscrowd": 0, "bbox": [56, 274, 19, 9], "area": 125}, {"id": 1841960, "category_id": 10, "iscrowd": 0, "bbox": [156, 228, 7, 19], "area": 108}, {"id": 667463, "category_id": 10, "iscrowd": 0, "bbox": [17, 83, 89, 155], "area": 9242}, {"id": 2299920, "category_id": 10, "iscrowd": 0, "bbox": [266, 160, 7, 31], "area": 182}, {"id": 1514543, "category_id": 10, "iscrowd": 0, "bbox": [241, 251, 7, 16], "area": 89}, {"id": 2300695, "category_id": 10, "iscrowd": 0, "bbox": [257, 132, 14, 28], "area": 196}, {"id": 2235423, "category_id": 10, "iscrowd": 0, "bbox": [205, 232, 3, 8], "area": 19}, {"id": 1579053, "category_id": 10, "iscrowd": 0, "bbox": [197, 232, 5, 13], "area": 60}, {"id": 1512288, "category_id": 13, "iscrowd": 0, "bbox": [419, 280, 9, 10], "area": 73}, {"id": 5129546, "category_id": 149, "iscrowd": 0, "bbox": [0, 272, 500, 61], "area": 12518}, {"id": 2305123, "category_id": 171, "iscrowd": 0, "bbox": [244, 290, 148, 19], "area": 2144}, {"id": 1648418, "category_id": 184, "iscrowd": 0, "bbox": [153, 217, 214, 76], "area": 6427}, {"id": 11309698, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 248], "area": 98657}, {"id": 6708840, "category_id": 191, "iscrowd": 0, "bbox": [232, 270, 268, 56], "area": 6273}, {"id": 1975588, "category_id": 193, "iscrowd": 0, "bbox": [154, 274, 29, 16], "area": 117}, {"id": 4011841, "category_id": 194, "iscrowd": 0, "bbox": [407, 297, 39, 17], "area": 292}, {"id": 4673149, "category_id": 197, "iscrowd": 0, "bbox": [59, 196, 441, 93], "area": 16134}, {"id": 5858942, "category_id": 199, "iscrowd": 0, "bbox": [40, 269, 335, 33], "area": 972}], "file_name": "000000307074.png", "image_id": 307074}, {"segments_info": [{"id": 2171461, "category_id": 79, "iscrowd": 0, "bbox": [251, 63, 100, 58], "area": 3649}, {"id": 1316676, "category_id": 81, "iscrowd": 0, "bbox": [155, 91, 85, 21], "area": 751}, {"id": 2838148, "category_id": 107, "iscrowd": 0, "bbox": [0, 62, 396, 235], "area": 18432}, {"id": 2900591, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 396, 81], "area": 11187}, {"id": 1713487, "category_id": 177, "iscrowd": 0, "bbox": [174, 0, 27, 97], "area": 1602}, {"id": 2899813, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 396, 245], "area": 39130}, {"id": 4745878, "category_id": 189, "iscrowd": 0, "bbox": [186, 100, 171, 188], "area": 18589}, {"id": 1517931, "category_id": 190, "iscrowd": 0, "bbox": [33, 152, 363, 145], "area": 19974}], "file_name": "000000307145.png", "image_id": 307145}, {"segments_info": [{"id": 2897492, "category_id": 1, "iscrowd": 0, "bbox": [1, 0, 382, 177], "area": 45359}, {"id": 4013906, "category_id": 47, "iscrowd": 0, "bbox": [0, 139, 34, 140], "area": 3072}, {"id": 3228528, "category_id": 51, "iscrowd": 0, "bbox": [329, 75, 76, 52], "area": 3183}, {"id": 6062232, "category_id": 59, "iscrowd": 0, "bbox": [45, 132, 530, 276], "area": 108225}, {"id": 7758936, "category_id": 67, "iscrowd": 0, "bbox": [3, 68, 577, 350], "area": 45707}, {"id": 3488590, "category_id": 171, "iscrowd": 0, "bbox": [426, 0, 144, 171], "area": 17417}, {"id": 5855839, "category_id": 175, "iscrowd": 0, "bbox": [498, 0, 142, 425], "area": 33090}, {"id": 3813935, "category_id": 189, "iscrowd": 0, "bbox": [0, 136, 500, 289], "area": 2704}, {"id": 1380882, "category_id": 199, "iscrowd": 0, "bbox": [371, 0, 92, 84], "area": 3712}], "file_name": "000000307172.png", "image_id": 307172}, {"segments_info": [{"id": 2311244, "category_id": 7, "iscrowd": 0, "bbox": [83, 225, 457, 161], "area": 51758}, {"id": 5131082, "category_id": 10, "iscrowd": 0, "bbox": [372, 104, 33, 68], "area": 1957}, {"id": 4473409, "category_id": 10, "iscrowd": 0, "bbox": [266, 103, 28, 63], "area": 1597}, {"id": 3815736, "category_id": 10, "iscrowd": 0, "bbox": [148, 97, 29, 63], "area": 1732}, {"id": 2765884, "category_id": 147, "iscrowd": 0, "bbox": [0, 358, 640, 52], "area": 14227}, {"id": 4344914, "category_id": 184, "iscrowd": 0, "bbox": [14, 228, 626, 133], "area": 5108}, {"id": 6256521, "category_id": 185, "iscrowd": 0, "bbox": [536, 331, 104, 54], "area": 2656}, {"id": 12628646, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 319], "area": 118527}, {"id": 5395287, "category_id": 191, "iscrowd": 0, "bbox": [0, 389, 640, 37], "area": 17546}, {"id": 3098190, "category_id": 193, "iscrowd": 0, "bbox": [0, 340, 84, 24], "area": 1527}, {"id": 9011323, "category_id": 197, "iscrowd": 0, "bbox": [0, 12, 635, 365], "area": 53876}], "file_name": "000000307598.png", "image_id": 307598}, {"segments_info": [{"id": 3954799, "category_id": 23, "iscrowd": 0, "bbox": [3, 54, 528, 577], "area": 251394}, {"id": 5074549, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 589, 512], "area": 86153}, {"id": 7509413, "category_id": 198, "iscrowd": 0, "bbox": [487, 194, 102, 446], "area": 32718}], "file_name": "000000307658.png", "image_id": 307658}, {"segments_info": [{"id": 6182747, "category_id": 1, "iscrowd": 0, "bbox": [122, 206, 156, 156], "area": 9422}, {"id": 5328207, "category_id": 41, "iscrowd": 0, "bbox": [169, 350, 105, 41], "area": 1853}, {"id": 7705243, "category_id": 154, "iscrowd": 0, "bbox": [80, 428, 295, 107], "area": 20359}, {"id": 9011820, "category_id": 184, "iscrowd": 0, "bbox": [126, 239, 299, 106], "area": 10657}, {"id": 4417222, "category_id": 185, "iscrowd": 0, "bbox": [0, 332, 425, 42], "area": 11116}, {"id": 15253652, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 425, 341], "area": 120826}, {"id": 10793396, "category_id": 191, "iscrowd": 0, "bbox": [0, 366, 425, 274], "area": 93286}, {"id": 8947052, "category_id": 197, "iscrowd": 0, "bbox": [268, 290, 157, 54], "area": 3032}], "file_name": "000000308165.png", "image_id": 308165}, {"segments_info": [{"id": 5920852, "category_id": 85, "iscrowd": 0, "bbox": [196, 234, 88, 92], "area": 6213}, {"id": 1973531, "category_id": 171, "iscrowd": 0, "bbox": [130, 552, 337, 88], "area": 25977}, {"id": 15129811, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 557], "area": 113659}, {"id": 2631976, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 161282}], "file_name": "000000308193.png", "image_id": 308193}, {"segments_info": [{"id": 7388335, "category_id": 1, "iscrowd": 0, "bbox": [313, 166, 83, 115], "area": 4480}, {"id": 5011575, "category_id": 1, "iscrowd": 0, "bbox": [546, 248, 84, 143], "area": 7325}, {"id": 5143665, "category_id": 1, "iscrowd": 0, "bbox": [32, 299, 132, 181], "area": 11021}, {"id": 8690589, "category_id": 1, "iscrowd": 0, "bbox": [149, 202, 82, 175], "area": 6706}, {"id": 7695716, "category_id": 8, "iscrowd": 0, "bbox": [386, 41, 224, 204], "area": 34338}, {"id": 4412249, "category_id": 8, "iscrowd": 0, "bbox": [216, 253, 385, 227], "area": 43086}, {"id": 7235681, "category_id": 8, "iscrowd": 0, "bbox": [71, 77, 323, 263], "area": 35119}, {"id": 1644575, "category_id": 33, "iscrowd": 0, "bbox": [503, 397, 137, 83], "area": 9362}, {"id": 2566443, "category_id": 33, "iscrowd": 0, "bbox": [205, 225, 51, 41], "area": 1444}, {"id": 1645340, "category_id": 33, "iscrowd": 0, "bbox": [162, 177, 52, 44], "area": 1316}, {"id": 1513242, "category_id": 33, "iscrowd": 0, "bbox": [257, 174, 50, 30], "area": 929}, {"id": 2039587, "category_id": 33, "iscrowd": 0, "bbox": [264, 191, 44, 42], "area": 1136}, {"id": 3946814, "category_id": 33, "iscrowd": 0, "bbox": [214, 197, 46, 24], "area": 802}, {"id": 2236449, "category_id": 33, "iscrowd": 0, "bbox": [136, 177, 33, 48], "area": 1062}, {"id": 2697259, "category_id": 33, "iscrowd": 0, "bbox": [230, 214, 35, 18], "area": 388}, {"id": 5000274, "category_id": 33, "iscrowd": 0, "bbox": [373, 322, 133, 114], "area": 10839}, {"id": 5065815, "category_id": 33, "iscrowd": 0, "bbox": [296, 183, 44, 69], "area": 2153}, {"id": 2368810, "category_id": 33, "iscrowd": 0, "bbox": [262, 228, 40, 23], "area": 619}, {"id": 1249317, "category_id": 33, "iscrowd": 0, "bbox": [196, 150, 59, 49], "area": 2104}, {"id": 2827324, "category_id": 33, "iscrowd": 0, "bbox": [129, 194, 15, 19], "area": 190}, {"id": 8621199, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 124767}, {"id": 11772059, "category_id": 195, "iscrowd": 0, "bbox": [552, 374, 60, 30], "area": 516}], "file_name": "000000308328.png", "image_id": 308328}, {"segments_info": [{"id": 6974049, "category_id": 149, "iscrowd": 0, "bbox": [7, 221, 493, 69], "area": 5125}, {"id": 6256254, "category_id": 154, "iscrowd": 0, "bbox": [256, 225, 244, 48], "area": 5933}, {"id": 2763569, "category_id": 184, "iscrowd": 0, "bbox": [308, 150, 192, 103], "area": 5567}, {"id": 14603721, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 89], "area": 33781}, {"id": 6055006, "category_id": 191, "iscrowd": 0, "bbox": [7, 205, 377, 42], "area": 2589}, {"id": 6715520, "category_id": 194, "iscrowd": 0, "bbox": [0, 223, 500, 115], "area": 35151}, {"id": 4803146, "category_id": 197, "iscrowd": 0, "bbox": [0, 49, 500, 186], "area": 62388}], "file_name": "000000308391.png", "image_id": 308391}, {"segments_info": [{"id": 1514528, "category_id": 1, "iscrowd": 0, "bbox": [75, 165, 147, 256], "area": 20885}, {"id": 1908277, "category_id": 15, "iscrowd": 0, "bbox": [184, 259, 321, 162], "area": 43882}, {"id": 395276, "category_id": 28, "iscrowd": 0, "bbox": [89, 236, 68, 192], "area": 3367}, {"id": 263171, "category_id": 31, "iscrowd": 0, "bbox": [123, 308, 71, 44], "area": 1431}, {"id": 1185560, "category_id": 112, "iscrowd": 0, "bbox": [506, 0, 134, 428], "area": 35611}, {"id": 2437421, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 461, 259], "area": 44054}, {"id": 2109474, "category_id": 184, "iscrowd": 0, "bbox": [0, 15, 640, 244], "area": 52539}, {"id": 2896681, "category_id": 185, "iscrowd": 0, "bbox": [299, 151, 128, 34], "area": 3220}, {"id": 2831675, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 506, 428], "area": 48223}], "file_name": "000000308394.png", "image_id": 308394}, {"segments_info": [{"id": 2909576, "category_id": 51, "iscrowd": 0, "bbox": [121, 10, 519, 470], "area": 193883}, {"id": 1729454, "category_id": 57, "iscrowd": 0, "bbox": [278, 122, 17, 20], "area": 140}, {"id": 744106, "category_id": 57, "iscrowd": 0, "bbox": [178, 122, 34, 78], "area": 763}, {"id": 2392539, "category_id": 57, "iscrowd": 0, "bbox": [379, 200, 74, 29], "area": 734}, {"id": 2591694, "category_id": 57, "iscrowd": 0, "bbox": [232, 114, 47, 115], "area": 2196}, {"id": 2787807, "category_id": 57, "iscrowd": 0, "bbox": [323, 68, 19, 95], "area": 1278}, {"id": 2065124, "category_id": 57, "iscrowd": 0, "bbox": [378, 215, 53, 56], "area": 1207}, {"id": 3249879, "category_id": 57, "iscrowd": 0, "bbox": [417, 335, 57, 21], "area": 693}, {"id": 1928866, "category_id": 57, "iscrowd": 0, "bbox": [431, 235, 33, 70], "area": 683}, {"id": 1143231, "category_id": 57, "iscrowd": 0, "bbox": [209, 293, 128, 63], "area": 4241}, {"id": 1674207, "category_id": 57, "iscrowd": 0, "bbox": [384, 312, 30, 84], "area": 1340}, {"id": 1340373, "category_id": 57, "iscrowd": 0, "bbox": [310, 357, 73, 29], "area": 811}, {"id": 952547, "category_id": 57, "iscrowd": 0, "bbox": [429, 155, 18, 32], "area": 335}, {"id": 2191552, "category_id": 57, "iscrowd": 0, "bbox": [506, 324, 42, 43], "area": 638}, {"id": 5397346, "category_id": 67, "iscrowd": 0, "bbox": [1, 11, 297, 262], "area": 24186}, {"id": 3878700, "category_id": 79, "iscrowd": 0, "bbox": [0, 206, 288, 274], "area": 32833}, {"id": 12634330, "category_id": 84, "iscrowd": 0, "bbox": [0, 143, 61, 232], "area": 7230}, {"id": 4610919, "category_id": 107, "iscrowd": 0, "bbox": [0, 0, 384, 183], "area": 3909}], "file_name": "000000308430.png", "image_id": 308430}, {"segments_info": [{"id": 10262175, "category_id": 70, "iscrowd": 0, "bbox": [181, 352, 157, 128], "area": 10245}, {"id": 11116710, "category_id": 81, "iscrowd": 0, "bbox": [54, 413, 178, 67], "area": 5437}, {"id": 9208709, "category_id": 130, "iscrowd": 0, "bbox": [0, 65, 140, 62], "area": 6270}, {"id": 9341584, "category_id": 133, "iscrowd": 0, "bbox": [0, 158, 145, 203], "area": 22826}, {"id": 15789552, "category_id": 181, "iscrowd": 0, "bbox": [430, 67, 210, 252], "area": 41465}, {"id": 10854053, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 184209}], "file_name": "000000308466.png", "image_id": 308466}, {"segments_info": [{"id": 11516855, "category_id": 23, "iscrowd": 0, "bbox": [71, 88, 465, 320], "area": 93549}, {"id": 6716550, "category_id": 37, "iscrowd": 0, "bbox": [527, 217, 69, 70], "area": 3797}, {"id": 2312245, "category_id": 184, "iscrowd": 0, "bbox": [484, 32, 156, 384], "area": 28429}, {"id": 3293241, "category_id": 185, "iscrowd": 0, "bbox": [53, 0, 587, 133], "area": 56858}, {"id": 7832701, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 124125}], "file_name": "000000308476.png", "image_id": 308476}, {"segments_info": [{"id": 4469812, "category_id": 3, "iscrowd": 0, "bbox": [307, 567, 52, 40], "area": 1201}, {"id": 2234647, "category_id": 15, "iscrowd": 0, "bbox": [167, 606, 101, 30], "area": 1737}, {"id": 8414810, "category_id": 85, "iscrowd": 0, "bbox": [165, 105, 37, 37], "area": 1081}, {"id": 1973531, "category_id": 175, "iscrowd": 0, "bbox": [284, 612, 75, 19], "area": 630}, {"id": 4872011, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 359, 640], "area": 155023}, {"id": 1840662, "category_id": 185, "iscrowd": 0, "bbox": [252, 580, 35, 22], "area": 504}, {"id": 16446448, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 359, 335], "area": 35829}, {"id": 4142131, "category_id": 191, "iscrowd": 0, "bbox": [11, 616, 292, 24], "area": 1542}, {"id": 2038811, "category_id": 193, "iscrowd": 0, "bbox": [231, 598, 128, 42], "area": 1016}, {"id": 8414355, "category_id": 197, "iscrowd": 0, "bbox": [0, 11, 284, 354], "area": 27685}], "file_name": "000000308531.png", "image_id": 308531}, {"segments_info": [{"id": 4998986, "category_id": 1, "iscrowd": 0, "bbox": [175, 102, 463, 325], "area": 51002}, {"id": 6249307, "category_id": 19, "iscrowd": 0, "bbox": [513, 300, 127, 122], "area": 11524}, {"id": 14080215, "category_id": 19, "iscrowd": 0, "bbox": [192, 226, 171, 197], "area": 21506}, {"id": 9079178, "category_id": 19, "iscrowd": 0, "bbox": [398, 289, 135, 134], "area": 11301}, {"id": 5150341, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 388], "area": 141626}, {"id": 3358020, "category_id": 185, "iscrowd": 0, "bbox": [0, 325, 206, 102], "area": 7246}, {"id": 4284497, "category_id": 193, "iscrowd": 0, "bbox": [0, 390, 235, 37], "area": 5217}], "file_name": "000000308545.png", "image_id": 308545}, {"segments_info": [{"id": 5855589, "category_id": 1, "iscrowd": 0, "bbox": [423, 323, 1, 8], "area": 8}, {"id": 6053479, "category_id": 1, "iscrowd": 0, "bbox": [73, 326, 9, 5], "area": 27}, {"id": 6843254, "category_id": 1, "iscrowd": 0, "bbox": [355, 325, 3, 5], "area": 11}, {"id": 4407620, "category_id": 1, "iscrowd": 0, "bbox": [112, 368, 9, 16], "area": 71}, {"id": 7172221, "category_id": 1, "iscrowd": 0, "bbox": [102, 324, 4, 8], "area": 20}, {"id": 5459275, "category_id": 1, "iscrowd": 0, "bbox": [93, 350, 6, 10], "area": 32}, {"id": 7958656, "category_id": 1, "iscrowd": 0, "bbox": [411, 314, 4, 7], "area": 19}, {"id": 3881019, "category_id": 1, "iscrowd": 0, "bbox": [362, 342, 3, 11], "area": 22}, {"id": 5328983, "category_id": 1, "iscrowd": 0, "bbox": [40, 330, 3, 5], "area": 11}, {"id": 7039859, "category_id": 1, "iscrowd": 0, "bbox": [447, 322, 4, 9], "area": 23}, {"id": 5591379, "category_id": 1, "iscrowd": 0, "bbox": [271, 353, 6, 11], "area": 52}, {"id": 7039858, "category_id": 1, "iscrowd": 0, "bbox": [435, 318, 3, 6], "area": 16}, {"id": 6842477, "category_id": 1, "iscrowd": 0, "bbox": [389, 320, 3, 6], "area": 15}, {"id": 9012871, "category_id": 9, "iscrowd": 0, "bbox": [82, 340, 23, 8], "area": 156}, {"id": 11574129, "category_id": 38, "iscrowd": 0, "bbox": [54, 245, 22, 36], "area": 462}, {"id": 8163237, "category_id": 38, "iscrowd": 0, "bbox": [360, 121, 35, 44], "area": 675}, {"id": 8552572, "category_id": 38, "iscrowd": 0, "bbox": [262, 175, 40, 34], "area": 587}, {"id": 6906977, "category_id": 151, "iscrowd": 0, "bbox": [411, 267, 69, 44], "area": 1654}, {"id": 7633542, "category_id": 154, "iscrowd": 0, "bbox": [0, 304, 480, 60], "area": 13058}, {"id": 8421498, "category_id": 155, "iscrowd": 0, "bbox": [0, 337, 480, 303], "area": 138718}, {"id": 4079934, "category_id": 184, "iscrowd": 0, "bbox": [172, 244, 308, 79], "area": 4670}, {"id": 13551552, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 294], "area": 131358}, {"id": 7764347, "category_id": 197, "iscrowd": 0, "bbox": [0, 242, 480, 89], "area": 15361}], "file_name": "000000308587.png", "image_id": 308587}, {"segments_info": [{"id": 9934242, "category_id": 1, "iscrowd": 0, "bbox": [574, 2, 66, 301], "area": 8412}, {"id": 4868968, "category_id": 1, "iscrowd": 0, "bbox": [50, 0, 37, 76], "area": 1605}, {"id": 3155999, "category_id": 1, "iscrowd": 0, "bbox": [79, 0, 67, 70], "area": 3341}, {"id": 3222571, "category_id": 1, "iscrowd": 0, "bbox": [0, 1, 40, 263], "area": 6488}, {"id": 4730412, "category_id": 1, "iscrowd": 0, "bbox": [425, 1, 69, 150], "area": 8106}, {"id": 4737103, "category_id": 1, "iscrowd": 0, "bbox": [324, 0, 111, 88], "area": 4820}, {"id": 6443603, "category_id": 1, "iscrowd": 0, "bbox": [246, 0, 90, 103], "area": 5689}, {"id": 8551815, "category_id": 1, "iscrowd": 0, "bbox": [485, 54, 109, 191], "area": 10766}, {"id": 6968410, "category_id": 1, "iscrowd": 0, "bbox": [557, 1, 55, 64], "area": 1377}, {"id": 3682870, "category_id": 1, "iscrowd": 0, "bbox": [164, 0, 79, 114], "area": 5304}, {"id": 6253171, "category_id": 4, "iscrowd": 0, "bbox": [24, 52, 553, 335], "area": 108942}, {"id": 5914424, "category_id": 27, "iscrowd": 0, "bbox": [487, 0, 26, 55], "area": 881}, {"id": 4209211, "category_id": 27, "iscrowd": 0, "bbox": [578, 1, 26, 17], "area": 400}, {"id": 6717059, "category_id": 193, "iscrowd": 0, "bbox": [597, 0, 15, 16], "area": 79}, {"id": 7963786, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 91706}], "file_name": "000000308631.png", "image_id": 308631}, {"segments_info": [{"id": 6183256, "category_id": 23, "iscrowd": 0, "bbox": [250, 229, 160, 48], "area": 4992}, {"id": 6914426, "category_id": 184, "iscrowd": 0, "bbox": [555, 0, 42, 22], "area": 740}, {"id": 9475736, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 300718}], "file_name": "000000308753.png", "image_id": 308753}, {"segments_info": [{"id": 5326675, "category_id": 1, "iscrowd": 0, "bbox": [335, 29, 104, 150], "area": 6376}, {"id": 4997185, "category_id": 1, "iscrowd": 0, "bbox": [0, 32, 203, 190], "area": 20576}, {"id": 4862821, "category_id": 27, "iscrowd": 0, "bbox": [377, 27, 40, 40], "area": 282}, {"id": 5264762, "category_id": 35, "iscrowd": 0, "bbox": [332, 0, 104, 117], "area": 2034}, {"id": 10921643, "category_id": 159, "iscrowd": 0, "bbox": [0, 46, 640, 434], "area": 195976}, {"id": 11631168, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 68], "area": 19327}, {"id": 4608339, "category_id": 192, "iscrowd": 0, "bbox": [0, 13, 640, 279], "area": 54870}], "file_name": "000000308793.png", "image_id": 308793}, {"segments_info": [{"id": 4092578, "category_id": 44, "iscrowd": 0, "bbox": [253, 235, 9, 23], "area": 166}, {"id": 5735592, "category_id": 44, "iscrowd": 0, "bbox": [223, 225, 6, 13], "area": 41}, {"id": 3364989, "category_id": 44, "iscrowd": 0, "bbox": [243, 224, 10, 31], "area": 246}, {"id": 1521752, "category_id": 44, "iscrowd": 0, "bbox": [222, 233, 9, 23], "area": 139}, {"id": 3830185, "category_id": 47, "iscrowd": 0, "bbox": [230, 246, 9, 11], "area": 94}, {"id": 2176074, "category_id": 79, "iscrowd": 0, "bbox": [262, 250, 70, 82], "area": 5221}, {"id": 2768723, "category_id": 79, "iscrowd": 0, "bbox": [264, 153, 69, 102], "area": 6654}, {"id": 6916523, "category_id": 81, "iscrowd": 0, "bbox": [76, 249, 118, 18], "area": 1639}, {"id": 4297967, "category_id": 118, "iscrowd": 0, "bbox": [81, 370, 246, 130], "area": 29266}, {"id": 14805490, "category_id": 130, "iscrowd": 0, "bbox": [270, 46, 17, 13], "area": 160}, {"id": 2640248, "category_id": 176, "iscrowd": 0, "bbox": [67, 165, 198, 91], "area": 11174}, {"id": 10988972, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 47999}, {"id": 10600417, "category_id": 186, "iscrowd": 0, "bbox": [56, 26, 281, 53], "area": 9679}, {"id": 1714231, "category_id": 188, "iscrowd": 0, "bbox": [24, 41, 314, 459], "area": 65357}, {"id": 4483732, "category_id": 196, "iscrowd": 0, "bbox": [195, 221, 70, 37], "area": 735}, {"id": 7042423, "category_id": 199, "iscrowd": 0, "bbox": [0, 166, 340, 334], "area": 1223}], "file_name": "000000308799.png", "image_id": 308799}, {"segments_info": [{"id": 2369078, "category_id": 1, "iscrowd": 0, "bbox": [81, 372, 28, 45], "area": 847}, {"id": 7370707, "category_id": 13, "iscrowd": 0, "bbox": [62, 32, 257, 321], "area": 63016}, {"id": 6775902, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 335, 500], "area": 75096}], "file_name": "000000309173.png", "image_id": 309173}, {"segments_info": [{"id": 3228003, "category_id": 1, "iscrowd": 0, "bbox": [18, 263, 15, 59], "area": 397}, {"id": 4804433, "category_id": 1, "iscrowd": 0, "bbox": [430, 186, 17, 32], "area": 245}, {"id": 658451, "category_id": 1, "iscrowd": 0, "bbox": [545, 211, 8, 14], "area": 76}, {"id": 1974825, "category_id": 1, "iscrowd": 0, "bbox": [605, 270, 22, 87], "area": 1200}, {"id": 3291730, "category_id": 1, "iscrowd": 0, "bbox": [379, 120, 12, 29], "area": 186}, {"id": 4470317, "category_id": 1, "iscrowd": 0, "bbox": [344, 216, 4, 3], "area": 11}, {"id": 921423, "category_id": 1, "iscrowd": 0, "bbox": [204, 222, 15, 46], "area": 471}, {"id": 1447963, "category_id": 1, "iscrowd": 0, "bbox": [80, 253, 24, 72], "area": 1031}, {"id": 5847855, "category_id": 1, "iscrowd": 0, "bbox": [126, 222, 16, 58], "area": 451}, {"id": 3223857, "category_id": 1, "iscrowd": 0, "bbox": [32, 258, 11, 43], "area": 264}, {"id": 6578528, "category_id": 1, "iscrowd": 0, "bbox": [526, 128, 13, 22], "area": 146}, {"id": 5000533, "category_id": 1, "iscrowd": 0, "bbox": [20, 240, 23, 50], "area": 598}, {"id": 4150849, "category_id": 1, "iscrowd": 0, "bbox": [369, 128, 6, 18], "area": 84}, {"id": 3621190, "category_id": 1, "iscrowd": 1, "bbox": [163, 218, 10, 44], "area": 312}, {"id": 6977143, "category_id": 2, "iscrowd": 0, "bbox": [424, 199, 29, 20], "area": 304}, {"id": 2303014, "category_id": 2, "iscrowd": 0, "bbox": [134, 253, 17, 37], "area": 316}, {"id": 3224895, "category_id": 3, "iscrowd": 0, "bbox": [257, 236, 69, 53], "area": 3146}, {"id": 7241341, "category_id": 3, "iscrowd": 0, "bbox": [385, 147, 28, 26], "area": 596}, {"id": 6446429, "category_id": 3, "iscrowd": 0, "bbox": [437, 121, 23, 19], "area": 249}, {"id": 9147285, "category_id": 3, "iscrowd": 0, "bbox": [331, 213, 43, 32], "area": 1014}, {"id": 4801602, "category_id": 3, "iscrowd": 0, "bbox": [450, 126, 25, 19], "area": 369}, {"id": 5329231, "category_id": 3, "iscrowd": 0, "bbox": [312, 190, 52, 24], "area": 758}, {"id": 4078139, "category_id": 3, "iscrowd": 0, "bbox": [262, 229, 54, 15], "area": 337}, {"id": 2763318, "category_id": 3, "iscrowd": 0, "bbox": [265, 209, 26, 25], "area": 426}, {"id": 8548708, "category_id": 6, "iscrowd": 0, "bbox": [486, 224, 115, 122], "area": 13164}, {"id": 3228499, "category_id": 10, "iscrowd": 0, "bbox": [475, 11, 16, 32], "area": 430}, {"id": 3558500, "category_id": 10, "iscrowd": 0, "bbox": [599, 187, 10, 33], "area": 255}, {"id": 4805537, "category_id": 10, "iscrowd": 0, "bbox": [362, 82, 9, 6], "area": 47}, {"id": 5926130, "category_id": 10, "iscrowd": 0, "bbox": [451, 51, 4, 4], "area": 14}, {"id": 4739929, "category_id": 10, "iscrowd": 0, "bbox": [302, 84, 15, 27], "area": 350}, {"id": 5663884, "category_id": 10, "iscrowd": 0, "bbox": [300, 67, 8, 25], "area": 141}, {"id": 6649986, "category_id": 10, "iscrowd": 0, "bbox": [551, 119, 7, 15], "area": 72}, {"id": 2437189, "category_id": 10, "iscrowd": 0, "bbox": [96, 0, 35, 50], "area": 1566}, {"id": 4082783, "category_id": 10, "iscrowd": 0, "bbox": [248, 59, 21, 41], "area": 828}, {"id": 5664379, "category_id": 10, "iscrowd": 0, "bbox": [115, 157, 12, 42], "area": 464}, {"id": 1584435, "category_id": 10, "iscrowd": 0, "bbox": [626, 211, 11, 44], "area": 388}, {"id": 6978181, "category_id": 10, "iscrowd": 1, "bbox": [5, 109, 578, 85], "area": 1981}, {"id": 8611428, "category_id": 92, "iscrowd": 0, "bbox": [80, 108, 99, 75], "area": 3864}, {"id": 5726055, "category_id": 149, "iscrowd": 0, "bbox": [0, 110, 640, 274], "area": 74110}, {"id": 4741735, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 307], "area": 89435}, {"id": 4871519, "category_id": 191, "iscrowd": 0, "bbox": [14, 143, 612, 215], "area": 9419}], "file_name": "000000309391.png", "image_id": 309391}, {"segments_info": [{"id": 4100786, "category_id": 16, "iscrowd": 0, "bbox": [246, 135, 140, 340], "area": 25576}, {"id": 4094564, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 281465}], "file_name": "000000309452.png", "image_id": 309452}, {"segments_info": [{"id": 2234131, "category_id": 1, "iscrowd": 0, "bbox": [321, 97, 61, 162], "area": 4872}, {"id": 2957081, "category_id": 1, "iscrowd": 0, "bbox": [449, 88, 59, 153], "area": 4404}, {"id": 2102034, "category_id": 27, "iscrowd": 0, "bbox": [478, 107, 31, 47], "area": 1195}, {"id": 3283733, "category_id": 27, "iscrowd": 0, "bbox": [358, 129, 29, 39], "area": 853}, {"id": 6377808, "category_id": 35, "iscrowd": 0, "bbox": [442, 227, 84, 22], "area": 455}, {"id": 5258294, "category_id": 35, "iscrowd": 0, "bbox": [302, 245, 79, 20], "area": 566}, {"id": 10717058, "category_id": 159, "iscrowd": 0, "bbox": [0, 178, 640, 148], "area": 74153}, {"id": 7483919, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 250], "area": 121898}], "file_name": "000000309467.png", "image_id": 309467}, {"segments_info": [{"id": 5596290, "category_id": 1, "iscrowd": 0, "bbox": [1, 2, 532, 396], "area": 66294}, {"id": 4015175, "category_id": 18, "iscrowd": 0, "bbox": [3, 19, 530, 610], "area": 157940}, {"id": 11126732, "category_id": 90, "iscrowd": 0, "bbox": [204, 234, 108, 23], "area": 1575}, {"id": 9745596, "category_id": 90, "iscrowd": 0, "bbox": [203, 215, 215, 73], "area": 5872}, {"id": 9736582, "category_id": 93, "iscrowd": 0, "bbox": [0, 224, 486, 416], "area": 75272}, {"id": 998737, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 327, 76], "area": 10389}, {"id": 8878431, "category_id": 199, "iscrowd": 0, "bbox": [319, 0, 86, 44], "area": 2323}], "file_name": "000000309484.png", "image_id": 309484}, {"segments_info": [{"id": 8024178, "category_id": 70, "iscrowd": 0, "bbox": [138, 229, 188, 199], "area": 27520}, {"id": 2171943, "category_id": 112, "iscrowd": 0, "bbox": [298, 129, 28, 371], "area": 5017}, {"id": 5330008, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 326, 327], "area": 73473}, {"id": 11709094, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 278, 40], "area": 10492}, {"id": 5394783, "category_id": 190, "iscrowd": 0, "bbox": [0, 337, 302, 121], "area": 23882}, {"id": 5395542, "category_id": 195, "iscrowd": 0, "bbox": [128, 115, 56, 45], "area": 2134}, {"id": 1777438, "category_id": 199, "iscrowd": 0, "bbox": [38, 303, 119, 38], "area": 3226}, {"id": 9859443, "category_id": 200, "iscrowd": 0, "bbox": [0, 442, 303, 58], "area": 14069}], "file_name": "000000309495.png", "image_id": 309495}, {"segments_info": [{"id": 2958195, "category_id": 1, "iscrowd": 0, "bbox": [4, 213, 29, 86], "area": 1676}, {"id": 3813938, "category_id": 1, "iscrowd": 0, "bbox": [134, 231, 25, 44], "area": 482}, {"id": 4340071, "category_id": 1, "iscrowd": 0, "bbox": [25, 218, 20, 67], "area": 693}, {"id": 4273213, "category_id": 1, "iscrowd": 0, "bbox": [253, 219, 16, 53], "area": 516}, {"id": 5191470, "category_id": 1, "iscrowd": 0, "bbox": [236, 216, 20, 66], "area": 734}, {"id": 11838624, "category_id": 1, "iscrowd": 0, "bbox": [222, 233, 17, 44], "area": 488}, {"id": 4940408, "category_id": 1, "iscrowd": 0, "bbox": [1, 225, 5, 47], "area": 127}, {"id": 5785151, "category_id": 1, "iscrowd": 0, "bbox": [358, 226, 20, 57], "area": 703}, {"id": 5531014, "category_id": 1, "iscrowd": 0, "bbox": [90, 239, 22, 44], "area": 499}, {"id": 4142130, "category_id": 1, "iscrowd": 0, "bbox": [390, 225, 43, 67], "area": 1270}, {"id": 3419693, "category_id": 1, "iscrowd": 0, "bbox": [373, 232, 19, 47], "area": 463}, {"id": 3617074, "category_id": 1, "iscrowd": 0, "bbox": [242, 204, 116, 268], "area": 22141}, {"id": 4538433, "category_id": 1, "iscrowd": 0, "bbox": [67, 222, 28, 57], "area": 949}, {"id": 8612191, "category_id": 35, "iscrowd": 0, "bbox": [396, 290, 43, 4], "area": 33}, {"id": 7161912, "category_id": 35, "iscrowd": 0, "bbox": [390, 285, 12, 5], "area": 14}, {"id": 7494227, "category_id": 35, "iscrowd": 0, "bbox": [365, 277, 11, 5], "area": 14}, {"id": 9995905, "category_id": 35, "iscrowd": 0, "bbox": [0, 283, 56, 4], "area": 64}, {"id": 11969953, "category_id": 35, "iscrowd": 0, "bbox": [90, 281, 19, 2], "area": 18}, {"id": 10458516, "category_id": 36, "iscrowd": 0, "bbox": [7, 282, 51, 6], "area": 30}, {"id": 11506821, "category_id": 159, "iscrowd": 0, "bbox": [0, 129, 640, 351], "area": 108540}, {"id": 5720903, "category_id": 184, "iscrowd": 0, "bbox": [194, 0, 446, 324], "area": 46413}, {"id": 12814692, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 547, 240], "area": 100662}, {"id": 11968661, "category_id": 192, "iscrowd": 0, "bbox": [102, 194, 390, 82], "area": 6218}, {"id": 5656403, "category_id": 197, "iscrowd": 0, "bbox": [0, 142, 631, 180], "area": 13127}], "file_name": "000000309655.png", "image_id": 309655}, {"segments_info": [{"id": 1261455, "category_id": 1, "iscrowd": 0, "bbox": [0, 60, 192, 208], "area": 19667}, {"id": 274599, "category_id": 59, "iscrowd": 0, "bbox": [85, 93, 460, 232], "area": 84650}, {"id": 335694, "category_id": 67, "iscrowd": 0, "bbox": [0, 1, 597, 410], "area": 15272}, {"id": 398390, "category_id": 189, "iscrowd": 0, "bbox": [0, 384, 289, 27], "area": 1129}, {"id": 797771, "category_id": 190, "iscrowd": 0, "bbox": [400, 0, 240, 411], "area": 35070}, {"id": 2583970, "category_id": 195, "iscrowd": 0, "bbox": [36, 63, 535, 301], "area": 43343}, {"id": 801633, "category_id": 196, "iscrowd": 0, "bbox": [90, 0, 405, 53], "area": 16752}], "file_name": "000000309678.png", "image_id": 309678}, {"segments_info": [{"id": 4023684, "category_id": 18, "iscrowd": 0, "bbox": [101, 111, 338, 231], "area": 45437}, {"id": 7578800, "category_id": 84, "iscrowd": 0, "bbox": [439, 232, 171, 73], "area": 6161}, {"id": 6450286, "category_id": 84, "iscrowd": 0, "bbox": [521, 125, 119, 99], "area": 10155}, {"id": 7770522, "category_id": 84, "iscrowd": 0, "bbox": [437, 231, 104, 32], "area": 1015}, {"id": 11651279, "category_id": 84, "iscrowd": 0, "bbox": [538, 217, 102, 31], "area": 1913}, {"id": 5727341, "category_id": 84, "iscrowd": 0, "bbox": [395, 148, 143, 110], "area": 9401}, {"id": 9343647, "category_id": 84, "iscrowd": 0, "bbox": [1, 231, 280, 141], "area": 29046}, {"id": 5999010, "category_id": 100, "iscrowd": 0, "bbox": [0, 376, 330, 104], "area": 14203}, {"id": 10725026, "category_id": 141, "iscrowd": 0, "bbox": [500, 244, 140, 191], "area": 15432}, {"id": 3626345, "category_id": 156, "iscrowd": 0, "bbox": [65, 0, 575, 215], "area": 54153}, {"id": 15260102, "category_id": 168, "iscrowd": 0, "bbox": [85, 380, 155, 100], "area": 11915}, {"id": 12434101, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 42959}], "file_name": "000000309938.png", "image_id": 309938}, {"segments_info": [{"id": 9144206, "category_id": 1, "iscrowd": 0, "bbox": [91, 94, 159, 322], "area": 29958}, {"id": 5264480, "category_id": 1, "iscrowd": 0, "bbox": [341, 95, 184, 327], "area": 31386}, {"id": 8816255, "category_id": 3, "iscrowd": 0, "bbox": [542, 94, 98, 136], "area": 9179}, {"id": 3157566, "category_id": 27, "iscrowd": 0, "bbox": [243, 250, 88, 114], "area": 7276}, {"id": 6243130, "category_id": 28, "iscrowd": 0, "bbox": [2, 9, 553, 266], "area": 68728}, {"id": 5674894, "category_id": 184, "iscrowd": 0, "bbox": [0, 96, 85, 53], "area": 1469}, {"id": 16382456, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 111], "area": 23165}, {"id": 2124125, "category_id": 193, "iscrowd": 0, "bbox": [0, 242, 640, 185], "area": 44583}, {"id": 9212568, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 172], "area": 10187}], "file_name": "000000309964.png", "image_id": 309964}, {"segments_info": [{"id": 6446163, "category_id": 3, "iscrowd": 0, "bbox": [171, 0, 71, 37], "area": 1731}, {"id": 4605520, "category_id": 3, "iscrowd": 0, "bbox": [0, 2, 136, 66], "area": 6988}, {"id": 5525840, "category_id": 3, "iscrowd": 0, "bbox": [632, 8, 8, 15], "area": 92}, {"id": 3943714, "category_id": 8, "iscrowd": 0, "bbox": [229, 0, 252, 69], "area": 14296}, {"id": 2439992, "category_id": 15, "iscrowd": 0, "bbox": [120, 88, 408, 223], "area": 57668}, {"id": 11382703, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 640, 85], "area": 14028}, {"id": 3291192, "category_id": 161, "iscrowd": 0, "bbox": [600, 0, 24, 18], "area": 311}, {"id": 2698546, "category_id": 184, "iscrowd": 0, "bbox": [569, 0, 28, 13], "area": 288}, {"id": 3881263, "category_id": 185, "iscrowd": 0, "bbox": [64, 0, 158, 30], "area": 2221}, {"id": 11381412, "category_id": 191, "iscrowd": 0, "bbox": [0, 16, 640, 367], "area": 96153}, {"id": 2645335, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 375], "area": 48579}, {"id": 3355449, "category_id": 197, "iscrowd": 0, "bbox": [414, 0, 90, 15], "area": 617}], "file_name": "000000310072.png", "image_id": 310072}, {"segments_info": [{"id": 5855842, "category_id": 50, "iscrowd": 0, "bbox": [400, 139, 240, 36], "area": 4221}, {"id": 14737884, "category_id": 51, "iscrowd": 0, "bbox": [188, 1, 254, 75], "area": 13178}, {"id": 4418194, "category_id": 60, "iscrowd": 0, "bbox": [117, 84, 446, 341], "area": 95099}, {"id": 6579557, "category_id": 189, "iscrowd": 0, "bbox": [0, 68, 640, 151], "area": 13871}, {"id": 10003118, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 590, 324], "area": 43425}], "file_name": "000000310200.png", "image_id": 310200}, {"segments_info": [{"id": 14671068, "category_id": 187, "iscrowd": 0, "bbox": [46, 0, 488, 381], "area": 61492}, {"id": 6381150, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 212428}], "file_name": "000000310622.png", "image_id": 310622}, {"segments_info": [{"id": 3818604, "category_id": 1, "iscrowd": 0, "bbox": [6, 4, 571, 598], "area": 196380}, {"id": 4143759, "category_id": 32, "iscrowd": 0, "bbox": [187, 333, 122, 247], "area": 13454}, {"id": 6192538, "category_id": 67, "iscrowd": 0, "bbox": [520, 380, 43, 55], "area": 641}, {"id": 7900584, "category_id": 130, "iscrowd": 0, "bbox": [420, 228, 172, 65], "area": 2388}, {"id": 9682643, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 612, 286], "area": 86725}, {"id": 9351108, "category_id": 197, "iscrowd": 0, "bbox": [287, 287, 114, 60], "area": 3939}, {"id": 8040910, "category_id": 199, "iscrowd": 0, "bbox": [0, 193, 612, 300], "area": 48137}, {"id": 2777498, "category_id": 200, "iscrowd": 0, "bbox": [521, 454, 91, 158], "area": 8527}], "file_name": "000000310862.png", "image_id": 310862}, {"segments_info": [{"id": 7894135, "category_id": 73, "iscrowd": 0, "bbox": [0, 3, 557, 418], "area": 163790}, {"id": 1445647, "category_id": 76, "iscrowd": 0, "bbox": [51, 359, 349, 57], "area": 16438}, {"id": 198419, "category_id": 88, "iscrowd": 0, "bbox": [333, 153, 307, 274], "area": 55928}, {"id": 70190, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 410], "area": 31957}], "file_name": "000000310980.png", "image_id": 310980}, {"segments_info": [{"id": 5856862, "category_id": 1, "iscrowd": 0, "bbox": [276, 148, 65, 147], "area": 4399}, {"id": 4148286, "category_id": 1, "iscrowd": 0, "bbox": [619, 148, 21, 60], "area": 658}, {"id": 4538983, "category_id": 1, "iscrowd": 0, "bbox": [36, 149, 220, 273], "area": 39209}, {"id": 3879723, "category_id": 1, "iscrowd": 0, "bbox": [435, 192, 205, 230], "area": 29603}, {"id": 6779235, "category_id": 1, "iscrowd": 0, "bbox": [335, 157, 16, 58], "area": 560}, {"id": 7315368, "category_id": 37, "iscrowd": 0, "bbox": [274, 87, 8, 8], "area": 56}, {"id": 5463160, "category_id": 39, "iscrowd": 0, "bbox": [0, 136, 254, 151], "area": 4213}, {"id": 2109776, "category_id": 40, "iscrowd": 0, "bbox": [295, 196, 21, 16], "area": 167}, {"id": 4481653, "category_id": 40, "iscrowd": 0, "bbox": [349, 188, 3, 7], "area": 20}, {"id": 4415567, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 168], "area": 47179}, {"id": 4013877, "category_id": 185, "iscrowd": 0, "bbox": [168, 38, 472, 48], "area": 13301}, {"id": 15132895, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 150, 23], "area": 2124}, {"id": 4889475, "category_id": 193, "iscrowd": 0, "bbox": [0, 76, 640, 351], "area": 103824}, {"id": 5929377, "category_id": 194, "iscrowd": 0, "bbox": [0, 218, 557, 159], "area": 24334}], "file_name": "000000311002.png", "image_id": 311002}, {"segments_info": [{"id": 4223101, "category_id": 70, "iscrowd": 0, "bbox": [0, 533, 166, 107], "area": 15631}, {"id": 6459803, "category_id": 109, "iscrowd": 0, "bbox": [195, 0, 93, 565], "area": 30810}, {"id": 2573902, "category_id": 190, "iscrowd": 0, "bbox": [0, 498, 452, 142], "area": 26627}, {"id": 4094602, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 577], "area": 219784}], "file_name": "000000311081.png", "image_id": 311081}, {"segments_info": [{"id": 9535409, "category_id": 1, "iscrowd": 0, "bbox": [1, 103, 446, 537], "area": 122032}, {"id": 8232312, "category_id": 87, "iscrowd": 0, "bbox": [95, 307, 384, 177], "area": 26053}, {"id": 3031603, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 558], "area": 68927}, {"id": 8813675, "category_id": 191, "iscrowd": 0, "bbox": [0, 518, 480, 122], "area": 20699}, {"id": 4474951, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 480, 542], "area": 67119}], "file_name": "000000311180.png", "image_id": 311180}, {"segments_info": [{"id": 8815000, "category_id": 1, "iscrowd": 0, "bbox": [0, 46, 24, 113], "area": 2185}, {"id": 5004412, "category_id": 18, "iscrowd": 0, "bbox": [44, 151, 284, 341], "area": 71539}, {"id": 9471930, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 208, 213], "area": 7949}, {"id": 15724272, "category_id": 181, "iscrowd": 0, "bbox": [143, 0, 232, 58], "area": 9831}], "file_name": "000000311190.png", "image_id": 311190}, {"segments_info": [{"id": 7701137, "category_id": 24, "iscrowd": 0, "bbox": [90, 215, 15, 40], "area": 431}, {"id": 8227223, "category_id": 24, "iscrowd": 0, "bbox": [31, 213, 47, 42], "area": 990}, {"id": 7766413, "category_id": 24, "iscrowd": 0, "bbox": [221, 226, 45, 47], "area": 1198}, {"id": 6977929, "category_id": 24, "iscrowd": 0, "bbox": [499, 227, 76, 63], "area": 2379}, {"id": 7243680, "category_id": 25, "iscrowd": 0, "bbox": [465, 169, 21, 77], "area": 641}, {"id": 7311005, "category_id": 25, "iscrowd": 0, "bbox": [246, 203, 20, 35], "area": 337}, {"id": 7501957, "category_id": 25, "iscrowd": 0, "bbox": [204, 159, 6, 11], "area": 50}, {"id": 6321278, "category_id": 25, "iscrowd": 0, "bbox": [245, 180, 47, 59], "area": 1006}, {"id": 8031131, "category_id": 25, "iscrowd": 0, "bbox": [227, 168, 6, 9], "area": 38}, {"id": 7304576, "category_id": 25, "iscrowd": 0, "bbox": [398, 177, 21, 29], "area": 275}, {"id": 7435636, "category_id": 184, "iscrowd": 0, "bbox": [0, 86, 640, 173], "area": 68166}, {"id": 15457494, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 154], "area": 83716}, {"id": 7181237, "category_id": 193, "iscrowd": 0, "bbox": [0, 222, 640, 205], "area": 111081}, {"id": 7703975, "category_id": 194, "iscrowd": 0, "bbox": [487, 250, 74, 26], "area": 268}], "file_name": "000000311295.png", "image_id": 311295}, {"segments_info": [{"id": 1774866, "category_id": 1, "iscrowd": 0, "bbox": [0, 1, 246, 66], "area": 14844}, {"id": 10583148, "category_id": 47, "iscrowd": 0, "bbox": [353, 56, 269, 353], "area": 65581}, {"id": 2832961, "category_id": 49, "iscrowd": 0, "bbox": [0, 201, 62, 25], "area": 979}, {"id": 1391207, "category_id": 54, "iscrowd": 0, "bbox": [92, 95, 124, 86], "area": 6450}, {"id": 3166841, "category_id": 54, "iscrowd": 0, "bbox": [102, 148, 180, 121], "area": 16276}, {"id": 10459017, "category_id": 62, "iscrowd": 0, "bbox": [547, 0, 85, 92], "area": 2216}, {"id": 14472642, "category_id": 62, "iscrowd": 0, "bbox": [523, 1, 20, 68], "area": 406}, {"id": 2769502, "category_id": 67, "iscrowd": 0, "bbox": [1, 55, 639, 372], "area": 128792}, {"id": 8422531, "category_id": 190, "iscrowd": 0, "bbox": [239, 0, 401, 343], "area": 30670}], "file_name": "000000311303.png", "image_id": 311303}, {"segments_info": [{"id": 1316377, "category_id": 1, "iscrowd": 0, "bbox": [491, 131, 68, 144], "area": 6552}, {"id": 2632494, "category_id": 1, "iscrowd": 0, "bbox": [596, 185, 14, 25], "area": 258}, {"id": 5529704, "category_id": 1, "iscrowd": 0, "bbox": [611, 189, 29, 34], "area": 365}, {"id": 4674653, "category_id": 21, "iscrowd": 0, "bbox": [0, 76, 505, 351], "area": 130862}, {"id": 12170934, "category_id": 130, "iscrowd": 0, "bbox": [286, 43, 25, 18], "area": 292}, {"id": 3557697, "category_id": 144, "iscrowd": 0, "bbox": [532, 240, 108, 61], "area": 3482}, {"id": 6910574, "category_id": 185, "iscrowd": 0, "bbox": [437, 263, 203, 164], "area": 23314}, {"id": 2172455, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 453, 108], "area": 29881}, {"id": 2310220, "category_id": 193, "iscrowd": 0, "bbox": [96, 311, 432, 116], "area": 20026}, {"id": 9473160, "category_id": 195, "iscrowd": 0, "bbox": [222, 0, 418, 204], "area": 13899}, {"id": 5198931, "category_id": 197, "iscrowd": 0, "bbox": [235, 0, 405, 230], "area": 38329}, {"id": 4080710, "category_id": 199, "iscrowd": 0, "bbox": [557, 208, 83, 38], "area": 1360}], "file_name": "000000311392.png", "image_id": 311392}, {"segments_info": [{"id": 6710903, "category_id": 1, "iscrowd": 0, "bbox": [3, 6, 477, 618], "area": 195209}, {"id": 12628623, "category_id": 90, "iscrowd": 0, "bbox": [155, 208, 54, 292], "area": 9478}], "file_name": "000000311394.png", "image_id": 311394}, {"segments_info": [{"id": 5471320, "category_id": 9, "iscrowd": 0, "bbox": [188, 203, 305, 82], "area": 13339}, {"id": 8487548, "category_id": 178, "iscrowd": 0, "bbox": [0, 128, 640, 299], "area": 167686}, {"id": 7047297, "category_id": 184, "iscrowd": 0, "bbox": [17, 0, 623, 127], "area": 23918}, {"id": 16052719, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 360, 75], "area": 15832}, {"id": 6924206, "category_id": 193, "iscrowd": 0, "bbox": [0, 65, 640, 95], "area": 32759}, {"id": 9082764, "category_id": 197, "iscrowd": 0, "bbox": [220, 0, 420, 106], "area": 19580}], "file_name": "000000311518.png", "image_id": 311518}, {"segments_info": [{"id": 2042678, "category_id": 17, "iscrowd": 0, "bbox": [3, 2, 637, 396], "area": 167358}, {"id": 3556944, "category_id": 76, "iscrowd": 0, "bbox": [0, 211, 180, 77], "area": 12212}, {"id": 3628179, "category_id": 118, "iscrowd": 0, "bbox": [0, 272, 640, 155], "area": 63277}], "file_name": "000000311789.png", "image_id": 311789}, {"segments_info": [{"id": 4211787, "category_id": 7, "iscrowd": 0, "bbox": [56, 112, 584, 104], "area": 36922}, {"id": 5851204, "category_id": 10, "iscrowd": 0, "bbox": [505, 140, 19, 13], "area": 152}, {"id": 9865084, "category_id": 10, "iscrowd": 0, "bbox": [482, 140, 12, 14], "area": 86}, {"id": 4010820, "category_id": 10, "iscrowd": 0, "bbox": [37, 160, 16, 11], "area": 137}, {"id": 7496285, "category_id": 10, "iscrowd": 0, "bbox": [509, 124, 16, 15], "area": 178}, {"id": 7630982, "category_id": 10, "iscrowd": 0, "bbox": [525, 126, 15, 13], "area": 168}, {"id": 2235421, "category_id": 10, "iscrowd": 0, "bbox": [27, 160, 11, 10], "area": 86}, {"id": 3486777, "category_id": 147, "iscrowd": 0, "bbox": [0, 195, 531, 43], "area": 3566}, {"id": 7969945, "category_id": 184, "iscrowd": 0, "bbox": [522, 193, 118, 22], "area": 1956}, {"id": 14595198, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 201], "area": 90655}, {"id": 13092551, "category_id": 191, "iscrowd": 0, "bbox": [162, 206, 478, 25], "area": 6670}, {"id": 8030076, "category_id": 192, "iscrowd": 0, "bbox": [0, 194, 56, 23], "area": 855}], "file_name": "000000311883.png", "image_id": 311883}, {"segments_info": [{"id": 7168599, "category_id": 6, "iscrowd": 0, "bbox": [0, 47, 640, 401], "area": 177682}, {"id": 6252138, "category_id": 149, "iscrowd": 0, "bbox": [0, 324, 640, 172], "area": 51199}, {"id": 6180940, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 368], "area": 46435}, {"id": 13538653, "category_id": 187, "iscrowd": 0, "bbox": [356, 0, 284, 220], "area": 32900}, {"id": 4081742, "category_id": 191, "iscrowd": 0, "bbox": [0, 393, 55, 37], "area": 1324}], "file_name": "000000311909.png", "image_id": 311909}, {"segments_info": [{"id": 10127505, "category_id": 1, "iscrowd": 0, "bbox": [77, 31, 178, 359], "area": 44998}, {"id": 9678522, "category_id": 37, "iscrowd": 0, "bbox": [595, 207, 45, 46], "area": 1708}, {"id": 10790316, "category_id": 39, "iscrowd": 0, "bbox": [250, 272, 307, 64], "area": 6904}, {"id": 4478545, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 398], "area": 168205}, {"id": 3422524, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 590, 278], "area": 31765}], "file_name": "000000311928.png", "image_id": 311928}, {"segments_info": [{"id": 5669561, "category_id": 58, "iscrowd": 0, "bbox": [153, 170, 142, 287], "area": 34290}, {"id": 13158346, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 448, 640], "area": 252310}], "file_name": "000000311950.png", "image_id": 311950}, {"segments_info": [{"id": 3029111, "category_id": 1, "iscrowd": 0, "bbox": [299, 12, 341, 212], "area": 33955}, {"id": 3627879, "category_id": 44, "iscrowd": 0, "bbox": [13, 2, 135, 216], "area": 15255}, {"id": 3361100, "category_id": 44, "iscrowd": 0, "bbox": [0, 150, 29, 64], "area": 1309}, {"id": 5075855, "category_id": 46, "iscrowd": 0, "bbox": [0, 21, 88, 256], "area": 12886}, {"id": 5208743, "category_id": 46, "iscrowd": 0, "bbox": [128, 0, 43, 59], "area": 1296}, {"id": 4943514, "category_id": 46, "iscrowd": 0, "bbox": [183, 3, 47, 72], "area": 1455}, {"id": 5144752, "category_id": 48, "iscrowd": 0, "bbox": [239, 72, 65, 33], "area": 679}, {"id": 5208479, "category_id": 48, "iscrowd": 0, "bbox": [138, 87, 74, 25], "area": 634}, {"id": 4486314, "category_id": 51, "iscrowd": 0, "bbox": [235, 25, 221, 56], "area": 5373}, {"id": 2701930, "category_id": 59, "iscrowd": 0, "bbox": [47, 136, 557, 280], "area": 101531}, {"id": 4350605, "category_id": 67, "iscrowd": 0, "bbox": [4, 99, 636, 373], "area": 87451}, {"id": 5208750, "category_id": 189, "iscrowd": 0, "bbox": [0, 31, 640, 449], "area": 12973}, {"id": 7317719, "category_id": 195, "iscrowd": 0, "bbox": [140, 84, 94, 41], "area": 2396}], "file_name": "000000312192.png", "image_id": 312192}, {"segments_info": [{"id": 5856613, "category_id": 17, "iscrowd": 0, "bbox": [312, 26, 328, 448], "area": 101111}, {"id": 10525077, "category_id": 73, "iscrowd": 0, "bbox": [0, 3, 400, 425], "area": 139172}, {"id": 987410, "category_id": 156, "iscrowd": 0, "bbox": [310, 0, 330, 302], "area": 27661}, {"id": 1580322, "category_id": 199, "iscrowd": 0, "bbox": [306, 0, 146, 85], "area": 5040}], "file_name": "000000312213.png", "image_id": 312213}, {"segments_info": [{"id": 2632481, "category_id": 1, "iscrowd": 0, "bbox": [24, 240, 7, 12], "area": 51}, {"id": 4481140, "category_id": 1, "iscrowd": 0, "bbox": [278, 212, 11, 20], "area": 107}, {"id": 4347761, "category_id": 1, "iscrowd": 0, "bbox": [386, 202, 37, 34], "area": 557}, {"id": 5466754, "category_id": 1, "iscrowd": 0, "bbox": [311, 209, 7, 15], "area": 50}, {"id": 3296102, "category_id": 1, "iscrowd": 0, "bbox": [481, 216, 12, 8], "area": 56}, {"id": 2371643, "category_id": 1, "iscrowd": 0, "bbox": [330, 177, 21, 65], "area": 669}, {"id": 4021368, "category_id": 1, "iscrowd": 0, "bbox": [315, 218, 6, 13], "area": 65}, {"id": 4678003, "category_id": 1, "iscrowd": 0, "bbox": [470, 211, 15, 27], "area": 126}, {"id": 5858408, "category_id": 1, "iscrowd": 0, "bbox": [258, 227, 3, 5], "area": 11}, {"id": 2239029, "category_id": 1, "iscrowd": 0, "bbox": [211, 223, 9, 16], "area": 66}, {"id": 5862285, "category_id": 1, "iscrowd": 0, "bbox": [400, 190, 42, 42], "area": 454}, {"id": 4146561, "category_id": 1, "iscrowd": 0, "bbox": [110, 196, 5, 12], "area": 45}, {"id": 7307917, "category_id": 1, "iscrowd": 1, "bbox": [131, 226, 84, 23], "area": 506}, {"id": 6057333, "category_id": 9, "iscrowd": 0, "bbox": [462, 223, 38, 14], "area": 343}, {"id": 7838098, "category_id": 9, "iscrowd": 0, "bbox": [93, 222, 18, 20], "area": 204}, {"id": 2107173, "category_id": 27, "iscrowd": 0, "bbox": [341, 200, 16, 26], "area": 134}, {"id": 2320338, "category_id": 28, "iscrowd": 0, "bbox": [376, 214, 16, 6], "area": 67}, {"id": 5277076, "category_id": 28, "iscrowd": 0, "bbox": [424, 183, 59, 46], "area": 717}, {"id": 1118482, "category_id": 31, "iscrowd": 0, "bbox": [348, 203, 5, 15], "area": 53}, {"id": 658702, "category_id": 31, "iscrowd": 0, "bbox": [347, 218, 11, 8], "area": 60}, {"id": 7590859, "category_id": 38, "iscrowd": 0, "bbox": [187, 230, 112, 18], "area": 682}, {"id": 7838109, "category_id": 38, "iscrowd": 0, "bbox": [154, 208, 5, 9], "area": 37}, {"id": 9482688, "category_id": 154, "iscrowd": 0, "bbox": [0, 197, 500, 137], "area": 51592}, {"id": 6581598, "category_id": 155, "iscrowd": 0, "bbox": [0, 230, 169, 52], "area": 4692}, {"id": 10058078, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 178], "area": 79321}, {"id": 5265237, "category_id": 192, "iscrowd": 0, "bbox": [0, 139, 500, 106], "area": 25804}], "file_name": "000000312237.png", "image_id": 312237}, {"segments_info": [{"id": 5658198, "category_id": 85, "iscrowd": 0, "bbox": [230, 549, 73, 64], "area": 3683}, {"id": 13948116, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 527, 154], "area": 13107}, {"id": 3421236, "category_id": 197, "iscrowd": 0, "bbox": [0, 7, 527, 633], "area": 307729}], "file_name": "000000312263.png", "image_id": 312263}, {"segments_info": [{"id": 5927060, "category_id": 33, "iscrowd": 0, "bbox": [61, 25, 314, 210], "area": 58540}, {"id": 3031667, "category_id": 33, "iscrowd": 0, "bbox": [373, 61, 242, 188], "area": 35179}, {"id": 11828285, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 293], "area": 50515}], "file_name": "000000312278.png", "image_id": 312278}, {"segments_info": [{"id": 5790039, "category_id": 17, "iscrowd": 0, "bbox": [140, 112, 267, 232], "area": 38714}, {"id": 5856085, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 640, 265], "area": 114989}, {"id": 4346456, "category_id": 184, "iscrowd": 0, "bbox": [0, 23, 640, 402], "area": 118060}], "file_name": "000000312340.png", "image_id": 312340}, {"segments_info": [{"id": 5874893, "category_id": 51, "iscrowd": 0, "bbox": [413, 192, 117, 108], "area": 9752}, {"id": 225961, "category_id": 52, "iscrowd": 0, "bbox": [41, 132, 253, 231], "area": 22528}, {"id": 3370902, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 274610}], "file_name": "000000312406.png", "image_id": 312406}, {"segments_info": [{"id": 10720660, "category_id": 1, "iscrowd": 0, "bbox": [432, 144, 48, 108], "area": 3305}, {"id": 3352611, "category_id": 1, "iscrowd": 0, "bbox": [186, 106, 64, 48], "area": 2415}, {"id": 14666693, "category_id": 1, "iscrowd": 0, "bbox": [38, 111, 32, 93], "area": 1859}, {"id": 14996671, "category_id": 1, "iscrowd": 0, "bbox": [589, 137, 51, 123], "area": 3576}, {"id": 14864338, "category_id": 1, "iscrowd": 0, "bbox": [496, 121, 91, 140], "area": 7681}, {"id": 3747368, "category_id": 1, "iscrowd": 0, "bbox": [0, 240, 164, 187], "area": 17872}, {"id": 14404539, "category_id": 4, "iscrowd": 0, "bbox": [26, 111, 101, 203], "area": 7339}, {"id": 14083050, "category_id": 28, "iscrowd": 0, "bbox": [57, 2, 426, 150], "area": 41713}, {"id": 15071480, "category_id": 28, "iscrowd": 0, "bbox": [529, 0, 111, 139], "area": 12143}, {"id": 3486777, "category_id": 33, "iscrowd": 0, "bbox": [126, 137, 313, 276], "area": 76472}, {"id": 14542824, "category_id": 67, "iscrowd": 0, "bbox": [135, 378, 505, 44], "area": 11973}, {"id": 10792897, "category_id": 67, "iscrowd": 0, "bbox": [525, 294, 115, 95], "area": 6275}, {"id": 13553359, "category_id": 149, "iscrowd": 0, "bbox": [0, 187, 640, 172], "area": 6609}, {"id": 12304322, "category_id": 189, "iscrowd": 0, "bbox": [153, 299, 487, 128], "area": 7937}, {"id": 15330285, "category_id": 191, "iscrowd": 0, "bbox": [439, 238, 201, 168], "area": 12030}, {"id": 15920879, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 624, 238], "area": 44291}], "file_name": "000000312421.png", "image_id": 312421}, {"segments_info": [{"id": 5858426, "category_id": 1, "iscrowd": 0, "bbox": [204, 84, 94, 196], "area": 6783}, {"id": 9474718, "category_id": 1, "iscrowd": 0, "bbox": [49, 100, 69, 186], "area": 7771}, {"id": 8158839, "category_id": 9, "iscrowd": 0, "bbox": [194, 43, 10, 5], "area": 34}, {"id": 5996960, "category_id": 42, "iscrowd": 0, "bbox": [178, 154, 188, 55], "area": 4187}, {"id": 11519964, "category_id": 154, "iscrowd": 0, "bbox": [0, 25, 500, 308], "area": 29774}, {"id": 11250854, "category_id": 155, "iscrowd": 0, "bbox": [0, 9, 500, 298], "area": 100675}, {"id": 7959147, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 67], "area": 13921}, {"id": 9470329, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 39, 16], "area": 465}, {"id": 9011838, "category_id": 197, "iscrowd": 0, "bbox": [298, 0, 105, 30], "area": 2425}], "file_name": "000000312489.png", "image_id": 312489}, {"segments_info": [{"id": 5987158, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 131160}, {"id": 4209453, "category_id": 181, "iscrowd": 0, "bbox": [140, 270, 489, 210], "area": 31769}, {"id": 16110736, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 620, 256], "area": 103249}], "file_name": "000000312549.png", "image_id": 312549}, {"segments_info": [{"id": 3221557, "category_id": 1, "iscrowd": 0, "bbox": [111, 47, 288, 248], "area": 44229}, {"id": 2829137, "category_id": 59, "iscrowd": 0, "bbox": [166, 130, 41, 32], "area": 798}, {"id": 5265508, "category_id": 107, "iscrowd": 0, "bbox": [328, 128, 72, 151], "area": 4719}, {"id": 4080472, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 400, 300], "area": 59489}], "file_name": "000000312552.png", "image_id": 312552}, {"segments_info": [{"id": 1252119, "category_id": 23, "iscrowd": 0, "bbox": [388, 120, 60, 36], "area": 1431}, {"id": 4015431, "category_id": 23, "iscrowd": 0, "bbox": [180, 244, 260, 139], "area": 24662}, {"id": 922382, "category_id": 23, "iscrowd": 0, "bbox": [536, 43, 53, 42], "area": 1250}, {"id": 3029818, "category_id": 184, "iscrowd": 0, "bbox": [215, 0, 58, 88], "area": 3641}, {"id": 6525060, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 242692}], "file_name": "000000312586.png", "image_id": 312586}, {"segments_info": [{"id": 4405022, "category_id": 1, "iscrowd": 0, "bbox": [404, 229, 39, 79], "area": 1514}, {"id": 5791831, "category_id": 35, "iscrowd": 0, "bbox": [383, 285, 66, 30], "area": 315}, {"id": 12964568, "category_id": 159, "iscrowd": 0, "bbox": [0, 336, 640, 91], "area": 46951}, {"id": 7898770, "category_id": 184, "iscrowd": 0, "bbox": [180, 334, 126, 25], "area": 958}, {"id": 11176053, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 219572}, {"id": 7835555, "category_id": 197, "iscrowd": 0, "bbox": [362, 341, 46, 32], "area": 706}], "file_name": "000000312720.png", "image_id": 312720}, {"segments_info": [{"id": 4616563, "category_id": 1, "iscrowd": 0, "bbox": [295, 89, 254, 385], "area": 63327}, {"id": 6186381, "category_id": 1, "iscrowd": 0, "bbox": [2, 110, 323, 363], "area": 71593}, {"id": 3945782, "category_id": 1, "iscrowd": 0, "bbox": [289, 141, 22, 61], "area": 663}, {"id": 2041664, "category_id": 44, "iscrowd": 0, "bbox": [596, 205, 6, 14], "area": 78}, {"id": 2302742, "category_id": 44, "iscrowd": 0, "bbox": [232, 181, 19, 83], "area": 953}, {"id": 4539717, "category_id": 44, "iscrowd": 0, "bbox": [192, 229, 16, 37], "area": 443}, {"id": 2698817, "category_id": 47, "iscrowd": 0, "bbox": [603, 275, 10, 13], "area": 112}, {"id": 6386052, "category_id": 48, "iscrowd": 0, "bbox": [305, 276, 26, 55], "area": 473}, {"id": 12109274, "category_id": 61, "iscrowd": 0, "bbox": [216, 278, 96, 53], "area": 3403}, {"id": 1450304, "category_id": 85, "iscrowd": 0, "bbox": [554, 170, 21, 22], "area": 344}, {"id": 5133188, "category_id": 100, "iscrowd": 0, "bbox": [249, 329, 20, 5], "area": 59}, {"id": 6322052, "category_id": 112, "iscrowd": 0, "bbox": [44, 24, 150, 209], "area": 12257}, {"id": 395806, "category_id": 118, "iscrowd": 0, "bbox": [527, 379, 113, 101], "area": 5252}, {"id": 1972786, "category_id": 119, "iscrowd": 0, "bbox": [299, 375, 60, 91], "area": 2864}, {"id": 527132, "category_id": 156, "iscrowd": 0, "bbox": [399, 113, 241, 232], "area": 6168}, {"id": 1515557, "category_id": 177, "iscrowd": 0, "bbox": [484, 51, 156, 291], "area": 10016}, {"id": 4869458, "category_id": 186, "iscrowd": 0, "bbox": [115, 0, 525, 165], "area": 26040}, {"id": 2503230, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 309], "area": 55492}, {"id": 395027, "category_id": 200, "iscrowd": 0, "bbox": [544, 375, 71, 89], "area": 4105}], "file_name": "000000313034.png", "image_id": 313034}, {"segments_info": [{"id": 2965860, "category_id": 62, "iscrowd": 0, "bbox": [49, 124, 78, 154], "area": 5433}, {"id": 4740978, "category_id": 62, "iscrowd": 0, "bbox": [93, 134, 35, 25], "area": 679}, {"id": 9472392, "category_id": 78, "iscrowd": 0, "bbox": [388, 128, 134, 98], "area": 11154}, {"id": 7299425, "category_id": 82, "iscrowd": 0, "bbox": [181, 73, 205, 401], "area": 75833}, {"id": 2312077, "category_id": 118, "iscrowd": 0, "bbox": [0, 393, 640, 87], "area": 26666}, {"id": 5267054, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 239, 382], "area": 48363}, {"id": 4153477, "category_id": 188, "iscrowd": 0, "bbox": [284, 0, 314, 431], "area": 71635}, {"id": 11187386, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 454], "area": 64694}], "file_name": "000000313130.png", "image_id": 313130}, {"segments_info": [{"id": 3489597, "category_id": 1, "iscrowd": 0, "bbox": [426, 213, 13, 42], "area": 269}, {"id": 8621441, "category_id": 1, "iscrowd": 0, "bbox": [303, 222, 6, 13], "area": 60}, {"id": 2633259, "category_id": 1, "iscrowd": 0, "bbox": [413, 235, 18, 19], "area": 267}, {"id": 4994633, "category_id": 1, "iscrowd": 0, "bbox": [0, 252, 58, 144], "area": 3639}, {"id": 2963773, "category_id": 1, "iscrowd": 0, "bbox": [248, 228, 12, 23], "area": 71}, {"id": 2236709, "category_id": 1, "iscrowd": 0, "bbox": [43, 241, 33, 97], "area": 1161}, {"id": 1908774, "category_id": 1, "iscrowd": 0, "bbox": [4, 241, 37, 44], "area": 487}, {"id": 4276790, "category_id": 1, "iscrowd": 0, "bbox": [362, 211, 25, 43], "area": 526}, {"id": 4472909, "category_id": 3, "iscrowd": 0, "bbox": [565, 245, 14, 21], "area": 239}, {"id": 8159342, "category_id": 3, "iscrowd": 0, "bbox": [565, 230, 30, 13], "area": 266}, {"id": 7696240, "category_id": 6, "iscrowd": 0, "bbox": [180, 129, 394, 259], "area": 74919}, {"id": 2759446, "category_id": 31, "iscrowd": 0, "bbox": [18, 282, 32, 61], "area": 751}, {"id": 4670015, "category_id": 31, "iscrowd": 0, "bbox": [50, 278, 26, 36], "area": 477}, {"id": 8880506, "category_id": 149, "iscrowd": 0, "bbox": [94, 255, 546, 169], "area": 46711}, {"id": 6781828, "category_id": 184, "iscrowd": 0, "bbox": [0, 48, 640, 224], "area": 20250}, {"id": 6840409, "category_id": 185, "iscrowd": 0, "bbox": [47, 257, 162, 167], "area": 6535}, {"id": 16645627, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 189], "area": 85068}, {"id": 7761511, "category_id": 191, "iscrowd": 0, "bbox": [0, 259, 593, 165], "area": 7459}, {"id": 3561293, "category_id": 193, "iscrowd": 0, "bbox": [568, 237, 72, 39], "area": 1670}, {"id": 7960951, "category_id": 197, "iscrowd": 0, "bbox": [48, 96, 164, 178], "area": 18638}], "file_name": "000000313182.png", "image_id": 313182}, {"segments_info": [{"id": 3419958, "category_id": 1, "iscrowd": 0, "bbox": [10, 76, 128, 308], "area": 19186}, {"id": 9490152, "category_id": 32, "iscrowd": 0, "bbox": [88, 148, 21, 79], "area": 670}, {"id": 2249782, "category_id": 44, "iscrowd": 0, "bbox": [308, 265, 15, 48], "area": 542}, {"id": 2644025, "category_id": 44, "iscrowd": 0, "bbox": [388, 267, 13, 42], "area": 360}, {"id": 5727864, "category_id": 46, "iscrowd": 0, "bbox": [325, 278, 17, 38], "area": 423}, {"id": 1256045, "category_id": 62, "iscrowd": 0, "bbox": [262, 254, 50, 58], "area": 2226}, {"id": 1057587, "category_id": 64, "iscrowd": 0, "bbox": [138, 123, 167, 136], "area": 8499}, {"id": 2903682, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 293, 388], "area": 46675}, {"id": 7772322, "category_id": 119, "iscrowd": 0, "bbox": [386, 255, 93, 59], "area": 3135}, {"id": 1383470, "category_id": 177, "iscrowd": 0, "bbox": [308, 0, 303, 63], "area": 4539}, {"id": 6255493, "category_id": 181, "iscrowd": 0, "bbox": [462, 8, 131, 54], "area": 3944}, {"id": 2116222, "category_id": 199, "iscrowd": 0, "bbox": [276, 0, 364, 311], "area": 29815}], "file_name": "000000313454.png", "image_id": 313454}, {"segments_info": [{"id": 10071216, "category_id": 1, "iscrowd": 0, "bbox": [24, 105, 93, 207], "area": 12022}, {"id": 5985631, "category_id": 1, "iscrowd": 0, "bbox": [267, 49, 369, 423], "area": 96652}, {"id": 7121353, "category_id": 52, "iscrowd": 0, "bbox": [0, 263, 79, 85], "area": 3547}, {"id": 6127573, "category_id": 57, "iscrowd": 0, "bbox": [74, 408, 74, 32], "area": 627}, {"id": 6979269, "category_id": 57, "iscrowd": 0, "bbox": [51, 428, 28, 38], "area": 536}, {"id": 5270719, "category_id": 57, "iscrowd": 0, "bbox": [0, 402, 288, 78], "area": 14020}, {"id": 7902904, "category_id": 100, "iscrowd": 0, "bbox": [73, 20, 567, 388], "area": 49528}, {"id": 5987155, "category_id": 112, "iscrowd": 0, "bbox": [0, 161, 37, 98], "area": 2227}, {"id": 14999768, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 347, 109], "area": 12043}, {"id": 2120149, "category_id": 189, "iscrowd": 0, "bbox": [0, 302, 459, 178], "area": 18677}, {"id": 14795711, "category_id": 195, "iscrowd": 0, "bbox": [46, 445, 84, 35], "area": 1598}, {"id": 7113419, "category_id": 196, "iscrowd": 0, "bbox": [212, 142, 157, 338], "area": 1939}, {"id": 11515327, "category_id": 199, "iscrowd": 0, "bbox": [323, 128, 289, 90], "area": 5604}], "file_name": "000000313562.png", "image_id": 313562}, {"segments_info": [{"id": 1578261, "category_id": 1, "iscrowd": 0, "bbox": [341, 232, 139, 344], "area": 24532}, {"id": 9604486, "category_id": 3, "iscrowd": 0, "bbox": [152, 285, 44, 28], "area": 967}, {"id": 8157557, "category_id": 8, "iscrowd": 0, "bbox": [230, 248, 106, 87], "area": 7908}, {"id": 3678546, "category_id": 28, "iscrowd": 0, "bbox": [347, 190, 133, 99], "area": 7679}, {"id": 3419692, "category_id": 31, "iscrowd": 0, "bbox": [417, 323, 63, 79], "area": 3280}, {"id": 3422777, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 147, 101], "area": 6920}, {"id": 2501164, "category_id": 185, "iscrowd": 0, "bbox": [347, 272, 133, 53], "area": 794}, {"id": 16316664, "category_id": 187, "iscrowd": 0, "bbox": [14, 0, 229, 97], "area": 14509}, {"id": 6449000, "category_id": 191, "iscrowd": 0, "bbox": [0, 286, 480, 354], "area": 133320}, {"id": 6318705, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 327], "area": 106885}], "file_name": "000000313588.png", "image_id": 313588}, {"segments_info": [{"id": 8552313, "category_id": 48, "iscrowd": 0, "bbox": [362, 4, 138, 205], "area": 6022}, {"id": 2438288, "category_id": 57, "iscrowd": 0, "bbox": [39, 136, 62, 49], "area": 2121}, {"id": 2833057, "category_id": 57, "iscrowd": 0, "bbox": [6, 82, 55, 34], "area": 1313}, {"id": 3096727, "category_id": 57, "iscrowd": 0, "bbox": [80, 81, 63, 65], "area": 2989}, {"id": 2106229, "category_id": 57, "iscrowd": 0, "bbox": [26, 101, 60, 54], "area": 1757}, {"id": 3951269, "category_id": 57, "iscrowd": 0, "bbox": [1, 26, 65, 126], "area": 4302}, {"id": 2110870, "category_id": 57, "iscrowd": 0, "bbox": [1, 146, 48, 75], "area": 2744}, {"id": 4084595, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 496, 375], "area": 131846}], "file_name": "000000313783.png", "image_id": 313783}, {"segments_info": [{"id": 8353658, "category_id": 16, "iscrowd": 0, "bbox": [457, 292, 29, 11], "area": 181}, {"id": 6573639, "category_id": 16, "iscrowd": 0, "bbox": [320, 301, 8, 6], "area": 32}, {"id": 6971231, "category_id": 16, "iscrowd": 0, "bbox": [328, 292, 20, 10], "area": 120}, {"id": 10461094, "category_id": 16, "iscrowd": 0, "bbox": [406, 299, 27, 16], "area": 203}, {"id": 8420997, "category_id": 16, "iscrowd": 0, "bbox": [328, 297, 18, 11], "area": 114}, {"id": 5192244, "category_id": 16, "iscrowd": 0, "bbox": [235, 296, 17, 5], "area": 62}, {"id": 7105137, "category_id": 16, "iscrowd": 0, "bbox": [349, 294, 29, 11], "area": 163}, {"id": 6709092, "category_id": 16, "iscrowd": 0, "bbox": [379, 294, 31, 14], "area": 182}, {"id": 9208710, "category_id": 16, "iscrowd": 0, "bbox": [504, 291, 26, 13], "area": 200}, {"id": 1453404, "category_id": 21, "iscrowd": 0, "bbox": [327, 219, 62, 59], "area": 1584}, {"id": 1914216, "category_id": 21, "iscrowd": 0, "bbox": [145, 201, 68, 29], "area": 1220}, {"id": 2111585, "category_id": 21, "iscrowd": 0, "bbox": [25, 205, 70, 40], "area": 1725}, {"id": 2373724, "category_id": 21, "iscrowd": 0, "bbox": [121, 197, 40, 34], "area": 391}, {"id": 2964830, "category_id": 21, "iscrowd": 0, "bbox": [244, 215, 37, 64], "area": 1417}, {"id": 4676718, "category_id": 21, "iscrowd": 0, "bbox": [238, 184, 50, 22], "area": 589}, {"id": 2964565, "category_id": 21, "iscrowd": 0, "bbox": [491, 221, 80, 54], "area": 2490}, {"id": 3099009, "category_id": 21, "iscrowd": 0, "bbox": [359, 220, 54, 58], "area": 1673}, {"id": 1917282, "category_id": 21, "iscrowd": 0, "bbox": [111, 195, 44, 26], "area": 459}, {"id": 1648456, "category_id": 21, "iscrowd": 0, "bbox": [222, 205, 59, 37], "area": 1166}, {"id": 1779257, "category_id": 21, "iscrowd": 0, "bbox": [280, 218, 35, 59], "area": 1312}, {"id": 5067870, "category_id": 21, "iscrowd": 0, "bbox": [417, 220, 47, 54], "area": 1396}, {"id": 2770544, "category_id": 21, "iscrowd": 0, "bbox": [136, 214, 89, 53], "area": 2515}, {"id": 2572383, "category_id": 21, "iscrowd": 0, "bbox": [429, 189, 71, 41], "area": 1969}, {"id": 3033210, "category_id": 21, "iscrowd": 0, "bbox": [261, 194, 46, 25], "area": 690}, {"id": 1781846, "category_id": 21, "iscrowd": 0, "bbox": [310, 212, 28, 63], "area": 961}, {"id": 2706534, "category_id": 21, "iscrowd": 1, "bbox": [14, 126, 616, 105], "area": 1776}, {"id": 13012841, "category_id": 148, "iscrowd": 0, "bbox": [0, 281, 640, 199], "area": 122495}, {"id": 1649708, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 138], "area": 81402}, {"id": 4951190, "category_id": 193, "iscrowd": 0, "bbox": [0, 119, 640, 177], "area": 77731}], "file_name": "000000314034.png", "image_id": 314034}, {"segments_info": [{"id": 989465, "category_id": 1, "iscrowd": 0, "bbox": [168, 281, 156, 318], "area": 33506}, {"id": 2509134, "category_id": 70, "iscrowd": 0, "bbox": [206, 557, 70, 42], "area": 2321}, {"id": 3167320, "category_id": 133, "iscrowd": 0, "bbox": [50, 0, 393, 611], "area": 164140}, {"id": 3557970, "category_id": 168, "iscrowd": 0, "bbox": [0, 0, 435, 582], "area": 52896}, {"id": 7445159, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 481, 640], "area": 54554}], "file_name": "000000314177.png", "image_id": 314177}, {"segments_info": [{"id": 2368303, "category_id": 51, "iscrowd": 0, "bbox": [104, 51, 154, 111], "area": 10287}, {"id": 5335684, "category_id": 51, "iscrowd": 0, "bbox": [0, 129, 174, 197], "area": 26063}, {"id": 13882322, "category_id": 51, "iscrowd": 0, "bbox": [38, 269, 256, 231], "area": 48371}, {"id": 10459292, "category_id": 51, "iscrowd": 0, "bbox": [167, 101, 208, 221], "area": 13573}, {"id": 3693391, "category_id": 56, "iscrowd": 0, "bbox": [181, 107, 152, 144], "area": 13316}, {"id": 1522603, "category_id": 57, "iscrowd": 0, "bbox": [328, 138, 39, 28], "area": 599}, {"id": 732567, "category_id": 57, "iscrowd": 0, "bbox": [288, 115, 69, 62], "area": 1130}, {"id": 1129390, "category_id": 57, "iscrowd": 0, "bbox": [219, 168, 156, 100], "area": 7745}, {"id": 533364, "category_id": 57, "iscrowd": 0, "bbox": [287, 174, 58, 45], "area": 546}, {"id": 9144713, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 64401}], "file_name": "000000314182.png", "image_id": 314182}, {"segments_info": [{"id": 11707524, "category_id": 1, "iscrowd": 0, "bbox": [217, 304, 15, 20], "area": 161}, {"id": 5197129, "category_id": 1, "iscrowd": 0, "bbox": [41, 342, 83, 130], "area": 5011}, {"id": 9474186, "category_id": 1, "iscrowd": 0, "bbox": [152, 313, 37, 68], "area": 1136}, {"id": 7297873, "category_id": 1, "iscrowd": 0, "bbox": [228, 307, 26, 59], "area": 801}, {"id": 10394018, "category_id": 1, "iscrowd": 0, "bbox": [259, 304, 13, 18], "area": 124}, {"id": 8288629, "category_id": 1, "iscrowd": 0, "bbox": [117, 313, 28, 61], "area": 788}, {"id": 12303289, "category_id": 1, "iscrowd": 0, "bbox": [196, 307, 23, 45], "area": 535}, {"id": 9407391, "category_id": 1, "iscrowd": 0, "bbox": [314, 297, 15, 33], "area": 293}, {"id": 9935003, "category_id": 1, "iscrowd": 0, "bbox": [286, 304, 18, 24], "area": 164}, {"id": 7698296, "category_id": 1, "iscrowd": 0, "bbox": [73, 338, 57, 131], "area": 1238}, {"id": 14672354, "category_id": 1, "iscrowd": 0, "bbox": [186, 306, 13, 26], "area": 204}, {"id": 12900057, "category_id": 1, "iscrowd": 0, "bbox": [144, 307, 17, 28], "area": 314}, {"id": 8421504, "category_id": 3, "iscrowd": 0, "bbox": [244, 300, 17, 13], "area": 155}, {"id": 7434098, "category_id": 4, "iscrowd": 0, "bbox": [198, 336, 13, 27], "area": 249}, {"id": 5986388, "category_id": 4, "iscrowd": 0, "bbox": [113, 348, 29, 39], "area": 754}, {"id": 7302507, "category_id": 4, "iscrowd": 0, "bbox": [152, 355, 29, 42], "area": 916}, {"id": 7696756, "category_id": 4, "iscrowd": 0, "bbox": [187, 331, 11, 25], "area": 216}, {"id": 6184030, "category_id": 4, "iscrowd": 0, "bbox": [228, 340, 23, 36], "area": 470}, {"id": 6315877, "category_id": 4, "iscrowd": 0, "bbox": [288, 316, 9, 16], "area": 94}, {"id": 8365750, "category_id": 4, "iscrowd": 0, "bbox": [44, 433, 63, 46], "area": 2485}, {"id": 6249821, "category_id": 4, "iscrowd": 0, "bbox": [218, 320, 11, 17], "area": 115}, {"id": 8750723, "category_id": 149, "iscrowd": 0, "bbox": [0, 301, 640, 179], "area": 45448}, {"id": 4542536, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 398], "area": 202222}, {"id": 14344156, "category_id": 187, "iscrowd": 0, "bbox": [22, 0, 291, 289], "area": 3701}, {"id": 8688800, "category_id": 191, "iscrowd": 0, "bbox": [0, 286, 640, 152], "area": 26874}, {"id": 2443830, "category_id": 193, "iscrowd": 0, "bbox": [480, 306, 160, 78], "area": 4377}], "file_name": "000000314251.png", "image_id": 314251}, {"segments_info": [{"id": 4732726, "category_id": 1, "iscrowd": 0, "bbox": [78, 1, 286, 571], "area": 84337}, {"id": 7438729, "category_id": 64, "iscrowd": 0, "bbox": [0, 331, 126, 216], "area": 14326}, {"id": 4939116, "category_id": 64, "iscrowd": 0, "bbox": [232, 0, 240, 282], "area": 27471}, {"id": 12958897, "category_id": 86, "iscrowd": 0, "bbox": [93, 197, 12, 44], "area": 194}, {"id": 12237498, "category_id": 86, "iscrowd": 0, "bbox": [335, 159, 58, 122], "area": 5033}, {"id": 4410702, "category_id": 119, "iscrowd": 0, "bbox": [0, 81, 287, 559], "area": 18611}, {"id": 9087941, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 141315}], "file_name": "000000314264.png", "image_id": 314264}, {"segments_info": [{"id": 6844025, "category_id": 22, "iscrowd": 0, "bbox": [294, 85, 191, 161], "area": 21108}, {"id": 5724254, "category_id": 22, "iscrowd": 0, "bbox": [388, 3, 28, 38], "area": 669}, {"id": 4410440, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 244], "area": 68660}, {"id": 10204083, "category_id": 193, "iscrowd": 0, "bbox": [220, 0, 420, 255], "area": 6764}, {"id": 6318703, "category_id": 194, "iscrowd": 0, "bbox": [0, 119, 640, 241], "area": 107161}, {"id": 6777194, "category_id": 198, "iscrowd": 0, "bbox": [60, 29, 580, 182], "area": 25778}], "file_name": "000000314294.png", "image_id": 314294}, {"segments_info": [{"id": 5600083, "category_id": 15, "iscrowd": 0, "bbox": [220, 264, 253, 156], "area": 18291}, {"id": 3435079, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 166], "area": 75263}, {"id": 16447733, "category_id": 187, "iscrowd": 0, "bbox": [200, 0, 440, 90], "area": 11645}, {"id": 1738588, "category_id": 193, "iscrowd": 0, "bbox": [0, 128, 640, 297], "area": 159706}, {"id": 4148572, "category_id": 194, "iscrowd": 0, "bbox": [143, 362, 197, 63], "area": 6887}], "file_name": "000000314541.png", "image_id": 314541}, {"segments_info": [{"id": 9340279, "category_id": 1, "iscrowd": 0, "bbox": [224, 90, 114, 183], "area": 8133}, {"id": 11314332, "category_id": 35, "iscrowd": 0, "bbox": [177, 244, 209, 48], "area": 927}, {"id": 13682623, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 263182}], "file_name": "000000314709.png", "image_id": 314709}, {"segments_info": [{"id": 8485229, "category_id": 8, "iscrowd": 0, "bbox": [343, 266, 137, 101], "area": 9477}, {"id": 4212034, "category_id": 181, "iscrowd": 0, "bbox": [304, 211, 37, 76], "area": 1330}, {"id": 7239540, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 507], "area": 115445}, {"id": 15855341, "category_id": 187, "iscrowd": 0, "bbox": [0, 16, 480, 96], "area": 3991}, {"id": 5406846, "category_id": 193, "iscrowd": 0, "bbox": [0, 323, 480, 317], "area": 93117}, {"id": 8291716, "category_id": 197, "iscrowd": 0, "bbox": [0, 66, 480, 222], "area": 32338}], "file_name": "000000314914.png", "image_id": 314914}, {"segments_info": [{"id": 1978432, "category_id": 16, "iscrowd": 0, "bbox": [95, 266, 25, 49], "area": 456}, {"id": 1840918, "category_id": 16, "iscrowd": 0, "bbox": [89, 412, 41, 14], "area": 360}, {"id": 1715777, "category_id": 16, "iscrowd": 0, "bbox": [84, 281, 16, 7], "area": 75}, {"id": 2039847, "category_id": 16, "iscrowd": 0, "bbox": [362, 478, 65, 32], "area": 909}, {"id": 2440529, "category_id": 16, "iscrowd": 0, "bbox": [66, 271, 19, 7], "area": 56}, {"id": 3625576, "category_id": 16, "iscrowd": 0, "bbox": [205, 270, 20, 10], "area": 158}, {"id": 2510449, "category_id": 16, "iscrowd": 0, "bbox": [288, 175, 13, 6], "area": 33}, {"id": 3165799, "category_id": 16, "iscrowd": 0, "bbox": [217, 124, 54, 42], "area": 852}, {"id": 6456735, "category_id": 16, "iscrowd": 0, "bbox": [275, 194, 18, 14], "area": 97}, {"id": 6458024, "category_id": 16, "iscrowd": 0, "bbox": [430, 166, 16, 5], "area": 38}, {"id": 1975853, "category_id": 16, "iscrowd": 0, "bbox": [582, 386, 48, 19], "area": 448}, {"id": 2436404, "category_id": 16, "iscrowd": 0, "bbox": [360, 363, 42, 31], "area": 616}, {"id": 8104903, "category_id": 16, "iscrowd": 0, "bbox": [527, 150, 13, 9], "area": 46}, {"id": 4550547, "category_id": 16, "iscrowd": 0, "bbox": [445, 138, 13, 9], "area": 46}, {"id": 2373709, "category_id": 16, "iscrowd": 0, "bbox": [374, 293, 56, 46], "area": 1070}, {"id": 1578778, "category_id": 16, "iscrowd": 0, "bbox": [98, 393, 36, 20], "area": 334}, {"id": 2970231, "category_id": 16, "iscrowd": 0, "bbox": [348, 159, 12, 7], "area": 34}, {"id": 3496569, "category_id": 16, "iscrowd": 0, "bbox": [259, 199, 12, 8], "area": 37}, {"id": 1644829, "category_id": 16, "iscrowd": 0, "bbox": [388, 389, 42, 16], "area": 337}, {"id": 10011098, "category_id": 16, "iscrowd": 1, "bbox": [7, 106, 604, 179], "area": 13896}, {"id": 5137523, "category_id": 154, "iscrowd": 0, "bbox": [0, 274, 640, 365], "area": 219161}, {"id": 7445944, "category_id": 155, "iscrowd": 0, "bbox": [0, 202, 640, 81], "area": 37473}, {"id": 10472162, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 226], "area": 126097}], "file_name": "000000315001.png", "image_id": 315001}, {"segments_info": [{"id": 3817548, "category_id": 1, "iscrowd": 0, "bbox": [68, 346, 7, 18], "area": 78}, {"id": 1512714, "category_id": 1, "iscrowd": 0, "bbox": [417, 325, 10, 11], "area": 82}, {"id": 2698031, "category_id": 1, "iscrowd": 0, "bbox": [58, 346, 7, 19], "area": 76}, {"id": 4537643, "category_id": 1, "iscrowd": 0, "bbox": [330, 323, 18, 16], "area": 126}, {"id": 1644299, "category_id": 1, "iscrowd": 0, "bbox": [428, 325, 9, 10], "area": 60}, {"id": 6047545, "category_id": 3, "iscrowd": 0, "bbox": [195, 350, 126, 51], "area": 4270}, {"id": 7365977, "category_id": 3, "iscrowd": 0, "bbox": [3, 352, 30, 14], "area": 328}, {"id": 7238506, "category_id": 6, "iscrowd": 0, "bbox": [294, 287, 267, 127], "area": 24766}, {"id": 3683896, "category_id": 10, "iscrowd": 0, "bbox": [159, 311, 6, 14], "area": 74}, {"id": 5525059, "category_id": 10, "iscrowd": 0, "bbox": [350, 292, 4, 10], "area": 34}, {"id": 4407661, "category_id": 10, "iscrowd": 0, "bbox": [366, 289, 7, 6], "area": 39}, {"id": 14734537, "category_id": 130, "iscrowd": 0, "bbox": [322, 169, 37, 20], "area": 628}, {"id": 6314323, "category_id": 149, "iscrowd": 0, "bbox": [0, 358, 640, 90], "area": 36814}, {"id": 7238009, "category_id": 171, "iscrowd": 0, "bbox": [83, 71, 557, 259], "area": 39105}, {"id": 10132634, "category_id": 181, "iscrowd": 0, "bbox": [121, 149, 519, 158], "area": 11662}, {"id": 16115935, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 320], "area": 113967}, {"id": 10856108, "category_id": 191, "iscrowd": 0, "bbox": [557, 388, 83, 23], "area": 1187}, {"id": 8224135, "category_id": 197, "iscrowd": 0, "bbox": [0, 172, 640, 242], "area": 51201}, {"id": 13877935, "category_id": 199, "iscrowd": 0, "bbox": [403, 161, 94, 82], "area": 1915}], "file_name": "000000315187.png", "image_id": 315187}, {"segments_info": [{"id": 6585977, "category_id": 89, "iscrowd": 0, "bbox": [132, 3, 28, 102], "area": 2391}, {"id": 1132637, "category_id": 118, "iscrowd": 0, "bbox": [0, 490, 78, 10], "area": 691}, {"id": 2125195, "category_id": 177, "iscrowd": 0, "bbox": [76, 0, 98, 500], "area": 37870}, {"id": 4547947, "category_id": 195, "iscrowd": 0, "bbox": [164, 335, 123, 114], "area": 11514}, {"id": 6521733, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 303, 500], "area": 61848}], "file_name": "000000315219.png", "image_id": 315219}, {"segments_info": [{"id": 5392710, "category_id": 16, "iscrowd": 0, "bbox": [64, 116, 491, 278], "area": 80517}, {"id": 14605789, "category_id": 181, "iscrowd": 0, "bbox": [0, 32, 640, 226], "area": 49645}, {"id": 4944232, "category_id": 184, "iscrowd": 0, "bbox": [0, 283, 640, 151], "area": 30530}, {"id": 7106420, "category_id": 191, "iscrowd": 0, "bbox": [0, 385, 640, 129], "area": 45005}, {"id": 9146254, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 391], "area": 91370}], "file_name": "000000315257.png", "image_id": 315257}, {"segments_info": [{"id": 5127217, "category_id": 3, "iscrowd": 0, "bbox": [47, 231, 104, 68], "area": 5518}, {"id": 8418698, "category_id": 3, "iscrowd": 0, "bbox": [50, 223, 27, 20], "area": 277}, {"id": 8681065, "category_id": 3, "iscrowd": 0, "bbox": [0, 226, 11, 26], "area": 168}, {"id": 8417117, "category_id": 3, "iscrowd": 0, "bbox": [5, 221, 52, 41], "area": 1750}, {"id": 3155236, "category_id": 6, "iscrowd": 0, "bbox": [423, 123, 217, 184], "area": 32290}, {"id": 6643828, "category_id": 6, "iscrowd": 0, "bbox": [162, 112, 273, 193], "area": 42965}, {"id": 8549229, "category_id": 6, "iscrowd": 0, "bbox": [119, 205, 43, 27], "area": 543}, {"id": 8418931, "category_id": 8, "iscrowd": 0, "bbox": [130, 214, 32, 50], "area": 1133}, {"id": 6378802, "category_id": 10, "iscrowd": 0, "bbox": [20, 179, 6, 12], "area": 64}, {"id": 6249293, "category_id": 10, "iscrowd": 0, "bbox": [115, 136, 10, 20], "area": 175}, {"id": 6709340, "category_id": 10, "iscrowd": 0, "bbox": [9, 75, 18, 35], "area": 481}, {"id": 4669520, "category_id": 10, "iscrowd": 0, "bbox": [40, 142, 8, 19], "area": 131}, {"id": 8354929, "category_id": 10, "iscrowd": 0, "bbox": [134, 85, 14, 32], "area": 435}, {"id": 10196888, "category_id": 10, "iscrowd": 0, "bbox": [36, 191, 6, 6], "area": 25}, {"id": 6116159, "category_id": 10, "iscrowd": 0, "bbox": [75, 175, 8, 17], "area": 115}, {"id": 5854299, "category_id": 10, "iscrowd": 0, "bbox": [63, 186, 8, 8], "area": 52}, {"id": 5064518, "category_id": 10, "iscrowd": 0, "bbox": [47, 99, 30, 12], "area": 307}, {"id": 6052450, "category_id": 10, "iscrowd": 0, "bbox": [53, 186, 8, 7], "area": 45}, {"id": 6178362, "category_id": 10, "iscrowd": 0, "bbox": [67, 147, 5, 11], "area": 41}, {"id": 7698819, "category_id": 95, "iscrowd": 0, "bbox": [83, 151, 20, 20], "area": 296}, {"id": 6513765, "category_id": 149, "iscrowd": 0, "bbox": [0, 252, 640, 176], "area": 89495}, {"id": 6913416, "category_id": 184, "iscrowd": 0, "bbox": [98, 102, 48, 105], "area": 3069}, {"id": 14929596, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 90], "area": 23103}, {"id": 11644330, "category_id": 197, "iscrowd": 0, "bbox": [0, 15, 640, 226], "area": 70355}], "file_name": "000000315450.png", "image_id": 315450}, {"segments_info": [{"id": 2574459, "category_id": 1, "iscrowd": 0, "bbox": [161, 149, 173, 311], "area": 25525}, {"id": 11785190, "category_id": 70, "iscrowd": 0, "bbox": [18, 351, 180, 223], "area": 16129}, {"id": 2966892, "category_id": 88, "iscrowd": 0, "bbox": [481, 489, 108, 108], "area": 8024}, {"id": 1781591, "category_id": 88, "iscrowd": 0, "bbox": [18, 359, 127, 154], "area": 14928}, {"id": 727356, "category_id": 112, "iscrowd": 0, "bbox": [486, 37, 126, 349], "area": 20888}, {"id": 1586788, "category_id": 177, "iscrowd": 0, "bbox": [8, 0, 552, 329], "area": 83205}, {"id": 13559795, "category_id": 195, "iscrowd": 0, "bbox": [160, 19, 203, 438], "area": 8484}, {"id": 5540025, "category_id": 199, "iscrowd": 0, "bbox": [164, 0, 424, 273], "area": 27636}, {"id": 2176086, "category_id": 200, "iscrowd": 0, "bbox": [0, 237, 596, 375], "area": 112651}], "file_name": "000000315492.png", "image_id": 315492}, {"segments_info": [{"id": 3553347, "category_id": 17, "iscrowd": 0, "bbox": [307, 165, 155, 203], "area": 18946}, {"id": 9668481, "category_id": 72, "iscrowd": 0, "bbox": [128, 85, 203, 130], "area": 24106}, {"id": 7695462, "category_id": 73, "iscrowd": 0, "bbox": [0, 258, 56, 53], "area": 1964}, {"id": 2300444, "category_id": 76, "iscrowd": 0, "bbox": [124, 233, 201, 82], "area": 13117}, {"id": 5659225, "category_id": 77, "iscrowd": 0, "bbox": [59, 277, 53, 31], "area": 779}, {"id": 8618887, "category_id": 84, "iscrowd": 0, "bbox": [385, 145, 16, 27], "area": 252}, {"id": 9474969, "category_id": 84, "iscrowd": 0, "bbox": [393, 141, 14, 37], "area": 251}, {"id": 9076872, "category_id": 84, "iscrowd": 0, "bbox": [422, 151, 71, 18], "area": 1078}, {"id": 7299934, "category_id": 84, "iscrowd": 0, "bbox": [1, 272, 46, 38], "area": 115}, {"id": 5396560, "category_id": 130, "iscrowd": 0, "bbox": [71, 38, 178, 197], "area": 3358}, {"id": 12046785, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 500, 210], "area": 30170}, {"id": 6775913, "category_id": 189, "iscrowd": 0, "bbox": [0, 250, 500, 150], "area": 38403}, {"id": 7629158, "category_id": 195, "iscrowd": 0, "bbox": [0, 153, 500, 247], "area": 14454}, {"id": 5660251, "category_id": 199, "iscrowd": 0, "bbox": [76, 0, 330, 198], "area": 36722}], "file_name": "000000316015.png", "image_id": 316015}, {"segments_info": [{"id": 8623525, "category_id": 1, "iscrowd": 0, "bbox": [118, 258, 13, 29], "area": 190}, {"id": 5925270, "category_id": 7, "iscrowd": 0, "bbox": [95, 242, 24, 32], "area": 598}, {"id": 6582401, "category_id": 7, "iscrowd": 0, "bbox": [158, 196, 243, 99], "area": 15301}, {"id": 3619647, "category_id": 7, "iscrowd": 0, "bbox": [7, 235, 63, 43], "area": 2273}, {"id": 7775686, "category_id": 125, "iscrowd": 0, "bbox": [0, 282, 304, 156], "area": 30886}, {"id": 7309486, "category_id": 128, "iscrowd": 0, "bbox": [69, 237, 102, 39], "area": 1547}, {"id": 7115457, "category_id": 147, "iscrowd": 0, "bbox": [0, 247, 640, 191], "area": 65545}, {"id": 9151668, "category_id": 184, "iscrowd": 0, "bbox": [83, 209, 557, 50], "area": 3314}, {"id": 14672604, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 259], "area": 117212}, {"id": 8697296, "category_id": 193, "iscrowd": 0, "bbox": [385, 237, 255, 79], "area": 13344}], "file_name": "000000316054.png", "image_id": 316054}, {"segments_info": [{"id": 6452442, "category_id": 1, "iscrowd": 0, "bbox": [335, 1, 230, 438], "area": 58089}, {"id": 4938614, "category_id": 1, "iscrowd": 0, "bbox": [59, 29, 164, 410], "area": 46024}, {"id": 1165010, "category_id": 37, "iscrowd": 0, "bbox": [529, 348, 12, 16], "area": 137}, {"id": 3389888, "category_id": 37, "iscrowd": 0, "bbox": [132, 380, 18, 22], "area": 135}, {"id": 4807340, "category_id": 43, "iscrowd": 0, "bbox": [364, 186, 228, 177], "area": 14084}, {"id": 1915478, "category_id": 43, "iscrowd": 0, "bbox": [74, 362, 23, 83], "area": 794}, {"id": 66310, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 445], "area": 163228}], "file_name": "000000316404.png", "image_id": 316404}, {"segments_info": [{"id": 2903573, "category_id": 44, "iscrowd": 0, "bbox": [456, 218, 49, 100], "area": 2894}, {"id": 4935240, "category_id": 46, "iscrowd": 0, "bbox": [537, 95, 28, 70], "area": 875}, {"id": 6593466, "category_id": 46, "iscrowd": 0, "bbox": [263, 264, 24, 41], "area": 377}, {"id": 9664077, "category_id": 46, "iscrowd": 0, "bbox": [627, 125, 13, 32], "area": 236}, {"id": 5523772, "category_id": 46, "iscrowd": 0, "bbox": [579, 91, 27, 70], "area": 870}, {"id": 5869743, "category_id": 46, "iscrowd": 0, "bbox": [390, 264, 35, 48], "area": 710}, {"id": 9337701, "category_id": 46, "iscrowd": 0, "bbox": [554, 102, 20, 43], "area": 385}, {"id": 8706015, "category_id": 47, "iscrowd": 0, "bbox": [329, 309, 27, 37], "area": 798}, {"id": 1709586, "category_id": 47, "iscrowd": 0, "bbox": [509, 411, 23, 29], "area": 600}, {"id": 1117708, "category_id": 47, "iscrowd": 0, "bbox": [482, 406, 24, 34], "area": 737}, {"id": 5191968, "category_id": 47, "iscrowd": 0, "bbox": [565, 406, 26, 10], "area": 176}, {"id": 5586207, "category_id": 47, "iscrowd": 0, "bbox": [575, 401, 20, 6], "area": 86}, {"id": 4403488, "category_id": 47, "iscrowd": 0, "bbox": [545, 388, 9, 5], "area": 35}, {"id": 2694931, "category_id": 47, "iscrowd": 0, "bbox": [604, 388, 21, 11], "area": 186}, {"id": 5915945, "category_id": 47, "iscrowd": 0, "bbox": [550, 398, 23, 8], "area": 120}, {"id": 2563348, "category_id": 47, "iscrowd": 0, "bbox": [585, 414, 31, 34], "area": 936}, {"id": 3089174, "category_id": 47, "iscrowd": 0, "bbox": [616, 415, 24, 30], "area": 658}, {"id": 2037778, "category_id": 47, "iscrowd": 0, "bbox": [531, 410, 27, 32], "area": 771}, {"id": 4601121, "category_id": 47, "iscrowd": 0, "bbox": [536, 404, 7, 4], "area": 19}, {"id": 4798497, "category_id": 47, "iscrowd": 0, "bbox": [536, 404, 26, 10], "area": 166}, {"id": 2563605, "category_id": 47, "iscrowd": 0, "bbox": [559, 412, 27, 36], "area": 890}, {"id": 4469019, "category_id": 47, "iscrowd": 0, "bbox": [591, 406, 28, 9], "area": 186}, {"id": 862016, "category_id": 51, "iscrowd": 0, "bbox": [137, 363, 52, 22], "area": 700}, {"id": 860723, "category_id": 51, "iscrowd": 0, "bbox": [185, 354, 47, 18], "area": 609}, {"id": 11911622, "category_id": 67, "iscrowd": 0, "bbox": [98, 315, 403, 62], "area": 8394}, {"id": 663108, "category_id": 84, "iscrowd": 0, "bbox": [70, 127, 9, 53], "area": 443}, {"id": 263692, "category_id": 84, "iscrowd": 0, "bbox": [52, 126, 15, 55], "area": 593}, {"id": 197895, "category_id": 84, "iscrowd": 0, "bbox": [82, 238, 10, 52], "area": 469}, {"id": 989466, "category_id": 84, "iscrowd": 0, "bbox": [73, 239, 9, 49], "area": 340}, {"id": 1055032, "category_id": 84, "iscrowd": 0, "bbox": [78, 128, 8, 52], "area": 358}, {"id": 659519, "category_id": 84, "iscrowd": 0, "bbox": [61, 125, 8, 55], "area": 324}, {"id": 1388107, "category_id": 84, "iscrowd": 0, "bbox": [68, 239, 7, 52], "area": 336}, {"id": 1392454, "category_id": 84, "iscrowd": 0, "bbox": [50, 240, 8, 53], "area": 377}, {"id": 1257291, "category_id": 84, "iscrowd": 0, "bbox": [58, 240, 9, 51], "area": 432}, {"id": 529697, "category_id": 85, "iscrowd": 0, "bbox": [98, 171, 22, 30], "area": 518}, {"id": 3316134, "category_id": 86, "iscrowd": 0, "bbox": [365, 281, 34, 9], "area": 243}, {"id": 9033692, "category_id": 86, "iscrowd": 0, "bbox": [291, 309, 37, 41], "area": 1318}, {"id": 2985879, "category_id": 86, "iscrowd": 0, "bbox": [127, 273, 31, 10], "area": 247}, {"id": 1583905, "category_id": 86, "iscrowd": 0, "bbox": [489, 202, 10, 70], "area": 509}, {"id": 3047573, "category_id": 119, "iscrowd": 0, "bbox": [246, 191, 176, 121], "area": 10136}, {"id": 1520458, "category_id": 133, "iscrowd": 0, "bbox": [73, 89, 435, 229], "area": 61568}, {"id": 198153, "category_id": 156, "iscrowd": 0, "bbox": [0, 28, 98, 452], "area": 35729}, {"id": 921103, "category_id": 177, "iscrowd": 0, "bbox": [87, 0, 553, 413], "area": 4077}, {"id": 2432278, "category_id": 180, "iscrowd": 0, "bbox": [537, 88, 103, 293], "area": 25757}, {"id": 132358, "category_id": 186, "iscrowd": 0, "bbox": [133, 0, 225, 25], "area": 3597}, {"id": 465973, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 578, 70], "area": 12789}], "file_name": "000000316666.png", "image_id": 316666}, {"segments_info": [{"id": 7369848, "category_id": 24, "iscrowd": 0, "bbox": [97, 20, 468, 444], "area": 85083}, {"id": 9805473, "category_id": 154, "iscrowd": 0, "bbox": [0, 286, 640, 194], "area": 96678}, {"id": 4543595, "category_id": 177, "iscrowd": 0, "bbox": [519, 14, 121, 61], "area": 3428}, {"id": 8028807, "category_id": 184, "iscrowd": 0, "bbox": [29, 0, 288, 39], "area": 7490}, {"id": 6582136, "category_id": 185, "iscrowd": 0, "bbox": [0, 14, 640, 310], "area": 91077}, {"id": 4605770, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 75], "area": 22836}], "file_name": "000000317024.png", "image_id": 317024}, {"segments_info": [{"id": 5397100, "category_id": 1, "iscrowd": 0, "bbox": [30, 139, 94, 242], "area": 12956}, {"id": 3686987, "category_id": 19, "iscrowd": 0, "bbox": [249, 25, 215, 372], "area": 47172}, {"id": 2698800, "category_id": 19, "iscrowd": 0, "bbox": [449, 64, 186, 335], "area": 37972}, {"id": 3035463, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 324], "area": 106809}, {"id": 14607070, "category_id": 187, "iscrowd": 0, "bbox": [286, 0, 354, 75], "area": 5926}, {"id": 5207667, "category_id": 193, "iscrowd": 0, "bbox": [0, 277, 640, 150], "area": 54519}, {"id": 5204601, "category_id": 194, "iscrowd": 0, "bbox": [494, 318, 146, 37], "area": 2525}], "file_name": "000000317433.png", "image_id": 317433}, {"segments_info": [{"id": 7501215, "category_id": 1, "iscrowd": 0, "bbox": [19, 47, 277, 249], "area": 37690}, {"id": 7439275, "category_id": 1, "iscrowd": 0, "bbox": [190, 190, 373, 390], "area": 50250}, {"id": 10661823, "category_id": 65, "iscrowd": 0, "bbox": [23, 128, 568, 461], "area": 135822}, {"id": 9669794, "category_id": 84, "iscrowd": 0, "bbox": [184, 214, 131, 180], "area": 6212}, {"id": 9938876, "category_id": 93, "iscrowd": 0, "bbox": [102, 250, 293, 127], "area": 7184}, {"id": 11055295, "category_id": 199, "iscrowd": 0, "bbox": [21, 21, 570, 277], "area": 82429}], "file_name": "000000317999.png", "image_id": 317999}, {"segments_info": [{"id": 3026996, "category_id": 23, "iscrowd": 0, "bbox": [58, 135, 310, 204], "area": 47753}, {"id": 2369844, "category_id": 23, "iscrowd": 0, "bbox": [355, 124, 285, 201], "area": 40899}, {"id": 6449000, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 342], "area": 121962}], "file_name": "000000318080.png", "image_id": 318080}, {"segments_info": [{"id": 5097199, "category_id": 47, "iscrowd": 0, "bbox": [14, 8, 126, 197], "area": 18279}, {"id": 6782348, "category_id": 48, "iscrowd": 0, "bbox": [125, 101, 72, 202], "area": 4353}, {"id": 7771819, "category_id": 51, "iscrowd": 0, "bbox": [121, 101, 258, 183], "area": 16864}, {"id": 1685748, "category_id": 55, "iscrowd": 0, "bbox": [203, 85, 102, 72], "area": 3703}, {"id": 2911132, "category_id": 61, "iscrowd": 0, "bbox": [168, 157, 182, 112], "area": 14086}, {"id": 13885926, "category_id": 67, "iscrowd": 0, "bbox": [0, 1, 384, 304], "area": 40397}, {"id": 11260647, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 385, 308], "area": 781}, {"id": 3119050, "category_id": 195, "iscrowd": 0, "bbox": [15, 84, 370, 224], "area": 19022}], "file_name": "000000318114.png", "image_id": 318114}, {"segments_info": [{"id": 1184789, "category_id": 1, "iscrowd": 0, "bbox": [129, 73, 106, 427], "area": 21737}, {"id": 4799813, "category_id": 1, "iscrowd": 0, "bbox": [120, 38, 360, 596], "area": 127081}, {"id": 1052689, "category_id": 1, "iscrowd": 0, "bbox": [4, 1, 174, 601], "area": 72607}, {"id": 15198441, "category_id": 75, "iscrowd": 0, "bbox": [247, 343, 59, 54], "area": 1821}, {"id": 12566979, "category_id": 75, "iscrowd": 0, "bbox": [106, 468, 101, 105], "area": 2251}, {"id": 1727104, "category_id": 130, "iscrowd": 0, "bbox": [412, 117, 68, 259], "area": 6322}, {"id": 1319206, "category_id": 186, "iscrowd": 0, "bbox": [123, 0, 357, 147], "area": 27797}, {"id": 1843747, "category_id": 190, "iscrowd": 0, "bbox": [86, 482, 209, 158], "area": 14614}, {"id": 922130, "category_id": 199, "iscrowd": 0, "bbox": [172, 124, 18, 39], "area": 250}], "file_name": "000000318138.png", "image_id": 318138}, {"segments_info": [{"id": 2448507, "category_id": 17, "iscrowd": 0, "bbox": [248, 107, 109, 103], "area": 5811}, {"id": 1450018, "category_id": 18, "iscrowd": 0, "bbox": [169, 163, 179, 177], "area": 21252}, {"id": 2905962, "category_id": 18, "iscrowd": 0, "bbox": [3, 290, 444, 283], "area": 66241}, {"id": 8832970, "category_id": 65, "iscrowd": 0, "bbox": [0, 90, 478, 543], "area": 137324}, {"id": 9554102, "category_id": 93, "iscrowd": 0, "bbox": [182, 242, 258, 273], "area": 815}, {"id": 793378, "category_id": 112, "iscrowd": 0, "bbox": [301, 0, 96, 123], "area": 7349}, {"id": 5063507, "category_id": 141, "iscrowd": 0, "bbox": [117, 86, 185, 181], "area": 16346}, {"id": 3759705, "category_id": 199, "iscrowd": 0, "bbox": [121, 0, 328, 116], "area": 19949}], "file_name": "000000318238.png", "image_id": 318238}, {"segments_info": [{"id": 3751491, "category_id": 49, "iscrowd": 0, "bbox": [376, 213, 62, 71], "area": 851}, {"id": 8429991, "category_id": 61, "iscrowd": 0, "bbox": [15, 301, 47, 33], "area": 1193}, {"id": 6716550, "category_id": 61, "iscrowd": 0, "bbox": [146, 322, 72, 73], "area": 3073}, {"id": 6586506, "category_id": 61, "iscrowd": 0, "bbox": [58, 346, 64, 57], "area": 2278}, {"id": 4275044, "category_id": 61, "iscrowd": 0, "bbox": [294, 277, 49, 45], "area": 1851}, {"id": 9352117, "category_id": 61, "iscrowd": 0, "bbox": [0, 358, 45, 33], "area": 1048}, {"id": 6257025, "category_id": 61, "iscrowd": 0, "bbox": [107, 319, 57, 48], "area": 1885}, {"id": 7179669, "category_id": 61, "iscrowd": 0, "bbox": [78, 285, 55, 47], "area": 1753}, {"id": 6783367, "category_id": 61, "iscrowd": 0, "bbox": [133, 282, 61, 42], "area": 1381}, {"id": 7376277, "category_id": 61, "iscrowd": 0, "bbox": [167, 303, 56, 42], "area": 1461}, {"id": 6717321, "category_id": 61, "iscrowd": 0, "bbox": [5, 381, 84, 71], "area": 3565}, {"id": 3361369, "category_id": 61, "iscrowd": 0, "bbox": [396, 177, 129, 94], "area": 7987}, {"id": 6969152, "category_id": 61, "iscrowd": 0, "bbox": [225, 260, 51, 45], "area": 1807}, {"id": 5994372, "category_id": 61, "iscrowd": 0, "bbox": [1, 328, 37, 29], "area": 494}, {"id": 6643538, "category_id": 61, "iscrowd": 1, "bbox": [235, 200, 80, 36], "area": 851}, {"id": 8684168, "category_id": 67, "iscrowd": 0, "bbox": [3, 168, 637, 306], "area": 100870}, {"id": 3749700, "category_id": 100, "iscrowd": 0, "bbox": [428, 144, 212, 51], "area": 4097}, {"id": 789002, "category_id": 190, "iscrowd": 0, "bbox": [291, 393, 306, 87], "area": 4468}, {"id": 7234150, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 544, 186], "area": 29683}, {"id": 2238266, "category_id": 196, "iscrowd": 0, "bbox": [0, 227, 39, 188], "area": 1212}, {"id": 6580334, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 563, 243], "area": 48034}], "file_name": "000000318455.png", "image_id": 318455}, {"segments_info": [{"id": 2775182, "category_id": 18, "iscrowd": 0, "bbox": [94, 0, 293, 288], "area": 65363}, {"id": 331847, "category_id": 200, "iscrowd": 0, "bbox": [0, 0, 500, 333], "area": 53589}], "file_name": "000000318908.png", "image_id": 318908}, {"segments_info": [{"id": 6252406, "category_id": 1, "iscrowd": 0, "bbox": [237, 54, 205, 279], "area": 30947}, {"id": 4475541, "category_id": 1, "iscrowd": 0, "bbox": [79, 46, 205, 283], "area": 34851}, {"id": 5146332, "category_id": 44, "iscrowd": 0, "bbox": [438, 166, 11, 20], "area": 169}, {"id": 6120054, "category_id": 63, "iscrowd": 0, "bbox": [0, 119, 453, 214], "area": 32738}, {"id": 3620421, "category_id": 72, "iscrowd": 0, "bbox": [467, 231, 33, 73], "area": 2017}, {"id": 10133953, "category_id": 75, "iscrowd": 0, "bbox": [348, 235, 27, 15], "area": 177}, {"id": 11054271, "category_id": 75, "iscrowd": 0, "bbox": [239, 218, 57, 40], "area": 518}, {"id": 8962788, "category_id": 130, "iscrowd": 0, "bbox": [431, 104, 40, 100], "area": 1935}, {"id": 6187141, "category_id": 141, "iscrowd": 0, "bbox": [0, 195, 3, 138], "area": 254}, {"id": 3493777, "category_id": 189, "iscrowd": 0, "bbox": [445, 170, 55, 150], "area": 3258}, {"id": 4941711, "category_id": 195, "iscrowd": 0, "bbox": [455, 180, 45, 32], "area": 971}, {"id": 12111850, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 184], "area": 46524}, {"id": 5136762, "category_id": 200, "iscrowd": 0, "bbox": [413, 284, 87, 49], "area": 1328}], "file_name": "000000319100.png", "image_id": 319100}, {"segments_info": [{"id": 6316386, "category_id": 1, "iscrowd": 0, "bbox": [147, 47, 142, 228], "area": 10241}, {"id": 7308156, "category_id": 1, "iscrowd": 0, "bbox": [396, 28, 18, 57], "area": 532}, {"id": 5460087, "category_id": 1, "iscrowd": 0, "bbox": [272, 89, 202, 184], "area": 12771}, {"id": 6250636, "category_id": 1, "iscrowd": 0, "bbox": [57, 24, 36, 107], "area": 1683}, {"id": 5468271, "category_id": 1, "iscrowd": 0, "bbox": [417, 34, 13, 49], "area": 419}, {"id": 4678230, "category_id": 1, "iscrowd": 0, "bbox": [473, 27, 26, 64], "area": 704}, {"id": 8093093, "category_id": 1, "iscrowd": 0, "bbox": [22, 31, 50, 106], "area": 2258}, {"id": 5995886, "category_id": 1, "iscrowd": 0, "bbox": [441, 24, 27, 59], "area": 684}, {"id": 12961479, "category_id": 34, "iscrowd": 0, "bbox": [462, 137, 27, 22], "area": 185}, {"id": 4087127, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 63], "area": 23229}, {"id": 5672576, "category_id": 193, "iscrowd": 0, "bbox": [0, 35, 500, 259], "area": 93086}], "file_name": "000000319184.png", "image_id": 319184}, {"segments_info": [{"id": 9996432, "category_id": 1, "iscrowd": 0, "bbox": [340, 214, 43, 161], "area": 4323}, {"id": 5263468, "category_id": 1, "iscrowd": 0, "bbox": [202, 279, 53, 78], "area": 2552}, {"id": 7883826, "category_id": 1, "iscrowd": 0, "bbox": [479, 206, 66, 121], "area": 5336}, {"id": 2105909, "category_id": 1, "iscrowd": 0, "bbox": [257, 266, 36, 90], "area": 1549}, {"id": 8749719, "category_id": 1, "iscrowd": 0, "bbox": [281, 215, 62, 155], "area": 6648}, {"id": 7755836, "category_id": 3, "iscrowd": 0, "bbox": [597, 194, 43, 26], "area": 825}, {"id": 10979433, "category_id": 3, "iscrowd": 0, "bbox": [578, 194, 36, 19], "area": 463}, {"id": 6705731, "category_id": 3, "iscrowd": 0, "bbox": [563, 204, 12, 5], "area": 49}, {"id": 7423264, "category_id": 3, "iscrowd": 0, "bbox": [327, 189, 42, 22], "area": 370}, {"id": 6376002, "category_id": 3, "iscrowd": 0, "bbox": [219, 170, 64, 17], "area": 788}, {"id": 4801855, "category_id": 10, "iscrowd": 0, "bbox": [185, 77, 17, 8], "area": 112}, {"id": 4011309, "category_id": 10, "iscrowd": 0, "bbox": [163, 83, 10, 6], "area": 54}, {"id": 4604473, "category_id": 10, "iscrowd": 0, "bbox": [218, 70, 18, 9], "area": 119}, {"id": 5656433, "category_id": 28, "iscrowd": 0, "bbox": [237, 183, 170, 75], "area": 4156}, {"id": 1581129, "category_id": 28, "iscrowd": 0, "bbox": [255, 220, 52, 22], "area": 595}, {"id": 8017011, "category_id": 28, "iscrowd": 0, "bbox": [54, 166, 213, 62], "area": 6306}, {"id": 2437228, "category_id": 62, "iscrowd": 0, "bbox": [248, 283, 33, 46], "area": 386}, {"id": 2964310, "category_id": 62, "iscrowd": 0, "bbox": [184, 280, 61, 83], "area": 749}, {"id": 11709858, "category_id": 154, "iscrowd": 0, "bbox": [0, 289, 628, 46], "area": 2441}, {"id": 12166015, "category_id": 166, "iscrowd": 0, "bbox": [137, 189, 239, 33], "area": 593}, {"id": 6910578, "category_id": 184, "iscrowd": 0, "bbox": [0, 16, 640, 361], "area": 46067}, {"id": 10128772, "category_id": 185, "iscrowd": 0, "bbox": [509, 184, 71, 52], "area": 1571}, {"id": 16448251, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 186], "area": 61932}, {"id": 10126708, "category_id": 191, "iscrowd": 0, "bbox": [577, 210, 19, 13], "area": 145}, {"id": 8160116, "category_id": 192, "iscrowd": 0, "bbox": [185, 219, 110, 71], "area": 4967}, {"id": 8229261, "category_id": 193, "iscrowd": 0, "bbox": [131, 275, 296, 118], "area": 1886}, {"id": 7435893, "category_id": 194, "iscrowd": 0, "bbox": [0, 186, 37, 53], "area": 1434}, {"id": 6840416, "category_id": 197, "iscrowd": 0, "bbox": [0, 117, 640, 107], "area": 23167}, {"id": 8551543, "category_id": 198, "iscrowd": 0, "bbox": [0, 197, 640, 235], "area": 58627}, {"id": 7627861, "category_id": 199, "iscrowd": 0, "bbox": [574, 213, 66, 29], "area": 1238}], "file_name": "000000319369.png", "image_id": 319369}, {"segments_info": [{"id": 4738383, "category_id": 1, "iscrowd": 0, "bbox": [194, 154, 85, 137], "area": 7238}, {"id": 4737866, "category_id": 1, "iscrowd": 0, "bbox": [2, 195, 71, 75], "area": 3978}, {"id": 5787468, "category_id": 1, "iscrowd": 0, "bbox": [490, 125, 149, 195], "area": 17406}, {"id": 460813, "category_id": 1, "iscrowd": 0, "bbox": [3, 144, 25, 66], "area": 945}, {"id": 4275081, "category_id": 1, "iscrowd": 0, "bbox": [129, 96, 39, 182], "area": 2798}, {"id": 5986138, "category_id": 1, "iscrowd": 0, "bbox": [244, 85, 186, 386], "area": 42324}, {"id": 2106169, "category_id": 1, "iscrowd": 0, "bbox": [74, 135, 34, 138], "area": 1947}, {"id": 7109238, "category_id": 6, "iscrowd": 0, "bbox": [1, 4, 639, 470], "area": 210128}, {"id": 7370369, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 254, 59], "area": 7794}], "file_name": "000000319534.png", "image_id": 319534}, {"segments_info": [{"id": 4404022, "category_id": 1, "iscrowd": 0, "bbox": [488, 289, 16, 12], "area": 130}, {"id": 657674, "category_id": 1, "iscrowd": 0, "bbox": [33, 566, 52, 74], "area": 1380}, {"id": 4208187, "category_id": 1, "iscrowd": 0, "bbox": [199, 441, 47, 77], "area": 1336}, {"id": 1052180, "category_id": 1, "iscrowd": 0, "bbox": [326, 393, 29, 36], "area": 313}, {"id": 6448235, "category_id": 2, "iscrowd": 0, "bbox": [202, 490, 67, 59], "area": 1967}, {"id": 1644312, "category_id": 3, "iscrowd": 0, "bbox": [307, 370, 77, 79], "area": 2024}, {"id": 6840671, "category_id": 6, "iscrowd": 0, "bbox": [423, 272, 97, 72], "area": 2091}, {"id": 2368041, "category_id": 10, "iscrowd": 0, "bbox": [147, 50, 72, 256], "area": 15199}, {"id": 3291202, "category_id": 10, "iscrowd": 0, "bbox": [294, 290, 21, 24], "area": 400}, {"id": 1906715, "category_id": 27, "iscrowd": 0, "bbox": [197, 465, 12, 25], "area": 178}, {"id": 4406090, "category_id": 149, "iscrowd": 0, "bbox": [262, 219, 378, 421], "area": 59320}, {"id": 2302246, "category_id": 185, "iscrowd": 0, "bbox": [256, 460, 23, 26], "area": 359}, {"id": 15723502, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 358, 413], "area": 26709}, {"id": 7303034, "category_id": 191, "iscrowd": 0, "bbox": [137, 323, 503, 317], "area": 40436}, {"id": 2039585, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 543], "area": 192025}, {"id": 7566195, "category_id": 199, "iscrowd": 0, "bbox": [503, 219, 116, 82], "area": 2076}], "file_name": "000000319607.png", "image_id": 319607}, {"segments_info": [{"id": 8491151, "category_id": 47, "iscrowd": 0, "bbox": [16, 12, 100, 112], "area": 6659}, {"id": 2304838, "category_id": 47, "iscrowd": 0, "bbox": [0, 80, 107, 155], "area": 12742}, {"id": 2180724, "category_id": 58, "iscrowd": 0, "bbox": [138, 44, 177, 109], "area": 10707}, {"id": 9872292, "category_id": 67, "iscrowd": 0, "bbox": [1, 0, 319, 236], "area": 44129}], "file_name": "000000319617.png", "image_id": 319617}, {"segments_info": [{"id": 6385277, "category_id": 44, "iscrowd": 0, "bbox": [362, 90, 51, 132], "area": 5278}, {"id": 4084305, "category_id": 64, "iscrowd": 0, "bbox": [436, 0, 64, 107], "area": 6091}, {"id": 2103883, "category_id": 78, "iscrowd": 0, "bbox": [15, 70, 290, 176], "area": 45323}, {"id": 1646365, "category_id": 85, "iscrowd": 0, "bbox": [262, 101, 27, 15], "area": 369}, {"id": 5013428, "category_id": 88, "iscrowd": 0, "bbox": [323, 66, 35, 52], "area": 1225}, {"id": 1649733, "category_id": 107, "iscrowd": 0, "bbox": [0, 205, 500, 128], "area": 53868}, {"id": 8356746, "category_id": 176, "iscrowd": 0, "bbox": [390, 0, 65, 97], "area": 1724}, {"id": 3752818, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 417, 41], "area": 15384}, {"id": 5267314, "category_id": 199, "iscrowd": 0, "bbox": [0, 35, 500, 192], "area": 36205}], "file_name": "000000319696.png", "image_id": 319696}, {"segments_info": [{"id": 7038839, "category_id": 1, "iscrowd": 0, "bbox": [134, 256, 27, 97], "area": 1175}, {"id": 6117963, "category_id": 1, "iscrowd": 0, "bbox": [2, 169, 176, 462], "area": 46856}, {"id": 7762045, "category_id": 1, "iscrowd": 0, "bbox": [0, 170, 32, 90], "area": 2040}, {"id": 6253178, "category_id": 19, "iscrowd": 0, "bbox": [155, 148, 220, 492], "area": 72927}, {"id": 3618873, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 480, 478], "area": 93511}, {"id": 4406591, "category_id": 185, "iscrowd": 0, "bbox": [0, 247, 36, 26], "area": 370}, {"id": 16444367, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 462, 92], "area": 22995}, {"id": 11978185, "category_id": 190, "iscrowd": 0, "bbox": [142, 347, 338, 293], "area": 48092}, {"id": 5812366, "category_id": 193, "iscrowd": 0, "bbox": [0, 395, 160, 245], "area": 12407}], "file_name": "000000319721.png", "image_id": 319721}, {"segments_info": [{"id": 5660504, "category_id": 62, "iscrowd": 0, "bbox": [368, 199, 34, 50], "area": 578}, {"id": 6842982, "category_id": 62, "iscrowd": 0, "bbox": [425, 204, 45, 55], "area": 444}, {"id": 7705762, "category_id": 63, "iscrowd": 0, "bbox": [401, 241, 239, 152], "area": 27663}, {"id": 7837089, "category_id": 63, "iscrowd": 0, "bbox": [105, 231, 150, 141], "area": 15162}, {"id": 10066589, "category_id": 63, "iscrowd": 0, "bbox": [239, 195, 54, 30], "area": 636}, {"id": 5010546, "category_id": 64, "iscrowd": 0, "bbox": [533, 218, 27, 29], "area": 547}, {"id": 2637103, "category_id": 64, "iscrowd": 0, "bbox": [476, 220, 56, 44], "area": 1309}, {"id": 7570063, "category_id": 65, "iscrowd": 0, "bbox": [15, 199, 202, 105], "area": 10569}, {"id": 8620940, "category_id": 67, "iscrowd": 0, "bbox": [381, 199, 52, 52], "area": 1249}, {"id": 1580319, "category_id": 72, "iscrowd": 0, "bbox": [187, 170, 31, 23], "area": 644}, {"id": 5594732, "category_id": 84, "iscrowd": 0, "bbox": [328, 270, 48, 29], "area": 798}, {"id": 9144981, "category_id": 84, "iscrowd": 0, "bbox": [359, 267, 48, 18], "area": 475}, {"id": 3164772, "category_id": 109, "iscrowd": 0, "bbox": [209, 46, 431, 217], "area": 26284}, {"id": 9210754, "category_id": 112, "iscrowd": 0, "bbox": [446, 226, 18, 29], "area": 130}, {"id": 10407136, "category_id": 130, "iscrowd": 0, "bbox": [0, 175, 596, 64], "area": 1608}, {"id": 4742510, "category_id": 133, "iscrowd": 0, "bbox": [93, 139, 67, 78], "area": 4771}, {"id": 2305348, "category_id": 171, "iscrowd": 0, "bbox": [274, 154, 22, 54], "area": 742}, {"id": 1581365, "category_id": 177, "iscrowd": 0, "bbox": [224, 79, 326, 213], "area": 7588}, {"id": 8949904, "category_id": 181, "iscrowd": 0, "bbox": [226, 104, 323, 169], "area": 16223}, {"id": 6909279, "category_id": 184, "iscrowd": 0, "bbox": [351, 174, 81, 36], "area": 1773}, {"id": 6059355, "category_id": 185, "iscrowd": 0, "bbox": [352, 192, 80, 46], "area": 1027}, {"id": 1648453, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 432, 147], "area": 37286}, {"id": 15722464, "category_id": 187, "iscrowd": 0, "bbox": [347, 141, 85, 37], "area": 2619}, {"id": 2305340, "category_id": 188, "iscrowd": 0, "bbox": [0, 190, 230, 123], "area": 2832}, {"id": 5132122, "category_id": 189, "iscrowd": 0, "bbox": [277, 253, 160, 134], "area": 6362}, {"id": 7833488, "category_id": 190, "iscrowd": 0, "bbox": [0, 207, 481, 191], "area": 34805}, {"id": 5269627, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 220], "area": 45279}, {"id": 4610414, "category_id": 200, "iscrowd": 0, "bbox": [19, 271, 92, 54], "area": 1830}], "file_name": "000000319935.png", "image_id": 319935}, {"segments_info": [{"id": 3090987, "category_id": 1, "iscrowd": 0, "bbox": [1, 379, 21, 43], "area": 378}, {"id": 1577230, "category_id": 1, "iscrowd": 0, "bbox": [197, 374, 21, 67], "area": 874}, {"id": 1051405, "category_id": 1, "iscrowd": 0, "bbox": [34, 393, 18, 25], "area": 217}, {"id": 2827561, "category_id": 3, "iscrowd": 0, "bbox": [151, 386, 49, 26], "area": 959}, {"id": 1658983, "category_id": 10, "iscrowd": 0, "bbox": [135, 304, 4, 14], "area": 56}, {"id": 1986955, "category_id": 10, "iscrowd": 0, "bbox": [210, 282, 14, 11], "area": 112}, {"id": 1462397, "category_id": 10, "iscrowd": 0, "bbox": [139, 300, 7, 18], "area": 122}, {"id": 4800062, "category_id": 28, "iscrowd": 0, "bbox": [49, 384, 15, 5], "area": 45}, {"id": 4339507, "category_id": 28, "iscrowd": 0, "bbox": [7, 384, 26, 8], "area": 121}, {"id": 6773090, "category_id": 28, "iscrowd": 0, "bbox": [37, 386, 16, 11], "area": 101}, {"id": 3749432, "category_id": 149, "iscrowd": 0, "bbox": [0, 403, 227, 74], "area": 8410}, {"id": 16250871, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 375, 176], "area": 48256}, {"id": 4078910, "category_id": 191, "iscrowd": 0, "bbox": [0, 433, 375, 67], "area": 18116}, {"id": 5065549, "category_id": 197, "iscrowd": 0, "bbox": [0, 72, 375, 380], "area": 93468}], "file_name": "000000320232.png", "image_id": 320232}, {"segments_info": [{"id": 4014157, "category_id": 25, "iscrowd": 0, "bbox": [178, 155, 133, 222], "area": 7139}, {"id": 3749693, "category_id": 25, "iscrowd": 0, "bbox": [176, 162, 54, 205], "area": 3891}, {"id": 6251130, "category_id": 25, "iscrowd": 0, "bbox": [383, 175, 201, 211], "area": 9249}, {"id": 3882317, "category_id": 25, "iscrowd": 0, "bbox": [259, 159, 212, 226], "area": 7064}, {"id": 5198442, "category_id": 25, "iscrowd": 0, "bbox": [388, 179, 54, 65], "area": 919}, {"id": 5528695, "category_id": 25, "iscrowd": 0, "bbox": [339, 367, 94, 113], "area": 3591}, {"id": 3158846, "category_id": 25, "iscrowd": 0, "bbox": [24, 170, 136, 153], "area": 5765}, {"id": 3422280, "category_id": 25, "iscrowd": 0, "bbox": [82, 155, 91, 152], "area": 2389}, {"id": 10661326, "category_id": 25, "iscrowd": 0, "bbox": [558, 422, 82, 58], "area": 1842}, {"id": 4673645, "category_id": 25, "iscrowd": 0, "bbox": [299, 107, 161, 363], "area": 18816}, {"id": 2436926, "category_id": 151, "iscrowd": 0, "bbox": [0, 47, 401, 86], "area": 20207}, {"id": 4016484, "category_id": 171, "iscrowd": 0, "bbox": [85, 160, 60, 23], "area": 870}, {"id": 4674383, "category_id": 175, "iscrowd": 0, "bbox": [289, 106, 351, 113], "area": 18990}, {"id": 4480592, "category_id": 184, "iscrowd": 0, "bbox": [31, 0, 609, 217], "area": 55481}, {"id": 16448237, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 167, 58], "area": 6347}, {"id": 12227694, "category_id": 192, "iscrowd": 0, "bbox": [123, 0, 106, 36], "area": 1622}, {"id": 6587007, "category_id": 193, "iscrowd": 0, "bbox": [60, 20, 580, 236], "area": 14158}, {"id": 7700634, "category_id": 194, "iscrowd": 0, "bbox": [0, 232, 640, 248], "area": 91626}, {"id": 8687509, "category_id": 198, "iscrowd": 0, "bbox": [432, 32, 164, 228], "area": 6604}], "file_name": "000000320425.png", "image_id": 320425}, {"segments_info": [{"id": 5524832, "category_id": 1, "iscrowd": 0, "bbox": [314, 199, 152, 227], "area": 15472}, {"id": 6847393, "category_id": 37, "iscrowd": 0, "bbox": [549, 173, 28, 31], "area": 549}, {"id": 8355998, "category_id": 39, "iscrowd": 0, "bbox": [459, 320, 83, 65], "area": 1053}, {"id": 3353386, "category_id": 44, "iscrowd": 0, "bbox": [614, 226, 10, 26], "area": 200}, {"id": 5257013, "category_id": 44, "iscrowd": 0, "bbox": [606, 223, 8, 31], "area": 210}, {"id": 4996923, "category_id": 44, "iscrowd": 0, "bbox": [565, 220, 12, 37], "area": 345}, {"id": 9346749, "category_id": 145, "iscrowd": 0, "bbox": [0, 322, 640, 104], "area": 46774}, {"id": 4013625, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 366], "area": 207814}], "file_name": "000000320490.png", "image_id": 320490}, {"segments_info": [{"id": 8294530, "category_id": 15, "iscrowd": 0, "bbox": [40, 1, 443, 276], "area": 62135}, {"id": 6644333, "category_id": 17, "iscrowd": 0, "bbox": [223, 196, 122, 98], "area": 6718}, {"id": 5595728, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 258], "area": 41990}, {"id": 10856362, "category_id": 194, "iscrowd": 0, "bbox": [0, 110, 500, 265], "area": 55989}], "file_name": "000000320554.png", "image_id": 320554}, {"segments_info": [{"id": 5723480, "category_id": 24, "iscrowd": 0, "bbox": [521, 140, 93, 122], "area": 5688}, {"id": 7434097, "category_id": 24, "iscrowd": 0, "bbox": [241, 46, 171, 189], "area": 18391}, {"id": 6249566, "category_id": 24, "iscrowd": 0, "bbox": [0, 56, 551, 424], "area": 69337}, {"id": 7370103, "category_id": 24, "iscrowd": 0, "bbox": [144, 93, 137, 85], "area": 5125}, {"id": 6643809, "category_id": 24, "iscrowd": 0, "bbox": [7, 112, 633, 363], "area": 122390}, {"id": 6973287, "category_id": 24, "iscrowd": 0, "bbox": [0, 111, 106, 108], "area": 8207}, {"id": 8100511, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 273], "area": 71746}], "file_name": "000000320632.png", "image_id": 320632}, {"segments_info": [{"id": 2960944, "category_id": 1, "iscrowd": 0, "bbox": [143, 26, 160, 291], "area": 29001}, {"id": 3288880, "category_id": 1, "iscrowd": 0, "bbox": [348, 180, 73, 136], "area": 6759}, {"id": 723726, "category_id": 1, "iscrowd": 0, "bbox": [442, 166, 56, 149], "area": 7100}, {"id": 2698801, "category_id": 1, "iscrowd": 0, "bbox": [2, 5, 142, 313], "area": 32378}, {"id": 14671057, "category_id": 75, "iscrowd": 0, "bbox": [233, 122, 15, 18], "area": 223}, {"id": 12365729, "category_id": 75, "iscrowd": 0, "bbox": [145, 133, 45, 32], "area": 514}, {"id": 2834766, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 104, 194], "area": 7782}, {"id": 5993085, "category_id": 197, "iscrowd": 0, "bbox": [103, 0, 397, 321], "area": 69758}], "file_name": "000000320642.png", "image_id": 320642}, {"segments_info": [{"id": 5722437, "category_id": 48, "iscrowd": 0, "bbox": [1, 195, 107, 66], "area": 4410}, {"id": 14077897, "category_id": 49, "iscrowd": 0, "bbox": [403, 141, 237, 49], "area": 6840}, {"id": 7236457, "category_id": 50, "iscrowd": 0, "bbox": [256, 2, 145, 122], "area": 3662}, {"id": 6057603, "category_id": 58, "iscrowd": 0, "bbox": [160, 209, 199, 265], "area": 44694}, {"id": 10066335, "category_id": 67, "iscrowd": 0, "bbox": [2, 0, 638, 472], "area": 83296}, {"id": 6777703, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 17068}, {"id": 9086107, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 218, 480], "area": 17074}, {"id": 3954805, "category_id": 196, "iscrowd": 0, "bbox": [35, 32, 474, 448], "area": 89838}], "file_name": "000000320664.png", "image_id": 320664}, {"segments_info": [{"id": 3549481, "category_id": 1, "iscrowd": 0, "bbox": [237, 159, 150, 139], "area": 8158}, {"id": 10720133, "category_id": 42, "iscrowd": 0, "bbox": [270, 274, 94, 45], "area": 2612}, {"id": 9272170, "category_id": 155, "iscrowd": 0, "bbox": [0, 70, 640, 357], "area": 201103}, {"id": 5975063, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 104], "area": 61196}], "file_name": "000000320696.png", "image_id": 320696}, {"segments_info": [{"id": 3693691, "category_id": 176, "iscrowd": 0, "bbox": [0, 57, 480, 267], "area": 36148}, {"id": 8502746, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 480, 80], "area": 32993}, {"id": 1252939, "category_id": 189, "iscrowd": 0, "bbox": [0, 424, 480, 216], "area": 24002}, {"id": 1648742, "category_id": 196, "iscrowd": 0, "bbox": [0, 398, 480, 215], "area": 29425}, {"id": 725538, "category_id": 199, "iscrowd": 0, "bbox": [385, 238, 29, 43], "area": 753}], "file_name": "000000320706.png", "image_id": 320706}, {"segments_info": [{"id": 8547435, "category_id": 1, "iscrowd": 0, "bbox": [522, 32, 46, 75], "area": 1510}, {"id": 5455421, "category_id": 1, "iscrowd": 0, "bbox": [108, 11, 32, 99], "area": 1606}, {"id": 5060654, "category_id": 1, "iscrowd": 0, "bbox": [172, 11, 25, 45], "area": 660}, {"id": 7634054, "category_id": 1, "iscrowd": 0, "bbox": [155, 46, 19, 21], "area": 160}, {"id": 8421767, "category_id": 1, "iscrowd": 0, "bbox": [322, 21, 21, 32], "area": 266}, {"id": 6048848, "category_id": 1, "iscrowd": 0, "bbox": [439, 55, 88, 150], "area": 5415}, {"id": 5392966, "category_id": 1, "iscrowd": 0, "bbox": [0, 1, 25, 120], "area": 1003}, {"id": 6439999, "category_id": 1, "iscrowd": 0, "bbox": [71, 6, 28, 73], "area": 938}, {"id": 7956070, "category_id": 1, "iscrowd": 0, "bbox": [150, 54, 72, 152], "area": 4302}, {"id": 8285030, "category_id": 1, "iscrowd": 0, "bbox": [307, 28, 38, 62], "area": 1236}, {"id": 4215911, "category_id": 22, "iscrowd": 0, "bbox": [618, 153, 22, 112], "area": 1533}, {"id": 4085097, "category_id": 22, "iscrowd": 0, "bbox": [112, 67, 528, 268], "area": 42926}, {"id": 3027250, "category_id": 22, "iscrowd": 0, "bbox": [179, 37, 99, 111], "area": 4751}, {"id": 2767433, "category_id": 22, "iscrowd": 0, "bbox": [271, 131, 272, 218], "area": 34204}, {"id": 3027763, "category_id": 22, "iscrowd": 0, "bbox": [54, 67, 179, 128], "area": 8267}, {"id": 2174002, "category_id": 22, "iscrowd": 0, "bbox": [0, 70, 73, 239], "area": 8452}, {"id": 5398894, "category_id": 22, "iscrowd": 0, "bbox": [258, 53, 127, 97], "area": 1833}, {"id": 2238248, "category_id": 22, "iscrowd": 0, "bbox": [95, 32, 63, 41], "area": 804}, {"id": 11849946, "category_id": 154, "iscrowd": 0, "bbox": [0, 91, 640, 269], "area": 62233}, {"id": 3103829, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 259], "area": 40001}, {"id": 6518392, "category_id": 194, "iscrowd": 0, "bbox": [22, 105, 252, 104], "area": 331}], "file_name": "000000320743.png", "image_id": 320743}, {"segments_info": [{"id": 6511192, "category_id": 73, "iscrowd": 0, "bbox": [88, 3, 464, 417], "area": 122092}, {"id": 1254452, "category_id": 74, "iscrowd": 0, "bbox": [517, 268, 122, 59], "area": 5048}, {"id": 1455961, "category_id": 189, "iscrowd": 0, "bbox": [0, 121, 640, 305], "area": 54506}, {"id": 3231086, "category_id": 195, "iscrowd": 0, "bbox": [421, 0, 204, 114], "area": 12314}, {"id": 3035247, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 152], "area": 26561}], "file_name": "000000321118.png", "image_id": 321118}, {"segments_info": [{"id": 2570075, "category_id": 1, "iscrowd": 0, "bbox": [2, 6, 605, 459], "area": 121414}, {"id": 1725824, "category_id": 61, "iscrowd": 0, "bbox": [277, 318, 262, 157], "area": 33802}, {"id": 1249300, "category_id": 62, "iscrowd": 0, "bbox": [487, 21, 153, 191], "area": 24748}, {"id": 2770537, "category_id": 189, "iscrowd": 0, "bbox": [0, 398, 640, 82], "area": 13669}, {"id": 1975089, "category_id": 195, "iscrowd": 0, "bbox": [445, 0, 195, 36], "area": 3559}, {"id": 1594498, "category_id": 196, "iscrowd": 0, "bbox": [329, 471, 207, 9], "area": 1160}, {"id": 1778229, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 449], "area": 93535}], "file_name": "000000321214.png", "image_id": 321214}, {"segments_info": [{"id": 8360599, "category_id": 1, "iscrowd": 0, "bbox": [58, 17, 295, 372], "area": 58908}, {"id": 8690079, "category_id": 1, "iscrowd": 0, "bbox": [338, 55, 294, 338], "area": 68111}, {"id": 6386036, "category_id": 88, "iscrowd": 0, "bbox": [139, 198, 229, 194], "area": 19014}], "file_name": "000000321333.png", "image_id": 321333}, {"segments_info": [{"id": 5330005, "category_id": 4, "iscrowd": 0, "bbox": [9, 23, 513, 604], "area": 184411}, {"id": 9866108, "category_id": 112, "iscrowd": 0, "bbox": [12, 93, 46, 199], "area": 4011}, {"id": 10524810, "category_id": 181, "iscrowd": 0, "bbox": [96, 0, 322, 203], "area": 10008}, {"id": 6914740, "category_id": 190, "iscrowd": 0, "bbox": [0, 305, 547, 335], "area": 70235}, {"id": 3362885, "category_id": 193, "iscrowd": 0, "bbox": [490, 360, 57, 60], "area": 1965}, {"id": 7175293, "category_id": 198, "iscrowd": 0, "bbox": [0, 288, 28, 37], "area": 629}, {"id": 14210773, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 547, 379], "area": 77103}], "file_name": "000000321557.png", "image_id": 321557}, {"segments_info": [{"id": 9528393, "category_id": 1, "iscrowd": 0, "bbox": [126, 9, 185, 413], "area": 53159}, {"id": 3689805, "category_id": 43, "iscrowd": 0, "bbox": [277, 138, 208, 159], "area": 10882}, {"id": 4414033, "category_id": 185, "iscrowd": 0, "bbox": [0, 182, 640, 54], "area": 8147}, {"id": 4672317, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 199808}], "file_name": "000000321790.png", "image_id": 321790}, {"segments_info": [{"id": 3629183, "category_id": 20, "iscrowd": 0, "bbox": [0, 45, 486, 374], "area": 123485}, {"id": 1381909, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 424], "area": 106716}], "file_name": "000000321887.png", "image_id": 321887}, {"segments_info": [{"id": 9283257, "category_id": 1, "iscrowd": 0, "bbox": [382, 91, 61, 125], "area": 4034}, {"id": 2241094, "category_id": 1, "iscrowd": 0, "bbox": [480, 186, 122, 121], "area": 8613}, {"id": 5403816, "category_id": 1, "iscrowd": 0, "bbox": [21, 66, 226, 348], "area": 47568}, {"id": 6914455, "category_id": 1, "iscrowd": 0, "bbox": [267, 60, 141, 260], "area": 22303}, {"id": 855824, "category_id": 1, "iscrowd": 0, "bbox": [604, 182, 36, 137], "area": 3118}, {"id": 2834265, "category_id": 1, "iscrowd": 0, "bbox": [601, 182, 38, 88], "area": 954}, {"id": 3228841, "category_id": 1, "iscrowd": 0, "bbox": [492, 161, 47, 60], "area": 1719}, {"id": 8028040, "category_id": 44, "iscrowd": 0, "bbox": [413, 305, 61, 132], "area": 5130}, {"id": 2637201, "category_id": 44, "iscrowd": 0, "bbox": [507, 283, 47, 82], "area": 2313}, {"id": 5146533, "category_id": 51, "iscrowd": 0, "bbox": [234, 385, 113, 65], "area": 3605}, {"id": 2967670, "category_id": 51, "iscrowd": 0, "bbox": [322, 293, 104, 105], "area": 8779}, {"id": 6130339, "category_id": 59, "iscrowd": 0, "bbox": [513, 222, 17, 5], "area": 50}, {"id": 5541303, "category_id": 59, "iscrowd": 0, "bbox": [97, 359, 169, 104], "area": 9632}, {"id": 2379619, "category_id": 64, "iscrowd": 0, "bbox": [514, 46, 98, 73], "area": 3400}, {"id": 3236240, "category_id": 67, "iscrowd": 0, "bbox": [510, 218, 97, 24], "area": 440}, {"id": 6784156, "category_id": 75, "iscrowd": 0, "bbox": [538, 351, 65, 29], "area": 1222}, {"id": 4283233, "category_id": 78, "iscrowd": 0, "bbox": [233, 230, 23, 56], "area": 898}, {"id": 8294544, "category_id": 79, "iscrowd": 0, "bbox": [85, 108, 193, 100], "area": 7249}, {"id": 4217439, "category_id": 79, "iscrowd": 0, "bbox": [194, 213, 99, 139], "area": 6631}, {"id": 13885139, "category_id": 100, "iscrowd": 0, "bbox": [212, 51, 135, 66], "area": 5749}, {"id": 5536920, "category_id": 107, "iscrowd": 0, "bbox": [0, 274, 640, 206], "area": 39762}, {"id": 8882805, "category_id": 130, "iscrowd": 0, "bbox": [18, 32, 88, 41], "area": 2534}, {"id": 2644112, "category_id": 156, "iscrowd": 0, "bbox": [513, 377, 127, 103], "area": 5922}, {"id": 8168904, "category_id": 168, "iscrowd": 0, "bbox": [247, 104, 225, 376], "area": 11316}, {"id": 1725612, "category_id": 177, "iscrowd": 0, "bbox": [338, 0, 302, 178], "area": 23887}, {"id": 3097416, "category_id": 189, "iscrowd": 0, "bbox": [405, 195, 94, 87], "area": 3026}, {"id": 5211055, "category_id": 190, "iscrowd": 0, "bbox": [613, 433, 27, 47], "area": 812}, {"id": 9285834, "category_id": 195, "iscrowd": 0, "bbox": [452, 176, 188, 168], "area": 2730}, {"id": 3495062, "category_id": 196, "iscrowd": 0, "bbox": [284, 321, 42, 61], "area": 1414}, {"id": 5083314, "category_id": 199, "iscrowd": 0, "bbox": [144, 37, 496, 194], "area": 6882}], "file_name": "000000322163.png", "image_id": 322163}, {"segments_info": [{"id": 3238289, "category_id": 60, "iscrowd": 0, "bbox": [338, 188, 150, 141], "area": 15718}, {"id": 3240609, "category_id": 60, "iscrowd": 0, "bbox": [388, 58, 126, 124], "area": 12215}, {"id": 3633824, "category_id": 60, "iscrowd": 0, "bbox": [335, 1, 114, 86], "area": 7817}, {"id": 3238030, "category_id": 60, "iscrowd": 0, "bbox": [214, 28, 129, 113], "area": 9219}, {"id": 1984354, "category_id": 60, "iscrowd": 0, "bbox": [113, 83, 120, 113], "area": 9435}, {"id": 4358312, "category_id": 60, "iscrowd": 0, "bbox": [472, 141, 146, 141], "area": 15668}, {"id": 2315123, "category_id": 60, "iscrowd": 0, "bbox": [147, 167, 134, 126], "area": 11674}, {"id": 3632530, "category_id": 60, "iscrowd": 0, "bbox": [403, 316, 157, 158], "area": 19083}, {"id": 2379887, "category_id": 60, "iscrowd": 0, "bbox": [268, 395, 159, 79], "area": 9898}, {"id": 3107730, "category_id": 60, "iscrowd": 0, "bbox": [265, 97, 131, 128], "area": 12245}, {"id": 2446451, "category_id": 60, "iscrowd": 0, "bbox": [197, 265, 154, 159], "area": 18012}, {"id": 1979994, "category_id": 67, "iscrowd": 0, "bbox": [91, 1, 549, 473], "area": 19192}, {"id": 5860974, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 264, 475], "area": 74449}, {"id": 5201245, "category_id": 100, "iscrowd": 0, "bbox": [0, 18, 272, 462], "area": 3391}, {"id": 2834791, "category_id": 189, "iscrowd": 0, "bbox": [115, 0, 525, 53], "area": 902}, {"id": 2967385, "category_id": 196, "iscrowd": 0, "bbox": [264, 446, 187, 34], "area": 1710}], "file_name": "000000322211.png", "image_id": 322211}, {"segments_info": [{"id": 5067368, "category_id": 62, "iscrowd": 0, "bbox": [248, 137, 108, 183], "area": 7112}, {"id": 986898, "category_id": 62, "iscrowd": 0, "bbox": [211, 114, 58, 37], "area": 697}, {"id": 1447969, "category_id": 62, "iscrowd": 0, "bbox": [149, 181, 100, 174], "area": 12376}, {"id": 2766165, "category_id": 62, "iscrowd": 0, "bbox": [102, 137, 32, 58], "area": 1029}, {"id": 1644574, "category_id": 62, "iscrowd": 0, "bbox": [53, 60, 81, 163], "area": 6462}, {"id": 2306921, "category_id": 62, "iscrowd": 0, "bbox": [210, 124, 47, 27], "area": 574}, {"id": 8360567, "category_id": 64, "iscrowd": 0, "bbox": [377, 93, 61, 61], "area": 1903}, {"id": 6849129, "category_id": 64, "iscrowd": 0, "bbox": [435, 126, 65, 88], "area": 2638}, {"id": 3621207, "category_id": 67, "iscrowd": 0, "bbox": [104, 99, 201, 247], "area": 12893}, {"id": 11643047, "category_id": 85, "iscrowd": 0, "bbox": [400, 12, 14, 29], "area": 357}, {"id": 2699842, "category_id": 86, "iscrowd": 0, "bbox": [199, 87, 25, 28], "area": 530}, {"id": 3225154, "category_id": 86, "iscrowd": 0, "bbox": [184, 99, 27, 56], "area": 902}, {"id": 10852494, "category_id": 86, "iscrowd": 0, "bbox": [393, 131, 21, 22], "area": 382}, {"id": 8746085, "category_id": 86, "iscrowd": 0, "bbox": [463, 178, 32, 34], "area": 855}, {"id": 4932685, "category_id": 109, "iscrowd": 0, "bbox": [275, 0, 225, 214], "area": 13774}, {"id": 1252134, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 64, 225], "area": 9978}, {"id": 1382176, "category_id": 118, "iscrowd": 0, "bbox": [97, 210, 16, 15], "area": 167}, {"id": 15725044, "category_id": 181, "iscrowd": 0, "bbox": [322, 0, 178, 135], "area": 10723}, {"id": 6644843, "category_id": 189, "iscrowd": 0, "bbox": [490, 179, 10, 37], "area": 216}, {"id": 9207422, "category_id": 190, "iscrowd": 0, "bbox": [337, 197, 110, 178], "area": 2946}, {"id": 7963274, "category_id": 197, "iscrowd": 0, "bbox": [280, 107, 17, 35], "area": 301}, {"id": 3949397, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 393, 242], "area": 22166}, {"id": 4211800, "category_id": 200, "iscrowd": 0, "bbox": [0, 179, 489, 196], "area": 56271}], "file_name": "000000322352.png", "image_id": 322352}, {"segments_info": [{"id": 7305088, "category_id": 47, "iscrowd": 0, "bbox": [61, 200, 10, 29], "area": 171}, {"id": 10990005, "category_id": 47, "iscrowd": 0, "bbox": [68, 202, 10, 28], "area": 117}, {"id": 11843769, "category_id": 47, "iscrowd": 0, "bbox": [331, 187, 41, 38], "area": 1270}, {"id": 9213104, "category_id": 47, "iscrowd": 0, "bbox": [89, 509, 93, 89], "area": 4519}, {"id": 6974064, "category_id": 47, "iscrowd": 0, "bbox": [73, 200, 12, 30], "area": 254}, {"id": 10863571, "category_id": 47, "iscrowd": 0, "bbox": [20, 196, 44, 37], "area": 1241}, {"id": 8687516, "category_id": 47, "iscrowd": 0, "bbox": [208, 567, 52, 52], "area": 2112}, {"id": 8296572, "category_id": 47, "iscrowd": 0, "bbox": [261, 161, 74, 66], "area": 3892}, {"id": 10335143, "category_id": 47, "iscrowd": 0, "bbox": [379, 162, 64, 65], "area": 2866}, {"id": 5862579, "category_id": 51, "iscrowd": 0, "bbox": [33, 70, 170, 64], "area": 8810}, {"id": 9808048, "category_id": 51, "iscrowd": 0, "bbox": [151, 365, 81, 78], "area": 4774}, {"id": 10004146, "category_id": 51, "iscrowd": 0, "bbox": [224, 338, 114, 100], "area": 7229}, {"id": 8095899, "category_id": 86, "iscrowd": 0, "bbox": [372, 476, 54, 66], "area": 2608}, {"id": 5727148, "category_id": 86, "iscrowd": 0, "bbox": [246, 513, 92, 112], "area": 7005}, {"id": 8160601, "category_id": 86, "iscrowd": 0, "bbox": [349, 532, 75, 90], "area": 5428}, {"id": 8096927, "category_id": 86, "iscrowd": 0, "bbox": [274, 471, 55, 46], "area": 2018}, {"id": 7971030, "category_id": 86, "iscrowd": 0, "bbox": [315, 70, 43, 76], "area": 2527}, {"id": 9408663, "category_id": 86, "iscrowd": 0, "bbox": [180, 456, 66, 106], "area": 5638}, {"id": 8092101, "category_id": 86, "iscrowd": 0, "bbox": [16, 470, 90, 145], "area": 8548}, {"id": 11127001, "category_id": 86, "iscrowd": 0, "bbox": [365, 47, 79, 99], "area": 6318}, {"id": 4345710, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 472, 640], "area": 216825}], "file_name": "000000322429.png", "image_id": 322429}, {"segments_info": [{"id": 1908258, "category_id": 51, "iscrowd": 0, "bbox": [188, 17, 224, 115], "area": 16564}, {"id": 5667738, "category_id": 54, "iscrowd": 0, "bbox": [389, 177, 212, 152], "area": 24258}, {"id": 9409439, "category_id": 58, "iscrowd": 0, "bbox": [1, 97, 639, 284], "area": 93090}, {"id": 6056053, "category_id": 100, "iscrowd": 0, "bbox": [75, 162, 517, 295], "area": 2456}, {"id": 5790304, "category_id": 195, "iscrowd": 0, "bbox": [0, 97, 352, 303], "area": 7664}, {"id": 3300733, "category_id": 196, "iscrowd": 0, "bbox": [84, 88, 508, 392], "area": 58125}], "file_name": "000000322574.png", "image_id": 322574}, {"segments_info": [{"id": 9079434, "category_id": 1, "iscrowd": 0, "bbox": [77, 142, 22, 78], "area": 884}, {"id": 6381921, "category_id": 1, "iscrowd": 0, "bbox": [42, 130, 37, 110], "area": 2016}, {"id": 5987163, "category_id": 1, "iscrowd": 0, "bbox": [0, 210, 14, 122], "area": 1101}, {"id": 5395026, "category_id": 1, "iscrowd": 0, "bbox": [359, 196, 143, 279], "area": 19766}, {"id": 4671303, "category_id": 1, "iscrowd": 0, "bbox": [547, 189, 93, 231], "area": 14751}, {"id": 9408399, "category_id": 1, "iscrowd": 0, "bbox": [0, 134, 22, 95], "area": 810}, {"id": 7105644, "category_id": 1, "iscrowd": 0, "bbox": [89, 127, 36, 146], "area": 1865}, {"id": 2039583, "category_id": 1, "iscrowd": 0, "bbox": [0, 143, 11, 18], "area": 111}, {"id": 7697781, "category_id": 1, "iscrowd": 0, "bbox": [213, 167, 24, 88], "area": 1458}, {"id": 4473924, "category_id": 1, "iscrowd": 0, "bbox": [111, 109, 127, 360], "area": 24010}, {"id": 7237230, "category_id": 1, "iscrowd": 0, "bbox": [110, 133, 30, 84], "area": 945}, {"id": 7171437, "category_id": 1, "iscrowd": 0, "bbox": [226, 114, 20, 166], "area": 1435}, {"id": 6645093, "category_id": 1, "iscrowd": 0, "bbox": [6, 124, 44, 156], "area": 3707}, {"id": 4276545, "category_id": 15, "iscrowd": 0, "bbox": [420, 373, 220, 101], "area": 8754}, {"id": 1447446, "category_id": 28, "iscrowd": 0, "bbox": [545, 139, 95, 55], "area": 3324}, {"id": 2763306, "category_id": 28, "iscrowd": 0, "bbox": [282, 125, 255, 86], "area": 12107}, {"id": 1118481, "category_id": 31, "iscrowd": 0, "bbox": [49, 148, 24, 34], "area": 311}, {"id": 11513775, "category_id": 31, "iscrowd": 0, "bbox": [205, 311, 35, 90], "area": 2062}, {"id": 3026478, "category_id": 31, "iscrowd": 0, "bbox": [74, 155, 19, 31], "area": 77}, {"id": 2368548, "category_id": 31, "iscrowd": 0, "bbox": [15, 154, 27, 53], "area": 400}, {"id": 2631720, "category_id": 31, "iscrowd": 0, "bbox": [0, 330, 26, 92], "area": 1868}, {"id": 986895, "category_id": 31, "iscrowd": 0, "bbox": [383, 327, 82, 96], "area": 2388}, {"id": 5395027, "category_id": 31, "iscrowd": 0, "bbox": [100, 227, 37, 98], "area": 2306}, {"id": 5460819, "category_id": 151, "iscrowd": 0, "bbox": [75, 16, 125, 67], "area": 4735}, {"id": 8816262, "category_id": 175, "iscrowd": 0, "bbox": [284, 357, 96, 76], "area": 3303}, {"id": 6974058, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 357, 252], "area": 18185}, {"id": 15592941, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 160, 178], "area": 6095}, {"id": 12237498, "category_id": 191, "iscrowd": 0, "bbox": [0, 184, 397, 296], "area": 51604}, {"id": 11316396, "category_id": 195, "iscrowd": 0, "bbox": [430, 358, 90, 122], "area": 7221}, {"id": 8553090, "category_id": 197, "iscrowd": 0, "bbox": [140, 0, 500, 480], "area": 96225}, {"id": 7960953, "category_id": 199, "iscrowd": 0, "bbox": [352, 129, 22, 10], "area": 135}], "file_name": "000000322610.png", "image_id": 322610}, {"segments_info": [{"id": 8025209, "category_id": 1, "iscrowd": 0, "bbox": [238, 179, 120, 223], "area": 11904}, {"id": 11249568, "category_id": 1, "iscrowd": 0, "bbox": [169, 318, 27, 68], "area": 1349}, {"id": 10658722, "category_id": 35, "iscrowd": 0, "bbox": [255, 403, 66, 21], "area": 367}, {"id": 14803938, "category_id": 159, "iscrowd": 0, "bbox": [0, 243, 640, 182], "area": 76352}, {"id": 12032356, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 311], "area": 161987}, {"id": 9602675, "category_id": 192, "iscrowd": 0, "bbox": [333, 237, 307, 103], "area": 19182}], "file_name": "000000322724.png", "image_id": 322724}, {"segments_info": [{"id": 8423045, "category_id": 15, "iscrowd": 0, "bbox": [81, 48, 459, 288], "area": 72659}, {"id": 1188120, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 287], "area": 97115}, {"id": 4226656, "category_id": 193, "iscrowd": 0, "bbox": [0, 334, 640, 93], "area": 48458}, {"id": 4545376, "category_id": 194, "iscrowd": 0, "bbox": [0, 239, 640, 138], "area": 54664}], "file_name": "000000322829.png", "image_id": 322829}, {"segments_info": [{"id": 4335179, "category_id": 15, "iscrowd": 0, "bbox": [1, 377, 479, 263], "area": 62876}, {"id": 4862038, "category_id": 88, "iscrowd": 0, "bbox": [103, 96, 255, 350], "area": 46435}, {"id": 7710084, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 480, 265], "area": 66646}, {"id": 5391987, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 84997}], "file_name": "000000322844.png", "image_id": 322844}, {"segments_info": [{"id": 6308423, "category_id": 1, "iscrowd": 0, "bbox": [287, 338, 15, 27], "area": 271}, {"id": 1589336, "category_id": 3, "iscrowd": 0, "bbox": [1, 354, 23, 57], "area": 951}, {"id": 8615529, "category_id": 3, "iscrowd": 0, "bbox": [315, 314, 112, 126], "area": 7419}, {"id": 1920619, "category_id": 3, "iscrowd": 0, "bbox": [0, 380, 427, 216], "area": 36200}, {"id": 6443071, "category_id": 3, "iscrowd": 0, "bbox": [293, 352, 80, 44], "area": 1885}, {"id": 3427671, "category_id": 3, "iscrowd": 0, "bbox": [13, 352, 60, 47], "area": 1691}, {"id": 3551787, "category_id": 149, "iscrowd": 0, "bbox": [0, 491, 427, 149], "area": 21989}, {"id": 6708814, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 427, 382], "area": 95215}], "file_name": "000000322864.png", "image_id": 322864}, {"segments_info": [{"id": 3487805, "category_id": 51, "iscrowd": 0, "bbox": [376, 284, 44, 18], "area": 602}, {"id": 1448735, "category_id": 62, "iscrowd": 0, "bbox": [152, 191, 23, 53], "area": 972}, {"id": 4211529, "category_id": 62, "iscrowd": 0, "bbox": [304, 221, 83, 65], "area": 4039}, {"id": 1908531, "category_id": 62, "iscrowd": 0, "bbox": [210, 224, 94, 74], "area": 4467}, {"id": 3621191, "category_id": 63, "iscrowd": 0, "bbox": [110, 243, 200, 213], "area": 27006}, {"id": 4804948, "category_id": 63, "iscrowd": 0, "bbox": [381, 307, 259, 168], "area": 38614}, {"id": 4212556, "category_id": 63, "iscrowd": 0, "bbox": [125, 236, 179, 78], "area": 5511}, {"id": 2434342, "category_id": 72, "iscrowd": 0, "bbox": [120, 164, 64, 49], "area": 2558}, {"id": 1579549, "category_id": 86, "iscrowd": 0, "bbox": [85, 196, 11, 19], "area": 141}, {"id": 3223854, "category_id": 112, "iscrowd": 0, "bbox": [0, 123, 36, 111], "area": 2760}, {"id": 3429743, "category_id": 156, "iscrowd": 0, "bbox": [83, 203, 132, 39], "area": 2013}, {"id": 6184800, "category_id": 177, "iscrowd": 0, "bbox": [321, 91, 20, 127], "area": 1893}, {"id": 15329768, "category_id": 180, "iscrowd": 0, "bbox": [230, 54, 410, 258], "area": 53699}, {"id": 15066082, "category_id": 181, "iscrowd": 0, "bbox": [338, 85, 50, 146], "area": 4878}, {"id": 8751498, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 114], "area": 59394}, {"id": 9213601, "category_id": 189, "iscrowd": 0, "bbox": [284, 267, 224, 91], "area": 7665}, {"id": 6053727, "category_id": 190, "iscrowd": 0, "bbox": [0, 241, 629, 239], "area": 27210}, {"id": 9409169, "category_id": 199, "iscrowd": 0, "bbox": [0, 85, 435, 170], "area": 29820}, {"id": 4541262, "category_id": 200, "iscrowd": 0, "bbox": [0, 229, 592, 251], "area": 28093}], "file_name": "000000322895.png", "image_id": 322895}, {"segments_info": [{"id": 4673118, "category_id": 1, "iscrowd": 0, "bbox": [33, 4, 379, 625], "area": 116444}, {"id": 6381410, "category_id": 88, "iscrowd": 0, "bbox": [16, 210, 398, 414], "area": 63021}, {"id": 2500134, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 457, 640], "area": 107065}], "file_name": "000000322944.png", "image_id": 322944}, {"segments_info": [{"id": 7166810, "category_id": 48, "iscrowd": 0, "bbox": [240, 287, 230, 66], "area": 4005}, {"id": 9873604, "category_id": 49, "iscrowd": 0, "bbox": [330, 266, 166, 75], "area": 5297}, {"id": 8762073, "category_id": 51, "iscrowd": 0, "bbox": [429, 334, 164, 158], "area": 20316}, {"id": 5712247, "category_id": 51, "iscrowd": 0, "bbox": [267, 131, 146, 142], "area": 16180}, {"id": 5661850, "category_id": 52, "iscrowd": 0, "bbox": [460, 181, 46, 52], "area": 1822}, {"id": 8498392, "category_id": 52, "iscrowd": 0, "bbox": [466, 202, 126, 121], "area": 8869}, {"id": 7183322, "category_id": 53, "iscrowd": 0, "bbox": [413, 27, 153, 162], "area": 16106}, {"id": 5540059, "category_id": 55, "iscrowd": 0, "bbox": [517, 103, 76, 131], "area": 6545}, {"id": 7634093, "category_id": 67, "iscrowd": 0, "bbox": [25, 35, 574, 560], "area": 203949}, {"id": 11521512, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 612, 153], "area": 37127}], "file_name": "000000322959.png", "image_id": 322959}, {"segments_info": [{"id": 8881029, "category_id": 85, "iscrowd": 0, "bbox": [230, 71, 49, 43], "area": 1868}, {"id": 11959124, "category_id": 92, "iscrowd": 0, "bbox": [372, 127, 41, 109], "area": 2030}, {"id": 5722458, "category_id": 149, "iscrowd": 0, "bbox": [0, 558, 480, 82], "area": 25410}, {"id": 1909791, "category_id": 184, "iscrowd": 0, "bbox": [429, 494, 51, 49], "area": 1623}, {"id": 14198146, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 512], "area": 127282}, {"id": 6319723, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 618], "area": 144266}], "file_name": "000000322968.png", "image_id": 322968}, {"segments_info": [{"id": 9018021, "category_id": 47, "iscrowd": 0, "bbox": [381, 13, 99, 269], "area": 19166}, {"id": 11842991, "category_id": 51, "iscrowd": 0, "bbox": [113, 111, 186, 72], "area": 3250}, {"id": 4481680, "category_id": 59, "iscrowd": 0, "bbox": [0, 241, 450, 316], "area": 108806}, {"id": 10326151, "category_id": 62, "iscrowd": 0, "bbox": [313, 0, 16, 40], "area": 395}, {"id": 10264744, "category_id": 67, "iscrowd": 0, "bbox": [0, 7, 480, 624], "area": 149487}, {"id": 6185075, "category_id": 189, "iscrowd": 0, "bbox": [0, 162, 480, 478], "area": 5768}], "file_name": "000000323151.png", "image_id": 323151}, {"segments_info": [{"id": 11318201, "category_id": 70, "iscrowd": 0, "bbox": [3, 47, 477, 585], "area": 188910}, {"id": 4144466, "category_id": 84, "iscrowd": 0, "bbox": [0, 277, 54, 183], "area": 7320}, {"id": 6186607, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 480, 299], "area": 26487}, {"id": 4542289, "category_id": 190, "iscrowd": 0, "bbox": [0, 123, 480, 517], "area": 75837}, {"id": 5265503, "category_id": 195, "iscrowd": 0, "bbox": [359, 238, 113, 125], "area": 6499}], "file_name": "000000323202.png", "image_id": 323202}, {"segments_info": [{"id": 3615272, "category_id": 1, "iscrowd": 0, "bbox": [259, 147, 107, 107], "area": 6481}, {"id": 5264749, "category_id": 1, "iscrowd": 0, "bbox": [118, 86, 62, 147], "area": 4199}, {"id": 3955557, "category_id": 1, "iscrowd": 0, "bbox": [108, 132, 148, 251], "area": 16332}, {"id": 6710908, "category_id": 1, "iscrowd": 0, "bbox": [436, 84, 101, 302], "area": 17170}, {"id": 8945811, "category_id": 1, "iscrowd": 0, "bbox": [170, 84, 75, 75], "area": 2979}, {"id": 3157812, "category_id": 31, "iscrowd": 0, "bbox": [110, 254, 38, 34], "area": 912}, {"id": 2103071, "category_id": 77, "iscrowd": 0, "bbox": [502, 124, 8, 11], "area": 53}, {"id": 2566926, "category_id": 181, "iscrowd": 0, "bbox": [60, 0, 22, 33], "area": 538}, {"id": 2172199, "category_id": 185, "iscrowd": 0, "bbox": [146, 76, 21, 19], "area": 94}, {"id": 5461858, "category_id": 191, "iscrowd": 0, "bbox": [0, 114, 640, 333], "area": 78485}, {"id": 2763346, "category_id": 196, "iscrowd": 0, "bbox": [98, 218, 267, 103], "area": 5846}, {"id": 10653059, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 376], "area": 126582}], "file_name": "000000323263.png", "image_id": 323263}, {"segments_info": [{"id": 1973523, "category_id": 1, "iscrowd": 0, "bbox": [397, 503, 83, 137], "area": 6888}, {"id": 4546406, "category_id": 1, "iscrowd": 0, "bbox": [101, 33, 344, 598], "area": 76222}, {"id": 2641566, "category_id": 59, "iscrowd": 0, "bbox": [86, 342, 194, 166], "area": 25027}, {"id": 5002852, "category_id": 100, "iscrowd": 0, "bbox": [0, 269, 306, 350], "area": 45712}, {"id": 7633019, "category_id": 177, "iscrowd": 0, "bbox": [0, 161, 293, 177], "area": 34068}, {"id": 6967863, "category_id": 195, "iscrowd": 0, "bbox": [20, 0, 341, 509], "area": 25831}, {"id": 6772001, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 510], "area": 67372}, {"id": 987146, "category_id": 200, "iscrowd": 0, "bbox": [279, 414, 201, 226], "area": 6688}], "file_name": "000000323355.png", "image_id": 323355}, {"segments_info": [{"id": 10325637, "category_id": 1, "iscrowd": 0, "bbox": [344, 0, 33, 59], "area": 1322}, {"id": 9207917, "category_id": 1, "iscrowd": 0, "bbox": [231, 2, 38, 103], "area": 2206}, {"id": 4867678, "category_id": 1, "iscrowd": 0, "bbox": [145, 2, 31, 75], "area": 1674}, {"id": 7757926, "category_id": 1, "iscrowd": 0, "bbox": [86, 0, 37, 112], "area": 2979}, {"id": 6642047, "category_id": 1, "iscrowd": 0, "bbox": [257, 56, 199, 278], "area": 14576}, {"id": 11509149, "category_id": 1, "iscrowd": 0, "bbox": [193, 1, 34, 110], "area": 2174}, {"id": 12040105, "category_id": 15, "iscrowd": 0, "bbox": [442, 41, 58, 12], "area": 279}, {"id": 11645861, "category_id": 15, "iscrowd": 0, "bbox": [412, 51, 88, 16], "area": 531}, {"id": 8227708, "category_id": 15, "iscrowd": 0, "bbox": [385, 60, 115, 29], "area": 2126}, {"id": 9556923, "category_id": 37, "iscrowd": 0, "bbox": [20, 74, 22, 15], "area": 272}, {"id": 10130057, "category_id": 43, "iscrowd": 0, "bbox": [187, 14, 18, 52], "area": 577}, {"id": 9471381, "category_id": 43, "iscrowd": 0, "bbox": [72, 51, 22, 51], "area": 627}, {"id": 8090753, "category_id": 43, "iscrowd": 0, "bbox": [149, 42, 8, 24], "area": 137}, {"id": 10264222, "category_id": 43, "iscrowd": 0, "bbox": [224, 23, 16, 17], "area": 136}, {"id": 10129830, "category_id": 43, "iscrowd": 0, "bbox": [137, 74, 141, 69], "area": 4423}, {"id": 4742467, "category_id": 43, "iscrowd": 0, "bbox": [265, 39, 12, 18], "area": 181}, {"id": 10001553, "category_id": 145, "iscrowd": 0, "bbox": [0, 65, 500, 333], "area": 138054}, {"id": 5400660, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 500, 90], "area": 25898}], "file_name": "000000323496.png", "image_id": 323496}, {"segments_info": [{"id": 922388, "category_id": 3, "iscrowd": 0, "bbox": [355, 572, 57, 31], "area": 1163}, {"id": 2633005, "category_id": 3, "iscrowd": 0, "bbox": [73, 593, 80, 36], "area": 874}, {"id": 987924, "category_id": 8, "iscrowd": 0, "bbox": [217, 571, 121, 63], "area": 4617}, {"id": 2106149, "category_id": 8, "iscrowd": 0, "bbox": [34, 589, 121, 51], "area": 3822}, {"id": 527116, "category_id": 10, "iscrowd": 0, "bbox": [79, 415, 53, 106], "area": 4011}, {"id": 2434856, "category_id": 130, "iscrowd": 0, "bbox": [85, 208, 36, 32], "area": 513}, {"id": 2436143, "category_id": 149, "iscrowd": 0, "bbox": [136, 591, 342, 49], "area": 9197}, {"id": 593937, "category_id": 184, "iscrowd": 0, "bbox": [167, 487, 168, 126], "area": 6538}, {"id": 11902611, "category_id": 187, "iscrowd": 0, "bbox": [83, 0, 395, 483], "area": 143546}, {"id": 1515299, "category_id": 191, "iscrowd": 0, "bbox": [338, 569, 140, 41], "area": 1192}, {"id": 1384486, "category_id": 197, "iscrowd": 0, "bbox": [31, 446, 447, 182], "area": 47014}], "file_name": "000000323571.png", "image_id": 323571}, {"segments_info": [{"id": 10591378, "category_id": 5, "iscrowd": 0, "bbox": [68, 130, 402, 127], "area": 17363}, {"id": 3096618, "category_id": 184, "iscrowd": 0, "bbox": [0, 168, 640, 95], "area": 22035}, {"id": 13814177, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 239], "area": 115407}, {"id": 3379583, "category_id": 193, "iscrowd": 0, "bbox": [0, 250, 640, 70], "area": 39826}], "file_name": "000000323709.png", "image_id": 323709}, {"segments_info": [{"id": 4738928, "category_id": 1, "iscrowd": 0, "bbox": [553, 209, 16, 71], "area": 788}, {"id": 5526083, "category_id": 1, "iscrowd": 0, "bbox": [208, 248, 24, 20], "area": 293}, {"id": 6519940, "category_id": 7, "iscrowd": 0, "bbox": [120, 115, 364, 253], "area": 45845}, {"id": 3095873, "category_id": 7, "iscrowd": 0, "bbox": [469, 108, 34, 21], "area": 441}, {"id": 2238250, "category_id": 10, "iscrowd": 0, "bbox": [476, 96, 7, 17], "area": 100}, {"id": 1776923, "category_id": 10, "iscrowd": 0, "bbox": [571, 96, 6, 10], "area": 52}, {"id": 1843765, "category_id": 10, "iscrowd": 0, "bbox": [573, 105, 6, 10], "area": 46}, {"id": 7574959, "category_id": 15, "iscrowd": 0, "bbox": [546, 396, 29, 28], "area": 696}, {"id": 4735274, "category_id": 32, "iscrowd": 0, "bbox": [218, 260, 4, 9], "area": 29}, {"id": 3160889, "category_id": 95, "iscrowd": 0, "bbox": [432, 92, 144, 31], "area": 2020}, {"id": 3560294, "category_id": 125, "iscrowd": 0, "bbox": [0, 145, 514, 279], "area": 33159}, {"id": 4414819, "category_id": 128, "iscrowd": 0, "bbox": [337, 27, 52, 23], "area": 879}, {"id": 5727073, "category_id": 130, "iscrowd": 0, "bbox": [555, 110, 85, 22], "area": 1400}, {"id": 3427679, "category_id": 147, "iscrowd": 0, "bbox": [0, 113, 640, 311], "area": 42025}, {"id": 1983803, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 320], "area": 97171}, {"id": 13030609, "category_id": 187, "iscrowd": 0, "bbox": [282, 0, 358, 78], "area": 11203}, {"id": 8036019, "category_id": 191, "iscrowd": 0, "bbox": [541, 188, 99, 236], "area": 15383}, {"id": 2511694, "category_id": 193, "iscrowd": 0, "bbox": [464, 331, 36, 93], "area": 1950}], "file_name": "000000323751.png", "image_id": 323751}, {"segments_info": [{"id": 7106423, "category_id": 1, "iscrowd": 0, "bbox": [73, 131, 91, 98], "area": 2615}, {"id": 6509433, "category_id": 1, "iscrowd": 0, "bbox": [284, 131, 56, 220], "area": 8955}, {"id": 10784647, "category_id": 1, "iscrowd": 0, "bbox": [164, 97, 70, 260], "area": 10454}, {"id": 12695226, "category_id": 1, "iscrowd": 0, "bbox": [60, 115, 76, 288], "area": 12041}, {"id": 8482425, "category_id": 1, "iscrowd": 0, "bbox": [516, 207, 55, 184], "area": 6068}, {"id": 11044982, "category_id": 1, "iscrowd": 0, "bbox": [391, 102, 115, 269], "area": 12241}, {"id": 5326663, "category_id": 1, "iscrowd": 0, "bbox": [327, 112, 63, 234], "area": 7696}, {"id": 6839900, "category_id": 1, "iscrowd": 0, "bbox": [225, 111, 69, 236], "area": 8052}, {"id": 6773329, "category_id": 1, "iscrowd": 0, "bbox": [115, 152, 66, 212], "area": 7485}, {"id": 12234932, "category_id": 1, "iscrowd": 0, "bbox": [373, 123, 74, 236], "area": 10079}, {"id": 6839126, "category_id": 1, "iscrowd": 0, "bbox": [485, 117, 88, 275], "area": 8564}, {"id": 16181989, "category_id": 34, "iscrowd": 0, "bbox": [393, 179, 38, 41], "area": 1234}, {"id": 5929262, "category_id": 34, "iscrowd": 0, "bbox": [243, 164, 37, 33], "area": 918}, {"id": 9668579, "category_id": 34, "iscrowd": 0, "bbox": [517, 232, 43, 47], "area": 1388}, {"id": 6273475, "category_id": 34, "iscrowd": 0, "bbox": [144, 266, 34, 37], "area": 825}, {"id": 12158806, "category_id": 34, "iscrowd": 0, "bbox": [76, 264, 16, 48], "area": 574}, {"id": 3822144, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 188], "area": 91384}, {"id": 14342353, "category_id": 187, "iscrowd": 0, "bbox": [572, 0, 36, 23], "area": 559}, {"id": 6129791, "category_id": 193, "iscrowd": 0, "bbox": [0, 159, 640, 321], "area": 113214}], "file_name": "000000323799.png", "image_id": 323799}, {"segments_info": [{"id": 7691066, "category_id": 3, "iscrowd": 0, "bbox": [209, 11, 39, 10], "area": 247}, {"id": 7232334, "category_id": 3, "iscrowd": 0, "bbox": [382, 16, 35, 13], "area": 321}, {"id": 8484969, "category_id": 3, "iscrowd": 0, "bbox": [74, 117, 15, 12], "area": 116}, {"id": 4997436, "category_id": 3, "iscrowd": 0, "bbox": [44, 130, 44, 23], "area": 641}, {"id": 7955280, "category_id": 3, "iscrowd": 0, "bbox": [265, 10, 36, 11], "area": 307}, {"id": 6444613, "category_id": 3, "iscrowd": 0, "bbox": [161, 6, 29, 14], "area": 98}, {"id": 9143426, "category_id": 3, "iscrowd": 0, "bbox": [75, 130, 15, 9], "area": 69}, {"id": 5132635, "category_id": 7, "iscrowd": 0, "bbox": [141, 69, 165, 488], "area": 54694}, {"id": 4079172, "category_id": 19, "iscrowd": 0, "bbox": [201, 406, 27, 35], "area": 454}, {"id": 5589572, "category_id": 95, "iscrowd": 0, "bbox": [0, 0, 427, 156], "area": 23501}, {"id": 6185322, "category_id": 125, "iscrowd": 0, "bbox": [0, 100, 427, 540], "area": 60143}, {"id": 5263962, "category_id": 147, "iscrowd": 0, "bbox": [0, 65, 427, 575], "area": 107159}, {"id": 4870726, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 224], "area": 18940}, {"id": 7831432, "category_id": 185, "iscrowd": 0, "bbox": [49, 100, 75, 72], "area": 1063}, {"id": 11577213, "category_id": 192, "iscrowd": 0, "bbox": [183, 0, 56, 19], "area": 659}, {"id": 3688267, "category_id": 193, "iscrowd": 0, "bbox": [51, 161, 25, 29], "area": 389}, {"id": 9471875, "category_id": 194, "iscrowd": 0, "bbox": [358, 64, 69, 89], "area": 1792}, {"id": 10259826, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 314, 19], "area": 1984}], "file_name": "000000323828.png", "image_id": 323828}, {"segments_info": [{"id": 4557979, "category_id": 1, "iscrowd": 0, "bbox": [314, 1, 144, 209], "area": 12711}, {"id": 3288124, "category_id": 1, "iscrowd": 0, "bbox": [93, 0, 106, 32], "area": 1893}, {"id": 5276294, "category_id": 43, "iscrowd": 0, "bbox": [438, 14, 54, 84], "area": 1757}, {"id": 7839893, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 249544}, {"id": 7961475, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 109, 54], "area": 1401}, {"id": 8284770, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 595, 138], "area": 36846}], "file_name": "000000323895.png", "image_id": 323895}, {"segments_info": [{"id": 4079664, "category_id": 1, "iscrowd": 0, "bbox": [203, 97, 71, 152], "area": 5974}, {"id": 3352876, "category_id": 3, "iscrowd": 0, "bbox": [41, 155, 50, 13], "area": 283}, {"id": 3352095, "category_id": 3, "iscrowd": 0, "bbox": [118, 145, 20, 11], "area": 178}, {"id": 7103328, "category_id": 3, "iscrowd": 0, "bbox": [80, 149, 28, 11], "area": 202}, {"id": 7895680, "category_id": 3, "iscrowd": 0, "bbox": [446, 108, 13, 7], "area": 63}, {"id": 4275256, "category_id": 3, "iscrowd": 0, "bbox": [9, 167, 39, 21], "area": 393}, {"id": 4797481, "category_id": 3, "iscrowd": 0, "bbox": [26, 167, 26, 9], "area": 98}, {"id": 7236473, "category_id": 3, "iscrowd": 0, "bbox": [473, 106, 20, 7], "area": 97}, {"id": 3683413, "category_id": 3, "iscrowd": 0, "bbox": [90, 172, 50, 17], "area": 215}, {"id": 4011562, "category_id": 3, "iscrowd": 0, "bbox": [10, 161, 24, 7], "area": 114}, {"id": 3879980, "category_id": 3, "iscrowd": 0, "bbox": [0, 169, 16, 26], "area": 268}, {"id": 4866623, "category_id": 3, "iscrowd": 0, "bbox": [44, 161, 37, 14], "area": 330}, {"id": 6051930, "category_id": 3, "iscrowd": 0, "bbox": [135, 148, 12, 8], "area": 55}, {"id": 5993612, "category_id": 18, "iscrowd": 0, "bbox": [197, 184, 23, 52], "area": 752}, {"id": 4607316, "category_id": 41, "iscrowd": 0, "bbox": [223, 244, 29, 19], "area": 406}, {"id": 6448752, "category_id": 128, "iscrowd": 0, "bbox": [417, 102, 14, 15], "area": 151}, {"id": 7106421, "category_id": 184, "iscrowd": 0, "bbox": [9, 0, 491, 162], "area": 32509}, {"id": 4213586, "category_id": 185, "iscrowd": 0, "bbox": [0, 139, 205, 87], "area": 5530}, {"id": 15460060, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 352, 73], "area": 15726}, {"id": 8161165, "category_id": 191, "iscrowd": 0, "bbox": [0, 134, 299, 200], "area": 26460}, {"id": 12428944, "category_id": 192, "iscrowd": 0, "bbox": [0, 33, 314, 93], "area": 13106}, {"id": 8560307, "category_id": 193, "iscrowd": 0, "bbox": [0, 90, 500, 244], "area": 57664}, {"id": 3884635, "category_id": 197, "iscrowd": 0, "bbox": [0, 99, 209, 71], "area": 5829}], "file_name": "000000324158.png", "image_id": 324158}, {"segments_info": [{"id": 8620688, "category_id": 1, "iscrowd": 0, "bbox": [372, 109, 221, 366], "area": 28571}, {"id": 9075314, "category_id": 1, "iscrowd": 0, "bbox": [172, 45, 371, 430], "area": 53727}, {"id": 5660522, "category_id": 44, "iscrowd": 0, "bbox": [625, 289, 15, 43], "area": 530}, {"id": 5004632, "category_id": 44, "iscrowd": 0, "bbox": [159, 349, 15, 43], "area": 505}, {"id": 4675938, "category_id": 44, "iscrowd": 0, "bbox": [288, 306, 14, 35], "area": 320}, {"id": 4677754, "category_id": 63, "iscrowd": 0, "bbox": [1, 258, 183, 216], "area": 26062}, {"id": 2106662, "category_id": 63, "iscrowd": 0, "bbox": [480, 256, 154, 101], "area": 9798}, {"id": 5264211, "category_id": 73, "iscrowd": 0, "bbox": [137, 337, 44, 42], "area": 1168}, {"id": 5331037, "category_id": 73, "iscrowd": 0, "bbox": [299, 299, 71, 44], "area": 1594}, {"id": 10131872, "category_id": 75, "iscrowd": 0, "bbox": [119, 368, 21, 15], "area": 210}, {"id": 15396077, "category_id": 75, "iscrowd": 0, "bbox": [497, 104, 28, 35], "area": 544}, {"id": 14804193, "category_id": 75, "iscrowd": 0, "bbox": [327, 152, 14, 6], "area": 65}, {"id": 14936302, "category_id": 75, "iscrowd": 0, "bbox": [521, 68, 19, 12], "area": 71}, {"id": 14277343, "category_id": 75, "iscrowd": 0, "bbox": [465, 205, 8, 12], "area": 58}, {"id": 15395565, "category_id": 75, "iscrowd": 0, "bbox": [565, 165, 14, 14], "area": 126}, {"id": 5792107, "category_id": 84, "iscrowd": 0, "bbox": [332, 277, 26, 21], "area": 510}, {"id": 4673877, "category_id": 84, "iscrowd": 0, "bbox": [377, 258, 3, 16], "area": 48}, {"id": 8357528, "category_id": 84, "iscrowd": 0, "bbox": [358, 278, 5, 17], "area": 85}, {"id": 5066582, "category_id": 84, "iscrowd": 0, "bbox": [368, 219, 3, 13], "area": 37}, {"id": 7960956, "category_id": 84, "iscrowd": 0, "bbox": [369, 278, 3, 18], "area": 54}, {"id": 3817802, "category_id": 84, "iscrowd": 0, "bbox": [331, 258, 7, 17], "area": 102}, {"id": 1119003, "category_id": 141, "iscrowd": 0, "bbox": [602, 259, 38, 52], "area": 1050}, {"id": 5660779, "category_id": 156, "iscrowd": 0, "bbox": [322, 206, 76, 123], "area": 5320}, {"id": 7304828, "category_id": 180, "iscrowd": 0, "bbox": [0, 84, 640, 207], "area": 49774}, {"id": 7502726, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 48], "area": 23214}, {"id": 1842719, "category_id": 189, "iscrowd": 0, "bbox": [102, 299, 538, 169], "area": 18822}, {"id": 5529965, "category_id": 190, "iscrowd": 0, "bbox": [50, 349, 590, 131], "area": 27272}, {"id": 9411492, "category_id": 199, "iscrowd": 0, "bbox": [0, 25, 640, 266], "area": 48057}], "file_name": "000000324258.png", "image_id": 324258}, {"segments_info": [{"id": 3299972, "category_id": 1, "iscrowd": 0, "bbox": [0, 76, 356, 351], "area": 80509}, {"id": 7376022, "category_id": 90, "iscrowd": 0, "bbox": [152, 233, 122, 59], "area": 809}, {"id": 9290724, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 191619}], "file_name": "000000324614.png", "image_id": 324614}, {"segments_info": [{"id": 11513778, "category_id": 73, "iscrowd": 0, "bbox": [30, 71, 288, 258], "area": 47721}, {"id": 2440075, "category_id": 87, "iscrowd": 0, "bbox": [346, 190, 132, 113], "area": 4082}, {"id": 4417684, "category_id": 118, "iscrowd": 0, "bbox": [0, 0, 500, 333], "area": 102681}, {"id": 8880774, "category_id": 195, "iscrowd": 0, "bbox": [338, 0, 139, 117], "area": 9939}], "file_name": "000000324715.png", "image_id": 324715}, {"segments_info": [{"id": 4754856, "category_id": 16, "iscrowd": 0, "bbox": [392, 135, 133, 249], "area": 20842}, {"id": 6329247, "category_id": 16, "iscrowd": 0, "bbox": [196, 117, 176, 304], "area": 28353}, {"id": 5791859, "category_id": 119, "iscrowd": 0, "bbox": [386, 0, 254, 315], "area": 27863}, {"id": 10592938, "category_id": 184, "iscrowd": 0, "bbox": [247, 311, 393, 115], "area": 19617}], "file_name": "000000324818.png", "image_id": 324818}, {"segments_info": [{"id": 3825753, "category_id": 47, "iscrowd": 0, "bbox": [255, 238, 195, 112], "area": 16763}, {"id": 3232624, "category_id": 59, "iscrowd": 0, "bbox": [94, 357, 249, 263], "area": 38404}, {"id": 2836327, "category_id": 59, "iscrowd": 0, "bbox": [0, 16, 279, 289], "area": 49200}, {"id": 3424329, "category_id": 189, "iscrowd": 0, "bbox": [249, 0, 68, 95], "area": 3331}, {"id": 6252138, "category_id": 195, "iscrowd": 0, "bbox": [299, 0, 149, 418], "area": 24428}, {"id": 10733009, "category_id": 196, "iscrowd": 0, "bbox": [0, 218, 253, 153], "area": 10889}], "file_name": "000000324927.png", "image_id": 324927}, {"segments_info": [{"id": 922130, "category_id": 1, "iscrowd": 0, "bbox": [587, 174, 11, 18], "area": 103}, {"id": 1977398, "category_id": 1, "iscrowd": 0, "bbox": [599, 169, 24, 20], "area": 181}, {"id": 5735333, "category_id": 1, "iscrowd": 0, "bbox": [600, 165, 5, 15], "area": 52}, {"id": 4145983, "category_id": 1, "iscrowd": 0, "bbox": [541, 177, 9, 25], "area": 125}, {"id": 5262922, "category_id": 1, "iscrowd": 0, "bbox": [35, 180, 11, 21], "area": 153}, {"id": 5660064, "category_id": 1, "iscrowd": 0, "bbox": [78, 164, 3, 9], "area": 15}, {"id": 5337511, "category_id": 1, "iscrowd": 0, "bbox": [551, 168, 9, 10], "area": 61}, {"id": 9878988, "category_id": 1, "iscrowd": 0, "bbox": [43, 180, 9, 10], "area": 59}, {"id": 1909533, "category_id": 1, "iscrowd": 0, "bbox": [566, 145, 21, 51], "area": 615}, {"id": 2106421, "category_id": 1, "iscrowd": 0, "bbox": [15, 173, 8, 13], "area": 71}, {"id": 7440829, "category_id": 1, "iscrowd": 0, "bbox": [53, 166, 5, 10], "area": 33}, {"id": 2833742, "category_id": 1, "iscrowd": 0, "bbox": [72, 179, 8, 13], "area": 56}, {"id": 987669, "category_id": 1, "iscrowd": 0, "bbox": [590, 177, 23, 49], "area": 682}, {"id": 4677482, "category_id": 1, "iscrowd": 1, "bbox": [0, 161, 632, 33], "area": 2821}, {"id": 396296, "category_id": 15, "iscrowd": 0, "bbox": [548, 194, 52, 26], "area": 887}, {"id": 7434587, "category_id": 22, "iscrowd": 0, "bbox": [78, 66, 493, 484], "area": 175063}, {"id": 2756878, "category_id": 32, "iscrowd": 0, "bbox": [545, 190, 3, 8], "area": 13}, {"id": 5003600, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 225], "area": 67376}, {"id": 13684410, "category_id": 187, "iscrowd": 0, "bbox": [294, 0, 89, 70], "area": 3624}, {"id": 1920581, "category_id": 193, "iscrowd": 0, "bbox": [0, 161, 640, 367], "area": 65694}], "file_name": "000000325031.png", "image_id": 325031}, {"segments_info": [{"id": 9541016, "category_id": 70, "iscrowd": 0, "bbox": [69, 106, 139, 184], "area": 18004}, {"id": 6515824, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 306, 415], "area": 72482}, {"id": 2831990, "category_id": 189, "iscrowd": 0, "bbox": [333, 239, 306, 241], "area": 49064}, {"id": 5332582, "category_id": 190, "iscrowd": 0, "bbox": [0, 268, 397, 212], "area": 51358}, {"id": 11250605, "category_id": 199, "iscrowd": 0, "bbox": [264, 0, 376, 480], "area": 111200}], "file_name": "000000325114.png", "image_id": 325114}, {"segments_info": [{"id": 7896457, "category_id": 24, "iscrowd": 0, "bbox": [596, 109, 40, 219], "area": 4974}, {"id": 6646391, "category_id": 24, "iscrowd": 0, "bbox": [125, 28, 379, 447], "area": 81264}, {"id": 7566977, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 305], "area": 105455}, {"id": 8030362, "category_id": 194, "iscrowd": 0, "bbox": [0, 233, 640, 247], "area": 114747}], "file_name": "000000325306.png", "image_id": 325306}, {"segments_info": [{"id": 3683387, "category_id": 1, "iscrowd": 0, "bbox": [116, 5, 55, 94], "area": 3354}, {"id": 5461846, "category_id": 1, "iscrowd": 0, "bbox": [292, 75, 180, 229], "area": 17226}, {"id": 4146224, "category_id": 27, "iscrowd": 0, "bbox": [463, 48, 69, 50], "area": 2286}, {"id": 4803384, "category_id": 27, "iscrowd": 0, "bbox": [234, 46, 61, 47], "area": 2045}, {"id": 8219220, "category_id": 43, "iscrowd": 0, "bbox": [226, 211, 107, 48], "area": 2808}, {"id": 6310982, "category_id": 62, "iscrowd": 0, "bbox": [291, 0, 75, 90], "area": 4243}, {"id": 8613722, "category_id": 62, "iscrowd": 0, "bbox": [399, 3, 74, 88], "area": 2714}, {"id": 9134656, "category_id": 145, "iscrowd": 0, "bbox": [0, 146, 640, 213], "area": 119082}, {"id": 10459013, "category_id": 168, "iscrowd": 0, "bbox": [128, 46, 401, 62], "area": 476}, {"id": 6714969, "category_id": 190, "iscrowd": 0, "bbox": [0, 43, 640, 107], "area": 46283}, {"id": 4861987, "category_id": 199, "iscrowd": 0, "bbox": [26, 0, 614, 60], "area": 18640}], "file_name": "000000325347.png", "image_id": 325347}, {"segments_info": [{"id": 8225416, "category_id": 1, "iscrowd": 0, "bbox": [349, 133, 166, 347], "area": 33877}, {"id": 7497314, "category_id": 1, "iscrowd": 0, "bbox": [119, 103, 184, 376], "area": 43062}, {"id": 4148293, "category_id": 44, "iscrowd": 0, "bbox": [111, 393, 17, 47], "area": 542}, {"id": 2304298, "category_id": 44, "iscrowd": 0, "bbox": [569, 300, 15, 21], "area": 187}, {"id": 6844027, "category_id": 47, "iscrowd": 0, "bbox": [570, 318, 17, 25], "area": 354}, {"id": 1908252, "category_id": 63, "iscrowd": 0, "bbox": [445, 263, 195, 157], "area": 18002}, {"id": 4150634, "category_id": 63, "iscrowd": 0, "bbox": [1, 300, 338, 174], "area": 19629}, {"id": 2566954, "category_id": 73, "iscrowd": 0, "bbox": [282, 332, 38, 34], "area": 674}, {"id": 4277058, "category_id": 73, "iscrowd": 0, "bbox": [69, 370, 96, 58], "area": 2722}, {"id": 15527409, "category_id": 75, "iscrowd": 0, "bbox": [240, 176, 10, 18], "area": 108}, {"id": 14869223, "category_id": 75, "iscrowd": 0, "bbox": [493, 172, 12, 35], "area": 148}, {"id": 8683907, "category_id": 75, "iscrowd": 0, "bbox": [66, 417, 25, 15], "area": 227}, {"id": 3223079, "category_id": 75, "iscrowd": 0, "bbox": [139, 417, 34, 16], "area": 259}, {"id": 15264749, "category_id": 75, "iscrowd": 0, "bbox": [184, 168, 27, 69], "area": 502}, {"id": 4013663, "category_id": 84, "iscrowd": 0, "bbox": [325, 308, 8, 17], "area": 102}, {"id": 4343625, "category_id": 84, "iscrowd": 0, "bbox": [299, 290, 3, 16], "area": 48}, {"id": 6447201, "category_id": 84, "iscrowd": 0, "bbox": [311, 313, 5, 15], "area": 66}, {"id": 1974561, "category_id": 84, "iscrowd": 0, "bbox": [311, 289, 4, 16], "area": 52}, {"id": 2242095, "category_id": 84, "iscrowd": 0, "bbox": [319, 311, 4, 16], "area": 44}, {"id": 1448732, "category_id": 84, "iscrowd": 0, "bbox": [272, 291, 26, 18], "area": 312}, {"id": 7699591, "category_id": 84, "iscrowd": 0, "bbox": [307, 243, 38, 21], "area": 675}, {"id": 5332087, "category_id": 84, "iscrowd": 0, "bbox": [339, 264, 6, 17], "area": 87}, {"id": 9342871, "category_id": 84, "iscrowd": 0, "bbox": [305, 248, 3, 17], "area": 50}, {"id": 8026493, "category_id": 84, "iscrowd": 0, "bbox": [323, 271, 16, 5], "area": 62}, {"id": 8286061, "category_id": 84, "iscrowd": 0, "bbox": [300, 247, 5, 15], "area": 60}, {"id": 4144711, "category_id": 84, "iscrowd": 0, "bbox": [302, 290, 7, 16], "area": 77}, {"id": 3684933, "category_id": 84, "iscrowd": 0, "bbox": [332, 308, 13, 17], "area": 212}, {"id": 6778744, "category_id": 156, "iscrowd": 0, "bbox": [274, 231, 91, 152], "area": 5410}, {"id": 6251365, "category_id": 180, "iscrowd": 0, "bbox": [0, 86, 640, 253], "area": 43035}, {"id": 7435898, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 84], "area": 42149}, {"id": 1316374, "category_id": 189, "iscrowd": 0, "bbox": [36, 317, 604, 163], "area": 15656}, {"id": 5989224, "category_id": 195, "iscrowd": 0, "bbox": [279, 91, 361, 299], "area": 2667}, {"id": 8555924, "category_id": 199, "iscrowd": 0, "bbox": [0, 34, 640, 244], "area": 52938}, {"id": 4542296, "category_id": 200, "iscrowd": 0, "bbox": [262, 379, 378, 101], "area": 17341}], "file_name": "000000325483.png", "image_id": 325483}, {"segments_info": [{"id": 2567739, "category_id": 88, "iscrowd": 0, "bbox": [193, 137, 131, 141], "area": 10859}, {"id": 5460822, "category_id": 100, "iscrowd": 0, "bbox": [0, 180, 500, 194], "area": 75329}, {"id": 5856864, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 244], "area": 100697}], "file_name": "000000325527.png", "image_id": 325527}, {"segments_info": [{"id": 6053998, "category_id": 1, "iscrowd": 0, "bbox": [196, 63, 175, 314], "area": 27206}, {"id": 7431005, "category_id": 62, "iscrowd": 0, "bbox": [505, 7, 135, 177], "area": 9780}, {"id": 4405549, "category_id": 62, "iscrowd": 0, "bbox": [2, 195, 26, 199], "area": 2747}, {"id": 6780790, "category_id": 62, "iscrowd": 0, "bbox": [159, 133, 203, 188], "area": 5149}, {"id": 5196363, "category_id": 62, "iscrowd": 0, "bbox": [445, 93, 158, 147], "area": 11804}, {"id": 7956312, "category_id": 62, "iscrowd": 0, "bbox": [18, 6, 130, 156], "area": 6115}, {"id": 7647860, "category_id": 73, "iscrowd": 0, "bbox": [397, 315, 129, 66], "area": 1326}, {"id": 7186027, "category_id": 73, "iscrowd": 0, "bbox": [405, 305, 128, 52], "area": 1122}, {"id": 8885112, "category_id": 73, "iscrowd": 0, "bbox": [405, 294, 129, 52], "area": 1716}, {"id": 8356975, "category_id": 73, "iscrowd": 0, "bbox": [67, 241, 168, 182], "area": 13527}, {"id": 7647347, "category_id": 73, "iscrowd": 0, "bbox": [396, 328, 127, 62], "area": 1104}, {"id": 8153427, "category_id": 73, "iscrowd": 0, "bbox": [373, 199, 191, 135], "area": 10106}, {"id": 7449201, "category_id": 73, "iscrowd": 0, "bbox": [398, 304, 131, 65], "area": 1248}, {"id": 13026508, "category_id": 74, "iscrowd": 0, "bbox": [313, 340, 37, 34], "area": 531}, {"id": 5197120, "category_id": 76, "iscrowd": 0, "bbox": [414, 252, 66, 69], "area": 1919}, {"id": 10526879, "category_id": 76, "iscrowd": 0, "bbox": [298, 264, 94, 61], "area": 2558}, {"id": 5540170, "category_id": 76, "iscrowd": 0, "bbox": [102, 327, 104, 75], "area": 3086}, {"id": 4865587, "category_id": 77, "iscrowd": 0, "bbox": [544, 243, 20, 15], "area": 219}, {"id": 14801885, "category_id": 181, "iscrowd": 0, "bbox": [198, 0, 442, 95], "area": 10629}, {"id": 10199708, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 86920}, {"id": 11248800, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 148], "area": 36534}, {"id": 8089445, "category_id": 200, "iscrowd": 0, "bbox": [0, 60, 640, 334], "area": 66684}], "file_name": "000000325838.png", "image_id": 325838}, {"segments_info": [{"id": 5590686, "category_id": 1, "iscrowd": 0, "bbox": [146, 43, 196, 291], "area": 22046}, {"id": 15198694, "category_id": 34, "iscrowd": 0, "bbox": [320, 219, 50, 15], "area": 480}, {"id": 7570046, "category_id": 149, "iscrowd": 0, "bbox": [0, 168, 500, 103], "area": 3093}, {"id": 2308390, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 260], "area": 72326}, {"id": 5346938, "category_id": 193, "iscrowd": 0, "bbox": [0, 183, 500, 151], "area": 46255}], "file_name": "000000325991.png", "image_id": 325991}, {"segments_info": [{"id": 4675678, "category_id": 51, "iscrowd": 0, "bbox": [519, 241, 59, 20], "area": 565}, {"id": 2315888, "category_id": 52, "iscrowd": 0, "bbox": [534, 242, 30, 12], "area": 190}, {"id": 1250842, "category_id": 62, "iscrowd": 0, "bbox": [462, 233, 71, 110], "area": 1494}, {"id": 2502191, "category_id": 62, "iscrowd": 0, "bbox": [608, 241, 26, 50], "area": 696}, {"id": 3950410, "category_id": 62, "iscrowd": 0, "bbox": [610, 235, 19, 14], "area": 92}, {"id": 7109507, "category_id": 62, "iscrowd": 0, "bbox": [530, 220, 47, 24], "area": 795}, {"id": 658446, "category_id": 62, "iscrowd": 0, "bbox": [478, 254, 91, 154], "area": 6775}, {"id": 4213841, "category_id": 62, "iscrowd": 0, "bbox": [473, 227, 19, 24], "area": 317}, {"id": 2699572, "category_id": 62, "iscrowd": 0, "bbox": [460, 235, 8, 18], "area": 76}, {"id": 526603, "category_id": 63, "iscrowd": 0, "bbox": [3, 266, 266, 155], "area": 23537}, {"id": 526861, "category_id": 63, "iscrowd": 0, "bbox": [28, 209, 108, 95], "area": 7385}, {"id": 2435886, "category_id": 67, "iscrowd": 0, "bbox": [447, 237, 173, 153], "area": 7755}, {"id": 2107694, "category_id": 72, "iscrowd": 0, "bbox": [230, 203, 44, 32], "area": 1345}, {"id": 8153686, "category_id": 73, "iscrowd": 0, "bbox": [154, 265, 45, 13], "area": 307}, {"id": 4147275, "category_id": 75, "iscrowd": 0, "bbox": [211, 287, 21, 5], "area": 51}, {"id": 4608854, "category_id": 85, "iscrowd": 0, "bbox": [605, 76, 34, 29], "area": 788}, {"id": 2898508, "category_id": 109, "iscrowd": 0, "bbox": [0, 128, 254, 163], "area": 14983}, {"id": 10531519, "category_id": 112, "iscrowd": 0, "bbox": [422, 118, 96, 146], "area": 9286}, {"id": 2173763, "category_id": 118, "iscrowd": 0, "bbox": [81, 241, 559, 185], "area": 48325}, {"id": 1515049, "category_id": 156, "iscrowd": 0, "bbox": [219, 217, 82, 44], "area": 1749}, {"id": 8425106, "category_id": 180, "iscrowd": 0, "bbox": [505, 117, 135, 145], "area": 14132}, {"id": 15396846, "category_id": 181, "iscrowd": 0, "bbox": [92, 147, 82, 108], "area": 5372}, {"id": 8294557, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 122], "area": 65022}, {"id": 1251098, "category_id": 188, "iscrowd": 0, "bbox": [300, 205, 98, 68], "area": 4185}, {"id": 7308943, "category_id": 199, "iscrowd": 0, "bbox": [0, 66, 640, 197], "area": 40273}, {"id": 3488061, "category_id": 200, "iscrowd": 0, "bbox": [141, 287, 226, 107], "area": 14094}], "file_name": "000000326082.png", "image_id": 326082}, {"segments_info": [{"id": 5130054, "category_id": 1, "iscrowd": 0, "bbox": [240, 185, 128, 408], "area": 28986}, {"id": 1710361, "category_id": 27, "iscrowd": 0, "bbox": [269, 247, 121, 178], "area": 1592}, {"id": 7696754, "category_id": 36, "iscrowd": 0, "bbox": [107, 549, 349, 52], "area": 10920}, {"id": 13553356, "category_id": 159, "iscrowd": 0, "bbox": [0, 164, 480, 476], "area": 124999}, {"id": 3160121, "category_id": 184, "iscrowd": 0, "bbox": [112, 370, 33, 15], "area": 259}, {"id": 10978915, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 214], "area": 92418}, {"id": 5525318, "category_id": 192, "iscrowd": 0, "bbox": [0, 161, 480, 247], "area": 42332}], "file_name": "000000326128.png", "image_id": 326128}, {"segments_info": [{"id": 1063241, "category_id": 1, "iscrowd": 0, "bbox": [510, 232, 88, 175], "area": 4701}, {"id": 2312016, "category_id": 1, "iscrowd": 0, "bbox": [132, 221, 92, 187], "area": 5838}, {"id": 1406349, "category_id": 1, "iscrowd": 0, "bbox": [287, 260, 55, 89], "area": 2687}, {"id": 2179401, "category_id": 1, "iscrowd": 0, "bbox": [91, 213, 52, 191], "area": 3525}, {"id": 6970982, "category_id": 1, "iscrowd": 0, "bbox": [282, 223, 33, 132], "area": 2633}, {"id": 6838885, "category_id": 1, "iscrowd": 0, "bbox": [372, 224, 64, 181], "area": 6536}, {"id": 3419983, "category_id": 1, "iscrowd": 0, "bbox": [208, 283, 32, 116], "area": 2160}, {"id": 2989728, "category_id": 42, "iscrowd": 0, "bbox": [291, 393, 70, 9], "area": 265}, {"id": 11824690, "category_id": 42, "iscrowd": 0, "bbox": [200, 340, 144, 69], "area": 3994}, {"id": 7549462, "category_id": 42, "iscrowd": 0, "bbox": [82, 263, 129, 66], "area": 3061}, {"id": 7687985, "category_id": 42, "iscrowd": 0, "bbox": [509, 283, 105, 51], "area": 1137}, {"id": 10906940, "category_id": 42, "iscrowd": 0, "bbox": [94, 230, 178, 92], "area": 2649}, {"id": 5000283, "category_id": 154, "iscrowd": 0, "bbox": [0, 390, 640, 90], "area": 50886}, {"id": 9005652, "category_id": 155, "iscrowd": 0, "bbox": [0, 174, 640, 243], "area": 101977}, {"id": 11963240, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 126], "area": 72271}, {"id": 10510138, "category_id": 192, "iscrowd": 0, "bbox": [0, 107, 640, 77], "area": 41565}], "file_name": "000000326174.png", "image_id": 326174}, {"segments_info": [{"id": 4936050, "category_id": 1, "iscrowd": 0, "bbox": [587, 0, 36, 78], "area": 1800}, {"id": 9667731, "category_id": 1, "iscrowd": 0, "bbox": [408, 75, 58, 91], "area": 3365}, {"id": 7826585, "category_id": 1, "iscrowd": 0, "bbox": [271, 52, 53, 100], "area": 3289}, {"id": 8873028, "category_id": 1, "iscrowd": 0, "bbox": [0, 102, 19, 67], "area": 812}, {"id": 6707054, "category_id": 1, "iscrowd": 0, "bbox": [11, 182, 63, 183], "area": 4725}, {"id": 9405854, "category_id": 1, "iscrowd": 0, "bbox": [396, 0, 45, 21], "area": 323}, {"id": 4672614, "category_id": 1, "iscrowd": 0, "bbox": [366, 0, 28, 38], "area": 630}, {"id": 5916743, "category_id": 1, "iscrowd": 0, "bbox": [165, 1, 53, 98], "area": 2017}, {"id": 5790328, "category_id": 1, "iscrowd": 0, "bbox": [96, 0, 34, 24], "area": 587}, {"id": 10521742, "category_id": 1, "iscrowd": 0, "bbox": [39, 66, 56, 102], "area": 3128}, {"id": 11968165, "category_id": 1, "iscrowd": 0, "bbox": [537, 0, 47, 80], "area": 2709}, {"id": 5066086, "category_id": 1, "iscrowd": 0, "bbox": [124, 3, 41, 83], "area": 2206}, {"id": 7364972, "category_id": 1, "iscrowd": 1, "bbox": [168, 60, 315, 315], "area": 16459}, {"id": 12223076, "category_id": 28, "iscrowd": 0, "bbox": [160, 14, 90, 33], "area": 2697}, {"id": 10061956, "category_id": 43, "iscrowd": 0, "bbox": [418, 225, 55, 32], "area": 127}, {"id": 11436146, "category_id": 62, "iscrowd": 0, "bbox": [388, 254, 63, 95], "area": 2426}, {"id": 4930357, "category_id": 62, "iscrowd": 0, "bbox": [170, 124, 83, 198], "area": 4273}, {"id": 4146796, "category_id": 62, "iscrowd": 0, "bbox": [190, 152, 30, 12], "area": 210}, {"id": 11305071, "category_id": 62, "iscrowd": 0, "bbox": [0, 258, 22, 94], "area": 1444}, {"id": 10196370, "category_id": 62, "iscrowd": 0, "bbox": [465, 256, 62, 93], "area": 3706}, {"id": 8352101, "category_id": 138, "iscrowd": 0, "bbox": [50, 252, 175, 175], "area": 12578}, {"id": 13090220, "category_id": 145, "iscrowd": 0, "bbox": [0, 306, 640, 121], "area": 50891}, {"id": 5853513, "category_id": 161, "iscrowd": 0, "bbox": [0, 0, 640, 172], "area": 74748}, {"id": 14666440, "category_id": 168, "iscrowd": 0, "bbox": [183, 203, 351, 90], "area": 2666}, {"id": 5458259, "category_id": 177, "iscrowd": 0, "bbox": [214, 211, 19, 30], "area": 285}, {"id": 8997946, "category_id": 189, "iscrowd": 0, "bbox": [0, 243, 459, 99], "area": 16623}, {"id": 6963762, "category_id": 199, "iscrowd": 0, "bbox": [0, 138, 640, 194], "area": 50803}], "file_name": "000000326248.png", "image_id": 326248}, {"segments_info": [{"id": 3624330, "category_id": 1, "iscrowd": 0, "bbox": [22, 399, 378, 190], "area": 30305}, {"id": 4870339, "category_id": 60, "iscrowd": 0, "bbox": [97, 127, 331, 317], "area": 74821}], "file_name": "000000326462.png", "image_id": 326462}, {"segments_info": [{"id": 11381944, "category_id": 1, "iscrowd": 0, "bbox": [264, 30, 356, 325], "area": 38727}, {"id": 8154981, "category_id": 1, "iscrowd": 0, "bbox": [325, 164, 93, 147], "area": 9095}, {"id": 13027275, "category_id": 1, "iscrowd": 0, "bbox": [458, 23, 182, 337], "area": 37230}, {"id": 8354172, "category_id": 1, "iscrowd": 0, "bbox": [1, 8, 265, 348], "area": 70176}, {"id": 11513780, "category_id": 1, "iscrowd": 0, "bbox": [416, 120, 32, 63], "area": 587}, {"id": 8091496, "category_id": 1, "iscrowd": 0, "bbox": [296, 140, 50, 102], "area": 1605}, {"id": 5655938, "category_id": 3, "iscrowd": 0, "bbox": [243, 269, 91, 87], "area": 5321}, {"id": 7497560, "category_id": 77, "iscrowd": 0, "bbox": [174, 92, 45, 119], "area": 2821}, {"id": 11181184, "category_id": 77, "iscrowd": 0, "bbox": [254, 102, 40, 75], "area": 2179}, {"id": 5730936, "category_id": 181, "iscrowd": 0, "bbox": [121, 0, 79, 120], "area": 4859}, {"id": 8421246, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 218], "area": 46467}, {"id": 10986918, "category_id": 199, "iscrowd": 0, "bbox": [273, 115, 77, 77], "area": 617}], "file_name": "000000326541.png", "image_id": 326541}, {"segments_info": [{"id": 8479591, "category_id": 1, "iscrowd": 0, "bbox": [192, 266, 8, 11], "area": 50}, {"id": 8081493, "category_id": 1, "iscrowd": 0, "bbox": [497, 285, 8, 21], "area": 108}, {"id": 6378613, "category_id": 1, "iscrowd": 0, "bbox": [380, 316, 85, 107], "area": 4096}, {"id": 9740704, "category_id": 35, "iscrowd": 0, "bbox": [366, 413, 87, 10], "area": 215}, {"id": 15590624, "category_id": 159, "iscrowd": 0, "bbox": [0, 232, 640, 248], "area": 120310}, {"id": 11498317, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 323], "area": 182290}], "file_name": "000000326542.png", "image_id": 326542}, {"segments_info": [{"id": 3225417, "category_id": 3, "iscrowd": 0, "bbox": [468, 393, 6, 5], "area": 25}, {"id": 5334123, "category_id": 3, "iscrowd": 0, "bbox": [398, 395, 15, 14], "area": 85}, {"id": 3622731, "category_id": 3, "iscrowd": 0, "bbox": [399, 398, 10, 14], "area": 81}, {"id": 3819343, "category_id": 3, "iscrowd": 0, "bbox": [378, 399, 26, 16], "area": 325}, {"id": 2371629, "category_id": 3, "iscrowd": 0, "bbox": [249, 406, 14, 12], "area": 105}, {"id": 3029828, "category_id": 3, "iscrowd": 0, "bbox": [355, 404, 15, 22], "area": 192}, {"id": 4017493, "category_id": 3, "iscrowd": 0, "bbox": [291, 397, 54, 40], "area": 1662}, {"id": 2764877, "category_id": 3, "iscrowd": 0, "bbox": [499, 396, 9, 8], "area": 57}, {"id": 3095617, "category_id": 3, "iscrowd": 0, "bbox": [341, 403, 20, 26], "area": 365}, {"id": 2962262, "category_id": 3, "iscrowd": 0, "bbox": [414, 393, 19, 21], "area": 283}, {"id": 4541237, "category_id": 10, "iscrowd": 0, "bbox": [469, 379, 3, 4], "area": 8}, {"id": 6843978, "category_id": 10, "iscrowd": 0, "bbox": [460, 389, 3, 2], "area": 4}, {"id": 465435, "category_id": 10, "iscrowd": 0, "bbox": [472, 380, 2, 2], "area": 3}, {"id": 3820884, "category_id": 149, "iscrowd": 0, "bbox": [35, 394, 605, 86], "area": 29643}, {"id": 1583916, "category_id": 184, "iscrowd": 0, "bbox": [403, 286, 237, 132], "area": 15726}, {"id": 10531766, "category_id": 187, "iscrowd": 0, "bbox": [99, 0, 541, 370], "area": 100930}, {"id": 1912641, "category_id": 191, "iscrowd": 0, "bbox": [0, 398, 378, 82], "area": 7802}, {"id": 4084834, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 416, 456], "area": 124912}], "file_name": "000000326627.png", "image_id": 326627}, {"segments_info": [{"id": 4605533, "category_id": 1, "iscrowd": 0, "bbox": [0, 115, 203, 363], "area": 54178}, {"id": 3093577, "category_id": 1, "iscrowd": 0, "bbox": [442, 18, 198, 435], "area": 54753}, {"id": 5793385, "category_id": 1, "iscrowd": 0, "bbox": [267, 31, 212, 443], "area": 53216}, {"id": 3091498, "category_id": 31, "iscrowd": 0, "bbox": [161, 234, 129, 169], "area": 9363}, {"id": 3948871, "category_id": 77, "iscrowd": 0, "bbox": [143, 322, 43, 17], "area": 529}, {"id": 3685440, "category_id": 77, "iscrowd": 0, "bbox": [406, 301, 25, 13], "area": 187}, {"id": 2435627, "category_id": 77, "iscrowd": 0, "bbox": [579, 256, 28, 5], "area": 90}, {"id": 10066590, "category_id": 84, "iscrowd": 0, "bbox": [610, 205, 30, 25], "area": 547}, {"id": 6248059, "category_id": 84, "iscrowd": 0, "bbox": [187, 341, 74, 41], "area": 2188}, {"id": 9343118, "category_id": 84, "iscrowd": 0, "bbox": [82, 335, 125, 52], "area": 2974}, {"id": 9605517, "category_id": 84, "iscrowd": 0, "bbox": [328, 253, 129, 86], "area": 4103}, {"id": 10268853, "category_id": 125, "iscrowd": 0, "bbox": [150, 21, 429, 250], "area": 17712}, {"id": 16645885, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 593, 112], "area": 33385}, {"id": 3162452, "category_id": 171, "iscrowd": 0, "bbox": [0, 250, 472, 186], "area": 2602}, {"id": 7967639, "category_id": 175, "iscrowd": 0, "bbox": [0, 54, 293, 90], "area": 6511}, {"id": 6322046, "category_id": 184, "iscrowd": 0, "bbox": [395, 0, 245, 134], "area": 8139}, {"id": 2373446, "category_id": 190, "iscrowd": 0, "bbox": [244, 309, 396, 171], "area": 15784}, {"id": 14347506, "category_id": 191, "iscrowd": 0, "bbox": [0, 37, 548, 147], "area": 11009}, {"id": 3362653, "category_id": 194, "iscrowd": 0, "bbox": [241, 106, 399, 211], "area": 1306}, {"id": 4277069, "category_id": 195, "iscrowd": 0, "bbox": [610, 205, 30, 45], "area": 511}, {"id": 6389131, "category_id": 199, "iscrowd": 0, "bbox": [0, 245, 640, 235], "area": 21668}], "file_name": "000000326970.png", "image_id": 326970}, {"segments_info": [{"id": 2303532, "category_id": 1, "iscrowd": 0, "bbox": [37, 1, 149, 161], "area": 11805}, {"id": 10331310, "category_id": 41, "iscrowd": 0, "bbox": [39, 112, 116, 74], "area": 1959}, {"id": 5655128, "category_id": 144, "iscrowd": 0, "bbox": [0, 0, 640, 273], "area": 76923}, {"id": 14013398, "category_id": 191, "iscrowd": 0, "bbox": [0, 19, 640, 381], "area": 162487}], "file_name": "000000327306.png", "image_id": 327306}, {"segments_info": [{"id": 7960965, "category_id": 1, "iscrowd": 0, "bbox": [2, 2, 541, 353], "area": 105655}, {"id": 7302252, "category_id": 50, "iscrowd": 0, "bbox": [90, 105, 120, 91], "area": 407}, {"id": 3683141, "category_id": 61, "iscrowd": 0, "bbox": [231, 187, 141, 49], "area": 5270}, {"id": 4471890, "category_id": 85, "iscrowd": 0, "bbox": [388, 274, 73, 57], "area": 2532}, {"id": 12765123, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 361], "area": 109172}], "file_name": "000000327592.png", "image_id": 327592}, {"segments_info": [{"id": 7037272, "category_id": 1, "iscrowd": 0, "bbox": [48, 47, 271, 376], "area": 34688}, {"id": 1578516, "category_id": 62, "iscrowd": 0, "bbox": [52, 199, 197, 210], "area": 8027}, {"id": 3158065, "category_id": 86, "iscrowd": 0, "bbox": [25, 284, 69, 137], "area": 6244}, {"id": 4808314, "category_id": 118, "iscrowd": 0, "bbox": [0, 221, 333, 279], "area": 55054}, {"id": 5071465, "category_id": 130, "iscrowd": 0, "bbox": [247, 0, 29, 30], "area": 695}, {"id": 8291447, "category_id": 181, "iscrowd": 0, "bbox": [49, 0, 159, 170], "area": 12927}, {"id": 7567222, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 333, 316], "area": 47884}], "file_name": "000000327601.png", "image_id": 327601}, {"segments_info": [{"id": 5329756, "category_id": 1, "iscrowd": 0, "bbox": [157, 35, 101, 343], "area": 25494}, {"id": 6502452, "category_id": 1, "iscrowd": 0, "bbox": [163, 140, 4, 8], "area": 25}, {"id": 8025225, "category_id": 35, "iscrowd": 0, "bbox": [49, 341, 336, 48], "area": 2163}, {"id": 13023672, "category_id": 159, "iscrowd": 0, "bbox": [0, 130, 640, 350], "area": 186438}, {"id": 6316905, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 199], "area": 45688}, {"id": 16251386, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 614, 134], "area": 46672}], "file_name": "000000327605.png", "image_id": 327605}, {"segments_info": [{"id": 7636637, "category_id": 1, "iscrowd": 0, "bbox": [63, 106, 189, 524], "area": 58305}, {"id": 6716305, "category_id": 43, "iscrowd": 0, "bbox": [145, 300, 95, 210], "area": 7512}, {"id": 6122879, "category_id": 128, "iscrowd": 0, "bbox": [0, 205, 95, 145], "area": 9856}, {"id": 8162210, "category_id": 138, "iscrowd": 0, "bbox": [0, 335, 379, 181], "area": 35743}, {"id": 5006971, "category_id": 145, "iscrowd": 0, "bbox": [0, 496, 370, 133], "area": 34384}, {"id": 5138299, "category_id": 177, "iscrowd": 0, "bbox": [241, 264, 138, 79], "area": 6925}, {"id": 6914198, "category_id": 184, "iscrowd": 0, "bbox": [251, 211, 128, 89], "area": 6982}, {"id": 13029082, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 366, 264], "area": 72955}, {"id": 12699858, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 379, 640], "area": 9329}], "file_name": "000000327617.png", "image_id": 327617}, {"segments_info": [{"id": 7897501, "category_id": 1, "iscrowd": 0, "bbox": [329, 269, 155, 150], "area": 14802}, {"id": 10332853, "category_id": 1, "iscrowd": 0, "bbox": [115, 390, 41, 33], "area": 1026}, {"id": 12295280, "category_id": 1, "iscrowd": 0, "bbox": [152, 331, 64, 97], "area": 3744}, {"id": 12231301, "category_id": 1, "iscrowd": 0, "bbox": [558, 276, 15, 17], "area": 151}, {"id": 8571315, "category_id": 37, "iscrowd": 0, "bbox": [381, 157, 18, 20], "area": 285}, {"id": 5661279, "category_id": 43, "iscrowd": 0, "bbox": [553, 271, 6, 12], "area": 44}, {"id": 6532779, "category_id": 43, "iscrowd": 0, "bbox": [385, 210, 79, 61], "area": 984}, {"id": 13090235, "category_id": 47, "iscrowd": 0, "bbox": [143, 410, 10, 13], "area": 56}, {"id": 9737872, "category_id": 138, "iscrowd": 0, "bbox": [58, 214, 67, 195], "area": 5384}, {"id": 6645079, "category_id": 151, "iscrowd": 0, "bbox": [0, 148, 134, 97], "area": 8732}, {"id": 4808281, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 340], "area": 127281}, {"id": 4870193, "category_id": 185, "iscrowd": 0, "bbox": [0, 266, 640, 103], "area": 17006}, {"id": 16448507, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 159], "area": 43294}, {"id": 7381886, "category_id": 193, "iscrowd": 0, "bbox": [0, 342, 640, 86], "area": 27455}, {"id": 5197640, "category_id": 197, "iscrowd": 0, "bbox": [0, 80, 595, 207], "area": 13326}], "file_name": "000000327701.png", "image_id": 327701}, {"segments_info": [{"id": 2960185, "category_id": 17, "iscrowd": 0, "bbox": [202, 116, 250, 144], "area": 19957}, {"id": 10004388, "category_id": 44, "iscrowd": 0, "bbox": [114, 12, 54, 126], "area": 4567}, {"id": 8688541, "category_id": 47, "iscrowd": 0, "bbox": [261, 2, 61, 82], "area": 3521}, {"id": 7438989, "category_id": 47, "iscrowd": 0, "bbox": [308, 0, 54, 71], "area": 2329}, {"id": 8420998, "category_id": 70, "iscrowd": 0, "bbox": [1, 253, 32, 163], "area": 3758}, {"id": 9477029, "category_id": 81, "iscrowd": 0, "bbox": [146, 40, 344, 222], "area": 23023}, {"id": 6911878, "category_id": 90, "iscrowd": 0, "bbox": [334, 1, 18, 50], "area": 348}, {"id": 10068652, "category_id": 188, "iscrowd": 0, "bbox": [0, 13, 605, 411], "area": 130750}, {"id": 11974584, "category_id": 195, "iscrowd": 0, "bbox": [80, 321, 129, 103], "area": 8506}, {"id": 9278621, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 424], "area": 73248}], "file_name": "000000327769.png", "image_id": 327769}, {"segments_info": [{"id": 7111298, "category_id": 48, "iscrowd": 0, "bbox": [233, 2, 188, 381], "area": 25455}, {"id": 9939357, "category_id": 61, "iscrowd": 0, "bbox": [0, 36, 508, 427], "area": 147847}, {"id": 14995900, "category_id": 189, "iscrowd": 0, "bbox": [602, 0, 38, 50], "area": 1220}], "file_name": "000000327780.png", "image_id": 327780}, {"segments_info": [{"id": 7169374, "category_id": 3, "iscrowd": 0, "bbox": [557, 199, 12, 14], "area": 137}, {"id": 10853529, "category_id": 3, "iscrowd": 0, "bbox": [534, 205, 16, 10], "area": 119}, {"id": 9867408, "category_id": 3, "iscrowd": 0, "bbox": [494, 205, 15, 10], "area": 125}, {"id": 6709080, "category_id": 3, "iscrowd": 0, "bbox": [594, 204, 11, 10], "area": 93}, {"id": 10325372, "category_id": 3, "iscrowd": 0, "bbox": [620, 203, 20, 11], "area": 131}, {"id": 11710898, "category_id": 3, "iscrowd": 0, "bbox": [577, 202, 14, 12], "area": 123}, {"id": 9929829, "category_id": 3, "iscrowd": 0, "bbox": [604, 202, 17, 13], "area": 188}, {"id": 7497826, "category_id": 3, "iscrowd": 0, "bbox": [568, 203, 12, 11], "area": 103}, {"id": 11116958, "category_id": 3, "iscrowd": 0, "bbox": [515, 203, 17, 12], "area": 153}, {"id": 4078412, "category_id": 15, "iscrowd": 0, "bbox": [240, 244, 179, 63], "area": 6267}, {"id": 2565675, "category_id": 15, "iscrowd": 0, "bbox": [105, 279, 313, 137], "area": 20620}, {"id": 5528169, "category_id": 15, "iscrowd": 0, "bbox": [16, 249, 105, 88], "area": 6183}, {"id": 7173238, "category_id": 15, "iscrowd": 0, "bbox": [457, 228, 54, 25], "area": 519}, {"id": 8290699, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 331], "area": 44964}, {"id": 16184820, "category_id": 187, "iscrowd": 0, "bbox": [107, 54, 533, 93], "area": 6732}, {"id": 7762536, "category_id": 191, "iscrowd": 0, "bbox": [254, 250, 386, 230], "area": 58367}, {"id": 4811367, "category_id": 193, "iscrowd": 0, "bbox": [0, 197, 640, 283], "area": 24252}, {"id": 10198690, "category_id": 197, "iscrowd": 0, "bbox": [0, 17, 615, 202], "area": 35810}, {"id": 5264295, "category_id": 199, "iscrowd": 0, "bbox": [0, 87, 397, 393], "area": 67087}], "file_name": "000000327890.png", "image_id": 327890}, {"segments_info": [{"id": 3366779, "category_id": 88, "iscrowd": 0, "bbox": [106, 179, 277, 315], "area": 53313}, {"id": 2581647, "category_id": 88, "iscrowd": 0, "bbox": [137, 54, 246, 291], "area": 27194}, {"id": 1919354, "category_id": 88, "iscrowd": 0, "bbox": [0, 165, 145, 276], "area": 24350}, {"id": 402525, "category_id": 88, "iscrowd": 0, "bbox": [82, 0, 152, 97], "area": 9000}, {"id": 1384009, "category_id": 88, "iscrowd": 0, "bbox": [6, 7, 139, 250], "area": 20043}, {"id": 3225246, "category_id": 92, "iscrowd": 0, "bbox": [272, 0, 84, 66], "area": 4177}, {"id": 2308419, "category_id": 193, "iscrowd": 0, "bbox": [253, 0, 172, 222], "area": 20805}], "file_name": "000000328030.png", "image_id": 328030}, {"segments_info": [{"id": 207782, "category_id": 60, "iscrowd": 0, "bbox": [121, 286, 61, 49], "area": 1481}, {"id": 341425, "category_id": 60, "iscrowd": 0, "bbox": [330, 453, 101, 98], "area": 7506}, {"id": 275367, "category_id": 60, "iscrowd": 0, "bbox": [245, 301, 75, 59], "area": 3358}, {"id": 408754, "category_id": 60, "iscrowd": 0, "bbox": [148, 394, 83, 86], "area": 3994}, {"id": 205709, "category_id": 60, "iscrowd": 0, "bbox": [182, 278, 70, 49], "area": 2632}, {"id": 342716, "category_id": 60, "iscrowd": 0, "bbox": [239, 362, 95, 72], "area": 4395}, {"id": 269175, "category_id": 60, "iscrowd": 0, "bbox": [85, 293, 80, 71], "area": 3641}, {"id": 474811, "category_id": 60, "iscrowd": 0, "bbox": [173, 455, 88, 101], "area": 6583}, {"id": 474815, "category_id": 60, "iscrowd": 0, "bbox": [243, 496, 103, 88], "area": 7151}, {"id": 342196, "category_id": 60, "iscrowd": 0, "bbox": [239, 426, 84, 74], "area": 4764}, {"id": 208292, "category_id": 60, "iscrowd": 0, "bbox": [316, 328, 71, 68], "area": 3698}, {"id": 2370628, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 480, 198], "area": 10396}, {"id": 8496318, "category_id": 190, "iscrowd": 0, "bbox": [0, 193, 56, 114], "area": 3626}, {"id": 666766, "category_id": 196, "iscrowd": 0, "bbox": [278, 361, 71, 218], "area": 160}, {"id": 9280936, "category_id": 199, "iscrowd": 0, "bbox": [0, 14, 480, 130], "area": 20126}], "file_name": "000000328117.png", "image_id": 328117}, {"segments_info": [{"id": 7302274, "category_id": 1, "iscrowd": 0, "bbox": [464, 119, 17, 38], "area": 315}, {"id": 4998246, "category_id": 1, "iscrowd": 0, "bbox": [474, 124, 22, 34], "area": 432}, {"id": 8157044, "category_id": 1, "iscrowd": 0, "bbox": [493, 123, 46, 62], "area": 863}, {"id": 7037533, "category_id": 1, "iscrowd": 0, "bbox": [174, 121, 177, 305], "area": 21470}, {"id": 8615794, "category_id": 1, "iscrowd": 0, "bbox": [529, 116, 42, 58], "area": 629}, {"id": 8750214, "category_id": 1, "iscrowd": 0, "bbox": [546, 145, 50, 39], "area": 912}, {"id": 3421751, "category_id": 1, "iscrowd": 0, "bbox": [448, 122, 17, 27], "area": 338}, {"id": 4409663, "category_id": 15, "iscrowd": 0, "bbox": [388, 157, 43, 14], "area": 199}, {"id": 4600099, "category_id": 27, "iscrowd": 0, "bbox": [397, 169, 29, 21], "area": 478}, {"id": 13624800, "category_id": 34, "iscrowd": 0, "bbox": [105, 89, 51, 44], "area": 1680}, {"id": 5201236, "category_id": 62, "iscrowd": 0, "bbox": [548, 147, 21, 30], "area": 147}, {"id": 3948342, "category_id": 62, "iscrowd": 0, "bbox": [529, 146, 33, 40], "area": 653}, {"id": 4735034, "category_id": 62, "iscrowd": 0, "bbox": [486, 146, 32, 36], "area": 782}, {"id": 2970955, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 209], "area": 89633}, {"id": 6318434, "category_id": 189, "iscrowd": 0, "bbox": [389, 134, 139, 57], "area": 2161}, {"id": 12700361, "category_id": 191, "iscrowd": 0, "bbox": [527, 122, 113, 34], "area": 1217}, {"id": 6661529, "category_id": 193, "iscrowd": 0, "bbox": [0, 37, 640, 389], "area": 149787}], "file_name": "000000328238.png", "image_id": 328238}, {"segments_info": [{"id": 6115140, "category_id": 9, "iscrowd": 0, "bbox": [217, 213, 9, 2], "area": 16}, {"id": 1845292, "category_id": 9, "iscrowd": 0, "bbox": [45, 355, 136, 69], "area": 6751}, {"id": 5210261, "category_id": 9, "iscrowd": 0, "bbox": [191, 322, 120, 41], "area": 3822}, {"id": 4806232, "category_id": 9, "iscrowd": 0, "bbox": [119, 221, 215, 61], "area": 8259}, {"id": 3039611, "category_id": 9, "iscrowd": 0, "bbox": [145, 342, 109, 67], "area": 4133}, {"id": 5455918, "category_id": 9, "iscrowd": 0, "bbox": [565, 208, 19, 7], "area": 72}, {"id": 5531504, "category_id": 95, "iscrowd": 0, "bbox": [0, 243, 195, 181], "area": 18263}, {"id": 6326925, "category_id": 144, "iscrowd": 0, "bbox": [190, 284, 20, 24], "area": 353}, {"id": 3554364, "category_id": 155, "iscrowd": 0, "bbox": [0, 204, 640, 220], "area": 86918}, {"id": 10459027, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 193], "area": 87989}, {"id": 3750453, "category_id": 197, "iscrowd": 0, "bbox": [0, 46, 640, 281], "area": 53216}], "file_name": "000000328286.png", "image_id": 328286}, {"segments_info": [{"id": 4471946, "category_id": 1, "iscrowd": 0, "bbox": [71, 37, 320, 385], "area": 53590}, {"id": 15132131, "category_id": 34, "iscrowd": 0, "bbox": [128, 33, 137, 135], "area": 5789}, {"id": 7771818, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 208544}, {"id": 4937571, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 160, 45], "area": 4130}], "file_name": "000000328337.png", "image_id": 328337}, {"segments_info": [{"id": 4012348, "category_id": 1, "iscrowd": 0, "bbox": [285, 378, 22, 20], "area": 243}, {"id": 3882577, "category_id": 1, "iscrowd": 0, "bbox": [324, 390, 7, 7], "area": 36}, {"id": 2632511, "category_id": 1, "iscrowd": 0, "bbox": [363, 382, 15, 10], "area": 119}, {"id": 6584231, "category_id": 1, "iscrowd": 0, "bbox": [99, 326, 142, 280], "area": 16234}, {"id": 3094075, "category_id": 1, "iscrowd": 0, "bbox": [389, 383, 13, 13], "area": 112}, {"id": 7497058, "category_id": 1, "iscrowd": 0, "bbox": [232, 433, 50, 111], "area": 3192}, {"id": 4347224, "category_id": 1, "iscrowd": 0, "bbox": [342, 413, 33, 115], "area": 2178}, {"id": 5790308, "category_id": 1, "iscrowd": 0, "bbox": [416, 372, 15, 23], "area": 232}, {"id": 3157562, "category_id": 1, "iscrowd": 0, "bbox": [251, 388, 14, 9], "area": 88}, {"id": 4276041, "category_id": 1, "iscrowd": 0, "bbox": [179, 380, 13, 17], "area": 156}, {"id": 3486534, "category_id": 1, "iscrowd": 0, "bbox": [271, 383, 16, 14], "area": 137}, {"id": 9608365, "category_id": 1, "iscrowd": 0, "bbox": [404, 380, 13, 14], "area": 121}, {"id": 4013639, "category_id": 1, "iscrowd": 0, "bbox": [70, 382, 17, 15], "area": 160}, {"id": 9474715, "category_id": 1, "iscrowd": 1, "bbox": [295, 31, 79, 367], "area": 617}, {"id": 4627598, "category_id": 37, "iscrowd": 0, "bbox": [343, 470, 4, 4], "area": 12}, {"id": 6075571, "category_id": 37, "iscrowd": 0, "bbox": [387, 240, 15, 11], "area": 138}, {"id": 3752286, "category_id": 43, "iscrowd": 0, "bbox": [207, 266, 36, 74], "area": 1471}, {"id": 3820581, "category_id": 62, "iscrowd": 0, "bbox": [179, 466, 50, 51], "area": 1476}, {"id": 3960783, "category_id": 145, "iscrowd": 0, "bbox": [0, 525, 433, 115], "area": 36589}, {"id": 2769466, "category_id": 184, "iscrowd": 0, "bbox": [0, 98, 295, 305], "area": 57178}, {"id": 16183273, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 433, 151], "area": 34063}, {"id": 11055505, "category_id": 191, "iscrowd": 0, "bbox": [189, 512, 48, 34], "area": 1363}, {"id": 5527642, "category_id": 197, "iscrowd": 0, "bbox": [0, 10, 433, 399], "area": 76176}, {"id": 5067315, "category_id": 199, "iscrowd": 0, "bbox": [0, 381, 433, 182], "area": 44391}], "file_name": "000000328430.png", "image_id": 328430}, {"segments_info": [{"id": 7630716, "category_id": 1, "iscrowd": 0, "bbox": [80, 17, 254, 615], "area": 89116}, {"id": 10937060, "category_id": 37, "iscrowd": 0, "bbox": [328, 256, 44, 44], "area": 1586}, {"id": 8421252, "category_id": 43, "iscrowd": 0, "bbox": [70, 91, 58, 229], "area": 6210}, {"id": 1975589, "category_id": 185, "iscrowd": 0, "bbox": [0, 450, 396, 141], "area": 24434}, {"id": 8225690, "category_id": 199, "iscrowd": 0, "bbox": [0, 559, 396, 81], "area": 14125}], "file_name": "000000328601.png", "image_id": 328601}, {"segments_info": [{"id": 9472905, "category_id": 14, "iscrowd": 0, "bbox": [164, 36, 134, 204], "area": 19477}, {"id": 3295042, "category_id": 64, "iscrowd": 0, "bbox": [170, 253, 50, 246], "area": 7459}, {"id": 4145733, "category_id": 166, "iscrowd": 0, "bbox": [161, 174, 319, 313], "area": 53310}, {"id": 7176332, "category_id": 177, "iscrowd": 0, "bbox": [337, 398, 143, 158], "area": 14619}, {"id": 4473669, "category_id": 181, "iscrowd": 0, "bbox": [0, 86, 181, 367], "area": 55587}, {"id": 13225154, "category_id": 184, "iscrowd": 0, "bbox": [373, 0, 107, 110], "area": 7645}, {"id": 16382199, "category_id": 187, "iscrowd": 0, "bbox": [300, 0, 164, 57], "area": 3357}, {"id": 12108229, "category_id": 191, "iscrowd": 0, "bbox": [0, 471, 480, 169], "area": 62568}, {"id": 8291432, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 504], "area": 70057}], "file_name": "000000328683.png", "image_id": 328683}, {"segments_info": [{"id": 4605510, "category_id": 70, "iscrowd": 0, "bbox": [20, 275, 174, 225], "area": 21732}, {"id": 8289918, "category_id": 190, "iscrowd": 0, "bbox": [37, 351, 271, 149], "area": 16072}, {"id": 13553358, "category_id": 195, "iscrowd": 0, "bbox": [0, 338, 16, 25], "area": 339}, {"id": 11184810, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 149, 500], "area": 39312}], "file_name": "000000328959.png", "image_id": 328959}, {"segments_info": [{"id": 3419954, "category_id": 1, "iscrowd": 0, "bbox": [122, 0, 99, 168], "area": 10121}, {"id": 12169656, "category_id": 1, "iscrowd": 0, "bbox": [238, 3, 242, 637], "area": 76680}, {"id": 6119272, "category_id": 1, "iscrowd": 0, "bbox": [12, 0, 108, 184], "area": 9920}, {"id": 1973790, "category_id": 31, "iscrowd": 0, "bbox": [13, 10, 38, 90], "area": 2153}, {"id": 4671442, "category_id": 31, "iscrowd": 0, "bbox": [223, 103, 232, 325], "area": 38310}, {"id": 2700387, "category_id": 33, "iscrowd": 0, "bbox": [78, 322, 199, 154], "area": 12642}, {"id": 3025706, "category_id": 33, "iscrowd": 0, "bbox": [3, 134, 59, 104], "area": 4455}, {"id": 3883633, "category_id": 33, "iscrowd": 0, "bbox": [60, 196, 183, 123], "area": 9623}, {"id": 2635632, "category_id": 33, "iscrowd": 0, "bbox": [70, 352, 221, 211], "area": 19189}, {"id": 2632519, "category_id": 33, "iscrowd": 0, "bbox": [75, 287, 188, 119], "area": 11827}, {"id": 6908535, "category_id": 191, "iscrowd": 0, "bbox": [0, 230, 461, 410], "area": 59757}, {"id": 12564409, "category_id": 195, "iscrowd": 0, "bbox": [13, 193, 68, 44], "area": 889}], "file_name": "000000329041.png", "image_id": 329041}, {"segments_info": [{"id": 2367778, "category_id": 33, "iscrowd": 0, "bbox": [0, 304, 21, 44], "area": 624}, {"id": 4475209, "category_id": 65, "iscrowd": 0, "bbox": [0, 184, 329, 179], "area": 28976}, {"id": 5791328, "category_id": 65, "iscrowd": 0, "bbox": [111, 238, 506, 234], "area": 91306}, {"id": 5790814, "category_id": 93, "iscrowd": 0, "bbox": [121, 258, 490, 222], "area": 5702}, {"id": 5989753, "category_id": 109, "iscrowd": 0, "bbox": [58, 0, 109, 218], "area": 19719}, {"id": 16185850, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 81, 228], "area": 15022}, {"id": 2174274, "category_id": 189, "iscrowd": 0, "bbox": [292, 218, 348, 219], "area": 4812}, {"id": 9015448, "category_id": 190, "iscrowd": 0, "bbox": [0, 328, 625, 152], "area": 19731}, {"id": 11122372, "category_id": 199, "iscrowd": 0, "bbox": [158, 0, 482, 183], "area": 69208}, {"id": 2173749, "category_id": 200, "iscrowd": 0, "bbox": [568, 427, 72, 53], "area": 2845}], "file_name": "000000329080.png", "image_id": 329080}, {"segments_info": [{"id": 8087402, "category_id": 1, "iscrowd": 0, "bbox": [177, 2, 146, 330], "area": 18592}, {"id": 9933998, "category_id": 18, "iscrowd": 0, "bbox": [298, 253, 60, 108], "area": 4290}, {"id": 6641237, "category_id": 47, "iscrowd": 0, "bbox": [331, 60, 14, 17], "area": 153}, {"id": 4143670, "category_id": 47, "iscrowd": 0, "bbox": [362, 71, 18, 16], "area": 185}, {"id": 10851490, "category_id": 47, "iscrowd": 0, "bbox": [160, 127, 22, 17], "area": 258}, {"id": 3223085, "category_id": 47, "iscrowd": 0, "bbox": [349, 92, 10, 17], "area": 130}, {"id": 5129805, "category_id": 47, "iscrowd": 0, "bbox": [335, 96, 15, 17], "area": 180}, {"id": 3025446, "category_id": 47, "iscrowd": 0, "bbox": [332, 80, 14, 17], "area": 173}, {"id": 4603718, "category_id": 47, "iscrowd": 0, "bbox": [359, 92, 16, 15], "area": 170}, {"id": 3091494, "category_id": 47, "iscrowd": 0, "bbox": [350, 75, 14, 15], "area": 135}, {"id": 6707294, "category_id": 47, "iscrowd": 0, "bbox": [356, 52, 16, 20], "area": 196}, {"id": 3816767, "category_id": 47, "iscrowd": 0, "bbox": [341, 147, 9, 10], "area": 78}, {"id": 3224632, "category_id": 47, "iscrowd": 0, "bbox": [335, 137, 11, 9], "area": 73}, {"id": 4799029, "category_id": 47, "iscrowd": 0, "bbox": [355, 151, 12, 11], "area": 83}, {"id": 4208437, "category_id": 47, "iscrowd": 0, "bbox": [344, 57, 13, 17], "area": 153}, {"id": 5654854, "category_id": 48, "iscrowd": 0, "bbox": [44, 0, 9, 50], "area": 229}, {"id": 2499867, "category_id": 49, "iscrowd": 0, "bbox": [14, 0, 8, 42], "area": 262}, {"id": 6253177, "category_id": 50, "iscrowd": 0, "bbox": [50, 61, 12, 27], "area": 159}, {"id": 4471609, "category_id": 50, "iscrowd": 0, "bbox": [69, 0, 12, 51], "area": 177}, {"id": 7370888, "category_id": 50, "iscrowd": 0, "bbox": [82, 65, 4, 26], "area": 82}, {"id": 3036001, "category_id": 81, "iscrowd": 0, "bbox": [198, 134, 51, 19], "area": 672}, {"id": 5923699, "category_id": 109, "iscrowd": 0, "bbox": [134, 0, 191, 136], "area": 8465}, {"id": 4415854, "category_id": 176, "iscrowd": 0, "bbox": [0, 116, 34, 38], "area": 975}, {"id": 1842710, "category_id": 181, "iscrowd": 0, "bbox": [185, 15, 58, 134], "area": 3363}, {"id": 5130829, "category_id": 186, "iscrowd": 0, "bbox": [286, 0, 101, 22], "area": 1492}, {"id": 3948116, "category_id": 188, "iscrowd": 0, "bbox": [0, 114, 493, 254], "area": 81621}, {"id": 4938351, "category_id": 190, "iscrowd": 0, "bbox": [0, 306, 640, 121], "area": 53034}, {"id": 9010302, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 361], "area": 84846}], "file_name": "000000329219.png", "image_id": 329219}, {"segments_info": [{"id": 7371389, "category_id": 17, "iscrowd": 0, "bbox": [87, 243, 303, 260], "area": 38210}, {"id": 6777703, "category_id": 62, "iscrowd": 0, "bbox": [157, 237, 271, 403], "area": 36176}, {"id": 3160895, "category_id": 67, "iscrowd": 0, "bbox": [0, 107, 132, 216], "area": 12875}, {"id": 2705474, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 428, 640], "area": 162590}, {"id": 14592635, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 88, 94], "area": 4399}, {"id": 1782079, "category_id": 189, "iscrowd": 0, "bbox": [0, 123, 18, 113], "area": 726}], "file_name": "000000329319.png", "image_id": 329319}, {"segments_info": [{"id": 7629931, "category_id": 1, "iscrowd": 0, "bbox": [96, 44, 154, 236], "area": 21994}, {"id": 4279130, "category_id": 1, "iscrowd": 0, "bbox": [10, 44, 65, 201], "area": 5085}, {"id": 5658212, "category_id": 1, "iscrowd": 0, "bbox": [303, 37, 54, 114], "area": 3531}, {"id": 12768475, "category_id": 1, "iscrowd": 0, "bbox": [401, 80, 24, 68], "area": 931}, {"id": 4410721, "category_id": 1, "iscrowd": 0, "bbox": [226, 96, 84, 146], "area": 5812}, {"id": 1841692, "category_id": 1, "iscrowd": 0, "bbox": [42, 272, 180, 232], "area": 22775}, {"id": 7440551, "category_id": 1, "iscrowd": 0, "bbox": [347, 85, 78, 206], "area": 11179}, {"id": 4873062, "category_id": 1, "iscrowd": 0, "bbox": [49, 48, 48, 288], "area": 6828}, {"id": 5727364, "category_id": 1, "iscrowd": 0, "bbox": [74, 12, 88, 251], "area": 8041}, {"id": 3158589, "category_id": 1, "iscrowd": 0, "bbox": [283, 142, 82, 126], "area": 6161}, {"id": 2172485, "category_id": 1, "iscrowd": 0, "bbox": [121, 442, 274, 197], "area": 22399}, {"id": 7566679, "category_id": 1, "iscrowd": 0, "bbox": [240, 55, 90, 90], "area": 2848}, {"id": 4736330, "category_id": 1, "iscrowd": 0, "bbox": [1, 130, 109, 510], "area": 31152}, {"id": 6514550, "category_id": 1, "iscrowd": 1, "bbox": [0, 18, 425, 342], "area": 26722}, {"id": 15720661, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 425, 116], "area": 18044}, {"id": 13092549, "category_id": 197, "iscrowd": 0, "bbox": [24, 26, 172, 54], "area": 3103}], "file_name": "000000329323.png", "image_id": 329323}, {"segments_info": [{"id": 4671292, "category_id": 18, "iscrowd": 0, "bbox": [467, 336, 165, 119], "area": 9957}, {"id": 6385535, "category_id": 21, "iscrowd": 0, "bbox": [185, 114, 133, 327], "area": 15925}, {"id": 3030606, "category_id": 21, "iscrowd": 0, "bbox": [296, 147, 193, 312], "area": 28769}, {"id": 4474439, "category_id": 21, "iscrowd": 0, "bbox": [3, 134, 77, 315], "area": 13692}, {"id": 10789531, "category_id": 21, "iscrowd": 0, "bbox": [76, 118, 197, 332], "area": 41002}, {"id": 2505762, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 248], "area": 89877}, {"id": 8094588, "category_id": 185, "iscrowd": 0, "bbox": [0, 86, 640, 237], "area": 27559}, {"id": 6857585, "category_id": 193, "iscrowd": 0, "bbox": [0, 211, 640, 294], "area": 84876}, {"id": 5593696, "category_id": 194, "iscrowd": 0, "bbox": [0, 475, 640, 30], "area": 8044}], "file_name": "000000329447.png", "image_id": 329447}, {"segments_info": [{"id": 4412287, "category_id": 1, "iscrowd": 0, "bbox": [574, 285, 66, 90], "area": 4267}, {"id": 4143163, "category_id": 1, "iscrowd": 0, "bbox": [1, 4, 145, 276], "area": 21886}, {"id": 4209469, "category_id": 1, "iscrowd": 0, "bbox": [67, 2, 309, 216], "area": 38126}, {"id": 4091542, "category_id": 47, "iscrowd": 0, "bbox": [55, 379, 112, 101], "area": 9073}, {"id": 6451074, "category_id": 47, "iscrowd": 0, "bbox": [412, 70, 42, 66], "area": 2033}, {"id": 7767961, "category_id": 47, "iscrowd": 0, "bbox": [0, 288, 23, 131], "area": 1589}, {"id": 6718623, "category_id": 47, "iscrowd": 0, "bbox": [160, 394, 111, 86], "area": 8230}, {"id": 4158401, "category_id": 59, "iscrowd": 0, "bbox": [120, 134, 426, 238], "area": 61082}, {"id": 3495030, "category_id": 62, "iscrowd": 0, "bbox": [285, 0, 230, 136], "area": 14992}, {"id": 3550510, "category_id": 62, "iscrowd": 0, "bbox": [564, 97, 76, 79], "area": 4361}, {"id": 3030875, "category_id": 67, "iscrowd": 0, "bbox": [7, 0, 73, 59], "area": 3604}, {"id": 7701398, "category_id": 67, "iscrowd": 0, "bbox": [376, 1, 264, 122], "area": 17433}, {"id": 7772854, "category_id": 67, "iscrowd": 0, "bbox": [0, 58, 633, 420], "area": 94528}, {"id": 8030620, "category_id": 189, "iscrowd": 0, "bbox": [555, 246, 85, 136], "area": 2167}, {"id": 6318721, "category_id": 199, "iscrowd": 0, "bbox": [326, 0, 314, 39], "area": 1887}, {"id": 1515825, "category_id": 200, "iscrowd": 0, "bbox": [576, 159, 64, 38], "area": 1289}], "file_name": "000000329455.png", "image_id": 329455}, {"segments_info": [{"id": 10060669, "category_id": 1, "iscrowd": 0, "bbox": [391, 3, 115, 261], "area": 11356}, {"id": 8685736, "category_id": 1, "iscrowd": 0, "bbox": [591, 78, 49, 170], "area": 2680}, {"id": 5454936, "category_id": 1, "iscrowd": 0, "bbox": [518, 12, 101, 284], "area": 12657}, {"id": 5065823, "category_id": 1, "iscrowd": 0, "bbox": [227, 22, 197, 401], "area": 24324}, {"id": 2696235, "category_id": 1, "iscrowd": 0, "bbox": [49, 0, 458, 421], "area": 82888}, {"id": 5721932, "category_id": 31, "iscrowd": 0, "bbox": [38, 263, 28, 88], "area": 1375}, {"id": 789006, "category_id": 31, "iscrowd": 0, "bbox": [258, 203, 88, 46], "area": 1909}, {"id": 11052984, "category_id": 54, "iscrowd": 0, "bbox": [457, 291, 45, 43], "area": 260}, {"id": 6978467, "category_id": 60, "iscrowd": 0, "bbox": [460, 291, 41, 41], "area": 753}, {"id": 12434621, "category_id": 149, "iscrowd": 0, "bbox": [0, 82, 640, 345], "area": 94166}, {"id": 4282720, "category_id": 184, "iscrowd": 0, "bbox": [372, 0, 254, 101], "area": 8759}, {"id": 16049624, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 90, 66], "area": 4516}, {"id": 6709343, "category_id": 191, "iscrowd": 0, "bbox": [0, 75, 54, 21], "area": 443}, {"id": 8492710, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 118], "area": 22272}, {"id": 15455697, "category_id": 195, "iscrowd": 0, "bbox": [391, 133, 23, 36], "area": 504}], "file_name": "000000329456.png", "image_id": 329456}, {"segments_info": [{"id": 8228277, "category_id": 1, "iscrowd": 0, "bbox": [71, 38, 237, 225], "area": 24935}, {"id": 9999761, "category_id": 47, "iscrowd": 0, "bbox": [404, 102, 129, 87], "area": 7391}, {"id": 5867191, "category_id": 61, "iscrowd": 0, "bbox": [102, 131, 127, 131], "area": 7373}, {"id": 8696031, "category_id": 61, "iscrowd": 0, "bbox": [274, 228, 131, 134], "area": 13786}, {"id": 8169679, "category_id": 61, "iscrowd": 0, "bbox": [123, 256, 139, 137], "area": 13888}, {"id": 5599382, "category_id": 61, "iscrowd": 0, "bbox": [0, 36, 102, 133], "area": 10724}], "file_name": "000000329542.png", "image_id": 329542}, {"segments_info": [{"id": 329224, "category_id": 1, "iscrowd": 0, "bbox": [55, 147, 37, 60], "area": 1439}, {"id": 4936019, "category_id": 3, "iscrowd": 0, "bbox": [209, 155, 15, 12], "area": 102}, {"id": 3224372, "category_id": 3, "iscrowd": 0, "bbox": [381, 154, 34, 14], "area": 322}, {"id": 3751229, "category_id": 3, "iscrowd": 0, "bbox": [25, 148, 14, 6], "area": 56}, {"id": 1315348, "category_id": 3, "iscrowd": 0, "bbox": [288, 153, 52, 20], "area": 690}, {"id": 3684673, "category_id": 3, "iscrowd": 0, "bbox": [250, 158, 10, 10], "area": 75}, {"id": 5131340, "category_id": 3, "iscrowd": 0, "bbox": [153, 151, 31, 26], "area": 716}, {"id": 2236710, "category_id": 3, "iscrowd": 0, "bbox": [426, 155, 30, 15], "area": 296}, {"id": 2105119, "category_id": 3, "iscrowd": 0, "bbox": [448, 154, 32, 19], "area": 380}, {"id": 1513241, "category_id": 3, "iscrowd": 0, "bbox": [35, 155, 92, 36], "area": 1768}, {"id": 1259587, "category_id": 6, "iscrowd": 0, "bbox": [122, 126, 91, 39], "area": 2691}, {"id": 3356475, "category_id": 149, "iscrowd": 0, "bbox": [0, 148, 461, 60], "area": 12836}, {"id": 131843, "category_id": 184, "iscrowd": 0, "bbox": [281, 0, 219, 208], "area": 7953}, {"id": 921359, "category_id": 185, "iscrowd": 0, "bbox": [0, 148, 22, 33], "area": 558}, {"id": 10921125, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 483, 125], "area": 38349}, {"id": 3357247, "category_id": 191, "iscrowd": 0, "bbox": [0, 173, 479, 35], "area": 3947}, {"id": 2304817, "category_id": 197, "iscrowd": 0, "bbox": [0, 9, 482, 162], "area": 31437}], "file_name": "000000329614.png", "image_id": 329614}, {"segments_info": [{"id": 13344367, "category_id": 1, "iscrowd": 0, "bbox": [345, 224, 107, 112], "area": 3651}, {"id": 14731707, "category_id": 35, "iscrowd": 0, "bbox": [313, 310, 98, 53], "area": 681}, {"id": 15588046, "category_id": 159, "iscrowd": 0, "bbox": [0, 215, 640, 212], "area": 118343}, {"id": 4801084, "category_id": 184, "iscrowd": 0, "bbox": [33, 34, 607, 240], "area": 86293}, {"id": 16315375, "category_id": 187, "iscrowd": 0, "bbox": [93, 0, 547, 117], "area": 34569}, {"id": 6506557, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 257, 222], "area": 29478}], "file_name": "000000329827.png", "image_id": 329827}, {"segments_info": [{"id": 3362387, "category_id": 1, "iscrowd": 0, "bbox": [116, 93, 35, 56], "area": 561}, {"id": 5657206, "category_id": 9, "iscrowd": 0, "bbox": [83, 2, 344, 304], "area": 74089}, {"id": 10651510, "category_id": 16, "iscrowd": 0, "bbox": [420, 35, 16, 11], "area": 43}, {"id": 9867924, "category_id": 16, "iscrowd": 0, "bbox": [466, 77, 5, 6], "area": 20}, {"id": 6770755, "category_id": 155, "iscrowd": 0, "bbox": [0, 114, 500, 221], "area": 51515}, {"id": 10979705, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 83], "area": 27907}, {"id": 6977152, "category_id": 197, "iscrowd": 0, "bbox": [0, 63, 500, 72], "area": 12917}], "file_name": "000000330369.png", "image_id": 330369}, {"segments_info": [{"id": 4608348, "category_id": 1, "iscrowd": 0, "bbox": [410, 161, 7, 14], "area": 72}, {"id": 7643062, "category_id": 1, "iscrowd": 0, "bbox": [391, 159, 14, 25], "area": 177}, {"id": 9543833, "category_id": 1, "iscrowd": 0, "bbox": [317, 81, 54, 266], "area": 10183}, {"id": 5414855, "category_id": 1, "iscrowd": 0, "bbox": [400, 161, 9, 21], "area": 121}, {"id": 4810872, "category_id": 1, "iscrowd": 0, "bbox": [239, 66, 86, 305], "area": 18603}, {"id": 13095916, "category_id": 34, "iscrowd": 0, "bbox": [361, 211, 35, 37], "area": 1007}, {"id": 2701120, "category_id": 154, "iscrowd": 0, "bbox": [0, 178, 500, 197], "area": 55751}, {"id": 9076850, "category_id": 155, "iscrowd": 0, "bbox": [0, 194, 86, 58], "area": 3757}, {"id": 14073504, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 201], "area": 82520}], "file_name": "000000330396.png", "image_id": 330396}, {"segments_info": [{"id": 1515316, "category_id": 107, "iscrowd": 0, "bbox": [335, 150, 165, 190], "area": 3055}, {"id": 3949645, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 500, 214], "area": 57142}, {"id": 8295069, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 157, 77], "area": 10859}, {"id": 1386317, "category_id": 188, "iscrowd": 0, "bbox": [390, 292, 110, 83], "area": 7105}, {"id": 9348541, "category_id": 189, "iscrowd": 0, "bbox": [0, 167, 500, 208], "area": 62387}, {"id": 10398136, "category_id": 195, "iscrowd": 0, "bbox": [430, 166, 52, 46], "area": 736}], "file_name": "000000330554.png", "image_id": 330554}, {"segments_info": [{"id": 6845052, "category_id": 22, "iscrowd": 0, "bbox": [182, 67, 272, 354], "area": 68439}, {"id": 3224374, "category_id": 22, "iscrowd": 0, "bbox": [0, 156, 223, 265], "area": 44772}, {"id": 7637401, "category_id": 22, "iscrowd": 0, "bbox": [559, 155, 81, 179], "area": 5962}, {"id": 7180679, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 79168}, {"id": 16120566, "category_id": 187, "iscrowd": 0, "bbox": [216, 0, 29, 9], "area": 208}, {"id": 10661555, "category_id": 194, "iscrowd": 0, "bbox": [422, 324, 218, 102], "area": 13357}], "file_name": "000000330790.png", "image_id": 330790}, {"segments_info": [{"id": 3163574, "category_id": 1, "iscrowd": 0, "bbox": [4, 146, 181, 409], "area": 32955}, {"id": 2333125, "category_id": 44, "iscrowd": 0, "bbox": [269, 233, 17, 33], "area": 281}, {"id": 5860990, "category_id": 44, "iscrowd": 0, "bbox": [30, 424, 90, 127], "area": 8050}, {"id": 2846942, "category_id": 44, "iscrowd": 0, "bbox": [2, 426, 31, 141], "area": 2965}, {"id": 9689048, "category_id": 44, "iscrowd": 0, "bbox": [195, 236, 17, 52], "area": 668}, {"id": 2840958, "category_id": 44, "iscrowd": 0, "bbox": [230, 245, 21, 45], "area": 813}, {"id": 5489112, "category_id": 44, "iscrowd": 0, "bbox": [254, 229, 20, 64], "area": 962}, {"id": 2371622, "category_id": 79, "iscrowd": 0, "bbox": [172, 422, 254, 211], "area": 40057}, {"id": 6324348, "category_id": 85, "iscrowd": 0, "bbox": [326, 1, 99, 84], "area": 7073}, {"id": 13753830, "category_id": 100, "iscrowd": 0, "bbox": [0, 262, 426, 227], "area": 8803}, {"id": 6332517, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 39, 37], "area": 894}, {"id": 1118472, "category_id": 188, "iscrowd": 0, "bbox": [341, 631, 85, 9], "area": 627}, {"id": 9744306, "category_id": 189, "iscrowd": 0, "bbox": [0, 523, 346, 117], "area": 23150}, {"id": 10268851, "category_id": 195, "iscrowd": 0, "bbox": [0, 82, 414, 106], "area": 4621}, {"id": 4419969, "category_id": 196, "iscrowd": 0, "bbox": [0, 202, 201, 177], "area": 1606}, {"id": 8294769, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 426, 185], "area": 51741}], "file_name": "000000330818.png", "image_id": 330818}, {"segments_info": [{"id": 6185061, "category_id": 18, "iscrowd": 0, "bbox": [5, 110, 540, 496], "area": 163523}, {"id": 13223106, "category_id": 154, "iscrowd": 0, "bbox": [0, 298, 640, 308], "area": 57890}, {"id": 13879749, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 165850}], "file_name": "000000331075.png", "image_id": 331075}, {"segments_info": [{"id": 3948361, "category_id": 1, "iscrowd": 0, "bbox": [308, 49, 53, 60], "area": 1921}, {"id": 9472165, "category_id": 1, "iscrowd": 0, "bbox": [364, 107, 55, 60], "area": 2095}, {"id": 7300734, "category_id": 1, "iscrowd": 0, "bbox": [0, 109, 68, 65], "area": 1827}, {"id": 7237773, "category_id": 1, "iscrowd": 0, "bbox": [365, 55, 48, 67], "area": 1589}, {"id": 4606310, "category_id": 1, "iscrowd": 0, "bbox": [488, 48, 12, 47], "area": 446}, {"id": 5987701, "category_id": 1, "iscrowd": 0, "bbox": [406, 27, 42, 44], "area": 963}, {"id": 3619658, "category_id": 1, "iscrowd": 0, "bbox": [344, 33, 25, 37], "area": 588}, {"id": 3356732, "category_id": 1, "iscrowd": 0, "bbox": [259, 31, 51, 67], "area": 1837}, {"id": 6909347, "category_id": 1, "iscrowd": 0, "bbox": [16, 170, 72, 153], "area": 6610}, {"id": 10593245, "category_id": 1, "iscrowd": 0, "bbox": [432, 192, 48, 92], "area": 2539}, {"id": 5986945, "category_id": 1, "iscrowd": 0, "bbox": [205, 75, 19, 23], "area": 341}, {"id": 3685181, "category_id": 1, "iscrowd": 0, "bbox": [19, 26, 79, 145], "area": 4555}, {"id": 7368610, "category_id": 1, "iscrowd": 0, "bbox": [264, 187, 80, 141], "area": 6416}, {"id": 4409177, "category_id": 1, "iscrowd": 1, "bbox": [204, 2, 265, 95], "area": 4048}, {"id": 13157586, "category_id": 19, "iscrowd": 0, "bbox": [74, 70, 291, 203], "area": 26151}, {"id": 10658486, "category_id": 19, "iscrowd": 0, "bbox": [396, 52, 104, 186], "area": 8660}, {"id": 10854594, "category_id": 144, "iscrowd": 0, "bbox": [0, 190, 493, 91], "area": 14363}, {"id": 3028018, "category_id": 161, "iscrowd": 0, "bbox": [142, 0, 100, 92], "area": 6107}, {"id": 9150390, "category_id": 194, "iscrowd": 0, "bbox": [0, 246, 438, 120], "area": 28299}, {"id": 4407370, "category_id": 197, "iscrowd": 0, "bbox": [83, 0, 76, 205], "area": 8060}, {"id": 7822458, "category_id": 199, "iscrowd": 0, "bbox": [0, 140, 494, 105], "area": 9571}], "file_name": "000000331280.png", "image_id": 331280}, {"segments_info": [{"id": 1053972, "category_id": 1, "iscrowd": 0, "bbox": [57, 151, 21, 64], "area": 601}, {"id": 1320505, "category_id": 85, "iscrowd": 0, "bbox": [239, 271, 400, 211], "area": 65707}, {"id": 6974575, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 484], "area": 217366}], "file_name": "000000331317.png", "image_id": 331317}, {"segments_info": [{"id": 8431529, "category_id": 70, "iscrowd": 0, "bbox": [28, 253, 294, 240], "area": 49051}, {"id": 9284271, "category_id": 81, "iscrowd": 0, "bbox": [53, 61, 248, 84], "area": 17269}, {"id": 11054776, "category_id": 177, "iscrowd": 0, "bbox": [327, 18, 24, 25], "area": 291}, {"id": 2580334, "category_id": 190, "iscrowd": 0, "bbox": [23, 235, 316, 259], "area": 7833}, {"id": 7571080, "category_id": 199, "iscrowd": 0, "bbox": [0, 23, 351, 477], "area": 47214}, {"id": 4678490, "category_id": 200, "iscrowd": 0, "bbox": [46, 399, 255, 101], "area": 10425}], "file_name": "000000331352.png", "image_id": 331352}, {"segments_info": [{"id": 6580368, "category_id": 47, "iscrowd": 0, "bbox": [238, 19, 374, 547], "area": 147569}, {"id": 3490205, "category_id": 122, "iscrowd": 0, "bbox": [92, 283, 199, 271], "area": 33089}, {"id": 2171952, "category_id": 189, "iscrowd": 0, "bbox": [0, 169, 612, 443], "area": 63912}, {"id": 5264996, "category_id": 190, "iscrowd": 0, "bbox": [198, 112, 21, 26], "area": 311}, {"id": 2304308, "category_id": 199, "iscrowd": 0, "bbox": [207, 0, 405, 171], "area": 16918}], "file_name": "000000331569.png", "image_id": 331569}, {"segments_info": [{"id": 5857132, "category_id": 1, "iscrowd": 0, "bbox": [296, 150, 69, 141], "area": 4530}, {"id": 7499441, "category_id": 42, "iscrowd": 0, "bbox": [261, 173, 117, 137], "area": 3572}, {"id": 5525305, "category_id": 155, "iscrowd": 0, "bbox": [0, 338, 640, 89], "area": 42819}, {"id": 9797220, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 380], "area": 222244}], "file_name": "000000331604.png", "image_id": 331604}, {"segments_info": [{"id": 3617354, "category_id": 1, "iscrowd": 0, "bbox": [3, 199, 231, 220], "area": 17836}, {"id": 8223128, "category_id": 1, "iscrowd": 0, "bbox": [190, 3, 284, 388], "area": 48126}, {"id": 13079638, "category_id": 1, "iscrowd": 0, "bbox": [0, 142, 51, 96], "area": 2797}, {"id": 6381648, "category_id": 1, "iscrowd": 0, "bbox": [546, 56, 94, 239], "area": 11629}, {"id": 1605538, "category_id": 52, "iscrowd": 0, "bbox": [604, 384, 36, 72], "area": 1567}, {"id": 2390932, "category_id": 52, "iscrowd": 0, "bbox": [536, 396, 103, 68], "area": 2708}, {"id": 3380906, "category_id": 52, "iscrowd": 0, "bbox": [562, 401, 65, 47], "area": 984}, {"id": 3699585, "category_id": 52, "iscrowd": 0, "bbox": [499, 324, 74, 57], "area": 2160}, {"id": 1401731, "category_id": 52, "iscrowd": 0, "bbox": [594, 358, 46, 30], "area": 906}, {"id": 10730703, "category_id": 53, "iscrowd": 0, "bbox": [426, 397, 35, 28], "area": 592}, {"id": 8556466, "category_id": 53, "iscrowd": 0, "bbox": [424, 370, 36, 21], "area": 312}, {"id": 7307425, "category_id": 53, "iscrowd": 0, "bbox": [305, 408, 38, 41], "area": 958}, {"id": 7634100, "category_id": 53, "iscrowd": 0, "bbox": [390, 384, 39, 33], "area": 825}, {"id": 10268871, "category_id": 53, "iscrowd": 0, "bbox": [447, 371, 50, 34], "area": 1211}, {"id": 10403034, "category_id": 53, "iscrowd": 0, "bbox": [356, 399, 25, 39], "area": 612}, {"id": 9804732, "category_id": 53, "iscrowd": 0, "bbox": [347, 396, 15, 38], "area": 421}, {"id": 7623326, "category_id": 53, "iscrowd": 0, "bbox": [419, 384, 39, 24], "area": 482}, {"id": 395370, "category_id": 55, "iscrowd": 0, "bbox": [580, 338, 28, 23], "area": 518}, {"id": 603333, "category_id": 55, "iscrowd": 0, "bbox": [609, 336, 31, 29], "area": 751}, {"id": 5011861, "category_id": 100, "iscrowd": 0, "bbox": [51, 230, 293, 234], "area": 30149}, {"id": 7894945, "category_id": 122, "iscrowd": 0, "bbox": [136, 160, 504, 304], "area": 11852}, {"id": 13354154, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 461, 89], "area": 16147}, {"id": 10329999, "category_id": 177, "iscrowd": 0, "bbox": [457, 0, 183, 296], "area": 38063}, {"id": 5725015, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 40, 67], "area": 2500}, {"id": 11643025, "category_id": 189, "iscrowd": 0, "bbox": [305, 309, 255, 155], "area": 15128}, {"id": 12500391, "category_id": 199, "iscrowd": 0, "bbox": [0, 82, 347, 190], "area": 34440}], "file_name": "000000331799.png", "image_id": 331799}, {"segments_info": [{"id": 8941213, "category_id": 1, "iscrowd": 0, "bbox": [316, 86, 324, 158], "area": 29468}, {"id": 6459314, "category_id": 46, "iscrowd": 0, "bbox": [424, 210, 109, 270], "area": 19371}, {"id": 7695246, "category_id": 46, "iscrowd": 0, "bbox": [470, 176, 87, 166], "area": 4889}, {"id": 2643330, "category_id": 48, "iscrowd": 0, "bbox": [296, 180, 36, 45], "area": 398}, {"id": 4102327, "category_id": 49, "iscrowd": 0, "bbox": [0, 246, 247, 44], "area": 4890}, {"id": 6385070, "category_id": 51, "iscrowd": 0, "bbox": [308, 186, 164, 113], "area": 11587}, {"id": 4670340, "category_id": 51, "iscrowd": 0, "bbox": [375, 274, 214, 137], "area": 9174}, {"id": 7111584, "category_id": 51, "iscrowd": 0, "bbox": [52, 135, 211, 116], "area": 16200}, {"id": 4275618, "category_id": 51, "iscrowd": 0, "bbox": [274, 339, 162, 132], "area": 9196}, {"id": 4414122, "category_id": 51, "iscrowd": 0, "bbox": [256, 192, 75, 68], "area": 3064}, {"id": 3101067, "category_id": 61, "iscrowd": 0, "bbox": [175, 254, 106, 64], "area": 4491}, {"id": 9086154, "category_id": 61, "iscrowd": 0, "bbox": [0, 151, 68, 47], "area": 2131}, {"id": 3432340, "category_id": 61, "iscrowd": 0, "bbox": [78, 277, 107, 99], "area": 6374}, {"id": 11716832, "category_id": 61, "iscrowd": 0, "bbox": [293, 356, 122, 78], "area": 6287}, {"id": 5932674, "category_id": 64, "iscrowd": 0, "bbox": [16, 74, 85, 81], "area": 4708}, {"id": 6381207, "category_id": 67, "iscrowd": 0, "bbox": [0, 70, 640, 410], "area": 108200}, {"id": 9402214, "category_id": 72, "iscrowd": 0, "bbox": [158, 6, 383, 139], "area": 41159}, {"id": 6583421, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 113, 80], "area": 6747}], "file_name": "000000331817.png", "image_id": 331817}, {"segments_info": [{"id": 4804688, "category_id": 8, "iscrowd": 0, "bbox": [541, 395, 51, 32], "area": 1038}, {"id": 4147274, "category_id": 8, "iscrowd": 0, "bbox": [474, 398, 35, 23], "area": 689}, {"id": 5333857, "category_id": 8, "iscrowd": 0, "bbox": [396, 379, 76, 49], "area": 2090}, {"id": 6645861, "category_id": 8, "iscrowd": 0, "bbox": [510, 391, 48, 30], "area": 930}, {"id": 2051182, "category_id": 21, "iscrowd": 0, "bbox": [121, 394, 14, 8], "area": 76}, {"id": 1715506, "category_id": 21, "iscrowd": 0, "bbox": [350, 371, 14, 8], "area": 36}, {"id": 2113119, "category_id": 21, "iscrowd": 0, "bbox": [201, 371, 9, 12], "area": 81}, {"id": 2114919, "category_id": 21, "iscrowd": 0, "bbox": [106, 387, 16, 8], "area": 92}, {"id": 1718622, "category_id": 21, "iscrowd": 0, "bbox": [91, 389, 13, 7], "area": 64}, {"id": 1588578, "category_id": 21, "iscrowd": 0, "bbox": [282, 369, 8, 12], "area": 63}, {"id": 988438, "category_id": 21, "iscrowd": 0, "bbox": [261, 382, 8, 13], "area": 70}, {"id": 2511741, "category_id": 21, "iscrowd": 0, "bbox": [211, 386, 14, 8], "area": 72}, {"id": 2178365, "category_id": 21, "iscrowd": 0, "bbox": [68, 373, 9, 15], "area": 105}, {"id": 2180453, "category_id": 21, "iscrowd": 0, "bbox": [62, 389, 21, 10], "area": 120}, {"id": 2179437, "category_id": 21, "iscrowd": 0, "bbox": [159, 380, 16, 7], "area": 84}, {"id": 1593958, "category_id": 21, "iscrowd": 0, "bbox": [122, 382, 10, 4], "area": 27}, {"id": 1520202, "category_id": 21, "iscrowd": 0, "bbox": [248, 371, 18, 14], "area": 150}, {"id": 1468265, "category_id": 21, "iscrowd": 1, "bbox": [0, 364, 364, 44], "area": 2220}, {"id": 1394233, "category_id": 184, "iscrowd": 0, "bbox": [475, 171, 165, 241], "area": 27870}, {"id": 15581852, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 108], "area": 29939}, {"id": 7303004, "category_id": 192, "iscrowd": 0, "bbox": [0, 15, 640, 373], "area": 180921}, {"id": 2129021, "category_id": 193, "iscrowd": 0, "bbox": [0, 351, 640, 78], "area": 27559}], "file_name": "000000332318.png", "image_id": 332318}, {"segments_info": [{"id": 11183262, "category_id": 1, "iscrowd": 0, "bbox": [141, 169, 21, 24], "area": 283}, {"id": 9208959, "category_id": 1, "iscrowd": 0, "bbox": [549, 189, 23, 13], "area": 132}, {"id": 12171702, "category_id": 1, "iscrowd": 0, "bbox": [95, 165, 16, 23], "area": 237}, {"id": 7040108, "category_id": 1, "iscrowd": 0, "bbox": [372, 165, 25, 41], "area": 595}, {"id": 9869192, "category_id": 1, "iscrowd": 0, "bbox": [457, 163, 15, 12], "area": 80}, {"id": 6646376, "category_id": 1, "iscrowd": 0, "bbox": [423, 179, 12, 16], "area": 88}, {"id": 6529711, "category_id": 1, "iscrowd": 0, "bbox": [260, 170, 9, 26], "area": 182}, {"id": 5873315, "category_id": 1, "iscrowd": 0, "bbox": [171, 167, 25, 23], "area": 243}, {"id": 8102322, "category_id": 1, "iscrowd": 0, "bbox": [549, 157, 15, 14], "area": 148}, {"id": 9277335, "category_id": 1, "iscrowd": 0, "bbox": [496, 181, 17, 21], "area": 230}, {"id": 12238781, "category_id": 1, "iscrowd": 0, "bbox": [206, 160, 10, 17], "area": 116}, {"id": 11052966, "category_id": 1, "iscrowd": 0, "bbox": [155, 166, 9, 9], "area": 48}, {"id": 6649232, "category_id": 1, "iscrowd": 0, "bbox": [25, 191, 17, 20], "area": 218}, {"id": 9737341, "category_id": 1, "iscrowd": 1, "bbox": [24, 167, 259, 12], "area": 99}, {"id": 9942708, "category_id": 42, "iscrowd": 0, "bbox": [202, 168, 27, 9], "area": 75}, {"id": 11114425, "category_id": 42, "iscrowd": 0, "bbox": [109, 178, 16, 9], "area": 97}, {"id": 13817558, "category_id": 42, "iscrowd": 0, "bbox": [416, 180, 24, 14], "area": 120}, {"id": 7630180, "category_id": 42, "iscrowd": 0, "bbox": [546, 197, 12, 4], "area": 36}, {"id": 11311452, "category_id": 42, "iscrowd": 0, "bbox": [10, 201, 54, 10], "area": 181}, {"id": 9549538, "category_id": 42, "iscrowd": 0, "bbox": [408, 152, 23, 21], "area": 220}, {"id": 8485061, "category_id": 42, "iscrowd": 0, "bbox": [370, 206, 43, 8], "area": 182}, {"id": 13096159, "category_id": 42, "iscrowd": 0, "bbox": [250, 170, 31, 19], "area": 185}, {"id": 10788240, "category_id": 155, "iscrowd": 0, "bbox": [0, 129, 640, 297], "area": 181484}, {"id": 14665638, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 143], "area": 87095}], "file_name": "000000332351.png", "image_id": 332351}, {"segments_info": [{"id": 8732838, "category_id": 70, "iscrowd": 0, "bbox": [45, 0, 379, 628], "area": 170095}, {"id": 3882584, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 425, 323], "area": 29935}, {"id": 2306905, "category_id": 190, "iscrowd": 0, "bbox": [0, 302, 425, 338], "area": 46272}, {"id": 4539746, "category_id": 199, "iscrowd": 0, "bbox": [362, 254, 63, 369], "area": 11737}], "file_name": "000000332455.png", "image_id": 332455}, {"segments_info": [{"id": 7180747, "category_id": 1, "iscrowd": 0, "bbox": [0, 45, 371, 455], "area": 54965}, {"id": 4473156, "category_id": 77, "iscrowd": 0, "bbox": [102, 56, 217, 385], "area": 74255}], "file_name": "000000332570.png", "image_id": 332570}, {"segments_info": [{"id": 6379346, "category_id": 1, "iscrowd": 0, "bbox": [313, 131, 143, 183], "area": 14698}, {"id": 1973789, "category_id": 62, "iscrowd": 0, "bbox": [391, 262, 89, 56], "area": 3961}, {"id": 2233873, "category_id": 65, "iscrowd": 0, "bbox": [77, 294, 563, 175], "area": 84772}, {"id": 9928302, "category_id": 73, "iscrowd": 0, "bbox": [279, 239, 49, 48], "area": 1512}, {"id": 328708, "category_id": 93, "iscrowd": 0, "bbox": [110, 337, 530, 143], "area": 6150}, {"id": 10266545, "category_id": 109, "iscrowd": 0, "bbox": [272, 22, 150, 268], "area": 16710}, {"id": 15986670, "category_id": 181, "iscrowd": 0, "bbox": [214, 52, 85, 240], "area": 13740}, {"id": 10859967, "category_id": 186, "iscrowd": 0, "bbox": [337, 0, 82, 31], "area": 1514}, {"id": 6442565, "category_id": 189, "iscrowd": 0, "bbox": [265, 263, 87, 46], "area": 1019}, {"id": 4936023, "category_id": 195, "iscrowd": 0, "bbox": [480, 58, 99, 200], "area": 11570}, {"id": 5462363, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 339], "area": 98380}], "file_name": "000000332845.png", "image_id": 332845}, {"segments_info": [{"id": 11980245, "category_id": 1, "iscrowd": 0, "bbox": [372, 63, 26, 34], "area": 443}, {"id": 7899023, "category_id": 1, "iscrowd": 0, "bbox": [423, 68, 18, 27], "area": 323}, {"id": 6186592, "category_id": 1, "iscrowd": 0, "bbox": [191, 37, 32, 69], "area": 1323}, {"id": 7239535, "category_id": 1, "iscrowd": 0, "bbox": [223, 58, 16, 46], "area": 406}, {"id": 9478827, "category_id": 1, "iscrowd": 0, "bbox": [480, 65, 14, 26], "area": 178}, {"id": 11386564, "category_id": 1, "iscrowd": 0, "bbox": [44, 49, 24, 29], "area": 351}, {"id": 2041132, "category_id": 20, "iscrowd": 0, "bbox": [347, 107, 292, 194], "area": 31141}, {"id": 4874355, "category_id": 20, "iscrowd": 0, "bbox": [572, 139, 68, 45], "area": 2388}, {"id": 3686470, "category_id": 20, "iscrowd": 0, "bbox": [2, 119, 339, 172], "area": 40355}, {"id": 11649738, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 625, 87], "area": 32588}, {"id": 3885399, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 395], "area": 96213}, {"id": 15265778, "category_id": 187, "iscrowd": 0, "bbox": [0, 11, 628, 58], "area": 9219}], "file_name": "000000332901.png", "image_id": 332901}, {"segments_info": [{"id": 4413287, "category_id": 25, "iscrowd": 0, "bbox": [91, 199, 239, 388], "area": 30752}, {"id": 3750973, "category_id": 25, "iscrowd": 0, "bbox": [238, 189, 166, 208], "area": 10406}, {"id": 3493192, "category_id": 184, "iscrowd": 0, "bbox": [0, 133, 428, 435], "area": 94668}, {"id": 15651501, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 428, 339], "area": 103276}, {"id": 5864582, "category_id": 193, "iscrowd": 0, "bbox": [0, 542, 428, 98], "area": 33995}], "file_name": "000000333069.png", "image_id": 333069}, {"segments_info": [{"id": 5001049, "category_id": 62, "iscrowd": 0, "bbox": [399, 182, 68, 85], "area": 1760}, {"id": 7105925, "category_id": 62, "iscrowd": 0, "bbox": [286, 161, 48, 56], "area": 2139}, {"id": 13028815, "category_id": 65, "iscrowd": 0, "bbox": [40, 173, 414, 216], "area": 66677}, {"id": 12107973, "category_id": 93, "iscrowd": 0, "bbox": [51, 382, 47, 17], "area": 561}, {"id": 10133924, "category_id": 112, "iscrowd": 0, "bbox": [399, 32, 241, 227], "area": 29641}, {"id": 8685966, "category_id": 133, "iscrowd": 0, "bbox": [126, 101, 83, 84], "area": 4157}, {"id": 5000792, "category_id": 189, "iscrowd": 0, "bbox": [167, 157, 343, 106], "area": 7420}, {"id": 5527390, "category_id": 190, "iscrowd": 0, "bbox": [382, 237, 258, 172], "area": 27974}, {"id": 10068389, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 399], "area": 107993}], "file_name": "000000333237.png", "image_id": 333237}, {"segments_info": [{"id": 5788546, "category_id": 1, "iscrowd": 0, "bbox": [234, 169, 64, 77], "area": 2243}, {"id": 10460575, "category_id": 1, "iscrowd": 0, "bbox": [193, 183, 29, 46], "area": 784}, {"id": 6444123, "category_id": 1, "iscrowd": 0, "bbox": [476, 167, 88, 226], "area": 8940}, {"id": 7299935, "category_id": 6, "iscrowd": 0, "bbox": [101, 49, 417, 315], "area": 99692}, {"id": 10322814, "category_id": 77, "iscrowd": 0, "bbox": [515, 281, 11, 8], "area": 33}, {"id": 5000269, "category_id": 130, "iscrowd": 0, "bbox": [170, 63, 25, 11], "area": 152}, {"id": 4474187, "category_id": 149, "iscrowd": 0, "bbox": [0, 277, 577, 148], "area": 22551}, {"id": 4028785, "category_id": 184, "iscrowd": 0, "bbox": [535, 154, 94, 126], "area": 3165}, {"id": 15525604, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 183], "area": 70546}, {"id": 9277589, "category_id": 191, "iscrowd": 0, "bbox": [0, 289, 640, 136], "area": 28371}, {"id": 5131340, "category_id": 197, "iscrowd": 0, "bbox": [0, 113, 640, 233], "area": 32205}], "file_name": "000000333402.png", "image_id": 333402}, {"segments_info": [{"id": 9212563, "category_id": 13, "iscrowd": 0, "bbox": [153, 100, 47, 102], "area": 3626}, {"id": 1583394, "category_id": 112, "iscrowd": 0, "bbox": [339, 188, 87, 336], "area": 24799}, {"id": 2505275, "category_id": 149, "iscrowd": 0, "bbox": [0, 453, 426, 187], "area": 29154}, {"id": 3686977, "category_id": 171, "iscrowd": 0, "bbox": [0, 70, 348, 459], "area": 105209}, {"id": 658444, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 426, 175], "area": 29913}, {"id": 788488, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 426, 195], "area": 16095}, {"id": 2836038, "category_id": 191, "iscrowd": 0, "bbox": [0, 389, 426, 237], "area": 38064}, {"id": 2507572, "category_id": 199, "iscrowd": 0, "bbox": [303, 67, 123, 114], "area": 5646}], "file_name": "000000333697.png", "image_id": 333697}, {"segments_info": [{"id": 7566235, "category_id": 1, "iscrowd": 0, "bbox": [55, 145, 137, 358], "area": 29872}, {"id": 7895153, "category_id": 6, "iscrowd": 0, "bbox": [0, 0, 427, 448], "area": 119256}, {"id": 15123835, "category_id": 28, "iscrowd": 0, "bbox": [41, 89, 237, 57], "area": 8604}, {"id": 14145490, "category_id": 28, "iscrowd": 0, "bbox": [1, 62, 97, 77], "area": 4764}, {"id": 1513495, "category_id": 31, "iscrowd": 0, "bbox": [157, 248, 26, 39], "area": 648}, {"id": 5656628, "category_id": 62, "iscrowd": 0, "bbox": [199, 36, 57, 88], "area": 3370}, {"id": 4735546, "category_id": 62, "iscrowd": 0, "bbox": [329, 104, 61, 35], "area": 1607}, {"id": 5460020, "category_id": 62, "iscrowd": 0, "bbox": [150, 34, 57, 61], "area": 2284}, {"id": 4803132, "category_id": 62, "iscrowd": 0, "bbox": [279, 105, 52, 34], "area": 1418}, {"id": 3684908, "category_id": 62, "iscrowd": 0, "bbox": [97, 42, 62, 54], "area": 1466}, {"id": 5522724, "category_id": 62, "iscrowd": 0, "bbox": [386, 105, 21, 33], "area": 411}, {"id": 4541520, "category_id": 149, "iscrowd": 0, "bbox": [0, 356, 342, 284], "area": 67628}], "file_name": "000000333745.png", "image_id": 333745}, {"segments_info": [{"id": 1712420, "category_id": 17, "iscrowd": 0, "bbox": [177, 153, 219, 199], "area": 26696}, {"id": 7438216, "category_id": 17, "iscrowd": 0, "bbox": [68, 123, 376, 168], "area": 16584}, {"id": 2698030, "category_id": 47, "iscrowd": 0, "bbox": [94, 118, 54, 57], "area": 2199}, {"id": 1258080, "category_id": 62, "iscrowd": 0, "bbox": [411, 1, 89, 99], "area": 7401}, {"id": 10922154, "category_id": 72, "iscrowd": 0, "bbox": [152, 0, 261, 133], "area": 26320}, {"id": 8491416, "category_id": 74, "iscrowd": 0, "bbox": [288, 283, 47, 39], "area": 1362}, {"id": 1975591, "category_id": 76, "iscrowd": 0, "bbox": [113, 224, 59, 38], "area": 812}, {"id": 2634298, "category_id": 76, "iscrowd": 0, "bbox": [71, 185, 120, 111], "area": 2062}, {"id": 9676727, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 124, 375], "area": 26841}, {"id": 2445191, "category_id": 171, "iscrowd": 0, "bbox": [389, 0, 77, 73], "area": 840}, {"id": 1914462, "category_id": 189, "iscrowd": 0, "bbox": [10, 68, 490, 307], "area": 39455}, {"id": 5141915, "category_id": 190, "iscrowd": 0, "bbox": [0, 144, 500, 231], "area": 20551}, {"id": 9546439, "category_id": 199, "iscrowd": 0, "bbox": [98, 0, 109, 137], "area": 8335}], "file_name": "000000333772.png", "image_id": 333772}, {"segments_info": [{"id": 2961457, "category_id": 14, "iscrowd": 0, "bbox": [25, 171, 186, 422], "area": 58291}, {"id": 1515037, "category_id": 15, "iscrowd": 0, "bbox": [0, 411, 62, 160], "area": 7142}, {"id": 9410974, "category_id": 155, "iscrowd": 0, "bbox": [0, 290, 428, 150], "area": 31326}, {"id": 13551303, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 428, 310], "area": 108444}, {"id": 4937828, "category_id": 191, "iscrowd": 0, "bbox": [14, 391, 414, 200], "area": 41846}, {"id": 927525, "category_id": 193, "iscrowd": 0, "bbox": [48, 572, 380, 68], "area": 15629}, {"id": 6118491, "category_id": 197, "iscrowd": 0, "bbox": [0, 294, 53, 82], "area": 2289}], "file_name": "000000333956.png", "image_id": 333956}, {"segments_info": [{"id": 6511196, "category_id": 1, "iscrowd": 0, "bbox": [547, 219, 23, 47], "area": 507}, {"id": 8684156, "category_id": 3, "iscrowd": 0, "bbox": [1, 210, 178, 120], "area": 15042}, {"id": 6050900, "category_id": 8, "iscrowd": 0, "bbox": [221, 122, 298, 220], "area": 43352}, {"id": 7895675, "category_id": 8, "iscrowd": 0, "bbox": [511, 182, 79, 78], "area": 3738}, {"id": 13749240, "category_id": 13, "iscrowd": 0, "bbox": [623, 206, 12, 11], "area": 108}, {"id": 11513260, "category_id": 191, "iscrowd": 0, "bbox": [0, 218, 640, 208], "area": 86147}, {"id": 8357516, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 302], "area": 123229}], "file_name": "000000334006.png", "image_id": 334006}, {"segments_info": [{"id": 8548463, "category_id": 1, "iscrowd": 0, "bbox": [1, 38, 415, 382], "area": 80181}, {"id": 3548433, "category_id": 1, "iscrowd": 0, "bbox": [1, 116, 50, 179], "area": 5251}, {"id": 3285851, "category_id": 1, "iscrowd": 0, "bbox": [4, 118, 40, 52], "area": 251}, {"id": 7100584, "category_id": 3, "iscrowd": 0, "bbox": [269, 93, 26, 33], "area": 413}, {"id": 11379331, "category_id": 3, "iscrowd": 0, "bbox": [380, 79, 30, 18], "area": 264}, {"id": 7362609, "category_id": 3, "iscrowd": 0, "bbox": [93, 120, 43, 28], "area": 551}, {"id": 13488585, "category_id": 3, "iscrowd": 0, "bbox": [303, 81, 70, 38], "area": 1727}, {"id": 5864867, "category_id": 59, "iscrowd": 0, "bbox": [252, 221, 92, 47], "area": 2704}, {"id": 9469545, "category_id": 77, "iscrowd": 0, "bbox": [256, 250, 119, 87], "area": 6156}, {"id": 5263940, "category_id": 112, "iscrowd": 0, "bbox": [422, 0, 58, 108], "area": 4438}, {"id": 10132113, "category_id": 149, "iscrowd": 0, "bbox": [287, 114, 54, 25], "area": 711}, {"id": 1717542, "category_id": 184, "iscrowd": 0, "bbox": [40, 46, 600, 381], "area": 103189}, {"id": 3747879, "category_id": 191, "iscrowd": 0, "bbox": [0, 259, 307, 168], "area": 3694}, {"id": 10069406, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 431, 156], "area": 17290}, {"id": 10399924, "category_id": 199, "iscrowd": 0, "bbox": [258, 0, 382, 121], "area": 13753}], "file_name": "000000334309.png", "image_id": 334309}, {"segments_info": [{"id": 4339819, "category_id": 1, "iscrowd": 0, "bbox": [172, 228, 27, 70], "area": 1011}, {"id": 6513251, "category_id": 3, "iscrowd": 0, "bbox": [541, 260, 55, 31], "area": 1363}, {"id": 6773323, "category_id": 3, "iscrowd": 0, "bbox": [48, 258, 120, 40], "area": 2122}, {"id": 7631732, "category_id": 6, "iscrowd": 0, "bbox": [234, 186, 192, 110], "area": 16700}, {"id": 7698297, "category_id": 6, "iscrowd": 0, "bbox": [416, 205, 130, 87], "area": 8891}, {"id": 6782051, "category_id": 6, "iscrowd": 0, "bbox": [16, 171, 106, 89], "area": 7147}, {"id": 1579284, "category_id": 10, "iscrowd": 0, "bbox": [122, 201, 9, 22], "area": 176}, {"id": 2829097, "category_id": 10, "iscrowd": 0, "bbox": [238, 190, 16, 38], "area": 521}, {"id": 4276028, "category_id": 10, "iscrowd": 0, "bbox": [99, 183, 18, 43], "area": 541}, {"id": 5923952, "category_id": 128, "iscrowd": 0, "bbox": [15, 36, 610, 260], "area": 62117}, {"id": 9212050, "category_id": 149, "iscrowd": 0, "bbox": [0, 265, 625, 154], "area": 76404}, {"id": 15330028, "category_id": 187, "iscrowd": 0, "bbox": [16, 15, 609, 253], "area": 60347}], "file_name": "000000334371.png", "image_id": 334371}, {"segments_info": [{"id": 2628169, "category_id": 1, "iscrowd": 0, "bbox": [552, 105, 88, 373], "area": 19099}, {"id": 7500679, "category_id": 1, "iscrowd": 0, "bbox": [287, 62, 162, 418], "area": 20368}, {"id": 2500132, "category_id": 1, "iscrowd": 0, "bbox": [490, 115, 111, 290], "area": 18676}, {"id": 4274496, "category_id": 31, "iscrowd": 0, "bbox": [565, 154, 33, 133], "area": 1351}, {"id": 12960969, "category_id": 84, "iscrowd": 0, "bbox": [100, 354, 113, 54], "area": 3387}, {"id": 8290183, "category_id": 85, "iscrowd": 0, "bbox": [310, 219, 105, 116], "area": 9353}, {"id": 2172726, "category_id": 112, "iscrowd": 0, "bbox": [0, 175, 34, 243], "area": 4399}, {"id": 396311, "category_id": 177, "iscrowd": 0, "bbox": [0, 16, 236, 412], "area": 9166}, {"id": 14737892, "category_id": 189, "iscrowd": 0, "bbox": [202, 331, 271, 142], "area": 19627}, {"id": 1381399, "category_id": 190, "iscrowd": 0, "bbox": [25, 214, 615, 266], "area": 43956}, {"id": 15134196, "category_id": 195, "iscrowd": 0, "bbox": [0, 380, 221, 100], "area": 17708}, {"id": 197894, "category_id": 199, "iscrowd": 0, "bbox": [106, 0, 534, 199], "area": 74370}], "file_name": "000000334399.png", "image_id": 334399}, {"segments_info": [{"id": 5661041, "category_id": 1, "iscrowd": 0, "bbox": [101, 65, 496, 351], "area": 80093}, {"id": 2830387, "category_id": 32, "iscrowd": 0, "bbox": [328, 351, 39, 53], "area": 1194}, {"id": 4224411, "category_id": 59, "iscrowd": 0, "bbox": [271, 214, 79, 42], "area": 1924}, {"id": 6844278, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 189], "area": 73783}, {"id": 11909303, "category_id": 199, "iscrowd": 0, "bbox": [0, 65, 640, 358], "area": 109805}], "file_name": "000000334417.png", "image_id": 334417}, {"segments_info": [{"id": 5128520, "category_id": 1, "iscrowd": 0, "bbox": [40, 421, 170, 178], "area": 12341}, {"id": 3748155, "category_id": 1, "iscrowd": 0, "bbox": [38, 501, 199, 139], "area": 11292}, {"id": 5522505, "category_id": 1, "iscrowd": 0, "bbox": [238, 95, 153, 262], "area": 28872}, {"id": 4798807, "category_id": 1, "iscrowd": 0, "bbox": [0, 89, 234, 335], "area": 36027}, {"id": 6443854, "category_id": 1, "iscrowd": 0, "bbox": [96, 138, 148, 200], "area": 18337}, {"id": 8547937, "category_id": 1, "iscrowd": 0, "bbox": [439, 187, 41, 122], "area": 1380}, {"id": 5130062, "category_id": 1, "iscrowd": 0, "bbox": [266, 78, 62, 78], "area": 2720}, {"id": 3552829, "category_id": 1, "iscrowd": 0, "bbox": [1, 421, 68, 219], "area": 10987}, {"id": 6303839, "category_id": 31, "iscrowd": 0, "bbox": [17, 368, 173, 163], "area": 9344}, {"id": 7224099, "category_id": 48, "iscrowd": 0, "bbox": [277, 403, 35, 14], "area": 175}, {"id": 3553054, "category_id": 49, "iscrowd": 0, "bbox": [338, 352, 25, 20], "area": 310}, {"id": 9338228, "category_id": 61, "iscrowd": 0, "bbox": [373, 575, 101, 61], "area": 3055}, {"id": 6052959, "category_id": 61, "iscrowd": 0, "bbox": [195, 495, 44, 43], "area": 1103}, {"id": 9533783, "category_id": 61, "iscrowd": 0, "bbox": [237, 501, 39, 39], "area": 1279}, {"id": 10050616, "category_id": 61, "iscrowd": 0, "bbox": [325, 369, 140, 87], "area": 9267}, {"id": 8813124, "category_id": 61, "iscrowd": 0, "bbox": [362, 337, 45, 47], "area": 1697}, {"id": 8418405, "category_id": 61, "iscrowd": 0, "bbox": [365, 514, 76, 58], "area": 2931}, {"id": 9404533, "category_id": 61, "iscrowd": 0, "bbox": [427, 591, 53, 45], "area": 1263}, {"id": 6582139, "category_id": 61, "iscrowd": 0, "bbox": [255, 599, 80, 41], "area": 2413}, {"id": 7364183, "category_id": 61, "iscrowd": 0, "bbox": [248, 367, 57, 23], "area": 849}, {"id": 5855279, "category_id": 100, "iscrowd": 0, "bbox": [185, 300, 295, 194], "area": 15487}, {"id": 8290957, "category_id": 128, "iscrowd": 0, "bbox": [0, 30, 480, 182], "area": 49447}, {"id": 6449764, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 52, 57], "area": 2414}, {"id": 16184819, "category_id": 187, "iscrowd": 0, "bbox": [35, 0, 445, 55], "area": 16712}, {"id": 6052398, "category_id": 189, "iscrowd": 0, "bbox": [131, 340, 349, 300], "area": 26034}, {"id": 9145234, "category_id": 191, "iscrowd": 0, "bbox": [200, 193, 248, 29], "area": 1919}, {"id": 4089419, "category_id": 193, "iscrowd": 0, "bbox": [205, 199, 275, 149], "area": 10365}, {"id": 6375985, "category_id": 196, "iscrowd": 0, "bbox": [234, 450, 217, 190], "area": 1904}], "file_name": "000000334483.png", "image_id": 334483}, {"segments_info": [{"id": 5067089, "category_id": 1, "iscrowd": 0, "bbox": [310, 212, 8, 28], "area": 106}, {"id": 9409424, "category_id": 16, "iscrowd": 0, "bbox": [403, 243, 54, 58], "area": 843}, {"id": 8953252, "category_id": 25, "iscrowd": 0, "bbox": [77, 76, 196, 209], "area": 12477}, {"id": 9875122, "category_id": 25, "iscrowd": 0, "bbox": [215, 76, 107, 216], "area": 7374}, {"id": 4348225, "category_id": 184, "iscrowd": 0, "bbox": [108, 0, 392, 254], "area": 66954}, {"id": 7699059, "category_id": 185, "iscrowd": 0, "bbox": [123, 177, 377, 77], "area": 10095}, {"id": 8823186, "category_id": 193, "iscrowd": 0, "bbox": [124, 224, 376, 44], "area": 4168}, {"id": 8753552, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 129, 296], "area": 30963}], "file_name": "000000334521.png", "image_id": 334521}, {"segments_info": [{"id": 2171166, "category_id": 1, "iscrowd": 0, "bbox": [202, 142, 108, 117], "area": 4505}, {"id": 8224902, "category_id": 42, "iscrowd": 0, "bbox": [267, 230, 104, 46], "area": 1558}, {"id": 9209429, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 459], "area": 287071}], "file_name": "000000334530.png", "image_id": 334530}, {"segments_info": [{"id": 3220773, "category_id": 1, "iscrowd": 0, "bbox": [165, 140, 21, 53], "area": 646}, {"id": 5659247, "category_id": 1, "iscrowd": 0, "bbox": [247, 137, 13, 13], "area": 98}, {"id": 4276039, "category_id": 1, "iscrowd": 0, "bbox": [194, 137, 17, 57], "area": 509}, {"id": 7759453, "category_id": 1, "iscrowd": 0, "bbox": [70, 142, 29, 106], "area": 1246}, {"id": 5129286, "category_id": 1, "iscrowd": 0, "bbox": [179, 139, 12, 52], "area": 310}, {"id": 3023389, "category_id": 1, "iscrowd": 0, "bbox": [15, 135, 62, 139], "area": 4245}, {"id": 2895938, "category_id": 1, "iscrowd": 0, "bbox": [224, 137, 17, 14], "area": 139}, {"id": 3354676, "category_id": 1, "iscrowd": 0, "bbox": [153, 141, 13, 39], "area": 341}, {"id": 5459023, "category_id": 1, "iscrowd": 0, "bbox": [88, 128, 55, 139], "area": 4052}, {"id": 3420985, "category_id": 1, "iscrowd": 0, "bbox": [160, 137, 11, 40], "area": 218}, {"id": 7168876, "category_id": 1, "iscrowd": 0, "bbox": [211, 134, 13, 21], "area": 209}, {"id": 4607585, "category_id": 1, "iscrowd": 0, "bbox": [568, 157, 11, 33], "area": 253}, {"id": 4606287, "category_id": 1, "iscrowd": 0, "bbox": [613, 146, 27, 99], "area": 1707}, {"id": 7303797, "category_id": 3, "iscrowd": 0, "bbox": [449, 182, 131, 79], "area": 4518}, {"id": 9671830, "category_id": 3, "iscrowd": 0, "bbox": [612, 147, 10, 50], "area": 365}, {"id": 4272688, "category_id": 3, "iscrowd": 0, "bbox": [126, 161, 42, 46], "area": 1223}, {"id": 9210762, "category_id": 8, "iscrowd": 0, "bbox": [0, 68, 100, 165], "area": 7321}, {"id": 5067868, "category_id": 21, "iscrowd": 0, "bbox": [202, 125, 346, 249], "area": 45801}, {"id": 2104094, "category_id": 31, "iscrowd": 0, "bbox": [126, 204, 11, 30], "area": 191}, {"id": 5196874, "category_id": 77, "iscrowd": 0, "bbox": [118, 164, 5, 6], "area": 19}, {"id": 6974575, "category_id": 149, "iscrowd": 0, "bbox": [0, 190, 640, 209], "area": 61076}, {"id": 14209745, "category_id": 187, "iscrowd": 0, "bbox": [572, 0, 68, 88], "area": 2188}, {"id": 7173501, "category_id": 191, "iscrowd": 0, "bbox": [0, 182, 640, 244], "area": 40434}, {"id": 6646424, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 205], "area": 80381}], "file_name": "000000334555.png", "image_id": 334555}, {"segments_info": [{"id": 9805997, "category_id": 1, "iscrowd": 0, "bbox": [112, 155, 37, 111], "area": 2541}, {"id": 3290419, "category_id": 1, "iscrowd": 0, "bbox": [580, 150, 22, 52], "area": 672}, {"id": 2238507, "category_id": 1, "iscrowd": 0, "bbox": [603, 142, 21, 59], "area": 735}, {"id": 5725534, "category_id": 1, "iscrowd": 0, "bbox": [552, 78, 16, 35], "area": 360}, {"id": 7177105, "category_id": 1, "iscrowd": 0, "bbox": [210, 137, 90, 159], "area": 6072}, {"id": 10134183, "category_id": 1, "iscrowd": 0, "bbox": [48, 227, 22, 44], "area": 670}, {"id": 4937894, "category_id": 1, "iscrowd": 0, "bbox": [304, 173, 37, 103], "area": 1725}, {"id": 9150126, "category_id": 34, "iscrowd": 0, "bbox": [295, 237, 22, 13], "area": 197}, {"id": 9277315, "category_id": 44, "iscrowd": 0, "bbox": [82, 246, 12, 13], "area": 99}, {"id": 6453642, "category_id": 154, "iscrowd": 0, "bbox": [0, 174, 640, 239], "area": 131612}, {"id": 7511741, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 210], "area": 117368}], "file_name": "000000334719.png", "image_id": 334719}, {"segments_info": [{"id": 6314331, "category_id": 1, "iscrowd": 0, "bbox": [61, 70, 99, 170], "area": 6166}, {"id": 6246733, "category_id": 1, "iscrowd": 0, "bbox": [140, 72, 78, 159], "area": 3556}, {"id": 2565670, "category_id": 1, "iscrowd": 0, "bbox": [450, 60, 50, 116], "area": 3359}, {"id": 1258296, "category_id": 1, "iscrowd": 0, "bbox": [356, 132, 24, 34], "area": 259}, {"id": 3879473, "category_id": 1, "iscrowd": 0, "bbox": [258, 61, 74, 135], "area": 4035}, {"id": 3417891, "category_id": 1, "iscrowd": 0, "bbox": [369, 67, 52, 136], "area": 4001}, {"id": 8357252, "category_id": 35, "iscrowd": 0, "bbox": [378, 191, 33, 10], "area": 150}, {"id": 7308146, "category_id": 35, "iscrowd": 0, "bbox": [327, 164, 58, 6], "area": 78}, {"id": 8422282, "category_id": 35, "iscrowd": 0, "bbox": [105, 172, 381, 76], "area": 189}, {"id": 10922397, "category_id": 35, "iscrowd": 0, "bbox": [186, 196, 29, 25], "area": 98}, {"id": 9802400, "category_id": 35, "iscrowd": 0, "bbox": [260, 184, 94, 14], "area": 276}, {"id": 15000031, "category_id": 159, "iscrowd": 0, "bbox": [0, 145, 500, 188], "area": 77180}, {"id": 3685436, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 202], "area": 66550}], "file_name": "000000334767.png", "image_id": 334767}, {"segments_info": [{"id": 3357282, "category_id": 77, "iscrowd": 0, "bbox": [332, 19, 146, 281], "area": 40248}, {"id": 5846204, "category_id": 77, "iscrowd": 0, "bbox": [297, 22, 25, 280], "area": 6493}, {"id": 6174151, "category_id": 77, "iscrowd": 0, "bbox": [139, 22, 146, 278], "area": 40037}], "file_name": "000000334977.png", "image_id": 334977}, {"segments_info": [{"id": 341621, "category_id": 16, "iscrowd": 0, "bbox": [333, 149, 211, 146], "area": 16707}, {"id": 3107987, "category_id": 88, "iscrowd": 0, "bbox": [1, 0, 198, 230], "area": 15866}, {"id": 5998016, "category_id": 88, "iscrowd": 0, "bbox": [53, 66, 222, 326], "area": 43293}, {"id": 2451869, "category_id": 88, "iscrowd": 0, "bbox": [197, 161, 175, 231], "area": 21945}, {"id": 4936538, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 423, 193], "area": 11148}], "file_name": "000000335081.png", "image_id": 335081}, {"segments_info": [{"id": 2037050, "category_id": 3, "iscrowd": 0, "bbox": [553, 296, 60, 21], "area": 998}, {"id": 6376501, "category_id": 8, "iscrowd": 0, "bbox": [186, 303, 123, 39], "area": 3688}, {"id": 7107427, "category_id": 13, "iscrowd": 0, "bbox": [339, 240, 33, 35], "area": 792}, {"id": 5726822, "category_id": 128, "iscrowd": 0, "bbox": [31, 230, 609, 117], "area": 22432}, {"id": 8357278, "category_id": 149, "iscrowd": 0, "bbox": [0, 314, 640, 165], "area": 47132}, {"id": 3949880, "category_id": 184, "iscrowd": 0, "bbox": [0, 102, 640, 243], "area": 79420}, {"id": 15521429, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 238], "area": 106239}, {"id": 7308711, "category_id": 191, "iscrowd": 0, "bbox": [0, 338, 456, 129], "area": 22847}, {"id": 2593908, "category_id": 193, "iscrowd": 0, "bbox": [0, 318, 397, 96], "area": 22834}], "file_name": "000000335177.png", "image_id": 335177}, {"segments_info": [{"id": 4079943, "category_id": 1, "iscrowd": 0, "bbox": [52, 331, 164, 97], "area": 5740}, {"id": 2565416, "category_id": 1, "iscrowd": 0, "bbox": [337, 221, 155, 110], "area": 7050}, {"id": 5593184, "category_id": 42, "iscrowd": 0, "bbox": [123, 381, 59, 53], "area": 2218}, {"id": 11183007, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 512, 640], "area": 312381}], "file_name": "000000335328.png", "image_id": 335328}, {"segments_info": [{"id": 10924737, "category_id": 48, "iscrowd": 0, "bbox": [45, 117, 236, 326], "area": 10589}, {"id": 8100272, "category_id": 50, "iscrowd": 0, "bbox": [5, 142, 236, 301], "area": 13676}, {"id": 10405577, "category_id": 51, "iscrowd": 0, "bbox": [235, 5, 395, 351], "area": 59293}, {"id": 2318664, "category_id": 56, "iscrowd": 0, "bbox": [438, 79, 184, 176], "area": 20943}, {"id": 1790783, "category_id": 56, "iscrowd": 0, "bbox": [368, 218, 85, 85], "area": 4939}, {"id": 2458210, "category_id": 56, "iscrowd": 0, "bbox": [297, 162, 63, 49], "area": 1323}, {"id": 3313001, "category_id": 56, "iscrowd": 0, "bbox": [355, 92, 106, 137], "area": 8131}, {"id": 2452563, "category_id": 56, "iscrowd": 0, "bbox": [311, 9, 219, 192], "area": 19128}, {"id": 1796431, "category_id": 56, "iscrowd": 0, "bbox": [450, 209, 81, 101], "area": 6186}, {"id": 1862230, "category_id": 56, "iscrowd": 0, "bbox": [522, 39, 56, 54], "area": 2143}, {"id": 11976393, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 629, 448], "area": 62541}], "file_name": "000000335427.png", "image_id": 335427}, {"segments_info": [{"id": 3032149, "category_id": 19, "iscrowd": 0, "bbox": [259, 176, 110, 213], "area": 12197}, {"id": 4348266, "category_id": 19, "iscrowd": 0, "bbox": [167, 173, 15, 10], "area": 105}, {"id": 3758462, "category_id": 19, "iscrowd": 0, "bbox": [308, 25, 297, 399], "area": 47265}, {"id": 5272171, "category_id": 184, "iscrowd": 0, "bbox": [486, 143, 154, 27], "area": 2073}, {"id": 9677225, "category_id": 185, "iscrowd": 0, "bbox": [131, 183, 23, 145], "area": 1769}, {"id": 15719880, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 184], "area": 95696}, {"id": 10335150, "category_id": 192, "iscrowd": 0, "bbox": [113, 163, 159, 26], "area": 2028}, {"id": 4754833, "category_id": 193, "iscrowd": 0, "bbox": [0, 156, 640, 272], "area": 112100}], "file_name": "000000335450.png", "image_id": 335450}, {"segments_info": [{"id": 9800579, "category_id": 9, "iscrowd": 0, "bbox": [166, 238, 65, 31], "area": 1380}, {"id": 8885143, "category_id": 9, "iscrowd": 0, "bbox": [474, 198, 47, 15], "area": 429}, {"id": 7442322, "category_id": 9, "iscrowd": 0, "bbox": [460, 193, 29, 18], "area": 308}, {"id": 7828081, "category_id": 9, "iscrowd": 0, "bbox": [293, 198, 12, 9], "area": 56}, {"id": 10067360, "category_id": 9, "iscrowd": 0, "bbox": [224, 188, 29, 13], "area": 268}, {"id": 12764870, "category_id": 9, "iscrowd": 0, "bbox": [341, 200, 24, 18], "area": 350}, {"id": 6118759, "category_id": 9, "iscrowd": 0, "bbox": [273, 183, 52, 17], "area": 641}, {"id": 8879483, "category_id": 9, "iscrowd": 0, "bbox": [385, 192, 20, 8], "area": 102}, {"id": 12634313, "category_id": 9, "iscrowd": 0, "bbox": [348, 183, 32, 13], "area": 141}, {"id": 12566207, "category_id": 9, "iscrowd": 0, "bbox": [147, 193, 52, 17], "area": 598}, {"id": 9343648, "category_id": 9, "iscrowd": 0, "bbox": [340, 192, 41, 10], "area": 251}, {"id": 2960972, "category_id": 15, "iscrowd": 0, "bbox": [32, 285, 404, 182], "area": 37469}, {"id": 10595253, "category_id": 128, "iscrowd": 0, "bbox": [0, 140, 640, 64], "area": 21508}, {"id": 10465470, "category_id": 154, "iscrowd": 0, "bbox": [0, 338, 640, 142], "area": 48891}, {"id": 8613718, "category_id": 155, "iscrowd": 0, "bbox": [0, 177, 640, 203], "area": 64971}, {"id": 12111324, "category_id": 175, "iscrowd": 0, "bbox": [518, 195, 122, 37], "area": 2694}, {"id": 11904148, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 184], "area": 101446}, {"id": 3891805, "category_id": 193, "iscrowd": 0, "bbox": [0, 336, 640, 97], "area": 18619}, {"id": 8359580, "category_id": 198, "iscrowd": 0, "bbox": [0, 178, 149, 61], "area": 6483}], "file_name": "000000335529.png", "image_id": 335529}, {"segments_info": [{"id": 12623759, "category_id": 74, "iscrowd": 0, "bbox": [385, 260, 96, 161], "area": 13264}, {"id": 9268316, "category_id": 76, "iscrowd": 0, "bbox": [1, 104, 325, 170], "area": 52566}, {"id": 4741731, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 626, 480], "area": 195847}, {"id": 790290, "category_id": 190, "iscrowd": 0, "bbox": [0, 86, 640, 394], "area": 26702}, {"id": 1514015, "category_id": 199, "iscrowd": 0, "bbox": [520, 0, 120, 113], "area": 10362}], "file_name": "000000335658.png", "image_id": 335658}, {"segments_info": [{"id": 4868680, "category_id": 10, "iscrowd": 0, "bbox": [53, 255, 210, 172], "area": 25119}, {"id": 5528704, "category_id": 92, "iscrowd": 0, "bbox": [336, 223, 145, 204], "area": 11724}, {"id": 6390698, "category_id": 171, "iscrowd": 0, "bbox": [0, 211, 122, 216], "area": 16464}, {"id": 5135453, "category_id": 184, "iscrowd": 0, "bbox": [20, 187, 333, 240], "area": 4024}, {"id": 11958605, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 126437}, {"id": 9668216, "category_id": 197, "iscrowd": 0, "bbox": [391, 15, 234, 412], "area": 55679}], "file_name": "000000335800.png", "image_id": 335800}, {"segments_info": [{"id": 8621972, "category_id": 49, "iscrowd": 0, "bbox": [187, 334, 425, 278], "area": 14040}, {"id": 6452875, "category_id": 51, "iscrowd": 0, "bbox": [0, 126, 282, 419], "area": 98267}, {"id": 6123140, "category_id": 51, "iscrowd": 0, "bbox": [274, 152, 338, 382], "area": 102658}, {"id": 4343633, "category_id": 122, "iscrowd": 0, "bbox": [139, 473, 240, 139], "area": 15518}, {"id": 6123393, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 143275}], "file_name": "000000335954.png", "image_id": 335954}, {"segments_info": [{"id": 6509958, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 80, 127], "area": 5578}, {"id": 7041695, "category_id": 1, "iscrowd": 0, "bbox": [440, 53, 200, 366], "area": 47428}, {"id": 6250109, "category_id": 1, "iscrowd": 0, "bbox": [13, 20, 235, 199], "area": 22487}, {"id": 5852240, "category_id": 1, "iscrowd": 0, "bbox": [512, 0, 73, 59], "area": 1907}, {"id": 7170689, "category_id": 46, "iscrowd": 0, "bbox": [397, 225, 103, 184], "area": 14127}, {"id": 6973083, "category_id": 46, "iscrowd": 0, "bbox": [242, 134, 59, 90], "area": 3795}, {"id": 10193289, "category_id": 47, "iscrowd": 0, "bbox": [83, 195, 89, 102], "area": 7134}, {"id": 8486282, "category_id": 48, "iscrowd": 0, "bbox": [239, 263, 43, 101], "area": 1933}, {"id": 8946057, "category_id": 50, "iscrowd": 0, "bbox": [191, 207, 22, 43], "area": 518}, {"id": 3102123, "category_id": 57, "iscrowd": 0, "bbox": [0, 318, 8, 6], "area": 33}, {"id": 3892641, "category_id": 57, "iscrowd": 0, "bbox": [362, 233, 37, 60], "area": 1068}, {"id": 4351898, "category_id": 57, "iscrowd": 0, "bbox": [47, 281, 30, 15], "area": 195}, {"id": 4687811, "category_id": 57, "iscrowd": 0, "bbox": [370, 217, 4, 15], "area": 38}, {"id": 3627674, "category_id": 57, "iscrowd": 0, "bbox": [0, 282, 20, 34], "area": 252}, {"id": 5788520, "category_id": 62, "iscrowd": 0, "bbox": [406, 10, 43, 84], "area": 2468}, {"id": 5133680, "category_id": 62, "iscrowd": 0, "bbox": [453, 9, 49, 84], "area": 2917}, {"id": 5592430, "category_id": 62, "iscrowd": 0, "bbox": [503, 14, 13, 21], "area": 211}, {"id": 6255518, "category_id": 62, "iscrowd": 0, "bbox": [604, 220, 36, 106], "area": 1303}, {"id": 3425908, "category_id": 62, "iscrowd": 0, "bbox": [46, 63, 217, 127], "area": 8048}, {"id": 6519971, "category_id": 62, "iscrowd": 0, "bbox": [591, 27, 49, 29], "area": 1195}, {"id": 7106431, "category_id": 67, "iscrowd": 0, "bbox": [0, 182, 640, 293], "area": 118630}, {"id": 7367549, "category_id": 67, "iscrowd": 0, "bbox": [520, 40, 70, 17], "area": 883}, {"id": 8880526, "category_id": 118, "iscrowd": 0, "bbox": [171, 53, 332, 168], "area": 25648}, {"id": 6121863, "category_id": 177, "iscrowd": 0, "bbox": [89, 0, 322, 92], "area": 17461}, {"id": 12170684, "category_id": 181, "iscrowd": 0, "bbox": [392, 0, 207, 37], "area": 2402}, {"id": 4276049, "category_id": 189, "iscrowd": 0, "bbox": [0, 28, 640, 452], "area": 7865}, {"id": 12560040, "category_id": 195, "iscrowd": 0, "bbox": [231, 473, 300, 7], "area": 1948}], "file_name": "000000336053.png", "image_id": 336053}, {"segments_info": [{"id": 7042954, "category_id": 1, "iscrowd": 0, "bbox": [271, 124, 113, 164], "area": 5227}, {"id": 6055532, "category_id": 15, "iscrowd": 0, "bbox": [327, 300, 259, 107], "area": 12366}, {"id": 6779522, "category_id": 41, "iscrowd": 0, "bbox": [348, 271, 53, 17], "area": 421}, {"id": 7242639, "category_id": 144, "iscrowd": 0, "bbox": [0, 282, 380, 101], "area": 10114}, {"id": 14864055, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 231], "area": 122689}, {"id": 11713221, "category_id": 191, "iscrowd": 0, "bbox": [0, 305, 640, 127], "area": 51382}, {"id": 6186339, "category_id": 197, "iscrowd": 0, "bbox": [0, 168, 640, 194], "area": 73467}], "file_name": "000000336209.png", "image_id": 336209}, {"segments_info": [{"id": 6379862, "category_id": 1, "iscrowd": 0, "bbox": [87, 133, 90, 174], "area": 6720}, {"id": 2895155, "category_id": 1, "iscrowd": 0, "bbox": [432, 74, 6, 22], "area": 82}, {"id": 5593179, "category_id": 1, "iscrowd": 0, "bbox": [55, 119, 16, 24], "area": 243}, {"id": 3022613, "category_id": 1, "iscrowd": 0, "bbox": [608, 141, 32, 73], "area": 1177}, {"id": 4020068, "category_id": 3, "iscrowd": 0, "bbox": [412, 107, 60, 49], "area": 1860}, {"id": 6249044, "category_id": 3, "iscrowd": 0, "bbox": [149, 123, 49, 58], "area": 1778}, {"id": 6842215, "category_id": 3, "iscrowd": 0, "bbox": [31, 140, 81, 73], "area": 2364}, {"id": 4012856, "category_id": 3, "iscrowd": 0, "bbox": [406, 83, 32, 27], "area": 592}, {"id": 2893600, "category_id": 3, "iscrowd": 0, "bbox": [534, 135, 82, 70], "area": 4312}, {"id": 7039337, "category_id": 3, "iscrowd": 0, "bbox": [86, 137, 56, 55], "area": 944}, {"id": 2565669, "category_id": 3, "iscrowd": 0, "bbox": [467, 104, 56, 39], "area": 1702}, {"id": 4671045, "category_id": 3, "iscrowd": 0, "bbox": [8, 146, 77, 94], "area": 3163}, {"id": 4486280, "category_id": 3, "iscrowd": 0, "bbox": [371, 221, 269, 201], "area": 37141}, {"id": 10460314, "category_id": 3, "iscrowd": 0, "bbox": [0, 149, 49, 103], "area": 3964}, {"id": 5920855, "category_id": 3, "iscrowd": 0, "bbox": [156, 116, 58, 50], "area": 1103}, {"id": 4079158, "category_id": 3, "iscrowd": 0, "bbox": [405, 140, 133, 100], "area": 10206}, {"id": 4407111, "category_id": 3, "iscrowd": 0, "bbox": [240, 114, 51, 43], "area": 1803}, {"id": 5926517, "category_id": 3, "iscrowd": 1, "bbox": [98, 1, 542, 292], "area": 23099}, {"id": 3421238, "category_id": 4, "iscrowd": 0, "bbox": [13, 208, 226, 119], "area": 13429}, {"id": 3815483, "category_id": 4, "iscrowd": 0, "bbox": [450, 24, 4, 3], "area": 11}, {"id": 4935271, "category_id": 4, "iscrowd": 0, "bbox": [98, 154, 35, 52], "area": 853}, {"id": 3685438, "category_id": 6, "iscrowd": 0, "bbox": [435, 44, 43, 56], "area": 1670}, {"id": 4475208, "category_id": 6, "iscrowd": 0, "bbox": [287, 58, 106, 111], "area": 10264}, {"id": 4081000, "category_id": 8, "iscrowd": 0, "bbox": [461, 77, 64, 32], "area": 956}, {"id": 5658197, "category_id": 8, "iscrowd": 0, "bbox": [489, 89, 74, 48], "area": 1587}, {"id": 7105906, "category_id": 149, "iscrowd": 0, "bbox": [0, 16, 640, 411], "area": 81390}, {"id": 2177336, "category_id": 184, "iscrowd": 0, "bbox": [145, 12, 383, 112], "area": 10178}, {"id": 12369083, "category_id": 187, "iscrowd": 0, "bbox": [388, 0, 91, 14], "area": 654}, {"id": 5133660, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 154], "area": 43720}], "file_name": "000000336232.png", "image_id": 336232}, {"segments_info": [{"id": 5798310, "category_id": 1, "iscrowd": 0, "bbox": [241, 302, 32, 62], "area": 1401}, {"id": 10918728, "category_id": 34, "iscrowd": 0, "bbox": [286, 302, 32, 8], "area": 187}, {"id": 5731692, "category_id": 184, "iscrowd": 0, "bbox": [0, 227, 480, 100], "area": 25962}, {"id": 16643297, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 245], "area": 111419}, {"id": 11973285, "category_id": 192, "iscrowd": 0, "bbox": [0, 214, 480, 109], "area": 13252}, {"id": 4624525, "category_id": 193, "iscrowd": 0, "bbox": [0, 287, 480, 353], "area": 154909}], "file_name": "000000336265.png", "image_id": 336265}, {"segments_info": [{"id": 8354686, "category_id": 5, "iscrowd": 0, "bbox": [123, 190, 162, 47], "area": 2918}, {"id": 12695974, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 270284}], "file_name": "000000336309.png", "image_id": 336309}, {"segments_info": [{"id": 14593171, "category_id": 1, "iscrowd": 0, "bbox": [126, 68, 57, 121], "area": 3846}, {"id": 4668746, "category_id": 1, "iscrowd": 0, "bbox": [6, 30, 118, 239], "area": 15976}, {"id": 3419443, "category_id": 1, "iscrowd": 0, "bbox": [121, 14, 230, 298], "area": 43687}, {"id": 7364967, "category_id": 1, "iscrowd": 0, "bbox": [51, 100, 76, 108], "area": 4243}, {"id": 3686998, "category_id": 1, "iscrowd": 0, "bbox": [312, 82, 24, 41], "area": 692}, {"id": 10714233, "category_id": 44, "iscrowd": 0, "bbox": [322, 234, 63, 86], "area": 3287}, {"id": 13742764, "category_id": 46, "iscrowd": 0, "bbox": [57, 277, 75, 138], "area": 6808}, {"id": 15319227, "category_id": 46, "iscrowd": 0, "bbox": [299, 313, 87, 150], "area": 8654}, {"id": 14798804, "category_id": 48, "iscrowd": 0, "bbox": [376, 435, 51, 164], "area": 2858}, {"id": 11181483, "category_id": 49, "iscrowd": 0, "bbox": [36, 338, 27, 44], "area": 434}, {"id": 9269874, "category_id": 49, "iscrowd": 0, "bbox": [354, 434, 30, 165], "area": 3132}, {"id": 9215423, "category_id": 59, "iscrowd": 0, "bbox": [126, 288, 190, 93], "area": 15118}, {"id": 1775382, "category_id": 62, "iscrowd": 0, "bbox": [0, 269, 42, 59], "area": 615}, {"id": 11774905, "category_id": 67, "iscrowd": 0, "bbox": [0, 231, 427, 401], "area": 104023}, {"id": 5199462, "category_id": 112, "iscrowd": 0, "bbox": [280, 11, 31, 59], "area": 988}, {"id": 5467544, "category_id": 171, "iscrowd": 0, "bbox": [388, 0, 39, 138], "area": 3556}, {"id": 11572110, "category_id": 189, "iscrowd": 0, "bbox": [97, 159, 330, 481], "area": 2591}, {"id": 3879218, "category_id": 190, "iscrowd": 0, "bbox": [0, 268, 60, 209], "area": 2094}, {"id": 7236211, "category_id": 191, "iscrowd": 0, "bbox": [308, 112, 97, 129], "area": 4476}, {"id": 9804986, "category_id": 196, "iscrowd": 0, "bbox": [0, 631, 300, 9], "area": 2465}, {"id": 8426154, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 427, 154], "area": 22231}], "file_name": "000000336356.png", "image_id": 336356}, {"segments_info": [{"id": 7105648, "category_id": 8, "iscrowd": 0, "bbox": [606, 286, 34, 58], "area": 1308}, {"id": 4540327, "category_id": 13, "iscrowd": 0, "bbox": [248, 1, 95, 96], "area": 7206}, {"id": 10064785, "category_id": 100, "iscrowd": 0, "bbox": [431, 307, 34, 99], "area": 2450}, {"id": 8289916, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 311], "area": 79994}, {"id": 6712432, "category_id": 144, "iscrowd": 0, "bbox": [216, 302, 424, 46], "area": 4354}, {"id": 7302766, "category_id": 149, "iscrowd": 0, "bbox": [0, 341, 640, 139], "area": 65913}, {"id": 5922658, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 326], "area": 60020}, {"id": 5000783, "category_id": 185, "iscrowd": 0, "bbox": [234, 252, 148, 77], "area": 3962}, {"id": 16051173, "category_id": 187, "iscrowd": 0, "bbox": [341, 0, 299, 133], "area": 17675}, {"id": 5267300, "category_id": 193, "iscrowd": 0, "bbox": [0, 300, 559, 44], "area": 9167}, {"id": 5001043, "category_id": 194, "iscrowd": 0, "bbox": [247, 412, 259, 68], "area": 10060}, {"id": 4540747, "category_id": 199, "iscrowd": 0, "bbox": [424, 285, 80, 28], "area": 1284}], "file_name": "000000336587.png", "image_id": 336587}, {"segments_info": [{"id": 5394510, "category_id": 1, "iscrowd": 0, "bbox": [127, 61, 147, 521], "area": 48037}, {"id": 3949387, "category_id": 1, "iscrowd": 0, "bbox": [37, 131, 49, 18], "area": 637}, {"id": 10064786, "category_id": 1, "iscrowd": 0, "bbox": [258, 111, 170, 339], "area": 23482}, {"id": 2366753, "category_id": 1, "iscrowd": 0, "bbox": [345, 2, 83, 303], "area": 12530}, {"id": 3223861, "category_id": 1, "iscrowd": 0, "bbox": [352, 164, 35, 108], "area": 1971}, {"id": 1973030, "category_id": 1, "iscrowd": 0, "bbox": [241, 44, 67, 103], "area": 4388}, {"id": 5133667, "category_id": 6, "iscrowd": 0, "bbox": [0, 0, 427, 638], "area": 173361}, {"id": 7698309, "category_id": 77, "iscrowd": 0, "bbox": [192, 120, 16, 6], "area": 57}, {"id": 1973789, "category_id": 149, "iscrowd": 0, "bbox": [0, 345, 428, 295], "area": 6722}], "file_name": "000000336628.png", "image_id": 336628}, {"segments_info": [{"id": 858687, "category_id": 1, "iscrowd": 0, "bbox": [302, 267, 4, 9], "area": 32}, {"id": 3225918, "category_id": 1, "iscrowd": 0, "bbox": [43, 287, 8, 22], "area": 131}, {"id": 395538, "category_id": 1, "iscrowd": 0, "bbox": [6, 284, 7, 23], "area": 108}, {"id": 1055794, "category_id": 1, "iscrowd": 0, "bbox": [70, 297, 8, 10], "area": 57}, {"id": 1321325, "category_id": 1, "iscrowd": 0, "bbox": [170, 250, 4, 12], "area": 30}, {"id": 2371635, "category_id": 1, "iscrowd": 0, "bbox": [52, 295, 7, 22], "area": 106}, {"id": 528669, "category_id": 1, "iscrowd": 0, "bbox": [18, 286, 7, 24], "area": 92}, {"id": 1257070, "category_id": 1, "iscrowd": 0, "bbox": [272, 265, 4, 11], "area": 27}, {"id": 1387609, "category_id": 1, "iscrowd": 0, "bbox": [267, 262, 4, 7], "area": 19}, {"id": 1385005, "category_id": 1, "iscrowd": 0, "bbox": [73, 303, 6, 22], "area": 96}, {"id": 1189460, "category_id": 1, "iscrowd": 0, "bbox": [293, 268, 3, 8], "area": 21}, {"id": 2506057, "category_id": 1, "iscrowd": 0, "bbox": [63, 294, 7, 24], "area": 74}, {"id": 396831, "category_id": 1, "iscrowd": 0, "bbox": [55, 289, 6, 5], "area": 23}, {"id": 1057364, "category_id": 1, "iscrowd": 1, "bbox": [114, 248, 453, 31], "area": 894}, {"id": 1449533, "category_id": 3, "iscrowd": 0, "bbox": [133, 260, 41, 15], "area": 413}, {"id": 3498659, "category_id": 3, "iscrowd": 0, "bbox": [72, 257, 25, 13], "area": 194}, {"id": 987162, "category_id": 3, "iscrowd": 0, "bbox": [388, 255, 20, 14], "area": 203}, {"id": 1842995, "category_id": 3, "iscrowd": 0, "bbox": [95, 257, 28, 22], "area": 380}, {"id": 1910876, "category_id": 3, "iscrowd": 0, "bbox": [231, 266, 16, 8], "area": 74}, {"id": 1450297, "category_id": 3, "iscrowd": 0, "bbox": [283, 262, 29, 9], "area": 133}, {"id": 1782614, "category_id": 6, "iscrowd": 0, "bbox": [564, 273, 68, 55], "area": 2118}, {"id": 1849948, "category_id": 6, "iscrowd": 0, "bbox": [459, 290, 117, 80], "area": 6744}, {"id": 921886, "category_id": 6, "iscrowd": 0, "bbox": [406, 257, 73, 24], "area": 1587}, {"id": 1582660, "category_id": 166, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 182301}, {"id": 11944201, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 175], "area": 77676}], "file_name": "000000336658.png", "image_id": 336658}, {"segments_info": [{"id": 6051932, "category_id": 1, "iscrowd": 0, "bbox": [132, 2, 494, 420], "area": 65138}, {"id": 7361333, "category_id": 33, "iscrowd": 0, "bbox": [432, 273, 208, 149], "area": 27531}, {"id": 5330774, "category_id": 125, "iscrowd": 0, "bbox": [0, 19, 640, 267], "area": 30481}, {"id": 4014656, "category_id": 147, "iscrowd": 0, "bbox": [0, 0, 640, 292], "area": 31792}, {"id": 4739663, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 110729}, {"id": 8225923, "category_id": 194, "iscrowd": 0, "bbox": [494, 0, 146, 18], "area": 2070}], "file_name": "000000337055.png", "image_id": 337055}, {"segments_info": [{"id": 263695, "category_id": 47, "iscrowd": 0, "bbox": [0, 0, 68, 200], "area": 10788}, {"id": 197900, "category_id": 47, "iscrowd": 0, "bbox": [324, 2, 115, 73], "area": 6770}, {"id": 724238, "category_id": 49, "iscrowd": 0, "bbox": [471, 114, 111, 30], "area": 1984}, {"id": 592397, "category_id": 49, "iscrowd": 0, "bbox": [564, 159, 76, 32], "area": 1656}, {"id": 394758, "category_id": 49, "iscrowd": 0, "bbox": [60, 25, 149, 54], "area": 1767}, {"id": 2643615, "category_id": 59, "iscrowd": 0, "bbox": [99, 93, 491, 315], "area": 107443}, {"id": 5526862, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 107766}, {"id": 8360106, "category_id": 196, "iscrowd": 0, "bbox": [119, 0, 314, 396], "area": 2244}], "file_name": "000000337498.png", "image_id": 337498}, {"segments_info": [{"id": 4543574, "category_id": 16, "iscrowd": 0, "bbox": [157, 57, 261, 423], "area": 60512}, {"id": 5606254, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 246341}], "file_name": "000000337987.png", "image_id": 337987}, {"segments_info": [{"id": 5918311, "category_id": 11, "iscrowd": 0, "bbox": [187, 26, 266, 587], "area": 82441}, {"id": 2968940, "category_id": 11, "iscrowd": 0, "bbox": [26, 344, 66, 118], "area": 4739}, {"id": 3949921, "category_id": 11, "iscrowd": 0, "bbox": [12, 185, 89, 133], "area": 6507}, {"id": 4943500, "category_id": 11, "iscrowd": 0, "bbox": [525, 40, 85, 139], "area": 5313}, {"id": 5526349, "category_id": 11, "iscrowd": 0, "bbox": [36, 494, 53, 98], "area": 3315}, {"id": 3508092, "category_id": 11, "iscrowd": 0, "bbox": [535, 188, 59, 130], "area": 3784}, {"id": 3510975, "category_id": 11, "iscrowd": 0, "bbox": [544, 341, 61, 116], "area": 3699}, {"id": 6262644, "category_id": 11, "iscrowd": 0, "bbox": [32, 40, 70, 124], "area": 5432}, {"id": 4538507, "category_id": 11, "iscrowd": 0, "bbox": [537, 493, 69, 104], "area": 3554}, {"id": 8677741, "category_id": 149, "iscrowd": 0, "bbox": [117, 169, 44, 63], "area": 1323}, {"id": 3166785, "category_id": 184, "iscrowd": 0, "bbox": [586, 496, 36, 72], "area": 1808}, {"id": 6850429, "category_id": 191, "iscrowd": 0, "bbox": [75, 359, 58, 57], "area": 1712}, {"id": 5071709, "category_id": 193, "iscrowd": 0, "bbox": [0, 257, 635, 364], "area": 24008}, {"id": 4473671, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 635, 625], "area": 79652}, {"id": 8485002, "category_id": 197, "iscrowd": 0, "bbox": [12, 24, 100, 24], "area": 1395}], "file_name": "000000338191.png", "image_id": 338191}, {"segments_info": [{"id": 4607829, "category_id": 1, "iscrowd": 0, "bbox": [168, 149, 11, 25], "area": 165}, {"id": 7498088, "category_id": 1, "iscrowd": 0, "bbox": [32, 145, 12, 39], "area": 204}, {"id": 4737614, "category_id": 1, "iscrowd": 0, "bbox": [124, 138, 27, 32], "area": 521}, {"id": 4013634, "category_id": 1, "iscrowd": 0, "bbox": [155, 139, 17, 33], "area": 348}, {"id": 4407909, "category_id": 1, "iscrowd": 0, "bbox": [67, 150, 7, 28], "area": 146}, {"id": 4736846, "category_id": 1, "iscrowd": 0, "bbox": [148, 152, 8, 18], "area": 103}, {"id": 3817544, "category_id": 1, "iscrowd": 0, "bbox": [606, 163, 15, 12], "area": 139}, {"id": 5197395, "category_id": 1, "iscrowd": 0, "bbox": [73, 150, 6, 36], "area": 137}, {"id": 5790302, "category_id": 1, "iscrowd": 0, "bbox": [164, 9, 96, 159], "area": 7425}, {"id": 7039607, "category_id": 1, "iscrowd": 0, "bbox": [62, 153, 7, 17], "area": 68}, {"id": 8027527, "category_id": 1, "iscrowd": 0, "bbox": [103, 140, 15, 28], "area": 289}, {"id": 4409685, "category_id": 1, "iscrowd": 0, "bbox": [83, 145, 19, 25], "area": 321}, {"id": 9604498, "category_id": 1, "iscrowd": 0, "bbox": [117, 151, 12, 17], "area": 146}, {"id": 6447720, "category_id": 1, "iscrowd": 1, "bbox": [3, 150, 426, 45], "area": 860}, {"id": 6184802, "category_id": 4, "iscrowd": 0, "bbox": [0, 159, 35, 39], "area": 948}, {"id": 4803917, "category_id": 4, "iscrowd": 0, "bbox": [354, 151, 277, 180], "area": 28797}, {"id": 4541001, "category_id": 4, "iscrowd": 0, "bbox": [23, 89, 506, 454], "area": 131552}, {"id": 6184544, "category_id": 4, "iscrowd": 0, "bbox": [548, 143, 92, 150], "area": 2651}, {"id": 6446943, "category_id": 62, "iscrowd": 0, "bbox": [45, 165, 30, 31], "area": 643}, {"id": 5396825, "category_id": 128, "iscrowd": 0, "bbox": [0, 124, 19, 46], "area": 392}, {"id": 11315112, "category_id": 166, "iscrowd": 0, "bbox": [146, 129, 46, 41], "area": 468}, {"id": 4214859, "category_id": 184, "iscrowd": 0, "bbox": [35, 43, 605, 149], "area": 22249}, {"id": 14472659, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 172], "area": 59066}, {"id": 3627351, "category_id": 193, "iscrowd": 0, "bbox": [0, 170, 640, 396], "area": 102054}], "file_name": "000000338219.png", "image_id": 338219}, {"segments_info": [{"id": 4080986, "category_id": 1, "iscrowd": 0, "bbox": [74, 266, 14, 62], "area": 497}, {"id": 7898247, "category_id": 1, "iscrowd": 0, "bbox": [95, 291, 67, 134], "area": 3794}, {"id": 6449272, "category_id": 1, "iscrowd": 0, "bbox": [100, 286, 14, 24], "area": 164}, {"id": 3158331, "category_id": 1, "iscrowd": 0, "bbox": [190, 0, 235, 440], "area": 34263}, {"id": 4408391, "category_id": 1, "iscrowd": 0, "bbox": [150, 252, 62, 136], "area": 4630}, {"id": 3685457, "category_id": 1, "iscrowd": 0, "bbox": [37, 311, 20, 29], "area": 420}, {"id": 8817812, "category_id": 1, "iscrowd": 0, "bbox": [1, 299, 100, 189], "area": 7571}, {"id": 921103, "category_id": 1, "iscrowd": 0, "bbox": [267, 217, 144, 249], "area": 11086}, {"id": 4211269, "category_id": 1, "iscrowd": 0, "bbox": [201, 256, 49, 104], "area": 2708}, {"id": 3419443, "category_id": 1, "iscrowd": 0, "bbox": [230, 253, 50, 107], "area": 2416}, {"id": 5066842, "category_id": 1, "iscrowd": 0, "bbox": [50, 306, 73, 168], "area": 3523}, {"id": 1250323, "category_id": 1, "iscrowd": 0, "bbox": [250, 238, 69, 127], "area": 3602}, {"id": 2236454, "category_id": 1, "iscrowd": 0, "bbox": [305, 189, 79, 84], "area": 3186}, {"id": 4804953, "category_id": 1, "iscrowd": 1, "bbox": [0, 89, 388, 503], "area": 20760}, {"id": 8951964, "category_id": 20, "iscrowd": 0, "bbox": [89, 387, 118, 102], "area": 3904}, {"id": 3290159, "category_id": 20, "iscrowd": 0, "bbox": [242, 357, 112, 129], "area": 3398}, {"id": 4869447, "category_id": 20, "iscrowd": 0, "bbox": [194, 355, 144, 139], "area": 5315}, {"id": 5200219, "category_id": 20, "iscrowd": 0, "bbox": [0, 483, 147, 156], "area": 9704}, {"id": 5660768, "category_id": 20, "iscrowd": 0, "bbox": [192, 422, 143, 176], "area": 11713}, {"id": 2039579, "category_id": 20, "iscrowd": 0, "bbox": [271, 356, 94, 97], "area": 2544}, {"id": 7174265, "category_id": 20, "iscrowd": 0, "bbox": [65, 473, 170, 167], "area": 15288}, {"id": 8754842, "category_id": 20, "iscrowd": 0, "bbox": [169, 413, 74, 104], "area": 3821}, {"id": 2170906, "category_id": 20, "iscrowd": 0, "bbox": [199, 526, 148, 113], "area": 7474}, {"id": 3618621, "category_id": 31, "iscrowd": 0, "bbox": [75, 393, 47, 34], "area": 1073}, {"id": 4213599, "category_id": 31, "iscrowd": 0, "bbox": [34, 431, 50, 66], "area": 1780}, {"id": 2500128, "category_id": 77, "iscrowd": 0, "bbox": [230, 156, 25, 30], "area": 425}, {"id": 10651235, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 311, 213], "area": 33646}, {"id": 3352859, "category_id": 190, "iscrowd": 0, "bbox": [294, 353, 131, 287], "area": 18588}, {"id": 5330269, "category_id": 197, "iscrowd": 0, "bbox": [0, 80, 336, 254], "area": 38216}], "file_name": "000000338304.png", "image_id": 338304}, {"segments_info": [{"id": 4868175, "category_id": 5, "iscrowd": 0, "bbox": [118, 140, 334, 160], "area": 15074}, {"id": 14011852, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 258551}], "file_name": "000000338325.png", "image_id": 338325}, {"segments_info": [{"id": 6841985, "category_id": 6, "iscrowd": 0, "bbox": [0, 1, 223, 185], "area": 16404}, {"id": 11908800, "category_id": 8, "iscrowd": 0, "bbox": [565, 93, 75, 68], "area": 3429}, {"id": 10527399, "category_id": 8, "iscrowd": 0, "bbox": [550, 83, 90, 34], "area": 1248}, {"id": 2968640, "category_id": 8, "iscrowd": 0, "bbox": [55, 12, 542, 313], "area": 121385}, {"id": 7376520, "category_id": 184, "iscrowd": 0, "bbox": [32, 0, 582, 97], "area": 9255}, {"id": 15391183, "category_id": 187, "iscrowd": 0, "bbox": [345, 0, 295, 83], "area": 11837}, {"id": 3497072, "category_id": 193, "iscrowd": 0, "bbox": [0, 134, 640, 232], "area": 69758}], "file_name": "000000338428.png", "image_id": 338428}, {"segments_info": [{"id": 8617056, "category_id": 1, "iscrowd": 0, "bbox": [318, 289, 3, 18], "area": 41}, {"id": 6317672, "category_id": 1, "iscrowd": 0, "bbox": [326, 289, 7, 12], "area": 59}, {"id": 5724511, "category_id": 25, "iscrowd": 0, "bbox": [152, 124, 167, 306], "area": 16142}, {"id": 9671062, "category_id": 154, "iscrowd": 0, "bbox": [0, 318, 375, 182], "area": 59086}, {"id": 4738876, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 375, 338], "area": 68438}, {"id": 16512221, "category_id": 187, "iscrowd": 0, "bbox": [95, 0, 280, 212], "area": 36824}, {"id": 5202779, "category_id": 193, "iscrowd": 0, "bbox": [0, 303, 375, 37], "area": 4982}, {"id": 4143925, "category_id": 198, "iscrowd": 0, "bbox": [0, 306, 19, 16], "area": 240}], "file_name": "000000338532.png", "image_id": 338532}, {"segments_info": [{"id": 4865073, "category_id": 3, "iscrowd": 0, "bbox": [405, 152, 61, 31], "area": 1415}, {"id": 3154974, "category_id": 3, "iscrowd": 0, "bbox": [0, 167, 59, 39], "area": 1811}, {"id": 7233364, "category_id": 3, "iscrowd": 0, "bbox": [56, 165, 82, 36], "area": 1938}, {"id": 3353648, "category_id": 3, "iscrowd": 0, "bbox": [102, 160, 76, 37], "area": 1257}, {"id": 7630693, "category_id": 3, "iscrowd": 0, "bbox": [37, 165, 47, 19], "area": 459}, {"id": 2059674, "category_id": 10, "iscrowd": 0, "bbox": [176, 58, 29, 13], "area": 249}, {"id": 2446200, "category_id": 10, "iscrowd": 0, "bbox": [156, 103, 15, 9], "area": 116}, {"id": 3831965, "category_id": 10, "iscrowd": 0, "bbox": [109, 60, 27, 10], "area": 219}, {"id": 2643323, "category_id": 10, "iscrowd": 0, "bbox": [206, 101, 15, 8], "area": 94}, {"id": 1119252, "category_id": 10, "iscrowd": 0, "bbox": [197, 101, 13, 22], "area": 181}, {"id": 2841211, "category_id": 10, "iscrowd": 0, "bbox": [263, 121, 12, 20], "area": 178}, {"id": 5197115, "category_id": 11, "iscrowd": 0, "bbox": [133, 166, 186, 447], "area": 48755}, {"id": 11381420, "category_id": 149, "iscrowd": 0, "bbox": [0, 161, 480, 291], "area": 58819}, {"id": 2437929, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 365, 187], "area": 45369}, {"id": 9410464, "category_id": 191, "iscrowd": 0, "bbox": [0, 237, 480, 403], "area": 108814}, {"id": 3948608, "category_id": 197, "iscrowd": 0, "bbox": [19, 0, 461, 203], "area": 36925}], "file_name": "000000338560.png", "image_id": 338560}, {"segments_info": [{"id": 5594475, "category_id": 1, "iscrowd": 0, "bbox": [118, 81, 13, 39], "area": 305}, {"id": 3945010, "category_id": 1, "iscrowd": 0, "bbox": [224, 29, 76, 197], "area": 7441}, {"id": 8354957, "category_id": 1, "iscrowd": 0, "bbox": [100, 85, 15, 33], "area": 315}, {"id": 13487825, "category_id": 3, "iscrowd": 0, "bbox": [29, 84, 22, 23], "area": 281}, {"id": 12698827, "category_id": 3, "iscrowd": 0, "bbox": [7, 87, 16, 13], "area": 157}, {"id": 12303562, "category_id": 3, "iscrowd": 0, "bbox": [24, 90, 6, 12], "area": 44}, {"id": 9555933, "category_id": 10, "iscrowd": 0, "bbox": [82, 24, 11, 24], "area": 209}, {"id": 3815484, "category_id": 18, "iscrowd": 0, "bbox": [163, 154, 42, 80], "area": 1741}, {"id": 13487580, "category_id": 55, "iscrowd": 0, "bbox": [291, 168, 9, 12], "area": 80}, {"id": 2829622, "category_id": 62, "iscrowd": 0, "bbox": [495, 147, 78, 140], "area": 3437}, {"id": 4539726, "category_id": 62, "iscrowd": 0, "bbox": [395, 140, 76, 105], "area": 1759}, {"id": 7302780, "category_id": 62, "iscrowd": 0, "bbox": [306, 127, 44, 44], "area": 314}, {"id": 2698038, "category_id": 62, "iscrowd": 0, "bbox": [526, 136, 112, 171], "area": 10853}, {"id": 4934226, "category_id": 62, "iscrowd": 0, "bbox": [373, 134, 74, 103], "area": 2130}, {"id": 3355969, "category_id": 62, "iscrowd": 0, "bbox": [422, 140, 80, 125], "area": 3220}, {"id": 3552582, "category_id": 62, "iscrowd": 0, "bbox": [299, 120, 24, 47], "area": 642}, {"id": 2829107, "category_id": 62, "iscrowd": 0, "bbox": [462, 145, 73, 121], "area": 3786}, {"id": 4079183, "category_id": 62, "iscrowd": 0, "bbox": [305, 130, 55, 79], "area": 1832}, {"id": 13419976, "category_id": 149, "iscrowd": 0, "bbox": [0, 86, 225, 77], "area": 4216}, {"id": 7631993, "category_id": 184, "iscrowd": 0, "bbox": [72, 0, 42, 244], "area": 3272}, {"id": 15856113, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 166, 76], "area": 4464}, {"id": 10789027, "category_id": 191, "iscrowd": 0, "bbox": [0, 103, 640, 257], "area": 93972}, {"id": 2770233, "category_id": 193, "iscrowd": 0, "bbox": [54, 229, 61, 15], "area": 455}, {"id": 6779262, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 229], "area": 69115}, {"id": 4868430, "category_id": 199, "iscrowd": 0, "bbox": [223, 121, 417, 184], "area": 6572}], "file_name": "000000338624.png", "image_id": 338624}, {"segments_info": [{"id": 7369592, "category_id": 1, "iscrowd": 0, "bbox": [40, 234, 10, 16], "area": 101}, {"id": 8224676, "category_id": 1, "iscrowd": 0, "bbox": [133, 226, 13, 18], "area": 115}, {"id": 2565163, "category_id": 1, "iscrowd": 0, "bbox": [633, 193, 7, 39], "area": 170}, {"id": 4014154, "category_id": 1, "iscrowd": 0, "bbox": [600, 192, 28, 65], "area": 835}, {"id": 3552827, "category_id": 1, "iscrowd": 0, "bbox": [616, 200, 15, 52], "area": 193}, {"id": 3683125, "category_id": 1, "iscrowd": 0, "bbox": [403, 201, 18, 23], "area": 274}, {"id": 5789539, "category_id": 1, "iscrowd": 0, "bbox": [113, 227, 15, 31], "area": 203}, {"id": 3355714, "category_id": 1, "iscrowd": 0, "bbox": [4, 234, 17, 38], "area": 328}, {"id": 6118496, "category_id": 2, "iscrowd": 0, "bbox": [116, 251, 11, 14], "area": 71}, {"id": 10592938, "category_id": 3, "iscrowd": 0, "bbox": [531, 204, 47, 39], "area": 1185}, {"id": 9210509, "category_id": 3, "iscrowd": 0, "bbox": [10, 236, 116, 41], "area": 2716}, {"id": 9211539, "category_id": 3, "iscrowd": 0, "bbox": [525, 210, 7, 7], "area": 45}, {"id": 7567491, "category_id": 6, "iscrowd": 0, "bbox": [136, 81, 350, 238], "area": 68295}, {"id": 5925247, "category_id": 31, "iscrowd": 0, "bbox": [4, 249, 6, 7], "area": 32}, {"id": 9015194, "category_id": 149, "iscrowd": 0, "bbox": [0, 210, 570, 270], "area": 57929}, {"id": 5200223, "category_id": 184, "iscrowd": 0, "bbox": [446, 121, 194, 95], "area": 5120}, {"id": 16316664, "category_id": 187, "iscrowd": 0, "bbox": [448, 0, 192, 140], "area": 11124}, {"id": 9344416, "category_id": 191, "iscrowd": 0, "bbox": [161, 226, 479, 254], "area": 68806}, {"id": 6317689, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 287], "area": 88075}], "file_name": "000000338625.png", "image_id": 338625}, {"segments_info": [{"id": 8092539, "category_id": 3, "iscrowd": 0, "bbox": [66, 13, 434, 176], "area": 53872}, {"id": 9013641, "category_id": 3, "iscrowd": 0, "bbox": [35, 38, 151, 97], "area": 4115}, {"id": 8355453, "category_id": 149, "iscrowd": 0, "bbox": [0, 106, 500, 339], "area": 115601}, {"id": 5263440, "category_id": 171, "iscrowd": 0, "bbox": [6, 0, 494, 107], "area": 4909}, {"id": 2829099, "category_id": 181, "iscrowd": 0, "bbox": [10, 0, 53, 57], "area": 2211}, {"id": 12170671, "category_id": 191, "iscrowd": 0, "bbox": [0, 95, 436, 350], "area": 10193}, {"id": 4276545, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 486, 96], "area": 12284}], "file_name": "000000338718.png", "image_id": 338718}, {"segments_info": [{"id": 6256772, "category_id": 18, "iscrowd": 0, "bbox": [272, 141, 368, 228], "area": 35656}, {"id": 7767685, "category_id": 63, "iscrowd": 0, "bbox": [76, 2, 563, 472], "area": 173245}, {"id": 2040093, "category_id": 75, "iscrowd": 0, "bbox": [0, 430, 19, 19], "area": 227}, {"id": 1053716, "category_id": 75, "iscrowd": 0, "bbox": [1, 427, 86, 50], "area": 2123}, {"id": 1321544, "category_id": 118, "iscrowd": 0, "bbox": [0, 337, 217, 143], "area": 7265}, {"id": 2245992, "category_id": 177, "iscrowd": 0, "bbox": [184, 0, 456, 143], "area": 25173}, {"id": 3294021, "category_id": 189, "iscrowd": 0, "bbox": [0, 352, 147, 128], "area": 7031}, {"id": 11318967, "category_id": 195, "iscrowd": 0, "bbox": [126, 430, 25, 21], "area": 320}, {"id": 10529450, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 172, 203], "area": 28915}], "file_name": "000000338901.png", "image_id": 338901}, {"segments_info": [{"id": 6580102, "category_id": 1, "iscrowd": 0, "bbox": [146, 161, 35, 65], "area": 811}, {"id": 2172467, "category_id": 1, "iscrowd": 0, "bbox": [366, 223, 114, 137], "area": 9955}, {"id": 6317159, "category_id": 1, "iscrowd": 0, "bbox": [309, 167, 39, 26], "area": 525}, {"id": 4077890, "category_id": 1, "iscrowd": 0, "bbox": [84, 162, 96, 126], "area": 3783}, {"id": 2568258, "category_id": 1, "iscrowd": 0, "bbox": [266, 155, 31, 67], "area": 1304}, {"id": 1842983, "category_id": 1, "iscrowd": 0, "bbox": [71, 203, 143, 156], "area": 10791}, {"id": 4277330, "category_id": 1, "iscrowd": 0, "bbox": [115, 144, 55, 57], "area": 756}, {"id": 4145747, "category_id": 1, "iscrowd": 0, "bbox": [331, 210, 80, 89], "area": 2761}, {"id": 2371136, "category_id": 1, "iscrowd": 0, "bbox": [186, 146, 54, 53], "area": 1253}, {"id": 5855863, "category_id": 1, "iscrowd": 0, "bbox": [285, 171, 52, 67], "area": 2243}, {"id": 7301990, "category_id": 1, "iscrowd": 0, "bbox": [251, 234, 157, 126], "area": 10125}, {"id": 9337971, "category_id": 4, "iscrowd": 0, "bbox": [444, 193, 36, 71], "area": 1506}, {"id": 6574667, "category_id": 4, "iscrowd": 0, "bbox": [397, 186, 49, 42], "area": 1300}, {"id": 13817301, "category_id": 28, "iscrowd": 0, "bbox": [92, 54, 387, 98], "area": 7721}, {"id": 11979213, "category_id": 28, "iscrowd": 0, "bbox": [0, 1, 477, 109], "area": 42324}, {"id": 7505023, "category_id": 44, "iscrowd": 0, "bbox": [222, 191, 5, 11], "area": 33}, {"id": 9477023, "category_id": 44, "iscrowd": 0, "bbox": [239, 243, 13, 58], "area": 193}, {"id": 7503002, "category_id": 44, "iscrowd": 0, "bbox": [227, 179, 10, 19], "area": 90}, {"id": 8292502, "category_id": 44, "iscrowd": 0, "bbox": [246, 279, 16, 48], "area": 487}, {"id": 7371895, "category_id": 44, "iscrowd": 0, "bbox": [278, 263, 14, 44], "area": 346}, {"id": 7370115, "category_id": 46, "iscrowd": 0, "bbox": [212, 211, 12, 26], "area": 246}, {"id": 7242385, "category_id": 46, "iscrowd": 0, "bbox": [266, 298, 21, 35], "area": 465}, {"id": 10593190, "category_id": 46, "iscrowd": 0, "bbox": [231, 258, 23, 47], "area": 622}, {"id": 10856871, "category_id": 47, "iscrowd": 0, "bbox": [223, 229, 10, 17], "area": 140}, {"id": 7233631, "category_id": 49, "iscrowd": 0, "bbox": [295, 259, 15, 9], "area": 50}, {"id": 8028062, "category_id": 49, "iscrowd": 0, "bbox": [176, 302, 46, 6], "area": 167}, {"id": 9017255, "category_id": 51, "iscrowd": 0, "bbox": [208, 322, 18, 12], "area": 162}, {"id": 6523048, "category_id": 54, "iscrowd": 0, "bbox": [178, 279, 26, 13], "area": 170}, {"id": 2633269, "category_id": 62, "iscrowd": 0, "bbox": [20, 287, 131, 70], "area": 2756}, {"id": 5399152, "category_id": 62, "iscrowd": 0, "bbox": [248, 146, 31, 42], "area": 660}, {"id": 5004389, "category_id": 62, "iscrowd": 0, "bbox": [77, 195, 27, 52], "area": 815}, {"id": 4018789, "category_id": 62, "iscrowd": 0, "bbox": [216, 142, 23, 33], "area": 385}, {"id": 5395803, "category_id": 62, "iscrowd": 0, "bbox": [89, 180, 27, 40], "area": 533}, {"id": 4411740, "category_id": 62, "iscrowd": 0, "bbox": [53, 216, 39, 79], "area": 1837}, {"id": 6848659, "category_id": 62, "iscrowd": 0, "bbox": [239, 139, 18, 7], "area": 104}, {"id": 8686977, "category_id": 64, "iscrowd": 0, "bbox": [353, 173, 59, 50], "area": 1565}, {"id": 12565944, "category_id": 67, "iscrowd": 0, "bbox": [227, 231, 32, 33], "area": 457}, {"id": 8952226, "category_id": 67, "iscrowd": 0, "bbox": [169, 188, 144, 172], "area": 12745}, {"id": 4341829, "category_id": 112, "iscrowd": 0, "bbox": [102, 93, 31, 72], "area": 1808}, {"id": 4604224, "category_id": 175, "iscrowd": 0, "bbox": [0, 141, 207, 108], "area": 3806}, {"id": 3815742, "category_id": 177, "iscrowd": 0, "bbox": [0, 80, 147, 132], "area": 5170}, {"id": 3026479, "category_id": 181, "iscrowd": 0, "bbox": [0, 75, 105, 85], "area": 5217}, {"id": 4347455, "category_id": 184, "iscrowd": 0, "bbox": [141, 100, 339, 69], "area": 9185}, {"id": 7437185, "category_id": 189, "iscrowd": 0, "bbox": [153, 127, 107, 39], "area": 386}, {"id": 12038055, "category_id": 190, "iscrowd": 0, "bbox": [294, 155, 186, 126], "area": 2776}, {"id": 7892328, "category_id": 191, "iscrowd": 0, "bbox": [0, 152, 271, 208], "area": 5842}, {"id": 8103304, "category_id": 193, "iscrowd": 0, "bbox": [280, 142, 200, 44], "area": 4261}, {"id": 13682113, "category_id": 199, "iscrowd": 0, "bbox": [62, 81, 15, 103], "area": 862}], "file_name": "000000338905.png", "image_id": 338905}, {"segments_info": [{"id": 11579824, "category_id": 3, "iscrowd": 0, "bbox": [284, 507, 119, 75], "area": 1547}, {"id": 2828325, "category_id": 3, "iscrowd": 0, "bbox": [369, 550, 34, 89], "area": 2386}, {"id": 6446425, "category_id": 3, "iscrowd": 0, "bbox": [295, 525, 108, 102], "area": 5031}, {"id": 4868158, "category_id": 7, "iscrowd": 0, "bbox": [12, 394, 181, 181], "area": 24506}, {"id": 9736847, "category_id": 130, "iscrowd": 0, "bbox": [244, 32, 86, 56], "area": 1241}, {"id": 2964558, "category_id": 147, "iscrowd": 0, "bbox": [0, 534, 183, 106], "area": 6861}, {"id": 7570067, "category_id": 149, "iscrowd": 0, "bbox": [351, 623, 52, 17], "area": 389}, {"id": 2967623, "category_id": 184, "iscrowd": 0, "bbox": [0, 426, 210, 100], "area": 1526}, {"id": 4802882, "category_id": 185, "iscrowd": 0, "bbox": [206, 473, 103, 89], "area": 5398}, {"id": 7361596, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 403, 504], "area": 154525}, {"id": 7702683, "category_id": 191, "iscrowd": 0, "bbox": [0, 512, 369, 128], "area": 19625}, {"id": 2637379, "category_id": 193, "iscrowd": 0, "bbox": [0, 515, 14, 30], "area": 374}, {"id": 4212066, "category_id": 197, "iscrowd": 0, "bbox": [253, 223, 150, 308], "area": 28305}], "file_name": "000000338986.png", "image_id": 338986}, {"segments_info": [{"id": 1977748, "category_id": 53, "iscrowd": 0, "bbox": [203, 35, 201, 104], "area": 15767}, {"id": 2714779, "category_id": 54, "iscrowd": 0, "bbox": [35, 88, 372, 297], "area": 91356}, {"id": 4628167, "category_id": 67, "iscrowd": 0, "bbox": [22, 363, 485, 142], "area": 46239}], "file_name": "000000339442.png", "image_id": 339442}, {"segments_info": [{"id": 4547732, "category_id": 1, "iscrowd": 0, "bbox": [17, 185, 340, 450], "area": 93148}, {"id": 3418915, "category_id": 28, "iscrowd": 0, "bbox": [71, 39, 324, 320], "area": 61315}, {"id": 11243115, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 484, 640], "area": 153886}], "file_name": "000000339823.png", "image_id": 339823}, {"segments_info": [{"id": 2895930, "category_id": 8, "iscrowd": 0, "bbox": [125, 358, 71, 66], "area": 3604}, {"id": 2262968, "category_id": 10, "iscrowd": 0, "bbox": [542, 307, 13, 34], "area": 317}, {"id": 12492147, "category_id": 10, "iscrowd": 0, "bbox": [608, 346, 9, 16], "area": 119}, {"id": 4549261, "category_id": 10, "iscrowd": 0, "bbox": [373, 257, 31, 47], "area": 1145}, {"id": 5011368, "category_id": 10, "iscrowd": 0, "bbox": [450, 396, 16, 20], "area": 277}, {"id": 2907785, "category_id": 10, "iscrowd": 0, "bbox": [419, 265, 27, 36], "area": 770}, {"id": 1975339, "category_id": 128, "iscrowd": 0, "bbox": [34, 259, 347, 127], "area": 15623}, {"id": 8690353, "category_id": 130, "iscrowd": 0, "bbox": [351, 130, 289, 281], "area": 3494}, {"id": 5531010, "category_id": 149, "iscrowd": 0, "bbox": [494, 348, 146, 76], "area": 3764}, {"id": 1449251, "category_id": 151, "iscrowd": 0, "bbox": [0, 222, 380, 61], "area": 12911}, {"id": 1383717, "category_id": 181, "iscrowd": 0, "bbox": [176, 289, 48, 61], "area": 1543}, {"id": 1318181, "category_id": 184, "iscrowd": 0, "bbox": [0, 252, 547, 172], "area": 44160}, {"id": 2040361, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 337], "area": 155004}, {"id": 2571086, "category_id": 191, "iscrowd": 0, "bbox": [62, 389, 536, 35], "area": 3367}, {"id": 2242116, "category_id": 193, "iscrowd": 0, "bbox": [494, 387, 27, 20], "area": 408}, {"id": 5130070, "category_id": 197, "iscrowd": 0, "bbox": [295, 98, 345, 298], "area": 9195}, {"id": 1517111, "category_id": 199, "iscrowd": 0, "bbox": [301, 368, 139, 56], "area": 5114}], "file_name": "000000339870.png", "image_id": 339870}, {"segments_info": [{"id": 5335182, "category_id": 59, "iscrowd": 0, "bbox": [0, 2, 640, 473], "area": 285970}, {"id": 5525561, "category_id": 67, "iscrowd": 0, "bbox": [1, 1, 638, 119], "area": 13083}, {"id": 527374, "category_id": 189, "iscrowd": 0, "bbox": [466, 0, 174, 480], "area": 2200}, {"id": 4805224, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 626, 480], "area": 5089}], "file_name": "000000340015.png", "image_id": 340015}, {"segments_info": [{"id": 6452096, "category_id": 15, "iscrowd": 0, "bbox": [176, 214, 113, 123], "area": 6796}, {"id": 4358295, "category_id": 53, "iscrowd": 0, "bbox": [199, 192, 10, 9], "area": 60}, {"id": 2450023, "category_id": 53, "iscrowd": 0, "bbox": [184, 193, 9, 8], "area": 54}, {"id": 2781312, "category_id": 53, "iscrowd": 0, "bbox": [191, 195, 8, 6], "area": 42}, {"id": 16382715, "category_id": 62, "iscrowd": 0, "bbox": [133, 191, 17, 13], "area": 141}, {"id": 12765641, "category_id": 62, "iscrowd": 0, "bbox": [96, 203, 23, 19], "area": 262}, {"id": 8490906, "category_id": 62, "iscrowd": 0, "bbox": [43, 218, 37, 121], "area": 1113}, {"id": 3358547, "category_id": 62, "iscrowd": 0, "bbox": [558, 238, 82, 88], "area": 5318}, {"id": 1318274, "category_id": 62, "iscrowd": 0, "bbox": [61, 241, 109, 153], "area": 10170}, {"id": 3157809, "category_id": 62, "iscrowd": 0, "bbox": [210, 174, 52, 65], "area": 1092}, {"id": 723226, "category_id": 63, "iscrowd": 0, "bbox": [428, 177, 183, 68], "area": 9465}, {"id": 2109234, "category_id": 64, "iscrowd": 0, "bbox": [136, 116, 63, 83], "area": 3390}, {"id": 5663098, "category_id": 67, "iscrowd": 0, "bbox": [47, 189, 202, 89], "area": 6417}, {"id": 4082018, "category_id": 84, "iscrowd": 0, "bbox": [56, 125, 13, 29], "area": 334}, {"id": 6316654, "category_id": 84, "iscrowd": 0, "bbox": [40, 125, 16, 35], "area": 401}, {"id": 462366, "category_id": 84, "iscrowd": 0, "bbox": [116, 98, 6, 16], "area": 92}, {"id": 1842976, "category_id": 84, "iscrowd": 0, "bbox": [94, 158, 7, 22], "area": 105}, {"id": 3094598, "category_id": 84, "iscrowd": 0, "bbox": [45, 62, 3, 19], "area": 49}, {"id": 3750980, "category_id": 84, "iscrowd": 0, "bbox": [51, 89, 5, 21], "area": 95}, {"id": 6579052, "category_id": 84, "iscrowd": 0, "bbox": [44, 159, 3, 17], "area": 43}, {"id": 7703973, "category_id": 84, "iscrowd": 0, "bbox": [35, 160, 2, 11], "area": 21}, {"id": 3295065, "category_id": 84, "iscrowd": 0, "bbox": [47, 168, 29, 10], "area": 199}, {"id": 3883336, "category_id": 84, "iscrowd": 0, "bbox": [108, 74, 12, 18], "area": 179}, {"id": 1646930, "category_id": 84, "iscrowd": 0, "bbox": [81, 94, 6, 19], "area": 42}, {"id": 1974563, "category_id": 84, "iscrowd": 0, "bbox": [49, 184, 4, 20], "area": 67}, {"id": 1316150, "category_id": 84, "iscrowd": 0, "bbox": [80, 94, 5, 17], "area": 74}, {"id": 4543596, "category_id": 84, "iscrowd": 1, "bbox": [26, 55, 112, 230], "area": 7572}, {"id": 3160657, "category_id": 86, "iscrowd": 0, "bbox": [402, 161, 11, 13], "area": 125}, {"id": 5461591, "category_id": 86, "iscrowd": 0, "bbox": [269, 157, 9, 15], "area": 90}, {"id": 4020857, "category_id": 118, "iscrowd": 0, "bbox": [0, 222, 640, 172], "area": 61535}, {"id": 9745350, "category_id": 130, "iscrowd": 0, "bbox": [473, 12, 23, 22], "area": 332}, {"id": 1386321, "category_id": 156, "iscrowd": 0, "bbox": [0, 45, 640, 259], "area": 16600}, {"id": 9869972, "category_id": 181, "iscrowd": 0, "bbox": [221, 71, 244, 113], "area": 22583}, {"id": 6975348, "category_id": 185, "iscrowd": 0, "bbox": [246, 173, 188, 50], "area": 7410}, {"id": 5005689, "category_id": 189, "iscrowd": 0, "bbox": [155, 195, 94, 142], "area": 2290}, {"id": 5330783, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 299], "area": 51957}, {"id": 3948873, "category_id": 200, "iscrowd": 0, "bbox": [306, 234, 227, 65], "area": 8502}], "file_name": "000000340175.png", "image_id": 340175}, {"segments_info": [{"id": 12894147, "category_id": 20, "iscrowd": 0, "bbox": [441, 168, 87, 29], "area": 1738}, {"id": 9801618, "category_id": 20, "iscrowd": 0, "bbox": [426, 186, 120, 79], "area": 5961}, {"id": 10790829, "category_id": 20, "iscrowd": 0, "bbox": [64, 175, 111, 71], "area": 5613}, {"id": 14135193, "category_id": 148, "iscrowd": 0, "bbox": [0, 57, 640, 113], "area": 58252}, {"id": 7901089, "category_id": 193, "iscrowd": 0, "bbox": [0, 143, 640, 217], "area": 116011}], "file_name": "000000340272.png", "image_id": 340272}, {"segments_info": [{"id": 6327716, "category_id": 1, "iscrowd": 0, "bbox": [238, 46, 157, 336], "area": 27746}, {"id": 4541520, "category_id": 15, "iscrowd": 0, "bbox": [43, 167, 527, 203], "area": 40090}, {"id": 9536377, "category_id": 151, "iscrowd": 0, "bbox": [17, 47, 586, 84], "area": 1457}, {"id": 2317122, "category_id": 184, "iscrowd": 0, "bbox": [26, 46, 614, 244], "area": 65215}, {"id": 16315629, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 129], "area": 43591}, {"id": 5589136, "category_id": 196, "iscrowd": 0, "bbox": [243, 317, 17, 24], "area": 294}], "file_name": "000000340451.png", "image_id": 340451}, {"segments_info": [{"id": 3166905, "category_id": 44, "iscrowd": 0, "bbox": [188, 112, 67, 172], "area": 7839}, {"id": 6254489, "category_id": 44, "iscrowd": 0, "bbox": [388, 1, 85, 65], "area": 4508}, {"id": 4214452, "category_id": 44, "iscrowd": 0, "bbox": [0, 113, 81, 172], "area": 7098}, {"id": 6911381, "category_id": 44, "iscrowd": 0, "bbox": [8, 2, 74, 61], "area": 3275}, {"id": 4806002, "category_id": 44, "iscrowd": 0, "bbox": [50, 109, 87, 175], "area": 7863}, {"id": 7637679, "category_id": 44, "iscrowd": 0, "bbox": [82, 0, 70, 62], "area": 3229}, {"id": 3096170, "category_id": 44, "iscrowd": 0, "bbox": [255, 109, 64, 171], "area": 7511}, {"id": 3766185, "category_id": 44, "iscrowd": 0, "bbox": [123, 110, 71, 174], "area": 7433}, {"id": 4874635, "category_id": 44, "iscrowd": 0, "bbox": [317, 110, 68, 180], "area": 8086}, {"id": 4806548, "category_id": 44, "iscrowd": 0, "bbox": [238, 0, 74, 61], "area": 3579}, {"id": 4412831, "category_id": 44, "iscrowd": 0, "bbox": [380, 112, 77, 181], "area": 9488}, {"id": 4674421, "category_id": 44, "iscrowd": 0, "bbox": [321, 0, 68, 62], "area": 3463}, {"id": 4014984, "category_id": 44, "iscrowd": 0, "bbox": [3, 75, 58, 111], "area": 2861}, {"id": 2115206, "category_id": 44, "iscrowd": 1, "bbox": [64, 0, 436, 297], "area": 35981}, {"id": 6647183, "category_id": 196, "iscrowd": 0, "bbox": [0, 241, 487, 92], "area": 21812}], "file_name": "000000340697.png", "image_id": 340697}, {"segments_info": [{"id": 4079964, "category_id": 1, "iscrowd": 0, "bbox": [328, 68, 108, 92], "area": 5475}, {"id": 10198939, "category_id": 47, "iscrowd": 0, "bbox": [440, 209, 25, 14], "area": 299}, {"id": 12438218, "category_id": 47, "iscrowd": 0, "bbox": [549, 256, 38, 61], "area": 1887}, {"id": 6048585, "category_id": 62, "iscrowd": 0, "bbox": [1, 157, 50, 82], "area": 1214}, {"id": 9605250, "category_id": 72, "iscrowd": 0, "bbox": [282, 17, 220, 218], "area": 33773}, {"id": 11180431, "category_id": 72, "iscrowd": 0, "bbox": [58, 56, 205, 165], "area": 30972}, {"id": 2302242, "category_id": 73, "iscrowd": 0, "bbox": [71, 208, 238, 157], "area": 16229}, {"id": 2697264, "category_id": 74, "iscrowd": 0, "bbox": [469, 326, 76, 40], "area": 1899}, {"id": 2499364, "category_id": 76, "iscrowd": 0, "bbox": [82, 225, 200, 89], "area": 12222}, {"id": 3224887, "category_id": 76, "iscrowd": 0, "bbox": [84, 338, 365, 136], "area": 26538}, {"id": 3421238, "category_id": 77, "iscrowd": 0, "bbox": [386, 295, 39, 19], "area": 503}, {"id": 14936560, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 127, 199], "area": 13430}, {"id": 6652560, "category_id": 189, "iscrowd": 0, "bbox": [0, 212, 640, 268], "area": 85383}, {"id": 9485240, "category_id": 195, "iscrowd": 0, "bbox": [495, 57, 37, 69], "area": 2270}, {"id": 10000267, "category_id": 199, "iscrowd": 0, "bbox": [39, 0, 601, 273], "area": 47439}], "file_name": "000000340894.png", "image_id": 340894}, {"segments_info": [{"id": 2649286, "category_id": 87, "iscrowd": 0, "bbox": [240, 71, 105, 133], "area": 5789}, {"id": 2382250, "category_id": 87, "iscrowd": 0, "bbox": [1, 0, 625, 474], "area": 194394}, {"id": 9549006, "category_id": 190, "iscrowd": 0, "bbox": [502, 319, 138, 161], "area": 13356}, {"id": 7769253, "category_id": 199, "iscrowd": 0, "bbox": [580, 0, 60, 342], "area": 9338}], "file_name": "000000340930.png", "image_id": 340930}, {"segments_info": [{"id": 5127485, "category_id": 28, "iscrowd": 0, "bbox": [89, 229, 270, 124], "area": 24056}, {"id": 4542805, "category_id": 44, "iscrowd": 0, "bbox": [203, 491, 14, 37], "area": 336}, {"id": 5202345, "category_id": 44, "iscrowd": 0, "bbox": [182, 505, 16, 47], "area": 635}, {"id": 4542290, "category_id": 62, "iscrowd": 0, "bbox": [332, 583, 27, 57], "area": 975}, {"id": 4086616, "category_id": 62, "iscrowd": 0, "bbox": [279, 506, 78, 35], "area": 2116}, {"id": 4015688, "category_id": 62, "iscrowd": 0, "bbox": [182, 565, 130, 68], "area": 7309}, {"id": 5464412, "category_id": 67, "iscrowd": 0, "bbox": [172, 535, 187, 40], "area": 5242}, {"id": 8165019, "category_id": 119, "iscrowd": 0, "bbox": [0, 362, 359, 135], "area": 2540}, {"id": 12436415, "category_id": 130, "iscrowd": 0, "bbox": [18, 0, 194, 148], "area": 13282}, {"id": 2963518, "category_id": 184, "iscrowd": 0, "bbox": [0, 373, 359, 267], "area": 34049}, {"id": 4411980, "category_id": 185, "iscrowd": 0, "bbox": [0, 348, 316, 292], "area": 19167}, {"id": 11898202, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 359, 424], "area": 65402}, {"id": 13686991, "category_id": 197, "iscrowd": 0, "bbox": [90, 411, 22, 15], "area": 233}], "file_name": "000000341058.png", "image_id": 341058}, {"segments_info": [{"id": 7763342, "category_id": 1, "iscrowd": 0, "bbox": [311, 172, 41, 39], "area": 954}, {"id": 1978442, "category_id": 23, "iscrowd": 0, "bbox": [14, 31, 219, 333], "area": 31031}, {"id": 5986635, "category_id": 149, "iscrowd": 0, "bbox": [24, 351, 275, 24], "area": 3563}, {"id": 7303269, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 64965}, {"id": 15591910, "category_id": 187, "iscrowd": 0, "bbox": [55, 0, 401, 76], "area": 10227}, {"id": 7241624, "category_id": 194, "iscrowd": 0, "bbox": [0, 299, 185, 76], "area": 2998}], "file_name": "000000341094.png", "image_id": 341094}, {"segments_info": [{"id": 4536885, "category_id": 1, "iscrowd": 0, "bbox": [186, 178, 52, 50], "area": 1313}, {"id": 8480601, "category_id": 1, "iscrowd": 0, "bbox": [445, 97, 14, 23], "area": 217}, {"id": 9927274, "category_id": 1, "iscrowd": 0, "bbox": [427, 108, 25, 27], "area": 375}, {"id": 10394518, "category_id": 42, "iscrowd": 0, "bbox": [180, 213, 59, 25], "area": 543}, {"id": 12956573, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 451], "area": 286079}], "file_name": "000000341196.png", "image_id": 341196}, {"segments_info": [{"id": 13413254, "category_id": 1, "iscrowd": 0, "bbox": [415, 78, 42, 244], "area": 5262}, {"id": 8153716, "category_id": 1, "iscrowd": 0, "bbox": [189, 4, 219, 629], "area": 64319}, {"id": 10256991, "category_id": 2, "iscrowd": 0, "bbox": [212, 318, 244, 270], "area": 14927}, {"id": 1788622, "category_id": 31, "iscrowd": 0, "bbox": [130, 135, 124, 88], "area": 8776}, {"id": 1184908, "category_id": 31, "iscrowd": 0, "bbox": [6, 469, 126, 102], "area": 9233}, {"id": 2443967, "category_id": 33, "iscrowd": 0, "bbox": [115, 112, 125, 56], "area": 3466}, {"id": 1457080, "category_id": 33, "iscrowd": 0, "bbox": [27, 158, 103, 63], "area": 5482}, {"id": 1777303, "category_id": 33, "iscrowd": 0, "bbox": [133, 471, 110, 82], "area": 8373}, {"id": 1583794, "category_id": 33, "iscrowd": 0, "bbox": [97, 392, 167, 124], "area": 13450}, {"id": 1582767, "category_id": 33, "iscrowd": 0, "bbox": [65, 360, 155, 84], "area": 5007}, {"id": 2632106, "category_id": 33, "iscrowd": 0, "bbox": [9, 442, 90, 48], "area": 2391}, {"id": 12565165, "category_id": 100, "iscrowd": 0, "bbox": [59, 202, 148, 175], "area": 19690}, {"id": 14801874, "category_id": 181, "iscrowd": 0, "bbox": [260, 0, 197, 354], "area": 21733}, {"id": 5390123, "category_id": 190, "iscrowd": 0, "bbox": [0, 476, 457, 164], "area": 35212}, {"id": 10596282, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 280, 479], "area": 58787}], "file_name": "000000341469.png", "image_id": 341469}, {"segments_info": [{"id": 8945553, "category_id": 1, "iscrowd": 0, "bbox": [210, 141, 216, 181], "area": 10366}, {"id": 9288874, "category_id": 37, "iscrowd": 0, "bbox": [540, 83, 17, 16], "area": 148}, {"id": 9995927, "category_id": 43, "iscrowd": 0, "bbox": [408, 94, 60, 58], "area": 1693}, {"id": 10585464, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 260803}], "file_name": "000000341681.png", "image_id": 341681}, {"segments_info": [{"id": 4537660, "category_id": 1, "iscrowd": 0, "bbox": [522, 306, 76, 106], "area": 2904}, {"id": 8285007, "category_id": 1, "iscrowd": 0, "bbox": [312, 257, 50, 124], "area": 3704}, {"id": 4865853, "category_id": 1, "iscrowd": 0, "bbox": [357, 260, 15, 57], "area": 487}, {"id": 4861734, "category_id": 1, "iscrowd": 0, "bbox": [374, 257, 16, 55], "area": 414}, {"id": 5190738, "category_id": 1, "iscrowd": 0, "bbox": [411, 256, 9, 27], "area": 138}, {"id": 3417899, "category_id": 1, "iscrowd": 0, "bbox": [402, 256, 12, 29], "area": 162}, {"id": 10722457, "category_id": 35, "iscrowd": 0, "bbox": [389, 305, 23, 7], "area": 76}, {"id": 3483170, "category_id": 35, "iscrowd": 0, "bbox": [374, 268, 8, 47], "area": 148}, {"id": 10457742, "category_id": 35, "iscrowd": 0, "bbox": [295, 357, 78, 28], "area": 555}, {"id": 3443016, "category_id": 36, "iscrowd": 0, "bbox": [544, 296, 46, 113], "area": 2614}, {"id": 11180689, "category_id": 159, "iscrowd": 0, "bbox": [0, 87, 640, 393], "area": 155566}, {"id": 6970968, "category_id": 184, "iscrowd": 0, "bbox": [0, 34, 640, 446], "area": 62266}, {"id": 12030064, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 201], "area": 77805}], "file_name": "000000341719.png", "image_id": 341719}, {"segments_info": [{"id": 9737364, "category_id": 1, "iscrowd": 0, "bbox": [0, 4, 601, 600], "area": 211930}, {"id": 13750737, "category_id": 54, "iscrowd": 0, "bbox": [38, 441, 249, 166], "area": 30290}, {"id": 2302755, "category_id": 77, "iscrowd": 0, "bbox": [339, 259, 101, 143], "area": 6298}, {"id": 13027014, "category_id": 112, "iscrowd": 0, "bbox": [69, 94, 154, 228], "area": 24157}, {"id": 9474192, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 271, 423], "area": 43362}, {"id": 3881787, "category_id": 186, "iscrowd": 0, "bbox": [85, 64, 153, 126], "area": 6746}, {"id": 8882055, "category_id": 199, "iscrowd": 0, "bbox": [248, 0, 364, 358], "area": 40010}], "file_name": "000000341828.png", "image_id": 341828}, {"segments_info": [{"id": 3696009, "category_id": 1, "iscrowd": 0, "bbox": [288, 245, 117, 142], "area": 7570}, {"id": 2698310, "category_id": 3, "iscrowd": 0, "bbox": [491, 183, 18, 7], "area": 95}, {"id": 3554884, "category_id": 3, "iscrowd": 0, "bbox": [540, 182, 16, 6], "area": 77}, {"id": 2963010, "category_id": 3, "iscrowd": 0, "bbox": [357, 173, 15, 11], "area": 124}, {"id": 3555430, "category_id": 3, "iscrowd": 0, "bbox": [229, 170, 5, 6], "area": 27}, {"id": 4015695, "category_id": 3, "iscrowd": 0, "bbox": [435, 179, 17, 8], "area": 122}, {"id": 4281185, "category_id": 15, "iscrowd": 0, "bbox": [235, 288, 288, 184], "area": 20564}, {"id": 2435886, "category_id": 27, "iscrowd": 0, "bbox": [469, 383, 63, 40], "area": 1511}, {"id": 8890051, "category_id": 84, "iscrowd": 0, "bbox": [278, 334, 55, 22], "area": 417}, {"id": 2769232, "category_id": 128, "iscrowd": 0, "bbox": [400, 168, 24, 21], "area": 388}, {"id": 3560820, "category_id": 151, "iscrowd": 0, "bbox": [253, 136, 40, 21], "area": 625}, {"id": 5471126, "category_id": 154, "iscrowd": 0, "bbox": [0, 184, 494, 231], "area": 60895}, {"id": 5730426, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 599, 208], "area": 96039}, {"id": 12834270, "category_id": 187, "iscrowd": 0, "bbox": [559, 51, 20, 19], "area": 318}, {"id": 6913678, "category_id": 191, "iscrowd": 0, "bbox": [0, 169, 640, 309], "area": 53177}, {"id": 2249049, "category_id": 193, "iscrowd": 0, "bbox": [43, 164, 597, 314], "area": 14493}, {"id": 4152430, "category_id": 194, "iscrowd": 0, "bbox": [592, 414, 48, 32], "area": 988}, {"id": 4483202, "category_id": 197, "iscrowd": 0, "bbox": [183, 0, 457, 273], "area": 29429}], "file_name": "000000341921.png", "image_id": 341921}, {"segments_info": [{"id": 5857141, "category_id": 1, "iscrowd": 0, "bbox": [54, 125, 248, 243], "area": 39867}, {"id": 7837614, "category_id": 1, "iscrowd": 0, "bbox": [230, 48, 270, 323], "area": 54304}, {"id": 5593718, "category_id": 15, "iscrowd": 0, "bbox": [0, 345, 59, 26], "area": 1388}, {"id": 8826591, "category_id": 60, "iscrowd": 0, "bbox": [203, 269, 68, 71], "area": 3276}, {"id": 8764135, "category_id": 60, "iscrowd": 0, "bbox": [288, 207, 64, 62], "area": 2557}, {"id": 1913140, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 345], "area": 81244}], "file_name": "000000341973.png", "image_id": 341973}, {"segments_info": [{"id": 2630168, "category_id": 9, "iscrowd": 0, "bbox": [0, 480, 68, 16], "area": 777}, {"id": 3353889, "category_id": 9, "iscrowd": 0, "bbox": [104, 474, 226, 49], "area": 5798}, {"id": 3552043, "category_id": 9, "iscrowd": 0, "bbox": [171, 504, 102, 47], "area": 2184}, {"id": 7246003, "category_id": 85, "iscrowd": 0, "bbox": [393, 251, 27, 27], "area": 548}, {"id": 4012587, "category_id": 95, "iscrowd": 0, "bbox": [53, 432, 146, 48], "area": 2972}, {"id": 8091241, "category_id": 148, "iscrowd": 0, "bbox": [0, 467, 480, 173], "area": 60238}, {"id": 3222816, "category_id": 151, "iscrowd": 0, "bbox": [412, 340, 59, 25], "area": 955}, {"id": 1516565, "category_id": 184, "iscrowd": 0, "bbox": [0, 357, 480, 132], "area": 23483}, {"id": 2104341, "category_id": 185, "iscrowd": 0, "bbox": [355, 465, 98, 29], "area": 1792}, {"id": 13685969, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 398], "area": 144444}, {"id": 4477017, "category_id": 197, "iscrowd": 0, "bbox": [0, 125, 480, 402], "area": 63494}], "file_name": "000000342006.png", "image_id": 342006}, {"segments_info": [{"id": 8551304, "category_id": 1, "iscrowd": 0, "bbox": [0, 155, 42, 73], "area": 1703}, {"id": 4077889, "category_id": 1, "iscrowd": 0, "bbox": [0, 154, 13, 37], "area": 254}, {"id": 10257280, "category_id": 1, "iscrowd": 0, "bbox": [95, 28, 308, 585], "area": 61642}, {"id": 8615801, "category_id": 1, "iscrowd": 0, "bbox": [336, 150, 37, 75], "area": 1777}, {"id": 1381142, "category_id": 1, "iscrowd": 0, "bbox": [312, 152, 31, 50], "area": 1131}, {"id": 5787485, "category_id": 1, "iscrowd": 0, "bbox": [32, 137, 22, 22], "area": 314}, {"id": 6776183, "category_id": 1, "iscrowd": 0, "bbox": [283, 148, 24, 57], "area": 728}, {"id": 2761768, "category_id": 1, "iscrowd": 0, "bbox": [52, 138, 13, 20], "area": 127}, {"id": 7432049, "category_id": 1, "iscrowd": 0, "bbox": [272, 95, 31, 54], "area": 673}, {"id": 4407386, "category_id": 1, "iscrowd": 0, "bbox": [24, 155, 26, 53], "area": 681}, {"id": 8680045, "category_id": 1, "iscrowd": 0, "bbox": [40, 153, 53, 95], "area": 2481}, {"id": 7172981, "category_id": 1, "iscrowd": 0, "bbox": [300, 90, 22, 69], "area": 1029}, {"id": 4869715, "category_id": 1, "iscrowd": 0, "bbox": [461, 196, 26, 82], "area": 1125}, {"id": 4538933, "category_id": 3, "iscrowd": 0, "bbox": [397, 147, 50, 11], "area": 497}, {"id": 5397390, "category_id": 15, "iscrowd": 0, "bbox": [378, 187, 71, 7], "area": 262}, {"id": 6583945, "category_id": 15, "iscrowd": 0, "bbox": [387, 201, 82, 8], "area": 313}, {"id": 5797020, "category_id": 43, "iscrowd": 0, "bbox": [100, 137, 55, 139], "area": 4233}, {"id": 3296850, "category_id": 62, "iscrowd": 0, "bbox": [326, 222, 76, 104], "area": 5430}, {"id": 2637652, "category_id": 62, "iscrowd": 0, "bbox": [466, 233, 22, 93], "area": 677}, {"id": 4151668, "category_id": 62, "iscrowd": 0, "bbox": [0, 228, 17, 90], "area": 801}, {"id": 5535376, "category_id": 62, "iscrowd": 0, "bbox": [55, 211, 56, 86], "area": 1774}, {"id": 5337740, "category_id": 62, "iscrowd": 0, "bbox": [422, 231, 66, 107], "area": 1953}, {"id": 2042662, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 488, 167], "area": 41917}, {"id": 3628118, "category_id": 193, "iscrowd": 0, "bbox": [0, 197, 488, 443], "area": 142454}, {"id": 11973551, "category_id": 197, "iscrowd": 0, "bbox": [19, 0, 469, 112], "area": 13802}, {"id": 11574416, "category_id": 199, "iscrowd": 0, "bbox": [0, 93, 183, 67], "area": 7011}], "file_name": "000000342128.png", "image_id": 342128}, {"segments_info": [{"id": 2245237, "category_id": 59, "iscrowd": 0, "bbox": [0, 3, 449, 628], "area": 234841}, {"id": 5735342, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 65057}, {"id": 3764408, "category_id": 189, "iscrowd": 0, "bbox": [16, 0, 464, 31], "area": 6227}], "file_name": "000000342186.png", "image_id": 342186}, {"segments_info": [{"id": 12892338, "category_id": 70, "iscrowd": 0, "bbox": [217, 254, 116, 232], "area": 16761}, {"id": 4219273, "category_id": 100, "iscrowd": 0, "bbox": [8, 202, 199, 130], "area": 5564}, {"id": 11319740, "category_id": 176, "iscrowd": 0, "bbox": [0, 127, 333, 373], "area": 26063}, {"id": 6191233, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 72, 45], "area": 2760}, {"id": 9540757, "category_id": 190, "iscrowd": 0, "bbox": [0, 312, 333, 188], "area": 35676}, {"id": 12303044, "category_id": 195, "iscrowd": 0, "bbox": [295, 232, 38, 48], "area": 1321}, {"id": 9677229, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 333, 156], "area": 32665}], "file_name": "000000342295.png", "image_id": 342295}, {"segments_info": [{"id": 4673870, "category_id": 1, "iscrowd": 0, "bbox": [411, 278, 137, 147], "area": 11538}, {"id": 4738889, "category_id": 1, "iscrowd": 0, "bbox": [191, 128, 155, 257], "area": 22572}, {"id": 7242625, "category_id": 1, "iscrowd": 0, "bbox": [319, 329, 149, 147], "area": 11048}, {"id": 7437184, "category_id": 72, "iscrowd": 0, "bbox": [53, 3, 587, 477], "area": 224504}, {"id": 3162175, "category_id": 73, "iscrowd": 0, "bbox": [293, 319, 77, 73], "area": 2849}, {"id": 11580344, "category_id": 84, "iscrowd": 0, "bbox": [122, 353, 88, 22], "area": 725}, {"id": 3566178, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 250, 480], "area": 24969}], "file_name": "000000342367.png", "image_id": 342367}, {"segments_info": [{"id": 7362121, "category_id": 1, "iscrowd": 0, "bbox": [0, 264, 9, 44], "area": 268}, {"id": 2907278, "category_id": 1, "iscrowd": 0, "bbox": [286, 138, 107, 180], "area": 8757}, {"id": 7297887, "category_id": 1, "iscrowd": 0, "bbox": [455, 231, 21, 20], "area": 173}, {"id": 9270172, "category_id": 1, "iscrowd": 0, "bbox": [455, 248, 20, 23], "area": 217}, {"id": 6696988, "category_id": 1, "iscrowd": 0, "bbox": [626, 193, 14, 38], "area": 347}, {"id": 7427667, "category_id": 1, "iscrowd": 0, "bbox": [273, 273, 25, 17], "area": 193}, {"id": 9139547, "category_id": 35, "iscrowd": 0, "bbox": [613, 229, 27, 6], "area": 66}, {"id": 7300705, "category_id": 35, "iscrowd": 0, "bbox": [243, 299, 164, 35], "area": 932}, {"id": 13088423, "category_id": 35, "iscrowd": 0, "bbox": [451, 268, 25, 6], "area": 27}, {"id": 14205099, "category_id": 159, "iscrowd": 0, "bbox": [0, 152, 640, 275], "area": 119428}, {"id": 7104353, "category_id": 184, "iscrowd": 0, "bbox": [0, 118, 640, 158], "area": 27459}, {"id": 9207405, "category_id": 185, "iscrowd": 0, "bbox": [0, 268, 193, 40], "area": 3205}, {"id": 16577745, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 239], "area": 111264}, {"id": 9200189, "category_id": 197, "iscrowd": 0, "bbox": [623, 153, 17, 49], "area": 509}], "file_name": "000000342397.png", "image_id": 342397}, {"segments_info": [{"id": 5066578, "category_id": 1, "iscrowd": 0, "bbox": [28, 124, 205, 507], "area": 46209}, {"id": 8820808, "category_id": 34, "iscrowd": 0, "bbox": [111, 143, 104, 17], "area": 1430}, {"id": 4672095, "category_id": 184, "iscrowd": 0, "bbox": [0, 219, 287, 421], "area": 63014}, {"id": 13412485, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 287, 327], "area": 71139}], "file_name": "000000342971.png", "image_id": 342971}, {"segments_info": [{"id": 7962500, "category_id": 17, "iscrowd": 0, "bbox": [0, 17, 456, 614], "area": 129174}, {"id": 8021079, "category_id": 73, "iscrowd": 0, "bbox": [2, 327, 385, 138], "area": 28297}, {"id": 2634563, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 93708}, {"id": 9536385, "category_id": 177, "iscrowd": 0, "bbox": [33, 137, 8, 34], "area": 246}, {"id": 15395562, "category_id": 199, "iscrowd": 0, "bbox": [32, 101, 384, 429], "area": 14861}, {"id": 9080986, "category_id": 200, "iscrowd": 0, "bbox": [37, 518, 392, 122], "area": 19230}], "file_name": "000000343076.png", "image_id": 343076}, {"segments_info": [{"id": 4471604, "category_id": 1, "iscrowd": 0, "bbox": [0, 488, 22, 131], "area": 1921}, {"id": 1316118, "category_id": 1, "iscrowd": 0, "bbox": [260, 466, 41, 99], "area": 1664}, {"id": 3355185, "category_id": 1, "iscrowd": 0, "bbox": [50, 475, 51, 149], "area": 4151}, {"id": 2237222, "category_id": 1, "iscrowd": 0, "bbox": [429, 447, 50, 146], "area": 4037}, {"id": 8676169, "category_id": 77, "iscrowd": 0, "bbox": [5, 472, 28, 46], "area": 964}, {"id": 11579055, "category_id": 85, "iscrowd": 0, "bbox": [278, 136, 63, 71], "area": 3333}, {"id": 6315085, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 260, 579], "area": 28465}, {"id": 16117479, "category_id": 187, "iscrowd": 0, "bbox": [155, 0, 325, 171], "area": 29796}, {"id": 7110531, "category_id": 191, "iscrowd": 0, "bbox": [0, 539, 480, 101], "area": 24502}, {"id": 6715005, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 614], "area": 207941}], "file_name": "000000343149.png", "image_id": 343149}, {"segments_info": [{"id": 9735316, "category_id": 1, "iscrowd": 0, "bbox": [398, 102, 44, 138], "area": 3704}, {"id": 11380398, "category_id": 1, "iscrowd": 0, "bbox": [245, 107, 139, 281], "area": 14334}, {"id": 6248273, "category_id": 3, "iscrowd": 0, "bbox": [358, 121, 142, 88], "area": 5782}, {"id": 7300706, "category_id": 3, "iscrowd": 0, "bbox": [484, 126, 156, 64], "area": 7699}, {"id": 3879983, "category_id": 3, "iscrowd": 0, "bbox": [18, 132, 96, 65], "area": 4079}, {"id": 6248275, "category_id": 3, "iscrowd": 0, "bbox": [245, 140, 65, 43], "area": 1893}, {"id": 3946032, "category_id": 3, "iscrowd": 0, "bbox": [112, 136, 115, 59], "area": 3840}, {"id": 11450044, "category_id": 37, "iscrowd": 0, "bbox": [285, 233, 6, 6], "area": 26}, {"id": 7328452, "category_id": 37, "iscrowd": 0, "bbox": [599, 191, 6, 4], "area": 18}, {"id": 8771273, "category_id": 37, "iscrowd": 0, "bbox": [602, 182, 7, 5], "area": 30}, {"id": 8049610, "category_id": 37, "iscrowd": 0, "bbox": [599, 177, 6, 6], "area": 27}, {"id": 6274223, "category_id": 37, "iscrowd": 0, "bbox": [598, 184, 10, 6], "area": 36}, {"id": 7395789, "category_id": 37, "iscrowd": 0, "bbox": [594, 188, 5, 6], "area": 22}, {"id": 7776935, "category_id": 37, "iscrowd": 0, "bbox": [586, 188, 3, 4], "area": 9}, {"id": 6861221, "category_id": 37, "iscrowd": 0, "bbox": [101, 236, 6, 7], "area": 33}, {"id": 6009764, "category_id": 37, "iscrowd": 0, "bbox": [551, 227, 6, 6], "area": 32}, {"id": 6336684, "category_id": 37, "iscrowd": 0, "bbox": [401, 173, 6, 7], "area": 34}, {"id": 7583917, "category_id": 37, "iscrowd": 0, "bbox": [288, 232, 6, 5], "area": 20}, {"id": 6401442, "category_id": 37, "iscrowd": 0, "bbox": [68, 236, 6, 6], "area": 33}, {"id": 7519924, "category_id": 37, "iscrowd": 0, "bbox": [175, 235, 5, 5], "area": 24}, {"id": 6322033, "category_id": 37, "iscrowd": 1, "bbox": [66, 185, 548, 63], "area": 789}, {"id": 8946047, "category_id": 43, "iscrowd": 0, "bbox": [198, 99, 52, 84], "area": 2745}, {"id": 10196364, "category_id": 43, "iscrowd": 0, "bbox": [439, 182, 17, 38], "area": 219}, {"id": 10195080, "category_id": 145, "iscrowd": 0, "bbox": [0, 222, 640, 206], "area": 114840}, {"id": 2765871, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 30], "area": 12291}, {"id": 5130048, "category_id": 185, "iscrowd": 0, "bbox": [0, 10, 640, 225], "area": 92639}, {"id": 4939609, "category_id": 193, "iscrowd": 0, "bbox": [0, 200, 640, 43], "area": 8036}], "file_name": "000000343218.png", "image_id": 343218}, {"segments_info": [{"id": 4538279, "category_id": 11, "iscrowd": 0, "bbox": [520, 63, 62, 147], "area": 4714}, {"id": 13618379, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 640, 357], "area": 92318}, {"id": 14212572, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 478], "area": 20887}, {"id": 6259582, "category_id": 193, "iscrowd": 0, "bbox": [0, 98, 640, 380], "area": 182451}], "file_name": "000000343315.png", "image_id": 343315}, {"segments_info": [{"id": 3089958, "category_id": 1, "iscrowd": 0, "bbox": [250, 55, 189, 419], "area": 49231}, {"id": 10854816, "category_id": 35, "iscrowd": 0, "bbox": [329, 397, 83, 66], "area": 662}, {"id": 15263204, "category_id": 159, "iscrowd": 0, "bbox": [0, 89, 640, 391], "area": 190722}, {"id": 789772, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 135], "area": 65523}], "file_name": "000000343453.png", "image_id": 343453}, {"segments_info": [{"id": 10323569, "category_id": 79, "iscrowd": 0, "bbox": [147, 122, 81, 115], "area": 3129}, {"id": 3487539, "category_id": 81, "iscrowd": 0, "bbox": [203, 161, 94, 26], "area": 1233}, {"id": 4348009, "category_id": 107, "iscrowd": 0, "bbox": [176, 141, 144, 99], "area": 6537}, {"id": 596791, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 65, 240], "area": 13718}, {"id": 2571849, "category_id": 176, "iscrowd": 0, "bbox": [170, 80, 150, 100], "area": 5559}, {"id": 794679, "category_id": 177, "iscrowd": 0, "bbox": [192, 177, 106, 63], "area": 2746}, {"id": 12499374, "category_id": 180, "iscrowd": 0, "bbox": [51, 4, 102, 154], "area": 6677}, {"id": 12235415, "category_id": 181, "iscrowd": 0, "bbox": [54, 54, 69, 83], "area": 3077}, {"id": 5925752, "category_id": 188, "iscrowd": 0, "bbox": [161, 0, 159, 240], "area": 17002}, {"id": 2768471, "category_id": 190, "iscrowd": 0, "bbox": [64, 207, 116, 33], "area": 2540}, {"id": 2505287, "category_id": 199, "iscrowd": 0, "bbox": [51, 0, 185, 222], "area": 14001}], "file_name": "000000343466.png", "image_id": 343466}, {"segments_info": [{"id": 3554111, "category_id": 1, "iscrowd": 0, "bbox": [56, 204, 55, 120], "area": 3016}, {"id": 5527641, "category_id": 3, "iscrowd": 0, "bbox": [256, 198, 52, 28], "area": 998}, {"id": 5721676, "category_id": 3, "iscrowd": 0, "bbox": [620, 213, 10, 5], "area": 39}, {"id": 1975143, "category_id": 11, "iscrowd": 0, "bbox": [369, 230, 19, 40], "area": 451}, {"id": 5857182, "category_id": 13, "iscrowd": 0, "bbox": [164, 80, 40, 42], "area": 1317}, {"id": 4807272, "category_id": 31, "iscrowd": 0, "bbox": [56, 219, 36, 68], "area": 1010}, {"id": 2305339, "category_id": 119, "iscrowd": 0, "bbox": [239, 210, 17, 20], "area": 274}, {"id": 8225407, "category_id": 128, "iscrowd": 0, "bbox": [0, 97, 608, 145], "area": 36350}, {"id": 5660771, "category_id": 149, "iscrowd": 0, "bbox": [0, 231, 640, 162], "area": 45859}, {"id": 5400157, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 259], "area": 63823}, {"id": 15329512, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 199], "area": 43500}, {"id": 3753805, "category_id": 191, "iscrowd": 0, "bbox": [125, 223, 515, 163], "area": 11729}, {"id": 1787961, "category_id": 193, "iscrowd": 0, "bbox": [0, 177, 640, 190], "area": 41404}], "file_name": "000000343496.png", "image_id": 343496}, {"segments_info": [{"id": 6317439, "category_id": 1, "iscrowd": 0, "bbox": [98, 34, 174, 367], "area": 27289}, {"id": 3374458, "category_id": 37, "iscrowd": 0, "bbox": [272, 223, 15, 14], "area": 73}, {"id": 4870017, "category_id": 43, "iscrowd": 0, "bbox": [207, 201, 116, 33], "area": 2061}, {"id": 6579301, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 447], "area": 256304}], "file_name": "000000343524.png", "image_id": 343524}, {"segments_info": [{"id": 8880208, "category_id": 1, "iscrowd": 0, "bbox": [249, 31, 28, 60], "area": 982}, {"id": 7630694, "category_id": 1, "iscrowd": 0, "bbox": [113, 88, 92, 186], "area": 7645}, {"id": 5594487, "category_id": 1, "iscrowd": 0, "bbox": [420, 39, 13, 17], "area": 129}, {"id": 7696994, "category_id": 1, "iscrowd": 0, "bbox": [313, 103, 84, 136], "area": 4463}, {"id": 7632752, "category_id": 1, "iscrowd": 0, "bbox": [360, 95, 99, 152], "area": 7249}, {"id": 7303015, "category_id": 1, "iscrowd": 0, "bbox": [479, 93, 70, 103], "area": 3788}, {"id": 7369072, "category_id": 1, "iscrowd": 0, "bbox": [219, 132, 114, 238], "area": 11466}, {"id": 10852245, "category_id": 1, "iscrowd": 0, "bbox": [157, 0, 37, 69], "area": 1372}, {"id": 6710896, "category_id": 1, "iscrowd": 0, "bbox": [175, 27, 41, 126], "area": 2794}, {"id": 7963022, "category_id": 1, "iscrowd": 0, "bbox": [99, 0, 58, 122], "area": 2797}, {"id": 7829104, "category_id": 1, "iscrowd": 0, "bbox": [13, 138, 147, 194], "area": 11326}, {"id": 8094089, "category_id": 1, "iscrowd": 0, "bbox": [17, 26, 42, 113], "area": 2360}, {"id": 4867406, "category_id": 1, "iscrowd": 0, "bbox": [444, 164, 194, 259], "area": 34006}, {"id": 7565179, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 639, 229], "area": 52160}, {"id": 4670532, "category_id": 2, "iscrowd": 0, "bbox": [567, 130, 30, 73], "area": 1211}, {"id": 6579821, "category_id": 2, "iscrowd": 0, "bbox": [588, 148, 52, 110], "area": 2229}, {"id": 7567211, "category_id": 2, "iscrowd": 0, "bbox": [19, 252, 170, 168], "area": 14552}, {"id": 5658453, "category_id": 2, "iscrowd": 0, "bbox": [353, 183, 106, 168], "area": 6635}, {"id": 5330007, "category_id": 2, "iscrowd": 0, "bbox": [594, 157, 19, 64], "area": 800}, {"id": 4012344, "category_id": 2, "iscrowd": 0, "bbox": [547, 171, 22, 66], "area": 799}, {"id": 6184280, "category_id": 2, "iscrowd": 0, "bbox": [322, 194, 67, 132], "area": 4376}, {"id": 6186858, "category_id": 2, "iscrowd": 0, "bbox": [130, 208, 55, 79], "area": 1341}, {"id": 5132373, "category_id": 2, "iscrowd": 0, "bbox": [433, 175, 58, 99], "area": 2132}, {"id": 8023662, "category_id": 2, "iscrowd": 0, "bbox": [460, 85, 33, 26], "area": 234}, {"id": 6711139, "category_id": 2, "iscrowd": 0, "bbox": [220, 244, 125, 169], "area": 11890}, {"id": 6513763, "category_id": 2, "iscrowd": 0, "bbox": [125, 212, 97, 106], "area": 3867}, {"id": 5198153, "category_id": 2, "iscrowd": 1, "bbox": [68, 45, 96, 47], "area": 2213}, {"id": 3681065, "category_id": 31, "iscrowd": 0, "bbox": [209, 87, 18, 30], "area": 340}, {"id": 1511257, "category_id": 31, "iscrowd": 0, "bbox": [18, 124, 19, 57], "area": 679}, {"id": 4674656, "category_id": 31, "iscrowd": 0, "bbox": [62, 67, 22, 33], "area": 481}, {"id": 5742251, "category_id": 92, "iscrowd": 0, "bbox": [324, 8, 146, 63], "area": 2713}, {"id": 8357511, "category_id": 149, "iscrowd": 0, "bbox": [0, 152, 640, 276], "area": 46670}, {"id": 8481605, "category_id": 155, "iscrowd": 0, "bbox": [0, 30, 204, 36], "area": 1318}, {"id": 12168341, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 462, 47], "area": 7268}, {"id": 4942179, "category_id": 193, "iscrowd": 0, "bbox": [0, 64, 20, 37], "area": 618}], "file_name": "000000343561.png", "image_id": 343561}, {"segments_info": [{"id": 10001311, "category_id": 1, "iscrowd": 0, "bbox": [0, 2, 640, 487], "area": 260943}, {"id": 5132113, "category_id": 77, "iscrowd": 0, "bbox": [179, 314, 131, 85], "area": 5979}, {"id": 13621984, "category_id": 191, "iscrowd": 0, "bbox": [0, 91, 130, 405], "area": 39983}], "file_name": "000000343706.png", "image_id": 343706}, {"segments_info": [{"id": 5189141, "category_id": 1, "iscrowd": 0, "bbox": [19, 135, 315, 474], "area": 58689}, {"id": 10140144, "category_id": 34, "iscrowd": 0, "bbox": [213, 300, 73, 33], "area": 1559}, {"id": 11837594, "category_id": 128, "iscrowd": 0, "bbox": [102, 0, 325, 276], "area": 22283}, {"id": 14925705, "category_id": 181, "iscrowd": 0, "bbox": [344, 171, 46, 58], "area": 1506}, {"id": 3232551, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 283], "area": 74401}, {"id": 6248008, "category_id": 185, "iscrowd": 0, "bbox": [0, 262, 41, 22], "area": 594}, {"id": 11047057, "category_id": 191, "iscrowd": 0, "bbox": [0, 268, 427, 372], "area": 36694}, {"id": 8165484, "category_id": 193, "iscrowd": 0, "bbox": [0, 256, 427, 305], "area": 76685}], "file_name": "000000343803.png", "image_id": 343803}, {"segments_info": [{"id": 7429461, "category_id": 4, "iscrowd": 0, "bbox": [175, 176, 321, 239], "area": 43516}, {"id": 4077364, "category_id": 112, "iscrowd": 0, "bbox": [155, 271, 49, 77], "area": 687}, {"id": 5525327, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 235, 480], "area": 56748}, {"id": 11513004, "category_id": 191, "iscrowd": 0, "bbox": [12, 342, 628, 138], "area": 60166}, {"id": 6913419, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 431], "area": 143739}], "file_name": "000000343934.png", "image_id": 343934}, {"segments_info": [{"id": 5986654, "category_id": 1, "iscrowd": 0, "bbox": [275, 15, 135, 395], "area": 26337}, {"id": 5462107, "category_id": 36, "iscrowd": 0, "bbox": [331, 384, 76, 39], "area": 1150}, {"id": 13421772, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 246244}], "file_name": "000000343937.png", "image_id": 343937}, {"segments_info": [{"id": 5663306, "category_id": 1, "iscrowd": 0, "bbox": [96, 283, 7, 15], "area": 74}, {"id": 1317910, "category_id": 1, "iscrowd": 0, "bbox": [139, 248, 5, 11], "area": 35}, {"id": 4545345, "category_id": 1, "iscrowd": 0, "bbox": [96, 273, 10, 20], "area": 94}, {"id": 4479080, "category_id": 3, "iscrowd": 0, "bbox": [394, 253, 3, 4], "area": 7}, {"id": 4741696, "category_id": 3, "iscrowd": 0, "bbox": [435, 249, 20, 13], "area": 135}, {"id": 7243611, "category_id": 3, "iscrowd": 0, "bbox": [405, 258, 24, 11], "area": 136}, {"id": 4866110, "category_id": 3, "iscrowd": 0, "bbox": [159, 273, 13, 10], "area": 103}, {"id": 7835771, "category_id": 3, "iscrowd": 0, "bbox": [378, 250, 21, 12], "area": 178}, {"id": 7376540, "category_id": 3, "iscrowd": 0, "bbox": [165, 252, 20, 14], "area": 232}, {"id": 3424306, "category_id": 95, "iscrowd": 0, "bbox": [113, 192, 387, 66], "area": 16651}, {"id": 11447706, "category_id": 130, "iscrowd": 0, "bbox": [281, 151, 86, 30], "area": 474}, {"id": 4874304, "category_id": 149, "iscrowd": 0, "bbox": [38, 186, 462, 189], "area": 32926}, {"id": 725518, "category_id": 184, "iscrowd": 0, "bbox": [0, 67, 500, 308], "area": 54872}, {"id": 3947581, "category_id": 187, "iscrowd": 0, "bbox": [132, 0, 257, 187], "area": 18145}, {"id": 8691331, "category_id": 191, "iscrowd": 0, "bbox": [95, 245, 405, 130], "area": 5230}, {"id": 2303267, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 296], "area": 47677}], "file_name": "000000343976.png", "image_id": 343976}, {"segments_info": [{"id": 4871001, "category_id": 1, "iscrowd": 0, "bbox": [188, 242, 22, 25], "area": 352}, {"id": 8684674, "category_id": 1, "iscrowd": 0, "bbox": [345, 200, 70, 65], "area": 1117}, {"id": 4674918, "category_id": 1, "iscrowd": 0, "bbox": [213, 244, 15, 14], "area": 165}, {"id": 4606790, "category_id": 1, "iscrowd": 0, "bbox": [258, 220, 39, 53], "area": 1431}, {"id": 7242383, "category_id": 1, "iscrowd": 0, "bbox": [241, 250, 11, 17], "area": 145}, {"id": 4342606, "category_id": 1, "iscrowd": 0, "bbox": [183, 232, 12, 22], "area": 174}, {"id": 8419950, "category_id": 3, "iscrowd": 0, "bbox": [28, 227, 19, 40], "area": 362}, {"id": 5193775, "category_id": 3, "iscrowd": 0, "bbox": [1, 224, 39, 47], "area": 1364}, {"id": 5064507, "category_id": 3, "iscrowd": 0, "bbox": [41, 229, 27, 35], "area": 652}, {"id": 5263408, "category_id": 6, "iscrowd": 0, "bbox": [40, 214, 56, 35], "area": 1248}, {"id": 3948092, "category_id": 6, "iscrowd": 0, "bbox": [92, 112, 503, 292], "area": 116080}, {"id": 5526104, "category_id": 32, "iscrowd": 0, "bbox": [376, 227, 5, 23], "area": 69}, {"id": 5723478, "category_id": 128, "iscrowd": 0, "bbox": [0, 138, 198, 117], "area": 8902}, {"id": 6514791, "category_id": 149, "iscrowd": 0, "bbox": [0, 244, 640, 236], "area": 80906}, {"id": 11511444, "category_id": 184, "iscrowd": 0, "bbox": [0, 46, 43, 100], "area": 2978}, {"id": 14932162, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 397, 157], "area": 45023}, {"id": 8883592, "category_id": 197, "iscrowd": 0, "bbox": [286, 0, 354, 310], "area": 45771}], "file_name": "000000344029.png", "image_id": 344029}, {"segments_info": [{"id": 3097944, "category_id": 25, "iscrowd": 0, "bbox": [51, 161, 157, 236], "area": 12463}, {"id": 3886172, "category_id": 25, "iscrowd": 0, "bbox": [190, 153, 296, 269], "area": 25479}, {"id": 2701620, "category_id": 184, "iscrowd": 0, "bbox": [0, 25, 640, 382], "area": 130949}, {"id": 12960963, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 175], "area": 69853}, {"id": 6976364, "category_id": 192, "iscrowd": 0, "bbox": [139, 139, 354, 54], "area": 2756}, {"id": 2508864, "category_id": 193, "iscrowd": 0, "bbox": [0, 360, 640, 67], "area": 11801}, {"id": 4352125, "category_id": 194, "iscrowd": 0, "bbox": [0, 377, 546, 50], "area": 14170}], "file_name": "000000344059.png", "image_id": 344059}, {"segments_info": [{"id": 5071490, "category_id": 47, "iscrowd": 0, "bbox": [87, 132, 82, 115], "area": 6603}, {"id": 12829121, "category_id": 50, "iscrowd": 0, "bbox": [143, 108, 29, 55], "area": 576}, {"id": 9415871, "category_id": 54, "iscrowd": 0, "bbox": [393, 189, 109, 110], "area": 7179}, {"id": 4146000, "category_id": 67, "iscrowd": 0, "bbox": [0, 3, 640, 418], "area": 210797}, {"id": 9011581, "category_id": 73, "iscrowd": 0, "bbox": [1, 1, 75, 110], "area": 5156}, {"id": 1448228, "category_id": 118, "iscrowd": 0, "bbox": [0, 277, 640, 150], "area": 37311}, {"id": 2568005, "category_id": 189, "iscrowd": 0, "bbox": [0, 136, 4, 142], "area": 303}], "file_name": "000000344100.png", "image_id": 344100}, {"segments_info": [{"id": 2895170, "category_id": 1, "iscrowd": 0, "bbox": [113, 59, 329, 442], "area": 84685}, {"id": 14206153, "category_id": 32, "iscrowd": 0, "bbox": [290, 256, 23, 77], "area": 912}, {"id": 5920937, "category_id": 92, "iscrowd": 0, "bbox": [0, 0, 640, 512], "area": 215240}], "file_name": "000000344268.png", "image_id": 344268}, {"segments_info": [{"id": 5199187, "category_id": 128, "iscrowd": 0, "bbox": [0, 64, 191, 123], "area": 9248}, {"id": 1992881, "category_id": 130, "iscrowd": 0, "bbox": [382, 201, 21, 21], "area": 344}, {"id": 6974827, "category_id": 149, "iscrowd": 0, "bbox": [0, 154, 275, 272], "area": 48385}, {"id": 4476232, "category_id": 178, "iscrowd": 0, "bbox": [27, 163, 613, 263], "area": 43075}, {"id": 2241318, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 243], "area": 77942}, {"id": 12829360, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 450, 160], "area": 41705}, {"id": 6387320, "category_id": 191, "iscrowd": 0, "bbox": [258, 224, 173, 202], "area": 4463}, {"id": 2510648, "category_id": 193, "iscrowd": 0, "bbox": [249, 208, 391, 218], "area": 38496}], "file_name": "000000344611.png", "image_id": 344611}, {"segments_info": [{"id": 11315349, "category_id": 85, "iscrowd": 0, "bbox": [319, 66, 111, 123], "area": 10142}, {"id": 12628369, "category_id": 85, "iscrowd": 0, "bbox": [212, 86, 59, 129], "area": 5295}, {"id": 10988189, "category_id": 151, "iscrowd": 0, "bbox": [304, 0, 174, 48], "area": 5210}, {"id": 16448506, "category_id": 187, "iscrowd": 0, "bbox": [88, 0, 390, 310], "area": 11968}, {"id": 7500138, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 478, 640], "area": 273169}], "file_name": "000000344614.png", "image_id": 344614}, {"segments_info": [{"id": 2961254, "category_id": 62, "iscrowd": 0, "bbox": [143, 138, 76, 92], "area": 4767}, {"id": 4345957, "category_id": 63, "iscrowd": 0, "bbox": [247, 152, 220, 144], "area": 19275}, {"id": 4679265, "category_id": 64, "iscrowd": 0, "bbox": [365, 91, 37, 32], "area": 840}, {"id": 3224383, "category_id": 64, "iscrowd": 0, "bbox": [0, 170, 35, 75], "area": 1944}, {"id": 3558721, "category_id": 64, "iscrowd": 0, "bbox": [0, 81, 30, 77], "area": 1294}, {"id": 4346472, "category_id": 75, "iscrowd": 0, "bbox": [297, 235, 19, 11], "area": 117}, {"id": 4481957, "category_id": 84, "iscrowd": 0, "bbox": [239, 241, 55, 24], "area": 760}, {"id": 7831948, "category_id": 112, "iscrowd": 0, "bbox": [0, 51, 160, 177], "area": 14638}, {"id": 7974629, "category_id": 130, "iscrowd": 0, "bbox": [203, 0, 59, 158], "area": 1331}, {"id": 5926015, "category_id": 177, "iscrowd": 0, "bbox": [69, 49, 102, 30], "area": 459}, {"id": 9018803, "category_id": 180, "iscrowd": 0, "bbox": [149, 68, 58, 87], "area": 3535}, {"id": 13027266, "category_id": 181, "iscrowd": 0, "bbox": [0, 38, 197, 173], "area": 8393}, {"id": 3760531, "category_id": 189, "iscrowd": 0, "bbox": [171, 157, 155, 173], "area": 7868}, {"id": 7825772, "category_id": 191, "iscrowd": 0, "bbox": [0, 269, 92, 64], "area": 4369}, {"id": 5471385, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 278], "area": 62106}, {"id": 8025722, "category_id": 200, "iscrowd": 0, "bbox": [0, 191, 500, 142], "area": 33475}], "file_name": "000000344621.png", "image_id": 344621}, {"segments_info": [{"id": 6586519, "category_id": 61, "iscrowd": 0, "bbox": [226, 157, 194, 107], "area": 18004}, {"id": 726823, "category_id": 79, "iscrowd": 0, "bbox": [51, 23, 536, 330], "area": 143907}, {"id": 289, "category_id": 177, "iscrowd": 0, "bbox": [0, 253, 640, 108], "area": 2787}], "file_name": "000000344795.png", "image_id": 344795}, {"segments_info": [{"id": 6254714, "category_id": 7, "iscrowd": 0, "bbox": [144, 52, 362, 327], "area": 53819}, {"id": 6582131, "category_id": 95, "iscrowd": 0, "bbox": [179, 0, 420, 116], "area": 24037}, {"id": 6844795, "category_id": 125, "iscrowd": 0, "bbox": [0, 66, 597, 361], "area": 50853}, {"id": 5791337, "category_id": 147, "iscrowd": 0, "bbox": [0, 47, 476, 380], "area": 31716}, {"id": 3301208, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 259], "area": 30404}, {"id": 14342866, "category_id": 187, "iscrowd": 0, "bbox": [272, 0, 88, 11], "area": 570}, {"id": 3366487, "category_id": 193, "iscrowd": 0, "bbox": [391, 48, 249, 379], "area": 26330}], "file_name": "000000344816.png", "image_id": 344816}, {"segments_info": [{"id": 9800896, "category_id": 3, "iscrowd": 0, "bbox": [314, 156, 30, 7], "area": 147}, {"id": 9271396, "category_id": 3, "iscrowd": 0, "bbox": [7, 150, 10, 12], "area": 69}, {"id": 9925460, "category_id": 3, "iscrowd": 0, "bbox": [390, 156, 14, 7], "area": 83}, {"id": 8287127, "category_id": 3, "iscrowd": 0, "bbox": [29, 150, 20, 11], "area": 146}, {"id": 9928322, "category_id": 3, "iscrowd": 0, "bbox": [291, 154, 18, 9], "area": 127}, {"id": 7304558, "category_id": 8, "iscrowd": 0, "bbox": [290, 152, 20, 12], "area": 53}, {"id": 2699074, "category_id": 19, "iscrowd": 0, "bbox": [432, 163, 78, 100], "area": 684}, {"id": 3817562, "category_id": 19, "iscrowd": 0, "bbox": [383, 144, 52, 116], "area": 2871}, {"id": 3357534, "category_id": 19, "iscrowd": 0, "bbox": [417, 166, 116, 93], "area": 4857}, {"id": 6186626, "category_id": 151, "iscrowd": 0, "bbox": [434, 161, 62, 19], "area": 589}, {"id": 6516315, "category_id": 184, "iscrowd": 0, "bbox": [0, 66, 640, 109], "area": 41693}, {"id": 9740964, "category_id": 185, "iscrowd": 0, "bbox": [0, 171, 612, 245], "area": 11721}, {"id": 15642748, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 111], "area": 56529}, {"id": 5085566, "category_id": 193, "iscrowd": 0, "bbox": [0, 152, 640, 264], "area": 97311}, {"id": 7046829, "category_id": 194, "iscrowd": 0, "bbox": [0, 220, 497, 180], "area": 22491}], "file_name": "000000344888.png", "image_id": 344888}, {"segments_info": [{"id": 11709608, "category_id": 3, "iscrowd": 0, "bbox": [363, 195, 28, 40], "area": 636}, {"id": 9471356, "category_id": 3, "iscrowd": 0, "bbox": [428, 195, 52, 43], "area": 1799}, {"id": 6773587, "category_id": 3, "iscrowd": 0, "bbox": [381, 196, 57, 40], "area": 1731}, {"id": 5791617, "category_id": 11, "iscrowd": 0, "bbox": [110, 3, 360, 628], "area": 130247}, {"id": 12761011, "category_id": 149, "iscrowd": 0, "bbox": [13, 231, 467, 183], "area": 18818}, {"id": 7041394, "category_id": 184, "iscrowd": 0, "bbox": [441, 40, 39, 159], "area": 3974}, {"id": 11250609, "category_id": 185, "iscrowd": 0, "bbox": [0, 14, 102, 258], "area": 8258}, {"id": 15726073, "category_id": 187, "iscrowd": 0, "bbox": [135, 0, 345, 72], "area": 10350}, {"id": 9475989, "category_id": 191, "iscrowd": 0, "bbox": [0, 326, 480, 314], "area": 75284}, {"id": 11906990, "category_id": 197, "iscrowd": 0, "bbox": [10, 0, 456, 236], "area": 18227}], "file_name": "000000344909.png", "image_id": 344909}, {"segments_info": [{"id": 5529711, "category_id": 1, "iscrowd": 0, "bbox": [459, 268, 3, 11], "area": 20}, {"id": 6319244, "category_id": 1, "iscrowd": 0, "bbox": [372, 268, 7, 16], "area": 75}, {"id": 6386834, "category_id": 1, "iscrowd": 0, "bbox": [419, 268, 5, 11], "area": 34}, {"id": 6976640, "category_id": 1, "iscrowd": 0, "bbox": [494, 273, 5, 7], "area": 25}, {"id": 4542565, "category_id": 1, "iscrowd": 0, "bbox": [472, 271, 3, 4], "area": 6}, {"id": 6912659, "category_id": 1, "iscrowd": 0, "bbox": [428, 272, 7, 7], "area": 21}, {"id": 6647676, "category_id": 1, "iscrowd": 0, "bbox": [380, 266, 5, 14], "area": 34}, {"id": 7566717, "category_id": 1, "iscrowd": 0, "bbox": [391, 271, 3, 7], "area": 16}, {"id": 7834518, "category_id": 1, "iscrowd": 0, "bbox": [384, 266, 5, 16], "area": 52}, {"id": 5528941, "category_id": 1, "iscrowd": 0, "bbox": [378, 268, 4, 14], "area": 29}, {"id": 5069422, "category_id": 1, "iscrowd": 0, "bbox": [462, 268, 3, 11], "area": 19}, {"id": 5923697, "category_id": 1, "iscrowd": 0, "bbox": [414, 269, 5, 10], "area": 33}, {"id": 5985115, "category_id": 1, "iscrowd": 0, "bbox": [500, 274, 6, 5], "area": 20}, {"id": 10073274, "category_id": 1, "iscrowd": 1, "bbox": [462, 267, 131, 30], "area": 1446}, {"id": 3355958, "category_id": 4, "iscrowd": 0, "bbox": [367, 311, 85, 66], "area": 2905}, {"id": 4015429, "category_id": 8, "iscrowd": 0, "bbox": [151, 289, 126, 74], "area": 3865}, {"id": 10398635, "category_id": 9, "iscrowd": 0, "bbox": [165, 164, 35, 130], "area": 788}, {"id": 11319485, "category_id": 9, "iscrowd": 0, "bbox": [333, 209, 40, 74], "area": 526}, {"id": 11981014, "category_id": 9, "iscrowd": 0, "bbox": [208, 273, 60, 13], "area": 485}, {"id": 13030875, "category_id": 9, "iscrowd": 0, "bbox": [282, 276, 45, 15], "area": 400}, {"id": 12300452, "category_id": 9, "iscrowd": 0, "bbox": [572, 265, 15, 5], "area": 43}, {"id": 8298675, "category_id": 9, "iscrowd": 0, "bbox": [226, 281, 61, 18], "area": 565}, {"id": 12045260, "category_id": 9, "iscrowd": 0, "bbox": [299, 263, 52, 25], "area": 514}, {"id": 12169378, "category_id": 9, "iscrowd": 0, "bbox": [602, 264, 34, 10], "area": 213}, {"id": 4411227, "category_id": 15, "iscrowd": 0, "bbox": [116, 335, 105, 52], "area": 3288}, {"id": 11912137, "category_id": 28, "iscrowd": 0, "bbox": [469, 267, 11, 6], "area": 34}, {"id": 9602410, "category_id": 28, "iscrowd": 0, "bbox": [618, 266, 3, 2], "area": 4}, {"id": 7763352, "category_id": 38, "iscrowd": 0, "bbox": [358, 229, 8, 5], "area": 29}, {"id": 6513257, "category_id": 38, "iscrowd": 0, "bbox": [308, 167, 4, 4], "area": 12}, {"id": 12306391, "category_id": 38, "iscrowd": 0, "bbox": [334, 203, 4, 4], "area": 11}, {"id": 10594996, "category_id": 38, "iscrowd": 0, "bbox": [386, 253, 7, 3], "area": 13}, {"id": 11318486, "category_id": 38, "iscrowd": 0, "bbox": [311, 184, 15, 5], "area": 39}, {"id": 10265017, "category_id": 38, "iscrowd": 0, "bbox": [295, 144, 2, 2], "area": 3}, {"id": 12638678, "category_id": 38, "iscrowd": 0, "bbox": [346, 214, 4, 3], "area": 8}, {"id": 8820378, "category_id": 62, "iscrowd": 0, "bbox": [605, 274, 21, 15], "area": 114}, {"id": 10604253, "category_id": 154, "iscrowd": 0, "bbox": [0, 264, 640, 139], "area": 47296}, {"id": 11120537, "category_id": 155, "iscrowd": 0, "bbox": [162, 251, 478, 37], "area": 7130}, {"id": 14804440, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 259], "area": 150262}, {"id": 11979467, "category_id": 191, "iscrowd": 0, "bbox": [0, 346, 640, 46], "area": 10245}, {"id": 9280158, "category_id": 197, "iscrowd": 0, "bbox": [0, 158, 193, 192], "area": 26423}], "file_name": "000000345027.png", "image_id": 345027}, {"segments_info": [{"id": 4736846, "category_id": 1, "iscrowd": 0, "bbox": [206, 29, 393, 450], "area": 85035}, {"id": 9278358, "category_id": 62, "iscrowd": 0, "bbox": [514, 291, 113, 188], "area": 5111}, {"id": 2895150, "category_id": 72, "iscrowd": 0, "bbox": [90, 105, 146, 172], "area": 22286}, {"id": 9934234, "category_id": 73, "iscrowd": 0, "bbox": [30, 150, 191, 146], "area": 4367}, {"id": 2237221, "category_id": 76, "iscrowd": 0, "bbox": [225, 322, 150, 26], "area": 2713}, {"id": 4351933, "category_id": 130, "iscrowd": 0, "bbox": [0, 46, 417, 214], "area": 9142}, {"id": 1908782, "category_id": 141, "iscrowd": 0, "bbox": [615, 341, 25, 38], "area": 650}, {"id": 6976373, "category_id": 180, "iscrowd": 0, "bbox": [555, 0, 85, 309], "area": 21181}, {"id": 2763565, "category_id": 189, "iscrowd": 0, "bbox": [0, 241, 430, 238], "area": 46836}, {"id": 9081503, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 479], "area": 93604}], "file_name": "000000345252.png", "image_id": 345252}, {"segments_info": [{"id": 2438475, "category_id": 25, "iscrowd": 0, "bbox": [331, 334, 109, 241], "area": 8740}, {"id": 1713720, "category_id": 25, "iscrowd": 0, "bbox": [134, 337, 108, 231], "area": 7624}, {"id": 2569794, "category_id": 184, "iscrowd": 0, "bbox": [432, 448, 153, 58], "area": 3998}, {"id": 14875388, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 585, 322], "area": 173359}, {"id": 9151671, "category_id": 192, "iscrowd": 0, "bbox": [0, 271, 585, 92], "area": 33466}, {"id": 2637656, "category_id": 193, "iscrowd": 0, "bbox": [0, 453, 585, 187], "area": 94159}], "file_name": "000000345261.png", "image_id": 345261}, {"segments_info": [{"id": 5461347, "category_id": 1, "iscrowd": 0, "bbox": [0, 101, 268, 354], "area": 61008}, {"id": 9016233, "category_id": 1, "iscrowd": 0, "bbox": [367, 117, 273, 343], "area": 64128}, {"id": 2565674, "category_id": 44, "iscrowd": 0, "bbox": [119, 195, 13, 43], "area": 309}, {"id": 4474710, "category_id": 47, "iscrowd": 0, "bbox": [242, 286, 22, 14], "area": 256}, {"id": 9079191, "category_id": 47, "iscrowd": 0, "bbox": [329, 383, 71, 97], "area": 6156}, {"id": 5328737, "category_id": 47, "iscrowd": 0, "bbox": [411, 264, 22, 25], "area": 327}, {"id": 4540504, "category_id": 47, "iscrowd": 0, "bbox": [259, 270, 32, 29], "area": 843}, {"id": 3158321, "category_id": 50, "iscrowd": 0, "bbox": [0, 454, 47, 26], "area": 262}, {"id": 9146782, "category_id": 67, "iscrowd": 0, "bbox": [1, 386, 637, 88], "area": 14191}, {"id": 3485741, "category_id": 77, "iscrowd": 0, "bbox": [153, 261, 48, 86], "area": 2314}, {"id": 3357499, "category_id": 86, "iscrowd": 0, "bbox": [319, 206, 29, 41], "area": 1005}, {"id": 3686473, "category_id": 119, "iscrowd": 0, "bbox": [306, 171, 54, 55], "area": 1184}, {"id": 2241612, "category_id": 130, "iscrowd": 0, "bbox": [536, 82, 78, 47], "area": 950}, {"id": 4081744, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 153, 238], "area": 16196}, {"id": 3225395, "category_id": 186, "iscrowd": 0, "bbox": [27, 0, 613, 34], "area": 14410}, {"id": 13290965, "category_id": 195, "iscrowd": 0, "bbox": [394, 474, 74, 6], "area": 442}, {"id": 4148570, "category_id": 196, "iscrowd": 0, "bbox": [31, 468, 609, 12], "area": 961}, {"id": 5002848, "category_id": 199, "iscrowd": 0, "bbox": [144, 13, 496, 244], "area": 78268}], "file_name": "000000345356.png", "image_id": 345356}, {"segments_info": [{"id": 4023201, "category_id": 1, "iscrowd": 0, "bbox": [275, 38, 150, 305], "area": 22973}, {"id": 6385835, "category_id": 1, "iscrowd": 0, "bbox": [46, 91, 248, 190], "area": 18114}, {"id": 6783151, "category_id": 3, "iscrowd": 0, "bbox": [447, 54, 30, 36], "area": 736}, {"id": 10272490, "category_id": 47, "iscrowd": 0, "bbox": [79, 212, 18, 27], "area": 389}, {"id": 11389417, "category_id": 47, "iscrowd": 0, "bbox": [48, 190, 18, 21], "area": 169}, {"id": 9086420, "category_id": 47, "iscrowd": 0, "bbox": [84, 206, 19, 30], "area": 287}, {"id": 9680095, "category_id": 47, "iscrowd": 0, "bbox": [199, 251, 25, 32], "area": 656}, {"id": 11188950, "category_id": 50, "iscrowd": 0, "bbox": [112, 187, 85, 56], "area": 92}, {"id": 6715556, "category_id": 61, "iscrowd": 0, "bbox": [144, 261, 45, 17], "area": 495}, {"id": 6253198, "category_id": 61, "iscrowd": 0, "bbox": [118, 233, 28, 19], "area": 290}, {"id": 6122671, "category_id": 67, "iscrowd": 0, "bbox": [0, 192, 495, 162], "area": 37669}, {"id": 12044504, "category_id": 112, "iscrowd": 0, "bbox": [155, 0, 71, 148], "area": 9909}, {"id": 8890060, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 500, 185], "area": 46578}, {"id": 3229812, "category_id": 184, "iscrowd": 0, "bbox": [438, 0, 44, 70], "area": 1425}, {"id": 6119854, "category_id": 189, "iscrowd": 0, "bbox": [0, 334, 500, 24], "area": 1844}, {"id": 7308721, "category_id": 191, "iscrowd": 0, "bbox": [168, 90, 301, 84], "area": 3619}, {"id": 2511480, "category_id": 193, "iscrowd": 0, "bbox": [0, 33, 500, 319], "area": 28912}], "file_name": "000000345361.png", "image_id": 345361}, {"segments_info": [{"id": 5988756, "category_id": 1, "iscrowd": 0, "bbox": [1, 66, 458, 172], "area": 46227}, {"id": 3161724, "category_id": 1, "iscrowd": 0, "bbox": [1, 179, 496, 301], "area": 109783}, {"id": 5598140, "category_id": 65, "iscrowd": 0, "bbox": [181, 1, 459, 479], "area": 125773}, {"id": 2571125, "category_id": 93, "iscrowd": 0, "bbox": [0, 270, 38, 210], "area": 272}, {"id": 3018908, "category_id": 141, "iscrowd": 0, "bbox": [235, 66, 263, 414], "area": 3352}, {"id": 9883632, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 269, 270], "area": 19687}], "file_name": "000000345385.png", "image_id": 345385}, {"segments_info": [{"id": 6848675, "category_id": 1, "iscrowd": 0, "bbox": [9, 1, 491, 366], "area": 79905}, {"id": 6651237, "category_id": 32, "iscrowd": 0, "bbox": [149, 164, 89, 207], "area": 7895}, {"id": 921877, "category_id": 77, "iscrowd": 0, "bbox": [236, 126, 264, 142], "area": 35680}, {"id": 4154229, "category_id": 112, "iscrowd": 0, "bbox": [307, 0, 193, 126], "area": 22748}, {"id": 2312288, "category_id": 199, "iscrowd": 0, "bbox": [258, 0, 69, 127], "area": 3984}], "file_name": "000000345397.png", "image_id": 345397}, {"segments_info": [{"id": 6974821, "category_id": 1, "iscrowd": 0, "bbox": [0, 2, 62, 63], "area": 2830}, {"id": 12302526, "category_id": 1, "iscrowd": 0, "bbox": [110, 46, 293, 270], "area": 22382}, {"id": 5855320, "category_id": 1, "iscrowd": 0, "bbox": [443, 0, 57, 63], "area": 2766}, {"id": 4804004, "category_id": 1, "iscrowd": 0, "bbox": [378, 0, 78, 64], "area": 3601}, {"id": 3823209, "category_id": 1, "iscrowd": 0, "bbox": [81, 0, 107, 89], "area": 3619}, {"id": 3618126, "category_id": 1, "iscrowd": 0, "bbox": [172, 1, 64, 60], "area": 1579}, {"id": 4081733, "category_id": 27, "iscrowd": 0, "bbox": [85, 46, 36, 50], "area": 1402}, {"id": 10470342, "category_id": 37, "iscrowd": 0, "bbox": [125, 102, 11, 15], "area": 74}, {"id": 7503755, "category_id": 39, "iscrowd": 0, "bbox": [355, 0, 8, 86], "area": 475}, {"id": 3493230, "category_id": 40, "iscrowd": 0, "bbox": [286, 107, 44, 45], "area": 1301}, {"id": 6242080, "category_id": 47, "iscrowd": 0, "bbox": [374, 5, 9, 13], "area": 108}, {"id": 6462621, "category_id": 145, "iscrowd": 0, "bbox": [0, 74, 500, 301], "area": 119811}, {"id": 5002319, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 500, 100], "area": 21005}], "file_name": "000000345466.png", "image_id": 345466}, {"segments_info": [{"id": 1070247, "category_id": 60, "iscrowd": 0, "bbox": [295, 409, 31, 20], "area": 472}, {"id": 340857, "category_id": 60, "iscrowd": 0, "bbox": [223, 381, 33, 16], "area": 398}, {"id": 733025, "category_id": 60, "iscrowd": 0, "bbox": [72, 393, 31, 17], "area": 320}, {"id": 803453, "category_id": 60, "iscrowd": 0, "bbox": [174, 382, 27, 19], "area": 425}, {"id": 3183059, "category_id": 60, "iscrowd": 0, "bbox": [240, 244, 26, 18], "area": 263}, {"id": 7981557, "category_id": 60, "iscrowd": 0, "bbox": [227, 325, 30, 22], "area": 540}, {"id": 602206, "category_id": 60, "iscrowd": 0, "bbox": [252, 373, 40, 28], "area": 819}, {"id": 1733079, "category_id": 60, "iscrowd": 0, "bbox": [374, 325, 21, 28], "area": 398}, {"id": 940992, "category_id": 60, "iscrowd": 0, "bbox": [423, 326, 24, 28], "area": 527}, {"id": 1928382, "category_id": 60, "iscrowd": 0, "bbox": [328, 414, 37, 18], "area": 555}, {"id": 941767, "category_id": 60, "iscrowd": 0, "bbox": [406, 315, 17, 14], "area": 167}, {"id": 733300, "category_id": 60, "iscrowd": 0, "bbox": [332, 404, 35, 16], "area": 327}, {"id": 1469397, "category_id": 60, "iscrowd": 0, "bbox": [406, 327, 23, 26], "area": 370}, {"id": 4157339, "category_id": 60, "iscrowd": 1, "bbox": [14, 144, 446, 459], "area": 76148}, {"id": 2368579, "category_id": 100, "iscrowd": 0, "bbox": [327, 542, 153, 98], "area": 4153}, {"id": 3694719, "category_id": 156, "iscrowd": 0, "bbox": [0, 78, 480, 552], "area": 141207}, {"id": 3379372, "category_id": 195, "iscrowd": 0, "bbox": [50, 14, 406, 577], "area": 20794}, {"id": 1648718, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 55242}], "file_name": "000000345469.png", "image_id": 345469}, {"segments_info": [{"id": 5004967, "category_id": 1, "iscrowd": 0, "bbox": [457, 28, 167, 136], "area": 16578}, {"id": 6318964, "category_id": 50, "iscrowd": 0, "bbox": [115, 30, 169, 87], "area": 3230}, {"id": 4869981, "category_id": 50, "iscrowd": 0, "bbox": [388, 111, 105, 90], "area": 5748}, {"id": 3822727, "category_id": 122, "iscrowd": 0, "bbox": [0, 416, 252, 207], "area": 29943}, {"id": 5270448, "category_id": 196, "iscrowd": 0, "bbox": [55, 20, 486, 549], "area": 149555}], "file_name": "000000345941.png", "image_id": 345941}, {"segments_info": [{"id": 8280926, "category_id": 1, "iscrowd": 0, "bbox": [38, 321, 30, 77], "area": 1063}, {"id": 9003617, "category_id": 1, "iscrowd": 0, "bbox": [12, 323, 28, 56], "area": 797}, {"id": 8018781, "category_id": 1, "iscrowd": 0, "bbox": [168, 317, 25, 83], "area": 920}, {"id": 6109261, "category_id": 1, "iscrowd": 0, "bbox": [180, 317, 102, 271], "area": 10188}, {"id": 6569619, "category_id": 1, "iscrowd": 0, "bbox": [64, 321, 29, 39], "area": 385}, {"id": 4928822, "category_id": 1, "iscrowd": 0, "bbox": [145, 319, 35, 89], "area": 1610}, {"id": 10249819, "category_id": 1, "iscrowd": 0, "bbox": [190, 317, 19, 34], "area": 356}, {"id": 7755874, "category_id": 1, "iscrowd": 0, "bbox": [243, 326, 44, 176], "area": 3026}, {"id": 5783617, "category_id": 1, "iscrowd": 0, "bbox": [61, 303, 96, 275], "area": 10559}, {"id": 9531244, "category_id": 1, "iscrowd": 0, "bbox": [133, 324, 11, 20], "area": 133}, {"id": 7228753, "category_id": 1, "iscrowd": 0, "bbox": [286, 316, 77, 256], "area": 9678}, {"id": 12489097, "category_id": 3, "iscrowd": 0, "bbox": [345, 317, 81, 49], "area": 2876}, {"id": 11897731, "category_id": 3, "iscrowd": 0, "bbox": [275, 327, 32, 31], "area": 787}, {"id": 9267554, "category_id": 8, "iscrowd": 0, "bbox": [341, 316, 86, 70], "area": 1433}, {"id": 5257549, "category_id": 27, "iscrowd": 0, "bbox": [194, 360, 64, 121], "area": 4219}, {"id": 6044729, "category_id": 27, "iscrowd": 0, "bbox": [75, 343, 67, 109], "area": 4885}, {"id": 2891039, "category_id": 27, "iscrowd": 0, "bbox": [251, 367, 29, 43], "area": 580}, {"id": 6045774, "category_id": 27, "iscrowd": 0, "bbox": [307, 369, 48, 82], "area": 3109}, {"id": 14595008, "category_id": 28, "iscrowd": 0, "bbox": [38, 307, 40, 17], "area": 394}, {"id": 11173774, "category_id": 28, "iscrowd": 0, "bbox": [272, 197, 155, 112], "area": 11901}, {"id": 10451309, "category_id": 184, "iscrowd": 0, "bbox": [0, 271, 408, 70], "area": 6693}, {"id": 16308428, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 311], "area": 115636}, {"id": 14262926, "category_id": 192, "iscrowd": 0, "bbox": [65, 294, 57, 14], "area": 398}, {"id": 10451836, "category_id": 194, "iscrowd": 0, "bbox": [0, 340, 427, 300], "area": 73708}, {"id": 10910831, "category_id": 197, "iscrowd": 0, "bbox": [251, 291, 127, 52], "area": 2423}], "file_name": "000000346232.png", "image_id": 346232}, {"segments_info": [{"id": 2304068, "category_id": 44, "iscrowd": 0, "bbox": [462, 73, 100, 360], "area": 27381}, {"id": 12367793, "category_id": 72, "iscrowd": 0, "bbox": [327, 0, 293, 282], "area": 56745}, {"id": 1713750, "category_id": 74, "iscrowd": 0, "bbox": [86, 388, 190, 81], "area": 11821}, {"id": 724761, "category_id": 76, "iscrowd": 0, "bbox": [128, 304, 338, 131], "area": 27345}, {"id": 133917, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 264, 375], "area": 46834}, {"id": 274561, "category_id": 189, "iscrowd": 0, "bbox": [0, 305, 640, 175], "area": 34770}, {"id": 336978, "category_id": 195, "iscrowd": 0, "bbox": [124, 234, 254, 109], "area": 4267}, {"id": 138838, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 325], "area": 43909}], "file_name": "000000346638.png", "image_id": 346638}, {"segments_info": [{"id": 1318704, "category_id": 1, "iscrowd": 0, "bbox": [14, 5, 269, 365], "area": 77192}, {"id": 4089242, "category_id": 1, "iscrowd": 0, "bbox": [376, 375, 98, 124], "area": 4286}, {"id": 2380187, "category_id": 1, "iscrowd": 0, "bbox": [3, 377, 61, 72], "area": 2944}, {"id": 1191513, "category_id": 1, "iscrowd": 0, "bbox": [316, 129, 234, 238], "area": 26903}, {"id": 2510207, "category_id": 1, "iscrowd": 0, "bbox": [267, 157, 106, 201], "area": 10411}, {"id": 3297662, "category_id": 1, "iscrowd": 0, "bbox": [187, 376, 149, 207], "area": 25651}, {"id": 924462, "category_id": 1, "iscrowd": 0, "bbox": [454, 375, 96, 147], "area": 11403}, {"id": 2834790, "category_id": 46, "iscrowd": 0, "bbox": [105, 529, 71, 111], "area": 6259}, {"id": 4421015, "category_id": 47, "iscrowd": 0, "bbox": [112, 389, 45, 99], "area": 3843}, {"id": 2239294, "category_id": 50, "iscrowd": 0, "bbox": [421, 501, 54, 31], "area": 879}, {"id": 2705251, "category_id": 50, "iscrowd": 0, "bbox": [24, 448, 18, 41], "area": 415}, {"id": 4877208, "category_id": 50, "iscrowd": 0, "bbox": [245, 197, 77, 37], "area": 999}, {"id": 1917023, "category_id": 50, "iscrowd": 0, "bbox": [148, 473, 13, 46], "area": 267}, {"id": 1579563, "category_id": 61, "iscrowd": 0, "bbox": [24, 492, 108, 101], "area": 7598}, {"id": 3360620, "category_id": 61, "iscrowd": 0, "bbox": [413, 513, 131, 81], "area": 8302}, {"id": 2502247, "category_id": 61, "iscrowd": 0, "bbox": [208, 552, 168, 88], "area": 11603}, {"id": 2307959, "category_id": 63, "iscrowd": 0, "bbox": [296, 378, 71, 105], "area": 3658}, {"id": 3691145, "category_id": 63, "iscrowd": 0, "bbox": [261, 184, 218, 96], "area": 5253}, {"id": 4551833, "category_id": 133, "iscrowd": 0, "bbox": [305, 0, 171, 122], "area": 18279}, {"id": 7180463, "category_id": 189, "iscrowd": 0, "bbox": [0, 377, 550, 263], "area": 27763}, {"id": 2574457, "category_id": 196, "iscrowd": 0, "bbox": [154, 403, 396, 237], "area": 4006}, {"id": 10139859, "category_id": 199, "iscrowd": 0, "bbox": [59, 0, 491, 210], "area": 36619}], "file_name": "000000346703.png", "image_id": 346703}, {"segments_info": [{"id": 2566954, "category_id": 52, "iscrowd": 0, "bbox": [261, 31, 54, 52], "area": 1582}, {"id": 2900027, "category_id": 52, "iscrowd": 0, "bbox": [0, 230, 140, 201], "area": 19337}, {"id": 2437166, "category_id": 52, "iscrowd": 0, "bbox": [233, 125, 13, 39], "area": 381}, {"id": 2501675, "category_id": 52, "iscrowd": 0, "bbox": [168, 98, 67, 102], "area": 4798}, {"id": 2764601, "category_id": 122, "iscrowd": 0, "bbox": [150, 10, 171, 302], "area": 16926}, {"id": 3356991, "category_id": 177, "iscrowd": 0, "bbox": [0, 170, 184, 312], "area": 10503}, {"id": 3227462, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 333, 500], "area": 108244}, {"id": 2830127, "category_id": 193, "iscrowd": 0, "bbox": [0, 466, 170, 34], "area": 4462}], "file_name": "000000346707.png", "image_id": 346707}, {"segments_info": [{"id": 1655392, "category_id": 22, "iscrowd": 0, "bbox": [289, 2, 350, 405], "area": 67388}, {"id": 1327973, "category_id": 22, "iscrowd": 0, "bbox": [310, 257, 86, 155], "area": 10096}, {"id": 1590111, "category_id": 22, "iscrowd": 0, "bbox": [25, 50, 293, 365], "area": 74271}, {"id": 618600, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 411], "area": 100832}, {"id": 3442877, "category_id": 194, "iscrowd": 0, "bbox": [0, 359, 640, 67], "area": 19194}], "file_name": "000000346905.png", "image_id": 346905}, {"segments_info": [{"id": 6248798, "category_id": 1, "iscrowd": 0, "bbox": [56, 40, 452, 380], "area": 107872}, {"id": 3753814, "category_id": 62, "iscrowd": 0, "bbox": [0, 234, 178, 192], "area": 13968}, {"id": 4672343, "category_id": 77, "iscrowd": 0, "bbox": [369, 222, 22, 35], "area": 479}, {"id": 6052957, "category_id": 84, "iscrowd": 0, "bbox": [410, 0, 230, 92], "area": 16255}, {"id": 6639162, "category_id": 84, "iscrowd": 0, "bbox": [427, 63, 213, 77], "area": 10150}, {"id": 1976110, "category_id": 189, "iscrowd": 0, "bbox": [436, 109, 204, 317], "area": 49392}, {"id": 12169896, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 482, 325], "area": 70390}], "file_name": "000000346968.png", "image_id": 346968}, {"segments_info": [{"id": 4799848, "category_id": 13, "iscrowd": 0, "bbox": [67, 40, 320, 319], "area": 82106}, {"id": 3358789, "category_id": 184, "iscrowd": 0, "bbox": [478, 313, 162, 114], "area": 9156}, {"id": 12626076, "category_id": 187, "iscrowd": 0, "bbox": [477, 0, 163, 408], "area": 57591}, {"id": 5201787, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 494, 427], "area": 105676}], "file_name": "000000347163.png", "image_id": 347163}, {"segments_info": [{"id": 7631266, "category_id": 1, "iscrowd": 0, "bbox": [167, 54, 253, 366], "area": 48893}, {"id": 9739451, "category_id": 65, "iscrowd": 0, "bbox": [109, 0, 318, 640], "area": 83264}, {"id": 7840977, "category_id": 130, "iscrowd": 0, "bbox": [42, 0, 103, 128], "area": 5944}, {"id": 5859498, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 384, 239], "area": 13193}, {"id": 3151660, "category_id": 200, "iscrowd": 0, "bbox": [0, 232, 407, 408], "area": 97884}], "file_name": "000000347174.png", "image_id": 347174}, {"segments_info": [{"id": 1450819, "category_id": 1, "iscrowd": 0, "bbox": [303, 135, 71, 277], "area": 13587}, {"id": 4539751, "category_id": 1, "iscrowd": 0, "bbox": [248, 127, 33, 74], "area": 1005}, {"id": 5260897, "category_id": 1, "iscrowd": 0, "bbox": [240, 127, 22, 110], "area": 1115}, {"id": 4540519, "category_id": 1, "iscrowd": 0, "bbox": [253, 154, 63, 86], "area": 3313}, {"id": 5070718, "category_id": 1, "iscrowd": 0, "bbox": [0, 26, 319, 468], "area": 95196}, {"id": 7045281, "category_id": 32, "iscrowd": 0, "bbox": [150, 248, 148, 252], "area": 9568}, {"id": 3099277, "category_id": 47, "iscrowd": 0, "bbox": [245, 235, 58, 104], "area": 5135}, {"id": 1120811, "category_id": 62, "iscrowd": 0, "bbox": [292, 349, 51, 79], "area": 1069}, {"id": 8031160, "category_id": 62, "iscrowd": 0, "bbox": [178, 178, 71, 64], "area": 2484}, {"id": 9540276, "category_id": 112, "iscrowd": 0, "bbox": [195, 96, 61, 117], "area": 3444}, {"id": 7900586, "category_id": 130, "iscrowd": 0, "bbox": [194, 25, 132, 34], "area": 760}, {"id": 6190754, "category_id": 177, "iscrowd": 0, "bbox": [180, 15, 195, 156], "area": 5405}, {"id": 15264495, "category_id": 181, "iscrowd": 0, "bbox": [231, 123, 29, 53], "area": 636}, {"id": 10596545, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 375, 129], "area": 15599}, {"id": 4344414, "category_id": 190, "iscrowd": 0, "bbox": [236, 208, 104, 246], "area": 912}, {"id": 10335181, "category_id": 199, "iscrowd": 0, "bbox": [0, 53, 375, 162], "area": 17905}], "file_name": "000000347254.png", "image_id": 347254}, {"segments_info": [{"id": 3021130, "category_id": 1, "iscrowd": 0, "bbox": [185, 331, 70, 141], "area": 4261}, {"id": 12237752, "category_id": 35, "iscrowd": 0, "bbox": [191, 456, 71, 25], "area": 288}, {"id": 15065567, "category_id": 159, "iscrowd": 0, "bbox": [0, 372, 427, 268], "area": 78639}, {"id": 3559505, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 189942}], "file_name": "000000347265.png", "image_id": 347265}, {"segments_info": [{"id": 6510200, "category_id": 47, "iscrowd": 0, "bbox": [137, 6, 39, 114], "area": 3009}, {"id": 6381418, "category_id": 47, "iscrowd": 0, "bbox": [0, 1, 141, 185], "area": 20056}, {"id": 8155494, "category_id": 48, "iscrowd": 0, "bbox": [215, 4, 106, 144], "area": 2804}, {"id": 8351844, "category_id": 49, "iscrowd": 0, "bbox": [264, 17, 27, 136], "area": 1203}, {"id": 6716045, "category_id": 67, "iscrowd": 0, "bbox": [0, 2, 480, 637], "area": 274313}], "file_name": "000000347335.png", "image_id": 347335}, {"segments_info": [{"id": 3096675, "category_id": 1, "iscrowd": 0, "bbox": [1, 63, 94, 281], "area": 19214}, {"id": 6590360, "category_id": 55, "iscrowd": 0, "bbox": [72, 61, 331, 268], "area": 61553}, {"id": 14011333, "category_id": 109, "iscrowd": 0, "bbox": [431, 0, 69, 182], "area": 8425}, {"id": 3964260, "category_id": 122, "iscrowd": 0, "bbox": [0, 0, 467, 375], "area": 62163}, {"id": 5793395, "category_id": 177, "iscrowd": 0, "bbox": [330, 179, 170, 196], "area": 14751}], "file_name": "000000347370.png", "image_id": 347370}, {"segments_info": [{"id": 2177347, "category_id": 22, "iscrowd": 0, "bbox": [385, 200, 118, 88], "area": 7181}, {"id": 1782077, "category_id": 22, "iscrowd": 0, "bbox": [462, 144, 161, 138], "area": 15047}, {"id": 9481127, "category_id": 148, "iscrowd": 0, "bbox": [0, 169, 174, 19], "area": 1594}, {"id": 2841684, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 201], "area": 87106}, {"id": 15725288, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 66], "area": 24890}, {"id": 4760743, "category_id": 193, "iscrowd": 0, "bbox": [0, 168, 640, 141], "area": 61666}], "file_name": "000000347456.png", "image_id": 347456}, {"segments_info": [{"id": 10058092, "category_id": 6, "iscrowd": 0, "bbox": [245, 70, 313, 334], "area": 93948}, {"id": 6704460, "category_id": 8, "iscrowd": 0, "bbox": [149, 233, 34, 28], "area": 796}, {"id": 6245701, "category_id": 125, "iscrowd": 0, "bbox": [0, 223, 640, 257], "area": 34256}, {"id": 8216148, "category_id": 128, "iscrowd": 0, "bbox": [250, 206, 6, 9], "area": 25}, {"id": 6575189, "category_id": 161, "iscrowd": 0, "bbox": [32, 166, 78, 71], "area": 1389}, {"id": 16447215, "category_id": 185, "iscrowd": 0, "bbox": [18, 32, 170, 24], "area": 2827}, {"id": 16579060, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 186], "area": 54425}, {"id": 8415065, "category_id": 191, "iscrowd": 0, "bbox": [107, 325, 533, 155], "area": 43732}, {"id": 5854806, "category_id": 193, "iscrowd": 0, "bbox": [0, 233, 219, 150], "area": 20927}, {"id": 10785167, "category_id": 197, "iscrowd": 0, "bbox": [0, 42, 640, 248], "area": 42475}, {"id": 10129298, "category_id": 199, "iscrowd": 0, "bbox": [550, 182, 90, 107], "area": 8340}], "file_name": "000000347544.png", "image_id": 347544}, {"segments_info": [{"id": 3026993, "category_id": 21, "iscrowd": 0, "bbox": [103, 190, 13, 10], "area": 78}, {"id": 2435112, "category_id": 21, "iscrowd": 0, "bbox": [357, 197, 17, 10], "area": 106}, {"id": 3948097, "category_id": 21, "iscrowd": 0, "bbox": [85, 192, 10, 7], "area": 52}, {"id": 2698542, "category_id": 21, "iscrowd": 0, "bbox": [313, 196, 19, 12], "area": 138}, {"id": 3158065, "category_id": 21, "iscrowd": 0, "bbox": [124, 191, 13, 9], "area": 93}, {"id": 3421491, "category_id": 21, "iscrowd": 0, "bbox": [373, 200, 9, 7], "area": 39}, {"id": 2960685, "category_id": 21, "iscrowd": 0, "bbox": [279, 196, 11, 8], "area": 62}, {"id": 3881785, "category_id": 21, "iscrowd": 0, "bbox": [523, 202, 14, 9], "area": 55}, {"id": 4539458, "category_id": 21, "iscrowd": 0, "bbox": [450, 198, 20, 13], "area": 164}, {"id": 3356215, "category_id": 21, "iscrowd": 0, "bbox": [293, 195, 18, 10], "area": 104}, {"id": 2632233, "category_id": 21, "iscrowd": 0, "bbox": [343, 198, 12, 8], "area": 55}, {"id": 2236961, "category_id": 21, "iscrowd": 0, "bbox": [416, 197, 23, 14], "area": 190}, {"id": 2302498, "category_id": 21, "iscrowd": 0, "bbox": [508, 200, 21, 11], "area": 133}, {"id": 9474189, "category_id": 21, "iscrowd": 1, "bbox": [383, 189, 132, 43], "area": 2536}, {"id": 7633274, "category_id": 154, "iscrowd": 0, "bbox": [0, 186, 640, 241], "area": 136145}, {"id": 9406327, "category_id": 155, "iscrowd": 0, "bbox": [0, 153, 640, 55], "area": 21055}, {"id": 14141367, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 165], "area": 90761}, {"id": 3355442, "category_id": 192, "iscrowd": 0, "bbox": [184, 118, 456, 53], "area": 14151}, {"id": 5332315, "category_id": 193, "iscrowd": 0, "bbox": [221, 405, 419, 22], "area": 6983}, {"id": 1645337, "category_id": 198, "iscrowd": 0, "bbox": [0, 168, 29, 12], "area": 207}], "file_name": "000000347664.png", "image_id": 347664}, {"segments_info": [{"id": 9072752, "category_id": 65, "iscrowd": 0, "bbox": [270, 238, 166, 83], "area": 4644}, {"id": 1907741, "category_id": 65, "iscrowd": 0, "bbox": [10, 272, 94, 108], "area": 8883}, {"id": 10782595, "category_id": 109, "iscrowd": 0, "bbox": [513, 12, 127, 313], "area": 27351}, {"id": 12036004, "category_id": 181, "iscrowd": 0, "bbox": [220, 33, 244, 227], "area": 40476}, {"id": 2170409, "category_id": 189, "iscrowd": 0, "bbox": [391, 288, 104, 104], "area": 2930}, {"id": 1512982, "category_id": 190, "iscrowd": 0, "bbox": [48, 335, 592, 92], "area": 20918}, {"id": 6248544, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 375], "area": 78639}], "file_name": "000000347693.png", "image_id": 347693}, {"segments_info": [{"id": 1595025, "category_id": 18, "iscrowd": 0, "bbox": [162, 103, 254, 336], "area": 38495}, {"id": 173271, "category_id": 37, "iscrowd": 0, "bbox": [210, 80, 48, 45], "area": 1704}, {"id": 2185856, "category_id": 63, "iscrowd": 0, "bbox": [1, 68, 639, 412], "area": 195819}, {"id": 599370, "category_id": 141, "iscrowd": 0, "bbox": [31, 0, 420, 151], "area": 30105}, {"id": 4955067, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 285], "area": 38569}], "file_name": "000000347930.png", "image_id": 347930}, {"segments_info": [{"id": 3686209, "category_id": 87, "iscrowd": 0, "bbox": [0, 3, 640, 247], "area": 73532}, {"id": 8686224, "category_id": 100, "iscrowd": 0, "bbox": [62, 37, 395, 303], "area": 42602}, {"id": 12960705, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 81798}], "file_name": "000000348012.png", "image_id": 348012}, {"segments_info": [{"id": 9670283, "category_id": 70, "iscrowd": 0, "bbox": [6, 412, 133, 182], "area": 19120}, {"id": 8488583, "category_id": 70, "iscrowd": 0, "bbox": [453, 400, 132, 179], "area": 18912}, {"id": 9672856, "category_id": 70, "iscrowd": 0, "bbox": [238, 408, 124, 187], "area": 17175}, {"id": 9936284, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 588, 640], "area": 320736}], "file_name": "000000348045.png", "image_id": 348045}, {"segments_info": [{"id": 1909286, "category_id": 70, "iscrowd": 0, "bbox": [161, 291, 198, 134], "area": 14132}, {"id": 11644085, "category_id": 70, "iscrowd": 0, "bbox": [269, 227, 82, 28], "area": 792}, {"id": 3488321, "category_id": 70, "iscrowd": 0, "bbox": [236, 248, 120, 45], "area": 2150}, {"id": 9474209, "category_id": 70, "iscrowd": 0, "bbox": [280, 222, 69, 21], "area": 388}, {"id": 1975594, "category_id": 70, "iscrowd": 0, "bbox": [48, 368, 320, 241], "area": 43107}, {"id": 4210244, "category_id": 70, "iscrowd": 0, "bbox": [257, 234, 99, 40], "area": 1588}, {"id": 1842979, "category_id": 70, "iscrowd": 0, "bbox": [216, 266, 150, 77], "area": 7158}, {"id": 460551, "category_id": 70, "iscrowd": 0, "bbox": [0, 474, 374, 166], "area": 38649}, {"id": 5463141, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 480, 500], "area": 124348}, {"id": 14933208, "category_id": 181, "iscrowd": 0, "bbox": [271, 0, 209, 147], "area": 29791}, {"id": 6447717, "category_id": 190, "iscrowd": 0, "bbox": [302, 270, 178, 370], "area": 43943}], "file_name": "000000348216.png", "image_id": 348216}, {"segments_info": [{"id": 3290944, "category_id": 19, "iscrowd": 0, "bbox": [164, 386, 85, 97], "area": 3882}, {"id": 2960950, "category_id": 19, "iscrowd": 0, "bbox": [60, 183, 250, 328], "area": 51253}, {"id": 6130330, "category_id": 193, "iscrowd": 0, "bbox": [0, 434, 427, 206], "area": 68240}], "file_name": "000000348243.png", "image_id": 348243}, {"segments_info": [{"id": 2692108, "category_id": 73, "iscrowd": 0, "bbox": [314, 24, 282, 152], "area": 39368}, {"id": 7564909, "category_id": 74, "iscrowd": 0, "bbox": [484, 178, 98, 79], "area": 4743}, {"id": 6183247, "category_id": 75, "iscrowd": 0, "bbox": [9, 366, 69, 103], "area": 6110}, {"id": 5526360, "category_id": 77, "iscrowd": 0, "bbox": [481, 278, 41, 82], "area": 3208}, {"id": 8686211, "category_id": 84, "iscrowd": 0, "bbox": [141, 353, 62, 85], "area": 4399}, {"id": 5530735, "category_id": 84, "iscrowd": 0, "bbox": [171, 43, 131, 135], "area": 15008}, {"id": 10592914, "category_id": 100, "iscrowd": 0, "bbox": [104, 305, 117, 123], "area": 7213}, {"id": 660773, "category_id": 188, "iscrowd": 0, "bbox": [546, 0, 94, 127], "area": 5928}, {"id": 11117205, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 120051}, {"id": 7963786, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 548, 25], "area": 7276}, {"id": 10261912, "category_id": 195, "iscrowd": 0, "bbox": [520, 188, 120, 160], "area": 11786}, {"id": 266580, "category_id": 199, "iscrowd": 0, "bbox": [586, 5, 54, 328], "area": 8561}], "file_name": "000000348481.png", "image_id": 348481}, {"segments_info": [{"id": 1712425, "category_id": 19, "iscrowd": 0, "bbox": [36, 104, 335, 281], "area": 30419}, {"id": 2375241, "category_id": 19, "iscrowd": 0, "bbox": [443, 98, 143, 195], "area": 12035}, {"id": 2109498, "category_id": 19, "iscrowd": 0, "bbox": [264, 84, 156, 303], "area": 15991}, {"id": 1912119, "category_id": 19, "iscrowd": 0, "bbox": [184, 88, 370, 373], "area": 26227}, {"id": 5075088, "category_id": 86, "iscrowd": 0, "bbox": [4, 0, 605, 464], "area": 166797}, {"id": 3551057, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 44290}], "file_name": "000000348488.png", "image_id": 348488}, {"segments_info": [{"id": 7773636, "category_id": 51, "iscrowd": 0, "bbox": [61, 147, 319, 316], "area": 79036}, {"id": 4756421, "category_id": 52, "iscrowd": 0, "bbox": [0, 116, 243, 423], "area": 37509}, {"id": 1066367, "category_id": 67, "iscrowd": 0, "bbox": [5, 4, 378, 630], "area": 121567}, {"id": 867959, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 383, 640], "area": 6829}], "file_name": "000000348708.png", "image_id": 348708}, {"segments_info": [{"id": 3485476, "category_id": 1, "iscrowd": 0, "bbox": [568, 273, 31, 74], "area": 1181}, {"id": 9734016, "category_id": 1, "iscrowd": 0, "bbox": [251, 106, 23, 62], "area": 764}, {"id": 14407377, "category_id": 5, "iscrowd": 0, "bbox": [0, 27, 30, 38], "area": 451}, {"id": 14670548, "category_id": 5, "iscrowd": 0, "bbox": [0, 3, 161, 263], "area": 19106}, {"id": 3813923, "category_id": 33, "iscrowd": 0, "bbox": [562, 314, 12, 20], "area": 178}, {"id": 9602685, "category_id": 149, "iscrowd": 0, "bbox": [21, 172, 5, 13], "area": 17}, {"id": 16645372, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 60], "area": 28197}, {"id": 7765620, "category_id": 191, "iscrowd": 0, "bbox": [0, 64, 640, 398], "area": 148932}, {"id": 13157819, "category_id": 197, "iscrowd": 0, "bbox": [0, 30, 640, 296], "area": 95974}], "file_name": "000000348881.png", "image_id": 348881}, {"segments_info": [{"id": 11576750, "category_id": 49, "iscrowd": 0, "bbox": [308, 25, 37, 18], "area": 170}, {"id": 13875122, "category_id": 50, "iscrowd": 0, "bbox": [307, 1, 60, 23], "area": 304}, {"id": 2377867, "category_id": 60, "iscrowd": 0, "bbox": [274, 187, 47, 87], "area": 2673}, {"id": 2772878, "category_id": 60, "iscrowd": 0, "bbox": [242, 192, 43, 78], "area": 2405}, {"id": 3493771, "category_id": 60, "iscrowd": 0, "bbox": [225, 157, 38, 40], "area": 1181}, {"id": 3693462, "category_id": 60, "iscrowd": 0, "bbox": [286, 152, 25, 36], "area": 787}, {"id": 1909577, "category_id": 60, "iscrowd": 0, "bbox": [221, 120, 71, 35], "area": 1720}, {"id": 4152980, "category_id": 60, "iscrowd": 0, "bbox": [198, 164, 36, 40], "area": 967}, {"id": 2040379, "category_id": 60, "iscrowd": 0, "bbox": [48, 529, 130, 111], "area": 11530}, {"id": 3627924, "category_id": 60, "iscrowd": 0, "bbox": [207, 196, 47, 77], "area": 2259}, {"id": 2765138, "category_id": 60, "iscrowd": 0, "bbox": [75, 424, 120, 110], "area": 10474}, {"id": 2506877, "category_id": 60, "iscrowd": 0, "bbox": [306, 181, 37, 93], "area": 2240}, {"id": 3169175, "category_id": 60, "iscrowd": 0, "bbox": [256, 157, 31, 41], "area": 830}, {"id": 2238534, "category_id": 60, "iscrowd": 0, "bbox": [1, 420, 75, 106], "area": 5377}, {"id": 6184043, "category_id": 60, "iscrowd": 1, "bbox": [0, 38, 429, 600], "area": 13551}, {"id": 5860500, "category_id": 67, "iscrowd": 0, "bbox": [1, 0, 479, 632], "area": 125414}, {"id": 12035744, "category_id": 100, "iscrowd": 0, "bbox": [0, 40, 402, 436], "area": 71224}, {"id": 4938884, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 3376}, {"id": 10065062, "category_id": 195, "iscrowd": 0, "bbox": [194, 0, 286, 356], "area": 27425}, {"id": 8486028, "category_id": 196, "iscrowd": 0, "bbox": [260, 0, 109, 183], "area": 2688}], "file_name": "000000349152.png", "image_id": 349152}, {"segments_info": [{"id": 5255989, "category_id": 1, "iscrowd": 0, "bbox": [399, 203, 11, 32], "area": 213}, {"id": 5980959, "category_id": 1, "iscrowd": 0, "bbox": [385, 211, 12, 26], "area": 205}, {"id": 5396327, "category_id": 1, "iscrowd": 0, "bbox": [19, 126, 176, 443], "area": 16190}, {"id": 4469544, "category_id": 1, "iscrowd": 0, "bbox": [370, 201, 19, 35], "area": 296}, {"id": 11377550, "category_id": 1, "iscrowd": 0, "bbox": [204, 196, 26, 36], "area": 663}, {"id": 6177060, "category_id": 1, "iscrowd": 0, "bbox": [350, 202, 20, 31], "area": 344}, {"id": 6251662, "category_id": 1, "iscrowd": 0, "bbox": [169, 194, 22, 36], "area": 404}, {"id": 3755867, "category_id": 15, "iscrowd": 0, "bbox": [3, 204, 308, 427], "area": 74593}, {"id": 3024935, "category_id": 31, "iscrowd": 0, "bbox": [233, 286, 28, 152], "area": 2815}, {"id": 11837327, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 428, 240], "area": 69575}, {"id": 16645627, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 136, 48], "area": 2591}, {"id": 10658458, "category_id": 191, "iscrowd": 0, "bbox": [0, 259, 428, 381], "area": 57593}, {"id": 4162397, "category_id": 193, "iscrowd": 0, "bbox": [0, 222, 428, 418], "area": 31856}, {"id": 11245181, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 428, 253], "area": 13162}], "file_name": "000000349184.png", "image_id": 349184}, {"segments_info": [{"id": 2435122, "category_id": 25, "iscrowd": 0, "bbox": [116, 86, 140, 300], "area": 13803}, {"id": 4409432, "category_id": 25, "iscrowd": 0, "bbox": [270, 121, 119, 262], "area": 10233}, {"id": 4940631, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 293], "area": 137020}, {"id": 13809563, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 512, 101], "area": 20311}, {"id": 10595256, "category_id": 194, "iscrowd": 0, "bbox": [0, 37, 640, 390], "area": 91323}], "file_name": "000000349302.png", "image_id": 349302}, {"segments_info": [{"id": 3819881, "category_id": 31, "iscrowd": 0, "bbox": [203, 79, 85, 134], "area": 2503}, {"id": 2906465, "category_id": 44, "iscrowd": 0, "bbox": [330, 312, 25, 35], "area": 506}, {"id": 9876399, "category_id": 47, "iscrowd": 0, "bbox": [248, 326, 33, 23], "area": 439}, {"id": 13681602, "category_id": 47, "iscrowd": 0, "bbox": [273, 243, 37, 28], "area": 780}, {"id": 13948640, "category_id": 51, "iscrowd": 0, "bbox": [324, 162, 54, 27], "area": 586}, {"id": 12895697, "category_id": 51, "iscrowd": 0, "bbox": [199, 317, 59, 36], "area": 822}, {"id": 2144227, "category_id": 52, "iscrowd": 0, "bbox": [305, 347, 59, 33], "area": 972}, {"id": 3061724, "category_id": 52, "iscrowd": 0, "bbox": [305, 344, 80, 65], "area": 2300}, {"id": 3945087, "category_id": 53, "iscrowd": 0, "bbox": [293, 386, 21, 19], "area": 317}, {"id": 7319977, "category_id": 53, "iscrowd": 0, "bbox": [265, 339, 28, 30], "area": 570}, {"id": 5154792, "category_id": 55, "iscrowd": 0, "bbox": [287, 343, 31, 35], "area": 650}, {"id": 6184326, "category_id": 61, "iscrowd": 0, "bbox": [211, 318, 36, 28], "area": 699}, {"id": 10205930, "category_id": 61, "iscrowd": 0, "bbox": [337, 154, 34, 26], "area": 611}, {"id": 4086095, "category_id": 64, "iscrowd": 0, "bbox": [0, 0, 197, 131], "area": 9022}, {"id": 10860995, "category_id": 64, "iscrowd": 0, "bbox": [417, 381, 84, 69], "area": 5075}, {"id": 7569564, "category_id": 88, "iscrowd": 0, "bbox": [32, 125, 228, 249], "area": 35439}, {"id": 9344936, "category_id": 88, "iscrowd": 0, "bbox": [161, 1, 464, 378], "area": 91608}, {"id": 8884897, "category_id": 93, "iscrowd": 0, "bbox": [28, 228, 409, 222], "area": 23071}, {"id": 9873338, "category_id": 122, "iscrowd": 0, "bbox": [234, 363, 76, 69], "area": 2675}, {"id": 12369338, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 640, 450], "area": 26725}, {"id": 5410894, "category_id": 184, "iscrowd": 0, "bbox": [78, 374, 94, 76], "area": 751}, {"id": 10855591, "category_id": 190, "iscrowd": 0, "bbox": [364, 120, 276, 77], "area": 3895}, {"id": 4622964, "category_id": 193, "iscrowd": 0, "bbox": [0, 228, 570, 222], "area": 9071}, {"id": 12371930, "category_id": 196, "iscrowd": 0, "bbox": [275, 275, 100, 80], "area": 2268}, {"id": 7308420, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 190], "area": 40269}], "file_name": "000000349480.png", "image_id": 349480}, {"segments_info": [{"id": 8228250, "category_id": 1, "iscrowd": 0, "bbox": [29, 21, 385, 472], "area": 116012}, {"id": 1320261, "category_id": 60, "iscrowd": 0, "bbox": [175, 268, 93, 89], "area": 5081}, {"id": 14416634, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 424, 500], "area": 88804}], "file_name": "000000349594.png", "image_id": 349594}, {"segments_info": [{"id": 5592405, "category_id": 85, "iscrowd": 0, "bbox": [145, 291, 52, 48], "area": 1976}, {"id": 3493442, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 107810}, {"id": 15518103, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 396, 535], "area": 114831}, {"id": 5136519, "category_id": 197, "iscrowd": 0, "bbox": [60, 200, 228, 440], "area": 47021}], "file_name": "000000349678.png", "image_id": 349678}, {"segments_info": [{"id": 5335403, "category_id": 82, "iscrowd": 0, "bbox": [66, 95, 71, 194], "area": 12021}, {"id": 4215892, "category_id": 82, "iscrowd": 0, "bbox": [15, 104, 62, 166], "area": 8452}, {"id": 8953505, "category_id": 82, "iscrowd": 0, "bbox": [234, 30, 114, 299], "area": 30420}, {"id": 11583428, "category_id": 82, "iscrowd": 0, "bbox": [460, 0, 40, 329], "area": 12530}, {"id": 7308679, "category_id": 82, "iscrowd": 0, "bbox": [138, 63, 98, 251], "area": 23025}, {"id": 10072501, "category_id": 82, "iscrowd": 0, "bbox": [335, 10, 125, 319], "area": 37177}, {"id": 1718322, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 463, 247], "area": 28381}, {"id": 3293770, "category_id": 190, "iscrowd": 0, "bbox": [0, 232, 500, 101], "area": 12641}], "file_name": "000000349837.png", "image_id": 349837}, {"segments_info": [{"id": 5722193, "category_id": 1, "iscrowd": 0, "bbox": [47, 342, 17, 33], "area": 396}, {"id": 6904641, "category_id": 1, "iscrowd": 0, "bbox": [280, 13, 185, 152], "area": 9504}, {"id": 2631258, "category_id": 1, "iscrowd": 0, "bbox": [218, 321, 10, 32], "area": 204}, {"id": 2762792, "category_id": 3, "iscrowd": 0, "bbox": [350, 349, 36, 29], "area": 802}, {"id": 6645089, "category_id": 3, "iscrowd": 0, "bbox": [281, 350, 12, 28], "area": 223}, {"id": 5330518, "category_id": 15, "iscrowd": 0, "bbox": [368, 378, 15, 16], "area": 142}, {"id": 5001295, "category_id": 15, "iscrowd": 0, "bbox": [337, 369, 24, 18], "area": 246}, {"id": 2046273, "category_id": 41, "iscrowd": 0, "bbox": [340, 108, 113, 89], "area": 4426}, {"id": 6649232, "category_id": 144, "iscrowd": 0, "bbox": [0, 186, 640, 240], "area": 57628}, {"id": 3097410, "category_id": 184, "iscrowd": 0, "bbox": [0, 287, 364, 77], "area": 10883}, {"id": 3751485, "category_id": 185, "iscrowd": 0, "bbox": [82, 320, 207, 41], "area": 3823}, {"id": 14012880, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 346], "area": 173221}, {"id": 10001827, "category_id": 191, "iscrowd": 0, "bbox": [182, 376, 193, 50], "area": 5768}, {"id": 3626583, "category_id": 193, "iscrowd": 0, "bbox": [0, 336, 414, 54], "area": 4172}, {"id": 7176854, "category_id": 197, "iscrowd": 0, "bbox": [348, 333, 76, 27], "area": 935}], "file_name": "000000349860.png", "image_id": 349860}, {"segments_info": [{"id": 8814727, "category_id": 1, "iscrowd": 0, "bbox": [3, 108, 393, 531], "area": 128141}, {"id": 8750473, "category_id": 89, "iscrowd": 0, "bbox": [0, 102, 164, 181], "area": 22522}, {"id": 8683392, "category_id": 181, "iscrowd": 0, "bbox": [32, 78, 152, 177], "area": 7409}, {"id": 5722455, "category_id": 190, "iscrowd": 0, "bbox": [378, 385, 49, 255], "area": 9599}, {"id": 12501188, "category_id": 199, "iscrowd": 0, "bbox": [17, 0, 410, 391], "area": 56848}], "file_name": "000000350002.png", "image_id": 350002}, {"segments_info": [{"id": 6991765, "category_id": 1, "iscrowd": 0, "bbox": [538, 256, 13, 27], "area": 150}, {"id": 4868203, "category_id": 1, "iscrowd": 0, "bbox": [411, 258, 11, 41], "area": 282}, {"id": 6711405, "category_id": 2, "iscrowd": 0, "bbox": [537, 274, 12, 11], "area": 65}, {"id": 10001308, "category_id": 3, "iscrowd": 0, "bbox": [475, 259, 54, 39], "area": 1653}, {"id": 4944274, "category_id": 8, "iscrowd": 0, "bbox": [229, 235, 132, 74], "area": 8451}, {"id": 3488057, "category_id": 33, "iscrowd": 0, "bbox": [419, 286, 8, 10], "area": 70}, {"id": 4541262, "category_id": 92, "iscrowd": 0, "bbox": [356, 235, 45, 21], "area": 704}, {"id": 8027002, "category_id": 149, "iscrowd": 0, "bbox": [0, 266, 640, 214], "area": 86950}, {"id": 4806992, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 294], "area": 119329}, {"id": 3818052, "category_id": 185, "iscrowd": 0, "bbox": [360, 245, 280, 47], "area": 3884}, {"id": 16645629, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 135], "area": 26091}, {"id": 10003113, "category_id": 191, "iscrowd": 0, "bbox": [0, 268, 640, 212], "area": 26082}, {"id": 8755619, "category_id": 197, "iscrowd": 0, "bbox": [0, 75, 483, 220], "area": 22478}, {"id": 4805721, "category_id": 199, "iscrowd": 0, "bbox": [0, 231, 182, 117], "area": 10271}], "file_name": "000000350003.png", "image_id": 350003}, {"segments_info": [{"id": 8619169, "category_id": 1, "iscrowd": 0, "bbox": [125, 38, 176, 228], "area": 24408}, {"id": 1911354, "category_id": 33, "iscrowd": 0, "bbox": [102, 262, 268, 357], "area": 74800}, {"id": 264505, "category_id": 118, "iscrowd": 0, "bbox": [0, 27, 426, 613], "area": 50571}, {"id": 4617910, "category_id": 188, "iscrowd": 0, "bbox": [31, 0, 395, 370], "area": 95150}, {"id": 8424602, "category_id": 200, "iscrowd": 0, "bbox": [253, 412, 173, 219], "area": 15930}], "file_name": "000000350019.png", "image_id": 350019}, {"segments_info": [{"id": 2500647, "category_id": 1, "iscrowd": 0, "bbox": [395, 323, 3, 11], "area": 32}, {"id": 2698030, "category_id": 1, "iscrowd": 0, "bbox": [408, 333, 5, 12], "area": 44}, {"id": 3948096, "category_id": 1, "iscrowd": 0, "bbox": [387, 357, 6, 12], "area": 34}, {"id": 1578777, "category_id": 1, "iscrowd": 0, "bbox": [181, 441, 12, 24], "area": 73}, {"id": 4211011, "category_id": 1, "iscrowd": 0, "bbox": [378, 350, 6, 13], "area": 33}, {"id": 2959144, "category_id": 1, "iscrowd": 0, "bbox": [522, 415, 9, 25], "area": 137}, {"id": 3619388, "category_id": 2, "iscrowd": 0, "bbox": [387, 362, 6, 10], "area": 31}, {"id": 3814962, "category_id": 3, "iscrowd": 0, "bbox": [265, 330, 15, 13], "area": 142}, {"id": 3091753, "category_id": 3, "iscrowd": 0, "bbox": [186, 415, 29, 23], "area": 556}, {"id": 4078651, "category_id": 3, "iscrowd": 0, "bbox": [372, 388, 22, 20], "area": 378}, {"id": 3091497, "category_id": 3, "iscrowd": 0, "bbox": [355, 401, 25, 23], "area": 506}, {"id": 4997681, "category_id": 3, "iscrowd": 0, "bbox": [218, 373, 19, 14], "area": 228}, {"id": 4078393, "category_id": 3, "iscrowd": 0, "bbox": [345, 433, 33, 27], "area": 697}, {"id": 3684149, "category_id": 3, "iscrowd": 0, "bbox": [406, 375, 19, 18], "area": 266}, {"id": 6710369, "category_id": 3, "iscrowd": 0, "bbox": [227, 364, 17, 14], "area": 176}, {"id": 5131336, "category_id": 3, "iscrowd": 0, "bbox": [213, 386, 18, 14], "area": 199}, {"id": 3157806, "category_id": 3, "iscrowd": 0, "bbox": [326, 369, 19, 18], "area": 301}, {"id": 3157801, "category_id": 3, "iscrowd": 0, "bbox": [399, 431, 32, 29], "area": 757}, {"id": 4802373, "category_id": 3, "iscrowd": 0, "bbox": [256, 314, 10, 8], "area": 66}, {"id": 3090982, "category_id": 3, "iscrowd": 0, "bbox": [197, 397, 25, 22], "area": 338}, {"id": 5657167, "category_id": 3, "iscrowd": 1, "bbox": [112, 289, 247, 191], "area": 1438}, {"id": 3157548, "category_id": 4, "iscrowd": 0, "bbox": [176, 449, 17, 22], "area": 288}, {"id": 3289651, "category_id": 6, "iscrowd": 0, "bbox": [538, 426, 94, 53], "area": 3879}, {"id": 1909015, "category_id": 10, "iscrowd": 0, "bbox": [409, 350, 6, 15], "area": 73}, {"id": 2369053, "category_id": 10, "iscrowd": 0, "bbox": [346, 344, 6, 24], "area": 126}, {"id": 921359, "category_id": 10, "iscrowd": 0, "bbox": [119, 394, 9, 25], "area": 186}, {"id": 3029052, "category_id": 119, "iscrowd": 0, "bbox": [286, 313, 26, 30], "area": 536}, {"id": 2171166, "category_id": 128, "iscrowd": 0, "bbox": [0, 285, 59, 78], "area": 2533}, {"id": 5790555, "category_id": 130, "iscrowd": 0, "bbox": [0, 251, 614, 59], "area": 1366}, {"id": 6514796, "category_id": 149, "iscrowd": 0, "bbox": [0, 295, 559, 185], "area": 44656}, {"id": 1448472, "category_id": 184, "iscrowd": 0, "bbox": [0, 236, 640, 214], "area": 56518}, {"id": 13811882, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 296], "area": 160234}, {"id": 4080716, "category_id": 191, "iscrowd": 0, "bbox": [15, 308, 625, 172], "area": 10355}, {"id": 3485996, "category_id": 197, "iscrowd": 0, "bbox": [207, 179, 433, 134], "area": 19496}], "file_name": "000000350023.png", "image_id": 350023}, {"segments_info": [{"id": 2567221, "category_id": 17, "iscrowd": 0, "bbox": [227, 108, 72, 124], "area": 3885}, {"id": 10591902, "category_id": 72, "iscrowd": 0, "bbox": [140, 30, 231, 154], "area": 28512}, {"id": 3818338, "category_id": 88, "iscrowd": 0, "bbox": [288, 144, 33, 46], "area": 965}, {"id": 4279663, "category_id": 88, "iscrowd": 0, "bbox": [322, 145, 26, 41], "area": 609}, {"id": 4675957, "category_id": 88, "iscrowd": 0, "bbox": [180, 138, 41, 55], "area": 1189}, {"id": 3556962, "category_id": 100, "iscrowd": 0, "bbox": [0, 182, 500, 83], "area": 4641}, {"id": 5266037, "category_id": 130, "iscrowd": 0, "bbox": [370, 51, 34, 46], "area": 627}, {"id": 3757424, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 490, 298], "area": 46316}, {"id": 3227997, "category_id": 189, "iscrowd": 0, "bbox": [0, 200, 448, 175], "area": 10942}, {"id": 5466251, "category_id": 195, "iscrowd": 0, "bbox": [0, 175, 212, 200], "area": 6260}, {"id": 2238522, "category_id": 199, "iscrowd": 0, "bbox": [385, 0, 115, 200], "area": 7576}, {"id": 2238554, "category_id": 200, "iscrowd": 0, "bbox": [180, 291, 297, 84], "area": 17368}], "file_name": "000000350054.png", "image_id": 350054}, {"segments_info": [{"id": 3488310, "category_id": 1, "iscrowd": 0, "bbox": [370, 308, 74, 166], "area": 4830}, {"id": 7370874, "category_id": 1, "iscrowd": 0, "bbox": [397, 243, 17, 32], "area": 411}, {"id": 1379888, "category_id": 1, "iscrowd": 0, "bbox": [198, 217, 56, 149], "area": 3562}, {"id": 2501423, "category_id": 1, "iscrowd": 0, "bbox": [97, 206, 54, 175], "area": 4712}, {"id": 3226181, "category_id": 1, "iscrowd": 0, "bbox": [298, 235, 43, 107], "area": 2022}, {"id": 5526337, "category_id": 1, "iscrowd": 0, "bbox": [31, 201, 70, 196], "area": 6534}, {"id": 7040366, "category_id": 1, "iscrowd": 0, "bbox": [497, 252, 21, 60], "area": 834}, {"id": 3157805, "category_id": 1, "iscrowd": 0, "bbox": [535, 247, 19, 57], "area": 722}, {"id": 5202032, "category_id": 1, "iscrowd": 0, "bbox": [412, 239, 9, 21], "area": 142}, {"id": 2304319, "category_id": 1, "iscrowd": 0, "bbox": [342, 234, 27, 99], "area": 810}, {"id": 3223599, "category_id": 1, "iscrowd": 0, "bbox": [368, 234, 24, 41], "area": 535}, {"id": 4612436, "category_id": 1, "iscrowd": 0, "bbox": [271, 231, 36, 46], "area": 985}, {"id": 3555907, "category_id": 1, "iscrowd": 0, "bbox": [157, 236, 37, 130], "area": 2626}, {"id": 4145228, "category_id": 1, "iscrowd": 1, "bbox": [236, 213, 404, 160], "area": 10831}, {"id": 7829382, "category_id": 2, "iscrowd": 0, "bbox": [485, 281, 17, 23], "area": 194}, {"id": 7701111, "category_id": 2, "iscrowd": 0, "bbox": [347, 374, 69, 101], "area": 3679}, {"id": 7634811, "category_id": 7, "iscrowd": 0, "bbox": [1, 140, 329, 142], "area": 19929}, {"id": 1183241, "category_id": 27, "iscrowd": 0, "bbox": [88, 229, 36, 48], "area": 1053}, {"id": 2045749, "category_id": 27, "iscrowd": 0, "bbox": [326, 250, 18, 30], "area": 411}, {"id": 3290415, "category_id": 27, "iscrowd": 0, "bbox": [363, 251, 14, 25], "area": 234}, {"id": 723981, "category_id": 27, "iscrowd": 0, "bbox": [241, 235, 35, 42], "area": 1018}, {"id": 2039581, "category_id": 27, "iscrowd": 0, "bbox": [423, 255, 9, 19], "area": 119}, {"id": 2104885, "category_id": 27, "iscrowd": 0, "bbox": [147, 268, 16, 46], "area": 582}, {"id": 4342847, "category_id": 27, "iscrowd": 0, "bbox": [383, 252, 17, 27], "area": 249}, {"id": 1644323, "category_id": 27, "iscrowd": 0, "bbox": [343, 248, 22, 32], "area": 496}, {"id": 2302511, "category_id": 31, "iscrowd": 0, "bbox": [499, 269, 12, 22], "area": 55}, {"id": 4673100, "category_id": 31, "iscrowd": 0, "bbox": [414, 258, 9, 17], "area": 128}, {"id": 855310, "category_id": 31, "iscrowd": 0, "bbox": [196, 265, 23, 34], "area": 164}, {"id": 7432801, "category_id": 31, "iscrowd": 0, "bbox": [471, 276, 7, 15], "area": 58}, {"id": 9211529, "category_id": 31, "iscrowd": 0, "bbox": [536, 277, 5, 8], "area": 29}, {"id": 9006936, "category_id": 31, "iscrowd": 0, "bbox": [449, 269, 6, 16], "area": 72}, {"id": 8490879, "category_id": 92, "iscrowd": 0, "bbox": [319, 95, 281, 171], "area": 11200}, {"id": 3553889, "category_id": 185, "iscrowd": 0, "bbox": [0, 215, 451, 254], "area": 33161}, {"id": 10861243, "category_id": 186, "iscrowd": 0, "bbox": [345, 86, 160, 163], "area": 583}, {"id": 15329768, "category_id": 187, "iscrowd": 0, "bbox": [569, 246, 20, 26], "area": 426}, {"id": 10267555, "category_id": 190, "iscrowd": 0, "bbox": [238, 244, 326, 236], "area": 28758}, {"id": 8096132, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 329], "area": 124243}, {"id": 1318436, "category_id": 199, "iscrowd": 0, "bbox": [0, 338, 398, 142], "area": 18248}], "file_name": "000000350122.png", "image_id": 350122}, {"segments_info": [{"id": 2764340, "category_id": 1, "iscrowd": 0, "bbox": [91, 116, 94, 227], "area": 6818}, {"id": 1774362, "category_id": 1, "iscrowd": 0, "bbox": [433, 222, 47, 163], "area": 5289}, {"id": 2961722, "category_id": 1, "iscrowd": 0, "bbox": [391, 115, 89, 124], "area": 7321}, {"id": 4211789, "category_id": 1, "iscrowd": 0, "bbox": [124, 6, 286, 366], "area": 68180}, {"id": 10592927, "category_id": 3, "iscrowd": 0, "bbox": [0, 113, 83, 112], "area": 6841}, {"id": 12041155, "category_id": 3, "iscrowd": 0, "bbox": [339, 131, 103, 52], "area": 2507}, {"id": 4410200, "category_id": 47, "iscrowd": 0, "bbox": [464, 349, 16, 119], "area": 1453}, {"id": 7237234, "category_id": 48, "iscrowd": 0, "bbox": [201, 381, 35, 49], "area": 169}, {"id": 5395543, "category_id": 49, "iscrowd": 0, "bbox": [204, 402, 14, 42], "area": 400}, {"id": 6463188, "category_id": 54, "iscrowd": 0, "bbox": [89, 462, 250, 163], "area": 25783}, {"id": 3037870, "category_id": 57, "iscrowd": 0, "bbox": [321, 361, 36, 18], "area": 350}, {"id": 2115489, "category_id": 57, "iscrowd": 0, "bbox": [334, 344, 10, 15], "area": 59}, {"id": 3498913, "category_id": 57, "iscrowd": 0, "bbox": [296, 355, 7, 16], "area": 53}, {"id": 2968205, "category_id": 61, "iscrowd": 0, "bbox": [283, 377, 90, 27], "area": 1319}, {"id": 1842739, "category_id": 62, "iscrowd": 0, "bbox": [410, 220, 22, 19], "area": 276}, {"id": 2303538, "category_id": 62, "iscrowd": 0, "bbox": [87, 187, 32, 144], "area": 1861}, {"id": 1184532, "category_id": 62, "iscrowd": 0, "bbox": [389, 246, 69, 104], "area": 1894}, {"id": 9871030, "category_id": 67, "iscrowd": 0, "bbox": [0, 347, 478, 284], "area": 87944}, {"id": 5001306, "category_id": 67, "iscrowd": 0, "bbox": [402, 236, 60, 50], "area": 1390}, {"id": 3290422, "category_id": 85, "iscrowd": 0, "bbox": [255, 265, 12, 13], "area": 119}, {"id": 9544610, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 110, 313], "area": 22653}, {"id": 13621981, "category_id": 128, "iscrowd": 0, "bbox": [142, 83, 297, 62], "area": 3986}, {"id": 10730940, "category_id": 184, "iscrowd": 0, "bbox": [94, 0, 386, 189], "area": 32343}, {"id": 15791091, "category_id": 187, "iscrowd": 0, "bbox": [359, 86, 22, 21], "area": 350}, {"id": 11448264, "category_id": 189, "iscrowd": 0, "bbox": [0, 467, 480, 173], "area": 4836}, {"id": 12172222, "category_id": 190, "iscrowd": 0, "bbox": [0, 289, 177, 287], "area": 17911}], "file_name": "000000350148.png", "image_id": 350148}, {"segments_info": [{"id": 8825289, "category_id": 51, "iscrowd": 0, "bbox": [0, 1, 480, 639], "area": 266253}, {"id": 3109245, "category_id": 56, "iscrowd": 0, "bbox": [93, 290, 23, 28], "area": 438}, {"id": 797214, "category_id": 56, "iscrowd": 0, "bbox": [214, 209, 134, 115], "area": 9268}, {"id": 931626, "category_id": 56, "iscrowd": 0, "bbox": [222, 292, 148, 145], "area": 8824}, {"id": 864551, "category_id": 56, "iscrowd": 0, "bbox": [137, 293, 122, 118], "area": 9577}, {"id": 4357296, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 480, 87], "area": 7754}], "file_name": "000000350388.png", "image_id": 350388}, {"segments_info": [{"id": 7764091, "category_id": 1, "iscrowd": 0, "bbox": [186, 84, 213, 163], "area": 17335}, {"id": 8156015, "category_id": 1, "iscrowd": 0, "bbox": [38, 146, 30, 46], "area": 513}, {"id": 6642519, "category_id": 36, "iscrowd": 0, "bbox": [261, 233, 168, 33], "area": 3161}, {"id": 16514042, "category_id": 159, "iscrowd": 0, "bbox": [0, 176, 500, 157], "area": 61618}, {"id": 15643278, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 203], "area": 76114}, {"id": 14931145, "category_id": 192, "iscrowd": 0, "bbox": [0, 104, 175, 92], "area": 7386}], "file_name": "000000350405.png", "image_id": 350405}, {"segments_info": [{"id": 4674407, "category_id": 24, "iscrowd": 0, "bbox": [110, 103, 274, 268], "area": 37447}, {"id": 12495523, "category_id": 148, "iscrowd": 0, "bbox": [0, 80, 640, 322], "area": 99295}, {"id": 5860985, "category_id": 184, "iscrowd": 0, "bbox": [220, 0, 420, 328], "area": 65001}, {"id": 3427680, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 71229}], "file_name": "000000350488.png", "image_id": 350488}, {"segments_info": [{"id": 7697542, "category_id": 15, "iscrowd": 0, "bbox": [64, 101, 484, 213], "area": 71560}, {"id": 1456176, "category_id": 193, "iscrowd": 0, "bbox": [0, 31, 640, 195], "area": 58403}, {"id": 9015967, "category_id": 194, "iscrowd": 0, "bbox": [0, 249, 640, 178], "area": 105754}], "file_name": "000000350607.png", "image_id": 350607}, {"segments_info": [{"id": 658964, "category_id": 1, "iscrowd": 0, "bbox": [367, 107, 69, 199], "area": 9135}, {"id": 329485, "category_id": 1, "iscrowd": 0, "bbox": [166, 68, 38, 72], "area": 1513}, {"id": 395018, "category_id": 1, "iscrowd": 0, "bbox": [0, 79, 59, 344], "area": 13837}, {"id": 1120818, "category_id": 1, "iscrowd": 0, "bbox": [187, 66, 55, 65], "area": 1557}, {"id": 395278, "category_id": 1, "iscrowd": 0, "bbox": [89, 71, 81, 162], "area": 5891}, {"id": 526866, "category_id": 1, "iscrowd": 0, "bbox": [335, 91, 40, 121], "area": 2704}, {"id": 723731, "category_id": 1, "iscrowd": 0, "bbox": [24, 51, 98, 242], "area": 5476}, {"id": 789774, "category_id": 1, "iscrowd": 0, "bbox": [14, 95, 81, 253], "area": 8515}, {"id": 1515055, "category_id": 1, "iscrowd": 0, "bbox": [292, 13, 112, 334], "area": 10701}, {"id": 9411504, "category_id": 1, "iscrowd": 0, "bbox": [32, 77, 358, 351], "area": 57797}, {"id": 460809, "category_id": 32, "iscrowd": 0, "bbox": [219, 112, 11, 17], "area": 131}, {"id": 328988, "category_id": 32, "iscrowd": 0, "bbox": [65, 89, 21, 72], "area": 363}, {"id": 4409160, "category_id": 32, "iscrowd": 0, "bbox": [325, 132, 7, 53], "area": 147}, {"id": 658710, "category_id": 49, "iscrowd": 0, "bbox": [344, 333, 70, 11], "area": 218}, {"id": 10865127, "category_id": 61, "iscrowd": 0, "bbox": [379, 418, 21, 10], "area": 161}, {"id": 3439005, "category_id": 61, "iscrowd": 0, "bbox": [362, 334, 98, 55], "area": 2517}, {"id": 10011618, "category_id": 61, "iscrowd": 0, "bbox": [388, 403, 16, 18], "area": 204}, {"id": 9549278, "category_id": 61, "iscrowd": 0, "bbox": [342, 411, 20, 13], "area": 211}, {"id": 9344362, "category_id": 61, "iscrowd": 0, "bbox": [409, 202, 90, 142], "area": 8389}, {"id": 5928349, "category_id": 61, "iscrowd": 0, "bbox": [401, 396, 21, 27], "area": 412}, {"id": 7771327, "category_id": 61, "iscrowd": 0, "bbox": [344, 386, 26, 16], "area": 240}, {"id": 10075870, "category_id": 61, "iscrowd": 0, "bbox": [382, 390, 21, 19], "area": 259}, {"id": 9483991, "category_id": 61, "iscrowd": 0, "bbox": [363, 396, 20, 13], "area": 206}, {"id": 4546688, "category_id": 61, "iscrowd": 0, "bbox": [408, 260, 16, 20], "area": 218}, {"id": 10668772, "category_id": 61, "iscrowd": 0, "bbox": [345, 398, 21, 14], "area": 217}, {"id": 5268364, "category_id": 67, "iscrowd": 0, "bbox": [270, 203, 305, 220], "area": 25615}, {"id": 461841, "category_id": 177, "iscrowd": 0, "bbox": [237, 19, 52, 21], "area": 936}, {"id": 6587826, "category_id": 189, "iscrowd": 0, "bbox": [261, 408, 304, 20], "area": 1475}, {"id": 790032, "category_id": 190, "iscrowd": 0, "bbox": [0, 290, 372, 138], "area": 984}, {"id": 3628146, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 97003}], "file_name": "000000350679.png", "image_id": 350679}, {"segments_info": [{"id": 7767957, "category_id": 70, "iscrowd": 0, "bbox": [142, 249, 162, 167], "area": 7582}, {"id": 15133933, "category_id": 81, "iscrowd": 0, "bbox": [0, 353, 110, 124], "area": 9699}, {"id": 12766674, "category_id": 112, "iscrowd": 0, "bbox": [540, 0, 100, 480], "area": 28860}, {"id": 5335687, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 63, 272], "area": 12674}, {"id": 6451843, "category_id": 176, "iscrowd": 0, "bbox": [157, 0, 310, 297], "area": 70240}, {"id": 3952486, "category_id": 188, "iscrowd": 0, "bbox": [233, 343, 6, 39], "area": 63}, {"id": 5532543, "category_id": 190, "iscrowd": 0, "bbox": [233, 360, 252, 120], "area": 23519}, {"id": 9085876, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 607, 480], "area": 101714}], "file_name": "000000350833.png", "image_id": 350833}, {"segments_info": [{"id": 7578099, "category_id": 1, "iscrowd": 0, "bbox": [0, 219, 100, 151], "area": 8267}, {"id": 5796006, "category_id": 87, "iscrowd": 0, "bbox": [54, 38, 446, 272], "area": 34286}, {"id": 8156816, "category_id": 100, "iscrowd": 0, "bbox": [0, 151, 500, 224], "area": 77296}], "file_name": "000000351096.png", "image_id": 351096}, {"segments_info": [{"id": 8613985, "category_id": 48, "iscrowd": 0, "bbox": [548, 55, 88, 335], "area": 7451}, {"id": 3497362, "category_id": 59, "iscrowd": 0, "bbox": [78, 36, 434, 404], "area": 134982}, {"id": 6583169, "category_id": 67, "iscrowd": 0, "bbox": [2, 1, 638, 472], "area": 99920}, {"id": 5401721, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 35782}, {"id": 1782349, "category_id": 196, "iscrowd": 0, "bbox": [424, 175, 78, 242], "area": 1603}], "file_name": "000000351331.png", "image_id": 351331}, {"segments_info": [{"id": 10404562, "category_id": 44, "iscrowd": 0, "bbox": [392, 389, 18, 34], "area": 430}, {"id": 3039074, "category_id": 51, "iscrowd": 0, "bbox": [322, 389, 18, 27], "area": 246}, {"id": 7900312, "category_id": 70, "iscrowd": 0, "bbox": [272, 465, 37, 52], "area": 1453}, {"id": 11254465, "category_id": 81, "iscrowd": 0, "bbox": [306, 414, 104, 92], "area": 6237}, {"id": 7772596, "category_id": 109, "iscrowd": 0, "bbox": [109, 128, 287, 419], "area": 52718}, {"id": 6852260, "category_id": 112, "iscrowd": 0, "bbox": [16, 0, 118, 640], "area": 55429}, {"id": 13425379, "category_id": 130, "iscrowd": 0, "bbox": [255, 0, 67, 129], "area": 5742}, {"id": 4944015, "category_id": 176, "iscrowd": 0, "bbox": [126, 235, 300, 297], "area": 42959}, {"id": 3038344, "category_id": 188, "iscrowd": 0, "bbox": [288, 426, 114, 214], "area": 13732}, {"id": 1383456, "category_id": 190, "iscrowd": 0, "bbox": [101, 530, 243, 110], "area": 21986}, {"id": 7773625, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 426, 640], "area": 69757}], "file_name": "000000351362.png", "image_id": 351362}, {"segments_info": [{"id": 8162718, "category_id": 1, "iscrowd": 0, "bbox": [134, 116, 115, 92], "area": 3463}, {"id": 5930146, "category_id": 1, "iscrowd": 0, "bbox": [136, 112, 163, 166], "area": 6218}, {"id": 4278097, "category_id": 1, "iscrowd": 0, "bbox": [150, 132, 47, 140], "area": 1602}, {"id": 2826525, "category_id": 1, "iscrowd": 0, "bbox": [3, 77, 111, 125], "area": 4280}, {"id": 3090462, "category_id": 2, "iscrowd": 0, "bbox": [0, 147, 132, 102], "area": 8808}, {"id": 3560299, "category_id": 15, "iscrowd": 0, "bbox": [323, 135, 131, 164], "area": 1877}, {"id": 4281712, "category_id": 15, "iscrowd": 0, "bbox": [529, 199, 110, 160], "area": 6185}, {"id": 6717591, "category_id": 62, "iscrowd": 0, "bbox": [534, 140, 57, 55], "area": 1606}, {"id": 3690088, "category_id": 62, "iscrowd": 0, "bbox": [564, 220, 76, 157], "area": 8641}, {"id": 4809594, "category_id": 62, "iscrowd": 0, "bbox": [418, 127, 145, 200], "area": 6052}, {"id": 3693164, "category_id": 62, "iscrowd": 0, "bbox": [345, 133, 72, 177], "area": 5773}, {"id": 4219511, "category_id": 62, "iscrowd": 0, "bbox": [295, 181, 39, 113], "area": 2744}, {"id": 3757162, "category_id": 62, "iscrowd": 0, "bbox": [205, 185, 33, 97], "area": 1642}, {"id": 3954030, "category_id": 62, "iscrowd": 0, "bbox": [446, 136, 194, 218], "area": 14391}, {"id": 2705514, "category_id": 62, "iscrowd": 0, "bbox": [227, 184, 31, 98], "area": 1826}, {"id": 5403780, "category_id": 62, "iscrowd": 0, "bbox": [375, 126, 101, 70], "area": 1685}, {"id": 3955831, "category_id": 62, "iscrowd": 0, "bbox": [247, 136, 109, 152], "area": 4776}, {"id": 6261926, "category_id": 62, "iscrowd": 0, "bbox": [322, 136, 63, 165], "area": 1778}, {"id": 5073534, "category_id": 62, "iscrowd": 0, "bbox": [388, 125, 119, 173], "area": 4964}, {"id": 7974577, "category_id": 77, "iscrowd": 0, "bbox": [238, 158, 13, 6], "area": 51}, {"id": 1054487, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 143, 253], "area": 18769}, {"id": 795421, "category_id": 184, "iscrowd": 0, "bbox": [122, 0, 518, 243], "area": 73364}, {"id": 6909289, "category_id": 191, "iscrowd": 0, "bbox": [0, 241, 571, 123], "area": 5408}, {"id": 1396811, "category_id": 193, "iscrowd": 0, "bbox": [225, 235, 302, 107], "area": 1351}], "file_name": "000000351530.png", "image_id": 351530}, {"segments_info": [{"id": 4283992, "category_id": 10, "iscrowd": 0, "bbox": [440, 125, 88, 146], "area": 8375}, {"id": 1050379, "category_id": 187, "iscrowd": 0, "bbox": [55, 0, 585, 343], "area": 134314}, {"id": 4416391, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 479, 343], "area": 73806}], "file_name": "000000351559.png", "image_id": 351559}, {"segments_info": [{"id": 2436652, "category_id": 15, "iscrowd": 0, "bbox": [88, 130, 320, 260], "area": 42991}, {"id": 1058595, "category_id": 64, "iscrowd": 0, "bbox": [0, 97, 126, 231], "area": 19807}, {"id": 1851702, "category_id": 64, "iscrowd": 0, "bbox": [285, 116, 168, 181], "area": 12840}, {"id": 2831419, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 330], "area": 122423}, {"id": 4679552, "category_id": 190, "iscrowd": 0, "bbox": [95, 372, 25, 8], "area": 137}, {"id": 4017753, "category_id": 194, "iscrowd": 0, "bbox": [0, 270, 640, 157], "area": 74346}], "file_name": "000000351589.png", "image_id": 351589}, {"segments_info": [{"id": 5798807, "category_id": 47, "iscrowd": 0, "bbox": [388, 0, 112, 200], "area": 15307}, {"id": 8166047, "category_id": 50, "iscrowd": 0, "bbox": [202, 1, 58, 71], "area": 1407}, {"id": 8688274, "category_id": 51, "iscrowd": 0, "bbox": [1, 66, 499, 267], "area": 28202}, {"id": 2586564, "category_id": 55, "iscrowd": 0, "bbox": [0, 88, 471, 245], "area": 87557}], "file_name": "000000351609.png", "image_id": 351609}, {"segments_info": [{"id": 7498347, "category_id": 1, "iscrowd": 0, "bbox": [23, 112, 85, 167], "area": 8341}, {"id": 1908269, "category_id": 1, "iscrowd": 0, "bbox": [96, 121, 22, 34], "area": 538}, {"id": 4079437, "category_id": 1, "iscrowd": 0, "bbox": [176, 108, 21, 59], "area": 663}, {"id": 1643799, "category_id": 1, "iscrowd": 0, "bbox": [0, 50, 44, 125], "area": 2515}, {"id": 2960706, "category_id": 1, "iscrowd": 0, "bbox": [10, 122, 45, 45], "area": 768}, {"id": 5462104, "category_id": 27, "iscrowd": 0, "bbox": [98, 160, 156, 151], "area": 14957}, {"id": 2498851, "category_id": 27, "iscrowd": 0, "bbox": [255, 145, 73, 60], "area": 2491}, {"id": 7629671, "category_id": 27, "iscrowd": 0, "bbox": [281, 173, 219, 202], "area": 29012}, {"id": 4339074, "category_id": 33, "iscrowd": 0, "bbox": [192, 157, 91, 88], "area": 3039}, {"id": 3022880, "category_id": 33, "iscrowd": 0, "bbox": [89, 324, 22, 50], "area": 653}, {"id": 3879476, "category_id": 33, "iscrowd": 0, "bbox": [127, 302, 110, 69], "area": 6608}, {"id": 4537138, "category_id": 33, "iscrowd": 0, "bbox": [10, 172, 83, 198], "area": 6337}, {"id": 8881548, "category_id": 33, "iscrowd": 0, "bbox": [238, 175, 132, 196], "area": 9041}, {"id": 3024687, "category_id": 62, "iscrowd": 0, "bbox": [68, 274, 40, 31], "area": 492}, {"id": 1318692, "category_id": 64, "iscrowd": 0, "bbox": [101, 146, 41, 52], "area": 1015}, {"id": 1578019, "category_id": 67, "iscrowd": 0, "bbox": [12, 190, 21, 10], "area": 81}, {"id": 3418929, "category_id": 67, "iscrowd": 0, "bbox": [0, 171, 58, 124], "area": 3003}, {"id": 2240833, "category_id": 112, "iscrowd": 0, "bbox": [288, 0, 212, 235], "area": 38034}, {"id": 3960455, "category_id": 130, "iscrowd": 0, "bbox": [143, 0, 50, 32], "area": 1085}, {"id": 7107966, "category_id": 177, "iscrowd": 0, "bbox": [192, 0, 106, 183], "area": 16242}, {"id": 658449, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 153, 29], "area": 3464}, {"id": 1643297, "category_id": 189, "iscrowd": 0, "bbox": [0, 196, 9, 45], "area": 196}, {"id": 1448485, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 196, 138], "area": 7844}], "file_name": "000000351810.png", "image_id": 351810}, {"segments_info": [{"id": 8807785, "category_id": 1, "iscrowd": 0, "bbox": [100, 87, 210, 510], "area": 45299}, {"id": 9205098, "category_id": 43, "iscrowd": 0, "bbox": [121, 280, 26, 80], "area": 1456}, {"id": 9933984, "category_id": 145, "iscrowd": 0, "bbox": [0, 410, 508, 230], "area": 87888}, {"id": 6714471, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 508, 459], "area": 190185}], "file_name": "000000351823.png", "image_id": 351823}, {"segments_info": [{"id": 2367014, "category_id": 1, "iscrowd": 0, "bbox": [63, 243, 9, 22], "area": 122}, {"id": 3223350, "category_id": 1, "iscrowd": 0, "bbox": [532, 267, 22, 17], "area": 258}, {"id": 4080470, "category_id": 1, "iscrowd": 0, "bbox": [469, 269, 17, 11], "area": 87}, {"id": 3486781, "category_id": 1, "iscrowd": 0, "bbox": [77, 245, 4, 14], "area": 41}, {"id": 4145229, "category_id": 1, "iscrowd": 0, "bbox": [367, 261, 16, 11], "area": 93}, {"id": 9935003, "category_id": 7, "iscrowd": 0, "bbox": [124, 148, 515, 277], "area": 78118}, {"id": 5265763, "category_id": 125, "iscrowd": 0, "bbox": [107, 250, 533, 230], "area": 17389}, {"id": 4342856, "category_id": 144, "iscrowd": 0, "bbox": [0, 246, 618, 234], "area": 76273}, {"id": 8098466, "category_id": 147, "iscrowd": 0, "bbox": [264, 312, 26, 13], "area": 157}, {"id": 5726825, "category_id": 181, "iscrowd": 0, "bbox": [17, 214, 23, 55], "area": 1002}, {"id": 12505817, "category_id": 184, "iscrowd": 0, "bbox": [121, 218, 26, 22], "area": 340}, {"id": 4016725, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 235], "area": 94770}, {"id": 16514042, "category_id": 187, "iscrowd": 0, "bbox": [141, 42, 499, 193], "area": 22253}, {"id": 8032671, "category_id": 197, "iscrowd": 0, "bbox": [80, 132, 309, 127], "area": 9731}, {"id": 3750980, "category_id": 199, "iscrowd": 0, "bbox": [0, 162, 90, 166], "area": 5990}], "file_name": "000000352491.png", "image_id": 352491}, {"segments_info": [{"id": 5457739, "category_id": 1, "iscrowd": 0, "bbox": [112, 195, 215, 439], "area": 46086}, {"id": 4273767, "category_id": 1, "iscrowd": 0, "bbox": [0, 256, 81, 377], "area": 22675}, {"id": 13480355, "category_id": 34, "iscrowd": 0, "bbox": [172, 424, 85, 41], "area": 2608}, {"id": 3880243, "category_id": 128, "iscrowd": 0, "bbox": [42, 269, 119, 181], "area": 12624}, {"id": 4080190, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 425, 432], "area": 128590}, {"id": 1909022, "category_id": 186, "iscrowd": 0, "bbox": [97, 270, 17, 13], "area": 143}, {"id": 13091781, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 425, 403], "area": 4982}, {"id": 3884616, "category_id": 193, "iscrowd": 0, "bbox": [0, 417, 425, 223], "area": 52292}], "file_name": "000000352582.png", "image_id": 352582}, {"segments_info": [{"id": 2181518, "category_id": 70, "iscrowd": 0, "bbox": [30, 14, 282, 466], "area": 47398}, {"id": 468853, "category_id": 190, "iscrowd": 0, "bbox": [0, 291, 375, 209], "area": 29666}, {"id": 2778548, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 452], "area": 107982}], "file_name": "000000352584.png", "image_id": 352584}, {"segments_info": [{"id": 3560311, "category_id": 51, "iscrowd": 0, "bbox": [5, 144, 635, 275], "area": 112931}, {"id": 4738401, "category_id": 52, "iscrowd": 0, "bbox": [483, 226, 157, 114], "area": 7958}, {"id": 1386554, "category_id": 52, "iscrowd": 0, "bbox": [3, 148, 131, 167], "area": 6394}, {"id": 2186416, "category_id": 55, "iscrowd": 0, "bbox": [331, 187, 232, 161], "area": 26717}, {"id": 3754337, "category_id": 122, "iscrowd": 0, "bbox": [0, 187, 13, 165], "area": 772}, {"id": 13682620, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 255], "area": 112935}], "file_name": "000000352618.png", "image_id": 352618}, {"segments_info": [{"id": 2435377, "category_id": 1, "iscrowd": 0, "bbox": [374, 283, 46, 144], "area": 4451}, {"id": 4475767, "category_id": 1, "iscrowd": 0, "bbox": [56, 269, 40, 147], "area": 3760}, {"id": 4539241, "category_id": 1, "iscrowd": 0, "bbox": [1, 271, 41, 142], "area": 3939}, {"id": 4868950, "category_id": 1, "iscrowd": 0, "bbox": [152, 250, 28, 213], "area": 2661}, {"id": 3948105, "category_id": 1, "iscrowd": 0, "bbox": [129, 265, 34, 155], "area": 2025}, {"id": 5526622, "category_id": 1, "iscrowd": 0, "bbox": [86, 252, 62, 235], "area": 9786}, {"id": 6320023, "category_id": 1, "iscrowd": 0, "bbox": [38, 272, 23, 106], "area": 1246}, {"id": 5131086, "category_id": 1, "iscrowd": 0, "bbox": [301, 240, 77, 286], "area": 12491}, {"id": 7170668, "category_id": 1, "iscrowd": 0, "bbox": [167, 223, 123, 413], "area": 26449}, {"id": 5787208, "category_id": 32, "iscrowd": 0, "bbox": [181, 288, 20, 88], "area": 1114}, {"id": 2501429, "category_id": 180, "iscrowd": 0, "bbox": [79, 175, 55, 115], "area": 3756}, {"id": 2111832, "category_id": 186, "iscrowd": 0, "bbox": [81, 0, 343, 147], "area": 31085}, {"id": 3690895, "category_id": 190, "iscrowd": 0, "bbox": [0, 359, 424, 281], "area": 78571}, {"id": 5135989, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 424, 409], "area": 87743}], "file_name": "000000352684.png", "image_id": 352684}, {"segments_info": [{"id": 4615274, "category_id": 1, "iscrowd": 0, "bbox": [142, 81, 236, 347], "area": 32600}, {"id": 5521957, "category_id": 35, "iscrowd": 0, "bbox": [65, 153, 345, 385], "area": 14145}, {"id": 15654872, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 544, 640], "area": 300802}], "file_name": "000000352760.png", "image_id": 352760}, {"segments_info": [{"id": 7765624, "category_id": 48, "iscrowd": 0, "bbox": [0, 36, 45, 61], "area": 1177}, {"id": 5461332, "category_id": 49, "iscrowd": 0, "bbox": [0, 0, 202, 133], "area": 7326}, {"id": 7707561, "category_id": 51, "iscrowd": 0, "bbox": [2, 33, 638, 390], "area": 201315}, {"id": 1269063, "category_id": 56, "iscrowd": 0, "bbox": [496, 189, 79, 141], "area": 3716}, {"id": 2123354, "category_id": 56, "iscrowd": 0, "bbox": [442, 69, 40, 39], "area": 920}, {"id": 1396804, "category_id": 56, "iscrowd": 0, "bbox": [451, 130, 88, 78], "area": 4038}, {"id": 1605492, "category_id": 56, "iscrowd": 0, "bbox": [464, 242, 33, 37], "area": 779}, {"id": 1203017, "category_id": 56, "iscrowd": 0, "bbox": [220, 102, 130, 118], "area": 8074}, {"id": 1004093, "category_id": 56, "iscrowd": 0, "bbox": [166, 78, 103, 95], "area": 5437}, {"id": 3165536, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 596, 115], "area": 27685}], "file_name": "000000352900.png", "image_id": 352900}, {"segments_info": [{"id": 923968, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 237, 232], "area": 31345}, {"id": 1983087, "category_id": 59, "iscrowd": 0, "bbox": [53, 5, 307, 286], "area": 42181}, {"id": 2245740, "category_id": 59, "iscrowd": 0, "bbox": [56, 142, 584, 281], "area": 114451}, {"id": 5727857, "category_id": 189, "iscrowd": 0, "bbox": [155, 0, 485, 17], "area": 1043}, {"id": 6977148, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 640, 424], "area": 80864}], "file_name": "000000353027.png", "image_id": 353027}, {"segments_info": [{"id": 2637128, "category_id": 1, "iscrowd": 0, "bbox": [129, 124, 147, 282], "area": 18437}, {"id": 2244702, "category_id": 19, "iscrowd": 0, "bbox": [329, 7, 311, 355], "area": 62180}, {"id": 4491651, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 80290}, {"id": 5991539, "category_id": 199, "iscrowd": 0, "bbox": [0, 306, 139, 69], "area": 6835}], "file_name": "000000353051.png", "image_id": 353051}, {"segments_info": [{"id": 13603140, "category_id": 72, "iscrowd": 0, "bbox": [106, 24, 293, 254], "area": 64881}, {"id": 11976376, "category_id": 74, "iscrowd": 0, "bbox": [445, 289, 51, 32], "area": 1188}, {"id": 13880259, "category_id": 76, "iscrowd": 0, "bbox": [100, 278, 296, 45], "area": 12213}, {"id": 8954022, "category_id": 189, "iscrowd": 0, "bbox": [0, 236, 500, 108], "area": 27556}, {"id": 8300705, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 277], "area": 59568}], "file_name": "000000353096.png", "image_id": 353096}, {"segments_info": [{"id": 10526880, "category_id": 1, "iscrowd": 0, "bbox": [219, 176, 73, 209], "area": 8585}, {"id": 6250335, "category_id": 1, "iscrowd": 0, "bbox": [386, 196, 53, 189], "area": 5985}, {"id": 6447714, "category_id": 1, "iscrowd": 0, "bbox": [46, 189, 135, 229], "area": 10227}, {"id": 9671571, "category_id": 1, "iscrowd": 0, "bbox": [458, 205, 127, 154], "area": 6041}, {"id": 9605778, "category_id": 1, "iscrowd": 0, "bbox": [335, 182, 63, 210], "area": 8474}, {"id": 1315860, "category_id": 1, "iscrowd": 0, "bbox": [131, 238, 33, 73], "area": 877}, {"id": 10395294, "category_id": 1, "iscrowd": 0, "bbox": [286, 177, 50, 208], "area": 7285}, {"id": 12303291, "category_id": 1, "iscrowd": 0, "bbox": [410, 189, 96, 187], "area": 7590}, {"id": 10329501, "category_id": 1, "iscrowd": 0, "bbox": [120, 194, 131, 205], "area": 10163}, {"id": 14540253, "category_id": 1, "iscrowd": 0, "bbox": [553, 112, 86, 275], "area": 9776}, {"id": 10921638, "category_id": 6, "iscrowd": 0, "bbox": [204, 78, 236, 122], "area": 22809}, {"id": 8092539, "category_id": 27, "iscrowd": 0, "bbox": [595, 133, 44, 59], "area": 1237}, {"id": 10921628, "category_id": 149, "iscrowd": 0, "bbox": [0, 209, 640, 211], "area": 43865}, {"id": 8158332, "category_id": 184, "iscrowd": 0, "bbox": [0, 238, 96, 34], "area": 1315}, {"id": 14408667, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 264], "area": 107093}, {"id": 10724259, "category_id": 193, "iscrowd": 0, "bbox": [0, 250, 612, 108], "area": 7786}, {"id": 12763842, "category_id": 197, "iscrowd": 0, "bbox": [31, 239, 18, 20], "area": 218}], "file_name": "000000353180.png", "image_id": 353180}, {"segments_info": [{"id": 8878461, "category_id": 1, "iscrowd": 0, "bbox": [594, 143, 5, 4], "area": 15}, {"id": 2899043, "category_id": 1, "iscrowd": 0, "bbox": [290, 160, 12, 10], "area": 42}, {"id": 11579562, "category_id": 9, "iscrowd": 0, "bbox": [554, 131, 58, 24], "area": 569}, {"id": 6913412, "category_id": 9, "iscrowd": 0, "bbox": [297, 135, 115, 56], "area": 3568}, {"id": 7961978, "category_id": 9, "iscrowd": 0, "bbox": [420, 133, 83, 56], "area": 3249}, {"id": 4618629, "category_id": 9, "iscrowd": 0, "bbox": [136, 129, 172, 51], "area": 2446}, {"id": 8881283, "category_id": 9, "iscrowd": 0, "bbox": [200, 139, 101, 21], "area": 1118}, {"id": 7500658, "category_id": 9, "iscrowd": 0, "bbox": [495, 133, 92, 70], "area": 4066}, {"id": 5599614, "category_id": 9, "iscrowd": 0, "bbox": [63, 131, 130, 43], "area": 1949}, {"id": 10204093, "category_id": 154, "iscrowd": 0, "bbox": [0, 253, 640, 161], "area": 79672}, {"id": 11575440, "category_id": 155, "iscrowd": 0, "bbox": [0, 122, 640, 52], "area": 11736}, {"id": 15646379, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 131], "area": 81150}, {"id": 8738616, "category_id": 192, "iscrowd": 0, "bbox": [593, 97, 47, 34], "area": 1108}, {"id": 9671569, "category_id": 194, "iscrowd": 0, "bbox": [0, 139, 640, 185], "area": 73782}], "file_name": "000000353518.png", "image_id": 353518}, {"segments_info": [{"id": 7958892, "category_id": 17, "iscrowd": 0, "bbox": [43, 0, 440, 381], "area": 81379}, {"id": 4737099, "category_id": 62, "iscrowd": 0, "bbox": [0, 0, 640, 421], "area": 169791}, {"id": 9797215, "category_id": 186, "iscrowd": 0, "bbox": [553, 168, 63, 237], "area": 6645}], "file_name": "000000353970.png", "image_id": 353970}, {"segments_info": [{"id": 4282743, "category_id": 44, "iscrowd": 0, "bbox": [51, 285, 20, 43], "area": 583}, {"id": 2963507, "category_id": 64, "iscrowd": 0, "bbox": [0, 319, 359, 321], "area": 53897}, {"id": 11511454, "category_id": 81, "iscrowd": 0, "bbox": [86, 281, 101, 63], "area": 5157}, {"id": 4673155, "category_id": 176, "iscrowd": 0, "bbox": [29, 239, 180, 89], "area": 7580}, {"id": 9672858, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 284, 59], "area": 11312}, {"id": 10523534, "category_id": 188, "iscrowd": 0, "bbox": [28, 308, 217, 141], "area": 16399}, {"id": 3427176, "category_id": 190, "iscrowd": 0, "bbox": [158, 464, 201, 176], "area": 16913}, {"id": 9870753, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 359, 556], "area": 116624}], "file_name": "000000354072.png", "image_id": 354072}, {"segments_info": [{"id": 7174299, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 500, 371], "area": 150105}, {"id": 10527636, "category_id": 141, "iscrowd": 0, "bbox": [0, 0, 375, 375], "area": 28053}, {"id": 1850689, "category_id": 190, "iscrowd": 0, "bbox": [0, 340, 268, 35], "area": 2537}], "file_name": "000000354307.png", "image_id": 354307}, {"segments_info": [{"id": 6514021, "category_id": 1, "iscrowd": 0, "bbox": [61, 97, 17, 21], "area": 183}, {"id": 11053223, "category_id": 1, "iscrowd": 0, "bbox": [95, 61, 177, 571], "area": 67713}, {"id": 14667697, "category_id": 32, "iscrowd": 0, "bbox": [211, 158, 13, 53], "area": 481}, {"id": 3886155, "category_id": 112, "iscrowd": 0, "bbox": [52, 6, 105, 129], "area": 8449}, {"id": 10266023, "category_id": 171, "iscrowd": 0, "bbox": [30, 0, 366, 137], "area": 4932}, {"id": 11646906, "category_id": 181, "iscrowd": 0, "bbox": [252, 0, 92, 101], "area": 4529}, {"id": 3229500, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 507], "area": 105867}, {"id": 4745822, "category_id": 193, "iscrowd": 0, "bbox": [0, 494, 427, 146], "area": 37897}, {"id": 14868452, "category_id": 199, "iscrowd": 0, "bbox": [150, 0, 107, 124], "area": 7231}], "file_name": "000000354547.png", "image_id": 354547}, {"segments_info": [{"id": 5855610, "category_id": 3, "iscrowd": 0, "bbox": [490, 218, 8, 6], "area": 35}, {"id": 139580, "category_id": 3, "iscrowd": 0, "bbox": [142, 220, 11, 10], "area": 76}, {"id": 14277359, "category_id": 3, "iscrowd": 0, "bbox": [320, 211, 39, 25], "area": 646}, {"id": 3026254, "category_id": 3, "iscrowd": 0, "bbox": [476, 215, 14, 10], "area": 109}, {"id": 1184533, "category_id": 3, "iscrowd": 0, "bbox": [16, 386, 623, 94], "area": 46265}, {"id": 6836161, "category_id": 10, "iscrowd": 0, "bbox": [488, 132, 18, 18], "area": 253}, {"id": 4009914, "category_id": 10, "iscrowd": 0, "bbox": [307, 140, 19, 21], "area": 330}, {"id": 6175973, "category_id": 10, "iscrowd": 0, "bbox": [367, 136, 21, 20], "area": 308}, {"id": 5915328, "category_id": 10, "iscrowd": 0, "bbox": [421, 132, 20, 19], "area": 268}, {"id": 4014163, "category_id": 149, "iscrowd": 0, "bbox": [0, 196, 640, 284], "area": 117755}, {"id": 329234, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 241], "area": 134669}], "file_name": "000000354753.png", "image_id": 354753}, {"segments_info": [{"id": 11051939, "category_id": 3, "iscrowd": 0, "bbox": [82, 84, 290, 154], "area": 29048}, {"id": 5988450, "category_id": 11, "iscrowd": 0, "bbox": [319, 207, 30, 53], "area": 1095}, {"id": 5195591, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 500, 258], "area": 68806}, {"id": 9214616, "category_id": 191, "iscrowd": 0, "bbox": [0, 179, 500, 196], "area": 76649}], "file_name": "000000354829.png", "image_id": 354829}, {"segments_info": [{"id": 15722724, "category_id": 85, "iscrowd": 0, "bbox": [241, 105, 76, 89], "area": 4623}, {"id": 3951694, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 280, 296], "area": 34799}], "file_name": "000000355169.png", "image_id": 355169}, {"segments_info": [{"id": 5263200, "category_id": 3, "iscrowd": 0, "bbox": [40, 83, 25, 18], "area": 271}, {"id": 6386572, "category_id": 18, "iscrowd": 0, "bbox": [193, 54, 179, 229], "area": 16058}, {"id": 7578312, "category_id": 18, "iscrowd": 0, "bbox": [134, 91, 94, 153], "area": 6494}, {"id": 4608133, "category_id": 63, "iscrowd": 0, "bbox": [36, 209, 556, 146], "area": 49147}, {"id": 7636369, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 145244}, {"id": 15264747, "category_id": 187, "iscrowd": 0, "bbox": [1, 0, 585, 51], "area": 7533}, {"id": 7835300, "category_id": 191, "iscrowd": 0, "bbox": [190, 333, 77, 27], "area": 1562}, {"id": 9753581, "category_id": 195, "iscrowd": 0, "bbox": [193, 146, 59, 99], "area": 3002}], "file_name": "000000355240.png", "image_id": 355240}, {"segments_info": [{"id": 10781302, "category_id": 1, "iscrowd": 0, "bbox": [326, 230, 310, 100], "area": 12874}, {"id": 11648702, "category_id": 44, "iscrowd": 0, "bbox": [250, 11, 27, 82], "area": 1860}, {"id": 9015693, "category_id": 65, "iscrowd": 0, "bbox": [276, 214, 364, 185], "area": 39183}, {"id": 461580, "category_id": 190, "iscrowd": 0, "bbox": [272, 308, 368, 119], "area": 12762}, {"id": 8429986, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 242], "area": 118153}], "file_name": "000000355257.png", "image_id": 355257}, {"segments_info": [{"id": 2637426, "category_id": 1, "iscrowd": 0, "bbox": [352, 3, 126, 140], "area": 12566}, {"id": 7556966, "category_id": 46, "iscrowd": 0, "bbox": [78, 0, 293, 353], "area": 40071}, {"id": 7099237, "category_id": 46, "iscrowd": 0, "bbox": [240, 169, 62, 108], "area": 3195}, {"id": 5918822, "category_id": 47, "iscrowd": 0, "bbox": [293, 98, 163, 178], "area": 21890}, {"id": 11640490, "category_id": 50, "iscrowd": 0, "bbox": [340, 363, 35, 36], "area": 321}, {"id": 6778757, "category_id": 50, "iscrowd": 0, "bbox": [49, 96, 75, 70], "area": 974}, {"id": 12362645, "category_id": 51, "iscrowd": 0, "bbox": [36, 122, 150, 104], "area": 10666}, {"id": 5001864, "category_id": 59, "iscrowd": 0, "bbox": [106, 383, 372, 247], "area": 63216}, {"id": 9212596, "category_id": 59, "iscrowd": 0, "bbox": [23, 327, 355, 310], "area": 38006}, {"id": 4801373, "category_id": 67, "iscrowd": 0, "bbox": [0, 156, 478, 286], "area": 58310}, {"id": 8290726, "category_id": 67, "iscrowd": 0, "bbox": [0, 334, 478, 297], "area": 26028}, {"id": 14207193, "category_id": 195, "iscrowd": 0, "bbox": [0, 375, 102, 83], "area": 364}, {"id": 5266311, "category_id": 196, "iscrowd": 0, "bbox": [0, 630, 478, 10], "area": 3817}, {"id": 8164776, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 324, 323], "area": 13387}], "file_name": "000000355325.png", "image_id": 355325}, {"segments_info": [{"id": 7171437, "category_id": 88, "iscrowd": 0, "bbox": [2, 38, 355, 384], "area": 90395}, {"id": 9868950, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 110438}], "file_name": "000000355610.png", "image_id": 355610}, {"segments_info": [{"id": 4699600, "category_id": 42, "iscrowd": 0, "bbox": [279, 312, 171, 86], "area": 8428}, {"id": 10403533, "category_id": 154, "iscrowd": 0, "bbox": [0, 353, 640, 127], "area": 62468}, {"id": 11766868, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 404], "area": 227029}], "file_name": "000000355677.png", "image_id": 355677}, {"segments_info": [{"id": 5328974, "category_id": 1, "iscrowd": 0, "bbox": [511, 201, 85, 55], "area": 1998}, {"id": 2895922, "category_id": 1, "iscrowd": 0, "bbox": [411, 200, 21, 37], "area": 498}, {"id": 3887977, "category_id": 6, "iscrowd": 0, "bbox": [133, 132, 496, 201], "area": 71546}, {"id": 6908265, "category_id": 149, "iscrowd": 0, "bbox": [0, 270, 640, 210], "area": 109427}, {"id": 6057831, "category_id": 184, "iscrowd": 0, "bbox": [599, 17, 41, 259], "area": 6987}, {"id": 5530736, "category_id": 185, "iscrowd": 0, "bbox": [628, 266, 12, 24], "area": 223}, {"id": 16645628, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 143], "area": 23723}, {"id": 8094345, "category_id": 191, "iscrowd": 0, "bbox": [68, 266, 572, 66], "area": 2167}, {"id": 7896977, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 614, 279], "area": 90343}], "file_name": "000000355817.png", "image_id": 355817}, {"segments_info": [{"id": 7967904, "category_id": 18, "iscrowd": 0, "bbox": [84, 66, 456, 397], "area": 58021}, {"id": 3358793, "category_id": 154, "iscrowd": 0, "bbox": [0, 173, 640, 307], "area": 133793}, {"id": 5721150, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 234], "area": 114895}], "file_name": "000000355905.png", "image_id": 355905}, {"segments_info": [{"id": 4811154, "category_id": 1, "iscrowd": 0, "bbox": [409, 118, 62, 217], "area": 8295}, {"id": 3225689, "category_id": 1, "iscrowd": 0, "bbox": [185, 36, 158, 349], "area": 37432}, {"id": 2241641, "category_id": 39, "iscrowd": 0, "bbox": [304, 85, 155, 39], "area": 1850}, {"id": 1201537, "category_id": 40, "iscrowd": 0, "bbox": [403, 229, 21, 25], "area": 422}, {"id": 1996950, "category_id": 145, "iscrowd": 0, "bbox": [0, 209, 640, 180], "area": 80757}, {"id": 475960, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 225], "area": 73232}, {"id": 71176, "category_id": 185, "iscrowd": 0, "bbox": [585, 127, 55, 118], "area": 5497}, {"id": 9741732, "category_id": 187, "iscrowd": 0, "bbox": [169, 0, 155, 34], "area": 2588}, {"id": 14016993, "category_id": 199, "iscrowd": 0, "bbox": [10, 125, 582, 109], "area": 37445}], "file_name": "000000356094.png", "image_id": 356094}, {"segments_info": [{"id": 5262428, "category_id": 1, "iscrowd": 0, "bbox": [0, 108, 72, 342], "area": 12768}, {"id": 3486783, "category_id": 22, "iscrowd": 0, "bbox": [0, 145, 601, 311], "area": 56845}, {"id": 6909309, "category_id": 22, "iscrowd": 0, "bbox": [51, 157, 175, 83], "area": 9798}, {"id": 13293795, "category_id": 154, "iscrowd": 0, "bbox": [82, 187, 558, 218], "area": 13482}, {"id": 16448250, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 127], "area": 31590}, {"id": 9278350, "category_id": 192, "iscrowd": 0, "bbox": [31, 19, 609, 163], "area": 59611}, {"id": 9944752, "category_id": 193, "iscrowd": 0, "bbox": [108, 137, 532, 92], "area": 16206}, {"id": 4868948, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 105368}], "file_name": "000000356125.png", "image_id": 356125}, {"segments_info": [{"id": 4934977, "category_id": 3, "iscrowd": 0, "bbox": [341, 322, 13, 12], "area": 46}, {"id": 2894623, "category_id": 3, "iscrowd": 0, "bbox": [22, 316, 36, 40], "area": 745}, {"id": 2170392, "category_id": 3, "iscrowd": 0, "bbox": [0, 296, 27, 65], "area": 1208}, {"id": 7828061, "category_id": 3, "iscrowd": 0, "bbox": [352, 323, 10, 9], "area": 63}, {"id": 6316368, "category_id": 3, "iscrowd": 0, "bbox": [278, 323, 25, 9], "area": 167}, {"id": 6314822, "category_id": 3, "iscrowd": 0, "bbox": [333, 323, 17, 14], "area": 196}, {"id": 6314829, "category_id": 3, "iscrowd": 0, "bbox": [364, 322, 18, 14], "area": 194}, {"id": 5067034, "category_id": 10, "iscrowd": 0, "bbox": [378, 300, 2, 2], "area": 3}, {"id": 7107601, "category_id": 10, "iscrowd": 0, "bbox": [380, 299, 3, 4], "area": 10}, {"id": 3948587, "category_id": 10, "iscrowd": 0, "bbox": [359, 293, 8, 22], "area": 142}, {"id": 2499112, "category_id": 11, "iscrowd": 0, "bbox": [45, 335, 18, 37], "area": 454}, {"id": 4474428, "category_id": 128, "iscrowd": 0, "bbox": [0, 137, 332, 210], "area": 29304}, {"id": 4736828, "category_id": 149, "iscrowd": 0, "bbox": [0, 328, 640, 152], "area": 72769}, {"id": 4342843, "category_id": 184, "iscrowd": 0, "bbox": [121, 11, 519, 371], "area": 64027}, {"id": 2500896, "category_id": 185, "iscrowd": 0, "bbox": [446, 274, 194, 116], "area": 11535}, {"id": 13485236, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 278], "area": 102622}, {"id": 2962989, "category_id": 191, "iscrowd": 0, "bbox": [0, 303, 418, 93], "area": 10800}, {"id": 3949621, "category_id": 192, "iscrowd": 0, "bbox": [228, 246, 188, 82], "area": 8004}, {"id": 2635559, "category_id": 193, "iscrowd": 0, "bbox": [407, 324, 233, 93], "area": 4740}], "file_name": "000000356169.png", "image_id": 356169}, {"segments_info": [{"id": 2895685, "category_id": 1, "iscrowd": 0, "bbox": [115, 230, 363, 409], "area": 82726}, {"id": 8157603, "category_id": 1, "iscrowd": 0, "bbox": [175, 92, 129, 180], "area": 5406}, {"id": 5197423, "category_id": 1, "iscrowd": 0, "bbox": [47, 88, 154, 160], "area": 13171}, {"id": 5993641, "category_id": 1, "iscrowd": 0, "bbox": [158, 168, 178, 230], "area": 24641}, {"id": 7119560, "category_id": 44, "iscrowd": 0, "bbox": [24, 236, 9, 33], "area": 243}, {"id": 2439558, "category_id": 44, "iscrowd": 0, "bbox": [2, 205, 25, 70], "area": 1173}, {"id": 5212337, "category_id": 44, "iscrowd": 0, "bbox": [33, 242, 16, 29], "area": 386}, {"id": 8963557, "category_id": 47, "iscrowd": 0, "bbox": [107, 250, 39, 39], "area": 1223}, {"id": 6725060, "category_id": 47, "iscrowd": 0, "bbox": [162, 249, 30, 47], "area": 1083}, {"id": 5478337, "category_id": 47, "iscrowd": 0, "bbox": [74, 239, 35, 45], "area": 1082}, {"id": 10071736, "category_id": 50, "iscrowd": 0, "bbox": [92, 223, 7, 25], "area": 130}, {"id": 7963531, "category_id": 50, "iscrowd": 0, "bbox": [97, 225, 6, 15], "area": 45}, {"id": 8971248, "category_id": 51, "iscrowd": 0, "bbox": [296, 276, 31, 31], "area": 588}, {"id": 7561319, "category_id": 62, "iscrowd": 0, "bbox": [413, 130, 65, 114], "area": 4327}, {"id": 859208, "category_id": 62, "iscrowd": 0, "bbox": [1, 412, 119, 150], "area": 10787}, {"id": 1254219, "category_id": 62, "iscrowd": 0, "bbox": [12, 544, 326, 96], "area": 21333}, {"id": 5124423, "category_id": 62, "iscrowd": 0, "bbox": [175, 148, 22, 33], "area": 447}, {"id": 1186616, "category_id": 62, "iscrowd": 0, "bbox": [232, 547, 246, 85], "area": 11047}, {"id": 11629178, "category_id": 64, "iscrowd": 0, "bbox": [167, 46, 61, 49], "area": 1861}, {"id": 5287881, "category_id": 64, "iscrowd": 0, "bbox": [0, 107, 33, 91], "area": 1894}, {"id": 9546957, "category_id": 64, "iscrowd": 0, "bbox": [65, 75, 52, 80], "area": 2727}, {"id": 2439780, "category_id": 67, "iscrowd": 0, "bbox": [2, 321, 166, 50], "area": 4403}, {"id": 12439274, "category_id": 130, "iscrowd": 0, "bbox": [13, 0, 91, 171], "area": 4652}, {"id": 10452172, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 478, 123], "area": 25975}, {"id": 2107233, "category_id": 177, "iscrowd": 0, "bbox": [0, 241, 26, 35], "area": 145}, {"id": 16645620, "category_id": 181, "iscrowd": 0, "bbox": [119, 0, 76, 80], "area": 5238}, {"id": 1580072, "category_id": 189, "iscrowd": 0, "bbox": [0, 251, 201, 300], "area": 7995}, {"id": 1183765, "category_id": 190, "iscrowd": 0, "bbox": [0, 459, 478, 181], "area": 8106}, {"id": 13690345, "category_id": 195, "iscrowd": 0, "bbox": [0, 95, 456, 259], "area": 10238}], "file_name": "000000356248.png", "image_id": 356248}, {"segments_info": [{"id": 7969957, "category_id": 19, "iscrowd": 0, "bbox": [78, 260, 154, 38], "area": 967}, {"id": 5601418, "category_id": 19, "iscrowd": 0, "bbox": [40, 265, 288, 175], "area": 27895}, {"id": 11381931, "category_id": 148, "iscrowd": 0, "bbox": [446, 196, 23, 17], "area": 255}, {"id": 2246456, "category_id": 184, "iscrowd": 0, "bbox": [101, 180, 528, 233], "area": 3400}, {"id": 16316663, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 66], "area": 16961}, {"id": 7304822, "category_id": 192, "iscrowd": 0, "bbox": [0, 9, 640, 394], "area": 89817}, {"id": 2320470, "category_id": 193, "iscrowd": 0, "bbox": [0, 50, 640, 430], "area": 151910}, {"id": 2437683, "category_id": 194, "iscrowd": 0, "bbox": [288, 142, 352, 131], "area": 15768}], "file_name": "000000356261.png", "image_id": 356261}, {"segments_info": [{"id": 12962230, "category_id": 50, "iscrowd": 0, "bbox": [337, 90, 303, 107], "area": 15552}, {"id": 4140564, "category_id": 51, "iscrowd": 0, "bbox": [397, 6, 243, 408], "area": 76939}, {"id": 3957648, "category_id": 51, "iscrowd": 0, "bbox": [0, 2, 421, 471], "area": 167796}, {"id": 4022920, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 255, 480], "area": 5177}], "file_name": "000000356347.png", "image_id": 356347}, {"segments_info": [{"id": 3414563, "category_id": 1, "iscrowd": 0, "bbox": [155, 193, 8, 24], "area": 109}, {"id": 4271417, "category_id": 1, "iscrowd": 0, "bbox": [0, 188, 18, 62], "area": 719}, {"id": 7893632, "category_id": 1, "iscrowd": 0, "bbox": [304, 217, 11, 19], "area": 136}, {"id": 3416633, "category_id": 1, "iscrowd": 0, "bbox": [184, 197, 12, 23], "area": 153}, {"id": 2691355, "category_id": 1, "iscrowd": 0, "bbox": [243, 207, 10, 26], "area": 153}, {"id": 2564935, "category_id": 1, "iscrowd": 0, "bbox": [347, 206, 19, 74], "area": 973}, {"id": 4082291, "category_id": 1, "iscrowd": 0, "bbox": [253, 206, 13, 29], "area": 179}, {"id": 2429725, "category_id": 1, "iscrowd": 0, "bbox": [327, 213, 11, 37], "area": 282}, {"id": 2232090, "category_id": 1, "iscrowd": 0, "bbox": [365, 215, 14, 20], "area": 157}, {"id": 3348506, "category_id": 1, "iscrowd": 0, "bbox": [362, 206, 52, 125], "area": 3586}, {"id": 4226199, "category_id": 1, "iscrowd": 0, "bbox": [334, 224, 11, 21], "area": 131}, {"id": 2495519, "category_id": 1, "iscrowd": 0, "bbox": [294, 210, 8, 23], "area": 121}, {"id": 1972302, "category_id": 1, "iscrowd": 0, "bbox": [281, 209, 9, 22], "area": 115}, {"id": 4143438, "category_id": 1, "iscrowd": 1, "bbox": [63, 191, 287, 57], "area": 1836}, {"id": 3219243, "category_id": 2, "iscrowd": 0, "bbox": [47, 263, 181, 69], "area": 2480}, {"id": 4009011, "category_id": 2, "iscrowd": 0, "bbox": [207, 262, 49, 22], "area": 450}, {"id": 2823970, "category_id": 4, "iscrowd": 0, "bbox": [192, 204, 11, 16], "area": 121}, {"id": 3416365, "category_id": 4, "iscrowd": 0, "bbox": [216, 222, 96, 86], "area": 3430}, {"id": 3218982, "category_id": 4, "iscrowd": 0, "bbox": [269, 232, 61, 48], "area": 1269}, {"id": 2365254, "category_id": 4, "iscrowd": 0, "bbox": [140, 267, 127, 65], "area": 4006}, {"id": 2034979, "category_id": 27, "iscrowd": 0, "bbox": [399, 237, 18, 42], "area": 494}, {"id": 5126466, "category_id": 149, "iscrowd": 0, "bbox": [0, 204, 283, 131], "area": 15211}, {"id": 2035999, "category_id": 181, "iscrowd": 0, "bbox": [11, 208, 40, 28], "area": 537}, {"id": 6514041, "category_id": 184, "iscrowd": 0, "bbox": [115, 141, 58, 71], "area": 3131}, {"id": 16054780, "category_id": 187, "iscrowd": 0, "bbox": [90, 0, 173, 144], "area": 13726}, {"id": 4469046, "category_id": 191, "iscrowd": 0, "bbox": [0, 197, 418, 138], "area": 9630}, {"id": 5397104, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 335], "area": 100111}], "file_name": "000000356387.png", "image_id": 356387}, {"segments_info": [{"id": 3685459, "category_id": 1, "iscrowd": 0, "bbox": [298, 115, 182, 225], "area": 25096}, {"id": 5329505, "category_id": 1, "iscrowd": 0, "bbox": [255, 168, 57, 103], "area": 2449}, {"id": 2631472, "category_id": 1, "iscrowd": 0, "bbox": [35, 69, 302, 388], "area": 79184}, {"id": 13089194, "category_id": 3, "iscrowd": 0, "bbox": [326, 193, 61, 34], "area": 1200}, {"id": 3100784, "category_id": 44, "iscrowd": 0, "bbox": [24, 456, 68, 184], "area": 8532}, {"id": 6388103, "category_id": 47, "iscrowd": 0, "bbox": [19, 472, 97, 115], "area": 4819}, {"id": 4938599, "category_id": 47, "iscrowd": 0, "bbox": [131, 460, 105, 168], "area": 15261}, {"id": 4872030, "category_id": 62, "iscrowd": 0, "bbox": [338, 321, 142, 137], "area": 12796}, {"id": 11778494, "category_id": 62, "iscrowd": 0, "bbox": [0, 306, 40, 102], "area": 1217}, {"id": 6122363, "category_id": 67, "iscrowd": 0, "bbox": [3, 387, 477, 244], "area": 39733}, {"id": 12829635, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 325, 370], "area": 49483}, {"id": 2961993, "category_id": 122, "iscrowd": 0, "bbox": [239, 471, 140, 93], "area": 3313}, {"id": 3886186, "category_id": 177, "iscrowd": 0, "bbox": [0, 342, 38, 69], "area": 1195}, {"id": 12566709, "category_id": 181, "iscrowd": 0, "bbox": [0, 15, 480, 327], "area": 5234}, {"id": 4609121, "category_id": 189, "iscrowd": 0, "bbox": [0, 455, 480, 185], "area": 6933}, {"id": 12962248, "category_id": 190, "iscrowd": 0, "bbox": [0, 411, 480, 114], "area": 656}, {"id": 9543590, "category_id": 195, "iscrowd": 0, "bbox": [202, 87, 40, 29], "area": 883}, {"id": 5797002, "category_id": 196, "iscrowd": 0, "bbox": [223, 465, 153, 114], "area": 8340}, {"id": 13422538, "category_id": 197, "iscrowd": 0, "bbox": [306, 0, 174, 236], "area": 22988}], "file_name": "000000356424.png", "image_id": 356424}, {"segments_info": [{"id": 5196884, "category_id": 1, "iscrowd": 0, "bbox": [162, 66, 133, 356], "area": 24922}, {"id": 3682872, "category_id": 27, "iscrowd": 0, "bbox": [372, 290, 99, 48], "area": 2049}, {"id": 1973017, "category_id": 27, "iscrowd": 0, "bbox": [279, 333, 84, 93], "area": 5646}, {"id": 1973545, "category_id": 27, "iscrowd": 0, "bbox": [301, 317, 87, 61], "area": 1959}, {"id": 3551278, "category_id": 27, "iscrowd": 0, "bbox": [419, 269, 102, 53], "area": 3172}, {"id": 7230546, "category_id": 31, "iscrowd": 0, "bbox": [359, 373, 53, 54], "area": 2383}, {"id": 12695486, "category_id": 31, "iscrowd": 0, "bbox": [409, 348, 70, 70], "area": 3708}, {"id": 3354412, "category_id": 33, "iscrowd": 0, "bbox": [390, 316, 55, 34], "area": 794}, {"id": 13154989, "category_id": 130, "iscrowd": 0, "bbox": [16, 0, 35, 19], "area": 593}, {"id": 7505561, "category_id": 144, "iscrowd": 0, "bbox": [0, 118, 583, 309], "area": 50788}, {"id": 3558507, "category_id": 147, "iscrowd": 0, "bbox": [0, 119, 509, 308], "area": 48211}, {"id": 4734790, "category_id": 171, "iscrowd": 0, "bbox": [547, 146, 93, 124], "area": 3551}, {"id": 3038027, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 160], "area": 53885}, {"id": 3493444, "category_id": 185, "iscrowd": 0, "bbox": [0, 115, 428, 89], "area": 7494}, {"id": 15326156, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 531, 93], "area": 21122}, {"id": 8687253, "category_id": 191, "iscrowd": 0, "bbox": [611, 257, 29, 170], "area": 3273}, {"id": 14207930, "category_id": 192, "iscrowd": 0, "bbox": [507, 84, 25, 17], "area": 311}, {"id": 6060941, "category_id": 193, "iscrowd": 0, "bbox": [506, 114, 24, 20], "area": 344}, {"id": 5662835, "category_id": 199, "iscrowd": 0, "bbox": [512, 113, 128, 184], "area": 6758}], "file_name": "000000356427.png", "image_id": 356427}, {"segments_info": [{"id": 2235676, "category_id": 1, "iscrowd": 0, "bbox": [460, 27, 40, 134], "area": 2260}, {"id": 2104867, "category_id": 1, "iscrowd": 0, "bbox": [421, 20, 61, 131], "area": 3260}, {"id": 3089980, "category_id": 1, "iscrowd": 0, "bbox": [34, 0, 121, 151], "area": 8971}, {"id": 5390406, "category_id": 1, "iscrowd": 0, "bbox": [474, 42, 7, 10], "area": 38}, {"id": 6391169, "category_id": 27, "iscrowd": 0, "bbox": [444, 43, 29, 40], "area": 635}, {"id": 1380368, "category_id": 27, "iscrowd": 0, "bbox": [475, 68, 25, 22], "area": 398}, {"id": 738943, "category_id": 52, "iscrowd": 0, "bbox": [57, 184, 81, 60], "area": 2963}, {"id": 1646381, "category_id": 52, "iscrowd": 0, "bbox": [251, 162, 15, 31], "area": 250}, {"id": 592924, "category_id": 52, "iscrowd": 0, "bbox": [196, 143, 15, 29], "area": 199}, {"id": 405859, "category_id": 52, "iscrowd": 0, "bbox": [0, 218, 47, 63], "area": 2653}, {"id": 339816, "category_id": 52, "iscrowd": 0, "bbox": [52, 210, 26, 51], "area": 938}, {"id": 140380, "category_id": 52, "iscrowd": 0, "bbox": [0, 186, 36, 34], "area": 978}, {"id": 544131, "category_id": 52, "iscrowd": 0, "bbox": [64, 225, 117, 56], "area": 3902}, {"id": 8366026, "category_id": 92, "iscrowd": 0, "bbox": [209, 0, 247, 59], "area": 6406}, {"id": 2839414, "category_id": 122, "iscrowd": 0, "bbox": [47, 154, 79, 127], "area": 1739}, {"id": 8896199, "category_id": 138, "iscrowd": 0, "bbox": [215, 12, 73, 85], "area": 1800}, {"id": 16183785, "category_id": 149, "iscrowd": 0, "bbox": [0, 46, 17, 49], "area": 630}, {"id": 5073006, "category_id": 189, "iscrowd": 0, "bbox": [90, 115, 271, 166], "area": 18243}, {"id": 8158835, "category_id": 190, "iscrowd": 0, "bbox": [309, 57, 191, 224], "area": 24202}, {"id": 15065826, "category_id": 191, "iscrowd": 0, "bbox": [423, 72, 28, 23], "area": 104}, {"id": 4410988, "category_id": 195, "iscrowd": 0, "bbox": [133, 72, 193, 209], "area": 5768}, {"id": 3557209, "category_id": 196, "iscrowd": 0, "bbox": [81, 30, 268, 184], "area": 11402}, {"id": 12238010, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 72], "area": 3445}], "file_name": "000000356428.png", "image_id": 356428}, {"segments_info": [{"id": 9674414, "category_id": 47, "iscrowd": 0, "bbox": [62, 261, 12, 16], "area": 137}, {"id": 2370861, "category_id": 47, "iscrowd": 0, "bbox": [524, 210, 20, 33], "area": 604}, {"id": 5592655, "category_id": 63, "iscrowd": 0, "bbox": [139, 190, 376, 204], "area": 52438}, {"id": 3289901, "category_id": 63, "iscrowd": 0, "bbox": [545, 204, 95, 157], "area": 9844}, {"id": 1316887, "category_id": 76, "iscrowd": 0, "bbox": [460, 308, 92, 22], "area": 1042}, {"id": 4942454, "category_id": 112, "iscrowd": 0, "bbox": [531, 51, 86, 193], "area": 10818}, {"id": 8167636, "category_id": 130, "iscrowd": 0, "bbox": [48, 148, 96, 109], "area": 5468}, {"id": 2172713, "category_id": 189, "iscrowd": 0, "bbox": [63, 226, 564, 190], "area": 38599}, {"id": 6252400, "category_id": 190, "iscrowd": 0, "bbox": [40, 327, 600, 89], "area": 12246}, {"id": 8751757, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 329], "area": 118130}, {"id": 3949902, "category_id": 200, "iscrowd": 0, "bbox": [234, 391, 385, 25], "area": 1604}], "file_name": "000000356432.png", "image_id": 356432}, {"segments_info": [{"id": 3042399, "category_id": 56, "iscrowd": 0, "bbox": [107, 34, 93, 98], "area": 5411}, {"id": 3244423, "category_id": 56, "iscrowd": 0, "bbox": [237, 9, 129, 124], "area": 9393}, {"id": 3761552, "category_id": 196, "iscrowd": 0, "bbox": [6, 6, 494, 328], "area": 105765}], "file_name": "000000356498.png", "image_id": 356498}, {"segments_info": [{"id": 5002878, "category_id": 1, "iscrowd": 0, "bbox": [223, 86, 176, 269], "area": 15305}, {"id": 13944256, "category_id": 42, "iscrowd": 0, "bbox": [335, 343, 148, 30], "area": 2214}, {"id": 11447982, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 254164}], "file_name": "000000356505.png", "image_id": 356505}, {"segments_info": [{"id": 7107213, "category_id": 1, "iscrowd": 0, "bbox": [1, 17, 410, 458], "area": 116093}, {"id": 3030617, "category_id": 44, "iscrowd": 0, "bbox": [448, 227, 12, 17], "area": 168}, {"id": 794204, "category_id": 44, "iscrowd": 0, "bbox": [423, 214, 19, 77], "area": 1020}, {"id": 2965621, "category_id": 44, "iscrowd": 0, "bbox": [475, 228, 11, 17], "area": 147}, {"id": 591925, "category_id": 47, "iscrowd": 0, "bbox": [443, 240, 59, 92], "area": 4420}, {"id": 1717320, "category_id": 48, "iscrowd": 0, "bbox": [447, 436, 127, 44], "area": 1376}, {"id": 1059660, "category_id": 67, "iscrowd": 0, "bbox": [339, 274, 301, 205], "area": 21305}, {"id": 1525114, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 90, 354], "area": 11727}, {"id": 594473, "category_id": 189, "iscrowd": 0, "bbox": [337, 292, 303, 188], "area": 3281}, {"id": 2846098, "category_id": 196, "iscrowd": 0, "bbox": [372, 309, 240, 128], "area": 19209}, {"id": 2777528, "category_id": 199, "iscrowd": 0, "bbox": [47, 0, 593, 351], "area": 117236}], "file_name": "000000356531.png", "image_id": 356531}, {"segments_info": [{"id": 6513253, "category_id": 1, "iscrowd": 0, "bbox": [23, 163, 7, 13], "area": 78}, {"id": 7368054, "category_id": 1, "iscrowd": 0, "bbox": [63, 158, 12, 16], "area": 142}, {"id": 3287075, "category_id": 1, "iscrowd": 0, "bbox": [555, 168, 59, 111], "area": 3075}, {"id": 5127738, "category_id": 1, "iscrowd": 0, "bbox": [528, 170, 38, 103], "area": 2344}, {"id": 11249829, "category_id": 1, "iscrowd": 0, "bbox": [447, 151, 47, 36], "area": 759}, {"id": 4864310, "category_id": 1, "iscrowd": 0, "bbox": [58, 158, 6, 17], "area": 83}, {"id": 10327182, "category_id": 1, "iscrowd": 0, "bbox": [377, 145, 34, 37], "area": 725}, {"id": 4867913, "category_id": 2, "iscrowd": 0, "bbox": [505, 212, 110, 119], "area": 5997}, {"id": 11049098, "category_id": 3, "iscrowd": 0, "bbox": [283, 164, 35, 38], "area": 883}, {"id": 9668993, "category_id": 3, "iscrowd": 0, "bbox": [202, 188, 122, 99], "area": 5686}, {"id": 9086652, "category_id": 6, "iscrowd": 0, "bbox": [1, 130, 251, 93], "area": 12345}, {"id": 10263449, "category_id": 8, "iscrowd": 0, "bbox": [314, 99, 210, 206], "area": 22122}, {"id": 6313039, "category_id": 21, "iscrowd": 0, "bbox": [242, 179, 19, 12], "area": 145}, {"id": 3484713, "category_id": 21, "iscrowd": 0, "bbox": [318, 197, 84, 144], "area": 7851}, {"id": 3945264, "category_id": 21, "iscrowd": 0, "bbox": [59, 193, 75, 122], "area": 5762}, {"id": 3945005, "category_id": 21, "iscrowd": 0, "bbox": [112, 202, 44, 105], "area": 2223}, {"id": 4273970, "category_id": 21, "iscrowd": 0, "bbox": [225, 199, 59, 100], "area": 3799}, {"id": 4208434, "category_id": 21, "iscrowd": 0, "bbox": [145, 195, 62, 118], "area": 4890}, {"id": 6050899, "category_id": 21, "iscrowd": 0, "bbox": [51, 186, 67, 76], "area": 753}, {"id": 5128765, "category_id": 21, "iscrowd": 0, "bbox": [203, 184, 18, 29], "area": 323}, {"id": 3287590, "category_id": 21, "iscrowd": 0, "bbox": [404, 203, 80, 134], "area": 6562}, {"id": 11317686, "category_id": 92, "iscrowd": 0, "bbox": [0, 0, 640, 105], "area": 30077}, {"id": 4011573, "category_id": 128, "iscrowd": 0, "bbox": [536, 59, 104, 86], "area": 7056}, {"id": 8813947, "category_id": 149, "iscrowd": 0, "bbox": [0, 187, 640, 229], "area": 79192}, {"id": 7371383, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 200], "area": 37220}, {"id": 4933446, "category_id": 185, "iscrowd": 0, "bbox": [514, 132, 126, 139], "area": 5689}, {"id": 12499642, "category_id": 187, "iscrowd": 0, "bbox": [323, 0, 270, 275], "area": 2691}, {"id": 5265504, "category_id": 194, "iscrowd": 0, "bbox": [613, 259, 27, 49], "area": 1092}, {"id": 13291731, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 328, 191], "area": 8586}, {"id": 9146256, "category_id": 199, "iscrowd": 0, "bbox": [15, 210, 56, 52], "area": 1286}], "file_name": "000000356612.png", "image_id": 356612}, {"segments_info": [{"id": 4547982, "category_id": 19, "iscrowd": 0, "bbox": [1, 115, 557, 333], "area": 75904}, {"id": 5075578, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 144], "area": 81639}, {"id": 6327442, "category_id": 193, "iscrowd": 0, "bbox": [0, 107, 640, 373], "area": 148948}], "file_name": "000000356968.png", "image_id": 356968}, {"segments_info": [{"id": 5001304, "category_id": 16, "iscrowd": 0, "bbox": [232, 165, 116, 72], "area": 3028}, {"id": 7170666, "category_id": 154, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 268837}], "file_name": "000000357060.png", "image_id": 357060}, {"segments_info": [{"id": 6448229, "category_id": 21, "iscrowd": 0, "bbox": [127, 134, 168, 161], "area": 14571}, {"id": 6118494, "category_id": 21, "iscrowd": 0, "bbox": [236, 96, 390, 252], "area": 53956}, {"id": 921358, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 187], "area": 74871}, {"id": 2113334, "category_id": 193, "iscrowd": 0, "bbox": [0, 111, 640, 316], "area": 129386}], "file_name": "000000357081.png", "image_id": 357081}, {"segments_info": [{"id": 5656402, "category_id": 1, "iscrowd": 0, "bbox": [225, 522, 8, 24], "area": 95}, {"id": 8878947, "category_id": 38, "iscrowd": 0, "bbox": [170, 142, 58, 70], "area": 1904}, {"id": 6778481, "category_id": 154, "iscrowd": 0, "bbox": [156, 578, 271, 21], "area": 3066}, {"id": 9997180, "category_id": 155, "iscrowd": 0, "bbox": [0, 479, 427, 161], "area": 65535}, {"id": 12560269, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 480], "area": 202605}], "file_name": "000000357238.png", "image_id": 357238}, {"segments_info": [{"id": 1917574, "category_id": 59, "iscrowd": 0, "bbox": [0, 15, 637, 355], "area": 165696}, {"id": 4680866, "category_id": 196, "iscrowd": 0, "bbox": [0, 100, 640, 264], "area": 1148}], "file_name": "000000357430.png", "image_id": 357430}, {"segments_info": [{"id": 11640549, "category_id": 1, "iscrowd": 0, "bbox": [1, 150, 171, 177], "area": 14495}, {"id": 10465984, "category_id": 18, "iscrowd": 0, "bbox": [268, 100, 198, 287], "area": 25734}, {"id": 9883746, "category_id": 34, "iscrowd": 0, "bbox": [98, 85, 189, 104], "area": 13275}, {"id": 3300944, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 219109}], "file_name": "000000357459.png", "image_id": 357459}, {"segments_info": [{"id": 5798796, "category_id": 87, "iscrowd": 0, "bbox": [26, 21, 477, 450], "area": 53901}, {"id": 9013391, "category_id": 100, "iscrowd": 0, "bbox": [0, 0, 640, 207], "area": 25633}, {"id": 6451070, "category_id": 118, "iscrowd": 0, "bbox": [0, 360, 25, 120], "area": 2054}, {"id": 8290959, "category_id": 189, "iscrowd": 0, "bbox": [0, 179, 640, 301], "area": 86748}], "file_name": "000000357501.png", "image_id": 357501}, {"segments_info": [{"id": 8030870, "category_id": 70, "iscrowd": 0, "bbox": [281, 365, 199, 254], "area": 15748}, {"id": 11719656, "category_id": 81, "iscrowd": 0, "bbox": [473, 458, 7, 27], "area": 104}, {"id": 12110033, "category_id": 107, "iscrowd": 0, "bbox": [391, 412, 89, 128], "area": 6187}, {"id": 7961216, "category_id": 109, "iscrowd": 0, "bbox": [49, 0, 417, 510], "area": 191568}, {"id": 10204612, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 71, 640], "area": 35477}, {"id": 7764862, "category_id": 133, "iscrowd": 0, "bbox": [443, 253, 37, 71], "area": 2025}, {"id": 5923698, "category_id": 176, "iscrowd": 0, "bbox": [441, 0, 39, 379], "area": 8082}, {"id": 6450035, "category_id": 188, "iscrowd": 0, "bbox": [379, 468, 101, 172], "area": 12550}, {"id": 2698803, "category_id": 190, "iscrowd": 0, "bbox": [285, 605, 55, 35], "area": 1183}, {"id": 5724768, "category_id": 199, "iscrowd": 0, "bbox": [60, 501, 226, 42], "area": 7384}, {"id": 5790047, "category_id": 200, "iscrowd": 0, "bbox": [62, 535, 243, 105], "area": 23067}], "file_name": "000000357567.png", "image_id": 357567}, {"segments_info": [{"id": 6842702, "category_id": 1, "iscrowd": 0, "bbox": [168, 95, 5, 8], "area": 27}, {"id": 7169880, "category_id": 1, "iscrowd": 0, "bbox": [123, 98, 19, 29], "area": 269}, {"id": 7558984, "category_id": 1, "iscrowd": 0, "bbox": [406, 21, 181, 435], "area": 37580}, {"id": 10323310, "category_id": 1, "iscrowd": 0, "bbox": [154, 90, 20, 19], "area": 205}, {"id": 7698046, "category_id": 2, "iscrowd": 0, "bbox": [45, 136, 351, 330], "area": 57351}, {"id": 6644060, "category_id": 2, "iscrowd": 0, "bbox": [19, 142, 51, 31], "area": 584}, {"id": 10926799, "category_id": 3, "iscrowd": 0, "bbox": [577, 88, 6, 3], "area": 16}, {"id": 10130824, "category_id": 3, "iscrowd": 0, "bbox": [135, 98, 126, 29], "area": 1668}, {"id": 7498652, "category_id": 3, "iscrowd": 0, "bbox": [63, 113, 332, 144], "area": 22597}, {"id": 7105903, "category_id": 4, "iscrowd": 0, "bbox": [228, 109, 214, 354], "area": 20278}, {"id": 10660994, "category_id": 8, "iscrowd": 0, "bbox": [28, 89, 163, 76], "area": 6115}, {"id": 8825245, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 128], "area": 56070}, {"id": 9211276, "category_id": 191, "iscrowd": 0, "bbox": [0, 85, 640, 395], "area": 78872}, {"id": 10672839, "category_id": 193, "iscrowd": 0, "bbox": [0, 76, 640, 71], "area": 6028}, {"id": 9282225, "category_id": 194, "iscrowd": 0, "bbox": [351, 120, 289, 171], "area": 12076}], "file_name": "000000357737.png", "image_id": 357737}, {"segments_info": [{"id": 4736074, "category_id": 1, "iscrowd": 0, "bbox": [144, 438, 82, 181], "area": 4235}, {"id": 3226445, "category_id": 27, "iscrowd": 0, "bbox": [157, 449, 41, 62], "area": 1910}, {"id": 12366767, "category_id": 159, "iscrowd": 0, "bbox": [0, 167, 429, 473], "area": 99780}, {"id": 7499371, "category_id": 184, "iscrowd": 0, "bbox": [0, 127, 429, 398], "area": 76932}, {"id": 12959162, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 429, 328], "area": 91545}], "file_name": "000000357742.png", "image_id": 357742}, {"segments_info": [{"id": 9935003, "category_id": 1, "iscrowd": 0, "bbox": [48, 194, 4, 34], "area": 37}, {"id": 6378065, "category_id": 1, "iscrowd": 0, "bbox": [39, 190, 13, 41], "area": 323}, {"id": 10261147, "category_id": 1, "iscrowd": 0, "bbox": [8, 191, 14, 37], "area": 250}, {"id": 6710130, "category_id": 1, "iscrowd": 0, "bbox": [24, 195, 16, 34], "area": 262}, {"id": 8285053, "category_id": 6, "iscrowd": 0, "bbox": [53, 2, 587, 422], "area": 182119}, {"id": 3880500, "category_id": 149, "iscrowd": 0, "bbox": [12, 218, 628, 262], "area": 37469}, {"id": 7643538, "category_id": 184, "iscrowd": 0, "bbox": [0, 90, 73, 120], "area": 4378}, {"id": 5984121, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 127, 54], "area": 3503}, {"id": 16513787, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 132], "area": 35569}, {"id": 4471874, "category_id": 191, "iscrowd": 0, "bbox": [0, 236, 346, 244], "area": 41159}], "file_name": "000000357748.png", "image_id": 357748}, {"segments_info": [{"id": 6572119, "category_id": 1, "iscrowd": 0, "bbox": [285, 1, 86, 260], "area": 10310}, {"id": 4929870, "category_id": 1, "iscrowd": 0, "bbox": [402, 47, 97, 202], "area": 9902}, {"id": 10915746, "category_id": 1, "iscrowd": 0, "bbox": [13, 67, 293, 380], "area": 37362}, {"id": 4341076, "category_id": 1, "iscrowd": 0, "bbox": [1, 80, 96, 209], "area": 11300}, {"id": 9798776, "category_id": 3, "iscrowd": 0, "bbox": [5, 5, 296, 81], "area": 11875}, {"id": 5195081, "category_id": 15, "iscrowd": 0, "bbox": [179, 103, 285, 147], "area": 7226}, {"id": 12504985, "category_id": 28, "iscrowd": 0, "bbox": [18, 28, 106, 95], "area": 4906}, {"id": 12439540, "category_id": 37, "iscrowd": 0, "bbox": [406, 189, 20, 22], "area": 349}, {"id": 4808371, "category_id": 39, "iscrowd": 0, "bbox": [268, 184, 83, 52], "area": 1507}, {"id": 2498353, "category_id": 40, "iscrowd": 0, "bbox": [348, 105, 36, 33], "area": 913}, {"id": 8697059, "category_id": 145, "iscrowd": 0, "bbox": [0, 224, 500, 231], "area": 77987}, {"id": 7039865, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 500, 284], "area": 49223}], "file_name": "000000357816.png", "image_id": 357816}, {"segments_info": [{"id": 4942288, "category_id": 1, "iscrowd": 0, "bbox": [302, 159, 260, 309], "area": 36160}, {"id": 2396082, "category_id": 38, "iscrowd": 0, "bbox": [206, 159, 182, 144], "area": 15008}, {"id": 4611683, "category_id": 44, "iscrowd": 0, "bbox": [255, 431, 22, 18], "area": 241}, {"id": 3426893, "category_id": 44, "iscrowd": 0, "bbox": [183, 405, 19, 28], "area": 313}, {"id": 1646111, "category_id": 44, "iscrowd": 0, "bbox": [220, 462, 21, 18], "area": 264}, {"id": 2039845, "category_id": 44, "iscrowd": 0, "bbox": [202, 405, 19, 28], "area": 340}, {"id": 3687248, "category_id": 44, "iscrowd": 0, "bbox": [237, 402, 21, 25], "area": 297}, {"id": 3489081, "category_id": 44, "iscrowd": 0, "bbox": [166, 408, 19, 28], "area": 301}, {"id": 2631728, "category_id": 44, "iscrowd": 0, "bbox": [256, 404, 18, 20], "area": 172}, {"id": 1251610, "category_id": 44, "iscrowd": 0, "bbox": [185, 437, 19, 27], "area": 281}, {"id": 3756384, "category_id": 44, "iscrowd": 0, "bbox": [223, 405, 17, 28], "area": 275}, {"id": 1713450, "category_id": 44, "iscrowd": 0, "bbox": [221, 435, 19, 25], "area": 262}, {"id": 1251612, "category_id": 44, "iscrowd": 0, "bbox": [167, 468, 19, 12], "area": 197}, {"id": 3884872, "category_id": 44, "iscrowd": 0, "bbox": [199, 406, 9, 19], "area": 45}, {"id": 2242362, "category_id": 44, "iscrowd": 0, "bbox": [205, 437, 18, 24], "area": 282}, {"id": 2700607, "category_id": 44, "iscrowd": 1, "bbox": [187, 336, 370, 144], "area": 908}, {"id": 7827042, "category_id": 46, "iscrowd": 0, "bbox": [166, 373, 19, 26], "area": 297}, {"id": 8156531, "category_id": 46, "iscrowd": 0, "bbox": [186, 377, 17, 23], "area": 211}, {"id": 8223608, "category_id": 46, "iscrowd": 0, "bbox": [225, 368, 17, 32], "area": 316}, {"id": 7893871, "category_id": 46, "iscrowd": 0, "bbox": [206, 369, 18, 34], "area": 335}, {"id": 7763318, "category_id": 46, "iscrowd": 0, "bbox": [246, 367, 12, 38], "area": 215}, {"id": 2047069, "category_id": 47, "iscrowd": 0, "bbox": [555, 178, 13, 27], "area": 180}, {"id": 1911346, "category_id": 47, "iscrowd": 0, "bbox": [621, 263, 12, 16], "area": 160}, {"id": 4415610, "category_id": 47, "iscrowd": 0, "bbox": [600, 67, 34, 25], "area": 562}, {"id": 2508123, "category_id": 47, "iscrowd": 0, "bbox": [590, 175, 17, 25], "area": 391}, {"id": 2570305, "category_id": 47, "iscrowd": 0, "bbox": [604, 262, 20, 19], "area": 285}, {"id": 3354927, "category_id": 47, "iscrowd": 0, "bbox": [270, 343, 19, 15], "area": 272}, {"id": 1577746, "category_id": 47, "iscrowd": 0, "bbox": [556, 350, 27, 31], "area": 761}, {"id": 1919845, "category_id": 47, "iscrowd": 0, "bbox": [607, 173, 22, 26], "area": 476}, {"id": 12758955, "category_id": 51, "iscrowd": 0, "bbox": [585, 375, 55, 25], "area": 859}, {"id": 2765702, "category_id": 53, "iscrowd": 0, "bbox": [589, 366, 13, 9], "area": 65}, {"id": 3222844, "category_id": 53, "iscrowd": 0, "bbox": [615, 365, 13, 12], "area": 105}, {"id": 3426190, "category_id": 53, "iscrowd": 0, "bbox": [617, 375, 14, 7], "area": 81}, {"id": 1918269, "category_id": 53, "iscrowd": 0, "bbox": [596, 373, 12, 6], "area": 50}, {"id": 10657959, "category_id": 85, "iscrowd": 0, "bbox": [549, 421, 5, 8], "area": 35}, {"id": 4348757, "category_id": 86, "iscrowd": 0, "bbox": [210, 312, 30, 47], "area": 1035}, {"id": 8288394, "category_id": 100, "iscrowd": 0, "bbox": [249, 432, 391, 48], "area": 10672}, {"id": 3754846, "category_id": 119, "iscrowd": 0, "bbox": [122, 173, 141, 141], "area": 7475}, {"id": 3360096, "category_id": 156, "iscrowd": 0, "bbox": [137, 80, 503, 400], "area": 38523}, {"id": 14473174, "category_id": 181, "iscrowd": 0, "bbox": [374, 178, 48, 72], "area": 2400}, {"id": 6515582, "category_id": 186, "iscrowd": 0, "bbox": [47, 0, 593, 107], "area": 50353}, {"id": 3690095, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 27891}, {"id": 7758171, "category_id": 190, "iscrowd": 0, "bbox": [342, 407, 29, 35], "area": 733}, {"id": 4345945, "category_id": 195, "iscrowd": 0, "bbox": [32, 155, 514, 325], "area": 11477}, {"id": 5531491, "category_id": 199, "iscrowd": 0, "bbox": [34, 36, 606, 444], "area": 74241}, {"id": 2570599, "category_id": 200, "iscrowd": 0, "bbox": [486, 432, 22, 33], "area": 355}], "file_name": "000000357888.png", "image_id": 357888}, {"segments_info": [{"id": 4481399, "category_id": 59, "iscrowd": 0, "bbox": [74, 4, 362, 91], "area": 26840}, {"id": 4547185, "category_id": 59, "iscrowd": 0, "bbox": [6, 114, 467, 451], "area": 185899}, {"id": 5265500, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 85113}, {"id": 3296357, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 480, 564], "area": 8054}], "file_name": "000000357903.png", "image_id": 357903}, {"segments_info": [{"id": 1448733, "category_id": 17, "iscrowd": 0, "bbox": [161, 136, 237, 76], "area": 10844}, {"id": 3947838, "category_id": 72, "iscrowd": 0, "bbox": [135, 200, 290, 170], "area": 45369}, {"id": 4277574, "category_id": 77, "iscrowd": 0, "bbox": [23, 211, 21, 53], "area": 889}, {"id": 5329228, "category_id": 195, "iscrowd": 0, "bbox": [467, 238, 33, 30], "area": 576}, {"id": 11252403, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 68684}], "file_name": "000000357941.png", "image_id": 357941}, {"segments_info": [{"id": 3223355, "category_id": 1, "iscrowd": 0, "bbox": [32, 115, 28, 75], "area": 1511}, {"id": 3817051, "category_id": 1, "iscrowd": 0, "bbox": [153, 104, 105, 271], "area": 14642}, {"id": 3885162, "category_id": 1, "iscrowd": 0, "bbox": [77, 158, 11, 20], "area": 53}, {"id": 10527141, "category_id": 1, "iscrowd": 0, "bbox": [243, 123, 85, 247], "area": 12658}, {"id": 4935010, "category_id": 1, "iscrowd": 0, "bbox": [97, 108, 62, 178], "area": 6018}, {"id": 2636118, "category_id": 62, "iscrowd": 0, "bbox": [140, 164, 37, 70], "area": 1105}, {"id": 1647418, "category_id": 62, "iscrowd": 0, "bbox": [64, 163, 25, 54], "area": 541}, {"id": 2571621, "category_id": 62, "iscrowd": 0, "bbox": [146, 160, 5, 15], "area": 70}, {"id": 3293016, "category_id": 63, "iscrowd": 0, "bbox": [0, 176, 96, 83], "area": 5833}, {"id": 3884380, "category_id": 64, "iscrowd": 0, "bbox": [149, 119, 25, 41], "area": 514}, {"id": 11508897, "category_id": 72, "iscrowd": 0, "bbox": [181, 107, 22, 21], "area": 379}, {"id": 10526626, "category_id": 75, "iscrowd": 0, "bbox": [250, 252, 8, 12], "area": 75}, {"id": 9546643, "category_id": 75, "iscrowd": 0, "bbox": [447, 314, 8, 8], "area": 44}, {"id": 3489357, "category_id": 86, "iscrowd": 0, "bbox": [150, 143, 12, 29], "area": 263}, {"id": 6455182, "category_id": 118, "iscrowd": 0, "bbox": [0, 210, 500, 165], "area": 17530}, {"id": 9147812, "category_id": 130, "iscrowd": 0, "bbox": [13, 70, 398, 72], "area": 2283}, {"id": 2765125, "category_id": 156, "iscrowd": 0, "bbox": [57, 108, 125, 57], "area": 1370}, {"id": 8617342, "category_id": 166, "iscrowd": 0, "bbox": [117, 0, 383, 101], "area": 16476}, {"id": 3617849, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 500, 102], "area": 19743}, {"id": 2371396, "category_id": 188, "iscrowd": 0, "bbox": [14, 80, 155, 160], "area": 5685}, {"id": 8423564, "category_id": 199, "iscrowd": 0, "bbox": [0, 25, 500, 303], "area": 54223}, {"id": 3030405, "category_id": 200, "iscrowd": 0, "bbox": [0, 234, 500, 141], "area": 21673}], "file_name": "000000357978.png", "image_id": 357978}, {"segments_info": [{"id": 9471897, "category_id": 1, "iscrowd": 0, "bbox": [204, 106, 137, 439], "area": 40154}, {"id": 5394233, "category_id": 41, "iscrowd": 0, "bbox": [267, 470, 100, 86], "area": 3439}, {"id": 6714727, "category_id": 151, "iscrowd": 0, "bbox": [0, 18, 110, 57], "area": 4481}, {"id": 2372401, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 483, 237], "area": 73981}, {"id": 1845287, "category_id": 185, "iscrowd": 0, "bbox": [0, 120, 111, 152], "area": 15047}, {"id": 6317919, "category_id": 191, "iscrowd": 0, "bbox": [0, 193, 483, 447], "area": 140147}, {"id": 4350572, "category_id": 193, "iscrowd": 0, "bbox": [0, 144, 483, 257], "area": 31338}], "file_name": "000000358195.png", "image_id": 358195}, {"segments_info": [{"id": 2767940, "category_id": 48, "iscrowd": 0, "bbox": [115, 224, 525, 158], "area": 30187}, {"id": 1330248, "category_id": 56, "iscrowd": 0, "bbox": [288, 21, 251, 393], "area": 35163}, {"id": 992809, "category_id": 56, "iscrowd": 0, "bbox": [143, 92, 72, 235], "area": 8054}, {"id": 3699068, "category_id": 196, "iscrowd": 0, "bbox": [165, 49, 194, 295], "area": 31496}], "file_name": "000000358427.png", "image_id": 358427}, {"segments_info": [{"id": 11050890, "category_id": 1, "iscrowd": 0, "bbox": [4, 97, 431, 336], "area": 59268}, {"id": 3221618, "category_id": 33, "iscrowd": 0, "bbox": [0, 45, 246, 136], "area": 23760}, {"id": 2958685, "category_id": 33, "iscrowd": 0, "bbox": [297, 206, 241, 78], "area": 9339}, {"id": 11185064, "category_id": 73, "iscrowd": 0, "bbox": [228, 302, 400, 177], "area": 46874}, {"id": 9214885, "category_id": 93, "iscrowd": 0, "bbox": [0, 255, 640, 225], "area": 44675}, {"id": 11779519, "category_id": 109, "iscrowd": 0, "bbox": [321, 0, 319, 308], "area": 74792}, {"id": 2637157, "category_id": 177, "iscrowd": 0, "bbox": [266, 281, 15, 20], "area": 158}, {"id": 3559786, "category_id": 190, "iscrowd": 0, "bbox": [0, 163, 140, 278], "area": 14474}, {"id": 9414318, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 342, 288], "area": 21416}], "file_name": "000000358525.png", "image_id": 358525}, {"segments_info": [{"id": 2303800, "category_id": 1, "iscrowd": 0, "bbox": [315, 3, 293, 425], "area": 18168}, {"id": 12893626, "category_id": 1, "iscrowd": 0, "bbox": [575, 54, 65, 374], "area": 11710}, {"id": 1907556, "category_id": 1, "iscrowd": 0, "bbox": [24, 84, 548, 336], "area": 95185}, {"id": 6843255, "category_id": 1, "iscrowd": 0, "bbox": [252, 155, 145, 267], "area": 10648}, {"id": 10395293, "category_id": 28, "iscrowd": 0, "bbox": [222, 21, 394, 152], "area": 27413}, {"id": 4803408, "category_id": 77, "iscrowd": 0, "bbox": [403, 144, 83, 89], "area": 964}, {"id": 9538694, "category_id": 100, "iscrowd": 0, "bbox": [0, 0, 184, 187], "area": 14243}, {"id": 11845571, "category_id": 191, "iscrowd": 0, "bbox": [142, 368, 112, 60], "area": 5652}], "file_name": "000000358923.png", "image_id": 358923}, {"segments_info": [{"id": 5401734, "category_id": 22, "iscrowd": 0, "bbox": [0, 144, 390, 278], "area": 80772}, {"id": 5662583, "category_id": 22, "iscrowd": 0, "bbox": [131, 43, 509, 384], "area": 100208}, {"id": 6058389, "category_id": 197, "iscrowd": 0, "bbox": [33, 0, 607, 175], "area": 38108}], "file_name": "000000359135.png", "image_id": 359135}, {"segments_info": [{"id": 5003103, "category_id": 48, "iscrowd": 0, "bbox": [386, 131, 46, 260], "area": 5264}, {"id": 1647661, "category_id": 49, "iscrowd": 0, "bbox": [438, 3, 202, 379], "area": 17063}, {"id": 4280695, "category_id": 59, "iscrowd": 0, "bbox": [1, 104, 328, 351], "area": 96432}, {"id": 3491701, "category_id": 59, "iscrowd": 0, "bbox": [337, 52, 303, 267], "area": 43893}, {"id": 7435119, "category_id": 79, "iscrowd": 0, "bbox": [1, 1, 639, 470], "area": 128640}, {"id": 3686209, "category_id": 190, "iscrowd": 0, "bbox": [435, 0, 205, 480], "area": 3118}], "file_name": "000000359219.png", "image_id": 359219}, {"segments_info": [{"id": 10066078, "category_id": 1, "iscrowd": 0, "bbox": [152, 171, 130, 170], "area": 7655}, {"id": 8487039, "category_id": 1, "iscrowd": 0, "bbox": [66, 50, 49, 92], "area": 1993}, {"id": 5064774, "category_id": 1, "iscrowd": 0, "bbox": [427, 204, 81, 142], "area": 6358}, {"id": 1907736, "category_id": 1, "iscrowd": 0, "bbox": [509, 41, 20, 38], "area": 349}, {"id": 4539501, "category_id": 1, "iscrowd": 0, "bbox": [347, 223, 87, 115], "area": 4927}, {"id": 11384761, "category_id": 37, "iscrowd": 0, "bbox": [370, 62, 5, 6], "area": 17}, {"id": 12305348, "category_id": 37, "iscrowd": 0, "bbox": [363, 58, 12, 9], "area": 67}, {"id": 3882299, "category_id": 39, "iscrowd": 0, "bbox": [126, 202, 49, 11], "area": 224}, {"id": 3620936, "category_id": 40, "iscrowd": 0, "bbox": [339, 202, 20, 25], "area": 353}, {"id": 7310482, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 250795}], "file_name": "000000359540.png", "image_id": 359540}, {"segments_info": [{"id": 2368035, "category_id": 1, "iscrowd": 0, "bbox": [180, 292, 52, 48], "area": 1205}, {"id": 3880236, "category_id": 42, "iscrowd": 0, "bbox": [199, 339, 47, 13], "area": 275}, {"id": 5261632, "category_id": 155, "iscrowd": 0, "bbox": [0, 385, 427, 255], "area": 107990}, {"id": 12566721, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 392], "area": 163738}], "file_name": "000000359677.png", "image_id": 359677}, {"segments_info": [{"id": 6977679, "category_id": 25, "iscrowd": 0, "bbox": [118, 11, 420, 463], "area": 52579}, {"id": 6973792, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 378], "area": 168248}, {"id": 5939851, "category_id": 193, "iscrowd": 0, "bbox": [118, 337, 522, 157], "area": 52121}, {"id": 8494261, "category_id": 194, "iscrowd": 0, "bbox": [176, 447, 417, 41], "area": 5304}, {"id": 3949401, "category_id": 198, "iscrowd": 0, "bbox": [0, 196, 289, 298], "area": 37359}], "file_name": "000000359781.png", "image_id": 359781}, {"segments_info": [{"id": 10065532, "category_id": 1, "iscrowd": 0, "bbox": [71, 327, 391, 303], "area": 55035}, {"id": 7315863, "category_id": 53, "iscrowd": 0, "bbox": [28, 82, 47, 42], "area": 1545}, {"id": 1907775, "category_id": 53, "iscrowd": 0, "bbox": [169, 284, 61, 65], "area": 2909}, {"id": 4277364, "category_id": 53, "iscrowd": 0, "bbox": [0, 135, 66, 49], "area": 2410}, {"id": 5608340, "category_id": 53, "iscrowd": 0, "bbox": [170, 103, 40, 35], "area": 935}, {"id": 3552589, "category_id": 53, "iscrowd": 0, "bbox": [55, 0, 302, 76], "area": 15110}, {"id": 3757658, "category_id": 53, "iscrowd": 0, "bbox": [147, 138, 92, 52], "area": 2728}, {"id": 1448491, "category_id": 53, "iscrowd": 0, "bbox": [0, 363, 150, 277], "area": 33226}, {"id": 2172223, "category_id": 53, "iscrowd": 0, "bbox": [0, 158, 291, 210], "area": 43314}, {"id": 4949133, "category_id": 55, "iscrowd": 0, "bbox": [216, 144, 40, 37], "area": 1088}, {"id": 4081750, "category_id": 100, "iscrowd": 0, "bbox": [0, 0, 452, 640], "area": 45166}, {"id": 5271410, "category_id": 122, "iscrowd": 0, "bbox": [0, 0, 380, 212], "area": 32484}], "file_name": "000000359833.png", "image_id": 359833}, {"segments_info": [{"id": 10652791, "category_id": 33, "iscrowd": 0, "bbox": [140, 19, 418, 309], "area": 85213}, {"id": 10461352, "category_id": 191, "iscrowd": 0, "bbox": [127, 18, 513, 492], "area": 78105}, {"id": 6317437, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 508, 510], "area": 82586}, {"id": 10198185, "category_id": 198, "iscrowd": 0, "bbox": [50, 193, 106, 317], "area": 6355}], "file_name": "000000359855.png", "image_id": 359855}, {"segments_info": [{"id": 4746903, "category_id": 6, "iscrowd": 0, "bbox": [46, 5, 527, 464], "area": 187450}, {"id": 4875642, "category_id": 6, "iscrowd": 0, "bbox": [565, 252, 75, 142], "area": 9526}, {"id": 4412770, "category_id": 149, "iscrowd": 0, "bbox": [0, 305, 640, 175], "area": 37143}, {"id": 3362137, "category_id": 184, "iscrowd": 0, "bbox": [0, 212, 640, 107], "area": 6169}, {"id": 14071724, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 249], "area": 66420}], "file_name": "000000359937.png", "image_id": 359937}, {"segments_info": [{"id": 3223598, "category_id": 1, "iscrowd": 0, "bbox": [465, 88, 34, 46], "area": 887}, {"id": 5720380, "category_id": 33, "iscrowd": 0, "bbox": [242, 99, 21, 26], "area": 408}, {"id": 5263703, "category_id": 33, "iscrowd": 0, "bbox": [206, 77, 30, 48], "area": 961}, {"id": 5985873, "category_id": 33, "iscrowd": 0, "bbox": [212, 127, 19, 41], "area": 621}, {"id": 6246978, "category_id": 33, "iscrowd": 0, "bbox": [297, 52, 43, 24], "area": 555}, {"id": 3749169, "category_id": 33, "iscrowd": 0, "bbox": [225, 30, 27, 42], "area": 834}, {"id": 5261638, "category_id": 33, "iscrowd": 0, "bbox": [229, 117, 23, 40], "area": 656}, {"id": 4209723, "category_id": 33, "iscrowd": 0, "bbox": [255, 34, 41, 38], "area": 1379}, {"id": 3880499, "category_id": 33, "iscrowd": 0, "bbox": [194, 129, 22, 42], "area": 596}, {"id": 3288360, "category_id": 33, "iscrowd": 0, "bbox": [253, 81, 46, 26], "area": 879}, {"id": 4144193, "category_id": 33, "iscrowd": 0, "bbox": [98, 36, 44, 26], "area": 889}, {"id": 5066837, "category_id": 33, "iscrowd": 0, "bbox": [183, 90, 32, 39], "area": 712}, {"id": 11253179, "category_id": 33, "iscrowd": 0, "bbox": [301, 63, 35, 41], "area": 1279}, {"id": 5327691, "category_id": 33, "iscrowd": 0, "bbox": [197, 42, 30, 40], "area": 850}, {"id": 6974576, "category_id": 33, "iscrowd": 1, "bbox": [0, 0, 488, 159], "area": 22608}, {"id": 4012597, "category_id": 155, "iscrowd": 0, "bbox": [0, 281, 500, 52], "area": 9392}, {"id": 8292237, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 500, 333], "area": 116636}], "file_name": "000000360097.png", "image_id": 360097}, {"segments_info": [{"id": 6240792, "category_id": 1, "iscrowd": 0, "bbox": [407, 342, 233, 298], "area": 37828}, {"id": 8809362, "category_id": 28, "iscrowd": 0, "bbox": [302, 280, 270, 287], "area": 41244}, {"id": 8944498, "category_id": 31, "iscrowd": 0, "bbox": [356, 510, 66, 114], "area": 5019}, {"id": 3283713, "category_id": 178, "iscrowd": 0, "bbox": [0, 0, 640, 485], "area": 244122}, {"id": 924177, "category_id": 184, "iscrowd": 0, "bbox": [0, 357, 640, 283], "area": 63427}], "file_name": "000000360137.png", "image_id": 360137}, {"segments_info": [{"id": 2303273, "category_id": 20, "iscrowd": 0, "bbox": [406, 65, 195, 357], "area": 44477}, {"id": 1775898, "category_id": 20, "iscrowd": 0, "bbox": [35, 82, 162, 315], "area": 21923}, {"id": 8754335, "category_id": 20, "iscrowd": 0, "bbox": [337, 113, 114, 95], "area": 5636}, {"id": 4278099, "category_id": 20, "iscrowd": 0, "bbox": [167, 66, 233, 168], "area": 16599}, {"id": 11976389, "category_id": 20, "iscrowd": 0, "bbox": [190, 43, 131, 85], "area": 6297}, {"id": 6646126, "category_id": 20, "iscrowd": 0, "bbox": [139, 192, 319, 236], "area": 57339}, {"id": 6383728, "category_id": 20, "iscrowd": 0, "bbox": [582, 84, 58, 242], "area": 8458}, {"id": 7371907, "category_id": 20, "iscrowd": 0, "bbox": [0, 69, 83, 353], "area": 24076}, {"id": 12173766, "category_id": 20, "iscrowd": 0, "bbox": [136, 70, 73, 40], "area": 1727}, {"id": 11910854, "category_id": 20, "iscrowd": 0, "bbox": [373, 97, 87, 53], "area": 1181}, {"id": 6516605, "category_id": 20, "iscrowd": 0, "bbox": [397, 69, 85, 40], "area": 2413}, {"id": 10330789, "category_id": 20, "iscrowd": 0, "bbox": [62, 53, 50, 21], "area": 722}, {"id": 10921899, "category_id": 20, "iscrowd": 0, "bbox": [0, 33, 63, 50], "area": 1620}, {"id": 8619400, "category_id": 20, "iscrowd": 1, "bbox": [0, 29, 402, 114], "area": 8181}, {"id": 11776177, "category_id": 177, "iscrowd": 0, "bbox": [608, 0, 32, 97], "area": 2604}, {"id": 6461845, "category_id": 193, "iscrowd": 0, "bbox": [112, 0, 303, 35], "area": 8225}, {"id": 1055006, "category_id": 194, "iscrowd": 0, "bbox": [74, 288, 566, 140], "area": 26441}, {"id": 9013897, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 617, 107], "area": 27860}], "file_name": "000000360325.png", "image_id": 360325}, {"segments_info": [{"id": 3097706, "category_id": 51, "iscrowd": 0, "bbox": [579, 0, 61, 180], "area": 7141}, {"id": 7637149, "category_id": 51, "iscrowd": 0, "bbox": [503, 264, 137, 163], "area": 18101}, {"id": 4614040, "category_id": 59, "iscrowd": 0, "bbox": [65, 62, 550, 321], "area": 135151}, {"id": 8886695, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 51571}, {"id": 4151664, "category_id": 196, "iscrowd": 0, "bbox": [42, 0, 553, 72], "area": 4877}], "file_name": "000000360393.png", "image_id": 360393}, {"segments_info": [{"id": 2571349, "category_id": 70, "iscrowd": 0, "bbox": [224, 218, 121, 164], "area": 11200}, {"id": 6647417, "category_id": 81, "iscrowd": 0, "bbox": [328, 135, 65, 24], "area": 1119}, {"id": 6778988, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 631, 427], "area": 64797}, {"id": 857906, "category_id": 118, "iscrowd": 0, "bbox": [440, 160, 107, 78], "area": 5045}, {"id": 4871775, "category_id": 133, "iscrowd": 0, "bbox": [305, 0, 72, 89], "area": 5802}, {"id": 6712688, "category_id": 176, "iscrowd": 0, "bbox": [0, 71, 444, 356], "area": 27948}, {"id": 6513774, "category_id": 181, "iscrowd": 0, "bbox": [527, 0, 88, 137], "area": 3533}, {"id": 4805473, "category_id": 188, "iscrowd": 0, "bbox": [272, 116, 170, 176], "area": 17899}, {"id": 6317674, "category_id": 190, "iscrowd": 0, "bbox": [252, 209, 294, 218], "area": 42984}, {"id": 5266535, "category_id": 199, "iscrowd": 0, "bbox": [150, 0, 490, 427], "area": 82307}], "file_name": "000000360564.png", "image_id": 360564}, {"segments_info": [{"id": 5919353, "category_id": 1, "iscrowd": 0, "bbox": [0, 184, 22, 47], "area": 588}, {"id": 7433112, "category_id": 1, "iscrowd": 0, "bbox": [493, 180, 66, 87], "area": 2674}, {"id": 8488081, "category_id": 1, "iscrowd": 0, "bbox": [114, 220, 33, 94], "area": 1259}, {"id": 12432047, "category_id": 1, "iscrowd": 0, "bbox": [217, 177, 69, 81], "area": 2489}, {"id": 3817291, "category_id": 19, "iscrowd": 0, "bbox": [77, 187, 280, 168], "area": 15240}, {"id": 3291203, "category_id": 19, "iscrowd": 0, "bbox": [0, 205, 81, 122], "area": 4519}, {"id": 3490396, "category_id": 19, "iscrowd": 0, "bbox": [373, 205, 248, 150], "area": 12483}, {"id": 7242125, "category_id": 154, "iscrowd": 0, "bbox": [0, 201, 640, 279], "area": 135142}, {"id": 9991240, "category_id": 155, "iscrowd": 0, "bbox": [0, 168, 640, 54], "area": 22379}, {"id": 15257252, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 183], "area": 109269}], "file_name": "000000360661.png", "image_id": 360661}, {"segments_info": [{"id": 3958414, "category_id": 17, "iscrowd": 0, "bbox": [196, 241, 82, 43], "area": 2551}, {"id": 11712183, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 501, 640], "area": 256135}, {"id": 920845, "category_id": 181, "iscrowd": 0, "bbox": [29, 0, 247, 254], "area": 61918}], "file_name": "000000360943.png", "image_id": 360943}, {"segments_info": [{"id": 10391699, "category_id": 72, "iscrowd": 0, "bbox": [131, 32, 244, 173], "area": 36410}, {"id": 11839397, "category_id": 73, "iscrowd": 0, "bbox": [397, 153, 195, 151], "area": 16374}, {"id": 1252649, "category_id": 74, "iscrowd": 0, "bbox": [338, 373, 33, 44], "area": 1226}, {"id": 13691385, "category_id": 74, "iscrowd": 0, "bbox": [541, 297, 38, 26], "area": 661}, {"id": 13756150, "category_id": 74, "iscrowd": 0, "bbox": [351, 255, 23, 22], "area": 435}, {"id": 10141149, "category_id": 76, "iscrowd": 0, "bbox": [154, 227, 116, 32], "area": 2744}, {"id": 2964812, "category_id": 76, "iscrowd": 0, "bbox": [113, 307, 213, 58], "area": 10287}, {"id": 1716551, "category_id": 130, "iscrowd": 0, "bbox": [455, 73, 56, 46], "area": 1753}, {"id": 2770270, "category_id": 181, "iscrowd": 0, "bbox": [353, 0, 287, 205], "area": 29824}, {"id": 1536178, "category_id": 189, "iscrowd": 0, "bbox": [0, 172, 640, 255], "area": 70701}, {"id": 6062759, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 407], "area": 56918}, {"id": 264208, "category_id": 200, "iscrowd": 0, "bbox": [27, 303, 432, 124], "area": 31095}], "file_name": "000000360951.png", "image_id": 360951}, {"segments_info": [{"id": 1446932, "category_id": 1, "iscrowd": 0, "bbox": [29, 105, 110, 334], "area": 17427}, {"id": 3878956, "category_id": 1, "iscrowd": 0, "bbox": [364, 97, 62, 319], "area": 9668}, {"id": 723466, "category_id": 1, "iscrowd": 0, "bbox": [170, 216, 190, 359], "area": 42114}, {"id": 1840660, "category_id": 1, "iscrowd": 0, "bbox": [324, 192, 73, 267], "area": 6872}, {"id": 1513241, "category_id": 1, "iscrowd": 0, "bbox": [0, 102, 58, 325], "area": 13129}, {"id": 6971335, "category_id": 28, "iscrowd": 0, "bbox": [76, 77, 311, 154], "area": 33724}, {"id": 11842740, "category_id": 191, "iscrowd": 0, "bbox": [0, 249, 426, 391], "area": 97967}], "file_name": "000000360960.png", "image_id": 360960}, {"segments_info": [{"id": 4279139, "category_id": 1, "iscrowd": 0, "bbox": [473, 387, 34, 40], "area": 970}, {"id": 5261378, "category_id": 1, "iscrowd": 0, "bbox": [496, 307, 40, 114], "area": 2605}, {"id": 11443868, "category_id": 1, "iscrowd": 0, "bbox": [580, 198, 18, 47], "area": 546}, {"id": 8687258, "category_id": 1, "iscrowd": 0, "bbox": [496, 289, 41, 62], "area": 722}, {"id": 12163181, "category_id": 1, "iscrowd": 0, "bbox": [598, 204, 15, 42], "area": 406}, {"id": 5454896, "category_id": 1, "iscrowd": 0, "bbox": [527, 219, 18, 71], "area": 828}, {"id": 3222308, "category_id": 1, "iscrowd": 0, "bbox": [273, 298, 58, 122], "area": 3710}, {"id": 6452111, "category_id": 1, "iscrowd": 0, "bbox": [314, 242, 35, 85], "area": 1342}, {"id": 4404522, "category_id": 1, "iscrowd": 0, "bbox": [616, 198, 13, 34], "area": 262}, {"id": 7559761, "category_id": 1, "iscrowd": 0, "bbox": [562, 221, 8, 31], "area": 93}, {"id": 6509392, "category_id": 1, "iscrowd": 0, "bbox": [545, 224, 19, 49], "area": 484}, {"id": 4083546, "category_id": 1, "iscrowd": 0, "bbox": [366, 213, 15, 46], "area": 272}, {"id": 10323836, "category_id": 1, "iscrowd": 0, "bbox": [497, 238, 22, 77], "area": 920}, {"id": 8351619, "category_id": 1, "iscrowd": 1, "bbox": [564, 179, 76, 73], "area": 1400}, {"id": 8421246, "category_id": 2, "iscrowd": 0, "bbox": [536, 269, 26, 62], "area": 713}, {"id": 6841694, "category_id": 2, "iscrowd": 0, "bbox": [327, 276, 17, 46], "area": 428}, {"id": 3353398, "category_id": 10, "iscrowd": 0, "bbox": [609, 151, 12, 31], "area": 323}, {"id": 3355971, "category_id": 10, "iscrowd": 0, "bbox": [493, 124, 34, 103], "area": 3174}, {"id": 2104604, "category_id": 10, "iscrowd": 0, "bbox": [0, 65, 165, 340], "area": 44615}, {"id": 2828579, "category_id": 10, "iscrowd": 0, "bbox": [174, 220, 90, 193], "area": 14122}, {"id": 6575953, "category_id": 27, "iscrowd": 0, "bbox": [519, 357, 26, 57], "area": 924}, {"id": 8686527, "category_id": 31, "iscrowd": 0, "bbox": [571, 214, 7, 10], "area": 16}, {"id": 6245695, "category_id": 31, "iscrowd": 0, "bbox": [556, 234, 10, 23], "area": 45}, {"id": 3423549, "category_id": 64, "iscrowd": 0, "bbox": [473, 169, 23, 98], "area": 1674}, {"id": 2962995, "category_id": 64, "iscrowd": 0, "bbox": [450, 173, 31, 92], "area": 1802}, {"id": 3227239, "category_id": 77, "iscrowd": 0, "bbox": [308, 316, 2, 6], "area": 10}, {"id": 7500410, "category_id": 130, "iscrowd": 0, "bbox": [622, 67, 18, 26], "area": 247}, {"id": 11250089, "category_id": 149, "iscrowd": 0, "bbox": [562, 239, 78, 188], "area": 8615}, {"id": 1319445, "category_id": 184, "iscrowd": 0, "bbox": [0, 100, 26, 108], "area": 1514}, {"id": 12171961, "category_id": 191, "iscrowd": 0, "bbox": [0, 212, 640, 215], "area": 37719}, {"id": 9473934, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 329], "area": 125676}], "file_name": "000000361103.png", "image_id": 361103}, {"segments_info": [{"id": 2104620, "category_id": 1, "iscrowd": 0, "bbox": [249, 492, 3, 13], "area": 28}, {"id": 4011567, "category_id": 1, "iscrowd": 0, "bbox": [248, 505, 9, 22], "area": 104}, {"id": 4408386, "category_id": 1, "iscrowd": 0, "bbox": [291, 504, 11, 36], "area": 285}, {"id": 6052183, "category_id": 3, "iscrowd": 0, "bbox": [103, 510, 34, 19], "area": 420}, {"id": 6841190, "category_id": 3, "iscrowd": 0, "bbox": [143, 505, 15, 8], "area": 97}, {"id": 7564648, "category_id": 3, "iscrowd": 0, "bbox": [123, 513, 42, 18], "area": 510}, {"id": 2499359, "category_id": 3, "iscrowd": 0, "bbox": [287, 514, 176, 114], "area": 15263}, {"id": 2959142, "category_id": 3, "iscrowd": 0, "bbox": [47, 528, 138, 85], "area": 9102}, {"id": 3946061, "category_id": 3, "iscrowd": 0, "bbox": [432, 499, 31, 15], "area": 331}, {"id": 3025706, "category_id": 3, "iscrowd": 0, "bbox": [155, 500, 96, 63], "area": 4515}, {"id": 7958379, "category_id": 3, "iscrowd": 0, "bbox": [53, 516, 56, 34], "area": 925}, {"id": 5130312, "category_id": 3, "iscrowd": 0, "bbox": [0, 520, 62, 57], "area": 2627}, {"id": 7565934, "category_id": 3, "iscrowd": 0, "bbox": [75, 511, 23, 5], "area": 102}, {"id": 6906728, "category_id": 3, "iscrowd": 0, "bbox": [299, 511, 54, 21], "area": 356}, {"id": 5921114, "category_id": 85, "iscrowd": 0, "bbox": [109, 257, 6, 19], "area": 93}, {"id": 7171956, "category_id": 85, "iscrowd": 0, "bbox": [143, 250, 20, 21], "area": 350}, {"id": 4671064, "category_id": 130, "iscrowd": 0, "bbox": [319, 443, 144, 36], "area": 797}, {"id": 4407614, "category_id": 149, "iscrowd": 0, "bbox": [0, 545, 463, 95], "area": 20675}, {"id": 3751483, "category_id": 151, "iscrowd": 0, "bbox": [289, 460, 159, 34], "area": 1969}, {"id": 1843744, "category_id": 184, "iscrowd": 0, "bbox": [0, 389, 323, 172], "area": 9064}, {"id": 2894152, "category_id": 185, "iscrowd": 0, "bbox": [273, 461, 190, 75], "area": 6277}, {"id": 16579577, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 463, 392], "area": 127564}, {"id": 5329234, "category_id": 191, "iscrowd": 0, "bbox": [249, 521, 88, 27], "area": 1086}, {"id": 4278875, "category_id": 197, "iscrowd": 0, "bbox": [0, 121, 463, 423], "area": 93084}], "file_name": "000000361142.png", "image_id": 361142}, {"segments_info": [{"id": 2235427, "category_id": 1, "iscrowd": 0, "bbox": [0, 102, 65, 82], "area": 2859}, {"id": 5723485, "category_id": 1, "iscrowd": 0, "bbox": [36, 91, 61, 93], "area": 3560}, {"id": 9143133, "category_id": 1, "iscrowd": 0, "bbox": [309, 54, 46, 61], "area": 1223}, {"id": 8551570, "category_id": 1, "iscrowd": 0, "bbox": [396, 87, 21, 101], "area": 1298}, {"id": 9802403, "category_id": 1, "iscrowd": 0, "bbox": [181, 48, 225, 547], "area": 52154}, {"id": 5068670, "category_id": 1, "iscrowd": 0, "bbox": [223, 127, 35, 42], "area": 953}, {"id": 5526629, "category_id": 1, "iscrowd": 0, "bbox": [135, 120, 64, 63], "area": 1692}, {"id": 7633289, "category_id": 1, "iscrowd": 0, "bbox": [356, 52, 59, 100], "area": 3711}, {"id": 7633551, "category_id": 1, "iscrowd": 0, "bbox": [56, 45, 62, 128], "area": 3393}, {"id": 5525318, "category_id": 43, "iscrowd": 0, "bbox": [115, 21, 127, 212], "area": 9427}, {"id": 4347174, "category_id": 62, "iscrowd": 0, "bbox": [98, 150, 53, 31], "area": 1379}, {"id": 3357725, "category_id": 62, "iscrowd": 0, "bbox": [119, 114, 45, 32], "area": 721}, {"id": 5331506, "category_id": 62, "iscrowd": 0, "bbox": [21, 115, 29, 16], "area": 257}, {"id": 5066295, "category_id": 62, "iscrowd": 0, "bbox": [373, 153, 28, 33], "area": 695}, {"id": 2564028, "category_id": 62, "iscrowd": 0, "bbox": [108, 132, 28, 19], "area": 399}, {"id": 4809052, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 35, 64], "area": 1570}, {"id": 3948598, "category_id": 185, "iscrowd": 0, "bbox": [0, 61, 417, 89], "area": 5130}, {"id": 4426630, "category_id": 193, "iscrowd": 0, "bbox": [0, 301, 417, 339], "area": 118359}, {"id": 5584703, "category_id": 197, "iscrowd": 0, "bbox": [21, 0, 396, 84], "area": 21221}], "file_name": "000000361147.png", "image_id": 361147}, {"segments_info": [{"id": 3817285, "category_id": 23, "iscrowd": 0, "bbox": [169, 35, 292, 346], "area": 79965}, {"id": 8298895, "category_id": 184, "iscrowd": 0, "bbox": [386, 0, 199, 24], "area": 3244}, {"id": 9869460, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 189168}], "file_name": "000000361180.png", "image_id": 361180}, {"segments_info": [{"id": 4872304, "category_id": 1, "iscrowd": 0, "bbox": [96, 2, 264, 252], "area": 36418}, {"id": 6968244, "category_id": 1, "iscrowd": 0, "bbox": [582, 20, 58, 110], "area": 3080}, {"id": 3093829, "category_id": 27, "iscrowd": 0, "bbox": [3, 231, 106, 75], "area": 5484}, {"id": 328011, "category_id": 47, "iscrowd": 0, "bbox": [3, 299, 73, 93], "area": 3164}, {"id": 262970, "category_id": 47, "iscrowd": 0, "bbox": [0, 328, 25, 121], "area": 2073}, {"id": 2318507, "category_id": 59, "iscrowd": 0, "bbox": [306, 231, 292, 205], "area": 34158}, {"id": 2055081, "category_id": 59, "iscrowd": 0, "bbox": [42, 242, 269, 104], "area": 15226}, {"id": 1661863, "category_id": 59, "iscrowd": 0, "bbox": [41, 321, 459, 146], "area": 44958}, {"id": 2646399, "category_id": 64, "iscrowd": 0, "bbox": [412, 65, 58, 71], "area": 2669}, {"id": 2243165, "category_id": 67, "iscrowd": 0, "bbox": [0, 244, 640, 236], "area": 33994}, {"id": 4545396, "category_id": 189, "iscrowd": 0, "bbox": [394, 108, 246, 218], "area": 35042}, {"id": 10401487, "category_id": 195, "iscrowd": 0, "bbox": [74, 231, 92, 50], "area": 1921}, {"id": 8697553, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 413], "area": 82518}], "file_name": "000000361238.png", "image_id": 361238}, {"segments_info": [{"id": 3230313, "category_id": 21, "iscrowd": 0, "bbox": [326, 226, 209, 132], "area": 15403}, {"id": 3817034, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 292], "area": 92292}, {"id": 5198420, "category_id": 149, "iscrowd": 0, "bbox": [0, 374, 640, 106], "area": 46906}, {"id": 4740172, "category_id": 184, "iscrowd": 0, "bbox": [372, 52, 268, 272], "area": 17443}, {"id": 2107434, "category_id": 185, "iscrowd": 0, "bbox": [0, 180, 640, 167], "area": 47636}, {"id": 16235404, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 586, 176], "area": 38735}, {"id": 5991540, "category_id": 191, "iscrowd": 0, "bbox": [0, 316, 640, 105], "area": 30034}, {"id": 3826528, "category_id": 193, "iscrowd": 0, "bbox": [0, 305, 640, 108], "area": 18505}], "file_name": "000000361268.png", "image_id": 361268}, {"segments_info": [{"id": 1128517, "category_id": 1, "iscrowd": 0, "bbox": [151, 4, 182, 136], "area": 12719}, {"id": 4491928, "category_id": 3, "iscrowd": 0, "bbox": [481, 259, 89, 28], "area": 1682}, {"id": 4415367, "category_id": 13, "iscrowd": 0, "bbox": [345, 239, 14, 13], "area": 147}, {"id": 3294026, "category_id": 41, "iscrowd": 0, "bbox": [222, 127, 76, 72], "area": 1208}, {"id": 10078160, "category_id": 130, "iscrowd": 0, "bbox": [392, 176, 32, 94], "area": 1345}, {"id": 2448235, "category_id": 149, "iscrowd": 0, "bbox": [0, 266, 640, 214], "area": 108191}, {"id": 2173225, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 634, 277], "area": 82202}, {"id": 1198426, "category_id": 191, "iscrowd": 0, "bbox": [0, 184, 640, 180], "area": 31316}, {"id": 1914689, "category_id": 197, "iscrowd": 0, "bbox": [66, 0, 574, 302], "area": 65531}], "file_name": "000000361506.png", "image_id": 361506}, {"segments_info": [{"id": 5856596, "category_id": 1, "iscrowd": 0, "bbox": [372, 345, 32, 68], "area": 1078}, {"id": 5460305, "category_id": 1, "iscrowd": 0, "bbox": [4, 362, 60, 146], "area": 4778}, {"id": 5655617, "category_id": 1, "iscrowd": 0, "bbox": [319, 370, 131, 183], "area": 11367}, {"id": 6249042, "category_id": 1, "iscrowd": 0, "bbox": [227, 361, 69, 165], "area": 5408}, {"id": 7960964, "category_id": 1, "iscrowd": 0, "bbox": [443, 395, 37, 61], "area": 1075}, {"id": 6709077, "category_id": 8, "iscrowd": 0, "bbox": [26, 135, 48, 25], "area": 704}, {"id": 7367520, "category_id": 8, "iscrowd": 0, "bbox": [374, 179, 106, 53], "area": 3676}, {"id": 8486778, "category_id": 8, "iscrowd": 0, "bbox": [80, 144, 39, 29], "area": 747}, {"id": 7038327, "category_id": 27, "iscrowd": 0, "bbox": [146, 450, 35, 43], "area": 1155}, {"id": 4936532, "category_id": 27, "iscrowd": 0, "bbox": [51, 421, 37, 54], "area": 1486}, {"id": 6183506, "category_id": 27, "iscrowd": 0, "bbox": [179, 453, 46, 46], "area": 1483}, {"id": 6839888, "category_id": 33, "iscrowd": 0, "bbox": [436, 454, 30, 47], "area": 998}, {"id": 6246978, "category_id": 33, "iscrowd": 0, "bbox": [283, 450, 27, 39], "area": 860}, {"id": 4670011, "category_id": 33, "iscrowd": 0, "bbox": [0, 439, 21, 54], "area": 972}, {"id": 5393235, "category_id": 33, "iscrowd": 0, "bbox": [110, 454, 43, 42], "area": 1276}, {"id": 5919046, "category_id": 33, "iscrowd": 0, "bbox": [308, 447, 22, 42], "area": 695}, {"id": 6774881, "category_id": 33, "iscrowd": 0, "bbox": [251, 450, 22, 44], "area": 548}, {"id": 9804699, "category_id": 149, "iscrowd": 0, "bbox": [0, 153, 480, 487], "area": 139082}, {"id": 7628626, "category_id": 181, "iscrowd": 0, "bbox": [87, 0, 393, 71], "area": 1434}, {"id": 12364954, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 56, 17], "area": 767}, {"id": 8680287, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 208], "area": 75647}], "file_name": "000000361551.png", "image_id": 361551}, {"segments_info": [{"id": 6453125, "category_id": 18, "iscrowd": 0, "bbox": [256, 8, 384, 412], "area": 118054}, {"id": 6069903, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 152285}], "file_name": "000000361571.png", "image_id": 361571}, {"segments_info": [{"id": 923689, "category_id": 1, "iscrowd": 0, "bbox": [250, 184, 41, 176], "area": 3687}, {"id": 1444622, "category_id": 1, "iscrowd": 0, "bbox": [544, 203, 16, 16], "area": 166}, {"id": 2238514, "category_id": 1, "iscrowd": 0, "bbox": [95, 128, 544, 226], "area": 18792}, {"id": 8487296, "category_id": 1, "iscrowd": 0, "bbox": [549, 186, 9, 13], "area": 74}, {"id": 855052, "category_id": 27, "iscrowd": 0, "bbox": [569, 161, 40, 53], "area": 1508}, {"id": 1387561, "category_id": 31, "iscrowd": 0, "bbox": [85, 240, 26, 81], "area": 1306}, {"id": 3685444, "category_id": 31, "iscrowd": 0, "bbox": [204, 217, 24, 59], "area": 236}, {"id": 1973547, "category_id": 31, "iscrowd": 0, "bbox": [520, 191, 23, 30], "area": 476}, {"id": 4937320, "category_id": 31, "iscrowd": 0, "bbox": [271, 254, 58, 60], "area": 2274}, {"id": 789774, "category_id": 33, "iscrowd": 0, "bbox": [527, 221, 21, 35], "area": 466}, {"id": 922130, "category_id": 33, "iscrowd": 0, "bbox": [557, 212, 82, 57], "area": 3975}, {"id": 921111, "category_id": 33, "iscrowd": 0, "bbox": [540, 255, 17, 51], "area": 423}, {"id": 2960706, "category_id": 33, "iscrowd": 0, "bbox": [267, 305, 57, 51], "area": 2492}, {"id": 11707565, "category_id": 72, "iscrowd": 0, "bbox": [177, 92, 87, 72], "area": 3840}, {"id": 14998490, "category_id": 72, "iscrowd": 0, "bbox": [20, 133, 66, 79], "area": 3399}, {"id": 3097153, "category_id": 72, "iscrowd": 0, "bbox": [353, 201, 31, 39], "area": 926}, {"id": 4676955, "category_id": 72, "iscrowd": 0, "bbox": [315, 218, 40, 29], "area": 1003}, {"id": 9194844, "category_id": 72, "iscrowd": 0, "bbox": [463, 74, 29, 52], "area": 912}, {"id": 8624838, "category_id": 107, "iscrowd": 0, "bbox": [155, 200, 347, 73], "area": 5785}, {"id": 2177596, "category_id": 112, "iscrowd": 0, "bbox": [0, 211, 31, 106], "area": 2149}, {"id": 9541788, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 139], "area": 35939}, {"id": 6714494, "category_id": 190, "iscrowd": 0, "bbox": [0, 250, 571, 110], "area": 17495}, {"id": 1384483, "category_id": 192, "iscrowd": 0, "bbox": [531, 208, 109, 152], "area": 8445}, {"id": 4872551, "category_id": 195, "iscrowd": 0, "bbox": [143, 114, 53, 68], "area": 1849}, {"id": 6377041, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 346], "area": 111541}], "file_name": "000000361586.png", "image_id": 361586}, {"segments_info": [{"id": 4023175, "category_id": 17, "iscrowd": 0, "bbox": [47, 2, 546, 422], "area": 139903}, {"id": 12174281, "category_id": 81, "iscrowd": 0, "bbox": [0, 178, 637, 244], "area": 42957}, {"id": 11385523, "category_id": 109, "iscrowd": 0, "bbox": [408, 0, 232, 286], "area": 37536}, {"id": 3951687, "category_id": 199, "iscrowd": 0, "bbox": [190, 0, 231, 115], "area": 14317}], "file_name": "000000361621.png", "image_id": 361621}, {"segments_info": [{"id": 2189178, "category_id": 1, "iscrowd": 0, "bbox": [105, 403, 19, 34], "area": 301}, {"id": 5193014, "category_id": 1, "iscrowd": 0, "bbox": [143, 362, 39, 74], "area": 1322}, {"id": 6634297, "category_id": 1, "iscrowd": 0, "bbox": [375, 395, 18, 31], "area": 443}, {"id": 1708562, "category_id": 1, "iscrowd": 0, "bbox": [598, 357, 29, 95], "area": 1842}, {"id": 4143197, "category_id": 1, "iscrowd": 0, "bbox": [464, 390, 33, 78], "area": 1439}, {"id": 4220253, "category_id": 1, "iscrowd": 0, "bbox": [264, 380, 5, 18], "area": 70}, {"id": 6577223, "category_id": 1, "iscrowd": 0, "bbox": [553, 366, 11, 31], "area": 175}, {"id": 3751743, "category_id": 1, "iscrowd": 0, "bbox": [563, 342, 35, 109], "area": 2244}, {"id": 7434601, "category_id": 1, "iscrowd": 0, "bbox": [123, 386, 7, 19], "area": 87}, {"id": 1646878, "category_id": 1, "iscrowd": 0, "bbox": [342, 370, 7, 19], "area": 61}, {"id": 9465946, "category_id": 1, "iscrowd": 0, "bbox": [222, 382, 33, 45], "area": 992}, {"id": 4598823, "category_id": 1, "iscrowd": 0, "bbox": [402, 383, 27, 45], "area": 882}, {"id": 2303269, "category_id": 1, "iscrowd": 0, "bbox": [427, 352, 29, 68], "area": 1248}, {"id": 4612187, "category_id": 1, "iscrowd": 1, "bbox": [7, 370, 494, 73], "area": 2757}, {"id": 6708303, "category_id": 15, "iscrowd": 0, "bbox": [157, 403, 68, 30], "area": 1358}, {"id": 6971475, "category_id": 15, "iscrowd": 0, "bbox": [31, 414, 85, 38], "area": 2015}, {"id": 2234981, "category_id": 27, "iscrowd": 0, "bbox": [623, 432, 17, 19], "area": 160}, {"id": 11048338, "category_id": 38, "iscrowd": 0, "bbox": [292, 294, 47, 12], "area": 221}, {"id": 9470610, "category_id": 38, "iscrowd": 0, "bbox": [208, 163, 37, 25], "area": 177}, {"id": 8217952, "category_id": 38, "iscrowd": 0, "bbox": [365, 188, 12, 10], "area": 83}, {"id": 11306337, "category_id": 38, "iscrowd": 0, "bbox": [525, 141, 15, 20], "area": 58}, {"id": 10508086, "category_id": 38, "iscrowd": 0, "bbox": [444, 166, 14, 6], "area": 50}, {"id": 12030026, "category_id": 38, "iscrowd": 0, "bbox": [568, 264, 69, 39], "area": 1144}, {"id": 9337228, "category_id": 38, "iscrowd": 0, "bbox": [396, 215, 15, 10], "area": 93}, {"id": 4404833, "category_id": 38, "iscrowd": 0, "bbox": [408, 252, 12, 5], "area": 41}, {"id": 11970198, "category_id": 38, "iscrowd": 0, "bbox": [428, 269, 42, 39], "area": 109}, {"id": 11702158, "category_id": 38, "iscrowd": 0, "bbox": [275, 241, 66, 17], "area": 379}, {"id": 9465968, "category_id": 38, "iscrowd": 0, "bbox": [266, 287, 21, 17], "area": 228}, {"id": 13545606, "category_id": 38, "iscrowd": 0, "bbox": [356, 241, 12, 9], "area": 62}, {"id": 9405552, "category_id": 38, "iscrowd": 0, "bbox": [273, 225, 14, 7], "area": 76}, {"id": 12689793, "category_id": 38, "iscrowd": 1, "bbox": [35, 106, 605, 374], "area": 17673}, {"id": 6901035, "category_id": 155, "iscrowd": 0, "bbox": [0, 343, 217, 50], "area": 4946}, {"id": 7234912, "category_id": 166, "iscrowd": 0, "bbox": [56, 341, 272, 45], "area": 4171}, {"id": 1913125, "category_id": 184, "iscrowd": 0, "bbox": [288, 314, 352, 70], "area": 10369}, {"id": 12751200, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 348], "area": 196668}, {"id": 11644847, "category_id": 191, "iscrowd": 0, "bbox": [0, 418, 640, 62], "area": 16671}, {"id": 9073232, "category_id": 192, "iscrowd": 0, "bbox": [0, 339, 111, 20], "area": 497}, {"id": 2449733, "category_id": 193, "iscrowd": 0, "bbox": [0, 351, 640, 129], "area": 34529}], "file_name": "000000361730.png", "image_id": 361730}, {"segments_info": [{"id": 2366232, "category_id": 1, "iscrowd": 0, "bbox": [377, 330, 64, 95], "area": 2834}, {"id": 7492687, "category_id": 1, "iscrowd": 0, "bbox": [1, 350, 15, 31], "area": 231}, {"id": 2300957, "category_id": 1, "iscrowd": 0, "bbox": [461, 312, 75, 113], "area": 4009}, {"id": 7108969, "category_id": 1, "iscrowd": 0, "bbox": [149, 335, 3, 10], "area": 26}, {"id": 8884849, "category_id": 1, "iscrowd": 0, "bbox": [419, 307, 11, 12], "area": 70}, {"id": 4996703, "category_id": 1, "iscrowd": 0, "bbox": [146, 354, 10, 31], "area": 143}, {"id": 5651772, "category_id": 1, "iscrowd": 0, "bbox": [181, 347, 8, 25], "area": 76}, {"id": 8282961, "category_id": 1, "iscrowd": 0, "bbox": [176, 348, 8, 24], "area": 136}, {"id": 6709063, "category_id": 1, "iscrowd": 0, "bbox": [608, 298, 32, 112], "area": 2094}, {"id": 6110259, "category_id": 1, "iscrowd": 0, "bbox": [116, 352, 5, 15], "area": 44}, {"id": 4088672, "category_id": 1, "iscrowd": 0, "bbox": [441, 324, 24, 66], "area": 780}, {"id": 4808030, "category_id": 1, "iscrowd": 0, "bbox": [194, 348, 15, 34], "area": 302}, {"id": 5852259, "category_id": 1, "iscrowd": 0, "bbox": [93, 354, 17, 27], "area": 181}, {"id": 10127488, "category_id": 1, "iscrowd": 1, "bbox": [22, 304, 499, 113], "area": 1461}, {"id": 11445138, "category_id": 35, "iscrowd": 0, "bbox": [206, 381, 5, 1], "area": 5}, {"id": 11441799, "category_id": 35, "iscrowd": 0, "bbox": [90, 377, 16, 6], "area": 24}, {"id": 8223844, "category_id": 35, "iscrowd": 0, "bbox": [431, 388, 41, 5], "area": 100}, {"id": 9469049, "category_id": 35, "iscrowd": 0, "bbox": [4, 379, 6, 2], "area": 3}, {"id": 9337691, "category_id": 35, "iscrowd": 0, "bbox": [184, 372, 2, 1], "area": 2}, {"id": 6116705, "category_id": 35, "iscrowd": 0, "bbox": [606, 407, 34, 6], "area": 81}, {"id": 9993839, "category_id": 36, "iscrowd": 0, "bbox": [446, 389, 21, 2], "area": 28}, {"id": 7167573, "category_id": 36, "iscrowd": 0, "bbox": [484, 409, 47, 9], "area": 83}, {"id": 5655892, "category_id": 138, "iscrowd": 0, "bbox": [145, 354, 71, 71], "area": 1910}, {"id": 12495261, "category_id": 159, "iscrowd": 0, "bbox": [0, 270, 640, 155], "area": 61099}, {"id": 6762767, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 193], "area": 102152}, {"id": 11769217, "category_id": 192, "iscrowd": 0, "bbox": [0, 129, 640, 206], "area": 87882}, {"id": 8939862, "category_id": 197, "iscrowd": 0, "bbox": [190, 317, 163, 24], "area": 2041}], "file_name": "000000361919.png", "image_id": 361919}, {"segments_info": [{"id": 12234665, "category_id": 84, "iscrowd": 0, "bbox": [104, 87, 120, 87], "area": 6682}, {"id": 5600153, "category_id": 88, "iscrowd": 0, "bbox": [179, 54, 232, 226], "area": 31985}, {"id": 4677491, "category_id": 100, "iscrowd": 0, "bbox": [23, 69, 362, 295], "area": 33114}, {"id": 1579279, "category_id": 112, "iscrowd": 0, "bbox": [276, 0, 224, 143], "area": 25649}, {"id": 3424071, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 280, 203], "area": 26856}, {"id": 6647926, "category_id": 191, "iscrowd": 0, "bbox": [0, 139, 500, 236], "area": 42434}, {"id": 9209765, "category_id": 195, "iscrowd": 0, "bbox": [34, 201, 69, 79], "area": 760}], "file_name": "000000362434.png", "image_id": 362434}, {"segments_info": [{"id": 5657167, "category_id": 1, "iscrowd": 0, "bbox": [58, 132, 272, 309], "area": 49096}, {"id": 7042433, "category_id": 41, "iscrowd": 0, "bbox": [50, 272, 374, 269], "area": 44545}, {"id": 7502457, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 424, 640], "area": 174041}], "file_name": "000000362520.png", "image_id": 362520}, {"segments_info": [{"id": 4275769, "category_id": 1, "iscrowd": 0, "bbox": [421, 139, 28, 50], "area": 743}, {"id": 4010534, "category_id": 1, "iscrowd": 0, "bbox": [42, 143, 20, 29], "area": 331}, {"id": 6906447, "category_id": 6, "iscrowd": 0, "bbox": [83, 57, 463, 262], "area": 94837}, {"id": 7685916, "category_id": 8, "iscrowd": 0, "bbox": [540, 133, 100, 167], "area": 12983}, {"id": 8287338, "category_id": 8, "iscrowd": 0, "bbox": [1, 123, 82, 101], "area": 6991}, {"id": 11251118, "category_id": 149, "iscrowd": 0, "bbox": [0, 180, 640, 247], "area": 79425}, {"id": 5131852, "category_id": 184, "iscrowd": 0, "bbox": [15, 0, 625, 137], "area": 10416}, {"id": 6314578, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 180], "area": 47930}], "file_name": "000000362682.png", "image_id": 362682}, {"segments_info": [{"id": 4424550, "category_id": 1, "iscrowd": 0, "bbox": [113, 48, 392, 375], "area": 54725}, {"id": 6146489, "category_id": 37, "iscrowd": 0, "bbox": [436, 178, 30, 32], "area": 756}, {"id": 5790292, "category_id": 43, "iscrowd": 0, "bbox": [132, 12, 90, 153], "area": 8172}, {"id": 7566691, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 200201}], "file_name": "000000362716.png", "image_id": 362716}, {"segments_info": [{"id": 6511437, "category_id": 7, "iscrowd": 0, "bbox": [1, 314, 441, 173], "area": 42786}, {"id": 2695709, "category_id": 147, "iscrowd": 0, "bbox": [0, 400, 640, 240], "area": 121718}, {"id": 4741197, "category_id": 184, "iscrowd": 0, "bbox": [0, 174, 640, 191], "area": 68189}, {"id": 4670005, "category_id": 185, "iscrowd": 0, "bbox": [180, 357, 460, 112], "area": 31513}, {"id": 15785660, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 297], "area": 116057}, {"id": 10198431, "category_id": 197, "iscrowd": 0, "bbox": [419, 56, 183, 224], "area": 28749}], "file_name": "000000363072.png", "image_id": 363072}, {"segments_info": [{"id": 5922665, "category_id": 1, "iscrowd": 0, "bbox": [0, 186, 208, 232], "area": 30280}, {"id": 8882852, "category_id": 1, "iscrowd": 0, "bbox": [308, 102, 271, 318], "area": 53271}, {"id": 3947325, "category_id": 1, "iscrowd": 0, "bbox": [174, 156, 53, 84], "area": 2165}, {"id": 5461871, "category_id": 1, "iscrowd": 0, "bbox": [115, 155, 31, 38], "area": 688}, {"id": 3816256, "category_id": 1, "iscrowd": 0, "bbox": [153, 156, 38, 37], "area": 597}, {"id": 10003869, "category_id": 1, "iscrowd": 0, "bbox": [139, 155, 20, 31], "area": 348}, {"id": 6250887, "category_id": 1, "iscrowd": 0, "bbox": [98, 167, 28, 46], "area": 779}, {"id": 4736327, "category_id": 1, "iscrowd": 0, "bbox": [0, 175, 34, 78], "area": 1173}, {"id": 8290958, "category_id": 1, "iscrowd": 0, "bbox": [326, 157, 74, 124], "area": 3483}, {"id": 10132137, "category_id": 1, "iscrowd": 0, "bbox": [0, 138, 118, 282], "area": 10498}, {"id": 7896196, "category_id": 1, "iscrowd": 0, "bbox": [161, 151, 8, 10], "area": 54}, {"id": 7764606, "category_id": 1, "iscrowd": 0, "bbox": [81, 159, 23, 44], "area": 596}, {"id": 9404794, "category_id": 1, "iscrowd": 0, "bbox": [191, 136, 151, 289], "area": 28080}, {"id": 5921118, "category_id": 1, "iscrowd": 1, "bbox": [0, 129, 306, 116], "area": 3191}, {"id": 7434346, "category_id": 3, "iscrowd": 0, "bbox": [590, 199, 50, 106], "area": 4080}, {"id": 4340020, "category_id": 27, "iscrowd": 0, "bbox": [221, 200, 92, 63], "area": 857}, {"id": 6641228, "category_id": 44, "iscrowd": 0, "bbox": [282, 318, 19, 68], "area": 476}, {"id": 9472133, "category_id": 77, "iscrowd": 0, "bbox": [257, 307, 21, 11], "area": 87}, {"id": 2368301, "category_id": 77, "iscrowd": 0, "bbox": [512, 163, 9, 55], "area": 202}, {"id": 15390405, "category_id": 92, "iscrowd": 0, "bbox": [154, 0, 121, 84], "area": 7828}, {"id": 11842993, "category_id": 149, "iscrowd": 0, "bbox": [543, 207, 16, 18], "area": 212}, {"id": 9409934, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 630, 118], "area": 20061}, {"id": 5137492, "category_id": 184, "iscrowd": 0, "bbox": [574, 275, 66, 94], "area": 4107}, {"id": 7105897, "category_id": 185, "iscrowd": 0, "bbox": [306, 170, 334, 227], "area": 8738}, {"id": 12566715, "category_id": 191, "iscrowd": 0, "bbox": [0, 289, 640, 136], "area": 7735}, {"id": 6646893, "category_id": 194, "iscrowd": 0, "bbox": [545, 352, 95, 45], "area": 1932}, {"id": 10463396, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 404], "area": 74986}], "file_name": "000000363188.png", "image_id": 363188}, {"segments_info": [{"id": 2830681, "category_id": 1, "iscrowd": 0, "bbox": [482, 273, 38, 54], "area": 772}, {"id": 5662066, "category_id": 1, "iscrowd": 0, "bbox": [416, 251, 63, 77], "area": 2626}, {"id": 5332592, "category_id": 1, "iscrowd": 0, "bbox": [506, 327, 134, 153], "area": 17549}, {"id": 2965848, "category_id": 1, "iscrowd": 0, "bbox": [456, 159, 184, 238], "area": 23644}, {"id": 8423578, "category_id": 1, "iscrowd": 0, "bbox": [322, 172, 95, 188], "area": 11016}, {"id": 3291458, "category_id": 1, "iscrowd": 0, "bbox": [268, 135, 84, 205], "area": 5028}, {"id": 6319734, "category_id": 46, "iscrowd": 0, "bbox": [373, 336, 19, 58], "area": 622}, {"id": 5725795, "category_id": 46, "iscrowd": 0, "bbox": [361, 342, 17, 60], "area": 635}, {"id": 8287851, "category_id": 51, "iscrowd": 0, "bbox": [387, 355, 44, 29], "area": 1018}, {"id": 8747116, "category_id": 51, "iscrowd": 0, "bbox": [122, 399, 84, 50], "area": 3400}, {"id": 10593705, "category_id": 61, "iscrowd": 0, "bbox": [204, 209, 126, 162], "area": 13440}, {"id": 7307664, "category_id": 61, "iscrowd": 0, "bbox": [409, 316, 103, 60], "area": 3709}, {"id": 7699074, "category_id": 67, "iscrowd": 0, "bbox": [0, 273, 226, 207], "area": 24790}, {"id": 6120049, "category_id": 67, "iscrowd": 0, "bbox": [66, 188, 449, 286], "area": 39039}, {"id": 1580832, "category_id": 112, "iscrowd": 0, "bbox": [311, 126, 88, 75], "area": 3670}, {"id": 14345707, "category_id": 130, "iscrowd": 0, "bbox": [406, 0, 42, 32], "area": 1058}, {"id": 2699058, "category_id": 186, "iscrowd": 0, "bbox": [305, 66, 94, 41], "area": 2619}, {"id": 3292231, "category_id": 190, "iscrowd": 0, "bbox": [18, 460, 42, 20], "area": 717}, {"id": 3762565, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 318], "area": 79215}], "file_name": "000000363207.png", "image_id": 363207}, {"segments_info": [{"id": 2045247, "category_id": 62, "iscrowd": 0, "bbox": [0, 185, 206, 239], "area": 35932}, {"id": 6318704, "category_id": 72, "iscrowd": 0, "bbox": [439, 164, 47, 238], "area": 5589}, {"id": 7702411, "category_id": 72, "iscrowd": 0, "bbox": [356, 142, 101, 121], "area": 7941}, {"id": 2640492, "category_id": 73, "iscrowd": 0, "bbox": [127, 341, 213, 131], "area": 16148}, {"id": 9813458, "category_id": 74, "iscrowd": 0, "bbox": [85, 355, 313, 118], "area": 1762}, {"id": 9217461, "category_id": 76, "iscrowd": 0, "bbox": [349, 309, 58, 48], "area": 1904}, {"id": 5009023, "category_id": 100, "iscrowd": 0, "bbox": [533, 32, 58, 58], "area": 2213}, {"id": 3823729, "category_id": 156, "iscrowd": 0, "bbox": [346, 62, 253, 50], "area": 4090}, {"id": 1848664, "category_id": 189, "iscrowd": 0, "bbox": [0, 201, 640, 277], "area": 71146}, {"id": 5275784, "category_id": 190, "iscrowd": 0, "bbox": [0, 337, 236, 60], "area": 1262}, {"id": 13035759, "category_id": 195, "iscrowd": 0, "bbox": [352, 399, 120, 79], "area": 4273}, {"id": 9870486, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 406], "area": 141366}], "file_name": "000000363461.png", "image_id": 363461}, {"segments_info": [{"id": 3487285, "category_id": 1, "iscrowd": 0, "bbox": [157, 0, 117, 147], "area": 9419}, {"id": 7499640, "category_id": 1, "iscrowd": 0, "bbox": [18, 40, 201, 373], "area": 24038}, {"id": 9600333, "category_id": 1, "iscrowd": 0, "bbox": [421, 66, 214, 344], "area": 48098}, {"id": 3093825, "category_id": 1, "iscrowd": 0, "bbox": [1, 12, 57, 116], "area": 5354}, {"id": 6901289, "category_id": 1, "iscrowd": 0, "bbox": [267, 5, 160, 177], "area": 14653}, {"id": 4607077, "category_id": 1, "iscrowd": 0, "bbox": [113, 0, 99, 55], "area": 3521}, {"id": 14999772, "category_id": 47, "iscrowd": 0, "bbox": [312, 313, 56, 51], "area": 1908}, {"id": 10855335, "category_id": 47, "iscrowd": 0, "bbox": [195, 221, 35, 33], "area": 954}, {"id": 9869991, "category_id": 47, "iscrowd": 0, "bbox": [414, 175, 31, 33], "area": 735}, {"id": 11118252, "category_id": 47, "iscrowd": 0, "bbox": [266, 171, 27, 33], "area": 637}, {"id": 8291735, "category_id": 47, "iscrowd": 0, "bbox": [126, 79, 10, 18], "area": 128}, {"id": 6647431, "category_id": 47, "iscrowd": 0, "bbox": [120, 53, 10, 17], "area": 110}, {"id": 8818337, "category_id": 47, "iscrowd": 0, "bbox": [145, 57, 14, 14], "area": 150}, {"id": 6053995, "category_id": 48, "iscrowd": 0, "bbox": [417, 232, 17, 24], "area": 157}, {"id": 4539726, "category_id": 48, "iscrowd": 0, "bbox": [367, 181, 14, 28], "area": 138}, {"id": 7569300, "category_id": 49, "iscrowd": 0, "bbox": [389, 220, 47, 9], "area": 307}, {"id": 5592672, "category_id": 49, "iscrowd": 0, "bbox": [224, 245, 11, 8], "area": 39}, {"id": 3495054, "category_id": 54, "iscrowd": 0, "bbox": [284, 200, 26, 30], "area": 401}, {"id": 3958946, "category_id": 54, "iscrowd": 0, "bbox": [212, 167, 27, 20], "area": 316}, {"id": 4479102, "category_id": 54, "iscrowd": 0, "bbox": [258, 218, 39, 21], "area": 591}, {"id": 2974365, "category_id": 54, "iscrowd": 0, "bbox": [301, 215, 17, 23], "area": 206}, {"id": 8035264, "category_id": 54, "iscrowd": 0, "bbox": [188, 287, 26, 23], "area": 414}, {"id": 7378109, "category_id": 54, "iscrowd": 0, "bbox": [174, 280, 31, 29], "area": 396}, {"id": 4749999, "category_id": 54, "iscrowd": 0, "bbox": [211, 267, 28, 35], "area": 497}, {"id": 7640768, "category_id": 54, "iscrowd": 0, "bbox": [86, 268, 43, 38], "area": 521}, {"id": 6785716, "category_id": 54, "iscrowd": 0, "bbox": [189, 155, 29, 27], "area": 339}, {"id": 7510207, "category_id": 60, "iscrowd": 0, "bbox": [87, 269, 40, 25], "area": 810}, {"id": 6191033, "category_id": 60, "iscrowd": 0, "bbox": [406, 315, 29, 22], "area": 498}, {"id": 11253456, "category_id": 60, "iscrowd": 0, "bbox": [407, 295, 27, 22], "area": 486}, {"id": 5797549, "category_id": 60, "iscrowd": 0, "bbox": [110, 252, 21, 18], "area": 263}, {"id": 6390711, "category_id": 60, "iscrowd": 0, "bbox": [123, 263, 24, 18], "area": 300}, {"id": 6196424, "category_id": 60, "iscrowd": 0, "bbox": [375, 288, 35, 37], "area": 700}, {"id": 2703201, "category_id": 62, "iscrowd": 0, "bbox": [107, 358, 244, 56], "area": 6772}, {"id": 592393, "category_id": 62, "iscrowd": 0, "bbox": [392, 67, 68, 112], "area": 3258}, {"id": 2169364, "category_id": 62, "iscrowd": 0, "bbox": [434, 256, 206, 163], "area": 3759}, {"id": 1315861, "category_id": 62, "iscrowd": 0, "bbox": [0, 127, 100, 292], "area": 7311}, {"id": 1449000, "category_id": 62, "iscrowd": 0, "bbox": [195, 33, 127, 131], "area": 3845}, {"id": 3886962, "category_id": 67, "iscrowd": 0, "bbox": [104, 27, 97, 83], "area": 3239}, {"id": 4411756, "category_id": 67, "iscrowd": 0, "bbox": [44, 4, 108, 35], "area": 2338}, {"id": 8295858, "category_id": 67, "iscrowd": 0, "bbox": [40, 152, 428, 267], "area": 59825}, {"id": 1450292, "category_id": 107, "iscrowd": 0, "bbox": [338, 0, 302, 98], "area": 11017}, {"id": 798297, "category_id": 177, "iscrowd": 0, "bbox": [231, 0, 409, 267], "area": 19144}, {"id": 1261941, "category_id": 189, "iscrowd": 0, "bbox": [40, 321, 13, 14], "area": 46}, {"id": 3291463, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 419], "area": 15016}], "file_name": "000000363666.png", "image_id": 363666}, {"segments_info": [{"id": 3158838, "category_id": 70, "iscrowd": 0, "bbox": [1, 314, 107, 146], "area": 11417}, {"id": 5331807, "category_id": 70, "iscrowd": 0, "bbox": [33, 442, 109, 38], "area": 2813}, {"id": 3027253, "category_id": 81, "iscrowd": 0, "bbox": [101, 269, 144, 105], "area": 11613}, {"id": 3092290, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 164836}, {"id": 7500164, "category_id": 181, "iscrowd": 0, "bbox": [420, 0, 220, 195], "area": 35486}, {"id": 11516607, "category_id": 186, "iscrowd": 0, "bbox": [392, 0, 145, 36], "area": 2671}, {"id": 7763320, "category_id": 195, "iscrowd": 0, "bbox": [269, 275, 343, 205], "area": 23916}], "file_name": "000000363784.png", "image_id": 363784}, {"segments_info": [{"id": 13489365, "category_id": 1, "iscrowd": 0, "bbox": [320, 34, 28, 43], "area": 848}, {"id": 4404522, "category_id": 31, "iscrowd": 0, "bbox": [211, 148, 75, 71], "area": 4030}, {"id": 3165568, "category_id": 44, "iscrowd": 0, "bbox": [125, 353, 23, 47], "area": 692}, {"id": 396563, "category_id": 62, "iscrowd": 0, "bbox": [396, 240, 243, 234], "area": 20996}, {"id": 14277072, "category_id": 72, "iscrowd": 0, "bbox": [279, 89, 181, 145], "area": 21282}, {"id": 13027002, "category_id": 72, "iscrowd": 0, "bbox": [469, 40, 171, 165], "area": 25139}, {"id": 12956830, "category_id": 72, "iscrowd": 0, "bbox": [0, 96, 125, 149], "area": 12700}, {"id": 8889780, "category_id": 73, "iscrowd": 0, "bbox": [0, 92, 195, 216], "area": 11562}, {"id": 12178141, "category_id": 73, "iscrowd": 0, "bbox": [275, 85, 243, 269], "area": 24805}, {"id": 12306896, "category_id": 74, "iscrowd": 0, "bbox": [581, 232, 48, 33], "area": 963}, {"id": 1316630, "category_id": 74, "iscrowd": 0, "bbox": [536, 244, 47, 35], "area": 1022}, {"id": 12375004, "category_id": 76, "iscrowd": 0, "bbox": [326, 307, 267, 112], "area": 14127}, {"id": 15002605, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 276, 214], "area": 39375}, {"id": 2109275, "category_id": 189, "iscrowd": 0, "bbox": [0, 204, 640, 261], "area": 33915}, {"id": 132613, "category_id": 190, "iscrowd": 0, "bbox": [0, 380, 554, 100], "area": 19111}, {"id": 8358807, "category_id": 195, "iscrowd": 0, "bbox": [224, 129, 354, 158], "area": 4300}, {"id": 14937582, "category_id": 199, "iscrowd": 0, "bbox": [263, 0, 377, 146], "area": 21273}], "file_name": "000000363840.png", "image_id": 363840}, {"segments_info": [{"id": 5198673, "category_id": 1, "iscrowd": 0, "bbox": [107, 15, 301, 407], "area": 48778}, {"id": 3422258, "category_id": 4, "iscrowd": 0, "bbox": [3, 154, 555, 476], "area": 99476}, {"id": 7895929, "category_id": 6, "iscrowd": 0, "bbox": [0, 3, 558, 376], "area": 118099}, {"id": 4673095, "category_id": 149, "iscrowd": 0, "bbox": [0, 342, 558, 298], "area": 43959}], "file_name": "000000363875.png", "image_id": 363875}, {"segments_info": [{"id": 6911881, "category_id": 1, "iscrowd": 0, "bbox": [248, 127, 84, 246], "area": 11780}, {"id": 11647675, "category_id": 34, "iscrowd": 0, "bbox": [114, 169, 48, 20], "area": 457}, {"id": 3498067, "category_id": 184, "iscrowd": 0, "bbox": [0, 219, 625, 159], "area": 47061}, {"id": 14933695, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 378], "area": 173411}, {"id": 4951689, "category_id": 193, "iscrowd": 0, "bbox": [0, 350, 640, 48], "area": 21852}], "file_name": "000000364102.png", "image_id": 364102}, {"segments_info": [{"id": 5592403, "category_id": 1, "iscrowd": 0, "bbox": [216, 131, 125, 198], "area": 10355}, {"id": 8362122, "category_id": 42, "iscrowd": 0, "bbox": [153, 291, 185, 64], "area": 3432}, {"id": 8883307, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 258506}], "file_name": "000000364126.png", "image_id": 364126}, {"segments_info": [{"id": 4739158, "category_id": 24, "iscrowd": 0, "bbox": [119, 1, 381, 257], "area": 44553}, {"id": 4475732, "category_id": 24, "iscrowd": 0, "bbox": [194, 130, 306, 241], "area": 48020}, {"id": 6120548, "category_id": 184, "iscrowd": 0, "bbox": [0, 13, 500, 35], "area": 5439}, {"id": 12633798, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 35], "area": 10211}, {"id": 7641518, "category_id": 193, "iscrowd": 0, "bbox": [0, 28, 500, 347], "area": 77321}], "file_name": "000000364166.png", "image_id": 364166}, {"segments_info": [{"id": 5465228, "category_id": 17, "iscrowd": 0, "bbox": [22, 92, 613, 313], "area": 100051}, {"id": 6319496, "category_id": 72, "iscrowd": 0, "bbox": [2, 2, 336, 216], "area": 52937}, {"id": 1052953, "category_id": 76, "iscrowd": 0, "bbox": [1, 263, 405, 158], "area": 39374}, {"id": 1382217, "category_id": 93, "iscrowd": 0, "bbox": [171, 151, 469, 105], "area": 4928}, {"id": 5270422, "category_id": 180, "iscrowd": 0, "bbox": [89, 0, 437, 194], "area": 20837}, {"id": 1511701, "category_id": 189, "iscrowd": 0, "bbox": [66, 306, 502, 122], "area": 23120}, {"id": 4811419, "category_id": 199, "iscrowd": 0, "bbox": [512, 0, 128, 172], "area": 15707}], "file_name": "000000364297.png", "image_id": 364297}, {"segments_info": [{"id": 7769236, "category_id": 20, "iscrowd": 0, "bbox": [115, 267, 444, 207], "area": 68702}, {"id": 8227986, "category_id": 20, "iscrowd": 0, "bbox": [140, 51, 116, 95], "area": 7819}, {"id": 10134956, "category_id": 20, "iscrowd": 0, "bbox": [106, 119, 149, 98], "area": 8981}, {"id": 11911623, "category_id": 20, "iscrowd": 0, "bbox": [318, 114, 169, 67], "area": 6545}, {"id": 12764874, "category_id": 20, "iscrowd": 0, "bbox": [559, 57, 81, 37], "area": 1636}, {"id": 5398631, "category_id": 20, "iscrowd": 0, "bbox": [583, 158, 57, 155], "area": 7199}, {"id": 8623000, "category_id": 20, "iscrowd": 0, "bbox": [177, 9, 83, 68], "area": 3141}, {"id": 5597812, "category_id": 20, "iscrowd": 0, "bbox": [411, 1, 97, 115], "area": 7070}, {"id": 5137007, "category_id": 20, "iscrowd": 0, "bbox": [440, 127, 157, 169], "area": 16358}, {"id": 6978176, "category_id": 20, "iscrowd": 0, "bbox": [14, 36, 87, 88], "area": 4756}, {"id": 7175818, "category_id": 20, "iscrowd": 0, "bbox": [7, 212, 213, 248], "area": 19818}, {"id": 11451329, "category_id": 20, "iscrowd": 0, "bbox": [455, 62, 123, 79], "area": 3076}, {"id": 9410979, "category_id": 20, "iscrowd": 0, "bbox": [482, 80, 158, 132], "area": 8707}, {"id": 8360603, "category_id": 20, "iscrowd": 0, "bbox": [110, 148, 364, 163], "area": 33499}, {"id": 8161934, "category_id": 20, "iscrowd": 0, "bbox": [494, 304, 146, 170], "area": 18802}, {"id": 7636621, "category_id": 20, "iscrowd": 1, "bbox": [0, 77, 106, 350], "area": 23018}, {"id": 2513746, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 53354}], "file_name": "000000364322.png", "image_id": 364322}, {"segments_info": [{"id": 461068, "category_id": 1, "iscrowd": 0, "bbox": [193, 148, 59, 137], "area": 2775}, {"id": 1251357, "category_id": 1, "iscrowd": 0, "bbox": [277, 158, 39, 131], "area": 2861}, {"id": 2834510, "category_id": 42, "iscrowd": 0, "bbox": [309, 192, 26, 41], "area": 667}, {"id": 7182513, "category_id": 42, "iscrowd": 0, "bbox": [182, 182, 51, 50], "area": 1267}, {"id": 4680583, "category_id": 154, "iscrowd": 0, "bbox": [0, 190, 640, 237], "area": 126914}, {"id": 4283764, "category_id": 155, "iscrowd": 0, "bbox": [0, 138, 640, 120], "area": 41274}, {"id": 529181, "category_id": 184, "iscrowd": 0, "bbox": [424, 84, 216, 55], "area": 9030}, {"id": 8237768, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 103], "area": 45669}, {"id": 1056556, "category_id": 197, "iscrowd": 0, "bbox": [0, 5, 640, 152], "area": 42564}], "file_name": "000000364557.png", "image_id": 364557}, {"segments_info": [{"id": 2771043, "category_id": 7, "iscrowd": 0, "bbox": [175, 119, 257, 233], "area": 50791}, {"id": 3295325, "category_id": 125, "iscrowd": 0, "bbox": [43, 337, 363, 65], "area": 7536}, {"id": 1383714, "category_id": 147, "iscrowd": 0, "bbox": [30, 328, 579, 75], "area": 12560}, {"id": 1719607, "category_id": 184, "iscrowd": 0, "bbox": [35, 114, 576, 250], "area": 47562}, {"id": 9739680, "category_id": 187, "iscrowd": 0, "bbox": [31, 32, 566, 255], "area": 68803}], "file_name": "000000364587.png", "image_id": 364587}, {"segments_info": [{"id": 9736843, "category_id": 15, "iscrowd": 0, "bbox": [336, 7, 304, 134], "area": 17017}, {"id": 5729414, "category_id": 18, "iscrowd": 0, "bbox": [119, 88, 520, 440], "area": 143757}, {"id": 6517379, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 533], "area": 165047}], "file_name": "000000364636.png", "image_id": 364636}, {"segments_info": [{"id": 1973791, "category_id": 1, "iscrowd": 0, "bbox": [472, 168, 5, 15], "area": 60}, {"id": 2761248, "category_id": 1, "iscrowd": 0, "bbox": [26, 157, 10, 28], "area": 154}, {"id": 6771801, "category_id": 1, "iscrowd": 0, "bbox": [209, 88, 10, 18], "area": 99}, {"id": 3549474, "category_id": 1, "iscrowd": 0, "bbox": [102, 125, 8, 27], "area": 118}, {"id": 2959140, "category_id": 1, "iscrowd": 0, "bbox": [82, 173, 8, 20], "area": 113}, {"id": 2763050, "category_id": 1, "iscrowd": 0, "bbox": [399, 304, 18, 26], "area": 294}, {"id": 4729892, "category_id": 1, "iscrowd": 0, "bbox": [440, 224, 9, 16], "area": 106}, {"id": 2105123, "category_id": 1, "iscrowd": 0, "bbox": [408, 270, 11, 26], "area": 200}, {"id": 5651763, "category_id": 1, "iscrowd": 0, "bbox": [113, 157, 7, 14], "area": 64}, {"id": 5062457, "category_id": 1, "iscrowd": 0, "bbox": [285, 83, 7, 21], "area": 93}, {"id": 2629690, "category_id": 1, "iscrowd": 0, "bbox": [333, 288, 18, 18], "area": 162}, {"id": 3091755, "category_id": 1, "iscrowd": 0, "bbox": [128, 166, 13, 26], "area": 190}, {"id": 1446930, "category_id": 1, "iscrowd": 0, "bbox": [335, 299, 13, 34], "area": 289}, {"id": 6904658, "category_id": 1, "iscrowd": 1, "bbox": [0, 0, 500, 354], "area": 42417}, {"id": 2504823, "category_id": 36, "iscrowd": 0, "bbox": [336, 167, 27, 17], "area": 171}, {"id": 12826799, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 500, 354], "area": 106368}, {"id": 2764077, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 484, 68], "area": 15561}, {"id": 11770981, "category_id": 185, "iscrowd": 0, "bbox": [30, 63, 310, 174], "area": 2017}, {"id": 5387819, "category_id": 197, "iscrowd": 0, "bbox": [366, 175, 134, 179], "area": 8120}], "file_name": "000000364884.png", "image_id": 364884}, {"segments_info": [{"id": 7434609, "category_id": 1, "iscrowd": 0, "bbox": [352, 74, 182, 197], "area": 12330}, {"id": 11776947, "category_id": 37, "iscrowd": 0, "bbox": [485, 232, 34, 28], "area": 601}, {"id": 6184542, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 260188}], "file_name": "000000365095.png", "image_id": 365095}, {"segments_info": [{"id": 3553591, "category_id": 9, "iscrowd": 0, "bbox": [41, 92, 599, 299], "area": 107653}, {"id": 6709285, "category_id": 148, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 162878}, {"id": 864026, "category_id": 184, "iscrowd": 0, "bbox": [572, 327, 68, 100], "area": 2459}], "file_name": "000000365098.png", "image_id": 365098}, {"segments_info": [{"id": 5986135, "category_id": 3, "iscrowd": 0, "bbox": [399, 307, 81, 184], "area": 5693}, {"id": 3615524, "category_id": 3, "iscrowd": 0, "bbox": [70, 260, 142, 203], "area": 20904}, {"id": 3748182, "category_id": 3, "iscrowd": 0, "bbox": [418, 177, 177, 342], "area": 25115}, {"id": 4074016, "category_id": 15, "iscrowd": 0, "bbox": [376, 350, 55, 29], "area": 938}, {"id": 3092532, "category_id": 18, "iscrowd": 0, "bbox": [465, 274, 93, 82], "area": 4798}, {"id": 4471869, "category_id": 133, "iscrowd": 0, "bbox": [92, 129, 477, 385], "area": 103897}, {"id": 9475228, "category_id": 149, "iscrowd": 0, "bbox": [0, 223, 606, 365], "area": 37652}, {"id": 2694939, "category_id": 181, "iscrowd": 0, "bbox": [280, 235, 65, 71], "area": 3205}, {"id": 6717047, "category_id": 184, "iscrowd": 0, "bbox": [0, 132, 61, 80], "area": 2266}, {"id": 15843722, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 157], "area": 52545}], "file_name": "000000365207.png", "image_id": 365207}, {"segments_info": [{"id": 10987431, "category_id": 1, "iscrowd": 0, "bbox": [175, 177, 172, 425], "area": 29201}, {"id": 10395294, "category_id": 28, "iscrowd": 0, "bbox": [89, 371, 190, 248], "area": 23928}, {"id": 2368548, "category_id": 31, "iscrowd": 0, "bbox": [275, 188, 18, 27], "area": 341}, {"id": 9408399, "category_id": 62, "iscrowd": 0, "bbox": [32, 290, 106, 255], "area": 11123}, {"id": 10132122, "category_id": 93, "iscrowd": 0, "bbox": [232, 287, 331, 260], "area": 49350}, {"id": 15000804, "category_id": 109, "iscrowd": 0, "bbox": [72, 0, 312, 626], "area": 55639}, {"id": 13158600, "category_id": 154, "iscrowd": 0, "bbox": [0, 0, 603, 640], "area": 203809}], "file_name": "000000365208.png", "image_id": 365208}, {"segments_info": [{"id": 12370114, "category_id": 47, "iscrowd": 0, "bbox": [350, 176, 103, 157], "area": 10988}, {"id": 13487824, "category_id": 47, "iscrowd": 0, "bbox": [112, 223, 186, 204], "area": 37401}, {"id": 13421516, "category_id": 81, "iscrowd": 0, "bbox": [298, 314, 342, 113], "area": 28084}, {"id": 13946305, "category_id": 90, "iscrowd": 0, "bbox": [330, 118, 46, 67], "area": 885}, {"id": 12177876, "category_id": 90, "iscrowd": 0, "bbox": [350, 85, 43, 101], "area": 1721}, {"id": 14339295, "category_id": 90, "iscrowd": 0, "bbox": [252, 38, 104, 183], "area": 6853}, {"id": 14013653, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 375], "area": 153844}], "file_name": "000000365385.png", "image_id": 365385}, {"segments_info": [{"id": 4738654, "category_id": 47, "iscrowd": 0, "bbox": [274, 0, 18, 18], "area": 285}, {"id": 3354937, "category_id": 65, "iscrowd": 0, "bbox": [332, 234, 286, 183], "area": 39142}, {"id": 6908776, "category_id": 70, "iscrowd": 0, "bbox": [121, 224, 155, 161], "area": 20296}, {"id": 10984865, "category_id": 81, "iscrowd": 0, "bbox": [272, 113, 101, 102], "area": 7432}, {"id": 4210512, "category_id": 190, "iscrowd": 0, "bbox": [32, 333, 339, 92], "area": 17905}, {"id": 7696509, "category_id": 195, "iscrowd": 0, "bbox": [285, 0, 75, 40], "area": 1798}, {"id": 7040366, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 180608}], "file_name": "000000365387.png", "image_id": 365387}, {"segments_info": [{"id": 3487029, "category_id": 1, "iscrowd": 0, "bbox": [313, 290, 27, 39], "area": 764}, {"id": 8421504, "category_id": 1, "iscrowd": 0, "bbox": [215, 38, 189, 216], "area": 13738}, {"id": 2565927, "category_id": 1, "iscrowd": 0, "bbox": [106, 164, 56, 125], "area": 4087}, {"id": 5460819, "category_id": 1, "iscrowd": 0, "bbox": [13, 140, 39, 89], "area": 2056}, {"id": 2829099, "category_id": 1, "iscrowd": 0, "bbox": [339, 275, 32, 60], "area": 1276}, {"id": 3487019, "category_id": 1, "iscrowd": 0, "bbox": [58, 196, 43, 52], "area": 1432}, {"id": 1315860, "category_id": 1, "iscrowd": 0, "bbox": [200, 208, 32, 32], "area": 437}, {"id": 5197647, "category_id": 1, "iscrowd": 0, "bbox": [399, 306, 25, 34], "area": 534}, {"id": 2763306, "category_id": 1, "iscrowd": 0, "bbox": [297, 289, 18, 36], "area": 321}, {"id": 3289650, "category_id": 1, "iscrowd": 0, "bbox": [289, 281, 24, 39], "area": 366}, {"id": 3750201, "category_id": 1, "iscrowd": 0, "bbox": [240, 270, 34, 45], "area": 913}, {"id": 3684408, "category_id": 1, "iscrowd": 0, "bbox": [269, 258, 29, 62], "area": 1212}, {"id": 6381921, "category_id": 1, "iscrowd": 0, "bbox": [366, 299, 24, 40], "area": 623}, {"id": 5723991, "category_id": 41, "iscrowd": 0, "bbox": [218, 244, 108, 30], "area": 1365}, {"id": 9079434, "category_id": 95, "iscrowd": 0, "bbox": [295, 133, 133, 208], "area": 11484}, {"id": 9474192, "category_id": 177, "iscrowd": 0, "bbox": [187, 305, 241, 271], "area": 50096}, {"id": 11119017, "category_id": 184, "iscrowd": 0, "bbox": [0, 165, 287, 87], "area": 6802}, {"id": 14737632, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 428, 254], "area": 70093}, {"id": 13487565, "category_id": 191, "iscrowd": 0, "bbox": [0, 509, 428, 131], "area": 40138}, {"id": 10526880, "category_id": 199, "iscrowd": 0, "bbox": [0, 199, 241, 346], "area": 61241}], "file_name": "000000365521.png", "image_id": 365521}, {"segments_info": [{"id": 921102, "category_id": 1, "iscrowd": 0, "bbox": [98, 123, 255, 483], "area": 63857}, {"id": 4671303, "category_id": 3, "iscrowd": 0, "bbox": [223, 44, 40, 25], "area": 765}, {"id": 2631720, "category_id": 3, "iscrowd": 0, "bbox": [107, 44, 62, 38], "area": 1569}, {"id": 4013373, "category_id": 3, "iscrowd": 0, "bbox": [383, 20, 43, 75], "area": 2309}, {"id": 5460819, "category_id": 3, "iscrowd": 0, "bbox": [0, 26, 93, 68], "area": 4946}, {"id": 4868682, "category_id": 3, "iscrowd": 0, "bbox": [186, 36, 40, 34], "area": 979}, {"id": 3552822, "category_id": 70, "iscrowd": 0, "bbox": [211, 416, 113, 145], "area": 6914}, {"id": 4210752, "category_id": 149, "iscrowd": 0, "bbox": [0, 28, 426, 388], "area": 70919}, {"id": 3223857, "category_id": 191, "iscrowd": 0, "bbox": [0, 133, 426, 507], "area": 99514}, {"id": 4473924, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 426, 91], "area": 19609}], "file_name": "000000365642.png", "image_id": 365642}, {"segments_info": [{"id": 2763053, "category_id": 1, "iscrowd": 0, "bbox": [544, 254, 9, 32], "area": 200}, {"id": 4868966, "category_id": 6, "iscrowd": 0, "bbox": [45, 161, 412, 156], "area": 43635}, {"id": 6843249, "category_id": 149, "iscrowd": 0, "bbox": [0, 267, 640, 160], "area": 83621}, {"id": 14340811, "category_id": 155, "iscrowd": 0, "bbox": [438, 181, 92, 70], "area": 4093}, {"id": 2040608, "category_id": 184, "iscrowd": 0, "bbox": [0, 147, 85, 96], "area": 5369}, {"id": 15787741, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 172], "area": 71547}, {"id": 9077632, "category_id": 192, "iscrowd": 0, "bbox": [0, 52, 640, 231], "area": 56104}, {"id": 3362649, "category_id": 193, "iscrowd": 0, "bbox": [0, 261, 630, 51], "area": 5962}], "file_name": "000000365655.png", "image_id": 365655}, {"segments_info": [{"id": 7762545, "category_id": 1, "iscrowd": 0, "bbox": [576, 237, 64, 155], "area": 5835}, {"id": 7566199, "category_id": 1, "iscrowd": 0, "bbox": [554, 221, 21, 58], "area": 627}, {"id": 5657425, "category_id": 8, "iscrowd": 0, "bbox": [141, 136, 404, 249], "area": 58280}, {"id": 5261641, "category_id": 8, "iscrowd": 0, "bbox": [1, 206, 153, 93], "area": 10308}, {"id": 7369837, "category_id": 10, "iscrowd": 0, "bbox": [541, 171, 10, 18], "area": 152}, {"id": 6380885, "category_id": 10, "iscrowd": 0, "bbox": [434, 179, 7, 13], "area": 79}, {"id": 7563602, "category_id": 10, "iscrowd": 0, "bbox": [369, 118, 13, 26], "area": 306}, {"id": 5525073, "category_id": 27, "iscrowd": 0, "bbox": [598, 258, 42, 37], "area": 150}, {"id": 10200488, "category_id": 149, "iscrowd": 0, "bbox": [0, 251, 640, 229], "area": 99352}, {"id": 7372673, "category_id": 184, "iscrowd": 0, "bbox": [122, 102, 354, 80], "area": 3855}, {"id": 14789509, "category_id": 187, "iscrowd": 0, "bbox": [218, 0, 422, 182], "area": 35619}, {"id": 12106169, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 280], "area": 89613}], "file_name": "000000365745.png", "image_id": 365745}, {"segments_info": [{"id": 4212041, "category_id": 78, "iscrowd": 0, "bbox": [84, 153, 114, 78], "area": 7259}, {"id": 2831163, "category_id": 79, "iscrowd": 0, "bbox": [77, 243, 162, 205], "area": 18263}, {"id": 6515311, "category_id": 81, "iscrowd": 0, "bbox": [346, 268, 85, 20], "area": 874}, {"id": 11646906, "category_id": 107, "iscrowd": 0, "bbox": [50, 256, 551, 73], "area": 8153}, {"id": 2572910, "category_id": 118, "iscrowd": 0, "bbox": [35, 376, 605, 104], "area": 25504}, {"id": 11714759, "category_id": 130, "iscrowd": 0, "bbox": [266, 0, 19, 35], "area": 504}, {"id": 1251103, "category_id": 161, "iscrowd": 0, "bbox": [0, 0, 74, 187], "area": 6773}, {"id": 11581886, "category_id": 176, "iscrowd": 0, "bbox": [0, 193, 596, 120], "area": 36721}, {"id": 14997961, "category_id": 181, "iscrowd": 0, "bbox": [177, 33, 93, 188], "area": 12395}, {"id": 1975598, "category_id": 185, "iscrowd": 0, "bbox": [16, 305, 181, 175], "area": 19724}, {"id": 1185574, "category_id": 188, "iscrowd": 0, "bbox": [13, 29, 627, 448], "area": 75299}, {"id": 11515062, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 72075}], "file_name": "000000365766.png", "image_id": 365766}, {"segments_info": [{"id": 4540559, "category_id": 1, "iscrowd": 0, "bbox": [0, 2, 500, 367], "area": 111333}, {"id": 12761291, "category_id": 77, "iscrowd": 0, "bbox": [45, 164, 121, 206], "area": 19932}, {"id": 2238026, "category_id": 180, "iscrowd": 0, "bbox": [316, 0, 184, 294], "area": 30673}, {"id": 480412, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 194, 179], "area": 20916}], "file_name": "000000365886.png", "image_id": 365886}, {"segments_info": [{"id": 8027770, "category_id": 17, "iscrowd": 0, "bbox": [87, 219, 52, 43], "area": 1669}, {"id": 11578277, "category_id": 62, "iscrowd": 0, "bbox": [55, 286, 236, 152], "area": 16746}, {"id": 5924205, "category_id": 63, "iscrowd": 0, "bbox": [54, 202, 369, 206], "area": 19656}, {"id": 4868930, "category_id": 72, "iscrowd": 0, "bbox": [425, 177, 123, 75], "area": 8256}, {"id": 5126957, "category_id": 93, "iscrowd": 0, "bbox": [33, 233, 138, 91], "area": 5647}, {"id": 6317665, "category_id": 112, "iscrowd": 0, "bbox": [0, 69, 597, 278], "area": 14684}, {"id": 10147821, "category_id": 130, "iscrowd": 0, "bbox": [47, 171, 365, 71], "area": 2740}, {"id": 790312, "category_id": 141, "iscrowd": 0, "bbox": [345, 224, 52, 38], "area": 1444}, {"id": 7374987, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 74], "area": 27972}, {"id": 6782612, "category_id": 189, "iscrowd": 0, "bbox": [48, 242, 495, 238], "area": 31242}, {"id": 4882328, "category_id": 199, "iscrowd": 0, "bbox": [0, 4, 640, 342], "area": 95452}, {"id": 11249055, "category_id": 200, "iscrowd": 0, "bbox": [0, 270, 640, 210], "area": 71548}], "file_name": "000000366141.png", "image_id": 366141}, {"segments_info": [{"id": 4145214, "category_id": 3, "iscrowd": 0, "bbox": [193, 171, 16, 12], "area": 153}, {"id": 6645605, "category_id": 3, "iscrowd": 0, "bbox": [0, 186, 19, 21], "area": 267}, {"id": 4211307, "category_id": 11, "iscrowd": 0, "bbox": [190, 359, 49, 74], "area": 2251}, {"id": 7632759, "category_id": 149, "iscrowd": 0, "bbox": [0, 166, 264, 183], "area": 20670}, {"id": 12303289, "category_id": 159, "iscrowd": 0, "bbox": [0, 169, 375, 331], "area": 86226}, {"id": 2764592, "category_id": 185, "iscrowd": 0, "bbox": [0, 162, 230, 231], "area": 7404}, {"id": 10067614, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 375, 216], "area": 64483}, {"id": 5856608, "category_id": 193, "iscrowd": 0, "bbox": [0, 169, 32, 21], "area": 459}], "file_name": "000000366178.png", "image_id": 366178}, {"segments_info": [{"id": 3358537, "category_id": 17, "iscrowd": 0, "bbox": [237, 172, 177, 80], "area": 10068}, {"id": 1314343, "category_id": 65, "iscrowd": 0, "bbox": [1, 221, 638, 192], "area": 102105}, {"id": 11513516, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 160444}], "file_name": "000000366199.png", "image_id": 366199}, {"segments_info": [{"id": 7631223, "category_id": 72, "iscrowd": 0, "bbox": [70, 8, 383, 311], "area": 111246}, {"id": 9409171, "category_id": 74, "iscrowd": 0, "bbox": [465, 559, 60, 71], "area": 3272}, {"id": 9014671, "category_id": 76, "iscrowd": 0, "bbox": [85, 524, 354, 81], "area": 23840}, {"id": 1645604, "category_id": 77, "iscrowd": 0, "bbox": [51, 250, 45, 73], "area": 2285}, {"id": 7173496, "category_id": 189, "iscrowd": 0, "bbox": [0, 306, 541, 334], "area": 135230}, {"id": 6322570, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 541, 302], "area": 37395}], "file_name": "000000366225.png", "image_id": 366225}, {"segments_info": [{"id": 8948893, "category_id": 18, "iscrowd": 0, "bbox": [0, 166, 173, 212], "area": 20347}, {"id": 12036285, "category_id": 37, "iscrowd": 0, "bbox": [145, 252, 71, 74], "area": 3523}, {"id": 7234654, "category_id": 125, "iscrowd": 0, "bbox": [455, 0, 185, 478], "area": 49640}, {"id": 7173746, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 478], "area": 232231}], "file_name": "000000366611.png", "image_id": 366611}, {"segments_info": [{"id": 10064288, "category_id": 1, "iscrowd": 0, "bbox": [29, 102, 213, 226], "area": 19008}, {"id": 2389698, "category_id": 55, "iscrowd": 0, "bbox": [194, 349, 67, 72], "area": 3692}, {"id": 1271456, "category_id": 55, "iscrowd": 0, "bbox": [306, 420, 52, 76], "area": 2043}, {"id": 3848670, "category_id": 55, "iscrowd": 0, "bbox": [275, 164, 82, 76], "area": 3909}, {"id": 2393293, "category_id": 55, "iscrowd": 0, "bbox": [226, 288, 76, 77], "area": 4470}, {"id": 5030129, "category_id": 55, "iscrowd": 0, "bbox": [273, 249, 61, 56], "area": 2648}, {"id": 2911657, "category_id": 55, "iscrowd": 0, "bbox": [166, 345, 36, 48], "area": 977}, {"id": 5816561, "category_id": 55, "iscrowd": 0, "bbox": [361, 234, 66, 52], "area": 2516}, {"id": 2261702, "category_id": 55, "iscrowd": 0, "bbox": [236, 193, 39, 29], "area": 430}, {"id": 3246043, "category_id": 55, "iscrowd": 0, "bbox": [377, 276, 48, 78], "area": 2918}, {"id": 2124467, "category_id": 55, "iscrowd": 0, "bbox": [260, 357, 73, 73], "area": 4340}, {"id": 4427969, "category_id": 55, "iscrowd": 0, "bbox": [185, 286, 46, 47], "area": 1555}, {"id": 4041708, "category_id": 55, "iscrowd": 0, "bbox": [304, 230, 66, 68], "area": 2469}, {"id": 3573169, "category_id": 55, "iscrowd": 0, "bbox": [226, 220, 72, 74], "area": 3640}, {"id": 3179440, "category_id": 55, "iscrowd": 1, "bbox": [1, 160, 417, 329], "area": 29210}, {"id": 2834547, "category_id": 119, "iscrowd": 0, "bbox": [0, 0, 427, 98], "area": 13508}, {"id": 5934005, "category_id": 122, "iscrowd": 0, "bbox": [0, 116, 427, 524], "area": 41370}, {"id": 5084049, "category_id": 184, "iscrowd": 0, "bbox": [64, 199, 363, 441], "area": 40168}, {"id": 6909565, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 427, 173], "area": 44293}, {"id": 11975363, "category_id": 199, "iscrowd": 0, "bbox": [0, 165, 92, 187], "area": 10923}], "file_name": "000000366711.png", "image_id": 366711}, {"segments_info": [{"id": 2829878, "category_id": 1, "iscrowd": 0, "bbox": [419, 178, 76, 108], "area": 3004}, {"id": 2237744, "category_id": 18, "iscrowd": 0, "bbox": [298, 400, 106, 80], "area": 5491}, {"id": 9212055, "category_id": 18, "iscrowd": 0, "bbox": [89, 446, 93, 34], "area": 2125}, {"id": 3549736, "category_id": 33, "iscrowd": 0, "bbox": [113, 233, 69, 117], "area": 3669}, {"id": 1578262, "category_id": 33, "iscrowd": 0, "bbox": [319, 270, 45, 41], "area": 1439}, {"id": 1841948, "category_id": 62, "iscrowd": 0, "bbox": [407, 189, 53, 79], "area": 1643}, {"id": 5132372, "category_id": 65, "iscrowd": 0, "bbox": [179, 340, 309, 132], "area": 19382}, {"id": 9609895, "category_id": 72, "iscrowd": 0, "bbox": [433, 163, 48, 34], "area": 1160}, {"id": 5264469, "category_id": 76, "iscrowd": 0, "bbox": [460, 216, 17, 6], "area": 81}, {"id": 6513773, "category_id": 84, "iscrowd": 0, "bbox": [33, 74, 43, 48], "area": 1970}, {"id": 8619915, "category_id": 84, "iscrowd": 0, "bbox": [0, 173, 23, 10], "area": 190}, {"id": 3621715, "category_id": 84, "iscrowd": 0, "bbox": [285, 192, 21, 16], "area": 208}, {"id": 9736339, "category_id": 84, "iscrowd": 0, "bbox": [0, 234, 21, 32], "area": 643}, {"id": 8685708, "category_id": 84, "iscrowd": 0, "bbox": [0, 163, 25, 10], "area": 225}, {"id": 4543580, "category_id": 84, "iscrowd": 0, "bbox": [382, 208, 13, 3], "area": 37}, {"id": 3621460, "category_id": 84, "iscrowd": 0, "bbox": [7, 88, 26, 32], "area": 793}, {"id": 2040897, "category_id": 100, "iscrowd": 0, "bbox": [103, 270, 77, 114], "area": 5655}, {"id": 11975361, "category_id": 112, "iscrowd": 0, "bbox": [169, 0, 471, 398], "area": 50692}, {"id": 5593951, "category_id": 133, "iscrowd": 0, "bbox": [269, 59, 236, 331], "area": 58833}, {"id": 5195855, "category_id": 177, "iscrowd": 0, "bbox": [542, 118, 98, 362], "area": 17402}, {"id": 2566708, "category_id": 188, "iscrowd": 0, "bbox": [0, 15, 252, 402], "area": 28073}, {"id": 8619659, "category_id": 195, "iscrowd": 0, "bbox": [0, 232, 31, 34], "area": 296}, {"id": 10790571, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 507, 368], "area": 53978}, {"id": 2959401, "category_id": 200, "iscrowd": 0, "bbox": [0, 341, 560, 139], "area": 30501}], "file_name": "000000366884.png", "image_id": 366884}, {"segments_info": [{"id": 1515839, "category_id": 18, "iscrowd": 0, "bbox": [101, 75, 374, 346], "area": 42042}, {"id": 7437975, "category_id": 62, "iscrowd": 0, "bbox": [17, 44, 437, 434], "area": 36852}, {"id": 1384769, "category_id": 63, "iscrowd": 0, "bbox": [7, 223, 445, 277], "area": 55714}, {"id": 1844536, "category_id": 93, "iscrowd": 0, "bbox": [0, 106, 160, 347], "area": 3795}, {"id": 9804514, "category_id": 109, "iscrowd": 0, "bbox": [379, 0, 109, 322], "area": 29220}, {"id": 66317, "category_id": 118, "iscrowd": 0, "bbox": [0, 444, 465, 56], "area": 5563}, {"id": 13093062, "category_id": 181, "iscrowd": 0, "bbox": [313, 0, 88, 227], "area": 15639}, {"id": 8159625, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 488, 449], "area": 31958}], "file_name": "000000367082.png", "image_id": 367082}, {"segments_info": [{"id": 6371379, "category_id": 1, "iscrowd": 0, "bbox": [541, 95, 62, 106], "area": 2448}, {"id": 6046789, "category_id": 1, "iscrowd": 0, "bbox": [7, 109, 27, 55], "area": 544}, {"id": 6381922, "category_id": 1, "iscrowd": 0, "bbox": [311, 95, 41, 55], "area": 739}, {"id": 3818841, "category_id": 1, "iscrowd": 0, "bbox": [147, 98, 44, 56], "area": 1130}, {"id": 2507097, "category_id": 1, "iscrowd": 0, "bbox": [131, 123, 257, 304], "area": 32433}, {"id": 765131, "category_id": 47, "iscrowd": 0, "bbox": [405, 291, 37, 41], "area": 1146}, {"id": 7765115, "category_id": 62, "iscrowd": 0, "bbox": [319, 125, 3, 3], "area": 6}, {"id": 4470060, "category_id": 62, "iscrowd": 0, "bbox": [518, 134, 58, 67], "area": 788}, {"id": 5400173, "category_id": 62, "iscrowd": 0, "bbox": [70, 174, 82, 96], "area": 2895}, {"id": 2182271, "category_id": 62, "iscrowd": 0, "bbox": [520, 234, 57, 30], "area": 1049}, {"id": 6374708, "category_id": 62, "iscrowd": 0, "bbox": [96, 279, 79, 148], "area": 6142}, {"id": 8822439, "category_id": 64, "iscrowd": 0, "bbox": [228, 95, 12, 23], "area": 161}, {"id": 2835781, "category_id": 64, "iscrowd": 0, "bbox": [461, 118, 55, 120], "area": 3646}, {"id": 4608081, "category_id": 64, "iscrowd": 0, "bbox": [102, 142, 20, 25], "area": 332}, {"id": 4872550, "category_id": 67, "iscrowd": 0, "bbox": [297, 143, 60, 59], "area": 1310}, {"id": 4605773, "category_id": 67, "iscrowd": 0, "bbox": [0, 156, 169, 131], "area": 7595}, {"id": 4813225, "category_id": 67, "iscrowd": 0, "bbox": [435, 230, 205, 191], "area": 12409}, {"id": 2237991, "category_id": 72, "iscrowd": 0, "bbox": [33, 107, 68, 63], "area": 3602}, {"id": 14604501, "category_id": 72, "iscrowd": 0, "bbox": [585, 101, 35, 33], "area": 865}, {"id": 9542298, "category_id": 72, "iscrowd": 0, "bbox": [349, 175, 95, 112], "area": 7436}, {"id": 2106406, "category_id": 72, "iscrowd": 0, "bbox": [182, 112, 59, 27], "area": 857}, {"id": 10394003, "category_id": 73, "iscrowd": 0, "bbox": [253, 204, 105, 72], "area": 4595}, {"id": 399152, "category_id": 74, "iscrowd": 0, "bbox": [350, 322, 24, 5], "area": 59}, {"id": 2055289, "category_id": 76, "iscrowd": 0, "bbox": [302, 273, 91, 36], "area": 1364}, {"id": 2470643, "category_id": 87, "iscrowd": 0, "bbox": [432, 263, 20, 29], "area": 325}, {"id": 3894917, "category_id": 130, "iscrowd": 0, "bbox": [35, 101, 520, 122], "area": 4358}, {"id": 13881552, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 640, 139], "area": 58956}, {"id": 2105646, "category_id": 188, "iscrowd": 0, "bbox": [595, 116, 45, 89], "area": 3218}, {"id": 2049362, "category_id": 189, "iscrowd": 0, "bbox": [0, 134, 640, 293], "area": 49792}, {"id": 11906727, "category_id": 190, "iscrowd": 0, "bbox": [0, 171, 640, 256], "area": 25355}, {"id": 7108992, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 471, 209], "area": 16232}], "file_name": "000000367095.png", "image_id": 367095}, {"segments_info": [{"id": 2563352, "category_id": 1, "iscrowd": 0, "bbox": [0, 67, 91, 71], "area": 3819}, {"id": 4149355, "category_id": 18, "iscrowd": 0, "bbox": [131, 64, 181, 125], "area": 16134}, {"id": 1510664, "category_id": 63, "iscrowd": 0, "bbox": [296, 4, 203, 159], "area": 24165}, {"id": 16579833, "category_id": 181, "iscrowd": 0, "bbox": [410, 0, 90, 53], "area": 2823}, {"id": 1057599, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 329, 94], "area": 22547}, {"id": 7040630, "category_id": 199, "iscrowd": 0, "bbox": [326, 0, 85, 45], "area": 2730}, {"id": 8816520, "category_id": 200, "iscrowd": 0, "bbox": [0, 143, 500, 169], "area": 73794}], "file_name": "000000367195.png", "image_id": 367195}, {"segments_info": [{"id": 1784147, "category_id": 1, "iscrowd": 0, "bbox": [72, 184, 180, 316], "area": 26870}, {"id": 8361155, "category_id": 38, "iscrowd": 0, "bbox": [29, 17, 114, 115], "area": 8002}, {"id": 8490126, "category_id": 155, "iscrowd": 0, "bbox": [0, 221, 333, 68], "area": 15022}, {"id": 14540769, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 333, 224], "area": 65060}, {"id": 1200481, "category_id": 193, "iscrowd": 0, "bbox": [0, 270, 333, 230], "area": 51186}], "file_name": "000000367228.png", "image_id": 367228}, {"segments_info": [{"id": 3948102, "category_id": 47, "iscrowd": 0, "bbox": [342, 370, 18, 26], "area": 395}, {"id": 2172209, "category_id": 62, "iscrowd": 0, "bbox": [121, 358, 62, 76], "area": 2775}, {"id": 2698036, "category_id": 62, "iscrowd": 0, "bbox": [64, 338, 50, 59], "area": 1781}, {"id": 2829887, "category_id": 63, "iscrowd": 0, "bbox": [316, 235, 324, 225], "area": 45914}, {"id": 4737893, "category_id": 63, "iscrowd": 0, "bbox": [73, 251, 221, 134], "area": 17338}, {"id": 9144977, "category_id": 64, "iscrowd": 0, "bbox": [280, 209, 46, 142], "area": 2948}, {"id": 5593448, "category_id": 64, "iscrowd": 0, "bbox": [121, 233, 30, 33], "area": 532}, {"id": 6648184, "category_id": 64, "iscrowd": 0, "bbox": [92, 243, 29, 22], "area": 305}, {"id": 3556955, "category_id": 67, "iscrowd": 0, "bbox": [0, 354, 195, 117], "area": 14123}, {"id": 3684410, "category_id": 75, "iscrowd": 0, "bbox": [359, 370, 32, 11], "area": 138}, {"id": 3816508, "category_id": 75, "iscrowd": 0, "bbox": [362, 373, 27, 14], "area": 135}, {"id": 5590859, "category_id": 75, "iscrowd": 0, "bbox": [369, 373, 36, 18], "area": 258}, {"id": 8485765, "category_id": 84, "iscrowd": 0, "bbox": [364, 404, 49, 27], "area": 521}, {"id": 5855833, "category_id": 84, "iscrowd": 0, "bbox": [263, 392, 51, 25], "area": 603}, {"id": 7894390, "category_id": 84, "iscrowd": 0, "bbox": [366, 413, 52, 27], "area": 668}, {"id": 1974059, "category_id": 86, "iscrowd": 0, "bbox": [284, 270, 37, 79], "area": 802}, {"id": 6251876, "category_id": 86, "iscrowd": 0, "bbox": [98, 253, 22, 14], "area": 223}, {"id": 1842466, "category_id": 86, "iscrowd": 0, "bbox": [128, 255, 21, 10], "area": 180}, {"id": 3356015, "category_id": 86, "iscrowd": 0, "bbox": [250, 266, 34, 21], "area": 421}, {"id": 987157, "category_id": 118, "iscrowd": 0, "bbox": [180, 399, 460, 81], "area": 14925}, {"id": 7700118, "category_id": 171, "iscrowd": 0, "bbox": [68, 177, 98, 98], "area": 3328}, {"id": 7568786, "category_id": 180, "iscrowd": 0, "bbox": [0, 52, 273, 102], "area": 13350}, {"id": 9344405, "category_id": 181, "iscrowd": 0, "bbox": [0, 138, 283, 145], "area": 15035}, {"id": 2566444, "category_id": 189, "iscrowd": 0, "bbox": [0, 289, 435, 191], "area": 21644}, {"id": 7500668, "category_id": 195, "iscrowd": 0, "bbox": [363, 397, 51, 34], "area": 418}, {"id": 11119021, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 347], "area": 119028}], "file_name": "000000367386.png", "image_id": 367386}, {"segments_info": [{"id": 3687744, "category_id": 63, "iscrowd": 0, "bbox": [1, 490, 248, 150], "area": 18770}, {"id": 9279648, "category_id": 73, "iscrowd": 0, "bbox": [153, 510, 100, 45], "area": 2294}, {"id": 6316902, "category_id": 75, "iscrowd": 0, "bbox": [188, 486, 31, 12], "area": 216}, {"id": 2765423, "category_id": 77, "iscrowd": 0, "bbox": [127, 507, 21, 9], "area": 129}, {"id": 9082268, "category_id": 84, "iscrowd": 0, "bbox": [84, 339, 70, 43], "area": 2375}, {"id": 4743534, "category_id": 109, "iscrowd": 0, "bbox": [0, 173, 178, 314], "area": 34172}, {"id": 3429490, "category_id": 118, "iscrowd": 0, "bbox": [0, 441, 469, 199], "area": 37104}, {"id": 9278622, "category_id": 130, "iscrowd": 0, "bbox": [151, 30, 125, 372], "area": 5511}, {"id": 8166310, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 469, 173], "area": 66474}, {"id": 1779760, "category_id": 189, "iscrowd": 0, "bbox": [123, 474, 163, 141], "area": 7898}, {"id": 1514782, "category_id": 190, "iscrowd": 0, "bbox": [280, 474, 189, 86], "area": 5091}, {"id": 8035238, "category_id": 199, "iscrowd": 0, "bbox": [0, 114, 469, 415], "area": 101036}, {"id": 2897733, "category_id": 200, "iscrowd": 0, "bbox": [407, 614, 62, 26], "area": 983}], "file_name": "000000367569.png", "image_id": 367569}, {"segments_info": [{"id": 5918290, "category_id": 1, "iscrowd": 0, "bbox": [38, 140, 7, 21], "area": 76}, {"id": 4734264, "category_id": 1, "iscrowd": 0, "bbox": [195, 155, 20, 29], "area": 414}, {"id": 7958383, "category_id": 1, "iscrowd": 0, "bbox": [396, 140, 5, 10], "area": 40}, {"id": 6052697, "category_id": 1, "iscrowd": 0, "bbox": [169, 159, 11, 18], "area": 134}, {"id": 5848369, "category_id": 1, "iscrowd": 0, "bbox": [335, 176, 28, 16], "area": 240}, {"id": 4865089, "category_id": 1, "iscrowd": 0, "bbox": [388, 140, 9, 10], "area": 70}, {"id": 5197908, "category_id": 1, "iscrowd": 0, "bbox": [249, 152, 24, 46], "area": 608}, {"id": 5323316, "category_id": 1, "iscrowd": 0, "bbox": [236, 151, 14, 46], "area": 437}, {"id": 3747116, "category_id": 1, "iscrowd": 0, "bbox": [43, 141, 9, 21], "area": 102}, {"id": 6575434, "category_id": 3, "iscrowd": 0, "bbox": [287, 167, 103, 73], "area": 5062}, {"id": 6510398, "category_id": 6, "iscrowd": 0, "bbox": [44, 126, 154, 67], "area": 7129}, {"id": 10064007, "category_id": 8, "iscrowd": 0, "bbox": [324, 150, 123, 60], "area": 4333}, {"id": 7828075, "category_id": 8, "iscrowd": 0, "bbox": [0, 143, 47, 55], "area": 2101}, {"id": 3093048, "category_id": 19, "iscrowd": 0, "bbox": [141, 149, 32, 60], "area": 685}, {"id": 5066056, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 450, 191], "area": 37323}, {"id": 11383219, "category_id": 149, "iscrowd": 0, "bbox": [0, 179, 450, 159], "area": 53296}, {"id": 10125163, "category_id": 151, "iscrowd": 0, "bbox": [20, 59, 243, 18], "area": 2020}, {"id": 3026746, "category_id": 171, "iscrowd": 0, "bbox": [238, 176, 62, 23], "area": 436}, {"id": 2502182, "category_id": 184, "iscrowd": 0, "bbox": [0, 48, 450, 194], "area": 9998}, {"id": 15647654, "category_id": 187, "iscrowd": 0, "bbox": [82, 0, 368, 101], "area": 19527}, {"id": 8819355, "category_id": 191, "iscrowd": 0, "bbox": [0, 211, 136, 59], "area": 3730}, {"id": 2510657, "category_id": 193, "iscrowd": 0, "bbox": [0, 156, 305, 72], "area": 1577}], "file_name": "000000367680.png", "image_id": 367680}, {"segments_info": [{"id": 6579822, "category_id": 1, "iscrowd": 0, "bbox": [92, 75, 127, 327], "area": 16439}, {"id": 3492960, "category_id": 19, "iscrowd": 0, "bbox": [143, 50, 405, 341], "area": 48428}, {"id": 2111797, "category_id": 184, "iscrowd": 0, "bbox": [0, 131, 640, 132], "area": 23970}, {"id": 2109738, "category_id": 185, "iscrowd": 0, "bbox": [178, 236, 105, 23], "area": 1727}, {"id": 16181986, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 217], "area": 88224}, {"id": 4820608, "category_id": 193, "iscrowd": 0, "bbox": [0, 240, 640, 187], "area": 93918}], "file_name": "000000367818.png", "image_id": 367818}, {"segments_info": [{"id": 2441579, "category_id": 7, "iscrowd": 0, "bbox": [71, 17, 562, 283], "area": 95322}, {"id": 6453130, "category_id": 125, "iscrowd": 0, "bbox": [82, 163, 558, 154], "area": 23325}, {"id": 6579307, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 185], "area": 21294}, {"id": 14729645, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 267, 132], "area": 25540}, {"id": 4418164, "category_id": 193, "iscrowd": 0, "bbox": [0, 156, 393, 161], "area": 34678}, {"id": 6843249, "category_id": 197, "iscrowd": 0, "bbox": [630, 0, 10, 314], "area": 2358}], "file_name": "000000368038.png", "image_id": 368038}, {"segments_info": [{"id": 7243183, "category_id": 1, "iscrowd": 0, "bbox": [17, 43, 368, 565], "area": 94418}, {"id": 11846622, "category_id": 70, "iscrowd": 0, "bbox": [58, 169, 393, 471], "area": 47043}, {"id": 2897597, "category_id": 90, "iscrowd": 0, "bbox": [242, 207, 15, 139], "area": 667}, {"id": 3630740, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 210, 618], "area": 80618}, {"id": 4614296, "category_id": 190, "iscrowd": 0, "bbox": [0, 540, 478, 100], "area": 9652}, {"id": 5206182, "category_id": 199, "iscrowd": 0, "bbox": [167, 0, 311, 445], "area": 55060}], "file_name": "000000368212.png", "image_id": 368212}, {"segments_info": [{"id": 5671587, "category_id": 1, "iscrowd": 0, "bbox": [1, 30, 344, 390], "area": 58143}, {"id": 6249599, "category_id": 87, "iscrowd": 0, "bbox": [289, 267, 73, 65], "area": 695}, {"id": 4141344, "category_id": 112, "iscrowd": 0, "bbox": [129, 0, 110, 253], "area": 12219}, {"id": 5790565, "category_id": 141, "iscrowd": 0, "bbox": [0, 342, 105, 84], "area": 5073}, {"id": 11509445, "category_id": 168, "iscrowd": 0, "bbox": [0, 0, 175, 170], "area": 20143}, {"id": 2502710, "category_id": 190, "iscrowd": 0, "bbox": [179, 251, 56, 63], "area": 1542}, {"id": 8553864, "category_id": 195, "iscrowd": 0, "bbox": [319, 17, 280, 310], "area": 7192}, {"id": 6313807, "category_id": 199, "iscrowd": 0, "bbox": [196, 0, 444, 223], "area": 53129}], "file_name": "000000368294.png", "image_id": 368294}, {"segments_info": [{"id": 10328726, "category_id": 3, "iscrowd": 0, "bbox": [76, 209, 89, 117], "area": 5250}, {"id": 6709596, "category_id": 3, "iscrowd": 0, "bbox": [1, 97, 123, 420], "area": 32387}, {"id": 8946298, "category_id": 3, "iscrowd": 0, "bbox": [252, 248, 43, 47], "area": 536}, {"id": 5655633, "category_id": 3, "iscrowd": 0, "bbox": [265, 203, 146, 262], "area": 28562}, {"id": 4344934, "category_id": 19, "iscrowd": 0, "bbox": [154, 219, 112, 270], "area": 16296}, {"id": 8553349, "category_id": 149, "iscrowd": 0, "bbox": [0, 289, 411, 351], "area": 88807}, {"id": 8299674, "category_id": 184, "iscrowd": 0, "bbox": [245, 239, 59, 18], "area": 356}, {"id": 15260359, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 411, 263], "area": 85966}], "file_name": "000000368335.png", "image_id": 368335}, {"segments_info": [{"id": 10722428, "category_id": 7, "iscrowd": 0, "bbox": [2, 13, 635, 328], "area": 178132}, {"id": 5067612, "category_id": 147, "iscrowd": 0, "bbox": [0, 144, 640, 336], "area": 109353}], "file_name": "000000368456.png", "image_id": 368456}, {"segments_info": [{"id": 4015980, "category_id": 62, "iscrowd": 0, "bbox": [156, 135, 171, 199], "area": 22091}, {"id": 10265248, "category_id": 65, "iscrowd": 0, "bbox": [254, 380, 386, 100], "area": 30680}, {"id": 6572344, "category_id": 72, "iscrowd": 0, "bbox": [447, 10, 193, 215], "area": 37805}, {"id": 10850177, "category_id": 72, "iscrowd": 0, "bbox": [0, 287, 269, 187], "area": 44134}, {"id": 6516083, "category_id": 84, "iscrowd": 0, "bbox": [24, 244, 18, 56], "area": 484}, {"id": 8752011, "category_id": 84, "iscrowd": 0, "bbox": [0, 111, 59, 12], "area": 473}, {"id": 7306115, "category_id": 84, "iscrowd": 0, "bbox": [19, 201, 39, 31], "area": 282}, {"id": 8553865, "category_id": 84, "iscrowd": 0, "bbox": [18, 158, 63, 65], "area": 389}, {"id": 7041909, "category_id": 84, "iscrowd": 0, "bbox": [13, 239, 19, 64], "area": 799}, {"id": 6646900, "category_id": 84, "iscrowd": 0, "bbox": [40, 233, 25, 56], "area": 905}, {"id": 8358806, "category_id": 112, "iscrowd": 0, "bbox": [332, 0, 100, 293], "area": 21210}, {"id": 3227481, "category_id": 118, "iscrowd": 0, "bbox": [91, 271, 330, 74], "area": 8184}, {"id": 3029836, "category_id": 156, "iscrowd": 0, "bbox": [413, 0, 149, 257], "area": 7739}, {"id": 16054005, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 121, 171], "area": 14919}, {"id": 1973020, "category_id": 189, "iscrowd": 0, "bbox": [371, 200, 269, 174], "area": 34165}, {"id": 6776939, "category_id": 195, "iscrowd": 0, "bbox": [0, 135, 136, 169], "area": 11728}, {"id": 12633285, "category_id": 199, "iscrowd": 0, "bbox": [106, 0, 534, 290], "area": 23155}, {"id": 5397868, "category_id": 200, "iscrowd": 0, "bbox": [240, 323, 400, 114], "area": 19153}], "file_name": "000000368684.png", "image_id": 368684}, {"segments_info": [{"id": 4284813, "category_id": 1, "iscrowd": 0, "bbox": [128, 0, 151, 71], "area": 5591}, {"id": 6189967, "category_id": 1, "iscrowd": 0, "bbox": [229, 3, 251, 316], "area": 59277}, {"id": 1911109, "category_id": 1, "iscrowd": 0, "bbox": [0, 6, 249, 395], "area": 65377}, {"id": 10007999, "category_id": 47, "iscrowd": 0, "bbox": [0, 262, 84, 201], "area": 13404}, {"id": 8753565, "category_id": 50, "iscrowd": 0, "bbox": [207, 323, 155, 39], "area": 1041}, {"id": 6324412, "category_id": 51, "iscrowd": 0, "bbox": [353, 431, 127, 101], "area": 6661}, {"id": 3032170, "category_id": 51, "iscrowd": 0, "bbox": [80, 411, 93, 78], "area": 5577}, {"id": 8565731, "category_id": 61, "iscrowd": 0, "bbox": [215, 335, 86, 58], "area": 3600}, {"id": 8626607, "category_id": 67, "iscrowd": 0, "bbox": [0, 293, 480, 347], "area": 122909}], "file_name": "000000368752.png", "image_id": 368752}, {"segments_info": [{"id": 5065294, "category_id": 16, "iscrowd": 0, "bbox": [248, 116, 39, 45], "area": 930}, {"id": 328965, "category_id": 27, "iscrowd": 0, "bbox": [128, 267, 37, 60], "area": 1633}, {"id": 2107694, "category_id": 28, "iscrowd": 0, "bbox": [181, 200, 15, 32], "area": 252}, {"id": 4147296, "category_id": 62, "iscrowd": 0, "bbox": [355, 288, 99, 185], "area": 7291}, {"id": 3422527, "category_id": 72, "iscrowd": 0, "bbox": [465, 226, 167, 146], "area": 22939}, {"id": 1448224, "category_id": 82, "iscrowd": 0, "bbox": [333, 121, 99, 93], "area": 5410}, {"id": 2371404, "category_id": 100, "iscrowd": 0, "bbox": [295, 375, 154, 105], "area": 11444}, {"id": 4149080, "category_id": 112, "iscrowd": 0, "bbox": [166, 86, 53, 204], "area": 6201}, {"id": 1646903, "category_id": 118, "iscrowd": 0, "bbox": [0, 402, 306, 78], "area": 18597}, {"id": 1977139, "category_id": 156, "iscrowd": 0, "bbox": [28, 65, 82, 48], "area": 2285}, {"id": 3951954, "category_id": 186, "iscrowd": 0, "bbox": [177, 0, 130, 34], "area": 3359}, {"id": 11713479, "category_id": 188, "iscrowd": 0, "bbox": [372, 0, 79, 116], "area": 8042}, {"id": 2634554, "category_id": 190, "iscrowd": 0, "bbox": [69, 287, 571, 193], "area": 24432}, {"id": 7241095, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 431], "area": 119523}], "file_name": "000000368900.png", "image_id": 368900}, {"segments_info": [{"id": 12174792, "category_id": 81, "iscrowd": 0, "bbox": [0, 98, 333, 157], "area": 26376}, {"id": 11385792, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 213, 125], "area": 19025}, {"id": 2237476, "category_id": 188, "iscrowd": 0, "bbox": [0, 159, 342, 321], "area": 75789}, {"id": 7965074, "category_id": 190, "iscrowd": 0, "bbox": [10, 263, 630, 217], "area": 55363}, {"id": 6390160, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 128474}], "file_name": "000000368940.png", "image_id": 368940}, {"segments_info": [{"id": 526603, "category_id": 1, "iscrowd": 0, "bbox": [485, 79, 155, 396], "area": 44563}, {"id": 395275, "category_id": 1, "iscrowd": 0, "bbox": [0, 197, 105, 283], "area": 21907}, {"id": 3227995, "category_id": 22, "iscrowd": 0, "bbox": [232, 191, 180, 224], "area": 23912}, {"id": 3819870, "category_id": 22, "iscrowd": 0, "bbox": [163, 200, 107, 166], "area": 11238}, {"id": 3954313, "category_id": 37, "iscrowd": 0, "bbox": [319, 344, 7, 18], "area": 85}, {"id": 1643797, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 110, 480], "area": 29010}, {"id": 724499, "category_id": 176, "iscrowd": 0, "bbox": [106, 0, 42, 480], "area": 16153}, {"id": 855833, "category_id": 177, "iscrowd": 0, "bbox": [106, 0, 66, 480], "area": 11839}, {"id": 13749708, "category_id": 184, "iscrowd": 0, "bbox": [164, 121, 288, 120], "area": 9549}, {"id": 16447736, "category_id": 187, "iscrowd": 0, "bbox": [163, 0, 346, 236], "area": 43921}, {"id": 11318978, "category_id": 191, "iscrowd": 0, "bbox": [166, 377, 346, 103], "area": 22028}, {"id": 9083043, "category_id": 194, "iscrowd": 0, "bbox": [157, 263, 332, 166], "area": 19134}, {"id": 5066584, "category_id": 197, "iscrowd": 0, "bbox": [198, 0, 442, 421], "area": 49392}], "file_name": "000000368961.png", "image_id": 368961}, {"segments_info": [{"id": 3425623, "category_id": 87, "iscrowd": 0, "bbox": [15, 182, 530, 259], "area": 49615}, {"id": 4618409, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 605, 480], "area": 125236}, {"id": 8948106, "category_id": 195, "iscrowd": 0, "bbox": [179, 0, 461, 480], "area": 116166}], "file_name": "000000368982.png", "image_id": 368982}, {"segments_info": [{"id": 2171173, "category_id": 1, "iscrowd": 0, "bbox": [134, 230, 291, 410], "area": 50242}, {"id": 3554368, "category_id": 22, "iscrowd": 0, "bbox": [0, 1, 425, 631], "area": 137813}, {"id": 526604, "category_id": 31, "iscrowd": 0, "bbox": [258, 339, 110, 294], "area": 4485}, {"id": 1521965, "category_id": 44, "iscrowd": 0, "bbox": [39, 548, 16, 51], "area": 644}, {"id": 1053461, "category_id": 190, "iscrowd": 0, "bbox": [40, 540, 184, 100], "area": 6391}, {"id": 5328196, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 425, 546], "area": 32978}], "file_name": "000000369037.png", "image_id": 369037}, {"segments_info": [{"id": 2041909, "category_id": 19, "iscrowd": 0, "bbox": [114, 174, 138, 201], "area": 14035}, {"id": 2107445, "category_id": 19, "iscrowd": 0, "bbox": [255, 173, 108, 195], "area": 10209}, {"id": 2768721, "category_id": 19, "iscrowd": 0, "bbox": [475, 190, 59, 160], "area": 5013}, {"id": 6514269, "category_id": 184, "iscrowd": 0, "bbox": [0, 184, 492, 57], "area": 8586}, {"id": 14800332, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 225], "area": 129526}, {"id": 3699564, "category_id": 193, "iscrowd": 0, "bbox": [0, 217, 640, 209], "area": 104607}], "file_name": "000000369081.png", "image_id": 369081}, {"segments_info": [{"id": 7300190, "category_id": 1, "iscrowd": 0, "bbox": [27, 0, 217, 600], "area": 61517}, {"id": 5006439, "category_id": 62, "iscrowd": 0, "bbox": [188, 71, 29, 85], "area": 768}, {"id": 2511716, "category_id": 62, "iscrowd": 0, "bbox": [341, 66, 12, 33], "area": 207}, {"id": 857896, "category_id": 62, "iscrowd": 0, "bbox": [277, 86, 77, 70], "area": 3648}, {"id": 2770771, "category_id": 62, "iscrowd": 0, "bbox": [212, 68, 16, 40], "area": 391}, {"id": 4480103, "category_id": 62, "iscrowd": 0, "bbox": [346, 60, 38, 151], "area": 1212}, {"id": 1450290, "category_id": 67, "iscrowd": 0, "bbox": [213, 103, 162, 111], "area": 4386}, {"id": 11381930, "category_id": 75, "iscrowd": 0, "bbox": [174, 303, 29, 27], "area": 462}, {"id": 12500416, "category_id": 75, "iscrowd": 0, "bbox": [190, 263, 63, 92], "area": 1351}, {"id": 8228751, "category_id": 109, "iscrowd": 0, "bbox": [145, 0, 250, 195], "area": 26625}, {"id": 8054004, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 94, 214], "area": 14182}, {"id": 3035776, "category_id": 118, "iscrowd": 0, "bbox": [0, 174, 395, 466], "area": 120038}], "file_name": "000000369310.png", "image_id": 369310}, {"segments_info": [{"id": 4675670, "category_id": 1, "iscrowd": 0, "bbox": [104, 99, 120, 258], "area": 6176}, {"id": 4672099, "category_id": 1, "iscrowd": 0, "bbox": [279, 131, 98, 187], "area": 5545}, {"id": 5727083, "category_id": 1, "iscrowd": 0, "bbox": [43, 67, 257, 395], "area": 30604}, {"id": 5478037, "category_id": 37, "iscrowd": 0, "bbox": [306, 101, 6, 5], "area": 22}, {"id": 6586717, "category_id": 43, "iscrowd": 0, "bbox": [290, 37, 59, 116], "area": 4327}, {"id": 10862251, "category_id": 145, "iscrowd": 0, "bbox": [0, 271, 377, 229], "area": 69678}, {"id": 3764250, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 377, 286], "area": 70341}], "file_name": "000000369323.png", "image_id": 369323}, {"segments_info": [{"id": 7767182, "category_id": 54, "iscrowd": 0, "bbox": [225, 69, 414, 226], "area": 51124}, {"id": 7174530, "category_id": 54, "iscrowd": 0, "bbox": [26, 203, 457, 273], "area": 98575}, {"id": 8821177, "category_id": 54, "iscrowd": 0, "bbox": [1, 6, 187, 47], "area": 5825}, {"id": 5730946, "category_id": 54, "iscrowd": 0, "bbox": [0, 44, 204, 169], "area": 27239}, {"id": 4757709, "category_id": 55, "iscrowd": 0, "bbox": [177, 0, 136, 81], "area": 3516}, {"id": 2262731, "category_id": 55, "iscrowd": 0, "bbox": [194, 23, 121, 100], "area": 7744}, {"id": 3427944, "category_id": 67, "iscrowd": 0, "bbox": [356, 1, 283, 127], "area": 23330}, {"id": 3817038, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 86, 309], "area": 3787}, {"id": 2376769, "category_id": 196, "iscrowd": 0, "bbox": [123, 137, 517, 343], "area": 38481}], "file_name": "000000369370.png", "image_id": 369370}, {"segments_info": [{"id": 6389392, "category_id": 1, "iscrowd": 0, "bbox": [392, 201, 30, 58], "area": 1184}, {"id": 5203821, "category_id": 1, "iscrowd": 0, "bbox": [210, 215, 26, 91], "area": 1104}, {"id": 5468028, "category_id": 1, "iscrowd": 0, "bbox": [241, 208, 28, 96], "area": 1562}, {"id": 7374720, "category_id": 1, "iscrowd": 0, "bbox": [311, 205, 30, 57], "area": 1206}, {"id": 6650760, "category_id": 1, "iscrowd": 0, "bbox": [378, 201, 21, 66], "area": 777}, {"id": 5466485, "category_id": 1, "iscrowd": 0, "bbox": [266, 214, 24, 93], "area": 1436}, {"id": 5004393, "category_id": 1, "iscrowd": 0, "bbox": [191, 218, 31, 86], "area": 1412}, {"id": 1844032, "category_id": 1, "iscrowd": 0, "bbox": [2, 0, 162, 475], "area": 47862}, {"id": 5400439, "category_id": 1, "iscrowd": 0, "bbox": [551, 193, 41, 135], "area": 2201}, {"id": 9676966, "category_id": 1, "iscrowd": 0, "bbox": [489, 229, 21, 43], "area": 645}, {"id": 5600906, "category_id": 1, "iscrowd": 0, "bbox": [437, 197, 30, 62], "area": 1196}, {"id": 3295350, "category_id": 1, "iscrowd": 0, "bbox": [577, 204, 46, 134], "area": 3504}, {"id": 9545115, "category_id": 3, "iscrowd": 0, "bbox": [544, 235, 17, 50], "area": 524}, {"id": 8680564, "category_id": 13, "iscrowd": 0, "bbox": [376, 137, 16, 28], "area": 342}, {"id": 3165033, "category_id": 20, "iscrowd": 0, "bbox": [465, 268, 30, 60], "area": 835}, {"id": 4089220, "category_id": 20, "iscrowd": 0, "bbox": [293, 269, 36, 59], "area": 1310}, {"id": 6194329, "category_id": 20, "iscrowd": 0, "bbox": [492, 270, 25, 41], "area": 639}, {"id": 1911115, "category_id": 20, "iscrowd": 0, "bbox": [159, 267, 22, 47], "area": 722}, {"id": 2773114, "category_id": 20, "iscrowd": 0, "bbox": [383, 269, 22, 52], "area": 560}, {"id": 4086648, "category_id": 20, "iscrowd": 0, "bbox": [386, 258, 64, 65], "area": 956}, {"id": 4483971, "category_id": 20, "iscrowd": 0, "bbox": [414, 265, 60, 59], "area": 1969}, {"id": 3758197, "category_id": 20, "iscrowd": 0, "bbox": [175, 268, 27, 44], "area": 577}, {"id": 6195623, "category_id": 20, "iscrowd": 0, "bbox": [312, 255, 26, 21], "area": 319}, {"id": 2109007, "category_id": 20, "iscrowd": 0, "bbox": [326, 266, 65, 54], "area": 1898}, {"id": 9019291, "category_id": 128, "iscrowd": 0, "bbox": [143, 84, 497, 229], "area": 50509}, {"id": 4745585, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 277], "area": 67229}, {"id": 15199210, "category_id": 187, "iscrowd": 0, "bbox": [568, 0, 72, 74], "area": 2217}, {"id": 3231597, "category_id": 194, "iscrowd": 0, "bbox": [107, 269, 533, 211], "area": 89146}, {"id": 10399397, "category_id": 197, "iscrowd": 0, "bbox": [267, 0, 311, 146], "area": 5199}], "file_name": "000000369442.png", "image_id": 369442}, {"segments_info": [{"id": 3025445, "category_id": 1, "iscrowd": 0, "bbox": [392, 0, 108, 375], "area": 29134}, {"id": 8289644, "category_id": 81, "iscrowd": 0, "bbox": [264, 148, 135, 17], "area": 1971}, {"id": 10329489, "category_id": 107, "iscrowd": 0, "bbox": [0, 138, 396, 177], "area": 17076}, {"id": 15988465, "category_id": 181, "iscrowd": 0, "bbox": [208, 0, 260, 103], "area": 24406}, {"id": 2963262, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 413, 375], "area": 52913}, {"id": 923418, "category_id": 190, "iscrowd": 0, "bbox": [100, 296, 314, 79], "area": 19989}, {"id": 9410188, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 478, 169], "area": 25688}], "file_name": "000000369503.png", "image_id": 369503}, {"segments_info": [{"id": 2763563, "category_id": 1, "iscrowd": 0, "bbox": [274, 0, 100, 81], "area": 4303}, {"id": 3550509, "category_id": 1, "iscrowd": 0, "bbox": [85, 29, 50, 45], "area": 762}, {"id": 5197652, "category_id": 1, "iscrowd": 0, "bbox": [107, 1, 82, 81], "area": 3004}, {"id": 1710618, "category_id": 1, "iscrowd": 0, "bbox": [162, 0, 43, 85], "area": 2145}, {"id": 4996155, "category_id": 1, "iscrowd": 0, "bbox": [55, 0, 42, 28], "area": 600}, {"id": 5984075, "category_id": 18, "iscrowd": 0, "bbox": [0, 116, 215, 276], "area": 21184}, {"id": 6581725, "category_id": 34, "iscrowd": 0, "bbox": [160, 153, 70, 37], "area": 1390}, {"id": 5731945, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 143631}], "file_name": "000000369541.png", "image_id": 369541}, {"segments_info": [{"id": 10659499, "category_id": 1, "iscrowd": 0, "bbox": [412, 173, 27, 42], "area": 532}, {"id": 8620176, "category_id": 1, "iscrowd": 0, "bbox": [325, 167, 22, 57], "area": 912}, {"id": 5132622, "category_id": 1, "iscrowd": 0, "bbox": [277, 176, 22, 32], "area": 301}, {"id": 3420724, "category_id": 1, "iscrowd": 0, "bbox": [445, 175, 11, 38], "area": 254}, {"id": 10201276, "category_id": 1, "iscrowd": 0, "bbox": [508, 184, 14, 27], "area": 286}, {"id": 8295328, "category_id": 1, "iscrowd": 0, "bbox": [60, 188, 27, 41], "area": 791}, {"id": 5593476, "category_id": 7, "iscrowd": 0, "bbox": [3, 91, 636, 323], "area": 129248}, {"id": 11057091, "category_id": 85, "iscrowd": 0, "bbox": [607, 129, 17, 12], "area": 182}, {"id": 8360616, "category_id": 147, "iscrowd": 0, "bbox": [0, 250, 640, 179], "area": 63552}, {"id": 12240843, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 640, 149], "area": 44196}, {"id": 15854553, "category_id": 187, "iscrowd": 0, "bbox": [441, 0, 86, 21], "area": 1548}, {"id": 11975614, "category_id": 197, "iscrowd": 0, "bbox": [100, 0, 540, 109], "area": 30451}], "file_name": "000000369675.png", "image_id": 369675}, {"segments_info": [{"id": 3552304, "category_id": 3, "iscrowd": 0, "bbox": [236, 184, 190, 77], "area": 5178}, {"id": 3880501, "category_id": 3, "iscrowd": 0, "bbox": [116, 220, 138, 49], "area": 4986}, {"id": 4737245, "category_id": 13, "iscrowd": 0, "bbox": [256, 67, 63, 64], "area": 3238}, {"id": 4146248, "category_id": 14, "iscrowd": 0, "bbox": [274, 181, 19, 25], "area": 320}, {"id": 7502203, "category_id": 14, "iscrowd": 0, "bbox": [234, 220, 45, 51], "area": 1158}, {"id": 3159348, "category_id": 14, "iscrowd": 0, "bbox": [151, 315, 55, 111], "area": 4034}, {"id": 7238771, "category_id": 14, "iscrowd": 0, "bbox": [236, 260, 39, 80], "area": 2187}, {"id": 3684921, "category_id": 14, "iscrowd": 0, "bbox": [314, 189, 8, 16], "area": 79}, {"id": 7303537, "category_id": 14, "iscrowd": 0, "bbox": [268, 202, 23, 48], "area": 730}, {"id": 2896432, "category_id": 14, "iscrowd": 0, "bbox": [102, 413, 105, 211], "area": 14549}, {"id": 3694449, "category_id": 130, "iscrowd": 0, "bbox": [388, 133, 24, 22], "area": 347}, {"id": 7701651, "category_id": 149, "iscrowd": 0, "bbox": [0, 257, 239, 337], "area": 32060}, {"id": 4150880, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 426, 613], "area": 62829}, {"id": 16380895, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 332, 139], "area": 28863}, {"id": 8886954, "category_id": 191, "iscrowd": 0, "bbox": [0, 407, 159, 233], "area": 947}, {"id": 3239271, "category_id": 193, "iscrowd": 0, "bbox": [0, 206, 426, 434], "area": 99132}], "file_name": "000000369751.png", "image_id": 369751}, {"segments_info": [{"id": 5990518, "category_id": 58, "iscrowd": 0, "bbox": [205, 300, 138, 53], "area": 5022}, {"id": 4211039, "category_id": 59, "iscrowd": 0, "bbox": [108, 209, 208, 37], "area": 5297}, {"id": 14278374, "category_id": 59, "iscrowd": 0, "bbox": [40, 121, 260, 85], "area": 14524}, {"id": 9283788, "category_id": 59, "iscrowd": 0, "bbox": [579, 141, 61, 119], "area": 5828}, {"id": 8692163, "category_id": 59, "iscrowd": 0, "bbox": [287, 134, 243, 85], "area": 13734}, {"id": 9668211, "category_id": 107, "iscrowd": 0, "bbox": [0, 31, 640, 122], "area": 38516}, {"id": 3024424, "category_id": 156, "iscrowd": 0, "bbox": [0, 94, 640, 341], "area": 96395}, {"id": 6381163, "category_id": 195, "iscrowd": 0, "bbox": [88, 11, 552, 383], "area": 6584}, {"id": 5330791, "category_id": 196, "iscrowd": 0, "bbox": [52, 120, 588, 247], "area": 8036}, {"id": 12557413, "category_id": 199, "iscrowd": 0, "bbox": [377, 0, 164, 20], "area": 1061}], "file_name": "000000369757.png", "image_id": 369757}, {"segments_info": [{"id": 16037388, "category_id": 48, "iscrowd": 0, "bbox": [0, 166, 341, 73], "area": 12958}, {"id": 11317407, "category_id": 51, "iscrowd": 0, "bbox": [2, 66, 355, 409], "area": 66658}, {"id": 10724004, "category_id": 51, "iscrowd": 0, "bbox": [347, 5, 293, 342], "area": 90767}, {"id": 8235200, "category_id": 54, "iscrowd": 0, "bbox": [0, 50, 296, 211], "area": 21145}, {"id": 6061919, "category_id": 56, "iscrowd": 0, "bbox": [295, 254, 31, 25], "area": 275}, {"id": 2567460, "category_id": 56, "iscrowd": 0, "bbox": [144, 342, 13, 19], "area": 162}, {"id": 4613717, "category_id": 56, "iscrowd": 0, "bbox": [212, 317, 46, 32], "area": 784}, {"id": 5271127, "category_id": 56, "iscrowd": 0, "bbox": [127, 385, 81, 61], "area": 3633}, {"id": 9743483, "category_id": 56, "iscrowd": 0, "bbox": [6, 363, 26, 21], "area": 263}, {"id": 7700111, "category_id": 67, "iscrowd": 0, "bbox": [2, 1, 638, 474], "area": 87838}, {"id": 8290704, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 9332}, {"id": 9475482, "category_id": 196, "iscrowd": 0, "bbox": [0, 217, 6, 142], "area": 553}], "file_name": "000000369771.png", "image_id": 369771}, {"segments_info": [{"id": 5460565, "category_id": 1, "iscrowd": 0, "bbox": [167, 518, 8, 24], "area": 146}, {"id": 2039842, "category_id": 1, "iscrowd": 0, "bbox": [145, 513, 8, 26], "area": 110}, {"id": 1842463, "category_id": 1, "iscrowd": 0, "bbox": [388, 518, 6, 9], "area": 31}, {"id": 5194587, "category_id": 1, "iscrowd": 0, "bbox": [158, 518, 5, 24], "area": 79}, {"id": 5527666, "category_id": 1, "iscrowd": 0, "bbox": [184, 516, 7, 18], "area": 56}, {"id": 2434347, "category_id": 1, "iscrowd": 0, "bbox": [153, 516, 7, 23], "area": 100}, {"id": 7302256, "category_id": 1, "iscrowd": 0, "bbox": [119, 515, 11, 28], "area": 191}, {"id": 4668294, "category_id": 3, "iscrowd": 0, "bbox": [388, 522, 56, 39], "area": 1566}, {"id": 8618112, "category_id": 3, "iscrowd": 0, "bbox": [221, 515, 19, 15], "area": 219}, {"id": 4144702, "category_id": 3, "iscrowd": 0, "bbox": [243, 516, 33, 26], "area": 689}, {"id": 4276798, "category_id": 3, "iscrowd": 0, "bbox": [323, 521, 73, 48], "area": 2906}, {"id": 6710632, "category_id": 3, "iscrowd": 0, "bbox": [209, 514, 18, 15], "area": 85}, {"id": 5789799, "category_id": 6, "iscrowd": 0, "bbox": [306, 486, 57, 37], "area": 1841}, {"id": 10660529, "category_id": 8, "iscrowd": 0, "bbox": [191, 496, 18, 32], "area": 423}, {"id": 4736839, "category_id": 8, "iscrowd": 0, "bbox": [461, 497, 178, 135], "area": 17949}, {"id": 2959167, "category_id": 31, "iscrowd": 0, "bbox": [155, 527, 3, 6], "area": 16}, {"id": 3418924, "category_id": 31, "iscrowd": 0, "bbox": [119, 524, 5, 7], "area": 27}, {"id": 11710136, "category_id": 92, "iscrowd": 0, "bbox": [135, 33, 139, 296], "area": 32929}, {"id": 6054254, "category_id": 149, "iscrowd": 0, "bbox": [181, 520, 459, 117], "area": 21799}, {"id": 4147276, "category_id": 171, "iscrowd": 0, "bbox": [0, 520, 121, 49], "area": 1585}, {"id": 8158072, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 590], "area": 193113}, {"id": 15127747, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 505], "area": 45584}, {"id": 6383728, "category_id": 191, "iscrowd": 0, "bbox": [35, 537, 228, 100], "area": 11766}, {"id": 2702135, "category_id": 193, "iscrowd": 0, "bbox": [0, 577, 123, 60], "area": 4831}, {"id": 7631993, "category_id": 197, "iscrowd": 0, "bbox": [118, 357, 522, 184], "area": 38784}], "file_name": "000000369812.png", "image_id": 369812}, {"segments_info": [{"id": 5398650, "category_id": 86, "iscrowd": 0, "bbox": [232, 268, 30, 46], "area": 1025}, {"id": 5003123, "category_id": 86, "iscrowd": 0, "bbox": [112, 263, 37, 59], "area": 1348}, {"id": 5593185, "category_id": 86, "iscrowd": 0, "bbox": [493, 250, 11, 27], "area": 154}, {"id": 6055026, "category_id": 86, "iscrowd": 0, "bbox": [560, 200, 55, 111], "area": 3622}, {"id": 4012343, "category_id": 86, "iscrowd": 0, "bbox": [499, 214, 54, 100], "area": 4108}, {"id": 6716814, "category_id": 86, "iscrowd": 0, "bbox": [353, 244, 46, 86], "area": 2786}, {"id": 5202017, "category_id": 86, "iscrowd": 0, "bbox": [537, 261, 20, 50], "area": 587}, {"id": 6254220, "category_id": 86, "iscrowd": 0, "bbox": [15, 263, 39, 66], "area": 1627}, {"id": 6318209, "category_id": 86, "iscrowd": 0, "bbox": [221, 164, 34, 50], "area": 1119}, {"id": 6453377, "category_id": 86, "iscrowd": 0, "bbox": [393, 178, 69, 146], "area": 7123}, {"id": 5858686, "category_id": 86, "iscrowd": 0, "bbox": [198, 270, 39, 49], "area": 1172}, {"id": 5661053, "category_id": 86, "iscrowd": 0, "bbox": [146, 271, 42, 50], "area": 1271}, {"id": 4475745, "category_id": 86, "iscrowd": 0, "bbox": [271, 187, 61, 149], "area": 6074}, {"id": 6186359, "category_id": 86, "iscrowd": 1, "bbox": [43, 147, 97, 76], "area": 4816}, {"id": 9200463, "category_id": 166, "iscrowd": 0, "bbox": [342, 55, 298, 204], "area": 39249}, {"id": 11117984, "category_id": 175, "iscrowd": 0, "bbox": [356, 0, 60, 61], "area": 3236}, {"id": 5656651, "category_id": 181, "iscrowd": 0, "bbox": [485, 0, 78, 77], "area": 4606}, {"id": 6119007, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 365, 62], "area": 21679}, {"id": 11450815, "category_id": 191, "iscrowd": 0, "bbox": [0, 276, 578, 80], "area": 12088}, {"id": 9086373, "category_id": 193, "iscrowd": 0, "bbox": [56, 284, 584, 72], "area": 16771}, {"id": 13357525, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 167], "area": 34789}], "file_name": "000000370042.png", "image_id": 370042}, {"segments_info": [{"id": 5327943, "category_id": 1, "iscrowd": 0, "bbox": [0, 195, 48, 66], "area": 1782}, {"id": 8160142, "category_id": 2, "iscrowd": 0, "bbox": [63, 107, 381, 228], "area": 49331}, {"id": 7298370, "category_id": 14, "iscrowd": 0, "bbox": [181, 18, 48, 87], "area": 3753}, {"id": 7101248, "category_id": 14, "iscrowd": 0, "bbox": [217, 18, 55, 86], "area": 3502}, {"id": 5398147, "category_id": 171, "iscrowd": 0, "bbox": [39, 0, 254, 26], "area": 4421}, {"id": 10594217, "category_id": 191, "iscrowd": 0, "bbox": [0, 155, 500, 220], "area": 55600}, {"id": 7765891, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 186], "area": 65654}], "file_name": "000000370208.png", "image_id": 370208}, {"segments_info": [{"id": 2700089, "category_id": 1, "iscrowd": 0, "bbox": [79, 202, 114, 339], "area": 24725}, {"id": 9014669, "category_id": 1, "iscrowd": 0, "bbox": [0, 159, 66, 241], "area": 10307}, {"id": 3291962, "category_id": 1, "iscrowd": 0, "bbox": [296, 201, 177, 431], "area": 46686}, {"id": 4874110, "category_id": 37, "iscrowd": 0, "bbox": [147, 430, 114, 106], "area": 6745}, {"id": 7167309, "category_id": 51, "iscrowd": 0, "bbox": [263, 225, 15, 6], "area": 67}, {"id": 8617324, "category_id": 51, "iscrowd": 0, "bbox": [218, 227, 10, 7], "area": 56}, {"id": 6247236, "category_id": 51, "iscrowd": 0, "bbox": [218, 237, 9, 9], "area": 78}, {"id": 9138268, "category_id": 51, "iscrowd": 0, "bbox": [458, 180, 22, 14], "area": 249}, {"id": 5989210, "category_id": 51, "iscrowd": 0, "bbox": [247, 242, 15, 4], "area": 40}, {"id": 1917268, "category_id": 100, "iscrowd": 0, "bbox": [249, 464, 73, 43], "area": 2077}, {"id": 5993337, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 480, 520], "area": 105678}, {"id": 3894136, "category_id": 190, "iscrowd": 0, "bbox": [0, 497, 420, 143], "area": 32874}, {"id": 11582388, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 202, 525], "area": 50508}], "file_name": "000000370270.png", "image_id": 370270}, {"segments_info": [{"id": 7432034, "category_id": 1, "iscrowd": 0, "bbox": [187, 88, 189, 545], "area": 67016}, {"id": 13021564, "category_id": 37, "iscrowd": 0, "bbox": [333, 312, 55, 64], "area": 2692}, {"id": 11499565, "category_id": 39, "iscrowd": 0, "bbox": [10, 193, 263, 113], "area": 7743}, {"id": 3887687, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 189], "area": 46110}, {"id": 7515037, "category_id": 193, "iscrowd": 0, "bbox": [0, 91, 427, 549], "area": 104412}, {"id": 8230048, "category_id": 194, "iscrowd": 0, "bbox": [0, 115, 427, 76], "area": 5792}], "file_name": "000000370375.png", "image_id": 370375}, {"segments_info": [{"id": 1053203, "category_id": 27, "iscrowd": 0, "bbox": [240, 155, 149, 200], "area": 21753}, {"id": 1383454, "category_id": 33, "iscrowd": 0, "bbox": [384, 156, 132, 245], "area": 21908}, {"id": 11056570, "category_id": 65, "iscrowd": 0, "bbox": [0, 170, 110, 310], "area": 24124}, {"id": 14736092, "category_id": 73, "iscrowd": 0, "bbox": [86, 237, 163, 165], "area": 13981}, {"id": 9416381, "category_id": 84, "iscrowd": 0, "bbox": [138, 96, 76, 20], "area": 439}, {"id": 13821934, "category_id": 84, "iscrowd": 0, "bbox": [74, 34, 60, 40], "area": 1624}, {"id": 15462897, "category_id": 84, "iscrowd": 0, "bbox": [87, 79, 48, 20], "area": 550}, {"id": 11056320, "category_id": 84, "iscrowd": 0, "bbox": [78, 51, 62, 36], "area": 874}, {"id": 13293529, "category_id": 84, "iscrowd": 0, "bbox": [83, 92, 55, 27], "area": 905}, {"id": 9481663, "category_id": 84, "iscrowd": 0, "bbox": [135, 80, 78, 19], "area": 724}, {"id": 3225925, "category_id": 84, "iscrowd": 0, "bbox": [197, 277, 50, 48], "area": 1213}, {"id": 9415868, "category_id": 84, "iscrowd": 0, "bbox": [137, 88, 75, 20], "area": 516}, {"id": 13228768, "category_id": 93, "iscrowd": 0, "bbox": [0, 272, 2, 124], "area": 188}, {"id": 1715516, "category_id": 100, "iscrowd": 0, "bbox": [392, 122, 51, 117], "area": 2511}, {"id": 5006970, "category_id": 188, "iscrowd": 0, "bbox": [19, 0, 401, 305], "area": 67289}, {"id": 5208194, "category_id": 199, "iscrowd": 0, "bbox": [508, 0, 132, 345], "area": 28647}, {"id": 4682119, "category_id": 200, "iscrowd": 0, "bbox": [95, 230, 545, 250], "area": 76197}], "file_name": "000000370478.png", "image_id": 370478}, {"segments_info": [{"id": 4672862, "category_id": 1, "iscrowd": 0, "bbox": [41, 54, 35, 59], "area": 939}, {"id": 4155266, "category_id": 1, "iscrowd": 0, "bbox": [348, 127, 73, 380], "area": 21225}, {"id": 2371132, "category_id": 1, "iscrowd": 0, "bbox": [247, 135, 61, 358], "area": 8578}, {"id": 2370097, "category_id": 1, "iscrowd": 0, "bbox": [0, 145, 70, 359], "area": 14967}, {"id": 3690363, "category_id": 1, "iscrowd": 0, "bbox": [137, 358, 19, 105], "area": 1091}, {"id": 5270167, "category_id": 1, "iscrowd": 0, "bbox": [237, 155, 19, 38], "area": 463}, {"id": 2767454, "category_id": 1, "iscrowd": 0, "bbox": [62, 202, 109, 305], "area": 12721}, {"id": 3357072, "category_id": 1, "iscrowd": 0, "bbox": [293, 118, 30, 42], "area": 893}, {"id": 4935765, "category_id": 1, "iscrowd": 0, "bbox": [159, 110, 118, 494], "area": 40533}, {"id": 4149096, "category_id": 1, "iscrowd": 0, "bbox": [45, 146, 60, 270], "area": 3355}, {"id": 2765425, "category_id": 1, "iscrowd": 0, "bbox": [306, 155, 70, 322], "area": 12142}, {"id": 3818317, "category_id": 1, "iscrowd": 0, "bbox": [337, 59, 31, 52], "area": 894}, {"id": 2700090, "category_id": 1, "iscrowd": 0, "bbox": [276, 163, 57, 300], "area": 6856}, {"id": 4805221, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 405, 500], "area": 24451}, {"id": 1579812, "category_id": 27, "iscrowd": 0, "bbox": [141, 217, 28, 90], "area": 1272}, {"id": 6976614, "category_id": 28, "iscrowd": 0, "bbox": [83, 54, 218, 166], "area": 15956}, {"id": 2764337, "category_id": 31, "iscrowd": 0, "bbox": [296, 282, 23, 59], "area": 961}, {"id": 1908513, "category_id": 31, "iscrowd": 0, "bbox": [56, 263, 19, 77], "area": 1093}, {"id": 2171425, "category_id": 31, "iscrowd": 0, "bbox": [18, 315, 37, 31], "area": 811}, {"id": 7949876, "category_id": 31, "iscrowd": 0, "bbox": [90, 265, 61, 93], "area": 4500}, {"id": 6909061, "category_id": 161, "iscrowd": 0, "bbox": [0, 0, 421, 227], "area": 29753}, {"id": 9018027, "category_id": 191, "iscrowd": 0, "bbox": [0, 319, 421, 321], "area": 61214}], "file_name": "000000370486.png", "image_id": 370486}, {"segments_info": [{"id": 8473906, "category_id": 1, "iscrowd": 0, "bbox": [348, 111, 150, 218], "area": 22639}, {"id": 2501024, "category_id": 1, "iscrowd": 0, "bbox": [3, 49, 189, 277], "area": 35547}, {"id": 1272232, "category_id": 1, "iscrowd": 0, "bbox": [160, 90, 191, 236], "area": 28330}, {"id": 4626912, "category_id": 60, "iscrowd": 0, "bbox": [45, 41, 34, 27], "area": 698}, {"id": 3895240, "category_id": 60, "iscrowd": 0, "bbox": [448, 139, 28, 11], "area": 233}, {"id": 1910637, "category_id": 60, "iscrowd": 0, "bbox": [478, 119, 22, 11], "area": 177}, {"id": 11459065, "category_id": 60, "iscrowd": 0, "bbox": [139, 126, 38, 23], "area": 499}, {"id": 4878541, "category_id": 60, "iscrowd": 0, "bbox": [331, 45, 25, 13], "area": 262}, {"id": 1340868, "category_id": 60, "iscrowd": 0, "bbox": [255, 40, 35, 24], "area": 517}, {"id": 3236531, "category_id": 60, "iscrowd": 0, "bbox": [425, 51, 25, 13], "area": 252}, {"id": 6324692, "category_id": 60, "iscrowd": 0, "bbox": [343, 64, 25, 13], "area": 240}, {"id": 6720738, "category_id": 60, "iscrowd": 0, "bbox": [367, 57, 28, 14], "area": 295}, {"id": 4758756, "category_id": 60, "iscrowd": 0, "bbox": [209, 60, 42, 25], "area": 720}, {"id": 3512047, "category_id": 60, "iscrowd": 0, "bbox": [156, 49, 25, 11], "area": 236}, {"id": 5482737, "category_id": 60, "iscrowd": 0, "bbox": [220, 37, 36, 26], "area": 745}, {"id": 4753867, "category_id": 60, "iscrowd": 1, "bbox": [0, 0, 489, 291], "area": 16198}, {"id": 6582928, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 500, 245], "area": 38398}, {"id": 11047835, "category_id": 195, "iscrowd": 0, "bbox": [348, 33, 88, 299], "area": 1693}, {"id": 6455453, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 53], "area": 13439}], "file_name": "000000370677.png", "image_id": 370677}, {"segments_info": [{"id": 4213067, "category_id": 1, "iscrowd": 0, "bbox": [265, 205, 91, 165], "area": 9798}, {"id": 2383474, "category_id": 28, "iscrowd": 0, "bbox": [132, 143, 94, 205], "area": 7221}, {"id": 4479854, "category_id": 28, "iscrowd": 0, "bbox": [66, 150, 94, 280], "area": 3990}, {"id": 3624820, "category_id": 28, "iscrowd": 0, "bbox": [197, 122, 19, 60], "area": 733}, {"id": 3102945, "category_id": 28, "iscrowd": 0, "bbox": [560, 273, 20, 156], "area": 1583}, {"id": 5663600, "category_id": 28, "iscrowd": 0, "bbox": [58, 139, 43, 290], "area": 3795}, {"id": 4866364, "category_id": 28, "iscrowd": 0, "bbox": [601, 280, 16, 112], "area": 1139}, {"id": 4608351, "category_id": 28, "iscrowd": 0, "bbox": [235, 122, 56, 279], "area": 5948}, {"id": 6314398, "category_id": 28, "iscrowd": 0, "bbox": [504, 220, 23, 62], "area": 274}, {"id": 3028299, "category_id": 28, "iscrowd": 0, "bbox": [191, 163, 50, 160], "area": 3892}, {"id": 6255226, "category_id": 28, "iscrowd": 0, "bbox": [497, 211, 25, 225], "area": 2084}, {"id": 4937316, "category_id": 28, "iscrowd": 0, "bbox": [226, 103, 26, 221], "area": 2345}, {"id": 3895624, "category_id": 28, "iscrowd": 0, "bbox": [567, 214, 36, 205], "area": 1738}, {"id": 4496573, "category_id": 28, "iscrowd": 0, "bbox": [509, 213, 26, 217], "area": 2522}, {"id": 5923430, "category_id": 28, "iscrowd": 1, "bbox": [0, 83, 636, 367], "area": 44792}, {"id": 8879000, "category_id": 100, "iscrowd": 0, "bbox": [406, 17, 31, 108], "area": 1963}, {"id": 4476516, "category_id": 118, "iscrowd": 0, "bbox": [378, 414, 262, 59], "area": 6696}, {"id": 7241866, "category_id": 133, "iscrowd": 0, "bbox": [281, 34, 100, 351], "area": 13208}, {"id": 7437182, "category_id": 181, "iscrowd": 0, "bbox": [50, 0, 590, 126], "area": 31310}, {"id": 5657969, "category_id": 190, "iscrowd": 0, "bbox": [0, 432, 640, 48], "area": 14620}, {"id": 14409182, "category_id": 195, "iscrowd": 0, "bbox": [235, 374, 137, 85], "area": 8754}, {"id": 5529704, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 455], "area": 75270}, {"id": 9477279, "category_id": 199, "iscrowd": 0, "bbox": [17, 0, 539, 99], "area": 15473}], "file_name": "000000370711.png", "image_id": 370711}, {"segments_info": [{"id": 4868682, "category_id": 1, "iscrowd": 0, "bbox": [157, 0, 208, 186], "area": 31133}, {"id": 4013373, "category_id": 41, "iscrowd": 0, "bbox": [111, 170, 184, 261], "area": 26804}, {"id": 7829367, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 540, 640], "area": 268154}, {"id": 5723991, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 176, 58], "area": 7684}], "file_name": "000000370813.png", "image_id": 370813}, {"segments_info": [{"id": 3290445, "category_id": 64, "iscrowd": 0, "bbox": [0, 209, 28, 67], "area": 913}, {"id": 12370628, "category_id": 70, "iscrowd": 0, "bbox": [1, 592, 70, 48], "area": 2789}, {"id": 12436425, "category_id": 81, "iscrowd": 0, "bbox": [215, 453, 255, 131], "area": 18799}, {"id": 3356230, "category_id": 118, "iscrowd": 0, "bbox": [21, 552, 203, 88], "area": 11451}, {"id": 13884900, "category_id": 130, "iscrowd": 0, "bbox": [401, 146, 17, 20], "area": 192}, {"id": 8688545, "category_id": 186, "iscrowd": 0, "bbox": [14, 0, 426, 86], "area": 18408}, {"id": 7106687, "category_id": 188, "iscrowd": 0, "bbox": [0, 33, 472, 607], "area": 191537}, {"id": 9873331, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 472, 487], "area": 56508}], "file_name": "000000370818.png", "image_id": 370818}, {"segments_info": [{"id": 4478049, "category_id": 88, "iscrowd": 0, "bbox": [589, 386, 51, 82], "area": 2814}, {"id": 8106661, "category_id": 88, "iscrowd": 0, "bbox": [2, 199, 325, 274], "area": 59149}, {"id": 9029550, "category_id": 88, "iscrowd": 0, "bbox": [146, 41, 176, 229], "area": 25893}, {"id": 9025949, "category_id": 88, "iscrowd": 0, "bbox": [293, 46, 304, 427], "area": 94114}], "file_name": "000000370900.png", "image_id": 370900}, {"segments_info": [{"id": 4282470, "category_id": 198, "iscrowd": 0, "bbox": [49, 0, 533, 480], "area": 99417}, {"id": 11453906, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 177323}], "file_name": "000000370999.png", "image_id": 370999}, {"segments_info": [{"id": 12302254, "category_id": 1, "iscrowd": 0, "bbox": [462, 183, 51, 97], "area": 1879}, {"id": 11307641, "category_id": 1, "iscrowd": 0, "bbox": [51, 161, 52, 103], "area": 1432}, {"id": 11244170, "category_id": 1, "iscrowd": 0, "bbox": [85, 153, 45, 166], "area": 2993}, {"id": 6050383, "category_id": 27, "iscrowd": 0, "bbox": [22, 321, 46, 32], "area": 876}, {"id": 7984581, "category_id": 37, "iscrowd": 0, "bbox": [586, 151, 9, 6], "area": 40}, {"id": 12829357, "category_id": 43, "iscrowd": 0, "bbox": [131, 208, 30, 19], "area": 230}, {"id": 10726807, "category_id": 43, "iscrowd": 0, "bbox": [512, 175, 25, 11], "area": 180}, {"id": 13161422, "category_id": 43, "iscrowd": 0, "bbox": [125, 223, 50, 24], "area": 609}, {"id": 12632513, "category_id": 44, "iscrowd": 0, "bbox": [65, 324, 13, 32], "area": 276}, {"id": 10997700, "category_id": 138, "iscrowd": 0, "bbox": [68, 205, 572, 161], "area": 61956}, {"id": 11524311, "category_id": 145, "iscrowd": 0, "bbox": [0, 187, 640, 241], "area": 55941}, {"id": 15061166, "category_id": 168, "iscrowd": 0, "bbox": [96, 220, 54, 55], "area": 1068}, {"id": 5073757, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 209], "area": 101608}, {"id": 8685126, "category_id": 199, "iscrowd": 0, "bbox": [131, 126, 509, 136], "area": 42915}], "file_name": "000000371042.png", "image_id": 371042}, {"segments_info": [{"id": 4308448, "category_id": 52, "iscrowd": 0, "bbox": [160, 67, 31, 34], "area": 603}, {"id": 3583169, "category_id": 52, "iscrowd": 0, "bbox": [315, 22, 80, 68], "area": 2335}, {"id": 3658470, "category_id": 52, "iscrowd": 0, "bbox": [53, 25, 111, 81], "area": 3864}, {"id": 1539742, "category_id": 52, "iscrowd": 0, "bbox": [0, 100, 53, 125], "area": 3769}, {"id": 5621469, "category_id": 52, "iscrowd": 0, "bbox": [190, 72, 74, 33], "area": 1241}, {"id": 3315121, "category_id": 52, "iscrowd": 0, "bbox": [142, 98, 55, 32], "area": 942}, {"id": 905705, "category_id": 52, "iscrowd": 0, "bbox": [1, 51, 34, 44], "area": 922}, {"id": 4101548, "category_id": 52, "iscrowd": 0, "bbox": [270, 31, 45, 50], "area": 1270}, {"id": 4310743, "category_id": 52, "iscrowd": 0, "bbox": [454, 30, 26, 79], "area": 941}, {"id": 2141383, "category_id": 52, "iscrowd": 0, "bbox": [29, 37, 98, 63], "area": 3025}, {"id": 4436947, "category_id": 52, "iscrowd": 0, "bbox": [177, 71, 38, 27], "area": 485}, {"id": 3759725, "category_id": 122, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 233407}, {"id": 1185561, "category_id": 189, "iscrowd": 0, "bbox": [108, 0, 256, 76], "area": 6029}, {"id": 6314845, "category_id": 195, "iscrowd": 0, "bbox": [360, 0, 60, 28], "area": 1189}], "file_name": "000000371472.png", "image_id": 371472}, {"segments_info": [{"id": 3421751, "category_id": 1, "iscrowd": 0, "bbox": [34, 52, 309, 523], "area": 65444}, {"id": 2638698, "category_id": 64, "iscrowd": 0, "bbox": [219, 15, 56, 348], "area": 8041}, {"id": 8952744, "category_id": 70, "iscrowd": 0, "bbox": [1, 193, 54, 260], "area": 8698}, {"id": 11845057, "category_id": 70, "iscrowd": 0, "bbox": [208, 159, 286, 431], "area": 60440}, {"id": 5734307, "category_id": 118, "iscrowd": 0, "bbox": [0, 467, 259, 173], "area": 29984}, {"id": 7508136, "category_id": 176, "iscrowd": 0, "bbox": [0, 92, 512, 459], "area": 61328}, {"id": 3496017, "category_id": 184, "iscrowd": 0, "bbox": [23, 0, 365, 129], "area": 8496}, {"id": 8037314, "category_id": 190, "iscrowd": 0, "bbox": [0, 331, 493, 309], "area": 31299}, {"id": 10135725, "category_id": 199, "iscrowd": 0, "bbox": [85, 0, 427, 162], "area": 35661}], "file_name": "000000371529.png", "image_id": 371529}, {"segments_info": [{"id": 6769735, "category_id": 1, "iscrowd": 0, "bbox": [348, 139, 33, 82], "area": 1716}, {"id": 8285036, "category_id": 1, "iscrowd": 0, "bbox": [29, 199, 120, 36], "area": 2683}, {"id": 3554886, "category_id": 1, "iscrowd": 0, "bbox": [561, 183, 47, 37], "area": 1074}, {"id": 5786959, "category_id": 1, "iscrowd": 0, "bbox": [305, 116, 36, 65], "area": 1609}, {"id": 3486005, "category_id": 1, "iscrowd": 0, "bbox": [135, 150, 42, 76], "area": 1566}, {"id": 6384963, "category_id": 1, "iscrowd": 0, "bbox": [184, 57, 106, 318], "area": 17624}, {"id": 8680046, "category_id": 15, "iscrowd": 0, "bbox": [277, 194, 78, 26], "area": 1780}, {"id": 10389375, "category_id": 15, "iscrowd": 0, "bbox": [276, 180, 76, 15], "area": 942}, {"id": 5788558, "category_id": 37, "iscrowd": 0, "bbox": [152, 329, 49, 50], "area": 1852}, {"id": 9532569, "category_id": 37, "iscrowd": 0, "bbox": [567, 209, 16, 14], "area": 178}, {"id": 8036507, "category_id": 145, "iscrowd": 0, "bbox": [0, 206, 640, 221], "area": 122299}, {"id": 3030843, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 212], "area": 68556}, {"id": 4216908, "category_id": 193, "iscrowd": 0, "bbox": [386, 202, 254, 23], "area": 2117}, {"id": 6643548, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 227], "area": 47267}], "file_name": "000000371552.png", "image_id": 371552}, {"segments_info": [{"id": 1057424, "category_id": 47, "iscrowd": 0, "bbox": [306, 235, 111, 137], "area": 10261}, {"id": 11713725, "category_id": 72, "iscrowd": 0, "bbox": [356, 79, 230, 154], "area": 32669}, {"id": 5000530, "category_id": 72, "iscrowd": 0, "bbox": [113, 79, 236, 153], "area": 34202}, {"id": 3025714, "category_id": 73, "iscrowd": 0, "bbox": [0, 101, 200, 215], "area": 24352}, {"id": 2569801, "category_id": 74, "iscrowd": 0, "bbox": [507, 369, 67, 55], "area": 2794}, {"id": 1976114, "category_id": 74, "iscrowd": 0, "bbox": [147, 365, 47, 45], "area": 1568}, {"id": 1908005, "category_id": 76, "iscrowd": 0, "bbox": [212, 333, 135, 80], "area": 4970}, {"id": 1318710, "category_id": 76, "iscrowd": 0, "bbox": [350, 331, 144, 77], "area": 5410}, {"id": 7106680, "category_id": 88, "iscrowd": 0, "bbox": [292, 0, 80, 92], "area": 4902}, {"id": 1519440, "category_id": 100, "iscrowd": 0, "bbox": [0, 250, 546, 142], "area": 28108}, {"id": 3028547, "category_id": 189, "iscrowd": 0, "bbox": [0, 229, 640, 251], "area": 64808}, {"id": 7963023, "category_id": 195, "iscrowd": 0, "bbox": [162, 49, 453, 304], "area": 5086}, {"id": 9144702, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 249], "area": 55561}], "file_name": "000000371677.png", "image_id": 371677}, {"segments_info": [{"id": 1187389, "category_id": 1, "iscrowd": 0, "bbox": [1, 247, 65, 146], "area": 6963}, {"id": 1003947, "category_id": 18, "iscrowd": 0, "bbox": [298, 538, 102, 102], "area": 5307}, {"id": 1580597, "category_id": 62, "iscrowd": 0, "bbox": [137, 296, 41, 43], "area": 1155}, {"id": 8823239, "category_id": 67, "iscrowd": 0, "bbox": [277, 275, 203, 255], "area": 18684}, {"id": 7768222, "category_id": 73, "iscrowd": 0, "bbox": [341, 282, 65, 49], "area": 1485}, {"id": 991553, "category_id": 84, "iscrowd": 0, "bbox": [116, 420, 51, 47], "area": 1310}, {"id": 341892, "category_id": 84, "iscrowd": 0, "bbox": [54, 504, 13, 54], "area": 175}, {"id": 2305605, "category_id": 84, "iscrowd": 0, "bbox": [369, 258, 24, 18], "area": 305}, {"id": 1256017, "category_id": 84, "iscrowd": 0, "bbox": [72, 436, 25, 49], "area": 256}, {"id": 792375, "category_id": 84, "iscrowd": 0, "bbox": [79, 431, 32, 48], "area": 425}, {"id": 800892, "category_id": 84, "iscrowd": 0, "bbox": [52, 508, 11, 50], "area": 209}, {"id": 1588336, "category_id": 84, "iscrowd": 0, "bbox": [74, 435, 25, 45], "area": 91}, {"id": 267394, "category_id": 84, "iscrowd": 0, "bbox": [57, 504, 14, 53], "area": 278}, {"id": 658986, "category_id": 84, "iscrowd": 0, "bbox": [62, 438, 15, 52], "area": 267}, {"id": 1188682, "category_id": 84, "iscrowd": 0, "bbox": [69, 435, 21, 51], "area": 137}, {"id": 923179, "category_id": 84, "iscrowd": 0, "bbox": [44, 443, 13, 57], "area": 249}, {"id": 399226, "category_id": 84, "iscrowd": 0, "bbox": [57, 439, 13, 53], "area": 172}, {"id": 2963030, "category_id": 84, "iscrowd": 0, "bbox": [400, 270, 19, 11], "area": 96}, {"id": 1453401, "category_id": 84, "iscrowd": 1, "bbox": [47, 424, 79, 72], "area": 2077}, {"id": 2446748, "category_id": 100, "iscrowd": 0, "bbox": [176, 415, 47, 80], "area": 2803}, {"id": 5664927, "category_id": 112, "iscrowd": 0, "bbox": [453, 143, 27, 163], "area": 2154}, {"id": 3159880, "category_id": 156, "iscrowd": 0, "bbox": [227, 226, 215, 142], "area": 14039}, {"id": 14080998, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 236, 64], "area": 11892}, {"id": 7307937, "category_id": 186, "iscrowd": 0, "bbox": [321, 0, 159, 88], "area": 10937}, {"id": 1982094, "category_id": 189, "iscrowd": 0, "bbox": [0, 284, 235, 327], "area": 37527}, {"id": 7564158, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 359], "area": 106282}, {"id": 1979991, "category_id": 200, "iscrowd": 0, "bbox": [0, 347, 480, 293], "area": 70568}], "file_name": "000000371699.png", "image_id": 371699}, {"segments_info": [{"id": 1842722, "category_id": 1, "iscrowd": 0, "bbox": [141, 94, 259, 274], "area": 17696}, {"id": 4145734, "category_id": 1, "iscrowd": 0, "bbox": [224, 0, 276, 367], "area": 61041}, {"id": 2369324, "category_id": 18, "iscrowd": 0, "bbox": [110, 22, 100, 116], "area": 8295}, {"id": 7106933, "category_id": 63, "iscrowd": 0, "bbox": [31, 231, 251, 139], "area": 28743}, {"id": 13224138, "category_id": 75, "iscrowd": 0, "bbox": [285, 164, 82, 68], "area": 1472}, {"id": 8553092, "category_id": 75, "iscrowd": 0, "bbox": [126, 175, 64, 39], "area": 1024}, {"id": 15922164, "category_id": 75, "iscrowd": 0, "bbox": [214, 228, 49, 40], "area": 1091}, {"id": 1383461, "category_id": 186, "iscrowd": 0, "bbox": [406, 0, 94, 39], "area": 575}, {"id": 5923434, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 386, 375], "area": 48964}], "file_name": "000000371749.png", "image_id": 371749}, {"segments_info": [{"id": 1645346, "category_id": 11, "iscrowd": 0, "bbox": [333, 282, 24, 49], "area": 707}, {"id": 4082517, "category_id": 15, "iscrowd": 0, "bbox": [142, 218, 149, 95], "area": 8241}, {"id": 5132362, "category_id": 130, "iscrowd": 0, "bbox": [144, 109, 27, 22], "area": 398}, {"id": 7440020, "category_id": 154, "iscrowd": 0, "bbox": [0, 188, 640, 172], "area": 70039}, {"id": 9928804, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 197], "area": 113151}, {"id": 9409689, "category_id": 191, "iscrowd": 0, "bbox": [35, 275, 605, 85], "area": 25665}, {"id": 6710374, "category_id": 192, "iscrowd": 0, "bbox": [0, 157, 640, 43], "area": 11333}], "file_name": "000000372203.png", "image_id": 372203}, {"segments_info": [{"id": 5133400, "category_id": 3, "iscrowd": 0, "bbox": [87, 299, 38, 41], "area": 944}, {"id": 7039071, "category_id": 3, "iscrowd": 0, "bbox": [119, 305, 28, 29], "area": 413}, {"id": 7236459, "category_id": 3, "iscrowd": 0, "bbox": [4, 298, 31, 15], "area": 230}, {"id": 6973539, "category_id": 3, "iscrowd": 0, "bbox": [0, 316, 118, 210], "area": 18951}, {"id": 1381704, "category_id": 64, "iscrowd": 0, "bbox": [176, 436, 48, 21], "area": 614}, {"id": 2698118, "category_id": 64, "iscrowd": 0, "bbox": [133, 506, 66, 57], "area": 2833}, {"id": 6850722, "category_id": 64, "iscrowd": 0, "bbox": [260, 325, 68, 109], "area": 5911}, {"id": 2500741, "category_id": 64, "iscrowd": 0, "bbox": [159, 453, 60, 45], "area": 1699}, {"id": 3191772, "category_id": 64, "iscrowd": 0, "bbox": [192, 459, 82, 42], "area": 2749}, {"id": 3094171, "category_id": 64, "iscrowd": 0, "bbox": [256, 432, 67, 65], "area": 3035}, {"id": 3158448, "category_id": 64, "iscrowd": 0, "bbox": [245, 507, 65, 54], "area": 2945}, {"id": 12631732, "category_id": 85, "iscrowd": 0, "bbox": [190, 65, 93, 93], "area": 6728}, {"id": 3246762, "category_id": 119, "iscrowd": 0, "bbox": [173, 420, 103, 144], "area": 3004}, {"id": 9808570, "category_id": 125, "iscrowd": 0, "bbox": [97, 333, 107, 59], "area": 2651}, {"id": 6518654, "category_id": 128, "iscrowd": 0, "bbox": [272, 190, 155, 140], "area": 13401}, {"id": 12368051, "category_id": 130, "iscrowd": 0, "bbox": [117, 115, 26, 56], "area": 939}, {"id": 8487812, "category_id": 149, "iscrowd": 0, "bbox": [0, 313, 427, 320], "area": 25389}, {"id": 5659748, "category_id": 175, "iscrowd": 0, "bbox": [68, 516, 294, 124], "area": 16276}, {"id": 3625296, "category_id": 184, "iscrowd": 0, "bbox": [0, 172, 326, 169], "area": 31960}, {"id": 15650221, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 289], "area": 73013}, {"id": 11517125, "category_id": 191, "iscrowd": 0, "bbox": [0, 324, 427, 316], "area": 25449}, {"id": 6526625, "category_id": 193, "iscrowd": 0, "bbox": [113, 375, 44, 39], "area": 935}, {"id": 10199205, "category_id": 197, "iscrowd": 0, "bbox": [0, 188, 373, 401], "area": 14538}, {"id": 5136229, "category_id": 199, "iscrowd": 0, "bbox": [0, 291, 23, 31], "area": 347}], "file_name": "000000372260.png", "image_id": 372260}, {"segments_info": [{"id": 3691894, "category_id": 19, "iscrowd": 0, "bbox": [222, 345, 48, 46], "area": 1249}, {"id": 4281162, "category_id": 184, "iscrowd": 0, "bbox": [0, 32, 640, 247], "area": 115281}, {"id": 6454655, "category_id": 185, "iscrowd": 0, "bbox": [0, 254, 640, 90], "area": 21104}, {"id": 15655902, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 122], "area": 47987}, {"id": 6137243, "category_id": 192, "iscrowd": 0, "bbox": [0, 283, 640, 145], "area": 71250}, {"id": 6912872, "category_id": 197, "iscrowd": 0, "bbox": [119, 205, 253, 138], "area": 16967}], "file_name": "000000372307.png", "image_id": 372307}, {"segments_info": [{"id": 5329795, "category_id": 6, "iscrowd": 0, "bbox": [35, 80, 549, 185], "area": 80699}, {"id": 4407620, "category_id": 14, "iscrowd": 0, "bbox": [15, 175, 11, 22], "area": 209}, {"id": 3703655, "category_id": 125, "iscrowd": 0, "bbox": [0, 222, 631, 24], "area": 927}, {"id": 11581885, "category_id": 149, "iscrowd": 0, "bbox": [0, 253, 640, 175], "area": 104489}, {"id": 11648708, "category_id": 181, "iscrowd": 0, "bbox": [331, 0, 164, 51], "area": 2578}, {"id": 6651778, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 261], "area": 43736}, {"id": 3949381, "category_id": 191, "iscrowd": 0, "bbox": [0, 227, 629, 45], "area": 5757}, {"id": 5989481, "category_id": 197, "iscrowd": 0, "bbox": [118, 45, 522, 175], "area": 8485}, {"id": 12110033, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 534, 240], "area": 25331}], "file_name": "000000372317.png", "image_id": 372317}, {"segments_info": [{"id": 3885942, "category_id": 1, "iscrowd": 0, "bbox": [245, 199, 116, 136], "area": 8785}, {"id": 3630008, "category_id": 1, "iscrowd": 0, "bbox": [432, 44, 66, 164], "area": 6787}, {"id": 4023635, "category_id": 44, "iscrowd": 0, "bbox": [166, 301, 47, 22], "area": 629}, {"id": 2525880, "category_id": 51, "iscrowd": 0, "bbox": [283, 318, 27, 13], "area": 228}, {"id": 11519712, "category_id": 90, "iscrowd": 0, "bbox": [287, 234, 6, 8], "area": 19}, {"id": 9605525, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 437], "area": 185062}, {"id": 5402252, "category_id": 194, "iscrowd": 0, "bbox": [0, 104, 494, 333], "area": 77912}], "file_name": "000000372349.png", "image_id": 372349}, {"segments_info": [{"id": 13740997, "category_id": 47, "iscrowd": 0, "bbox": [312, 0, 61, 44], "area": 2225}, {"id": 15178618, "category_id": 47, "iscrowd": 0, "bbox": [93, 29, 16, 18], "area": 251}, {"id": 3024193, "category_id": 62, "iscrowd": 0, "bbox": [31, 17, 64, 33], "area": 1335}, {"id": 12423553, "category_id": 73, "iscrowd": 0, "bbox": [177, 0, 462, 125], "area": 24067}, {"id": 13803657, "category_id": 74, "iscrowd": 0, "bbox": [21, 116, 288, 103], "area": 23269}, {"id": 11567735, "category_id": 76, "iscrowd": 0, "bbox": [346, 49, 198, 54], "area": 2754}, {"id": 12162691, "category_id": 76, "iscrowd": 0, "bbox": [0, 72, 158, 85], "area": 6536}, {"id": 10521995, "category_id": 156, "iscrowd": 0, "bbox": [355, 0, 67, 60], "area": 2659}, {"id": 15392211, "category_id": 180, "iscrowd": 0, "bbox": [76, 0, 242, 47], "area": 8416}, {"id": 3416607, "category_id": 189, "iscrowd": 0, "bbox": [0, 36, 640, 324], "area": 143053}, {"id": 13742763, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 87, 50], "area": 2462}], "file_name": "000000372466.png", "image_id": 372466}, {"segments_info": [{"id": 7034699, "category_id": 1, "iscrowd": 0, "bbox": [173, 115, 169, 386], "area": 31568}, {"id": 11838115, "category_id": 1, "iscrowd": 0, "bbox": [166, 0, 76, 174], "area": 7465}, {"id": 10060427, "category_id": 43, "iscrowd": 0, "bbox": [229, 284, 115, 48], "area": 1688}, {"id": 11173715, "category_id": 138, "iscrowd": 0, "bbox": [0, 122, 480, 176], "area": 58079}, {"id": 12487252, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 207892}], "file_name": "000000372577.png", "image_id": 372577}, {"segments_info": [{"id": 11186874, "category_id": 86, "iscrowd": 0, "bbox": [260, 396, 138, 234], "area": 28531}], "file_name": "000000372718.png", "image_id": 372718}, {"segments_info": [{"id": 5325110, "category_id": 1, "iscrowd": 0, "bbox": [443, 34, 82, 129], "area": 4741}, {"id": 6447199, "category_id": 1, "iscrowd": 0, "bbox": [544, 22, 65, 151], "area": 5642}, {"id": 9079688, "category_id": 15, "iscrowd": 0, "bbox": [487, 80, 153, 82], "area": 3460}, {"id": 7766139, "category_id": 18, "iscrowd": 0, "bbox": [216, 225, 58, 96], "area": 3413}, {"id": 7369577, "category_id": 18, "iscrowd": 0, "bbox": [227, 139, 41, 92], "area": 2580}, {"id": 12895677, "category_id": 18, "iscrowd": 0, "bbox": [280, 110, 34, 76], "area": 1361}, {"id": 8292226, "category_id": 18, "iscrowd": 0, "bbox": [428, 193, 40, 85], "area": 2423}, {"id": 8686225, "category_id": 67, "iscrowd": 0, "bbox": [524, 75, 116, 14], "area": 404}, {"id": 8167306, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 218471}, {"id": 11252139, "category_id": 194, "iscrowd": 0, "bbox": [0, 35, 640, 139], "area": 29454}], "file_name": "000000372819.png", "image_id": 372819}, {"segments_info": [{"id": 2105376, "category_id": 1, "iscrowd": 0, "bbox": [86, 208, 130, 226], "area": 11133}, {"id": 2697513, "category_id": 41, "iscrowd": 0, "bbox": [166, 414, 47, 28], "area": 522}, {"id": 5395026, "category_id": 185, "iscrowd": 0, "bbox": [0, 389, 477, 43], "area": 11203}, {"id": 9145227, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 477, 414], "area": 180789}], "file_name": "000000373315.png", "image_id": 373315}, {"segments_info": [{"id": 3684671, "category_id": 1, "iscrowd": 0, "bbox": [447, 317, 56, 107], "area": 2348}, {"id": 5325621, "category_id": 1, "iscrowd": 0, "bbox": [519, 308, 43, 90], "area": 1523}, {"id": 3155230, "category_id": 1, "iscrowd": 0, "bbox": [396, 303, 15, 28], "area": 249}, {"id": 2498597, "category_id": 1, "iscrowd": 0, "bbox": [572, 307, 10, 14], "area": 96}, {"id": 4668524, "category_id": 1, "iscrowd": 0, "bbox": [480, 303, 33, 105], "area": 718}, {"id": 6047020, "category_id": 1, "iscrowd": 0, "bbox": [291, 297, 59, 119], "area": 2508}, {"id": 1315093, "category_id": 1, "iscrowd": 0, "bbox": [596, 299, 10, 19], "area": 125}, {"id": 2235430, "category_id": 1, "iscrowd": 0, "bbox": [296, 337, 36, 74], "area": 308}, {"id": 1775642, "category_id": 1, "iscrowd": 0, "bbox": [610, 306, 9, 14], "area": 83}, {"id": 3221541, "category_id": 1, "iscrowd": 0, "bbox": [424, 310, 41, 110], "area": 1835}, {"id": 7498333, "category_id": 1, "iscrowd": 0, "bbox": [251, 303, 16, 28], "area": 254}, {"id": 5127988, "category_id": 1, "iscrowd": 0, "bbox": [380, 301, 8, 27], "area": 164}, {"id": 5208717, "category_id": 3, "iscrowd": 0, "bbox": [271, 313, 103, 77], "area": 4272}, {"id": 6775908, "category_id": 3, "iscrowd": 0, "bbox": [606, 308, 34, 77], "area": 1668}, {"id": 4472123, "category_id": 3, "iscrowd": 0, "bbox": [93, 295, 60, 67], "area": 3265}, {"id": 5195838, "category_id": 3, "iscrowd": 0, "bbox": [496, 308, 40, 43], "area": 786}, {"id": 6971735, "category_id": 3, "iscrowd": 0, "bbox": [416, 302, 26, 29], "area": 395}, {"id": 2783115, "category_id": 3, "iscrowd": 0, "bbox": [232, 307, 24, 18], "area": 335}, {"id": 8487808, "category_id": 3, "iscrowd": 0, "bbox": [198, 298, 20, 40], "area": 562}, {"id": 6709337, "category_id": 3, "iscrowd": 0, "bbox": [429, 305, 29, 31], "area": 429}, {"id": 6445909, "category_id": 3, "iscrowd": 0, "bbox": [146, 296, 34, 56], "area": 1335}, {"id": 5065545, "category_id": 3, "iscrowd": 0, "bbox": [515, 315, 58, 46], "area": 1075}, {"id": 7828074, "category_id": 3, "iscrowd": 0, "bbox": [175, 296, 28, 47], "area": 1035}, {"id": 5459268, "category_id": 3, "iscrowd": 0, "bbox": [0, 298, 101, 88], "area": 6502}, {"id": 4669758, "category_id": 3, "iscrowd": 0, "bbox": [558, 316, 64, 57], "area": 2403}, {"id": 7301732, "category_id": 3, "iscrowd": 1, "bbox": [0, 206, 482, 196], "area": 5040}, {"id": 5325120, "category_id": 6, "iscrowd": 0, "bbox": [272, 216, 95, 139], "area": 9014}, {"id": 2831448, "category_id": 10, "iscrowd": 0, "bbox": [431, 295, 5, 7], "area": 30}, {"id": 2640993, "category_id": 10, "iscrowd": 0, "bbox": [424, 270, 5, 10], "area": 39}, {"id": 3090985, "category_id": 10, "iscrowd": 0, "bbox": [440, 282, 4, 9], "area": 34}, {"id": 1601431, "category_id": 10, "iscrowd": 0, "bbox": [435, 279, 5, 11], "area": 34}, {"id": 2899781, "category_id": 27, "iscrowd": 0, "bbox": [302, 343, 9, 21], "area": 103}, {"id": 2234906, "category_id": 27, "iscrowd": 0, "bbox": [493, 326, 18, 28], "area": 303}, {"id": 2695197, "category_id": 31, "iscrowd": 0, "bbox": [465, 337, 31, 58], "area": 466}, {"id": 6778756, "category_id": 31, "iscrowd": 0, "bbox": [304, 341, 8, 22], "area": 29}, {"id": 7234139, "category_id": 149, "iscrowd": 0, "bbox": [0, 304, 640, 124], "area": 38060}, {"id": 13812648, "category_id": 187, "iscrowd": 0, "bbox": [254, 0, 193, 213], "area": 22518}, {"id": 6054502, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 358], "area": 162203}], "file_name": "000000373353.png", "image_id": 373353}, {"segments_info": [{"id": 4208955, "category_id": 1, "iscrowd": 0, "bbox": [396, 115, 27, 49], "area": 954}, {"id": 8551026, "category_id": 1, "iscrowd": 0, "bbox": [310, 246, 67, 110], "area": 4522}, {"id": 11777716, "category_id": 1, "iscrowd": 0, "bbox": [140, 75, 193, 527], "area": 35780}, {"id": 9539466, "category_id": 1, "iscrowd": 0, "bbox": [287, 215, 39, 72], "area": 1636}, {"id": 5657156, "category_id": 1, "iscrowd": 0, "bbox": [416, 186, 52, 88], "area": 2526}, {"id": 4801392, "category_id": 1, "iscrowd": 0, "bbox": [375, 232, 67, 121], "area": 5240}, {"id": 3552370, "category_id": 1, "iscrowd": 0, "bbox": [331, 102, 57, 75], "area": 1944}, {"id": 3881038, "category_id": 1, "iscrowd": 0, "bbox": [450, 153, 30, 99], "area": 1788}, {"id": 7363687, "category_id": 1, "iscrowd": 0, "bbox": [352, 205, 50, 75], "area": 2273}, {"id": 6052711, "category_id": 1, "iscrowd": 0, "bbox": [376, 138, 34, 57], "area": 1082}, {"id": 10787735, "category_id": 1, "iscrowd": 0, "bbox": [277, 180, 62, 68], "area": 2097}, {"id": 6709075, "category_id": 1, "iscrowd": 0, "bbox": [269, 248, 45, 112], "area": 3629}, {"id": 4934735, "category_id": 1, "iscrowd": 0, "bbox": [343, 163, 51, 98], "area": 1536}, {"id": 5196870, "category_id": 1, "iscrowd": 1, "bbox": [214, 0, 266, 361], "area": 24796}, {"id": 3089756, "category_id": 31, "iscrowd": 0, "bbox": [313, 328, 40, 14], "area": 417}, {"id": 6328456, "category_id": 43, "iscrowd": 0, "bbox": [142, 84, 61, 147], "area": 3801}, {"id": 8173736, "category_id": 145, "iscrowd": 0, "bbox": [0, 449, 480, 191], "area": 80335}, {"id": 4873566, "category_id": 171, "iscrowd": 0, "bbox": [15, 14, 419, 120], "area": 17501}, {"id": 1388572, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 474, 65], "area": 21015}, {"id": 5063984, "category_id": 185, "iscrowd": 0, "bbox": [333, 162, 23, 24], "area": 282}, {"id": 5923667, "category_id": 191, "iscrowd": 0, "bbox": [0, 419, 480, 46], "area": 8459}, {"id": 3749656, "category_id": 199, "iscrowd": 0, "bbox": [0, 43, 273, 321], "area": 49777}], "file_name": "000000373382.png", "image_id": 373382}, {"segments_info": [{"id": 11117996, "category_id": 1, "iscrowd": 0, "bbox": [131, 154, 35, 50], "area": 1185}, {"id": 9405589, "category_id": 1, "iscrowd": 0, "bbox": [207, 130, 43, 72], "area": 2008}, {"id": 10394530, "category_id": 1, "iscrowd": 0, "bbox": [94, 85, 42, 116], "area": 3240}, {"id": 5330272, "category_id": 1, "iscrowd": 0, "bbox": [0, 160, 10, 21], "area": 116}, {"id": 1906453, "category_id": 1, "iscrowd": 0, "bbox": [620, 136, 20, 73], "area": 1167}, {"id": 11116961, "category_id": 1, "iscrowd": 0, "bbox": [492, 65, 88, 146], "area": 6550}, {"id": 2046651, "category_id": 11, "iscrowd": 0, "bbox": [366, 166, 190, 259], "area": 27158}, {"id": 11056567, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 410, 120], "area": 19949}, {"id": 8235669, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 458, 176], "area": 10883}, {"id": 13224652, "category_id": 191, "iscrowd": 0, "bbox": [0, 168, 640, 259], "area": 81755}, {"id": 8552056, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 293], "area": 118766}], "file_name": "000000373705.png", "image_id": 373705}, {"segments_info": [{"id": 5063997, "category_id": 1, "iscrowd": 0, "bbox": [438, 80, 29, 76], "area": 1336}, {"id": 2104348, "category_id": 1, "iscrowd": 0, "bbox": [311, 149, 127, 251], "area": 13562}, {"id": 3815476, "category_id": 1, "iscrowd": 0, "bbox": [465, 85, 20, 39], "area": 515}, {"id": 6053468, "category_id": 1, "iscrowd": 0, "bbox": [46, 93, 12, 31], "area": 255}, {"id": 9804183, "category_id": 1, "iscrowd": 0, "bbox": [374, 94, 25, 14], "area": 161}, {"id": 4408125, "category_id": 15, "iscrowd": 0, "bbox": [13, 190, 511, 215], "area": 27442}, {"id": 1973790, "category_id": 16, "iscrowd": 0, "bbox": [230, 356, 20, 30], "area": 314}, {"id": 1842718, "category_id": 16, "iscrowd": 0, "bbox": [246, 365, 30, 30], "area": 457}, {"id": 3881786, "category_id": 16, "iscrowd": 0, "bbox": [164, 349, 28, 36], "area": 597}, {"id": 3552563, "category_id": 16, "iscrowd": 0, "bbox": [302, 374, 29, 32], "area": 598}, {"id": 2961713, "category_id": 16, "iscrowd": 0, "bbox": [475, 354, 25, 45], "area": 550}, {"id": 3881270, "category_id": 16, "iscrowd": 0, "bbox": [105, 256, 428, 54], "area": 1910}, {"id": 3026476, "category_id": 16, "iscrowd": 0, "bbox": [115, 365, 27, 40], "area": 700}, {"id": 3748911, "category_id": 16, "iscrowd": 0, "bbox": [118, 169, 29, 57], "area": 1086}, {"id": 3684147, "category_id": 16, "iscrowd": 0, "bbox": [185, 360, 36, 31], "area": 475}, {"id": 5721670, "category_id": 16, "iscrowd": 0, "bbox": [564, 384, 26, 36], "area": 687}, {"id": 5131338, "category_id": 16, "iscrowd": 0, "bbox": [173, 377, 61, 37], "area": 1097}, {"id": 9078920, "category_id": 16, "iscrowd": 0, "bbox": [594, 333, 35, 36], "area": 614}, {"id": 3816251, "category_id": 16, "iscrowd": 1, "bbox": [193, 343, 204, 84], "area": 2897}, {"id": 10855345, "category_id": 47, "iscrowd": 0, "bbox": [376, 405, 42, 22], "area": 725}, {"id": 11381159, "category_id": 149, "iscrowd": 0, "bbox": [0, 181, 640, 160], "area": 40716}, {"id": 5530212, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 596, 137], "area": 38532}, {"id": 9343119, "category_id": 191, "iscrowd": 0, "bbox": [0, 134, 640, 215], "area": 23384}, {"id": 6517113, "category_id": 194, "iscrowd": 0, "bbox": [0, 328, 640, 99], "area": 39744}, {"id": 9671825, "category_id": 197, "iscrowd": 0, "bbox": [10, 85, 90, 73], "area": 3387}, {"id": 10921380, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 177], "area": 32592}], "file_name": "000000374052.png", "image_id": 374052}, {"segments_info": [{"id": 3623788, "category_id": 1, "iscrowd": 0, "bbox": [9, 162, 312, 472], "area": 62005}, {"id": 2441313, "category_id": 1, "iscrowd": 0, "bbox": [80, 3, 218, 380], "area": 41060}, {"id": 5859958, "category_id": 49, "iscrowd": 0, "bbox": [99, 553, 122, 87], "area": 1668}, {"id": 2244945, "category_id": 50, "iscrowd": 0, "bbox": [100, 510, 133, 130], "area": 2688}, {"id": 3955827, "category_id": 50, "iscrowd": 0, "bbox": [250, 267, 58, 17], "area": 144}, {"id": 8893626, "category_id": 61, "iscrowd": 0, "bbox": [206, 454, 179, 170], "area": 21279}, {"id": 5073290, "category_id": 61, "iscrowd": 0, "bbox": [286, 358, 114, 77], "area": 6825}, {"id": 1714479, "category_id": 67, "iscrowd": 0, "bbox": [223, 383, 203, 257], "area": 12965}, {"id": 4912, "category_id": 118, "iscrowd": 0, "bbox": [0, 520, 78, 120], "area": 6533}, {"id": 1582377, "category_id": 122, "iscrowd": 0, "bbox": [168, 489, 226, 151], "area": 4379}, {"id": 4808054, "category_id": 130, "iscrowd": 0, "bbox": [354, 145, 57, 27], "area": 819}, {"id": 6000289, "category_id": 156, "iscrowd": 0, "bbox": [260, 78, 39, 170], "area": 4312}, {"id": 4877182, "category_id": 177, "iscrowd": 0, "bbox": [219, 262, 74, 98], "area": 3764}, {"id": 135213, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 426, 546], "area": 30984}, {"id": 528663, "category_id": 189, "iscrowd": 0, "bbox": [34, 467, 190, 173], "area": 1497}, {"id": 1790582, "category_id": 196, "iscrowd": 0, "bbox": [188, 400, 208, 227], "area": 3768}, {"id": 4295335, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 426, 347], "area": 38317}], "file_name": "000000374083.png", "image_id": 374083}, {"segments_info": [{"id": 6444620, "category_id": 1, "iscrowd": 0, "bbox": [227, 33, 157, 332], "area": 28642}, {"id": 11114894, "category_id": 35, "iscrowd": 0, "bbox": [192, 323, 275, 61], "area": 4446}, {"id": 13680817, "category_id": 159, "iscrowd": 0, "bbox": [0, 68, 640, 412], "area": 226061}, {"id": 10722191, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 90], "area": 46251}], "file_name": "000000374369.png", "image_id": 374369}, {"segments_info": [{"id": 5398647, "category_id": 1, "iscrowd": 0, "bbox": [522, 546, 23, 35], "area": 304}, {"id": 9078921, "category_id": 1, "iscrowd": 0, "bbox": [248, 566, 25, 37], "area": 430}, {"id": 5787724, "category_id": 1, "iscrowd": 0, "bbox": [479, 583, 18, 32], "area": 287}, {"id": 5394520, "category_id": 1, "iscrowd": 0, "bbox": [116, 532, 5, 11], "area": 32}, {"id": 5986129, "category_id": 1, "iscrowd": 0, "bbox": [45, 533, 10, 27], "area": 177}, {"id": 7173749, "category_id": 1, "iscrowd": 0, "bbox": [174, 521, 14, 37], "area": 326}, {"id": 7301996, "category_id": 1, "iscrowd": 0, "bbox": [288, 547, 9, 13], "area": 73}, {"id": 3223900, "category_id": 1, "iscrowd": 0, "bbox": [168, 526, 7, 17], "area": 77}, {"id": 7176317, "category_id": 1, "iscrowd": 0, "bbox": [208, 528, 17, 34], "area": 272}, {"id": 3160636, "category_id": 1, "iscrowd": 0, "bbox": [62, 531, 10, 26], "area": 208}, {"id": 2501166, "category_id": 1, "iscrowd": 0, "bbox": [127, 531, 8, 13], "area": 56}, {"id": 3620947, "category_id": 1, "iscrowd": 0, "bbox": [54, 532, 8, 26], "area": 157}, {"id": 3947332, "category_id": 1, "iscrowd": 0, "bbox": [145, 531, 10, 12], "area": 58}, {"id": 4214355, "category_id": 1, "iscrowd": 1, "bbox": [12, 524, 382, 34], "area": 930}, {"id": 8092041, "category_id": 2, "iscrowd": 0, "bbox": [471, 591, 35, 32], "area": 256}, {"id": 11645641, "category_id": 38, "iscrowd": 0, "bbox": [177, 266, 40, 18], "area": 236}, {"id": 12496051, "category_id": 92, "iscrowd": 0, "bbox": [132, 283, 61, 59], "area": 2087}, {"id": 7043705, "category_id": 149, "iscrowd": 0, "bbox": [361, 577, 169, 63], "area": 6512}, {"id": 3358008, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 549, 640], "area": 172564}, {"id": 14403239, "category_id": 187, "iscrowd": 0, "bbox": [0, 50, 549, 435], "area": 131990}, {"id": 2910297, "category_id": 193, "iscrowd": 0, "bbox": [0, 525, 549, 115], "area": 25836}, {"id": 3368807, "category_id": 194, "iscrowd": 0, "bbox": [0, 591, 26, 20], "area": 401}, {"id": 13616816, "category_id": 197, "iscrowd": 0, "bbox": [145, 266, 46, 197], "area": 3008}, {"id": 4411731, "category_id": 198, "iscrowd": 0, "bbox": [164, 564, 222, 76], "area": 4836}], "file_name": "000000374545.png", "image_id": 374545}, {"segments_info": [{"id": 5857125, "category_id": 16, "iscrowd": 0, "bbox": [30, 73, 365, 141], "area": 24730}], "file_name": "000000374551.png", "image_id": 374551}, {"segments_info": [{"id": 16579836, "category_id": 187, "iscrowd": 0, "bbox": [14, 0, 126, 119], "area": 8457}, {"id": 7698556, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 221802}], "file_name": "000000374727.png", "image_id": 374727}, {"segments_info": [{"id": 4602697, "category_id": 1, "iscrowd": 0, "bbox": [279, 111, 96, 236], "area": 13914}, {"id": 5984093, "category_id": 1, "iscrowd": 0, "bbox": [66, 3, 236, 289], "area": 43397}, {"id": 6445167, "category_id": 47, "iscrowd": 0, "bbox": [262, 274, 58, 50], "area": 1598}, {"id": 11708072, "category_id": 47, "iscrowd": 0, "bbox": [29, 275, 52, 38], "area": 795}, {"id": 7965623, "category_id": 59, "iscrowd": 0, "bbox": [1, 270, 372, 230], "area": 73159}, {"id": 6309185, "category_id": 62, "iscrowd": 0, "bbox": [238, 0, 24, 24], "area": 280}, {"id": 6443352, "category_id": 62, "iscrowd": 0, "bbox": [266, 5, 44, 131], "area": 2075}, {"id": 5523536, "category_id": 62, "iscrowd": 0, "bbox": [283, 24, 92, 145], "area": 5006}, {"id": 7431019, "category_id": 62, "iscrowd": 0, "bbox": [256, 1, 21, 104], "area": 1040}, {"id": 7231838, "category_id": 62, "iscrowd": 0, "bbox": [225, 0, 40, 60], "area": 997}, {"id": 6045497, "category_id": 67, "iscrowd": 0, "bbox": [303, 11, 72, 43], "area": 1518}, {"id": 13941942, "category_id": 67, "iscrowd": 0, "bbox": [1, 2, 138, 39], "area": 4966}, {"id": 12558229, "category_id": 67, "iscrowd": 0, "bbox": [3, 56, 128, 106], "area": 8941}, {"id": 7756375, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 375, 171], "area": 4512}, {"id": 4730673, "category_id": 190, "iscrowd": 0, "bbox": [340, 43, 35, 43], "area": 983}], "file_name": "000000374982.png", "image_id": 374982}, {"segments_info": [{"id": 3818072, "category_id": 23, "iscrowd": 0, "bbox": [291, 0, 349, 403], "area": 99593}, {"id": 10201545, "category_id": 184, "iscrowd": 0, "bbox": [61, 0, 58, 193], "area": 4666}, {"id": 8363686, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 258, 119], "area": 14044}, {"id": 8291998, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 404], "area": 129592}, {"id": 10792392, "category_id": 198, "iscrowd": 0, "bbox": [31, 299, 130, 105], "area": 10332}], "file_name": "000000375015.png", "image_id": 375015}, {"segments_info": [{"id": 7763056, "category_id": 44, "iscrowd": 0, "bbox": [210, 214, 77, 418], "area": 21061}, {"id": 11254985, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 279839}], "file_name": "000000375078.png", "image_id": 375078}, {"segments_info": [{"id": 9479130, "category_id": 1, "iscrowd": 0, "bbox": [2, 45, 193, 161], "area": 15996}, {"id": 1119510, "category_id": 18, "iscrowd": 0, "bbox": [0, 33, 228, 317], "area": 31432}, {"id": 7961727, "category_id": 33, "iscrowd": 0, "bbox": [0, 55, 278, 439], "area": 61313}, {"id": 11449003, "category_id": 84, "iscrowd": 0, "bbox": [240, 103, 93, 136], "area": 8380}, {"id": 11517663, "category_id": 84, "iscrowd": 0, "bbox": [259, 229, 74, 204], "area": 10055}, {"id": 9348023, "category_id": 112, "iscrowd": 0, "bbox": [282, 0, 51, 107], "area": 3571}, {"id": 6382955, "category_id": 190, "iscrowd": 0, "bbox": [96, 0, 237, 500], "area": 23879}, {"id": 8756147, "category_id": 195, "iscrowd": 0, "bbox": [271, 62, 62, 344], "area": 1026}, {"id": 13358556, "category_id": 199, "iscrowd": 0, "bbox": [51, 0, 104, 41], "area": 2755}], "file_name": "000000375278.png", "image_id": 375278}, {"segments_info": [{"id": 5598863, "category_id": 51, "iscrowd": 0, "bbox": [20, 189, 150, 74], "area": 6731}, {"id": 6717914, "category_id": 62, "iscrowd": 0, "bbox": [472, 29, 168, 272], "area": 33530}, {"id": 7705313, "category_id": 62, "iscrowd": 0, "bbox": [287, 70, 124, 154], "area": 16501}, {"id": 7509710, "category_id": 67, "iscrowd": 0, "bbox": [5, 191, 635, 231], "area": 115119}, {"id": 4538501, "category_id": 109, "iscrowd": 0, "bbox": [285, 0, 70, 93], "area": 4996}, {"id": 4224971, "category_id": 119, "iscrowd": 0, "bbox": [0, 12, 287, 221], "area": 42539}, {"id": 16448509, "category_id": 181, "iscrowd": 0, "bbox": [339, 0, 301, 323], "area": 34253}, {"id": 7904980, "category_id": 189, "iscrowd": 0, "bbox": [305, 421, 335, 6], "area": 1960}, {"id": 10529734, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 293, 192], "area": 14345}], "file_name": "000000375430.png", "image_id": 375430}, {"segments_info": [{"id": 5001049, "category_id": 1, "iscrowd": 0, "bbox": [314, 74, 65, 65], "area": 1804}, {"id": 6053227, "category_id": 1, "iscrowd": 0, "bbox": [221, 62, 80, 98], "area": 2289}, {"id": 10202567, "category_id": 42, "iscrowd": 0, "bbox": [237, 136, 217, 32], "area": 3554}, {"id": 11451074, "category_id": 42, "iscrowd": 0, "bbox": [329, 124, 97, 17], "area": 463}, {"id": 10526621, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 181], "area": 107467}], "file_name": "000000375469.png", "image_id": 375469}, {"segments_info": [{"id": 5729144, "category_id": 1, "iscrowd": 0, "bbox": [252, 25, 129, 448], "area": 31753}, {"id": 3174038, "category_id": 11, "iscrowd": 0, "bbox": [341, 291, 85, 158], "area": 6601}, {"id": 2833794, "category_id": 13, "iscrowd": 0, "bbox": [416, 100, 6, 7], "area": 34}, {"id": 5727594, "category_id": 17, "iscrowd": 0, "bbox": [163, 310, 90, 51], "area": 2140}, {"id": 1974815, "category_id": 17, "iscrowd": 0, "bbox": [0, 260, 23, 37], "area": 487}, {"id": 3818311, "category_id": 17, "iscrowd": 0, "bbox": [163, 263, 68, 26], "area": 935}, {"id": 6908789, "category_id": 44, "iscrowd": 0, "bbox": [339, 242, 30, 14], "area": 267}, {"id": 462090, "category_id": 130, "iscrowd": 0, "bbox": [162, 70, 342, 38], "area": 1654}, {"id": 790029, "category_id": 149, "iscrowd": 0, "bbox": [0, 109, 640, 169], "area": 57858}, {"id": 1843747, "category_id": 191, "iscrowd": 0, "bbox": [0, 144, 640, 289], "area": 29803}, {"id": 2177080, "category_id": 193, "iscrowd": 0, "bbox": [0, 266, 640, 214], "area": 91480}], "file_name": "000000375493.png", "image_id": 375493}, {"segments_info": [{"id": 5267824, "category_id": 20, "iscrowd": 0, "bbox": [271, 179, 55, 44], "area": 1080}, {"id": 9938861, "category_id": 20, "iscrowd": 0, "bbox": [161, 183, 43, 27], "area": 591}, {"id": 4611953, "category_id": 20, "iscrowd": 0, "bbox": [233, 217, 81, 127], "area": 6467}, {"id": 4348788, "category_id": 20, "iscrowd": 0, "bbox": [185, 191, 68, 109], "area": 3515}, {"id": 4609118, "category_id": 20, "iscrowd": 0, "bbox": [64, 186, 77, 97], "area": 2157}, {"id": 3953771, "category_id": 20, "iscrowd": 0, "bbox": [124, 197, 70, 105], "area": 4385}, {"id": 5205123, "category_id": 20, "iscrowd": 0, "bbox": [468, 184, 73, 119], "area": 5313}, {"id": 7311274, "category_id": 20, "iscrowd": 0, "bbox": [407, 173, 71, 126], "area": 5083}, {"id": 6193306, "category_id": 20, "iscrowd": 0, "bbox": [288, 194, 78, 111], "area": 4783}, {"id": 7109509, "category_id": 20, "iscrowd": 0, "bbox": [221, 185, 57, 30], "area": 781}, {"id": 3360598, "category_id": 20, "iscrowd": 0, "bbox": [41, 198, 84, 106], "area": 5691}, {"id": 4149861, "category_id": 20, "iscrowd": 0, "bbox": [348, 179, 77, 103], "area": 4176}, {"id": 11117975, "category_id": 184, "iscrowd": 0, "bbox": [0, 52, 542, 180], "area": 49668}, {"id": 15587251, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 201], "area": 65085}, {"id": 3040114, "category_id": 193, "iscrowd": 0, "bbox": [0, 219, 581, 261], "area": 113885}, {"id": 7048097, "category_id": 198, "iscrowd": 0, "bbox": [539, 0, 101, 480], "area": 32588}], "file_name": "000000375763.png", "image_id": 375763}, {"segments_info": [{"id": 2896958, "category_id": 1, "iscrowd": 0, "bbox": [0, 188, 92, 180], "area": 10130}, {"id": 4540514, "category_id": 1, "iscrowd": 0, "bbox": [69, 114, 197, 232], "area": 21411}, {"id": 3355707, "category_id": 1, "iscrowd": 0, "bbox": [225, 125, 157, 226], "area": 18763}, {"id": 6323611, "category_id": 1, "iscrowd": 0, "bbox": [170, 345, 141, 129], "area": 14344}, {"id": 7172720, "category_id": 1, "iscrowd": 0, "bbox": [410, 102, 177, 369], "area": 36148}, {"id": 12895949, "category_id": 47, "iscrowd": 0, "bbox": [420, 228, 24, 32], "area": 267}, {"id": 12698312, "category_id": 47, "iscrowd": 0, "bbox": [314, 230, 21, 27], "area": 332}, {"id": 12895944, "category_id": 47, "iscrowd": 0, "bbox": [355, 360, 26, 57], "area": 1264}, {"id": 5332294, "category_id": 47, "iscrowd": 0, "bbox": [298, 348, 24, 40], "area": 647}, {"id": 4153247, "category_id": 59, "iscrowd": 0, "bbox": [67, 325, 123, 111], "area": 9461}, {"id": 4682671, "category_id": 59, "iscrowd": 0, "bbox": [0, 353, 29, 91], "area": 1761}, {"id": 1981309, "category_id": 59, "iscrowd": 0, "bbox": [159, 316, 57, 30], "area": 445}, {"id": 8028811, "category_id": 67, "iscrowd": 0, "bbox": [278, 348, 173, 92], "area": 6415}, {"id": 6648461, "category_id": 100, "iscrowd": 0, "bbox": [0, 323, 205, 157], "area": 10251}, {"id": 3161679, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 381, 416], "area": 76308}, {"id": 3892873, "category_id": 189, "iscrowd": 0, "bbox": [58, 386, 356, 94], "area": 7732}, {"id": 922129, "category_id": 190, "iscrowd": 0, "bbox": [375, 444, 265, 36], "area": 3577}, {"id": 13357012, "category_id": 195, "iscrowd": 0, "bbox": [131, 459, 44, 21], "area": 479}, {"id": 1714531, "category_id": 196, "iscrowd": 0, "bbox": [83, 469, 27, 11], "area": 277}, {"id": 7372677, "category_id": 199, "iscrowd": 0, "bbox": [362, 0, 278, 470], "area": 80198}], "file_name": "000000376093.png", "image_id": 376093}, {"segments_info": [{"id": 6900805, "category_id": 1, "iscrowd": 0, "bbox": [359, 227, 11, 27], "area": 148}, {"id": 2563626, "category_id": 1, "iscrowd": 0, "bbox": [217, 173, 21, 33], "area": 309}, {"id": 5063258, "category_id": 1, "iscrowd": 0, "bbox": [226, 177, 21, 46], "area": 419}, {"id": 2760735, "category_id": 1, "iscrowd": 0, "bbox": [107, 187, 153, 361], "area": 21173}, {"id": 2627662, "category_id": 1, "iscrowd": 0, "bbox": [334, 222, 9, 35], "area": 216}, {"id": 7366994, "category_id": 1, "iscrowd": 0, "bbox": [318, 256, 25, 54], "area": 719}, {"id": 5854836, "category_id": 1, "iscrowd": 0, "bbox": [243, 239, 34, 77], "area": 805}, {"id": 8415303, "category_id": 1, "iscrowd": 0, "bbox": [260, 210, 28, 54], "area": 647}, {"id": 4076371, "category_id": 1, "iscrowd": 0, "bbox": [250, 202, 22, 46], "area": 412}, {"id": 4537149, "category_id": 1, "iscrowd": 0, "bbox": [298, 212, 17, 33], "area": 305}, {"id": 5388311, "category_id": 1, "iscrowd": 0, "bbox": [287, 203, 14, 41], "area": 312}, {"id": 6442568, "category_id": 1, "iscrowd": 0, "bbox": [194, 204, 64, 108], "area": 2193}, {"id": 6575737, "category_id": 1, "iscrowd": 0, "bbox": [326, 288, 62, 171], "area": 4759}, {"id": 6181455, "category_id": 1, "iscrowd": 1, "bbox": [123, 108, 246, 382], "area": 21029}, {"id": 3877698, "category_id": 27, "iscrowd": 0, "bbox": [149, 248, 67, 132], "area": 6822}, {"id": 3547415, "category_id": 27, "iscrowd": 0, "bbox": [367, 233, 4, 7], "area": 19}, {"id": 5522755, "category_id": 27, "iscrowd": 0, "bbox": [229, 185, 13, 18], "area": 146}, {"id": 3821932, "category_id": 27, "iscrowd": 0, "bbox": [342, 316, 38, 55], "area": 1178}, {"id": 4668032, "category_id": 27, "iscrowd": 0, "bbox": [249, 249, 8, 29], "area": 115}, {"id": 9142931, "category_id": 35, "iscrowd": 0, "bbox": [82, 454, 261, 163], "area": 6325}, {"id": 9928562, "category_id": 35, "iscrowd": 0, "bbox": [315, 426, 92, 54], "area": 903}, {"id": 8281667, "category_id": 35, "iscrowd": 0, "bbox": [270, 261, 17, 8], "area": 43}, {"id": 8677206, "category_id": 35, "iscrowd": 0, "bbox": [133, 407, 184, 130], "area": 2382}, {"id": 13812922, "category_id": 159, "iscrowd": 0, "bbox": [0, 116, 426, 524], "area": 122533}, {"id": 4476242, "category_id": 184, "iscrowd": 0, "bbox": [0, 97, 426, 278], "area": 10436}, {"id": 10117138, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 426, 150], "area": 53129}, {"id": 8292504, "category_id": 198, "iscrowd": 0, "bbox": [0, 154, 144, 279], "area": 12596}], "file_name": "000000376112.png", "image_id": 376112}, {"segments_info": [{"id": 4603967, "category_id": 1, "iscrowd": 0, "bbox": [209, 165, 97, 70], "area": 2348}, {"id": 11377538, "category_id": 42, "iscrowd": 0, "bbox": [164, 189, 182, 57], "area": 901}, {"id": 11050371, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 269879}], "file_name": "000000376206.png", "image_id": 376206}, {"segments_info": [{"id": 3555146, "category_id": 44, "iscrowd": 0, "bbox": [0, 23, 47, 84], "area": 2083}, {"id": 7634575, "category_id": 44, "iscrowd": 0, "bbox": [23, 27, 81, 84], "area": 4377}, {"id": 1645853, "category_id": 47, "iscrowd": 0, "bbox": [201, 387, 95, 86], "area": 5565}, {"id": 3553081, "category_id": 49, "iscrowd": 0, "bbox": [109, 204, 42, 167], "area": 1694}, {"id": 6379347, "category_id": 49, "iscrowd": 0, "bbox": [141, 295, 55, 153], "area": 1165}, {"id": 723720, "category_id": 73, "iscrowd": 0, "bbox": [380, 177, 260, 304], "area": 51223}, {"id": 4999241, "category_id": 77, "iscrowd": 0, "bbox": [263, 173, 44, 68], "area": 1720}, {"id": 6577754, "category_id": 84, "iscrowd": 0, "bbox": [265, 215, 166, 188], "area": 15776}, {"id": 10129040, "category_id": 84, "iscrowd": 0, "bbox": [1, 126, 96, 112], "area": 6156}, {"id": 4214361, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 481], "area": 35899}, {"id": 8818590, "category_id": 195, "iscrowd": 0, "bbox": [100, 10, 351, 423], "area": 72284}, {"id": 7640241, "category_id": 196, "iscrowd": 0, "bbox": [11, 197, 261, 183], "area": 6840}], "file_name": "000000376264.png", "image_id": 376264}, {"segments_info": [{"id": 7636889, "category_id": 24, "iscrowd": 0, "bbox": [41, 78, 572, 247], "area": 78554}, {"id": 5398636, "category_id": 24, "iscrowd": 0, "bbox": [464, 96, 176, 85], "area": 10208}, {"id": 6452095, "category_id": 24, "iscrowd": 0, "bbox": [598, 17, 42, 109], "area": 3788}, {"id": 6916512, "category_id": 194, "iscrowd": 0, "bbox": [0, 80, 640, 347], "area": 121543}], "file_name": "000000376278.png", "image_id": 376278}, {"segments_info": [{"id": 6579589, "category_id": 3, "iscrowd": 0, "bbox": [19, 51, 45, 59], "area": 1150}, {"id": 10396837, "category_id": 3, "iscrowd": 0, "bbox": [210, 28, 62, 32], "area": 1055}, {"id": 7433829, "category_id": 3, "iscrowd": 0, "bbox": [71, 27, 183, 116], "area": 12036}, {"id": 7828334, "category_id": 3, "iscrowd": 0, "bbox": [37, 47, 59, 73], "area": 2199}, {"id": 11975353, "category_id": 3, "iscrowd": 0, "bbox": [348, 1, 152, 72], "area": 8909}, {"id": 12961471, "category_id": 3, "iscrowd": 0, "bbox": [0, 64, 19, 10], "area": 115}, {"id": 7500905, "category_id": 3, "iscrowd": 0, "bbox": [247, 37, 55, 45], "area": 1168}, {"id": 8621708, "category_id": 3, "iscrowd": 0, "bbox": [0, 69, 19, 33], "area": 427}, {"id": 6449503, "category_id": 11, "iscrowd": 0, "bbox": [275, 5, 134, 324], "area": 24596}, {"id": 7828841, "category_id": 149, "iscrowd": 0, "bbox": [0, 66, 500, 184], "area": 17829}, {"id": 6917506, "category_id": 184, "iscrowd": 0, "bbox": [25, 0, 132, 54], "area": 5384}, {"id": 5462096, "category_id": 185, "iscrowd": 0, "bbox": [169, 55, 331, 278], "area": 26214}, {"id": 16119542, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 327, 81], "area": 2539}, {"id": 5987666, "category_id": 191, "iscrowd": 0, "bbox": [0, 110, 461, 223], "area": 55945}, {"id": 7239293, "category_id": 197, "iscrowd": 0, "bbox": [151, 0, 226, 46], "area": 5146}], "file_name": "000000376284.png", "image_id": 376284}, {"segments_info": [{"id": 5790071, "category_id": 1, "iscrowd": 0, "bbox": [196, 153, 70, 97], "area": 3729}, {"id": 6579566, "category_id": 1, "iscrowd": 0, "bbox": [247, 148, 128, 273], "area": 18929}, {"id": 5539726, "category_id": 1, "iscrowd": 0, "bbox": [140, 190, 59, 79], "area": 1335}, {"id": 11845065, "category_id": 47, "iscrowd": 0, "bbox": [317, 444, 37, 41], "area": 1048}, {"id": 5020599, "category_id": 52, "iscrowd": 0, "bbox": [184, 370, 36, 84], "area": 1791}, {"id": 3972030, "category_id": 52, "iscrowd": 0, "bbox": [156, 325, 35, 55], "area": 891}, {"id": 4564940, "category_id": 52, "iscrowd": 0, "bbox": [51, 333, 70, 58], "area": 1334}, {"id": 2852005, "category_id": 52, "iscrowd": 0, "bbox": [166, 349, 24, 51], "area": 594}, {"id": 3974331, "category_id": 52, "iscrowd": 0, "bbox": [208, 390, 33, 63], "area": 1011}, {"id": 3244193, "category_id": 52, "iscrowd": 0, "bbox": [41, 303, 37, 30], "area": 595}, {"id": 5940170, "category_id": 52, "iscrowd": 0, "bbox": [255, 356, 81, 83], "area": 3113}, {"id": 3902383, "category_id": 52, "iscrowd": 0, "bbox": [11, 310, 28, 19], "area": 324}, {"id": 3052981, "category_id": 52, "iscrowd": 0, "bbox": [129, 327, 40, 59], "area": 1446}, {"id": 5752026, "category_id": 52, "iscrowd": 0, "bbox": [242, 385, 27, 50], "area": 911}, {"id": 4435401, "category_id": 52, "iscrowd": 0, "bbox": [239, 371, 58, 56], "area": 1356}, {"id": 4360369, "category_id": 52, "iscrowd": 0, "bbox": [70, 342, 61, 70], "area": 1661}, {"id": 5023683, "category_id": 52, "iscrowd": 0, "bbox": [219, 370, 25, 55], "area": 899}, {"id": 3090526, "category_id": 53, "iscrowd": 0, "bbox": [74, 289, 27, 22], "area": 317}, {"id": 3688349, "category_id": 53, "iscrowd": 0, "bbox": [110, 307, 32, 36], "area": 929}, {"id": 3056268, "category_id": 53, "iscrowd": 0, "bbox": [137, 287, 34, 38], "area": 918}, {"id": 4671673, "category_id": 53, "iscrowd": 0, "bbox": [191, 304, 38, 36], "area": 1047}, {"id": 2717642, "category_id": 55, "iscrowd": 0, "bbox": [176, 227, 32, 32], "area": 694}, {"id": 2195162, "category_id": 55, "iscrowd": 0, "bbox": [100, 263, 42, 30], "area": 858}, {"id": 4220587, "category_id": 57, "iscrowd": 0, "bbox": [31, 292, 20, 19], "area": 146}, {"id": 6595311, "category_id": 57, "iscrowd": 0, "bbox": [151, 299, 51, 39], "area": 891}, {"id": 2636652, "category_id": 62, "iscrowd": 0, "bbox": [3, 225, 66, 67], "area": 1340}, {"id": 7436188, "category_id": 67, "iscrowd": 0, "bbox": [0, 279, 362, 221], "area": 13739}, {"id": 8287083, "category_id": 93, "iscrowd": 0, "bbox": [0, 25, 375, 190], "area": 10309}, {"id": 2453147, "category_id": 122, "iscrowd": 0, "bbox": [7, 249, 331, 251], "area": 32235}, {"id": 5006204, "category_id": 190, "iscrowd": 0, "bbox": [0, 166, 104, 114], "area": 3728}, {"id": 3687764, "category_id": 197, "iscrowd": 0, "bbox": [0, 133, 206, 118], "area": 6302}], "file_name": "000000376307.png", "image_id": 376307}, {"segments_info": [{"id": 1192246, "category_id": 70, "iscrowd": 0, "bbox": [599, 289, 27, 22], "area": 487}, {"id": 4544365, "category_id": 81, "iscrowd": 0, "bbox": [355, 368, 85, 36], "area": 2544}, {"id": 5135726, "category_id": 81, "iscrowd": 0, "bbox": [458, 378, 96, 41], "area": 3117}, {"id": 3952476, "category_id": 81, "iscrowd": 0, "bbox": [575, 389, 65, 46], "area": 2493}, {"id": 2631210, "category_id": 107, "iscrowd": 0, "bbox": [323, 377, 317, 92], "area": 11293}, {"id": 9474720, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 630, 472], "area": 40514}, {"id": 5792117, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 640, 434], "area": 87134}, {"id": 2763063, "category_id": 156, "iscrowd": 0, "bbox": [343, 284, 297, 61], "area": 6640}, {"id": 4077394, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 149353}], "file_name": "000000376310.png", "image_id": 376310}, {"segments_info": [{"id": 3030882, "category_id": 1, "iscrowd": 0, "bbox": [2, 355, 127, 121], "area": 7565}, {"id": 1186850, "category_id": 1, "iscrowd": 0, "bbox": [123, 234, 24, 35], "area": 361}, {"id": 4737353, "category_id": 1, "iscrowd": 0, "bbox": [323, 160, 111, 238], "area": 11539}, {"id": 1910066, "category_id": 1, "iscrowd": 0, "bbox": [391, 153, 87, 216], "area": 13387}, {"id": 1713204, "category_id": 1, "iscrowd": 0, "bbox": [0, 198, 84, 172], "area": 9861}, {"id": 2305074, "category_id": 1, "iscrowd": 0, "bbox": [328, 182, 45, 91], "area": 1502}, {"id": 2697282, "category_id": 1, "iscrowd": 0, "bbox": [229, 216, 58, 94], "area": 3672}, {"id": 2173743, "category_id": 1, "iscrowd": 0, "bbox": [62, 227, 29, 94], "area": 1580}, {"id": 4344153, "category_id": 1, "iscrowd": 0, "bbox": [258, 217, 105, 131], "area": 6530}, {"id": 6576237, "category_id": 1, "iscrowd": 0, "bbox": [408, 363, 70, 64], "area": 2854}, {"id": 3492965, "category_id": 1, "iscrowd": 0, "bbox": [98, 230, 44, 49], "area": 1333}, {"id": 2173229, "category_id": 1, "iscrowd": 0, "bbox": [79, 223, 27, 90], "area": 1164}, {"id": 3952997, "category_id": 1, "iscrowd": 0, "bbox": [293, 204, 23, 23], "area": 302}, {"id": 3293264, "category_id": 1, "iscrowd": 1, "bbox": [1, 169, 417, 153], "area": 6751}, {"id": 4675937, "category_id": 44, "iscrowd": 0, "bbox": [155, 253, 33, 62], "area": 816}, {"id": 5593957, "category_id": 44, "iscrowd": 0, "bbox": [202, 284, 35, 84], "area": 2198}, {"id": 3752266, "category_id": 46, "iscrowd": 0, "bbox": [164, 283, 21, 23], "area": 408}, {"id": 3552310, "category_id": 46, "iscrowd": 0, "bbox": [429, 449, 49, 136], "area": 4722}, {"id": 4211780, "category_id": 46, "iscrowd": 0, "bbox": [388, 243, 39, 87], "area": 634}, {"id": 3488321, "category_id": 47, "iscrowd": 0, "bbox": [164, 327, 26, 51], "area": 1179}, {"id": 2896976, "category_id": 47, "iscrowd": 0, "bbox": [195, 367, 48, 98], "area": 3353}, {"id": 7435897, "category_id": 47, "iscrowd": 0, "bbox": [190, 306, 18, 22], "area": 351}, {"id": 6053732, "category_id": 47, "iscrowd": 0, "bbox": [233, 333, 26, 48], "area": 1081}, {"id": 10190196, "category_id": 47, "iscrowd": 0, "bbox": [246, 396, 39, 61], "area": 1854}, {"id": 8482921, "category_id": 47, "iscrowd": 0, "bbox": [370, 399, 54, 108], "area": 5033}, {"id": 5332579, "category_id": 47, "iscrowd": 0, "bbox": [156, 305, 15, 23], "area": 328}, {"id": 6642263, "category_id": 48, "iscrowd": 0, "bbox": [321, 428, 31, 14], "area": 162}, {"id": 6908002, "category_id": 48, "iscrowd": 0, "bbox": [49, 565, 211, 75], "area": 2478}, {"id": 4870490, "category_id": 48, "iscrowd": 0, "bbox": [139, 396, 58, 17], "area": 286}, {"id": 6052694, "category_id": 48, "iscrowd": 0, "bbox": [68, 546, 194, 72], "area": 1530}, {"id": 6641748, "category_id": 48, "iscrowd": 0, "bbox": [331, 422, 41, 14], "area": 100}, {"id": 3159871, "category_id": 48, "iscrowd": 0, "bbox": [81, 401, 97, 21], "area": 456}, {"id": 4208439, "category_id": 49, "iscrowd": 0, "bbox": [349, 449, 23, 3], "area": 63}, {"id": 4275259, "category_id": 49, "iscrowd": 0, "bbox": [421, 437, 53, 11], "area": 241}, {"id": 5990766, "category_id": 49, "iscrowd": 0, "bbox": [77, 391, 91, 5], "area": 216}, {"id": 5397336, "category_id": 50, "iscrowd": 0, "bbox": [336, 547, 136, 93], "area": 3345}, {"id": 4145740, "category_id": 50, "iscrowd": 0, "bbox": [49, 455, 144, 25], "area": 1016}, {"id": 5529188, "category_id": 50, "iscrowd": 0, "bbox": [137, 375, 22, 10], "area": 96}, {"id": 4208949, "category_id": 50, "iscrowd": 0, "bbox": [416, 492, 15, 12], "area": 101}, {"id": 6320260, "category_id": 61, "iscrowd": 0, "bbox": [308, 463, 52, 34], "area": 1049}, {"id": 8288631, "category_id": 67, "iscrowd": 0, "bbox": [5, 273, 473, 359], "area": 83629}, {"id": 4279891, "category_id": 67, "iscrowd": 0, "bbox": [89, 257, 23, 21], "area": 251}, {"id": 4927574, "category_id": 77, "iscrowd": 0, "bbox": [64, 470, 93, 34], "area": 2554}, {"id": 3497051, "category_id": 112, "iscrowd": 0, "bbox": [88, 194, 102, 80], "area": 2572}, {"id": 13492703, "category_id": 130, "iscrowd": 0, "bbox": [95, 125, 268, 95], "area": 2528}, {"id": 6128009, "category_id": 156, "iscrowd": 0, "bbox": [251, 198, 59, 25], "area": 803}, {"id": 4481383, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 478, 203], "area": 62616}, {"id": 2895148, "category_id": 189, "iscrowd": 0, "bbox": [0, 513, 478, 127], "area": 1470}, {"id": 10261136, "category_id": 195, "iscrowd": 0, "bbox": [52, 270, 426, 370], "area": 6941}, {"id": 7906475, "category_id": 199, "iscrowd": 0, "bbox": [16, 31, 462, 223], "area": 26592}], "file_name": "000000376322.png", "image_id": 376322}, {"segments_info": [{"id": 1839633, "category_id": 1, "iscrowd": 0, "bbox": [346, 116, 51, 67], "area": 2019}, {"id": 14408926, "category_id": 47, "iscrowd": 0, "bbox": [64, 201, 106, 128], "area": 12119}, {"id": 1839888, "category_id": 62, "iscrowd": 0, "bbox": [296, 172, 33, 12], "area": 263}, {"id": 2168598, "category_id": 62, "iscrowd": 0, "bbox": [473, 176, 18, 39], "area": 489}, {"id": 1776422, "category_id": 63, "iscrowd": 0, "bbox": [391, 174, 36, 14], "area": 416}, {"id": 3681579, "category_id": 86, "iscrowd": 0, "bbox": [214, 23, 286, 300], "area": 68287}, {"id": 14538710, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 296], "area": 64743}], "file_name": "000000376365.png", "image_id": 376365}, {"segments_info": [{"id": 10263451, "category_id": 70, "iscrowd": 0, "bbox": [97, 110, 370, 486], "area": 85244}, {"id": 1645082, "category_id": 88, "iscrowd": 0, "bbox": [169, 376, 99, 138], "area": 8866}, {"id": 3553848, "category_id": 107, "iscrowd": 0, "bbox": [0, 0, 111, 92], "area": 5479}, {"id": 7105643, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 139220}, {"id": 4205857, "category_id": 190, "iscrowd": 0, "bbox": [0, 303, 404, 337], "area": 55247}], "file_name": "000000376442.png", "image_id": 376442}, {"segments_info": [{"id": 7709337, "category_id": 86, "iscrowd": 0, "bbox": [49, 197, 220, 351], "area": 50527}, {"id": 7842511, "category_id": 119, "iscrowd": 0, "bbox": [121, 34, 251, 260], "area": 35844}, {"id": 3217678, "category_id": 128, "iscrowd": 0, "bbox": [347, 0, 133, 384], "area": 32370}, {"id": 6660789, "category_id": 149, "iscrowd": 0, "bbox": [22, 288, 84, 113], "area": 6976}, {"id": 2758668, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 383, 340], "area": 56199}, {"id": 6057059, "category_id": 191, "iscrowd": 0, "bbox": [408, 380, 72, 260], "area": 10794}, {"id": 3687730, "category_id": 193, "iscrowd": 0, "bbox": [14, 251, 223, 69], "area": 3307}, {"id": 2888718, "category_id": 194, "iscrowd": 0, "bbox": [0, 153, 243, 367], "area": 12311}], "file_name": "000000376478.png", "image_id": 376478}, {"segments_info": [{"id": 4144959, "category_id": 1, "iscrowd": 0, "bbox": [48, 217, 36, 111], "area": 2572}, {"id": 8158332, "category_id": 1, "iscrowd": 0, "bbox": [2, 241, 16, 25], "area": 243}, {"id": 4079166, "category_id": 1, "iscrowd": 0, "bbox": [215, 241, 8, 8], "area": 37}, {"id": 3750201, "category_id": 1, "iscrowd": 0, "bbox": [135, 244, 5, 28], "area": 71}, {"id": 5263440, "category_id": 1, "iscrowd": 0, "bbox": [120, 244, 8, 34], "area": 156}, {"id": 1973790, "category_id": 1, "iscrowd": 0, "bbox": [437, 225, 21, 77], "area": 998}, {"id": 5526612, "category_id": 1, "iscrowd": 0, "bbox": [540, 207, 40, 124], "area": 2875}, {"id": 2894892, "category_id": 1, "iscrowd": 0, "bbox": [506, 206, 38, 116], "area": 2933}, {"id": 5329233, "category_id": 1, "iscrowd": 0, "bbox": [316, 175, 28, 42], "area": 833}, {"id": 7829367, "category_id": 1, "iscrowd": 0, "bbox": [199, 241, 5, 16], "area": 71}, {"id": 2171169, "category_id": 1, "iscrowd": 0, "bbox": [361, 169, 40, 53], "area": 1384}, {"id": 6447714, "category_id": 3, "iscrowd": 0, "bbox": [228, 243, 16, 22], "area": 196}, {"id": 7105644, "category_id": 3, "iscrowd": 0, "bbox": [247, 253, 10, 23], "area": 152}, {"id": 6842472, "category_id": 3, "iscrowd": 0, "bbox": [239, 243, 15, 27], "area": 266}, {"id": 4144962, "category_id": 4, "iscrowd": 0, "bbox": [216, 246, 7, 12], "area": 55}, {"id": 6118749, "category_id": 7, "iscrowd": 0, "bbox": [249, 97, 194, 242], "area": 35897}, {"id": 1776411, "category_id": 44, "iscrowd": 0, "bbox": [596, 97, 42, 147], "area": 5252}, {"id": 5987163, "category_id": 147, "iscrowd": 0, "bbox": [64, 230, 515, 197], "area": 33816}, {"id": 5131854, "category_id": 149, "iscrowd": 0, "bbox": [0, 237, 640, 190], "area": 31738}, {"id": 9079434, "category_id": 181, "iscrowd": 0, "bbox": [439, 0, 39, 42], "area": 1243}, {"id": 16514043, "category_id": 187, "iscrowd": 0, "bbox": [163, 0, 128, 173], "area": 14756}, {"id": 6250335, "category_id": 191, "iscrowd": 0, "bbox": [0, 257, 640, 142], "area": 15482}, {"id": 7631988, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 329], "area": 121043}], "file_name": "000000376625.png", "image_id": 376625}, {"segments_info": [{"id": 9460021, "category_id": 85, "iscrowd": 0, "bbox": [241, 91, 52, 37], "area": 1389}, {"id": 6510146, "category_id": 151, "iscrowd": 0, "bbox": [0, 587, 53, 53], "area": 2238}, {"id": 14383162, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 593], "area": 112361}, {"id": 5854036, "category_id": 197, "iscrowd": 0, "bbox": [32, 35, 448, 605], "area": 191191}], "file_name": "000000376856.png", "image_id": 376856}, {"segments_info": [{"id": 7693150, "category_id": 1, "iscrowd": 0, "bbox": [404, 320, 18, 28], "area": 205}, {"id": 3882830, "category_id": 1, "iscrowd": 0, "bbox": [368, 304, 50, 79], "area": 2136}, {"id": 10261401, "category_id": 1, "iscrowd": 0, "bbox": [56, 309, 28, 55], "area": 593}, {"id": 5201268, "category_id": 1, "iscrowd": 0, "bbox": [366, 302, 23, 34], "area": 534}, {"id": 5989754, "category_id": 1, "iscrowd": 0, "bbox": [238, 316, 37, 67], "area": 1530}, {"id": 4339024, "category_id": 1, "iscrowd": 0, "bbox": [0, 297, 56, 87], "area": 2350}, {"id": 5529202, "category_id": 1, "iscrowd": 0, "bbox": [273, 313, 11, 22], "area": 185}, {"id": 10197145, "category_id": 1, "iscrowd": 0, "bbox": [291, 329, 29, 53], "area": 953}, {"id": 4473670, "category_id": 1, "iscrowd": 0, "bbox": [33, 295, 6, 5], "area": 24}, {"id": 11907257, "category_id": 1, "iscrowd": 0, "bbox": [79, 176, 157, 424], "area": 25626}, {"id": 10715458, "category_id": 1, "iscrowd": 0, "bbox": [441, 306, 18, 42], "area": 367}, {"id": 9865353, "category_id": 1, "iscrowd": 0, "bbox": [216, 311, 22, 37], "area": 454}, {"id": 7627866, "category_id": 1, "iscrowd": 0, "bbox": [331, 296, 44, 86], "area": 2502}, {"id": 4341056, "category_id": 1, "iscrowd": 1, "bbox": [1, 270, 479, 201], "area": 26190}, {"id": 6973291, "category_id": 43, "iscrowd": 0, "bbox": [114, 372, 33, 47], "area": 482}, {"id": 7578538, "category_id": 145, "iscrowd": 0, "bbox": [0, 459, 480, 181], "area": 77046}, {"id": 4149824, "category_id": 184, "iscrowd": 0, "bbox": [344, 123, 136, 41], "area": 3053}, {"id": 8288365, "category_id": 185, "iscrowd": 0, "bbox": [0, 140, 480, 46], "area": 14271}, {"id": 14537928, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 147], "area": 66940}, {"id": 4079416, "category_id": 197, "iscrowd": 0, "bbox": [0, 107, 431, 199], "area": 8612}, {"id": 1053448, "category_id": 199, "iscrowd": 0, "bbox": [0, 164, 480, 302], "area": 71515}], "file_name": "000000376900.png", "image_id": 376900}, {"segments_info": [{"id": 2171944, "category_id": 17, "iscrowd": 0, "bbox": [0, 37, 318, 522], "area": 109535}, {"id": 9803929, "category_id": 181, "iscrowd": 0, "bbox": [229, 0, 298, 594], "area": 122798}, {"id": 10132379, "category_id": 189, "iscrowd": 0, "bbox": [0, 306, 527, 334], "area": 86920}, {"id": 8752015, "category_id": 199, "iscrowd": 0, "bbox": [125, 0, 110, 67], "area": 4858}], "file_name": "000000377000.png", "image_id": 377000}, {"segments_info": [{"id": 2100047, "category_id": 1, "iscrowd": 0, "bbox": [576, 5, 58, 137], "area": 5209}, {"id": 3291199, "category_id": 1, "iscrowd": 0, "bbox": [33, 0, 49, 102], "area": 3244}, {"id": 3220584, "category_id": 1, "iscrowd": 0, "bbox": [87, 0, 26, 58], "area": 938}, {"id": 2366543, "category_id": 1, "iscrowd": 0, "bbox": [522, 0, 60, 141], "area": 5942}, {"id": 1907756, "category_id": 1, "iscrowd": 0, "bbox": [617, 1, 22, 22], "area": 345}, {"id": 6377324, "category_id": 1, "iscrowd": 0, "bbox": [150, 61, 197, 327], "area": 25682}, {"id": 3810911, "category_id": 1, "iscrowd": 0, "bbox": [373, 1, 38, 114], "area": 2846}, {"id": 3876698, "category_id": 1, "iscrowd": 0, "bbox": [166, 0, 32, 89], "area": 1851}, {"id": 3680618, "category_id": 1, "iscrowd": 0, "bbox": [292, 1, 50, 116], "area": 3324}, {"id": 4606796, "category_id": 35, "iscrowd": 0, "bbox": [274, 355, 149, 38], "area": 1019}, {"id": 11974338, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 204], "area": 33570}, {"id": 8684932, "category_id": 178, "iscrowd": 0, "bbox": [0, 153, 640, 274], "area": 99884}, {"id": 6314844, "category_id": 198, "iscrowd": 0, "bbox": [0, 97, 640, 200], "area": 54202}], "file_name": "000000377113.png", "image_id": 377113}, {"segments_info": [{"id": 5125972, "category_id": 1, "iscrowd": 0, "bbox": [267, 158, 283, 262], "area": 39964}, {"id": 13740728, "category_id": 1, "iscrowd": 0, "bbox": [0, 159, 61, 268], "area": 12775}, {"id": 12291987, "category_id": 1, "iscrowd": 0, "bbox": [81, 166, 76, 229], "area": 10837}, {"id": 11897844, "category_id": 28, "iscrowd": 0, "bbox": [316, 26, 324, 381], "area": 65752}, {"id": 4935291, "category_id": 31, "iscrowd": 0, "bbox": [508, 387, 44, 40], "area": 1233}, {"id": 11697017, "category_id": 44, "iscrowd": 0, "bbox": [402, 341, 44, 67], "area": 2165}, {"id": 12885150, "category_id": 125, "iscrowd": 0, "bbox": [0, 305, 640, 122], "area": 28130}, {"id": 12430256, "category_id": 166, "iscrowd": 0, "bbox": [114, 0, 526, 304], "area": 45830}, {"id": 8876390, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 441, 262], "area": 44958}, {"id": 7233370, "category_id": 193, "iscrowd": 0, "bbox": [53, 254, 216, 87], "area": 5691}], "file_name": "000000377239.png", "image_id": 377239}, {"segments_info": [{"id": 793151, "category_id": 1, "iscrowd": 0, "bbox": [420, 0, 218, 94], "area": 14483}, {"id": 2232847, "category_id": 31, "iscrowd": 0, "bbox": [336, 54, 113, 87], "area": 5380}, {"id": 3292746, "category_id": 47, "iscrowd": 0, "bbox": [600, 303, 40, 101], "area": 2372}, {"id": 2505556, "category_id": 47, "iscrowd": 0, "bbox": [578, 31, 62, 80], "area": 3137}, {"id": 7896185, "category_id": 61, "iscrowd": 0, "bbox": [172, 158, 259, 279], "area": 48020}, {"id": 7691361, "category_id": 61, "iscrowd": 0, "bbox": [376, 146, 94, 89], "area": 6559}, {"id": 2506848, "category_id": 67, "iscrowd": 0, "bbox": [130, 73, 510, 399], "area": 60359}, {"id": 2047065, "category_id": 67, "iscrowd": 0, "bbox": [60, 223, 102, 136], "area": 5546}, {"id": 142348, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 453, 414], "area": 84946}, {"id": 986130, "category_id": 177, "iscrowd": 0, "bbox": [625, 461, 15, 20], "area": 87}, {"id": 10726059, "category_id": 195, "iscrowd": 0, "bbox": [469, 144, 171, 337], "area": 6361}], "file_name": "000000377368.png", "image_id": 377368}, {"segments_info": [{"id": 8816787, "category_id": 1, "iscrowd": 0, "bbox": [392, 103, 5, 12], "area": 46}, {"id": 8618884, "category_id": 1, "iscrowd": 0, "bbox": [565, 17, 6, 11], "area": 49}, {"id": 8816525, "category_id": 1, "iscrowd": 0, "bbox": [396, 99, 4, 12], "area": 28}, {"id": 3487289, "category_id": 1, "iscrowd": 0, "bbox": [524, 110, 3, 9], "area": 17}, {"id": 8619399, "category_id": 1, "iscrowd": 0, "bbox": [327, 0, 3, 7], "area": 15}, {"id": 11051935, "category_id": 1, "iscrowd": 0, "bbox": [101, 41, 3, 8], "area": 18}, {"id": 8748148, "category_id": 1, "iscrowd": 0, "bbox": [598, 135, 5, 14], "area": 49}, {"id": 8159633, "category_id": 1, "iscrowd": 0, "bbox": [227, 74, 4, 9], "area": 20}, {"id": 7040107, "category_id": 1, "iscrowd": 0, "bbox": [580, 17, 3, 11], "area": 27}, {"id": 6710883, "category_id": 1, "iscrowd": 0, "bbox": [574, 17, 4, 11], "area": 24}, {"id": 9539201, "category_id": 28, "iscrowd": 0, "bbox": [573, 60, 14, 7], "area": 85}, {"id": 9735035, "category_id": 28, "iscrowd": 0, "bbox": [613, 66, 15, 8], "area": 90}, {"id": 11775391, "category_id": 28, "iscrowd": 0, "bbox": [143, 238, 93, 64], "area": 4246}, {"id": 12106684, "category_id": 85, "iscrowd": 0, "bbox": [533, 196, 7, 16], "area": 96}, {"id": 7435381, "category_id": 85, "iscrowd": 0, "bbox": [506, 200, 14, 14], "area": 162}, {"id": 9604742, "category_id": 151, "iscrowd": 0, "bbox": [0, 141, 89, 60], "area": 3396}, {"id": 11908787, "category_id": 154, "iscrowd": 0, "bbox": [0, 0, 640, 145], "area": 47202}, {"id": 8880247, "category_id": 155, "iscrowd": 0, "bbox": [558, 0, 82, 22], "area": 1535}, {"id": 11123134, "category_id": 161, "iscrowd": 0, "bbox": [212, 368, 279, 112], "area": 19692}, {"id": 10332330, "category_id": 166, "iscrowd": 0, "bbox": [146, 276, 163, 204], "area": 5806}, {"id": 3227970, "category_id": 184, "iscrowd": 0, "bbox": [51, 104, 475, 165], "area": 11082}, {"id": 7897239, "category_id": 191, "iscrowd": 0, "bbox": [0, 16, 640, 464], "area": 106922}, {"id": 3759185, "category_id": 193, "iscrowd": 0, "bbox": [0, 36, 495, 252], "area": 41513}, {"id": 8358543, "category_id": 197, "iscrowd": 0, "bbox": [0, 106, 584, 341], "area": 42631}, {"id": 10594728, "category_id": 199, "iscrowd": 0, "bbox": [180, 106, 342, 294], "area": 1253}], "file_name": "000000377393.png", "image_id": 377393}, {"segments_info": [{"id": 9802131, "category_id": 1, "iscrowd": 0, "bbox": [114, 1, 50, 24], "area": 959}, {"id": 8615303, "category_id": 1, "iscrowd": 0, "bbox": [610, 0, 30, 45], "area": 1076}, {"id": 8818092, "category_id": 1, "iscrowd": 0, "bbox": [510, 1, 41, 64], "area": 1344}, {"id": 5133418, "category_id": 1, "iscrowd": 0, "bbox": [362, 13, 199, 283], "area": 16717}, {"id": 5993359, "category_id": 1, "iscrowd": 0, "bbox": [27, 0, 24, 26], "area": 465}, {"id": 6393771, "category_id": 1, "iscrowd": 0, "bbox": [41, 0, 21, 26], "area": 263}, {"id": 5594494, "category_id": 19, "iscrowd": 0, "bbox": [563, 22, 76, 148], "area": 4221}, {"id": 2635091, "category_id": 19, "iscrowd": 0, "bbox": [428, 116, 99, 271], "area": 15877}, {"id": 5661057, "category_id": 21, "iscrowd": 0, "bbox": [267, 177, 134, 98], "area": 8863}, {"id": 7306665, "category_id": 154, "iscrowd": 0, "bbox": [0, 65, 640, 362], "area": 155334}, {"id": 11580102, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 462, 193], "area": 54233}], "file_name": "000000377486.png", "image_id": 377486}, {"segments_info": [{"id": 7109246, "category_id": 24, "iscrowd": 0, "bbox": [44, 33, 388, 549], "area": 137089}, {"id": 4557949, "category_id": 193, "iscrowd": 0, "bbox": [0, 295, 432, 345], "area": 91660}], "file_name": "000000377497.png", "image_id": 377497}, {"segments_info": [{"id": 6321027, "category_id": 11, "iscrowd": 0, "bbox": [234, 194, 94, 288], "area": 14133}, {"id": 4346214, "category_id": 18, "iscrowd": 0, "bbox": [58, 159, 215, 463], "area": 59572}, {"id": 5861252, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 426, 425], "area": 113740}, {"id": 8492973, "category_id": 191, "iscrowd": 0, "bbox": [0, 315, 426, 325], "area": 83527}], "file_name": "000000377575.png", "image_id": 377575}, {"segments_info": [{"id": 12891314, "category_id": 1, "iscrowd": 0, "bbox": [319, 174, 46, 59], "area": 1263}, {"id": 11639445, "category_id": 1, "iscrowd": 0, "bbox": [302, 202, 46, 113], "area": 2630}, {"id": 7433836, "category_id": 1, "iscrowd": 0, "bbox": [223, 362, 48, 65], "area": 1808}, {"id": 11644331, "category_id": 1, "iscrowd": 0, "bbox": [233, 213, 76, 23], "area": 923}, {"id": 10717829, "category_id": 1, "iscrowd": 0, "bbox": [490, 74, 19, 47], "area": 496}, {"id": 5196104, "category_id": 1, "iscrowd": 0, "bbox": [77, 203, 48, 71], "area": 1728}, {"id": 2106406, "category_id": 39, "iscrowd": 0, "bbox": [228, 349, 17, 58], "area": 285}, {"id": 3618352, "category_id": 40, "iscrowd": 0, "bbox": [296, 257, 13, 17], "area": 134}, {"id": 5061950, "category_id": 40, "iscrowd": 0, "bbox": [501, 99, 7, 7], "area": 34}, {"id": 6321542, "category_id": 40, "iscrowd": 0, "bbox": [362, 206, 12, 6], "area": 55}, {"id": 7504753, "category_id": 138, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 263408}], "file_name": "000000377588.png", "image_id": 377588}, {"segments_info": [{"id": 2369417, "category_id": 1, "iscrowd": 0, "bbox": [299, 204, 10, 19], "area": 138}, {"id": 5656904, "category_id": 1, "iscrowd": 0, "bbox": [285, 206, 12, 16], "area": 117}, {"id": 5133934, "category_id": 1, "iscrowd": 0, "bbox": [255, 41, 124, 137], "area": 5457}, {"id": 5470546, "category_id": 1, "iscrowd": 0, "bbox": [515, 217, 12, 29], "area": 110}, {"id": 460552, "category_id": 41, "iscrowd": 0, "bbox": [285, 190, 75, 10], "area": 586}, {"id": 7966619, "category_id": 41, "iscrowd": 0, "bbox": [294, 182, 53, 13], "area": 84}, {"id": 7895165, "category_id": 144, "iscrowd": 0, "bbox": [0, 249, 640, 178], "area": 70266}, {"id": 3163979, "category_id": 184, "iscrowd": 0, "bbox": [383, 50, 257, 122], "area": 9934}, {"id": 4475974, "category_id": 185, "iscrowd": 0, "bbox": [0, 28, 640, 232], "area": 83446}, {"id": 15130070, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 155], "area": 49505}, {"id": 4804698, "category_id": 190, "iscrowd": 0, "bbox": [0, 251, 640, 176], "area": 35387}, {"id": 2114878, "category_id": 193, "iscrowd": 0, "bbox": [419, 238, 221, 32], "area": 2753}, {"id": 2499104, "category_id": 199, "iscrowd": 0, "bbox": [0, 217, 409, 90], "area": 15207}], "file_name": "000000377635.png", "image_id": 377635}, {"segments_info": [{"id": 2440013, "category_id": 88, "iscrowd": 0, "bbox": [183, 217, 150, 271], "area": 12862}, {"id": 3954280, "category_id": 88, "iscrowd": 0, "bbox": [3, 55, 452, 493], "area": 51683}, {"id": 4087664, "category_id": 88, "iscrowd": 0, "bbox": [45, 302, 99, 89], "area": 4575}, {"id": 6453899, "category_id": 100, "iscrowd": 0, "bbox": [138, 342, 82, 95], "area": 4504}, {"id": 3629198, "category_id": 154, "iscrowd": 0, "bbox": [0, 434, 487, 206], "area": 47878}, {"id": 7828307, "category_id": 178, "iscrowd": 0, "bbox": [0, 0, 487, 344], "area": 87694}, {"id": 4086104, "category_id": 184, "iscrowd": 0, "bbox": [272, 208, 36, 65], "area": 1015}], "file_name": "000000377670.png", "image_id": 377670}, {"segments_info": [{"id": 3288102, "category_id": 1, "iscrowd": 0, "bbox": [185, 235, 36, 105], "area": 2286}, {"id": 5457208, "category_id": 1, "iscrowd": 0, "bbox": [489, 230, 30, 26], "area": 416}, {"id": 5657171, "category_id": 1, "iscrowd": 0, "bbox": [237, 221, 18, 29], "area": 322}, {"id": 6711916, "category_id": 1, "iscrowd": 0, "bbox": [315, 226, 14, 31], "area": 261}, {"id": 4342334, "category_id": 1, "iscrowd": 0, "bbox": [221, 235, 21, 102], "area": 1369}, {"id": 1906711, "category_id": 1, "iscrowd": 0, "bbox": [71, 228, 26, 106], "area": 1753}, {"id": 6446426, "category_id": 1, "iscrowd": 0, "bbox": [132, 231, 31, 121], "area": 2480}, {"id": 2827807, "category_id": 1, "iscrowd": 0, "bbox": [350, 228, 26, 111], "area": 2026}, {"id": 2498841, "category_id": 1, "iscrowd": 0, "bbox": [294, 235, 34, 108], "area": 2244}, {"id": 3619132, "category_id": 1, "iscrowd": 0, "bbox": [240, 231, 30, 108], "area": 2231}, {"id": 2433562, "category_id": 1, "iscrowd": 0, "bbox": [90, 235, 26, 103], "area": 1600}, {"id": 3025443, "category_id": 1, "iscrowd": 0, "bbox": [324, 237, 29, 105], "area": 1503}, {"id": 3354666, "category_id": 1, "iscrowd": 0, "bbox": [268, 235, 25, 102], "area": 1464}, {"id": 4408392, "category_id": 1, "iscrowd": 1, "bbox": [215, 225, 141, 39], "area": 1120}, {"id": 7429449, "category_id": 6, "iscrowd": 0, "bbox": [377, 148, 234, 197], "area": 39610}, {"id": 2301977, "category_id": 27, "iscrowd": 0, "bbox": [63, 247, 11, 27], "area": 230}, {"id": 3812625, "category_id": 31, "iscrowd": 0, "bbox": [212, 277, 10, 21], "area": 138}, {"id": 2367516, "category_id": 31, "iscrowd": 0, "bbox": [358, 283, 16, 16], "area": 163}, {"id": 13615805, "category_id": 31, "iscrowd": 0, "bbox": [278, 294, 24, 34], "area": 521}, {"id": 5720122, "category_id": 31, "iscrowd": 0, "bbox": [327, 269, 23, 20], "area": 269}, {"id": 3158874, "category_id": 31, "iscrowd": 0, "bbox": [232, 289, 9, 24], "area": 158}, {"id": 7760010, "category_id": 92, "iscrowd": 0, "bbox": [456, 0, 25, 94], "area": 1442}, {"id": 12235178, "category_id": 149, "iscrowd": 0, "bbox": [0, 202, 640, 225], "area": 46149}, {"id": 11446949, "category_id": 191, "iscrowd": 0, "bbox": [0, 272, 389, 138], "area": 17479}, {"id": 8093824, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 357], "area": 142776}], "file_name": "000000377723.png", "image_id": 377723}, {"segments_info": [{"id": 10788535, "category_id": 60, "iscrowd": 0, "bbox": [477, 133, 163, 188], "area": 20575}, {"id": 10856122, "category_id": 60, "iscrowd": 0, "bbox": [389, 2, 167, 156], "area": 16914}, {"id": 5983049, "category_id": 60, "iscrowd": 0, "bbox": [43, 184, 285, 296], "area": 64549}, {"id": 10395834, "category_id": 60, "iscrowd": 0, "bbox": [231, 4, 195, 180], "area": 27560}, {"id": 13084879, "category_id": 60, "iscrowd": 0, "bbox": [309, 158, 238, 245], "area": 42327}, {"id": 4997696, "category_id": 60, "iscrowd": 0, "bbox": [3, 8, 237, 195], "area": 35968}, {"id": 10915737, "category_id": 100, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 69015}, {"id": 8750249, "category_id": 189, "iscrowd": 0, "bbox": [376, 0, 264, 480], "area": 24933}], "file_name": "000000377814.png", "image_id": 377814}, {"segments_info": [{"id": 7759446, "category_id": 9, "iscrowd": 0, "bbox": [208, 163, 118, 19], "area": 511}, {"id": 11380901, "category_id": 9, "iscrowd": 0, "bbox": [278, 146, 43, 14], "area": 374}, {"id": 5199445, "category_id": 9, "iscrowd": 0, "bbox": [227, 4, 257, 372], "area": 26893}, {"id": 4537139, "category_id": 9, "iscrowd": 0, "bbox": [207, 183, 113, 22], "area": 715}, {"id": 3684696, "category_id": 9, "iscrowd": 0, "bbox": [3, 217, 439, 79], "area": 16439}, {"id": 4803654, "category_id": 9, "iscrowd": 0, "bbox": [0, 181, 67, 34], "area": 1762}, {"id": 3617327, "category_id": 42, "iscrowd": 0, "bbox": [186, 186, 100, 16], "area": 904}, {"id": 7499114, "category_id": 42, "iscrowd": 0, "bbox": [213, 148, 74, 16], "area": 819}, {"id": 4606276, "category_id": 42, "iscrowd": 0, "bbox": [484, 332, 155, 67], "area": 5432}, {"id": 5263179, "category_id": 42, "iscrowd": 0, "bbox": [530, 269, 110, 75], "area": 5728}, {"id": 4537658, "category_id": 42, "iscrowd": 0, "bbox": [205, 166, 119, 14], "area": 1297}, {"id": 6907745, "category_id": 42, "iscrowd": 0, "bbox": [481, 215, 158, 47], "area": 5384}, {"id": 5987417, "category_id": 42, "iscrowd": 0, "bbox": [490, 127, 149, 52], "area": 4978}, {"id": 3816758, "category_id": 185, "iscrowd": 0, "bbox": [0, 62, 640, 418], "area": 162097}, {"id": 15916999, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 150], "area": 71908}], "file_name": "000000377882.png", "image_id": 377882}, {"segments_info": [{"id": 7631743, "category_id": 1, "iscrowd": 0, "bbox": [569, 164, 4, 15], "area": 49}, {"id": 5065291, "category_id": 1, "iscrowd": 0, "bbox": [539, 170, 15, 35], "area": 311}, {"id": 8422026, "category_id": 1, "iscrowd": 0, "bbox": [583, 170, 12, 21], "area": 156}, {"id": 3879985, "category_id": 1, "iscrowd": 0, "bbox": [554, 167, 16, 45], "area": 445}, {"id": 5853522, "category_id": 1, "iscrowd": 0, "bbox": [592, 166, 8, 43], "area": 236}, {"id": 2761507, "category_id": 1, "iscrowd": 0, "bbox": [614, 163, 26, 57], "area": 640}, {"id": 7367278, "category_id": 1, "iscrowd": 0, "bbox": [629, 164, 7, 16], "area": 52}, {"id": 6772303, "category_id": 1, "iscrowd": 0, "bbox": [613, 160, 12, 52], "area": 384}, {"id": 4407615, "category_id": 3, "iscrowd": 0, "bbox": [600, 162, 15, 31], "area": 275}, {"id": 7697783, "category_id": 3, "iscrowd": 0, "bbox": [510, 252, 129, 173], "area": 18454}, {"id": 6510673, "category_id": 3, "iscrowd": 0, "bbox": [1, 187, 81, 87], "area": 6018}, {"id": 10922160, "category_id": 6, "iscrowd": 0, "bbox": [0, 143, 91, 58], "area": 3809}, {"id": 4349035, "category_id": 8, "iscrowd": 0, "bbox": [88, 53, 368, 338], "area": 100565}, {"id": 2918054, "category_id": 10, "iscrowd": 0, "bbox": [158, 42, 24, 35], "area": 708}, {"id": 2386310, "category_id": 10, "iscrowd": 0, "bbox": [554, 101, 11, 31], "area": 223}, {"id": 3424867, "category_id": 10, "iscrowd": 0, "bbox": [550, 139, 13, 13], "area": 163}, {"id": 7508899, "category_id": 48, "iscrowd": 0, "bbox": [475, 81, 7, 20], "area": 63}, {"id": 2832192, "category_id": 48, "iscrowd": 0, "bbox": [218, 110, 9, 77], "area": 321}, {"id": 3950670, "category_id": 48, "iscrowd": 0, "bbox": [97, 172, 16, 99], "area": 661}, {"id": 1843494, "category_id": 49, "iscrowd": 0, "bbox": [267, 107, 9, 82], "area": 356}, {"id": 7891811, "category_id": 92, "iscrowd": 0, "bbox": [599, 104, 12, 22], "area": 203}, {"id": 4013629, "category_id": 149, "iscrowd": 0, "bbox": [50, 187, 590, 239], "area": 9572}, {"id": 1907235, "category_id": 166, "iscrowd": 0, "bbox": [578, 120, 62, 52], "area": 1900}, {"id": 5330258, "category_id": 181, "iscrowd": 0, "bbox": [474, 112, 72, 86], "area": 4223}, {"id": 4728599, "category_id": 186, "iscrowd": 0, "bbox": [534, 99, 106, 24], "area": 1098}, {"id": 9937059, "category_id": 191, "iscrowd": 0, "bbox": [0, 186, 640, 240], "area": 40830}, {"id": 6580071, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 568, 171], "area": 41293}], "file_name": "000000377946.png", "image_id": 377946}, {"segments_info": [{"id": 4877453, "category_id": 74, "iscrowd": 0, "bbox": [520, 154, 90, 124], "area": 8317}, {"id": 5865115, "category_id": 76, "iscrowd": 0, "bbox": [32, 74, 501, 178], "area": 64329}, {"id": 1332625, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 337], "area": 142652}], "file_name": "000000378099.png", "image_id": 378099}, {"segments_info": [{"id": 3617330, "category_id": 1, "iscrowd": 0, "bbox": [321, 99, 171, 173], "area": 6197}, {"id": 9605263, "category_id": 42, "iscrowd": 0, "bbox": [448, 250, 59, 49], "area": 1430}, {"id": 10722973, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 454], "area": 282758}], "file_name": "000000378116.png", "image_id": 378116}, {"segments_info": [{"id": 6906463, "category_id": 1, "iscrowd": 0, "bbox": [146, 214, 9, 20], "area": 113}, {"id": 7964076, "category_id": 1, "iscrowd": 0, "bbox": [167, 264, 20, 26], "area": 281}, {"id": 9475752, "category_id": 1, "iscrowd": 0, "bbox": [225, 265, 16, 18], "area": 164}, {"id": 5069419, "category_id": 2, "iscrowd": 0, "bbox": [230, 221, 17, 18], "area": 174}, {"id": 8099232, "category_id": 2, "iscrowd": 0, "bbox": [4, 230, 62, 19], "area": 507}, {"id": 4081749, "category_id": 2, "iscrowd": 0, "bbox": [184, 228, 18, 15], "area": 205}, {"id": 6121853, "category_id": 2, "iscrowd": 0, "bbox": [115, 230, 33, 14], "area": 228}, {"id": 7834010, "category_id": 2, "iscrowd": 0, "bbox": [63, 227, 51, 20], "area": 573}, {"id": 5924730, "category_id": 2, "iscrowd": 0, "bbox": [153, 226, 19, 18], "area": 208}, {"id": 8027257, "category_id": 3, "iscrowd": 0, "bbox": [493, 215, 20, 10], "area": 159}, {"id": 6054501, "category_id": 3, "iscrowd": 0, "bbox": [429, 214, 30, 15], "area": 320}, {"id": 7831689, "category_id": 3, "iscrowd": 0, "bbox": [521, 214, 21, 11], "area": 157}, {"id": 8027516, "category_id": 3, "iscrowd": 0, "bbox": [471, 215, 24, 13], "area": 217}, {"id": 7305390, "category_id": 3, "iscrowd": 0, "bbox": [392, 215, 37, 15], "area": 399}, {"id": 7042177, "category_id": 9, "iscrowd": 0, "bbox": [114, 228, 373, 94], "area": 18898}, {"id": 7765644, "category_id": 9, "iscrowd": 0, "bbox": [552, 221, 59, 14], "area": 602}, {"id": 8618374, "category_id": 9, "iscrowd": 0, "bbox": [597, 220, 37, 12], "area": 314}, {"id": 3224898, "category_id": 95, "iscrowd": 0, "bbox": [606, 205, 34, 23], "area": 390}, {"id": 6123391, "category_id": 148, "iscrowd": 0, "bbox": [0, 216, 640, 211], "area": 90894}, {"id": 6651289, "category_id": 171, "iscrowd": 0, "bbox": [0, 219, 547, 61], "area": 6014}, {"id": 7307393, "category_id": 184, "iscrowd": 0, "bbox": [189, 0, 451, 241], "area": 37181}, {"id": 13811377, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 529, 151], "area": 47163}, {"id": 6387076, "category_id": 191, "iscrowd": 0, "bbox": [237, 219, 403, 208], "area": 7344}, {"id": 6385019, "category_id": 197, "iscrowd": 0, "bbox": [0, 7, 640, 227], "area": 57806}], "file_name": "000000378139.png", "image_id": 378139}, {"segments_info": [{"id": 5129023, "category_id": 1, "iscrowd": 0, "bbox": [136, 261, 113, 140], "area": 7655}, {"id": 14078673, "category_id": 35, "iscrowd": 0, "bbox": [214, 409, 48, 12], "area": 71}, {"id": 8550516, "category_id": 36, "iscrowd": 0, "bbox": [229, 409, 32, 12], "area": 217}, {"id": 16117998, "category_id": 159, "iscrowd": 0, "bbox": [0, 248, 427, 392], "area": 145361}, {"id": 5593432, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 631], "area": 100338}, {"id": 16118254, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 223], "area": 19494}], "file_name": "000000378244.png", "image_id": 378244}, {"segments_info": [{"id": 1847881, "category_id": 1, "iscrowd": 0, "bbox": [2, 2, 106, 123], "area": 9450}, {"id": 3362441, "category_id": 1, "iscrowd": 0, "bbox": [107, 0, 427, 123], "area": 46337}, {"id": 6845314, "category_id": 48, "iscrowd": 0, "bbox": [542, 275, 98, 111], "area": 2064}, {"id": 6186872, "category_id": 49, "iscrowd": 0, "bbox": [548, 285, 92, 82], "area": 883}, {"id": 4278350, "category_id": 49, "iscrowd": 0, "bbox": [597, 299, 43, 32], "area": 414}, {"id": 3044021, "category_id": 59, "iscrowd": 0, "bbox": [82, 114, 418, 218], "area": 66636}, {"id": 3362671, "category_id": 67, "iscrowd": 0, "bbox": [3, 60, 637, 363], "area": 130355}, {"id": 3230061, "category_id": 177, "iscrowd": 0, "bbox": [349, 0, 291, 105], "area": 5716}, {"id": 14279910, "category_id": 181, "iscrowd": 0, "bbox": [523, 0, 117, 30], "area": 3102}, {"id": 3031894, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 5111}], "file_name": "000000378284.png", "image_id": 378284}, {"segments_info": [{"id": 8753055, "category_id": 24, "iscrowd": 0, "bbox": [161, 170, 18, 32], "area": 391}, {"id": 7830923, "category_id": 24, "iscrowd": 0, "bbox": [75, 196, 64, 54], "area": 1475}, {"id": 9147811, "category_id": 24, "iscrowd": 0, "bbox": [378, 198, 102, 62], "area": 2880}, {"id": 6910592, "category_id": 24, "iscrowd": 0, "bbox": [182, 202, 34, 55], "area": 642}, {"id": 8424603, "category_id": 24, "iscrowd": 0, "bbox": [108, 160, 53, 44], "area": 933}, {"id": 6844542, "category_id": 24, "iscrowd": 0, "bbox": [305, 202, 75, 54], "area": 1970}, {"id": 6713986, "category_id": 24, "iscrowd": 0, "bbox": [138, 173, 28, 39], "area": 653}, {"id": 7174022, "category_id": 24, "iscrowd": 0, "bbox": [37, 176, 70, 52], "area": 1662}, {"id": 8555165, "category_id": 24, "iscrowd": 0, "bbox": [324, 174, 69, 30], "area": 1120}, {"id": 6713988, "category_id": 24, "iscrowd": 0, "bbox": [206, 175, 21, 51], "area": 671}, {"id": 7370630, "category_id": 24, "iscrowd": 0, "bbox": [136, 208, 65, 71], "area": 1418}, {"id": 7634571, "category_id": 24, "iscrowd": 0, "bbox": [64, 191, 64, 56], "area": 763}, {"id": 8423830, "category_id": 24, "iscrowd": 0, "bbox": [102, 222, 100, 66], "area": 2814}, {"id": 5792369, "category_id": 24, "iscrowd": 1, "bbox": [7, 141, 423, 68], "area": 6063}, {"id": 4809817, "category_id": 184, "iscrowd": 0, "bbox": [0, 32, 500, 156], "area": 44181}, {"id": 15120011, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 129], "area": 36923}, {"id": 9808820, "category_id": 194, "iscrowd": 0, "bbox": [0, 140, 500, 206], "area": 67046}], "file_name": "000000378453.png", "image_id": 378453}, {"segments_info": [{"id": 7761528, "category_id": 1, "iscrowd": 0, "bbox": [48, 223, 248, 141], "area": 10871}, {"id": 4029540, "category_id": 34, "iscrowd": 0, "bbox": [135, 327, 46, 37], "area": 1272}, {"id": 7699838, "category_id": 154, "iscrowd": 0, "bbox": [0, 371, 427, 269], "area": 102093}, {"id": 8022107, "category_id": 155, "iscrowd": 0, "bbox": [0, 302, 427, 138], "area": 33983}, {"id": 10845283, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 324], "area": 124902}], "file_name": "000000378454.png", "image_id": 378454}, {"segments_info": [{"id": 4340022, "category_id": 1, "iscrowd": 0, "bbox": [265, 30, 36, 108], "area": 1846}, {"id": 6444626, "category_id": 1, "iscrowd": 0, "bbox": [161, 37, 27, 64], "area": 909}, {"id": 4471612, "category_id": 1, "iscrowd": 0, "bbox": [69, 41, 42, 112], "area": 1941}, {"id": 3944752, "category_id": 1, "iscrowd": 0, "bbox": [48, 30, 38, 78], "area": 1595}, {"id": 5399662, "category_id": 1, "iscrowd": 0, "bbox": [123, 165, 92, 123], "area": 6720}, {"id": 4143692, "category_id": 1, "iscrowd": 0, "bbox": [178, 25, 53, 109], "area": 3401}, {"id": 4143671, "category_id": 1, "iscrowd": 0, "bbox": [286, 21, 31, 93], "area": 1317}, {"id": 8481639, "category_id": 1, "iscrowd": 0, "bbox": [282, 43, 75, 225], "area": 9694}, {"id": 4607846, "category_id": 1, "iscrowd": 0, "bbox": [241, 232, 153, 189], "area": 14522}, {"id": 7301995, "category_id": 2, "iscrowd": 0, "bbox": [350, 95, 57, 75], "area": 2834}, {"id": 6323557, "category_id": 52, "iscrowd": 0, "bbox": [198, 326, 26, 22], "area": 334}, {"id": 5144419, "category_id": 52, "iscrowd": 0, "bbox": [351, 521, 63, 47], "area": 1075}, {"id": 5996387, "category_id": 52, "iscrowd": 0, "bbox": [166, 445, 66, 64], "area": 2973}, {"id": 5403479, "category_id": 52, "iscrowd": 0, "bbox": [166, 327, 32, 23], "area": 459}, {"id": 5010009, "category_id": 52, "iscrowd": 0, "bbox": [224, 405, 72, 81], "area": 3104}, {"id": 4552798, "category_id": 52, "iscrowd": 0, "bbox": [120, 485, 98, 120], "area": 6533}, {"id": 6332799, "category_id": 52, "iscrowd": 0, "bbox": [191, 545, 56, 56], "area": 1953}, {"id": 5077080, "category_id": 52, "iscrowd": 0, "bbox": [276, 402, 43, 62], "area": 1655}, {"id": 6589816, "category_id": 52, "iscrowd": 0, "bbox": [386, 595, 22, 18], "area": 296}, {"id": 5608564, "category_id": 52, "iscrowd": 0, "bbox": [267, 462, 68, 79], "area": 3065}, {"id": 5073749, "category_id": 52, "iscrowd": 0, "bbox": [295, 439, 78, 82], "area": 3105}, {"id": 6327419, "category_id": 52, "iscrowd": 0, "bbox": [373, 492, 52, 50], "area": 1440}, {"id": 6588268, "category_id": 52, "iscrowd": 0, "bbox": [95, 456, 60, 68], "area": 2451}, {"id": 4678481, "category_id": 52, "iscrowd": 1, "bbox": [91, 13, 334, 627], "area": 40102}, {"id": 4476223, "category_id": 122, "iscrowd": 0, "bbox": [129, 190, 296, 326], "area": 3708}, {"id": 5656922, "category_id": 166, "iscrowd": 0, "bbox": [0, 0, 425, 130], "area": 15781}, {"id": 9808027, "category_id": 184, "iscrowd": 0, "bbox": [48, 0, 84, 581], "area": 4555}, {"id": 3552317, "category_id": 189, "iscrowd": 0, "bbox": [387, 219, 38, 55], "area": 765}, {"id": 6711659, "category_id": 194, "iscrowd": 0, "bbox": [0, 15, 425, 625], "area": 51862}, {"id": 5529454, "category_id": 195, "iscrowd": 0, "bbox": [403, 139, 22, 23], "area": 327}, {"id": 5927276, "category_id": 196, "iscrowd": 0, "bbox": [0, 137, 320, 311], "area": 37791}], "file_name": "000000378515.png", "image_id": 378515}, {"segments_info": [{"id": 8427174, "category_id": 47, "iscrowd": 0, "bbox": [273, 126, 151, 246], "area": 26518}, {"id": 2900577, "category_id": 60, "iscrowd": 0, "bbox": [53, 321, 248, 187], "area": 37797}, {"id": 1719135, "category_id": 67, "iscrowd": 0, "bbox": [1, 492, 421, 141], "area": 33055}, {"id": 10924732, "category_id": 67, "iscrowd": 0, "bbox": [1, 54, 425, 511], "area": 105728}, {"id": 4155795, "category_id": 189, "iscrowd": 0, "bbox": [0, 238, 426, 402], "area": 5394}, {"id": 7506329, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 426, 242], "area": 60431}], "file_name": "000000378605.png", "image_id": 378605}, {"segments_info": [{"id": 6838868, "category_id": 1, "iscrowd": 0, "bbox": [562, 176, 11, 14], "area": 74}, {"id": 6705738, "category_id": 1, "iscrowd": 0, "bbox": [132, 167, 11, 38], "area": 271}, {"id": 4930869, "category_id": 1, "iscrowd": 0, "bbox": [546, 176, 14, 25], "area": 210}, {"id": 4735050, "category_id": 1, "iscrowd": 0, "bbox": [524, 162, 18, 49], "area": 503}, {"id": 1840918, "category_id": 1, "iscrowd": 0, "bbox": [400, 182, 15, 29], "area": 221}, {"id": 8024169, "category_id": 1, "iscrowd": 0, "bbox": [488, 154, 16, 40], "area": 421}, {"id": 5457216, "category_id": 1, "iscrowd": 0, "bbox": [199, 179, 25, 45], "area": 440}, {"id": 3814715, "category_id": 1, "iscrowd": 0, "bbox": [238, 46, 177, 224], "area": 11460}, {"id": 5459022, "category_id": 1, "iscrowd": 0, "bbox": [253, 172, 20, 51], "area": 716}, {"id": 6969169, "category_id": 1, "iscrowd": 0, "bbox": [502, 157, 13, 44], "area": 321}, {"id": 3287855, "category_id": 1, "iscrowd": 0, "bbox": [162, 180, 18, 23], "area": 223}, {"id": 5393737, "category_id": 1, "iscrowd": 0, "bbox": [455, 182, 18, 30], "area": 280}, {"id": 3155490, "category_id": 1, "iscrowd": 0, "bbox": [148, 178, 12, 23], "area": 173}, {"id": 4735036, "category_id": 1, "iscrowd": 1, "bbox": [14, 146, 606, 81], "area": 10593}, {"id": 10855582, "category_id": 3, "iscrowd": 0, "bbox": [473, 188, 23, 12], "area": 193}, {"id": 13092287, "category_id": 3, "iscrowd": 0, "bbox": [277, 177, 29, 17], "area": 379}, {"id": 8418668, "category_id": 3, "iscrowd": 0, "bbox": [99, 166, 34, 18], "area": 300}, {"id": 6115398, "category_id": 3, "iscrowd": 0, "bbox": [1, 164, 20, 7], "area": 105}, {"id": 4340023, "category_id": 3, "iscrowd": 0, "bbox": [46, 151, 36, 20], "area": 319}, {"id": 6973037, "category_id": 41, "iscrowd": 0, "bbox": [314, 262, 96, 29], "area": 1440}, {"id": 5985869, "category_id": 184, "iscrowd": 0, "bbox": [0, 68, 479, 127], "area": 6664}, {"id": 15780780, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 198], "area": 91694}, {"id": 9605777, "category_id": 191, "iscrowd": 0, "bbox": [0, 183, 640, 243], "area": 128364}, {"id": 7234648, "category_id": 197, "iscrowd": 0, "bbox": [0, 127, 528, 80], "area": 4239}, {"id": 2761759, "category_id": 199, "iscrowd": 0, "bbox": [427, 181, 34, 37], "area": 189}], "file_name": "000000378673.png", "image_id": 378673}, {"segments_info": [{"id": 3292510, "category_id": 1, "iscrowd": 0, "bbox": [203, 0, 75, 87], "area": 4334}, {"id": 3565198, "category_id": 1, "iscrowd": 0, "bbox": [141, 0, 49, 45], "area": 1373}, {"id": 3361148, "category_id": 1, "iscrowd": 0, "bbox": [281, 0, 50, 92], "area": 3000}, {"id": 3100292, "category_id": 1, "iscrowd": 0, "bbox": [327, 0, 75, 73], "area": 2653}, {"id": 5270678, "category_id": 1, "iscrowd": 0, "bbox": [91, 1, 77, 67], "area": 2464}, {"id": 4081822, "category_id": 1, "iscrowd": 0, "bbox": [36, 0, 64, 109], "area": 2317}, {"id": 10395832, "category_id": 1, "iscrowd": 0, "bbox": [509, 1, 34, 92], "area": 1726}, {"id": 10661565, "category_id": 8, "iscrowd": 0, "bbox": [412, 0, 228, 91], "area": 6670}, {"id": 2567997, "category_id": 31, "iscrowd": 0, "bbox": [263, 0, 32, 70], "area": 1225}, {"id": 2834087, "category_id": 51, "iscrowd": 0, "bbox": [1, 269, 66, 91], "area": 4131}, {"id": 2456273, "category_id": 55, "iscrowd": 0, "bbox": [14, 38, 10, 4], "area": 33}, {"id": 2255808, "category_id": 55, "iscrowd": 0, "bbox": [0, 28, 45, 15], "area": 439}, {"id": 2392790, "category_id": 55, "iscrowd": 0, "bbox": [32, 37, 8, 4], "area": 29}, {"id": 2910938, "category_id": 57, "iscrowd": 0, "bbox": [458, 198, 29, 11], "area": 202}, {"id": 2974166, "category_id": 57, "iscrowd": 0, "bbox": [455, 191, 26, 12], "area": 192}, {"id": 4293344, "category_id": 57, "iscrowd": 0, "bbox": [448, 199, 18, 29], "area": 288}, {"id": 2585308, "category_id": 57, "iscrowd": 0, "bbox": [424, 229, 47, 13], "area": 276}, {"id": 3309030, "category_id": 57, "iscrowd": 0, "bbox": [461, 211, 40, 12], "area": 233}, {"id": 4426220, "category_id": 57, "iscrowd": 0, "bbox": [474, 227, 12, 7], "area": 57}, {"id": 3174623, "category_id": 57, "iscrowd": 0, "bbox": [366, 196, 29, 25], "area": 466}, {"id": 3046631, "category_id": 57, "iscrowd": 0, "bbox": [465, 219, 23, 8], "area": 145}, {"id": 2978272, "category_id": 57, "iscrowd": 0, "bbox": [462, 207, 31, 9], "area": 146}, {"id": 4345949, "category_id": 67, "iscrowd": 0, "bbox": [2, 46, 78, 73], "area": 1462}, {"id": 5601696, "category_id": 100, "iscrowd": 0, "bbox": [0, 22, 640, 404], "area": 28217}, {"id": 4212819, "category_id": 109, "iscrowd": 0, "bbox": [522, 0, 56, 73], "area": 2498}, {"id": 3556445, "category_id": 194, "iscrowd": 0, "bbox": [0, 86, 640, 340], "area": 9355}, {"id": 2648499, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 161391}], "file_name": "000000378873.png", "image_id": 378873}, {"segments_info": [{"id": 11382189, "category_id": 1, "iscrowd": 0, "bbox": [92, 142, 70, 181], "area": 9215}, {"id": 9803157, "category_id": 1, "iscrowd": 0, "bbox": [431, 122, 69, 212], "area": 10233}, {"id": 8289918, "category_id": 1, "iscrowd": 0, "bbox": [71, 41, 405, 289], "area": 42325}, {"id": 4671303, "category_id": 43, "iscrowd": 0, "bbox": [0, 78, 93, 187], "area": 7657}, {"id": 7829367, "category_id": 62, "iscrowd": 0, "bbox": [52, 253, 53, 74], "area": 2615}, {"id": 6118749, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 500, 71], "area": 24020}, {"id": 1907997, "category_id": 185, "iscrowd": 0, "bbox": [0, 52, 500, 282], "area": 61713}], "file_name": "000000379332.png", "image_id": 379332}, {"segments_info": [{"id": 859727, "category_id": 15, "iscrowd": 0, "bbox": [25, 345, 226, 133], "area": 8320}, {"id": 1646397, "category_id": 63, "iscrowd": 0, "bbox": [339, 283, 224, 189], "area": 16959}, {"id": 3364212, "category_id": 65, "iscrowd": 0, "bbox": [471, 196, 70, 57], "area": 2825}, {"id": 2052996, "category_id": 73, "iscrowd": 0, "bbox": [92, 378, 84, 29], "area": 1634}, {"id": 2642289, "category_id": 75, "iscrowd": 0, "bbox": [485, 355, 22, 15], "area": 172}, {"id": 13555432, "category_id": 75, "iscrowd": 0, "bbox": [564, 455, 37, 25], "area": 539}, {"id": 795012, "category_id": 84, "iscrowd": 0, "bbox": [282, 265, 8, 26], "area": 94}, {"id": 1652061, "category_id": 84, "iscrowd": 0, "bbox": [315, 263, 38, 27], "area": 865}, {"id": 1454699, "category_id": 84, "iscrowd": 0, "bbox": [413, 221, 3, 29], "area": 57}, {"id": 1185106, "category_id": 84, "iscrowd": 0, "bbox": [381, 219, 9, 31], "area": 135}, {"id": 993386, "category_id": 84, "iscrowd": 0, "bbox": [434, 220, 6, 29], "area": 120}, {"id": 1666979, "category_id": 84, "iscrowd": 0, "bbox": [431, 224, 4, 26], "area": 67}, {"id": 1652856, "category_id": 84, "iscrowd": 0, "bbox": [413, 265, 9, 31], "area": 173}, {"id": 476032, "category_id": 84, "iscrowd": 0, "bbox": [289, 323, 38, 7], "area": 204}, {"id": 861789, "category_id": 84, "iscrowd": 0, "bbox": [416, 225, 6, 25], "area": 124}, {"id": 1318001, "category_id": 84, "iscrowd": 0, "bbox": [354, 281, 37, 4], "area": 117}, {"id": 1658492, "category_id": 84, "iscrowd": 0, "bbox": [393, 324, 35, 4], "area": 87}, {"id": 733316, "category_id": 84, "iscrowd": 0, "bbox": [297, 271, 3, 20], "area": 58}, {"id": 2114923, "category_id": 84, "iscrowd": 0, "bbox": [356, 267, 35, 12], "area": 367}, {"id": 1321811, "category_id": 84, "iscrowd": 1, "bbox": [272, 167, 169, 172], "area": 7650}, {"id": 5535376, "category_id": 109, "iscrowd": 0, "bbox": [459, 127, 27, 77], "area": 1633}, {"id": 3241893, "category_id": 112, "iscrowd": 0, "bbox": [432, 8, 151, 290], "area": 14415}, {"id": 14477554, "category_id": 130, "iscrowd": 0, "bbox": [539, 192, 101, 279], "area": 11514}, {"id": 4441837, "category_id": 141, "iscrowd": 0, "bbox": [498, 346, 142, 84], "area": 5948}, {"id": 1252143, "category_id": 156, "iscrowd": 0, "bbox": [268, 72, 179, 275], "area": 32149}, {"id": 6138605, "category_id": 189, "iscrowd": 0, "bbox": [503, 427, 137, 53], "area": 3542}, {"id": 1193582, "category_id": 190, "iscrowd": 0, "bbox": [66, 341, 355, 139], "area": 19575}, {"id": 3834040, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 152625}, {"id": 2114411, "category_id": 200, "iscrowd": 0, "bbox": [248, 254, 312, 226], "area": 8790}], "file_name": "000000379441.png", "image_id": 379441}, {"segments_info": [{"id": 9339781, "category_id": 5, "iscrowd": 0, "bbox": [117, 125, 237, 187], "area": 14921}, {"id": 13141076, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 442, 442], "area": 180229}], "file_name": "000000379453.png", "image_id": 379453}, {"segments_info": [{"id": 2835021, "category_id": 46, "iscrowd": 0, "bbox": [27, 298, 33, 80], "area": 1566}, {"id": 2439236, "category_id": 46, "iscrowd": 0, "bbox": [263, 395, 80, 201], "area": 6982}, {"id": 2833992, "category_id": 46, "iscrowd": 0, "bbox": [52, 295, 29, 76], "area": 1194}, {"id": 2968157, "category_id": 46, "iscrowd": 0, "bbox": [214, 406, 94, 232], "area": 13100}, {"id": 3163737, "category_id": 46, "iscrowd": 0, "bbox": [266, 298, 15, 28], "area": 319}, {"id": 3757938, "category_id": 46, "iscrowd": 0, "bbox": [238, 296, 32, 28], "area": 778}, {"id": 3428963, "category_id": 46, "iscrowd": 0, "bbox": [275, 327, 34, 72], "area": 1684}, {"id": 3429999, "category_id": 46, "iscrowd": 0, "bbox": [230, 324, 50, 83], "area": 3015}, {"id": 1186362, "category_id": 62, "iscrowd": 0, "bbox": [446, 384, 39, 128], "area": 3209}, {"id": 723982, "category_id": 62, "iscrowd": 0, "bbox": [350, 312, 34, 87], "area": 1493}, {"id": 1385566, "category_id": 62, "iscrowd": 0, "bbox": [392, 348, 31, 78], "area": 1691}, {"id": 1120289, "category_id": 62, "iscrowd": 0, "bbox": [333, 287, 41, 58], "area": 1244}, {"id": 1053718, "category_id": 62, "iscrowd": 0, "bbox": [317, 250, 16, 70], "area": 797}, {"id": 2771549, "category_id": 67, "iscrowd": 0, "bbox": [204, 354, 162, 43], "area": 3025}, {"id": 1978429, "category_id": 67, "iscrowd": 0, "bbox": [107, 426, 378, 208], "area": 33938}, {"id": 2636873, "category_id": 67, "iscrowd": 0, "bbox": [238, 274, 101, 74], "area": 3273}, {"id": 2177388, "category_id": 67, "iscrowd": 0, "bbox": [0, 301, 226, 315], "area": 46793}, {"id": 5870523, "category_id": 67, "iscrowd": 0, "bbox": [263, 248, 35, 8], "area": 171}, {"id": 4683408, "category_id": 67, "iscrowd": 0, "bbox": [257, 262, 54, 15], "area": 620}, {"id": 3760003, "category_id": 67, "iscrowd": 0, "bbox": [264, 246, 29, 4], "area": 97}, {"id": 5474470, "category_id": 67, "iscrowd": 0, "bbox": [262, 256, 37, 6], "area": 184}, {"id": 2111301, "category_id": 67, "iscrowd": 0, "bbox": [186, 396, 233, 91], "area": 6912}, {"id": 3629176, "category_id": 67, "iscrowd": 0, "bbox": [202, 258, 34, 27], "area": 415}, {"id": 9216425, "category_id": 130, "iscrowd": 0, "bbox": [115, 28, 213, 297], "area": 6876}, {"id": 1780027, "category_id": 189, "iscrowd": 0, "bbox": [52, 235, 433, 405], "area": 12134}, {"id": 1119770, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 485, 355], "area": 129786}], "file_name": "000000379476.png", "image_id": 379476}, {"segments_info": [{"id": 4934995, "category_id": 22, "iscrowd": 0, "bbox": [50, 221, 128, 92], "area": 9657}, {"id": 4079685, "category_id": 22, "iscrowd": 0, "bbox": [176, 253, 28, 55], "area": 1047}, {"id": 6249054, "category_id": 24, "iscrowd": 0, "bbox": [174, 396, 294, 160], "area": 26034}, {"id": 16639458, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 476, 168], "area": 79036}, {"id": 15907237, "category_id": 192, "iscrowd": 0, "bbox": [0, 163, 476, 27], "area": 9940}, {"id": 7966617, "category_id": 193, "iscrowd": 0, "bbox": [0, 182, 476, 458], "area": 178525}], "file_name": "000000379533.png", "image_id": 379533}, {"segments_info": [{"id": 5393738, "category_id": 3, "iscrowd": 0, "bbox": [59, 300, 49, 17], "area": 389}, {"id": 11382446, "category_id": 3, "iscrowd": 0, "bbox": [543, 341, 23, 21], "area": 258}, {"id": 5460300, "category_id": 3, "iscrowd": 0, "bbox": [563, 319, 77, 58], "area": 1795}, {"id": 6776420, "category_id": 3, "iscrowd": 0, "bbox": [140, 312, 26, 18], "area": 219}, {"id": 2964064, "category_id": 7, "iscrowd": 0, "bbox": [219, 106, 301, 312], "area": 84834}, {"id": 4868231, "category_id": 13, "iscrowd": 0, "bbox": [100, 292, 7, 8], "area": 47}, {"id": 4341916, "category_id": 13, "iscrowd": 0, "bbox": [570, 235, 35, 37], "area": 1095}, {"id": 9800612, "category_id": 92, "iscrowd": 0, "bbox": [507, 109, 21, 41], "area": 501}, {"id": 5793139, "category_id": 125, "iscrowd": 0, "bbox": [186, 373, 454, 120], "area": 13036}, {"id": 5331301, "category_id": 147, "iscrowd": 0, "bbox": [0, 305, 640, 188], "area": 16146}, {"id": 8487816, "category_id": 149, "iscrowd": 0, "bbox": [0, 338, 640, 155], "area": 42547}, {"id": 11650766, "category_id": 151, "iscrowd": 0, "bbox": [626, 137, 14, 28], "area": 246}, {"id": 4477004, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 355], "area": 70472}, {"id": 12435396, "category_id": 185, "iscrowd": 0, "bbox": [539, 338, 21, 24], "area": 197}, {"id": 15460838, "category_id": 187, "iscrowd": 0, "bbox": [82, 0, 558, 222], "area": 47900}, {"id": 6912386, "category_id": 191, "iscrowd": 0, "bbox": [53, 305, 587, 103], "area": 4927}, {"id": 7180702, "category_id": 193, "iscrowd": 0, "bbox": [176, 339, 22, 15], "area": 216}, {"id": 8556695, "category_id": 197, "iscrowd": 0, "bbox": [503, 109, 137, 237], "area": 16740}], "file_name": "000000379800.png", "image_id": 379800}, {"segments_info": [{"id": 8358540, "category_id": 75, "iscrowd": 0, "bbox": [370, 2, 194, 317], "area": 27874}, {"id": 3488050, "category_id": 84, "iscrowd": 0, "bbox": [8, 1, 307, 353], "area": 80868}, {"id": 5395803, "category_id": 84, "iscrowd": 0, "bbox": [344, 21, 275, 339], "area": 50532}, {"id": 7634031, "category_id": 84, "iscrowd": 0, "bbox": [271, 22, 66, 330], "area": 11008}, {"id": 3691105, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 21873}, {"id": 7043197, "category_id": 195, "iscrowd": 0, "bbox": [86, 0, 469, 360], "area": 13962}], "file_name": "000000379842.png", "image_id": 379842}, {"segments_info": [{"id": 8159618, "category_id": 19, "iscrowd": 0, "bbox": [43, 110, 344, 462], "area": 69779}, {"id": 1975320, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 429, 194], "area": 66071}], "file_name": "000000380203.png", "image_id": 380203}, {"segments_info": [{"id": 4995392, "category_id": 1, "iscrowd": 0, "bbox": [0, 147, 19, 125], "area": 1289}, {"id": 6576721, "category_id": 1, "iscrowd": 0, "bbox": [276, 171, 105, 209], "area": 8362}, {"id": 1643279, "category_id": 1, "iscrowd": 0, "bbox": [26, 134, 42, 115], "area": 3153}, {"id": 5194809, "category_id": 3, "iscrowd": 0, "bbox": [154, 147, 25, 18], "area": 376}, {"id": 6185314, "category_id": 4, "iscrowd": 0, "bbox": [300, 282, 71, 115], "area": 4650}, {"id": 723470, "category_id": 4, "iscrowd": 0, "bbox": [22, 156, 9, 20], "area": 120}, {"id": 2893868, "category_id": 6, "iscrowd": 0, "bbox": [221, 105, 122, 84], "area": 8402}, {"id": 3025458, "category_id": 6, "iscrowd": 0, "bbox": [96, 123, 59, 43], "area": 1798}, {"id": 5920789, "category_id": 10, "iscrowd": 0, "bbox": [77, 125, 5, 7], "area": 27}, {"id": 2039323, "category_id": 128, "iscrowd": 0, "bbox": [211, 0, 230, 178], "area": 24057}, {"id": 2697252, "category_id": 130, "iscrowd": 0, "bbox": [171, 20, 171, 68], "area": 798}, {"id": 7698036, "category_id": 149, "iscrowd": 0, "bbox": [136, 161, 504, 265], "area": 76808}, {"id": 592392, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 210], "area": 41791}, {"id": 7106158, "category_id": 191, "iscrowd": 0, "bbox": [0, 171, 640, 255], "area": 55244}, {"id": 1644566, "category_id": 197, "iscrowd": 0, "bbox": [32, 0, 608, 190], "area": 25155}], "file_name": "000000380706.png", "image_id": 380706}, {"segments_info": [{"id": 3749955, "category_id": 1, "iscrowd": 0, "bbox": [258, 213, 130, 276], "area": 9401}, {"id": 7242379, "category_id": 42, "iscrowd": 0, "bbox": [249, 238, 92, 206], "area": 9090}, {"id": 5990271, "category_id": 154, "iscrowd": 0, "bbox": [0, 374, 612, 238], "area": 131370}, {"id": 8754331, "category_id": 155, "iscrowd": 0, "bbox": [0, 109, 612, 296], "area": 153989}, {"id": 8162973, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 612, 120], "area": 70398}], "file_name": "000000380711.png", "image_id": 380711}, {"segments_info": [{"id": 4015208, "category_id": 1, "iscrowd": 0, "bbox": [521, 191, 119, 233], "area": 13813}, {"id": 6579301, "category_id": 1, "iscrowd": 0, "bbox": [1, 151, 159, 277], "area": 21981}, {"id": 4872041, "category_id": 1, "iscrowd": 0, "bbox": [117, 168, 144, 254], "area": 17351}, {"id": 2700858, "category_id": 1, "iscrowd": 0, "bbox": [376, 158, 160, 262], "area": 28360}, {"id": 5794173, "category_id": 1, "iscrowd": 0, "bbox": [257, 169, 118, 252], "area": 19090}, {"id": 8157815, "category_id": 1, "iscrowd": 0, "bbox": [0, 148, 44, 190], "area": 4629}, {"id": 1512210, "category_id": 31, "iscrowd": 0, "bbox": [522, 304, 106, 41], "area": 3610}, {"id": 987406, "category_id": 31, "iscrowd": 0, "bbox": [265, 307, 94, 31], "area": 2267}, {"id": 2105889, "category_id": 31, "iscrowd": 0, "bbox": [118, 280, 132, 58], "area": 4108}, {"id": 7234770, "category_id": 77, "iscrowd": 0, "bbox": [292, 200, 3, 7], "area": 16}, {"id": 7236479, "category_id": 77, "iscrowd": 0, "bbox": [166, 253, 21, 9], "area": 143}, {"id": 2369830, "category_id": 77, "iscrowd": 0, "bbox": [441, 298, 43, 17], "area": 364}, {"id": 5264482, "category_id": 77, "iscrowd": 0, "bbox": [292, 199, 305, 90], "area": 179}, {"id": 7639675, "category_id": 77, "iscrowd": 0, "bbox": [66, 208, 19, 17], "area": 161}, {"id": 4213056, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 565, 91], "area": 35910}, {"id": 5791830, "category_id": 171, "iscrowd": 0, "bbox": [607, 88, 33, 262], "area": 4314}, {"id": 5003071, "category_id": 181, "iscrowd": 0, "bbox": [21, 79, 418, 178], "area": 48638}, {"id": 3619380, "category_id": 186, "iscrowd": 0, "bbox": [542, 0, 98, 89], "area": 3883}, {"id": 9540237, "category_id": 199, "iscrowd": 0, "bbox": [0, 43, 626, 249], "area": 28439}], "file_name": "000000380913.png", "image_id": 380913}, {"segments_info": [{"id": 2303018, "category_id": 1, "iscrowd": 0, "bbox": [28, 84, 153, 219], "area": 13554}, {"id": 3030333, "category_id": 42, "iscrowd": 0, "bbox": [80, 288, 96, 59], "area": 3428}, {"id": 9013888, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 254796}], "file_name": "000000381360.png", "image_id": 381360}, {"segments_info": [{"id": 4413054, "category_id": 1, "iscrowd": 0, "bbox": [7, 259, 14, 24], "area": 249}, {"id": 8095122, "category_id": 1, "iscrowd": 0, "bbox": [303, 201, 107, 39], "area": 2335}, {"id": 6451600, "category_id": 1, "iscrowd": 0, "bbox": [345, 225, 79, 146], "area": 5193}, {"id": 5991556, "category_id": 1, "iscrowd": 0, "bbox": [49, 199, 125, 65], "area": 3788}, {"id": 3948129, "category_id": 44, "iscrowd": 0, "bbox": [208, 239, 35, 62], "area": 1551}, {"id": 8032419, "category_id": 44, "iscrowd": 0, "bbox": [61, 283, 33, 38], "area": 915}, {"id": 9804446, "category_id": 47, "iscrowd": 0, "bbox": [263, 247, 31, 41], "area": 926}, {"id": 10002595, "category_id": 47, "iscrowd": 0, "bbox": [12, 294, 49, 65], "area": 2273}, {"id": 11055028, "category_id": 47, "iscrowd": 0, "bbox": [232, 273, 38, 40], "area": 1084}, {"id": 11252917, "category_id": 47, "iscrowd": 0, "bbox": [91, 246, 41, 22], "area": 564}, {"id": 6648442, "category_id": 47, "iscrowd": 0, "bbox": [233, 201, 21, 25], "area": 354}, {"id": 8226705, "category_id": 47, "iscrowd": 0, "bbox": [207, 206, 22, 27], "area": 490}, {"id": 11319486, "category_id": 50, "iscrowd": 0, "bbox": [129, 200, 22, 20], "area": 148}, {"id": 11584962, "category_id": 51, "iscrowd": 0, "bbox": [50, 380, 60, 44], "area": 1682}, {"id": 9016739, "category_id": 51, "iscrowd": 0, "bbox": [124, 235, 38, 22], "area": 638}, {"id": 10989508, "category_id": 51, "iscrowd": 0, "bbox": [3, 537, 76, 75], "area": 4369}, {"id": 6321561, "category_id": 51, "iscrowd": 0, "bbox": [83, 520, 92, 96], "area": 7192}, {"id": 7704240, "category_id": 51, "iscrowd": 0, "bbox": [75, 10, 144, 174], "area": 20463}, {"id": 10003633, "category_id": 51, "iscrowd": 0, "bbox": [303, 277, 51, 29], "area": 1095}, {"id": 12303283, "category_id": 51, "iscrowd": 0, "bbox": [92, 374, 97, 52], "area": 4021}, {"id": 8100520, "category_id": 51, "iscrowd": 0, "bbox": [219, 9, 181, 139], "area": 21045}, {"id": 7177096, "category_id": 51, "iscrowd": 0, "bbox": [12, 454, 71, 62], "area": 3526}, {"id": 7370357, "category_id": 51, "iscrowd": 0, "bbox": [106, 211, 53, 34], "area": 919}, {"id": 2705784, "category_id": 51, "iscrowd": 0, "bbox": [219, 463, 110, 168], "area": 15468}, {"id": 8695241, "category_id": 51, "iscrowd": 0, "bbox": [91, 446, 76, 72], "area": 4755}, {"id": 9413553, "category_id": 51, "iscrowd": 0, "bbox": [96, 335, 75, 52], "area": 2616}, {"id": 8230058, "category_id": 51, "iscrowd": 1, "bbox": [1, 33, 420, 279], "area": 8132}, {"id": 7175326, "category_id": 67, "iscrowd": 0, "bbox": [220, 428, 202, 207], "area": 25410}, {"id": 7635592, "category_id": 67, "iscrowd": 0, "bbox": [7, 211, 410, 212], "area": 52390}, {"id": 6117466, "category_id": 67, "iscrowd": 0, "bbox": [374, 9, 47, 142], "area": 2407}, {"id": 3487549, "category_id": 67, "iscrowd": 0, "bbox": [3, 434, 209, 201], "area": 20938}, {"id": 11582155, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 254, 456], "area": 4764}, {"id": 10397364, "category_id": 195, "iscrowd": 0, "bbox": [27, 156, 176, 47], "area": 4453}, {"id": 9018015, "category_id": 196, "iscrowd": 0, "bbox": [193, 130, 218, 76], "area": 6848}, {"id": 4611172, "category_id": 199, "iscrowd": 0, "bbox": [0, 200, 422, 96], "area": 4976}], "file_name": "000000381587.png", "image_id": 381587}, {"segments_info": [{"id": 9212799, "category_id": 1, "iscrowd": 0, "bbox": [194, 46, 14, 26], "area": 277}, {"id": 6379857, "category_id": 1, "iscrowd": 0, "bbox": [210, 41, 22, 45], "area": 421}, {"id": 8087374, "category_id": 1, "iscrowd": 0, "bbox": [307, 95, 18, 62], "area": 519}, {"id": 9213084, "category_id": 1, "iscrowd": 0, "bbox": [333, 99, 20, 63], "area": 360}, {"id": 9345436, "category_id": 1, "iscrowd": 0, "bbox": [465, 91, 20, 69], "area": 415}, {"id": 3285270, "category_id": 1, "iscrowd": 0, "bbox": [485, 84, 23, 70], "area": 643}, {"id": 5718064, "category_id": 1, "iscrowd": 0, "bbox": [238, 65, 23, 38], "area": 466}, {"id": 4742545, "category_id": 1, "iscrowd": 0, "bbox": [179, 230, 102, 358], "area": 22103}, {"id": 7366499, "category_id": 1, "iscrowd": 0, "bbox": [271, 92, 20, 43], "area": 407}, {"id": 11777440, "category_id": 5, "iscrowd": 0, "bbox": [42, 22, 425, 117], "area": 20546}, {"id": 4601123, "category_id": 27, "iscrowd": 0, "bbox": [319, 103, 14, 25], "area": 198}, {"id": 7160091, "category_id": 27, "iscrowd": 0, "bbox": [352, 107, 13, 22], "area": 153}, {"id": 3744791, "category_id": 27, "iscrowd": 0, "bbox": [221, 52, 12, 20], "area": 176}, {"id": 3027528, "category_id": 31, "iscrowd": 0, "bbox": [254, 397, 26, 76], "area": 1481}, {"id": 3944738, "category_id": 31, "iscrowd": 0, "bbox": [331, 110, 10, 17], "area": 124}, {"id": 4603415, "category_id": 184, "iscrowd": 0, "bbox": [21, 34, 529, 64], "area": 3909}, {"id": 14602098, "category_id": 187, "iscrowd": 0, "bbox": [19, 20, 546, 73], "area": 8304}, {"id": 8033187, "category_id": 191, "iscrowd": 0, "bbox": [0, 115, 584, 505], "area": 205201}, {"id": 10267538, "category_id": 197, "iscrowd": 0, "bbox": [112, 0, 404, 130], "area": 11142}, {"id": 8953249, "category_id": 199, "iscrowd": 0, "bbox": [170, 115, 23, 25], "area": 383}], "file_name": "000000381639.png", "image_id": 381639}, {"segments_info": [{"id": 5524594, "category_id": 1, "iscrowd": 0, "bbox": [311, 268, 26, 25], "area": 274}, {"id": 8817547, "category_id": 1, "iscrowd": 0, "bbox": [375, 304, 33, 78], "area": 1323}, {"id": 9995131, "category_id": 1, "iscrowd": 0, "bbox": [140, 275, 23, 33], "area": 441}, {"id": 9866898, "category_id": 1, "iscrowd": 0, "bbox": [130, 277, 22, 30], "area": 325}, {"id": 10194307, "category_id": 1, "iscrowd": 0, "bbox": [113, 273, 22, 66], "area": 465}, {"id": 6573888, "category_id": 1, "iscrowd": 0, "bbox": [167, 237, 52, 91], "area": 1930}, {"id": 4601130, "category_id": 1, "iscrowd": 0, "bbox": [320, 343, 19, 36], "area": 451}, {"id": 3024934, "category_id": 3, "iscrowd": 0, "bbox": [413, 275, 47, 16], "area": 539}, {"id": 11117463, "category_id": 3, "iscrowd": 0, "bbox": [621, 275, 17, 7], "area": 86}, {"id": 2583684, "category_id": 3, "iscrowd": 0, "bbox": [469, 273, 58, 18], "area": 689}, {"id": 3157600, "category_id": 11, "iscrowd": 0, "bbox": [554, 321, 37, 70], "area": 1186}, {"id": 2828876, "category_id": 13, "iscrowd": 0, "bbox": [431, 251, 9, 9], "area": 62}, {"id": 3619915, "category_id": 19, "iscrowd": 0, "bbox": [235, 272, 193, 126], "area": 10745}, {"id": 3417888, "category_id": 31, "iscrowd": 0, "bbox": [117, 290, 16, 27], "area": 223}, {"id": 5133138, "category_id": 31, "iscrowd": 0, "bbox": [398, 337, 12, 23], "area": 156}, {"id": 4141348, "category_id": 130, "iscrowd": 0, "bbox": [250, 113, 47, 55], "area": 1206}, {"id": 5591633, "category_id": 149, "iscrowd": 0, "bbox": [0, 333, 640, 94], "area": 24802}, {"id": 3361077, "category_id": 184, "iscrowd": 0, "bbox": [43, 0, 597, 311], "area": 91833}, {"id": 7895161, "category_id": 191, "iscrowd": 0, "bbox": [0, 320, 640, 93], "area": 16764}, {"id": 4864297, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 324], "area": 88370}, {"id": 5721922, "category_id": 199, "iscrowd": 0, "bbox": [395, 271, 245, 102], "area": 13442}], "file_name": "000000381971.png", "image_id": 381971}, {"segments_info": [{"id": 7178905, "category_id": 1, "iscrowd": 0, "bbox": [196, 18, 255, 409], "area": 49249}, {"id": 5071191, "category_id": 43, "iscrowd": 0, "bbox": [388, 289, 143, 94], "area": 6828}, {"id": 4606015, "category_id": 62, "iscrowd": 0, "bbox": [1, 149, 87, 152], "area": 5120}, {"id": 2697760, "category_id": 62, "iscrowd": 0, "bbox": [64, 107, 165, 208], "area": 18350}, {"id": 7115651, "category_id": 145, "iscrowd": 0, "bbox": [0, 277, 640, 150], "area": 51954}, {"id": 12435388, "category_id": 168, "iscrowd": 0, "bbox": [536, 65, 60, 20], "area": 499}, {"id": 2700320, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 344], "area": 138478}], "file_name": "000000382009.png", "image_id": 382009}, {"segments_info": [{"id": 4080325, "category_id": 28, "iscrowd": 0, "bbox": [114, 76, 343, 73], "area": 5922}, {"id": 7909507, "category_id": 37, "iscrowd": 0, "bbox": [3, 49, 103, 169], "area": 9508}, {"id": 1393290, "category_id": 64, "iscrowd": 0, "bbox": [406, 9, 40, 47], "area": 882}, {"id": 6000549, "category_id": 67, "iscrowd": 0, "bbox": [0, 2, 498, 368], "area": 46306}, {"id": 734048, "category_id": 118, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 3625}, {"id": 9474010, "category_id": 141, "iscrowd": 0, "bbox": [226, 19, 155, 96], "area": 8565}, {"id": 6458526, "category_id": 189, "iscrowd": 0, "bbox": [159, 138, 341, 237], "area": 1907}, {"id": 7508386, "category_id": 195, "iscrowd": 0, "bbox": [25, 121, 183, 254], "area": 17402}, {"id": 9945809, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 242, 33], "area": 2314}, {"id": 4536915, "category_id": 200, "iscrowd": 0, "bbox": [26, 19, 474, 208], "area": 18694}], "file_name": "000000382030.png", "image_id": 382030}, {"segments_info": [{"id": 8881544, "category_id": 19, "iscrowd": 0, "bbox": [187, 72, 244, 348], "area": 59594}, {"id": 4739664, "category_id": 184, "iscrowd": 0, "bbox": [0, 88, 640, 142], "area": 39988}, {"id": 7174774, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 168], "area": 73030}, {"id": 7437710, "category_id": 194, "iscrowd": 0, "bbox": [0, 181, 640, 245], "area": 80810}], "file_name": "000000382088.png", "image_id": 382088}, {"segments_info": [{"id": 7567987, "category_id": 1, "iscrowd": 0, "bbox": [199, 50, 60, 95], "area": 3275}, {"id": 8288902, "category_id": 1, "iscrowd": 0, "bbox": [283, 13, 128, 287], "area": 13605}, {"id": 7895154, "category_id": 3, "iscrowd": 0, "bbox": [288, 110, 48, 13], "area": 262}, {"id": 8087119, "category_id": 3, "iscrowd": 0, "bbox": [622, 107, 18, 21], "area": 306}, {"id": 4931704, "category_id": 3, "iscrowd": 0, "bbox": [31, 131, 16, 13], "area": 184}, {"id": 8680032, "category_id": 3, "iscrowd": 0, "bbox": [14, 124, 78, 34], "area": 673}, {"id": 6510166, "category_id": 3, "iscrowd": 0, "bbox": [439, 116, 66, 36], "area": 1509}, {"id": 8025206, "category_id": 3, "iscrowd": 0, "bbox": [0, 129, 27, 33], "area": 569}, {"id": 8354164, "category_id": 3, "iscrowd": 0, "bbox": [44, 129, 13, 15], "area": 120}, {"id": 7497615, "category_id": 8, "iscrowd": 0, "bbox": [397, 105, 78, 43], "area": 603}, {"id": 6115658, "category_id": 8, "iscrowd": 0, "bbox": [14, 119, 99, 97], "area": 5704}, {"id": 7497831, "category_id": 8, "iscrowd": 0, "bbox": [475, 128, 165, 171], "area": 20894}, {"id": 7174027, "category_id": 19, "iscrowd": 0, "bbox": [107, 106, 153, 258], "area": 7666}, {"id": 7966118, "category_id": 19, "iscrowd": 0, "bbox": [121, 116, 393, 303], "area": 46538}, {"id": 6973032, "category_id": 149, "iscrowd": 0, "bbox": [0, 146, 640, 281], "area": 91998}, {"id": 3634278, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 580, 155], "area": 21147}, {"id": 7172725, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 308, 51], "area": 8634}, {"id": 10784380, "category_id": 187, "iscrowd": 0, "bbox": [0, 37, 104, 48], "area": 2756}, {"id": 9009778, "category_id": 197, "iscrowd": 0, "bbox": [62, 0, 578, 290], "area": 37830}, {"id": 7566198, "category_id": 199, "iscrowd": 0, "bbox": [507, 99, 133, 186], "area": 517}], "file_name": "000000382111.png", "image_id": 382111}, {"segments_info": [{"id": 13683920, "category_id": 85, "iscrowd": 0, "bbox": [203, 231, 28, 23], "area": 484}, {"id": 3820675, "category_id": 171, "iscrowd": 0, "bbox": [11, 507, 413, 108], "area": 7126}, {"id": 4015454, "category_id": 185, "iscrowd": 0, "bbox": [45, 524, 360, 89], "area": 24543}, {"id": 6304273, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 424, 523], "area": 152628}, {"id": 7436953, "category_id": 191, "iscrowd": 0, "bbox": [0, 606, 424, 34], "area": 12710}, {"id": 5727621, "category_id": 197, "iscrowd": 0, "bbox": [0, 80, 424, 538], "area": 73852}], "file_name": "000000382122.png", "image_id": 382122}, {"segments_info": [{"id": 7168617, "category_id": 1, "iscrowd": 0, "bbox": [0, 115, 352, 360], "area": 69096}, {"id": 14540254, "category_id": 1, "iscrowd": 0, "bbox": [371, 210, 53, 66], "area": 1919}, {"id": 4806771, "category_id": 1, "iscrowd": 0, "bbox": [0, 159, 33, 85], "area": 1583}, {"id": 4606817, "category_id": 1, "iscrowd": 0, "bbox": [117, 164, 45, 94], "area": 1660}, {"id": 7111841, "category_id": 1, "iscrowd": 0, "bbox": [505, 155, 117, 180], "area": 6786}, {"id": 5130070, "category_id": 1, "iscrowd": 0, "bbox": [347, 100, 286, 370], "area": 59297}, {"id": 6579071, "category_id": 1, "iscrowd": 0, "bbox": [297, 154, 64, 203], "area": 4299}, {"id": 2769250, "category_id": 1, "iscrowd": 0, "bbox": [582, 175, 58, 101], "area": 3586}, {"id": 4146258, "category_id": 1, "iscrowd": 0, "bbox": [37, 157, 108, 143], "area": 5028}, {"id": 9010296, "category_id": 47, "iscrowd": 0, "bbox": [492, 412, 118, 68], "area": 6857}, {"id": 6783375, "category_id": 47, "iscrowd": 0, "bbox": [5, 217, 17, 28], "area": 394}, {"id": 15129557, "category_id": 47, "iscrowd": 0, "bbox": [411, 428, 64, 47], "area": 2619}, {"id": 2765642, "category_id": 47, "iscrowd": 0, "bbox": [30, 220, 18, 22], "area": 332}, {"id": 9731444, "category_id": 47, "iscrowd": 0, "bbox": [181, 461, 75, 19], "area": 1154}, {"id": 12101290, "category_id": 47, "iscrowd": 0, "bbox": [328, 248, 23, 14], "area": 100}, {"id": 10142960, "category_id": 59, "iscrowd": 0, "bbox": [367, 452, 46, 28], "area": 837}, {"id": 9942245, "category_id": 59, "iscrowd": 0, "bbox": [196, 332, 107, 79], "area": 5389}, {"id": 2891810, "category_id": 62, "iscrowd": 0, "bbox": [82, 233, 63, 44], "area": 1885}, {"id": 3749731, "category_id": 62, "iscrowd": 0, "bbox": [1, 317, 50, 94], "area": 2098}, {"id": 1445651, "category_id": 62, "iscrowd": 0, "bbox": [0, 247, 23, 71], "area": 964}, {"id": 2037534, "category_id": 62, "iscrowd": 0, "bbox": [150, 222, 28, 31], "area": 563}, {"id": 1513517, "category_id": 62, "iscrowd": 0, "bbox": [620, 262, 20, 78], "area": 1139}, {"id": 1711687, "category_id": 62, "iscrowd": 0, "bbox": [616, 335, 24, 104], "area": 1328}, {"id": 3549504, "category_id": 62, "iscrowd": 0, "bbox": [326, 311, 15, 42], "area": 445}, {"id": 5529448, "category_id": 67, "iscrowd": 0, "bbox": [0, 241, 56, 69], "area": 622}, {"id": 5126711, "category_id": 67, "iscrowd": 0, "bbox": [118, 420, 522, 60], "area": 7430}, {"id": 7968161, "category_id": 67, "iscrowd": 0, "bbox": [19, 235, 10, 6], "area": 46}, {"id": 4867702, "category_id": 112, "iscrowd": 0, "bbox": [259, 48, 167, 225], "area": 21770}, {"id": 13824248, "category_id": 130, "iscrowd": 0, "bbox": [322, 0, 57, 34], "area": 1436}, {"id": 2238287, "category_id": 177, "iscrowd": 0, "bbox": [16, 159, 624, 99], "area": 6482}, {"id": 2435648, "category_id": 186, "iscrowd": 0, "bbox": [455, 0, 185, 39], "area": 6683}, {"id": 7700364, "category_id": 195, "iscrowd": 0, "bbox": [256, 475, 92, 5], "area": 397}, {"id": 14805493, "category_id": 196, "iscrowd": 0, "bbox": [355, 444, 135, 36], "area": 791}, {"id": 7378613, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 187], "area": 72657}], "file_name": "000000382125.png", "image_id": 382125}, {"segments_info": [{"id": 4348545, "category_id": 79, "iscrowd": 0, "bbox": [242, 170, 144, 185], "area": 19906}, {"id": 6461125, "category_id": 81, "iscrowd": 0, "bbox": [234, 189, 49, 15], "area": 440}, {"id": 2967156, "category_id": 82, "iscrowd": 0, "bbox": [65, 74, 144, 290], "area": 21631}, {"id": 6397131, "category_id": 107, "iscrowd": 0, "bbox": [207, 177, 354, 73], "area": 8877}, {"id": 1660324, "category_id": 118, "iscrowd": 0, "bbox": [0, 340, 640, 140], "area": 47079}, {"id": 796766, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 577, 351], "area": 1572}, {"id": 3295331, "category_id": 181, "iscrowd": 0, "bbox": [208, 39, 84, 148], "area": 10252}, {"id": 728361, "category_id": 186, "iscrowd": 0, "bbox": [223, 0, 417, 45], "area": 11182}, {"id": 2312839, "category_id": 188, "iscrowd": 0, "bbox": [0, 12, 559, 369], "area": 55704}, {"id": 5732518, "category_id": 190, "iscrowd": 0, "bbox": [69, 323, 383, 157], "area": 22649}, {"id": 5075613, "category_id": 199, "iscrowd": 0, "bbox": [12, 0, 628, 380], "area": 82154}], "file_name": "000000382696.png", "image_id": 382696}, {"segments_info": [{"id": 9281153, "category_id": 190, "iscrowd": 0, "bbox": [71, 485, 320, 155], "area": 32934}, {"id": 9477769, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 238993}], "file_name": "000000382734.png", "image_id": 382734}, {"segments_info": [{"id": 6451039, "category_id": 28, "iscrowd": 0, "bbox": [0, 0, 122, 268], "area": 24674}, {"id": 10854261, "category_id": 28, "iscrowd": 0, "bbox": [584, 362, 56, 73], "area": 2282}, {"id": 7894371, "category_id": 28, "iscrowd": 0, "bbox": [396, 307, 244, 168], "area": 13679}, {"id": 8956849, "category_id": 38, "iscrowd": 0, "bbox": [279, 296, 99, 52], "area": 2474}, {"id": 8107228, "category_id": 38, "iscrowd": 0, "bbox": [105, 209, 83, 88], "area": 2297}, {"id": 7502729, "category_id": 38, "iscrowd": 0, "bbox": [579, 371, 38, 29], "area": 305}, {"id": 10265492, "category_id": 38, "iscrowd": 0, "bbox": [534, 326, 32, 51], "area": 335}, {"id": 7437190, "category_id": 38, "iscrowd": 0, "bbox": [607, 340, 22, 32], "area": 293}, {"id": 14466173, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 258905}], "file_name": "000000382743.png", "image_id": 382743}, {"segments_info": [{"id": 3092536, "category_id": 1, "iscrowd": 0, "bbox": [323, 38, 210, 307], "area": 32226}, {"id": 9926240, "category_id": 3, "iscrowd": 0, "bbox": [594, 232, 45, 40], "area": 1225}, {"id": 7234654, "category_id": 3, "iscrowd": 0, "bbox": [316, 148, 323, 119], "area": 5759}, {"id": 10523520, "category_id": 3, "iscrowd": 0, "bbox": [1, 164, 347, 270], "area": 80758}, {"id": 6970703, "category_id": 3, "iscrowd": 0, "bbox": [0, 146, 209, 34], "area": 4020}, {"id": 2964306, "category_id": 77, "iscrowd": 0, "bbox": [413, 76, 37, 27], "area": 354}, {"id": 5590337, "category_id": 149, "iscrowd": 0, "bbox": [0, 397, 290, 47], "area": 2830}, {"id": 3885926, "category_id": 171, "iscrowd": 0, "bbox": [419, 285, 221, 159], "area": 19817}, {"id": 1919057, "category_id": 184, "iscrowd": 0, "bbox": [404, 0, 236, 444], "area": 20214}, {"id": 4810329, "category_id": 193, "iscrowd": 0, "bbox": [0, 411, 321, 33], "area": 3682}, {"id": 4084322, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 563, 171], "area": 53357}, {"id": 6514798, "category_id": 199, "iscrowd": 0, "bbox": [51, 0, 589, 294], "area": 24275}], "file_name": "000000383289.png", "image_id": 383289}, {"segments_info": [{"id": 7169655, "category_id": 1, "iscrowd": 0, "bbox": [172, 1, 468, 363], "area": 57484}, {"id": 6186869, "category_id": 1, "iscrowd": 0, "bbox": [237, 2, 201, 139], "area": 16509}, {"id": 3688815, "category_id": 60, "iscrowd": 0, "bbox": [279, 324, 30, 31], "area": 510}, {"id": 3028554, "category_id": 60, "iscrowd": 0, "bbox": [336, 327, 95, 37], "area": 1991}, {"id": 3424088, "category_id": 60, "iscrowd": 0, "bbox": [495, 183, 110, 87], "area": 5543}, {"id": 3950948, "category_id": 60, "iscrowd": 0, "bbox": [441, 213, 106, 83], "area": 7050}, {"id": 3621982, "category_id": 60, "iscrowd": 0, "bbox": [83, 385, 116, 63], "area": 4174}, {"id": 3819364, "category_id": 60, "iscrowd": 0, "bbox": [223, 354, 57, 30], "area": 759}, {"id": 4742011, "category_id": 60, "iscrowd": 0, "bbox": [77, 361, 121, 75], "area": 3120}, {"id": 2898003, "category_id": 60, "iscrowd": 0, "bbox": [357, 299, 56, 33], "area": 1179}, {"id": 3750717, "category_id": 67, "iscrowd": 0, "bbox": [293, 287, 347, 188], "area": 38118}, {"id": 6448490, "category_id": 100, "iscrowd": 0, "bbox": [0, 85, 448, 395], "area": 82122}, {"id": 2500135, "category_id": 189, "iscrowd": 0, "bbox": [0, 105, 640, 375], "area": 13740}, {"id": 4870756, "category_id": 196, "iscrowd": 0, "bbox": [463, 192, 49, 25], "area": 358}, {"id": 15462125, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 299, 206], "area": 47495}], "file_name": "000000383337.png", "image_id": 383337}, {"segments_info": [{"id": 2761769, "category_id": 1, "iscrowd": 0, "bbox": [251, 292, 20, 27], "area": 199}, {"id": 4340551, "category_id": 16, "iscrowd": 0, "bbox": [351, 258, 6, 8], "area": 22}, {"id": 4538682, "category_id": 155, "iscrowd": 0, "bbox": [0, 280, 640, 148], "area": 81907}, {"id": 10329242, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 313], "area": 189892}], "file_name": "000000383339.png", "image_id": 383339}, {"segments_info": [{"id": 7232077, "category_id": 1, "iscrowd": 0, "bbox": [146, 0, 20, 16], "area": 217}, {"id": 2632498, "category_id": 1, "iscrowd": 0, "bbox": [488, 78, 81, 84], "area": 2723}, {"id": 8548198, "category_id": 1, "iscrowd": 0, "bbox": [395, 95, 69, 66], "area": 1851}, {"id": 10064510, "category_id": 1, "iscrowd": 0, "bbox": [318, 69, 69, 97], "area": 2153}, {"id": 5258548, "category_id": 1, "iscrowd": 0, "bbox": [170, 0, 15, 18], "area": 210}, {"id": 921371, "category_id": 1, "iscrowd": 0, "bbox": [467, 198, 85, 162], "area": 8565}, {"id": 4605778, "category_id": 1, "iscrowd": 0, "bbox": [29, 0, 11, 17], "area": 134}, {"id": 9144720, "category_id": 1, "iscrowd": 0, "bbox": [286, 1, 25, 35], "area": 531}, {"id": 11246483, "category_id": 1, "iscrowd": 0, "bbox": [86, 0, 15, 16], "area": 186}, {"id": 11257552, "category_id": 37, "iscrowd": 0, "bbox": [186, 83, 5, 4], "area": 19}, {"id": 4019804, "category_id": 39, "iscrowd": 0, "bbox": [366, 91, 34, 10], "area": 159}, {"id": 9274251, "category_id": 40, "iscrowd": 0, "bbox": [395, 108, 16, 12], "area": 130}, {"id": 5934499, "category_id": 145, "iscrowd": 0, "bbox": [0, 16, 640, 344], "area": 186862}, {"id": 2170138, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 61], "area": 17840}, {"id": 9721860, "category_id": 199, "iscrowd": 0, "bbox": [363, 0, 277, 23], "area": 3593}], "file_name": "000000383384.png", "image_id": 383384}, {"segments_info": [{"id": 12632252, "category_id": 62, "iscrowd": 0, "bbox": [0, 0, 93, 304], "area": 14082}, {"id": 8097439, "category_id": 88, "iscrowd": 0, "bbox": [179, 63, 246, 414], "area": 50377}, {"id": 4614035, "category_id": 88, "iscrowd": 0, "bbox": [356, 124, 227, 331], "area": 43889}, {"id": 4683412, "category_id": 88, "iscrowd": 0, "bbox": [69, 72, 208, 350], "area": 44814}, {"id": 5265766, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 640, 412], "area": 90035}, {"id": 13619409, "category_id": 190, "iscrowd": 0, "bbox": [0, 320, 640, 160], "area": 36929}, {"id": 6843757, "category_id": 199, "iscrowd": 0, "bbox": [613, 162, 27, 92], "area": 1564}], "file_name": "000000383386.png", "image_id": 383386}, {"segments_info": [{"id": 4342080, "category_id": 72, "iscrowd": 0, "bbox": [235, 124, 48, 40], "area": 1668}, {"id": 3882048, "category_id": 75, "iscrowd": 0, "bbox": [142, 237, 32, 11], "area": 181}, {"id": 8430016, "category_id": 81, "iscrowd": 0, "bbox": [355, 203, 24, 4], "area": 84}, {"id": 9018800, "category_id": 81, "iscrowd": 0, "bbox": [0, 267, 55, 22], "area": 735}, {"id": 6779000, "category_id": 109, "iscrowd": 0, "bbox": [471, 54, 169, 269], "area": 15588}, {"id": 8885135, "category_id": 112, "iscrowd": 0, "bbox": [194, 85, 44, 175], "area": 5640}, {"id": 9414332, "category_id": 130, "iscrowd": 0, "bbox": [356, 0, 105, 57], "area": 5201}, {"id": 7440276, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 394, 228], "area": 37123}, {"id": 9606557, "category_id": 168, "iscrowd": 0, "bbox": [233, 186, 305, 90], "area": 6525}, {"id": 12897730, "category_id": 181, "iscrowd": 0, "bbox": [493, 81, 101, 189], "area": 13297}, {"id": 8952741, "category_id": 186, "iscrowd": 0, "bbox": [170, 0, 470, 106], "area": 23246}, {"id": 12037803, "category_id": 188, "iscrowd": 0, "bbox": [0, 183, 427, 244], "area": 38291}, {"id": 7435902, "category_id": 190, "iscrowd": 0, "bbox": [112, 250, 528, 177], "area": 65309}, {"id": 8162712, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 291], "area": 55206}], "file_name": "000000383443.png", "image_id": 383443}, {"segments_info": [{"id": 1316632, "category_id": 1, "iscrowd": 0, "bbox": [303, 125, 46, 156], "area": 5117}, {"id": 10986919, "category_id": 47, "iscrowd": 0, "bbox": [356, 282, 21, 32], "area": 531}, {"id": 12697793, "category_id": 47, "iscrowd": 0, "bbox": [304, 284, 21, 29], "area": 463}, {"id": 9471105, "category_id": 81, "iscrowd": 0, "bbox": [135, 279, 254, 134], "area": 21937}, {"id": 3361372, "category_id": 112, "iscrowd": 0, "bbox": [396, 0, 244, 480], "area": 111425}, {"id": 9016471, "category_id": 133, "iscrowd": 0, "bbox": [120, 0, 242, 322], "area": 58051}, {"id": 7700872, "category_id": 176, "iscrowd": 0, "bbox": [108, 0, 310, 480], "area": 47317}, {"id": 7175031, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 143, 480], "area": 58700}], "file_name": "000000383606.png", "image_id": 383606}, {"segments_info": [{"id": 5985605, "category_id": 5, "iscrowd": 0, "bbox": [34, 208, 413, 90], "area": 16885}, {"id": 10130831, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 250138}], "file_name": "000000383621.png", "image_id": 383621}, {"segments_info": [{"id": 6055799, "category_id": 25, "iscrowd": 0, "bbox": [228, 184, 90, 239], "area": 8071}, {"id": 9020344, "category_id": 25, "iscrowd": 0, "bbox": [260, 150, 214, 278], "area": 16201}, {"id": 5992827, "category_id": 175, "iscrowd": 0, "bbox": [0, 63, 640, 371], "area": 125868}, {"id": 8819340, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 151], "area": 69347}, {"id": 12443367, "category_id": 194, "iscrowd": 0, "bbox": [0, 396, 640, 84], "area": 29738}], "file_name": "000000383676.png", "image_id": 383676}, {"segments_info": [{"id": 1250111, "category_id": 1, "iscrowd": 0, "bbox": [0, 9, 428, 579], "area": 170770}, {"id": 2435630, "category_id": 1, "iscrowd": 0, "bbox": [360, 288, 175, 300], "area": 30063}, {"id": 1515293, "category_id": 62, "iscrowd": 0, "bbox": [521, 466, 32, 120], "area": 2461}, {"id": 6777203, "category_id": 75, "iscrowd": 0, "bbox": [278, 423, 84, 80], "area": 2507}, {"id": 12502471, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 588], "area": 169075}], "file_name": "000000383838.png", "image_id": 383838}, {"segments_info": [{"id": 4149339, "category_id": 1, "iscrowd": 0, "bbox": [220, 83, 31, 99], "area": 852}, {"id": 2433313, "category_id": 1, "iscrowd": 0, "bbox": [230, 35, 100, 363], "area": 19219}, {"id": 5856623, "category_id": 1, "iscrowd": 0, "bbox": [333, 98, 26, 48], "area": 925}, {"id": 4607062, "category_id": 1, "iscrowd": 0, "bbox": [383, 97, 49, 62], "area": 1174}, {"id": 2632491, "category_id": 1, "iscrowd": 0, "bbox": [307, 70, 34, 84], "area": 629}, {"id": 7899809, "category_id": 1, "iscrowd": 0, "bbox": [364, 91, 23, 18], "area": 308}, {"id": 3356217, "category_id": 1, "iscrowd": 0, "bbox": [537, 124, 82, 153], "area": 4884}, {"id": 3487292, "category_id": 1, "iscrowd": 0, "bbox": [363, 35, 133, 300], "area": 5363}, {"id": 2039585, "category_id": 1, "iscrowd": 0, "bbox": [296, 107, 105, 280], "area": 9036}, {"id": 7565939, "category_id": 1, "iscrowd": 0, "bbox": [268, 51, 312, 383], "area": 61081}, {"id": 4760239, "category_id": 31, "iscrowd": 0, "bbox": [147, 131, 88, 130], "area": 6832}, {"id": 3616817, "category_id": 32, "iscrowd": 0, "bbox": [289, 105, 24, 100], "area": 977}, {"id": 8421536, "category_id": 32, "iscrowd": 0, "bbox": [357, 153, 16, 46], "area": 445}, {"id": 5591630, "category_id": 73, "iscrowd": 0, "bbox": [2, 211, 246, 191], "area": 22049}, {"id": 11708062, "category_id": 75, "iscrowd": 0, "bbox": [249, 240, 55, 46], "area": 1703}, {"id": 8355198, "category_id": 75, "iscrowd": 0, "bbox": [517, 326, 54, 52], "area": 953}, {"id": 8949386, "category_id": 109, "iscrowd": 0, "bbox": [314, 65, 70, 59], "area": 1858}, {"id": 9476762, "category_id": 112, "iscrowd": 0, "bbox": [228, 51, 46, 49], "area": 1367}, {"id": 12898767, "category_id": 130, "iscrowd": 0, "bbox": [302, 0, 64, 31], "area": 1162}, {"id": 12569033, "category_id": 151, "iscrowd": 0, "bbox": [302, 0, 338, 64], "area": 12805}, {"id": 7435119, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 640, 307], "area": 30771}, {"id": 2899791, "category_id": 188, "iscrowd": 0, "bbox": [514, 274, 126, 160], "area": 13704}, {"id": 6315609, "category_id": 189, "iscrowd": 0, "bbox": [0, 131, 254, 303], "area": 33463}, {"id": 7765888, "category_id": 190, "iscrowd": 0, "bbox": [226, 271, 316, 163], "area": 8782}, {"id": 7512739, "category_id": 199, "iscrowd": 0, "bbox": [117, 0, 337, 170], "area": 18241}], "file_name": "000000383842.png", "image_id": 383842}, {"segments_info": [{"id": 3029304, "category_id": 22, "iscrowd": 0, "bbox": [0, 118, 60, 47], "area": 2020}, {"id": 2964030, "category_id": 22, "iscrowd": 0, "bbox": [0, 321, 202, 159], "area": 24979}, {"id": 5860722, "category_id": 22, "iscrowd": 0, "bbox": [32, 231, 363, 114], "area": 19583}, {"id": 3622217, "category_id": 22, "iscrowd": 0, "bbox": [0, 133, 337, 298], "area": 22799}, {"id": 8559267, "category_id": 22, "iscrowd": 0, "bbox": [299, 173, 112, 55], "area": 2147}, {"id": 4214866, "category_id": 22, "iscrowd": 0, "bbox": [408, 152, 139, 148], "area": 12204}, {"id": 5530728, "category_id": 22, "iscrowd": 0, "bbox": [105, 300, 137, 141], "area": 9306}, {"id": 4476490, "category_id": 22, "iscrowd": 0, "bbox": [229, 107, 127, 81], "area": 7886}, {"id": 6585217, "category_id": 22, "iscrowd": 0, "bbox": [167, 186, 305, 103], "area": 14561}, {"id": 4611171, "category_id": 22, "iscrowd": 0, "bbox": [349, 128, 111, 63], "area": 4622}, {"id": 5070931, "category_id": 148, "iscrowd": 0, "bbox": [0, 31, 421, 449], "area": 55200}, {"id": 7508640, "category_id": 198, "iscrowd": 0, "bbox": [235, 62, 405, 418], "area": 92490}], "file_name": "000000383921.png", "image_id": 383921}, {"segments_info": [{"id": 2908308, "category_id": 1, "iscrowd": 0, "bbox": [229, 71, 236, 338], "area": 51518}, {"id": 3359042, "category_id": 89, "iscrowd": 0, "bbox": [316, 188, 83, 226], "area": 5068}, {"id": 6459310, "category_id": 112, "iscrowd": 0, "bbox": [92, 0, 548, 414], "area": 94074}, {"id": 6459828, "category_id": 133, "iscrowd": 0, "bbox": [365, 145, 154, 269], "area": 16143}, {"id": 2775159, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 100], "area": 19869}, {"id": 6131119, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 338], "area": 55935}], "file_name": "000000384136.png", "image_id": 384136}, {"segments_info": [{"id": 7958634, "category_id": 5, "iscrowd": 0, "bbox": [146, 133, 494, 121], "area": 22130}, {"id": 10129584, "category_id": 5, "iscrowd": 0, "bbox": [1, 48, 492, 140], "area": 21870}, {"id": 2632741, "category_id": 184, "iscrowd": 0, "bbox": [14, 140, 598, 29], "area": 1095}, {"id": 10578480, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 157], "area": 77119}, {"id": 7963269, "category_id": 191, "iscrowd": 0, "bbox": [0, 164, 640, 316], "area": 177720}, {"id": 3753790, "category_id": 193, "iscrowd": 0, "bbox": [0, 138, 640, 64], "area": 6736}], "file_name": "000000384350.png", "image_id": 384350}, {"segments_info": [{"id": 8225179, "category_id": 1, "iscrowd": 0, "bbox": [244, 86, 113, 179], "area": 6379}, {"id": 3296857, "category_id": 1, "iscrowd": 0, "bbox": [556, 268, 56, 169], "area": 5551}, {"id": 8025723, "category_id": 1, "iscrowd": 0, "bbox": [185, 98, 110, 159], "area": 4383}, {"id": 8024458, "category_id": 1, "iscrowd": 0, "bbox": [264, 82, 136, 184], "area": 7271}, {"id": 12304582, "category_id": 3, "iscrowd": 0, "bbox": [0, 263, 92, 107], "area": 7675}, {"id": 3884890, "category_id": 22, "iscrowd": 0, "bbox": [20, 197, 510, 278], "area": 88039}, {"id": 6519403, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 121882}, {"id": 16514299, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 580, 147], "area": 27224}, {"id": 4613259, "category_id": 194, "iscrowd": 0, "bbox": [0, 338, 640, 142], "area": 36029}], "file_name": "000000384468.png", "image_id": 384468}, {"segments_info": [{"id": 4536889, "category_id": 19, "iscrowd": 0, "bbox": [103, 219, 135, 160], "area": 7454}, {"id": 11974072, "category_id": 149, "iscrowd": 0, "bbox": [0, 346, 640, 134], "area": 74191}, {"id": 6576721, "category_id": 151, "iscrowd": 0, "bbox": [124, 89, 94, 76], "area": 3974}, {"id": 7700084, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 181], "area": 65976}, {"id": 6314841, "category_id": 185, "iscrowd": 0, "bbox": [0, 86, 640, 228], "area": 76430}, {"id": 16053490, "category_id": 187, "iscrowd": 0, "bbox": [72, 0, 568, 56], "area": 8325}, {"id": 7961213, "category_id": 191, "iscrowd": 0, "bbox": [0, 268, 640, 113], "area": 23904}, {"id": 6713971, "category_id": 193, "iscrowd": 0, "bbox": [468, 322, 143, 24], "area": 2496}, {"id": 5591376, "category_id": 194, "iscrowd": 0, "bbox": [573, 340, 67, 22], "area": 1204}], "file_name": "000000384513.png", "image_id": 384513}, {"segments_info": [{"id": 8092298, "category_id": 2, "iscrowd": 0, "bbox": [392, 105, 183, 90], "area": 7200}, {"id": 13224906, "category_id": 47, "iscrowd": 0, "bbox": [409, 232, 31, 20], "area": 443}, {"id": 14803165, "category_id": 47, "iscrowd": 0, "bbox": [468, 205, 16, 19], "area": 241}, {"id": 14605275, "category_id": 47, "iscrowd": 0, "bbox": [438, 190, 16, 18], "area": 209}, {"id": 11247514, "category_id": 47, "iscrowd": 0, "bbox": [328, 222, 27, 30], "area": 614}, {"id": 13223882, "category_id": 47, "iscrowd": 0, "bbox": [370, 231, 26, 24], "area": 464}, {"id": 4286036, "category_id": 62, "iscrowd": 0, "bbox": [462, 278, 178, 189], "area": 16325}, {"id": 3624805, "category_id": 62, "iscrowd": 0, "bbox": [203, 300, 349, 172], "area": 40545}, {"id": 8955529, "category_id": 62, "iscrowd": 0, "bbox": [468, 160, 126, 141], "area": 13057}, {"id": 9874365, "category_id": 64, "iscrowd": 0, "bbox": [322, 56, 76, 159], "area": 4878}, {"id": 9412769, "category_id": 67, "iscrowd": 0, "bbox": [322, 184, 178, 85], "area": 7833}, {"id": 5133444, "category_id": 84, "iscrowd": 0, "bbox": [596, 209, 9, 37], "area": 215}, {"id": 4013652, "category_id": 84, "iscrowd": 0, "bbox": [603, 208, 21, 41], "area": 688}, {"id": 2498705, "category_id": 84, "iscrowd": 0, "bbox": [596, 162, 8, 36], "area": 206}, {"id": 5663885, "category_id": 84, "iscrowd": 0, "bbox": [591, 207, 7, 37], "area": 144}, {"id": 6253761, "category_id": 84, "iscrowd": 0, "bbox": [611, 113, 7, 39], "area": 123}, {"id": 10789340, "category_id": 84, "iscrowd": 0, "bbox": [615, 114, 7, 39], "area": 131}, {"id": 10197468, "category_id": 84, "iscrowd": 0, "bbox": [608, 113, 7, 39], "area": 128}, {"id": 10394330, "category_id": 84, "iscrowd": 0, "bbox": [619, 117, 7, 37], "area": 113}, {"id": 9081035, "category_id": 84, "iscrowd": 0, "bbox": [592, 109, 20, 43], "area": 664}, {"id": 5727617, "category_id": 84, "iscrowd": 0, "bbox": [602, 158, 9, 42], "area": 291}, {"id": 7108476, "category_id": 84, "iscrowd": 0, "bbox": [610, 164, 30, 45], "area": 1108}, {"id": 4870029, "category_id": 84, "iscrowd": 0, "bbox": [623, 114, 16, 41], "area": 444}, {"id": 2762021, "category_id": 84, "iscrowd": 0, "bbox": [344, 268, 85, 30], "area": 2004}, {"id": 9541277, "category_id": 84, "iscrowd": 1, "bbox": [129, 8, 511, 263], "area": 8380}, {"id": 6117203, "category_id": 85, "iscrowd": 0, "bbox": [32, 166, 48, 46], "area": 1748}, {"id": 3551795, "category_id": 86, "iscrowd": 0, "bbox": [361, 140, 22, 73], "area": 1430}, {"id": 9145321, "category_id": 92, "iscrowd": 0, "bbox": [0, 48, 35, 81], "area": 1766}, {"id": 7041924, "category_id": 109, "iscrowd": 0, "bbox": [128, 0, 160, 340], "area": 21132}, {"id": 3819354, "category_id": 118, "iscrowd": 0, "bbox": [0, 252, 640, 228], "area": 22888}, {"id": 4213600, "category_id": 177, "iscrowd": 0, "bbox": [127, 0, 503, 326], "area": 17521}, {"id": 2237481, "category_id": 189, "iscrowd": 0, "bbox": [301, 234, 193, 128], "area": 8042}, {"id": 11839907, "category_id": 195, "iscrowd": 0, "bbox": [344, 198, 19, 22], "area": 131}, {"id": 11386555, "category_id": 199, "iscrowd": 0, "bbox": [235, 123, 119, 51], "area": 2086}], "file_name": "000000384527.png", "image_id": 384527}, {"segments_info": [{"id": 3944539, "category_id": 11, "iscrowd": 0, "bbox": [371, 192, 82, 274], "area": 14027}, {"id": 6251607, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 176], "area": 95751}, {"id": 16382198, "category_id": 187, "iscrowd": 0, "bbox": [98, 0, 542, 39], "area": 5680}, {"id": 10647403, "category_id": 192, "iscrowd": 0, "bbox": [66, 0, 574, 71], "area": 4656}, {"id": 4610644, "category_id": 193, "iscrowd": 0, "bbox": [0, 214, 640, 266], "area": 77748}, {"id": 9079953, "category_id": 194, "iscrowd": 0, "bbox": [0, 162, 640, 318], "area": 105445}], "file_name": "000000384616.png", "image_id": 384616}, {"segments_info": [{"id": 7385504, "category_id": 47, "iscrowd": 0, "bbox": [254, 280, 68, 107], "area": 6734}, {"id": 5084545, "category_id": 65, "iscrowd": 0, "bbox": [0, 140, 320, 209], "area": 43099}, {"id": 4558970, "category_id": 93, "iscrowd": 0, "bbox": [0, 148, 344, 198], "area": 3039}, {"id": 13824244, "category_id": 130, "iscrowd": 0, "bbox": [233, 0, 239, 175], "area": 32973}, {"id": 1716509, "category_id": 141, "iscrowd": 0, "bbox": [181, 119, 54, 85], "area": 997}, {"id": 1869469, "category_id": 177, "iscrowd": 0, "bbox": [353, 148, 36, 173], "area": 3036}, {"id": 1645590, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 103, 122], "area": 12016}, {"id": 2239010, "category_id": 189, "iscrowd": 0, "bbox": [0, 295, 640, 141], "area": 48674}, {"id": 2445124, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 322], "area": 61535}], "file_name": "000000384651.png", "image_id": 384651}, {"segments_info": [{"id": 8489874, "category_id": 44, "iscrowd": 0, "bbox": [387, 134, 26, 43], "area": 922}, {"id": 2106419, "category_id": 44, "iscrowd": 0, "bbox": [391, 101, 25, 34], "area": 515}, {"id": 3554624, "category_id": 50, "iscrowd": 0, "bbox": [413, 55, 28, 43], "area": 654}, {"id": 4012615, "category_id": 50, "iscrowd": 0, "bbox": [359, 38, 15, 45], "area": 371}, {"id": 5532027, "category_id": 79, "iscrowd": 0, "bbox": [44, 13, 254, 264], "area": 57477}, {"id": 10924479, "category_id": 82, "iscrowd": 0, "bbox": [420, 2, 78, 366], "area": 21250}, {"id": 5789536, "category_id": 85, "iscrowd": 0, "bbox": [137, 25, 119, 18], "area": 1728}, {"id": 6454157, "category_id": 112, "iscrowd": 0, "bbox": [0, 274, 33, 101], "area": 1494}, {"id": 7118002, "category_id": 176, "iscrowd": 0, "bbox": [74, 356, 13, 19], "area": 149}, {"id": 3032419, "category_id": 188, "iscrowd": 0, "bbox": [279, 138, 169, 230], "area": 18779}, {"id": 2113647, "category_id": 190, "iscrowd": 0, "bbox": [84, 339, 416, 36], "area": 7255}, {"id": 7377842, "category_id": 195, "iscrowd": 0, "bbox": [416, 0, 61, 69], "area": 2128}, {"id": 5681630, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 423, 375], "area": 37028}], "file_name": "000000384661.png", "image_id": 384661}, {"segments_info": [{"id": 5922150, "category_id": 1, "iscrowd": 0, "bbox": [76, 65, 3, 5], "area": 13}, {"id": 6575479, "category_id": 1, "iscrowd": 0, "bbox": [311, 124, 31, 45], "area": 583}, {"id": 8351639, "category_id": 1, "iscrowd": 0, "bbox": [362, 104, 26, 33], "area": 311}, {"id": 10790052, "category_id": 1, "iscrowd": 0, "bbox": [336, 50, 2, 7], "area": 13}, {"id": 4934232, "category_id": 1, "iscrowd": 0, "bbox": [226, 50, 4, 13], "area": 40}, {"id": 3291204, "category_id": 1, "iscrowd": 0, "bbox": [240, 133, 26, 57], "area": 869}, {"id": 4800076, "category_id": 1, "iscrowd": 0, "bbox": [173, 137, 63, 108], "area": 2866}, {"id": 5719875, "category_id": 1, "iscrowd": 0, "bbox": [140, 102, 12, 31], "area": 196}, {"id": 5330774, "category_id": 1, "iscrowd": 0, "bbox": [202, 50, 6, 14], "area": 51}, {"id": 11777476, "category_id": 35, "iscrowd": 0, "bbox": [367, 132, 22, 7], "area": 29}, {"id": 9868951, "category_id": 35, "iscrowd": 0, "bbox": [234, 182, 37, 12], "area": 44}, {"id": 10460573, "category_id": 35, "iscrowd": 0, "bbox": [178, 236, 50, 20], "area": 101}, {"id": 8157304, "category_id": 35, "iscrowd": 0, "bbox": [132, 132, 28, 3], "area": 50}, {"id": 11249835, "category_id": 35, "iscrowd": 0, "bbox": [320, 162, 21, 8], "area": 33}, {"id": 13421514, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 500, 332], "area": 158076}], "file_name": "000000384666.png", "image_id": 384666}, {"segments_info": [{"id": 5014930, "category_id": 1, "iscrowd": 0, "bbox": [308, 95, 89, 230], "area": 12049}, {"id": 4870791, "category_id": 1, "iscrowd": 0, "bbox": [364, 23, 110, 113], "area": 6825}, {"id": 7453646, "category_id": 37, "iscrowd": 0, "bbox": [424, 118, 5, 8], "area": 14}, {"id": 6854815, "category_id": 43, "iscrowd": 0, "bbox": [361, 214, 35, 73], "area": 1433}, {"id": 10386803, "category_id": 145, "iscrowd": 0, "bbox": [0, 180, 606, 300], "area": 91334}, {"id": 7575179, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 195239}], "file_name": "000000384670.png", "image_id": 384670}, {"segments_info": [{"id": 4995642, "category_id": 1, "iscrowd": 0, "bbox": [179, 39, 149, 274], "area": 28502}, {"id": 3289392, "category_id": 44, "iscrowd": 0, "bbox": [49, 269, 14, 56], "area": 590}, {"id": 6974535, "category_id": 44, "iscrowd": 0, "bbox": [21, 254, 24, 94], "area": 1940}, {"id": 2850397, "category_id": 44, "iscrowd": 0, "bbox": [38, 262, 13, 75], "area": 521}, {"id": 7698813, "category_id": 70, "iscrowd": 0, "bbox": [45, 211, 128, 93], "area": 5050}, {"id": 6183510, "category_id": 77, "iscrowd": 0, "bbox": [278, 85, 15, 32], "area": 392}, {"id": 12365738, "category_id": 81, "iscrowd": 0, "bbox": [1, 309, 281, 190], "area": 29698}, {"id": 10198429, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 335, 394], "area": 63773}, {"id": 9407887, "category_id": 168, "iscrowd": 0, "bbox": [0, 25, 89, 259], "area": 10614}, {"id": 10395299, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 375, 419], "area": 27264}], "file_name": "000000384808.png", "image_id": 384808}, {"segments_info": [{"id": 3036801, "category_id": 70, "iscrowd": 0, "bbox": [305, 463, 103, 167], "area": 12491}, {"id": 4423859, "category_id": 107, "iscrowd": 0, "bbox": [413, 409, 55, 98], "area": 2890}, {"id": 4160171, "category_id": 109, "iscrowd": 0, "bbox": [111, 14, 340, 528], "area": 148481}, {"id": 3962791, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 67883}, {"id": 1853818, "category_id": 176, "iscrowd": 0, "bbox": [90, 69, 378, 330], "area": 14059}, {"id": 992342, "category_id": 188, "iscrowd": 0, "bbox": [392, 71, 88, 569], "area": 19421}, {"id": 3039630, "category_id": 190, "iscrowd": 0, "bbox": [105, 545, 288, 95], "area": 18193}, {"id": 2251143, "category_id": 199, "iscrowd": 0, "bbox": [89, 0, 391, 76], "area": 7586}, {"id": 1386318, "category_id": 200, "iscrowd": 0, "bbox": [168, 625, 186, 15], "area": 2171}], "file_name": "000000384850.png", "image_id": 384850}, {"segments_info": [{"id": 9602689, "category_id": 9, "iscrowd": 0, "bbox": [375, 317, 16, 4], "area": 45}, {"id": 9405052, "category_id": 9, "iscrowd": 0, "bbox": [535, 328, 12, 8], "area": 81}, {"id": 8746865, "category_id": 9, "iscrowd": 0, "bbox": [549, 322, 19, 15], "area": 233}, {"id": 8022603, "category_id": 9, "iscrowd": 0, "bbox": [605, 325, 10, 13], "area": 51}, {"id": 8684421, "category_id": 16, "iscrowd": 0, "bbox": [355, 229, 21, 13], "area": 122}, {"id": 8353140, "category_id": 16, "iscrowd": 0, "bbox": [490, 217, 27, 17], "area": 147}, {"id": 7038048, "category_id": 16, "iscrowd": 0, "bbox": [521, 183, 19, 19], "area": 147}, {"id": 5789018, "category_id": 16, "iscrowd": 0, "bbox": [578, 211, 20, 3], "area": 54}, {"id": 4605776, "category_id": 16, "iscrowd": 0, "bbox": [173, 255, 26, 12], "area": 155}, {"id": 7629932, "category_id": 16, "iscrowd": 0, "bbox": [602, 220, 24, 18], "area": 107}, {"id": 4341830, "category_id": 16, "iscrowd": 0, "bbox": [583, 204, 10, 7], "area": 32}, {"id": 8091516, "category_id": 16, "iscrowd": 0, "bbox": [434, 278, 32, 22], "area": 197}, {"id": 6448749, "category_id": 16, "iscrowd": 0, "bbox": [87, 269, 22, 21], "area": 161}, {"id": 5262144, "category_id": 85, "iscrowd": 0, "bbox": [67, 105, 24, 23], "area": 439}, {"id": 10656910, "category_id": 95, "iscrowd": 0, "bbox": [0, 139, 640, 110], "area": 29478}, {"id": 1908528, "category_id": 149, "iscrowd": 0, "bbox": [0, 305, 101, 45], "area": 2488}, {"id": 10525851, "category_id": 155, "iscrowd": 0, "bbox": [90, 317, 550, 140], "area": 71457}, {"id": 3485469, "category_id": 184, "iscrowd": 0, "bbox": [0, 204, 640, 123], "area": 11354}, {"id": 1841177, "category_id": 185, "iscrowd": 0, "bbox": [0, 304, 121, 83], "area": 3733}, {"id": 15132902, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 306], "area": 136808}, {"id": 9737107, "category_id": 197, "iscrowd": 0, "bbox": [47, 13, 593, 314], "area": 24135}, {"id": 2963529, "category_id": 199, "iscrowd": 0, "bbox": [0, 326, 136, 131], "area": 10833}], "file_name": "000000384949.png", "image_id": 384949}, {"segments_info": [{"id": 2832474, "category_id": 1, "iscrowd": 0, "bbox": [0, 308, 273, 171], "area": 18709}, {"id": 2966319, "category_id": 44, "iscrowd": 0, "bbox": [248, 0, 54, 166], "area": 7139}, {"id": 1455177, "category_id": 44, "iscrowd": 0, "bbox": [380, 0, 62, 181], "area": 7201}, {"id": 4225697, "category_id": 46, "iscrowd": 0, "bbox": [326, 106, 63, 124], "area": 5165}, {"id": 4616849, "category_id": 46, "iscrowd": 0, "bbox": [430, 124, 83, 129], "area": 5889}, {"id": 5465159, "category_id": 48, "iscrowd": 0, "bbox": [94, 161, 91, 130], "area": 1553}, {"id": 7961422, "category_id": 50, "iscrowd": 0, "bbox": [176, 163, 44, 129], "area": 2304}, {"id": 3361078, "category_id": 51, "iscrowd": 0, "bbox": [84, 125, 191, 141], "area": 17470}, {"id": 3825775, "category_id": 59, "iscrowd": 0, "bbox": [259, 239, 217, 165], "area": 24226}, {"id": 3893128, "category_id": 67, "iscrowd": 0, "bbox": [0, 2, 639, 472], "area": 191472}, {"id": 3169147, "category_id": 189, "iscrowd": 0, "bbox": [37, 0, 603, 480], "area": 3679}, {"id": 3552555, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 466], "area": 16505}], "file_name": "000000385029.png", "image_id": 385029}, {"segments_info": [{"id": 1777187, "category_id": 1, "iscrowd": 0, "bbox": [205, 150, 20, 52], "area": 618}, {"id": 3553884, "category_id": 1, "iscrowd": 0, "bbox": [250, 161, 26, 28], "area": 428}, {"id": 1578775, "category_id": 1, "iscrowd": 0, "bbox": [10, 191, 18, 49], "area": 528}, {"id": 4142650, "category_id": 10, "iscrowd": 0, "bbox": [197, 78, 7, 9], "area": 44}, {"id": 4669120, "category_id": 44, "iscrowd": 0, "bbox": [232, 83, 15, 71], "area": 753}, {"id": 9869211, "category_id": 149, "iscrowd": 0, "bbox": [0, 227, 500, 148], "area": 46975}, {"id": 4739916, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 61, 224], "area": 8107}, {"id": 16250100, "category_id": 187, "iscrowd": 0, "bbox": [50, 0, 450, 77], "area": 18433}, {"id": 7041146, "category_id": 191, "iscrowd": 0, "bbox": [0, 222, 500, 130], "area": 6932}, {"id": 2303268, "category_id": 194, "iscrowd": 0, "bbox": [404, 291, 18, 21], "area": 233}, {"id": 7894395, "category_id": 197, "iscrowd": 0, "bbox": [12, 11, 340, 243], "area": 56554}], "file_name": "000000385190.png", "image_id": 385190}, {"segments_info": [{"id": 4147798, "category_id": 17, "iscrowd": 0, "bbox": [32, 8, 600, 398], "area": 147642}, {"id": 7511029, "category_id": 57, "iscrowd": 0, "bbox": [30, 267, 144, 123], "area": 4482}, {"id": 3696040, "category_id": 118, "iscrowd": 0, "bbox": [0, 373, 640, 107], "area": 26511}, {"id": 11580346, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 154], "area": 39743}, {"id": 7699351, "category_id": 200, "iscrowd": 0, "bbox": [0, 32, 640, 448], "area": 88154}], "file_name": "000000385205.png", "image_id": 385205}, {"segments_info": [{"id": 8616551, "category_id": 72, "iscrowd": 0, "bbox": [120, 90, 133, 119], "area": 14400}, {"id": 8817798, "category_id": 72, "iscrowd": 0, "bbox": [373, 61, 167, 146], "area": 22194}, {"id": 11186087, "category_id": 73, "iscrowd": 0, "bbox": [255, 207, 142, 104], "area": 10604}, {"id": 11124939, "category_id": 74, "iscrowd": 0, "bbox": [520, 337, 33, 27], "area": 678}, {"id": 4017498, "category_id": 74, "iscrowd": 0, "bbox": [432, 325, 28, 26], "area": 527}, {"id": 2040354, "category_id": 74, "iscrowd": 0, "bbox": [200, 257, 22, 14], "area": 223}, {"id": 3423811, "category_id": 75, "iscrowd": 0, "bbox": [100, 273, 33, 16], "area": 340}, {"id": 1777956, "category_id": 76, "iscrowd": 0, "bbox": [265, 281, 119, 16], "area": 1651}, {"id": 2369060, "category_id": 76, "iscrowd": 0, "bbox": [192, 323, 185, 17], "area": 2045}, {"id": 1974821, "category_id": 76, "iscrowd": 0, "bbox": [47, 281, 195, 31], "area": 4266}, {"id": 8490384, "category_id": 76, "iscrowd": 0, "bbox": [186, 334, 189, 25], "area": 4275}, {"id": 6722483, "category_id": 84, "iscrowd": 0, "bbox": [540, 96, 70, 94], "area": 979}, {"id": 2567736, "category_id": 84, "iscrowd": 0, "bbox": [421, 204, 64, 20], "area": 994}, {"id": 1385838, "category_id": 84, "iscrowd": 0, "bbox": [534, 18, 56, 64], "area": 2334}, {"id": 2894639, "category_id": 84, "iscrowd": 0, "bbox": [624, 123, 6, 37], "area": 214}, {"id": 6319994, "category_id": 84, "iscrowd": 0, "bbox": [319, 165, 31, 42], "area": 868}, {"id": 4406067, "category_id": 84, "iscrowd": 0, "bbox": [531, 253, 58, 12], "area": 373}, {"id": 4277313, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 83, 421], "area": 18981}, {"id": 2767698, "category_id": 156, "iscrowd": 0, "bbox": [490, 0, 150, 385], "area": 35531}, {"id": 2445699, "category_id": 189, "iscrowd": 0, "bbox": [49, 206, 591, 215], "area": 61686}, {"id": 8161681, "category_id": 195, "iscrowd": 0, "bbox": [60, 0, 391, 178], "area": 43393}, {"id": 9605517, "category_id": 199, "iscrowd": 0, "bbox": [58, 0, 458, 421], "area": 21338}], "file_name": "000000385719.png", "image_id": 385719}, {"segments_info": [{"id": 3289650, "category_id": 18, "iscrowd": 0, "bbox": [297, 300, 117, 96], "area": 7566}, {"id": 3355443, "category_id": 37, "iscrowd": 0, "bbox": [203, 340, 12, 12], "area": 100}, {"id": 2434341, "category_id": 37, "iscrowd": 0, "bbox": [215, 373, 12, 11], "area": 98}, {"id": 592137, "category_id": 44, "iscrowd": 0, "bbox": [507, 421, 21, 47], "area": 517}, {"id": 986895, "category_id": 44, "iscrowd": 0, "bbox": [448, 445, 20, 34], "area": 597}, {"id": 8289918, "category_id": 62, "iscrowd": 0, "bbox": [356, 141, 131, 146], "area": 8424}, {"id": 4737096, "category_id": 64, "iscrowd": 0, "bbox": [461, 147, 139, 153], "area": 5607}, {"id": 3223857, "category_id": 65, "iscrowd": 0, "bbox": [294, 285, 130, 141], "area": 7882}, {"id": 2171169, "category_id": 86, "iscrowd": 0, "bbox": [549, 236, 23, 31], "area": 448}, {"id": 2960685, "category_id": 118, "iscrowd": 0, "bbox": [70, 211, 559, 269], "area": 25593}, {"id": 1644825, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 189, 480], "area": 29936}, {"id": 14013909, "category_id": 180, "iscrowd": 0, "bbox": [212, 0, 329, 260], "area": 65818}, {"id": 1184274, "category_id": 189, "iscrowd": 0, "bbox": [413, 392, 39, 88], "area": 2363}, {"id": 4868682, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 349], "area": 53164}, {"id": 2039583, "category_id": 200, "iscrowd": 0, "bbox": [125, 230, 297, 250], "area": 39138}], "file_name": "000000385997.png", "image_id": 385997}, {"segments_info": [{"id": 3093826, "category_id": 56, "iscrowd": 0, "bbox": [172, 296, 418, 273], "area": 84393}, {"id": 5798301, "category_id": 196, "iscrowd": 0, "bbox": [37, 61, 542, 513], "area": 143075}], "file_name": "000000386134.png", "image_id": 386134}, {"segments_info": [{"id": 11245698, "category_id": 3, "iscrowd": 0, "bbox": [1, 107, 27, 54], "area": 1073}, {"id": 10847598, "category_id": 3, "iscrowd": 0, "bbox": [0, 94, 61, 51], "area": 1492}, {"id": 2839374, "category_id": 53, "iscrowd": 0, "bbox": [209, 141, 110, 84], "area": 5630}, {"id": 2973271, "category_id": 53, "iscrowd": 0, "bbox": [209, 271, 106, 85], "area": 5585}, {"id": 3165819, "category_id": 55, "iscrowd": 0, "bbox": [208, 182, 109, 110], "area": 8324}, {"id": 2638449, "category_id": 55, "iscrowd": 0, "bbox": [209, 71, 115, 86], "area": 5596}, {"id": 1453146, "category_id": 55, "iscrowd": 0, "bbox": [256, 377, 28, 24], "area": 472}, {"id": 3494780, "category_id": 55, "iscrowd": 0, "bbox": [288, 335, 23, 25], "area": 417}, {"id": 1125223, "category_id": 55, "iscrowd": 0, "bbox": [251, 92, 31, 34], "area": 800}, {"id": 732766, "category_id": 55, "iscrowd": 0, "bbox": [265, 339, 24, 29], "area": 529}, {"id": 2965353, "category_id": 55, "iscrowd": 0, "bbox": [269, 82, 34, 26], "area": 577}, {"id": 601698, "category_id": 55, "iscrowd": 0, "bbox": [247, 358, 24, 24], "area": 451}, {"id": 2112614, "category_id": 55, "iscrowd": 0, "bbox": [275, 358, 26, 27], "area": 482}, {"id": 1259564, "category_id": 64, "iscrowd": 0, "bbox": [72, 308, 218, 294], "area": 41292}, {"id": 1845283, "category_id": 64, "iscrowd": 0, "bbox": [266, 410, 212, 135], "area": 18956}, {"id": 2505533, "category_id": 122, "iscrowd": 0, "bbox": [186, 325, 123, 120], "area": 6529}, {"id": 14275272, "category_id": 149, "iscrowd": 0, "bbox": [6, 167, 217, 148], "area": 21243}, {"id": 7172463, "category_id": 181, "iscrowd": 0, "bbox": [0, 101, 478, 539], "area": 30657}, {"id": 13159363, "category_id": 191, "iscrowd": 0, "bbox": [2, 135, 216, 323], "area": 16782}, {"id": 9998733, "category_id": 195, "iscrowd": 0, "bbox": [30, 0, 264, 157], "area": 19540}, {"id": 10197391, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 214, 139], "area": 10509}, {"id": 10527387, "category_id": 199, "iscrowd": 0, "bbox": [289, 0, 189, 477], "area": 66987}], "file_name": "000000386210.png", "image_id": 386210}, {"segments_info": [{"id": 4636138, "category_id": 55, "iscrowd": 0, "bbox": [212, 101, 261, 273], "area": 53342}, {"id": 2512201, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 220377}], "file_name": "000000386277.png", "image_id": 386277}, {"segments_info": [{"id": 6846373, "category_id": 1, "iscrowd": 0, "bbox": [508, 0, 117, 150], "area": 6085}, {"id": 10391948, "category_id": 1, "iscrowd": 0, "bbox": [0, 101, 91, 324], "area": 18879}, {"id": 6184304, "category_id": 1, "iscrowd": 0, "bbox": [28, 65, 117, 194], "area": 10912}, {"id": 8883876, "category_id": 1, "iscrowd": 0, "bbox": [19, 5, 137, 145], "area": 8333}, {"id": 9339548, "category_id": 1, "iscrowd": 0, "bbox": [101, 0, 98, 72], "area": 5075}, {"id": 4273978, "category_id": 1, "iscrowd": 0, "bbox": [366, 86, 268, 334], "area": 35252}, {"id": 8881360, "category_id": 1, "iscrowd": 0, "bbox": [366, 1, 135, 127], "area": 8698}, {"id": 4671593, "category_id": 1, "iscrowd": 0, "bbox": [88, 92, 307, 333], "area": 52432}, {"id": 12563642, "category_id": 1, "iscrowd": 0, "bbox": [245, 3, 150, 181], "area": 15592}, {"id": 9801360, "category_id": 1, "iscrowd": 0, "bbox": [171, 27, 87, 175], "area": 5486}, {"id": 4868180, "category_id": 1, "iscrowd": 0, "bbox": [490, 78, 150, 329], "area": 22994}, {"id": 6653111, "category_id": 43, "iscrowd": 0, "bbox": [345, 0, 214, 202], "area": 10164}, {"id": 11891476, "category_id": 62, "iscrowd": 0, "bbox": [259, 232, 166, 137], "area": 4225}, {"id": 3491671, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 21008}], "file_name": "000000386352.png", "image_id": 386352}, {"segments_info": [{"id": 4410453, "category_id": 17, "iscrowd": 0, "bbox": [124, 133, 118, 385], "area": 35509}, {"id": 5406119, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 426, 587], "area": 191792}, {"id": 3823210, "category_id": 190, "iscrowd": 0, "bbox": [138, 506, 116, 72], "area": 4486}, {"id": 8034984, "category_id": 200, "iscrowd": 0, "bbox": [0, 555, 426, 85], "area": 29781}], "file_name": "000000386457.png", "image_id": 386457}, {"segments_info": [{"id": 2829194, "category_id": 1, "iscrowd": 0, "bbox": [63, 49, 362, 591], "area": 110229}, {"id": 4281450, "category_id": 43, "iscrowd": 0, "bbox": [19, 244, 168, 194], "area": 18537}, {"id": 1653041, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 426, 615], "area": 125487}, {"id": 1647402, "category_id": 194, "iscrowd": 0, "bbox": [0, 506, 426, 134], "area": 17642}], "file_name": "000000386879.png", "image_id": 386879}, {"segments_info": [{"id": 5061693, "category_id": 1, "iscrowd": 0, "bbox": [210, 143, 217, 268], "area": 29660}, {"id": 722187, "category_id": 62, "iscrowd": 0, "bbox": [384, 247, 47, 173], "area": 3387}, {"id": 14207938, "category_id": 72, "iscrowd": 0, "bbox": [42, 254, 176, 217], "area": 24380}, {"id": 10068142, "category_id": 76, "iscrowd": 0, "bbox": [213, 374, 93, 45], "area": 2438}, {"id": 3953228, "category_id": 84, "iscrowd": 0, "bbox": [565, 343, 16, 72], "area": 467}, {"id": 7165272, "category_id": 84, "iscrowd": 0, "bbox": [608, 176, 24, 58], "area": 594}, {"id": 3681312, "category_id": 84, "iscrowd": 0, "bbox": [591, 173, 16, 57], "area": 390}, {"id": 8546911, "category_id": 84, "iscrowd": 0, "bbox": [597, 174, 20, 60], "area": 482}, {"id": 5656361, "category_id": 84, "iscrowd": 0, "bbox": [559, 343, 15, 69], "area": 474}, {"id": 3616299, "category_id": 84, "iscrowd": 0, "bbox": [474, 319, 48, 82], "area": 3241}, {"id": 5393733, "category_id": 84, "iscrowd": 0, "bbox": [587, 357, 53, 28], "area": 442}, {"id": 3549477, "category_id": 84, "iscrowd": 0, "bbox": [583, 173, 12, 56], "area": 292}, {"id": 8491672, "category_id": 84, "iscrowd": 0, "bbox": [494, 135, 87, 10], "area": 477}, {"id": 1906196, "category_id": 84, "iscrowd": 0, "bbox": [573, 339, 18, 77], "area": 556}, {"id": 8753042, "category_id": 84, "iscrowd": 0, "bbox": [577, 6, 16, 80], "area": 512}, {"id": 1249043, "category_id": 84, "iscrowd": 0, "bbox": [543, 2, 23, 84], "area": 606}, {"id": 2888206, "category_id": 84, "iscrowd": 0, "bbox": [519, 326, 21, 81], "area": 1148}, {"id": 4869200, "category_id": 84, "iscrowd": 1, "bbox": [82, 0, 558, 480], "area": 37672}, {"id": 9756916, "category_id": 130, "iscrowd": 0, "bbox": [0, 90, 78, 128], "area": 8236}, {"id": 5199193, "category_id": 156, "iscrowd": 0, "bbox": [450, 16, 190, 464], "area": 22795}, {"id": 4281964, "category_id": 189, "iscrowd": 0, "bbox": [0, 364, 522, 116], "area": 15190}, {"id": 6514029, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 61642}, {"id": 8093575, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 32728}], "file_name": "000000386912.png", "image_id": 386912}, {"segments_info": [{"id": 3160902, "category_id": 44, "iscrowd": 0, "bbox": [221, 175, 44, 136], "area": 3421}, {"id": 5801644, "category_id": 47, "iscrowd": 0, "bbox": [112, 236, 50, 51], "area": 1974}, {"id": 4093093, "category_id": 47, "iscrowd": 0, "bbox": [223, 281, 59, 63], "area": 2722}, {"id": 4932454, "category_id": 47, "iscrowd": 0, "bbox": [42, 208, 73, 70], "area": 3622}, {"id": 2630702, "category_id": 50, "iscrowd": 0, "bbox": [447, 188, 19, 29], "area": 290}, {"id": 5065028, "category_id": 72, "iscrowd": 0, "bbox": [238, 24, 231, 159], "area": 32887}, {"id": 10265010, "category_id": 72, "iscrowd": 0, "bbox": [41, 31, 200, 191], "area": 31822}, {"id": 10195070, "category_id": 73, "iscrowd": 0, "bbox": [274, 168, 217, 195], "area": 22919}, {"id": 1843548, "category_id": 74, "iscrowd": 0, "bbox": [481, 349, 30, 16], "area": 275}, {"id": 2246007, "category_id": 74, "iscrowd": 0, "bbox": [472, 285, 52, 34], "area": 1123}, {"id": 1184287, "category_id": 75, "iscrowd": 0, "bbox": [532, 288, 17, 16], "area": 206}, {"id": 986905, "category_id": 75, "iscrowd": 0, "bbox": [519, 278, 38, 10], "area": 301}, {"id": 2380163, "category_id": 76, "iscrowd": 0, "bbox": [245, 386, 81, 18], "area": 392}, {"id": 2378103, "category_id": 76, "iscrowd": 0, "bbox": [235, 361, 223, 51], "area": 1971}, {"id": 2891810, "category_id": 76, "iscrowd": 0, "bbox": [301, 281, 163, 59], "area": 5236}, {"id": 5791610, "category_id": 84, "iscrowd": 0, "bbox": [0, 107, 38, 29], "area": 862}, {"id": 6388394, "category_id": 84, "iscrowd": 0, "bbox": [1, 250, 51, 12], "area": 437}, {"id": 7506874, "category_id": 84, "iscrowd": 0, "bbox": [0, 241, 49, 11], "area": 337}, {"id": 5787742, "category_id": 84, "iscrowd": 0, "bbox": [0, 88, 36, 9], "area": 228}, {"id": 2249168, "category_id": 84, "iscrowd": 0, "bbox": [3, 289, 58, 11], "area": 358}, {"id": 3030893, "category_id": 84, "iscrowd": 0, "bbox": [0, 318, 64, 12], "area": 396}, {"id": 6979242, "category_id": 84, "iscrowd": 0, "bbox": [0, 230, 55, 13], "area": 354}, {"id": 1844544, "category_id": 84, "iscrowd": 0, "bbox": [555, 365, 70, 78], "area": 2739}, {"id": 6124700, "category_id": 84, "iscrowd": 0, "bbox": [0, 145, 40, 7], "area": 122}, {"id": 1912921, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 106, 480], "area": 23917}, {"id": 1785705, "category_id": 189, "iscrowd": 0, "bbox": [52, 192, 548, 288], "area": 60345}, {"id": 2766163, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 20367}, {"id": 3289176, "category_id": 199, "iscrowd": 0, "bbox": [41, 0, 599, 212], "area": 30113}], "file_name": "000000387098.png", "image_id": 387098}, {"segments_info": [{"id": 4349827, "category_id": 21, "iscrowd": 0, "bbox": [213, 199, 12, 16], "area": 146}, {"id": 1842463, "category_id": 21, "iscrowd": 0, "bbox": [293, 202, 30, 15], "area": 310}, {"id": 3825030, "category_id": 21, "iscrowd": 0, "bbox": [100, 205, 8, 10], "area": 39}, {"id": 2571089, "category_id": 21, "iscrowd": 0, "bbox": [502, 196, 29, 22], "area": 391}, {"id": 3297143, "category_id": 21, "iscrowd": 0, "bbox": [332, 204, 11, 12], "area": 82}, {"id": 5205651, "category_id": 21, "iscrowd": 0, "bbox": [51, 196, 40, 23], "area": 445}, {"id": 5666715, "category_id": 21, "iscrowd": 0, "bbox": [153, 202, 24, 14], "area": 199}, {"id": 4216947, "category_id": 21, "iscrowd": 0, "bbox": [355, 207, 6, 9], "area": 39}, {"id": 1712947, "category_id": 21, "iscrowd": 0, "bbox": [412, 196, 28, 21], "area": 184}, {"id": 4349572, "category_id": 21, "iscrowd": 0, "bbox": [225, 201, 10, 14], "area": 103}, {"id": 3559532, "category_id": 21, "iscrowd": 0, "bbox": [381, 197, 32, 21], "area": 396}, {"id": 5008012, "category_id": 21, "iscrowd": 0, "bbox": [237, 195, 31, 22], "area": 423}, {"id": 1582393, "category_id": 21, "iscrowd": 0, "bbox": [423, 199, 26, 18], "area": 284}, {"id": 2108733, "category_id": 21, "iscrowd": 0, "bbox": [446, 193, 43, 25], "area": 663}, {"id": 3754840, "category_id": 21, "iscrowd": 1, "bbox": [7, 197, 492, 23], "area": 1890}, {"id": 2566181, "category_id": 184, "iscrowd": 0, "bbox": [0, 104, 640, 115], "area": 21094}, {"id": 10720656, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 216], "area": 109853}, {"id": 3096380, "category_id": 193, "iscrowd": 0, "bbox": [0, 198, 640, 227], "area": 135187}], "file_name": "000000387148.png", "image_id": 387148}, {"segments_info": [{"id": 3355958, "category_id": 17, "iscrowd": 0, "bbox": [69, 108, 571, 366], "area": 70812}, {"id": 8352594, "category_id": 65, "iscrowd": 0, "bbox": [0, 113, 640, 366], "area": 133715}, {"id": 11908790, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 632, 192], "area": 86643}], "file_name": "000000387383.png", "image_id": 387383}, {"segments_info": [{"id": 3031377, "category_id": 6, "iscrowd": 0, "bbox": [41, 212, 570, 166], "area": 70244}, {"id": 14730409, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 353], "area": 153254}, {"id": 6720396, "category_id": 194, "iscrowd": 0, "bbox": [466, 347, 174, 72], "area": 4929}, {"id": 9077898, "category_id": 197, "iscrowd": 0, "bbox": [0, 128, 37, 146], "area": 2569}, {"id": 2566183, "category_id": 199, "iscrowd": 0, "bbox": [0, 308, 51, 38], "area": 1625}], "file_name": "000000387387.png", "image_id": 387387}, {"segments_info": [{"id": 5260886, "category_id": 1, "iscrowd": 0, "bbox": [218, 309, 27, 66], "area": 1228}, {"id": 2963509, "category_id": 1, "iscrowd": 0, "bbox": [420, 277, 33, 93], "area": 1324}, {"id": 3881536, "category_id": 1, "iscrowd": 0, "bbox": [204, 328, 14, 29], "area": 310}, {"id": 1841946, "category_id": 1, "iscrowd": 0, "bbox": [115, 278, 67, 131], "area": 3974}, {"id": 3484980, "category_id": 1, "iscrowd": 0, "bbox": [325, 258, 41, 121], "area": 2380}, {"id": 3025193, "category_id": 1, "iscrowd": 0, "bbox": [496, 256, 37, 120], "area": 2866}, {"id": 1709590, "category_id": 1, "iscrowd": 0, "bbox": [3, 288, 24, 70], "area": 592}, {"id": 3289136, "category_id": 1, "iscrowd": 0, "bbox": [446, 275, 48, 99], "area": 2338}, {"id": 3423807, "category_id": 1, "iscrowd": 0, "bbox": [263, 273, 34, 101], "area": 1869}, {"id": 3485743, "category_id": 1, "iscrowd": 0, "bbox": [449, 259, 30, 114], "area": 872}, {"id": 1841690, "category_id": 1, "iscrowd": 0, "bbox": [350, 258, 88, 165], "area": 9699}, {"id": 2302500, "category_id": 1, "iscrowd": 0, "bbox": [172, 273, 34, 87], "area": 1981}, {"id": 4868943, "category_id": 35, "iscrowd": 0, "bbox": [19, 279, 22, 112], "area": 1410}, {"id": 3552307, "category_id": 35, "iscrowd": 0, "bbox": [67, 216, 64, 207], "area": 4582}, {"id": 3883081, "category_id": 35, "iscrowd": 0, "bbox": [0, 271, 14, 93], "area": 804}, {"id": 4341052, "category_id": 35, "iscrowd": 0, "bbox": [449, 370, 52, 12], "area": 105}, {"id": 5262928, "category_id": 35, "iscrowd": 0, "bbox": [504, 373, 41, 7], "area": 101}, {"id": 4998725, "category_id": 35, "iscrowd": 0, "bbox": [220, 372, 21, 3], "area": 26}, {"id": 5131340, "category_id": 35, "iscrowd": 0, "bbox": [320, 374, 40, 4], "area": 93}, {"id": 2628888, "category_id": 36, "iscrowd": 0, "bbox": [165, 348, 62, 57], "area": 1367}, {"id": 9998218, "category_id": 159, "iscrowd": 0, "bbox": [0, 122, 640, 301], "area": 128965}, {"id": 12559247, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 164], "area": 73916}, {"id": 9800325, "category_id": 192, "iscrowd": 0, "bbox": [0, 30, 640, 153], "area": 28161}], "file_name": "000000387916.png", "image_id": 387916}, {"segments_info": [{"id": 7566972, "category_id": 1, "iscrowd": 0, "bbox": [283, 153, 146, 139], "area": 7965}, {"id": 3553331, "category_id": 1, "iscrowd": 0, "bbox": [212, 0, 45, 80], "area": 1931}, {"id": 4540749, "category_id": 1, "iscrowd": 0, "bbox": [394, 95, 106, 206], "area": 11538}, {"id": 9272698, "category_id": 1, "iscrowd": 0, "bbox": [237, 0, 59, 84], "area": 2557}, {"id": 3616039, "category_id": 1, "iscrowd": 0, "bbox": [268, 0, 39, 45], "area": 958}, {"id": 10524052, "category_id": 1, "iscrowd": 0, "bbox": [305, 1, 67, 88], "area": 3043}, {"id": 7825506, "category_id": 1, "iscrowd": 0, "bbox": [365, 0, 68, 93], "area": 2968}, {"id": 13880271, "category_id": 1, "iscrowd": 0, "bbox": [80, 69, 148, 244], "area": 13970}, {"id": 6118992, "category_id": 1, "iscrowd": 0, "bbox": [108, 5, 34, 67], "area": 1079}, {"id": 7758685, "category_id": 1, "iscrowd": 0, "bbox": [429, 0, 61, 105], "area": 2561}, {"id": 7508654, "category_id": 39, "iscrowd": 0, "bbox": [107, 23, 66, 59], "area": 587}, {"id": 4871776, "category_id": 40, "iscrowd": 0, "bbox": [285, 212, 36, 24], "area": 614}, {"id": 6194071, "category_id": 145, "iscrowd": 0, "bbox": [0, 70, 500, 262], "area": 87129}, {"id": 6117965, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 473, 110], "area": 20362}, {"id": 3684666, "category_id": 199, "iscrowd": 0, "bbox": [153, 0, 347, 77], "area": 3027}], "file_name": "000000388056.png", "image_id": 388056}, {"segments_info": [{"id": 10522235, "category_id": 1, "iscrowd": 0, "bbox": [246, 89, 174, 323], "area": 17588}, {"id": 12710622, "category_id": 37, "iscrowd": 0, "bbox": [243, 72, 11, 12], "area": 106}, {"id": 11380627, "category_id": 43, "iscrowd": 0, "bbox": [333, 113, 24, 29], "area": 245}, {"id": 10197093, "category_id": 92, "iscrowd": 0, "bbox": [119, 0, 141, 95], "area": 10901}, {"id": 12828866, "category_id": 144, "iscrowd": 0, "bbox": [0, 303, 640, 122], "area": 62346}, {"id": 9142611, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 343], "area": 180569}], "file_name": "000000388215.png", "image_id": 388215}, {"segments_info": [{"id": 6117207, "category_id": 2, "iscrowd": 0, "bbox": [33, 133, 396, 321], "area": 44543}, {"id": 5392459, "category_id": 5, "iscrowd": 0, "bbox": [501, 91, 61, 30], "area": 549}, {"id": 3747369, "category_id": 15, "iscrowd": 0, "bbox": [3, 187, 294, 248], "area": 36592}, {"id": 6576736, "category_id": 44, "iscrowd": 0, "bbox": [271, 267, 46, 48], "area": 1342}, {"id": 12826798, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 430], "area": 184096}, {"id": 1708561, "category_id": 193, "iscrowd": 0, "bbox": [0, 424, 640, 54], "area": 24371}, {"id": 1840148, "category_id": 198, "iscrowd": 0, "bbox": [0, 370, 640, 75], "area": 13551}], "file_name": "000000388258.png", "image_id": 388258}, {"segments_info": [{"id": 5530493, "category_id": 1, "iscrowd": 0, "bbox": [442, 304, 99, 29], "area": 1280}, {"id": 2765645, "category_id": 1, "iscrowd": 0, "bbox": [334, 296, 31, 32], "area": 446}, {"id": 2369866, "category_id": 1, "iscrowd": 0, "bbox": [119, 336, 27, 17], "area": 256}, {"id": 2434878, "category_id": 1, "iscrowd": 0, "bbox": [46, 334, 74, 32], "area": 1072}, {"id": 5333117, "category_id": 1, "iscrowd": 0, "bbox": [419, 253, 11, 29], "area": 196}, {"id": 2370118, "category_id": 1, "iscrowd": 0, "bbox": [173, 308, 23, 29], "area": 452}, {"id": 1447970, "category_id": 1, "iscrowd": 0, "bbox": [256, 302, 19, 30], "area": 382}, {"id": 4143961, "category_id": 1, "iscrowd": 0, "bbox": [606, 220, 4, 13], "area": 26}, {"id": 3948374, "category_id": 1, "iscrowd": 0, "bbox": [282, 306, 58, 21], "area": 632}, {"id": 1381947, "category_id": 1, "iscrowd": 0, "bbox": [370, 273, 10, 13], "area": 79}, {"id": 2830166, "category_id": 1, "iscrowd": 0, "bbox": [73, 340, 24, 12], "area": 174}, {"id": 6972273, "category_id": 1, "iscrowd": 0, "bbox": [340, 261, 17, 52], "area": 472}, {"id": 3225942, "category_id": 1, "iscrowd": 0, "bbox": [360, 293, 17, 29], "area": 314}, {"id": 5462122, "category_id": 1, "iscrowd": 1, "bbox": [0, 213, 627, 147], "area": 8209}, {"id": 2433057, "category_id": 27, "iscrowd": 0, "bbox": [543, 311, 32, 23], "area": 497}, {"id": 5855918, "category_id": 28, "iscrowd": 0, "bbox": [385, 231, 18, 8], "area": 102}, {"id": 10525393, "category_id": 28, "iscrowd": 0, "bbox": [112, 277, 49, 26], "area": 614}, {"id": 10197722, "category_id": 28, "iscrowd": 0, "bbox": [201, 274, 66, 28], "area": 716}, {"id": 10591702, "category_id": 28, "iscrowd": 0, "bbox": [595, 230, 45, 26], "area": 744}, {"id": 11644641, "category_id": 28, "iscrowd": 0, "bbox": [450, 249, 76, 39], "area": 1249}, {"id": 9670847, "category_id": 28, "iscrowd": 0, "bbox": [1, 289, 116, 133], "area": 5168}, {"id": 10723547, "category_id": 28, "iscrowd": 0, "bbox": [235, 273, 50, 23], "area": 491}, {"id": 10986452, "category_id": 28, "iscrowd": 0, "bbox": [252, 271, 48, 21], "area": 439}, {"id": 9736385, "category_id": 28, "iscrowd": 0, "bbox": [138, 274, 107, 66], "area": 2455}, {"id": 11907554, "category_id": 28, "iscrowd": 0, "bbox": [572, 232, 42, 17], "area": 396}, {"id": 10525657, "category_id": 28, "iscrowd": 0, "bbox": [79, 283, 61, 26], "area": 762}, {"id": 9867969, "category_id": 28, "iscrowd": 0, "bbox": [466, 239, 174, 80], "area": 8973}, {"id": 11184587, "category_id": 28, "iscrowd": 1, "bbox": [22, 221, 583, 89], "area": 5741}, {"id": 7507799, "category_id": 62, "iscrowd": 0, "bbox": [462, 314, 151, 75], "area": 2667}, {"id": 7442510, "category_id": 62, "iscrowd": 0, "bbox": [454, 308, 19, 9], "area": 55}, {"id": 2633527, "category_id": 62, "iscrowd": 0, "bbox": [545, 383, 6, 11], "area": 60}, {"id": 10074477, "category_id": 62, "iscrowd": 0, "bbox": [474, 313, 47, 8], "area": 145}, {"id": 4939319, "category_id": 62, "iscrowd": 0, "bbox": [471, 329, 169, 76], "area": 2633}, {"id": 8295081, "category_id": 154, "iscrowd": 0, "bbox": [0, 262, 640, 165], "area": 55998}, {"id": 13879222, "category_id": 155, "iscrowd": 0, "bbox": [16, 271, 156, 15], "area": 703}, {"id": 9801371, "category_id": 166, "iscrowd": 0, "bbox": [0, 292, 29, 71], "area": 851}, {"id": 4012090, "category_id": 168, "iscrowd": 0, "bbox": [150, 319, 20, 22], "area": 185}, {"id": 16512233, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 261], "area": 125700}, {"id": 9605037, "category_id": 190, "iscrowd": 0, "bbox": [623, 227, 17, 17], "area": 33}, {"id": 8023904, "category_id": 192, "iscrowd": 0, "bbox": [0, 226, 263, 60], "area": 6574}, {"id": 7037011, "category_id": 197, "iscrowd": 0, "bbox": [221, 98, 419, 171], "area": 31500}], "file_name": "000000388846.png", "image_id": 388846}, {"segments_info": [{"id": 6442825, "category_id": 1, "iscrowd": 0, "bbox": [81, 51, 127, 259], "area": 20526}, {"id": 7894123, "category_id": 1, "iscrowd": 0, "bbox": [178, 74, 48, 142], "area": 3006}, {"id": 8027278, "category_id": 1, "iscrowd": 0, "bbox": [246, 28, 222, 300], "area": 43329}, {"id": 9081753, "category_id": 2, "iscrowd": 0, "bbox": [460, 154, 40, 65], "area": 1725}, {"id": 10923954, "category_id": 31, "iscrowd": 0, "bbox": [209, 144, 89, 188], "area": 3663}, {"id": 12308184, "category_id": 31, "iscrowd": 0, "bbox": [400, 141, 19, 113], "area": 815}, {"id": 5942453, "category_id": 33, "iscrowd": 0, "bbox": [15, 281, 66, 51], "area": 3104}, {"id": 6852315, "category_id": 53, "iscrowd": 0, "bbox": [84, 202, 157, 130], "area": 10711}, {"id": 6381673, "category_id": 77, "iscrowd": 0, "bbox": [302, 118, 27, 31], "area": 294}, {"id": 9023174, "category_id": 122, "iscrowd": 0, "bbox": [0, 155, 208, 80], "area": 2728}, {"id": 8884107, "category_id": 149, "iscrowd": 0, "bbox": [446, 194, 54, 88], "area": 3153}, {"id": 7964296, "category_id": 189, "iscrowd": 0, "bbox": [0, 216, 83, 45], "area": 2177}, {"id": 9937054, "category_id": 191, "iscrowd": 0, "bbox": [206, 167, 294, 165], "area": 2199}, {"id": 14935522, "category_id": 195, "iscrowd": 0, "bbox": [0, 114, 74, 60], "area": 2084}, {"id": 8226180, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 196], "area": 51972}], "file_name": "000000388903.png", "image_id": 388903}, {"segments_info": [{"id": 525833, "category_id": 1, "iscrowd": 0, "bbox": [3, 3, 310, 273], "area": 54659}, {"id": 6449816, "category_id": 1, "iscrowd": 0, "bbox": [0, 318, 345, 322], "area": 46131}, {"id": 328710, "category_id": 1, "iscrowd": 0, "bbox": [293, 0, 150, 235], "area": 27115}, {"id": 4339251, "category_id": 77, "iscrowd": 0, "bbox": [184, 209, 209, 323], "area": 36439}, {"id": 7443885, "category_id": 118, "iscrowd": 0, "bbox": [199, 87, 281, 553], "area": 58102}, {"id": 1250870, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 471, 289], "area": 23050}, {"id": 15460584, "category_id": 195, "iscrowd": 0, "bbox": [0, 249, 258, 218], "area": 27994}, {"id": 7771351, "category_id": 196, "iscrowd": 0, "bbox": [113, 319, 97, 93], "area": 3995}, {"id": 1450538, "category_id": 199, "iscrowd": 0, "bbox": [445, 0, 35, 97], "area": 2032}, {"id": 2238812, "category_id": 200, "iscrowd": 0, "bbox": [203, 119, 277, 521], "area": 15647}], "file_name": "000000388927.png", "image_id": 388927}, {"segments_info": [{"id": 460552, "category_id": 1, "iscrowd": 0, "bbox": [3, 141, 129, 195], "area": 13261}, {"id": 1184533, "category_id": 1, "iscrowd": 0, "bbox": [14, 176, 44, 92], "area": 2068}, {"id": 3555654, "category_id": 1, "iscrowd": 0, "bbox": [398, 196, 29, 79], "area": 1580}, {"id": 3290671, "category_id": 1, "iscrowd": 0, "bbox": [169, 196, 46, 60], "area": 1875}, {"id": 459523, "category_id": 1, "iscrowd": 0, "bbox": [241, 206, 40, 59], "area": 1432}, {"id": 6577990, "category_id": 1, "iscrowd": 0, "bbox": [271, 169, 149, 160], "area": 12376}, {"id": 1125712, "category_id": 59, "iscrowd": 0, "bbox": [0, 391, 370, 196], "area": 57408}, {"id": 1977392, "category_id": 62, "iscrowd": 0, "bbox": [334, 329, 93, 45], "area": 2561}, {"id": 3421477, "category_id": 62, "iscrowd": 0, "bbox": [128, 265, 46, 25], "area": 222}, {"id": 1712930, "category_id": 62, "iscrowd": 0, "bbox": [251, 281, 141, 66], "area": 3936}, {"id": 1644818, "category_id": 62, "iscrowd": 0, "bbox": [245, 259, 22, 16], "area": 134}, {"id": 2371116, "category_id": 62, "iscrowd": 0, "bbox": [89, 278, 73, 69], "area": 1957}, {"id": 1720415, "category_id": 67, "iscrowd": 0, "bbox": [0, 280, 94, 108], "area": 6722}, {"id": 2308175, "category_id": 67, "iscrowd": 0, "bbox": [0, 341, 427, 299], "area": 56529}, {"id": 1124921, "category_id": 67, "iscrowd": 0, "bbox": [365, 277, 61, 54], "area": 2518}, {"id": 7436119, "category_id": 67, "iscrowd": 0, "bbox": [130, 259, 129, 27], "area": 2331}, {"id": 2764068, "category_id": 77, "iscrowd": 0, "bbox": [289, 362, 87, 23], "area": 1306}, {"id": 2768720, "category_id": 100, "iscrowd": 0, "bbox": [196, 272, 65, 97], "area": 2933}, {"id": 1447702, "category_id": 181, "iscrowd": 0, "bbox": [0, 63, 411, 227], "area": 37526}, {"id": 2034177, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 427, 170], "area": 40431}], "file_name": "000000389109.png", "image_id": 389109}, {"segments_info": [{"id": 7109265, "category_id": 1, "iscrowd": 0, "bbox": [314, 1, 34, 53], "area": 928}, {"id": 3822463, "category_id": 1, "iscrowd": 0, "bbox": [376, 0, 42, 16], "area": 399}, {"id": 4477807, "category_id": 1, "iscrowd": 0, "bbox": [457, 0, 32, 40], "area": 623}, {"id": 4606807, "category_id": 1, "iscrowd": 0, "bbox": [518, 4, 50, 35], "area": 1236}, {"id": 9871781, "category_id": 1, "iscrowd": 0, "bbox": [228, 0, 86, 119], "area": 6647}, {"id": 4015446, "category_id": 1, "iscrowd": 0, "bbox": [567, 1, 52, 54], "area": 2184}, {"id": 5528419, "category_id": 1, "iscrowd": 0, "bbox": [169, 208, 163, 128], "area": 8414}, {"id": 5790819, "category_id": 1, "iscrowd": 0, "bbox": [467, 0, 58, 35], "area": 1179}, {"id": 7242150, "category_id": 1, "iscrowd": 0, "bbox": [345, 0, 42, 52], "area": 925}, {"id": 7042983, "category_id": 1, "iscrowd": 0, "bbox": [411, 0, 46, 42], "area": 1133}, {"id": 11436078, "category_id": 42, "iscrowd": 0, "bbox": [202, 299, 122, 66], "area": 5132}, {"id": 13017204, "category_id": 178, "iscrowd": 0, "bbox": [0, 58, 640, 368], "area": 158547}, {"id": 5191451, "category_id": 185, "iscrowd": 0, "bbox": [488, 0, 56, 23], "area": 514}, {"id": 11893316, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 367], "area": 73284}], "file_name": "000000389197.png", "image_id": 389197}, {"segments_info": [{"id": 2699592, "category_id": 33, "iscrowd": 0, "bbox": [19, 33, 608, 586], "area": 229627}, {"id": 3428010, "category_id": 84, "iscrowd": 0, "bbox": [416, 319, 32, 42], "area": 1023}, {"id": 8019076, "category_id": 84, "iscrowd": 0, "bbox": [205, 413, 93, 145], "area": 7218}, {"id": 12110295, "category_id": 84, "iscrowd": 0, "bbox": [166, 422, 105, 137], "area": 5824}, {"id": 2312077, "category_id": 84, "iscrowd": 0, "bbox": [91, 345, 89, 96], "area": 6347}, {"id": 4812211, "category_id": 84, "iscrowd": 0, "bbox": [447, 305, 111, 137], "area": 11618}, {"id": 6979750, "category_id": 84, "iscrowd": 0, "bbox": [283, 398, 67, 159], "area": 6823}, {"id": 6581687, "category_id": 84, "iscrowd": 0, "bbox": [356, 306, 58, 81], "area": 3239}, {"id": 2044250, "category_id": 84, "iscrowd": 0, "bbox": [72, 417, 99, 144], "area": 10703}, {"id": 6399436, "category_id": 84, "iscrowd": 0, "bbox": [268, 294, 97, 121], "area": 8376}, {"id": 8429507, "category_id": 84, "iscrowd": 0, "bbox": [174, 305, 98, 135], "area": 9883}, {"id": 5929629, "category_id": 84, "iscrowd": 0, "bbox": [334, 446, 43, 98], "area": 2485}, {"id": 9928589, "category_id": 84, "iscrowd": 0, "bbox": [339, 350, 183, 197], "area": 22881}, {"id": 856626, "category_id": 84, "iscrowd": 0, "bbox": [70, 350, 37, 98], "area": 1253}], "file_name": "000000389315.png", "image_id": 389315}, {"segments_info": [{"id": 789774, "category_id": 1, "iscrowd": 0, "bbox": [535, 56, 89, 216], "area": 6013}, {"id": 5664388, "category_id": 22, "iscrowd": 0, "bbox": [219, 65, 315, 238], "area": 43406}, {"id": 4742253, "category_id": 22, "iscrowd": 0, "bbox": [94, 80, 124, 256], "area": 21195}, {"id": 11905925, "category_id": 148, "iscrowd": 0, "bbox": [198, 15, 391, 53], "area": 763}, {"id": 1583671, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 42, 34], "area": 1137}, {"id": 3755621, "category_id": 175, "iscrowd": 0, "bbox": [219, 166, 4, 40], "area": 104}, {"id": 3094588, "category_id": 177, "iscrowd": 0, "bbox": [318, 0, 322, 314], "area": 30455}, {"id": 12890756, "category_id": 178, "iscrowd": 0, "bbox": [34, 0, 555, 80], "area": 18304}, {"id": 5728876, "category_id": 184, "iscrowd": 0, "bbox": [12, 0, 419, 252], "area": 13855}, {"id": 4213586, "category_id": 185, "iscrowd": 0, "bbox": [117, 25, 477, 107], "area": 7555}, {"id": 7508650, "category_id": 194, "iscrowd": 0, "bbox": [0, 132, 640, 229], "area": 67746}, {"id": 1975326, "category_id": 199, "iscrowd": 0, "bbox": [584, 0, 38, 70], "area": 1079}], "file_name": "000000389316.png", "image_id": 389316}, {"segments_info": [{"id": 2577785, "category_id": 51, "iscrowd": 0, "bbox": [139, 276, 409, 216], "area": 64989}, {"id": 5210533, "category_id": 51, "iscrowd": 0, "bbox": [58, 46, 417, 281], "area": 62516}, {"id": 5727621, "category_id": 53, "iscrowd": 0, "bbox": [151, 203, 228, 139], "area": 14227}, {"id": 2178601, "category_id": 56, "iscrowd": 0, "bbox": [373, 277, 105, 130], "area": 9482}, {"id": 1267679, "category_id": 57, "iscrowd": 0, "bbox": [142, 140, 111, 101], "area": 6361}, {"id": 10783466, "category_id": 67, "iscrowd": 0, "bbox": [1, 1, 639, 533], "area": 179371}], "file_name": "000000389381.png", "image_id": 389381}, {"segments_info": [{"id": 9535104, "category_id": 1, "iscrowd": 0, "bbox": [310, 162, 9, 18], "area": 118}, {"id": 7760991, "category_id": 1, "iscrowd": 0, "bbox": [113, 151, 15, 23], "area": 248}, {"id": 9470561, "category_id": 1, "iscrowd": 0, "bbox": [356, 147, 6, 6], "area": 21}, {"id": 6969930, "category_id": 1, "iscrowd": 0, "bbox": [133, 171, 5, 6], "area": 17}, {"id": 9404037, "category_id": 1, "iscrowd": 0, "bbox": [381, 144, 3, 5], "area": 10}, {"id": 9469292, "category_id": 1, "iscrowd": 0, "bbox": [365, 143, 5, 6], "area": 21}, {"id": 7893595, "category_id": 1, "iscrowd": 0, "bbox": [560, 133, 5, 5], "area": 17}, {"id": 4142391, "category_id": 1, "iscrowd": 0, "bbox": [341, 164, 11, 21], "area": 135}, {"id": 7892025, "category_id": 1, "iscrowd": 0, "bbox": [566, 136, 6, 5], "area": 20}, {"id": 7694395, "category_id": 1, "iscrowd": 0, "bbox": [320, 142, 17, 17], "area": 118}, {"id": 7956297, "category_id": 1, "iscrowd": 0, "bbox": [600, 138, 5, 6], "area": 22}, {"id": 10912665, "category_id": 1, "iscrowd": 0, "bbox": [531, 137, 14, 4], "area": 31}, {"id": 11707274, "category_id": 9, "iscrowd": 0, "bbox": [293, 136, 66, 30], "area": 837}, {"id": 6385791, "category_id": 21, "iscrowd": 0, "bbox": [135, 283, 94, 69], "area": 2911}, {"id": 1711139, "category_id": 21, "iscrowd": 0, "bbox": [13, 271, 75, 57], "area": 2224}, {"id": 2237738, "category_id": 21, "iscrowd": 0, "bbox": [552, 257, 67, 61], "area": 2467}, {"id": 2500651, "category_id": 21, "iscrowd": 0, "bbox": [452, 259, 84, 71], "area": 2973}, {"id": 12112094, "category_id": 154, "iscrowd": 0, "bbox": [0, 231, 640, 248], "area": 135176}, {"id": 11443311, "category_id": 155, "iscrowd": 0, "bbox": [0, 83, 640, 203], "area": 100924}, {"id": 14925458, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 92], "area": 27730}, {"id": 9400901, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 94], "area": 30055}], "file_name": "000000389451.png", "image_id": 389451}, {"segments_info": [{"id": 2434341, "category_id": 1, "iscrowd": 0, "bbox": [467, 139, 59, 171], "area": 5338}, {"id": 3158064, "category_id": 9, "iscrowd": 0, "bbox": [594, 344, 8, 7], "area": 38}, {"id": 1513239, "category_id": 16, "iscrowd": 0, "bbox": [34, 272, 36, 36], "area": 537}, {"id": 10132122, "category_id": 16, "iscrowd": 0, "bbox": [75, 49, 43, 42], "area": 816}, {"id": 8092539, "category_id": 155, "iscrowd": 0, "bbox": [595, 349, 45, 40], "area": 1586}, {"id": 15329769, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 354], "area": 190393}, {"id": 460551, "category_id": 197, "iscrowd": 0, "bbox": [0, 292, 640, 129], "area": 65862}], "file_name": "000000389532.png", "image_id": 389532}, {"segments_info": [{"id": 7435631, "category_id": 3, "iscrowd": 0, "bbox": [458, 161, 46, 34], "area": 1331}, {"id": 5857372, "category_id": 20, "iscrowd": 0, "bbox": [128, 221, 126, 99], "area": 7871}, {"id": 9674655, "category_id": 20, "iscrowd": 0, "bbox": [377, 185, 21, 14], "area": 221}, {"id": 6383972, "category_id": 20, "iscrowd": 0, "bbox": [318, 194, 98, 109], "area": 4109}, {"id": 6120801, "category_id": 20, "iscrowd": 0, "bbox": [440, 205, 57, 76], "area": 2777}, {"id": 5857887, "category_id": 20, "iscrowd": 0, "bbox": [263, 215, 71, 91], "area": 2004}, {"id": 11254717, "category_id": 20, "iscrowd": 0, "bbox": [281, 221, 24, 18], "area": 72}, {"id": 6713196, "category_id": 20, "iscrowd": 0, "bbox": [0, 244, 50, 64], "area": 2787}, {"id": 8490639, "category_id": 20, "iscrowd": 0, "bbox": [186, 190, 33, 30], "area": 594}, {"id": 5858402, "category_id": 20, "iscrowd": 0, "bbox": [204, 205, 101, 96], "area": 4168}, {"id": 5923681, "category_id": 20, "iscrowd": 0, "bbox": [45, 214, 90, 97], "area": 5365}, {"id": 5594717, "category_id": 20, "iscrowd": 0, "bbox": [466, 193, 74, 84], "area": 2507}, {"id": 9213589, "category_id": 20, "iscrowd": 0, "bbox": [414, 185, 27, 16], "area": 334}, {"id": 6252128, "category_id": 20, "iscrowd": 0, "bbox": [400, 209, 52, 93], "area": 2518}, {"id": 8951447, "category_id": 20, "iscrowd": 1, "bbox": [13, 184, 449, 128], "area": 11404}, {"id": 6909545, "category_id": 149, "iscrowd": 0, "bbox": [238, 162, 402, 186], "area": 31468}, {"id": 4935753, "category_id": 184, "iscrowd": 0, "bbox": [50, 0, 590, 184], "area": 70203}, {"id": 16378840, "category_id": 187, "iscrowd": 0, "bbox": [142, 0, 498, 71], "area": 26901}, {"id": 6979198, "category_id": 193, "iscrowd": 0, "bbox": [0, 151, 640, 107], "area": 16341}], "file_name": "000000389566.png", "image_id": 389566}, {"segments_info": [{"id": 5926515, "category_id": 1, "iscrowd": 0, "bbox": [116, 214, 54, 122], "area": 3788}, {"id": 9077878, "category_id": 6, "iscrowd": 0, "bbox": [358, 47, 282, 367], "area": 91977}, {"id": 5132879, "category_id": 149, "iscrowd": 0, "bbox": [12, 390, 628, 90], "area": 37960}, {"id": 5200468, "category_id": 184, "iscrowd": 0, "bbox": [0, 213, 360, 133], "area": 25980}, {"id": 12303027, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 262], "area": 76865}, {"id": 6187369, "category_id": 191, "iscrowd": 0, "bbox": [0, 310, 381, 170], "area": 22600}, {"id": 9146511, "category_id": 197, "iscrowd": 0, "bbox": [112, 197, 142, 87], "area": 3413}, {"id": 6854830, "category_id": 199, "iscrowd": 0, "bbox": [50, 332, 30, 11], "area": 264}], "file_name": "000000389684.png", "image_id": 389684}, {"segments_info": [{"id": 8816269, "category_id": 70, "iscrowd": 0, "bbox": [162, 133, 115, 202], "area": 19121}, {"id": 1317668, "category_id": 81, "iscrowd": 0, "bbox": [511, 238, 129, 169], "area": 12549}, {"id": 987678, "category_id": 107, "iscrowd": 0, "bbox": [376, 60, 264, 365], "area": 29521}, {"id": 527648, "category_id": 118, "iscrowd": 0, "bbox": [109, 233, 306, 192], "area": 38985}, {"id": 11513517, "category_id": 168, "iscrowd": 0, "bbox": [479, 352, 102, 73], "area": 5092}, {"id": 6649489, "category_id": 177, "iscrowd": 0, "bbox": [554, 0, 86, 192], "area": 6355}, {"id": 1120550, "category_id": 188, "iscrowd": 0, "bbox": [350, 0, 262, 425], "area": 41389}, {"id": 9670804, "category_id": 195, "iscrowd": 0, "bbox": [37, 95, 414, 171], "area": 3066}, {"id": 1976118, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 108136}], "file_name": "000000389804.png", "image_id": 389804}, {"segments_info": [{"id": 8754090, "category_id": 1, "iscrowd": 0, "bbox": [137, 42, 414, 432], "area": 72709}, {"id": 3105918, "category_id": 52, "iscrowd": 0, "bbox": [314, 414, 83, 65], "area": 3255}, {"id": 5745620, "category_id": 52, "iscrowd": 0, "bbox": [244, 376, 83, 43], "area": 1729}, {"id": 6532556, "category_id": 52, "iscrowd": 0, "bbox": [182, 308, 243, 165], "area": 21945}, {"id": 3103349, "category_id": 122, "iscrowd": 0, "bbox": [205, 399, 192, 81], "area": 1609}, {"id": 2509900, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 122127}, {"id": 4479079, "category_id": 194, "iscrowd": 0, "bbox": [528, 364, 86, 105], "area": 5874}], "file_name": "000000389812.png", "image_id": 389812}, {"segments_info": [{"id": 800350, "category_id": 18, "iscrowd": 0, "bbox": [4, 82, 529, 392], "area": 142813}, {"id": 2184296, "category_id": 63, "iscrowd": 0, "bbox": [1, 0, 639, 473], "area": 156052}], "file_name": "000000389933.png", "image_id": 389933}, {"segments_info": [{"id": 6907212, "category_id": 1, "iscrowd": 0, "bbox": [346, 147, 89, 82], "area": 2358}, {"id": 10137009, "category_id": 42, "iscrowd": 0, "bbox": [284, 159, 59, 32], "area": 1124}, {"id": 11249797, "category_id": 155, "iscrowd": 0, "bbox": [0, 118, 640, 309], "area": 184512}, {"id": 15395818, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 138], "area": 85173}], "file_name": "000000390246.png", "image_id": 390246}, {"segments_info": [{"id": 7177355, "category_id": 11, "iscrowd": 0, "bbox": [174, 83, 80, 208], "area": 11126}, {"id": 12037544, "category_id": 178, "iscrowd": 0, "bbox": [64, 177, 260, 187], "area": 14268}, {"id": 9348532, "category_id": 184, "iscrowd": 0, "bbox": [3, 0, 127, 199], "area": 12420}, {"id": 9803412, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 500, 175], "area": 70176}, {"id": 8488330, "category_id": 191, "iscrowd": 0, "bbox": [0, 188, 500, 176], "area": 64028}, {"id": 4938608, "category_id": 194, "iscrowd": 0, "bbox": [0, 164, 500, 44], "area": 6709}, {"id": 13029851, "category_id": 199, "iscrowd": 0, "bbox": [152, 157, 335, 26], "area": 3161}], "file_name": "000000390301.png", "image_id": 390301}, {"segments_info": [{"id": 4081987, "category_id": 1, "iscrowd": 0, "bbox": [159, 188, 66, 152], "area": 6558}, {"id": 6188909, "category_id": 1, "iscrowd": 0, "bbox": [535, 118, 79, 162], "area": 7455}, {"id": 7044218, "category_id": 1, "iscrowd": 0, "bbox": [298, 283, 97, 142], "area": 7714}, {"id": 6254445, "category_id": 1, "iscrowd": 0, "bbox": [201, 289, 99, 143], "area": 9153}, {"id": 8360338, "category_id": 1, "iscrowd": 0, "bbox": [185, 121, 66, 106], "area": 3079}, {"id": 6780789, "category_id": 1, "iscrowd": 0, "bbox": [360, 277, 97, 156], "area": 8375}, {"id": 6912632, "category_id": 1, "iscrowd": 0, "bbox": [496, 281, 113, 150], "area": 9713}, {"id": 6254436, "category_id": 1, "iscrowd": 0, "bbox": [101, 295, 113, 134], "area": 9291}, {"id": 5398621, "category_id": 1, "iscrowd": 0, "bbox": [31, 245, 95, 180], "area": 9432}, {"id": 10071986, "category_id": 1, "iscrowd": 0, "bbox": [310, 122, 65, 110], "area": 3743}, {"id": 11979985, "category_id": 1, "iscrowd": 0, "bbox": [424, 184, 55, 141], "area": 4591}, {"id": 8623510, "category_id": 1, "iscrowd": 0, "bbox": [364, 175, 65, 122], "area": 5011}, {"id": 7504770, "category_id": 1, "iscrowd": 0, "bbox": [263, 181, 73, 172], "area": 7556}, {"id": 7307648, "category_id": 1, "iscrowd": 1, "bbox": [38, 19, 598, 415], "area": 116961}, {"id": 7702407, "category_id": 31, "iscrowd": 0, "bbox": [416, 222, 43, 81], "area": 289}, {"id": 3030070, "category_id": 32, "iscrowd": 0, "bbox": [77, 295, 10, 24], "area": 145}, {"id": 3424830, "category_id": 32, "iscrowd": 0, "bbox": [71, 99, 6, 21], "area": 99}, {"id": 7438977, "category_id": 32, "iscrowd": 0, "bbox": [255, 92, 12, 41], "area": 349}, {"id": 10269366, "category_id": 32, "iscrowd": 0, "bbox": [140, 104, 9, 15], "area": 92}, {"id": 4016708, "category_id": 32, "iscrowd": 0, "bbox": [543, 339, 9, 40], "area": 200}, {"id": 6057322, "category_id": 32, "iscrowd": 0, "bbox": [197, 70, 373, 58], "area": 525}, {"id": 12111313, "category_id": 32, "iscrowd": 0, "bbox": [314, 94, 6, 9], "area": 38}, {"id": 3687228, "category_id": 32, "iscrowd": 0, "bbox": [464, 328, 15, 26], "area": 229}, {"id": 3950659, "category_id": 32, "iscrowd": 0, "bbox": [163, 343, 11, 27], "area": 157}, {"id": 4675153, "category_id": 32, "iscrowd": 0, "bbox": [241, 328, 11, 28], "area": 195}, {"id": 4476746, "category_id": 32, "iscrowd": 0, "bbox": [330, 336, 7, 19], "area": 85}, {"id": 8163988, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 640, 347], "area": 36184}, {"id": 9941429, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 464, 120], "area": 12140}, {"id": 8953247, "category_id": 191, "iscrowd": 0, "bbox": [0, 138, 640, 297], "area": 13410}], "file_name": "000000390555.png", "image_id": 390555}, {"segments_info": [{"id": 7895147, "category_id": 1, "iscrowd": 0, "bbox": [272, 1, 362, 416], "area": 78470}, {"id": 6515045, "category_id": 23, "iscrowd": 0, "bbox": [193, 145, 134, 226], "area": 21235}, {"id": 9343885, "category_id": 44, "iscrowd": 0, "bbox": [279, 153, 36, 98], "area": 2290}, {"id": 3814702, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 323, 36], "area": 6210}, {"id": 5331030, "category_id": 191, "iscrowd": 0, "bbox": [0, 19, 413, 63], "area": 8197}, {"id": 3570012, "category_id": 193, "iscrowd": 0, "bbox": [0, 49, 640, 431], "area": 168154}], "file_name": "000000390826.png", "image_id": 390826}, {"segments_info": [{"id": 4145301, "category_id": 1, "iscrowd": 0, "bbox": [50, 74, 217, 425], "area": 64319}, {"id": 5329502, "category_id": 1, "iscrowd": 0, "bbox": [180, 60, 47, 122], "area": 3898}, {"id": 4146291, "category_id": 43, "iscrowd": 0, "bbox": [54, 433, 38, 67], "area": 1672}, {"id": 5008565, "category_id": 190, "iscrowd": 0, "bbox": [0, 390, 333, 110], "area": 13408}], "file_name": "000000390902.png", "image_id": 390902}, {"segments_info": [{"id": 10457485, "category_id": 1, "iscrowd": 0, "bbox": [82, 87, 315, 387], "area": 74332}, {"id": 13159124, "category_id": 75, "iscrowd": 0, "bbox": [121, 87, 46, 60], "area": 813}, {"id": 14803430, "category_id": 75, "iscrowd": 0, "bbox": [313, 328, 19, 22], "area": 236}, {"id": 5398895, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 257, 480], "area": 36206}, {"id": 3444175, "category_id": 130, "iscrowd": 0, "bbox": [100, 58, 28, 20], "area": 386}, {"id": 1581612, "category_id": 161, "iscrowd": 0, "bbox": [466, 0, 174, 203], "area": 19729}, {"id": 6450034, "category_id": 175, "iscrowd": 0, "bbox": [327, 0, 246, 383], "area": 52408}, {"id": 2371915, "category_id": 177, "iscrowd": 0, "bbox": [21, 0, 310, 418], "area": 9468}, {"id": 1578775, "category_id": 181, "iscrowd": 0, "bbox": [67, 117, 33, 115], "area": 2077}, {"id": 3884889, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 232, 76], "area": 12597}, {"id": 1317924, "category_id": 190, "iscrowd": 0, "bbox": [37, 281, 184, 199], "area": 19705}, {"id": 2112545, "category_id": 195, "iscrowd": 0, "bbox": [85, 0, 80, 330], "area": 4994}, {"id": 5663350, "category_id": 199, "iscrowd": 0, "bbox": [66, 0, 574, 480], "area": 30042}], "file_name": "000000391140.png", "image_id": 391140}, {"segments_info": [{"id": 4474199, "category_id": 22, "iscrowd": 0, "bbox": [250, 226, 70, 103], "area": 4328}, {"id": 8223620, "category_id": 22, "iscrowd": 0, "bbox": [0, 6, 77, 303], "area": 8129}, {"id": 5988205, "category_id": 22, "iscrowd": 0, "bbox": [488, 48, 152, 289], "area": 23401}, {"id": 6844287, "category_id": 22, "iscrowd": 0, "bbox": [35, 34, 233, 299], "area": 33049}, {"id": 6120308, "category_id": 22, "iscrowd": 0, "bbox": [113, 37, 469, 304], "area": 67284}, {"id": 7699597, "category_id": 22, "iscrowd": 0, "bbox": [255, 0, 362, 329], "area": 24589}, {"id": 8818838, "category_id": 148, "iscrowd": 0, "bbox": [0, 303, 640, 124], "area": 64035}, {"id": 4490105, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 90], "area": 22302}, {"id": 10200244, "category_id": 194, "iscrowd": 0, "bbox": [0, 81, 616, 250], "area": 18730}], "file_name": "000000391144.png", "image_id": 391144}, {"segments_info": [{"id": 6841178, "category_id": 1, "iscrowd": 0, "bbox": [223, 84, 128, 205], "area": 11059}, {"id": 5529180, "category_id": 1, "iscrowd": 0, "bbox": [292, 67, 119, 224], "area": 8456}, {"id": 4607022, "category_id": 1, "iscrowd": 0, "bbox": [207, 39, 68, 168], "area": 2218}, {"id": 8089937, "category_id": 3, "iscrowd": 0, "bbox": [123, 49, 111, 50], "area": 3917}, {"id": 12425310, "category_id": 28, "iscrowd": 0, "bbox": [0, 22, 86, 34], "area": 2180}, {"id": 12044982, "category_id": 34, "iscrowd": 0, "bbox": [428, 141, 41, 19], "area": 395}, {"id": 6516566, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 75], "area": 35297}, {"id": 7897958, "category_id": 185, "iscrowd": 0, "bbox": [0, 49, 640, 73], "area": 21483}, {"id": 14275005, "category_id": 187, "iscrowd": 0, "bbox": [165, 0, 99, 13], "area": 652}, {"id": 5083248, "category_id": 193, "iscrowd": 0, "bbox": [0, 92, 640, 334], "area": 186291}], "file_name": "000000391290.png", "image_id": 391290}, {"segments_info": [{"id": 2893610, "category_id": 1, "iscrowd": 0, "bbox": [244, 177, 159, 241], "area": 14405}, {"id": 3947851, "category_id": 15, "iscrowd": 0, "bbox": [141, 329, 371, 86], "area": 11144}, {"id": 1776672, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 640, 412], "area": 232911}, {"id": 4409425, "category_id": 190, "iscrowd": 0, "bbox": [0, 388, 640, 71], "area": 26926}, {"id": 2241326, "category_id": 193, "iscrowd": 0, "bbox": [0, 412, 640, 47], "area": 7179}], "file_name": "000000391375.png", "image_id": 391375}, {"segments_info": [{"id": 6386305, "category_id": 85, "iscrowd": 0, "bbox": [294, 312, 63, 61], "area": 2965}, {"id": 9804703, "category_id": 92, "iscrowd": 0, "bbox": [420, 416, 22, 74], "area": 895}, {"id": 12565689, "category_id": 130, "iscrowd": 0, "bbox": [136, 585, 21, 27], "area": 287}, {"id": 729908, "category_id": 184, "iscrowd": 0, "bbox": [0, 531, 438, 109], "area": 24263}, {"id": 197122, "category_id": 187, "iscrowd": 0, "bbox": [56, 0, 424, 640], "area": 106526}, {"id": 2768728, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 172216}], "file_name": "000000391648.png", "image_id": 391648}, {"segments_info": [{"id": 7954549, "category_id": 1, "iscrowd": 0, "bbox": [40, 1, 252, 561], "area": 90153}, {"id": 1646929, "category_id": 1, "iscrowd": 0, "bbox": [548, 275, 38, 36], "area": 868}, {"id": 1774110, "category_id": 1, "iscrowd": 0, "bbox": [583, 293, 52, 236], "area": 7623}, {"id": 10923993, "category_id": 1, "iscrowd": 0, "bbox": [0, 253, 109, 321], "area": 22063}, {"id": 5260718, "category_id": 1, "iscrowd": 0, "bbox": [219, 99, 394, 462], "area": 104118}, {"id": 7820689, "category_id": 32, "iscrowd": 0, "bbox": [179, 128, 52, 246], "area": 9335}, {"id": 6325431, "category_id": 61, "iscrowd": 0, "bbox": [155, 373, 147, 66], "area": 7900}, {"id": 2959461, "category_id": 67, "iscrowd": 0, "bbox": [3, 538, 632, 102], "area": 53850}, {"id": 2233429, "category_id": 77, "iscrowd": 0, "bbox": [515, 542, 72, 20], "area": 1227}, {"id": 1117982, "category_id": 109, "iscrowd": 0, "bbox": [558, 204, 77, 118], "area": 5820}, {"id": 1447985, "category_id": 112, "iscrowd": 0, "bbox": [377, 195, 190, 100], "area": 4173}, {"id": 12378867, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 27, 21], "area": 503}, {"id": 2244206, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 635, 169], "area": 52903}, {"id": 2170443, "category_id": 189, "iscrowd": 0, "bbox": [0, 505, 635, 135], "area": 772}, {"id": 2378104, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 635, 320], "area": 31863}], "file_name": "000000391722.png", "image_id": 391722}, {"segments_info": [{"id": 6714484, "category_id": 85, "iscrowd": 0, "bbox": [181, 414, 119, 107], "area": 9827}, {"id": 16578544, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 550], "area": 173246}, {"id": 6448225, "category_id": 197, "iscrowd": 0, "bbox": [0, 212, 480, 428], "area": 119960}], "file_name": "000000392228.png", "image_id": 392228}, {"segments_info": [{"id": 5788756, "category_id": 5, "iscrowd": 0, "bbox": [339, 202, 123, 99], "area": 5343}, {"id": 14078415, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 267864}], "file_name": "000000392481.png", "image_id": 392481}, {"segments_info": [{"id": 5064773, "category_id": 1, "iscrowd": 0, "bbox": [511, 251, 15, 15], "area": 149}, {"id": 5655117, "category_id": 1, "iscrowd": 0, "bbox": [280, 265, 9, 23], "area": 166}, {"id": 10858170, "category_id": 1, "iscrowd": 0, "bbox": [534, 251, 41, 117], "area": 2719}, {"id": 6447461, "category_id": 1, "iscrowd": 0, "bbox": [319, 258, 20, 64], "area": 613}, {"id": 12041931, "category_id": 1, "iscrowd": 0, "bbox": [581, 253, 44, 130], "area": 3335}, {"id": 6051410, "category_id": 1, "iscrowd": 0, "bbox": [456, 252, 30, 93], "area": 1436}, {"id": 6905941, "category_id": 3, "iscrowd": 0, "bbox": [301, 265, 21, 26], "area": 318}, {"id": 4406638, "category_id": 3, "iscrowd": 0, "bbox": [397, 269, 36, 20], "area": 550}, {"id": 6972767, "category_id": 3, "iscrowd": 0, "bbox": [375, 269, 27, 18], "area": 374}, {"id": 5918795, "category_id": 3, "iscrowd": 0, "bbox": [314, 268, 40, 27], "area": 320}, {"id": 5326913, "category_id": 3, "iscrowd": 0, "bbox": [355, 268, 22, 17], "area": 292}, {"id": 8945271, "category_id": 3, "iscrowd": 0, "bbox": [334, 264, 22, 19], "area": 217}, {"id": 5667173, "category_id": 6, "iscrowd": 0, "bbox": [427, 144, 213, 199], "area": 25690}, {"id": 10266280, "category_id": 27, "iscrowd": 0, "bbox": [323, 270, 15, 18], "area": 209}, {"id": 4868430, "category_id": 31, "iscrowd": 0, "bbox": [571, 270, 17, 61], "area": 301}, {"id": 8223865, "category_id": 112, "iscrowd": 0, "bbox": [226, 238, 18, 57], "area": 804}, {"id": 6909040, "category_id": 149, "iscrowd": 0, "bbox": [300, 269, 340, 100], "area": 2832}, {"id": 8220771, "category_id": 181, "iscrowd": 0, "bbox": [92, 13, 181, 280], "area": 8007}, {"id": 4937037, "category_id": 184, "iscrowd": 0, "bbox": [0, 144, 512, 279], "area": 21479}, {"id": 6383721, "category_id": 185, "iscrowd": 0, "bbox": [30, 284, 279, 90], "area": 8275}, {"id": 15120006, "category_id": 187, "iscrowd": 0, "bbox": [145, 0, 495, 194], "area": 66908}, {"id": 9937575, "category_id": 191, "iscrowd": 0, "bbox": [125, 291, 515, 132], "area": 21613}, {"id": 7183777, "category_id": 193, "iscrowd": 0, "bbox": [128, 308, 495, 95], "area": 24655}, {"id": 4475737, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 343], "area": 74912}], "file_name": "000000392722.png", "image_id": 392722}, {"segments_info": [{"id": 5592664, "category_id": 18, "iscrowd": 0, "bbox": [0, 11, 500, 436], "area": 145038}], "file_name": "000000392818.png", "image_id": 392818}, {"segments_info": [{"id": 5269365, "category_id": 25, "iscrowd": 0, "bbox": [112, 201, 83, 150], "area": 3447}, {"id": 4359795, "category_id": 193, "iscrowd": 0, "bbox": [0, 283, 383, 357], "area": 115948}], "file_name": "000000392933.png", "image_id": 392933}, {"segments_info": [{"id": 5860738, "category_id": 58, "iscrowd": 0, "bbox": [47, 176, 300, 144], "area": 29904}, {"id": 10403795, "category_id": 58, "iscrowd": 0, "bbox": [469, 129, 171, 107], "area": 12028}, {"id": 3749991, "category_id": 122, "iscrowd": 0, "bbox": [611, 220, 29, 74], "area": 1477}, {"id": 4214877, "category_id": 195, "iscrowd": 0, "bbox": [15, 143, 618, 337], "area": 96466}, {"id": 723213, "category_id": 196, "iscrowd": 0, "bbox": [590, 355, 50, 63], "area": 2562}], "file_name": "000000393014.png", "image_id": 393014}, {"segments_info": [{"id": 6182476, "category_id": 1, "iscrowd": 0, "bbox": [272, 189, 61, 95], "area": 2547}, {"id": 10985612, "category_id": 42, "iscrowd": 0, "bbox": [249, 283, 35, 13], "area": 188}, {"id": 9667939, "category_id": 155, "iscrowd": 0, "bbox": [0, 113, 640, 367], "area": 231014}, {"id": 11772026, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 115], "area": 73354}], "file_name": "000000393056.png", "image_id": 393056}, {"segments_info": [{"id": 6643544, "category_id": 1, "iscrowd": 0, "bbox": [564, 362, 55, 62], "area": 2299}, {"id": 5062966, "category_id": 3, "iscrowd": 0, "bbox": [439, 291, 31, 25], "area": 656}, {"id": 5786692, "category_id": 3, "iscrowd": 0, "bbox": [402, 304, 37, 27], "area": 760}, {"id": 5654845, "category_id": 3, "iscrowd": 0, "bbox": [464, 305, 31, 27], "area": 438}, {"id": 2301984, "category_id": 3, "iscrowd": 0, "bbox": [367, 322, 55, 34], "area": 1220}, {"id": 7036758, "category_id": 3, "iscrowd": 0, "bbox": [465, 285, 23, 17], "area": 308}, {"id": 1972762, "category_id": 3, "iscrowd": 0, "bbox": [283, 355, 75, 46], "area": 2414}, {"id": 2630693, "category_id": 3, "iscrowd": 0, "bbox": [475, 280, 23, 14], "area": 176}, {"id": 9737858, "category_id": 7, "iscrowd": 0, "bbox": [5, 147, 634, 74], "area": 38715}, {"id": 5132354, "category_id": 95, "iscrowd": 0, "bbox": [0, 189, 640, 125], "area": 39311}, {"id": 2300951, "category_id": 149, "iscrowd": 0, "bbox": [193, 282, 336, 142], "area": 15350}, {"id": 4736580, "category_id": 171, "iscrowd": 0, "bbox": [0, 256, 640, 168], "area": 32149}, {"id": 657929, "category_id": 181, "iscrowd": 0, "bbox": [63, 299, 225, 59], "area": 2217}, {"id": 12694445, "category_id": 185, "iscrowd": 0, "bbox": [139, 298, 411, 126], "area": 11569}, {"id": 16447992, "category_id": 187, "iscrowd": 0, "bbox": [28, 0, 612, 179], "area": 42081}, {"id": 11840939, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 451, 154], "area": 52055}, {"id": 1711135, "category_id": 199, "iscrowd": 0, "bbox": [0, 222, 435, 202], "area": 16434}], "file_name": "000000393093.png", "image_id": 393093}, {"segments_info": [{"id": 4013382, "category_id": 1, "iscrowd": 0, "bbox": [166, 3, 407, 571], "area": 92523}, {"id": 4608612, "category_id": 41, "iscrowd": 0, "bbox": [48, 138, 517, 433], "area": 92324}, {"id": 4287079, "category_id": 184, "iscrowd": 0, "bbox": [0, 493, 630, 69], "area": 12004}, {"id": 8164235, "category_id": 185, "iscrowd": 0, "bbox": [483, 537, 64, 25], "area": 1022}, {"id": 4757637, "category_id": 193, "iscrowd": 0, "bbox": [125, 514, 423, 66], "area": 5623}, {"id": 7236463, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 630, 513], "area": 138345}], "file_name": "000000393115.png", "image_id": 393115}, {"segments_info": [{"id": 4998730, "category_id": 1, "iscrowd": 0, "bbox": [94, 194, 60, 143], "area": 4009}, {"id": 6906984, "category_id": 3, "iscrowd": 0, "bbox": [0, 209, 39, 43], "area": 1370}, {"id": 7368044, "category_id": 3, "iscrowd": 0, "bbox": [481, 206, 54, 19], "area": 408}, {"id": 8356742, "category_id": 3, "iscrowd": 0, "bbox": [406, 209, 24, 14], "area": 162}, {"id": 3618109, "category_id": 3, "iscrowd": 0, "bbox": [429, 203, 51, 22], "area": 614}, {"id": 6511449, "category_id": 3, "iscrowd": 0, "bbox": [455, 208, 49, 17], "area": 718}, {"id": 5065294, "category_id": 3, "iscrowd": 0, "bbox": [38, 207, 66, 40], "area": 2121}, {"id": 8156528, "category_id": 8, "iscrowd": 0, "bbox": [132, 119, 287, 193], "area": 43549}, {"id": 4013889, "category_id": 8, "iscrowd": 0, "bbox": [508, 190, 128, 89], "area": 8456}, {"id": 2434855, "category_id": 10, "iscrowd": 0, "bbox": [449, 163, 7, 14], "area": 88}, {"id": 5731468, "category_id": 10, "iscrowd": 0, "bbox": [432, 175, 11, 10], "area": 95}, {"id": 4604998, "category_id": 10, "iscrowd": 0, "bbox": [495, 173, 9, 10], "area": 74}, {"id": 4348019, "category_id": 10, "iscrowd": 0, "bbox": [486, 124, 9, 15], "area": 97}, {"id": 3297387, "category_id": 10, "iscrowd": 0, "bbox": [507, 173, 6, 10], "area": 50}, {"id": 6318443, "category_id": 10, "iscrowd": 0, "bbox": [586, 109, 13, 22], "area": 224}, {"id": 8489359, "category_id": 149, "iscrowd": 0, "bbox": [0, 228, 640, 252], "area": 120939}, {"id": 12694699, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 147], "area": 63753}, {"id": 8623285, "category_id": 191, "iscrowd": 0, "bbox": [415, 225, 225, 169], "area": 10721}, {"id": 6514539, "category_id": 197, "iscrowd": 0, "bbox": [0, 70, 640, 160], "area": 47527}], "file_name": "000000393226.png", "image_id": 393226}, {"segments_info": [{"id": 4534342, "category_id": 25, "iscrowd": 0, "bbox": [124, 348, 112, 137], "area": 4618}, {"id": 4864336, "category_id": 25, "iscrowd": 0, "bbox": [321, 245, 150, 288], "area": 12649}, {"id": 5126717, "category_id": 184, "iscrowd": 0, "bbox": [0, 258, 640, 141], "area": 56397}, {"id": 12894904, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 342], "area": 181895}, {"id": 5726849, "category_id": 193, "iscrowd": 0, "bbox": [0, 361, 640, 279], "area": 153488}], "file_name": "000000393282.png", "image_id": 393282}, {"segments_info": [{"id": 3488322, "category_id": 1, "iscrowd": 0, "bbox": [218, 372, 71, 159], "area": 7119}, {"id": 7698046, "category_id": 1, "iscrowd": 0, "bbox": [127, 191, 27, 30], "area": 502}, {"id": 9475219, "category_id": 36, "iscrowd": 0, "bbox": [239, 520, 148, 51], "area": 3880}, {"id": 7102637, "category_id": 36, "iscrowd": 0, "bbox": [110, 218, 53, 9], "area": 250}, {"id": 13092551, "category_id": 159, "iscrowd": 0, "bbox": [0, 100, 480, 540], "area": 146892}, {"id": 3882559, "category_id": 184, "iscrowd": 0, "bbox": [225, 234, 255, 224], "area": 13485}], "file_name": "000000393469.png", "image_id": 393469}, {"segments_info": [{"id": 3089961, "category_id": 1, "iscrowd": 0, "bbox": [375, 122, 182, 220], "area": 13328}, {"id": 3088683, "category_id": 27, "iscrowd": 0, "bbox": [375, 315, 127, 96], "area": 4476}, {"id": 535345, "category_id": 44, "iscrowd": 0, "bbox": [111, 175, 22, 56], "area": 854}, {"id": 6316375, "category_id": 44, "iscrowd": 0, "bbox": [83, 185, 25, 50], "area": 714}, {"id": 9673906, "category_id": 65, "iscrowd": 0, "bbox": [457, 169, 135, 154], "area": 13331}, {"id": 7372697, "category_id": 65, "iscrowd": 0, "bbox": [367, 16, 236, 66], "area": 10969}, {"id": 6841464, "category_id": 65, "iscrowd": 0, "bbox": [376, 380, 203, 74], "area": 8418}, {"id": 2832437, "category_id": 70, "iscrowd": 0, "bbox": [64, 227, 103, 223], "area": 14871}, {"id": 7565688, "category_id": 73, "iscrowd": 0, "bbox": [444, 205, 78, 83], "area": 2808}, {"id": 5464159, "category_id": 81, "iscrowd": 0, "bbox": [40, 297, 63, 84], "area": 3130}, {"id": 14204861, "category_id": 93, "iscrowd": 0, "bbox": [373, 0, 137, 148], "area": 5061}, {"id": 3556169, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 62070}, {"id": 5526603, "category_id": 176, "iscrowd": 0, "bbox": [13, 0, 237, 466], "area": 57807}, {"id": 2171677, "category_id": 190, "iscrowd": 0, "bbox": [52, 372, 199, 108], "area": 10938}, {"id": 11184817, "category_id": 199, "iscrowd": 0, "bbox": [280, 0, 313, 480], "area": 40824}], "file_name": "000000393569.png", "image_id": 393569}, {"segments_info": [{"id": 2637115, "category_id": 44, "iscrowd": 0, "bbox": [0, 0, 81, 199], "area": 9444}, {"id": 1529274, "category_id": 57, "iscrowd": 0, "bbox": [223, 310, 55, 33], "area": 1384}, {"id": 1197735, "category_id": 57, "iscrowd": 0, "bbox": [158, 163, 19, 30], "area": 310}, {"id": 866174, "category_id": 57, "iscrowd": 0, "bbox": [86, 249, 27, 33], "area": 523}, {"id": 2127314, "category_id": 57, "iscrowd": 0, "bbox": [247, 262, 31, 25], "area": 409}, {"id": 2189514, "category_id": 57, "iscrowd": 0, "bbox": [276, 190, 27, 24], "area": 401}, {"id": 2325979, "category_id": 57, "iscrowd": 0, "bbox": [313, 293, 29, 35], "area": 804}, {"id": 1789871, "category_id": 57, "iscrowd": 0, "bbox": [188, 219, 16, 33], "area": 347}, {"id": 1923506, "category_id": 57, "iscrowd": 0, "bbox": [349, 139, 34, 31], "area": 660}, {"id": 870571, "category_id": 57, "iscrowd": 0, "bbox": [157, 262, 32, 26], "area": 477}, {"id": 1197989, "category_id": 57, "iscrowd": 0, "bbox": [199, 306, 26, 29], "area": 557}, {"id": 1133224, "category_id": 57, "iscrowd": 0, "bbox": [165, 143, 34, 29], "area": 531}, {"id": 736919, "category_id": 57, "iscrowd": 0, "bbox": [156, 243, 29, 21], "area": 258}, {"id": 1590156, "category_id": 57, "iscrowd": 0, "bbox": [148, 161, 18, 34], "area": 275}, {"id": 4677238, "category_id": 79, "iscrowd": 0, "bbox": [6, 0, 633, 420], "area": 239592}, {"id": 1514781, "category_id": 107, "iscrowd": 0, "bbox": [0, 0, 166, 427], "area": 11943}], "file_name": "000000393838.png", "image_id": 393838}, {"segments_info": [{"id": 9210001, "category_id": 1, "iscrowd": 0, "bbox": [329, 36, 311, 444], "area": 101959}, {"id": 6061202, "category_id": 4, "iscrowd": 0, "bbox": [53, 124, 320, 356], "area": 77843}, {"id": 12636638, "category_id": 128, "iscrowd": 0, "bbox": [231, 42, 409, 72], "area": 6312}, {"id": 15528690, "category_id": 151, "iscrowd": 0, "bbox": [535, 7, 105, 59], "area": 3675}, {"id": 5606269, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 108], "area": 40008}, {"id": 14742766, "category_id": 187, "iscrowd": 0, "bbox": [342, 0, 28, 15], "area": 272}, {"id": 8422782, "category_id": 191, "iscrowd": 0, "bbox": [0, 396, 139, 84], "area": 6424}, {"id": 6736832, "category_id": 193, "iscrowd": 0, "bbox": [0, 85, 640, 347], "area": 68705}], "file_name": "000000394199.png", "image_id": 394199}, {"segments_info": [{"id": 4538699, "category_id": 1, "iscrowd": 0, "bbox": [250, 93, 55, 170], "area": 4395}, {"id": 5591129, "category_id": 1, "iscrowd": 0, "bbox": [190, 215, 100, 205], "area": 10119}, {"id": 5461082, "category_id": 1, "iscrowd": 0, "bbox": [330, 16, 137, 220], "area": 10943}, {"id": 12032898, "category_id": 1, "iscrowd": 0, "bbox": [570, 436, 69, 44], "area": 1542}, {"id": 5659781, "category_id": 1, "iscrowd": 0, "bbox": [233, 92, 34, 59], "area": 615}, {"id": 5857387, "category_id": 1, "iscrowd": 0, "bbox": [266, 215, 92, 152], "area": 6898}, {"id": 6577506, "category_id": 1, "iscrowd": 0, "bbox": [205, 162, 75, 100], "area": 3642}, {"id": 5067366, "category_id": 1, "iscrowd": 0, "bbox": [203, 106, 43, 45], "area": 571}, {"id": 6447972, "category_id": 1, "iscrowd": 0, "bbox": [274, 94, 87, 204], "area": 7487}, {"id": 6513017, "category_id": 1, "iscrowd": 0, "bbox": [340, 199, 101, 210], "area": 11609}, {"id": 9864551, "category_id": 3, "iscrowd": 0, "bbox": [453, 291, 187, 183], "area": 26416}, {"id": 14539460, "category_id": 3, "iscrowd": 0, "bbox": [0, 308, 18, 43], "area": 551}, {"id": 6049082, "category_id": 4, "iscrowd": 0, "bbox": [409, 351, 58, 105], "area": 3238}, {"id": 3753809, "category_id": 8, "iscrowd": 0, "bbox": [54, 169, 416, 311], "area": 53072}, {"id": 12170666, "category_id": 149, "iscrowd": 0, "bbox": [0, 323, 593, 157], "area": 14539}, {"id": 7910571, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 313], "area": 59924}, {"id": 15790318, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 161, 119], "area": 11288}, {"id": 7968415, "category_id": 199, "iscrowd": 0, "bbox": [463, 227, 168, 171], "area": 10636}], "file_name": "000000394206.png", "image_id": 394206}, {"segments_info": [{"id": 1775639, "category_id": 1, "iscrowd": 0, "bbox": [418, 164, 23, 52], "area": 847}, {"id": 5325113, "category_id": 1, "iscrowd": 0, "bbox": [258, 159, 37, 48], "area": 1238}, {"id": 5324856, "category_id": 1, "iscrowd": 0, "bbox": [213, 166, 31, 43], "area": 889}, {"id": 2235681, "category_id": 1, "iscrowd": 0, "bbox": [545, 185, 13, 32], "area": 283}, {"id": 5652549, "category_id": 1, "iscrowd": 0, "bbox": [389, 185, 13, 30], "area": 321}, {"id": 7096907, "category_id": 1, "iscrowd": 0, "bbox": [371, 188, 13, 26], "area": 212}, {"id": 4145474, "category_id": 1, "iscrowd": 0, "bbox": [619, 248, 5, 11], "area": 36}, {"id": 5061686, "category_id": 1, "iscrowd": 0, "bbox": [148, 142, 60, 57], "area": 1682}, {"id": 5062718, "category_id": 1, "iscrowd": 0, "bbox": [486, 179, 7, 37], "area": 186}, {"id": 5854018, "category_id": 6, "iscrowd": 0, "bbox": [91, 83, 521, 289], "area": 115766}, {"id": 6971489, "category_id": 149, "iscrowd": 0, "bbox": [0, 271, 640, 122], "area": 43285}, {"id": 4147266, "category_id": 184, "iscrowd": 0, "bbox": [0, 46, 640, 196], "area": 14735}, {"id": 4277315, "category_id": 185, "iscrowd": 0, "bbox": [0, 218, 93, 88], "area": 6426}, {"id": 14666693, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 170], "area": 62430}, {"id": 5592402, "category_id": 193, "iscrowd": 0, "bbox": [0, 236, 640, 72], "area": 1949}], "file_name": "000000394275.png", "image_id": 394275}, {"segments_info": [{"id": 11513520, "category_id": 70, "iscrowd": 0, "bbox": [157, 371, 200, 259], "area": 38698}, {"id": 2764611, "category_id": 190, "iscrowd": 0, "bbox": [173, 609, 221, 31], "area": 2583}, {"id": 9145238, "category_id": 195, "iscrowd": 0, "bbox": [82, 427, 344, 213], "area": 4625}, {"id": 3421587, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 210294}], "file_name": "000000394328.png", "image_id": 394328}, {"segments_info": [{"id": 4086122, "category_id": 1, "iscrowd": 0, "bbox": [307, 68, 117, 316], "area": 21404}, {"id": 1579286, "category_id": 2, "iscrowd": 0, "bbox": [551, 17, 89, 133], "area": 4481}, {"id": 2763047, "category_id": 2, "iscrowd": 0, "bbox": [406, 14, 190, 189], "area": 21123}, {"id": 2103055, "category_id": 3, "iscrowd": 0, "bbox": [407, 0, 233, 118], "area": 10591}, {"id": 4079165, "category_id": 3, "iscrowd": 0, "bbox": [0, 0, 363, 198], "area": 56396}, {"id": 8278868, "category_id": 41, "iscrowd": 0, "bbox": [292, 312, 115, 107], "area": 5292}, {"id": 2960941, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 437, 263], "area": 23898}, {"id": 7106672, "category_id": 191, "iscrowd": 0, "bbox": [0, 131, 640, 349], "area": 161383}], "file_name": "000000394510.png", "image_id": 394510}, {"segments_info": [{"id": 8095121, "category_id": 1, "iscrowd": 0, "bbox": [166, 176, 157, 339], "area": 22349}, {"id": 8948622, "category_id": 43, "iscrowd": 0, "bbox": [170, 110, 55, 144], "area": 4081}, {"id": 12106423, "category_id": 138, "iscrowd": 0, "bbox": [273, 407, 153, 33], "area": 1078}, {"id": 6648426, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 426, 640], "area": 244841}], "file_name": "000000394559.png", "image_id": 394559}, {"segments_info": [{"id": 5526868, "category_id": 25, "iscrowd": 0, "bbox": [395, 208, 53, 109], "area": 3223}, {"id": 4013629, "category_id": 25, "iscrowd": 0, "bbox": [86, 203, 104, 103], "area": 3834}, {"id": 4078390, "category_id": 184, "iscrowd": 0, "bbox": [0, 125, 640, 190], "area": 52830}, {"id": 15128003, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 254], "area": 128818}, {"id": 4346714, "category_id": 193, "iscrowd": 0, "bbox": [0, 274, 640, 206], "area": 118281}], "file_name": "000000394611.png", "image_id": 394611}, {"segments_info": [{"id": 1052684, "category_id": 1, "iscrowd": 0, "bbox": [425, 75, 75, 299], "area": 12221}, {"id": 4143925, "category_id": 1, "iscrowd": 0, "bbox": [2, 58, 191, 307], "area": 26411}, {"id": 8425107, "category_id": 1, "iscrowd": 0, "bbox": [0, 80, 52, 126], "area": 4500}, {"id": 10982275, "category_id": 1, "iscrowd": 0, "bbox": [152, 96, 192, 273], "area": 28434}, {"id": 1842198, "category_id": 31, "iscrowd": 0, "bbox": [371, 127, 99, 143], "area": 6425}, {"id": 394756, "category_id": 31, "iscrowd": 0, "bbox": [1, 294, 123, 80], "area": 4125}, {"id": 4936008, "category_id": 31, "iscrowd": 0, "bbox": [0, 138, 45, 55], "area": 404}, {"id": 2894882, "category_id": 31, "iscrowd": 0, "bbox": [33, 151, 60, 59], "area": 1883}, {"id": 3358010, "category_id": 31, "iscrowd": 0, "bbox": [445, 167, 55, 78], "area": 3646}, {"id": 3490159, "category_id": 31, "iscrowd": 0, "bbox": [209, 187, 140, 47], "area": 4812}, {"id": 4012074, "category_id": 63, "iscrowd": 0, "bbox": [1, 153, 429, 182], "area": 17179}, {"id": 3158320, "category_id": 77, "iscrowd": 0, "bbox": [73, 106, 34, 25], "area": 385}, {"id": 9801350, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 350, 169], "area": 25465}, {"id": 13556442, "category_id": 181, "iscrowd": 0, "bbox": [67, 0, 433, 159], "area": 33374}, {"id": 3617065, "category_id": 199, "iscrowd": 0, "bbox": [0, 271, 436, 104], "area": 13006}], "file_name": "000000394677.png", "image_id": 394677}, {"segments_info": [{"id": 6973048, "category_id": 1, "iscrowd": 0, "bbox": [0, 77, 426, 414], "area": 113698}, {"id": 7894660, "category_id": 49, "iscrowd": 0, "bbox": [42, 440, 298, 78], "area": 3266}, {"id": 7246009, "category_id": 61, "iscrowd": 0, "bbox": [208, 439, 103, 63], "area": 5227}, {"id": 6711676, "category_id": 67, "iscrowd": 0, "bbox": [2, 403, 424, 230], "area": 66415}, {"id": 4210772, "category_id": 181, "iscrowd": 0, "bbox": [284, 0, 142, 195], "area": 19660}, {"id": 9013914, "category_id": 189, "iscrowd": 0, "bbox": [0, 489, 278, 151], "area": 2697}, {"id": 13356497, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 301, 309], "area": 44691}], "file_name": "000000394940.png", "image_id": 394940}, {"segments_info": [{"id": 3750201, "category_id": 1, "iscrowd": 0, "bbox": [511, 193, 10, 12], "area": 71}, {"id": 7171437, "category_id": 1, "iscrowd": 0, "bbox": [465, 188, 13, 13], "area": 98}, {"id": 6776679, "category_id": 1, "iscrowd": 0, "bbox": [477, 190, 16, 14], "area": 123}, {"id": 8487297, "category_id": 1, "iscrowd": 0, "bbox": [447, 188, 12, 16], "area": 128}, {"id": 1710618, "category_id": 1, "iscrowd": 0, "bbox": [32, 122, 135, 314], "area": 16021}, {"id": 7039851, "category_id": 1, "iscrowd": 0, "bbox": [495, 189, 14, 15], "area": 115}, {"id": 2302755, "category_id": 2, "iscrowd": 0, "bbox": [58, 263, 45, 183], "area": 3891}, {"id": 7960953, "category_id": 9, "iscrowd": 0, "bbox": [408, 200, 143, 15], "area": 1161}, {"id": 2763306, "category_id": 77, "iscrowd": 0, "bbox": [142, 203, 10, 5], "area": 29}, {"id": 7434609, "category_id": 148, "iscrowd": 0, "bbox": [114, 177, 526, 294], "area": 70921}, {"id": 4342338, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 204], "area": 121205}, {"id": 6776682, "category_id": 191, "iscrowd": 0, "bbox": [0, 342, 164, 139], "area": 10774}, {"id": 6974058, "category_id": 193, "iscrowd": 0, "bbox": [0, 264, 379, 217], "area": 26069}], "file_name": "000000395180.png", "image_id": 395180}, {"segments_info": [{"id": 2447801, "category_id": 47, "iscrowd": 0, "bbox": [222, 383, 93, 97], "area": 7462}, {"id": 3170177, "category_id": 51, "iscrowd": 0, "bbox": [0, 332, 24, 85], "area": 1204}, {"id": 5620974, "category_id": 62, "iscrowd": 0, "bbox": [195, 304, 115, 58], "area": 5170}, {"id": 2329547, "category_id": 67, "iscrowd": 0, "bbox": [1, 357, 639, 117], "area": 11738}, {"id": 468331, "category_id": 86, "iscrowd": 0, "bbox": [457, 167, 149, 308], "area": 44042}, {"id": 602505, "category_id": 86, "iscrowd": 0, "bbox": [302, 219, 134, 256], "area": 25389}, {"id": 2123700, "category_id": 86, "iscrowd": 0, "bbox": [27, 304, 205, 175], "area": 21349}, {"id": 6077670, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 640, 384], "area": 113283}, {"id": 867236, "category_id": 119, "iscrowd": 0, "bbox": [0, 0, 602, 480], "area": 69945}], "file_name": "000000395343.png", "image_id": 395343}, {"segments_info": [{"id": 794923, "category_id": 1, "iscrowd": 0, "bbox": [175, 273, 45, 68], "area": 1585}, {"id": 926509, "category_id": 1, "iscrowd": 0, "bbox": [160, 337, 30, 105], "area": 1615}, {"id": 1843238, "category_id": 1, "iscrowd": 0, "bbox": [173, 278, 157, 316], "area": 25310}, {"id": 2180165, "category_id": 1, "iscrowd": 0, "bbox": [110, 276, 45, 133], "area": 3574}, {"id": 3038323, "category_id": 1, "iscrowd": 0, "bbox": [34, 265, 23, 27], "area": 364}, {"id": 4415135, "category_id": 1, "iscrowd": 0, "bbox": [0, 306, 18, 101], "area": 816}, {"id": 9277577, "category_id": 1, "iscrowd": 0, "bbox": [24, 205, 123, 424], "area": 34335}, {"id": 1846584, "category_id": 1, "iscrowd": 0, "bbox": [4, 269, 33, 147], "area": 2636}, {"id": 3173252, "category_id": 20, "iscrowd": 0, "bbox": [322, 361, 26, 45], "area": 281}, {"id": 8166573, "category_id": 20, "iscrowd": 0, "bbox": [404, 446, 76, 104], "area": 4561}, {"id": 4755363, "category_id": 20, "iscrowd": 0, "bbox": [398, 378, 82, 24], "area": 1297}, {"id": 1120279, "category_id": 28, "iscrowd": 0, "bbox": [169, 430, 27, 81], "area": 902}, {"id": 14018536, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 283, 215], "area": 3686}, {"id": 2119787, "category_id": 177, "iscrowd": 0, "bbox": [0, 191, 480, 201], "area": 38894}, {"id": 2451069, "category_id": 185, "iscrowd": 0, "bbox": [343, 392, 17, 17], "area": 166}, {"id": 1391439, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 234], "area": 82431}, {"id": 2843247, "category_id": 190, "iscrowd": 0, "bbox": [0, 340, 292, 300], "area": 30655}], "file_name": "000000395388.png", "image_id": 395388}, {"segments_info": [{"id": 3687765, "category_id": 1, "iscrowd": 0, "bbox": [139, 113, 28, 47], "area": 535}, {"id": 6654368, "category_id": 15, "iscrowd": 0, "bbox": [217, 124, 64, 35], "area": 1314}, {"id": 3947577, "category_id": 178, "iscrowd": 0, "bbox": [0, 139, 500, 200], "area": 91383}, {"id": 1521728, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 163], "area": 61330}, {"id": 16310987, "category_id": 187, "iscrowd": 0, "bbox": [45, 0, 455, 62], "area": 14702}], "file_name": "000000395575.png", "image_id": 395575}, {"segments_info": [{"id": 4802899, "category_id": 1, "iscrowd": 0, "bbox": [450, 239, 15, 39], "area": 274}, {"id": 4014664, "category_id": 1, "iscrowd": 0, "bbox": [390, 104, 12, 10], "area": 81}, {"id": 4472898, "category_id": 9, "iscrowd": 0, "bbox": [1, 41, 563, 334], "area": 74981}, {"id": 9212827, "category_id": 92, "iscrowd": 0, "bbox": [44, 216, 30, 41], "area": 789}, {"id": 8153945, "category_id": 155, "iscrowd": 0, "bbox": [0, 298, 640, 182], "area": 78675}, {"id": 10070450, "category_id": 161, "iscrowd": 0, "bbox": [325, 162, 17, 45], "area": 550}, {"id": 11781066, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 253], "area": 116064}, {"id": 10067870, "category_id": 197, "iscrowd": 0, "bbox": [0, 125, 640, 183], "area": 35127}], "file_name": "000000395633.png", "image_id": 395633}, {"segments_info": [{"id": 9998526, "category_id": 44, "iscrowd": 0, "bbox": [472, 376, 13, 48], "area": 390}, {"id": 8417394, "category_id": 44, "iscrowd": 0, "bbox": [482, 381, 9, 46], "area": 229}, {"id": 4272761, "category_id": 62, "iscrowd": 0, "bbox": [195, 311, 194, 154], "area": 21811}, {"id": 4215665, "category_id": 63, "iscrowd": 0, "bbox": [0, 291, 71, 189], "area": 10299}, {"id": 3041920, "category_id": 64, "iscrowd": 0, "bbox": [387, 127, 123, 101], "area": 5394}, {"id": 7235940, "category_id": 72, "iscrowd": 0, "bbox": [95, 300, 93, 91], "area": 7406}, {"id": 10854304, "category_id": 84, "iscrowd": 0, "bbox": [355, 310, 12, 28], "area": 119}, {"id": 8351186, "category_id": 84, "iscrowd": 0, "bbox": [478, 219, 16, 35], "area": 160}, {"id": 9875383, "category_id": 84, "iscrowd": 0, "bbox": [435, 218, 6, 33], "area": 189}, {"id": 5988211, "category_id": 84, "iscrowd": 0, "bbox": [418, 220, 7, 29], "area": 137}, {"id": 8811642, "category_id": 84, "iscrowd": 0, "bbox": [358, 213, 6, 32], "area": 146}, {"id": 10198696, "category_id": 84, "iscrowd": 0, "bbox": [380, 216, 3, 31], "area": 91}, {"id": 11642799, "category_id": 84, "iscrowd": 0, "bbox": [449, 268, 48, 46], "area": 1908}, {"id": 6581361, "category_id": 84, "iscrowd": 0, "bbox": [430, 218, 5, 33], "area": 150}, {"id": 15265006, "category_id": 84, "iscrowd": 0, "bbox": [426, 221, 4, 29], "area": 98}, {"id": 14402988, "category_id": 84, "iscrowd": 0, "bbox": [390, 317, 17, 35], "area": 542}, {"id": 10395041, "category_id": 84, "iscrowd": 0, "bbox": [440, 220, 5, 29], "area": 117}, {"id": 8220836, "category_id": 84, "iscrowd": 0, "bbox": [470, 220, 8, 33], "area": 152}, {"id": 7902886, "category_id": 84, "iscrowd": 0, "bbox": [345, 215, 5, 29], "area": 99}, {"id": 4938365, "category_id": 84, "iscrowd": 1, "bbox": [111, 88, 453, 331], "area": 53786}, {"id": 6180677, "category_id": 100, "iscrowd": 0, "bbox": [103, 435, 98, 37], "area": 1723}, {"id": 6136036, "category_id": 130, "iscrowd": 0, "bbox": [435, 0, 104, 136], "area": 3688}, {"id": 3092534, "category_id": 156, "iscrowd": 0, "bbox": [64, 187, 481, 293], "area": 17289}, {"id": 11253184, "category_id": 186, "iscrowd": 0, "bbox": [34, 0, 606, 72], "area": 20589}, {"id": 14272966, "category_id": 190, "iscrowd": 0, "bbox": [88, 389, 552, 91], "area": 23526}, {"id": 4224462, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 414], "area": 130539}, {"id": 4741524, "category_id": 200, "iscrowd": 0, "bbox": [530, 375, 79, 51], "area": 2676}], "file_name": "000000395701.png", "image_id": 395701}, {"segments_info": [{"id": 2104607, "category_id": 1, "iscrowd": 0, "bbox": [500, 295, 6, 14], "area": 47}, {"id": 2301475, "category_id": 1, "iscrowd": 0, "bbox": [409, 284, 4, 12], "area": 37}, {"id": 1841435, "category_id": 1, "iscrowd": 0, "bbox": [487, 298, 16, 43], "area": 308}, {"id": 3354677, "category_id": 1, "iscrowd": 0, "bbox": [254, 320, 52, 147], "area": 4292}, {"id": 5001568, "category_id": 1, "iscrowd": 0, "bbox": [455, 296, 5, 7], "area": 18}, {"id": 2835283, "category_id": 1, "iscrowd": 0, "bbox": [223, 296, 16, 41], "area": 350}, {"id": 2236199, "category_id": 1, "iscrowd": 0, "bbox": [504, 295, 11, 27], "area": 160}, {"id": 4075568, "category_id": 1, "iscrowd": 0, "bbox": [463, 292, 14, 47], "area": 245}, {"id": 1510184, "category_id": 1, "iscrowd": 0, "bbox": [447, 301, 17, 59], "area": 502}, {"id": 1840991, "category_id": 1, "iscrowd": 0, "bbox": [399, 362, 111, 112], "area": 5948}, {"id": 3484459, "category_id": 1, "iscrowd": 0, "bbox": [469, 296, 23, 64], "area": 853}, {"id": 3354681, "category_id": 1, "iscrowd": 0, "bbox": [447, 298, 9, 23], "area": 85}, {"id": 1380368, "category_id": 1, "iscrowd": 0, "bbox": [491, 292, 6, 11], "area": 40}, {"id": 7629152, "category_id": 3, "iscrowd": 0, "bbox": [430, 300, 19, 25], "area": 321}, {"id": 4603465, "category_id": 3, "iscrowd": 0, "bbox": [487, 281, 10, 7], "area": 50}, {"id": 5327683, "category_id": 3, "iscrowd": 0, "bbox": [503, 285, 9, 7], "area": 37}, {"id": 6511443, "category_id": 3, "iscrowd": 0, "bbox": [461, 286, 11, 7], "area": 60}, {"id": 7169112, "category_id": 3, "iscrowd": 0, "bbox": [491, 289, 8, 7], "area": 20}, {"id": 6774872, "category_id": 3, "iscrowd": 0, "bbox": [505, 273, 6, 6], "area": 33}, {"id": 4077370, "category_id": 3, "iscrowd": 0, "bbox": [496, 280, 8, 7], "area": 47}, {"id": 1248790, "category_id": 15, "iscrowd": 0, "bbox": [475, 443, 26, 35], "area": 354}, {"id": 6184798, "category_id": 18, "iscrowd": 0, "bbox": [244, 460, 56, 19], "area": 704}, {"id": 1314075, "category_id": 31, "iscrowd": 0, "bbox": [448, 314, 9, 13], "area": 62}, {"id": 5066080, "category_id": 31, "iscrowd": 0, "bbox": [414, 440, 45, 35], "area": 876}, {"id": 9010806, "category_id": 85, "iscrowd": 0, "bbox": [452, 107, 50, 49], "area": 1934}, {"id": 6249817, "category_id": 128, "iscrowd": 0, "bbox": [0, 162, 88, 165], "area": 11589}, {"id": 5723475, "category_id": 149, "iscrowd": 0, "bbox": [0, 287, 486, 193], "area": 37732}, {"id": 3157294, "category_id": 151, "iscrowd": 0, "bbox": [0, 99, 91, 80], "area": 3805}, {"id": 3686464, "category_id": 184, "iscrowd": 0, "bbox": [429, 232, 76, 26], "area": 1290}, {"id": 2697255, "category_id": 185, "iscrowd": 0, "bbox": [499, 385, 42, 95], "area": 2956}, {"id": 14800588, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 525, 239], "area": 97734}, {"id": 5396318, "category_id": 191, "iscrowd": 0, "bbox": [0, 287, 545, 193], "area": 30072}, {"id": 5855322, "category_id": 197, "iscrowd": 0, "bbox": [67, 0, 573, 418], "area": 95711}], "file_name": "000000395801.png", "image_id": 395801}, {"segments_info": [{"id": 657930, "category_id": 1, "iscrowd": 0, "bbox": [471, 115, 106, 159], "area": 6106}, {"id": 7697781, "category_id": 42, "iscrowd": 0, "bbox": [519, 128, 70, 154], "area": 5569}, {"id": 9671571, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 218494}], "file_name": "000000395903.png", "image_id": 395903}, {"segments_info": [{"id": 3093047, "category_id": 1, "iscrowd": 0, "bbox": [309, 102, 82, 181], "area": 8388}, {"id": 1645605, "category_id": 1, "iscrowd": 0, "bbox": [473, 153, 149, 171], "area": 9586}, {"id": 5397086, "category_id": 3, "iscrowd": 0, "bbox": [622, 178, 18, 78], "area": 924}, {"id": 6842972, "category_id": 3, "iscrowd": 0, "bbox": [503, 192, 19, 25], "area": 285}, {"id": 9539714, "category_id": 3, "iscrowd": 0, "bbox": [385, 192, 32, 20], "area": 537}, {"id": 7500902, "category_id": 8, "iscrowd": 0, "bbox": [415, 173, 80, 41], "area": 2292}, {"id": 2369057, "category_id": 10, "iscrowd": 0, "bbox": [527, 71, 15, 29], "area": 396}, {"id": 6255488, "category_id": 10, "iscrowd": 0, "bbox": [295, 115, 14, 13], "area": 181}, {"id": 2107963, "category_id": 10, "iscrowd": 0, "bbox": [564, 0, 30, 37], "area": 864}, {"id": 2566693, "category_id": 10, "iscrowd": 0, "bbox": [474, 67, 14, 34], "area": 387}, {"id": 7970247, "category_id": 10, "iscrowd": 0, "bbox": [274, 112, 14, 17], "area": 191}, {"id": 6514274, "category_id": 37, "iscrowd": 0, "bbox": [257, 234, 26, 25], "area": 497}, {"id": 1777190, "category_id": 41, "iscrowd": 0, "bbox": [536, 317, 35, 23], "area": 567}, {"id": 6056054, "category_id": 41, "iscrowd": 0, "bbox": [339, 279, 27, 22], "area": 364}, {"id": 6252659, "category_id": 144, "iscrowd": 0, "bbox": [0, 186, 400, 90], "area": 19479}, {"id": 5197126, "category_id": 149, "iscrowd": 0, "bbox": [475, 200, 58, 24], "area": 337}, {"id": 4347497, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 222], "area": 56595}, {"id": 16317434, "category_id": 187, "iscrowd": 0, "bbox": [270, 132, 13, 28], "area": 310}, {"id": 6517377, "category_id": 191, "iscrowd": 0, "bbox": [0, 200, 640, 227], "area": 109086}, {"id": 6582133, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 189], "area": 60188}], "file_name": "000000396200.png", "image_id": 396200}, {"segments_info": [{"id": 1712429, "category_id": 21, "iscrowd": 0, "bbox": [308, 387, 80, 96], "area": 3662}, {"id": 2370876, "category_id": 21, "iscrowd": 0, "bbox": [175, 365, 60, 72], "area": 2567}, {"id": 4082519, "category_id": 184, "iscrowd": 0, "bbox": [0, 207, 425, 227], "area": 65286}, {"id": 11707808, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 425, 248], "area": 97995}, {"id": 3567464, "category_id": 193, "iscrowd": 0, "bbox": [0, 370, 425, 270], "area": 99587}, {"id": 8881288, "category_id": 197, "iscrowd": 0, "bbox": [76, 206, 202, 51], "area": 2762}], "file_name": "000000396205.png", "image_id": 396205}, {"segments_info": [{"id": 6848620, "category_id": 56, "iscrowd": 0, "bbox": [528, 324, 45, 46], "area": 1291}, {"id": 6717068, "category_id": 177, "iscrowd": 0, "bbox": [51, 0, 369, 259], "area": 26820}, {"id": 5596007, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 628, 381], "area": 2275}, {"id": 8819612, "category_id": 190, "iscrowd": 0, "bbox": [0, 45, 640, 372], "area": 2643}, {"id": 6864041, "category_id": 193, "iscrowd": 0, "bbox": [0, 84, 92, 169], "area": 9162}, {"id": 5926793, "category_id": 194, "iscrowd": 0, "bbox": [0, 333, 523, 147], "area": 36046}, {"id": 9676446, "category_id": 199, "iscrowd": 0, "bbox": [428, 0, 212, 381], "area": 58587}], "file_name": "000000396274.png", "image_id": 396274}, {"segments_info": [{"id": 3882302, "category_id": 1, "iscrowd": 0, "bbox": [276, 190, 17, 54], "area": 467}, {"id": 8684690, "category_id": 1, "iscrowd": 0, "bbox": [302, 182, 32, 101], "area": 1920}, {"id": 6115909, "category_id": 1, "iscrowd": 0, "bbox": [569, 179, 28, 21], "area": 381}, {"id": 11774124, "category_id": 1, "iscrowd": 0, "bbox": [417, 175, 62, 115], "area": 3020}, {"id": 2568251, "category_id": 1, "iscrowd": 0, "bbox": [174, 180, 21, 61], "area": 845}, {"id": 5462881, "category_id": 3, "iscrowd": 0, "bbox": [0, 133, 291, 289], "area": 60355}, {"id": 3949643, "category_id": 3, "iscrowd": 0, "bbox": [413, 144, 227, 277], "area": 34596}, {"id": 2830906, "category_id": 4, "iscrowd": 0, "bbox": [356, 210, 34, 56], "area": 1279}, {"id": 7167556, "category_id": 8, "iscrowd": 0, "bbox": [116, 155, 167, 97], "area": 11265}, {"id": 9804964, "category_id": 8, "iscrowd": 0, "bbox": [389, 105, 233, 178], "area": 27448}, {"id": 3355705, "category_id": 27, "iscrowd": 0, "bbox": [290, 214, 22, 31], "area": 508}, {"id": 4804955, "category_id": 149, "iscrowd": 0, "bbox": [218, 231, 296, 196], "area": 29578}, {"id": 2371371, "category_id": 184, "iscrowd": 0, "bbox": [322, 0, 318, 172], "area": 28914}, {"id": 15333369, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 344, 73], "area": 17310}, {"id": 5462102, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 615, 239], "area": 38910}], "file_name": "000000396338.png", "image_id": 396338}, {"segments_info": [{"id": 9409427, "category_id": 1, "iscrowd": 0, "bbox": [309, 88, 145, 200], "area": 12066}, {"id": 2767939, "category_id": 9, "iscrowd": 0, "bbox": [370, 236, 130, 86], "area": 7397}, {"id": 2181193, "category_id": 148, "iscrowd": 0, "bbox": [0, 207, 500, 168], "area": 36611}, {"id": 1189143, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 362], "area": 131073}], "file_name": "000000396518.png", "image_id": 396518}, {"segments_info": [{"id": 461324, "category_id": 62, "iscrowd": 0, "bbox": [167, 207, 79, 127], "area": 5626}, {"id": 3088155, "category_id": 62, "iscrowd": 0, "bbox": [174, 175, 57, 15], "area": 237}, {"id": 1973527, "category_id": 62, "iscrowd": 0, "bbox": [252, 280, 182, 53], "area": 6691}, {"id": 921875, "category_id": 62, "iscrowd": 0, "bbox": [100, 196, 67, 130], "area": 4733}, {"id": 4142126, "category_id": 62, "iscrowd": 0, "bbox": [79, 167, 43, 25], "area": 627}, {"id": 5857115, "category_id": 64, "iscrowd": 0, "bbox": [266, 63, 109, 159], "area": 3559}, {"id": 10397597, "category_id": 64, "iscrowd": 0, "bbox": [171, 58, 78, 149], "area": 3507}, {"id": 9083555, "category_id": 67, "iscrowd": 0, "bbox": [45, 176, 209, 125], "area": 9726}, {"id": 3746847, "category_id": 84, "iscrowd": 0, "bbox": [283, 223, 36, 18], "area": 437}, {"id": 3683885, "category_id": 86, "iscrowd": 0, "bbox": [315, 179, 15, 42], "area": 558}, {"id": 2761503, "category_id": 86, "iscrowd": 0, "bbox": [200, 163, 12, 42], "area": 473}, {"id": 11254971, "category_id": 109, "iscrowd": 0, "bbox": [35, 0, 225, 206], "area": 13609}, {"id": 12304569, "category_id": 112, "iscrowd": 0, "bbox": [387, 33, 113, 204], "area": 21456}, {"id": 9015180, "category_id": 118, "iscrowd": 0, "bbox": [0, 206, 500, 132], "area": 25848}, {"id": 5200460, "category_id": 130, "iscrowd": 0, "bbox": [286, 84, 82, 71], "area": 2906}, {"id": 6319208, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 500, 264], "area": 30474}, {"id": 11383725, "category_id": 181, "iscrowd": 0, "bbox": [0, 19, 246, 146], "area": 18887}, {"id": 5265486, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 142, 18], "area": 1680}, {"id": 4408124, "category_id": 189, "iscrowd": 0, "bbox": [279, 207, 85, 74], "area": 3061}, {"id": 10529967, "category_id": 199, "iscrowd": 0, "bbox": [0, 147, 233, 84], "area": 5536}], "file_name": "000000396526.png", "image_id": 396526}, {"segments_info": [{"id": 3884636, "category_id": 7, "iscrowd": 0, "bbox": [83, 204, 332, 151], "area": 38311}, {"id": 8160914, "category_id": 125, "iscrowd": 0, "bbox": [189, 347, 451, 77], "area": 21642}, {"id": 6187129, "category_id": 147, "iscrowd": 0, "bbox": [126, 333, 514, 39], "area": 6071}, {"id": 3627599, "category_id": 184, "iscrowd": 0, "bbox": [0, 15, 640, 327], "area": 91573}, {"id": 15914415, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 229], "area": 79695}, {"id": 6524571, "category_id": 193, "iscrowd": 0, "bbox": [0, 287, 640, 137], "area": 26804}, {"id": 8295850, "category_id": 194, "iscrowd": 0, "bbox": [30, 301, 610, 107], "area": 6834}], "file_name": "000000396568.png", "image_id": 396568}, {"segments_info": [{"id": 2706809, "category_id": 9, "iscrowd": 0, "bbox": [372, 182, 113, 19], "area": 1656}, {"id": 5135192, "category_id": 15, "iscrowd": 0, "bbox": [556, 160, 47, 17], "area": 459}, {"id": 10333361, "category_id": 128, "iscrowd": 0, "bbox": [99, 113, 192, 57], "area": 7143}, {"id": 3753281, "category_id": 148, "iscrowd": 0, "bbox": [51, 177, 589, 253], "area": 106321}, {"id": 7438737, "category_id": 151, "iscrowd": 0, "bbox": [85, 0, 172, 135], "area": 12264}, {"id": 14147294, "category_id": 181, "iscrowd": 0, "bbox": [128, 63, 96, 41], "area": 1046}, {"id": 2374710, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 208], "area": 94408}, {"id": 3883846, "category_id": 197, "iscrowd": 0, "bbox": [120, 147, 493, 39], "area": 3141}], "file_name": "000000396580.png", "image_id": 396580}, {"segments_info": [{"id": 3884106, "category_id": 51, "iscrowd": 0, "bbox": [404, 0, 191, 58], "area": 9152}, {"id": 11973812, "category_id": 65, "iscrowd": 0, "bbox": [3, 24, 636, 396], "area": 160849}, {"id": 6973027, "category_id": 75, "iscrowd": 0, "bbox": [246, 239, 213, 185], "area": 22602}, {"id": 3289651, "category_id": 77, "iscrowd": 0, "bbox": [340, 112, 118, 68], "area": 6115}, {"id": 9473936, "category_id": 84, "iscrowd": 0, "bbox": [100, 94, 482, 162], "area": 47474}, {"id": 11973816, "category_id": 93, "iscrowd": 0, "bbox": [0, 145, 640, 280], "area": 5227}, {"id": 12104112, "category_id": 195, "iscrowd": 0, "bbox": [0, 112, 4, 97], "area": 339}, {"id": 3491926, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 112], "area": 18952}], "file_name": "000000396729.png", "image_id": 396729}, {"segments_info": [{"id": 4537186, "category_id": 1, "iscrowd": 0, "bbox": [227, 280, 15, 15], "area": 145}, {"id": 2895691, "category_id": 1, "iscrowd": 0, "bbox": [91, 16, 117, 251], "area": 12310}, {"id": 1053465, "category_id": 19, "iscrowd": 0, "bbox": [551, 16, 89, 406], "area": 30272}, {"id": 4873063, "category_id": 19, "iscrowd": 0, "bbox": [96, 103, 181, 312], "area": 24064}, {"id": 14342366, "category_id": 125, "iscrowd": 0, "bbox": [266, 164, 288, 76], "area": 7280}, {"id": 14932171, "category_id": 148, "iscrowd": 0, "bbox": [223, 185, 340, 206], "area": 45470}, {"id": 3359295, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 563, 426], "area": 79168}, {"id": 15855856, "category_id": 187, "iscrowd": 0, "bbox": [347, 0, 203, 73], "area": 8153}, {"id": 5989216, "category_id": 192, "iscrowd": 0, "bbox": [300, 0, 340, 106], "area": 14545}, {"id": 4225394, "category_id": 193, "iscrowd": 0, "bbox": [31, 232, 581, 194], "area": 40407}, {"id": 6780803, "category_id": 194, "iscrowd": 0, "bbox": [34, 323, 241, 103], "area": 8950}], "file_name": "000000396863.png", "image_id": 396863}, {"segments_info": [{"id": 8683642, "category_id": 1, "iscrowd": 0, "bbox": [261, 317, 10, 14], "area": 113}, {"id": 7894130, "category_id": 1, "iscrowd": 0, "bbox": [213, 313, 10, 15], "area": 122}, {"id": 5525166, "category_id": 5, "iscrowd": 0, "bbox": [26, 276, 383, 126], "area": 20369}, {"id": 9147543, "category_id": 149, "iscrowd": 0, "bbox": [0, 307, 640, 120], "area": 27981}, {"id": 7371622, "category_id": 184, "iscrowd": 0, "bbox": [228, 3, 271, 114], "area": 12163}, {"id": 16184297, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 140], "area": 33535}, {"id": 5409928, "category_id": 193, "iscrowd": 0, "bbox": [0, 287, 640, 107], "area": 32171}, {"id": 10003383, "category_id": 197, "iscrowd": 0, "bbox": [0, 29, 640, 300], "area": 144916}], "file_name": "000000396903.png", "image_id": 396903}, {"segments_info": [{"id": 5264729, "category_id": 1, "iscrowd": 0, "bbox": [389, 70, 109, 277], "area": 17418}, {"id": 5069172, "category_id": 1, "iscrowd": 0, "bbox": [0, 263, 62, 37], "area": 1045}, {"id": 6184554, "category_id": 44, "iscrowd": 0, "bbox": [218, 241, 39, 57], "area": 1482}, {"id": 7106418, "category_id": 47, "iscrowd": 0, "bbox": [119, 273, 25, 34], "area": 416}, {"id": 4212043, "category_id": 47, "iscrowd": 0, "bbox": [141, 268, 33, 36], "area": 887}, {"id": 1582137, "category_id": 49, "iscrowd": 0, "bbox": [136, 249, 21, 29], "area": 128}, {"id": 1583422, "category_id": 50, "iscrowd": 0, "bbox": [166, 256, 9, 19], "area": 101}, {"id": 3358794, "category_id": 51, "iscrowd": 0, "bbox": [156, 169, 26, 17], "area": 351}, {"id": 9808051, "category_id": 51, "iscrowd": 0, "bbox": [31, 344, 68, 41], "area": 2135}, {"id": 4152689, "category_id": 51, "iscrowd": 0, "bbox": [60, 287, 75, 42], "area": 1795}, {"id": 5200226, "category_id": 51, "iscrowd": 0, "bbox": [157, 114, 18, 16], "area": 219}, {"id": 4349026, "category_id": 56, "iscrowd": 0, "bbox": [70, 296, 9, 5], "area": 24}, {"id": 1847864, "category_id": 56, "iscrowd": 0, "bbox": [87, 294, 23, 11], "area": 130}, {"id": 1782058, "category_id": 56, "iscrowd": 0, "bbox": [99, 305, 10, 5], "area": 30}, {"id": 1390975, "category_id": 57, "iscrowd": 0, "bbox": [97, 297, 7, 5], "area": 25}, {"id": 4612219, "category_id": 67, "iscrowd": 0, "bbox": [1, 240, 347, 187], "area": 46120}, {"id": 263429, "category_id": 79, "iscrowd": 0, "bbox": [0, 211, 191, 99], "area": 7036}, {"id": 592654, "category_id": 79, "iscrowd": 0, "bbox": [1, 164, 192, 99], "area": 10067}, {"id": 3159353, "category_id": 81, "iscrowd": 0, "bbox": [497, 203, 122, 29], "area": 2289}, {"id": 4423074, "category_id": 130, "iscrowd": 0, "bbox": [182, 0, 366, 67], "area": 2603}, {"id": 1713717, "category_id": 175, "iscrowd": 0, "bbox": [0, 127, 192, 77], "area": 5490}, {"id": 2968142, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 310, 161], "area": 12977}, {"id": 3823996, "category_id": 188, "iscrowd": 0, "bbox": [416, 219, 81, 108], "area": 3280}, {"id": 3099756, "category_id": 189, "iscrowd": 0, "bbox": [0, 240, 263, 187], "area": 256}, {"id": 2108735, "category_id": 190, "iscrowd": 0, "bbox": [292, 311, 348, 116], "area": 28614}, {"id": 1777705, "category_id": 191, "iscrowd": 0, "bbox": [344, 309, 46, 22], "area": 691}, {"id": 5665922, "category_id": 196, "iscrowd": 0, "bbox": [0, 288, 17, 64], "area": 196}, {"id": 4940924, "category_id": 199, "iscrowd": 0, "bbox": [157, 0, 474, 242], "area": 43041}], "file_name": "000000397133.png", "image_id": 397133}, {"segments_info": [{"id": 4547419, "category_id": 1, "iscrowd": 0, "bbox": [262, 92, 247, 241], "area": 19230}, {"id": 10005173, "category_id": 43, "iscrowd": 0, "bbox": [349, 188, 19, 15], "area": 132}, {"id": 6907491, "category_id": 43, "iscrowd": 0, "bbox": [271, 143, 73, 49], "area": 2191}, {"id": 6451564, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 251453}], "file_name": "000000397279.png", "image_id": 397279}, {"segments_info": [{"id": 6710633, "category_id": 1, "iscrowd": 0, "bbox": [416, 87, 15, 28], "area": 267}, {"id": 4870749, "category_id": 1, "iscrowd": 0, "bbox": [337, 66, 194, 394], "area": 42583}, {"id": 8158082, "category_id": 1, "iscrowd": 0, "bbox": [124, 101, 18, 19], "area": 186}, {"id": 7435123, "category_id": 1, "iscrowd": 0, "bbox": [509, 140, 70, 124], "area": 3937}, {"id": 5396574, "category_id": 1, "iscrowd": 0, "bbox": [232, 185, 135, 189], "area": 14450}, {"id": 6250071, "category_id": 1, "iscrowd": 0, "bbox": [176, 117, 21, 23], "area": 302}, {"id": 6840927, "category_id": 1, "iscrowd": 0, "bbox": [300, 83, 42, 147], "area": 3569}, {"id": 11115150, "category_id": 1, "iscrowd": 0, "bbox": [440, 83, 48, 66], "area": 1764}, {"id": 6841699, "category_id": 1, "iscrowd": 0, "bbox": [102, 106, 17, 35], "area": 410}, {"id": 3947063, "category_id": 1, "iscrowd": 0, "bbox": [248, 144, 13, 13], "area": 159}, {"id": 9078402, "category_id": 1, "iscrowd": 0, "bbox": [81, 100, 14, 33], "area": 303}, {"id": 7041134, "category_id": 1, "iscrowd": 0, "bbox": [216, 97, 25, 78], "area": 1350}, {"id": 10985122, "category_id": 1, "iscrowd": 0, "bbox": [17, 104, 15, 17], "area": 164}, {"id": 9407881, "category_id": 1, "iscrowd": 1, "bbox": [136, 98, 229, 72], "area": 1453}, {"id": 9340567, "category_id": 31, "iscrowd": 0, "bbox": [590, 51, 43, 86], "area": 1873}, {"id": 2830381, "category_id": 32, "iscrowd": 0, "bbox": [268, 275, 37, 93], "area": 1080}, {"id": 4410449, "category_id": 32, "iscrowd": 0, "bbox": [15, 357, 99, 35], "area": 1008}, {"id": 7626037, "category_id": 32, "iscrowd": 0, "bbox": [104, 370, 233, 63], "area": 3401}, {"id": 4078651, "category_id": 32, "iscrowd": 0, "bbox": [125, 376, 228, 103], "area": 3222}, {"id": 2435635, "category_id": 32, "iscrowd": 0, "bbox": [399, 181, 32, 165], "area": 2371}, {"id": 8819346, "category_id": 32, "iscrowd": 0, "bbox": [164, 382, 201, 98], "area": 4561}, {"id": 3815991, "category_id": 32, "iscrowd": 0, "bbox": [81, 387, 225, 85], "area": 3375}, {"id": 4738637, "category_id": 32, "iscrowd": 0, "bbox": [50, 351, 238, 99], "area": 2083}, {"id": 6978433, "category_id": 32, "iscrowd": 0, "bbox": [0, 337, 104, 39], "area": 1537}, {"id": 7699063, "category_id": 62, "iscrowd": 0, "bbox": [168, 154, 31, 57], "area": 584}, {"id": 10000533, "category_id": 62, "iscrowd": 0, "bbox": [328, 166, 48, 83], "area": 2183}, {"id": 10263706, "category_id": 62, "iscrowd": 0, "bbox": [273, 161, 57, 75], "area": 808}, {"id": 6845042, "category_id": 62, "iscrowd": 0, "bbox": [186, 143, 38, 52], "area": 1131}, {"id": 10661035, "category_id": 62, "iscrowd": 0, "bbox": [58, 233, 51, 42], "area": 1583}, {"id": 9672595, "category_id": 62, "iscrowd": 0, "bbox": [15, 186, 43, 61], "area": 919}, {"id": 7239542, "category_id": 62, "iscrowd": 0, "bbox": [358, 276, 41, 51], "area": 1386}, {"id": 9408397, "category_id": 62, "iscrowd": 0, "bbox": [0, 172, 12, 46], "area": 298}, {"id": 9738390, "category_id": 62, "iscrowd": 0, "bbox": [129, 152, 31, 58], "area": 858}, {"id": 10003105, "category_id": 62, "iscrowd": 0, "bbox": [23, 219, 45, 40], "area": 1163}, {"id": 3357753, "category_id": 62, "iscrowd": 0, "bbox": [522, 297, 118, 183], "area": 15448}, {"id": 10988197, "category_id": 62, "iscrowd": 0, "bbox": [51, 192, 26, 34], "area": 473}, {"id": 12633540, "category_id": 62, "iscrowd": 0, "bbox": [253, 159, 26, 26], "area": 408}, {"id": 9475478, "category_id": 62, "iscrowd": 1, "bbox": [0, 121, 303, 123], "area": 4007}, {"id": 8951203, "category_id": 67, "iscrowd": 0, "bbox": [0, 239, 132, 90], "area": 3716}, {"id": 3026735, "category_id": 73, "iscrowd": 0, "bbox": [36, 270, 138, 74], "area": 5618}, {"id": 14868958, "category_id": 92, "iscrowd": 0, "bbox": [35, 69, 281, 44], "area": 3189}, {"id": 6780028, "category_id": 100, "iscrowd": 0, "bbox": [282, 124, 20, 22], "area": 311}, {"id": 15922162, "category_id": 166, "iscrowd": 0, "bbox": [70, 0, 570, 200], "area": 22008}, {"id": 7895676, "category_id": 181, "iscrowd": 0, "bbox": [466, 70, 58, 71], "area": 2578}, {"id": 5006437, "category_id": 184, "iscrowd": 0, "bbox": [0, 86, 38, 47], "area": 980}, {"id": 12699074, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 73], "area": 24712}, {"id": 4942977, "category_id": 189, "iscrowd": 0, "bbox": [0, 139, 599, 341], "area": 19242}, {"id": 7437183, "category_id": 190, "iscrowd": 0, "bbox": [0, 140, 640, 340], "area": 35022}, {"id": 12304320, "category_id": 195, "iscrowd": 0, "bbox": [276, 427, 173, 53], "area": 2284}, {"id": 10857127, "category_id": 199, "iscrowd": 0, "bbox": [0, 51, 630, 57], "area": 4570}], "file_name": "000000397303.png", "image_id": 397303}, {"segments_info": [{"id": 12106684, "category_id": 70, "iscrowd": 0, "bbox": [132, 94, 167, 327], "area": 35350}, {"id": 11448753, "category_id": 81, "iscrowd": 0, "bbox": [322, 62, 255, 126], "area": 21228}, {"id": 5584422, "category_id": 168, "iscrowd": 0, "bbox": [260, 13, 65, 124], "area": 6358}, {"id": 10395805, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 135092}, {"id": 11646389, "category_id": 188, "iscrowd": 0, "bbox": [321, 106, 226, 236], "area": 32142}, {"id": 8162193, "category_id": 190, "iscrowd": 0, "bbox": [100, 287, 540, 140], "area": 41201}], "file_name": "000000397327.png", "image_id": 397327}, {"segments_info": [{"id": 7640965, "category_id": 1, "iscrowd": 0, "bbox": [506, 88, 30, 62], "area": 1078}, {"id": 1259657, "category_id": 1, "iscrowd": 0, "bbox": [41, 41, 261, 237], "area": 27676}, {"id": 12830403, "category_id": 3, "iscrowd": 0, "bbox": [252, 7, 388, 247], "area": 53950}, {"id": 9014676, "category_id": 3, "iscrowd": 0, "bbox": [0, 79, 375, 101], "area": 16099}, {"id": 477125, "category_id": 57, "iscrowd": 0, "bbox": [248, 248, 56, 32], "area": 908}, {"id": 596138, "category_id": 57, "iscrowd": 0, "bbox": [583, 280, 20, 23], "area": 96}, {"id": 795002, "category_id": 57, "iscrowd": 0, "bbox": [586, 346, 19, 18], "area": 258}, {"id": 400291, "category_id": 57, "iscrowd": 0, "bbox": [0, 250, 321, 170], "area": 36453}, {"id": 594798, "category_id": 57, "iscrowd": 0, "bbox": [540, 304, 16, 19], "area": 115}, {"id": 199057, "category_id": 57, "iscrowd": 0, "bbox": [0, 306, 85, 17], "area": 717}, {"id": 201690, "category_id": 57, "iscrowd": 0, "bbox": [86, 274, 69, 17], "area": 692}, {"id": 398779, "category_id": 57, "iscrowd": 0, "bbox": [80, 142, 38, 125], "area": 3382}, {"id": 5071972, "category_id": 184, "iscrowd": 0, "bbox": [347, 0, 67, 80], "area": 2441}, {"id": 1128063, "category_id": 196, "iscrowd": 0, "bbox": [0, 16, 640, 410], "area": 84168}, {"id": 6714211, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 119], "area": 33089}], "file_name": "000000397351.png", "image_id": 397351}, {"segments_info": [{"id": 3025995, "category_id": 1, "iscrowd": 0, "bbox": [475, 241, 164, 230], "area": 17870}, {"id": 3887974, "category_id": 1, "iscrowd": 0, "bbox": [339, 154, 63, 179], "area": 6587}, {"id": 7238786, "category_id": 1, "iscrowd": 0, "bbox": [339, 213, 190, 265], "area": 28187}, {"id": 3291716, "category_id": 1, "iscrowd": 0, "bbox": [138, 170, 81, 177], "area": 8955}, {"id": 5658499, "category_id": 1, "iscrowd": 0, "bbox": [518, 325, 85, 57], "area": 2970}, {"id": 1778219, "category_id": 1, "iscrowd": 0, "bbox": [245, 176, 117, 163], "area": 11642}, {"id": 5070972, "category_id": 44, "iscrowd": 0, "bbox": [297, 283, 19, 76], "area": 1046}, {"id": 8947348, "category_id": 44, "iscrowd": 0, "bbox": [526, 313, 31, 29], "area": 550}, {"id": 5730933, "category_id": 44, "iscrowd": 0, "bbox": [223, 245, 11, 25], "area": 195}, {"id": 2836599, "category_id": 44, "iscrowd": 0, "bbox": [234, 240, 9, 30], "area": 199}, {"id": 4477274, "category_id": 44, "iscrowd": 0, "bbox": [143, 245, 14, 40], "area": 360}, {"id": 4347261, "category_id": 44, "iscrowd": 0, "bbox": [81, 196, 16, 42], "area": 528}, {"id": 2981002, "category_id": 44, "iscrowd": 0, "bbox": [47, 280, 31, 73], "area": 1528}, {"id": 5671323, "category_id": 44, "iscrowd": 0, "bbox": [317, 323, 14, 42], "area": 392}, {"id": 8228501, "category_id": 46, "iscrowd": 0, "bbox": [410, 123, 11, 28], "area": 171}, {"id": 8492700, "category_id": 46, "iscrowd": 0, "bbox": [435, 162, 14, 22], "area": 207}, {"id": 8229015, "category_id": 46, "iscrowd": 0, "bbox": [420, 123, 14, 28], "area": 249}, {"id": 8819865, "category_id": 46, "iscrowd": 0, "bbox": [437, 123, 11, 28], "area": 173}, {"id": 7636108, "category_id": 46, "iscrowd": 0, "bbox": [397, 124, 11, 26], "area": 180}, {"id": 5532272, "category_id": 47, "iscrowd": 0, "bbox": [397, 91, 12, 23], "area": 264}, {"id": 6062203, "category_id": 47, "iscrowd": 0, "bbox": [329, 330, 27, 54], "area": 838}, {"id": 6391702, "category_id": 47, "iscrowd": 0, "bbox": [205, 323, 27, 30], "area": 663}, {"id": 9409689, "category_id": 47, "iscrowd": 0, "bbox": [396, 162, 12, 22], "area": 242}, {"id": 9805732, "category_id": 47, "iscrowd": 0, "bbox": [417, 162, 14, 26], "area": 350}, {"id": 9147802, "category_id": 47, "iscrowd": 0, "bbox": [408, 162, 9, 22], "area": 191}, {"id": 9674921, "category_id": 47, "iscrowd": 0, "bbox": [247, 331, 19, 29], "area": 535}, {"id": 3753295, "category_id": 51, "iscrowd": 0, "bbox": [129, 210, 27, 16], "area": 263}, {"id": 10921902, "category_id": 51, "iscrowd": 0, "bbox": [189, 351, 31, 21], "area": 517}, {"id": 7698055, "category_id": 62, "iscrowd": 0, "bbox": [508, 368, 130, 107], "area": 2884}, {"id": 13289159, "category_id": 62, "iscrowd": 0, "bbox": [198, 407, 153, 68], "area": 6229}, {"id": 5597571, "category_id": 67, "iscrowd": 0, "bbox": [0, 330, 395, 86], "area": 17907}, {"id": 1250840, "category_id": 78, "iscrowd": 0, "bbox": [52, 237, 84, 52], "area": 3098}, {"id": 5004390, "category_id": 79, "iscrowd": 0, "bbox": [14, 257, 146, 88], "area": 4358}, {"id": 5529703, "category_id": 81, "iscrowd": 0, "bbox": [220, 270, 32, 9], "area": 205}, {"id": 10793142, "category_id": 82, "iscrowd": 0, "bbox": [449, 159, 139, 194], "area": 18606}, {"id": 8095385, "category_id": 107, "iscrowd": 0, "bbox": [132, 260, 246, 176], "area": 2455}, {"id": 7371650, "category_id": 112, "iscrowd": 0, "bbox": [538, 103, 102, 209], "area": 8633}, {"id": 14869476, "category_id": 130, "iscrowd": 0, "bbox": [266, 10, 374, 133], "area": 6219}, {"id": 8032411, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 94], "area": 37791}, {"id": 9084586, "category_id": 188, "iscrowd": 0, "bbox": [0, 12, 584, 331], "area": 56589}, {"id": 8754603, "category_id": 189, "iscrowd": 0, "bbox": [0, 356, 269, 61], "area": 219}, {"id": 4545127, "category_id": 190, "iscrowd": 0, "bbox": [355, 408, 285, 72], "area": 1642}, {"id": 6454203, "category_id": 196, "iscrowd": 0, "bbox": [479, 124, 26, 35], "area": 814}, {"id": 6125966, "category_id": 199, "iscrowd": 0, "bbox": [0, 90, 640, 199], "area": 22740}], "file_name": "000000397354.png", "image_id": 397354}, {"segments_info": [{"id": 987673, "category_id": 20, "iscrowd": 0, "bbox": [384, 256, 96, 148], "area": 7614}, {"id": 5466230, "category_id": 20, "iscrowd": 0, "bbox": [233, 179, 150, 218], "area": 20114}, {"id": 14796178, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 253], "area": 153493}, {"id": 3964300, "category_id": 193, "iscrowd": 0, "bbox": [0, 240, 640, 240], "area": 125583}], "file_name": "000000397639.png", "image_id": 397639}, {"segments_info": [{"id": 4482472, "category_id": 1, "iscrowd": 0, "bbox": [405, 129, 107, 127], "area": 7809}, {"id": 9408913, "category_id": 48, "iscrowd": 0, "bbox": [136, 72, 91, 57], "area": 752}, {"id": 5540025, "category_id": 51, "iscrowd": 0, "bbox": [530, 7, 103, 118], "area": 9168}, {"id": 3751748, "category_id": 51, "iscrowd": 0, "bbox": [165, 19, 92, 92], "area": 3960}, {"id": 429553, "category_id": 55, "iscrowd": 0, "bbox": [233, 411, 22, 62], "area": 988}, {"id": 625644, "category_id": 55, "iscrowd": 0, "bbox": [209, 472, 46, 39], "area": 1486}, {"id": 756433, "category_id": 55, "iscrowd": 0, "bbox": [129, 394, 59, 69], "area": 3328}, {"id": 3171506, "category_id": 55, "iscrowd": 0, "bbox": [544, 512, 85, 54], "area": 1906}, {"id": 3764163, "category_id": 55, "iscrowd": 0, "bbox": [545, 521, 94, 87], "area": 4881}, {"id": 345013, "category_id": 55, "iscrowd": 0, "bbox": [135, 459, 53, 40], "area": 1575}, {"id": 2083569, "category_id": 55, "iscrowd": 0, "bbox": [160, 385, 40, 44], "area": 858}, {"id": 559338, "category_id": 55, "iscrowd": 0, "bbox": [151, 491, 53, 19], "area": 602}, {"id": 1854365, "category_id": 55, "iscrowd": 0, "bbox": [513, 526, 43, 56], "area": 1913}, {"id": 689099, "category_id": 55, "iscrowd": 0, "bbox": [175, 425, 63, 65], "area": 2989}, {"id": 2185696, "category_id": 57, "iscrowd": 0, "bbox": [257, 512, 126, 125], "area": 14259}, {"id": 3828943, "category_id": 57, "iscrowd": 0, "bbox": [256, 385, 131, 127], "area": 13281}, {"id": 1462207, "category_id": 57, "iscrowd": 0, "bbox": [3, 1, 636, 504], "area": 29106}, {"id": 4617950, "category_id": 57, "iscrowd": 0, "bbox": [511, 131, 129, 124], "area": 15588}, {"id": 5866959, "category_id": 57, "iscrowd": 0, "bbox": [62, 273, 76, 108], "area": 5887}, {"id": 808136, "category_id": 57, "iscrowd": 0, "bbox": [438, 325, 25, 21], "area": 382}, {"id": 4350146, "category_id": 57, "iscrowd": 0, "bbox": [255, 260, 130, 123], "area": 12598}, {"id": 1137652, "category_id": 57, "iscrowd": 0, "bbox": [297, 547, 39, 44], "area": 1248}, {"id": 1005760, "category_id": 57, "iscrowd": 0, "bbox": [385, 309, 11, 22], "area": 186}, {"id": 8487590, "category_id": 57, "iscrowd": 0, "bbox": [264, 168, 112, 74], "area": 6411}, {"id": 1791694, "category_id": 57, "iscrowd": 0, "bbox": [424, 143, 20, 52], "area": 316}, {"id": 1199280, "category_id": 57, "iscrowd": 0, "bbox": [384, 257, 127, 127], "area": 15225}, {"id": 2910700, "category_id": 57, "iscrowd": 0, "bbox": [172, 12, 83, 50], "area": 2803}, {"id": 4088242, "category_id": 57, "iscrowd": 1, "bbox": [1, 31, 634, 609], "area": 20651}, {"id": 7775701, "category_id": 61, "iscrowd": 0, "bbox": [291, 32, 58, 39], "area": 1501}, {"id": 7371902, "category_id": 118, "iscrowd": 0, "bbox": [130, 255, 149, 142], "area": 9205}, {"id": 11844798, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 529, 275], "area": 49275}, {"id": 6317925, "category_id": 194, "iscrowd": 0, "bbox": [492, 0, 148, 141], "area": 7313}, {"id": 5206939, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 640], "area": 107478}], "file_name": "000000397681.png", "image_id": 397681}, {"segments_info": [{"id": 11118246, "category_id": 1, "iscrowd": 0, "bbox": [329, 25, 44, 43], "area": 939}, {"id": 10069676, "category_id": 1, "iscrowd": 0, "bbox": [0, 114, 90, 257], "area": 9737}, {"id": 5343902, "category_id": 1, "iscrowd": 0, "bbox": [198, 26, 53, 36], "area": 1033}, {"id": 8884632, "category_id": 1, "iscrowd": 0, "bbox": [105, 22, 52, 30], "area": 682}, {"id": 8364462, "category_id": 1, "iscrowd": 0, "bbox": [0, 24, 39, 34], "area": 832}, {"id": 7305604, "category_id": 1, "iscrowd": 0, "bbox": [110, 142, 274, 498], "area": 80967}, {"id": 3358274, "category_id": 1, "iscrowd": 0, "bbox": [287, 143, 131, 234], "area": 11070}, {"id": 8488067, "category_id": 1, "iscrowd": 0, "bbox": [380, 23, 40, 45], "area": 1199}, {"id": 5330006, "category_id": 1, "iscrowd": 0, "bbox": [29, 24, 18, 32], "area": 320}, {"id": 9213850, "category_id": 1, "iscrowd": 0, "bbox": [48, 25, 71, 49], "area": 1531}, {"id": 6124163, "category_id": 1, "iscrowd": 0, "bbox": [275, 28, 30, 43], "area": 656}, {"id": 5002324, "category_id": 39, "iscrowd": 0, "bbox": [227, 38, 96, 199], "area": 4094}, {"id": 4105351, "category_id": 145, "iscrowd": 0, "bbox": [38, 134, 390, 390], "area": 23256}, {"id": 6394806, "category_id": 194, "iscrowd": 0, "bbox": [0, 113, 428, 527], "area": 91437}, {"id": 7107687, "category_id": 199, "iscrowd": 0, "bbox": [0, 42, 428, 97], "area": 22296}], "file_name": "000000398028.png", "image_id": 398028}, {"segments_info": [{"id": 8945272, "category_id": 1, "iscrowd": 0, "bbox": [426, 0, 214, 422], "area": 63643}, {"id": 8284498, "category_id": 1, "iscrowd": 0, "bbox": [106, 35, 114, 353], "area": 19321}, {"id": 8743496, "category_id": 1, "iscrowd": 0, "bbox": [209, 18, 152, 353], "area": 24884}, {"id": 7959919, "category_id": 1, "iscrowd": 0, "bbox": [302, 96, 165, 289], "area": 20436}, {"id": 8753318, "category_id": 1, "iscrowd": 0, "bbox": [427, 68, 73, 132], "area": 3685}, {"id": 4472121, "category_id": 1, "iscrowd": 0, "bbox": [63, 189, 96, 95], "area": 3126}, {"id": 9730651, "category_id": 1, "iscrowd": 0, "bbox": [1, 31, 135, 387], "area": 23171}, {"id": 9009274, "category_id": 1, "iscrowd": 0, "bbox": [200, 141, 37, 104], "area": 2016}, {"id": 10190423, "category_id": 1, "iscrowd": 0, "bbox": [223, 125, 31, 155], "area": 1428}, {"id": 8224904, "category_id": 1, "iscrowd": 0, "bbox": [97, 132, 36, 59], "area": 1131}, {"id": 6906979, "category_id": 1, "iscrowd": 0, "bbox": [237, 2, 70, 92], "area": 3817}, {"id": 11516876, "category_id": 1, "iscrowd": 0, "bbox": [404, 101, 28, 63], "area": 1259}, {"id": 7125945, "category_id": 37, "iscrowd": 0, "bbox": [247, 345, 60, 61], "area": 2836}, {"id": 7115895, "category_id": 145, "iscrowd": 0, "bbox": [0, 151, 640, 276], "area": 61436}, {"id": 6259322, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 254, 28], "area": 3147}, {"id": 14804967, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 495, 169], "area": 29366}, {"id": 9806757, "category_id": 199, "iscrowd": 0, "bbox": [106, 0, 243, 20], "area": 1728}], "file_name": "000000398203.png", "image_id": 398203}, {"segments_info": [{"id": 9991797, "category_id": 1, "iscrowd": 0, "bbox": [275, 113, 122, 267], "area": 15757}, {"id": 5445149, "category_id": 38, "iscrowd": 0, "bbox": [96, 36, 153, 67], "area": 6211}, {"id": 10251462, "category_id": 38, "iscrowd": 0, "bbox": [89, 240, 436, 185], "area": 12657}, {"id": 8144954, "category_id": 38, "iscrowd": 0, "bbox": [297, 49, 103, 86], "area": 5237}, {"id": 8951167, "category_id": 38, "iscrowd": 0, "bbox": [483, 34, 55, 61], "area": 2350}, {"id": 6250079, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 264411}], "file_name": "000000398237.png", "image_id": 398237}, {"segments_info": [{"id": 5403541, "category_id": 1, "iscrowd": 0, "bbox": [0, 77, 179, 290], "area": 24392}, {"id": 7509154, "category_id": 1, "iscrowd": 0, "bbox": [415, 83, 27, 38], "area": 745}, {"id": 5534600, "category_id": 1, "iscrowd": 0, "bbox": [468, 34, 32, 136], "area": 2604}, {"id": 6517893, "category_id": 1, "iscrowd": 0, "bbox": [163, 74, 212, 293], "area": 25073}, {"id": 3885656, "category_id": 1, "iscrowd": 0, "bbox": [285, 35, 209, 314], "area": 25275}, {"id": 3752776, "category_id": 31, "iscrowd": 0, "bbox": [312, 145, 143, 99], "area": 6704}, {"id": 1777182, "category_id": 31, "iscrowd": 0, "bbox": [173, 212, 172, 100], "area": 8046}, {"id": 6849687, "category_id": 31, "iscrowd": 0, "bbox": [6, 235, 158, 81], "area": 8018}, {"id": 3554367, "category_id": 63, "iscrowd": 0, "bbox": [132, 120, 359, 233], "area": 8118}, {"id": 1973808, "category_id": 77, "iscrowd": 0, "bbox": [238, 141, 4, 7], "area": 19}, {"id": 2041911, "category_id": 77, "iscrowd": 0, "bbox": [19, 131, 12, 16], "area": 71}, {"id": 12177631, "category_id": 77, "iscrowd": 0, "bbox": [242, 122, 3, 9], "area": 16}, {"id": 11246015, "category_id": 77, "iscrowd": 0, "bbox": [342, 180, 8, 11], "area": 37}, {"id": 8756667, "category_id": 84, "iscrowd": 0, "bbox": [46, 222, 102, 26], "area": 1589}, {"id": 10403266, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 495, 178], "area": 42254}, {"id": 1515297, "category_id": 190, "iscrowd": 0, "bbox": [420, 336, 45, 15], "area": 463}, {"id": 10730439, "category_id": 199, "iscrowd": 0, "bbox": [112, 0, 87, 171], "area": 10576}], "file_name": "000000398377.png", "image_id": 398377}, {"segments_info": [{"id": 660772, "category_id": 1, "iscrowd": 0, "bbox": [213, 1, 287, 223], "area": 33314}, {"id": 396561, "category_id": 49, "iscrowd": 0, "bbox": [161, 187, 66, 39], "area": 989}, {"id": 3367056, "category_id": 61, "iscrowd": 0, "bbox": [0, 2, 180, 311], "area": 46885}, {"id": 5799571, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 469, 132], "area": 32241}, {"id": 2045493, "category_id": 119, "iscrowd": 0, "bbox": [204, 192, 190, 141], "area": 15362}, {"id": 2374985, "category_id": 184, "iscrowd": 0, "bbox": [201, 294, 38, 39], "area": 925}, {"id": 16446444, "category_id": 187, "iscrowd": 0, "bbox": [349, 160, 108, 76], "area": 4277}, {"id": 5137010, "category_id": 189, "iscrowd": 0, "bbox": [157, 301, 158, 32], "area": 1544}, {"id": 5728381, "category_id": 191, "iscrowd": 0, "bbox": [168, 310, 28, 18], "area": 355}, {"id": 7311216, "category_id": 193, "iscrowd": 0, "bbox": [275, 283, 179, 50], "area": 4547}, {"id": 6258320, "category_id": 199, "iscrowd": 0, "bbox": [150, 111, 302, 209], "area": 16672}], "file_name": "000000398438.png", "image_id": 398438}, {"segments_info": [{"id": 1328246, "category_id": 64, "iscrowd": 0, "bbox": [241, 135, 83, 136], "area": 6060}, {"id": 1522254, "category_id": 64, "iscrowd": 0, "bbox": [138, 69, 67, 170], "area": 4924}, {"id": 7567735, "category_id": 64, "iscrowd": 0, "bbox": [240, 51, 45, 93], "area": 2047}, {"id": 534609, "category_id": 64, "iscrowd": 0, "bbox": [165, 108, 80, 191], "area": 6516}, {"id": 3903142, "category_id": 64, "iscrowd": 0, "bbox": [437, 109, 63, 86], "area": 3026}, {"id": 2511215, "category_id": 64, "iscrowd": 0, "bbox": [273, 108, 47, 38], "area": 726}, {"id": 3889789, "category_id": 64, "iscrowd": 0, "bbox": [322, 90, 36, 82], "area": 1402}, {"id": 1991835, "category_id": 64, "iscrowd": 0, "bbox": [318, 173, 92, 93], "area": 6520}, {"id": 1188421, "category_id": 64, "iscrowd": 0, "bbox": [0, 8, 97, 93], "area": 5034}, {"id": 2375504, "category_id": 64, "iscrowd": 0, "bbox": [404, 1, 85, 201], "area": 6387}, {"id": 1851472, "category_id": 64, "iscrowd": 0, "bbox": [153, 20, 83, 170], "area": 1777}, {"id": 1061460, "category_id": 64, "iscrowd": 0, "bbox": [363, 15, 62, 167], "area": 7036}, {"id": 1986417, "category_id": 64, "iscrowd": 1, "bbox": [396, 187, 102, 76], "area": 5141}, {"id": 3108226, "category_id": 67, "iscrowd": 0, "bbox": [30, 171, 542, 217], "area": 46786}, {"id": 5401981, "category_id": 112, "iscrowd": 0, "bbox": [67, 0, 573, 93], "area": 13091}, {"id": 1261680, "category_id": 176, "iscrowd": 0, "bbox": [13, 0, 530, 93], "area": 4712}, {"id": 7373460, "category_id": 181, "iscrowd": 0, "bbox": [459, 0, 36, 75], "area": 1180}, {"id": 2383233, "category_id": 184, "iscrowd": 0, "bbox": [186, 128, 73, 86], "area": 639}, {"id": 2247016, "category_id": 189, "iscrowd": 0, "bbox": [291, 134, 192, 197], "area": 1159}, {"id": 5670051, "category_id": 190, "iscrowd": 0, "bbox": [0, 18, 640, 409], "area": 95202}, {"id": 10455674, "category_id": 191, "iscrowd": 0, "bbox": [85, 0, 555, 45], "area": 6021}, {"id": 9686735, "category_id": 195, "iscrowd": 0, "bbox": [220, 224, 288, 105], "area": 12713}, {"id": 2580610, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 72, 395], "area": 11438}, {"id": 5389099, "category_id": 200, "iscrowd": 0, "bbox": [163, 49, 150, 27], "area": 1575}], "file_name": "000000398652.png", "image_id": 398652}, {"segments_info": [{"id": 3422361, "category_id": 1, "iscrowd": 0, "bbox": [56, 431, 271, 199], "area": 28672}, {"id": 4408969, "category_id": 1, "iscrowd": 0, "bbox": [3, 45, 372, 496], "area": 73492}, {"id": 5925003, "category_id": 1, "iscrowd": 0, "bbox": [295, 446, 31, 69], "area": 1141}, {"id": 11111262, "category_id": 1, "iscrowd": 0, "bbox": [14, 531, 49, 66], "area": 2175}, {"id": 3027795, "category_id": 1, "iscrowd": 0, "bbox": [261, 487, 166, 144], "area": 11902}, {"id": 11316127, "category_id": 3, "iscrowd": 0, "bbox": [2, 405, 97, 97], "area": 8052}, {"id": 10657164, "category_id": 3, "iscrowd": 0, "bbox": [352, 413, 75, 80], "area": 4222}, {"id": 9669501, "category_id": 37, "iscrowd": 0, "bbox": [220, 203, 76, 73], "area": 3791}, {"id": 4608325, "category_id": 184, "iscrowd": 0, "bbox": [0, 101, 427, 377], "area": 19753}, {"id": 16250868, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 381], "area": 83069}, {"id": 4029043, "category_id": 193, "iscrowd": 0, "bbox": [0, 472, 427, 144], "area": 9795}, {"id": 7635837, "category_id": 197, "iscrowd": 0, "bbox": [19, 320, 408, 157], "area": 12403}], "file_name": "000000398742.png", "image_id": 398742}, {"segments_info": [{"id": 199698, "category_id": 17, "iscrowd": 0, "bbox": [222, 149, 277, 284], "area": 45154}, {"id": 4549008, "category_id": 17, "iscrowd": 0, "bbox": [98, 132, 96, 82], "area": 5677}, {"id": 3293999, "category_id": 109, "iscrowd": 0, "bbox": [175, 0, 325, 500], "area": 78102}, {"id": 7048088, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 214, 500], "area": 46705}, {"id": 9083551, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 200, 295], "area": 46718}], "file_name": "000000398810.png", "image_id": 398810}, {"segments_info": [{"id": 2630698, "category_id": 1, "iscrowd": 0, "bbox": [218, 32, 293, 336], "area": 52520}, {"id": 9012092, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 166542}], "file_name": "000000398905.png", "image_id": 398905}, {"segments_info": [{"id": 7431009, "category_id": 1, "iscrowd": 0, "bbox": [479, 124, 8, 27], "area": 123}, {"id": 7304835, "category_id": 1, "iscrowd": 0, "bbox": [508, 118, 47, 120], "area": 2753}, {"id": 11448512, "category_id": 1, "iscrowd": 0, "bbox": [509, 121, 16, 38], "area": 375}, {"id": 11578806, "category_id": 1, "iscrowd": 0, "bbox": [491, 120, 15, 44], "area": 432}, {"id": 7566983, "category_id": 1, "iscrowd": 0, "bbox": [237, 89, 128, 344], "area": 18635}, {"id": 5919081, "category_id": 1, "iscrowd": 0, "bbox": [46, 121, 52, 146], "area": 2677}, {"id": 2829102, "category_id": 1, "iscrowd": 0, "bbox": [486, 125, 6, 25], "area": 114}, {"id": 5920353, "category_id": 1, "iscrowd": 0, "bbox": [393, 93, 110, 348], "area": 14314}, {"id": 10256584, "category_id": 1, "iscrowd": 0, "bbox": [395, 2, 244, 468], "area": 60724}, {"id": 2302250, "category_id": 1, "iscrowd": 0, "bbox": [506, 124, 8, 22], "area": 70}, {"id": 5848670, "category_id": 1, "iscrowd": 0, "bbox": [318, 78, 125, 396], "area": 29634}, {"id": 7166295, "category_id": 1, "iscrowd": 0, "bbox": [75, 25, 204, 455], "area": 61830}, {"id": 6117466, "category_id": 4, "iscrowd": 0, "bbox": [5, 172, 59, 51], "area": 1035}, {"id": 7960699, "category_id": 77, "iscrowd": 0, "bbox": [317, 199, 4, 5], "area": 15}, {"id": 9537950, "category_id": 77, "iscrowd": 0, "bbox": [265, 179, 20, 18], "area": 91}, {"id": 5394278, "category_id": 77, "iscrowd": 0, "bbox": [391, 212, 47, 46], "area": 689}, {"id": 11047550, "category_id": 92, "iscrowd": 0, "bbox": [64, 36, 276, 68], "area": 2263}, {"id": 7631469, "category_id": 130, "iscrowd": 0, "bbox": [285, 19, 23, 59], "area": 794}, {"id": 9275293, "category_id": 149, "iscrowd": 0, "bbox": [0, 147, 56, 54], "area": 1614}, {"id": 14540768, "category_id": 151, "iscrowd": 0, "bbox": [376, 76, 43, 28], "area": 522}, {"id": 4414541, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 414, 164], "area": 32647}, {"id": 7302003, "category_id": 185, "iscrowd": 0, "bbox": [0, 254, 121, 226], "area": 21738}, {"id": 14280928, "category_id": 187, "iscrowd": 0, "bbox": [159, 0, 23, 12], "area": 166}, {"id": 11973304, "category_id": 191, "iscrowd": 0, "bbox": [0, 142, 555, 338], "area": 20364}, {"id": 9015188, "category_id": 197, "iscrowd": 0, "bbox": [380, 0, 260, 150], "area": 14767}], "file_name": "000000399205.png", "image_id": 399205}, {"segments_info": [{"id": 2565153, "category_id": 1, "iscrowd": 0, "bbox": [555, 74, 85, 194], "area": 8472}, {"id": 3302349, "category_id": 58, "iscrowd": 0, "bbox": [327, 171, 59, 55], "area": 1207}, {"id": 2646740, "category_id": 58, "iscrowd": 0, "bbox": [364, 161, 48, 47], "area": 694}, {"id": 7645425, "category_id": 58, "iscrowd": 0, "bbox": [389, 88, 98, 74], "area": 2754}, {"id": 7514098, "category_id": 58, "iscrowd": 0, "bbox": [352, 76, 112, 77], "area": 2705}, {"id": 8433388, "category_id": 58, "iscrowd": 0, "bbox": [412, 104, 97, 85], "area": 3173}, {"id": 2905006, "category_id": 58, "iscrowd": 0, "bbox": [374, 139, 43, 51], "area": 776}, {"id": 7907829, "category_id": 58, "iscrowd": 0, "bbox": [321, 51, 98, 69], "area": 1871}, {"id": 4616147, "category_id": 58, "iscrowd": 0, "bbox": [308, 191, 60, 51], "area": 1179}, {"id": 5078754, "category_id": 58, "iscrowd": 0, "bbox": [302, 210, 54, 48], "area": 1001}, {"id": 6593009, "category_id": 58, "iscrowd": 0, "bbox": [335, 60, 97, 76], "area": 2567}, {"id": 2905529, "category_id": 58, "iscrowd": 0, "bbox": [353, 148, 49, 61], "area": 595}, {"id": 2697772, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 101620}, {"id": 5338049, "category_id": 196, "iscrowd": 0, "bbox": [343, 230, 19, 23], "area": 102}], "file_name": "000000399296.png", "image_id": 399296}, {"segments_info": [{"id": 8355951, "category_id": 1, "iscrowd": 0, "bbox": [20, 0, 41, 83], "area": 2493}, {"id": 7304572, "category_id": 1, "iscrowd": 0, "bbox": [83, 36, 196, 269], "area": 17477}, {"id": 2831440, "category_id": 1, "iscrowd": 0, "bbox": [79, 1, 30, 80], "area": 1388}, {"id": 7368054, "category_id": 38, "iscrowd": 0, "bbox": [0, 99, 154, 95], "area": 4039}, {"id": 5802886, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 300, 451], "area": 108991}], "file_name": "000000399462.png", "image_id": 399462}, {"segments_info": [{"id": 4144202, "category_id": 17, "iscrowd": 0, "bbox": [145, 116, 460, 220], "area": 70966}, {"id": 13817814, "category_id": 73, "iscrowd": 0, "bbox": [146, 101, 494, 255], "area": 37357}, {"id": 7892869, "category_id": 200, "iscrowd": 0, "bbox": [0, 0, 640, 478], "area": 126225}], "file_name": "000000399560.png", "image_id": 399560}, {"segments_info": [{"id": 5195590, "category_id": 18, "iscrowd": 0, "bbox": [15, 27, 485, 307], "area": 73623}, {"id": 9939371, "category_id": 63, "iscrowd": 0, "bbox": [0, 1, 500, 370], "area": 89018}, {"id": 2966613, "category_id": 177, "iscrowd": 0, "bbox": [50, 0, 450, 36], "area": 5701}], "file_name": "000000399655.png", "image_id": 399655}, {"segments_info": [{"id": 6904409, "category_id": 1, "iscrowd": 0, "bbox": [134, 1, 279, 574], "area": 78693}, {"id": 3496069, "category_id": 21, "iscrowd": 0, "bbox": [1, 171, 327, 356], "area": 71760}, {"id": 13356232, "category_id": 100, "iscrowd": 0, "bbox": [9, 73, 162, 133], "area": 12913}, {"id": 4555622, "category_id": 193, "iscrowd": 0, "bbox": [0, 390, 427, 250], "area": 45170}], "file_name": "000000399764.png", "image_id": 399764}, {"segments_info": [{"id": 4206896, "category_id": 1, "iscrowd": 0, "bbox": [182, 310, 253, 231], "area": 26463}, {"id": 9015179, "category_id": 36, "iscrowd": 0, "bbox": [252, 468, 231, 94], "area": 1737}, {"id": 15590624, "category_id": 187, "iscrowd": 0, "bbox": [0, 212, 483, 428], "area": 119003}, {"id": 12168616, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 483, 413], "area": 161558}], "file_name": "000000400044.png", "image_id": 400044}, {"segments_info": [{"id": 5260381, "category_id": 47, "iscrowd": 0, "bbox": [376, 84, 124, 152], "area": 12549}, {"id": 5336491, "category_id": 58, "iscrowd": 0, "bbox": [68, 85, 136, 98], "area": 6654}, {"id": 4211795, "category_id": 67, "iscrowd": 0, "bbox": [4, 30, 494, 248], "area": 51447}, {"id": 14338243, "category_id": 84, "iscrowd": 0, "bbox": [156, 143, 179, 137], "area": 20203}, {"id": 4671841, "category_id": 100, "iscrowd": 0, "bbox": [28, 0, 397, 283], "area": 23247}, {"id": 5855854, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 283], "area": 18403}, {"id": 1919368, "category_id": 196, "iscrowd": 0, "bbox": [254, 66, 144, 88], "area": 7586}], "file_name": "000000400082.png", "image_id": 400082}, {"segments_info": [{"id": 9607596, "category_id": 1, "iscrowd": 0, "bbox": [166, 0, 224, 100], "area": 12940}, {"id": 7634046, "category_id": 75, "iscrowd": 0, "bbox": [201, 98, 78, 92], "area": 5825}, {"id": 3552819, "category_id": 75, "iscrowd": 0, "bbox": [436, 75, 84, 101], "area": 6994}, {"id": 2632750, "category_id": 75, "iscrowd": 0, "bbox": [316, 118, 81, 63], "area": 4527}, {"id": 3949635, "category_id": 75, "iscrowd": 0, "bbox": [43, 113, 71, 84], "area": 5505}, {"id": 8623007, "category_id": 84, "iscrowd": 0, "bbox": [62, 55, 5, 33], "area": 115}, {"id": 2830404, "category_id": 84, "iscrowd": 0, "bbox": [371, 2, 104, 48], "area": 4756}, {"id": 3226439, "category_id": 84, "iscrowd": 0, "bbox": [395, 59, 8, 33], "area": 239}, {"id": 3226180, "category_id": 84, "iscrowd": 0, "bbox": [545, 1, 10, 47], "area": 465}, {"id": 3028031, "category_id": 84, "iscrowd": 0, "bbox": [528, 0, 8, 46], "area": 307}, {"id": 3688294, "category_id": 84, "iscrowd": 0, "bbox": [403, 60, 9, 32], "area": 288}, {"id": 10729150, "category_id": 84, "iscrowd": 0, "bbox": [170, 36, 21, 61], "area": 966}, {"id": 7242623, "category_id": 84, "iscrowd": 0, "bbox": [20, 57, 9, 32], "area": 265}, {"id": 2961198, "category_id": 84, "iscrowd": 0, "bbox": [225, 37, 12, 28], "area": 236}, {"id": 2896188, "category_id": 84, "iscrowd": 0, "bbox": [413, 61, 20, 32], "area": 551}, {"id": 4604774, "category_id": 84, "iscrowd": 0, "bbox": [430, 59, 17, 34], "area": 440}, {"id": 3290944, "category_id": 84, "iscrowd": 0, "bbox": [555, 0, 8, 48], "area": 327}, {"id": 9610675, "category_id": 84, "iscrowd": 0, "bbox": [195, 39, 15, 57], "area": 713}, {"id": 4871518, "category_id": 84, "iscrowd": 1, "bbox": [0, 0, 640, 110], "area": 17896}, {"id": 5355467, "category_id": 141, "iscrowd": 0, "bbox": [548, 0, 84, 91], "area": 3005}, {"id": 4020096, "category_id": 156, "iscrowd": 0, "bbox": [346, 0, 221, 75], "area": 1950}, {"id": 12633801, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 111, 57], "area": 4366}, {"id": 11455964, "category_id": 199, "iscrowd": 0, "bbox": [109, 0, 422, 92], "area": 8583}], "file_name": "000000400161.png", "image_id": 400161}, {"segments_info": [{"id": 2244195, "category_id": 3, "iscrowd": 0, "bbox": [203, 232, 25, 25], "area": 116}, {"id": 1519428, "category_id": 3, "iscrowd": 0, "bbox": [104, 234, 71, 63], "area": 1758}, {"id": 4287907, "category_id": 3, "iscrowd": 0, "bbox": [229, 231, 17, 13], "area": 148}, {"id": 1520461, "category_id": 3, "iscrowd": 0, "bbox": [153, 236, 27, 55], "area": 502}, {"id": 3303051, "category_id": 3, "iscrowd": 0, "bbox": [363, 235, 13, 16], "area": 124}, {"id": 1254969, "category_id": 3, "iscrowd": 0, "bbox": [103, 243, 46, 65], "area": 1442}, {"id": 3033199, "category_id": 3, "iscrowd": 0, "bbox": [222, 233, 13, 22], "area": 144}, {"id": 1320252, "category_id": 3, "iscrowd": 0, "bbox": [187, 235, 38, 28], "area": 811}, {"id": 1847616, "category_id": 3, "iscrowd": 0, "bbox": [12, 241, 115, 80], "area": 7362}, {"id": 3165544, "category_id": 3, "iscrowd": 0, "bbox": [380, 238, 12, 15], "area": 96}, {"id": 3168895, "category_id": 3, "iscrowd": 0, "bbox": [386, 238, 20, 17], "area": 204}, {"id": 1388371, "category_id": 3, "iscrowd": 0, "bbox": [398, 239, 39, 23], "area": 623}, {"id": 2905971, "category_id": 3, "iscrowd": 0, "bbox": [353, 231, 14, 9], "area": 104}, {"id": 5272991, "category_id": 3, "iscrowd": 1, "bbox": [239, 212, 170, 43], "area": 2746}, {"id": 539254, "category_id": 10, "iscrowd": 0, "bbox": [216, 158, 11, 13], "area": 101}, {"id": 4694770, "category_id": 10, "iscrowd": 0, "bbox": [333, 176, 7, 11], "area": 57}, {"id": 3566292, "category_id": 10, "iscrowd": 0, "bbox": [475, 183, 8, 22], "area": 146}, {"id": 3637488, "category_id": 10, "iscrowd": 0, "bbox": [208, 200, 8, 9], "area": 59}, {"id": 4302315, "category_id": 10, "iscrowd": 0, "bbox": [271, 169, 8, 16], "area": 128}, {"id": 2111821, "category_id": 128, "iscrowd": 0, "bbox": [75, 142, 355, 115], "area": 6953}, {"id": 15067372, "category_id": 130, "iscrowd": 0, "bbox": [413, 210, 17, 9], "area": 140}, {"id": 2115700, "category_id": 149, "iscrowd": 0, "bbox": [0, 236, 500, 97], "area": 28048}, {"id": 532015, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 271], "area": 107523}, {"id": 4216431, "category_id": 191, "iscrowd": 0, "bbox": [0, 245, 500, 79], "area": 2743}, {"id": 1321538, "category_id": 197, "iscrowd": 0, "bbox": [440, 176, 60, 84], "area": 2528}, {"id": 337725, "category_id": 199, "iscrowd": 0, "bbox": [0, 243, 28, 18], "area": 373}], "file_name": "000000400367.png", "image_id": 400367}, {"segments_info": [{"id": 3818303, "category_id": 1, "iscrowd": 0, "bbox": [318, 307, 11, 24], "area": 176}, {"id": 6253183, "category_id": 1, "iscrowd": 0, "bbox": [1, 1, 479, 630], "area": 213343}, {"id": 1910051, "category_id": 1, "iscrowd": 0, "bbox": [331, 309, 6, 16], "area": 40}, {"id": 4542287, "category_id": 1, "iscrowd": 0, "bbox": [343, 308, 9, 21], "area": 116}, {"id": 4676483, "category_id": 60, "iscrowd": 0, "bbox": [196, 319, 212, 118], "area": 16726}, {"id": 3168582, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 336], "area": 32576}, {"id": 15922160, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 459, 230], "area": 25297}, {"id": 4355174, "category_id": 193, "iscrowd": 0, "bbox": [410, 307, 70, 86], "area": 2577}, {"id": 4741211, "category_id": 197, "iscrowd": 0, "bbox": [302, 218, 96, 124], "area": 2903}], "file_name": "000000400573.png", "image_id": 400573}, {"segments_info": [{"id": 8620949, "category_id": 1, "iscrowd": 0, "bbox": [0, 2, 426, 570], "area": 171322}, {"id": 3420198, "category_id": 44, "iscrowd": 0, "bbox": [57, 140, 25, 58], "area": 888}, {"id": 5265765, "category_id": 48, "iscrowd": 0, "bbox": [1, 563, 230, 69], "area": 2550}, {"id": 8562358, "category_id": 59, "iscrowd": 0, "bbox": [160, 530, 191, 92], "area": 12814}, {"id": 9155269, "category_id": 59, "iscrowd": 0, "bbox": [56, 473, 67, 62], "area": 2372}, {"id": 6650764, "category_id": 189, "iscrowd": 0, "bbox": [0, 477, 426, 163], "area": 6414}, {"id": 856348, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 426, 323], "area": 48743}], "file_name": "000000400794.png", "image_id": 400794}, {"segments_info": [{"id": 6114656, "category_id": 1, "iscrowd": 0, "bbox": [176, 259, 51, 63], "area": 1541}, {"id": 5789041, "category_id": 1, "iscrowd": 0, "bbox": [219, 272, 20, 45], "area": 589}, {"id": 7044528, "category_id": 9, "iscrowd": 0, "bbox": [108, 98, 257, 303], "area": 57510}, {"id": 8674372, "category_id": 155, "iscrowd": 0, "bbox": [49, 0, 591, 427], "area": 182753}], "file_name": "000000400803.png", "image_id": 400803}, {"segments_info": [{"id": 7235170, "category_id": 1, "iscrowd": 0, "bbox": [100, 138, 451, 280], "area": 51897}, {"id": 5399396, "category_id": 8, "iscrowd": 0, "bbox": [2, 0, 638, 425], "area": 94207}, {"id": 4600168, "category_id": 33, "iscrowd": 0, "bbox": [0, 330, 207, 97], "area": 18049}, {"id": 10395296, "category_id": 149, "iscrowd": 0, "bbox": [0, 133, 529, 169], "area": 24993}, {"id": 5730411, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 152], "area": 48579}, {"id": 16381168, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 102], "area": 13567}, {"id": 13615803, "category_id": 192, "iscrowd": 0, "bbox": [0, 50, 383, 75], "area": 8115}, {"id": 6524827, "category_id": 193, "iscrowd": 0, "bbox": [0, 112, 420, 98], "area": 7999}, {"id": 6912913, "category_id": 194, "iscrowd": 0, "bbox": [493, 227, 56, 32], "area": 250}], "file_name": "000000400815.png", "image_id": 400815}, {"segments_info": [{"id": 7495499, "category_id": 5, "iscrowd": 0, "bbox": [380, 124, 27, 15], "area": 166}, {"id": 12103595, "category_id": 85, "iscrowd": 0, "bbox": [286, 289, 67, 66], "area": 3459}, {"id": 9340542, "category_id": 184, "iscrowd": 0, "bbox": [376, 267, 221, 213], "area": 19000}, {"id": 11637110, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 125493}, {"id": 5527639, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 159018}], "file_name": "000000400922.png", "image_id": 400922}, {"segments_info": [{"id": 4930634, "category_id": 1, "iscrowd": 0, "bbox": [100, 60, 219, 499], "area": 52187}, {"id": 7965837, "category_id": 34, "iscrowd": 0, "bbox": [175, 241, 95, 48], "area": 3050}, {"id": 4947064, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 426, 640], "area": 217078}], "file_name": "000000401244.png", "image_id": 401244}, {"segments_info": [{"id": 6183259, "category_id": 1, "iscrowd": 0, "bbox": [112, 117, 169, 177], "area": 13918}, {"id": 4012091, "category_id": 35, "iscrowd": 0, "bbox": [160, 33, 195, 194], "area": 4401}, {"id": 9926242, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 332], "area": 193919}], "file_name": "000000401250.png", "image_id": 401250}, {"segments_info": [{"id": 6051965, "category_id": 1, "iscrowd": 0, "bbox": [245, 11, 171, 459], "area": 35030}, {"id": 4547204, "category_id": 28, "iscrowd": 0, "bbox": [155, 2, 215, 134], "area": 9285}, {"id": 12435911, "category_id": 31, "iscrowd": 0, "bbox": [331, 140, 85, 119], "area": 6070}, {"id": 10394771, "category_id": 149, "iscrowd": 0, "bbox": [0, 285, 640, 132], "area": 39200}, {"id": 11184034, "category_id": 191, "iscrowd": 0, "bbox": [0, 372, 399, 58], "area": 10000}, {"id": 8170379, "category_id": 193, "iscrowd": 0, "bbox": [50, 276, 590, 73], "area": 13003}, {"id": 10526893, "category_id": 198, "iscrowd": 0, "bbox": [449, 270, 96, 55], "area": 4053}], "file_name": "000000401446.png", "image_id": 401446}, {"segments_info": [{"id": 1446416, "category_id": 1, "iscrowd": 0, "bbox": [451, 139, 189, 341], "area": 44683}, {"id": 5726578, "category_id": 1, "iscrowd": 0, "bbox": [284, 233, 27, 80], "area": 937}, {"id": 3156258, "category_id": 1, "iscrowd": 0, "bbox": [197, 204, 72, 221], "area": 9323}, {"id": 2828843, "category_id": 1, "iscrowd": 0, "bbox": [388, 232, 70, 229], "area": 10451}, {"id": 1381656, "category_id": 1, "iscrowd": 0, "bbox": [262, 244, 49, 171], "area": 5825}, {"id": 3030615, "category_id": 1, "iscrowd": 0, "bbox": [264, 222, 20, 30], "area": 440}, {"id": 2630955, "category_id": 1, "iscrowd": 0, "bbox": [312, 222, 39, 182], "area": 4885}, {"id": 1776413, "category_id": 1, "iscrowd": 0, "bbox": [438, 227, 44, 215], "area": 3367}, {"id": 8486273, "category_id": 8, "iscrowd": 0, "bbox": [381, 140, 160, 101], "area": 11402}, {"id": 5068407, "category_id": 8, "iscrowd": 0, "bbox": [0, 89, 401, 299], "area": 78843}, {"id": 4672330, "category_id": 149, "iscrowd": 0, "bbox": [0, 321, 640, 159], "area": 45531}, {"id": 3423569, "category_id": 177, "iscrowd": 0, "bbox": [260, 341, 6, 37], "area": 147}, {"id": 4941919, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 202], "area": 85008}, {"id": 1515823, "category_id": 191, "iscrowd": 0, "bbox": [0, 334, 55, 30], "area": 874}, {"id": 1317144, "category_id": 193, "iscrowd": 0, "bbox": [0, 306, 640, 174], "area": 641}, {"id": 7965058, "category_id": 199, "iscrowd": 0, "bbox": [587, 191, 53, 62], "area": 1678}], "file_name": "000000401862.png", "image_id": 401862}, {"segments_info": [{"id": 8556185, "category_id": 18, "iscrowd": 0, "bbox": [191, 130, 387, 223], "area": 40724}, {"id": 1514788, "category_id": 18, "iscrowd": 0, "bbox": [27, 37, 190, 111], "area": 15039}, {"id": 9472901, "category_id": 65, "iscrowd": 0, "bbox": [1, 0, 638, 379], "area": 175453}, {"id": 9734786, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 640, 379], "area": 6458}], "file_name": "000000401991.png", "image_id": 401991}, {"segments_info": [{"id": 1844533, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 473, 391], "area": 79158}, {"id": 3028283, "category_id": 149, "iscrowd": 0, "bbox": [0, 448, 480, 192], "area": 54610}, {"id": 4414566, "category_id": 191, "iscrowd": 0, "bbox": [0, 343, 480, 250], "area": 61182}, {"id": 10988201, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 436], "area": 79879}], "file_name": "000000402096.png", "image_id": 402096}, {"segments_info": [{"id": 9276813, "category_id": 1, "iscrowd": 0, "bbox": [185, 66, 301, 237], "area": 33066}, {"id": 7631988, "category_id": 36, "iscrowd": 0, "bbox": [202, 267, 330, 72], "area": 7617}, {"id": 11119017, "category_id": 159, "iscrowd": 0, "bbox": [22, 374, 202, 54], "area": 3748}, {"id": 8355711, "category_id": 184, "iscrowd": 0, "bbox": [0, 372, 465, 56], "area": 12489}, {"id": 2829099, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 216569}], "file_name": "000000402118.png", "image_id": 402118}, {"segments_info": [{"id": 8290690, "category_id": 85, "iscrowd": 0, "bbox": [223, 417, 30, 33], "area": 705}, {"id": 3418906, "category_id": 85, "iscrowd": 0, "bbox": [128, 424, 15, 35], "area": 390}, {"id": 10384988, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 181281}, {"id": 4277834, "category_id": 197, "iscrowd": 0, "bbox": [0, 73, 340, 567], "area": 90857}], "file_name": "000000402334.png", "image_id": 402334}, {"segments_info": [{"id": 1779808, "category_id": 51, "iscrowd": 0, "bbox": [181, 250, 385, 230], "area": 74063}, {"id": 1845556, "category_id": 86, "iscrowd": 0, "bbox": [0, 164, 20, 124], "area": 1586}, {"id": 395533, "category_id": 86, "iscrowd": 0, "bbox": [119, 277, 74, 51], "area": 2338}, {"id": 6716061, "category_id": 119, "iscrowd": 0, "bbox": [0, 0, 310, 326], "area": 65134}, {"id": 2910042, "category_id": 184, "iscrowd": 0, "bbox": [175, 11, 59, 31], "area": 1184}, {"id": 3431543, "category_id": 189, "iscrowd": 0, "bbox": [0, 233, 640, 247], "area": 48776}], "file_name": "000000402346.png", "image_id": 402346}, {"segments_info": [{"id": 596094, "category_id": 4, "iscrowd": 0, "bbox": [139, 15, 222, 155], "area": 17814}, {"id": 3962552, "category_id": 59, "iscrowd": 0, "bbox": [274, 234, 187, 149], "area": 17955}, {"id": 4291512, "category_id": 59, "iscrowd": 0, "bbox": [298, 163, 231, 104], "area": 13011}, {"id": 1515816, "category_id": 176, "iscrowd": 0, "bbox": [169, 0, 471, 176], "area": 43298}, {"id": 5000268, "category_id": 189, "iscrowd": 0, "bbox": [578, 388, 62, 38], "area": 1949}, {"id": 3895472, "category_id": 196, "iscrowd": 0, "bbox": [60, 150, 280, 233], "area": 38971}], "file_name": "000000402433.png", "image_id": 402433}, {"segments_info": [{"id": 5330012, "category_id": 17, "iscrowd": 0, "bbox": [1, 173, 438, 306], "area": 59517}, {"id": 2105377, "category_id": 17, "iscrowd": 0, "bbox": [240, 85, 400, 390], "area": 81852}, {"id": 10394010, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 164756}], "file_name": "000000402473.png", "image_id": 402473}, {"segments_info": [{"id": 3103852, "category_id": 16, "iscrowd": 0, "bbox": [283, 186, 74, 212], "area": 11493}, {"id": 3097659, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 261670}], "file_name": "000000402519.png", "image_id": 402519}, {"segments_info": [{"id": 6247496, "category_id": 1, "iscrowd": 0, "bbox": [224, 150, 9, 23], "area": 111}, {"id": 7703971, "category_id": 1, "iscrowd": 0, "bbox": [511, 181, 57, 114], "area": 3043}, {"id": 3879722, "category_id": 1, "iscrowd": 0, "bbox": [608, 124, 15, 24], "area": 250}, {"id": 10331028, "category_id": 1, "iscrowd": 0, "bbox": [470, 103, 10, 12], "area": 74}, {"id": 5066570, "category_id": 1, "iscrowd": 0, "bbox": [457, 150, 11, 33], "area": 234}, {"id": 5390888, "category_id": 1, "iscrowd": 0, "bbox": [154, 144, 6, 9], "area": 29}, {"id": 7171421, "category_id": 1, "iscrowd": 0, "bbox": [401, 134, 9, 11], "area": 71}, {"id": 8489334, "category_id": 1, "iscrowd": 0, "bbox": [483, 95, 12, 15], "area": 110}, {"id": 6910329, "category_id": 1, "iscrowd": 0, "bbox": [536, 154, 27, 38], "area": 439}, {"id": 922644, "category_id": 1, "iscrowd": 0, "bbox": [167, 64, 6, 12], "area": 38}, {"id": 2567211, "category_id": 1, "iscrowd": 0, "bbox": [281, 64, 6, 13], "area": 44}, {"id": 9409941, "category_id": 1, "iscrowd": 0, "bbox": [472, 148, 16, 15], "area": 95}, {"id": 4078639, "category_id": 1, "iscrowd": 0, "bbox": [294, 64, 5, 11], "area": 36}, {"id": 4142891, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 639, 188], "area": 89956}, {"id": 12830884, "category_id": 15, "iscrowd": 0, "bbox": [575, 131, 22, 4], "area": 84}, {"id": 10394239, "category_id": 15, "iscrowd": 0, "bbox": [583, 120, 20, 8], "area": 126}, {"id": 6542776, "category_id": 37, "iscrowd": 0, "bbox": [20, 192, 19, 18], "area": 278}, {"id": 10137257, "category_id": 37, "iscrowd": 0, "bbox": [200, 149, 2, 2], "area": 4}, {"id": 15461869, "category_id": 37, "iscrowd": 0, "bbox": [243, 158, 7, 8], "area": 38}, {"id": 10341602, "category_id": 43, "iscrowd": 0, "bbox": [475, 210, 38, 21], "area": 500}, {"id": 5262926, "category_id": 92, "iscrowd": 0, "bbox": [0, 144, 640, 79], "area": 12105}, {"id": 8484950, "category_id": 112, "iscrowd": 0, "bbox": [608, 31, 32, 34], "area": 516}, {"id": 4737860, "category_id": 119, "iscrowd": 0, "bbox": [355, 144, 258, 32], "area": 1720}, {"id": 4690669, "category_id": 145, "iscrowd": 0, "bbox": [11, 171, 629, 256], "area": 121479}, {"id": 4275505, "category_id": 161, "iscrowd": 0, "bbox": [0, 0, 617, 173], "area": 4062}, {"id": 5923407, "category_id": 190, "iscrowd": 0, "bbox": [0, 237, 172, 190], "area": 17348}, {"id": 7828059, "category_id": 199, "iscrowd": 0, "bbox": [34, 0, 606, 101], "area": 4310}], "file_name": "000000402615.png", "image_id": 402615}, {"segments_info": [{"id": 4212312, "category_id": 1, "iscrowd": 0, "bbox": [376, 242, 235, 298], "area": 42036}, {"id": 8488599, "category_id": 1, "iscrowd": 0, "bbox": [248, 227, 166, 202], "area": 21284}, {"id": 4540756, "category_id": 1, "iscrowd": 0, "bbox": [0, 261, 187, 273], "area": 32108}, {"id": 6778485, "category_id": 44, "iscrowd": 0, "bbox": [213, 463, 38, 70], "area": 1751}, {"id": 4736855, "category_id": 44, "iscrowd": 0, "bbox": [332, 367, 40, 140], "area": 3655}, {"id": 3617341, "category_id": 46, "iscrowd": 0, "bbox": [401, 380, 47, 121], "area": 2516}, {"id": 3291739, "category_id": 46, "iscrowd": 0, "bbox": [187, 330, 30, 81], "area": 1516}, {"id": 5134455, "category_id": 46, "iscrowd": 0, "bbox": [207, 346, 38, 95], "area": 2173}, {"id": 5465464, "category_id": 46, "iscrowd": 0, "bbox": [298, 405, 44, 129], "area": 3716}, {"id": 2899831, "category_id": 46, "iscrowd": 0, "bbox": [579, 272, 32, 60], "area": 874}, {"id": 4869729, "category_id": 46, "iscrowd": 0, "bbox": [258, 421, 48, 114], "area": 3260}, {"id": 5664394, "category_id": 48, "iscrowd": 0, "bbox": [125, 437, 63, 27], "area": 289}, {"id": 5861247, "category_id": 49, "iscrowd": 0, "bbox": [136, 463, 66, 32], "area": 346}, {"id": 6529237, "category_id": 59, "iscrowd": 0, "bbox": [178, 432, 42, 29], "area": 664}, {"id": 3288110, "category_id": 77, "iscrowd": 0, "bbox": [375, 471, 42, 26], "area": 599}, {"id": 2308728, "category_id": 177, "iscrowd": 0, "bbox": [0, 76, 424, 330], "area": 93462}, {"id": 4543082, "category_id": 189, "iscrowd": 0, "bbox": [98, 243, 514, 311], "area": 35509}, {"id": 5211600, "category_id": 199, "iscrowd": 0, "bbox": [410, 76, 202, 212], "area": 36509}], "file_name": "000000402720.png", "image_id": 402720}, {"segments_info": [{"id": 2239034, "category_id": 1, "iscrowd": 0, "bbox": [1, 1, 499, 369], "area": 47098}, {"id": 9474193, "category_id": 75, "iscrowd": 0, "bbox": [62, 0, 399, 375], "area": 128110}, {"id": 2972796, "category_id": 190, "iscrowd": 0, "bbox": [308, 0, 192, 375], "area": 9289}], "file_name": "000000402765.png", "image_id": 402765}, {"segments_info": [{"id": 4931136, "category_id": 1, "iscrowd": 0, "bbox": [128, 159, 149, 464], "area": 42380}, {"id": 9275614, "category_id": 28, "iscrowd": 0, "bbox": [111, 41, 256, 153], "area": 22900}, {"id": 5264739, "category_id": 31, "iscrowd": 0, "bbox": [141, 167, 128, 195], "area": 1678}, {"id": 3688523, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 425, 276], "area": 68717}, {"id": 5728379, "category_id": 191, "iscrowd": 0, "bbox": [0, 509, 425, 131], "area": 33927}, {"id": 5662584, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 425, 579], "area": 101285}], "file_name": "000000402774.png", "image_id": 402774}, {"segments_info": [{"id": 2453406, "category_id": 55, "iscrowd": 0, "bbox": [246, 267, 173, 170], "area": 16283}, {"id": 1731999, "category_id": 55, "iscrowd": 0, "bbox": [111, 69, 399, 297], "area": 55578}], "file_name": "000000402783.png", "image_id": 402783}, {"segments_info": [{"id": 8756421, "category_id": 21, "iscrowd": 0, "bbox": [182, 4, 68, 28], "area": 965}, {"id": 6386600, "category_id": 21, "iscrowd": 0, "bbox": [60, 96, 181, 64], "area": 7827}, {"id": 5399959, "category_id": 21, "iscrowd": 0, "bbox": [304, 115, 157, 98], "area": 9472}, {"id": 3620447, "category_id": 21, "iscrowd": 0, "bbox": [417, 174, 167, 138], "area": 15862}, {"id": 6189214, "category_id": 21, "iscrowd": 0, "bbox": [44, 26, 137, 68], "area": 4892}, {"id": 5135753, "category_id": 21, "iscrowd": 0, "bbox": [40, 33, 85, 34], "area": 742}, {"id": 3882852, "category_id": 21, "iscrowd": 0, "bbox": [17, 135, 298, 147], "area": 23959}, {"id": 5397883, "category_id": 21, "iscrowd": 0, "bbox": [132, 10, 77, 43], "area": 2078}, {"id": 4015724, "category_id": 21, "iscrowd": 0, "bbox": [456, 101, 115, 84], "area": 6522}, {"id": 5532054, "category_id": 21, "iscrowd": 0, "bbox": [146, 198, 285, 212], "area": 44906}, {"id": 4543549, "category_id": 184, "iscrowd": 0, "bbox": [516, 0, 124, 16], "area": 1335}, {"id": 8167566, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 187824}], "file_name": "000000402992.png", "image_id": 402992}, {"segments_info": [{"id": 7233121, "category_id": 1, "iscrowd": 0, "bbox": [313, 110, 34, 33], "area": 528}, {"id": 8939105, "category_id": 1, "iscrowd": 0, "bbox": [49, 207, 32, 45], "area": 1051}, {"id": 6309695, "category_id": 1, "iscrowd": 0, "bbox": [382, 94, 44, 74], "area": 1610}, {"id": 7432582, "category_id": 1, "iscrowd": 0, "bbox": [304, 129, 29, 13], "area": 183}, {"id": 9139058, "category_id": 1, "iscrowd": 0, "bbox": [357, 95, 29, 41], "area": 706}, {"id": 6574666, "category_id": 1, "iscrowd": 0, "bbox": [352, 55, 32, 40], "area": 786}, {"id": 5783095, "category_id": 1, "iscrowd": 0, "bbox": [105, 194, 30, 60], "area": 892}, {"id": 7171464, "category_id": 1, "iscrowd": 0, "bbox": [371, 129, 12, 15], "area": 161}, {"id": 6971523, "category_id": 1, "iscrowd": 0, "bbox": [277, 126, 16, 15], "area": 177}, {"id": 8616057, "category_id": 1, "iscrowd": 0, "bbox": [382, 57, 32, 36], "area": 635}, {"id": 5192807, "category_id": 1, "iscrowd": 0, "bbox": [277, 52, 50, 49], "area": 1249}, {"id": 5921666, "category_id": 1, "iscrowd": 0, "bbox": [141, 262, 80, 265], "area": 11031}, {"id": 5362097, "category_id": 37, "iscrowd": 0, "bbox": [209, 396, 11, 11], "area": 91}, {"id": 9217452, "category_id": 43, "iscrowd": 0, "bbox": [186, 369, 98, 46], "area": 2513}, {"id": 9062442, "category_id": 62, "iscrowd": 0, "bbox": [247, 122, 24, 18], "area": 260}, {"id": 9193256, "category_id": 62, "iscrowd": 0, "bbox": [257, 112, 23, 18], "area": 267}, {"id": 10533827, "category_id": 145, "iscrowd": 0, "bbox": [0, 347, 427, 293], "area": 112245}, {"id": 2434842, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 191], "area": 53133}, {"id": 8280144, "category_id": 197, "iscrowd": 0, "bbox": [118, 69, 309, 205], "area": 31851}, {"id": 5516851, "category_id": 199, "iscrowd": 0, "bbox": [0, 169, 427, 196], "area": 41525}], "file_name": "000000403122.png", "image_id": 403122}, {"segments_info": [{"id": 5856349, "category_id": 65, "iscrowd": 0, "bbox": [2, 145, 455, 329], "area": 119580}, {"id": 5860995, "category_id": 84, "iscrowd": 0, "bbox": [173, 306, 132, 93], "area": 6646}, {"id": 3618874, "category_id": 93, "iscrowd": 0, "bbox": [0, 271, 396, 209], "area": 3147}, {"id": 4216418, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 591, 420], "area": 101436}], "file_name": "000000403353.png", "image_id": 403353}, {"segments_info": [{"id": 9146255, "category_id": 70, "iscrowd": 0, "bbox": [411, 238, 93, 242], "area": 16534}, {"id": 10264478, "category_id": 81, "iscrowd": 0, "bbox": [9, 314, 142, 78], "area": 7553}, {"id": 9606550, "category_id": 109, "iscrowd": 0, "bbox": [269, 34, 122, 454], "area": 34509}, {"id": 2503992, "category_id": 112, "iscrowd": 0, "bbox": [590, 270, 50, 241], "area": 5964}, {"id": 9409936, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 80, 185], "area": 12540}, {"id": 10066843, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 511], "area": 184789}, {"id": 1908765, "category_id": 190, "iscrowd": 0, "bbox": [93, 393, 506, 118], "area": 34274}, {"id": 9868688, "category_id": 195, "iscrowd": 0, "bbox": [416, 216, 196, 112], "area": 1906}, {"id": 5463653, "category_id": 199, "iscrowd": 0, "bbox": [0, 198, 308, 313], "area": 16563}], "file_name": "000000403385.png", "image_id": 403385}, {"segments_info": [{"id": 3092040, "category_id": 1, "iscrowd": 0, "bbox": [182, 230, 99, 290], "area": 11686}, {"id": 3754047, "category_id": 2, "iscrowd": 0, "bbox": [39, 319, 319, 213], "area": 29705}, {"id": 1711391, "category_id": 27, "iscrowd": 0, "bbox": [227, 475, 99, 51], "area": 2357}, {"id": 9276817, "category_id": 125, "iscrowd": 0, "bbox": [0, 476, 447, 164], "area": 57312}, {"id": 4739647, "category_id": 184, "iscrowd": 0, "bbox": [0, 32, 447, 481], "area": 92238}, {"id": 14588526, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 447, 348], "area": 92114}], "file_name": "000000403565.png", "image_id": 403565}, {"segments_info": [{"id": 658444, "category_id": 1, "iscrowd": 0, "bbox": [247, 240, 43, 194], "area": 3608}, {"id": 1252127, "category_id": 1, "iscrowd": 0, "bbox": [112, 317, 6, 14], "area": 56}, {"id": 987929, "category_id": 1, "iscrowd": 0, "bbox": [71, 322, 9, 9], "area": 46}, {"id": 1515039, "category_id": 1, "iscrowd": 0, "bbox": [312, 253, 67, 193], "area": 4507}, {"id": 921616, "category_id": 1, "iscrowd": 0, "bbox": [144, 268, 22, 78], "area": 619}, {"id": 461323, "category_id": 1, "iscrowd": 0, "bbox": [65, 311, 7, 20], "area": 111}, {"id": 2369582, "category_id": 1, "iscrowd": 0, "bbox": [117, 319, 4, 13], "area": 31}, {"id": 2897205, "category_id": 1, "iscrowd": 0, "bbox": [310, 340, 5, 7], "area": 25}, {"id": 329739, "category_id": 42, "iscrowd": 0, "bbox": [125, 287, 315, 85], "area": 11099}, {"id": 2768976, "category_id": 154, "iscrowd": 0, "bbox": [0, 310, 640, 330], "area": 177702}, {"id": 6455924, "category_id": 155, "iscrowd": 0, "bbox": [408, 316, 232, 104], "area": 10737}, {"id": 3689284, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 327], "area": 194619}, {"id": 790543, "category_id": 192, "iscrowd": 0, "bbox": [456, 299, 184, 42], "area": 4628}], "file_name": "000000403584.png", "image_id": 403584}, {"segments_info": [{"id": 1194584, "category_id": 17, "iscrowd": 0, "bbox": [58, 48, 274, 324], "area": 48163}, {"id": 12303026, "category_id": 72, "iscrowd": 0, "bbox": [344, 127, 156, 220], "area": 32655}, {"id": 265764, "category_id": 177, "iscrowd": 0, "bbox": [308, 0, 192, 375], "area": 28450}, {"id": 664619, "category_id": 188, "iscrowd": 0, "bbox": [177, 0, 148, 142], "area": 10443}, {"id": 70978, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 194, 366], "area": 36869}], "file_name": "000000403817.png", "image_id": 403817}, {"segments_info": [{"id": 4275769, "category_id": 5, "iscrowd": 0, "bbox": [34, 148, 493, 192], "area": 23527}, {"id": 9539470, "category_id": 149, "iscrowd": 0, "bbox": [0, 339, 640, 21], "area": 10561}, {"id": 14996935, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 328], "area": 184315}, {"id": 5404782, "category_id": 193, "iscrowd": 0, "bbox": [0, 321, 640, 106], "area": 54413}], "file_name": "000000404128.png", "image_id": 404128}, {"segments_info": [{"id": 6851494, "category_id": 82, "iscrowd": 0, "bbox": [27, 48, 329, 445], "area": 124244}, {"id": 7697571, "category_id": 100, "iscrowd": 0, "bbox": [137, 0, 34, 49], "area": 1432}, {"id": 3561095, "category_id": 118, "iscrowd": 0, "bbox": [0, 391, 54, 109], "area": 5304}, {"id": 4412814, "category_id": 195, "iscrowd": 0, "bbox": [167, 0, 60, 49], "area": 2325}, {"id": 5413308, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 43164}], "file_name": "000000404191.png", "image_id": 404191}, {"segments_info": [{"id": 6512748, "category_id": 1, "iscrowd": 0, "bbox": [37, 123, 254, 400], "area": 33130}, {"id": 6648442, "category_id": 41, "iscrowd": 0, "bbox": [90, 481, 137, 78], "area": 3268}, {"id": 7373448, "category_id": 184, "iscrowd": 0, "bbox": [0, 110, 427, 270], "area": 50268}, {"id": 15650728, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 276], "area": 71285}, {"id": 8163234, "category_id": 191, "iscrowd": 0, "bbox": [0, 362, 427, 278], "area": 74657}, {"id": 1609090, "category_id": 193, "iscrowd": 0, "bbox": [0, 318, 427, 206], "area": 35381}], "file_name": "000000404249.png", "image_id": 404249}, {"segments_info": [{"id": 8225674, "category_id": 3, "iscrowd": 0, "bbox": [620, 342, 9, 7], "area": 48}, {"id": 5394772, "category_id": 3, "iscrowd": 0, "bbox": [70, 344, 15, 6], "area": 57}, {"id": 8226713, "category_id": 5, "iscrowd": 0, "bbox": [186, 230, 437, 136], "area": 26190}, {"id": 4939375, "category_id": 149, "iscrowd": 0, "bbox": [0, 351, 640, 31], "area": 9538}, {"id": 4409173, "category_id": 184, "iscrowd": 0, "bbox": [0, 306, 640, 41], "area": 6304}, {"id": 12693151, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 255], "area": 155945}, {"id": 9804195, "category_id": 192, "iscrowd": 0, "bbox": [0, 228, 640, 139], "area": 40778}, {"id": 4416369, "category_id": 193, "iscrowd": 0, "bbox": [0, 369, 640, 58], "area": 34059}], "file_name": "000000404479.png", "image_id": 404479}, {"segments_info": [{"id": 1382172, "category_id": 1, "iscrowd": 0, "bbox": [177, 24, 85, 79], "area": 3705}, {"id": 3225419, "category_id": 18, "iscrowd": 0, "bbox": [87, 91, 82, 74], "area": 2608}, {"id": 2306360, "category_id": 64, "iscrowd": 0, "bbox": [208, 70, 106, 82], "area": 4367}, {"id": 4869464, "category_id": 72, "iscrowd": 0, "bbox": [26, 46, 18, 72], "area": 1037}, {"id": 4804704, "category_id": 88, "iscrowd": 0, "bbox": [54, 116, 39, 30], "area": 548}, {"id": 11647422, "category_id": 112, "iscrowd": 0, "bbox": [76, 0, 152, 132], "area": 13921}, {"id": 4542571, "category_id": 118, "iscrowd": 0, "bbox": [0, 144, 54, 54], "area": 532}, {"id": 3554896, "category_id": 189, "iscrowd": 0, "bbox": [187, 113, 126, 127], "area": 6635}, {"id": 789777, "category_id": 190, "iscrowd": 0, "bbox": [268, 197, 37, 30], "area": 536}, {"id": 2250358, "category_id": 199, "iscrowd": 0, "bbox": [36, 0, 284, 133], "area": 8899}, {"id": 8024432, "category_id": 200, "iscrowd": 0, "bbox": [0, 130, 297, 110], "area": 21323}], "file_name": "000000404484.png", "image_id": 404484}, {"segments_info": [{"id": 2495502, "category_id": 3, "iscrowd": 0, "bbox": [338, 313, 16, 11], "area": 111}, {"id": 723466, "category_id": 161, "iscrowd": 0, "bbox": [265, 320, 57, 30], "area": 1492}, {"id": 5132366, "category_id": 181, "iscrowd": 0, "bbox": [0, 247, 183, 35], "area": 3931}, {"id": 1910314, "category_id": 185, "iscrowd": 0, "bbox": [0, 275, 227, 160], "area": 31906}, {"id": 16114124, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 386, 261], "area": 71953}, {"id": 4545135, "category_id": 191, "iscrowd": 0, "bbox": [0, 322, 386, 178], "area": 42868}, {"id": 3488065, "category_id": 197, "iscrowd": 0, "bbox": [0, 145, 386, 238], "area": 40591}], "file_name": "000000404534.png", "image_id": 404534}, {"segments_info": [{"id": 10661041, "category_id": 16, "iscrowd": 0, "bbox": [87, 172, 318, 282], "area": 29075}, {"id": 9149348, "category_id": 154, "iscrowd": 0, "bbox": [0, 396, 640, 84], "area": 37981}, {"id": 11579559, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 443], "area": 239175}], "file_name": "000000404568.png", "image_id": 404568}, {"segments_info": [{"id": 6127530, "category_id": 171, "iscrowd": 0, "bbox": [0, 415, 129, 225], "area": 20424}, {"id": 3686744, "category_id": 181, "iscrowd": 0, "bbox": [0, 570, 82, 70], "area": 5307}, {"id": 3623260, "category_id": 184, "iscrowd": 0, "bbox": [266, 508, 44, 49], "area": 1108}, {"id": 14594442, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 517], "area": 182261}, {"id": 4945078, "category_id": 197, "iscrowd": 0, "bbox": [82, 457, 398, 183], "area": 40000}], "file_name": "000000404601.png", "image_id": 404601}, {"segments_info": [{"id": 6780323, "category_id": 1, "iscrowd": 0, "bbox": [400, 89, 60, 70], "area": 1432}, {"id": 6114932, "category_id": 1, "iscrowd": 0, "bbox": [57, 150, 222, 273], "area": 22132}, {"id": 5198708, "category_id": 1, "iscrowd": 0, "bbox": [361, 90, 35, 77], "area": 657}, {"id": 7038853, "category_id": 1, "iscrowd": 0, "bbox": [80, 146, 128, 224], "area": 10614}, {"id": 4145774, "category_id": 1, "iscrowd": 0, "bbox": [261, 94, 59, 66], "area": 2343}, {"id": 2961244, "category_id": 1, "iscrowd": 0, "bbox": [212, 113, 28, 71], "area": 1034}, {"id": 5131100, "category_id": 1, "iscrowd": 0, "bbox": [146, 94, 154, 221], "area": 12703}, {"id": 4538969, "category_id": 1, "iscrowd": 0, "bbox": [365, 101, 111, 170], "area": 10224}, {"id": 8940922, "category_id": 1, "iscrowd": 0, "bbox": [620, 130, 20, 47], "area": 732}, {"id": 3554143, "category_id": 15, "iscrowd": 0, "bbox": [1, 127, 176, 297], "area": 2993}, {"id": 4675708, "category_id": 46, "iscrowd": 0, "bbox": [348, 158, 14, 28], "area": 297}, {"id": 6581629, "category_id": 46, "iscrowd": 0, "bbox": [322, 244, 29, 62], "area": 1194}, {"id": 5858175, "category_id": 46, "iscrowd": 0, "bbox": [363, 216, 23, 54], "area": 892}, {"id": 4805768, "category_id": 46, "iscrowd": 0, "bbox": [376, 141, 13, 12], "area": 84}, {"id": 7240341, "category_id": 46, "iscrowd": 0, "bbox": [329, 238, 27, 27], "area": 246}, {"id": 6453404, "category_id": 46, "iscrowd": 0, "bbox": [275, 146, 56, 69], "area": 1109}, {"id": 5411971, "category_id": 51, "iscrowd": 0, "bbox": [290, 256, 29, 23], "area": 529}, {"id": 1905181, "category_id": 62, "iscrowd": 0, "bbox": [605, 167, 35, 110], "area": 1958}, {"id": 2235202, "category_id": 62, "iscrowd": 0, "bbox": [470, 177, 31, 49], "area": 798}, {"id": 2103091, "category_id": 62, "iscrowd": 0, "bbox": [382, 228, 156, 197], "area": 11070}, {"id": 2960465, "category_id": 63, "iscrowd": 0, "bbox": [0, 177, 80, 236], "area": 12056}, {"id": 3950212, "category_id": 63, "iscrowd": 0, "bbox": [129, 110, 250, 77], "area": 3753}, {"id": 6446435, "category_id": 67, "iscrowd": 0, "bbox": [217, 243, 271, 107], "area": 20324}, {"id": 4807042, "category_id": 67, "iscrowd": 0, "bbox": [230, 145, 150, 66], "area": 4920}, {"id": 9602452, "category_id": 100, "iscrowd": 0, "bbox": [259, 195, 63, 60], "area": 2080}, {"id": 4081292, "category_id": 112, "iscrowd": 0, "bbox": [426, 0, 166, 304], "area": 22952}, {"id": 2169651, "category_id": 118, "iscrowd": 0, "bbox": [241, 208, 399, 217], "area": 32928}, {"id": 5797274, "category_id": 133, "iscrowd": 0, "bbox": [221, 0, 151, 74], "area": 8659}, {"id": 2565721, "category_id": 177, "iscrowd": 0, "bbox": [0, 73, 640, 157], "area": 15833}, {"id": 2960982, "category_id": 189, "iscrowd": 0, "bbox": [216, 208, 204, 145], "area": 2939}, {"id": 15003110, "category_id": 195, "iscrowd": 0, "bbox": [303, 218, 46, 25], "area": 760}, {"id": 7578570, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 150], "area": 38961}], "file_name": "000000404678.png", "image_id": 404678}, {"segments_info": [{"id": 9017016, "category_id": 1, "iscrowd": 0, "bbox": [221, 141, 186, 159], "area": 12752}, {"id": 10380850, "category_id": 42, "iscrowd": 0, "bbox": [228, 263, 133, 33], "area": 2719}, {"id": 9342587, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 257643}], "file_name": "000000404805.png", "image_id": 404805}, {"segments_info": [{"id": 3489639, "category_id": 1, "iscrowd": 0, "bbox": [2, 116, 228, 515], "area": 65874}, {"id": 2840424, "category_id": 1, "iscrowd": 0, "bbox": [29, 117, 398, 516], "area": 73310}, {"id": 7243159, "category_id": 75, "iscrowd": 0, "bbox": [0, 269, 35, 38], "area": 477}, {"id": 7052198, "category_id": 75, "iscrowd": 0, "bbox": [6, 236, 88, 34], "area": 849}, {"id": 6718353, "category_id": 75, "iscrowd": 0, "bbox": [212, 353, 45, 74], "area": 865}, {"id": 866880, "category_id": 181, "iscrowd": 0, "bbox": [0, 51, 332, 348], "area": 39879}, {"id": 1455406, "category_id": 184, "iscrowd": 0, "bbox": [31, 100, 61, 111], "area": 4302}, {"id": 5539994, "category_id": 188, "iscrowd": 0, "bbox": [0, 517, 51, 123], "area": 4867}, {"id": 2049112, "category_id": 189, "iscrowd": 0, "bbox": [185, 435, 136, 205], "area": 13764}, {"id": 1798794, "category_id": 190, "iscrowd": 0, "bbox": [182, 559, 140, 81], "area": 6034}, {"id": 4288686, "category_id": 195, "iscrowd": 0, "bbox": [214, 458, 54, 51], "area": 1438}, {"id": 1984335, "category_id": 197, "iscrowd": 0, "bbox": [0, 464, 48, 65], "area": 2687}, {"id": 4299690, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 187], "area": 34088}], "file_name": "000000404839.png", "image_id": 404839}, {"segments_info": [{"id": 6383731, "category_id": 1, "iscrowd": 0, "bbox": [120, 26, 123, 439], "area": 30527}, {"id": 2697832, "category_id": 1, "iscrowd": 0, "bbox": [236, 142, 116, 333], "area": 19386}, {"id": 3621439, "category_id": 1, "iscrowd": 0, "bbox": [43, 187, 96, 268], "area": 11578}, {"id": 5524579, "category_id": 43, "iscrowd": 0, "bbox": [315, 265, 34, 84], "area": 1609}, {"id": 6515290, "category_id": 43, "iscrowd": 0, "bbox": [35, 303, 118, 75], "area": 5348}, {"id": 7040366, "category_id": 149, "iscrowd": 0, "bbox": [0, 239, 368, 261], "area": 47755}, {"id": 3032637, "category_id": 184, "iscrowd": 0, "bbox": [122, 0, 246, 165], "area": 22466}, {"id": 8159617, "category_id": 191, "iscrowd": 0, "bbox": [0, 28, 368, 270], "area": 8589}, {"id": 3885142, "category_id": 194, "iscrowd": 0, "bbox": [0, 65, 368, 197], "area": 18514}], "file_name": "000000404922.png", "image_id": 404922}, {"segments_info": [{"id": 10787229, "category_id": 1, "iscrowd": 0, "bbox": [196, 106, 168, 369], "area": 28360}, {"id": 10132122, "category_id": 1, "iscrowd": 0, "bbox": [355, 0, 46, 68], "area": 2203}, {"id": 6775398, "category_id": 1, "iscrowd": 0, "bbox": [505, 1, 23, 17], "area": 299}, {"id": 2237740, "category_id": 1, "iscrowd": 0, "bbox": [591, 108, 48, 216], "area": 5113}, {"id": 7113919, "category_id": 39, "iscrowd": 0, "bbox": [187, 85, 134, 95], "area": 1643}, {"id": 3895657, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 266383}], "file_name": "000000404923.png", "image_id": 404923}, {"segments_info": [{"id": 12767444, "category_id": 1, "iscrowd": 0, "bbox": [361, 178, 83, 29], "area": 1594}, {"id": 3357497, "category_id": 1, "iscrowd": 0, "bbox": [595, 224, 45, 250], "area": 7098}, {"id": 3624541, "category_id": 58, "iscrowd": 0, "bbox": [382, 226, 61, 27], "area": 501}, {"id": 3492182, "category_id": 58, "iscrowd": 0, "bbox": [398, 223, 63, 30], "area": 497}, {"id": 2241600, "category_id": 60, "iscrowd": 0, "bbox": [33, 253, 36, 18], "area": 443}, {"id": 1976108, "category_id": 60, "iscrowd": 0, "bbox": [96, 358, 73, 34], "area": 1948}, {"id": 7437964, "category_id": 60, "iscrowd": 0, "bbox": [226, 155, 46, 12], "area": 474}, {"id": 2902106, "category_id": 60, "iscrowd": 0, "bbox": [175, 254, 46, 28], "area": 1017}, {"id": 2502193, "category_id": 60, "iscrowd": 0, "bbox": [51, 229, 39, 19], "area": 450}, {"id": 3428449, "category_id": 60, "iscrowd": 0, "bbox": [81, 264, 47, 26], "area": 1048}, {"id": 9676215, "category_id": 60, "iscrowd": 0, "bbox": [172, 150, 48, 20], "area": 760}, {"id": 2835539, "category_id": 60, "iscrowd": 0, "bbox": [34, 267, 48, 29], "area": 1149}, {"id": 2503742, "category_id": 60, "iscrowd": 0, "bbox": [71, 247, 46, 28], "area": 725}, {"id": 2306101, "category_id": 60, "iscrowd": 0, "bbox": [277, 223, 46, 21], "area": 479}, {"id": 3232357, "category_id": 60, "iscrowd": 0, "bbox": [127, 258, 51, 28], "area": 1108}, {"id": 2501935, "category_id": 60, "iscrowd": 0, "bbox": [83, 218, 44, 19], "area": 401}, {"id": 4345687, "category_id": 60, "iscrowd": 1, "bbox": [1, 123, 603, 280], "area": 77725}, {"id": 5529437, "category_id": 85, "iscrowd": 0, "bbox": [392, 110, 26, 26], "area": 512}, {"id": 14474973, "category_id": 130, "iscrowd": 0, "bbox": [26, 0, 589, 113], "area": 9153}, {"id": 7566705, "category_id": 156, "iscrowd": 0, "bbox": [0, 131, 624, 301], "area": 30756}, {"id": 3226428, "category_id": 171, "iscrowd": 0, "bbox": [241, 376, 399, 104], "area": 20217}, {"id": 5665400, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 613, 115], "area": 37087}, {"id": 2370861, "category_id": 196, "iscrowd": 0, "bbox": [0, 208, 286, 137], "area": 2129}, {"id": 6252131, "category_id": 199, "iscrowd": 0, "bbox": [0, 75, 432, 64], "area": 7287}], "file_name": "000000405195.png", "image_id": 405195}, {"segments_info": [{"id": 7171945, "category_id": 6, "iscrowd": 0, "bbox": [70, 22, 441, 353], "area": 120524}, {"id": 5197392, "category_id": 6, "iscrowd": 0, "bbox": [2, 109, 38, 234], "area": 5429}, {"id": 2893882, "category_id": 8, "iscrowd": 0, "bbox": [501, 116, 49, 168], "area": 5802}, {"id": 13080689, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 550, 158], "area": 38548}, {"id": 7040623, "category_id": 191, "iscrowd": 0, "bbox": [0, 222, 550, 188], "area": 47710}], "file_name": "000000405205.png", "image_id": 405205}, {"segments_info": [{"id": 12565449, "category_id": 1, "iscrowd": 0, "bbox": [0, 7, 49, 162], "area": 5425}, {"id": 10656166, "category_id": 1, "iscrowd": 0, "bbox": [260, 0, 137, 188], "area": 16465}, {"id": 8156549, "category_id": 1, "iscrowd": 0, "bbox": [441, 118, 59, 242], "area": 10797}, {"id": 2106414, "category_id": 1, "iscrowd": 0, "bbox": [179, 1, 102, 115], "area": 7502}, {"id": 1511955, "category_id": 1, "iscrowd": 0, "bbox": [384, 0, 116, 117], "area": 9053}, {"id": 3037575, "category_id": 1, "iscrowd": 0, "bbox": [92, 20, 67, 137], "area": 5884}, {"id": 4143970, "category_id": 1, "iscrowd": 0, "bbox": [379, 60, 89, 149], "area": 8612}, {"id": 3946635, "category_id": 1, "iscrowd": 0, "bbox": [145, 45, 122, 118], "area": 9209}, {"id": 1513246, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 193, 117], "area": 10901}, {"id": 3288377, "category_id": 1, "iscrowd": 0, "bbox": [178, 175, 281, 195], "area": 32240}, {"id": 5790354, "category_id": 53, "iscrowd": 0, "bbox": [64, 324, 13, 8], "area": 78}, {"id": 4610955, "category_id": 53, "iscrowd": 0, "bbox": [124, 230, 31, 13], "area": 238}, {"id": 4280217, "category_id": 53, "iscrowd": 0, "bbox": [148, 252, 21, 12], "area": 191}, {"id": 4540816, "category_id": 53, "iscrowd": 0, "bbox": [211, 304, 15, 9], "area": 115}, {"id": 2507918, "category_id": 61, "iscrowd": 0, "bbox": [54, 144, 92, 60], "area": 3964}, {"id": 7327330, "category_id": 61, "iscrowd": 0, "bbox": [199, 216, 28, 15], "area": 302}, {"id": 7443332, "category_id": 61, "iscrowd": 0, "bbox": [162, 161, 210, 86], "area": 8318}, {"id": 8753039, "category_id": 67, "iscrowd": 0, "bbox": [1, 146, 457, 219], "area": 44911}, {"id": 10133654, "category_id": 189, "iscrowd": 0, "bbox": [0, 169, 486, 206], "area": 3722}], "file_name": "000000405249.png", "image_id": 405249}, {"segments_info": [{"id": 3750775, "category_id": 1, "iscrowd": 0, "bbox": [292, 334, 15, 33], "area": 242}, {"id": 3222827, "category_id": 1, "iscrowd": 0, "bbox": [414, 335, 19, 41], "area": 222}, {"id": 2630437, "category_id": 1, "iscrowd": 0, "bbox": [518, 325, 5, 9], "area": 22}, {"id": 3289158, "category_id": 1, "iscrowd": 0, "bbox": [314, 337, 12, 33], "area": 222}, {"id": 3225914, "category_id": 15, "iscrowd": 0, "bbox": [412, 350, 71, 27], "area": 1132}, {"id": 4078909, "category_id": 15, "iscrowd": 0, "bbox": [516, 331, 14, 11], "area": 81}, {"id": 10985118, "category_id": 38, "iscrowd": 0, "bbox": [282, 259, 9, 9], "area": 31}, {"id": 5916512, "category_id": 38, "iscrowd": 0, "bbox": [186, 277, 4, 7], "area": 19}, {"id": 11706522, "category_id": 38, "iscrowd": 0, "bbox": [68, 228, 19, 18], "area": 103}, {"id": 10257013, "category_id": 38, "iscrowd": 0, "bbox": [131, 255, 11, 12], "area": 77}, {"id": 8087142, "category_id": 38, "iscrowd": 0, "bbox": [393, 201, 33, 53], "area": 905}, {"id": 9865835, "category_id": 38, "iscrowd": 0, "bbox": [329, 179, 17, 16], "area": 170}, {"id": 8686981, "category_id": 38, "iscrowd": 0, "bbox": [523, 181, 17, 14], "area": 177}, {"id": 8945774, "category_id": 38, "iscrowd": 0, "bbox": [149, 130, 45, 45], "area": 383}, {"id": 9141147, "category_id": 38, "iscrowd": 0, "bbox": [364, 262, 8, 5], "area": 21}, {"id": 9537703, "category_id": 38, "iscrowd": 0, "bbox": [273, 283, 8, 11], "area": 66}, {"id": 12629680, "category_id": 38, "iscrowd": 0, "bbox": [391, 265, 11, 15], "area": 91}, {"id": 6577049, "category_id": 38, "iscrowd": 0, "bbox": [357, 231, 10, 13], "area": 39}, {"id": 9998474, "category_id": 38, "iscrowd": 0, "bbox": [36, 235, 30, 36], "area": 390}, {"id": 13614262, "category_id": 38, "iscrowd": 1, "bbox": [32, 128, 507, 172], "area": 4121}, {"id": 7695722, "category_id": 148, "iscrowd": 0, "bbox": [0, 303, 540, 73], "area": 18314}, {"id": 12167074, "category_id": 184, "iscrowd": 0, "bbox": [19, 69, 621, 296], "area": 52833}, {"id": 14267556, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 312], "area": 142222}, {"id": 3299155, "category_id": 193, "iscrowd": 0, "bbox": [0, 302, 640, 178], "area": 79876}, {"id": 5854550, "category_id": 197, "iscrowd": 0, "bbox": [559, 302, 81, 27], "area": 1387}], "file_name": "000000405279.png", "image_id": 405279}, {"segments_info": [{"id": 5589837, "category_id": 17, "iscrowd": 0, "bbox": [12, 2, 628, 411], "area": 141397}, {"id": 8529535, "category_id": 65, "iscrowd": 0, "bbox": [0, 234, 493, 183], "area": 54324}, {"id": 11638924, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 213, 240], "area": 39668}, {"id": 8396921, "category_id": 141, "iscrowd": 0, "bbox": [0, 240, 3, 128], "area": 253}, {"id": 9663361, "category_id": 199, "iscrowd": 0, "bbox": [219, 0, 383, 103], "area": 15347}], "file_name": "000000405306.png", "image_id": 405306}, {"segments_info": [{"id": 4344659, "category_id": 60, "iscrowd": 0, "bbox": [256, 73, 74, 169], "area": 9382}, {"id": 6390156, "category_id": 60, "iscrowd": 0, "bbox": [8, 246, 99, 98], "area": 6374}, {"id": 8552312, "category_id": 67, "iscrowd": 0, "bbox": [2, 0, 498, 375], "area": 166773}, {"id": 6774608, "category_id": 75, "iscrowd": 0, "bbox": [301, 0, 85, 30], "area": 1450}, {"id": 3551273, "category_id": 100, "iscrowd": 0, "bbox": [0, 27, 35, 348], "area": 2110}], "file_name": "000000405432.png", "image_id": 405432}, {"segments_info": [{"id": 798042, "category_id": 44, "iscrowd": 0, "bbox": [353, 14, 88, 295], "area": 17689}, {"id": 2125480, "category_id": 44, "iscrowd": 0, "bbox": [196, 23, 62, 193], "area": 8961}, {"id": 1253998, "category_id": 46, "iscrowd": 0, "bbox": [456, 227, 119, 199], "area": 14539}, {"id": 3633833, "category_id": 46, "iscrowd": 0, "bbox": [266, 138, 103, 242], "area": 13239}, {"id": 2833510, "category_id": 46, "iscrowd": 0, "bbox": [111, 55, 92, 204], "area": 9512}, {"id": 1450347, "category_id": 48, "iscrowd": 0, "bbox": [437, 379, 122, 43], "area": 1318}, {"id": 1913971, "category_id": 48, "iscrowd": 0, "bbox": [439, 407, 36, 20], "area": 259}, {"id": 8625564, "category_id": 50, "iscrowd": 0, "bbox": [69, 415, 73, 11], "area": 569}, {"id": 1122622, "category_id": 51, "iscrowd": 0, "bbox": [543, 269, 97, 115], "area": 8296}, {"id": 7438227, "category_id": 51, "iscrowd": 0, "bbox": [1, 177, 35, 70], "area": 1575}, {"id": 1787262, "category_id": 64, "iscrowd": 0, "bbox": [291, 0, 252, 188], "area": 19961}, {"id": 3163773, "category_id": 67, "iscrowd": 0, "bbox": [2, 29, 636, 398], "area": 141252}, {"id": 732273, "category_id": 86, "iscrowd": 0, "bbox": [319, 80, 176, 105], "area": 4337}, {"id": 7444659, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 119, 170], "area": 13882}], "file_name": "000000405691.png", "image_id": 405691}, {"segments_info": [{"id": 4541778, "category_id": 47, "iscrowd": 0, "bbox": [330, 203, 7, 11], "area": 67}, {"id": 2964028, "category_id": 62, "iscrowd": 0, "bbox": [0, 288, 164, 139], "area": 11199}, {"id": 4608083, "category_id": 62, "iscrowd": 0, "bbox": [0, 329, 76, 82], "area": 1969}, {"id": 3355703, "category_id": 63, "iscrowd": 0, "bbox": [503, 202, 137, 225], "area": 19604}, {"id": 6581101, "category_id": 64, "iscrowd": 0, "bbox": [10, 204, 73, 128], "area": 4937}, {"id": 2892832, "category_id": 72, "iscrowd": 0, "bbox": [164, 139, 112, 66], "area": 7003}, {"id": 3355731, "category_id": 84, "iscrowd": 0, "bbox": [356, 271, 37, 7], "area": 215}, {"id": 6709596, "category_id": 84, "iscrowd": 0, "bbox": [353, 257, 42, 15], "area": 501}, {"id": 3287849, "category_id": 109, "iscrowd": 0, "bbox": [119, 17, 56, 276], "area": 9591}, {"id": 5531003, "category_id": 118, "iscrowd": 0, "bbox": [0, 273, 342, 154], "area": 22541}, {"id": 3425870, "category_id": 177, "iscrowd": 0, "bbox": [0, 310, 20, 29], "area": 261}, {"id": 11446691, "category_id": 181, "iscrowd": 0, "bbox": [10, 32, 559, 275], "area": 50607}, {"id": 5332060, "category_id": 186, "iscrowd": 0, "bbox": [96, 0, 527, 34], "area": 9968}, {"id": 1782621, "category_id": 188, "iscrowd": 0, "bbox": [0, 202, 401, 102], "area": 13437}, {"id": 7763830, "category_id": 189, "iscrowd": 0, "bbox": [341, 259, 223, 132], "area": 21158}, {"id": 3230760, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 263], "area": 67837}, {"id": 6383724, "category_id": 200, "iscrowd": 0, "bbox": [235, 293, 373, 134], "area": 25605}], "file_name": "000000405970.png", "image_id": 405970}, {"segments_info": [{"id": 5794170, "category_id": 22, "iscrowd": 0, "bbox": [89, 197, 217, 145], "area": 9772}, {"id": 4740967, "category_id": 22, "iscrowd": 0, "bbox": [79, 242, 197, 176], "area": 22288}, {"id": 7045781, "category_id": 22, "iscrowd": 0, "bbox": [114, 18, 315, 324], "area": 59506}, {"id": 5398379, "category_id": 154, "iscrowd": 0, "bbox": [0, 259, 640, 167], "area": 72209}, {"id": 6782599, "category_id": 199, "iscrowd": 0, "bbox": [168, 0, 135, 46], "area": 4797}], "file_name": "000000405972.png", "image_id": 405972}, {"segments_info": [{"id": 7237234, "category_id": 1, "iscrowd": 0, "bbox": [164, 155, 199, 437], "area": 30111}, {"id": 4506803, "category_id": 37, "iscrowd": 0, "bbox": [253, 86, 14, 15], "area": 168}, {"id": 3290428, "category_id": 43, "iscrowd": 0, "bbox": [222, 62, 52, 116], "area": 3036}, {"id": 4542537, "category_id": 145, "iscrowd": 0, "bbox": [0, 474, 428, 166], "area": 56034}, {"id": 2302230, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 428, 106], "area": 37866}, {"id": 2899261, "category_id": 197, "iscrowd": 0, "bbox": [0, 421, 428, 109], "area": 20576}], "file_name": "000000406129.png", "image_id": 406129}, {"segments_info": [{"id": 6709602, "category_id": 1, "iscrowd": 0, "bbox": [13, 293, 137, 347], "area": 23853}, {"id": 6445402, "category_id": 1, "iscrowd": 0, "bbox": [375, 268, 150, 365], "area": 23880}, {"id": 6906465, "category_id": 1, "iscrowd": 0, "bbox": [165, 260, 186, 372], "area": 23554}, {"id": 3221548, "category_id": 32, "iscrowd": 0, "bbox": [62, 332, 29, 26], "area": 310}, {"id": 8083785, "category_id": 32, "iscrowd": 0, "bbox": [219, 317, 45, 105], "area": 1168}, {"id": 4201572, "category_id": 32, "iscrowd": 0, "bbox": [445, 279, 78, 61], "area": 1144}], "file_name": "000000406417.png", "image_id": 406417}, {"segments_info": [{"id": 5994415, "category_id": 53, "iscrowd": 0, "bbox": [1, 228, 426, 412], "area": 163765}, {"id": 6469600, "category_id": 55, "iscrowd": 0, "bbox": [221, 1, 206, 124], "area": 19455}, {"id": 2063082, "category_id": 55, "iscrowd": 0, "bbox": [3, 155, 44, 62], "area": 2211}, {"id": 3644123, "category_id": 55, "iscrowd": 0, "bbox": [34, 200, 50, 34], "area": 1030}, {"id": 2327780, "category_id": 55, "iscrowd": 0, "bbox": [82, 143, 53, 51], "area": 2134}, {"id": 7316432, "category_id": 55, "iscrowd": 0, "bbox": [157, 29, 37, 31], "area": 751}, {"id": 2849499, "category_id": 55, "iscrowd": 0, "bbox": [2, 95, 156, 167], "area": 10252}, {"id": 5483468, "category_id": 122, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 69017}], "file_name": "000000406570.png", "image_id": 406570}, {"segments_info": [{"id": 6050638, "category_id": 1, "iscrowd": 0, "bbox": [402, 288, 6, 10], "area": 42}, {"id": 5591892, "category_id": 1, "iscrowd": 0, "bbox": [29, 313, 13, 45], "area": 378}, {"id": 3090742, "category_id": 1, "iscrowd": 0, "bbox": [359, 354, 17, 39], "area": 307}, {"id": 3886138, "category_id": 1, "iscrowd": 0, "bbox": [317, 290, 7, 15], "area": 74}, {"id": 3486270, "category_id": 1, "iscrowd": 0, "bbox": [363, 297, 11, 10], "area": 56}, {"id": 5328213, "category_id": 1, "iscrowd": 0, "bbox": [54, 333, 68, 147], "area": 4895}, {"id": 1578791, "category_id": 1, "iscrowd": 0, "bbox": [413, 323, 9, 15], "area": 96}, {"id": 6247771, "category_id": 1, "iscrowd": 0, "bbox": [439, 337, 40, 109], "area": 2278}, {"id": 8209458, "category_id": 1, "iscrowd": 0, "bbox": [80, 290, 12, 26], "area": 168}, {"id": 1972760, "category_id": 1, "iscrowd": 0, "bbox": [386, 295, 4, 9], "area": 25}, {"id": 3355441, "category_id": 1, "iscrowd": 0, "bbox": [412, 288, 8, 18], "area": 81}, {"id": 2432283, "category_id": 1, "iscrowd": 0, "bbox": [421, 356, 14, 45], "area": 311}, {"id": 6050130, "category_id": 1, "iscrowd": 1, "bbox": [31, 242, 474, 162], "area": 26300}, {"id": 3419213, "category_id": 27, "iscrowd": 0, "bbox": [456, 352, 23, 27], "area": 406}, {"id": 4407617, "category_id": 27, "iscrowd": 0, "bbox": [265, 344, 8, 13], "area": 87}, {"id": 2958883, "category_id": 27, "iscrowd": 0, "bbox": [225, 322, 10, 17], "area": 118}, {"id": 7890546, "category_id": 35, "iscrowd": 0, "bbox": [370, 383, 22, 8], "area": 32}, {"id": 7692126, "category_id": 35, "iscrowd": 0, "bbox": [276, 374, 11, 5], "area": 14}, {"id": 10325900, "category_id": 35, "iscrowd": 0, "bbox": [81, 314, 7, 4], "area": 10}, {"id": 7559759, "category_id": 35, "iscrowd": 0, "bbox": [312, 387, 40, 4], "area": 52}, {"id": 6907503, "category_id": 35, "iscrowd": 0, "bbox": [42, 416, 133, 30], "area": 1368}, {"id": 11578557, "category_id": 35, "iscrowd": 0, "bbox": [388, 382, 17, 7], "area": 27}, {"id": 8615284, "category_id": 35, "iscrowd": 0, "bbox": [261, 357, 9, 10], "area": 39}, {"id": 11311762, "category_id": 35, "iscrowd": 0, "bbox": [57, 312, 19, 31], "area": 35}, {"id": 9139819, "category_id": 35, "iscrowd": 0, "bbox": [415, 437, 69, 12], "area": 213}, {"id": 11116958, "category_id": 128, "iscrowd": 0, "bbox": [376, 245, 61, 34], "area": 1129}, {"id": 5916731, "category_id": 151, "iscrowd": 0, "bbox": [74, 230, 42, 22], "area": 550}, {"id": 13418423, "category_id": 159, "iscrowd": 0, "bbox": [0, 158, 640, 322], "area": 93273}, {"id": 5914428, "category_id": 166, "iscrowd": 0, "bbox": [376, 222, 41, 29], "area": 739}, {"id": 3684146, "category_id": 184, "iscrowd": 0, "bbox": [29, 133, 611, 84], "area": 16494}, {"id": 6903116, "category_id": 185, "iscrowd": 0, "bbox": [399, 328, 56, 63], "area": 897}, {"id": 11500885, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 186], "area": 102551}, {"id": 13158086, "category_id": 192, "iscrowd": 0, "bbox": [0, 158, 18, 25], "area": 221}, {"id": 4735809, "category_id": 197, "iscrowd": 0, "bbox": [0, 174, 640, 221], "area": 39267}, {"id": 6644836, "category_id": 199, "iscrowd": 0, "bbox": [72, 160, 24, 57], "area": 911}], "file_name": "000000406611.png", "image_id": 406611}, {"segments_info": [{"id": 8225921, "category_id": 1, "iscrowd": 0, "bbox": [228, 0, 112, 171], "area": 7555}, {"id": 9336442, "category_id": 1, "iscrowd": 0, "bbox": [445, 94, 153, 346], "area": 26480}, {"id": 6049099, "category_id": 1, "iscrowd": 0, "bbox": [214, 1, 120, 219], "area": 10123}, {"id": 8087658, "category_id": 1, "iscrowd": 0, "bbox": [449, 1, 175, 279], "area": 19424}, {"id": 5329759, "category_id": 1, "iscrowd": 0, "bbox": [175, 70, 65, 258], "area": 9125}, {"id": 6976122, "category_id": 20, "iscrowd": 0, "bbox": [196, 157, 255, 322], "area": 37745}, {"id": 4998728, "category_id": 31, "iscrowd": 0, "bbox": [432, 41, 133, 154], "area": 3628}, {"id": 6518909, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 185245}], "file_name": "000000406997.png", "image_id": 406997}, {"segments_info": [{"id": 3746641, "category_id": 1, "iscrowd": 0, "bbox": [211, 187, 116, 385], "area": 28808}, {"id": 7559491, "category_id": 35, "iscrowd": 0, "bbox": [57, 528, 313, 83], "area": 8035}, {"id": 14075581, "category_id": 159, "iscrowd": 0, "bbox": [0, 154, 480, 486], "area": 161307}, {"id": 4867909, "category_id": 184, "iscrowd": 0, "bbox": [0, 153, 480, 131], "area": 32648}, {"id": 13738359, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 143], "area": 62989}, {"id": 11371880, "category_id": 192, "iscrowd": 0, "bbox": [0, 119, 480, 44], "area": 13014}], "file_name": "000000407002.png", "image_id": 407002}, {"segments_info": [{"id": 3486781, "category_id": 1, "iscrowd": 0, "bbox": [206, 83, 274, 547], "area": 49446}, {"id": 4738888, "category_id": 3, "iscrowd": 0, "bbox": [0, 2, 480, 623], "area": 162295}, {"id": 4736834, "category_id": 18, "iscrowd": 0, "bbox": [5, 216, 406, 414], "area": 70275}, {"id": 13492186, "category_id": 181, "iscrowd": 0, "bbox": [0, 126, 94, 395], "area": 13949}], "file_name": "000000407083.png", "image_id": 407083}, {"segments_info": [{"id": 8159112, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 385, 480], "area": 140341}, {"id": 14409436, "category_id": 37, "iscrowd": 0, "bbox": [369, 316, 89, 157], "area": 9990}, {"id": 9809089, "category_id": 40, "iscrowd": 0, "bbox": [298, 119, 283, 361], "area": 82835}, {"id": 6265457, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 72952}], "file_name": "000000407298.png", "image_id": 407298}, {"segments_info": [{"id": 8229524, "category_id": 86, "iscrowd": 0, "bbox": [174, 143, 161, 234], "area": 25051}, {"id": 5018777, "category_id": 119, "iscrowd": 0, "bbox": [11, 90, 173, 162], "area": 13603}, {"id": 5989481, "category_id": 199, "iscrowd": 0, "bbox": [0, 12, 334, 488], "area": 87396}], "file_name": "000000407403.png", "image_id": 407403}, {"segments_info": [{"id": 4742779, "category_id": 16, "iscrowd": 0, "bbox": [372, 90, 185, 295], "area": 25869}, {"id": 7707081, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 379], "area": 171557}], "file_name": "000000407518.png", "image_id": 407518}, {"segments_info": [{"id": 3497572, "category_id": 56, "iscrowd": 0, "bbox": [299, 89, 334, 351], "area": 57749}, {"id": 2837583, "category_id": 56, "iscrowd": 0, "bbox": [262, 50, 95, 111], "area": 5893}, {"id": 2310709, "category_id": 56, "iscrowd": 0, "bbox": [211, 0, 52, 30], "area": 1161}, {"id": 5075352, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 190274}], "file_name": "000000407524.png", "image_id": 407524}, {"segments_info": [{"id": 1720673, "category_id": 52, "iscrowd": 0, "bbox": [85, 380, 227, 165], "area": 19176}, {"id": 1656928, "category_id": 52, "iscrowd": 0, "bbox": [94, 97, 289, 340], "area": 68730}, {"id": 10860738, "category_id": 92, "iscrowd": 0, "bbox": [65, 116, 413, 287], "area": 23519}, {"id": 7887453, "category_id": 100, "iscrowd": 0, "bbox": [0, 116, 461, 432], "area": 13269}, {"id": 2442338, "category_id": 122, "iscrowd": 0, "bbox": [83, 375, 208, 134], "area": 1319}, {"id": 10991298, "category_id": 154, "iscrowd": 0, "bbox": [0, 285, 478, 355], "area": 39348}, {"id": 5399408, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 478, 640], "area": 41121}, {"id": 1581106, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 148, 241], "area": 23796}, {"id": 6580608, "category_id": 191, "iscrowd": 0, "bbox": [0, 300, 56, 36], "area": 1539}, {"id": 12504278, "category_id": 194, "iscrowd": 0, "bbox": [14, 405, 464, 235], "area": 6785}, {"id": 4209222, "category_id": 195, "iscrowd": 0, "bbox": [132, 505, 71, 135], "area": 6168}, {"id": 5071230, "category_id": 198, "iscrowd": 0, "bbox": [71, 521, 35, 46], "area": 850}], "file_name": "000000407574.png", "image_id": 407574}, {"segments_info": [{"id": 7118803, "category_id": 42, "iscrowd": 0, "bbox": [549, 25, 90, 250], "area": 13158}, {"id": 4077089, "category_id": 44, "iscrowd": 0, "bbox": [177, 194, 15, 21], "area": 232}, {"id": 5855845, "category_id": 44, "iscrowd": 0, "bbox": [379, 178, 9, 18], "area": 83}, {"id": 9409437, "category_id": 47, "iscrowd": 0, "bbox": [192, 198, 11, 18], "area": 150}, {"id": 3108514, "category_id": 47, "iscrowd": 0, "bbox": [210, 200, 10, 16], "area": 157}, {"id": 8348187, "category_id": 51, "iscrowd": 0, "bbox": [472, 79, 38, 27], "area": 843}, {"id": 9270553, "category_id": 51, "iscrowd": 0, "bbox": [459, 106, 51, 18], "area": 723}, {"id": 10852508, "category_id": 62, "iscrowd": 0, "bbox": [495, 378, 100, 47], "area": 3991}, {"id": 2183490, "category_id": 64, "iscrowd": 0, "bbox": [366, 0, 157, 127], "area": 9493}, {"id": 7435392, "category_id": 78, "iscrowd": 0, "bbox": [356, 190, 48, 35], "area": 1289}, {"id": 12296587, "category_id": 79, "iscrowd": 0, "bbox": [345, 225, 55, 134], "area": 5424}, {"id": 6712694, "category_id": 81, "iscrowd": 0, "bbox": [268, 214, 78, 13], "area": 837}, {"id": 13221044, "category_id": 82, "iscrowd": 0, "bbox": [387, 121, 122, 301], "area": 27494}, {"id": 6911361, "category_id": 107, "iscrowd": 0, "bbox": [181, 200, 193, 35], "area": 2465}, {"id": 1651275, "category_id": 118, "iscrowd": 0, "bbox": [0, 272, 53, 154], "area": 6861}, {"id": 9083301, "category_id": 130, "iscrowd": 0, "bbox": [286, 13, 48, 51], "area": 949}, {"id": 3828585, "category_id": 168, "iscrowd": 0, "bbox": [344, 244, 10, 24], "area": 137}, {"id": 5594200, "category_id": 177, "iscrowd": 0, "bbox": [0, 79, 15, 232], "area": 2952}, {"id": 2050614, "category_id": 184, "iscrowd": 0, "bbox": [478, 0, 18, 2], "area": 31}, {"id": 5267827, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 478, 69], "area": 16087}, {"id": 1781068, "category_id": 188, "iscrowd": 0, "bbox": [138, 37, 296, 280], "area": 40396}, {"id": 8160405, "category_id": 190, "iscrowd": 0, "bbox": [174, 304, 268, 122], "area": 22445}, {"id": 7243209, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 93434}], "file_name": "000000407614.png", "image_id": 407614}, {"segments_info": [{"id": 3701626, "category_id": 1, "iscrowd": 0, "bbox": [74, 42, 339, 351], "area": 47273}, {"id": 10415076, "category_id": 37, "iscrowd": 0, "bbox": [460, 248, 29, 26], "area": 628}, {"id": 8230554, "category_id": 43, "iscrowd": 0, "bbox": [0, 247, 106, 73], "area": 2076}, {"id": 8630697, "category_id": 145, "iscrowd": 0, "bbox": [0, 126, 500, 274], "area": 89174}, {"id": 5389619, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 139], "area": 58902}], "file_name": "000000407646.png", "image_id": 407646}, {"segments_info": [{"id": 5516564, "category_id": 1, "iscrowd": 0, "bbox": [285, 212, 74, 81], "area": 2481}, {"id": 7102818, "category_id": 36, "iscrowd": 0, "bbox": [267, 278, 97, 25], "area": 527}, {"id": 9728856, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 186051}, {"id": 8679264, "category_id": 192, "iscrowd": 0, "bbox": [0, 203, 640, 225], "area": 84739}], "file_name": "000000407650.png", "image_id": 407650}, {"segments_info": [{"id": 11839406, "category_id": 16, "iscrowd": 0, "bbox": [92, 19, 105, 152], "area": 6976}, {"id": 4205867, "category_id": 51, "iscrowd": 0, "bbox": [413, 109, 86, 73], "area": 3218}, {"id": 4079529, "category_id": 53, "iscrowd": 0, "bbox": [106, 91, 298, 334], "area": 49964}, {"id": 3030602, "category_id": 64, "iscrowd": 0, "bbox": [287, 2, 212, 135], "area": 13349}, {"id": 7503520, "category_id": 85, "iscrowd": 0, "bbox": [159, 218, 194, 181], "area": 28043}, {"id": 9869222, "category_id": 189, "iscrowd": 0, "bbox": [0, 115, 499, 385], "area": 83694}, {"id": 14533820, "category_id": 195, "iscrowd": 0, "bbox": [27, 0, 225, 195], "area": 20768}, {"id": 6586501, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 441, 149], "area": 19421}], "file_name": "000000407825.png", "image_id": 407825}, {"segments_info": [{"id": 3880238, "category_id": 1, "iscrowd": 0, "bbox": [81, 262, 22, 39], "area": 439}, {"id": 6445397, "category_id": 1, "iscrowd": 0, "bbox": [203, 242, 45, 98], "area": 1837}, {"id": 3749444, "category_id": 1, "iscrowd": 0, "bbox": [380, 250, 13, 49], "area": 379}, {"id": 5262148, "category_id": 15, "iscrowd": 0, "bbox": [608, 256, 18, 10], "area": 133}, {"id": 5065798, "category_id": 15, "iscrowd": 0, "bbox": [579, 257, 18, 12], "area": 173}, {"id": 5197384, "category_id": 15, "iscrowd": 0, "bbox": [540, 258, 17, 12], "area": 118}, {"id": 10977647, "category_id": 34, "iscrowd": 0, "bbox": [50, 297, 8, 9], "area": 51}, {"id": 11573421, "category_id": 38, "iscrowd": 0, "bbox": [167, 139, 89, 74], "area": 4366}, {"id": 8814199, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 284], "area": 120474}, {"id": 16118769, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 576, 185], "area": 35938}, {"id": 5725783, "category_id": 191, "iscrowd": 0, "bbox": [0, 250, 627, 64], "area": 9655}, {"id": 4344648, "category_id": 193, "iscrowd": 0, "bbox": [0, 250, 640, 230], "area": 118925}, {"id": 5920595, "category_id": 197, "iscrowd": 0, "bbox": [0, 180, 487, 96], "area": 8726}], "file_name": "000000407868.png", "image_id": 407868}, {"segments_info": [{"id": 328965, "category_id": 1, "iscrowd": 0, "bbox": [336, 221, 164, 199], "area": 24231}, {"id": 197379, "category_id": 1, "iscrowd": 0, "bbox": [45, 231, 27, 27], "area": 280}, {"id": 394758, "category_id": 1, "iscrowd": 0, "bbox": [45, 215, 51, 93], "area": 2711}, {"id": 8092539, "category_id": 28, "iscrowd": 0, "bbox": [69, 0, 514, 425], "area": 167207}, {"id": 2894892, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 640, 141], "area": 3076}, {"id": 8487297, "category_id": 199, "iscrowd": 0, "bbox": [0, 36, 149, 215], "area": 12376}], "file_name": "000000407943.png", "image_id": 407943}, {"segments_info": [{"id": 2832729, "category_id": 17, "iscrowd": 0, "bbox": [55, 158, 299, 219], "area": 27351}, {"id": 1909552, "category_id": 51, "iscrowd": 0, "bbox": [198, 106, 85, 55], "area": 3597}, {"id": 4470580, "category_id": 79, "iscrowd": 0, "bbox": [372, 1, 268, 421], "area": 94910}, {"id": 6187661, "category_id": 118, "iscrowd": 0, "bbox": [0, 89, 488, 337], "area": 90637}, {"id": 2240844, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 421, 166], "area": 47621}, {"id": 131848, "category_id": 200, "iscrowd": 0, "bbox": [0, 137, 123, 58], "area": 4832}], "file_name": "000000407960.png", "image_id": 407960}, {"segments_info": [{"id": 2697771, "category_id": 1, "iscrowd": 0, "bbox": [551, 214, 10, 15], "area": 94}, {"id": 3092276, "category_id": 1, "iscrowd": 0, "bbox": [540, 216, 7, 17], "area": 93}, {"id": 3358018, "category_id": 1, "iscrowd": 0, "bbox": [570, 209, 9, 29], "area": 168}, {"id": 1316118, "category_id": 1, "iscrowd": 0, "bbox": [473, 223, 7, 15], "area": 66}, {"id": 4340540, "category_id": 1, "iscrowd": 0, "bbox": [419, 214, 5, 16], "area": 46}, {"id": 2500137, "category_id": 1, "iscrowd": 0, "bbox": [586, 209, 11, 24], "area": 136}, {"id": 2566187, "category_id": 1, "iscrowd": 0, "bbox": [498, 223, 10, 14], "area": 76}, {"id": 2499878, "category_id": 1, "iscrowd": 0, "bbox": [510, 224, 9, 12], "area": 75}, {"id": 4998980, "category_id": 5, "iscrowd": 0, "bbox": [416, 163, 224, 77], "area": 7324}, {"id": 4210245, "category_id": 5, "iscrowd": 0, "bbox": [1, 104, 411, 224], "area": 30726}, {"id": 12433327, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 207], "area": 120499}], "file_name": "000000408112.png", "image_id": 408112}, {"segments_info": [{"id": 9338027, "category_id": 1, "iscrowd": 0, "bbox": [285, 106, 33, 101], "area": 1894}, {"id": 6707020, "category_id": 3, "iscrowd": 0, "bbox": [346, 75, 44, 26], "area": 552}, {"id": 12037279, "category_id": 3, "iscrowd": 0, "bbox": [268, 74, 69, 29], "area": 942}, {"id": 5658452, "category_id": 3, "iscrowd": 0, "bbox": [243, 69, 14, 23], "area": 240}, {"id": 14463719, "category_id": 28, "iscrowd": 0, "bbox": [259, 86, 62, 56], "area": 1438}, {"id": 4275514, "category_id": 100, "iscrowd": 0, "bbox": [440, 114, 90, 130], "area": 6198}, {"id": 10326670, "category_id": 149, "iscrowd": 0, "bbox": [242, 84, 117, 38], "area": 1087}, {"id": 6974322, "category_id": 171, "iscrowd": 0, "bbox": [407, 0, 201, 255], "area": 30153}, {"id": 5140050, "category_id": 184, "iscrowd": 0, "bbox": [16, 0, 465, 297], "area": 60689}, {"id": 10395547, "category_id": 191, "iscrowd": 0, "bbox": [17, 114, 591, 313], "area": 136341}, {"id": 4803658, "category_id": 197, "iscrowd": 0, "bbox": [259, 0, 164, 104], "area": 7796}], "file_name": "000000408120.png", "image_id": 408120}, {"segments_info": [{"id": 1449001, "category_id": 1, "iscrowd": 0, "bbox": [452, 29, 56, 55], "area": 1750}, {"id": 3883592, "category_id": 1, "iscrowd": 0, "bbox": [411, 41, 226, 431], "area": 54157}, {"id": 1120539, "category_id": 1, "iscrowd": 0, "bbox": [427, 88, 23, 46], "area": 624}, {"id": 4606808, "category_id": 1, "iscrowd": 0, "bbox": [251, 43, 240, 418], "area": 49524}, {"id": 10462120, "category_id": 70, "iscrowd": 0, "bbox": [248, 274, 106, 143], "area": 9267}, {"id": 8686224, "category_id": 100, "iscrowd": 0, "bbox": [119, 282, 107, 198], "area": 13363}, {"id": 527902, "category_id": 112, "iscrowd": 0, "bbox": [515, 17, 43, 37], "area": 977}, {"id": 15721440, "category_id": 130, "iscrowd": 0, "bbox": [428, 59, 28, 10], "area": 222}, {"id": 2569550, "category_id": 177, "iscrowd": 0, "bbox": [106, 0, 534, 365], "area": 47635}, {"id": 4739161, "category_id": 190, "iscrowd": 0, "bbox": [184, 374, 456, 106], "area": 17079}, {"id": 6187377, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 458, 480], "area": 62028}, {"id": 1844801, "category_id": 200, "iscrowd": 0, "bbox": [417, 286, 223, 194], "area": 10407}], "file_name": "000000408696.png", "image_id": 408696}, {"segments_info": [{"id": 7573421, "category_id": 1, "iscrowd": 0, "bbox": [34, 135, 52, 83], "area": 1720}, {"id": 5530261, "category_id": 1, "iscrowd": 0, "bbox": [1, 109, 31, 221], "area": 5048}, {"id": 8360116, "category_id": 1, "iscrowd": 0, "bbox": [173, 124, 43, 88], "area": 1614}, {"id": 7837077, "category_id": 1, "iscrowd": 0, "bbox": [219, 162, 63, 20], "area": 560}, {"id": 4684735, "category_id": 40, "iscrowd": 0, "bbox": [166, 173, 11, 13], "area": 121}, {"id": 2973099, "category_id": 40, "iscrowd": 0, "bbox": [221, 175, 6, 5], "area": 19}, {"id": 6073280, "category_id": 145, "iscrowd": 0, "bbox": [0, 161, 500, 172], "area": 74933}, {"id": 6188109, "category_id": 151, "iscrowd": 0, "bbox": [170, 105, 12, 14], "area": 123}, {"id": 2175276, "category_id": 184, "iscrowd": 0, "bbox": [0, 11, 396, 119], "area": 15035}, {"id": 5134420, "category_id": 185, "iscrowd": 0, "bbox": [181, 48, 319, 84], "area": 19365}, {"id": 14339530, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 72], "area": 24877}, {"id": 9151584, "category_id": 199, "iscrowd": 0, "bbox": [12, 113, 488, 61], "area": 20618}], "file_name": "000000408774.png", "image_id": 408774}, {"segments_info": [{"id": 5066315, "category_id": 4, "iscrowd": 0, "bbox": [478, 3, 83, 61], "area": 3470}, {"id": 6776164, "category_id": 4, "iscrowd": 0, "bbox": [75, 38, 497, 378], "area": 116822}, {"id": 6909290, "category_id": 4, "iscrowd": 0, "bbox": [501, 1, 98, 29], "area": 1073}, {"id": 3882350, "category_id": 4, "iscrowd": 0, "bbox": [282, 2, 228, 106], "area": 12537}, {"id": 4814711, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 130502}], "file_name": "000000408830.png", "image_id": 408830}, {"segments_info": [{"id": 5067601, "category_id": 1, "iscrowd": 0, "bbox": [203, 38, 254, 346], "area": 32088}, {"id": 4606269, "category_id": 15, "iscrowd": 0, "bbox": [622, 63, 18, 13], "area": 155}, {"id": 3623228, "category_id": 15, "iscrowd": 0, "bbox": [198, 47, 29, 18], "area": 372}, {"id": 3684394, "category_id": 15, "iscrowd": 0, "bbox": [578, 63, 30, 13], "area": 203}, {"id": 3094314, "category_id": 15, "iscrowd": 0, "bbox": [381, 62, 26, 12], "area": 289}, {"id": 9537390, "category_id": 34, "iscrowd": 0, "bbox": [192, 174, 67, 66], "area": 2574}, {"id": 8491395, "category_id": 138, "iscrowd": 0, "bbox": [0, 0, 640, 121], "area": 26217}, {"id": 8299915, "category_id": 145, "iscrowd": 0, "bbox": [0, 63, 640, 364], "area": 180223}, {"id": 2837307, "category_id": 184, "iscrowd": 0, "bbox": [283, 0, 327, 66], "area": 7038}, {"id": 7305323, "category_id": 185, "iscrowd": 0, "bbox": [217, 46, 9, 17], "area": 10}, {"id": 5738616, "category_id": 193, "iscrowd": 0, "bbox": [174, 49, 466, 68], "area": 6094}], "file_name": "000000409198.png", "image_id": 409198}, {"segments_info": [{"id": 5200769, "category_id": 1, "iscrowd": 0, "bbox": [0, 137, 17, 53], "area": 328}, {"id": 8158346, "category_id": 1, "iscrowd": 0, "bbox": [71, 0, 69, 98], "area": 4123}, {"id": 10194835, "category_id": 1, "iscrowd": 0, "bbox": [0, 163, 49, 64], "area": 1453}, {"id": 5262706, "category_id": 1, "iscrowd": 0, "bbox": [9, 115, 49, 69], "area": 1709}, {"id": 3488400, "category_id": 1, "iscrowd": 0, "bbox": [177, 0, 45, 78], "area": 1573}, {"id": 6910333, "category_id": 1, "iscrowd": 0, "bbox": [4, 0, 67, 95], "area": 3664}, {"id": 9012883, "category_id": 1, "iscrowd": 0, "bbox": [122, 0, 47, 73], "area": 1543}, {"id": 8685952, "category_id": 1, "iscrowd": 0, "bbox": [105, 163, 41, 56], "area": 1133}, {"id": 7438153, "category_id": 1, "iscrowd": 0, "bbox": [54, 0, 42, 55], "area": 1657}, {"id": 5789353, "category_id": 1, "iscrowd": 0, "bbox": [268, 5, 112, 422], "area": 24946}, {"id": 1841758, "category_id": 1, "iscrowd": 0, "bbox": [365, 142, 48, 163], "area": 4509}, {"id": 5533078, "category_id": 1, "iscrowd": 0, "bbox": [136, 143, 53, 75], "area": 2403}, {"id": 9211739, "category_id": 1, "iscrowd": 0, "bbox": [32, 133, 89, 97], "area": 4100}, {"id": 6147534, "category_id": 37, "iscrowd": 0, "bbox": [176, 140, 18, 17], "area": 256}, {"id": 5009280, "category_id": 43, "iscrowd": 0, "bbox": [328, 11, 117, 70], "area": 3344}, {"id": 2831115, "category_id": 92, "iscrowd": 0, "bbox": [0, 216, 279, 90], "area": 20223}, {"id": 1449230, "category_id": 161, "iscrowd": 0, "bbox": [341, 252, 43, 43], "area": 746}, {"id": 9602679, "category_id": 168, "iscrowd": 0, "bbox": [16, 117, 428, 159], "area": 1275}, {"id": 7236710, "category_id": 185, "iscrowd": 0, "bbox": [384, 0, 74, 26], "area": 1217}, {"id": 3029262, "category_id": 199, "iscrowd": 0, "bbox": [0, 49, 640, 211], "area": 59605}], "file_name": "000000409211.png", "image_id": 409211}, {"segments_info": [{"id": 9016484, "category_id": 88, "iscrowd": 0, "bbox": [40, 13, 397, 599], "area": 152108}, {"id": 5928078, "category_id": 154, "iscrowd": 0, "bbox": [0, 0, 511, 640], "area": 174358}], "file_name": "000000409268.png", "image_id": 409268}, {"segments_info": [{"id": 5659501, "category_id": 70, "iscrowd": 0, "bbox": [76, 386, 233, 187], "area": 21012}, {"id": 10994642, "category_id": 81, "iscrowd": 0, "bbox": [311, 349, 300, 73], "area": 11119}, {"id": 3419202, "category_id": 133, "iscrowd": 0, "bbox": [233, 0, 379, 193], "area": 70866}, {"id": 6975874, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 191004}], "file_name": "000000409358.png", "image_id": 409358}, {"segments_info": [{"id": 4870842, "category_id": 53, "iscrowd": 0, "bbox": [315, 279, 100, 97], "area": 7341}, {"id": 7181006, "category_id": 53, "iscrowd": 0, "bbox": [59, 349, 80, 94], "area": 5691}, {"id": 1152200, "category_id": 55, "iscrowd": 0, "bbox": [43, 264, 79, 96], "area": 5498}, {"id": 2468582, "category_id": 55, "iscrowd": 0, "bbox": [259, 365, 137, 116], "area": 12537}, {"id": 1617626, "category_id": 55, "iscrowd": 0, "bbox": [394, 331, 68, 67], "area": 2438}, {"id": 2239312, "category_id": 67, "iscrowd": 0, "bbox": [2, 58, 478, 573], "area": 206608}, {"id": 7174791, "category_id": 109, "iscrowd": 0, "bbox": [416, 0, 64, 18], "area": 1070}, {"id": 460819, "category_id": 189, "iscrowd": 0, "bbox": [35, 276, 445, 364], "area": 4273}, {"id": 1119775, "category_id": 190, "iscrowd": 0, "bbox": [430, 232, 50, 40], "area": 710}, {"id": 592911, "category_id": 195, "iscrowd": 0, "bbox": [53, 0, 92, 72], "area": 2963}, {"id": 2766660, "category_id": 199, "iscrowd": 0, "bbox": [232, 0, 153, 106], "area": 8489}], "file_name": "000000409424.png", "image_id": 409424}, {"segments_info": [{"id": 2500651, "category_id": 1, "iscrowd": 0, "bbox": [352, 156, 225, 324], "area": 30419}, {"id": 6050124, "category_id": 1, "iscrowd": 0, "bbox": [128, 142, 172, 332], "area": 26471}, {"id": 14076605, "category_id": 159, "iscrowd": 0, "bbox": [0, 289, 640, 191], "area": 79735}, {"id": 13481111, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 516, 39], "area": 13971}, {"id": 13417644, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 326], "area": 155457}], "file_name": "000000409475.png", "image_id": 409475}, {"segments_info": [{"id": 6314065, "category_id": 1, "iscrowd": 0, "bbox": [407, 451, 21, 127], "area": 1022}, {"id": 6183515, "category_id": 1, "iscrowd": 0, "bbox": [376, 445, 38, 121], "area": 2863}, {"id": 6315614, "category_id": 1, "iscrowd": 0, "bbox": [70, 431, 75, 200], "area": 8889}, {"id": 5656438, "category_id": 1, "iscrowd": 0, "bbox": [38, 469, 38, 137], "area": 3099}, {"id": 4603192, "category_id": 1, "iscrowd": 0, "bbox": [258, 450, 48, 143], "area": 3581}, {"id": 7696246, "category_id": 1, "iscrowd": 0, "bbox": [305, 443, 52, 132], "area": 3362}, {"id": 13685191, "category_id": 85, "iscrowd": 0, "bbox": [184, 102, 86, 93], "area": 6215}, {"id": 12370355, "category_id": 85, "iscrowd": 0, "bbox": [135, 112, 31, 90], "area": 2036}, {"id": 9474963, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 428, 609], "area": 204172}, {"id": 9276554, "category_id": 191, "iscrowd": 0, "bbox": [0, 556, 428, 84], "area": 21528}], "file_name": "000000409542.png", "image_id": 409542}, {"segments_info": [{"id": 5328714, "category_id": 74, "iscrowd": 0, "bbox": [385, 147, 84, 127], "area": 8541}, {"id": 9805472, "category_id": 76, "iscrowd": 0, "bbox": [28, 137, 359, 152], "area": 43058}, {"id": 5922143, "category_id": 76, "iscrowd": 0, "bbox": [49, 0, 350, 121], "area": 35870}, {"id": 7566967, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 96118}], "file_name": "000000409630.png", "image_id": 409630}, {"segments_info": [{"id": 1185046, "category_id": 17, "iscrowd": 0, "bbox": [74, 495, 67, 109], "area": 4766}, {"id": 1448732, "category_id": 17, "iscrowd": 0, "bbox": [280, 489, 100, 128], "area": 8180}, {"id": 724497, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 428, 640], "area": 52890}, {"id": 4872027, "category_id": 181, "iscrowd": 0, "bbox": [32, 0, 359, 640], "area": 207955}], "file_name": "000000409867.png", "image_id": 409867}, {"segments_info": [{"id": 5257266, "category_id": 5, "iscrowd": 0, "bbox": [270, 139, 103, 116], "area": 3125}, {"id": 3219996, "category_id": 184, "iscrowd": 0, "bbox": [0, 208, 622, 413], "area": 36785}, {"id": 12943688, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 622, 616], "area": 340641}], "file_name": "000000410221.png", "image_id": 410221}, {"segments_info": [{"id": 13295079, "category_id": 20, "iscrowd": 0, "bbox": [362, 118, 11, 5], "area": 47}, {"id": 2501420, "category_id": 20, "iscrowd": 0, "bbox": [234, 196, 107, 138], "area": 7018}, {"id": 8959162, "category_id": 20, "iscrowd": 0, "bbox": [388, 106, 12, 10], "area": 96}, {"id": 11850726, "category_id": 20, "iscrowd": 0, "bbox": [403, 113, 5, 5], "area": 22}, {"id": 6911876, "category_id": 20, "iscrowd": 0, "bbox": [5, 161, 243, 245], "area": 34020}, {"id": 10535114, "category_id": 20, "iscrowd": 0, "bbox": [369, 111, 9, 9], "area": 59}, {"id": 10665416, "category_id": 20, "iscrowd": 0, "bbox": [20, 130, 12, 9], "area": 83}, {"id": 11651798, "category_id": 20, "iscrowd": 0, "bbox": [305, 134, 30, 30], "area": 588}, {"id": 7307924, "category_id": 20, "iscrowd": 0, "bbox": [333, 173, 159, 145], "area": 11643}, {"id": 9282991, "category_id": 20, "iscrowd": 0, "bbox": [210, 145, 12, 16], "area": 127}, {"id": 7570316, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 34957}, {"id": 15589331, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 511, 60], "area": 19580}, {"id": 7643302, "category_id": 192, "iscrowd": 0, "bbox": [0, 61, 640, 59], "area": 17947}, {"id": 3833461, "category_id": 193, "iscrowd": 0, "bbox": [0, 93, 640, 334], "area": 146393}], "file_name": "000000410428.png", "image_id": 410428}, {"segments_info": [{"id": 2173495, "category_id": 1, "iscrowd": 0, "bbox": [499, 161, 70, 178], "area": 5546}, {"id": 8095897, "category_id": 1, "iscrowd": 0, "bbox": [363, 236, 17, 30], "area": 266}, {"id": 2369073, "category_id": 1, "iscrowd": 0, "bbox": [173, 151, 93, 148], "area": 5207}, {"id": 1842726, "category_id": 1, "iscrowd": 0, "bbox": [380, 186, 75, 114], "area": 3679}, {"id": 2960949, "category_id": 1, "iscrowd": 0, "bbox": [113, 147, 87, 163], "area": 4807}, {"id": 5661056, "category_id": 1, "iscrowd": 0, "bbox": [314, 222, 24, 44], "area": 479}, {"id": 7497843, "category_id": 1, "iscrowd": 0, "bbox": [50, 119, 128, 203], "area": 8629}, {"id": 13270833, "category_id": 42, "iscrowd": 0, "bbox": [0, 316, 286, 18], "area": 4000}, {"id": 12423262, "category_id": 42, "iscrowd": 0, "bbox": [154, 291, 191, 20], "area": 1603}, {"id": 6502694, "category_id": 42, "iscrowd": 0, "bbox": [390, 297, 56, 17], "area": 673}, {"id": 9991268, "category_id": 42, "iscrowd": 0, "bbox": [514, 299, 60, 17], "area": 479}, {"id": 10858677, "category_id": 154, "iscrowd": 0, "bbox": [0, 225, 640, 255], "area": 122335}, {"id": 1587513, "category_id": 184, "iscrowd": 0, "bbox": [0, 120, 640, 146], "area": 30410}, {"id": 12620105, "category_id": 187, "iscrowd": 0, "bbox": [279, 0, 361, 39], "area": 7493}, {"id": 6447190, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 231], "area": 101520}], "file_name": "000000410456.png", "image_id": 410456}, {"segments_info": [{"id": 3622474, "category_id": 79, "iscrowd": 0, "bbox": [31, 0, 359, 374], "area": 110489}, {"id": 8289142, "category_id": 168, "iscrowd": 0, "bbox": [0, 48, 345, 426], "area": 29148}, {"id": 9673879, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 427, 313], "area": 31601}, {"id": 11255486, "category_id": 190, "iscrowd": 0, "bbox": [0, 295, 427, 345], "area": 88675}, {"id": 5325108, "category_id": 200, "iscrowd": 0, "bbox": [0, 321, 86, 211], "area": 12766}], "file_name": "000000410487.png", "image_id": 410487}, {"segments_info": [{"id": 6576470, "category_id": 1, "iscrowd": 0, "bbox": [124, 0, 73, 84], "area": 3597}, {"id": 7630197, "category_id": 1, "iscrowd": 0, "bbox": [9, 48, 73, 103], "area": 4209}, {"id": 4345954, "category_id": 1, "iscrowd": 0, "bbox": [0, 197, 44, 47], "area": 1222}, {"id": 7697526, "category_id": 1, "iscrowd": 0, "bbox": [82, 44, 54, 129], "area": 4492}, {"id": 7239815, "category_id": 1, "iscrowd": 0, "bbox": [35, 92, 224, 526], "area": 55100}, {"id": 5068903, "category_id": 1, "iscrowd": 0, "bbox": [255, 190, 50, 46], "area": 1495}, {"id": 7231566, "category_id": 1, "iscrowd": 0, "bbox": [233, 2, 68, 80], "area": 3409}, {"id": 5922146, "category_id": 1, "iscrowd": 0, "bbox": [304, 185, 64, 50], "area": 1793}, {"id": 2897736, "category_id": 1, "iscrowd": 0, "bbox": [302, 127, 79, 105], "area": 3277}, {"id": 6582396, "category_id": 1, "iscrowd": 0, "bbox": [242, 117, 69, 113], "area": 3623}, {"id": 2765373, "category_id": 1, "iscrowd": 0, "bbox": [1, 128, 48, 90], "area": 2647}, {"id": 5594987, "category_id": 1, "iscrowd": 0, "bbox": [305, 53, 46, 70], "area": 1771}, {"id": 7238004, "category_id": 1, "iscrowd": 0, "bbox": [196, 3, 72, 93], "area": 2681}, {"id": 4080982, "category_id": 1, "iscrowd": 1, "bbox": [15, 0, 409, 197], "area": 24086}, {"id": 5855323, "category_id": 43, "iscrowd": 0, "bbox": [19, 6, 82, 197], "area": 4977}, {"id": 9078395, "category_id": 62, "iscrowd": 0, "bbox": [218, 20, 19, 12], "area": 161}, {"id": 4608071, "category_id": 62, "iscrowd": 0, "bbox": [370, 39, 17, 20], "area": 151}, {"id": 1776922, "category_id": 62, "iscrowd": 0, "bbox": [300, 45, 13, 33], "area": 244}, {"id": 3226928, "category_id": 92, "iscrowd": 0, "bbox": [0, 198, 427, 194], "area": 44110}, {"id": 1987731, "category_id": 145, "iscrowd": 0, "bbox": [0, 354, 427, 286], "area": 89954}, {"id": 5266261, "category_id": 199, "iscrowd": 0, "bbox": [320, 0, 107, 170], "area": 5626}], "file_name": "000000410496.png", "image_id": 410496}, {"segments_info": [{"id": 10855328, "category_id": 1, "iscrowd": 0, "bbox": [249, 196, 92, 138], "area": 4597}, {"id": 5951154, "category_id": 37, "iscrowd": 0, "bbox": [296, 202, 9, 10], "area": 74}, {"id": 6651256, "category_id": 43, "iscrowd": 0, "bbox": [256, 183, 31, 32], "area": 286}, {"id": 8681051, "category_id": 92, "iscrowd": 0, "bbox": [157, 0, 184, 110], "area": 16181}, {"id": 5795406, "category_id": 145, "iscrowd": 0, "bbox": [0, 96, 640, 349], "area": 165339}, {"id": 1515045, "category_id": 185, "iscrowd": 0, "bbox": [0, 82, 629, 142], "area": 11568}, {"id": 1382156, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 630, 206], "area": 67165}], "file_name": "000000410510.png", "image_id": 410510}, {"segments_info": [{"id": 5394818, "category_id": 9, "iscrowd": 0, "bbox": [174, 194, 125, 48], "area": 3397}, {"id": 8290427, "category_id": 95, "iscrowd": 0, "bbox": [451, 161, 49, 37], "area": 877}, {"id": 8421497, "category_id": 128, "iscrowd": 0, "bbox": [37, 78, 463, 97], "area": 12966}, {"id": 8487280, "category_id": 148, "iscrowd": 0, "bbox": [0, 194, 500, 140], "area": 57496}, {"id": 7302757, "category_id": 151, "iscrowd": 0, "bbox": [466, 74, 34, 19], "area": 424}, {"id": 6976627, "category_id": 154, "iscrowd": 0, "bbox": [0, 195, 193, 32], "area": 2611}, {"id": 5987936, "category_id": 184, "iscrowd": 0, "bbox": [0, 25, 500, 160], "area": 39453}, {"id": 7830396, "category_id": 185, "iscrowd": 0, "bbox": [48, 154, 218, 29], "area": 2697}, {"id": 16579564, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 83], "area": 29676}, {"id": 4870481, "category_id": 194, "iscrowd": 0, "bbox": [0, 152, 500, 68], "area": 11276}, {"id": 6119256, "category_id": 197, "iscrowd": 0, "bbox": [402, 104, 16, 15], "area": 184}, {"id": 6319218, "category_id": 199, "iscrowd": 0, "bbox": [0, 179, 56, 22], "area": 784}], "file_name": "000000410612.png", "image_id": 410612}, {"segments_info": [{"id": 5265778, "category_id": 1, "iscrowd": 0, "bbox": [175, 144, 31, 37], "area": 501}, {"id": 8753318, "category_id": 1, "iscrowd": 0, "bbox": [104, 48, 32, 49], "area": 950}, {"id": 10657957, "category_id": 1, "iscrowd": 0, "bbox": [170, 89, 35, 45], "area": 683}, {"id": 10723497, "category_id": 1, "iscrowd": 0, "bbox": [190, 63, 51, 79], "area": 1523}, {"id": 4874123, "category_id": 1, "iscrowd": 0, "bbox": [160, 46, 23, 35], "area": 419}, {"id": 10656372, "category_id": 1, "iscrowd": 0, "bbox": [315, 101, 34, 55], "area": 1188}, {"id": 3883600, "category_id": 1, "iscrowd": 0, "bbox": [73, 141, 49, 41], "area": 911}, {"id": 4343892, "category_id": 1, "iscrowd": 0, "bbox": [117, 103, 31, 51], "area": 1045}, {"id": 9014956, "category_id": 1, "iscrowd": 0, "bbox": [121, 144, 29, 38], "area": 539}, {"id": 5723486, "category_id": 1, "iscrowd": 0, "bbox": [202, 108, 33, 35], "area": 531}, {"id": 10791095, "category_id": 1, "iscrowd": 0, "bbox": [172, 108, 30, 45], "area": 622}, {"id": 6384504, "category_id": 1, "iscrowd": 0, "bbox": [171, 113, 90, 268], "area": 8326}, {"id": 3883601, "category_id": 1, "iscrowd": 0, "bbox": [437, 126, 35, 30], "area": 556}, {"id": 6646907, "category_id": 1, "iscrowd": 1, "bbox": [5, 0, 635, 179], "area": 40911}, {"id": 4373685, "category_id": 37, "iscrowd": 0, "bbox": [304, 20, 9, 8], "area": 59}, {"id": 5329242, "category_id": 43, "iscrowd": 0, "bbox": [180, 126, 53, 51], "area": 472}, {"id": 7437136, "category_id": 62, "iscrowd": 0, "bbox": [570, 150, 31, 21], "area": 541}, {"id": 8094801, "category_id": 62, "iscrowd": 0, "bbox": [355, 111, 30, 22], "area": 514}, {"id": 7832139, "category_id": 62, "iscrowd": 0, "bbox": [557, 76, 23, 14], "area": 287}, {"id": 8095048, "category_id": 62, "iscrowd": 0, "bbox": [391, 38, 24, 5], "area": 119}, {"id": 8687207, "category_id": 62, "iscrowd": 0, "bbox": [540, 151, 27, 19], "area": 477}, {"id": 6976577, "category_id": 62, "iscrowd": 0, "bbox": [480, 76, 28, 30], "area": 504}, {"id": 7502920, "category_id": 62, "iscrowd": 0, "bbox": [494, 94, 36, 20], "area": 534}, {"id": 7963736, "category_id": 62, "iscrowd": 0, "bbox": [600, 151, 29, 18], "area": 455}, {"id": 7634763, "category_id": 62, "iscrowd": 0, "bbox": [531, 75, 30, 19], "area": 429}, {"id": 8226642, "category_id": 62, "iscrowd": 0, "bbox": [412, 112, 28, 19], "area": 473}, {"id": 7634250, "category_id": 62, "iscrowd": 0, "bbox": [519, 93, 31, 20], "area": 460}, {"id": 8226650, "category_id": 62, "iscrowd": 0, "bbox": [558, 131, 28, 15], "area": 376}, {"id": 7108174, "category_id": 62, "iscrowd": 0, "bbox": [586, 130, 30, 29], "area": 560}, {"id": 9411186, "category_id": 62, "iscrowd": 1, "bbox": [1, 3, 632, 166], "area": 4951}, {"id": 2378576, "category_id": 119, "iscrowd": 0, "bbox": [180, 171, 21, 18], "area": 156}, {"id": 2575772, "category_id": 145, "iscrowd": 0, "bbox": [0, 217, 640, 263], "area": 151776}, {"id": 3623014, "category_id": 161, "iscrowd": 0, "bbox": [223, 81, 271, 98], "area": 4270}, {"id": 2107443, "category_id": 185, "iscrowd": 0, "bbox": [232, 66, 53, 92], "area": 1562}, {"id": 3690069, "category_id": 193, "iscrowd": 0, "bbox": [0, 145, 640, 53], "area": 10826}, {"id": 10135958, "category_id": 199, "iscrowd": 0, "bbox": [0, 26, 640, 214], "area": 47097}], "file_name": "000000410650.png", "image_id": 410650}, {"segments_info": [{"id": 4553903, "category_id": 1, "iscrowd": 0, "bbox": [105, 409, 8, 9], "area": 40}, {"id": 3886452, "category_id": 3, "iscrowd": 0, "bbox": [508, 409, 37, 17], "area": 514}, {"id": 5598161, "category_id": 10, "iscrowd": 0, "bbox": [578, 344, 25, 31], "area": 693}, {"id": 3091828, "category_id": 10, "iscrowd": 0, "bbox": [532, 136, 23, 58], "area": 1079}, {"id": 8356307, "category_id": 10, "iscrowd": 0, "bbox": [479, 344, 7, 8], "area": 51}, {"id": 1383001, "category_id": 92, "iscrowd": 0, "bbox": [70, 253, 528, 173], "area": 2562}, {"id": 5074837, "category_id": 130, "iscrowd": 0, "bbox": [440, 276, 143, 123], "area": 4223}, {"id": 7574968, "category_id": 149, "iscrowd": 0, "bbox": [475, 384, 75, 42], "area": 1609}, {"id": 262, "category_id": 187, "iscrowd": 0, "bbox": [68, 0, 572, 291], "area": 31843}, {"id": 1780030, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 148395}], "file_name": "000000410712.png", "image_id": 410712}, {"segments_info": [{"id": 10135495, "category_id": 1, "iscrowd": 0, "bbox": [227, 209, 176, 284], "area": 13572}, {"id": 11784669, "category_id": 50, "iscrowd": 0, "bbox": [164, 229, 56, 25], "area": 476}, {"id": 6258865, "category_id": 51, "iscrowd": 0, "bbox": [235, 117, 385, 368], "area": 116165}, {"id": 4153493, "category_id": 51, "iscrowd": 0, "bbox": [38, 347, 187, 134], "area": 19792}, {"id": 3630473, "category_id": 51, "iscrowd": 0, "bbox": [45, 31, 152, 115], "area": 13202}, {"id": 4743839, "category_id": 51, "iscrowd": 0, "bbox": [26, 184, 196, 146], "area": 22746}, {"id": 6779510, "category_id": 189, "iscrowd": 0, "bbox": [17, 15, 596, 497], "area": 18279}], "file_name": "000000410735.png", "image_id": 410735}, {"segments_info": [{"id": 3553339, "category_id": 4, "iscrowd": 0, "bbox": [47, 35, 280, 382], "area": 69869}, {"id": 4423561, "category_id": 15, "iscrowd": 0, "bbox": [547, 151, 32, 13], "area": 158}, {"id": 3033676, "category_id": 15, "iscrowd": 0, "bbox": [361, 117, 36, 13], "area": 262}, {"id": 11254725, "category_id": 125, "iscrowd": 0, "bbox": [0, 167, 640, 260], "area": 90168}, {"id": 2502462, "category_id": 177, "iscrowd": 0, "bbox": [0, 77, 39, 278], "area": 6698}, {"id": 1843229, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 108], "area": 46715}, {"id": 5150619, "category_id": 193, "iscrowd": 0, "bbox": [9, 64, 631, 177], "area": 46083}, {"id": 5661542, "category_id": 198, "iscrowd": 0, "bbox": [294, 150, 346, 70], "area": 5726}], "file_name": "000000410878.png", "image_id": 410878}, {"segments_info": [{"id": 2832703, "category_id": 1, "iscrowd": 0, "bbox": [291, 31, 26, 97], "area": 1568}, {"id": 2173744, "category_id": 3, "iscrowd": 0, "bbox": [375, 67, 14, 13], "area": 145}, {"id": 7239283, "category_id": 3, "iscrowd": 0, "bbox": [103, 66, 36, 34], "area": 882}, {"id": 8753285, "category_id": 3, "iscrowd": 0, "bbox": [267, 63, 31, 23], "area": 501}, {"id": 6118484, "category_id": 15, "iscrowd": 0, "bbox": [1, 204, 76, 165], "area": 9456}, {"id": 8290639, "category_id": 37, "iscrowd": 0, "bbox": [125, 44, 35, 38], "area": 900}, {"id": 3562134, "category_id": 37, "iscrowd": 0, "bbox": [84, 40, 36, 36], "area": 1001}, {"id": 7971540, "category_id": 62, "iscrowd": 0, "bbox": [156, 220, 154, 130], "area": 1780}, {"id": 3754305, "category_id": 62, "iscrowd": 0, "bbox": [303, 184, 11, 27], "area": 180}, {"id": 9941197, "category_id": 88, "iscrowd": 0, "bbox": [88, 76, 232, 298], "area": 37650}, {"id": 6321530, "category_id": 112, "iscrowd": 0, "bbox": [166, 0, 334, 366], "area": 24764}, {"id": 1189163, "category_id": 119, "iscrowd": 0, "bbox": [344, 6, 48, 21], "area": 701}, {"id": 6520197, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 169, 187], "area": 12109}, {"id": 924206, "category_id": 188, "iscrowd": 0, "bbox": [337, 21, 149, 175], "area": 9164}, {"id": 2635334, "category_id": 190, "iscrowd": 0, "bbox": [335, 155, 142, 169], "area": 9232}, {"id": 6191234, "category_id": 191, "iscrowd": 0, "bbox": [68, 281, 432, 94], "area": 20207}, {"id": 7306864, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 34691}, {"id": 790547, "category_id": 200, "iscrowd": 0, "bbox": [330, 198, 150, 88], "area": 9376}], "file_name": "000000410880.png", "image_id": 410880}, {"segments_info": [{"id": 8752517, "category_id": 56, "iscrowd": 0, "bbox": [189, 139, 107, 108], "area": 8356}, {"id": 8293758, "category_id": 184, "iscrowd": 0, "bbox": [36, 0, 604, 480], "area": 256738}, {"id": 11708623, "category_id": 198, "iscrowd": 0, "bbox": [0, 376, 75, 104], "area": 4490}], "file_name": "000000410934.png", "image_id": 410934}, {"segments_info": [{"id": 3756627, "category_id": 1, "iscrowd": 0, "bbox": [425, 296, 17, 60], "area": 573}, {"id": 1644614, "category_id": 1, "iscrowd": 0, "bbox": [482, 291, 20, 51], "area": 566}, {"id": 1776411, "category_id": 1, "iscrowd": 0, "bbox": [627, 284, 13, 86], "area": 810}, {"id": 1841693, "category_id": 1, "iscrowd": 0, "bbox": [181, 213, 5, 21], "area": 69}, {"id": 2105649, "category_id": 1, "iscrowd": 0, "bbox": [496, 289, 9, 15], "area": 76}, {"id": 1973536, "category_id": 1, "iscrowd": 0, "bbox": [0, 279, 26, 145], "area": 715}, {"id": 3552826, "category_id": 1, "iscrowd": 0, "bbox": [334, 294, 12, 44], "area": 337}, {"id": 7704215, "category_id": 1, "iscrowd": 0, "bbox": [506, 296, 22, 80], "area": 792}, {"id": 2434342, "category_id": 1, "iscrowd": 0, "bbox": [368, 291, 14, 44], "area": 331}, {"id": 2106665, "category_id": 1, "iscrowd": 0, "bbox": [556, 292, 41, 100], "area": 2449}, {"id": 3095372, "category_id": 1, "iscrowd": 0, "bbox": [371, 293, 43, 61], "area": 974}, {"id": 2566436, "category_id": 1, "iscrowd": 0, "bbox": [427, 292, 80, 161], "area": 6279}, {"id": 1907485, "category_id": 1, "iscrowd": 0, "bbox": [519, 287, 53, 130], "area": 4206}, {"id": 4804431, "category_id": 1, "iscrowd": 1, "bbox": [400, 291, 210, 184], "area": 1184}, {"id": 8290439, "category_id": 27, "iscrowd": 0, "bbox": [585, 299, 15, 11], "area": 89}, {"id": 1710363, "category_id": 27, "iscrowd": 0, "bbox": [386, 300, 20, 19], "area": 210}, {"id": 7964307, "category_id": 35, "iscrowd": 0, "bbox": [556, 390, 42, 14], "area": 242}, {"id": 8027521, "category_id": 35, "iscrowd": 0, "bbox": [344, 307, 4, 30], "area": 36}, {"id": 6973551, "category_id": 35, "iscrowd": 0, "bbox": [523, 403, 40, 23], "area": 224}, {"id": 5130577, "category_id": 35, "iscrowd": 0, "bbox": [391, 435, 118, 34], "area": 706}, {"id": 5726047, "category_id": 35, "iscrowd": 0, "bbox": [381, 348, 24, 6], "area": 29}, {"id": 3485753, "category_id": 36, "iscrowd": 0, "bbox": [0, 290, 46, 91], "area": 1545}, {"id": 11842741, "category_id": 159, "iscrowd": 0, "bbox": [0, 105, 640, 375], "area": 156070}, {"id": 7303280, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 195], "area": 49521}, {"id": 9596752, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 114], "area": 42368}, {"id": 11184036, "category_id": 192, "iscrowd": 0, "bbox": [40, 68, 365, 62], "area": 4648}, {"id": 4606024, "category_id": 197, "iscrowd": 0, "bbox": [215, 152, 387, 189], "area": 26677}], "file_name": "000000411530.png", "image_id": 411530}, {"segments_info": [{"id": 10856365, "category_id": 17, "iscrowd": 0, "bbox": [313, 3, 326, 418], "area": 99908}, {"id": 8553349, "category_id": 17, "iscrowd": 0, "bbox": [42, 90, 281, 285], "area": 35158}, {"id": 5658198, "category_id": 133, "iscrowd": 0, "bbox": [27, 0, 338, 409], "area": 63322}], "file_name": "000000411665.png", "image_id": 411665}, {"segments_info": [{"id": 4144191, "category_id": 1, "iscrowd": 0, "bbox": [97, 70, 44, 66], "area": 1223}, {"id": 6644318, "category_id": 1, "iscrowd": 0, "bbox": [85, 66, 13, 42], "area": 344}, {"id": 5196112, "category_id": 1, "iscrowd": 0, "bbox": [72, 71, 7, 22], "area": 102}, {"id": 3223602, "category_id": 1, "iscrowd": 0, "bbox": [128, 62, 13, 28], "area": 207}, {"id": 3945900, "category_id": 1, "iscrowd": 0, "bbox": [35, 16, 255, 222], "area": 28040}, {"id": 5393226, "category_id": 27, "iscrowd": 0, "bbox": [1, 185, 53, 51], "area": 2062}, {"id": 2631477, "category_id": 62, "iscrowd": 0, "bbox": [281, 182, 39, 58], "area": 1561}, {"id": 3093583, "category_id": 77, "iscrowd": 0, "bbox": [54, 172, 47, 27], "area": 157}, {"id": 3619397, "category_id": 112, "iscrowd": 0, "bbox": [0, 41, 29, 85], "area": 1019}, {"id": 9273202, "category_id": 130, "iscrowd": 0, "bbox": [10, 9, 65, 45], "area": 526}, {"id": 8289657, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 147, 82], "area": 8430}, {"id": 10131603, "category_id": 190, "iscrowd": 0, "bbox": [0, 81, 129, 119], "area": 9607}, {"id": 10855851, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 320, 204], "area": 18460}], "file_name": "000000411754.png", "image_id": 411754}, {"segments_info": [{"id": 3425363, "category_id": 1, "iscrowd": 0, "bbox": [5, 71, 322, 423], "area": 62277}, {"id": 3885921, "category_id": 43, "iscrowd": 0, "bbox": [146, 35, 192, 385], "area": 34009}, {"id": 8034735, "category_id": 93, "iscrowd": 0, "bbox": [313, 306, 62, 194], "area": 9200}, {"id": 2565927, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 241, 368], "area": 41148}, {"id": 3290680, "category_id": 176, "iscrowd": 0, "bbox": [254, 166, 121, 159], "area": 11867}, {"id": 3356475, "category_id": 181, "iscrowd": 0, "bbox": [238, 0, 137, 170], "area": 10994}, {"id": 2829613, "category_id": 190, "iscrowd": 0, "bbox": [0, 336, 108, 138], "area": 10286}, {"id": 2961200, "category_id": 199, "iscrowd": 0, "bbox": [0, 223, 142, 159], "area": 4864}], "file_name": "000000411774.png", "image_id": 411774}, {"segments_info": [{"id": 2176051, "category_id": 1, "iscrowd": 0, "bbox": [543, 96, 41, 93], "area": 1934}, {"id": 1975090, "category_id": 1, "iscrowd": 0, "bbox": [347, 129, 47, 205], "area": 4417}, {"id": 3160668, "category_id": 1, "iscrowd": 0, "bbox": [626, 193, 14, 37], "area": 341}, {"id": 921622, "category_id": 1, "iscrowd": 0, "bbox": [543, 145, 80, 173], "area": 6270}, {"id": 1579288, "category_id": 1, "iscrowd": 0, "bbox": [580, 221, 60, 254], "area": 13091}, {"id": 2106678, "category_id": 1, "iscrowd": 0, "bbox": [571, 82, 66, 133], "area": 3699}, {"id": 4341562, "category_id": 1, "iscrowd": 0, "bbox": [380, 277, 74, 203], "area": 8440}, {"id": 5001315, "category_id": 1, "iscrowd": 0, "bbox": [444, 185, 142, 295], "area": 28733}, {"id": 4801331, "category_id": 72, "iscrowd": 0, "bbox": [624, 77, 16, 59], "area": 734}, {"id": 9340808, "category_id": 72, "iscrowd": 0, "bbox": [517, 74, 34, 59], "area": 1846}, {"id": 7631215, "category_id": 72, "iscrowd": 0, "bbox": [7, 90, 184, 178], "area": 25854}, {"id": 7960426, "category_id": 72, "iscrowd": 0, "bbox": [470, 77, 48, 75], "area": 3400}, {"id": 7038047, "category_id": 72, "iscrowd": 0, "bbox": [391, 78, 65, 99], "area": 5570}, {"id": 8619654, "category_id": 72, "iscrowd": 0, "bbox": [251, 83, 99, 125], "area": 10606}, {"id": 9936044, "category_id": 75, "iscrowd": 0, "bbox": [390, 352, 50, 27], "area": 569}, {"id": 4407616, "category_id": 77, "iscrowd": 0, "bbox": [565, 178, 14, 18], "area": 144}, {"id": 11648712, "category_id": 130, "iscrowd": 0, "bbox": [91, 15, 454, 64], "area": 5323}, {"id": 12302519, "category_id": 199, "iscrowd": 0, "bbox": [0, 84, 640, 396], "area": 20813}, {"id": 4471862, "category_id": 200, "iscrowd": 0, "bbox": [221, 280, 282, 200], "area": 17919}], "file_name": "000000411817.png", "image_id": 411817}, {"segments_info": [{"id": 3748919, "category_id": 1, "iscrowd": 0, "bbox": [2, 291, 35, 136], "area": 3728}, {"id": 5722714, "category_id": 1, "iscrowd": 0, "bbox": [156, 131, 89, 174], "area": 9447}, {"id": 5327483, "category_id": 1, "iscrowd": 0, "bbox": [168, 280, 96, 142], "area": 10259}, {"id": 10268896, "category_id": 1, "iscrowd": 0, "bbox": [55, 315, 136, 112], "area": 10677}, {"id": 5724251, "category_id": 1, "iscrowd": 0, "bbox": [388, 142, 136, 277], "area": 15979}, {"id": 7960928, "category_id": 1, "iscrowd": 0, "bbox": [264, 156, 155, 265], "area": 7299}, {"id": 8293277, "category_id": 1, "iscrowd": 0, "bbox": [364, 162, 40, 83], "area": 1986}, {"id": 5790559, "category_id": 2, "iscrowd": 0, "bbox": [230, 259, 34, 68], "area": 831}, {"id": 4933728, "category_id": 2, "iscrowd": 0, "bbox": [316, 310, 31, 106], "area": 871}, {"id": 5329242, "category_id": 2, "iscrowd": 0, "bbox": [294, 284, 120, 143], "area": 4829}, {"id": 5921112, "category_id": 2, "iscrowd": 0, "bbox": [427, 278, 179, 144], "area": 11339}, {"id": 6972771, "category_id": 2, "iscrowd": 0, "bbox": [165, 244, 74, 26], "area": 314}, {"id": 9534825, "category_id": 3, "iscrowd": 0, "bbox": [98, 176, 22, 14], "area": 234}, {"id": 5589563, "category_id": 4, "iscrowd": 0, "bbox": [598, 192, 39, 36], "area": 644}, {"id": 3949387, "category_id": 27, "iscrowd": 0, "bbox": [146, 230, 25, 42], "area": 734}, {"id": 4946863, "category_id": 47, "iscrowd": 0, "bbox": [119, 225, 30, 53], "area": 1116}, {"id": 6203096, "category_id": 88, "iscrowd": 0, "bbox": [245, 195, 126, 158], "area": 11571}, {"id": 8948366, "category_id": 149, "iscrowd": 0, "bbox": [17, 167, 623, 260], "area": 23928}, {"id": 5206110, "category_id": 184, "iscrowd": 0, "bbox": [14, 0, 626, 240], "area": 90553}, {"id": 10071729, "category_id": 185, "iscrowd": 0, "bbox": [186, 70, 294, 98], "area": 15561}, {"id": 14870243, "category_id": 187, "iscrowd": 0, "bbox": [31, 115, 22, 43], "area": 718}, {"id": 9146255, "category_id": 191, "iscrowd": 0, "bbox": [19, 186, 621, 170], "area": 15741}, {"id": 8553856, "category_id": 197, "iscrowd": 0, "bbox": [13, 102, 627, 170], "area": 5756}], "file_name": "000000411938.png", "image_id": 411938}, {"segments_info": [{"id": 526239, "category_id": 1, "iscrowd": 0, "bbox": [314, 288, 69, 87], "area": 2104}, {"id": 1521337, "category_id": 1, "iscrowd": 0, "bbox": [73, 54, 287, 321], "area": 45654}, {"id": 131366, "category_id": 32, "iscrowd": 0, "bbox": [183, 167, 55, 173], "area": 2605}, {"id": 11379426, "category_id": 130, "iscrowd": 0, "bbox": [26, 74, 386, 226], "area": 1027}, {"id": 328277, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 500, 68], "area": 26403}, {"id": 197481, "category_id": 199, "iscrowd": 0, "bbox": [0, 39, 500, 336], "area": 103184}], "file_name": "000000411953.png", "image_id": 411953}, {"segments_info": [{"id": 3619895, "category_id": 18, "iscrowd": 0, "bbox": [149, 47, 262, 245], "area": 22435}, {"id": 11515846, "category_id": 93, "iscrowd": 0, "bbox": [348, 55, 132, 30], "area": 1010}, {"id": 2106726, "category_id": 100, "iscrowd": 0, "bbox": [0, 67, 500, 230], "area": 52294}, {"id": 13487562, "category_id": 190, "iscrowd": 0, "bbox": [0, 265, 500, 110], "area": 44967}], "file_name": "000000412240.png", "image_id": 412240}, {"segments_info": [{"id": 6446952, "category_id": 1, "iscrowd": 0, "bbox": [77, 155, 130, 295], "area": 17125}, {"id": 4561025, "category_id": 37, "iscrowd": 0, "bbox": [166, 111, 14, 15], "area": 156}, {"id": 3355966, "category_id": 43, "iscrowd": 0, "bbox": [90, 150, 52, 57], "area": 897}, {"id": 6516333, "category_id": 145, "iscrowd": 0, "bbox": [0, 361, 333, 139], "area": 37084}, {"id": 1319197, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 333, 55], "area": 6100}, {"id": 1318430, "category_id": 185, "iscrowd": 0, "bbox": [63, 0, 236, 32], "area": 3985}, {"id": 3091748, "category_id": 199, "iscrowd": 0, "bbox": [0, 15, 333, 366], "area": 97111}], "file_name": "000000412286.png", "image_id": 412286}, {"segments_info": [{"id": 2370098, "category_id": 1, "iscrowd": 0, "bbox": [443, 72, 197, 419], "area": 56675}, {"id": 5725807, "category_id": 1, "iscrowd": 0, "bbox": [1, 122, 274, 370], "area": 71269}, {"id": 3948616, "category_id": 1, "iscrowd": 0, "bbox": [214, 107, 261, 387], "area": 59358}, {"id": 3158887, "category_id": 31, "iscrowd": 0, "bbox": [586, 444, 54, 55], "area": 1732}, {"id": 8766432, "category_id": 32, "iscrowd": 0, "bbox": [326, 240, 31, 152], "area": 3182}, {"id": 3950681, "category_id": 46, "iscrowd": 0, "bbox": [461, 364, 49, 114], "area": 1595}, {"id": 8355989, "category_id": 47, "iscrowd": 0, "bbox": [110, 416, 46, 75], "area": 2024}, {"id": 7111571, "category_id": 112, "iscrowd": 0, "bbox": [275, 17, 67, 205], "area": 6647}, {"id": 10212333, "category_id": 130, "iscrowd": 0, "bbox": [192, 25, 94, 120], "area": 5262}, {"id": 11583685, "category_id": 177, "iscrowd": 0, "bbox": [34, 0, 355, 265], "area": 15664}, {"id": 401724, "category_id": 181, "iscrowd": 0, "bbox": [253, 145, 30, 60], "area": 1205}, {"id": 4216682, "category_id": 186, "iscrowd": 0, "bbox": [161, 0, 183, 40], "area": 4254}, {"id": 6778497, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 499], "area": 79803}], "file_name": "000000412362.png", "image_id": 412362}, {"segments_info": [{"id": 5192752, "category_id": 3, "iscrowd": 0, "bbox": [406, 268, 85, 72], "area": 2436}, {"id": 7834239, "category_id": 3, "iscrowd": 0, "bbox": [334, 281, 55, 46], "area": 1216}, {"id": 10325897, "category_id": 3, "iscrowd": 0, "bbox": [455, 256, 181, 100], "area": 10038}, {"id": 4471089, "category_id": 14, "iscrowd": 0, "bbox": [67, 170, 64, 154], "area": 8305}, {"id": 2573385, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 437], "area": 170352}, {"id": 6841959, "category_id": 185, "iscrowd": 0, "bbox": [0, 48, 640, 350], "area": 59860}, {"id": 4408655, "category_id": 191, "iscrowd": 0, "bbox": [0, 436, 640, 44], "area": 16991}, {"id": 2304307, "category_id": 194, "iscrowd": 0, "bbox": [0, 368, 640, 112], "area": 33779}, {"id": 8813177, "category_id": 197, "iscrowd": 0, "bbox": [524, 52, 84, 75], "area": 798}], "file_name": "000000412531.png", "image_id": 412531}, {"segments_info": [{"id": 4477289, "category_id": 21, "iscrowd": 0, "bbox": [1, 103, 481, 529], "area": 193949}, {"id": 15987446, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 436, 415], "area": 34520}, {"id": 4281953, "category_id": 193, "iscrowd": 0, "bbox": [0, 381, 112, 259], "area": 13461}], "file_name": "000000412887.png", "image_id": 412887}, {"segments_info": [{"id": 1710363, "category_id": 1, "iscrowd": 0, "bbox": [361, 420, 14, 48], "area": 436}, {"id": 4668728, "category_id": 1, "iscrowd": 0, "bbox": [397, 411, 11, 30], "area": 165}, {"id": 856337, "category_id": 1, "iscrowd": 0, "bbox": [319, 524, 51, 116], "area": 3266}, {"id": 4539971, "category_id": 1, "iscrowd": 0, "bbox": [196, 489, 48, 130], "area": 3131}, {"id": 6774369, "category_id": 1, "iscrowd": 0, "bbox": [36, 488, 42, 50], "area": 1365}, {"id": 4213071, "category_id": 1, "iscrowd": 0, "bbox": [162, 523, 47, 117], "area": 3695}, {"id": 3947578, "category_id": 1, "iscrowd": 0, "bbox": [249, 436, 22, 61], "area": 710}, {"id": 1381907, "category_id": 1, "iscrowd": 0, "bbox": [102, 513, 52, 127], "area": 4422}, {"id": 2829870, "category_id": 1, "iscrowd": 0, "bbox": [269, 429, 15, 48], "area": 406}, {"id": 1053716, "category_id": 1, "iscrowd": 0, "bbox": [61, 469, 45, 71], "area": 1781}, {"id": 7236714, "category_id": 1, "iscrowd": 0, "bbox": [1, 537, 63, 103], "area": 4249}, {"id": 1579029, "category_id": 1, "iscrowd": 0, "bbox": [196, 430, 15, 55], "area": 469}, {"id": 4275245, "category_id": 1, "iscrowd": 0, "bbox": [360, 475, 58, 131], "area": 2353}, {"id": 2566956, "category_id": 1, "iscrowd": 1, "bbox": [0, 400, 427, 240], "area": 17846}, {"id": 1190221, "category_id": 10, "iscrowd": 0, "bbox": [302, 339, 61, 135], "area": 6965}, {"id": 1579030, "category_id": 27, "iscrowd": 0, "bbox": [360, 500, 16, 32], "area": 298}, {"id": 396041, "category_id": 27, "iscrowd": 0, "bbox": [272, 616, 31, 23], "area": 504}, {"id": 2960682, "category_id": 31, "iscrowd": 0, "bbox": [208, 505, 22, 32], "area": 133}, {"id": 2764077, "category_id": 31, "iscrowd": 0, "bbox": [168, 545, 9, 33], "area": 122}, {"id": 1709843, "category_id": 31, "iscrowd": 0, "bbox": [354, 546, 22, 42], "area": 400}, {"id": 3553850, "category_id": 149, "iscrowd": 0, "bbox": [48, 428, 379, 212], "area": 20214}, {"id": 1583144, "category_id": 184, "iscrowd": 0, "bbox": [356, 356, 38, 36], "area": 851}, {"id": 14801621, "category_id": 187, "iscrowd": 0, "bbox": [163, 0, 264, 225], "area": 36366}, {"id": 5461588, "category_id": 191, "iscrowd": 0, "bbox": [102, 508, 20, 13], "area": 142}, {"id": 5726049, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 427, 543], "area": 151179}], "file_name": "000000412894.png", "image_id": 412894}, {"segments_info": [{"id": 197380, "category_id": 27, "iscrowd": 0, "bbox": [436, 275, 204, 136], "area": 13534}, {"id": 4801080, "category_id": 44, "iscrowd": 0, "bbox": [392, 186, 47, 150], "area": 5139}, {"id": 2762768, "category_id": 73, "iscrowd": 0, "bbox": [1, 149, 317, 236], "area": 53661}, {"id": 3748916, "category_id": 74, "iscrowd": 0, "bbox": [248, 361, 73, 46], "area": 2399}, {"id": 3287328, "category_id": 84, "iscrowd": 0, "bbox": [447, 252, 187, 64], "area": 9624}, {"id": 792884, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 137, 306], "area": 30369}, {"id": 3293788, "category_id": 177, "iscrowd": 0, "bbox": [116, 0, 524, 286], "area": 50221}, {"id": 1975865, "category_id": 189, "iscrowd": 0, "bbox": [0, 273, 640, 153], "area": 33788}, {"id": 8025202, "category_id": 195, "iscrowd": 0, "bbox": [117, 26, 464, 388], "area": 41165}], "file_name": "000000413247.png", "image_id": 413247}, {"segments_info": [{"id": 11053231, "category_id": 1, "iscrowd": 0, "bbox": [321, 40, 319, 349], "area": 52794}, {"id": 3617838, "category_id": 17, "iscrowd": 0, "bbox": [141, 192, 246, 225], "area": 24016}, {"id": 6516847, "category_id": 17, "iscrowd": 0, "bbox": [31, 248, 163, 172], "area": 16780}, {"id": 13550781, "category_id": 46, "iscrowd": 0, "bbox": [415, 200, 44, 114], "area": 995}, {"id": 8820373, "category_id": 63, "iscrowd": 0, "bbox": [0, 177, 640, 120], "area": 18233}, {"id": 13615843, "category_id": 141, "iscrowd": 0, "bbox": [356, 288, 284, 133], "area": 18915}, {"id": 6908259, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 291], "area": 112108}], "file_name": "000000413395.png", "image_id": 413395}, {"segments_info": [{"id": 3288622, "category_id": 1, "iscrowd": 0, "bbox": [598, 236, 41, 187], "area": 5734}, {"id": 4147280, "category_id": 1, "iscrowd": 0, "bbox": [576, 250, 38, 158], "area": 1495}, {"id": 3685174, "category_id": 15, "iscrowd": 0, "bbox": [90, 300, 23, 38], "area": 384}, {"id": 5261382, "category_id": 15, "iscrowd": 0, "bbox": [382, 293, 74, 32], "area": 1354}, {"id": 5000005, "category_id": 15, "iscrowd": 0, "bbox": [193, 297, 125, 43], "area": 3197}, {"id": 1581374, "category_id": 15, "iscrowd": 0, "bbox": [411, 280, 51, 21], "area": 470}, {"id": 5523784, "category_id": 15, "iscrowd": 0, "bbox": [536, 291, 42, 5], "area": 189}, {"id": 4935239, "category_id": 15, "iscrowd": 0, "bbox": [461, 295, 118, 43], "area": 3167}, {"id": 2503466, "category_id": 16, "iscrowd": 0, "bbox": [135, 327, 9, 4], "area": 21}, {"id": 4145209, "category_id": 16, "iscrowd": 0, "bbox": [149, 327, 12, 4], "area": 28}, {"id": 3292465, "category_id": 16, "iscrowd": 0, "bbox": [168, 325, 9, 4], "area": 18}, {"id": 2371133, "category_id": 31, "iscrowd": 0, "bbox": [574, 272, 22, 60], "area": 454}, {"id": 4088157, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 148083}, {"id": 1447962, "category_id": 185, "iscrowd": 0, "bbox": [85, 272, 53, 37], "area": 1273}, {"id": 10328988, "category_id": 191, "iscrowd": 0, "bbox": [0, 306, 640, 121], "area": 53283}, {"id": 2975312, "category_id": 193, "iscrowd": 0, "bbox": [0, 301, 477, 38], "area": 3605}, {"id": 8224385, "category_id": 197, "iscrowd": 0, "bbox": [0, 170, 640, 149], "area": 27399}, {"id": 2040357, "category_id": 199, "iscrowd": 0, "bbox": [83, 241, 530, 84], "area": 16020}], "file_name": "000000413404.png", "image_id": 413404}, {"segments_info": [{"id": 7834794, "category_id": 1, "iscrowd": 0, "bbox": [93, 30, 333, 542], "area": 85130}, {"id": 5269631, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 426, 640], "area": 128274}, {"id": 11906210, "category_id": 90, "iscrowd": 0, "bbox": [205, 187, 21, 19], "area": 245}, {"id": 1788550, "category_id": 112, "iscrowd": 0, "bbox": [318, 0, 108, 379], "area": 32824}, {"id": 1728675, "category_id": 118, "iscrowd": 0, "bbox": [365, 374, 61, 67], "area": 2002}, {"id": 9217713, "category_id": 199, "iscrowd": 0, "bbox": [67, 0, 264, 277], "area": 22229}], "file_name": "000000413552.png", "image_id": 413552}, {"segments_info": [{"id": 6185323, "category_id": 1, "iscrowd": 0, "bbox": [391, 155, 6, 6], "area": 19}, {"id": 11054520, "category_id": 1, "iscrowd": 0, "bbox": [291, 156, 13, 31], "area": 157}, {"id": 6053990, "category_id": 1, "iscrowd": 0, "bbox": [130, 145, 12, 29], "area": 206}, {"id": 6780539, "category_id": 1, "iscrowd": 0, "bbox": [612, 152, 7, 26], "area": 149}, {"id": 5266028, "category_id": 1, "iscrowd": 0, "bbox": [274, 154, 13, 31], "area": 133}, {"id": 2631206, "category_id": 1, "iscrowd": 0, "bbox": [328, 156, 9, 25], "area": 163}, {"id": 2565930, "category_id": 1, "iscrowd": 0, "bbox": [443, 165, 51, 180], "area": 4164}, {"id": 4341049, "category_id": 1, "iscrowd": 0, "bbox": [368, 188, 58, 169], "area": 5309}, {"id": 6713716, "category_id": 2, "iscrowd": 0, "bbox": [127, 157, 18, 18], "area": 127}, {"id": 5197642, "category_id": 3, "iscrowd": 0, "bbox": [310, 158, 21, 17], "area": 284}, {"id": 3684663, "category_id": 3, "iscrowd": 0, "bbox": [1, 144, 53, 24], "area": 691}, {"id": 7829130, "category_id": 10, "iscrowd": 0, "bbox": [403, 112, 8, 17], "area": 128}, {"id": 9078938, "category_id": 10, "iscrowd": 0, "bbox": [311, 60, 35, 13], "area": 375}, {"id": 9671374, "category_id": 13, "iscrowd": 0, "bbox": [244, 136, 6, 6], "area": 24}, {"id": 7434353, "category_id": 28, "iscrowd": 0, "bbox": [329, 155, 95, 46], "area": 2348}, {"id": 8882314, "category_id": 28, "iscrowd": 0, "bbox": [436, 139, 87, 52], "area": 2291}, {"id": 4407869, "category_id": 31, "iscrowd": 0, "bbox": [354, 187, 136, 103], "area": 2488}, {"id": 10855065, "category_id": 95, "iscrowd": 0, "bbox": [0, 9, 222, 163], "area": 13901}, {"id": 6844538, "category_id": 112, "iscrowd": 0, "bbox": [527, 130, 34, 57], "area": 1315}, {"id": 7303024, "category_id": 149, "iscrowd": 0, "bbox": [0, 161, 640, 211], "area": 64645}, {"id": 7635589, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 171], "area": 7668}, {"id": 3683889, "category_id": 185, "iscrowd": 0, "bbox": [29, 249, 270, 146], "area": 26093}, {"id": 14472912, "category_id": 187, "iscrowd": 0, "bbox": [305, 0, 92, 91], "area": 2530}, {"id": 3552049, "category_id": 191, "iscrowd": 0, "bbox": [0, 152, 640, 274], "area": 53135}, {"id": 9015447, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 192], "area": 79918}], "file_name": "000000413689.png", "image_id": 413689}, {"segments_info": [{"id": 6514300, "category_id": 1, "iscrowd": 0, "bbox": [68, 1, 375, 474], "area": 111996}, {"id": 5804710, "category_id": 47, "iscrowd": 0, "bbox": [347, 228, 110, 124], "area": 7812}, {"id": 3556949, "category_id": 65, "iscrowd": 0, "bbox": [0, 157, 640, 323], "area": 86938}, {"id": 8946300, "category_id": 75, "iscrowd": 0, "bbox": [360, 74, 112, 161], "area": 5016}, {"id": 3687760, "category_id": 93, "iscrowd": 0, "bbox": [484, 475, 156, 5], "area": 472}, {"id": 3754588, "category_id": 141, "iscrowd": 0, "bbox": [0, 214, 4, 109], "area": 274}, {"id": 7174006, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 320], "area": 86710}], "file_name": "000000414034.png", "image_id": 414034}, {"segments_info": [{"id": 4866356, "category_id": 3, "iscrowd": 0, "bbox": [200, 212, 56, 33], "area": 970}, {"id": 7894361, "category_id": 3, "iscrowd": 0, "bbox": [69, 221, 22, 5], "area": 56}, {"id": 5192753, "category_id": 3, "iscrowd": 0, "bbox": [47, 222, 21, 13], "area": 204}, {"id": 6711910, "category_id": 3, "iscrowd": 0, "bbox": [466, 199, 174, 139], "area": 15928}, {"id": 7038048, "category_id": 3, "iscrowd": 0, "bbox": [13, 226, 44, 21], "area": 677}, {"id": 7381409, "category_id": 11, "iscrowd": 0, "bbox": [88, 227, 5, 7], "area": 24}, {"id": 5137650, "category_id": 13, "iscrowd": 0, "bbox": [294, 208, 82, 80], "area": 5112}, {"id": 6186082, "category_id": 128, "iscrowd": 0, "bbox": [54, 193, 586, 47], "area": 8400}, {"id": 6119262, "category_id": 149, "iscrowd": 0, "bbox": [0, 230, 640, 250], "area": 60242}, {"id": 10790835, "category_id": 151, "iscrowd": 0, "bbox": [51, 152, 589, 62], "area": 15732}, {"id": 4086865, "category_id": 184, "iscrowd": 0, "bbox": [0, 116, 640, 213], "area": 21134}, {"id": 14720341, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 204], "area": 99083}, {"id": 7568251, "category_id": 191, "iscrowd": 0, "bbox": [146, 281, 494, 190], "area": 23660}, {"id": 4487278, "category_id": 193, "iscrowd": 0, "bbox": [123, 231, 517, 205], "area": 34621}, {"id": 14672863, "category_id": 197, "iscrowd": 0, "bbox": [151, 146, 14, 21], "area": 261}, {"id": 6385517, "category_id": 199, "iscrowd": 0, "bbox": [372, 228, 83, 136], "area": 8667}], "file_name": "000000414133.png", "image_id": 414133}, {"segments_info": [{"id": 4866088, "category_id": 1, "iscrowd": 0, "bbox": [223, 276, 85, 192], "area": 8626}, {"id": 5919828, "category_id": 1, "iscrowd": 0, "bbox": [129, 274, 65, 127], "area": 3451}, {"id": 4339504, "category_id": 1, "iscrowd": 0, "bbox": [210, 166, 19, 53], "area": 592}, {"id": 3091499, "category_id": 27, "iscrowd": 0, "bbox": [142, 289, 30, 32], "area": 228}, {"id": 8620940, "category_id": 35, "iscrowd": 0, "bbox": [255, 461, 51, 32], "area": 407}, {"id": 8619140, "category_id": 35, "iscrowd": 0, "bbox": [142, 398, 48, 12], "area": 70}, {"id": 8222324, "category_id": 35, "iscrowd": 0, "bbox": [214, 217, 10, 4], "area": 18}, {"id": 11973039, "category_id": 159, "iscrowd": 0, "bbox": [0, 133, 425, 507], "area": 155065}, {"id": 3359297, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 425, 328], "area": 103260}], "file_name": "000000414170.png", "image_id": 414170}, {"segments_info": [{"id": 3684653, "category_id": 23, "iscrowd": 0, "bbox": [391, 10, 249, 383], "area": 72076}, {"id": 4868160, "category_id": 23, "iscrowd": 0, "bbox": [153, 65, 280, 263], "area": 40356}, {"id": 7437146, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 236], "area": 73785}, {"id": 13095120, "category_id": 198, "iscrowd": 0, "bbox": [0, 217, 640, 210], "area": 82717}], "file_name": "000000414261.png", "image_id": 414261}, {"segments_info": [{"id": 6190454, "category_id": 85, "iscrowd": 0, "bbox": [305, 166, 39, 38], "area": 1088}, {"id": 10070695, "category_id": 149, "iscrowd": 0, "bbox": [0, 512, 427, 128], "area": 30535}, {"id": 3624269, "category_id": 161, "iscrowd": 0, "bbox": [132, 473, 69, 59], "area": 1865}, {"id": 5795446, "category_id": 171, "iscrowd": 0, "bbox": [403, 587, 24, 24], "area": 335}, {"id": 1387817, "category_id": 184, "iscrowd": 0, "bbox": [0, 150, 412, 417], "area": 78207}, {"id": 15059128, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 333], "area": 98386}, {"id": 6717318, "category_id": 191, "iscrowd": 0, "bbox": [77, 510, 350, 117], "area": 6568}, {"id": 2713448, "category_id": 193, "iscrowd": 0, "bbox": [134, 371, 102, 107], "area": 2399}, {"id": 3295052, "category_id": 197, "iscrowd": 0, "bbox": [45, 40, 382, 562], "area": 52720}], "file_name": "000000414340.png", "image_id": 414340}, {"segments_info": [{"id": 5791092, "category_id": 1, "iscrowd": 0, "bbox": [400, 252, 67, 117], "area": 2837}, {"id": 5854062, "category_id": 3, "iscrowd": 0, "bbox": [211, 287, 4, 4], "area": 13}, {"id": 7038058, "category_id": 3, "iscrowd": 0, "bbox": [124, 281, 24, 21], "area": 341}, {"id": 8683135, "category_id": 3, "iscrowd": 0, "bbox": [0, 274, 75, 43], "area": 2804}, {"id": 6445916, "category_id": 3, "iscrowd": 0, "bbox": [152, 276, 68, 50], "area": 2867}, {"id": 7170932, "category_id": 3, "iscrowd": 0, "bbox": [148, 281, 11, 12], "area": 74}, {"id": 5920094, "category_id": 3, "iscrowd": 0, "bbox": [96, 280, 33, 25], "area": 595}, {"id": 9143436, "category_id": 3, "iscrowd": 0, "bbox": [128, 280, 24, 19], "area": 131}, {"id": 5068392, "category_id": 41, "iscrowd": 0, "bbox": [429, 365, 44, 20], "area": 413}, {"id": 8488344, "category_id": 95, "iscrowd": 0, "bbox": [137, 272, 133, 19], "area": 1147}, {"id": 8292245, "category_id": 149, "iscrowd": 0, "bbox": [0, 283, 486, 116], "area": 27742}, {"id": 7705519, "category_id": 184, "iscrowd": 0, "bbox": [356, 306, 38, 24], "area": 670}, {"id": 9672865, "category_id": 185, "iscrowd": 0, "bbox": [67, 287, 43, 22], "area": 480}, {"id": 15059639, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 284], "area": 167337}, {"id": 13228774, "category_id": 191, "iscrowd": 0, "bbox": [312, 306, 285, 91], "area": 5980}, {"id": 8760267, "category_id": 192, "iscrowd": 0, "bbox": [0, 232, 640, 82], "area": 19149}, {"id": 7377846, "category_id": 193, "iscrowd": 0, "bbox": [337, 292, 303, 111], "area": 13147}], "file_name": "000000414385.png", "image_id": 414385}, {"segments_info": [{"id": 7167579, "category_id": 1, "iscrowd": 0, "bbox": [193, 187, 57, 89], "area": 1636}, {"id": 6973804, "category_id": 1, "iscrowd": 0, "bbox": [116, 247, 87, 159], "area": 6746}, {"id": 8817303, "category_id": 1, "iscrowd": 0, "bbox": [55, 267, 79, 121], "area": 850}, {"id": 6907493, "category_id": 2, "iscrowd": 0, "bbox": [147, 392, 278, 91], "area": 14103}, {"id": 6642787, "category_id": 3, "iscrowd": 0, "bbox": [196, 194, 185, 94], "area": 11203}, {"id": 3486251, "category_id": 3, "iscrowd": 0, "bbox": [14, 194, 14, 11], "area": 90}, {"id": 5726606, "category_id": 3, "iscrowd": 0, "bbox": [170, 164, 68, 73], "area": 2982}, {"id": 3287393, "category_id": 3, "iscrowd": 0, "bbox": [46, 197, 60, 44], "area": 2066}, {"id": 6575058, "category_id": 8, "iscrowd": 0, "bbox": [223, 31, 257, 254], "area": 37297}, {"id": 5261120, "category_id": 27, "iscrowd": 0, "bbox": [92, 307, 25, 86], "area": 816}, {"id": 6643803, "category_id": 27, "iscrowd": 0, "bbox": [100, 321, 60, 62], "area": 2796}, {"id": 7431787, "category_id": 77, "iscrowd": 0, "bbox": [146, 265, 9, 10], "area": 40}, {"id": 6118236, "category_id": 149, "iscrowd": 0, "bbox": [0, 197, 480, 241], "area": 45511}, {"id": 4871745, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 276, 217], "area": 30765}, {"id": 15580807, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 140], "area": 29618}, {"id": 9606292, "category_id": 191, "iscrowd": 0, "bbox": [0, 195, 480, 445], "area": 115023}, {"id": 9080718, "category_id": 197, "iscrowd": 0, "bbox": [178, 143, 18, 38], "area": 461}], "file_name": "000000414510.png", "image_id": 414510}, {"segments_info": [{"id": 5725546, "category_id": 47, "iscrowd": 0, "bbox": [24, 0, 202, 191], "area": 28177}, {"id": 7834786, "category_id": 48, "iscrowd": 0, "bbox": [535, 263, 73, 341], "area": 11060}, {"id": 9413812, "category_id": 49, "iscrowd": 0, "bbox": [492, 266, 55, 346], "area": 9188}, {"id": 10666961, "category_id": 54, "iscrowd": 0, "bbox": [297, 240, 175, 247], "area": 24603}, {"id": 9747919, "category_id": 54, "iscrowd": 0, "bbox": [107, 201, 227, 151], "area": 22235}, {"id": 3825819, "category_id": 67, "iscrowd": 0, "bbox": [0, 2, 612, 600], "area": 130761}, {"id": 4346497, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 9823}, {"id": 10072766, "category_id": 195, "iscrowd": 0, "bbox": [393, 268, 219, 344], "area": 35138}], "file_name": "000000414638.png", "image_id": 414638}, {"segments_info": [{"id": 8880254, "category_id": 1, "iscrowd": 0, "bbox": [0, 86, 21, 50], "area": 575}, {"id": 5131601, "category_id": 1, "iscrowd": 0, "bbox": [154, 94, 47, 86], "area": 1963}, {"id": 5720668, "category_id": 1, "iscrowd": 0, "bbox": [290, 63, 52, 122], "area": 3351}, {"id": 7828826, "category_id": 1, "iscrowd": 0, "bbox": [452, 119, 48, 126], "area": 2408}, {"id": 6912353, "category_id": 1, "iscrowd": 0, "bbox": [80, 94, 36, 94], "area": 2064}, {"id": 9472657, "category_id": 1, "iscrowd": 0, "bbox": [415, 111, 33, 34], "area": 588}, {"id": 8158851, "category_id": 1, "iscrowd": 0, "bbox": [188, 94, 29, 58], "area": 716}, {"id": 6976099, "category_id": 1, "iscrowd": 0, "bbox": [130, 139, 35, 40], "area": 738}, {"id": 5065807, "category_id": 1, "iscrowd": 0, "bbox": [245, 107, 34, 50], "area": 879}, {"id": 6318688, "category_id": 1, "iscrowd": 0, "bbox": [110, 91, 40, 51], "area": 946}, {"id": 7822410, "category_id": 1, "iscrowd": 0, "bbox": [161, 129, 89, 125], "area": 4292}, {"id": 5528419, "category_id": 1, "iscrowd": 0, "bbox": [39, 86, 32, 55], "area": 1024}, {"id": 8229223, "category_id": 1, "iscrowd": 0, "bbox": [463, 265, 36, 63], "area": 1558}, {"id": 6851707, "category_id": 1, "iscrowd": 1, "bbox": [60, 0, 440, 332], "area": 32628}, {"id": 10335148, "category_id": 37, "iscrowd": 0, "bbox": [253, 215, 10, 9], "area": 74}, {"id": 10463904, "category_id": 39, "iscrowd": 0, "bbox": [339, 290, 69, 17], "area": 355}, {"id": 6908005, "category_id": 39, "iscrowd": 0, "bbox": [131, 170, 35, 22], "area": 172}, {"id": 5201520, "category_id": 40, "iscrowd": 0, "bbox": [468, 180, 20, 14], "area": 204}, {"id": 3819338, "category_id": 40, "iscrowd": 0, "bbox": [91, 137, 13, 18], "area": 155}, {"id": 10314315, "category_id": 62, "iscrowd": 0, "bbox": [469, 109, 23, 17], "area": 223}, {"id": 4744274, "category_id": 62, "iscrowd": 0, "bbox": [2, 98, 26, 39], "area": 450}, {"id": 8556926, "category_id": 62, "iscrowd": 0, "bbox": [192, 104, 30, 44], "area": 161}, {"id": 3685170, "category_id": 62, "iscrowd": 0, "bbox": [330, 115, 13, 33], "area": 117}, {"id": 6131575, "category_id": 62, "iscrowd": 0, "bbox": [111, 101, 32, 45], "area": 364}, {"id": 5926238, "category_id": 62, "iscrowd": 0, "bbox": [37, 101, 41, 39], "area": 374}, {"id": 3356714, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 92], "area": 21726}, {"id": 5477501, "category_id": 193, "iscrowd": 0, "bbox": [0, 14, 500, 318], "area": 69743}], "file_name": "000000414673.png", "image_id": 414673}, {"segments_info": [{"id": 8816003, "category_id": 85, "iscrowd": 0, "bbox": [103, 156, 40, 29], "area": 580}, {"id": 11122110, "category_id": 85, "iscrowd": 0, "bbox": [187, 171, 24, 49], "area": 410}, {"id": 7704977, "category_id": 184, "iscrowd": 0, "bbox": [365, 0, 58, 306], "area": 5105}, {"id": 13681337, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 423, 489], "area": 116364}, {"id": 7115437, "category_id": 197, "iscrowd": 0, "bbox": [0, 91, 423, 549], "area": 139903}], "file_name": "000000414676.png", "image_id": 414676}, {"segments_info": [{"id": 7106438, "category_id": 1, "iscrowd": 0, "bbox": [96, 142, 43, 74], "area": 1263}, {"id": 4474982, "category_id": 1, "iscrowd": 0, "bbox": [54, 414, 61, 61], "area": 2376}, {"id": 3944340, "category_id": 1, "iscrowd": 0, "bbox": [347, 367, 91, 113], "area": 6689}, {"id": 6511971, "category_id": 1, "iscrowd": 0, "bbox": [536, 401, 88, 79], "area": 4812}, {"id": 9208724, "category_id": 1, "iscrowd": 0, "bbox": [109, 411, 99, 69], "area": 4260}, {"id": 9537692, "category_id": 1, "iscrowd": 0, "bbox": [220, 345, 120, 130], "area": 8913}, {"id": 3487819, "category_id": 1, "iscrowd": 0, "bbox": [480, 458, 36, 22], "area": 600}, {"id": 4676208, "category_id": 22, "iscrowd": 0, "bbox": [253, 241, 173, 88], "area": 10422}, {"id": 4807281, "category_id": 22, "iscrowd": 0, "bbox": [427, 138, 116, 54], "area": 3673}, {"id": 4478316, "category_id": 22, "iscrowd": 0, "bbox": [419, 391, 104, 78], "area": 5229}, {"id": 4214110, "category_id": 22, "iscrowd": 0, "bbox": [420, 288, 187, 119], "area": 12462}, {"id": 5270411, "category_id": 22, "iscrowd": 0, "bbox": [77, 265, 212, 102], "area": 12683}, {"id": 6257819, "category_id": 22, "iscrowd": 0, "bbox": [271, 313, 157, 94], "area": 5175}, {"id": 7046048, "category_id": 22, "iscrowd": 0, "bbox": [131, 190, 147, 80], "area": 4766}, {"id": 5266800, "category_id": 22, "iscrowd": 0, "bbox": [337, 94, 72, 55], "area": 2682}, {"id": 4608613, "category_id": 22, "iscrowd": 0, "bbox": [618, 154, 22, 37], "area": 564}, {"id": 5989751, "category_id": 22, "iscrowd": 0, "bbox": [442, 46, 50, 45], "area": 1127}, {"id": 4939639, "category_id": 22, "iscrowd": 0, "bbox": [1, 360, 196, 76], "area": 9198}, {"id": 6913943, "category_id": 22, "iscrowd": 0, "bbox": [330, 217, 158, 76], "area": 6026}, {"id": 6318976, "category_id": 22, "iscrowd": 0, "bbox": [387, 63, 32, 23], "area": 441}, {"id": 6846348, "category_id": 22, "iscrowd": 1, "bbox": [1, 0, 639, 480], "area": 85842}, {"id": 11645621, "category_id": 148, "iscrowd": 0, "bbox": [0, 0, 640, 231], "area": 85730}, {"id": 6056576, "category_id": 190, "iscrowd": 0, "bbox": [0, 448, 73, 32], "area": 1727}, {"id": 4873851, "category_id": 194, "iscrowd": 0, "bbox": [282, 441, 358, 39], "area": 1352}, {"id": 9676485, "category_id": 198, "iscrowd": 0, "bbox": [0, 160, 189, 202], "area": 19931}], "file_name": "000000414795.png", "image_id": 414795}, {"segments_info": [{"id": 2963260, "category_id": 47, "iscrowd": 0, "bbox": [172, 95, 10, 17], "area": 129}, {"id": 1250069, "category_id": 47, "iscrowd": 0, "bbox": [185, 97, 9, 14], "area": 107}, {"id": 8754066, "category_id": 50, "iscrowd": 0, "bbox": [192, 199, 14, 12], "area": 23}, {"id": 2704743, "category_id": 51, "iscrowd": 0, "bbox": [156, 209, 41, 25], "area": 647}, {"id": 6716826, "category_id": 51, "iscrowd": 0, "bbox": [502, 194, 63, 31], "area": 1307}, {"id": 4423314, "category_id": 52, "iscrowd": 0, "bbox": [539, 201, 23, 6], "area": 92}, {"id": 9081501, "category_id": 62, "iscrowd": 0, "bbox": [217, 203, 127, 206], "area": 11029}, {"id": 10266029, "category_id": 62, "iscrowd": 0, "bbox": [65, 196, 47, 37], "area": 1087}, {"id": 8690093, "category_id": 67, "iscrowd": 0, "bbox": [41, 221, 211, 35], "area": 3232}, {"id": 11909054, "category_id": 81, "iscrowd": 0, "bbox": [468, 213, 172, 66], "area": 4945}, {"id": 10327962, "category_id": 82, "iscrowd": 0, "bbox": [0, 136, 73, 147], "area": 9221}, {"id": 10592909, "category_id": 109, "iscrowd": 0, "bbox": [586, 0, 42, 145], "area": 3403}, {"id": 13159637, "category_id": 130, "iscrowd": 0, "bbox": [514, 10, 47, 64], "area": 1494}, {"id": 11843261, "category_id": 168, "iscrowd": 0, "bbox": [465, 260, 22, 67], "area": 946}, {"id": 5397840, "category_id": 176, "iscrowd": 0, "bbox": [0, 128, 640, 304], "area": 36811}, {"id": 10919531, "category_id": 181, "iscrowd": 0, "bbox": [620, 0, 20, 144], "area": 2329}, {"id": 8358553, "category_id": 188, "iscrowd": 0, "bbox": [87, 67, 185, 237], "area": 24065}, {"id": 4346206, "category_id": 189, "iscrowd": 0, "bbox": [35, 230, 222, 180], "area": 9983}, {"id": 6054765, "category_id": 190, "iscrowd": 0, "bbox": [0, 275, 640, 205], "area": 90382}, {"id": 8424863, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 607, 167], "area": 72590}], "file_name": "000000415194.png", "image_id": 415194}, {"segments_info": [{"id": 1259915, "category_id": 62, "iscrowd": 0, "bbox": [449, 282, 74, 62], "area": 3196}, {"id": 1397617, "category_id": 62, "iscrowd": 0, "bbox": [225, 367, 176, 101], "area": 16478}, {"id": 1453914, "category_id": 64, "iscrowd": 0, "bbox": [216, 6, 182, 352], "area": 33415}, {"id": 1266004, "category_id": 189, "iscrowd": 0, "bbox": [38, 307, 503, 167], "area": 56309}, {"id": 1253505, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 474], "area": 193469}], "file_name": "000000415238.png", "image_id": 415238}, {"segments_info": [{"id": 6115657, "category_id": 1, "iscrowd": 0, "bbox": [277, 226, 25, 24], "area": 352}, {"id": 3817550, "category_id": 6, "iscrowd": 0, "bbox": [259, 174, 123, 143], "area": 14944}, {"id": 8485250, "category_id": 149, "iscrowd": 0, "bbox": [0, 301, 416, 179], "area": 67015}, {"id": 2700076, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 224831}], "file_name": "000000415536.png", "image_id": 415536}, {"segments_info": [{"id": 1780285, "category_id": 62, "iscrowd": 0, "bbox": [0, 331, 94, 77], "area": 4411}, {"id": 1119780, "category_id": 62, "iscrowd": 0, "bbox": [363, 283, 186, 196], "area": 23839}, {"id": 2969456, "category_id": 63, "iscrowd": 0, "bbox": [0, 379, 239, 94], "area": 14833}, {"id": 3030611, "category_id": 73, "iscrowd": 0, "bbox": [152, 264, 58, 19], "area": 722}, {"id": 922401, "category_id": 74, "iscrowd": 0, "bbox": [207, 276, 20, 8], "area": 129}, {"id": 4155780, "category_id": 85, "iscrowd": 0, "bbox": [110, 48, 33, 17], "area": 310}, {"id": 1121573, "category_id": 86, "iscrowd": 0, "bbox": [277, 227, 43, 68], "area": 1721}, {"id": 2439245, "category_id": 119, "iscrowd": 0, "bbox": [249, 155, 96, 79], "area": 4854}, {"id": 4613763, "category_id": 130, "iscrowd": 0, "bbox": [0, 112, 608, 368], "area": 17244}, {"id": 15725813, "category_id": 181, "iscrowd": 0, "bbox": [96, 93, 61, 159], "area": 7201}, {"id": 5609416, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 109, 61], "area": 3795}, {"id": 2635602, "category_id": 188, "iscrowd": 0, "bbox": [86, 244, 279, 207], "area": 30308}, {"id": 6788280, "category_id": 189, "iscrowd": 0, "bbox": [125, 219, 23, 16], "area": 283}, {"id": 3819096, "category_id": 190, "iscrowd": 0, "bbox": [0, 299, 522, 181], "area": 21342}, {"id": 5404823, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 165538}], "file_name": "000000415716.png", "image_id": 415716}, {"segments_info": [{"id": 6054991, "category_id": 1, "iscrowd": 0, "bbox": [161, 92, 320, 382], "area": 55129}, {"id": 6709834, "category_id": 1, "iscrowd": 0, "bbox": [95, 35, 135, 293], "area": 23703}, {"id": 9938278, "category_id": 1, "iscrowd": 0, "bbox": [1, 3, 134, 169], "area": 11388}, {"id": 6850891, "category_id": 15, "iscrowd": 0, "bbox": [1, 14, 47, 80], "area": 2865}, {"id": 3881768, "category_id": 27, "iscrowd": 0, "bbox": [231, 243, 133, 230], "area": 13984}, {"id": 3625023, "category_id": 39, "iscrowd": 0, "bbox": [441, 148, 86, 291], "area": 4327}, {"id": 4414537, "category_id": 39, "iscrowd": 0, "bbox": [440, 186, 95, 283], "area": 5279}, {"id": 6713935, "category_id": 39, "iscrowd": 0, "bbox": [386, 168, 104, 305], "area": 6851}, {"id": 5537387, "category_id": 39, "iscrowd": 0, "bbox": [429, 102, 72, 232], "area": 1990}, {"id": 8366472, "category_id": 39, "iscrowd": 0, "bbox": [372, 16, 72, 339], "area": 6057}, {"id": 3558199, "category_id": 39, "iscrowd": 0, "bbox": [444, 96, 27, 155], "area": 1934}, {"id": 596376, "category_id": 168, "iscrowd": 0, "bbox": [518, 31, 122, 221], "area": 6074}, {"id": 8828545, "category_id": 185, "iscrowd": 0, "bbox": [288, 0, 352, 480], "area": 53627}, {"id": 7250280, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 328, 480], "area": 54619}, {"id": 8108424, "category_id": 194, "iscrowd": 0, "bbox": [309, 238, 49, 111], "area": 1292}, {"id": 15135666, "category_id": 195, "iscrowd": 0, "bbox": [532, 174, 108, 294], "area": 14991}], "file_name": "000000415727.png", "image_id": 415727}, {"segments_info": [{"id": 6577243, "category_id": 62, "iscrowd": 0, "bbox": [325, 230, 208, 130], "area": 21660}, {"id": 9078414, "category_id": 62, "iscrowd": 0, "bbox": [445, 203, 89, 70], "area": 2251}, {"id": 4865594, "category_id": 65, "iscrowd": 0, "bbox": [227, 157, 63, 108], "area": 5692}, {"id": 15785416, "category_id": 84, "iscrowd": 0, "bbox": [604, 317, 34, 17], "area": 323}, {"id": 10783362, "category_id": 84, "iscrowd": 0, "bbox": [579, 323, 46, 26], "area": 776}, {"id": 10259602, "category_id": 84, "iscrowd": 0, "bbox": [579, 340, 46, 19], "area": 384}, {"id": 8018498, "category_id": 109, "iscrowd": 0, "bbox": [569, 0, 71, 328], "area": 13025}, {"id": 1448217, "category_id": 176, "iscrowd": 0, "bbox": [0, 27, 31, 246], "area": 5446}, {"id": 1778745, "category_id": 177, "iscrowd": 0, "bbox": [15, 0, 283, 360], "area": 13448}, {"id": 1515834, "category_id": 188, "iscrowd": 0, "bbox": [119, 30, 94, 305], "area": 22972}, {"id": 7366262, "category_id": 189, "iscrowd": 0, "bbox": [564, 328, 76, 32], "area": 939}, {"id": 5854294, "category_id": 190, "iscrowd": 0, "bbox": [0, 242, 621, 118], "area": 18411}, {"id": 9213084, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 620, 360], "area": 118736}], "file_name": "000000415741.png", "image_id": 415741}, {"segments_info": [{"id": 8688823, "category_id": 1, "iscrowd": 0, "bbox": [129, 161, 68, 64], "area": 1629}, {"id": 4546428, "category_id": 22, "iscrowd": 0, "bbox": [34, 281, 266, 335], "area": 51631}, {"id": 8763616, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 314, 478], "area": 19338}, {"id": 14335392, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 310, 156], "area": 33902}, {"id": 8165815, "category_id": 191, "iscrowd": 0, "bbox": [256, 457, 170, 124], "area": 9465}, {"id": 8830177, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 426, 499], "area": 88988}, {"id": 7449045, "category_id": 199, "iscrowd": 0, "bbox": [199, 170, 114, 340], "area": 9464}], "file_name": "000000415748.png", "image_id": 415748}, {"segments_info": [{"id": 8355711, "category_id": 1, "iscrowd": 0, "bbox": [21, 211, 310, 326], "area": 57266}, {"id": 14935011, "category_id": 65, "iscrowd": 0, "bbox": [0, 328, 343, 303], "area": 35753}, {"id": 6316128, "category_id": 93, "iscrowd": 0, "bbox": [0, 374, 544, 266], "area": 62417}, {"id": 9342606, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 346, 381], "area": 95461}, {"id": 2500134, "category_id": 112, "iscrowd": 0, "bbox": [409, 0, 135, 441], "area": 53637}, {"id": 6381921, "category_id": 199, "iscrowd": 0, "bbox": [323, 0, 116, 403], "area": 31376}], "file_name": "000000415882.png", "image_id": 415882}, {"segments_info": [{"id": 4406325, "category_id": 1, "iscrowd": 0, "bbox": [441, 157, 33, 86], "area": 1675}, {"id": 3618871, "category_id": 1, "iscrowd": 0, "bbox": [294, 159, 37, 79], "area": 1933}, {"id": 5466231, "category_id": 18, "iscrowd": 0, "bbox": [485, 278, 15, 88], "area": 770}, {"id": 3687766, "category_id": 21, "iscrowd": 0, "bbox": [159, 173, 58, 58], "area": 2025}, {"id": 3688030, "category_id": 21, "iscrowd": 0, "bbox": [233, 175, 52, 58], "area": 1801}, {"id": 2831422, "category_id": 21, "iscrowd": 0, "bbox": [47, 194, 33, 27], "area": 420}, {"id": 3028038, "category_id": 21, "iscrowd": 0, "bbox": [119, 172, 66, 45], "area": 1190}, {"id": 2566961, "category_id": 21, "iscrowd": 0, "bbox": [7, 168, 42, 51], "area": 1465}, {"id": 2435898, "category_id": 21, "iscrowd": 0, "bbox": [410, 178, 71, 54], "area": 1647}, {"id": 3488332, "category_id": 21, "iscrowd": 0, "bbox": [270, 174, 26, 49], "area": 456}, {"id": 3883603, "category_id": 21, "iscrowd": 0, "bbox": [49, 169, 44, 25], "area": 893}, {"id": 3292238, "category_id": 21, "iscrowd": 0, "bbox": [334, 172, 83, 57], "area": 2686}, {"id": 4082536, "category_id": 21, "iscrowd": 0, "bbox": [201, 173, 25, 22], "area": 185}, {"id": 2830137, "category_id": 21, "iscrowd": 0, "bbox": [80, 171, 44, 56], "area": 1597}, {"id": 4608871, "category_id": 21, "iscrowd": 0, "bbox": [214, 194, 29, 31], "area": 602}, {"id": 2567734, "category_id": 21, "iscrowd": 0, "bbox": [323, 194, 35, 32], "area": 706}, {"id": 3161411, "category_id": 21, "iscrowd": 1, "bbox": [45, 169, 455, 71], "area": 3958}, {"id": 7240820, "category_id": 184, "iscrowd": 0, "bbox": [0, 52, 500, 144], "area": 36315}, {"id": 15723752, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 145], "area": 50331}, {"id": 3434830, "category_id": 193, "iscrowd": 0, "bbox": [0, 193, 500, 182], "area": 76145}], "file_name": "000000415990.png", "image_id": 415990}, {"segments_info": [{"id": 5393239, "category_id": 1, "iscrowd": 0, "bbox": [527, 221, 98, 108], "area": 5766}, {"id": 5326144, "category_id": 1, "iscrowd": 0, "bbox": [170, 248, 62, 151], "area": 4266}, {"id": 4272185, "category_id": 1, "iscrowd": 0, "bbox": [471, 228, 45, 90], "area": 1654}, {"id": 4667956, "category_id": 1, "iscrowd": 0, "bbox": [52, 233, 99, 196], "area": 5055}, {"id": 7231058, "category_id": 1, "iscrowd": 0, "bbox": [366, 146, 84, 69], "area": 1112}, {"id": 2235682, "category_id": 1, "iscrowd": 0, "bbox": [266, 233, 100, 136], "area": 8445}, {"id": 4072475, "category_id": 1, "iscrowd": 0, "bbox": [358, 225, 158, 181], "area": 16644}, {"id": 5980219, "category_id": 1, "iscrowd": 0, "bbox": [135, 240, 51, 91], "area": 1700}, {"id": 5458259, "category_id": 1, "iscrowd": 0, "bbox": [99, 235, 57, 103], "area": 1728}, {"id": 8875110, "category_id": 1, "iscrowd": 0, "bbox": [353, 163, 118, 128], "area": 5785}, {"id": 4342357, "category_id": 1, "iscrowd": 0, "bbox": [0, 247, 121, 233], "area": 15242}, {"id": 13409634, "category_id": 28, "iscrowd": 0, "bbox": [253, 0, 386, 172], "area": 52169}, {"id": 14862222, "category_id": 28, "iscrowd": 0, "bbox": [489, 183, 81, 35], "area": 1517}, {"id": 12423508, "category_id": 28, "iscrowd": 0, "bbox": [1, 23, 349, 210], "area": 34272}, {"id": 9663066, "category_id": 44, "iscrowd": 0, "bbox": [494, 289, 16, 55], "area": 682}, {"id": 2371385, "category_id": 44, "iscrowd": 0, "bbox": [591, 298, 19, 57], "area": 766}, {"id": 4209220, "category_id": 44, "iscrowd": 0, "bbox": [574, 292, 13, 60], "area": 168}, {"id": 3426904, "category_id": 44, "iscrowd": 0, "bbox": [481, 294, 11, 38], "area": 195}, {"id": 2038816, "category_id": 44, "iscrowd": 0, "bbox": [564, 294, 9, 54], "area": 264}, {"id": 1971222, "category_id": 44, "iscrowd": 0, "bbox": [620, 288, 20, 103], "area": 1650}, {"id": 2693916, "category_id": 44, "iscrowd": 0, "bbox": [465, 290, 13, 19], "area": 161}, {"id": 2109242, "category_id": 44, "iscrowd": 0, "bbox": [568, 298, 16, 59], "area": 784}, {"id": 6907233, "category_id": 46, "iscrowd": 0, "bbox": [539, 318, 21, 38], "area": 599}, {"id": 6699022, "category_id": 62, "iscrowd": 0, "bbox": [3, 352, 135, 128], "area": 6882}, {"id": 5056016, "category_id": 62, "iscrowd": 0, "bbox": [247, 294, 31, 37], "area": 697}, {"id": 5582096, "category_id": 62, "iscrowd": 0, "bbox": [188, 304, 41, 85], "area": 780}, {"id": 7749394, "category_id": 62, "iscrowd": 0, "bbox": [533, 391, 107, 80], "area": 5225}, {"id": 9803163, "category_id": 62, "iscrowd": 0, "bbox": [509, 266, 26, 34], "area": 459}, {"id": 8075522, "category_id": 62, "iscrowd": 0, "bbox": [154, 309, 15, 39], "area": 285}, {"id": 10922165, "category_id": 62, "iscrowd": 0, "bbox": [489, 267, 24, 38], "area": 216}, {"id": 7092495, "category_id": 62, "iscrowd": 0, "bbox": [321, 353, 198, 95], "area": 7122}, {"id": 5384457, "category_id": 62, "iscrowd": 0, "bbox": [119, 324, 65, 113], "area": 2724}, {"id": 4071954, "category_id": 62, "iscrowd": 0, "bbox": [248, 320, 111, 160], "area": 7945}, {"id": 8471576, "category_id": 67, "iscrowd": 0, "bbox": [533, 336, 88, 65], "area": 3185}, {"id": 12813615, "category_id": 67, "iscrowd": 0, "bbox": [292, 426, 345, 45], "area": 10361}, {"id": 9787940, "category_id": 67, "iscrowd": 0, "bbox": [490, 328, 53, 32], "area": 1008}, {"id": 6183789, "category_id": 151, "iscrowd": 0, "bbox": [414, 156, 76, 25], "area": 769}, {"id": 10458505, "category_id": 181, "iscrowd": 0, "bbox": [275, 151, 105, 104], "area": 6567}, {"id": 11120314, "category_id": 184, "iscrowd": 0, "bbox": [489, 184, 128, 53], "area": 1020}, {"id": 11314334, "category_id": 186, "iscrowd": 0, "bbox": [464, 63, 176, 135], "area": 5370}, {"id": 15198438, "category_id": 187, "iscrowd": 0, "bbox": [0, 157, 640, 98], "area": 9423}, {"id": 4667705, "category_id": 191, "iscrowd": 0, "bbox": [72, 272, 483, 208], "area": 10646}, {"id": 8483427, "category_id": 199, "iscrowd": 0, "bbox": [120, 156, 503, 242], "area": 21367}], "file_name": "000000416104.png", "image_id": 416104}, {"segments_info": [{"id": 1777178, "category_id": 17, "iscrowd": 0, "bbox": [57, 459, 89, 100], "area": 4627}, {"id": 3097137, "category_id": 64, "iscrowd": 0, "bbox": [252, 429, 47, 133], "area": 3405}, {"id": 5003350, "category_id": 181, "iscrowd": 0, "bbox": [8, 0, 416, 597], "area": 232191}, {"id": 4543579, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 424, 640], "area": 30917}], "file_name": "000000416170.png", "image_id": 416170}, {"segments_info": [{"id": 5006461, "category_id": 17, "iscrowd": 0, "bbox": [123, 86, 246, 149], "area": 15418}, {"id": 1052945, "category_id": 76, "iscrowd": 0, "bbox": [29, 124, 109, 104], "area": 5850}, {"id": 8159106, "category_id": 76, "iscrowd": 0, "bbox": [122, 211, 193, 102], "area": 12461}, {"id": 2965069, "category_id": 100, "iscrowd": 0, "bbox": [193, 85, 203, 70], "area": 4502}, {"id": 856857, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 152, 293], "area": 11997}, {"id": 7435392, "category_id": 190, "iscrowd": 0, "bbox": [26, 94, 474, 281], "area": 69024}, {"id": 7830406, "category_id": 200, "iscrowd": 0, "bbox": [127, 140, 236, 142], "area": 114}], "file_name": "000000416256.png", "image_id": 416256}, {"segments_info": [{"id": 4878194, "category_id": 7, "iscrowd": 0, "bbox": [54, 108, 497, 226], "area": 73974}, {"id": 3679508, "category_id": 95, "iscrowd": 0, "bbox": [30, 184, 161, 42], "area": 4364}, {"id": 1121315, "category_id": 147, "iscrowd": 0, "bbox": [118, 293, 37, 8], "area": 67}, {"id": 789778, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 493, 238], "area": 41680}, {"id": 1525575, "category_id": 190, "iscrowd": 0, "bbox": [0, 272, 640, 156], "area": 75312}, {"id": 1785929, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 300], "area": 78235}], "file_name": "000000416269.png", "image_id": 416269}, {"segments_info": [{"id": 4207683, "category_id": 17, "iscrowd": 0, "bbox": [35, 0, 605, 455], "area": 166234}, {"id": 525606, "category_id": 65, "iscrowd": 0, "bbox": [1, 1, 639, 472], "area": 133481}], "file_name": "000000416330.png", "image_id": 416330}, {"segments_info": [{"id": 2632515, "category_id": 1, "iscrowd": 0, "bbox": [190, 251, 121, 373], "area": 22604}, {"id": 2566205, "category_id": 1, "iscrowd": 0, "bbox": [265, 263, 162, 377], "area": 36596}, {"id": 2436388, "category_id": 1, "iscrowd": 0, "bbox": [0, 239, 68, 341], "area": 5902}, {"id": 10461600, "category_id": 42, "iscrowd": 0, "bbox": [14, 14, 196, 626], "area": 92745}, {"id": 5857077, "category_id": 62, "iscrowd": 0, "bbox": [0, 393, 63, 247], "area": 5493}, {"id": 5527605, "category_id": 62, "iscrowd": 0, "bbox": [248, 387, 46, 198], "area": 3166}, {"id": 5198669, "category_id": 84, "iscrowd": 0, "bbox": [375, 144, 20, 86], "area": 1214}, {"id": 4015427, "category_id": 156, "iscrowd": 0, "bbox": [282, 82, 145, 380], "area": 24957}, {"id": 3230803, "category_id": 177, "iscrowd": 0, "bbox": [85, 0, 337, 73], "area": 11076}, {"id": 2111292, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 192, 244], "area": 12105}, {"id": 1186834, "category_id": 181, "iscrowd": 0, "bbox": [280, 0, 147, 93], "area": 5586}, {"id": 6316634, "category_id": 188, "iscrowd": 0, "bbox": [158, 50, 216, 262], "area": 30852}, {"id": 987922, "category_id": 189, "iscrowd": 0, "bbox": [272, 406, 11, 26], "area": 180}, {"id": 3620151, "category_id": 190, "iscrowd": 0, "bbox": [0, 475, 427, 165], "area": 11683}, {"id": 2570555, "category_id": 195, "iscrowd": 0, "bbox": [319, 46, 24, 23], "area": 329}, {"id": 3558479, "category_id": 199, "iscrowd": 0, "bbox": [367, 16, 24, 262], "area": 1212}], "file_name": "000000416343.png", "image_id": 416343}, {"segments_info": [{"id": 2106417, "category_id": 1, "iscrowd": 0, "bbox": [408, 226, 123, 191], "area": 10959}, {"id": 3750208, "category_id": 1, "iscrowd": 0, "bbox": [28, 88, 251, 392], "area": 55793}, {"id": 5000783, "category_id": 44, "iscrowd": 0, "bbox": [617, 350, 21, 81], "area": 1257}, {"id": 1643025, "category_id": 44, "iscrowd": 0, "bbox": [521, 382, 26, 98], "area": 1857}, {"id": 3358023, "category_id": 46, "iscrowd": 0, "bbox": [569, 355, 18, 50], "area": 503}, {"id": 4212560, "category_id": 46, "iscrowd": 0, "bbox": [601, 370, 20, 39], "area": 552}, {"id": 3558761, "category_id": 47, "iscrowd": 0, "bbox": [546, 422, 8, 44], "area": 224}, {"id": 1118231, "category_id": 63, "iscrowd": 0, "bbox": [238, 278, 211, 183], "area": 23765}, {"id": 9868962, "category_id": 75, "iscrowd": 0, "bbox": [471, 290, 9, 28], "area": 84}, {"id": 4014922, "category_id": 75, "iscrowd": 0, "bbox": [487, 404, 23, 12], "area": 100}, {"id": 4013892, "category_id": 75, "iscrowd": 0, "bbox": [570, 381, 39, 25], "area": 302}, {"id": 8816783, "category_id": 75, "iscrowd": 0, "bbox": [490, 310, 21, 26], "area": 88}, {"id": 14145761, "category_id": 75, "iscrowd": 0, "bbox": [177, 182, 52, 18], "area": 412}, {"id": 5856606, "category_id": 75, "iscrowd": 0, "bbox": [508, 402, 23, 13], "area": 165}, {"id": 5792076, "category_id": 84, "iscrowd": 0, "bbox": [552, 268, 19, 33], "area": 174}, {"id": 597316, "category_id": 84, "iscrowd": 0, "bbox": [512, 299, 14, 32], "area": 78}, {"id": 1184274, "category_id": 84, "iscrowd": 0, "bbox": [547, 305, 20, 37], "area": 261}, {"id": 2106408, "category_id": 84, "iscrowd": 0, "bbox": [520, 204, 12, 38], "area": 242}, {"id": 5526843, "category_id": 84, "iscrowd": 0, "bbox": [557, 267, 19, 33], "area": 142}, {"id": 2302497, "category_id": 84, "iscrowd": 0, "bbox": [558, 205, 9, 41], "area": 325}, {"id": 6250083, "category_id": 84, "iscrowd": 0, "bbox": [565, 160, 9, 32], "area": 226}, {"id": 6779782, "category_id": 84, "iscrowd": 0, "bbox": [565, 437, 67, 26], "area": 860}, {"id": 3027765, "category_id": 84, "iscrowd": 0, "bbox": [505, 268, 29, 12], "area": 177}, {"id": 1843237, "category_id": 84, "iscrowd": 0, "bbox": [547, 304, 37, 49], "area": 1144}, {"id": 790035, "category_id": 84, "iscrowd": 0, "bbox": [564, 270, 17, 31], "area": 122}, {"id": 7435129, "category_id": 84, "iscrowd": 0, "bbox": [562, 411, 42, 9], "area": 185}, {"id": 2565413, "category_id": 84, "iscrowd": 0, "bbox": [566, 207, 7, 40], "area": 189}, {"id": 5135210, "category_id": 84, "iscrowd": 1, "bbox": [479, 83, 161, 392], "area": 27660}, {"id": 1052535, "category_id": 100, "iscrowd": 0, "bbox": [551, 33, 83, 52], "area": 2793}, {"id": 1250362, "category_id": 141, "iscrowd": 0, "bbox": [437, 341, 102, 74], "area": 3204}, {"id": 5333103, "category_id": 156, "iscrowd": 0, "bbox": [501, 74, 139, 322], "area": 10878}, {"id": 4545394, "category_id": 189, "iscrowd": 0, "bbox": [424, 410, 216, 70], "area": 5895}, {"id": 6448749, "category_id": 195, "iscrowd": 0, "bbox": [533, 371, 41, 48], "area": 913}, {"id": 10660279, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 411], "area": 112716}, {"id": 2830127, "category_id": 200, "iscrowd": 0, "bbox": [0, 457, 484, 23], "area": 1802}], "file_name": "000000416451.png", "image_id": 416451}, {"segments_info": [{"id": 4869741, "category_id": 62, "iscrowd": 0, "bbox": [143, 165, 134, 137], "area": 9950}, {"id": 6972294, "category_id": 63, "iscrowd": 0, "bbox": [512, 204, 128, 148], "area": 13038}, {"id": 2895233, "category_id": 64, "iscrowd": 0, "bbox": [64, 198, 15, 14], "area": 146}, {"id": 6185828, "category_id": 64, "iscrowd": 0, "bbox": [60, 116, 20, 102], "area": 1158}, {"id": 2562846, "category_id": 72, "iscrowd": 0, "bbox": [0, 82, 72, 139], "area": 8095}, {"id": 6771046, "category_id": 84, "iscrowd": 0, "bbox": [375, 234, 3, 20], "area": 57}, {"id": 5396348, "category_id": 84, "iscrowd": 0, "bbox": [356, 230, 7, 24], "area": 139}, {"id": 8948382, "category_id": 84, "iscrowd": 0, "bbox": [360, 204, 3, 25], "area": 63}, {"id": 11185861, "category_id": 84, "iscrowd": 0, "bbox": [305, 203, 3, 26], "area": 66}, {"id": 3550531, "category_id": 84, "iscrowd": 0, "bbox": [362, 202, 6, 27], "area": 122}, {"id": 7833237, "category_id": 84, "iscrowd": 0, "bbox": [379, 233, 5, 22], "area": 96}, {"id": 5395572, "category_id": 84, "iscrowd": 0, "bbox": [371, 201, 5, 28], "area": 125}, {"id": 3621774, "category_id": 84, "iscrowd": 0, "bbox": [311, 202, 4, 27], "area": 93}, {"id": 5655429, "category_id": 84, "iscrowd": 0, "bbox": [370, 230, 3, 24], "area": 69}, {"id": 11187912, "category_id": 84, "iscrowd": 0, "bbox": [376, 201, 4, 28], "area": 81}, {"id": 4473178, "category_id": 84, "iscrowd": 0, "bbox": [332, 198, 52, 32], "area": 1178}, {"id": 3682935, "category_id": 84, "iscrowd": 0, "bbox": [362, 232, 3, 23], "area": 64}, {"id": 6184083, "category_id": 84, "iscrowd": 0, "bbox": [364, 174, 4, 23], "area": 91}, {"id": 5592183, "category_id": 84, "iscrowd": 1, "bbox": [271, 169, 113, 88], "area": 3796}, {"id": 9737652, "category_id": 112, "iscrowd": 0, "bbox": [514, 58, 32, 91], "area": 1421}, {"id": 3691169, "category_id": 118, "iscrowd": 0, "bbox": [209, 241, 329, 114], "area": 19822}, {"id": 12040648, "category_id": 130, "iscrowd": 0, "bbox": [227, 0, 413, 155], "area": 1789}, {"id": 3155761, "category_id": 156, "iscrowd": 0, "bbox": [0, 44, 581, 299], "area": 19297}, {"id": 9941703, "category_id": 180, "iscrowd": 0, "bbox": [45, 0, 126, 137], "area": 3984}, {"id": 1840151, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 65, 58], "area": 2289}, {"id": 12174798, "category_id": 186, "iscrowd": 0, "bbox": [224, 0, 315, 46], "area": 8930}, {"id": 3949449, "category_id": 189, "iscrowd": 0, "bbox": [71, 294, 263, 61], "area": 10907}, {"id": 12565958, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 355], "area": 88046}], "file_name": "000000416534.png", "image_id": 416534}, {"segments_info": [{"id": 9999501, "category_id": 70, "iscrowd": 0, "bbox": [289, 420, 84, 187], "area": 12923}, {"id": 10130063, "category_id": 81, "iscrowd": 0, "bbox": [177, 373, 51, 33], "area": 1010}, {"id": 8220789, "category_id": 107, "iscrowd": 0, "bbox": [185, 372, 64, 49], "area": 1332}, {"id": 11185069, "category_id": 112, "iscrowd": 0, "bbox": [132, 0, 380, 612], "area": 83205}, {"id": 9671312, "category_id": 130, "iscrowd": 0, "bbox": [167, 78, 67, 75], "area": 2845}, {"id": 11910582, "category_id": 133, "iscrowd": 0, "bbox": [172, 131, 260, 457], "area": 26905}, {"id": 10263964, "category_id": 188, "iscrowd": 0, "bbox": [0, 3, 382, 609], "area": 71184}, {"id": 4139302, "category_id": 190, "iscrowd": 0, "bbox": [166, 572, 155, 40], "area": 3430}, {"id": 8949657, "category_id": 199, "iscrowd": 0, "bbox": [65, 0, 547, 612], "area": 155237}], "file_name": "000000416745.png", "image_id": 416745}, {"segments_info": [{"id": 3751228, "category_id": 21, "iscrowd": 0, "bbox": [64, 75, 356, 368], "area": 64771}, {"id": 10594470, "category_id": 21, "iscrowd": 0, "bbox": [398, 63, 200, 252], "area": 16454}, {"id": 5987675, "category_id": 21, "iscrowd": 0, "bbox": [446, 64, 194, 331], "area": 34853}, {"id": 10330781, "category_id": 21, "iscrowd": 0, "bbox": [47, 230, 208, 150], "area": 13078}, {"id": 8093819, "category_id": 148, "iscrowd": 0, "bbox": [0, 37, 168, 94], "area": 12580}, {"id": 2041887, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 194], "area": 52843}, {"id": 1982250, "category_id": 193, "iscrowd": 0, "bbox": [0, 106, 640, 374], "area": 111457}], "file_name": "000000416758.png", "image_id": 416758}, {"segments_info": [{"id": 2898244, "category_id": 21, "iscrowd": 0, "bbox": [110, 244, 108, 87], "area": 4700}, {"id": 9147806, "category_id": 125, "iscrowd": 0, "bbox": [577, 320, 63, 90], "area": 2200}, {"id": 3488823, "category_id": 184, "iscrowd": 0, "bbox": [299, 201, 341, 146], "area": 8117}, {"id": 16178632, "category_id": 187, "iscrowd": 0, "bbox": [94, 0, 546, 295], "area": 111765}, {"id": 5336426, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 146385}], "file_name": "000000416837.png", "image_id": 416837}, {"segments_info": [{"id": 2836832, "category_id": 3, "iscrowd": 0, "bbox": [174, 1, 326, 158], "area": 36474}, {"id": 2708081, "category_id": 46, "iscrowd": 0, "bbox": [38, 15, 54, 200], "area": 3575}, {"id": 2111570, "category_id": 46, "iscrowd": 0, "bbox": [65, 0, 119, 322], "area": 21758}, {"id": 727335, "category_id": 48, "iscrowd": 0, "bbox": [371, 202, 129, 53], "area": 1234}, {"id": 792353, "category_id": 49, "iscrowd": 0, "bbox": [359, 218, 140, 49], "area": 1254}, {"id": 870525, "category_id": 49, "iscrowd": 0, "bbox": [0, 220, 27, 48], "area": 688}, {"id": 799573, "category_id": 50, "iscrowd": 0, "bbox": [391, 201, 109, 43], "area": 1003}, {"id": 407918, "category_id": 54, "iscrowd": 0, "bbox": [259, 259, 241, 95], "area": 16892}, {"id": 860473, "category_id": 60, "iscrowd": 0, "bbox": [180, 134, 99, 81], "area": 5307}, {"id": 1911863, "category_id": 67, "iscrowd": 0, "bbox": [3, 116, 497, 253], "area": 31733}, {"id": 8622749, "category_id": 149, "iscrowd": 0, "bbox": [35, 94, 49, 38], "area": 532}, {"id": 2044739, "category_id": 189, "iscrowd": 0, "bbox": [0, 88, 500, 287], "area": 4352}, {"id": 3443902, "category_id": 190, "iscrowd": 0, "bbox": [37, 123, 66, 30], "area": 877}, {"id": 1937875, "category_id": 195, "iscrowd": 0, "bbox": [271, 149, 229, 87], "area": 8995}, {"id": 1661836, "category_id": 196, "iscrowd": 0, "bbox": [54, 137, 36, 33], "area": 535}, {"id": 1716041, "category_id": 197, "iscrowd": 0, "bbox": [435, 0, 65, 73], "area": 3463}, {"id": 3965614, "category_id": 199, "iscrowd": 0, "bbox": [172, 0, 79, 5], "area": 185}], "file_name": "000000416885.png", "image_id": 416885}, {"segments_info": [{"id": 5658198, "category_id": 15, "iscrowd": 0, "bbox": [502, 165, 22, 8], "area": 169}, {"id": 7105644, "category_id": 15, "iscrowd": 0, "bbox": [498, 153, 45, 6], "area": 133}, {"id": 1907997, "category_id": 15, "iscrowd": 0, "bbox": [318, 147, 19, 3], "area": 29}, {"id": 11766886, "category_id": 28, "iscrowd": 0, "bbox": [296, 89, 44, 53], "area": 533}, {"id": 9020748, "category_id": 28, "iscrowd": 0, "bbox": [234, 96, 46, 42], "area": 430}, {"id": 4279256, "category_id": 28, "iscrowd": 0, "bbox": [337, 86, 67, 18], "area": 733}, {"id": 5335238, "category_id": 28, "iscrowd": 0, "bbox": [172, 100, 43, 36], "area": 424}, {"id": 4037824, "category_id": 28, "iscrowd": 0, "bbox": [341, 101, 50, 8], "area": 256}, {"id": 11702381, "category_id": 28, "iscrowd": 0, "bbox": [153, 101, 28, 34], "area": 242}, {"id": 6977812, "category_id": 28, "iscrowd": 0, "bbox": [454, 78, 81, 22], "area": 1240}, {"id": 2602448, "category_id": 28, "iscrowd": 0, "bbox": [391, 77, 79, 27], "area": 1093}, {"id": 6187828, "category_id": 28, "iscrowd": 0, "bbox": [119, 104, 20, 31], "area": 157}, {"id": 5863705, "category_id": 28, "iscrowd": 0, "bbox": [403, 100, 53, 6], "area": 226}, {"id": 7007728, "category_id": 28, "iscrowd": 0, "bbox": [207, 98, 33, 12], "area": 270}, {"id": 6528208, "category_id": 28, "iscrowd": 0, "bbox": [261, 94, 39, 47], "area": 472}, {"id": 3560623, "category_id": 28, "iscrowd": 0, "bbox": [533, 73, 99, 79], "area": 2197}, {"id": 3167127, "category_id": 28, "iscrowd": 1, "bbox": [134, 100, 28, 15], "area": 267}, {"id": 3750201, "category_id": 62, "iscrowd": 0, "bbox": [352, 148, 17, 23], "area": 304}, {"id": 3815994, "category_id": 62, "iscrowd": 0, "bbox": [373, 147, 19, 26], "area": 364}, {"id": 3815992, "category_id": 62, "iscrowd": 0, "bbox": [615, 148, 13, 42], "area": 304}, {"id": 6579300, "category_id": 62, "iscrowd": 0, "bbox": [431, 141, 16, 36], "area": 158}, {"id": 9145227, "category_id": 62, "iscrowd": 0, "bbox": [443, 142, 9, 26], "area": 59}, {"id": 7500402, "category_id": 62, "iscrowd": 0, "bbox": [390, 142, 18, 33], "area": 369}, {"id": 8553090, "category_id": 62, "iscrowd": 0, "bbox": [420, 150, 11, 18], "area": 125}, {"id": 4144959, "category_id": 62, "iscrowd": 0, "bbox": [543, 159, 39, 29], "area": 837}, {"id": 4144953, "category_id": 62, "iscrowd": 0, "bbox": [501, 147, 18, 35], "area": 149}, {"id": 2894892, "category_id": 62, "iscrowd": 0, "bbox": [335, 137, 17, 33], "area": 292}, {"id": 2763306, "category_id": 62, "iscrowd": 0, "bbox": [593, 155, 14, 24], "area": 276}, {"id": 12566463, "category_id": 62, "iscrowd": 0, "bbox": [463, 145, 18, 12], "area": 138}, {"id": 2763304, "category_id": 62, "iscrowd": 0, "bbox": [543, 147, 14, 15], "area": 171}, {"id": 4539717, "category_id": 62, "iscrowd": 1, "bbox": [184, 133, 156, 34], "area": 2679}, {"id": 9408399, "category_id": 67, "iscrowd": 0, "bbox": [352, 144, 44, 2], "area": 58}, {"id": 4934475, "category_id": 67, "iscrowd": 0, "bbox": [301, 141, 19, 4], "area": 60}, {"id": 6118749, "category_id": 67, "iscrowd": 0, "bbox": [400, 146, 53, 5], "area": 151}, {"id": 4342338, "category_id": 67, "iscrowd": 0, "bbox": [243, 138, 32, 4], "area": 76}, {"id": 5329233, "category_id": 67, "iscrowd": 0, "bbox": [469, 149, 52, 8], "area": 169}, {"id": 4144952, "category_id": 67, "iscrowd": 0, "bbox": [557, 152, 62, 37], "area": 314}, {"id": 3026478, "category_id": 67, "iscrowd": 0, "bbox": [160, 135, 17, 3], "area": 31}, {"id": 4342336, "category_id": 67, "iscrowd": 0, "bbox": [272, 140, 27, 4], "area": 74}, {"id": 6250335, "category_id": 67, "iscrowd": 0, "bbox": [215, 136, 28, 4], "area": 77}, {"id": 6118758, "category_id": 67, "iscrowd": 1, "bbox": [126, 120, 428, 43], "area": 3406}, {"id": 6184797, "category_id": 92, "iscrowd": 0, "bbox": [389, 100, 26, 23], "area": 361}, {"id": 3881787, "category_id": 95, "iscrowd": 0, "bbox": [0, 44, 235, 107], "area": 9120}, {"id": 3290166, "category_id": 148, "iscrowd": 0, "bbox": [0, 135, 640, 194], "area": 94398}, {"id": 986124, "category_id": 166, "iscrowd": 0, "bbox": [151, 102, 16, 17], "area": 63}, {"id": 5329224, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 552, 137], "area": 28535}, {"id": 7763574, "category_id": 185, "iscrowd": 0, "bbox": [358, 131, 199, 34], "area": 361}, {"id": 6184542, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 223], "area": 42555}], "file_name": "000000416991.png", "image_id": 416991}, {"segments_info": [{"id": 4013373, "category_id": 15, "iscrowd": 0, "bbox": [0, 225, 250, 250], "area": 37806}, {"id": 5526612, "category_id": 95, "iscrowd": 0, "bbox": [178, 156, 130, 102], "area": 7450}, {"id": 16514043, "category_id": 187, "iscrowd": 0, "bbox": [50, 0, 268, 152], "area": 23063}, {"id": 5066061, "category_id": 194, "iscrowd": 0, "bbox": [0, 160, 640, 320], "area": 116450}], "file_name": "000000417043.png", "image_id": 417043}, {"segments_info": [{"id": 2961733, "category_id": 21, "iscrowd": 0, "bbox": [428, 221, 128, 122], "area": 6206}, {"id": 4080472, "category_id": 21, "iscrowd": 0, "bbox": [328, 195, 94, 150], "area": 9525}, {"id": 8098735, "category_id": 149, "iscrowd": 0, "bbox": [0, 239, 216, 121], "area": 22734}, {"id": 4675414, "category_id": 184, "iscrowd": 0, "bbox": [0, 121, 640, 138], "area": 20090}, {"id": 14212317, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 222], "area": 118728}, {"id": 6584213, "category_id": 191, "iscrowd": 0, "bbox": [194, 252, 273, 108], "area": 14592}, {"id": 4538690, "category_id": 192, "iscrowd": 0, "bbox": [0, 197, 155, 33], "area": 2160}, {"id": 1979186, "category_id": 193, "iscrowd": 0, "bbox": [175, 194, 465, 166], "area": 31012}, {"id": 4475745, "category_id": 197, "iscrowd": 0, "bbox": [242, 237, 25, 52], "area": 790}], "file_name": "000000417085.png", "image_id": 417085}, {"segments_info": [{"id": 6643299, "category_id": 1, "iscrowd": 0, "bbox": [167, 240, 34, 53], "area": 552}, {"id": 1118482, "category_id": 1, "iscrowd": 0, "bbox": [344, 476, 16, 13], "area": 155}, {"id": 1710361, "category_id": 1, "iscrowd": 0, "bbox": [325, 216, 146, 326], "area": 30624}, {"id": 2433570, "category_id": 1, "iscrowd": 0, "bbox": [197, 250, 116, 246], "area": 11923}, {"id": 6119519, "category_id": 1, "iscrowd": 0, "bbox": [4, 211, 117, 171], "area": 12574}, {"id": 2236447, "category_id": 31, "iscrowd": 0, "bbox": [299, 340, 20, 51], "area": 690}, {"id": 3621698, "category_id": 33, "iscrowd": 0, "bbox": [163, 393, 68, 104], "area": 6231}, {"id": 5393481, "category_id": 33, "iscrowd": 0, "bbox": [171, 262, 75, 51], "area": 2161}, {"id": 3683892, "category_id": 33, "iscrowd": 0, "bbox": [142, 329, 79, 53], "area": 2347}, {"id": 16448506, "category_id": 130, "iscrowd": 0, "bbox": [247, 0, 86, 41], "area": 2157}, {"id": 5986651, "category_id": 161, "iscrowd": 0, "bbox": [106, 358, 74, 38], "area": 1144}, {"id": 16184822, "category_id": 181, "iscrowd": 0, "bbox": [49, 33, 351, 256], "area": 35339}, {"id": 12236728, "category_id": 185, "iscrowd": 0, "bbox": [105, 117, 346, 304], "area": 12398}, {"id": 7826290, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 141], "area": 34812}, {"id": 4342350, "category_id": 190, "iscrowd": 0, "bbox": [0, 410, 417, 230], "area": 34783}, {"id": 9013129, "category_id": 199, "iscrowd": 0, "bbox": [0, 15, 480, 443], "area": 49654}], "file_name": "000000417249.png", "image_id": 417249}, {"segments_info": [{"id": 5402794, "category_id": 1, "iscrowd": 0, "bbox": [184, 8, 29, 133], "area": 2347}, {"id": 3763090, "category_id": 47, "iscrowd": 0, "bbox": [245, 41, 128, 176], "area": 16808}, {"id": 11519705, "category_id": 48, "iscrowd": 0, "bbox": [427, 98, 99, 28], "area": 736}, {"id": 4615562, "category_id": 50, "iscrowd": 0, "bbox": [211, 166, 118, 91], "area": 3008}, {"id": 4025753, "category_id": 61, "iscrowd": 0, "bbox": [499, 79, 136, 130], "area": 10774}, {"id": 4289692, "category_id": 61, "iscrowd": 0, "bbox": [1, 90, 181, 140], "area": 17785}, {"id": 1195111, "category_id": 189, "iscrowd": 0, "bbox": [0, 10, 640, 310], "area": 53219}, {"id": 9874109, "category_id": 195, "iscrowd": 0, "bbox": [27, 56, 417, 259], "area": 24201}], "file_name": "000000417285.png", "image_id": 417285}, {"segments_info": [{"id": 3818057, "category_id": 23, "iscrowd": 0, "bbox": [60, 20, 525, 394], "area": 111429}, {"id": 4540487, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 336], "area": 101929}], "file_name": "000000417465.png", "image_id": 417465}, {"segments_info": [{"id": 11380632, "category_id": 50, "iscrowd": 0, "bbox": [0, 1, 69, 38], "area": 822}, {"id": 13092022, "category_id": 51, "iscrowd": 0, "bbox": [16, 24, 162, 90], "area": 11078}, {"id": 6328237, "category_id": 54, "iscrowd": 0, "bbox": [23, 68, 410, 344], "area": 90197}, {"id": 5938878, "category_id": 54, "iscrowd": 0, "bbox": [352, 48, 255, 293], "area": 48983}, {"id": 3092012, "category_id": 62, "iscrowd": 0, "bbox": [602, 28, 38, 130], "area": 1555}, {"id": 1776410, "category_id": 62, "iscrowd": 0, "bbox": [476, 4, 57, 75], "area": 3109}, {"id": 1578518, "category_id": 62, "iscrowd": 0, "bbox": [395, 0, 78, 69], "area": 3199}, {"id": 1907996, "category_id": 62, "iscrowd": 0, "bbox": [531, 1, 31, 61], "area": 1285}, {"id": 1315604, "category_id": 62, "iscrowd": 0, "bbox": [277, 0, 111, 97], "area": 7967}, {"id": 12960702, "category_id": 189, "iscrowd": 0, "bbox": [0, 98, 640, 124], "area": 11544}, {"id": 7764857, "category_id": 190, "iscrowd": 0, "bbox": [271, 14, 369, 160], "area": 11851}, {"id": 14210774, "category_id": 195, "iscrowd": 0, "bbox": [0, 30, 364, 105], "area": 5627}, {"id": 7775668, "category_id": 196, "iscrowd": 0, "bbox": [33, 126, 596, 229], "area": 4869}], "file_name": "000000417608.png", "image_id": 417608}, {"segments_info": [{"id": 2765628, "category_id": 1, "iscrowd": 0, "bbox": [429, 134, 211, 346], "area": 13995}, {"id": 4143427, "category_id": 1, "iscrowd": 0, "bbox": [0, 72, 49, 138], "area": 3873}, {"id": 661822, "category_id": 1, "iscrowd": 0, "bbox": [270, 78, 16, 23], "area": 262}, {"id": 7836852, "category_id": 1, "iscrowd": 0, "bbox": [366, 2, 252, 230], "area": 36596}, {"id": 2832715, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 397, 450], "area": 75331}, {"id": 727865, "category_id": 1, "iscrowd": 0, "bbox": [291, 77, 38, 51], "area": 1098}, {"id": 6458803, "category_id": 31, "iscrowd": 0, "bbox": [566, 200, 74, 150], "area": 3352}, {"id": 2895921, "category_id": 32, "iscrowd": 0, "bbox": [462, 90, 25, 69], "area": 991}, {"id": 3291975, "category_id": 44, "iscrowd": 0, "bbox": [0, 238, 89, 242], "area": 9859}, {"id": 1383462, "category_id": 44, "iscrowd": 0, "bbox": [247, 420, 31, 60], "area": 1065}, {"id": 1910071, "category_id": 44, "iscrowd": 0, "bbox": [196, 162, 213, 83], "area": 8996}, {"id": 4872550, "category_id": 44, "iscrowd": 0, "bbox": [241, 333, 26, 147], "area": 1844}, {"id": 5470884, "category_id": 46, "iscrowd": 0, "bbox": [346, 185, 44, 111], "area": 2070}, {"id": 2899278, "category_id": 46, "iscrowd": 0, "bbox": [131, 344, 48, 77], "area": 2169}, {"id": 7573680, "category_id": 46, "iscrowd": 0, "bbox": [407, 176, 63, 131], "area": 3155}, {"id": 12245220, "category_id": 47, "iscrowd": 0, "bbox": [298, 420, 50, 45], "area": 1514}, {"id": 2701642, "category_id": 51, "iscrowd": 0, "bbox": [309, 441, 188, 33], "area": 4642}, {"id": 5135457, "category_id": 100, "iscrowd": 0, "bbox": [175, 308, 156, 172], "area": 11912}, {"id": 1213648, "category_id": 107, "iscrowd": 0, "bbox": [0, 173, 30, 119], "area": 973}, {"id": 1652063, "category_id": 118, "iscrowd": 0, "bbox": [228, 198, 134, 222], "area": 10846}, {"id": 1854837, "category_id": 130, "iscrowd": 0, "bbox": [70, 0, 380, 37], "area": 1975}, {"id": 1794969, "category_id": 176, "iscrowd": 0, "bbox": [52, 0, 369, 116], "area": 10840}, {"id": 795500, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 31, 74], "area": 2165}, {"id": 9219525, "category_id": 189, "iscrowd": 0, "bbox": [141, 429, 51, 51], "area": 1649}, {"id": 15068652, "category_id": 195, "iscrowd": 0, "bbox": [260, 290, 380, 143], "area": 6903}, {"id": 5668767, "category_id": 199, "iscrowd": 0, "bbox": [27, 0, 613, 480], "area": 34370}], "file_name": "000000417632.png", "image_id": 417632}, {"segments_info": [{"id": 3420461, "category_id": 1, "iscrowd": 0, "bbox": [471, 85, 19, 43], "area": 457}, {"id": 2633009, "category_id": 3, "iscrowd": 0, "bbox": [0, 108, 21, 48], "area": 679}, {"id": 2633776, "category_id": 3, "iscrowd": 0, "bbox": [193, 103, 12, 28], "area": 215}, {"id": 5067089, "category_id": 3, "iscrowd": 0, "bbox": [200, 101, 58, 43], "area": 1951}, {"id": 3755881, "category_id": 11, "iscrowd": 0, "bbox": [264, 198, 140, 276], "area": 23812}, {"id": 2699589, "category_id": 13, "iscrowd": 0, "bbox": [157, 47, 16, 16], "area": 212}, {"id": 4016714, "category_id": 128, "iscrowd": 0, "bbox": [15, 0, 149, 132], "area": 12842}, {"id": 6978441, "category_id": 149, "iscrowd": 0, "bbox": [0, 105, 640, 375], "area": 106481}, {"id": 2372660, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 544, 480], "area": 32550}, {"id": 4151384, "category_id": 185, "iscrowd": 0, "bbox": [34, 92, 116, 56], "area": 3476}, {"id": 7704480, "category_id": 191, "iscrowd": 0, "bbox": [0, 118, 640, 362], "area": 90612}, {"id": 6910837, "category_id": 197, "iscrowd": 0, "bbox": [252, 0, 388, 142], "area": 33128}], "file_name": "000000417779.png", "image_id": 417779}, {"segments_info": [{"id": 6908520, "category_id": 16, "iscrowd": 0, "bbox": [402, 292, 20, 16], "area": 218}, {"id": 6908511, "category_id": 16, "iscrowd": 0, "bbox": [429, 290, 22, 18], "area": 246}, {"id": 3949125, "category_id": 16, "iscrowd": 0, "bbox": [391, 125, 25, 15], "area": 201}, {"id": 2828331, "category_id": 16, "iscrowd": 0, "bbox": [0, 291, 36, 13], "area": 296}, {"id": 7505305, "category_id": 25, "iscrowd": 0, "bbox": [305, 166, 64, 130], "area": 3292}, {"id": 7502982, "category_id": 25, "iscrowd": 0, "bbox": [204, 97, 60, 206], "area": 6677}, {"id": 6321028, "category_id": 175, "iscrowd": 0, "bbox": [0, 109, 500, 205], "area": 79645}, {"id": 1849655, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 120], "area": 54269}, {"id": 2051141, "category_id": 193, "iscrowd": 0, "bbox": [0, 88, 500, 287], "area": 29169}, {"id": 3688271, "category_id": 194, "iscrowd": 0, "bbox": [0, 283, 500, 92], "area": 13178}], "file_name": "000000417876.png", "image_id": 417876}, {"segments_info": [{"id": 7565686, "category_id": 1, "iscrowd": 0, "bbox": [201, 38, 154, 166], "area": 12544}, {"id": 13357275, "category_id": 42, "iscrowd": 0, "bbox": [245, 173, 219, 101], "area": 11231}, {"id": 10003622, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 429], "area": 244439}], "file_name": "000000417911.png", "image_id": 417911}, {"segments_info": [{"id": 13023667, "category_id": 1, "iscrowd": 0, "bbox": [336, 179, 91, 140], "area": 4285}, {"id": 2635343, "category_id": 1, "iscrowd": 0, "bbox": [187, 176, 240, 453], "area": 75750}, {"id": 3555665, "category_id": 1, "iscrowd": 0, "bbox": [0, 154, 196, 473], "area": 69587}, {"id": 3753819, "category_id": 46, "iscrowd": 0, "bbox": [231, 460, 57, 115], "area": 3346}, {"id": 5532291, "category_id": 46, "iscrowd": 0, "bbox": [93, 512, 52, 127], "area": 4023}, {"id": 15526635, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 141, 303], "area": 28096}, {"id": 16711422, "category_id": 186, "iscrowd": 0, "bbox": [24, 0, 403, 98], "area": 23361}, {"id": 8027776, "category_id": 190, "iscrowd": 0, "bbox": [180, 157, 247, 483], "area": 8240}, {"id": 15067628, "category_id": 199, "iscrowd": 0, "bbox": [101, 51, 326, 303], "area": 42637}], "file_name": "000000418062.png", "image_id": 418062}, {"segments_info": [{"id": 8033427, "category_id": 21, "iscrowd": 0, "bbox": [106, 250, 177, 135], "area": 11257}, {"id": 8820886, "category_id": 21, "iscrowd": 0, "bbox": [325, 310, 70, 43], "area": 2149}, {"id": 2578751, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 369], "area": 157346}, {"id": 14999243, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 444, 197], "area": 30641}, {"id": 4040084, "category_id": 193, "iscrowd": 0, "bbox": [0, 319, 640, 108], "area": 57491}, {"id": 5342358, "category_id": 197, "iscrowd": 0, "bbox": [112, 16, 351, 203], "area": 13127}, {"id": 13029309, "category_id": 199, "iscrowd": 0, "bbox": [151, 205, 111, 24], "area": 1013}], "file_name": "000000418281.png", "image_id": 418281}, {"segments_info": [{"id": 2177654, "category_id": 3, "iscrowd": 0, "bbox": [186, 272, 35, 22], "area": 617}, {"id": 460553, "category_id": 3, "iscrowd": 0, "bbox": [517, 276, 70, 32], "area": 1512}, {"id": 3559593, "category_id": 8, "iscrowd": 0, "bbox": [148, 268, 26, 20], "area": 401}, {"id": 9478723, "category_id": 10, "iscrowd": 0, "bbox": [349, 173, 10, 9], "area": 58}, {"id": 7309548, "category_id": 10, "iscrowd": 0, "bbox": [160, 155, 18, 27], "area": 352}, {"id": 1985177, "category_id": 10, "iscrowd": 0, "bbox": [361, 158, 8, 25], "area": 160}, {"id": 7318171, "category_id": 10, "iscrowd": 0, "bbox": [68, 259, 5, 6], "area": 20}, {"id": 9817434, "category_id": 10, "iscrowd": 0, "bbox": [98, 255, 7, 7], "area": 40}, {"id": 10213732, "category_id": 10, "iscrowd": 0, "bbox": [76, 256, 5, 7], "area": 25}, {"id": 3627940, "category_id": 128, "iscrowd": 0, "bbox": [132, 184, 145, 110], "area": 8504}, {"id": 8490165, "category_id": 130, "iscrowd": 0, "bbox": [63, 115, 366, 142], "area": 2019}, {"id": 931410, "category_id": 149, "iscrowd": 0, "bbox": [0, 271, 640, 156], "area": 81645}, {"id": 1120282, "category_id": 184, "iscrowd": 0, "bbox": [67, 170, 560, 132], "area": 6948}, {"id": 9591377, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 295], "area": 117439}, {"id": 594202, "category_id": 191, "iscrowd": 0, "bbox": [170, 274, 456, 45], "area": 2234}, {"id": 3360867, "category_id": 197, "iscrowd": 0, "bbox": [0, 26, 630, 285], "area": 47254}], "file_name": "000000418696.png", "image_id": 418696}, {"segments_info": [{"id": 11514299, "category_id": 16, "iscrowd": 0, "bbox": [255, 150, 81, 54], "area": 2783}, {"id": 6250055, "category_id": 178, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 270457}], "file_name": "000000418959.png", "image_id": 418959}, {"segments_info": [{"id": 7836317, "category_id": 85, "iscrowd": 0, "bbox": [161, 212, 126, 151], "area": 15285}, {"id": 792097, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 108975}], "file_name": "000000418961.png", "image_id": 418961}, {"segments_info": [{"id": 4472421, "category_id": 7, "iscrowd": 0, "bbox": [1, 230, 586, 217], "area": 99909}, {"id": 7500162, "category_id": 95, "iscrowd": 0, "bbox": [0, 166, 612, 116], "area": 33487}, {"id": 6913690, "category_id": 125, "iscrowd": 0, "bbox": [0, 384, 612, 228], "area": 81644}, {"id": 3814481, "category_id": 147, "iscrowd": 0, "bbox": [0, 365, 612, 208], "area": 21756}, {"id": 7701133, "category_id": 184, "iscrowd": 0, "bbox": [553, 89, 59, 132], "area": 4704}, {"id": 10858928, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 612, 212], "area": 107906}, {"id": 11389914, "category_id": 197, "iscrowd": 0, "bbox": [557, 258, 21, 28], "area": 344}, {"id": 3028567, "category_id": 199, "iscrowd": 0, "bbox": [0, 538, 203, 74], "area": 9422}], "file_name": "000000419096.png", "image_id": 419096}, {"segments_info": [{"id": 8336811, "category_id": 87, "iscrowd": 0, "bbox": [10, 19, 582, 534], "area": 175068}, {"id": 6567039, "category_id": 87, "iscrowd": 0, "bbox": [323, 294, 297, 254], "area": 25310}, {"id": 9780164, "category_id": 87, "iscrowd": 0, "bbox": [156, 122, 374, 384], "area": 27240}], "file_name": "000000419098.png", "image_id": 419098}, {"segments_info": [{"id": 2900040, "category_id": 16, "iscrowd": 0, "bbox": [50, 266, 18, 8], "area": 90}, {"id": 1449247, "category_id": 16, "iscrowd": 0, "bbox": [307, 237, 24, 11], "area": 80}, {"id": 3155743, "category_id": 16, "iscrowd": 0, "bbox": [213, 120, 27, 35], "area": 418}, {"id": 2303785, "category_id": 16, "iscrowd": 0, "bbox": [341, 185, 19, 16], "area": 149}, {"id": 3492943, "category_id": 19, "iscrowd": 0, "bbox": [448, 216, 14, 22], "area": 233}, {"id": 6123377, "category_id": 19, "iscrowd": 0, "bbox": [259, 244, 21, 22], "area": 308}, {"id": 5859431, "category_id": 19, "iscrowd": 0, "bbox": [396, 229, 50, 35], "area": 769}, {"id": 10519394, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 177], "area": 103981}, {"id": 4483182, "category_id": 192, "iscrowd": 0, "bbox": [0, 127, 640, 298], "area": 165852}], "file_name": "000000419201.png", "image_id": 419201}, {"segments_info": [{"id": 6848176, "category_id": 47, "iscrowd": 0, "bbox": [20, 10, 95, 137], "area": 7119}, {"id": 7243433, "category_id": 47, "iscrowd": 0, "bbox": [0, 70, 93, 165], "area": 11718}, {"id": 9740729, "category_id": 47, "iscrowd": 0, "bbox": [0, 0, 24, 78], "area": 1436}, {"id": 5531516, "category_id": 48, "iscrowd": 0, "bbox": [166, 331, 61, 164], "area": 3133}, {"id": 4149871, "category_id": 49, "iscrowd": 0, "bbox": [255, 244, 120, 45], "area": 1740}, {"id": 6057844, "category_id": 51, "iscrowd": 0, "bbox": [315, 0, 60, 87], "area": 3964}, {"id": 5002864, "category_id": 51, "iscrowd": 0, "bbox": [190, 0, 100, 24], "area": 1730}, {"id": 1261232, "category_id": 57, "iscrowd": 0, "bbox": [185, 316, 21, 16], "area": 229}, {"id": 997567, "category_id": 57, "iscrowd": 0, "bbox": [93, 357, 39, 18], "area": 403}, {"id": 1061551, "category_id": 57, "iscrowd": 0, "bbox": [96, 308, 84, 72], "area": 3972}, {"id": 4222374, "category_id": 61, "iscrowd": 0, "bbox": [245, 42, 92, 92], "area": 5891}, {"id": 5269651, "category_id": 67, "iscrowd": 0, "bbox": [0, 5, 375, 489], "area": 141466}, {"id": 6186372, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 4130}], "file_name": "000000419312.png", "image_id": 419312}, {"segments_info": [{"id": 2632241, "category_id": 1, "iscrowd": 0, "bbox": [144, 4, 125, 129], "area": 10560}, {"id": 4357519, "category_id": 60, "iscrowd": 0, "bbox": [87, 323, 116, 98], "area": 6922}, {"id": 5477027, "category_id": 60, "iscrowd": 0, "bbox": [20, 123, 118, 79], "area": 4742}, {"id": 4815506, "category_id": 60, "iscrowd": 0, "bbox": [179, 117, 143, 90], "area": 10286}, {"id": 4292760, "category_id": 60, "iscrowd": 0, "bbox": [42, 157, 141, 105], "area": 10426}, {"id": 4353683, "category_id": 189, "iscrowd": 0, "bbox": [0, 80, 427, 560], "area": 126038}, {"id": 7763060, "category_id": 190, "iscrowd": 0, "bbox": [35, 0, 379, 231], "area": 12073}, {"id": 7974298, "category_id": 195, "iscrowd": 0, "bbox": [129, 208, 185, 170], "area": 18846}, {"id": 6062752, "category_id": 196, "iscrowd": 0, "bbox": [406, 146, 21, 62], "area": 825}], "file_name": "000000419379.png", "image_id": 419379}, {"segments_info": [{"id": 5521737, "category_id": 1, "iscrowd": 0, "bbox": [227, 112, 134, 165], "area": 9892}, {"id": 5318455, "category_id": 1, "iscrowd": 0, "bbox": [488, 166, 144, 144], "area": 6836}, {"id": 6609893, "category_id": 3, "iscrowd": 0, "bbox": [19, 188, 75, 26], "area": 1392}, {"id": 9812148, "category_id": 3, "iscrowd": 0, "bbox": [480, 191, 65, 25], "area": 578}, {"id": 10868694, "category_id": 3, "iscrowd": 0, "bbox": [141, 194, 55, 27], "area": 1208}, {"id": 5851446, "category_id": 3, "iscrowd": 0, "bbox": [352, 193, 21, 13], "area": 149}, {"id": 4535859, "category_id": 15, "iscrowd": 0, "bbox": [435, 225, 144, 109], "area": 5969}, {"id": 4871239, "category_id": 15, "iscrowd": 0, "bbox": [626, 208, 14, 67], "area": 381}, {"id": 6975595, "category_id": 15, "iscrowd": 0, "bbox": [36, 216, 36, 13], "area": 268}, {"id": 6053972, "category_id": 15, "iscrowd": 0, "bbox": [539, 204, 58, 20], "area": 720}, {"id": 6383983, "category_id": 41, "iscrowd": 0, "bbox": [230, 257, 102, 33], "area": 983}, {"id": 4928067, "category_id": 41, "iscrowd": 0, "bbox": [583, 302, 48, 18], "area": 415}, {"id": 9481127, "category_id": 149, "iscrowd": 0, "bbox": [592, 197, 22, 18], "area": 210}, {"id": 5603181, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 378], "area": 128544}, {"id": 7703965, "category_id": 191, "iscrowd": 0, "bbox": [0, 250, 640, 179], "area": 46428}, {"id": 5613972, "category_id": 193, "iscrowd": 0, "bbox": [0, 198, 640, 109], "area": 10278}, {"id": 5131882, "category_id": 194, "iscrowd": 0, "bbox": [42, 285, 549, 130], "area": 18668}, {"id": 9487306, "category_id": 197, "iscrowd": 0, "bbox": [9, 67, 535, 161], "area": 22502}, {"id": 8627118, "category_id": 199, "iscrowd": 0, "bbox": [453, 182, 187, 27], "area": 1660}], "file_name": "000000419408.png", "image_id": 419408}, {"segments_info": [{"id": 921102, "category_id": 62, "iscrowd": 0, "bbox": [322, 157, 67, 61], "area": 2529}, {"id": 986381, "category_id": 62, "iscrowd": 0, "bbox": [460, 191, 40, 54], "area": 1757}, {"id": 6120812, "category_id": 63, "iscrowd": 0, "bbox": [150, 174, 191, 112], "area": 11698}, {"id": 1250326, "category_id": 63, "iscrowd": 0, "bbox": [35, 130, 174, 101], "area": 11715}, {"id": 5790825, "category_id": 84, "iscrowd": 0, "bbox": [145, 193, 40, 11], "area": 288}, {"id": 4211788, "category_id": 84, "iscrowd": 0, "bbox": [144, 200, 32, 7], "area": 89}, {"id": 7171181, "category_id": 84, "iscrowd": 0, "bbox": [407, 200, 26, 7], "area": 127}, {"id": 1184789, "category_id": 176, "iscrowd": 0, "bbox": [0, 187, 44, 36], "area": 686}, {"id": 10656919, "category_id": 180, "iscrowd": 0, "bbox": [357, 0, 143, 171], "area": 22456}, {"id": 7370351, "category_id": 188, "iscrowd": 0, "bbox": [72, 61, 125, 80], "area": 8073}, {"id": 2499881, "category_id": 189, "iscrowd": 0, "bbox": [398, 193, 57, 30], "area": 899}, {"id": 5065547, "category_id": 190, "iscrowd": 0, "bbox": [0, 173, 500, 156], "area": 23297}, {"id": 6974834, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 224], "area": 54390}, {"id": 4211272, "category_id": 200, "iscrowd": 0, "bbox": [0, 212, 378, 117], "area": 18276}], "file_name": "000000419601.png", "image_id": 419601}, {"segments_info": [{"id": 4611194, "category_id": 44, "iscrowd": 0, "bbox": [342, 221, 38, 125], "area": 3458}, {"id": 9607843, "category_id": 44, "iscrowd": 0, "bbox": [487, 65, 23, 67], "area": 1206}, {"id": 4478838, "category_id": 44, "iscrowd": 0, "bbox": [82, 290, 48, 85], "area": 3417}, {"id": 8757179, "category_id": 51, "iscrowd": 0, "bbox": [164, 321, 128, 83], "area": 8462}, {"id": 8425132, "category_id": 51, "iscrowd": 0, "bbox": [203, 390, 165, 88], "area": 12418}, {"id": 6910086, "category_id": 51, "iscrowd": 0, "bbox": [554, 447, 86, 33], "area": 2306}, {"id": 5784125, "category_id": 51, "iscrowd": 0, "bbox": [21, 349, 70, 29], "area": 1072}, {"id": 3686476, "category_id": 62, "iscrowd": 0, "bbox": [349, 180, 15, 62], "area": 584}, {"id": 8691104, "category_id": 62, "iscrowd": 0, "bbox": [337, 158, 15, 24], "area": 267}, {"id": 4080714, "category_id": 62, "iscrowd": 0, "bbox": [265, 172, 78, 103], "area": 5096}, {"id": 3821173, "category_id": 62, "iscrowd": 0, "bbox": [285, 227, 71, 150], "area": 4646}, {"id": 14868957, "category_id": 62, "iscrowd": 0, "bbox": [230, 152, 37, 65], "area": 1731}, {"id": 3162470, "category_id": 64, "iscrowd": 0, "bbox": [77, 68, 39, 71], "area": 1228}, {"id": 3097192, "category_id": 67, "iscrowd": 0, "bbox": [305, 219, 317, 200], "area": 10278}, {"id": 5923707, "category_id": 72, "iscrowd": 0, "bbox": [552, 12, 88, 112], "area": 7529}, {"id": 8547427, "category_id": 78, "iscrowd": 0, "bbox": [46, 137, 70, 76], "area": 4802}, {"id": 10061439, "category_id": 79, "iscrowd": 0, "bbox": [1, 192, 44, 161], "area": 6503}, {"id": 9735045, "category_id": 79, "iscrowd": 0, "bbox": [1, 41, 47, 154], "area": 6788}, {"id": 1845826, "category_id": 86, "iscrowd": 0, "bbox": [76, 103, 34, 37], "area": 1181}, {"id": 3949936, "category_id": 100, "iscrowd": 0, "bbox": [462, 299, 43, 69], "area": 1328}, {"id": 2632759, "category_id": 107, "iscrowd": 0, "bbox": [0, 191, 417, 289], "area": 8794}, {"id": 8754071, "category_id": 109, "iscrowd": 0, "bbox": [234, 13, 153, 153], "area": 10646}, {"id": 5136249, "category_id": 176, "iscrowd": 0, "bbox": [47, 105, 419, 220], "area": 19382}, {"id": 15659249, "category_id": 181, "iscrowd": 0, "bbox": [230, 47, 39, 117], "area": 3364}, {"id": 5596795, "category_id": 188, "iscrowd": 0, "bbox": [35, 0, 605, 364], "area": 53574}, {"id": 6780567, "category_id": 189, "iscrowd": 0, "bbox": [289, 179, 164, 199], "area": 1126}, {"id": 11839659, "category_id": 195, "iscrowd": 0, "bbox": [497, 83, 70, 227], "area": 2604}, {"id": 8361385, "category_id": 199, "iscrowd": 0, "bbox": [150, 0, 490, 323], "area": 34273}, {"id": 3819096, "category_id": 200, "iscrowd": 0, "bbox": [237, 288, 51, 52], "area": 1120}], "file_name": "000000419653.png", "image_id": 419653}, {"segments_info": [{"id": 398516, "category_id": 7, "iscrowd": 0, "bbox": [435, 211, 166, 117], "area": 6563}, {"id": 344259, "category_id": 7, "iscrowd": 0, "bbox": [384, 212, 210, 386], "area": 48828}, {"id": 400513, "category_id": 7, "iscrowd": 0, "bbox": [11, 211, 329, 186], "area": 10541}, {"id": 395974, "category_id": 7, "iscrowd": 0, "bbox": [456, 205, 148, 60], "area": 3012}, {"id": 475847, "category_id": 7, "iscrowd": 0, "bbox": [95, 212, 295, 390], "area": 46461}, {"id": 534703, "category_id": 7, "iscrowd": 0, "bbox": [12, 199, 300, 139], "area": 10434}, {"id": 335221, "category_id": 7, "iscrowd": 0, "bbox": [12, 208, 356, 373], "area": 33414}, {"id": 332184, "category_id": 147, "iscrowd": 0, "bbox": [417, 213, 180, 117], "area": 808}, {"id": 1798875, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 612, 186], "area": 99807}, {"id": 336614, "category_id": 190, "iscrowd": 0, "bbox": [432, 226, 169, 147], "area": 4402}, {"id": 595091, "category_id": 197, "iscrowd": 0, "bbox": [11, 125, 601, 153], "area": 38424}], "file_name": "000000419882.png", "image_id": 419882}, {"segments_info": [{"id": 3558517, "category_id": 1, "iscrowd": 0, "bbox": [109, 211, 46, 73], "area": 2113}, {"id": 1647154, "category_id": 1, "iscrowd": 0, "bbox": [181, 101, 186, 344], "area": 31262}, {"id": 1447983, "category_id": 15, "iscrowd": 0, "bbox": [45, 245, 90, 77], "area": 1710}, {"id": 1778479, "category_id": 18, "iscrowd": 0, "bbox": [62, 389, 130, 139], "area": 9495}, {"id": 4741749, "category_id": 44, "iscrowd": 0, "bbox": [53, 233, 14, 34], "area": 275}, {"id": 5135996, "category_id": 44, "iscrowd": 0, "bbox": [64, 235, 12, 35], "area": 266}, {"id": 2634563, "category_id": 44, "iscrowd": 0, "bbox": [337, 376, 83, 156], "area": 6374}, {"id": 3492451, "category_id": 46, "iscrowd": 0, "bbox": [266, 540, 44, 72], "area": 1757}, {"id": 4480892, "category_id": 47, "iscrowd": 0, "bbox": [295, 529, 75, 105], "area": 5529}, {"id": 3294817, "category_id": 48, "iscrowd": 0, "bbox": [337, 340, 12, 24], "area": 137}, {"id": 3491165, "category_id": 48, "iscrowd": 0, "bbox": [168, 288, 19, 8], "area": 55}, {"id": 5269630, "category_id": 49, "iscrowd": 0, "bbox": [195, 458, 154, 74], "area": 1726}, {"id": 3359846, "category_id": 49, "iscrowd": 0, "bbox": [130, 276, 16, 7], "area": 25}, {"id": 6513532, "category_id": 49, "iscrowd": 0, "bbox": [344, 379, 16, 9], "area": 73}, {"id": 4213089, "category_id": 49, "iscrowd": 0, "bbox": [295, 350, 31, 23], "area": 197}, {"id": 2964314, "category_id": 62, "iscrowd": 0, "bbox": [177, 307, 16, 56], "area": 512}, {"id": 3888991, "category_id": 64, "iscrowd": 0, "bbox": [155, 106, 65, 129], "area": 2535}, {"id": 2701634, "category_id": 64, "iscrowd": 0, "bbox": [174, 191, 18, 43], "area": 317}, {"id": 3362402, "category_id": 64, "iscrowd": 0, "bbox": [311, 250, 23, 26], "area": 380}, {"id": 3884367, "category_id": 64, "iscrowd": 0, "bbox": [158, 186, 25, 78], "area": 1271}, {"id": 3163245, "category_id": 64, "iscrowd": 0, "bbox": [299, 257, 11, 8], "area": 57}, {"id": 9805992, "category_id": 64, "iscrowd": 0, "bbox": [294, 228, 21, 43], "area": 454}, {"id": 3625334, "category_id": 67, "iscrowd": 0, "bbox": [112, 262, 82, 88], "area": 2400}, {"id": 3754849, "category_id": 67, "iscrowd": 0, "bbox": [95, 270, 331, 360], "area": 59560}, {"id": 2633793, "category_id": 79, "iscrowd": 0, "bbox": [0, 275, 99, 119], "area": 7684}, {"id": 2371647, "category_id": 107, "iscrowd": 0, "bbox": [0, 253, 426, 387], "area": 4862}, {"id": 2306638, "category_id": 118, "iscrowd": 0, "bbox": [0, 307, 195, 333], "area": 34036}, {"id": 2634811, "category_id": 130, "iscrowd": 0, "bbox": [164, 129, 55, 72], "area": 867}, {"id": 1976374, "category_id": 156, "iscrowd": 0, "bbox": [17, 28, 138, 163], "area": 10905}, {"id": 2702433, "category_id": 176, "iscrowd": 0, "bbox": [0, 207, 412, 80], "area": 2486}, {"id": 6519171, "category_id": 181, "iscrowd": 0, "bbox": [154, 92, 255, 167], "area": 11921}, {"id": 3160912, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 426, 72], "area": 19458}, {"id": 4741999, "category_id": 188, "iscrowd": 0, "bbox": [0, 13, 426, 403], "area": 10084}, {"id": 7435928, "category_id": 189, "iscrowd": 0, "bbox": [157, 262, 38, 29], "area": 346}, {"id": 460554, "category_id": 190, "iscrowd": 0, "bbox": [173, 287, 22, 56], "area": 249}, {"id": 2438738, "category_id": 199, "iscrowd": 0, "bbox": [8, 19, 418, 303], "area": 28311}], "file_name": "000000419974.png", "image_id": 419974}, {"segments_info": [{"id": 3755104, "category_id": 1, "iscrowd": 0, "bbox": [3, 199, 9, 22], "area": 122}, {"id": 5992325, "category_id": 1, "iscrowd": 0, "bbox": [581, 197, 14, 26], "area": 209}, {"id": 5597568, "category_id": 1, "iscrowd": 0, "bbox": [570, 203, 7, 14], "area": 56}, {"id": 4477537, "category_id": 1, "iscrowd": 0, "bbox": [62, 148, 98, 309], "area": 18493}, {"id": 5728637, "category_id": 1, "iscrowd": 0, "bbox": [277, 188, 7, 14], "area": 70}, {"id": 5333621, "category_id": 1, "iscrowd": 0, "bbox": [514, 187, 20, 55], "area": 691}, {"id": 4675949, "category_id": 1, "iscrowd": 0, "bbox": [301, 178, 47, 134], "area": 3874}, {"id": 5268344, "category_id": 1, "iscrowd": 0, "bbox": [38, 190, 25, 29], "area": 266}, {"id": 5662586, "category_id": 1, "iscrowd": 0, "bbox": [228, 187, 13, 29], "area": 201}, {"id": 5859707, "category_id": 1, "iscrowd": 0, "bbox": [409, 190, 11, 26], "area": 160}, {"id": 7507369, "category_id": 37, "iscrowd": 0, "bbox": [437, 153, 4, 4], "area": 14}, {"id": 9872051, "category_id": 39, "iscrowd": 0, "bbox": [32, 269, 33, 3], "area": 66}, {"id": 6256786, "category_id": 39, "iscrowd": 0, "bbox": [310, 159, 26, 48], "area": 300}, {"id": 4674918, "category_id": 39, "iscrowd": 0, "bbox": [23, 271, 30, 4], "area": 67}, {"id": 10002861, "category_id": 39, "iscrowd": 0, "bbox": [11, 264, 54, 6], "area": 132}, {"id": 2766147, "category_id": 62, "iscrowd": 0, "bbox": [35, 196, 14, 16], "area": 93}, {"id": 7375011, "category_id": 145, "iscrowd": 0, "bbox": [0, 182, 640, 275], "area": 145010}, {"id": 3491934, "category_id": 184, "iscrowd": 0, "bbox": [0, 67, 640, 140], "area": 38897}, {"id": 11911376, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 158], "area": 83207}], "file_name": "000000420069.png", "image_id": 420069}, {"segments_info": [{"id": 2964301, "category_id": 22, "iscrowd": 0, "bbox": [21, 20, 374, 607], "area": 160046}, {"id": 3426127, "category_id": 178, "iscrowd": 0, "bbox": [0, 249, 427, 125], "area": 10774}, {"id": 6192029, "category_id": 194, "iscrowd": 0, "bbox": [0, 345, 121, 284], "area": 22612}], "file_name": "000000420230.png", "image_id": 420230}, {"segments_info": [{"id": 4737624, "category_id": 1, "iscrowd": 0, "bbox": [1, 23, 479, 610], "area": 199786}, {"id": 1976121, "category_id": 1, "iscrowd": 0, "bbox": [418, 219, 62, 210], "area": 8530}, {"id": 4674649, "category_id": 1, "iscrowd": 0, "bbox": [0, 255, 57, 163], "area": 5790}, {"id": 5335435, "category_id": 58, "iscrowd": 0, "bbox": [149, 384, 89, 122], "area": 8859}, {"id": 9347769, "category_id": 109, "iscrowd": 0, "bbox": [323, 8, 157, 358], "area": 43567}, {"id": 9876680, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 402], "area": 36103}], "file_name": "000000420281.png", "image_id": 420281}, {"segments_info": [{"id": 5330027, "category_id": 25, "iscrowd": 0, "bbox": [4, 48, 309, 320], "area": 31734}, {"id": 6579837, "category_id": 25, "iscrowd": 0, "bbox": [331, 210, 309, 159], "area": 21139}, {"id": 1782838, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 373], "area": 184383}], "file_name": "000000420472.png", "image_id": 420472}, {"segments_info": [{"id": 2507867, "category_id": 1, "iscrowd": 0, "bbox": [209, 0, 220, 54], "area": 4548}, {"id": 1315346, "category_id": 1, "iscrowd": 0, "bbox": [508, 1, 132, 247], "area": 19659}, {"id": 4416131, "category_id": 1, "iscrowd": 0, "bbox": [177, 9, 285, 408], "area": 89480}, {"id": 8361647, "category_id": 61, "iscrowd": 0, "bbox": [548, 267, 60, 44], "area": 1840}, {"id": 230781, "category_id": 62, "iscrowd": 0, "bbox": [115, 359, 71, 65], "area": 2451}, {"id": 8417149, "category_id": 67, "iscrowd": 0, "bbox": [492, 206, 148, 213], "area": 22959}, {"id": 1391710, "category_id": 177, "iscrowd": 0, "bbox": [31, 0, 42, 222], "area": 6290}, {"id": 8171148, "category_id": 184, "iscrowd": 0, "bbox": [384, 0, 195, 128], "area": 14099}, {"id": 7111042, "category_id": 190, "iscrowd": 0, "bbox": [0, 110, 543, 314], "area": 62231}, {"id": 8022393, "category_id": 197, "iscrowd": 0, "bbox": [494, 405, 146, 19], "area": 781}, {"id": 5670804, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 253, 296], "area": 43900}, {"id": 10121853, "category_id": 200, "iscrowd": 0, "bbox": [568, 203, 53, 6], "area": 152}], "file_name": "000000420840.png", "image_id": 420840}, {"segments_info": [{"id": 4086108, "category_id": 1, "iscrowd": 0, "bbox": [445, 188, 94, 147], "area": 5943}, {"id": 5202037, "category_id": 1, "iscrowd": 0, "bbox": [285, 193, 176, 164], "area": 11127}, {"id": 3551616, "category_id": 1, "iscrowd": 0, "bbox": [529, 174, 84, 88], "area": 4818}, {"id": 3684474, "category_id": 15, "iscrowd": 0, "bbox": [266, 245, 371, 150], "area": 25087}, {"id": 1184022, "category_id": 27, "iscrowd": 0, "bbox": [221, 352, 64, 48], "area": 2332}, {"id": 7104082, "category_id": 148, "iscrowd": 0, "bbox": [0, 158, 640, 166], "area": 60379}, {"id": 13412732, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 512, 82], "area": 25753}, {"id": 7239032, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 187], "area": 82076}, {"id": 6847367, "category_id": 194, "iscrowd": 0, "bbox": [0, 264, 640, 136], "area": 31941}], "file_name": "000000420916.png", "image_id": 420916}, {"segments_info": [{"id": 5790544, "category_id": 1, "iscrowd": 0, "bbox": [141, 150, 151, 127], "area": 11363}, {"id": 5390634, "category_id": 1, "iscrowd": 0, "bbox": [575, 21, 3, 6], "area": 10}, {"id": 3818338, "category_id": 1, "iscrowd": 0, "bbox": [0, 265, 6, 14], "area": 51}, {"id": 2369314, "category_id": 1, "iscrowd": 0, "bbox": [604, 177, 16, 52], "area": 571}, {"id": 5527901, "category_id": 1, "iscrowd": 0, "bbox": [29, 253, 6, 16], "area": 67}, {"id": 5070712, "category_id": 1, "iscrowd": 0, "bbox": [133, 90, 4, 6], "area": 15}, {"id": 7636410, "category_id": 1, "iscrowd": 0, "bbox": [107, 89, 4, 8], "area": 19}, {"id": 6450291, "category_id": 1, "iscrowd": 0, "bbox": [24, 253, 5, 13], "area": 46}, {"id": 8754359, "category_id": 1, "iscrowd": 0, "bbox": [139, 88, 5, 11], "area": 34}, {"id": 1184016, "category_id": 1, "iscrowd": 0, "bbox": [618, 176, 17, 19], "area": 182}, {"id": 7764874, "category_id": 1, "iscrowd": 0, "bbox": [5, 268, 2, 12], "area": 20}, {"id": 1578260, "category_id": 1, "iscrowd": 0, "bbox": [630, 177, 10, 52], "area": 286}, {"id": 7168039, "category_id": 1, "iscrowd": 0, "bbox": [304, 212, 14, 11], "area": 103}, {"id": 8816264, "category_id": 1, "iscrowd": 1, "bbox": [306, 5, 330, 229], "area": 3226}, {"id": 6643591, "category_id": 35, "iscrowd": 0, "bbox": [84, 223, 167, 88], "area": 1991}, {"id": 10130827, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 418], "area": 219298}, {"id": 4801606, "category_id": 185, "iscrowd": 0, "bbox": [0, 193, 609, 76], "area": 12724}, {"id": 8294569, "category_id": 197, "iscrowd": 0, "bbox": [0, 109, 184, 131], "area": 11726}], "file_name": "000000421060.png", "image_id": 421060}, {"segments_info": [{"id": 4077897, "category_id": 1, "iscrowd": 0, "bbox": [46, 85, 170, 285], "area": 23875}, {"id": 3354932, "category_id": 3, "iscrowd": 0, "bbox": [3, 2, 454, 363], "area": 76482}, {"id": 5458257, "category_id": 8, "iscrowd": 0, "bbox": [444, 289, 33, 30], "area": 731}, {"id": 3024689, "category_id": 18, "iscrowd": 0, "bbox": [202, 102, 158, 243], "area": 14863}, {"id": 3813685, "category_id": 77, "iscrowd": 0, "bbox": [46, 185, 121, 180], "area": 15198}, {"id": 13751522, "category_id": 149, "iscrowd": 0, "bbox": [420, 274, 80, 101], "area": 4487}, {"id": 8620425, "category_id": 184, "iscrowd": 0, "bbox": [384, 51, 116, 242], "area": 13951}, {"id": 16250871, "category_id": 187, "iscrowd": 0, "bbox": [236, 0, 264, 280], "area": 28080}], "file_name": "000000421455.png", "image_id": 421455}, {"segments_info": [{"id": 5659789, "category_id": 1, "iscrowd": 0, "bbox": [457, 219, 8, 11], "area": 58}, {"id": 9014409, "category_id": 9, "iscrowd": 0, "bbox": [25, 116, 258, 157], "area": 19062}, {"id": 7699064, "category_id": 9, "iscrowd": 0, "bbox": [289, 156, 213, 106], "area": 11721}, {"id": 7499618, "category_id": 148, "iscrowd": 0, "bbox": [0, 213, 640, 267], "area": 147975}, {"id": 3227185, "category_id": 184, "iscrowd": 0, "bbox": [0, 166, 640, 65], "area": 12990}, {"id": 13941407, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 196], "area": 115073}], "file_name": "000000421757.png", "image_id": 421757}, {"segments_info": [{"id": 2311085, "category_id": 16, "iscrowd": 0, "bbox": [57, 161, 362, 114], "area": 5051}, {"id": 1128789, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 457], "area": 179062}, {"id": 3167347, "category_id": 196, "iscrowd": 0, "bbox": [96, 0, 256, 295], "area": 56258}], "file_name": "000000421834.png", "image_id": 421834}, {"segments_info": [{"id": 4350060, "category_id": 47, "iscrowd": 0, "bbox": [360, 528, 53, 94], "area": 3483}, {"id": 13292244, "category_id": 64, "iscrowd": 0, "bbox": [248, 308, 178, 332], "area": 27359}, {"id": 3882865, "category_id": 84, "iscrowd": 0, "bbox": [183, 310, 113, 25], "area": 1754}, {"id": 6318706, "category_id": 84, "iscrowd": 0, "bbox": [156, 128, 62, 106], "area": 2351}, {"id": 2895280, "category_id": 84, "iscrowd": 0, "bbox": [178, 138, 51, 94], "area": 2812}, {"id": 4279652, "category_id": 84, "iscrowd": 0, "bbox": [92, 124, 10, 111], "area": 352}, {"id": 4871010, "category_id": 84, "iscrowd": 0, "bbox": [185, 207, 115, 15], "area": 1528}, {"id": 4871784, "category_id": 84, "iscrowd": 0, "bbox": [166, 260, 59, 99], "area": 3366}, {"id": 4281981, "category_id": 84, "iscrowd": 0, "bbox": [185, 221, 114, 13], "area": 1285}, {"id": 4082026, "category_id": 84, "iscrowd": 0, "bbox": [187, 190, 108, 18], "area": 1584}, {"id": 4873083, "category_id": 84, "iscrowd": 0, "bbox": [95, 122, 29, 112], "area": 2287}, {"id": 3290194, "category_id": 84, "iscrowd": 0, "bbox": [186, 326, 117, 41], "area": 3255}, {"id": 3760482, "category_id": 86, "iscrowd": 0, "bbox": [357, 495, 69, 138], "area": 4354}, {"id": 2444940, "category_id": 118, "iscrowd": 0, "bbox": [0, 424, 373, 216], "area": 62111}, {"id": 9739420, "category_id": 119, "iscrowd": 0, "bbox": [254, 305, 172, 274], "area": 1561}, {"id": 2040119, "category_id": 156, "iscrowd": 0, "bbox": [0, 17, 426, 358], "area": 21402}, {"id": 6186356, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 426, 463], "area": 93488}, {"id": 1645090, "category_id": 186, "iscrowd": 0, "bbox": [52, 0, 203, 52], "area": 5425}], "file_name": "000000421923.png", "image_id": 421923}, {"segments_info": [{"id": 4147055, "category_id": 1, "iscrowd": 0, "bbox": [34, 250, 281, 177], "area": 20765}, {"id": 5134714, "category_id": 1, "iscrowd": 0, "bbox": [192, 48, 393, 364], "area": 83996}, {"id": 8163499, "category_id": 65, "iscrowd": 0, "bbox": [27, 3, 612, 418], "area": 116915}, {"id": 7111340, "category_id": 84, "iscrowd": 0, "bbox": [163, 148, 77, 133], "area": 4316}, {"id": 3356528, "category_id": 141, "iscrowd": 0, "bbox": [17, 280, 83, 59], "area": 1621}], "file_name": "000000422670.png", "image_id": 422670}, {"segments_info": [{"id": 12106182, "category_id": 1, "iscrowd": 0, "bbox": [0, 6, 185, 151], "area": 5818}, {"id": 7900591, "category_id": 1, "iscrowd": 0, "bbox": [5, 21, 144, 204], "area": 16100}, {"id": 3881801, "category_id": 1, "iscrowd": 0, "bbox": [252, 266, 10, 9], "area": 60}, {"id": 8487877, "category_id": 1, "iscrowd": 0, "bbox": [1, 141, 119, 176], "area": 5531}, {"id": 7901893, "category_id": 9, "iscrowd": 0, "bbox": [165, 174, 120, 141], "area": 12228}, {"id": 1316642, "category_id": 31, "iscrowd": 0, "bbox": [19, 208, 55, 92], "area": 1890}, {"id": 9397062, "category_id": 155, "iscrowd": 0, "bbox": [139, 11, 501, 416], "area": 176982}, {"id": 5928889, "category_id": 177, "iscrowd": 0, "bbox": [29, 151, 129, 276], "area": 22674}, {"id": 14869984, "category_id": 185, "iscrowd": 0, "bbox": [137, 113, 14, 39], "area": 331}, {"id": 15324352, "category_id": 187, "iscrowd": 0, "bbox": [120, 0, 520, 64], "area": 17285}, {"id": 9156820, "category_id": 190, "iscrowd": 0, "bbox": [4, 258, 58, 169], "area": 4020}], "file_name": "000000422706.png", "image_id": 422706}, {"segments_info": [{"id": 3557217, "category_id": 1, "iscrowd": 0, "bbox": [120, 158, 15, 17], "area": 90}, {"id": 2698037, "category_id": 1, "iscrowd": 0, "bbox": [23, 155, 13, 35], "area": 183}, {"id": 14604508, "category_id": 1, "iscrowd": 0, "bbox": [270, 2, 50, 235], "area": 7054}, {"id": 4011060, "category_id": 1, "iscrowd": 0, "bbox": [96, 1, 132, 233], "area": 14830}, {"id": 1380883, "category_id": 33, "iscrowd": 0, "bbox": [161, 119, 85, 100], "area": 3299}, {"id": 4940673, "category_id": 62, "iscrowd": 0, "bbox": [158, 163, 8, 17], "area": 71}, {"id": 1253944, "category_id": 62, "iscrowd": 0, "bbox": [109, 166, 3, 15], "area": 37}, {"id": 2044491, "category_id": 62, "iscrowd": 0, "bbox": [11, 163, 15, 22], "area": 220}, {"id": 1910843, "category_id": 62, "iscrowd": 0, "bbox": [80, 162, 18, 25], "area": 362}, {"id": 4345183, "category_id": 62, "iscrowd": 0, "bbox": [155, 164, 8, 21], "area": 90}, {"id": 2439765, "category_id": 62, "iscrowd": 0, "bbox": [111, 165, 6, 17], "area": 74}, {"id": 2767704, "category_id": 62, "iscrowd": 0, "bbox": [140, 163, 12, 20], "area": 109}, {"id": 2438475, "category_id": 62, "iscrowd": 0, "bbox": [41, 165, 14, 21], "area": 213}, {"id": 2174018, "category_id": 62, "iscrowd": 0, "bbox": [104, 164, 6, 20], "area": 90}, {"id": 3163744, "category_id": 62, "iscrowd": 0, "bbox": [97, 164, 7, 20], "area": 108}, {"id": 2372167, "category_id": 62, "iscrowd": 0, "bbox": [122, 163, 13, 20], "area": 99}, {"id": 5007250, "category_id": 64, "iscrowd": 0, "bbox": [20, 82, 22, 22], "area": 358}, {"id": 2966615, "category_id": 67, "iscrowd": 0, "bbox": [82, 166, 12, 3], "area": 33}, {"id": 5264997, "category_id": 67, "iscrowd": 0, "bbox": [48, 167, 6, 2], "area": 10}, {"id": 1583947, "category_id": 67, "iscrowd": 0, "bbox": [0, 167, 6, 8], "area": 33}, {"id": 2634560, "category_id": 67, "iscrowd": 0, "bbox": [116, 165, 11, 3], "area": 30}, {"id": 2305082, "category_id": 67, "iscrowd": 0, "bbox": [18, 167, 11, 3], "area": 15}, {"id": 8752800, "category_id": 186, "iscrowd": 0, "bbox": [0, 100, 156, 30], "area": 2763}, {"id": 9408404, "category_id": 191, "iscrowd": 0, "bbox": [0, 179, 313, 61], "area": 9610}, {"id": 7172475, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 320, 186], "area": 29027}], "file_name": "000000422836.png", "image_id": 422836}, {"segments_info": [{"id": 8293269, "category_id": 1, "iscrowd": 0, "bbox": [22, 29, 618, 604], "area": 218229}, {"id": 4042708, "category_id": 58, "iscrowd": 0, "bbox": [266, 254, 142, 196], "area": 19913}, {"id": 461325, "category_id": 63, "iscrowd": 0, "bbox": [0, 447, 355, 193], "area": 51586}, {"id": 396571, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 504], "area": 114877}], "file_name": "000000422886.png", "image_id": 422886}, {"segments_info": [{"id": 3363446, "category_id": 1, "iscrowd": 0, "bbox": [1, 1, 517, 320], "area": 120642}, {"id": 6198443, "category_id": 44, "iscrowd": 0, "bbox": [47, 197, 89, 230], "area": 17412}, {"id": 2717851, "category_id": 44, "iscrowd": 0, "bbox": [423, 202, 85, 225], "area": 15592}, {"id": 3032672, "category_id": 49, "iscrowd": 0, "bbox": [123, 381, 114, 38], "area": 1874}, {"id": 3635116, "category_id": 54, "iscrowd": 0, "bbox": [325, 222, 113, 125], "area": 9648}, {"id": 5072000, "category_id": 189, "iscrowd": 0, "bbox": [108, 181, 479, 246], "area": 34771}, {"id": 12240595, "category_id": 195, "iscrowd": 0, "bbox": [524, 15, 116, 257], "area": 18883}, {"id": 3163527, "category_id": 196, "iscrowd": 0, "bbox": [319, 240, 42, 44], "area": 1017}, {"id": 6190731, "category_id": 199, "iscrowd": 0, "bbox": [466, 0, 174, 197], "area": 11312}], "file_name": "000000422998.png", "image_id": 422998}, {"segments_info": [{"id": 8421761, "category_id": 1, "iscrowd": 0, "bbox": [168, 238, 95, 180], "area": 5714}, {"id": 15397874, "category_id": 34, "iscrowd": 0, "bbox": [210, 218, 16, 24], "area": 314}, {"id": 9617072, "category_id": 145, "iscrowd": 0, "bbox": [0, 315, 427, 325], "area": 130364}, {"id": 4012602, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 329], "area": 94659}, {"id": 5658709, "category_id": 185, "iscrowd": 0, "bbox": [0, 268, 427, 71], "area": 14144}, {"id": 5394768, "category_id": 197, "iscrowd": 0, "bbox": [110, 0, 133, 341], "area": 27593}], "file_name": "000000423104.png", "image_id": 423104}, {"segments_info": [{"id": 1384483, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 50, 141], "area": 3805}, {"id": 3359050, "category_id": 1, "iscrowd": 0, "bbox": [178, 45, 253, 308], "area": 14568}, {"id": 2829622, "category_id": 1, "iscrowd": 0, "bbox": [36, 90, 352, 331], "area": 44403}, {"id": 2956562, "category_id": 1, "iscrowd": 0, "bbox": [495, 230, 145, 195], "area": 14709}, {"id": 3940371, "category_id": 27, "iscrowd": 0, "bbox": [3, 82, 300, 217], "area": 25692}, {"id": 5455925, "category_id": 77, "iscrowd": 0, "bbox": [309, 245, 34, 11], "area": 225}, {"id": 7631218, "category_id": 82, "iscrowd": 0, "bbox": [318, 149, 252, 272], "area": 38319}, {"id": 1451320, "category_id": 100, "iscrowd": 0, "bbox": [438, 302, 116, 124], "area": 6820}, {"id": 10320165, "category_id": 112, "iscrowd": 0, "bbox": [235, 0, 164, 71], "area": 7983}, {"id": 13420737, "category_id": 181, "iscrowd": 0, "bbox": [376, 0, 136, 153], "area": 11673}, {"id": 6181706, "category_id": 190, "iscrowd": 0, "bbox": [0, 206, 457, 220], "area": 33019}, {"id": 8950162, "category_id": 199, "iscrowd": 0, "bbox": [27, 0, 613, 337], "area": 62167}], "file_name": "000000423123.png", "image_id": 423123}, {"segments_info": [{"id": 8554142, "category_id": 1, "iscrowd": 0, "bbox": [582, 191, 6, 11], "area": 51}, {"id": 12432053, "category_id": 1, "iscrowd": 0, "bbox": [450, 190, 6, 29], "area": 105}, {"id": 8034732, "category_id": 1, "iscrowd": 0, "bbox": [606, 198, 6, 15], "area": 42}, {"id": 6318465, "category_id": 1, "iscrowd": 0, "bbox": [423, 192, 13, 17], "area": 122}, {"id": 4802645, "category_id": 1, "iscrowd": 0, "bbox": [588, 191, 7, 15], "area": 78}, {"id": 5723488, "category_id": 1, "iscrowd": 0, "bbox": [575, 193, 6, 12], "area": 51}, {"id": 4473930, "category_id": 1, "iscrowd": 0, "bbox": [470, 215, 29, 38], "area": 260}, {"id": 4280418, "category_id": 1, "iscrowd": 0, "bbox": [599, 194, 14, 26], "area": 135}, {"id": 3289399, "category_id": 1, "iscrowd": 0, "bbox": [572, 200, 17, 22], "area": 249}, {"id": 1316377, "category_id": 1, "iscrowd": 0, "bbox": [485, 197, 19, 36], "area": 336}, {"id": 2830905, "category_id": 7, "iscrowd": 0, "bbox": [259, 111, 368, 239], "area": 45596}, {"id": 4543322, "category_id": 10, "iscrowd": 0, "bbox": [242, 60, 17, 28], "area": 300}, {"id": 6191497, "category_id": 125, "iscrowd": 0, "bbox": [63, 266, 485, 157], "area": 11430}, {"id": 5991805, "category_id": 147, "iscrowd": 0, "bbox": [79, 261, 484, 162], "area": 11154}, {"id": 5137771, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 359], "area": 107718}, {"id": 15329510, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 483, 147], "area": 42716}, {"id": 3897710, "category_id": 193, "iscrowd": 0, "bbox": [0, 252, 640, 171], "area": 46693}], "file_name": "000000423229.png", "image_id": 423229}, {"segments_info": [{"id": 5855342, "category_id": 1, "iscrowd": 0, "bbox": [188, 69, 186, 431], "area": 62198}, {"id": 5992318, "category_id": 1, "iscrowd": 0, "bbox": [3, 27, 231, 382], "area": 63220}, {"id": 3096385, "category_id": 32, "iscrowd": 0, "bbox": [89, 264, 74, 236], "area": 9108}, {"id": 6320529, "category_id": 32, "iscrowd": 0, "bbox": [252, 289, 67, 85], "area": 2579}, {"id": 4802638, "category_id": 47, "iscrowd": 0, "bbox": [277, 481, 63, 19], "area": 994}, {"id": 1713996, "category_id": 151, "iscrowd": 0, "bbox": [68, 0, 307, 32], "area": 8078}, {"id": 3294315, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 250], "area": 25186}], "file_name": "000000423506.png", "image_id": 423506}, {"segments_info": [{"id": 4213074, "category_id": 6, "iscrowd": 0, "bbox": [14, 228, 435, 302], "area": 103440}, {"id": 6251104, "category_id": 149, "iscrowd": 0, "bbox": [0, 371, 460, 269], "area": 60873}, {"id": 2306857, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 460, 376], "area": 34455}, {"id": 13936515, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 460, 306], "area": 88018}, {"id": 6844529, "category_id": 191, "iscrowd": 0, "bbox": [0, 471, 67, 169], "area": 5793}, {"id": 5722191, "category_id": 197, "iscrowd": 0, "bbox": [438, 358, 22, 70], "area": 1082}], "file_name": "000000423519.png", "image_id": 423519}, {"segments_info": [{"id": 8219734, "category_id": 1, "iscrowd": 0, "bbox": [160, 314, 29, 25], "area": 427}, {"id": 4010852, "category_id": 1, "iscrowd": 0, "bbox": [15, 62, 17, 38], "area": 254}, {"id": 6114362, "category_id": 1, "iscrowd": 0, "bbox": [452, 368, 34, 22], "area": 270}, {"id": 1249562, "category_id": 1, "iscrowd": 0, "bbox": [323, 247, 21, 23], "area": 343}, {"id": 3748394, "category_id": 1, "iscrowd": 0, "bbox": [121, 116, 24, 21], "area": 267}, {"id": 10261388, "category_id": 3, "iscrowd": 0, "bbox": [0, 153, 56, 69], "area": 3297}, {"id": 4688260, "category_id": 3, "iscrowd": 0, "bbox": [127, 290, 138, 112], "area": 11327}, {"id": 11903125, "category_id": 3, "iscrowd": 0, "bbox": [338, 467, 117, 13], "area": 1074}, {"id": 7630445, "category_id": 3, "iscrowd": 0, "bbox": [408, 341, 157, 125], "area": 14097}, {"id": 6379622, "category_id": 4, "iscrowd": 0, "bbox": [15, 80, 18, 26], "area": 302}, {"id": 6907250, "category_id": 6, "iscrowd": 0, "bbox": [51, 42, 154, 160], "area": 14851}, {"id": 5328729, "category_id": 6, "iscrowd": 0, "bbox": [150, 119, 292, 220], "area": 37414}, {"id": 6843250, "category_id": 149, "iscrowd": 0, "bbox": [0, 27, 580, 453], "area": 77758}, {"id": 3488308, "category_id": 161, "iscrowd": 0, "bbox": [196, 56, 40, 20], "area": 650}, {"id": 3619639, "category_id": 184, "iscrowd": 0, "bbox": [58, 0, 582, 480], "area": 24414}, {"id": 6249820, "category_id": 191, "iscrowd": 0, "bbox": [19, 0, 621, 409], "area": 11323}, {"id": 3494463, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 68521}, {"id": 4540230, "category_id": 199, "iscrowd": 0, "bbox": [373, 0, 267, 292], "area": 7311}], "file_name": "000000423617.png", "image_id": 423617}, {"segments_info": [{"id": 1788768, "category_id": 10, "iscrowd": 0, "bbox": [49, 151, 15, 40], "area": 390}, {"id": 1001582, "category_id": 10, "iscrowd": 0, "bbox": [357, 231, 6, 9], "area": 41}, {"id": 1392749, "category_id": 10, "iscrowd": 0, "bbox": [344, 231, 7, 9], "area": 55}, {"id": 5929605, "category_id": 10, "iscrowd": 0, "bbox": [58, 149, 20, 28], "area": 480}, {"id": 862796, "category_id": 10, "iscrowd": 0, "bbox": [456, 228, 8, 11], "area": 71}, {"id": 1138826, "category_id": 10, "iscrowd": 0, "bbox": [285, 181, 5, 16], "area": 77}, {"id": 7042688, "category_id": 10, "iscrowd": 0, "bbox": [115, 191, 15, 20], "area": 208}, {"id": 10800868, "category_id": 130, "iscrowd": 0, "bbox": [236, 30, 128, 178], "area": 891}, {"id": 1207452, "category_id": 149, "iscrowd": 0, "bbox": [0, 255, 640, 65], "area": 28047}, {"id": 598575, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 272], "area": 88871}, {"id": 340559, "category_id": 185, "iscrowd": 0, "bbox": [0, 251, 129, 36], "area": 3581}, {"id": 598061, "category_id": 187, "iscrowd": 0, "bbox": [110, 0, 530, 261], "area": 72321}, {"id": 3565961, "category_id": 193, "iscrowd": 0, "bbox": [198, 250, 406, 36], "area": 4930}, {"id": 6716566, "category_id": 194, "iscrowd": 0, "bbox": [588, 239, 52, 35], "area": 1056}, {"id": 3243426, "category_id": 197, "iscrowd": 0, "bbox": [165, 237, 38, 33], "area": 614}], "file_name": "000000423798.png", "image_id": 423798}, {"segments_info": [{"id": 65796, "category_id": 32, "iscrowd": 0, "bbox": [92, 209, 16, 90], "area": 900}, {"id": 2039144, "category_id": 190, "iscrowd": 0, "bbox": [0, 536, 448, 104], "area": 31421}, {"id": 13806832, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 448, 552], "area": 182799}], "file_name": "000000423944.png", "image_id": 423944}, {"segments_info": [{"id": 8892121, "category_id": 70, "iscrowd": 0, "bbox": [224, 0, 174, 425], "area": 62194}, {"id": 662356, "category_id": 118, "iscrowd": 0, "bbox": [199, 305, 287, 120], "area": 14904}, {"id": 331566, "category_id": 189, "iscrowd": 0, "bbox": [513, 98, 127, 257], "area": 14534}, {"id": 10535913, "category_id": 195, "iscrowd": 0, "bbox": [96, 180, 544, 245], "area": 4995}, {"id": 1391212, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 130061}], "file_name": "000000423971.png", "image_id": 423971}, {"segments_info": [{"id": 4871501, "category_id": 1, "iscrowd": 0, "bbox": [254, 304, 63, 141], "area": 4704}, {"id": 4146504, "category_id": 1, "iscrowd": 0, "bbox": [155, 265, 54, 120], "area": 3005}, {"id": 6847354, "category_id": 85, "iscrowd": 0, "bbox": [130, 153, 262, 426], "area": 67185}, {"id": 8555654, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 231913}], "file_name": "000000424135.png", "image_id": 424135}, {"segments_info": [{"id": 3618113, "category_id": 1, "iscrowd": 0, "bbox": [296, 134, 143, 336], "area": 12149}, {"id": 3287875, "category_id": 1, "iscrowd": 0, "bbox": [455, 120, 134, 357], "area": 16359}, {"id": 3748659, "category_id": 1, "iscrowd": 0, "bbox": [352, 127, 106, 121], "area": 2892}, {"id": 4732716, "category_id": 2, "iscrowd": 0, "bbox": [518, 156, 31, 24], "area": 260}, {"id": 4209979, "category_id": 2, "iscrowd": 0, "bbox": [372, 258, 78, 190], "area": 3125}, {"id": 2960171, "category_id": 2, "iscrowd": 0, "bbox": [482, 241, 114, 239], "area": 12716}, {"id": 4671046, "category_id": 2, "iscrowd": 0, "bbox": [306, 230, 117, 244], "area": 10896}, {"id": 5722962, "category_id": 3, "iscrowd": 0, "bbox": [584, 171, 32, 33], "area": 864}, {"id": 9275522, "category_id": 3, "iscrowd": 0, "bbox": [446, 156, 19, 17], "area": 243}, {"id": 3814447, "category_id": 3, "iscrowd": 0, "bbox": [3, 174, 120, 129], "area": 13489}, {"id": 2696481, "category_id": 8, "iscrowd": 0, "bbox": [182, 114, 144, 93], "area": 12268}, {"id": 4541266, "category_id": 18, "iscrowd": 0, "bbox": [76, 294, 159, 185], "area": 14416}, {"id": 2498348, "category_id": 27, "iscrowd": 0, "bbox": [417, 164, 131, 72], "area": 882}, {"id": 11580082, "category_id": 149, "iscrowd": 0, "bbox": [0, 163, 640, 349], "area": 47178}, {"id": 1974557, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 253], "area": 86128}, {"id": 9606292, "category_id": 191, "iscrowd": 0, "bbox": [0, 202, 640, 291], "area": 67439}, {"id": 2434082, "category_id": 197, "iscrowd": 0, "bbox": [12, 105, 459, 72], "area": 4170}, {"id": 5065800, "category_id": 199, "iscrowd": 0, "bbox": [447, 129, 169, 49], "area": 1077}], "file_name": "000000424162.png", "image_id": 424162}, {"segments_info": [{"id": 12169386, "category_id": 1, "iscrowd": 0, "bbox": [17, 136, 162, 290], "area": 33876}, {"id": 7514746, "category_id": 1, "iscrowd": 0, "bbox": [324, 136, 238, 285], "area": 36026}, {"id": 3107229, "category_id": 59, "iscrowd": 0, "bbox": [308, 203, 74, 30], "area": 1506}, {"id": 3563382, "category_id": 59, "iscrowd": 0, "bbox": [225, 125, 110, 14], "area": 808}, {"id": 1909284, "category_id": 79, "iscrowd": 0, "bbox": [230, 329, 109, 91], "area": 8632}, {"id": 3620673, "category_id": 79, "iscrowd": 0, "bbox": [148, 149, 327, 183], "area": 35397}, {"id": 11840941, "category_id": 100, "iscrowd": 0, "bbox": [0, 23, 98, 131], "area": 8707}, {"id": 2303527, "category_id": 156, "iscrowd": 0, "bbox": [288, 27, 180, 126], "area": 17421}, {"id": 3551791, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 54, 260], "area": 3918}, {"id": 4480858, "category_id": 199, "iscrowd": 0, "bbox": [30, 0, 533, 149], "area": 43504}], "file_name": "000000424349.png", "image_id": 424349}, {"segments_info": [{"id": 4348526, "category_id": 1, "iscrowd": 0, "bbox": [46, 139, 133, 162], "area": 8917}, {"id": 6125716, "category_id": 41, "iscrowd": 0, "bbox": [27, 263, 113, 49], "area": 821}, {"id": 2965577, "category_id": 184, "iscrowd": 0, "bbox": [0, 224, 314, 161], "area": 34869}, {"id": 7505814, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 314, 301], "area": 71617}, {"id": 5665929, "category_id": 191, "iscrowd": 0, "bbox": [0, 374, 314, 126], "area": 30783}, {"id": 2637129, "category_id": 194, "iscrowd": 0, "bbox": [196, 401, 118, 99], "area": 4578}], "file_name": "000000424521.png", "image_id": 424521}, {"segments_info": [{"id": 5794171, "category_id": 17, "iscrowd": 0, "bbox": [147, 44, 353, 265], "area": 68805}, {"id": 5139594, "category_id": 109, "iscrowd": 0, "bbox": [364, 280, 136, 95], "area": 10265}, {"id": 14804710, "category_id": 181, "iscrowd": 0, "bbox": [196, 0, 304, 72], "area": 16317}, {"id": 12174539, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 469, 300], "area": 54954}], "file_name": "000000424545.png", "image_id": 424545}, {"segments_info": [{"id": 4601651, "category_id": 1, "iscrowd": 0, "bbox": [252, 214, 95, 181], "area": 9552}, {"id": 4009255, "category_id": 1, "iscrowd": 0, "bbox": [461, 149, 18, 30], "area": 214}, {"id": 8025716, "category_id": 35, "iscrowd": 0, "bbox": [248, 332, 161, 94], "area": 1470}, {"id": 11707286, "category_id": 159, "iscrowd": 0, "bbox": [0, 34, 640, 446], "area": 178475}, {"id": 8023910, "category_id": 184, "iscrowd": 0, "bbox": [32, 235, 78, 59], "area": 2939}, {"id": 10523271, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 396, 90], "area": 17530}, {"id": 8681066, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 309], "area": 96693}], "file_name": "000000424551.png", "image_id": 424551}, {"segments_info": [{"id": 8487337, "category_id": 1, "iscrowd": 0, "bbox": [367, 157, 84, 159], "area": 6156}, {"id": 7102808, "category_id": 1, "iscrowd": 0, "bbox": [307, 181, 6, 17], "area": 52}, {"id": 6509915, "category_id": 1, "iscrowd": 0, "bbox": [22, 125, 81, 215], "area": 8592}, {"id": 9592625, "category_id": 34, "iscrowd": 0, "bbox": [83, 321, 23, 10], "area": 185}, {"id": 8636390, "category_id": 34, "iscrowd": 0, "bbox": [252, 207, 14, 25], "area": 283}, {"id": 14933726, "category_id": 34, "iscrowd": 0, "bbox": [100, 297, 20, 9], "area": 129}, {"id": 10323083, "category_id": 44, "iscrowd": 0, "bbox": [422, 225, 34, 17], "area": 262}, {"id": 5267286, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 295], "area": 102321}, {"id": 16315373, "category_id": 187, "iscrowd": 0, "bbox": [307, 0, 116, 86], "area": 1516}, {"id": 6384765, "category_id": 194, "iscrowd": 0, "bbox": [0, 193, 500, 182], "area": 62984}], "file_name": "000000424642.png", "image_id": 424642}, {"segments_info": [{"id": 949437, "category_id": 53, "iscrowd": 0, "bbox": [300, 82, 71, 69], "area": 3821}, {"id": 1606073, "category_id": 53, "iscrowd": 0, "bbox": [162, 134, 88, 78], "area": 5319}, {"id": 291053, "category_id": 57, "iscrowd": 0, "bbox": [245, 149, 50, 101], "area": 1127}, {"id": 282820, "category_id": 57, "iscrowd": 0, "bbox": [222, 130, 59, 120], "area": 2244}, {"id": 680142, "category_id": 57, "iscrowd": 0, "bbox": [393, 158, 22, 84], "area": 1473}, {"id": 484305, "category_id": 57, "iscrowd": 0, "bbox": [241, 136, 153, 167], "area": 14253}, {"id": 9679560, "category_id": 62, "iscrowd": 0, "bbox": [1, 0, 55, 66], "area": 2059}, {"id": 6796493, "category_id": 100, "iscrowd": 0, "bbox": [407, 0, 93, 100], "area": 6251}, {"id": 2175551, "category_id": 156, "iscrowd": 0, "bbox": [336, 190, 164, 185], "area": 9977}, {"id": 5665157, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 61627}, {"id": 14278625, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 165, 73], "area": 4140}, {"id": 2516115, "category_id": 196, "iscrowd": 0, "bbox": [121, 0, 329, 329], "area": 27059}, {"id": 8098717, "category_id": 199, "iscrowd": 0, "bbox": [461, 0, 39, 18], "area": 487}], "file_name": "000000424721.png", "image_id": 424721}, {"segments_info": [{"id": 10523259, "category_id": 5, "iscrowd": 0, "bbox": [16, 87, 586, 242], "area": 50461}, {"id": 8414538, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 221686}], "file_name": "000000424776.png", "image_id": 424776}, {"segments_info": [{"id": 3222063, "category_id": 1, "iscrowd": 0, "bbox": [242, 304, 36, 92], "area": 1982}, {"id": 1840664, "category_id": 1, "iscrowd": 0, "bbox": [287, 301, 28, 71], "area": 1477}, {"id": 6116684, "category_id": 3, "iscrowd": 0, "bbox": [545, 313, 29, 22], "area": 391}, {"id": 12302770, "category_id": 13, "iscrowd": 0, "bbox": [166, 209, 36, 48], "area": 1367}, {"id": 3550505, "category_id": 100, "iscrowd": 0, "bbox": [268, 370, 116, 30], "area": 2189}, {"id": 7765374, "category_id": 149, "iscrowd": 0, "bbox": [0, 379, 640, 101], "area": 47103}, {"id": 10269372, "category_id": 151, "iscrowd": 0, "bbox": [92, 51, 548, 122], "area": 16778}, {"id": 12436402, "category_id": 181, "iscrowd": 0, "bbox": [317, 86, 59, 53], "area": 1973}, {"id": 3162427, "category_id": 184, "iscrowd": 0, "bbox": [558, 211, 82, 136], "area": 7015}, {"id": 16045981, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 152], "area": 63978}, {"id": 7105646, "category_id": 191, "iscrowd": 0, "bbox": [0, 353, 640, 70], "area": 15462}, {"id": 2701872, "category_id": 193, "iscrowd": 0, "bbox": [554, 332, 86, 36], "area": 1782}, {"id": 6644586, "category_id": 197, "iscrowd": 0, "bbox": [0, 100, 640, 297], "area": 141637}, {"id": 10987976, "category_id": 199, "iscrowd": 0, "bbox": [118, 355, 70, 50], "area": 1444}], "file_name": "000000424975.png", "image_id": 424975}, {"segments_info": [{"id": 460550, "category_id": 1, "iscrowd": 0, "bbox": [3, 398, 65, 106], "area": 3355}, {"id": 197379, "category_id": 1, "iscrowd": 0, "bbox": [347, 474, 46, 44], "area": 1297}, {"id": 6250340, "category_id": 5, "iscrowd": 0, "bbox": [209, 409, 47, 66], "area": 1372}, {"id": 7635335, "category_id": 5, "iscrowd": 0, "bbox": [154, 297, 61, 16], "area": 444}, {"id": 1644822, "category_id": 15, "iscrowd": 0, "bbox": [261, 518, 209, 114], "area": 6403}, {"id": 789514, "category_id": 15, "iscrowd": 0, "bbox": [201, 500, 63, 74], "area": 1768}, {"id": 1842457, "category_id": 15, "iscrowd": 0, "bbox": [121, 495, 94, 143], "area": 3550}, {"id": 986892, "category_id": 15, "iscrowd": 0, "bbox": [59, 526, 54, 52], "area": 1394}, {"id": 1052686, "category_id": 15, "iscrowd": 0, "bbox": [266, 499, 76, 39], "area": 1455}, {"id": 131586, "category_id": 27, "iscrowd": 0, "bbox": [3, 448, 25, 53], "area": 932}, {"id": 197377, "category_id": 33, "iscrowd": 0, "bbox": [438, 492, 38, 50], "area": 1097}, {"id": 5395268, "category_id": 62, "iscrowd": 0, "bbox": [129, 496, 61, 39], "area": 237}, {"id": 3092521, "category_id": 62, "iscrowd": 0, "bbox": [66, 588, 87, 25], "area": 931}, {"id": 1579288, "category_id": 62, "iscrowd": 0, "bbox": [328, 518, 61, 72], "area": 2081}, {"id": 1973529, "category_id": 62, "iscrowd": 0, "bbox": [305, 495, 20, 13], "area": 191}, {"id": 1513237, "category_id": 62, "iscrowd": 0, "bbox": [254, 519, 103, 59], "area": 1901}, {"id": 2105632, "category_id": 62, "iscrowd": 0, "bbox": [331, 521, 95, 94], "area": 2937}, {"id": 5987403, "category_id": 62, "iscrowd": 0, "bbox": [166, 495, 16, 16], "area": 129}, {"id": 2303006, "category_id": 62, "iscrowd": 0, "bbox": [32, 557, 138, 75], "area": 3275}, {"id": 4079412, "category_id": 62, "iscrowd": 0, "bbox": [54, 566, 79, 21], "area": 545}, {"id": 1447702, "category_id": 62, "iscrowd": 0, "bbox": [365, 523, 93, 117], "area": 4730}, {"id": 1513235, "category_id": 62, "iscrowd": 0, "bbox": [133, 500, 84, 82], "area": 2506}, {"id": 6973784, "category_id": 62, "iscrowd": 0, "bbox": [184, 498, 16, 13], "area": 110}, {"id": 12238262, "category_id": 181, "iscrowd": 0, "bbox": [0, 125, 480, 390], "area": 138115}, {"id": 394758, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 166], "area": 70655}, {"id": 3421743, "category_id": 190, "iscrowd": 0, "bbox": [0, 537, 480, 103], "area": 14096}, {"id": 986894, "category_id": 199, "iscrowd": 0, "bbox": [0, 352, 480, 209], "area": 30568}], "file_name": "000000425221.png", "image_id": 425221}, {"segments_info": [{"id": 3747650, "category_id": 1, "iscrowd": 0, "bbox": [73, 206, 301, 373], "area": 47799}, {"id": 4212339, "category_id": 44, "iscrowd": 0, "bbox": [231, 366, 43, 28], "area": 558}, {"id": 5207718, "category_id": 44, "iscrowd": 0, "bbox": [296, 352, 19, 37], "area": 502}, {"id": 2635838, "category_id": 44, "iscrowd": 0, "bbox": [231, 4, 19, 50], "area": 698}, {"id": 6850971, "category_id": 44, "iscrowd": 0, "bbox": [286, 1, 19, 49], "area": 522}, {"id": 6851738, "category_id": 44, "iscrowd": 0, "bbox": [326, 1, 16, 41], "area": 508}, {"id": 3289969, "category_id": 44, "iscrowd": 0, "bbox": [314, 467, 14, 60], "area": 529}, {"id": 5203555, "category_id": 44, "iscrowd": 0, "bbox": [300, 2, 21, 42], "area": 625}, {"id": 1915991, "category_id": 51, "iscrowd": 0, "bbox": [6, 163, 91, 26], "area": 1554}, {"id": 807775, "category_id": 52, "iscrowd": 0, "bbox": [93, 240, 17, 9], "area": 131}, {"id": 6317931, "category_id": 78, "iscrowd": 0, "bbox": [15, 178, 125, 67], "area": 4266}, {"id": 9997961, "category_id": 82, "iscrowd": 0, "bbox": [138, 39, 258, 580], "area": 81424}, {"id": 2960168, "category_id": 86, "iscrowd": 0, "bbox": [168, 0, 51, 62], "area": 2434}, {"id": 4665632, "category_id": 100, "iscrowd": 0, "bbox": [94, 187, 377, 341], "area": 6059}, {"id": 2045008, "category_id": 118, "iscrowd": 0, "bbox": [0, 430, 480, 210], "area": 54200}, {"id": 2963000, "category_id": 122, "iscrowd": 0, "bbox": [89, 208, 64, 52], "area": 1879}, {"id": 1980506, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 258, 472], "area": 49140}, {"id": 2768715, "category_id": 195, "iscrowd": 0, "bbox": [90, 143, 296, 70], "area": 1141}, {"id": 1843497, "category_id": 196, "iscrowd": 0, "bbox": [18, 138, 72, 31], "area": 1495}, {"id": 6248785, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 438], "area": 43289}], "file_name": "000000425226.png", "image_id": 425226}, {"segments_info": [{"id": 2104867, "category_id": 1, "iscrowd": 0, "bbox": [297, 494, 12, 32], "area": 179}, {"id": 4012865, "category_id": 1, "iscrowd": 0, "bbox": [310, 495, 14, 31], "area": 200}, {"id": 7825278, "category_id": 38, "iscrowd": 0, "bbox": [70, 66, 30, 56], "area": 1073}, {"id": 5128244, "category_id": 38, "iscrowd": 0, "bbox": [214, 353, 8, 11], "area": 53}, {"id": 2637149, "category_id": 42, "iscrowd": 0, "bbox": [287, 509, 23, 7], "area": 93}, {"id": 4609644, "category_id": 154, "iscrowd": 0, "bbox": [0, 503, 428, 137], "area": 53131}, {"id": 10195593, "category_id": 155, "iscrowd": 0, "bbox": [0, 407, 428, 109], "area": 42630}, {"id": 14208968, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 428, 420], "area": 176481}], "file_name": "000000425227.png", "image_id": 425227}, {"segments_info": [{"id": 6059930, "category_id": 1, "iscrowd": 0, "bbox": [105, 21, 261, 430], "area": 62079}, {"id": 3094085, "category_id": 46, "iscrowd": 0, "bbox": [293, 186, 57, 146], "area": 2164}, {"id": 1910583, "category_id": 48, "iscrowd": 0, "bbox": [427, 363, 47, 42], "area": 367}, {"id": 528409, "category_id": 49, "iscrowd": 0, "bbox": [325, 413, 83, 17], "area": 468}, {"id": 6650499, "category_id": 51, "iscrowd": 0, "bbox": [530, 458, 45, 21], "area": 609}, {"id": 2313344, "category_id": 59, "iscrowd": 0, "bbox": [383, 409, 100, 49], "area": 2632}, {"id": 132101, "category_id": 62, "iscrowd": 0, "bbox": [24, 137, 132, 346], "area": 29653}, {"id": 328966, "category_id": 73, "iscrowd": 0, "bbox": [480, 200, 160, 154], "area": 10942}, {"id": 789772, "category_id": 74, "iscrowd": 0, "bbox": [584, 357, 56, 26], "area": 1165}, {"id": 330509, "category_id": 180, "iscrowd": 0, "bbox": [35, 0, 272, 57], "area": 10299}, {"id": 203329, "category_id": 188, "iscrowd": 0, "bbox": [0, 106, 280, 328], "area": 13108}, {"id": 931438, "category_id": 189, "iscrowd": 0, "bbox": [72, 83, 568, 408], "area": 58656}, {"id": 264737, "category_id": 190, "iscrowd": 0, "bbox": [0, 194, 433, 297], "area": 10284}, {"id": 8817557, "category_id": 195, "iscrowd": 0, "bbox": [0, 44, 580, 354], "area": 16697}, {"id": 2832186, "category_id": 199, "iscrowd": 0, "bbox": [398, 54, 242, 183], "area": 27317}], "file_name": "000000425361.png", "image_id": 425361}, {"segments_info": [{"id": 8092800, "category_id": 17, "iscrowd": 0, "bbox": [7, 65, 452, 290], "area": 73644}, {"id": 8943199, "category_id": 73, "iscrowd": 0, "bbox": [71, 20, 429, 350], "area": 55284}, {"id": 5136483, "category_id": 189, "iscrowd": 0, "bbox": [0, 110, 484, 254], "area": 8751}, {"id": 4997932, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 143], "area": 28008}], "file_name": "000000425390.png", "image_id": 425390}, {"segments_info": [{"id": 5525324, "category_id": 1, "iscrowd": 0, "bbox": [295, 111, 49, 129], "area": 2583}, {"id": 3355188, "category_id": 42, "iscrowd": 0, "bbox": [237, 134, 148, 53], "area": 3678}, {"id": 12961741, "category_id": 154, "iscrowd": 0, "bbox": [0, 120, 640, 196], "area": 53175}, {"id": 14276048, "category_id": 178, "iscrowd": 0, "bbox": [0, 110, 640, 144], "area": 67775}, {"id": 11311752, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 100], "area": 48375}, {"id": 8088415, "category_id": 192, "iscrowd": 0, "bbox": [0, 26, 640, 95], "area": 26304}], "file_name": "000000425702.png", "image_id": 425702}, {"segments_info": [{"id": 6910850, "category_id": 1, "iscrowd": 0, "bbox": [4, 399, 45, 53], "area": 1474}, {"id": 3161679, "category_id": 1, "iscrowd": 0, "bbox": [415, 488, 43, 30], "area": 944}, {"id": 4676982, "category_id": 1, "iscrowd": 0, "bbox": [38, 401, 39, 59], "area": 1209}, {"id": 5266282, "category_id": 1, "iscrowd": 0, "bbox": [0, 379, 26, 54], "area": 1020}, {"id": 8487036, "category_id": 1, "iscrowd": 0, "bbox": [350, 463, 56, 60], "area": 1985}, {"id": 11116958, "category_id": 1, "iscrowd": 0, "bbox": [316, 448, 57, 54], "area": 1837}, {"id": 4544117, "category_id": 1, "iscrowd": 0, "bbox": [401, 471, 23, 42], "area": 626}, {"id": 10261141, "category_id": 1, "iscrowd": 0, "bbox": [248, 446, 54, 48], "area": 1684}, {"id": 5526687, "category_id": 1, "iscrowd": 0, "bbox": [60, 136, 120, 95], "area": 5709}, {"id": 2766141, "category_id": 1, "iscrowd": 0, "bbox": [112, 407, 58, 67], "area": 2345}, {"id": 6320505, "category_id": 1, "iscrowd": 0, "bbox": [170, 417, 88, 104], "area": 4926}, {"id": 3560558, "category_id": 1, "iscrowd": 0, "bbox": [158, 417, 27, 47], "area": 897}, {"id": 2303017, "category_id": 1, "iscrowd": 0, "bbox": [59, 412, 58, 53], "area": 1664}, {"id": 13936506, "category_id": 36, "iscrowd": 0, "bbox": [107, 119, 177, 151], "area": 7587}, {"id": 3683627, "category_id": 92, "iscrowd": 0, "bbox": [0, 432, 463, 208], "area": 61528}, {"id": 7764350, "category_id": 159, "iscrowd": 0, "bbox": [0, 219, 463, 421], "area": 76246}, {"id": 1907773, "category_id": 185, "iscrowd": 0, "bbox": [0, 134, 463, 242], "area": 37705}, {"id": 328708, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 463, 259], "area": 86387}], "file_name": "000000425906.png", "image_id": 425906}, {"segments_info": [{"id": 1906974, "category_id": 1, "iscrowd": 0, "bbox": [128, 424, 17, 38], "area": 419}, {"id": 3812395, "category_id": 1, "iscrowd": 0, "bbox": [140, 425, 9, 36], "area": 217}, {"id": 5722173, "category_id": 3, "iscrowd": 0, "bbox": [240, 410, 40, 16], "area": 534}, {"id": 7040373, "category_id": 3, "iscrowd": 0, "bbox": [30, 415, 17, 43], "area": 226}, {"id": 6118235, "category_id": 3, "iscrowd": 0, "bbox": [0, 409, 42, 58], "area": 1852}, {"id": 5920354, "category_id": 3, "iscrowd": 0, "bbox": [40, 418, 19, 38], "area": 445}, {"id": 5000796, "category_id": 3, "iscrowd": 0, "bbox": [54, 415, 78, 49], "area": 3100}, {"id": 6445650, "category_id": 3, "iscrowd": 0, "bbox": [162, 412, 79, 46], "area": 2256}, {"id": 6183511, "category_id": 3, "iscrowd": 0, "bbox": [153, 418, 11, 32], "area": 254}, {"id": 4929598, "category_id": 44, "iscrowd": 0, "bbox": [576, 147, 64, 154], "area": 5819}, {"id": 9340289, "category_id": 85, "iscrowd": 0, "bbox": [255, 230, 41, 44], "area": 1373}, {"id": 9405317, "category_id": 85, "iscrowd": 0, "bbox": [324, 231, 14, 47], "area": 542}, {"id": 6454927, "category_id": 92, "iscrowd": 0, "bbox": [0, 251, 640, 142], "area": 19945}, {"id": 4936274, "category_id": 100, "iscrowd": 0, "bbox": [182, 429, 57, 39], "area": 1198}, {"id": 2964288, "category_id": 122, "iscrowd": 0, "bbox": [219, 426, 43, 36], "area": 848}, {"id": 6382435, "category_id": 149, "iscrowd": 0, "bbox": [0, 445, 169, 23], "area": 1422}, {"id": 4933735, "category_id": 151, "iscrowd": 0, "bbox": [86, 73, 255, 272], "area": 7253}, {"id": 14465925, "category_id": 166, "iscrowd": 0, "bbox": [304, 370, 78, 26], "area": 1430}, {"id": 5198226, "category_id": 184, "iscrowd": 0, "bbox": [0, 11, 159, 163], "area": 10727}, {"id": 15258042, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 343], "area": 145065}, {"id": 6774627, "category_id": 197, "iscrowd": 0, "bbox": [0, 67, 640, 360], "area": 62687}, {"id": 3552819, "category_id": 199, "iscrowd": 0, "bbox": [287, 387, 353, 81], "area": 26499}], "file_name": "000000425925.png", "image_id": 425925}, {"segments_info": [{"id": 7828579, "category_id": 2, "iscrowd": 0, "bbox": [106, 173, 150, 123], "area": 6302}, {"id": 5525565, "category_id": 112, "iscrowd": 0, "bbox": [258, 0, 81, 263], "area": 19633}, {"id": 5330017, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 500, 332], "area": 112784}, {"id": 6654123, "category_id": 149, "iscrowd": 0, "bbox": [232, 324, 93, 8], "area": 613}, {"id": 4868425, "category_id": 191, "iscrowd": 0, "bbox": [0, 259, 500, 73], "area": 26495}], "file_name": "000000426166.png", "image_id": 426166}, {"segments_info": [{"id": 4737618, "category_id": 1, "iscrowd": 0, "bbox": [200, 477, 21, 30], "area": 297}, {"id": 6908017, "category_id": 1, "iscrowd": 0, "bbox": [177, 117, 143, 191], "area": 11677}, {"id": 6381408, "category_id": 3, "iscrowd": 0, "bbox": [258, 501, 15, 10], "area": 78}, {"id": 4869198, "category_id": 3, "iscrowd": 0, "bbox": [227, 494, 41, 28], "area": 804}, {"id": 5526855, "category_id": 3, "iscrowd": 0, "bbox": [386, 507, 36, 19], "area": 538}, {"id": 5330524, "category_id": 3, "iscrowd": 0, "bbox": [266, 501, 72, 24], "area": 854}, {"id": 3750717, "category_id": 15, "iscrowd": 0, "bbox": [266, 411, 160, 145], "area": 8150}, {"id": 2964283, "category_id": 41, "iscrowd": 0, "bbox": [217, 248, 61, 117], "area": 4582}, {"id": 10591905, "category_id": 184, "iscrowd": 0, "bbox": [261, 287, 153, 180], "area": 11680}, {"id": 13682359, "category_id": 187, "iscrowd": 0, "bbox": [122, 0, 304, 445], "area": 67612}, {"id": 6515315, "category_id": 191, "iscrowd": 0, "bbox": [0, 505, 426, 90], "area": 26814}, {"id": 6583423, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 426, 532], "area": 102629}, {"id": 3488316, "category_id": 199, "iscrowd": 0, "bbox": [0, 588, 426, 52], "area": 11687}], "file_name": "000000426203.png", "image_id": 426203}, {"segments_info": [{"id": 15788274, "category_id": 1, "iscrowd": 0, "bbox": [365, 97, 73, 80], "area": 2687}, {"id": 9858647, "category_id": 72, "iscrowd": 0, "bbox": [345, 85, 132, 104], "area": 7764}, {"id": 4548474, "category_id": 73, "iscrowd": 0, "bbox": [130, 192, 104, 37], "area": 1956}, {"id": 7971511, "category_id": 74, "iscrowd": 0, "bbox": [441, 227, 24, 14], "area": 265}, {"id": 5863556, "category_id": 74, "iscrowd": 0, "bbox": [127, 225, 30, 18], "area": 348}, {"id": 3620161, "category_id": 76, "iscrowd": 0, "bbox": [314, 192, 127, 43], "area": 2628}, {"id": 7379368, "category_id": 76, "iscrowd": 0, "bbox": [8, 209, 119, 51], "area": 2376}, {"id": 4087664, "category_id": 112, "iscrowd": 0, "bbox": [94, 0, 77, 174], "area": 9971}, {"id": 4020327, "category_id": 189, "iscrowd": 0, "bbox": [0, 150, 500, 225], "area": 36268}, {"id": 2903907, "category_id": 190, "iscrowd": 0, "bbox": [0, 196, 500, 179], "area": 30230}, {"id": 9419982, "category_id": 195, "iscrowd": 0, "bbox": [0, 117, 54, 56], "area": 2194}, {"id": 6195872, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 352], "area": 78858}], "file_name": "000000426241.png", "image_id": 426241}, {"segments_info": [{"id": 856091, "category_id": 44, "iscrowd": 0, "bbox": [589, 86, 50, 182], "area": 7482}, {"id": 2172463, "category_id": 78, "iscrowd": 0, "bbox": [46, 60, 547, 299], "area": 158687}, {"id": 3160132, "category_id": 189, "iscrowd": 0, "bbox": [20, 336, 620, 91], "area": 42033}, {"id": 4869977, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 47056}], "file_name": "000000426253.png", "image_id": 426253}, {"segments_info": [{"id": 8882328, "category_id": 1, "iscrowd": 0, "bbox": [272, 123, 39, 66], "area": 1146}, {"id": 13551041, "category_id": 3, "iscrowd": 0, "bbox": [623, 243, 9, 5], "area": 25}, {"id": 9209500, "category_id": 3, "iscrowd": 0, "bbox": [611, 249, 29, 17], "area": 429}, {"id": 5327950, "category_id": 7, "iscrowd": 0, "bbox": [8, 44, 592, 230], "area": 88947}, {"id": 11579055, "category_id": 149, "iscrowd": 0, "bbox": [576, 249, 64, 178], "area": 9209}, {"id": 6711404, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 151, 72], "area": 8661}, {"id": 4539977, "category_id": 185, "iscrowd": 0, "bbox": [0, 237, 601, 190], "area": 67469}, {"id": 15984352, "category_id": 187, "iscrowd": 0, "bbox": [132, 0, 508, 252], "area": 63738}, {"id": 6855061, "category_id": 193, "iscrowd": 0, "bbox": [204, 242, 397, 185], "area": 31074}], "file_name": "000000426268.png", "image_id": 426268}, {"segments_info": [{"id": 6054505, "category_id": 24, "iscrowd": 0, "bbox": [124, 16, 515, 404], "area": 145618}, {"id": 3689052, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 124380}], "file_name": "000000426297.png", "image_id": 426297}, {"segments_info": [{"id": 6327971, "category_id": 61, "iscrowd": 0, "bbox": [257, 213, 156, 130], "area": 9003}, {"id": 3895690, "category_id": 61, "iscrowd": 0, "bbox": [132, 196, 120, 47], "area": 4452}, {"id": 4937317, "category_id": 61, "iscrowd": 0, "bbox": [235, 184, 111, 104], "area": 3915}, {"id": 6785694, "category_id": 61, "iscrowd": 0, "bbox": [466, 162, 101, 40], "area": 3771}, {"id": 4284794, "category_id": 61, "iscrowd": 0, "bbox": [344, 175, 123, 62], "area": 4122}, {"id": 863562, "category_id": 61, "iscrowd": 0, "bbox": [1, 301, 103, 122], "area": 11344}, {"id": 2119285, "category_id": 61, "iscrowd": 0, "bbox": [8, 182, 119, 71], "area": 5078}, {"id": 3368067, "category_id": 61, "iscrowd": 0, "bbox": [264, 147, 90, 36], "area": 2411}, {"id": 4283251, "category_id": 61, "iscrowd": 0, "bbox": [472, 205, 128, 37], "area": 2418}, {"id": 4812418, "category_id": 61, "iscrowd": 0, "bbox": [411, 227, 156, 162], "area": 14748}, {"id": 2315374, "category_id": 61, "iscrowd": 0, "bbox": [177, 137, 88, 46], "area": 3546}, {"id": 2710130, "category_id": 61, "iscrowd": 0, "bbox": [0, 222, 110, 87], "area": 8053}, {"id": 5208203, "category_id": 61, "iscrowd": 0, "bbox": [282, 257, 176, 166], "area": 13644}, {"id": 3829383, "category_id": 61, "iscrowd": 0, "bbox": [103, 227, 158, 152], "area": 17151}, {"id": 3037815, "category_id": 61, "iscrowd": 1, "bbox": [85, 129, 555, 299], "area": 23199}, {"id": 8090217, "category_id": 72, "iscrowd": 0, "bbox": [210, 0, 226, 141], "area": 30267}, {"id": 4216936, "category_id": 100, "iscrowd": 0, "bbox": [189, 207, 451, 221], "area": 26464}, {"id": 4211009, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 23, 58], "area": 1105}, {"id": 2110021, "category_id": 189, "iscrowd": 0, "bbox": [523, 306, 117, 122], "area": 6503}, {"id": 2441297, "category_id": 196, "iscrowd": 0, "bbox": [0, 47, 640, 381], "area": 39974}, {"id": 3951187, "category_id": 199, "iscrowd": 0, "bbox": [18, 0, 622, 140], "area": 35953}], "file_name": "000000426329.png", "image_id": 426329}, {"segments_info": [{"id": 3224717, "category_id": 3, "iscrowd": 0, "bbox": [73, 104, 141, 132], "area": 11500}, {"id": 7240326, "category_id": 3, "iscrowd": 0, "bbox": [0, 164, 62, 83], "area": 3379}, {"id": 1776436, "category_id": 3, "iscrowd": 0, "bbox": [261, 140, 123, 90], "area": 5751}, {"id": 6318191, "category_id": 4, "iscrowd": 0, "bbox": [20, 195, 76, 73], "area": 1977}, {"id": 9145488, "category_id": 8, "iscrowd": 0, "bbox": [57, 45, 509, 364], "area": 116290}, {"id": 7111572, "category_id": 190, "iscrowd": 0, "bbox": [0, 218, 640, 209], "area": 60493}, {"id": 5002337, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 351], "area": 73259}], "file_name": "000000426372.png", "image_id": 426372}, {"segments_info": [{"id": 5530212, "category_id": 1, "iscrowd": 0, "bbox": [171, 260, 94, 143], "area": 3783}, {"id": 7566968, "category_id": 36, "iscrowd": 0, "bbox": [219, 393, 59, 21], "area": 246}, {"id": 13093834, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 467, 640], "area": 294735}], "file_name": "000000426376.png", "image_id": 426376}, {"segments_info": [{"id": 277387, "category_id": 1, "iscrowd": 0, "bbox": [58, 19, 409, 455], "area": 98307}, {"id": 149687, "category_id": 62, "iscrowd": 0, "bbox": [378, 306, 201, 166], "area": 16583}, {"id": 1944311, "category_id": 100, "iscrowd": 0, "bbox": [0, 290, 46, 53], "area": 1633}, {"id": 16252413, "category_id": 130, "iscrowd": 0, "bbox": [184, 0, 34, 31], "area": 782}, {"id": 1280722, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 232, 182], "area": 37388}, {"id": 473969, "category_id": 189, "iscrowd": 0, "bbox": [0, 308, 496, 161], "area": 10291}, {"id": 3717614, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 8439}, {"id": 346291, "category_id": 196, "iscrowd": 0, "bbox": [248, 220, 208, 131], "area": 20642}, {"id": 3586028, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 97826}], "file_name": "000000426795.png", "image_id": 426795}, {"segments_info": [{"id": 3028033, "category_id": 1, "iscrowd": 0, "bbox": [328, 414, 23, 75], "area": 1198}, {"id": 5393746, "category_id": 38, "iscrowd": 0, "bbox": [182, 100, 71, 28], "area": 826}, {"id": 6911889, "category_id": 95, "iscrowd": 0, "bbox": [338, 438, 302, 68], "area": 12853}, {"id": 7436937, "category_id": 119, "iscrowd": 0, "bbox": [0, 426, 339, 97], "area": 19535}, {"id": 8293294, "category_id": 148, "iscrowd": 0, "bbox": [0, 419, 640, 221], "area": 91941}, {"id": 8032918, "category_id": 184, "iscrowd": 0, "bbox": [178, 117, 462, 327], "area": 79770}, {"id": 12500172, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 430], "area": 184036}, {"id": 4291180, "category_id": 193, "iscrowd": 0, "bbox": [20, 416, 620, 50], "area": 13388}, {"id": 8354439, "category_id": 197, "iscrowd": 0, "bbox": [477, 359, 163, 67], "area": 5951}], "file_name": "000000426836.png", "image_id": 426836}, {"segments_info": [{"id": 9993593, "category_id": 1, "iscrowd": 0, "bbox": [236, 88, 403, 237], "area": 10418}, {"id": 2634305, "category_id": 18, "iscrowd": 0, "bbox": [208, 27, 33, 59], "area": 1188}, {"id": 4805218, "category_id": 18, "iscrowd": 0, "bbox": [284, 177, 356, 175], "area": 40185}, {"id": 10001315, "category_id": 73, "iscrowd": 0, "bbox": [1, 102, 639, 376], "area": 103408}, {"id": 1911896, "category_id": 85, "iscrowd": 0, "bbox": [64, 97, 15, 37], "area": 428}, {"id": 1185576, "category_id": 112, "iscrowd": 0, "bbox": [65, 78, 69, 110], "area": 4819}, {"id": 6193103, "category_id": 130, "iscrowd": 0, "bbox": [360, 25, 160, 160], "area": 17915}, {"id": 1449005, "category_id": 186, "iscrowd": 0, "bbox": [65, 0, 99, 74], "area": 5444}, {"id": 6261404, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 526, 331], "area": 63221}], "file_name": "000000427034.png", "image_id": 427034}, {"segments_info": [{"id": 2498332, "category_id": 3, "iscrowd": 0, "bbox": [586, 296, 17, 10], "area": 117}, {"id": 3878696, "category_id": 3, "iscrowd": 0, "bbox": [524, 299, 13, 10], "area": 101}, {"id": 3549990, "category_id": 3, "iscrowd": 0, "bbox": [319, 309, 47, 31], "area": 644}, {"id": 2037009, "category_id": 3, "iscrowd": 0, "bbox": [631, 303, 9, 10], "area": 76}, {"id": 3090213, "category_id": 3, "iscrowd": 0, "bbox": [600, 297, 19, 13], "area": 213}, {"id": 5127990, "category_id": 3, "iscrowd": 0, "bbox": [550, 297, 14, 12], "area": 130}, {"id": 4210488, "category_id": 3, "iscrowd": 0, "bbox": [287, 300, 30, 18], "area": 300}, {"id": 8549478, "category_id": 13, "iscrowd": 0, "bbox": [505, 282, 11, 11], "area": 99}, {"id": 6907493, "category_id": 85, "iscrowd": 0, "bbox": [404, 61, 92, 88], "area": 6247}, {"id": 3420981, "category_id": 128, "iscrowd": 0, "bbox": [540, 285, 19, 24], "area": 279}, {"id": 12433590, "category_id": 130, "iscrowd": 0, "bbox": [377, 76, 152, 79], "area": 1696}, {"id": 8158073, "category_id": 149, "iscrowd": 0, "bbox": [342, 288, 298, 192], "area": 22934}, {"id": 1584420, "category_id": 184, "iscrowd": 0, "bbox": [465, 168, 175, 145], "area": 12744}, {"id": 12684124, "category_id": 187, "iscrowd": 0, "bbox": [337, 0, 303, 261], "area": 43520}, {"id": 9278099, "category_id": 191, "iscrowd": 0, "bbox": [65, 303, 481, 177], "area": 35288}, {"id": 6184284, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 632, 480], "area": 181588}], "file_name": "000000427055.png", "image_id": 427055}, {"segments_info": [{"id": 3949646, "category_id": 1, "iscrowd": 0, "bbox": [117, 76, 156, 331], "area": 19784}, {"id": 7769241, "category_id": 39, "iscrowd": 0, "bbox": [114, 109, 169, 26], "area": 542}, {"id": 10862540, "category_id": 187, "iscrowd": 0, "bbox": [11, 0, 333, 251], "area": 55629}, {"id": 10138559, "category_id": 194, "iscrowd": 0, "bbox": [13, 310, 331, 144], "area": 29697}, {"id": 11918823, "category_id": 195, "iscrowd": 0, "bbox": [12, 402, 42, 42], "area": 228}], "file_name": "000000427077.png", "image_id": 427077}, {"segments_info": [{"id": 6844039, "category_id": 1, "iscrowd": 0, "bbox": [512, 231, 111, 245], "area": 12948}, {"id": 8422530, "category_id": 1, "iscrowd": 0, "bbox": [4, 205, 249, 299], "area": 29970}, {"id": 8349025, "category_id": 1, "iscrowd": 0, "bbox": [388, 246, 166, 258], "area": 27310}, {"id": 6647405, "category_id": 37, "iscrowd": 0, "bbox": [257, 319, 17, 19], "area": 262}, {"id": 5792089, "category_id": 40, "iscrowd": 0, "bbox": [244, 314, 33, 42], "area": 515}, {"id": 7372940, "category_id": 40, "iscrowd": 0, "bbox": [399, 422, 13, 28], "area": 188}, {"id": 12836329, "category_id": 154, "iscrowd": 0, "bbox": [0, 429, 640, 83], "area": 30866}, {"id": 858893, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 491, 168], "area": 56634}, {"id": 2240030, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 278], "area": 96324}, {"id": 5349759, "category_id": 193, "iscrowd": 0, "bbox": [0, 229, 640, 219], "area": 65253}, {"id": 3684906, "category_id": 197, "iscrowd": 0, "bbox": [97, 0, 543, 38], "area": 4407}], "file_name": "000000427160.png", "image_id": 427160}, {"segments_info": [{"id": 1910835, "category_id": 1, "iscrowd": 0, "bbox": [286, 2, 81, 91], "area": 3111}, {"id": 1120025, "category_id": 1, "iscrowd": 0, "bbox": [374, 1, 93, 77], "area": 2929}, {"id": 4474953, "category_id": 1, "iscrowd": 0, "bbox": [0, 13, 59, 206], "area": 4640}, {"id": 2832465, "category_id": 1, "iscrowd": 0, "bbox": [390, 20, 50, 75], "area": 1686}, {"id": 4935764, "category_id": 1, "iscrowd": 0, "bbox": [384, 67, 94, 106], "area": 4282}, {"id": 3030852, "category_id": 1, "iscrowd": 0, "bbox": [310, 95, 73, 77], "area": 3849}, {"id": 5265240, "category_id": 1, "iscrowd": 0, "bbox": [0, 55, 39, 136], "area": 2996}, {"id": 1645340, "category_id": 1, "iscrowd": 0, "bbox": [546, 60, 88, 91], "area": 5531}, {"id": 1710361, "category_id": 1, "iscrowd": 0, "bbox": [400, 100, 141, 171], "area": 11275}, {"id": 1843494, "category_id": 1, "iscrowd": 0, "bbox": [241, 49, 82, 99], "area": 4264}, {"id": 4213327, "category_id": 1, "iscrowd": 0, "bbox": [416, 249, 224, 235], "area": 17336}, {"id": 7304051, "category_id": 1, "iscrowd": 0, "bbox": [7, 89, 278, 386], "area": 39335}, {"id": 3950669, "category_id": 1, "iscrowd": 0, "bbox": [340, 54, 51, 92], "area": 2335}, {"id": 3355700, "category_id": 1, "iscrowd": 1, "bbox": [21, 0, 619, 312], "area": 31229}, {"id": 4347228, "category_id": 39, "iscrowd": 0, "bbox": [131, 18, 117, 111], "area": 1399}, {"id": 2570560, "category_id": 40, "iscrowd": 0, "bbox": [421, 355, 66, 51], "area": 2614}, {"id": 3105122, "category_id": 145, "iscrowd": 0, "bbox": [0, 362, 640, 150], "area": 66750}, {"id": 1844773, "category_id": 161, "iscrowd": 0, "bbox": [83, 0, 246, 183], "area": 11566}, {"id": 1711128, "category_id": 185, "iscrowd": 0, "bbox": [0, 178, 640, 216], "area": 76393}], "file_name": "000000427256.png", "image_id": 427256}, {"segments_info": [{"id": 2498072, "category_id": 1, "iscrowd": 0, "bbox": [248, 191, 24, 34], "area": 432}, {"id": 2433312, "category_id": 1, "iscrowd": 0, "bbox": [355, 188, 32, 36], "area": 471}, {"id": 3353643, "category_id": 4, "iscrowd": 0, "bbox": [230, 201, 52, 29], "area": 492}, {"id": 3945514, "category_id": 4, "iscrowd": 0, "bbox": [353, 205, 41, 30], "area": 489}, {"id": 6840144, "category_id": 125, "iscrowd": 0, "bbox": [254, 270, 260, 126], "area": 19223}, {"id": 3091750, "category_id": 161, "iscrowd": 0, "bbox": [318, 241, 87, 51], "area": 3131}, {"id": 5264205, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 640, 396], "area": 189016}, {"id": 5655356, "category_id": 185, "iscrowd": 0, "bbox": [0, 179, 193, 47], "area": 6253}, {"id": 16316664, "category_id": 187, "iscrowd": 0, "bbox": [227, 0, 272, 86], "area": 9198}, {"id": 11510931, "category_id": 191, "iscrowd": 0, "bbox": [0, 213, 390, 65], "area": 10090}, {"id": 6909293, "category_id": 197, "iscrowd": 0, "bbox": [281, 93, 127, 137], "area": 13287}], "file_name": "000000427338.png", "image_id": 427338}, {"segments_info": [{"id": 8680300, "category_id": 3, "iscrowd": 0, "bbox": [0, 6, 43, 130], "area": 4402}, {"id": 2968943, "category_id": 11, "iscrowd": 0, "bbox": [174, 296, 170, 164], "area": 17184}, {"id": 8486018, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 328, 640], "area": 100876}, {"id": 3879209, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 118, 52], "area": 3446}, {"id": 8093075, "category_id": 191, "iscrowd": 0, "bbox": [10, 0, 418, 640], "area": 132537}, {"id": 4086372, "category_id": 193, "iscrowd": 0, "bbox": [65, 0, 314, 640], "area": 14365}], "file_name": "000000427500.png", "image_id": 427500}, {"segments_info": [{"id": 9408663, "category_id": 9, "iscrowd": 0, "bbox": [224, 282, 63, 82], "area": 1542}, {"id": 10650215, "category_id": 148, "iscrowd": 0, "bbox": [0, 325, 480, 315], "area": 142809}, {"id": 3157811, "category_id": 184, "iscrowd": 0, "bbox": [0, 286, 163, 74], "area": 6246}, {"id": 16430694, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 191], "area": 81620}, {"id": 9803162, "category_id": 192, "iscrowd": 0, "bbox": [0, 144, 480, 202], "area": 74913}], "file_name": "000000427649.png", "image_id": 427649}, {"segments_info": [{"id": 9936048, "category_id": 1, "iscrowd": 0, "bbox": [274, 185, 16, 10], "area": 77}, {"id": 8623042, "category_id": 1, "iscrowd": 0, "bbox": [299, 174, 72, 122], "area": 5903}, {"id": 9274230, "category_id": 1, "iscrowd": 0, "bbox": [303, 216, 14, 13], "area": 121}, {"id": 6123938, "category_id": 1, "iscrowd": 0, "bbox": [157, 169, 74, 88], "area": 4769}, {"id": 12697529, "category_id": 1, "iscrowd": 0, "bbox": [298, 184, 12, 10], "area": 83}, {"id": 8621205, "category_id": 1, "iscrowd": 0, "bbox": [9, 227, 14, 39], "area": 360}, {"id": 6907508, "category_id": 1, "iscrowd": 0, "bbox": [287, 228, 13, 37], "area": 348}, {"id": 8220001, "category_id": 3, "iscrowd": 0, "bbox": [377, 224, 13, 10], "area": 80}, {"id": 8682370, "category_id": 3, "iscrowd": 0, "bbox": [231, 223, 46, 41], "area": 1453}, {"id": 7761588, "category_id": 3, "iscrowd": 0, "bbox": [368, 220, 26, 49], "area": 834}, {"id": 5266838, "category_id": 6, "iscrowd": 0, "bbox": [264, 175, 65, 84], "area": 3509}, {"id": 8943709, "category_id": 6, "iscrowd": 0, "bbox": [389, 177, 38, 83], "area": 2698}, {"id": 3623795, "category_id": 19, "iscrowd": 0, "bbox": [52, 231, 211, 378], "area": 47309}, {"id": 2565751, "category_id": 84, "iscrowd": 0, "bbox": [220, 226, 14, 29], "area": 215}, {"id": 5857385, "category_id": 149, "iscrowd": 0, "bbox": [0, 246, 427, 394], "area": 91352}, {"id": 4348247, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 232], "area": 48336}, {"id": 14340292, "category_id": 187, "iscrowd": 0, "bbox": [180, 0, 247, 143], "area": 19590}, {"id": 9672612, "category_id": 197, "iscrowd": 0, "bbox": [26, 70, 401, 173], "area": 9206}], "file_name": "000000427655.png", "image_id": 427655}, {"segments_info": [{"id": 8487297, "category_id": 1, "iscrowd": 0, "bbox": [149, 111, 18, 29], "area": 276}, {"id": 5263440, "category_id": 1, "iscrowd": 0, "bbox": [152, 80, 12, 17], "area": 137}, {"id": 6250335, "category_id": 1, "iscrowd": 0, "bbox": [362, 131, 12, 26], "area": 200}, {"id": 3552822, "category_id": 1, "iscrowd": 0, "bbox": [197, 128, 20, 28], "area": 394}, {"id": 3223857, "category_id": 1, "iscrowd": 0, "bbox": [149, 67, 17, 18], "area": 158}, {"id": 4276545, "category_id": 1, "iscrowd": 0, "bbox": [399, 129, 19, 26], "area": 215}, {"id": 2960685, "category_id": 1, "iscrowd": 0, "bbox": [460, 123, 24, 32], "area": 528}, {"id": 3618615, "category_id": 1, "iscrowd": 0, "bbox": [370, 138, 23, 19], "area": 269}, {"id": 6908265, "category_id": 1, "iscrowd": 0, "bbox": [458, 109, 16, 25], "area": 239}, {"id": 5395026, "category_id": 1, "iscrowd": 0, "bbox": [509, 131, 35, 59], "area": 1246}, {"id": 5197647, "category_id": 1, "iscrowd": 0, "bbox": [480, 110, 19, 21], "area": 289}, {"id": 7303023, "category_id": 1, "iscrowd": 0, "bbox": [243, 63, 97, 211], "area": 7494}, {"id": 2960675, "category_id": 1, "iscrowd": 0, "bbox": [336, 127, 27, 29], "area": 585}, {"id": 5000268, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 639, 406], "area": 135691}, {"id": 7237230, "category_id": 43, "iscrowd": 0, "bbox": [324, 93, 56, 40], "area": 1076}, {"id": 7039851, "category_id": 62, "iscrowd": 0, "bbox": [229, 144, 18, 16], "area": 196}, {"id": 4013373, "category_id": 62, "iscrowd": 0, "bbox": [65, 131, 15, 18], "area": 221}, {"id": 2960681, "category_id": 62, "iscrowd": 0, "bbox": [515, 168, 12, 22], "area": 127}, {"id": 6908263, "category_id": 145, "iscrowd": 0, "bbox": [0, 175, 640, 253], "area": 111880}, {"id": 4013380, "category_id": 199, "iscrowd": 0, "bbox": [0, 149, 640, 49], "area": 5380}], "file_name": "000000427997.png", "image_id": 427997}, {"segments_info": [{"id": 725785, "category_id": 1, "iscrowd": 0, "bbox": [380, 262, 31, 28], "area": 414}, {"id": 661533, "category_id": 1, "iscrowd": 0, "bbox": [334, 291, 21, 24], "area": 198}, {"id": 1911085, "category_id": 1, "iscrowd": 0, "bbox": [373, 276, 16, 14], "area": 149}, {"id": 2173749, "category_id": 1, "iscrowd": 0, "bbox": [76, 87, 100, 114], "area": 4494}, {"id": 2045243, "category_id": 2, "iscrowd": 0, "bbox": [318, 304, 43, 39], "area": 708}, {"id": 263945, "category_id": 27, "iscrowd": 0, "bbox": [347, 314, 21, 19], "area": 241}, {"id": 529175, "category_id": 41, "iscrowd": 0, "bbox": [75, 175, 48, 30], "area": 323}, {"id": 2636086, "category_id": 184, "iscrowd": 0, "bbox": [12, 0, 628, 344], "area": 56071}, {"id": 12372938, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 299], "area": 112806}, {"id": 6326155, "category_id": 191, "iscrowd": 0, "bbox": [0, 168, 640, 261], "area": 93836}, {"id": 2179665, "category_id": 198, "iscrowd": 0, "bbox": [305, 290, 106, 63], "area": 2300}], "file_name": "000000428111.png", "image_id": 428111}, {"segments_info": [{"id": 10788776, "category_id": 1, "iscrowd": 0, "bbox": [566, 206, 74, 152], "area": 5832}, {"id": 6185046, "category_id": 1, "iscrowd": 0, "bbox": [68, 191, 47, 118], "area": 4004}, {"id": 13616577, "category_id": 34, "iscrowd": 0, "bbox": [289, 208, 23, 15], "area": 268}, {"id": 5857121, "category_id": 128, "iscrowd": 0, "bbox": [0, 139, 640, 115], "area": 22615}, {"id": 3354424, "category_id": 177, "iscrowd": 0, "bbox": [265, 174, 201, 56], "area": 3531}, {"id": 5727066, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 295], "area": 115972}, {"id": 3427135, "category_id": 185, "iscrowd": 0, "bbox": [0, 201, 470, 65], "area": 7730}, {"id": 14934239, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 184], "area": 3520}, {"id": 5536353, "category_id": 193, "iscrowd": 0, "bbox": [0, 227, 640, 253], "area": 134305}, {"id": 3620411, "category_id": 194, "iscrowd": 0, "bbox": [0, 188, 327, 133], "area": 7122}], "file_name": "000000428218.png", "image_id": 428218}, {"segments_info": [{"id": 7245177, "category_id": 15, "iscrowd": 0, "bbox": [1, 187, 181, 130], "area": 3969}, {"id": 7696697, "category_id": 62, "iscrowd": 0, "bbox": [188, 115, 44, 66], "area": 2067}, {"id": 4145202, "category_id": 62, "iscrowd": 0, "bbox": [204, 180, 105, 139], "area": 7669}, {"id": 9282199, "category_id": 62, "iscrowd": 0, "bbox": [4, 189, 176, 125], "area": 9919}, {"id": 7769692, "category_id": 62, "iscrowd": 0, "bbox": [244, 152, 69, 35], "area": 1460}, {"id": 8222558, "category_id": 73, "iscrowd": 0, "bbox": [119, 138, 45, 36], "area": 1189}, {"id": 13616039, "category_id": 76, "iscrowd": 0, "bbox": [121, 166, 40, 6], "area": 219}, {"id": 6316874, "category_id": 118, "iscrowd": 0, "bbox": [295, 205, 125, 128], "area": 7167}, {"id": 6717832, "category_id": 119, "iscrowd": 0, "bbox": [0, 49, 119, 159], "area": 808}, {"id": 4812370, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 333], "area": 113576}, {"id": 14676195, "category_id": 187, "iscrowd": 0, "bbox": [258, 0, 55, 25], "area": 822}, {"id": 7245188, "category_id": 189, "iscrowd": 0, "bbox": [103, 158, 81, 74], "area": 2774}, {"id": 4812872, "category_id": 193, "iscrowd": 0, "bbox": [168, 118, 185, 215], "area": 4554}, {"id": 4804170, "category_id": 194, "iscrowd": 0, "bbox": [168, 191, 175, 142], "area": 6918}, {"id": 12702158, "category_id": 199, "iscrowd": 0, "bbox": [140, 108, 33, 31], "area": 555}], "file_name": "000000428280.png", "image_id": 428280}, {"segments_info": [{"id": 4479841, "category_id": 1, "iscrowd": 0, "bbox": [319, 126, 94, 190], "area": 9955}, {"id": 6714489, "category_id": 3, "iscrowd": 0, "bbox": [174, 135, 30, 9], "area": 147}, {"id": 4145469, "category_id": 3, "iscrowd": 0, "bbox": [174, 131, 19, 6], "area": 64}, {"id": 3685189, "category_id": 36, "iscrowd": 0, "bbox": [270, 294, 160, 21], "area": 1785}, {"id": 4275347, "category_id": 38, "iscrowd": 0, "bbox": [195, 37, 69, 69], "area": 2254}, {"id": 6841439, "category_id": 159, "iscrowd": 0, "bbox": [0, 122, 500, 211], "area": 82895}, {"id": 3422521, "category_id": 184, "iscrowd": 0, "bbox": [142, 120, 37, 23], "area": 375}, {"id": 10651483, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 146], "area": 61937}, {"id": 6449513, "category_id": 192, "iscrowd": 0, "bbox": [0, 114, 500, 47], "area": 5736}], "file_name": "000000428454.png", "image_id": 428454}, {"segments_info": [{"id": 16106630, "category_id": 1, "iscrowd": 0, "bbox": [317, 0, 36, 53], "area": 1118}, {"id": 14269886, "category_id": 1, "iscrowd": 0, "bbox": [305, 0, 15, 50], "area": 319}, {"id": 14863290, "category_id": 1, "iscrowd": 0, "bbox": [28, 2, 113, 159], "area": 10402}, {"id": 16114891, "category_id": 1, "iscrowd": 0, "bbox": [214, 1, 23, 63], "area": 528}, {"id": 12023629, "category_id": 1, "iscrowd": 0, "bbox": [399, 0, 59, 86], "area": 2075}, {"id": 13343077, "category_id": 1, "iscrowd": 0, "bbox": [281, 0, 19, 59], "area": 602}, {"id": 5531781, "category_id": 20, "iscrowd": 0, "bbox": [455, 98, 184, 308], "area": 43593}, {"id": 13294312, "category_id": 20, "iscrowd": 0, "bbox": [198, 29, 231, 138], "area": 7863}, {"id": 9077894, "category_id": 20, "iscrowd": 0, "bbox": [34, 28, 416, 426], "area": 103548}, {"id": 12892348, "category_id": 20, "iscrowd": 0, "bbox": [547, 1, 93, 101], "area": 6201}, {"id": 10523537, "category_id": 20, "iscrowd": 0, "bbox": [483, 66, 78, 80], "area": 2825}, {"id": 10391430, "category_id": 20, "iscrowd": 0, "bbox": [227, 0, 41, 33], "area": 443}, {"id": 8157827, "category_id": 20, "iscrowd": 0, "bbox": [132, 114, 75, 45], "area": 2466}, {"id": 5721944, "category_id": 20, "iscrowd": 0, "bbox": [334, 355, 306, 125], "area": 18647}, {"id": 15980224, "category_id": 31, "iscrowd": 0, "bbox": [392, 1, 31, 27], "area": 517}, {"id": 15130324, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 222], "area": 46548}, {"id": 4942701, "category_id": 193, "iscrowd": 0, "bbox": [0, 214, 640, 266], "area": 55923}], "file_name": "000000428562.png", "image_id": 428562}, {"segments_info": [{"id": 8498874, "category_id": 62, "iscrowd": 0, "bbox": [423, 133, 14, 17], "area": 231}, {"id": 4347226, "category_id": 62, "iscrowd": 0, "bbox": [480, 151, 18, 68], "area": 720}, {"id": 3089437, "category_id": 67, "iscrowd": 0, "bbox": [2, 149, 431, 180], "area": 38027}, {"id": 7317942, "category_id": 88, "iscrowd": 0, "bbox": [152, 123, 83, 148], "area": 5590}, {"id": 7833255, "category_id": 88, "iscrowd": 0, "bbox": [87, 108, 131, 192], "area": 15005}, {"id": 1316171, "category_id": 88, "iscrowd": 0, "bbox": [206, 130, 72, 96], "area": 3937}, {"id": 6983817, "category_id": 88, "iscrowd": 0, "bbox": [229, 55, 73, 126], "area": 4725}, {"id": 5334639, "category_id": 112, "iscrowd": 0, "bbox": [365, 73, 14, 45], "area": 420}, {"id": 7441300, "category_id": 118, "iscrowd": 0, "bbox": [407, 179, 93, 154], "area": 11337}, {"id": 8558501, "category_id": 130, "iscrowd": 0, "bbox": [415, 0, 85, 52], "area": 1260}, {"id": 7441817, "category_id": 186, "iscrowd": 0, "bbox": [360, 0, 140, 68], "area": 7271}, {"id": 2038812, "category_id": 189, "iscrowd": 0, "bbox": [0, 141, 486, 192], "area": 6379}, {"id": 5002847, "category_id": 195, "iscrowd": 0, "bbox": [46, 132, 378, 154], "area": 1127}, {"id": 12504011, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 246], "area": 61450}], "file_name": "000000428867.png", "image_id": 428867}, {"segments_info": [{"id": 3815740, "category_id": 3, "iscrowd": 0, "bbox": [426, 204, 206, 93], "area": 11247}, {"id": 4936528, "category_id": 8, "iscrowd": 0, "bbox": [47, 147, 211, 132], "area": 21230}, {"id": 7236208, "category_id": 10, "iscrowd": 0, "bbox": [520, 164, 13, 40], "area": 443}, {"id": 6714768, "category_id": 32, "iscrowd": 0, "bbox": [272, 196, 3, 4], "area": 5}, {"id": 11970982, "category_id": 149, "iscrowd": 0, "bbox": [0, 177, 640, 166], "area": 44154}, {"id": 11514563, "category_id": 191, "iscrowd": 0, "bbox": [252, 193, 388, 150], "area": 13139}, {"id": 3553082, "category_id": 197, "iscrowd": 0, "bbox": [99, 30, 519, 224], "area": 76383}, {"id": 9412768, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 191], "area": 48388}], "file_name": "000000429011.png", "image_id": 429011}, {"segments_info": [{"id": 6181209, "category_id": 1, "iscrowd": 0, "bbox": [274, 225, 14, 29], "area": 232}, {"id": 2630778, "category_id": 1, "iscrowd": 0, "bbox": [197, 319, 15, 21], "area": 192}, {"id": 3553617, "category_id": 1, "iscrowd": 0, "bbox": [480, 239, 23, 37], "area": 365}, {"id": 4999774, "category_id": 1, "iscrowd": 0, "bbox": [255, 232, 15, 19], "area": 127}, {"id": 7105402, "category_id": 2, "iscrowd": 0, "bbox": [475, 259, 39, 30], "area": 525}, {"id": 4274229, "category_id": 3, "iscrowd": 0, "bbox": [626, 212, 14, 24], "area": 264}, {"id": 8815492, "category_id": 6, "iscrowd": 0, "bbox": [108, 249, 268, 152], "area": 27238}, {"id": 6841743, "category_id": 6, "iscrowd": 0, "bbox": [306, 182, 305, 103], "area": 21378}, {"id": 6390635, "category_id": 7, "iscrowd": 0, "bbox": [4, 182, 174, 80], "area": 9709}, {"id": 2565764, "category_id": 7, "iscrowd": 0, "bbox": [253, 147, 251, 74], "area": 7896}, {"id": 9081511, "category_id": 92, "iscrowd": 0, "bbox": [0, 70, 429, 135], "area": 4354}, {"id": 2039581, "category_id": 149, "iscrowd": 0, "bbox": [263, 356, 64, 20], "area": 194}, {"id": 4540745, "category_id": 181, "iscrowd": 0, "bbox": [45, 90, 468, 83], "area": 2550}, {"id": 3031104, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 57819}, {"id": 5791846, "category_id": 186, "iscrowd": 0, "bbox": [15, 101, 106, 37], "area": 2308}, {"id": 8940382, "category_id": 187, "iscrowd": 0, "bbox": [399, 0, 241, 52], "area": 3791}, {"id": 6974323, "category_id": 191, "iscrowd": 0, "bbox": [0, 200, 640, 227], "area": 62202}, {"id": 4805216, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 593, 93], "area": 30793}, {"id": 2568248, "category_id": 194, "iscrowd": 0, "bbox": [445, 369, 195, 58], "area": 1599}, {"id": 7436420, "category_id": 197, "iscrowd": 0, "bbox": [0, 51, 640, 141], "area": 20885}, {"id": 5795202, "category_id": 199, "iscrowd": 0, "bbox": [18, 71, 102, 35], "area": 1339}], "file_name": "000000429109.png", "image_id": 429109}, {"segments_info": [{"id": 2397883, "category_id": 52, "iscrowd": 0, "bbox": [148, 118, 332, 272], "area": 62211}, {"id": 2334147, "category_id": 52, "iscrowd": 0, "bbox": [0, 103, 208, 299], "area": 44527}, {"id": 396049, "category_id": 53, "iscrowd": 0, "bbox": [357, 0, 123, 61], "area": 6707}, {"id": 1059623, "category_id": 53, "iscrowd": 0, "bbox": [374, 168, 24, 13], "area": 172}, {"id": 2116234, "category_id": 53, "iscrowd": 0, "bbox": [96, 0, 129, 40], "area": 4532}, {"id": 1385566, "category_id": 53, "iscrowd": 0, "bbox": [288, 140, 22, 34], "area": 514}, {"id": 667751, "category_id": 55, "iscrowd": 0, "bbox": [262, 6, 28, 29], "area": 508}, {"id": 600163, "category_id": 55, "iscrowd": 0, "bbox": [207, 141, 23, 29], "area": 322}, {"id": 860778, "category_id": 55, "iscrowd": 0, "bbox": [339, 150, 30, 22], "area": 474}, {"id": 599886, "category_id": 55, "iscrowd": 0, "bbox": [302, 2, 27, 34], "area": 452}, {"id": 461629, "category_id": 55, "iscrowd": 0, "bbox": [268, 130, 25, 21], "area": 308}, {"id": 800629, "category_id": 55, "iscrowd": 0, "bbox": [232, 5, 30, 23], "area": 399}, {"id": 859994, "category_id": 55, "iscrowd": 0, "bbox": [278, 151, 13, 21], "area": 140}, {"id": 934517, "category_id": 55, "iscrowd": 0, "bbox": [283, 30, 33, 13], "area": 326}, {"id": 737656, "category_id": 55, "iscrowd": 0, "bbox": [281, 12, 32, 19], "area": 360}, {"id": 730969, "category_id": 55, "iscrowd": 0, "bbox": [317, 17, 31, 23], "area": 511}, {"id": 737667, "category_id": 55, "iscrowd": 0, "bbox": [233, 22, 28, 20], "area": 421}, {"id": 1780789, "category_id": 122, "iscrowd": 0, "bbox": [107, 0, 373, 386], "area": 19240}, {"id": 10328474, "category_id": 195, "iscrowd": 0, "bbox": [66, 400, 362, 203], "area": 62794}], "file_name": "000000429281.png", "image_id": 429281}, {"segments_info": [{"id": 10662061, "category_id": 86, "iscrowd": 0, "bbox": [418, 149, 197, 268], "area": 33411}, {"id": 9345436, "category_id": 86, "iscrowd": 0, "bbox": [29, 50, 154, 360], "area": 37613}, {"id": 10331818, "category_id": 86, "iscrowd": 0, "bbox": [250, 48, 166, 357], "area": 33087}, {"id": 10595756, "category_id": 86, "iscrowd": 0, "bbox": [118, 157, 217, 295], "area": 40411}, {"id": 7630489, "category_id": 119, "iscrowd": 0, "bbox": [0, 67, 640, 244], "area": 33997}, {"id": 264708, "category_id": 184, "iscrowd": 0, "bbox": [610, 268, 30, 37], "area": 781}], "file_name": "000000429530.png", "image_id": 429530}, {"segments_info": [{"id": 3223939, "category_id": 44, "iscrowd": 0, "bbox": [614, 114, 22, 77], "area": 1516}, {"id": 10000540, "category_id": 79, "iscrowd": 0, "bbox": [329, 182, 163, 136], "area": 11291}, {"id": 6516089, "category_id": 81, "iscrowd": 0, "bbox": [495, 289, 145, 70], "area": 5513}, {"id": 10856102, "category_id": 82, "iscrowd": 0, "bbox": [0, 108, 191, 367], "area": 57877}, {"id": 1977697, "category_id": 107, "iscrowd": 0, "bbox": [172, 214, 468, 236], "area": 26610}, {"id": 2172987, "category_id": 156, "iscrowd": 0, "bbox": [539, 0, 101, 208], "area": 14628}, {"id": 9350601, "category_id": 171, "iscrowd": 0, "bbox": [484, 459, 23, 21], "area": 191}, {"id": 1845591, "category_id": 176, "iscrowd": 0, "bbox": [0, 54, 640, 426], "area": 74505}, {"id": 3292497, "category_id": 188, "iscrowd": 0, "bbox": [108, 0, 255, 166], "area": 35957}, {"id": 5792623, "category_id": 190, "iscrowd": 0, "bbox": [197, 398, 178, 82], "area": 8629}, {"id": 7372694, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 564, 480], "area": 54277}], "file_name": "000000429598.png", "image_id": 429598}, {"segments_info": [{"id": 2696998, "category_id": 48, "iscrowd": 0, "bbox": [480, 270, 159, 81], "area": 1775}, {"id": 4413823, "category_id": 59, "iscrowd": 0, "bbox": [4, 167, 497, 290], "area": 112763}, {"id": 4341563, "category_id": 62, "iscrowd": 0, "bbox": [271, 1, 243, 153], "area": 29691}, {"id": 4408113, "category_id": 67, "iscrowd": 0, "bbox": [0, 118, 640, 355], "area": 70804}, {"id": 1517883, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 236], "area": 53274}, {"id": 5263410, "category_id": 189, "iscrowd": 0, "bbox": [0, 231, 640, 249], "area": 5051}, {"id": 12492694, "category_id": 195, "iscrowd": 0, "bbox": [252, 110, 228, 96], "area": 13137}, {"id": 5582893, "category_id": 196, "iscrowd": 0, "bbox": [497, 85, 121, 189], "area": 16702}], "file_name": "000000429623.png", "image_id": 429623}, {"segments_info": [{"id": 11706014, "category_id": 1, "iscrowd": 0, "bbox": [465, 117, 27, 71], "area": 850}, {"id": 4866642, "category_id": 1, "iscrowd": 0, "bbox": [497, 130, 86, 105], "area": 3645}, {"id": 5397881, "category_id": 1, "iscrowd": 0, "bbox": [389, 124, 66, 131], "area": 4388}, {"id": 6053508, "category_id": 1, "iscrowd": 0, "bbox": [342, 122, 49, 112], "area": 2805}, {"id": 7428423, "category_id": 1, "iscrowd": 0, "bbox": [269, 105, 29, 65], "area": 1142}, {"id": 3091552, "category_id": 1, "iscrowd": 0, "bbox": [588, 119, 36, 57], "area": 1081}, {"id": 5655121, "category_id": 1, "iscrowd": 0, "bbox": [550, 134, 53, 97], "area": 3186}, {"id": 9532277, "category_id": 1, "iscrowd": 0, "bbox": [2, 0, 223, 427], "area": 70854}, {"id": 6510720, "category_id": 1, "iscrowd": 0, "bbox": [439, 123, 65, 112], "area": 3677}, {"id": 7827320, "category_id": 1, "iscrowd": 0, "bbox": [259, 105, 143, 261], "area": 13906}, {"id": 4210497, "category_id": 15, "iscrowd": 0, "bbox": [355, 234, 267, 14], "area": 1056}, {"id": 4012604, "category_id": 15, "iscrowd": 0, "bbox": [486, 179, 138, 42], "area": 983}, {"id": 3720347, "category_id": 37, "iscrowd": 0, "bbox": [409, 70, 17, 17], "area": 236}, {"id": 3092017, "category_id": 39, "iscrowd": 0, "bbox": [213, 156, 123, 38], "area": 667}, {"id": 12700636, "category_id": 145, "iscrowd": 0, "bbox": [143, 298, 497, 129], "area": 55055}, {"id": 6773843, "category_id": 185, "iscrowd": 0, "bbox": [133, 0, 507, 325], "area": 107055}], "file_name": "000000429690.png", "image_id": 429690}, {"segments_info": [{"id": 2039590, "category_id": 1, "iscrowd": 0, "bbox": [171, 322, 14, 28], "area": 217}, {"id": 1975333, "category_id": 7, "iscrowd": 0, "bbox": [140, 282, 217, 186], "area": 30071}, {"id": 4741234, "category_id": 125, "iscrowd": 0, "bbox": [0, 456, 640, 184], "area": 37480}, {"id": 3490134, "category_id": 147, "iscrowd": 0, "bbox": [0, 419, 640, 221], "area": 69605}, {"id": 2506294, "category_id": 184, "iscrowd": 0, "bbox": [0, 199, 640, 227], "area": 60514}, {"id": 13618891, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 279], "area": 139878}], "file_name": "000000429718.png", "image_id": 429718}, {"segments_info": [{"id": 8620171, "category_id": 1, "iscrowd": 0, "bbox": [188, 78, 121, 311], "area": 17734}, {"id": 9144713, "category_id": 1, "iscrowd": 0, "bbox": [300, 60, 107, 297], "area": 14212}, {"id": 6451573, "category_id": 43, "iscrowd": 0, "bbox": [370, 193, 42, 62], "area": 1202}, {"id": 5272947, "category_id": 43, "iscrowd": 0, "bbox": [193, 220, 21, 56], "area": 453}, {"id": 4616799, "category_id": 138, "iscrowd": 0, "bbox": [0, 169, 640, 209], "area": 76329}, {"id": 4487010, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 162850}], "file_name": "000000429761.png", "image_id": 429761}, {"segments_info": [{"id": 10199196, "category_id": 3, "iscrowd": 0, "bbox": [213, 235, 84, 41], "area": 1088}, {"id": 10731196, "category_id": 85, "iscrowd": 0, "bbox": [234, 127, 44, 55], "area": 1840}, {"id": 4076328, "category_id": 112, "iscrowd": 0, "bbox": [484, 113, 16, 262], "area": 3047}, {"id": 13224633, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 15, 309], "area": 4252}, {"id": 6648442, "category_id": 181, "iscrowd": 0, "bbox": [194, 0, 238, 367], "area": 55558}, {"id": 11245969, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 121635}], "file_name": "000000430048.png", "image_id": 430048}, {"segments_info": [{"id": 3167105, "category_id": 54, "iscrowd": 0, "bbox": [56, 119, 177, 155], "area": 23106}, {"id": 2112370, "category_id": 54, "iscrowd": 0, "bbox": [219, 125, 181, 151], "area": 18200}, {"id": 9606552, "category_id": 76, "iscrowd": 0, "bbox": [103, 117, 397, 48], "area": 8923}, {"id": 9868694, "category_id": 189, "iscrowd": 0, "bbox": [0, 78, 500, 297], "area": 72249}, {"id": 2839932, "category_id": 196, "iscrowd": 0, "bbox": [39, 97, 328, 172], "area": 2958}, {"id": 8158593, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 87], "area": 15289}], "file_name": "000000430056.png", "image_id": 430056}, {"segments_info": [{"id": 7499886, "category_id": 1, "iscrowd": 0, "bbox": [258, 123, 22, 25], "area": 344}, {"id": 8416613, "category_id": 1, "iscrowd": 0, "bbox": [0, 192, 61, 253], "area": 11645}, {"id": 4408132, "category_id": 1, "iscrowd": 0, "bbox": [194, 118, 16, 53], "area": 479}, {"id": 9079688, "category_id": 1, "iscrowd": 0, "bbox": [56, 164, 85, 238], "area": 11135}, {"id": 6840158, "category_id": 1, "iscrowd": 0, "bbox": [117, 123, 22, 56], "area": 637}, {"id": 2960942, "category_id": 1, "iscrowd": 0, "bbox": [231, 114, 15, 34], "area": 400}, {"id": 3948876, "category_id": 1, "iscrowd": 0, "bbox": [451, 201, 51, 88], "area": 1496}, {"id": 6321820, "category_id": 1, "iscrowd": 0, "bbox": [162, 179, 39, 39], "area": 712}, {"id": 8490141, "category_id": 1, "iscrowd": 0, "bbox": [399, 156, 45, 104], "area": 2468}, {"id": 4276547, "category_id": 1, "iscrowd": 0, "bbox": [179, 129, 22, 56], "area": 707}, {"id": 6646121, "category_id": 1, "iscrowd": 0, "bbox": [548, 205, 88, 92], "area": 2321}, {"id": 4276311, "category_id": 1, "iscrowd": 0, "bbox": [497, 207, 60, 102], "area": 1747}, {"id": 6186096, "category_id": 1, "iscrowd": 1, "bbox": [140, 119, 133, 63], "area": 1306}, {"id": 5988727, "category_id": 4, "iscrowd": 0, "bbox": [0, 153, 24, 33], "area": 598}, {"id": 11845570, "category_id": 21, "iscrowd": 0, "bbox": [217, 186, 155, 122], "area": 9615}, {"id": 12765389, "category_id": 31, "iscrowd": 0, "bbox": [149, 135, 10, 21], "area": 117}, {"id": 7306917, "category_id": 31, "iscrowd": 0, "bbox": [135, 139, 8, 18], "area": 93}, {"id": 4211004, "category_id": 47, "iscrowd": 0, "bbox": [387, 157, 6, 10], "area": 49}, {"id": 3684404, "category_id": 47, "iscrowd": 0, "bbox": [363, 158, 5, 7], "area": 34}, {"id": 4341820, "category_id": 47, "iscrowd": 0, "bbox": [410, 159, 6, 10], "area": 43}, {"id": 11841706, "category_id": 62, "iscrowd": 0, "bbox": [553, 208, 37, 49], "area": 1356}, {"id": 2631005, "category_id": 62, "iscrowd": 0, "bbox": [510, 253, 64, 68], "area": 2035}, {"id": 4013719, "category_id": 62, "iscrowd": 0, "bbox": [361, 211, 34, 52], "area": 855}, {"id": 4146248, "category_id": 62, "iscrowd": 0, "bbox": [440, 230, 45, 58], "area": 1104}, {"id": 10197912, "category_id": 62, "iscrowd": 0, "bbox": [470, 192, 14, 15], "area": 133}, {"id": 11514030, "category_id": 62, "iscrowd": 0, "bbox": [501, 209, 28, 63], "area": 998}, {"id": 6844283, "category_id": 62, "iscrowd": 0, "bbox": [571, 247, 68, 66], "area": 1289}, {"id": 10712889, "category_id": 67, "iscrowd": 0, "bbox": [291, 196, 111, 56], "area": 798}, {"id": 3096126, "category_id": 128, "iscrowd": 0, "bbox": [195, 84, 445, 126], "area": 33462}, {"id": 8491933, "category_id": 151, "iscrowd": 0, "bbox": [216, 24, 424, 85], "area": 18109}, {"id": 8888496, "category_id": 161, "iscrowd": 0, "bbox": [37, 140, 56, 41], "area": 1232}, {"id": 9744578, "category_id": 171, "iscrowd": 0, "bbox": [0, 141, 42, 39], "area": 881}, {"id": 3160408, "category_id": 181, "iscrowd": 0, "bbox": [633, 157, 7, 30], "area": 160}, {"id": 5206892, "category_id": 184, "iscrowd": 0, "bbox": [0, 123, 17, 22], "area": 294}, {"id": 4608340, "category_id": 189, "iscrowd": 0, "bbox": [300, 160, 205, 98], "area": 4843}, {"id": 7568515, "category_id": 191, "iscrowd": 0, "bbox": [0, 141, 640, 339], "area": 131308}, {"id": 6850687, "category_id": 193, "iscrowd": 0, "bbox": [15, 127, 37, 21], "area": 452}, {"id": 9083558, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 372, 147], "area": 36453}, {"id": 9609892, "category_id": 199, "iscrowd": 0, "bbox": [360, 0, 280, 252], "area": 13344}], "file_name": "000000430073.png", "image_id": 430073}, {"segments_info": [{"id": 8223605, "category_id": 65, "iscrowd": 0, "bbox": [0, 0, 638, 466], "area": 263922}, {"id": 9342086, "category_id": 75, "iscrowd": 0, "bbox": [159, 15, 100, 143], "area": 9712}, {"id": 6775903, "category_id": 75, "iscrowd": 0, "bbox": [302, 34, 82, 125], "area": 8404}, {"id": 9078914, "category_id": 75, "iscrowd": 0, "bbox": [398, 23, 98, 148], "area": 10442}], "file_name": "000000430286.png", "image_id": 430286}, {"segments_info": [{"id": 4273477, "category_id": 1, "iscrowd": 0, "bbox": [83, 46, 183, 511], "area": 53721}, {"id": 7367036, "category_id": 1, "iscrowd": 0, "bbox": [26, 231, 11, 30], "area": 163}, {"id": 11581382, "category_id": 35, "iscrowd": 0, "bbox": [14, 258, 26, 4], "area": 41}, {"id": 7829901, "category_id": 35, "iscrowd": 0, "bbox": [19, 555, 381, 63], "area": 3970}, {"id": 12964059, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 439, 640], "area": 221807}], "file_name": "000000430377.png", "image_id": 430377}, {"segments_info": [{"id": 3417497, "category_id": 10, "iscrowd": 0, "bbox": [409, 48, 8, 8], "area": 57}, {"id": 1645852, "category_id": 14, "iscrowd": 0, "bbox": [40, 46, 145, 375], "area": 38030}, {"id": 1582896, "category_id": 130, "iscrowd": 0, "bbox": [578, 86, 18, 19], "area": 282}, {"id": 2501939, "category_id": 149, "iscrowd": 0, "bbox": [0, 153, 640, 275], "area": 111328}, {"id": 723981, "category_id": 184, "iscrowd": 0, "bbox": [381, 32, 250, 126], "area": 12190}, {"id": 7167311, "category_id": 187, "iscrowd": 0, "bbox": [379, 0, 261, 124], "area": 21066}, {"id": 1251871, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 224], "area": 28033}], "file_name": "000000430871.png", "image_id": 430871}, {"segments_info": [{"id": 6516784, "category_id": 10, "iscrowd": 0, "bbox": [373, 275, 32, 63], "area": 1837}, {"id": 7700794, "category_id": 10, "iscrowd": 0, "bbox": [197, 271, 48, 64], "area": 2770}, {"id": 2893084, "category_id": 10, "iscrowd": 0, "bbox": [50, 49, 55, 106], "area": 5781}, {"id": 5853771, "category_id": 184, "iscrowd": 0, "bbox": [431, 336, 69, 39], "area": 2045}, {"id": 11110512, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 171620}], "file_name": "000000430875.png", "image_id": 430875}, {"segments_info": [{"id": 7893877, "category_id": 1, "iscrowd": 0, "bbox": [300, 117, 52, 80], "area": 2643}, {"id": 12301494, "category_id": 1, "iscrowd": 0, "bbox": [40, 1, 340, 314], "area": 28996}, {"id": 11518668, "category_id": 37, "iscrowd": 0, "bbox": [114, 67, 12, 13], "area": 113}, {"id": 3947064, "category_id": 40, "iscrowd": 0, "bbox": [284, 90, 38, 45], "area": 1091}, {"id": 5341848, "category_id": 145, "iscrowd": 0, "bbox": [0, 237, 450, 82], "area": 27746}, {"id": 3162424, "category_id": 185, "iscrowd": 0, "bbox": [0, 168, 450, 92], "area": 20865}], "file_name": "000000430961.png", "image_id": 430961}, {"segments_info": [{"id": 1473197, "category_id": 59, "iscrowd": 0, "bbox": [34, 55, 578, 365], "area": 147400}, {"id": 943162, "category_id": 122, "iscrowd": 0, "bbox": [524, 0, 108, 51], "area": 1841}, {"id": 7044490, "category_id": 168, "iscrowd": 0, "bbox": [0, 378, 57, 100], "area": 4422}, {"id": 3294785, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 478], "area": 26549}, {"id": 9351859, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 434, 209], "area": 46870}], "file_name": "000000430973.png", "image_id": 430973}, {"segments_info": [{"id": 8290431, "category_id": 70, "iscrowd": 0, "bbox": [1, 148, 266, 325], "area": 52930}, {"id": 11841197, "category_id": 81, "iscrowd": 0, "bbox": [272, 174, 368, 301], "area": 85412}, {"id": 4016713, "category_id": 133, "iscrowd": 0, "bbox": [433, 0, 207, 232], "area": 37599}, {"id": 2701117, "category_id": 190, "iscrowd": 0, "bbox": [146, 377, 173, 103], "area": 8931}, {"id": 10328212, "category_id": 195, "iscrowd": 0, "bbox": [101, 88, 65, 79], "area": 3453}, {"id": 5794926, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 94533}], "file_name": "000000431140.png", "image_id": 431140}, {"segments_info": [{"id": 3493454, "category_id": 1, "iscrowd": 0, "bbox": [279, 0, 49, 92], "area": 2869}, {"id": 6387331, "category_id": 1, "iscrowd": 0, "bbox": [142, 81, 96, 210], "area": 9139}, {"id": 9747146, "category_id": 40, "iscrowd": 0, "bbox": [220, 152, 18, 24], "area": 264}, {"id": 10133927, "category_id": 40, "iscrowd": 0, "bbox": [183, 146, 29, 15], "area": 246}, {"id": 3906205, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 500, 334], "area": 154227}], "file_name": "000000431545.png", "image_id": 431545}, {"segments_info": [{"id": 5792639, "category_id": 59, "iscrowd": 0, "bbox": [260, 135, 380, 285], "area": 67846}, {"id": 7043492, "category_id": 59, "iscrowd": 0, "bbox": [2, 7, 637, 243], "area": 76662}, {"id": 7636392, "category_id": 59, "iscrowd": 0, "bbox": [3, 142, 325, 260], "area": 56669}, {"id": 12035283, "category_id": 67, "iscrowd": 0, "bbox": [1, 0, 639, 418], "area": 40056}, {"id": 526089, "category_id": 67, "iscrowd": 0, "bbox": [0, 233, 86, 187], "area": 9348}, {"id": 3223617, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 14, 199], "area": 417}, {"id": 9798011, "category_id": 195, "iscrowd": 0, "bbox": [131, 311, 509, 115], "area": 9491}, {"id": 3159107, "category_id": 196, "iscrowd": 0, "bbox": [304, 232, 336, 194], "area": 1497}, {"id": 3682863, "category_id": 200, "iscrowd": 0, "bbox": [0, 338, 189, 88], "area": 5488}], "file_name": "000000431568.png", "image_id": 431568}, {"segments_info": [{"id": 7434365, "category_id": 1, "iscrowd": 0, "bbox": [173, 144, 297, 225], "area": 19689}, {"id": 6670281, "category_id": 37, "iscrowd": 0, "bbox": [116, 236, 14, 13], "area": 153}, {"id": 8094096, "category_id": 43, "iscrowd": 0, "bbox": [109, 271, 81, 39], "area": 1112}, {"id": 4544611, "category_id": 43, "iscrowd": 0, "bbox": [108, 95, 21, 53], "area": 553}, {"id": 7371398, "category_id": 43, "iscrowd": 0, "bbox": [141, 89, 22, 51], "area": 594}, {"id": 6187898, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 528, 217], "area": 95357}, {"id": 7307401, "category_id": 145, "iscrowd": 0, "bbox": [0, 183, 640, 243], "area": 119071}, {"id": 4138530, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 195], "area": 18274}], "file_name": "000000431693.png", "image_id": 431693}, {"segments_info": [{"id": 4475471, "category_id": 23, "iscrowd": 0, "bbox": [278, 180, 247, 170], "area": 28481}, {"id": 4673365, "category_id": 23, "iscrowd": 0, "bbox": [365, 93, 167, 108], "area": 11340}, {"id": 11383478, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 233236}], "file_name": "000000431727.png", "image_id": 431727}, {"segments_info": [{"id": 921102, "category_id": 1, "iscrowd": 0, "bbox": [88, 303, 58, 96], "area": 3142}, {"id": 6974058, "category_id": 1, "iscrowd": 0, "bbox": [65, 101, 311, 382], "area": 35542}, {"id": 9276813, "category_id": 41, "iscrowd": 0, "bbox": [190, 384, 140, 140], "area": 6050}, {"id": 6250335, "category_id": 149, "iscrowd": 0, "bbox": [0, 387, 378, 108], "area": 15907}, {"id": 9013641, "category_id": 171, "iscrowd": 0, "bbox": [0, 557, 378, 83], "area": 28133}, {"id": 13355979, "category_id": 191, "iscrowd": 0, "bbox": [0, 364, 378, 208], "area": 36502}, {"id": 5395026, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 378, 406], "area": 107481}], "file_name": "000000431848.png", "image_id": 431848}, {"segments_info": [{"id": 3746108, "category_id": 1, "iscrowd": 0, "bbox": [363, 384, 14, 22], "area": 198}, {"id": 6444643, "category_id": 1, "iscrowd": 0, "bbox": [177, 324, 38, 56], "area": 1080}, {"id": 6576742, "category_id": 1, "iscrowd": 0, "bbox": [127, 330, 32, 48], "area": 938}, {"id": 3679525, "category_id": 1, "iscrowd": 0, "bbox": [373, 378, 33, 137], "area": 919}, {"id": 5129827, "category_id": 1, "iscrowd": 0, "bbox": [330, 367, 30, 35], "area": 634}, {"id": 4863286, "category_id": 1, "iscrowd": 0, "bbox": [284, 318, 47, 87], "area": 2620}, {"id": 5458004, "category_id": 1, "iscrowd": 0, "bbox": [223, 328, 43, 62], "area": 1443}, {"id": 5129904, "category_id": 10, "iscrowd": 0, "bbox": [126, 276, 20, 58], "area": 1064}, {"id": 4735582, "category_id": 19, "iscrowd": 0, "bbox": [175, 363, 233, 183], "area": 19152}, {"id": 5854307, "category_id": 19, "iscrowd": 0, "bbox": [22, 365, 233, 168], "area": 16616}, {"id": 4077877, "category_id": 27, "iscrowd": 0, "bbox": [387, 398, 31, 48], "area": 525}, {"id": 9085374, "category_id": 130, "iscrowd": 0, "bbox": [200, 94, 122, 117], "area": 2652}, {"id": 10853537, "category_id": 147, "iscrowd": 0, "bbox": [0, 526, 425, 114], "area": 29562}, {"id": 9536908, "category_id": 149, "iscrowd": 0, "bbox": [0, 460, 425, 180], "area": 25210}, {"id": 5669528, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 425, 403], "area": 106864}, {"id": 8025233, "category_id": 191, "iscrowd": 0, "bbox": [0, 428, 425, 123], "area": 8531}, {"id": 10000558, "category_id": 197, "iscrowd": 0, "bbox": [0, 144, 425, 300], "area": 37334}, {"id": 5525597, "category_id": 199, "iscrowd": 0, "bbox": [386, 304, 39, 207], "area": 4483}], "file_name": "000000431876.png", "image_id": 431876}, {"segments_info": [{"id": 2833744, "category_id": 7, "iscrowd": 0, "bbox": [106, 56, 469, 346], "area": 102960}, {"id": 4877716, "category_id": 144, "iscrowd": 0, "bbox": [0, 238, 401, 190], "area": 44472}, {"id": 2236963, "category_id": 147, "iscrowd": 0, "bbox": [371, 287, 269, 141], "area": 17974}, {"id": 3426130, "category_id": 151, "iscrowd": 0, "bbox": [31, 170, 609, 69], "area": 3871}, {"id": 12624233, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 208], "area": 80599}, {"id": 5197902, "category_id": 197, "iscrowd": 0, "bbox": [0, 127, 640, 179], "area": 23107}], "file_name": "000000431896.png", "image_id": 431896}, {"segments_info": [{"id": 4404015, "category_id": 1, "iscrowd": 0, "bbox": [199, 5, 301, 365], "area": 48708}, {"id": 6042163, "category_id": 44, "iscrowd": 0, "bbox": [113, 104, 48, 113], "area": 4592}, {"id": 7709895, "category_id": 54, "iscrowd": 0, "bbox": [156, 177, 86, 56], "area": 2390}, {"id": 6724294, "category_id": 54, "iscrowd": 0, "bbox": [205, 179, 89, 57], "area": 3923}, {"id": 1907998, "category_id": 74, "iscrowd": 0, "bbox": [18, 215, 64, 38], "area": 1572}, {"id": 4607634, "category_id": 100, "iscrowd": 0, "bbox": [39, 148, 80, 67], "area": 3382}, {"id": 3230552, "category_id": 112, "iscrowd": 0, "bbox": [293, 0, 182, 375], "area": 24393}, {"id": 7179177, "category_id": 189, "iscrowd": 0, "bbox": [0, 194, 341, 181], "area": 41837}, {"id": 8238750, "category_id": 195, "iscrowd": 0, "bbox": [98, 94, 120, 75], "area": 4000}, {"id": 6922156, "category_id": 196, "iscrowd": 0, "bbox": [196, 212, 113, 28], "area": 800}, {"id": 11053995, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 297, 168], "area": 29200}], "file_name": "000000432085.png", "image_id": 432085}, {"segments_info": [{"id": 6977934, "category_id": 17, "iscrowd": 0, "bbox": [0, 32, 368, 200], "area": 50987}, {"id": 4079166, "category_id": 33, "iscrowd": 0, "bbox": [1, 263, 425, 368], "area": 150447}, {"id": 15065566, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 325, 185], "area": 27147}], "file_name": "000000432468.png", "image_id": 432468}, {"segments_info": [{"id": 3684935, "category_id": 1, "iscrowd": 0, "bbox": [204, 2, 182, 518], "area": 38197}, {"id": 8419692, "category_id": 2, "iscrowd": 0, "bbox": [80, 79, 67, 154], "area": 4197}, {"id": 2565157, "category_id": 15, "iscrowd": 0, "bbox": [248, 0, 176, 292], "area": 35100}, {"id": 12107477, "category_id": 18, "iscrowd": 0, "bbox": [1, 214, 109, 247], "area": 6431}, {"id": 4481936, "category_id": 18, "iscrowd": 0, "bbox": [0, 197, 217, 275], "area": 36285}, {"id": 15397097, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 205, 109], "area": 16431}, {"id": 15197908, "category_id": 187, "iscrowd": 0, "bbox": [223, 33, 16, 22], "area": 205}, {"id": 6710884, "category_id": 190, "iscrowd": 0, "bbox": [0, 365, 427, 275], "area": 75481}, {"id": 2698040, "category_id": 199, "iscrowd": 0, "bbox": [243, 19, 37, 66], "area": 1242}], "file_name": "000000432553.png", "image_id": 432553}, {"segments_info": [{"id": 2303526, "category_id": 1, "iscrowd": 0, "bbox": [474, 289, 10, 21], "area": 107}, {"id": 6184556, "category_id": 1, "iscrowd": 0, "bbox": [426, 292, 8, 19], "area": 85}, {"id": 6053969, "category_id": 1, "iscrowd": 0, "bbox": [116, 282, 9, 17], "area": 89}, {"id": 4603710, "category_id": 1, "iscrowd": 0, "bbox": [234, 287, 4, 11], "area": 30}, {"id": 4144701, "category_id": 1, "iscrowd": 0, "bbox": [58, 280, 7, 19], "area": 69}, {"id": 7567996, "category_id": 1, "iscrowd": 0, "bbox": [347, 267, 91, 215], "area": 7969}, {"id": 4406366, "category_id": 1, "iscrowd": 0, "bbox": [433, 286, 8, 23], "area": 104}, {"id": 5262411, "category_id": 1, "iscrowd": 0, "bbox": [107, 283, 5, 16], "area": 61}, {"id": 4472179, "category_id": 1, "iscrowd": 0, "bbox": [194, 286, 6, 13], "area": 50}, {"id": 6053472, "category_id": 1, "iscrowd": 0, "bbox": [343, 283, 17, 23], "area": 158}, {"id": 4604998, "category_id": 1, "iscrowd": 0, "bbox": [369, 283, 10, 21], "area": 110}, {"id": 7564396, "category_id": 1, "iscrowd": 0, "bbox": [320, 283, 11, 27], "area": 133}, {"id": 8748151, "category_id": 1, "iscrowd": 0, "bbox": [257, 284, 6, 15], "area": 60}, {"id": 6315870, "category_id": 1, "iscrowd": 1, "bbox": [77, 282, 11, 16], "area": 136}, {"id": 7894649, "category_id": 3, "iscrowd": 0, "bbox": [294, 277, 55, 22], "area": 727}, {"id": 5327944, "category_id": 3, "iscrowd": 0, "bbox": [145, 287, 37, 13], "area": 390}, {"id": 4341582, "category_id": 3, "iscrowd": 0, "bbox": [97, 279, 49, 20], "area": 432}, {"id": 10461085, "category_id": 3, "iscrowd": 0, "bbox": [210, 287, 15, 11], "area": 110}, {"id": 8160389, "category_id": 3, "iscrowd": 0, "bbox": [139, 277, 48, 19], "area": 460}, {"id": 9409681, "category_id": 3, "iscrowd": 0, "bbox": [198, 288, 21, 10], "area": 122}, {"id": 4342589, "category_id": 3, "iscrowd": 0, "bbox": [87, 283, 18, 14], "area": 138}, {"id": 9606287, "category_id": 8, "iscrowd": 0, "bbox": [459, 273, 35, 34], "area": 748}, {"id": 10132376, "category_id": 8, "iscrowd": 0, "bbox": [228, 276, 52, 23], "area": 807}, {"id": 11185074, "category_id": 38, "iscrowd": 0, "bbox": [316, 228, 5, 8], "area": 20}, {"id": 6051548, "category_id": 38, "iscrowd": 0, "bbox": [473, 127, 11, 7], "area": 56}, {"id": 10001046, "category_id": 38, "iscrowd": 0, "bbox": [277, 246, 11, 11], "area": 31}, {"id": 11517897, "category_id": 38, "iscrowd": 0, "bbox": [280, 256, 9, 8], "area": 30}, {"id": 10327959, "category_id": 38, "iscrowd": 0, "bbox": [55, 23, 62, 46], "area": 774}, {"id": 13153509, "category_id": 38, "iscrowd": 0, "bbox": [94, 255, 8, 6], "area": 25}, {"id": 10656691, "category_id": 38, "iscrowd": 0, "bbox": [110, 257, 7, 7], "area": 20}, {"id": 11908283, "category_id": 38, "iscrowd": 0, "bbox": [11, 241, 16, 8], "area": 36}, {"id": 11712973, "category_id": 38, "iscrowd": 0, "bbox": [227, 258, 11, 15], "area": 78}, {"id": 8948662, "category_id": 38, "iscrowd": 0, "bbox": [375, 238, 9, 6], "area": 24}, {"id": 9160143, "category_id": 38, "iscrowd": 0, "bbox": [112, 237, 4, 5], "area": 8}, {"id": 12297681, "category_id": 38, "iscrowd": 0, "bbox": [78, 239, 4, 8], "area": 18}, {"id": 11775438, "category_id": 38, "iscrowd": 0, "bbox": [392, 155, 6, 11], "area": 28}, {"id": 13224909, "category_id": 38, "iscrowd": 1, "bbox": [102, 236, 270, 42], "area": 312}, {"id": 4938330, "category_id": 184, "iscrowd": 0, "bbox": [0, 260, 69, 33], "area": 1300}, {"id": 14079180, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 280], "area": 132388}, {"id": 2448722, "category_id": 193, "iscrowd": 0, "bbox": [0, 282, 500, 218], "area": 91940}, {"id": 8619659, "category_id": 197, "iscrowd": 0, "bbox": [14, 240, 486, 77], "area": 9128}], "file_name": "000000432898.png", "image_id": 432898}, {"segments_info": [{"id": 1190449, "category_id": 1, "iscrowd": 0, "bbox": [402, 79, 142, 239], "area": 9133}, {"id": 1646370, "category_id": 1, "iscrowd": 0, "bbox": [468, 69, 60, 95], "area": 1995}, {"id": 933201, "category_id": 1, "iscrowd": 0, "bbox": [1, 14, 286, 406], "area": 53307}, {"id": 2702926, "category_id": 1, "iscrowd": 0, "bbox": [541, 46, 83, 227], "area": 6577}, {"id": 4409934, "category_id": 1, "iscrowd": 0, "bbox": [422, 69, 21, 39], "area": 430}, {"id": 1975073, "category_id": 1, "iscrowd": 0, "bbox": [524, 17, 58, 92], "area": 3072}, {"id": 2701637, "category_id": 1, "iscrowd": 0, "bbox": [344, 55, 156, 329], "area": 12248}, {"id": 1256247, "category_id": 1, "iscrowd": 0, "bbox": [283, 41, 179, 378], "area": 21346}, {"id": 1325385, "category_id": 1, "iscrowd": 0, "bbox": [143, 24, 277, 394], "area": 37331}, {"id": 3425354, "category_id": 1, "iscrowd": 0, "bbox": [573, 6, 67, 213], "area": 4212}, {"id": 791058, "category_id": 1, "iscrowd": 0, "bbox": [469, 93, 127, 84], "area": 5011}, {"id": 3766413, "category_id": 62, "iscrowd": 0, "bbox": [0, 115, 56, 310], "area": 3190}, {"id": 5210479, "category_id": 73, "iscrowd": 0, "bbox": [222, 225, 184, 93], "area": 7130}, {"id": 6326137, "category_id": 73, "iscrowd": 0, "bbox": [479, 159, 44, 61], "area": 1468}, {"id": 7047809, "category_id": 73, "iscrowd": 0, "bbox": [506, 147, 37, 60], "area": 898}, {"id": 4817006, "category_id": 73, "iscrowd": 0, "bbox": [94, 287, 238, 122], "area": 13767}, {"id": 5337713, "category_id": 73, "iscrowd": 0, "bbox": [537, 157, 60, 58], "area": 1597}, {"id": 5734513, "category_id": 73, "iscrowd": 0, "bbox": [376, 176, 83, 90], "area": 2494}, {"id": 5996400, "category_id": 73, "iscrowd": 0, "bbox": [429, 169, 70, 74], "area": 1822}, {"id": 15526631, "category_id": 181, "iscrowd": 0, "bbox": [203, 0, 437, 180], "area": 11699}, {"id": 6388611, "category_id": 190, "iscrowd": 0, "bbox": [168, 177, 472, 248], "area": 27183}, {"id": 9600356, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 524, 133], "area": 24701}], "file_name": "000000433103.png", "image_id": 433103}, {"segments_info": [{"id": 10529959, "category_id": 17, "iscrowd": 0, "bbox": [224, 7, 416, 468], "area": 112462}, {"id": 2324044, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 194078}], "file_name": "000000433134.png", "image_id": 433134}, {"segments_info": [{"id": 6250336, "category_id": 65, "iscrowd": 0, "bbox": [83, 85, 417, 284], "area": 86933}, {"id": 5592408, "category_id": 73, "iscrowd": 0, "bbox": [142, 143, 122, 86], "area": 6085}, {"id": 6250592, "category_id": 84, "iscrowd": 0, "bbox": [257, 164, 42, 16], "area": 371}, {"id": 2039582, "category_id": 190, "iscrowd": 0, "bbox": [0, 224, 500, 151], "area": 21180}, {"id": 5788751, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 238], "area": 72483}], "file_name": "000000433192.png", "image_id": 433192}, {"segments_info": [{"id": 3814196, "category_id": 1, "iscrowd": 0, "bbox": [277, 245, 20, 69], "area": 554}, {"id": 4013903, "category_id": 1, "iscrowd": 0, "bbox": [289, 255, 7, 12], "area": 55}, {"id": 4944490, "category_id": 1, "iscrowd": 0, "bbox": [424, 234, 21, 64], "area": 743}, {"id": 4350811, "category_id": 1, "iscrowd": 0, "bbox": [463, 237, 15, 52], "area": 372}, {"id": 3694171, "category_id": 1, "iscrowd": 0, "bbox": [443, 240, 16, 53], "area": 498}, {"id": 4868938, "category_id": 3, "iscrowd": 0, "bbox": [472, 238, 20, 23], "area": 296}, {"id": 5524811, "category_id": 3, "iscrowd": 0, "bbox": [392, 248, 34, 13], "area": 283}, {"id": 4671307, "category_id": 4, "iscrowd": 0, "bbox": [245, 253, 67, 66], "area": 2322}, {"id": 6978435, "category_id": 125, "iscrowd": 0, "bbox": [0, 299, 129, 45], "area": 2278}, {"id": 5265499, "category_id": 128, "iscrowd": 0, "bbox": [0, 179, 490, 127], "area": 14800}, {"id": 6645350, "category_id": 130, "iscrowd": 0, "bbox": [101, 161, 81, 112], "area": 670}, {"id": 8556180, "category_id": 149, "iscrowd": 0, "bbox": [0, 250, 640, 230], "area": 107322}, {"id": 2371628, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 330], "area": 65826}, {"id": 15657185, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 558, 206], "area": 96496}, {"id": 6518913, "category_id": 191, "iscrowd": 0, "bbox": [0, 287, 640, 37], "area": 2878}, {"id": 3165514, "category_id": 193, "iscrowd": 0, "bbox": [178, 258, 462, 125], "area": 10042}, {"id": 8030864, "category_id": 199, "iscrowd": 0, "bbox": [86, 267, 94, 27], "area": 562}], "file_name": "000000433204.png", "image_id": 433204}, {"segments_info": [{"id": 7768481, "category_id": 24, "iscrowd": 0, "bbox": [194, 135, 291, 239], "area": 30108}, {"id": 5400975, "category_id": 25, "iscrowd": 0, "bbox": [163, 67, 386, 288], "area": 31416}, {"id": 861219, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 408], "area": 88085}, {"id": 9086922, "category_id": 194, "iscrowd": 0, "bbox": [139, 301, 501, 123], "area": 33504}, {"id": 4483192, "category_id": 198, "iscrowd": 0, "bbox": [15, 159, 625, 265], "area": 53085}], "file_name": "000000433243.png", "image_id": 433243}, {"segments_info": [{"id": 6123134, "category_id": 22, "iscrowd": 0, "bbox": [116, 64, 183, 171], "area": 18938}, {"id": 6385788, "category_id": 22, "iscrowd": 0, "bbox": [225, 169, 85, 77], "area": 3263}, {"id": 6451323, "category_id": 22, "iscrowd": 0, "bbox": [0, 106, 121, 75], "area": 6635}, {"id": 6582397, "category_id": 22, "iscrowd": 0, "bbox": [299, 179, 77, 78], "area": 3897}, {"id": 4804439, "category_id": 22, "iscrowd": 0, "bbox": [592, 82, 48, 118], "area": 4010}, {"id": 5726570, "category_id": 22, "iscrowd": 0, "bbox": [505, 70, 79, 138], "area": 6982}, {"id": 10001045, "category_id": 148, "iscrowd": 0, "bbox": [0, 288, 640, 140], "area": 66475}, {"id": 7836588, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 163148}], "file_name": "000000433374.png", "image_id": 433374}, {"segments_info": [{"id": 3684692, "category_id": 1, "iscrowd": 0, "bbox": [454, 301, 10, 26], "area": 181}, {"id": 3422542, "category_id": 1, "iscrowd": 0, "bbox": [424, 311, 7, 19], "area": 86}, {"id": 3154756, "category_id": 1, "iscrowd": 0, "bbox": [399, 308, 11, 23], "area": 112}, {"id": 3089980, "category_id": 1, "iscrowd": 0, "bbox": [345, 321, 8, 11], "area": 63}, {"id": 4352102, "category_id": 1, "iscrowd": 0, "bbox": [307, 305, 9, 29], "area": 162}, {"id": 6581631, "category_id": 1, "iscrowd": 0, "bbox": [83, 316, 10, 15], "area": 111}, {"id": 3220790, "category_id": 1, "iscrowd": 0, "bbox": [434, 303, 10, 29], "area": 196}, {"id": 3878203, "category_id": 1, "iscrowd": 0, "bbox": [315, 307, 11, 25], "area": 205}, {"id": 2961474, "category_id": 1, "iscrowd": 0, "bbox": [506, 301, 6, 17], "area": 75}, {"id": 2429740, "category_id": 1, "iscrowd": 0, "bbox": [410, 311, 10, 20], "area": 126}, {"id": 2365751, "category_id": 1, "iscrowd": 0, "bbox": [361, 303, 8, 25], "area": 128}, {"id": 4407116, "category_id": 1, "iscrowd": 0, "bbox": [283, 305, 15, 30], "area": 240}, {"id": 4671563, "category_id": 1, "iscrowd": 0, "bbox": [551, 290, 8, 13], "area": 63}, {"id": 3881802, "category_id": 1, "iscrowd": 1, "bbox": [102, 287, 524, 58], "area": 1895}, {"id": 7103339, "category_id": 3, "iscrowd": 0, "bbox": [256, 305, 33, 11], "area": 246}, {"id": 4933192, "category_id": 3, "iscrowd": 0, "bbox": [434, 294, 10, 8], "area": 61}, {"id": 8420996, "category_id": 3, "iscrowd": 0, "bbox": [236, 306, 12, 7], "area": 51}, {"id": 5589337, "category_id": 3, "iscrowd": 0, "bbox": [490, 287, 15, 9], "area": 112}, {"id": 6507862, "category_id": 3, "iscrowd": 0, "bbox": [129, 313, 32, 17], "area": 419}, {"id": 7236211, "category_id": 3, "iscrowd": 0, "bbox": [586, 274, 18, 7], "area": 85}, {"id": 4271425, "category_id": 3, "iscrowd": 0, "bbox": [544, 277, 8, 9], "area": 43}, {"id": 8223105, "category_id": 3, "iscrowd": 0, "bbox": [524, 284, 16, 8], "area": 82}, {"id": 7171704, "category_id": 3, "iscrowd": 0, "bbox": [537, 284, 10, 6], "area": 48}, {"id": 3415343, "category_id": 3, "iscrowd": 0, "bbox": [466, 290, 19, 9], "area": 88}, {"id": 4929355, "category_id": 3, "iscrowd": 0, "bbox": [387, 296, 15, 9], "area": 93}, {"id": 7627381, "category_id": 3, "iscrowd": 0, "bbox": [606, 271, 22, 6], "area": 93}, {"id": 7559804, "category_id": 38, "iscrowd": 0, "bbox": [205, 95, 306, 116], "area": 7975}, {"id": 4932441, "category_id": 128, "iscrowd": 0, "bbox": [158, 214, 387, 100], "area": 14232}, {"id": 4012107, "category_id": 184, "iscrowd": 0, "bbox": [0, 157, 640, 186], "area": 47836}, {"id": 11769494, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 250], "area": 124760}, {"id": 2900043, "category_id": 193, "iscrowd": 0, "bbox": [0, 283, 640, 197], "area": 106495}], "file_name": "000000433515.png", "image_id": 433515}, {"segments_info": [{"id": 3881787, "category_id": 3, "iscrowd": 0, "bbox": [128, 129, 9, 8], "area": 62}, {"id": 2894892, "category_id": 3, "iscrowd": 0, "bbox": [144, 129, 13, 11], "area": 107}, {"id": 4210752, "category_id": 10, "iscrowd": 0, "bbox": [59, 77, 6, 11], "area": 66}, {"id": 2236962, "category_id": 10, "iscrowd": 0, "bbox": [58, 63, 7, 14], "area": 89}, {"id": 2631720, "category_id": 10, "iscrowd": 0, "bbox": [98, 63, 8, 14], "area": 97}, {"id": 3684408, "category_id": 14, "iscrowd": 0, "bbox": [417, 111, 45, 213], "area": 6264}, {"id": 4210755, "category_id": 14, "iscrowd": 0, "bbox": [446, 110, 111, 244], "area": 21867}, {"id": 5987163, "category_id": 112, "iscrowd": 0, "bbox": [573, 81, 67, 107], "area": 5265}, {"id": 13290186, "category_id": 149, "iscrowd": 0, "bbox": [0, 130, 213, 297], "area": 49005}, {"id": 3223857, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 174], "area": 65321}, {"id": 10855845, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 118, 111], "area": 5075}, {"id": 7105644, "category_id": 191, "iscrowd": 0, "bbox": [148, 135, 492, 292], "area": 13854}, {"id": 5000268, "category_id": 193, "iscrowd": 0, "bbox": [161, 152, 479, 275], "area": 82318}, {"id": 7039851, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 187], "area": 17697}], "file_name": "000000433774.png", "image_id": 433774}, {"segments_info": [{"id": 6641762, "category_id": 1, "iscrowd": 0, "bbox": [44, 62, 242, 345], "area": 33671}, {"id": 8091544, "category_id": 1, "iscrowd": 0, "bbox": [136, 60, 371, 360], "area": 72923}, {"id": 8746632, "category_id": 32, "iscrowd": 0, "bbox": [221, 355, 57, 55], "area": 1772}, {"id": 790558, "category_id": 72, "iscrowd": 0, "bbox": [1, 2, 575, 471], "area": 157577}], "file_name": "000000433915.png", "image_id": 433915}, {"segments_info": [{"id": 346719, "category_id": 1, "iscrowd": 0, "bbox": [2, 2, 349, 492], "area": 124647}, {"id": 198424, "category_id": 77, "iscrowd": 0, "bbox": [77, 291, 75, 144], "area": 6162}, {"id": 333881, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 45842}], "file_name": "000000433980.png", "image_id": 433980}, {"segments_info": [{"id": 2365202, "category_id": 1, "iscrowd": 0, "bbox": [245, 0, 78, 153], "area": 8775}, {"id": 6572597, "category_id": 1, "iscrowd": 0, "bbox": [117, 2, 119, 224], "area": 14066}, {"id": 4731944, "category_id": 1, "iscrowd": 0, "bbox": [67, 1, 33, 43], "area": 653}, {"id": 2037008, "category_id": 1, "iscrowd": 0, "bbox": [186, 0, 24, 50], "area": 547}, {"id": 5065800, "category_id": 15, "iscrowd": 0, "bbox": [314, 36, 17, 26], "area": 216}, {"id": 5131081, "category_id": 15, "iscrowd": 0, "bbox": [405, 245, 95, 84], "area": 4357}, {"id": 4275769, "category_id": 15, "iscrowd": 0, "bbox": [315, 75, 77, 72], "area": 1567}, {"id": 2300435, "category_id": 27, "iscrowd": 0, "bbox": [311, 62, 29, 56], "area": 1072}, {"id": 5064505, "category_id": 41, "iscrowd": 0, "bbox": [178, 195, 51, 41], "area": 921}, {"id": 3028014, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 333], "area": 20800}, {"id": 7627602, "category_id": 190, "iscrowd": 0, "bbox": [312, 178, 146, 43], "area": 5098}, {"id": 12362637, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 452, 333], "area": 60814}, {"id": 1187608, "category_id": 193, "iscrowd": 0, "bbox": [359, 22, 141, 67], "area": 3123}, {"id": 1317146, "category_id": 194, "iscrowd": 0, "bbox": [415, 25, 85, 104], "area": 3241}, {"id": 7956830, "category_id": 199, "iscrowd": 0, "bbox": [0, 11, 500, 322], "area": 31804}], "file_name": "000000434204.png", "image_id": 434204}, {"segments_info": [{"id": 3032643, "category_id": 1, "iscrowd": 0, "bbox": [239, 91, 47, 108], "area": 2974}, {"id": 797230, "category_id": 1, "iscrowd": 0, "bbox": [282, 127, 16, 22], "area": 263}, {"id": 1714490, "category_id": 1, "iscrowd": 0, "bbox": [238, 76, 29, 42], "area": 414}, {"id": 1522990, "category_id": 1, "iscrowd": 0, "bbox": [271, 145, 31, 47], "area": 852}, {"id": 2179621, "category_id": 51, "iscrowd": 0, "bbox": [33, 177, 15, 19], "area": 191}, {"id": 1653525, "category_id": 51, "iscrowd": 0, "bbox": [44, 173, 23, 24], "area": 428}, {"id": 2193027, "category_id": 51, "iscrowd": 0, "bbox": [15, 61, 17, 22], "area": 229}, {"id": 10590345, "category_id": 86, "iscrowd": 0, "bbox": [380, 255, 37, 58], "area": 1111}, {"id": 7634526, "category_id": 86, "iscrowd": 0, "bbox": [139, 232, 18, 63], "area": 571}, {"id": 8820881, "category_id": 86, "iscrowd": 0, "bbox": [255, 246, 27, 46], "area": 836}, {"id": 8751721, "category_id": 86, "iscrowd": 0, "bbox": [45, 222, 50, 53], "area": 792}, {"id": 10460041, "category_id": 86, "iscrowd": 0, "bbox": [322, 258, 34, 55], "area": 1429}, {"id": 9604477, "category_id": 86, "iscrowd": 0, "bbox": [360, 246, 33, 67], "area": 1398}, {"id": 7497548, "category_id": 86, "iscrowd": 0, "bbox": [95, 237, 12, 36], "area": 270}, {"id": 6521218, "category_id": 86, "iscrowd": 0, "bbox": [402, 246, 28, 62], "area": 670}, {"id": 3101767, "category_id": 86, "iscrowd": 0, "bbox": [338, 167, 53, 92], "area": 2804}, {"id": 8288614, "category_id": 86, "iscrowd": 0, "bbox": [62, 256, 25, 57], "area": 1042}, {"id": 8422782, "category_id": 86, "iscrowd": 0, "bbox": [338, 234, 30, 76], "area": 905}, {"id": 7770012, "category_id": 86, "iscrowd": 0, "bbox": [200, 217, 29, 73], "area": 1332}, {"id": 5323561, "category_id": 86, "iscrowd": 0, "bbox": [55, 252, 10, 33], "area": 228}, {"id": 8098680, "category_id": 86, "iscrowd": 1, "bbox": [62, 56, 176, 168], "area": 16528}, {"id": 11188912, "category_id": 130, "iscrowd": 0, "bbox": [0, 10, 273, 58], "area": 1442}, {"id": 5737895, "category_id": 175, "iscrowd": 0, "bbox": [257, 25, 110, 66], "area": 2975}, {"id": 4676693, "category_id": 190, "iscrowd": 0, "bbox": [207, 270, 111, 43], "area": 2235}, {"id": 5010552, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 313], "area": 49572}], "file_name": "000000434230.png", "image_id": 434230}, {"segments_info": [{"id": 2105122, "category_id": 1, "iscrowd": 0, "bbox": [404, 271, 8, 15], "area": 69}, {"id": 2499367, "category_id": 1, "iscrowd": 0, "bbox": [36, 284, 11, 30], "area": 179}, {"id": 1315864, "category_id": 1, "iscrowd": 0, "bbox": [138, 280, 14, 26], "area": 177}, {"id": 2960690, "category_id": 1, "iscrowd": 0, "bbox": [518, 266, 18, 9], "area": 71}, {"id": 987413, "category_id": 1, "iscrowd": 0, "bbox": [366, 270, 10, 20], "area": 87}, {"id": 2500652, "category_id": 1, "iscrowd": 0, "bbox": [554, 265, 9, 16], "area": 89}, {"id": 8553604, "category_id": 16, "iscrowd": 0, "bbox": [327, 246, 8, 7], "area": 25}, {"id": 5920856, "category_id": 16, "iscrowd": 0, "bbox": [489, 261, 7, 9], "area": 31}, {"id": 9606035, "category_id": 16, "iscrowd": 0, "bbox": [416, 248, 9, 6], "area": 20}, {"id": 6515312, "category_id": 16, "iscrowd": 0, "bbox": [300, 293, 8, 8], "area": 39}, {"id": 11119531, "category_id": 16, "iscrowd": 0, "bbox": [471, 247, 17, 5], "area": 46}, {"id": 7895416, "category_id": 16, "iscrowd": 0, "bbox": [435, 267, 12, 9], "area": 46}, {"id": 3949123, "category_id": 16, "iscrowd": 0, "bbox": [316, 282, 8, 7], "area": 24}, {"id": 6580074, "category_id": 16, "iscrowd": 0, "bbox": [490, 276, 9, 5], "area": 25}, {"id": 5067091, "category_id": 16, "iscrowd": 0, "bbox": [448, 274, 10, 9], "area": 41}, {"id": 5790042, "category_id": 16, "iscrowd": 0, "bbox": [342, 271, 12, 9], "area": 30}, {"id": 3816506, "category_id": 16, "iscrowd": 0, "bbox": [318, 252, 2, 2], "area": 4}, {"id": 5855838, "category_id": 16, "iscrowd": 0, "bbox": [324, 274, 9, 9], "area": 31}, {"id": 9672341, "category_id": 16, "iscrowd": 0, "bbox": [451, 250, 12, 5], "area": 26}, {"id": 7500402, "category_id": 16, "iscrowd": 0, "bbox": [461, 267, 14, 7], "area": 42}, {"id": 10659239, "category_id": 16, "iscrowd": 1, "bbox": [297, 244, 205, 62], "area": 1339}, {"id": 3162965, "category_id": 19, "iscrowd": 0, "bbox": [356, 277, 24, 20], "area": 169}, {"id": 5596272, "category_id": 19, "iscrowd": 0, "bbox": [122, 292, 41, 27], "area": 406}, {"id": 2502456, "category_id": 19, "iscrowd": 0, "bbox": [546, 270, 18, 18], "area": 136}, {"id": 4738645, "category_id": 19, "iscrowd": 0, "bbox": [16, 294, 50, 32], "area": 986}, {"id": 922136, "category_id": 19, "iscrowd": 0, "bbox": [517, 271, 19, 19], "area": 147}, {"id": 2568252, "category_id": 19, "iscrowd": 0, "bbox": [394, 277, 22, 21], "area": 177}, {"id": 5076106, "category_id": 154, "iscrowd": 0, "bbox": [0, 253, 640, 229], "area": 93382}, {"id": 10724773, "category_id": 155, "iscrowd": 0, "bbox": [0, 194, 640, 113], "area": 42867}, {"id": 2701637, "category_id": 184, "iscrowd": 0, "bbox": [123, 274, 517, 104], "area": 26731}, {"id": 11183778, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 222], "area": 134533}], "file_name": "000000434247.png", "image_id": 434247}, {"segments_info": [{"id": 4547444, "category_id": 54, "iscrowd": 0, "bbox": [86, 96, 445, 268], "area": 57221}, {"id": 994608, "category_id": 56, "iscrowd": 0, "bbox": [402, 248, 84, 94], "area": 5850}, {"id": 1200536, "category_id": 57, "iscrowd": 0, "bbox": [423, 284, 161, 107], "area": 9385}, {"id": 344457, "category_id": 57, "iscrowd": 0, "bbox": [296, 313, 90, 64], "area": 4279}, {"id": 7765374, "category_id": 107, "iscrowd": 0, "bbox": [0, 45, 640, 435], "area": 101125}, {"id": 8027516, "category_id": 176, "iscrowd": 0, "bbox": [87, 69, 532, 97], "area": 33174}, {"id": 8361356, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 335, 60], "area": 14932}, {"id": 1454649, "category_id": 196, "iscrowd": 0, "bbox": [103, 234, 480, 144], "area": 13620}], "file_name": "000000434297.png", "image_id": 434297}, {"segments_info": [{"id": 987408, "category_id": 1, "iscrowd": 0, "bbox": [191, 70, 13, 30], "area": 281}, {"id": 7032387, "category_id": 1, "iscrowd": 0, "bbox": [367, 49, 240, 408], "area": 49768}, {"id": 1184015, "category_id": 1, "iscrowd": 0, "bbox": [296, 129, 35, 87], "area": 1291}, {"id": 1382164, "category_id": 1, "iscrowd": 0, "bbox": [549, 74, 52, 139], "area": 2660}, {"id": 4471616, "category_id": 1, "iscrowd": 0, "bbox": [161, 42, 158, 261], "area": 21488}, {"id": 1579286, "category_id": 1, "iscrowd": 0, "bbox": [193, 76, 26, 28], "area": 359}, {"id": 921358, "category_id": 1, "iscrowd": 0, "bbox": [350, 95, 8, 45], "area": 220}, {"id": 855309, "category_id": 1, "iscrowd": 0, "bbox": [305, 115, 34, 36], "area": 633}, {"id": 1512977, "category_id": 1, "iscrowd": 0, "bbox": [314, 87, 27, 36], "area": 596}, {"id": 10333612, "category_id": 49, "iscrowd": 0, "bbox": [328, 286, 69, 29], "area": 459}, {"id": 11062445, "category_id": 49, "iscrowd": 0, "bbox": [236, 213, 83, 13], "area": 649}, {"id": 11981278, "category_id": 61, "iscrowd": 0, "bbox": [336, 344, 30, 40], "area": 952}, {"id": 12238548, "category_id": 61, "iscrowd": 0, "bbox": [240, 285, 99, 55], "area": 3288}, {"id": 12564972, "category_id": 61, "iscrowd": 0, "bbox": [76, 337, 40, 26], "area": 819}, {"id": 9748690, "category_id": 61, "iscrowd": 0, "bbox": [136, 371, 36, 42], "area": 1186}, {"id": 11649513, "category_id": 61, "iscrowd": 0, "bbox": [254, 365, 62, 37], "area": 1748}, {"id": 7179418, "category_id": 61, "iscrowd": 0, "bbox": [392, 224, 24, 13], "area": 259}, {"id": 4477273, "category_id": 61, "iscrowd": 0, "bbox": [373, 233, 12, 16], "area": 170}, {"id": 13095102, "category_id": 61, "iscrowd": 0, "bbox": [348, 248, 20, 9], "area": 132}, {"id": 1580059, "category_id": 62, "iscrowd": 0, "bbox": [321, 132, 26, 44], "area": 354}, {"id": 6837065, "category_id": 62, "iscrowd": 0, "bbox": [129, 261, 95, 58], "area": 2624}, {"id": 4208689, "category_id": 62, "iscrowd": 0, "bbox": [329, 203, 63, 45], "area": 1987}, {"id": 1712929, "category_id": 62, "iscrowd": 0, "bbox": [407, 138, 16, 53], "area": 193}, {"id": 3293763, "category_id": 62, "iscrowd": 0, "bbox": [292, 155, 36, 64], "area": 828}, {"id": 3093037, "category_id": 62, "iscrowd": 0, "bbox": [421, 169, 23, 63], "area": 934}, {"id": 5194041, "category_id": 62, "iscrowd": 0, "bbox": [215, 241, 49, 47], "area": 1438}, {"id": 6321264, "category_id": 62, "iscrowd": 0, "bbox": [577, 246, 20, 29], "area": 274}, {"id": 2041380, "category_id": 62, "iscrowd": 0, "bbox": [548, 149, 34, 66], "area": 934}, {"id": 12636375, "category_id": 62, "iscrowd": 0, "bbox": [418, 369, 142, 88], "area": 1612}, {"id": 2239016, "category_id": 62, "iscrowd": 0, "bbox": [326, 146, 32, 59], "area": 823}, {"id": 2701366, "category_id": 62, "iscrowd": 0, "bbox": [337, 138, 11, 18], "area": 99}, {"id": 2637887, "category_id": 62, "iscrowd": 0, "bbox": [409, 132, 21, 32], "area": 204}, {"id": 5199704, "category_id": 62, "iscrowd": 1, "bbox": [329, 202, 34, 18], "area": 30}, {"id": 6047936, "category_id": 67, "iscrowd": 0, "bbox": [33, 227, 425, 230], "area": 20121}, {"id": 5726547, "category_id": 92, "iscrowd": 0, "bbox": [495, 78, 38, 75], "area": 1608}, {"id": 11056547, "category_id": 100, "iscrowd": 0, "bbox": [264, 251, 169, 106], "area": 5401}, {"id": 5859933, "category_id": 112, "iscrowd": 0, "bbox": [528, 63, 91, 137], "area": 4263}, {"id": 8819594, "category_id": 130, "iscrowd": 0, "bbox": [170, 0, 378, 88], "area": 4882}, {"id": 4015423, "category_id": 186, "iscrowd": 0, "bbox": [184, 0, 456, 84], "area": 18691}, {"id": 3097922, "category_id": 189, "iscrowd": 0, "bbox": [407, 149, 145, 35], "area": 505}, {"id": 1973785, "category_id": 190, "iscrowd": 0, "bbox": [272, 169, 368, 288], "area": 16621}, {"id": 7042919, "category_id": 195, "iscrowd": 0, "bbox": [574, 141, 33, 51], "area": 678}, {"id": 3621949, "category_id": 199, "iscrowd": 0, "bbox": [218, 18, 410, 105], "area": 5212}], "file_name": "000000434459.png", "image_id": 434459}, {"segments_info": [{"id": 1993643, "category_id": 59, "iscrowd": 0, "bbox": [7, 179, 473, 247], "area": 66434}, {"id": 4158617, "category_id": 59, "iscrowd": 0, "bbox": [11, 85, 223, 159], "area": 20694}, {"id": 936552, "category_id": 62, "iscrowd": 0, "bbox": [420, 208, 220, 143], "area": 13458}, {"id": 5012400, "category_id": 67, "iscrowd": 0, "bbox": [2, 48, 638, 372], "area": 90055}, {"id": 6457235, "category_id": 133, "iscrowd": 0, "bbox": [513, 0, 118, 119], "area": 11182}, {"id": 213619, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 359, 268], "area": 29672}, {"id": 925998, "category_id": 200, "iscrowd": 0, "bbox": [470, 0, 170, 323], "area": 20124}], "file_name": "000000434479.png", "image_id": 434479}, {"segments_info": [{"id": 6253187, "category_id": 1, "iscrowd": 0, "bbox": [182, 124, 171, 311], "area": 18408}, {"id": 8227767, "category_id": 37, "iscrowd": 0, "bbox": [190, 125, 6, 6], "area": 19}, {"id": 4417166, "category_id": 40, "iscrowd": 0, "bbox": [298, 226, 43, 49], "area": 1321}, {"id": 8293021, "category_id": 92, "iscrowd": 0, "bbox": [0, 0, 640, 218], "area": 131770}, {"id": 2645599, "category_id": 145, "iscrowd": 0, "bbox": [0, 214, 640, 266], "area": 96385}, {"id": 1917316, "category_id": 194, "iscrowd": 0, "bbox": [0, 274, 640, 206], "area": 58655}], "file_name": "000000434548.png", "image_id": 434548}, {"segments_info": [{"id": 9279902, "category_id": 17, "iscrowd": 0, "bbox": [171, 120, 156, 124], "area": 11443}, {"id": 6514543, "category_id": 65, "iscrowd": 0, "bbox": [1, 1, 499, 370], "area": 119882}, {"id": 4220199, "category_id": 88, "iscrowd": 0, "bbox": [110, 69, 209, 88], "area": 10391}, {"id": 5937503, "category_id": 88, "iscrowd": 0, "bbox": [68, 109, 159, 189], "area": 18329}, {"id": 2903412, "category_id": 88, "iscrowd": 0, "bbox": [294, 100, 122, 91], "area": 6036}, {"id": 5526095, "category_id": 93, "iscrowd": 0, "bbox": [0, 182, 500, 193], "area": 2528}], "file_name": "000000434996.png", "image_id": 434996}, {"segments_info": [{"id": 5330000, "category_id": 62, "iscrowd": 0, "bbox": [235, 193, 405, 229], "area": 33449}, {"id": 9539726, "category_id": 72, "iscrowd": 0, "bbox": [335, 128, 90, 119], "area": 8855}, {"id": 10063244, "category_id": 72, "iscrowd": 0, "bbox": [172, 109, 163, 152], "area": 19162}, {"id": 8480314, "category_id": 73, "iscrowd": 0, "bbox": [0, 191, 243, 168], "area": 20959}, {"id": 7112337, "category_id": 74, "iscrowd": 0, "bbox": [434, 250, 32, 14], "area": 330}, {"id": 5196096, "category_id": 76, "iscrowd": 0, "bbox": [56, 270, 145, 60], "area": 3224}, {"id": 10337212, "category_id": 76, "iscrowd": 0, "bbox": [252, 243, 152, 45], "area": 3990}, {"id": 8621978, "category_id": 130, "iscrowd": 0, "bbox": [216, 47, 98, 41], "area": 2037}, {"id": 8749704, "category_id": 180, "iscrowd": 0, "bbox": [0, 66, 185, 157], "area": 18448}, {"id": 4936544, "category_id": 181, "iscrowd": 0, "bbox": [354, 0, 105, 174], "area": 11521}, {"id": 4345670, "category_id": 184, "iscrowd": 0, "bbox": [420, 183, 10, 17], "area": 131}, {"id": 4018546, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 306, 71], "area": 15481}, {"id": 5332838, "category_id": 189, "iscrowd": 0, "bbox": [13, 217, 524, 210], "area": 25487}, {"id": 4149115, "category_id": 190, "iscrowd": 0, "bbox": [0, 308, 385, 119], "area": 19250}, {"id": 8752016, "category_id": 195, "iscrowd": 0, "bbox": [587, 135, 41, 38], "area": 1272}, {"id": 5596269, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 70332}], "file_name": "000000435003.png", "image_id": 435003}, {"segments_info": [{"id": 8097448, "category_id": 47, "iscrowd": 0, "bbox": [424, 135, 36, 28], "area": 637}, {"id": 5397393, "category_id": 47, "iscrowd": 0, "bbox": [31, 255, 32, 57], "area": 1216}, {"id": 5657944, "category_id": 48, "iscrowd": 0, "bbox": [279, 92, 29, 12], "area": 82}, {"id": 5664385, "category_id": 48, "iscrowd": 0, "bbox": [317, 456, 38, 24], "area": 211}, {"id": 8686741, "category_id": 48, "iscrowd": 0, "bbox": [150, 304, 36, 28], "area": 172}, {"id": 7239065, "category_id": 48, "iscrowd": 0, "bbox": [400, 196, 42, 27], "area": 223}, {"id": 4412285, "category_id": 49, "iscrowd": 0, "bbox": [433, 163, 40, 19], "area": 180}, {"id": 7959420, "category_id": 49, "iscrowd": 0, "bbox": [200, 329, 36, 40], "area": 297}, {"id": 4812947, "category_id": 49, "iscrowd": 0, "bbox": [264, 459, 47, 32], "area": 377}, {"id": 5072514, "category_id": 50, "iscrowd": 0, "bbox": [25, 472, 34, 21], "area": 303}, {"id": 10923439, "category_id": 50, "iscrowd": 0, "bbox": [81, 78, 20, 3], "area": 49}, {"id": 6583952, "category_id": 50, "iscrowd": 0, "bbox": [77, 456, 43, 11], "area": 249}, {"id": 8159902, "category_id": 51, "iscrowd": 0, "bbox": [82, 151, 45, 40], "area": 721}, {"id": 4942739, "category_id": 51, "iscrowd": 0, "bbox": [34, 403, 36, 27], "area": 754}, {"id": 5862017, "category_id": 51, "iscrowd": 0, "bbox": [446, 11, 51, 55], "area": 391}, {"id": 7507872, "category_id": 51, "iscrowd": 0, "bbox": [356, 387, 19, 43], "area": 618}, {"id": 3361138, "category_id": 51, "iscrowd": 0, "bbox": [413, 70, 62, 46], "area": 2218}, {"id": 3623034, "category_id": 51, "iscrowd": 0, "bbox": [54, 439, 30, 18], "area": 218}, {"id": 5001616, "category_id": 51, "iscrowd": 0, "bbox": [328, 140, 41, 34], "area": 1002}, {"id": 9345691, "category_id": 51, "iscrowd": 0, "bbox": [82, 55, 36, 32], "area": 837}, {"id": 5532045, "category_id": 54, "iscrowd": 0, "bbox": [189, 299, 30, 31], "area": 678}, {"id": 6655400, "category_id": 54, "iscrowd": 0, "bbox": [165, 170, 46, 41], "area": 1370}, {"id": 9611718, "category_id": 54, "iscrowd": 0, "bbox": [182, 262, 18, 19], "area": 286}, {"id": 5663649, "category_id": 54, "iscrowd": 0, "bbox": [147, 151, 38, 30], "area": 859}, {"id": 4218003, "category_id": 54, "iscrowd": 0, "bbox": [198, 154, 52, 22], "area": 838}, {"id": 7049133, "category_id": 54, "iscrowd": 0, "bbox": [127, 140, 26, 31], "area": 589}, {"id": 5471127, "category_id": 54, "iscrowd": 0, "bbox": [134, 197, 53, 48], "area": 1772}, {"id": 5600161, "category_id": 54, "iscrowd": 0, "bbox": [212, 167, 36, 41], "area": 907}, {"id": 5334170, "category_id": 54, "iscrowd": 0, "bbox": [193, 207, 56, 42], "area": 1587}, {"id": 3234740, "category_id": 57, "iscrowd": 0, "bbox": [456, 323, 29, 28], "area": 262}, {"id": 1982869, "category_id": 57, "iscrowd": 0, "bbox": [454, 311, 30, 20], "area": 211}, {"id": 2908098, "category_id": 57, "iscrowd": 0, "bbox": [430, 329, 30, 20], "area": 198}, {"id": 4741758, "category_id": 59, "iscrowd": 0, "bbox": [394, 422, 43, 39], "area": 1281}, {"id": 1055277, "category_id": 60, "iscrowd": 0, "bbox": [37, 342, 30, 27], "area": 574}, {"id": 6980516, "category_id": 60, "iscrowd": 0, "bbox": [61, 326, 31, 30], "area": 783}, {"id": 5604009, "category_id": 60, "iscrowd": 0, "bbox": [2, 87, 14, 18], "area": 212}, {"id": 2502977, "category_id": 60, "iscrowd": 0, "bbox": [2, 323, 21, 30], "area": 504}, {"id": 859454, "category_id": 60, "iscrowd": 0, "bbox": [16, 442, 20, 26], "area": 408}, {"id": 2174025, "category_id": 61, "iscrowd": 0, "bbox": [27, 215, 23, 23], "area": 480}, {"id": 5728660, "category_id": 61, "iscrowd": 0, "bbox": [252, 382, 41, 60], "area": 1734}, {"id": 3230568, "category_id": 61, "iscrowd": 0, "bbox": [250, 279, 26, 33], "area": 578}, {"id": 1909614, "category_id": 61, "iscrowd": 0, "bbox": [318, 434, 31, 25], "area": 688}, {"id": 6458033, "category_id": 61, "iscrowd": 0, "bbox": [38, 60, 19, 17], "area": 261}, {"id": 5469606, "category_id": 61, "iscrowd": 0, "bbox": [71, 19, 16, 17], "area": 199}, {"id": 1583165, "category_id": 61, "iscrowd": 0, "bbox": [269, 295, 34, 34], "area": 750}, {"id": 4150890, "category_id": 61, "iscrowd": 0, "bbox": [314, 258, 58, 52], "area": 2104}, {"id": 6193314, "category_id": 61, "iscrowd": 0, "bbox": [93, 277, 28, 23], "area": 486}, {"id": 6056625, "category_id": 61, "iscrowd": 0, "bbox": [328, 178, 22, 23], "area": 365}, {"id": 4415644, "category_id": 61, "iscrowd": 0, "bbox": [87, 30, 12, 17], "area": 167}, {"id": 1909874, "category_id": 61, "iscrowd": 0, "bbox": [298, 171, 26, 25], "area": 434}, {"id": 4283780, "category_id": 61, "iscrowd": 1, "bbox": [0, 14, 334, 446], "area": 6790}, {"id": 8890058, "category_id": 62, "iscrowd": 0, "bbox": [127, 251, 39, 77], "area": 949}, {"id": 4546947, "category_id": 67, "iscrowd": 0, "bbox": [130, 263, 120, 113], "area": 4262}, {"id": 7376548, "category_id": 67, "iscrowd": 0, "bbox": [376, 378, 123, 116], "area": 7137}, {"id": 8896958, "category_id": 67, "iscrowd": 0, "bbox": [126, 4, 123, 120], "area": 6154}, {"id": 5008795, "category_id": 67, "iscrowd": 0, "bbox": [5, 392, 121, 105], "area": 7824}, {"id": 5667768, "category_id": 67, "iscrowd": 0, "bbox": [375, 127, 123, 125], "area": 13616}, {"id": 9610159, "category_id": 67, "iscrowd": 0, "bbox": [49, 270, 76, 105], "area": 3181}, {"id": 5404060, "category_id": 67, "iscrowd": 0, "bbox": [1, 141, 126, 108], "area": 3594}, {"id": 4215882, "category_id": 67, "iscrowd": 0, "bbox": [370, 1, 128, 122], "area": 4579}, {"id": 8817803, "category_id": 67, "iscrowd": 0, "bbox": [253, 28, 119, 97], "area": 7298}, {"id": 8099494, "category_id": 86, "iscrowd": 0, "bbox": [67, 378, 25, 37], "area": 535}, {"id": 11051941, "category_id": 100, "iscrowd": 0, "bbox": [373, 388, 81, 85], "area": 4125}, {"id": 7433906, "category_id": 119, "iscrowd": 0, "bbox": [81, 371, 19, 13], "area": 136}, {"id": 3887938, "category_id": 184, "iscrowd": 0, "bbox": [0, 126, 377, 304], "area": 6645}, {"id": 6651287, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 500], "area": 63202}, {"id": 6977149, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 381, 435], "area": 5561}, {"id": 7436953, "category_id": 195, "iscrowd": 0, "bbox": [302, 152, 198, 332], "area": 1479}, {"id": 5597571, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 500, 486], "area": 40597}, {"id": 9805220, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 354, 295], "area": 5558}, {"id": 4743304, "category_id": 200, "iscrowd": 0, "bbox": [0, 274, 337, 83], "area": 3779}], "file_name": "000000435081.png", "image_id": 435081}, {"segments_info": [{"id": 3497370, "category_id": 1, "iscrowd": 0, "bbox": [28, 1, 470, 329], "area": 101723}, {"id": 3181251, "category_id": 88, "iscrowd": 0, "bbox": [11, 95, 192, 199], "area": 24529}, {"id": 13492945, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 230, 211], "area": 22286}], "file_name": "000000435205.png", "image_id": 435205}, {"segments_info": [{"id": 6312529, "category_id": 1, "iscrowd": 0, "bbox": [303, 187, 17, 52], "area": 501}, {"id": 12103342, "category_id": 1, "iscrowd": 0, "bbox": [344, 196, 26, 45], "area": 576}, {"id": 7105657, "category_id": 1, "iscrowd": 0, "bbox": [424, 200, 29, 75], "area": 1488}, {"id": 11769469, "category_id": 9, "iscrowd": 0, "bbox": [207, 160, 54, 10], "area": 204}, {"id": 10925003, "category_id": 20, "iscrowd": 0, "bbox": [383, 167, 5, 12], "area": 40}, {"id": 12363935, "category_id": 21, "iscrowd": 0, "bbox": [295, 142, 10, 15], "area": 101}, {"id": 12166551, "category_id": 21, "iscrowd": 0, "bbox": [317, 146, 22, 10], "area": 179}, {"id": 12168615, "category_id": 21, "iscrowd": 0, "bbox": [339, 147, 23, 16], "area": 223}, {"id": 10455938, "category_id": 21, "iscrowd": 0, "bbox": [427, 147, 13, 19], "area": 155}, {"id": 13613492, "category_id": 21, "iscrowd": 0, "bbox": [353, 137, 13, 9], "area": 62}, {"id": 13284270, "category_id": 21, "iscrowd": 0, "bbox": [366, 135, 16, 10], "area": 111}, {"id": 9864828, "category_id": 21, "iscrowd": 0, "bbox": [303, 157, 26, 27], "area": 421}, {"id": 11637382, "category_id": 21, "iscrowd": 0, "bbox": [450, 144, 9, 5], "area": 31}, {"id": 13019802, "category_id": 22, "iscrowd": 0, "bbox": [239, 148, 18, 12], "area": 103}, {"id": 16645629, "category_id": 148, "iscrowd": 0, "bbox": [0, 133, 450, 294], "area": 99344}, {"id": 15589592, "category_id": 184, "iscrowd": 0, "bbox": [322, 114, 318, 38], "area": 5958}, {"id": 16711422, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 144], "area": 82629}], "file_name": "000000435206.png", "image_id": 435206}, {"segments_info": [{"id": 2042678, "category_id": 1, "iscrowd": 0, "bbox": [17, 307, 135, 197], "area": 16649}, {"id": 4346712, "category_id": 1, "iscrowd": 0, "bbox": [219, 86, 72, 110], "area": 6537}, {"id": 3423647, "category_id": 47, "iscrowd": 0, "bbox": [14, 298, 18, 16], "area": 221}, {"id": 2105898, "category_id": 62, "iscrowd": 0, "bbox": [140, 311, 121, 113], "area": 9680}, {"id": 2766922, "category_id": 63, "iscrowd": 0, "bbox": [0, 337, 198, 295], "area": 31590}, {"id": 9546416, "category_id": 67, "iscrowd": 0, "bbox": [270, 393, 210, 240], "area": 37886}, {"id": 14665917, "category_id": 72, "iscrowd": 0, "bbox": [339, 262, 58, 41], "area": 2203}, {"id": 14868917, "category_id": 73, "iscrowd": 0, "bbox": [165, 272, 56, 48], "area": 2132}, {"id": 1382167, "category_id": 74, "iscrowd": 0, "bbox": [407, 312, 7, 5], "area": 27}, {"id": 2369062, "category_id": 76, "iscrowd": 0, "bbox": [338, 314, 61, 10], "area": 395}, {"id": 3159355, "category_id": 85, "iscrowd": 0, "bbox": [318, 64, 21, 23], "area": 409}, {"id": 5731206, "category_id": 100, "iscrowd": 0, "bbox": [13, 244, 439, 122], "area": 2317}, {"id": 2242120, "category_id": 118, "iscrowd": 0, "bbox": [111, 335, 369, 305], "area": 44260}, {"id": 3884882, "category_id": 130, "iscrowd": 0, "bbox": [270, 281, 49, 24], "area": 778}, {"id": 2436155, "category_id": 141, "iscrowd": 0, "bbox": [0, 608, 145, 32], "area": 1264}, {"id": 4152168, "category_id": 186, "iscrowd": 0, "bbox": [16, 0, 182, 25], "area": 3576}, {"id": 6715776, "category_id": 188, "iscrowd": 0, "bbox": [82, 319, 48, 87], "area": 1989}, {"id": 4608598, "category_id": 189, "iscrowd": 0, "bbox": [247, 285, 195, 80], "area": 5368}, {"id": 5995414, "category_id": 195, "iscrowd": 0, "bbox": [37, 107, 443, 217], "area": 20676}, {"id": 6784659, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 353], "area": 97041}], "file_name": "000000435208.png", "image_id": 435208}, {"segments_info": [{"id": 2243154, "category_id": 17, "iscrowd": 0, "bbox": [273, 33, 147, 288], "area": 16117}, {"id": 4343103, "category_id": 65, "iscrowd": 0, "bbox": [1, 61, 635, 278], "area": 130156}, {"id": 5461581, "category_id": 93, "iscrowd": 0, "bbox": [0, 157, 640, 231], "area": 9108}, {"id": 6644309, "category_id": 141, "iscrowd": 0, "bbox": [637, 91, 3, 68], "area": 204}, {"id": 4737347, "category_id": 190, "iscrowd": 0, "bbox": [0, 317, 633, 163], "area": 80258}, {"id": 7635579, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 160], "area": 65542}], "file_name": "000000435299.png", "image_id": 435299}, {"segments_info": [{"id": 1658254, "category_id": 44, "iscrowd": 0, "bbox": [460, 90, 20, 46], "area": 584}, {"id": 1977941, "category_id": 44, "iscrowd": 0, "bbox": [479, 88, 18, 45], "area": 598}, {"id": 6374768, "category_id": 47, "iscrowd": 0, "bbox": [633, 226, 7, 17], "area": 96}, {"id": 2769050, "category_id": 51, "iscrowd": 0, "bbox": [586, 232, 20, 11], "area": 187}, {"id": 2242651, "category_id": 63, "iscrowd": 0, "bbox": [0, 416, 114, 63], "area": 5221}, {"id": 1385013, "category_id": 73, "iscrowd": 0, "bbox": [85, 370, 22, 21], "area": 328}, {"id": 2633023, "category_id": 82, "iscrowd": 0, "bbox": [378, 140, 191, 325], "area": 40987}, {"id": 10731474, "category_id": 130, "iscrowd": 0, "bbox": [13, 114, 47, 68], "area": 2060}, {"id": 2501718, "category_id": 156, "iscrowd": 0, "bbox": [553, 65, 87, 294], "area": 22006}, {"id": 3893143, "category_id": 175, "iscrowd": 0, "bbox": [0, 102, 115, 255], "area": 14243}, {"id": 1121401, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 561, 480], "area": 120743}, {"id": 2573680, "category_id": 181, "iscrowd": 0, "bbox": [289, 70, 126, 184], "area": 14114}, {"id": 6849976, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 259], "area": 20499}, {"id": 1120060, "category_id": 188, "iscrowd": 0, "bbox": [557, 305, 4, 20], "area": 32}, {"id": 1584712, "category_id": 189, "iscrowd": 0, "bbox": [65, 378, 27, 23], "area": 422}, {"id": 5271704, "category_id": 190, "iscrowd": 0, "bbox": [0, 339, 640, 110], "area": 16230}, {"id": 2573188, "category_id": 196, "iscrowd": 0, "bbox": [410, 93, 98, 57], "area": 1748}, {"id": 12628666, "category_id": 200, "iscrowd": 0, "bbox": [461, 421, 179, 59], "area": 6396}], "file_name": "000000435880.png", "image_id": 435880}, {"segments_info": [{"id": 3560844, "category_id": 59, "iscrowd": 0, "bbox": [20, 138, 416, 351], "area": 113839}, {"id": 328964, "category_id": 107, "iscrowd": 0, "bbox": [0, 0, 478, 216], "area": 56961}, {"id": 1515826, "category_id": 118, "iscrowd": 0, "bbox": [31, 576, 171, 64], "area": 5511}, {"id": 658192, "category_id": 196, "iscrowd": 0, "bbox": [28, 0, 346, 393], "area": 11728}], "file_name": "000000436315.png", "image_id": 436315}, {"segments_info": [{"id": 2631721, "category_id": 16, "iscrowd": 0, "bbox": [491, 71, 149, 260], "area": 19399}, {"id": 3816509, "category_id": 16, "iscrowd": 0, "bbox": [48, 68, 481, 346], "area": 53478}, {"id": 9080711, "category_id": 148, "iscrowd": 0, "bbox": [0, 0, 640, 438], "area": 206812}], "file_name": "000000436551.png", "image_id": 436551}, {"segments_info": [{"id": 4409451, "category_id": 1, "iscrowd": 0, "bbox": [129, 136, 26, 23], "area": 363}, {"id": 2235939, "category_id": 1, "iscrowd": 0, "bbox": [131, 145, 61, 47], "area": 1743}, {"id": 5068418, "category_id": 1, "iscrowd": 0, "bbox": [252, 130, 73, 94], "area": 2529}, {"id": 5000030, "category_id": 1, "iscrowd": 0, "bbox": [395, 137, 170, 243], "area": 19789}, {"id": 4342360, "category_id": 1, "iscrowd": 0, "bbox": [187, 127, 153, 173], "area": 9266}, {"id": 4543357, "category_id": 1, "iscrowd": 0, "bbox": [381, 128, 34, 69], "area": 767}, {"id": 3947862, "category_id": 1, "iscrowd": 0, "bbox": [103, 138, 32, 46], "area": 980}, {"id": 3224147, "category_id": 1, "iscrowd": 0, "bbox": [419, 187, 33, 56], "area": 752}, {"id": 3815238, "category_id": 1, "iscrowd": 0, "bbox": [10, 130, 98, 145], "area": 4173}, {"id": 3750755, "category_id": 1, "iscrowd": 0, "bbox": [414, 142, 34, 96], "area": 1693}, {"id": 3486827, "category_id": 1, "iscrowd": 0, "bbox": [1, 144, 37, 45], "area": 949}, {"id": 3026755, "category_id": 1, "iscrowd": 0, "bbox": [305, 118, 118, 113], "area": 3929}, {"id": 3750487, "category_id": 1, "iscrowd": 0, "bbox": [58, 182, 198, 238], "area": 25453}, {"id": 2565173, "category_id": 15, "iscrowd": 0, "bbox": [291, 150, 349, 270], "area": 20584}, {"id": 2500149, "category_id": 31, "iscrowd": 0, "bbox": [400, 184, 3, 36], "area": 55}, {"id": 2566708, "category_id": 31, "iscrowd": 0, "bbox": [326, 333, 71, 61], "area": 3355}, {"id": 4214382, "category_id": 46, "iscrowd": 0, "bbox": [306, 239, 24, 30], "area": 627}, {"id": 4410734, "category_id": 46, "iscrowd": 0, "bbox": [329, 171, 9, 13], "area": 97}, {"id": 3686750, "category_id": 46, "iscrowd": 0, "bbox": [318, 193, 14, 6], "area": 49}, {"id": 4213864, "category_id": 46, "iscrowd": 0, "bbox": [316, 195, 15, 24], "area": 273}, {"id": 4410979, "category_id": 46, "iscrowd": 0, "bbox": [307, 268, 32, 66], "area": 1426}, {"id": 3752799, "category_id": 46, "iscrowd": 0, "bbox": [364, 199, 16, 34], "area": 390}, {"id": 4279139, "category_id": 46, "iscrowd": 0, "bbox": [343, 194, 18, 33], "area": 373}, {"id": 5200752, "category_id": 46, "iscrowd": 0, "bbox": [374, 259, 30, 62], "area": 1291}, {"id": 5068395, "category_id": 46, "iscrowd": 0, "bbox": [328, 209, 16, 41], "area": 263}, {"id": 3027277, "category_id": 46, "iscrowd": 0, "bbox": [36, 172, 11, 16], "area": 100}, {"id": 4476007, "category_id": 46, "iscrowd": 0, "bbox": [346, 179, 11, 15], "area": 141}, {"id": 5529205, "category_id": 47, "iscrowd": 0, "bbox": [335, 255, 29, 31], "area": 728}, {"id": 1840408, "category_id": 62, "iscrowd": 0, "bbox": [50, 183, 67, 101], "area": 2704}, {"id": 1971741, "category_id": 62, "iscrowd": 0, "bbox": [3, 197, 58, 114], "area": 3583}, {"id": 1511440, "category_id": 62, "iscrowd": 0, "bbox": [1, 336, 62, 87], "area": 2894}, {"id": 3027268, "category_id": 67, "iscrowd": 0, "bbox": [0, 178, 127, 42], "area": 1023}, {"id": 4212059, "category_id": 67, "iscrowd": 0, "bbox": [214, 183, 330, 221], "area": 33173}, {"id": 4209760, "category_id": 112, "iscrowd": 0, "bbox": [191, 47, 105, 133], "area": 8473}, {"id": 8755625, "category_id": 130, "iscrowd": 0, "bbox": [428, 0, 195, 88], "area": 2735}, {"id": 5267062, "category_id": 133, "iscrowd": 0, "bbox": [38, 18, 105, 109], "area": 8854}, {"id": 2631232, "category_id": 171, "iscrowd": 0, "bbox": [380, 0, 41, 37], "area": 859}, {"id": 2433336, "category_id": 177, "iscrowd": 0, "bbox": [0, 124, 640, 92], "area": 11892}, {"id": 4411242, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 26, 18], "area": 366}, {"id": 1906199, "category_id": 189, "iscrowd": 0, "bbox": [198, 306, 379, 119], "area": 8655}, {"id": 5863063, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 151], "area": 58799}], "file_name": "000000436617.png", "image_id": 436617}, {"segments_info": [{"id": 5788245, "category_id": 1, "iscrowd": 0, "bbox": [134, 333, 18, 64], "area": 755}, {"id": 7631991, "category_id": 1, "iscrowd": 0, "bbox": [62, 340, 28, 68], "area": 895}, {"id": 9804958, "category_id": 3, "iscrowd": 0, "bbox": [371, 349, 97, 43], "area": 2495}, {"id": 7234675, "category_id": 3, "iscrowd": 0, "bbox": [451, 347, 49, 34], "area": 1159}, {"id": 9605258, "category_id": 3, "iscrowd": 0, "bbox": [265, 348, 131, 56], "area": 4858}, {"id": 8421242, "category_id": 6, "iscrowd": 0, "bbox": [155, 297, 233, 105], "area": 16007}, {"id": 4473464, "category_id": 8, "iscrowd": 0, "bbox": [381, 306, 72, 48], "area": 2227}, {"id": 4602156, "category_id": 10, "iscrowd": 0, "bbox": [121, 287, 12, 26], "area": 221}, {"id": 3616048, "category_id": 10, "iscrowd": 0, "bbox": [105, 283, 9, 28], "area": 211}, {"id": 9739179, "category_id": 84, "iscrowd": 0, "bbox": [133, 365, 12, 10], "area": 58}, {"id": 9935259, "category_id": 128, "iscrowd": 0, "bbox": [154, 239, 144, 65], "area": 2091}, {"id": 11437933, "category_id": 130, "iscrowd": 0, "bbox": [429, 0, 37, 35], "area": 1075}, {"id": 8355717, "category_id": 149, "iscrowd": 0, "bbox": [0, 376, 500, 110], "area": 44630}, {"id": 4999735, "category_id": 184, "iscrowd": 0, "bbox": [0, 143, 500, 218], "area": 28467}, {"id": 12492932, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 262], "area": 106459}, {"id": 9413290, "category_id": 191, "iscrowd": 0, "bbox": [0, 378, 177, 40], "area": 3588}, {"id": 4805218, "category_id": 197, "iscrowd": 0, "bbox": [0, 210, 268, 179], "area": 25545}], "file_name": "000000436738.png", "image_id": 436738}, {"segments_info": [{"id": 3225928, "category_id": 1, "iscrowd": 0, "bbox": [186, 136, 14, 38], "area": 305}, {"id": 2042162, "category_id": 1, "iscrowd": 0, "bbox": [570, 142, 17, 41], "area": 366}, {"id": 3550244, "category_id": 1, "iscrowd": 0, "bbox": [586, 144, 9, 34], "area": 190}, {"id": 2498858, "category_id": 1, "iscrowd": 0, "bbox": [562, 158, 10, 16], "area": 80}, {"id": 7891564, "category_id": 1, "iscrowd": 0, "bbox": [573, 168, 19, 53], "area": 562}, {"id": 3025194, "category_id": 1, "iscrowd": 0, "bbox": [558, 168, 14, 55], "area": 447}, {"id": 7301986, "category_id": 3, "iscrowd": 0, "bbox": [573, 155, 67, 207], "area": 10522}, {"id": 6577496, "category_id": 3, "iscrowd": 0, "bbox": [5, 148, 17, 53], "area": 569}, {"id": 6122312, "category_id": 6, "iscrowd": 0, "bbox": [99, 38, 462, 343], "area": 127547}, {"id": 5988954, "category_id": 6, "iscrowd": 0, "bbox": [14, 105, 90, 154], "area": 10370}, {"id": 4474802, "category_id": 33, "iscrowd": 0, "bbox": [0, 295, 21, 64], "area": 1167}, {"id": 5008268, "category_id": 100, "iscrowd": 0, "bbox": [43, 283, 64, 33], "area": 1194}, {"id": 5986652, "category_id": 149, "iscrowd": 0, "bbox": [14, 218, 626, 203], "area": 43793}, {"id": 3357250, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 232, 361], "area": 8011}, {"id": 10323830, "category_id": 187, "iscrowd": 0, "bbox": [6, 0, 189, 84], "area": 11312}, {"id": 7238779, "category_id": 191, "iscrowd": 0, "bbox": [0, 178, 599, 243], "area": 7150}, {"id": 6645880, "category_id": 197, "iscrowd": 0, "bbox": [5, 0, 635, 181], "area": 34377}], "file_name": "000000436883.png", "image_id": 436883}, {"segments_info": [{"id": 8617843, "category_id": 85, "iscrowd": 0, "bbox": [229, 233, 20, 19], "area": 300}, {"id": 14531500, "category_id": 92, "iscrowd": 0, "bbox": [249, 69, 21, 22], "area": 372}, {"id": 4802631, "category_id": 128, "iscrowd": 0, "bbox": [12, 88, 468, 455], "area": 110887}, {"id": 1783593, "category_id": 184, "iscrowd": 0, "bbox": [0, 390, 334, 241], "area": 27313}, {"id": 15782842, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 400], "area": 140165}, {"id": 7965327, "category_id": 191, "iscrowd": 0, "bbox": [0, 536, 480, 104], "area": 8375}, {"id": 2903873, "category_id": 193, "iscrowd": 0, "bbox": [0, 522, 463, 118], "area": 19770}], "file_name": "000000437110.png", "image_id": 437110}, {"segments_info": [{"id": 10124884, "category_id": 1, "iscrowd": 0, "bbox": [1, 14, 382, 619], "area": 140963}, {"id": 11191240, "category_id": 52, "iscrowd": 0, "bbox": [15, 288, 144, 222], "area": 13418}, {"id": 1840145, "category_id": 63, "iscrowd": 0, "bbox": [0, 52, 383, 588], "area": 54624}, {"id": 6447707, "category_id": 195, "iscrowd": 0, "bbox": [22, 123, 53, 45], "area": 1189}, {"id": 5329234, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 383, 148], "area": 22978}], "file_name": "000000437205.png", "image_id": 437205}, {"segments_info": [{"id": 5200227, "category_id": 1, "iscrowd": 0, "bbox": [184, 140, 77, 244], "area": 12312}, {"id": 6514805, "category_id": 1, "iscrowd": 0, "bbox": [23, 132, 62, 234], "area": 8215}, {"id": 3355971, "category_id": 1, "iscrowd": 0, "bbox": [536, 146, 94, 234], "area": 10561}, {"id": 5132393, "category_id": 1, "iscrowd": 0, "bbox": [486, 127, 80, 241], "area": 9626}, {"id": 6640718, "category_id": 3, "iscrowd": 0, "bbox": [127, 216, 21, 15], "area": 190}, {"id": 5719097, "category_id": 3, "iscrowd": 0, "bbox": [68, 218, 20, 17], "area": 288}, {"id": 5720391, "category_id": 3, "iscrowd": 0, "bbox": [4, 213, 19, 11], "area": 145}, {"id": 6909327, "category_id": 15, "iscrowd": 0, "bbox": [242, 308, 319, 96], "area": 8931}, {"id": 2104863, "category_id": 27, "iscrowd": 0, "bbox": [363, 308, 60, 53], "area": 2144}, {"id": 6584224, "category_id": 34, "iscrowd": 0, "bbox": [53, 267, 303, 81], "area": 1001}, {"id": 5589832, "category_id": 34, "iscrowd": 0, "bbox": [512, 214, 11, 30], "area": 97}, {"id": 5524390, "category_id": 34, "iscrowd": 0, "bbox": [499, 213, 21, 32], "area": 431}, {"id": 4284843, "category_id": 34, "iscrowd": 0, "bbox": [581, 189, 31, 28], "area": 163}, {"id": 9803158, "category_id": 149, "iscrowd": 0, "bbox": [0, 210, 409, 66], "area": 5154}, {"id": 3754048, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 260], "area": 97341}, {"id": 15382169, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 486, 154], "area": 30031}, {"id": 7966622, "category_id": 194, "iscrowd": 0, "bbox": [0, 192, 640, 233], "area": 83700}], "file_name": "000000437239.png", "image_id": 437239}, {"segments_info": [{"id": 2639454, "category_id": 1, "iscrowd": 0, "bbox": [256, 123, 99, 116], "area": 4142}, {"id": 9737885, "category_id": 42, "iscrowd": 0, "bbox": [253, 93, 76, 152], "area": 3273}, {"id": 9866358, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 266320}], "file_name": "000000437331.png", "image_id": 437331}, {"segments_info": [{"id": 1913697, "category_id": 1, "iscrowd": 0, "bbox": [17, 18, 225, 475], "area": 53867}, {"id": 2247850, "category_id": 33, "iscrowd": 0, "bbox": [196, 183, 107, 262], "area": 23580}, {"id": 5465194, "category_id": 33, "iscrowd": 0, "bbox": [285, 177, 82, 261], "area": 15534}, {"id": 3375994, "category_id": 33, "iscrowd": 0, "bbox": [192, 27, 155, 159], "area": 19936}, {"id": 6058110, "category_id": 190, "iscrowd": 0, "bbox": [0, 434, 352, 66], "area": 17019}, {"id": 12238018, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 399, 392], "area": 38333}, {"id": 14146786, "category_id": 200, "iscrowd": 0, "bbox": [320, 379, 79, 121], "area": 6283}], "file_name": "000000437351.png", "image_id": 437351}, {"segments_info": [{"id": 6253184, "category_id": 70, "iscrowd": 0, "bbox": [155, 102, 241, 520], "area": 94942}, {"id": 8427168, "category_id": 190, "iscrowd": 0, "bbox": [0, 537, 163, 103], "area": 11531}, {"id": 8558744, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 271, 542], "area": 100486}], "file_name": "000000437392.png", "image_id": 437392}, {"segments_info": [{"id": 3355183, "category_id": 1, "iscrowd": 0, "bbox": [352, 172, 62, 46], "area": 1740}, {"id": 6518168, "category_id": 15, "iscrowd": 0, "bbox": [24, 197, 410, 309], "area": 64149}, {"id": 5865097, "category_id": 64, "iscrowd": 0, "bbox": [377, 1, 254, 533], "area": 71127}, {"id": 6449771, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 142, 347], "area": 36065}, {"id": 8625844, "category_id": 176, "iscrowd": 0, "bbox": [417, 248, 223, 271], "area": 27721}, {"id": 8225923, "category_id": 181, "iscrowd": 0, "bbox": [124, 0, 516, 292], "area": 68343}, {"id": 8427175, "category_id": 190, "iscrowd": 0, "bbox": [0, 326, 629, 190], "area": 31860}, {"id": 10330530, "category_id": 191, "iscrowd": 0, "bbox": [0, 413, 640, 143], "area": 54044}], "file_name": "000000437514.png", "image_id": 437514}, {"segments_info": [{"id": 14077640, "category_id": 47, "iscrowd": 0, "bbox": [575, 270, 24, 29], "area": 615}, {"id": 5789272, "category_id": 47, "iscrowd": 0, "bbox": [12, 330, 45, 52], "area": 1791}, {"id": 11905185, "category_id": 47, "iscrowd": 0, "bbox": [66, 229, 16, 21], "area": 316}, {"id": 7110544, "category_id": 49, "iscrowd": 0, "bbox": [396, 189, 12, 20], "area": 61}, {"id": 8557727, "category_id": 49, "iscrowd": 0, "bbox": [393, 197, 12, 19], "area": 68}, {"id": 6650247, "category_id": 49, "iscrowd": 0, "bbox": [395, 194, 12, 18], "area": 75}, {"id": 9018019, "category_id": 49, "iscrowd": 0, "bbox": [394, 211, 10, 15], "area": 44}, {"id": 4541007, "category_id": 49, "iscrowd": 0, "bbox": [388, 195, 9, 15], "area": 65}, {"id": 2960425, "category_id": 50, "iscrowd": 0, "bbox": [557, 208, 13, 38], "area": 216}, {"id": 2500138, "category_id": 50, "iscrowd": 0, "bbox": [548, 218, 9, 27], "area": 86}, {"id": 4342854, "category_id": 79, "iscrowd": 0, "bbox": [341, 198, 197, 224], "area": 24747}, {"id": 7695465, "category_id": 81, "iscrowd": 0, "bbox": [1, 247, 122, 64], "area": 4712}, {"id": 9933714, "category_id": 82, "iscrowd": 0, "bbox": [234, 122, 156, 257], "area": 23886}, {"id": 8155498, "category_id": 100, "iscrowd": 0, "bbox": [541, 255, 39, 34], "area": 838}, {"id": 11842742, "category_id": 107, "iscrowd": 0, "bbox": [0, 204, 630, 223], "area": 25453}, {"id": 2107965, "category_id": 112, "iscrowd": 0, "bbox": [99, 65, 139, 244], "area": 29303}, {"id": 1581115, "category_id": 118, "iscrowd": 0, "bbox": [169, 329, 157, 98], "area": 6544}, {"id": 7305086, "category_id": 186, "iscrowd": 0, "bbox": [253, 0, 120, 16], "area": 1231}, {"id": 3888766, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 81842}, {"id": 8029076, "category_id": 195, "iscrowd": 0, "bbox": [505, 248, 57, 58], "area": 1104}, {"id": 10331304, "category_id": 199, "iscrowd": 0, "bbox": [39, 0, 601, 427], "area": 51005}, {"id": 7631483, "category_id": 200, "iscrowd": 0, "bbox": [136, 290, 232, 137], "area": 6448}], "file_name": "000000437898.png", "image_id": 437898}, {"segments_info": [{"id": 527375, "category_id": 3, "iscrowd": 0, "bbox": [204, 418, 9, 11], "area": 64}, {"id": 922133, "category_id": 3, "iscrowd": 0, "bbox": [311, 416, 28, 18], "area": 386}, {"id": 1842204, "category_id": 3, "iscrowd": 0, "bbox": [386, 416, 13, 10], "area": 93}, {"id": 395273, "category_id": 3, "iscrowd": 0, "bbox": [77, 409, 43, 94], "area": 2323}, {"id": 1448220, "category_id": 3, "iscrowd": 0, "bbox": [275, 416, 29, 21], "area": 474}, {"id": 1120284, "category_id": 3, "iscrowd": 0, "bbox": [342, 417, 36, 29], "area": 784}, {"id": 2837366, "category_id": 10, "iscrowd": 0, "bbox": [165, 311, 14, 35], "area": 425}, {"id": 1909029, "category_id": 10, "iscrowd": 0, "bbox": [199, 241, 163, 26], "area": 3103}, {"id": 5729138, "category_id": 130, "iscrowd": 0, "bbox": [197, 268, 25, 21], "area": 377}, {"id": 2899522, "category_id": 149, "iscrowd": 0, "bbox": [74, 412, 406, 228], "area": 76888}, {"id": 2372665, "category_id": 184, "iscrowd": 0, "bbox": [223, 305, 257, 133], "area": 9694}, {"id": 6516333, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 413], "area": 158404}, {"id": 2172970, "category_id": 197, "iscrowd": 0, "bbox": [54, 51, 426, 405], "area": 22478}, {"id": 263943, "category_id": 199, "iscrowd": 0, "bbox": [125, 430, 38, 19], "area": 571}], "file_name": "000000438017.png", "image_id": 438017}, {"segments_info": [{"id": 3299986, "category_id": 46, "iscrowd": 0, "bbox": [0, 4, 66, 237], "area": 6713}, {"id": 4805985, "category_id": 48, "iscrowd": 0, "bbox": [545, 39, 62, 72], "area": 1052}, {"id": 2977716, "category_id": 54, "iscrowd": 0, "bbox": [220, 4, 117, 116], "area": 10058}, {"id": 4162240, "category_id": 54, "iscrowd": 0, "bbox": [334, 27, 133, 132], "area": 12396}, {"id": 5145525, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 640, 287], "area": 142467}, {"id": 2911398, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 291], "area": 3232}, {"id": 10528187, "category_id": 195, "iscrowd": 0, "bbox": [492, 34, 148, 100], "area": 8805}], "file_name": "000000438226.png", "image_id": 438226}, {"segments_info": [{"id": 6514021, "category_id": 16, "iscrowd": 0, "bbox": [50, 288, 215, 307], "area": 20238}, {"id": 10722973, "category_id": 178, "iscrowd": 0, "bbox": [0, 0, 429, 615], "area": 207335}, {"id": 4411748, "category_id": 184, "iscrowd": 0, "bbox": [83, 322, 346, 318], "area": 22870}], "file_name": "000000438269.png", "image_id": 438269}, {"segments_info": [{"id": 6056567, "category_id": 1, "iscrowd": 0, "bbox": [42, 118, 138, 252], "area": 11103}, {"id": 8362672, "category_id": 1, "iscrowd": 0, "bbox": [108, 55, 199, 402], "area": 29011}, {"id": 2718630, "category_id": 37, "iscrowd": 0, "bbox": [382, 175, 24, 24], "area": 451}, {"id": 6916997, "category_id": 43, "iscrowd": 0, "bbox": [256, 147, 186, 87], "area": 4942}, {"id": 6715509, "category_id": 43, "iscrowd": 0, "bbox": [59, 179, 64, 43], "area": 1293}, {"id": 5794924, "category_id": 145, "iscrowd": 0, "bbox": [10, 271, 443, 211], "area": 64596}, {"id": 7107688, "category_id": 185, "iscrowd": 0, "bbox": [46, 219, 177, 89], "area": 4171}], "file_name": "000000438304.png", "image_id": 438304}, {"segments_info": [{"id": 1645642, "category_id": 1, "iscrowd": 0, "bbox": [440, 73, 46, 160], "area": 3844}, {"id": 2105452, "category_id": 1, "iscrowd": 0, "bbox": [334, 52, 124, 330], "area": 17384}, {"id": 3295072, "category_id": 1, "iscrowd": 0, "bbox": [207, 78, 65, 256], "area": 6290}, {"id": 7252682, "category_id": 1, "iscrowd": 0, "bbox": [315, 115, 42, 48], "area": 1445}, {"id": 2371651, "category_id": 1, "iscrowd": 0, "bbox": [162, 41, 130, 333], "area": 17580}, {"id": 7109253, "category_id": 44, "iscrowd": 0, "bbox": [12, 159, 17, 51], "area": 585}, {"id": 4548996, "category_id": 46, "iscrowd": 0, "bbox": [272, 156, 16, 29], "area": 187}, {"id": 6722212, "category_id": 46, "iscrowd": 0, "bbox": [324, 163, 19, 45], "area": 494}, {"id": 6589608, "category_id": 46, "iscrowd": 0, "bbox": [263, 161, 18, 43], "area": 405}, {"id": 8761533, "category_id": 46, "iscrowd": 0, "bbox": [292, 173, 13, 34], "area": 272}, {"id": 7711416, "category_id": 47, "iscrowd": 0, "bbox": [301, 190, 18, 15], "area": 242}, {"id": 5537963, "category_id": 61, "iscrowd": 0, "bbox": [414, 231, 80, 50], "area": 3142}, {"id": 2502207, "category_id": 62, "iscrowd": 0, "bbox": [532, 207, 87, 50], "area": 2297}, {"id": 1907535, "category_id": 67, "iscrowd": 0, "bbox": [375, 252, 265, 169], "area": 31452}, {"id": 5470610, "category_id": 78, "iscrowd": 0, "bbox": [259, 96, 45, 34], "area": 1297}, {"id": 2172713, "category_id": 81, "iscrowd": 0, "bbox": [29, 181, 98, 13], "area": 720}, {"id": 6260643, "category_id": 82, "iscrowd": 0, "bbox": [305, 71, 95, 91], "area": 4589}, {"id": 5401217, "category_id": 107, "iscrowd": 0, "bbox": [0, 140, 164, 90], "area": 4999}, {"id": 3297402, "category_id": 112, "iscrowd": 0, "bbox": [493, 31, 38, 232], "area": 3595}, {"id": 6259614, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 445, 113], "area": 4223}, {"id": 5800606, "category_id": 168, "iscrowd": 0, "bbox": [149, 188, 19, 39], "area": 378}, {"id": 3826835, "category_id": 186, "iscrowd": 0, "bbox": [80, 0, 449, 53], "area": 13479}, {"id": 2968184, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 415, 402], "area": 60639}, {"id": 5403260, "category_id": 189, "iscrowd": 0, "bbox": [287, 168, 83, 42], "area": 1434}, {"id": 5273503, "category_id": 190, "iscrowd": 0, "bbox": [0, 196, 492, 229], "area": 23559}, {"id": 5077921, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 260], "area": 39229}, {"id": 4027800, "category_id": 200, "iscrowd": 0, "bbox": [48, 267, 136, 106], "area": 6724}], "file_name": "000000438774.png", "image_id": 438774}, {"segments_info": [{"id": 7240586, "category_id": 1, "iscrowd": 0, "bbox": [126, 34, 55, 121], "area": 3620}, {"id": 7045049, "category_id": 1, "iscrowd": 0, "bbox": [250, 81, 188, 337], "area": 26662}, {"id": 4806502, "category_id": 1, "iscrowd": 0, "bbox": [483, 90, 21, 35], "area": 106}, {"id": 5990804, "category_id": 1, "iscrowd": 0, "bbox": [44, 47, 183, 317], "area": 22762}, {"id": 2305336, "category_id": 1, "iscrowd": 0, "bbox": [483, 40, 37, 101], "area": 1746}, {"id": 5597101, "category_id": 1, "iscrowd": 0, "bbox": [409, 12, 97, 276], "area": 12080}, {"id": 3162706, "category_id": 15, "iscrowd": 0, "bbox": [301, 93, 33, 13], "area": 221}, {"id": 7374745, "category_id": 15, "iscrowd": 0, "bbox": [581, 89, 55, 20], "area": 595}, {"id": 3425106, "category_id": 15, "iscrowd": 0, "bbox": [253, 94, 29, 18], "area": 329}, {"id": 9593410, "category_id": 37, "iscrowd": 0, "bbox": [163, 323, 40, 41], "area": 1309}, {"id": 4353655, "category_id": 145, "iscrowd": 0, "bbox": [0, 81, 640, 346], "area": 145262}, {"id": 2638405, "category_id": 184, "iscrowd": 0, "bbox": [16, 0, 603, 104], "area": 22748}, {"id": 3755354, "category_id": 189, "iscrowd": 0, "bbox": [268, 81, 372, 33], "area": 1480}, {"id": 3103058, "category_id": 193, "iscrowd": 0, "bbox": [273, 16, 367, 110], "area": 3396}, {"id": 2303517, "category_id": 197, "iscrowd": 0, "bbox": [496, 14, 144, 52], "area": 3937}, {"id": 9810370, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 107], "area": 13112}], "file_name": "000000438862.png", "image_id": 438862}, {"segments_info": [{"id": 10790830, "category_id": 1, "iscrowd": 0, "bbox": [168, 21, 181, 307], "area": 32049}, {"id": 4305300, "category_id": 37, "iscrowd": 0, "bbox": [59, 117, 24, 23], "area": 394}, {"id": 5401975, "category_id": 43, "iscrowd": 0, "bbox": [340, 253, 54, 74], "area": 2333}, {"id": 1583910, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 500, 333], "area": 130243}], "file_name": "000000438876.png", "image_id": 438876}, {"segments_info": [{"id": 6579309, "category_id": 1, "iscrowd": 0, "bbox": [49, 164, 80, 327], "area": 14586}, {"id": 4079949, "category_id": 1, "iscrowd": 0, "bbox": [124, 21, 179, 377], "area": 28119}, {"id": 5857125, "category_id": 41, "iscrowd": 0, "bbox": [133, 359, 128, 74], "area": 2685}, {"id": 4341824, "category_id": 41, "iscrowd": 0, "bbox": [27, 349, 122, 42], "area": 2760}, {"id": 14589026, "category_id": 92, "iscrowd": 0, "bbox": [148, 0, 101, 37], "area": 1973}, {"id": 2179900, "category_id": 184, "iscrowd": 0, "bbox": [151, 0, 307, 122], "area": 26493}, {"id": 7635585, "category_id": 185, "iscrowd": 0, "bbox": [0, 38, 458, 207], "area": 49549}, {"id": 8093309, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 181, 45], "area": 4484}, {"id": 8094849, "category_id": 187, "iscrowd": 0, "bbox": [442, 99, 16, 23], "area": 237}, {"id": 7108486, "category_id": 191, "iscrowd": 0, "bbox": [0, 506, 458, 134], "area": 31615}, {"id": 9867400, "category_id": 199, "iscrowd": 0, "bbox": [0, 1, 458, 533], "area": 97340}], "file_name": "000000438907.png", "image_id": 438907}, {"segments_info": [{"id": 3355442, "category_id": 1, "iscrowd": 0, "bbox": [16, 130, 29, 73], "area": 1266}, {"id": 6969975, "category_id": 1, "iscrowd": 0, "bbox": [519, 88, 81, 129], "area": 3833}, {"id": 3221277, "category_id": 1, "iscrowd": 0, "bbox": [389, 95, 16, 48], "area": 518}, {"id": 5718357, "category_id": 1, "iscrowd": 0, "bbox": [184, 118, 53, 113], "area": 2551}, {"id": 6906461, "category_id": 1, "iscrowd": 0, "bbox": [434, 89, 19, 48], "area": 582}, {"id": 4667955, "category_id": 1, "iscrowd": 0, "bbox": [493, 92, 65, 117], "area": 1969}, {"id": 5917518, "category_id": 1, "iscrowd": 0, "bbox": [232, 133, 23, 55], "area": 509}, {"id": 4796715, "category_id": 1, "iscrowd": 0, "bbox": [416, 89, 20, 50], "area": 621}, {"id": 10324617, "category_id": 1, "iscrowd": 0, "bbox": [62, 131, 71, 100], "area": 2706}, {"id": 3616867, "category_id": 1, "iscrowd": 0, "bbox": [330, 104, 106, 123], "area": 3651}, {"id": 1973273, "category_id": 1, "iscrowd": 0, "bbox": [359, 97, 18, 17], "area": 173}, {"id": 2963014, "category_id": 1, "iscrowd": 0, "bbox": [172, 141, 10, 15], "area": 115}, {"id": 4539234, "category_id": 1, "iscrowd": 0, "bbox": [206, 116, 19, 19], "area": 182}, {"id": 3288876, "category_id": 1, "iscrowd": 1, "bbox": [66, 90, 468, 86], "area": 6312}, {"id": 7700860, "category_id": 35, "iscrowd": 0, "bbox": [504, 213, 118, 8], "area": 287}, {"id": 6776939, "category_id": 35, "iscrowd": 0, "bbox": [128, 232, 136, 10], "area": 284}, {"id": 8348510, "category_id": 92, "iscrowd": 0, "bbox": [0, 82, 640, 116], "area": 15003}, {"id": 10460574, "category_id": 130, "iscrowd": 0, "bbox": [27, 68, 412, 59], "area": 594}, {"id": 13156551, "category_id": 159, "iscrowd": 0, "bbox": [0, 165, 640, 138], "area": 56744}, {"id": 11574161, "category_id": 166, "iscrowd": 0, "bbox": [0, 47, 447, 72], "area": 5721}, {"id": 7106155, "category_id": 184, "iscrowd": 0, "bbox": [126, 39, 514, 117], "area": 10944}, {"id": 4670268, "category_id": 185, "iscrowd": 0, "bbox": [279, 123, 361, 36], "area": 797}, {"id": 16381160, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 168], "area": 53890}, {"id": 8354164, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 503, 170], "area": 4642}, {"id": 10131091, "category_id": 199, "iscrowd": 0, "bbox": [41, 107, 46, 46], "area": 928}], "file_name": "000000438955.png", "image_id": 438955}, {"segments_info": [{"id": 3158599, "category_id": 1, "iscrowd": 0, "bbox": [200, 160, 53, 140], "area": 3512}, {"id": 7103350, "category_id": 1, "iscrowd": 0, "bbox": [520, 160, 43, 77], "area": 797}, {"id": 2958413, "category_id": 1, "iscrowd": 0, "bbox": [0, 205, 13, 63], "area": 538}, {"id": 3683411, "category_id": 1, "iscrowd": 0, "bbox": [339, 151, 52, 70], "area": 2282}, {"id": 4011079, "category_id": 1, "iscrowd": 0, "bbox": [164, 160, 36, 44], "area": 1005}, {"id": 3354935, "category_id": 1, "iscrowd": 0, "bbox": [270, 153, 71, 113], "area": 2493}, {"id": 7299173, "category_id": 1, "iscrowd": 0, "bbox": [577, 141, 38, 79], "area": 1250}, {"id": 3025733, "category_id": 1, "iscrowd": 0, "bbox": [388, 147, 84, 124], "area": 2955}, {"id": 5132895, "category_id": 1, "iscrowd": 0, "bbox": [255, 172, 24, 48], "area": 496}, {"id": 6826782, "category_id": 1, "iscrowd": 0, "bbox": [470, 150, 48, 92], "area": 1521}, {"id": 3488586, "category_id": 1, "iscrowd": 0, "bbox": [87, 163, 71, 116], "area": 2202}, {"id": 5926013, "category_id": 1, "iscrowd": 0, "bbox": [233, 173, 35, 90], "area": 1222}, {"id": 3432808, "category_id": 1, "iscrowd": 0, "bbox": [16, 205, 19, 63], "area": 672}, {"id": 4738906, "category_id": 1, "iscrowd": 1, "bbox": [272, 142, 368, 178], "area": 7839}, {"id": 8809563, "category_id": 8, "iscrowd": 0, "bbox": [187, 145, 86, 49], "area": 1680}, {"id": 2697012, "category_id": 8, "iscrowd": 0, "bbox": [36, 159, 143, 77], "area": 5791}, {"id": 3292488, "category_id": 19, "iscrowd": 0, "bbox": [175, 203, 57, 152], "area": 4363}, {"id": 6387310, "category_id": 19, "iscrowd": 0, "bbox": [555, 182, 22, 54], "area": 573}, {"id": 3552821, "category_id": 19, "iscrowd": 0, "bbox": [264, 206, 11, 21], "area": 96}, {"id": 3360337, "category_id": 19, "iscrowd": 0, "bbox": [156, 192, 33, 146], "area": 2505}, {"id": 4804431, "category_id": 19, "iscrowd": 0, "bbox": [273, 184, 52, 164], "area": 4160}, {"id": 2239020, "category_id": 19, "iscrowd": 0, "bbox": [513, 194, 40, 84], "area": 1904}, {"id": 1843760, "category_id": 19, "iscrowd": 0, "bbox": [462, 187, 45, 103], "area": 2742}, {"id": 2173746, "category_id": 19, "iscrowd": 0, "bbox": [398, 181, 64, 157], "area": 5333}, {"id": 2041385, "category_id": 19, "iscrowd": 0, "bbox": [339, 213, 42, 124], "area": 3612}, {"id": 2305331, "category_id": 19, "iscrowd": 0, "bbox": [92, 204, 54, 144], "area": 4508}, {"id": 2108984, "category_id": 19, "iscrowd": 0, "bbox": [578, 179, 30, 95], "area": 1511}, {"id": 3093312, "category_id": 19, "iscrowd": 1, "bbox": [605, 184, 16, 37], "area": 421}, {"id": 5006959, "category_id": 125, "iscrowd": 0, "bbox": [58, 192, 345, 168], "area": 11074}, {"id": 3357493, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 243], "area": 91045}, {"id": 16315127, "category_id": 187, "iscrowd": 0, "bbox": [121, 0, 519, 79], "area": 12912}, {"id": 2256998, "category_id": 193, "iscrowd": 0, "bbox": [0, 219, 640, 141], "area": 40197}], "file_name": "000000439180.png", "image_id": 439180}, {"segments_info": [{"id": 3503194, "category_id": 52, "iscrowd": 0, "bbox": [384, 167, 15, 31], "area": 247}, {"id": 2846037, "category_id": 52, "iscrowd": 0, "bbox": [373, 176, 18, 34], "area": 364}, {"id": 3503199, "category_id": 52, "iscrowd": 0, "bbox": [355, 228, 90, 54], "area": 3868}, {"id": 3701089, "category_id": 52, "iscrowd": 0, "bbox": [346, 158, 39, 59], "area": 1360}, {"id": 4293740, "category_id": 52, "iscrowd": 0, "bbox": [367, 111, 89, 60], "area": 3771}, {"id": 2780757, "category_id": 52, "iscrowd": 0, "bbox": [397, 194, 17, 32], "area": 299}, {"id": 3108181, "category_id": 52, "iscrowd": 0, "bbox": [421, 213, 16, 29], "area": 323}, {"id": 3307101, "category_id": 52, "iscrowd": 0, "bbox": [407, 201, 16, 32], "area": 340}, {"id": 3170646, "category_id": 122, "iscrowd": 0, "bbox": [337, 99, 95, 66], "area": 2007}, {"id": 16579835, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 202, 271], "area": 6940}], "file_name": "000000439290.png", "image_id": 439290}, {"segments_info": [{"id": 4209758, "category_id": 1, "iscrowd": 0, "bbox": [1, 112, 222, 286], "area": 40587}, {"id": 4604995, "category_id": 1, "iscrowd": 0, "bbox": [196, 0, 183, 69], "area": 7531}, {"id": 3354416, "category_id": 1, "iscrowd": 0, "bbox": [548, 182, 92, 77], "area": 5450}, {"id": 5859981, "category_id": 60, "iscrowd": 0, "bbox": [140, 95, 327, 320], "area": 70948}, {"id": 10526371, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 524, 480], "area": 96977}, {"id": 6577755, "category_id": 191, "iscrowd": 0, "bbox": [16, 0, 624, 480], "area": 72908}, {"id": 6381406, "category_id": 199, "iscrowd": 0, "bbox": [486, 0, 154, 78], "area": 9549}], "file_name": "000000439426.png", "image_id": 439426}, {"segments_info": [{"id": 5130309, "category_id": 1, "iscrowd": 0, "bbox": [42, 24, 386, 581], "area": 83212}, {"id": 16050914, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 428, 640], "area": 174271}], "file_name": "000000439522.png", "image_id": 439522}, {"segments_info": [{"id": 6647447, "category_id": 1, "iscrowd": 0, "bbox": [158, 103, 273, 479], "area": 97702}, {"id": 4409172, "category_id": 44, "iscrowd": 0, "bbox": [89, 330, 38, 140], "area": 3751}, {"id": 4210760, "category_id": 44, "iscrowd": 0, "bbox": [120, 332, 38, 128], "area": 3208}, {"id": 2303019, "category_id": 44, "iscrowd": 0, "bbox": [156, 312, 28, 142], "area": 2440}, {"id": 3620455, "category_id": 49, "iscrowd": 0, "bbox": [170, 476, 17, 18], "area": 96}, {"id": 14933977, "category_id": 61, "iscrowd": 0, "bbox": [75, 491, 118, 78], "area": 7973}, {"id": 1778760, "category_id": 67, "iscrowd": 0, "bbox": [1, 498, 240, 134], "area": 16222}, {"id": 4874099, "category_id": 130, "iscrowd": 0, "bbox": [71, 5, 225, 118], "area": 2753}, {"id": 6722779, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 340, 160], "area": 26209}, {"id": 2173771, "category_id": 189, "iscrowd": 0, "bbox": [0, 427, 239, 213], "area": 15073}, {"id": 5069136, "category_id": 199, "iscrowd": 0, "bbox": [0, 442, 91, 40], "area": 1521}], "file_name": "000000439525.png", "image_id": 439525}, {"segments_info": [{"id": 3948353, "category_id": 1, "iscrowd": 0, "bbox": [33, 207, 30, 97], "area": 1469}, {"id": 5391929, "category_id": 1, "iscrowd": 0, "bbox": [77, 217, 16, 45], "area": 399}, {"id": 4671307, "category_id": 1, "iscrowd": 0, "bbox": [75, 217, 6, 12], "area": 47}, {"id": 2366743, "category_id": 1, "iscrowd": 0, "bbox": [68, 220, 11, 35], "area": 225}, {"id": 4602405, "category_id": 1, "iscrowd": 0, "bbox": [58, 217, 11, 23], "area": 172}, {"id": 2301986, "category_id": 1, "iscrowd": 0, "bbox": [0, 199, 35, 162], "area": 4150}, {"id": 4404798, "category_id": 7, "iscrowd": 0, "bbox": [513, 78, 127, 386], "area": 42208}, {"id": 4409418, "category_id": 7, "iscrowd": 0, "bbox": [87, 53, 433, 416], "area": 129883}, {"id": 1840662, "category_id": 31, "iscrowd": 0, "bbox": [29, 286, 21, 47], "area": 499}, {"id": 4081227, "category_id": 31, "iscrowd": 0, "bbox": [37, 221, 24, 45], "area": 145}, {"id": 920845, "category_id": 147, "iscrowd": 0, "bbox": [152, 306, 488, 174], "area": 15916}, {"id": 15460307, "category_id": 151, "iscrowd": 0, "bbox": [56, 68, 578, 75], "area": 5335}, {"id": 5327172, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 92, 188], "area": 11126}, {"id": 16645370, "category_id": 187, "iscrowd": 0, "bbox": [31, 0, 609, 153], "area": 50605}, {"id": 7302504, "category_id": 191, "iscrowd": 0, "bbox": [0, 239, 244, 241], "area": 37206}, {"id": 6973534, "category_id": 197, "iscrowd": 0, "bbox": [0, 127, 166, 113], "area": 6651}], "file_name": "000000439593.png", "image_id": 439593}, {"segments_info": [{"id": 7959660, "category_id": 3, "iscrowd": 0, "bbox": [61, 199, 26, 20], "area": 291}, {"id": 6180165, "category_id": 3, "iscrowd": 0, "bbox": [18, 197, 28, 21], "area": 445}, {"id": 4407889, "category_id": 3, "iscrowd": 0, "bbox": [74, 149, 329, 175], "area": 22152}, {"id": 10395810, "category_id": 3, "iscrowd": 0, "bbox": [0, 171, 20, 53], "area": 731}, {"id": 10458247, "category_id": 3, "iscrowd": 0, "bbox": [26, 194, 38, 24], "area": 433}, {"id": 5722435, "category_id": 3, "iscrowd": 0, "bbox": [357, 178, 70, 53], "area": 2237}, {"id": 9673113, "category_id": 11, "iscrowd": 0, "bbox": [88, 116, 226, 447], "area": 51212}, {"id": 8618881, "category_id": 149, "iscrowd": 0, "bbox": [0, 197, 437, 272], "area": 32506}, {"id": 4609099, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 220], "area": 62009}, {"id": 13948111, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 178], "area": 13331}, {"id": 7501943, "category_id": 191, "iscrowd": 0, "bbox": [0, 255, 480, 385], "area": 111886}], "file_name": "000000439623.png", "image_id": 439623}, {"segments_info": [{"id": 2697258, "category_id": 1, "iscrowd": 0, "bbox": [343, 269, 23, 31], "area": 542}, {"id": 6448548, "category_id": 1, "iscrowd": 0, "bbox": [256, 167, 82, 229], "area": 7835}, {"id": 2630948, "category_id": 1, "iscrowd": 0, "bbox": [0, 277, 71, 203], "area": 11902}, {"id": 3946552, "category_id": 1, "iscrowd": 0, "bbox": [48, 276, 32, 68], "area": 1363}, {"id": 5133416, "category_id": 1, "iscrowd": 0, "bbox": [330, 271, 8, 20], "area": 60}, {"id": 11576727, "category_id": 1, "iscrowd": 0, "bbox": [560, 274, 39, 89], "area": 2552}, {"id": 5985109, "category_id": 1, "iscrowd": 0, "bbox": [385, 271, 33, 38], "area": 631}, {"id": 3684673, "category_id": 1, "iscrowd": 0, "bbox": [363, 270, 22, 27], "area": 411}, {"id": 6509904, "category_id": 1, "iscrowd": 0, "bbox": [411, 272, 50, 64], "area": 1539}, {"id": 9407110, "category_id": 1, "iscrowd": 0, "bbox": [114, 270, 35, 131], "area": 2339}, {"id": 6578783, "category_id": 1, "iscrowd": 0, "bbox": [508, 285, 27, 100], "area": 1692}, {"id": 10263965, "category_id": 1, "iscrowd": 0, "bbox": [525, 283, 37, 62], "area": 1620}, {"id": 5331819, "category_id": 19, "iscrowd": 0, "bbox": [132, 238, 336, 236], "area": 31978}, {"id": 6050894, "category_id": 28, "iscrowd": 0, "bbox": [114, 262, 36, 11], "area": 196}, {"id": 4603963, "category_id": 28, "iscrowd": 0, "bbox": [509, 268, 59, 18], "area": 788}, {"id": 5853259, "category_id": 28, "iscrowd": 0, "bbox": [593, 262, 47, 27], "area": 301}, {"id": 9267124, "category_id": 28, "iscrowd": 0, "bbox": [393, 253, 22, 23], "area": 67}, {"id": 6248271, "category_id": 28, "iscrowd": 0, "bbox": [344, 252, 68, 19], "area": 876}, {"id": 9405327, "category_id": 28, "iscrowd": 0, "bbox": [331, 228, 61, 27], "area": 1033}, {"id": 8620196, "category_id": 149, "iscrowd": 0, "bbox": [56, 411, 584, 69], "area": 26562}, {"id": 4875860, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 346], "area": 170802}, {"id": 8160390, "category_id": 185, "iscrowd": 0, "bbox": [58, 290, 582, 155], "area": 27635}, {"id": 8228765, "category_id": 191, "iscrowd": 0, "bbox": [560, 395, 55, 26], "area": 915}], "file_name": "000000439715.png", "image_id": 439715}, {"segments_info": [{"id": 8028564, "category_id": 1, "iscrowd": 0, "bbox": [191, 8, 449, 292], "area": 64764}, {"id": 4858927, "category_id": 77, "iscrowd": 0, "bbox": [240, 331, 169, 112], "area": 6901}, {"id": 2126511, "category_id": 88, "iscrowd": 0, "bbox": [1, 10, 208, 174], "area": 20999}, {"id": 2308198, "category_id": 118, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 177851}, {"id": 4870752, "category_id": 200, "iscrowd": 0, "bbox": [210, 0, 430, 250], "area": 32894}], "file_name": "000000439773.png", "image_id": 439773}, {"segments_info": [{"id": 790812, "category_id": 1, "iscrowd": 0, "bbox": [131, 231, 45, 53], "area": 1006}, {"id": 1514555, "category_id": 1, "iscrowd": 0, "bbox": [328, 212, 12, 24], "area": 149}, {"id": 2764617, "category_id": 1, "iscrowd": 0, "bbox": [487, 199, 6, 13], "area": 63}, {"id": 2564652, "category_id": 1, "iscrowd": 0, "bbox": [112, 155, 87, 75], "area": 2620}, {"id": 2040373, "category_id": 1, "iscrowd": 0, "bbox": [490, 210, 9, 9], "area": 45}, {"id": 2303027, "category_id": 1, "iscrowd": 0, "bbox": [420, 225, 28, 46], "area": 609}, {"id": 1775904, "category_id": 1, "iscrowd": 0, "bbox": [236, 205, 54, 114], "area": 2653}, {"id": 592405, "category_id": 1, "iscrowd": 0, "bbox": [284, 197, 48, 116], "area": 3098}, {"id": 3223632, "category_id": 1, "iscrowd": 0, "bbox": [310, 198, 12, 30], "area": 209}, {"id": 2831725, "category_id": 1, "iscrowd": 0, "bbox": [334, 189, 7, 22], "area": 68}, {"id": 2829902, "category_id": 1, "iscrowd": 0, "bbox": [467, 185, 10, 17], "area": 107}, {"id": 657936, "category_id": 2, "iscrowd": 0, "bbox": [231, 247, 54, 75], "area": 1332}, {"id": 1381663, "category_id": 27, "iscrowd": 0, "bbox": [431, 241, 17, 27], "area": 162}, {"id": 1119259, "category_id": 41, "iscrowd": 0, "bbox": [100, 226, 55, 33], "area": 572}, {"id": 3093315, "category_id": 154, "iscrowd": 0, "bbox": [0, 194, 500, 139], "area": 32350}, {"id": 6588369, "category_id": 155, "iscrowd": 0, "bbox": [0, 178, 500, 38], "area": 5409}, {"id": 1780570, "category_id": 184, "iscrowd": 0, "bbox": [207, 0, 268, 272], "area": 19247}, {"id": 7246560, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 199], "area": 78078}, {"id": 1120027, "category_id": 193, "iscrowd": 0, "bbox": [0, 246, 156, 68], "area": 1977}, {"id": 1184538, "category_id": 199, "iscrowd": 0, "bbox": [142, 261, 358, 72], "area": 16195}], "file_name": "000000439854.png", "image_id": 439854}, {"segments_info": [{"id": 10918550, "category_id": 1, "iscrowd": 0, "bbox": [71, 306, 33, 47], "area": 834}, {"id": 5788512, "category_id": 1, "iscrowd": 0, "bbox": [223, 287, 27, 43], "area": 581}, {"id": 7764106, "category_id": 1, "iscrowd": 0, "bbox": [124, 313, 26, 42], "area": 493}, {"id": 5657261, "category_id": 1, "iscrowd": 0, "bbox": [308, 169, 28, 20], "area": 235}, {"id": 11511462, "category_id": 1, "iscrowd": 0, "bbox": [43, 90, 36, 75], "area": 1265}, {"id": 9072739, "category_id": 1, "iscrowd": 0, "bbox": [269, 280, 29, 26], "area": 356}, {"id": 12037546, "category_id": 1, "iscrowd": 0, "bbox": [206, 141, 37, 39], "area": 683}, {"id": 3419948, "category_id": 1, "iscrowd": 0, "bbox": [337, 443, 65, 152], "area": 5627}, {"id": 8024962, "category_id": 1, "iscrowd": 0, "bbox": [103, 418, 83, 125], "area": 3774}, {"id": 6904942, "category_id": 1, "iscrowd": 0, "bbox": [158, 310, 31, 46], "area": 543}, {"id": 3485513, "category_id": 1, "iscrowd": 0, "bbox": [173, 290, 14, 24], "area": 213}, {"id": 10128779, "category_id": 1, "iscrowd": 0, "bbox": [193, 312, 41, 42], "area": 687}, {"id": 11378855, "category_id": 1, "iscrowd": 0, "bbox": [271, 143, 23, 27], "area": 301}, {"id": 4735048, "category_id": 1, "iscrowd": 1, "bbox": [0, 0, 428, 459], "area": 20940}, {"id": 2831424, "category_id": 15, "iscrowd": 0, "bbox": [34, 424, 279, 24], "area": 1358}, {"id": 6182746, "category_id": 15, "iscrowd": 0, "bbox": [5, 2, 423, 214], "area": 76389}, {"id": 4801861, "category_id": 15, "iscrowd": 0, "bbox": [1, 172, 426, 199], "area": 66769}, {"id": 4539213, "category_id": 40, "iscrowd": 0, "bbox": [182, 443, 9, 13], "area": 85}, {"id": 2433054, "category_id": 62, "iscrowd": 0, "bbox": [251, 281, 16, 10], "area": 123}, {"id": 1578775, "category_id": 62, "iscrowd": 0, "bbox": [367, 276, 11, 9], "area": 52}, {"id": 6775126, "category_id": 62, "iscrowd": 0, "bbox": [175, 107, 19, 8], "area": 73}, {"id": 2827297, "category_id": 62, "iscrowd": 0, "bbox": [235, 280, 16, 10], "area": 129}, {"id": 5062976, "category_id": 62, "iscrowd": 0, "bbox": [152, 296, 19, 12], "area": 186}, {"id": 5459018, "category_id": 62, "iscrowd": 0, "bbox": [185, 79, 14, 13], "area": 160}, {"id": 9876145, "category_id": 145, "iscrowd": 0, "bbox": [0, 424, 428, 216], "area": 72413}, {"id": 12827310, "category_id": 187, "iscrowd": 0, "bbox": [410, 0, 18, 39], "area": 444}, {"id": 5262923, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 416, 251], "area": 1788}, {"id": 3157818, "category_id": 199, "iscrowd": 0, "bbox": [0, 337, 428, 121], "area": 14967}], "file_name": "000000439994.png", "image_id": 439994}, {"segments_info": [{"id": 4145479, "category_id": 1, "iscrowd": 0, "bbox": [67, 8, 128, 174], "area": 11226}, {"id": 7695990, "category_id": 1, "iscrowd": 0, "bbox": [332, 345, 52, 54], "area": 1548}, {"id": 4541783, "category_id": 22, "iscrowd": 0, "bbox": [1, 142, 410, 476], "area": 108339}, {"id": 12441575, "category_id": 148, "iscrowd": 0, "bbox": [83, 204, 328, 315], "area": 29021}, {"id": 12438482, "category_id": 154, "iscrowd": 0, "bbox": [0, 477, 411, 163], "area": 33732}, {"id": 4877138, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 411, 232], "area": 63637}, {"id": 11263448, "category_id": 193, "iscrowd": 0, "bbox": [79, 468, 307, 49], "area": 2471}, {"id": 13427435, "category_id": 194, "iscrowd": 0, "bbox": [213, 430, 181, 145], "area": 7476}, {"id": 9611703, "category_id": 198, "iscrowd": 0, "bbox": [96, 387, 315, 163], "area": 3847}], "file_name": "000000440171.png", "image_id": 440171}, {"segments_info": [{"id": 12564912, "category_id": 1, "iscrowd": 0, "bbox": [185, 140, 91, 208], "area": 10348}, {"id": 8423569, "category_id": 1, "iscrowd": 0, "bbox": [44, 148, 28, 96], "area": 1460}, {"id": 9210007, "category_id": 1, "iscrowd": 0, "bbox": [529, 168, 13, 43], "area": 317}, {"id": 9934488, "category_id": 1, "iscrowd": 0, "bbox": [513, 152, 75, 132], "area": 3500}, {"id": 5065835, "category_id": 1, "iscrowd": 0, "bbox": [369, 157, 37, 69], "area": 857}, {"id": 7775383, "category_id": 37, "iscrowd": 0, "bbox": [183, 202, 4, 3], "area": 12}, {"id": 9494199, "category_id": 37, "iscrowd": 0, "bbox": [282, 168, 7, 7], "area": 38}, {"id": 9077876, "category_id": 43, "iscrowd": 0, "bbox": [258, 219, 57, 21], "area": 450}, {"id": 7308676, "category_id": 43, "iscrowd": 0, "bbox": [62, 214, 11, 22], "area": 164}, {"id": 10919562, "category_id": 43, "iscrowd": 0, "bbox": [495, 209, 48, 30], "area": 515}, {"id": 5854553, "category_id": 43, "iscrowd": 0, "bbox": [527, 173, 9, 7], "area": 14}, {"id": 8751753, "category_id": 43, "iscrowd": 0, "bbox": [388, 191, 13, 13], "area": 127}, {"id": 9606277, "category_id": 47, "iscrowd": 0, "bbox": [67, 173, 3, 2], "area": 5}, {"id": 12624493, "category_id": 145, "iscrowd": 0, "bbox": [0, 181, 640, 244], "area": 129269}, {"id": 8887703, "category_id": 149, "iscrowd": 0, "bbox": [0, 195, 130, 50], "area": 2883}, {"id": 3690300, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 133], "area": 72098}, {"id": 5134406, "category_id": 185, "iscrowd": 0, "bbox": [0, 78, 640, 138], "area": 46892}, {"id": 14736336, "category_id": 187, "iscrowd": 0, "bbox": [29, 0, 596, 49], "area": 2171}], "file_name": "000000440184.png", "image_id": 440184}, {"segments_info": [{"id": 8553096, "category_id": 1, "iscrowd": 0, "bbox": [97, 116, 130, 166], "area": 6867}, {"id": 2040897, "category_id": 1, "iscrowd": 0, "bbox": [243, 184, 33, 59], "area": 832}, {"id": 4211813, "category_id": 1, "iscrowd": 0, "bbox": [190, 130, 45, 129], "area": 2063}, {"id": 4209266, "category_id": 1, "iscrowd": 0, "bbox": [436, 93, 64, 173], "area": 5752}, {"id": 4539981, "category_id": 1, "iscrowd": 0, "bbox": [269, 109, 76, 148], "area": 5826}, {"id": 10857642, "category_id": 34, "iscrowd": 0, "bbox": [258, 159, 42, 15], "area": 298}, {"id": 7436906, "category_id": 34, "iscrowd": 0, "bbox": [422, 217, 18, 7], "area": 88}, {"id": 1118738, "category_id": 128, "iscrowd": 0, "bbox": [0, 156, 91, 39], "area": 2675}, {"id": 725007, "category_id": 184, "iscrowd": 0, "bbox": [221, 168, 219, 28], "area": 1714}, {"id": 6968123, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 185], "area": 76579}, {"id": 2447440, "category_id": 193, "iscrowd": 0, "bbox": [0, 178, 500, 157], "area": 63775}, {"id": 1053458, "category_id": 197, "iscrowd": 0, "bbox": [89, 170, 34, 18], "area": 359}], "file_name": "000000440336.png", "image_id": 440336}, {"segments_info": [{"id": 2699318, "category_id": 1, "iscrowd": 0, "bbox": [492, 184, 35, 73], "area": 1292}, {"id": 6061727, "category_id": 51, "iscrowd": 0, "bbox": [76, 268, 47, 12], "area": 306}, {"id": 2575499, "category_id": 53, "iscrowd": 0, "bbox": [83, 262, 31, 11], "area": 236}, {"id": 2830659, "category_id": 62, "iscrowd": 0, "bbox": [293, 307, 114, 79], "area": 6761}, {"id": 1647410, "category_id": 62, "iscrowd": 0, "bbox": [71, 341, 95, 86], "area": 5637}, {"id": 3231575, "category_id": 62, "iscrowd": 0, "bbox": [521, 258, 67, 93], "area": 2126}, {"id": 2641267, "category_id": 62, "iscrowd": 0, "bbox": [145, 232, 45, 39], "area": 878}, {"id": 3289651, "category_id": 62, "iscrowd": 0, "bbox": [472, 212, 22, 14], "area": 185}, {"id": 3100254, "category_id": 62, "iscrowd": 0, "bbox": [453, 235, 73, 34], "area": 741}, {"id": 1382946, "category_id": 62, "iscrowd": 0, "bbox": [613, 302, 27, 47], "area": 1235}, {"id": 1976375, "category_id": 62, "iscrowd": 0, "bbox": [445, 300, 98, 61], "area": 4534}, {"id": 2836309, "category_id": 63, "iscrowd": 0, "bbox": [463, 251, 125, 88], "area": 2712}, {"id": 1653862, "category_id": 63, "iscrowd": 0, "bbox": [405, 266, 78, 14], "area": 646}, {"id": 1720946, "category_id": 63, "iscrowd": 0, "bbox": [178, 264, 72, 19], "area": 880}, {"id": 1778219, "category_id": 67, "iscrowd": 0, "bbox": [212, 275, 293, 133], "area": 12059}, {"id": 6778241, "category_id": 72, "iscrowd": 0, "bbox": [263, 173, 99, 60], "area": 5338}, {"id": 3753557, "category_id": 84, "iscrowd": 0, "bbox": [202, 222, 8, 21], "area": 74}, {"id": 2568504, "category_id": 84, "iscrowd": 0, "bbox": [379, 132, 19, 6], "area": 93}, {"id": 402217, "category_id": 86, "iscrowd": 0, "bbox": [186, 159, 16, 16], "area": 221}, {"id": 11780292, "category_id": 86, "iscrowd": 0, "bbox": [458, 391, 58, 36], "area": 1265}, {"id": 10661550, "category_id": 86, "iscrowd": 0, "bbox": [595, 391, 45, 36], "area": 1187}, {"id": 1582891, "category_id": 86, "iscrowd": 0, "bbox": [193, 221, 9, 21], "area": 153}, {"id": 1845035, "category_id": 86, "iscrowd": 0, "bbox": [193, 183, 9, 17], "area": 145}, {"id": 1977150, "category_id": 86, "iscrowd": 0, "bbox": [165, 293, 33, 108], "area": 2042}, {"id": 1714755, "category_id": 86, "iscrowd": 0, "bbox": [198, 282, 30, 120], "area": 2009}, {"id": 2178627, "category_id": 86, "iscrowd": 0, "bbox": [433, 230, 20, 50], "area": 885}, {"id": 3423808, "category_id": 112, "iscrowd": 0, "bbox": [451, 73, 189, 239], "area": 21850}, {"id": 2571865, "category_id": 118, "iscrowd": 0, "bbox": [0, 256, 613, 171], "area": 13878}, {"id": 3955343, "category_id": 119, "iscrowd": 0, "bbox": [453, 340, 187, 78], "area": 7618}, {"id": 8625587, "category_id": 130, "iscrowd": 0, "bbox": [96, 0, 506, 278], "area": 9247}, {"id": 1257798, "category_id": 141, "iscrowd": 0, "bbox": [472, 238, 40, 39], "area": 693}, {"id": 1450799, "category_id": 156, "iscrowd": 0, "bbox": [168, 86, 298, 195], "area": 36705}, {"id": 133394, "category_id": 177, "iscrowd": 0, "bbox": [16, 267, 22, 14], "area": 231}, {"id": 1056038, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 98], "area": 35107}, {"id": 1779762, "category_id": 189, "iscrowd": 0, "bbox": [78, 268, 518, 159], "area": 13364}, {"id": 5204090, "category_id": 199, "iscrowd": 0, "bbox": [0, 32, 640, 300], "area": 49885}, {"id": 1651547, "category_id": 200, "iscrowd": 0, "bbox": [0, 271, 176, 79], "area": 3729}], "file_name": "000000440475.png", "image_id": 440475}, {"segments_info": [{"id": 7443647, "category_id": 28, "iscrowd": 0, "bbox": [55, 0, 74, 107], "area": 1648}, {"id": 8298182, "category_id": 28, "iscrowd": 0, "bbox": [46, 1, 69, 109], "area": 829}, {"id": 9339207, "category_id": 33, "iscrowd": 0, "bbox": [203, 147, 250, 174], "area": 37031}, {"id": 6052756, "category_id": 112, "iscrowd": 0, "bbox": [0, 116, 67, 224], "area": 9180}, {"id": 800130, "category_id": 118, "iscrowd": 0, "bbox": [22, 108, 478, 267], "area": 54796}, {"id": 4409471, "category_id": 177, "iscrowd": 0, "bbox": [0, 22, 500, 219], "area": 7646}, {"id": 1788813, "category_id": 189, "iscrowd": 0, "bbox": [53, 0, 331, 211], "area": 43807}, {"id": 10007255, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 24697}], "file_name": "000000440507.png", "image_id": 440507}, {"segments_info": [{"id": 3556958, "category_id": 7, "iscrowd": 0, "bbox": [210, 156, 312, 251], "area": 29879}, {"id": 6648186, "category_id": 125, "iscrowd": 0, "bbox": [76, 207, 482, 217], "area": 24331}, {"id": 5330525, "category_id": 147, "iscrowd": 0, "bbox": [204, 177, 347, 247], "area": 14137}, {"id": 2115393, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 424], "area": 152043}, {"id": 16448505, "category_id": 187, "iscrowd": 0, "bbox": [106, 0, 534, 144], "area": 44992}], "file_name": "000000440508.png", "image_id": 440508}, {"segments_info": [{"id": 7696251, "category_id": 7, "iscrowd": 0, "bbox": [61, 191, 359, 134], "area": 29269}, {"id": 1183281, "category_id": 10, "iscrowd": 0, "bbox": [0, 125, 22, 69], "area": 1423}, {"id": 5461867, "category_id": 125, "iscrowd": 0, "bbox": [0, 257, 640, 209], "area": 35148}, {"id": 3814730, "category_id": 147, "iscrowd": 0, "bbox": [19, 248, 621, 218], "area": 73357}, {"id": 4542813, "category_id": 184, "iscrowd": 0, "bbox": [431, 161, 209, 110], "area": 12221}, {"id": 14146008, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 219], "area": 35637}, {"id": 11314858, "category_id": 197, "iscrowd": 0, "bbox": [0, 16, 640, 370], "area": 90261}], "file_name": "000000440617.png", "image_id": 440617}, {"segments_info": [{"id": 6579307, "category_id": 1, "iscrowd": 0, "bbox": [336, 185, 52, 83], "area": 2559}, {"id": 4275278, "category_id": 1, "iscrowd": 0, "bbox": [246, 163, 45, 67], "area": 1764}, {"id": 2433827, "category_id": 27, "iscrowd": 0, "bbox": [468, 353, 94, 69], "area": 4525}, {"id": 7951929, "category_id": 31, "iscrowd": 0, "bbox": [444, 231, 53, 45], "area": 1727}, {"id": 11435842, "category_id": 44, "iscrowd": 0, "bbox": [287, 206, 14, 24], "area": 219}, {"id": 2584457, "category_id": 52, "iscrowd": 0, "bbox": [110, 248, 13, 13], "area": 103}, {"id": 607366, "category_id": 55, "iscrowd": 0, "bbox": [155, 229, 7, 7], "area": 35}, {"id": 1393272, "category_id": 55, "iscrowd": 0, "bbox": [163, 232, 4, 2], "area": 8}, {"id": 4933963, "category_id": 62, "iscrowd": 0, "bbox": [222, 221, 79, 127], "area": 5852}, {"id": 4670789, "category_id": 62, "iscrowd": 0, "bbox": [291, 202, 53, 124], "area": 2061}, {"id": 5730172, "category_id": 62, "iscrowd": 0, "bbox": [26, 284, 198, 134], "area": 18830}, {"id": 4940407, "category_id": 63, "iscrowd": 0, "bbox": [526, 190, 114, 229], "area": 17146}, {"id": 2239554, "category_id": 67, "iscrowd": 0, "bbox": [0, 367, 72, 57], "area": 2452}, {"id": 10656917, "category_id": 67, "iscrowd": 0, "bbox": [55, 223, 254, 121], "area": 7692}, {"id": 4473151, "category_id": 79, "iscrowd": 0, "bbox": [332, 206, 29, 55], "area": 902}, {"id": 5263438, "category_id": 79, "iscrowd": 0, "bbox": [131, 181, 29, 33], "area": 689}, {"id": 6710630, "category_id": 82, "iscrowd": 0, "bbox": [388, 122, 46, 148], "area": 2530}, {"id": 6448226, "category_id": 85, "iscrowd": 0, "bbox": [35, 151, 19, 27], "area": 404}, {"id": 4805478, "category_id": 86, "iscrowd": 0, "bbox": [89, 185, 8, 13], "area": 73}, {"id": 2304077, "category_id": 86, "iscrowd": 0, "bbox": [92, 202, 12, 17], "area": 118}, {"id": 2040378, "category_id": 86, "iscrowd": 0, "bbox": [82, 158, 13, 18], "area": 140}, {"id": 7170152, "category_id": 107, "iscrowd": 0, "bbox": [141, 238, 53, 24], "area": 739}, {"id": 9540756, "category_id": 112, "iscrowd": 0, "bbox": [560, 65, 50, 133], "area": 4029}, {"id": 5465475, "category_id": 118, "iscrowd": 0, "bbox": [120, 250, 449, 174], "area": 36637}, {"id": 11449781, "category_id": 130, "iscrowd": 0, "bbox": [231, 0, 75, 30], "area": 1270}, {"id": 10070442, "category_id": 151, "iscrowd": 0, "bbox": [143, 0, 75, 33], "area": 1023}, {"id": 15396072, "category_id": 181, "iscrowd": 0, "bbox": [32, 146, 318, 116], "area": 5162}, {"id": 9804445, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 512, 114], "area": 27249}, {"id": 8619140, "category_id": 188, "iscrowd": 0, "bbox": [48, 72, 450, 206], "area": 36226}, {"id": 9738650, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 296], "area": 73157}, {"id": 6253427, "category_id": 200, "iscrowd": 0, "bbox": [282, 251, 307, 173], "area": 7014}], "file_name": "000000441247.png", "image_id": 441247}, {"segments_info": [{"id": 4734514, "category_id": 1, "iscrowd": 0, "bbox": [229, 129, 124, 150], "area": 9572}, {"id": 14804451, "category_id": 42, "iscrowd": 0, "bbox": [226, 274, 79, 28], "area": 1553}, {"id": 10786415, "category_id": 155, "iscrowd": 0, "bbox": [0, 56, 640, 437], "area": 265696}, {"id": 12622709, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 72], "area": 38479}], "file_name": "000000441286.png", "image_id": 441286}, {"segments_info": [{"id": 5130566, "category_id": 1, "iscrowd": 0, "bbox": [252, 52, 74, 177], "area": 6983}, {"id": 8542497, "category_id": 1, "iscrowd": 0, "bbox": [2, 165, 29, 41], "area": 714}, {"id": 3951713, "category_id": 19, "iscrowd": 0, "bbox": [155, 140, 316, 174], "area": 22231}, {"id": 10854550, "category_id": 62, "iscrowd": 0, "bbox": [30, 182, 15, 23], "area": 219}, {"id": 4281932, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 600, 194], "area": 92745}, {"id": 12699583, "category_id": 185, "iscrowd": 0, "bbox": [0, 197, 600, 165], "area": 21666}, {"id": 4872037, "category_id": 189, "iscrowd": 0, "bbox": [0, 190, 31, 17], "area": 236}, {"id": 4879967, "category_id": 193, "iscrowd": 0, "bbox": [0, 74, 600, 326], "area": 94291}], "file_name": "000000441442.png", "image_id": 441442}, {"segments_info": [{"id": 4738632, "category_id": 1, "iscrowd": 0, "bbox": [192, 135, 4, 11], "area": 23}, {"id": 1448219, "category_id": 1, "iscrowd": 0, "bbox": [369, 124, 19, 59], "area": 745}, {"id": 3157546, "category_id": 1, "iscrowd": 0, "bbox": [307, 126, 6, 24], "area": 77}, {"id": 1843745, "category_id": 1, "iscrowd": 0, "bbox": [303, 128, 4, 20], "area": 49}, {"id": 4278084, "category_id": 1, "iscrowd": 0, "bbox": [162, 136, 3, 11], "area": 28}, {"id": 5723214, "category_id": 1, "iscrowd": 0, "bbox": [197, 134, 4, 11], "area": 30}, {"id": 2434597, "category_id": 1, "iscrowd": 0, "bbox": [285, 129, 6, 16], "area": 59}, {"id": 6187371, "category_id": 3, "iscrowd": 0, "bbox": [99, 137, 59, 46], "area": 1793}, {"id": 4408639, "category_id": 3, "iscrowd": 0, "bbox": [247, 128, 22, 22], "area": 327}, {"id": 3684663, "category_id": 3, "iscrowd": 0, "bbox": [210, 124, 43, 44], "area": 1370}, {"id": 2895956, "category_id": 11, "iscrowd": 0, "bbox": [246, 368, 107, 221], "area": 15621}, {"id": 9608351, "category_id": 149, "iscrowd": 0, "bbox": [0, 135, 291, 505], "area": 119392}, {"id": 6383192, "category_id": 184, "iscrowd": 0, "bbox": [0, 43, 87, 124], "area": 2316}, {"id": 15856112, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 291, 121], "area": 14575}, {"id": 6713977, "category_id": 191, "iscrowd": 0, "bbox": [219, 133, 207, 507], "area": 68439}, {"id": 6982790, "category_id": 193, "iscrowd": 0, "bbox": [0, 148, 38, 22], "area": 608}, {"id": 4081220, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 426, 211], "area": 46441}], "file_name": "000000441468.png", "image_id": 441468}, {"segments_info": [{"id": 5074296, "category_id": 1, "iscrowd": 0, "bbox": [324, 29, 209, 248], "area": 30333}, {"id": 7051165, "category_id": 1, "iscrowd": 0, "bbox": [398, 71, 242, 409], "area": 77206}, {"id": 6721944, "category_id": 1, "iscrowd": 0, "bbox": [2, 2, 383, 473], "area": 157096}, {"id": 3887952, "category_id": 47, "iscrowd": 0, "bbox": [347, 397, 81, 77], "area": 5029}, {"id": 5735061, "category_id": 59, "iscrowd": 0, "bbox": [287, 264, 137, 77], "area": 4723}, {"id": 1450274, "category_id": 130, "iscrowd": 0, "bbox": [449, 0, 55, 55], "area": 2008}], "file_name": "000000441491.png", "image_id": 441491}, {"segments_info": [{"id": 7636896, "category_id": 1, "iscrowd": 0, "bbox": [485, 236, 65, 99], "area": 2779}, {"id": 3627670, "category_id": 1, "iscrowd": 0, "bbox": [87, 238, 25, 23], "area": 381}, {"id": 3492747, "category_id": 1, "iscrowd": 0, "bbox": [579, 256, 41, 127], "area": 2424}, {"id": 4282752, "category_id": 1, "iscrowd": 0, "bbox": [514, 240, 79, 119], "area": 5371}, {"id": 3559536, "category_id": 1, "iscrowd": 0, "bbox": [519, 343, 97, 59], "area": 3743}, {"id": 3432854, "category_id": 1, "iscrowd": 0, "bbox": [451, 296, 69, 74], "area": 3340}, {"id": 2047650, "category_id": 1, "iscrowd": 0, "bbox": [217, 284, 135, 114], "area": 8554}, {"id": 5599855, "category_id": 1, "iscrowd": 0, "bbox": [399, 244, 69, 138], "area": 5353}, {"id": 4215424, "category_id": 1, "iscrowd": 0, "bbox": [138, 270, 103, 128], "area": 2351}, {"id": 7178162, "category_id": 1, "iscrowd": 0, "bbox": [485, 231, 36, 39], "area": 753}, {"id": 6391487, "category_id": 1, "iscrowd": 0, "bbox": [590, 236, 42, 84], "area": 1925}, {"id": 3293279, "category_id": 1, "iscrowd": 0, "bbox": [1, 219, 150, 178], "area": 21837}, {"id": 4419750, "category_id": 1, "iscrowd": 0, "bbox": [404, 355, 143, 43], "area": 4310}, {"id": 6116722, "category_id": 27, "iscrowd": 0, "bbox": [146, 308, 82, 95], "area": 6245}, {"id": 10006420, "category_id": 28, "iscrowd": 0, "bbox": [94, 65, 476, 317], "area": 76066}, {"id": 12832227, "category_id": 77, "iscrowd": 0, "bbox": [551, 273, 22, 20], "area": 107}, {"id": 3904640, "category_id": 92, "iscrowd": 0, "bbox": [284, 0, 24, 70], "area": 976}, {"id": 3755352, "category_id": 181, "iscrowd": 0, "bbox": [29, 0, 502, 33], "area": 3853}, {"id": 4608877, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 233], "area": 67242}], "file_name": "000000441543.png", "image_id": 441543}, {"segments_info": [{"id": 1581376, "category_id": 1, "iscrowd": 0, "bbox": [428, 270, 15, 32], "area": 257}, {"id": 1119261, "category_id": 1, "iscrowd": 0, "bbox": [399, 263, 41, 130], "area": 3403}, {"id": 3226956, "category_id": 1, "iscrowd": 0, "bbox": [338, 269, 47, 119], "area": 3186}, {"id": 594241, "category_id": 1, "iscrowd": 0, "bbox": [452, 265, 11, 13], "area": 74}, {"id": 660774, "category_id": 1, "iscrowd": 0, "bbox": [387, 262, 20, 62], "area": 561}, {"id": 462627, "category_id": 1, "iscrowd": 0, "bbox": [515, 264, 21, 35], "area": 499}, {"id": 1579037, "category_id": 1, "iscrowd": 0, "bbox": [160, 255, 52, 145], "area": 3891}, {"id": 395532, "category_id": 1, "iscrowd": 0, "bbox": [442, 276, 38, 125], "area": 3676}, {"id": 396049, "category_id": 1, "iscrowd": 0, "bbox": [555, 283, 64, 193], "area": 8953}, {"id": 1054500, "category_id": 1, "iscrowd": 0, "bbox": [517, 306, 45, 145], "area": 4227}, {"id": 1317150, "category_id": 1, "iscrowd": 0, "bbox": [264, 275, 51, 142], "area": 5728}, {"id": 2567749, "category_id": 1, "iscrowd": 0, "bbox": [264, 259, 26, 74], "area": 430}, {"id": 3161682, "category_id": 1, "iscrowd": 0, "bbox": [226, 259, 35, 131], "area": 3118}, {"id": 659224, "category_id": 1, "iscrowd": 1, "bbox": [279, 246, 295, 139], "area": 12808}, {"id": 3031904, "category_id": 7, "iscrowd": 0, "bbox": [5, 51, 326, 348], "area": 62449}, {"id": 3091610, "category_id": 10, "iscrowd": 0, "bbox": [515, 35, 33, 108], "area": 3327}, {"id": 5658099, "category_id": 10, "iscrowd": 0, "bbox": [460, 238, 9, 9], "area": 55}, {"id": 1782340, "category_id": 31, "iscrowd": 0, "bbox": [190, 278, 14, 34], "area": 205}, {"id": 4741012, "category_id": 130, "iscrowd": 0, "bbox": [360, 0, 166, 290], "area": 4412}, {"id": 658974, "category_id": 184, "iscrowd": 0, "bbox": [33, 18, 607, 255], "area": 8831}, {"id": 1908290, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 250], "area": 98836}, {"id": 3161156, "category_id": 191, "iscrowd": 0, "bbox": [0, 322, 640, 158], "area": 56144}, {"id": 1452354, "category_id": 199, "iscrowd": 0, "bbox": [482, 250, 158, 167], "area": 4439}], "file_name": "000000441553.png", "image_id": 441553}, {"segments_info": [{"id": 8949424, "category_id": 1, "iscrowd": 0, "bbox": [115, 115, 16, 22], "area": 132}, {"id": 6183579, "category_id": 1, "iscrowd": 0, "bbox": [100, 117, 16, 20], "area": 150}, {"id": 11845585, "category_id": 1, "iscrowd": 0, "bbox": [250, 116, 20, 51], "area": 532}, {"id": 6187664, "category_id": 1, "iscrowd": 0, "bbox": [396, 137, 35, 46], "area": 745}, {"id": 7494497, "category_id": 1, "iscrowd": 0, "bbox": [306, 18, 102, 254], "area": 13580}, {"id": 8094092, "category_id": 2, "iscrowd": 0, "bbox": [396, 146, 31, 78], "area": 1046}, {"id": 10396075, "category_id": 2, "iscrowd": 0, "bbox": [30, 152, 203, 135], "area": 11855}, {"id": 6381407, "category_id": 2, "iscrowd": 0, "bbox": [536, 158, 69, 45], "area": 1679}, {"id": 8287344, "category_id": 4, "iscrowd": 0, "bbox": [276, 136, 213, 268], "area": 24448}, {"id": 3288916, "category_id": 13, "iscrowd": 0, "bbox": [525, 74, 24, 23], "area": 442}, {"id": 11583188, "category_id": 154, "iscrowd": 0, "bbox": [0, 107, 640, 318], "area": 126227}, {"id": 4934735, "category_id": 166, "iscrowd": 0, "bbox": [394, 44, 246, 166], "area": 21338}, {"id": 12953753, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 141], "area": 58292}, {"id": 8945523, "category_id": 197, "iscrowd": 0, "bbox": [286, 79, 51, 82], "area": 2446}], "file_name": "000000441586.png", "image_id": 441586}, {"segments_info": [{"id": 6058631, "category_id": 44, "iscrowd": 0, "bbox": [0, 211, 14, 33], "area": 345}, {"id": 5073280, "category_id": 44, "iscrowd": 0, "bbox": [13, 182, 14, 26], "area": 242}, {"id": 9482691, "category_id": 81, "iscrowd": 0, "bbox": [579, 265, 21, 14], "area": 175}, {"id": 1715787, "category_id": 86, "iscrowd": 0, "bbox": [47, 306, 32, 63], "area": 1157}, {"id": 8035500, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 600, 216], "area": 31357}, {"id": 11913946, "category_id": 168, "iscrowd": 0, "bbox": [53, 181, 547, 218], "area": 15805}, {"id": 11316146, "category_id": 181, "iscrowd": 0, "bbox": [85, 5, 360, 245], "area": 72222}, {"id": 8494517, "category_id": 186, "iscrowd": 0, "bbox": [146, 0, 238, 31], "area": 4306}, {"id": 1396098, "category_id": 188, "iscrowd": 0, "bbox": [0, 241, 600, 158], "area": 27001}, {"id": 5337230, "category_id": 190, "iscrowd": 0, "bbox": [120, 291, 322, 108], "area": 17616}, {"id": 4021111, "category_id": 199, "iscrowd": 0, "bbox": [53, 0, 461, 334], "area": 38765}], "file_name": "000000442009.png", "image_id": 442009}, {"segments_info": [{"id": 2369335, "category_id": 1, "iscrowd": 0, "bbox": [169, 58, 158, 312], "area": 28801}, {"id": 2237999, "category_id": 1, "iscrowd": 0, "bbox": [313, 76, 160, 295], "area": 27540}, {"id": 1646379, "category_id": 1, "iscrowd": 0, "bbox": [437, 102, 63, 103], "area": 2888}, {"id": 10134707, "category_id": 1, "iscrowd": 0, "bbox": [0, 50, 234, 325], "area": 41418}, {"id": 3485007, "category_id": 31, "iscrowd": 0, "bbox": [168, 320, 52, 51], "area": 998}, {"id": 1843761, "category_id": 46, "iscrowd": 0, "bbox": [277, 139, 66, 94], "area": 1707}, {"id": 1777702, "category_id": 46, "iscrowd": 0, "bbox": [444, 154, 39, 83], "area": 1441}, {"id": 2567735, "category_id": 46, "iscrowd": 0, "bbox": [156, 146, 103, 121], "area": 3112}, {"id": 7378348, "category_id": 130, "iscrowd": 0, "bbox": [0, 8, 334, 145], "area": 946}, {"id": 989730, "category_id": 175, "iscrowd": 0, "bbox": [0, 52, 59, 100], "area": 2898}, {"id": 861504, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 436, 126], "area": 28862}, {"id": 527120, "category_id": 188, "iscrowd": 0, "bbox": [313, 117, 62, 79], "area": 2000}, {"id": 1582403, "category_id": 189, "iscrowd": 0, "bbox": [380, 226, 120, 149], "area": 9301}, {"id": 2107443, "category_id": 190, "iscrowd": 0, "bbox": [0, 254, 32, 121], "area": 1592}, {"id": 4415864, "category_id": 195, "iscrowd": 0, "bbox": [418, 277, 82, 55], "area": 1967}, {"id": 1057335, "category_id": 199, "iscrowd": 0, "bbox": [118, 0, 382, 299], "area": 22448}], "file_name": "000000442161.png", "image_id": 442161}, {"segments_info": [{"id": 9408928, "category_id": 1, "iscrowd": 0, "bbox": [250, 145, 167, 457], "area": 44559}, {"id": 3084559, "category_id": 28, "iscrowd": 0, "bbox": [82, 79, 379, 283], "area": 47209}, {"id": 4746318, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 547], "area": 237599}, {"id": 3948893, "category_id": 194, "iscrowd": 0, "bbox": [0, 460, 640, 180], "area": 78896}], "file_name": "000000442306.png", "image_id": 442306}, {"segments_info": [{"id": 1449501, "category_id": 33, "iscrowd": 0, "bbox": [1, 323, 35, 151], "area": 3924}, {"id": 1516062, "category_id": 62, "iscrowd": 0, "bbox": [443, 217, 150, 157], "area": 8873}, {"id": 6648960, "category_id": 65, "iscrowd": 0, "bbox": [437, 385, 203, 95], "area": 9225}, {"id": 2501418, "category_id": 72, "iscrowd": 0, "bbox": [216, 150, 158, 148], "area": 19578}, {"id": 1581094, "category_id": 75, "iscrowd": 0, "bbox": [211, 292, 27, 15], "area": 229}, {"id": 3098441, "category_id": 109, "iscrowd": 0, "bbox": [591, 51, 49, 308], "area": 8196}, {"id": 6270659, "category_id": 130, "iscrowd": 0, "bbox": [18, 0, 523, 218], "area": 9501}, {"id": 1389667, "category_id": 188, "iscrowd": 0, "bbox": [28, 267, 370, 213], "area": 61176}, {"id": 1652315, "category_id": 189, "iscrowd": 0, "bbox": [385, 197, 197, 145], "area": 7580}, {"id": 1120278, "category_id": 190, "iscrowd": 0, "bbox": [171, 288, 469, 192], "area": 37012}, {"id": 8036530, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 383], "area": 139777}], "file_name": "000000442323.png", "image_id": 442323}, {"segments_info": [{"id": 1644363, "category_id": 1, "iscrowd": 0, "bbox": [113, 34, 118, 250], "area": 14185}, {"id": 7048090, "category_id": 1, "iscrowd": 0, "bbox": [608, 20, 32, 109], "area": 1975}, {"id": 9736838, "category_id": 3, "iscrowd": 0, "bbox": [210, 70, 409, 177], "area": 51218}, {"id": 3551530, "category_id": 3, "iscrowd": 0, "bbox": [2, 93, 210, 116], "area": 8549}, {"id": 6380367, "category_id": 3, "iscrowd": 0, "bbox": [2, 45, 202, 58], "area": 6477}, {"id": 2893345, "category_id": 3, "iscrowd": 0, "bbox": [0, 41, 35, 17], "area": 411}, {"id": 10989747, "category_id": 31, "iscrowd": 0, "bbox": [606, 33, 15, 23], "area": 203}, {"id": 1710628, "category_id": 77, "iscrowd": 0, "bbox": [159, 115, 8, 4], "area": 20}, {"id": 4278098, "category_id": 100, "iscrowd": 0, "bbox": [283, 27, 20, 50], "area": 662}, {"id": 9146772, "category_id": 191, "iscrowd": 0, "bbox": [0, 59, 640, 297], "area": 85159}, {"id": 9213593, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 50], "area": 17029}], "file_name": "000000442456.png", "image_id": 442456}, {"segments_info": [{"id": 3751758, "category_id": 1, "iscrowd": 0, "bbox": [206, 243, 174, 221], "area": 15575}, {"id": 6776427, "category_id": 41, "iscrowd": 0, "bbox": [215, 447, 161, 41], "area": 1874}, {"id": 11183523, "category_id": 128, "iscrowd": 0, "bbox": [249, 231, 21, 22], "area": 308}, {"id": 6450015, "category_id": 184, "iscrowd": 0, "bbox": [0, 87, 480, 188], "area": 33185}, {"id": 7634549, "category_id": 185, "iscrowd": 0, "bbox": [0, 239, 261, 39], "area": 3378}, {"id": 16447993, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 240], "area": 76756}, {"id": 15856113, "category_id": 191, "iscrowd": 0, "bbox": [0, 378, 480, 262], "area": 112702}, {"id": 3647871, "category_id": 193, "iscrowd": 0, "bbox": [0, 269, 480, 127], "area": 44611}, {"id": 6908509, "category_id": 197, "iscrowd": 0, "bbox": [125, 0, 327, 271], "area": 9283}], "file_name": "000000442463.png", "image_id": 442463}, {"segments_info": [{"id": 3826816, "category_id": 1, "iscrowd": 0, "bbox": [257, 240, 14, 28], "area": 276}, {"id": 9160423, "category_id": 1, "iscrowd": 0, "bbox": [305, 213, 17, 36], "area": 411}, {"id": 5074825, "category_id": 5, "iscrowd": 0, "bbox": [64, 170, 556, 90], "area": 16897}, {"id": 4221065, "category_id": 8, "iscrowd": 0, "bbox": [49, 223, 93, 49], "area": 3287}, {"id": 1512986, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 241], "area": 128771}, {"id": 2242134, "category_id": 191, "iscrowd": 0, "bbox": [0, 228, 640, 197], "area": 113666}, {"id": 5596273, "category_id": 197, "iscrowd": 0, "bbox": [0, 207, 640, 55], "area": 8029}], "file_name": "000000442480.png", "image_id": 442480}, {"segments_info": [{"id": 2635876, "category_id": 25, "iscrowd": 0, "bbox": [109, 126, 255, 354], "area": 40476}, {"id": 9735037, "category_id": 181, "iscrowd": 0, "bbox": [38, 0, 570, 480], "area": 78724}, {"id": 3092270, "category_id": 184, "iscrowd": 0, "bbox": [0, 66, 574, 414], "area": 52921}, {"id": 16513785, "category_id": 187, "iscrowd": 0, "bbox": [311, 73, 210, 324], "area": 15287}, {"id": 10000274, "category_id": 197, "iscrowd": 0, "bbox": [73, 125, 503, 355], "area": 61106}, {"id": 1842976, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 57572}], "file_name": "000000442661.png", "image_id": 442661}, {"segments_info": [{"id": 6776160, "category_id": 1, "iscrowd": 0, "bbox": [182, 105, 48, 123], "area": 2440}, {"id": 4535122, "category_id": 3, "iscrowd": 0, "bbox": [312, 131, 52, 20], "area": 590}, {"id": 8424589, "category_id": 10, "iscrowd": 0, "bbox": [15, 98, 6, 9], "area": 42}, {"id": 10788252, "category_id": 10, "iscrowd": 0, "bbox": [62, 100, 4, 12], "area": 48}, {"id": 12301232, "category_id": 10, "iscrowd": 0, "bbox": [44, 68, 5, 11], "area": 38}, {"id": 4172141, "category_id": 34, "iscrowd": 0, "bbox": [223, 133, 16, 8], "area": 69}, {"id": 11576980, "category_id": 128, "iscrowd": 0, "bbox": [124, 64, 62, 53], "area": 2301}, {"id": 11709102, "category_id": 149, "iscrowd": 0, "bbox": [0, 109, 500, 57], "area": 2861}, {"id": 7756361, "category_id": 171, "iscrowd": 0, "bbox": [97, 101, 153, 28], "area": 1727}, {"id": 4280385, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 162], "area": 52722}, {"id": 15789546, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 369, 57], "area": 4114}, {"id": 4160625, "category_id": 193, "iscrowd": 0, "bbox": [0, 113, 500, 262], "area": 117380}, {"id": 7493448, "category_id": 199, "iscrowd": 0, "bbox": [120, 107, 380, 40], "area": 3044}], "file_name": "000000442746.png", "image_id": 442746}, {"segments_info": [{"id": 10329500, "category_id": 9, "iscrowd": 0, "bbox": [485, 141, 148, 54], "area": 3756}, {"id": 9737622, "category_id": 9, "iscrowd": 0, "bbox": [134, 108, 63, 32], "area": 1303}, {"id": 9208957, "category_id": 9, "iscrowd": 0, "bbox": [441, 150, 142, 54], "area": 2599}, {"id": 9408142, "category_id": 9, "iscrowd": 0, "bbox": [177, 102, 51, 34], "area": 978}, {"id": 10198429, "category_id": 9, "iscrowd": 0, "bbox": [63, 206, 315, 170], "area": 36378}, {"id": 7302776, "category_id": 9, "iscrowd": 0, "bbox": [396, 159, 137, 61], "area": 4019}, {"id": 10724257, "category_id": 9, "iscrowd": 0, "bbox": [345, 135, 128, 27], "area": 1232}, {"id": 8815491, "category_id": 9, "iscrowd": 0, "bbox": [18, 101, 90, 47], "area": 2347}, {"id": 8159102, "category_id": 9, "iscrowd": 0, "bbox": [276, 186, 148, 72], "area": 6413}, {"id": 10922925, "category_id": 9, "iscrowd": 0, "bbox": [213, 136, 146, 40], "area": 2816}, {"id": 9475994, "category_id": 9, "iscrowd": 0, "bbox": [293, 131, 113, 39], "area": 2407}, {"id": 9407625, "category_id": 9, "iscrowd": 0, "bbox": [120, 164, 124, 59], "area": 4606}, {"id": 8684677, "category_id": 9, "iscrowd": 0, "bbox": [168, 135, 147, 82], "area": 4698}, {"id": 8159622, "category_id": 9, "iscrowd": 0, "bbox": [368, 184, 111, 55], "area": 3373}, {"id": 7303536, "category_id": 9, "iscrowd": 1, "bbox": [0, 0, 624, 253], "area": 19194}, {"id": 5987677, "category_id": 95, "iscrowd": 0, "bbox": [0, 189, 288, 117], "area": 4162}, {"id": 6053215, "category_id": 128, "iscrowd": 0, "bbox": [51, 21, 567, 58], "area": 3833}, {"id": 6515049, "category_id": 148, "iscrowd": 0, "bbox": [0, 68, 640, 359], "area": 119699}, {"id": 4408896, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 90], "area": 19541}, {"id": 14539738, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 56], "area": 22458}, {"id": 4870736, "category_id": 191, "iscrowd": 0, "bbox": [474, 69, 20, 22], "area": 262}, {"id": 4541511, "category_id": 193, "iscrowd": 0, "bbox": [121, 64, 519, 46], "area": 5354}], "file_name": "000000442822.png", "image_id": 442822}, {"segments_info": [{"id": 14010301, "category_id": 1, "iscrowd": 0, "bbox": [136, 37, 121, 381], "area": 15400}, {"id": 6775738, "category_id": 1, "iscrowd": 0, "bbox": [47, 151, 69, 198], "area": 8251}, {"id": 11975095, "category_id": 1, "iscrowd": 0, "bbox": [301, 143, 149, 268], "area": 15992}, {"id": 16185839, "category_id": 34, "iscrowd": 0, "bbox": [407, 271, 44, 45], "area": 1191}, {"id": 5800546, "category_id": 119, "iscrowd": 0, "bbox": [106, 209, 36, 52], "area": 863}, {"id": 2637096, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 280], "area": 143571}, {"id": 10603703, "category_id": 193, "iscrowd": 0, "bbox": [0, 235, 640, 222], "area": 106587}], "file_name": "000000442836.png", "image_id": 442836}, {"segments_info": [{"id": 1200241, "category_id": 9, "iscrowd": 0, "bbox": [238, 494, 67, 12], "area": 404}, {"id": 1260373, "category_id": 9, "iscrowd": 0, "bbox": [293, 511, 74, 10], "area": 323}, {"id": 732507, "category_id": 9, "iscrowd": 0, "bbox": [229, 470, 73, 13], "area": 631}, {"id": 1648171, "category_id": 9, "iscrowd": 0, "bbox": [305, 483, 64, 8], "area": 260}, {"id": 1992070, "category_id": 9, "iscrowd": 0, "bbox": [241, 480, 65, 14], "area": 470}, {"id": 1195347, "category_id": 64, "iscrowd": 0, "bbox": [364, 313, 7, 13], "area": 63}, {"id": 1128017, "category_id": 64, "iscrowd": 0, "bbox": [362, 260, 8, 10], "area": 51}, {"id": 3038586, "category_id": 64, "iscrowd": 0, "bbox": [178, 308, 34, 14], "area": 422}, {"id": 1392468, "category_id": 64, "iscrowd": 0, "bbox": [340, 314, 21, 16], "area": 261}, {"id": 1126986, "category_id": 64, "iscrowd": 0, "bbox": [333, 262, 9, 9], "area": 54}, {"id": 1918555, "category_id": 64, "iscrowd": 0, "bbox": [245, 313, 22, 16], "area": 272}, {"id": 1519934, "category_id": 64, "iscrowd": 0, "bbox": [29, 255, 9, 15], "area": 107}, {"id": 1451831, "category_id": 64, "iscrowd": 0, "bbox": [28, 332, 15, 15], "area": 170}, {"id": 1326933, "category_id": 64, "iscrowd": 0, "bbox": [343, 263, 6, 8], "area": 34}, {"id": 10266552, "category_id": 85, "iscrowd": 0, "bbox": [136, 140, 19, 16], "area": 230}, {"id": 1258309, "category_id": 144, "iscrowd": 0, "bbox": [221, 506, 192, 55], "area": 3903}, {"id": 1253416, "category_id": 151, "iscrowd": 0, "bbox": [0, 84, 427, 171], "area": 32572}, {"id": 991014, "category_id": 178, "iscrowd": 0, "bbox": [0, 522, 427, 118], "area": 41468}, {"id": 927790, "category_id": 184, "iscrowd": 0, "bbox": [0, 353, 224, 196], "area": 27766}, {"id": 2433826, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 207], "area": 54473}, {"id": 2973559, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 427, 532], "area": 99401}], "file_name": "000000442993.png", "image_id": 442993}, {"segments_info": [{"id": 6057123, "category_id": 17, "iscrowd": 0, "bbox": [193, 98, 307, 219], "area": 44117}, {"id": 2432804, "category_id": 33, "iscrowd": 0, "bbox": [0, 68, 500, 307], "area": 73522}, {"id": 5921892, "category_id": 84, "iscrowd": 0, "bbox": [370, 1, 91, 32], "area": 1834}, {"id": 9276301, "category_id": 93, "iscrowd": 0, "bbox": [0, 30, 500, 345], "area": 28913}, {"id": 5726330, "category_id": 100, "iscrowd": 0, "bbox": [307, 69, 102, 59], "area": 3778}, {"id": 1842995, "category_id": 188, "iscrowd": 0, "bbox": [450, 0, 50, 98], "area": 2732}, {"id": 7567486, "category_id": 189, "iscrowd": 0, "bbox": [292, 0, 199, 82], "area": 8649}, {"id": 9673882, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 294, 134], "area": 23094}], "file_name": "000000443303.png", "image_id": 443303}, {"segments_info": [{"id": 8223876, "category_id": 1, "iscrowd": 0, "bbox": [20, 203, 460, 429], "area": 99054}, {"id": 6775136, "category_id": 32, "iscrowd": 0, "bbox": [193, 371, 141, 134], "area": 2251}, {"id": 1578517, "category_id": 62, "iscrowd": 0, "bbox": [91, 604, 185, 36], "area": 3842}, {"id": 6976375, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 523], "area": 68883}], "file_name": "000000443426.png", "image_id": 443426}, {"segments_info": [{"id": 2829099, "category_id": 6, "iscrowd": 0, "bbox": [185, 119, 285, 265], "area": 63339}, {"id": 5395026, "category_id": 130, "iscrowd": 0, "bbox": [568, 157, 29, 31], "area": 558}, {"id": 5197647, "category_id": 149, "iscrowd": 0, "bbox": [0, 252, 640, 226], "area": 101566}, {"id": 5526612, "category_id": 186, "iscrowd": 0, "bbox": [51, 0, 547, 152], "area": 51850}, {"id": 1118481, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 309], "area": 50599}, {"id": 4210752, "category_id": 199, "iscrowd": 0, "bbox": [0, 34, 210, 258], "area": 35964}], "file_name": "000000443498.png", "image_id": 443498}, {"segments_info": [{"id": 5724000, "category_id": 1, "iscrowd": 0, "bbox": [471, 47, 101, 243], "area": 10470}, {"id": 6257291, "category_id": 15, "iscrowd": 0, "bbox": [347, 248, 163, 123], "area": 9507}, {"id": 2635087, "category_id": 41, "iscrowd": 0, "bbox": [486, 269, 66, 34], "area": 816}, {"id": 9745867, "category_id": 112, "iscrowd": 0, "bbox": [472, 105, 54, 200], "area": 1922}, {"id": 5005934, "category_id": 191, "iscrowd": 0, "bbox": [0, 267, 640, 162], "area": 53657}, {"id": 7313851, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 413], "area": 193131}], "file_name": "000000443844.png", "image_id": 443844}, {"segments_info": [{"id": 8221336, "category_id": 1, "iscrowd": 0, "bbox": [181, 8, 306, 262], "area": 12496}, {"id": 7562604, "category_id": 1, "iscrowd": 0, "bbox": [68, 47, 89, 226], "area": 8487}, {"id": 9802662, "category_id": 1, "iscrowd": 0, "bbox": [182, 83, 13, 40], "area": 327}, {"id": 8549794, "category_id": 1, "iscrowd": 0, "bbox": [242, 107, 130, 309], "area": 25724}, {"id": 10269141, "category_id": 1, "iscrowd": 0, "bbox": [119, 86, 18, 49], "area": 362}, {"id": 5260606, "category_id": 1, "iscrowd": 0, "bbox": [0, 110, 132, 470], "area": 27669}, {"id": 9669321, "category_id": 28, "iscrowd": 0, "bbox": [182, 30, 294, 119], "area": 20453}, {"id": 4996415, "category_id": 95, "iscrowd": 0, "bbox": [390, 10, 222, 33], "area": 2636}, {"id": 7625797, "category_id": 149, "iscrowd": 0, "bbox": [0, 178, 612, 434], "area": 92722}, {"id": 5061928, "category_id": 184, "iscrowd": 0, "bbox": [341, 0, 271, 191], "area": 21030}, {"id": 7697533, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 612, 343], "area": 62035}], "file_name": "000000443969.png", "image_id": 443969}, {"segments_info": [{"id": 4939651, "category_id": 1, "iscrowd": 0, "bbox": [84, 35, 184, 553], "area": 46268}, {"id": 3227206, "category_id": 43, "iscrowd": 0, "bbox": [105, 34, 70, 147], "area": 5739}, {"id": 1184539, "category_id": 62, "iscrowd": 0, "bbox": [349, 24, 49, 24], "area": 958}, {"id": 1514274, "category_id": 62, "iscrowd": 0, "bbox": [304, 68, 49, 24], "area": 1022}, {"id": 1580067, "category_id": 62, "iscrowd": 0, "bbox": [344, 87, 57, 27], "area": 1159}, {"id": 1448225, "category_id": 62, "iscrowd": 0, "bbox": [369, 63, 50, 24], "area": 1038}, {"id": 1382432, "category_id": 62, "iscrowd": 0, "bbox": [284, 25, 53, 26], "area": 1095}, {"id": 1315868, "category_id": 62, "iscrowd": 0, "bbox": [390, 40, 37, 43], "area": 931}, {"id": 1646118, "category_id": 62, "iscrowd": 0, "bbox": [326, 113, 52, 26], "area": 1115}, {"id": 1710109, "category_id": 62, "iscrowd": 0, "bbox": [356, 129, 69, 71], "area": 3765}, {"id": 1974056, "category_id": 62, "iscrowd": 0, "bbox": [410, 161, 17, 33], "area": 442}, {"id": 1711400, "category_id": 62, "iscrowd": 0, "bbox": [391, 106, 36, 28], "area": 806}, {"id": 1316123, "category_id": 62, "iscrowd": 0, "bbox": [328, 47, 48, 39], "area": 1181}, {"id": 5130798, "category_id": 92, "iscrowd": 0, "bbox": [0, 198, 427, 208], "area": 49475}, {"id": 1446421, "category_id": 109, "iscrowd": 0, "bbox": [0, 117, 207, 171], "area": 22443}, {"id": 10530980, "category_id": 145, "iscrowd": 0, "bbox": [0, 391, 427, 249], "area": 86829}, {"id": 5067604, "category_id": 161, "iscrowd": 0, "bbox": [189, 65, 18, 59], "area": 696}, {"id": 2434346, "category_id": 199, "iscrowd": 0, "bbox": [18, 0, 276, 68], "area": 6699}], "file_name": "000000444142.png", "image_id": 444142}, {"segments_info": [{"id": 7566961, "category_id": 78, "iscrowd": 0, "bbox": [348, 172, 146, 77], "area": 10973}, {"id": 4481103, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 256], "area": 131806}, {"id": 8357517, "category_id": 191, "iscrowd": 0, "bbox": [0, 217, 640, 263], "area": 152037}], "file_name": "000000444275.png", "image_id": 444275}, {"segments_info": [{"id": 6454623, "category_id": 7, "iscrowd": 0, "bbox": [188, 183, 241, 179], "area": 34531}, {"id": 7509102, "category_id": 125, "iscrowd": 0, "bbox": [121, 255, 510, 224], "area": 29278}, {"id": 6589279, "category_id": 144, "iscrowd": 0, "bbox": [0, 303, 640, 176], "area": 47045}, {"id": 4480832, "category_id": 147, "iscrowd": 0, "bbox": [30, 248, 610, 231], "area": 29942}, {"id": 5272652, "category_id": 171, "iscrowd": 0, "bbox": [573, 218, 67, 40], "area": 1498}, {"id": 10008468, "category_id": 184, "iscrowd": 0, "bbox": [0, 176, 640, 133], "area": 24502}, {"id": 3757366, "category_id": 185, "iscrowd": 0, "bbox": [424, 247, 216, 81], "area": 11916}, {"id": 16251127, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 218], "area": 124488}], "file_name": "000000444879.png", "image_id": 444879}, {"segments_info": [{"id": 7375010, "category_id": 22, "iscrowd": 0, "bbox": [307, 100, 138, 287], "area": 26692}, {"id": 6584978, "category_id": 22, "iscrowd": 0, "bbox": [334, 52, 263, 267], "area": 38696}, {"id": 7639468, "category_id": 22, "iscrowd": 0, "bbox": [34, 72, 314, 244], "area": 49254}, {"id": 12046306, "category_id": 154, "iscrowd": 0, "bbox": [0, 186, 640, 241], "area": 95511}, {"id": 8034994, "category_id": 194, "iscrowd": 0, "bbox": [590, 132, 50, 74], "area": 2631}, {"id": 10465213, "category_id": 197, "iscrowd": 0, "bbox": [186, 0, 454, 155], "area": 33958}], "file_name": "000000445248.png", "image_id": 445248}, {"segments_info": [{"id": 6324881, "category_id": 25, "iscrowd": 0, "bbox": [31, 247, 200, 393], "area": 33111}, {"id": 4679030, "category_id": 25, "iscrowd": 0, "bbox": [187, 116, 240, 514], "area": 49512}, {"id": 4492672, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 187248}], "file_name": "000000445365.png", "image_id": 445365}, {"segments_info": [{"id": 8350830, "category_id": 24, "iscrowd": 0, "bbox": [0, 0, 506, 425], "area": 128819}, {"id": 8878970, "category_id": 193, "iscrowd": 0, "bbox": [66, 0, 574, 425], "area": 109660}], "file_name": "000000445439.png", "image_id": 445439}, {"segments_info": [{"id": 7430996, "category_id": 1, "iscrowd": 0, "bbox": [359, 314, 77, 134], "area": 5234}, {"id": 5259319, "category_id": 1, "iscrowd": 0, "bbox": [39, 264, 8, 16], "area": 77}, {"id": 3942954, "category_id": 1, "iscrowd": 0, "bbox": [217, 233, 4, 8], "area": 21}, {"id": 5194037, "category_id": 1, "iscrowd": 0, "bbox": [198, 233, 5, 8], "area": 22}, {"id": 4338219, "category_id": 1, "iscrowd": 0, "bbox": [68, 265, 8, 15], "area": 64}, {"id": 6508350, "category_id": 1, "iscrowd": 0, "bbox": [218, 227, 3, 7], "area": 14}, {"id": 9270622, "category_id": 35, "iscrowd": 0, "bbox": [331, 436, 149, 12], "area": 251}, {"id": 3289130, "category_id": 128, "iscrowd": 0, "bbox": [0, 158, 165, 85], "area": 5108}, {"id": 9665637, "category_id": 151, "iscrowd": 0, "bbox": [0, 142, 146, 74], "area": 2788}, {"id": 12691859, "category_id": 159, "iscrowd": 0, "bbox": [0, 90, 640, 390], "area": 155118}, {"id": 3748908, "category_id": 184, "iscrowd": 0, "bbox": [0, 86, 640, 171], "area": 66079}, {"id": 16513785, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 163], "area": 67756}, {"id": 3882585, "category_id": 197, "iscrowd": 0, "bbox": [556, 269, 84, 103], "area": 4485}], "file_name": "000000445602.png", "image_id": 445602}, {"segments_info": [{"id": 4148830, "category_id": 44, "iscrowd": 0, "bbox": [306, 175, 13, 44], "area": 434}, {"id": 11315374, "category_id": 44, "iscrowd": 0, "bbox": [337, 191, 13, 25], "area": 256}, {"id": 8095896, "category_id": 44, "iscrowd": 0, "bbox": [100, 195, 30, 36], "area": 911}, {"id": 4872854, "category_id": 44, "iscrowd": 0, "bbox": [319, 194, 18, 30], "area": 473}, {"id": 3886179, "category_id": 51, "iscrowd": 0, "bbox": [282, 210, 25, 14], "area": 273}, {"id": 1052480, "category_id": 51, "iscrowd": 0, "bbox": [535, 208, 66, 38], "area": 1964}, {"id": 2369069, "category_id": 78, "iscrowd": 0, "bbox": [606, 182, 34, 63], "area": 1947}, {"id": 3951700, "category_id": 79, "iscrowd": 0, "bbox": [138, 182, 155, 217], "area": 28626}, {"id": 5526615, "category_id": 81, "iscrowd": 0, "bbox": [450, 217, 30, 12], "area": 255}, {"id": 6051931, "category_id": 81, "iscrowd": 0, "bbox": [480, 217, 65, 19], "area": 883}, {"id": 8492706, "category_id": 82, "iscrowd": 0, "bbox": [0, 76, 49, 338], "area": 14237}, {"id": 7051722, "category_id": 88, "iscrowd": 0, "bbox": [168, 158, 26, 30], "area": 544}, {"id": 5729672, "category_id": 176, "iscrowd": 0, "bbox": [12, 47, 628, 176], "area": 39200}, {"id": 5339296, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 129983}, {"id": 6585501, "category_id": 190, "iscrowd": 0, "bbox": [0, 359, 517, 68], "area": 19071}, {"id": 8559279, "category_id": 199, "iscrowd": 0, "bbox": [77, 0, 478, 55], "area": 11370}], "file_name": "000000445658.png", "image_id": 445658}, {"segments_info": [{"id": 7961727, "category_id": 25, "iscrowd": 0, "bbox": [155, 107, 180, 418], "area": 24726}, {"id": 5659480, "category_id": 178, "iscrowd": 0, "bbox": [0, 232, 480, 226], "area": 74888}, {"id": 8354422, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 153], "area": 59401}, {"id": 9409427, "category_id": 193, "iscrowd": 0, "bbox": [0, 92, 480, 180], "area": 55446}, {"id": 10592929, "category_id": 194, "iscrowd": 0, "bbox": [0, 426, 480, 214], "area": 92338}], "file_name": "000000445675.png", "image_id": 445675}, {"segments_info": [{"id": 2109787, "category_id": 1, "iscrowd": 0, "bbox": [230, 143, 83, 318], "area": 16343}, {"id": 4284325, "category_id": 1, "iscrowd": 0, "bbox": [146, 223, 25, 59], "area": 776}, {"id": 4479866, "category_id": 9, "iscrowd": 0, "bbox": [5, 1, 313, 494], "area": 123673}, {"id": 6188422, "category_id": 27, "iscrowd": 0, "bbox": [141, 330, 78, 56], "area": 3304}, {"id": 858416, "category_id": 33, "iscrowd": 0, "bbox": [43, 406, 77, 52], "area": 2634}, {"id": 2966887, "category_id": 33, "iscrowd": 0, "bbox": [111, 390, 131, 69], "area": 6703}], "file_name": "000000445722.png", "image_id": 445722}, {"segments_info": [{"id": 7894910, "category_id": 1, "iscrowd": 0, "bbox": [32, 47, 468, 328], "area": 94566}, {"id": 11848153, "category_id": 63, "iscrowd": 0, "bbox": [25, 84, 424, 287], "area": 10702}, {"id": 7050175, "category_id": 63, "iscrowd": 0, "bbox": [388, 27, 112, 204], "area": 9739}, {"id": 2835540, "category_id": 64, "iscrowd": 0, "bbox": [0, 187, 48, 188], "area": 2327}, {"id": 14277857, "category_id": 75, "iscrowd": 0, "bbox": [243, 59, 42, 40], "area": 851}, {"id": 15333116, "category_id": 75, "iscrowd": 0, "bbox": [357, 20, 31, 64], "area": 803}, {"id": 5596026, "category_id": 77, "iscrowd": 0, "bbox": [445, 151, 49, 38], "area": 531}, {"id": 10670822, "category_id": 130, "iscrowd": 0, "bbox": [260, 0, 175, 120], "area": 5867}, {"id": 9481164, "category_id": 141, "iscrowd": 0, "bbox": [386, 109, 49, 98], "area": 135}, {"id": 5210264, "category_id": 184, "iscrowd": 0, "bbox": [0, 188, 13, 28], "area": 125}, {"id": 9415361, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 323], "area": 52040}], "file_name": "000000445792.png", "image_id": 445792}, {"segments_info": [{"id": 9261350, "category_id": 1, "iscrowd": 0, "bbox": [357, 135, 68, 92], "area": 3967}, {"id": 7355431, "category_id": 1, "iscrowd": 0, "bbox": [544, 191, 62, 225], "area": 7975}, {"id": 10310434, "category_id": 1, "iscrowd": 0, "bbox": [282, 90, 89, 98], "area": 5205}, {"id": 6699041, "category_id": 1, "iscrowd": 0, "bbox": [424, 181, 93, 235], "area": 12427}, {"id": 7564130, "category_id": 6, "iscrowd": 0, "bbox": [157, 17, 398, 361], "area": 94216}, {"id": 14936816, "category_id": 128, "iscrowd": 0, "bbox": [553, 168, 87, 74], "area": 4424}, {"id": 4668980, "category_id": 149, "iscrowd": 0, "bbox": [0, 222, 640, 205], "area": 54398}, {"id": 16711422, "category_id": 187, "iscrowd": 0, "bbox": [387, 0, 253, 171], "area": 25005}], "file_name": "000000445834.png", "image_id": 445834}, {"segments_info": [{"id": 10072251, "category_id": 78, "iscrowd": 0, "bbox": [64, 170, 30, 44], "area": 1233}, {"id": 8620685, "category_id": 79, "iscrowd": 0, "bbox": [62, 253, 103, 155], "area": 4193}, {"id": 9805727, "category_id": 81, "iscrowd": 0, "bbox": [296, 267, 100, 5], "area": 443}, {"id": 6257797, "category_id": 82, "iscrowd": 0, "bbox": [568, 119, 70, 303], "area": 18768}, {"id": 10401983, "category_id": 112, "iscrowd": 0, "bbox": [575, 120, 21, 67], "area": 668}, {"id": 6587536, "category_id": 176, "iscrowd": 0, "bbox": [0, 213, 468, 76], "area": 11684}, {"id": 8036519, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 375], "area": 96188}, {"id": 12636627, "category_id": 181, "iscrowd": 0, "bbox": [200, 16, 194, 242], "area": 42972}, {"id": 2444906, "category_id": 188, "iscrowd": 0, "bbox": [0, 164, 580, 263], "area": 59659}, {"id": 5662573, "category_id": 190, "iscrowd": 0, "bbox": [112, 357, 420, 70], "area": 17494}, {"id": 7768975, "category_id": 195, "iscrowd": 0, "bbox": [390, 185, 188, 73], "area": 4361}, {"id": 11122362, "category_id": 199, "iscrowd": 0, "bbox": [61, 214, 32, 42], "area": 898}], "file_name": "000000445846.png", "image_id": 445846}, {"segments_info": [{"id": 7171437, "category_id": 1, "iscrowd": 0, "bbox": [0, 16, 410, 617], "area": 216894}, {"id": 15329769, "category_id": 90, "iscrowd": 0, "bbox": [140, 366, 39, 54], "area": 1031}, {"id": 10066329, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 411, 65], "area": 17530}, {"id": 12763842, "category_id": 199, "iscrowd": 0, "bbox": [0, 45, 411, 381], "area": 23891}], "file_name": "000000445999.png", "image_id": 445999}, {"segments_info": [{"id": 4148041, "category_id": 78, "iscrowd": 0, "bbox": [313, 92, 94, 59], "area": 5029}, {"id": 3356974, "category_id": 79, "iscrowd": 0, "bbox": [302, 170, 109, 159], "area": 13690}, {"id": 8421760, "category_id": 81, "iscrowd": 0, "bbox": [52, 200, 120, 22], "area": 1097}, {"id": 10591885, "category_id": 84, "iscrowd": 0, "bbox": [243, 193, 32, 10], "area": 287}, {"id": 12432562, "category_id": 84, "iscrowd": 0, "bbox": [275, 197, 33, 5], "area": 143}, {"id": 2895661, "category_id": 107, "iscrowd": 0, "bbox": [0, 181, 500, 68], "area": 10160}, {"id": 15660013, "category_id": 181, "iscrowd": 0, "bbox": [14, 61, 135, 129], "area": 13440}, {"id": 11120049, "category_id": 186, "iscrowd": 0, "bbox": [122, 0, 214, 30], "area": 3576}, {"id": 2968966, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 500, 333], "area": 73165}, {"id": 6319748, "category_id": 190, "iscrowd": 0, "bbox": [111, 288, 313, 45], "area": 6865}, {"id": 10664130, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 209], "area": 28602}], "file_name": "000000446005.png", "image_id": 446005}, {"segments_info": [{"id": 9408912, "category_id": 15, "iscrowd": 0, "bbox": [2, 9, 638, 416], "area": 206179}, {"id": 1278452, "category_id": 55, "iscrowd": 0, "bbox": [251, 149, 132, 114], "area": 11747}, {"id": 10525069, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 53400}], "file_name": "000000446117.png", "image_id": 446117}, {"segments_info": [{"id": 1251103, "category_id": 1, "iscrowd": 0, "bbox": [354, 362, 13, 23], "area": 189}, {"id": 986412, "category_id": 1, "iscrowd": 0, "bbox": [133, 326, 8, 11], "area": 59}, {"id": 592906, "category_id": 1, "iscrowd": 0, "bbox": [151, 321, 9, 14], "area": 94}, {"id": 460551, "category_id": 1, "iscrowd": 0, "bbox": [144, 321, 7, 15], "area": 72}, {"id": 5264225, "category_id": 6, "iscrowd": 0, "bbox": [13, 274, 174, 97], "area": 11533}, {"id": 7236991, "category_id": 7, "iscrowd": 0, "bbox": [121, 156, 512, 72], "area": 26576}, {"id": 4739924, "category_id": 95, "iscrowd": 0, "bbox": [126, 192, 514, 102], "area": 21793}, {"id": 8949139, "category_id": 149, "iscrowd": 0, "bbox": [0, 238, 640, 147], "area": 10991}, {"id": 12299429, "category_id": 151, "iscrowd": 0, "bbox": [299, 320, 222, 65], "area": 4417}, {"id": 2708801, "category_id": 184, "iscrowd": 0, "bbox": [0, 109, 640, 276], "area": 52859}, {"id": 15985122, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 465, 136], "area": 29599}, {"id": 7897216, "category_id": 191, "iscrowd": 0, "bbox": [186, 335, 278, 50], "area": 2612}, {"id": 2055498, "category_id": 193, "iscrowd": 0, "bbox": [186, 239, 454, 146], "area": 14661}, {"id": 14408403, "category_id": 197, "iscrowd": 0, "bbox": [77, 0, 563, 205], "area": 68988}], "file_name": "000000446206.png", "image_id": 446206}, {"segments_info": [{"id": 6979174, "category_id": 77, "iscrowd": 0, "bbox": [108, 282, 393, 188], "area": 65257}, {"id": 4547671, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 118710}], "file_name": "000000446207.png", "image_id": 446207}, {"segments_info": [{"id": 1185565, "category_id": 18, "iscrowd": 0, "bbox": [152, 336, 212, 173], "area": 22236}, {"id": 5531257, "category_id": 62, "iscrowd": 0, "bbox": [85, 224, 304, 408], "area": 70232}, {"id": 793135, "category_id": 67, "iscrowd": 0, "bbox": [418, 365, 62, 262], "area": 5458}, {"id": 9016992, "category_id": 82, "iscrowd": 0, "bbox": [3, 0, 122, 608], "area": 64556}, {"id": 2510444, "category_id": 100, "iscrowd": 0, "bbox": [367, 449, 53, 128], "area": 4986}, {"id": 4739930, "category_id": 190, "iscrowd": 0, "bbox": [0, 503, 459, 137], "area": 16017}, {"id": 10337218, "category_id": 199, "iscrowd": 0, "bbox": [80, 0, 400, 508], "area": 67375}], "file_name": "000000446522.png", "image_id": 446522}, {"segments_info": [{"id": 1588585, "category_id": 44, "iscrowd": 0, "bbox": [219, 22, 22, 59], "area": 775}, {"id": 2505029, "category_id": 44, "iscrowd": 0, "bbox": [206, 35, 17, 46], "area": 500}, {"id": 5666716, "category_id": 70, "iscrowd": 0, "bbox": [1, 337, 203, 294], "area": 36892}, {"id": 7309221, "category_id": 109, "iscrowd": 0, "bbox": [113, 0, 96, 520], "area": 36102}, {"id": 2314376, "category_id": 176, "iscrowd": 0, "bbox": [185, 0, 243, 447], "area": 93371}, {"id": 2572908, "category_id": 190, "iscrowd": 0, "bbox": [0, 520, 359, 120], "area": 16231}, {"id": 1788272, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 122, 579], "area": 38586}], "file_name": "000000446574.png", "image_id": 446574}, {"segments_info": [{"id": 2960947, "category_id": 1, "iscrowd": 0, "bbox": [257, 82, 334, 344], "area": 54446}, {"id": 6383738, "category_id": 1, "iscrowd": 0, "bbox": [288, 109, 33, 51], "area": 909}, {"id": 5454902, "category_id": 1, "iscrowd": 0, "bbox": [183, 182, 143, 239], "area": 15993}, {"id": 3552048, "category_id": 3, "iscrowd": 0, "bbox": [0, 79, 223, 249], "area": 43370}, {"id": 5260346, "category_id": 4, "iscrowd": 0, "bbox": [492, 232, 148, 189], "area": 14302}, {"id": 5130310, "category_id": 149, "iscrowd": 0, "bbox": [0, 268, 597, 158], "area": 27394}, {"id": 2569778, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 200], "area": 47541}, {"id": 6445654, "category_id": 191, "iscrowd": 0, "bbox": [438, 246, 138, 80], "area": 6592}, {"id": 7501686, "category_id": 197, "iscrowd": 0, "bbox": [93, 0, 365, 133], "area": 31975}, {"id": 4339503, "category_id": 199, "iscrowd": 0, "bbox": [286, 147, 354, 121], "area": 15332}], "file_name": "000000446651.png", "image_id": 446651}, {"segments_info": [{"id": 3499156, "category_id": 88, "iscrowd": 0, "bbox": [92, 106, 313, 163], "area": 38366}, {"id": 1581612, "category_id": 171, "iscrowd": 0, "bbox": [10, 0, 490, 212], "area": 8940}, {"id": 3625049, "category_id": 191, "iscrowd": 0, "bbox": [0, 294, 500, 39], "area": 10278}], "file_name": "000000446703.png", "image_id": 446703}, {"segments_info": [{"id": 11311252, "category_id": 1, "iscrowd": 0, "bbox": [277, 9, 155, 304], "area": 14598}, {"id": 8214595, "category_id": 1, "iscrowd": 0, "bbox": [142, 11, 103, 301], "area": 16100}, {"id": 9141366, "category_id": 1, "iscrowd": 0, "bbox": [320, 14, 145, 311], "area": 16941}, {"id": 4012862, "category_id": 39, "iscrowd": 0, "bbox": [307, 201, 6, 11], "area": 32}, {"id": 1515293, "category_id": 39, "iscrowd": 0, "bbox": [76, 62, 80, 78], "area": 823}, {"id": 7770264, "category_id": 39, "iscrowd": 0, "bbox": [426, 106, 28, 32], "area": 259}, {"id": 4225150, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 500, 333], "area": 114737}], "file_name": "000000447088.png", "image_id": 447088}, {"segments_info": [{"id": 2106664, "category_id": 44, "iscrowd": 0, "bbox": [71, 2, 16, 42], "area": 499}, {"id": 9080983, "category_id": 62, "iscrowd": 0, "bbox": [493, 400, 99, 80], "area": 2010}, {"id": 6644063, "category_id": 79, "iscrowd": 0, "bbox": [2, 242, 241, 228], "area": 43466}, {"id": 4933193, "category_id": 85, "iscrowd": 0, "bbox": [533, 192, 29, 24], "area": 671}, {"id": 10001313, "category_id": 109, "iscrowd": 0, "bbox": [483, 89, 157, 233], "area": 13549}, {"id": 5263187, "category_id": 128, "iscrowd": 0, "bbox": [51, 15, 589, 465], "area": 35366}, {"id": 8554375, "category_id": 156, "iscrowd": 0, "bbox": [0, 176, 108, 43], "area": 2552}, {"id": 14668231, "category_id": 181, "iscrowd": 0, "bbox": [481, 173, 159, 100], "area": 5235}, {"id": 8093308, "category_id": 186, "iscrowd": 0, "bbox": [68, 0, 572, 66], "area": 25507}, {"id": 10855588, "category_id": 188, "iscrowd": 0, "bbox": [0, 25, 616, 455], "area": 106552}, {"id": 5921884, "category_id": 190, "iscrowd": 0, "bbox": [275, 397, 249, 83], "area": 11572}, {"id": 2895405, "category_id": 195, "iscrowd": 0, "bbox": [291, 47, 55, 116], "area": 4233}, {"id": 6053471, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 325], "area": 28880}], "file_name": "000000447169.png", "image_id": 447169}, {"segments_info": [{"id": 5659504, "category_id": 1, "iscrowd": 0, "bbox": [496, 171, 81, 132], "area": 4662}, {"id": 4539998, "category_id": 1, "iscrowd": 0, "bbox": [69, 69, 111, 135], "area": 7489}, {"id": 4867932, "category_id": 1, "iscrowd": 0, "bbox": [218, 197, 204, 251], "area": 28986}, {"id": 6974315, "category_id": 1, "iscrowd": 0, "bbox": [59, 109, 170, 359], "area": 31777}, {"id": 10665925, "category_id": 37, "iscrowd": 0, "bbox": [567, 133, 9, 9], "area": 65}, {"id": 7899780, "category_id": 39, "iscrowd": 0, "bbox": [53, 25, 116, 100], "area": 1122}, {"id": 4479383, "category_id": 40, "iscrowd": 0, "bbox": [490, 216, 28, 21], "area": 327}, {"id": 5474697, "category_id": 145, "iscrowd": 0, "bbox": [0, 246, 640, 142], "area": 37020}, {"id": 4611925, "category_id": 184, "iscrowd": 0, "bbox": [0, 32, 640, 181], "area": 50685}, {"id": 4873305, "category_id": 185, "iscrowd": 0, "bbox": [0, 190, 640, 68], "area": 20786}, {"id": 14800312, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 129], "area": 59892}, {"id": 6919376, "category_id": 194, "iscrowd": 0, "bbox": [0, 266, 640, 214], "area": 58102}], "file_name": "000000447187.png", "image_id": 447187}, {"segments_info": [{"id": 7240577, "category_id": 18, "iscrowd": 0, "bbox": [9, 13, 521, 441], "area": 81033}, {"id": 5335701, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 576, 480], "area": 93556}, {"id": 3759453, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 562, 480], "area": 70603}], "file_name": "000000447200.png", "image_id": 447200}, {"segments_info": [{"id": 7699591, "category_id": 24, "iscrowd": 0, "bbox": [280, 148, 164, 173], "area": 18283}, {"id": 9541024, "category_id": 24, "iscrowd": 0, "bbox": [145, 202, 115, 128], "area": 11258}, {"id": 5791077, "category_id": 24, "iscrowd": 0, "bbox": [304, 165, 206, 182], "area": 8264}, {"id": 3361344, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 398], "area": 174399}, {"id": 9546936, "category_id": 193, "iscrowd": 0, "bbox": [47, 286, 593, 194], "area": 36054}], "file_name": "000000447313.png", "image_id": 447313}, {"segments_info": [{"id": 6117721, "category_id": 1, "iscrowd": 0, "bbox": [38, 215, 7, 14], "area": 40}, {"id": 4212067, "category_id": 1, "iscrowd": 0, "bbox": [46, 290, 84, 115], "area": 4341}, {"id": 6053473, "category_id": 1, "iscrowd": 0, "bbox": [209, 285, 4, 8], "area": 20}, {"id": 3355177, "category_id": 1, "iscrowd": 0, "bbox": [94, 227, 127, 173], "area": 7281}, {"id": 5000527, "category_id": 1, "iscrowd": 0, "bbox": [213, 286, 6, 10], "area": 29}, {"id": 7697259, "category_id": 1, "iscrowd": 0, "bbox": [42, 217, 9, 17], "area": 81}, {"id": 9541783, "category_id": 1, "iscrowd": 0, "bbox": [241, 297, 10, 13], "area": 72}, {"id": 10592408, "category_id": 1, "iscrowd": 0, "bbox": [378, 345, 7, 13], "area": 60}, {"id": 8353912, "category_id": 1, "iscrowd": 0, "bbox": [218, 290, 5, 8], "area": 22}, {"id": 2434334, "category_id": 1, "iscrowd": 0, "bbox": [12, 220, 32, 52], "area": 776}, {"id": 8753294, "category_id": 38, "iscrowd": 0, "bbox": [485, 318, 32, 39], "area": 665}, {"id": 14864061, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 429], "area": 190063}, {"id": 2645066, "category_id": 193, "iscrowd": 0, "bbox": [0, 220, 640, 238], "area": 70032}, {"id": 3030331, "category_id": 197, "iscrowd": 0, "bbox": [55, 37, 167, 232], "area": 19158}], "file_name": "000000447314.png", "image_id": 447314}, {"segments_info": [{"id": 13753054, "category_id": 3, "iscrowd": 0, "bbox": [530, 311, 25, 13], "area": 186}, {"id": 12569295, "category_id": 3, "iscrowd": 0, "bbox": [577, 304, 9, 10], "area": 60}, {"id": 14146787, "category_id": 3, "iscrowd": 0, "bbox": [596, 296, 13, 11], "area": 92}, {"id": 13424088, "category_id": 3, "iscrowd": 0, "bbox": [551, 304, 28, 12], "area": 220}, {"id": 12634831, "category_id": 3, "iscrowd": 0, "bbox": [302, 327, 26, 24], "area": 502}, {"id": 3494238, "category_id": 3, "iscrowd": 0, "bbox": [606, 321, 34, 37], "area": 994}, {"id": 11253180, "category_id": 3, "iscrowd": 0, "bbox": [609, 301, 10, 8], "area": 65}, {"id": 9079954, "category_id": 3, "iscrowd": 0, "bbox": [23, 331, 68, 35], "area": 1712}, {"id": 12635088, "category_id": 3, "iscrowd": 0, "bbox": [551, 313, 32, 13], "area": 303}, {"id": 5400188, "category_id": 6, "iscrowd": 0, "bbox": [86, 264, 217, 120], "area": 21138}, {"id": 8217938, "category_id": 8, "iscrowd": 0, "bbox": [337, 315, 46, 33], "area": 1219}, {"id": 8093304, "category_id": 8, "iscrowd": 0, "bbox": [370, 278, 160, 135], "area": 16544}, {"id": 10331053, "category_id": 149, "iscrowd": 0, "bbox": [0, 286, 640, 130], "area": 25991}, {"id": 3886671, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 143096}, {"id": 15455417, "category_id": 187, "iscrowd": 0, "bbox": [111, 0, 515, 225], "area": 40546}, {"id": 6973811, "category_id": 191, "iscrowd": 0, "bbox": [524, 351, 116, 65], "area": 4356}, {"id": 11710635, "category_id": 197, "iscrowd": 0, "bbox": [440, 177, 175, 69], "area": 4583}, {"id": 7460079, "category_id": 199, "iscrowd": 0, "bbox": [304, 322, 67, 51], "area": 1414}], "file_name": "000000447342.png", "image_id": 447342}, {"segments_info": [{"id": 5981503, "category_id": 1, "iscrowd": 0, "bbox": [83, 64, 120, 333], "area": 18728}, {"id": 7031410, "category_id": 1, "iscrowd": 0, "bbox": [266, 5, 185, 407], "area": 32226}, {"id": 6510157, "category_id": 35, "iscrowd": 0, "bbox": [331, 388, 124, 32], "area": 1245}, {"id": 10396833, "category_id": 36, "iscrowd": 0, "bbox": [13, 166, 207, 132], "area": 9712}, {"id": 10727333, "category_id": 92, "iscrowd": 0, "bbox": [0, 0, 75, 253], "area": 13530}, {"id": 14273988, "category_id": 159, "iscrowd": 0, "bbox": [0, 372, 640, 54], "area": 14388}, {"id": 8815746, "category_id": 177, "iscrowd": 0, "bbox": [50, 0, 590, 426], "area": 82647}, {"id": 5791327, "category_id": 184, "iscrowd": 0, "bbox": [61, 15, 460, 400], "area": 63267}], "file_name": "000000447465.png", "image_id": 447465}, {"segments_info": [{"id": 10457987, "category_id": 50, "iscrowd": 0, "bbox": [2, 112, 139, 21], "area": 811}, {"id": 1854037, "category_id": 56, "iscrowd": 0, "bbox": [225, 311, 105, 82], "area": 5251}, {"id": 4286847, "category_id": 56, "iscrowd": 0, "bbox": [15, 106, 79, 83], "area": 2704}, {"id": 3298131, "category_id": 56, "iscrowd": 0, "bbox": [137, 97, 26, 32], "area": 509}, {"id": 1391425, "category_id": 56, "iscrowd": 0, "bbox": [242, 164, 147, 123], "area": 10908}, {"id": 3498083, "category_id": 56, "iscrowd": 0, "bbox": [299, 34, 62, 49], "area": 1626}, {"id": 2188670, "category_id": 56, "iscrowd": 0, "bbox": [419, 155, 46, 23], "area": 779}, {"id": 925216, "category_id": 56, "iscrowd": 0, "bbox": [589, 197, 51, 95], "area": 3492}, {"id": 1321522, "category_id": 56, "iscrowd": 0, "bbox": [0, 252, 51, 77], "area": 2844}, {"id": 2185321, "category_id": 56, "iscrowd": 0, "bbox": [178, 152, 110, 91], "area": 5365}, {"id": 5797244, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 269086}], "file_name": "000000447522.png", "image_id": 447522}, {"segments_info": [{"id": 5399428, "category_id": 1, "iscrowd": 0, "bbox": [1, 1, 157, 123], "area": 9201}, {"id": 4543859, "category_id": 1, "iscrowd": 0, "bbox": [326, 1, 174, 215], "area": 17753}, {"id": 5067876, "category_id": 49, "iscrowd": 0, "bbox": [275, 165, 156, 15], "area": 830}, {"id": 5396320, "category_id": 49, "iscrowd": 0, "bbox": [101, 86, 128, 71], "area": 739}, {"id": 7897742, "category_id": 49, "iscrowd": 0, "bbox": [245, 0, 38, 167], "area": 2540}, {"id": 5791594, "category_id": 73, "iscrowd": 0, "bbox": [54, 140, 292, 99], "area": 19021}, {"id": 6327753, "category_id": 189, "iscrowd": 0, "bbox": [0, 128, 500, 206], "area": 73005}, {"id": 13488857, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 478, 136], "area": 42647}], "file_name": "000000447611.png", "image_id": 447611}, {"segments_info": [{"id": 3367516, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 229776}, {"id": 14605018, "category_id": 187, "iscrowd": 0, "bbox": [0, 100, 121, 327], "area": 4698}], "file_name": "000000447789.png", "image_id": 447789}, {"segments_info": [{"id": 4350044, "category_id": 1, "iscrowd": 0, "bbox": [328, 107, 62, 128], "area": 4537}, {"id": 4942687, "category_id": 1, "iscrowd": 0, "bbox": [364, 108, 73, 183], "area": 7093}, {"id": 8234641, "category_id": 1, "iscrowd": 0, "bbox": [1, 318, 188, 43], "area": 3229}, {"id": 4877398, "category_id": 1, "iscrowd": 0, "bbox": [134, 69, 73, 159], "area": 5426}, {"id": 6317684, "category_id": 2, "iscrowd": 0, "bbox": [1, 195, 81, 40], "area": 1730}, {"id": 12762836, "category_id": 37, "iscrowd": 0, "bbox": [466, 253, 38, 39], "area": 1159}, {"id": 3036228, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 30], "area": 11064}, {"id": 14078910, "category_id": 187, "iscrowd": 0, "bbox": [215, 0, 235, 16], "area": 1639}, {"id": 4887697, "category_id": 193, "iscrowd": 0, "bbox": [0, 12, 640, 350], "area": 195005}], "file_name": "000000447917.png", "image_id": 447917}, {"segments_info": [{"id": 2106672, "category_id": 1, "iscrowd": 0, "bbox": [235, 178, 48, 170], "area": 4117}, {"id": 9209216, "category_id": 1, "iscrowd": 0, "bbox": [2, 184, 28, 178], "area": 2095}, {"id": 5003371, "category_id": 1, "iscrowd": 0, "bbox": [48, 170, 86, 292], "area": 14568}, {"id": 2829361, "category_id": 1, "iscrowd": 0, "bbox": [310, 168, 46, 178], "area": 5100}, {"id": 5456999, "category_id": 1, "iscrowd": 0, "bbox": [114, 171, 82, 223], "area": 7754}, {"id": 2041141, "category_id": 1, "iscrowd": 0, "bbox": [268, 179, 49, 185], "area": 5159}, {"id": 3157035, "category_id": 31, "iscrowd": 0, "bbox": [546, 307, 28, 43], "area": 886}, {"id": 3356999, "category_id": 31, "iscrowd": 0, "bbox": [570, 307, 41, 61], "area": 1538}, {"id": 12961223, "category_id": 62, "iscrowd": 0, "bbox": [174, 268, 69, 69], "area": 3602}, {"id": 12171969, "category_id": 62, "iscrowd": 0, "bbox": [231, 258, 54, 62], "area": 958}, {"id": 12369615, "category_id": 62, "iscrowd": 0, "bbox": [379, 240, 67, 80], "area": 3435}, {"id": 10395061, "category_id": 62, "iscrowd": 0, "bbox": [310, 279, 63, 42], "area": 1192}, {"id": 12303307, "category_id": 62, "iscrowd": 0, "bbox": [456, 262, 104, 101], "area": 4649}, {"id": 2177601, "category_id": 64, "iscrowd": 0, "bbox": [170, 186, 77, 99], "area": 4231}, {"id": 1912928, "category_id": 64, "iscrowd": 0, "bbox": [419, 178, 93, 137], "area": 4482}, {"id": 6584174, "category_id": 72, "iscrowd": 0, "bbox": [554, 69, 71, 113], "area": 6610}, {"id": 11843007, "category_id": 75, "iscrowd": 0, "bbox": [110, 283, 18, 8], "area": 113}, {"id": 1778056, "category_id": 92, "iscrowd": 0, "bbox": [279, 256, 12, 32], "area": 215}, {"id": 7978197, "category_id": 100, "iscrowd": 0, "bbox": [524, 325, 33, 27], "area": 355}, {"id": 15526376, "category_id": 130, "iscrowd": 0, "bbox": [248, 0, 277, 48], "area": 2506}, {"id": 5271914, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 199, 82], "area": 3979}, {"id": 6514796, "category_id": 184, "iscrowd": 0, "bbox": [157, 0, 100, 37], "area": 1821}, {"id": 7369594, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 509, 177], "area": 18935}, {"id": 4671820, "category_id": 189, "iscrowd": 0, "bbox": [493, 335, 112, 97], "area": 8224}, {"id": 5068116, "category_id": 190, "iscrowd": 0, "bbox": [0, 233, 203, 234], "area": 11393}, {"id": 7961789, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 437], "area": 118565}, {"id": 3420104, "category_id": 200, "iscrowd": 0, "bbox": [0, 311, 640, 169], "area": 64604}], "file_name": "000000448076.png", "image_id": 448076}, {"segments_info": [{"id": 4077885, "category_id": 1, "iscrowd": 0, "bbox": [268, 81, 206, 255], "area": 18087}, {"id": 3092279, "category_id": 1, "iscrowd": 0, "bbox": [66, 87, 112, 339], "area": 24863}, {"id": 9804709, "category_id": 1, "iscrowd": 0, "bbox": [423, 126, 74, 93], "area": 4216}, {"id": 9013642, "category_id": 8, "iscrowd": 0, "bbox": [243, 0, 397, 419], "area": 84965}, {"id": 10782799, "category_id": 9, "iscrowd": 0, "bbox": [156, 75, 434, 232], "area": 26677}, {"id": 9538185, "category_id": 44, "iscrowd": 0, "bbox": [157, 263, 17, 33], "area": 403}, {"id": 5794941, "category_id": 125, "iscrowd": 0, "bbox": [152, 264, 87, 68], "area": 3845}, {"id": 3166275, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 119], "area": 46408}, {"id": 5592413, "category_id": 191, "iscrowd": 0, "bbox": [0, 297, 289, 129], "area": 18829}, {"id": 6849940, "category_id": 194, "iscrowd": 0, "bbox": [0, 83, 550, 261], "area": 24048}, {"id": 7110288, "category_id": 198, "iscrowd": 0, "bbox": [15, 83, 481, 64], "area": 11930}], "file_name": "000000448256.png", "image_id": 448256}, {"segments_info": [{"id": 5191754, "category_id": 1, "iscrowd": 0, "bbox": [230, 51, 18, 28], "area": 346}, {"id": 8675933, "category_id": 1, "iscrowd": 0, "bbox": [198, 60, 10, 23], "area": 148}, {"id": 5257790, "category_id": 1, "iscrowd": 0, "bbox": [200, 14, 18, 25], "area": 293}, {"id": 5915716, "category_id": 1, "iscrowd": 0, "bbox": [215, 63, 24, 45], "area": 613}, {"id": 5324082, "category_id": 1, "iscrowd": 0, "bbox": [80, 69, 17, 49], "area": 530}, {"id": 10460088, "category_id": 1, "iscrowd": 0, "bbox": [80, 6, 224, 224], "area": 21756}, {"id": 5520203, "category_id": 1, "iscrowd": 0, "bbox": [205, 33, 13, 27], "area": 238}, {"id": 5914691, "category_id": 1, "iscrowd": 0, "bbox": [203, 72, 15, 39], "area": 375}, {"id": 5192266, "category_id": 1, "iscrowd": 0, "bbox": [158, 21, 16, 27], "area": 243}, {"id": 6374208, "category_id": 1, "iscrowd": 0, "bbox": [222, 34, 18, 23], "area": 259}, {"id": 5519964, "category_id": 1, "iscrowd": 0, "bbox": [0, 48, 20, 32], "area": 299}, {"id": 9073520, "category_id": 1, "iscrowd": 0, "bbox": [84, 33, 27, 43], "area": 570}, {"id": 4475026, "category_id": 1, "iscrowd": 0, "bbox": [18, 13, 63, 212], "area": 6121}, {"id": 6243904, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 277, 123], "area": 12611}, {"id": 12302814, "category_id": 37, "iscrowd": 0, "bbox": [100, 99, 5, 5], "area": 19}, {"id": 2178908, "category_id": 40, "iscrowd": 0, "bbox": [19, 123, 33, 44], "area": 1179}, {"id": 10936019, "category_id": 145, "iscrowd": 0, "bbox": [0, 202, 320, 38], "area": 7024}, {"id": 6116409, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 320, 210], "area": 22469}], "file_name": "000000448263.png", "image_id": 448263}, {"segments_info": [{"id": 5001566, "category_id": 1, "iscrowd": 0, "bbox": [149, 34, 221, 305], "area": 22252}, {"id": 3159340, "category_id": 2, "iscrowd": 0, "bbox": [446, 229, 20, 29], "area": 289}, {"id": 3422784, "category_id": 41, "iscrowd": 0, "bbox": [196, 267, 149, 143], "area": 4828}, {"id": 2566185, "category_id": 144, "iscrowd": 0, "bbox": [387, 133, 253, 179], "area": 15109}, {"id": 1188894, "category_id": 184, "iscrowd": 0, "bbox": [0, 143, 624, 258], "area": 22946}, {"id": 14667955, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 363], "area": 140247}, {"id": 8356740, "category_id": 191, "iscrowd": 0, "bbox": [51, 207, 589, 221], "area": 60429}, {"id": 1982271, "category_id": 193, "iscrowd": 0, "bbox": [0, 328, 251, 100], "area": 7000}], "file_name": "000000448365.png", "image_id": 448365}, {"segments_info": [{"id": 4537657, "category_id": 1, "iscrowd": 0, "bbox": [165, 137, 21, 67], "area": 874}, {"id": 5133148, "category_id": 1, "iscrowd": 0, "bbox": [17, 274, 52, 140], "area": 3484}, {"id": 9214891, "category_id": 1, "iscrowd": 0, "bbox": [21, 237, 67, 79], "area": 1679}, {"id": 4999495, "category_id": 1, "iscrowd": 0, "bbox": [97, 231, 37, 116], "area": 2294}, {"id": 4339759, "category_id": 1, "iscrowd": 0, "bbox": [189, 147, 22, 56], "area": 704}, {"id": 5131599, "category_id": 1, "iscrowd": 0, "bbox": [52, 215, 46, 75], "area": 1205}, {"id": 6252418, "category_id": 1, "iscrowd": 0, "bbox": [105, 187, 34, 108], "area": 1186}, {"id": 6647922, "category_id": 1, "iscrowd": 0, "bbox": [350, 182, 32, 32], "area": 667}, {"id": 9610167, "category_id": 1, "iscrowd": 0, "bbox": [103, 214, 24, 47], "area": 599}, {"id": 4934216, "category_id": 1, "iscrowd": 0, "bbox": [205, 130, 28, 82], "area": 1077}, {"id": 6447717, "category_id": 1, "iscrowd": 0, "bbox": [39, 226, 57, 80], "area": 886}, {"id": 7639457, "category_id": 7, "iscrowd": 0, "bbox": [223, 45, 184, 323], "area": 45382}, {"id": 5525061, "category_id": 7, "iscrowd": 0, "bbox": [0, 40, 89, 72], "area": 3849}, {"id": 11715273, "category_id": 7, "iscrowd": 0, "bbox": [377, 0, 263, 431], "area": 72815}, {"id": 5201255, "category_id": 15, "iscrowd": 0, "bbox": [0, 308, 16, 17], "area": 104}, {"id": 3748910, "category_id": 31, "iscrowd": 0, "bbox": [133, 228, 11, 15], "area": 127}, {"id": 5721158, "category_id": 31, "iscrowd": 0, "bbox": [17, 361, 34, 53], "area": 1036}, {"id": 4145992, "category_id": 31, "iscrowd": 0, "bbox": [254, 80, 4, 14], "area": 39}, {"id": 4805231, "category_id": 31, "iscrowd": 0, "bbox": [33, 255, 27, 22], "area": 151}, {"id": 2828068, "category_id": 31, "iscrowd": 0, "bbox": [78, 254, 19, 17], "area": 225}, {"id": 4216691, "category_id": 119, "iscrowd": 0, "bbox": [0, 214, 53, 58], "area": 1299}, {"id": 6582649, "category_id": 144, "iscrowd": 0, "bbox": [0, 24, 640, 413], "area": 35865}, {"id": 4805208, "category_id": 147, "iscrowd": 0, "bbox": [182, 0, 309, 437], "area": 35228}, {"id": 7767155, "category_id": 151, "iscrowd": 0, "bbox": [102, 30, 24, 12], "area": 223}, {"id": 9085106, "category_id": 171, "iscrowd": 0, "bbox": [152, 0, 22, 54], "area": 841}, {"id": 7241613, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 253], "area": 51629}], "file_name": "000000448410.png", "image_id": 448410}, {"segments_info": [{"id": 5397612, "category_id": 25, "iscrowd": 0, "bbox": [136, 78, 504, 402], "area": 113853}, {"id": 9608354, "category_id": 25, "iscrowd": 0, "bbox": [112, 2, 479, 247], "area": 53083}, {"id": 4215112, "category_id": 184, "iscrowd": 0, "bbox": [88, 0, 74, 59], "area": 3106}, {"id": 7965073, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 93838}], "file_name": "000000448448.png", "image_id": 448448}, {"segments_info": [{"id": 2040104, "category_id": 1, "iscrowd": 0, "bbox": [52, 335, 45, 40], "area": 1079}, {"id": 10526115, "category_id": 92, "iscrowd": 0, "bbox": [0, 124, 129, 101], "area": 8939}, {"id": 7631732, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 73834}, {"id": 7381698, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 73878}], "file_name": "000000448810.png", "image_id": 448810}, {"segments_info": [{"id": 8165041, "category_id": 51, "iscrowd": 0, "bbox": [343, 39, 139, 131], "area": 10815}, {"id": 6196120, "category_id": 54, "iscrowd": 0, "bbox": [220, 161, 191, 184], "area": 22797}, {"id": 9019049, "category_id": 54, "iscrowd": 0, "bbox": [327, 167, 200, 186], "area": 17912}, {"id": 3364812, "category_id": 57, "iscrowd": 0, "bbox": [366, 61, 99, 58], "area": 2474}, {"id": 5198672, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 216], "area": 11273}, {"id": 12173250, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 640, 359], "area": 137947}, {"id": 1391475, "category_id": 196, "iscrowd": 0, "bbox": [58, 19, 177, 183], "area": 21618}], "file_name": "000000449190.png", "image_id": 449190}, {"segments_info": [{"id": 2502197, "category_id": 10, "iscrowd": 0, "bbox": [33, 119, 10, 14], "area": 94}, {"id": 4016467, "category_id": 13, "iscrowd": 0, "bbox": [284, 159, 9, 11], "area": 72}, {"id": 8488568, "category_id": 95, "iscrowd": 0, "bbox": [89, 48, 305, 114], "area": 16820}, {"id": 10333348, "category_id": 130, "iscrowd": 0, "bbox": [206, 0, 170, 136], "area": 1119}, {"id": 4612196, "category_id": 144, "iscrowd": 0, "bbox": [142, 145, 145, 39], "area": 2265}, {"id": 10006964, "category_id": 149, "iscrowd": 0, "bbox": [154, 143, 346, 146], "area": 12408}, {"id": 4805965, "category_id": 161, "iscrowd": 0, "bbox": [90, 103, 272, 99], "area": 3698}, {"id": 2702901, "category_id": 184, "iscrowd": 0, "bbox": [283, 0, 217, 200], "area": 9669}, {"id": 3360319, "category_id": 185, "iscrowd": 0, "bbox": [66, 156, 434, 177], "area": 24095}, {"id": 3817279, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 327, 148], "area": 27189}, {"id": 3164227, "category_id": 191, "iscrowd": 0, "bbox": [0, 154, 456, 179], "area": 4996}, {"id": 998449, "category_id": 193, "iscrowd": 0, "bbox": [0, 168, 305, 165], "area": 27002}, {"id": 6649195, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 461, 210], "area": 19450}, {"id": 7707534, "category_id": 199, "iscrowd": 0, "bbox": [91, 155, 409, 74], "area": 3920}], "file_name": "000000449198.png", "image_id": 449198}, {"segments_info": [{"id": 4864311, "category_id": 1, "iscrowd": 0, "bbox": [54, 1, 322, 409], "area": 81411}, {"id": 15721947, "category_id": 3, "iscrowd": 0, "bbox": [305, 53, 194, 98], "area": 11708}, {"id": 3367568, "category_id": 60, "iscrowd": 0, "bbox": [426, 278, 71, 58], "area": 2528}, {"id": 3032669, "category_id": 60, "iscrowd": 0, "bbox": [345, 287, 79, 44], "area": 2560}, {"id": 4807527, "category_id": 60, "iscrowd": 0, "bbox": [288, 321, 88, 51], "area": 3423}, {"id": 13349290, "category_id": 184, "iscrowd": 0, "bbox": [362, 0, 121, 54], "area": 5390}, {"id": 3493231, "category_id": 188, "iscrowd": 0, "bbox": [466, 0, 174, 309], "area": 39590}, {"id": 4481915, "category_id": 189, "iscrowd": 0, "bbox": [35, 340, 605, 238], "area": 107016}, {"id": 15525859, "category_id": 190, "iscrowd": 0, "bbox": [37, 289, 31, 116], "area": 1965}, {"id": 9473685, "category_id": 195, "iscrowd": 0, "bbox": [482, 7, 54, 187], "area": 6066}, {"id": 2048366, "category_id": 196, "iscrowd": 0, "bbox": [375, 290, 116, 91], "area": 4932}, {"id": 8169901, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 197, 578], "area": 40585}], "file_name": "000000449312.png", "image_id": 449312}, {"segments_info": [{"id": 6054245, "category_id": 24, "iscrowd": 0, "bbox": [105, 98, 205, 176], "area": 16868}, {"id": 5662065, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 209], "area": 49347}, {"id": 5135977, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 500, 333], "area": 100034}], "file_name": "000000449406.png", "image_id": 449406}, {"segments_info": [{"id": 4211271, "category_id": 1, "iscrowd": 0, "bbox": [289, 189, 68, 169], "area": 3525}, {"id": 3553339, "category_id": 1, "iscrowd": 0, "bbox": [203, 181, 57, 172], "area": 5574}, {"id": 4013377, "category_id": 1, "iscrowd": 0, "bbox": [580, 182, 54, 124], "area": 3647}, {"id": 2895151, "category_id": 1, "iscrowd": 0, "bbox": [380, 178, 42, 142], "area": 3879}, {"id": 3618878, "category_id": 1, "iscrowd": 0, "bbox": [508, 180, 33, 122], "area": 2299}, {"id": 4276550, "category_id": 1, "iscrowd": 0, "bbox": [415, 186, 26, 121], "area": 2213}, {"id": 2171686, "category_id": 1, "iscrowd": 0, "bbox": [524, 197, 33, 101], "area": 1565}, {"id": 4546149, "category_id": 1, "iscrowd": 0, "bbox": [98, 179, 72, 132], "area": 4644}, {"id": 3421496, "category_id": 1, "iscrowd": 0, "bbox": [273, 188, 36, 153], "area": 3394}, {"id": 4145478, "category_id": 1, "iscrowd": 0, "bbox": [475, 187, 35, 122], "area": 2085}, {"id": 3026739, "category_id": 1, "iscrowd": 0, "bbox": [338, 181, 30, 150], "area": 2269}, {"id": 4408649, "category_id": 1, "iscrowd": 0, "bbox": [430, 172, 49, 152], "area": 4603}, {"id": 6116174, "category_id": 6, "iscrowd": 0, "bbox": [3, 105, 601, 185], "area": 61873}, {"id": 11118239, "category_id": 9, "iscrowd": 0, "bbox": [604, 107, 36, 90], "area": 1717}, {"id": 4472899, "category_id": 27, "iscrowd": 0, "bbox": [309, 201, 275, 107], "area": 3984}, {"id": 6635893, "category_id": 31, "iscrowd": 0, "bbox": [358, 202, 20, 65], "area": 542}, {"id": 3161494, "category_id": 33, "iscrowd": 0, "bbox": [168, 276, 36, 31], "area": 850}, {"id": 6514021, "category_id": 149, "iscrowd": 0, "bbox": [550, 237, 22, 25], "area": 162}, {"id": 15196379, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 173], "area": 75555}, {"id": 13228001, "category_id": 191, "iscrowd": 0, "bbox": [0, 223, 640, 204], "area": 81513}, {"id": 10658191, "category_id": 192, "iscrowd": 0, "bbox": [603, 166, 25, 37], "area": 312}], "file_name": "000000449432.png", "image_id": 449432}, {"segments_info": [{"id": 3029608, "category_id": 1, "iscrowd": 0, "bbox": [122, 52, 133, 269], "area": 11347}, {"id": 8029569, "category_id": 43, "iscrowd": 0, "bbox": [98, 78, 36, 94], "area": 1107}, {"id": 5719856, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 260578}], "file_name": "000000449579.png", "image_id": 449579}, {"segments_info": [{"id": 2369832, "category_id": 1, "iscrowd": 0, "bbox": [176, 199, 120, 70], "area": 2775}, {"id": 3819327, "category_id": 42, "iscrowd": 0, "bbox": [278, 243, 16, 29], "area": 179}, {"id": 10002834, "category_id": 155, "iscrowd": 0, "bbox": [0, 79, 640, 347], "area": 213386}, {"id": 9668976, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 104], "area": 56226}], "file_name": "000000449603.png", "image_id": 449603}, {"segments_info": [{"id": 10263692, "category_id": 1, "iscrowd": 0, "bbox": [368, 65, 80, 89], "area": 3279}, {"id": 7432780, "category_id": 62, "iscrowd": 0, "bbox": [266, 75, 71, 94], "area": 4091}, {"id": 6975331, "category_id": 65, "iscrowd": 0, "bbox": [583, 81, 57, 88], "area": 4316}, {"id": 12961192, "category_id": 65, "iscrowd": 0, "bbox": [289, 77, 183, 92], "area": 7777}, {"id": 8753050, "category_id": 72, "iscrowd": 0, "bbox": [48, 58, 47, 36], "area": 1203}, {"id": 10196887, "category_id": 81, "iscrowd": 0, "bbox": [122, 83, 47, 19], "area": 735}, {"id": 10395281, "category_id": 93, "iscrowd": 0, "bbox": [187, 60, 83, 95], "area": 2938}, {"id": 12501448, "category_id": 133, "iscrowd": 0, "bbox": [89, 11, 25, 50], "area": 986}, {"id": 10654324, "category_id": 141, "iscrowd": 0, "bbox": [190, 88, 65, 44], "area": 1477}, {"id": 6381909, "category_id": 156, "iscrowd": 0, "bbox": [319, 69, 73, 54], "area": 2023}, {"id": 4143666, "category_id": 176, "iscrowd": 0, "bbox": [161, 127, 34, 18], "area": 327}, {"id": 5989202, "category_id": 190, "iscrowd": 0, "bbox": [0, 118, 474, 51], "area": 4493}, {"id": 8424850, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 150], "area": 52991}], "file_name": "000000449661.png", "image_id": 449661}, {"segments_info": [{"id": 8024422, "category_id": 1, "iscrowd": 0, "bbox": [48, 165, 288, 262], "area": 44263}, {"id": 6522295, "category_id": 25, "iscrowd": 0, "bbox": [314, 90, 267, 269], "area": 25419}, {"id": 2569791, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 309], "area": 133634}, {"id": 2500908, "category_id": 185, "iscrowd": 0, "bbox": [351, 164, 289, 113], "area": 16537}, {"id": 4750732, "category_id": 193, "iscrowd": 0, "bbox": [0, 270, 640, 157], "area": 32931}, {"id": 6918325, "category_id": 198, "iscrowd": 0, "bbox": [0, 272, 640, 155], "area": 11171}], "file_name": "000000449909.png", "image_id": 449909}, {"segments_info": [{"id": 13488586, "category_id": 5, "iscrowd": 0, "bbox": [502, 282, 61, 16], "area": 439}, {"id": 6971639, "category_id": 5, "iscrowd": 0, "bbox": [133, 376, 76, 52], "area": 2223}, {"id": 11769480, "category_id": 5, "iscrowd": 0, "bbox": [557, 261, 83, 36], "area": 1190}, {"id": 13356747, "category_id": 5, "iscrowd": 0, "bbox": [392, 271, 73, 24], "area": 563}, {"id": 14203045, "category_id": 5, "iscrowd": 0, "bbox": [135, 249, 126, 43], "area": 1809}, {"id": 9337453, "category_id": 5, "iscrowd": 0, "bbox": [113, 293, 122, 46], "area": 2143}, {"id": 12887431, "category_id": 5, "iscrowd": 0, "bbox": [445, 113, 48, 16], "area": 183}, {"id": 9600371, "category_id": 8, "iscrowd": 0, "bbox": [333, 298, 43, 18], "area": 528}, {"id": 12563628, "category_id": 8, "iscrowd": 0, "bbox": [458, 313, 14, 7], "area": 94}, {"id": 11705226, "category_id": 8, "iscrowd": 0, "bbox": [381, 309, 20, 8], "area": 146}, {"id": 10194568, "category_id": 8, "iscrowd": 0, "bbox": [474, 317, 24, 8], "area": 134}, {"id": 10066582, "category_id": 149, "iscrowd": 0, "bbox": [0, 267, 640, 161], "area": 60723}, {"id": 9142132, "category_id": 185, "iscrowd": 0, "bbox": [490, 301, 21, 22], "area": 334}, {"id": 14859410, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 242], "area": 147390}, {"id": 8564904, "category_id": 193, "iscrowd": 0, "bbox": [0, 269, 640, 149], "area": 18485}, {"id": 11572611, "category_id": 197, "iscrowd": 0, "bbox": [0, 216, 640, 109], "area": 36837}], "file_name": "000000449996.png", "image_id": 449996}, {"segments_info": [{"id": 8941437, "category_id": 1, "iscrowd": 0, "bbox": [126, 143, 207, 336], "area": 45880}, {"id": 6575461, "category_id": 1, "iscrowd": 0, "bbox": [277, 27, 363, 447], "area": 99571}, {"id": 8549256, "category_id": 1, "iscrowd": 0, "bbox": [0, 198, 37, 281], "area": 5345}, {"id": 4602435, "category_id": 32, "iscrowd": 0, "bbox": [209, 277, 143, 203], "area": 3457}, {"id": 6181213, "category_id": 112, "iscrowd": 0, "bbox": [49, 271, 133, 209], "area": 17031}, {"id": 10006197, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 150], "area": 19088}, {"id": 12172742, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 111847}], "file_name": "000000450075.png", "image_id": 450075}, {"segments_info": [{"id": 5527672, "category_id": 47, "iscrowd": 0, "bbox": [151, 2, 329, 239], "area": 57677}, {"id": 2371919, "category_id": 50, "iscrowd": 0, "bbox": [152, 394, 291, 238], "area": 14828}, {"id": 2963844, "category_id": 61, "iscrowd": 0, "bbox": [46, 170, 284, 410], "area": 82403}, {"id": 2108487, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 480, 453], "area": 54067}, {"id": 3488844, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 11979}, {"id": 5130833, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 72206}], "file_name": "000000450100.png", "image_id": 450100}, {"segments_info": [{"id": 7165786, "category_id": 1, "iscrowd": 0, "bbox": [8, 0, 45, 43], "area": 1291}, {"id": 10190458, "category_id": 1, "iscrowd": 0, "bbox": [0, 1, 47, 55], "area": 948}, {"id": 8422027, "category_id": 46, "iscrowd": 0, "bbox": [151, 43, 89, 201], "area": 10161}, {"id": 9342355, "category_id": 46, "iscrowd": 0, "bbox": [4, 43, 109, 244], "area": 15295}, {"id": 8159114, "category_id": 46, "iscrowd": 0, "bbox": [271, 40, 93, 195], "area": 10634}, {"id": 12235987, "category_id": 48, "iscrowd": 0, "bbox": [118, 236, 204, 89], "area": 2267}, {"id": 7962776, "category_id": 67, "iscrowd": 0, "bbox": [0, 133, 375, 360], "area": 106383}, {"id": 8615787, "category_id": 125, "iscrowd": 0, "bbox": [0, 156, 169, 154], "area": 5347}, {"id": 7239040, "category_id": 175, "iscrowd": 0, "bbox": [46, 0, 329, 150], "area": 22350}, {"id": 2830646, "category_id": 189, "iscrowd": 0, "bbox": [0, 84, 375, 416], "area": 4915}], "file_name": "000000450202.png", "image_id": 450202}, {"segments_info": [{"id": 3881800, "category_id": 1, "iscrowd": 0, "bbox": [313, 217, 41, 38], "area": 937}, {"id": 6642016, "category_id": 1, "iscrowd": 0, "bbox": [571, 206, 69, 94], "area": 3888}, {"id": 2958424, "category_id": 1, "iscrowd": 0, "bbox": [453, 223, 144, 125], "area": 9699}, {"id": 5197660, "category_id": 1, "iscrowd": 0, "bbox": [433, 207, 44, 56], "area": 1442}, {"id": 4407687, "category_id": 1, "iscrowd": 0, "bbox": [224, 207, 125, 81], "area": 3375}, {"id": 2499383, "category_id": 1, "iscrowd": 0, "bbox": [523, 205, 52, 62], "area": 1926}, {"id": 6435373, "category_id": 44, "iscrowd": 0, "bbox": [561, 249, 14, 32], "area": 302}, {"id": 2104926, "category_id": 44, "iscrowd": 0, "bbox": [372, 235, 11, 26], "area": 165}, {"id": 9062713, "category_id": 44, "iscrowd": 0, "bbox": [213, 310, 23, 46], "area": 698}, {"id": 9466981, "category_id": 44, "iscrowd": 0, "bbox": [107, 288, 16, 41], "area": 525}, {"id": 1117969, "category_id": 62, "iscrowd": 0, "bbox": [267, 257, 31, 24], "area": 355}, {"id": 1379855, "category_id": 62, "iscrowd": 0, "bbox": [590, 321, 50, 38], "area": 1373}, {"id": 3684413, "category_id": 62, "iscrowd": 0, "bbox": [309, 238, 9, 9], "area": 56}, {"id": 919818, "category_id": 62, "iscrowd": 0, "bbox": [584, 279, 56, 56], "area": 1770}, {"id": 4539720, "category_id": 62, "iscrowd": 0, "bbox": [123, 276, 67, 33], "area": 1503}, {"id": 2828588, "category_id": 62, "iscrowd": 0, "bbox": [36, 293, 94, 136], "area": 3399}, {"id": 2367524, "category_id": 62, "iscrowd": 0, "bbox": [574, 245, 19, 23], "area": 273}, {"id": 986137, "category_id": 62, "iscrowd": 0, "bbox": [0, 412, 155, 62], "area": 4542}, {"id": 2302501, "category_id": 62, "iscrowd": 0, "bbox": [200, 260, 32, 33], "area": 708}, {"id": 8166061, "category_id": 67, "iscrowd": 0, "bbox": [128, 253, 362, 129], "area": 19545}, {"id": 7637660, "category_id": 73, "iscrowd": 0, "bbox": [250, 253, 72, 40], "area": 1345}, {"id": 8950431, "category_id": 73, "iscrowd": 0, "bbox": [522, 240, 10, 20], "area": 142}, {"id": 7373974, "category_id": 73, "iscrowd": 0, "bbox": [319, 242, 60, 34], "area": 889}, {"id": 7771051, "category_id": 73, "iscrowd": 0, "bbox": [406, 236, 56, 30], "area": 1015}, {"id": 8020064, "category_id": 73, "iscrowd": 0, "bbox": [404, 262, 52, 56], "area": 1918}, {"id": 3748151, "category_id": 77, "iscrowd": 0, "bbox": [435, 319, 13, 8], "area": 104}, {"id": 10919583, "category_id": 85, "iscrowd": 0, "bbox": [1, 10, 18, 54], "area": 700}, {"id": 6119521, "category_id": 112, "iscrowd": 0, "bbox": [422, 105, 89, 143], "area": 8523}, {"id": 12894917, "category_id": 130, "iscrowd": 0, "bbox": [240, 0, 207, 60], "area": 3574}, {"id": 13289417, "category_id": 186, "iscrowd": 0, "bbox": [288, 0, 269, 34], "area": 5021}, {"id": 8692152, "category_id": 189, "iscrowd": 0, "bbox": [0, 303, 379, 151], "area": 15476}, {"id": 1446677, "category_id": 190, "iscrowd": 0, "bbox": [50, 330, 435, 150], "area": 10050}, {"id": 14013141, "category_id": 195, "iscrowd": 0, "bbox": [65, 322, 98, 39], "area": 2222}, {"id": 6120300, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 432], "area": 107829}], "file_name": "000000450303.png", "image_id": 450303}, {"segments_info": [{"id": 2174018, "category_id": 1, "iscrowd": 0, "bbox": [533, 74, 36, 57], "area": 1530}, {"id": 6714510, "category_id": 1, "iscrowd": 0, "bbox": [488, 169, 152, 153], "area": 10506}, {"id": 4673888, "category_id": 1, "iscrowd": 0, "bbox": [271, 64, 161, 185], "area": 14950}, {"id": 7310767, "category_id": 1, "iscrowd": 0, "bbox": [579, 81, 56, 57], "area": 1450}, {"id": 5923441, "category_id": 1, "iscrowd": 0, "bbox": [613, 40, 27, 73], "area": 1067}, {"id": 5531779, "category_id": 1, "iscrowd": 0, "bbox": [179, 74, 78, 69], "area": 3099}, {"id": 6842226, "category_id": 1, "iscrowd": 0, "bbox": [591, 65, 40, 50], "area": 525}, {"id": 4674924, "category_id": 1, "iscrowd": 0, "bbox": [206, 50, 113, 125], "area": 5883}, {"id": 6055808, "category_id": 1, "iscrowd": 0, "bbox": [373, 62, 71, 153], "area": 6099}, {"id": 2964086, "category_id": 1, "iscrowd": 0, "bbox": [474, 49, 41, 58], "area": 891}, {"id": 2502205, "category_id": 1, "iscrowd": 0, "bbox": [553, 62, 18, 16], "area": 230}, {"id": 2371656, "category_id": 1, "iscrowd": 0, "bbox": [486, 62, 58, 52], "area": 1656}, {"id": 5462636, "category_id": 1, "iscrowd": 0, "bbox": [54, 1, 212, 300], "area": 36334}, {"id": 3818322, "category_id": 1, "iscrowd": 1, "bbox": [227, 62, 30, 53], "area": 690}, {"id": 5074061, "category_id": 50, "iscrowd": 0, "bbox": [203, 119, 23, 26], "area": 93}, {"id": 3622229, "category_id": 51, "iscrowd": 0, "bbox": [189, 188, 63, 32], "area": 1545}, {"id": 7895155, "category_id": 51, "iscrowd": 0, "bbox": [203, 296, 137, 88], "area": 5105}, {"id": 5208212, "category_id": 60, "iscrowd": 0, "bbox": [158, 417, 58, 29], "area": 1300}, {"id": 5007492, "category_id": 60, "iscrowd": 0, "bbox": [268, 307, 27, 15], "area": 272}, {"id": 3827592, "category_id": 60, "iscrowd": 0, "bbox": [356, 426, 44, 40], "area": 1368}, {"id": 5205641, "category_id": 60, "iscrowd": 0, "bbox": [149, 444, 52, 28], "area": 846}, {"id": 5011092, "category_id": 60, "iscrowd": 0, "bbox": [247, 423, 52, 47], "area": 1472}, {"id": 5011084, "category_id": 60, "iscrowd": 0, "bbox": [299, 400, 45, 19], "area": 545}, {"id": 4945298, "category_id": 60, "iscrowd": 0, "bbox": [284, 413, 48, 29], "area": 857}, {"id": 3757683, "category_id": 60, "iscrowd": 0, "bbox": [357, 217, 28, 19], "area": 309}, {"id": 6323354, "category_id": 60, "iscrowd": 0, "bbox": [308, 257, 38, 16], "area": 509}, {"id": 5076369, "category_id": 60, "iscrowd": 0, "bbox": [294, 430, 46, 44], "area": 1262}, {"id": 5865629, "category_id": 60, "iscrowd": 0, "bbox": [189, 444, 46, 32], "area": 810}, {"id": 5144480, "category_id": 60, "iscrowd": 0, "bbox": [211, 452, 55, 28], "area": 1116}, {"id": 3562106, "category_id": 60, "iscrowd": 0, "bbox": [331, 426, 28, 26], "area": 553}, {"id": 5532287, "category_id": 60, "iscrowd": 1, "bbox": [159, 180, 403, 300], "area": 10952}, {"id": 3749705, "category_id": 77, "iscrowd": 0, "bbox": [494, 177, 51, 35], "area": 249}, {"id": 4346731, "category_id": 92, "iscrowd": 0, "bbox": [413, 0, 198, 72], "area": 7010}, {"id": 8417633, "category_id": 100, "iscrowd": 0, "bbox": [418, 213, 109, 66], "area": 4221}, {"id": 7437440, "category_id": 107, "iscrowd": 0, "bbox": [0, 175, 640, 305], "area": 50143}, {"id": 8030608, "category_id": 130, "iscrowd": 0, "bbox": [229, 0, 300, 64], "area": 4570}, {"id": 4478066, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 166, 216], "area": 18968}, {"id": 4412002, "category_id": 168, "iscrowd": 0, "bbox": [415, 125, 24, 79], "area": 813}, {"id": 3823452, "category_id": 184, "iscrowd": 0, "bbox": [624, 38, 16, 24], "area": 87}, {"id": 7567743, "category_id": 189, "iscrowd": 0, "bbox": [247, 233, 166, 77], "area": 5232}, {"id": 2302504, "category_id": 190, "iscrowd": 0, "bbox": [594, 413, 46, 67], "area": 2222}, {"id": 7370369, "category_id": 195, "iscrowd": 0, "bbox": [386, 21, 169, 196], "area": 1206}, {"id": 5993097, "category_id": 196, "iscrowd": 0, "bbox": [53, 51, 428, 187], "area": 4457}, {"id": 5531255, "category_id": 199, "iscrowd": 0, "bbox": [464, 0, 63, 77], "area": 2441}], "file_name": "000000450399.png", "image_id": 450399}, {"segments_info": [{"id": 10644879, "category_id": 38, "iscrowd": 0, "bbox": [18, 156, 137, 59], "area": 3500}, {"id": 9331094, "category_id": 38, "iscrowd": 0, "bbox": [260, 20, 221, 170], "area": 22303}, {"id": 13205867, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 234], "area": 90924}], "file_name": "000000450439.png", "image_id": 450439}, {"segments_info": [{"id": 8028564, "category_id": 65, "iscrowd": 0, "bbox": [2, 283, 181, 196], "area": 28004}, {"id": 1578261, "category_id": 72, "iscrowd": 0, "bbox": [231, 188, 47, 64], "area": 2609}, {"id": 4077881, "category_id": 81, "iscrowd": 0, "bbox": [72, 207, 37, 11], "area": 329}, {"id": 4275000, "category_id": 81, "iscrowd": 0, "bbox": [80, 213, 19, 3], "area": 37}, {"id": 9277076, "category_id": 93, "iscrowd": 0, "bbox": [0, 296, 4, 175], "area": 531}, {"id": 7301995, "category_id": 112, "iscrowd": 0, "bbox": [125, 151, 44, 132], "area": 5314}, {"id": 1908779, "category_id": 133, "iscrowd": 0, "bbox": [166, 126, 30, 162], "area": 3762}, {"id": 9076084, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 334, 143], "area": 31088}, {"id": 2960951, "category_id": 188, "iscrowd": 0, "bbox": [68, 152, 48, 106], "area": 3279}, {"id": 4803661, "category_id": 190, "iscrowd": 0, "bbox": [0, 251, 334, 249], "area": 32021}, {"id": 9342349, "category_id": 199, "iscrowd": 0, "bbox": [0, 37, 334, 373], "area": 43447}], "file_name": "000000450488.png", "image_id": 450488}, {"segments_info": [{"id": 6383226, "category_id": 1, "iscrowd": 0, "bbox": [72, 34, 227, 320], "area": 39554}, {"id": 5922665, "category_id": 41, "iscrowd": 0, "bbox": [182, 215, 160, 159], "area": 6403}, {"id": 2834224, "category_id": 184, "iscrowd": 0, "bbox": [168, 0, 226, 29], "area": 3045}, {"id": 4745054, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 427, 463], "area": 128254}, {"id": 15982022, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 178, 41], "area": 5861}, {"id": 13754344, "category_id": 191, "iscrowd": 0, "bbox": [0, 397, 427, 243], "area": 89552}], "file_name": "000000450559.png", "image_id": 450559}, {"segments_info": [{"id": 7046328, "category_id": 1, "iscrowd": 0, "bbox": [26, 173, 361, 467], "area": 53904}, {"id": 5324847, "category_id": 77, "iscrowd": 0, "bbox": [166, 167, 201, 300], "area": 41639}, {"id": 11777974, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 511, 640], "area": 229501}], "file_name": "000000450686.png", "image_id": 450686}, {"segments_info": [{"id": 3686727, "category_id": 25, "iscrowd": 0, "bbox": [444, 123, 92, 116], "area": 2708}, {"id": 3949647, "category_id": 25, "iscrowd": 0, "bbox": [220, 142, 25, 80], "area": 809}, {"id": 3817028, "category_id": 25, "iscrowd": 0, "bbox": [347, 140, 50, 89], "area": 1148}, {"id": 3159355, "category_id": 25, "iscrowd": 0, "bbox": [318, 116, 74, 115], "area": 2089}, {"id": 3949643, "category_id": 25, "iscrowd": 0, "bbox": [296, 159, 46, 68], "area": 900}, {"id": 3554629, "category_id": 25, "iscrowd": 0, "bbox": [264, 144, 33, 79], "area": 927}, {"id": 5857903, "category_id": 25, "iscrowd": 0, "bbox": [103, 136, 29, 81], "area": 1041}, {"id": 4607821, "category_id": 184, "iscrowd": 0, "bbox": [97, 175, 222, 25], "area": 100}, {"id": 15783622, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 206], "area": 116781}, {"id": 3891554, "category_id": 193, "iscrowd": 0, "bbox": [0, 182, 640, 297], "area": 179347}], "file_name": "000000450758.png", "image_id": 450758}, {"segments_info": [{"id": 9535798, "category_id": 1, "iscrowd": 0, "bbox": [165, 146, 86, 156], "area": 6233}, {"id": 14276041, "category_id": 36, "iscrowd": 0, "bbox": [204, 290, 75, 16], "area": 641}, {"id": 15658219, "category_id": 159, "iscrowd": 0, "bbox": [0, 206, 640, 221], "area": 99813}, {"id": 10723996, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 308], "area": 86696}, {"id": 14671323, "category_id": 187, "iscrowd": 0, "bbox": [11, 0, 629, 234], "area": 79616}], "file_name": "000000451043.png", "image_id": 451043}, {"segments_info": [{"id": 7434869, "category_id": 1, "iscrowd": 0, "bbox": [168, 121, 148, 258], "area": 19268}, {"id": 5988449, "category_id": 41, "iscrowd": 0, "bbox": [186, 305, 100, 116], "area": 4176}, {"id": 4412228, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 426, 377], "area": 86651}, {"id": 16380127, "category_id": 187, "iscrowd": 0, "bbox": [68, 0, 358, 207], "area": 41454}, {"id": 12765131, "category_id": 191, "iscrowd": 0, "bbox": [0, 293, 426, 347], "area": 120817}], "file_name": "000000451084.png", "image_id": 451084}, {"segments_info": [{"id": 6646379, "category_id": 9, "iscrowd": 0, "bbox": [148, 117, 233, 201], "area": 26162}, {"id": 4735027, "category_id": 155, "iscrowd": 0, "bbox": [0, 202, 640, 233], "area": 126788}, {"id": 1712423, "category_id": 184, "iscrowd": 0, "bbox": [0, 129, 640, 80], "area": 31437}, {"id": 11183266, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 167], "area": 75128}, {"id": 3815482, "category_id": 192, "iscrowd": 0, "bbox": [0, 87, 561, 87], "area": 18723}], "file_name": "000000451090.png", "image_id": 451090}, {"segments_info": [{"id": 3222844, "category_id": 1, "iscrowd": 0, "bbox": [379, 193, 73, 186], "area": 7577}, {"id": 3223365, "category_id": 1, "iscrowd": 0, "bbox": [517, 204, 72, 158], "area": 6972}, {"id": 3485999, "category_id": 27, "iscrowd": 0, "bbox": [551, 228, 29, 55], "area": 1259}, {"id": 11184037, "category_id": 35, "iscrowd": 0, "bbox": [337, 363, 180, 34], "area": 1218}, {"id": 14802392, "category_id": 159, "iscrowd": 0, "bbox": [0, 323, 640, 157], "area": 68203}, {"id": 2565922, "category_id": 184, "iscrowd": 0, "bbox": [0, 321, 237, 94], "area": 11854}, {"id": 12430490, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 232], "area": 138459}, {"id": 4735029, "category_id": 192, "iscrowd": 0, "bbox": [0, 202, 640, 183], "area": 71341}], "file_name": "000000451144.png", "image_id": 451144}, {"segments_info": [{"id": 6661571, "category_id": 60, "iscrowd": 0, "bbox": [9, 437, 238, 194], "area": 38554}, {"id": 5861773, "category_id": 60, "iscrowd": 0, "bbox": [231, 62, 199, 209], "area": 30882}, {"id": 3882057, "category_id": 60, "iscrowd": 0, "bbox": [1, 14, 239, 229], "area": 45609}, {"id": 6710120, "category_id": 60, "iscrowd": 0, "bbox": [242, 267, 194, 186], "area": 27492}, {"id": 5474233, "category_id": 60, "iscrowd": 0, "bbox": [249, 454, 184, 173], "area": 25955}, {"id": 4474714, "category_id": 60, "iscrowd": 0, "bbox": [14, 235, 228, 191], "area": 34286}, {"id": 9145224, "category_id": 100, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 101325}, {"id": 6391453, "category_id": 196, "iscrowd": 0, "bbox": [47, 424, 171, 216], "area": 2249}], "file_name": "000000451150.png", "image_id": 451150}, {"segments_info": [{"id": 2500649, "category_id": 1, "iscrowd": 0, "bbox": [237, 167, 142, 308], "area": 13154}, {"id": 1250066, "category_id": 65, "iscrowd": 0, "bbox": [5, 300, 474, 111], "area": 37478}, {"id": 2434342, "category_id": 73, "iscrowd": 0, "bbox": [246, 214, 130, 97], "area": 10739}, {"id": 1776667, "category_id": 93, "iscrowd": 0, "bbox": [0, 105, 489, 291], "area": 29720}, {"id": 1908254, "category_id": 112, "iscrowd": 0, "bbox": [376, 0, 264, 480], "area": 53109}, {"id": 3028022, "category_id": 130, "iscrowd": 0, "bbox": [375, 93, 45, 15], "area": 475}, {"id": 922131, "category_id": 141, "iscrowd": 0, "bbox": [0, 309, 12, 52], "area": 549}, {"id": 8750464, "category_id": 199, "iscrowd": 0, "bbox": [0, 157, 401, 162], "area": 37091}], "file_name": "000000451155.png", "image_id": 451155}, {"segments_info": [{"id": 990248, "category_id": 33, "iscrowd": 0, "bbox": [113, 171, 180, 75], "area": 9309}, {"id": 1782860, "category_id": 33, "iscrowd": 0, "bbox": [143, 48, 122, 57], "area": 3500}, {"id": 1393515, "category_id": 33, "iscrowd": 0, "bbox": [107, 132, 179, 67], "area": 8310}, {"id": 1975591, "category_id": 33, "iscrowd": 0, "bbox": [121, 363, 153, 77], "area": 8966}, {"id": 727070, "category_id": 33, "iscrowd": 0, "bbox": [118, 231, 168, 54], "area": 6880}, {"id": 598610, "category_id": 33, "iscrowd": 0, "bbox": [117, 276, 159, 59], "area": 6315}, {"id": 598832, "category_id": 33, "iscrowd": 0, "bbox": [85, 426, 177, 75], "area": 9024}, {"id": 532014, "category_id": 33, "iscrowd": 0, "bbox": [265, 423, 41, 97], "area": 3414}, {"id": 1393496, "category_id": 33, "iscrowd": 0, "bbox": [79, 479, 192, 76], "area": 9447}, {"id": 332595, "category_id": 33, "iscrowd": 0, "bbox": [64, 296, 65, 149], "area": 7525}, {"id": 2118867, "category_id": 33, "iscrowd": 0, "bbox": [136, 102, 139, 39], "area": 4399}, {"id": 3632504, "category_id": 33, "iscrowd": 0, "bbox": [153, 20, 105, 34], "area": 2799}, {"id": 797254, "category_id": 33, "iscrowd": 0, "bbox": [118, 315, 163, 62], "area": 7196}, {"id": 1187637, "category_id": 33, "iscrowd": 1, "bbox": [76, 87, 147, 68], "area": 258}, {"id": 7627345, "category_id": 84, "iscrowd": 0, "bbox": [369, 12, 28, 24], "area": 195}, {"id": 6907230, "category_id": 84, "iscrowd": 0, "bbox": [337, 48, 15, 18], "area": 95}, {"id": 3301234, "category_id": 84, "iscrowd": 0, "bbox": [340, 79, 18, 16], "area": 79}, {"id": 2130858, "category_id": 84, "iscrowd": 0, "bbox": [338, 72, 17, 21], "area": 128}, {"id": 6007748, "category_id": 84, "iscrowd": 0, "bbox": [374, 59, 31, 22], "area": 253}, {"id": 2646138, "category_id": 84, "iscrowd": 0, "bbox": [379, 105, 32, 24], "area": 363}, {"id": 1653665, "category_id": 84, "iscrowd": 0, "bbox": [372, 72, 39, 24], "area": 479}, {"id": 3173770, "category_id": 84, "iscrowd": 0, "bbox": [358, 72, 17, 18], "area": 110}, {"id": 3694710, "category_id": 84, "iscrowd": 0, "bbox": [323, 90, 17, 14], "area": 79}, {"id": 1056818, "category_id": 109, "iscrowd": 0, "bbox": [42, 84, 109, 446], "area": 17501}, {"id": 858426, "category_id": 112, "iscrowd": 0, "bbox": [94, 86, 347, 554], "area": 44390}, {"id": 793670, "category_id": 156, "iscrowd": 0, "bbox": [203, 0, 238, 640], "area": 46446}, {"id": 132375, "category_id": 177, "iscrowd": 0, "bbox": [0, 508, 88, 132], "area": 8232}, {"id": 4948118, "category_id": 186, "iscrowd": 0, "bbox": [36, 0, 231, 32], "area": 5541}, {"id": 2906227, "category_id": 195, "iscrowd": 0, "bbox": [301, 0, 115, 189], "area": 11692}, {"id": 10607334, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 308, 548], "area": 34397}], "file_name": "000000451308.png", "image_id": 451308}, {"segments_info": [{"id": 10726588, "category_id": 1, "iscrowd": 0, "bbox": [42, 66, 37, 89], "area": 1600}, {"id": 9487043, "category_id": 37, "iscrowd": 0, "bbox": [98, 115, 5, 5], "area": 20}, {"id": 8169125, "category_id": 37, "iscrowd": 0, "bbox": [443, 255, 5, 6], "area": 25}, {"id": 10734299, "category_id": 43, "iscrowd": 0, "bbox": [23, 111, 36, 14], "area": 229}, {"id": 7105909, "category_id": 138, "iscrowd": 0, "bbox": [28, 269, 390, 116], "area": 18077}, {"id": 7105917, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 385], "area": 198913}, {"id": 6121076, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 146, 36], "area": 3425}, {"id": 4015156, "category_id": 199, "iscrowd": 0, "bbox": [168, 0, 472, 97], "area": 24035}], "file_name": "000000451435.png", "image_id": 451435}, {"segments_info": [{"id": 4878484, "category_id": 54, "iscrowd": 0, "bbox": [52, 77, 347, 219], "area": 50044}, {"id": 3682655, "category_id": 62, "iscrowd": 0, "bbox": [446, 3, 163, 119], "area": 11927}, {"id": 7498350, "category_id": 93, "iscrowd": 0, "bbox": [424, 94, 156, 83], "area": 7045}, {"id": 5209216, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 198], "area": 60855}, {"id": 5539224, "category_id": 196, "iscrowd": 0, "bbox": [11, 50, 629, 386], "area": 92836}], "file_name": "000000451571.png", "image_id": 451571}, {"segments_info": [{"id": 6125975, "category_id": 59, "iscrowd": 0, "bbox": [69, 51, 504, 313], "area": 120094}], "file_name": "000000451693.png", "image_id": 451693}, {"segments_info": [{"id": 6776687, "category_id": 1, "iscrowd": 0, "bbox": [328, 152, 4, 10], "area": 25}, {"id": 3353181, "category_id": 1, "iscrowd": 0, "bbox": [179, 106, 141, 458], "area": 40804}, {"id": 7302000, "category_id": 1, "iscrowd": 0, "bbox": [322, 161, 5, 6], "area": 21}, {"id": 5983573, "category_id": 1, "iscrowd": 0, "bbox": [156, 204, 35, 121], "area": 1881}, {"id": 8945796, "category_id": 1, "iscrowd": 0, "bbox": [447, 148, 6, 12], "area": 49}, {"id": 9208985, "category_id": 35, "iscrowd": 0, "bbox": [121, 496, 359, 140], "area": 8750}, {"id": 12432827, "category_id": 159, "iscrowd": 0, "bbox": [0, 146, 480, 494], "area": 183231}, {"id": 2762279, "category_id": 184, "iscrowd": 0, "bbox": [175, 109, 305, 57], "area": 6829}, {"id": 6505012, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 480, 155], "area": 64992}], "file_name": "000000451714.png", "image_id": 451714}, {"segments_info": [{"id": 8031380, "category_id": 1, "iscrowd": 0, "bbox": [355, 0, 126, 282], "area": 13153}, {"id": 5137743, "category_id": 1, "iscrowd": 0, "bbox": [248, 131, 246, 301], "area": 38146}, {"id": 9869473, "category_id": 1, "iscrowd": 0, "bbox": [0, 89, 297, 343], "area": 52856}, {"id": 10725813, "category_id": 1, "iscrowd": 0, "bbox": [0, 78, 136, 360], "area": 25362}, {"id": 9288657, "category_id": 37, "iscrowd": 0, "bbox": [240, 15, 30, 29], "area": 692}, {"id": 2171942, "category_id": 40, "iscrowd": 0, "bbox": [44, 129, 79, 59], "area": 3170}, {"id": 3833473, "category_id": 193, "iscrowd": 0, "bbox": [128, 160, 372, 278], "area": 24057}, {"id": 2896161, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 173], "area": 54834}], "file_name": "000000451879.png", "image_id": 451879}, {"segments_info": [{"id": 15398643, "category_id": 48, "iscrowd": 0, "bbox": [217, 282, 405, 295], "area": 25501}, {"id": 4082032, "category_id": 51, "iscrowd": 0, "bbox": [247, 75, 388, 462], "area": 102180}, {"id": 460561, "category_id": 51, "iscrowd": 0, "bbox": [9, 23, 360, 352], "area": 36402}, {"id": 1978446, "category_id": 58, "iscrowd": 0, "bbox": [290, 165, 156, 198], "area": 10903}, {"id": 7440021, "category_id": 67, "iscrowd": 0, "bbox": [0, 33, 602, 597], "area": 110965}, {"id": 658222, "category_id": 189, "iscrowd": 0, "bbox": [58, 306, 197, 73], "area": 1290}, {"id": 6984866, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 320, 293], "area": 54600}], "file_name": "000000452084.png", "image_id": 452084}, {"segments_info": [{"id": 9668484, "category_id": 5, "iscrowd": 0, "bbox": [80, 133, 463, 138], "area": 25115}, {"id": 11445153, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 247671}], "file_name": "000000452122.png", "image_id": 452122}, {"segments_info": [{"id": 5330552, "category_id": 6, "iscrowd": 0, "bbox": [287, 224, 111, 66], "area": 5845}, {"id": 2567500, "category_id": 6, "iscrowd": 0, "bbox": [2, 209, 184, 88], "area": 14228}, {"id": 3554413, "category_id": 6, "iscrowd": 0, "bbox": [173, 219, 118, 74], "area": 6751}, {"id": 3225436, "category_id": 6, "iscrowd": 0, "bbox": [389, 136, 251, 299], "area": 67222}, {"id": 6056818, "category_id": 149, "iscrowd": 0, "bbox": [0, 249, 640, 231], "area": 88381}, {"id": 4345668, "category_id": 184, "iscrowd": 0, "bbox": [108, 137, 161, 63], "area": 5938}, {"id": 12758164, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 187], "area": 99014}, {"id": 10597574, "category_id": 197, "iscrowd": 0, "bbox": [0, 157, 407, 147], "area": 17740}], "file_name": "000000452321.png", "image_id": 452321}, {"segments_info": [{"id": 11913689, "category_id": 1, "iscrowd": 0, "bbox": [87, 310, 85, 164], "area": 4922}, {"id": 5658974, "category_id": 1, "iscrowd": 0, "bbox": [170, 36, 42, 103], "area": 2318}, {"id": 3955068, "category_id": 1, "iscrowd": 0, "bbox": [41, 14, 40, 96], "area": 937}, {"id": 3056546, "category_id": 37, "iscrowd": 0, "bbox": [90, 168, 10, 15], "area": 114}, {"id": 10265005, "category_id": 43, "iscrowd": 0, "bbox": [167, 338, 19, 56], "area": 532}, {"id": 11446950, "category_id": 145, "iscrowd": 0, "bbox": [0, 198, 224, 302], "area": 60754}, {"id": 6510152, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 224, 209], "area": 36852}], "file_name": "000000452515.png", "image_id": 452515}, {"segments_info": [{"id": 7697070, "category_id": 1, "iscrowd": 0, "bbox": [1, 63, 406, 232], "area": 63634}, {"id": 4280814, "category_id": 51, "iscrowd": 0, "bbox": [0, 304, 480, 336], "area": 31505}, {"id": 3819846, "category_id": 56, "iscrowd": 0, "bbox": [334, 457, 73, 86], "area": 4168}, {"id": 3885901, "category_id": 56, "iscrowd": 0, "bbox": [61, 381, 419, 259], "area": 66539}, {"id": 3557725, "category_id": 56, "iscrowd": 0, "bbox": [73, 326, 406, 243], "area": 20908}, {"id": 6511727, "category_id": 81, "iscrowd": 0, "bbox": [0, 266, 275, 132], "area": 20005}, {"id": 3814735, "category_id": 175, "iscrowd": 0, "bbox": [134, 169, 346, 164], "area": 19924}, {"id": 12696795, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 480, 177], "area": 39733}, {"id": 15720943, "category_id": 178, "iscrowd": 0, "bbox": [273, 24, 73, 85], "area": 2575}, {"id": 4740956, "category_id": 196, "iscrowd": 0, "bbox": [298, 261, 182, 250], "area": 16624}], "file_name": "000000452784.png", "image_id": 452784}, {"segments_info": [{"id": 3953508, "category_id": 81, "iscrowd": 0, "bbox": [256, 202, 107, 26], "area": 1217}, {"id": 5659491, "category_id": 82, "iscrowd": 0, "bbox": [374, 50, 266, 371], "area": 84367}, {"id": 4942983, "category_id": 107, "iscrowd": 0, "bbox": [15, 164, 370, 263], "area": 12119}, {"id": 11519189, "category_id": 112, "iscrowd": 0, "bbox": [325, 83, 18, 70], "area": 788}, {"id": 4944796, "category_id": 130, "iscrowd": 0, "bbox": [252, 29, 174, 45], "area": 1194}, {"id": 14082281, "category_id": 180, "iscrowd": 0, "bbox": [65, 66, 263, 141], "area": 18945}, {"id": 2439522, "category_id": 188, "iscrowd": 0, "bbox": [17, 0, 623, 427], "area": 39869}, {"id": 6390691, "category_id": 190, "iscrowd": 0, "bbox": [25, 221, 343, 206], "area": 36714}, {"id": 6981285, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 75590}], "file_name": "000000452793.png", "image_id": 452793}, {"segments_info": [{"id": 5527135, "category_id": 15, "iscrowd": 0, "bbox": [3, 2, 472, 630], "area": 195448}, {"id": 11581373, "category_id": 18, "iscrowd": 0, "bbox": [59, 84, 353, 463], "area": 90388}, {"id": 7764604, "category_id": 191, "iscrowd": 0, "bbox": [290, 491, 188, 149], "area": 10384}], "file_name": "000000452891.png", "image_id": 452891}, {"segments_info": [{"id": 4348008, "category_id": 1, "iscrowd": 0, "bbox": [353, 110, 201, 274], "area": 14062}, {"id": 2568247, "category_id": 1, "iscrowd": 0, "bbox": [142, 19, 135, 451], "area": 31871}, {"id": 7043968, "category_id": 15, "iscrowd": 0, "bbox": [493, 282, 146, 190], "area": 17519}, {"id": 4011569, "category_id": 33, "iscrowd": 0, "bbox": [265, 263, 110, 147], "area": 8132}, {"id": 3494487, "category_id": 64, "iscrowd": 0, "bbox": [387, 209, 33, 88], "area": 1749}, {"id": 1780266, "category_id": 64, "iscrowd": 0, "bbox": [0, 229, 158, 161], "area": 18653}, {"id": 3099209, "category_id": 64, "iscrowd": 0, "bbox": [461, 235, 92, 110], "area": 5041}, {"id": 1318685, "category_id": 64, "iscrowd": 0, "bbox": [0, 365, 158, 115], "area": 14633}, {"id": 1844514, "category_id": 64, "iscrowd": 0, "bbox": [524, 131, 43, 78], "area": 2114}, {"id": 1977895, "category_id": 64, "iscrowd": 0, "bbox": [9, 167, 68, 38], "area": 926}, {"id": 2635594, "category_id": 112, "iscrowd": 0, "bbox": [252, 159, 76, 91], "area": 3745}, {"id": 5787712, "category_id": 151, "iscrowd": 0, "bbox": [57, 66, 114, 57], "area": 2279}, {"id": 3623506, "category_id": 161, "iscrowd": 0, "bbox": [34, 142, 55, 40], "area": 1071}, {"id": 4349785, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 95520}, {"id": 15790318, "category_id": 187, "iscrowd": 0, "bbox": [53, 0, 439, 70], "area": 4548}, {"id": 5597033, "category_id": 190, "iscrowd": 0, "bbox": [73, 248, 497, 232], "area": 49343}, {"id": 8626600, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 331], "area": 32835}], "file_name": "000000453001.png", "image_id": 453001}, {"segments_info": [{"id": 5269615, "category_id": 61, "iscrowd": 0, "bbox": [60, 230, 332, 410], "area": 94506}, {"id": 6187375, "category_id": 67, "iscrowd": 0, "bbox": [0, 292, 480, 108], "area": 7482}, {"id": 3556426, "category_id": 119, "iscrowd": 0, "bbox": [0, 42, 480, 598], "area": 89415}, {"id": 2307118, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 18768}, {"id": 4019287, "category_id": 189, "iscrowd": 0, "bbox": [395, 342, 85, 56], "area": 1012}, {"id": 6121068, "category_id": 190, "iscrowd": 0, "bbox": [0, 68, 480, 308], "area": 35489}, {"id": 9153189, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 480, 339], "area": 30040}, {"id": 4349545, "category_id": 196, "iscrowd": 0, "bbox": [245, 343, 223, 297], "area": 17036}, {"id": 15330029, "category_id": 197, "iscrowd": 0, "bbox": [90, 0, 266, 55], "area": 10632}], "file_name": "000000453040.png", "image_id": 453040}, {"segments_info": [{"id": 4799547, "category_id": 1, "iscrowd": 0, "bbox": [315, 41, 150, 383], "area": 37931}, {"id": 4472897, "category_id": 1, "iscrowd": 0, "bbox": [3, 57, 168, 362], "area": 40715}, {"id": 3944754, "category_id": 1, "iscrowd": 0, "bbox": [454, 46, 175, 375], "area": 46776}, {"id": 4536117, "category_id": 1, "iscrowd": 0, "bbox": [166, 41, 159, 384], "area": 38925}, {"id": 2762276, "category_id": 32, "iscrowd": 0, "bbox": [505, 116, 13, 22], "area": 135}, {"id": 7307920, "category_id": 32, "iscrowd": 0, "bbox": [89, 145, 18, 75], "area": 696}, {"id": 2499618, "category_id": 32, "iscrowd": 0, "bbox": [248, 116, 15, 41], "area": 352}, {"id": 2696483, "category_id": 32, "iscrowd": 0, "bbox": [371, 117, 16, 40], "area": 325}, {"id": 8552823, "category_id": 92, "iscrowd": 0, "bbox": [0, 83, 68, 276], "area": 5161}], "file_name": "000000453166.png", "image_id": 453166}, {"segments_info": [{"id": 6455946, "category_id": 44, "iscrowd": 0, "bbox": [61, 31, 209, 207], "area": 1611}, {"id": 919563, "category_id": 62, "iscrowd": 0, "bbox": [443, 208, 48, 25], "area": 688}, {"id": 7499892, "category_id": 78, "iscrowd": 0, "bbox": [43, 85, 96, 57], "area": 3424}, {"id": 9736851, "category_id": 78, "iscrowd": 0, "bbox": [160, 179, 82, 49], "area": 2844}, {"id": 12630711, "category_id": 80, "iscrowd": 0, "bbox": [248, 194, 33, 28], "area": 729}, {"id": 5790825, "category_id": 81, "iscrowd": 0, "bbox": [287, 205, 68, 16], "area": 452}, {"id": 8487040, "category_id": 82, "iscrowd": 0, "bbox": [20, 142, 142, 233], "area": 29604}, {"id": 2766412, "category_id": 112, "iscrowd": 0, "bbox": [404, 63, 96, 297], "area": 22033}, {"id": 16382453, "category_id": 130, "iscrowd": 0, "bbox": [349, 0, 48, 20], "area": 657}, {"id": 12172221, "category_id": 151, "iscrowd": 0, "bbox": [388, 0, 22, 12], "area": 160}, {"id": 10527917, "category_id": 177, "iscrowd": 0, "bbox": [297, 0, 203, 310], "area": 15851}, {"id": 5792635, "category_id": 181, "iscrowd": 0, "bbox": [324, 8, 176, 173], "area": 12818}, {"id": 11910339, "category_id": 186, "iscrowd": 0, "bbox": [167, 0, 292, 56], "area": 8455}, {"id": 2172495, "category_id": 188, "iscrowd": 0, "bbox": [155, 212, 200, 163], "area": 16770}, {"id": 10988462, "category_id": 189, "iscrowd": 0, "bbox": [159, 213, 96, 32], "area": 792}, {"id": 3757160, "category_id": 190, "iscrowd": 0, "bbox": [164, 291, 336, 84], "area": 16042}, {"id": 10793143, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 323, 375], "area": 39671}], "file_name": "000000453302.png", "image_id": 453302}, {"segments_info": [{"id": 7304836, "category_id": 63, "iscrowd": 0, "bbox": [38, 328, 602, 147], "area": 45228}, {"id": 6645087, "category_id": 72, "iscrowd": 0, "bbox": [0, 228, 76, 94], "area": 6128}, {"id": 12369344, "category_id": 72, "iscrowd": 0, "bbox": [514, 235, 21, 64], "area": 1204}, {"id": 10985887, "category_id": 74, "iscrowd": 0, "bbox": [67, 327, 7, 10], "area": 53}, {"id": 7500658, "category_id": 76, "iscrowd": 0, "bbox": [0, 313, 52, 25], "area": 853}, {"id": 9406079, "category_id": 77, "iscrowd": 0, "bbox": [106, 310, 36, 34], "area": 382}, {"id": 8879747, "category_id": 88, "iscrowd": 0, "bbox": [225, 309, 47, 41], "area": 1236}, {"id": 10721681, "category_id": 130, "iscrowd": 0, "bbox": [138, 228, 59, 94], "area": 2933}, {"id": 10593189, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 389, 34], "area": 7823}, {"id": 4604995, "category_id": 189, "iscrowd": 0, "bbox": [0, 305, 181, 97], "area": 9484}, {"id": 11775917, "category_id": 195, "iscrowd": 0, "bbox": [116, 194, 51, 148], "area": 2369}, {"id": 13619148, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 435], "area": 50013}], "file_name": "000000453341.png", "image_id": 453341}, {"segments_info": [{"id": 6971809, "category_id": 15, "iscrowd": 0, "bbox": [252, 165, 266, 181], "area": 24535}, {"id": 8947848, "category_id": 62, "iscrowd": 0, "bbox": [322, 154, 49, 111], "area": 1435}, {"id": 7960953, "category_id": 62, "iscrowd": 0, "bbox": [493, 154, 30, 69], "area": 918}, {"id": 7829112, "category_id": 62, "iscrowd": 0, "bbox": [395, 160, 41, 24], "area": 866}, {"id": 8882056, "category_id": 62, "iscrowd": 0, "bbox": [239, 150, 55, 114], "area": 2637}, {"id": 8947591, "category_id": 62, "iscrowd": 0, "bbox": [434, 164, 38, 16], "area": 350}, {"id": 8684674, "category_id": 62, "iscrowd": 0, "bbox": [316, 162, 13, 32], "area": 279}, {"id": 3356216, "category_id": 144, "iscrowd": 0, "bbox": [91, 243, 484, 112], "area": 25515}, {"id": 13947596, "category_id": 149, "iscrowd": 0, "bbox": [8, 249, 95, 42], "area": 2792}, {"id": 15395300, "category_id": 155, "iscrowd": 0, "bbox": [0, 193, 108, 81], "area": 5597}, {"id": 3751229, "category_id": 177, "iscrowd": 0, "bbox": [179, 176, 69, 80], "area": 4554}, {"id": 14735304, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 199, 203], "area": 30138}, {"id": 10001055, "category_id": 191, "iscrowd": 0, "bbox": [0, 246, 640, 234], "area": 107089}, {"id": 6383980, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 316], "area": 95849}], "file_name": "000000453584.png", "image_id": 453584}, {"segments_info": [{"id": 5937845, "category_id": 70, "iscrowd": 0, "bbox": [60, 351, 232, 182], "area": 28187}, {"id": 7779787, "category_id": 81, "iscrowd": 0, "bbox": [252, 456, 225, 177], "area": 31911}, {"id": 3633029, "category_id": 133, "iscrowd": 0, "bbox": [459, 354, 21, 26], "area": 437}, {"id": 2578289, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 480, 572], "area": 103147}, {"id": 1191497, "category_id": 188, "iscrowd": 0, "bbox": [178, 412, 278, 228], "area": 16532}, {"id": 1986928, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 309, 640], "area": 67571}, {"id": 5278628, "category_id": 200, "iscrowd": 0, "bbox": [0, 412, 103, 228], "area": 14180}], "file_name": "000000453634.png", "image_id": 453634}, {"segments_info": [{"id": 1646372, "category_id": 1, "iscrowd": 0, "bbox": [0, 174, 64, 138], "area": 4607}, {"id": 1448997, "category_id": 1, "iscrowd": 0, "bbox": [453, 236, 116, 191], "area": 10373}, {"id": 329221, "category_id": 1, "iscrowd": 0, "bbox": [0, 347, 181, 80], "area": 11802}, {"id": 4937572, "category_id": 1, "iscrowd": 0, "bbox": [468, 223, 26, 41], "area": 739}, {"id": 2500397, "category_id": 1, "iscrowd": 0, "bbox": [177, 331, 72, 96], "area": 4125}, {"id": 3292231, "category_id": 1, "iscrowd": 0, "bbox": [517, 239, 47, 142], "area": 2848}, {"id": 988193, "category_id": 1, "iscrowd": 0, "bbox": [215, 171, 187, 250], "area": 23882}, {"id": 3354410, "category_id": 1, "iscrowd": 0, "bbox": [0, 255, 84, 128], "area": 6351}, {"id": 2567992, "category_id": 1, "iscrowd": 0, "bbox": [601, 245, 39, 132], "area": 3874}, {"id": 2379331, "category_id": 52, "iscrowd": 0, "bbox": [303, 124, 121, 58], "area": 4670}, {"id": 1649461, "category_id": 52, "iscrowd": 0, "bbox": [127, 290, 19, 24], "area": 296}, {"id": 2378305, "category_id": 52, "iscrowd": 0, "bbox": [233, 5, 196, 171], "area": 21861}, {"id": 2638651, "category_id": 52, "iscrowd": 0, "bbox": [412, 145, 51, 82], "area": 2262}, {"id": 3234404, "category_id": 52, "iscrowd": 0, "bbox": [93, 316, 65, 50], "area": 2086}, {"id": 2242368, "category_id": 122, "iscrowd": 0, "bbox": [60, 133, 383, 255], "area": 13599}, {"id": 12044758, "category_id": 187, "iscrowd": 0, "bbox": [392, 0, 91, 150], "area": 6935}, {"id": 1383970, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 395, 273], "area": 63382}], "file_name": "000000453708.png", "image_id": 453708}, {"segments_info": [{"id": 8947600, "category_id": 62, "iscrowd": 0, "bbox": [1, 263, 209, 157], "area": 6931}, {"id": 6253443, "category_id": 63, "iscrowd": 0, "bbox": [0, 304, 209, 117], "area": 18155}, {"id": 6710372, "category_id": 63, "iscrowd": 0, "bbox": [558, 216, 82, 181], "area": 9547}, {"id": 3420200, "category_id": 72, "iscrowd": 0, "bbox": [174, 140, 96, 62], "area": 5115}, {"id": 3883071, "category_id": 109, "iscrowd": 0, "bbox": [0, 27, 206, 250], "area": 11463}, {"id": 14539987, "category_id": 112, "iscrowd": 0, "bbox": [13, 47, 176, 248], "area": 27544}, {"id": 8492457, "category_id": 118, "iscrowd": 0, "bbox": [118, 229, 522, 198], "area": 70904}, {"id": 10330789, "category_id": 130, "iscrowd": 0, "bbox": [0, 186, 51, 55], "area": 1736}, {"id": 1914711, "category_id": 156, "iscrowd": 0, "bbox": [283, 99, 233, 26], "area": 3525}, {"id": 4607569, "category_id": 175, "iscrowd": 0, "bbox": [280, 16, 235, 248], "area": 43911}, {"id": 5199438, "category_id": 177, "iscrowd": 0, "bbox": [46, 17, 594, 232], "area": 45006}, {"id": 10662553, "category_id": 181, "iscrowd": 0, "bbox": [621, 51, 19, 70], "area": 984}, {"id": 8751237, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 52], "area": 18422}, {"id": 12695216, "category_id": 189, "iscrowd": 0, "bbox": [34, 251, 66, 40], "area": 1174}, {"id": 6314581, "category_id": 191, "iscrowd": 0, "bbox": [265, 237, 272, 33], "area": 3404}], "file_name": "000000453722.png", "image_id": 453722}, {"segments_info": [{"id": 723211, "category_id": 1, "iscrowd": 0, "bbox": [386, 182, 14, 39], "area": 377}, {"id": 854546, "category_id": 1, "iscrowd": 0, "bbox": [263, 184, 19, 14], "area": 217}, {"id": 1712946, "category_id": 3, "iscrowd": 0, "bbox": [201, 162, 201, 165], "area": 26267}, {"id": 1381929, "category_id": 3, "iscrowd": 0, "bbox": [195, 196, 8, 10], "area": 65}, {"id": 723985, "category_id": 3, "iscrowd": 0, "bbox": [0, 210, 31, 89], "area": 1963}, {"id": 1381658, "category_id": 3, "iscrowd": 0, "bbox": [188, 197, 7, 11], "area": 61}, {"id": 2170648, "category_id": 3, "iscrowd": 0, "bbox": [460, 170, 39, 29], "area": 845}, {"id": 3552558, "category_id": 3, "iscrowd": 0, "bbox": [378, 190, 9, 8], "area": 27}, {"id": 592660, "category_id": 8, "iscrowd": 0, "bbox": [2, 145, 148, 119], "area": 13819}, {"id": 1317207, "category_id": 10, "iscrowd": 0, "bbox": [315, 111, 16, 27], "area": 421}, {"id": 921371, "category_id": 10, "iscrowd": 0, "bbox": [331, 112, 8, 20], "area": 102}, {"id": 2436441, "category_id": 10, "iscrowd": 0, "bbox": [137, 21, 18, 37], "area": 642}, {"id": 856115, "category_id": 10, "iscrowd": 0, "bbox": [428, 45, 36, 60], "area": 1959}, {"id": 723207, "category_id": 10, "iscrowd": 0, "bbox": [425, 132, 9, 19], "area": 131}, {"id": 266517, "category_id": 11, "iscrowd": 0, "bbox": [466, 221, 20, 38], "area": 504}, {"id": 657672, "category_id": 149, "iscrowd": 0, "bbox": [0, 208, 500, 131], "area": 32845}, {"id": 461066, "category_id": 184, "iscrowd": 0, "bbox": [64, 111, 160, 100], "area": 7668}, {"id": 11780533, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 162], "area": 57820}, {"id": 1447699, "category_id": 191, "iscrowd": 0, "bbox": [415, 234, 85, 52], "area": 2031}, {"id": 1184532, "category_id": 197, "iscrowd": 0, "bbox": [0, 100, 500, 199], "area": 15911}], "file_name": "000000453841.png", "image_id": 453841}, {"segments_info": [{"id": 2237219, "category_id": 33, "iscrowd": 0, "bbox": [33, 35, 243, 322], "area": 62964}, {"id": 3487029, "category_id": 33, "iscrowd": 0, "bbox": [344, 41, 261, 337], "area": 68519}], "file_name": "000000453860.png", "image_id": 453860}, {"segments_info": [{"id": 4472636, "category_id": 23, "iscrowd": 0, "bbox": [113, 168, 496, 257], "area": 64923}, {"id": 3554362, "category_id": 23, "iscrowd": 0, "bbox": [211, 102, 211, 241], "area": 26271}, {"id": 6073225, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 180781}], "file_name": "000000453981.png", "image_id": 453981}, {"segments_info": [{"id": 7765092, "category_id": 1, "iscrowd": 0, "bbox": [198, 36, 282, 370], "area": 60939}, {"id": 6263647, "category_id": 72, "iscrowd": 0, "bbox": [87, 90, 135, 129], "area": 14850}, {"id": 13355472, "category_id": 75, "iscrowd": 0, "bbox": [453, 346, 20, 24], "area": 247}, {"id": 3685442, "category_id": 84, "iscrowd": 0, "bbox": [286, 24, 11, 4], "area": 39}, {"id": 3686221, "category_id": 84, "iscrowd": 0, "bbox": [223, 128, 45, 18], "area": 424}, {"id": 7031094, "category_id": 84, "iscrowd": 0, "bbox": [352, 39, 4, 24], "area": 93}, {"id": 5658227, "category_id": 84, "iscrowd": 0, "bbox": [313, 27, 15, 6], "area": 46}, {"id": 6317165, "category_id": 156, "iscrowd": 0, "bbox": [279, 0, 105, 98], "area": 6149}, {"id": 4737353, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 75, 213], "area": 13847}, {"id": 2501946, "category_id": 189, "iscrowd": 0, "bbox": [23, 195, 477, 174], "area": 7655}, {"id": 5856609, "category_id": 190, "iscrowd": 0, "bbox": [24, 279, 476, 127], "area": 12663}, {"id": 6910578, "category_id": 195, "iscrowd": 0, "bbox": [0, 74, 273, 172], "area": 3954}, {"id": 12961480, "category_id": 199, "iscrowd": 0, "bbox": [49, 0, 451, 180], "area": 23774}, {"id": 7045525, "category_id": 200, "iscrowd": 0, "bbox": [0, 308, 385, 98], "area": 14684}], "file_name": "000000454067.png", "image_id": 454067}, {"segments_info": [{"id": 4208495, "category_id": 1, "iscrowd": 0, "bbox": [246, 26, 194, 436], "area": 51235}, {"id": 3415933, "category_id": 15, "iscrowd": 0, "bbox": [32, 189, 260, 333], "area": 57224}, {"id": 1775648, "category_id": 64, "iscrowd": 0, "bbox": [419, 5, 221, 514], "area": 87508}, {"id": 6836124, "category_id": 77, "iscrowd": 0, "bbox": [265, 182, 33, 27], "area": 291}, {"id": 4668806, "category_id": 109, "iscrowd": 0, "bbox": [412, 0, 228, 162], "area": 14952}, {"id": 4598196, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 460, 529], "area": 99335}], "file_name": "000000454404.png", "image_id": 454404}, {"segments_info": [{"id": 6840930, "category_id": 3, "iscrowd": 0, "bbox": [247, 186, 393, 174], "area": 56226}, {"id": 3946050, "category_id": 3, "iscrowd": 0, "bbox": [150, 208, 150, 116], "area": 10652}, {"id": 2893871, "category_id": 3, "iscrowd": 0, "bbox": [0, 185, 180, 188], "area": 28442}, {"id": 4672350, "category_id": 6, "iscrowd": 0, "bbox": [250, 122, 168, 101], "area": 10309}, {"id": 987151, "category_id": 10, "iscrowd": 0, "bbox": [41, 118, 16, 31], "area": 457}, {"id": 723720, "category_id": 10, "iscrowd": 0, "bbox": [51, 169, 8, 16], "area": 128}, {"id": 3882568, "category_id": 10, "iscrowd": 0, "bbox": [273, 38, 43, 112], "area": 4106}, {"id": 3027767, "category_id": 10, "iscrowd": 0, "bbox": [235, 63, 33, 100], "area": 3216}, {"id": 2762537, "category_id": 10, "iscrowd": 0, "bbox": [60, 162, 19, 26], "area": 415}, {"id": 4474955, "category_id": 10, "iscrowd": 0, "bbox": [166, 117, 27, 69], "area": 1745}, {"id": 1183501, "category_id": 149, "iscrowd": 0, "bbox": [168, 305, 87, 76], "area": 3486}, {"id": 12170163, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 165, 75], "area": 5969}, {"id": 3487031, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 241], "area": 100716}], "file_name": "000000454661.png", "image_id": 454661}, {"segments_info": [{"id": 3225146, "category_id": 24, "iscrowd": 0, "bbox": [0, 14, 413, 407], "area": 99236}, {"id": 4476243, "category_id": 24, "iscrowd": 0, "bbox": [236, 168, 346, 259], "area": 59628}, {"id": 16316142, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 296], "area": 90275}, {"id": 6392743, "category_id": 193, "iscrowd": 0, "bbox": [152, 263, 488, 164], "area": 22153}], "file_name": "000000454750.png", "image_id": 454750}, {"segments_info": [{"id": 7831952, "category_id": 1, "iscrowd": 0, "bbox": [539, 137, 17, 25], "area": 205}, {"id": 2569798, "category_id": 1, "iscrowd": 0, "bbox": [267, 63, 69, 165], "area": 5943}, {"id": 5721708, "category_id": 1, "iscrowd": 0, "bbox": [602, 156, 15, 21], "area": 86}, {"id": 7239552, "category_id": 6, "iscrowd": 0, "bbox": [451, 143, 84, 31], "area": 1834}, {"id": 5854029, "category_id": 8, "iscrowd": 0, "bbox": [567, 151, 58, 14], "area": 663}, {"id": 4612228, "category_id": 19, "iscrowd": 0, "bbox": [141, 101, 286, 262], "area": 23980}, {"id": 3951980, "category_id": 19, "iscrowd": 0, "bbox": [527, 150, 41, 40], "area": 313}, {"id": 6915231, "category_id": 144, "iscrowd": 0, "bbox": [158, 288, 373, 112], "area": 18082}, {"id": 8890309, "category_id": 154, "iscrowd": 0, "bbox": [0, 188, 640, 237], "area": 112090}, {"id": 5198673, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 164], "area": 86358}, {"id": 4610148, "category_id": 185, "iscrowd": 0, "bbox": [0, 143, 640, 70], "area": 15432}, {"id": 13942190, "category_id": 187, "iscrowd": 0, "bbox": [418, 0, 222, 29], "area": 1578}, {"id": 6846332, "category_id": 193, "iscrowd": 0, "bbox": [534, 130, 106, 46], "area": 1587}], "file_name": "000000454798.png", "image_id": 454798}, {"segments_info": [{"id": 2960946, "category_id": 4, "iscrowd": 0, "bbox": [125, 213, 112, 161], "area": 10695}, {"id": 7043206, "category_id": 149, "iscrowd": 0, "bbox": [0, 158, 640, 242], "area": 88762}, {"id": 3817796, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 215], "area": 87050}, {"id": 2106665, "category_id": 185, "iscrowd": 0, "bbox": [396, 155, 244, 76], "area": 4369}, {"id": 15986666, "category_id": 187, "iscrowd": 0, "bbox": [111, 0, 498, 112], "area": 22158}, {"id": 3952988, "category_id": 194, "iscrowd": 0, "bbox": [0, 156, 640, 231], "area": 42358}], "file_name": "000000454978.png", "image_id": 454978}, {"segments_info": [{"id": 10661566, "category_id": 1, "iscrowd": 0, "bbox": [178, 257, 46, 67], "area": 2208}, {"id": 8151694, "category_id": 6, "iscrowd": 0, "bbox": [3, 5, 410, 548], "area": 178936}, {"id": 2436199, "category_id": 130, "iscrowd": 0, "bbox": [0, 321, 35, 319], "area": 2880}, {"id": 4073271, "category_id": 149, "iscrowd": 0, "bbox": [253, 371, 174, 269], "area": 18769}, {"id": 15695206, "category_id": 187, "iscrowd": 0, "bbox": [224, 0, 203, 212], "area": 31421}, {"id": 3416368, "category_id": 191, "iscrowd": 0, "bbox": [371, 442, 56, 198], "area": 6490}, {"id": 6107962, "category_id": 197, "iscrowd": 0, "bbox": [275, 133, 152, 240], "area": 9109}], "file_name": "000000455085.png", "image_id": 455085}, {"segments_info": [{"id": 7237247, "category_id": 1, "iscrowd": 0, "bbox": [159, 158, 174, 346], "area": 27763}, {"id": 4148084, "category_id": 15, "iscrowd": 0, "bbox": [354, 329, 280, 167], "area": 10695}, {"id": 4477562, "category_id": 15, "iscrowd": 0, "bbox": [210, 366, 250, 198], "area": 26379}, {"id": 3824287, "category_id": 15, "iscrowd": 0, "bbox": [547, 323, 93, 48], "area": 2537}, {"id": 8942188, "category_id": 28, "iscrowd": 0, "bbox": [244, 136, 202, 172], "area": 21913}, {"id": 5003665, "category_id": 67, "iscrowd": 0, "bbox": [286, 292, 302, 234], "area": 21747}, {"id": 4412291, "category_id": 67, "iscrowd": 0, "bbox": [531, 258, 109, 68], "area": 3652}, {"id": 4670544, "category_id": 73, "iscrowd": 0, "bbox": [275, 272, 66, 27], "area": 785}, {"id": 6712184, "category_id": 181, "iscrowd": 0, "bbox": [56, 0, 584, 227], "area": 91684}, {"id": 10526879, "category_id": 191, "iscrowd": 0, "bbox": [0, 396, 640, 244], "area": 76701}, {"id": 7766431, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 623], "area": 53683}], "file_name": "000000455157.png", "image_id": 455157}, {"segments_info": [{"id": 11575721, "category_id": 1, "iscrowd": 0, "bbox": [309, 197, 26, 37], "area": 453}, {"id": 6578271, "category_id": 1, "iscrowd": 0, "bbox": [473, 203, 72, 167], "area": 5903}, {"id": 6386828, "category_id": 21, "iscrowd": 0, "bbox": [314, 217, 178, 123], "area": 6846}, {"id": 5992330, "category_id": 21, "iscrowd": 0, "bbox": [248, 226, 194, 141], "area": 15491}, {"id": 5529688, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 306], "area": 156800}, {"id": 14997446, "category_id": 187, "iscrowd": 0, "bbox": [0, 30, 156, 46], "area": 2365}, {"id": 8162440, "category_id": 193, "iscrowd": 0, "bbox": [0, 206, 19, 69], "area": 1108}, {"id": 7239553, "category_id": 194, "iscrowd": 0, "bbox": [0, 254, 640, 172], "area": 82837}], "file_name": "000000455219.png", "image_id": 455219}, {"segments_info": [{"id": 3447183, "category_id": 56, "iscrowd": 0, "bbox": [234, 295, 62, 56], "area": 2374}, {"id": 3908248, "category_id": 56, "iscrowd": 0, "bbox": [335, 139, 153, 192], "area": 17029}, {"id": 3381902, "category_id": 56, "iscrowd": 0, "bbox": [184, 195, 85, 48], "area": 2463}, {"id": 4437669, "category_id": 56, "iscrowd": 0, "bbox": [137, 268, 59, 36], "area": 1626}, {"id": 5813695, "category_id": 56, "iscrowd": 0, "bbox": [276, 339, 28, 12], "area": 94}, {"id": 3513752, "category_id": 56, "iscrowd": 0, "bbox": [277, 190, 58, 58], "area": 1942}, {"id": 5551539, "category_id": 56, "iscrowd": 0, "bbox": [295, 265, 72, 91], "area": 3156}, {"id": 7129281, "category_id": 56, "iscrowd": 0, "bbox": [259, 339, 97, 36], "area": 1966}, {"id": 4636848, "category_id": 56, "iscrowd": 0, "bbox": [226, 227, 80, 70], "area": 3818}, {"id": 2712499, "category_id": 57, "iscrowd": 0, "bbox": [160, 237, 34, 34], "area": 717}, {"id": 2778309, "category_id": 57, "iscrowd": 0, "bbox": [174, 326, 31, 34], "area": 699}, {"id": 3238327, "category_id": 57, "iscrowd": 0, "bbox": [413, 325, 23, 18], "area": 216}, {"id": 3761331, "category_id": 57, "iscrowd": 0, "bbox": [216, 165, 38, 41], "area": 797}, {"id": 5874144, "category_id": 57, "iscrowd": 0, "bbox": [303, 233, 51, 40], "area": 787}, {"id": 3095101, "category_id": 79, "iscrowd": 0, "bbox": [0, 44, 590, 431], "area": 183369}, {"id": 4553122, "category_id": 107, "iscrowd": 0, "bbox": [0, 11, 640, 469], "area": 74406}, {"id": 7575718, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 24], "area": 10125}], "file_name": "000000455267.png", "image_id": 455267}, {"segments_info": [{"id": 6718898, "category_id": 1, "iscrowd": 0, "bbox": [124, 37, 305, 441], "area": 79047}, {"id": 4348567, "category_id": 1, "iscrowd": 0, "bbox": [140, 116, 405, 202], "area": 11393}, {"id": 8365760, "category_id": 65, "iscrowd": 0, "bbox": [0, 139, 205, 244], "area": 39089}, {"id": 7114154, "category_id": 84, "iscrowd": 0, "bbox": [2, 380, 267, 95], "area": 20007}, {"id": 9878996, "category_id": 93, "iscrowd": 0, "bbox": [358, 178, 282, 254], "area": 37281}, {"id": 7178919, "category_id": 109, "iscrowd": 0, "bbox": [51, 0, 589, 266], "area": 85794}, {"id": 2564676, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 369, 159], "area": 11221}], "file_name": "000000455301.png", "image_id": 455301}, {"segments_info": [{"id": 2173997, "category_id": 85, "iscrowd": 0, "bbox": [312, 158, 69, 67], "area": 3659}, {"id": 7107181, "category_id": 85, "iscrowd": 0, "bbox": [302, 417, 97, 97], "area": 7190}, {"id": 16381681, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 530], "area": 162440}, {"id": 6650999, "category_id": 197, "iscrowd": 0, "bbox": [0, 42, 640, 488], "area": 165445}], "file_name": "000000455352.png", "image_id": 455352}, {"segments_info": [{"id": 5332372, "category_id": 1, "iscrowd": 0, "bbox": [0, 161, 357, 478], "area": 78436}, {"id": 12304843, "category_id": 1, "iscrowd": 0, "bbox": [235, 2, 243, 583], "area": 28456}, {"id": 3032690, "category_id": 61, "iscrowd": 0, "bbox": [56, 86, 404, 369], "area": 117128}, {"id": 8690339, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 478, 229], "area": 50327}, {"id": 3230583, "category_id": 196, "iscrowd": 0, "bbox": [57, 169, 25, 68], "area": 393}], "file_name": "000000455448.png", "image_id": 455448}, {"segments_info": [{"id": 6447714, "category_id": 1, "iscrowd": 0, "bbox": [124, 103, 331, 369], "area": 52920}, {"id": 2697513, "category_id": 1, "iscrowd": 0, "bbox": [472, 46, 151, 194], "area": 16219}, {"id": 10329501, "category_id": 41, "iscrowd": 0, "bbox": [156, 403, 151, 133], "area": 7001}, {"id": 10263708, "category_id": 171, "iscrowd": 0, "bbox": [20, 0, 620, 189], "area": 65776}, {"id": 5789784, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 21, 23], "area": 377}, {"id": 12566463, "category_id": 191, "iscrowd": 0, "bbox": [0, 134, 640, 416], "area": 180759}, {"id": 8289918, "category_id": 193, "iscrowd": 0, "bbox": [547, 229, 93, 51], "area": 2758}, {"id": 8355711, "category_id": 199, "iscrowd": 0, "bbox": [496, 0, 144, 25], "area": 2939}], "file_name": "000000455555.png", "image_id": 455555}, {"segments_info": [{"id": 7697781, "category_id": 1, "iscrowd": 0, "bbox": [65, 219, 62, 183], "area": 5786}, {"id": 2697513, "category_id": 1, "iscrowd": 0, "bbox": [104, 226, 210, 215], "area": 27875}, {"id": 6118749, "category_id": 44, "iscrowd": 0, "bbox": [532, 162, 31, 49], "area": 1266}, {"id": 5263440, "category_id": 44, "iscrowd": 0, "bbox": [466, 160, 27, 48], "area": 680}, {"id": 5592405, "category_id": 47, "iscrowd": 0, "bbox": [557, 157, 21, 51], "area": 831}, {"id": 11250603, "category_id": 47, "iscrowd": 0, "bbox": [172, 161, 10, 11], "area": 104}, {"id": 5658198, "category_id": 50, "iscrowd": 0, "bbox": [437, 249, 54, 35], "area": 148}, {"id": 4539717, "category_id": 50, "iscrowd": 0, "bbox": [444, 262, 29, 22], "area": 208}, {"id": 9013641, "category_id": 51, "iscrowd": 0, "bbox": [293, 168, 21, 5], "area": 83}, {"id": 6447714, "category_id": 51, "iscrowd": 0, "bbox": [181, 153, 28, 12], "area": 264}, {"id": 10987431, "category_id": 51, "iscrowd": 0, "bbox": [182, 165, 28, 10], "area": 198}, {"id": 6776679, "category_id": 51, "iscrowd": 0, "bbox": [186, 149, 24, 7], "area": 121}, {"id": 6381921, "category_id": 51, "iscrowd": 0, "bbox": [211, 152, 23, 3], "area": 46}, {"id": 1973790, "category_id": 79, "iscrowd": 0, "bbox": [395, 303, 234, 130], "area": 17863}, {"id": 2368548, "category_id": 79, "iscrowd": 0, "bbox": [308, 313, 237, 133], "area": 15560}, {"id": 8750469, "category_id": 100, "iscrowd": 0, "bbox": [411, 167, 46, 37], "area": 1052}, {"id": 14474460, "category_id": 130, "iscrowd": 0, "bbox": [8, 0, 538, 72], "area": 6018}, {"id": 6052956, "category_id": 156, "iscrowd": 0, "bbox": [64, 105, 576, 135], "area": 12488}, {"id": 8092539, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 62, 20], "area": 603}, {"id": 7039851, "category_id": 188, "iscrowd": 0, "bbox": [119, 80, 195, 310], "area": 17079}, {"id": 12829635, "category_id": 195, "iscrowd": 0, "bbox": [186, 87, 22, 18], "area": 334}, {"id": 7566195, "category_id": 199, "iscrowd": 0, "bbox": [35, 16, 605, 327], "area": 38917}], "file_name": "000000455597.png", "image_id": 455597}, {"segments_info": [{"id": 8949405, "category_id": 1, "iscrowd": 0, "bbox": [495, 130, 54, 67], "area": 1735}, {"id": 5790134, "category_id": 1, "iscrowd": 0, "bbox": [418, 134, 33, 48], "area": 1040}, {"id": 6582462, "category_id": 1, "iscrowd": 0, "bbox": [615, 143, 25, 63], "area": 968}, {"id": 7372199, "category_id": 1, "iscrowd": 0, "bbox": [391, 123, 22, 35], "area": 413}, {"id": 8563077, "category_id": 1, "iscrowd": 0, "bbox": [60, 122, 65, 108], "area": 3396}, {"id": 6382983, "category_id": 1, "iscrowd": 0, "bbox": [464, 139, 35, 54], "area": 1203}, {"id": 11320280, "category_id": 1, "iscrowd": 0, "bbox": [581, 145, 46, 61], "area": 1733}, {"id": 10729694, "category_id": 1, "iscrowd": 0, "bbox": [129, 175, 22, 22], "area": 334}, {"id": 11386578, "category_id": 1, "iscrowd": 0, "bbox": [438, 122, 51, 70], "area": 1270}, {"id": 6060714, "category_id": 1, "iscrowd": 0, "bbox": [0, 122, 48, 167], "area": 3959}, {"id": 9475249, "category_id": 1, "iscrowd": 0, "bbox": [143, 164, 34, 34], "area": 697}, {"id": 5330011, "category_id": 1, "iscrowd": 0, "bbox": [276, 59, 190, 270], "area": 17055}, {"id": 6057382, "category_id": 1, "iscrowd": 0, "bbox": [524, 133, 40, 65], "area": 1713}, {"id": 9544127, "category_id": 1, "iscrowd": 1, "bbox": [37, 147, 186, 148], "area": 5249}, {"id": 7767698, "category_id": 4, "iscrowd": 0, "bbox": [180, 140, 332, 250], "area": 47933}, {"id": 8030111, "category_id": 149, "iscrowd": 0, "bbox": [0, 371, 640, 40], "area": 18275}, {"id": 6254445, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 206], "area": 77068}, {"id": 12500151, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 43], "area": 13295}, {"id": 7122654, "category_id": 193, "iscrowd": 0, "bbox": [0, 167, 640, 260], "area": 72226}], "file_name": "000000455624.png", "image_id": 455624}, {"segments_info": [{"id": 6054247, "category_id": 4, "iscrowd": 0, "bbox": [9, 1, 628, 427], "area": 132106}, {"id": 6185064, "category_id": 4, "iscrowd": 0, "bbox": [0, 31, 171, 239], "area": 25528}, {"id": 8749192, "category_id": 27, "iscrowd": 0, "bbox": [427, 167, 96, 62], "area": 3815}, {"id": 5986911, "category_id": 31, "iscrowd": 0, "bbox": [424, 166, 160, 67], "area": 3267}, {"id": 7833489, "category_id": 151, "iscrowd": 0, "bbox": [420, 79, 160, 28], "area": 2221}, {"id": 4876644, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 632, 134], "area": 20460}, {"id": 7703958, "category_id": 185, "iscrowd": 0, "bbox": [152, 82, 488, 86], "area": 13581}, {"id": 11250079, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 101], "area": 22556}, {"id": 5210515, "category_id": 193, "iscrowd": 0, "bbox": [0, 138, 640, 295], "area": 48505}], "file_name": "000000455716.png", "image_id": 455716}, {"segments_info": [{"id": 3751487, "category_id": 9, "iscrowd": 0, "bbox": [15, 190, 140, 67], "area": 5542}, {"id": 14207173, "category_id": 9, "iscrowd": 0, "bbox": [3, 166, 93, 52], "area": 3010}, {"id": 11381671, "category_id": 118, "iscrowd": 0, "bbox": [267, 249, 233, 126], "area": 16087}, {"id": 7960956, "category_id": 128, "iscrowd": 0, "bbox": [119, 125, 358, 115], "area": 13583}, {"id": 2371379, "category_id": 155, "iscrowd": 0, "bbox": [0, 301, 351, 74], "area": 16420}, {"id": 1517368, "category_id": 161, "iscrowd": 0, "bbox": [448, 198, 30, 42], "area": 970}, {"id": 4475737, "category_id": 171, "iscrowd": 0, "bbox": [472, 96, 28, 161], "area": 3638}, {"id": 7107698, "category_id": 177, "iscrowd": 0, "bbox": [163, 261, 209, 114], "area": 5179}, {"id": 16514043, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 189], "area": 81699}, {"id": 4476492, "category_id": 191, "iscrowd": 0, "bbox": [12, 237, 162, 50], "area": 3095}, {"id": 2767681, "category_id": 194, "iscrowd": 0, "bbox": [209, 238, 268, 79], "area": 2646}, {"id": 5397342, "category_id": 197, "iscrowd": 0, "bbox": [69, 98, 382, 216], "area": 18943}, {"id": 4607823, "category_id": 199, "iscrowd": 0, "bbox": [0, 232, 258, 91], "area": 10466}], "file_name": "000000455872.png", "image_id": 455872}, {"segments_info": [{"id": 3160131, "category_id": 1, "iscrowd": 0, "bbox": [121, 149, 133, 208], "area": 13903}, {"id": 5266013, "category_id": 31, "iscrowd": 0, "bbox": [58, 316, 126, 109], "area": 2248}, {"id": 1579545, "category_id": 33, "iscrowd": 0, "bbox": [79, 316, 85, 86], "area": 5225}, {"id": 2171701, "category_id": 47, "iscrowd": 0, "bbox": [64, 204, 13, 22], "area": 268}, {"id": 4277058, "category_id": 62, "iscrowd": 0, "bbox": [0, 201, 181, 168], "area": 11822}, {"id": 4734778, "category_id": 63, "iscrowd": 0, "bbox": [343, 288, 242, 187], "area": 39156}, {"id": 3547447, "category_id": 63, "iscrowd": 0, "bbox": [31, 216, 98, 58], "area": 3871}, {"id": 5796994, "category_id": 72, "iscrowd": 0, "bbox": [331, 102, 137, 104], "area": 12260}, {"id": 9870743, "category_id": 73, "iscrowd": 0, "bbox": [103, 176, 48, 40], "area": 1388}, {"id": 2371667, "category_id": 75, "iscrowd": 0, "bbox": [245, 227, 6, 7], "area": 23}, {"id": 5005442, "category_id": 84, "iscrowd": 0, "bbox": [492, 237, 48, 39], "area": 1538}, {"id": 3157813, "category_id": 84, "iscrowd": 0, "bbox": [222, 192, 75, 50], "area": 2827}, {"id": 6719640, "category_id": 85, "iscrowd": 0, "bbox": [599, 10, 20, 27], "area": 409}, {"id": 3687267, "category_id": 92, "iscrowd": 0, "bbox": [233, 10, 212, 98], "area": 7532}, {"id": 1842748, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 221, 252], "area": 41668}, {"id": 14151154, "category_id": 130, "iscrowd": 0, "bbox": [203, 32, 423, 114], "area": 5687}, {"id": 2436405, "category_id": 156, "iscrowd": 0, "bbox": [216, 150, 375, 159], "area": 29066}, {"id": 9740197, "category_id": 190, "iscrowd": 0, "bbox": [0, 340, 346, 140], "area": 25288}, {"id": 12438999, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 38903}, {"id": 3097175, "category_id": 200, "iscrowd": 0, "bbox": [142, 281, 205, 133], "area": 13712}], "file_name": "000000455937.png", "image_id": 455937}, {"segments_info": [{"id": 9280653, "category_id": 70, "iscrowd": 0, "bbox": [57, 6, 381, 564], "area": 125287}, {"id": 8027239, "category_id": 168, "iscrowd": 0, "bbox": [0, 450, 26, 41], "area": 718}, {"id": 7238505, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 380, 453], "area": 63511}, {"id": 329231, "category_id": 188, "iscrowd": 0, "bbox": [360, 48, 120, 365], "area": 23429}, {"id": 1184530, "category_id": 190, "iscrowd": 0, "bbox": [0, 380, 480, 260], "area": 74677}, {"id": 6451045, "category_id": 195, "iscrowd": 0, "bbox": [415, 80, 65, 137], "area": 5361}], "file_name": "000000455981.png", "image_id": 455981}, {"segments_info": [{"id": 3288627, "category_id": 1, "iscrowd": 0, "bbox": [406, 56, 57, 118], "area": 2699}, {"id": 4272176, "category_id": 1, "iscrowd": 0, "bbox": [295, 64, 31, 59], "area": 1313}, {"id": 3549478, "category_id": 1, "iscrowd": 0, "bbox": [514, 70, 51, 112], "area": 2516}, {"id": 9010554, "category_id": 1, "iscrowd": 0, "bbox": [328, 58, 51, 76], "area": 2001}, {"id": 2764863, "category_id": 19, "iscrowd": 0, "bbox": [258, 117, 76, 104], "area": 2109}, {"id": 3683895, "category_id": 19, "iscrowd": 0, "bbox": [477, 112, 146, 128], "area": 7182}, {"id": 3291207, "category_id": 19, "iscrowd": 0, "bbox": [284, 122, 93, 107], "area": 5515}, {"id": 3620173, "category_id": 19, "iscrowd": 0, "bbox": [374, 107, 141, 133], "area": 8336}, {"id": 9279903, "category_id": 154, "iscrowd": 0, "bbox": [0, 175, 640, 252], "area": 130013}, {"id": 10129536, "category_id": 155, "iscrowd": 0, "bbox": [0, 48, 640, 379], "area": 76785}, {"id": 13810589, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 56], "area": 33375}], "file_name": "000000456015.png", "image_id": 456015}, {"segments_info": [{"id": 10076122, "category_id": 51, "iscrowd": 0, "bbox": [14, 215, 229, 90], "area": 13752}, {"id": 5277629, "category_id": 54, "iscrowd": 0, "bbox": [301, 124, 303, 198], "area": 40596}, {"id": 3047147, "category_id": 57, "iscrowd": 0, "bbox": [58, 143, 15, 80], "area": 1046}, {"id": 2060779, "category_id": 57, "iscrowd": 0, "bbox": [71, 144, 103, 76], "area": 4931}, {"id": 1399253, "category_id": 57, "iscrowd": 0, "bbox": [10, 195, 48, 87], "area": 485}, {"id": 2118605, "category_id": 57, "iscrowd": 0, "bbox": [450, 265, 46, 36], "area": 749}, {"id": 5476341, "category_id": 57, "iscrowd": 0, "bbox": [159, 184, 53, 38], "area": 1169}, {"id": 2906264, "category_id": 59, "iscrowd": 0, "bbox": [2, 38, 405, 164], "area": 40247}, {"id": 65796, "category_id": 189, "iscrowd": 0, "bbox": [200, 281, 170, 80], "area": 6436}, {"id": 12235460, "category_id": 195, "iscrowd": 0, "bbox": [0, 101, 640, 260], "area": 17766}, {"id": 4748930, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 361], "area": 58315}], "file_name": "000000456143.png", "image_id": 456143}, {"segments_info": [{"id": 5002318, "category_id": 17, "iscrowd": 0, "bbox": [178, 336, 140, 176], "area": 11600}, {"id": 4078645, "category_id": 44, "iscrowd": 0, "bbox": [382, 502, 47, 108], "area": 3724}, {"id": 8706507, "category_id": 184, "iscrowd": 0, "bbox": [37, 0, 304, 558], "area": 5028}, {"id": 3630984, "category_id": 190, "iscrowd": 0, "bbox": [0, 534, 480, 106], "area": 38885}, {"id": 11581366, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 633], "area": 216648}], "file_name": "000000456292.png", "image_id": 456292}, {"segments_info": [{"id": 1525591, "category_id": 1, "iscrowd": 0, "bbox": [114, 308, 64, 86], "area": 4177}, {"id": 673090, "category_id": 1, "iscrowd": 0, "bbox": [86, 258, 20, 62], "area": 652}, {"id": 1517611, "category_id": 1, "iscrowd": 0, "bbox": [73, 66, 136, 181], "area": 12926}, {"id": 3626592, "category_id": 31, "iscrowd": 0, "bbox": [175, 344, 47, 35], "area": 1149}, {"id": 7183502, "category_id": 36, "iscrowd": 0, "bbox": [54, 47, 48, 29], "area": 586}, {"id": 2526885, "category_id": 36, "iscrowd": 0, "bbox": [1, 345, 117, 52], "area": 3368}, {"id": 930614, "category_id": 92, "iscrowd": 0, "bbox": [0, 365, 321, 108], "area": 4001}, {"id": 529450, "category_id": 138, "iscrowd": 0, "bbox": [13, 313, 18, 30], "area": 391}, {"id": 14080729, "category_id": 159, "iscrowd": 0, "bbox": [0, 335, 321, 165], "area": 32984}, {"id": 396310, "category_id": 185, "iscrowd": 0, "bbox": [0, 296, 321, 108], "area": 15652}, {"id": 263689, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 321, 316], "area": 63936}, {"id": 66825, "category_id": 197, "iscrowd": 0, "bbox": [233, 78, 88, 195], "area": 8738}, {"id": 660762, "category_id": 198, "iscrowd": 0, "bbox": [149, 366, 114, 38], "area": 1842}], "file_name": "000000456303.png", "image_id": 456303}, {"segments_info": [{"id": 5131599, "category_id": 3, "iscrowd": 0, "bbox": [0, 11, 13, 46], "area": 459}, {"id": 790029, "category_id": 3, "iscrowd": 0, "bbox": [91, 0, 114, 21], "area": 1635}, {"id": 6707791, "category_id": 4, "iscrowd": 0, "bbox": [4, 1, 193, 119], "area": 11875}, {"id": 3096397, "category_id": 118, "iscrowd": 0, "bbox": [6, 0, 214, 79], "area": 764}, {"id": 10003361, "category_id": 185, "iscrowd": 0, "bbox": [0, 48, 220, 128], "area": 2131}, {"id": 5926274, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 220, 131], "area": 9750}, {"id": 12113374, "category_id": 195, "iscrowd": 0, "bbox": [0, 89, 216, 81], "area": 1178}, {"id": 7235932, "category_id": 200, "iscrowd": 0, "bbox": [0, 75, 220, 101], "area": 8897}], "file_name": "000000456394.png", "image_id": 456394}, {"segments_info": [{"id": 4408131, "category_id": 1, "iscrowd": 0, "bbox": [149, 68, 142, 238], "area": 19247}, {"id": 4408138, "category_id": 16, "iscrowd": 0, "bbox": [18, 292, 75, 46], "area": 1542}, {"id": 2105376, "category_id": 16, "iscrowd": 0, "bbox": [129, 289, 52, 55], "area": 1254}, {"id": 2894892, "category_id": 16, "iscrowd": 0, "bbox": [404, 332, 34, 67], "area": 1477}, {"id": 7237230, "category_id": 31, "iscrowd": 0, "bbox": [267, 179, 38, 53], "area": 1307}, {"id": 6908265, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 123], "area": 32997}, {"id": 1579032, "category_id": 185, "iscrowd": 0, "bbox": [0, 112, 640, 119], "area": 57415}, {"id": 13684944, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 102], "area": 23850}, {"id": 11579568, "category_id": 191, "iscrowd": 0, "bbox": [0, 300, 640, 126], "area": 73421}, {"id": 7171437, "category_id": 197, "iscrowd": 0, "bbox": [247, 0, 273, 117], "area": 16342}, {"id": 6447714, "category_id": 199, "iscrowd": 0, "bbox": [0, 224, 640, 94], "area": 43195}], "file_name": "000000456496.png", "image_id": 456496}, {"segments_info": [{"id": 6976130, "category_id": 1, "iscrowd": 0, "bbox": [144, 8, 496, 472], "area": 142811}, {"id": 9595738, "category_id": 32, "iscrowd": 0, "bbox": [318, 371, 110, 108], "area": 2878}, {"id": 13751250, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 161301}], "file_name": "000000456559.png", "image_id": 456559}, {"segments_info": [{"id": 9603496, "category_id": 1, "iscrowd": 0, "bbox": [229, 111, 139, 490], "area": 41373}, {"id": 11780562, "category_id": 82, "iscrowd": 0, "bbox": [170, 34, 272, 515], "area": 91973}, {"id": 4932475, "category_id": 118, "iscrowd": 0, "bbox": [0, 501, 528, 111], "area": 31034}, {"id": 5915237, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 612, 558], "area": 114688}, {"id": 7501706, "category_id": 188, "iscrowd": 0, "bbox": [492, 393, 120, 219], "area": 21068}, {"id": 11915748, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 612, 273], "area": 66184}], "file_name": "000000456662.png", "image_id": 456662}, {"segments_info": [{"id": 5000532, "category_id": 5, "iscrowd": 0, "bbox": [88, 160, 495, 146], "area": 25642}, {"id": 10858677, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 257], "area": 154768}, {"id": 2965850, "category_id": 191, "iscrowd": 0, "bbox": [0, 255, 640, 172], "area": 67069}, {"id": 3102070, "category_id": 193, "iscrowd": 0, "bbox": [0, 248, 640, 179], "area": 24274}, {"id": 2765372, "category_id": 197, "iscrowd": 0, "bbox": [0, 237, 604, 35], "area": 1162}], "file_name": "000000456865.png", "image_id": 456865}, {"segments_info": [{"id": 5263706, "category_id": 1, "iscrowd": 0, "bbox": [452, 41, 188, 333], "area": 30331}, {"id": 14999780, "category_id": 47, "iscrowd": 0, "bbox": [107, 425, 45, 55], "area": 2254}, {"id": 3950692, "category_id": 62, "iscrowd": 0, "bbox": [319, 440, 91, 40], "area": 1433}, {"id": 10587770, "category_id": 72, "iscrowd": 0, "bbox": [0, 222, 146, 173], "area": 21224}, {"id": 11315619, "category_id": 75, "iscrowd": 0, "bbox": [65, 400, 81, 29], "area": 899}, {"id": 8286314, "category_id": 75, "iscrowd": 0, "bbox": [40, 365, 103, 66], "area": 2050}, {"id": 7300450, "category_id": 84, "iscrowd": 0, "bbox": [393, 359, 39, 7], "area": 140}, {"id": 6252145, "category_id": 84, "iscrowd": 0, "bbox": [392, 334, 25, 5], "area": 97}, {"id": 3945004, "category_id": 84, "iscrowd": 0, "bbox": [393, 363, 22, 7], "area": 92}, {"id": 5984338, "category_id": 84, "iscrowd": 0, "bbox": [394, 297, 24, 5], "area": 64}, {"id": 5920600, "category_id": 84, "iscrowd": 0, "bbox": [348, 353, 39, 30], "area": 973}, {"id": 10790824, "category_id": 84, "iscrowd": 0, "bbox": [341, 430, 55, 44], "area": 1388}, {"id": 6511709, "category_id": 84, "iscrowd": 0, "bbox": [349, 350, 35, 5], "area": 131}, {"id": 8551804, "category_id": 84, "iscrowd": 0, "bbox": [391, 414, 38, 11], "area": 264}, {"id": 6840932, "category_id": 84, "iscrowd": 0, "bbox": [339, 245, 40, 28], "area": 1004}, {"id": 8353652, "category_id": 84, "iscrowd": 0, "bbox": [391, 353, 40, 9], "area": 217}, {"id": 7564655, "category_id": 84, "iscrowd": 0, "bbox": [339, 219, 39, 25], "area": 911}, {"id": 5457982, "category_id": 84, "iscrowd": 0, "bbox": [213, 324, 6, 46], "area": 184}, {"id": 9668536, "category_id": 92, "iscrowd": 0, "bbox": [182, 120, 31, 22], "area": 520}, {"id": 10592671, "category_id": 112, "iscrowd": 0, "bbox": [229, 54, 411, 426], "area": 49260}, {"id": 6906207, "category_id": 130, "iscrowd": 0, "bbox": [54, 125, 25, 19], "area": 341}, {"id": 6972775, "category_id": 156, "iscrowd": 0, "bbox": [339, 161, 102, 306], "area": 14894}, {"id": 9935769, "category_id": 186, "iscrowd": 0, "bbox": [300, 0, 113, 24], "area": 1626}, {"id": 7568780, "category_id": 189, "iscrowd": 0, "bbox": [150, 396, 209, 84], "area": 9616}, {"id": 4211529, "category_id": 190, "iscrowd": 0, "bbox": [395, 447, 192, 33], "area": 3519}, {"id": 4342336, "category_id": 195, "iscrowd": 0, "bbox": [13, 0, 627, 480], "area": 50981}, {"id": 11382188, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 558, 480], "area": 49665}], "file_name": "000000457078.png", "image_id": 457078}, {"segments_info": [{"id": 6192253, "category_id": 52, "iscrowd": 0, "bbox": [27, 122, 411, 159], "area": 45493}, {"id": 3766910, "category_id": 52, "iscrowd": 0, "bbox": [65, 152, 393, 234], "area": 28394}, {"id": 5068639, "category_id": 67, "iscrowd": 0, "bbox": [4, 7, 604, 586], "area": 274259}], "file_name": "000000457262.png", "image_id": 457262}, {"segments_info": [{"id": 4017796, "category_id": 1, "iscrowd": 0, "bbox": [575, 46, 65, 212], "area": 2287}, {"id": 7881522, "category_id": 1, "iscrowd": 0, "bbox": [345, 94, 58, 76], "area": 2682}, {"id": 2696568, "category_id": 1, "iscrowd": 0, "bbox": [100, 55, 250, 332], "area": 24161}, {"id": 11242386, "category_id": 1, "iscrowd": 0, "bbox": [408, 79, 27, 45], "area": 487}, {"id": 2895490, "category_id": 1, "iscrowd": 0, "bbox": [539, 44, 101, 284], "area": 15483}, {"id": 9924195, "category_id": 1, "iscrowd": 0, "bbox": [364, 49, 144, 331], "area": 20785}, {"id": 8624545, "category_id": 37, "iscrowd": 0, "bbox": [218, 341, 46, 45], "area": 1619}, {"id": 12095606, "category_id": 92, "iscrowd": 0, "bbox": [164, 166, 380, 76], "area": 11978}, {"id": 3447697, "category_id": 145, "iscrowd": 0, "bbox": [0, 241, 640, 186], "area": 98213}, {"id": 7830637, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 257], "area": 81768}], "file_name": "000000457559.png", "image_id": 457559}, {"segments_info": [{"id": 4997705, "category_id": 1, "iscrowd": 0, "bbox": [260, 0, 53, 74], "area": 2401}, {"id": 5060923, "category_id": 1, "iscrowd": 0, "bbox": [1, 3, 72, 279], "area": 9675}, {"id": 4469557, "category_id": 1, "iscrowd": 0, "bbox": [323, 4, 45, 125], "area": 3412}, {"id": 5325638, "category_id": 1, "iscrowd": 0, "bbox": [403, 0, 17, 132], "area": 1582}, {"id": 4013641, "category_id": 1, "iscrowd": 0, "bbox": [375, 0, 32, 121], "area": 2793}, {"id": 4866627, "category_id": 4, "iscrowd": 0, "bbox": [120, 51, 492, 282], "area": 38363}, {"id": 5326921, "category_id": 4, "iscrowd": 0, "bbox": [63, 64, 289, 209], "area": 16904}, {"id": 6113603, "category_id": 4, "iscrowd": 0, "bbox": [189, 50, 448, 372], "area": 87071}], "file_name": "000000457848.png", "image_id": 457848}, {"segments_info": [{"id": 7894880, "category_id": 1, "iscrowd": 0, "bbox": [276, 117, 129, 267], "area": 11778}, {"id": 7107428, "category_id": 1, "iscrowd": 0, "bbox": [430, 163, 60, 101], "area": 2887}, {"id": 7434579, "category_id": 1, "iscrowd": 0, "bbox": [522, 129, 91, 181], "area": 6612}, {"id": 2103065, "category_id": 3, "iscrowd": 0, "bbox": [408, 166, 18, 13], "area": 181}, {"id": 1905688, "category_id": 3, "iscrowd": 0, "bbox": [143, 164, 34, 17], "area": 457}, {"id": 2630457, "category_id": 4, "iscrowd": 0, "bbox": [122, 168, 24, 13], "area": 241}, {"id": 2234394, "category_id": 8, "iscrowd": 0, "bbox": [132, 148, 56, 33], "area": 998}, {"id": 2570066, "category_id": 40, "iscrowd": 0, "bbox": [479, 216, 14, 12], "area": 114}, {"id": 1908267, "category_id": 40, "iscrowd": 0, "bbox": [575, 182, 24, 22], "area": 347}, {"id": 1841709, "category_id": 40, "iscrowd": 0, "bbox": [277, 118, 44, 36], "area": 1065}, {"id": 4672617, "category_id": 138, "iscrowd": 0, "bbox": [67, 150, 32, 30], "area": 578}, {"id": 4735299, "category_id": 151, "iscrowd": 0, "bbox": [56, 119, 472, 36], "area": 2424}, {"id": 1646112, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 207], "area": 97034}, {"id": 4411741, "category_id": 185, "iscrowd": 0, "bbox": [117, 144, 523, 69], "area": 6203}, {"id": 5338493, "category_id": 193, "iscrowd": 0, "bbox": [0, 165, 640, 110], "area": 40968}, {"id": 8233405, "category_id": 194, "iscrowd": 0, "bbox": [0, 254, 640, 204], "area": 114137}, {"id": 4274230, "category_id": 197, "iscrowd": 0, "bbox": [132, 116, 293, 65], "area": 5498}], "file_name": "000000457884.png", "image_id": 457884}, {"segments_info": [{"id": 8748937, "category_id": 1, "iscrowd": 0, "bbox": [366, 138, 94, 134], "area": 3724}, {"id": 4142131, "category_id": 1, "iscrowd": 0, "bbox": [453, 127, 23, 97], "area": 1056}, {"id": 5984341, "category_id": 1, "iscrowd": 0, "bbox": [64, 133, 137, 135], "area": 7366}, {"id": 6249831, "category_id": 1, "iscrowd": 0, "bbox": [208, 176, 107, 95], "area": 3788}, {"id": 5587005, "category_id": 1, "iscrowd": 0, "bbox": [470, 112, 30, 110], "area": 2024}, {"id": 7626331, "category_id": 1, "iscrowd": 0, "bbox": [195, 116, 46, 121], "area": 2881}, {"id": 7887963, "category_id": 1, "iscrowd": 0, "bbox": [97, 103, 45, 96], "area": 2426}, {"id": 5915712, "category_id": 1, "iscrowd": 0, "bbox": [429, 110, 27, 109], "area": 1625}, {"id": 7957358, "category_id": 39, "iscrowd": 0, "bbox": [457, 176, 43, 12], "area": 177}, {"id": 5523784, "category_id": 39, "iscrowd": 0, "bbox": [94, 165, 5, 57], "area": 214}, {"id": 6513258, "category_id": 40, "iscrowd": 0, "bbox": [298, 200, 21, 25], "area": 338}, {"id": 6576728, "category_id": 151, "iscrowd": 0, "bbox": [334, 21, 166, 49], "area": 5894}, {"id": 8619140, "category_id": 184, "iscrowd": 0, "bbox": [122, 0, 378, 73], "area": 17842}, {"id": 5986392, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 500, 254], "area": 72988}, {"id": 5737352, "category_id": 193, "iscrowd": 0, "bbox": [0, 222, 500, 153], "area": 48133}, {"id": 9153730, "category_id": 194, "iscrowd": 0, "bbox": [11, 248, 489, 62], "area": 16009}], "file_name": "000000458045.png", "image_id": 458045}, {"segments_info": [{"id": 5656656, "category_id": 70, "iscrowd": 0, "bbox": [429, 130, 134, 103], "area": 4437}, {"id": 8356232, "category_id": 70, "iscrowd": 0, "bbox": [33, 0, 303, 426], "area": 46986}, {"id": 8751504, "category_id": 70, "iscrowd": 0, "bbox": [347, 74, 194, 239], "area": 13094}, {"id": 9606040, "category_id": 70, "iscrowd": 0, "bbox": [449, 41, 137, 166], "area": 6856}, {"id": 10393493, "category_id": 70, "iscrowd": 0, "bbox": [504, 136, 53, 34], "area": 664}, {"id": 10066844, "category_id": 70, "iscrowd": 0, "bbox": [0, 0, 201, 426], "area": 46899}, {"id": 10066850, "category_id": 70, "iscrowd": 0, "bbox": [229, 172, 195, 181], "area": 24030}, {"id": 10659501, "category_id": 70, "iscrowd": 0, "bbox": [400, 29, 150, 212], "area": 5209}, {"id": 10724521, "category_id": 70, "iscrowd": 0, "bbox": [236, 12, 269, 379], "area": 27718}, {"id": 5198425, "category_id": 70, "iscrowd": 0, "bbox": [540, 79, 100, 151], "area": 7628}, {"id": 532253, "category_id": 184, "iscrowd": 0, "bbox": [355, 0, 285, 172], "area": 17945}, {"id": 2377576, "category_id": 194, "iscrowd": 0, "bbox": [100, 0, 540, 426], "area": 59781}], "file_name": "000000458054.png", "image_id": 458054}, {"segments_info": [{"id": 12501673, "category_id": 1, "iscrowd": 0, "bbox": [81, 23, 45, 68], "area": 1697}, {"id": 9606521, "category_id": 1, "iscrowd": 0, "bbox": [577, 24, 14, 61], "area": 165}, {"id": 3092773, "category_id": 1, "iscrowd": 0, "bbox": [350, 43, 9, 26], "area": 205}, {"id": 10857358, "category_id": 1, "iscrowd": 0, "bbox": [544, 30, 20, 58], "area": 630}, {"id": 6841953, "category_id": 7, "iscrowd": 0, "bbox": [0, 0, 640, 277], "area": 141886}, {"id": 5525571, "category_id": 125, "iscrowd": 0, "bbox": [0, 209, 640, 188], "area": 40417}, {"id": 13025193, "category_id": 144, "iscrowd": 0, "bbox": [305, 377, 335, 103], "area": 18540}, {"id": 5064504, "category_id": 147, "iscrowd": 0, "bbox": [0, 186, 640, 294], "area": 102515}, {"id": 9409405, "category_id": 181, "iscrowd": 0, "bbox": [51, 0, 185, 2], "area": 337}], "file_name": "000000458109.png", "image_id": 458109}, {"segments_info": [{"id": 4803926, "category_id": 1, "iscrowd": 0, "bbox": [148, 106, 73, 143], "area": 4522}, {"id": 6580081, "category_id": 2, "iscrowd": 0, "bbox": [189, 192, 27, 63], "area": 911}, {"id": 11905955, "category_id": 9, "iscrowd": 0, "bbox": [524, 93, 45, 37], "area": 1137}, {"id": 5528138, "category_id": 27, "iscrowd": 0, "bbox": [181, 165, 35, 33], "area": 856}, {"id": 11775388, "category_id": 155, "iscrowd": 0, "bbox": [0, 119, 640, 168], "area": 31060}, {"id": 13680811, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 138], "area": 75163}, {"id": 9938356, "category_id": 191, "iscrowd": 0, "bbox": [0, 124, 332, 214], "area": 46102}, {"id": 7631544, "category_id": 197, "iscrowd": 0, "bbox": [59, 6, 90, 133], "area": 5332}, {"id": 8094856, "category_id": 198, "iscrowd": 0, "bbox": [45, 121, 595, 217], "area": 51001}], "file_name": "000000458223.png", "image_id": 458223}, {"segments_info": [{"id": 2440290, "category_id": 1, "iscrowd": 0, "bbox": [88, 181, 127, 145], "area": 10469}, {"id": 328967, "category_id": 17, "iscrowd": 0, "bbox": [283, 185, 181, 143], "area": 15544}, {"id": 5405084, "category_id": 65, "iscrowd": 0, "bbox": [145, 248, 271, 175], "area": 26748}, {"id": 3034224, "category_id": 65, "iscrowd": 0, "bbox": [0, 52, 638, 376], "area": 145000}, {"id": 2048099, "category_id": 84, "iscrowd": 0, "bbox": [182, 171, 68, 100], "area": 5100}, {"id": 5140884, "category_id": 93, "iscrowd": 0, "bbox": [35, 325, 605, 103], "area": 1639}, {"id": 2838642, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 325], "area": 66756}], "file_name": "000000458255.png", "image_id": 458255}, {"segments_info": [{"id": 3946303, "category_id": 1, "iscrowd": 0, "bbox": [586, 175, 28, 26], "area": 391}, {"id": 4341842, "category_id": 1, "iscrowd": 0, "bbox": [415, 184, 11, 13], "area": 79}, {"id": 5853009, "category_id": 1, "iscrowd": 0, "bbox": [258, 183, 15, 55], "area": 506}, {"id": 5196132, "category_id": 1, "iscrowd": 0, "bbox": [204, 179, 26, 60], "area": 608}, {"id": 2564390, "category_id": 1, "iscrowd": 0, "bbox": [221, 192, 15, 41], "area": 297}, {"id": 7891565, "category_id": 1, "iscrowd": 0, "bbox": [221, 181, 9, 24], "area": 142}, {"id": 6774889, "category_id": 1, "iscrowd": 0, "bbox": [238, 185, 20, 46], "area": 318}, {"id": 4603977, "category_id": 1, "iscrowd": 0, "bbox": [435, 178, 10, 12], "area": 93}, {"id": 4472644, "category_id": 1, "iscrowd": 0, "bbox": [481, 183, 10, 9], "area": 68}, {"id": 3025199, "category_id": 1, "iscrowd": 0, "bbox": [272, 181, 27, 56], "area": 589}, {"id": 3881535, "category_id": 1, "iscrowd": 0, "bbox": [272, 201, 18, 35], "area": 150}, {"id": 4537663, "category_id": 1, "iscrowd": 0, "bbox": [296, 155, 72, 199], "area": 6637}, {"id": 4867404, "category_id": 3, "iscrowd": 0, "bbox": [379, 199, 44, 67], "area": 1840}, {"id": 2500143, "category_id": 3, "iscrowd": 0, "bbox": [551, 205, 89, 185], "area": 10995}, {"id": 6446947, "category_id": 3, "iscrowd": 0, "bbox": [357, 196, 67, 60], "area": 1317}, {"id": 2171176, "category_id": 3, "iscrowd": 0, "bbox": [0, 209, 72, 214], "area": 10293}, {"id": 5328986, "category_id": 3, "iscrowd": 0, "bbox": [424, 194, 61, 95], "area": 2273}, {"id": 4868957, "category_id": 3, "iscrowd": 0, "bbox": [120, 164, 47, 49], "area": 398}, {"id": 7368050, "category_id": 3, "iscrowd": 0, "bbox": [485, 198, 155, 146], "area": 10246}, {"id": 6643808, "category_id": 3, "iscrowd": 0, "bbox": [353, 185, 65, 25], "area": 743}, {"id": 4143947, "category_id": 3, "iscrowd": 0, "bbox": [409, 189, 72, 85], "area": 1706}, {"id": 2959407, "category_id": 3, "iscrowd": 0, "bbox": [0, 166, 190, 166], "area": 13751}, {"id": 3881282, "category_id": 3, "iscrowd": 0, "bbox": [448, 184, 137, 127], "area": 5762}, {"id": 4473417, "category_id": 3, "iscrowd": 0, "bbox": [150, 181, 43, 78], "area": 803}, {"id": 4802379, "category_id": 3, "iscrowd": 0, "bbox": [4, 212, 131, 183], "area": 12332}, {"id": 5986142, "category_id": 3, "iscrowd": 1, "bbox": [163, 171, 197, 78], "area": 3093}, {"id": 4482242, "category_id": 10, "iscrowd": 0, "bbox": [152, 69, 12, 25], "area": 236}, {"id": 4092860, "category_id": 10, "iscrowd": 0, "bbox": [162, 71, 11, 22], "area": 176}, {"id": 4480154, "category_id": 10, "iscrowd": 0, "bbox": [288, 143, 4, 10], "area": 33}, {"id": 3434666, "category_id": 10, "iscrowd": 0, "bbox": [357, 63, 13, 25], "area": 258}, {"id": 5855338, "category_id": 10, "iscrowd": 0, "bbox": [250, 171, 4, 4], "area": 15}, {"id": 4282025, "category_id": 10, "iscrowd": 0, "bbox": [342, 62, 11, 27], "area": 237}, {"id": 6578860, "category_id": 10, "iscrowd": 0, "bbox": [250, 165, 4, 6], "area": 23}, {"id": 7965389, "category_id": 10, "iscrowd": 0, "bbox": [242, 178, 2, 4], "area": 7}, {"id": 2829878, "category_id": 41, "iscrowd": 0, "bbox": [310, 329, 28, 20], "area": 374}, {"id": 4474968, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 197], "area": 67842}, {"id": 6250602, "category_id": 191, "iscrowd": 0, "bbox": [0, 203, 640, 224], "area": 69459}, {"id": 5132386, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 241], "area": 47174}], "file_name": "000000458325.png", "image_id": 458325}, {"segments_info": [{"id": 5334919, "category_id": 46, "iscrowd": 0, "bbox": [282, 191, 9, 14], "area": 80}, {"id": 5662854, "category_id": 46, "iscrowd": 0, "bbox": [293, 191, 11, 17], "area": 101}, {"id": 4741491, "category_id": 46, "iscrowd": 0, "bbox": [326, 190, 6, 16], "area": 59}, {"id": 5465213, "category_id": 46, "iscrowd": 0, "bbox": [321, 191, 5, 15], "area": 51}, {"id": 5201791, "category_id": 46, "iscrowd": 0, "bbox": [314, 190, 8, 14], "area": 59}, {"id": 5992331, "category_id": 46, "iscrowd": 0, "bbox": [304, 189, 10, 17], "area": 105}, {"id": 5532042, "category_id": 46, "iscrowd": 0, "bbox": [270, 191, 11, 14], "area": 94}, {"id": 4615067, "category_id": 63, "iscrowd": 0, "bbox": [383, 237, 257, 243], "area": 44274}, {"id": 6845569, "category_id": 67, "iscrowd": 0, "bbox": [0, 232, 94, 77], "area": 2846}, {"id": 3819088, "category_id": 72, "iscrowd": 0, "bbox": [111, 236, 79, 51], "area": 3597}, {"id": 3041364, "category_id": 84, "iscrowd": 0, "bbox": [57, 236, 27, 14], "area": 346}, {"id": 7110284, "category_id": 84, "iscrowd": 0, "bbox": [2, 260, 37, 5], "area": 151}, {"id": 4605505, "category_id": 84, "iscrowd": 0, "bbox": [34, 241, 23, 4], "area": 56}, {"id": 2435378, "category_id": 84, "iscrowd": 0, "bbox": [18, 250, 54, 12], "area": 492}, {"id": 5267042, "category_id": 84, "iscrowd": 0, "bbox": [2, 265, 13, 8], "area": 75}, {"id": 3943712, "category_id": 84, "iscrowd": 0, "bbox": [0, 234, 22, 17], "area": 222}, {"id": 7567734, "category_id": 84, "iscrowd": 0, "bbox": [28, 233, 7, 9], "area": 23}, {"id": 10998767, "category_id": 109, "iscrowd": 0, "bbox": [620, 232, 20, 94], "area": 1129}, {"id": 6720176, "category_id": 130, "iscrowd": 0, "bbox": [407, 157, 52, 113], "area": 4650}, {"id": 2042182, "category_id": 156, "iscrowd": 0, "bbox": [10, 119, 143, 98], "area": 7093}, {"id": 3491181, "category_id": 177, "iscrowd": 0, "bbox": [0, 7, 640, 304], "area": 88567}, {"id": 10660274, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 110], "area": 48531}, {"id": 5274536, "category_id": 188, "iscrowd": 0, "bbox": [195, 197, 148, 115], "area": 13242}, {"id": 4159909, "category_id": 189, "iscrowd": 0, "bbox": [284, 263, 356, 217], "area": 12033}, {"id": 3428729, "category_id": 190, "iscrowd": 0, "bbox": [0, 290, 484, 190], "area": 61085}, {"id": 6785694, "category_id": 195, "iscrowd": 0, "bbox": [92, 168, 23, 30], "area": 656}], "file_name": "000000458410.png", "image_id": 458410}, {"segments_info": [{"id": 8546249, "category_id": 28, "iscrowd": 0, "bbox": [61, 136, 214, 126], "area": 6151}, {"id": 9479854, "category_id": 47, "iscrowd": 0, "bbox": [562, 198, 11, 16], "area": 156}, {"id": 8954546, "category_id": 47, "iscrowd": 0, "bbox": [602, 201, 12, 13], "area": 136}, {"id": 10071994, "category_id": 47, "iscrowd": 0, "bbox": [572, 202, 12, 11], "area": 110}, {"id": 9746886, "category_id": 47, "iscrowd": 0, "bbox": [597, 200, 6, 12], "area": 63}, {"id": 5662318, "category_id": 47, "iscrowd": 0, "bbox": [631, 201, 9, 14], "area": 117}, {"id": 4470325, "category_id": 49, "iscrowd": 0, "bbox": [38, 280, 12, 22], "area": 156}, {"id": 2891540, "category_id": 49, "iscrowd": 0, "bbox": [18, 300, 7, 14], "area": 59}, {"id": 3220507, "category_id": 49, "iscrowd": 0, "bbox": [25, 306, 7, 11], "area": 59}, {"id": 3877930, "category_id": 49, "iscrowd": 0, "bbox": [25, 290, 10, 21], "area": 142}, {"id": 8405018, "category_id": 62, "iscrowd": 0, "bbox": [621, 246, 19, 16], "area": 204}, {"id": 4339012, "category_id": 62, "iscrowd": 0, "bbox": [604, 260, 36, 88], "area": 1708}, {"id": 7223858, "category_id": 62, "iscrowd": 0, "bbox": [560, 241, 47, 21], "area": 549}, {"id": 5529204, "category_id": 62, "iscrowd": 0, "bbox": [496, 238, 48, 71], "area": 1157}, {"id": 3682481, "category_id": 62, "iscrowd": 0, "bbox": [528, 228, 34, 31], "area": 672}, {"id": 5587274, "category_id": 62, "iscrowd": 0, "bbox": [544, 254, 61, 90], "area": 2861}, {"id": 4340145, "category_id": 63, "iscrowd": 0, "bbox": [526, 226, 45, 29], "area": 464}, {"id": 7168374, "category_id": 67, "iscrowd": 0, "bbox": [499, 251, 121, 74], "area": 1312}, {"id": 5787217, "category_id": 79, "iscrowd": 0, "bbox": [303, 257, 115, 168], "area": 10392}, {"id": 6641497, "category_id": 81, "iscrowd": 0, "bbox": [95, 295, 166, 68], "area": 5818}, {"id": 2564130, "category_id": 87, "iscrowd": 0, "bbox": [24, 314, 28, 17], "area": 287}, {"id": 7231063, "category_id": 107, "iscrowd": 0, "bbox": [0, 263, 439, 162], "area": 13378}, {"id": 4871525, "category_id": 112, "iscrowd": 0, "bbox": [447, 140, 46, 233], "area": 7673}, {"id": 2447767, "category_id": 118, "iscrowd": 0, "bbox": [369, 267, 271, 158], "area": 21797}, {"id": 4869201, "category_id": 128, "iscrowd": 0, "bbox": [0, 32, 640, 343], "area": 62886}, {"id": 5001043, "category_id": 130, "iscrowd": 0, "bbox": [232, 75, 30, 45], "area": 766}, {"id": 9471102, "category_id": 181, "iscrowd": 0, "bbox": [44, 108, 505, 168], "area": 32235}, {"id": 6382436, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 177], "area": 67365}, {"id": 6511966, "category_id": 188, "iscrowd": 0, "bbox": [26, 274, 410, 151], "area": 22931}, {"id": 3681319, "category_id": 199, "iscrowd": 0, "bbox": [33, 253, 354, 92], "area": 7391}, {"id": 8151380, "category_id": 200, "iscrowd": 0, "bbox": [475, 270, 79, 96], "area": 1179}], "file_name": "000000458663.png", "image_id": 458663}, {"segments_info": [{"id": 12761001, "category_id": 3, "iscrowd": 0, "bbox": [0, 446, 116, 54], "area": 3826}, {"id": 7100483, "category_id": 3, "iscrowd": 0, "bbox": [9, 448, 144, 51], "area": 1257}, {"id": 6838340, "category_id": 14, "iscrowd": 0, "bbox": [176, 153, 59, 138], "area": 6275}, {"id": 5325621, "category_id": 14, "iscrowd": 0, "bbox": [109, 153, 46, 141], "area": 5181}, {"id": 4672077, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 515], "area": 117183}, {"id": 8421248, "category_id": 191, "iscrowd": 0, "bbox": [0, 476, 427, 164], "area": 20640}, {"id": 5522747, "category_id": 192, "iscrowd": 0, "bbox": [0, 156, 427, 268], "area": 39111}, {"id": 10198181, "category_id": 197, "iscrowd": 0, "bbox": [0, 384, 314, 119], "area": 15836}], "file_name": "000000458702.png", "image_id": 458702}, {"segments_info": [{"id": 5130064, "category_id": 1, "iscrowd": 0, "bbox": [567, 1, 73, 87], "area": 2718}, {"id": 5657178, "category_id": 1, "iscrowd": 0, "bbox": [70, 38, 507, 436], "area": 117579}, {"id": 7171446, "category_id": 1, "iscrowd": 0, "bbox": [590, 92, 50, 97], "area": 1230}, {"id": 6443343, "category_id": 1, "iscrowd": 0, "bbox": [250, 87, 123, 133], "area": 6057}, {"id": 6121591, "category_id": 20, "iscrowd": 0, "bbox": [3, 2, 443, 152], "area": 40322}, {"id": 6911105, "category_id": 20, "iscrowd": 0, "bbox": [1, 29, 321, 302], "area": 41966}, {"id": 7108992, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 88383}], "file_name": "000000458755.png", "image_id": 458755}, {"segments_info": [{"id": 10990765, "category_id": 15, "iscrowd": 0, "bbox": [282, 230, 64, 24], "area": 945}, {"id": 3157040, "category_id": 63, "iscrowd": 0, "bbox": [49, 252, 156, 96], "area": 10533}, {"id": 5921374, "category_id": 79, "iscrowd": 0, "bbox": [480, 304, 152, 42], "area": 3592}, {"id": 6645856, "category_id": 79, "iscrowd": 0, "bbox": [408, 207, 20, 45], "area": 694}, {"id": 6382168, "category_id": 79, "iscrowd": 0, "bbox": [411, 246, 17, 50], "area": 707}, {"id": 3225677, "category_id": 81, "iscrowd": 0, "bbox": [206, 331, 102, 35], "area": 2886}, {"id": 13225170, "category_id": 107, "iscrowd": 0, "bbox": [30, 273, 610, 154], "area": 33998}, {"id": 8617352, "category_id": 118, "iscrowd": 0, "bbox": [0, 285, 461, 142], "area": 18588}, {"id": 7899804, "category_id": 130, "iscrowd": 0, "bbox": [103, 66, 158, 118], "area": 5821}, {"id": 10397343, "category_id": 181, "iscrowd": 0, "bbox": [0, 121, 375, 207], "area": 47452}, {"id": 10330535, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 580, 124], "area": 54115}, {"id": 11185327, "category_id": 188, "iscrowd": 0, "bbox": [367, 0, 273, 427], "area": 55642}, {"id": 11054257, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 342], "area": 36102}, {"id": 13154991, "category_id": 200, "iscrowd": 0, "bbox": [321, 290, 39, 33], "area": 1031}], "file_name": "000000458768.png", "image_id": 458768}, {"segments_info": [{"id": 3093041, "category_id": 181, "iscrowd": 0, "bbox": [57, 270, 362, 105], "area": 25015}, {"id": 13224136, "category_id": 187, "iscrowd": 0, "bbox": [66, 16, 350, 205], "area": 55203}], "file_name": "000000458790.png", "image_id": 458790}, {"segments_info": [{"id": 3819116, "category_id": 1, "iscrowd": 0, "bbox": [2, 2, 456, 410], "area": 116037}, {"id": 5660021, "category_id": 48, "iscrowd": 0, "bbox": [273, 323, 164, 95], "area": 1577}, {"id": 6320778, "category_id": 49, "iscrowd": 0, "bbox": [62, 372, 83, 29], "area": 1474}, {"id": 7975139, "category_id": 59, "iscrowd": 0, "bbox": [0, 392, 461, 248], "area": 87711}, {"id": 9003628, "category_id": 189, "iscrowd": 0, "bbox": [0, 452, 480, 188], "area": 11018}, {"id": 3053743, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 94], "area": 25105}], "file_name": "000000458992.png", "image_id": 458992}, {"segments_info": [{"id": 7959401, "category_id": 1, "iscrowd": 0, "bbox": [110, 181, 281, 350], "area": 22966}, {"id": 5068633, "category_id": 15, "iscrowd": 0, "bbox": [26, 203, 333, 400], "area": 32687}, {"id": 5652017, "category_id": 27, "iscrowd": 0, "bbox": [329, 404, 38, 69], "area": 1206}, {"id": 11839896, "category_id": 73, "iscrowd": 0, "bbox": [232, 289, 110, 97], "area": 6031}, {"id": 4804941, "category_id": 149, "iscrowd": 0, "bbox": [340, 0, 87, 86], "area": 4284}, {"id": 2897972, "category_id": 184, "iscrowd": 0, "bbox": [168, 0, 177, 191], "area": 19869}, {"id": 7567756, "category_id": 190, "iscrowd": 0, "bbox": [0, 301, 427, 339], "area": 88185}, {"id": 4348486, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 427, 380], "area": 95850}], "file_name": "000000459153.png", "image_id": 459153}, {"segments_info": [{"id": 7370625, "category_id": 1, "iscrowd": 0, "bbox": [228, 85, 80, 254], "area": 10471}, {"id": 3292245, "category_id": 1, "iscrowd": 0, "bbox": [138, 80, 85, 234], "area": 12462}, {"id": 4936586, "category_id": 1, "iscrowd": 0, "bbox": [298, 86, 103, 245], "area": 12152}, {"id": 6592918, "category_id": 34, "iscrowd": 0, "bbox": [174, 218, 4, 25], "area": 71}, {"id": 7638464, "category_id": 34, "iscrowd": 0, "bbox": [321, 205, 37, 15], "area": 213}, {"id": 5165696, "category_id": 34, "iscrowd": 0, "bbox": [319, 191, 38, 22], "area": 647}, {"id": 2457509, "category_id": 34, "iscrowd": 0, "bbox": [255, 222, 32, 27], "area": 679}, {"id": 2770275, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 338, 155], "area": 10763}, {"id": 6519958, "category_id": 194, "iscrowd": 0, "bbox": [462, 24, 38, 93], "area": 2016}], "file_name": "000000459195.png", "image_id": 459195}, {"segments_info": [{"id": 3092024, "category_id": 1, "iscrowd": 0, "bbox": [1, 79, 397, 554], "area": 149784}, {"id": 7818554, "category_id": 1, "iscrowd": 0, "bbox": [345, 338, 22, 112], "area": 1441}, {"id": 5584943, "category_id": 1, "iscrowd": 0, "bbox": [361, 337, 25, 116], "area": 1905}, {"id": 6701368, "category_id": 1, "iscrowd": 0, "bbox": [287, 331, 35, 120], "area": 1389}, {"id": 6968151, "category_id": 1, "iscrowd": 0, "bbox": [335, 348, 16, 19], "area": 185}, {"id": 6176830, "category_id": 1, "iscrowd": 0, "bbox": [382, 332, 21, 37], "area": 304}, {"id": 6700591, "category_id": 1, "iscrowd": 0, "bbox": [380, 313, 100, 223], "area": 13430}, {"id": 7426120, "category_id": 1, "iscrowd": 0, "bbox": [304, 331, 27, 120], "area": 1396}, {"id": 6310734, "category_id": 1, "iscrowd": 0, "bbox": [402, 252, 78, 171], "area": 4716}, {"id": 5322543, "category_id": 1, "iscrowd": 0, "bbox": [334, 364, 16, 73], "area": 854}, {"id": 9530462, "category_id": 77, "iscrowd": 0, "bbox": [314, 470, 93, 57], "area": 1677}, {"id": 7297119, "category_id": 128, "iscrowd": 0, "bbox": [300, 302, 61, 96], "area": 2185}, {"id": 16513786, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 370], "area": 96423}, {"id": 5588545, "category_id": 193, "iscrowd": 0, "bbox": [310, 429, 170, 211], "area": 17619}], "file_name": "000000459272.png", "image_id": 459272}, {"segments_info": [{"id": 7038366, "category_id": 21, "iscrowd": 0, "bbox": [204, 144, 110, 28], "area": 1372}, {"id": 3945520, "category_id": 21, "iscrowd": 0, "bbox": [17, 156, 420, 390], "area": 89809}, {"id": 2829133, "category_id": 21, "iscrowd": 0, "bbox": [466, 100, 97, 145], "area": 7624}, {"id": 6777442, "category_id": 184, "iscrowd": 0, "bbox": [0, 52, 571, 118], "area": 39461}, {"id": 8557473, "category_id": 185, "iscrowd": 0, "bbox": [0, 86, 612, 300], "area": 19961}, {"id": 16579836, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 612, 102], "area": 46568}, {"id": 4819823, "category_id": 193, "iscrowd": 0, "bbox": [0, 132, 612, 480], "area": 168128}, {"id": 12242135, "category_id": 194, "iscrowd": 0, "bbox": [299, 164, 177, 41], "area": 994}], "file_name": "000000459396.png", "image_id": 459396}, {"segments_info": [{"id": 5137533, "category_id": 1, "iscrowd": 0, "bbox": [0, 186, 218, 165], "area": 15740}, {"id": 5597053, "category_id": 20, "iscrowd": 0, "bbox": [211, 102, 153, 284], "area": 13214}, {"id": 6122365, "category_id": 20, "iscrowd": 0, "bbox": [310, 100, 209, 262], "area": 10318}, {"id": 6122361, "category_id": 20, "iscrowd": 0, "bbox": [195, 126, 58, 125], "area": 1581}, {"id": 5597310, "category_id": 20, "iscrowd": 0, "bbox": [333, 95, 306, 331], "area": 59689}, {"id": 2300897, "category_id": 51, "iscrowd": 0, "bbox": [206, 290, 61, 49], "area": 2017}, {"id": 3028281, "category_id": 177, "iscrowd": 0, "bbox": [82, 66, 276, 87], "area": 10677}, {"id": 4217166, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 528, 161], "area": 45809}, {"id": 8689312, "category_id": 185, "iscrowd": 0, "bbox": [0, 148, 525, 278], "area": 54687}, {"id": 13352626, "category_id": 187, "iscrowd": 0, "bbox": [95, 0, 525, 25], "area": 3247}, {"id": 4154464, "category_id": 193, "iscrowd": 0, "bbox": [148, 0, 492, 226], "area": 24969}, {"id": 9809086, "category_id": 194, "iscrowd": 0, "bbox": [0, 94, 640, 332], "area": 22609}, {"id": 12827306, "category_id": 199, "iscrowd": 0, "bbox": [48, 0, 436, 54], "area": 3133}], "file_name": "000000459437.png", "image_id": 459437}, {"segments_info": [{"id": 3946286, "category_id": 5, "iscrowd": 0, "bbox": [114, 195, 357, 51], "area": 7481}, {"id": 4538166, "category_id": 149, "iscrowd": 0, "bbox": [0, 230, 640, 193], "area": 107807}, {"id": 3820355, "category_id": 184, "iscrowd": 0, "bbox": [0, 143, 640, 100], "area": 33542}, {"id": 14405559, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 190], "area": 106070}, {"id": 3887954, "category_id": 193, "iscrowd": 0, "bbox": [0, 220, 640, 43], "area": 15396}], "file_name": "000000459467.png", "image_id": 459467}, {"segments_info": [{"id": 10131866, "category_id": 3, "iscrowd": 0, "bbox": [0, 355, 60, 26], "area": 1168}, {"id": 6449016, "category_id": 16, "iscrowd": 0, "bbox": [143, 151, 77, 195], "area": 6061}, {"id": 7435653, "category_id": 16, "iscrowd": 0, "bbox": [219, 154, 59, 188], "area": 2184}, {"id": 12368062, "category_id": 85, "iscrowd": 0, "bbox": [197, 46, 62, 65], "area": 3024}, {"id": 4548211, "category_id": 125, "iscrowd": 0, "bbox": [0, 345, 339, 32], "area": 2208}, {"id": 5794695, "category_id": 128, "iscrowd": 0, "bbox": [96, 294, 62, 32], "area": 1140}, {"id": 9015459, "category_id": 149, "iscrowd": 0, "bbox": [10, 364, 329, 63], "area": 5408}, {"id": 5070715, "category_id": 171, "iscrowd": 0, "bbox": [0, 406, 129, 42], "area": 3172}, {"id": 4675684, "category_id": 184, "iscrowd": 0, "bbox": [0, 135, 375, 293], "area": 35054}, {"id": 3224124, "category_id": 185, "iscrowd": 0, "bbox": [329, 389, 24, 39], "area": 410}, {"id": 12165535, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 375, 323], "area": 87436}, {"id": 8686493, "category_id": 191, "iscrowd": 0, "bbox": [0, 373, 375, 127], "area": 21057}, {"id": 1579036, "category_id": 199, "iscrowd": 0, "bbox": [137, 345, 162, 133], "area": 17664}], "file_name": "000000459500.png", "image_id": 459500}, {"segments_info": [{"id": 6904408, "category_id": 1, "iscrowd": 0, "bbox": [94, 296, 14, 23], "area": 34}, {"id": 6775915, "category_id": 4, "iscrowd": 0, "bbox": [94, 300, 15, 23], "area": 216}, {"id": 3550504, "category_id": 4, "iscrowd": 0, "bbox": [315, 327, 325, 204], "area": 55355}, {"id": 10856618, "category_id": 149, "iscrowd": 0, "bbox": [0, 278, 640, 255], "area": 95609}, {"id": 1981742, "category_id": 184, "iscrowd": 0, "bbox": [0, 23, 640, 322], "area": 64204}, {"id": 14194776, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 540, 260], "area": 91044}, {"id": 6054226, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 303], "area": 28978}, {"id": 3896676, "category_id": 193, "iscrowd": 0, "bbox": [139, 251, 150, 43], "area": 3515}], "file_name": "000000459634.png", "image_id": 459634}, {"segments_info": [{"id": 7568781, "category_id": 1, "iscrowd": 0, "bbox": [1, 62, 367, 408], "area": 90782}, {"id": 8157866, "category_id": 1, "iscrowd": 0, "bbox": [332, 66, 308, 414], "area": 76774}, {"id": 3161457, "category_id": 60, "iscrowd": 0, "bbox": [334, 184, 101, 114], "area": 8752}, {"id": 10859208, "category_id": 60, "iscrowd": 0, "bbox": [155, 160, 123, 116], "area": 10730}, {"id": 1383455, "category_id": 62, "iscrowd": 0, "bbox": [1, 3, 388, 334], "area": 52465}, {"id": 1911385, "category_id": 196, "iscrowd": 0, "bbox": [343, 172, 94, 66], "area": 380}, {"id": 2566953, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 95, 90], "area": 6387}, {"id": 2106668, "category_id": 200, "iscrowd": 0, "bbox": [0, 337, 17, 109], "area": 682}], "file_name": "000000459662.png", "image_id": 459662}, {"segments_info": [{"id": 9349540, "category_id": 25, "iscrowd": 0, "bbox": [202, 191, 168, 118], "area": 6436}, {"id": 12831943, "category_id": 154, "iscrowd": 0, "bbox": [0, 187, 156, 31], "area": 2980}, {"id": 5862496, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 314], "area": 110257}, {"id": 6728321, "category_id": 193, "iscrowd": 0, "bbox": [0, 60, 640, 420], "area": 187350}], "file_name": "000000459757.png", "image_id": 459757}, {"segments_info": [{"id": 1710359, "category_id": 1, "iscrowd": 0, "bbox": [339, 411, 8, 17], "area": 90}, {"id": 2763318, "category_id": 1, "iscrowd": 0, "bbox": [50, 408, 20, 20], "area": 217}, {"id": 3618610, "category_id": 1, "iscrowd": 0, "bbox": [543, 402, 17, 26], "area": 310}, {"id": 2434851, "category_id": 1, "iscrowd": 0, "bbox": [140, 420, 11, 8], "area": 64}, {"id": 2367775, "category_id": 1, "iscrowd": 0, "bbox": [93, 404, 26, 24], "area": 241}, {"id": 1053460, "category_id": 1, "iscrowd": 0, "bbox": [356, 404, 12, 24], "area": 195}, {"id": 7038301, "category_id": 9, "iscrowd": 0, "bbox": [59, 338, 20, 34], "area": 318}, {"id": 9010555, "category_id": 38, "iscrowd": 0, "bbox": [375, 253, 203, 125], "area": 1737}, {"id": 8681328, "category_id": 95, "iscrowd": 0, "bbox": [491, 291, 71, 54], "area": 1764}, {"id": 8880506, "category_id": 155, "iscrowd": 0, "bbox": [0, 326, 640, 102], "area": 52795}, {"id": 9731950, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 355], "area": 216043}], "file_name": "000000459809.png", "image_id": 459809}, {"segments_info": [{"id": 4278368, "category_id": 51, "iscrowd": 0, "bbox": [2, 18, 478, 612], "area": 74535}, {"id": 4997981, "category_id": 51, "iscrowd": 0, "bbox": [158, 45, 117, 34], "area": 2324}, {"id": 4950447, "category_id": 52, "iscrowd": 0, "bbox": [0, 22, 480, 591], "area": 196821}, {"id": 2845077, "category_id": 122, "iscrowd": 0, "bbox": [88, 627, 218, 13], "area": 2580}, {"id": 4405325, "category_id": 189, "iscrowd": 0, "bbox": [6, 0, 474, 123], "area": 9222}, {"id": 9790586, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 480, 66], "area": 14199}], "file_name": "000000459887.png", "image_id": 459887}, {"segments_info": [{"id": 1316892, "category_id": 1, "iscrowd": 0, "bbox": [242, 149, 32, 143], "area": 3173}, {"id": 10331039, "category_id": 82, "iscrowd": 0, "bbox": [358, 202, 118, 173], "area": 12665}, {"id": 7636622, "category_id": 82, "iscrowd": 0, "bbox": [0, 106, 200, 222], "area": 35735}, {"id": 6777704, "category_id": 82, "iscrowd": 0, "bbox": [370, 46, 130, 162], "area": 18108}, {"id": 6252648, "category_id": 82, "iscrowd": 0, "bbox": [18, 255, 171, 114], "area": 8612}, {"id": 7436917, "category_id": 82, "iscrowd": 0, "bbox": [257, 256, 104, 114], "area": 5674}, {"id": 13423054, "category_id": 82, "iscrowd": 0, "bbox": [198, 286, 130, 89], "area": 6018}, {"id": 9281438, "category_id": 82, "iscrowd": 0, "bbox": [187, 147, 57, 178], "area": 7906}, {"id": 5923169, "category_id": 82, "iscrowd": 0, "bbox": [196, 97, 72, 38], "area": 1986}, {"id": 10987940, "category_id": 82, "iscrowd": 0, "bbox": [265, 133, 108, 146], "area": 13362}, {"id": 4740446, "category_id": 189, "iscrowd": 0, "bbox": [152, 51, 144, 57], "area": 4417}, {"id": 6977142, "category_id": 190, "iscrowd": 0, "bbox": [327, 362, 39, 13], "area": 318}, {"id": 6119778, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 141], "area": 35974}], "file_name": "000000459954.png", "image_id": 459954}, {"segments_info": [{"id": 6973030, "category_id": 1, "iscrowd": 0, "bbox": [412, 162, 8, 8], "area": 36}, {"id": 5392178, "category_id": 1, "iscrowd": 0, "bbox": [571, 234, 13, 10], "area": 81}, {"id": 5266015, "category_id": 1, "iscrowd": 0, "bbox": [540, 171, 5, 17], "area": 52}, {"id": 4802366, "category_id": 3, "iscrowd": 0, "bbox": [460, 181, 32, 27], "area": 606}, {"id": 6906723, "category_id": 3, "iscrowd": 0, "bbox": [327, 153, 15, 11], "area": 120}, {"id": 2566192, "category_id": 3, "iscrowd": 0, "bbox": [315, 160, 14, 14], "area": 156}, {"id": 8806988, "category_id": 3, "iscrowd": 0, "bbox": [340, 149, 12, 9], "area": 90}, {"id": 1841186, "category_id": 3, "iscrowd": 0, "bbox": [536, 271, 104, 106], "area": 7301}, {"id": 8026486, "category_id": 3, "iscrowd": 0, "bbox": [586, 169, 29, 32], "area": 736}, {"id": 8087644, "category_id": 3, "iscrowd": 0, "bbox": [356, 143, 6, 7], "area": 37}, {"id": 10262415, "category_id": 3, "iscrowd": 0, "bbox": [414, 173, 24, 19], "area": 376}, {"id": 4275506, "category_id": 3, "iscrowd": 0, "bbox": [483, 197, 47, 31], "area": 1089}, {"id": 8618363, "category_id": 3, "iscrowd": 0, "bbox": [236, 291, 61, 68], "area": 3464}, {"id": 10262674, "category_id": 3, "iscrowd": 0, "bbox": [535, 219, 75, 53], "area": 2380}, {"id": 7301477, "category_id": 3, "iscrowd": 0, "bbox": [284, 193, 28, 26], "area": 565}, {"id": 2827301, "category_id": 3, "iscrowd": 0, "bbox": [302, 172, 17, 17], "area": 191}, {"id": 4409159, "category_id": 3, "iscrowd": 1, "bbox": [1, 119, 639, 245], "area": 16494}, {"id": 4014152, "category_id": 4, "iscrowd": 0, "bbox": [413, 150, 6, 10], "area": 42}, {"id": 3487548, "category_id": 4, "iscrowd": 0, "bbox": [413, 169, 7, 9], "area": 38}, {"id": 5592922, "category_id": 4, "iscrowd": 0, "bbox": [405, 157, 7, 9], "area": 43}, {"id": 8554121, "category_id": 6, "iscrowd": 0, "bbox": [372, 128, 18, 17], "area": 274}, {"id": 8289664, "category_id": 6, "iscrowd": 0, "bbox": [352, 126, 21, 14], "area": 211}, {"id": 1711131, "category_id": 8, "iscrowd": 0, "bbox": [0, 237, 91, 53], "area": 3939}, {"id": 7564645, "category_id": 8, "iscrowd": 0, "bbox": [472, 229, 77, 56], "area": 3179}, {"id": 2828844, "category_id": 8, "iscrowd": 0, "bbox": [345, 216, 75, 74], "area": 4444}, {"id": 9079432, "category_id": 8, "iscrowd": 0, "bbox": [433, 147, 24, 28], "area": 562}, {"id": 1514277, "category_id": 10, "iscrowd": 0, "bbox": [160, 219, 10, 11], "area": 73}, {"id": 3568518, "category_id": 92, "iscrowd": 0, "bbox": [0, 92, 240, 83], "area": 6535}, {"id": 10066070, "category_id": 95, "iscrowd": 0, "bbox": [400, 95, 33, 23], "area": 453}, {"id": 4277059, "category_id": 149, "iscrowd": 0, "bbox": [127, 131, 513, 293], "area": 11824}, {"id": 2569526, "category_id": 184, "iscrowd": 0, "bbox": [0, 48, 640, 376], "area": 42765}, {"id": 3028790, "category_id": 185, "iscrowd": 0, "bbox": [80, 147, 482, 223], "area": 2816}, {"id": 16249836, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 482, 105], "area": 37025}, {"id": 3421493, "category_id": 191, "iscrowd": 0, "bbox": [0, 138, 640, 286], "area": 63310}, {"id": 1318688, "category_id": 193, "iscrowd": 0, "bbox": [448, 157, 130, 267], "area": 4010}, {"id": 7438982, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 243], "area": 48764}, {"id": 3292479, "category_id": 199, "iscrowd": 0, "bbox": [20, 221, 92, 23], "area": 1089}], "file_name": "000000460147.png", "image_id": 460147}, {"segments_info": [{"id": 9473936, "category_id": 16, "iscrowd": 0, "bbox": [258, 237, 140, 61], "area": 5579}, {"id": 6714241, "category_id": 154, "iscrowd": 0, "bbox": [0, 284, 640, 196], "area": 118833}, {"id": 10654854, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 307], "area": 176181}], "file_name": "000000460160.png", "image_id": 460160}, {"segments_info": [{"id": 3418924, "category_id": 8, "iscrowd": 0, "bbox": [227, 300, 154, 160], "area": 12989}, {"id": 5207456, "category_id": 10, "iscrowd": 0, "bbox": [244, 9, 30, 69], "area": 1044}, {"id": 4880548, "category_id": 10, "iscrowd": 0, "bbox": [200, 0, 30, 48], "area": 862}, {"id": 4076947, "category_id": 13, "iscrowd": 0, "bbox": [52, 80, 234, 225], "area": 42399}, {"id": 3881536, "category_id": 95, "iscrowd": 0, "bbox": [274, 191, 98, 118], "area": 7723}, {"id": 4344661, "category_id": 125, "iscrowd": 0, "bbox": [253, 541, 130, 99], "area": 8730}, {"id": 4144452, "category_id": 149, "iscrowd": 0, "bbox": [0, 330, 383, 172], "area": 8747}, {"id": 4084303, "category_id": 184, "iscrowd": 0, "bbox": [0, 220, 383, 99], "area": 4566}, {"id": 14007740, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 383, 279], "area": 57278}, {"id": 3289141, "category_id": 190, "iscrowd": 0, "bbox": [300, 490, 83, 24], "area": 1453}, {"id": 5989234, "category_id": 191, "iscrowd": 0, "bbox": [262, 496, 121, 80], "area": 6184}, {"id": 1784114, "category_id": 193, "iscrowd": 0, "bbox": [0, 541, 292, 99], "area": 18455}, {"id": 5327954, "category_id": 197, "iscrowd": 0, "bbox": [0, 273, 369, 112], "area": 9650}, {"id": 4146510, "category_id": 199, "iscrowd": 0, "bbox": [0, 305, 383, 267], "area": 27463}], "file_name": "000000460229.png", "image_id": 460229}, {"segments_info": [{"id": 5601443, "category_id": 1, "iscrowd": 0, "bbox": [302, 218, 97, 114], "area": 5466}, {"id": 4941172, "category_id": 62, "iscrowd": 0, "bbox": [386, 289, 254, 186], "area": 26939}, {"id": 2973039, "category_id": 62, "iscrowd": 0, "bbox": [154, 282, 80, 111], "area": 4116}, {"id": 6720664, "category_id": 65, "iscrowd": 0, "bbox": [147, 239, 282, 120], "area": 15907}, {"id": 1776450, "category_id": 109, "iscrowd": 0, "bbox": [268, 0, 327, 207], "area": 54941}, {"id": 3696513, "category_id": 118, "iscrowd": 0, "bbox": [175, 322, 396, 95], "area": 967}, {"id": 14607593, "category_id": 130, "iscrowd": 0, "bbox": [453, 105, 73, 97], "area": 3893}, {"id": 4881547, "category_id": 141, "iscrowd": 0, "bbox": [172, 236, 44, 31], "area": 536}, {"id": 1318681, "category_id": 168, "iscrowd": 0, "bbox": [338, 428, 81, 52], "area": 3200}, {"id": 860466, "category_id": 188, "iscrowd": 0, "bbox": [0, 164, 160, 266], "area": 30918}, {"id": 729385, "category_id": 195, "iscrowd": 0, "bbox": [167, 350, 29, 26], "area": 395}, {"id": 5472934, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 328], "area": 78823}, {"id": 2577768, "category_id": 200, "iscrowd": 0, "bbox": [0, 321, 640, 159], "area": 37527}], "file_name": "000000460333.png", "image_id": 460333}, {"segments_info": [{"id": 2432014, "category_id": 1, "iscrowd": 0, "bbox": [168, 156, 7, 10], "area": 51}, {"id": 3746054, "category_id": 1, "iscrowd": 0, "bbox": [221, 158, 25, 18], "area": 264}, {"id": 8224125, "category_id": 3, "iscrowd": 0, "bbox": [259, 6, 42, 42], "area": 1351}, {"id": 4867652, "category_id": 3, "iscrowd": 0, "bbox": [328, 69, 55, 45], "area": 2025}, {"id": 8025974, "category_id": 3, "iscrowd": 0, "bbox": [154, 9, 41, 40], "area": 1214}, {"id": 4469793, "category_id": 3, "iscrowd": 0, "bbox": [339, 14, 38, 23], "area": 657}, {"id": 8356229, "category_id": 6, "iscrowd": 0, "bbox": [148, 59, 121, 179], "area": 17059}, {"id": 11187390, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 242796}, {"id": 1063997, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 427, 138], "area": 7298}], "file_name": "000000460347.png", "image_id": 460347}, {"segments_info": [{"id": 6452102, "category_id": 25, "iscrowd": 0, "bbox": [48, 301, 53, 211], "area": 6239}, {"id": 5334397, "category_id": 25, "iscrowd": 0, "bbox": [184, 401, 69, 86], "area": 3889}, {"id": 4870494, "category_id": 25, "iscrowd": 0, "bbox": [337, 270, 64, 124], "area": 2505}, {"id": 5073245, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 426, 522], "area": 188944}, {"id": 14604502, "category_id": 187, "iscrowd": 0, "bbox": [316, 0, 110, 43], "area": 2166}, {"id": 10076862, "category_id": 193, "iscrowd": 0, "bbox": [0, 439, 426, 201], "area": 68634}], "file_name": "000000460379.png", "image_id": 460379}, {"segments_info": [{"id": 4619720, "category_id": 47, "iscrowd": 0, "bbox": [148, 0, 139, 154], "area": 17306}, {"id": 5729946, "category_id": 48, "iscrowd": 0, "bbox": [1, 314, 339, 112], "area": 8408}, {"id": 3299203, "category_id": 49, "iscrowd": 0, "bbox": [460, 163, 160, 40], "area": 3272}, {"id": 5346761, "category_id": 51, "iscrowd": 0, "bbox": [0, 0, 130, 99], "area": 5723}, {"id": 806512, "category_id": 56, "iscrowd": 0, "bbox": [228, 212, 100, 116], "area": 4292}, {"id": 739431, "category_id": 56, "iscrowd": 0, "bbox": [112, 202, 118, 114], "area": 8532}, {"id": 734805, "category_id": 56, "iscrowd": 0, "bbox": [189, 266, 97, 76], "area": 4923}, {"id": 604903, "category_id": 57, "iscrowd": 0, "bbox": [200, 156, 175, 82], "area": 7377}, {"id": 3826363, "category_id": 67, "iscrowd": 0, "bbox": [0, 1, 640, 418], "area": 189076}, {"id": 2577803, "category_id": 189, "iscrowd": 0, "bbox": [0, 66, 640, 360], "area": 1656}, {"id": 2461633, "category_id": 199, "iscrowd": 0, "bbox": [268, 0, 372, 425], "area": 18251}], "file_name": "000000460494.png", "image_id": 460494}, {"segments_info": [{"id": 526344, "category_id": 19, "iscrowd": 0, "bbox": [297, 116, 105, 58], "area": 2509}, {"id": 6710886, "category_id": 154, "iscrowd": 0, "bbox": [0, 111, 640, 78], "area": 40614}, {"id": 12698049, "category_id": 155, "iscrowd": 0, "bbox": [262, 79, 378, 46], "area": 9271}, {"id": 3158064, "category_id": 184, "iscrowd": 0, "bbox": [0, 61, 640, 72], "area": 16215}, {"id": 13948116, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 74], "area": 23257}, {"id": 6579300, "category_id": 192, "iscrowd": 0, "bbox": [0, 7, 528, 114], "area": 29005}], "file_name": "000000460682.png", "image_id": 460682}, {"segments_info": [{"id": 2721445, "category_id": 1, "iscrowd": 0, "bbox": [348, 305, 103, 115], "area": 4498}, {"id": 5461855, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 381, 633], "area": 179265}, {"id": 4075568, "category_id": 32, "iscrowd": 0, "bbox": [193, 88, 112, 451], "area": 29725}, {"id": 1318185, "category_id": 62, "iscrowd": 0, "bbox": [436, 480, 42, 160], "area": 4948}, {"id": 1714234, "category_id": 62, "iscrowd": 0, "bbox": [365, 361, 98, 137], "area": 6029}, {"id": 6063781, "category_id": 67, "iscrowd": 0, "bbox": [418, 351, 58, 127], "area": 3606}, {"id": 13097697, "category_id": 130, "iscrowd": 0, "bbox": [229, 0, 249, 112], "area": 16199}, {"id": 5731727, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 478, 161], "area": 12337}, {"id": 2240836, "category_id": 199, "iscrowd": 0, "bbox": [331, 136, 147, 232], "area": 26097}, {"id": 4420501, "category_id": 200, "iscrowd": 0, "bbox": [359, 455, 117, 185], "area": 8161}], "file_name": "000000460683.png", "image_id": 460683}, {"segments_info": [{"id": 6976385, "category_id": 1, "iscrowd": 0, "bbox": [88, 320, 108, 51], "area": 3280}, {"id": 8089717, "category_id": 17, "iscrowd": 0, "bbox": [56, 107, 125, 122], "area": 8329}, {"id": 8820884, "category_id": 44, "iscrowd": 0, "bbox": [39, 224, 237, 146], "area": 17514}, {"id": 6579561, "category_id": 70, "iscrowd": 0, "bbox": [280, 341, 216, 30], "area": 4901}, {"id": 7303285, "category_id": 112, "iscrowd": 0, "bbox": [87, 0, 177, 297], "area": 9923}, {"id": 5065301, "category_id": 168, "iscrowd": 0, "bbox": [394, 0, 106, 114], "area": 9694}, {"id": 5526362, "category_id": 176, "iscrowd": 0, "bbox": [225, 0, 275, 375], "area": 72031}, {"id": 12368569, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 216, 375], "area": 22994}, {"id": 16316149, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 172, 201], "area": 27013}], "file_name": "000000460841.png", "image_id": 460841}, {"segments_info": [{"id": 3026478, "category_id": 23, "iscrowd": 0, "bbox": [113, 61, 369, 248], "area": 63016}, {"id": 7763574, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 169], "area": 69909}, {"id": 6513507, "category_id": 192, "iscrowd": 0, "bbox": [0, 119, 640, 154], "area": 30592}, {"id": 5263440, "category_id": 193, "iscrowd": 0, "bbox": [0, 221, 640, 139], "area": 49941}, {"id": 4605510, "category_id": 198, "iscrowd": 0, "bbox": [314, 279, 260, 81], "area": 16643}], "file_name": "000000460927.png", "image_id": 460927}, {"segments_info": [{"id": 4285489, "category_id": 44, "iscrowd": 0, "bbox": [289, 1, 132, 414], "area": 36564}, {"id": 4150883, "category_id": 58, "iscrowd": 0, "bbox": [178, 357, 154, 276], "area": 33197}, {"id": 13742720, "category_id": 189, "iscrowd": 0, "bbox": [0, 255, 480, 385], "area": 66705}, {"id": 3359537, "category_id": 196, "iscrowd": 0, "bbox": [182, 408, 183, 165], "area": 101}], "file_name": "000000460929.png", "image_id": 460929}, {"segments_info": [{"id": 4735294, "category_id": 1, "iscrowd": 0, "bbox": [510, 431, 19, 29], "area": 427}, {"id": 6972769, "category_id": 6, "iscrowd": 0, "bbox": [61, 358, 503, 196], "area": 79110}, {"id": 9539982, "category_id": 149, "iscrowd": 0, "bbox": [0, 478, 604, 162], "area": 69159}, {"id": 5005142, "category_id": 184, "iscrowd": 0, "bbox": [0, 196, 604, 304], "area": 25456}, {"id": 8685189, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 604, 478], "area": 212068}], "file_name": "000000460967.png", "image_id": 460967}, {"segments_info": [{"id": 4341313, "category_id": 1, "iscrowd": 0, "bbox": [0, 145, 122, 175], "area": 11605}, {"id": 4209729, "category_id": 1, "iscrowd": 0, "bbox": [479, 109, 65, 199], "area": 6262}, {"id": 2236196, "category_id": 1, "iscrowd": 0, "bbox": [537, 79, 75, 266], "area": 13419}, {"id": 7368308, "category_id": 1, "iscrowd": 0, "bbox": [346, 142, 97, 134], "area": 7309}, {"id": 4278889, "category_id": 1, "iscrowd": 0, "bbox": [5, 26, 605, 586], "area": 189860}, {"id": 8223616, "category_id": 1, "iscrowd": 0, "bbox": [127, 147, 85, 98], "area": 4746}, {"id": 9358058, "category_id": 53, "iscrowd": 0, "bbox": [228, 258, 119, 104], "area": 9867}, {"id": 5332334, "category_id": 62, "iscrowd": 0, "bbox": [427, 232, 59, 105], "area": 3963}, {"id": 12507871, "category_id": 62, "iscrowd": 0, "bbox": [115, 242, 51, 52], "area": 1452}, {"id": 11382454, "category_id": 62, "iscrowd": 0, "bbox": [0, 195, 79, 333], "area": 14746}, {"id": 14210775, "category_id": 181, "iscrowd": 0, "bbox": [168, 52, 59, 144], "area": 4590}, {"id": 9935260, "category_id": 186, "iscrowd": 0, "bbox": [38, 0, 562, 64], "area": 16895}, {"id": 4013639, "category_id": 190, "iscrowd": 0, "bbox": [452, 269, 160, 227], "area": 18525}, {"id": 11711414, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 612, 289], "area": 65907}], "file_name": "000000461009.png", "image_id": 461009}, {"segments_info": [{"id": 395530, "category_id": 23, "iscrowd": 0, "bbox": [201, 125, 107, 110], "area": 5083}, {"id": 2840392, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 332], "area": 160829}], "file_name": "000000461036.png", "image_id": 461036}, {"segments_info": [{"id": 1920058, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 335], "area": 151489}, {"id": 9671824, "category_id": 197, "iscrowd": 0, "bbox": [249, 87, 165, 248], "area": 16011}], "file_name": "000000461275.png", "image_id": 461275}, {"segments_info": [{"id": 8628918, "category_id": 20, "iscrowd": 0, "bbox": [416, 217, 46, 82], "area": 2847}, {"id": 5930896, "category_id": 20, "iscrowd": 0, "bbox": [537, 219, 92, 82], "area": 4015}, {"id": 12309215, "category_id": 20, "iscrowd": 0, "bbox": [218, 201, 80, 40], "area": 1448}, {"id": 4284271, "category_id": 20, "iscrowd": 0, "bbox": [36, 194, 87, 120], "area": 5695}, {"id": 6522766, "category_id": 20, "iscrowd": 0, "bbox": [195, 233, 82, 49], "area": 2731}, {"id": 8299952, "category_id": 20, "iscrowd": 0, "bbox": [344, 225, 54, 89], "area": 2576}, {"id": 5732747, "category_id": 20, "iscrowd": 0, "bbox": [579, 188, 61, 111], "area": 3232}, {"id": 10336711, "category_id": 20, "iscrowd": 0, "bbox": [353, 189, 94, 71], "area": 3633}, {"id": 7115937, "category_id": 20, "iscrowd": 0, "bbox": [269, 193, 75, 118], "area": 5761}, {"id": 7049118, "category_id": 20, "iscrowd": 0, "bbox": [108, 189, 132, 121], "area": 8037}, {"id": 6784403, "category_id": 20, "iscrowd": 0, "bbox": [492, 182, 84, 116], "area": 4775}, {"id": 4876662, "category_id": 20, "iscrowd": 0, "bbox": [1, 225, 50, 87], "area": 3286}, {"id": 2906472, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 277], "area": 124226}, {"id": 1990488, "category_id": 193, "iscrowd": 0, "bbox": [0, 242, 640, 185], "area": 91269}, {"id": 1981021, "category_id": 197, "iscrowd": 0, "bbox": [509, 94, 131, 111], "area": 8602}], "file_name": "000000461405.png", "image_id": 461405}, {"segments_info": [{"id": 8031358, "category_id": 15, "iscrowd": 0, "bbox": [206, 62, 279, 270], "area": 31097}, {"id": 8097155, "category_id": 15, "iscrowd": 0, "bbox": [140, 50, 188, 184], "area": 10201}, {"id": 3301443, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 356, 127], "area": 30354}, {"id": 8224643, "category_id": 191, "iscrowd": 0, "bbox": [0, 122, 405, 254], "area": 52206}, {"id": 4814166, "category_id": 193, "iscrowd": 0, "bbox": [0, 78, 500, 298], "area": 25315}, {"id": 3157548, "category_id": 194, "iscrowd": 0, "bbox": [214, 191, 275, 185], "area": 26413}, {"id": 6783360, "category_id": 199, "iscrowd": 0, "bbox": [349, 0, 151, 47], "area": 5799}], "file_name": "000000461573.png", "image_id": 461573}, {"segments_info": [{"id": 5395287, "category_id": 1, "iscrowd": 0, "bbox": [48, 112, 291, 365], "area": 47665}, {"id": 3157557, "category_id": 1, "iscrowd": 0, "bbox": [464, 120, 176, 449], "area": 30198}, {"id": 4275505, "category_id": 1, "iscrowd": 0, "bbox": [269, 95, 206, 123], "area": 12832}, {"id": 3617319, "category_id": 3, "iscrowd": 0, "bbox": [4, 32, 636, 347], "area": 81559}, {"id": 7105124, "category_id": 4, "iscrowd": 0, "bbox": [2, 211, 638, 358], "area": 52622}, {"id": 2631719, "category_id": 27, "iscrowd": 0, "bbox": [1, 193, 166, 178], "area": 11209}, {"id": 5330255, "category_id": 128, "iscrowd": 0, "bbox": [102, 0, 538, 139], "area": 32036}, {"id": 4085077, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 511, 569], "area": 80036}], "file_name": "000000461751.png", "image_id": 461751}, {"segments_info": [{"id": 3355443, "category_id": 1, "iscrowd": 0, "bbox": [325, 510, 109, 127], "area": 7038}, {"id": 10066329, "category_id": 1, "iscrowd": 0, "bbox": [59, 182, 291, 448], "area": 75813}, {"id": 7368816, "category_id": 39, "iscrowd": 0, "bbox": [286, 70, 162, 244], "area": 8009}, {"id": 5066061, "category_id": 125, "iscrowd": 0, "bbox": [0, 576, 449, 64], "area": 12411}, {"id": 15132390, "category_id": 130, "iscrowd": 0, "bbox": [269, 46, 180, 120], "area": 9330}, {"id": 2829099, "category_id": 145, "iscrowd": 0, "bbox": [416, 561, 21, 36], "area": 218}, {"id": 855309, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 449, 593], "area": 171775}], "file_name": "000000462031.png", "image_id": 462031}, {"segments_info": [{"id": 9548478, "category_id": 1, "iscrowd": 0, "bbox": [211, 19, 205, 377], "area": 21687}, {"id": 2174772, "category_id": 1, "iscrowd": 0, "bbox": [275, 21, 190, 211], "area": 15953}, {"id": 6193296, "category_id": 1, "iscrowd": 0, "bbox": [354, 22, 131, 173], "area": 11830}, {"id": 7703700, "category_id": 1, "iscrowd": 0, "bbox": [141, 186, 113, 210], "area": 14602}, {"id": 6584964, "category_id": 1, "iscrowd": 0, "bbox": [133, 13, 140, 191], "area": 13261}, {"id": 5929611, "category_id": 1, "iscrowd": 0, "bbox": [0, 1, 108, 394], "area": 27143}, {"id": 4874088, "category_id": 1, "iscrowd": 0, "bbox": [34, 25, 167, 376], "area": 32363}, {"id": 2242109, "category_id": 32, "iscrowd": 0, "bbox": [278, 110, 41, 50], "area": 582}, {"id": 4217445, "category_id": 47, "iscrowd": 0, "bbox": [306, 140, 25, 48], "area": 1022}, {"id": 7311519, "category_id": 49, "iscrowd": 0, "bbox": [411, 265, 29, 8], "area": 152}, {"id": 11391711, "category_id": 61, "iscrowd": 0, "bbox": [401, 169, 99, 170], "area": 8585}, {"id": 8298668, "category_id": 189, "iscrowd": 0, "bbox": [269, 282, 231, 119], "area": 5918}, {"id": 5139577, "category_id": 196, "iscrowd": 0, "bbox": [269, 209, 231, 192], "area": 15856}, {"id": 8167598, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 235], "area": 20609}], "file_name": "000000462371.png", "image_id": 462371}, {"segments_info": [{"id": 7697282, "category_id": 47, "iscrowd": 0, "bbox": [82, 22, 32, 37], "area": 980}, {"id": 470599, "category_id": 47, "iscrowd": 0, "bbox": [466, 2, 159, 204], "area": 22735}, {"id": 6907765, "category_id": 47, "iscrowd": 0, "bbox": [144, 14, 38, 35], "area": 1007}, {"id": 4802671, "category_id": 47, "iscrowd": 0, "bbox": [75, 4, 23, 42], "area": 366}, {"id": 5131611, "category_id": 51, "iscrowd": 0, "bbox": [58, 41, 118, 42], "area": 2233}, {"id": 1206425, "category_id": 55, "iscrowd": 0, "bbox": [240, 312, 136, 88], "area": 8498}, {"id": 1121864, "category_id": 67, "iscrowd": 0, "bbox": [1, 1, 638, 464], "area": 101156}, {"id": 2042959, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 13607}, {"id": 4219766, "category_id": 196, "iscrowd": 0, "bbox": [65, 54, 504, 376], "area": 97223}], "file_name": "000000462576.png", "image_id": 462576}, {"segments_info": [{"id": 5210011, "category_id": 62, "iscrowd": 0, "bbox": [555, 344, 85, 110], "area": 3647}, {"id": 6390666, "category_id": 64, "iscrowd": 0, "bbox": [127, 240, 109, 87], "area": 5088}, {"id": 13163228, "category_id": 70, "iscrowd": 0, "bbox": [17, 287, 155, 182], "area": 17860}, {"id": 13756392, "category_id": 81, "iscrowd": 0, "bbox": [407, 244, 121, 44], "area": 4097}, {"id": 9614797, "category_id": 109, "iscrowd": 0, "bbox": [122, 44, 294, 316], "area": 44879}, {"id": 9020092, "category_id": 133, "iscrowd": 0, "bbox": [445, 84, 195, 190], "area": 9871}, {"id": 8758470, "category_id": 168, "iscrowd": 0, "bbox": [389, 266, 151, 84], "area": 3505}, {"id": 6916289, "category_id": 176, "iscrowd": 0, "bbox": [115, 44, 525, 406], "area": 66709}, {"id": 7007731, "category_id": 188, "iscrowd": 0, "bbox": [109, 0, 304, 51], "area": 14260}, {"id": 6858942, "category_id": 189, "iscrowd": 0, "bbox": [561, 245, 79, 71], "area": 3290}, {"id": 3756141, "category_id": 190, "iscrowd": 0, "bbox": [0, 377, 640, 107], "area": 35143}, {"id": 4415188, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 466], "area": 84791}, {"id": 6415857, "category_id": 200, "iscrowd": 0, "bbox": [144, 457, 129, 27], "area": 2764}], "file_name": "000000462614.png", "image_id": 462614}, {"segments_info": [{"id": 12704996, "category_id": 82, "iscrowd": 0, "bbox": [468, 117, 96, 143], "area": 4639}, {"id": 13034987, "category_id": 82, "iscrowd": 0, "bbox": [108, 100, 107, 54], "area": 2903}, {"id": 12642285, "category_id": 82, "iscrowd": 0, "bbox": [36, 159, 37, 166], "area": 5315}, {"id": 13101805, "category_id": 82, "iscrowd": 0, "bbox": [151, 150, 85, 213], "area": 17197}, {"id": 6456975, "category_id": 82, "iscrowd": 0, "bbox": [73, 234, 83, 115], "area": 9137}, {"id": 12510956, "category_id": 82, "iscrowd": 0, "bbox": [231, 135, 100, 228], "area": 21156}, {"id": 11521493, "category_id": 82, "iscrowd": 0, "bbox": [436, 151, 111, 209], "area": 15785}, {"id": 14020337, "category_id": 82, "iscrowd": 0, "bbox": [68, 112, 92, 124], "area": 9836}, {"id": 7902616, "category_id": 82, "iscrowd": 0, "bbox": [475, 255, 138, 164], "area": 19394}, {"id": 2710384, "category_id": 112, "iscrowd": 0, "bbox": [161, 0, 479, 309], "area": 63036}, {"id": 2775676, "category_id": 191, "iscrowd": 0, "bbox": [0, 288, 640, 91], "area": 17855}, {"id": 3763341, "category_id": 194, "iscrowd": 0, "bbox": [0, 352, 640, 74], "area": 29577}, {"id": 7445947, "category_id": 195, "iscrowd": 0, "bbox": [188, 123, 50, 30], "area": 743}, {"id": 10998243, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 533, 308], "area": 26141}], "file_name": "000000462629.png", "image_id": 462629}, {"segments_info": [{"id": 1390723, "category_id": 1, "iscrowd": 0, "bbox": [0, 88, 393, 548], "area": 58170}, {"id": 1588596, "category_id": 77, "iscrowd": 0, "bbox": [24, 42, 278, 497], "area": 81261}, {"id": 336488, "category_id": 190, "iscrowd": 0, "bbox": [243, 79, 182, 561], "area": 60061}], "file_name": "000000462643.png", "image_id": 462643}, {"segments_info": [{"id": 4539241, "category_id": 1, "iscrowd": 0, "bbox": [93, 137, 28, 35], "area": 561}, {"id": 2769242, "category_id": 18, "iscrowd": 0, "bbox": [211, 204, 53, 42], "area": 1298}, {"id": 12370906, "category_id": 42, "iscrowd": 0, "bbox": [166, 216, 171, 55], "area": 2230}, {"id": 8092020, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 269076}], "file_name": "000000462728.png", "image_id": 462728}, {"segments_info": [{"id": 4473651, "category_id": 3, "iscrowd": 0, "bbox": [38, 186, 30, 21], "area": 297}, {"id": 6318697, "category_id": 4, "iscrowd": 0, "bbox": [260, 129, 239, 252], "area": 32378}, {"id": 5338761, "category_id": 8, "iscrowd": 0, "bbox": [65, 139, 234, 105], "area": 13444}, {"id": 12563864, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 168], "area": 81123}, {"id": 4809841, "category_id": 192, "iscrowd": 0, "bbox": [384, 153, 256, 51], "area": 6466}, {"id": 3107166, "category_id": 193, "iscrowd": 0, "bbox": [0, 181, 640, 245], "area": 51381}, {"id": 6786217, "category_id": 194, "iscrowd": 0, "bbox": [0, 202, 640, 224], "area": 54969}, {"id": 6652047, "category_id": 197, "iscrowd": 0, "bbox": [0, 82, 413, 122], "area": 21449}], "file_name": "000000462756.png", "image_id": 462756}, {"segments_info": [{"id": 9273991, "category_id": 1, "iscrowd": 0, "bbox": [263, 141, 19, 36], "area": 426}, {"id": 3358301, "category_id": 1, "iscrowd": 0, "bbox": [187, 148, 23, 23], "area": 263}, {"id": 9866653, "category_id": 1, "iscrowd": 0, "bbox": [442, 138, 31, 35], "area": 701}, {"id": 10460321, "category_id": 1, "iscrowd": 0, "bbox": [414, 144, 32, 36], "area": 664}, {"id": 7104889, "category_id": 1, "iscrowd": 0, "bbox": [465, 145, 30, 32], "area": 496}, {"id": 3225934, "category_id": 1, "iscrowd": 0, "bbox": [276, 146, 25, 27], "area": 376}, {"id": 4014684, "category_id": 1, "iscrowd": 0, "bbox": [289, 144, 23, 38], "area": 337}, {"id": 1842719, "category_id": 1, "iscrowd": 0, "bbox": [0, 149, 43, 98], "area": 1803}, {"id": 2369586, "category_id": 1, "iscrowd": 0, "bbox": [151, 149, 40, 33], "area": 691}, {"id": 3882057, "category_id": 1, "iscrowd": 0, "bbox": [214, 145, 33, 34], "area": 734}, {"id": 3289907, "category_id": 19, "iscrowd": 0, "bbox": [145, 187, 321, 201], "area": 33084}, {"id": 15263195, "category_id": 28, "iscrowd": 0, "bbox": [468, 106, 79, 71], "area": 1643}, {"id": 14935257, "category_id": 28, "iscrowd": 0, "bbox": [622, 118, 18, 19], "area": 249}, {"id": 11118244, "category_id": 62, "iscrowd": 0, "bbox": [339, 177, 24, 11], "area": 162}, {"id": 9016993, "category_id": 62, "iscrowd": 0, "bbox": [148, 196, 38, 76], "area": 1041}, {"id": 12897750, "category_id": 62, "iscrowd": 0, "bbox": [523, 196, 80, 97], "area": 4504}, {"id": 8093311, "category_id": 62, "iscrowd": 0, "bbox": [406, 175, 37, 11], "area": 268}, {"id": 12701401, "category_id": 62, "iscrowd": 0, "bbox": [457, 195, 73, 90], "area": 3609}, {"id": 9544622, "category_id": 62, "iscrowd": 0, "bbox": [59, 193, 88, 100], "area": 3097}, {"id": 9014674, "category_id": 62, "iscrowd": 0, "bbox": [480, 178, 38, 10], "area": 217}, {"id": 10132382, "category_id": 62, "iscrowd": 0, "bbox": [529, 176, 43, 16], "area": 414}, {"id": 13815243, "category_id": 62, "iscrowd": 0, "bbox": [515, 175, 31, 10], "area": 172}, {"id": 12696768, "category_id": 62, "iscrowd": 0, "bbox": [565, 176, 42, 15], "area": 436}, {"id": 8554891, "category_id": 62, "iscrowd": 0, "bbox": [260, 177, 41, 22], "area": 464}, {"id": 8223609, "category_id": 62, "iscrowd": 0, "bbox": [231, 178, 30, 26], "area": 489}, {"id": 12105137, "category_id": 62, "iscrowd": 0, "bbox": [370, 178, 47, 9], "area": 282}, {"id": 7962243, "category_id": 62, "iscrowd": 1, "bbox": [8, 171, 632, 103], "area": 6100}, {"id": 1448728, "category_id": 64, "iscrowd": 0, "bbox": [156, 137, 33, 32], "area": 533}, {"id": 6849417, "category_id": 64, "iscrowd": 0, "bbox": [337, 33, 106, 91], "area": 5961}, {"id": 4876129, "category_id": 64, "iscrowd": 0, "bbox": [393, 132, 28, 44], "area": 765}, {"id": 7433586, "category_id": 67, "iscrowd": 0, "bbox": [603, 181, 24, 5], "area": 111}, {"id": 11575703, "category_id": 67, "iscrowd": 0, "bbox": [475, 176, 84, 7], "area": 92}, {"id": 12169393, "category_id": 67, "iscrowd": 0, "bbox": [433, 175, 44, 9], "area": 288}, {"id": 4343885, "category_id": 67, "iscrowd": 0, "bbox": [187, 172, 40, 8], "area": 132}, {"id": 8291466, "category_id": 67, "iscrowd": 0, "bbox": [340, 177, 300, 113], "area": 2523}, {"id": 3358028, "category_id": 67, "iscrowd": 0, "bbox": [280, 169, 14, 9], "area": 77}, {"id": 5722979, "category_id": 67, "iscrowd": 0, "bbox": [191, 184, 62, 7], "area": 259}, {"id": 7043198, "category_id": 67, "iscrowd": 0, "bbox": [58, 185, 90, 15], "area": 898}, {"id": 8950163, "category_id": 118, "iscrowd": 0, "bbox": [0, 215, 640, 161], "area": 26247}, {"id": 10990780, "category_id": 171, "iscrowd": 0, "bbox": [500, 161, 128, 20], "area": 1269}, {"id": 6717808, "category_id": 184, "iscrowd": 0, "bbox": [66, 0, 574, 183], "area": 18631}, {"id": 9211540, "category_id": 186, "iscrowd": 0, "bbox": [160, 0, 480, 96], "area": 23364}, {"id": 5265759, "category_id": 189, "iscrowd": 0, "bbox": [608, 187, 23, 40], "area": 273}, {"id": 4869191, "category_id": 195, "iscrowd": 0, "bbox": [0, 109, 12, 22], "area": 195}, {"id": 2633009, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 233], "area": 44210}], "file_name": "000000462904.png", "image_id": 462904}, {"segments_info": [{"id": 3551278, "category_id": 3, "iscrowd": 0, "bbox": [611, 243, 29, 17], "area": 366}, {"id": 6712429, "category_id": 5, "iscrowd": 0, "bbox": [0, 99, 640, 287], "area": 73163}, {"id": 2962225, "category_id": 128, "iscrowd": 0, "bbox": [473, 179, 154, 119], "area": 7204}, {"id": 4015434, "category_id": 184, "iscrowd": 0, "bbox": [35, 203, 58, 20], "area": 320}, {"id": 10590616, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 225], "area": 107677}, {"id": 4081487, "category_id": 191, "iscrowd": 0, "bbox": [609, 259, 31, 20], "area": 560}, {"id": 797988, "category_id": 193, "iscrowd": 0, "bbox": [0, 247, 640, 180], "area": 75267}, {"id": 1253927, "category_id": 194, "iscrowd": 0, "bbox": [0, 300, 356, 46], "area": 7235}, {"id": 4079681, "category_id": 197, "iscrowd": 0, "bbox": [608, 220, 32, 39], "area": 345}], "file_name": "000000463037.png", "image_id": 463037}, {"segments_info": [{"id": 10852532, "category_id": 1, "iscrowd": 0, "bbox": [219, 15, 302, 410], "area": 48599}, {"id": 7789483, "category_id": 37, "iscrowd": 0, "bbox": [104, 245, 27, 26], "area": 568}, {"id": 6971222, "category_id": 43, "iscrowd": 0, "bbox": [11, 233, 217, 104], "area": 11119}, {"id": 6511947, "category_id": 138, "iscrowd": 0, "bbox": [48, 305, 592, 122], "area": 53719}, {"id": 4205326, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 151677}], "file_name": "000000463174.png", "image_id": 463174}, {"segments_info": [{"id": 10520685, "category_id": 1, "iscrowd": 0, "bbox": [14, 56, 237, 418], "area": 56609}, {"id": 8945261, "category_id": 1, "iscrowd": 0, "bbox": [236, 114, 102, 366], "area": 13163}, {"id": 7367531, "category_id": 1, "iscrowd": 0, "bbox": [397, 157, 28, 39], "area": 458}, {"id": 5065605, "category_id": 1, "iscrowd": 0, "bbox": [416, 172, 52, 39], "area": 1075}, {"id": 8424087, "category_id": 1, "iscrowd": 0, "bbox": [119, 142, 41, 48], "area": 1094}, {"id": 10853249, "category_id": 1, "iscrowd": 0, "bbox": [216, 135, 58, 107], "area": 3055}, {"id": 5659478, "category_id": 1, "iscrowd": 0, "bbox": [608, 148, 32, 49], "area": 857}, {"id": 4800314, "category_id": 1, "iscrowd": 0, "bbox": [155, 117, 119, 229], "area": 13508}, {"id": 6118749, "category_id": 1, "iscrowd": 0, "bbox": [579, 146, 36, 45], "area": 1157}, {"id": 5531231, "category_id": 1, "iscrowd": 0, "bbox": [341, 71, 299, 403], "area": 53030}, {"id": 5197389, "category_id": 1, "iscrowd": 0, "bbox": [291, 107, 195, 373], "area": 43612}, {"id": 8688786, "category_id": 1, "iscrowd": 0, "bbox": [553, 140, 28, 47], "area": 472}, {"id": 10859176, "category_id": 6, "iscrowd": 0, "bbox": [0, 0, 640, 356], "area": 78321}, {"id": 3685179, "category_id": 27, "iscrowd": 0, "bbox": [471, 185, 169, 200], "area": 6429}, {"id": 3423567, "category_id": 31, "iscrowd": 0, "bbox": [169, 272, 76, 207], "area": 6603}, {"id": 3814713, "category_id": 77, "iscrowd": 0, "bbox": [352, 343, 36, 48], "area": 665}, {"id": 11973021, "category_id": 181, "iscrowd": 0, "bbox": [0, 234, 31, 199], "area": 2496}, {"id": 13029050, "category_id": 186, "iscrowd": 0, "bbox": [89, 0, 377, 3], "area": 767}], "file_name": "000000463199.png", "image_id": 463199}, {"segments_info": [{"id": 6522792, "category_id": 47, "iscrowd": 0, "bbox": [35, 85, 406, 501], "area": 131480}, {"id": 14335151, "category_id": 47, "iscrowd": 0, "bbox": [502, 2, 99, 135], "area": 10546}, {"id": 5812955, "category_id": 55, "iscrowd": 0, "bbox": [210, 110, 389, 325], "area": 57948}, {"id": 12629424, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 612, 604], "area": 126415}, {"id": 6006478, "category_id": 122, "iscrowd": 0, "bbox": [399, 311, 80, 62], "area": 803}, {"id": 13095628, "category_id": 189, "iscrowd": 0, "bbox": [114, 0, 225, 34], "area": 945}, {"id": 14606291, "category_id": 195, "iscrowd": 0, "bbox": [394, 63, 181, 146], "area": 8452}], "file_name": "000000463283.png", "image_id": 463283}, {"segments_info": [{"id": 4866112, "category_id": 1, "iscrowd": 0, "bbox": [512, 240, 8, 30], "area": 134}, {"id": 4010811, "category_id": 1, "iscrowd": 0, "bbox": [476, 239, 6, 16], "area": 58}, {"id": 8479860, "category_id": 1, "iscrowd": 0, "bbox": [405, 236, 5, 13], "area": 45}, {"id": 3484459, "category_id": 1, "iscrowd": 0, "bbox": [438, 237, 4, 12], "area": 27}, {"id": 8352362, "category_id": 1, "iscrowd": 0, "bbox": [627, 234, 13, 47], "area": 276}, {"id": 5784118, "category_id": 1, "iscrowd": 0, "bbox": [616, 232, 17, 52], "area": 509}, {"id": 3418670, "category_id": 1, "iscrowd": 0, "bbox": [493, 239, 7, 16], "area": 80}, {"id": 4866629, "category_id": 1, "iscrowd": 0, "bbox": [547, 227, 21, 63], "area": 834}, {"id": 3089448, "category_id": 1, "iscrowd": 0, "bbox": [483, 240, 8, 15], "area": 73}, {"id": 2958628, "category_id": 1, "iscrowd": 0, "bbox": [507, 240, 4, 13], "area": 37}, {"id": 6443596, "category_id": 1, "iscrowd": 0, "bbox": [520, 246, 8, 33], "area": 167}, {"id": 8482414, "category_id": 1, "iscrowd": 0, "bbox": [524, 229, 23, 57], "area": 760}, {"id": 5125679, "category_id": 1, "iscrowd": 0, "bbox": [606, 236, 11, 17], "area": 125}, {"id": 8355201, "category_id": 1, "iscrowd": 1, "bbox": [378, 205, 95, 59], "area": 1635}, {"id": 8157561, "category_id": 2, "iscrowd": 0, "bbox": [397, 247, 16, 11], "area": 92}, {"id": 6250597, "category_id": 2, "iscrowd": 0, "bbox": [421, 244, 12, 12], "area": 106}, {"id": 3617844, "category_id": 2, "iscrowd": 0, "bbox": [492, 254, 6, 12], "area": 54}, {"id": 6513250, "category_id": 18, "iscrowd": 0, "bbox": [522, 281, 45, 33], "area": 788}, {"id": 2368804, "category_id": 19, "iscrowd": 0, "bbox": [0, 209, 234, 217], "area": 8380}, {"id": 1579804, "category_id": 19, "iscrowd": 0, "bbox": [30, 192, 355, 288], "area": 61189}, {"id": 1641786, "category_id": 27, "iscrowd": 0, "bbox": [519, 245, 6, 12], "area": 34}, {"id": 3222313, "category_id": 27, "iscrowd": 0, "bbox": [546, 239, 29, 35], "area": 301}, {"id": 9672330, "category_id": 128, "iscrowd": 0, "bbox": [0, 46, 567, 209], "area": 49676}, {"id": 7895937, "category_id": 149, "iscrowd": 0, "bbox": [0, 242, 502, 238], "area": 54709}, {"id": 8810598, "category_id": 151, "iscrowd": 0, "bbox": [551, 147, 89, 39], "area": 2464}, {"id": 4675916, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 247], "area": 18835}, {"id": 13930865, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 183], "area": 67514}, {"id": 9276557, "category_id": 191, "iscrowd": 0, "bbox": [477, 254, 163, 226], "area": 29490}, {"id": 4544595, "category_id": 193, "iscrowd": 0, "bbox": [568, 253, 72, 56], "area": 1492}, {"id": 5787209, "category_id": 197, "iscrowd": 0, "bbox": [557, 176, 83, 98], "area": 5903}], "file_name": "000000463522.png", "image_id": 463522}, {"segments_info": [{"id": 1186328, "category_id": 44, "iscrowd": 0, "bbox": [107, 109, 78, 144], "area": 5412}, {"id": 1383450, "category_id": 44, "iscrowd": 0, "bbox": [35, 112, 82, 81], "area": 3260}, {"id": 6315092, "category_id": 47, "iscrowd": 0, "bbox": [0, 188, 159, 190], "area": 22882}, {"id": 5721667, "category_id": 48, "iscrowd": 0, "bbox": [519, 122, 33, 12], "area": 111}, {"id": 5664362, "category_id": 51, "iscrowd": 0, "bbox": [73, 56, 185, 144], "area": 15578}, {"id": 3697837, "category_id": 54, "iscrowd": 0, "bbox": [221, 185, 170, 144], "area": 16036}, {"id": 4682400, "category_id": 54, "iscrowd": 0, "bbox": [314, 142, 153, 134], "area": 13173}, {"id": 3757681, "category_id": 57, "iscrowd": 0, "bbox": [169, 165, 8, 4], "area": 24}, {"id": 4876445, "category_id": 57, "iscrowd": 0, "bbox": [117, 91, 28, 15], "area": 238}, {"id": 4876183, "category_id": 57, "iscrowd": 0, "bbox": [179, 83, 18, 12], "area": 97}, {"id": 5798571, "category_id": 57, "iscrowd": 0, "bbox": [148, 96, 41, 32], "area": 316}, {"id": 5988186, "category_id": 189, "iscrowd": 0, "bbox": [0, 84, 640, 365], "area": 30555}, {"id": 7496274, "category_id": 195, "iscrowd": 0, "bbox": [31, 53, 609, 339], "area": 63576}, {"id": 2960162, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 148], "area": 53271}], "file_name": "000000463527.png", "image_id": 463527}, {"segments_info": [{"id": 1972760, "category_id": 1, "iscrowd": 0, "bbox": [285, 66, 14, 30], "area": 214}, {"id": 4012093, "category_id": 1, "iscrowd": 0, "bbox": [98, 41, 9, 19], "area": 87}, {"id": 3422004, "category_id": 1, "iscrowd": 0, "bbox": [261, 102, 27, 35], "area": 479}, {"id": 3289195, "category_id": 1, "iscrowd": 0, "bbox": [465, 86, 14, 36], "area": 296}, {"id": 2235694, "category_id": 1, "iscrowd": 0, "bbox": [276, 64, 11, 22], "area": 89}, {"id": 1578519, "category_id": 1, "iscrowd": 0, "bbox": [500, 160, 50, 93], "area": 2306}, {"id": 2238266, "category_id": 1, "iscrowd": 0, "bbox": [101, 132, 58, 104], "area": 2820}, {"id": 7824459, "category_id": 1, "iscrowd": 0, "bbox": [295, 161, 46, 91], "area": 2014}, {"id": 3486038, "category_id": 1, "iscrowd": 0, "bbox": [556, 82, 21, 26], "area": 240}, {"id": 4008769, "category_id": 1, "iscrowd": 0, "bbox": [191, 52, 12, 23], "area": 135}, {"id": 7167336, "category_id": 1, "iscrowd": 0, "bbox": [450, 57, 18, 21], "area": 150}, {"id": 1709848, "category_id": 1, "iscrowd": 0, "bbox": [503, 132, 29, 46], "area": 735}, {"id": 4076886, "category_id": 1, "iscrowd": 0, "bbox": [237, 122, 22, 50], "area": 620}, {"id": 12759982, "category_id": 1, "iscrowd": 1, "bbox": [11, 0, 629, 159], "area": 15840}, {"id": 6906208, "category_id": 35, "iscrowd": 0, "bbox": [94, 227, 73, 13], "area": 257}, {"id": 9799301, "category_id": 35, "iscrowd": 0, "bbox": [623, 144, 12, 5], "area": 38}, {"id": 6907233, "category_id": 35, "iscrowd": 0, "bbox": [289, 94, 9, 4], "area": 17}, {"id": 7301998, "category_id": 35, "iscrowd": 0, "bbox": [451, 117, 38, 6], "area": 48}, {"id": 4998471, "category_id": 35, "iscrowd": 0, "bbox": [436, 114, 6, 1], "area": 6}, {"id": 8944763, "category_id": 35, "iscrowd": 0, "bbox": [566, 107, 12, 4], "area": 19}, {"id": 9142139, "category_id": 35, "iscrowd": 0, "bbox": [226, 169, 41, 4], "area": 49}, {"id": 6445667, "category_id": 35, "iscrowd": 0, "bbox": [496, 84, 9, 2], "area": 14}, {"id": 8024686, "category_id": 35, "iscrowd": 0, "bbox": [294, 246, 51, 9], "area": 114}, {"id": 6709848, "category_id": 35, "iscrowd": 0, "bbox": [263, 135, 22, 5], "area": 22}, {"id": 5133382, "category_id": 36, "iscrowd": 0, "bbox": [123, 62, 18, 6], "area": 48}, {"id": 11839905, "category_id": 36, "iscrowd": 0, "bbox": [225, 168, 41, 7], "area": 98}, {"id": 13352634, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 230707}], "file_name": "000000463542.png", "image_id": 463542}, {"segments_info": [{"id": 9083593, "category_id": 1, "iscrowd": 0, "bbox": [235, 143, 174, 245], "area": 15275}, {"id": 6977934, "category_id": 1, "iscrowd": 0, "bbox": [237, 9, 285, 436], "area": 55886}, {"id": 10597828, "category_id": 16, "iscrowd": 0, "bbox": [107, 186, 86, 86], "area": 2550}, {"id": 3095111, "category_id": 63, "iscrowd": 0, "bbox": [471, 1, 169, 303], "area": 41593}, {"id": 4278348, "category_id": 72, "iscrowd": 0, "bbox": [64, 2, 278, 120], "area": 31269}, {"id": 14673384, "category_id": 181, "iscrowd": 0, "bbox": [306, 0, 225, 134], "area": 8715}, {"id": 4215657, "category_id": 185, "iscrowd": 0, "bbox": [43, 138, 217, 313], "area": 57460}, {"id": 5136249, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 369, 222], "area": 18136}, {"id": 3755879, "category_id": 200, "iscrowd": 0, "bbox": [0, 201, 640, 250], "area": 38970}], "file_name": "000000463618.png", "image_id": 463618}, {"segments_info": [{"id": 6643546, "category_id": 8, "iscrowd": 0, "bbox": [454, 63, 186, 156], "area": 17485}, {"id": 6841443, "category_id": 8, "iscrowd": 0, "bbox": [291, 57, 198, 91], "area": 11646}, {"id": 8553612, "category_id": 149, "iscrowd": 0, "bbox": [0, 106, 640, 374], "area": 180046}, {"id": 4474697, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 200], "area": 44082}, {"id": 4737592, "category_id": 185, "iscrowd": 0, "bbox": [87, 50, 439, 53], "area": 6629}, {"id": 5793888, "category_id": 193, "iscrowd": 0, "bbox": [190, 72, 105, 54], "area": 2711}, {"id": 4935777, "category_id": 194, "iscrowd": 0, "bbox": [0, 141, 208, 83], "area": 7361}, {"id": 10197667, "category_id": 195, "iscrowd": 0, "bbox": [49, 227, 153, 101], "area": 13577}, {"id": 5525328, "category_id": 197, "iscrowd": 0, "bbox": [89, 0, 551, 76], "area": 11645}, {"id": 6843763, "category_id": 199, "iscrowd": 0, "bbox": [0, 123, 222, 114], "area": 4809}], "file_name": "000000463647.png", "image_id": 463647}, {"segments_info": [{"id": 3486262, "category_id": 1, "iscrowd": 0, "bbox": [164, 21, 81, 211], "area": 8211}, {"id": 2567221, "category_id": 1, "iscrowd": 0, "bbox": [260, 141, 261, 281], "area": 28870}, {"id": 263431, "category_id": 1, "iscrowd": 0, "bbox": [1, 19, 46, 196], "area": 5957}, {"id": 460810, "category_id": 1, "iscrowd": 0, "bbox": [49, 20, 49, 191], "area": 5596}, {"id": 1380883, "category_id": 32, "iscrowd": 0, "bbox": [191, 65, 16, 51], "area": 361}, {"id": 6121336, "category_id": 37, "iscrowd": 0, "bbox": [272, 85, 59, 56], "area": 2498}, {"id": 1711648, "category_id": 112, "iscrowd": 0, "bbox": [84, 0, 104, 170], "area": 13971}, {"id": 10007488, "category_id": 181, "iscrowd": 0, "bbox": [284, 0, 356, 188], "area": 54575}, {"id": 3422275, "category_id": 191, "iscrowd": 0, "bbox": [0, 175, 640, 252], "area": 88843}, {"id": 1908517, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 340], "area": 56818}], "file_name": "000000463690.png", "image_id": 463690}, {"segments_info": [{"id": 3488318, "category_id": 1, "iscrowd": 0, "bbox": [330, 189, 31, 56], "area": 753}, {"id": 3156027, "category_id": 1, "iscrowd": 0, "bbox": [152, 185, 57, 125], "area": 2481}, {"id": 1775905, "category_id": 1, "iscrowd": 0, "bbox": [39, 180, 42, 121], "area": 3324}, {"id": 4605257, "category_id": 1, "iscrowd": 0, "bbox": [300, 175, 30, 101], "area": 1583}, {"id": 2235168, "category_id": 1, "iscrowd": 0, "bbox": [82, 210, 23, 44], "area": 323}, {"id": 8156791, "category_id": 1, "iscrowd": 0, "bbox": [491, 99, 35, 45], "area": 741}, {"id": 2171436, "category_id": 1, "iscrowd": 0, "bbox": [128, 209, 13, 43], "area": 393}, {"id": 9605002, "category_id": 1, "iscrowd": 0, "bbox": [391, 112, 27, 31], "area": 402}, {"id": 1841956, "category_id": 1, "iscrowd": 0, "bbox": [130, 185, 59, 128], "area": 2767}, {"id": 4997695, "category_id": 1, "iscrowd": 0, "bbox": [611, 173, 20, 51], "area": 494}, {"id": 5064772, "category_id": 1, "iscrowd": 0, "bbox": [557, 171, 30, 50], "area": 488}, {"id": 6045742, "category_id": 1, "iscrowd": 0, "bbox": [581, 202, 28, 24], "area": 440}, {"id": 4347788, "category_id": 1, "iscrowd": 0, "bbox": [358, 147, 13, 25], "area": 190}, {"id": 3748920, "category_id": 1, "iscrowd": 1, "bbox": [1, 175, 603, 93], "area": 1942}, {"id": 5131877, "category_id": 3, "iscrowd": 0, "bbox": [357, 202, 14, 47], "area": 435}, {"id": 4406333, "category_id": 3, "iscrowd": 0, "bbox": [512, 186, 128, 137], "area": 13356}, {"id": 7498354, "category_id": 3, "iscrowd": 0, "bbox": [318, 188, 23, 15], "area": 203}, {"id": 2170147, "category_id": 4, "iscrowd": 0, "bbox": [83, 230, 16, 25], "area": 245}, {"id": 2302515, "category_id": 4, "iscrowd": 0, "bbox": [337, 219, 17, 39], "area": 456}, {"id": 7952712, "category_id": 6, "iscrowd": 0, "bbox": [198, 111, 117, 163], "area": 15384}, {"id": 7107452, "category_id": 6, "iscrowd": 0, "bbox": [370, 63, 171, 230], "area": 31288}, {"id": 2167063, "category_id": 27, "iscrowd": 0, "bbox": [161, 234, 16, 32], "area": 343}, {"id": 7631980, "category_id": 149, "iscrowd": 0, "bbox": [0, 238, 640, 189], "area": 94215}, {"id": 6185564, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 582, 205], "area": 26945}, {"id": 14005399, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 80], "area": 14754}, {"id": 2434604, "category_id": 191, "iscrowd": 0, "bbox": [0, 257, 51, 36], "area": 1328}, {"id": 6122892, "category_id": 197, "iscrowd": 0, "bbox": [27, 47, 613, 200], "area": 54403}], "file_name": "000000463730.png", "image_id": 463730}, {"segments_info": [{"id": 10133179, "category_id": 1, "iscrowd": 0, "bbox": [341, 0, 299, 478], "area": 85568}, {"id": 13820343, "category_id": 43, "iscrowd": 0, "bbox": [285, 74, 218, 400], "area": 38749}, {"id": 4148319, "category_id": 88, "iscrowd": 0, "bbox": [1, 2, 370, 466], "area": 108687}], "file_name": "000000463802.png", "image_id": 463802}, {"segments_info": [{"id": 9806759, "category_id": 44, "iscrowd": 0, "bbox": [81, 234, 26, 83], "area": 1802}, {"id": 8490379, "category_id": 44, "iscrowd": 0, "bbox": [239, 255, 27, 83], "area": 1662}, {"id": 8362914, "category_id": 44, "iscrowd": 0, "bbox": [295, 297, 21, 52], "area": 917}, {"id": 8820123, "category_id": 44, "iscrowd": 0, "bbox": [357, 273, 29, 81], "area": 1829}, {"id": 6912384, "category_id": 44, "iscrowd": 0, "bbox": [150, 239, 24, 82], "area": 1528}, {"id": 6012874, "category_id": 44, "iscrowd": 0, "bbox": [415, 316, 19, 59], "area": 986}, {"id": 9479092, "category_id": 44, "iscrowd": 0, "bbox": [108, 235, 28, 85], "area": 2023}, {"id": 11911645, "category_id": 44, "iscrowd": 0, "bbox": [175, 278, 16, 51], "area": 731}, {"id": 9017245, "category_id": 44, "iscrowd": 0, "bbox": [183, 246, 24, 81], "area": 1308}, {"id": 7107450, "category_id": 44, "iscrowd": 0, "bbox": [222, 253, 23, 80], "area": 1396}, {"id": 8818312, "category_id": 44, "iscrowd": 0, "bbox": [394, 278, 27, 84], "area": 1728}, {"id": 2246958, "category_id": 44, "iscrowd": 0, "bbox": [525, 279, 23, 91], "area": 1724}, {"id": 9475725, "category_id": 44, "iscrowd": 0, "bbox": [47, 235, 25, 79], "area": 1514}, {"id": 5923436, "category_id": 44, "iscrowd": 1, "bbox": [25, 110, 551, 288], "area": 31943}, {"id": 13031907, "category_id": 65, "iscrowd": 0, "bbox": [73, 126, 499, 144], "area": 40607}, {"id": 9742276, "category_id": 93, "iscrowd": 0, "bbox": [91, 144, 14, 15], "area": 14}, {"id": 5136511, "category_id": 118, "iscrowd": 0, "bbox": [0, 159, 640, 321], "area": 103375}], "file_name": "000000463842.png", "image_id": 463842}, {"segments_info": [{"id": 2830653, "category_id": 1, "iscrowd": 0, "bbox": [60, 333, 8, 26], "area": 173}, {"id": 8488294, "category_id": 1, "iscrowd": 0, "bbox": [52, 335, 8, 23], "area": 92}, {"id": 2106408, "category_id": 1, "iscrowd": 0, "bbox": [297, 346, 5, 7], "area": 21}, {"id": 2242140, "category_id": 1, "iscrowd": 0, "bbox": [118, 331, 10, 17], "area": 51}, {"id": 4212815, "category_id": 3, "iscrowd": 0, "bbox": [461, 325, 43, 27], "area": 758}, {"id": 7174790, "category_id": 3, "iscrowd": 0, "bbox": [160, 324, 22, 19], "area": 280}, {"id": 5265512, "category_id": 3, "iscrowd": 0, "bbox": [0, 336, 42, 26], "area": 645}, {"id": 2050402, "category_id": 3, "iscrowd": 0, "bbox": [510, 328, 31, 16], "area": 342}, {"id": 6119004, "category_id": 3, "iscrowd": 0, "bbox": [435, 330, 29, 16], "area": 366}, {"id": 4608863, "category_id": 3, "iscrowd": 0, "bbox": [77, 336, 31, 22], "area": 499}, {"id": 1645599, "category_id": 4, "iscrowd": 0, "bbox": [491, 335, 20, 19], "area": 216}, {"id": 7108223, "category_id": 9, "iscrowd": 0, "bbox": [414, 376, 70, 24], "area": 672}, {"id": 8291723, "category_id": 9, "iscrowd": 0, "bbox": [127, 380, 73, 11], "area": 502}, {"id": 7237970, "category_id": 9, "iscrowd": 0, "bbox": [153, 373, 56, 11], "area": 436}, {"id": 6117977, "category_id": 9, "iscrowd": 0, "bbox": [40, 393, 166, 54], "area": 6846}, {"id": 6120813, "category_id": 9, "iscrowd": 0, "bbox": [422, 385, 109, 27], "area": 2088}, {"id": 11042355, "category_id": 9, "iscrowd": 0, "bbox": [0, 486, 80, 32], "area": 2482}, {"id": 6516103, "category_id": 9, "iscrowd": 0, "bbox": [348, 352, 41, 7], "area": 253}, {"id": 7435395, "category_id": 9, "iscrowd": 0, "bbox": [0, 515, 119, 50], "area": 4982}, {"id": 7042953, "category_id": 9, "iscrowd": 0, "bbox": [227, 345, 21, 6], "area": 58}, {"id": 9544883, "category_id": 9, "iscrowd": 0, "bbox": [119, 388, 82, 14], "area": 564}, {"id": 9873850, "category_id": 9, "iscrowd": 0, "bbox": [0, 451, 93, 44], "area": 2636}, {"id": 6181447, "category_id": 9, "iscrowd": 0, "bbox": [387, 363, 66, 15], "area": 846}, {"id": 5393736, "category_id": 9, "iscrowd": 0, "bbox": [335, 347, 18, 9], "area": 89}, {"id": 6711404, "category_id": 9, "iscrowd": 1, "bbox": [158, 335, 249, 44], "area": 3285}, {"id": 5398895, "category_id": 95, "iscrowd": 0, "bbox": [226, 320, 101, 24], "area": 1663}, {"id": 6586788, "category_id": 130, "iscrowd": 0, "bbox": [56, 284, 478, 62], "area": 4006}, {"id": 3623772, "category_id": 149, "iscrowd": 0, "bbox": [0, 316, 538, 126], "area": 13376}, {"id": 7046048, "category_id": 151, "iscrowd": 0, "bbox": [129, 181, 353, 109], "area": 3381}, {"id": 5067344, "category_id": 155, "iscrowd": 0, "bbox": [0, 338, 564, 302], "area": 124463}, {"id": 2042932, "category_id": 166, "iscrowd": 0, "bbox": [37, 342, 527, 75], "area": 4068}, {"id": 14343387, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 564, 286], "area": 120018}, {"id": 6850724, "category_id": 197, "iscrowd": 0, "bbox": [0, 91, 564, 258], "area": 57917}], "file_name": "000000463849.png", "image_id": 463849}, {"segments_info": [{"id": 6318462, "category_id": 1, "iscrowd": 0, "bbox": [53, 35, 169, 324], "area": 31672}, {"id": 3950429, "category_id": 1, "iscrowd": 0, "bbox": [248, 73, 131, 282], "area": 17945}, {"id": 2239287, "category_id": 1, "iscrowd": 0, "bbox": [433, 155, 67, 204], "area": 8177}, {"id": 1251875, "category_id": 63, "iscrowd": 0, "bbox": [144, 214, 121, 140], "area": 11657}, {"id": 1120287, "category_id": 63, "iscrowd": 0, "bbox": [365, 237, 105, 113], "area": 6786}, {"id": 989724, "category_id": 64, "iscrowd": 0, "bbox": [0, 63, 82, 177], "area": 8287}, {"id": 14409958, "category_id": 75, "iscrowd": 0, "bbox": [177, 160, 27, 50], "area": 259}, {"id": 13358046, "category_id": 75, "iscrowd": 0, "bbox": [192, 127, 24, 29], "area": 122}, {"id": 10135481, "category_id": 75, "iscrowd": 0, "bbox": [328, 214, 8, 10], "area": 52}, {"id": 11780309, "category_id": 75, "iscrowd": 0, "bbox": [356, 191, 17, 11], "area": 98}, {"id": 2239538, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 500, 246], "area": 70614}, {"id": 4615048, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 162, 39], "area": 3130}, {"id": 1846326, "category_id": 190, "iscrowd": 0, "bbox": [293, 306, 123, 53], "area": 2624}, {"id": 1646884, "category_id": 199, "iscrowd": 0, "bbox": [0, 137, 26, 101], "area": 1586}], "file_name": "000000463918.png", "image_id": 463918}, {"segments_info": [{"id": 10919586, "category_id": 1, "iscrowd": 0, "bbox": [105, 123, 32, 62], "area": 1261}, {"id": 5197650, "category_id": 1, "iscrowd": 0, "bbox": [621, 134, 19, 99], "area": 760}, {"id": 10526873, "category_id": 1, "iscrowd": 0, "bbox": [516, 136, 12, 94], "area": 753}, {"id": 6713454, "category_id": 1, "iscrowd": 0, "bbox": [594, 106, 40, 129], "area": 3189}, {"id": 6250585, "category_id": 1, "iscrowd": 0, "bbox": [118, 245, 160, 235], "area": 21213}, {"id": 9343363, "category_id": 1, "iscrowd": 0, "bbox": [38, 99, 67, 199], "area": 6342}, {"id": 5461343, "category_id": 1, "iscrowd": 0, "bbox": [48, 112, 15, 23], "area": 235}, {"id": 8353655, "category_id": 1, "iscrowd": 0, "bbox": [333, 107, 41, 68], "area": 1381}, {"id": 5790803, "category_id": 1, "iscrowd": 0, "bbox": [518, 124, 19, 58], "area": 644}, {"id": 8288885, "category_id": 1, "iscrowd": 0, "bbox": [326, 108, 163, 332], "area": 24484}, {"id": 11384767, "category_id": 37, "iscrowd": 0, "bbox": [612, 324, 19, 17], "area": 272}, {"id": 11109490, "category_id": 39, "iscrowd": 0, "bbox": [346, 77, 51, 135], "area": 1113}, {"id": 3289652, "category_id": 39, "iscrowd": 0, "bbox": [33, 160, 29, 57], "area": 293}, {"id": 4808590, "category_id": 40, "iscrowd": 0, "bbox": [259, 317, 49, 41], "area": 1373}, {"id": 5532023, "category_id": 145, "iscrowd": 0, "bbox": [0, 214, 640, 266], "area": 110891}, {"id": 3954517, "category_id": 184, "iscrowd": 0, "bbox": [504, 0, 136, 68], "area": 7900}, {"id": 6976114, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 238], "area": 97581}, {"id": 3815223, "category_id": 199, "iscrowd": 0, "bbox": [0, 159, 507, 111], "area": 26549}], "file_name": "000000464089.png", "image_id": 464089}, {"segments_info": [{"id": 4604221, "category_id": 1, "iscrowd": 0, "bbox": [62, 185, 254, 391], "area": 43657}, {"id": 11643561, "category_id": 35, "iscrowd": 0, "bbox": [7, 530, 284, 78], "area": 2127}, {"id": 14799817, "category_id": 159, "iscrowd": 0, "bbox": [0, 188, 426, 452], "area": 117495}, {"id": 3750457, "category_id": 184, "iscrowd": 0, "bbox": [0, 149, 426, 159], "area": 34117}, {"id": 12684393, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 426, 207], "area": 74730}], "file_name": "000000464144.png", "image_id": 464144}, {"segments_info": [{"id": 729981, "category_id": 16, "iscrowd": 0, "bbox": [137, 237, 136, 102], "area": 6457}, {"id": 2112595, "category_id": 62, "iscrowd": 0, "bbox": [0, 347, 179, 110], "area": 7381}, {"id": 2310488, "category_id": 62, "iscrowd": 0, "bbox": [374, 349, 265, 104], "area": 10096}, {"id": 734825, "category_id": 177, "iscrowd": 0, "bbox": [0, 297, 640, 161], "area": 66033}, {"id": 2129541, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 458], "area": 190566}], "file_name": "000000464251.png", "image_id": 464251}, {"segments_info": [{"id": 3425862, "category_id": 62, "iscrowd": 0, "bbox": [282, 165, 103, 115], "area": 7281}, {"id": 2698024, "category_id": 65, "iscrowd": 0, "bbox": [53, 195, 369, 228], "area": 57197}, {"id": 1514264, "category_id": 72, "iscrowd": 0, "bbox": [472, 82, 62, 73], "area": 3828}, {"id": 198149, "category_id": 93, "iscrowd": 0, "bbox": [16, 234, 103, 160], "area": 4314}, {"id": 922897, "category_id": 109, "iscrowd": 0, "bbox": [232, 0, 344, 205], "area": 17876}, {"id": 528144, "category_id": 130, "iscrowd": 0, "bbox": [0, 165, 191, 48], "area": 1269}, {"id": 791058, "category_id": 156, "iscrowd": 0, "bbox": [166, 132, 75, 90], "area": 3492}, {"id": 11119275, "category_id": 181, "iscrowd": 0, "bbox": [318, 14, 178, 178], "area": 23292}, {"id": 197636, "category_id": 188, "iscrowd": 0, "bbox": [213, 144, 386, 283], "area": 35171}, {"id": 1776667, "category_id": 190, "iscrowd": 0, "bbox": [0, 316, 481, 111], "area": 15158}, {"id": 1909537, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 84632}], "file_name": "000000464358.png", "image_id": 464358}, {"segments_info": [{"id": 2236705, "category_id": 1, "iscrowd": 0, "bbox": [51, 58, 67, 189], "area": 7633}, {"id": 12170158, "category_id": 7, "iscrowd": 0, "bbox": [155, 39, 115, 114], "area": 11970}, {"id": 7625040, "category_id": 72, "iscrowd": 0, "bbox": [279, 210, 206, 160], "area": 31882}, {"id": 1975594, "category_id": 72, "iscrowd": 0, "bbox": [281, 41, 166, 166], "area": 22262}, {"id": 1646375, "category_id": 112, "iscrowd": 0, "bbox": [434, 29, 29, 141], "area": 2217}, {"id": 6186345, "category_id": 118, "iscrowd": 0, "bbox": [0, 161, 500, 214], "area": 53211}, {"id": 1382944, "category_id": 156, "iscrowd": 0, "bbox": [444, 0, 56, 265], "area": 9585}, {"id": 6118495, "category_id": 171, "iscrowd": 0, "bbox": [115, 24, 53, 136], "area": 3573}, {"id": 10262679, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 74, 171], "area": 8025}, {"id": 1644829, "category_id": 189, "iscrowd": 0, "bbox": [262, 168, 213, 47], "area": 6109}, {"id": 15132130, "category_id": 190, "iscrowd": 0, "bbox": [120, 114, 148, 61], "area": 2348}, {"id": 3620162, "category_id": 199, "iscrowd": 0, "bbox": [92, 0, 397, 173], "area": 12947}, {"id": 10522241, "category_id": 200, "iscrowd": 0, "bbox": [111, 165, 159, 31], "area": 3144}], "file_name": "000000464476.png", "image_id": 464476}, {"segments_info": [{"id": 7303799, "category_id": 18, "iscrowd": 0, "bbox": [0, 104, 329, 404], "area": 83214}, {"id": 3490128, "category_id": 18, "iscrowd": 0, "bbox": [156, 3, 338, 628], "area": 91674}, {"id": 1846593, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 291, 146], "area": 29375}, {"id": 6908779, "category_id": 187, "iscrowd": 0, "bbox": [211, 35, 56, 21], "area": 747}, {"id": 3956851, "category_id": 193, "iscrowd": 0, "bbox": [0, 305, 494, 335], "area": 106645}], "file_name": "000000464522.png", "image_id": 464522}, {"segments_info": [{"id": 12493734, "category_id": 44, "iscrowd": 0, "bbox": [535, 302, 12, 15], "area": 108}, {"id": 7170389, "category_id": 44, "iscrowd": 0, "bbox": [83, 296, 8, 24], "area": 141}, {"id": 10330262, "category_id": 44, "iscrowd": 0, "bbox": [181, 301, 8, 21], "area": 96}, {"id": 5992072, "category_id": 44, "iscrowd": 0, "bbox": [120, 300, 8, 25], "area": 134}, {"id": 6782856, "category_id": 44, "iscrowd": 0, "bbox": [70, 308, 6, 18], "area": 91}, {"id": 5462626, "category_id": 44, "iscrowd": 0, "bbox": [471, 293, 10, 24], "area": 165}, {"id": 11771296, "category_id": 44, "iscrowd": 0, "bbox": [55, 316, 7, 13], "area": 85}, {"id": 7176590, "category_id": 44, "iscrowd": 0, "bbox": [531, 284, 9, 26], "area": 148}, {"id": 6328707, "category_id": 44, "iscrowd": 0, "bbox": [481, 295, 10, 22], "area": 152}, {"id": 7443131, "category_id": 44, "iscrowd": 0, "bbox": [508, 386, 10, 30], "area": 193}, {"id": 7108498, "category_id": 44, "iscrowd": 0, "bbox": [201, 386, 8, 25], "area": 173}, {"id": 6645667, "category_id": 44, "iscrowd": 0, "bbox": [171, 394, 8, 23], "area": 130}, {"id": 9415843, "category_id": 44, "iscrowd": 0, "bbox": [175, 298, 7, 25], "area": 141}, {"id": 8557978, "category_id": 44, "iscrowd": 1, "bbox": [131, 294, 116, 127], "area": 777}, {"id": 9081496, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 586, 640], "area": 354046}, {"id": 3820356, "category_id": 184, "iscrowd": 0, "bbox": [0, 475, 586, 165], "area": 18269}], "file_name": "000000464689.png", "image_id": 464689}, {"segments_info": [{"id": 7370125, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 157, 428], "area": 19780}, {"id": 4877183, "category_id": 58, "iscrowd": 0, "bbox": [26, 52, 589, 371], "area": 107487}, {"id": 11380645, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 98439}, {"id": 4155270, "category_id": 196, "iscrowd": 0, "bbox": [18, 0, 591, 428], "area": 30313}, {"id": 8288880, "category_id": 199, "iscrowd": 0, "bbox": [36, 0, 604, 90], "area": 15399}], "file_name": "000000464786.png", "image_id": 464786}, {"segments_info": [{"id": 7038827, "category_id": 1, "iscrowd": 0, "bbox": [132, 80, 348, 552], "area": 96478}, {"id": 3948363, "category_id": 3, "iscrowd": 0, "bbox": [362, 0, 118, 75], "area": 5086}, {"id": 1250580, "category_id": 11, "iscrowd": 0, "bbox": [230, 263, 78, 88], "area": 4890}, {"id": 10135726, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 480, 257], "area": 68496}, {"id": 5266012, "category_id": 191, "iscrowd": 0, "bbox": [0, 184, 480, 456], "area": 113283}], "file_name": "000000464824.png", "image_id": 464824}, {"segments_info": [{"id": 5461077, "category_id": 24, "iscrowd": 0, "bbox": [389, 155, 110, 102], "area": 3997}, {"id": 6842989, "category_id": 24, "iscrowd": 0, "bbox": [242, 164, 188, 102], "area": 9006}, {"id": 4349012, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 262], "area": 142739}, {"id": 9418418, "category_id": 193, "iscrowd": 0, "bbox": [0, 230, 640, 197], "area": 117173}], "file_name": "000000464872.png", "image_id": 464872}, {"segments_info": [{"id": 9542309, "category_id": 1, "iscrowd": 0, "bbox": [112, 95, 197, 378], "area": 43896}, {"id": 3952738, "category_id": 44, "iscrowd": 0, "bbox": [578, 334, 12, 35], "area": 334}, {"id": 2897468, "category_id": 44, "iscrowd": 0, "bbox": [544, 335, 17, 32], "area": 368}, {"id": 1251138, "category_id": 44, "iscrowd": 0, "bbox": [424, 327, 14, 40], "area": 405}, {"id": 5266539, "category_id": 47, "iscrowd": 0, "bbox": [352, 328, 15, 16], "area": 158}, {"id": 6976383, "category_id": 47, "iscrowd": 0, "bbox": [371, 329, 15, 16], "area": 203}, {"id": 4871782, "category_id": 47, "iscrowd": 0, "bbox": [359, 308, 22, 22], "area": 295}, {"id": 8290963, "category_id": 47, "iscrowd": 0, "bbox": [285, 217, 28, 29], "area": 700}, {"id": 6120820, "category_id": 47, "iscrowd": 0, "bbox": [371, 342, 8, 14], "area": 84}, {"id": 1777692, "category_id": 51, "iscrowd": 0, "bbox": [245, 317, 45, 43], "area": 1527}, {"id": 1720418, "category_id": 52, "iscrowd": 0, "bbox": [309, 340, 26, 28], "area": 457}, {"id": 2501933, "category_id": 78, "iscrowd": 0, "bbox": [0, 314, 75, 51], "area": 3245}, {"id": 2436147, "category_id": 79, "iscrowd": 0, "bbox": [287, 407, 138, 67], "area": 4282}, {"id": 2306112, "category_id": 81, "iscrowd": 0, "bbox": [421, 362, 186, 31], "area": 4501}, {"id": 4084828, "category_id": 85, "iscrowd": 0, "bbox": [122, 320, 21, 27], "area": 452}, {"id": 2703966, "category_id": 107, "iscrowd": 0, "bbox": [576, 360, 22, 20], "area": 162}, {"id": 9688050, "category_id": 130, "iscrowd": 0, "bbox": [431, 224, 120, 37], "area": 2701}, {"id": 8356480, "category_id": 151, "iscrowd": 0, "bbox": [9, 0, 631, 111], "area": 45617}, {"id": 2768723, "category_id": 176, "iscrowd": 0, "bbox": [558, 337, 37, 30], "area": 449}, {"id": 2636110, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 291], "area": 78127}, {"id": 1713716, "category_id": 189, "iscrowd": 0, "bbox": [0, 341, 640, 139], "area": 47064}], "file_name": "000000465129.png", "image_id": 465129}, {"segments_info": [{"id": 5330544, "category_id": 1, "iscrowd": 0, "bbox": [0, 97, 374, 397], "area": 76334}, {"id": 12629176, "category_id": 90, "iscrowd": 0, "bbox": [137, 164, 53, 9], "area": 310}, {"id": 11252151, "category_id": 90, "iscrowd": 0, "bbox": [0, 370, 16, 30], "area": 161}, {"id": 7041937, "category_id": 130, "iscrowd": 0, "bbox": [153, 0, 32, 33], "area": 819}, {"id": 9410210, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 156, 426], "area": 40678}, {"id": 4408146, "category_id": 156, "iscrowd": 0, "bbox": [0, 378, 124, 122], "area": 5417}, {"id": 10856888, "category_id": 176, "iscrowd": 0, "bbox": [36, 15, 338, 485], "area": 46509}, {"id": 11185862, "category_id": 186, "iscrowd": 0, "bbox": [183, 0, 191, 54], "area": 7734}], "file_name": "000000465179.png", "image_id": 465179}, {"segments_info": [{"id": 5597563, "category_id": 1, "iscrowd": 0, "bbox": [614, 252, 26, 114], "area": 812}, {"id": 7366758, "category_id": 1, "iscrowd": 0, "bbox": [438, 227, 94, 113], "area": 5747}, {"id": 8613723, "category_id": 1, "iscrowd": 0, "bbox": [443, 150, 90, 90], "area": 4929}, {"id": 6444621, "category_id": 1, "iscrowd": 0, "bbox": [80, 97, 121, 98], "area": 5173}, {"id": 9143937, "category_id": 1, "iscrowd": 0, "bbox": [281, 263, 133, 113], "area": 8902}, {"id": 7625803, "category_id": 1, "iscrowd": 0, "bbox": [256, 0, 60, 72], "area": 3110}, {"id": 8490395, "category_id": 22, "iscrowd": 0, "bbox": [135, 59, 237, 95], "area": 9992}, {"id": 6384760, "category_id": 22, "iscrowd": 0, "bbox": [131, 94, 210, 142], "area": 18925}, {"id": 4870494, "category_id": 22, "iscrowd": 0, "bbox": [388, 280, 79, 74], "area": 3261}, {"id": 4014406, "category_id": 22, "iscrowd": 0, "bbox": [159, 313, 156, 63], "area": 6972}, {"id": 3619907, "category_id": 22, "iscrowd": 0, "bbox": [533, 350, 107, 71], "area": 5846}, {"id": 5397349, "category_id": 22, "iscrowd": 0, "bbox": [413, 214, 133, 46], "area": 1316}, {"id": 5335146, "category_id": 148, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 180234}, {"id": 1713179, "category_id": 184, "iscrowd": 0, "bbox": [199, 0, 441, 73], "area": 15567}], "file_name": "000000465180.png", "image_id": 465180}, {"segments_info": [{"id": 3751493, "category_id": 50, "iscrowd": 0, "bbox": [198, 8, 366, 59], "area": 9512}, {"id": 3962032, "category_id": 54, "iscrowd": 0, "bbox": [361, 135, 233, 225], "area": 39683}, {"id": 2908841, "category_id": 54, "iscrowd": 0, "bbox": [33, 119, 276, 265], "area": 52732}, {"id": 10722715, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 513], "area": 48046}], "file_name": "000000465430.png", "image_id": 465430}, {"segments_info": [{"id": 2710646, "category_id": 1, "iscrowd": 0, "bbox": [280, 111, 284, 316], "area": 46312}, {"id": 3890311, "category_id": 1, "iscrowd": 0, "bbox": [79, 95, 215, 328], "area": 35015}, {"id": 2201788, "category_id": 63, "iscrowd": 0, "bbox": [500, 195, 140, 213], "area": 19520}, {"id": 728094, "category_id": 64, "iscrowd": 0, "bbox": [116, 211, 50, 112], "area": 2493}, {"id": 794919, "category_id": 64, "iscrowd": 0, "bbox": [67, 232, 57, 103], "area": 2021}, {"id": 2514288, "category_id": 67, "iscrowd": 0, "bbox": [235, 342, 132, 86], "area": 2042}, {"id": 4293795, "category_id": 75, "iscrowd": 0, "bbox": [279, 185, 40, 61], "area": 966}, {"id": 6196401, "category_id": 75, "iscrowd": 0, "bbox": [161, 178, 18, 23], "area": 214}, {"id": 5409446, "category_id": 75, "iscrowd": 0, "bbox": [79, 211, 38, 14], "area": 334}, {"id": 5747661, "category_id": 75, "iscrowd": 0, "bbox": [435, 238, 25, 55], "area": 302}, {"id": 470579, "category_id": 86, "iscrowd": 0, "bbox": [100, 300, 18, 33], "area": 446}, {"id": 995127, "category_id": 86, "iscrowd": 0, "bbox": [147, 286, 17, 36], "area": 459}, {"id": 3841722, "category_id": 130, "iscrowd": 0, "bbox": [462, 62, 51, 41], "area": 1431}, {"id": 1720132, "category_id": 133, "iscrowd": 0, "bbox": [101, 0, 124, 311], "area": 13697}, {"id": 1065549, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 400, 342], "area": 60866}, {"id": 3434362, "category_id": 186, "iscrowd": 0, "bbox": [12, 0, 159, 20], "area": 2530}, {"id": 2051940, "category_id": 189, "iscrowd": 0, "bbox": [304, 357, 60, 71], "area": 467}, {"id": 3048353, "category_id": 190, "iscrowd": 0, "bbox": [149, 324, 491, 104], "area": 8770}, {"id": 4566988, "category_id": 199, "iscrowd": 0, "bbox": [219, 0, 421, 203], "area": 36157}], "file_name": "000000465549.png", "image_id": 465549}, {"segments_info": [{"id": 3045496, "category_id": 56, "iscrowd": 0, "bbox": [252, 417, 75, 92], "area": 4106}, {"id": 2649706, "category_id": 56, "iscrowd": 0, "bbox": [41, 518, 72, 60], "area": 2846}, {"id": 1334863, "category_id": 56, "iscrowd": 0, "bbox": [44, 344, 45, 57], "area": 1723}, {"id": 1400923, "category_id": 56, "iscrowd": 0, "bbox": [181, 255, 70, 74], "area": 2180}, {"id": 1663320, "category_id": 56, "iscrowd": 0, "bbox": [138, 434, 68, 69], "area": 3157}, {"id": 603438, "category_id": 56, "iscrowd": 0, "bbox": [329, 85, 83, 123], "area": 6426}, {"id": 2914430, "category_id": 56, "iscrowd": 0, "bbox": [62, 376, 73, 86], "area": 3568}, {"id": 1398102, "category_id": 56, "iscrowd": 0, "bbox": [92, 91, 82, 39], "area": 2055}, {"id": 1858134, "category_id": 56, "iscrowd": 0, "bbox": [331, 407, 96, 168], "area": 10509}, {"id": 1201234, "category_id": 56, "iscrowd": 0, "bbox": [224, 49, 57, 52], "area": 2014}, {"id": 1267793, "category_id": 56, "iscrowd": 0, "bbox": [38, 265, 103, 81], "area": 5506}, {"id": 738614, "category_id": 56, "iscrowd": 0, "bbox": [209, 203, 33, 56], "area": 1410}, {"id": 1137753, "category_id": 56, "iscrowd": 0, "bbox": [273, 270, 62, 58], "area": 2777}, {"id": 1661538, "category_id": 56, "iscrowd": 1, "bbox": [1, 28, 426, 560], "area": 85680}, {"id": 3179196, "category_id": 57, "iscrowd": 0, "bbox": [276, 337, 51, 53], "area": 1905}, {"id": 3178937, "category_id": 57, "iscrowd": 0, "bbox": [199, 404, 81, 64], "area": 3535}, {"id": 3376068, "category_id": 57, "iscrowd": 0, "bbox": [336, 310, 56, 51], "area": 1801}, {"id": 2981300, "category_id": 57, "iscrowd": 0, "bbox": [207, 289, 69, 81], "area": 2768}, {"id": 1978185, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 36637}, {"id": 2518418, "category_id": 196, "iscrowd": 0, "bbox": [0, 14, 427, 581], "area": 84329}], "file_name": "000000465585.png", "image_id": 465585}, {"segments_info": [{"id": 3618615, "category_id": 8, "iscrowd": 0, "bbox": [341, 165, 171, 107], "area": 9568}, {"id": 3158064, "category_id": 9, "iscrowd": 0, "bbox": [113, 181, 247, 60], "area": 10452}, {"id": 4276545, "category_id": 9, "iscrowd": 0, "bbox": [165, 152, 166, 46], "area": 2280}, {"id": 7829367, "category_id": 154, "iscrowd": 0, "bbox": [0, 176, 640, 227], "area": 100601}, {"id": 11447982, "category_id": 155, "iscrowd": 0, "bbox": [122, 174, 518, 90], "area": 15916}, {"id": 7434609, "category_id": 185, "iscrowd": 0, "bbox": [47, 175, 50, 33], "area": 909}, {"id": 13224393, "category_id": 187, "iscrowd": 0, "bbox": [4, 0, 632, 202], "area": 96602}], "file_name": "000000465675.png", "image_id": 465675}, {"segments_info": [{"id": 8742545, "category_id": 1, "iscrowd": 0, "bbox": [390, 85, 39, 60], "area": 1459}, {"id": 6839672, "category_id": 1, "iscrowd": 0, "bbox": [61, 220, 19, 29], "area": 320}, {"id": 7105428, "category_id": 1, "iscrowd": 0, "bbox": [106, 98, 14, 18], "area": 154}, {"id": 10256802, "category_id": 1, "iscrowd": 0, "bbox": [187, 108, 33, 51], "area": 969}, {"id": 8215686, "category_id": 1, "iscrowd": 0, "bbox": [497, 76, 18, 27], "area": 322}, {"id": 9074016, "category_id": 72, "iscrowd": 0, "bbox": [327, 30, 239, 159], "area": 32405}, {"id": 10129026, "category_id": 72, "iscrowd": 0, "bbox": [116, 51, 219, 140], "area": 23671}, {"id": 4868684, "category_id": 73, "iscrowd": 0, "bbox": [0, 168, 220, 237], "area": 17103}, {"id": 3882561, "category_id": 74, "iscrowd": 0, "bbox": [492, 358, 40, 46], "area": 1464}, {"id": 8355194, "category_id": 76, "iscrowd": 0, "bbox": [30, 262, 189, 137], "area": 13013}, {"id": 5657425, "category_id": 76, "iscrowd": 0, "bbox": [191, 331, 240, 92], "area": 16359}, {"id": 8489357, "category_id": 77, "iscrowd": 0, "bbox": [542, 364, 43, 48], "area": 1569}, {"id": 4353441, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 429], "area": 17634}, {"id": 7048629, "category_id": 189, "iscrowd": 0, "bbox": [0, 169, 620, 260], "area": 84173}, {"id": 11183265, "category_id": 195, "iscrowd": 0, "bbox": [0, 182, 26, 38], "area": 634}, {"id": 3358589, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 597, 213], "area": 33209}], "file_name": "000000465718.png", "image_id": 465718}, {"segments_info": [{"id": 7825522, "category_id": 1, "iscrowd": 0, "bbox": [2, 1, 514, 323], "area": 39893}, {"id": 5525072, "category_id": 1, "iscrowd": 0, "bbox": [239, 1, 226, 227], "area": 36846}, {"id": 3549986, "category_id": 1, "iscrowd": 0, "bbox": [1, 2, 210, 232], "area": 17861}, {"id": 5726859, "category_id": 47, "iscrowd": 0, "bbox": [423, 277, 80, 82], "area": 4052}, {"id": 10990778, "category_id": 47, "iscrowd": 0, "bbox": [184, 287, 98, 117], "area": 9491}, {"id": 5545126, "category_id": 52, "iscrowd": 0, "bbox": [181, 205, 100, 53], "area": 3489}, {"id": 7054273, "category_id": 52, "iscrowd": 0, "bbox": [276, 226, 79, 44], "area": 1290}, {"id": 7834242, "category_id": 52, "iscrowd": 0, "bbox": [107, 191, 30, 33], "area": 265}, {"id": 7118221, "category_id": 52, "iscrowd": 0, "bbox": [101, 218, 54, 26], "area": 902}, {"id": 3906727, "category_id": 52, "iscrowd": 0, "bbox": [183, 255, 68, 37], "area": 1670}, {"id": 2650238, "category_id": 52, "iscrowd": 0, "bbox": [49, 217, 128, 89], "area": 7202}, {"id": 3830654, "category_id": 52, "iscrowd": 0, "bbox": [173, 244, 111, 68], "area": 2137}, {"id": 2702142, "category_id": 122, "iscrowd": 0, "bbox": [55, 218, 146, 125], "area": 1404}, {"id": 9935255, "category_id": 175, "iscrowd": 0, "bbox": [452, 0, 188, 334], "area": 49472}, {"id": 3294809, "category_id": 177, "iscrowd": 0, "bbox": [178, 0, 93, 130], "area": 4652}, {"id": 11118242, "category_id": 189, "iscrowd": 0, "bbox": [0, 195, 640, 285], "area": 99856}, {"id": 9274745, "category_id": 190, "iscrowd": 0, "bbox": [0, 256, 41, 108], "area": 2271}, {"id": 4607047, "category_id": 194, "iscrowd": 0, "bbox": [0, 176, 159, 60], "area": 1411}], "file_name": "000000465806.png", "image_id": 465806}, {"segments_info": [{"id": 6383731, "category_id": 1, "iscrowd": 0, "bbox": [480, 182, 20, 43], "area": 652}, {"id": 7107449, "category_id": 1, "iscrowd": 0, "bbox": [326, 161, 123, 185], "area": 9045}, {"id": 4347496, "category_id": 1, "iscrowd": 0, "bbox": [286, 174, 39, 61], "area": 1660}, {"id": 3621457, "category_id": 1, "iscrowd": 0, "bbox": [438, 173, 62, 90], "area": 2990}, {"id": 5928332, "category_id": 1, "iscrowd": 0, "bbox": [69, 48, 155, 217], "area": 7186}, {"id": 1646116, "category_id": 1, "iscrowd": 0, "bbox": [0, 171, 70, 104], "area": 3656}, {"id": 4803410, "category_id": 1, "iscrowd": 0, "bbox": [226, 168, 44, 85], "area": 1297}, {"id": 3950946, "category_id": 1, "iscrowd": 0, "bbox": [441, 150, 30, 26], "area": 447}, {"id": 7767960, "category_id": 1, "iscrowd": 0, "bbox": [257, 174, 39, 52], "area": 1356}, {"id": 12569305, "category_id": 1, "iscrowd": 0, "bbox": [407, 172, 44, 78], "area": 1750}, {"id": 4279904, "category_id": 1, "iscrowd": 0, "bbox": [54, 110, 110, 164], "area": 11393}, {"id": 1450029, "category_id": 1, "iscrowd": 0, "bbox": [0, 174, 30, 71], "area": 1216}, {"id": 5997181, "category_id": 44, "iscrowd": 0, "bbox": [303, 271, 19, 49], "area": 746}, {"id": 1777183, "category_id": 62, "iscrowd": 0, "bbox": [269, 226, 37, 79], "area": 2174}, {"id": 2829357, "category_id": 62, "iscrowd": 0, "bbox": [301, 229, 81, 73], "area": 1163}, {"id": 6118750, "category_id": 62, "iscrowd": 0, "bbox": [210, 224, 10, 15], "area": 96}, {"id": 6052185, "category_id": 62, "iscrowd": 0, "bbox": [393, 222, 16, 12], "area": 108}, {"id": 2040869, "category_id": 62, "iscrowd": 0, "bbox": [245, 223, 28, 67], "area": 1429}, {"id": 1776925, "category_id": 62, "iscrowd": 0, "bbox": [426, 226, 71, 98], "area": 3808}, {"id": 1842718, "category_id": 62, "iscrowd": 0, "bbox": [1, 266, 232, 101], "area": 20025}, {"id": 1316374, "category_id": 62, "iscrowd": 0, "bbox": [0, 246, 50, 60], "area": 1584}, {"id": 2177081, "category_id": 64, "iscrowd": 0, "bbox": [45, 55, 45, 194], "area": 3748}, {"id": 12040111, "category_id": 73, "iscrowd": 0, "bbox": [248, 252, 131, 97], "area": 4822}, {"id": 10262423, "category_id": 73, "iscrowd": 0, "bbox": [397, 243, 43, 34], "area": 808}, {"id": 7108477, "category_id": 85, "iscrowd": 0, "bbox": [136, 85, 27, 29], "area": 583}, {"id": 5469062, "category_id": 112, "iscrowd": 0, "bbox": [153, 76, 230, 201], "area": 15150}, {"id": 12435136, "category_id": 130, "iscrowd": 0, "bbox": [75, 11, 425, 102], "area": 5565}, {"id": 7240062, "category_id": 181, "iscrowd": 0, "bbox": [180, 80, 257, 189], "area": 11217}, {"id": 6515574, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 500, 82], "area": 26292}, {"id": 11127515, "category_id": 189, "iscrowd": 0, "bbox": [230, 321, 233, 54], "area": 7096}, {"id": 13885930, "category_id": 195, "iscrowd": 0, "bbox": [305, 348, 59, 27], "area": 820}, {"id": 5072499, "category_id": 199, "iscrowd": 0, "bbox": [0, 41, 500, 169], "area": 20637}, {"id": 8420733, "category_id": 200, "iscrowd": 0, "bbox": [223, 360, 16, 15], "area": 137}], "file_name": "000000465822.png", "image_id": 465822}, {"segments_info": [{"id": 4012354, "category_id": 1, "iscrowd": 0, "bbox": [264, 124, 63, 187], "area": 7008}, {"id": 5192500, "category_id": 1, "iscrowd": 0, "bbox": [217, 123, 56, 186], "area": 6406}, {"id": 3683384, "category_id": 1, "iscrowd": 0, "bbox": [153, 126, 65, 192], "area": 6183}, {"id": 4342343, "category_id": 27, "iscrowd": 0, "bbox": [277, 155, 36, 35], "area": 217}, {"id": 7630439, "category_id": 35, "iscrowd": 0, "bbox": [273, 288, 100, 62], "area": 666}, {"id": 10128497, "category_id": 35, "iscrowd": 0, "bbox": [214, 306, 57, 40], "area": 565}, {"id": 10591640, "category_id": 35, "iscrowd": 0, "bbox": [159, 314, 47, 39], "area": 376}, {"id": 12167845, "category_id": 159, "iscrowd": 0, "bbox": [0, 179, 500, 196], "area": 69247}, {"id": 6184029, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 271], "area": 87051}, {"id": 11635812, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 390, 85], "area": 7094}], "file_name": "000000465836.png", "image_id": 465836}, {"segments_info": [{"id": 7895697, "category_id": 81, "iscrowd": 0, "bbox": [228, 397, 197, 167], "area": 24717}, {"id": 2239815, "category_id": 112, "iscrowd": 0, "bbox": [0, 391, 480, 249], "area": 9606}, {"id": 1449768, "category_id": 118, "iscrowd": 0, "bbox": [73, 625, 20, 15], "area": 230}, {"id": 2237746, "category_id": 133, "iscrowd": 0, "bbox": [106, 0, 132, 221], "area": 26145}, {"id": 2304595, "category_id": 177, "iscrowd": 0, "bbox": [238, 0, 242, 504], "area": 86819}, {"id": 1383203, "category_id": 190, "iscrowd": 0, "bbox": [287, 539, 136, 101], "area": 7339}, {"id": 15067379, "category_id": 195, "iscrowd": 0, "bbox": [3, 387, 54, 51], "area": 1572}, {"id": 6253193, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 89006}], "file_name": "000000466085.png", "image_id": 466085}, {"segments_info": [{"id": 6179906, "category_id": 1, "iscrowd": 0, "bbox": [321, 306, 106, 334], "area": 13709}, {"id": 2175075, "category_id": 1, "iscrowd": 0, "bbox": [292, 72, 134, 121], "area": 7428}, {"id": 1717577, "category_id": 1, "iscrowd": 0, "bbox": [7, 202, 252, 438], "area": 81047}, {"id": 4742045, "category_id": 27, "iscrowd": 0, "bbox": [0, 344, 51, 224], "area": 7016}, {"id": 5658786, "category_id": 28, "iscrowd": 0, "bbox": [49, 1, 378, 199], "area": 47412}, {"id": 792627, "category_id": 62, "iscrowd": 0, "bbox": [265, 368, 36, 116], "area": 1841}, {"id": 1713979, "category_id": 67, "iscrowd": 0, "bbox": [283, 320, 82, 104], "area": 3673}, {"id": 9478571, "category_id": 73, "iscrowd": 0, "bbox": [298, 330, 63, 60], "area": 2178}, {"id": 3692628, "category_id": 84, "iscrowd": 0, "bbox": [282, 293, 85, 38], "area": 1866}, {"id": 5201002, "category_id": 168, "iscrowd": 0, "bbox": [254, 410, 126, 230], "area": 15820}, {"id": 660259, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 393, 322], "area": 10965}, {"id": 3756395, "category_id": 181, "iscrowd": 0, "bbox": [8, 0, 403, 290], "area": 42515}, {"id": 1525846, "category_id": 195, "iscrowd": 0, "bbox": [22, 338, 42, 64], "area": 1239}, {"id": 1649716, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 303, 516], "area": 13876}, {"id": 198408, "category_id": 200, "iscrowd": 0, "bbox": [238, 511, 55, 129], "area": 2503}], "file_name": "000000466125.png", "image_id": 466125}, {"segments_info": [{"id": 7960179, "category_id": 3, "iscrowd": 0, "bbox": [0, 21, 500, 328], "area": 91153}, {"id": 5528440, "category_id": 3, "iscrowd": 0, "bbox": [274, 32, 17, 7], "area": 97}, {"id": 7431554, "category_id": 3, "iscrowd": 0, "bbox": [0, 14, 11, 11], "area": 78}, {"id": 7170392, "category_id": 3, "iscrowd": 0, "bbox": [239, 32, 24, 14], "area": 211}, {"id": 2633007, "category_id": 17, "iscrowd": 0, "bbox": [186, 86, 167, 117], "area": 6996}, {"id": 7569288, "category_id": 128, "iscrowd": 0, "bbox": [250, 0, 121, 54], "area": 2677}, {"id": 13093327, "category_id": 149, "iscrowd": 0, "bbox": [10, 12, 117, 42], "area": 2219}, {"id": 3822673, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 380, 70], "area": 9354}, {"id": 4953220, "category_id": 193, "iscrowd": 0, "bbox": [20, 10, 480, 217], "area": 40874}], "file_name": "000000466156.png", "image_id": 466156}, {"segments_info": [{"id": 9342606, "category_id": 48, "iscrowd": 0, "bbox": [111, 130, 246, 290], "area": 9896}, {"id": 1729434, "category_id": 57, "iscrowd": 0, "bbox": [187, 102, 88, 11], "area": 688}, {"id": 1201043, "category_id": 57, "iscrowd": 0, "bbox": [265, 43, 28, 26], "area": 183}, {"id": 3171479, "category_id": 57, "iscrowd": 0, "bbox": [265, 32, 12, 12], "area": 78}, {"id": 1004945, "category_id": 57, "iscrowd": 0, "bbox": [315, 59, 170, 37], "area": 1478}, {"id": 546196, "category_id": 57, "iscrowd": 0, "bbox": [432, 60, 8, 22], "area": 141}, {"id": 1726601, "category_id": 57, "iscrowd": 0, "bbox": [374, 23, 51, 13], "area": 274}, {"id": 416676, "category_id": 57, "iscrowd": 0, "bbox": [383, 66, 46, 17], "area": 281}, {"id": 1203875, "category_id": 57, "iscrowd": 0, "bbox": [382, 91, 57, 93], "area": 1039}, {"id": 1855106, "category_id": 57, "iscrowd": 0, "bbox": [237, 73, 25, 29], "area": 309}, {"id": 806784, "category_id": 57, "iscrowd": 0, "bbox": [335, 93, 65, 44], "area": 823}, {"id": 8096403, "category_id": 67, "iscrowd": 0, "bbox": [1, 0, 639, 420], "area": 251757}], "file_name": "000000466256.png", "image_id": 466256}, {"segments_info": [{"id": 1776668, "category_id": 17, "iscrowd": 0, "bbox": [14, 501, 143, 105], "area": 7985}, {"id": 3890316, "category_id": 112, "iscrowd": 0, "bbox": [146, 29, 191, 526], "area": 82640}, {"id": 3226965, "category_id": 177, "iscrowd": 0, "bbox": [0, 518, 14, 70], "area": 731}, {"id": 12896971, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 359, 596], "area": 107927}, {"id": 3554632, "category_id": 200, "iscrowd": 0, "bbox": [0, 490, 359, 150], "area": 29804}], "file_name": "000000466339.png", "image_id": 466339}, {"segments_info": [{"id": 2699061, "category_id": 3, "iscrowd": 0, "bbox": [506, 404, 7, 6], "area": 28}, {"id": 3421238, "category_id": 3, "iscrowd": 0, "bbox": [528, 410, 16, 9], "area": 95}, {"id": 2832967, "category_id": 3, "iscrowd": 0, "bbox": [430, 409, 15, 6], "area": 59}, {"id": 2699574, "category_id": 3, "iscrowd": 0, "bbox": [480, 404, 16, 6], "area": 65}, {"id": 5465463, "category_id": 3, "iscrowd": 0, "bbox": [428, 422, 11, 3], "area": 31}, {"id": 5660257, "category_id": 3, "iscrowd": 0, "bbox": [369, 419, 18, 6], "area": 83}, {"id": 2764852, "category_id": 3, "iscrowd": 0, "bbox": [508, 411, 14, 8], "area": 102}, {"id": 4931400, "category_id": 3, "iscrowd": 0, "bbox": [565, 406, 21, 11], "area": 180}, {"id": 3356471, "category_id": 3, "iscrowd": 0, "bbox": [550, 407, 16, 6], "area": 79}, {"id": 6115664, "category_id": 3, "iscrowd": 0, "bbox": [363, 416, 13, 8], "area": 56}, {"id": 2436407, "category_id": 3, "iscrowd": 0, "bbox": [530, 400, 10, 6], "area": 50}, {"id": 3094070, "category_id": 3, "iscrowd": 0, "bbox": [511, 407, 9, 4], "area": 32}, {"id": 3328736, "category_id": 85, "iscrowd": 0, "bbox": [187, 161, 10, 25], "area": 193}, {"id": 11196137, "category_id": 85, "iscrowd": 0, "bbox": [430, 159, 20, 24], "area": 378}, {"id": 4739155, "category_id": 128, "iscrowd": 0, "bbox": [434, 411, 64, 14], "area": 681}, {"id": 2039330, "category_id": 148, "iscrowd": 0, "bbox": [33, 144, 607, 167], "area": 32686}, {"id": 5005420, "category_id": 149, "iscrowd": 0, "bbox": [318, 309, 322, 116], "area": 10509}, {"id": 1842211, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 131], "area": 79070}, {"id": 4872285, "category_id": 191, "iscrowd": 0, "bbox": [478, 341, 84, 70], "area": 1292}, {"id": 2574148, "category_id": 193, "iscrowd": 0, "bbox": [497, 336, 54, 25], "area": 719}, {"id": 3620674, "category_id": 197, "iscrowd": 0, "bbox": [0, 65, 640, 360], "area": 145503}], "file_name": "000000466416.png", "image_id": 466416}, {"segments_info": [{"id": 5090533, "category_id": 60, "iscrowd": 0, "bbox": [105, 227, 253, 236], "area": 40945}], "file_name": "000000466567.png", "image_id": 466567}, {"segments_info": [{"id": 4272920, "category_id": 1, "iscrowd": 0, "bbox": [0, 51, 243, 589], "area": 64588}, {"id": 4932953, "category_id": 35, "iscrowd": 0, "bbox": [103, 411, 206, 221], "area": 3826}, {"id": 4535864, "category_id": 35, "iscrowd": 0, "bbox": [192, 551, 288, 89], "area": 5109}, {"id": 8615533, "category_id": 159, "iscrowd": 0, "bbox": [0, 68, 480, 572], "area": 196387}, {"id": 4732713, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 113], "area": 23422}, {"id": 10979944, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 306, 62], "area": 13194}], "file_name": "000000466602.png", "image_id": 466602}, {"segments_info": [{"id": 2263132, "category_id": 52, "iscrowd": 0, "bbox": [172, 54, 183, 375], "area": 45005}, {"id": 2200673, "category_id": 122, "iscrowd": 0, "bbox": [312, 285, 16, 17], "area": 142}, {"id": 5275001, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 242004}, {"id": 9553609, "category_id": 193, "iscrowd": 0, "bbox": [233, 482, 108, 97], "area": 5860}, {"id": 3883076, "category_id": 198, "iscrowd": 0, "bbox": [0, 413, 121, 227], "area": 13929}], "file_name": "000000466835.png", "image_id": 466835}, {"segments_info": [{"id": 13079934, "category_id": 1, "iscrowd": 0, "bbox": [0, 310, 104, 168], "area": 9690}, {"id": 6047110, "category_id": 1, "iscrowd": 0, "bbox": [235, 155, 231, 284], "area": 31444}, {"id": 2890009, "category_id": 49, "iscrowd": 0, "bbox": [76, 374, 16, 47], "area": 573}, {"id": 1545648, "category_id": 49, "iscrowd": 0, "bbox": [115, 371, 29, 57], "area": 873}, {"id": 16317177, "category_id": 51, "iscrowd": 0, "bbox": [349, 400, 109, 17], "area": 1297}, {"id": 14606046, "category_id": 51, "iscrowd": 0, "bbox": [350, 409, 117, 26], "area": 1564}, {"id": 9802906, "category_id": 78, "iscrowd": 0, "bbox": [0, 152, 152, 185], "area": 24183}, {"id": 13223104, "category_id": 107, "iscrowd": 0, "bbox": [90, 411, 550, 67], "area": 25508}, {"id": 6053739, "category_id": 156, "iscrowd": 0, "bbox": [16, 322, 174, 76], "area": 6872}, {"id": 9737897, "category_id": 176, "iscrowd": 0, "bbox": [13, 0, 54, 37], "area": 1487}, {"id": 8948364, "category_id": 199, "iscrowd": 0, "bbox": [51, 0, 589, 429], "area": 176405}], "file_name": "000000466986.png", "image_id": 466986}, {"segments_info": [{"id": 8552067, "category_id": 1, "iscrowd": 0, "bbox": [18, 191, 168, 237], "area": 15984}, {"id": 2304270, "category_id": 1, "iscrowd": 0, "bbox": [379, 158, 10, 14], "area": 99}, {"id": 3817028, "category_id": 1, "iscrowd": 0, "bbox": [468, 252, 129, 176], "area": 13554}, {"id": 1387889, "category_id": 1, "iscrowd": 0, "bbox": [269, 221, 138, 203], "area": 18611}, {"id": 1776155, "category_id": 1, "iscrowd": 0, "bbox": [58, 157, 112, 247], "area": 7427}, {"id": 3619138, "category_id": 1, "iscrowd": 0, "bbox": [18, 218, 34, 70], "area": 1334}, {"id": 5527133, "category_id": 47, "iscrowd": 0, "bbox": [173, 211, 10, 16], "area": 109}, {"id": 3153945, "category_id": 62, "iscrowd": 0, "bbox": [0, 229, 37, 88], "area": 1491}, {"id": 8028547, "category_id": 63, "iscrowd": 0, "bbox": [567, 291, 73, 136], "area": 6841}, {"id": 2373910, "category_id": 72, "iscrowd": 0, "bbox": [349, 101, 138, 111], "area": 12936}, {"id": 5790298, "category_id": 75, "iscrowd": 0, "bbox": [515, 269, 17, 11], "area": 104}, {"id": 3026736, "category_id": 75, "iscrowd": 0, "bbox": [224, 233, 21, 8], "area": 108}, {"id": 5001296, "category_id": 75, "iscrowd": 0, "bbox": [210, 229, 14, 11], "area": 80}, {"id": 6645099, "category_id": 75, "iscrowd": 0, "bbox": [504, 244, 14, 12], "area": 100}, {"id": 11315365, "category_id": 75, "iscrowd": 0, "bbox": [158, 214, 10, 18], "area": 111}, {"id": 13486794, "category_id": 75, "iscrowd": 0, "bbox": [28, 284, 11, 12], "area": 103}, {"id": 1711686, "category_id": 84, "iscrowd": 0, "bbox": [248, 85, 5, 25], "area": 87}, {"id": 4868171, "category_id": 84, "iscrowd": 0, "bbox": [226, 197, 24, 13], "area": 203}, {"id": 3092528, "category_id": 84, "iscrowd": 0, "bbox": [240, 119, 5, 13], "area": 43}, {"id": 855823, "category_id": 84, "iscrowd": 0, "bbox": [212, 91, 8, 20], "area": 107}, {"id": 329478, "category_id": 84, "iscrowd": 0, "bbox": [224, 89, 5, 20], "area": 58}, {"id": 6118748, "category_id": 84, "iscrowd": 0, "bbox": [233, 223, 24, 10], "area": 179}, {"id": 2237483, "category_id": 84, "iscrowd": 0, "bbox": [242, 88, 7, 20], "area": 117}, {"id": 1974306, "category_id": 84, "iscrowd": 0, "bbox": [222, 89, 4, 21], "area": 46}, {"id": 1448738, "category_id": 84, "iscrowd": 0, "bbox": [150, 97, 8, 11], "area": 22}, {"id": 1449783, "category_id": 84, "iscrowd": 0, "bbox": [238, 87, 5, 22], "area": 95}, {"id": 2435399, "category_id": 84, "iscrowd": 0, "bbox": [253, 86, 3, 22], "area": 31}, {"id": 3093046, "category_id": 84, "iscrowd": 0, "bbox": [234, 155, 14, 29], "area": 322}, {"id": 2895922, "category_id": 84, "iscrowd": 0, "bbox": [208, 188, 27, 20], "area": 315}, {"id": 1185048, "category_id": 84, "iscrowd": 1, "bbox": [132, 81, 144, 124], "area": 9444}, {"id": 1910065, "category_id": 112, "iscrowd": 0, "bbox": [15, 84, 48, 131], "area": 3282}, {"id": 791067, "category_id": 118, "iscrowd": 0, "bbox": [0, 198, 35, 56], "area": 771}, {"id": 921877, "category_id": 156, "iscrowd": 0, "bbox": [99, 68, 383, 222], "area": 22245}, {"id": 724500, "category_id": 189, "iscrowd": 0, "bbox": [164, 218, 122, 75], "area": 4643}, {"id": 1513266, "category_id": 195, "iscrowd": 0, "bbox": [211, 192, 26, 17], "area": 34}, {"id": 4673624, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 261], "area": 98686}, {"id": 3885914, "category_id": 200, "iscrowd": 0, "bbox": [0, 224, 640, 204], "area": 40039}], "file_name": "000000467176.png", "image_id": 467176}, {"segments_info": [{"id": 2375769, "category_id": 1, "iscrowd": 0, "bbox": [207, 101, 46, 85], "area": 2061}, {"id": 8761049, "category_id": 62, "iscrowd": 0, "bbox": [397, 303, 73, 102], "area": 3422}, {"id": 2905234, "category_id": 62, "iscrowd": 0, "bbox": [149, 285, 157, 43], "area": 2053}, {"id": 7380171, "category_id": 62, "iscrowd": 0, "bbox": [424, 335, 83, 91], "area": 5272}, {"id": 5669813, "category_id": 62, "iscrowd": 0, "bbox": [16, 307, 73, 98], "area": 3187}, {"id": 5867706, "category_id": 62, "iscrowd": 0, "bbox": [1, 337, 67, 83], "area": 4075}, {"id": 4815007, "category_id": 64, "iscrowd": 0, "bbox": [102, 99, 345, 280], "area": 30192}, {"id": 5546440, "category_id": 119, "iscrowd": 0, "bbox": [256, 132, 18, 12], "area": 113}, {"id": 4154496, "category_id": 161, "iscrowd": 0, "bbox": [132, 51, 403, 255], "area": 29069}, {"id": 5469596, "category_id": 176, "iscrowd": 0, "bbox": [131, 0, 394, 171], "area": 40850}, {"id": 928373, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 135, 357], "area": 43056}, {"id": 1717348, "category_id": 189, "iscrowd": 0, "bbox": [37, 304, 403, 122], "area": 27898}, {"id": 6788546, "category_id": 190, "iscrowd": 0, "bbox": [132, 274, 508, 152], "area": 25355}, {"id": 7312820, "category_id": 199, "iscrowd": 0, "bbox": [515, 0, 125, 291], "area": 30099}], "file_name": "000000467315.png", "image_id": 467315}, {"segments_info": [{"id": 4080199, "category_id": 1, "iscrowd": 0, "bbox": [275, 56, 103, 480], "area": 31409}, {"id": 3026220, "category_id": 1, "iscrowd": 0, "bbox": [22, 71, 154, 319], "area": 23586}, {"id": 4868937, "category_id": 4, "iscrowd": 0, "bbox": [4, 159, 396, 404], "area": 66455}, {"id": 5261376, "category_id": 10, "iscrowd": 0, "bbox": [330, 28, 39, 55], "area": 1318}, {"id": 9540746, "category_id": 10, "iscrowd": 0, "bbox": [391, 149, 25, 33], "area": 734}, {"id": 3881004, "category_id": 10, "iscrowd": 0, "bbox": [388, 43, 21, 72], "area": 1465}, {"id": 12764356, "category_id": 149, "iscrowd": 0, "bbox": [0, 480, 416, 160], "area": 48745}, {"id": 8817549, "category_id": 175, "iscrowd": 0, "bbox": [255, 225, 161, 36], "area": 1276}, {"id": 5266523, "category_id": 184, "iscrowd": 0, "bbox": [42, 0, 374, 243], "area": 19671}, {"id": 14474713, "category_id": 187, "iscrowd": 0, "bbox": [252, 109, 164, 94], "area": 2854}, {"id": 13486284, "category_id": 195, "iscrowd": 0, "bbox": [170, 0, 68, 247], "area": 12805}, {"id": 14012360, "category_id": 199, "iscrowd": 0, "bbox": [89, 0, 145, 267], "area": 9944}], "file_name": "000000467511.png", "image_id": 467511}, {"segments_info": [{"id": 12569049, "category_id": 20, "iscrowd": 0, "bbox": [96, 77, 14, 8], "area": 87}, {"id": 10991554, "category_id": 20, "iscrowd": 0, "bbox": [161, 75, 13, 12], "area": 90}, {"id": 8757927, "category_id": 20, "iscrowd": 0, "bbox": [38, 77, 12, 8], "area": 67}, {"id": 12504789, "category_id": 20, "iscrowd": 0, "bbox": [80, 75, 18, 11], "area": 116}, {"id": 14082286, "category_id": 20, "iscrowd": 0, "bbox": [16, 81, 18, 7], "area": 89}, {"id": 14015203, "category_id": 20, "iscrowd": 0, "bbox": [122, 76, 22, 12], "area": 135}, {"id": 4608341, "category_id": 21, "iscrowd": 0, "bbox": [269, 81, 169, 298], "area": 34138}, {"id": 4408902, "category_id": 21, "iscrowd": 0, "bbox": [120, 214, 107, 166], "area": 8982}, {"id": 5403492, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 74], "area": 31454}, {"id": 5665899, "category_id": 185, "iscrowd": 0, "bbox": [0, 44, 640, 119], "area": 21805}, {"id": 15526106, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 481, 23], "area": 3398}, {"id": 6532246, "category_id": 193, "iscrowd": 0, "bbox": [0, 77, 640, 350], "area": 171615}], "file_name": "000000467776.png", "image_id": 467776}, {"segments_info": [{"id": 7366762, "category_id": 1, "iscrowd": 0, "bbox": [580, 298, 51, 118], "area": 2770}, {"id": 4866620, "category_id": 8, "iscrowd": 0, "bbox": [24, 286, 227, 97], "area": 13915}, {"id": 6971763, "category_id": 8, "iscrowd": 0, "bbox": [212, 217, 393, 209], "area": 44685}, {"id": 9604232, "category_id": 149, "iscrowd": 0, "bbox": [0, 356, 640, 124], "area": 59518}, {"id": 6325361, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 367], "area": 73934}, {"id": 15657155, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 109], "area": 36269}, {"id": 10331293, "category_id": 191, "iscrowd": 0, "bbox": [0, 300, 39, 62], "area": 1497}, {"id": 5266789, "category_id": 197, "iscrowd": 0, "bbox": [0, 30, 640, 315], "area": 71598}], "file_name": "000000467848.png", "image_id": 467848}, {"segments_info": [{"id": 5074044, "category_id": 1, "iscrowd": 0, "bbox": [60, 281, 6, 7], "area": 28}, {"id": 3359029, "category_id": 3, "iscrowd": 0, "bbox": [32, 284, 35, 14], "area": 365}, {"id": 6187115, "category_id": 6, "iscrowd": 0, "bbox": [65, 134, 550, 240], "area": 119717}, {"id": 13550012, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 270], "area": 102785}, {"id": 2062688, "category_id": 193, "iscrowd": 0, "bbox": [0, 238, 640, 221], "area": 70391}], "file_name": "000000468124.png", "image_id": 468124}, {"segments_info": [{"id": 6711910, "category_id": 85, "iscrowd": 0, "bbox": [122, 187, 75, 83], "area": 4818}, {"id": 7896438, "category_id": 189, "iscrowd": 0, "bbox": [0, 239, 600, 160], "area": 59564}, {"id": 2632490, "category_id": 199, "iscrowd": 0, "bbox": [482, 116, 118, 144], "area": 9847}], "file_name": "000000468233.png", "image_id": 468233}, {"segments_info": [{"id": 5527385, "category_id": 65, "iscrowd": 0, "bbox": [66, 223, 473, 198], "area": 59513}, {"id": 2961977, "category_id": 93, "iscrowd": 0, "bbox": [114, 408, 395, 19], "area": 3948}, {"id": 4869459, "category_id": 130, "iscrowd": 0, "bbox": [334, 0, 289, 296], "area": 5148}, {"id": 10396843, "category_id": 180, "iscrowd": 0, "bbox": [0, 76, 640, 301], "area": 74489}, {"id": 3950933, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 87], "area": 37286}, {"id": 4278609, "category_id": 199, "iscrowd": 0, "bbox": [0, 18, 640, 409], "area": 81220}], "file_name": "000000468245.png", "image_id": 468245}, {"segments_info": [{"id": 7832725, "category_id": 1, "iscrowd": 0, "bbox": [473, 287, 167, 132], "area": 18376}, {"id": 4866875, "category_id": 1, "iscrowd": 0, "bbox": [422, 106, 127, 275], "area": 19611}, {"id": 10721680, "category_id": 1, "iscrowd": 0, "bbox": [38, 54, 15, 40], "area": 325}, {"id": 8618882, "category_id": 1, "iscrowd": 0, "bbox": [20, 62, 20, 33], "area": 398}, {"id": 3095098, "category_id": 1, "iscrowd": 0, "bbox": [325, 102, 80, 134], "area": 3623}, {"id": 1317148, "category_id": 1, "iscrowd": 0, "bbox": [537, 86, 103, 131], "area": 8630}, {"id": 3617062, "category_id": 1, "iscrowd": 0, "bbox": [58, 2, 194, 389], "area": 41155}, {"id": 6578262, "category_id": 1, "iscrowd": 0, "bbox": [268, 155, 38, 44], "area": 654}, {"id": 9533845, "category_id": 1, "iscrowd": 0, "bbox": [50, 60, 13, 36], "area": 259}, {"id": 7893632, "category_id": 1, "iscrowd": 0, "bbox": [180, 153, 268, 239], "area": 47109}, {"id": 14277580, "category_id": 3, "iscrowd": 0, "bbox": [220, 33, 33, 10], "area": 257}, {"id": 3091776, "category_id": 15, "iscrowd": 0, "bbox": [35, 314, 201, 37], "area": 2359}, {"id": 13556680, "category_id": 61, "iscrowd": 0, "bbox": [301, 383, 178, 41], "area": 5777}, {"id": 8157319, "category_id": 67, "iscrowd": 0, "bbox": [1, 383, 478, 41], "area": 10859}, {"id": 4275502, "category_id": 85, "iscrowd": 0, "bbox": [204, 172, 11, 12], "area": 97}, {"id": 11375745, "category_id": 100, "iscrowd": 0, "bbox": [194, 188, 48, 54], "area": 1390}, {"id": 2640442, "category_id": 184, "iscrowd": 0, "bbox": [140, 0, 500, 192], "area": 29438}, {"id": 2698031, "category_id": 189, "iscrowd": 0, "bbox": [63, 177, 577, 121], "area": 5537}, {"id": 8700849, "category_id": 193, "iscrowd": 0, "bbox": [0, 32, 640, 354], "area": 44944}, {"id": 4079194, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 131, 85], "area": 5477}], "file_name": "000000468332.png", "image_id": 468332}, {"segments_info": [{"id": 5199981, "category_id": 1, "iscrowd": 0, "bbox": [130, 80, 128, 238], "area": 9003}, {"id": 6378580, "category_id": 1, "iscrowd": 0, "bbox": [357, 126, 143, 145], "area": 7795}, {"id": 10128779, "category_id": 1, "iscrowd": 0, "bbox": [219, 78, 110, 292], "area": 14844}, {"id": 3618358, "category_id": 31, "iscrowd": 0, "bbox": [119, 221, 43, 37], "area": 1091}, {"id": 4606814, "category_id": 62, "iscrowd": 0, "bbox": [306, 126, 21, 65], "area": 758}, {"id": 2965337, "category_id": 62, "iscrowd": 0, "bbox": [198, 125, 66, 124], "area": 1274}, {"id": 3293527, "category_id": 62, "iscrowd": 0, "bbox": [256, 177, 21, 53], "area": 348}, {"id": 3161167, "category_id": 63, "iscrowd": 0, "bbox": [413, 210, 87, 87], "area": 3386}, {"id": 4015442, "category_id": 63, "iscrowd": 0, "bbox": [384, 147, 116, 86], "area": 2964}, {"id": 15198187, "category_id": 75, "iscrowd": 0, "bbox": [126, 153, 10, 9], "area": 53}, {"id": 14014172, "category_id": 75, "iscrowd": 0, "bbox": [245, 75, 11, 12], "area": 41}, {"id": 12302263, "category_id": 112, "iscrowd": 0, "bbox": [334, 12, 78, 199], "area": 13098}, {"id": 3163500, "category_id": 118, "iscrowd": 0, "bbox": [68, 207, 432, 168], "area": 33012}, {"id": 7568014, "category_id": 171, "iscrowd": 0, "bbox": [0, 110, 57, 265], "area": 10453}, {"id": 13222850, "category_id": 177, "iscrowd": 0, "bbox": [71, 0, 351, 215], "area": 8617}, {"id": 13882066, "category_id": 180, "iscrowd": 0, "bbox": [83, 0, 184, 185], "area": 24836}, {"id": 8489364, "category_id": 190, "iscrowd": 0, "bbox": [40, 290, 113, 85], "area": 7849}, {"id": 12957873, "category_id": 199, "iscrowd": 0, "bbox": [11, 0, 489, 239], "area": 34592}, {"id": 5396575, "category_id": 200, "iscrowd": 0, "bbox": [324, 219, 61, 39], "area": 1263}], "file_name": "000000468501.png", "image_id": 468501}, {"segments_info": [{"id": 5722720, "category_id": 1, "iscrowd": 0, "bbox": [122, 54, 317, 195], "area": 18529}, {"id": 4074800, "category_id": 2, "iscrowd": 0, "bbox": [331, 90, 150, 77], "area": 4662}, {"id": 11513255, "category_id": 44, "iscrowd": 0, "bbox": [319, 211, 19, 69], "area": 795}, {"id": 13090219, "category_id": 44, "iscrowd": 0, "bbox": [330, 224, 23, 70], "area": 1124}, {"id": 13485779, "category_id": 47, "iscrowd": 0, "bbox": [264, 196, 25, 34], "area": 691}, {"id": 13024714, "category_id": 47, "iscrowd": 0, "bbox": [246, 236, 35, 60], "area": 1754}, {"id": 5858969, "category_id": 58, "iscrowd": 0, "bbox": [367, 294, 48, 21], "area": 429}, {"id": 5069716, "category_id": 58, "iscrowd": 0, "bbox": [421, 257, 13, 24], "area": 182}, {"id": 7705530, "category_id": 58, "iscrowd": 0, "bbox": [169, 223, 45, 24], "area": 802}, {"id": 8627145, "category_id": 58, "iscrowd": 0, "bbox": [250, 298, 49, 43], "area": 1441}, {"id": 8696273, "category_id": 58, "iscrowd": 0, "bbox": [147, 283, 40, 33], "area": 779}, {"id": 9681891, "category_id": 58, "iscrowd": 0, "bbox": [350, 221, 30, 28], "area": 442}, {"id": 3682695, "category_id": 63, "iscrowd": 0, "bbox": [4, 153, 633, 319], "area": 94823}, {"id": 10323552, "category_id": 67, "iscrowd": 0, "bbox": [137, 255, 300, 193], "area": 11578}, {"id": 5718851, "category_id": 181, "iscrowd": 0, "bbox": [209, 0, 431, 199], "area": 58189}, {"id": 8090980, "category_id": 189, "iscrowd": 0, "bbox": [413, 267, 41, 20], "area": 324}, {"id": 3938069, "category_id": 190, "iscrowd": 0, "bbox": [144, 325, 496, 155], "area": 36547}, {"id": 11449012, "category_id": 195, "iscrowd": 0, "bbox": [132, 205, 342, 123], "area": 5120}, {"id": 10798034, "category_id": 196, "iscrowd": 0, "bbox": [372, 264, 66, 65], "area": 2631}, {"id": 11973030, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 225], "area": 37848}], "file_name": "000000468505.png", "image_id": 468505}, {"segments_info": [{"id": 5266054, "category_id": 1, "iscrowd": 0, "bbox": [91, 264, 376, 185], "area": 22444}, {"id": 6123403, "category_id": 65, "iscrowd": 0, "bbox": [3, 101, 608, 390], "area": 211910}, {"id": 2366267, "category_id": 109, "iscrowd": 0, "bbox": [129, 0, 483, 128], "area": 33855}, {"id": 1378089, "category_id": 118, "iscrowd": 0, "bbox": [0, 451, 612, 161], "area": 74573}, {"id": 8889538, "category_id": 181, "iscrowd": 0, "bbox": [418, 0, 109, 74], "area": 7080}, {"id": 7643064, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 566, 137], "area": 22469}], "file_name": "000000468577.png", "image_id": 468577}, {"segments_info": [{"id": 7241110, "category_id": 1, "iscrowd": 0, "bbox": [65, 179, 82, 211], "area": 3120}, {"id": 7438009, "category_id": 1, "iscrowd": 0, "bbox": [75, 197, 116, 213], "area": 8631}, {"id": 12892854, "category_id": 1, "iscrowd": 0, "bbox": [477, 190, 105, 233], "area": 10045}, {"id": 7830666, "category_id": 1, "iscrowd": 0, "bbox": [292, 141, 126, 269], "area": 12966}, {"id": 13422803, "category_id": 34, "iscrowd": 0, "bbox": [292, 63, 35, 15], "area": 253}, {"id": 4808530, "category_id": 138, "iscrowd": 0, "bbox": [0, 124, 640, 222], "area": 75912}, {"id": 3562325, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 221], "area": 97095}, {"id": 4809813, "category_id": 185, "iscrowd": 0, "bbox": [273, 208, 197, 116], "area": 12935}, {"id": 4485974, "category_id": 193, "iscrowd": 0, "bbox": [0, 318, 471, 65], "area": 7520}, {"id": 8559521, "category_id": 194, "iscrowd": 0, "bbox": [0, 322, 640, 157], "area": 76999}], "file_name": "000000468632.png", "image_id": 468632}, {"segments_info": [{"id": 5336191, "category_id": 47, "iscrowd": 0, "bbox": [0, 1, 92, 117], "area": 9555}, {"id": 4277580, "category_id": 49, "iscrowd": 0, "bbox": [506, 66, 34, 43], "area": 518}, {"id": 8553605, "category_id": 50, "iscrowd": 0, "bbox": [532, 68, 42, 27], "area": 461}, {"id": 8893381, "category_id": 52, "iscrowd": 0, "bbox": [45, 114, 275, 155], "area": 18168}, {"id": 10010317, "category_id": 52, "iscrowd": 0, "bbox": [297, 148, 137, 124], "area": 13745}, {"id": 8564414, "category_id": 52, "iscrowd": 0, "bbox": [58, 210, 180, 129], "area": 18106}, {"id": 2242897, "category_id": 54, "iscrowd": 0, "bbox": [1, 110, 471, 333], "area": 83646}, {"id": 6652309, "category_id": 189, "iscrowd": 0, "bbox": [0, 51, 640, 429], "area": 24632}, {"id": 11842744, "category_id": 195, "iscrowd": 0, "bbox": [498, 30, 142, 93], "area": 7163}, {"id": 4155282, "category_id": 196, "iscrowd": 0, "bbox": [0, 18, 640, 462], "area": 85290}], "file_name": "000000468925.png", "image_id": 468925}, {"segments_info": [{"id": 9071738, "category_id": 1, "iscrowd": 0, "bbox": [96, 3, 527, 420], "area": 108287}, {"id": 8611709, "category_id": 1, "iscrowd": 0, "bbox": [1, 0, 323, 422], "area": 58034}, {"id": 6381689, "category_id": 63, "iscrowd": 0, "bbox": [71, 56, 569, 367], "area": 21212}, {"id": 11634303, "category_id": 75, "iscrowd": 0, "bbox": [323, 125, 37, 26], "area": 522}, {"id": 16246755, "category_id": 75, "iscrowd": 0, "bbox": [331, 328, 33, 42], "area": 660}, {"id": 16511465, "category_id": 75, "iscrowd": 0, "bbox": [441, 372, 40, 39], "area": 1146}, {"id": 16177614, "category_id": 75, "iscrowd": 0, "bbox": [351, 319, 137, 49], "area": 2425}, {"id": 2695012, "category_id": 109, "iscrowd": 0, "bbox": [546, 0, 94, 166], "area": 5096}, {"id": 6178640, "category_id": 189, "iscrowd": 0, "bbox": [306, 117, 89, 79], "area": 1775}, {"id": 13680327, "category_id": 199, "iscrowd": 0, "bbox": [55, 0, 493, 273], "area": 41111}], "file_name": "000000468954.png", "image_id": 468954}, {"segments_info": [{"id": 5855322, "category_id": 1, "iscrowd": 0, "bbox": [351, 178, 111, 297], "area": 16030}, {"id": 395277, "category_id": 1, "iscrowd": 0, "bbox": [0, 193, 17, 57], "area": 674}, {"id": 5461080, "category_id": 1, "iscrowd": 0, "bbox": [101, 166, 76, 260], "area": 10583}, {"id": 7505820, "category_id": 1, "iscrowd": 0, "bbox": [78, 196, 33, 110], "area": 1704}, {"id": 2574949, "category_id": 1, "iscrowd": 0, "bbox": [0, 245, 38, 124], "area": 2870}, {"id": 663599, "category_id": 1, "iscrowd": 0, "bbox": [7, 193, 27, 56], "area": 605}, {"id": 3553345, "category_id": 1, "iscrowd": 0, "bbox": [26, 196, 29, 56], "area": 709}, {"id": 3680797, "category_id": 1, "iscrowd": 0, "bbox": [443, 198, 18, 31], "area": 378}, {"id": 8025716, "category_id": 1, "iscrowd": 0, "bbox": [224, 79, 147, 394], "area": 30907}, {"id": 4801859, "category_id": 1, "iscrowd": 0, "bbox": [625, 212, 15, 201], "area": 1431}, {"id": 12958644, "category_id": 32, "iscrowd": 0, "bbox": [128, 232, 12, 7], "area": 43}, {"id": 2236009, "category_id": 32, "iscrowd": 0, "bbox": [380, 237, 25, 101], "area": 554}, {"id": 9073307, "category_id": 32, "iscrowd": 0, "bbox": [267, 205, 28, 6], "area": 40}, {"id": 10001041, "category_id": 38, "iscrowd": 0, "bbox": [9, 86, 109, 83], "area": 5336}, {"id": 11127734, "category_id": 38, "iscrowd": 0, "bbox": [333, 250, 139, 72], "area": 2661}, {"id": 6122637, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 640, 181], "area": 54446}, {"id": 3621456, "category_id": 181, "iscrowd": 0, "bbox": [88, 37, 348, 59], "area": 3602}, {"id": 11053224, "category_id": 187, "iscrowd": 0, "bbox": [262, 0, 115, 25], "area": 1927}, {"id": 8164264, "category_id": 194, "iscrowd": 0, "bbox": [0, 235, 640, 245], "area": 93266}, {"id": 5200743, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 275], "area": 74802}], "file_name": "000000468965.png", "image_id": 468965}, {"segments_info": [{"id": 4013645, "category_id": 1, "iscrowd": 0, "bbox": [0, 188, 549, 286], "area": 46051}, {"id": 2766145, "category_id": 17, "iscrowd": 0, "bbox": [293, 245, 262, 227], "area": 13564}, {"id": 10986917, "category_id": 65, "iscrowd": 0, "bbox": [1, 167, 639, 305], "area": 92599}, {"id": 5262155, "category_id": 77, "iscrowd": 0, "bbox": [515, 418, 46, 55], "area": 1609}, {"id": 10526109, "category_id": 93, "iscrowd": 0, "bbox": [0, 466, 640, 14], "area": 4705}], "file_name": "000000469067.png", "image_id": 469067}, {"segments_info": [{"id": 8356479, "category_id": 5, "iscrowd": 0, "bbox": [258, 71, 220, 68], "area": 5177}, {"id": 8617884, "category_id": 92, "iscrowd": 0, "bbox": [152, 131, 101, 142], "area": 4971}, {"id": 1781540, "category_id": 184, "iscrowd": 0, "bbox": [0, 337, 640, 123], "area": 50941}, {"id": 12433843, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 399], "area": 233184}], "file_name": "000000469174.png", "image_id": 469174}, {"segments_info": [{"id": 4608092, "category_id": 1, "iscrowd": 0, "bbox": [97, 284, 6, 17], "area": 64}, {"id": 5985625, "category_id": 1, "iscrowd": 0, "bbox": [71, 289, 6, 10], "area": 33}, {"id": 7895931, "category_id": 8, "iscrowd": 0, "bbox": [177, 225, 460, 185], "area": 54638}, {"id": 4935548, "category_id": 38, "iscrowd": 0, "bbox": [521, 142, 27, 42], "area": 406}, {"id": 7100485, "category_id": 38, "iscrowd": 0, "bbox": [632, 202, 8, 13], "area": 87}, {"id": 10325650, "category_id": 38, "iscrowd": 0, "bbox": [342, 190, 16, 22], "area": 111}, {"id": 2510188, "category_id": 38, "iscrowd": 0, "bbox": [509, 50, 41, 20], "area": 510}, {"id": 5262151, "category_id": 38, "iscrowd": 0, "bbox": [389, 107, 43, 25], "area": 663}, {"id": 3744867, "category_id": 38, "iscrowd": 0, "bbox": [47, 40, 15, 12], "area": 136}, {"id": 6179130, "category_id": 38, "iscrowd": 0, "bbox": [373, 152, 11, 12], "area": 59}, {"id": 9861729, "category_id": 38, "iscrowd": 0, "bbox": [547, 136, 23, 24], "area": 145}, {"id": 8743243, "category_id": 38, "iscrowd": 0, "bbox": [548, 240, 10, 8], "area": 33}, {"id": 11507838, "category_id": 38, "iscrowd": 0, "bbox": [614, 222, 8, 7], "area": 33}, {"id": 7175791, "category_id": 38, "iscrowd": 0, "bbox": [493, 80, 82, 91], "area": 1720}, {"id": 10717034, "category_id": 38, "iscrowd": 0, "bbox": [550, 221, 8, 6], "area": 25}, {"id": 9074284, "category_id": 38, "iscrowd": 1, "bbox": [38, 154, 545, 147], "area": 2282}, {"id": 11766104, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 258], "area": 152097}, {"id": 7563092, "category_id": 192, "iscrowd": 0, "bbox": [0, 240, 640, 64], "area": 13007}, {"id": 7314096, "category_id": 193, "iscrowd": 0, "bbox": [0, 289, 640, 191], "area": 80304}], "file_name": "000000469192.png", "image_id": 469192}, {"segments_info": [{"id": 3486773, "category_id": 1, "iscrowd": 0, "bbox": [112, 238, 8, 16], "area": 74}, {"id": 2501160, "category_id": 1, "iscrowd": 0, "bbox": [182, 235, 16, 34], "area": 244}, {"id": 4537921, "category_id": 1, "iscrowd": 0, "bbox": [125, 241, 3, 11], "area": 16}, {"id": 2698025, "category_id": 1, "iscrowd": 0, "bbox": [147, 236, 33, 65], "area": 972}, {"id": 3487296, "category_id": 1, "iscrowd": 0, "bbox": [121, 239, 4, 14], "area": 42}, {"id": 4473926, "category_id": 1, "iscrowd": 0, "bbox": [171, 232, 10, 37], "area": 157}, {"id": 3881017, "category_id": 1, "iscrowd": 0, "bbox": [132, 243, 3, 8], "area": 23}, {"id": 5724504, "category_id": 7, "iscrowd": 0, "bbox": [117, 32, 523, 413], "area": 101955}, {"id": 2433119, "category_id": 33, "iscrowd": 0, "bbox": [137, 283, 17, 20], "area": 297}, {"id": 2699855, "category_id": 128, "iscrowd": 0, "bbox": [0, 72, 105, 289], "area": 21222}, {"id": 9410713, "category_id": 144, "iscrowd": 0, "bbox": [127, 235, 513, 245], "area": 52491}, {"id": 1974310, "category_id": 151, "iscrowd": 0, "bbox": [0, 4, 130, 164], "area": 11058}, {"id": 14670031, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 224], "area": 77441}, {"id": 4147020, "category_id": 191, "iscrowd": 0, "bbox": [0, 249, 268, 231], "area": 36486}, {"id": 4807260, "category_id": 192, "iscrowd": 0, "bbox": [123, 210, 56, 43], "area": 896}, {"id": 4738385, "category_id": 197, "iscrowd": 0, "bbox": [86, 162, 40, 92], "area": 1453}], "file_name": "000000469246.png", "image_id": 469246}, {"segments_info": [{"id": 9345448, "category_id": 25, "iscrowd": 0, "bbox": [0, 30, 573, 409], "area": 102934}, {"id": 2967889, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 439], "area": 177600}], "file_name": "000000469652.png", "image_id": 469652}, {"segments_info": [{"id": 8352172, "category_id": 1, "iscrowd": 0, "bbox": [133, 252, 78, 70], "area": 2463}, {"id": 13881045, "category_id": 35, "iscrowd": 0, "bbox": [145, 307, 80, 21], "area": 521}, {"id": 16579836, "category_id": 159, "iscrowd": 0, "bbox": [0, 267, 640, 213], "area": 118930}, {"id": 5067360, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 310], "area": 180346}, {"id": 15460327, "category_id": 187, "iscrowd": 0, "bbox": [48, 0, 592, 53], "area": 3243}], "file_name": "000000469828.png", "image_id": 469828}, {"segments_info": [{"id": 4941163, "category_id": 44, "iscrowd": 0, "bbox": [1, 2, 131, 220], "area": 23068}, {"id": 5071207, "category_id": 51, "iscrowd": 0, "bbox": [54, 282, 174, 135], "area": 17362}, {"id": 4541778, "category_id": 51, "iscrowd": 0, "bbox": [535, 285, 105, 139], "area": 11342}, {"id": 4418457, "category_id": 61, "iscrowd": 0, "bbox": [371, 56, 69, 57], "area": 2915}, {"id": 12562624, "category_id": 61, "iscrowd": 0, "bbox": [168, 66, 65, 60], "area": 3076}, {"id": 4483736, "category_id": 61, "iscrowd": 0, "bbox": [154, 179, 101, 111], "area": 7915}, {"id": 10919090, "category_id": 61, "iscrowd": 0, "bbox": [448, 169, 136, 115], "area": 10160}, {"id": 9342856, "category_id": 61, "iscrowd": 0, "bbox": [212, 18, 64, 42], "area": 1512}, {"id": 11316407, "category_id": 61, "iscrowd": 0, "bbox": [300, 46, 49, 35], "area": 1413}, {"id": 8423357, "category_id": 61, "iscrowd": 0, "bbox": [334, 176, 58, 74], "area": 3364}, {"id": 7501997, "category_id": 61, "iscrowd": 0, "bbox": [278, 195, 56, 72], "area": 2923}, {"id": 4475489, "category_id": 61, "iscrowd": 0, "bbox": [419, 333, 88, 102], "area": 6541}, {"id": 5066618, "category_id": 67, "iscrowd": 0, "bbox": [2, 20, 638, 452], "area": 193752}, {"id": 15724268, "category_id": 181, "iscrowd": 0, "bbox": [365, 0, 12, 18], "area": 180}, {"id": 8489108, "category_id": 188, "iscrowd": 0, "bbox": [113, 0, 527, 31], "area": 12406}, {"id": 12626337, "category_id": 199, "iscrowd": 0, "bbox": [595, 0, 45, 28], "area": 958}], "file_name": "000000470121.png", "image_id": 470121}, {"segments_info": [{"id": 7429205, "category_id": 2, "iscrowd": 0, "bbox": [228, 174, 71, 45], "area": 1609}, {"id": 7561048, "category_id": 2, "iscrowd": 0, "bbox": [211, 173, 49, 42], "area": 715}, {"id": 12626848, "category_id": 112, "iscrowd": 0, "bbox": [82, 116, 53, 77], "area": 2284}, {"id": 10261650, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 428, 225], "area": 30757}, {"id": 14671582, "category_id": 144, "iscrowd": 0, "bbox": [0, 214, 316, 42], "area": 3498}, {"id": 9342091, "category_id": 151, "iscrowd": 0, "bbox": [215, 16, 57, 34], "area": 1009}, {"id": 8288881, "category_id": 175, "iscrowd": 0, "bbox": [0, 222, 311, 82], "area": 5701}, {"id": 6250068, "category_id": 181, "iscrowd": 0, "bbox": [0, 54, 21, 149], "area": 2584}, {"id": 6122078, "category_id": 184, "iscrowd": 0, "bbox": [117, 0, 329, 318], "area": 30290}, {"id": 8020295, "category_id": 185, "iscrowd": 0, "bbox": [423, 177, 23, 42], "area": 782}, {"id": 15593196, "category_id": 187, "iscrowd": 0, "bbox": [82, 0, 197, 36], "area": 1966}, {"id": 15922419, "category_id": 191, "iscrowd": 0, "bbox": [0, 295, 446, 103], "area": 9800}, {"id": 5279344, "category_id": 193, "iscrowd": 0, "bbox": [0, 233, 446, 407], "area": 100461}, {"id": 8091496, "category_id": 199, "iscrowd": 0, "bbox": [192, 65, 254, 177], "area": 1347}], "file_name": "000000470173.png", "image_id": 470173}, {"segments_info": [{"id": 7237743, "category_id": 1, "iscrowd": 0, "bbox": [123, 0, 162, 218], "area": 28295}, {"id": 10925753, "category_id": 47, "iscrowd": 0, "bbox": [90, 161, 72, 92], "area": 4757}, {"id": 13818587, "category_id": 49, "iscrowd": 0, "bbox": [140, 381, 70, 44], "area": 548}, {"id": 3818052, "category_id": 49, "iscrowd": 0, "bbox": [367, 168, 41, 26], "area": 431}, {"id": 10790821, "category_id": 49, "iscrowd": 0, "bbox": [5, 380, 85, 38], "area": 581}, {"id": 14015200, "category_id": 49, "iscrowd": 0, "bbox": [311, 358, 67, 34], "area": 599}, {"id": 13949915, "category_id": 49, "iscrowd": 0, "bbox": [80, 383, 77, 36], "area": 514}, {"id": 11059141, "category_id": 49, "iscrowd": 0, "bbox": [203, 374, 75, 53], "area": 669}, {"id": 11580338, "category_id": 50, "iscrowd": 0, "bbox": [253, 295, 40, 53], "area": 418}, {"id": 8621452, "category_id": 50, "iscrowd": 0, "bbox": [141, 307, 53, 43], "area": 357}, {"id": 13028305, "category_id": 50, "iscrowd": 0, "bbox": [344, 311, 39, 42], "area": 353}, {"id": 6988236, "category_id": 50, "iscrowd": 0, "bbox": [139, 378, 72, 48], "area": 274}, {"id": 10396063, "category_id": 50, "iscrowd": 0, "bbox": [341, 395, 22, 33], "area": 193}, {"id": 13227740, "category_id": 50, "iscrowd": 0, "bbox": [198, 308, 43, 39], "area": 243}, {"id": 10068647, "category_id": 50, "iscrowd": 0, "bbox": [295, 304, 41, 44], "area": 275}, {"id": 7174275, "category_id": 51, "iscrowd": 0, "bbox": [334, 354, 58, 69], "area": 2178}, {"id": 5794990, "category_id": 51, "iscrowd": 0, "bbox": [278, 354, 62, 68], "area": 2388}, {"id": 9282736, "category_id": 51, "iscrowd": 0, "bbox": [103, 354, 77, 61], "area": 2518}, {"id": 10801374, "category_id": 51, "iscrowd": 0, "bbox": [223, 348, 66, 70], "area": 2152}, {"id": 15331313, "category_id": 51, "iscrowd": 0, "bbox": [178, 317, 63, 48], "area": 1978}, {"id": 13423320, "category_id": 51, "iscrowd": 0, "bbox": [284, 322, 50, 45], "area": 1142}, {"id": 9673633, "category_id": 51, "iscrowd": 0, "bbox": [232, 321, 55, 43], "area": 1706}, {"id": 9016472, "category_id": 51, "iscrowd": 0, "bbox": [126, 319, 57, 46], "area": 1614}, {"id": 10401241, "category_id": 51, "iscrowd": 0, "bbox": [335, 324, 48, 42], "area": 1293}, {"id": 6645861, "category_id": 51, "iscrowd": 1, "bbox": [32, 331, 102, 84], "area": 3941}, {"id": 9881320, "category_id": 60, "iscrowd": 0, "bbox": [488, 119, 16, 16], "area": 172}, {"id": 7972040, "category_id": 60, "iscrowd": 0, "bbox": [476, 314, 32, 27], "area": 709}, {"id": 11523311, "category_id": 60, "iscrowd": 0, "bbox": [443, 190, 31, 25], "area": 606}, {"id": 7182787, "category_id": 60, "iscrowd": 0, "bbox": [481, 284, 33, 28], "area": 662}, {"id": 7446470, "category_id": 60, "iscrowd": 0, "bbox": [513, 292, 33, 28], "area": 742}, {"id": 8037061, "category_id": 60, "iscrowd": 0, "bbox": [507, 319, 36, 32], "area": 865}, {"id": 1844772, "category_id": 64, "iscrowd": 0, "bbox": [256, 2, 125, 178], "area": 13527}, {"id": 11515574, "category_id": 107, "iscrowd": 0, "bbox": [0, 111, 640, 369], "area": 110789}, {"id": 4088965, "category_id": 130, "iscrowd": 0, "bbox": [395, 0, 232, 220], "area": 16482}, {"id": 4607307, "category_id": 190, "iscrowd": 0, "bbox": [16, 0, 624, 258], "area": 18161}, {"id": 857368, "category_id": 192, "iscrowd": 0, "bbox": [307, 0, 88, 19], "area": 1070}, {"id": 10665680, "category_id": 196, "iscrowd": 0, "bbox": [175, 88, 465, 324], "area": 19607}, {"id": 1781571, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 114], "area": 14405}], "file_name": "000000470773.png", "image_id": 470773}, {"segments_info": [{"id": 4342597, "category_id": 1, "iscrowd": 0, "bbox": [107, 71, 247, 330], "area": 29035}, {"id": 2369578, "category_id": 1, "iscrowd": 0, "bbox": [419, 37, 125, 366], "area": 30529}, {"id": 4406843, "category_id": 1, "iscrowd": 0, "bbox": [61, 102, 109, 290], "area": 16245}, {"id": 5070696, "category_id": 1, "iscrowd": 0, "bbox": [352, 46, 92, 353], "area": 18628}, {"id": 3553594, "category_id": 1, "iscrowd": 0, "bbox": [259, 55, 142, 327], "area": 20085}, {"id": 3947317, "category_id": 27, "iscrowd": 0, "bbox": [96, 143, 17, 48], "area": 325}, {"id": 10199198, "category_id": 35, "iscrowd": 0, "bbox": [172, 387, 148, 92], "area": 2863}, {"id": 9475990, "category_id": 35, "iscrowd": 0, "bbox": [431, 391, 153, 86], "area": 3658}, {"id": 7896696, "category_id": 35, "iscrowd": 0, "bbox": [77, 374, 116, 100], "area": 3404}, {"id": 7042414, "category_id": 36, "iscrowd": 0, "bbox": [347, 363, 103, 89], "area": 3595}, {"id": 5725796, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 479], "area": 143727}, {"id": 855314, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 509, 78], "area": 24333}], "file_name": "000000470779.png", "image_id": 470779}, {"segments_info": [{"id": 1056046, "category_id": 1, "iscrowd": 0, "bbox": [139, 8, 35, 64], "area": 1050}, {"id": 3418916, "category_id": 1, "iscrowd": 0, "bbox": [300, 4, 6, 15], "area": 56}, {"id": 3159106, "category_id": 1, "iscrowd": 0, "bbox": [345, 78, 133, 217], "area": 9249}, {"id": 4469798, "category_id": 1, "iscrowd": 0, "bbox": [586, 10, 6, 10], "area": 36}, {"id": 4211022, "category_id": 1, "iscrowd": 0, "bbox": [288, 14, 41, 54], "area": 791}, {"id": 9472895, "category_id": 1, "iscrowd": 0, "bbox": [392, 6, 5, 14], "area": 54}, {"id": 1973556, "category_id": 1, "iscrowd": 0, "bbox": [216, 4, 59, 117], "area": 2835}, {"id": 5917243, "category_id": 1, "iscrowd": 0, "bbox": [288, 19, 87, 82], "area": 2460}, {"id": 2501179, "category_id": 1, "iscrowd": 0, "bbox": [247, 80, 108, 137], "area": 9079}, {"id": 789003, "category_id": 1, "iscrowd": 0, "bbox": [158, 7, 63, 93], "area": 2158}, {"id": 1118230, "category_id": 1, "iscrowd": 0, "bbox": [205, 4, 36, 46], "area": 748}, {"id": 2368613, "category_id": 1, "iscrowd": 0, "bbox": [19, 113, 205, 330], "area": 37908}, {"id": 2630693, "category_id": 1, "iscrowd": 0, "bbox": [404, 118, 224, 362], "area": 47830}, {"id": 8483683, "category_id": 1, "iscrowd": 1, "bbox": [323, 8, 14, 9], "area": 98}, {"id": 8087376, "category_id": 3, "iscrowd": 0, "bbox": [499, 18, 141, 44], "area": 2615}, {"id": 10848880, "category_id": 3, "iscrowd": 0, "bbox": [391, 36, 19, 16], "area": 212}, {"id": 10654849, "category_id": 3, "iscrowd": 0, "bbox": [475, 40, 41, 34], "area": 911}, {"id": 8215920, "category_id": 3, "iscrowd": 0, "bbox": [402, 46, 23, 21], "area": 335}, {"id": 5718616, "category_id": 3, "iscrowd": 0, "bbox": [556, 29, 55, 24], "area": 574}, {"id": 9480373, "category_id": 46, "iscrowd": 0, "bbox": [386, 334, 38, 98], "area": 1833}, {"id": 5070448, "category_id": 47, "iscrowd": 0, "bbox": [283, 68, 9, 9], "area": 58}, {"id": 7050417, "category_id": 47, "iscrowd": 0, "bbox": [334, 303, 85, 127], "area": 2253}, {"id": 4939653, "category_id": 47, "iscrowd": 0, "bbox": [328, 193, 21, 60], "area": 997}, {"id": 3684945, "category_id": 47, "iscrowd": 0, "bbox": [297, 156, 21, 56], "area": 636}, {"id": 5208223, "category_id": 47, "iscrowd": 0, "bbox": [238, 242, 27, 76], "area": 1713}, {"id": 6187126, "category_id": 48, "iscrowd": 0, "bbox": [206, 442, 105, 32], "area": 548}, {"id": 6186611, "category_id": 48, "iscrowd": 0, "bbox": [367, 313, 42, 20], "area": 236}, {"id": 5663357, "category_id": 49, "iscrowd": 0, "bbox": [210, 426, 119, 33], "area": 704}, {"id": 4735305, "category_id": 49, "iscrowd": 0, "bbox": [368, 297, 43, 19], "area": 246}, {"id": 8421767, "category_id": 49, "iscrowd": 0, "bbox": [182, 276, 31, 42], "area": 322}, {"id": 4347506, "category_id": 49, "iscrowd": 0, "bbox": [367, 246, 32, 36], "area": 217}, {"id": 4024990, "category_id": 59, "iscrowd": 0, "bbox": [264, 249, 83, 45], "area": 2203}, {"id": 8433098, "category_id": 59, "iscrowd": 0, "bbox": [198, 224, 87, 29], "area": 1673}, {"id": 6459829, "category_id": 59, "iscrowd": 0, "bbox": [189, 301, 36, 18], "area": 379}, {"id": 8302797, "category_id": 59, "iscrowd": 0, "bbox": [167, 348, 50, 40], "area": 1161}, {"id": 8235201, "category_id": 59, "iscrowd": 0, "bbox": [212, 344, 71, 70], "area": 3322}, {"id": 2246518, "category_id": 59, "iscrowd": 0, "bbox": [360, 229, 28, 22], "area": 326}, {"id": 5864355, "category_id": 59, "iscrowd": 0, "bbox": [296, 328, 44, 30], "area": 743}, {"id": 8104896, "category_id": 59, "iscrowd": 0, "bbox": [134, 391, 73, 45], "area": 2716}, {"id": 11710633, "category_id": 62, "iscrowd": 0, "bbox": [318, 70, 46, 32], "area": 887}, {"id": 4672591, "category_id": 62, "iscrowd": 0, "bbox": [232, 39, 47, 88], "area": 1618}, {"id": 3094595, "category_id": 62, "iscrowd": 0, "bbox": [0, 230, 122, 249], "area": 9263}, {"id": 2237485, "category_id": 62, "iscrowd": 0, "bbox": [55, 34, 33, 16], "area": 455}, {"id": 1383205, "category_id": 62, "iscrowd": 0, "bbox": [0, 56, 33, 59], "area": 1571}, {"id": 3484197, "category_id": 62, "iscrowd": 0, "bbox": [330, 136, 23, 47], "area": 187}, {"id": 657415, "category_id": 62, "iscrowd": 0, "bbox": [579, 271, 61, 209], "area": 4753}, {"id": 2369329, "category_id": 62, "iscrowd": 0, "bbox": [18, 31, 29, 15], "area": 333}, {"id": 4147021, "category_id": 62, "iscrowd": 0, "bbox": [152, 47, 61, 86], "area": 2022}, {"id": 1580331, "category_id": 62, "iscrowd": 0, "bbox": [130, 33, 13, 39], "area": 276}, {"id": 1516338, "category_id": 62, "iscrowd": 0, "bbox": [32, 86, 55, 30], "area": 1279}, {"id": 5133917, "category_id": 62, "iscrowd": 0, "bbox": [79, 122, 28, 68], "area": 1221}, {"id": 2895927, "category_id": 62, "iscrowd": 0, "bbox": [55, 59, 27, 29], "area": 495}, {"id": 6584982, "category_id": 67, "iscrowd": 0, "bbox": [110, 201, 400, 273], "area": 50595}, {"id": 3680806, "category_id": 67, "iscrowd": 0, "bbox": [0, 41, 90, 27], "area": 1313}, {"id": 3748927, "category_id": 67, "iscrowd": 0, "bbox": [2, 112, 116, 109], "area": 7804}, {"id": 3489616, "category_id": 118, "iscrowd": 0, "bbox": [126, 99, 285, 153], "area": 9899}, {"id": 9405813, "category_id": 149, "iscrowd": 0, "bbox": [376, 0, 264, 139], "area": 11961}, {"id": 7236454, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 147, 73], "area": 5344}, {"id": 7565923, "category_id": 184, "iscrowd": 0, "bbox": [286, 0, 249, 41], "area": 1212}, {"id": 10066843, "category_id": 185, "iscrowd": 0, "bbox": [374, 52, 253, 205], "area": 2164}, {"id": 4871779, "category_id": 189, "iscrowd": 0, "bbox": [0, 42, 539, 438], "area": 13626}, {"id": 15262427, "category_id": 190, "iscrowd": 0, "bbox": [520, 121, 120, 170], "area": 9867}, {"id": 7431516, "category_id": 191, "iscrowd": 0, "bbox": [299, 0, 335, 74], "area": 1545}], "file_name": "000000470924.png", "image_id": 470924}, {"segments_info": [{"id": 3289135, "category_id": 1, "iscrowd": 0, "bbox": [113, 111, 20, 56], "area": 535}, {"id": 1974056, "category_id": 1, "iscrowd": 0, "bbox": [376, 75, 52, 246], "area": 5472}, {"id": 4077627, "category_id": 1, "iscrowd": 0, "bbox": [107, 33, 209, 542], "area": 66557}, {"id": 2038579, "category_id": 1, "iscrowd": 0, "bbox": [252, 37, 115, 361], "area": 18185}, {"id": 2500152, "category_id": 1, "iscrowd": 0, "bbox": [24, 109, 23, 71], "area": 940}, {"id": 3418665, "category_id": 1, "iscrowd": 0, "bbox": [0, 107, 27, 75], "area": 1160}, {"id": 2169112, "category_id": 1, "iscrowd": 0, "bbox": [360, 86, 42, 192], "area": 4618}, {"id": 2039851, "category_id": 1, "iscrowd": 0, "bbox": [364, 89, 35, 41], "area": 885}, {"id": 7103325, "category_id": 35, "iscrowd": 0, "bbox": [116, 359, 50, 26], "area": 426}, {"id": 7828853, "category_id": 35, "iscrowd": 0, "bbox": [195, 492, 160, 148], "area": 5836}, {"id": 4666407, "category_id": 35, "iscrowd": 0, "bbox": [346, 311, 82, 9], "area": 221}, {"id": 8289409, "category_id": 35, "iscrowd": 0, "bbox": [266, 358, 132, 67], "area": 1305}, {"id": 4474440, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 428, 142], "area": 38560}, {"id": 4078929, "category_id": 138, "iscrowd": 0, "bbox": [0, 119, 128, 52], "area": 955}, {"id": 12037800, "category_id": 159, "iscrowd": 0, "bbox": [0, 169, 428, 471], "area": 119795}, {"id": 1973016, "category_id": 181, "iscrowd": 0, "bbox": [134, 83, 11, 22], "area": 206}, {"id": 5262921, "category_id": 199, "iscrowd": 0, "bbox": [96, 100, 50, 40], "area": 881}], "file_name": "000000470952.png", "image_id": 470952}, {"segments_info": [{"id": 2905688, "category_id": 1, "iscrowd": 0, "bbox": [388, 206, 5, 22], "area": 42}, {"id": 5601923, "category_id": 1, "iscrowd": 0, "bbox": [296, 216, 12, 47], "area": 360}, {"id": 3294826, "category_id": 1, "iscrowd": 0, "bbox": [258, 218, 17, 26], "area": 135}, {"id": 4356997, "category_id": 1, "iscrowd": 0, "bbox": [313, 210, 20, 40], "area": 610}, {"id": 5918024, "category_id": 1, "iscrowd": 0, "bbox": [590, 149, 50, 55], "area": 1291}, {"id": 5078393, "category_id": 1, "iscrowd": 0, "bbox": [372, 203, 7, 31], "area": 148}, {"id": 4554103, "category_id": 1, "iscrowd": 0, "bbox": [338, 207, 11, 30], "area": 237}, {"id": 2500647, "category_id": 1, "iscrowd": 0, "bbox": [197, 222, 14, 26], "area": 175}, {"id": 3360589, "category_id": 1, "iscrowd": 0, "bbox": [273, 218, 13, 43], "area": 328}, {"id": 3951180, "category_id": 1, "iscrowd": 0, "bbox": [216, 229, 23, 30], "area": 357}, {"id": 2307421, "category_id": 1, "iscrowd": 0, "bbox": [152, 225, 30, 39], "area": 751}, {"id": 5007979, "category_id": 1, "iscrowd": 0, "bbox": [252, 234, 16, 41], "area": 395}, {"id": 1581344, "category_id": 1, "iscrowd": 0, "bbox": [213, 222, 11, 33], "area": 194}, {"id": 922390, "category_id": 7, "iscrowd": 0, "bbox": [567, 63, 73, 349], "area": 12353}, {"id": 2238533, "category_id": 62, "iscrowd": 0, "bbox": [601, 207, 39, 63], "area": 1262}, {"id": 1118743, "category_id": 62, "iscrowd": 0, "bbox": [590, 202, 29, 66], "area": 696}, {"id": 2699596, "category_id": 62, "iscrowd": 0, "bbox": [599, 202, 41, 30], "area": 319}, {"id": 1383479, "category_id": 62, "iscrowd": 0, "bbox": [604, 231, 36, 141], "area": 3835}, {"id": 5933202, "category_id": 147, "iscrowd": 0, "bbox": [523, 187, 37, 42], "area": 1024}, {"id": 1187362, "category_id": 177, "iscrowd": 0, "bbox": [581, 0, 59, 117], "area": 2867}, {"id": 2644821, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 567, 426], "area": 199078}, {"id": 14410207, "category_id": 187, "iscrowd": 0, "bbox": [226, 0, 343, 60], "area": 1284}], "file_name": "000000471023.png", "image_id": 471023}, {"segments_info": [{"id": 6447714, "category_id": 1, "iscrowd": 0, "bbox": [15, 27, 394, 465], "area": 104556}, {"id": 5921370, "category_id": 32, "iscrowd": 0, "bbox": [131, 262, 77, 232], "area": 7368}, {"id": 10526880, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 409, 500], "area": 88913}], "file_name": "000000471087.png", "image_id": 471087}, {"segments_info": [{"id": 6059155, "category_id": 23, "iscrowd": 0, "bbox": [451, 305, 82, 67], "area": 4358}, {"id": 5534088, "category_id": 23, "iscrowd": 0, "bbox": [68, 288, 72, 37], "area": 1881}, {"id": 3952484, "category_id": 23, "iscrowd": 0, "bbox": [109, 246, 62, 41], "area": 1786}, {"id": 4212300, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 167], "area": 29475}, {"id": 4485238, "category_id": 193, "iscrowd": 0, "bbox": [0, 18, 640, 462], "area": 269529}], "file_name": "000000471450.png", "image_id": 471450}, {"segments_info": [{"id": 5204359, "category_id": 1, "iscrowd": 0, "bbox": [299, 372, 6, 8], "area": 24}, {"id": 10130578, "category_id": 1, "iscrowd": 0, "bbox": [553, 400, 8, 26], "area": 126}, {"id": 3095140, "category_id": 1, "iscrowd": 0, "bbox": [61, 366, 6, 13], "area": 56}, {"id": 6121329, "category_id": 25, "iscrowd": 0, "bbox": [161, 118, 284, 218], "area": 30978}, {"id": 5723710, "category_id": 151, "iscrowd": 0, "bbox": [468, 221, 172, 122], "area": 7887}, {"id": 3493190, "category_id": 184, "iscrowd": 0, "bbox": [140, 321, 347, 130], "area": 12583}, {"id": 4414565, "category_id": 185, "iscrowd": 0, "bbox": [0, 378, 611, 102], "area": 26543}, {"id": 12748629, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 277], "area": 122219}, {"id": 3163457, "category_id": 192, "iscrowd": 0, "bbox": [0, 104, 593, 360], "area": 88981}, {"id": 7634833, "category_id": 199, "iscrowd": 0, "bbox": [566, 251, 74, 229], "area": 11721}], "file_name": "000000471567.png", "image_id": 471567}, {"segments_info": [{"id": 2302504, "category_id": 1, "iscrowd": 0, "bbox": [276, 138, 361, 168], "area": 21205}, {"id": 3096375, "category_id": 42, "iscrowd": 0, "bbox": [262, 285, 277, 42], "area": 7625}, {"id": 10131606, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 244161}], "file_name": "000000471756.png", "image_id": 471756}, {"segments_info": [{"id": 4544434, "category_id": 1, "iscrowd": 0, "bbox": [209, 233, 7, 10], "area": 46}, {"id": 4804178, "category_id": 1, "iscrowd": 0, "bbox": [505, 387, 17, 63], "area": 838}, {"id": 8026225, "category_id": 1, "iscrowd": 0, "bbox": [256, 244, 9, 16], "area": 100}, {"id": 6912127, "category_id": 1, "iscrowd": 0, "bbox": [266, 241, 16, 21], "area": 175}, {"id": 8096669, "category_id": 1, "iscrowd": 0, "bbox": [448, 393, 21, 59], "area": 615}, {"id": 8556698, "category_id": 1, "iscrowd": 0, "bbox": [240, 246, 4, 9], "area": 29}, {"id": 3029312, "category_id": 1, "iscrowd": 0, "bbox": [375, 315, 21, 51], "area": 603}, {"id": 2964543, "category_id": 1, "iscrowd": 0, "bbox": [368, 273, 19, 53], "area": 482}, {"id": 3029318, "category_id": 1, "iscrowd": 0, "bbox": [243, 246, 8, 12], "area": 69}, {"id": 3753812, "category_id": 1, "iscrowd": 0, "bbox": [57, 321, 10, 28], "area": 181}, {"id": 2960983, "category_id": 1, "iscrowd": 0, "bbox": [121, 355, 12, 18], "area": 105}, {"id": 7500666, "category_id": 1, "iscrowd": 0, "bbox": [217, 236, 5, 10], "area": 33}, {"id": 4808291, "category_id": 18, "iscrowd": 0, "bbox": [484, 428, 28, 26], "area": 466}, {"id": 2508955, "category_id": 34, "iscrowd": 0, "bbox": [368, 290, 8, 12], "area": 52}, {"id": 6122901, "category_id": 38, "iscrowd": 0, "bbox": [324, 40, 94, 30], "area": 893}, {"id": 4217432, "category_id": 184, "iscrowd": 0, "bbox": [0, 134, 640, 101], "area": 42850}, {"id": 11974836, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 148], "area": 87997}, {"id": 2049345, "category_id": 193, "iscrowd": 0, "bbox": [0, 300, 640, 180], "area": 21001}, {"id": 6654624, "category_id": 194, "iscrowd": 0, "bbox": [0, 217, 640, 255], "area": 29218}, {"id": 8295323, "category_id": 197, "iscrowd": 0, "bbox": [32, 156, 608, 62], "area": 6975}], "file_name": "000000471789.png", "image_id": 471789}, {"segments_info": [{"id": 2967129, "category_id": 32, "iscrowd": 0, "bbox": [128, 229, 108, 76], "area": 4963}, {"id": 12559754, "category_id": 63, "iscrowd": 0, "bbox": [0, 2, 413, 492], "area": 81596}, {"id": 7379366, "category_id": 88, "iscrowd": 0, "bbox": [0, 38, 360, 448], "area": 106882}, {"id": 15527124, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 56, 128], "area": 3696}], "file_name": "000000471869.png", "image_id": 471869}, {"segments_info": [{"id": 7830406, "category_id": 1, "iscrowd": 0, "bbox": [13, 139, 128, 300], "area": 22641}, {"id": 2038551, "category_id": 1, "iscrowd": 0, "bbox": [415, 184, 83, 90], "area": 3808}, {"id": 5525066, "category_id": 1, "iscrowd": 0, "bbox": [445, 33, 194, 403], "area": 44494}, {"id": 1581612, "category_id": 62, "iscrowd": 0, "bbox": [144, 208, 86, 100], "area": 4487}, {"id": 1318205, "category_id": 62, "iscrowd": 0, "bbox": [622, 208, 18, 42], "area": 593}, {"id": 5135195, "category_id": 62, "iscrowd": 0, "bbox": [276, 387, 113, 55], "area": 3379}, {"id": 1318469, "category_id": 62, "iscrowd": 0, "bbox": [315, 209, 60, 54], "area": 2257}, {"id": 4476755, "category_id": 62, "iscrowd": 0, "bbox": [261, 256, 133, 134], "area": 1319}, {"id": 1579809, "category_id": 62, "iscrowd": 0, "bbox": [223, 261, 36, 13], "area": 251}, {"id": 2770791, "category_id": 62, "iscrowd": 0, "bbox": [542, 354, 45, 88], "area": 991}, {"id": 2243690, "category_id": 62, "iscrowd": 0, "bbox": [202, 361, 144, 76], "area": 5516}, {"id": 3160118, "category_id": 62, "iscrowd": 0, "bbox": [384, 209, 48, 53], "area": 1646}, {"id": 2239022, "category_id": 62, "iscrowd": 0, "bbox": [120, 208, 58, 98], "area": 2433}, {"id": 3031421, "category_id": 62, "iscrowd": 0, "bbox": [193, 267, 72, 38], "area": 1233}, {"id": 3955322, "category_id": 67, "iscrowd": 0, "bbox": [79, 277, 416, 165], "area": 19550}, {"id": 6841692, "category_id": 75, "iscrowd": 0, "bbox": [250, 318, 45, 13], "area": 379}, {"id": 13354432, "category_id": 75, "iscrowd": 0, "bbox": [473, 200, 46, 23], "area": 481}, {"id": 11184553, "category_id": 75, "iscrowd": 0, "bbox": [30, 307, 41, 14], "area": 388}, {"id": 3555144, "category_id": 84, "iscrowd": 0, "bbox": [205, 39, 85, 38], "area": 2659}, {"id": 5463402, "category_id": 84, "iscrowd": 0, "bbox": [283, 136, 4, 28], "area": 100}, {"id": 7961724, "category_id": 84, "iscrowd": 0, "bbox": [587, 73, 4, 36], "area": 117}, {"id": 6185814, "category_id": 84, "iscrowd": 0, "bbox": [216, 137, 2, 29], "area": 57}, {"id": 3098724, "category_id": 84, "iscrowd": 0, "bbox": [190, 48, 6, 31], "area": 106}, {"id": 1059149, "category_id": 84, "iscrowd": 0, "bbox": [246, 181, 4, 22], "area": 61}, {"id": 4145735, "category_id": 84, "iscrowd": 0, "bbox": [202, 46, 5, 31], "area": 96}, {"id": 3564151, "category_id": 84, "iscrowd": 0, "bbox": [598, 21, 5, 34], "area": 169}, {"id": 2829100, "category_id": 84, "iscrowd": 0, "bbox": [273, 178, 18, 16], "area": 257}, {"id": 2172201, "category_id": 84, "iscrowd": 0, "bbox": [253, 137, 6, 29], "area": 148}, {"id": 4147799, "category_id": 84, "iscrowd": 0, "bbox": [192, 88, 99, 35], "area": 3147}, {"id": 6843206, "category_id": 84, "iscrowd": 0, "bbox": [218, 137, 2, 28], "area": 56}, {"id": 2566697, "category_id": 84, "iscrowd": 0, "bbox": [246, 134, 10, 31], "area": 138}, {"id": 2504528, "category_id": 156, "iscrowd": 0, "bbox": [177, 0, 463, 222], "area": 29341}, {"id": 1516602, "category_id": 171, "iscrowd": 0, "bbox": [38, 0, 527, 154], "area": 17171}, {"id": 3686726, "category_id": 181, "iscrowd": 0, "bbox": [66, 16, 423, 254], "area": 45199}, {"id": 461590, "category_id": 189, "iscrowd": 0, "bbox": [367, 360, 23, 31], "area": 165}, {"id": 988447, "category_id": 190, "iscrowd": 0, "bbox": [0, 305, 34, 46], "area": 1092}, {"id": 2239279, "category_id": 199, "iscrowd": 0, "bbox": [0, 245, 18, 63], "area": 841}, {"id": 1974818, "category_id": 200, "iscrowd": 0, "bbox": [0, 339, 597, 103], "area": 14424}], "file_name": "000000471893.png", "image_id": 471893}, {"segments_info": [{"id": 3093820, "category_id": 62, "iscrowd": 0, "bbox": [238, 241, 19, 19], "area": 141}, {"id": 4016475, "category_id": 130, "iscrowd": 0, "bbox": [33, 221, 558, 42], "area": 1549}, {"id": 1513241, "category_id": 161, "iscrowd": 0, "bbox": [287, 259, 66, 17], "area": 547}, {"id": 6457264, "category_id": 177, "iscrowd": 0, "bbox": [530, 207, 29, 31], "area": 792}, {"id": 15921125, "category_id": 181, "iscrowd": 0, "bbox": [29, 42, 575, 167], "area": 10163}, {"id": 4809593, "category_id": 186, "iscrowd": 0, "bbox": [59, 0, 581, 107], "area": 27311}, {"id": 7893610, "category_id": 190, "iscrowd": 0, "bbox": [33, 237, 573, 187], "area": 53980}, {"id": 6318958, "category_id": 197, "iscrowd": 0, "bbox": [92, 14, 442, 110], "area": 9579}, {"id": 7173752, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 257], "area": 40586}], "file_name": "000000471991.png", "image_id": 471991}, {"segments_info": [{"id": 3094581, "category_id": 15, "iscrowd": 0, "bbox": [497, 369, 143, 106], "area": 10541}, {"id": 5078883, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 268778}, {"id": 5531245, "category_id": 194, "iscrowd": 0, "bbox": [59, 295, 581, 185], "area": 25762}], "file_name": "000000472030.png", "image_id": 472030}, {"segments_info": [{"id": 7899279, "category_id": 51, "iscrowd": 0, "bbox": [111, 267, 11, 3], "area": 30}, {"id": 1927536, "category_id": 55, "iscrowd": 0, "bbox": [302, 328, 14, 12], "area": 140}, {"id": 2389377, "category_id": 55, "iscrowd": 0, "bbox": [296, 307, 11, 12], "area": 94}, {"id": 2257019, "category_id": 55, "iscrowd": 0, "bbox": [314, 322, 14, 16], "area": 159}, {"id": 3382196, "category_id": 55, "iscrowd": 0, "bbox": [283, 318, 15, 9], "area": 79}, {"id": 2651006, "category_id": 55, "iscrowd": 0, "bbox": [307, 311, 15, 15], "area": 152}, {"id": 1530719, "category_id": 55, "iscrowd": 0, "bbox": [292, 325, 12, 13], "area": 106}, {"id": 6778742, "category_id": 62, "iscrowd": 0, "bbox": [183, 252, 49, 77], "area": 1172}, {"id": 6317673, "category_id": 62, "iscrowd": 0, "bbox": [70, 257, 30, 20], "area": 272}, {"id": 6844017, "category_id": 62, "iscrowd": 0, "bbox": [83, 251, 14, 24], "area": 181}, {"id": 7827567, "category_id": 62, "iscrowd": 0, "bbox": [191, 242, 22, 28], "area": 215}, {"id": 5923943, "category_id": 62, "iscrowd": 0, "bbox": [60, 265, 64, 86], "area": 1865}, {"id": 5461596, "category_id": 62, "iscrowd": 0, "bbox": [209, 245, 15, 20], "area": 158}, {"id": 6188665, "category_id": 63, "iscrowd": 0, "bbox": [287, 229, 187, 83], "area": 10473}, {"id": 3164222, "category_id": 64, "iscrowd": 0, "bbox": [369, 179, 15, 17], "area": 157}, {"id": 4674400, "category_id": 67, "iscrowd": 0, "bbox": [94, 235, 106, 105], "area": 6509}, {"id": 1646371, "category_id": 79, "iscrowd": 0, "bbox": [355, 321, 229, 99], "area": 11484}, {"id": 3161155, "category_id": 81, "iscrowd": 0, "bbox": [522, 273, 118, 60], "area": 3912}, {"id": 7375769, "category_id": 86, "iscrowd": 0, "bbox": [554, 194, 64, 68], "area": 2179}, {"id": 11588064, "category_id": 107, "iscrowd": 0, "bbox": [195, 264, 366, 161], "area": 471}, {"id": 6312263, "category_id": 112, "iscrowd": 0, "bbox": [75, 153, 55, 124], "area": 3680}, {"id": 2837343, "category_id": 122, "iscrowd": 0, "bbox": [221, 286, 100, 101], "area": 5635}, {"id": 11978446, "category_id": 130, "iscrowd": 0, "bbox": [386, 0, 192, 154], "area": 1167}, {"id": 15306578, "category_id": 155, "iscrowd": 0, "bbox": [0, 204, 228, 58], "area": 5367}, {"id": 2895408, "category_id": 180, "iscrowd": 0, "bbox": [337, 140, 133, 108], "area": 8705}, {"id": 6117976, "category_id": 181, "iscrowd": 0, "bbox": [160, 96, 99, 32], "area": 1045}, {"id": 5914416, "category_id": 184, "iscrowd": 0, "bbox": [0, 169, 340, 120], "area": 11265}, {"id": 6189952, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 145], "area": 72672}, {"id": 12685693, "category_id": 187, "iscrowd": 0, "bbox": [0, 157, 267, 57], "area": 4179}, {"id": 6518916, "category_id": 188, "iscrowd": 0, "bbox": [496, 126, 144, 151], "area": 16241}, {"id": 10139073, "category_id": 189, "iscrowd": 0, "bbox": [182, 240, 458, 185], "area": 35555}, {"id": 8818830, "category_id": 190, "iscrowd": 0, "bbox": [0, 260, 280, 165], "area": 24527}, {"id": 5464426, "category_id": 199, "iscrowd": 0, "bbox": [0, 81, 640, 214], "area": 36441}], "file_name": "000000472046.png", "image_id": 472046}, {"segments_info": [{"id": 4825773, "category_id": 1, "iscrowd": 0, "bbox": [308, 182, 46, 55], "area": 1576}, {"id": 4281193, "category_id": 1, "iscrowd": 0, "bbox": [169, 162, 70, 77], "area": 3243}, {"id": 5396113, "category_id": 9, "iscrowd": 0, "bbox": [78, 210, 535, 58], "area": 18372}, {"id": 6780793, "category_id": 148, "iscrowd": 0, "bbox": [0, 76, 640, 311], "area": 159695}, {"id": 1912356, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 116], "area": 63922}], "file_name": "000000472298.png", "image_id": 472298}, {"segments_info": [{"id": 8417914, "category_id": 4, "iscrowd": 0, "bbox": [59, 52, 502, 390], "area": 55154}, {"id": 7040396, "category_id": 18, "iscrowd": 0, "bbox": [126, 196, 372, 357], "area": 75094}, {"id": 13088925, "category_id": 47, "iscrowd": 0, "bbox": [289, 70, 27, 27], "area": 587}, {"id": 9928615, "category_id": 47, "iscrowd": 0, "bbox": [313, 77, 27, 23], "area": 534}, {"id": 4418220, "category_id": 118, "iscrowd": 0, "bbox": [57, 329, 513, 243], "area": 43991}, {"id": 11450312, "category_id": 188, "iscrowd": 0, "bbox": [128, 55, 256, 149], "area": 15896}, {"id": 7305344, "category_id": 199, "iscrowd": 0, "bbox": [517, 304, 38, 36], "area": 584}], "file_name": "000000472375.png", "image_id": 472375}, {"segments_info": [{"id": 3158064, "category_id": 1, "iscrowd": 0, "bbox": [126, 240, 26, 66], "area": 1070}, {"id": 2236962, "category_id": 1, "iscrowd": 0, "bbox": [247, 228, 178, 302], "area": 17459}, {"id": 3158066, "category_id": 1, "iscrowd": 0, "bbox": [154, 232, 25, 71], "area": 1081}, {"id": 3092271, "category_id": 2, "iscrowd": 0, "bbox": [192, 348, 233, 255], "area": 18873}, {"id": 11382189, "category_id": 155, "iscrowd": 0, "bbox": [0, 65, 425, 248], "area": 60695}, {"id": 13092807, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 425, 71], "area": 29354}, {"id": 4013373, "category_id": 198, "iscrowd": 0, "bbox": [0, 186, 425, 454], "area": 142787}], "file_name": "000000472623.png", "image_id": 472623}, {"segments_info": [{"id": 8478018, "category_id": 1, "iscrowd": 0, "bbox": [244, 208, 11, 12], "area": 73}, {"id": 9135447, "category_id": 1, "iscrowd": 0, "bbox": [242, 245, 10, 11], "area": 77}, {"id": 7623225, "category_id": 1, "iscrowd": 0, "bbox": [244, 191, 12, 11], "area": 72}, {"id": 7688509, "category_id": 1, "iscrowd": 0, "bbox": [224, 245, 10, 11], "area": 76}, {"id": 5403791, "category_id": 44, "iscrowd": 0, "bbox": [126, 286, 29, 84], "area": 1905}, {"id": 592137, "category_id": 62, "iscrowd": 0, "bbox": [595, 367, 44, 107], "area": 3846}, {"id": 10453339, "category_id": 72, "iscrowd": 0, "bbox": [306, 153, 173, 137], "area": 21061}, {"id": 12230263, "category_id": 72, "iscrowd": 0, "bbox": [141, 147, 178, 141], "area": 22619}, {"id": 4478045, "category_id": 74, "iscrowd": 0, "bbox": [495, 375, 40, 27], "area": 708}, {"id": 723723, "category_id": 76, "iscrowd": 0, "bbox": [154, 333, 155, 25], "area": 3574}, {"id": 3752260, "category_id": 77, "iscrowd": 0, "bbox": [225, 372, 36, 17], "area": 304}, {"id": 4810601, "category_id": 84, "iscrowd": 0, "bbox": [238, 356, 98, 39], "area": 2648}, {"id": 10070445, "category_id": 84, "iscrowd": 0, "bbox": [110, 359, 240, 54], "area": 6240}, {"id": 6652811, "category_id": 100, "iscrowd": 0, "bbox": [547, 0, 93, 292], "area": 5650}, {"id": 3951952, "category_id": 156, "iscrowd": 0, "bbox": [72, 0, 568, 177], "area": 28872}, {"id": 1975588, "category_id": 188, "iscrowd": 0, "bbox": [86, 370, 510, 110], "area": 32088}, {"id": 3556164, "category_id": 189, "iscrowd": 0, "bbox": [67, 176, 528, 304], "area": 42744}, {"id": 9085865, "category_id": 195, "iscrowd": 0, "bbox": [127, 0, 513, 403], "area": 63158}, {"id": 5730165, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 57490}], "file_name": "000000472678.png", "image_id": 472678}, {"segments_info": [{"id": 5264727, "category_id": 16, "iscrowd": 0, "bbox": [224, 58, 18, 8], "area": 61}, {"id": 5592400, "category_id": 16, "iscrowd": 0, "bbox": [215, 71, 46, 27], "area": 385}, {"id": 6181444, "category_id": 16, "iscrowd": 0, "bbox": [213, 153, 69, 39], "area": 1200}, {"id": 4736060, "category_id": 16, "iscrowd": 0, "bbox": [219, 36, 37, 15], "area": 234}, {"id": 5590074, "category_id": 16, "iscrowd": 0, "bbox": [228, 100, 19, 7], "area": 59}, {"id": 7429699, "category_id": 178, "iscrowd": 0, "bbox": [0, 0, 640, 359], "area": 189440}, {"id": 1384751, "category_id": 198, "iscrowd": 0, "bbox": [0, 218, 640, 209], "area": 79461}], "file_name": "000000473015.png", "image_id": 473015}, {"segments_info": [{"id": 5722700, "category_id": 1, "iscrowd": 0, "bbox": [87, 52, 135, 336], "area": 22543}, {"id": 8950689, "category_id": 2, "iscrowd": 0, "bbox": [35, 0, 75, 48], "area": 2787}, {"id": 6056826, "category_id": 41, "iscrowd": 0, "bbox": [69, 307, 90, 80], "area": 1270}, {"id": 7438484, "category_id": 144, "iscrowd": 0, "bbox": [0, 253, 346, 247], "area": 57033}, {"id": 4606030, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 346, 500], "area": 83970}], "file_name": "000000473118.png", "image_id": 473118}, {"segments_info": [{"id": 8484984, "category_id": 1, "iscrowd": 0, "bbox": [303, 128, 167, 94], "area": 6099}, {"id": 13092287, "category_id": 35, "iscrowd": 0, "bbox": [379, 214, 105, 9], "area": 601}, {"id": 13419971, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 500, 332], "area": 159110}], "file_name": "000000473121.png", "image_id": 473121}, {"segments_info": [{"id": 11189467, "category_id": 1, "iscrowd": 0, "bbox": [327, 90, 173, 338], "area": 35192}, {"id": 1643541, "category_id": 1, "iscrowd": 0, "bbox": [501, 134, 139, 293], "area": 25655}, {"id": 2768248, "category_id": 1, "iscrowd": 0, "bbox": [0, 182, 175, 239], "area": 29719}, {"id": 8427466, "category_id": 1, "iscrowd": 0, "bbox": [140, 117, 198, 305], "area": 28525}, {"id": 3357780, "category_id": 1, "iscrowd": 0, "bbox": [266, 117, 144, 305], "area": 17130}, {"id": 3948632, "category_id": 32, "iscrowd": 0, "bbox": [348, 217, 22, 43], "area": 579}, {"id": 4869195, "category_id": 62, "iscrowd": 0, "bbox": [497, 236, 117, 182], "area": 3277}, {"id": 4079936, "category_id": 62, "iscrowd": 0, "bbox": [1, 220, 29, 78], "area": 1400}, {"id": 4210494, "category_id": 62, "iscrowd": 0, "bbox": [472, 163, 116, 78], "area": 7099}, {"id": 4080967, "category_id": 62, "iscrowd": 0, "bbox": [122, 225, 122, 73], "area": 1875}, {"id": 3684661, "category_id": 62, "iscrowd": 0, "bbox": [0, 149, 91, 71], "area": 4106}, {"id": 4738126, "category_id": 62, "iscrowd": 0, "bbox": [250, 227, 48, 193], "area": 3862}, {"id": 4013628, "category_id": 62, "iscrowd": 0, "bbox": [98, 154, 241, 119], "area": 10339}, {"id": 3420465, "category_id": 62, "iscrowd": 0, "bbox": [587, 167, 24, 70], "area": 979}, {"id": 3225669, "category_id": 64, "iscrowd": 0, "bbox": [155, 5, 64, 102], "area": 4980}, {"id": 2962990, "category_id": 64, "iscrowd": 0, "bbox": [83, 0, 68, 37], "area": 1419}, {"id": 3095369, "category_id": 64, "iscrowd": 0, "bbox": [235, 10, 62, 103], "area": 4534}, {"id": 3358543, "category_id": 64, "iscrowd": 0, "bbox": [381, 12, 83, 88], "area": 5126}, {"id": 2763044, "category_id": 64, "iscrowd": 0, "bbox": [572, 1, 66, 45], "area": 1893}, {"id": 3817553, "category_id": 64, "iscrowd": 0, "bbox": [304, 4, 65, 108], "area": 5057}, {"id": 3290948, "category_id": 64, "iscrowd": 0, "bbox": [471, 10, 71, 110], "area": 4689}, {"id": 3619654, "category_id": 84, "iscrowd": 0, "bbox": [279, 256, 101, 53], "area": 3222}, {"id": 6913163, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 207], "area": 64433}], "file_name": "000000473219.png", "image_id": 473219}, {"segments_info": [{"id": 1912635, "category_id": 1, "iscrowd": 0, "bbox": [49, 0, 570, 420], "area": 123671}, {"id": 3240371, "category_id": 59, "iscrowd": 0, "bbox": [128, 265, 226, 120], "area": 14207}, {"id": 2045509, "category_id": 62, "iscrowd": 0, "bbox": [418, 180, 162, 167], "area": 11502}, {"id": 2570049, "category_id": 112, "iscrowd": 0, "bbox": [81, 0, 184, 206], "area": 23201}, {"id": 4348007, "category_id": 189, "iscrowd": 0, "bbox": [0, 105, 139, 206], "area": 14796}, {"id": 9219517, "category_id": 190, "iscrowd": 0, "bbox": [0, 190, 217, 236], "area": 24768}, {"id": 3098973, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 205], "area": 19755}], "file_name": "000000473237.png", "image_id": 473237}, {"segments_info": [{"id": 3884405, "category_id": 1, "iscrowd": 0, "bbox": [85, 93, 245, 527], "area": 62926}, {"id": 3290165, "category_id": 44, "iscrowd": 0, "bbox": [355, 227, 34, 110], "area": 1960}, {"id": 4799551, "category_id": 44, "iscrowd": 0, "bbox": [376, 223, 41, 142], "area": 3404}, {"id": 992152, "category_id": 47, "iscrowd": 0, "bbox": [316, 307, 45, 104], "area": 3076}, {"id": 6132066, "category_id": 47, "iscrowd": 0, "bbox": [27, 271, 38, 49], "area": 1334}, {"id": 5462097, "category_id": 49, "iscrowd": 0, "bbox": [37, 250, 16, 35], "area": 355}, {"id": 4811381, "category_id": 53, "iscrowd": 0, "bbox": [322, 448, 138, 98], "area": 7459}, {"id": 10527133, "category_id": 81, "iscrowd": 0, "bbox": [0, 236, 59, 36], "area": 1226}, {"id": 9804437, "category_id": 81, "iscrowd": 0, "bbox": [0, 246, 153, 93], "area": 6808}, {"id": 3419694, "category_id": 107, "iscrowd": 0, "bbox": [0, 278, 480, 362], "area": 41936}, {"id": 4281182, "category_id": 122, "iscrowd": 0, "bbox": [339, 447, 39, 102], "area": 87}, {"id": 5661290, "category_id": 176, "iscrowd": 0, "bbox": [0, 68, 480, 261], "area": 48444}, {"id": 15790060, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 180, 152], "area": 23103}, {"id": 3491155, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 55678}, {"id": 4406081, "category_id": 196, "iscrowd": 0, "bbox": [263, 443, 204, 121], "area": 6149}, {"id": 12961220, "category_id": 199, "iscrowd": 0, "bbox": [0, 28, 19, 45], "area": 602}], "file_name": "000000473406.png", "image_id": 473406}, {"segments_info": [{"id": 4999515, "category_id": 51, "iscrowd": 0, "bbox": [422, 223, 54, 25], "area": 916}, {"id": 1972507, "category_id": 62, "iscrowd": 0, "bbox": [3, 168, 78, 123], "area": 3455}, {"id": 3289677, "category_id": 62, "iscrowd": 0, "bbox": [134, 169, 128, 144], "area": 11316}, {"id": 2038060, "category_id": 63, "iscrowd": 0, "bbox": [275, 169, 225, 124], "area": 18265}, {"id": 10394262, "category_id": 130, "iscrowd": 0, "bbox": [17, 90, 50, 80], "area": 2154}, {"id": 5192639, "category_id": 168, "iscrowd": 0, "bbox": [152, 166, 38, 4], "area": 109}, {"id": 8095391, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 56, 170], "area": 5727}, {"id": 7302770, "category_id": 186, "iscrowd": 0, "bbox": [49, 0, 451, 18], "area": 4211}, {"id": 2038045, "category_id": 189, "iscrowd": 0, "bbox": [0, 174, 500, 159], "area": 13837}, {"id": 10458786, "category_id": 195, "iscrowd": 0, "bbox": [0, 162, 65, 22], "area": 716}, {"id": 7961724, "category_id": 199, "iscrowd": 0, "bbox": [29, 2, 471, 255], "area": 77683}, {"id": 3880762, "category_id": 200, "iscrowd": 0, "bbox": [0, 247, 500, 86], "area": 24377}], "file_name": "000000473821.png", "image_id": 473821}, {"segments_info": [{"id": 3356783, "category_id": 1, "iscrowd": 0, "bbox": [52, 13, 274, 388], "area": 62895}, {"id": 2304303, "category_id": 44, "iscrowd": 0, "bbox": [499, 142, 50, 147], "area": 4789}, {"id": 1974573, "category_id": 44, "iscrowd": 0, "bbox": [533, 149, 27, 81], "area": 972}, {"id": 1910055, "category_id": 44, "iscrowd": 0, "bbox": [332, 270, 13, 28], "area": 232}, {"id": 1252142, "category_id": 46, "iscrowd": 0, "bbox": [3, 311, 439, 116], "area": 7118}, {"id": 6908039, "category_id": 47, "iscrowd": 0, "bbox": [57, 333, 13, 26], "area": 232}, {"id": 7435117, "category_id": 47, "iscrowd": 0, "bbox": [578, 163, 39, 115], "area": 3065}, {"id": 1578840, "category_id": 50, "iscrowd": 0, "bbox": [294, 233, 61, 99], "area": 729}, {"id": 5791344, "category_id": 51, "iscrowd": 0, "bbox": [288, 296, 74, 52], "area": 2176}, {"id": 3895742, "category_id": 59, "iscrowd": 0, "bbox": [218, 358, 51, 16], "area": 627}, {"id": 6647416, "category_id": 86, "iscrowd": 0, "bbox": [547, 215, 49, 68], "area": 2560}, {"id": 1582133, "category_id": 107, "iscrowd": 0, "bbox": [181, 334, 294, 93], "area": 2424}, {"id": 396302, "category_id": 119, "iscrowd": 0, "bbox": [323, 233, 106, 79], "area": 5750}, {"id": 2044242, "category_id": 168, "iscrowd": 0, "bbox": [220, 336, 181, 91], "area": 4354}, {"id": 5466238, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 640, 301], "area": 55874}, {"id": 1056335, "category_id": 188, "iscrowd": 0, "bbox": [147, 0, 333, 243], "area": 55321}, {"id": 1912133, "category_id": 189, "iscrowd": 0, "bbox": [420, 366, 47, 61], "area": 1337}, {"id": 1450808, "category_id": 195, "iscrowd": 0, "bbox": [469, 204, 93, 223], "area": 2398}, {"id": 2439517, "category_id": 196, "iscrowd": 0, "bbox": [11, 351, 587, 76], "area": 10219}, {"id": 792633, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 27121}], "file_name": "000000473869.png", "image_id": 473869}, {"segments_info": [{"id": 9276820, "category_id": 24, "iscrowd": 0, "bbox": [357, 160, 102, 72], "area": 4329}, {"id": 7764097, "category_id": 24, "iscrowd": 0, "bbox": [67, 158, 304, 247], "area": 31320}, {"id": 9014679, "category_id": 24, "iscrowd": 0, "bbox": [549, 163, 78, 120], "area": 5728}, {"id": 8226193, "category_id": 24, "iscrowd": 0, "bbox": [1, 195, 71, 101], "area": 3947}, {"id": 8884123, "category_id": 24, "iscrowd": 0, "bbox": [305, 224, 304, 180], "area": 32960}, {"id": 7305348, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 224], "area": 88746}, {"id": 15394278, "category_id": 187, "iscrowd": 0, "bbox": [485, 0, 61, 21], "area": 959}, {"id": 10139339, "category_id": 193, "iscrowd": 0, "bbox": [0, 114, 640, 313], "area": 97108}, {"id": 8688555, "category_id": 198, "iscrowd": 0, "bbox": [14, 96, 91, 41], "area": 2181}], "file_name": "000000473974.png", "image_id": 473974}, {"segments_info": [{"id": 2500662, "category_id": 1, "iscrowd": 0, "bbox": [184, 259, 100, 116], "area": 6894}, {"id": 3619133, "category_id": 1, "iscrowd": 0, "bbox": [330, 124, 86, 244], "area": 3119}, {"id": 7498613, "category_id": 1, "iscrowd": 0, "bbox": [253, 17, 247, 352], "area": 39547}, {"id": 6315616, "category_id": 1, "iscrowd": 0, "bbox": [18, 82, 208, 288], "area": 36042}, {"id": 592655, "category_id": 44, "iscrowd": 0, "bbox": [188, 310, 13, 46], "area": 186}, {"id": 3492954, "category_id": 63, "iscrowd": 0, "bbox": [21, 272, 332, 103], "area": 4433}, {"id": 12170936, "category_id": 75, "iscrowd": 0, "bbox": [83, 202, 26, 17], "area": 218}, {"id": 15133162, "category_id": 75, "iscrowd": 0, "bbox": [368, 185, 13, 13], "area": 84}, {"id": 11053229, "category_id": 75, "iscrowd": 0, "bbox": [167, 172, 16, 42], "area": 144}, {"id": 14869733, "category_id": 75, "iscrowd": 0, "bbox": [261, 265, 29, 78], "area": 730}, {"id": 4670531, "category_id": 84, "iscrowd": 0, "bbox": [311, 137, 8, 19], "area": 78}, {"id": 6184803, "category_id": 84, "iscrowd": 0, "bbox": [340, 144, 8, 17], "area": 75}, {"id": 8946562, "category_id": 84, "iscrowd": 0, "bbox": [313, 255, 8, 18], "area": 69}, {"id": 3882825, "category_id": 84, "iscrowd": 0, "bbox": [317, 161, 25, 23], "area": 406}, {"id": 7631222, "category_id": 84, "iscrowd": 0, "bbox": [303, 253, 10, 19], "area": 102}, {"id": 3816771, "category_id": 84, "iscrowd": 0, "bbox": [313, 185, 26, 20], "area": 379}, {"id": 4016208, "category_id": 84, "iscrowd": 0, "bbox": [294, 155, 10, 21], "area": 119}, {"id": 3619147, "category_id": 84, "iscrowd": 0, "bbox": [333, 143, 6, 16], "area": 37}, {"id": 3883080, "category_id": 84, "iscrowd": 0, "bbox": [279, 177, 33, 49], "area": 1049}, {"id": 4476760, "category_id": 84, "iscrowd": 0, "bbox": [326, 141, 7, 17], "area": 60}, {"id": 5789789, "category_id": 84, "iscrowd": 0, "bbox": [296, 135, 6, 16], "area": 32}, {"id": 4540239, "category_id": 84, "iscrowd": 0, "bbox": [307, 230, 9, 19], "area": 103}, {"id": 4738384, "category_id": 84, "iscrowd": 0, "bbox": [281, 225, 9, 19], "area": 87}, {"id": 4606548, "category_id": 84, "iscrowd": 1, "bbox": [265, 132, 109, 151], "area": 5075}, {"id": 6846085, "category_id": 85, "iscrowd": 0, "bbox": [409, 199, 16, 13], "area": 155}, {"id": 4343364, "category_id": 85, "iscrowd": 0, "bbox": [317, 212, 7, 7], "area": 41}, {"id": 4278348, "category_id": 130, "iscrowd": 0, "bbox": [0, 82, 76, 217], "area": 2164}, {"id": 6777450, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 500, 158], "area": 39406}, {"id": 2832717, "category_id": 188, "iscrowd": 0, "bbox": [0, 127, 363, 248], "area": 8399}, {"id": 7962755, "category_id": 199, "iscrowd": 0, "bbox": [0, 55, 421, 239], "area": 28451}], "file_name": "000000474021.png", "image_id": 474021}, {"segments_info": [{"id": 3888508, "category_id": 1, "iscrowd": 0, "bbox": [127, 225, 191, 172], "area": 15003}, {"id": 9004111, "category_id": 1, "iscrowd": 0, "bbox": [537, 170, 22, 61], "area": 718}, {"id": 5852241, "category_id": 1, "iscrowd": 0, "bbox": [0, 200, 12, 52], "area": 364}, {"id": 6642275, "category_id": 1, "iscrowd": 0, "bbox": [591, 142, 45, 111], "area": 2552}, {"id": 5058634, "category_id": 1, "iscrowd": 0, "bbox": [106, 153, 45, 114], "area": 2422}, {"id": 7494468, "category_id": 1, "iscrowd": 0, "bbox": [221, 198, 13, 45], "area": 418}, {"id": 7297383, "category_id": 1, "iscrowd": 0, "bbox": [236, 157, 39, 105], "area": 2194}, {"id": 8148587, "category_id": 1, "iscrowd": 0, "bbox": [501, 146, 42, 73], "area": 1210}, {"id": 6313896, "category_id": 1, "iscrowd": 0, "bbox": [579, 215, 8, 13], "area": 81}, {"id": 6638141, "category_id": 1, "iscrowd": 0, "bbox": [407, 76, 189, 286], "area": 20860}, {"id": 6768464, "category_id": 1, "iscrowd": 0, "bbox": [21, 176, 37, 91], "area": 1774}, {"id": 7424298, "category_id": 1, "iscrowd": 0, "bbox": [76, 174, 37, 99], "area": 2175}, {"id": 5127509, "category_id": 1, "iscrowd": 0, "bbox": [120, 176, 59, 55], "area": 1361}, {"id": 7303534, "category_id": 1, "iscrowd": 1, "bbox": [1, 213, 588, 35], "area": 225}, {"id": 10069692, "category_id": 37, "iscrowd": 0, "bbox": [135, 289, 52, 51], "area": 1729}, {"id": 5148032, "category_id": 145, "iscrowd": 0, "bbox": [0, 218, 640, 209], "area": 95136}, {"id": 6780278, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 244], "area": 115909}, {"id": 15460070, "category_id": 187, "iscrowd": 0, "bbox": [15, 0, 464, 76], "area": 7588}, {"id": 5671809, "category_id": 193, "iscrowd": 0, "bbox": [115, 222, 339, 37], "area": 253}], "file_name": "000000474028.png", "image_id": 474028}, {"segments_info": [{"id": 10592951, "category_id": 1, "iscrowd": 0, "bbox": [171, 61, 221, 336], "area": 43315}, {"id": 2375236, "category_id": 88, "iscrowd": 0, "bbox": [322, 26, 318, 372], "area": 95784}, {"id": 15330023, "category_id": 88, "iscrowd": 0, "bbox": [1, 2, 236, 399], "area": 69037}, {"id": 4403016, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 640, 224], "area": 43900}], "file_name": "000000474039.png", "image_id": 474039}, {"segments_info": [{"id": 9335665, "category_id": 1, "iscrowd": 0, "bbox": [238, 292, 154, 162], "area": 10336}, {"id": 9602152, "category_id": 1, "iscrowd": 0, "bbox": [592, 0, 35, 87], "area": 2340}, {"id": 3814195, "category_id": 1, "iscrowd": 0, "bbox": [127, 274, 152, 183], "area": 11383}, {"id": 4143159, "category_id": 1, "iscrowd": 0, "bbox": [317, 216, 156, 174], "area": 7374}, {"id": 10595761, "category_id": 37, "iscrowd": 0, "bbox": [585, 228, 8, 10], "area": 67}, {"id": 3418658, "category_id": 39, "iscrowd": 0, "bbox": [432, 272, 73, 10], "area": 319}, {"id": 2891801, "category_id": 40, "iscrowd": 0, "bbox": [623, 0, 17, 10], "area": 120}, {"id": 3946554, "category_id": 40, "iscrowd": 0, "bbox": [366, 322, 39, 23], "area": 569}, {"id": 9741754, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 129894}, {"id": 4222282, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 342], "area": 144168}], "file_name": "000000474078.png", "image_id": 474078}, {"segments_info": [{"id": 4144959, "category_id": 1, "iscrowd": 0, "bbox": [56, 25, 222, 469], "area": 65615}, {"id": 5723991, "category_id": 70, "iscrowd": 0, "bbox": [137, 362, 31, 76], "area": 1616}, {"id": 5921370, "category_id": 190, "iscrowd": 0, "bbox": [0, 365, 333, 135], "area": 21227}, {"id": 8289918, "category_id": 195, "iscrowd": 0, "bbox": [285, 167, 48, 31], "area": 959}, {"id": 11382189, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 333, 486], "area": 68165}], "file_name": "000000474095.png", "image_id": 474095}, {"segments_info": [{"id": 3289391, "category_id": 3, "iscrowd": 0, "bbox": [28, 379, 94, 49], "area": 2409}, {"id": 4606025, "category_id": 8, "iscrowd": 0, "bbox": [3, 288, 627, 343], "area": 151741}, {"id": 4408388, "category_id": 18, "iscrowd": 0, "bbox": [250, 175, 93, 190], "area": 13522}, {"id": 4475969, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 633, 616], "area": 66316}, {"id": 12494730, "category_id": 187, "iscrowd": 0, "bbox": [101, 0, 532, 343], "area": 141025}, {"id": 4737354, "category_id": 191, "iscrowd": 0, "bbox": [578, 440, 55, 84], "area": 1945}, {"id": 2632750, "category_id": 197, "iscrowd": 0, "bbox": [437, 255, 196, 169], "area": 21182}], "file_name": "000000474164.png", "image_id": 474164}, {"segments_info": [{"id": 7040882, "category_id": 1, "iscrowd": 0, "bbox": [85, 3, 261, 171], "area": 22354}, {"id": 10327451, "category_id": 1, "iscrowd": 0, "bbox": [396, 13, 21, 60], "area": 935}, {"id": 8552315, "category_id": 1, "iscrowd": 0, "bbox": [334, 1, 25, 43], "area": 549}, {"id": 4275512, "category_id": 31, "iscrowd": 0, "bbox": [352, 0, 20, 30], "area": 332}, {"id": 6315623, "category_id": 44, "iscrowd": 0, "bbox": [111, 14, 78, 230], "area": 13419}, {"id": 7439258, "category_id": 59, "iscrowd": 0, "bbox": [220, 141, 155, 51], "area": 4557}, {"id": 3626107, "category_id": 59, "iscrowd": 0, "bbox": [1, 260, 394, 213], "area": 50749}, {"id": 3954044, "category_id": 67, "iscrowd": 0, "bbox": [190, 172, 237, 86], "area": 7379}, {"id": 2049395, "category_id": 67, "iscrowd": 0, "bbox": [3, 167, 117, 121], "area": 10428}, {"id": 1779000, "category_id": 171, "iscrowd": 0, "bbox": [0, 49, 104, 230], "area": 8828}, {"id": 3753287, "category_id": 177, "iscrowd": 0, "bbox": [14, 0, 56, 167], "area": 3585}, {"id": 6843235, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 132, 69], "area": 5267}, {"id": 1057608, "category_id": 189, "iscrowd": 0, "bbox": [0, 166, 404, 448], "area": 17945}, {"id": 7169891, "category_id": 191, "iscrowd": 0, "bbox": [0, 46, 427, 594], "area": 14926}, {"id": 11049874, "category_id": 195, "iscrowd": 0, "bbox": [0, 53, 427, 587], "area": 99843}, {"id": 5992838, "category_id": 196, "iscrowd": 0, "bbox": [110, 237, 45, 40], "area": 997}], "file_name": "000000474167.png", "image_id": 474167}, {"segments_info": [{"id": 2372667, "category_id": 22, "iscrowd": 0, "bbox": [293, 205, 91, 77], "area": 4968}, {"id": 2372151, "category_id": 22, "iscrowd": 0, "bbox": [250, 186, 116, 95], "area": 3823}, {"id": 1914944, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 363], "area": 161331}, {"id": 1200209, "category_id": 193, "iscrowd": 0, "bbox": [0, 233, 640, 247], "area": 136881}], "file_name": "000000474170.png", "image_id": 474170}, {"segments_info": [{"id": 5652803, "category_id": 1, "iscrowd": 0, "bbox": [527, 249, 110, 231], "area": 8878}, {"id": 7493198, "category_id": 31, "iscrowd": 0, "bbox": [556, 288, 67, 84], "area": 2265}, {"id": 11321039, "category_id": 88, "iscrowd": 0, "bbox": [183, 287, 23, 31], "area": 427}, {"id": 5145291, "category_id": 88, "iscrowd": 0, "bbox": [212, 233, 21, 18], "area": 240}, {"id": 10206166, "category_id": 88, "iscrowd": 0, "bbox": [183, 262, 12, 28], "area": 198}, {"id": 9087184, "category_id": 88, "iscrowd": 0, "bbox": [157, 217, 13, 18], "area": 150}, {"id": 9217726, "category_id": 88, "iscrowd": 0, "bbox": [212, 290, 19, 27], "area": 286}, {"id": 9748710, "category_id": 88, "iscrowd": 0, "bbox": [202, 219, 15, 24], "area": 184}, {"id": 10991824, "category_id": 88, "iscrowd": 0, "bbox": [142, 248, 15, 23], "area": 245}, {"id": 9412783, "category_id": 88, "iscrowd": 0, "bbox": [154, 294, 13, 26], "area": 285}, {"id": 6127000, "category_id": 88, "iscrowd": 0, "bbox": [263, 297, 28, 16], "area": 207}, {"id": 9875658, "category_id": 88, "iscrowd": 0, "bbox": [199, 292, 21, 25], "area": 330}, {"id": 10202306, "category_id": 88, "iscrowd": 0, "bbox": [157, 260, 14, 16], "area": 174}, {"id": 10533078, "category_id": 88, "iscrowd": 0, "bbox": [154, 249, 12, 12], "area": 110}, {"id": 9021377, "category_id": 88, "iscrowd": 0, "bbox": [226, 292, 19, 24], "area": 313}, {"id": 6847637, "category_id": 88, "iscrowd": 1, "bbox": [136, 73, 346, 247], "area": 18869}, {"id": 10724522, "category_id": 161, "iscrowd": 0, "bbox": [66, 353, 574, 98], "area": 29004}, {"id": 9801370, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 640, 456], "area": 113400}, {"id": 14995914, "category_id": 191, "iscrowd": 0, "bbox": [0, 431, 640, 49], "area": 19232}, {"id": 6713469, "category_id": 197, "iscrowd": 0, "bbox": [86, 0, 554, 391], "area": 109297}], "file_name": "000000474293.png", "image_id": 474293}, {"segments_info": [{"id": 2630436, "category_id": 1, "iscrowd": 0, "bbox": [165, 98, 136, 318], "area": 25939}, {"id": 7499113, "category_id": 1, "iscrowd": 0, "bbox": [506, 207, 52, 123], "area": 3111}, {"id": 8497489, "category_id": 39, "iscrowd": 0, "bbox": [230, 37, 21, 170], "area": 1128}, {"id": 3363397, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 294], "area": 146950}, {"id": 3970151, "category_id": 193, "iscrowd": 0, "bbox": [0, 203, 640, 224], "area": 75462}, {"id": 7697783, "category_id": 194, "iscrowd": 0, "bbox": [0, 386, 530, 41], "area": 14670}, {"id": 7762281, "category_id": 197, "iscrowd": 0, "bbox": [361, 0, 135, 88], "area": 5541}], "file_name": "000000474344.png", "image_id": 474344}, {"segments_info": [{"id": 7766667, "category_id": 3, "iscrowd": 0, "bbox": [169, 187, 12, 11], "area": 93}, {"id": 4409422, "category_id": 3, "iscrowd": 0, "bbox": [206, 192, 12, 10], "area": 97}, {"id": 5393732, "category_id": 3, "iscrowd": 0, "bbox": [155, 189, 11, 10], "area": 80}, {"id": 2039580, "category_id": 3, "iscrowd": 0, "bbox": [104, 194, 22, 21], "area": 304}, {"id": 2895673, "category_id": 3, "iscrowd": 0, "bbox": [73, 193, 31, 29], "area": 665}, {"id": 3487284, "category_id": 3, "iscrowd": 0, "bbox": [42, 191, 34, 22], "area": 470}, {"id": 3289903, "category_id": 3, "iscrowd": 0, "bbox": [5, 200, 64, 33], "area": 1164}, {"id": 5395030, "category_id": 3, "iscrowd": 0, "bbox": [251, 196, 14, 13], "area": 156}, {"id": 4144440, "category_id": 3, "iscrowd": 0, "bbox": [179, 190, 18, 12], "area": 137}, {"id": 8095626, "category_id": 3, "iscrowd": 0, "bbox": [163, 185, 20, 6], "area": 62}, {"id": 3750480, "category_id": 3, "iscrowd": 0, "bbox": [253, 183, 11, 13], "area": 112}, {"id": 3289392, "category_id": 3, "iscrowd": 0, "bbox": [140, 194, 22, 16], "area": 279}, {"id": 4868422, "category_id": 3, "iscrowd": 0, "bbox": [222, 186, 12, 5], "area": 39}, {"id": 4146767, "category_id": 3, "iscrowd": 1, "bbox": [1, 175, 359, 43], "area": 3585}, {"id": 5001556, "category_id": 6, "iscrowd": 0, "bbox": [189, 180, 14, 12], "area": 111}, {"id": 8497348, "category_id": 128, "iscrowd": 0, "bbox": [269, 0, 231, 375], "area": 52166}, {"id": 3426644, "category_id": 149, "iscrowd": 0, "bbox": [0, 195, 278, 180], "area": 40545}, {"id": 4015317, "category_id": 151, "iscrowd": 0, "bbox": [260, 31, 54, 30], "area": 614}, {"id": 2175022, "category_id": 184, "iscrowd": 0, "bbox": [0, 120, 422, 135], "area": 18512}, {"id": 11703417, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 300, 171], "area": 38767}, {"id": 5468038, "category_id": 191, "iscrowd": 0, "bbox": [233, 236, 187, 139], "area": 20977}, {"id": 3241876, "category_id": 197, "iscrowd": 0, "bbox": [343, 166, 31, 16], "area": 241}, {"id": 11263732, "category_id": 199, "iscrowd": 0, "bbox": [274, 197, 4, 18], "area": 49}], "file_name": "000000474452.png", "image_id": 474452}, {"segments_info": [{"id": 9942221, "category_id": 44, "iscrowd": 0, "bbox": [174, 445, 37, 55], "area": 1387}, {"id": 8559263, "category_id": 44, "iscrowd": 0, "bbox": [185, 428, 28, 54], "area": 502}, {"id": 1646366, "category_id": 72, "iscrowd": 0, "bbox": [127, 176, 121, 135], "area": 13520}, {"id": 5005674, "category_id": 81, "iscrowd": 0, "bbox": [0, 427, 53, 73], "area": 3105}, {"id": 3098182, "category_id": 81, "iscrowd": 0, "bbox": [244, 254, 131, 87], "area": 8928}, {"id": 6127234, "category_id": 81, "iscrowd": 0, "bbox": [86, 360, 288, 139], "area": 8432}, {"id": 6452340, "category_id": 133, "iscrowd": 0, "bbox": [26, 291, 349, 187], "area": 26373}, {"id": 12833230, "category_id": 180, "iscrowd": 0, "bbox": [45, 64, 128, 278], "area": 25014}, {"id": 12830135, "category_id": 181, "iscrowd": 0, "bbox": [42, 0, 122, 86], "area": 8645}, {"id": 2178374, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 366], "area": 67218}], "file_name": "000000474786.png", "image_id": 474786}, {"segments_info": [{"id": 6316128, "category_id": 1, "iscrowd": 0, "bbox": [16, 125, 352, 444], "area": 86946}, {"id": 11513775, "category_id": 52, "iscrowd": 0, "bbox": [194, 281, 83, 158], "area": 4952}, {"id": 8947848, "category_id": 62, "iscrowd": 0, "bbox": [38, 339, 41, 142], "area": 1841}, {"id": 13553358, "category_id": 67, "iscrowd": 0, "bbox": [3, 538, 419, 95], "area": 33479}, {"id": 12566463, "category_id": 177, "iscrowd": 0, "bbox": [188, 0, 71, 144], "area": 8527}, {"id": 13421772, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 424, 593], "area": 131335}, {"id": 13487565, "category_id": 189, "iscrowd": 0, "bbox": [0, 577, 424, 63], "area": 3531}], "file_name": "000000474854.png", "image_id": 474854}, {"segments_info": [{"id": 4544104, "category_id": 20, "iscrowd": 0, "bbox": [109, 132, 143, 108], "area": 8090}, {"id": 5069933, "category_id": 20, "iscrowd": 0, "bbox": [226, 176, 143, 115], "area": 8743}, {"id": 5793914, "category_id": 20, "iscrowd": 0, "bbox": [237, 121, 165, 161], "area": 7445}, {"id": 6123911, "category_id": 20, "iscrowd": 0, "bbox": [64, 53, 128, 115], "area": 6005}, {"id": 13950177, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 375], "area": 127637}, {"id": 8685968, "category_id": 184, "iscrowd": 0, "bbox": [463, 125, 133, 219], "area": 13060}, {"id": 2445652, "category_id": 193, "iscrowd": 0, "bbox": [0, 160, 640, 320], "area": 135671}], "file_name": "000000474881.png", "image_id": 474881}, {"segments_info": [{"id": 1381393, "category_id": 1, "iscrowd": 0, "bbox": [353, 355, 21, 72], "area": 1126}, {"id": 8033221, "category_id": 1, "iscrowd": 0, "bbox": [117, 303, 162, 124], "area": 10575}, {"id": 1381410, "category_id": 1, "iscrowd": 0, "bbox": [385, 315, 24, 109], "area": 1503}, {"id": 5545423, "category_id": 60, "iscrowd": 0, "bbox": [180, 291, 189, 84], "area": 9048}, {"id": 10397345, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 563, 57], "area": 17869}, {"id": 6844268, "category_id": 156, "iscrowd": 0, "bbox": [66, 274, 471, 153], "area": 26763}, {"id": 10659483, "category_id": 176, "iscrowd": 0, "bbox": [0, 20, 640, 407], "area": 36741}, {"id": 3167594, "category_id": 177, "iscrowd": 0, "bbox": [593, 110, 25, 42], "area": 742}, {"id": 6449266, "category_id": 181, "iscrowd": 0, "bbox": [0, 117, 563, 54], "area": 4302}, {"id": 3823172, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 27466}, {"id": 4540996, "category_id": 186, "iscrowd": 0, "bbox": [0, 83, 640, 143], "area": 12972}, {"id": 66309, "category_id": 188, "iscrowd": 0, "bbox": [186, 234, 242, 61], "area": 8962}, {"id": 5328471, "category_id": 196, "iscrowd": 0, "bbox": [284, 292, 2, 1], "area": 2}, {"id": 1581088, "category_id": 199, "iscrowd": 0, "bbox": [40, 184, 455, 243], "area": 32025}], "file_name": "000000475064.png", "image_id": 475064}, {"segments_info": [{"id": 2506848, "category_id": 25, "iscrowd": 0, "bbox": [140, 46, 500, 375], "area": 70191}, {"id": 6715006, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 187048}, {"id": 14865343, "category_id": 187, "iscrowd": 0, "bbox": [62, 0, 578, 192], "area": 8713}], "file_name": "000000475150.png", "image_id": 475150}, {"segments_info": [{"id": 9745620, "category_id": 1, "iscrowd": 0, "bbox": [182, 91, 239, 324], "area": 22063}, {"id": 7046796, "category_id": 43, "iscrowd": 0, "bbox": [383, 26, 33, 115], "area": 1419}, {"id": 7580566, "category_id": 145, "iscrowd": 0, "bbox": [0, 89, 640, 391], "area": 223864}, {"id": 4468509, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 110], "area": 59420}], "file_name": "000000475191.png", "image_id": 475191}, {"segments_info": [{"id": 6923222, "category_id": 16, "iscrowd": 0, "bbox": [241, 223, 173, 113], "area": 8633}, {"id": 3297143, "category_id": 16, "iscrowd": 0, "bbox": [498, 242, 56, 69], "area": 2958}, {"id": 5663867, "category_id": 178, "iscrowd": 0, "bbox": [0, 268, 640, 170], "area": 89034}], "file_name": "000000475223.png", "image_id": 475223}, {"segments_info": [{"id": 7433056, "category_id": 7, "iscrowd": 0, "bbox": [5, 2, 449, 424], "area": 165114}, {"id": 6121081, "category_id": 95, "iscrowd": 0, "bbox": [429, 270, 211, 140], "area": 22633}, {"id": 10328471, "category_id": 185, "iscrowd": 0, "bbox": [349, 34, 291, 392], "area": 60154}, {"id": 14201994, "category_id": 187, "iscrowd": 0, "bbox": [234, 0, 406, 53], "area": 17350}], "file_name": "000000475365.png", "image_id": 475365}, {"segments_info": [{"id": 5131352, "category_id": 1, "iscrowd": 0, "bbox": [603, 210, 22, 83], "area": 592}, {"id": 8627151, "category_id": 1, "iscrowd": 0, "bbox": [625, 209, 9, 19], "area": 103}, {"id": 8685199, "category_id": 1, "iscrowd": 0, "bbox": [306, 106, 12, 23], "area": 176}, {"id": 11251373, "category_id": 1, "iscrowd": 0, "bbox": [276, 112, 17, 40], "area": 319}, {"id": 8814218, "category_id": 1, "iscrowd": 0, "bbox": [403, 116, 11, 21], "area": 132}, {"id": 8092032, "category_id": 1, "iscrowd": 0, "bbox": [245, 117, 13, 35], "area": 264}, {"id": 9340040, "category_id": 1, "iscrowd": 0, "bbox": [299, 111, 10, 41], "area": 283}, {"id": 6776438, "category_id": 1, "iscrowd": 0, "bbox": [367, 109, 17, 34], "area": 341}, {"id": 9864585, "category_id": 1, "iscrowd": 0, "bbox": [610, 218, 26, 79], "area": 1352}, {"id": 9997203, "category_id": 1, "iscrowd": 0, "bbox": [532, 204, 19, 71], "area": 743}, {"id": 9471378, "category_id": 1, "iscrowd": 0, "bbox": [577, 215, 25, 80], "area": 1067}, {"id": 6449532, "category_id": 7, "iscrowd": 0, "bbox": [3, 139, 553, 224], "area": 84111}, {"id": 9596514, "category_id": 27, "iscrowd": 0, "bbox": [451, 120, 10, 13], "area": 106}, {"id": 10059376, "category_id": 27, "iscrowd": 0, "bbox": [573, 258, 17, 23], "area": 278}, {"id": 3813681, "category_id": 33, "iscrowd": 0, "bbox": [548, 258, 14, 20], "area": 240}, {"id": 10988724, "category_id": 125, "iscrowd": 0, "bbox": [0, 252, 640, 179], "area": 53769}, {"id": 12894145, "category_id": 144, "iscrowd": 0, "bbox": [534, 255, 106, 74], "area": 3804}, {"id": 3553087, "category_id": 147, "iscrowd": 0, "bbox": [203, 318, 437, 94], "area": 5034}, {"id": 5334659, "category_id": 171, "iscrowd": 0, "bbox": [431, 64, 209, 325], "area": 9601}, {"id": 9672868, "category_id": 175, "iscrowd": 0, "bbox": [284, 99, 356, 180], "area": 5419}, {"id": 14473426, "category_id": 181, "iscrowd": 0, "bbox": [372, 95, 43, 28], "area": 743}, {"id": 4671829, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 132], "area": 64933}, {"id": 14670552, "category_id": 187, "iscrowd": 0, "bbox": [0, 101, 614, 125], "area": 3100}, {"id": 11776952, "category_id": 197, "iscrowd": 0, "bbox": [309, 78, 215, 119], "area": 3484}, {"id": 7305099, "category_id": 199, "iscrowd": 0, "bbox": [523, 62, 117, 217], "area": 4014}], "file_name": "000000475387.png", "image_id": 475387}, {"segments_info": [{"id": 6643555, "category_id": 1, "iscrowd": 0, "bbox": [56, 329, 17, 41], "area": 286}, {"id": 3882578, "category_id": 1, "iscrowd": 0, "bbox": [1, 323, 20, 54], "area": 625}, {"id": 2826320, "category_id": 1, "iscrowd": 0, "bbox": [81, 330, 9, 33], "area": 201}, {"id": 5328218, "category_id": 1, "iscrowd": 0, "bbox": [112, 333, 11, 24], "area": 131}, {"id": 2372176, "category_id": 1, "iscrowd": 0, "bbox": [120, 335, 7, 14], "area": 53}, {"id": 4472648, "category_id": 1, "iscrowd": 0, "bbox": [17, 327, 9, 30], "area": 164}, {"id": 5194561, "category_id": 3, "iscrowd": 0, "bbox": [361, 347, 63, 49], "area": 2518}, {"id": 3025964, "category_id": 3, "iscrowd": 0, "bbox": [141, 337, 131, 52], "area": 4029}, {"id": 1512726, "category_id": 10, "iscrowd": 0, "bbox": [75, 0, 61, 51], "area": 1949}, {"id": 1514016, "category_id": 10, "iscrowd": 0, "bbox": [149, 147, 43, 51], "area": 1696}, {"id": 1775641, "category_id": 10, "iscrowd": 0, "bbox": [7, 90, 31, 37], "area": 698}, {"id": 3827579, "category_id": 14, "iscrowd": 0, "bbox": [276, 23, 122, 247], "area": 23976}, {"id": 8226709, "category_id": 149, "iscrowd": 0, "bbox": [0, 356, 426, 87], "area": 14740}, {"id": 2768451, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 426, 381], "area": 70473}, {"id": 11712156, "category_id": 186, "iscrowd": 0, "bbox": [142, 303, 13, 22], "area": 200}, {"id": 10977899, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 355, 243], "area": 22458}, {"id": 10398417, "category_id": 191, "iscrowd": 0, "bbox": [0, 401, 426, 239], "area": 84920}, {"id": 8028292, "category_id": 197, "iscrowd": 0, "bbox": [0, 168, 426, 191], "area": 15964}], "file_name": "000000475484.png", "image_id": 475484}, {"segments_info": [{"id": 5331793, "category_id": 1, "iscrowd": 0, "bbox": [375, 206, 79, 141], "area": 5569}, {"id": 4147780, "category_id": 1, "iscrowd": 0, "bbox": [431, 205, 109, 146], "area": 8717}, {"id": 2106147, "category_id": 15, "iscrowd": 0, "bbox": [0, 316, 640, 115], "area": 35758}, {"id": 2376250, "category_id": 64, "iscrowd": 0, "bbox": [3, 29, 268, 313], "area": 32437}, {"id": 1321013, "category_id": 86, "iscrowd": 0, "bbox": [66, 193, 132, 145], "area": 14925}, {"id": 6912389, "category_id": 88, "iscrowd": 0, "bbox": [154, 154, 205, 218], "area": 22682}, {"id": 725523, "category_id": 189, "iscrowd": 0, "bbox": [170, 311, 470, 96], "area": 2965}, {"id": 4482162, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 431], "area": 70516}], "file_name": "000000475572.png", "image_id": 475572}, {"segments_info": [{"id": 3157811, "category_id": 33, "iscrowd": 0, "bbox": [399, 69, 87, 109], "area": 4742}, {"id": 2121376, "category_id": 33, "iscrowd": 0, "bbox": [96, 65, 106, 109], "area": 9029}, {"id": 4934217, "category_id": 33, "iscrowd": 0, "bbox": [447, 24, 142, 95], "area": 9810}, {"id": 8939609, "category_id": 33, "iscrowd": 0, "bbox": [429, 110, 190, 351], "area": 49492}, {"id": 5206187, "category_id": 33, "iscrowd": 0, "bbox": [197, 74, 99, 104], "area": 8334}, {"id": 6965303, "category_id": 33, "iscrowd": 0, "bbox": [2, 135, 82, 325], "area": 16882}, {"id": 6185314, "category_id": 33, "iscrowd": 0, "bbox": [64, 53, 67, 44], "area": 2188}, {"id": 7631218, "category_id": 33, "iscrowd": 0, "bbox": [32, 159, 157, 280], "area": 29667}, {"id": 8420988, "category_id": 33, "iscrowd": 0, "bbox": [291, 5, 115, 148], "area": 12247}, {"id": 4486836, "category_id": 33, "iscrowd": 0, "bbox": [161, 167, 149, 305], "area": 35790}, {"id": 5525857, "category_id": 33, "iscrowd": 0, "bbox": [299, 135, 143, 275], "area": 33005}, {"id": 7374485, "category_id": 33, "iscrowd": 0, "bbox": [547, 107, 92, 322], "area": 14930}, {"id": 9809602, "category_id": 190, "iscrowd": 0, "bbox": [0, 322, 640, 158], "area": 31354}, {"id": 2577010, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 96, 150], "area": 8632}], "file_name": "000000475678.png", "image_id": 475678}, {"segments_info": [{"id": 5802681, "category_id": 17, "iscrowd": 0, "bbox": [2, 123, 638, 357], "area": 177683}, {"id": 4664350, "category_id": 93, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 48718}], "file_name": "000000475732.png", "image_id": 475732}, {"segments_info": [{"id": 8161942, "category_id": 22, "iscrowd": 0, "bbox": [0, 119, 467, 361], "area": 97550}, {"id": 5207661, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 365], "area": 123880}, {"id": 6658456, "category_id": 193, "iscrowd": 0, "bbox": [0, 154, 640, 326], "area": 85274}], "file_name": "000000475779.png", "image_id": 475779}, {"segments_info": [{"id": 4409180, "category_id": 9, "iscrowd": 0, "bbox": [359, 255, 281, 165], "area": 32475}, {"id": 13161176, "category_id": 16, "iscrowd": 0, "bbox": [447, 96, 37, 38], "area": 999}, {"id": 2698546, "category_id": 144, "iscrowd": 0, "bbox": [517, 391, 123, 35], "area": 783}, {"id": 4936532, "category_id": 148, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 231471}], "file_name": "000000475904.png", "image_id": 475904}, {"segments_info": [{"id": 4477786, "category_id": 1, "iscrowd": 0, "bbox": [92, 16, 237, 378], "area": 33539}, {"id": 6786475, "category_id": 3, "iscrowd": 0, "bbox": [241, 80, 203, 117], "area": 13998}, {"id": 7960941, "category_id": 3, "iscrowd": 0, "bbox": [9, 91, 49, 38], "area": 1272}, {"id": 6379895, "category_id": 8, "iscrowd": 0, "bbox": [269, 56, 147, 39], "area": 2663}, {"id": 8887461, "category_id": 41, "iscrowd": 0, "bbox": [77, 361, 120, 54], "area": 1889}, {"id": 13556953, "category_id": 128, "iscrowd": 0, "bbox": [49, 0, 375, 97], "area": 12997}, {"id": 6809072, "category_id": 149, "iscrowd": 0, "bbox": [0, 111, 640, 316], "area": 148054}, {"id": 4304070, "category_id": 175, "iscrowd": 0, "bbox": [50, 61, 547, 76], "area": 8409}, {"id": 4297615, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 126], "area": 35087}, {"id": 2873278, "category_id": 193, "iscrowd": 0, "bbox": [92, 89, 548, 110], "area": 2848}, {"id": 8427936, "category_id": 197, "iscrowd": 0, "bbox": [289, 49, 119, 22], "area": 439}], "file_name": "000000476119.png", "image_id": 476119}, {"segments_info": [{"id": 10330785, "category_id": 1, "iscrowd": 0, "bbox": [278, 95, 36, 106], "area": 2417}, {"id": 3290673, "category_id": 19, "iscrowd": 0, "bbox": [9, 62, 100, 147], "area": 6076}, {"id": 3816759, "category_id": 19, "iscrowd": 0, "bbox": [81, 80, 195, 145], "area": 13695}, {"id": 15725298, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 513, 131], "area": 49945}, {"id": 13226193, "category_id": 194, "iscrowd": 0, "bbox": [0, 115, 513, 294], "area": 121634}], "file_name": "000000476215.png", "image_id": 476215}, {"segments_info": [{"id": 2180188, "category_id": 1, "iscrowd": 0, "bbox": [257, 37, 257, 269], "area": 25707}, {"id": 2174529, "category_id": 41, "iscrowd": 0, "bbox": [270, 250, 237, 97], "area": 6737}, {"id": 7836066, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 283], "area": 144916}], "file_name": "000000476258.png", "image_id": 476258}, {"segments_info": [{"id": 5594474, "category_id": 1, "iscrowd": 0, "bbox": [56, 0, 370, 631], "area": 172821}, {"id": 1842467, "category_id": 32, "iscrowd": 0, "bbox": [213, 32, 83, 439], "area": 25924}, {"id": 4875649, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 426, 89], "area": 14393}, {"id": 7642299, "category_id": 199, "iscrowd": 0, "bbox": [0, 13, 426, 627], "area": 52139}], "file_name": "000000476415.png", "image_id": 476415}, {"segments_info": [{"id": 2102549, "category_id": 95, "iscrowd": 0, "bbox": [168, 0, 168, 301], "area": 38510}, {"id": 12626588, "category_id": 130, "iscrowd": 0, "bbox": [137, 117, 18, 15], "area": 179}, {"id": 2629144, "category_id": 149, "iscrowd": 0, "bbox": [0, 229, 336, 271], "area": 61340}, {"id": 5266790, "category_id": 184, "iscrowd": 0, "bbox": [129, 193, 29, 45], "area": 775}, {"id": 1775382, "category_id": 185, "iscrowd": 0, "bbox": [0, 235, 336, 135], "area": 7164}, {"id": 15322042, "category_id": 187, "iscrowd": 0, "bbox": [128, 7, 62, 177], "area": 8498}, {"id": 2037527, "category_id": 191, "iscrowd": 0, "bbox": [0, 234, 336, 174], "area": 8526}, {"id": 2497822, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 336, 312], "area": 37654}], "file_name": "000000476491.png", "image_id": 476491}, {"segments_info": [{"id": 11384501, "category_id": 1, "iscrowd": 0, "bbox": [47, 57, 252, 572], "area": 60625}, {"id": 1645603, "category_id": 1, "iscrowd": 0, "bbox": [261, 128, 128, 459], "area": 37484}, {"id": 8357500, "category_id": 28, "iscrowd": 0, "bbox": [170, 39, 204, 156], "area": 16143}, {"id": 11449258, "category_id": 31, "iscrowd": 0, "bbox": [257, 409, 35, 44], "area": 1051}, {"id": 4143455, "category_id": 32, "iscrowd": 0, "bbox": [301, 204, 24, 131], "area": 788}, {"id": 664086, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 426, 345], "area": 85090}, {"id": 1463353, "category_id": 193, "iscrowd": 0, "bbox": [0, 303, 426, 337], "area": 69735}], "file_name": "000000476514.png", "image_id": 476514}, {"segments_info": [{"id": 6514793, "category_id": 2, "iscrowd": 0, "bbox": [498, 281, 54, 105], "area": 3542}, {"id": 4733998, "category_id": 3, "iscrowd": 0, "bbox": [530, 225, 13, 15], "area": 152}, {"id": 4077108, "category_id": 3, "iscrowd": 0, "bbox": [544, 225, 41, 14], "area": 313}, {"id": 8356749, "category_id": 3, "iscrowd": 0, "bbox": [633, 235, 7, 24], "area": 108}, {"id": 4340808, "category_id": 3, "iscrowd": 0, "bbox": [575, 233, 57, 44], "area": 1758}, {"id": 5986392, "category_id": 6, "iscrowd": 0, "bbox": [108, 81, 414, 269], "area": 92474}, {"id": 8419957, "category_id": 8, "iscrowd": 0, "bbox": [13, 146, 106, 134], "area": 9893}, {"id": 3947835, "category_id": 15, "iscrowd": 0, "bbox": [591, 264, 28, 43], "area": 572}, {"id": 5602928, "category_id": 92, "iscrowd": 0, "bbox": [136, 49, 106, 45], "area": 2757}, {"id": 12368566, "category_id": 130, "iscrowd": 0, "bbox": [515, 18, 30, 42], "area": 793}, {"id": 8618884, "category_id": 149, "iscrowd": 0, "bbox": [0, 236, 562, 192], "area": 44046}, {"id": 7171952, "category_id": 151, "iscrowd": 0, "bbox": [16, 103, 71, 55], "area": 1690}, {"id": 3949891, "category_id": 184, "iscrowd": 0, "bbox": [0, 48, 640, 192], "area": 18408}, {"id": 16240812, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 172], "area": 60596}, {"id": 11317686, "category_id": 191, "iscrowd": 0, "bbox": [340, 253, 300, 175], "area": 23780}, {"id": 4605774, "category_id": 197, "iscrowd": 0, "bbox": [0, 131, 640, 131], "area": 5727}], "file_name": "000000476704.png", "image_id": 476704}, {"segments_info": [{"id": 3422792, "category_id": 1, "iscrowd": 0, "bbox": [73, 63, 41, 38], "area": 902}, {"id": 9342618, "category_id": 1, "iscrowd": 0, "bbox": [0, 76, 31, 74], "area": 995}, {"id": 7230546, "category_id": 1, "iscrowd": 0, "bbox": [362, 40, 88, 233], "area": 9573}, {"id": 9935524, "category_id": 1, "iscrowd": 0, "bbox": [594, 72, 46, 40], "area": 1137}, {"id": 11114388, "category_id": 1, "iscrowd": 0, "bbox": [79, 19, 16, 26], "area": 188}, {"id": 9873591, "category_id": 1, "iscrowd": 0, "bbox": [327, 72, 33, 40], "area": 764}, {"id": 7815729, "category_id": 1, "iscrowd": 0, "bbox": [583, 66, 26, 26], "area": 320}, {"id": 9605535, "category_id": 1, "iscrowd": 0, "bbox": [48, 55, 24, 37], "area": 530}, {"id": 7173520, "category_id": 1, "iscrowd": 0, "bbox": [614, 56, 10, 16], "area": 116}, {"id": 12360081, "category_id": 1, "iscrowd": 0, "bbox": [269, 73, 63, 40], "area": 1051}, {"id": 11644852, "category_id": 1, "iscrowd": 0, "bbox": [345, 31, 265, 389], "area": 53127}, {"id": 4674919, "category_id": 1, "iscrowd": 0, "bbox": [29, 70, 36, 42], "area": 979}, {"id": 7627355, "category_id": 1, "iscrowd": 0, "bbox": [236, 117, 112, 186], "area": 9109}, {"id": 6975596, "category_id": 1, "iscrowd": 1, "bbox": [1, 1, 639, 166], "area": 74628}, {"id": 3161951, "category_id": 40, "iscrowd": 0, "bbox": [536, 179, 50, 65], "area": 1937}, {"id": 3093303, "category_id": 40, "iscrowd": 0, "bbox": [301, 179, 38, 35], "area": 988}, {"id": 6518910, "category_id": 40, "iscrowd": 0, "bbox": [401, 40, 37, 34], "area": 811}, {"id": 8296878, "category_id": 145, "iscrowd": 0, "bbox": [45, 189, 595, 84], "area": 3523}, {"id": 4411967, "category_id": 185, "iscrowd": 0, "bbox": [0, 113, 640, 94], "area": 15560}, {"id": 4297867, "category_id": 193, "iscrowd": 0, "bbox": [0, 185, 640, 241], "area": 63064}, {"id": 4948930, "category_id": 194, "iscrowd": 0, "bbox": [0, 215, 640, 142], "area": 29600}], "file_name": "000000476770.png", "image_id": 476770}, {"segments_info": [{"id": 1846562, "category_id": 44, "iscrowd": 0, "bbox": [569, 119, 71, 177], "area": 6850}, {"id": 2108459, "category_id": 44, "iscrowd": 0, "bbox": [416, 9, 112, 170], "area": 12094}, {"id": 2703668, "category_id": 44, "iscrowd": 0, "bbox": [478, 186, 66, 107], "area": 4648}, {"id": 1975843, "category_id": 44, "iscrowd": 0, "bbox": [536, 202, 41, 106], "area": 1945}, {"id": 1517892, "category_id": 44, "iscrowd": 0, "bbox": [473, 100, 93, 146], "area": 6956}, {"id": 5929862, "category_id": 44, "iscrowd": 0, "bbox": [294, 11, 64, 89], "area": 5228}, {"id": 4681835, "category_id": 47, "iscrowd": 0, "bbox": [357, 83, 60, 103], "area": 4927}, {"id": 3621950, "category_id": 49, "iscrowd": 0, "bbox": [25, 243, 191, 20], "area": 2280}, {"id": 1913406, "category_id": 49, "iscrowd": 0, "bbox": [233, 232, 330, 33], "area": 3729}, {"id": 4285280, "category_id": 51, "iscrowd": 0, "bbox": [69, 61, 216, 132], "area": 22222}, {"id": 3961233, "category_id": 59, "iscrowd": 0, "bbox": [189, 263, 256, 162], "area": 30297}, {"id": 8167580, "category_id": 107, "iscrowd": 0, "bbox": [0, 123, 606, 357], "area": 36252}, {"id": 3026212, "category_id": 168, "iscrowd": 0, "bbox": [539, 281, 101, 199], "area": 14507}, {"id": 6257272, "category_id": 188, "iscrowd": 0, "bbox": [0, 340, 309, 140], "area": 21441}, {"id": 6059639, "category_id": 195, "iscrowd": 0, "bbox": [0, 146, 73, 55], "area": 2509}, {"id": 5871514, "category_id": 196, "iscrowd": 0, "bbox": [0, 142, 457, 294], "area": 14990}, {"id": 4546137, "category_id": 199, "iscrowd": 0, "bbox": [161, 0, 142, 92], "area": 4349}], "file_name": "000000476787.png", "image_id": 476787}, {"segments_info": [{"id": 3221552, "category_id": 17, "iscrowd": 0, "bbox": [0, 15, 500, 304], "area": 104311}, {"id": 13159640, "category_id": 65, "iscrowd": 0, "bbox": [0, 160, 640, 314], "area": 125126}, {"id": 3944488, "category_id": 72, "iscrowd": 0, "bbox": [2, 1, 68, 71], "area": 3711}, {"id": 6050132, "category_id": 75, "iscrowd": 0, "bbox": [242, 251, 295, 66], "area": 16638}, {"id": 3884689, "category_id": 84, "iscrowd": 0, "bbox": [628, 26, 8, 125], "area": 591}, {"id": 6384529, "category_id": 84, "iscrowd": 0, "bbox": [603, 48, 11, 108], "area": 931}, {"id": 5528200, "category_id": 84, "iscrowd": 0, "bbox": [614, 47, 12, 107], "area": 947}, {"id": 4740733, "category_id": 84, "iscrowd": 0, "bbox": [591, 15, 34, 139], "area": 1630}, {"id": 6712973, "category_id": 84, "iscrowd": 0, "bbox": [508, 19, 64, 140], "area": 7691}, {"id": 12764879, "category_id": 93, "iscrowd": 0, "bbox": [0, 474, 640, 6], "area": 3840}, {"id": 11448769, "category_id": 199, "iscrowd": 0, "bbox": [142, 0, 167, 64], "area": 6382}], "file_name": "000000476810.png", "image_id": 476810}, {"segments_info": [{"id": 6645343, "category_id": 181, "iscrowd": 0, "bbox": [335, 36, 120, 177], "area": 9488}, {"id": 15131620, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 210, 333], "area": 37046}, {"id": 6127004, "category_id": 197, "iscrowd": 0, "bbox": [79, 0, 421, 333], "area": 74114}], "file_name": "000000477118.png", "image_id": 477118}, {"segments_info": [{"id": 7431014, "category_id": 1, "iscrowd": 0, "bbox": [403, 251, 6, 7], "area": 34}, {"id": 8158586, "category_id": 3, "iscrowd": 0, "bbox": [0, 144, 11, 14], "area": 131}, {"id": 8487033, "category_id": 3, "iscrowd": 0, "bbox": [517, 162, 13, 7], "area": 77}, {"id": 6643289, "category_id": 8, "iscrowd": 0, "bbox": [28, 149, 30, 12], "area": 241}, {"id": 8157555, "category_id": 8, "iscrowd": 0, "bbox": [14, 146, 15, 13], "area": 166}, {"id": 9868947, "category_id": 8, "iscrowd": 0, "bbox": [501, 152, 29, 19], "area": 345}, {"id": 7237236, "category_id": 9, "iscrowd": 0, "bbox": [64, 123, 286, 129], "area": 19415}, {"id": 4998982, "category_id": 9, "iscrowd": 0, "bbox": [220, 244, 243, 61], "area": 8304}, {"id": 5133399, "category_id": 125, "iscrowd": 0, "bbox": [235, 337, 405, 74], "area": 16950}, {"id": 7370096, "category_id": 128, "iscrowd": 0, "bbox": [110, 267, 530, 85], "area": 23267}, {"id": 12959163, "category_id": 148, "iscrowd": 0, "bbox": [0, 186, 640, 117], "area": 22829}, {"id": 8160654, "category_id": 149, "iscrowd": 0, "bbox": [0, 150, 640, 44], "area": 9125}, {"id": 6248019, "category_id": 161, "iscrowd": 0, "bbox": [493, 121, 34, 33], "area": 545}, {"id": 4212542, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 54229}, {"id": 6254960, "category_id": 185, "iscrowd": 0, "bbox": [0, 133, 640, 263], "area": 10921}, {"id": 5334889, "category_id": 191, "iscrowd": 0, "bbox": [269, 338, 38, 19], "area": 418}, {"id": 2967622, "category_id": 193, "iscrowd": 0, "bbox": [0, 152, 498, 275], "area": 10907}, {"id": 7894904, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 67453}, {"id": 3096896, "category_id": 198, "iscrowd": 0, "bbox": [49, 316, 42, 25], "area": 628}, {"id": 4737616, "category_id": 199, "iscrowd": 0, "bbox": [0, 157, 640, 53], "area": 8019}], "file_name": "000000477227.png", "image_id": 477227}, {"segments_info": [{"id": 7039878, "category_id": 1, "iscrowd": 0, "bbox": [427, 203, 53, 147], "area": 4195}, {"id": 6911140, "category_id": 1, "iscrowd": 0, "bbox": [378, 234, 63, 86], "area": 1391}, {"id": 5658196, "category_id": 1, "iscrowd": 0, "bbox": [371, 246, 28, 55], "area": 984}, {"id": 4869215, "category_id": 1, "iscrowd": 0, "bbox": [133, 208, 131, 267], "area": 14671}, {"id": 5066068, "category_id": 1, "iscrowd": 0, "bbox": [195, 69, 193, 525], "area": 38866}, {"id": 4737096, "category_id": 1, "iscrowd": 0, "bbox": [137, 243, 33, 85], "area": 1607}, {"id": 7762812, "category_id": 1, "iscrowd": 0, "bbox": [101, 200, 51, 119], "area": 3415}, {"id": 5856842, "category_id": 1, "iscrowd": 0, "bbox": [299, 309, 181, 328], "area": 40485}, {"id": 3683398, "category_id": 1, "iscrowd": 0, "bbox": [0, 117, 165, 449], "area": 37176}, {"id": 2105631, "category_id": 28, "iscrowd": 0, "bbox": [162, 132, 142, 120], "area": 7828}, {"id": 4603962, "category_id": 28, "iscrowd": 0, "bbox": [363, 121, 117, 79], "area": 5395}, {"id": 4143927, "category_id": 28, "iscrowd": 0, "bbox": [1, 129, 52, 59], "area": 2143}, {"id": 2237475, "category_id": 28, "iscrowd": 0, "bbox": [186, 0, 294, 138], "area": 8810}, {"id": 5328201, "category_id": 28, "iscrowd": 0, "bbox": [93, 84, 140, 172], "area": 5795}, {"id": 3813417, "category_id": 28, "iscrowd": 0, "bbox": [0, 39, 106, 108], "area": 6830}, {"id": 5402982, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 421], "area": 51863}, {"id": 10331558, "category_id": 191, "iscrowd": 0, "bbox": [0, 298, 480, 342], "area": 53931}, {"id": 4867645, "category_id": 197, "iscrowd": 0, "bbox": [0, 72, 437, 184], "area": 10214}, {"id": 4803131, "category_id": 199, "iscrowd": 0, "bbox": [218, 251, 207, 26], "area": 887}], "file_name": "000000477288.png", "image_id": 477288}, {"segments_info": [{"id": 2698785, "category_id": 1, "iscrowd": 0, "bbox": [199, 377, 21, 22], "area": 151}, {"id": 2896930, "category_id": 1, "iscrowd": 0, "bbox": [338, 275, 9, 21], "area": 94}, {"id": 3949621, "category_id": 1, "iscrowd": 0, "bbox": [489, 262, 8, 15], "area": 69}, {"id": 9738112, "category_id": 5, "iscrowd": 0, "bbox": [107, 156, 393, 136], "area": 17251}, {"id": 5331785, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 289316}], "file_name": "000000477441.png", "image_id": 477441}, {"segments_info": [{"id": 4809614, "category_id": 7, "iscrowd": 0, "bbox": [97, 76, 457, 354], "area": 114824}, {"id": 6731209, "category_id": 119, "iscrowd": 0, "bbox": [0, 315, 99, 30], "area": 1232}, {"id": 6385271, "category_id": 147, "iscrowd": 0, "bbox": [0, 300, 640, 180], "area": 20364}, {"id": 10201783, "category_id": 149, "iscrowd": 0, "bbox": [11, 307, 87, 31], "area": 1359}, {"id": 9085102, "category_id": 175, "iscrowd": 0, "bbox": [0, 147, 101, 254], "area": 8612}, {"id": 5993067, "category_id": 184, "iscrowd": 0, "bbox": [0, 89, 640, 234], "area": 28153}, {"id": 16380905, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 153], "area": 56314}, {"id": 12037532, "category_id": 192, "iscrowd": 0, "bbox": [361, 71, 279, 75], "area": 6245}, {"id": 9613500, "category_id": 194, "iscrowd": 0, "bbox": [0, 319, 640, 161], "area": 41518}, {"id": 10395811, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 316], "area": 23246}], "file_name": "000000477623.png", "image_id": 477623}, {"segments_info": [{"id": 7961484, "category_id": 1, "iscrowd": 0, "bbox": [43, 66, 376, 523], "area": 134629}, {"id": 2894921, "category_id": 32, "iscrowd": 0, "bbox": [187, 288, 107, 279], "area": 4947}, {"id": 5665943, "category_id": 177, "iscrowd": 0, "bbox": [13, 31, 432, 530], "area": 74059}], "file_name": "000000477689.png", "image_id": 477689}, {"segments_info": [{"id": 855827, "category_id": 1, "iscrowd": 0, "bbox": [384, 12, 201, 374], "area": 38154}, {"id": 2958631, "category_id": 1, "iscrowd": 0, "bbox": [163, 308, 62, 46], "area": 2199}, {"id": 986122, "category_id": 73, "iscrowd": 0, "bbox": [71, 228, 180, 179], "area": 8878}], "file_name": "000000477805.png", "image_id": 477805}, {"segments_info": [{"id": 2964550, "category_id": 1, "iscrowd": 0, "bbox": [181, 434, 77, 178], "area": 5541}, {"id": 8942703, "category_id": 38, "iscrowd": 0, "bbox": [328, 10, 42, 81], "area": 2196}, {"id": 11236667, "category_id": 38, "iscrowd": 0, "bbox": [334, 503, 6, 8], "area": 27}, {"id": 4348260, "category_id": 42, "iscrowd": 0, "bbox": [177, 480, 38, 93], "area": 1477}, {"id": 5087427, "category_id": 154, "iscrowd": 0, "bbox": [0, 573, 480, 67], "area": 16529}, {"id": 10521700, "category_id": 155, "iscrowd": 0, "bbox": [0, 499, 480, 133], "area": 36276}, {"id": 15831077, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 531], "area": 244954}], "file_name": "000000477955.png", "image_id": 477955}, {"segments_info": [{"id": 5262259, "category_id": 60, "iscrowd": 0, "bbox": [140, 179, 160, 96], "area": 9643}, {"id": 5724018, "category_id": 61, "iscrowd": 0, "bbox": [297, 156, 124, 75], "area": 6540}, {"id": 4017030, "category_id": 61, "iscrowd": 0, "bbox": [233, 217, 128, 124], "area": 12601}, {"id": 6250620, "category_id": 61, "iscrowd": 0, "bbox": [360, 220, 159, 149], "area": 18170}, {"id": 6388663, "category_id": 61, "iscrowd": 0, "bbox": [186, 322, 220, 113], "area": 17897}, {"id": 1516886, "category_id": 67, "iscrowd": 0, "bbox": [13, 177, 504, 338], "area": 63388}, {"id": 7173529, "category_id": 189, "iscrowd": 0, "bbox": [182, 393, 273, 56], "area": 3016}, {"id": 9211306, "category_id": 196, "iscrowd": 0, "bbox": [297, 203, 50, 22], "area": 276}], "file_name": "000000478136.png", "image_id": 478136}, {"segments_info": [{"id": 5264221, "category_id": 7, "iscrowd": 0, "bbox": [154, 198, 486, 121], "area": 46126}, {"id": 3815990, "category_id": 95, "iscrowd": 0, "bbox": [0, 268, 640, 212], "area": 85465}, {"id": 3553327, "category_id": 184, "iscrowd": 0, "bbox": [414, 160, 201, 306], "area": 29733}, {"id": 11906712, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 328], "area": 139898}], "file_name": "000000478286.png", "image_id": 478286}, {"segments_info": [{"id": 4416118, "category_id": 17, "iscrowd": 0, "bbox": [1, 362, 255, 150], "area": 26681}, {"id": 5398373, "category_id": 17, "iscrowd": 0, "bbox": [101, 164, 144, 67], "area": 6236}, {"id": 9675947, "category_id": 65, "iscrowd": 0, "bbox": [3, 9, 476, 627], "area": 174668}, {"id": 7242649, "category_id": 88, "iscrowd": 0, "bbox": [250, 164, 230, 339], "area": 55793}, {"id": 8359832, "category_id": 93, "iscrowd": 0, "bbox": [0, 415, 480, 225], "area": 3819}, {"id": 12371410, "category_id": 141, "iscrowd": 0, "bbox": [0, 179, 4, 237], "area": 840}, {"id": 11191756, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 307], "area": 38679}], "file_name": "000000478393.png", "image_id": 478393}, {"segments_info": [{"id": 4339262, "category_id": 1, "iscrowd": 0, "bbox": [24, 138, 135, 448], "area": 43203}, {"id": 4011333, "category_id": 1, "iscrowd": 0, "bbox": [256, 96, 211, 516], "area": 69375}, {"id": 4079176, "category_id": 77, "iscrowd": 0, "bbox": [87, 168, 15, 29], "area": 113}, {"id": 4604227, "category_id": 191, "iscrowd": 0, "bbox": [0, 502, 480, 138], "area": 47862}, {"id": 12302275, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 539], "area": 145984}], "file_name": "000000478420.png", "image_id": 478420}, {"segments_info": [{"id": 10000525, "category_id": 3, "iscrowd": 0, "bbox": [471, 341, 9, 7], "area": 54}, {"id": 10132629, "category_id": 3, "iscrowd": 0, "bbox": [412, 344, 6, 5], "area": 23}, {"id": 10523525, "category_id": 3, "iscrowd": 0, "bbox": [431, 341, 8, 7], "area": 43}, {"id": 9935001, "category_id": 3, "iscrowd": 0, "bbox": [417, 342, 5, 6], "area": 17}, {"id": 12960444, "category_id": 3, "iscrowd": 0, "bbox": [420, 342, 12, 9], "area": 103}, {"id": 5472919, "category_id": 8, "iscrowd": 0, "bbox": [377, 331, 16, 22], "area": 307}, {"id": 7109289, "category_id": 8, "iscrowd": 0, "bbox": [296, 277, 65, 112], "area": 5571}, {"id": 9607080, "category_id": 8, "iscrowd": 0, "bbox": [39, 230, 266, 198], "area": 44093}, {"id": 9806495, "category_id": 128, "iscrowd": 0, "bbox": [29, 321, 451, 56], "area": 485}, {"id": 10923179, "category_id": 149, "iscrowd": 0, "bbox": [0, 338, 480, 302], "area": 67564}, {"id": 5464407, "category_id": 184, "iscrowd": 0, "bbox": [0, 107, 480, 289], "area": 20554}, {"id": 15318153, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 338], "area": 114100}, {"id": 13162453, "category_id": 191, "iscrowd": 0, "bbox": [426, 367, 54, 30], "area": 809}, {"id": 12765894, "category_id": 192, "iscrowd": 0, "bbox": [20, 322, 22, 24], "area": 365}, {"id": 6534812, "category_id": 193, "iscrowd": 0, "bbox": [9, 357, 471, 283], "area": 51409}], "file_name": "000000478474.png", "image_id": 478474}, {"segments_info": [{"id": 8027021, "category_id": 1, "iscrowd": 0, "bbox": [324, 228, 67, 140], "area": 3202}, {"id": 6576750, "category_id": 1, "iscrowd": 0, "bbox": [576, 267, 22, 23], "area": 320}, {"id": 6446955, "category_id": 1, "iscrowd": 0, "bbox": [242, 221, 66, 111], "area": 2262}, {"id": 8617604, "category_id": 1, "iscrowd": 0, "bbox": [320, 241, 13, 38], "area": 314}, {"id": 4608345, "category_id": 1, "iscrowd": 0, "bbox": [310, 243, 11, 35], "area": 256}, {"id": 6183521, "category_id": 3, "iscrowd": 0, "bbox": [31, 228, 51, 40], "area": 1406}, {"id": 3749214, "category_id": 3, "iscrowd": 0, "bbox": [583, 250, 57, 43], "area": 1675}, {"id": 8943211, "category_id": 3, "iscrowd": 0, "bbox": [369, 238, 64, 46], "area": 2444}, {"id": 7104099, "category_id": 8, "iscrowd": 0, "bbox": [497, 249, 60, 41], "area": 1755}, {"id": 10524047, "category_id": 8, "iscrowd": 0, "bbox": [427, 235, 70, 51], "area": 2986}, {"id": 8419446, "category_id": 8, "iscrowd": 0, "bbox": [0, 221, 16, 46], "area": 647}, {"id": 9998224, "category_id": 38, "iscrowd": 0, "bbox": [163, 168, 245, 70], "area": 10684}, {"id": 8219982, "category_id": 155, "iscrowd": 0, "bbox": [162, 235, 21, 22], "area": 324}, {"id": 7302233, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 290], "area": 106984}, {"id": 15973512, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 597, 205], "area": 44526}, {"id": 9936031, "category_id": 191, "iscrowd": 0, "bbox": [0, 249, 640, 231], "area": 126485}], "file_name": "000000478721.png", "image_id": 478721}, {"segments_info": [{"id": 2763825, "category_id": 1, "iscrowd": 0, "bbox": [633, 279, 7, 72], "area": 258}, {"id": 1841433, "category_id": 1, "iscrowd": 0, "bbox": [565, 281, 12, 61], "area": 388}, {"id": 5922409, "category_id": 1, "iscrowd": 0, "bbox": [152, 318, 12, 24], "area": 193}, {"id": 1512984, "category_id": 1, "iscrowd": 0, "bbox": [591, 274, 13, 73], "area": 544}, {"id": 1842464, "category_id": 1, "iscrowd": 0, "bbox": [620, 275, 10, 74], "area": 288}, {"id": 5066068, "category_id": 1, "iscrowd": 0, "bbox": [122, 303, 28, 87], "area": 1474}, {"id": 7764632, "category_id": 1, "iscrowd": 0, "bbox": [118, 304, 12, 79], "area": 369}, {"id": 7235949, "category_id": 1, "iscrowd": 0, "bbox": [81, 285, 36, 105], "area": 2434}, {"id": 986125, "category_id": 1, "iscrowd": 0, "bbox": [599, 281, 26, 72], "area": 1341}, {"id": 7759708, "category_id": 1, "iscrowd": 0, "bbox": [406, 279, 57, 126], "area": 3201}, {"id": 6119528, "category_id": 1, "iscrowd": 0, "bbox": [41, 291, 17, 35], "area": 283}, {"id": 1315863, "category_id": 1, "iscrowd": 0, "bbox": [572, 279, 20, 66], "area": 861}, {"id": 3881274, "category_id": 1, "iscrowd": 0, "bbox": [609, 273, 21, 43], "area": 239}, {"id": 2698544, "category_id": 1, "iscrowd": 1, "bbox": [77, 300, 398, 54], "area": 3955}, {"id": 5065802, "category_id": 5, "iscrowd": 0, "bbox": [17, 57, 623, 310], "area": 79598}, {"id": 9934744, "category_id": 184, "iscrowd": 0, "bbox": [117, 282, 521, 46], "area": 307}, {"id": 13810072, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 272], "area": 119464}, {"id": 9611701, "category_id": 191, "iscrowd": 0, "bbox": [0, 301, 640, 179], "area": 88241}, {"id": 6390142, "category_id": 193, "iscrowd": 0, "bbox": [0, 280, 62, 24], "area": 858}, {"id": 7963004, "category_id": 197, "iscrowd": 0, "bbox": [0, 270, 56, 19], "area": 774}], "file_name": "000000478862.png", "image_id": 478862}, {"segments_info": [{"id": 6707018, "category_id": 3, "iscrowd": 0, "bbox": [544, 56, 6, 5], "area": 28}, {"id": 6840668, "category_id": 3, "iscrowd": 0, "bbox": [518, 52, 3, 4], "area": 11}, {"id": 8747889, "category_id": 3, "iscrowd": 0, "bbox": [474, 61, 6, 5], "area": 29}, {"id": 8287079, "category_id": 3, "iscrowd": 0, "bbox": [513, 65, 10, 8], "area": 68}, {"id": 9468778, "category_id": 3, "iscrowd": 0, "bbox": [526, 58, 7, 6], "area": 38}, {"id": 10985363, "category_id": 3, "iscrowd": 0, "bbox": [367, 87, 20, 13], "area": 179}, {"id": 11510421, "category_id": 3, "iscrowd": 0, "bbox": [484, 68, 8, 9], "area": 50}, {"id": 9668728, "category_id": 3, "iscrowd": 0, "bbox": [487, 57, 18, 7], "area": 48}, {"id": 8352096, "category_id": 3, "iscrowd": 0, "bbox": [178, 87, 15, 12], "area": 153}, {"id": 5592443, "category_id": 7, "iscrowd": 0, "bbox": [102, 60, 485, 216], "area": 32318}, {"id": 10526096, "category_id": 8, "iscrowd": 0, "bbox": [457, 59, 14, 11], "area": 133}, {"id": 3551539, "category_id": 10, "iscrowd": 0, "bbox": [592, 44, 7, 7], "area": 44}, {"id": 7172978, "category_id": 144, "iscrowd": 0, "bbox": [0, 114, 579, 187], "area": 5361}, {"id": 4279124, "category_id": 147, "iscrowd": 0, "bbox": [0, 43, 640, 381], "area": 62657}, {"id": 7500137, "category_id": 149, "iscrowd": 0, "bbox": [0, 40, 548, 158], "area": 27343}, {"id": 5395280, "category_id": 184, "iscrowd": 0, "bbox": [0, 10, 640, 90], "area": 26821}, {"id": 6249305, "category_id": 185, "iscrowd": 0, "bbox": [431, 92, 19, 9], "area": 79}, {"id": 13154989, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 43], "area": 14935}, {"id": 4742757, "category_id": 193, "iscrowd": 0, "bbox": [0, 48, 612, 376], "area": 55030}, {"id": 5199963, "category_id": 194, "iscrowd": 0, "bbox": [590, 79, 50, 35], "area": 1303}, {"id": 9011316, "category_id": 197, "iscrowd": 0, "bbox": [443, 26, 197, 41], "area": 3718}, {"id": 5662059, "category_id": 199, "iscrowd": 0, "bbox": [0, 113, 628, 311], "area": 38974}], "file_name": "000000479030.png", "image_id": 479030}, {"segments_info": [{"id": 7632769, "category_id": 15, "iscrowd": 0, "bbox": [384, 168, 62, 35], "area": 1565}, {"id": 4542569, "category_id": 171, "iscrowd": 0, "bbox": [0, 123, 640, 79], "area": 28331}, {"id": 2898998, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 311], "area": 96501}, {"id": 13684176, "category_id": 187, "iscrowd": 0, "bbox": [195, 0, 343, 77], "area": 1038}, {"id": 3963489, "category_id": 193, "iscrowd": 0, "bbox": [0, 191, 640, 289], "area": 179665}], "file_name": "000000479099.png", "image_id": 479099}, {"segments_info": [{"id": 8625615, "category_id": 1, "iscrowd": 0, "bbox": [339, 157, 234, 257], "area": 25703}, {"id": 5858420, "category_id": 1, "iscrowd": 0, "bbox": [109, 148, 108, 268], "area": 14219}, {"id": 6125465, "category_id": 46, "iscrowd": 0, "bbox": [150, 259, 15, 32], "area": 254}, {"id": 3358009, "category_id": 62, "iscrowd": 0, "bbox": [519, 267, 121, 155], "area": 12035}, {"id": 6254202, "category_id": 62, "iscrowd": 0, "bbox": [333, 223, 99, 148], "area": 7355}, {"id": 1715787, "category_id": 62, "iscrowd": 0, "bbox": [494, 221, 91, 88], "area": 3926}, {"id": 2570052, "category_id": 62, "iscrowd": 0, "bbox": [54, 202, 148, 214], "area": 5789}, {"id": 10461856, "category_id": 73, "iscrowd": 0, "bbox": [262, 303, 161, 118], "area": 7106}, {"id": 3754317, "category_id": 125, "iscrowd": 0, "bbox": [129, 375, 48, 39], "area": 951}, {"id": 7892829, "category_id": 128, "iscrowd": 0, "bbox": [0, 137, 125, 48], "area": 2477}, {"id": 2303791, "category_id": 171, "iscrowd": 0, "bbox": [34, 171, 71, 54], "area": 2023}, {"id": 7371389, "category_id": 177, "iscrowd": 0, "bbox": [234, 87, 406, 249], "area": 52821}, {"id": 6257520, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 44547}, {"id": 3097163, "category_id": 185, "iscrowd": 0, "bbox": [0, 218, 244, 90], "area": 5521}, {"id": 16711421, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 545, 174], "area": 55579}, {"id": 403764, "category_id": 193, "iscrowd": 0, "bbox": [268, 348, 18, 25], "area": 256}, {"id": 4739144, "category_id": 194, "iscrowd": 0, "bbox": [319, 349, 82, 26], "area": 745}, {"id": 9013120, "category_id": 197, "iscrowd": 0, "bbox": [0, 33, 444, 191], "area": 10731}], "file_name": "000000479126.png", "image_id": 479126}, {"segments_info": [{"id": 3951730, "category_id": 1, "iscrowd": 0, "bbox": [186, 88, 47, 69], "area": 2035}, {"id": 9673132, "category_id": 1, "iscrowd": 0, "bbox": [140, 0, 45, 55], "area": 1158}, {"id": 8759756, "category_id": 1, "iscrowd": 0, "bbox": [418, 0, 19, 19], "area": 243}, {"id": 3158375, "category_id": 1, "iscrowd": 0, "bbox": [439, 0, 31, 12], "area": 316}, {"id": 4866379, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 83, 332], "area": 18168}, {"id": 1974324, "category_id": 1, "iscrowd": 0, "bbox": [63, 1, 91, 232], "area": 16670}, {"id": 1252145, "category_id": 1, "iscrowd": 0, "bbox": [485, 43, 15, 123], "area": 968}, {"id": 2170151, "category_id": 1, "iscrowd": 0, "bbox": [255, 130, 63, 201], "area": 7376}, {"id": 4078150, "category_id": 1, "iscrowd": 0, "bbox": [331, 1, 121, 254], "area": 21264}, {"id": 6524326, "category_id": 18, "iscrowd": 0, "bbox": [67, 224, 196, 104], "area": 14399}, {"id": 394765, "category_id": 31, "iscrowd": 0, "bbox": [0, 125, 62, 121], "area": 3538}, {"id": 5601945, "category_id": 31, "iscrowd": 0, "bbox": [171, 165, 70, 70], "area": 1698}, {"id": 5604028, "category_id": 53, "iscrowd": 0, "bbox": [228, 89, 75, 51], "area": 2444}, {"id": 3112047, "category_id": 53, "iscrowd": 0, "bbox": [172, 133, 13, 13], "area": 125}, {"id": 5945523, "category_id": 53, "iscrowd": 0, "bbox": [151, 96, 45, 47], "area": 1312}, {"id": 4956562, "category_id": 53, "iscrowd": 0, "bbox": [152, 131, 10, 12], "area": 104}, {"id": 2979695, "category_id": 53, "iscrowd": 0, "bbox": [160, 133, 14, 14], "area": 150}, {"id": 6473156, "category_id": 53, "iscrowd": 0, "bbox": [264, 88, 78, 45], "area": 1651}, {"id": 5026540, "category_id": 55, "iscrowd": 0, "bbox": [311, 78, 33, 30], "area": 545}, {"id": 11252672, "category_id": 100, "iscrowd": 0, "bbox": [0, 0, 46, 27], "area": 507}, {"id": 6593983, "category_id": 122, "iscrowd": 0, "bbox": [56, 0, 444, 147], "area": 21171}, {"id": 7316422, "category_id": 177, "iscrowd": 0, "bbox": [38, 0, 102, 51], "area": 1782}, {"id": 856090, "category_id": 191, "iscrowd": 0, "bbox": [130, 231, 221, 101], "area": 6173}, {"id": 12633296, "category_id": 195, "iscrowd": 0, "bbox": [427, 0, 32, 44], "area": 684}], "file_name": "000000479155.png", "image_id": 479155}, {"segments_info": [{"id": 6709360, "category_id": 1, "iscrowd": 0, "bbox": [187, 205, 125, 79], "area": 4929}, {"id": 9474995, "category_id": 1, "iscrowd": 0, "bbox": [303, 183, 94, 101], "area": 8457}, {"id": 5069670, "category_id": 44, "iscrowd": 0, "bbox": [49, 374, 35, 49], "area": 1458}, {"id": 8028042, "category_id": 51, "iscrowd": 0, "bbox": [9, 409, 36, 24], "area": 712}, {"id": 2632236, "category_id": 72, "iscrowd": 0, "bbox": [165, 156, 245, 154], "area": 21313}, {"id": 3422011, "category_id": 84, "iscrowd": 0, "bbox": [357, 422, 4, 52], "area": 170}, {"id": 2830909, "category_id": 84, "iscrowd": 0, "bbox": [207, 411, 9, 48], "area": 345}, {"id": 5605269, "category_id": 84, "iscrowd": 0, "bbox": [258, 413, 5, 34], "area": 166}, {"id": 2764600, "category_id": 84, "iscrowd": 0, "bbox": [307, 414, 6, 50], "area": 188}, {"id": 3553861, "category_id": 84, "iscrowd": 0, "bbox": [142, 409, 291, 65], "area": 14621}, {"id": 4345180, "category_id": 85, "iscrowd": 0, "bbox": [481, 357, 54, 69], "area": 2814}, {"id": 2963514, "category_id": 85, "iscrowd": 0, "bbox": [236, 110, 17, 15], "area": 217}, {"id": 4219011, "category_id": 85, "iscrowd": 0, "bbox": [421, 190, 20, 20], "area": 291}, {"id": 6517126, "category_id": 86, "iscrowd": 0, "bbox": [313, 303, 39, 39], "area": 1184}, {"id": 2502710, "category_id": 86, "iscrowd": 0, "bbox": [465, 388, 26, 41], "area": 919}, {"id": 8229275, "category_id": 86, "iscrowd": 0, "bbox": [386, 291, 31, 50], "area": 1255}, {"id": 3361120, "category_id": 86, "iscrowd": 0, "bbox": [115, 287, 37, 47], "area": 1351}, {"id": 3358274, "category_id": 86, "iscrowd": 0, "bbox": [210, 310, 17, 28], "area": 389}, {"id": 2435636, "category_id": 86, "iscrowd": 0, "bbox": [572, 262, 35, 44], "area": 1224}, {"id": 3620171, "category_id": 86, "iscrowd": 0, "bbox": [187, 298, 19, 37], "area": 487}, {"id": 2830658, "category_id": 86, "iscrowd": 0, "bbox": [423, 292, 31, 50], "area": 1305}, {"id": 6648455, "category_id": 86, "iscrowd": 0, "bbox": [227, 300, 37, 39], "area": 1142}, {"id": 5076642, "category_id": 86, "iscrowd": 0, "bbox": [152, 312, 19, 23], "area": 385}, {"id": 5201043, "category_id": 86, "iscrowd": 0, "bbox": [355, 320, 27, 22], "area": 504}, {"id": 3098489, "category_id": 130, "iscrowd": 0, "bbox": [557, 110, 83, 199], "area": 9763}, {"id": 4083026, "category_id": 133, "iscrowd": 0, "bbox": [172, 0, 468, 133], "area": 27837}, {"id": 2435120, "category_id": 156, "iscrowd": 0, "bbox": [89, 305, 383, 175], "area": 32225}, {"id": 7306887, "category_id": 171, "iscrowd": 0, "bbox": [466, 435, 74, 21], "area": 791}, {"id": 1975348, "category_id": 189, "iscrowd": 0, "bbox": [0, 320, 566, 132], "area": 7185}, {"id": 3686984, "category_id": 190, "iscrowd": 0, "bbox": [481, 443, 57, 20], "area": 507}, {"id": 5405833, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 412], "area": 90594}], "file_name": "000000479248.png", "image_id": 479248}, {"segments_info": [{"id": 5785665, "category_id": 47, "iscrowd": 0, "bbox": [392, 30, 108, 147], "area": 13312}, {"id": 4407096, "category_id": 50, "iscrowd": 0, "bbox": [1, 5, 51, 67], "area": 1828}, {"id": 5274010, "category_id": 52, "iscrowd": 0, "bbox": [149, 69, 93, 68], "area": 4114}, {"id": 8493982, "category_id": 52, "iscrowd": 0, "bbox": [272, 208, 70, 75], "area": 3462}, {"id": 5997463, "category_id": 52, "iscrowd": 0, "bbox": [16, 151, 84, 102], "area": 6056}, {"id": 6458523, "category_id": 52, "iscrowd": 0, "bbox": [284, 82, 69, 56], "area": 1997}, {"id": 6193050, "category_id": 52, "iscrowd": 0, "bbox": [161, 35, 101, 76], "area": 3112}, {"id": 4947861, "category_id": 52, "iscrowd": 0, "bbox": [265, 105, 66, 63], "area": 3285}, {"id": 5997212, "category_id": 52, "iscrowd": 0, "bbox": [31, 79, 156, 125], "area": 10369}, {"id": 8362400, "category_id": 52, "iscrowd": 0, "bbox": [275, 166, 62, 48], "area": 2433}, {"id": 6981786, "category_id": 52, "iscrowd": 0, "bbox": [233, 23, 81, 78], "area": 4280}, {"id": 5670038, "category_id": 52, "iscrowd": 0, "bbox": [147, 213, 69, 127], "area": 6648}, {"id": 6325391, "category_id": 52, "iscrowd": 0, "bbox": [329, 116, 72, 76], "area": 4208}, {"id": 5210001, "category_id": 52, "iscrowd": 0, "bbox": [216, 240, 80, 96], "area": 5889}, {"id": 7899025, "category_id": 52, "iscrowd": 0, "bbox": [83, 187, 82, 55], "area": 3220}, {"id": 677772, "category_id": 55, "iscrowd": 0, "bbox": [425, 180, 75, 150], "area": 7182}, {"id": 2375015, "category_id": 59, "iscrowd": 0, "bbox": [0, 21, 426, 354], "area": 60600}, {"id": 5332334, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 480, 375], "area": 4951}, {"id": 6055785, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 86, 90], "area": 3276}, {"id": 7697009, "category_id": 196, "iscrowd": 0, "bbox": [278, 0, 144, 96], "area": 6635}, {"id": 8025724, "category_id": 199, "iscrowd": 0, "bbox": [471, 0, 29, 14], "area": 243}], "file_name": "000000479448.png", "image_id": 479448}, {"segments_info": [{"id": 1988508, "category_id": 53, "iscrowd": 0, "bbox": [545, 284, 68, 66], "area": 3585}, {"id": 2783942, "category_id": 53, "iscrowd": 0, "bbox": [297, 149, 58, 50], "area": 1990}, {"id": 2767783, "category_id": 53, "iscrowd": 0, "bbox": [505, 269, 40, 60], "area": 1435}, {"id": 2703271, "category_id": 53, "iscrowd": 0, "bbox": [560, 243, 59, 46], "area": 1999}, {"id": 2839227, "category_id": 53, "iscrowd": 0, "bbox": [401, 193, 47, 36], "area": 1340}, {"id": 2440369, "category_id": 53, "iscrowd": 0, "bbox": [405, 246, 71, 70], "area": 3681}, {"id": 3428545, "category_id": 53, "iscrowd": 0, "bbox": [439, 197, 59, 51], "area": 1798}, {"id": 3756462, "category_id": 53, "iscrowd": 0, "bbox": [506, 341, 63, 37], "area": 1555}, {"id": 2173117, "category_id": 53, "iscrowd": 0, "bbox": [353, 213, 69, 69], "area": 2786}, {"id": 2775223, "category_id": 53, "iscrowd": 0, "bbox": [325, 187, 56, 38], "area": 1471}, {"id": 1926584, "category_id": 53, "iscrowd": 0, "bbox": [460, 226, 61, 49], "area": 2141}, {"id": 2964145, "category_id": 53, "iscrowd": 0, "bbox": [289, 238, 75, 50], "area": 2388}, {"id": 5015504, "category_id": 53, "iscrowd": 0, "bbox": [73, 159, 63, 29], "area": 1031}, {"id": 4616094, "category_id": 53, "iscrowd": 1, "bbox": [1, 66, 639, 339], "area": 85433}, {"id": 1865153, "category_id": 55, "iscrowd": 0, "bbox": [1, 166, 637, 262], "area": 99913}, {"id": 4089194, "category_id": 122, "iscrowd": 0, "bbox": [0, 48, 512, 380], "area": 3501}, {"id": 13287087, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 640, 155], "area": 27639}, {"id": 6645354, "category_id": 199, "iscrowd": 0, "bbox": [247, 0, 393, 305], "area": 17006}], "file_name": "000000479596.png", "image_id": 479596}, {"segments_info": [{"id": 12110785, "category_id": 47, "iscrowd": 0, "bbox": [72, 0, 153, 36], "area": 4622}, {"id": 11975609, "category_id": 51, "iscrowd": 0, "bbox": [1, 43, 638, 378], "area": 52480}, {"id": 5539219, "category_id": 54, "iscrowd": 0, "bbox": [1, 55, 596, 344], "area": 150167}, {"id": 3448913, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 170, 428], "area": 23392}], "file_name": "000000479732.png", "image_id": 479732}, {"segments_info": [{"id": 8821394, "category_id": 1, "iscrowd": 0, "bbox": [117, 336, 5, 15], "area": 50}, {"id": 5460815, "category_id": 1, "iscrowd": 0, "bbox": [90, 343, 5, 12], "area": 38}, {"id": 7901581, "category_id": 1, "iscrowd": 0, "bbox": [128, 332, 3, 12], "area": 30}, {"id": 12237237, "category_id": 5, "iscrowd": 0, "bbox": [117, 261, 28, 17], "area": 168}, {"id": 11511964, "category_id": 5, "iscrowd": 0, "bbox": [1, 233, 324, 214], "area": 19052}, {"id": 8221035, "category_id": 8, "iscrowd": 0, "bbox": [432, 508, 46, 111], "area": 3123}, {"id": 8421757, "category_id": 8, "iscrowd": 0, "bbox": [386, 354, 74, 31], "area": 1874}, {"id": 9278352, "category_id": 149, "iscrowd": 0, "bbox": [0, 267, 478, 373], "area": 139903}, {"id": 5917498, "category_id": 184, "iscrowd": 0, "bbox": [0, 262, 55, 12], "area": 375}, {"id": 14982243, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 478, 279], "area": 129568}, {"id": 10915957, "category_id": 192, "iscrowd": 0, "bbox": [352, 272, 22, 11], "area": 163}, {"id": 9145470, "category_id": 197, "iscrowd": 0, "bbox": [169, 267, 138, 26], "area": 2254}], "file_name": "000000479912.png", "image_id": 479912}, {"segments_info": [{"id": 6582334, "category_id": 1, "iscrowd": 0, "bbox": [87, 99, 184, 159], "area": 6204}, {"id": 13679542, "category_id": 37, "iscrowd": 0, "bbox": [294, 256, 25, 23], "area": 440}, {"id": 4218939, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 393], "area": 244637}], "file_name": "000000479953.png", "image_id": 479953}, {"segments_info": [{"id": 7632274, "category_id": 1, "iscrowd": 0, "bbox": [2, 54, 116, 237], "area": 10716}, {"id": 4869231, "category_id": 1, "iscrowd": 0, "bbox": [512, 58, 128, 371], "area": 16792}, {"id": 3685978, "category_id": 1, "iscrowd": 0, "bbox": [364, 54, 211, 417], "area": 32652}, {"id": 4805230, "category_id": 1, "iscrowd": 0, "bbox": [101, 78, 123, 196], "area": 9039}, {"id": 4410206, "category_id": 3, "iscrowd": 0, "bbox": [114, 107, 155, 57], "area": 2178}, {"id": 6117734, "category_id": 3, "iscrowd": 0, "bbox": [302, 98, 149, 62], "area": 4391}, {"id": 2896200, "category_id": 4, "iscrowd": 0, "bbox": [60, 152, 226, 163], "area": 17286}, {"id": 3947851, "category_id": 4, "iscrowd": 0, "bbox": [222, 228, 306, 235], "area": 45566}, {"id": 5197155, "category_id": 32, "iscrowd": 0, "bbox": [72, 88, 8, 23], "area": 106}, {"id": 5265002, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 309], "area": 64395}, {"id": 8295353, "category_id": 149, "iscrowd": 0, "bbox": [0, 101, 640, 370], "area": 81816}, {"id": 3224379, "category_id": 184, "iscrowd": 0, "bbox": [373, 0, 267, 89], "area": 4476}, {"id": 9405827, "category_id": 187, "iscrowd": 0, "bbox": [419, 0, 221, 87], "area": 6588}, {"id": 5462390, "category_id": 191, "iscrowd": 0, "bbox": [186, 249, 55, 41], "area": 471}], "file_name": "000000480021.png", "image_id": 480021}, {"segments_info": [{"id": 7365450, "category_id": 44, "iscrowd": 0, "bbox": [132, 233, 21, 31], "area": 517}, {"id": 2496020, "category_id": 49, "iscrowd": 0, "bbox": [243, 159, 6, 8], "area": 24}, {"id": 2364438, "category_id": 49, "iscrowd": 0, "bbox": [233, 168, 16, 12], "area": 55}, {"id": 4338482, "category_id": 49, "iscrowd": 0, "bbox": [233, 153, 11, 15], "area": 50}, {"id": 2561557, "category_id": 49, "iscrowd": 0, "bbox": [230, 164, 15, 15], "area": 66}, {"id": 7827309, "category_id": 49, "iscrowd": 0, "bbox": [219, 155, 14, 18], "area": 74}, {"id": 5786956, "category_id": 49, "iscrowd": 0, "bbox": [223, 154, 16, 24], "area": 98}, {"id": 5065313, "category_id": 50, "iscrowd": 0, "bbox": [393, 193, 13, 24], "area": 184}, {"id": 2764638, "category_id": 51, "iscrowd": 0, "bbox": [261, 407, 111, 66], "area": 4156}, {"id": 3904690, "category_id": 52, "iscrowd": 0, "bbox": [279, 373, 67, 66], "area": 3172}, {"id": 2962018, "category_id": 62, "iscrowd": 0, "bbox": [61, 394, 129, 89], "area": 6607}, {"id": 6384266, "category_id": 62, "iscrowd": 0, "bbox": [579, 415, 56, 61], "area": 311}, {"id": 4672879, "category_id": 62, "iscrowd": 0, "bbox": [475, 339, 99, 199], "area": 5842}, {"id": 2962787, "category_id": 62, "iscrowd": 0, "bbox": [218, 359, 76, 71], "area": 3611}, {"id": 2433356, "category_id": 62, "iscrowd": 0, "bbox": [370, 499, 132, 141], "area": 9330}, {"id": 3156039, "category_id": 62, "iscrowd": 0, "bbox": [477, 423, 154, 206], "area": 13002}, {"id": 4416156, "category_id": 67, "iscrowd": 0, "bbox": [6, 367, 606, 265], "area": 81596}, {"id": 4145744, "category_id": 79, "iscrowd": 0, "bbox": [2, 272, 144, 246], "area": 23707}, {"id": 11973306, "category_id": 81, "iscrowd": 0, "bbox": [460, 265, 155, 30], "area": 2608}, {"id": 10269387, "category_id": 81, "iscrowd": 0, "bbox": [120, 271, 119, 65], "area": 4264}, {"id": 5329248, "category_id": 82, "iscrowd": 0, "bbox": [249, 263, 88, 127], "area": 8039}, {"id": 6319241, "category_id": 107, "iscrowd": 0, "bbox": [82, 235, 558, 128], "area": 18368}, {"id": 4480904, "category_id": 176, "iscrowd": 0, "bbox": [0, 136, 640, 151], "area": 26970}, {"id": 13227490, "category_id": 181, "iscrowd": 0, "bbox": [145, 0, 495, 223], "area": 22469}, {"id": 7699854, "category_id": 188, "iscrowd": 0, "bbox": [38, 0, 602, 494], "area": 98658}, {"id": 2370396, "category_id": 189, "iscrowd": 0, "bbox": [0, 382, 626, 258], "area": 11656}, {"id": 2233626, "category_id": 190, "iscrowd": 0, "bbox": [357, 476, 283, 164], "area": 9820}, {"id": 8424607, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 250], "area": 42694}], "file_name": "000000480122.png", "image_id": 480122}, {"segments_info": [{"id": 2108744, "category_id": 67, "iscrowd": 0, "bbox": [0, 3, 637, 472], "area": 157457}, {"id": 6710103, "category_id": 77, "iscrowd": 0, "bbox": [263, 159, 193, 293], "area": 51046}, {"id": 1848136, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 9098}, {"id": 10853533, "category_id": 196, "iscrowd": 0, "bbox": [21, 0, 619, 270], "area": 56639}], "file_name": "000000480212.png", "image_id": 480212}, {"segments_info": [{"id": 6311584, "category_id": 1, "iscrowd": 0, "bbox": [399, 195, 241, 185], "area": 16353}, {"id": 1909063, "category_id": 1, "iscrowd": 0, "bbox": [470, 83, 56, 58], "area": 1810}, {"id": 4042452, "category_id": 52, "iscrowd": 0, "bbox": [323, 125, 71, 33], "area": 1151}, {"id": 6542054, "category_id": 52, "iscrowd": 0, "bbox": [356, 118, 46, 27], "area": 901}, {"id": 5816539, "category_id": 52, "iscrowd": 0, "bbox": [312, 126, 13, 20], "area": 172}, {"id": 941701, "category_id": 52, "iscrowd": 0, "bbox": [373, 163, 23, 12], "area": 172}, {"id": 3845071, "category_id": 52, "iscrowd": 0, "bbox": [486, 104, 86, 68], "area": 3432}, {"id": 1470883, "category_id": 52, "iscrowd": 0, "bbox": [318, 140, 12, 16], "area": 131}, {"id": 2467795, "category_id": 52, "iscrowd": 0, "bbox": [396, 91, 91, 81], "area": 4533}, {"id": 4304850, "category_id": 52, "iscrowd": 0, "bbox": [294, 114, 24, 21], "area": 243}, {"id": 2334413, "category_id": 52, "iscrowd": 0, "bbox": [350, 164, 17, 11], "area": 131}, {"id": 5286605, "category_id": 52, "iscrowd": 0, "bbox": [322, 164, 13, 13], "area": 125}, {"id": 4161703, "category_id": 122, "iscrowd": 0, "bbox": [264, 113, 227, 79], "area": 5139}, {"id": 4151941, "category_id": 194, "iscrowd": 0, "bbox": [0, 369, 640, 102], "area": 36922}, {"id": 3885151, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 399], "area": 88963}], "file_name": "000000480275.png", "image_id": 480275}, {"segments_info": [{"id": 4808029, "category_id": 25, "iscrowd": 0, "bbox": [68, 212, 88, 272], "area": 10332}, {"id": 2506054, "category_id": 25, "iscrowd": 0, "bbox": [157, 5, 389, 538], "area": 41855}, {"id": 3101001, "category_id": 184, "iscrowd": 0, "bbox": [0, 164, 640, 426], "area": 152022}, {"id": 15592168, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 400], "area": 172594}], "file_name": "000000480842.png", "image_id": 480842}, {"segments_info": [{"id": 6778758, "category_id": 1, "iscrowd": 0, "bbox": [63, 9, 311, 631], "area": 117302}, {"id": 8038352, "category_id": 58, "iscrowd": 0, "bbox": [195, 313, 39, 36], "area": 963}, {"id": 12302516, "category_id": 62, "iscrowd": 0, "bbox": [0, 352, 47, 203], "area": 4535}, {"id": 4343104, "category_id": 62, "iscrowd": 0, "bbox": [56, 73, 319, 524], "area": 19725}, {"id": 8817036, "category_id": 84, "iscrowd": 0, "bbox": [367, 229, 107, 83], "area": 6002}, {"id": 6447456, "category_id": 118, "iscrowd": 0, "bbox": [0, 341, 482, 299], "area": 66105}, {"id": 2370098, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 239, 202], "area": 24840}, {"id": 5924197, "category_id": 195, "iscrowd": 0, "bbox": [355, 211, 127, 100], "area": 4007}, {"id": 7766932, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 482, 401], "area": 52601}], "file_name": "000000480936.png", "image_id": 480936}, {"segments_info": [{"id": 3683632, "category_id": 3, "iscrowd": 0, "bbox": [21, 355, 103, 43], "area": 2719}, {"id": 5914153, "category_id": 3, "iscrowd": 0, "bbox": [255, 346, 59, 31], "area": 1316}, {"id": 4208445, "category_id": 3, "iscrowd": 0, "bbox": [131, 345, 93, 31], "area": 1108}, {"id": 4012340, "category_id": 3, "iscrowd": 0, "bbox": [386, 353, 17, 19], "area": 156}, {"id": 6973799, "category_id": 3, "iscrowd": 0, "bbox": [464, 349, 15, 19], "area": 243}, {"id": 3682604, "category_id": 3, "iscrowd": 0, "bbox": [373, 351, 19, 22], "area": 356}, {"id": 3485483, "category_id": 3, "iscrowd": 0, "bbox": [133, 357, 92, 35], "area": 2551}, {"id": 3163994, "category_id": 6, "iscrowd": 0, "bbox": [407, 341, 43, 31], "area": 861}, {"id": 3823471, "category_id": 6, "iscrowd": 0, "bbox": [306, 333, 49, 21], "area": 760}, {"id": 3037302, "category_id": 6, "iscrowd": 0, "bbox": [223, 331, 76, 50], "area": 2094}, {"id": 2511481, "category_id": 10, "iscrowd": 0, "bbox": [342, 47, 58, 197], "area": 9429}, {"id": 1992597, "category_id": 10, "iscrowd": 0, "bbox": [212, 202, 28, 51], "area": 1117}, {"id": 2052205, "category_id": 10, "iscrowd": 0, "bbox": [300, 193, 16, 35], "area": 510}, {"id": 11118245, "category_id": 13, "iscrowd": 0, "bbox": [72, 216, 44, 71], "area": 2975}, {"id": 4342339, "category_id": 149, "iscrowd": 0, "bbox": [0, 364, 480, 276], "area": 55127}, {"id": 6381407, "category_id": 184, "iscrowd": 0, "bbox": [0, 34, 480, 344], "area": 106646}, {"id": 2238507, "category_id": 185, "iscrowd": 0, "bbox": [114, 355, 30, 25], "area": 305}, {"id": 12689800, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 182], "area": 44765}, {"id": 10529712, "category_id": 191, "iscrowd": 0, "bbox": [0, 357, 480, 283], "area": 32178}, {"id": 4217446, "category_id": 193, "iscrowd": 0, "bbox": [50, 385, 430, 244], "area": 30294}], "file_name": "000000480944.png", "image_id": 480944}, {"segments_info": [{"id": 5656422, "category_id": 1, "iscrowd": 0, "bbox": [267, 293, 23, 89], "area": 1206}, {"id": 3750229, "category_id": 1, "iscrowd": 0, "bbox": [370, 279, 5, 45], "area": 165}, {"id": 5800891, "category_id": 1, "iscrowd": 0, "bbox": [33, 299, 16, 29], "area": 324}, {"id": 5789023, "category_id": 1, "iscrowd": 0, "bbox": [47, 296, 28, 33], "area": 567}, {"id": 6447475, "category_id": 1, "iscrowd": 0, "bbox": [320, 275, 27, 104], "area": 1556}, {"id": 4146270, "category_id": 1, "iscrowd": 0, "bbox": [10, 303, 14, 26], "area": 234}, {"id": 5068404, "category_id": 1, "iscrowd": 0, "bbox": [302, 298, 13, 19], "area": 163}, {"id": 6710898, "category_id": 1, "iscrowd": 0, "bbox": [290, 300, 15, 19], "area": 177}, {"id": 8026238, "category_id": 4, "iscrowd": 0, "bbox": [346, 306, 26, 26], "area": 547}, {"id": 6930895, "category_id": 4, "iscrowd": 0, "bbox": [344, 297, 17, 10], "area": 103}, {"id": 13420998, "category_id": 4, "iscrowd": 0, "bbox": [0, 330, 36, 37], "area": 953}, {"id": 6249573, "category_id": 4, "iscrowd": 0, "bbox": [15, 69, 329, 421], "area": 82235}, {"id": 11710640, "category_id": 4, "iscrowd": 0, "bbox": [287, 313, 42, 51], "area": 1369}, {"id": 5661310, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 364, 253], "area": 3038}, {"id": 5069685, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 375, 291], "area": 51196}, {"id": 14540510, "category_id": 187, "iscrowd": 0, "bbox": [0, 250, 17, 34], "area": 489}, {"id": 15263207, "category_id": 190, "iscrowd": 0, "bbox": [0, 323, 375, 177], "area": 34646}, {"id": 9080476, "category_id": 199, "iscrowd": 0, "bbox": [0, 248, 375, 60], "area": 3212}], "file_name": "000000480985.png", "image_id": 480985}, {"segments_info": [{"id": 5400182, "category_id": 19, "iscrowd": 0, "bbox": [188, 136, 257, 310], "area": 25986}, {"id": 15133161, "category_id": 159, "iscrowd": 0, "bbox": [0, 60, 640, 386], "area": 59509}, {"id": 9870230, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 209], "area": 81284}, {"id": 5526861, "category_id": 185, "iscrowd": 0, "bbox": [0, 95, 640, 368], "area": 119954}, {"id": 15328212, "category_id": 187, "iscrowd": 0, "bbox": [204, 0, 436, 35], "area": 7324}, {"id": 10201007, "category_id": 193, "iscrowd": 0, "bbox": [0, 191, 120, 18], "area": 1725}], "file_name": "000000481159.png", "image_id": 481159}, {"segments_info": [{"id": 11643074, "category_id": 1, "iscrowd": 0, "bbox": [98, 97, 223, 485], "area": 47122}, {"id": 7298904, "category_id": 44, "iscrowd": 0, "bbox": [134, 396, 26, 48], "area": 902}, {"id": 5447456, "category_id": 44, "iscrowd": 0, "bbox": [4, 401, 28, 9], "area": 91}, {"id": 5381407, "category_id": 44, "iscrowd": 0, "bbox": [30, 466, 43, 33], "area": 590}, {"id": 5776421, "category_id": 44, "iscrowd": 0, "bbox": [41, 472, 45, 38], "area": 1125}, {"id": 5447199, "category_id": 44, "iscrowd": 0, "bbox": [10, 407, 53, 40], "area": 818}, {"id": 5249564, "category_id": 44, "iscrowd": 0, "bbox": [0, 404, 56, 26], "area": 579}, {"id": 5315356, "category_id": 44, "iscrowd": 0, "bbox": [51, 400, 39, 40], "area": 915}, {"id": 5579298, "category_id": 44, "iscrowd": 0, "bbox": [65, 494, 19, 25], "area": 322}, {"id": 7233651, "category_id": 46, "iscrowd": 0, "bbox": [301, 68, 22, 40], "area": 621}, {"id": 7362144, "category_id": 46, "iscrowd": 0, "bbox": [396, 57, 15, 10], "area": 129}, {"id": 8285555, "category_id": 46, "iscrowd": 0, "bbox": [276, 90, 12, 19], "area": 198}, {"id": 7560558, "category_id": 46, "iscrowd": 0, "bbox": [410, 70, 17, 32], "area": 340}, {"id": 7429747, "category_id": 46, "iscrowd": 0, "bbox": [388, 70, 24, 33], "area": 633}, {"id": 8614772, "category_id": 46, "iscrowd": 0, "bbox": [251, 91, 15, 21], "area": 272}, {"id": 7232626, "category_id": 46, "iscrowd": 0, "bbox": [370, 71, 18, 34], "area": 430}, {"id": 7297640, "category_id": 46, "iscrowd": 0, "bbox": [353, 59, 14, 45], "area": 327}, {"id": 8022129, "category_id": 46, "iscrowd": 0, "bbox": [290, 93, 11, 16], "area": 166}, {"id": 10723239, "category_id": 47, "iscrowd": 0, "bbox": [360, 118, 25, 17], "area": 201}, {"id": 9929584, "category_id": 47, "iscrowd": 0, "bbox": [271, 136, 18, 12], "area": 134}, {"id": 9206133, "category_id": 47, "iscrowd": 0, "bbox": [297, 177, 13, 17], "area": 138}, {"id": 10921638, "category_id": 47, "iscrowd": 0, "bbox": [318, 141, 20, 18], "area": 345}, {"id": 8619406, "category_id": 47, "iscrowd": 0, "bbox": [311, 124, 18, 22], "area": 196}, {"id": 9207171, "category_id": 47, "iscrowd": 0, "bbox": [316, 177, 8, 17], "area": 117}, {"id": 9537680, "category_id": 47, "iscrowd": 0, "bbox": [355, 134, 20, 24], "area": 401}, {"id": 8481389, "category_id": 47, "iscrowd": 0, "bbox": [320, 179, 17, 27], "area": 260}, {"id": 10197138, "category_id": 47, "iscrowd": 0, "bbox": [274, 146, 15, 15], "area": 192}, {"id": 10721966, "category_id": 47, "iscrowd": 0, "bbox": [287, 135, 24, 26], "area": 486}, {"id": 7693945, "category_id": 47, "iscrowd": 1, "bbox": [59, 51, 368, 171], "area": 4680}, {"id": 12964062, "category_id": 51, "iscrowd": 0, "bbox": [51, 228, 80, 48], "area": 2567}, {"id": 7828071, "category_id": 64, "iscrowd": 0, "bbox": [0, 16, 100, 130], "area": 5443}, {"id": 10133958, "category_id": 107, "iscrowd": 0, "bbox": [0, 252, 184, 49], "area": 3900}, {"id": 7497871, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 152681}, {"id": 9857135, "category_id": 190, "iscrowd": 0, "bbox": [134, 511, 293, 129], "area": 26160}, {"id": 8019590, "category_id": 196, "iscrowd": 0, "bbox": [99, 474, 41, 60], "area": 1284}, {"id": 12372431, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 270, 243], "area": 12982}], "file_name": "000000481386.png", "image_id": 481386}, {"segments_info": [{"id": 6517393, "category_id": 1, "iscrowd": 0, "bbox": [246, 275, 123, 140], "area": 4719}, {"id": 3026741, "category_id": 1, "iscrowd": 0, "bbox": [203, 9, 45, 49], "area": 1605}, {"id": 3091244, "category_id": 1, "iscrowd": 0, "bbox": [292, 21, 43, 56], "area": 1274}, {"id": 7439011, "category_id": 1, "iscrowd": 0, "bbox": [341, 202, 96, 139], "area": 4447}, {"id": 7309222, "category_id": 1, "iscrowd": 0, "bbox": [539, 201, 74, 169], "area": 5070}, {"id": 4541016, "category_id": 1, "iscrowd": 0, "bbox": [33, 303, 78, 170], "area": 7284}, {"id": 4144708, "category_id": 1, "iscrowd": 0, "bbox": [65, 4, 63, 133], "area": 4000}, {"id": 3358558, "category_id": 1, "iscrowd": 0, "bbox": [392, 290, 124, 137], "area": 5494}, {"id": 3689061, "category_id": 1, "iscrowd": 0, "bbox": [27, 35, 67, 162], "area": 4293}, {"id": 4539979, "category_id": 1, "iscrowd": 0, "bbox": [473, 90, 37, 60], "area": 1197}, {"id": 7768484, "category_id": 1, "iscrowd": 0, "bbox": [282, 269, 128, 180], "area": 5890}, {"id": 3422794, "category_id": 1, "iscrowd": 0, "bbox": [440, 117, 87, 143], "area": 4292}, {"id": 7703211, "category_id": 1, "iscrowd": 0, "bbox": [207, 148, 128, 142], "area": 5259}, {"id": 3816772, "category_id": 1, "iscrowd": 1, "bbox": [0, 0, 627, 184], "area": 38629}, {"id": 1312517, "category_id": 32, "iscrowd": 0, "bbox": [223, 30, 5, 16], "area": 50}, {"id": 4015948, "category_id": 32, "iscrowd": 0, "bbox": [299, 41, 16, 32], "area": 165}, {"id": 1115912, "category_id": 32, "iscrowd": 0, "bbox": [271, 43, 5, 20], "area": 59}, {"id": 3094881, "category_id": 32, "iscrowd": 0, "bbox": [412, 13, 8, 19], "area": 86}, {"id": 1514277, "category_id": 32, "iscrowd": 0, "bbox": [104, 13, 4, 7], "area": 18}, {"id": 2497569, "category_id": 32, "iscrowd": 0, "bbox": [366, 51, 10, 27], "area": 56}, {"id": 2773649, "category_id": 37, "iscrowd": 0, "bbox": [330, 290, 21, 22], "area": 245}, {"id": 1509637, "category_id": 62, "iscrowd": 0, "bbox": [530, 12, 28, 31], "area": 533}, {"id": 2102543, "category_id": 62, "iscrowd": 0, "bbox": [159, 37, 14, 47], "area": 255}, {"id": 2762276, "category_id": 62, "iscrowd": 0, "bbox": [313, 77, 42, 45], "area": 1097}, {"id": 2234645, "category_id": 62, "iscrowd": 0, "bbox": [324, 28, 17, 15], "area": 184}, {"id": 1181188, "category_id": 62, "iscrowd": 0, "bbox": [478, 69, 22, 23], "area": 370}, {"id": 3223083, "category_id": 62, "iscrowd": 0, "bbox": [286, 73, 42, 38], "area": 941}, {"id": 3090725, "category_id": 62, "iscrowd": 0, "bbox": [174, 55, 47, 60], "area": 1456}, {"id": 2893861, "category_id": 62, "iscrowd": 0, "bbox": [256, 67, 43, 48], "area": 1211}, {"id": 1380625, "category_id": 62, "iscrowd": 0, "bbox": [355, 33, 15, 14], "area": 142}, {"id": 2893863, "category_id": 62, "iscrowd": 0, "bbox": [226, 63, 46, 60], "area": 1125}, {"id": 2893605, "category_id": 62, "iscrowd": 0, "bbox": [204, 59, 42, 62], "area": 1298}, {"id": 2168336, "category_id": 62, "iscrowd": 0, "bbox": [380, 38, 22, 16], "area": 262}, {"id": 1575944, "category_id": 62, "iscrowd": 0, "bbox": [512, 8, 18, 32], "area": 337}, {"id": 8759246, "category_id": 145, "iscrowd": 0, "bbox": [0, 87, 640, 393], "area": 174507}, {"id": 3419170, "category_id": 200, "iscrowd": 0, "bbox": [147, 33, 71, 80], "area": 1846}], "file_name": "000000481390.png", "image_id": 481390}, {"segments_info": [{"id": 9080986, "category_id": 130, "iscrowd": 0, "bbox": [160, 238, 21, 16], "area": 158}, {"id": 3426671, "category_id": 177, "iscrowd": 0, "bbox": [0, 196, 469, 56], "area": 3708}, {"id": 16052712, "category_id": 181, "iscrowd": 0, "bbox": [15, 42, 576, 171], "area": 9957}, {"id": 5794159, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 611, 111], "area": 13174}, {"id": 8287338, "category_id": 190, "iscrowd": 0, "bbox": [33, 276, 552, 148], "area": 43367}, {"id": 4413293, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 303], "area": 89398}, {"id": 13683642, "category_id": 199, "iscrowd": 0, "bbox": [0, 121, 196, 96], "area": 4603}], "file_name": "000000481404.png", "image_id": 481404}, {"segments_info": [{"id": 7962491, "category_id": 1, "iscrowd": 0, "bbox": [202, 102, 133, 233], "area": 13095}, {"id": 11558070, "category_id": 34, "iscrowd": 0, "bbox": [293, 202, 59, 83], "area": 3710}, {"id": 9347499, "category_id": 154, "iscrowd": 0, "bbox": [0, 362, 640, 65], "area": 31174}, {"id": 11772311, "category_id": 155, "iscrowd": 0, "bbox": [0, 170, 640, 221], "area": 114737}, {"id": 13737339, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 184], "area": 110297}], "file_name": "000000481413.png", "image_id": 481413}, {"segments_info": [{"id": 10852025, "category_id": 1, "iscrowd": 0, "bbox": [294, 262, 50, 37], "area": 851}, {"id": 8285824, "category_id": 1, "iscrowd": 0, "bbox": [82, 259, 45, 32], "area": 582}, {"id": 4866132, "category_id": 19, "iscrowd": 0, "bbox": [223, 265, 149, 79], "area": 3998}, {"id": 4339525, "category_id": 19, "iscrowd": 0, "bbox": [13, 261, 146, 69], "area": 3770}, {"id": 13211518, "category_id": 92, "iscrowd": 0, "bbox": [69, 65, 35, 39], "area": 901}, {"id": 5129533, "category_id": 184, "iscrowd": 0, "bbox": [543, 210, 97, 60], "area": 4097}, {"id": 7695457, "category_id": 185, "iscrowd": 0, "bbox": [541, 257, 99, 37], "area": 2628}, {"id": 14459515, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 260], "area": 141907}, {"id": 6379628, "category_id": 194, "iscrowd": 0, "bbox": [0, 291, 640, 153], "area": 76065}], "file_name": "000000481480.png", "image_id": 481480}, {"segments_info": [{"id": 7103070, "category_id": 1, "iscrowd": 0, "bbox": [243, 92, 141, 190], "area": 11055}, {"id": 6381417, "category_id": 4, "iscrowd": 0, "bbox": [211, 133, 192, 324], "area": 31156}, {"id": 5068612, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 274], "area": 73482}, {"id": 6191734, "category_id": 185, "iscrowd": 0, "bbox": [83, 140, 404, 84], "area": 10219}, {"id": 16238993, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 620, 134], "area": 35291}, {"id": 9474961, "category_id": 191, "iscrowd": 0, "bbox": [0, 181, 640, 299], "area": 120836}, {"id": 4415067, "category_id": 193, "iscrowd": 0, "bbox": [0, 159, 640, 203], "area": 24270}], "file_name": "000000481567.png", "image_id": 481567}, {"segments_info": [{"id": 6252893, "category_id": 1, "iscrowd": 0, "bbox": [376, 83, 185, 545], "area": 48565}, {"id": 3820101, "category_id": 41, "iscrowd": 0, "bbox": [0, 149, 445, 490], "area": 180093}, {"id": 2508615, "category_id": 177, "iscrowd": 0, "bbox": [473, 519, 167, 120], "area": 17381}, {"id": 5384712, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 526], "area": 149547}], "file_name": "000000481573.png", "image_id": 481573}, {"segments_info": [{"id": 1185830, "category_id": 1, "iscrowd": 0, "bbox": [307, 150, 153, 182], "area": 9768}, {"id": 2041908, "category_id": 1, "iscrowd": 0, "bbox": [83, 124, 99, 300], "area": 17705}, {"id": 1712947, "category_id": 1, "iscrowd": 0, "bbox": [382, 101, 120, 326], "area": 22249}, {"id": 1778483, "category_id": 19, "iscrowd": 0, "bbox": [198, 47, 200, 375], "area": 40222}, {"id": 14082284, "category_id": 112, "iscrowd": 0, "bbox": [85, 6, 137, 388], "area": 10096}, {"id": 2240594, "category_id": 177, "iscrowd": 0, "bbox": [26, 0, 614, 427], "area": 39955}, {"id": 7764875, "category_id": 181, "iscrowd": 0, "bbox": [305, 0, 274, 291], "area": 13797}, {"id": 15528695, "category_id": 184, "iscrowd": 0, "bbox": [84, 26, 121, 164], "area": 15956}, {"id": 2307174, "category_id": 194, "iscrowd": 0, "bbox": [177, 377, 237, 50], "area": 4660}, {"id": 4482968, "category_id": 199, "iscrowd": 0, "bbox": [81, 0, 500, 427], "area": 49184}], "file_name": "000000481582.png", "image_id": 481582}, {"segments_info": [{"id": 4015678, "category_id": 64, "iscrowd": 0, "bbox": [339, 0, 41, 39], "area": 1219}, {"id": 5661020, "category_id": 64, "iscrowd": 0, "bbox": [158, 0, 52, 35], "area": 1287}, {"id": 5725015, "category_id": 64, "iscrowd": 0, "bbox": [388, 0, 55, 39], "area": 1423}, {"id": 8553084, "category_id": 64, "iscrowd": 0, "bbox": [271, 0, 52, 29], "area": 934}, {"id": 9014150, "category_id": 64, "iscrowd": 0, "bbox": [246, 4, 35, 47], "area": 1338}, {"id": 12365452, "category_id": 70, "iscrowd": 0, "bbox": [250, 165, 177, 155], "area": 18789}, {"id": 13289415, "category_id": 70, "iscrowd": 0, "bbox": [421, 149, 157, 172], "area": 18623}, {"id": 14210263, "category_id": 149, "iscrowd": 0, "bbox": [0, 130, 87, 57], "area": 2966}, {"id": 4609605, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 192], "area": 30166}, {"id": 15066852, "category_id": 187, "iscrowd": 0, "bbox": [16, 0, 195, 88], "area": 4113}, {"id": 7763832, "category_id": 191, "iscrowd": 0, "bbox": [0, 134, 640, 293], "area": 73438}, {"id": 4357464, "category_id": 193, "iscrowd": 0, "bbox": [102, 148, 122, 213], "area": 10585}, {"id": 5988698, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 142], "area": 27343}], "file_name": "000000482100.png", "image_id": 482100}, {"segments_info": [{"id": 4342348, "category_id": 1, "iscrowd": 0, "bbox": [93, 25, 298, 448], "area": 61565}, {"id": 11116195, "category_id": 1, "iscrowd": 0, "bbox": [406, 313, 96, 123], "area": 2954}, {"id": 9148853, "category_id": 1, "iscrowd": 0, "bbox": [242, 45, 222, 423], "area": 47185}, {"id": 10060669, "category_id": 32, "iscrowd": 0, "bbox": [203, 160, 36, 97], "area": 733}, {"id": 7502208, "category_id": 47, "iscrowd": 0, "bbox": [224, 446, 31, 34], "area": 943}, {"id": 6659006, "category_id": 49, "iscrowd": 0, "bbox": [373, 222, 50, 36], "area": 949}, {"id": 8428214, "category_id": 61, "iscrowd": 0, "bbox": [480, 443, 28, 23], "area": 516}, {"id": 9677513, "category_id": 61, "iscrowd": 0, "bbox": [514, 352, 13, 32], "area": 225}, {"id": 8823491, "category_id": 61, "iscrowd": 0, "bbox": [420, 356, 24, 32], "area": 608}, {"id": 9612235, "category_id": 61, "iscrowd": 0, "bbox": [497, 351, 24, 34], "area": 665}, {"id": 8692678, "category_id": 61, "iscrowd": 0, "bbox": [472, 354, 27, 33], "area": 693}, {"id": 13293279, "category_id": 61, "iscrowd": 0, "bbox": [384, 247, 148, 63], "area": 7513}, {"id": 5595777, "category_id": 61, "iscrowd": 0, "bbox": [455, 433, 26, 34], "area": 707}, {"id": 7306385, "category_id": 61, "iscrowd": 0, "bbox": [371, 430, 29, 40], "area": 803}, {"id": 9413305, "category_id": 61, "iscrowd": 0, "bbox": [393, 355, 29, 35], "area": 847}, {"id": 9151940, "category_id": 61, "iscrowd": 0, "bbox": [446, 356, 27, 30], "area": 686}, {"id": 6517391, "category_id": 61, "iscrowd": 0, "bbox": [504, 438, 22, 27], "area": 437}, {"id": 8294828, "category_id": 61, "iscrowd": 0, "bbox": [424, 442, 27, 28], "area": 691}, {"id": 8491661, "category_id": 86, "iscrowd": 0, "bbox": [547, 408, 56, 65], "area": 2709}, {"id": 6584705, "category_id": 119, "iscrowd": 0, "bbox": [222, 173, 416, 295], "area": 6038}, {"id": 7122657, "category_id": 154, "iscrowd": 0, "bbox": [0, 393, 99, 48], "area": 3973}, {"id": 4283500, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 146016}, {"id": 14934488, "category_id": 187, "iscrowd": 0, "bbox": [0, 101, 626, 220], "area": 9428}, {"id": 3829854, "category_id": 193, "iscrowd": 0, "bbox": [0, 429, 117, 51], "area": 4051}, {"id": 4209477, "category_id": 196, "iscrowd": 0, "bbox": [430, 433, 18, 10], "area": 129}], "file_name": "000000482275.png", "image_id": 482275}, {"segments_info": [{"id": 10134958, "category_id": 1, "iscrowd": 0, "bbox": [187, 317, 353, 126], "area": 23678}, {"id": 7960184, "category_id": 1, "iscrowd": 0, "bbox": [25, 46, 344, 427], "area": 70836}, {"id": 7240076, "category_id": 1, "iscrowd": 0, "bbox": [277, 119, 308, 254], "area": 39194}, {"id": 8879737, "category_id": 62, "iscrowd": 0, "bbox": [187, 140, 400, 334], "area": 23362}, {"id": 5728372, "category_id": 84, "iscrowd": 0, "bbox": [106, 111, 19, 29], "area": 226}, {"id": 3686710, "category_id": 84, "iscrowd": 0, "bbox": [124, 108, 14, 20], "area": 56}, {"id": 4743013, "category_id": 84, "iscrowd": 0, "bbox": [112, 103, 25, 34], "area": 341}, {"id": 5134946, "category_id": 84, "iscrowd": 0, "bbox": [79, 107, 22, 36], "area": 217}, {"id": 4410715, "category_id": 84, "iscrowd": 0, "bbox": [89, 106, 27, 38], "area": 282}, {"id": 6844540, "category_id": 90, "iscrowd": 0, "bbox": [361, 293, 7, 8], "area": 32}, {"id": 11381690, "category_id": 90, "iscrowd": 0, "bbox": [372, 237, 17, 39], "area": 289}, {"id": 11579058, "category_id": 90, "iscrowd": 0, "bbox": [368, 233, 33, 66], "area": 295}, {"id": 2633015, "category_id": 118, "iscrowd": 0, "bbox": [185, 284, 74, 59], "area": 1779}, {"id": 4802637, "category_id": 130, "iscrowd": 0, "bbox": [343, 0, 96, 164], "area": 6636}, {"id": 6196636, "category_id": 141, "iscrowd": 0, "bbox": [214, 393, 311, 87], "area": 14216}, {"id": 921879, "category_id": 177, "iscrowd": 0, "bbox": [0, 360, 640, 120], "area": 6993}, {"id": 1186081, "category_id": 181, "iscrowd": 0, "bbox": [509, 0, 131, 340], "area": 30574}, {"id": 1845049, "category_id": 189, "iscrowd": 0, "bbox": [270, 150, 85, 69], "area": 1779}, {"id": 2436665, "category_id": 190, "iscrowd": 0, "bbox": [88, 389, 543, 91], "area": 6085}, {"id": 7434094, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 468], "area": 62533}], "file_name": "000000482319.png", "image_id": 482319}, {"segments_info": [{"id": 856338, "category_id": 1, "iscrowd": 0, "bbox": [84, 105, 182, 292], "area": 35663}, {"id": 4672332, "category_id": 1, "iscrowd": 0, "bbox": [300, 146, 89, 101], "area": 4226}, {"id": 5922399, "category_id": 44, "iscrowd": 0, "bbox": [285, 200, 4, 12], "area": 33}, {"id": 8817291, "category_id": 44, "iscrowd": 0, "bbox": [283, 200, 2, 9], "area": 18}, {"id": 9080463, "category_id": 47, "iscrowd": 0, "bbox": [247, 218, 18, 21], "area": 330}, {"id": 4474953, "category_id": 51, "iscrowd": 0, "bbox": [347, 225, 51, 19], "area": 714}, {"id": 6580329, "category_id": 67, "iscrowd": 0, "bbox": [233, 226, 197, 50], "area": 4296}, {"id": 11909562, "category_id": 82, "iscrowd": 0, "bbox": [264, 83, 77, 150], "area": 8190}, {"id": 13883095, "category_id": 82, "iscrowd": 0, "bbox": [336, 75, 88, 150], "area": 7654}, {"id": 2106405, "category_id": 128, "iscrowd": 0, "bbox": [33, 173, 19, 38], "area": 562}, {"id": 2830128, "category_id": 130, "iscrowd": 0, "bbox": [35, 125, 18, 25], "area": 293}, {"id": 2369576, "category_id": 133, "iscrowd": 0, "bbox": [227, 238, 210, 163], "area": 15880}, {"id": 9738393, "category_id": 186, "iscrowd": 0, "bbox": [125, 0, 293, 133], "area": 15695}, {"id": 395786, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 65, 115], "area": 4791}, {"id": 2106411, "category_id": 190, "iscrowd": 0, "bbox": [0, 302, 100, 99], "area": 7588}, {"id": 2303784, "category_id": 197, "iscrowd": 0, "bbox": [33, 0, 262, 289], "area": 21868}, {"id": 1777440, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 418, 259], "area": 16770}], "file_name": "000000482436.png", "image_id": 482436}, {"segments_info": [{"id": 6119008, "category_id": 16, "iscrowd": 0, "bbox": [147, 84, 282, 404], "area": 52702}, {"id": 3815223, "category_id": 184, "iscrowd": 0, "bbox": [265, 409, 97, 231], "area": 10326}, {"id": 13684685, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 492, 640], "area": 251288}], "file_name": "000000482477.png", "image_id": 482477}, {"segments_info": [{"id": 8033699, "category_id": 85, "iscrowd": 0, "bbox": [331, 383, 37, 44], "area": 1522}, {"id": 9807528, "category_id": 85, "iscrowd": 0, "bbox": [134, 140, 112, 111], "area": 9553}, {"id": 9278099, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 193552}, {"id": 12232343, "category_id": 187, "iscrowd": 0, "bbox": [30, 0, 450, 86], "area": 4135}, {"id": 7700351, "category_id": 193, "iscrowd": 0, "bbox": [0, 265, 480, 167], "area": 38076}], "file_name": "000000482487.png", "image_id": 482487}, {"segments_info": [{"id": 2960161, "category_id": 1, "iscrowd": 0, "bbox": [586, 218, 31, 70], "area": 1148}, {"id": 3091233, "category_id": 1, "iscrowd": 0, "bbox": [579, 216, 14, 47], "area": 282}, {"id": 6120008, "category_id": 7, "iscrowd": 0, "bbox": [22, 79, 421, 311], "area": 93219}, {"id": 6050630, "category_id": 7, "iscrowd": 0, "bbox": [444, 156, 120, 147], "area": 16570}, {"id": 5854290, "category_id": 10, "iscrowd": 0, "bbox": [584, 192, 12, 23], "area": 244}, {"id": 2038802, "category_id": 31, "iscrowd": 0, "bbox": [611, 250, 12, 10], "area": 109}, {"id": 5000518, "category_id": 125, "iscrowd": 0, "bbox": [0, 263, 568, 217], "area": 37510}, {"id": 11189959, "category_id": 128, "iscrowd": 0, "bbox": [8, 169, 30, 53], "area": 220}, {"id": 5132618, "category_id": 144, "iscrowd": 0, "bbox": [537, 234, 103, 246], "area": 19711}, {"id": 3355438, "category_id": 147, "iscrowd": 0, "bbox": [0, 301, 544, 179], "area": 32522}, {"id": 4538941, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 640, 220], "area": 16548}, {"id": 5265483, "category_id": 184, "iscrowd": 0, "bbox": [592, 214, 38, 21], "area": 450}, {"id": 5988445, "category_id": 185, "iscrowd": 0, "bbox": [0, 249, 70, 99], "area": 4151}, {"id": 16119541, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 584, 247], "area": 73509}, {"id": 4741203, "category_id": 193, "iscrowd": 0, "bbox": [0, 340, 68, 42], "area": 2177}, {"id": 8948099, "category_id": 197, "iscrowd": 0, "bbox": [340, 101, 300, 152], "area": 2818}, {"id": 5792611, "category_id": 199, "iscrowd": 0, "bbox": [0, 217, 36, 36], "area": 1190}], "file_name": "000000482585.png", "image_id": 482585}, {"segments_info": [{"id": 5264219, "category_id": 51, "iscrowd": 0, "bbox": [2, 19, 638, 455], "area": 154083}, {"id": 2657976, "category_id": 52, "iscrowd": 0, "bbox": [188, 101, 442, 354], "area": 72037}, {"id": 2104366, "category_id": 53, "iscrowd": 0, "bbox": [194, 226, 156, 139], "area": 13515}, {"id": 727866, "category_id": 62, "iscrowd": 0, "bbox": [248, 0, 251, 138], "area": 13169}, {"id": 1580348, "category_id": 62, "iscrowd": 0, "bbox": [118, 0, 135, 54], "area": 3226}, {"id": 1380367, "category_id": 78, "iscrowd": 0, "bbox": [526, 9, 113, 105], "area": 6589}, {"id": 725284, "category_id": 188, "iscrowd": 0, "bbox": [310, 0, 330, 209], "area": 32213}, {"id": 5857117, "category_id": 189, "iscrowd": 0, "bbox": [0, 193, 640, 287], "area": 2850}, {"id": 9142401, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 265, 54], "area": 4658}], "file_name": "000000482719.png", "image_id": 482719}, {"segments_info": [{"id": 2500138, "category_id": 1, "iscrowd": 0, "bbox": [188, 112, 61, 113], "area": 2924}, {"id": 6839894, "category_id": 42, "iscrowd": 0, "bbox": [199, 198, 74, 41], "area": 1012}, {"id": 7104354, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 269247}], "file_name": "000000482735.png", "image_id": 482735}, {"segments_info": [{"id": 5330793, "category_id": 1, "iscrowd": 0, "bbox": [128, 107, 67, 261], "area": 11955}, {"id": 6580084, "category_id": 1, "iscrowd": 0, "bbox": [304, 88, 91, 244], "area": 6251}, {"id": 7565951, "category_id": 1, "iscrowd": 0, "bbox": [333, 81, 166, 369], "area": 26624}, {"id": 13554639, "category_id": 34, "iscrowd": 0, "bbox": [476, 282, 25, 50], "area": 824}, {"id": 2765099, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 157], "area": 75611}, {"id": 16316661, "category_id": 187, "iscrowd": 0, "bbox": [165, 0, 475, 76], "area": 12603}, {"id": 5210224, "category_id": 193, "iscrowd": 0, "bbox": [0, 139, 640, 318], "area": 157704}], "file_name": "000000482800.png", "image_id": 482800}, {"segments_info": [{"id": 7304572, "category_id": 1, "iscrowd": 0, "bbox": [1, 139, 445, 232], "area": 35085}, {"id": 2040868, "category_id": 18, "iscrowd": 0, "bbox": [15, 77, 257, 283], "area": 31900}, {"id": 1512256, "category_id": 63, "iscrowd": 0, "bbox": [107, 253, 393, 118], "area": 8997}, {"id": 1188394, "category_id": 67, "iscrowd": 0, "bbox": [0, 51, 63, 132], "area": 4847}, {"id": 9865350, "category_id": 72, "iscrowd": 0, "bbox": [245, 0, 168, 71], "area": 11424}, {"id": 2107694, "category_id": 156, "iscrowd": 0, "bbox": [226, 68, 196, 65], "area": 9261}, {"id": 7036995, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 14, 32], "area": 378}, {"id": 3295833, "category_id": 188, "iscrowd": 0, "bbox": [123, 0, 377, 178], "area": 35775}, {"id": 595477, "category_id": 199, "iscrowd": 0, "bbox": [10, 0, 62, 152], "area": 4020}, {"id": 5922398, "category_id": 200, "iscrowd": 0, "bbox": [6, 111, 494, 210], "area": 27535}], "file_name": "000000482917.png", "image_id": 482917}, {"segments_info": [{"id": 7567760, "category_id": 73, "iscrowd": 0, "bbox": [180, 108, 286, 241], "area": 54323}, {"id": 921369, "category_id": 74, "iscrowd": 0, "bbox": [575, 324, 42, 33], "area": 943}, {"id": 724265, "category_id": 177, "iscrowd": 0, "bbox": [119, 0, 521, 261], "area": 73544}, {"id": 591116, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 165, 170], "area": 17752}, {"id": 533366, "category_id": 189, "iscrowd": 0, "bbox": [6, 252, 634, 108], "area": 28331}], "file_name": "000000482970.png", "image_id": 482970}, {"segments_info": [{"id": 3759479, "category_id": 7, "iscrowd": 0, "bbox": [0, 0, 640, 354], "area": 182124}, {"id": 2314606, "category_id": 62, "iscrowd": 0, "bbox": [571, 185, 69, 158], "area": 9807}, {"id": 2040100, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 258, 201], "area": 24992}, {"id": 7629405, "category_id": 187, "iscrowd": 0, "bbox": [251, 0, 63, 29], "area": 858}], "file_name": "000000482978.png", "image_id": 482978}, {"segments_info": [{"id": 15462120, "category_id": 47, "iscrowd": 0, "bbox": [626, 268, 14, 20], "area": 246}, {"id": 7831191, "category_id": 65, "iscrowd": 0, "bbox": [11, 209, 629, 263], "area": 117968}, {"id": 5854844, "category_id": 85, "iscrowd": 0, "bbox": [77, 274, 38, 18], "area": 525}, {"id": 1646961, "category_id": 93, "iscrowd": 0, "bbox": [16, 459, 624, 19], "area": 3931}, {"id": 4412583, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 314], "area": 106635}], "file_name": "000000483050.png", "image_id": 483050}, {"segments_info": [{"id": 11244166, "category_id": 65, "iscrowd": 0, "bbox": [110, 262, 530, 218], "area": 89083}, {"id": 6312270, "category_id": 109, "iscrowd": 0, "bbox": [499, 0, 92, 329], "area": 22106}, {"id": 857115, "category_id": 118, "iscrowd": 0, "bbox": [0, 422, 640, 58], "area": 7941}, {"id": 13289156, "category_id": 181, "iscrowd": 0, "bbox": [575, 0, 65, 270], "area": 14332}, {"id": 923684, "category_id": 189, "iscrowd": 0, "bbox": [14, 253, 458, 210], "area": 12718}, {"id": 2240839, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 432], "area": 93703}], "file_name": "000000483531.png", "image_id": 483531}, {"segments_info": [{"id": 1842465, "category_id": 1, "iscrowd": 0, "bbox": [3, 3, 423, 627], "area": 169802}, {"id": 920934, "category_id": 32, "iscrowd": 0, "bbox": [200, 399, 51, 240], "area": 7480}, {"id": 6051141, "category_id": 62, "iscrowd": 0, "bbox": [67, 552, 49, 88], "area": 2243}, {"id": 4875900, "category_id": 107, "iscrowd": 0, "bbox": [15, 62, 164, 216], "area": 21147}, {"id": 4675203, "category_id": 109, "iscrowd": 0, "bbox": [129, 0, 297, 124], "area": 8434}, {"id": 1256773, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 34, 210], "area": 4320}, {"id": 2967140, "category_id": 177, "iscrowd": 0, "bbox": [9, 0, 129, 82], "area": 8651}, {"id": 10400177, "category_id": 190, "iscrowd": 0, "bbox": [0, 204, 426, 436], "area": 40289}], "file_name": "000000483667.png", "image_id": 483667}, {"segments_info": [{"id": 2238531, "category_id": 1, "iscrowd": 0, "bbox": [484, 178, 139, 90], "area": 6243}, {"id": 5859215, "category_id": 1, "iscrowd": 0, "bbox": [200, 106, 80, 102], "area": 4125}, {"id": 4804200, "category_id": 1, "iscrowd": 0, "bbox": [428, 116, 88, 75], "area": 1698}, {"id": 4146519, "category_id": 1, "iscrowd": 0, "bbox": [114, 115, 92, 96], "area": 4244}, {"id": 3354426, "category_id": 1, "iscrowd": 0, "bbox": [364, 120, 36, 42], "area": 618}, {"id": 2439515, "category_id": 1, "iscrowd": 0, "bbox": [295, 245, 345, 177], "area": 29706}, {"id": 3158824, "category_id": 1, "iscrowd": 0, "bbox": [110, 167, 121, 238], "area": 15543}, {"id": 6515601, "category_id": 1, "iscrowd": 0, "bbox": [365, 118, 74, 117], "area": 4920}, {"id": 4671578, "category_id": 1, "iscrowd": 0, "bbox": [0, 129, 30, 81], "area": 1517}, {"id": 1054248, "category_id": 1, "iscrowd": 0, "bbox": [0, 196, 129, 225], "area": 25156}, {"id": 5859731, "category_id": 1, "iscrowd": 0, "bbox": [400, 141, 109, 189], "area": 11987}, {"id": 2045252, "category_id": 28, "iscrowd": 0, "bbox": [30, 106, 11, 66], "area": 314}, {"id": 4934238, "category_id": 47, "iscrowd": 0, "bbox": [339, 303, 31, 48], "area": 1055}, {"id": 3224917, "category_id": 47, "iscrowd": 0, "bbox": [334, 195, 14, 14], "area": 146}, {"id": 8228266, "category_id": 47, "iscrowd": 0, "bbox": [336, 207, 19, 24], "area": 235}, {"id": 8224661, "category_id": 47, "iscrowd": 0, "bbox": [271, 203, 15, 15], "area": 178}, {"id": 6182763, "category_id": 47, "iscrowd": 0, "bbox": [299, 258, 28, 33], "area": 719}, {"id": 4146533, "category_id": 47, "iscrowd": 0, "bbox": [246, 242, 25, 43], "area": 663}, {"id": 5663372, "category_id": 47, "iscrowd": 0, "bbox": [376, 386, 40, 42], "area": 1351}, {"id": 8163761, "category_id": 47, "iscrowd": 0, "bbox": [322, 282, 27, 30], "area": 574}, {"id": 7636902, "category_id": 47, "iscrowd": 0, "bbox": [257, 274, 28, 24], "area": 461}, {"id": 8094108, "category_id": 47, "iscrowd": 0, "bbox": [201, 347, 20, 51], "area": 774}, {"id": 7503773, "category_id": 47, "iscrowd": 0, "bbox": [295, 233, 21, 23], "area": 342}, {"id": 6582668, "category_id": 47, "iscrowd": 0, "bbox": [326, 216, 20, 19], "area": 198}, {"id": 7241627, "category_id": 47, "iscrowd": 0, "bbox": [285, 223, 12, 20], "area": 190}, {"id": 6517899, "category_id": 48, "iscrowd": 0, "bbox": [365, 216, 15, 9], "area": 49}, {"id": 7175833, "category_id": 48, "iscrowd": 0, "bbox": [372, 286, 22, 15], "area": 94}, {"id": 5856363, "category_id": 48, "iscrowd": 0, "bbox": [173, 355, 22, 29], "area": 202}, {"id": 6782355, "category_id": 48, "iscrowd": 0, "bbox": [226, 248, 17, 12], "area": 61}, {"id": 3092542, "category_id": 49, "iscrowd": 0, "bbox": [135, 404, 83, 20], "area": 406}, {"id": 2435383, "category_id": 50, "iscrowd": 0, "bbox": [151, 410, 70, 11], "area": 267}, {"id": 2838936, "category_id": 62, "iscrowd": 0, "bbox": [533, 150, 26, 36], "area": 768}, {"id": 3627926, "category_id": 62, "iscrowd": 0, "bbox": [262, 128, 31, 67], "area": 1060}, {"id": 4549288, "category_id": 62, "iscrowd": 0, "bbox": [294, 125, 24, 44], "area": 540}, {"id": 2311567, "category_id": 62, "iscrowd": 0, "bbox": [558, 147, 31, 37], "area": 933}, {"id": 6586297, "category_id": 62, "iscrowd": 0, "bbox": [341, 132, 19, 27], "area": 438}, {"id": 3298456, "category_id": 62, "iscrowd": 0, "bbox": [493, 138, 23, 46], "area": 746}, {"id": 1980514, "category_id": 62, "iscrowd": 0, "bbox": [20, 146, 17, 59], "area": 517}, {"id": 4212581, "category_id": 67, "iscrowd": 0, "bbox": [132, 146, 391, 277], "area": 38750}, {"id": 6253758, "category_id": 67, "iscrowd": 0, "bbox": [555, 172, 85, 36], "area": 1643}, {"id": 9539519, "category_id": 67, "iscrowd": 0, "bbox": [254, 137, 41, 12], "area": 106}, {"id": 10331565, "category_id": 112, "iscrowd": 0, "bbox": [51, 45, 92, 155], "area": 8331}, {"id": 4942745, "category_id": 177, "iscrowd": 0, "bbox": [0, 28, 640, 160], "area": 32565}, {"id": 14409445, "category_id": 181, "iscrowd": 0, "bbox": [240, 46, 400, 113], "area": 21425}, {"id": 6781069, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 67], "area": 19967}, {"id": 987162, "category_id": 189, "iscrowd": 0, "bbox": [137, 345, 329, 83], "area": 1109}, {"id": 6514769, "category_id": 190, "iscrowd": 0, "bbox": [14, 179, 111, 48], "area": 1983}, {"id": 3293034, "category_id": 196, "iscrowd": 0, "bbox": [182, 138, 260, 265], "area": 415}], "file_name": "000000483999.png", "image_id": 483999}, {"segments_info": [{"id": 3353122, "category_id": 3, "iscrowd": 0, "bbox": [225, 504, 38, 20], "area": 589}, {"id": 3417629, "category_id": 3, "iscrowd": 0, "bbox": [291, 508, 34, 30], "area": 623}, {"id": 2563866, "category_id": 3, "iscrowd": 0, "bbox": [370, 511, 19, 19], "area": 234}, {"id": 2235674, "category_id": 3, "iscrowd": 0, "bbox": [340, 512, 36, 20], "area": 368}, {"id": 2633035, "category_id": 3, "iscrowd": 0, "bbox": [398, 515, 11, 31], "area": 236}, {"id": 1840144, "category_id": 3, "iscrowd": 0, "bbox": [252, 512, 53, 30], "area": 1201}, {"id": 14147291, "category_id": 13, "iscrowd": 0, "bbox": [118, 446, 22, 22], "area": 373}, {"id": 4802964, "category_id": 13, "iscrowd": 0, "bbox": [0, 159, 156, 178], "area": 22045}, {"id": 4079935, "category_id": 128, "iscrowd": 0, "bbox": [0, 428, 126, 130], "area": 5718}, {"id": 4475466, "category_id": 149, "iscrowd": 0, "bbox": [0, 523, 413, 117], "area": 34618}, {"id": 3884110, "category_id": 151, "iscrowd": 0, "bbox": [0, 401, 75, 32], "area": 1199}, {"id": 1777697, "category_id": 184, "iscrowd": 0, "bbox": [0, 331, 407, 230], "area": 39696}, {"id": 3157548, "category_id": 185, "iscrowd": 0, "bbox": [15, 500, 131, 44], "area": 2747}, {"id": 10844243, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 405, 436], "area": 110819}, {"id": 2302499, "category_id": 191, "iscrowd": 0, "bbox": [0, 522, 384, 55], "area": 4704}, {"id": 11456223, "category_id": 195, "iscrowd": 0, "bbox": [394, 410, 69, 132], "area": 7587}], "file_name": "000000484029.png", "image_id": 484029}, {"segments_info": [{"id": 11120058, "category_id": 24, "iscrowd": 0, "bbox": [386, 222, 214, 140], "area": 16151}, {"id": 6252142, "category_id": 24, "iscrowd": 0, "bbox": [25, 46, 282, 266], "area": 32274}, {"id": 5991787, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 294], "area": 116073}, {"id": 5134177, "category_id": 194, "iscrowd": 0, "bbox": [0, 108, 640, 372], "area": 141956}], "file_name": "000000484296.png", "image_id": 484296}, {"segments_info": [{"id": 4411227, "category_id": 1, "iscrowd": 0, "bbox": [496, 110, 78, 101], "area": 3632}, {"id": 3882565, "category_id": 1, "iscrowd": 0, "bbox": [123, 29, 55, 155], "area": 4911}, {"id": 5656405, "category_id": 1, "iscrowd": 0, "bbox": [242, 216, 225, 210], "area": 30106}, {"id": 4023425, "category_id": 1, "iscrowd": 0, "bbox": [440, 103, 21, 24], "area": 229}, {"id": 4080201, "category_id": 1, "iscrowd": 0, "bbox": [277, 136, 97, 109], "area": 5864}, {"id": 1646634, "category_id": 1, "iscrowd": 0, "bbox": [1, 59, 80, 144], "area": 6681}, {"id": 2900826, "category_id": 1, "iscrowd": 0, "bbox": [271, 47, 32, 55], "area": 1077}, {"id": 4080206, "category_id": 1, "iscrowd": 0, "bbox": [389, 114, 182, 307], "area": 18401}, {"id": 4474956, "category_id": 1, "iscrowd": 0, "bbox": [0, 243, 90, 178], "area": 12355}, {"id": 3423041, "category_id": 1, "iscrowd": 0, "bbox": [396, 116, 44, 76], "area": 1778}, {"id": 2437436, "category_id": 1, "iscrowd": 0, "bbox": [184, 49, 42, 113], "area": 3236}, {"id": 3229270, "category_id": 1, "iscrowd": 0, "bbox": [230, 50, 41, 106], "area": 2267}, {"id": 9876426, "category_id": 1, "iscrowd": 0, "bbox": [330, 37, 55, 182], "area": 5311}, {"id": 4544623, "category_id": 1, "iscrowd": 1, "bbox": [1, 9, 639, 238], "area": 12474}, {"id": 1844523, "category_id": 31, "iscrowd": 0, "bbox": [224, 88, 26, 22], "area": 403}, {"id": 3426452, "category_id": 31, "iscrowd": 0, "bbox": [66, 171, 21, 32], "area": 288}, {"id": 3882330, "category_id": 32, "iscrowd": 0, "bbox": [150, 57, 14, 47], "area": 237}, {"id": 5524026, "category_id": 32, "iscrowd": 0, "bbox": [455, 196, 15, 56], "area": 587}, {"id": 10006733, "category_id": 44, "iscrowd": 0, "bbox": [298, 244, 20, 41], "area": 649}, {"id": 10794699, "category_id": 44, "iscrowd": 0, "bbox": [179, 279, 22, 48], "area": 832}, {"id": 14345193, "category_id": 50, "iscrowd": 0, "bbox": [152, 328, 32, 27], "area": 236}, {"id": 4081307, "category_id": 53, "iscrowd": 0, "bbox": [183, 323, 24, 32], "area": 568}, {"id": 6780024, "category_id": 62, "iscrowd": 0, "bbox": [619, 200, 21, 80], "area": 452}, {"id": 2895146, "category_id": 62, "iscrowd": 0, "bbox": [195, 187, 62, 56], "area": 1594}, {"id": 4344393, "category_id": 62, "iscrowd": 0, "bbox": [375, 128, 19, 57], "area": 334}, {"id": 4670784, "category_id": 62, "iscrowd": 0, "bbox": [541, 166, 72, 116], "area": 1793}, {"id": 12704234, "category_id": 67, "iscrowd": 0, "bbox": [102, 253, 200, 125], "area": 9616}, {"id": 12441574, "category_id": 67, "iscrowd": 0, "bbox": [181, 220, 175, 75], "area": 6540}, {"id": 10995164, "category_id": 67, "iscrowd": 0, "bbox": [193, 322, 326, 104], "area": 6471}, {"id": 2324806, "category_id": 84, "iscrowd": 0, "bbox": [586, 57, 5, 26], "area": 104}, {"id": 3586770, "category_id": 84, "iscrowd": 0, "bbox": [501, 44, 20, 7], "area": 111}, {"id": 12964053, "category_id": 84, "iscrowd": 0, "bbox": [72, 255, 108, 81], "area": 5519}, {"id": 6059405, "category_id": 84, "iscrowd": 0, "bbox": [173, 151, 17, 15], "area": 203}, {"id": 9417667, "category_id": 107, "iscrowd": 0, "bbox": [378, 112, 154, 24], "area": 444}, {"id": 6188640, "category_id": 156, "iscrowd": 0, "bbox": [405, 0, 235, 89], "area": 14394}, {"id": 7830123, "category_id": 188, "iscrowd": 0, "bbox": [377, 0, 246, 206], "area": 8773}, {"id": 9217979, "category_id": 189, "iscrowd": 0, "bbox": [216, 118, 325, 243], "area": 1635}, {"id": 5853503, "category_id": 190, "iscrowd": 0, "bbox": [88, 168, 280, 96], "area": 4121}, {"id": 10663877, "category_id": 195, "iscrowd": 0, "bbox": [78, 0, 414, 426], "area": 10389}, {"id": 8692915, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 208], "area": 21735}, {"id": 8496571, "category_id": 200, "iscrowd": 0, "bbox": [102, 182, 538, 244], "area": 21278}], "file_name": "000000484351.png", "image_id": 484351}, {"segments_info": [{"id": 1974047, "category_id": 1, "iscrowd": 0, "bbox": [300, 293, 45, 27], "area": 778}, {"id": 6122363, "category_id": 1, "iscrowd": 0, "bbox": [297, 282, 27, 24], "area": 368}, {"id": 1908522, "category_id": 1, "iscrowd": 0, "bbox": [375, 279, 37, 30], "area": 590}, {"id": 6255489, "category_id": 6, "iscrowd": 0, "bbox": [478, 211, 67, 36], "area": 1873}, {"id": 11514280, "category_id": 6, "iscrowd": 0, "bbox": [314, 203, 80, 65], "area": 4942}, {"id": 8684425, "category_id": 6, "iscrowd": 0, "bbox": [0, 197, 209, 102], "area": 18798}, {"id": 2763306, "category_id": 62, "iscrowd": 0, "bbox": [354, 283, 24, 34], "area": 329}, {"id": 2171168, "category_id": 62, "iscrowd": 0, "bbox": [345, 274, 34, 40], "area": 588}, {"id": 2698283, "category_id": 62, "iscrowd": 0, "bbox": [589, 296, 35, 27], "area": 462}, {"id": 1645082, "category_id": 62, "iscrowd": 0, "bbox": [368, 295, 42, 24], "area": 632}, {"id": 1974042, "category_id": 62, "iscrowd": 0, "bbox": [98, 315, 464, 165], "area": 56592}, {"id": 5395538, "category_id": 62, "iscrowd": 0, "bbox": [410, 258, 23, 63], "area": 623}, {"id": 921102, "category_id": 62, "iscrowd": 0, "bbox": [536, 311, 91, 137], "area": 5999}, {"id": 3947836, "category_id": 62, "iscrowd": 0, "bbox": [310, 275, 23, 10], "area": 132}, {"id": 3882040, "category_id": 62, "iscrowd": 0, "bbox": [472, 260, 14, 30], "area": 273}, {"id": 855309, "category_id": 62, "iscrowd": 0, "bbox": [491, 296, 67, 109], "area": 4989}, {"id": 13359065, "category_id": 149, "iscrowd": 0, "bbox": [0, 235, 640, 245], "area": 40110}, {"id": 5791843, "category_id": 181, "iscrowd": 0, "bbox": [0, 12, 640, 314], "area": 42789}, {"id": 5860985, "category_id": 186, "iscrowd": 0, "bbox": [178, 0, 462, 204], "area": 74633}, {"id": 16448507, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 203], "area": 19440}, {"id": 1513495, "category_id": 190, "iscrowd": 0, "bbox": [446, 306, 67, 62], "area": 1736}, {"id": 3356489, "category_id": 195, "iscrowd": 0, "bbox": [413, 192, 19, 41], "area": 524}, {"id": 7961719, "category_id": 197, "iscrowd": 0, "bbox": [0, 140, 220, 148], "area": 6614}, {"id": 10463403, "category_id": 199, "iscrowd": 0, "bbox": [196, 136, 26, 24], "area": 339}], "file_name": "000000484404.png", "image_id": 484404}, {"segments_info": [{"id": 3028552, "category_id": 1, "iscrowd": 0, "bbox": [0, 30, 194, 206], "area": 17132}, {"id": 7960696, "category_id": 70, "iscrowd": 0, "bbox": [1, 8, 229, 229], "area": 30172}, {"id": 5127736, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 320, 136], "area": 13295}], "file_name": "000000484415.png", "image_id": 484415}, {"segments_info": [{"id": 11778231, "category_id": 85, "iscrowd": 0, "bbox": [491, 270, 35, 33], "area": 894}, {"id": 14401975, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 112937}, {"id": 6781598, "category_id": 197, "iscrowd": 0, "bbox": [66, 0, 574, 426], "area": 158784}], "file_name": "000000484760.png", "image_id": 484760}, {"segments_info": [{"id": 6905435, "category_id": 1, "iscrowd": 0, "bbox": [2, 108, 370, 315], "area": 60615}, {"id": 3224893, "category_id": 1, "iscrowd": 0, "bbox": [271, 254, 255, 169], "area": 31378}, {"id": 8027777, "category_id": 20, "iscrowd": 0, "bbox": [597, 145, 42, 175], "area": 5679}, {"id": 8489361, "category_id": 20, "iscrowd": 0, "bbox": [202, 3, 143, 150], "area": 12318}, {"id": 10592931, "category_id": 20, "iscrowd": 0, "bbox": [250, 119, 182, 187], "area": 14484}, {"id": 1582898, "category_id": 20, "iscrowd": 0, "bbox": [363, 1, 183, 140], "area": 11030}, {"id": 8818065, "category_id": 20, "iscrowd": 0, "bbox": [592, 15, 47, 110], "area": 3773}, {"id": 7961471, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 640, 146], "area": 43863}, {"id": 6052694, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 43173}, {"id": 3294801, "category_id": 193, "iscrowd": 0, "bbox": [0, 60, 547, 368], "area": 41478}], "file_name": "000000484893.png", "image_id": 484893}, {"segments_info": [{"id": 7039851, "category_id": 1, "iscrowd": 0, "bbox": [87, 65, 235, 245], "area": 33147}, {"id": 3947580, "category_id": 47, "iscrowd": 0, "bbox": [114, 279, 69, 54], "area": 2622}, {"id": 10132122, "category_id": 47, "iscrowd": 0, "bbox": [407, 262, 39, 61], "area": 2005}, {"id": 6447714, "category_id": 47, "iscrowd": 0, "bbox": [85, 309, 36, 33], "area": 976}, {"id": 5263440, "category_id": 47, "iscrowd": 0, "bbox": [435, 319, 91, 86], "area": 5132}, {"id": 1184274, "category_id": 47, "iscrowd": 0, "bbox": [236, 293, 47, 58], "area": 2000}, {"id": 1842204, "category_id": 47, "iscrowd": 0, "bbox": [613, 295, 27, 61], "area": 1434}, {"id": 3487029, "category_id": 47, "iscrowd": 0, "bbox": [560, 287, 53, 74], "area": 2734}, {"id": 8947848, "category_id": 47, "iscrowd": 0, "bbox": [512, 340, 46, 56], "area": 1677}, {"id": 855309, "category_id": 47, "iscrowd": 0, "bbox": [404, 328, 39, 52], "area": 1451}, {"id": 5000268, "category_id": 47, "iscrowd": 0, "bbox": [389, 362, 38, 50], "area": 1526}, {"id": 6710886, "category_id": 48, "iscrowd": 0, "bbox": [302, 347, 76, 25], "area": 287}, {"id": 4342338, "category_id": 48, "iscrowd": 0, "bbox": [412, 417, 107, 74], "area": 1040}, {"id": 10921638, "category_id": 49, "iscrowd": 0, "bbox": [518, 414, 121, 24], "area": 912}, {"id": 12829635, "category_id": 50, "iscrowd": 0, "bbox": [247, 194, 54, 19], "area": 181}, {"id": 8158332, "category_id": 50, "iscrowd": 0, "bbox": [338, 297, 47, 22], "area": 247}, {"id": 12632256, "category_id": 50, "iscrowd": 0, "bbox": [546, 334, 72, 22], "area": 421}, {"id": 8553090, "category_id": 51, "iscrowd": 0, "bbox": [526, 299, 35, 42], "area": 1123}, {"id": 6184542, "category_id": 67, "iscrowd": 0, "bbox": [0, 292, 640, 199], "area": 43567}, {"id": 12105912, "category_id": 176, "iscrowd": 0, "bbox": [0, 66, 603, 287], "area": 30837}, {"id": 14145495, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 586, 227], "area": 64565}, {"id": 855299, "category_id": 188, "iscrowd": 0, "bbox": [274, 207, 209, 112], "area": 11273}, {"id": 7237230, "category_id": 189, "iscrowd": 0, "bbox": [14, 303, 603, 188], "area": 9045}, {"id": 10724259, "category_id": 190, "iscrowd": 0, "bbox": [0, 370, 54, 121], "area": 3099}, {"id": 9408399, "category_id": 196, "iscrowd": 0, "bbox": [461, 394, 80, 76], "area": 3383}, {"id": 3421236, "category_id": 199, "iscrowd": 0, "bbox": [183, 0, 457, 117], "area": 5907}], "file_name": "000000484978.png", "image_id": 484978}, {"segments_info": [{"id": 10259838, "category_id": 1, "iscrowd": 0, "bbox": [85, 180, 158, 439], "area": 23878}, {"id": 5619649, "category_id": 37, "iscrowd": 0, "bbox": [26, 16, 16, 16], "area": 202}, {"id": 3298947, "category_id": 43, "iscrowd": 0, "bbox": [234, 248, 88, 73], "area": 3099}, {"id": 1986960, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 337, 640], "area": 188081}], "file_name": "000000485027.png", "image_id": 485027}, {"segments_info": [{"id": 4474176, "category_id": 1, "iscrowd": 0, "bbox": [252, 177, 133, 97], "area": 5232}, {"id": 9539972, "category_id": 42, "iscrowd": 0, "bbox": [172, 210, 81, 54], "area": 1778}, {"id": 9931893, "category_id": 155, "iscrowd": 0, "bbox": [0, 181, 640, 245], "area": 148076}, {"id": 8809796, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 188], "area": 117403}], "file_name": "000000485071.png", "image_id": 485071}, {"segments_info": [{"id": 5532020, "category_id": 61, "iscrowd": 0, "bbox": [7, 121, 623, 332], "area": 174997}, {"id": 5468281, "category_id": 67, "iscrowd": 0, "bbox": [0, 30, 640, 437], "area": 32012}, {"id": 401222, "category_id": 112, "iscrowd": 0, "bbox": [111, 0, 529, 188], "area": 52015}, {"id": 263947, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 88, 49], "area": 3200}, {"id": 1317405, "category_id": 189, "iscrowd": 0, "bbox": [0, 165, 640, 302], "area": 14926}, {"id": 725791, "category_id": 190, "iscrowd": 0, "bbox": [517, 323, 123, 144], "area": 5602}, {"id": 2371647, "category_id": 199, "iscrowd": 0, "bbox": [573, 32, 67, 187], "area": 6482}], "file_name": "000000485130.png", "image_id": 485130}, {"segments_info": [{"id": 6909298, "category_id": 3, "iscrowd": 0, "bbox": [0, 141, 41, 18], "area": 569}, {"id": 8552577, "category_id": 3, "iscrowd": 0, "bbox": [105, 143, 40, 15], "area": 356}, {"id": 9144456, "category_id": 5, "iscrowd": 0, "bbox": [201, 21, 423, 117], "area": 6503}, {"id": 10130833, "category_id": 5, "iscrowd": 0, "bbox": [9, 17, 313, 95], "area": 3519}, {"id": 9803670, "category_id": 8, "iscrowd": 0, "bbox": [493, 96, 15, 16], "area": 162}, {"id": 3374507, "category_id": 8, "iscrowd": 0, "bbox": [350, 142, 49, 17], "area": 481}, {"id": 9605781, "category_id": 8, "iscrowd": 0, "bbox": [464, 142, 42, 16], "area": 390}, {"id": 10790050, "category_id": 8, "iscrowd": 0, "bbox": [129, 142, 53, 17], "area": 538}, {"id": 10594215, "category_id": 149, "iscrowd": 0, "bbox": [0, 83, 640, 91], "area": 36688}, {"id": 5721413, "category_id": 184, "iscrowd": 0, "bbox": [6, 10, 634, 89], "area": 26220}, {"id": 8289662, "category_id": 185, "iscrowd": 0, "bbox": [0, 65, 640, 84], "area": 8260}, {"id": 8356233, "category_id": 191, "iscrowd": 0, "bbox": [557, 86, 83, 23], "area": 854}, {"id": 9863534, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 41], "area": 9112}, {"id": 9799291, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 616, 85], "area": 12176}, {"id": 8488073, "category_id": 199, "iscrowd": 0, "bbox": [0, 72, 587, 53], "area": 884}], "file_name": "000000485237.png", "image_id": 485237}, {"segments_info": [{"id": 4934740, "category_id": 33, "iscrowd": 0, "bbox": [275, 39, 191, 98], "area": 12638}, {"id": 7696244, "category_id": 44, "iscrowd": 0, "bbox": [467, 196, 26, 59], "area": 1392}, {"id": 12366522, "category_id": 44, "iscrowd": 0, "bbox": [410, 331, 32, 71], "area": 1903}, {"id": 12362135, "category_id": 44, "iscrowd": 0, "bbox": [51, 238, 63, 77], "area": 2654}, {"id": 4144738, "category_id": 44, "iscrowd": 0, "bbox": [53, 214, 29, 38], "area": 729}, {"id": 13086372, "category_id": 44, "iscrowd": 0, "bbox": [377, 305, 39, 81], "area": 2447}, {"id": 12097419, "category_id": 44, "iscrowd": 0, "bbox": [521, 171, 26, 62], "area": 1038}, {"id": 9789783, "category_id": 47, "iscrowd": 0, "bbox": [334, 227, 36, 32], "area": 838}, {"id": 7827572, "category_id": 79, "iscrowd": 0, "bbox": [298, 144, 154, 111], "area": 14672}, {"id": 6249831, "category_id": 100, "iscrowd": 0, "bbox": [0, 354, 258, 126], "area": 13664}, {"id": 8354435, "category_id": 107, "iscrowd": 0, "bbox": [271, 232, 290, 201], "area": 17132}, {"id": 8812925, "category_id": 109, "iscrowd": 0, "bbox": [540, 162, 100, 318], "area": 22894}, {"id": 9406609, "category_id": 112, "iscrowd": 0, "bbox": [500, 304, 43, 176], "area": 3330}, {"id": 10396072, "category_id": 130, "iscrowd": 0, "bbox": [143, 0, 129, 44], "area": 4324}, {"id": 8751758, "category_id": 186, "iscrowd": 0, "bbox": [506, 0, 134, 36], "area": 2686}, {"id": 7236212, "category_id": 188, "iscrowd": 0, "bbox": [267, 291, 312, 189], "area": 37996}, {"id": 7302004, "category_id": 189, "iscrowd": 0, "bbox": [0, 245, 160, 191], "area": 8352}, {"id": 5461600, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 455], "area": 115885}], "file_name": "000000485424.png", "image_id": 485424}, {"segments_info": [{"id": 4213344, "category_id": 1, "iscrowd": 0, "bbox": [66, 115, 142, 144], "area": 8996}, {"id": 8158868, "category_id": 1, "iscrowd": 0, "bbox": [272, 47, 160, 166], "area": 8140}, {"id": 1712172, "category_id": 1, "iscrowd": 0, "bbox": [0, 90, 89, 162], "area": 7985}, {"id": 4085105, "category_id": 39, "iscrowd": 0, "bbox": [368, 93, 54, 7], "area": 241}, {"id": 2113389, "category_id": 40, "iscrowd": 0, "bbox": [206, 140, 22, 44], "area": 714}, {"id": 3898249, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 178], "area": 86753}, {"id": 3958185, "category_id": 194, "iscrowd": 0, "bbox": [0, 139, 640, 142], "area": 66491}], "file_name": "000000485480.png", "image_id": 485480}, {"segments_info": [{"id": 8823471, "category_id": 5, "iscrowd": 0, "bbox": [207, 194, 15, 17], "area": 111}, {"id": 7564382, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 426, 640], "area": 272332}], "file_name": "000000485802.png", "image_id": 485802}, {"segments_info": [{"id": 4800325, "category_id": 1, "iscrowd": 0, "bbox": [190, 39, 168, 346], "area": 27676}, {"id": 2235169, "category_id": 49, "iscrowd": 0, "bbox": [215, 307, 39, 8], "area": 230}, {"id": 2432548, "category_id": 49, "iscrowd": 0, "bbox": [179, 304, 31, 14], "area": 206}, {"id": 6445409, "category_id": 53, "iscrowd": 0, "bbox": [147, 45, 15, 7], "area": 65}, {"id": 7432303, "category_id": 53, "iscrowd": 0, "bbox": [125, 43, 23, 11], "area": 185}, {"id": 7695473, "category_id": 62, "iscrowd": 0, "bbox": [34, 171, 43, 72], "area": 1658}, {"id": 9077382, "category_id": 62, "iscrowd": 0, "bbox": [77, 201, 66, 51], "area": 2362}, {"id": 8419195, "category_id": 67, "iscrowd": 0, "bbox": [15, 256, 261, 129], "area": 19826}, {"id": 2432806, "category_id": 79, "iscrowd": 0, "bbox": [383, 191, 118, 60], "area": 4509}, {"id": 6839650, "category_id": 81, "iscrowd": 0, "bbox": [437, 228, 64, 12], "area": 673}, {"id": 9077638, "category_id": 82, "iscrowd": 0, "bbox": [60, 54, 159, 177], "area": 22048}, {"id": 5655376, "category_id": 100, "iscrowd": 0, "bbox": [70, 282, 124, 50], "area": 3797}, {"id": 4997961, "category_id": 109, "iscrowd": 0, "bbox": [304, 0, 177, 153], "area": 9485}, {"id": 8089718, "category_id": 130, "iscrowd": 0, "bbox": [386, 109, 21, 13], "area": 154}, {"id": 1971997, "category_id": 181, "iscrowd": 0, "bbox": [341, 0, 86, 210], "area": 12278}, {"id": 5523531, "category_id": 189, "iscrowd": 0, "bbox": [27, 261, 12, 11], "area": 4}, {"id": 2367012, "category_id": 190, "iscrowd": 0, "bbox": [243, 273, 251, 123], "area": 14190}, {"id": 4536894, "category_id": 195, "iscrowd": 0, "bbox": [134, 51, 32, 15], "area": 199}, {"id": 5063497, "category_id": 196, "iscrowd": 0, "bbox": [181, 181, 91, 46], "area": 913}, {"id": 8551038, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 576, 396], "area": 57371}], "file_name": "000000485844.png", "image_id": 485844}, {"segments_info": [{"id": 2834757, "category_id": 25, "iscrowd": 0, "bbox": [387, 129, 91, 166], "area": 5965}, {"id": 6717062, "category_id": 148, "iscrowd": 0, "bbox": [399, 167, 101, 19], "area": 939}, {"id": 3034705, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 222], "area": 75085}, {"id": 14603983, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 91], "area": 21563}, {"id": 1399632, "category_id": 193, "iscrowd": 0, "bbox": [0, 179, 500, 153], "area": 57895}, {"id": 2242108, "category_id": 194, "iscrowd": 0, "bbox": [77, 193, 91, 104], "area": 4370}], "file_name": "000000485895.png", "image_id": 485895}, {"segments_info": [{"id": 4151657, "category_id": 48, "iscrowd": 0, "bbox": [321, 429, 72, 211], "area": 7067}, {"id": 409732, "category_id": 57, "iscrowd": 0, "bbox": [159, 125, 250, 162], "area": 13726}, {"id": 413598, "category_id": 57, "iscrowd": 0, "bbox": [219, 116, 206, 55], "area": 8329}, {"id": 1005468, "category_id": 57, "iscrowd": 0, "bbox": [251, 37, 76, 101], "area": 5321}, {"id": 4219262, "category_id": 61, "iscrowd": 0, "bbox": [33, 331, 271, 250], "area": 54649}, {"id": 6913173, "category_id": 67, "iscrowd": 0, "bbox": [2, 214, 424, 418], "area": 102208}, {"id": 4946327, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 426, 246], "area": 74159}], "file_name": "000000485972.png", "image_id": 485972}, {"segments_info": [{"id": 9218217, "category_id": 47, "iscrowd": 0, "bbox": [357, 186, 39, 52], "area": 1196}, {"id": 4853518, "category_id": 62, "iscrowd": 0, "bbox": [204, 251, 97, 83], "area": 3701}, {"id": 5051411, "category_id": 64, "iscrowd": 0, "bbox": [353, 139, 65, 82], "area": 2773}, {"id": 11316910, "category_id": 73, "iscrowd": 0, "bbox": [0, 391, 430, 240], "area": 58259}, {"id": 5581868, "category_id": 73, "iscrowd": 0, "bbox": [0, 252, 287, 209], "area": 28745}, {"id": 6041905, "category_id": 74, "iscrowd": 0, "bbox": [364, 400, 70, 34], "area": 1805}, {"id": 4262924, "category_id": 112, "iscrowd": 0, "bbox": [0, 333, 53, 117], "area": 2898}, {"id": 6896699, "category_id": 180, "iscrowd": 0, "bbox": [161, 0, 273, 264], "area": 41704}, {"id": 8090997, "category_id": 189, "iscrowd": 0, "bbox": [0, 179, 480, 461], "area": 83252}, {"id": 6434606, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 432], "area": 71985}], "file_name": "000000486040.png", "image_id": 486040}, {"segments_info": [{"id": 7041910, "category_id": 24, "iscrowd": 0, "bbox": [82, 375, 86, 105], "area": 6202}, {"id": 8159877, "category_id": 24, "iscrowd": 0, "bbox": [0, 433, 104, 42], "area": 3257}, {"id": 6519705, "category_id": 25, "iscrowd": 0, "bbox": [194, 27, 380, 448], "area": 83130}, {"id": 12965079, "category_id": 125, "iscrowd": 0, "bbox": [121, 439, 503, 41], "area": 6734}, {"id": 7500396, "category_id": 151, "iscrowd": 0, "bbox": [0, 32, 542, 260], "area": 25010}, {"id": 5000504, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 327], "area": 107270}, {"id": 3752242, "category_id": 185, "iscrowd": 0, "bbox": [0, 268, 640, 212], "area": 31559}, {"id": 1055784, "category_id": 186, "iscrowd": 0, "bbox": [0, 152, 96, 31], "area": 1879}, {"id": 10201259, "category_id": 199, "iscrowd": 0, "bbox": [154, 254, 176, 195], "area": 27761}], "file_name": "000000486046.png", "image_id": 486046}, {"segments_info": [{"id": 8676438, "category_id": 1, "iscrowd": 0, "bbox": [100, 32, 19, 33], "area": 369}, {"id": 4994354, "category_id": 1, "iscrowd": 0, "bbox": [202, 55, 16, 28], "area": 234}, {"id": 8875375, "category_id": 1, "iscrowd": 0, "bbox": [192, 58, 16, 32], "area": 223}, {"id": 10652304, "category_id": 1, "iscrowd": 0, "bbox": [141, 174, 38, 64], "area": 1306}, {"id": 7890038, "category_id": 1, "iscrowd": 0, "bbox": [226, 149, 44, 87], "area": 1794}, {"id": 10974278, "category_id": 1, "iscrowd": 0, "bbox": [139, 11, 25, 28], "area": 233}, {"id": 13150869, "category_id": 1, "iscrowd": 0, "bbox": [124, 8, 28, 31], "area": 350}, {"id": 8609888, "category_id": 1, "iscrowd": 0, "bbox": [138, 129, 27, 60], "area": 818}, {"id": 4863803, "category_id": 1, "iscrowd": 0, "bbox": [86, 132, 38, 103], "area": 2159}, {"id": 9596251, "category_id": 1, "iscrowd": 0, "bbox": [136, 40, 20, 33], "area": 299}, {"id": 9332312, "category_id": 1, "iscrowd": 0, "bbox": [229, 74, 20, 34], "area": 368}, {"id": 8285563, "category_id": 1, "iscrowd": 0, "bbox": [123, 175, 15, 14], "area": 137}, {"id": 9788751, "category_id": 1, "iscrowd": 0, "bbox": [117, 52, 19, 32], "area": 374}, {"id": 7954265, "category_id": 1, "iscrowd": 1, "bbox": [1, 14, 498, 182], "area": 36469}, {"id": 9402735, "category_id": 15, "iscrowd": 0, "bbox": [199, 50, 80, 10], "area": 593}, {"id": 6840426, "category_id": 15, "iscrowd": 0, "bbox": [199, 182, 18, 6], "area": 103}, {"id": 8875639, "category_id": 39, "iscrowd": 0, "bbox": [226, 165, 41, 22], "area": 81}, {"id": 3352375, "category_id": 40, "iscrowd": 0, "bbox": [168, 226, 10, 11], "area": 71}, {"id": 8353149, "category_id": 128, "iscrowd": 0, "bbox": [474, 87, 26, 27], "area": 528}, {"id": 8821151, "category_id": 145, "iscrowd": 0, "bbox": [0, 168, 500, 207], "area": 78159}, {"id": 15655136, "category_id": 151, "iscrowd": 0, "bbox": [0, 319, 228, 56], "area": 6870}, {"id": 8680306, "category_id": 161, "iscrowd": 0, "bbox": [40, 113, 127, 80], "area": 958}, {"id": 12362907, "category_id": 184, "iscrowd": 0, "bbox": [264, 0, 236, 119], "area": 13589}, {"id": 10191730, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 27465}, {"id": 16576205, "category_id": 187, "iscrowd": 0, "bbox": [304, 0, 196, 43], "area": 4301}, {"id": 7230286, "category_id": 197, "iscrowd": 0, "bbox": [80, 120, 315, 60], "area": 4107}, {"id": 6377293, "category_id": 199, "iscrowd": 0, "bbox": [0, 44, 408, 148], "area": 1632}], "file_name": "000000486104.png", "image_id": 486104}, {"segments_info": [{"id": 5657174, "category_id": 1, "iscrowd": 0, "bbox": [415, 157, 225, 266], "area": 22509}, {"id": 6845821, "category_id": 22, "iscrowd": 0, "bbox": [6, 28, 634, 393], "area": 192633}, {"id": 11387591, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 482, 39], "area": 13468}, {"id": 10927816, "category_id": 194, "iscrowd": 0, "bbox": [0, 181, 469, 246], "area": 16945}, {"id": 11389408, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 182], "area": 16434}], "file_name": "000000486112.png", "image_id": 486112}, {"segments_info": [{"id": 1844021, "category_id": 1, "iscrowd": 0, "bbox": [73, 1, 520, 242], "area": 80402}, {"id": 1057370, "category_id": 60, "iscrowd": 0, "bbox": [157, 229, 135, 81], "area": 3792}, {"id": 1849745, "category_id": 60, "iscrowd": 0, "bbox": [202, 175, 177, 98], "area": 13268}, {"id": 925267, "category_id": 60, "iscrowd": 0, "bbox": [258, 263, 182, 114], "area": 8333}, {"id": 1980289, "category_id": 60, "iscrowd": 0, "bbox": [444, 267, 182, 105], "area": 9975}, {"id": 1386855, "category_id": 60, "iscrowd": 0, "bbox": [122, 309, 220, 113], "area": 20431}, {"id": 1123944, "category_id": 60, "iscrowd": 0, "bbox": [355, 191, 205, 106], "area": 16108}, {"id": 2245796, "category_id": 60, "iscrowd": 0, "bbox": [344, 315, 231, 108], "area": 20508}, {"id": 1850258, "category_id": 60, "iscrowd": 0, "bbox": [28, 246, 204, 130], "area": 15520}, {"id": 1389423, "category_id": 118, "iscrowd": 0, "bbox": [0, 0, 640, 311], "area": 60911}, {"id": 2240579, "category_id": 189, "iscrowd": 0, "bbox": [0, 356, 640, 71], "area": 6043}, {"id": 1256813, "category_id": 196, "iscrowd": 0, "bbox": [135, 265, 406, 162], "area": 2320}], "file_name": "000000486438.png", "image_id": 486438}, {"segments_info": [{"id": 8029839, "category_id": 18, "iscrowd": 0, "bbox": [66, 53, 235, 182], "area": 22615}, {"id": 6844330, "category_id": 65, "iscrowd": 0, "bbox": [0, 1, 500, 296], "area": 79624}, {"id": 6252961, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 500, 328], "area": 3115}, {"id": 3829661, "category_id": 118, "iscrowd": 0, "bbox": [0, 67, 500, 308], "area": 81556}], "file_name": "000000486479.png", "image_id": 486479}, {"segments_info": [{"id": 6192773, "category_id": 86, "iscrowd": 0, "bbox": [265, 404, 123, 190], "area": 18439}, {"id": 5208705, "category_id": 119, "iscrowd": 0, "bbox": [181, 322, 211, 150], "area": 9869}, {"id": 3954784, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 480, 627], "area": 108321}, {"id": 1718324, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 364, 565], "area": 137011}, {"id": 8165275, "category_id": 189, "iscrowd": 0, "bbox": [0, 502, 480, 138], "area": 33420}], "file_name": "000000486573.png", "image_id": 486573}, {"segments_info": [{"id": 13094355, "category_id": 47, "iscrowd": 0, "bbox": [342, 166, 69, 77], "area": 4158}, {"id": 10397358, "category_id": 70, "iscrowd": 0, "bbox": [54, 93, 372, 442], "area": 51326}, {"id": 2567996, "category_id": 190, "iscrowd": 0, "bbox": [0, 401, 245, 239], "area": 40797}, {"id": 5742299, "category_id": 196, "iscrowd": 0, "bbox": [279, 233, 72, 26], "area": 1406}, {"id": 10789502, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 426, 411], "area": 91076}], "file_name": "000000487583.png", "image_id": 487583}, {"segments_info": [{"id": 4211781, "category_id": 44, "iscrowd": 0, "bbox": [436, 179, 3, 9], "area": 22}, {"id": 6183251, "category_id": 44, "iscrowd": 0, "bbox": [416, 179, 5, 12], "area": 50}, {"id": 3489343, "category_id": 44, "iscrowd": 0, "bbox": [432, 165, 8, 10], "area": 60}, {"id": 7238510, "category_id": 44, "iscrowd": 0, "bbox": [620, 144, 13, 41], "area": 347}, {"id": 4079678, "category_id": 44, "iscrowd": 0, "bbox": [411, 180, 5, 11], "area": 41}, {"id": 11578794, "category_id": 44, "iscrowd": 0, "bbox": [630, 156, 10, 30], "area": 240}, {"id": 4081992, "category_id": 44, "iscrowd": 0, "bbox": [444, 164, 6, 10], "area": 56}, {"id": 4108974, "category_id": 51, "iscrowd": 0, "bbox": [502, 427, 116, 53], "area": 4596}, {"id": 7437442, "category_id": 62, "iscrowd": 0, "bbox": [415, 251, 185, 197], "area": 17876}, {"id": 7964816, "category_id": 62, "iscrowd": 0, "bbox": [102, 396, 109, 84], "area": 5364}, {"id": 8030608, "category_id": 62, "iscrowd": 0, "bbox": [578, 325, 62, 119], "area": 3701}, {"id": 1777440, "category_id": 78, "iscrowd": 0, "bbox": [353, 109, 73, 44], "area": 3051}, {"id": 1645595, "category_id": 79, "iscrowd": 0, "bbox": [349, 165, 67, 32], "area": 1727}, {"id": 1513495, "category_id": 82, "iscrowd": 0, "bbox": [235, 118, 32, 203], "area": 4755}, {"id": 1514272, "category_id": 107, "iscrowd": 0, "bbox": [480, 180, 27, 11], "area": 221}, {"id": 8032147, "category_id": 112, "iscrowd": 0, "bbox": [50, 69, 154, 260], "area": 31336}, {"id": 3363181, "category_id": 118, "iscrowd": 0, "bbox": [33, 301, 607, 179], "area": 47300}, {"id": 3361372, "category_id": 130, "iscrowd": 0, "bbox": [375, 0, 23, 20], "area": 338}, {"id": 6600106, "category_id": 141, "iscrowd": 0, "bbox": [0, 279, 539, 201], "area": 12938}, {"id": 4019554, "category_id": 186, "iscrowd": 0, "bbox": [232, 0, 352, 38], "area": 4651}, {"id": 2180194, "category_id": 188, "iscrowd": 0, "bbox": [345, 0, 236, 153], "area": 18795}, {"id": 2963782, "category_id": 189, "iscrowd": 0, "bbox": [379, 166, 261, 314], "area": 5052}, {"id": 8230557, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 415], "area": 141881}], "file_name": "000000488075.png", "image_id": 488075}, {"segments_info": [{"id": 2435376, "category_id": 1, "iscrowd": 0, "bbox": [138, 105, 222, 325], "area": 34661}, {"id": 2963526, "category_id": 47, "iscrowd": 0, "bbox": [231, 421, 101, 172], "area": 13913}, {"id": 13881809, "category_id": 48, "iscrowd": 0, "bbox": [47, 564, 167, 53], "area": 1954}, {"id": 4549534, "category_id": 54, "iscrowd": 0, "bbox": [45, 529, 163, 69], "area": 7083}, {"id": 6843244, "category_id": 67, "iscrowd": 0, "bbox": [0, 488, 361, 145], "area": 28422}, {"id": 3880502, "category_id": 185, "iscrowd": 0, "bbox": [0, 224, 260, 272], "area": 49178}, {"id": 16645628, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 361, 240], "area": 49521}, {"id": 1251630, "category_id": 189, "iscrowd": 0, "bbox": [0, 591, 361, 49], "area": 3560}, {"id": 12227444, "category_id": 197, "iscrowd": 0, "bbox": [0, 45, 361, 221], "area": 23203}], "file_name": "000000488166.png", "image_id": 488166}, {"segments_info": [{"id": 7370367, "category_id": 1, "iscrowd": 0, "bbox": [176, 33, 292, 327], "area": 44206}, {"id": 8488073, "category_id": 1, "iscrowd": 0, "bbox": [98, 187, 17, 46], "area": 418}, {"id": 11119269, "category_id": 3, "iscrowd": 0, "bbox": [512, 192, 23, 33], "area": 653}, {"id": 10591891, "category_id": 3, "iscrowd": 0, "bbox": [545, 187, 38, 12], "area": 365}, {"id": 8090461, "category_id": 6, "iscrowd": 0, "bbox": [98, 163, 22, 39], "area": 507}, {"id": 4278099, "category_id": 19, "iscrowd": 0, "bbox": [110, 42, 403, 312], "area": 42427}, {"id": 11583175, "category_id": 149, "iscrowd": 0, "bbox": [0, 190, 543, 63], "area": 2958}, {"id": 14280685, "category_id": 154, "iscrowd": 0, "bbox": [0, 223, 640, 137], "area": 42004}, {"id": 7707061, "category_id": 177, "iscrowd": 0, "bbox": [56, 88, 584, 183], "area": 23281}, {"id": 7506561, "category_id": 181, "iscrowd": 0, "bbox": [608, 146, 32, 49], "area": 1316}, {"id": 9216661, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 584, 207], "area": 24193}, {"id": 16178878, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 183], "area": 45285}], "file_name": "000000488251.png", "image_id": 488251}, {"segments_info": [{"id": 9671554, "category_id": 5, "iscrowd": 0, "bbox": [354, 225, 117, 38], "area": 1700}, {"id": 11783119, "category_id": 154, "iscrowd": 0, "bbox": [0, 248, 640, 178], "area": 108907}, {"id": 8688506, "category_id": 155, "iscrowd": 0, "bbox": [0, 233, 640, 27], "area": 6627}, {"id": 13746042, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 242], "area": 143546}, {"id": 6057308, "category_id": 192, "iscrowd": 0, "bbox": [0, 201, 640, 57], "area": 11787}], "file_name": "000000488270.png", "image_id": 488270}, {"segments_info": [{"id": 6315614, "category_id": 4, "iscrowd": 0, "bbox": [26, 3, 346, 628], "area": 105572}, {"id": 4144448, "category_id": 4, "iscrowd": 0, "bbox": [381, 0, 71, 81], "area": 3164}, {"id": 11583695, "category_id": 100, "iscrowd": 0, "bbox": [307, 68, 74, 63], "area": 2993}, {"id": 8817027, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 71, 231], "area": 10924}, {"id": 5856348, "category_id": 181, "iscrowd": 0, "bbox": [287, 0, 75, 93], "area": 4409}, {"id": 12303806, "category_id": 190, "iscrowd": 0, "bbox": [0, 175, 191, 366], "area": 25528}, {"id": 9278100, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 107846}, {"id": 6843245, "category_id": 199, "iscrowd": 0, "bbox": [168, 0, 229, 269], "area": 14509}], "file_name": "000000488385.png", "image_id": 488385}, {"segments_info": [{"id": 5855085, "category_id": 1, "iscrowd": 0, "bbox": [224, 433, 9, 26], "area": 120}, {"id": 2564647, "category_id": 1, "iscrowd": 0, "bbox": [255, 431, 12, 39], "area": 304}, {"id": 7108504, "category_id": 1, "iscrowd": 0, "bbox": [240, 431, 11, 36], "area": 255}, {"id": 4804447, "category_id": 1, "iscrowd": 0, "bbox": [215, 432, 13, 35], "area": 282}, {"id": 5725285, "category_id": 1, "iscrowd": 0, "bbox": [251, 430, 8, 27], "area": 160}, {"id": 6709097, "category_id": 1, "iscrowd": 0, "bbox": [235, 433, 6, 23], "area": 107}, {"id": 3680289, "category_id": 1, "iscrowd": 0, "bbox": [266, 432, 45, 110], "area": 1705}, {"id": 2105894, "category_id": 2, "iscrowd": 0, "bbox": [3, 475, 103, 82], "area": 4584}, {"id": 1316374, "category_id": 2, "iscrowd": 0, "bbox": [169, 464, 10, 25], "area": 186}, {"id": 3027508, "category_id": 2, "iscrowd": 0, "bbox": [169, 457, 41, 26], "area": 347}, {"id": 2961714, "category_id": 2, "iscrowd": 0, "bbox": [274, 478, 49, 86], "area": 1952}, {"id": 1579289, "category_id": 2, "iscrowd": 0, "bbox": [179, 463, 23, 22], "area": 383}, {"id": 4076852, "category_id": 28, "iscrowd": 0, "bbox": [252, 411, 57, 20], "area": 715}, {"id": 6712701, "category_id": 92, "iscrowd": 0, "bbox": [201, 361, 72, 56], "area": 2557}, {"id": 2712184, "category_id": 100, "iscrowd": 0, "bbox": [102, 519, 29, 20], "area": 370}, {"id": 7568004, "category_id": 130, "iscrowd": 0, "bbox": [0, 117, 361, 247], "area": 2051}, {"id": 3357025, "category_id": 166, "iscrowd": 0, "bbox": [0, 308, 400, 126], "area": 7491}, {"id": 2572624, "category_id": 171, "iscrowd": 0, "bbox": [375, 287, 46, 108], "area": 2210}, {"id": 5929602, "category_id": 177, "iscrowd": 0, "bbox": [0, 157, 109, 189], "area": 7315}, {"id": 5725531, "category_id": 181, "iscrowd": 0, "bbox": [0, 193, 464, 169], "area": 6232}, {"id": 7960434, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 398], "area": 139473}, {"id": 4540744, "category_id": 190, "iscrowd": 0, "bbox": [0, 429, 480, 211], "area": 60606}, {"id": 3164501, "category_id": 199, "iscrowd": 0, "bbox": [0, 174, 480, 357], "area": 44927}], "file_name": "000000488592.png", "image_id": 488592}, {"segments_info": [{"id": 7039578, "category_id": 3, "iscrowd": 0, "bbox": [564, 364, 27, 15], "area": 343}, {"id": 5395807, "category_id": 3, "iscrowd": 0, "bbox": [592, 370, 12, 8], "area": 87}, {"id": 5064755, "category_id": 7, "iscrowd": 0, "bbox": [11, 298, 500, 116], "area": 39065}, {"id": 6847096, "category_id": 128, "iscrowd": 0, "bbox": [452, 251, 177, 130], "area": 13009}, {"id": 6252126, "category_id": 147, "iscrowd": 0, "bbox": [0, 355, 629, 134], "area": 55202}, {"id": 6059599, "category_id": 184, "iscrowd": 0, "bbox": [55, 256, 494, 111], "area": 11806}, {"id": 14340836, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 629, 343], "area": 176460}, {"id": 7836337, "category_id": 197, "iscrowd": 0, "bbox": [580, 250, 24, 22], "area": 389}], "file_name": "000000488664.png", "image_id": 488664}, {"segments_info": [{"id": 2170919, "category_id": 1, "iscrowd": 0, "bbox": [155, 184, 289, 290], "area": 35736}, {"id": 4536886, "category_id": 1, "iscrowd": 0, "bbox": [0, 67, 224, 436], "area": 47345}, {"id": 5459023, "category_id": 44, "iscrowd": 0, "bbox": [410, 291, 21, 34], "area": 509}, {"id": 5130574, "category_id": 44, "iscrowd": 0, "bbox": [396, 290, 18, 27], "area": 322}, {"id": 1911611, "category_id": 44, "iscrowd": 0, "bbox": [350, 392, 54, 165], "area": 7049}, {"id": 4869199, "category_id": 46, "iscrowd": 0, "bbox": [344, 392, 31, 69], "area": 963}, {"id": 4276556, "category_id": 46, "iscrowd": 0, "bbox": [240, 442, 73, 134], "area": 5755}, {"id": 4081247, "category_id": 47, "iscrowd": 0, "bbox": [209, 570, 126, 63], "area": 5887}, {"id": 4672620, "category_id": 47, "iscrowd": 0, "bbox": [239, 497, 74, 58], "area": 1166}, {"id": 3682351, "category_id": 51, "iscrowd": 0, "bbox": [26, 494, 29, 46], "area": 570}, {"id": 8285796, "category_id": 51, "iscrowd": 0, "bbox": [141, 302, 54, 36], "area": 1031}, {"id": 6583681, "category_id": 61, "iscrowd": 0, "bbox": [277, 429, 62, 26], "area": 955}, {"id": 1906720, "category_id": 61, "iscrowd": 0, "bbox": [233, 435, 118, 62], "area": 1520}, {"id": 1775387, "category_id": 62, "iscrowd": 0, "bbox": [151, 322, 37, 65], "area": 878}, {"id": 4868953, "category_id": 100, "iscrowd": 0, "bbox": [71, 435, 379, 205], "area": 14672}, {"id": 6379607, "category_id": 107, "iscrowd": 0, "bbox": [123, 322, 357, 116], "area": 6998}, {"id": 5592155, "category_id": 156, "iscrowd": 0, "bbox": [302, 179, 178, 78], "area": 6658}, {"id": 6579047, "category_id": 176, "iscrowd": 0, "bbox": [113, 122, 367, 203], "area": 31361}, {"id": 3422033, "category_id": 177, "iscrowd": 0, "bbox": [0, 10, 134, 62], "area": 2444}, {"id": 14868696, "category_id": 181, "iscrowd": 0, "bbox": [0, 27, 146, 227], "area": 9172}, {"id": 2239536, "category_id": 184, "iscrowd": 0, "bbox": [195, 444, 285, 151], "area": 7353}, {"id": 8424852, "category_id": 188, "iscrowd": 0, "bbox": [223, 0, 257, 191], "area": 37791}, {"id": 2632764, "category_id": 189, "iscrowd": 0, "bbox": [32, 427, 448, 213], "area": 25273}, {"id": 7107704, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 240, 149], "area": 15301}], "file_name": "000000488673.png", "image_id": 488673}, {"segments_info": [{"id": 9474718, "category_id": 1, "iscrowd": 0, "bbox": [0, 23, 259, 373], "area": 67671}, {"id": 12897228, "category_id": 112, "iscrowd": 0, "bbox": [447, 52, 53, 348], "area": 10005}, {"id": 3422523, "category_id": 199, "iscrowd": 0, "bbox": [181, 0, 319, 378], "area": 16084}], "file_name": "000000488710.png", "image_id": 488710}, {"segments_info": [{"id": 10859960, "category_id": 85, "iscrowd": 0, "bbox": [339, 192, 78, 155], "area": 9405}, {"id": 11643545, "category_id": 85, "iscrowd": 0, "bbox": [170, 182, 147, 158], "area": 16013}, {"id": 5463908, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 256232}], "file_name": "000000488736.png", "image_id": 488736}, {"segments_info": [{"id": 7300451, "category_id": 1, "iscrowd": 0, "bbox": [98, 250, 31, 34], "area": 401}, {"id": 9473677, "category_id": 9, "iscrowd": 0, "bbox": [40, 2, 504, 381], "area": 140581}, {"id": 2305339, "category_id": 18, "iscrowd": 0, "bbox": [312, 229, 86, 45], "area": 1729}, {"id": 5854803, "category_id": 155, "iscrowd": 0, "bbox": [0, 317, 640, 163], "area": 81795}, {"id": 1185562, "category_id": 184, "iscrowd": 0, "bbox": [486, 274, 154, 51], "area": 4580}, {"id": 13220012, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 302], "area": 76087}, {"id": 2103315, "category_id": 192, "iscrowd": 0, "bbox": [0, 295, 49, 24], "area": 915}], "file_name": "000000489014.png", "image_id": 489014}, {"segments_info": [{"id": 7768218, "category_id": 16, "iscrowd": 0, "bbox": [400, 169, 86, 139], "area": 5779}, {"id": 1789245, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 178756}, {"id": 1579545, "category_id": 194, "iscrowd": 0, "bbox": [0, 48, 403, 379], "area": 62940}], "file_name": "000000489046.png", "image_id": 489046}, {"segments_info": [{"id": 3760510, "category_id": 70, "iscrowd": 0, "bbox": [0, 304, 68, 97], "area": 4724}, {"id": 8173277, "category_id": 81, "iscrowd": 0, "bbox": [144, 297, 107, 53], "area": 4011}, {"id": 7909333, "category_id": 107, "iscrowd": 0, "bbox": [60, 251, 276, 197], "area": 18733}, {"id": 14939127, "category_id": 130, "iscrowd": 0, "bbox": [162, 0, 144, 37], "area": 3046}, {"id": 2904936, "category_id": 133, "iscrowd": 0, "bbox": [156, 0, 180, 315], "area": 47426}, {"id": 8171216, "category_id": 168, "iscrowd": 0, "bbox": [203, 326, 98, 59], "area": 3312}, {"id": 3759740, "category_id": 188, "iscrowd": 0, "bbox": [58, 287, 234, 161], "area": 16990}, {"id": 2311012, "category_id": 190, "iscrowd": 0, "bbox": [0, 355, 99, 93], "area": 4868}, {"id": 5675719, "category_id": 195, "iscrowd": 0, "bbox": [149, 263, 35, 19], "area": 373}, {"id": 3963808, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 192, 362], "area": 44943}], "file_name": "000000489091.png", "image_id": 489091}, {"segments_info": [{"id": 10785419, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 279, 164], "area": 27117}, {"id": 5735073, "category_id": 51, "iscrowd": 0, "bbox": [44, 92, 88, 71], "area": 4287}, {"id": 6858687, "category_id": 51, "iscrowd": 0, "bbox": [132, 97, 173, 115], "area": 13600}, {"id": 6539233, "category_id": 52, "iscrowd": 0, "bbox": [99, 110, 22, 18], "area": 250}, {"id": 7851488, "category_id": 52, "iscrowd": 0, "bbox": [205, 122, 23, 17], "area": 316}, {"id": 9162719, "category_id": 52, "iscrowd": 0, "bbox": [80, 133, 23, 16], "area": 174}, {"id": 8502216, "category_id": 52, "iscrowd": 0, "bbox": [49, 116, 18, 12], "area": 112}, {"id": 8834517, "category_id": 52, "iscrowd": 0, "bbox": [156, 130, 12, 20], "area": 198}, {"id": 6978169, "category_id": 107, "iscrowd": 0, "bbox": [271, 28, 34, 61], "area": 1381}, {"id": 4422508, "category_id": 122, "iscrowd": 0, "bbox": [0, 26, 6, 21], "area": 68}, {"id": 10992564, "category_id": 188, "iscrowd": 0, "bbox": [0, 81, 305, 84], "area": 3451}, {"id": 5870515, "category_id": 189, "iscrowd": 0, "bbox": [0, 129, 305, 100], "area": 16650}], "file_name": "000000489305.png", "image_id": 489305}, {"segments_info": [{"id": 2963530, "category_id": 1, "iscrowd": 0, "bbox": [55, 91, 313, 549], "area": 53512}, {"id": 11975590, "category_id": 42, "iscrowd": 0, "bbox": [0, 137, 426, 502], "area": 100153}, {"id": 11515314, "category_id": 178, "iscrowd": 0, "bbox": [0, 0, 426, 640], "area": 112785}], "file_name": "000000489339.png", "image_id": 489339}, {"segments_info": [{"id": 6056814, "category_id": 1, "iscrowd": 0, "bbox": [56, 12, 468, 601], "area": 158154}, {"id": 2569776, "category_id": 64, "iscrowd": 0, "bbox": [510, 86, 128, 113], "area": 6299}, {"id": 15657444, "category_id": 75, "iscrowd": 0, "bbox": [444, 343, 99, 161], "area": 3033}, {"id": 13555155, "category_id": 75, "iscrowd": 0, "bbox": [373, 350, 87, 199], "area": 9101}, {"id": 2899271, "category_id": 156, "iscrowd": 0, "bbox": [492, 157, 148, 465], "area": 43975}, {"id": 7108728, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 622], "area": 133398}], "file_name": "000000489611.png", "image_id": 489611}, {"segments_info": [{"id": 2831178, "category_id": 1, "iscrowd": 0, "bbox": [106, 18, 534, 520], "area": 164620}, {"id": 3689559, "category_id": 62, "iscrowd": 0, "bbox": [0, 255, 81, 144], "area": 4050}, {"id": 11383476, "category_id": 75, "iscrowd": 0, "bbox": [45, 407, 141, 71], "area": 4346}, {"id": 6451059, "category_id": 84, "iscrowd": 0, "bbox": [121, 188, 6, 19], "area": 77}, {"id": 5204077, "category_id": 84, "iscrowd": 0, "bbox": [116, 121, 19, 32], "area": 430}, {"id": 3489085, "category_id": 84, "iscrowd": 0, "bbox": [118, 157, 9, 26], "area": 167}, {"id": 4277089, "category_id": 84, "iscrowd": 0, "bbox": [112, 154, 9, 29], "area": 163}, {"id": 4677473, "category_id": 84, "iscrowd": 0, "bbox": [105, 123, 10, 25], "area": 214}, {"id": 11185575, "category_id": 84, "iscrowd": 0, "bbox": [94, 267, 10, 72], "area": 604}, {"id": 9016210, "category_id": 112, "iscrowd": 0, "bbox": [113, 91, 153, 233], "area": 15323}, {"id": 3162702, "category_id": 118, "iscrowd": 0, "bbox": [0, 356, 350, 182], "area": 7322}, {"id": 2699571, "category_id": 156, "iscrowd": 0, "bbox": [74, 51, 352, 333], "area": 11132}, {"id": 9147535, "category_id": 181, "iscrowd": 0, "bbox": [0, 34, 84, 198], "area": 13489}, {"id": 2571076, "category_id": 189, "iscrowd": 0, "bbox": [0, 245, 122, 160], "area": 7639}, {"id": 8095112, "category_id": 195, "iscrowd": 0, "bbox": [205, 434, 38, 50], "area": 1231}, {"id": 9215388, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 344], "area": 71207}], "file_name": "000000489764.png", "image_id": 489764}, {"segments_info": [{"id": 9408399, "category_id": 1, "iscrowd": 0, "bbox": [8, 205, 130, 355], "area": 27210}, {"id": 10921638, "category_id": 1, "iscrowd": 0, "bbox": [243, 38, 81, 130], "area": 4914}, {"id": 11908533, "category_id": 1, "iscrowd": 0, "bbox": [284, 370, 166, 187], "area": 17047}, {"id": 6052956, "category_id": 1, "iscrowd": 0, "bbox": [147, 387, 149, 173], "area": 16022}, {"id": 11645361, "category_id": 1, "iscrowd": 0, "bbox": [119, 224, 96, 324], "area": 15441}, {"id": 10724259, "category_id": 1, "iscrowd": 0, "bbox": [197, 129, 93, 125], "area": 6270}, {"id": 6579300, "category_id": 1, "iscrowd": 0, "bbox": [345, 94, 53, 90], "area": 2638}, {"id": 10658466, "category_id": 1, "iscrowd": 0, "bbox": [533, 373, 107, 187], "area": 12405}, {"id": 8026746, "category_id": 1, "iscrowd": 0, "bbox": [317, 121, 51, 53], "area": 1765}, {"id": 11316396, "category_id": 1, "iscrowd": 0, "bbox": [290, 217, 119, 234], "area": 12086}, {"id": 10724252, "category_id": 1, "iscrowd": 0, "bbox": [417, 337, 150, 229], "area": 21105}, {"id": 9211020, "category_id": 1, "iscrowd": 0, "bbox": [251, 116, 49, 90], "area": 2532}, {"id": 10790052, "category_id": 1, "iscrowd": 0, "bbox": [115, 124, 91, 117], "area": 5737}, {"id": 9934743, "category_id": 1, "iscrowd": 1, "bbox": [19, 5, 602, 528], "area": 115666}, {"id": 9803157, "category_id": 32, "iscrowd": 0, "bbox": [144, 75, 23, 50], "area": 571}, {"id": 8224125, "category_id": 32, "iscrowd": 0, "bbox": [197, 77, 19, 31], "area": 237}, {"id": 3684408, "category_id": 32, "iscrowd": 0, "bbox": [455, 181, 12, 20], "area": 153}, {"id": 3223857, "category_id": 32, "iscrowd": 0, "bbox": [423, 287, 18, 41], "area": 311}, {"id": 6381921, "category_id": 32, "iscrowd": 0, "bbox": [471, 267, 26, 69], "area": 846}, {"id": 8289918, "category_id": 32, "iscrowd": 0, "bbox": [279, 104, 11, 16], "area": 113}, {"id": 3026478, "category_id": 32, "iscrowd": 0, "bbox": [349, 91, 9, 25], "area": 92}, {"id": 6842472, "category_id": 86, "iscrowd": 0, "bbox": [49, 26, 42, 84], "area": 2233}, {"id": 12566463, "category_id": 109, "iscrowd": 0, "bbox": [223, 0, 293, 168], "area": 23031}, {"id": 3618615, "category_id": 176, "iscrowd": 0, "bbox": [0, 244, 156, 322], "area": 13424}, {"id": 12303291, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 380], "area": 32117}], "file_name": "000000489842.png", "image_id": 489842}, {"segments_info": [{"id": 6647163, "category_id": 1, "iscrowd": 0, "bbox": [83, 0, 462, 538], "area": 79662}, {"id": 5336454, "category_id": 41, "iscrowd": 0, "bbox": [252, 432, 205, 178], "area": 11265}, {"id": 7242640, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 282560}], "file_name": "000000489924.png", "image_id": 489924}, {"segments_info": [{"id": 2169620, "category_id": 8, "iscrowd": 0, "bbox": [142, 34, 220, 88], "area": 13415}, {"id": 8816514, "category_id": 16, "iscrowd": 0, "bbox": [241, 174, 37, 49], "area": 814}, {"id": 7238001, "category_id": 16, "iscrowd": 0, "bbox": [101, 162, 49, 60], "area": 1308}, {"id": 10263188, "category_id": 16, "iscrowd": 0, "bbox": [202, 180, 38, 33], "area": 564}, {"id": 9868689, "category_id": 16, "iscrowd": 0, "bbox": [308, 136, 35, 54], "area": 414}, {"id": 11644840, "category_id": 16, "iscrowd": 0, "bbox": [159, 184, 35, 61], "area": 744}, {"id": 11250598, "category_id": 16, "iscrowd": 0, "bbox": [296, 161, 21, 36], "area": 354}, {"id": 10658719, "category_id": 16, "iscrowd": 0, "bbox": [351, 154, 45, 47], "area": 621}, {"id": 12369077, "category_id": 16, "iscrowd": 0, "bbox": [224, 153, 25, 35], "area": 424}, {"id": 9474187, "category_id": 16, "iscrowd": 0, "bbox": [379, 172, 37, 64], "area": 865}, {"id": 12697270, "category_id": 16, "iscrowd": 0, "bbox": [207, 168, 34, 38], "area": 359}, {"id": 9078400, "category_id": 16, "iscrowd": 0, "bbox": [377, 181, 58, 45], "area": 573}, {"id": 10987426, "category_id": 16, "iscrowd": 0, "bbox": [339, 175, 33, 36], "area": 490}, {"id": 11907240, "category_id": 16, "iscrowd": 0, "bbox": [34, 174, 46, 66], "area": 790}, {"id": 9012090, "category_id": 16, "iscrowd": 1, "bbox": [38, 178, 443, 38], "area": 260}, {"id": 7766924, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 500, 107], "area": 33982}, {"id": 5067096, "category_id": 149, "iscrowd": 0, "bbox": [0, 83, 500, 252], "area": 94193}, {"id": 10709772, "category_id": 161, "iscrowd": 0, "bbox": [377, 76, 18, 18], "area": 174}, {"id": 5526866, "category_id": 178, "iscrowd": 0, "bbox": [0, 180, 350, 95], "area": 11517}], "file_name": "000000490125.png", "image_id": 490125}, {"segments_info": [{"id": 4209471, "category_id": 1, "iscrowd": 0, "bbox": [56, 248, 237, 62], "area": 3974}, {"id": 2702161, "category_id": 18, "iscrowd": 0, "bbox": [281, 231, 103, 78], "area": 4151}, {"id": 10002610, "category_id": 42, "iscrowd": 0, "bbox": [185, 281, 275, 33], "area": 2498}, {"id": 9800841, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 262299}], "file_name": "000000490171.png", "image_id": 490171}, {"segments_info": [{"id": 10987951, "category_id": 5, "iscrowd": 0, "bbox": [9, 46, 627, 165], "area": 34304}, {"id": 10856605, "category_id": 185, "iscrowd": 0, "bbox": [0, 37, 640, 201], "area": 76227}, {"id": 12565671, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 53], "area": 28580}, {"id": 7381411, "category_id": 193, "iscrowd": 0, "bbox": [83, 203, 557, 35], "area": 12675}], "file_name": "000000490413.png", "image_id": 490413}, {"segments_info": [{"id": 6839637, "category_id": 9, "iscrowd": 0, "bbox": [380, 2, 260, 291], "area": 21161}, {"id": 9085365, "category_id": 9, "iscrowd": 0, "bbox": [1, 0, 193, 307], "area": 12062}, {"id": 4805219, "category_id": 9, "iscrowd": 0, "bbox": [286, 238, 114, 36], "area": 3093}, {"id": 3292753, "category_id": 144, "iscrowd": 0, "bbox": [25, 218, 602, 51], "area": 7991}, {"id": 7363135, "category_id": 155, "iscrowd": 0, "bbox": [0, 245, 640, 235], "area": 123300}, {"id": 3225661, "category_id": 184, "iscrowd": 0, "bbox": [0, 40, 640, 207], "area": 43472}, {"id": 12108479, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 192], "area": 95003}], "file_name": "000000490470.png", "image_id": 490470}, {"segments_info": [{"id": 8151632, "category_id": 1, "iscrowd": 0, "bbox": [191, 117, 321, 188], "area": 14340}, {"id": 1708049, "category_id": 27, "iscrowd": 0, "bbox": [225, 145, 48, 74], "area": 1720}, {"id": 7823439, "category_id": 36, "iscrowd": 0, "bbox": [488, 217, 23, 90], "area": 728}, {"id": 13479572, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 246552}, {"id": 2497559, "category_id": 184, "iscrowd": 0, "bbox": [218, 0, 422, 41], "area": 9702}], "file_name": "000000490515.png", "image_id": 490515}, {"segments_info": [{"id": 3748915, "category_id": 1, "iscrowd": 0, "bbox": [225, 99, 16, 50], "area": 452}, {"id": 5130050, "category_id": 1, "iscrowd": 0, "bbox": [260, 92, 9, 39], "area": 254}, {"id": 5524553, "category_id": 1, "iscrowd": 0, "bbox": [166, 96, 22, 50], "area": 531}, {"id": 2367537, "category_id": 1, "iscrowd": 0, "bbox": [185, 102, 11, 42], "area": 253}, {"id": 2300214, "category_id": 1, "iscrowd": 0, "bbox": [193, 106, 15, 42], "area": 376}, {"id": 3420208, "category_id": 1, "iscrowd": 0, "bbox": [6, 129, 38, 96], "area": 2237}, {"id": 4538684, "category_id": 1, "iscrowd": 0, "bbox": [284, 100, 7, 20], "area": 102}, {"id": 9669254, "category_id": 1, "iscrowd": 0, "bbox": [346, 86, 6, 17], "area": 68}, {"id": 5790049, "category_id": 1, "iscrowd": 0, "bbox": [202, 101, 7, 25], "area": 76}, {"id": 6516348, "category_id": 1, "iscrowd": 0, "bbox": [301, 87, 6, 10], "area": 34}, {"id": 3549218, "category_id": 1, "iscrowd": 0, "bbox": [38, 103, 20, 20], "area": 246}, {"id": 7695726, "category_id": 1, "iscrowd": 0, "bbox": [272, 92, 7, 27], "area": 139}, {"id": 3160640, "category_id": 1, "iscrowd": 0, "bbox": [216, 106, 12, 42], "area": 303}, {"id": 5855323, "category_id": 1, "iscrowd": 1, "bbox": [307, 81, 74, 37], "area": 938}, {"id": 5594722, "category_id": 2, "iscrowd": 0, "bbox": [68, 170, 37, 66], "area": 1354}, {"id": 5591637, "category_id": 2, "iscrowd": 0, "bbox": [340, 229, 37, 39], "area": 532}, {"id": 6119008, "category_id": 3, "iscrowd": 0, "bbox": [353, 107, 22, 36], "area": 559}, {"id": 8618880, "category_id": 3, "iscrowd": 0, "bbox": [377, 81, 75, 87], "area": 4667}, {"id": 5723987, "category_id": 4, "iscrowd": 0, "bbox": [334, 178, 74, 50], "area": 1503}, {"id": 6119010, "category_id": 4, "iscrowd": 0, "bbox": [191, 192, 213, 108], "area": 2917}, {"id": 5262670, "category_id": 4, "iscrowd": 0, "bbox": [320, 128, 93, 52], "area": 1428}, {"id": 4670788, "category_id": 4, "iscrowd": 0, "bbox": [351, 207, 72, 70], "area": 2331}, {"id": 7040364, "category_id": 4, "iscrowd": 0, "bbox": [298, 164, 105, 33], "area": 1449}, {"id": 5066318, "category_id": 4, "iscrowd": 0, "bbox": [230, 213, 63, 26], "area": 927}, {"id": 2433311, "category_id": 4, "iscrowd": 0, "bbox": [109, 204, 308, 189], "area": 24915}, {"id": 8552835, "category_id": 4, "iscrowd": 0, "bbox": [299, 143, 37, 25], "area": 286}, {"id": 6709350, "category_id": 4, "iscrowd": 0, "bbox": [290, 146, 102, 42], "area": 1494}, {"id": 9276814, "category_id": 4, "iscrowd": 0, "bbox": [394, 188, 20, 38], "area": 384}, {"id": 7368298, "category_id": 4, "iscrowd": 0, "bbox": [315, 150, 61, 12], "area": 356}, {"id": 7960696, "category_id": 4, "iscrowd": 0, "bbox": [0, 334, 460, 294], "area": 93566}, {"id": 4473154, "category_id": 4, "iscrowd": 1, "bbox": [112, 92, 333, 405], "area": 20277}, {"id": 7764089, "category_id": 8, "iscrowd": 0, "bbox": [443, 47, 37, 74], "area": 2429}, {"id": 6188419, "category_id": 10, "iscrowd": 0, "bbox": [387, 60, 4, 4], "area": 14}, {"id": 5066342, "category_id": 10, "iscrowd": 0, "bbox": [347, 74, 6, 6], "area": 31}, {"id": 10790325, "category_id": 10, "iscrowd": 0, "bbox": [406, 44, 4, 9], "area": 31}, {"id": 3488314, "category_id": 11, "iscrowd": 0, "bbox": [196, 143, 13, 33], "area": 252}, {"id": 8555920, "category_id": 149, "iscrowd": 0, "bbox": [0, 90, 480, 550], "area": 65562}, {"id": 3957337, "category_id": 184, "iscrowd": 0, "bbox": [54, 0, 362, 145], "area": 15712}, {"id": 2105633, "category_id": 185, "iscrowd": 0, "bbox": [31, 108, 46, 61], "area": 1934}, {"id": 16317177, "category_id": 187, "iscrowd": 0, "bbox": [391, 0, 58, 72], "area": 2218}, {"id": 7701383, "category_id": 191, "iscrowd": 0, "bbox": [0, 105, 306, 185], "area": 14967}, {"id": 3685695, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 164], "area": 30624}, {"id": 5526098, "category_id": 199, "iscrowd": 0, "bbox": [303, 91, 21, 20], "area": 58}], "file_name": "000000490936.png", "image_id": 490936}, {"segments_info": [{"id": 8422802, "category_id": 1, "iscrowd": 0, "bbox": [353, 147, 121, 280], "area": 21907}, {"id": 6184564, "category_id": 1, "iscrowd": 0, "bbox": [216, 174, 122, 251], "area": 17625}, {"id": 4539978, "category_id": 9, "iscrowd": 0, "bbox": [440, 147, 100, 110], "area": 3649}, {"id": 2499620, "category_id": 32, "iscrowd": 0, "bbox": [253, 238, 36, 20], "area": 181}, {"id": 7237495, "category_id": 49, "iscrowd": 0, "bbox": [106, 358, 16, 14], "area": 98}, {"id": 9803419, "category_id": 49, "iscrowd": 0, "bbox": [120, 376, 13, 22], "area": 150}, {"id": 6850460, "category_id": 59, "iscrowd": 0, "bbox": [290, 289, 104, 52], "area": 4172}, {"id": 6453399, "category_id": 62, "iscrowd": 0, "bbox": [460, 306, 24, 18], "area": 292}, {"id": 987679, "category_id": 62, "iscrowd": 0, "bbox": [537, 344, 103, 83], "area": 5267}, {"id": 1715780, "category_id": 62, "iscrowd": 0, "bbox": [81, 310, 66, 33], "area": 1380}, {"id": 3757684, "category_id": 62, "iscrowd": 0, "bbox": [65, 333, 89, 30], "area": 1380}, {"id": 2702421, "category_id": 62, "iscrowd": 0, "bbox": [60, 299, 56, 14], "area": 636}, {"id": 1977405, "category_id": 62, "iscrowd": 0, "bbox": [457, 336, 92, 86], "area": 4785}, {"id": 594462, "category_id": 62, "iscrowd": 0, "bbox": [170, 265, 27, 63], "area": 441}, {"id": 396311, "category_id": 62, "iscrowd": 0, "bbox": [195, 272, 17, 61], "area": 540}, {"id": 2439503, "category_id": 62, "iscrowd": 0, "bbox": [0, 300, 42, 15], "area": 440}, {"id": 594978, "category_id": 62, "iscrowd": 0, "bbox": [161, 264, 14, 60], "area": 397}, {"id": 2902633, "category_id": 62, "iscrowd": 0, "bbox": [91, 384, 128, 43], "area": 3079}, {"id": 1121323, "category_id": 62, "iscrowd": 0, "bbox": [0, 319, 32, 48], "area": 1301}, {"id": 791328, "category_id": 62, "iscrowd": 0, "bbox": [304, 347, 50, 48], "area": 1413}, {"id": 1780025, "category_id": 62, "iscrowd": 1, "bbox": [0, 257, 203, 170], "area": 439}, {"id": 4610652, "category_id": 64, "iscrowd": 0, "bbox": [36, 188, 47, 59], "area": 1148}, {"id": 990250, "category_id": 67, "iscrowd": 0, "bbox": [169, 268, 42, 17], "area": 503}, {"id": 4017502, "category_id": 67, "iscrowd": 0, "bbox": [3, 352, 207, 71], "area": 10077}, {"id": 3490385, "category_id": 67, "iscrowd": 0, "bbox": [0, 309, 133, 22], "area": 1176}, {"id": 5398897, "category_id": 67, "iscrowd": 0, "bbox": [446, 301, 176, 65], "area": 4839}, {"id": 3423050, "category_id": 112, "iscrowd": 0, "bbox": [80, 135, 164, 190], "area": 19843}, {"id": 1053986, "category_id": 118, "iscrowd": 0, "bbox": [128, 302, 231, 89], "area": 2327}, {"id": 3686992, "category_id": 189, "iscrowd": 0, "bbox": [0, 295, 61, 129], "area": 631}, {"id": 8425632, "category_id": 196, "iscrowd": 0, "bbox": [290, 309, 31, 34], "area": 169}, {"id": 7105644, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 345], "area": 136646}, {"id": 1712685, "category_id": 200, "iscrowd": 0, "bbox": [150, 304, 208, 123], "area": 4600}], "file_name": "000000491008.png", "image_id": 491008}, {"segments_info": [{"id": 7241336, "category_id": 81, "iscrowd": 0, "bbox": [278, 408, 130, 51], "area": 5724}, {"id": 5796210, "category_id": 81, "iscrowd": 0, "bbox": [4, 409, 131, 46], "area": 5414}, {"id": 10399668, "category_id": 186, "iscrowd": 0, "bbox": [49, 0, 304, 42], "area": 2509}, {"id": 5987166, "category_id": 188, "iscrowd": 0, "bbox": [0, 362, 414, 251], "area": 88079}, {"id": 1908772, "category_id": 190, "iscrowd": 0, "bbox": [0, 610, 414, 30], "area": 11490}, {"id": 12174279, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 414, 439], "area": 149642}], "file_name": "000000491071.png", "image_id": 491071}, {"segments_info": [{"id": 5787471, "category_id": 1, "iscrowd": 0, "bbox": [117, 57, 236, 428], "area": 36462}, {"id": 4539201, "category_id": 4, "iscrowd": 0, "bbox": [26, 207, 452, 433], "area": 88354}, {"id": 3549989, "category_id": 4, "iscrowd": 0, "bbox": [0, 137, 146, 188], "area": 9518}, {"id": 7433592, "category_id": 4, "iscrowd": 0, "bbox": [295, 165, 86, 94], "area": 4210}, {"id": 8748149, "category_id": 4, "iscrowd": 0, "bbox": [442, 135, 36, 123], "area": 3443}, {"id": 3491918, "category_id": 4, "iscrowd": 0, "bbox": [441, 295, 37, 187], "area": 3216}, {"id": 8688280, "category_id": 171, "iscrowd": 0, "bbox": [178, 0, 300, 152], "area": 19779}, {"id": 10654345, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 478, 249], "area": 36744}, {"id": 6844783, "category_id": 191, "iscrowd": 0, "bbox": [0, 267, 478, 373], "area": 64202}, {"id": 5788758, "category_id": 199, "iscrowd": 0, "bbox": [322, 0, 156, 267], "area": 16205}], "file_name": "000000491090.png", "image_id": 491090}, {"segments_info": [{"id": 3287377, "category_id": 1, "iscrowd": 0, "bbox": [52, 153, 63, 104], "area": 2144}, {"id": 4079696, "category_id": 1, "iscrowd": 0, "bbox": [101, 115, 315, 361], "area": 50246}, {"id": 11446162, "category_id": 36, "iscrowd": 0, "bbox": [10, 223, 316, 345], "area": 22838}, {"id": 16052208, "category_id": 159, "iscrowd": 0, "bbox": [0, 473, 443, 167], "area": 38316}, {"id": 14009019, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 443, 379], "area": 82382}], "file_name": "000000491130.png", "image_id": 491130}, {"segments_info": [{"id": 7565423, "category_id": 1, "iscrowd": 0, "bbox": [47, 120, 9, 23], "area": 155}, {"id": 9670276, "category_id": 3, "iscrowd": 0, "bbox": [60, 81, 244, 163], "area": 22730}, {"id": 12630711, "category_id": 3, "iscrowd": 0, "bbox": [232, 111, 28, 11], "area": 225}, {"id": 6776935, "category_id": 4, "iscrowd": 0, "bbox": [199, 3, 441, 471], "area": 111600}, {"id": 10592151, "category_id": 8, "iscrowd": 0, "bbox": [49, 81, 98, 67], "area": 1652}, {"id": 2453647, "category_id": 10, "iscrowd": 0, "bbox": [291, 92, 8, 14], "area": 71}, {"id": 10131083, "category_id": 10, "iscrowd": 0, "bbox": [243, 85, 5, 9], "area": 42}, {"id": 11242885, "category_id": 10, "iscrowd": 0, "bbox": [259, 84, 4, 6], "area": 21}, {"id": 9213592, "category_id": 149, "iscrowd": 0, "bbox": [67, 125, 573, 355], "area": 68141}, {"id": 3297607, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 153], "area": 39810}, {"id": 3885637, "category_id": 185, "iscrowd": 0, "bbox": [320, 55, 320, 89], "area": 11616}, {"id": 16316663, "category_id": 187, "iscrowd": 0, "bbox": [66, 0, 216, 97], "area": 13518}, {"id": 9936545, "category_id": 191, "iscrowd": 0, "bbox": [0, 106, 306, 374], "area": 31110}], "file_name": "000000491213.png", "image_id": 491213}, {"segments_info": [{"id": 1318181, "category_id": 17, "iscrowd": 0, "bbox": [180, 423, 91, 93], "area": 3271}, {"id": 5299418, "category_id": 44, "iscrowd": 0, "bbox": [261, 206, 16, 37], "area": 468}, {"id": 9292672, "category_id": 44, "iscrowd": 0, "bbox": [307, 192, 18, 51], "area": 402}, {"id": 460294, "category_id": 44, "iscrowd": 0, "bbox": [324, 573, 27, 67], "area": 1312}, {"id": 855566, "category_id": 50, "iscrowd": 0, "bbox": [137, 191, 14, 57], "area": 285}, {"id": 5329750, "category_id": 52, "iscrowd": 0, "bbox": [298, 154, 43, 23], "area": 478}, {"id": 1648683, "category_id": 52, "iscrowd": 0, "bbox": [309, 104, 30, 29], "area": 335}, {"id": 1250328, "category_id": 62, "iscrowd": 0, "bbox": [103, 312, 88, 255], "area": 4126}, {"id": 5465449, "category_id": 64, "iscrowd": 0, "bbox": [236, 198, 37, 46], "area": 536}, {"id": 9803151, "category_id": 64, "iscrowd": 0, "bbox": [208, 171, 38, 75], "area": 1482}, {"id": 8289657, "category_id": 64, "iscrowd": 0, "bbox": [270, 181, 29, 62], "area": 1164}, {"id": 7894415, "category_id": 64, "iscrowd": 0, "bbox": [166, 186, 21, 58], "area": 745}, {"id": 1185301, "category_id": 79, "iscrowd": 0, "bbox": [339, 290, 62, 265], "area": 10237}, {"id": 3618356, "category_id": 79, "iscrowd": 0, "bbox": [113, 289, 36, 32], "area": 844}, {"id": 2500390, "category_id": 81, "iscrowd": 0, "bbox": [380, 287, 22, 17], "area": 247}, {"id": 2237476, "category_id": 82, "iscrowd": 0, "bbox": [4, 39, 105, 591], "area": 51884}, {"id": 5330257, "category_id": 107, "iscrowd": 0, "bbox": [356, 289, 42, 18], "area": 228}, {"id": 8421787, "category_id": 109, "iscrowd": 0, "bbox": [194, 31, 99, 115], "area": 9339}, {"id": 2236189, "category_id": 168, "iscrowd": 0, "bbox": [102, 302, 79, 185], "area": 5734}, {"id": 724494, "category_id": 176, "iscrowd": 0, "bbox": [143, 429, 199, 28], "area": 1957}, {"id": 10461861, "category_id": 181, "iscrowd": 0, "bbox": [138, 29, 190, 249], "area": 23637}, {"id": 1581093, "category_id": 186, "iscrowd": 0, "bbox": [36, 0, 362, 39], "area": 12478}, {"id": 6444882, "category_id": 190, "iscrowd": 0, "bbox": [52, 434, 279, 206], "area": 23960}, {"id": 1185046, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 97444}, {"id": 4408125, "category_id": 200, "iscrowd": 0, "bbox": [196, 449, 190, 163], "area": 21152}], "file_name": "000000491216.png", "image_id": 491216}, {"segments_info": [{"id": 2831682, "category_id": 1, "iscrowd": 0, "bbox": [88, 118, 129, 240], "area": 7311}, {"id": 1184274, "category_id": 1, "iscrowd": 0, "bbox": [0, 57, 178, 318], "area": 28471}, {"id": 1511950, "category_id": 63, "iscrowd": 0, "bbox": [0, 273, 206, 102], "area": 8332}, {"id": 11382408, "category_id": 72, "iscrowd": 0, "bbox": [410, 118, 90, 141], "area": 8750}, {"id": 6387325, "category_id": 75, "iscrowd": 0, "bbox": [155, 245, 26, 25], "area": 243}, {"id": 5794680, "category_id": 75, "iscrowd": 0, "bbox": [220, 261, 31, 12], "area": 153}, {"id": 7570049, "category_id": 75, "iscrowd": 0, "bbox": [245, 255, 31, 18], "area": 216}, {"id": 4278090, "category_id": 76, "iscrowd": 0, "bbox": [169, 215, 26, 10], "area": 149}, {"id": 6246474, "category_id": 85, "iscrowd": 0, "bbox": [154, 158, 44, 49], "area": 1438}, {"id": 2105117, "category_id": 85, "iscrowd": 0, "bbox": [191, 150, 38, 35], "area": 872}, {"id": 4214617, "category_id": 109, "iscrowd": 0, "bbox": [79, 0, 189, 293], "area": 18618}, {"id": 5588800, "category_id": 181, "iscrowd": 0, "bbox": [178, 0, 255, 243], "area": 32197}, {"id": 4336417, "category_id": 185, "iscrowd": 0, "bbox": [293, 126, 88, 79], "area": 4235}, {"id": 4344655, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 85, 13], "area": 761}, {"id": 1776927, "category_id": 189, "iscrowd": 0, "bbox": [179, 193, 321, 182], "area": 20271}, {"id": 4148816, "category_id": 190, "iscrowd": 0, "bbox": [161, 268, 318, 107], "area": 20792}, {"id": 6767145, "category_id": 197, "iscrowd": 0, "bbox": [242, 0, 107, 131], "area": 4606}, {"id": 6316387, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 307], "area": 21179}], "file_name": "000000491366.png", "image_id": 491366}, {"segments_info": [{"id": 8353407, "category_id": 1, "iscrowd": 0, "bbox": [218, 123, 169, 300], "area": 30125}, {"id": 5265497, "category_id": 3, "iscrowd": 0, "bbox": [583, 221, 20, 16], "area": 225}, {"id": 8488583, "category_id": 3, "iscrowd": 0, "bbox": [209, 217, 48, 9], "area": 280}, {"id": 6316899, "category_id": 3, "iscrowd": 0, "bbox": [335, 216, 42, 5], "area": 114}, {"id": 8226181, "category_id": 3, "iscrowd": 0, "bbox": [158, 213, 51, 13], "area": 437}, {"id": 4673619, "category_id": 3, "iscrowd": 0, "bbox": [515, 221, 20, 14], "area": 182}, {"id": 5400173, "category_id": 3, "iscrowd": 0, "bbox": [550, 221, 33, 14], "area": 367}, {"id": 4675932, "category_id": 3, "iscrowd": 0, "bbox": [498, 221, 16, 13], "area": 154}, {"id": 5264467, "category_id": 3, "iscrowd": 0, "bbox": [534, 221, 12, 12], "area": 98}, {"id": 3422006, "category_id": 10, "iscrowd": 0, "bbox": [581, 147, 22, 11], "area": 224}, {"id": 3092785, "category_id": 10, "iscrowd": 0, "bbox": [527, 151, 20, 7], "area": 125}, {"id": 2237990, "category_id": 10, "iscrowd": 0, "bbox": [467, 153, 29, 5], "area": 132}, {"id": 4605508, "category_id": 39, "iscrowd": 0, "bbox": [197, 66, 151, 239], "area": 3793}, {"id": 6646899, "category_id": 128, "iscrowd": 0, "bbox": [561, 214, 17, 22], "area": 118}, {"id": 2712667, "category_id": 145, "iscrowd": 0, "bbox": [0, 256, 640, 172], "area": 77883}, {"id": 2239787, "category_id": 184, "iscrowd": 0, "bbox": [0, 81, 528, 145], "area": 33492}, {"id": 3563873, "category_id": 185, "iscrowd": 0, "bbox": [0, 182, 611, 125], "area": 23643}, {"id": 13816271, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 236], "area": 88736}, {"id": 6782091, "category_id": 197, "iscrowd": 0, "bbox": [14, 148, 382, 70], "area": 1939}, {"id": 2042406, "category_id": 199, "iscrowd": 0, "bbox": [353, 214, 287, 54], "area": 10157}], "file_name": "000000491464.png", "image_id": 491464}, {"segments_info": [{"id": 2170140, "category_id": 10, "iscrowd": 0, "bbox": [295, 48, 16, 35], "area": 485}, {"id": 3354679, "category_id": 10, "iscrowd": 0, "bbox": [292, 119, 6, 33], "area": 157}, {"id": 3091996, "category_id": 10, "iscrowd": 0, "bbox": [301, 128, 13, 25], "area": 304}, {"id": 5922144, "category_id": 149, "iscrowd": 0, "bbox": [0, 219, 375, 281], "area": 99121}, {"id": 14802141, "category_id": 151, "iscrowd": 0, "bbox": [0, 39, 86, 88], "area": 1284}, {"id": 14539482, "category_id": 159, "iscrowd": 0, "bbox": [0, 187, 229, 51], "area": 5141}, {"id": 8355198, "category_id": 184, "iscrowd": 0, "bbox": [156, 96, 39, 47], "area": 982}, {"id": 16184820, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 217, 129], "area": 18148}, {"id": 6250081, "category_id": 191, "iscrowd": 0, "bbox": [171, 194, 46, 44], "area": 1007}, {"id": 6909041, "category_id": 194, "iscrowd": 0, "bbox": [0, 219, 255, 23], "area": 2768}, {"id": 4408134, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 375, 239], "area": 54842}], "file_name": "000000491470.png", "image_id": 491470}, {"segments_info": [{"id": 10461088, "category_id": 62, "iscrowd": 0, "bbox": [167, 294, 187, 198], "area": 28948}, {"id": 9669501, "category_id": 72, "iscrowd": 0, "bbox": [1, 180, 92, 187], "area": 16318}, {"id": 5924455, "category_id": 84, "iscrowd": 0, "bbox": [296, 218, 79, 50], "area": 3322}, {"id": 8619401, "category_id": 84, "iscrowd": 0, "bbox": [349, 284, 6, 49], "area": 241}, {"id": 3690853, "category_id": 84, "iscrowd": 0, "bbox": [320, 281, 6, 48], "area": 235}, {"id": 2633028, "category_id": 84, "iscrowd": 0, "bbox": [343, 151, 10, 45], "area": 328}, {"id": 3159621, "category_id": 84, "iscrowd": 0, "bbox": [311, 146, 33, 52], "area": 1313}, {"id": 6055273, "category_id": 84, "iscrowd": 0, "bbox": [299, 147, 14, 49], "area": 572}, {"id": 8817021, "category_id": 84, "iscrowd": 0, "bbox": [338, 156, 7, 40], "area": 197}, {"id": 4799862, "category_id": 84, "iscrowd": 0, "bbox": [324, 277, 9, 54], "area": 189}, {"id": 7501174, "category_id": 84, "iscrowd": 0, "bbox": [337, 277, 8, 56], "area": 287}, {"id": 7305597, "category_id": 109, "iscrowd": 0, "bbox": [83, 0, 187, 489], "area": 56510}, {"id": 1514789, "category_id": 118, "iscrowd": 0, "bbox": [74, 444, 301, 56], "area": 5665}, {"id": 5659742, "category_id": 156, "iscrowd": 0, "bbox": [278, 109, 97, 361], "area": 17098}, {"id": 5593432, "category_id": 186, "iscrowd": 0, "bbox": [247, 0, 128, 35], "area": 2885}, {"id": 5857878, "category_id": 195, "iscrowd": 0, "bbox": [339, 295, 11, 17], "area": 58}, {"id": 7108220, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 375, 291], "area": 32660}], "file_name": "000000491497.png", "image_id": 491497}, {"segments_info": [{"id": 4413295, "category_id": 24, "iscrowd": 0, "bbox": [41, 31, 224, 228], "area": 22227}, {"id": 9805957, "category_id": 178, "iscrowd": 0, "bbox": [0, 397, 480, 243], "area": 75433}, {"id": 8491953, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 480, 556], "area": 197436}, {"id": 9608886, "category_id": 198, "iscrowd": 0, "bbox": [304, 105, 176, 99], "area": 11839}], "file_name": "000000491613.png", "image_id": 491613}, {"segments_info": [{"id": 5135715, "category_id": 7, "iscrowd": 0, "bbox": [1, 149, 364, 16], "area": 4167}, {"id": 1388602, "category_id": 19, "iscrowd": 0, "bbox": [77, 195, 45, 25], "area": 682}, {"id": 6189936, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 366, 184], "area": 11310}, {"id": 14473429, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 366, 155], "area": 45599}, {"id": 678212, "category_id": 193, "iscrowd": 0, "bbox": [0, 164, 366, 336], "area": 118548}, {"id": 5988450, "category_id": 197, "iscrowd": 0, "bbox": [67, 130, 299, 26], "area": 2457}], "file_name": "000000491683.png", "image_id": 491683}, {"segments_info": [{"id": 1858960, "category_id": 9, "iscrowd": 0, "bbox": [71, 100, 28, 81], "area": 775}, {"id": 2908816, "category_id": 9, "iscrowd": 0, "bbox": [165, 167, 131, 24], "area": 1907}, {"id": 2585768, "category_id": 9, "iscrowd": 0, "bbox": [0, 161, 74, 30], "area": 1601}, {"id": 936829, "category_id": 9, "iscrowd": 0, "bbox": [382, 171, 74, 18], "area": 1033}, {"id": 2447232, "category_id": 9, "iscrowd": 0, "bbox": [127, 107, 107, 73], "area": 4278}, {"id": 4561606, "category_id": 9, "iscrowd": 0, "bbox": [0, 145, 67, 25], "area": 1346}, {"id": 2448264, "category_id": 9, "iscrowd": 0, "bbox": [296, 127, 89, 63], "area": 4309}, {"id": 3833261, "category_id": 9, "iscrowd": 0, "bbox": [0, 117, 61, 30], "area": 644}, {"id": 1986688, "category_id": 9, "iscrowd": 0, "bbox": [396, 167, 14, 8], "area": 83}, {"id": 2582681, "category_id": 9, "iscrowd": 0, "bbox": [235, 166, 26, 6], "area": 119}, {"id": 2317968, "category_id": 9, "iscrowd": 0, "bbox": [451, 166, 49, 21], "area": 786}, {"id": 595492, "category_id": 144, "iscrowd": 0, "bbox": [81, 247, 419, 128], "area": 22725}, {"id": 1059390, "category_id": 155, "iscrowd": 0, "bbox": [0, 155, 500, 220], "area": 71348}, {"id": 946094, "category_id": 185, "iscrowd": 0, "bbox": [125, 165, 15, 22], "area": 85}, {"id": 2176590, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 173], "area": 70239}], "file_name": "000000491725.png", "image_id": 491725}, {"segments_info": [{"id": 5532295, "category_id": 17, "iscrowd": 0, "bbox": [316, 155, 238, 210], "area": 29388}, {"id": 11251663, "category_id": 65, "iscrowd": 0, "bbox": [1, 9, 639, 465], "area": 213373}, {"id": 11973849, "category_id": 93, "iscrowd": 0, "bbox": [0, 213, 640, 266], "area": 5633}, {"id": 11186619, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 377, 213], "area": 52615}], "file_name": "000000491757.png", "image_id": 491757}, {"segments_info": [{"id": 6309670, "category_id": 1, "iscrowd": 0, "bbox": [67, 182, 95, 192], "area": 7535}, {"id": 10393501, "category_id": 1, "iscrowd": 0, "bbox": [53, 96, 350, 534], "area": 116752}, {"id": 6648194, "category_id": 1, "iscrowd": 0, "bbox": [315, 210, 66, 102], "area": 3189}, {"id": 4763008, "category_id": 32, "iscrowd": 0, "bbox": [234, 281, 54, 325], "area": 14610}, {"id": 1777440, "category_id": 62, "iscrowd": 0, "bbox": [402, 291, 27, 41], "area": 219}, {"id": 2040097, "category_id": 62, "iscrowd": 0, "bbox": [433, 285, 30, 44], "area": 798}, {"id": 7573150, "category_id": 151, "iscrowd": 0, "bbox": [0, 75, 226, 108], "area": 19012}, {"id": 8427686, "category_id": 154, "iscrowd": 0, "bbox": [421, 259, 49, 48], "area": 1467}, {"id": 4021867, "category_id": 175, "iscrowd": 0, "bbox": [0, 164, 217, 161], "area": 15951}, {"id": 3752258, "category_id": 181, "iscrowd": 0, "bbox": [58, 188, 105, 91], "area": 3414}, {"id": 3491136, "category_id": 184, "iscrowd": 0, "bbox": [362, 238, 28, 26], "area": 435}, {"id": 8807481, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 250], "area": 60052}, {"id": 3167312, "category_id": 193, "iscrowd": 0, "bbox": [0, 261, 480, 379], "area": 29469}, {"id": 2574182, "category_id": 194, "iscrowd": 0, "bbox": [326, 468, 154, 172], "area": 13594}, {"id": 3028274, "category_id": 197, "iscrowd": 0, "bbox": [299, 195, 181, 187], "area": 7751}], "file_name": "000000491867.png", "image_id": 491867}, {"segments_info": [{"id": 2895155, "category_id": 1, "iscrowd": 0, "bbox": [296, 170, 34, 126], "area": 1802}, {"id": 657930, "category_id": 1, "iscrowd": 0, "bbox": [1, 117, 198, 362], "area": 42434}, {"id": 4804748, "category_id": 1, "iscrowd": 0, "bbox": [319, 179, 18, 55], "area": 415}, {"id": 4014923, "category_id": 1, "iscrowd": 0, "bbox": [515, 168, 7, 26], "area": 104}, {"id": 3617846, "category_id": 1, "iscrowd": 0, "bbox": [513, 173, 3, 12], "area": 31}, {"id": 1974051, "category_id": 1, "iscrowd": 0, "bbox": [248, 159, 63, 157], "area": 4574}, {"id": 4474958, "category_id": 1, "iscrowd": 0, "bbox": [438, 180, 5, 16], "area": 62}, {"id": 3488065, "category_id": 1, "iscrowd": 0, "bbox": [466, 171, 7, 17], "area": 67}, {"id": 5331551, "category_id": 1, "iscrowd": 0, "bbox": [485, 167, 30, 58], "area": 1004}, {"id": 2566444, "category_id": 1, "iscrowd": 0, "bbox": [505, 171, 9, 20], "area": 106}, {"id": 855310, "category_id": 1, "iscrowd": 0, "bbox": [174, 157, 102, 288], "area": 10225}, {"id": 2567990, "category_id": 2, "iscrowd": 0, "bbox": [267, 239, 34, 95], "area": 2007}, {"id": 4674915, "category_id": 2, "iscrowd": 0, "bbox": [317, 245, 6, 23], "area": 79}, {"id": 855311, "category_id": 2, "iscrowd": 0, "bbox": [46, 411, 49, 69], "area": 2536}, {"id": 986896, "category_id": 2, "iscrowd": 0, "bbox": [186, 292, 83, 166], "area": 8158}, {"id": 10465457, "category_id": 3, "iscrowd": 0, "bbox": [357, 179, 11, 5], "area": 29}, {"id": 5000569, "category_id": 3, "iscrowd": 0, "bbox": [347, 182, 9, 6], "area": 42}, {"id": 6842216, "category_id": 3, "iscrowd": 0, "bbox": [358, 182, 11, 6], "area": 46}, {"id": 10003887, "category_id": 3, "iscrowd": 0, "bbox": [323, 177, 19, 21], "area": 223}, {"id": 8423303, "category_id": 6, "iscrowd": 0, "bbox": [0, 0, 184, 250], "area": 23141}, {"id": 4551840, "category_id": 10, "iscrowd": 0, "bbox": [442, 80, 17, 36], "area": 537}, {"id": 8172497, "category_id": 10, "iscrowd": 0, "bbox": [275, 0, 30, 34], "area": 950}, {"id": 3756415, "category_id": 10, "iscrowd": 0, "bbox": [466, 150, 6, 7], "area": 35}, {"id": 4492237, "category_id": 10, "iscrowd": 0, "bbox": [225, 134, 10, 15], "area": 138}, {"id": 4745104, "category_id": 10, "iscrowd": 0, "bbox": [365, 163, 5, 7], "area": 26}, {"id": 4750510, "category_id": 10, "iscrowd": 0, "bbox": [409, 124, 7, 14], "area": 98}, {"id": 12768733, "category_id": 149, "iscrowd": 0, "bbox": [260, 177, 265, 148], "area": 7620}, {"id": 6644316, "category_id": 159, "iscrowd": 0, "bbox": [333, 229, 307, 251], "area": 59392}, {"id": 6779517, "category_id": 184, "iscrowd": 0, "bbox": [287, 138, 112, 61], "area": 1897}, {"id": 16579836, "category_id": 187, "iscrowd": 0, "bbox": [176, 0, 343, 163], "area": 30288}, {"id": 3290164, "category_id": 191, "iscrowd": 0, "bbox": [0, 176, 640, 304], "area": 35919}, {"id": 7367751, "category_id": 195, "iscrowd": 0, "bbox": [558, 214, 28, 41], "area": 928}, {"id": 7108989, "category_id": 197, "iscrowd": 0, "bbox": [21, 0, 619, 271], "area": 52341}], "file_name": "000000492077.png", "image_id": 492077}, {"segments_info": [{"id": 8948630, "category_id": 1, "iscrowd": 0, "bbox": [252, 4, 295, 419], "area": 65417}, {"id": 7762805, "category_id": 1, "iscrowd": 0, "bbox": [52, 105, 104, 156], "area": 6335}, {"id": 8755369, "category_id": 1, "iscrowd": 0, "bbox": [42, 115, 31, 47], "area": 573}, {"id": 15132647, "category_id": 47, "iscrowd": 0, "bbox": [161, 368, 111, 58], "area": 4956}, {"id": 5266536, "category_id": 62, "iscrowd": 0, "bbox": [234, 190, 64, 89], "area": 4317}, {"id": 5725284, "category_id": 62, "iscrowd": 0, "bbox": [117, 185, 102, 81], "area": 2163}, {"id": 3022619, "category_id": 62, "iscrowd": 0, "bbox": [508, 265, 82, 154], "area": 7647}, {"id": 10068132, "category_id": 62, "iscrowd": 0, "bbox": [0, 204, 50, 113], "area": 4450}, {"id": 4410196, "category_id": 62, "iscrowd": 0, "bbox": [31, 177, 48, 53], "area": 1146}, {"id": 11781846, "category_id": 67, "iscrowd": 0, "bbox": [156, 174, 140, 19], "area": 1873}, {"id": 13095900, "category_id": 67, "iscrowd": 0, "bbox": [125, 164, 74, 22], "area": 998}, {"id": 9284031, "category_id": 67, "iscrowd": 0, "bbox": [19, 161, 39, 19], "area": 333}, {"id": 10792378, "category_id": 67, "iscrowd": 0, "bbox": [271, 180, 353, 45], "area": 3077}, {"id": 6184544, "category_id": 73, "iscrowd": 0, "bbox": [74, 208, 269, 192], "area": 23172}, {"id": 3750206, "category_id": 77, "iscrowd": 0, "bbox": [335, 361, 94, 45], "area": 2191}, {"id": 7758964, "category_id": 119, "iscrowd": 0, "bbox": [512, 155, 31, 28], "area": 440}, {"id": 13817559, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 75, 40], "area": 738}, {"id": 13226452, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 640, 156], "area": 35682}, {"id": 6914712, "category_id": 189, "iscrowd": 0, "bbox": [0, 155, 486, 272], "area": 20897}, {"id": 7435121, "category_id": 190, "iscrowd": 0, "bbox": [0, 230, 640, 197], "area": 13873}, {"id": 6778233, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 312], "area": 34942}], "file_name": "000000492110.png", "image_id": 492110}, {"segments_info": [{"id": 5391694, "category_id": 1, "iscrowd": 0, "bbox": [381, 271, 48, 137], "area": 3060}, {"id": 8616585, "category_id": 1, "iscrowd": 0, "bbox": [159, 231, 73, 191], "area": 6466}, {"id": 5129297, "category_id": 1, "iscrowd": 0, "bbox": [366, 264, 33, 64], "area": 1268}, {"id": 5524555, "category_id": 1, "iscrowd": 0, "bbox": [0, 262, 48, 180], "area": 5096}, {"id": 3421252, "category_id": 19, "iscrowd": 0, "bbox": [424, 318, 55, 101], "area": 1902}, {"id": 3748924, "category_id": 19, "iscrowd": 0, "bbox": [318, 305, 152, 182], "area": 11282}, {"id": 4872304, "category_id": 19, "iscrowd": 0, "bbox": [42, 344, 248, 192], "area": 21261}, {"id": 3091518, "category_id": 19, "iscrowd": 0, "bbox": [293, 326, 47, 62], "area": 1626}, {"id": 3421499, "category_id": 19, "iscrowd": 0, "bbox": [23, 360, 119, 152], "area": 4575}, {"id": 4740432, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 398], "area": 117604}, {"id": 16579836, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 183], "area": 36186}, {"id": 8554120, "category_id": 191, "iscrowd": 0, "bbox": [0, 376, 480, 264], "area": 76895}, {"id": 4212816, "category_id": 194, "iscrowd": 0, "bbox": [0, 359, 416, 182], "area": 17003}], "file_name": "000000492282.png", "image_id": 492282}, {"segments_info": [{"id": 5325117, "category_id": 1, "iscrowd": 0, "bbox": [364, 20, 228, 455], "area": 48566}, {"id": 2236958, "category_id": 17, "iscrowd": 0, "bbox": [233, 163, 152, 91], "area": 7085}, {"id": 8022883, "category_id": 27, "iscrowd": 0, "bbox": [297, 132, 96, 110], "area": 2976}, {"id": 4611397, "category_id": 27, "iscrowd": 0, "bbox": [493, 106, 102, 161], "area": 9394}, {"id": 11122872, "category_id": 184, "iscrowd": 0, "bbox": [230, 14, 46, 96], "area": 2689}, {"id": 16382457, "category_id": 187, "iscrowd": 0, "bbox": [67, 0, 573, 44], "area": 15241}, {"id": 5937295, "category_id": 193, "iscrowd": 0, "bbox": [0, 35, 640, 445], "area": 117574}, {"id": 12305098, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 366, 87], "area": 14163}, {"id": 9475738, "category_id": 198, "iscrowd": 0, "bbox": [0, 64, 640, 416], "area": 87080}], "file_name": "000000492284.png", "image_id": 492284}, {"segments_info": [{"id": 5459583, "category_id": 1, "iscrowd": 0, "bbox": [269, 166, 85, 276], "area": 13847}, {"id": 8947089, "category_id": 1, "iscrowd": 0, "bbox": [394, 182, 33, 200], "area": 3239}, {"id": 5852052, "category_id": 1, "iscrowd": 0, "bbox": [98, 104, 169, 449], "area": 36158}, {"id": 3881552, "category_id": 27, "iscrowd": 0, "bbox": [142, 156, 53, 128], "area": 1698}, {"id": 1329571, "category_id": 28, "iscrowd": 0, "bbox": [11, 3, 281, 52], "area": 5778}, {"id": 7575774, "category_id": 28, "iscrowd": 0, "bbox": [249, 1, 178, 98], "area": 14953}, {"id": 2899905, "category_id": 31, "iscrowd": 0, "bbox": [329, 251, 21, 24], "area": 238}, {"id": 3816776, "category_id": 41, "iscrowd": 0, "bbox": [79, 496, 240, 111], "area": 8563}, {"id": 4411028, "category_id": 51, "iscrowd": 0, "bbox": [78, 329, 51, 33], "area": 627}, {"id": 7175380, "category_id": 51, "iscrowd": 0, "bbox": [71, 114, 35, 30], "area": 789}, {"id": 7309528, "category_id": 58, "iscrowd": 0, "bbox": [82, 246, 42, 23], "area": 791}, {"id": 8424431, "category_id": 58, "iscrowd": 0, "bbox": [79, 202, 41, 21], "area": 731}, {"id": 7637996, "category_id": 58, "iscrowd": 0, "bbox": [80, 224, 41, 22], "area": 718}, {"id": 8032180, "category_id": 130, "iscrowd": 0, "bbox": [268, 0, 23, 37], "area": 419}, {"id": 8226956, "category_id": 149, "iscrowd": 0, "bbox": [130, 229, 168, 149], "area": 6100}, {"id": 10001323, "category_id": 176, "iscrowd": 0, "bbox": [164, 123, 251, 102], "area": 9408}, {"id": 5659491, "category_id": 191, "iscrowd": 0, "bbox": [0, 366, 427, 274], "area": 74175}, {"id": 6128782, "category_id": 195, "iscrowd": 0, "bbox": [71, 100, 322, 347], "area": 5767}, {"id": 7897770, "category_id": 196, "iscrowd": 0, "bbox": [0, 81, 135, 331], "area": 21936}, {"id": 7962512, "category_id": 199, "iscrowd": 0, "bbox": [122, 0, 305, 147], "area": 19048}], "file_name": "000000492362.png", "image_id": 492362}, {"segments_info": [{"id": 2565689, "category_id": 1, "iscrowd": 0, "bbox": [450, 191, 65, 77], "area": 2818}, {"id": 2237477, "category_id": 62, "iscrowd": 0, "bbox": [547, 203, 92, 124], "area": 5629}, {"id": 856603, "category_id": 62, "iscrowd": 0, "bbox": [1, 216, 136, 182], "area": 11168}, {"id": 659224, "category_id": 62, "iscrowd": 0, "bbox": [432, 192, 92, 104], "area": 3131}, {"id": 527377, "category_id": 63, "iscrowd": 0, "bbox": [53, 196, 137, 121], "area": 10394}, {"id": 5525850, "category_id": 63, "iscrowd": 0, "bbox": [364, 352, 276, 69], "area": 14076}, {"id": 2307372, "category_id": 64, "iscrowd": 0, "bbox": [301, 109, 29, 97], "area": 1714}, {"id": 1448220, "category_id": 64, "iscrowd": 0, "bbox": [464, 265, 35, 63], "area": 846}, {"id": 1976879, "category_id": 64, "iscrowd": 0, "bbox": [278, 174, 22, 34], "area": 487}, {"id": 1582120, "category_id": 64, "iscrowd": 0, "bbox": [265, 174, 18, 35], "area": 358}, {"id": 1450276, "category_id": 64, "iscrowd": 0, "bbox": [296, 179, 16, 30], "area": 336}, {"id": 2436160, "category_id": 64, "iscrowd": 0, "bbox": [190, 152, 38, 58], "area": 883}, {"id": 3289652, "category_id": 64, "iscrowd": 0, "bbox": [321, 179, 27, 28], "area": 519}, {"id": 3818052, "category_id": 86, "iscrowd": 0, "bbox": [201, 184, 16, 26], "area": 268}, {"id": 2236966, "category_id": 112, "iscrowd": 0, "bbox": [544, 81, 96, 178], "area": 10896}, {"id": 7574926, "category_id": 125, "iscrowd": 0, "bbox": [82, 166, 192, 39], "area": 3100}, {"id": 5924458, "category_id": 128, "iscrowd": 0, "bbox": [320, 73, 77, 131], "area": 6073}, {"id": 10075329, "category_id": 130, "iscrowd": 0, "bbox": [7, 133, 437, 55], "area": 5035}, {"id": 2634304, "category_id": 181, "iscrowd": 0, "bbox": [64, 43, 348, 184], "area": 22815}, {"id": 3822149, "category_id": 184, "iscrowd": 0, "bbox": [78, 59, 253, 149], "area": 13013}, {"id": 330525, "category_id": 186, "iscrowd": 0, "bbox": [11, 0, 551, 54], "area": 16220}, {"id": 1316899, "category_id": 189, "iscrowd": 0, "bbox": [248, 187, 329, 198], "area": 16094}, {"id": 5265243, "category_id": 190, "iscrowd": 0, "bbox": [47, 256, 593, 171], "area": 42215}, {"id": 6262142, "category_id": 193, "iscrowd": 0, "bbox": [100, 131, 158, 76], "area": 1559}, {"id": 4803410, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 289], "area": 63863}, {"id": 2105384, "category_id": 200, "iscrowd": 0, "bbox": [332, 351, 212, 76], "area": 3838}], "file_name": "000000492758.png", "image_id": 492758}, {"segments_info": [{"id": 8229772, "category_id": 44, "iscrowd": 0, "bbox": [54, 338, 67, 116], "area": 5066}, {"id": 858117, "category_id": 47, "iscrowd": 0, "bbox": [24, 156, 136, 222], "area": 21802}, {"id": 2320980, "category_id": 47, "iscrowd": 0, "bbox": [232, 133, 69, 130], "area": 5522}, {"id": 4627602, "category_id": 47, "iscrowd": 0, "bbox": [189, 244, 95, 153], "area": 10049}, {"id": 528644, "category_id": 47, "iscrowd": 0, "bbox": [53, 77, 129, 205], "area": 10896}, {"id": 609204, "category_id": 50, "iscrowd": 0, "bbox": [243, 199, 47, 94], "area": 1620}, {"id": 6399635, "category_id": 81, "iscrowd": 0, "bbox": [16, 298, 614, 319], "area": 148997}, {"id": 8294762, "category_id": 90, "iscrowd": 0, "bbox": [216, 160, 26, 143], "area": 1500}, {"id": 4618324, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 640, 325], "area": 149206}], "file_name": "000000492878.png", "image_id": 492878}, {"segments_info": [{"id": 11051173, "category_id": 72, "iscrowd": 0, "bbox": [207, 29, 105, 99], "area": 8624}, {"id": 2499883, "category_id": 74, "iscrowd": 0, "bbox": [305, 136, 16, 17], "area": 228}, {"id": 4799040, "category_id": 76, "iscrowd": 0, "bbox": [182, 118, 101, 25], "area": 1552}, {"id": 7172217, "category_id": 118, "iscrowd": 0, "bbox": [102, 236, 385, 107], "area": 12812}, {"id": 3554119, "category_id": 189, "iscrowd": 0, "bbox": [86, 97, 343, 110], "area": 16950}, {"id": 1120549, "category_id": 190, "iscrowd": 0, "bbox": [11, 191, 316, 77], "area": 7266}, {"id": 2572133, "category_id": 195, "iscrowd": 0, "bbox": [101, 117, 294, 30], "area": 1140}, {"id": 2244962, "category_id": 199, "iscrowd": 0, "bbox": [11, 0, 489, 253], "area": 57846}], "file_name": "000000492905.png", "image_id": 492905}, {"segments_info": [{"id": 8092770, "category_id": 1, "iscrowd": 0, "bbox": [355, 25, 98, 317], "area": 17386}, {"id": 4010278, "category_id": 2, "iscrowd": 0, "bbox": [21, 16, 473, 585], "area": 169246}, {"id": 8882796, "category_id": 7, "iscrowd": 0, "bbox": [424, 83, 165, 221], "area": 27717}, {"id": 3694461, "category_id": 144, "iscrowd": 0, "bbox": [437, 244, 137, 70], "area": 2077}, {"id": 11916496, "category_id": 187, "iscrowd": 0, "bbox": [417, 20, 172, 99], "area": 9957}, {"id": 6048574, "category_id": 190, "iscrowd": 0, "bbox": [365, 229, 247, 361], "area": 45747}, {"id": 6914415, "category_id": 199, "iscrowd": 0, "bbox": [21, 77, 182, 133], "area": 15230}], "file_name": "000000492937.png", "image_id": 492937}, {"segments_info": [{"id": 5989490, "category_id": 1, "iscrowd": 0, "bbox": [102, 40, 250, 309], "area": 33432}, {"id": 6583222, "category_id": 36, "iscrowd": 0, "bbox": [237, 312, 140, 67], "area": 1758}, {"id": 15988471, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 236537}], "file_name": "000000492968.png", "image_id": 492968}, {"segments_info": [{"id": 6187637, "category_id": 16, "iscrowd": 0, "bbox": [213, 204, 107, 115], "area": 6405}, {"id": 2505032, "category_id": 21, "iscrowd": 0, "bbox": [47, 286, 380, 346], "area": 106491}, {"id": 10658729, "category_id": 159, "iscrowd": 0, "bbox": [0, 356, 427, 284], "area": 23354}, {"id": 7897993, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 372], "area": 134578}], "file_name": "000000492992.png", "image_id": 492992}, {"segments_info": [{"id": 8484992, "category_id": 24, "iscrowd": 0, "bbox": [321, 178, 196, 34], "area": 3116}, {"id": 6645102, "category_id": 24, "iscrowd": 0, "bbox": [207, 211, 67, 171], "area": 5857}, {"id": 6446434, "category_id": 24, "iscrowd": 0, "bbox": [256, 201, 83, 183], "area": 9138}, {"id": 6775397, "category_id": 24, "iscrowd": 0, "bbox": [36, 159, 224, 157], "area": 15790}, {"id": 8157314, "category_id": 24, "iscrowd": 0, "bbox": [163, 156, 158, 56], "area": 4439}, {"id": 6710379, "category_id": 24, "iscrowd": 0, "bbox": [320, 201, 104, 185], "area": 11045}, {"id": 9405064, "category_id": 24, "iscrowd": 0, "bbox": [321, 159, 144, 36], "area": 2659}, {"id": 7564400, "category_id": 24, "iscrowd": 0, "bbox": [411, 205, 184, 154], "area": 12908}, {"id": 4149311, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 479], "area": 75859}, {"id": 10921380, "category_id": 194, "iscrowd": 0, "bbox": [0, 86, 616, 393], "area": 124009}, {"id": 3290158, "category_id": 197, "iscrowd": 0, "bbox": [161, 36, 146, 77], "area": 8214}], "file_name": "000000493019.png", "image_id": 493019}, {"segments_info": [{"id": 7107707, "category_id": 22, "iscrowd": 0, "bbox": [162, 225, 150, 195], "area": 20983}, {"id": 5922401, "category_id": 22, "iscrowd": 0, "bbox": [4, 37, 296, 390], "area": 73079}, {"id": 10001309, "category_id": 22, "iscrowd": 0, "bbox": [261, 92, 162, 237], "area": 8691}, {"id": 4934219, "category_id": 22, "iscrowd": 0, "bbox": [309, 138, 259, 284], "area": 55960}, {"id": 9606552, "category_id": 22, "iscrowd": 0, "bbox": [420, 39, 220, 71], "area": 4420}, {"id": 5724766, "category_id": 22, "iscrowd": 0, "bbox": [420, 77, 220, 290], "area": 35856}, {"id": 6063483, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 54775}, {"id": 14738909, "category_id": 187, "iscrowd": 0, "bbox": [285, 0, 145, 77], "area": 2458}], "file_name": "000000493284.png", "image_id": 493284}, {"segments_info": [{"id": 2821645, "category_id": 1, "iscrowd": 0, "bbox": [307, 189, 41, 32], "area": 1061}, {"id": 2167578, "category_id": 1, "iscrowd": 0, "bbox": [122, 166, 16, 35], "area": 152}, {"id": 4207407, "category_id": 1, "iscrowd": 0, "bbox": [86, 161, 53, 63], "area": 1935}, {"id": 6835044, "category_id": 3, "iscrowd": 0, "bbox": [580, 179, 13, 4], "area": 42}, {"id": 5655702, "category_id": 3, "iscrowd": 0, "bbox": [68, 163, 530, 188], "area": 62980}, {"id": 11313819, "category_id": 3, "iscrowd": 0, "bbox": [496, 177, 9, 7], "area": 45}, {"id": 5392450, "category_id": 5, "iscrowd": 0, "bbox": [5, 56, 628, 156], "area": 53258}, {"id": 12560030, "category_id": 5, "iscrowd": 0, "bbox": [597, 161, 43, 33], "area": 773}, {"id": 16302708, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 176], "area": 42472}, {"id": 7694953, "category_id": 191, "iscrowd": 0, "bbox": [0, 165, 640, 194], "area": 48477}, {"id": 11505271, "category_id": 197, "iscrowd": 0, "bbox": [0, 12, 313, 172], "area": 13897}], "file_name": "000000493286.png", "image_id": 493286}, {"segments_info": [{"id": 5732696, "category_id": 61, "iscrowd": 0, "bbox": [1, 0, 492, 303], "area": 113921}, {"id": 8020331, "category_id": 77, "iscrowd": 0, "bbox": [209, 10, 41, 107], "area": 3122}, {"id": 5208703, "category_id": 100, "iscrowd": 0, "bbox": [0, 59, 500, 252], "area": 8975}, {"id": 6711147, "category_id": 189, "iscrowd": 0, "bbox": [12, 68, 488, 52], "area": 1021}, {"id": 4144193, "category_id": 195, "iscrowd": 0, "bbox": [0, 58, 17, 62], "area": 799}, {"id": 8618878, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 80], "area": 19942}], "file_name": "000000493334.png", "image_id": 493334}, {"segments_info": [{"id": 10528406, "category_id": 1, "iscrowd": 0, "bbox": [236, 23, 247, 369], "area": 44107}, {"id": 3355183, "category_id": 35, "iscrowd": 0, "bbox": [325, 357, 138, 33], "area": 1056}, {"id": 13026243, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 226583}], "file_name": "000000493442.png", "image_id": 493442}, {"segments_info": [{"id": 5399424, "category_id": 7, "iscrowd": 0, "bbox": [2, 72, 96, 165], "area": 10644}, {"id": 4474960, "category_id": 7, "iscrowd": 0, "bbox": [25, 65, 610, 155], "area": 75544}, {"id": 10263707, "category_id": 147, "iscrowd": 0, "bbox": [0, 88, 640, 176], "area": 35517}, {"id": 5797462, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 107], "area": 46246}, {"id": 12893339, "category_id": 187, "iscrowd": 0, "bbox": [298, 0, 37, 11], "area": 257}], "file_name": "000000493566.png", "image_id": 493566}, {"segments_info": [{"id": 12369078, "category_id": 41, "iscrowd": 0, "bbox": [232, 180, 334, 97], "area": 10088}, {"id": 10260875, "category_id": 149, "iscrowd": 0, "bbox": [0, 85, 640, 340], "area": 197240}, {"id": 5152146, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 110], "area": 59746}], "file_name": "000000493613.png", "image_id": 493613}, {"segments_info": [{"id": 6642783, "category_id": 1, "iscrowd": 0, "bbox": [285, 286, 52, 155], "area": 5868}, {"id": 5129030, "category_id": 28, "iscrowd": 0, "bbox": [273, 264, 70, 22], "area": 904}, {"id": 7958380, "category_id": 149, "iscrowd": 0, "bbox": [0, 280, 640, 360], "area": 167179}, {"id": 7235427, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 448], "area": 182609}, {"id": 14603724, "category_id": 187, "iscrowd": 0, "bbox": [201, 0, 241, 342], "area": 50002}, {"id": 11050388, "category_id": 194, "iscrowd": 0, "bbox": [478, 360, 107, 66], "area": 2902}], "file_name": "000000493772.png", "image_id": 493772}, {"segments_info": [{"id": 8423052, "category_id": 48, "iscrowd": 0, "bbox": [1, 78, 97, 191], "area": 3864}, {"id": 1530818, "category_id": 57, "iscrowd": 0, "bbox": [428, 225, 101, 119], "area": 4886}, {"id": 1333942, "category_id": 57, "iscrowd": 0, "bbox": [370, 350, 157, 127], "area": 5852}, {"id": 1395637, "category_id": 57, "iscrowd": 0, "bbox": [487, 284, 61, 79], "area": 1095}, {"id": 2315954, "category_id": 57, "iscrowd": 0, "bbox": [463, 270, 68, 74], "area": 1278}, {"id": 5797770, "category_id": 67, "iscrowd": 0, "bbox": [0, 2, 640, 481], "area": 289730}], "file_name": "000000493799.png", "image_id": 493799}, {"segments_info": [{"id": 4341833, "category_id": 1, "iscrowd": 0, "bbox": [430, 91, 11, 16], "area": 86}, {"id": 2894896, "category_id": 1, "iscrowd": 0, "bbox": [122, 85, 197, 478], "area": 38905}, {"id": 5132374, "category_id": 1, "iscrowd": 0, "bbox": [420, 94, 18, 45], "area": 420}, {"id": 6897953, "category_id": 42, "iscrowd": 0, "bbox": [239, 206, 208, 159], "area": 20641}, {"id": 8748655, "category_id": 42, "iscrowd": 0, "bbox": [437, 104, 15, 10], "area": 84}, {"id": 8949642, "category_id": 42, "iscrowd": 0, "bbox": [413, 107, 34, 14], "area": 225}, {"id": 9145996, "category_id": 154, "iscrowd": 0, "bbox": [0, 86, 480, 554], "area": 199056}, {"id": 12565943, "category_id": 155, "iscrowd": 0, "bbox": [0, 83, 480, 30], "area": 5461}, {"id": 13616316, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 91], "area": 27248}, {"id": 7041908, "category_id": 192, "iscrowd": 0, "bbox": [0, 8, 480, 86], "area": 14614}], "file_name": "000000493864.png", "image_id": 493864}, {"segments_info": [{"id": 5062466, "category_id": 1, "iscrowd": 0, "bbox": [0, 72, 52, 80], "area": 2933}, {"id": 3024176, "category_id": 1, "iscrowd": 0, "bbox": [341, 106, 60, 68], "area": 2585}, {"id": 3809304, "category_id": 1, "iscrowd": 0, "bbox": [396, 0, 50, 105], "area": 2735}, {"id": 5188910, "category_id": 1, "iscrowd": 0, "bbox": [466, 131, 51, 49], "area": 1379}, {"id": 4269863, "category_id": 1, "iscrowd": 0, "bbox": [293, 28, 53, 103], "area": 2132}, {"id": 8223115, "category_id": 1, "iscrowd": 0, "bbox": [238, 130, 150, 351], "area": 16068}, {"id": 3023680, "category_id": 1, "iscrowd": 0, "bbox": [169, 68, 63, 103], "area": 3898}, {"id": 4273207, "category_id": 1, "iscrowd": 0, "bbox": [403, 116, 61, 61], "area": 2066}, {"id": 6833729, "category_id": 1, "iscrowd": 0, "bbox": [112, 72, 59, 99], "area": 3225}, {"id": 2497820, "category_id": 1, "iscrowd": 0, "bbox": [287, 82, 57, 82], "area": 3145}, {"id": 2564387, "category_id": 1, "iscrowd": 0, "bbox": [55, 68, 74, 96], "area": 3763}, {"id": 8081742, "category_id": 1, "iscrowd": 0, "bbox": [231, 73, 64, 87], "area": 2943}, {"id": 4666160, "category_id": 1, "iscrowd": 0, "bbox": [249, 29, 49, 91], "area": 2015}, {"id": 3088927, "category_id": 1, "iscrowd": 1, "bbox": [116, 0, 408, 173], "area": 11866}, {"id": 5360557, "category_id": 37, "iscrowd": 0, "bbox": [201, 63, 13, 11], "area": 98}, {"id": 9270622, "category_id": 43, "iscrowd": 0, "bbox": [232, 42, 21, 94], "area": 1062}, {"id": 3681306, "category_id": 62, "iscrowd": 0, "bbox": [229, 156, 54, 17], "area": 500}, {"id": 2957588, "category_id": 62, "iscrowd": 0, "bbox": [457, 80, 30, 27], "area": 535}, {"id": 3549464, "category_id": 62, "iscrowd": 0, "bbox": [56, 149, 54, 21], "area": 962}, {"id": 3089429, "category_id": 62, "iscrowd": 0, "bbox": [346, 122, 53, 31], "area": 457}, {"id": 3615256, "category_id": 62, "iscrowd": 0, "bbox": [172, 155, 54, 17], "area": 754}, {"id": 2695185, "category_id": 62, "iscrowd": 0, "bbox": [401, 79, 53, 39], "area": 785}, {"id": 3286036, "category_id": 62, "iscrowd": 0, "bbox": [517, 158, 54, 23], "area": 1001}, {"id": 3286292, "category_id": 62, "iscrowd": 0, "bbox": [514, 79, 53, 30], "area": 1256}, {"id": 3615265, "category_id": 62, "iscrowd": 0, "bbox": [288, 157, 51, 17], "area": 684}, {"id": 2563344, "category_id": 62, "iscrowd": 0, "bbox": [522, 123, 49, 44], "area": 1613}, {"id": 3417878, "category_id": 62, "iscrowd": 0, "bbox": [0, 148, 52, 21], "area": 925}, {"id": 3089432, "category_id": 62, "iscrowd": 0, "bbox": [113, 155, 55, 16], "area": 243}, {"id": 3023635, "category_id": 62, "iscrowd": 0, "bbox": [344, 76, 53, 35], "area": 1375}, {"id": 9222328, "category_id": 145, "iscrowd": 0, "bbox": [0, 259, 571, 381], "area": 202353}, {"id": 3354412, "category_id": 177, "iscrowd": 0, "bbox": [0, 147, 571, 124], "area": 48881}], "file_name": "000000493905.png", "image_id": 493905}, {"segments_info": [{"id": 2170655, "category_id": 1, "iscrowd": 0, "bbox": [254, 79, 90, 258], "area": 13731}, {"id": 3091757, "category_id": 1, "iscrowd": 0, "bbox": [340, 234, 15, 61], "area": 561}, {"id": 2170913, "category_id": 1, "iscrowd": 0, "bbox": [243, 252, 13, 41], "area": 335}, {"id": 3420222, "category_id": 1, "iscrowd": 0, "bbox": [52, 0, 181, 281], "area": 14521}, {"id": 986380, "category_id": 1, "iscrowd": 0, "bbox": [385, 250, 16, 23], "area": 196}, {"id": 6900539, "category_id": 1, "iscrowd": 0, "bbox": [0, 134, 72, 85], "area": 4546}, {"id": 1840916, "category_id": 1, "iscrowd": 0, "bbox": [190, 133, 62, 209], "area": 8362}, {"id": 1579291, "category_id": 16, "iscrowd": 0, "bbox": [135, 379, 236, 243], "area": 25353}, {"id": 6509644, "category_id": 28, "iscrowd": 0, "bbox": [363, 221, 25, 51], "area": 815}, {"id": 8484985, "category_id": 28, "iscrowd": 0, "bbox": [433, 210, 28, 54], "area": 1078}, {"id": 9270628, "category_id": 28, "iscrowd": 0, "bbox": [330, 225, 36, 18], "area": 322}, {"id": 2499619, "category_id": 31, "iscrowd": 0, "bbox": [253, 241, 38, 69], "area": 1621}, {"id": 5395031, "category_id": 62, "iscrowd": 0, "bbox": [94, 120, 148, 291], "area": 20932}, {"id": 3551534, "category_id": 62, "iscrowd": 0, "bbox": [375, 274, 10, 17], "area": 146}, {"id": 3617331, "category_id": 62, "iscrowd": 0, "bbox": [402, 275, 9, 15], "area": 119}, {"id": 10261910, "category_id": 62, "iscrowd": 0, "bbox": [0, 0, 176, 599], "area": 34184}, {"id": 3881538, "category_id": 128, "iscrowd": 0, "bbox": [243, 141, 237, 156], "area": 15933}, {"id": 12760233, "category_id": 151, "iscrowd": 0, "bbox": [414, 128, 66, 60], "area": 1919}, {"id": 15972478, "category_id": 187, "iscrowd": 0, "bbox": [103, 0, 377, 197], "area": 37518}, {"id": 8685450, "category_id": 191, "iscrowd": 0, "bbox": [0, 266, 480, 374], "area": 113788}], "file_name": "000000494188.png", "image_id": 494188}, {"segments_info": [{"id": 8022627, "category_id": 73, "iscrowd": 0, "bbox": [16, 20, 462, 500], "area": 156990}, {"id": 11907510, "category_id": 76, "iscrowd": 0, "bbox": [73, 319, 367, 102], "area": 35298}, {"id": 8626885, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 105417}], "file_name": "000000494427.png", "image_id": 494427}, {"segments_info": [{"id": 526346, "category_id": 17, "iscrowd": 0, "bbox": [1, 112, 479, 362], "area": 102179}, {"id": 1196648, "category_id": 44, "iscrowd": 0, "bbox": [126, 65, 12, 50], "area": 340}, {"id": 473729, "category_id": 46, "iscrowd": 0, "bbox": [426, 17, 11, 32], "area": 192}, {"id": 811184, "category_id": 46, "iscrowd": 0, "bbox": [385, 16, 16, 35], "area": 322}, {"id": 869773, "category_id": 46, "iscrowd": 0, "bbox": [415, 16, 14, 32], "area": 282}, {"id": 870545, "category_id": 46, "iscrowd": 0, "bbox": [401, 17, 15, 32], "area": 319}, {"id": 13425381, "category_id": 73, "iscrowd": 0, "bbox": [262, 321, 378, 157], "area": 48523}, {"id": 4494783, "category_id": 79, "iscrowd": 0, "bbox": [214, 0, 68, 124], "area": 7548}, {"id": 667478, "category_id": 107, "iscrowd": 0, "bbox": [84, 100, 135, 48], "area": 2634}, {"id": 1015769, "category_id": 118, "iscrowd": 0, "bbox": [70, 305, 476, 175], "area": 10148}, {"id": 3566989, "category_id": 168, "iscrowd": 0, "bbox": [237, 391, 37, 89], "area": 1412}, {"id": 411550, "category_id": 177, "iscrowd": 0, "bbox": [67, 0, 244, 139], "area": 7660}, {"id": 1271472, "category_id": 188, "iscrowd": 0, "bbox": [90, 0, 480, 145], "area": 21552}, {"id": 1987989, "category_id": 189, "iscrowd": 0, "bbox": [124, 224, 479, 215], "area": 17253}, {"id": 1398937, "category_id": 195, "iscrowd": 0, "bbox": [234, 121, 365, 152], "area": 11573}, {"id": 2200792, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 305], "area": 35030}], "file_name": "000000494634.png", "image_id": 494634}, {"segments_info": [{"id": 1709846, "category_id": 1, "iscrowd": 0, "bbox": [467, 266, 44, 131], "area": 3458}, {"id": 1907224, "category_id": 1, "iscrowd": 0, "bbox": [517, 266, 47, 129], "area": 3459}, {"id": 6909046, "category_id": 38, "iscrowd": 0, "bbox": [265, 87, 115, 89], "area": 1747}, {"id": 5529191, "category_id": 154, "iscrowd": 0, "bbox": [0, 266, 640, 214], "area": 123913}, {"id": 13485247, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 281], "area": 174285}], "file_name": "000000494759.png", "image_id": 494759}, {"segments_info": [{"id": 4079174, "category_id": 7, "iscrowd": 0, "bbox": [1, 128, 638, 242], "area": 105286}, {"id": 10197134, "category_id": 7, "iscrowd": 0, "bbox": [8, 234, 126, 71], "area": 5727}, {"id": 5263429, "category_id": 128, "iscrowd": 0, "bbox": [0, 189, 60, 40], "area": 1680}, {"id": 5919295, "category_id": 133, "iscrowd": 0, "bbox": [0, 340, 77, 105], "area": 5941}, {"id": 6187372, "category_id": 149, "iscrowd": 0, "bbox": [0, 372, 640, 108], "area": 37592}, {"id": 8553846, "category_id": 151, "iscrowd": 0, "bbox": [14, 107, 626, 140], "area": 6583}, {"id": 4478014, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 207], "area": 64574}, {"id": 4934723, "category_id": 185, "iscrowd": 0, "bbox": [0, 293, 640, 163], "area": 43058}, {"id": 16447991, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 276, 125], "area": 17046}, {"id": 9931627, "category_id": 192, "iscrowd": 0, "bbox": [27, 0, 478, 132], "area": 14186}], "file_name": "000000494863.png", "image_id": 494863}, {"segments_info": [{"id": 7751992, "category_id": 1, "iscrowd": 0, "bbox": [181, 88, 180, 347], "area": 18284}, {"id": 9462075, "category_id": 1, "iscrowd": 0, "bbox": [197, 321, 92, 199], "area": 10360}, {"id": 6118245, "category_id": 18, "iscrowd": 0, "bbox": [0, 421, 155, 209], "area": 16944}, {"id": 4480604, "category_id": 44, "iscrowd": 0, "bbox": [154, 157, 13, 49], "area": 425}, {"id": 6722694, "category_id": 50, "iscrowd": 0, "bbox": [330, 228, 21, 15], "area": 54}, {"id": 8287088, "category_id": 51, "iscrowd": 0, "bbox": [372, 253, 55, 30], "area": 1271}, {"id": 7171678, "category_id": 51, "iscrowd": 0, "bbox": [343, 237, 49, 28], "area": 934}, {"id": 3612487, "category_id": 51, "iscrowd": 0, "bbox": [171, 187, 25, 14], "area": 273}, {"id": 10390133, "category_id": 51, "iscrowd": 0, "bbox": [311, 237, 36, 25], "area": 625}, {"id": 8283992, "category_id": 107, "iscrowd": 0, "bbox": [0, 230, 427, 81], "area": 5675}, {"id": 11713724, "category_id": 130, "iscrowd": 0, "bbox": [234, 0, 51, 63], "area": 1784}, {"id": 7692119, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 375, 426], "area": 18344}, {"id": 2492677, "category_id": 181, "iscrowd": 0, "bbox": [133, 42, 211, 205], "area": 19246}, {"id": 3479331, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 427, 511], "area": 89352}, {"id": 5984596, "category_id": 190, "iscrowd": 0, "bbox": [0, 393, 427, 247], "area": 66385}, {"id": 8614241, "category_id": 195, "iscrowd": 0, "bbox": [336, 233, 17, 9], "area": 58}, {"id": 4795956, "category_id": 196, "iscrowd": 0, "bbox": [0, 169, 390, 87], "area": 4860}, {"id": 7430229, "category_id": 199, "iscrowd": 0, "bbox": [118, 171, 309, 59], "area": 2060}], "file_name": "000000494869.png", "image_id": 494869}, {"segments_info": [{"id": 1317711, "category_id": 1, "iscrowd": 0, "bbox": [522, 231, 105, 107], "area": 5167}, {"id": 1053984, "category_id": 17, "iscrowd": 0, "bbox": [500, 256, 37, 21], "area": 538}, {"id": 3417634, "category_id": 31, "iscrowd": 0, "bbox": [448, 218, 21, 25], "area": 371}, {"id": 4355035, "category_id": 47, "iscrowd": 0, "bbox": [458, 266, 17, 27], "area": 317}, {"id": 4616607, "category_id": 48, "iscrowd": 0, "bbox": [479, 286, 13, 11], "area": 34}, {"id": 1053472, "category_id": 62, "iscrowd": 0, "bbox": [480, 185, 38, 62], "area": 1735}, {"id": 3105155, "category_id": 63, "iscrowd": 0, "bbox": [2, 281, 274, 141], "area": 25478}, {"id": 2975128, "category_id": 63, "iscrowd": 0, "bbox": [482, 245, 158, 179], "area": 9710}, {"id": 2585532, "category_id": 67, "iscrowd": 0, "bbox": [384, 261, 133, 136], "area": 8805}, {"id": 11554904, "category_id": 72, "iscrowd": 0, "bbox": [235, 92, 90, 78], "area": 6015}, {"id": 10783891, "category_id": 72, "iscrowd": 0, "bbox": [495, 173, 18, 16], "area": 227}, {"id": 11041158, "category_id": 72, "iscrowd": 0, "bbox": [519, 177, 22, 17], "area": 289}, {"id": 5148096, "category_id": 84, "iscrowd": 0, "bbox": [598, 175, 3, 14], "area": 29}, {"id": 3028143, "category_id": 84, "iscrowd": 0, "bbox": [587, 196, 5, 13], "area": 62}, {"id": 2048365, "category_id": 84, "iscrowd": 0, "bbox": [585, 171, 6, 16], "area": 74}, {"id": 2697622, "category_id": 84, "iscrowd": 0, "bbox": [592, 198, 6, 12], "area": 66}, {"id": 2383504, "category_id": 84, "iscrowd": 0, "bbox": [567, 168, 17, 18], "area": 256}, {"id": 2641010, "category_id": 84, "iscrowd": 0, "bbox": [606, 172, 6, 19], "area": 44}, {"id": 1056301, "category_id": 84, "iscrowd": 0, "bbox": [562, 208, 20, 22], "area": 299}, {"id": 1718943, "category_id": 84, "iscrowd": 0, "bbox": [589, 172, 5, 16], "area": 49}, {"id": 5603773, "category_id": 84, "iscrowd": 0, "bbox": [608, 177, 4, 15], "area": 48}, {"id": 2710203, "category_id": 84, "iscrowd": 0, "bbox": [597, 175, 2, 14], "area": 27}, {"id": 2179507, "category_id": 84, "iscrowd": 0, "bbox": [566, 186, 4, 18], "area": 46}, {"id": 1582252, "category_id": 84, "iscrowd": 0, "bbox": [593, 174, 2, 14], "area": 24}, {"id": 1922945, "category_id": 84, "iscrowd": 0, "bbox": [572, 190, 11, 5], "area": 38}, {"id": 1783902, "category_id": 84, "iscrowd": 1, "bbox": [517, 153, 109, 83], "area": 5608}, {"id": 3102848, "category_id": 85, "iscrowd": 0, "bbox": [325, 90, 18, 21], "area": 282}, {"id": 2514309, "category_id": 112, "iscrowd": 0, "bbox": [368, 101, 80, 128], "area": 6905}, {"id": 9091288, "category_id": 130, "iscrowd": 0, "bbox": [182, 45, 160, 77], "area": 1493}, {"id": 1053727, "category_id": 141, "iscrowd": 0, "bbox": [523, 232, 117, 182], "area": 6540}, {"id": 4294046, "category_id": 156, "iscrowd": 0, "bbox": [26, 116, 550, 144], "area": 7289}, {"id": 3764895, "category_id": 175, "iscrowd": 0, "bbox": [235, 182, 107, 108], "area": 3837}, {"id": 6202046, "category_id": 180, "iscrowd": 0, "bbox": [0, 44, 77, 335], "area": 9890}, {"id": 9415629, "category_id": 186, "iscrowd": 0, "bbox": [18, 0, 622, 122], "area": 49971}, {"id": 2575709, "category_id": 188, "iscrowd": 0, "bbox": [119, 133, 416, 187], "area": 20641}, {"id": 5601174, "category_id": 189, "iscrowd": 0, "bbox": [434, 162, 77, 78], "area": 2570}, {"id": 7055815, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 296], "area": 37871}, {"id": 6332618, "category_id": 200, "iscrowd": 0, "bbox": [164, 207, 401, 221], "area": 41813}], "file_name": "000000494913.png", "image_id": 494913}, {"segments_info": [{"id": 5985367, "category_id": 5, "iscrowd": 0, "bbox": [28, 134, 558, 148], "area": 27990}, {"id": 4209219, "category_id": 8, "iscrowd": 0, "bbox": [401, 284, 100, 19], "area": 1657}, {"id": 6446168, "category_id": 8, "iscrowd": 0, "bbox": [548, 248, 91, 60], "area": 4363}, {"id": 5261901, "category_id": 8, "iscrowd": 0, "bbox": [383, 272, 68, 18], "area": 557}, {"id": 1709596, "category_id": 8, "iscrowd": 0, "bbox": [137, 252, 22, 19], "area": 307}, {"id": 6381409, "category_id": 8, "iscrowd": 0, "bbox": [1, 243, 58, 24], "area": 1174}, {"id": 7038818, "category_id": 8, "iscrowd": 0, "bbox": [81, 266, 24, 24], "area": 435}, {"id": 4800832, "category_id": 8, "iscrowd": 0, "bbox": [0, 265, 68, 24], "area": 1388}, {"id": 7431001, "category_id": 95, "iscrowd": 0, "bbox": [50, 182, 590, 44], "area": 9171}, {"id": 2958883, "category_id": 184, "iscrowd": 0, "bbox": [0, 185, 57, 38], "area": 1210}, {"id": 15718067, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 206], "area": 121689}, {"id": 6644067, "category_id": 191, "iscrowd": 0, "bbox": [0, 253, 640, 180], "area": 95863}, {"id": 3487797, "category_id": 193, "iscrowd": 0, "bbox": [0, 201, 191, 77], "area": 5186}, {"id": 5655365, "category_id": 197, "iscrowd": 0, "bbox": [28, 164, 612, 86], "area": 2253}], "file_name": "000000495054.png", "image_id": 495054}, {"segments_info": [{"id": 5460823, "category_id": 1, "iscrowd": 0, "bbox": [507, 393, 31, 87], "area": 1983}, {"id": 5654078, "category_id": 1, "iscrowd": 0, "bbox": [147, 359, 42, 121], "area": 2354}, {"id": 3024945, "category_id": 1, "iscrowd": 0, "bbox": [538, 415, 45, 65], "area": 1752}, {"id": 2629921, "category_id": 1, "iscrowd": 0, "bbox": [380, 342, 58, 112], "area": 2436}, {"id": 4994094, "category_id": 1, "iscrowd": 0, "bbox": [220, 339, 17, 20], "area": 257}, {"id": 2630436, "category_id": 1, "iscrowd": 0, "bbox": [602, 432, 37, 47], "area": 1223}, {"id": 4343115, "category_id": 1, "iscrowd": 0, "bbox": [116, 378, 8, 13], "area": 65}, {"id": 3024935, "category_id": 1, "iscrowd": 0, "bbox": [422, 345, 38, 135], "area": 2640}, {"id": 3945523, "category_id": 3, "iscrowd": 0, "bbox": [235, 377, 198, 103], "area": 17207}, {"id": 4272696, "category_id": 7, "iscrowd": 0, "bbox": [96, 252, 543, 112], "area": 40617}, {"id": 6974312, "category_id": 8, "iscrowd": 0, "bbox": [0, 344, 140, 127], "area": 15223}, {"id": 8487036, "category_id": 9, "iscrowd": 0, "bbox": [460, 358, 75, 78], "area": 3463}, {"id": 6643805, "category_id": 9, "iscrowd": 0, "bbox": [250, 344, 50, 41], "area": 1342}, {"id": 8552832, "category_id": 9, "iscrowd": 0, "bbox": [355, 363, 32, 14], "area": 332}, {"id": 5525324, "category_id": 9, "iscrowd": 0, "bbox": [535, 340, 105, 122], "area": 7329}, {"id": 7169894, "category_id": 9, "iscrowd": 0, "bbox": [181, 95, 79, 323], "area": 4089}, {"id": 4866878, "category_id": 133, "iscrowd": 0, "bbox": [124, 393, 37, 37], "area": 554}, {"id": 8749436, "category_id": 178, "iscrowd": 0, "bbox": [109, 352, 504, 128], "area": 8578}, {"id": 3157291, "category_id": 184, "iscrowd": 0, "bbox": [0, 247, 37, 62], "area": 1911}, {"id": 14933206, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 275], "area": 161269}], "file_name": "000000495146.png", "image_id": 495146}, {"segments_info": [{"id": 1979453, "category_id": 49, "iscrowd": 0, "bbox": [346, 522, 29, 118], "area": 2047}, {"id": 8030362, "category_id": 61, "iscrowd": 0, "bbox": [41, 16, 320, 523], "area": 105650}, {"id": 2368813, "category_id": 190, "iscrowd": 0, "bbox": [391, 444, 89, 43], "area": 1604}, {"id": 3234925, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 468], "area": 123600}], "file_name": "000000495448.png", "image_id": 495448}, {"segments_info": [{"id": 5198668, "category_id": 1, "iscrowd": 0, "bbox": [197, 132, 229, 432], "area": 38180}, {"id": 3811611, "category_id": 1, "iscrowd": 0, "bbox": [126, 344, 69, 169], "area": 6585}, {"id": 6971733, "category_id": 1, "iscrowd": 0, "bbox": [5, 46, 150, 585], "area": 62997}, {"id": 8489859, "category_id": 63, "iscrowd": 0, "bbox": [122, 351, 175, 145], "area": 11738}, {"id": 13157288, "category_id": 75, "iscrowd": 0, "bbox": [211, 169, 18, 26], "area": 102}, {"id": 14801878, "category_id": 75, "iscrowd": 0, "bbox": [49, 335, 28, 20], "area": 257}, {"id": 13880746, "category_id": 130, "iscrowd": 0, "bbox": [104, 0, 101, 58], "area": 4738}, {"id": 526605, "category_id": 177, "iscrowd": 0, "bbox": [337, 440, 58, 48], "area": 1039}, {"id": 9870993, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 427, 179], "area": 53469}, {"id": 8954270, "category_id": 199, "iscrowd": 0, "bbox": [119, 133, 308, 329], "area": 32429}, {"id": 5861232, "category_id": 200, "iscrowd": 0, "bbox": [0, 468, 427, 172], "area": 43639}], "file_name": "000000495732.png", "image_id": 495732}, {"segments_info": [{"id": 8554376, "category_id": 1, "iscrowd": 0, "bbox": [1, 71, 21, 42], "area": 655}, {"id": 9080206, "category_id": 1, "iscrowd": 0, "bbox": [303, 95, 49, 80], "area": 1488}, {"id": 9802900, "category_id": 35, "iscrowd": 0, "bbox": [304, 160, 21, 21], "area": 152}, {"id": 10987173, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 185072}], "file_name": "000000496409.png", "image_id": 496409}, {"segments_info": [{"id": 3357245, "category_id": 1, "iscrowd": 0, "bbox": [50, 1, 261, 164], "area": 34817}, {"id": 5000770, "category_id": 1, "iscrowd": 0, "bbox": [83, 560, 266, 80], "area": 13516}, {"id": 9082519, "category_id": 47, "iscrowd": 0, "bbox": [117, 204, 62, 62], "area": 2687}, {"id": 13093041, "category_id": 47, "iscrowd": 0, "bbox": [258, 184, 46, 62], "area": 2268}, {"id": 10858344, "category_id": 47, "iscrowd": 0, "bbox": [358, 329, 63, 59], "area": 2505}, {"id": 5068645, "category_id": 47, "iscrowd": 0, "bbox": [291, 362, 69, 72], "area": 3321}, {"id": 6587787, "category_id": 48, "iscrowd": 0, "bbox": [241, 437, 106, 27], "area": 841}, {"id": 5276812, "category_id": 48, "iscrowd": 0, "bbox": [194, 103, 33, 77], "area": 257}, {"id": 8038579, "category_id": 49, "iscrowd": 0, "bbox": [275, 360, 17, 137], "area": 1093}, {"id": 7970465, "category_id": 49, "iscrowd": 0, "bbox": [77, 191, 104, 15], "area": 651}, {"id": 5342620, "category_id": 50, "iscrowd": 0, "bbox": [254, 378, 23, 116], "area": 922}, {"id": 8758405, "category_id": 51, "iscrowd": 0, "bbox": [373, 231, 54, 72], "area": 3255}, {"id": 8230034, "category_id": 67, "iscrowd": 0, "bbox": [0, 133, 427, 387], "area": 134826}, {"id": 2897445, "category_id": 77, "iscrowd": 0, "bbox": [24, 187, 50, 69], "area": 2255}, {"id": 3752547, "category_id": 118, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 55140}], "file_name": "000000496571.png", "image_id": 496571}, {"segments_info": [{"id": 2236704, "category_id": 1, "iscrowd": 0, "bbox": [374, 291, 7, 7], "area": 28}, {"id": 1513759, "category_id": 1, "iscrowd": 0, "bbox": [412, 293, 9, 11], "area": 66}, {"id": 1118224, "category_id": 9, "iscrowd": 0, "bbox": [365, 295, 70, 18], "area": 574}, {"id": 6710104, "category_id": 155, "iscrowd": 0, "bbox": [0, 255, 640, 225], "area": 135166}, {"id": 12630957, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 259], "area": 139239}, {"id": 3616805, "category_id": 192, "iscrowd": 0, "bbox": [0, 173, 616, 100], "area": 32096}], "file_name": "000000496597.png", "image_id": 496597}, {"segments_info": [{"id": 5985644, "category_id": 3, "iscrowd": 0, "bbox": [285, 151, 15, 11], "area": 123}, {"id": 9932417, "category_id": 3, "iscrowd": 0, "bbox": [342, 147, 9, 11], "area": 62}, {"id": 6971995, "category_id": 3, "iscrowd": 0, "bbox": [326, 148, 6, 6], "area": 31}, {"id": 9012350, "category_id": 3, "iscrowd": 0, "bbox": [313, 150, 13, 11], "area": 123}, {"id": 7234906, "category_id": 3, "iscrowd": 0, "bbox": [395, 147, 22, 10], "area": 93}, {"id": 9006678, "category_id": 3, "iscrowd": 0, "bbox": [332, 148, 9, 5], "area": 31}, {"id": 7958629, "category_id": 3, "iscrowd": 0, "bbox": [348, 147, 13, 12], "area": 109}, {"id": 5655381, "category_id": 3, "iscrowd": 0, "bbox": [274, 152, 12, 8], "area": 73}, {"id": 7038038, "category_id": 3, "iscrowd": 0, "bbox": [298, 152, 16, 6], "area": 71}, {"id": 4076845, "category_id": 10, "iscrowd": 0, "bbox": [337, 142, 3, 3], "area": 8}, {"id": 3550786, "category_id": 10, "iscrowd": 0, "bbox": [271, 137, 3, 8], "area": 18}, {"id": 8417893, "category_id": 10, "iscrowd": 0, "bbox": [332, 137, 3, 2], "area": 5}, {"id": 2366095, "category_id": 14, "iscrowd": 0, "bbox": [557, 103, 70, 101], "area": 6307}, {"id": 6974069, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 180], "area": 14815}, {"id": 6842465, "category_id": 149, "iscrowd": 0, "bbox": [159, 148, 277, 212], "area": 27443}, {"id": 11316393, "category_id": 151, "iscrowd": 0, "bbox": [226, 134, 19, 16], "area": 223}, {"id": 4411487, "category_id": 171, "iscrowd": 0, "bbox": [0, 135, 640, 120], "area": 6808}, {"id": 8618882, "category_id": 184, "iscrowd": 0, "bbox": [314, 89, 152, 64], "area": 2355}, {"id": 16250870, "category_id": 187, "iscrowd": 0, "bbox": [140, 0, 500, 142], "area": 44323}, {"id": 7962495, "category_id": 191, "iscrowd": 0, "bbox": [0, 145, 640, 215], "area": 59780}, {"id": 4742488, "category_id": 193, "iscrowd": 0, "bbox": [158, 150, 98, 92], "area": 421}, {"id": 8355191, "category_id": 197, "iscrowd": 0, "bbox": [240, 117, 138, 46], "area": 1054}], "file_name": "000000496722.png", "image_id": 496722}, {"segments_info": [{"id": 6117468, "category_id": 1, "iscrowd": 0, "bbox": [277, 156, 167, 324], "area": 26953}, {"id": 7041161, "category_id": 1, "iscrowd": 0, "bbox": [607, 279, 33, 127], "area": 2672}, {"id": 8222588, "category_id": 1, "iscrowd": 0, "bbox": [85, 149, 193, 331], "area": 28181}, {"id": 4867667, "category_id": 1, "iscrowd": 0, "bbox": [327, 203, 14, 18], "area": 164}, {"id": 6513810, "category_id": 1, "iscrowd": 0, "bbox": [612, 225, 24, 64], "area": 696}, {"id": 3749179, "category_id": 1, "iscrowd": 0, "bbox": [571, 249, 32, 50], "area": 1026}, {"id": 11383225, "category_id": 1, "iscrowd": 0, "bbox": [362, 177, 275, 297], "area": 35683}, {"id": 8553087, "category_id": 1, "iscrowd": 0, "bbox": [248, 203, 51, 132], "area": 3261}, {"id": 5327948, "category_id": 10, "iscrowd": 0, "bbox": [203, 48, 35, 59], "area": 1368}, {"id": 12818300, "category_id": 28, "iscrowd": 0, "bbox": [284, 171, 53, 33], "area": 1190}, {"id": 14671063, "category_id": 28, "iscrowd": 0, "bbox": [176, 0, 262, 179], "area": 16573}, {"id": 4802895, "category_id": 31, "iscrowd": 0, "bbox": [168, 212, 82, 204], "area": 6224}, {"id": 4211550, "category_id": 31, "iscrowd": 0, "bbox": [631, 242, 8, 26], "area": 94}, {"id": 5782575, "category_id": 31, "iscrowd": 0, "bbox": [241, 246, 17, 43], "area": 384}, {"id": 4601915, "category_id": 32, "iscrowd": 0, "bbox": [340, 223, 28, 17], "area": 272}, {"id": 5788243, "category_id": 92, "iscrowd": 0, "bbox": [0, 107, 127, 120], "area": 6341}, {"id": 8231835, "category_id": 119, "iscrowd": 0, "bbox": [320, 313, 58, 45], "area": 1456}, {"id": 13619923, "category_id": 149, "iscrowd": 0, "bbox": [0, 317, 628, 163], "area": 44122}, {"id": 10528953, "category_id": 166, "iscrowd": 0, "bbox": [269, 128, 340, 121], "area": 7481}, {"id": 4739409, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 619, 182], "area": 32843}, {"id": 10264223, "category_id": 185, "iscrowd": 0, "bbox": [69, 198, 113, 53], "area": 714}, {"id": 11910849, "category_id": 191, "iscrowd": 0, "bbox": [0, 230, 640, 116], "area": 7513}, {"id": 8555408, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 240], "area": 54366}, {"id": 10132894, "category_id": 199, "iscrowd": 0, "bbox": [0, 227, 440, 69], "area": 4484}], "file_name": "000000496854.png", "image_id": 496854}, {"segments_info": [{"id": 1251612, "category_id": 44, "iscrowd": 0, "bbox": [386, 0, 149, 184], "area": 19073}, {"id": 12564664, "category_id": 48, "iscrowd": 0, "bbox": [0, 187, 230, 293], "area": 10678}, {"id": 2766918, "category_id": 51, "iscrowd": 0, "bbox": [474, 70, 166, 258], "area": 16231}, {"id": 1409757, "category_id": 55, "iscrowd": 0, "bbox": [495, 82, 145, 167], "area": 18973}, {"id": 5603752, "category_id": 61, "iscrowd": 0, "bbox": [166, 196, 260, 220], "area": 34201}, {"id": 6003116, "category_id": 61, "iscrowd": 0, "bbox": [4, 0, 365, 130], "area": 36332}, {"id": 7828598, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 84966}, {"id": 5473688, "category_id": 196, "iscrowd": 0, "bbox": [3, 0, 534, 25], "area": 1036}], "file_name": "000000496954.png", "image_id": 496954}, {"segments_info": [{"id": 8947338, "category_id": 1, "iscrowd": 0, "bbox": [112, 2, 388, 328], "area": 63022}, {"id": 5661563, "category_id": 44, "iscrowd": 0, "bbox": [2, 60, 45, 116], "area": 3627}, {"id": 8811644, "category_id": 73, "iscrowd": 0, "bbox": [0, 170, 195, 156], "area": 22392}, {"id": 2694682, "category_id": 77, "iscrowd": 0, "bbox": [360, 234, 80, 70], "area": 2647}, {"id": 1185838, "category_id": 118, "iscrowd": 0, "bbox": [53, 36, 340, 297], "area": 38586}, {"id": 1518660, "category_id": 189, "iscrowd": 0, "bbox": [0, 140, 81, 45], "area": 1323}, {"id": 658204, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 175], "area": 30550}], "file_name": "000000497344.png", "image_id": 497344}, {"segments_info": [{"id": 724237, "category_id": 1, "iscrowd": 0, "bbox": [58, 296, 18, 49], "area": 398}, {"id": 1383710, "category_id": 1, "iscrowd": 0, "bbox": [34, 283, 29, 60], "area": 715}, {"id": 7102297, "category_id": 5, "iscrowd": 0, "bbox": [2, 72, 637, 315], "area": 82693}, {"id": 3091241, "category_id": 8, "iscrowd": 0, "bbox": [67, 302, 50, 21], "area": 643}, {"id": 6116433, "category_id": 8, "iscrowd": 0, "bbox": [46, 190, 12, 13], "area": 136}, {"id": 4671047, "category_id": 149, "iscrowd": 0, "bbox": [0, 191, 640, 233], "area": 52396}, {"id": 15725815, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 130], "area": 68572}, {"id": 5525068, "category_id": 197, "iscrowd": 0, "bbox": [0, 87, 640, 225], "area": 59368}], "file_name": "000000497568.png", "image_id": 497568}, {"segments_info": [{"id": 6320763, "category_id": 1, "iscrowd": 0, "bbox": [148, 338, 130, 288], "area": 20588}, {"id": 5135236, "category_id": 1, "iscrowd": 0, "bbox": [334, 177, 93, 154], "area": 8623}, {"id": 10527138, "category_id": 1, "iscrowd": 0, "bbox": [361, 293, 66, 144], "area": 5309}, {"id": 5068898, "category_id": 1, "iscrowd": 0, "bbox": [0, 1, 333, 632], "area": 136513}, {"id": 2041127, "category_id": 62, "iscrowd": 0, "bbox": [392, 395, 35, 108], "area": 3286}, {"id": 7503230, "category_id": 62, "iscrowd": 0, "bbox": [302, 332, 45, 48], "area": 1633}, {"id": 3489601, "category_id": 62, "iscrowd": 0, "bbox": [308, 375, 76, 156], "area": 8014}, {"id": 3622996, "category_id": 73, "iscrowd": 0, "bbox": [180, 526, 246, 114], "area": 21815}, {"id": 13556959, "category_id": 177, "iscrowd": 0, "bbox": [289, 223, 70, 105], "area": 4540}, {"id": 5207679, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 254], "area": 48031}], "file_name": "000000497599.png", "image_id": 497599}, {"segments_info": [{"id": 4805986, "category_id": 63, "iscrowd": 0, "bbox": [0, 433, 480, 207], "area": 62745}, {"id": 8360095, "category_id": 65, "iscrowd": 0, "bbox": [30, 270, 423, 131], "area": 20093}, {"id": 6451066, "category_id": 93, "iscrowd": 0, "bbox": [29, 287, 426, 255], "area": 5088}, {"id": 5203057, "category_id": 109, "iscrowd": 0, "bbox": [70, 64, 358, 268], "area": 10949}, {"id": 4343650, "category_id": 112, "iscrowd": 0, "bbox": [0, 140, 480, 242], "area": 19776}, {"id": 10995942, "category_id": 130, "iscrowd": 0, "bbox": [70, 208, 347, 67], "area": 1542}, {"id": 7897479, "category_id": 141, "iscrowd": 0, "bbox": [0, 443, 452, 128], "area": 790}, {"id": 2893879, "category_id": 156, "iscrowd": 0, "bbox": [32, 262, 82, 124], "area": 4871}, {"id": 1445403, "category_id": 189, "iscrowd": 0, "bbox": [395, 322, 47, 49], "area": 1179}, {"id": 3552624, "category_id": 195, "iscrowd": 0, "bbox": [59, 293, 18, 16], "area": 236}, {"id": 4280678, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 325], "area": 23792}], "file_name": "000000497628.png", "image_id": 497628}, {"segments_info": [{"id": 2039842, "category_id": 1, "iscrowd": 0, "bbox": [392, 143, 40, 68], "area": 1565}, {"id": 1579814, "category_id": 1, "iscrowd": 0, "bbox": [254, 184, 19, 23], "area": 272}, {"id": 4737867, "category_id": 1, "iscrowd": 0, "bbox": [219, 188, 26, 29], "area": 442}, {"id": 7698033, "category_id": 6, "iscrowd": 0, "bbox": [55, 66, 535, 265], "area": 105871}, {"id": 2105639, "category_id": 112, "iscrowd": 0, "bbox": [16, 169, 22, 89], "area": 1380}, {"id": 7698553, "category_id": 149, "iscrowd": 0, "bbox": [0, 272, 640, 136], "area": 69464}, {"id": 4936533, "category_id": 181, "iscrowd": 0, "bbox": [48, 162, 14, 78], "area": 652}, {"id": 14736595, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 16, 18], "area": 269}, {"id": 7238780, "category_id": 191, "iscrowd": 0, "bbox": [0, 255, 640, 50], "area": 2777}, {"id": 11385278, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 278], "area": 73114}], "file_name": "000000497867.png", "image_id": 497867}, {"segments_info": [{"id": 1449004, "category_id": 1, "iscrowd": 0, "bbox": [140, 114, 309, 341], "area": 64814}, {"id": 4473416, "category_id": 75, "iscrowd": 0, "bbox": [389, 98, 38, 120], "area": 1461}, {"id": 10924214, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 464], "area": 224993}], "file_name": "000000498032.png", "image_id": 498032}, {"segments_info": [{"id": 7369589, "category_id": 8, "iscrowd": 0, "bbox": [432, 337, 183, 83], "area": 11446}, {"id": 4871784, "category_id": 18, "iscrowd": 0, "bbox": [1, 10, 467, 463], "area": 179476}, {"id": 5863567, "category_id": 149, "iscrowd": 0, "bbox": [362, 395, 254, 85], "area": 16571}, {"id": 12497820, "category_id": 155, "iscrowd": 0, "bbox": [362, 271, 259, 109], "area": 12611}, {"id": 4740193, "category_id": 177, "iscrowd": 0, "bbox": [173, 0, 467, 480], "area": 61629}, {"id": 3889764, "category_id": 184, "iscrowd": 0, "bbox": [362, 442, 76, 38], "area": 1244}, {"id": 15589830, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 183, 71], "area": 4503}, {"id": 6321786, "category_id": 197, "iscrowd": 0, "bbox": [481, 0, 159, 163], "area": 14386}], "file_name": "000000498286.png", "image_id": 498286}, {"segments_info": [{"id": 9213850, "category_id": 78, "iscrowd": 0, "bbox": [486, 184, 102, 66], "area": 5916}, {"id": 5993606, "category_id": 82, "iscrowd": 0, "bbox": [212, 5, 273, 469], "area": 123375}, {"id": 2241589, "category_id": 100, "iscrowd": 0, "bbox": [152, 369, 34, 79], "area": 1735}, {"id": 7570064, "category_id": 107, "iscrowd": 0, "bbox": [484, 227, 156, 44], "area": 3523}, {"id": 4744573, "category_id": 122, "iscrowd": 0, "bbox": [590, 195, 50, 55], "area": 2019}, {"id": 7904960, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 143, 480], "area": 46092}, {"id": 1197946, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 53172}, {"id": 2044482, "category_id": 190, "iscrowd": 0, "bbox": [138, 352, 51, 128], "area": 3598}, {"id": 7570849, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 544, 307], "area": 10759}, {"id": 4282989, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 38059}], "file_name": "000000498463.png", "image_id": 498463}, {"segments_info": [{"id": 5004907, "category_id": 3, "iscrowd": 0, "bbox": [2, 176, 25, 70], "area": 1220}, {"id": 8029830, "category_id": 3, "iscrowd": 0, "bbox": [164, 173, 44, 45], "area": 1660}, {"id": 5267832, "category_id": 3, "iscrowd": 0, "bbox": [31, 190, 78, 57], "area": 2347}, {"id": 6713710, "category_id": 4, "iscrowd": 0, "bbox": [1, 38, 639, 385], "area": 174628}, {"id": 9611956, "category_id": 149, "iscrowd": 0, "bbox": [0, 211, 640, 214], "area": 12242}, {"id": 5540232, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 262], "area": 25356}, {"id": 12501437, "category_id": 187, "iscrowd": 0, "bbox": [46, 33, 144, 83], "area": 6209}, {"id": 7707562, "category_id": 191, "iscrowd": 0, "bbox": [560, 305, 80, 19], "area": 1125}, {"id": 10729145, "category_id": 197, "iscrowd": 0, "bbox": [393, 0, 247, 254], "area": 13566}, {"id": 9150891, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 408, 194], "area": 27586}], "file_name": "000000498709.png", "image_id": 498709}, {"segments_info": [{"id": 2374759, "category_id": 1, "iscrowd": 0, "bbox": [450, 5, 50, 161], "area": 4074}, {"id": 4153217, "category_id": 1, "iscrowd": 0, "bbox": [133, 38, 472, 442], "area": 121676}, {"id": 2899026, "category_id": 1, "iscrowd": 0, "bbox": [137, 15, 123, 276], "area": 24562}, {"id": 4153735, "category_id": 1, "iscrowd": 0, "bbox": [474, 85, 166, 394], "area": 38411}, {"id": 2440014, "category_id": 1, "iscrowd": 0, "bbox": [353, 2, 143, 267], "area": 16397}, {"id": 1712190, "category_id": 1, "iscrowd": 0, "bbox": [34, 0, 113, 475], "area": 13258}, {"id": 9347767, "category_id": 1, "iscrowd": 0, "bbox": [1, 3, 110, 473], "area": 41505}, {"id": 1715013, "category_id": 1, "iscrowd": 0, "bbox": [483, 30, 122, 199], "area": 6232}, {"id": 1977420, "category_id": 1, "iscrowd": 0, "bbox": [485, 61, 45, 99], "area": 2465}, {"id": 7246767, "category_id": 44, "iscrowd": 0, "bbox": [111, 417, 58, 58], "area": 2233}, {"id": 9876168, "category_id": 77, "iscrowd": 0, "bbox": [285, 200, 13, 29], "area": 187}, {"id": 7371140, "category_id": 156, "iscrowd": 0, "bbox": [58, 0, 67, 110], "area": 2594}, {"id": 4282217, "category_id": 199, "iscrowd": 0, "bbox": [89, 0, 551, 480], "area": 25651}], "file_name": "000000498747.png", "image_id": 498747}, {"segments_info": [{"id": 1183766, "category_id": 1, "iscrowd": 0, "bbox": [106, 35, 318, 313], "area": 30284}, {"id": 4012614, "category_id": 42, "iscrowd": 0, "bbox": [256, 286, 200, 80], "area": 9843}, {"id": 11972779, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 232112}], "file_name": "000000498807.png", "image_id": 498807}, {"segments_info": [{"id": 12106697, "category_id": 25, "iscrowd": 0, "bbox": [159, 88, 170, 231], "area": 11422}, {"id": 9737624, "category_id": 125, "iscrowd": 0, "bbox": [0, 263, 500, 112], "area": 38159}, {"id": 2499882, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 154, 88], "area": 4492}, {"id": 5136470, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 95], "area": 23826}, {"id": 5791841, "category_id": 185, "iscrowd": 0, "bbox": [0, 1, 500, 323], "area": 96385}, {"id": 8433829, "category_id": 193, "iscrowd": 0, "bbox": [204, 356, 272, 19], "area": 3239}], "file_name": "000000498857.png", "image_id": 498857}, {"segments_info": [{"id": 1538217, "category_id": 53, "iscrowd": 0, "bbox": [124, 74, 30, 29], "area": 640}, {"id": 3425440, "category_id": 53, "iscrowd": 0, "bbox": [167, 3, 16, 14], "area": 168}, {"id": 1910144, "category_id": 53, "iscrowd": 0, "bbox": [190, 6, 13, 9], "area": 89}, {"id": 1403019, "category_id": 53, "iscrowd": 0, "bbox": [224, 74, 32, 23], "area": 511}, {"id": 2396327, "category_id": 53, "iscrowd": 0, "bbox": [54, 125, 31, 20], "area": 408}, {"id": 2634607, "category_id": 53, "iscrowd": 0, "bbox": [202, 2, 10, 9], "area": 73}, {"id": 1666965, "category_id": 53, "iscrowd": 0, "bbox": [170, 56, 33, 29], "area": 718}, {"id": 2567001, "category_id": 53, "iscrowd": 0, "bbox": [183, 5, 8, 10], "area": 72}, {"id": 1735576, "category_id": 53, "iscrowd": 0, "bbox": [94, 89, 46, 49], "area": 1501}, {"id": 1266886, "category_id": 53, "iscrowd": 0, "bbox": [62, 28, 125, 77], "area": 5047}, {"id": 2191247, "category_id": 53, "iscrowd": 0, "bbox": [227, 47, 24, 15], "area": 224}, {"id": 1663875, "category_id": 53, "iscrowd": 0, "bbox": [252, 43, 29, 21], "area": 494}, {"id": 997022, "category_id": 53, "iscrowd": 0, "bbox": [45, 90, 20, 21], "area": 308}, {"id": 1339879, "category_id": 55, "iscrowd": 0, "bbox": [157, 246, 199, 74], "area": 8599}, {"id": 1471981, "category_id": 55, "iscrowd": 0, "bbox": [379, 162, 49, 45], "area": 1160}, {"id": 1009123, "category_id": 55, "iscrowd": 0, "bbox": [328, 167, 104, 153], "area": 9804}, {"id": 1204706, "category_id": 55, "iscrowd": 0, "bbox": [327, 241, 71, 67], "area": 2381}, {"id": 817363, "category_id": 55, "iscrowd": 0, "bbox": [285, 77, 44, 37], "area": 1241}, {"id": 1340910, "category_id": 55, "iscrowd": 0, "bbox": [310, 222, 59, 60], "area": 1431}, {"id": 1474535, "category_id": 55, "iscrowd": 0, "bbox": [30, 164, 45, 30], "area": 492}, {"id": 1274862, "category_id": 55, "iscrowd": 0, "bbox": [291, 207, 60, 57], "area": 1677}, {"id": 1206506, "category_id": 55, "iscrowd": 0, "bbox": [246, 224, 44, 55], "area": 1108}, {"id": 1800688, "category_id": 55, "iscrowd": 0, "bbox": [279, 191, 54, 51], "area": 1139}, {"id": 5408943, "category_id": 118, "iscrowd": 0, "bbox": [345, 9, 87, 109], "area": 6011}, {"id": 2257826, "category_id": 122, "iscrowd": 0, "bbox": [0, 0, 432, 324], "area": 81749}, {"id": 5340062, "category_id": 189, "iscrowd": 0, "bbox": [181, 11, 61, 22], "area": 568}, {"id": 3235430, "category_id": 196, "iscrowd": 0, "bbox": [251, 0, 110, 98], "area": 6419}], "file_name": "000000498919.png", "image_id": 498919}, {"segments_info": [{"id": 9017007, "category_id": 1, "iscrowd": 0, "bbox": [2, 176, 108, 408], "area": 25780}, {"id": 7631228, "category_id": 1, "iscrowd": 0, "bbox": [288, 146, 138, 429], "area": 36367}, {"id": 11844553, "category_id": 1, "iscrowd": 0, "bbox": [122, 196, 116, 379], "area": 24259}, {"id": 5419988, "category_id": 52, "iscrowd": 0, "bbox": [71, 218, 53, 90], "area": 2734}, {"id": 7166527, "category_id": 92, "iscrowd": 0, "bbox": [136, 22, 222, 369], "area": 57218}, {"id": 2042183, "category_id": 190, "iscrowd": 0, "bbox": [0, 385, 427, 142], "area": 5910}, {"id": 7112365, "category_id": 191, "iscrowd": 0, "bbox": [0, 528, 427, 112], "area": 36726}, {"id": 5599935, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 549], "area": 78511}], "file_name": "000000499031.png", "image_id": 499031}, {"segments_info": [{"id": 6988468, "category_id": 54, "iscrowd": 0, "bbox": [20, 90, 366, 329], "area": 80982}, {"id": 3825022, "category_id": 189, "iscrowd": 0, "bbox": [233, 260, 170, 161], "area": 8442}, {"id": 8163745, "category_id": 195, "iscrowd": 0, "bbox": [310, 90, 157, 93], "area": 7699}, {"id": 3108269, "category_id": 196, "iscrowd": 0, "bbox": [315, 164, 152, 233], "area": 21829}], "file_name": "000000499109.png", "image_id": 499109}, {"segments_info": [{"id": 8884357, "category_id": 1, "iscrowd": 0, "bbox": [110, 411, 15, 17], "area": 97}, {"id": 1185070, "category_id": 3, "iscrowd": 0, "bbox": [573, 278, 67, 82], "area": 4855}, {"id": 5066575, "category_id": 3, "iscrowd": 0, "bbox": [329, 253, 62, 12], "area": 598}, {"id": 4340859, "category_id": 3, "iscrowd": 0, "bbox": [492, 236, 93, 43], "area": 2506}, {"id": 7562338, "category_id": 3, "iscrowd": 0, "bbox": [0, 275, 72, 40], "area": 2198}, {"id": 394244, "category_id": 3, "iscrowd": 0, "bbox": [535, 193, 93, 39], "area": 2707}, {"id": 6711399, "category_id": 3, "iscrowd": 0, "bbox": [20, 390, 175, 89], "area": 9776}, {"id": 922389, "category_id": 10, "iscrowd": 0, "bbox": [251, 281, 20, 36], "area": 641}, {"id": 2961977, "category_id": 10, "iscrowd": 0, "bbox": [108, 154, 25, 85], "area": 1905}, {"id": 1580320, "category_id": 10, "iscrowd": 0, "bbox": [238, 285, 13, 29], "area": 367}, {"id": 1908770, "category_id": 10, "iscrowd": 0, "bbox": [223, 317, 25, 19], "area": 390}, {"id": 2569538, "category_id": 10, "iscrowd": 0, "bbox": [271, 282, 23, 47], "area": 755}, {"id": 9277921, "category_id": 13, "iscrowd": 0, "bbox": [249, 320, 22, 39], "area": 714}, {"id": 7960422, "category_id": 130, "iscrowd": 0, "bbox": [446, 68, 44, 22], "area": 630}, {"id": 6451835, "category_id": 149, "iscrowd": 0, "bbox": [0, 230, 640, 250], "area": 78620}, {"id": 8424078, "category_id": 166, "iscrowd": 0, "bbox": [0, 83, 438, 193], "area": 61994}, {"id": 6323851, "category_id": 175, "iscrowd": 0, "bbox": [411, 357, 112, 63], "area": 4507}, {"id": 8691107, "category_id": 181, "iscrowd": 0, "bbox": [171, 141, 81, 78], "area": 3685}, {"id": 5859696, "category_id": 191, "iscrowd": 0, "bbox": [0, 287, 640, 184], "area": 27929}, {"id": 4408387, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 261], "area": 48637}, {"id": 6974058, "category_id": 199, "iscrowd": 0, "bbox": [88, 0, 552, 117], "area": 36892}], "file_name": "000000499181.png", "image_id": 499181}, {"segments_info": [{"id": 4805768, "category_id": 1, "iscrowd": 0, "bbox": [0, 23, 269, 457], "area": 51987}, {"id": 7302354, "category_id": 1, "iscrowd": 0, "bbox": [452, 8, 87, 100], "area": 5494}, {"id": 9407931, "category_id": 1, "iscrowd": 0, "bbox": [536, 44, 47, 59], "area": 1796}, {"id": 3223617, "category_id": 62, "iscrowd": 0, "bbox": [587, 105, 52, 64], "area": 2033}, {"id": 7828854, "category_id": 77, "iscrowd": 0, "bbox": [62, 94, 530, 304], "area": 147953}, {"id": 2636920, "category_id": 118, "iscrowd": 0, "bbox": [586, 159, 54, 202], "area": 7672}, {"id": 1786293, "category_id": 189, "iscrowd": 0, "bbox": [32, 304, 608, 176], "area": 41834}, {"id": 3622536, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 324], "area": 37144}], "file_name": "000000499266.png", "image_id": 499266}, {"segments_info": [{"id": 3164512, "category_id": 46, "iscrowd": 0, "bbox": [522, 1, 118, 103], "area": 7937}, {"id": 6394033, "category_id": 47, "iscrowd": 0, "bbox": [507, 1, 68, 19], "area": 912}, {"id": 3827597, "category_id": 47, "iscrowd": 0, "bbox": [397, 2, 104, 71], "area": 5769}, {"id": 2773690, "category_id": 59, "iscrowd": 0, "bbox": [44, 35, 549, 362], "area": 147656}, {"id": 2111847, "category_id": 67, "iscrowd": 0, "bbox": [4, 0, 636, 468], "area": 55888}, {"id": 1650251, "category_id": 118, "iscrowd": 0, "bbox": [0, 217, 174, 261], "area": 23214}, {"id": 4486813, "category_id": 189, "iscrowd": 0, "bbox": [131, 0, 509, 409], "area": 3103}, {"id": 4690623, "category_id": 195, "iscrowd": 0, "bbox": [442, 33, 198, 445], "area": 11055}, {"id": 4089504, "category_id": 196, "iscrowd": 0, "bbox": [284, 0, 160, 27], "area": 2806}], "file_name": "000000499313.png", "image_id": 499313}, {"segments_info": [{"id": 5724774, "category_id": 1, "iscrowd": 0, "bbox": [152, 41, 121, 295], "area": 11038}, {"id": 8095631, "category_id": 4, "iscrowd": 0, "bbox": [94, 78, 267, 311], "area": 45603}, {"id": 10205392, "category_id": 149, "iscrowd": 0, "bbox": [0, 113, 412, 343], "area": 83910}, {"id": 7248568, "category_id": 175, "iscrowd": 0, "bbox": [362, 0, 50, 61], "area": 2164}, {"id": 2642827, "category_id": 177, "iscrowd": 0, "bbox": [321, 0, 45, 120], "area": 4802}, {"id": 6917026, "category_id": 191, "iscrowd": 0, "bbox": [0, 55, 412, 108], "area": 12327}, {"id": 4744314, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 412, 115], "area": 26039}], "file_name": "000000499622.png", "image_id": 499622}, {"segments_info": [{"id": 7299925, "category_id": 3, "iscrowd": 0, "bbox": [0, 64, 46, 41], "area": 1308}, {"id": 8219997, "category_id": 3, "iscrowd": 0, "bbox": [43, 40, 167, 73], "area": 8507}, {"id": 5597798, "category_id": 11, "iscrowd": 0, "bbox": [243, 22, 101, 220], "area": 12862}, {"id": 5721668, "category_id": 112, "iscrowd": 0, "bbox": [178, 13, 61, 90], "area": 2654}, {"id": 10725285, "category_id": 149, "iscrowd": 0, "bbox": [0, 87, 640, 217], "area": 54749}, {"id": 12634059, "category_id": 191, "iscrowd": 0, "bbox": [0, 86, 640, 342], "area": 84662}, {"id": 8629928, "category_id": 193, "iscrowd": 0, "bbox": [0, 300, 124, 108], "area": 7440}, {"id": 7565680, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 105], "area": 46904}], "file_name": "000000499768.png", "image_id": 499768}, {"segments_info": [{"id": 2959412, "category_id": 3, "iscrowd": 0, "bbox": [518, 319, 119, 50], "area": 3625}, {"id": 3098713, "category_id": 6, "iscrowd": 0, "bbox": [191, 225, 166, 161], "area": 24660}, {"id": 4672081, "category_id": 128, "iscrowd": 0, "bbox": [369, 205, 271, 135], "area": 20489}, {"id": 3552563, "category_id": 149, "iscrowd": 0, "bbox": [155, 317, 485, 163], "area": 53946}, {"id": 1645852, "category_id": 171, "iscrowd": 0, "bbox": [0, 304, 193, 176], "area": 6861}, {"id": 10134183, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 551, 393], "area": 75968}, {"id": 2434855, "category_id": 185, "iscrowd": 0, "bbox": [468, 302, 172, 57], "area": 4709}, {"id": 16645886, "category_id": 187, "iscrowd": 0, "bbox": [64, 0, 576, 260], "area": 89666}, {"id": 2500646, "category_id": 191, "iscrowd": 0, "bbox": [18, 306, 452, 174], "area": 17675}], "file_name": "000000499775.png", "image_id": 499775}, {"segments_info": [{"id": 8552559, "category_id": 5, "iscrowd": 0, "bbox": [1, 76, 497, 185], "area": 67082}, {"id": 9873046, "category_id": 191, "iscrowd": 0, "bbox": [0, 121, 640, 305], "area": 134730}, {"id": 7824424, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 134], "area": 65076}, {"id": 3110507, "category_id": 193, "iscrowd": 0, "bbox": [475, 122, 165, 69], "area": 5117}], "file_name": "000000500049.png", "image_id": 500049}, {"segments_info": [{"id": 7899024, "category_id": 28, "iscrowd": 0, "bbox": [174, 287, 28, 193], "area": 2382}, {"id": 6255744, "category_id": 28, "iscrowd": 0, "bbox": [393, 233, 72, 239], "area": 10319}, {"id": 7504522, "category_id": 28, "iscrowd": 0, "bbox": [262, 284, 39, 129], "area": 2876}, {"id": 8489874, "category_id": 28, "iscrowd": 0, "bbox": [50, 285, 36, 62], "area": 1372}, {"id": 7636372, "category_id": 28, "iscrowd": 0, "bbox": [560, 238, 49, 125], "area": 3748}, {"id": 9477281, "category_id": 28, "iscrowd": 0, "bbox": [1, 307, 14, 69], "area": 546}, {"id": 8030354, "category_id": 28, "iscrowd": 0, "bbox": [125, 279, 39, 111], "area": 2785}, {"id": 7833485, "category_id": 28, "iscrowd": 0, "bbox": [316, 266, 22, 137], "area": 1611}, {"id": 7964301, "category_id": 28, "iscrowd": 0, "bbox": [202, 271, 50, 125], "area": 3724}, {"id": 6847626, "category_id": 28, "iscrowd": 0, "bbox": [504, 259, 73, 197], "area": 8681}, {"id": 6715781, "category_id": 28, "iscrowd": 0, "bbox": [454, 278, 31, 118], "area": 2334}, {"id": 7045001, "category_id": 28, "iscrowd": 0, "bbox": [326, 223, 66, 252], "area": 12363}, {"id": 11050647, "category_id": 62, "iscrowd": 0, "bbox": [464, 414, 176, 66], "area": 5403}, {"id": 9468523, "category_id": 128, "iscrowd": 0, "bbox": [0, 104, 640, 262], "area": 47920}, {"id": 13677468, "category_id": 149, "iscrowd": 0, "bbox": [153, 185, 51, 51], "area": 1111}, {"id": 10717297, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 67683}, {"id": 5524031, "category_id": 185, "iscrowd": 0, "bbox": [461, 375, 53, 48], "area": 1495}, {"id": 16116946, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 167], "area": 74294}, {"id": 12692118, "category_id": 192, "iscrowd": 0, "bbox": [161, 164, 41, 25], "area": 741}, {"id": 8158587, "category_id": 193, "iscrowd": 0, "bbox": [0, 215, 640, 265], "area": 51874}], "file_name": "000000500211.png", "image_id": 500211}, {"segments_info": [{"id": 9003090, "category_id": 1, "iscrowd": 0, "bbox": [15, 146, 20, 48], "area": 431}, {"id": 7759450, "category_id": 1, "iscrowd": 0, "bbox": [67, 151, 9, 20], "area": 128}, {"id": 6041366, "category_id": 1, "iscrowd": 0, "bbox": [361, 143, 83, 193], "area": 8790}, {"id": 6450825, "category_id": 1, "iscrowd": 0, "bbox": [451, 170, 17, 17], "area": 165}, {"id": 6643297, "category_id": 1, "iscrowd": 0, "bbox": [147, 158, 6, 7], "area": 24}, {"id": 7161658, "category_id": 1, "iscrowd": 0, "bbox": [92, 139, 43, 120], "area": 2680}, {"id": 8421752, "category_id": 27, "iscrowd": 0, "bbox": [178, 156, 29, 22], "area": 527}, {"id": 4344391, "category_id": 33, "iscrowd": 0, "bbox": [233, 170, 21, 30], "area": 352}, {"id": 2561282, "category_id": 33, "iscrowd": 0, "bbox": [439, 243, 46, 61], "area": 2045}, {"id": 5002830, "category_id": 33, "iscrowd": 0, "bbox": [116, 209, 74, 48], "area": 2386}, {"id": 6124144, "category_id": 33, "iscrowd": 0, "bbox": [246, 154, 50, 28], "area": 531}, {"id": 6187373, "category_id": 33, "iscrowd": 0, "bbox": [204, 192, 30, 20], "area": 485}, {"id": 4868925, "category_id": 33, "iscrowd": 0, "bbox": [107, 194, 56, 49], "area": 1025}, {"id": 7966843, "category_id": 33, "iscrowd": 0, "bbox": [259, 164, 63, 30], "area": 1350}, {"id": 6107665, "category_id": 33, "iscrowd": 0, "bbox": [360, 253, 20, 39], "area": 654}, {"id": 4675408, "category_id": 33, "iscrowd": 0, "bbox": [254, 201, 24, 25], "area": 447}, {"id": 5849124, "category_id": 33, "iscrowd": 0, "bbox": [457, 195, 43, 57], "area": 1764}, {"id": 7839916, "category_id": 33, "iscrowd": 0, "bbox": [242, 151, 28, 22], "area": 238}, {"id": 8990483, "category_id": 33, "iscrowd": 0, "bbox": [328, 231, 29, 34], "area": 768}, {"id": 6120802, "category_id": 33, "iscrowd": 0, "bbox": [207, 174, 28, 17], "area": 369}, {"id": 5392704, "category_id": 33, "iscrowd": 1, "bbox": [21, 137, 479, 181], "area": 20858}, {"id": 13606968, "category_id": 72, "iscrowd": 0, "bbox": [225, 138, 14, 13], "area": 145}, {"id": 13476406, "category_id": 72, "iscrowd": 0, "bbox": [211, 139, 13, 12], "area": 129}, {"id": 14130745, "category_id": 72, "iscrowd": 0, "bbox": [192, 139, 11, 11], "area": 102}, {"id": 14529853, "category_id": 72, "iscrowd": 0, "bbox": [319, 136, 18, 17], "area": 287}, {"id": 14460217, "category_id": 72, "iscrowd": 0, "bbox": [181, 139, 10, 10], "area": 88}, {"id": 13602348, "category_id": 72, "iscrowd": 0, "bbox": [154, 140, 9, 9], "area": 73}, {"id": 13670452, "category_id": 72, "iscrowd": 0, "bbox": [164, 139, 9, 11], "area": 88}, {"id": 13611840, "category_id": 72, "iscrowd": 0, "bbox": [295, 137, 20, 16], "area": 248}, {"id": 14465082, "category_id": 72, "iscrowd": 0, "bbox": [249, 138, 14, 13], "area": 153}, {"id": 14136378, "category_id": 72, "iscrowd": 0, "bbox": [267, 137, 14, 14], "area": 182}, {"id": 14276812, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 500, 124], "area": 19715}, {"id": 7104602, "category_id": 197, "iscrowd": 0, "bbox": [9, 78, 491, 110], "area": 23216}, {"id": 16382448, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 167], "area": 32851}, {"id": 8686462, "category_id": 200, "iscrowd": 0, "bbox": [0, 182, 500, 218], "area": 70328}], "file_name": "000000500257.png", "image_id": 500257}, {"segments_info": [{"id": 1315860, "category_id": 1, "iscrowd": 0, "bbox": [37, 182, 18, 51], "area": 443}, {"id": 2105638, "category_id": 1, "iscrowd": 0, "bbox": [133, 119, 56, 189], "area": 3979}, {"id": 5456705, "category_id": 1, "iscrowd": 0, "bbox": [68, 210, 70, 41], "area": 1409}, {"id": 1382167, "category_id": 1, "iscrowd": 0, "bbox": [213, 210, 4, 9], "area": 28}, {"id": 2170154, "category_id": 1, "iscrowd": 0, "bbox": [581, 197, 13, 40], "area": 241}, {"id": 1448471, "category_id": 1, "iscrowd": 0, "bbox": [249, 210, 8, 19], "area": 126}, {"id": 2104862, "category_id": 1, "iscrowd": 0, "bbox": [183, 218, 17, 19], "area": 136}, {"id": 723723, "category_id": 1, "iscrowd": 0, "bbox": [547, 221, 13, 11], "area": 103}, {"id": 1776411, "category_id": 41, "iscrowd": 0, "bbox": [45, 230, 15, 5], "area": 40}, {"id": 2960943, "category_id": 41, "iscrowd": 0, "bbox": [242, 225, 5, 3], "area": 6}, {"id": 2565925, "category_id": 41, "iscrowd": 0, "bbox": [107, 302, 91, 22], "area": 669}, {"id": 1250066, "category_id": 41, "iscrowd": 0, "bbox": [193, 233, 10, 4], "area": 26}, {"id": 3553852, "category_id": 184, "iscrowd": 0, "bbox": [494, 107, 123, 83], "area": 1985}, {"id": 2894377, "category_id": 185, "iscrowd": 0, "bbox": [0, 182, 640, 177], "area": 41273}, {"id": 13817044, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 207], "area": 121063}, {"id": 4801861, "category_id": 191, "iscrowd": 0, "bbox": [0, 325, 640, 100], "area": 47180}], "file_name": "000000500270.png", "image_id": 500270}, {"segments_info": [{"id": 987152, "category_id": 1, "iscrowd": 0, "bbox": [486, 207, 13, 24], "area": 175}, {"id": 5266808, "category_id": 7, "iscrowd": 0, "bbox": [1, 10, 639, 322], "area": 127977}, {"id": 7240839, "category_id": 144, "iscrowd": 0, "bbox": [0, 204, 640, 223], "area": 81291}, {"id": 2632236, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 137], "area": 38301}, {"id": 5854033, "category_id": 197, "iscrowd": 0, "bbox": [303, 45, 337, 112], "area": 13198}], "file_name": "000000500423.png", "image_id": 500423}, {"segments_info": [{"id": 330516, "category_id": 44, "iscrowd": 0, "bbox": [265, 324, 13, 47], "area": 454}, {"id": 6791118, "category_id": 81, "iscrowd": 0, "bbox": [1, 226, 211, 129], "area": 15577}, {"id": 5869770, "category_id": 89, "iscrowd": 0, "bbox": [140, 49, 29, 38], "area": 594}, {"id": 6725039, "category_id": 90, "iscrowd": 0, "bbox": [157, 32, 14, 32], "area": 176}, {"id": 8105160, "category_id": 90, "iscrowd": 0, "bbox": [168, 46, 6, 18], "area": 48}, {"id": 2775682, "category_id": 133, "iscrowd": 0, "bbox": [350, 0, 80, 187], "area": 10942}, {"id": 864074, "category_id": 168, "iscrowd": 0, "bbox": [0, 65, 242, 432], "area": 6957}, {"id": 3567008, "category_id": 176, "iscrowd": 0, "bbox": [0, 101, 430, 539], "area": 129609}, {"id": 2644356, "category_id": 188, "iscrowd": 0, "bbox": [182, 0, 179, 59], "area": 9340}, {"id": 2775436, "category_id": 190, "iscrowd": 0, "bbox": [0, 407, 430, 233], "area": 48828}, {"id": 4027539, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 394, 152], "area": 34170}, {"id": 468276, "category_id": 200, "iscrowd": 0, "bbox": [101, 592, 201, 48], "area": 7121}], "file_name": "000000500464.png", "image_id": 500464}, {"segments_info": [{"id": 5334684, "category_id": 1, "iscrowd": 0, "bbox": [4, 0, 387, 254], "area": 42901}, {"id": 7049121, "category_id": 20, "iscrowd": 0, "bbox": [1, 1, 639, 474], "area": 194195}, {"id": 2050877, "category_id": 193, "iscrowd": 0, "bbox": [443, 0, 197, 351], "area": 27887}], "file_name": "000000500477.png", "image_id": 500477}, {"segments_info": [{"id": 5390917, "category_id": 1, "iscrowd": 0, "bbox": [88, 0, 49, 100], "area": 2854}, {"id": 2566247, "category_id": 1, "iscrowd": 0, "bbox": [204, 10, 66, 74], "area": 2531}, {"id": 9535619, "category_id": 1, "iscrowd": 0, "bbox": [78, 173, 32, 71], "area": 1185}, {"id": 2633792, "category_id": 1, "iscrowd": 0, "bbox": [133, 4, 42, 58], "area": 1417}, {"id": 3618409, "category_id": 1, "iscrowd": 0, "bbox": [268, 181, 28, 48], "area": 956}, {"id": 4269868, "category_id": 1, "iscrowd": 0, "bbox": [0, 58, 74, 76], "area": 2785}, {"id": 3490389, "category_id": 1, "iscrowd": 0, "bbox": [208, 120, 41, 64], "area": 1577}, {"id": 3091061, "category_id": 1, "iscrowd": 0, "bbox": [33, 181, 58, 61], "area": 2205}, {"id": 10261663, "category_id": 1, "iscrowd": 0, "bbox": [102, 81, 171, 434], "area": 32984}, {"id": 2105682, "category_id": 1, "iscrowd": 0, "bbox": [0, 181, 33, 62], "area": 1394}, {"id": 6911385, "category_id": 1, "iscrowd": 0, "bbox": [223, 194, 51, 71], "area": 1836}, {"id": 7893365, "category_id": 1, "iscrowd": 0, "bbox": [163, 1, 50, 57], "area": 2141}, {"id": 1909618, "category_id": 1, "iscrowd": 0, "bbox": [292, 196, 37, 68], "area": 1878}, {"id": 3356486, "category_id": 1, "iscrowd": 1, "bbox": [216, 50, 113, 191], "area": 9339}, {"id": 2697262, "category_id": 40, "iscrowd": 0, "bbox": [182, 209, 50, 51], "area": 1936}, {"id": 4803901, "category_id": 62, "iscrowd": 0, "bbox": [20, 180, 38, 19], "area": 571}, {"id": 4014129, "category_id": 62, "iscrowd": 0, "bbox": [0, 144, 24, 18], "area": 353}, {"id": 4671800, "category_id": 62, "iscrowd": 0, "bbox": [64, 127, 42, 20], "area": 610}, {"id": 4803387, "category_id": 62, "iscrowd": 0, "bbox": [24, 145, 44, 20], "area": 759}, {"id": 4014387, "category_id": 62, "iscrowd": 0, "bbox": [0, 161, 29, 22], "area": 540}, {"id": 4211507, "category_id": 62, "iscrowd": 0, "bbox": [1, 127, 20, 18], "area": 316}, {"id": 4999996, "category_id": 62, "iscrowd": 0, "bbox": [27, 165, 43, 19], "area": 628}, {"id": 5000765, "category_id": 62, "iscrowd": 0, "bbox": [65, 144, 41, 21], "area": 685}, {"id": 5066301, "category_id": 62, "iscrowd": 0, "bbox": [23, 127, 39, 17], "area": 596}, {"id": 4869180, "category_id": 62, "iscrowd": 0, "bbox": [59, 108, 44, 19], "area": 672}, {"id": 5066817, "category_id": 62, "iscrowd": 0, "bbox": [103, 108, 36, 21], "area": 622}, {"id": 10789266, "category_id": 92, "iscrowd": 0, "bbox": [143, 271, 186, 121], "area": 10734}, {"id": 3507578, "category_id": 145, "iscrowd": 0, "bbox": [0, 435, 329, 205], "area": 35338}, {"id": 7445700, "category_id": 154, "iscrowd": 0, "bbox": [0, 496, 329, 90], "area": 26028}, {"id": 4876161, "category_id": 194, "iscrowd": 0, "bbox": [0, 384, 329, 65], "area": 15217}, {"id": 2241605, "category_id": 199, "iscrowd": 0, "bbox": [0, 361, 134, 28], "area": 3291}], "file_name": "000000500478.png", "image_id": 500478}, {"segments_info": [{"id": 6583692, "category_id": 1, "iscrowd": 0, "bbox": [1, 3, 406, 459], "area": 122785}, {"id": 6716839, "category_id": 1, "iscrowd": 0, "bbox": [228, 91, 411, 368], "area": 82720}, {"id": 1269657, "category_id": 90, "iscrowd": 0, "bbox": [375, 307, 107, 76], "area": 1143}, {"id": 9803680, "category_id": 133, "iscrowd": 0, "bbox": [0, 87, 47, 117], "area": 1843}, {"id": 10922146, "category_id": 168, "iscrowd": 0, "bbox": [0, 276, 640, 190], "area": 7098}, {"id": 12501444, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 444], "area": 74074}], "file_name": "000000500565.png", "image_id": 500565}, {"segments_info": [{"id": 4799284, "category_id": 3, "iscrowd": 0, "bbox": [558, 202, 82, 82], "area": 3959}, {"id": 9870497, "category_id": 8, "iscrowd": 0, "bbox": [31, 214, 29, 34], "area": 873}, {"id": 7498870, "category_id": 8, "iscrowd": 0, "bbox": [159, 101, 368, 263], "area": 71254}, {"id": 4670796, "category_id": 8, "iscrowd": 0, "bbox": [503, 213, 66, 35], "area": 1615}, {"id": 9343898, "category_id": 8, "iscrowd": 0, "bbox": [64, 207, 40, 39], "area": 1397}, {"id": 10260361, "category_id": 8, "iscrowd": 0, "bbox": [553, 191, 65, 41], "area": 1361}, {"id": 5529194, "category_id": 149, "iscrowd": 0, "bbox": [0, 225, 640, 200], "area": 81608}, {"id": 13882840, "category_id": 166, "iscrowd": 0, "bbox": [588, 190, 35, 17], "area": 49}, {"id": 8817818, "category_id": 184, "iscrowd": 0, "bbox": [18, 192, 144, 51], "area": 2124}, {"id": 14463634, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 228], "area": 102568}, {"id": 3683378, "category_id": 197, "iscrowd": 0, "bbox": [131, 172, 509, 69], "area": 3399}], "file_name": "000000500613.png", "image_id": 500613}, {"segments_info": [{"id": 461576, "category_id": 21, "iscrowd": 0, "bbox": [288, 354, 39, 24], "area": 506}, {"id": 526341, "category_id": 21, "iscrowd": 0, "bbox": [398, 341, 19, 10], "area": 127}, {"id": 2499614, "category_id": 21, "iscrowd": 0, "bbox": [442, 324, 9, 6], "area": 36}, {"id": 2567465, "category_id": 148, "iscrowd": 0, "bbox": [317, 279, 323, 30], "area": 6356}, {"id": 9739395, "category_id": 166, "iscrowd": 0, "bbox": [540, 322, 20, 16], "area": 236}, {"id": 2303773, "category_id": 184, "iscrowd": 0, "bbox": [0, 181, 640, 160], "area": 43811}, {"id": 16052437, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 220], "area": 133002}, {"id": 8287832, "category_id": 192, "iscrowd": 0, "bbox": [0, 198, 387, 44], "area": 7159}, {"id": 2113586, "category_id": 193, "iscrowd": 0, "bbox": [0, 299, 640, 181], "area": 110312}], "file_name": "000000500663.png", "image_id": 500663}, {"segments_info": [{"id": 5591391, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 445, 500], "area": 191474}, {"id": 6444879, "category_id": 87, "iscrowd": 0, "bbox": [0, 47, 172, 246], "area": 15070}, {"id": 11580589, "category_id": 199, "iscrowd": 0, "bbox": [356, 0, 89, 245], "area": 13577}], "file_name": "000000500716.png", "image_id": 500716}, {"segments_info": [{"id": 2636871, "category_id": 10, "iscrowd": 0, "bbox": [165, 384, 52, 42], "area": 1557}, {"id": 16104064, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 139948}, {"id": 9612491, "category_id": 197, "iscrowd": 0, "bbox": [0, 97, 640, 329], "area": 81121}], "file_name": "000000500826.png", "image_id": 500826}, {"segments_info": [{"id": 2434085, "category_id": 1, "iscrowd": 0, "bbox": [450, 178, 159, 216], "area": 14212}, {"id": 11248034, "category_id": 1, "iscrowd": 0, "bbox": [131, 58, 173, 252], "area": 12388}, {"id": 6381703, "category_id": 1, "iscrowd": 0, "bbox": [380, 176, 152, 166], "area": 8092}, {"id": 4276804, "category_id": 39, "iscrowd": 0, "bbox": [106, 51, 86, 61], "area": 591}, {"id": 4215903, "category_id": 40, "iscrowd": 0, "bbox": [362, 194, 49, 43], "area": 1064}, {"id": 5072515, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 396], "area": 216595}], "file_name": "000000501005.png", "image_id": 501005}, {"segments_info": [{"id": 9926248, "category_id": 10, "iscrowd": 0, "bbox": [41, 40, 3, 5], "area": 15}, {"id": 5058854, "category_id": 13, "iscrowd": 0, "bbox": [67, 14, 36, 36], "area": 1028}, {"id": 3945927, "category_id": 13, "iscrowd": 0, "bbox": [256, 100, 52, 45], "area": 1817}, {"id": 9277343, "category_id": 149, "iscrowd": 0, "bbox": [0, 66, 283, 309], "area": 58393}, {"id": 11176560, "category_id": 155, "iscrowd": 0, "bbox": [0, 63, 144, 37], "area": 1686}, {"id": 4535086, "category_id": 184, "iscrowd": 0, "bbox": [341, 0, 94, 115], "area": 3223}, {"id": 15123081, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 84], "area": 23975}, {"id": 9927257, "category_id": 192, "iscrowd": 0, "bbox": [25, 40, 438, 50], "area": 6382}, {"id": 8684950, "category_id": 194, "iscrowd": 0, "bbox": [0, 66, 500, 309], "area": 69099}], "file_name": "000000501023.png", "image_id": 501023}, {"segments_info": [{"id": 4737353, "category_id": 24, "iscrowd": 0, "bbox": [54, 122, 156, 231], "area": 8247}, {"id": 6118752, "category_id": 24, "iscrowd": 0, "bbox": [88, 99, 273, 265], "area": 28428}, {"id": 6053214, "category_id": 24, "iscrowd": 0, "bbox": [307, 136, 273, 239], "area": 34919}, {"id": 3889990, "category_id": 184, "iscrowd": 0, "bbox": [0, 45, 640, 200], "area": 41341}, {"id": 9343121, "category_id": 194, "iscrowd": 0, "bbox": [0, 228, 640, 199], "area": 94191}], "file_name": "000000501243.png", "image_id": 501243}, {"segments_info": [{"id": 5657682, "category_id": 1, "iscrowd": 0, "bbox": [119, 3, 256, 490], "area": 86877}, {"id": 10961679, "category_id": 44, "iscrowd": 0, "bbox": [176, 324, 12, 44], "area": 439}, {"id": 15307848, "category_id": 44, "iscrowd": 0, "bbox": [192, 316, 15, 53], "area": 721}, {"id": 5057040, "category_id": 89, "iscrowd": 0, "bbox": [156, 25, 34, 20], "area": 299}, {"id": 6714990, "category_id": 168, "iscrowd": 0, "bbox": [223, 494, 152, 6], "area": 912}, {"id": 15702609, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 293, 500], "area": 86951}], "file_name": "000000501368.png", "image_id": 501368}, {"segments_info": [{"id": 857107, "category_id": 17, "iscrowd": 0, "bbox": [209, 113, 289, 285], "area": 54177}, {"id": 7506832, "category_id": 44, "iscrowd": 0, "bbox": [462, 6, 85, 138], "area": 8381}, {"id": 4610914, "category_id": 44, "iscrowd": 0, "bbox": [540, 50, 64, 120], "area": 5879}, {"id": 7508637, "category_id": 47, "iscrowd": 0, "bbox": [285, 1, 65, 35], "area": 1611}, {"id": 9415599, "category_id": 81, "iscrowd": 0, "bbox": [105, 0, 535, 467], "area": 83314}, {"id": 4286321, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 219, 438], "area": 61367}, {"id": 2111807, "category_id": 190, "iscrowd": 0, "bbox": [0, 386, 614, 94], "area": 20659}, {"id": 2178114, "category_id": 195, "iscrowd": 0, "bbox": [451, 322, 107, 147], "area": 6585}, {"id": 4020835, "category_id": 199, "iscrowd": 0, "bbox": [67, 0, 573, 416], "area": 35000}], "file_name": "000000501523.png", "image_id": 501523}, {"segments_info": [{"id": 5268321, "category_id": 64, "iscrowd": 0, "bbox": [4, 291, 120, 102], "area": 3898}, {"id": 4611969, "category_id": 64, "iscrowd": 0, "bbox": [333, 304, 66, 81], "area": 1819}, {"id": 7627867, "category_id": 86, "iscrowd": 0, "bbox": [49, 348, 26, 46], "area": 797}, {"id": 2570572, "category_id": 86, "iscrowd": 0, "bbox": [353, 338, 27, 48], "area": 1044}, {"id": 9407113, "category_id": 112, "iscrowd": 0, "bbox": [114, 61, 171, 327], "area": 20698}, {"id": 330254, "category_id": 190, "iscrowd": 0, "bbox": [163, 297, 17, 17], "area": 168}, {"id": 6973814, "category_id": 191, "iscrowd": 0, "bbox": [0, 370, 419, 31], "area": 9567}, {"id": 6391467, "category_id": 199, "iscrowd": 0, "bbox": [0, 12, 500, 394], "area": 146360}], "file_name": "000000502136.png", "image_id": 502136}, {"segments_info": [{"id": 2827554, "category_id": 1, "iscrowd": 0, "bbox": [475, 256, 36, 95], "area": 2366}, {"id": 8025198, "category_id": 1, "iscrowd": 0, "bbox": [281, 132, 4, 5], "area": 13}, {"id": 1445386, "category_id": 1, "iscrowd": 0, "bbox": [560, 287, 52, 155], "area": 5140}, {"id": 7039849, "category_id": 1, "iscrowd": 0, "bbox": [289, 132, 2, 3], "area": 4}, {"id": 3288103, "category_id": 1, "iscrowd": 0, "bbox": [592, 124, 17, 44], "area": 473}, {"id": 2762018, "category_id": 1, "iscrowd": 0, "bbox": [432, 232, 39, 103], "area": 2003}, {"id": 2827296, "category_id": 1, "iscrowd": 0, "bbox": [438, 340, 83, 118], "area": 4610}, {"id": 1839886, "category_id": 1, "iscrowd": 0, "bbox": [514, 316, 51, 111], "area": 3755}, {"id": 7369067, "category_id": 1, "iscrowd": 0, "bbox": [286, 133, 2, 2], "area": 4}, {"id": 10196364, "category_id": 9, "iscrowd": 0, "bbox": [378, 85, 9, 17], "area": 81}, {"id": 7432031, "category_id": 9, "iscrowd": 0, "bbox": [51, 79, 58, 27], "area": 545}, {"id": 8749950, "category_id": 9, "iscrowd": 0, "bbox": [553, 60, 62, 49], "area": 1319}, {"id": 3420205, "category_id": 9, "iscrowd": 0, "bbox": [406, 134, 234, 316], "area": 50672}, {"id": 6182995, "category_id": 9, "iscrowd": 0, "bbox": [279, 132, 15, 11], "area": 90}, {"id": 9012092, "category_id": 155, "iscrowd": 0, "bbox": [0, 95, 640, 363], "area": 156995}, {"id": 15987697, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 107], "area": 62942}], "file_name": "000000502168.png", "image_id": 502168}, {"segments_info": [{"id": 3948103, "category_id": 7, "iscrowd": 0, "bbox": [12, 504, 380, 73], "area": 16554}, {"id": 5852768, "category_id": 7, "iscrowd": 0, "bbox": [496, 458, 102, 25], "area": 2026}, {"id": 4077879, "category_id": 7, "iscrowd": 0, "bbox": [10, 543, 264, 59], "area": 12442}, {"id": 3551057, "category_id": 7, "iscrowd": 0, "bbox": [8, 488, 564, 79], "area": 16731}, {"id": 4803939, "category_id": 147, "iscrowd": 0, "bbox": [0, 455, 612, 157], "area": 29447}, {"id": 4212838, "category_id": 185, "iscrowd": 0, "bbox": [571, 508, 30, 34], "area": 634}, {"id": 9863817, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 601, 307], "area": 128389}, {"id": 4348554, "category_id": 197, "iscrowd": 0, "bbox": [0, 112, 612, 368], "area": 135870}], "file_name": "000000502229.png", "image_id": 502229}, {"segments_info": [{"id": 8619147, "category_id": 1, "iscrowd": 0, "bbox": [193, 290, 36, 101], "area": 2142}, {"id": 3355706, "category_id": 1, "iscrowd": 0, "bbox": [304, 277, 84, 142], "area": 2727}, {"id": 9935007, "category_id": 1, "iscrowd": 0, "bbox": [141, 297, 51, 95], "area": 2444}, {"id": 6843249, "category_id": 1, "iscrowd": 0, "bbox": [169, 289, 27, 45], "area": 630}, {"id": 5263960, "category_id": 1, "iscrowd": 0, "bbox": [604, 263, 34, 120], "area": 1477}, {"id": 10987695, "category_id": 31, "iscrowd": 0, "bbox": [142, 348, 10, 17], "area": 113}, {"id": 3421755, "category_id": 31, "iscrowd": 0, "bbox": [173, 340, 12, 29], "area": 180}, {"id": 3487548, "category_id": 31, "iscrowd": 0, "bbox": [323, 322, 23, 40], "area": 314}, {"id": 5395803, "category_id": 31, "iscrowd": 0, "bbox": [349, 321, 25, 31], "area": 611}, {"id": 12105663, "category_id": 31, "iscrowd": 0, "bbox": [195, 368, 27, 25], "area": 533}, {"id": 3355962, "category_id": 112, "iscrowd": 0, "bbox": [393, 232, 230, 138], "area": 8538}, {"id": 8027523, "category_id": 130, "iscrowd": 0, "bbox": [561, 13, 54, 28], "area": 1053}, {"id": 6316904, "category_id": 151, "iscrowd": 0, "bbox": [373, 0, 267, 53], "area": 5297}, {"id": 5592669, "category_id": 161, "iscrowd": 0, "bbox": [550, 351, 66, 36], "area": 1046}, {"id": 11185075, "category_id": 171, "iscrowd": 0, "bbox": [194, 3, 446, 346], "area": 27190}, {"id": 5263961, "category_id": 175, "iscrowd": 0, "bbox": [0, 341, 633, 66], "area": 2875}, {"id": 3816513, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 627, 341], "area": 61024}, {"id": 5790304, "category_id": 184, "iscrowd": 0, "bbox": [64, 334, 89, 81], "area": 3583}, {"id": 8750989, "category_id": 191, "iscrowd": 0, "bbox": [202, 353, 438, 78], "area": 22732}, {"id": 9277078, "category_id": 197, "iscrowd": 0, "bbox": [0, 81, 224, 312], "area": 30422}, {"id": 11315891, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 531, 378], "area": 24469}], "file_name": "000000502336.png", "image_id": 502336}, {"segments_info": [{"id": 11181195, "category_id": 5, "iscrowd": 0, "bbox": [270, 87, 27, 12], "area": 167}, {"id": 7960691, "category_id": 9, "iscrowd": 0, "bbox": [271, 330, 31, 22], "area": 404}, {"id": 10127478, "category_id": 9, "iscrowd": 0, "bbox": [126, 360, 29, 10], "area": 172}, {"id": 8092531, "category_id": 9, "iscrowd": 0, "bbox": [85, 365, 9, 5], "area": 36}, {"id": 9277325, "category_id": 9, "iscrowd": 0, "bbox": [308, 346, 20, 7], "area": 122}, {"id": 11184289, "category_id": 9, "iscrowd": 0, "bbox": [219, 360, 30, 8], "area": 96}, {"id": 8027512, "category_id": 9, "iscrowd": 0, "bbox": [153, 364, 39, 6], "area": 141}, {"id": 10329756, "category_id": 9, "iscrowd": 0, "bbox": [9, 356, 31, 14], "area": 115}, {"id": 7962235, "category_id": 9, "iscrowd": 0, "bbox": [412, 330, 25, 22], "area": 452}, {"id": 6579554, "category_id": 9, "iscrowd": 0, "bbox": [387, 320, 16, 31], "area": 243}, {"id": 5000007, "category_id": 95, "iscrowd": 0, "bbox": [0, 335, 500, 40], "area": 9667}, {"id": 8486521, "category_id": 128, "iscrowd": 0, "bbox": [0, 304, 129, 48], "area": 2636}, {"id": 6509115, "category_id": 155, "iscrowd": 0, "bbox": [0, 358, 495, 17], "area": 2628}, {"id": 4146754, "category_id": 184, "iscrowd": 0, "bbox": [69, 304, 199, 52], "area": 2717}, {"id": 13017718, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 226], "area": 101481}, {"id": 4275763, "category_id": 192, "iscrowd": 0, "bbox": [0, 177, 500, 176], "area": 62863}, {"id": 7041392, "category_id": 197, "iscrowd": 0, "bbox": [127, 318, 363, 37], "area": 3394}], "file_name": "000000502347.png", "image_id": 502347}, {"segments_info": [{"id": 2699058, "category_id": 5, "iscrowd": 0, "bbox": [0, 97, 475, 209], "area": 39431}, {"id": 1588296, "category_id": 5, "iscrowd": 0, "bbox": [127, 292, 253, 112], "area": 11487}, {"id": 2568244, "category_id": 5, "iscrowd": 0, "bbox": [382, 0, 258, 421], "area": 68517}, {"id": 11975091, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 139786}], "file_name": "000000502599.png", "image_id": 502599}, {"segments_info": [{"id": 5135201, "category_id": 82, "iscrowd": 0, "bbox": [69, 84, 328, 546], "area": 169707}, {"id": 1449754, "category_id": 107, "iscrowd": 0, "bbox": [392, 328, 88, 84], "area": 6844}, {"id": 1187631, "category_id": 118, "iscrowd": 0, "bbox": [0, 542, 44, 91], "area": 3504}, {"id": 1713971, "category_id": 188, "iscrowd": 0, "bbox": [371, 0, 109, 640], "area": 42130}, {"id": 5200480, "category_id": 190, "iscrowd": 0, "bbox": [0, 622, 401, 18], "area": 2356}, {"id": 7963528, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 56496}], "file_name": "000000502732.png", "image_id": 502732}, {"segments_info": [{"id": 989739, "category_id": 1, "iscrowd": 0, "bbox": [1, 0, 479, 631], "area": 162088}, {"id": 4353957, "category_id": 1, "iscrowd": 0, "bbox": [0, 295, 291, 345], "area": 38573}, {"id": 594750, "category_id": 47, "iscrowd": 0, "bbox": [17, 30, 182, 314], "area": 36277}, {"id": 3361921, "category_id": 61, "iscrowd": 0, "bbox": [123, 128, 234, 340], "area": 59569}], "file_name": "000000502737.png", "image_id": 502737}, {"segments_info": [{"id": 3619121, "category_id": 112, "iscrowd": 0, "bbox": [215, 41, 211, 420], "area": 73280}, {"id": 11645624, "category_id": 191, "iscrowd": 0, "bbox": [0, 472, 426, 168], "area": 67492}, {"id": 6513243, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 426, 499], "area": 111335}], "file_name": "000000502910.png", "image_id": 502910}, {"segments_info": [{"id": 9732470, "category_id": 1, "iscrowd": 0, "bbox": [22, 79, 458, 554], "area": 147743}, {"id": 7626568, "category_id": 43, "iscrowd": 0, "bbox": [0, 379, 54, 250], "area": 10562}, {"id": 7159827, "category_id": 138, "iscrowd": 0, "bbox": [0, 181, 480, 293], "area": 46738}, {"id": 12884825, "category_id": 145, "iscrowd": 0, "bbox": [19, 502, 461, 138], "area": 15784}, {"id": 8549719, "category_id": 184, "iscrowd": 0, "bbox": [173, 50, 155, 47], "area": 2409}, {"id": 7892049, "category_id": 185, "iscrowd": 0, "bbox": [0, 61, 480, 452], "area": 41520}, {"id": 14797216, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 97], "area": 39004}], "file_name": "000000503755.png", "image_id": 503755}, {"segments_info": [{"id": 2782359, "category_id": 9, "iscrowd": 0, "bbox": [187, 111, 313, 147], "area": 14106}, {"id": 3311014, "category_id": 9, "iscrowd": 0, "bbox": [176, 121, 204, 103], "area": 9718}, {"id": 3368827, "category_id": 9, "iscrowd": 0, "bbox": [350, 128, 144, 47], "area": 2132}, {"id": 3699090, "category_id": 9, "iscrowd": 0, "bbox": [419, 126, 45, 28], "area": 751}, {"id": 1987180, "category_id": 154, "iscrowd": 0, "bbox": [0, 186, 500, 147], "area": 58714}, {"id": 4480363, "category_id": 155, "iscrowd": 0, "bbox": [0, 125, 415, 92], "area": 12009}, {"id": 5662324, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 170], "area": 68667}], "file_name": "000000503823.png", "image_id": 503823}, {"segments_info": [{"id": 3095091, "category_id": 10, "iscrowd": 0, "bbox": [481, 142, 58, 142], "area": 7890}, {"id": 3095086, "category_id": 10, "iscrowd": 0, "bbox": [209, 111, 68, 150], "area": 9825}, {"id": 3630699, "category_id": 184, "iscrowd": 0, "bbox": [0, 238, 466, 360], "area": 30860}, {"id": 8031629, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 598], "area": 333971}], "file_name": "000000503841.png", "image_id": 503841}, {"segments_info": [{"id": 10459039, "category_id": 1, "iscrowd": 0, "bbox": [156, 113, 9, 33], "area": 153}, {"id": 10257016, "category_id": 1, "iscrowd": 0, "bbox": [161, 111, 24, 55], "area": 900}, {"id": 9801378, "category_id": 1, "iscrowd": 0, "bbox": [249, 125, 16, 36], "area": 405}, {"id": 8418669, "category_id": 1, "iscrowd": 0, "bbox": [139, 120, 23, 69], "area": 1013}, {"id": 7298656, "category_id": 1, "iscrowd": 0, "bbox": [190, 130, 17, 26], "area": 261}, {"id": 8283228, "category_id": 1, "iscrowd": 0, "bbox": [215, 117, 18, 42], "area": 401}, {"id": 4932418, "category_id": 1, "iscrowd": 0, "bbox": [64, 118, 23, 57], "area": 780}, {"id": 8284522, "category_id": 1, "iscrowd": 0, "bbox": [355, 121, 22, 39], "area": 457}, {"id": 6768712, "category_id": 1, "iscrowd": 0, "bbox": [530, 110, 18, 36], "area": 284}, {"id": 5386026, "category_id": 27, "iscrowd": 0, "bbox": [166, 135, 4, 8], "area": 21}, {"id": 3417633, "category_id": 27, "iscrowd": 0, "bbox": [46, 180, 21, 17], "area": 270}, {"id": 2815729, "category_id": 28, "iscrowd": 0, "bbox": [0, 193, 26, 32], "area": 556}, {"id": 2614496, "category_id": 28, "iscrowd": 0, "bbox": [0, 230, 69, 59], "area": 2390}, {"id": 2215370, "category_id": 28, "iscrowd": 0, "bbox": [241, 207, 66, 43], "area": 1870}, {"id": 9300452, "category_id": 28, "iscrowd": 0, "bbox": [554, 230, 83, 68], "area": 3193}, {"id": 4908515, "category_id": 28, "iscrowd": 0, "bbox": [80, 188, 53, 43], "area": 1233}, {"id": 1691853, "category_id": 28, "iscrowd": 0, "bbox": [318, 264, 131, 91], "area": 7658}, {"id": 5536889, "category_id": 119, "iscrowd": 0, "bbox": [194, 98, 198, 44], "area": 4260}, {"id": 13482683, "category_id": 149, "iscrowd": 0, "bbox": [0, 126, 640, 44], "area": 10948}, {"id": 11846366, "category_id": 178, "iscrowd": 0, "bbox": [280, 86, 360, 51], "area": 10860}, {"id": 4215107, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 202], "area": 57520}, {"id": 7897476, "category_id": 185, "iscrowd": 0, "bbox": [31, 58, 609, 89], "area": 8909}, {"id": 12373963, "category_id": 191, "iscrowd": 0, "bbox": [0, 86, 198, 138], "area": 2041}, {"id": 5549203, "category_id": 193, "iscrowd": 0, "bbox": [0, 60, 640, 301], "area": 107758}, {"id": 10068913, "category_id": 194, "iscrowd": 0, "bbox": [0, 130, 480, 87], "area": 5267}], "file_name": "000000503855.png", "image_id": 503855}, {"segments_info": [{"id": 11906735, "category_id": 1, "iscrowd": 0, "bbox": [489, 117, 5, 6], "area": 20}, {"id": 4408174, "category_id": 1, "iscrowd": 0, "bbox": [587, 118, 11, 24], "area": 162}, {"id": 10790310, "category_id": 1, "iscrowd": 0, "bbox": [565, 124, 22, 52], "area": 359}, {"id": 10060152, "category_id": 1, "iscrowd": 0, "bbox": [563, 118, 7, 20], "area": 64}, {"id": 8877940, "category_id": 1, "iscrowd": 0, "bbox": [568, 125, 6, 8], "area": 25}, {"id": 7566749, "category_id": 1, "iscrowd": 0, "bbox": [629, 123, 11, 53], "area": 378}, {"id": 7756101, "category_id": 1, "iscrowd": 0, "bbox": [527, 125, 8, 18], "area": 95}, {"id": 11908799, "category_id": 1, "iscrowd": 0, "bbox": [586, 124, 5, 15], "area": 32}, {"id": 6840932, "category_id": 1, "iscrowd": 0, "bbox": [582, 122, 5, 15], "area": 49}, {"id": 5590859, "category_id": 1, "iscrowd": 0, "bbox": [539, 123, 6, 19], "area": 63}, {"id": 8489361, "category_id": 1, "iscrowd": 0, "bbox": [545, 125, 8, 14], "area": 78}, {"id": 8620946, "category_id": 1, "iscrowd": 0, "bbox": [556, 124, 8, 16], "area": 88}, {"id": 9208191, "category_id": 1, "iscrowd": 0, "bbox": [614, 125, 15, 47], "area": 300}, {"id": 6777196, "category_id": 1, "iscrowd": 1, "bbox": [502, 119, 108, 70], "area": 495}, {"id": 6313035, "category_id": 5, "iscrowd": 0, "bbox": [0, 49, 103, 91], "area": 4477}, {"id": 7298644, "category_id": 5, "iscrowd": 0, "bbox": [26, 44, 592, 172], "area": 42765}, {"id": 7895932, "category_id": 149, "iscrowd": 0, "bbox": [0, 145, 640, 98], "area": 30735}, {"id": 5863275, "category_id": 184, "iscrowd": 0, "bbox": [68, 24, 464, 99], "area": 13654}, {"id": 8361888, "category_id": 185, "iscrowd": 0, "bbox": [465, 129, 175, 54], "area": 1934}, {"id": 15193523, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 135], "area": 45635}, {"id": 4679017, "category_id": 193, "iscrowd": 0, "bbox": [0, 110, 589, 96], "area": 4415}, {"id": 7106930, "category_id": 197, "iscrowd": 0, "bbox": [94, 91, 546, 48], "area": 3275}], "file_name": "000000504000.png", "image_id": 504000}, {"segments_info": [{"id": 4147532, "category_id": 1, "iscrowd": 0, "bbox": [100, 76, 103, 284], "area": 12296}, {"id": 3818566, "category_id": 1, "iscrowd": 0, "bbox": [260, 88, 294, 339], "area": 41417}, {"id": 4345169, "category_id": 46, "iscrowd": 0, "bbox": [135, 192, 15, 33], "area": 257}, {"id": 1516068, "category_id": 62, "iscrowd": 0, "bbox": [484, 157, 85, 82], "area": 3799}, {"id": 1186074, "category_id": 62, "iscrowd": 0, "bbox": [546, 200, 86, 206], "area": 12506}, {"id": 5595235, "category_id": 62, "iscrowd": 0, "bbox": [321, 157, 86, 147], "area": 6348}, {"id": 2041898, "category_id": 62, "iscrowd": 0, "bbox": [41, 137, 105, 118], "area": 4516}, {"id": 1843748, "category_id": 62, "iscrowd": 0, "bbox": [523, 199, 117, 223], "area": 6362}, {"id": 6778738, "category_id": 73, "iscrowd": 0, "bbox": [249, 231, 157, 121], "area": 6900}, {"id": 6779510, "category_id": 177, "iscrowd": 0, "bbox": [219, 33, 421, 228], "area": 53609}, {"id": 3949124, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 380], "area": 42172}, {"id": 3226944, "category_id": 185, "iscrowd": 0, "bbox": [0, 153, 224, 88], "area": 4766}, {"id": 16579836, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 546, 114], "area": 28726}, {"id": 2371378, "category_id": 190, "iscrowd": 0, "bbox": [0, 304, 562, 123], "area": 23218}, {"id": 6515823, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 423, 169], "area": 11700}], "file_name": "000000504074.png", "image_id": 504074}, {"segments_info": [{"id": 5921370, "category_id": 1, "iscrowd": 0, "bbox": [43, 92, 61, 112], "area": 2268}, {"id": 5066061, "category_id": 1, "iscrowd": 0, "bbox": [400, 74, 66, 165], "area": 5572}, {"id": 10329501, "category_id": 43, "iscrowd": 0, "bbox": [100, 124, 35, 15], "area": 217}, {"id": 4276545, "category_id": 43, "iscrowd": 0, "bbox": [368, 134, 59, 20], "area": 528}, {"id": 5855577, "category_id": 128, "iscrowd": 0, "bbox": [0, 77, 209, 44], "area": 2803}, {"id": 6447714, "category_id": 149, "iscrowd": 0, "bbox": [208, 89, 292, 41], "area": 4477}, {"id": 5592405, "category_id": 184, "iscrowd": 0, "bbox": [11, 0, 472, 111], "area": 17508}, {"id": 15066597, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 111], "area": 32324}, {"id": 3750201, "category_id": 193, "iscrowd": 0, "bbox": [0, 106, 500, 214], "area": 87667}, {"id": 7368816, "category_id": 197, "iscrowd": 0, "bbox": [79, 99, 66, 24], "area": 595}], "file_name": "000000504389.png", "image_id": 504389}, {"segments_info": [{"id": 9736344, "category_id": 1, "iscrowd": 0, "bbox": [330, 150, 77, 156], "area": 7239}, {"id": 4208959, "category_id": 3, "iscrowd": 0, "bbox": [249, 188, 54, 39], "area": 453}, {"id": 5063998, "category_id": 3, "iscrowd": 0, "bbox": [81, 178, 205, 64], "area": 8923}, {"id": 8287344, "category_id": 3, "iscrowd": 0, "bbox": [492, 186, 111, 40], "area": 3110}, {"id": 6051669, "category_id": 3, "iscrowd": 0, "bbox": [213, 166, 61, 14], "area": 612}, {"id": 8810856, "category_id": 3, "iscrowd": 0, "bbox": [0, 186, 109, 44], "area": 2968}, {"id": 6074007, "category_id": 37, "iscrowd": 0, "bbox": [185, 132, 9, 7], "area": 49}, {"id": 5788747, "category_id": 43, "iscrowd": 0, "bbox": [300, 162, 49, 25], "area": 179}, {"id": 5066077, "category_id": 128, "iscrowd": 0, "bbox": [48, 65, 592, 157], "area": 36283}, {"id": 10333357, "category_id": 145, "iscrowd": 0, "bbox": [0, 241, 640, 186], "area": 108367}, {"id": 4013881, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 210], "area": 58868}, {"id": 5656396, "category_id": 185, "iscrowd": 0, "bbox": [12, 188, 262, 55], "area": 675}, {"id": 15392729, "category_id": 187, "iscrowd": 0, "bbox": [21, 0, 619, 96], "area": 22911}], "file_name": "000000504415.png", "image_id": 504415}, {"segments_info": [{"id": 6515308, "category_id": 24, "iscrowd": 0, "bbox": [291, 83, 196, 157], "area": 17817}, {"id": 6909551, "category_id": 24, "iscrowd": 0, "bbox": [1, 2, 186, 241], "area": 30975}, {"id": 3222825, "category_id": 125, "iscrowd": 0, "bbox": [0, 154, 33, 89], "area": 1209}, {"id": 987150, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 207], "area": 44449}, {"id": 2236704, "category_id": 194, "iscrowd": 0, "bbox": [142, 88, 358, 155], "area": 26440}], "file_name": "000000504439.png", "image_id": 504439}, {"segments_info": [{"id": 4740448, "category_id": 25, "iscrowd": 0, "bbox": [1, 296, 23, 37], "area": 489}, {"id": 4545904, "category_id": 25, "iscrowd": 0, "bbox": [521, 189, 87, 225], "area": 6670}, {"id": 4610923, "category_id": 25, "iscrowd": 0, "bbox": [63, 104, 187, 247], "area": 16713}, {"id": 5530220, "category_id": 184, "iscrowd": 0, "bbox": [0, 236, 640, 191], "area": 85575}, {"id": 12103591, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 307], "area": 163590}], "file_name": "000000504580.png", "image_id": 504580}, {"segments_info": [{"id": 6460071, "category_id": 1, "iscrowd": 0, "bbox": [0, 365, 154, 268], "area": 18796}, {"id": 8225689, "category_id": 1, "iscrowd": 0, "bbox": [268, 364, 114, 236], "area": 9073}, {"id": 13354942, "category_id": 34, "iscrowd": 0, "bbox": [246, 268, 64, 24], "area": 755}, {"id": 10137794, "category_id": 154, "iscrowd": 0, "bbox": [41, 425, 386, 215], "area": 62352}, {"id": 3423797, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 440], "area": 152587}, {"id": 15987179, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 153], "area": 17957}, {"id": 4221013, "category_id": 193, "iscrowd": 0, "bbox": [0, 367, 427, 94], "area": 10808}], "file_name": "000000504589.png", "image_id": 504589}, {"segments_info": [{"id": 4810347, "category_id": 24, "iscrowd": 0, "bbox": [501, 170, 139, 204], "area": 13047}, {"id": 3827562, "category_id": 24, "iscrowd": 0, "bbox": [402, 232, 103, 158], "area": 1758}, {"id": 4349800, "category_id": 24, "iscrowd": 0, "bbox": [335, 188, 186, 229], "area": 16703}, {"id": 4941167, "category_id": 24, "iscrowd": 0, "bbox": [174, 177, 181, 215], "area": 15886}, {"id": 4087637, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 270], "area": 114968}, {"id": 14476766, "category_id": 187, "iscrowd": 0, "bbox": [84, 0, 556, 207], "area": 30265}, {"id": 2785896, "category_id": 193, "iscrowd": 0, "bbox": [0, 220, 640, 206], "area": 79212}], "file_name": "000000504635.png", "image_id": 504635}, {"segments_info": [{"id": 5930132, "category_id": 48, "iscrowd": 0, "bbox": [33, 197, 607, 201], "area": 47052}, {"id": 1650789, "category_id": 61, "iscrowd": 0, "bbox": [145, 1, 432, 282], "area": 102591}, {"id": 5670576, "category_id": 196, "iscrowd": 0, "bbox": [106, 0, 452, 458], "area": 16927}], "file_name": "000000504711.png", "image_id": 504711}, {"segments_info": [{"id": 5987417, "category_id": 70, "iscrowd": 0, "bbox": [346, 494, 81, 102], "area": 6505}, {"id": 12301232, "category_id": 109, "iscrowd": 0, "bbox": [234, 0, 246, 640], "area": 28503}, {"id": 8091249, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 451, 640], "area": 136371}, {"id": 3944232, "category_id": 190, "iscrowd": 0, "bbox": [71, 575, 356, 65], "area": 11201}], "file_name": "000000505169.png", "image_id": 505169}, {"segments_info": [{"id": 8100494, "category_id": 1, "iscrowd": 0, "bbox": [200, 132, 52, 33], "area": 572}, {"id": 10730685, "category_id": 42, "iscrowd": 0, "bbox": [222, 146, 34, 24], "area": 253}, {"id": 9739652, "category_id": 155, "iscrowd": 0, "bbox": [0, 22, 444, 243], "area": 102975}, {"id": 12763839, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 444, 42], "area": 13822}], "file_name": "000000505451.png", "image_id": 505451}, {"segments_info": [{"id": 4273446, "category_id": 16, "iscrowd": 0, "bbox": [377, 101, 85, 99], "area": 4481}, {"id": 7371126, "category_id": 16, "iscrowd": 0, "bbox": [454, 51, 70, 109], "area": 2281}, {"id": 5134670, "category_id": 16, "iscrowd": 0, "bbox": [270, 90, 228, 265], "area": 21264}, {"id": 2961970, "category_id": 16, "iscrowd": 0, "bbox": [563, 20, 27, 50], "area": 689}, {"id": 794128, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 408, 260], "area": 80132}, {"id": 13358809, "category_id": 191, "iscrowd": 0, "bbox": [511, 79, 69, 20], "area": 985}, {"id": 5077866, "category_id": 193, "iscrowd": 0, "bbox": [0, 48, 640, 376], "area": 149217}], "file_name": "000000505565.png", "image_id": 505565}, {"segments_info": [{"id": 3023142, "category_id": 18, "iscrowd": 0, "bbox": [39, 1, 320, 634], "area": 88904}, {"id": 5648254, "category_id": 32, "iscrowd": 0, "bbox": [72, 274, 217, 55], "area": 7381}, {"id": 6971251, "category_id": 161, "iscrowd": 0, "bbox": [0, 0, 359, 640], "area": 50786}, {"id": 8691377, "category_id": 177, "iscrowd": 0, "bbox": [0, 45, 359, 457], "area": 52814}, {"id": 11250096, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 359, 571], "area": 29002}], "file_name": "000000505573.png", "image_id": 505573}, {"segments_info": [{"id": 12893862, "category_id": 1, "iscrowd": 0, "bbox": [34, 176, 15, 38], "area": 384}, {"id": 13418913, "category_id": 1, "iscrowd": 0, "bbox": [0, 160, 11, 50], "area": 351}, {"id": 14146007, "category_id": 1, "iscrowd": 0, "bbox": [190, 193, 24, 25], "area": 349}, {"id": 13685959, "category_id": 1, "iscrowd": 0, "bbox": [81, 165, 20, 67], "area": 708}, {"id": 5592676, "category_id": 7, "iscrowd": 0, "bbox": [0, 8, 522, 461], "area": 155411}, {"id": 6520202, "category_id": 147, "iscrowd": 0, "bbox": [195, 372, 445, 111], "area": 16384}, {"id": 15324334, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 294], "area": 105381}, {"id": 5675406, "category_id": 192, "iscrowd": 0, "bbox": [96, 192, 544, 205], "area": 15004}, {"id": 3493704, "category_id": 193, "iscrowd": 0, "bbox": [0, 449, 91, 34], "area": 1546}], "file_name": "000000505638.png", "image_id": 505638}, {"segments_info": [{"id": 4404270, "category_id": 1, "iscrowd": 0, "bbox": [118, 346, 73, 238], "area": 10021}, {"id": 5132376, "category_id": 1, "iscrowd": 0, "bbox": [200, 363, 20, 30], "area": 303}, {"id": 3683900, "category_id": 1, "iscrowd": 0, "bbox": [259, 368, 38, 128], "area": 1263}, {"id": 3879985, "category_id": 1, "iscrowd": 0, "bbox": [175, 374, 27, 40], "area": 567}, {"id": 5982601, "category_id": 1, "iscrowd": 0, "bbox": [181, 378, 109, 251], "area": 16241}, {"id": 2893349, "category_id": 1, "iscrowd": 0, "bbox": [321, 390, 18, 49], "area": 442}, {"id": 6705993, "category_id": 1, "iscrowd": 0, "bbox": [335, 364, 43, 146], "area": 2610}, {"id": 6315365, "category_id": 1, "iscrowd": 0, "bbox": [317, 379, 29, 92], "area": 253}, {"id": 6184557, "category_id": 31, "iscrowd": 0, "bbox": [284, 398, 15, 30], "area": 258}, {"id": 3293243, "category_id": 64, "iscrowd": 0, "bbox": [355, 477, 125, 163], "area": 10667}, {"id": 11645620, "category_id": 85, "iscrowd": 0, "bbox": [273, 62, 27, 37], "area": 734}, {"id": 1842980, "category_id": 171, "iscrowd": 0, "bbox": [0, 50, 448, 387], "area": 15207}, {"id": 11969686, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 426], "area": 54931}, {"id": 7961470, "category_id": 185, "iscrowd": 0, "bbox": [0, 357, 480, 283], "area": 56291}, {"id": 6580846, "category_id": 186, "iscrowd": 0, "bbox": [74, 32, 329, 293], "area": 17318}, {"id": 10789796, "category_id": 191, "iscrowd": 0, "bbox": [0, 534, 221, 106], "area": 13272}, {"id": 7501701, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 480], "area": 102226}], "file_name": "000000505789.png", "image_id": 505789}, {"segments_info": [{"id": 3487029, "category_id": 1, "iscrowd": 0, "bbox": [43, 100, 72, 161], "area": 3443}, {"id": 2697513, "category_id": 1, "iscrowd": 0, "bbox": [17, 106, 46, 148], "area": 3692}, {"id": 7105644, "category_id": 3, "iscrowd": 0, "bbox": [459, 163, 41, 42], "area": 693}, {"id": 5263440, "category_id": 10, "iscrowd": 0, "bbox": [284, 33, 23, 52], "area": 1082}, {"id": 10066329, "category_id": 10, "iscrowd": 0, "bbox": [89, 2, 29, 58], "area": 1241}, {"id": 3487038, "category_id": 10, "iscrowd": 0, "bbox": [307, 28, 22, 59], "area": 898}, {"id": 5658198, "category_id": 10, "iscrowd": 0, "bbox": [199, 74, 15, 31], "area": 311}, {"id": 8947848, "category_id": 149, "iscrowd": 0, "bbox": [0, 126, 66, 172], "area": 3699}, {"id": 4539717, "category_id": 181, "iscrowd": 0, "bbox": [352, 0, 148, 165], "area": 6457}, {"id": 7105643, "category_id": 184, "iscrowd": 0, "bbox": [0, 39, 86, 99], "area": 4089}, {"id": 16185078, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 96, 88], "area": 5271}, {"id": 9539985, "category_id": 191, "iscrowd": 0, "bbox": [0, 151, 500, 224], "area": 79070}, {"id": 9342606, "category_id": 197, "iscrowd": 0, "bbox": [11, 0, 489, 180], "area": 42694}], "file_name": "000000505942.png", "image_id": 505942}, {"segments_info": [{"id": 4276028, "category_id": 9, "iscrowd": 0, "bbox": [29, 380, 70, 25], "area": 1428}, {"id": 4013633, "category_id": 9, "iscrowd": 0, "bbox": [105, 386, 45, 27], "area": 905}, {"id": 2902908, "category_id": 85, "iscrowd": 0, "bbox": [544, 306, 10, 9], "area": 87}, {"id": 3823754, "category_id": 85, "iscrowd": 0, "bbox": [538, 306, 2, 9], "area": 16}, {"id": 2960427, "category_id": 95, "iscrowd": 0, "bbox": [167, 350, 243, 30], "area": 3721}, {"id": 5460555, "category_id": 155, "iscrowd": 0, "bbox": [0, 363, 640, 76], "area": 34871}, {"id": 13551288, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 357], "area": 180663}, {"id": 5328462, "category_id": 197, "iscrowd": 0, "bbox": [0, 30, 640, 368], "area": 58702}], "file_name": "000000506004.png", "image_id": 506004}, {"segments_info": [{"id": 4943779, "category_id": 1, "iscrowd": 0, "bbox": [310, 99, 65, 114], "area": 5707}, {"id": 3884900, "category_id": 1, "iscrowd": 0, "bbox": [71, 91, 229, 404], "area": 49445}, {"id": 3296623, "category_id": 65, "iscrowd": 0, "bbox": [3, 429, 119, 63], "area": 5999}, {"id": 6845097, "category_id": 75, "iscrowd": 0, "bbox": [154, 249, 20, 18], "area": 326}, {"id": 4083834, "category_id": 75, "iscrowd": 0, "bbox": [254, 256, 39, 32], "area": 686}, {"id": 2699067, "category_id": 93, "iscrowd": 0, "bbox": [0, 434, 327, 66], "area": 4696}, {"id": 2569551, "category_id": 112, "iscrowd": 0, "bbox": [197, 152, 154, 287], "area": 25538}, {"id": 7115948, "category_id": 130, "iscrowd": 0, "bbox": [319, 24, 31, 19], "area": 404}, {"id": 9484749, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 375, 105], "area": 31054}, {"id": 9946846, "category_id": 199, "iscrowd": 0, "bbox": [0, 61, 375, 383], "area": 34477}], "file_name": "000000506178.png", "image_id": 506178}, {"segments_info": [{"id": 8494805, "category_id": 46, "iscrowd": 0, "bbox": [282, 90, 143, 404], "area": 38888}, {"id": 13754092, "category_id": 67, "iscrowd": 0, "bbox": [12, 79, 628, 552], "area": 234098}, {"id": 13425386, "category_id": 189, "iscrowd": 0, "bbox": [0, 137, 640, 503], "area": 15824}, {"id": 8682621, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 325], "area": 120035}], "file_name": "000000506279.png", "image_id": 506279}, {"segments_info": [{"id": 1132146, "category_id": 44, "iscrowd": 0, "bbox": [47, 253, 75, 114], "area": 4766}, {"id": 1652047, "category_id": 44, "iscrowd": 0, "bbox": [34, 86, 53, 133], "area": 5497}, {"id": 1721192, "category_id": 44, "iscrowd": 0, "bbox": [3, 273, 90, 142], "area": 8082}, {"id": 1717324, "category_id": 44, "iscrowd": 0, "bbox": [99, 379, 53, 46], "area": 1456}, {"id": 2715029, "category_id": 44, "iscrowd": 0, "bbox": [1, 76, 39, 165], "area": 5119}, {"id": 3496053, "category_id": 82, "iscrowd": 0, "bbox": [237, 113, 172, 228], "area": 33314}, {"id": 211044, "category_id": 100, "iscrowd": 0, "bbox": [157, 315, 85, 53], "area": 2833}, {"id": 2250636, "category_id": 118, "iscrowd": 0, "bbox": [250, 317, 186, 102], "area": 2185}, {"id": 4284805, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 194, 425], "area": 33123}, {"id": 1394030, "category_id": 177, "iscrowd": 0, "bbox": [132, 0, 508, 425], "area": 104383}, {"id": 1190201, "category_id": 186, "iscrowd": 0, "bbox": [142, 0, 58, 35], "area": 1236}, {"id": 6655680, "category_id": 190, "iscrowd": 0, "bbox": [304, 394, 146, 31], "area": 1935}, {"id": 10203596, "category_id": 195, "iscrowd": 0, "bbox": [133, 0, 507, 405], "area": 38216}, {"id": 3826319, "category_id": 200, "iscrowd": 0, "bbox": [176, 314, 215, 111], "area": 16738}], "file_name": "000000506310.png", "image_id": 506310}, {"segments_info": [{"id": 3624284, "category_id": 1, "iscrowd": 0, "bbox": [555, 73, 6, 15], "area": 63}, {"id": 10329488, "category_id": 15, "iscrowd": 0, "bbox": [208, 156, 245, 128], "area": 19165}, {"id": 15003108, "category_id": 149, "iscrowd": 0, "bbox": [0, 69, 124, 41], "area": 1454}, {"id": 4487520, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 181], "area": 66225}, {"id": 5674876, "category_id": 193, "iscrowd": 0, "bbox": [0, 67, 640, 413], "area": 176114}, {"id": 8359319, "category_id": 194, "iscrowd": 0, "bbox": [0, 115, 640, 233], "area": 44015}], "file_name": "000000506454.png", "image_id": 506454}, {"segments_info": [{"id": 4277065, "category_id": 1, "iscrowd": 0, "bbox": [97, 177, 77, 242], "area": 9945}, {"id": 8815228, "category_id": 3, "iscrowd": 0, "bbox": [353, 290, 57, 21], "area": 694}, {"id": 3487291, "category_id": 19, "iscrowd": 0, "bbox": [566, 129, 74, 120], "area": 3917}, {"id": 4343369, "category_id": 19, "iscrowd": 0, "bbox": [168, 117, 325, 296], "area": 16940}, {"id": 3948101, "category_id": 19, "iscrowd": 0, "bbox": [185, 94, 381, 339], "area": 45601}, {"id": 8358283, "category_id": 128, "iscrowd": 0, "bbox": [0, 195, 640, 117], "area": 18285}, {"id": 9012870, "category_id": 149, "iscrowd": 0, "bbox": [0, 361, 640, 119], "area": 53206}, {"id": 8230559, "category_id": 171, "iscrowd": 0, "bbox": [0, 308, 201, 29], "area": 2096}, {"id": 3491904, "category_id": 184, "iscrowd": 0, "bbox": [0, 87, 640, 239], "area": 22337}, {"id": 16051170, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 222], "area": 96189}, {"id": 11513774, "category_id": 191, "iscrowd": 0, "bbox": [348, 339, 16, 23], "area": 73}, {"id": 9208445, "category_id": 197, "iscrowd": 0, "bbox": [591, 50, 49, 46], "area": 1406}], "file_name": "000000506656.png", "image_id": 506656}, {"segments_info": [{"id": 4408400, "category_id": 1, "iscrowd": 0, "bbox": [281, 84, 80, 288], "area": 12666}, {"id": 4145480, "category_id": 1, "iscrowd": 0, "bbox": [458, 157, 50, 114], "area": 3031}, {"id": 4211016, "category_id": 1, "iscrowd": 0, "bbox": [381, 125, 83, 181], "area": 5981}, {"id": 5460834, "category_id": 1, "iscrowd": 0, "bbox": [573, 117, 67, 220], "area": 8680}, {"id": 6579316, "category_id": 1, "iscrowd": 0, "bbox": [470, 110, 125, 256], "area": 12288}, {"id": 5330531, "category_id": 1, "iscrowd": 0, "bbox": [28, 110, 110, 267], "area": 18425}, {"id": 4803158, "category_id": 1, "iscrowd": 0, "bbox": [333, 129, 47, 190], "area": 3685}, {"id": 4932686, "category_id": 1, "iscrowd": 0, "bbox": [175, 173, 75, 158], "area": 5988}, {"id": 6184544, "category_id": 3, "iscrowd": 0, "bbox": [176, 153, 99, 118], "area": 5972}, {"id": 3485743, "category_id": 3, "iscrowd": 0, "bbox": [0, 158, 40, 32], "area": 991}, {"id": 6185063, "category_id": 3, "iscrowd": 0, "bbox": [366, 167, 24, 116], "area": 1679}, {"id": 4080719, "category_id": 15, "iscrowd": 0, "bbox": [460, 265, 42, 11], "area": 235}, {"id": 3948615, "category_id": 39, "iscrowd": 0, "bbox": [347, 268, 52, 51], "area": 336}, {"id": 2765640, "category_id": 40, "iscrowd": 0, "bbox": [334, 142, 27, 50], "area": 1080}, {"id": 3225667, "category_id": 62, "iscrowd": 0, "bbox": [0, 211, 32, 109], "area": 2349}, {"id": 5525327, "category_id": 62, "iscrowd": 0, "bbox": [138, 247, 15, 14], "area": 94}, {"id": 7116735, "category_id": 145, "iscrowd": 0, "bbox": [0, 289, 640, 138], "area": 41563}, {"id": 3027249, "category_id": 184, "iscrowd": 0, "bbox": [166, 0, 139, 140], "area": 10797}, {"id": 4410193, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 328], "area": 108840}, {"id": 4693921, "category_id": 193, "iscrowd": 0, "bbox": [0, 271, 640, 156], "area": 22872}], "file_name": "000000506707.png", "image_id": 506707}, {"segments_info": [{"id": 2643827, "category_id": 1, "iscrowd": 0, "bbox": [0, 3, 640, 469], "area": 191649}, {"id": 793123, "category_id": 62, "iscrowd": 0, "bbox": [538, 161, 102, 154], "area": 9116}, {"id": 7043711, "category_id": 77, "iscrowd": 0, "bbox": [69, 187, 143, 230], "area": 25157}, {"id": 7378085, "category_id": 84, "iscrowd": 0, "bbox": [1, 91, 261, 182], "area": 26567}, {"id": 993869, "category_id": 84, "iscrowd": 0, "bbox": [614, 165, 26, 27], "area": 523}, {"id": 1134706, "category_id": 100, "iscrowd": 0, "bbox": [514, 33, 126, 217], "area": 13637}, {"id": 4293785, "category_id": 199, "iscrowd": 0, "bbox": [196, 0, 444, 309], "area": 9304}], "file_name": "000000506933.png", "image_id": 506933}, {"segments_info": [{"id": 3684153, "category_id": 1, "iscrowd": 0, "bbox": [83, 134, 47, 142], "area": 3793}, {"id": 9013389, "category_id": 1, "iscrowd": 0, "bbox": [111, 126, 28, 111], "area": 1264}, {"id": 10656669, "category_id": 1, "iscrowd": 0, "bbox": [90, 94, 27, 63], "area": 758}, {"id": 8683906, "category_id": 1, "iscrowd": 0, "bbox": [485, 186, 66, 221], "area": 8651}, {"id": 10328476, "category_id": 1, "iscrowd": 0, "bbox": [368, 164, 64, 142], "area": 4291}, {"id": 11514810, "category_id": 1, "iscrowd": 0, "bbox": [271, 167, 81, 131], "area": 5261}, {"id": 4739158, "category_id": 40, "iscrowd": 0, "bbox": [128, 189, 13, 14], "area": 148}, {"id": 3622741, "category_id": 40, "iscrowd": 0, "bbox": [111, 127, 7, 9], "area": 51}, {"id": 4542552, "category_id": 40, "iscrowd": 0, "bbox": [421, 189, 19, 17], "area": 156}, {"id": 7572889, "category_id": 145, "iscrowd": 0, "bbox": [0, 100, 640, 326], "area": 175392}, {"id": 1844770, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 91], "area": 48274}, {"id": 2237724, "category_id": 185, "iscrowd": 0, "bbox": [0, 64, 640, 60], "area": 24053}], "file_name": "000000507015.png", "image_id": 507015}, {"segments_info": [{"id": 3224121, "category_id": 1, "iscrowd": 0, "bbox": [304, 258, 57, 209], "area": 6673}, {"id": 4537665, "category_id": 1, "iscrowd": 0, "bbox": [230, 274, 19, 80], "area": 499}, {"id": 3288879, "category_id": 1, "iscrowd": 0, "bbox": [71, 225, 68, 206], "area": 9827}, {"id": 6895653, "category_id": 1, "iscrowd": 0, "bbox": [238, 278, 36, 83], "area": 1939}, {"id": 5066331, "category_id": 1, "iscrowd": 0, "bbox": [0, 246, 25, 137], "area": 1493}, {"id": 3227482, "category_id": 1, "iscrowd": 0, "bbox": [180, 264, 45, 87], "area": 1369}, {"id": 3882307, "category_id": 1, "iscrowd": 0, "bbox": [285, 254, 46, 183], "area": 3277}, {"id": 6576722, "category_id": 1, "iscrowd": 0, "bbox": [352, 275, 23, 86], "area": 1095}, {"id": 5128765, "category_id": 1, "iscrowd": 0, "bbox": [372, 269, 39, 78], "area": 1889}, {"id": 5397088, "category_id": 1, "iscrowd": 0, "bbox": [422, 263, 37, 127], "area": 2514}, {"id": 3680826, "category_id": 1, "iscrowd": 0, "bbox": [584, 277, 56, 125], "area": 3027}, {"id": 8939867, "category_id": 1, "iscrowd": 0, "bbox": [124, 280, 28, 99], "area": 1475}, {"id": 4344673, "category_id": 1, "iscrowd": 0, "bbox": [0, 255, 66, 156], "area": 3905}, {"id": 4211016, "category_id": 1, "iscrowd": 1, "bbox": [150, 263, 94, 98], "area": 4100}, {"id": 3815221, "category_id": 2, "iscrowd": 0, "bbox": [277, 341, 23, 36], "area": 686}, {"id": 5983302, "category_id": 2, "iscrowd": 0, "bbox": [133, 315, 42, 26], "area": 298}, {"id": 5001803, "category_id": 2, "iscrowd": 0, "bbox": [0, 425, 105, 49], "area": 3791}, {"id": 6444106, "category_id": 2, "iscrowd": 0, "bbox": [428, 355, 15, 25], "area": 71}, {"id": 6379856, "category_id": 2, "iscrowd": 0, "bbox": [179, 457, 159, 23], "area": 1949}, {"id": 4998720, "category_id": 2, "iscrowd": 0, "bbox": [361, 313, 178, 122], "area": 9211}, {"id": 4013112, "category_id": 2, "iscrowd": 0, "bbox": [442, 329, 157, 87], "area": 5144}, {"id": 2236189, "category_id": 27, "iscrowd": 0, "bbox": [244, 401, 53, 69], "area": 2538}, {"id": 1446934, "category_id": 27, "iscrowd": 0, "bbox": [31, 272, 34, 50], "area": 1144}, {"id": 2762024, "category_id": 31, "iscrowd": 0, "bbox": [611, 299, 23, 43], "area": 268}, {"id": 2501681, "category_id": 31, "iscrowd": 0, "bbox": [206, 309, 20, 11], "area": 51}, {"id": 7501440, "category_id": 59, "iscrowd": 0, "bbox": [295, 303, 16, 19], "area": 150}, {"id": 2896980, "category_id": 59, "iscrowd": 0, "bbox": [121, 271, 10, 3], "area": 23}, {"id": 6837113, "category_id": 92, "iscrowd": 0, "bbox": [487, 120, 139, 175], "area": 10710}, {"id": 6512216, "category_id": 181, "iscrowd": 0, "bbox": [176, 184, 339, 100], "area": 7187}, {"id": 4868937, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 218, 113], "area": 15053}, {"id": 16381683, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 170], "area": 57274}, {"id": 6645346, "category_id": 191, "iscrowd": 0, "bbox": [0, 410, 640, 41], "area": 7513}, {"id": 3294015, "category_id": 193, "iscrowd": 0, "bbox": [0, 392, 640, 88], "area": 24167}, {"id": 8027775, "category_id": 197, "iscrowd": 0, "bbox": [0, 19, 640, 362], "area": 96474}, {"id": 4410188, "category_id": 198, "iscrowd": 0, "bbox": [584, 323, 56, 77], "area": 1229}], "file_name": "000000507037.png", "image_id": 507037}, {"segments_info": [{"id": 8034492, "category_id": 25, "iscrowd": 0, "bbox": [43, 348, 327, 252], "area": 36773}, {"id": 8694225, "category_id": 25, "iscrowd": 0, "bbox": [179, 114, 212, 364], "area": 18069}, {"id": 5334654, "category_id": 25, "iscrowd": 0, "bbox": [13, 184, 144, 398], "area": 12998}, {"id": 4739936, "category_id": 151, "iscrowd": 0, "bbox": [15, 0, 412, 121], "area": 34323}, {"id": 11257564, "category_id": 154, "iscrowd": 0, "bbox": [0, 471, 427, 142], "area": 9407}, {"id": 5662586, "category_id": 177, "iscrowd": 0, "bbox": [64, 89, 331, 500], "area": 74872}, {"id": 1385505, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 158, 289], "area": 18279}, {"id": 2896442, "category_id": 185, "iscrowd": 0, "bbox": [0, 277, 427, 363], "area": 44629}, {"id": 1842723, "category_id": 191, "iscrowd": 0, "bbox": [16, 505, 119, 43], "area": 2016}, {"id": 1187368, "category_id": 199, "iscrowd": 0, "bbox": [368, 83, 59, 412], "area": 19799}], "file_name": "000000507042.png", "image_id": 507042}, {"segments_info": [{"id": 1313804, "category_id": 47, "iscrowd": 0, "bbox": [353, 324, 18, 31], "area": 436}, {"id": 5782328, "category_id": 47, "iscrowd": 0, "bbox": [310, 323, 8, 12], "area": 78}, {"id": 1907743, "category_id": 62, "iscrowd": 0, "bbox": [48, 376, 77, 152], "area": 4502}, {"id": 5003880, "category_id": 67, "iscrowd": 0, "bbox": [45, 368, 64, 59], "area": 2225}, {"id": 2563360, "category_id": 79, "iscrowd": 0, "bbox": [347, 418, 89, 212], "area": 12164}, {"id": 1643798, "category_id": 82, "iscrowd": 0, "bbox": [4, 63, 75, 568], "area": 28726}, {"id": 3221804, "category_id": 107, "iscrowd": 0, "bbox": [263, 319, 238, 168], "area": 8952}, {"id": 2764851, "category_id": 112, "iscrowd": 0, "bbox": [55, 0, 231, 451], "area": 45949}, {"id": 1051917, "category_id": 156, "iscrowd": 0, "bbox": [319, 0, 321, 225], "area": 51338}, {"id": 1248524, "category_id": 176, "iscrowd": 0, "bbox": [358, 101, 282, 242], "area": 30907}, {"id": 262401, "category_id": 177, "iscrowd": 0, "bbox": [380, 601, 141, 39], "area": 4753}, {"id": 8430494, "category_id": 184, "iscrowd": 0, "bbox": [101, 199, 142, 134], "area": 10601}, {"id": 6254216, "category_id": 185, "iscrowd": 0, "bbox": [106, 311, 138, 97], "area": 11111}, {"id": 1512470, "category_id": 188, "iscrowd": 0, "bbox": [259, 341, 262, 264], "area": 18535}, {"id": 8229271, "category_id": 190, "iscrowd": 0, "bbox": [21, 390, 359, 250], "area": 53806}, {"id": 11987434, "category_id": 197, "iscrowd": 0, "bbox": [104, 150, 137, 117], "area": 11583}, {"id": 854538, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 389, 370], "area": 37022}], "file_name": "000000507081.png", "image_id": 507081}, {"segments_info": [{"id": 12827068, "category_id": 1, "iscrowd": 0, "bbox": [88, 1, 64, 53], "area": 2977}, {"id": 6576220, "category_id": 1, "iscrowd": 0, "bbox": [137, 1, 59, 50], "area": 1610}, {"id": 4736068, "category_id": 1, "iscrowd": 0, "bbox": [163, 1, 55, 49], "area": 1026}, {"id": 8748931, "category_id": 1, "iscrowd": 0, "bbox": [249, 232, 231, 408], "area": 54122}, {"id": 9273989, "category_id": 1, "iscrowd": 0, "bbox": [109, 95, 201, 532], "area": 51936}, {"id": 9542054, "category_id": 1, "iscrowd": 0, "bbox": [182, 0, 110, 44], "area": 1833}, {"id": 4079945, "category_id": 1, "iscrowd": 0, "bbox": [0, 202, 134, 438], "area": 42878}, {"id": 5459789, "category_id": 39, "iscrowd": 0, "bbox": [123, 269, 157, 61], "area": 2753}, {"id": 1976635, "category_id": 40, "iscrowd": 0, "bbox": [381, 434, 78, 81], "area": 3454}, {"id": 7511192, "category_id": 145, "iscrowd": 0, "bbox": [0, 135, 480, 505], "area": 78735}, {"id": 8943730, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 480, 165], "area": 53696}, {"id": 6580334, "category_id": 199, "iscrowd": 0, "bbox": [71, 103, 409, 65], "area": 9400}], "file_name": "000000507223.png", "image_id": 507223}, {"segments_info": [{"id": 8160908, "category_id": 51, "iscrowd": 0, "bbox": [69, 0, 284, 150], "area": 31661}, {"id": 6260648, "category_id": 51, "iscrowd": 0, "bbox": [0, 162, 612, 382], "area": 181234}, {"id": 6315357, "category_id": 67, "iscrowd": 0, "bbox": [0, 56, 611, 556], "area": 139132}], "file_name": "000000507235.png", "image_id": 507235}, {"segments_info": [{"id": 7042959, "category_id": 1, "iscrowd": 0, "bbox": [29, 9, 398, 466], "area": 116876}, {"id": 1854252, "category_id": 77, "iscrowd": 0, "bbox": [160, 127, 78, 50], "area": 3504}, {"id": 10009015, "category_id": 90, "iscrowd": 0, "bbox": [292, 148, 60, 42], "area": 414}, {"id": 11579803, "category_id": 109, "iscrowd": 0, "bbox": [65, 0, 483, 186], "area": 50797}, {"id": 1589357, "category_id": 112, "iscrowd": 0, "bbox": [563, 0, 77, 480], "area": 27084}, {"id": 4409692, "category_id": 168, "iscrowd": 0, "bbox": [88, 312, 298, 168], "area": 6883}, {"id": 8887458, "category_id": 176, "iscrowd": 0, "bbox": [48, 0, 533, 480], "area": 67080}, {"id": 10398890, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 594, 480], "area": 32153}], "file_name": "000000507473.png", "image_id": 507473}, {"segments_info": [{"id": 11042107, "category_id": 72, "iscrowd": 0, "bbox": [268, 20, 122, 95], "area": 11000}, {"id": 10458239, "category_id": 73, "iscrowd": 0, "bbox": [112, 30, 121, 110], "area": 10036}, {"id": 4538684, "category_id": 73, "iscrowd": 0, "bbox": [263, 24, 132, 123], "area": 4329}, {"id": 10526370, "category_id": 74, "iscrowd": 0, "bbox": [448, 296, 32, 32], "area": 816}, {"id": 5131340, "category_id": 76, "iscrowd": 0, "bbox": [232, 262, 182, 34], "area": 5523}, {"id": 9867396, "category_id": 76, "iscrowd": 0, "bbox": [118, 111, 109, 16], "area": 1131}, {"id": 2435369, "category_id": 77, "iscrowd": 0, "bbox": [133, 316, 38, 30], "area": 882}, {"id": 1908254, "category_id": 84, "iscrowd": 0, "bbox": [2, 334, 141, 95], "area": 7916}, {"id": 8487038, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 398, 308], "area": 45831}, {"id": 2899290, "category_id": 118, "iscrowd": 0, "bbox": [93, 390, 395, 90], "area": 30515}, {"id": 7240069, "category_id": 189, "iscrowd": 0, "bbox": [0, 102, 640, 378], "area": 80478}, {"id": 9277329, "category_id": 195, "iscrowd": 0, "bbox": [67, 32, 423, 307], "area": 14193}, {"id": 11252153, "category_id": 199, "iscrowd": 0, "bbox": [377, 0, 221, 328], "area": 26041}], "file_name": "000000507575.png", "image_id": 507575}, {"segments_info": [{"id": 12959169, "category_id": 1, "iscrowd": 0, "bbox": [306, 4, 33, 50], "area": 1046}, {"id": 1974302, "category_id": 1, "iscrowd": 0, "bbox": [71, 14, 22, 38], "area": 557}, {"id": 4220296, "category_id": 1, "iscrowd": 0, "bbox": [424, 0, 61, 99], "area": 3749}, {"id": 6180222, "category_id": 1, "iscrowd": 0, "bbox": [347, 14, 41, 62], "area": 794}, {"id": 5856871, "category_id": 1, "iscrowd": 0, "bbox": [167, 13, 6, 10], "area": 41}, {"id": 3490128, "category_id": 1, "iscrowd": 0, "bbox": [174, 23, 20, 30], "area": 342}, {"id": 11051427, "category_id": 1, "iscrowd": 0, "bbox": [143, 20, 9, 6], "area": 33}, {"id": 4541002, "category_id": 1, "iscrowd": 0, "bbox": [208, 15, 5, 16], "area": 58}, {"id": 6908267, "category_id": 1, "iscrowd": 0, "bbox": [201, 14, 8, 15], "area": 78}, {"id": 6314846, "category_id": 1, "iscrowd": 0, "bbox": [155, 15, 7, 18], "area": 87}, {"id": 8097175, "category_id": 1, "iscrowd": 0, "bbox": [488, 18, 12, 48], "area": 261}, {"id": 7839393, "category_id": 1, "iscrowd": 0, "bbox": [95, 19, 24, 33], "area": 460}, {"id": 7435890, "category_id": 3, "iscrowd": 0, "bbox": [212, 11, 145, 52], "area": 3564}, {"id": 5066057, "category_id": 4, "iscrowd": 0, "bbox": [373, 19, 127, 122], "area": 5642}, {"id": 6060687, "category_id": 27, "iscrowd": 0, "bbox": [358, 34, 18, 30], "area": 338}, {"id": 7500661, "category_id": 133, "iscrowd": 0, "bbox": [417, 30, 11, 17], "area": 111}, {"id": 2634287, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 251, 43], "area": 4560}, {"id": 7172978, "category_id": 191, "iscrowd": 0, "bbox": [0, 39, 500, 347], "area": 74668}, {"id": 4482643, "category_id": 193, "iscrowd": 0, "bbox": [0, 27, 229, 39], "area": 1554}, {"id": 8421245, "category_id": 195, "iscrowd": 0, "bbox": [467, 12, 9, 16], "area": 78}, {"id": 4743277, "category_id": 197, "iscrowd": 0, "bbox": [21, 0, 36, 71], "area": 1969}, {"id": 6976633, "category_id": 199, "iscrowd": 0, "bbox": [243, 0, 257, 61], "area": 5417}], "file_name": "000000507667.png", "image_id": 507667}, {"segments_info": [{"id": 4277836, "category_id": 1, "iscrowd": 0, "bbox": [564, 177, 15, 34], "area": 251}, {"id": 11447213, "category_id": 1, "iscrowd": 0, "bbox": [94, 183, 76, 193], "area": 7031}, {"id": 8550297, "category_id": 1, "iscrowd": 0, "bbox": [79, 163, 49, 158], "area": 3432}, {"id": 9669793, "category_id": 1, "iscrowd": 0, "bbox": [26, 187, 70, 204], "area": 7450}, {"id": 2566185, "category_id": 1, "iscrowd": 0, "bbox": [509, 180, 16, 36], "area": 343}, {"id": 6974064, "category_id": 1, "iscrowd": 0, "bbox": [147, 169, 59, 192], "area": 5170}, {"id": 6053739, "category_id": 1, "iscrowd": 0, "bbox": [73, 104, 56, 114], "area": 2674}, {"id": 4275533, "category_id": 1, "iscrowd": 0, "bbox": [516, 172, 64, 144], "area": 4674}, {"id": 3160908, "category_id": 3, "iscrowd": 0, "bbox": [487, 181, 17, 38], "area": 372}, {"id": 9802902, "category_id": 3, "iscrowd": 0, "bbox": [198, 178, 32, 29], "area": 509}, {"id": 6974559, "category_id": 6, "iscrowd": 0, "bbox": [2, 1, 224, 332], "area": 31704}, {"id": 10658979, "category_id": 6, "iscrowd": 0, "bbox": [227, 105, 266, 167], "area": 33881}, {"id": 2631464, "category_id": 31, "iscrowd": 0, "bbox": [550, 228, 27, 35], "area": 617}, {"id": 6972524, "category_id": 31, "iscrowd": 0, "bbox": [140, 264, 39, 61], "area": 1453}, {"id": 10844291, "category_id": 31, "iscrowd": 0, "bbox": [58, 301, 42, 47], "area": 1427}, {"id": 7172475, "category_id": 149, "iscrowd": 0, "bbox": [0, 199, 503, 189], "area": 18723}, {"id": 3422526, "category_id": 186, "iscrowd": 0, "bbox": [432, 0, 208, 146], "area": 21043}, {"id": 16053747, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 470, 217], "area": 39626}, {"id": 9542313, "category_id": 191, "iscrowd": 0, "bbox": [0, 207, 640, 218], "area": 68878}, {"id": 8096407, "category_id": 197, "iscrowd": 0, "bbox": [328, 81, 312, 256], "area": 19982}], "file_name": "000000507797.png", "image_id": 507797}, {"segments_info": [{"id": 2898755, "category_id": 70, "iscrowd": 0, "bbox": [293, 554, 98, 77], "area": 6295}, {"id": 5201510, "category_id": 81, "iscrowd": 0, "bbox": [299, 391, 91, 25], "area": 1347}, {"id": 2109496, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 43207}, {"id": 5136233, "category_id": 176, "iscrowd": 0, "bbox": [21, 61, 375, 415], "area": 100050}, {"id": 8811885, "category_id": 180, "iscrowd": 0, "bbox": [46, 76, 131, 250], "area": 29661}, {"id": 2833476, "category_id": 188, "iscrowd": 0, "bbox": [301, 405, 90, 170], "area": 12590}, {"id": 2505029, "category_id": 190, "iscrowd": 0, "bbox": [32, 610, 293, 30], "area": 5598}, {"id": 2965576, "category_id": 199, "iscrowd": 0, "bbox": [28, 0, 363, 119], "area": 31314}], "file_name": "000000507893.png", "image_id": 507893}, {"segments_info": [{"id": 12033947, "category_id": 1, "iscrowd": 0, "bbox": [362, 23, 89, 78], "area": 3368}, {"id": 9601143, "category_id": 1, "iscrowd": 0, "bbox": [179, 9, 149, 237], "area": 16240}, {"id": 6248812, "category_id": 1, "iscrowd": 0, "bbox": [31, 116, 50, 89], "area": 3272}, {"id": 12437207, "category_id": 1, "iscrowd": 0, "bbox": [161, 136, 28, 35], "area": 689}, {"id": 11581374, "category_id": 1, "iscrowd": 0, "bbox": [90, 119, 49, 67], "area": 1845}, {"id": 10390448, "category_id": 1, "iscrowd": 0, "bbox": [282, 14, 98, 139], "area": 5395}, {"id": 10918797, "category_id": 3, "iscrowd": 0, "bbox": [24, 201, 578, 187], "area": 27226}, {"id": 3493760, "category_id": 19, "iscrowd": 0, "bbox": [242, 70, 226, 397], "area": 15585}, {"id": 4673910, "category_id": 19, "iscrowd": 0, "bbox": [504, 107, 46, 121], "area": 1754}, {"id": 2629672, "category_id": 19, "iscrowd": 0, "bbox": [3, 79, 421, 361], "area": 52661}, {"id": 3949919, "category_id": 19, "iscrowd": 0, "bbox": [347, 86, 175, 367], "area": 17246}, {"id": 7178125, "category_id": 149, "iscrowd": 0, "bbox": [0, 343, 640, 55], "area": 3872}, {"id": 5670279, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 397], "area": 51589}, {"id": 9549240, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 452, 75], "area": 15487}, {"id": 6006680, "category_id": 193, "iscrowd": 0, "bbox": [0, 173, 640, 307], "area": 66433}], "file_name": "000000507975.png", "image_id": 507975}, {"segments_info": [{"id": 4148574, "category_id": 1, "iscrowd": 0, "bbox": [410, 239, 23, 91], "area": 1274}, {"id": 3945529, "category_id": 1, "iscrowd": 0, "bbox": [71, 247, 81, 63], "area": 1164}, {"id": 3485752, "category_id": 1, "iscrowd": 0, "bbox": [493, 297, 31, 36], "area": 486}, {"id": 4869481, "category_id": 9, "iscrowd": 0, "bbox": [61, 260, 368, 74], "area": 5201}, {"id": 7235685, "category_id": 155, "iscrowd": 0, "bbox": [0, 225, 640, 255], "area": 151922}, {"id": 9471619, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 233], "area": 146383}], "file_name": "000000508101.png", "image_id": 508101}, {"segments_info": [{"id": 1916261, "category_id": 1, "iscrowd": 0, "bbox": [462, 82, 29, 191], "area": 2206}, {"id": 528921, "category_id": 78, "iscrowd": 0, "bbox": [384, 125, 92, 92], "area": 6170}, {"id": 661025, "category_id": 79, "iscrowd": 0, "bbox": [380, 88, 97, 241], "area": 12455}, {"id": 1120282, "category_id": 79, "iscrowd": 0, "bbox": [111, 210, 226, 86], "area": 9738}, {"id": 2964041, "category_id": 107, "iscrowd": 0, "bbox": [0, 211, 384, 122], "area": 17908}, {"id": 802398, "category_id": 161, "iscrowd": 0, "bbox": [217, 120, 50, 48], "area": 1373}, {"id": 4608087, "category_id": 176, "iscrowd": 0, "bbox": [0, 160, 386, 96], "area": 19088}, {"id": 2184611, "category_id": 177, "iscrowd": 0, "bbox": [197, 0, 168, 23], "area": 1283}, {"id": 13102050, "category_id": 181, "iscrowd": 0, "bbox": [479, 56, 11, 28], "area": 222}, {"id": 1193599, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 486, 333], "area": 51381}, {"id": 3103368, "category_id": 190, "iscrowd": 0, "bbox": [451, 241, 49, 92], "area": 3341}, {"id": 9679046, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 248], "area": 22072}], "file_name": "000000508312.png", "image_id": 508312}, {"segments_info": [{"id": 5988198, "category_id": 1, "iscrowd": 0, "bbox": [269, 53, 154, 399], "area": 35791}, {"id": 3093568, "category_id": 1, "iscrowd": 0, "bbox": [205, 82, 100, 307], "area": 11776}, {"id": 4805211, "category_id": 2, "iscrowd": 0, "bbox": [0, 293, 351, 272], "area": 52907}, {"id": 3223191, "category_id": 47, "iscrowd": 0, "bbox": [160, 390, 17, 22], "area": 295}, {"id": 5132989, "category_id": 47, "iscrowd": 0, "bbox": [199, 127, 23, 33], "area": 606}, {"id": 10462384, "category_id": 47, "iscrowd": 0, "bbox": [9, 535, 24, 21], "area": 329}, {"id": 3755357, "category_id": 112, "iscrowd": 0, "bbox": [163, 6, 162, 308], "area": 21246}, {"id": 4541520, "category_id": 149, "iscrowd": 0, "bbox": [0, 542, 427, 98], "area": 27509}, {"id": 9679823, "category_id": 171, "iscrowd": 0, "bbox": [321, 0, 106, 336], "area": 7230}, {"id": 332074, "category_id": 190, "iscrowd": 0, "bbox": [407, 272, 20, 49], "area": 922}, {"id": 4608346, "category_id": 191, "iscrowd": 0, "bbox": [0, 297, 427, 300], "area": 39135}, {"id": 8753303, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 326, 339], "area": 43636}], "file_name": "000000508370.png", "image_id": 508370}, {"segments_info": [{"id": 5198938, "category_id": 7, "iscrowd": 0, "bbox": [0, 2, 480, 534], "area": 254326}, {"id": 5530993, "category_id": 144, "iscrowd": 0, "bbox": [0, 530, 480, 110], "area": 51079}], "file_name": "000000508482.png", "image_id": 508482}, {"segments_info": [{"id": 5530991, "category_id": 24, "iscrowd": 0, "bbox": [430, 162, 70, 82], "area": 3665}, {"id": 5136232, "category_id": 24, "iscrowd": 0, "bbox": [317, 152, 35, 40], "area": 673}, {"id": 4410449, "category_id": 24, "iscrowd": 0, "bbox": [423, 163, 17, 24], "area": 248}, {"id": 4411479, "category_id": 24, "iscrowd": 0, "bbox": [21, 138, 174, 117], "area": 10615}, {"id": 5663091, "category_id": 24, "iscrowd": 0, "bbox": [0, 158, 39, 14], "area": 412}, {"id": 5598330, "category_id": 24, "iscrowd": 0, "bbox": [597, 192, 36, 36], "area": 922}, {"id": 3293771, "category_id": 24, "iscrowd": 0, "bbox": [349, 158, 41, 34], "area": 992}, {"id": 5925749, "category_id": 24, "iscrowd": 0, "bbox": [507, 159, 119, 87], "area": 5767}, {"id": 4149595, "category_id": 24, "iscrowd": 0, "bbox": [625, 166, 15, 31], "area": 356}, {"id": 5400949, "category_id": 24, "iscrowd": 0, "bbox": [302, 173, 126, 69], "area": 5073}, {"id": 13420228, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 88], "area": 42008}, {"id": 4745335, "category_id": 192, "iscrowd": 0, "bbox": [0, 43, 640, 317], "area": 159083}], "file_name": "000000508586.png", "image_id": 508586}, {"segments_info": [{"id": 11247494, "category_id": 3, "iscrowd": 0, "bbox": [2, 252, 498, 172], "area": 82231}, {"id": 8812366, "category_id": 3, "iscrowd": 0, "bbox": [475, 239, 25, 22], "area": 367}, {"id": 10923169, "category_id": 16, "iscrowd": 0, "bbox": [150, 81, 147, 177], "area": 8602}, {"id": 10917490, "category_id": 151, "iscrowd": 0, "bbox": [0, 156, 500, 52], "area": 9829}, {"id": 4214086, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 275], "area": 97763}, {"id": 15659244, "category_id": 187, "iscrowd": 0, "bbox": [10, 0, 411, 137], "area": 6787}, {"id": 6906182, "category_id": 197, "iscrowd": 0, "bbox": [111, 144, 237, 95], "area": 2630}], "file_name": "000000508602.png", "image_id": 508602}, {"segments_info": [{"id": 2895922, "category_id": 19, "iscrowd": 0, "bbox": [128, 268, 212, 191], "area": 16884}, {"id": 4346969, "category_id": 184, "iscrowd": 0, "bbox": [0, 141, 640, 339], "area": 112327}, {"id": 15398126, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 236], "area": 116260}, {"id": 4413025, "category_id": 194, "iscrowd": 0, "bbox": [487, 358, 153, 122], "area": 12918}, {"id": 5597295, "category_id": 197, "iscrowd": 0, "bbox": [243, 69, 391, 183], "area": 12245}], "file_name": "000000508639.png", "image_id": 508639}, {"segments_info": [{"id": 1797535, "category_id": 1, "iscrowd": 0, "bbox": [364, 117, 210, 354], "area": 52610}, {"id": 2785980, "category_id": 1, "iscrowd": 0, "bbox": [31, 107, 270, 371], "area": 65523}, {"id": 3765581, "category_id": 62, "iscrowd": 0, "bbox": [320, 372, 262, 106], "area": 5713}, {"id": 5071193, "category_id": 70, "iscrowd": 0, "bbox": [313, 270, 262, 203], "area": 4980}, {"id": 3238226, "category_id": 70, "iscrowd": 0, "bbox": [62, 346, 231, 132], "area": 5206}, {"id": 5675696, "category_id": 81, "iscrowd": 0, "bbox": [468, 0, 172, 478], "area": 25162}, {"id": 8371908, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 618, 444], "area": 124085}, {"id": 5213069, "category_id": 199, "iscrowd": 0, "bbox": [0, 300, 615, 178], "area": 12568}], "file_name": "000000508730.png", "image_id": 508730}, {"segments_info": [{"id": 8552322, "category_id": 1, "iscrowd": 0, "bbox": [153, 199, 20, 38], "area": 242}, {"id": 6842745, "category_id": 1, "iscrowd": 0, "bbox": [163, 198, 24, 39], "area": 408}, {"id": 7172476, "category_id": 1, "iscrowd": 0, "bbox": [120, 201, 24, 42], "area": 392}, {"id": 8026492, "category_id": 1, "iscrowd": 0, "bbox": [24, 176, 34, 91], "area": 1878}, {"id": 3353638, "category_id": 1, "iscrowd": 0, "bbox": [522, 186, 33, 88], "area": 1540}, {"id": 790288, "category_id": 1, "iscrowd": 0, "bbox": [579, 201, 23, 45], "area": 314}, {"id": 8749696, "category_id": 1, "iscrowd": 0, "bbox": [68, 189, 31, 67], "area": 971}, {"id": 10593449, "category_id": 1, "iscrowd": 0, "bbox": [143, 202, 28, 37], "area": 380}, {"id": 8682875, "category_id": 1, "iscrowd": 0, "bbox": [133, 204, 25, 35], "area": 297}, {"id": 5592671, "category_id": 1, "iscrowd": 0, "bbox": [52, 186, 15, 47], "area": 303}, {"id": 7172258, "category_id": 1, "iscrowd": 0, "bbox": [279, 179, 10, 9], "area": 32}, {"id": 5986386, "category_id": 1, "iscrowd": 0, "bbox": [474, 191, 4, 15], "area": 52}, {"id": 7305076, "category_id": 7, "iscrowd": 0, "bbox": [183, 141, 273, 148], "area": 23768}, {"id": 4343632, "category_id": 15, "iscrowd": 0, "bbox": [105, 212, 29, 30], "area": 457}, {"id": 592136, "category_id": 31, "iscrowd": 0, "bbox": [539, 201, 12, 29], "area": 107}, {"id": 3485761, "category_id": 31, "iscrowd": 0, "bbox": [63, 213, 7, 15], "area": 69}, {"id": 12566722, "category_id": 31, "iscrowd": 0, "bbox": [81, 213, 12, 15], "area": 128}, {"id": 661019, "category_id": 85, "iscrowd": 0, "bbox": [530, 52, 110, 48], "area": 4595}, {"id": 5854031, "category_id": 92, "iscrowd": 0, "bbox": [75, 155, 103, 71], "area": 3182}, {"id": 8885416, "category_id": 95, "iscrowd": 0, "bbox": [253, 41, 168, 97], "area": 11091}, {"id": 5790808, "category_id": 144, "iscrowd": 0, "bbox": [0, 193, 640, 177], "area": 46602}, {"id": 4408642, "category_id": 147, "iscrowd": 0, "bbox": [0, 200, 451, 170], "area": 32325}, {"id": 16514042, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 466, 194], "area": 22482}, {"id": 11117993, "category_id": 195, "iscrowd": 0, "bbox": [30, 239, 16, 17], "area": 83}, {"id": 4278866, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 271], "area": 80546}, {"id": 4280936, "category_id": 199, "iscrowd": 0, "bbox": [46, 177, 104, 66], "area": 776}], "file_name": "000000508917.png", "image_id": 508917}, {"segments_info": [{"id": 4880769, "category_id": 6, "iscrowd": 0, "bbox": [8, 109, 618, 282], "area": 130111}, {"id": 9210506, "category_id": 133, "iscrowd": 0, "bbox": [595, 214, 45, 46], "area": 1120}, {"id": 6447967, "category_id": 184, "iscrowd": 0, "bbox": [0, 169, 16, 66], "area": 603}, {"id": 14208453, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 226], "area": 96199}, {"id": 1583413, "category_id": 193, "iscrowd": 0, "bbox": [0, 254, 640, 180], "area": 48048}], "file_name": "000000509008.png", "image_id": 509008}, {"segments_info": [{"id": 8221553, "category_id": 1, "iscrowd": 0, "bbox": [514, 158, 12, 41], "area": 315}, {"id": 4734811, "category_id": 1, "iscrowd": 0, "bbox": [347, 160, 14, 28], "area": 188}, {"id": 9930118, "category_id": 1, "iscrowd": 0, "bbox": [122, 152, 3, 8], "area": 20}, {"id": 2958637, "category_id": 1, "iscrowd": 0, "bbox": [634, 212, 6, 69], "area": 323}, {"id": 6376774, "category_id": 1, "iscrowd": 0, "bbox": [546, 169, 33, 84], "area": 1532}, {"id": 5986650, "category_id": 1, "iscrowd": 0, "bbox": [369, 197, 37, 50], "area": 962}, {"id": 6245439, "category_id": 1, "iscrowd": 0, "bbox": [532, 145, 9, 25], "area": 123}, {"id": 9602173, "category_id": 1, "iscrowd": 0, "bbox": [338, 188, 31, 46], "area": 925}, {"id": 4337493, "category_id": 1, "iscrowd": 0, "bbox": [199, 154, 26, 67], "area": 834}, {"id": 6708313, "category_id": 1, "iscrowd": 0, "bbox": [435, 152, 13, 42], "area": 376}, {"id": 3878962, "category_id": 1, "iscrowd": 0, "bbox": [619, 176, 21, 30], "area": 385}, {"id": 10918293, "category_id": 1, "iscrowd": 0, "bbox": [253, 169, 78, 109], "area": 5948}, {"id": 9998219, "category_id": 1, "iscrowd": 0, "bbox": [231, 158, 13, 39], "area": 234}, {"id": 9012356, "category_id": 1, "iscrowd": 1, "bbox": [85, 133, 502, 68], "area": 5304}, {"id": 11311766, "category_id": 35, "iscrowd": 0, "bbox": [608, 208, 19, 7], "area": 40}, {"id": 12759727, "category_id": 35, "iscrowd": 0, "bbox": [521, 250, 35, 12], "area": 232}, {"id": 12497322, "category_id": 35, "iscrowd": 0, "bbox": [421, 190, 36, 6], "area": 64}, {"id": 14076611, "category_id": 35, "iscrowd": 0, "bbox": [368, 219, 44, 6], "area": 73}, {"id": 12759979, "category_id": 35, "iscrowd": 0, "bbox": [324, 226, 27, 7], "area": 78}, {"id": 13090488, "category_id": 35, "iscrowd": 0, "bbox": [195, 212, 38, 15], "area": 104}, {"id": 13615288, "category_id": 35, "iscrowd": 0, "bbox": [525, 165, 23, 6], "area": 39}, {"id": 13551553, "category_id": 35, "iscrowd": 0, "bbox": [347, 235, 79, 14], "area": 369}, {"id": 15985638, "category_id": 159, "iscrowd": 0, "bbox": [0, 101, 640, 180], "area": 67425}, {"id": 6975084, "category_id": 184, "iscrowd": 0, "bbox": [0, 86, 472, 97], "area": 7426}, {"id": 16314086, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 132], "area": 70761}, {"id": 10784637, "category_id": 192, "iscrowd": 0, "bbox": [125, 113, 374, 43], "area": 7423}, {"id": 10655632, "category_id": 197, "iscrowd": 0, "bbox": [492, 88, 148, 70], "area": 7157}], "file_name": "000000509014.png", "image_id": 509014}, {"segments_info": [{"id": 2844036, "category_id": 52, "iscrowd": 0, "bbox": [385, 150, 40, 130], "area": 3713}, {"id": 4224656, "category_id": 52, "iscrowd": 0, "bbox": [421, 167, 33, 118], "area": 2521}, {"id": 2839913, "category_id": 52, "iscrowd": 0, "bbox": [372, 161, 25, 105], "area": 1014}, {"id": 4489629, "category_id": 52, "iscrowd": 0, "bbox": [426, 148, 55, 109], "area": 2290}, {"id": 2500188, "category_id": 53, "iscrowd": 0, "bbox": [229, 306, 61, 69], "area": 3233}, {"id": 2765177, "category_id": 53, "iscrowd": 0, "bbox": [280, 316, 74, 67], "area": 3732}, {"id": 3291534, "category_id": 53, "iscrowd": 0, "bbox": [327, 289, 75, 75], "area": 3382}, {"id": 1591943, "category_id": 55, "iscrowd": 0, "bbox": [165, 339, 264, 77], "area": 12583}, {"id": 3292477, "category_id": 64, "iscrowd": 0, "bbox": [3, 10, 243, 394], "area": 39946}, {"id": 1644051, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 113, 425], "area": 26812}, {"id": 1651018, "category_id": 118, "iscrowd": 0, "bbox": [477, 326, 163, 99], "area": 9517}, {"id": 1259358, "category_id": 122, "iscrowd": 0, "bbox": [150, 135, 305, 290], "area": 3664}, {"id": 1712944, "category_id": 156, "iscrowd": 0, "bbox": [349, 0, 291, 336], "area": 55951}, {"id": 3031366, "category_id": 184, "iscrowd": 0, "bbox": [187, 0, 315, 341], "area": 2916}, {"id": 5791848, "category_id": 199, "iscrowd": 0, "bbox": [97, 0, 260, 175], "area": 29106}], "file_name": "000000509131.png", "image_id": 509131}, {"segments_info": [{"id": 5914675, "category_id": 15, "iscrowd": 0, "bbox": [111, 336, 33, 27], "area": 464}, {"id": 10855836, "category_id": 149, "iscrowd": 0, "bbox": [0, 365, 640, 63], "area": 28806}, {"id": 5727073, "category_id": 184, "iscrowd": 0, "bbox": [0, 66, 170, 291], "area": 22572}, {"id": 16184561, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 597, 72], "area": 3641}, {"id": 7452574, "category_id": 193, "iscrowd": 0, "bbox": [0, 352, 611, 36], "area": 9229}, {"id": 6448765, "category_id": 197, "iscrowd": 0, "bbox": [12, 0, 628, 363], "area": 164875}, {"id": 12042165, "category_id": 199, "iscrowd": 0, "bbox": [48, 193, 592, 216], "area": 7724}], "file_name": "000000509258.png", "image_id": 509258}, {"segments_info": [{"id": 5790291, "category_id": 72, "iscrowd": 0, "bbox": [33, 202, 203, 169], "area": 33571}, {"id": 9538433, "category_id": 84, "iscrowd": 0, "bbox": [297, 119, 10, 54], "area": 372}, {"id": 5928080, "category_id": 84, "iscrowd": 0, "bbox": [278, 45, 21, 41], "area": 364}, {"id": 7643583, "category_id": 84, "iscrowd": 0, "bbox": [282, 299, 14, 45], "area": 220}, {"id": 7765124, "category_id": 84, "iscrowd": 0, "bbox": [147, 46, 20, 35], "area": 468}, {"id": 5857638, "category_id": 84, "iscrowd": 0, "bbox": [311, 121, 13, 53], "area": 597}, {"id": 4413826, "category_id": 84, "iscrowd": 0, "bbox": [131, 115, 11, 49], "area": 351}, {"id": 9086896, "category_id": 84, "iscrowd": 0, "bbox": [254, 289, 23, 55], "area": 771}, {"id": 7636612, "category_id": 84, "iscrowd": 0, "bbox": [284, 204, 14, 55], "area": 638}, {"id": 4544111, "category_id": 84, "iscrowd": 0, "bbox": [327, 360, 9, 15], "area": 63}, {"id": 8231084, "category_id": 84, "iscrowd": 0, "bbox": [242, 37, 17, 46], "area": 461}, {"id": 9937613, "category_id": 84, "iscrowd": 0, "bbox": [266, 121, 11, 51], "area": 400}, {"id": 5795709, "category_id": 84, "iscrowd": 0, "bbox": [305, 358, 6, 17], "area": 58}, {"id": 8620705, "category_id": 84, "iscrowd": 0, "bbox": [309, 288, 16, 57], "area": 149}, {"id": 6253182, "category_id": 84, "iscrowd": 1, "bbox": [51, 25, 338, 350], "area": 48863}, {"id": 2238771, "category_id": 112, "iscrowd": 0, "bbox": [405, 42, 51, 257], "area": 8697}, {"id": 1055010, "category_id": 118, "iscrowd": 0, "bbox": [400, 287, 100, 88], "area": 4259}, {"id": 3952233, "category_id": 156, "iscrowd": 0, "bbox": [50, 51, 339, 324], "area": 22430}, {"id": 5263698, "category_id": 186, "iscrowd": 0, "bbox": [419, 0, 81, 57], "area": 3039}, {"id": 1383197, "category_id": 189, "iscrowd": 0, "bbox": [0, 276, 42, 99], "area": 3101}, {"id": 9343120, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 56905}], "file_name": "000000509260.png", "image_id": 509260}, {"segments_info": [{"id": 8688282, "category_id": 1, "iscrowd": 0, "bbox": [41, 163, 53, 130], "area": 3325}, {"id": 8488322, "category_id": 1, "iscrowd": 0, "bbox": [176, 126, 37, 108], "area": 2210}, {"id": 5328488, "category_id": 1, "iscrowd": 0, "bbox": [360, 59, 121, 315], "area": 21056}, {"id": 12632511, "category_id": 18, "iscrowd": 0, "bbox": [514, 213, 75, 133], "area": 3830}, {"id": 1185860, "category_id": 34, "iscrowd": 0, "bbox": [24, 222, 26, 26], "area": 463}, {"id": 8620939, "category_id": 119, "iscrowd": 0, "bbox": [522, 115, 39, 25], "area": 559}, {"id": 3102532, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 170], "area": 84558}, {"id": 4758902, "category_id": 193, "iscrowd": 0, "bbox": [0, 117, 640, 310], "area": 155486}, {"id": 4806756, "category_id": 194, "iscrowd": 0, "bbox": [29, 54, 93, 49], "area": 1212}], "file_name": "000000509403.png", "image_id": 509403}, {"segments_info": [{"id": 2500656, "category_id": 1, "iscrowd": 0, "bbox": [298, 12, 132, 355], "area": 18718}, {"id": 4474711, "category_id": 1, "iscrowd": 0, "bbox": [99, 61, 105, 314], "area": 16047}, {"id": 7437191, "category_id": 1, "iscrowd": 0, "bbox": [1, 48, 128, 321], "area": 28944}, {"id": 10331057, "category_id": 1, "iscrowd": 0, "bbox": [151, 98, 136, 277], "area": 23896}, {"id": 5132635, "category_id": 1, "iscrowd": 0, "bbox": [52, 0, 448, 371], "area": 37638}, {"id": 6383741, "category_id": 1, "iscrowd": 0, "bbox": [245, 64, 118, 307], "area": 24638}, {"id": 8084679, "category_id": 32, "iscrowd": 0, "bbox": [89, 34, 27, 70], "area": 224}, {"id": 11708323, "category_id": 32, "iscrowd": 0, "bbox": [327, 119, 33, 56], "area": 650}, {"id": 3093047, "category_id": 44, "iscrowd": 0, "bbox": [439, 347, 58, 28], "area": 1304}, {"id": 8155258, "category_id": 44, "iscrowd": 0, "bbox": [104, 58, 11, 35], "area": 172}, {"id": 10462398, "category_id": 47, "iscrowd": 0, "bbox": [82, 277, 23, 43], "area": 349}, {"id": 2829627, "category_id": 47, "iscrowd": 0, "bbox": [144, 279, 24, 35], "area": 641}, {"id": 10466506, "category_id": 171, "iscrowd": 0, "bbox": [122, 125, 12, 20], "area": 200}, {"id": 8359041, "category_id": 184, "iscrowd": 0, "bbox": [182, 0, 318, 130], "area": 16027}, {"id": 16053749, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 354, 128], "area": 10763}, {"id": 10133922, "category_id": 191, "iscrowd": 0, "bbox": [0, 328, 161, 47], "area": 2432}], "file_name": "000000509451.png", "image_id": 509451}, {"segments_info": [{"id": 4737345, "category_id": 24, "iscrowd": 0, "bbox": [120, 129, 309, 340], "area": 52001}, {"id": 7371900, "category_id": 24, "iscrowd": 0, "bbox": [252, 197, 132, 125], "area": 2602}, {"id": 15263191, "category_id": 151, "iscrowd": 0, "bbox": [179, 29, 232, 31], "area": 4582}, {"id": 6458995, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 325], "area": 111365}, {"id": 7642252, "category_id": 193, "iscrowd": 0, "bbox": [0, 179, 640, 301], "area": 92735}, {"id": 10464950, "category_id": 198, "iscrowd": 0, "bbox": [0, 269, 580, 181], "area": 27056}, {"id": 8753001, "category_id": 199, "iscrowd": 0, "bbox": [212, 50, 192, 94], "area": 9677}], "file_name": "000000509656.png", "image_id": 509656}, {"segments_info": [{"id": 7237223, "category_id": 62, "iscrowd": 0, "bbox": [147, 157, 201, 233], "area": 32053}, {"id": 6382170, "category_id": 72, "iscrowd": 0, "bbox": [389, 226, 90, 138], "area": 8725}, {"id": 8553341, "category_id": 84, "iscrowd": 0, "bbox": [336, 338, 34, 12], "area": 315}, {"id": 8093047, "category_id": 84, "iscrowd": 0, "bbox": [328, 348, 42, 15], "area": 244}, {"id": 6119000, "category_id": 84, "iscrowd": 0, "bbox": [328, 327, 53, 15], "area": 578}, {"id": 8158583, "category_id": 84, "iscrowd": 0, "bbox": [328, 339, 45, 18], "area": 363}, {"id": 14540245, "category_id": 85, "iscrowd": 0, "bbox": [554, 217, 11, 14], "area": 122}, {"id": 11184546, "category_id": 112, "iscrowd": 0, "bbox": [19, 36, 117, 307], "area": 24649}, {"id": 5723985, "category_id": 188, "iscrowd": 0, "bbox": [328, 272, 28, 34], "area": 423}], "file_name": "000000509699.png", "image_id": 509699}, {"segments_info": [{"id": 4614021, "category_id": 16, "iscrowd": 0, "bbox": [251, 142, 184, 219], "area": 21380}, {"id": 3491931, "category_id": 16, "iscrowd": 0, "bbox": [427, 1, 212, 263], "area": 16161}, {"id": 6323093, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 234933}], "file_name": "000000509719.png", "image_id": 509719}, {"segments_info": [{"id": 3490901, "category_id": 24, "iscrowd": 0, "bbox": [4, 232, 182, 102], "area": 9198}, {"id": 3950421, "category_id": 24, "iscrowd": 0, "bbox": [103, 192, 54, 40], "area": 1489}, {"id": 3885660, "category_id": 24, "iscrowd": 0, "bbox": [171, 237, 161, 98], "area": 8350}, {"id": 4545910, "category_id": 25, "iscrowd": 0, "bbox": [339, 140, 96, 232], "area": 11861}, {"id": 3888226, "category_id": 25, "iscrowd": 0, "bbox": [261, 6, 350, 369], "area": 36288}, {"id": 7045783, "category_id": 178, "iscrowd": 0, "bbox": [100, 332, 369, 57], "area": 9411}, {"id": 3758428, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 124499}, {"id": 5863826, "category_id": 194, "iscrowd": 0, "bbox": [0, 166, 602, 262], "area": 71555}, {"id": 5203840, "category_id": 198, "iscrowd": 0, "bbox": [375, 336, 21, 18], "area": 306}], "file_name": "000000509735.png", "image_id": 509735}, {"segments_info": [{"id": 2780544, "category_id": 51, "iscrowd": 0, "bbox": [306, 559, 34, 24], "area": 646}, {"id": 5923436, "category_id": 51, "iscrowd": 0, "bbox": [495, 239, 39, 24], "area": 656}, {"id": 3160177, "category_id": 51, "iscrowd": 0, "bbox": [370, 549, 34, 25], "area": 647}, {"id": 10461093, "category_id": 63, "iscrowd": 0, "bbox": [16, 292, 606, 239], "area": 131544}, {"id": 3223340, "category_id": 84, "iscrowd": 0, "bbox": [136, 522, 68, 60], "area": 3416}, {"id": 1710365, "category_id": 84, "iscrowd": 0, "bbox": [537, 284, 18, 37], "area": 271}, {"id": 5267273, "category_id": 86, "iscrowd": 0, "bbox": [114, 219, 21, 41], "area": 502}, {"id": 5004356, "category_id": 86, "iscrowd": 0, "bbox": [134, 216, 21, 43], "area": 496}, {"id": 8687774, "category_id": 130, "iscrowd": 0, "bbox": [19, 84, 57, 56], "area": 2783}, {"id": 4020076, "category_id": 188, "iscrowd": 0, "bbox": [54, 237, 520, 82], "area": 21006}, {"id": 1583189, "category_id": 189, "iscrowd": 0, "bbox": [91, 526, 489, 114], "area": 41750}, {"id": 986897, "category_id": 190, "iscrowd": 0, "bbox": [8, 361, 615, 279], "area": 21233}, {"id": 6451833, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 381], "area": 166446}], "file_name": "000000509824.png", "image_id": 509824}, {"segments_info": [{"id": 7172469, "category_id": 1, "iscrowd": 0, "bbox": [424, 133, 115, 229], "area": 10926}, {"id": 2835574, "category_id": 11, "iscrowd": 0, "bbox": [446, 33, 8, 13], "area": 85}, {"id": 4865191, "category_id": 39, "iscrowd": 0, "bbox": [517, 92, 15, 113], "area": 569}, {"id": 3305563, "category_id": 119, "iscrowd": 0, "bbox": [0, 33, 640, 275], "area": 103182}, {"id": 6454122, "category_id": 149, "iscrowd": 0, "bbox": [156, 31, 86, 26], "area": 1369}, {"id": 2443831, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 143], "area": 50498}, {"id": 3692606, "category_id": 193, "iscrowd": 0, "bbox": [0, 17, 640, 411], "area": 107028}], "file_name": "000000510095.png", "image_id": 510095}, {"segments_info": [{"id": 5134960, "category_id": 1, "iscrowd": 0, "bbox": [96, 88, 152, 222], "area": 14693}, {"id": 2498605, "category_id": 1, "iscrowd": 0, "bbox": [175, 106, 102, 200], "area": 9089}, {"id": 3550766, "category_id": 28, "iscrowd": 0, "bbox": [212, 145, 140, 141], "area": 8567}, {"id": 3749176, "category_id": 73, "iscrowd": 0, "bbox": [459, 291, 54, 51], "area": 2036}, {"id": 2041381, "category_id": 184, "iscrowd": 0, "bbox": [184, 0, 456, 282], "area": 61304}, {"id": 16645369, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 64], "area": 20143}, {"id": 16181460, "category_id": 192, "iscrowd": 0, "bbox": [0, 50, 619, 89], "area": 22100}, {"id": 9474188, "category_id": 197, "iscrowd": 0, "bbox": [0, 101, 640, 241], "area": 38502}, {"id": 7900576, "category_id": 198, "iscrowd": 0, "bbox": [0, 178, 640, 302], "area": 129830}], "file_name": "000000510329.png", "image_id": 510329}, {"segments_info": [{"id": 6714488, "category_id": 1, "iscrowd": 0, "bbox": [353, 73, 189, 303], "area": 18488}, {"id": 4737610, "category_id": 1, "iscrowd": 0, "bbox": [140, 123, 10, 32], "area": 234}, {"id": 4803400, "category_id": 3, "iscrowd": 0, "bbox": [180, 116, 41, 35], "area": 1017}, {"id": 7707569, "category_id": 15, "iscrowd": 0, "bbox": [452, 252, 184, 163], "area": 18371}, {"id": 12572114, "category_id": 16, "iscrowd": 0, "bbox": [224, 85, 46, 82], "area": 1594}, {"id": 9939107, "category_id": 16, "iscrowd": 0, "bbox": [174, 249, 25, 34], "area": 385}, {"id": 10795448, "category_id": 16, "iscrowd": 0, "bbox": [297, 242, 27, 37], "area": 449}, {"id": 7372675, "category_id": 16, "iscrowd": 0, "bbox": [340, 228, 49, 36], "area": 605}, {"id": 7502453, "category_id": 16, "iscrowd": 0, "bbox": [144, 148, 65, 96], "area": 2771}, {"id": 10596782, "category_id": 16, "iscrowd": 0, "bbox": [267, 263, 40, 45], "area": 687}, {"id": 11848131, "category_id": 16, "iscrowd": 0, "bbox": [191, 92, 72, 56], "area": 825}, {"id": 4145215, "category_id": 16, "iscrowd": 0, "bbox": [311, 279, 48, 51], "area": 817}, {"id": 9610148, "category_id": 16, "iscrowd": 0, "bbox": [132, 255, 46, 44], "area": 749}, {"id": 9150368, "category_id": 16, "iscrowd": 0, "bbox": [271, 200, 48, 65], "area": 730}, {"id": 9740441, "category_id": 16, "iscrowd": 0, "bbox": [166, 264, 36, 50], "area": 623}, {"id": 8753548, "category_id": 16, "iscrowd": 0, "bbox": [205, 251, 39, 45], "area": 754}, {"id": 8556946, "category_id": 16, "iscrowd": 0, "bbox": [297, 218, 23, 33], "area": 467}, {"id": 6515818, "category_id": 16, "iscrowd": 1, "bbox": [55, 160, 316, 205], "area": 5686}, {"id": 8821143, "category_id": 31, "iscrowd": 0, "bbox": [473, 209, 101, 68], "area": 4815}, {"id": 6913152, "category_id": 149, "iscrowd": 0, "bbox": [165, 128, 475, 180], "area": 23189}, {"id": 9082745, "category_id": 155, "iscrowd": 0, "bbox": [0, 133, 121, 105], "area": 6337}, {"id": 13953488, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 224, 129], "area": 23042}, {"id": 4408902, "category_id": 191, "iscrowd": 0, "bbox": [33, 131, 600, 296], "area": 74271}, {"id": 12177097, "category_id": 197, "iscrowd": 0, "bbox": [175, 0, 465, 177], "area": 62752}, {"id": 4145213, "category_id": 199, "iscrowd": 0, "bbox": [0, 182, 118, 245], "area": 9527}], "file_name": "000000511076.png", "image_id": 511076}, {"segments_info": [{"id": 5263190, "category_id": 9, "iscrowd": 0, "bbox": [48, 406, 238, 149], "area": 20194}, {"id": 6578531, "category_id": 9, "iscrowd": 0, "bbox": [210, 289, 105, 19], "area": 1323}, {"id": 3289136, "category_id": 9, "iscrowd": 0, "bbox": [26, 311, 198, 48], "area": 5722}, {"id": 4933708, "category_id": 9, "iscrowd": 0, "bbox": [285, 278, 15, 5], "area": 62}, {"id": 3224116, "category_id": 95, "iscrowd": 0, "bbox": [0, 210, 427, 100], "area": 18194}, {"id": 3750459, "category_id": 155, "iscrowd": 0, "bbox": [0, 264, 427, 376], "area": 123618}, {"id": 1842721, "category_id": 184, "iscrowd": 0, "bbox": [390, 237, 37, 20], "area": 567}, {"id": 13618121, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 254], "area": 96129}, {"id": 5789527, "category_id": 197, "iscrowd": 0, "bbox": [48, 95, 379, 165], "area": 6585}, {"id": 856082, "category_id": 199, "iscrowd": 0, "bbox": [0, 274, 52, 30], "area": 562}], "file_name": "000000511321.png", "image_id": 511321}, {"segments_info": [{"id": 5527648, "category_id": 1, "iscrowd": 0, "bbox": [370, 511, 37, 88], "area": 1703}, {"id": 5266030, "category_id": 1, "iscrowd": 0, "bbox": [82, 0, 39, 49], "area": 774}, {"id": 666010, "category_id": 34, "iscrowd": 0, "bbox": [102, 54, 114, 138], "area": 11586}, {"id": 6316389, "category_id": 184, "iscrowd": 0, "bbox": [0, 68, 428, 476], "area": 99316}, {"id": 3624791, "category_id": 185, "iscrowd": 0, "bbox": [120, 388, 173, 110], "area": 3285}, {"id": 9527885, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 428, 356], "area": 81161}, {"id": 3172193, "category_id": 193, "iscrowd": 0, "bbox": [0, 402, 428, 238], "area": 70731}, {"id": 8099242, "category_id": 194, "iscrowd": 0, "bbox": [0, 387, 157, 57], "area": 2590}, {"id": 3028280, "category_id": 197, "iscrowd": 0, "bbox": [352, 489, 76, 73], "area": 2604}], "file_name": "000000511384.png", "image_id": 511384}, {"segments_info": [{"id": 6711923, "category_id": 18, "iscrowd": 0, "bbox": [12, 47, 514, 355], "area": 99354}, {"id": 7436676, "category_id": 154, "iscrowd": 0, "bbox": [0, 0, 609, 427], "area": 111044}, {"id": 8558769, "category_id": 200, "iscrowd": 0, "bbox": [407, 0, 233, 427], "area": 44122}], "file_name": "000000511398.png", "image_id": 511398}, {"segments_info": [{"id": 6508360, "category_id": 44, "iscrowd": 0, "bbox": [162, 3, 118, 189], "area": 20313}, {"id": 6769507, "category_id": 44, "iscrowd": 0, "bbox": [0, 0, 89, 173], "area": 12492}, {"id": 7249087, "category_id": 59, "iscrowd": 0, "bbox": [0, 181, 612, 423], "area": 230544}, {"id": 6840701, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 612, 305], "area": 101201}, {"id": 6056844, "category_id": 196, "iscrowd": 0, "bbox": [0, 281, 612, 331], "area": 7600}], "file_name": "000000511453.png", "image_id": 511453}, {"segments_info": [{"id": 8026239, "category_id": 1, "iscrowd": 0, "bbox": [421, 221, 24, 44], "area": 592}, {"id": 3685704, "category_id": 1, "iscrowd": 0, "bbox": [515, 224, 20, 84], "area": 789}, {"id": 5526876, "category_id": 1, "iscrowd": 0, "bbox": [397, 259, 45, 62], "area": 1401}, {"id": 2764102, "category_id": 1, "iscrowd": 0, "bbox": [243, 212, 21, 77], "area": 951}, {"id": 6051931, "category_id": 1, "iscrowd": 0, "bbox": [529, 225, 14, 71], "area": 460}, {"id": 3092026, "category_id": 1, "iscrowd": 0, "bbox": [177, 222, 19, 66], "area": 680}, {"id": 5790564, "category_id": 1, "iscrowd": 0, "bbox": [458, 227, 24, 70], "area": 994}, {"id": 3158594, "category_id": 1, "iscrowd": 0, "bbox": [301, 228, 27, 80], "area": 1372}, {"id": 7894389, "category_id": 1, "iscrowd": 0, "bbox": [314, 224, 14, 23], "area": 128}, {"id": 5067117, "category_id": 1, "iscrowd": 0, "bbox": [327, 229, 32, 29], "area": 328}, {"id": 4671309, "category_id": 1, "iscrowd": 0, "bbox": [388, 214, 29, 85], "area": 1343}, {"id": 5396571, "category_id": 8, "iscrowd": 0, "bbox": [503, 97, 44, 20], "area": 529}, {"id": 5131853, "category_id": 9, "iscrowd": 0, "bbox": [329, 115, 125, 16], "area": 1118}, {"id": 7563614, "category_id": 9, "iscrowd": 0, "bbox": [507, 96, 29, 8], "area": 143}, {"id": 4145722, "category_id": 9, "iscrowd": 0, "bbox": [1, 125, 45, 10], "area": 292}, {"id": 3025968, "category_id": 9, "iscrowd": 0, "bbox": [42, 241, 518, 37], "area": 4789}, {"id": 5264986, "category_id": 9, "iscrowd": 0, "bbox": [238, 115, 67, 16], "area": 430}, {"id": 4673363, "category_id": 27, "iscrowd": 0, "bbox": [522, 240, 16, 34], "area": 53}, {"id": 2700086, "category_id": 27, "iscrowd": 0, "bbox": [474, 240, 23, 37], "area": 530}, {"id": 1710877, "category_id": 31, "iscrowd": 0, "bbox": [521, 241, 17, 40], "area": 212}, {"id": 2894636, "category_id": 33, "iscrowd": 0, "bbox": [253, 258, 17, 20], "area": 278}, {"id": 7700883, "category_id": 33, "iscrowd": 0, "bbox": [322, 242, 31, 35], "area": 653}, {"id": 2961972, "category_id": 33, "iscrowd": 0, "bbox": [241, 255, 5, 16], "area": 63}, {"id": 3881786, "category_id": 128, "iscrowd": 0, "bbox": [15, 0, 625, 99], "area": 23469}, {"id": 5923689, "category_id": 144, "iscrowd": 0, "bbox": [611, 78, 22, 19], "area": 267}, {"id": 7962248, "category_id": 148, "iscrowd": 0, "bbox": [0, 108, 640, 202], "area": 88093}, {"id": 7502984, "category_id": 154, "iscrowd": 0, "bbox": [66, 94, 402, 38], "area": 5052}, {"id": 2369576, "category_id": 161, "iscrowd": 0, "bbox": [198, 69, 22, 21], "area": 337}, {"id": 2173221, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 557, 131], "area": 40316}, {"id": 10531004, "category_id": 191, "iscrowd": 0, "bbox": [0, 74, 640, 406], "area": 123174}, {"id": 5265761, "category_id": 194, "iscrowd": 0, "bbox": [301, 83, 339, 44], "area": 2867}], "file_name": "000000511599.png", "image_id": 511599}, {"segments_info": [{"id": 3290949, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 277, 480], "area": 50653}, {"id": 8947823, "category_id": 38, "iscrowd": 0, "bbox": [322, 70, 13, 15], "area": 111}, {"id": 10050356, "category_id": 187, "iscrowd": 0, "bbox": [40, 0, 600, 480], "area": 203458}, {"id": 6053724, "category_id": 197, "iscrowd": 0, "bbox": [0, 267, 640, 213], "area": 52479}], "file_name": "000000511647.png", "image_id": 511647}, {"segments_info": [{"id": 6979453, "category_id": 1, "iscrowd": 0, "bbox": [160, 530, 21, 57], "area": 787}, {"id": 3223076, "category_id": 1, "iscrowd": 0, "bbox": [116, 487, 41, 100], "area": 3098}, {"id": 4865843, "category_id": 3, "iscrowd": 0, "bbox": [267, 492, 29, 10], "area": 170}, {"id": 6313554, "category_id": 3, "iscrowd": 0, "bbox": [241, 493, 23, 7], "area": 106}, {"id": 11314070, "category_id": 3, "iscrowd": 0, "bbox": [149, 490, 16, 7], "area": 67}, {"id": 6330794, "category_id": 38, "iscrowd": 0, "bbox": [236, 35, 23, 3], "area": 45}, {"id": 6969282, "category_id": 38, "iscrowd": 0, "bbox": [234, 38, 25, 13], "area": 202}, {"id": 4742220, "category_id": 184, "iscrowd": 0, "bbox": [0, 455, 296, 54], "area": 6824}, {"id": 15722466, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 296, 488], "area": 141170}, {"id": 2318672, "category_id": 193, "iscrowd": 0, "bbox": [0, 490, 296, 150], "area": 36669}], "file_name": "000000511760.png", "image_id": 511760}, {"segments_info": [{"id": 2830416, "category_id": 1, "iscrowd": 0, "bbox": [215, 196, 29, 132], "area": 2462}, {"id": 986380, "category_id": 1, "iscrowd": 0, "bbox": [106, 184, 38, 138], "area": 3224}, {"id": 3094105, "category_id": 1, "iscrowd": 0, "bbox": [161, 200, 48, 137], "area": 4284}, {"id": 11511196, "category_id": 3, "iscrowd": 0, "bbox": [616, 229, 24, 51], "area": 897}, {"id": 8893089, "category_id": 3, "iscrowd": 0, "bbox": [524, 213, 82, 62], "area": 3679}, {"id": 4545389, "category_id": 7, "iscrowd": 0, "bbox": [145, 117, 380, 299], "area": 71583}, {"id": 10525580, "category_id": 128, "iscrowd": 0, "bbox": [539, 199, 101, 59], "area": 1938}, {"id": 7762030, "category_id": 144, "iscrowd": 0, "bbox": [0, 218, 640, 228], "area": 51463}, {"id": 5989739, "category_id": 147, "iscrowd": 0, "bbox": [400, 374, 240, 72], "area": 8848}, {"id": 10395550, "category_id": 149, "iscrowd": 0, "bbox": [524, 255, 116, 71], "area": 2009}, {"id": 4211268, "category_id": 151, "iscrowd": 0, "bbox": [33, 0, 362, 186], "area": 32775}, {"id": 6320501, "category_id": 184, "iscrowd": 0, "bbox": [97, 166, 88, 54], "area": 2453}, {"id": 7499369, "category_id": 185, "iscrowd": 0, "bbox": [524, 217, 116, 95], "area": 3185}, {"id": 16513520, "category_id": 187, "iscrowd": 0, "bbox": [198, 0, 442, 174], "area": 45509}, {"id": 3688781, "category_id": 191, "iscrowd": 0, "bbox": [499, 319, 141, 111], "area": 10028}, {"id": 7433833, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 401], "area": 40179}], "file_name": "000000511999.png", "image_id": 511999}, {"segments_info": [{"id": 6255221, "category_id": 86, "iscrowd": 0, "bbox": [308, 293, 226, 176], "area": 31777}, {"id": 2651256, "category_id": 119, "iscrowd": 0, "bbox": [128, 8, 486, 319], "area": 81388}, {"id": 7590617, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 640, 476], "area": 191302}], "file_name": "000000512194.png", "image_id": 512194}, {"segments_info": [{"id": 13551813, "category_id": 85, "iscrowd": 0, "bbox": [295, 325, 126, 112], "area": 11008}, {"id": 5855846, "category_id": 128, "iscrowd": 0, "bbox": [0, 175, 342, 465], "area": 117183}, {"id": 5522762, "category_id": 184, "iscrowd": 0, "bbox": [231, 557, 249, 83], "area": 8928}, {"id": 13217691, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 636], "area": 145496}], "file_name": "000000512248.png", "image_id": 512248}, {"segments_info": [{"id": 2636358, "category_id": 44, "iscrowd": 0, "bbox": [207, 240, 23, 13], "area": 259}, {"id": 3557199, "category_id": 44, "iscrowd": 0, "bbox": [158, 240, 25, 18], "area": 394}, {"id": 1515639, "category_id": 44, "iscrowd": 0, "bbox": [121, 237, 37, 23], "area": 653}, {"id": 5199693, "category_id": 44, "iscrowd": 0, "bbox": [221, 397, 39, 28], "area": 666}, {"id": 10071757, "category_id": 44, "iscrowd": 0, "bbox": [314, 120, 19, 115], "area": 1344}, {"id": 3095107, "category_id": 44, "iscrowd": 0, "bbox": [230, 236, 27, 21], "area": 444}, {"id": 10137056, "category_id": 44, "iscrowd": 0, "bbox": [333, 359, 26, 72], "area": 1292}, {"id": 3358539, "category_id": 44, "iscrowd": 0, "bbox": [258, 234, 31, 21], "area": 535}, {"id": 4272421, "category_id": 44, "iscrowd": 0, "bbox": [152, 342, 28, 33], "area": 744}, {"id": 9361386, "category_id": 44, "iscrowd": 0, "bbox": [328, 107, 37, 121], "area": 3361}, {"id": 2110524, "category_id": 44, "iscrowd": 0, "bbox": [183, 239, 24, 19], "area": 355}, {"id": 3232863, "category_id": 44, "iscrowd": 0, "bbox": [156, 172, 33, 47], "area": 1375}, {"id": 6911603, "category_id": 44, "iscrowd": 0, "bbox": [303, 432, 30, 97], "area": 935}, {"id": 9937578, "category_id": 82, "iscrowd": 0, "bbox": [90, 0, 336, 640], "area": 157140}, {"id": 9938083, "category_id": 156, "iscrowd": 0, "bbox": [0, 186, 109, 406], "area": 35445}, {"id": 663095, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 19, 48], "area": 681}, {"id": 14740464, "category_id": 190, "iscrowd": 0, "bbox": [0, 553, 366, 87], "area": 22936}, {"id": 2769491, "category_id": 199, "iscrowd": 0, "bbox": [9, 0, 347, 49], "area": 8708}], "file_name": "000000512330.png", "image_id": 512330}, {"segments_info": [{"id": 3554645, "category_id": 64, "iscrowd": 0, "bbox": [219, 109, 310, 495], "area": 47929}, {"id": 5656945, "category_id": 84, "iscrowd": 0, "bbox": [173, 367, 172, 209], "area": 29668}, {"id": 9274520, "category_id": 86, "iscrowd": 0, "bbox": [352, 361, 177, 238], "area": 32844}, {"id": 1718651, "category_id": 177, "iscrowd": 0, "bbox": [223, 0, 306, 577], "area": 68430}], "file_name": "000000512403.png", "image_id": 512403}, {"segments_info": [{"id": 10467543, "category_id": 44, "iscrowd": 0, "bbox": [81, 157, 53, 137], "area": 5538}, {"id": 3615308, "category_id": 50, "iscrowd": 0, "bbox": [397, 290, 24, 29], "area": 139}, {"id": 5000059, "category_id": 51, "iscrowd": 0, "bbox": [317, 298, 108, 59], "area": 4761}, {"id": 4467245, "category_id": 63, "iscrowd": 0, "bbox": [483, 183, 155, 207], "area": 21877}, {"id": 2430772, "category_id": 81, "iscrowd": 0, "bbox": [138, 256, 261, 65], "area": 10443}, {"id": 2102824, "category_id": 81, "iscrowd": 0, "bbox": [57, 299, 276, 107], "area": 18740}, {"id": 7239862, "category_id": 100, "iscrowd": 0, "bbox": [384, 136, 95, 163], "area": 11605}, {"id": 3157059, "category_id": 156, "iscrowd": 0, "bbox": [422, 321, 218, 105], "area": 9823}, {"id": 13100021, "category_id": 177, "iscrowd": 0, "bbox": [48, 152, 26, 105], "area": 785}, {"id": 12827337, "category_id": 181, "iscrowd": 0, "bbox": [613, 39, 27, 132], "area": 2519}, {"id": 7301512, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 296], "area": 50161}], "file_name": "000000512476.png", "image_id": 512476}, {"segments_info": [{"id": 1512725, "category_id": 1, "iscrowd": 0, "bbox": [97, 264, 6, 21], "area": 74}, {"id": 5390134, "category_id": 1, "iscrowd": 0, "bbox": [123, 244, 6, 18], "area": 68}, {"id": 3747873, "category_id": 1, "iscrowd": 0, "bbox": [412, 304, 8, 12], "area": 60}, {"id": 5065541, "category_id": 3, "iscrowd": 0, "bbox": [267, 220, 12, 6], "area": 51}, {"id": 10196881, "category_id": 3, "iscrowd": 0, "bbox": [237, 215, 8, 6], "area": 36}, {"id": 5061676, "category_id": 3, "iscrowd": 0, "bbox": [255, 255, 23, 18], "area": 328}, {"id": 12565169, "category_id": 3, "iscrowd": 0, "bbox": [235, 212, 6, 5], "area": 23}, {"id": 5458497, "category_id": 3, "iscrowd": 0, "bbox": [123, 286, 38, 34], "area": 976}, {"id": 12172476, "category_id": 3, "iscrowd": 0, "bbox": [198, 217, 17, 8], "area": 101}, {"id": 6510922, "category_id": 6, "iscrowd": 0, "bbox": [381, 277, 71, 70], "area": 4171}, {"id": 7630175, "category_id": 8, "iscrowd": 0, "bbox": [120, 339, 56, 60], "area": 2871}, {"id": 10398132, "category_id": 10, "iscrowd": 0, "bbox": [262, 197, 7, 3], "area": 17}, {"id": 3555376, "category_id": 10, "iscrowd": 0, "bbox": [406, 243, 9, 6], "area": 45}, {"id": 2383734, "category_id": 10, "iscrowd": 0, "bbox": [294, 396, 8, 22], "area": 164}, {"id": 1648418, "category_id": 10, "iscrowd": 0, "bbox": [166, 213, 5, 16], "area": 59}, {"id": 1643284, "category_id": 10, "iscrowd": 0, "bbox": [36, 289, 10, 20], "area": 159}, {"id": 1512471, "category_id": 10, "iscrowd": 0, "bbox": [148, 231, 31, 9], "area": 234}, {"id": 5984581, "category_id": 149, "iscrowd": 0, "bbox": [50, 206, 590, 218], "area": 61289}, {"id": 1647905, "category_id": 184, "iscrowd": 0, "bbox": [46, 51, 594, 291], "area": 39216}, {"id": 16444880, "category_id": 187, "iscrowd": 0, "bbox": [65, 0, 300, 114], "area": 18789}, {"id": 4143928, "category_id": 191, "iscrowd": 0, "bbox": [0, 225, 640, 199], "area": 24086}, {"id": 9606033, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 339], "area": 112863}], "file_name": "000000512564.png", "image_id": 512564}, {"segments_info": [{"id": 1452871, "category_id": 21, "iscrowd": 0, "bbox": [407, 255, 96, 146], "area": 9253}, {"id": 12892343, "category_id": 166, "iscrowd": 0, "bbox": [131, 192, 144, 67], "area": 4729}, {"id": 2377024, "category_id": 184, "iscrowd": 0, "bbox": [118, 0, 522, 341], "area": 115408}, {"id": 13220271, "category_id": 187, "iscrowd": 0, "bbox": [112, 0, 450, 24], "area": 970}, {"id": 9931132, "category_id": 192, "iscrowd": 0, "bbox": [117, 0, 523, 120], "area": 6333}, {"id": 4884372, "category_id": 193, "iscrowd": 0, "bbox": [0, 233, 640, 194], "area": 96483}, {"id": 5721680, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 253], "area": 28947}, {"id": 6183268, "category_id": 199, "iscrowd": 0, "bbox": [140, 185, 191, 74], "area": 1392}], "file_name": "000000512648.png", "image_id": 512648}, {"segments_info": [{"id": 6117475, "category_id": 1, "iscrowd": 0, "bbox": [168, 55, 192, 367], "area": 39598}, {"id": 3684671, "category_id": 1, "iscrowd": 0, "bbox": [399, 193, 90, 234], "area": 13575}, {"id": 2435372, "category_id": 1, "iscrowd": 0, "bbox": [0, 268, 201, 152], "area": 15278}, {"id": 2860497, "category_id": 42, "iscrowd": 0, "bbox": [199, 159, 337, 69], "area": 10146}, {"id": 1974349, "category_id": 63, "iscrowd": 0, "bbox": [339, 310, 283, 109], "area": 15855}, {"id": 13817820, "category_id": 75, "iscrowd": 0, "bbox": [158, 88, 21, 15], "area": 181}, {"id": 12962772, "category_id": 75, "iscrowd": 0, "bbox": [419, 224, 11, 34], "area": 94}, {"id": 11910344, "category_id": 75, "iscrowd": 0, "bbox": [201, 55, 32, 18], "area": 307}, {"id": 3556693, "category_id": 85, "iscrowd": 0, "bbox": [78, 240, 26, 27], "area": 667}, {"id": 5134432, "category_id": 85, "iscrowd": 0, "bbox": [588, 313, 49, 30], "area": 801}, {"id": 6450059, "category_id": 93, "iscrowd": 0, "bbox": [187, 253, 325, 119], "area": 1468}, {"id": 5597821, "category_id": 130, "iscrowd": 0, "bbox": [0, 203, 32, 51], "area": 1103}, {"id": 7961716, "category_id": 141, "iscrowd": 0, "bbox": [109, 335, 256, 80], "area": 5649}, {"id": 8820389, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 107], "area": 55746}, {"id": 9348278, "category_id": 199, "iscrowd": 0, "bbox": [0, 87, 640, 264], "area": 92046}], "file_name": "000000512657.png", "image_id": 512657}, {"segments_info": [{"id": 2103323, "category_id": 1, "iscrowd": 0, "bbox": [17, 20, 141, 303], "area": 21007}, {"id": 4539211, "category_id": 1, "iscrowd": 0, "bbox": [139, 17, 308, 280], "area": 29046}, {"id": 2304316, "category_id": 40, "iscrowd": 0, "bbox": [133, 20, 102, 73], "area": 5676}], "file_name": "000000512776.png", "image_id": 512776}, {"segments_info": [{"id": 4872030, "category_id": 1, "iscrowd": 0, "bbox": [143, 150, 146, 376], "area": 25756}, {"id": 5792360, "category_id": 1, "iscrowd": 0, "bbox": [62, 78, 53, 154], "area": 3930}, {"id": 4212039, "category_id": 18, "iscrowd": 0, "bbox": [284, 291, 167, 129], "area": 13355}, {"id": 4540487, "category_id": 18, "iscrowd": 0, "bbox": [65, 276, 107, 134], "area": 6600}, {"id": 2893713, "category_id": 28, "iscrowd": 0, "bbox": [108, 45, 198, 204], "area": 26321}, {"id": 3488060, "category_id": 31, "iscrowd": 0, "bbox": [207, 229, 77, 122], "area": 2443}, {"id": 4935760, "category_id": 31, "iscrowd": 0, "bbox": [81, 116, 27, 63], "area": 832}, {"id": 11579824, "category_id": 159, "iscrowd": 0, "bbox": [0, 207, 480, 433], "area": 141146}, {"id": 5529960, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 480, 302], "area": 85887}], "file_name": "000000512836.png", "image_id": 512836}, {"segments_info": [{"id": 4281753, "category_id": 1, "iscrowd": 0, "bbox": [33, 90, 302, 395], "area": 69154}, {"id": 2373996, "category_id": 1, "iscrowd": 0, "bbox": [287, 60, 306, 479], "area": 80172}, {"id": 6137564, "category_id": 50, "iscrowd": 0, "bbox": [336, 443, 64, 130], "area": 3708}, {"id": 4562384, "category_id": 51, "iscrowd": 0, "bbox": [17, 539, 104, 54], "area": 4567}, {"id": 1389392, "category_id": 51, "iscrowd": 0, "bbox": [174, 463, 267, 142], "area": 26228}, {"id": 2439247, "category_id": 79, "iscrowd": 0, "bbox": [20, 72, 47, 109], "area": 4634}, {"id": 1321050, "category_id": 79, "iscrowd": 0, "bbox": [19, 181, 52, 62], "area": 2888}, {"id": 10203832, "category_id": 112, "iscrowd": 0, "bbox": [356, 30, 137, 205], "area": 14399}, {"id": 5345240, "category_id": 118, "iscrowd": 0, "bbox": [266, 288, 69, 177], "area": 2248}, {"id": 925809, "category_id": 188, "iscrowd": 0, "bbox": [18, 0, 594, 314], "area": 51701}, {"id": 1781585, "category_id": 189, "iscrowd": 0, "bbox": [0, 226, 116, 291], "area": 11786}, {"id": 9749981, "category_id": 199, "iscrowd": 0, "bbox": [284, 19, 230, 272], "area": 20396}], "file_name": "000000512929.png", "image_id": 512929}, {"segments_info": [{"id": 2566182, "category_id": 1, "iscrowd": 0, "bbox": [434, 124, 62, 217], "area": 7429}, {"id": 5005409, "category_id": 42, "iscrowd": 0, "bbox": [392, 176, 169, 62], "area": 4679}, {"id": 6911859, "category_id": 154, "iscrowd": 0, "bbox": [142, 139, 498, 341], "area": 83593}, {"id": 15921642, "category_id": 155, "iscrowd": 0, "bbox": [120, 54, 520, 117], "area": 45022}, {"id": 16645108, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 77], "area": 34675}, {"id": 2502967, "category_id": 193, "iscrowd": 0, "bbox": [0, 15, 366, 465], "area": 93705}, {"id": 8092017, "category_id": 198, "iscrowd": 0, "bbox": [125, 57, 206, 55], "area": 2839}], "file_name": "000000512985.png", "image_id": 512985}, {"segments_info": [{"id": 5589849, "category_id": 1, "iscrowd": 0, "bbox": [4, 1, 379, 255], "area": 36191}, {"id": 1117709, "category_id": 1, "iscrowd": 0, "bbox": [570, 0, 70, 181], "area": 9799}, {"id": 2367262, "category_id": 1, "iscrowd": 0, "bbox": [376, 2, 216, 158], "area": 21235}, {"id": 3221800, "category_id": 46, "iscrowd": 0, "bbox": [242, 23, 84, 102], "area": 5644}, {"id": 5984587, "category_id": 46, "iscrowd": 0, "bbox": [469, 129, 171, 351], "area": 28224}, {"id": 5325631, "category_id": 46, "iscrowd": 0, "bbox": [485, 47, 110, 216], "area": 6684}, {"id": 4274753, "category_id": 46, "iscrowd": 0, "bbox": [0, 141, 130, 332], "area": 26821}, {"id": 5725279, "category_id": 59, "iscrowd": 0, "bbox": [173, 218, 229, 108], "area": 19528}, {"id": 8750738, "category_id": 62, "iscrowd": 0, "bbox": [69, 106, 25, 22], "area": 324}, {"id": 5859182, "category_id": 67, "iscrowd": 0, "bbox": [64, 154, 482, 320], "area": 95420}, {"id": 1052689, "category_id": 171, "iscrowd": 0, "bbox": [34, 0, 310, 205], "area": 16778}, {"id": 4873315, "category_id": 189, "iscrowd": 0, "bbox": [0, 237, 640, 243], "area": 17161}, {"id": 1842460, "category_id": 190, "iscrowd": 0, "bbox": [565, 107, 18, 23], "area": 234}, {"id": 3484770, "category_id": 195, "iscrowd": 0, "bbox": [572, 358, 68, 45], "area": 2495}, {"id": 1645340, "category_id": 199, "iscrowd": 0, "bbox": [342, 0, 149, 58], "area": 2243}], "file_name": "000000513041.png", "image_id": 513041}, {"segments_info": [{"id": 5657161, "category_id": 3, "iscrowd": 0, "bbox": [598, 282, 19, 10], "area": 142}, {"id": 5394758, "category_id": 3, "iscrowd": 0, "bbox": [522, 280, 12, 8], "area": 75}, {"id": 7039324, "category_id": 3, "iscrowd": 0, "bbox": [344, 280, 12, 7], "area": 49}, {"id": 7565159, "category_id": 3, "iscrowd": 0, "bbox": [574, 282, 8, 6], "area": 37}, {"id": 4341559, "category_id": 3, "iscrowd": 0, "bbox": [508, 281, 6, 8], "area": 33}, {"id": 2498327, "category_id": 3, "iscrowd": 0, "bbox": [469, 284, 12, 4], "area": 42}, {"id": 3748908, "category_id": 3, "iscrowd": 0, "bbox": [461, 280, 18, 7], "area": 80}, {"id": 6249812, "category_id": 3, "iscrowd": 0, "bbox": [492, 281, 18, 10], "area": 132}, {"id": 4736051, "category_id": 3, "iscrowd": 0, "bbox": [374, 282, 13, 5], "area": 46}, {"id": 9143931, "category_id": 3, "iscrowd": 0, "bbox": [557, 284, 13, 6], "area": 40}, {"id": 5789258, "category_id": 3, "iscrowd": 0, "bbox": [307, 278, 25, 10], "area": 162}, {"id": 4079416, "category_id": 8, "iscrowd": 0, "bbox": [384, 279, 21, 11], "area": 135}, {"id": 5196869, "category_id": 9, "iscrowd": 0, "bbox": [257, 289, 40, 10], "area": 230}, {"id": 4275246, "category_id": 9, "iscrowd": 0, "bbox": [68, 237, 206, 62], "area": 9520}, {"id": 7036227, "category_id": 155, "iscrowd": 0, "bbox": [0, 288, 640, 135], "area": 77690}, {"id": 2040860, "category_id": 184, "iscrowd": 0, "bbox": [0, 185, 640, 67], "area": 23310}, {"id": 3355178, "category_id": 185, "iscrowd": 0, "bbox": [0, 271, 640, 36], "area": 7424}, {"id": 12363135, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 208], "area": 124675}, {"id": 4211001, "category_id": 197, "iscrowd": 0, "bbox": [0, 218, 640, 76], "area": 26688}], "file_name": "000000513181.png", "image_id": 513181}, {"segments_info": [{"id": 794951, "category_id": 1, "iscrowd": 0, "bbox": [0, 79, 222, 137], "area": 16630}, {"id": 6648708, "category_id": 44, "iscrowd": 0, "bbox": [479, 99, 54, 177], "area": 6767}, {"id": 3950169, "category_id": 44, "iscrowd": 0, "bbox": [548, 94, 67, 247], "area": 12518}, {"id": 5068390, "category_id": 49, "iscrowd": 0, "bbox": [323, 373, 317, 64], "area": 3938}, {"id": 3104408, "category_id": 59, "iscrowd": 0, "bbox": [0, 332, 221, 68], "area": 11737}, {"id": 2510986, "category_id": 59, "iscrowd": 0, "bbox": [0, 386, 231, 58], "area": 9385}, {"id": 2507619, "category_id": 67, "iscrowd": 0, "bbox": [11, 201, 265, 110], "area": 16142}, {"id": 2043201, "category_id": 67, "iscrowd": 0, "bbox": [420, 409, 220, 104], "area": 11003}, {"id": 1975861, "category_id": 189, "iscrowd": 0, "bbox": [0, 291, 640, 229], "area": 17531}, {"id": 11574161, "category_id": 195, "iscrowd": 0, "bbox": [284, 70, 277, 266], "area": 20093}, {"id": 4876950, "category_id": 196, "iscrowd": 0, "bbox": [0, 250, 637, 194], "area": 26477}], "file_name": "000000513283.png", "image_id": 513283}, {"segments_info": [{"id": 2303801, "category_id": 23, "iscrowd": 0, "bbox": [8, 31, 473, 370], "area": 91281}, {"id": 6517894, "category_id": 178, "iscrowd": 0, "bbox": [96, 368, 544, 57], "area": 10776}, {"id": 5075072, "category_id": 184, "iscrowd": 0, "bbox": [0, 32, 132, 321], "area": 15523}, {"id": 5732989, "category_id": 193, "iscrowd": 0, "bbox": [107, 29, 533, 231], "area": 32998}, {"id": 8488850, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 120847}], "file_name": "000000513484.png", "image_id": 513484}, {"segments_info": [{"id": 4338738, "category_id": 1, "iscrowd": 0, "bbox": [292, 14, 213, 322], "area": 22329}, {"id": 7888721, "category_id": 42, "iscrowd": 0, "bbox": [147, 295, 309, 86], "area": 5687}, {"id": 8945017, "category_id": 155, "iscrowd": 0, "bbox": [0, 60, 640, 365], "area": 184071}, {"id": 14274764, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 146], "area": 59492}], "file_name": "000000513524.png", "image_id": 513524}, {"segments_info": [{"id": 3690067, "category_id": 1, "iscrowd": 0, "bbox": [282, 126, 17, 45], "area": 310}, {"id": 12038828, "category_id": 1, "iscrowd": 0, "bbox": [299, 110, 73, 231], "area": 6960}, {"id": 11510951, "category_id": 1, "iscrowd": 0, "bbox": [548, 108, 44, 85], "area": 1835}, {"id": 5397122, "category_id": 1, "iscrowd": 0, "bbox": [325, 3, 290, 472], "area": 91175}, {"id": 6770759, "category_id": 1, "iscrowd": 0, "bbox": [590, 124, 50, 181], "area": 4815}, {"id": 7898026, "category_id": 1, "iscrowd": 0, "bbox": [630, 108, 10, 23], "area": 152}, {"id": 7696754, "category_id": 1, "iscrowd": 0, "bbox": [579, 95, 30, 101], "area": 1714}, {"id": 12039098, "category_id": 1, "iscrowd": 0, "bbox": [289, 100, 40, 113], "area": 1730}, {"id": 6386056, "category_id": 1, "iscrowd": 0, "bbox": [24, 77, 325, 398], "area": 81774}, {"id": 1524840, "category_id": 3, "iscrowd": 0, "bbox": [1, 151, 23, 29], "area": 459}, {"id": 10655064, "category_id": 31, "iscrowd": 0, "bbox": [136, 278, 168, 196], "area": 2464}, {"id": 2104858, "category_id": 31, "iscrowd": 0, "bbox": [544, 319, 84, 108], "area": 4344}, {"id": 10406382, "category_id": 58, "iscrowd": 0, "bbox": [125, 281, 102, 68], "area": 3207}, {"id": 10865910, "category_id": 58, "iscrowd": 0, "bbox": [446, 155, 116, 53], "area": 2645}, {"id": 8943978, "category_id": 149, "iscrowd": 0, "bbox": [0, 165, 640, 152], "area": 9585}, {"id": 10128249, "category_id": 191, "iscrowd": 0, "bbox": [0, 247, 640, 233], "area": 20802}, {"id": 5001307, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 186], "area": 67495}], "file_name": "000000513567.png", "image_id": 513567}, {"segments_info": [{"id": 5984644, "category_id": 1, "iscrowd": 0, "bbox": [146, 285, 66, 89], "area": 2069}, {"id": 3814448, "category_id": 4, "iscrowd": 0, "bbox": [108, 309, 140, 88], "area": 6450}, {"id": 5590636, "category_id": 5, "iscrowd": 0, "bbox": [129, 114, 377, 208], "area": 37133}, {"id": 10263448, "category_id": 149, "iscrowd": 0, "bbox": [0, 390, 640, 22], "area": 9218}, {"id": 7505555, "category_id": 154, "iscrowd": 0, "bbox": [0, 422, 640, 62], "area": 36446}, {"id": 8352357, "category_id": 161, "iscrowd": 0, "bbox": [332, 317, 77, 61], "area": 1694}, {"id": 4737078, "category_id": 184, "iscrowd": 0, "bbox": [0, 94, 640, 305], "area": 95343}, {"id": 14929586, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 193], "area": 90046}, {"id": 4548969, "category_id": 193, "iscrowd": 0, "bbox": [0, 403, 640, 28], "area": 10846}, {"id": 7104352, "category_id": 199, "iscrowd": 0, "bbox": [0, 286, 613, 97], "area": 19905}], "file_name": "000000513580.png", "image_id": 513580}, {"segments_info": [{"id": 1722482, "category_id": 62, "iscrowd": 0, "bbox": [14, 31, 380, 448], "area": 106777}, {"id": 8886960, "category_id": 67, "iscrowd": 0, "bbox": [227, 76, 413, 395], "area": 96227}, {"id": 11713217, "category_id": 73, "iscrowd": 0, "bbox": [376, 85, 224, 171], "area": 18014}, {"id": 9737366, "category_id": 74, "iscrowd": 0, "bbox": [492, 286, 75, 40], "area": 2377}, {"id": 5202552, "category_id": 189, "iscrowd": 0, "bbox": [200, 192, 440, 288], "area": 4896}, {"id": 6456469, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 78220}], "file_name": "000000513688.png", "image_id": 513688}, {"segments_info": [{"id": 11183781, "category_id": 3, "iscrowd": 0, "bbox": [574, 261, 19, 14], "area": 125}, {"id": 6971751, "category_id": 3, "iscrowd": 0, "bbox": [575, 267, 33, 23], "area": 586}, {"id": 4404545, "category_id": 3, "iscrowd": 0, "bbox": [599, 257, 15, 10], "area": 111}, {"id": 7894629, "category_id": 6, "iscrowd": 0, "bbox": [288, 183, 216, 156], "area": 27288}, {"id": 2498319, "category_id": 10, "iscrowd": 0, "bbox": [475, 151, 12, 26], "area": 274}, {"id": 2565161, "category_id": 10, "iscrowd": 0, "bbox": [207, 140, 38, 14], "area": 276}, {"id": 2431774, "category_id": 10, "iscrowd": 0, "bbox": [187, 142, 12, 32], "area": 318}, {"id": 3552308, "category_id": 15, "iscrowd": 0, "bbox": [22, 289, 60, 14], "area": 363}, {"id": 2895178, "category_id": 119, "iscrowd": 0, "bbox": [193, 247, 97, 46], "area": 2258}, {"id": 9345446, "category_id": 147, "iscrowd": 0, "bbox": [0, 251, 575, 229], "area": 38726}, {"id": 9346730, "category_id": 149, "iscrowd": 0, "bbox": [0, 252, 640, 228], "area": 65984}, {"id": 2774590, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 311], "area": 69828}, {"id": 16184299, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 577, 181], "area": 22864}, {"id": 4472640, "category_id": 191, "iscrowd": 0, "bbox": [0, 288, 89, 45], "area": 559}, {"id": 1732445, "category_id": 193, "iscrowd": 0, "bbox": [0, 268, 640, 212], "area": 12593}, {"id": 12499864, "category_id": 195, "iscrowd": 0, "bbox": [161, 267, 21, 25], "area": 306}, {"id": 8355460, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 631, 286], "area": 61049}], "file_name": "000000514376.png", "image_id": 514376}, {"segments_info": [{"id": 4546187, "category_id": 1, "iscrowd": 0, "bbox": [252, 247, 109, 147], "area": 7658}, {"id": 10990272, "category_id": 1, "iscrowd": 0, "bbox": [145, 159, 114, 317], "area": 24603}, {"id": 4016738, "category_id": 1, "iscrowd": 0, "bbox": [341, 256, 76, 132], "area": 7057}, {"id": 3752531, "category_id": 1, "iscrowd": 0, "bbox": [405, 246, 72, 139], "area": 6724}, {"id": 5855835, "category_id": 72, "iscrowd": 0, "bbox": [115, 119, 453, 296], "area": 75526}, {"id": 4146266, "category_id": 112, "iscrowd": 0, "bbox": [0, 85, 79, 395], "area": 22974}, {"id": 8158657, "category_id": 176, "iscrowd": 0, "bbox": [270, 0, 327, 58], "area": 10315}, {"id": 5721449, "category_id": 181, "iscrowd": 0, "bbox": [534, 0, 106, 92], "area": 6401}, {"id": 10259899, "category_id": 187, "iscrowd": 0, "bbox": [0, 14, 40, 73], "area": 2184}], "file_name": "000000514508.png", "image_id": 514508}, {"segments_info": [{"id": 14663334, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 429, 408], "area": 64212}, {"id": 8877671, "category_id": 197, "iscrowd": 0, "bbox": [0, 50, 429, 590], "area": 168784}], "file_name": "000000514540.png", "image_id": 514540}, {"segments_info": [{"id": 7038356, "category_id": 1, "iscrowd": 0, "bbox": [57, 111, 244, 388], "area": 36163}, {"id": 8094123, "category_id": 1, "iscrowd": 0, "bbox": [0, 188, 84, 118], "area": 3005}, {"id": 6844283, "category_id": 1, "iscrowd": 0, "bbox": [212, 100, 119, 126], "area": 2850}, {"id": 8487826, "category_id": 1, "iscrowd": 0, "bbox": [242, 102, 21, 56], "area": 434}, {"id": 6714226, "category_id": 3, "iscrowd": 0, "bbox": [276, 121, 37, 31], "area": 664}, {"id": 5328456, "category_id": 8, "iscrowd": 0, "bbox": [326, 115, 28, 37], "area": 839}, {"id": 5858173, "category_id": 39, "iscrowd": 0, "bbox": [1, 9, 136, 163], "area": 2448}, {"id": 9544642, "category_id": 154, "iscrowd": 0, "bbox": [259, 419, 3, 6], "area": 5}, {"id": 4814706, "category_id": 184, "iscrowd": 0, "bbox": [100, 0, 254, 121], "area": 12219}, {"id": 4807000, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 354, 350], "area": 63322}, {"id": 8166333, "category_id": 194, "iscrowd": 0, "bbox": [0, 282, 354, 218], "area": 45629}], "file_name": "000000514586.png", "image_id": 514586}, {"segments_info": [{"id": 12365748, "category_id": 1, "iscrowd": 0, "bbox": [224, 124, 128, 315], "area": 20343}, {"id": 6321791, "category_id": 1, "iscrowd": 0, "bbox": [384, 159, 127, 274], "area": 17170}, {"id": 7301033, "category_id": 1, "iscrowd": 0, "bbox": [12, 270, 64, 169], "area": 6919}, {"id": 5450766, "category_id": 38, "iscrowd": 0, "bbox": [266, 104, 289, 63], "area": 7684}, {"id": 6769211, "category_id": 155, "iscrowd": 0, "bbox": [70, 293, 343, 53], "area": 6300}, {"id": 7370106, "category_id": 185, "iscrowd": 0, "bbox": [477, 278, 136, 32], "area": 2117}, {"id": 12884085, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 320], "area": 156459}, {"id": 5732244, "category_id": 191, "iscrowd": 0, "bbox": [220, 339, 420, 100], "area": 9567}, {"id": 11380900, "category_id": 197, "iscrowd": 0, "bbox": [521, 49, 119, 246], "area": 12262}, {"id": 6717330, "category_id": 199, "iscrowd": 0, "bbox": [0, 273, 640, 166], "area": 32812}], "file_name": "000000514797.png", "image_id": 514797}, {"segments_info": [{"id": 10670840, "category_id": 70, "iscrowd": 0, "bbox": [563, 169, 56, 55], "area": 2032}, {"id": 12309476, "category_id": 81, "iscrowd": 0, "bbox": [203, 135, 117, 47], "area": 2116}, {"id": 10140118, "category_id": 81, "iscrowd": 0, "bbox": [0, 271, 328, 90], "area": 16603}, {"id": 8174064, "category_id": 112, "iscrowd": 0, "bbox": [602, 158, 38, 175], "area": 2780}, {"id": 8303044, "category_id": 133, "iscrowd": 0, "bbox": [149, 0, 126, 136], "area": 14050}, {"id": 10468829, "category_id": 168, "iscrowd": 0, "bbox": [11, 42, 320, 251], "area": 17658}, {"id": 6656437, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 366], "area": 85162}, {"id": 12836083, "category_id": 177, "iscrowd": 0, "bbox": [460, 0, 180, 349], "area": 4997}, {"id": 6857940, "category_id": 190, "iscrowd": 0, "bbox": [236, 178, 404, 188], "area": 45682}, {"id": 10144502, "category_id": 195, "iscrowd": 0, "bbox": [507, 132, 38, 23], "area": 655}, {"id": 9027573, "category_id": 199, "iscrowd": 0, "bbox": [444, 0, 196, 286], "area": 24062}], "file_name": "000000514914.png", "image_id": 514914}, {"segments_info": [{"id": 2312043, "category_id": 22, "iscrowd": 0, "bbox": [156, 39, 334, 376], "area": 73791}, {"id": 860990, "category_id": 22, "iscrowd": 0, "bbox": [453, 5, 187, 407], "area": 56820}, {"id": 5085095, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 590, 379], "area": 95079}, {"id": 15793149, "category_id": 187, "iscrowd": 0, "bbox": [97, 0, 137, 41], "area": 3663}, {"id": 7257044, "category_id": 193, "iscrowd": 0, "bbox": [0, 306, 213, 39], "area": 4726}, {"id": 6991049, "category_id": 194, "iscrowd": 0, "bbox": [251, 340, 290, 38], "area": 635}], "file_name": "000000514979.png", "image_id": 514979}, {"segments_info": [{"id": 2564920, "category_id": 1, "iscrowd": 0, "bbox": [207, 13, 212, 274], "area": 32065}, {"id": 3030906, "category_id": 3, "iscrowd": 0, "bbox": [417, 114, 106, 45], "area": 3668}, {"id": 2766399, "category_id": 3, "iscrowd": 0, "bbox": [401, 118, 18, 15], "area": 200}, {"id": 7230515, "category_id": 3, "iscrowd": 0, "bbox": [602, 116, 38, 38], "area": 1258}, {"id": 7436147, "category_id": 8, "iscrowd": 0, "bbox": [80, 94, 187, 83], "area": 9966}, {"id": 3880754, "category_id": 8, "iscrowd": 0, "bbox": [546, 114, 55, 40], "area": 1556}, {"id": 10664136, "category_id": 17, "iscrowd": 0, "bbox": [218, 194, 307, 209], "area": 32162}, {"id": 10525843, "category_id": 44, "iscrowd": 0, "bbox": [152, 282, 32, 46], "area": 1038}, {"id": 9606035, "category_id": 47, "iscrowd": 0, "bbox": [34, 275, 37, 39], "area": 1159}, {"id": 10067620, "category_id": 67, "iscrowd": 0, "bbox": [0, 258, 638, 164], "area": 50203}, {"id": 5468818, "category_id": 100, "iscrowd": 0, "bbox": [48, 318, 592, 109], "area": 10634}, {"id": 7109512, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 115, 218], "area": 17286}, {"id": 2172453, "category_id": 149, "iscrowd": 0, "bbox": [102, 167, 40, 11], "area": 297}, {"id": 10131605, "category_id": 184, "iscrowd": 0, "bbox": [84, 0, 556, 206], "area": 52988}, {"id": 15456713, "category_id": 187, "iscrowd": 0, "bbox": [52, 0, 588, 95], "area": 10471}, {"id": 4539973, "category_id": 189, "iscrowd": 0, "bbox": [0, 267, 614, 160], "area": 2240}, {"id": 1523243, "category_id": 193, "iscrowd": 0, "bbox": [0, 164, 640, 198], "area": 39324}], "file_name": "000000515025.png", "image_id": 515025}, {"segments_info": [{"id": 4607577, "category_id": 1, "iscrowd": 0, "bbox": [0, 120, 115, 357], "area": 28925}, {"id": 2962494, "category_id": 62, "iscrowd": 0, "bbox": [556, 358, 40, 25], "area": 683}, {"id": 922651, "category_id": 62, "iscrowd": 0, "bbox": [622, 263, 18, 64], "area": 545}, {"id": 1318183, "category_id": 62, "iscrowd": 0, "bbox": [575, 405, 65, 74], "area": 2363}, {"id": 1516346, "category_id": 62, "iscrowd": 0, "bbox": [100, 297, 73, 110], "area": 3918}, {"id": 3422279, "category_id": 62, "iscrowd": 0, "bbox": [196, 269, 49, 68], "area": 1577}, {"id": 2436149, "category_id": 62, "iscrowd": 0, "bbox": [491, 273, 52, 99], "area": 1604}, {"id": 1449515, "category_id": 62, "iscrowd": 0, "bbox": [526, 329, 114, 141], "area": 4944}, {"id": 3028346, "category_id": 63, "iscrowd": 0, "bbox": [185, 337, 338, 133], "area": 33207}, {"id": 3488320, "category_id": 67, "iscrowd": 0, "bbox": [403, 283, 177, 101], "area": 5162}, {"id": 6973528, "category_id": 72, "iscrowd": 0, "bbox": [442, 19, 198, 201], "area": 36554}, {"id": 12364708, "category_id": 75, "iscrowd": 0, "bbox": [98, 365, 14, 14], "area": 143}, {"id": 1711392, "category_id": 100, "iscrowd": 0, "bbox": [378, 181, 24, 24], "area": 426}, {"id": 526600, "category_id": 112, "iscrowd": 0, "bbox": [463, 214, 58, 75], "area": 3687}, {"id": 2041133, "category_id": 130, "iscrowd": 0, "bbox": [15, 16, 428, 91], "area": 2400}, {"id": 1119252, "category_id": 181, "iscrowd": 0, "bbox": [14, 101, 167, 115], "area": 5667}, {"id": 2106665, "category_id": 186, "iscrowd": 0, "bbox": [13, 0, 627, 84], "area": 25246}, {"id": 1118997, "category_id": 189, "iscrowd": 0, "bbox": [73, 234, 148, 72], "area": 4009}, {"id": 1974310, "category_id": 190, "iscrowd": 0, "bbox": [34, 233, 606, 246], "area": 41933}, {"id": 2302239, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 342], "area": 70644}], "file_name": "000000515077.png", "image_id": 515077}, {"segments_info": [{"id": 8157565, "category_id": 3, "iscrowd": 0, "bbox": [599, 105, 36, 25], "area": 608}, {"id": 11183012, "category_id": 8, "iscrowd": 0, "bbox": [22, 63, 314, 161], "area": 40363}, {"id": 8354422, "category_id": 8, "iscrowd": 0, "bbox": [271, 99, 358, 164], "area": 30170}, {"id": 5593696, "category_id": 15, "iscrowd": 0, "bbox": [89, 180, 551, 233], "area": 59374}, {"id": 2241585, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 136], "area": 47501}, {"id": 7699592, "category_id": 194, "iscrowd": 0, "bbox": [0, 118, 640, 309], "area": 73549}, {"id": 3685190, "category_id": 197, "iscrowd": 0, "bbox": [93, 0, 547, 141], "area": 9761}], "file_name": "000000515266.png", "image_id": 515266}, {"segments_info": [{"id": 6971224, "category_id": 1, "iscrowd": 0, "bbox": [172, 165, 67, 49], "area": 1047}, {"id": 11706506, "category_id": 42, "iscrowd": 0, "bbox": [174, 199, 105, 28], "area": 674}, {"id": 11181443, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 271075}], "file_name": "000000515350.png", "image_id": 515350}, {"segments_info": [{"id": 986896, "category_id": 1, "iscrowd": 0, "bbox": [521, 372, 29, 62], "area": 796}, {"id": 5132886, "category_id": 1, "iscrowd": 0, "bbox": [409, 301, 11, 8], "area": 47}, {"id": 1382168, "category_id": 1, "iscrowd": 0, "bbox": [483, 381, 27, 51], "area": 536}, {"id": 2039326, "category_id": 1, "iscrowd": 0, "bbox": [250, 376, 21, 61], "area": 567}, {"id": 657930, "category_id": 1, "iscrowd": 0, "bbox": [550, 373, 19, 62], "area": 690}, {"id": 2827292, "category_id": 42, "iscrowd": 0, "bbox": [511, 373, 17, 58], "area": 730}, {"id": 3352608, "category_id": 42, "iscrowd": 0, "bbox": [239, 391, 28, 21], "area": 345}, {"id": 1118224, "category_id": 154, "iscrowd": 0, "bbox": [0, 424, 640, 56], "area": 30724}, {"id": 6578269, "category_id": 155, "iscrowd": 0, "bbox": [0, 239, 640, 195], "area": 117580}, {"id": 7505040, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 247], "area": 154970}], "file_name": "000000515445.png", "image_id": 515445}, {"segments_info": [{"id": 1645598, "category_id": 1, "iscrowd": 0, "bbox": [257, 91, 28, 68], "area": 862}, {"id": 1974567, "category_id": 1, "iscrowd": 0, "bbox": [205, 117, 42, 75], "area": 1358}, {"id": 6577240, "category_id": 35, "iscrowd": 0, "bbox": [221, 191, 15, 25], "area": 113}, {"id": 6511962, "category_id": 35, "iscrowd": 0, "bbox": [247, 158, 24, 5], "area": 63}, {"id": 12695474, "category_id": 159, "iscrowd": 0, "bbox": [0, 19, 500, 315], "area": 139315}, {"id": 1973790, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 144], "area": 25150}], "file_name": "000000515577.png", "image_id": 515577}, {"segments_info": [{"id": 6381921, "category_id": 1, "iscrowd": 0, "bbox": [293, 27, 35, 93], "area": 2125}, {"id": 6381920, "category_id": 1, "iscrowd": 0, "bbox": [337, 21, 32, 65], "area": 1387}, {"id": 6250335, "category_id": 1, "iscrowd": 0, "bbox": [10, 24, 226, 304], "area": 23299}, {"id": 5921370, "category_id": 15, "iscrowd": 0, "bbox": [265, 52, 78, 48], "area": 1040}, {"id": 8421504, "category_id": 37, "iscrowd": 0, "bbox": [15, 119, 24, 21], "area": 415}, {"id": 5131854, "category_id": 40, "iscrowd": 0, "bbox": [207, 154, 24, 27], "area": 424}, {"id": 6710886, "category_id": 64, "iscrowd": 0, "bbox": [336, 0, 163, 237], "area": 15135}, {"id": 8816262, "category_id": 154, "iscrowd": 0, "bbox": [235, 281, 38, 11], "area": 278}, {"id": 10592673, "category_id": 184, "iscrowd": 0, "bbox": [311, 0, 189, 99], "area": 4034}, {"id": 8289918, "category_id": 185, "iscrowd": 0, "bbox": [0, 70, 500, 205], "area": 57606}, {"id": 14869218, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 327, 110], "area": 12781}, {"id": 6184542, "category_id": 191, "iscrowd": 0, "bbox": [0, 246, 500, 45], "area": 8804}, {"id": 13027014, "category_id": 194, "iscrowd": 0, "bbox": [75, 243, 9, 10], "area": 58}, {"id": 4210752, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 176, 123], "area": 14556}], "file_name": "000000515579.png", "image_id": 515579}, {"segments_info": [{"id": 2830136, "category_id": 1, "iscrowd": 0, "bbox": [223, 1, 88, 76], "area": 3695}, {"id": 8293013, "category_id": 1, "iscrowd": 0, "bbox": [274, 46, 131, 383], "area": 18706}, {"id": 5470583, "category_id": 43, "iscrowd": 0, "bbox": [256, 110, 82, 113], "area": 2958}, {"id": 5724753, "category_id": 44, "iscrowd": 0, "bbox": [155, 59, 9, 24], "area": 158}, {"id": 5984851, "category_id": 44, "iscrowd": 0, "bbox": [38, 29, 8, 18], "area": 102}, {"id": 8223853, "category_id": 44, "iscrowd": 0, "bbox": [413, 18, 7, 21], "area": 121}, {"id": 4870771, "category_id": 44, "iscrowd": 0, "bbox": [147, 61, 8, 23], "area": 147}, {"id": 8550517, "category_id": 44, "iscrowd": 0, "bbox": [32, 47, 18, 9], "area": 109}, {"id": 5719152, "category_id": 62, "iscrowd": 0, "bbox": [115, 1, 76, 66], "area": 1996}, {"id": 7169367, "category_id": 62, "iscrowd": 0, "bbox": [79, 1, 71, 83], "area": 2178}, {"id": 2580295, "category_id": 138, "iscrowd": 0, "bbox": [441, 0, 199, 103], "area": 15175}, {"id": 2978392, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 429], "area": 213238}, {"id": 2106904, "category_id": 166, "iscrowd": 0, "bbox": [0, 0, 415, 64], "area": 9408}, {"id": 9012877, "category_id": 168, "iscrowd": 0, "bbox": [99, 0, 36, 16], "area": 122}], "file_name": "000000515828.png", "image_id": 515828}, {"segments_info": [{"id": 8619936, "category_id": 1, "iscrowd": 0, "bbox": [341, 2, 251, 413], "area": 39919}, {"id": 10983552, "category_id": 1, "iscrowd": 0, "bbox": [612, 0, 28, 95], "area": 1862}, {"id": 4935288, "category_id": 1, "iscrowd": 0, "bbox": [160, 272, 254, 122], "area": 19276}, {"id": 10266029, "category_id": 37, "iscrowd": 0, "bbox": [27, 41, 25, 24], "area": 452}, {"id": 3552562, "category_id": 40, "iscrowd": 0, "bbox": [341, 20, 66, 50], "area": 2395}, {"id": 6918035, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 186771}, {"id": 3358487, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 613, 69], "area": 21399}], "file_name": "000000515982.png", "image_id": 515982}, {"segments_info": [{"id": 6514799, "category_id": 1, "iscrowd": 0, "bbox": [201, 105, 95, 125], "area": 4433}, {"id": 6184777, "category_id": 1, "iscrowd": 0, "bbox": [372, 0, 66, 66], "area": 2027}, {"id": 8487825, "category_id": 1, "iscrowd": 0, "bbox": [55, 227, 152, 208], "area": 11830}, {"id": 5469843, "category_id": 37, "iscrowd": 0, "bbox": [193, 360, 9, 11], "area": 68}, {"id": 1318942, "category_id": 40, "iscrowd": 0, "bbox": [258, 167, 26, 26], "area": 469}, {"id": 2044731, "category_id": 40, "iscrowd": 0, "bbox": [134, 324, 34, 28], "area": 571}, {"id": 2567466, "category_id": 40, "iscrowd": 0, "bbox": [417, 17, 15, 26], "area": 285}, {"id": 1608055, "category_id": 193, "iscrowd": 0, "bbox": [0, 46, 480, 594], "area": 195618}, {"id": 8757705, "category_id": 194, "iscrowd": 0, "bbox": [0, 38, 480, 460], "area": 71278}, {"id": 2301210, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 55], "area": 20080}], "file_name": "000000516038.png", "image_id": 516038}, {"segments_info": [{"id": 2038556, "category_id": 1, "iscrowd": 0, "bbox": [550, 269, 17, 73], "area": 641}, {"id": 5396292, "category_id": 6, "iscrowd": 0, "bbox": [64, 184, 486, 204], "area": 75146}, {"id": 5065030, "category_id": 149, "iscrowd": 0, "bbox": [0, 287, 640, 158], "area": 18945}, {"id": 7960695, "category_id": 151, "iscrowd": 0, "bbox": [0, 140, 578, 61], "area": 4840}, {"id": 10463662, "category_id": 154, "iscrowd": 0, "bbox": [546, 231, 94, 64], "area": 3881}, {"id": 13806469, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 196], "area": 99132}, {"id": 9477023, "category_id": 191, "iscrowd": 0, "bbox": [0, 269, 640, 211], "area": 63645}, {"id": 7432807, "category_id": 197, "iscrowd": 0, "bbox": [0, 161, 640, 90], "area": 16927}], "file_name": "000000516143.png", "image_id": 516143}, {"segments_info": [{"id": 987667, "category_id": 1, "iscrowd": 0, "bbox": [59, 157, 166, 428], "area": 40266}, {"id": 3360331, "category_id": 1, "iscrowd": 0, "bbox": [167, 52, 26, 30], "area": 482}, {"id": 10532540, "category_id": 42, "iscrowd": 0, "bbox": [171, 284, 67, 162], "area": 4127}, {"id": 8626604, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 408, 640], "area": 215835}], "file_name": "000000516173.png", "image_id": 516173}, {"segments_info": [{"id": 13746877, "category_id": 16, "iscrowd": 0, "bbox": [368, 147, 2, 4], "area": 6}, {"id": 13023697, "category_id": 16, "iscrowd": 0, "bbox": [432, 152, 2, 1], "area": 2}, {"id": 14602704, "category_id": 16, "iscrowd": 0, "bbox": [416, 146, 6, 4], "area": 15}, {"id": 15458003, "category_id": 16, "iscrowd": 0, "bbox": [269, 149, 5, 4], "area": 15}, {"id": 15656939, "category_id": 16, "iscrowd": 0, "bbox": [137, 144, 2, 2], "area": 4}, {"id": 13551052, "category_id": 16, "iscrowd": 0, "bbox": [143, 153, 2, 2], "area": 3}, {"id": 12892624, "category_id": 16, "iscrowd": 0, "bbox": [259, 145, 5, 2], "area": 7}, {"id": 13877700, "category_id": 16, "iscrowd": 0, "bbox": [335, 148, 2, 1], "area": 2}, {"id": 15063510, "category_id": 16, "iscrowd": 0, "bbox": [325, 139, 5, 6], "area": 16}, {"id": 3688787, "category_id": 24, "iscrowd": 0, "bbox": [108, 273, 133, 81], "area": 6167}, {"id": 3360855, "category_id": 24, "iscrowd": 0, "bbox": [430, 271, 108, 70], "area": 4284}, {"id": 15523280, "category_id": 148, "iscrowd": 0, "bbox": [0, 116, 640, 49], "area": 23104}, {"id": 14009786, "category_id": 154, "iscrowd": 0, "bbox": [0, 103, 640, 29], "area": 10656}, {"id": 3102804, "category_id": 184, "iscrowd": 0, "bbox": [16, 143, 624, 337], "area": 69545}, {"id": 16312022, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 105], "area": 58576}, {"id": 15518891, "category_id": 192, "iscrowd": 0, "bbox": [0, 85, 640, 29], "area": 10685}, {"id": 4222849, "category_id": 193, "iscrowd": 0, "bbox": [0, 272, 628, 208], "area": 2316}, {"id": 5145744, "category_id": 194, "iscrowd": 0, "bbox": [0, 159, 640, 321], "area": 121538}], "file_name": "000000516316.png", "image_id": 516316}, {"segments_info": [{"id": 4998464, "category_id": 1, "iscrowd": 0, "bbox": [370, 205, 136, 93], "area": 4216}, {"id": 8748922, "category_id": 16, "iscrowd": 0, "bbox": [347, 185, 32, 20], "area": 296}, {"id": 12564399, "category_id": 42, "iscrowd": 0, "bbox": [362, 281, 195, 26], "area": 2069}, {"id": 12498859, "category_id": 155, "iscrowd": 0, "bbox": [0, 102, 640, 325], "area": 201173}, {"id": 14143429, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 102], "area": 65280}], "file_name": "000000516318.png", "image_id": 516318}, {"segments_info": [{"id": 5792874, "category_id": 1, "iscrowd": 0, "bbox": [415, 220, 28, 77], "area": 1383}, {"id": 2565410, "category_id": 1, "iscrowd": 0, "bbox": [571, 221, 14, 18], "area": 90}, {"id": 4398870, "category_id": 1, "iscrowd": 0, "bbox": [557, 217, 10, 11], "area": 63}, {"id": 5527371, "category_id": 1, "iscrowd": 0, "bbox": [387, 227, 3, 9], "area": 22}, {"id": 5725522, "category_id": 1, "iscrowd": 0, "bbox": [382, 225, 5, 13], "area": 36}, {"id": 3483179, "category_id": 1, "iscrowd": 0, "bbox": [400, 225, 5, 12], "area": 40}, {"id": 5129797, "category_id": 1, "iscrowd": 0, "bbox": [404, 226, 6, 11], "area": 41}, {"id": 2828331, "category_id": 1, "iscrowd": 0, "bbox": [503, 222, 37, 60], "area": 877}, {"id": 5525833, "category_id": 1, "iscrowd": 0, "bbox": [481, 216, 22, 53], "area": 637}, {"id": 4470060, "category_id": 1, "iscrowd": 0, "bbox": [389, 225, 6, 12], "area": 46}, {"id": 3025452, "category_id": 1, "iscrowd": 0, "bbox": [556, 227, 15, 39], "area": 361}, {"id": 4012343, "category_id": 1, "iscrowd": 0, "bbox": [593, 217, 17, 34], "area": 298}, {"id": 8022118, "category_id": 35, "iscrowd": 0, "bbox": [527, 264, 38, 2], "area": 41}, {"id": 8093056, "category_id": 35, "iscrowd": 0, "bbox": [414, 290, 30, 11], "area": 56}, {"id": 7433836, "category_id": 35, "iscrowd": 0, "bbox": [593, 245, 19, 10], "area": 32}, {"id": 4410968, "category_id": 36, "iscrowd": 0, "bbox": [482, 264, 13, 4], "area": 16}, {"id": 8884884, "category_id": 36, "iscrowd": 0, "bbox": [401, 237, 10, 1], "area": 10}, {"id": 7234659, "category_id": 36, "iscrowd": 0, "bbox": [366, 293, 71, 5], "area": 134}, {"id": 10135468, "category_id": 36, "iscrowd": 0, "bbox": [507, 278, 26, 7], "area": 67}, {"id": 12565172, "category_id": 159, "iscrowd": 0, "bbox": [440, 236, 14, 17], "area": 162}, {"id": 10510641, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 236], "area": 126154}, {"id": 10588292, "category_id": 192, "iscrowd": 0, "bbox": [0, 92, 640, 268], "area": 99423}], "file_name": "000000516601.png", "image_id": 516601}, {"segments_info": [{"id": 1644570, "category_id": 1, "iscrowd": 0, "bbox": [455, 152, 44, 162], "area": 4287}, {"id": 1184537, "category_id": 1, "iscrowd": 0, "bbox": [275, 195, 44, 112], "area": 2252}, {"id": 3223608, "category_id": 1, "iscrowd": 0, "bbox": [390, 232, 51, 65], "area": 1401}, {"id": 4014175, "category_id": 1, "iscrowd": 0, "bbox": [362, 188, 6, 14], "area": 60}, {"id": 1842223, "category_id": 1, "iscrowd": 0, "bbox": [140, 201, 43, 94], "area": 2098}, {"id": 1908516, "category_id": 1, "iscrowd": 0, "bbox": [315, 161, 52, 147], "area": 3594}, {"id": 3027515, "category_id": 1, "iscrowd": 0, "bbox": [324, 257, 126, 132], "area": 6171}, {"id": 1643798, "category_id": 1, "iscrowd": 0, "bbox": [318, 186, 25, 108], "area": 1085}, {"id": 2500156, "category_id": 1, "iscrowd": 0, "bbox": [180, 194, 37, 104], "area": 1636}, {"id": 3685754, "category_id": 27, "iscrowd": 0, "bbox": [160, 207, 12, 5], "area": 51}, {"id": 2435635, "category_id": 27, "iscrowd": 0, "bbox": [197, 202, 26, 43], "area": 549}, {"id": 592137, "category_id": 27, "iscrowd": 0, "bbox": [347, 303, 66, 78], "area": 2055}, {"id": 1710361, "category_id": 27, "iscrowd": 0, "bbox": [278, 269, 29, 38], "area": 842}, {"id": 1642840, "category_id": 27, "iscrowd": 0, "bbox": [512, 333, 106, 57], "area": 3872}, {"id": 3814449, "category_id": 31, "iscrowd": 0, "bbox": [556, 306, 35, 35], "area": 814}, {"id": 3025706, "category_id": 31, "iscrowd": 0, "bbox": [595, 332, 31, 27], "area": 559}, {"id": 4538182, "category_id": 35, "iscrowd": 0, "bbox": [215, 285, 58, 27], "area": 447}, {"id": 6975083, "category_id": 35, "iscrowd": 0, "bbox": [7, 345, 150, 49], "area": 1123}, {"id": 4932932, "category_id": 35, "iscrowd": 0, "bbox": [512, 282, 28, 22], "area": 276}, {"id": 4933189, "category_id": 35, "iscrowd": 0, "bbox": [64, 319, 140, 26], "area": 752}, {"id": 5400917, "category_id": 35, "iscrowd": 0, "bbox": [173, 294, 30, 13], "area": 116}, {"id": 5986902, "category_id": 35, "iscrowd": 0, "bbox": [126, 284, 66, 19], "area": 173}, {"id": 10722196, "category_id": 159, "iscrowd": 0, "bbox": [0, 146, 640, 334], "area": 91935}, {"id": 7096860, "category_id": 187, "iscrowd": 0, "bbox": [339, 0, 301, 148], "area": 30413}, {"id": 3093043, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 224], "area": 85742}, {"id": 2372415, "category_id": 193, "iscrowd": 0, "bbox": [151, 248, 489, 232], "area": 57276}, {"id": 3162446, "category_id": 194, "iscrowd": 0, "bbox": [441, 297, 26, 27], "area": 480}], "file_name": "000000516677.png", "image_id": 516677}, {"segments_info": [{"id": 1513258, "category_id": 10, "iscrowd": 0, "bbox": [168, 303, 16, 21], "area": 326}, {"id": 14342844, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 421, 347], "area": 94499}, {"id": 3883583, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 74483}], "file_name": "000000516708.png", "image_id": 516708}, {"segments_info": [{"id": 3683419, "category_id": 6, "iscrowd": 0, "bbox": [184, 442, 65, 32], "area": 1876}, {"id": 4670316, "category_id": 6, "iscrowd": 0, "bbox": [262, 442, 61, 35], "area": 1827}, {"id": 10066587, "category_id": 149, "iscrowd": 0, "bbox": [0, 452, 480, 135], "area": 33881}, {"id": 2960942, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 207, 181], "area": 27755}, {"id": 12352321, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 447], "area": 130259}, {"id": 9473418, "category_id": 191, "iscrowd": 0, "bbox": [0, 469, 480, 171], "area": 42172}, {"id": 5853521, "category_id": 197, "iscrowd": 0, "bbox": [0, 232, 480, 259], "area": 40988}], "file_name": "000000516804.png", "image_id": 516804}, {"segments_info": [{"id": 2112063, "category_id": 51, "iscrowd": 0, "bbox": [63, 128, 514, 245], "area": 87468}, {"id": 2832187, "category_id": 51, "iscrowd": 0, "bbox": [132, 24, 134, 99], "area": 10889}, {"id": 604442, "category_id": 56, "iscrowd": 0, "bbox": [69, 133, 184, 166], "area": 18436}, {"id": 472599, "category_id": 56, "iscrowd": 0, "bbox": [160, 145, 104, 80], "area": 5883}, {"id": 12569294, "category_id": 67, "iscrowd": 0, "bbox": [5, 1, 635, 411], "area": 99278}, {"id": 3034730, "category_id": 196, "iscrowd": 0, "bbox": [207, 19, 283, 117], "area": 23060}], "file_name": "000000516871.png", "image_id": 516871}, {"segments_info": [{"id": 2302243, "category_id": 62, "iscrowd": 0, "bbox": [91, 198, 205, 223], "area": 22956}, {"id": 3288624, "category_id": 72, "iscrowd": 0, "bbox": [3, 70, 149, 125], "area": 14709}, {"id": 6185062, "category_id": 72, "iscrowd": 0, "bbox": [283, 77, 138, 111], "area": 13228}, {"id": 9606807, "category_id": 73, "iscrowd": 0, "bbox": [146, 85, 111, 101], "area": 9731}, {"id": 7237744, "category_id": 73, "iscrowd": 0, "bbox": [451, 219, 188, 174], "area": 18658}, {"id": 7500403, "category_id": 73, "iscrowd": 0, "bbox": [370, 91, 170, 150], "area": 13445}, {"id": 2631724, "category_id": 74, "iscrowd": 0, "bbox": [391, 243, 28, 24], "area": 441}, {"id": 2631717, "category_id": 76, "iscrowd": 0, "bbox": [222, 201, 164, 69], "area": 6433}, {"id": 7040110, "category_id": 77, "iscrowd": 0, "bbox": [195, 219, 30, 20], "area": 368}, {"id": 2829361, "category_id": 77, "iscrowd": 0, "bbox": [344, 204, 38, 14], "area": 477}, {"id": 5727341, "category_id": 109, "iscrowd": 0, "bbox": [0, 113, 21, 49], "area": 705}, {"id": 4873843, "category_id": 189, "iscrowd": 0, "bbox": [53, 162, 587, 318], "area": 53063}, {"id": 9605777, "category_id": 195, "iscrowd": 0, "bbox": [0, 149, 488, 307], "area": 12316}, {"id": 4408398, "category_id": 196, "iscrowd": 0, "bbox": [288, 172, 75, 46], "area": 2003}, {"id": 12172732, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 75887}, {"id": 4538177, "category_id": 200, "iscrowd": 0, "bbox": [0, 323, 437, 157], "area": 26958}], "file_name": "000000516916.png", "image_id": 516916}, {"segments_info": [{"id": 4141622, "category_id": 1, "iscrowd": 0, "bbox": [49, 97, 206, 327], "area": 45404}, {"id": 4078143, "category_id": 1, "iscrowd": 0, "bbox": [260, 40, 191, 317], "area": 36029}, {"id": 14937068, "category_id": 48, "iscrowd": 0, "bbox": [460, 329, 38, 8], "area": 130}, {"id": 15067879, "category_id": 48, "iscrowd": 0, "bbox": [564, 379, 27, 44], "area": 286}, {"id": 11318966, "category_id": 48, "iscrowd": 0, "bbox": [437, 343, 16, 9], "area": 80}, {"id": 8879478, "category_id": 49, "iscrowd": 0, "bbox": [183, 406, 115, 31], "area": 827}, {"id": 7897218, "category_id": 49, "iscrowd": 0, "bbox": [94, 435, 132, 21], "area": 1067}, {"id": 12567244, "category_id": 49, "iscrowd": 0, "bbox": [325, 347, 43, 64], "area": 620}, {"id": 14607078, "category_id": 61, "iscrowd": 0, "bbox": [175, 358, 351, 122], "area": 25936}, {"id": 13686491, "category_id": 61, "iscrowd": 0, "bbox": [547, 393, 29, 31], "area": 639}, {"id": 12110294, "category_id": 61, "iscrowd": 0, "bbox": [441, 350, 31, 24], "area": 463}, {"id": 1315859, "category_id": 62, "iscrowd": 0, "bbox": [3, 201, 245, 229], "area": 10357}, {"id": 8026746, "category_id": 67, "iscrowd": 0, "bbox": [11, 244, 629, 227], "area": 50814}, {"id": 6712690, "category_id": 67, "iscrowd": 0, "bbox": [557, 155, 83, 55], "area": 2387}, {"id": 3684151, "category_id": 93, "iscrowd": 0, "bbox": [0, 182, 640, 298], "area": 14176}, {"id": 11712700, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 281], "area": 61255}, {"id": 12566471, "category_id": 181, "iscrowd": 0, "bbox": [51, 0, 589, 139], "area": 38858}, {"id": 9279134, "category_id": 188, "iscrowd": 0, "bbox": [0, 156, 489, 284], "area": 15112}, {"id": 7964306, "category_id": 190, "iscrowd": 0, "bbox": [0, 245, 579, 199], "area": 703}], "file_name": "000000517056.png", "image_id": 517056}, {"segments_info": [{"id": 1915461, "category_id": 1, "iscrowd": 0, "bbox": [520, 228, 104, 245], "area": 16607}, {"id": 3816776, "category_id": 1, "iscrowd": 0, "bbox": [209, 233, 212, 247], "area": 19050}, {"id": 2237726, "category_id": 3, "iscrowd": 0, "bbox": [154, 258, 33, 15], "area": 194}, {"id": 6454398, "category_id": 3, "iscrowd": 0, "bbox": [216, 256, 28, 17], "area": 277}, {"id": 3947571, "category_id": 3, "iscrowd": 0, "bbox": [141, 253, 44, 13], "area": 252}, {"id": 3882034, "category_id": 3, "iscrowd": 0, "bbox": [128, 250, 39, 13], "area": 205}, {"id": 4938590, "category_id": 3, "iscrowd": 0, "bbox": [417, 299, 124, 55], "area": 3291}, {"id": 4806490, "category_id": 3, "iscrowd": 0, "bbox": [229, 269, 35, 22], "area": 557}, {"id": 5791315, "category_id": 8, "iscrowd": 0, "bbox": [121, 241, 58, 14], "area": 408}, {"id": 1317661, "category_id": 15, "iscrowd": 0, "bbox": [304, 331, 336, 149], "area": 22845}, {"id": 856599, "category_id": 31, "iscrowd": 0, "bbox": [270, 343, 38, 34], "area": 823}, {"id": 6587274, "category_id": 128, "iscrowd": 0, "bbox": [263, 229, 296, 130], "area": 8878}, {"id": 4809069, "category_id": 149, "iscrowd": 0, "bbox": [0, 248, 640, 210], "area": 34298}, {"id": 10798026, "category_id": 151, "iscrowd": 0, "bbox": [308, 212, 146, 65], "area": 1416}, {"id": 2639688, "category_id": 184, "iscrowd": 0, "bbox": [0, 63, 640, 312], "area": 24987}, {"id": 13089960, "category_id": 187, "iscrowd": 0, "bbox": [103, 0, 537, 253], "area": 63921}, {"id": 5661804, "category_id": 191, "iscrowd": 0, "bbox": [0, 229, 640, 251], "area": 27070}, {"id": 12302493, "category_id": 192, "iscrowd": 0, "bbox": [359, 213, 109, 42], "area": 2100}, {"id": 8561061, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 292], "area": 71307}], "file_name": "000000517069.png", "image_id": 517069}, {"segments_info": [{"id": 7698034, "category_id": 5, "iscrowd": 0, "bbox": [59, 37, 555, 180], "area": 19440}, {"id": 4153191, "category_id": 184, "iscrowd": 0, "bbox": [0, 186, 138, 249], "area": 20296}, {"id": 10068129, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 329], "area": 162561}, {"id": 8683380, "category_id": 192, "iscrowd": 0, "bbox": [18, 257, 622, 178], "area": 68727}, {"id": 5328709, "category_id": 197, "iscrowd": 0, "bbox": [119, 349, 345, 86], "area": 7019}], "file_name": "000000517523.png", "image_id": 517523}, {"segments_info": [{"id": 3363469, "category_id": 67, "iscrowd": 0, "bbox": [0, 1, 640, 355], "area": 117165}, {"id": 6045492, "category_id": 77, "iscrowd": 0, "bbox": [159, 24, 147, 323], "area": 42707}, {"id": 6381403, "category_id": 77, "iscrowd": 0, "bbox": [324, 19, 178, 330], "area": 51846}, {"id": 4606815, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 14512}], "file_name": "000000517687.png", "image_id": 517687}, {"segments_info": [{"id": 3684933, "category_id": 18, "iscrowd": 0, "bbox": [129, 221, 346, 347], "area": 57512}, {"id": 3628694, "category_id": 62, "iscrowd": 0, "bbox": [3, 140, 637, 409], "area": 123470}, {"id": 4156325, "category_id": 190, "iscrowd": 0, "bbox": [266, 223, 54, 46], "area": 447}, {"id": 16514044, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 640], "area": 160268}], "file_name": "000000517832.png", "image_id": 517832}, {"segments_info": [{"id": 4810881, "category_id": 21, "iscrowd": 0, "bbox": [56, 116, 432, 303], "area": 66027}, {"id": 5073794, "category_id": 21, "iscrowd": 0, "bbox": [0, 119, 20, 30], "area": 367}, {"id": 3762271, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 161], "area": 79550}, {"id": 15596281, "category_id": 187, "iscrowd": 0, "bbox": [54, 0, 184, 40], "area": 2339}, {"id": 5024394, "category_id": 193, "iscrowd": 0, "bbox": [0, 91, 640, 389], "area": 158483}], "file_name": "000000518213.png", "image_id": 518213}, {"segments_info": [{"id": 1314838, "category_id": 1, "iscrowd": 0, "bbox": [301, 377, 78, 60], "area": 2919}, {"id": 2507370, "category_id": 1, "iscrowd": 0, "bbox": [235, 276, 63, 184], "area": 9264}, {"id": 3223086, "category_id": 65, "iscrowd": 0, "bbox": [489, 103, 151, 147], "area": 18534}, {"id": 9013389, "category_id": 65, "iscrowd": 0, "bbox": [198, 86, 295, 179], "area": 29225}, {"id": 8617342, "category_id": 65, "iscrowd": 0, "bbox": [68, 178, 466, 289], "area": 56290}, {"id": 4276805, "category_id": 149, "iscrowd": 0, "bbox": [0, 162, 640, 318], "area": 84397}, {"id": 1912103, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 288], "area": 81065}, {"id": 4412505, "category_id": 193, "iscrowd": 0, "bbox": [14, 86, 67, 84], "area": 3556}, {"id": 4872544, "category_id": 194, "iscrowd": 0, "bbox": [52, 253, 18, 18], "area": 222}], "file_name": "000000518326.png", "image_id": 518326}, {"segments_info": [{"id": 3027517, "category_id": 1, "iscrowd": 0, "bbox": [241, 90, 57, 186], "area": 6009}, {"id": 4209754, "category_id": 1, "iscrowd": 0, "bbox": [277, 61, 59, 188], "area": 6087}, {"id": 1715288, "category_id": 1, "iscrowd": 0, "bbox": [55, 114, 81, 261], "area": 14233}, {"id": 5200997, "category_id": 1, "iscrowd": 0, "bbox": [117, 85, 81, 277], "area": 9044}, {"id": 5134185, "category_id": 1, "iscrowd": 0, "bbox": [155, 93, 69, 109], "area": 2358}, {"id": 1579034, "category_id": 31, "iscrowd": 0, "bbox": [171, 126, 32, 26], "area": 344}, {"id": 2436148, "category_id": 62, "iscrowd": 0, "bbox": [152, 134, 46, 54], "area": 234}, {"id": 4484221, "category_id": 62, "iscrowd": 0, "bbox": [64, 127, 16, 15], "area": 144}, {"id": 3028028, "category_id": 62, "iscrowd": 0, "bbox": [159, 161, 30, 39], "area": 395}, {"id": 4745593, "category_id": 62, "iscrowd": 0, "bbox": [39, 133, 23, 35], "area": 453}, {"id": 4748939, "category_id": 62, "iscrowd": 0, "bbox": [6, 137, 37, 32], "area": 514}, {"id": 3627628, "category_id": 62, "iscrowd": 0, "bbox": [77, 123, 9, 12], "area": 81}, {"id": 3159608, "category_id": 62, "iscrowd": 0, "bbox": [223, 126, 27, 71], "area": 534}, {"id": 3232867, "category_id": 62, "iscrowd": 0, "bbox": [101, 135, 20, 5], "area": 66}, {"id": 2434341, "category_id": 62, "iscrowd": 0, "bbox": [327, 149, 15, 38], "area": 203}, {"id": 4412257, "category_id": 62, "iscrowd": 0, "bbox": [0, 183, 33, 60], "area": 788}, {"id": 4941946, "category_id": 62, "iscrowd": 0, "bbox": [0, 127, 12, 49], "area": 362}, {"id": 3360337, "category_id": 62, "iscrowd": 0, "bbox": [18, 151, 53, 104], "area": 1318}, {"id": 10133409, "category_id": 75, "iscrowd": 0, "bbox": [115, 131, 27, 65], "area": 863}, {"id": 11115441, "category_id": 75, "iscrowd": 0, "bbox": [307, 121, 11, 10], "area": 60}, {"id": 11051696, "category_id": 75, "iscrowd": 0, "bbox": [287, 128, 9, 8], "area": 50}, {"id": 8752786, "category_id": 75, "iscrowd": 0, "bbox": [172, 204, 34, 20], "area": 168}, {"id": 2897211, "category_id": 112, "iscrowd": 0, "bbox": [67, 24, 77, 119], "area": 6336}, {"id": 1316118, "category_id": 177, "iscrowd": 0, "bbox": [170, 159, 330, 28], "area": 1069}, {"id": 6581101, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 500, 31], "area": 8192}, {"id": 5199447, "category_id": 199, "iscrowd": 0, "bbox": [0, 10, 500, 206], "area": 48057}, {"id": 4476757, "category_id": 200, "iscrowd": 0, "bbox": [0, 163, 500, 212], "area": 69334}], "file_name": "000000518770.png", "image_id": 518770}, {"segments_info": [{"id": 7302257, "category_id": 8, "iscrowd": 0, "bbox": [171, 110, 161, 100], "area": 11787}, {"id": 5920856, "category_id": 149, "iscrowd": 0, "bbox": [0, 140, 394, 159], "area": 35065}, {"id": 13681861, "category_id": 151, "iscrowd": 0, "bbox": [296, 121, 32, 15], "area": 234}, {"id": 3688260, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 299], "area": 88276}, {"id": 15263200, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 476, 131], "area": 29056}, {"id": 5011825, "category_id": 193, "iscrowd": 0, "bbox": [0, 163, 428, 136], "area": 11233}, {"id": 8624030, "category_id": 194, "iscrowd": 0, "bbox": [0, 173, 58, 37], "area": 1042}, {"id": 10922410, "category_id": 197, "iscrowd": 0, "bbox": [623, 43, 17, 56], "area": 779}], "file_name": "000000519039.png", "image_id": 519039}, {"segments_info": [{"id": 1648928, "category_id": 1, "iscrowd": 0, "bbox": [282, 34, 357, 368], "area": 72793}, {"id": 3161672, "category_id": 22, "iscrowd": 0, "bbox": [0, 0, 640, 401], "area": 182188}], "file_name": "000000519208.png", "image_id": 519208}, {"segments_info": [{"id": 5658974, "category_id": 7, "iscrowd": 0, "bbox": [159, 77, 326, 300], "area": 58132}, {"id": 3168605, "category_id": 184, "iscrowd": 0, "bbox": [0, 170, 640, 256], "area": 61395}, {"id": 13086611, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 259], "area": 105326}], "file_name": "000000519338.png", "image_id": 519338}, {"segments_info": [{"id": 9344376, "category_id": 16, "iscrowd": 0, "bbox": [212, 207, 71, 63], "area": 1625}, {"id": 11778232, "category_id": 85, "iscrowd": 0, "bbox": [175, 493, 114, 105], "area": 9223}, {"id": 11169864, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 239863}, {"id": 8427941, "category_id": 197, "iscrowd": 0, "bbox": [95, 255, 271, 385], "area": 56331}], "file_name": "000000519491.png", "image_id": 519491}, {"segments_info": [{"id": 3026995, "category_id": 85, "iscrowd": 0, "bbox": [370, 401, 9, 17], "area": 134}, {"id": 8884628, "category_id": 85, "iscrowd": 0, "bbox": [108, 247, 42, 53], "area": 2082}, {"id": 12569547, "category_id": 85, "iscrowd": 0, "bbox": [173, 248, 33, 47], "area": 1195}, {"id": 14863815, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 424], "area": 130225}, {"id": 2437437, "category_id": 197, "iscrowd": 0, "bbox": [0, 50, 427, 590], "area": 139557}], "file_name": "000000519522.png", "image_id": 519522}, {"segments_info": [{"id": 3560035, "category_id": 44, "iscrowd": 0, "bbox": [141, 307, 13, 53], "area": 457}, {"id": 8622761, "category_id": 46, "iscrowd": 0, "bbox": [158, 330, 12, 31], "area": 156}, {"id": 9148846, "category_id": 46, "iscrowd": 0, "bbox": [150, 329, 14, 33], "area": 256}, {"id": 5730954, "category_id": 62, "iscrowd": 0, "bbox": [126, 392, 123, 224], "area": 14634}, {"id": 5404050, "category_id": 62, "iscrowd": 0, "bbox": [1, 419, 88, 213], "area": 11378}, {"id": 10795466, "category_id": 62, "iscrowd": 0, "bbox": [358, 333, 68, 299], "area": 11591}, {"id": 4149603, "category_id": 79, "iscrowd": 0, "bbox": [249, 265, 41, 111], "area": 3778}, {"id": 5796991, "category_id": 86, "iscrowd": 0, "bbox": [87, 322, 35, 44], "area": 974}, {"id": 11584980, "category_id": 107, "iscrowd": 0, "bbox": [0, 356, 57, 17], "area": 757}, {"id": 3369644, "category_id": 118, "iscrowd": 0, "bbox": [26, 414, 400, 226], "area": 41621}, {"id": 7376569, "category_id": 119, "iscrowd": 0, "bbox": [51, 252, 73, 73], "area": 3456}, {"id": 8694735, "category_id": 130, "iscrowd": 0, "bbox": [136, 0, 290, 170], "area": 1846}, {"id": 8100539, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 426, 241], "area": 84654}, {"id": 7902650, "category_id": 188, "iscrowd": 0, "bbox": [51, 189, 342, 272], "area": 39197}, {"id": 3495814, "category_id": 189, "iscrowd": 0, "bbox": [0, 353, 256, 242], "area": 28907}, {"id": 10793154, "category_id": 199, "iscrowd": 0, "bbox": [0, 117, 426, 247], "area": 24356}], "file_name": "000000519569.png", "image_id": 519569}, {"segments_info": [{"id": 9408911, "category_id": 23, "iscrowd": 0, "bbox": [144, 113, 363, 272], "area": 65847}, {"id": 5394507, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 241027}], "file_name": "000000519611.png", "image_id": 519611}, {"segments_info": [{"id": 4936293, "category_id": 1, "iscrowd": 0, "bbox": [136, 41, 385, 591], "area": 150292}, {"id": 3817802, "category_id": 23, "iscrowd": 0, "bbox": [2, 314, 327, 324], "area": 58407}, {"id": 3490896, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 521, 606], "area": 107984}], "file_name": "000000519688.png", "image_id": 519688}, {"segments_info": [{"id": 2717329, "category_id": 17, "iscrowd": 0, "bbox": [206, 119, 180, 136], "area": 17354}, {"id": 797489, "category_id": 62, "iscrowd": 0, "bbox": [69, 1, 431, 368], "area": 99907}, {"id": 11253168, "category_id": 73, "iscrowd": 0, "bbox": [0, 1, 50, 83], "area": 1643}, {"id": 7456720, "category_id": 177, "iscrowd": 0, "bbox": [310, 320, 190, 55], "area": 6319}, {"id": 999776, "category_id": 189, "iscrowd": 0, "bbox": [0, 70, 148, 72], "area": 6120}, {"id": 811106, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 318], "area": 35003}, {"id": 1027, "category_id": 200, "iscrowd": 0, "bbox": [0, 305, 337, 70], "area": 11289}], "file_name": "000000519764.png", "image_id": 519764}, {"segments_info": [{"id": 5262986, "category_id": 1, "iscrowd": 0, "bbox": [186, 335, 8, 9], "area": 43}, {"id": 9726819, "category_id": 1, "iscrowd": 0, "bbox": [450, 322, 35, 46], "area": 499}, {"id": 9006701, "category_id": 1, "iscrowd": 0, "bbox": [450, 335, 35, 75], "area": 1038}, {"id": 6639692, "category_id": 3, "iscrowd": 0, "bbox": [0, 334, 216, 78], "area": 13467}, {"id": 7694195, "category_id": 6, "iscrowd": 0, "bbox": [221, 289, 187, 105], "area": 14197}, {"id": 7561828, "category_id": 10, "iscrowd": 0, "bbox": [267, 173, 59, 84], "area": 3450}, {"id": 4538953, "category_id": 10, "iscrowd": 0, "bbox": [106, 284, 7, 24], "area": 155}, {"id": 4340029, "category_id": 10, "iscrowd": 0, "bbox": [0, 226, 19, 39], "area": 623}, {"id": 10986146, "category_id": 85, "iscrowd": 0, "bbox": [319, 137, 14, 16], "area": 168}, {"id": 11385284, "category_id": 85, "iscrowd": 0, "bbox": [367, 138, 7, 16], "area": 101}, {"id": 10584191, "category_id": 149, "iscrowd": 0, "bbox": [191, 350, 309, 62], "area": 1577}, {"id": 15789547, "category_id": 151, "iscrowd": 0, "bbox": [68, 167, 205, 34], "area": 1570}, {"id": 6584465, "category_id": 184, "iscrowd": 0, "bbox": [303, 163, 197, 151], "area": 17868}, {"id": 16511456, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 231], "area": 78685}, {"id": 7896720, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 500, 354], "area": 58934}], "file_name": "000000520009.png", "image_id": 520009}, {"segments_info": [{"id": 2828839, "category_id": 44, "iscrowd": 0, "bbox": [36, 28, 68, 242], "area": 10692}, {"id": 4341054, "category_id": 72, "iscrowd": 0, "bbox": [87, 2, 345, 50], "area": 14208}, {"id": 3815734, "category_id": 74, "iscrowd": 0, "bbox": [590, 162, 50, 45], "area": 1632}, {"id": 3025063, "category_id": 84, "iscrowd": 0, "bbox": [146, 247, 287, 31], "area": 7381}, {"id": 5077093, "category_id": 84, "iscrowd": 0, "bbox": [174, 96, 288, 72], "area": 7563}, {"id": 1390394, "category_id": 84, "iscrowd": 0, "bbox": [422, 0, 120, 350], "area": 13939}, {"id": 4869467, "category_id": 84, "iscrowd": 0, "bbox": [81, 212, 346, 75], "area": 5803}, {"id": 3160645, "category_id": 84, "iscrowd": 0, "bbox": [81, 375, 300, 46], "area": 10260}, {"id": 4739145, "category_id": 84, "iscrowd": 0, "bbox": [120, 154, 343, 55], "area": 9501}, {"id": 8618816, "category_id": 84, "iscrowd": 0, "bbox": [113, 308, 319, 51], "area": 10452}, {"id": 2302242, "category_id": 84, "iscrowd": 0, "bbox": [193, 52, 236, 61], "area": 9431}, {"id": 1974293, "category_id": 84, "iscrowd": 0, "bbox": [137, 117, 302, 28], "area": 7309}, {"id": 1842719, "category_id": 84, "iscrowd": 0, "bbox": [430, 254, 157, 156], "area": 17060}, {"id": 8226968, "category_id": 84, "iscrowd": 0, "bbox": [132, 208, 320, 43], "area": 12802}, {"id": 5396046, "category_id": 84, "iscrowd": 0, "bbox": [234, 38, 203, 33], "area": 6035}, {"id": 3420720, "category_id": 84, "iscrowd": 0, "bbox": [2, 294, 111, 95], "area": 5864}, {"id": 4144960, "category_id": 84, "iscrowd": 1, "bbox": [1, 10, 470, 417], "area": 34418}, {"id": 395014, "category_id": 189, "iscrowd": 0, "bbox": [0, 99, 640, 328], "area": 49121}, {"id": 724496, "category_id": 195, "iscrowd": 0, "bbox": [519, 0, 121, 55], "area": 4341}, {"id": 3224626, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 631, 136], "area": 17683}], "file_name": "000000520077.png", "image_id": 520077}, {"segments_info": [{"id": 1319982, "category_id": 1, "iscrowd": 0, "bbox": [332, 169, 226, 311], "area": 29931}, {"id": 3232326, "category_id": 1, "iscrowd": 0, "bbox": [323, 199, 112, 281], "area": 23643}, {"id": 4943715, "category_id": 44, "iscrowd": 0, "bbox": [267, 299, 5, 40], "area": 162}, {"id": 5272423, "category_id": 44, "iscrowd": 0, "bbox": [255, 297, 12, 42], "area": 250}, {"id": 3688774, "category_id": 44, "iscrowd": 0, "bbox": [273, 293, 15, 50], "area": 456}, {"id": 7506055, "category_id": 44, "iscrowd": 0, "bbox": [239, 306, 11, 21], "area": 129}, {"id": 3825236, "category_id": 44, "iscrowd": 0, "bbox": [263, 297, 13, 38], "area": 144}, {"id": 3035991, "category_id": 44, "iscrowd": 0, "bbox": [288, 308, 7, 36], "area": 148}, {"id": 3234641, "category_id": 44, "iscrowd": 0, "bbox": [243, 301, 23, 77], "area": 1097}, {"id": 4680046, "category_id": 46, "iscrowd": 0, "bbox": [265, 339, 16, 37], "area": 372}, {"id": 1189162, "category_id": 46, "iscrowd": 0, "bbox": [461, 324, 23, 50], "area": 420}, {"id": 1851727, "category_id": 46, "iscrowd": 0, "bbox": [0, 435, 22, 45], "area": 691}, {"id": 3767437, "category_id": 49, "iscrowd": 0, "bbox": [54, 449, 52, 31], "area": 310}, {"id": 3566198, "category_id": 49, "iscrowd": 0, "bbox": [256, 379, 47, 9], "area": 113}, {"id": 2586780, "category_id": 59, "iscrowd": 0, "bbox": [87, 446, 68, 34], "area": 1634}, {"id": 1797773, "category_id": 59, "iscrowd": 0, "bbox": [30, 402, 106, 33], "area": 2020}, {"id": 5407114, "category_id": 78, "iscrowd": 0, "bbox": [98, 306, 148, 116], "area": 13060}, {"id": 1122079, "category_id": 81, "iscrowd": 0, "bbox": [610, 411, 30, 60], "area": 1448}, {"id": 2709874, "category_id": 100, "iscrowd": 0, "bbox": [13, 412, 149, 57], "area": 2713}, {"id": 3176343, "category_id": 107, "iscrowd": 0, "bbox": [0, 341, 342, 139], "area": 13268}, {"id": 16645885, "category_id": 130, "iscrowd": 0, "bbox": [317, 0, 152, 78], "area": 5578}, {"id": 7705486, "category_id": 168, "iscrowd": 0, "bbox": [267, 321, 39, 43], "area": 503}, {"id": 3036767, "category_id": 176, "iscrowd": 0, "bbox": [0, 319, 614, 161], "area": 10028}, {"id": 7367529, "category_id": 181, "iscrowd": 0, "bbox": [301, 47, 277, 282], "area": 44822}, {"id": 9945025, "category_id": 186, "iscrowd": 0, "bbox": [15, 0, 625, 105], "area": 32583}, {"id": 8501184, "category_id": 188, "iscrowd": 0, "bbox": [0, 38, 345, 442], "area": 51427}, {"id": 2062230, "category_id": 196, "iscrowd": 0, "bbox": [50, 456, 57, 24], "area": 413}, {"id": 7646387, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 57742}], "file_name": "000000520264.png", "image_id": 520264}, {"segments_info": [{"id": 2963018, "category_id": 18, "iscrowd": 0, "bbox": [113, 155, 367, 479], "area": 108307}, {"id": 13029849, "category_id": 171, "iscrowd": 0, "bbox": [32, 109, 65, 208], "area": 10875}, {"id": 4807499, "category_id": 184, "iscrowd": 0, "bbox": [7, 0, 473, 173], "area": 67318}, {"id": 7241072, "category_id": 185, "iscrowd": 0, "bbox": [0, 110, 480, 207], "area": 38703}, {"id": 14472650, "category_id": 187, "iscrowd": 0, "bbox": [111, 31, 232, 166], "area": 2364}, {"id": 16185334, "category_id": 191, "iscrowd": 0, "bbox": [0, 320, 183, 47], "area": 4892}, {"id": 9093546, "category_id": 193, "iscrowd": 0, "bbox": [0, 277, 196, 211], "area": 21686}], "file_name": "000000520301.png", "image_id": 520301}, {"segments_info": [{"id": 3687251, "category_id": 1, "iscrowd": 0, "bbox": [173, 264, 10, 11], "area": 47}, {"id": 5923677, "category_id": 5, "iscrowd": 0, "bbox": [207, 218, 145, 58], "area": 1734}, {"id": 3292729, "category_id": 5, "iscrowd": 0, "bbox": [203, 244, 437, 112], "area": 20351}, {"id": 7964806, "category_id": 149, "iscrowd": 0, "bbox": [0, 265, 640, 215], "area": 95545}, {"id": 4677198, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 302], "area": 56098}, {"id": 5657927, "category_id": 185, "iscrowd": 0, "bbox": [560, 396, 80, 84], "area": 3534}, {"id": 13155496, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 236], "area": 106522}, {"id": 3632991, "category_id": 193, "iscrowd": 0, "bbox": [0, 248, 640, 130], "area": 21815}], "file_name": "000000520324.png", "image_id": 520324}, {"segments_info": [{"id": 8094864, "category_id": 17, "iscrowd": 0, "bbox": [224, 106, 341, 349], "area": 65852}, {"id": 2700863, "category_id": 62, "iscrowd": 0, "bbox": [1, 91, 138, 236], "area": 19552}, {"id": 4801600, "category_id": 75, "iscrowd": 0, "bbox": [113, 344, 154, 57], "area": 3791}, {"id": 14208968, "category_id": 75, "iscrowd": 0, "bbox": [22, 311, 76, 39], "area": 1697}, {"id": 5009275, "category_id": 84, "iscrowd": 0, "bbox": [549, 184, 15, 53], "area": 527}, {"id": 5727592, "category_id": 84, "iscrowd": 0, "bbox": [89, 290, 61, 27], "area": 1358}, {"id": 1929082, "category_id": 84, "iscrowd": 0, "bbox": [483, 170, 13, 60], "area": 404}, {"id": 5991789, "category_id": 84, "iscrowd": 0, "bbox": [567, 80, 19, 71], "area": 709}, {"id": 2104612, "category_id": 84, "iscrowd": 0, "bbox": [507, 164, 26, 71], "area": 1234}, {"id": 5130836, "category_id": 84, "iscrowd": 0, "bbox": [520, 87, 10, 49], "area": 296}, {"id": 1908768, "category_id": 84, "iscrowd": 0, "bbox": [559, 169, 25, 72], "area": 1167}, {"id": 2435134, "category_id": 84, "iscrowd": 0, "bbox": [541, 249, 11, 45], "area": 254}, {"id": 3816281, "category_id": 84, "iscrowd": 0, "bbox": [494, 165, 19, 68], "area": 846}, {"id": 3039104, "category_id": 84, "iscrowd": 0, "bbox": [540, 0, 13, 52], "area": 485}, {"id": 6114115, "category_id": 84, "iscrowd": 0, "bbox": [548, 88, 11, 57], "area": 378}, {"id": 2179427, "category_id": 84, "iscrowd": 0, "bbox": [538, 186, 15, 49], "area": 476}, {"id": 3552329, "category_id": 84, "iscrowd": 0, "bbox": [549, 0, 11, 51], "area": 387}, {"id": 5132112, "category_id": 84, "iscrowd": 1, "bbox": [386, 0, 254, 326], "area": 52877}, {"id": 3556436, "category_id": 88, "iscrowd": 0, "bbox": [180, 1, 54, 49], "area": 1757}, {"id": 10920601, "category_id": 112, "iscrowd": 0, "bbox": [224, 0, 202, 194], "area": 23567}, {"id": 725535, "category_id": 188, "iscrowd": 0, "bbox": [22, 34, 223, 286], "area": 38519}, {"id": 2709667, "category_id": 189, "iscrowd": 0, "bbox": [0, 293, 640, 187], "area": 52503}, {"id": 14276820, "category_id": 195, "iscrowd": 0, "bbox": [0, 287, 274, 186], "area": 16582}, {"id": 5853253, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 350], "area": 16578}], "file_name": "000000520531.png", "image_id": 520531}, {"segments_info": [{"id": 6119515, "category_id": 1, "iscrowd": 0, "bbox": [251, 197, 15, 21], "area": 187}, {"id": 8483698, "category_id": 1, "iscrowd": 0, "bbox": [491, 197, 21, 53], "area": 193}, {"id": 8290731, "category_id": 1, "iscrowd": 0, "bbox": [329, 192, 27, 71], "area": 1025}, {"id": 6578536, "category_id": 1, "iscrowd": 0, "bbox": [225, 200, 27, 60], "area": 1061}, {"id": 10198436, "category_id": 1, "iscrowd": 0, "bbox": [456, 188, 25, 41], "area": 646}, {"id": 6781840, "category_id": 1, "iscrowd": 0, "bbox": [165, 237, 20, 35], "area": 423}, {"id": 4144178, "category_id": 1, "iscrowd": 0, "bbox": [524, 189, 20, 52], "area": 652}, {"id": 6188677, "category_id": 1, "iscrowd": 0, "bbox": [428, 190, 21, 56], "area": 522}, {"id": 7832212, "category_id": 1, "iscrowd": 0, "bbox": [291, 195, 24, 56], "area": 381}, {"id": 7309467, "category_id": 1, "iscrowd": 0, "bbox": [382, 196, 12, 36], "area": 261}, {"id": 7700372, "category_id": 1, "iscrowd": 0, "bbox": [408, 188, 21, 44], "area": 568}, {"id": 6315632, "category_id": 1, "iscrowd": 0, "bbox": [544, 191, 28, 57], "area": 1217}, {"id": 5274520, "category_id": 1, "iscrowd": 0, "bbox": [429, 224, 67, 47], "area": 1828}, {"id": 6580589, "category_id": 1, "iscrowd": 1, "bbox": [113, 49, 527, 341], "area": 10105}, {"id": 8052713, "category_id": 28, "iscrowd": 0, "bbox": [355, 192, 45, 24], "area": 343}, {"id": 3164997, "category_id": 42, "iscrowd": 0, "bbox": [379, 269, 53, 78], "area": 1966}, {"id": 2637371, "category_id": 42, "iscrowd": 0, "bbox": [350, 270, 40, 73], "area": 1342}, {"id": 8488577, "category_id": 42, "iscrowd": 0, "bbox": [444, 267, 53, 94], "area": 1609}, {"id": 7169880, "category_id": 42, "iscrowd": 0, "bbox": [466, 274, 173, 102], "area": 12089}, {"id": 5198408, "category_id": 42, "iscrowd": 0, "bbox": [319, 277, 44, 66], "area": 1745}, {"id": 5001330, "category_id": 42, "iscrowd": 0, "bbox": [298, 268, 63, 71], "area": 1461}, {"id": 5855052, "category_id": 42, "iscrowd": 0, "bbox": [420, 264, 47, 87], "area": 1729}, {"id": 3289924, "category_id": 42, "iscrowd": 0, "bbox": [150, 278, 41, 56], "area": 816}, {"id": 4871725, "category_id": 42, "iscrowd": 0, "bbox": [247, 275, 40, 56], "area": 946}, {"id": 2638653, "category_id": 42, "iscrowd": 0, "bbox": [235, 273, 38, 63], "area": 943}, {"id": 4473395, "category_id": 42, "iscrowd": 0, "bbox": [174, 272, 34, 66], "area": 812}, {"id": 3093796, "category_id": 42, "iscrowd": 0, "bbox": [264, 283, 49, 56], "area": 1445}, {"id": 3888216, "category_id": 42, "iscrowd": 0, "bbox": [405, 270, 46, 79], "area": 1319}, {"id": 3816762, "category_id": 42, "iscrowd": 1, "bbox": [46, 274, 339, 66], "area": 5113}, {"id": 4608591, "category_id": 62, "iscrowd": 0, "bbox": [113, 243, 34, 32], "area": 439}, {"id": 4679007, "category_id": 62, "iscrowd": 0, "bbox": [133, 235, 42, 38], "area": 621}, {"id": 4804427, "category_id": 138, "iscrowd": 0, "bbox": [10, 248, 492, 114], "area": 13683}, {"id": 9411229, "category_id": 154, "iscrowd": 0, "bbox": [0, 200, 640, 161], "area": 9836}, {"id": 14074526, "category_id": 155, "iscrowd": 0, "bbox": [102, 175, 538, 60], "area": 6008}, {"id": 9401695, "category_id": 166, "iscrowd": 0, "bbox": [142, 172, 498, 32], "area": 2183}, {"id": 10460581, "category_id": 168, "iscrowd": 0, "bbox": [192, 199, 27, 41], "area": 636}, {"id": 5266012, "category_id": 175, "iscrowd": 0, "bbox": [358, 215, 76, 55], "area": 804}, {"id": 4082756, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 275], "area": 66494}, {"id": 7763838, "category_id": 186, "iscrowd": 0, "bbox": [0, 54, 640, 149], "area": 56325}, {"id": 14735307, "category_id": 187, "iscrowd": 0, "bbox": [21, 23, 619, 117], "area": 5114}, {"id": 2843464, "category_id": 193, "iscrowd": 0, "bbox": [0, 391, 640, 89], "area": 48925}, {"id": 2835007, "category_id": 194, "iscrowd": 0, "bbox": [0, 377, 253, 44], "area": 4642}, {"id": 2305322, "category_id": 198, "iscrowd": 0, "bbox": [0, 332, 640, 84], "area": 23049}, {"id": 5726045, "category_id": 199, "iscrowd": 0, "bbox": [193, 215, 78, 54], "area": 1799}], "file_name": "000000520659.png", "image_id": 520659}, {"segments_info": [{"id": 529448, "category_id": 1, "iscrowd": 0, "bbox": [402, 156, 49, 136], "area": 2796}, {"id": 4743143, "category_id": 1, "iscrowd": 0, "bbox": [0, 143, 98, 331], "area": 21603}, {"id": 3494007, "category_id": 1, "iscrowd": 0, "bbox": [181, 171, 68, 194], "area": 8304}, {"id": 1124942, "category_id": 1, "iscrowd": 0, "bbox": [142, 170, 40, 57], "area": 1042}, {"id": 199192, "category_id": 1, "iscrowd": 0, "bbox": [460, 147, 59, 76], "area": 1974}, {"id": 2900076, "category_id": 1, "iscrowd": 0, "bbox": [99, 180, 103, 234], "area": 11478}, {"id": 596802, "category_id": 1, "iscrowd": 0, "bbox": [551, 144, 25, 32], "area": 362}, {"id": 595503, "category_id": 1, "iscrowd": 0, "bbox": [324, 142, 23, 140], "area": 906}, {"id": 267877, "category_id": 1, "iscrowd": 0, "bbox": [529, 150, 31, 79], "area": 1384}, {"id": 269895, "category_id": 1, "iscrowd": 0, "bbox": [431, 153, 30, 132], "area": 1483}, {"id": 337235, "category_id": 1, "iscrowd": 0, "bbox": [283, 165, 16, 29], "area": 304}, {"id": 2182250, "category_id": 1, "iscrowd": 0, "bbox": [328, 139, 78, 255], "area": 12684}, {"id": 276600, "category_id": 1, "iscrowd": 0, "bbox": [581, 146, 37, 92], "area": 1770}, {"id": 399415, "category_id": 1, "iscrowd": 1, "bbox": [235, 142, 278, 42], "area": 795}, {"id": 1844046, "category_id": 31, "iscrowd": 0, "bbox": [96, 221, 38, 99], "area": 1401}, {"id": 533365, "category_id": 31, "iscrowd": 0, "bbox": [429, 194, 30, 47], "area": 664}, {"id": 856606, "category_id": 31, "iscrowd": 0, "bbox": [153, 192, 37, 89], "area": 771}, {"id": 198155, "category_id": 31, "iscrowd": 0, "bbox": [582, 178, 10, 16], "area": 119}, {"id": 725278, "category_id": 33, "iscrowd": 0, "bbox": [255, 288, 69, 58], "area": 2497}, {"id": 927828, "category_id": 72, "iscrowd": 0, "bbox": [105, 131, 40, 32], "area": 1101}, {"id": 1516867, "category_id": 72, "iscrowd": 0, "bbox": [552, 129, 17, 12], "area": 163}, {"id": 3024196, "category_id": 72, "iscrowd": 0, "bbox": [570, 127, 16, 12], "area": 180}, {"id": 2182007, "category_id": 130, "iscrowd": 0, "bbox": [0, 0, 640, 166], "area": 20036}, {"id": 265504, "category_id": 185, "iscrowd": 0, "bbox": [392, 199, 223, 183], "area": 4799}, {"id": 601187, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 130], "area": 53229}, {"id": 532558, "category_id": 190, "iscrowd": 0, "bbox": [83, 175, 557, 305], "area": 100690}, {"id": 665419, "category_id": 199, "iscrowd": 0, "bbox": [6, 30, 634, 264], "area": 42129}], "file_name": "000000520707.png", "image_id": 520707}, {"segments_info": [{"id": 2565927, "category_id": 1, "iscrowd": 0, "bbox": [242, 223, 136, 221], "area": 6730}, {"id": 1973790, "category_id": 28, "iscrowd": 0, "bbox": [160, 66, 18, 94], "area": 890}, {"id": 5987163, "category_id": 28, "iscrowd": 0, "bbox": [199, 73, 11, 121], "area": 494}, {"id": 5197647, "category_id": 28, "iscrowd": 0, "bbox": [206, 72, 14, 98], "area": 669}, {"id": 1973780, "category_id": 28, "iscrowd": 0, "bbox": [247, 76, 15, 94], "area": 426}, {"id": 2171169, "category_id": 28, "iscrowd": 0, "bbox": [153, 64, 14, 97], "area": 534}, {"id": 4473924, "category_id": 28, "iscrowd": 0, "bbox": [124, 63, 12, 127], "area": 751}, {"id": 2894892, "category_id": 28, "iscrowd": 0, "bbox": [539, 116, 34, 96], "area": 1264}, {"id": 3289650, "category_id": 28, "iscrowd": 0, "bbox": [144, 61, 12, 102], "area": 616}, {"id": 4671303, "category_id": 28, "iscrowd": 0, "bbox": [181, 66, 14, 104], "area": 940}, {"id": 5789784, "category_id": 28, "iscrowd": 0, "bbox": [549, 117, 41, 97], "area": 865}, {"id": 2500134, "category_id": 28, "iscrowd": 0, "bbox": [562, 132, 38, 79], "area": 668}, {"id": 2302755, "category_id": 28, "iscrowd": 0, "bbox": [260, 75, 13, 94], "area": 484}, {"id": 2763306, "category_id": 28, "iscrowd": 0, "bbox": [103, 63, 12, 127], "area": 776}, {"id": 1776411, "category_id": 31, "iscrowd": 0, "bbox": [280, 282, 66, 119], "area": 3682}, {"id": 12961221, "category_id": 92, "iscrowd": 0, "bbox": [14, 256, 626, 71], "area": 26497}, {"id": 1776416, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 77, 256], "area": 17746}, {"id": 2105376, "category_id": 181, "iscrowd": 0, "bbox": [67, 0, 573, 232], "area": 99255}, {"id": 7434609, "category_id": 191, "iscrowd": 0, "bbox": [0, 317, 640, 163], "area": 88215}, {"id": 7960953, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 350], "area": 52905}], "file_name": "000000520832.png", "image_id": 520832}, {"segments_info": [{"id": 3355193, "category_id": 44, "iscrowd": 0, "bbox": [413, 1, 90, 189], "area": 11601}, {"id": 7039079, "category_id": 47, "iscrowd": 0, "bbox": [463, 13, 104, 122], "area": 6261}, {"id": 11905955, "category_id": 48, "iscrowd": 0, "bbox": [2, 166, 281, 49], "area": 2418}, {"id": 6716830, "category_id": 59, "iscrowd": 0, "bbox": [24, 176, 540, 216], "area": 88101}, {"id": 8287084, "category_id": 67, "iscrowd": 0, "bbox": [3, 104, 637, 314], "area": 63279}, {"id": 2630176, "category_id": 189, "iscrowd": 0, "bbox": [31, 218, 609, 207], "area": 8237}], "file_name": "000000520871.png", "image_id": 520871}, {"segments_info": [{"id": 12238528, "category_id": 1, "iscrowd": 0, "bbox": [160, 162, 82, 310], "area": 16139}, {"id": 8030347, "category_id": 70, "iscrowd": 0, "bbox": [118, 430, 34, 91], "area": 1773}, {"id": 11579803, "category_id": 81, "iscrowd": 0, "bbox": [115, 318, 58, 45], "area": 1610}, {"id": 4935255, "category_id": 118, "iscrowd": 0, "bbox": [119, 596, 134, 44], "area": 1625}, {"id": 11909830, "category_id": 176, "iscrowd": 0, "bbox": [114, 288, 198, 87], "area": 8150}, {"id": 6056316, "category_id": 188, "iscrowd": 0, "bbox": [114, 346, 68, 116], "area": 5136}, {"id": 10331821, "category_id": 190, "iscrowd": 0, "bbox": [61, 443, 244, 197], "area": 31297}, {"id": 14542826, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 191806}], "file_name": "000000520910.png", "image_id": 520910}, {"segments_info": [{"id": 4735296, "category_id": 3, "iscrowd": 0, "bbox": [12, 263, 66, 78], "area": 3738}, {"id": 6118248, "category_id": 8, "iscrowd": 0, "bbox": [45, 19, 581, 455], "area": 197288}, {"id": 5657427, "category_id": 149, "iscrowd": 0, "bbox": [11, 327, 629, 153], "area": 22893}, {"id": 5198167, "category_id": 171, "iscrowd": 0, "bbox": [0, 359, 39, 20], "area": 630}, {"id": 4478543, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 522, 360], "area": 44927}, {"id": 10659495, "category_id": 191, "iscrowd": 0, "bbox": [0, 315, 640, 165], "area": 15945}, {"id": 7043196, "category_id": 197, "iscrowd": 0, "bbox": [487, 0, 153, 318], "area": 20323}], "file_name": "000000521052.png", "image_id": 521052}, {"segments_info": [{"id": 5525083, "category_id": 1, "iscrowd": 0, "bbox": [74, 249, 41, 128], "area": 1396}, {"id": 4278364, "category_id": 1, "iscrowd": 0, "bbox": [2, 246, 49, 188], "area": 6323}, {"id": 2502721, "category_id": 1, "iscrowd": 0, "bbox": [49, 258, 56, 147], "area": 4580}, {"id": 7829887, "category_id": 3, "iscrowd": 0, "bbox": [141, 240, 25, 18], "area": 289}, {"id": 9409691, "category_id": 3, "iscrowd": 0, "bbox": [149, 250, 54, 31], "area": 1258}, {"id": 8488588, "category_id": 3, "iscrowd": 0, "bbox": [221, 243, 26, 14], "area": 295}, {"id": 6184292, "category_id": 3, "iscrowd": 0, "bbox": [115, 245, 9, 8], "area": 56}, {"id": 4014146, "category_id": 3, "iscrowd": 0, "bbox": [247, 240, 24, 20], "area": 347}, {"id": 6054500, "category_id": 3, "iscrowd": 0, "bbox": [308, 236, 45, 14], "area": 276}, {"id": 3027770, "category_id": 3, "iscrowd": 0, "bbox": [266, 242, 42, 20], "area": 632}, {"id": 12300708, "category_id": 3, "iscrowd": 0, "bbox": [89, 253, 17, 16], "area": 145}, {"id": 6185578, "category_id": 3, "iscrowd": 0, "bbox": [305, 242, 70, 31], "area": 1666}, {"id": 5263959, "category_id": 3, "iscrowd": 0, "bbox": [201, 237, 26, 20], "area": 386}, {"id": 3225922, "category_id": 3, "iscrowd": 0, "bbox": [131, 245, 8, 9], "area": 50}, {"id": 8689063, "category_id": 149, "iscrowd": 0, "bbox": [98, 245, 277, 255], "area": 48645}, {"id": 16184821, "category_id": 187, "iscrowd": 0, "bbox": [16, 0, 221, 221], "area": 13862}, {"id": 7704230, "category_id": 191, "iscrowd": 0, "bbox": [0, 247, 273, 253], "area": 27284}, {"id": 5001042, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 375, 296], "area": 77805}], "file_name": "000000521141.png", "image_id": 521141}, {"segments_info": [{"id": 9281445, "category_id": 23, "iscrowd": 0, "bbox": [93, 166, 245, 291], "area": 52132}, {"id": 1852985, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 424, 309], "area": 95305}, {"id": 2188374, "category_id": 193, "iscrowd": 0, "bbox": [0, 206, 424, 251], "area": 30894}, {"id": 4999498, "category_id": 198, "iscrowd": 0, "bbox": [0, 363, 424, 277], "area": 92773}], "file_name": "000000521231.png", "image_id": 521231}, {"segments_info": [{"id": 8158332, "category_id": 1, "iscrowd": 0, "bbox": [193, 142, 17, 23], "area": 167}, {"id": 7697013, "category_id": 1, "iscrowd": 0, "bbox": [212, 139, 15, 38], "area": 381}, {"id": 6910849, "category_id": 1, "iscrowd": 0, "bbox": [291, 152, 60, 92], "area": 2252}, {"id": 11248802, "category_id": 1, "iscrowd": 0, "bbox": [42, 45, 226, 412], "area": 65969}, {"id": 9408145, "category_id": 1, "iscrowd": 0, "bbox": [329, 143, 18, 53], "area": 559}, {"id": 4671581, "category_id": 1, "iscrowd": 0, "bbox": [255, 152, 44, 86], "area": 933}, {"id": 9473681, "category_id": 1, "iscrowd": 0, "bbox": [353, 145, 13, 32], "area": 253}, {"id": 9403774, "category_id": 1, "iscrowd": 0, "bbox": [225, 141, 15, 47], "area": 535}, {"id": 9868951, "category_id": 1, "iscrowd": 0, "bbox": [82, 139, 11, 25], "area": 147}, {"id": 9144726, "category_id": 1, "iscrowd": 0, "bbox": [30, 177, 41, 243], "area": 3316}, {"id": 4155778, "category_id": 1, "iscrowd": 0, "bbox": [404, 37, 126, 331], "area": 20444}, {"id": 6648198, "category_id": 1, "iscrowd": 0, "bbox": [240, 138, 20, 64], "area": 763}, {"id": 4219259, "category_id": 1, "iscrowd": 0, "bbox": [519, 95, 80, 203], "area": 8775}, {"id": 6255230, "category_id": 1, "iscrowd": 1, "bbox": [0, 126, 631, 105], "area": 6217}, {"id": 8088670, "category_id": 8, "iscrowd": 0, "bbox": [0, 121, 59, 94], "area": 3548}, {"id": 8619657, "category_id": 34, "iscrowd": 0, "bbox": [574, 192, 26, 22], "area": 397}, {"id": 12898521, "category_id": 34, "iscrowd": 0, "bbox": [487, 155, 38, 18], "area": 244}, {"id": 2482164, "category_id": 34, "iscrowd": 0, "bbox": [271, 167, 29, 30], "area": 696}, {"id": 9150127, "category_id": 34, "iscrowd": 0, "bbox": [409, 126, 52, 22], "area": 759}, {"id": 8492721, "category_id": 178, "iscrowd": 0, "bbox": [258, 265, 213, 27], "area": 3413}, {"id": 1980975, "category_id": 184, "iscrowd": 0, "bbox": [267, 0, 373, 164], "area": 32580}, {"id": 14269068, "category_id": 187, "iscrowd": 0, "bbox": [287, 0, 154, 58], "area": 6353}, {"id": 5670797, "category_id": 193, "iscrowd": 0, "bbox": [0, 152, 640, 108], "area": 5160}, {"id": 7375528, "category_id": 194, "iscrowd": 0, "bbox": [0, 134, 640, 323], "area": 89416}, {"id": 4094108, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 167], "area": 35962}, {"id": 6583923, "category_id": 199, "iscrowd": 0, "bbox": [303, 119, 54, 58], "area": 997}], "file_name": "000000521259.png", "image_id": 521259}, {"segments_info": [{"id": 2571316, "category_id": 86, "iscrowd": 0, "bbox": [69, 298, 217, 331], "area": 59888}, {"id": 4157814, "category_id": 119, "iscrowd": 0, "bbox": [10, 64, 363, 256], "area": 65446}, {"id": 5594724, "category_id": 189, "iscrowd": 0, "bbox": [0, 610, 304, 30], "area": 4406}, {"id": 6647933, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 424, 640], "area": 118020}], "file_name": "000000521282.png", "image_id": 521282}, {"segments_info": [{"id": 5271689, "category_id": 81, "iscrowd": 0, "bbox": [0, 211, 426, 426], "area": 65283}, {"id": 9608349, "category_id": 90, "iscrowd": 0, "bbox": [0, 180, 305, 222], "area": 17376}, {"id": 5732495, "category_id": 189, "iscrowd": 0, "bbox": [0, 560, 426, 80], "area": 2475}, {"id": 4946325, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 426, 289], "area": 32837}], "file_name": "000000521405.png", "image_id": 521405}, {"segments_info": [{"id": 3160148, "category_id": 1, "iscrowd": 0, "bbox": [151, 186, 116, 184], "area": 10295}, {"id": 2371130, "category_id": 64, "iscrowd": 0, "bbox": [253, 13, 48, 36], "area": 1144}, {"id": 2568769, "category_id": 64, "iscrowd": 0, "bbox": [389, 11, 54, 40], "area": 1649}, {"id": 2436665, "category_id": 64, "iscrowd": 0, "bbox": [326, 24, 36, 26], "area": 749}, {"id": 4083041, "category_id": 65, "iscrowd": 0, "bbox": [123, 267, 353, 153], "area": 22343}, {"id": 3424338, "category_id": 86, "iscrowd": 0, "bbox": [136, 354, 63, 73], "area": 3183}, {"id": 3424335, "category_id": 86, "iscrowd": 0, "bbox": [210, 33, 22, 18], "area": 250}, {"id": 3687253, "category_id": 86, "iscrowd": 0, "bbox": [171, 326, 57, 96], "area": 2876}, {"id": 2898001, "category_id": 93, "iscrowd": 0, "bbox": [150, 339, 99, 60], "area": 342}, {"id": 10664909, "category_id": 109, "iscrowd": 0, "bbox": [537, 0, 103, 310], "area": 25077}, {"id": 2238519, "category_id": 119, "iscrowd": 0, "bbox": [85, 14, 155, 40], "area": 2227}, {"id": 5331816, "category_id": 130, "iscrowd": 0, "bbox": [80, 204, 414, 118], "area": 6407}, {"id": 2633789, "category_id": 133, "iscrowd": 0, "bbox": [26, 272, 22, 40], "area": 734}, {"id": 2239299, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 34, 342], "area": 9073}, {"id": 2501946, "category_id": 184, "iscrowd": 0, "bbox": [373, 3, 74, 49], "area": 702}, {"id": 3094339, "category_id": 186, "iscrowd": 0, "bbox": [51, 0, 462, 17], "area": 6788}, {"id": 2766674, "category_id": 188, "iscrowd": 0, "bbox": [411, 284, 105, 110], "area": 6330}, {"id": 2437445, "category_id": 189, "iscrowd": 0, "bbox": [524, 392, 38, 14], "area": 408}, {"id": 4148568, "category_id": 199, "iscrowd": 0, "bbox": [16, 0, 615, 395], "area": 115887}], "file_name": "000000521509.png", "image_id": 521509}, {"segments_info": [{"id": 6778230, "category_id": 50, "iscrowd": 0, "bbox": [37, 285, 166, 195], "area": 3357}, {"id": 9418703, "category_id": 52, "iscrowd": 0, "bbox": [40, 68, 408, 403], "area": 76334}, {"id": 11121083, "category_id": 67, "iscrowd": 0, "bbox": [2, 1, 638, 473], "area": 221906}], "file_name": "000000521540.png", "image_id": 521540}, {"segments_info": [{"id": 7768722, "category_id": 51, "iscrowd": 0, "bbox": [0, 0, 636, 474], "area": 268173}, {"id": 1385802, "category_id": 60, "iscrowd": 0, "bbox": [221, 261, 182, 175], "area": 24385}], "file_name": "000000521601.png", "image_id": 521601}, {"segments_info": [{"id": 9394195, "category_id": 1, "iscrowd": 0, "bbox": [294, 77, 73, 141], "area": 5597}, {"id": 8615029, "category_id": 1, "iscrowd": 0, "bbox": [210, 181, 89, 184], "area": 5144}, {"id": 6452311, "category_id": 1, "iscrowd": 0, "bbox": [359, 21, 51, 171], "area": 5992}, {"id": 10265519, "category_id": 37, "iscrowd": 0, "bbox": [199, 156, 16, 17], "area": 226}, {"id": 7170722, "category_id": 43, "iscrowd": 0, "bbox": [202, 177, 43, 31], "area": 118}, {"id": 5776908, "category_id": 62, "iscrowd": 0, "bbox": [439, 96, 52, 68], "area": 1848}, {"id": 15385185, "category_id": 145, "iscrowd": 0, "bbox": [0, 152, 640, 274], "area": 133050}, {"id": 12303801, "category_id": 197, "iscrowd": 0, "bbox": [0, 377, 240, 49], "area": 8418}, {"id": 8012812, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 240], "area": 111798}], "file_name": "000000521717.png", "image_id": 521717}, {"segments_info": [{"id": 14407901, "category_id": 28, "iscrowd": 0, "bbox": [154, 575, 179, 65], "area": 7684}, {"id": 7115802, "category_id": 38, "iscrowd": 0, "bbox": [117, 135, 44, 123], "area": 1958}, {"id": 6840399, "category_id": 38, "iscrowd": 0, "bbox": [145, 142, 130, 247], "area": 11805}, {"id": 3819612, "category_id": 38, "iscrowd": 0, "bbox": [1, 154, 91, 236], "area": 13238}, {"id": 9874071, "category_id": 38, "iscrowd": 0, "bbox": [292, 230, 125, 358], "area": 8448}, {"id": 7758986, "category_id": 38, "iscrowd": 0, "bbox": [242, 66, 92, 361], "area": 12532}, {"id": 2567517, "category_id": 38, "iscrowd": 0, "bbox": [135, 63, 87, 100], "area": 5611}, {"id": 6124422, "category_id": 38, "iscrowd": 0, "bbox": [56, 9, 81, 315], "area": 16267}, {"id": 2699838, "category_id": 171, "iscrowd": 0, "bbox": [0, 373, 427, 267], "area": 51017}, {"id": 5662557, "category_id": 184, "iscrowd": 0, "bbox": [321, 0, 106, 46], "area": 3239}, {"id": 3553590, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 417, 150], "area": 30030}, {"id": 5792920, "category_id": 190, "iscrowd": 0, "bbox": [0, 623, 160, 17], "area": 718}, {"id": 2569048, "category_id": 191, "iscrowd": 0, "bbox": [0, 578, 86, 62], "area": 1279}, {"id": 8823212, "category_id": 195, "iscrowd": 0, "bbox": [0, 432, 368, 91], "area": 3487}, {"id": 14210770, "category_id": 197, "iscrowd": 0, "bbox": [387, 85, 40, 91], "area": 2705}], "file_name": "000000521719.png", "image_id": 521719}, {"segments_info": [{"id": 5267558, "category_id": 1, "iscrowd": 0, "bbox": [362, 304, 57, 118], "area": 3648}, {"id": 7695460, "category_id": 1, "iscrowd": 0, "bbox": [218, 268, 58, 154], "area": 3298}, {"id": 4144708, "category_id": 1, "iscrowd": 0, "bbox": [195, 271, 49, 141], "area": 2776}, {"id": 5860148, "category_id": 1, "iscrowd": 0, "bbox": [106, 284, 57, 137], "area": 4152}, {"id": 10262177, "category_id": 1, "iscrowd": 0, "bbox": [291, 276, 59, 144], "area": 2743}, {"id": 5395299, "category_id": 1, "iscrowd": 0, "bbox": [181, 335, 28, 64], "area": 647}, {"id": 10592430, "category_id": 1, "iscrowd": 0, "bbox": [259, 266, 57, 158], "area": 3613}, {"id": 3487805, "category_id": 1, "iscrowd": 0, "bbox": [333, 312, 35, 105], "area": 2206}, {"id": 5787988, "category_id": 1, "iscrowd": 0, "bbox": [531, 291, 34, 130], "area": 2722}, {"id": 9076906, "category_id": 3, "iscrowd": 0, "bbox": [559, 361, 43, 27], "area": 837}, {"id": 6840672, "category_id": 3, "iscrowd": 0, "bbox": [490, 359, 37, 27], "area": 718}, {"id": 9210507, "category_id": 3, "iscrowd": 0, "bbox": [105, 372, 16, 14], "area": 186}, {"id": 6053474, "category_id": 3, "iscrowd": 0, "bbox": [76, 374, 16, 13], "area": 163}, {"id": 12040378, "category_id": 34, "iscrowd": 0, "bbox": [235, 256, 21, 7], "area": 105}, {"id": 4741458, "category_id": 184, "iscrowd": 0, "bbox": [0, 32, 640, 368], "area": 145211}, {"id": 16645629, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 257], "area": 79170}, {"id": 4890502, "category_id": 193, "iscrowd": 0, "bbox": [0, 374, 640, 106], "area": 54029}], "file_name": "000000521819.png", "image_id": 521819}, {"segments_info": [{"id": 9003578, "category_id": 1, "iscrowd": 0, "bbox": [0, 1, 346, 325], "area": 47752}, {"id": 3747153, "category_id": 43, "iscrowd": 0, "bbox": [17, 1, 33, 189], "area": 3579}, {"id": 13470742, "category_id": 145, "iscrowd": 0, "bbox": [0, 37, 500, 293], "area": 80652}, {"id": 1050626, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 118], "area": 31691}], "file_name": "000000521956.png", "image_id": 521956}, {"segments_info": [{"id": 10265770, "category_id": 47, "iscrowd": 0, "bbox": [109, 338, 25, 17], "area": 350}, {"id": 9997195, "category_id": 47, "iscrowd": 0, "bbox": [84, 338, 22, 20], "area": 212}, {"id": 4019588, "category_id": 51, "iscrowd": 0, "bbox": [85, 338, 21, 19], "area": 133}, {"id": 5590418, "category_id": 51, "iscrowd": 0, "bbox": [0, 365, 60, 84], "area": 3837}, {"id": 3290230, "category_id": 53, "iscrowd": 0, "bbox": [1, 202, 45, 40], "area": 1426}, {"id": 3629916, "category_id": 64, "iscrowd": 0, "bbox": [39, 0, 165, 334], "area": 27388}, {"id": 7892842, "category_id": 78, "iscrowd": 0, "bbox": [537, 300, 103, 124], "area": 9488}, {"id": 8157303, "category_id": 79, "iscrowd": 0, "bbox": [396, 332, 142, 140], "area": 12055}, {"id": 5987426, "category_id": 81, "iscrowd": 0, "bbox": [85, 322, 54, 37], "area": 881}, {"id": 6909036, "category_id": 107, "iscrowd": 0, "bbox": [356, 284, 156, 60], "area": 4505}, {"id": 8026750, "category_id": 112, "iscrowd": 0, "bbox": [129, 90, 41, 278], "area": 4172}, {"id": 1780801, "category_id": 118, "iscrowd": 0, "bbox": [163, 375, 95, 92], "area": 6309}, {"id": 4547456, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 205, 480], "area": 22895}, {"id": 7957356, "category_id": 168, "iscrowd": 0, "bbox": [123, 286, 345, 194], "area": 1206}, {"id": 5399399, "category_id": 176, "iscrowd": 0, "bbox": [75, 197, 565, 258], "area": 14908}, {"id": 3695189, "category_id": 184, "iscrowd": 0, "bbox": [87, 0, 107, 6], "area": 462}, {"id": 7436159, "category_id": 188, "iscrowd": 0, "bbox": [87, 20, 376, 460], "area": 56473}, {"id": 6383466, "category_id": 190, "iscrowd": 0, "bbox": [178, 440, 146, 40], "area": 3395}, {"id": 13153720, "category_id": 195, "iscrowd": 0, "bbox": [0, 298, 59, 86], "area": 3772}, {"id": 6976633, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 486, 454], "area": 32871}], "file_name": "000000522007.png", "image_id": 522007}, {"segments_info": [{"id": 4680067, "category_id": 59, "iscrowd": 0, "bbox": [195, 38, 431, 319], "area": 85483}, {"id": 2769719, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 320, 286], "area": 56318}], "file_name": "000000522156.png", "image_id": 522156}, {"segments_info": [{"id": 5458056, "category_id": 1, "iscrowd": 0, "bbox": [313, 504, 37, 33], "area": 674}, {"id": 6249582, "category_id": 1, "iscrowd": 0, "bbox": [375, 450, 34, 76], "area": 1480}, {"id": 993092, "category_id": 9, "iscrowd": 0, "bbox": [285, 527, 164, 61], "area": 7999}, {"id": 789530, "category_id": 77, "iscrowd": 0, "bbox": [397, 465, 3, 3], "area": 8}, {"id": 5982252, "category_id": 155, "iscrowd": 0, "bbox": [0, 418, 640, 222], "area": 108117}, {"id": 12038830, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 370], "area": 196762}, {"id": 7890779, "category_id": 192, "iscrowd": 0, "bbox": [0, 357, 640, 69], "area": 25422}], "file_name": "000000522393.png", "image_id": 522393}, {"segments_info": [{"id": 1856375, "category_id": 88, "iscrowd": 0, "bbox": [0, 0, 383, 423], "area": 146034}, {"id": 9353411, "category_id": 199, "iscrowd": 0, "bbox": [376, 0, 264, 428], "area": 66510}], "file_name": "000000522638.png", "image_id": 522638}, {"segments_info": [{"id": 4666926, "category_id": 1, "iscrowd": 0, "bbox": [491, 269, 3, 4], "area": 9}, {"id": 4409172, "category_id": 1, "iscrowd": 0, "bbox": [307, 278, 10, 10], "area": 57}, {"id": 9802386, "category_id": 9, "iscrowd": 0, "bbox": [406, 252, 13, 18], "area": 80}, {"id": 7631987, "category_id": 9, "iscrowd": 0, "bbox": [510, 266, 12, 5], "area": 43}, {"id": 8223084, "category_id": 9, "iscrowd": 0, "bbox": [393, 272, 15, 3], "area": 45}, {"id": 6905687, "category_id": 9, "iscrowd": 0, "bbox": [385, 248, 14, 24], "area": 117}, {"id": 6446684, "category_id": 9, "iscrowd": 0, "bbox": [523, 258, 1, 3], "area": 3}, {"id": 8747376, "category_id": 9, "iscrowd": 0, "bbox": [438, 264, 10, 3], "area": 27}, {"id": 3683118, "category_id": 9, "iscrowd": 0, "bbox": [481, 270, 21, 5], "area": 47}, {"id": 7828598, "category_id": 9, "iscrowd": 0, "bbox": [514, 252, 16, 23], "area": 120}, {"id": 7498331, "category_id": 9, "iscrowd": 0, "bbox": [439, 263, 29, 8], "area": 122}, {"id": 9604488, "category_id": 9, "iscrowd": 0, "bbox": [360, 268, 16, 6], "area": 72}, {"id": 1910568, "category_id": 15, "iscrowd": 0, "bbox": [410, 284, 151, 71], "area": 6984}, {"id": 6056307, "category_id": 154, "iscrowd": 0, "bbox": [0, 269, 527, 35], "area": 5557}, {"id": 7497822, "category_id": 155, "iscrowd": 0, "bbox": [0, 246, 640, 59], "area": 16257}, {"id": 13020315, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 256], "area": 160455}, {"id": 3751487, "category_id": 192, "iscrowd": 0, "bbox": [84, 237, 556, 28], "area": 2347}, {"id": 2838598, "category_id": 193, "iscrowd": 0, "bbox": [0, 272, 640, 208], "area": 114471}, {"id": 2106406, "category_id": 198, "iscrowd": 0, "bbox": [121, 269, 31, 8], "area": 190}], "file_name": "000000522713.png", "image_id": 522713}, {"segments_info": [{"id": 3301484, "category_id": 10, "iscrowd": 0, "bbox": [620, 311, 17, 14], "area": 200}, {"id": 4615542, "category_id": 10, "iscrowd": 0, "bbox": [262, 270, 14, 32], "area": 340}, {"id": 2778740, "category_id": 10, "iscrowd": 0, "bbox": [582, 313, 16, 13], "area": 160}, {"id": 4045014, "category_id": 10, "iscrowd": 0, "bbox": [207, 5, 135, 103], "area": 9552}, {"id": 5409696, "category_id": 10, "iscrowd": 0, "bbox": [473, 201, 23, 42], "area": 846}, {"id": 3515846, "category_id": 10, "iscrowd": 0, "bbox": [1, 44, 99, 90], "area": 7457}, {"id": 5205597, "category_id": 184, "iscrowd": 0, "bbox": [0, 210, 634, 125], "area": 27783}, {"id": 13937788, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 316], "area": 130269}, {"id": 8091494, "category_id": 197, "iscrowd": 0, "bbox": [30, 0, 610, 335], "area": 35847}], "file_name": "000000522751.png", "image_id": 522751}, {"segments_info": [{"id": 6578012, "category_id": 1, "iscrowd": 0, "bbox": [149, 204, 209, 409], "area": 30216}, {"id": 6714756, "category_id": 1, "iscrowd": 0, "bbox": [236, 17, 107, 190], "area": 10533}, {"id": 5200232, "category_id": 1, "iscrowd": 0, "bbox": [214, 0, 77, 178], "area": 4594}, {"id": 9009244, "category_id": 43, "iscrowd": 0, "bbox": [66, 149, 88, 101], "area": 2573}, {"id": 1511175, "category_id": 62, "iscrowd": 0, "bbox": [382, 146, 28, 26], "area": 518}, {"id": 9729045, "category_id": 62, "iscrowd": 0, "bbox": [338, 87, 75, 84], "area": 2163}, {"id": 11634200, "category_id": 145, "iscrowd": 0, "bbox": [0, 109, 424, 531], "area": 171792}, {"id": 7886877, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 424, 185], "area": 33956}], "file_name": "000000522889.png", "image_id": 522889}, {"segments_info": [{"id": 3223191, "category_id": 13, "iscrowd": 0, "bbox": [9, 17, 359, 367], "area": 107238}, {"id": 7300444, "category_id": 128, "iscrowd": 0, "bbox": [34, 311, 26, 22], "area": 309}, {"id": 6516083, "category_id": 149, "iscrowd": 0, "bbox": [0, 406, 511, 234], "area": 46628}, {"id": 12763327, "category_id": 159, "iscrowd": 0, "bbox": [0, 213, 511, 427], "area": 21098}, {"id": 2962495, "category_id": 184, "iscrowd": 0, "bbox": [0, 307, 511, 257], "area": 52086}, {"id": 14539222, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 511, 238], "area": 52684}, {"id": 3682601, "category_id": 192, "iscrowd": 0, "bbox": [0, 214, 511, 217], "area": 25436}], "file_name": "000000522940.png", "image_id": 522940}, {"segments_info": [{"id": 4999755, "category_id": 1, "iscrowd": 0, "bbox": [565, 190, 24, 16], "area": 155}, {"id": 3420971, "category_id": 1, "iscrowd": 0, "bbox": [288, 176, 14, 11], "area": 61}, {"id": 7234132, "category_id": 1, "iscrowd": 0, "bbox": [32, 160, 12, 16], "area": 131}, {"id": 6841692, "category_id": 42, "iscrowd": 0, "bbox": [290, 186, 15, 5], "area": 50}, {"id": 11514548, "category_id": 42, "iscrowd": 0, "bbox": [578, 202, 10, 4], "area": 16}, {"id": 11577758, "category_id": 155, "iscrowd": 0, "bbox": [0, 116, 640, 311], "area": 196335}, {"id": 14407371, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 120], "area": 76474}], "file_name": "000000523033.png", "image_id": 523033}, {"segments_info": [{"id": 1517646, "category_id": 1, "iscrowd": 0, "bbox": [252, 27, 228, 235], "area": 26075}, {"id": 2638420, "category_id": 44, "iscrowd": 0, "bbox": [201, 78, 28, 98], "area": 1461}, {"id": 3689817, "category_id": 44, "iscrowd": 0, "bbox": [154, 87, 33, 91], "area": 1913}, {"id": 4084840, "category_id": 44, "iscrowd": 0, "bbox": [186, 120, 27, 48], "area": 871}, {"id": 4019047, "category_id": 51, "iscrowd": 0, "bbox": [1, 327, 478, 300], "area": 44943}, {"id": 938631, "category_id": 55, "iscrowd": 0, "bbox": [227, 230, 111, 97], "area": 8174}, {"id": 1330299, "category_id": 55, "iscrowd": 0, "bbox": [84, 248, 111, 87], "area": 7989}, {"id": 3704735, "category_id": 55, "iscrowd": 0, "bbox": [128, 211, 22, 25], "area": 249}, {"id": 1139096, "category_id": 55, "iscrowd": 0, "bbox": [2, 377, 474, 255], "area": 90623}, {"id": 9085355, "category_id": 79, "iscrowd": 0, "bbox": [0, 80, 162, 155], "area": 19013}, {"id": 3493732, "category_id": 112, "iscrowd": 0, "bbox": [395, 0, 35, 128], "area": 3301}, {"id": 1527159, "category_id": 122, "iscrowd": 0, "bbox": [0, 193, 480, 447], "area": 12998}, {"id": 7110796, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 220, 144], "area": 15350}, {"id": 1976628, "category_id": 177, "iscrowd": 0, "bbox": [326, 0, 24, 21], "area": 334}, {"id": 1520986, "category_id": 188, "iscrowd": 0, "bbox": [107, 0, 139, 69], "area": 5486}, {"id": 1450041, "category_id": 189, "iscrowd": 0, "bbox": [0, 235, 467, 131], "area": 14936}, {"id": 1846593, "category_id": 190, "iscrowd": 0, "bbox": [430, 247, 50, 149], "area": 3759}, {"id": 2240831, "category_id": 199, "iscrowd": 0, "bbox": [242, 0, 238, 135], "area": 12500}], "file_name": "000000523100.png", "image_id": 523100}, {"segments_info": [{"id": 3814781, "category_id": 50, "iscrowd": 0, "bbox": [72, 72, 402, 237], "area": 12240}, {"id": 10990287, "category_id": 51, "iscrowd": 0, "bbox": [2, 0, 494, 370], "area": 41005}, {"id": 941774, "category_id": 57, "iscrowd": 0, "bbox": [131, 210, 68, 54], "area": 2491}, {"id": 1399743, "category_id": 57, "iscrowd": 0, "bbox": [276, 269, 71, 60], "area": 2979}, {"id": 1332149, "category_id": 57, "iscrowd": 0, "bbox": [342, 187, 30, 50], "area": 1211}, {"id": 7763599, "category_id": 67, "iscrowd": 0, "bbox": [0, 1, 500, 250], "area": 15005}, {"id": 3302314, "category_id": 196, "iscrowd": 0, "bbox": [0, 53, 410, 322], "area": 101191}], "file_name": "000000523175.png", "image_id": 523175}, {"segments_info": [{"id": 1737131, "category_id": 11, "iscrowd": 0, "bbox": [176, 242, 31, 68], "area": 1331}, {"id": 4609987, "category_id": 13, "iscrowd": 0, "bbox": [527, 89, 58, 51], "area": 1678}, {"id": 8291713, "category_id": 149, "iscrowd": 0, "bbox": [0, 333, 640, 92], "area": 47837}, {"id": 9150627, "category_id": 191, "iscrowd": 0, "bbox": [0, 307, 640, 59], "area": 20395}, {"id": 3443072, "category_id": 193, "iscrowd": 0, "bbox": [0, 283, 640, 46], "area": 11036}, {"id": 3890276, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 312], "area": 189637}], "file_name": "000000523194.png", "image_id": 523194}, {"segments_info": [{"id": 8884105, "category_id": 70, "iscrowd": 0, "bbox": [81, 292, 306, 348], "area": 75139}, {"id": 5527899, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 156844}], "file_name": "000000523229.png", "image_id": 523229}, {"segments_info": [{"id": 5132371, "category_id": 3, "iscrowd": 0, "bbox": [474, 204, 26, 15], "area": 272}, {"id": 5987935, "category_id": 3, "iscrowd": 0, "bbox": [44, 199, 99, 30], "area": 2041}, {"id": 5856608, "category_id": 3, "iscrowd": 0, "bbox": [295, 201, 15, 8], "area": 65}, {"id": 3363681, "category_id": 3, "iscrowd": 0, "bbox": [364, 203, 115, 33], "area": 2697}, {"id": 3618870, "category_id": 3, "iscrowd": 0, "bbox": [307, 203, 18, 8], "area": 98}, {"id": 5264996, "category_id": 8, "iscrowd": 0, "bbox": [166, 176, 43, 43], "area": 1563}, {"id": 6187632, "category_id": 8, "iscrowd": 0, "bbox": [324, 186, 64, 32], "area": 1601}, {"id": 1907772, "category_id": 10, "iscrowd": 0, "bbox": [203, 179, 4, 8], "area": 26}, {"id": 3367566, "category_id": 10, "iscrowd": 0, "bbox": [389, 169, 5, 8], "area": 29}, {"id": 3028543, "category_id": 10, "iscrowd": 0, "bbox": [201, 157, 8, 22], "area": 133}, {"id": 2434600, "category_id": 149, "iscrowd": 0, "bbox": [0, 204, 500, 129], "area": 47999}, {"id": 6712178, "category_id": 184, "iscrowd": 0, "bbox": [47, 0, 453, 199], "area": 9491}, {"id": 14145753, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 194], "area": 67445}, {"id": 2831158, "category_id": 191, "iscrowd": 0, "bbox": [0, 200, 184, 24], "area": 957}, {"id": 3555402, "category_id": 197, "iscrowd": 0, "bbox": [0, 157, 500, 66], "area": 9717}], "file_name": "000000523241.png", "image_id": 523241}, {"segments_info": [{"id": 8028542, "category_id": 8, "iscrowd": 0, "bbox": [4, 30, 636, 443], "area": 215742}, {"id": 5198923, "category_id": 8, "iscrowd": 0, "bbox": [208, 1, 432, 185], "area": 62631}, {"id": 6122393, "category_id": 16, "iscrowd": 0, "bbox": [260, 224, 68, 21], "area": 630}, {"id": 8490380, "category_id": 149, "iscrowd": 0, "bbox": [348, 150, 292, 194], "area": 6565}, {"id": 6450568, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 554, 262], "area": 11584}, {"id": 5994097, "category_id": 193, "iscrowd": 0, "bbox": [485, 141, 155, 37], "area": 3143}], "file_name": "000000523782.png", "image_id": 523782}, {"segments_info": [{"id": 463675, "category_id": 1, "iscrowd": 0, "bbox": [130, 202, 219, 169], "area": 12713}, {"id": 1122883, "category_id": 1, "iscrowd": 0, "bbox": [410, 76, 90, 295], "area": 14945}, {"id": 2969991, "category_id": 44, "iscrowd": 0, "bbox": [125, 254, 85, 121], "area": 7455}, {"id": 2703974, "category_id": 44, "iscrowd": 0, "bbox": [18, 256, 104, 119], "area": 8004}, {"id": 796512, "category_id": 44, "iscrowd": 0, "bbox": [364, 265, 77, 106], "area": 5446}, {"id": 2709657, "category_id": 58, "iscrowd": 0, "bbox": [85, 136, 322, 177], "area": 26444}, {"id": 729146, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 47, 184], "area": 4425}, {"id": 1452358, "category_id": 190, "iscrowd": 0, "bbox": [0, 90, 164, 285], "area": 10239}, {"id": 4350862, "category_id": 195, "iscrowd": 0, "bbox": [42, 0, 324, 310], "area": 11858}, {"id": 1257298, "category_id": 196, "iscrowd": 0, "bbox": [202, 235, 272, 114], "area": 3572}], "file_name": "000000523807.png", "image_id": 523807}, {"segments_info": [{"id": 6583936, "category_id": 16, "iscrowd": 0, "bbox": [107, 178, 98, 129], "area": 4293}, {"id": 9475736, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 640, 464], "area": 157343}, {"id": 6846623, "category_id": 171, "iscrowd": 0, "bbox": [0, 36, 488, 444], "area": 47413}, {"id": 8362645, "category_id": 184, "iscrowd": 0, "bbox": [126, 88, 488, 370], "area": 16932}, {"id": 11515064, "category_id": 197, "iscrowd": 0, "bbox": [0, 66, 176, 277], "area": 14882}], "file_name": "000000523811.png", "image_id": 523811}, {"segments_info": [{"id": 5593958, "category_id": 1, "iscrowd": 0, "bbox": [56, 82, 260, 272], "area": 19533}, {"id": 5264518, "category_id": 1, "iscrowd": 0, "bbox": [33, 311, 21, 29], "area": 229}, {"id": 4539208, "category_id": 1, "iscrowd": 0, "bbox": [428, 185, 30, 65], "area": 1177}, {"id": 5200230, "category_id": 1, "iscrowd": 0, "bbox": [78, 302, 18, 37], "area": 245}, {"id": 6710117, "category_id": 1, "iscrowd": 0, "bbox": [434, 234, 37, 52], "area": 1124}, {"id": 2895156, "category_id": 1, "iscrowd": 0, "bbox": [81, 299, 37, 44], "area": 795}, {"id": 4079684, "category_id": 1, "iscrowd": 0, "bbox": [453, 169, 37, 99], "area": 2172}, {"id": 3356995, "category_id": 1, "iscrowd": 0, "bbox": [119, 267, 24, 69], "area": 767}, {"id": 5724785, "category_id": 1, "iscrowd": 0, "bbox": [344, 169, 61, 170], "area": 6829}, {"id": 2369065, "category_id": 1, "iscrowd": 0, "bbox": [518, 213, 40, 43], "area": 770}, {"id": 5394776, "category_id": 1, "iscrowd": 0, "bbox": [45, 304, 26, 39], "area": 499}, {"id": 3561813, "category_id": 41, "iscrowd": 0, "bbox": [214, 334, 56, 29], "area": 1061}, {"id": 5398630, "category_id": 41, "iscrowd": 0, "bbox": [126, 291, 21, 25], "area": 207}, {"id": 7306118, "category_id": 149, "iscrowd": 0, "bbox": [0, 324, 640, 103], "area": 44842}, {"id": 14604759, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 276], "area": 121296}, {"id": 11187387, "category_id": 191, "iscrowd": 0, "bbox": [10, 369, 239, 58], "area": 4761}, {"id": 6778741, "category_id": 192, "iscrowd": 0, "bbox": [0, 103, 291, 236], "area": 28720}, {"id": 3233628, "category_id": 193, "iscrowd": 0, "bbox": [113, 231, 527, 97], "area": 17797}, {"id": 5730435, "category_id": 194, "iscrowd": 0, "bbox": [0, 286, 595, 141], "area": 7317}, {"id": 6585228, "category_id": 198, "iscrowd": 0, "bbox": [32, 299, 608, 47], "area": 9548}], "file_name": "000000523957.png", "image_id": 523957}, {"segments_info": [{"id": 6643803, "category_id": 4, "iscrowd": 0, "bbox": [156, 46, 283, 74], "area": 10418}, {"id": 5196617, "category_id": 4, "iscrowd": 0, "bbox": [91, 8, 282, 114], "area": 8566}, {"id": 3354417, "category_id": 4, "iscrowd": 0, "bbox": [3, 4, 118, 141], "area": 11362}, {"id": 3486770, "category_id": 4, "iscrowd": 0, "bbox": [591, 76, 49, 168], "area": 4690}, {"id": 4407871, "category_id": 4, "iscrowd": 0, "bbox": [78, 58, 562, 338], "area": 60781}, {"id": 5261893, "category_id": 4, "iscrowd": 0, "bbox": [122, 22, 195, 29], "area": 2727}, {"id": 5920341, "category_id": 4, "iscrowd": 0, "bbox": [130, 5, 154, 32], "area": 2669}, {"id": 4276028, "category_id": 4, "iscrowd": 0, "bbox": [2, 107, 527, 289], "area": 99757}, {"id": 4472892, "category_id": 4, "iscrowd": 0, "bbox": [263, 0, 151, 54], "area": 3826}, {"id": 4671043, "category_id": 4, "iscrowd": 0, "bbox": [495, 136, 135, 125], "area": 9498}, {"id": 2893348, "category_id": 4, "iscrowd": 0, "bbox": [553, 33, 83, 116], "area": 5206}, {"id": 4078391, "category_id": 4, "iscrowd": 0, "bbox": [424, 19, 101, 61], "area": 3968}, {"id": 3422266, "category_id": 149, "iscrowd": 0, "bbox": [623, 224, 17, 99], "area": 600}, {"id": 8291978, "category_id": 199, "iscrowd": 0, "bbox": [193, 0, 82, 37], "area": 1032}], "file_name": "000000524108.png", "image_id": 524108}, {"segments_info": [{"id": 3821923, "category_id": 17, "iscrowd": 0, "bbox": [73, 12, 567, 620], "area": 264973}, {"id": 4620912, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 640], "area": 67229}, {"id": 14600627, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 64339}], "file_name": "000000524280.png", "image_id": 524280}, {"segments_info": [{"id": 4738907, "category_id": 1, "iscrowd": 0, "bbox": [127, 0, 509, 298], "area": 90884}, {"id": 5199204, "category_id": 1, "iscrowd": 0, "bbox": [376, 270, 264, 181], "area": 27241}, {"id": 3747879, "category_id": 31, "iscrowd": 0, "bbox": [517, 122, 81, 84], "area": 4724}, {"id": 5789002, "category_id": 73, "iscrowd": 0, "bbox": [1, 3, 419, 255], "area": 22767}, {"id": 7959661, "category_id": 74, "iscrowd": 0, "bbox": [369, 351, 199, 81], "area": 8470}, {"id": 6774866, "category_id": 76, "iscrowd": 0, "bbox": [59, 83, 293, 159], "area": 22768}, {"id": 9355208, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 103167}, {"id": 16053229, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 456, 45], "area": 8522}], "file_name": "000000524456.png", "image_id": 524456}, {"segments_info": [{"id": 6841716, "category_id": 7, "iscrowd": 0, "bbox": [7, 0, 633, 480], "area": 240711}, {"id": 5198416, "category_id": 191, "iscrowd": 0, "bbox": [0, 249, 536, 231], "area": 60646}], "file_name": "000000524742.png", "image_id": 524742}, {"segments_info": [{"id": 6512232, "category_id": 1, "iscrowd": 0, "bbox": [414, 156, 23, 51], "area": 488}, {"id": 4342599, "category_id": 1, "iscrowd": 0, "bbox": [299, 153, 16, 55], "area": 488}, {"id": 5396579, "category_id": 1, "iscrowd": 0, "bbox": [383, 126, 17, 44], "area": 318}, {"id": 5922953, "category_id": 1, "iscrowd": 0, "bbox": [179, 104, 7, 23], "area": 95}, {"id": 5856352, "category_id": 1, "iscrowd": 0, "bbox": [403, 132, 15, 39], "area": 247}, {"id": 6779006, "category_id": 1, "iscrowd": 0, "bbox": [390, 162, 22, 59], "area": 580}, {"id": 5655884, "category_id": 1, "iscrowd": 0, "bbox": [411, 114, 13, 27], "area": 244}, {"id": 4079175, "category_id": 1, "iscrowd": 0, "bbox": [456, 170, 44, 66], "area": 847}, {"id": 4013898, "category_id": 1, "iscrowd": 0, "bbox": [440, 210, 37, 93], "area": 1263}, {"id": 6904150, "category_id": 1, "iscrowd": 0, "bbox": [349, 162, 26, 62], "area": 788}, {"id": 2304063, "category_id": 1, "iscrowd": 0, "bbox": [429, 170, 31, 57], "area": 757}, {"id": 2040358, "category_id": 1, "iscrowd": 0, "bbox": [234, 121, 18, 28], "area": 205}, {"id": 4865360, "category_id": 1, "iscrowd": 0, "bbox": [271, 145, 16, 45], "area": 380}, {"id": 5528931, "category_id": 1, "iscrowd": 1, "bbox": [122, 46, 318, 176], "area": 5888}, {"id": 8821655, "category_id": 5, "iscrowd": 0, "bbox": [490, 30, 10, 4], "area": 28}, {"id": 8159100, "category_id": 5, "iscrowd": 0, "bbox": [0, 20, 321, 293], "area": 58333}, {"id": 5594206, "category_id": 6, "iscrowd": 0, "bbox": [310, 83, 189, 94], "area": 9902}, {"id": 6712167, "category_id": 8, "iscrowd": 0, "bbox": [468, 47, 20, 12], "area": 154}, {"id": 7040613, "category_id": 8, "iscrowd": 0, "bbox": [485, 58, 15, 9], "area": 84}, {"id": 2501692, "category_id": 8, "iscrowd": 0, "bbox": [462, 58, 18, 9], "area": 138}, {"id": 1907999, "category_id": 27, "iscrowd": 0, "bbox": [459, 234, 19, 36], "area": 557}, {"id": 3817797, "category_id": 27, "iscrowd": 0, "bbox": [215, 119, 5, 10], "area": 39}, {"id": 2235673, "category_id": 27, "iscrowd": 0, "bbox": [408, 138, 8, 15], "area": 79}, {"id": 2565673, "category_id": 27, "iscrowd": 0, "bbox": [402, 171, 13, 22], "area": 187}, {"id": 2828846, "category_id": 27, "iscrowd": 0, "bbox": [389, 131, 10, 19], "area": 115}, {"id": 1908520, "category_id": 27, "iscrowd": 0, "bbox": [447, 178, 11, 19], "area": 36}, {"id": 5134686, "category_id": 27, "iscrowd": 0, "bbox": [233, 121, 5, 12], "area": 43}, {"id": 3751261, "category_id": 27, "iscrowd": 0, "bbox": [128, 126, 8, 8], "area": 38}, {"id": 4606544, "category_id": 27, "iscrowd": 0, "bbox": [247, 121, 4, 4], "area": 11}, {"id": 1184017, "category_id": 31, "iscrowd": 0, "bbox": [484, 182, 15, 29], "area": 224}, {"id": 3812132, "category_id": 31, "iscrowd": 0, "bbox": [268, 152, 9, 21], "area": 75}, {"id": 7830134, "category_id": 31, "iscrowd": 0, "bbox": [453, 198, 7, 16], "area": 87}, {"id": 2237219, "category_id": 31, "iscrowd": 0, "bbox": [344, 198, 12, 20], "area": 166}, {"id": 5660784, "category_id": 31, "iscrowd": 0, "bbox": [416, 167, 9, 11], "area": 70}, {"id": 1578263, "category_id": 31, "iscrowd": 0, "bbox": [278, 157, 6, 16], "area": 45}, {"id": 1446674, "category_id": 31, "iscrowd": 0, "bbox": [314, 178, 5, 8], "area": 35}, {"id": 5197401, "category_id": 31, "iscrowd": 0, "bbox": [449, 178, 8, 21], "area": 108}, {"id": 723466, "category_id": 33, "iscrowd": 0, "bbox": [365, 197, 15, 20], "area": 236}, {"id": 3617588, "category_id": 33, "iscrowd": 0, "bbox": [294, 184, 13, 34], "area": 291}, {"id": 14542560, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 56], "area": 23172}, {"id": 8755098, "category_id": 191, "iscrowd": 0, "bbox": [0, 40, 500, 279], "area": 49753}], "file_name": "000000524850.png", "image_id": 524850}, {"segments_info": [{"id": 1328013, "category_id": 62, "iscrowd": 0, "bbox": [305, 228, 33, 30], "area": 866}, {"id": 1385789, "category_id": 63, "iscrowd": 0, "bbox": [291, 228, 56, 49], "area": 775}, {"id": 724759, "category_id": 63, "iscrowd": 0, "bbox": [225, 228, 72, 78], "area": 3621}, {"id": 536445, "category_id": 67, "iscrowd": 0, "bbox": [413, 342, 203, 86], "area": 15842}, {"id": 592654, "category_id": 72, "iscrowd": 0, "bbox": [266, 222, 26, 15], "area": 375}, {"id": 5144746, "category_id": 78, "iscrowd": 0, "bbox": [90, 227, 59, 36], "area": 1576}, {"id": 1320244, "category_id": 81, "iscrowd": 0, "bbox": [0, 292, 56, 25], "area": 762}, {"id": 1388367, "category_id": 82, "iscrowd": 0, "bbox": [189, 164, 37, 184], "area": 6347}, {"id": 870542, "category_id": 100, "iscrowd": 0, "bbox": [96, 43, 47, 48], "area": 1108}, {"id": 1784668, "category_id": 107, "iscrowd": 0, "bbox": [0, 243, 185, 88], "area": 5003}, {"id": 1262205, "category_id": 112, "iscrowd": 0, "bbox": [438, 117, 141, 173], "area": 7941}, {"id": 678085, "category_id": 118, "iscrowd": 0, "bbox": [105, 284, 440, 144], "area": 33767}, {"id": 7382994, "category_id": 130, "iscrowd": 0, "bbox": [94, 0, 281, 143], "area": 1955}, {"id": 858153, "category_id": 156, "iscrowd": 0, "bbox": [534, 97, 88, 255], "area": 11717}, {"id": 527386, "category_id": 161, "iscrowd": 0, "bbox": [456, 110, 85, 177], "area": 5474}, {"id": 1064559, "category_id": 176, "iscrowd": 0, "bbox": [0, 208, 117, 48], "area": 3782}, {"id": 6727634, "category_id": 180, "iscrowd": 0, "bbox": [271, 132, 87, 78], "area": 4725}, {"id": 1390691, "category_id": 181, "iscrowd": 0, "bbox": [266, 202, 82, 37], "area": 1643}, {"id": 2913723, "category_id": 186, "iscrowd": 0, "bbox": [32, 0, 593, 141], "area": 56270}, {"id": 1335735, "category_id": 188, "iscrowd": 0, "bbox": [0, 15, 220, 413], "area": 51460}, {"id": 9024472, "category_id": 195, "iscrowd": 0, "bbox": [185, 204, 4, 25], "area": 89}, {"id": 3899319, "category_id": 199, "iscrowd": 0, "bbox": [209, 0, 431, 428], "area": 38161}, {"id": 338594, "category_id": 200, "iscrowd": 0, "bbox": [295, 276, 25, 21], "area": 398}], "file_name": "000000525083.png", "image_id": 525083}, {"segments_info": [{"id": 2434862, "category_id": 1, "iscrowd": 0, "bbox": [263, 80, 377, 339], "area": 53386}, {"id": 7701903, "category_id": 20, "iscrowd": 0, "bbox": [178, 32, 462, 328], "area": 53763}, {"id": 13944254, "category_id": 187, "iscrowd": 0, "bbox": [100, 0, 114, 20], "area": 1604}, {"id": 9928820, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 159668}], "file_name": "000000525155.png", "image_id": 525155}, {"segments_info": [{"id": 396306, "category_id": 17, "iscrowd": 0, "bbox": [3, 97, 381, 319], "area": 69175}, {"id": 9352389, "category_id": 73, "iscrowd": 0, "bbox": [196, 22, 443, 399], "area": 127939}, {"id": 5075104, "category_id": 189, "iscrowd": 0, "bbox": [39, 85, 601, 342], "area": 20432}, {"id": 7258615, "category_id": 199, "iscrowd": 0, "bbox": [543, 18, 97, 97], "area": 6044}], "file_name": "000000525247.png", "image_id": 525247}, {"segments_info": [{"id": 9214622, "category_id": 85, "iscrowd": 0, "bbox": [26, 174, 263, 275], "area": 67246}, {"id": 10464433, "category_id": 176, "iscrowd": 0, "bbox": [0, 420, 287, 220], "area": 56094}, {"id": 3959144, "category_id": 184, "iscrowd": 0, "bbox": [362, 0, 278, 640], "area": 140250}, {"id": 12360293, "category_id": 187, "iscrowd": 0, "bbox": [598, 0, 42, 29], "area": 919}, {"id": 5010312, "category_id": 197, "iscrowd": 0, "bbox": [380, 0, 260, 640], "area": 29452}, {"id": 6055515, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 384, 640], "area": 115323}], "file_name": "000000525286.png", "image_id": 525286}, {"segments_info": [{"id": 5788230, "category_id": 5, "iscrowd": 0, "bbox": [120, 141, 229, 111], "area": 11137}, {"id": 3814953, "category_id": 5, "iscrowd": 0, "bbox": [236, 211, 206, 138], "area": 9575}, {"id": 10248747, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 252856}], "file_name": "000000525322.png", "image_id": 525322}, {"segments_info": [{"id": 5134442, "category_id": 25, "iscrowd": 0, "bbox": [377, 88, 30, 102], "area": 1827}, {"id": 5331819, "category_id": 25, "iscrowd": 0, "bbox": [421, 108, 119, 162], "area": 2631}, {"id": 4936809, "category_id": 25, "iscrowd": 0, "bbox": [267, 84, 46, 134], "area": 2038}, {"id": 5659496, "category_id": 25, "iscrowd": 0, "bbox": [431, 77, 110, 83], "area": 1876}, {"id": 4871526, "category_id": 25, "iscrowd": 0, "bbox": [300, 104, 65, 123], "area": 4068}, {"id": 4937064, "category_id": 25, "iscrowd": 0, "bbox": [367, 137, 92, 143], "area": 3913}, {"id": 5990528, "category_id": 25, "iscrowd": 0, "bbox": [180, 137, 102, 162], "area": 5096}, {"id": 5593703, "category_id": 25, "iscrowd": 0, "bbox": [464, 70, 39, 51], "area": 874}, {"id": 7960179, "category_id": 112, "iscrowd": 0, "bbox": [150, 105, 120, 108], "area": 8283}, {"id": 10263967, "category_id": 151, "iscrowd": 0, "bbox": [431, 0, 209, 78], "area": 8577}, {"id": 6712182, "category_id": 175, "iscrowd": 0, "bbox": [530, 68, 110, 57], "area": 3657}, {"id": 4802886, "category_id": 184, "iscrowd": 0, "bbox": [168, 0, 60, 60], "area": 2337}, {"id": 6776679, "category_id": 185, "iscrowd": 0, "bbox": [23, 38, 617, 135], "area": 40625}, {"id": 4408645, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 607, 169], "area": 27717}, {"id": 8358293, "category_id": 194, "iscrowd": 0, "bbox": [0, 168, 640, 158], "area": 56023}, {"id": 5791597, "category_id": 199, "iscrowd": 0, "bbox": [0, 110, 640, 177], "area": 36396}], "file_name": "000000525600.png", "image_id": 525600}, {"segments_info": [{"id": 3885654, "category_id": 22, "iscrowd": 0, "bbox": [100, 77, 289, 250], "area": 57645}, {"id": 11186876, "category_id": 22, "iscrowd": 0, "bbox": [141, 408, 150, 67], "area": 7822}, {"id": 4016726, "category_id": 28, "iscrowd": 0, "bbox": [244, 0, 181, 81], "area": 5137}, {"id": 4348521, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 640, 199], "area": 74068}, {"id": 5865578, "category_id": 178, "iscrowd": 0, "bbox": [55, 250, 70, 49], "area": 2848}, {"id": 6648183, "category_id": 185, "iscrowd": 0, "bbox": [52, 105, 588, 236], "area": 15603}, {"id": 4548449, "category_id": 193, "iscrowd": 0, "bbox": [104, 305, 30, 19], "area": 343}, {"id": 10006979, "category_id": 194, "iscrowd": 0, "bbox": [0, 155, 640, 275], "area": 33370}, {"id": 9807262, "category_id": 195, "iscrowd": 0, "bbox": [0, 190, 640, 290], "area": 98955}], "file_name": "000000526103.png", "image_id": 526103}, {"segments_info": [{"id": 8823999, "category_id": 60, "iscrowd": 0, "bbox": [284, 186, 58, 16], "area": 684}, {"id": 4543333, "category_id": 60, "iscrowd": 0, "bbox": [186, 188, 65, 18], "area": 861}, {"id": 11905437, "category_id": 60, "iscrowd": 0, "bbox": [14, 179, 35, 14], "area": 349}, {"id": 12432034, "category_id": 60, "iscrowd": 0, "bbox": [45, 180, 42, 17], "area": 466}, {"id": 5203580, "category_id": 60, "iscrowd": 0, "bbox": [0, 313, 67, 64], "area": 3487}, {"id": 6255493, "category_id": 67, "iscrowd": 0, "bbox": [1, 305, 427, 258], "area": 92486}, {"id": 6322817, "category_id": 130, "iscrowd": 0, "bbox": [389, 61, 39, 27], "area": 846}, {"id": 7502978, "category_id": 156, "iscrowd": 0, "bbox": [0, 205, 343, 94], "area": 10357}, {"id": 9605774, "category_id": 176, "iscrowd": 0, "bbox": [0, 150, 273, 192], "area": 15890}, {"id": 3092009, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 287, 69], "area": 9839}, {"id": 11902061, "category_id": 187, "iscrowd": 0, "bbox": [34, 0, 394, 176], "area": 30100}, {"id": 6259616, "category_id": 189, "iscrowd": 0, "bbox": [0, 394, 3, 151], "area": 299}, {"id": 12627355, "category_id": 195, "iscrowd": 0, "bbox": [33, 134, 381, 174], "area": 20294}], "file_name": "000000526197.png", "image_id": 526197}, {"segments_info": [{"id": 9674661, "category_id": 85, "iscrowd": 0, "bbox": [500, 306, 36, 96], "area": 2596}, {"id": 5200478, "category_id": 85, "iscrowd": 0, "bbox": [170, 272, 88, 97], "area": 6657}, {"id": 15916490, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 331], "area": 30179}, {"id": 7240064, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 267644}], "file_name": "000000526256.png", "image_id": 526256}, {"segments_info": [{"id": 7501425, "category_id": 3, "iscrowd": 0, "bbox": [39, 172, 136, 157], "area": 17948}, {"id": 9409679, "category_id": 3, "iscrowd": 0, "bbox": [150, 174, 298, 153], "area": 23059}, {"id": 9869716, "category_id": 3, "iscrowd": 0, "bbox": [228, 247, 272, 82], "area": 15754}, {"id": 8356735, "category_id": 3, "iscrowd": 0, "bbox": [481, 207, 19, 41], "area": 403}, {"id": 3760747, "category_id": 10, "iscrowd": 0, "bbox": [113, 70, 40, 50], "area": 1462}, {"id": 3112866, "category_id": 10, "iscrowd": 0, "bbox": [385, 40, 21, 53], "area": 1025}, {"id": 2779266, "category_id": 10, "iscrowd": 0, "bbox": [421, 4, 30, 69], "area": 1300}, {"id": 3971778, "category_id": 10, "iscrowd": 0, "bbox": [149, 1, 22, 52], "area": 1033}, {"id": 4410456, "category_id": 171, "iscrowd": 0, "bbox": [364, 82, 136, 163], "area": 15199}, {"id": 3689033, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 214], "area": 34108}, {"id": 12236464, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 51], "area": 6014}, {"id": 10005940, "category_id": 197, "iscrowd": 0, "bbox": [219, 99, 146, 87], "area": 6273}], "file_name": "000000526392.png", "image_id": 526392}, {"segments_info": [{"id": 2371664, "category_id": 21, "iscrowd": 0, "bbox": [110, 190, 254, 156], "area": 16706}, {"id": 2105893, "category_id": 21, "iscrowd": 0, "bbox": [611, 189, 29, 73], "area": 1421}, {"id": 2566190, "category_id": 21, "iscrowd": 0, "bbox": [355, 184, 189, 131], "area": 13059}, {"id": 5729679, "category_id": 21, "iscrowd": 0, "bbox": [171, 239, 146, 107], "area": 7679}, {"id": 8084307, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 182], "area": 101797}, {"id": 9479339, "category_id": 193, "iscrowd": 0, "bbox": [0, 135, 640, 292], "area": 132101}], "file_name": "000000526706.png", "image_id": 526706}, {"segments_info": [{"id": 7820625, "category_id": 1, "iscrowd": 0, "bbox": [196, 141, 59, 130], "area": 5518}, {"id": 4206895, "category_id": 1, "iscrowd": 0, "bbox": [247, 150, 73, 129], "area": 5890}, {"id": 8682428, "category_id": 3, "iscrowd": 0, "bbox": [390, 171, 62, 28], "area": 1170}, {"id": 7427907, "category_id": 3, "iscrowd": 0, "bbox": [154, 169, 11, 10], "area": 72}, {"id": 6775129, "category_id": 3, "iscrowd": 0, "bbox": [465, 172, 35, 29], "area": 916}, {"id": 9400661, "category_id": 3, "iscrowd": 0, "bbox": [163, 170, 39, 20], "area": 431}, {"id": 5257283, "category_id": 31, "iscrowd": 0, "bbox": [265, 245, 31, 29], "area": 537}, {"id": 4792942, "category_id": 33, "iscrowd": 0, "bbox": [237, 272, 71, 98], "area": 4320}, {"id": 4928551, "category_id": 33, "iscrowd": 0, "bbox": [185, 267, 57, 102], "area": 4726}, {"id": 5054597, "category_id": 33, "iscrowd": 0, "bbox": [324, 296, 56, 74], "area": 3168}, {"id": 2431767, "category_id": 33, "iscrowd": 0, "bbox": [284, 326, 39, 49], "area": 1326}, {"id": 4403238, "category_id": 33, "iscrowd": 0, "bbox": [372, 313, 47, 61], "area": 2298}, {"id": 4140321, "category_id": 33, "iscrowd": 0, "bbox": [161, 292, 28, 82], "area": 2007}, {"id": 5716572, "category_id": 92, "iscrowd": 0, "bbox": [401, 0, 99, 81], "area": 5300}, {"id": 7168359, "category_id": 112, "iscrowd": 0, "bbox": [0, 93, 158, 178], "area": 15126}, {"id": 8086872, "category_id": 118, "iscrowd": 0, "bbox": [0, 248, 441, 127], "area": 20249}, {"id": 13023152, "category_id": 130, "iscrowd": 0, "bbox": [249, 0, 36, 61], "area": 1613}, {"id": 9274009, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 495, 290], "area": 39677}, {"id": 10919577, "category_id": 181, "iscrowd": 0, "bbox": [78, 0, 422, 256], "area": 52395}, {"id": 12560290, "category_id": 199, "iscrowd": 0, "bbox": [68, 220, 432, 49], "area": 2284}], "file_name": "000000526728.png", "image_id": 526728}, {"segments_info": [{"id": 3436695, "category_id": 9, "iscrowd": 0, "bbox": [523, 200, 43, 11], "area": 337}, {"id": 13028311, "category_id": 9, "iscrowd": 0, "bbox": [316, 199, 32, 14], "area": 266}, {"id": 6708055, "category_id": 9, "iscrowd": 0, "bbox": [408, 256, 83, 27], "area": 1244}, {"id": 8817813, "category_id": 9, "iscrowd": 0, "bbox": [1, 150, 37, 55], "area": 465}, {"id": 9871786, "category_id": 9, "iscrowd": 0, "bbox": [240, 272, 311, 128], "area": 28274}, {"id": 10395559, "category_id": 9, "iscrowd": 0, "bbox": [67, 195, 25, 7], "area": 134}, {"id": 8620176, "category_id": 9, "iscrowd": 0, "bbox": [322, 196, 37, 14], "area": 212}, {"id": 9738912, "category_id": 9, "iscrowd": 0, "bbox": [579, 209, 42, 9], "area": 310}, {"id": 7424804, "category_id": 155, "iscrowd": 0, "bbox": [0, 197, 640, 183], "area": 63806}, {"id": 2043957, "category_id": 184, "iscrowd": 0, "bbox": [136, 159, 22, 13], "area": 194}, {"id": 13412215, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 147], "area": 77331}, {"id": 3688778, "category_id": 192, "iscrowd": 0, "bbox": [0, 98, 640, 128], "area": 55544}, {"id": 3227727, "category_id": 198, "iscrowd": 0, "bbox": [0, 276, 640, 151], "area": 44765}], "file_name": "000000526751.png", "image_id": 526751}, {"segments_info": [{"id": 10063772, "category_id": 1, "iscrowd": 0, "bbox": [23, 214, 287, 419], "area": 68846}, {"id": 3750216, "category_id": 47, "iscrowd": 0, "bbox": [333, 501, 29, 39], "area": 673}, {"id": 7519185, "category_id": 52, "iscrowd": 0, "bbox": [467, 377, 22, 14], "area": 203}, {"id": 7057348, "category_id": 52, "iscrowd": 0, "bbox": [563, 354, 57, 51], "area": 1599}, {"id": 6792124, "category_id": 52, "iscrowd": 0, "bbox": [476, 408, 109, 69], "area": 3682}, {"id": 6331292, "category_id": 52, "iscrowd": 0, "bbox": [604, 214, 28, 18], "area": 299}, {"id": 6861255, "category_id": 52, "iscrowd": 0, "bbox": [389, 289, 34, 13], "area": 293}, {"id": 6529696, "category_id": 52, "iscrowd": 0, "bbox": [563, 262, 37, 25], "area": 520}, {"id": 7188679, "category_id": 52, "iscrowd": 0, "bbox": [602, 398, 21, 14], "area": 183}, {"id": 6862283, "category_id": 52, "iscrowd": 0, "bbox": [443, 382, 32, 17], "area": 374}, {"id": 6335683, "category_id": 52, "iscrowd": 0, "bbox": [491, 402, 27, 14], "area": 235}, {"id": 7386827, "category_id": 52, "iscrowd": 0, "bbox": [466, 366, 30, 15], "area": 296}, {"id": 7518671, "category_id": 52, "iscrowd": 0, "bbox": [478, 378, 27, 17], "area": 256}, {"id": 6531779, "category_id": 52, "iscrowd": 0, "bbox": [435, 230, 128, 83], "area": 4574}, {"id": 7715794, "category_id": 52, "iscrowd": 0, "bbox": [462, 406, 29, 20], "area": 362}, {"id": 7112854, "category_id": 52, "iscrowd": 1, "bbox": [54, 21, 586, 570], "area": 32081}, {"id": 7501440, "category_id": 199, "iscrowd": 0, "bbox": [102, 0, 538, 187], "area": 34833}], "file_name": "000000527029.png", "image_id": 527029}, {"segments_info": [{"id": 8527648, "category_id": 1, "iscrowd": 0, "bbox": [286, 277, 12, 28], "area": 129}, {"id": 10106675, "category_id": 1, "iscrowd": 0, "bbox": [553, 296, 6, 9], "area": 34}, {"id": 10761769, "category_id": 1, "iscrowd": 0, "bbox": [445, 281, 10, 24], "area": 131}, {"id": 9184032, "category_id": 1, "iscrowd": 0, "bbox": [452, 208, 61, 189], "area": 6251}, {"id": 12929861, "category_id": 1, "iscrowd": 0, "bbox": [568, 293, 8, 13], "area": 62}, {"id": 12596009, "category_id": 38, "iscrowd": 0, "bbox": [88, 39, 26, 37], "area": 173}, {"id": 14239538, "category_id": 38, "iscrowd": 0, "bbox": [488, 69, 12, 7], "area": 46}, {"id": 8131854, "category_id": 128, "iscrowd": 0, "bbox": [19, 186, 621, 84], "area": 6765}, {"id": 16159088, "category_id": 154, "iscrowd": 0, "bbox": [0, 237, 640, 189], "area": 102592}, {"id": 4197640, "category_id": 184, "iscrowd": 0, "bbox": [0, 151, 640, 129], "area": 25372}, {"id": 16473653, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 230], "area": 129164}, {"id": 9638925, "category_id": 199, "iscrowd": 0, "bbox": [255, 240, 70, 17], "area": 581}], "file_name": "000000527215.png", "image_id": 527215}, {"segments_info": [{"id": 5653680, "category_id": 3, "iscrowd": 0, "bbox": [3, 4, 163, 154], "area": 24557}, {"id": 5519666, "category_id": 4, "iscrowd": 0, "bbox": [345, 3, 96, 152], "area": 6503}, {"id": 8550010, "category_id": 4, "iscrowd": 0, "bbox": [396, 6, 102, 160], "area": 10654}, {"id": 9209743, "category_id": 4, "iscrowd": 0, "bbox": [336, 6, 97, 122], "area": 2760}, {"id": 3155754, "category_id": 149, "iscrowd": 0, "bbox": [0, 11, 500, 158], "area": 4673}, {"id": 4865343, "category_id": 191, "iscrowd": 0, "bbox": [166, 26, 169, 39], "area": 2241}, {"id": 1976107, "category_id": 193, "iscrowd": 0, "bbox": [145, 0, 26, 18], "area": 240}, {"id": 5585728, "category_id": 199, "iscrowd": 0, "bbox": [260, 0, 71, 80], "area": 2459}], "file_name": "000000527220.png", "image_id": 527220}, {"segments_info": [{"id": 8030385, "category_id": 1, "iscrowd": 0, "bbox": [166, 148, 411, 329], "area": 40647}, {"id": 12896717, "category_id": 62, "iscrowd": 0, "bbox": [293, 217, 336, 252], "area": 12341}, {"id": 3493708, "category_id": 64, "iscrowd": 0, "bbox": [76, 175, 43, 63], "area": 1299}, {"id": 9935777, "category_id": 67, "iscrowd": 0, "bbox": [0, 166, 266, 314], "area": 34658}, {"id": 8618374, "category_id": 73, "iscrowd": 0, "bbox": [113, 181, 128, 102], "area": 6658}, {"id": 13751007, "category_id": 77, "iscrowd": 0, "bbox": [510, 226, 18, 25], "area": 176}, {"id": 2636372, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 586, 309], "area": 96340}, {"id": 3029581, "category_id": 118, "iscrowd": 0, "bbox": [0, 249, 640, 231], "area": 40361}, {"id": 1514788, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 184, 204], "area": 29740}, {"id": 1648183, "category_id": 185, "iscrowd": 0, "bbox": [566, 0, 74, 284], "area": 15150}, {"id": 9409693, "category_id": 189, "iscrowd": 0, "bbox": [0, 235, 4, 81], "area": 202}], "file_name": "000000527427.png", "image_id": 527427}, {"segments_info": [{"id": 7240567, "category_id": 1, "iscrowd": 0, "bbox": [135, 350, 4, 9], "area": 29}, {"id": 8812910, "category_id": 1, "iscrowd": 0, "bbox": [60, 354, 5, 10], "area": 24}, {"id": 2566682, "category_id": 15, "iscrowd": 0, "bbox": [414, 374, 88, 23], "area": 1469}, {"id": 14587998, "category_id": 38, "iscrowd": 0, "bbox": [382, 219, 145, 64], "area": 2676}, {"id": 6259116, "category_id": 38, "iscrowd": 0, "bbox": [177, 325, 36, 32], "area": 482}, {"id": 4139604, "category_id": 38, "iscrowd": 0, "bbox": [437, 0, 26, 8], "area": 145}, {"id": 6968891, "category_id": 38, "iscrowd": 0, "bbox": [206, 254, 58, 35], "area": 481}, {"id": 12097401, "category_id": 38, "iscrowd": 0, "bbox": [304, 230, 207, 62], "area": 3004}, {"id": 4280128, "category_id": 184, "iscrowd": 0, "bbox": [0, 333, 237, 33], "area": 3448}, {"id": 15383426, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 350], "area": 208634}, {"id": 3958872, "category_id": 193, "iscrowd": 0, "bbox": [0, 323, 640, 157], "area": 85421}], "file_name": "000000527528.png", "image_id": 527528}, {"segments_info": [{"id": 7625289, "category_id": 1, "iscrowd": 0, "bbox": [257, 53, 122, 118], "area": 7059}, {"id": 10710857, "category_id": 32, "iscrowd": 0, "bbox": [297, 104, 27, 62], "area": 745}, {"id": 11313819, "category_id": 63, "iscrowd": 0, "bbox": [231, 113, 52, 50], "area": 1749}, {"id": 5128500, "category_id": 72, "iscrowd": 0, "bbox": [206, 14, 208, 182], "area": 25898}, {"id": 4671294, "category_id": 100, "iscrowd": 0, "bbox": [54, 66, 78, 124], "area": 5803}, {"id": 2566700, "category_id": 176, "iscrowd": 0, "bbox": [0, 250, 640, 246], "area": 87433}], "file_name": "000000527616.png", "image_id": 527616}, {"segments_info": [{"id": 9278357, "category_id": 51, "iscrowd": 0, "bbox": [55, 0, 585, 426], "area": 132340}, {"id": 2775639, "category_id": 56, "iscrowd": 0, "bbox": [308, 92, 254, 208], "area": 25032}, {"id": 1923148, "category_id": 56, "iscrowd": 0, "bbox": [421, 0, 105, 86], "area": 4947}, {"id": 3437427, "category_id": 56, "iscrowd": 0, "bbox": [162, 34, 65, 67], "area": 2488}, {"id": 2446678, "category_id": 56, "iscrowd": 0, "bbox": [329, 0, 143, 56], "area": 5904}, {"id": 2384984, "category_id": 56, "iscrowd": 0, "bbox": [359, 81, 84, 90], "area": 5784}, {"id": 4489345, "category_id": 56, "iscrowd": 0, "bbox": [220, 176, 130, 117], "area": 9817}, {"id": 4488830, "category_id": 56, "iscrowd": 0, "bbox": [201, 30, 205, 149], "area": 13039}, {"id": 3419694, "category_id": 67, "iscrowd": 0, "bbox": [2, 3, 638, 423], "area": 70030}, {"id": 3617330, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 55, 426], "area": 1791}], "file_name": "000000527695.png", "image_id": 527695}, {"segments_info": [{"id": 1852545, "category_id": 1, "iscrowd": 0, "bbox": [177, 124, 115, 340], "area": 19797}, {"id": 2382224, "category_id": 44, "iscrowd": 0, "bbox": [331, 142, 14, 42], "area": 332}, {"id": 7516378, "category_id": 51, "iscrowd": 0, "bbox": [52, 391, 76, 46], "area": 2435}, {"id": 5873104, "category_id": 51, "iscrowd": 0, "bbox": [101, 342, 30, 28], "area": 655}, {"id": 9286351, "category_id": 79, "iscrowd": 0, "bbox": [17, 288, 167, 198], "area": 7401}, {"id": 8567007, "category_id": 82, "iscrowd": 0, "bbox": [286, 182, 141, 224], "area": 26681}, {"id": 4483741, "category_id": 107, "iscrowd": 0, "bbox": [0, 269, 186, 211], "area": 11056}, {"id": 1256252, "category_id": 168, "iscrowd": 0, "bbox": [288, 302, 46, 55], "area": 1545}, {"id": 7187417, "category_id": 186, "iscrowd": 0, "bbox": [97, 0, 330, 24], "area": 5504}, {"id": 2978995, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 205, 640], "area": 56795}, {"id": 6596570, "category_id": 190, "iscrowd": 0, "bbox": [116, 345, 311, 295], "area": 65110}, {"id": 6132698, "category_id": 196, "iscrowd": 0, "bbox": [78, 318, 72, 41], "area": 987}, {"id": 10212594, "category_id": 199, "iscrowd": 0, "bbox": [0, 14, 427, 335], "area": 56777}], "file_name": "000000527750.png", "image_id": 527750}, {"segments_info": [{"id": 5131888, "category_id": 44, "iscrowd": 0, "bbox": [231, 78, 68, 164], "area": 8002}, {"id": 5262961, "category_id": 44, "iscrowd": 0, "bbox": [320, 77, 69, 177], "area": 9062}, {"id": 3619646, "category_id": 48, "iscrowd": 0, "bbox": [0, 249, 48, 57], "area": 1242}, {"id": 5082054, "category_id": 54, "iscrowd": 0, "bbox": [61, 198, 85, 122], "area": 7638}, {"id": 3702729, "category_id": 54, "iscrowd": 0, "bbox": [142, 216, 128, 99], "area": 9033}, {"id": 5083598, "category_id": 54, "iscrowd": 0, "bbox": [363, 209, 205, 145], "area": 20207}, {"id": 8226704, "category_id": 67, "iscrowd": 0, "bbox": [0, 198, 638, 306], "area": 72971}, {"id": 1711910, "category_id": 86, "iscrowd": 0, "bbox": [292, 24, 49, 179], "area": 4946}, {"id": 860473, "category_id": 180, "iscrowd": 0, "bbox": [34, 0, 280, 155], "area": 14608}, {"id": 7241099, "category_id": 189, "iscrowd": 0, "bbox": [0, 200, 640, 312], "area": 7358}, {"id": 10660531, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 251, 230], "area": 28474}, {"id": 5661860, "category_id": 196, "iscrowd": 0, "bbox": [0, 84, 640, 319], "area": 35122}, {"id": 3301006, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 165], "area": 25475}], "file_name": "000000527784.png", "image_id": 527784}, {"segments_info": [{"id": 4147775, "category_id": 15, "iscrowd": 0, "bbox": [214, 216, 332, 189], "area": 29505}, {"id": 4280146, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 361], "area": 138987}, {"id": 12961731, "category_id": 187, "iscrowd": 0, "bbox": [186, 0, 377, 174], "area": 13959}, {"id": 5333357, "category_id": 193, "iscrowd": 0, "bbox": [0, 200, 640, 227], "area": 90442}], "file_name": "000000527960.png", "image_id": 527960}, {"segments_info": [{"id": 3680022, "category_id": 1, "iscrowd": 0, "bbox": [121, 181, 22, 73], "area": 1062}, {"id": 2170956, "category_id": 1, "iscrowd": 0, "bbox": [52, 165, 21, 29], "area": 389}, {"id": 6708062, "category_id": 1, "iscrowd": 0, "bbox": [239, 420, 106, 152], "area": 4571}, {"id": 3877138, "category_id": 1, "iscrowd": 0, "bbox": [156, 184, 26, 61], "area": 1005}, {"id": 3040378, "category_id": 1, "iscrowd": 0, "bbox": [213, 149, 23, 21], "area": 266}, {"id": 2429960, "category_id": 1, "iscrowd": 0, "bbox": [99, 186, 24, 69], "area": 1078}, {"id": 4600598, "category_id": 1, "iscrowd": 0, "bbox": [347, 150, 25, 73], "area": 1300}, {"id": 3218951, "category_id": 1, "iscrowd": 0, "bbox": [25, 184, 28, 55], "area": 1078}, {"id": 3876361, "category_id": 1, "iscrowd": 0, "bbox": [64, 189, 19, 48], "area": 688}, {"id": 7959934, "category_id": 35, "iscrowd": 0, "bbox": [220, 451, 40, 118], "area": 369}, {"id": 10130577, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 423, 580], "area": 173362}], "file_name": "000000528314.png", "image_id": 528314}, {"segments_info": [{"id": 2113882, "category_id": 1, "iscrowd": 0, "bbox": [6, 143, 164, 65], "area": 7107}, {"id": 2375768, "category_id": 47, "iscrowd": 0, "bbox": [509, 31, 85, 126], "area": 7166}, {"id": 5472932, "category_id": 47, "iscrowd": 0, "bbox": [440, 136, 133, 86], "area": 7898}, {"id": 865362, "category_id": 47, "iscrowd": 0, "bbox": [434, 29, 87, 137], "area": 7251}, {"id": 3164766, "category_id": 47, "iscrowd": 0, "bbox": [573, 99, 67, 204], "area": 8874}, {"id": 6124683, "category_id": 50, "iscrowd": 0, "bbox": [550, 245, 62, 183], "area": 3627}, {"id": 4091021, "category_id": 51, "iscrowd": 0, "bbox": [38, 51, 295, 100], "area": 9679}, {"id": 6991558, "category_id": 51, "iscrowd": 0, "bbox": [340, 195, 227, 202], "area": 31634}, {"id": 1400464, "category_id": 54, "iscrowd": 0, "bbox": [53, 156, 141, 142], "area": 12968}, {"id": 339830, "category_id": 67, "iscrowd": 0, "bbox": [3, 301, 308, 121], "area": 21384}, {"id": 11386823, "category_id": 100, "iscrowd": 0, "bbox": [334, 355, 113, 73], "area": 5276}, {"id": 4217731, "category_id": 189, "iscrowd": 0, "bbox": [0, 53, 634, 375], "area": 21188}, {"id": 12173506, "category_id": 195, "iscrowd": 0, "bbox": [169, 98, 471, 330], "area": 26042}, {"id": 2517399, "category_id": 196, "iscrowd": 0, "bbox": [31, 0, 554, 428], "area": 51981}], "file_name": "000000528399.png", "image_id": 528399}, {"segments_info": [{"id": 9934754, "category_id": 20, "iscrowd": 0, "bbox": [271, 216, 77, 142], "area": 5356}, {"id": 10589614, "category_id": 20, "iscrowd": 0, "bbox": [126, 268, 137, 252], "area": 14402}, {"id": 16310740, "category_id": 151, "iscrowd": 0, "bbox": [120, 32, 343, 56], "area": 9514}, {"id": 8687749, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 143617}, {"id": 12235680, "category_id": 185, "iscrowd": 0, "bbox": [138, 17, 315, 138], "area": 16510}, {"id": 12108475, "category_id": 193, "iscrowd": 0, "bbox": [178, 141, 174, 495], "area": 13295}, {"id": 11969195, "category_id": 194, "iscrowd": 0, "bbox": [0, 199, 384, 441], "area": 100263}, {"id": 10655115, "category_id": 199, "iscrowd": 0, "bbox": [194, 122, 185, 42], "area": 3913}], "file_name": "000000528524.png", "image_id": 528524}, {"segments_info": [{"id": 5790829, "category_id": 1, "iscrowd": 0, "bbox": [90, 334, 4, 3], "area": 8}, {"id": 2233912, "category_id": 1, "iscrowd": 0, "bbox": [448, 339, 2, 3], "area": 5}, {"id": 4471380, "category_id": 1, "iscrowd": 0, "bbox": [453, 341, 2, 1], "area": 2}, {"id": 4605258, "category_id": 1, "iscrowd": 0, "bbox": [469, 341, 2, 4], "area": 6}, {"id": 5264988, "category_id": 1, "iscrowd": 0, "bbox": [438, 340, 2, 3], "area": 5}, {"id": 3094369, "category_id": 1, "iscrowd": 0, "bbox": [336, 337, 3, 3], "area": 8}, {"id": 1380628, "category_id": 1, "iscrowd": 0, "bbox": [489, 340, 3, 8], "area": 17}, {"id": 2828592, "category_id": 1, "iscrowd": 0, "bbox": [444, 340, 2, 3], "area": 4}, {"id": 1905688, "category_id": 1, "iscrowd": 0, "bbox": [21, 332, 3, 6], "area": 11}, {"id": 1644316, "category_id": 1, "iscrowd": 0, "bbox": [377, 337, 4, 3], "area": 7}, {"id": 3025713, "category_id": 1, "iscrowd": 0, "bbox": [476, 342, 2, 4], "area": 6}, {"id": 6049098, "category_id": 85, "iscrowd": 0, "bbox": [528, 198, 13, 18], "area": 186}, {"id": 12045529, "category_id": 85, "iscrowd": 0, "bbox": [503, 198, 14, 20], "area": 211}, {"id": 2237221, "category_id": 95, "iscrowd": 0, "bbox": [0, 335, 513, 43], "area": 13011}, {"id": 8877940, "category_id": 148, "iscrowd": 0, "bbox": [0, 353, 640, 74], "area": 36922}, {"id": 15059633, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 318], "area": 168723}, {"id": 3884373, "category_id": 197, "iscrowd": 0, "bbox": [0, 133, 640, 247], "area": 54094}], "file_name": "000000528578.png", "image_id": 528578}, {"segments_info": [{"id": 2700875, "category_id": 1, "iscrowd": 0, "bbox": [309, 480, 117, 159], "area": 13443}, {"id": 5074081, "category_id": 88, "iscrowd": 0, "bbox": [52, 210, 235, 304], "area": 44905}, {"id": 8552834, "category_id": 184, "iscrowd": 0, "bbox": [165, 102, 261, 363], "area": 44709}, {"id": 11841451, "category_id": 187, "iscrowd": 0, "bbox": [132, 0, 294, 222], "area": 40665}, {"id": 7501177, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 139, 317], "area": 24751}], "file_name": "000000528705.png", "image_id": 528705}, {"segments_info": [{"id": 5795202, "category_id": 25, "iscrowd": 0, "bbox": [255, 150, 63, 126], "area": 2416}, {"id": 4609902, "category_id": 25, "iscrowd": 0, "bbox": [43, 103, 34, 162], "area": 2626}, {"id": 6454421, "category_id": 25, "iscrowd": 0, "bbox": [185, 68, 34, 100], "area": 1398}, {"id": 4082779, "category_id": 25, "iscrowd": 0, "bbox": [321, 134, 22, 86], "area": 536}, {"id": 5663876, "category_id": 25, "iscrowd": 0, "bbox": [163, 148, 43, 118], "area": 1699}, {"id": 4346983, "category_id": 25, "iscrowd": 0, "bbox": [344, 154, 22, 84], "area": 923}, {"id": 6716564, "category_id": 25, "iscrowd": 0, "bbox": [233, 172, 23, 76], "area": 707}, {"id": 4609627, "category_id": 184, "iscrowd": 0, "bbox": [52, 0, 448, 311], "area": 27385}, {"id": 5533039, "category_id": 185, "iscrowd": 0, "bbox": [0, 294, 500, 81], "area": 29211}, {"id": 7113370, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 500, 313], "area": 103420}, {"id": 10204614, "category_id": 194, "iscrowd": 0, "bbox": [0, 108, 500, 33], "area": 5243}, {"id": 6913667, "category_id": 198, "iscrowd": 0, "bbox": [192, 265, 230, 46], "area": 5883}, {"id": 4672856, "category_id": 199, "iscrowd": 0, "bbox": [0, 357, 500, 18], "area": 4277}], "file_name": "000000528862.png", "image_id": 528862}, {"segments_info": [{"id": 4998724, "category_id": 95, "iscrowd": 0, "bbox": [0, 248, 183, 92], "area": 9874}, {"id": 2303532, "category_id": 185, "iscrowd": 0, "bbox": [0, 436, 266, 64], "area": 9734}, {"id": 14134151, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 272, 339], "area": 73769}, {"id": 5398652, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 86487}], "file_name": "000000528977.png", "image_id": 528977}, {"segments_info": [{"id": 4669237, "category_id": 3, "iscrowd": 0, "bbox": [88, 598, 57, 30], "area": 632}, {"id": 3421236, "category_id": 3, "iscrowd": 0, "bbox": [83, 606, 100, 34], "area": 2190}, {"id": 6381400, "category_id": 3, "iscrowd": 0, "bbox": [58, 599, 50, 18], "area": 546}, {"id": 7433317, "category_id": 3, "iscrowd": 0, "bbox": [11, 596, 26, 12], "area": 144}, {"id": 10656917, "category_id": 3, "iscrowd": 0, "bbox": [18, 618, 75, 22], "area": 1280}, {"id": 8488583, "category_id": 3, "iscrowd": 0, "bbox": [60, 580, 49, 26], "area": 785}, {"id": 7566450, "category_id": 3, "iscrowd": 0, "bbox": [127, 575, 56, 20], "area": 497}, {"id": 6908624, "category_id": 13, "iscrowd": 0, "bbox": [184, 526, 17, 43], "area": 564}, {"id": 5524858, "category_id": 28, "iscrowd": 0, "bbox": [129, 83, 232, 380], "area": 22845}, {"id": 5396834, "category_id": 184, "iscrowd": 0, "bbox": [0, 374, 88, 221], "area": 13033}, {"id": 16116190, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 426, 392], "area": 103745}, {"id": 7569551, "category_id": 197, "iscrowd": 0, "bbox": [0, 186, 426, 454], "area": 121742}], "file_name": "000000528980.png", "image_id": 528980}, {"segments_info": [{"id": 3753539, "category_id": 19, "iscrowd": 0, "bbox": [180, 164, 298, 194], "area": 30242}, {"id": 3100724, "category_id": 184, "iscrowd": 0, "bbox": [22, 0, 618, 63], "area": 25590}, {"id": 5083251, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 251139}], "file_name": "000000529105.png", "image_id": 529105}, {"segments_info": [{"id": 4946093, "category_id": 1, "iscrowd": 0, "bbox": [243, 78, 68, 80], "area": 3291}, {"id": 6378576, "category_id": 1, "iscrowd": 0, "bbox": [142, 100, 155, 178], "area": 13984}, {"id": 11051681, "category_id": 1, "iscrowd": 0, "bbox": [30, 18, 134, 258], "area": 17021}, {"id": 9334892, "category_id": 31, "iscrowd": 0, "bbox": [20, 105, 80, 156], "area": 2817}, {"id": 7502750, "category_id": 49, "iscrowd": 0, "bbox": [478, 0, 7, 18], "area": 64}, {"id": 6743289, "category_id": 60, "iscrowd": 0, "bbox": [433, 267, 28, 14], "area": 180}, {"id": 752872, "category_id": 60, "iscrowd": 0, "bbox": [379, 242, 25, 12], "area": 123}, {"id": 1026799, "category_id": 60, "iscrowd": 0, "bbox": [311, 231, 21, 16], "area": 90}, {"id": 2993392, "category_id": 60, "iscrowd": 0, "bbox": [370, 255, 26, 24], "area": 384}, {"id": 1023722, "category_id": 60, "iscrowd": 0, "bbox": [275, 263, 25, 18], "area": 314}, {"id": 1398181, "category_id": 60, "iscrowd": 0, "bbox": [254, 252, 19, 14], "area": 174}, {"id": 9304059, "category_id": 60, "iscrowd": 0, "bbox": [432, 273, 23, 8], "area": 157}, {"id": 2080758, "category_id": 60, "iscrowd": 0, "bbox": [289, 226, 19, 12], "area": 150}, {"id": 818917, "category_id": 60, "iscrowd": 0, "bbox": [356, 237, 22, 14], "area": 89}, {"id": 1209807, "category_id": 60, "iscrowd": 0, "bbox": [349, 246, 23, 16], "area": 255}, {"id": 1416683, "category_id": 60, "iscrowd": 0, "bbox": [308, 235, 21, 16], "area": 137}, {"id": 3588854, "category_id": 60, "iscrowd": 0, "bbox": [410, 252, 25, 15], "area": 161}, {"id": 5554408, "category_id": 60, "iscrowd": 0, "bbox": [401, 266, 29, 15], "area": 371}, {"id": 3576525, "category_id": 60, "iscrowd": 1, "bbox": [124, 186, 370, 95], "area": 6330}, {"id": 10855332, "category_id": 72, "iscrowd": 0, "bbox": [360, 111, 96, 83], "area": 3591}, {"id": 3563133, "category_id": 107, "iscrowd": 0, "bbox": [145, 133, 355, 148], "area": 10565}, {"id": 2844812, "category_id": 176, "iscrowd": 0, "bbox": [143, 23, 50, 52], "area": 1406}, {"id": 1194092, "category_id": 177, "iscrowd": 0, "bbox": [0, 20, 407, 199], "area": 6289}, {"id": 1921923, "category_id": 188, "iscrowd": 0, "bbox": [169, 23, 242, 76], "area": 8664}, {"id": 3297385, "category_id": 190, "iscrowd": 0, "bbox": [0, 207, 78, 74], "area": 2727}, {"id": 10532794, "category_id": 195, "iscrowd": 0, "bbox": [119, 36, 381, 245], "area": 20074}, {"id": 6859718, "category_id": 196, "iscrowd": 0, "bbox": [117, 133, 166, 148], "area": 1926}, {"id": 1532831, "category_id": 199, "iscrowd": 0, "bbox": [155, 0, 38, 30], "area": 838}], "file_name": "000000529122.png", "image_id": 529122}, {"segments_info": [{"id": 2703967, "category_id": 1, "iscrowd": 0, "bbox": [453, 69, 186, 275], "area": 11740}, {"id": 2240061, "category_id": 1, "iscrowd": 0, "bbox": [473, 134, 167, 292], "area": 21682}, {"id": 10124129, "category_id": 73, "iscrowd": 0, "bbox": [376, 54, 174, 174], "area": 16668}, {"id": 12229490, "category_id": 73, "iscrowd": 0, "bbox": [295, 220, 206, 200], "area": 19842}, {"id": 592907, "category_id": 73, "iscrowd": 0, "bbox": [3, 127, 272, 291], "area": 43494}, {"id": 3621176, "category_id": 74, "iscrowd": 0, "bbox": [253, 330, 62, 42], "area": 1688}, {"id": 593420, "category_id": 76, "iscrowd": 0, "bbox": [1, 318, 199, 103], "area": 9526}, {"id": 1252649, "category_id": 84, "iscrowd": 0, "bbox": [328, 0, 9, 36], "area": 205}, {"id": 1318435, "category_id": 84, "iscrowd": 0, "bbox": [315, 0, 8, 39], "area": 142}, {"id": 2965313, "category_id": 84, "iscrowd": 0, "bbox": [209, 178, 14, 46], "area": 442}, {"id": 6327174, "category_id": 84, "iscrowd": 0, "bbox": [271, 117, 35, 23], "area": 538}, {"id": 791319, "category_id": 84, "iscrowd": 0, "bbox": [241, 166, 14, 45], "area": 406}, {"id": 1911651, "category_id": 84, "iscrowd": 0, "bbox": [217, 170, 17, 49], "area": 262}, {"id": 1318690, "category_id": 84, "iscrowd": 0, "bbox": [212, 172, 18, 51], "area": 318}, {"id": 2040853, "category_id": 84, "iscrowd": 0, "bbox": [225, 170, 24, 51], "area": 525}, {"id": 790821, "category_id": 84, "iscrowd": 0, "bbox": [255, 166, 6, 45], "area": 235}, {"id": 592661, "category_id": 84, "iscrowd": 0, "bbox": [257, 155, 50, 41], "area": 1458}, {"id": 4282469, "category_id": 93, "iscrowd": 0, "bbox": [252, 219, 307, 207], "area": 8400}, {"id": 1647403, "category_id": 156, "iscrowd": 0, "bbox": [108, 9, 233, 279], "area": 29388}, {"id": 3298400, "category_id": 188, "iscrowd": 0, "bbox": [0, 30, 121, 139], "area": 11226}, {"id": 4284265, "category_id": 189, "iscrowd": 0, "bbox": [186, 116, 382, 310], "area": 17300}, {"id": 5078923, "category_id": 195, "iscrowd": 0, "bbox": [166, 29, 473, 73], "area": 8564}, {"id": 6653058, "category_id": 199, "iscrowd": 0, "bbox": [77, 0, 563, 143], "area": 20434}], "file_name": "000000529148.png", "image_id": 529148}, {"segments_info": [{"id": 11582656, "category_id": 51, "iscrowd": 0, "bbox": [387, 35, 86, 68], "area": 4178}, {"id": 3622993, "category_id": 51, "iscrowd": 0, "bbox": [26, 124, 240, 202], "area": 14908}, {"id": 6128018, "category_id": 61, "iscrowd": 0, "bbox": [43, 143, 217, 128], "area": 22551}, {"id": 5660001, "category_id": 107, "iscrowd": 0, "bbox": [0, 114, 500, 219], "area": 26850}, {"id": 335670, "category_id": 188, "iscrowd": 0, "bbox": [430, 193, 70, 140], "area": 5435}, {"id": 5067608, "category_id": 195, "iscrowd": 0, "bbox": [61, 24, 133, 130], "area": 6489}, {"id": 6719641, "category_id": 196, "iscrowd": 0, "bbox": [140, 48, 108, 89], "area": 5424}, {"id": 2567215, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 247, 309], "area": 13512}], "file_name": "000000529528.png", "image_id": 529528}, {"segments_info": [{"id": 2908226, "category_id": 46, "iscrowd": 0, "bbox": [30, 218, 15, 30], "area": 272}, {"id": 1593374, "category_id": 46, "iscrowd": 0, "bbox": [41, 223, 6, 17], "area": 44}, {"id": 3827296, "category_id": 46, "iscrowd": 0, "bbox": [114, 232, 10, 27], "area": 143}, {"id": 5074273, "category_id": 46, "iscrowd": 0, "bbox": [106, 232, 7, 23], "area": 73}, {"id": 3499853, "category_id": 46, "iscrowd": 0, "bbox": [43, 221, 13, 29], "area": 256}, {"id": 5731688, "category_id": 46, "iscrowd": 0, "bbox": [93, 229, 9, 24], "area": 84}, {"id": 3236423, "category_id": 46, "iscrowd": 0, "bbox": [99, 230, 9, 27], "area": 194}, {"id": 2315322, "category_id": 46, "iscrowd": 0, "bbox": [56, 222, 11, 29], "area": 231}, {"id": 2252596, "category_id": 46, "iscrowd": 0, "bbox": [17, 216, 17, 33], "area": 324}, {"id": 2058568, "category_id": 46, "iscrowd": 0, "bbox": [11, 218, 10, 32], "area": 152}, {"id": 2113154, "category_id": 47, "iscrowd": 0, "bbox": [67, 220, 16, 34], "area": 444}, {"id": 9546429, "category_id": 47, "iscrowd": 0, "bbox": [42, 294, 19, 12], "area": 162}, {"id": 10332608, "category_id": 47, "iscrowd": 0, "bbox": [85, 289, 15, 17], "area": 187}, {"id": 3696477, "category_id": 47, "iscrowd": 0, "bbox": [106, 231, 11, 28], "area": 145}, {"id": 6838955, "category_id": 47, "iscrowd": 0, "bbox": [68, 287, 19, 20], "area": 322}, {"id": 2962771, "category_id": 47, "iscrowd": 0, "bbox": [305, 268, 9, 15], "area": 129}, {"id": 9478321, "category_id": 47, "iscrowd": 0, "bbox": [85, 291, 3, 5], "area": 8}, {"id": 10397887, "category_id": 47, "iscrowd": 0, "bbox": [100, 290, 17, 17], "area": 281}, {"id": 11974751, "category_id": 51, "iscrowd": 0, "bbox": [69, 473, 26, 15], "area": 250}, {"id": 7641009, "category_id": 51, "iscrowd": 0, "bbox": [15, 294, 29, 2], "area": 44}, {"id": 12829822, "category_id": 51, "iscrowd": 0, "bbox": [70, 467, 27, 9], "area": 129}, {"id": 8363959, "category_id": 51, "iscrowd": 0, "bbox": [15, 296, 28, 10], "area": 198}, {"id": 9737068, "category_id": 51, "iscrowd": 0, "bbox": [69, 460, 27, 11], "area": 224}, {"id": 7508136, "category_id": 51, "iscrowd": 0, "bbox": [46, 289, 16, 6], "area": 90}, {"id": 8166582, "category_id": 51, "iscrowd": 0, "bbox": [15, 274, 30, 20], "area": 588}, {"id": 5143965, "category_id": 64, "iscrowd": 0, "bbox": [0, 352, 70, 150], "area": 4614}, {"id": 10592921, "category_id": 67, "iscrowd": 0, "bbox": [0, 428, 230, 203], "area": 30202}, {"id": 2175302, "category_id": 79, "iscrowd": 0, "bbox": [131, 397, 102, 136], "area": 5638}, {"id": 15791348, "category_id": 81, "iscrowd": 0, "bbox": [291, 385, 161, 92], "area": 10358}, {"id": 2373279, "category_id": 84, "iscrowd": 0, "bbox": [394, 251, 9, 43], "area": 382}, {"id": 990513, "category_id": 84, "iscrowd": 0, "bbox": [374, 249, 12, 43], "area": 419}, {"id": 3484460, "category_id": 84, "iscrowd": 0, "bbox": [361, 241, 23, 52], "area": 704}, {"id": 2172713, "category_id": 84, "iscrowd": 0, "bbox": [386, 248, 8, 44], "area": 352}, {"id": 6461312, "category_id": 86, "iscrowd": 0, "bbox": [14, 416, 32, 46], "area": 1052}, {"id": 8496519, "category_id": 86, "iscrowd": 0, "bbox": [0, 422, 24, 80], "area": 1314}, {"id": 7835833, "category_id": 107, "iscrowd": 0, "bbox": [82, 350, 281, 65], "area": 3470}, {"id": 8292760, "category_id": 118, "iscrowd": 0, "bbox": [15, 532, 456, 108], "area": 15463}, {"id": 6456476, "category_id": 130, "iscrowd": 0, "bbox": [106, 0, 203, 182], "area": 23972}, {"id": 2771303, "category_id": 133, "iscrowd": 0, "bbox": [297, 14, 183, 252], "area": 36270}, {"id": 7182254, "category_id": 156, "iscrowd": 0, "bbox": [0, 194, 480, 137], "area": 13624}, {"id": 8560822, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 325, 60], "area": 8673}, {"id": 12241620, "category_id": 188, "iscrowd": 0, "bbox": [50, 373, 430, 267], "area": 44639}, {"id": 8553353, "category_id": 189, "iscrowd": 0, "bbox": [0, 502, 74, 138], "area": 1505}, {"id": 8431813, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 415], "area": 84192}], "file_name": "000000529568.png", "image_id": 529568}, {"segments_info": [{"id": 5067620, "category_id": 1, "iscrowd": 0, "bbox": [236, 58, 404, 416], "area": 75497}, {"id": 5860477, "category_id": 46, "iscrowd": 0, "bbox": [409, 167, 101, 227], "area": 12432}, {"id": 12379636, "category_id": 51, "iscrowd": 0, "bbox": [140, 330, 185, 132], "area": 17276}, {"id": 9553138, "category_id": 54, "iscrowd": 0, "bbox": [285, 325, 64, 72], "area": 2266}, {"id": 11518157, "category_id": 67, "iscrowd": 0, "bbox": [1, 270, 639, 210], "area": 55300}, {"id": 3621973, "category_id": 77, "iscrowd": 0, "bbox": [220, 263, 87, 43], "area": 2937}, {"id": 3687513, "category_id": 84, "iscrowd": 0, "bbox": [0, 311, 212, 61], "area": 8374}, {"id": 4611180, "category_id": 189, "iscrowd": 0, "bbox": [0, 368, 12, 112], "area": 245}, {"id": 13950178, "category_id": 195, "iscrowd": 0, "bbox": [20, 280, 131, 55], "area": 4504}, {"id": 2635335, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 343], "area": 116683}], "file_name": "000000529762.png", "image_id": 529762}, {"segments_info": [{"id": 6515058, "category_id": 1, "iscrowd": 0, "bbox": [453, 150, 84, 244], "area": 13301}, {"id": 7370124, "category_id": 42, "iscrowd": 0, "bbox": [266, 186, 51, 137], "area": 3416}, {"id": 9743280, "category_id": 42, "iscrowd": 0, "bbox": [300, 83, 55, 235], "area": 8374}, {"id": 7755839, "category_id": 42, "iscrowd": 0, "bbox": [221, 110, 34, 85], "area": 1951}, {"id": 15658212, "category_id": 42, "iscrowd": 0, "bbox": [420, 138, 89, 177], "area": 3065}, {"id": 8030863, "category_id": 42, "iscrowd": 0, "bbox": [258, 129, 44, 98], "area": 1885}, {"id": 9281960, "category_id": 42, "iscrowd": 0, "bbox": [353, 193, 51, 133], "area": 5003}, {"id": 5611187, "category_id": 42, "iscrowd": 0, "bbox": [444, 178, 30, 114], "area": 882}, {"id": 8763604, "category_id": 42, "iscrowd": 0, "bbox": [360, 136, 33, 48], "area": 490}, {"id": 10535382, "category_id": 42, "iscrowd": 0, "bbox": [527, 143, 21, 76], "area": 615}, {"id": 11192519, "category_id": 42, "iscrowd": 0, "bbox": [356, 159, 38, 50], "area": 1013}, {"id": 10796483, "category_id": 42, "iscrowd": 0, "bbox": [352, 73, 64, 228], "area": 4257}, {"id": 5796479, "category_id": 42, "iscrowd": 0, "bbox": [253, 86, 44, 111], "area": 2094}, {"id": 2235157, "category_id": 42, "iscrowd": 0, "bbox": [21, 180, 51, 176], "area": 5954}, {"id": 5137266, "category_id": 112, "iscrowd": 0, "bbox": [383, 122, 69, 121], "area": 4458}, {"id": 4997684, "category_id": 181, "iscrowd": 0, "bbox": [0, 40, 378, 175], "area": 21266}, {"id": 14072739, "category_id": 187, "iscrowd": 0, "bbox": [284, 0, 88, 22], "area": 1393}, {"id": 11579568, "category_id": 191, "iscrowd": 0, "bbox": [0, 327, 640, 153], "area": 75711}, {"id": 4944235, "category_id": 193, "iscrowd": 0, "bbox": [243, 300, 397, 103], "area": 10492}, {"id": 7182237, "category_id": 194, "iscrowd": 0, "bbox": [445, 307, 14, 22], "area": 83}, {"id": 11058378, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 350], "area": 91387}], "file_name": "000000529939.png", "image_id": 529939}, {"segments_info": [{"id": 12883849, "category_id": 51, "iscrowd": 0, "bbox": [0, 291, 28, 105], "area": 1797}, {"id": 11971504, "category_id": 51, "iscrowd": 0, "bbox": [33, 129, 268, 232], "area": 14538}, {"id": 3387104, "category_id": 55, "iscrowd": 0, "bbox": [206, 209, 75, 75], "area": 4246}, {"id": 2858975, "category_id": 55, "iscrowd": 0, "bbox": [120, 240, 82, 83], "area": 4652}, {"id": 2206179, "category_id": 55, "iscrowd": 0, "bbox": [143, 163, 79, 88], "area": 5312}, {"id": 2336223, "category_id": 55, "iscrowd": 0, "bbox": [41, 128, 81, 74], "area": 4342}, {"id": 2533091, "category_id": 55, "iscrowd": 0, "bbox": [365, 48, 230, 155], "area": 24901}, {"id": 2471140, "category_id": 55, "iscrowd": 0, "bbox": [103, 105, 72, 69], "area": 3314}, {"id": 3780058, "category_id": 55, "iscrowd": 0, "bbox": [50, 193, 84, 93], "area": 5802}, {"id": 2208744, "category_id": 55, "iscrowd": 0, "bbox": [175, 126, 71, 70], "area": 2923}, {"id": 1150929, "category_id": 55, "iscrowd": 0, "bbox": [116, 161, 58, 82], "area": 1534}, {"id": 3459053, "category_id": 55, "iscrowd": 0, "bbox": [221, 185, 65, 52], "area": 1417}, {"id": 3058146, "category_id": 122, "iscrowd": 0, "bbox": [114, 50, 299, 145], "area": 146}, {"id": 15919850, "category_id": 168, "iscrowd": 0, "bbox": [591, 112, 49, 226], "area": 7933}, {"id": 14797257, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 640, 305], "area": 74732}], "file_name": "000000529966.png", "image_id": 529966}, {"segments_info": [{"id": 3096442, "category_id": 57, "iscrowd": 0, "bbox": [402, 177, 139, 17], "area": 1144}, {"id": 1649812, "category_id": 57, "iscrowd": 0, "bbox": [259, 287, 144, 44], "area": 3460}, {"id": 4490727, "category_id": 57, "iscrowd": 0, "bbox": [183, 353, 121, 74], "area": 3284}, {"id": 4940938, "category_id": 57, "iscrowd": 0, "bbox": [58, 144, 582, 211], "area": 52157}, {"id": 4093134, "category_id": 57, "iscrowd": 0, "bbox": [443, 275, 154, 69], "area": 3331}, {"id": 3768292, "category_id": 57, "iscrowd": 0, "bbox": [241, 297, 156, 76], "area": 3514}, {"id": 3636195, "category_id": 57, "iscrowd": 0, "bbox": [237, 315, 144, 96], "area": 3077}, {"id": 7440839, "category_id": 57, "iscrowd": 0, "bbox": [325, 167, 196, 64], "area": 2871}, {"id": 2443730, "category_id": 57, "iscrowd": 0, "bbox": [1, 70, 65, 42], "area": 1601}, {"id": 4223948, "category_id": 57, "iscrowd": 0, "bbox": [344, 239, 195, 126], "area": 8688}, {"id": 5015002, "category_id": 57, "iscrowd": 0, "bbox": [202, 219, 39, 61], "area": 1374}, {"id": 6187660, "category_id": 57, "iscrowd": 0, "bbox": [392, 182, 88, 25], "area": 646}, {"id": 5342428, "category_id": 57, "iscrowd": 0, "bbox": [192, 298, 91, 77], "area": 2627}, {"id": 2114909, "category_id": 57, "iscrowd": 1, "bbox": [0, 18, 628, 409], "area": 29772}, {"id": 400931, "category_id": 100, "iscrowd": 0, "bbox": [77, 0, 301, 189], "area": 25307}, {"id": 463392, "category_id": 122, "iscrowd": 0, "bbox": [506, 0, 134, 41], "area": 3253}, {"id": 7439516, "category_id": 189, "iscrowd": 0, "bbox": [0, 321, 640, 106], "area": 23293}, {"id": 7771239, "category_id": 195, "iscrowd": 0, "bbox": [264, 98, 78, 60], "area": 2439}, {"id": 2579544, "category_id": 196, "iscrowd": 0, "bbox": [0, 39, 640, 346], "area": 48770}], "file_name": "000000530052.png", "image_id": 530052}, {"segments_info": [{"id": 6642008, "category_id": 1, "iscrowd": 0, "bbox": [0, 135, 94, 130], "area": 3303}, {"id": 6710924, "category_id": 1, "iscrowd": 0, "bbox": [83, 22, 538, 424], "area": 92531}, {"id": 7303027, "category_id": 50, "iscrowd": 0, "bbox": [167, 256, 21, 50], "area": 346}, {"id": 4539722, "category_id": 51, "iscrowd": 0, "bbox": [87, 244, 242, 172], "area": 31319}, {"id": 3948908, "category_id": 62, "iscrowd": 0, "bbox": [512, 227, 127, 219], "area": 16020}, {"id": 3289140, "category_id": 63, "iscrowd": 0, "bbox": [0, 81, 139, 167], "area": 14355}, {"id": 2700387, "category_id": 67, "iscrowd": 0, "bbox": [0, 254, 639, 201], "area": 47760}, {"id": 1772850, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 640, 252], "area": 19822}, {"id": 10460315, "category_id": 176, "iscrowd": 0, "bbox": [237, 0, 403, 247], "area": 32673}, {"id": 8354128, "category_id": 181, "iscrowd": 0, "bbox": [148, 0, 105, 153], "area": 11704}, {"id": 3820669, "category_id": 189, "iscrowd": 0, "bbox": [560, 439, 80, 16], "area": 273}], "file_name": "000000530061.png", "image_id": 530061}, {"segments_info": [{"id": 5722965, "category_id": 3, "iscrowd": 0, "bbox": [114, 235, 385, 134], "area": 39499}, {"id": 5337749, "category_id": 17, "iscrowd": 0, "bbox": [161, 179, 267, 120], "area": 14458}, {"id": 197379, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 130847}], "file_name": "000000530099.png", "image_id": 530099}, {"segments_info": [{"id": 1251110, "category_id": 44, "iscrowd": 0, "bbox": [521, 3, 119, 100], "area": 9046}, {"id": 1459317, "category_id": 47, "iscrowd": 0, "bbox": [397, 0, 100, 53], "area": 4203}, {"id": 9015701, "category_id": 48, "iscrowd": 0, "bbox": [574, 242, 66, 48], "area": 2170}, {"id": 4739159, "category_id": 49, "iscrowd": 0, "bbox": [2, 284, 112, 77], "area": 4074}, {"id": 5402506, "category_id": 51, "iscrowd": 0, "bbox": [14, 78, 626, 550], "area": 228714}, {"id": 2514057, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 640, 631], "area": 153084}, {"id": 861772, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 640], "area": 7630}], "file_name": "000000530146.png", "image_id": 530146}, {"segments_info": [{"id": 7435381, "category_id": 1, "iscrowd": 0, "bbox": [140, 166, 111, 256], "area": 16043}, {"id": 5472594, "category_id": 1, "iscrowd": 0, "bbox": [41, 162, 109, 263], "area": 22773}, {"id": 6384507, "category_id": 1, "iscrowd": 0, "bbox": [0, 143, 55, 244], "area": 7425}, {"id": 9481138, "category_id": 1, "iscrowd": 0, "bbox": [177, 274, 134, 148], "area": 14034}, {"id": 2568502, "category_id": 1, "iscrowd": 0, "bbox": [124, 205, 19, 35], "area": 387}, {"id": 4874087, "category_id": 1, "iscrowd": 0, "bbox": [396, 284, 69, 143], "area": 5678}, {"id": 2502194, "category_id": 1, "iscrowd": 0, "bbox": [141, 187, 21, 38], "area": 491}, {"id": 1712934, "category_id": 1, "iscrowd": 0, "bbox": [535, 311, 104, 115], "area": 9102}, {"id": 8888744, "category_id": 1, "iscrowd": 0, "bbox": [307, 272, 130, 154], "area": 13066}, {"id": 3293509, "category_id": 1, "iscrowd": 0, "bbox": [266, 146, 151, 217], "area": 14730}, {"id": 5199474, "category_id": 28, "iscrowd": 0, "bbox": [127, 18, 381, 216], "area": 28183}, {"id": 11497828, "category_id": 28, "iscrowd": 0, "bbox": [0, 157, 28, 66], "area": 884}, {"id": 2504766, "category_id": 149, "iscrowd": 0, "bbox": [125, 251, 515, 176], "area": 11604}, {"id": 3233906, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 74, 89], "area": 4825}, {"id": 2835275, "category_id": 191, "iscrowd": 0, "bbox": [0, 219, 640, 208], "area": 9138}, {"id": 3096390, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 274], "area": 95207}], "file_name": "000000530162.png", "image_id": 530162}, {"segments_info": [{"id": 6586482, "category_id": 86, "iscrowd": 0, "bbox": [204, 333, 230, 271], "area": 40713}, {"id": 5538719, "category_id": 119, "iscrowd": 0, "bbox": [8, 71, 474, 508], "area": 98427}, {"id": 593428, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 482, 393], "area": 21101}, {"id": 3813940, "category_id": 190, "iscrowd": 0, "bbox": [0, 357, 482, 283], "area": 49103}, {"id": 13216177, "category_id": 200, "iscrowd": 0, "bbox": [0, 520, 223, 120], "area": 12690}], "file_name": "000000530457.png", "image_id": 530457}, {"segments_info": [{"id": 7759465, "category_id": 7, "iscrowd": 0, "bbox": [1, 0, 639, 452], "area": 231559}, {"id": 9067093, "category_id": 62, "iscrowd": 0, "bbox": [75, 109, 42, 37], "area": 1318}, {"id": 13156801, "category_id": 72, "iscrowd": 0, "bbox": [542, 104, 16, 12], "area": 188}, {"id": 1643538, "category_id": 147, "iscrowd": 0, "bbox": [108, 361, 253, 119], "area": 5391}, {"id": 10921892, "category_id": 191, "iscrowd": 0, "bbox": [143, 233, 497, 247], "area": 62749}], "file_name": "000000530466.png", "image_id": 530466}, {"segments_info": [{"id": 5073012, "category_id": 3, "iscrowd": 0, "bbox": [225, 260, 12, 9], "area": 83}, {"id": 8947603, "category_id": 3, "iscrowd": 0, "bbox": [271, 271, 15, 10], "area": 115}, {"id": 8226448, "category_id": 3, "iscrowd": 0, "bbox": [260, 262, 25, 13], "area": 232}, {"id": 4875882, "category_id": 3, "iscrowd": 0, "bbox": [456, 243, 32, 9], "area": 203}, {"id": 1912648, "category_id": 8, "iscrowd": 0, "bbox": [350, 338, 72, 35], "area": 1548}, {"id": 7850188, "category_id": 38, "iscrowd": 0, "bbox": [241, 181, 33, 23], "area": 282}, {"id": 12368313, "category_id": 38, "iscrowd": 0, "bbox": [314, 93, 6, 3], "area": 10}, {"id": 4346456, "category_id": 149, "iscrowd": 0, "bbox": [224, 306, 276, 69], "area": 5670}, {"id": 1919559, "category_id": 184, "iscrowd": 0, "bbox": [0, 192, 500, 183], "area": 58311}, {"id": 14867934, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 214], "area": 101117}, {"id": 2384992, "category_id": 193, "iscrowd": 0, "bbox": [0, 210, 500, 165], "area": 16848}, {"id": 5269102, "category_id": 194, "iscrowd": 0, "bbox": [0, 196, 500, 179], "area": 2964}], "file_name": "000000530470.png", "image_id": 530470}, {"segments_info": [{"id": 1578528, "category_id": 18, "iscrowd": 0, "bbox": [97, 107, 518, 194], "area": 52893}, {"id": 10660524, "category_id": 65, "iscrowd": 0, "bbox": [0, 1, 640, 467], "area": 226868}, {"id": 8227215, "category_id": 93, "iscrowd": 0, "bbox": [0, 101, 640, 377], "area": 7768}, {"id": 2896180, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 131], "area": 6999}], "file_name": "000000530624.png", "image_id": 530624}, {"segments_info": [{"id": 4608161, "category_id": 1, "iscrowd": 0, "bbox": [253, 13, 195, 415], "area": 54390}, {"id": 4606059, "category_id": 43, "iscrowd": 0, "bbox": [289, 145, 137, 125], "area": 1733}, {"id": 5730719, "category_id": 145, "iscrowd": 0, "bbox": [0, 388, 640, 40], "area": 12840}, {"id": 1186585, "category_id": 185, "iscrowd": 0, "bbox": [0, 281, 640, 104], "area": 35362}, {"id": 8292963, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 420], "area": 169227}], "file_name": "000000530820.png", "image_id": 530820}, {"segments_info": [{"id": 11453908, "category_id": 44, "iscrowd": 0, "bbox": [341, 280, 18, 35], "area": 534}, {"id": 10468820, "category_id": 47, "iscrowd": 0, "bbox": [328, 301, 12, 12], "area": 118}, {"id": 3697071, "category_id": 51, "iscrowd": 0, "bbox": [625, 210, 15, 5], "area": 57}, {"id": 6121075, "category_id": 51, "iscrowd": 0, "bbox": [157, 255, 35, 24], "area": 697}, {"id": 1907294, "category_id": 51, "iscrowd": 0, "bbox": [0, 191, 30, 18], "area": 390}, {"id": 6120559, "category_id": 51, "iscrowd": 0, "bbox": [84, 256, 29, 22], "area": 447}, {"id": 2435958, "category_id": 51, "iscrowd": 0, "bbox": [383, 264, 18, 9], "area": 128}, {"id": 1450840, "category_id": 51, "iscrowd": 0, "bbox": [125, 270, 24, 8], "area": 163}, {"id": 10993619, "category_id": 51, "iscrowd": 0, "bbox": [366, 293, 38, 23], "area": 633}, {"id": 3454925, "category_id": 52, "iscrowd": 0, "bbox": [289, 305, 10, 12], "area": 65}, {"id": 1910382, "category_id": 53, "iscrowd": 0, "bbox": [298, 305, 9, 11], "area": 81}, {"id": 1517438, "category_id": 53, "iscrowd": 0, "bbox": [320, 307, 5, 6], "area": 28}, {"id": 1910419, "category_id": 53, "iscrowd": 0, "bbox": [306, 306, 10, 10], "area": 78}, {"id": 8030875, "category_id": 67, "iscrowd": 0, "bbox": [265, 294, 146, 135], "area": 5729}, {"id": 11057602, "category_id": 79, "iscrowd": 0, "bbox": [200, 279, 66, 94], "area": 5806}, {"id": 9874617, "category_id": 79, "iscrowd": 0, "bbox": [77, 246, 120, 138], "area": 12175}, {"id": 5000282, "category_id": 81, "iscrowd": 0, "bbox": [256, 270, 95, 8], "area": 708}, {"id": 11389141, "category_id": 82, "iscrowd": 0, "bbox": [0, 207, 55, 209], "area": 10914}, {"id": 12441313, "category_id": 82, "iscrowd": 0, "bbox": [575, 214, 65, 181], "area": 10976}, {"id": 2175827, "category_id": 86, "iscrowd": 0, "bbox": [195, 150, 10, 9], "area": 66}, {"id": 2305891, "category_id": 86, "iscrowd": 0, "bbox": [194, 180, 9, 7], "area": 50}, {"id": 1248296, "category_id": 86, "iscrowd": 0, "bbox": [390, 153, 10, 5], "area": 40}, {"id": 2635879, "category_id": 86, "iscrowd": 0, "bbox": [391, 176, 12, 11], "area": 113}, {"id": 10008266, "category_id": 109, "iscrowd": 0, "bbox": [199, 112, 202, 147], "area": 16913}, {"id": 10272201, "category_id": 130, "iscrowd": 0, "bbox": [252, 44, 79, 45], "area": 1967}, {"id": 9152435, "category_id": 181, "iscrowd": 0, "bbox": [221, 121, 155, 141], "area": 9453}, {"id": 5994868, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 73], "area": 41371}, {"id": 11586262, "category_id": 188, "iscrowd": 0, "bbox": [0, 104, 640, 275], "area": 37024}, {"id": 4672600, "category_id": 190, "iscrowd": 0, "bbox": [0, 354, 640, 110], "area": 48555}, {"id": 7447479, "category_id": 199, "iscrowd": 0, "bbox": [0, 38, 640, 308], "area": 62518}], "file_name": "000000530836.png", "image_id": 530836}, {"segments_info": [{"id": 2562067, "category_id": 1, "iscrowd": 0, "bbox": [60, 134, 83, 36], "area": 2026}, {"id": 7097415, "category_id": 28, "iscrowd": 0, "bbox": [0, 91, 183, 79], "area": 9256}, {"id": 11044470, "category_id": 28, "iscrowd": 0, "bbox": [560, 43, 80, 39], "area": 1872}, {"id": 6765714, "category_id": 28, "iscrowd": 0, "bbox": [407, 64, 203, 65], "area": 6126}, {"id": 10380868, "category_id": 28, "iscrowd": 0, "bbox": [194, 95, 257, 123], "area": 13556}, {"id": 6702421, "category_id": 28, "iscrowd": 0, "bbox": [260, 41, 252, 60], "area": 8200}, {"id": 4006542, "category_id": 28, "iscrowd": 0, "bbox": [2, 155, 458, 265], "area": 103671}, {"id": 7683370, "category_id": 28, "iscrowd": 0, "bbox": [386, 73, 254, 297], "area": 56509}, {"id": 3945786, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 116], "area": 23824}, {"id": 13086879, "category_id": 199, "iscrowd": 0, "bbox": [30, 0, 242, 157], "area": 25760}], "file_name": "000000530854.png", "image_id": 530854}, {"segments_info": [{"id": 5793150, "category_id": 1, "iscrowd": 0, "bbox": [109, 119, 48, 132], "area": 3920}, {"id": 2698816, "category_id": 1, "iscrowd": 0, "bbox": [390, 134, 85, 89], "area": 3533}, {"id": 6185333, "category_id": 1, "iscrowd": 0, "bbox": [0, 142, 69, 86], "area": 2004}, {"id": 9013388, "category_id": 1, "iscrowd": 0, "bbox": [227, 169, 9, 14], "area": 90}, {"id": 2501684, "category_id": 1, "iscrowd": 0, "bbox": [15, 146, 57, 122], "area": 1947}, {"id": 2434858, "category_id": 1, "iscrowd": 0, "bbox": [321, 145, 76, 71], "area": 3343}, {"id": 9274751, "category_id": 28, "iscrowd": 0, "bbox": [296, 112, 107, 37], "area": 2781}, {"id": 1580065, "category_id": 31, "iscrowd": 0, "bbox": [14, 234, 40, 47], "area": 1275}, {"id": 10395309, "category_id": 48, "iscrowd": 0, "bbox": [221, 71, 64, 253], "area": 4746}, {"id": 4023710, "category_id": 58, "iscrowd": 0, "bbox": [119, 303, 298, 144], "area": 28919}, {"id": 2829871, "category_id": 62, "iscrowd": 0, "bbox": [176, 191, 4, 19], "area": 48}, {"id": 2500651, "category_id": 62, "iscrowd": 0, "bbox": [447, 201, 31, 36], "area": 571}, {"id": 1711657, "category_id": 62, "iscrowd": 0, "bbox": [498, 211, 21, 39], "area": 403}, {"id": 3488060, "category_id": 62, "iscrowd": 0, "bbox": [148, 192, 16, 19], "area": 120}, {"id": 1776670, "category_id": 62, "iscrowd": 0, "bbox": [1, 206, 29, 72], "area": 839}, {"id": 8616055, "category_id": 62, "iscrowd": 0, "bbox": [287, 208, 198, 74], "area": 11320}, {"id": 3425642, "category_id": 62, "iscrowd": 0, "bbox": [512, 195, 23, 64], "area": 618}, {"id": 3429966, "category_id": 64, "iscrowd": 0, "bbox": [120, 48, 140, 103], "area": 6074}, {"id": 5606535, "category_id": 64, "iscrowd": 0, "bbox": [371, 51, 92, 66], "area": 4522}, {"id": 3759191, "category_id": 64, "iscrowd": 0, "bbox": [371, 143, 23, 43], "area": 624}, {"id": 3947584, "category_id": 67, "iscrowd": 0, "bbox": [38, 196, 76, 81], "area": 1223}, {"id": 8487051, "category_id": 67, "iscrowd": 0, "bbox": [2, 280, 638, 195], "area": 36459}, {"id": 4145481, "category_id": 67, "iscrowd": 0, "bbox": [234, 205, 88, 49], "area": 784}, {"id": 1777955, "category_id": 112, "iscrowd": 0, "bbox": [527, 48, 113, 241], "area": 20461}, {"id": 5205341, "category_id": 184, "iscrowd": 0, "bbox": [51, 0, 308, 218], "area": 28524}, {"id": 5200748, "category_id": 186, "iscrowd": 0, "bbox": [470, 0, 148, 76], "area": 6304}, {"id": 10065575, "category_id": 189, "iscrowd": 0, "bbox": [276, 216, 181, 194], "area": 959}, {"id": 6381942, "category_id": 191, "iscrowd": 0, "bbox": [0, 221, 558, 226], "area": 20811}, {"id": 3489851, "category_id": 193, "iscrowd": 0, "bbox": [88, 212, 168, 35], "area": 2560}, {"id": 8421006, "category_id": 195, "iscrowd": 0, "bbox": [102, 343, 493, 137], "area": 16868}, {"id": 9677244, "category_id": 196, "iscrowd": 0, "bbox": [149, 289, 211, 144], "area": 666}, {"id": 6053733, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 226], "area": 44673}, {"id": 10857130, "category_id": 199, "iscrowd": 0, "bbox": [249, 165, 11, 36], "area": 265}], "file_name": "000000530975.png", "image_id": 530975}, {"segments_info": [{"id": 2706236, "category_id": 1, "iscrowd": 0, "bbox": [382, 281, 73, 184], "area": 7218}, {"id": 3685467, "category_id": 6, "iscrowd": 0, "bbox": [0, 220, 157, 187], "area": 26024}, {"id": 6446450, "category_id": 6, "iscrowd": 0, "bbox": [151, 55, 326, 392], "area": 82297}, {"id": 7957344, "category_id": 84, "iscrowd": 0, "bbox": [387, 348, 25, 12], "area": 158}, {"id": 5008237, "category_id": 92, "iscrowd": 0, "bbox": [38, 209, 54, 15], "area": 572}, {"id": 5330773, "category_id": 149, "iscrowd": 0, "bbox": [0, 394, 343, 246], "area": 62613}, {"id": 6909802, "category_id": 184, "iscrowd": 0, "bbox": [319, 0, 81, 640], "area": 34165}, {"id": 16181450, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 267], "area": 51712}, {"id": 8488320, "category_id": 191, "iscrowd": 0, "bbox": [180, 368, 300, 272], "area": 23678}, {"id": 4538429, "category_id": 197, "iscrowd": 0, "bbox": [0, 129, 160, 106], "area": 10713}], "file_name": "000000531036.png", "image_id": 531036}, {"segments_info": [{"id": 5722436, "category_id": 1, "iscrowd": 0, "bbox": [121, 303, 41, 108], "area": 2683}, {"id": 6784916, "category_id": 1, "iscrowd": 0, "bbox": [20, 424, 68, 56], "area": 1783}, {"id": 5591879, "category_id": 1, "iscrowd": 0, "bbox": [112, 447, 27, 33], "area": 712}, {"id": 4736573, "category_id": 1, "iscrowd": 0, "bbox": [392, 318, 40, 108], "area": 2483}, {"id": 4603188, "category_id": 1, "iscrowd": 0, "bbox": [357, 326, 40, 121], "area": 3233}, {"id": 7102800, "category_id": 1, "iscrowd": 0, "bbox": [428, 321, 22, 94], "area": 1124}, {"id": 3289910, "category_id": 1, "iscrowd": 0, "bbox": [486, 239, 13, 36], "area": 290}, {"id": 8814444, "category_id": 2, "iscrowd": 0, "bbox": [517, 451, 58, 29], "area": 409}, {"id": 3882574, "category_id": 10, "iscrowd": 0, "bbox": [168, 144, 189, 318], "area": 50869}, {"id": 5590844, "category_id": 10, "iscrowd": 0, "bbox": [438, 167, 54, 116], "area": 4102}, {"id": 5202014, "category_id": 31, "iscrowd": 0, "bbox": [120, 367, 9, 27], "area": 139}, {"id": 4542799, "category_id": 31, "iscrowd": 0, "bbox": [127, 370, 15, 32], "area": 382}, {"id": 5064750, "category_id": 31, "iscrowd": 0, "bbox": [422, 380, 11, 26], "area": 252}, {"id": 7104852, "category_id": 31, "iscrowd": 0, "bbox": [34, 458, 9, 22], "area": 135}, {"id": 10592143, "category_id": 149, "iscrowd": 0, "bbox": [505, 254, 135, 226], "area": 25036}, {"id": 12896437, "category_id": 151, "iscrowd": 0, "bbox": [73, 89, 367, 164], "area": 16809}, {"id": 6782550, "category_id": 184, "iscrowd": 0, "bbox": [217, 13, 182, 151], "area": 3576}, {"id": 16119536, "category_id": 187, "iscrowd": 0, "bbox": [355, 0, 125, 49], "area": 1307}, {"id": 8356465, "category_id": 191, "iscrowd": 0, "bbox": [0, 247, 517, 233], "area": 28190}, {"id": 7500385, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 404], "area": 132933}, {"id": 7766900, "category_id": 199, "iscrowd": 0, "bbox": [355, 381, 81, 37], "area": 157}], "file_name": "000000531134.png", "image_id": 531134}, {"segments_info": [{"id": 9205631, "category_id": 1, "iscrowd": 0, "bbox": [444, 164, 2, 4], "area": 6}, {"id": 4276047, "category_id": 1, "iscrowd": 0, "bbox": [355, 231, 36, 43], "area": 591}, {"id": 2237224, "category_id": 1, "iscrowd": 0, "bbox": [364, 224, 40, 53], "area": 841}, {"id": 4998495, "category_id": 1, "iscrowd": 0, "bbox": [473, 167, 5, 7], "area": 26}, {"id": 2434858, "category_id": 1, "iscrowd": 0, "bbox": [381, 169, 10, 27], "area": 139}, {"id": 4079692, "category_id": 1, "iscrowd": 0, "bbox": [299, 175, 14, 24], "area": 120}, {"id": 6377568, "category_id": 1, "iscrowd": 0, "bbox": [462, 164, 5, 7], "area": 27}, {"id": 4211513, "category_id": 1, "iscrowd": 0, "bbox": [207, 164, 8, 14], "area": 56}, {"id": 8812923, "category_id": 1, "iscrowd": 0, "bbox": [446, 163, 4, 6], "area": 21}, {"id": 4934468, "category_id": 1, "iscrowd": 0, "bbox": [470, 178, 11, 29], "area": 190}, {"id": 5460568, "category_id": 1, "iscrowd": 0, "bbox": [80, 191, 39, 26], "area": 321}, {"id": 4479059, "category_id": 1, "iscrowd": 0, "bbox": [89, 174, 13, 16], "area": 92}, {"id": 5792110, "category_id": 1, "iscrowd": 0, "bbox": [289, 206, 42, 66], "area": 1095}, {"id": 5326669, "category_id": 1, "iscrowd": 1, "bbox": [448, 151, 52, 23], "area": 644}, {"id": 4744062, "category_id": 39, "iscrowd": 0, "bbox": [310, 207, 15, 18], "area": 36}, {"id": 1317658, "category_id": 40, "iscrowd": 0, "bbox": [112, 198, 4, 4], "area": 11}, {"id": 2567986, "category_id": 40, "iscrowd": 0, "bbox": [299, 188, 4, 4], "area": 13}, {"id": 5133151, "category_id": 40, "iscrowd": 0, "bbox": [95, 181, 3, 3], "area": 6}, {"id": 5785145, "category_id": 92, "iscrowd": 0, "bbox": [192, 139, 59, 19], "area": 928}, {"id": 12366768, "category_id": 130, "iscrowd": 0, "bbox": [135, 51, 34, 20], "area": 345}, {"id": 3765098, "category_id": 145, "iscrowd": 0, "bbox": [0, 170, 500, 205], "area": 96009}, {"id": 8750463, "category_id": 184, "iscrowd": 0, "bbox": [0, 124, 488, 49], "area": 4920}, {"id": 15589590, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 152], "area": 67239}, {"id": 4670269, "category_id": 199, "iscrowd": 0, "bbox": [0, 135, 500, 59], "area": 13343}], "file_name": "000000531135.png", "image_id": 531135}, {"segments_info": [{"id": 10393225, "category_id": 9, "iscrowd": 0, "bbox": [137, 256, 84, 27], "area": 1350}, {"id": 9472641, "category_id": 9, "iscrowd": 0, "bbox": [64, 302, 150, 45], "area": 3332}, {"id": 11513512, "category_id": 9, "iscrowd": 0, "bbox": [409, 200, 35, 14], "area": 380}, {"id": 11973292, "category_id": 9, "iscrowd": 0, "bbox": [239, 232, 62, 18], "area": 787}, {"id": 12367798, "category_id": 9, "iscrowd": 0, "bbox": [499, 191, 41, 18], "area": 272}, {"id": 10789538, "category_id": 9, "iscrowd": 0, "bbox": [364, 200, 36, 11], "area": 308}, {"id": 8087384, "category_id": 9, "iscrowd": 0, "bbox": [444, 200, 37, 14], "area": 403}, {"id": 10787471, "category_id": 9, "iscrowd": 0, "bbox": [313, 204, 30, 10], "area": 200}, {"id": 9342351, "category_id": 128, "iscrowd": 0, "bbox": [9, 134, 631, 76], "area": 11327}, {"id": 7697260, "category_id": 144, "iscrowd": 0, "bbox": [0, 179, 640, 168], "area": 39640}, {"id": 5985570, "category_id": 155, "iscrowd": 0, "bbox": [0, 212, 640, 226], "area": 107188}, {"id": 4277561, "category_id": 184, "iscrowd": 0, "bbox": [185, 119, 455, 39], "area": 7135}, {"id": 14984536, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 143], "area": 81853}, {"id": 7632504, "category_id": 197, "iscrowd": 0, "bbox": [0, 119, 629, 90], "area": 23039}, {"id": 4542540, "category_id": 199, "iscrowd": 0, "bbox": [492, 224, 148, 52], "area": 2800}], "file_name": "000000531495.png", "image_id": 531495}, {"segments_info": [{"id": 6513507, "category_id": 1, "iscrowd": 0, "bbox": [384, 224, 92, 172], "area": 4471}, {"id": 7763574, "category_id": 1, "iscrowd": 0, "bbox": [332, 221, 60, 155], "area": 3218}, {"id": 4671303, "category_id": 1, "iscrowd": 0, "bbox": [252, 212, 79, 182], "area": 4384}, {"id": 9211020, "category_id": 1, "iscrowd": 0, "bbox": [170, 214, 86, 183], "area": 4473}, {"id": 7960953, "category_id": 15, "iscrowd": 0, "bbox": [182, 277, 296, 127], "area": 18641}, {"id": 11382189, "category_id": 155, "iscrowd": 0, "bbox": [0, 158, 640, 138], "area": 70194}, {"id": 16448250, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 161], "area": 99196}, {"id": 7237230, "category_id": 191, "iscrowd": 0, "bbox": [0, 355, 640, 125], "area": 66328}, {"id": 15856113, "category_id": 192, "iscrowd": 0, "bbox": [0, 144, 180, 18], "area": 3156}, {"id": 9079434, "category_id": 199, "iscrowd": 0, "bbox": [0, 277, 640, 105], "area": 32119}], "file_name": "000000531707.png", "image_id": 531707}, {"segments_info": [{"id": 3881784, "category_id": 79, "iscrowd": 0, "bbox": [27, 32, 345, 566], "area": 175510}, {"id": 10330295, "category_id": 177, "iscrowd": 0, "bbox": [269, 0, 38, 33], "area": 1011}, {"id": 7766926, "category_id": 190, "iscrowd": 0, "bbox": [0, 479, 424, 161], "area": 25842}, {"id": 10592935, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 424, 288], "area": 20862}, {"id": 5264471, "category_id": 200, "iscrowd": 0, "bbox": [363, 305, 61, 98], "area": 4745}], "file_name": "000000531771.png", "image_id": 531771}, {"segments_info": [{"id": 6782895, "category_id": 1, "iscrowd": 0, "bbox": [79, 138, 510, 296], "area": 56460}, {"id": 9540746, "category_id": 44, "iscrowd": 0, "bbox": [590, 2, 50, 99], "area": 3941}, {"id": 11325376, "category_id": 44, "iscrowd": 0, "bbox": [355, 218, 144, 67], "area": 7456}, {"id": 10529972, "category_id": 65, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 216159}, {"id": 5134941, "category_id": 75, "iscrowd": 0, "bbox": [609, 144, 31, 31], "area": 923}, {"id": 2112855, "category_id": 189, "iscrowd": 0, "bbox": [497, 0, 143, 251], "area": 11160}, {"id": 5993335, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 598, 71], "area": 5493}], "file_name": "000000532058.png", "image_id": 532058}, {"segments_info": [{"id": 2566184, "category_id": 23, "iscrowd": 0, "bbox": [134, 178, 232, 103], "area": 16584}, {"id": 7172459, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 95701}, {"id": 5346155, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 90704}], "file_name": "000000532071.png", "image_id": 532071}, {"segments_info": [{"id": 10387822, "category_id": 47, "iscrowd": 0, "bbox": [591, 0, 49, 145], "area": 5443}, {"id": 10393748, "category_id": 51, "iscrowd": 0, "bbox": [30, 0, 182, 30], "area": 4042}, {"id": 4027578, "category_id": 59, "iscrowd": 0, "bbox": [50, 41, 538, 352], "area": 149230}, {"id": 3551530, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 640, 422], "area": 54481}, {"id": 2894376, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 2360}, {"id": 13419724, "category_id": 195, "iscrowd": 0, "bbox": [55, 0, 585, 427], "area": 19537}, {"id": 7306655, "category_id": 196, "iscrowd": 0, "bbox": [83, 338, 41, 59], "area": 1524}], "file_name": "000000532129.png", "image_id": 532129}, {"segments_info": [{"id": 6844013, "category_id": 1, "iscrowd": 0, "bbox": [286, 371, 12, 19], "area": 153}, {"id": 2829356, "category_id": 1, "iscrowd": 0, "bbox": [251, 169, 70, 64], "area": 2164}, {"id": 7369841, "category_id": 3, "iscrowd": 0, "bbox": [407, 287, 13, 10], "area": 104}, {"id": 9607837, "category_id": 3, "iscrowd": 0, "bbox": [618, 289, 12, 8], "area": 74}, {"id": 9083032, "category_id": 3, "iscrowd": 0, "bbox": [448, 294, 12, 8], "area": 73}, {"id": 10067614, "category_id": 3, "iscrowd": 0, "bbox": [436, 294, 12, 8], "area": 80}, {"id": 8949901, "category_id": 3, "iscrowd": 0, "bbox": [461, 292, 12, 8], "area": 93}, {"id": 8818830, "category_id": 3, "iscrowd": 0, "bbox": [513, 294, 20, 6], "area": 93}, {"id": 9996179, "category_id": 38, "iscrowd": 0, "bbox": [62, 44, 46, 78], "area": 2491}, {"id": 4081210, "category_id": 42, "iscrowd": 0, "bbox": [239, 158, 60, 55], "area": 966}, {"id": 7963007, "category_id": 128, "iscrowd": 0, "bbox": [0, 248, 627, 65], "area": 17478}, {"id": 7241087, "category_id": 154, "iscrowd": 0, "bbox": [0, 286, 640, 49], "area": 14637}, {"id": 12897214, "category_id": 155, "iscrowd": 0, "bbox": [0, 319, 640, 107], "area": 64238}, {"id": 6450540, "category_id": 184, "iscrowd": 0, "bbox": [0, 241, 616, 73], "area": 8403}, {"id": 12106416, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 278], "area": 160110}, {"id": 6911092, "category_id": 197, "iscrowd": 0, "bbox": [594, 249, 46, 40], "area": 1151}], "file_name": "000000532481.png", "image_id": 532481}, {"segments_info": [{"id": 3949635, "category_id": 1, "iscrowd": 0, "bbox": [170, 68, 192, 132], "area": 7796}, {"id": 8290416, "category_id": 42, "iscrowd": 0, "bbox": [130, 54, 98, 152], "area": 5201}, {"id": 10197900, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 408], "area": 247781}], "file_name": "000000532493.png", "image_id": 532493}, {"segments_info": [{"id": 1577746, "category_id": 1, "iscrowd": 0, "bbox": [470, 392, 2, 9], "area": 6}, {"id": 1381397, "category_id": 1, "iscrowd": 0, "bbox": [463, 383, 12, 30], "area": 154}, {"id": 1184791, "category_id": 1, "iscrowd": 0, "bbox": [449, 396, 10, 14], "area": 70}, {"id": 789515, "category_id": 1, "iscrowd": 0, "bbox": [515, 386, 10, 29], "area": 204}, {"id": 2171685, "category_id": 10, "iscrowd": 0, "bbox": [541, 169, 22, 21], "area": 293}, {"id": 4603187, "category_id": 18, "iscrowd": 0, "bbox": [454, 410, 11, 5], "area": 46}, {"id": 2169878, "category_id": 178, "iscrowd": 0, "bbox": [459, 389, 35, 25], "area": 508}, {"id": 789771, "category_id": 184, "iscrowd": 0, "bbox": [0, 67, 640, 326], "area": 32590}, {"id": 15320221, "category_id": 187, "iscrowd": 0, "bbox": [167, 0, 473, 210], "area": 48719}, {"id": 2893856, "category_id": 191, "iscrowd": 0, "bbox": [345, 391, 295, 36], "area": 6276}, {"id": 921357, "category_id": 193, "iscrowd": 0, "bbox": [385, 373, 194, 41], "area": 3224}, {"id": 5198411, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 177506}], "file_name": "000000532530.png", "image_id": 532530}, {"segments_info": [{"id": 11052451, "category_id": 9, "iscrowd": 0, "bbox": [2, 1, 638, 421], "area": 112804}, {"id": 2240578, "category_id": 18, "iscrowd": 0, "bbox": [3, 65, 490, 362], "area": 89395}, {"id": 8942166, "category_id": 155, "iscrowd": 0, "bbox": [388, 165, 227, 65], "area": 7858}, {"id": 13484980, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 173], "area": 53563}, {"id": 16579837, "category_id": 199, "iscrowd": 0, "bbox": [339, 267, 301, 160], "area": 2148}], "file_name": "000000532575.png", "image_id": 532575}, {"segments_info": [{"id": 2305841, "category_id": 1, "iscrowd": 0, "bbox": [121, 4, 269, 165], "area": 19392}, {"id": 2895152, "category_id": 1, "iscrowd": 0, "bbox": [61, 42, 439, 589], "area": 150756}, {"id": 9339256, "category_id": 1, "iscrowd": 0, "bbox": [374, 1, 152, 628], "area": 59104}, {"id": 3555920, "category_id": 63, "iscrowd": 0, "bbox": [0, 250, 186, 381], "area": 46455}, {"id": 9143681, "category_id": 75, "iscrowd": 0, "bbox": [65, 495, 48, 96], "area": 1777}, {"id": 3621705, "category_id": 112, "iscrowd": 0, "bbox": [41, 0, 106, 266], "area": 16533}, {"id": 7177885, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 128, 287], "area": 13804}, {"id": 2566437, "category_id": 200, "iscrowd": 0, "bbox": [91, 536, 379, 104], "area": 4740}], "file_name": "000000532690.png", "image_id": 532690}, {"segments_info": [{"id": 3754585, "category_id": 62, "iscrowd": 0, "bbox": [376, 201, 160, 135], "area": 12882}, {"id": 4279900, "category_id": 63, "iscrowd": 0, "bbox": [0, 229, 231, 246], "area": 47064}, {"id": 4345168, "category_id": 64, "iscrowd": 0, "bbox": [117, 191, 64, 46], "area": 2031}, {"id": 3620676, "category_id": 72, "iscrowd": 0, "bbox": [536, 150, 104, 195], "area": 13899}, {"id": 4539724, "category_id": 74, "iscrowd": 0, "bbox": [231, 367, 21, 11], "area": 179}, {"id": 6117214, "category_id": 75, "iscrowd": 0, "bbox": [213, 357, 41, 9], "area": 329}, {"id": 4873072, "category_id": 109, "iscrowd": 0, "bbox": [195, 234, 25, 32], "area": 475}, {"id": 3558743, "category_id": 112, "iscrowd": 0, "bbox": [0, 36, 37, 235], "area": 6339}, {"id": 11909572, "category_id": 130, "iscrowd": 0, "bbox": [163, 156, 40, 88], "area": 1614}, {"id": 13291732, "category_id": 180, "iscrowd": 0, "bbox": [139, 17, 501, 279], "area": 51171}, {"id": 8029583, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 55], "area": 25068}, {"id": 1777960, "category_id": 188, "iscrowd": 0, "bbox": [486, 288, 154, 166], "area": 16481}, {"id": 6250088, "category_id": 189, "iscrowd": 0, "bbox": [214, 336, 107, 144], "area": 9829}, {"id": 2843511, "category_id": 199, "iscrowd": 0, "bbox": [0, 12, 616, 454], "area": 63909}, {"id": 3883863, "category_id": 200, "iscrowd": 0, "bbox": [160, 279, 480, 201], "area": 43860}], "file_name": "000000532761.png", "image_id": 532761}, {"segments_info": [{"id": 7505029, "category_id": 1, "iscrowd": 0, "bbox": [64, 1, 284, 225], "area": 25171}, {"id": 6581867, "category_id": 41, "iscrowd": 0, "bbox": [239, 187, 106, 57], "area": 2999}, {"id": 1514529, "category_id": 144, "iscrowd": 0, "bbox": [0, 186, 157, 105], "area": 2148}, {"id": 723979, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 375, 276], "area": 21140}, {"id": 5989998, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 457], "area": 203604}, {"id": 1777191, "category_id": 199, "iscrowd": 0, "bbox": [443, 0, 53, 22], "area": 868}], "file_name": "000000532855.png", "image_id": 532855}, {"segments_info": [{"id": 5328720, "category_id": 62, "iscrowd": 0, "bbox": [441, 141, 58, 37], "area": 1168}, {"id": 8026491, "category_id": 62, "iscrowd": 0, "bbox": [101, 136, 76, 44], "area": 2207}, {"id": 9408911, "category_id": 63, "iscrowd": 0, "bbox": [85, 162, 439, 188], "area": 47436}, {"id": 8089704, "category_id": 86, "iscrowd": 0, "bbox": [196, 178, 31, 22], "area": 338}, {"id": 4869989, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 485, 316], "area": 27095}, {"id": 9276306, "category_id": 112, "iscrowd": 0, "bbox": [491, 28, 56, 232], "area": 7774}, {"id": 2835033, "category_id": 118, "iscrowd": 0, "bbox": [29, 254, 571, 100], "area": 1293}, {"id": 2907508, "category_id": 119, "iscrowd": 0, "bbox": [194, 155, 51, 30], "area": 925}, {"id": 5926777, "category_id": 130, "iscrowd": 0, "bbox": [214, 0, 224, 171], "area": 4816}, {"id": 3884365, "category_id": 156, "iscrowd": 0, "bbox": [379, 161, 58, 72], "area": 2305}, {"id": 10000273, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 454, 188], "area": 20225}, {"id": 5069152, "category_id": 186, "iscrowd": 0, "bbox": [91, 0, 426, 31], "area": 8351}, {"id": 2635846, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 600, 300], "area": 23334}, {"id": 3288107, "category_id": 189, "iscrowd": 0, "bbox": [216, 196, 32, 39], "area": 649}, {"id": 8424337, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 569, 226], "area": 13657}, {"id": 3685963, "category_id": 200, "iscrowd": 0, "bbox": [0, 269, 600, 85], "area": 25414}], "file_name": "000000532901.png", "image_id": 532901}, {"segments_info": [{"id": 791344, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 194, 291], "area": 25163}, {"id": 9864836, "category_id": 72, "iscrowd": 0, "bbox": [292, 218, 181, 151], "area": 17378}, {"id": 1389130, "category_id": 75, "iscrowd": 0, "bbox": [2, 43, 347, 293], "area": 46339}, {"id": 1454412, "category_id": 186, "iscrowd": 0, "bbox": [127, 0, 323, 90], "area": 14524}, {"id": 1717838, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 78283}], "file_name": "000000533145.png", "image_id": 533145}, {"segments_info": [{"id": 543298, "category_id": 44, "iscrowd": 0, "bbox": [0, 1, 79, 180], "area": 11136}, {"id": 7114389, "category_id": 46, "iscrowd": 0, "bbox": [333, 0, 105, 157], "area": 12498}, {"id": 4618380, "category_id": 46, "iscrowd": 0, "bbox": [290, 0, 84, 117], "area": 4286}, {"id": 5664630, "category_id": 46, "iscrowd": 0, "bbox": [598, 3, 42, 175], "area": 5301}, {"id": 3559253, "category_id": 48, "iscrowd": 0, "bbox": [10, 242, 247, 85], "area": 2978}, {"id": 2319474, "category_id": 49, "iscrowd": 0, "bbox": [202, 324, 54, 98], "area": 3222}, {"id": 7251629, "category_id": 51, "iscrowd": 0, "bbox": [398, 150, 176, 141], "area": 17846}, {"id": 1598858, "category_id": 54, "iscrowd": 0, "bbox": [110, 125, 312, 224], "area": 45947}, {"id": 6716026, "category_id": 189, "iscrowd": 0, "bbox": [0, 18, 640, 409], "area": 128730}, {"id": 4747928, "category_id": 196, "iscrowd": 0, "bbox": [95, 215, 34, 43], "area": 654}], "file_name": "000000533206.png", "image_id": 533206}, {"segments_info": [{"id": 3621464, "category_id": 1, "iscrowd": 0, "bbox": [15, 9, 193, 269], "area": 19881}, {"id": 1120296, "category_id": 1, "iscrowd": 0, "bbox": [84, 34, 197, 247], "area": 19506}, {"id": 1449260, "category_id": 1, "iscrowd": 0, "bbox": [320, 80, 133, 197], "area": 18139}, {"id": 14147044, "category_id": 34, "iscrowd": 0, "bbox": [192, 48, 68, 80], "area": 2513}, {"id": 14597499, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 281], "area": 78940}], "file_name": "000000533493.png", "image_id": 533493}, {"segments_info": [{"id": 1184803, "category_id": 17, "iscrowd": 0, "bbox": [90, 282, 311, 198], "area": 40902}, {"id": 5727593, "category_id": 72, "iscrowd": 0, "bbox": [112, 1, 528, 446], "area": 168684}, {"id": 8750472, "category_id": 195, "iscrowd": 0, "bbox": [101, 227, 26, 23], "area": 245}], "file_name": "000000533536.png", "image_id": 533536}, {"segments_info": [{"id": 10985651, "category_id": 1, "iscrowd": 0, "bbox": [249, 80, 55, 59], "area": 1987}, {"id": 5463172, "category_id": 1, "iscrowd": 0, "bbox": [51, 88, 58, 51], "area": 1768}, {"id": 7306402, "category_id": 1, "iscrowd": 0, "bbox": [112, 83, 41, 60], "area": 1526}, {"id": 1711177, "category_id": 1, "iscrowd": 0, "bbox": [537, 66, 74, 85], "area": 4178}, {"id": 7568277, "category_id": 1, "iscrowd": 0, "bbox": [386, 0, 37, 138], "area": 3323}, {"id": 10264497, "category_id": 1, "iscrowd": 0, "bbox": [106, 137, 71, 233], "area": 10254}, {"id": 5988983, "category_id": 1, "iscrowd": 0, "bbox": [398, 129, 88, 297], "area": 14244}, {"id": 2893357, "category_id": 1, "iscrowd": 0, "bbox": [211, 94, 43, 44], "area": 1179}, {"id": 6904175, "category_id": 1, "iscrowd": 0, "bbox": [506, 0, 57, 51], "area": 1813}, {"id": 4737628, "category_id": 1, "iscrowd": 0, "bbox": [445, 70, 77, 83], "area": 3119}, {"id": 11775423, "category_id": 1, "iscrowd": 0, "bbox": [448, 116, 55, 70], "area": 2254}, {"id": 5459030, "category_id": 1, "iscrowd": 0, "bbox": [264, 117, 110, 288], "area": 18024}, {"id": 5987693, "category_id": 1, "iscrowd": 0, "bbox": [352, 0, 40, 137], "area": 3657}, {"id": 8089473, "category_id": 43, "iscrowd": 0, "bbox": [418, 327, 45, 52], "area": 937}, {"id": 10000802, "category_id": 43, "iscrowd": 0, "bbox": [169, 186, 42, 59], "area": 853}, {"id": 4470059, "category_id": 92, "iscrowd": 0, "bbox": [98, 184, 15, 24], "area": 194}, {"id": 7759978, "category_id": 138, "iscrowd": 0, "bbox": [135, 136, 430, 290], "area": 41166}, {"id": 11046541, "category_id": 145, "iscrowd": 0, "bbox": [12, 195, 628, 231], "area": 42965}, {"id": 6318200, "category_id": 161, "iscrowd": 0, "bbox": [385, 0, 152, 138], "area": 7140}, {"id": 4864568, "category_id": 199, "iscrowd": 0, "bbox": [151, 130, 489, 133], "area": 21379}], "file_name": "000000533816.png", "image_id": 533816}, {"segments_info": [{"id": 10204358, "category_id": 60, "iscrowd": 0, "bbox": [368, 116, 272, 240], "area": 51443}], "file_name": "000000533855.png", "image_id": 533855}, {"segments_info": [{"id": 7570077, "category_id": 48, "iscrowd": 0, "bbox": [0, 154, 150, 115], "area": 7460}, {"id": 8688281, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 640], "area": 37949}, {"id": 7247792, "category_id": 196, "iscrowd": 0, "bbox": [17, 0, 623, 566], "area": 233943}], "file_name": "000000533958.png", "image_id": 533958}, {"segments_info": [{"id": 5594232, "category_id": 1, "iscrowd": 0, "bbox": [196, 39, 201, 330], "area": 30838}, {"id": 5988717, "category_id": 1, "iscrowd": 0, "bbox": [346, 1, 32, 79], "area": 1204}, {"id": 3621977, "category_id": 1, "iscrowd": 0, "bbox": [379, 0, 94, 152], "area": 4294}, {"id": 10001107, "category_id": 1, "iscrowd": 0, "bbox": [224, 3, 276, 367], "area": 38518}, {"id": 1185338, "category_id": 15, "iscrowd": 0, "bbox": [365, 96, 135, 96], "area": 7152}, {"id": 2897236, "category_id": 15, "iscrowd": 0, "bbox": [48, 18, 55, 42], "area": 1361}, {"id": 1909291, "category_id": 27, "iscrowd": 0, "bbox": [396, 23, 41, 52], "area": 857}, {"id": 10135991, "category_id": 31, "iscrowd": 0, "bbox": [71, 60, 155, 78], "area": 5960}, {"id": 11103878, "category_id": 44, "iscrowd": 0, "bbox": [135, 168, 71, 151], "area": 7599}, {"id": 6323112, "category_id": 58, "iscrowd": 0, "bbox": [257, 206, 43, 24], "area": 553}, {"id": 6647944, "category_id": 62, "iscrowd": 0, "bbox": [53, 1, 44, 57], "area": 841}, {"id": 2106690, "category_id": 62, "iscrowd": 0, "bbox": [0, 0, 49, 56], "area": 1187}, {"id": 1775966, "category_id": 67, "iscrowd": 0, "bbox": [0, 258, 282, 116], "area": 18110}, {"id": 2108499, "category_id": 67, "iscrowd": 0, "bbox": [228, 15, 61, 14], "area": 516}, {"id": 2238271, "category_id": 67, "iscrowd": 0, "bbox": [401, 50, 35, 19], "area": 498}, {"id": 14212070, "category_id": 100, "iscrowd": 0, "bbox": [165, 328, 162, 47], "area": 2963}, {"id": 2105698, "category_id": 189, "iscrowd": 0, "bbox": [0, 278, 252, 69], "area": 178}, {"id": 3095367, "category_id": 190, "iscrowd": 0, "bbox": [0, 25, 500, 253], "area": 12093}, {"id": 4938089, "category_id": 191, "iscrowd": 0, "bbox": [330, 0, 141, 375], "area": 3977}, {"id": 4423369, "category_id": 196, "iscrowd": 0, "bbox": [198, 352, 54, 23], "area": 867}, {"id": 4349564, "category_id": 199, "iscrowd": 0, "bbox": [251, 0, 102, 57], "area": 2966}], "file_name": "000000534041.png", "image_id": 534041}, {"segments_info": [{"id": 5456732, "category_id": 1, "iscrowd": 0, "bbox": [137, 136, 102, 276], "area": 18468}, {"id": 5065069, "category_id": 1, "iscrowd": 0, "bbox": [226, 196, 105, 215], "area": 8890}, {"id": 15788765, "category_id": 9, "iscrowd": 0, "bbox": [75, 138, 24, 14], "area": 135}, {"id": 14866372, "category_id": 9, "iscrowd": 0, "bbox": [110, 99, 139, 29], "area": 2209}, {"id": 11642000, "category_id": 9, "iscrowd": 0, "bbox": [475, 168, 35, 14], "area": 305}, {"id": 7832719, "category_id": 18, "iscrowd": 0, "bbox": [238, 350, 75, 63], "area": 2486}, {"id": 8015931, "category_id": 28, "iscrowd": 0, "bbox": [108, 311, 40, 16], "area": 290}, {"id": 8611970, "category_id": 28, "iscrowd": 0, "bbox": [231, 169, 85, 30], "area": 1392}, {"id": 7440024, "category_id": 28, "iscrowd": 0, "bbox": [170, 131, 81, 51], "area": 1707}, {"id": 9855293, "category_id": 28, "iscrowd": 0, "bbox": [255, 300, 83, 49], "area": 2674}, {"id": 14077370, "category_id": 155, "iscrowd": 0, "bbox": [0, 103, 521, 227], "area": 68260}, {"id": 5198164, "category_id": 171, "iscrowd": 0, "bbox": [0, 312, 521, 99], "area": 30600}, {"id": 10321491, "category_id": 185, "iscrowd": 0, "bbox": [0, 201, 521, 101], "area": 6962}, {"id": 15984595, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 521, 111], "area": 54408}, {"id": 9674146, "category_id": 191, "iscrowd": 0, "bbox": [0, 389, 521, 32], "area": 8780}, {"id": 12365466, "category_id": 198, "iscrowd": 0, "bbox": [420, 139, 101, 37], "area": 1415}, {"id": 5987168, "category_id": 199, "iscrowd": 0, "bbox": [340, 168, 76, 151], "area": 8435}], "file_name": "000000534270.png", "image_id": 534270}, {"segments_info": [{"id": 3420459, "category_id": 3, "iscrowd": 0, "bbox": [3, 225, 87, 120], "area": 8438}, {"id": 6057085, "category_id": 20, "iscrowd": 0, "bbox": [364, 154, 34, 38], "area": 631}, {"id": 6582397, "category_id": 20, "iscrowd": 0, "bbox": [291, 156, 41, 17], "area": 482}, {"id": 3685701, "category_id": 20, "iscrowd": 0, "bbox": [130, 181, 42, 42], "area": 319}, {"id": 4082005, "category_id": 20, "iscrowd": 0, "bbox": [279, 169, 50, 41], "area": 1209}, {"id": 3620164, "category_id": 20, "iscrowd": 0, "bbox": [99, 180, 42, 37], "area": 462}, {"id": 3752783, "category_id": 20, "iscrowd": 0, "bbox": [127, 168, 48, 17], "area": 565}, {"id": 4673883, "category_id": 20, "iscrowd": 0, "bbox": [9, 179, 70, 49], "area": 1896}, {"id": 6320773, "category_id": 20, "iscrowd": 0, "bbox": [331, 151, 37, 21], "area": 467}, {"id": 5793396, "category_id": 20, "iscrowd": 0, "bbox": [226, 168, 17, 19], "area": 220}, {"id": 3489612, "category_id": 20, "iscrowd": 0, "bbox": [325, 171, 49, 33], "area": 1009}, {"id": 5727345, "category_id": 20, "iscrowd": 0, "bbox": [389, 159, 48, 37], "area": 1067}, {"id": 2568250, "category_id": 20, "iscrowd": 0, "bbox": [189, 187, 48, 40], "area": 713}, {"id": 2896959, "category_id": 20, "iscrowd": 0, "bbox": [141, 186, 74, 42], "area": 1689}, {"id": 3357508, "category_id": 20, "iscrowd": 0, "bbox": [71, 184, 62, 42], "area": 1573}, {"id": 4674142, "category_id": 20, "iscrowd": 1, "bbox": [0, 151, 421, 77], "area": 3928}, {"id": 9739683, "category_id": 128, "iscrowd": 0, "bbox": [298, 113, 81, 65], "area": 1459}, {"id": 4210493, "category_id": 133, "iscrowd": 0, "bbox": [0, 240, 4, 104], "area": 374}, {"id": 5526611, "category_id": 149, "iscrowd": 0, "bbox": [0, 268, 337, 91], "area": 15825}, {"id": 8095119, "category_id": 175, "iscrowd": 0, "bbox": [282, 188, 358, 70], "area": 11206}, {"id": 3754056, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 270], "area": 88969}, {"id": 14799811, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 161], "area": 23940}, {"id": 8094348, "category_id": 191, "iscrowd": 0, "bbox": [0, 192, 640, 167], "area": 57330}, {"id": 7239286, "category_id": 197, "iscrowd": 0, "bbox": [0, 130, 587, 62], "area": 4742}], "file_name": "000000534394.png", "image_id": 534394}, {"segments_info": [{"id": 10463156, "category_id": 88, "iscrowd": 0, "bbox": [85, 1, 300, 326], "area": 62083}, {"id": 4345448, "category_id": 93, "iscrowd": 0, "bbox": [344, 21, 156, 311], "area": 35384}, {"id": 6908272, "category_id": 199, "iscrowd": 0, "bbox": [346, 0, 154, 32], "area": 2846}], "file_name": "000000534601.png", "image_id": 534601}, {"segments_info": [{"id": 3023899, "category_id": 1, "iscrowd": 0, "bbox": [63, 49, 89, 322], "area": 19620}, {"id": 4667437, "category_id": 1, "iscrowd": 0, "bbox": [284, 97, 39, 119], "area": 1761}, {"id": 3091239, "category_id": 1, "iscrowd": 0, "bbox": [372, 101, 36, 81], "area": 1723}, {"id": 4471602, "category_id": 4, "iscrowd": 0, "bbox": [452, 138, 148, 257], "area": 21883}, {"id": 3222310, "category_id": 4, "iscrowd": 0, "bbox": [331, 125, 158, 148], "area": 13313}, {"id": 4076844, "category_id": 4, "iscrowd": 0, "bbox": [472, 150, 81, 96], "area": 3231}, {"id": 4406068, "category_id": 4, "iscrowd": 0, "bbox": [245, 117, 148, 237], "area": 16439}, {"id": 14142404, "category_id": 92, "iscrowd": 0, "bbox": [241, 63, 31, 30], "area": 511}, {"id": 5594958, "category_id": 184, "iscrowd": 0, "bbox": [26, 0, 574, 134], "area": 48744}, {"id": 5660751, "category_id": 185, "iscrowd": 0, "bbox": [0, 102, 600, 84], "area": 8997}, {"id": 15653824, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 600, 133], "area": 14591}, {"id": 8551800, "category_id": 191, "iscrowd": 0, "bbox": [0, 150, 577, 250], "area": 79212}, {"id": 3429192, "category_id": 193, "iscrowd": 0, "bbox": [150, 135, 434, 31], "area": 3481}, {"id": 3748904, "category_id": 197, "iscrowd": 0, "bbox": [0, 58, 235, 65], "area": 5262}], "file_name": "000000534605.png", "image_id": 534605}, {"segments_info": [{"id": 3087636, "category_id": 3, "iscrowd": 0, "bbox": [24, 200, 24, 22], "area": 321}, {"id": 7301214, "category_id": 7, "iscrowd": 0, "bbox": [529, 179, 97, 63], "area": 3600}, {"id": 8683385, "category_id": 7, "iscrowd": 0, "bbox": [13, 30, 518, 419], "area": 150779}, {"id": 3353897, "category_id": 10, "iscrowd": 0, "bbox": [547, 90, 22, 36], "area": 731}, {"id": 3091501, "category_id": 10, "iscrowd": 0, "bbox": [618, 176, 6, 19], "area": 109}, {"id": 1316117, "category_id": 147, "iscrowd": 0, "bbox": [0, 394, 341, 81], "area": 12986}, {"id": 3817019, "category_id": 185, "iscrowd": 0, "bbox": [332, 283, 146, 192], "area": 15221}, {"id": 12891559, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 202], "area": 47720}, {"id": 8028804, "category_id": 191, "iscrowd": 0, "bbox": [0, 189, 640, 286], "area": 46477}, {"id": 1183765, "category_id": 197, "iscrowd": 0, "bbox": [0, 13, 640, 202], "area": 21391}], "file_name": "000000534639.png", "image_id": 534639}, {"segments_info": [{"id": 9539736, "category_id": 33, "iscrowd": 0, "bbox": [415, 243, 220, 153], "area": 27848}, {"id": 9407895, "category_id": 33, "iscrowd": 0, "bbox": [301, 1, 116, 397], "area": 41685}, {"id": 5461340, "category_id": 33, "iscrowd": 0, "bbox": [153, 1, 161, 398], "area": 55863}, {"id": 8815242, "category_id": 33, "iscrowd": 0, "bbox": [530, 123, 110, 241], "area": 7338}, {"id": 6449030, "category_id": 33, "iscrowd": 0, "bbox": [416, 114, 193, 146], "area": 20822}, {"id": 8224906, "category_id": 33, "iscrowd": 0, "bbox": [0, 197, 171, 203], "area": 31354}, {"id": 3427727, "category_id": 33, "iscrowd": 0, "bbox": [1, 1, 181, 206], "area": 33688}, {"id": 11579846, "category_id": 156, "iscrowd": 0, "bbox": [376, 351, 264, 53], "area": 5124}, {"id": 10589852, "category_id": 186, "iscrowd": 0, "bbox": [334, 0, 306, 177], "area": 26781}, {"id": 5986146, "category_id": 199, "iscrowd": 0, "bbox": [413, 35, 150, 117], "area": 3460}], "file_name": "000000534664.png", "image_id": 534664}, {"segments_info": [{"id": 7169368, "category_id": 1, "iscrowd": 0, "bbox": [392, 192, 24, 42], "area": 612}, {"id": 3420465, "category_id": 1, "iscrowd": 0, "bbox": [0, 223, 42, 100], "area": 2284}, {"id": 7500652, "category_id": 6, "iscrowd": 0, "bbox": [43, 79, 550, 325], "area": 132125}, {"id": 7830910, "category_id": 149, "iscrowd": 0, "bbox": [0, 249, 640, 78], "area": 3053}, {"id": 5595238, "category_id": 184, "iscrowd": 0, "bbox": [0, 161, 640, 94], "area": 4975}, {"id": 7501176, "category_id": 185, "iscrowd": 0, "bbox": [590, 263, 50, 44], "area": 1668}, {"id": 16053234, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 219], "area": 82442}, {"id": 5991023, "category_id": 191, "iscrowd": 0, "bbox": [0, 317, 640, 163], "area": 75233}, {"id": 6645863, "category_id": 197, "iscrowd": 0, "bbox": [0, 139, 640, 132], "area": 4362}], "file_name": "000000534673.png", "image_id": 534673}, {"segments_info": [{"id": 7033692, "category_id": 1, "iscrowd": 0, "bbox": [404, 226, 92, 189], "area": 6872}, {"id": 5852242, "category_id": 1, "iscrowd": 0, "bbox": [587, 278, 25, 55], "area": 606}, {"id": 7826306, "category_id": 1, "iscrowd": 0, "bbox": [108, 226, 85, 156], "area": 5392}, {"id": 7894157, "category_id": 1, "iscrowd": 0, "bbox": [362, 249, 51, 79], "area": 1335}, {"id": 5521229, "category_id": 4, "iscrowd": 0, "bbox": [536, 297, 72, 94], "area": 2304}, {"id": 6708337, "category_id": 4, "iscrowd": 0, "bbox": [19, 280, 246, 131], "area": 16088}, {"id": 4731192, "category_id": 4, "iscrowd": 0, "bbox": [558, 320, 54, 95], "area": 3407}, {"id": 7233914, "category_id": 4, "iscrowd": 0, "bbox": [297, 288, 79, 86], "area": 3212}, {"id": 6047822, "category_id": 4, "iscrowd": 0, "bbox": [301, 299, 256, 146], "area": 19823}, {"id": 5321785, "category_id": 31, "iscrowd": 0, "bbox": [405, 289, 87, 61], "area": 1287}, {"id": 6051681, "category_id": 149, "iscrowd": 0, "bbox": [0, 357, 612, 195], "area": 76797}, {"id": 6777468, "category_id": 184, "iscrowd": 0, "bbox": [0, 189, 612, 99], "area": 19475}, {"id": 6512499, "category_id": 185, "iscrowd": 0, "bbox": [0, 257, 605, 86], "area": 19619}, {"id": 10267834, "category_id": 187, "iscrowd": 0, "bbox": [0, 57, 612, 219], "area": 96360}, {"id": 8683669, "category_id": 191, "iscrowd": 0, "bbox": [0, 322, 317, 42], "area": 3706}], "file_name": "000000534827.png", "image_id": 534827}, {"segments_info": [{"id": 9607636, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 111, 360], "area": 6613}, {"id": 2891409, "category_id": 1, "iscrowd": 0, "bbox": [61, 1, 176, 113], "area": 12188}, {"id": 5071750, "category_id": 21, "iscrowd": 0, "bbox": [321, 78, 319, 343], "area": 81457}, {"id": 8032674, "category_id": 190, "iscrowd": 0, "bbox": [417, 15, 223, 412], "area": 23489}, {"id": 1646626, "category_id": 194, "iscrowd": 0, "bbox": [317, 0, 261, 124], "area": 20597}, {"id": 10007507, "category_id": 196, "iscrowd": 0, "bbox": [0, 21, 328, 377], "area": 81443}], "file_name": "000000535094.png", "image_id": 535094}, {"segments_info": [{"id": 2172201, "category_id": 22, "iscrowd": 0, "bbox": [374, 191, 195, 230], "area": 10882}, {"id": 4543577, "category_id": 22, "iscrowd": 0, "bbox": [1, 112, 197, 129], "area": 14379}, {"id": 2633524, "category_id": 22, "iscrowd": 0, "bbox": [134, 50, 397, 389], "area": 81307}, {"id": 4939863, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 86642}, {"id": 16119797, "category_id": 187, "iscrowd": 0, "bbox": [329, 0, 311, 29], "area": 3178}, {"id": 5016192, "category_id": 193, "iscrowd": 0, "bbox": [0, 160, 640, 345], "area": 86254}, {"id": 5927811, "category_id": 194, "iscrowd": 0, "bbox": [0, 358, 627, 129], "area": 23824}, {"id": 6979984, "category_id": 198, "iscrowd": 0, "bbox": [404, 188, 236, 211], "area": 11465}], "file_name": "000000535156.png", "image_id": 535156}, {"segments_info": [{"id": 4793910, "category_id": 47, "iscrowd": 0, "bbox": [19, 409, 115, 131], "area": 12187}, {"id": 2959989, "category_id": 47, "iscrowd": 0, "bbox": [43, 283, 136, 164], "area": 13742}, {"id": 4960961, "category_id": 52, "iscrowd": 0, "bbox": [419, 250, 172, 238], "area": 24549}, {"id": 3227244, "category_id": 59, "iscrowd": 0, "bbox": [146, 172, 30, 36], "area": 771}, {"id": 3225437, "category_id": 59, "iscrowd": 0, "bbox": [198, 136, 25, 35], "area": 676}, {"id": 2498856, "category_id": 84, "iscrowd": 0, "bbox": [61, 22, 71, 104], "area": 3883}, {"id": 4538453, "category_id": 84, "iscrowd": 0, "bbox": [29, 206, 58, 99], "area": 3243}, {"id": 3617342, "category_id": 84, "iscrowd": 0, "bbox": [20, 29, 74, 174], "area": 8665}, {"id": 10127250, "category_id": 100, "iscrowd": 0, "bbox": [173, 268, 272, 274], "area": 32879}], "file_name": "000000535253.png", "image_id": 535253}, {"segments_info": [{"id": 7365220, "category_id": 1, "iscrowd": 0, "bbox": [114, 2, 211, 204], "area": 15981}, {"id": 4343640, "category_id": 41, "iscrowd": 0, "bbox": [151, 118, 222, 114], "area": 6927}, {"id": 7960443, "category_id": 144, "iscrowd": 0, "bbox": [0, 182, 500, 151], "area": 43400}, {"id": 4277047, "category_id": 184, "iscrowd": 0, "bbox": [11, 0, 489, 262], "area": 59440}, {"id": 2499359, "category_id": 185, "iscrowd": 0, "bbox": [198, 186, 302, 104], "area": 4077}, {"id": 15185542, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 489, 213], "area": 31869}], "file_name": "000000535306.png", "image_id": 535306}, {"segments_info": [{"id": 2432795, "category_id": 1, "iscrowd": 0, "bbox": [0, 2, 97, 334], "area": 22700}, {"id": 2169886, "category_id": 1, "iscrowd": 0, "bbox": [81, 0, 127, 205], "area": 11342}, {"id": 9205345, "category_id": 51, "iscrowd": 0, "bbox": [538, 193, 78, 86], "area": 3250}, {"id": 7445961, "category_id": 60, "iscrowd": 0, "bbox": [376, 396, 21, 14], "area": 221}, {"id": 4295607, "category_id": 60, "iscrowd": 0, "bbox": [431, 359, 20, 15], "area": 185}, {"id": 11717571, "category_id": 60, "iscrowd": 0, "bbox": [247, 295, 26, 18], "area": 352}, {"id": 6195647, "category_id": 60, "iscrowd": 0, "bbox": [335, 402, 18, 11], "area": 142}, {"id": 4430021, "category_id": 60, "iscrowd": 0, "bbox": [345, 388, 21, 14], "area": 219}, {"id": 7053762, "category_id": 60, "iscrowd": 0, "bbox": [119, 334, 35, 19], "area": 432}, {"id": 6062265, "category_id": 60, "iscrowd": 0, "bbox": [473, 404, 21, 16], "area": 206}, {"id": 7578058, "category_id": 60, "iscrowd": 0, "bbox": [405, 403, 19, 12], "area": 163}, {"id": 6590408, "category_id": 60, "iscrowd": 0, "bbox": [443, 403, 21, 19], "area": 279}, {"id": 6724304, "category_id": 60, "iscrowd": 0, "bbox": [352, 395, 20, 18], "area": 188}, {"id": 8496843, "category_id": 60, "iscrowd": 0, "bbox": [397, 399, 18, 9], "area": 120}, {"id": 5276582, "category_id": 60, "iscrowd": 0, "bbox": [373, 374, 20, 13], "area": 174}, {"id": 7183818, "category_id": 60, "iscrowd": 0, "bbox": [357, 415, 15, 10], "area": 117}, {"id": 7443122, "category_id": 60, "iscrowd": 1, "bbox": [283, 349, 233, 79], "area": 10000}, {"id": 13142043, "category_id": 62, "iscrowd": 0, "bbox": [76, 106, 165, 172], "area": 14515}, {"id": 5790540, "category_id": 185, "iscrowd": 0, "bbox": [55, 0, 585, 120], "area": 31060}, {"id": 5917243, "category_id": 189, "iscrowd": 0, "bbox": [443, 293, 197, 135], "area": 15079}, {"id": 4339757, "category_id": 190, "iscrowd": 0, "bbox": [153, 182, 158, 115], "area": 7362}, {"id": 4737879, "category_id": 196, "iscrowd": 0, "bbox": [1, 251, 440, 131], "area": 6153}], "file_name": "000000535523.png", "image_id": 535523}, {"segments_info": [{"id": 12174539, "category_id": 20, "iscrowd": 0, "bbox": [375, 201, 22, 14], "area": 205}, {"id": 11451069, "category_id": 20, "iscrowd": 0, "bbox": [349, 196, 21, 14], "area": 204}, {"id": 10464431, "category_id": 20, "iscrowd": 0, "bbox": [29, 132, 9, 13], "area": 94}, {"id": 12305611, "category_id": 20, "iscrowd": 0, "bbox": [262, 245, 42, 40], "area": 852}, {"id": 9544103, "category_id": 20, "iscrowd": 0, "bbox": [100, 240, 55, 33], "area": 1330}, {"id": 9215388, "category_id": 20, "iscrowd": 0, "bbox": [90, 137, 12, 17], "area": 125}, {"id": 10859449, "category_id": 20, "iscrowd": 0, "bbox": [231, 427, 118, 85], "area": 6177}, {"id": 10070701, "category_id": 20, "iscrowd": 0, "bbox": [121, 112, 10, 8], "area": 44}, {"id": 11647167, "category_id": 20, "iscrowd": 0, "bbox": [232, 354, 39, 59], "area": 1636}, {"id": 9937832, "category_id": 20, "iscrowd": 0, "bbox": [133, 115, 5, 6], "area": 20}, {"id": 8818321, "category_id": 20, "iscrowd": 0, "bbox": [71, 136, 11, 14], "area": 101}, {"id": 2770234, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 59637}, {"id": 5405809, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 427, 190], "area": 42223}, {"id": 3370836, "category_id": 193, "iscrowd": 0, "bbox": [0, 103, 427, 537], "area": 160353}], "file_name": "000000535578.png", "image_id": 535578}, {"segments_info": [{"id": 7106694, "category_id": 1, "iscrowd": 0, "bbox": [452, 178, 45, 27], "area": 252}, {"id": 8420502, "category_id": 1, "iscrowd": 0, "bbox": [43, 207, 76, 18], "area": 581}, {"id": 7628642, "category_id": 1, "iscrowd": 0, "bbox": [181, 172, 14, 19], "area": 150}, {"id": 4539223, "category_id": 1, "iscrowd": 0, "bbox": [199, 160, 12, 30], "area": 239}, {"id": 8290202, "category_id": 1, "iscrowd": 0, "bbox": [57, 199, 55, 22], "area": 235}, {"id": 9215915, "category_id": 28, "iscrowd": 0, "bbox": [306, 158, 122, 31], "area": 2405}, {"id": 11428923, "category_id": 31, "iscrowd": 0, "bbox": [479, 202, 13, 5], "area": 40}, {"id": 11053483, "category_id": 31, "iscrowd": 0, "bbox": [15, 210, 20, 12], "area": 194}, {"id": 8421770, "category_id": 62, "iscrowd": 0, "bbox": [384, 237, 40, 41], "area": 1187}, {"id": 7567215, "category_id": 62, "iscrowd": 0, "bbox": [451, 182, 27, 20], "area": 110}, {"id": 8293242, "category_id": 62, "iscrowd": 0, "bbox": [285, 220, 49, 59], "area": 1899}, {"id": 11384766, "category_id": 154, "iscrowd": 0, "bbox": [0, 186, 500, 190], "area": 84610}, {"id": 9732449, "category_id": 155, "iscrowd": 0, "bbox": [0, 99, 500, 102], "area": 42120}, {"id": 7900043, "category_id": 168, "iscrowd": 0, "bbox": [52, 181, 408, 101], "area": 1045}, {"id": 13412229, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 111], "area": 51957}], "file_name": "000000535608.png", "image_id": 535608}, {"segments_info": [{"id": 5395569, "category_id": 1, "iscrowd": 0, "bbox": [364, 209, 89, 70], "area": 2245}, {"id": 10921645, "category_id": 42, "iscrowd": 0, "bbox": [408, 278, 39, 11], "area": 316}, {"id": 9472900, "category_id": 155, "iscrowd": 0, "bbox": [0, 14, 640, 412], "area": 259773}, {"id": 13614778, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 17], "area": 10207}], "file_name": "000000535858.png", "image_id": 535858}, {"segments_info": [{"id": 3552084, "category_id": 1, "iscrowd": 0, "bbox": [8, 301, 350, 336], "area": 78902}, {"id": 2107191, "category_id": 1, "iscrowd": 0, "bbox": [90, 146, 154, 170], "area": 10833}, {"id": 4871006, "category_id": 65, "iscrowd": 0, "bbox": [3, 99, 355, 534], "area": 62668}, {"id": 1841945, "category_id": 84, "iscrowd": 0, "bbox": [131, 225, 144, 164], "area": 19074}, {"id": 10068648, "category_id": 93, "iscrowd": 0, "bbox": [0, 345, 358, 295], "area": 3766}, {"id": 8626621, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 358, 217], "area": 51822}], "file_name": "000000536038.png", "image_id": 536038}, {"segments_info": [{"id": 4679026, "category_id": 44, "iscrowd": 0, "bbox": [78, 234, 121, 228], "area": 17915}, {"id": 9208444, "category_id": 47, "iscrowd": 0, "bbox": [320, 387, 132, 171], "area": 16367}, {"id": 7302777, "category_id": 49, "iscrowd": 0, "bbox": [65, 494, 179, 120], "area": 4783}, {"id": 6257031, "category_id": 107, "iscrowd": 0, "bbox": [0, 158, 480, 482], "area": 102728}, {"id": 3826507, "category_id": 122, "iscrowd": 0, "bbox": [161, 478, 65, 60], "area": 3082}, {"id": 6129042, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 235], "area": 65459}], "file_name": "000000536073.png", "image_id": 536073}, {"segments_info": [{"id": 8553865, "category_id": 188, "iscrowd": 0, "bbox": [186, 0, 77, 175], "area": 10892}, {"id": 10658717, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 213, 175], "area": 19004}], "file_name": "000000536343.png", "image_id": 536343}, {"segments_info": [{"id": 2173230, "category_id": 8, "iscrowd": 0, "bbox": [532, 203, 108, 60], "area": 3711}, {"id": 4281962, "category_id": 44, "iscrowd": 0, "bbox": [259, 438, 49, 20], "area": 491}, {"id": 2897474, "category_id": 44, "iscrowd": 0, "bbox": [173, 371, 21, 17], "area": 174}, {"id": 2106668, "category_id": 62, "iscrowd": 0, "bbox": [80, 233, 64, 100], "area": 3436}, {"id": 2106149, "category_id": 62, "iscrowd": 0, "bbox": [2, 256, 27, 64], "area": 1411}, {"id": 9738142, "category_id": 82, "iscrowd": 0, "bbox": [292, 133, 118, 217], "area": 23780}, {"id": 7967140, "category_id": 112, "iscrowd": 0, "bbox": [265, 103, 41, 206], "area": 2861}, {"id": 2570573, "category_id": 130, "iscrowd": 0, "bbox": [432, 20, 20, 25], "area": 372}, {"id": 4541521, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 490, 335], "area": 69074}, {"id": 1712163, "category_id": 181, "iscrowd": 0, "bbox": [71, 109, 80, 112], "area": 7321}, {"id": 4148564, "category_id": 184, "iscrowd": 0, "bbox": [584, 102, 56, 103], "area": 3483}, {"id": 3952744, "category_id": 185, "iscrowd": 0, "bbox": [410, 159, 76, 80], "area": 4944}, {"id": 2108991, "category_id": 186, "iscrowd": 0, "bbox": [252, 0, 388, 129], "area": 25730}, {"id": 16119028, "category_id": 187, "iscrowd": 0, "bbox": [500, 54, 140, 108], "area": 6826}, {"id": 4475471, "category_id": 190, "iscrowd": 0, "bbox": [0, 252, 640, 228], "area": 85557}, {"id": 7173501, "category_id": 191, "iscrowd": 0, "bbox": [409, 234, 231, 148], "area": 15559}, {"id": 2046525, "category_id": 193, "iscrowd": 0, "bbox": [0, 227, 560, 253], "area": 3505}, {"id": 2107182, "category_id": 194, "iscrowd": 0, "bbox": [602, 250, 38, 27], "area": 451}], "file_name": "000000536947.png", "image_id": 536947}, {"segments_info": [{"id": 5798796, "category_id": 25, "iscrowd": 0, "bbox": [163, 45, 220, 558], "area": 34571}, {"id": 4941405, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 218], "area": 86582}, {"id": 5147262, "category_id": 193, "iscrowd": 0, "bbox": [0, 163, 480, 477], "area": 185602}], "file_name": "000000537053.png", "image_id": 537053}, {"segments_info": [{"id": 6844530, "category_id": 1, "iscrowd": 0, "bbox": [427, 355, 14, 33], "area": 168}, {"id": 6444366, "category_id": 1, "iscrowd": 0, "bbox": [444, 354, 11, 10], "area": 61}, {"id": 3033918, "category_id": 15, "iscrowd": 0, "bbox": [399, 363, 67, 28], "area": 1145}, {"id": 8873280, "category_id": 155, "iscrowd": 0, "bbox": [0, 238, 640, 134], "area": 49657}, {"id": 13996127, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 239], "area": 140564}, {"id": 4285018, "category_id": 192, "iscrowd": 0, "bbox": [0, 202, 387, 89], "area": 28272}, {"id": 2786420, "category_id": 193, "iscrowd": 0, "bbox": [0, 323, 640, 73], "area": 29676}, {"id": 4814455, "category_id": 198, "iscrowd": 0, "bbox": [365, 337, 275, 49], "area": 3814}], "file_name": "000000537153.png", "image_id": 537153}, {"segments_info": [{"id": 5530502, "category_id": 60, "iscrowd": 0, "bbox": [130, 25, 416, 368], "area": 120645}, {"id": 7373205, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 15429}, {"id": 10855077, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 126414}], "file_name": "000000537241.png", "image_id": 537241}, {"segments_info": [{"id": 3884628, "category_id": 1, "iscrowd": 0, "bbox": [147, 5, 284, 405], "area": 69968}, {"id": 4539731, "category_id": 1, "iscrowd": 0, "bbox": [349, 43, 165, 284], "area": 22686}, {"id": 3029836, "category_id": 1, "iscrowd": 0, "bbox": [0, 2, 466, 473], "area": 89350}, {"id": 7960442, "category_id": 47, "iscrowd": 0, "bbox": [540, 230, 76, 83], "area": 4363}, {"id": 8157563, "category_id": 62, "iscrowd": 0, "bbox": [496, 200, 142, 78], "area": 4624}, {"id": 5591901, "category_id": 77, "iscrowd": 0, "bbox": [361, 215, 50, 68], "area": 1313}, {"id": 6186353, "category_id": 77, "iscrowd": 0, "bbox": [337, 405, 117, 75], "area": 4844}, {"id": 7496284, "category_id": 77, "iscrowd": 0, "bbox": [488, 172, 41, 39], "area": 399}, {"id": 16448763, "category_id": 181, "iscrowd": 0, "bbox": [165, 0, 83, 20], "area": 1046}, {"id": 7638942, "category_id": 186, "iscrowd": 0, "bbox": [322, 0, 45, 39], "area": 999}, {"id": 9738138, "category_id": 189, "iscrowd": 0, "bbox": [484, 281, 156, 199], "area": 12396}, {"id": 13160148, "category_id": 195, "iscrowd": 0, "bbox": [141, 0, 499, 480], "area": 34211}, {"id": 12233366, "category_id": 199, "iscrowd": 0, "bbox": [352, 0, 288, 291], "area": 35263}], "file_name": "000000537270.png", "image_id": 537270}, {"segments_info": [{"id": 2370406, "category_id": 11, "iscrowd": 0, "bbox": [263, 278, 22, 54], "area": 780}, {"id": 2900283, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 313], "area": 114833}, {"id": 14538192, "category_id": 187, "iscrowd": 0, "bbox": [130, 0, 349, 86], "area": 15903}, {"id": 3500389, "category_id": 193, "iscrowd": 0, "bbox": [0, 223, 640, 205], "area": 61683}, {"id": 9671311, "category_id": 197, "iscrowd": 0, "bbox": [31, 119, 330, 136], "area": 29457}], "file_name": "000000537355.png", "image_id": 537355}, {"segments_info": [{"id": 10989519, "category_id": 1, "iscrowd": 0, "bbox": [373, 217, 227, 183], "area": 11602}, {"id": 986899, "category_id": 1, "iscrowd": 0, "bbox": [26, 76, 131, 316], "area": 23580}, {"id": 9145756, "category_id": 1, "iscrowd": 0, "bbox": [238, 71, 78, 241], "area": 10091}, {"id": 7369596, "category_id": 1, "iscrowd": 0, "bbox": [507, 80, 93, 177], "area": 6979}, {"id": 9736345, "category_id": 3, "iscrowd": 0, "bbox": [105, 49, 227, 124], "area": 12148}, {"id": 5986397, "category_id": 3, "iscrowd": 0, "bbox": [320, 56, 121, 54], "area": 1586}, {"id": 6579039, "category_id": 3, "iscrowd": 0, "bbox": [555, 25, 45, 59], "area": 1652}, {"id": 15658476, "category_id": 28, "iscrowd": 0, "bbox": [184, 1, 163, 102], "area": 7912}, {"id": 9076606, "category_id": 28, "iscrowd": 0, "bbox": [0, 0, 173, 101], "area": 12644}, {"id": 12699594, "category_id": 28, "iscrowd": 0, "bbox": [323, 20, 46, 43], "area": 1461}, {"id": 10064020, "category_id": 31, "iscrowd": 0, "bbox": [224, 124, 38, 76], "area": 1974}, {"id": 5593319, "category_id": 53, "iscrowd": 0, "bbox": [379, 218, 137, 129], "area": 12647}, {"id": 5920209, "category_id": 53, "iscrowd": 0, "bbox": [444, 195, 105, 99], "area": 5002}, {"id": 8619658, "category_id": 149, "iscrowd": 0, "bbox": [0, 45, 600, 355], "area": 39823}, {"id": 6913672, "category_id": 171, "iscrowd": 0, "bbox": [284, 161, 130, 239], "area": 14324}, {"id": 3162175, "category_id": 184, "iscrowd": 0, "bbox": [119, 0, 481, 207], "area": 14149}, {"id": 6974837, "category_id": 191, "iscrowd": 0, "bbox": [114, 102, 486, 298], "area": 12596}, {"id": 3233872, "category_id": 193, "iscrowd": 0, "bbox": [558, 168, 42, 74], "area": 1690}], "file_name": "000000537506.png", "image_id": 537506}, {"segments_info": [{"id": 10264752, "category_id": 62, "iscrowd": 0, "bbox": [1, 241, 56, 172], "area": 3041}, {"id": 3552822, "category_id": 82, "iscrowd": 0, "bbox": [111, 2, 316, 632], "area": 173437}, {"id": 9147832, "category_id": 118, "iscrowd": 0, "bbox": [0, 373, 139, 267], "area": 25255}, {"id": 12629678, "category_id": 190, "iscrowd": 0, "bbox": [16, 569, 228, 71], "area": 8719}, {"id": 14804455, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 202, 444], "area": 40902}], "file_name": "000000537672.png", "image_id": 537672}, {"segments_info": [{"id": 8031906, "category_id": 88, "iscrowd": 0, "bbox": [36, 16, 548, 396], "area": 111811}, {"id": 2307663, "category_id": 88, "iscrowd": 0, "bbox": [550, 19, 90, 207], "area": 11744}, {"id": 1056566, "category_id": 112, "iscrowd": 0, "bbox": [270, 20, 58, 116], "area": 5280}, {"id": 1909541, "category_id": 171, "iscrowd": 0, "bbox": [40, 0, 600, 161], "area": 13650}, {"id": 2839429, "category_id": 185, "iscrowd": 0, "bbox": [141, 198, 457, 208], "area": 37248}, {"id": 10395038, "category_id": 190, "iscrowd": 0, "bbox": [0, 90, 640, 390], "area": 58563}], "file_name": "000000537802.png", "image_id": 537802}, {"segments_info": [{"id": 5858938, "category_id": 62, "iscrowd": 0, "bbox": [295, 258, 128, 174], "area": 8083}, {"id": 10790312, "category_id": 70, "iscrowd": 0, "bbox": [41, 82, 203, 398], "area": 47120}, {"id": 6184544, "category_id": 100, "iscrowd": 0, "bbox": [0, 141, 14, 26], "area": 299}, {"id": 9737884, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 154136}, {"id": 3092269, "category_id": 190, "iscrowd": 0, "bbox": [19, 306, 604, 174], "area": 57803}, {"id": 11974325, "category_id": 195, "iscrowd": 0, "bbox": [0, 126, 36, 40], "area": 675}], "file_name": "000000537812.png", "image_id": 537812}, {"segments_info": [{"id": 7436928, "category_id": 1, "iscrowd": 0, "bbox": [437, 117, 66, 238], "area": 8747}, {"id": 7961982, "category_id": 1, "iscrowd": 0, "bbox": [104, 166, 135, 228], "area": 11960}, {"id": 2435890, "category_id": 40, "iscrowd": 0, "bbox": [438, 236, 28, 39], "area": 708}, {"id": 2767199, "category_id": 40, "iscrowd": 0, "bbox": [103, 296, 30, 34], "area": 615}, {"id": 6331021, "category_id": 145, "iscrowd": 0, "bbox": [0, 13, 640, 387], "area": 170001}, {"id": 6261117, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 400], "area": 63748}], "file_name": "000000537827.png", "image_id": 537827}, {"segments_info": [{"id": 1775940, "category_id": 11, "iscrowd": 0, "bbox": [49, 17, 168, 383], "area": 37081}, {"id": 4412245, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 430], "area": 234671}, {"id": 14869202, "category_id": 187, "iscrowd": 0, "bbox": [323, 0, 277, 60], "area": 3203}], "file_name": "000000537964.png", "image_id": 537964}, {"segments_info": [{"id": 8352876, "category_id": 1, "iscrowd": 0, "bbox": [96, 4, 278, 469], "area": 85090}, {"id": 6513244, "category_id": 63, "iscrowd": 0, "bbox": [0, 206, 369, 221], "area": 19336}, {"id": 8753553, "category_id": 63, "iscrowd": 0, "bbox": [0, 367, 140, 113], "area": 6229}, {"id": 5591891, "category_id": 73, "iscrowd": 0, "bbox": [493, 330, 147, 142], "area": 16119}, {"id": 2697768, "category_id": 73, "iscrowd": 0, "bbox": [0, 389, 118, 52], "area": 4413}, {"id": 3420209, "category_id": 77, "iscrowd": 0, "bbox": [247, 205, 41, 47], "area": 1676}, {"id": 2039840, "category_id": 77, "iscrowd": 0, "bbox": [157, 171, 46, 61], "area": 1986}, {"id": 3290689, "category_id": 100, "iscrowd": 0, "bbox": [558, 224, 82, 47], "area": 2379}, {"id": 6514281, "category_id": 109, "iscrowd": 0, "bbox": [61, 0, 54, 209], "area": 7842}, {"id": 856082, "category_id": 133, "iscrowd": 0, "bbox": [525, 53, 115, 113], "area": 9501}, {"id": 856598, "category_id": 156, "iscrowd": 0, "bbox": [592, 0, 48, 57], "area": 1601}, {"id": 8294293, "category_id": 180, "iscrowd": 0, "bbox": [98, 0, 422, 270], "area": 33302}, {"id": 1383193, "category_id": 184, "iscrowd": 0, "bbox": [275, 0, 210, 415], "area": 41362}, {"id": 1317179, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 258], "area": 32464}], "file_name": "000000537991.png", "image_id": 537991}, {"segments_info": [{"id": 5128785, "category_id": 1, "iscrowd": 0, "bbox": [451, 215, 18, 54], "area": 476}, {"id": 4730944, "category_id": 1, "iscrowd": 0, "bbox": [47, 318, 25, 23], "area": 275}, {"id": 9079693, "category_id": 1, "iscrowd": 0, "bbox": [109, 308, 31, 30], "area": 499}, {"id": 7298653, "category_id": 1, "iscrowd": 0, "bbox": [63, 313, 13, 25], "area": 156}, {"id": 5854301, "category_id": 1, "iscrowd": 0, "bbox": [81, 278, 15, 43], "area": 408}, {"id": 3418710, "category_id": 1, "iscrowd": 0, "bbox": [69, 310, 28, 37], "area": 581}, {"id": 11644324, "category_id": 38, "iscrowd": 0, "bbox": [234, 35, 20, 13], "area": 90}, {"id": 2895145, "category_id": 184, "iscrowd": 0, "bbox": [41, 219, 295, 76], "area": 9136}, {"id": 14733510, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 195], "area": 91130}, {"id": 4679527, "category_id": 192, "iscrowd": 0, "bbox": [0, 174, 500, 201], "area": 84597}], "file_name": "000000538067.png", "image_id": 538067}, {"segments_info": [{"id": 7638418, "category_id": 1, "iscrowd": 0, "bbox": [65, 0, 52, 53], "area": 1674}, {"id": 6583179, "category_id": 1, "iscrowd": 0, "bbox": [173, 3, 43, 96], "area": 2470}, {"id": 5467005, "category_id": 1, "iscrowd": 0, "bbox": [206, 1, 79, 78], "area": 3278}, {"id": 3027269, "category_id": 1, "iscrowd": 0, "bbox": [115, 24, 61, 68], "area": 2320}, {"id": 11447987, "category_id": 1, "iscrowd": 0, "bbox": [516, 1, 65, 36], "area": 1676}, {"id": 3294293, "category_id": 31, "iscrowd": 0, "bbox": [202, 17, 33, 69], "area": 841}, {"id": 1524628, "category_id": 58, "iscrowd": 0, "bbox": [151, 226, 244, 179], "area": 28684}, {"id": 1324153, "category_id": 58, "iscrowd": 0, "bbox": [348, 212, 226, 156], "area": 23457}, {"id": 1784701, "category_id": 58, "iscrowd": 0, "bbox": [360, 96, 262, 115], "area": 18797}, {"id": 1519996, "category_id": 58, "iscrowd": 0, "bbox": [157, 190, 36, 21], "area": 575}, {"id": 1989557, "category_id": 58, "iscrowd": 0, "bbox": [0, 239, 131, 189], "area": 20952}, {"id": 528184, "category_id": 58, "iscrowd": 0, "bbox": [326, 321, 15, 24], "area": 248}, {"id": 1925818, "category_id": 58, "iscrowd": 0, "bbox": [0, 122, 230, 138], "area": 22085}, {"id": 1852821, "category_id": 58, "iscrowd": 0, "bbox": [214, 99, 218, 131], "area": 20623}, {"id": 12040115, "category_id": 156, "iscrowd": 0, "bbox": [236, 0, 404, 157], "area": 21459}, {"id": 1055801, "category_id": 189, "iscrowd": 0, "bbox": [120, 306, 520, 122], "area": 24541}, {"id": 9869461, "category_id": 190, "iscrowd": 0, "bbox": [169, 55, 37, 46], "area": 526}, {"id": 4482451, "category_id": 196, "iscrowd": 0, "bbox": [0, 9, 640, 419], "area": 49512}], "file_name": "000000538236.png", "image_id": 538236}, {"segments_info": [{"id": 6645331, "category_id": 1, "iscrowd": 0, "bbox": [0, 112, 43, 161], "area": 3735}, {"id": 2704988, "category_id": 1, "iscrowd": 0, "bbox": [45, 122, 39, 146], "area": 3267}, {"id": 3429466, "category_id": 1, "iscrowd": 0, "bbox": [376, 141, 133, 241], "area": 10296}, {"id": 9409692, "category_id": 1, "iscrowd": 0, "bbox": [348, 128, 7, 9], "area": 51}, {"id": 1121053, "category_id": 1, "iscrowd": 0, "bbox": [270, 127, 23, 52], "area": 646}, {"id": 1123124, "category_id": 1, "iscrowd": 0, "bbox": [593, 121, 47, 218], "area": 6992}, {"id": 4740184, "category_id": 1, "iscrowd": 0, "bbox": [402, 128, 7, 9], "area": 36}, {"id": 6316391, "category_id": 1, "iscrowd": 0, "bbox": [385, 131, 9, 9], "area": 69}, {"id": 9673643, "category_id": 1, "iscrowd": 0, "bbox": [357, 124, 8, 14], "area": 84}, {"id": 10262168, "category_id": 1, "iscrowd": 0, "bbox": [371, 128, 6, 10], "area": 44}, {"id": 1712681, "category_id": 3, "iscrowd": 0, "bbox": [520, 146, 67, 88], "area": 2881}, {"id": 528148, "category_id": 3, "iscrowd": 0, "bbox": [480, 156, 76, 85], "area": 4084}, {"id": 3885134, "category_id": 3, "iscrowd": 0, "bbox": [262, 138, 138, 131], "area": 9428}, {"id": 1515553, "category_id": 3, "iscrowd": 0, "bbox": [484, 144, 32, 12], "area": 322}, {"id": 4873580, "category_id": 4, "iscrowd": 0, "bbox": [301, 174, 278, 216], "area": 31401}, {"id": 1583146, "category_id": 15, "iscrowd": 0, "bbox": [103, 168, 53, 32], "area": 884}, {"id": 1252384, "category_id": 31, "iscrowd": 0, "bbox": [34, 142, 28, 75], "area": 775}, {"id": 858398, "category_id": 92, "iscrowd": 0, "bbox": [160, 15, 44, 43], "area": 1293}, {"id": 11390679, "category_id": 130, "iscrowd": 0, "bbox": [105, 0, 277, 45], "area": 2602}, {"id": 2644594, "category_id": 149, "iscrowd": 0, "bbox": [0, 194, 640, 286], "area": 115550}, {"id": 2711660, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 299, 197], "area": 29316}, {"id": 2372662, "category_id": 181, "iscrowd": 0, "bbox": [0, 51, 291, 131], "area": 14882}, {"id": 1388600, "category_id": 184, "iscrowd": 0, "bbox": [299, 0, 341, 251], "area": 15292}, {"id": 3369360, "category_id": 191, "iscrowd": 0, "bbox": [20, 170, 620, 232], "area": 10770}, {"id": 3097417, "category_id": 197, "iscrowd": 0, "bbox": [282, 0, 358, 162], "area": 30217}], "file_name": "000000538364.png", "image_id": 538364}, {"segments_info": [{"id": 1118487, "category_id": 1, "iscrowd": 0, "bbox": [488, 107, 152, 206], "area": 14555}, {"id": 3355454, "category_id": 1, "iscrowd": 0, "bbox": [296, 35, 102, 148], "area": 7847}, {"id": 8278815, "category_id": 8, "iscrowd": 0, "bbox": [506, 171, 18, 14], "area": 185}, {"id": 3548952, "category_id": 10, "iscrowd": 0, "bbox": [617, 120, 6, 16], "area": 70}, {"id": 1580841, "category_id": 10, "iscrowd": 0, "bbox": [609, 94, 12, 21], "area": 224}, {"id": 2829883, "category_id": 10, "iscrowd": 0, "bbox": [491, 149, 7, 7], "area": 39}, {"id": 3023392, "category_id": 41, "iscrowd": 0, "bbox": [464, 241, 50, 37], "area": 870}, {"id": 2830654, "category_id": 41, "iscrowd": 0, "bbox": [553, 305, 46, 28], "area": 662}, {"id": 6047298, "category_id": 41, "iscrowd": 0, "bbox": [297, 190, 74, 38], "area": 1076}, {"id": 4207152, "category_id": 130, "iscrowd": 0, "bbox": [129, 189, 368, 30], "area": 1156}, {"id": 6381144, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 527, 193], "area": 51769}, {"id": 14465676, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 107], "area": 28409}, {"id": 9806511, "category_id": 191, "iscrowd": 0, "bbox": [0, 160, 640, 267], "area": 132326}, {"id": 5471112, "category_id": 194, "iscrowd": 0, "bbox": [8, 164, 23, 17], "area": 199}, {"id": 6775652, "category_id": 197, "iscrowd": 0, "bbox": [233, 14, 407, 196], "area": 19669}, {"id": 2893095, "category_id": 199, "iscrowd": 0, "bbox": [0, 168, 527, 55], "area": 13136}], "file_name": "000000538458.png", "image_id": 538458}, {"segments_info": [{"id": 4870746, "category_id": 7, "iscrowd": 0, "bbox": [0, 135, 593, 227], "area": 81003}, {"id": 6121333, "category_id": 95, "iscrowd": 0, "bbox": [302, 130, 338, 47], "area": 2755}, {"id": 10858422, "category_id": 144, "iscrowd": 0, "bbox": [0, 221, 640, 237], "area": 73664}, {"id": 3094335, "category_id": 147, "iscrowd": 0, "bbox": [31, 241, 609, 217], "area": 27380}, {"id": 7305335, "category_id": 184, "iscrowd": 0, "bbox": [586, 167, 38, 38], "area": 740}, {"id": 15261913, "category_id": 185, "iscrowd": 0, "bbox": [169, 0, 471, 68], "area": 11005}, {"id": 16445412, "category_id": 187, "iscrowd": 0, "bbox": [148, 0, 492, 38], "area": 6703}, {"id": 3093306, "category_id": 194, "iscrowd": 0, "bbox": [590, 199, 50, 40], "area": 1770}, {"id": 10794690, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 204], "area": 86193}, {"id": 5858406, "category_id": 199, "iscrowd": 0, "bbox": [592, 232, 48, 39], "area": 1559}], "file_name": "000000539143.png", "image_id": 539143}, {"segments_info": [{"id": 6512734, "category_id": 3, "iscrowd": 0, "bbox": [13, 324, 12, 9], "area": 91}, {"id": 4402737, "category_id": 3, "iscrowd": 0, "bbox": [91, 329, 16, 6], "area": 71}, {"id": 5849709, "category_id": 3, "iscrowd": 0, "bbox": [105, 331, 17, 13], "area": 174}, {"id": 4996990, "category_id": 7, "iscrowd": 0, "bbox": [256, 246, 214, 224], "area": 39734}, {"id": 8817805, "category_id": 128, "iscrowd": 0, "bbox": [188, 322, 26, 21], "area": 323}, {"id": 8881532, "category_id": 130, "iscrowd": 0, "bbox": [130, 201, 27, 25], "area": 419}, {"id": 4865088, "category_id": 147, "iscrowd": 0, "bbox": [0, 341, 612, 271], "area": 41967}, {"id": 6577764, "category_id": 149, "iscrowd": 0, "bbox": [0, 345, 365, 267], "area": 75076}, {"id": 3745573, "category_id": 184, "iscrowd": 0, "bbox": [0, 223, 612, 130], "area": 18433}, {"id": 6512224, "category_id": 185, "iscrowd": 0, "bbox": [0, 324, 195, 37], "area": 2386}, {"id": 10464415, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 612, 309], "area": 144229}, {"id": 3292236, "category_id": 193, "iscrowd": 0, "bbox": [463, 320, 149, 194], "area": 22918}, {"id": 7695466, "category_id": 197, "iscrowd": 0, "bbox": [0, 165, 401, 198], "area": 25957}], "file_name": "000000539445.png", "image_id": 539445}, {"segments_info": [{"id": 3289664, "category_id": 1, "iscrowd": 0, "bbox": [304, 146, 23, 97], "area": 1442}, {"id": 4740462, "category_id": 15, "iscrowd": 0, "bbox": [204, 250, 430, 177], "area": 21712}, {"id": 4278859, "category_id": 72, "iscrowd": 0, "bbox": [253, 105, 229, 227], "area": 40163}, {"id": 14408396, "category_id": 75, "iscrowd": 0, "bbox": [444, 349, 15, 25], "area": 180}, {"id": 13422028, "category_id": 75, "iscrowd": 0, "bbox": [253, 273, 25, 13], "area": 196}, {"id": 6711652, "category_id": 75, "iscrowd": 0, "bbox": [410, 339, 50, 26], "area": 545}, {"id": 14079184, "category_id": 84, "iscrowd": 0, "bbox": [375, 335, 70, 25], "area": 492}, {"id": 12438971, "category_id": 84, "iscrowd": 0, "bbox": [379, 318, 64, 33], "area": 1205}, {"id": 10000787, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 416], "area": 155760}, {"id": 5134193, "category_id": 189, "iscrowd": 0, "bbox": [426, 319, 35, 39], "area": 295}, {"id": 5264205, "category_id": 190, "iscrowd": 0, "bbox": [0, 254, 640, 173], "area": 21535}, {"id": 2507046, "category_id": 200, "iscrowd": 0, "bbox": [16, 306, 453, 121], "area": 25994}], "file_name": "000000539883.png", "image_id": 539883}, {"segments_info": [{"id": 5725786, "category_id": 1, "iscrowd": 0, "bbox": [333, 309, 27, 15], "area": 132}, {"id": 2240054, "category_id": 1, "iscrowd": 0, "bbox": [76, 256, 12, 35], "area": 175}, {"id": 2105631, "category_id": 1, "iscrowd": 0, "bbox": [338, 309, 11, 12], "area": 121}, {"id": 3421485, "category_id": 1, "iscrowd": 0, "bbox": [53, 252, 13, 26], "area": 209}, {"id": 4147751, "category_id": 28, "iscrowd": 0, "bbox": [89, 226, 34, 49], "area": 677}, {"id": 3818000, "category_id": 28, "iscrowd": 0, "bbox": [0, 205, 36, 32], "area": 921}, {"id": 4738580, "category_id": 28, "iscrowd": 0, "bbox": [26, 214, 39, 25], "area": 598}, {"id": 4607770, "category_id": 28, "iscrowd": 0, "bbox": [62, 217, 29, 26], "area": 535}, {"id": 14298376, "category_id": 34, "iscrowd": 0, "bbox": [438, 287, 32, 35], "area": 865}, {"id": 2436132, "category_id": 62, "iscrowd": 0, "bbox": [88, 279, 15, 17], "area": 189}, {"id": 1186575, "category_id": 62, "iscrowd": 0, "bbox": [6, 283, 14, 28], "area": 197}, {"id": 2370853, "category_id": 62, "iscrowd": 0, "bbox": [60, 280, 12, 23], "area": 137}, {"id": 2436128, "category_id": 62, "iscrowd": 0, "bbox": [102, 277, 13, 20], "area": 146}, {"id": 1581077, "category_id": 62, "iscrowd": 0, "bbox": [51, 278, 13, 25], "area": 155}, {"id": 1910297, "category_id": 62, "iscrowd": 0, "bbox": [27, 280, 25, 25], "area": 542}, {"id": 1975837, "category_id": 62, "iscrowd": 0, "bbox": [113, 276, 11, 18], "area": 148}, {"id": 1515028, "category_id": 62, "iscrowd": 0, "bbox": [19, 283, 10, 27], "area": 149}, {"id": 4735023, "category_id": 67, "iscrowd": 0, "bbox": [407, 286, 132, 101], "area": 6271}, {"id": 2897502, "category_id": 151, "iscrowd": 0, "bbox": [523, 210, 102, 43], "area": 1968}, {"id": 6255737, "category_id": 171, "iscrowd": 0, "bbox": [424, 270, 27, 34], "area": 293}, {"id": 13351797, "category_id": 178, "iscrowd": 0, "bbox": [0, 265, 600, 97], "area": 28115}, {"id": 4344132, "category_id": 184, "iscrowd": 0, "bbox": [55, 0, 585, 306], "area": 90533}, {"id": 15309440, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 201], "area": 58292}, {"id": 11513521, "category_id": 190, "iscrowd": 0, "bbox": [0, 262, 614, 218], "area": 56431}, {"id": 461574, "category_id": 193, "iscrowd": 0, "bbox": [391, 377, 249, 103], "area": 13049}, {"id": 6251879, "category_id": 197, "iscrowd": 0, "bbox": [0, 27, 554, 453], "area": 23552}, {"id": 1455408, "category_id": 199, "iscrowd": 0, "bbox": [0, 233, 111, 64], "area": 4074}], "file_name": "000000539962.png", "image_id": 539962}, {"segments_info": [{"id": 9143942, "category_id": 28, "iscrowd": 0, "bbox": [3, 8, 424, 426], "area": 135022}, {"id": 796741, "category_id": 84, "iscrowd": 0, "bbox": [380, 493, 15, 129], "area": 1604}, {"id": 2368547, "category_id": 84, "iscrowd": 0, "bbox": [115, 592, 102, 8], "area": 405}, {"id": 792353, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 79634}, {"id": 989474, "category_id": 199, "iscrowd": 0, "bbox": [0, 138, 355, 502], "area": 56034}], "file_name": "000000540280.png", "image_id": 540280}, {"segments_info": [{"id": 4873566, "category_id": 1, "iscrowd": 0, "bbox": [341, 198, 26, 74], "area": 1197}, {"id": 3821410, "category_id": 1, "iscrowd": 0, "bbox": [173, 199, 40, 58], "area": 1430}, {"id": 4214905, "category_id": 1, "iscrowd": 0, "bbox": [481, 286, 60, 69], "area": 2267}, {"id": 7438479, "category_id": 1, "iscrowd": 0, "bbox": [165, 200, 16, 45], "area": 454}, {"id": 6773846, "category_id": 1, "iscrowd": 0, "bbox": [294, 185, 46, 149], "area": 3914}, {"id": 5325908, "category_id": 1, "iscrowd": 0, "bbox": [367, 310, 99, 131], "area": 6532}, {"id": 10718594, "category_id": 1, "iscrowd": 0, "bbox": [217, 258, 67, 112], "area": 4565}, {"id": 6059420, "category_id": 1, "iscrowd": 0, "bbox": [476, 281, 37, 42], "area": 671}, {"id": 4276817, "category_id": 1, "iscrowd": 0, "bbox": [469, 297, 133, 133], "area": 6970}, {"id": 6974829, "category_id": 1, "iscrowd": 0, "bbox": [607, 205, 21, 24], "area": 275}, {"id": 3029071, "category_id": 1, "iscrowd": 0, "bbox": [77, 230, 40, 43], "area": 1153}, {"id": 8749961, "category_id": 1, "iscrowd": 0, "bbox": [389, 205, 42, 107], "area": 3026}, {"id": 10985630, "category_id": 1, "iscrowd": 0, "bbox": [228, 189, 55, 91], "area": 2432}, {"id": 4605263, "category_id": 1, "iscrowd": 1, "bbox": [48, 186, 565, 203], "area": 10287}, {"id": 11120812, "category_id": 6, "iscrowd": 0, "bbox": [585, 179, 50, 30], "area": 1309}, {"id": 13220541, "category_id": 28, "iscrowd": 0, "bbox": [185, 166, 93, 26], "area": 1311}, {"id": 11586011, "category_id": 28, "iscrowd": 0, "bbox": [339, 183, 45, 16], "area": 500}, {"id": 5133465, "category_id": 28, "iscrowd": 0, "bbox": [385, 166, 76, 24], "area": 1115}, {"id": 7763385, "category_id": 28, "iscrowd": 0, "bbox": [16, 150, 179, 113], "area": 5555}, {"id": 10982796, "category_id": 31, "iscrowd": 0, "bbox": [311, 210, 18, 21], "area": 89}, {"id": 7497312, "category_id": 44, "iscrowd": 0, "bbox": [408, 409, 16, 48], "area": 557}, {"id": 3958598, "category_id": 51, "iscrowd": 0, "bbox": [98, 305, 52, 26], "area": 886}, {"id": 6506522, "category_id": 51, "iscrowd": 0, "bbox": [177, 287, 28, 20], "area": 344}, {"id": 10063493, "category_id": 51, "iscrowd": 0, "bbox": [463, 319, 16, 15], "area": 152}, {"id": 8682614, "category_id": 149, "iscrowd": 0, "bbox": [542, 195, 98, 57], "area": 2024}, {"id": 8809035, "category_id": 151, "iscrowd": 0, "bbox": [245, 120, 79, 27], "area": 1164}, {"id": 8485544, "category_id": 166, "iscrowd": 0, "bbox": [0, 129, 181, 53], "area": 2825}, {"id": 4276038, "category_id": 181, "iscrowd": 0, "bbox": [16, 90, 193, 57], "area": 3453}, {"id": 4941667, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 215], "area": 57513}, {"id": 14802134, "category_id": 187, "iscrowd": 0, "bbox": [27, 0, 613, 57], "area": 12794}, {"id": 7633534, "category_id": 191, "iscrowd": 0, "bbox": [0, 221, 640, 259], "area": 74519}, {"id": 4540492, "category_id": 194, "iscrowd": 0, "bbox": [575, 251, 65, 90], "area": 3580}, {"id": 6909562, "category_id": 196, "iscrowd": 0, "bbox": [52, 228, 317, 200], "area": 8570}, {"id": 6119781, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 595, 274], "area": 53756}], "file_name": "000000540414.png", "image_id": 540414}, {"segments_info": [{"id": 3686725, "category_id": 1, "iscrowd": 0, "bbox": [436, 184, 192, 186], "area": 20639}, {"id": 6061285, "category_id": 28, "iscrowd": 0, "bbox": [371, 93, 254, 187], "area": 18462}, {"id": 5139047, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 63855}, {"id": 5064772, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 354], "area": 153125}, {"id": 10922671, "category_id": 187, "iscrowd": 0, "bbox": [131, 0, 91, 24], "area": 1493}], "file_name": "000000540466.png", "image_id": 540466}, {"segments_info": [{"id": 9074277, "category_id": 50, "iscrowd": 0, "bbox": [254, 166, 6, 15], "area": 49}, {"id": 599910, "category_id": 51, "iscrowd": 0, "bbox": [341, 220, 41, 9], "area": 223}, {"id": 1795245, "category_id": 51, "iscrowd": 0, "bbox": [434, 212, 21, 13], "area": 158}, {"id": 1386614, "category_id": 53, "iscrowd": 0, "bbox": [346, 217, 6, 6], "area": 29}, {"id": 2513305, "category_id": 53, "iscrowd": 0, "bbox": [355, 205, 15, 9], "area": 63}, {"id": 540107, "category_id": 55, "iscrowd": 0, "bbox": [360, 207, 9, 6], "area": 46}, {"id": 624345, "category_id": 55, "iscrowd": 0, "bbox": [355, 218, 11, 5], "area": 45}, {"id": 1472463, "category_id": 55, "iscrowd": 0, "bbox": [368, 212, 12, 11], "area": 94}, {"id": 5986392, "category_id": 62, "iscrowd": 0, "bbox": [24, 234, 28, 82], "area": 1429}, {"id": 1186582, "category_id": 62, "iscrowd": 0, "bbox": [3, 205, 24, 86], "area": 1421}, {"id": 9335118, "category_id": 64, "iscrowd": 0, "bbox": [9, 94, 32, 33], "area": 315}, {"id": 2520759, "category_id": 67, "iscrowd": 0, "bbox": [321, 204, 161, 57], "area": 5398}, {"id": 3613473, "category_id": 67, "iscrowd": 0, "bbox": [23, 211, 12, 14], "area": 139}, {"id": 6530513, "category_id": 78, "iscrowd": 0, "bbox": [327, 130, 68, 30], "area": 1968}, {"id": 5674430, "category_id": 79, "iscrowd": 0, "bbox": [318, 204, 74, 25], "area": 706}, {"id": 4949413, "category_id": 80, "iscrowd": 0, "bbox": [287, 177, 40, 22], "area": 781}, {"id": 3761528, "category_id": 81, "iscrowd": 0, "bbox": [216, 203, 21, 6], "area": 91}, {"id": 7642562, "category_id": 82, "iscrowd": 0, "bbox": [69, 111, 148, 248], "area": 27553}, {"id": 4811891, "category_id": 86, "iscrowd": 0, "bbox": [272, 178, 11, 21], "area": 217}, {"id": 7904698, "category_id": 86, "iscrowd": 0, "bbox": [258, 181, 8, 17], "area": 128}, {"id": 10012643, "category_id": 107, "iscrowd": 0, "bbox": [109, 171, 470, 202], "area": 39621}, {"id": 6523810, "category_id": 112, "iscrowd": 0, "bbox": [0, 16, 79, 338], "area": 11201}, {"id": 1862322, "category_id": 118, "iscrowd": 0, "bbox": [0, 256, 171, 171], "area": 14033}, {"id": 3240869, "category_id": 176, "iscrowd": 0, "bbox": [322, 158, 188, 47], "area": 3872}, {"id": 10662326, "category_id": 181, "iscrowd": 0, "bbox": [234, 101, 72, 91], "area": 4011}, {"id": 5411263, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 530, 91], "area": 34349}, {"id": 5937855, "category_id": 188, "iscrowd": 0, "bbox": [17, 28, 495, 227], "area": 33742}, {"id": 5090254, "category_id": 189, "iscrowd": 0, "bbox": [318, 237, 20, 19], "area": 81}, {"id": 7193067, "category_id": 196, "iscrowd": 0, "bbox": [426, 236, 119, 58], "area": 4571}, {"id": 6532522, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 53356}], "file_name": "000000540502.png", "image_id": 540502}, {"segments_info": [{"id": 3426397, "category_id": 17, "iscrowd": 0, "bbox": [236, 4, 306, 292], "area": 34393}, {"id": 9223653, "category_id": 62, "iscrowd": 0, "bbox": [21, 0, 608, 433], "area": 121551}, {"id": 8107496, "category_id": 118, "iscrowd": 0, "bbox": [0, 272, 640, 183], "area": 59310}, {"id": 14545402, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 640, 299], "area": 74794}], "file_name": "000000540928.png", "image_id": 540928}, {"segments_info": [{"id": 8027024, "category_id": 1, "iscrowd": 0, "bbox": [218, 289, 22, 44], "area": 453}, {"id": 4601640, "category_id": 1, "iscrowd": 0, "bbox": [402, 199, 20, 12], "area": 96}, {"id": 6052188, "category_id": 1, "iscrowd": 0, "bbox": [78, 126, 12, 14], "area": 111}, {"id": 9603724, "category_id": 1, "iscrowd": 0, "bbox": [236, 290, 16, 46], "area": 349}, {"id": 5198943, "category_id": 1, "iscrowd": 0, "bbox": [18, 302, 15, 43], "area": 465}, {"id": 6381189, "category_id": 1, "iscrowd": 0, "bbox": [209, 232, 18, 20], "area": 201}, {"id": 5589073, "category_id": 1, "iscrowd": 0, "bbox": [176, 262, 23, 19], "area": 232}, {"id": 6838582, "category_id": 42, "iscrowd": 0, "bbox": [402, 206, 32, 4], "area": 40}, {"id": 11379089, "category_id": 42, "iscrowd": 0, "bbox": [188, 234, 15, 37], "area": 313}, {"id": 9600351, "category_id": 42, "iscrowd": 0, "bbox": [67, 131, 33, 15], "area": 104}, {"id": 14670799, "category_id": 42, "iscrowd": 0, "bbox": [201, 247, 38, 12], "area": 211}, {"id": 8493231, "category_id": 154, "iscrowd": 0, "bbox": [0, 314, 640, 166], "area": 85116}, {"id": 9271893, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 387], "area": 219277}], "file_name": "000000540932.png", "image_id": 540932}, {"segments_info": [{"id": 2104863, "category_id": 62, "iscrowd": 0, "bbox": [186, 170, 47, 51], "area": 1950}, {"id": 12762302, "category_id": 63, "iscrowd": 0, "bbox": [332, 227, 140, 173], "area": 16938}, {"id": 7171964, "category_id": 63, "iscrowd": 0, "bbox": [9, 219, 282, 160], "area": 20943}, {"id": 5061686, "category_id": 72, "iscrowd": 0, "bbox": [395, 142, 71, 76], "area": 3684}, {"id": 7104877, "category_id": 100, "iscrowd": 0, "bbox": [343, 199, 40, 44], "area": 848}, {"id": 4342351, "category_id": 118, "iscrowd": 0, "bbox": [100, 197, 250, 203], "area": 12165}, {"id": 14807288, "category_id": 130, "iscrowd": 0, "bbox": [260, 0, 53, 34], "area": 1100}, {"id": 4540496, "category_id": 133, "iscrowd": 0, "bbox": [296, 16, 70, 86], "area": 3964}, {"id": 13352384, "category_id": 141, "iscrowd": 0, "bbox": [207, 262, 5, 12], "area": 19}, {"id": 2237739, "category_id": 156, "iscrowd": 0, "bbox": [0, 60, 85, 153], "area": 8387}, {"id": 1448739, "category_id": 161, "iscrowd": 0, "bbox": [0, 367, 30, 33], "area": 628}, {"id": 13419715, "category_id": 181, "iscrowd": 0, "bbox": [137, 63, 363, 337], "area": 13648}, {"id": 6906718, "category_id": 189, "iscrowd": 0, "bbox": [226, 217, 87, 49], "area": 740}, {"id": 5264221, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 400], "area": 74152}, {"id": 7826796, "category_id": 200, "iscrowd": 0, "bbox": [194, 212, 172, 123], "area": 7725}], "file_name": "000000540962.png", "image_id": 540962}, {"segments_info": [{"id": 6642266, "category_id": 1, "iscrowd": 0, "bbox": [155, 78, 54, 232], "area": 7490}, {"id": 4141873, "category_id": 1, "iscrowd": 0, "bbox": [204, 102, 84, 223], "area": 10528}, {"id": 4472635, "category_id": 1, "iscrowd": 0, "bbox": [272, 80, 64, 204], "area": 7100}, {"id": 9208456, "category_id": 1, "iscrowd": 0, "bbox": [209, 53, 66, 103], "area": 2856}, {"id": 7891044, "category_id": 1, "iscrowd": 0, "bbox": [326, 79, 162, 248], "area": 12622}, {"id": 3617068, "category_id": 27, "iscrowd": 0, "bbox": [274, 113, 34, 49], "area": 524}, {"id": 4601134, "category_id": 27, "iscrowd": 0, "bbox": [399, 117, 49, 52], "area": 555}, {"id": 4211261, "category_id": 27, "iscrowd": 0, "bbox": [274, 114, 13, 27], "area": 35}, {"id": 11774641, "category_id": 35, "iscrowd": 0, "bbox": [194, 286, 212, 21], "area": 385}, {"id": 13944515, "category_id": 35, "iscrowd": 0, "bbox": [74, 300, 127, 18], "area": 760}, {"id": 15327963, "category_id": 35, "iscrowd": 0, "bbox": [154, 312, 196, 29], "area": 2828}, {"id": 15983320, "category_id": 159, "iscrowd": 0, "bbox": [0, 72, 640, 288], "area": 78448}, {"id": 15120020, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 62], "area": 29358}, {"id": 9731445, "category_id": 192, "iscrowd": 0, "bbox": [0, 39, 640, 217], "area": 71551}], "file_name": "000000541055.png", "image_id": 541055}, {"segments_info": [{"id": 5720907, "category_id": 1, "iscrowd": 0, "bbox": [381, 146, 17, 44], "area": 334}, {"id": 4010325, "category_id": 1, "iscrowd": 0, "bbox": [352, 135, 19, 53], "area": 575}, {"id": 8813432, "category_id": 1, "iscrowd": 0, "bbox": [312, 70, 19, 21], "area": 281}, {"id": 5721514, "category_id": 1, "iscrowd": 0, "bbox": [304, 267, 60, 88], "area": 1695}, {"id": 6710966, "category_id": 1, "iscrowd": 0, "bbox": [111, 257, 56, 82], "area": 1505}, {"id": 6906537, "category_id": 1, "iscrowd": 0, "bbox": [384, 162, 28, 67], "area": 768}, {"id": 7827365, "category_id": 1, "iscrowd": 0, "bbox": [530, 179, 42, 62], "area": 805}, {"id": 3288620, "category_id": 1, "iscrowd": 0, "bbox": [447, 78, 14, 14], "area": 127}, {"id": 7631756, "category_id": 1, "iscrowd": 0, "bbox": [19, 150, 18, 39], "area": 356}, {"id": 7234434, "category_id": 1, "iscrowd": 0, "bbox": [495, 59, 13, 14], "area": 89}, {"id": 3681073, "category_id": 1, "iscrowd": 0, "bbox": [460, 103, 22, 31], "area": 485}, {"id": 6773325, "category_id": 1, "iscrowd": 0, "bbox": [77, 165, 24, 39], "area": 519}, {"id": 8021342, "category_id": 1, "iscrowd": 0, "bbox": [423, 74, 13, 18], "area": 178}, {"id": 6050393, "category_id": 1, "iscrowd": 1, "bbox": [1, 0, 639, 262], "area": 51504}, {"id": 4836023, "category_id": 37, "iscrowd": 0, "bbox": [292, 226, 5, 5], "area": 13}, {"id": 7440789, "category_id": 43, "iscrowd": 0, "bbox": [304, 290, 16, 16], "area": 168}, {"id": 8214425, "category_id": 43, "iscrowd": 0, "bbox": [564, 190, 6, 6], "area": 27}, {"id": 7893929, "category_id": 43, "iscrowd": 0, "bbox": [395, 183, 11, 8], "area": 51}, {"id": 4535877, "category_id": 62, "iscrowd": 0, "bbox": [325, 164, 16, 23], "area": 249}, {"id": 8947806, "category_id": 62, "iscrowd": 0, "bbox": [68, 179, 7, 4], "area": 22}, {"id": 4077615, "category_id": 62, "iscrowd": 0, "bbox": [73, 179, 12, 25], "area": 140}, {"id": 5792063, "category_id": 62, "iscrowd": 0, "bbox": [52, 221, 14, 13], "area": 120}, {"id": 9083534, "category_id": 62, "iscrowd": 0, "bbox": [33, 226, 28, 33], "area": 370}, {"id": 7565387, "category_id": 62, "iscrowd": 0, "bbox": [130, 75, 12, 6], "area": 70}, {"id": 6135959, "category_id": 145, "iscrowd": 0, "bbox": [0, 177, 640, 250], "area": 117631}, {"id": 5134174, "category_id": 161, "iscrowd": 0, "bbox": [0, 0, 512, 278], "area": 5966}, {"id": 6001546, "category_id": 185, "iscrowd": 0, "bbox": [66, 234, 550, 95], "area": 21621}, {"id": 10524818, "category_id": 190, "iscrowd": 0, "bbox": [17, 163, 198, 65], "area": 4496}, {"id": 6109276, "category_id": 199, "iscrowd": 0, "bbox": [0, 65, 640, 145], "area": 47053}], "file_name": "000000541123.png", "image_id": 541123}, {"segments_info": [{"id": 3355443, "category_id": 81, "iscrowd": 0, "bbox": [29, 278, 244, 126], "area": 24336}, {"id": 3947580, "category_id": 81, "iscrowd": 0, "bbox": [75, 266, 106, 21], "area": 1407}, {"id": 10921638, "category_id": 133, "iscrowd": 0, "bbox": [345, 0, 289, 118], "area": 11658}, {"id": 3750201, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 114866}, {"id": 15066597, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 385, 208], "area": 64803}, {"id": 1907997, "category_id": 190, "iscrowd": 0, "bbox": [0, 388, 196, 38], "area": 5140}, {"id": 2829099, "category_id": 195, "iscrowd": 0, "bbox": [12, 357, 20, 33], "area": 405}], "file_name": "000000541291.png", "image_id": 541291}, {"segments_info": [{"id": 2971047, "category_id": 47, "iscrowd": 0, "bbox": [79, 34, 146, 290], "area": 29978}, {"id": 9545420, "category_id": 47, "iscrowd": 0, "bbox": [464, 237, 109, 116], "area": 9736}, {"id": 5991622, "category_id": 47, "iscrowd": 0, "bbox": [0, 83, 118, 187], "area": 15319}, {"id": 5265547, "category_id": 50, "iscrowd": 0, "bbox": [515, 73, 38, 35], "area": 489}, {"id": 10724549, "category_id": 50, "iscrowd": 0, "bbox": [564, 226, 40, 83], "area": 1732}, {"id": 5208489, "category_id": 51, "iscrowd": 0, "bbox": [110, 253, 397, 299], "area": 80287}, {"id": 2838100, "category_id": 56, "iscrowd": 0, "bbox": [172, 398, 32, 34], "area": 791}, {"id": 2116688, "category_id": 56, "iscrowd": 0, "bbox": [156, 321, 89, 59], "area": 2283}, {"id": 1329742, "category_id": 56, "iscrowd": 0, "bbox": [318, 390, 62, 53], "area": 2135}, {"id": 2770618, "category_id": 67, "iscrowd": 0, "bbox": [7, 11, 598, 590], "area": 88057}, {"id": 5076177, "category_id": 67, "iscrowd": 0, "bbox": [161, 6, 443, 265], "area": 92933}, {"id": 3429063, "category_id": 189, "iscrowd": 0, "bbox": [118, 9, 24, 28], "area": 87}, {"id": 10135756, "category_id": 195, "iscrowd": 0, "bbox": [494, 300, 109, 96], "area": 5613}], "file_name": "000000541634.png", "image_id": 541634}, {"segments_info": [{"id": 9275010, "category_id": 73, "iscrowd": 0, "bbox": [81, 1, 379, 297], "area": 29934}, {"id": 8946818, "category_id": 76, "iscrowd": 0, "bbox": [101, 88, 354, 209], "area": 52410}, {"id": 15592424, "category_id": 200, "iscrowd": 0, "bbox": [392, 0, 108, 210], "area": 10677}], "file_name": "000000541664.png", "image_id": 541664}, {"segments_info": [{"id": 4869712, "category_id": 1, "iscrowd": 0, "bbox": [86, 28, 76, 144], "area": 7172}, {"id": 3751239, "category_id": 1, "iscrowd": 0, "bbox": [348, 4, 58, 388], "area": 4724}, {"id": 2172713, "category_id": 1, "iscrowd": 0, "bbox": [581, 248, 59, 222], "area": 6060}, {"id": 1184532, "category_id": 1, "iscrowd": 0, "bbox": [316, 154, 77, 130], "area": 3529}, {"id": 2105893, "category_id": 1, "iscrowd": 0, "bbox": [268, 2, 312, 478], "area": 75664}, {"id": 3889527, "category_id": 44, "iscrowd": 0, "bbox": [139, 261, 50, 161], "area": 5064}, {"id": 1518650, "category_id": 44, "iscrowd": 0, "bbox": [220, 280, 54, 181], "area": 5722}, {"id": 2040872, "category_id": 44, "iscrowd": 0, "bbox": [274, 239, 47, 67], "area": 1671}, {"id": 1514528, "category_id": 44, "iscrowd": 0, "bbox": [176, 253, 45, 156], "area": 4644}, {"id": 4085880, "category_id": 46, "iscrowd": 0, "bbox": [251, 358, 55, 113], "area": 3486}, {"id": 3491416, "category_id": 46, "iscrowd": 0, "bbox": [304, 245, 26, 65], "area": 548}, {"id": 2638701, "category_id": 46, "iscrowd": 0, "bbox": [141, 414, 56, 66], "area": 2912}, {"id": 3497623, "category_id": 46, "iscrowd": 0, "bbox": [282, 425, 56, 54], "area": 2621}, {"id": 4939638, "category_id": 46, "iscrowd": 0, "bbox": [164, 271, 21, 59], "area": 804}, {"id": 4936804, "category_id": 46, "iscrowd": 0, "bbox": [251, 261, 24, 64], "area": 628}, {"id": 4346472, "category_id": 46, "iscrowd": 0, "bbox": [203, 288, 13, 15], "area": 131}, {"id": 1910059, "category_id": 63, "iscrowd": 0, "bbox": [549, 111, 91, 100], "area": 6803}, {"id": 4088454, "category_id": 67, "iscrowd": 0, "bbox": [0, 247, 377, 226], "area": 40086}, {"id": 1979986, "category_id": 118, "iscrowd": 0, "bbox": [491, 360, 149, 120], "area": 11289}, {"id": 7308170, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 296, 276], "area": 49216}, {"id": 3368602, "category_id": 189, "iscrowd": 0, "bbox": [0, 469, 379, 11], "area": 2592}, {"id": 6389385, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 345], "area": 47859}, {"id": 2242887, "category_id": 200, "iscrowd": 0, "bbox": [308, 200, 324, 182], "area": 18489}], "file_name": "000000541773.png", "image_id": 541773}, {"segments_info": [{"id": 14198605, "category_id": 85, "iscrowd": 0, "bbox": [215, 477, 74, 74], "area": 4419}, {"id": 16245452, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 254286}, {"id": 5195336, "category_id": 197, "iscrowd": 0, "bbox": [71, 342, 409, 298], "area": 48441}], "file_name": "000000541952.png", "image_id": 541952}, {"segments_info": [{"id": 11976638, "category_id": 130, "iscrowd": 0, "bbox": [195, 68, 73, 74], "area": 3886}, {"id": 3489348, "category_id": 181, "iscrowd": 0, "bbox": [0, 91, 142, 409], "area": 52111}, {"id": 3621437, "category_id": 184, "iscrowd": 0, "bbox": [278, 166, 97, 334], "area": 15660}, {"id": 9474704, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 102159}], "file_name": "000000542073.png", "image_id": 542073}, {"segments_info": [{"id": 8954303, "category_id": 81, "iscrowd": 0, "bbox": [66, 292, 91, 62], "area": 4101}, {"id": 14278114, "category_id": 112, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 6310}, {"id": 14479865, "category_id": 130, "iscrowd": 0, "bbox": [67, 0, 55, 57], "area": 1845}, {"id": 6982051, "category_id": 133, "iscrowd": 0, "bbox": [0, 65, 172, 191], "area": 29001}, {"id": 7377855, "category_id": 168, "iscrowd": 0, "bbox": [11, 328, 348, 110], "area": 2153}, {"id": 6258082, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 100790}, {"id": 3889279, "category_id": 189, "iscrowd": 0, "bbox": [10, 306, 255, 150], "area": 11579}, {"id": 1912153, "category_id": 190, "iscrowd": 0, "bbox": [0, 406, 350, 94], "area": 20121}, {"id": 10599896, "category_id": 199, "iscrowd": 0, "bbox": [6, 51, 181, 217], "area": 7787}], "file_name": "000000542089.png", "image_id": 542089}, {"segments_info": [{"id": 10921821, "category_id": 1, "iscrowd": 0, "bbox": [179, 375, 21, 20], "area": 238}, {"id": 4669758, "category_id": 1, "iscrowd": 0, "bbox": [211, 83, 46, 57], "area": 1315}, {"id": 9676630, "category_id": 1, "iscrowd": 0, "bbox": [357, 357, 17, 18], "area": 170}, {"id": 10392740, "category_id": 1, "iscrowd": 0, "bbox": [207, 391, 25, 24], "area": 202}, {"id": 4143155, "category_id": 1, "iscrowd": 0, "bbox": [302, 346, 25, 31], "area": 359}, {"id": 3488586, "category_id": 1, "iscrowd": 0, "bbox": [419, 350, 14, 19], "area": 166}, {"id": 8222838, "category_id": 1, "iscrowd": 0, "bbox": [329, 136, 61, 50], "area": 1401}, {"id": 4277153, "category_id": 1, "iscrowd": 0, "bbox": [126, 336, 25, 30], "area": 359}, {"id": 5195848, "category_id": 1, "iscrowd": 0, "bbox": [212, 392, 31, 33], "area": 511}, {"id": 4283024, "category_id": 1, "iscrowd": 0, "bbox": [193, 378, 23, 25], "area": 245}, {"id": 6180204, "category_id": 1, "iscrowd": 0, "bbox": [201, 385, 26, 25], "area": 254}, {"id": 6645898, "category_id": 1, "iscrowd": 0, "bbox": [285, 344, 26, 33], "area": 370}, {"id": 8165270, "category_id": 1, "iscrowd": 0, "bbox": [228, 362, 10, 10], "area": 69}, {"id": 9931391, "category_id": 1, "iscrowd": 1, "bbox": [101, 333, 345, 52], "area": 5371}, {"id": 8548967, "category_id": 35, "iscrowd": 0, "bbox": [318, 116, 36, 77], "area": 240}, {"id": 7235969, "category_id": 35, "iscrowd": 0, "bbox": [318, 126, 30, 20], "area": 100}, {"id": 8942187, "category_id": 35, "iscrowd": 0, "bbox": [193, 64, 62, 56], "area": 328}, {"id": 16250097, "category_id": 159, "iscrowd": 0, "bbox": [0, 257, 640, 169], "area": 52983}, {"id": 11234346, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 396], "area": 207590}], "file_name": "000000542127.png", "image_id": 542127}, {"segments_info": [{"id": 4471102, "category_id": 1, "iscrowd": 0, "bbox": [176, 219, 7, 12], "area": 36}, {"id": 4471356, "category_id": 1, "iscrowd": 0, "bbox": [318, 220, 7, 13], "area": 58}, {"id": 4012368, "category_id": 1, "iscrowd": 0, "bbox": [158, 217, 3, 7], "area": 14}, {"id": 2303538, "category_id": 1, "iscrowd": 0, "bbox": [350, 203, 57, 140], "area": 3295}, {"id": 4143421, "category_id": 3, "iscrowd": 0, "bbox": [81, 218, 15, 4], "area": 40}, {"id": 5854321, "category_id": 3, "iscrowd": 0, "bbox": [17, 217, 20, 8], "area": 133}, {"id": 5986931, "category_id": 3, "iscrowd": 0, "bbox": [510, 228, 9, 6], "area": 39}, {"id": 5261124, "category_id": 3, "iscrowd": 0, "bbox": [110, 217, 21, 9], "area": 165}, {"id": 5655369, "category_id": 3, "iscrowd": 0, "bbox": [601, 226, 23, 8], "area": 104}, {"id": 6051153, "category_id": 3, "iscrowd": 0, "bbox": [55, 218, 20, 7], "area": 88}, {"id": 5262414, "category_id": 3, "iscrowd": 0, "bbox": [495, 229, 4, 5], "area": 17}, {"id": 2831169, "category_id": 15, "iscrowd": 0, "bbox": [327, 260, 210, 84], "area": 9741}, {"id": 1381152, "category_id": 27, "iscrowd": 0, "bbox": [398, 269, 23, 31], "area": 481}, {"id": 1907238, "category_id": 31, "iscrowd": 0, "bbox": [403, 270, 29, 31], "area": 277}, {"id": 7039602, "category_id": 184, "iscrowd": 0, "bbox": [0, 94, 640, 143], "area": 67758}, {"id": 16382970, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 147], "area": 75500}, {"id": 4939900, "category_id": 193, "iscrowd": 0, "bbox": [0, 215, 640, 210], "area": 113968}], "file_name": "000000542423.png", "image_id": 542423}, {"segments_info": [{"id": 11968654, "category_id": 3, "iscrowd": 0, "bbox": [84, 182, 49, 39], "area": 1328}, {"id": 5074788, "category_id": 3, "iscrowd": 0, "bbox": [304, 87, 12, 9], "area": 95}, {"id": 10195594, "category_id": 3, "iscrowd": 0, "bbox": [375, 148, 117, 62], "area": 5395}, {"id": 5786738, "category_id": 3, "iscrowd": 0, "bbox": [520, 150, 120, 78], "area": 6983}, {"id": 6909041, "category_id": 3, "iscrowd": 0, "bbox": [624, 183, 16, 41], "area": 493}, {"id": 5132882, "category_id": 3, "iscrowd": 0, "bbox": [287, 223, 353, 256], "area": 68591}, {"id": 3039096, "category_id": 8, "iscrowd": 0, "bbox": [2, 1, 144, 354], "area": 30232}, {"id": 7442848, "category_id": 10, "iscrowd": 0, "bbox": [411, 4, 17, 11], "area": 143}, {"id": 5795930, "category_id": 10, "iscrowd": 0, "bbox": [139, 60, 10, 27], "area": 249}, {"id": 6587026, "category_id": 10, "iscrowd": 0, "bbox": [372, 11, 16, 12], "area": 155}, {"id": 5337222, "category_id": 10, "iscrowd": 0, "bbox": [478, 81, 11, 19], "area": 180}, {"id": 12038831, "category_id": 11, "iscrowd": 0, "bbox": [512, 133, 4, 12], "area": 41}, {"id": 9411996, "category_id": 11, "iscrowd": 0, "bbox": [506, 132, 16, 26], "area": 206}, {"id": 3420204, "category_id": 14, "iscrowd": 0, "bbox": [244, 285, 61, 172], "area": 8184}, {"id": 2039840, "category_id": 16, "iscrowd": 0, "bbox": [209, 213, 88, 101], "area": 2736}, {"id": 5136991, "category_id": 119, "iscrowd": 0, "bbox": [212, 52, 262, 78], "area": 6272}, {"id": 10987688, "category_id": 149, "iscrowd": 0, "bbox": [0, 160, 629, 320], "area": 83224}, {"id": 3625284, "category_id": 184, "iscrowd": 0, "bbox": [19, 0, 621, 151], "area": 53880}, {"id": 3033913, "category_id": 185, "iscrowd": 0, "bbox": [231, 85, 169, 44], "area": 2131}, {"id": 13293018, "category_id": 191, "iscrowd": 0, "bbox": [487, 179, 22, 21], "area": 305}, {"id": 6854016, "category_id": 193, "iscrowd": 0, "bbox": [412, 85, 228, 44], "area": 1967}, {"id": 11714237, "category_id": 197, "iscrowd": 0, "bbox": [429, 0, 211, 77], "area": 5250}, {"id": 7835030, "category_id": 199, "iscrowd": 0, "bbox": [81, 142, 452, 56], "area": 9141}], "file_name": "000000542625.png", "image_id": 542625}, {"segments_info": [{"id": 7830425, "category_id": 1, "iscrowd": 0, "bbox": [246, 197, 394, 224], "area": 33963}, {"id": 3882313, "category_id": 16, "iscrowd": 0, "bbox": [227, 151, 165, 120], "area": 9434}, {"id": 10923990, "category_id": 65, "iscrowd": 0, "bbox": [393, 3, 247, 236], "area": 46331}, {"id": 12103847, "category_id": 84, "iscrowd": 0, "bbox": [35, 202, 605, 224], "area": 57354}], "file_name": "000000542776.png", "image_id": 542776}, {"segments_info": [{"id": 10140372, "category_id": 1, "iscrowd": 0, "bbox": [238, 265, 52, 50], "area": 1613}, {"id": 4025225, "category_id": 1, "iscrowd": 0, "bbox": [187, 265, 50, 51], "area": 1706}, {"id": 3093295, "category_id": 1, "iscrowd": 0, "bbox": [485, 237, 11, 42], "area": 315}, {"id": 4874676, "category_id": 1, "iscrowd": 0, "bbox": [135, 265, 50, 52], "area": 1669}, {"id": 7107975, "category_id": 6, "iscrowd": 0, "bbox": [4, 170, 591, 211], "area": 99683}, {"id": 4934211, "category_id": 10, "iscrowd": 0, "bbox": [548, 57, 27, 76], "area": 1336}, {"id": 6779000, "category_id": 149, "iscrowd": 0, "bbox": [0, 303, 640, 124], "area": 42820}, {"id": 3224628, "category_id": 185, "iscrowd": 0, "bbox": [574, 253, 66, 74], "area": 3945}, {"id": 14994081, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 219], "area": 72733}, {"id": 9473411, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 266], "area": 46669}], "file_name": "000000542856.png", "image_id": 542856}, {"segments_info": [{"id": 6904482, "category_id": 3, "iscrowd": 0, "bbox": [260, 276, 375, 184], "area": 45256}, {"id": 7241150, "category_id": 3, "iscrowd": 0, "bbox": [0, 366, 58, 109], "area": 4000}, {"id": 4475986, "category_id": 6, "iscrowd": 0, "bbox": [0, 183, 465, 164], "area": 44816}, {"id": 9996911, "category_id": 9, "iscrowd": 0, "bbox": [149, 120, 245, 92], "area": 11756}, {"id": 10001051, "category_id": 125, "iscrowd": 0, "bbox": [50, 307, 590, 173], "area": 33435}, {"id": 5264210, "category_id": 128, "iscrowd": 0, "bbox": [171, 93, 469, 216], "area": 16282}, {"id": 6710110, "category_id": 130, "iscrowd": 0, "bbox": [143, 157, 345, 79], "area": 585}, {"id": 4415055, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 419], "area": 110481}, {"id": 15131850, "category_id": 187, "iscrowd": 0, "bbox": [268, 0, 322, 73], "area": 8949}, {"id": 7435643, "category_id": 189, "iscrowd": 0, "bbox": [0, 283, 72, 90], "area": 1671}, {"id": 5599086, "category_id": 193, "iscrowd": 0, "bbox": [38, 377, 163, 75], "area": 2103}, {"id": 3358026, "category_id": 198, "iscrowd": 0, "bbox": [12, 341, 111, 75], "area": 4303}], "file_name": "000000543043.png", "image_id": 543043}, {"segments_info": [{"id": 3747381, "category_id": 31, "iscrowd": 0, "bbox": [464, 190, 41, 34], "area": 689}, {"id": 14867397, "category_id": 47, "iscrowd": 0, "bbox": [499, 205, 8, 12], "area": 77}, {"id": 15261896, "category_id": 47, "iscrowd": 0, "bbox": [508, 204, 9, 11], "area": 73}, {"id": 12440293, "category_id": 47, "iscrowd": 0, "bbox": [330, 338, 16, 26], "area": 345}, {"id": 5198675, "category_id": 51, "iscrowd": 0, "bbox": [288, 363, 26, 16], "area": 287}, {"id": 8424865, "category_id": 62, "iscrowd": 0, "bbox": [397, 178, 23, 29], "area": 505}, {"id": 8753313, "category_id": 62, "iscrowd": 0, "bbox": [371, 180, 22, 26], "area": 523}, {"id": 8750247, "category_id": 62, "iscrowd": 0, "bbox": [303, 220, 52, 73], "area": 2323}, {"id": 8224677, "category_id": 62, "iscrowd": 0, "bbox": [358, 216, 54, 73], "area": 2629}, {"id": 6911891, "category_id": 62, "iscrowd": 0, "bbox": [427, 177, 26, 48], "area": 635}, {"id": 4606069, "category_id": 63, "iscrowd": 0, "bbox": [0, 249, 209, 224], "area": 34002}, {"id": 6311047, "category_id": 63, "iscrowd": 0, "bbox": [456, 236, 183, 244], "area": 31664}, {"id": 11381686, "category_id": 67, "iscrowd": 0, "bbox": [283, 203, 157, 88], "area": 4002}, {"id": 15260362, "category_id": 78, "iscrowd": 0, "bbox": [343, 152, 27, 16], "area": 414}, {"id": 8420236, "category_id": 81, "iscrowd": 0, "bbox": [388, 177, 13, 3], "area": 32}, {"id": 8876406, "category_id": 84, "iscrowd": 0, "bbox": [358, 328, 42, 23], "area": 939}, {"id": 9867157, "category_id": 107, "iscrowd": 0, "bbox": [395, 172, 18, 14], "area": 90}, {"id": 10268869, "category_id": 112, "iscrowd": 0, "bbox": [138, 75, 185, 184], "area": 10826}, {"id": 14473182, "category_id": 130, "iscrowd": 0, "bbox": [318, 109, 21, 20], "area": 250}, {"id": 8819618, "category_id": 186, "iscrowd": 0, "bbox": [161, 0, 312, 142], "area": 17690}, {"id": 9474727, "category_id": 188, "iscrowd": 0, "bbox": [336, 105, 118, 118], "area": 5698}, {"id": 4146766, "category_id": 189, "iscrowd": 0, "bbox": [133, 190, 410, 290], "area": 37693}, {"id": 8620436, "category_id": 190, "iscrowd": 0, "bbox": [28, 215, 532, 265], "area": 42849}, {"id": 10856868, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 284], "area": 91603}], "file_name": "000000543047.png", "image_id": 543047}, {"segments_info": [{"id": 8881792, "category_id": 9, "iscrowd": 0, "bbox": [24, 265, 569, 129], "area": 59261}, {"id": 7295534, "category_id": 155, "iscrowd": 0, "bbox": [0, 375, 640, 105], "area": 56086}, {"id": 6184799, "category_id": 166, "iscrowd": 0, "bbox": [448, 261, 109, 27], "area": 1669}, {"id": 2568492, "category_id": 184, "iscrowd": 0, "bbox": [0, 213, 640, 130], "area": 5651}, {"id": 5789261, "category_id": 185, "iscrowd": 0, "bbox": [0, 280, 128, 45], "area": 1778}, {"id": 11571295, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 252], "area": 133393}, {"id": 5789528, "category_id": 197, "iscrowd": 0, "bbox": [9, 105, 631, 246], "area": 43222}, {"id": 3949125, "category_id": 199, "iscrowd": 0, "bbox": [0, 321, 640, 78], "area": 5494}], "file_name": "000000543300.png", "image_id": 543300}, {"segments_info": [{"id": 4869207, "category_id": 5, "iscrowd": 0, "bbox": [188, 83, 335, 161], "area": 14780}, {"id": 12887456, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 292161}], "file_name": "000000543528.png", "image_id": 543528}, {"segments_info": [{"id": 530992, "category_id": 17, "iscrowd": 0, "bbox": [486, 318, 143, 85], "area": 6370}, {"id": 1186335, "category_id": 18, "iscrowd": 0, "bbox": [259, 135, 94, 89], "area": 3719}, {"id": 3363684, "category_id": 44, "iscrowd": 0, "bbox": [533, 208, 13, 31], "area": 290}, {"id": 1400955, "category_id": 44, "iscrowd": 0, "bbox": [384, 343, 31, 59], "area": 1587}, {"id": 3037810, "category_id": 63, "iscrowd": 0, "bbox": [252, 124, 305, 222], "area": 41898}, {"id": 1052434, "category_id": 72, "iscrowd": 0, "bbox": [181, 183, 81, 64], "area": 4397}, {"id": 13074582, "category_id": 72, "iscrowd": 0, "bbox": [0, 105, 103, 94], "area": 8443}, {"id": 1781817, "category_id": 75, "iscrowd": 0, "bbox": [572, 248, 21, 7], "area": 77}, {"id": 4217198, "category_id": 84, "iscrowd": 0, "bbox": [259, 113, 4, 14], "area": 42}, {"id": 3624809, "category_id": 84, "iscrowd": 0, "bbox": [263, 113, 3, 14], "area": 42}, {"id": 2307647, "category_id": 84, "iscrowd": 0, "bbox": [235, 128, 20, 10], "area": 148}, {"id": 2839659, "category_id": 84, "iscrowd": 0, "bbox": [264, 148, 7, 15], "area": 74}, {"id": 3624297, "category_id": 84, "iscrowd": 0, "bbox": [266, 112, 5, 15], "area": 68}, {"id": 2044493, "category_id": 84, "iscrowd": 0, "bbox": [264, 131, 3, 14], "area": 35}, {"id": 3493216, "category_id": 84, "iscrowd": 0, "bbox": [275, 92, 5, 15], "area": 59}, {"id": 3431275, "category_id": 84, "iscrowd": 0, "bbox": [270, 131, 3, 13], "area": 29}, {"id": 2440019, "category_id": 84, "iscrowd": 0, "bbox": [262, 132, 3, 13], "area": 31}, {"id": 3955563, "category_id": 84, "iscrowd": 0, "bbox": [263, 93, 5, 15], "area": 57}, {"id": 2044997, "category_id": 84, "iscrowd": 0, "bbox": [88, 229, 28, 12], "area": 228}, {"id": 1131899, "category_id": 118, "iscrowd": 0, "bbox": [11, 251, 629, 176], "area": 44768}, {"id": 1192776, "category_id": 130, "iscrowd": 0, "bbox": [542, 135, 71, 106], "area": 3002}, {"id": 1453377, "category_id": 156, "iscrowd": 0, "bbox": [205, 118, 60, 38], "area": 464}, {"id": 16645628, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 77, 119], "area": 8045}, {"id": 1192511, "category_id": 189, "iscrowd": 0, "bbox": [526, 232, 98, 96], "area": 3281}, {"id": 1980745, "category_id": 195, "iscrowd": 0, "bbox": [135, 91, 496, 166], "area": 7340}, {"id": 7252154, "category_id": 199, "iscrowd": 0, "bbox": [69, 0, 571, 360], "area": 77842}, {"id": 2900566, "category_id": 200, "iscrowd": 0, "bbox": [0, 281, 140, 146], "area": 13094}], "file_name": "000000543581.png", "image_id": 543581}, {"segments_info": [{"id": 5593955, "category_id": 41, "iscrowd": 0, "bbox": [135, 383, 207, 237], "area": 22697}, {"id": 4272945, "category_id": 41, "iscrowd": 0, "bbox": [370, 484, 93, 110], "area": 4934}, {"id": 6841701, "category_id": 149, "iscrowd": 0, "bbox": [0, 214, 640, 426], "area": 199620}, {"id": 5924700, "category_id": 184, "iscrowd": 0, "bbox": [0, 151, 458, 94], "area": 7069}, {"id": 15722967, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 229], "area": 87599}], "file_name": "000000544052.png", "image_id": 544052}, {"segments_info": [{"id": 7631993, "category_id": 85, "iscrowd": 0, "bbox": [440, 410, 59, 82], "area": 3721}, {"id": 9281962, "category_id": 85, "iscrowd": 0, "bbox": [329, 410, 55, 82], "area": 3534}, {"id": 11255999, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 296530}, {"id": 6050658, "category_id": 197, "iscrowd": 0, "bbox": [303, 50, 225, 562], "area": 70682}], "file_name": "000000544306.png", "image_id": 544306}, {"segments_info": [{"id": 4799797, "category_id": 1, "iscrowd": 0, "bbox": [126, 260, 237, 257], "area": 26170}, {"id": 10590877, "category_id": 35, "iscrowd": 0, "bbox": [89, 507, 136, 37], "area": 1464}, {"id": 15196380, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 214241}, {"id": 3225395, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 254, 144], "area": 28641}], "file_name": "000000544444.png", "image_id": 544444}, {"segments_info": [{"id": 4806248, "category_id": 1, "iscrowd": 0, "bbox": [2, 9, 637, 411], "area": 187431}, {"id": 14909283, "category_id": 90, "iscrowd": 0, "bbox": [179, 250, 207, 41], "area": 3014}, {"id": 6053734, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 344, 193], "area": 48786}, {"id": 1055276, "category_id": 156, "iscrowd": 0, "bbox": [0, 289, 84, 138], "area": 8695}, {"id": 1187904, "category_id": 190, "iscrowd": 0, "bbox": [67, 302, 100, 125], "area": 8321}], "file_name": "000000544519.png", "image_id": 544519}, {"segments_info": [{"id": 2832725, "category_id": 49, "iscrowd": 0, "bbox": [1, 0, 120, 256], "area": 5508}, {"id": 6584731, "category_id": 50, "iscrowd": 0, "bbox": [0, 328, 42, 35], "area": 1170}, {"id": 1203875, "category_id": 55, "iscrowd": 0, "bbox": [297, 245, 107, 100], "area": 5487}, {"id": 1398670, "category_id": 55, "iscrowd": 0, "bbox": [249, 246, 50, 82], "area": 2503}, {"id": 5402262, "category_id": 67, "iscrowd": 0, "bbox": [0, 1, 640, 639], "area": 102802}, {"id": 9348290, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 267, 640], "area": 2430}, {"id": 6522272, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 542, 584], "area": 45283}, {"id": 8621732, "category_id": 200, "iscrowd": 0, "bbox": [253, 0, 160, 44], "area": 4089}], "file_name": "000000544565.png", "image_id": 544565}, {"segments_info": [{"id": 4739684, "category_id": 10, "iscrowd": 0, "bbox": [279, 307, 42, 43], "area": 1527}, {"id": 4944745, "category_id": 184, "iscrowd": 0, "bbox": [378, 0, 122, 130], "area": 9196}, {"id": 6842731, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 160032}], "file_name": "000000544605.png", "image_id": 544605}, {"segments_info": [{"id": 9147046, "category_id": 16, "iscrowd": 0, "bbox": [325, 245, 104, 94], "area": 3374}, {"id": 10720406, "category_id": 16, "iscrowd": 0, "bbox": [479, 194, 119, 91], "area": 2496}, {"id": 9204578, "category_id": 155, "iscrowd": 0, "bbox": [0, 51, 640, 341], "area": 189793}], "file_name": "000000544811.png", "image_id": 544811}, {"segments_info": [{"id": 1841430, "category_id": 1, "iscrowd": 0, "bbox": [151, 31, 128, 235], "area": 16181}, {"id": 7761764, "category_id": 85, "iscrowd": 0, "bbox": [73, 319, 87, 177], "area": 10504}, {"id": 5722954, "category_id": 85, "iscrowd": 0, "bbox": [195, 297, 155, 168], "area": 18477}, {"id": 15328477, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 425, 640], "area": 166283}, {"id": 789515, "category_id": 197, "iscrowd": 0, "bbox": [65, 247, 301, 393], "area": 60147}], "file_name": "000000545007.png", "image_id": 545007}, {"segments_info": [{"id": 4011573, "category_id": 1, "iscrowd": 0, "bbox": [389, 121, 177, 305], "area": 35656}, {"id": 7495766, "category_id": 1, "iscrowd": 0, "bbox": [102, 328, 17, 59], "area": 511}, {"id": 6248277, "category_id": 1, "iscrowd": 0, "bbox": [143, 332, 27, 60], "area": 931}, {"id": 3632268, "category_id": 3, "iscrowd": 0, "bbox": [565, 248, 50, 21], "area": 732}, {"id": 5476016, "category_id": 3, "iscrowd": 0, "bbox": [272, 236, 39, 14], "area": 283}, {"id": 9738126, "category_id": 3, "iscrowd": 0, "bbox": [43, 230, 12, 18], "area": 180}, {"id": 6052426, "category_id": 3, "iscrowd": 0, "bbox": [169, 231, 38, 17], "area": 466}, {"id": 3026471, "category_id": 10, "iscrowd": 0, "bbox": [45, 207, 8, 17], "area": 120}, {"id": 4609626, "category_id": 10, "iscrowd": 0, "bbox": [351, 258, 7, 14], "area": 70}, {"id": 2698018, "category_id": 10, "iscrowd": 0, "bbox": [38, 209, 9, 20], "area": 123}, {"id": 1907229, "category_id": 77, "iscrowd": 0, "bbox": [431, 135, 22, 36], "area": 557}, {"id": 6058085, "category_id": 130, "iscrowd": 0, "bbox": [340, 202, 23, 21], "area": 303}, {"id": 10395549, "category_id": 149, "iscrowd": 0, "bbox": [12, 229, 616, 103], "area": 8984}, {"id": 4018505, "category_id": 184, "iscrowd": 0, "bbox": [0, 184, 640, 173], "area": 31663}, {"id": 6710877, "category_id": 185, "iscrowd": 0, "bbox": [0, 264, 640, 162], "area": 59590}, {"id": 16183530, "category_id": 187, "iscrowd": 0, "bbox": [82, 0, 102, 123], "area": 9460}, {"id": 7896192, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 263], "area": 106033}], "file_name": "000000545100.png", "image_id": 545100}, {"segments_info": [{"id": 4212044, "category_id": 24, "iscrowd": 0, "bbox": [0, 106, 190, 172], "area": 13789}, {"id": 4409423, "category_id": 24, "iscrowd": 0, "bbox": [211, 108, 203, 140], "area": 10801}, {"id": 3423046, "category_id": 24, "iscrowd": 0, "bbox": [247, 155, 156, 149], "area": 10681}, {"id": 2178868, "category_id": 184, "iscrowd": 0, "bbox": [106, 0, 268, 46], "area": 6039}, {"id": 4675424, "category_id": 193, "iscrowd": 0, "bbox": [459, 0, 41, 16], "area": 493}, {"id": 5859713, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 500, 373], "area": 138471}, {"id": 4938091, "category_id": 198, "iscrowd": 0, "bbox": [57, 23, 434, 56], "area": 4814}], "file_name": "000000545129.png", "image_id": 545129}, {"segments_info": [{"id": 3148553, "category_id": 1, "iscrowd": 0, "bbox": [549, 274, 60, 130], "area": 4033}, {"id": 4535611, "category_id": 1, "iscrowd": 0, "bbox": [131, 260, 170, 213], "area": 21877}, {"id": 2436399, "category_id": 1, "iscrowd": 0, "bbox": [265, 303, 96, 171], "area": 11999}, {"id": 2102549, "category_id": 1, "iscrowd": 0, "bbox": [484, 272, 78, 208], "area": 11928}, {"id": 331837, "category_id": 1, "iscrowd": 0, "bbox": [33, 265, 53, 180], "area": 6610}, {"id": 3943467, "category_id": 6, "iscrowd": 0, "bbox": [113, 91, 478, 323], "area": 88858}, {"id": 1642259, "category_id": 27, "iscrowd": 0, "bbox": [35, 295, 17, 72], "area": 234}, {"id": 2363406, "category_id": 31, "iscrowd": 0, "bbox": [18, 307, 23, 60], "area": 726}, {"id": 1508871, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 272], "area": 96787}, {"id": 2035475, "category_id": 194, "iscrowd": 0, "bbox": [0, 286, 640, 194], "area": 35973}, {"id": 1775130, "category_id": 197, "iscrowd": 0, "bbox": [0, 265, 114, 32], "area": 1721}], "file_name": "000000545219.png", "image_id": 545219}, {"segments_info": [{"id": 6313552, "category_id": 5, "iscrowd": 0, "bbox": [177, 175, 299, 123], "area": 8747}, {"id": 14597015, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 424], "area": 262403}], "file_name": "000000545407.png", "image_id": 545407}, {"segments_info": [{"id": 1316891, "category_id": 1, "iscrowd": 0, "bbox": [262, 284, 129, 109], "area": 4803}, {"id": 3098189, "category_id": 1, "iscrowd": 0, "bbox": [255, 219, 53, 112], "area": 3098}, {"id": 4938876, "category_id": 1, "iscrowd": 0, "bbox": [300, 275, 34, 46], "area": 452}, {"id": 3226184, "category_id": 1, "iscrowd": 0, "bbox": [531, 179, 108, 324], "area": 12007}, {"id": 2368806, "category_id": 1, "iscrowd": 0, "bbox": [397, 240, 196, 173], "area": 12720}, {"id": 4547439, "category_id": 1, "iscrowd": 0, "bbox": [350, 245, 87, 115], "area": 6313}, {"id": 5132904, "category_id": 1, "iscrowd": 0, "bbox": [77, 22, 216, 487], "area": 38854}, {"id": 3489898, "category_id": 1, "iscrowd": 0, "bbox": [1, 160, 34, 68], "area": 1174}, {"id": 1910368, "category_id": 27, "iscrowd": 0, "bbox": [7, 120, 202, 313], "area": 40710}, {"id": 9671074, "category_id": 130, "iscrowd": 0, "bbox": [0, 135, 345, 136], "area": 1841}, {"id": 11051702, "category_id": 181, "iscrowd": 0, "bbox": [0, 35, 640, 352], "area": 27667}, {"id": 10527399, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 601, 273], "area": 59846}, {"id": 4414351, "category_id": 195, "iscrowd": 0, "bbox": [0, 68, 56, 89], "area": 3072}, {"id": 4410699, "category_id": 199, "iscrowd": 0, "bbox": [11, 0, 629, 273], "area": 14359}], "file_name": "000000545594.png", "image_id": 545594}, {"segments_info": [{"id": 3093048, "category_id": 24, "iscrowd": 0, "bbox": [168, 312, 73, 48], "area": 1658}, {"id": 4474700, "category_id": 24, "iscrowd": 0, "bbox": [395, 290, 85, 50], "area": 2014}, {"id": 4408908, "category_id": 24, "iscrowd": 0, "bbox": [237, 303, 83, 49], "area": 1759}, {"id": 2830136, "category_id": 24, "iscrowd": 0, "bbox": [0, 348, 69, 50], "area": 1879}, {"id": 4014149, "category_id": 24, "iscrowd": 0, "bbox": [560, 281, 74, 48], "area": 1826}, {"id": 4145737, "category_id": 24, "iscrowd": 0, "bbox": [110, 313, 60, 52], "area": 1464}, {"id": 4342858, "category_id": 24, "iscrowd": 0, "bbox": [28, 344, 62, 47], "area": 1272}, {"id": 4014153, "category_id": 24, "iscrowd": 0, "bbox": [0, 324, 54, 26], "area": 805}, {"id": 3290428, "category_id": 24, "iscrowd": 0, "bbox": [85, 346, 57, 47], "area": 1749}, {"id": 9406854, "category_id": 178, "iscrowd": 0, "bbox": [0, 128, 640, 299], "area": 117149}, {"id": 2438199, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 157], "area": 45305}, {"id": 13683397, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 600, 80], "area": 37016}, {"id": 6582402, "category_id": 193, "iscrowd": 0, "bbox": [302, 373, 338, 54], "area": 9841}, {"id": 4872551, "category_id": 194, "iscrowd": 0, "bbox": [0, 112, 640, 299], "area": 42897}, {"id": 2830389, "category_id": 198, "iscrowd": 0, "bbox": [0, 119, 120, 308], "area": 5945}], "file_name": "000000545730.png", "image_id": 545730}, {"segments_info": [{"id": 10393732, "category_id": 17, "iscrowd": 0, "bbox": [23, 10, 261, 318], "area": 52584}, {"id": 3881531, "category_id": 62, "iscrowd": 0, "bbox": [2, 146, 376, 185], "area": 32891}, {"id": 3421004, "category_id": 118, "iscrowd": 0, "bbox": [240, 49, 56, 104], "area": 2458}, {"id": 10788774, "category_id": 188, "iscrowd": 0, "bbox": [234, 0, 197, 156], "area": 11513}, {"id": 1777200, "category_id": 190, "iscrowd": 0, "bbox": [0, 137, 45, 61], "area": 1437}, {"id": 7567744, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 56, 138], "area": 5952}], "file_name": "000000545826.png", "image_id": 545826}, {"segments_info": [{"id": 2569277, "category_id": 21, "iscrowd": 0, "bbox": [380, 261, 192, 135], "area": 13140}, {"id": 4992009, "category_id": 112, "iscrowd": 0, "bbox": [165, 156, 70, 182], "area": 9382}, {"id": 7565667, "category_id": 128, "iscrowd": 0, "bbox": [0, 17, 640, 381], "area": 174298}, {"id": 8816768, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 640, 71], "area": 32589}, {"id": 4414318, "category_id": 194, "iscrowd": 0, "bbox": [0, 324, 640, 104], "area": 40853}, {"id": 9278872, "category_id": 195, "iscrowd": 0, "bbox": [390, 150, 55, 56], "area": 2673}], "file_name": "000000545958.png", "image_id": 545958}, {"segments_info": [{"id": 5726058, "category_id": 24, "iscrowd": 0, "bbox": [201, 115, 175, 168], "area": 10609}, {"id": 7371402, "category_id": 24, "iscrowd": 0, "bbox": [270, 113, 191, 171], "area": 13983}, {"id": 6845830, "category_id": 24, "iscrowd": 0, "bbox": [52, 118, 100, 165], "area": 10426}, {"id": 10203075, "category_id": 154, "iscrowd": 0, "bbox": [0, 271, 500, 48], "area": 17335}, {"id": 3234929, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 276], "area": 92964}, {"id": 3434848, "category_id": 193, "iscrowd": 0, "bbox": [0, 234, 500, 100], "area": 21149}], "file_name": "000000546011.png", "image_id": 546011}, {"segments_info": [{"id": 2631729, "category_id": 1, "iscrowd": 0, "bbox": [452, 198, 152, 173], "area": 6458}, {"id": 5987176, "category_id": 1, "iscrowd": 0, "bbox": [83, 249, 119, 172], "area": 11096}, {"id": 5655365, "category_id": 1, "iscrowd": 0, "bbox": [0, 214, 27, 81], "area": 1167}, {"id": 3089705, "category_id": 1, "iscrowd": 0, "bbox": [0, 248, 93, 179], "area": 11324}, {"id": 2894380, "category_id": 1, "iscrowd": 0, "bbox": [251, 223, 98, 94], "area": 4289}, {"id": 4278595, "category_id": 1, "iscrowd": 0, "bbox": [370, 212, 39, 115], "area": 2787}, {"id": 5196884, "category_id": 1, "iscrowd": 0, "bbox": [466, 230, 102, 197], "area": 11948}, {"id": 4866889, "category_id": 1, "iscrowd": 0, "bbox": [73, 220, 68, 120], "area": 5122}, {"id": 4935782, "category_id": 1, "iscrowd": 0, "bbox": [295, 236, 176, 185], "area": 13257}, {"id": 2762537, "category_id": 31, "iscrowd": 0, "bbox": [561, 339, 50, 87], "area": 1498}, {"id": 6973807, "category_id": 44, "iscrowd": 0, "bbox": [239, 317, 11, 37], "area": 249}, {"id": 5799836, "category_id": 44, "iscrowd": 0, "bbox": [342, 309, 10, 41], "area": 278}, {"id": 4017509, "category_id": 44, "iscrowd": 0, "bbox": [290, 317, 11, 24], "area": 168}, {"id": 8483692, "category_id": 46, "iscrowd": 0, "bbox": [267, 304, 16, 28], "area": 161}, {"id": 9273983, "category_id": 46, "iscrowd": 0, "bbox": [256, 309, 17, 32], "area": 367}, {"id": 11511717, "category_id": 47, "iscrowd": 0, "bbox": [324, 342, 32, 21], "area": 501}, {"id": 5129794, "category_id": 47, "iscrowd": 0, "bbox": [226, 305, 20, 13], "area": 160}, {"id": 10853270, "category_id": 47, "iscrowd": 0, "bbox": [277, 311, 15, 25], "area": 331}, {"id": 8352623, "category_id": 47, "iscrowd": 0, "bbox": [247, 306, 17, 20], "area": 193}, {"id": 10788252, "category_id": 47, "iscrowd": 0, "bbox": [248, 325, 11, 26], "area": 210}, {"id": 6708570, "category_id": 47, "iscrowd": 0, "bbox": [328, 306, 17, 37], "area": 293}, {"id": 9475993, "category_id": 47, "iscrowd": 0, "bbox": [193, 321, 19, 29], "area": 289}, {"id": 12235180, "category_id": 47, "iscrowd": 0, "bbox": [216, 344, 25, 24], "area": 514}, {"id": 12036774, "category_id": 47, "iscrowd": 0, "bbox": [216, 326, 20, 17], "area": 234}, {"id": 7433841, "category_id": 47, "iscrowd": 0, "bbox": [350, 334, 21, 23], "area": 363}, {"id": 11906218, "category_id": 47, "iscrowd": 0, "bbox": [199, 334, 20, 30], "area": 487}, {"id": 11314336, "category_id": 47, "iscrowd": 0, "bbox": [314, 319, 23, 25], "area": 436}, {"id": 4605561, "category_id": 47, "iscrowd": 0, "bbox": [241, 311, 6, 6], "area": 29}, {"id": 6380632, "category_id": 47, "iscrowd": 1, "bbox": [226, 308, 137, 13], "area": 136}, {"id": 4737103, "category_id": 48, "iscrowd": 0, "bbox": [237, 371, 38, 24], "area": 116}, {"id": 8157561, "category_id": 49, "iscrowd": 0, "bbox": [332, 370, 31, 5], "area": 86}, {"id": 4407885, "category_id": 49, "iscrowd": 0, "bbox": [288, 374, 18, 18], "area": 88}, {"id": 6189436, "category_id": 50, "iscrowd": 0, "bbox": [336, 369, 25, 8], "area": 46}, {"id": 9672602, "category_id": 51, "iscrowd": 0, "bbox": [306, 363, 60, 26], "area": 1079}, {"id": 9543331, "category_id": 51, "iscrowd": 0, "bbox": [188, 365, 67, 24], "area": 1099}, {"id": 2764338, "category_id": 62, "iscrowd": 0, "bbox": [188, 278, 20, 44], "area": 688}, {"id": 2829873, "category_id": 62, "iscrowd": 0, "bbox": [259, 273, 75, 6], "area": 35}, {"id": 2830412, "category_id": 62, "iscrowd": 0, "bbox": [400, 373, 104, 48], "area": 3587}, {"id": 2829879, "category_id": 62, "iscrowd": 0, "bbox": [556, 316, 43, 88], "area": 1890}, {"id": 3291208, "category_id": 62, "iscrowd": 0, "bbox": [34, 364, 90, 59], "area": 3015}, {"id": 6054770, "category_id": 67, "iscrowd": 0, "bbox": [166, 315, 208, 93], "area": 9332}, {"id": 5856355, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 86018}, {"id": 13355720, "category_id": 181, "iscrowd": 0, "bbox": [28, 0, 331, 297], "area": 83921}, {"id": 2964043, "category_id": 189, "iscrowd": 0, "bbox": [189, 398, 78, 29], "area": 1282}, {"id": 3354930, "category_id": 199, "iscrowd": 0, "bbox": [175, 290, 77, 40], "area": 958}], "file_name": "000000546219.png", "image_id": 546219}, {"segments_info": [{"id": 4210498, "category_id": 63, "iscrowd": 0, "bbox": [0, 267, 480, 346], "area": 125745}, {"id": 3621972, "category_id": 67, "iscrowd": 0, "bbox": [1, 512, 306, 128], "area": 26719}, {"id": 3880505, "category_id": 75, "iscrowd": 0, "bbox": [119, 548, 97, 88], "area": 3581}, {"id": 5724775, "category_id": 109, "iscrowd": 0, "bbox": [102, 108, 279, 201], "area": 16842}, {"id": 14018025, "category_id": 130, "iscrowd": 0, "bbox": [102, 0, 229, 181], "area": 4733}, {"id": 16053233, "category_id": 181, "iscrowd": 0, "bbox": [212, 195, 142, 88], "area": 10921}, {"id": 6719391, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 188], "area": 37059}, {"id": 9411999, "category_id": 188, "iscrowd": 0, "bbox": [139, 159, 45, 80], "area": 2588}, {"id": 5789533, "category_id": 189, "iscrowd": 0, "bbox": [0, 536, 38, 104], "area": 410}, {"id": 331027, "category_id": 190, "iscrowd": 0, "bbox": [295, 609, 185, 31], "area": 4813}, {"id": 6650768, "category_id": 199, "iscrowd": 0, "bbox": [0, 52, 480, 320], "area": 66303}], "file_name": "000000546325.png", "image_id": 546325}, {"segments_info": [{"id": 5929848, "category_id": 1, "iscrowd": 0, "bbox": [32, 0, 351, 631], "area": 110903}, {"id": 8761296, "category_id": 1, "iscrowd": 0, "bbox": [225, 107, 156, 463], "area": 31791}, {"id": 2635335, "category_id": 77, "iscrowd": 0, "bbox": [165, 178, 57, 76], "area": 2816}, {"id": 2572120, "category_id": 112, "iscrowd": 0, "bbox": [31, 0, 317, 624], "area": 31009}, {"id": 1975858, "category_id": 156, "iscrowd": 0, "bbox": [225, 0, 109, 252], "area": 7024}, {"id": 4083025, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 383, 629], "area": 32786}], "file_name": "000000546475.png", "image_id": 546475}, {"segments_info": [{"id": 5007746, "category_id": 20, "iscrowd": 0, "bbox": [302, 206, 28, 15], "area": 313}, {"id": 4680577, "category_id": 20, "iscrowd": 0, "bbox": [10, 171, 628, 104], "area": 14646}, {"id": 3626352, "category_id": 20, "iscrowd": 0, "bbox": [126, 180, 17, 9], "area": 90}, {"id": 4020837, "category_id": 20, "iscrowd": 0, "bbox": [612, 218, 25, 13], "area": 228}, {"id": 2897195, "category_id": 184, "iscrowd": 0, "bbox": [0, 65, 640, 122], "area": 32153}, {"id": 14473684, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 159], "area": 77907}, {"id": 2844269, "category_id": 193, "iscrowd": 0, "bbox": [0, 136, 640, 165], "area": 66014}, {"id": 12565678, "category_id": 197, "iscrowd": 0, "bbox": [613, 110, 15, 42], "area": 542}], "file_name": "000000546556.png", "image_id": 546556}, {"segments_info": [{"id": 530476, "category_id": 44, "iscrowd": 0, "bbox": [53, 22, 59, 179], "area": 8085}, {"id": 526397, "category_id": 47, "iscrowd": 0, "bbox": [110, 78, 101, 105], "area": 8113}, {"id": 3159625, "category_id": 67, "iscrowd": 0, "bbox": [1, 65, 299, 331], "area": 69215}, {"id": 5728132, "category_id": 77, "iscrowd": 0, "bbox": [132, 177, 92, 74], "area": 3781}, {"id": 655876, "category_id": 195, "iscrowd": 0, "bbox": [0, 297, 300, 103], "area": 1396}], "file_name": "000000546626.png", "image_id": 546626}, {"segments_info": [{"id": 6650524, "category_id": 1, "iscrowd": 0, "bbox": [12, 380, 12, 17], "area": 143}, {"id": 11578286, "category_id": 1, "iscrowd": 0, "bbox": [169, 408, 14, 22], "area": 201}, {"id": 7765648, "category_id": 1, "iscrowd": 0, "bbox": [73, 346, 7, 24], "area": 102}, {"id": 2236714, "category_id": 7, "iscrowd": 0, "bbox": [47, 364, 373, 184], "area": 54911}, {"id": 5334921, "category_id": 147, "iscrowd": 0, "bbox": [0, 494, 420, 146], "area": 48369}, {"id": 8357004, "category_id": 149, "iscrowd": 0, "bbox": [0, 369, 90, 45], "area": 2018}, {"id": 5334361, "category_id": 184, "iscrowd": 0, "bbox": [74, 125, 72, 56], "area": 2264}, {"id": 6777977, "category_id": 185, "iscrowd": 0, "bbox": [0, 387, 54, 41], "area": 1528}, {"id": 13680299, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 381, 166], "area": 35458}, {"id": 3699831, "category_id": 193, "iscrowd": 0, "bbox": [0, 464, 43, 32], "area": 599}, {"id": 11186872, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 420, 391], "area": 119559}, {"id": 6912144, "category_id": 199, "iscrowd": 0, "bbox": [0, 421, 57, 80], "area": 3351}], "file_name": "000000546659.png", "image_id": 546659}, {"segments_info": [{"id": 5527412, "category_id": 1, "iscrowd": 0, "bbox": [27, 81, 354, 550], "area": 77887}, {"id": 9415888, "category_id": 47, "iscrowd": 0, "bbox": [445, 318, 21, 77], "area": 927}, {"id": 2705784, "category_id": 63, "iscrowd": 0, "bbox": [7, 52, 453, 373], "area": 59012}, {"id": 988187, "category_id": 64, "iscrowd": 0, "bbox": [357, 4, 114, 169], "area": 15331}, {"id": 3820641, "category_id": 73, "iscrowd": 0, "bbox": [182, 346, 286, 269], "area": 42599}, {"id": 5925803, "category_id": 74, "iscrowd": 0, "bbox": [141, 497, 48, 58], "area": 2020}, {"id": 2844588, "category_id": 189, "iscrowd": 0, "bbox": [87, 339, 384, 301], "area": 36470}, {"id": 3100020, "category_id": 195, "iscrowd": 0, "bbox": [356, 158, 115, 154], "area": 10363}, {"id": 6588587, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 393, 186], "area": 30458}, {"id": 1452351, "category_id": 200, "iscrowd": 0, "bbox": [410, 578, 61, 62], "area": 1837}], "file_name": "000000546717.png", "image_id": 546717}, {"segments_info": [{"id": 5984328, "category_id": 1, "iscrowd": 0, "bbox": [605, 265, 24, 45], "area": 456}, {"id": 8486524, "category_id": 1, "iscrowd": 0, "bbox": [425, 268, 24, 42], "area": 522}, {"id": 5920857, "category_id": 1, "iscrowd": 0, "bbox": [31, 275, 23, 72], "area": 966}, {"id": 8222590, "category_id": 1, "iscrowd": 0, "bbox": [137, 271, 9, 37], "area": 227}, {"id": 5392448, "category_id": 1, "iscrowd": 0, "bbox": [258, 263, 21, 57], "area": 622}, {"id": 6050376, "category_id": 1, "iscrowd": 0, "bbox": [444, 265, 22, 52], "area": 419}, {"id": 9472146, "category_id": 1, "iscrowd": 0, "bbox": [125, 271, 16, 61], "area": 391}, {"id": 7565695, "category_id": 1, "iscrowd": 0, "bbox": [168, 259, 10, 18], "area": 88}, {"id": 9011071, "category_id": 1, "iscrowd": 0, "bbox": [482, 252, 6, 19], "area": 76}, {"id": 4209462, "category_id": 1, "iscrowd": 0, "bbox": [555, 267, 70, 117], "area": 3766}, {"id": 4546150, "category_id": 1, "iscrowd": 0, "bbox": [407, 254, 11, 31], "area": 202}, {"id": 6773848, "category_id": 1, "iscrowd": 0, "bbox": [415, 265, 14, 25], "area": 146}, {"id": 6841444, "category_id": 1, "iscrowd": 1, "bbox": [5, 247, 635, 82], "area": 11344}, {"id": 4276029, "category_id": 2, "iscrowd": 0, "bbox": [320, 281, 33, 31], "area": 511}, {"id": 11775915, "category_id": 3, "iscrowd": 0, "bbox": [608, 247, 8, 10], "area": 57}, {"id": 11051155, "category_id": 3, "iscrowd": 0, "bbox": [580, 248, 21, 12], "area": 195}, {"id": 3224888, "category_id": 19, "iscrowd": 0, "bbox": [455, 335, 27, 69], "area": 1126}, {"id": 2303018, "category_id": 19, "iscrowd": 0, "bbox": [486, 292, 76, 149], "area": 5881}, {"id": 11657176, "category_id": 28, "iscrowd": 0, "bbox": [198, 258, 26, 9], "area": 151}, {"id": 12503979, "category_id": 28, "iscrowd": 0, "bbox": [425, 241, 44, 11], "area": 237}, {"id": 15394790, "category_id": 28, "iscrowd": 0, "bbox": [0, 248, 43, 19], "area": 549}, {"id": 15651254, "category_id": 28, "iscrowd": 0, "bbox": [97, 254, 44, 15], "area": 308}, {"id": 14015698, "category_id": 28, "iscrowd": 0, "bbox": [19, 248, 75, 39], "area": 696}, {"id": 12565914, "category_id": 28, "iscrowd": 0, "bbox": [467, 239, 34, 8], "area": 129}, {"id": 4140715, "category_id": 31, "iscrowd": 0, "bbox": [122, 283, 16, 19], "area": 192}, {"id": 5918788, "category_id": 31, "iscrowd": 0, "bbox": [455, 279, 5, 13], "area": 44}, {"id": 6052696, "category_id": 112, "iscrowd": 0, "bbox": [0, 266, 57, 26], "area": 576}, {"id": 4739922, "category_id": 125, "iscrowd": 0, "bbox": [360, 316, 21, 20], "area": 282}, {"id": 4412744, "category_id": 184, "iscrowd": 0, "bbox": [181, 0, 459, 344], "area": 82364}, {"id": 16377285, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 557, 107], "area": 19841}, {"id": 9605261, "category_id": 191, "iscrowd": 0, "bbox": [0, 253, 640, 227], "area": 103385}, {"id": 9604227, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 522, 290], "area": 66656}], "file_name": "000000546823.png", "image_id": 546823}, {"segments_info": [{"id": 3552719, "category_id": 87, "iscrowd": 0, "bbox": [327, 2, 313, 478], "area": 56045}, {"id": 14477293, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 164807}], "file_name": "000000546826.png", "image_id": 546826}, {"segments_info": [{"id": 6577758, "category_id": 15, "iscrowd": 0, "bbox": [119, 144, 350, 259], "area": 44371}, {"id": 12499130, "category_id": 18, "iscrowd": 0, "bbox": [209, 148, 84, 141], "area": 8708}, {"id": 5264463, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 323], "area": 124034}, {"id": 4147275, "category_id": 193, "iscrowd": 0, "bbox": [113, 239, 527, 186], "area": 57104}, {"id": 7765639, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 340, 425], "area": 37327}], "file_name": "000000546829.png", "image_id": 546829}, {"segments_info": [{"id": 4074289, "category_id": 1, "iscrowd": 0, "bbox": [420, 83, 23, 69], "area": 550}, {"id": 3874866, "category_id": 1, "iscrowd": 0, "bbox": [252, 80, 22, 89], "area": 1091}, {"id": 6701128, "category_id": 1, "iscrowd": 0, "bbox": [408, 81, 24, 69], "area": 990}, {"id": 8608865, "category_id": 1, "iscrowd": 0, "bbox": [391, 90, 18, 63], "area": 322}, {"id": 2301751, "category_id": 1, "iscrowd": 0, "bbox": [337, 85, 10, 10], "area": 62}, {"id": 3878729, "category_id": 1, "iscrowd": 0, "bbox": [607, 84, 33, 56], "area": 1178}, {"id": 1904421, "category_id": 1, "iscrowd": 0, "bbox": [303, 85, 12, 24], "area": 182}, {"id": 2364457, "category_id": 1, "iscrowd": 0, "bbox": [239, 86, 30, 81], "area": 690}, {"id": 2035490, "category_id": 1, "iscrowd": 0, "bbox": [283, 76, 25, 78], "area": 1115}, {"id": 8084078, "category_id": 1, "iscrowd": 0, "bbox": [314, 76, 31, 54], "area": 1032}, {"id": 4735053, "category_id": 32, "iscrowd": 0, "bbox": [615, 104, 12, 26], "area": 124}, {"id": 4935781, "category_id": 62, "iscrowd": 0, "bbox": [109, 147, 63, 69], "area": 3186}, {"id": 4998741, "category_id": 62, "iscrowd": 0, "bbox": [454, 132, 43, 71], "area": 1568}, {"id": 6911108, "category_id": 62, "iscrowd": 0, "bbox": [610, 147, 30, 88], "area": 1359}, {"id": 10526912, "category_id": 62, "iscrowd": 0, "bbox": [146, 268, 89, 89], "area": 3052}, {"id": 2304840, "category_id": 62, "iscrowd": 0, "bbox": [508, 125, 23, 20], "area": 375}, {"id": 12241376, "category_id": 62, "iscrowd": 0, "bbox": [0, 163, 43, 77], "area": 2003}, {"id": 5130361, "category_id": 62, "iscrowd": 0, "bbox": [288, 129, 75, 43], "area": 2001}, {"id": 6446436, "category_id": 62, "iscrowd": 0, "bbox": [631, 181, 9, 12], "area": 87}, {"id": 4733013, "category_id": 62, "iscrowd": 0, "bbox": [479, 133, 95, 138], "area": 8759}, {"id": 5858679, "category_id": 62, "iscrowd": 0, "bbox": [5, 236, 327, 236], "area": 47839}, {"id": 2630716, "category_id": 62, "iscrowd": 0, "bbox": [434, 125, 25, 61], "area": 827}, {"id": 4530804, "category_id": 63, "iscrowd": 0, "bbox": [161, 171, 263, 120], "area": 16332}, {"id": 2296897, "category_id": 63, "iscrowd": 0, "bbox": [499, 327, 141, 145], "area": 16843}, {"id": 4865094, "category_id": 67, "iscrowd": 0, "bbox": [456, 142, 55, 11], "area": 177}, {"id": 12298669, "category_id": 86, "iscrowd": 0, "bbox": [221, 93, 24, 52], "area": 829}, {"id": 7627625, "category_id": 86, "iscrowd": 0, "bbox": [330, 205, 50, 23], "area": 581}, {"id": 9999523, "category_id": 86, "iscrowd": 0, "bbox": [376, 96, 29, 66], "area": 1071}, {"id": 1840175, "category_id": 109, "iscrowd": 0, "bbox": [283, 47, 59, 56], "area": 1303}, {"id": 1115412, "category_id": 112, "iscrowd": 0, "bbox": [97, 11, 74, 138], "area": 5977}, {"id": 9810383, "category_id": 130, "iscrowd": 0, "bbox": [199, 33, 412, 77], "area": 5829}, {"id": 3484980, "category_id": 141, "iscrowd": 0, "bbox": [298, 198, 95, 24], "area": 746}, {"id": 14601938, "category_id": 181, "iscrowd": 0, "bbox": [303, 51, 11, 36], "area": 237}, {"id": 2562357, "category_id": 186, "iscrowd": 0, "bbox": [264, 0, 153, 25], "area": 1731}, {"id": 4800592, "category_id": 189, "iscrowd": 0, "bbox": [48, 136, 592, 267], "area": 22819}, {"id": 7103081, "category_id": 190, "iscrowd": 0, "bbox": [68, 166, 562, 93], "area": 7145}, {"id": 7237512, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 219], "area": 45131}, {"id": 10134201, "category_id": 200, "iscrowd": 0, "bbox": [0, 143, 640, 335], "area": 58011}], "file_name": "000000546964.png", "image_id": 546964}, {"segments_info": [{"id": 6580935, "category_id": 1, "iscrowd": 0, "bbox": [47, 94, 375, 273], "area": 39107}, {"id": 4736862, "category_id": 4, "iscrowd": 0, "bbox": [24, 123, 463, 248], "area": 30403}, {"id": 9738395, "category_id": 47, "iscrowd": 0, "bbox": [36, 236, 13, 14], "area": 160}, {"id": 2895405, "category_id": 107, "iscrowd": 0, "bbox": [0, 190, 89, 136], "area": 7149}, {"id": 6056304, "category_id": 109, "iscrowd": 0, "bbox": [342, 0, 56, 161], "area": 5634}, {"id": 658964, "category_id": 112, "iscrowd": 0, "bbox": [148, 72, 118, 117], "area": 9038}, {"id": 2500902, "category_id": 130, "iscrowd": 0, "bbox": [101, 0, 39, 19], "area": 539}, {"id": 1449762, "category_id": 176, "iscrowd": 0, "bbox": [0, 153, 71, 39], "area": 1718}, {"id": 1184273, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 290, 20], "area": 3086}, {"id": 330516, "category_id": 188, "iscrowd": 0, "bbox": [0, 48, 82, 110], "area": 6565}, {"id": 329742, "category_id": 190, "iscrowd": 0, "bbox": [111, 311, 59, 64], "area": 2163}, {"id": 4927510, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 64878}], "file_name": "000000546976.png", "image_id": 546976}, {"segments_info": [{"id": 15048041, "category_id": 72, "iscrowd": 0, "bbox": [155, 157, 147, 129], "area": 16788}, {"id": 13209694, "category_id": 72, "iscrowd": 0, "bbox": [431, 140, 122, 117], "area": 12117}, {"id": 7030335, "category_id": 73, "iscrowd": 0, "bbox": [27, 224, 126, 134], "area": 13979}, {"id": 10988216, "category_id": 74, "iscrowd": 0, "bbox": [320, 291, 32, 23], "area": 512}, {"id": 11969708, "category_id": 74, "iscrowd": 0, "bbox": [587, 263, 30, 17], "area": 349}, {"id": 14931672, "category_id": 76, "iscrowd": 0, "bbox": [158, 278, 174, 69], "area": 7549}, {"id": 4141621, "category_id": 76, "iscrowd": 0, "bbox": [582, 385, 33, 33], "area": 770}, {"id": 11578806, "category_id": 76, "iscrowd": 0, "bbox": [454, 254, 140, 49], "area": 3981}, {"id": 5398133, "category_id": 100, "iscrowd": 0, "bbox": [505, 358, 135, 122], "area": 9238}, {"id": 4344159, "category_id": 189, "iscrowd": 0, "bbox": [9, 216, 631, 264], "area": 45227}, {"id": 6774112, "category_id": 190, "iscrowd": 0, "bbox": [34, 423, 606, 57], "area": 6147}, {"id": 13285312, "category_id": 195, "iscrowd": 0, "bbox": [161, 13, 331, 66], "area": 18654}, {"id": 12697793, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 109066}], "file_name": "000000547144.png", "image_id": 547144}, {"segments_info": [{"id": 6770519, "category_id": 1, "iscrowd": 0, "bbox": [100, 25, 370, 413], "area": 81768}, {"id": 5201493, "category_id": 11, "iscrowd": 0, "bbox": [465, 161, 175, 202], "area": 21530}, {"id": 6902410, "category_id": 31, "iscrowd": 0, "bbox": [436, 422, 67, 52], "area": 2201}, {"id": 7827562, "category_id": 47, "iscrowd": 0, "bbox": [165, 380, 42, 54], "area": 1427}, {"id": 5455482, "category_id": 77, "iscrowd": 0, "bbox": [171, 429, 37, 32], "area": 606}, {"id": 16242356, "category_id": 84, "iscrowd": 0, "bbox": [123, 452, 72, 28], "area": 1088}, {"id": 15591391, "category_id": 84, "iscrowd": 0, "bbox": [121, 169, 154, 141], "area": 9764}, {"id": 9606806, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 433, 480], "area": 100192}, {"id": 5659232, "category_id": 184, "iscrowd": 0, "bbox": [172, 60, 389, 420], "area": 8462}, {"id": 4150097, "category_id": 193, "iscrowd": 0, "bbox": [175, 0, 465, 480], "area": 57109}], "file_name": "000000547336.png", "image_id": 547336}, {"segments_info": [{"id": 7379605, "category_id": 20, "iscrowd": 0, "bbox": [493, 1, 96, 10], "area": 710}, {"id": 8300204, "category_id": 20, "iscrowd": 0, "bbox": [101, 32, 345, 183], "area": 35881}, {"id": 8562603, "category_id": 20, "iscrowd": 0, "bbox": [136, 174, 452, 234], "area": 52139}, {"id": 2068093, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 183182}], "file_name": "000000547383.png", "image_id": 547383}, {"segments_info": [{"id": 12244953, "category_id": 18, "iscrowd": 0, "bbox": [345, 124, 101, 127], "area": 4959}, {"id": 8625317, "category_id": 18, "iscrowd": 0, "bbox": [459, 200, 181, 280], "area": 21404}, {"id": 6650492, "category_id": 18, "iscrowd": 0, "bbox": [191, 229, 107, 224], "area": 11856}, {"id": 5077390, "category_id": 18, "iscrowd": 0, "bbox": [280, 221, 68, 76], "area": 2630}, {"id": 1847424, "category_id": 34, "iscrowd": 0, "bbox": [466, 277, 33, 44], "area": 992}, {"id": 2702901, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 471, 56], "area": 11727}, {"id": 6656390, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 110], "area": 39517}, {"id": 5216373, "category_id": 193, "iscrowd": 0, "bbox": [0, 51, 640, 429], "area": 213583}], "file_name": "000000547502.png", "image_id": 547502}, {"segments_info": [{"id": 4276550, "category_id": 23, "iscrowd": 0, "bbox": [274, 133, 222, 247], "area": 43581}, {"id": 4934730, "category_id": 178, "iscrowd": 0, "bbox": [0, 386, 347, 39], "area": 7724}, {"id": 4213060, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 275], "area": 58708}, {"id": 5000528, "category_id": 193, "iscrowd": 0, "bbox": [0, 191, 640, 234], "area": 78902}, {"id": 3421493, "category_id": 194, "iscrowd": 0, "bbox": [401, 0, 239, 277], "area": 26636}, {"id": 6577232, "category_id": 198, "iscrowd": 0, "bbox": [260, 0, 380, 290], "area": 3496}], "file_name": "000000547519.png", "image_id": 547519}, {"segments_info": [{"id": 1917807, "category_id": 44, "iscrowd": 0, "bbox": [88, 409, 12, 34], "area": 347}, {"id": 2380677, "category_id": 44, "iscrowd": 0, "bbox": [77, 411, 13, 35], "area": 249}, {"id": 3830439, "category_id": 70, "iscrowd": 0, "bbox": [99, 498, 84, 134], "area": 8138}, {"id": 9033460, "category_id": 81, "iscrowd": 0, "bbox": [0, 526, 12, 45], "area": 256}, {"id": 8048112, "category_id": 107, "iscrowd": 0, "bbox": [0, 408, 103, 232], "area": 10874}, {"id": 3631517, "category_id": 109, "iscrowd": 0, "bbox": [251, 164, 127, 423], "area": 42479}, {"id": 5873617, "category_id": 112, "iscrowd": 0, "bbox": [389, 0, 38, 640], "area": 14543}, {"id": 8039378, "category_id": 130, "iscrowd": 0, "bbox": [183, 0, 57, 37], "area": 1651}, {"id": 6660811, "category_id": 133, "iscrowd": 0, "bbox": [0, 133, 23, 213], "area": 3554}, {"id": 4626384, "category_id": 168, "iscrowd": 0, "bbox": [358, 319, 53, 233], "area": 7070}, {"id": 13359066, "category_id": 181, "iscrowd": 0, "bbox": [85, 115, 206, 68], "area": 10396}, {"id": 8039634, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 383, 94], "area": 26066}, {"id": 2180747, "category_id": 188, "iscrowd": 0, "bbox": [13, 485, 96, 155], "area": 7923}, {"id": 3566755, "category_id": 190, "iscrowd": 0, "bbox": [102, 554, 275, 86], "area": 15854}, {"id": 5808339, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 414, 640], "area": 96646}], "file_name": "000000547816.png", "image_id": 547816}, {"segments_info": [{"id": 5397380, "category_id": 1, "iscrowd": 0, "bbox": [45, 1, 595, 413], "area": 142392}, {"id": 4478070, "category_id": 1, "iscrowd": 0, "bbox": [0, 1, 98, 208], "area": 11351}, {"id": 8171736, "category_id": 59, "iscrowd": 0, "bbox": [0, 391, 68, 66], "area": 2305}, {"id": 9359088, "category_id": 59, "iscrowd": 0, "bbox": [57, 418, 407, 212], "area": 45494}, {"id": 16316921, "category_id": 67, "iscrowd": 0, "bbox": [473, 408, 167, 132], "area": 12088}, {"id": 14673124, "category_id": 176, "iscrowd": 0, "bbox": [42, 0, 139, 84], "area": 5037}, {"id": 7433571, "category_id": 188, "iscrowd": 0, "bbox": [37, 201, 124, 58], "area": 3522}, {"id": 10988201, "category_id": 189, "iscrowd": 0, "bbox": [0, 156, 242, 187], "area": 9555}, {"id": 7370869, "category_id": 190, "iscrowd": 0, "bbox": [0, 272, 524, 164], "area": 7783}, {"id": 14743034, "category_id": 196, "iscrowd": 0, "bbox": [140, 395, 183, 90], "area": 11007}, {"id": 13555662, "category_id": 199, "iscrowd": 0, "bbox": [216, 0, 424, 348], "area": 35731}], "file_name": "000000547854.png", "image_id": 547854}, {"segments_info": [{"id": 3287845, "category_id": 1, "iscrowd": 0, "bbox": [295, 137, 49, 94], "area": 1870}, {"id": 4208179, "category_id": 1, "iscrowd": 0, "bbox": [57, 130, 46, 84], "area": 1201}, {"id": 5788235, "category_id": 1, "iscrowd": 0, "bbox": [184, 129, 20, 44], "area": 275}, {"id": 3026738, "category_id": 1, "iscrowd": 0, "bbox": [194, 126, 52, 101], "area": 1926}, {"id": 3160389, "category_id": 19, "iscrowd": 0, "bbox": [151, 159, 133, 118], "area": 6444}, {"id": 2764076, "category_id": 19, "iscrowd": 0, "bbox": [273, 178, 101, 106], "area": 4628}, {"id": 3489871, "category_id": 19, "iscrowd": 0, "bbox": [13, 173, 123, 97], "area": 5582}, {"id": 9083029, "category_id": 154, "iscrowd": 0, "bbox": [0, 178, 640, 249], "area": 134589}, {"id": 9736058, "category_id": 155, "iscrowd": 0, "bbox": [0, 117, 640, 89], "area": 30547}, {"id": 12759441, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 139], "area": 84983}], "file_name": "000000547886.png", "image_id": 547886}, {"segments_info": [{"id": 5462883, "category_id": 1, "iscrowd": 0, "bbox": [0, 113, 159, 310], "area": 27701}, {"id": 2434606, "category_id": 1, "iscrowd": 0, "bbox": [403, 153, 103, 274], "area": 17528}, {"id": 3241587, "category_id": 1, "iscrowd": 0, "bbox": [215, 100, 208, 323], "area": 41155}, {"id": 3487810, "category_id": 1, "iscrowd": 0, "bbox": [250, 153, 94, 225], "area": 3065}, {"id": 5810828, "category_id": 37, "iscrowd": 0, "bbox": [523, 346, 12, 9], "area": 65}, {"id": 2782281, "category_id": 37, "iscrowd": 0, "bbox": [502, 367, 15, 15], "area": 187}, {"id": 2254666, "category_id": 37, "iscrowd": 0, "bbox": [531, 382, 15, 16], "area": 182}, {"id": 4758903, "category_id": 37, "iscrowd": 0, "bbox": [540, 356, 12, 14], "area": 98}, {"id": 4758910, "category_id": 37, "iscrowd": 0, "bbox": [151, 208, 7, 8], "area": 46}, {"id": 4953466, "category_id": 37, "iscrowd": 0, "bbox": [528, 351, 15, 17], "area": 204}, {"id": 2848076, "category_id": 37, "iscrowd": 0, "bbox": [518, 362, 17, 15], "area": 197}, {"id": 4494962, "category_id": 37, "iscrowd": 0, "bbox": [501, 354, 12, 14], "area": 135}, {"id": 7974555, "category_id": 37, "iscrowd": 0, "bbox": [544, 355, 11, 12], "area": 53}, {"id": 3703900, "category_id": 37, "iscrowd": 0, "bbox": [536, 367, 13, 16], "area": 175}, {"id": 2382914, "category_id": 37, "iscrowd": 0, "bbox": [504, 382, 12, 12], "area": 121}, {"id": 5548680, "category_id": 37, "iscrowd": 0, "bbox": [514, 350, 14, 15], "area": 174}, {"id": 2515007, "category_id": 37, "iscrowd": 0, "bbox": [519, 379, 13, 13], "area": 123}, {"id": 2366491, "category_id": 43, "iscrowd": 0, "bbox": [406, 223, 60, 133], "area": 1358}, {"id": 4077625, "category_id": 43, "iscrowd": 0, "bbox": [26, 334, 166, 28], "area": 1131}, {"id": 7236195, "category_id": 138, "iscrowd": 0, "bbox": [12, 235, 628, 193], "area": 22538}, {"id": 8088915, "category_id": 145, "iscrowd": 0, "bbox": [0, 250, 640, 178], "area": 28807}, {"id": 3818817, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 123], "area": 64210}, {"id": 4014657, "category_id": 185, "iscrowd": 0, "bbox": [0, 110, 640, 155], "area": 52597}, {"id": 15920875, "category_id": 187, "iscrowd": 0, "bbox": [41, 0, 456, 40], "area": 10239}], "file_name": "000000548246.png", "image_id": 548246}, {"segments_info": [{"id": 9021361, "category_id": 20, "iscrowd": 0, "bbox": [237, 439, 32, 18], "area": 399}, {"id": 6851217, "category_id": 20, "iscrowd": 0, "bbox": [364, 434, 25, 22], "area": 347}, {"id": 6717573, "category_id": 20, "iscrowd": 0, "bbox": [258, 439, 19, 20], "area": 128}, {"id": 8894141, "category_id": 20, "iscrowd": 0, "bbox": [469, 404, 13, 16], "area": 159}, {"id": 3885381, "category_id": 20, "iscrowd": 0, "bbox": [204, 459, 37, 20], "area": 553}, {"id": 9944265, "category_id": 20, "iscrowd": 0, "bbox": [129, 450, 23, 28], "area": 503}, {"id": 3425605, "category_id": 20, "iscrowd": 0, "bbox": [243, 451, 29, 29], "area": 474}, {"id": 7975602, "category_id": 20, "iscrowd": 0, "bbox": [489, 403, 21, 15], "area": 248}, {"id": 11324380, "category_id": 20, "iscrowd": 0, "bbox": [539, 404, 16, 11], "area": 133}, {"id": 6130058, "category_id": 20, "iscrowd": 0, "bbox": [153, 440, 32, 31], "area": 760}, {"id": 5929853, "category_id": 20, "iscrowd": 0, "bbox": [565, 410, 23, 20], "area": 305}, {"id": 4280915, "category_id": 20, "iscrowd": 0, "bbox": [393, 447, 35, 33], "area": 705}, {"id": 4675415, "category_id": 20, "iscrowd": 0, "bbox": [596, 412, 29, 17], "area": 294}, {"id": 2314056, "category_id": 184, "iscrowd": 0, "bbox": [0, 334, 640, 49], "area": 18268}, {"id": 265476, "category_id": 185, "iscrowd": 0, "bbox": [81, 420, 559, 60], "area": 12225}, {"id": 14200192, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 294], "area": 143862}, {"id": 4410185, "category_id": 192, "iscrowd": 0, "bbox": [0, 174, 640, 192], "area": 78514}, {"id": 2260574, "category_id": 193, "iscrowd": 0, "bbox": [0, 337, 640, 143], "area": 49062}], "file_name": "000000548267.png", "image_id": 548267}, {"segments_info": [{"id": 3947321, "category_id": 1, "iscrowd": 0, "bbox": [213, 0, 113, 123], "area": 7584}, {"id": 4078132, "category_id": 1, "iscrowd": 0, "bbox": [110, 0, 114, 184], "area": 14783}, {"id": 5197383, "category_id": 1, "iscrowd": 0, "bbox": [364, 3, 152, 181], "area": 19989}, {"id": 5525320, "category_id": 1, "iscrowd": 0, "bbox": [546, 1, 94, 247], "area": 14096}, {"id": 8485524, "category_id": 1, "iscrowd": 0, "bbox": [186, 31, 347, 468], "area": 58409}, {"id": 4739904, "category_id": 15, "iscrowd": 0, "bbox": [397, 184, 243, 163], "area": 14247}, {"id": 5200717, "category_id": 15, "iscrowd": 0, "bbox": [44, 132, 280, 228], "area": 22472}, {"id": 5457724, "category_id": 31, "iscrowd": 0, "bbox": [211, 116, 85, 67], "area": 2656}, {"id": 9000766, "category_id": 39, "iscrowd": 0, "bbox": [219, 67, 61, 112], "area": 2005}, {"id": 3947317, "category_id": 40, "iscrowd": 0, "bbox": [186, 166, 48, 61], "area": 1570}, {"id": 8026828, "category_id": 44, "iscrowd": 0, "bbox": [102, 127, 24, 59], "area": 1082}, {"id": 9938358, "category_id": 145, "iscrowd": 0, "bbox": [0, 334, 640, 242], "area": 116099}, {"id": 6317402, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 384], "area": 73943}], "file_name": "000000548339.png", "image_id": 548339}, {"segments_info": [{"id": 1009573, "category_id": 52, "iscrowd": 0, "bbox": [229, 81, 411, 300], "area": 23761}, {"id": 5609153, "category_id": 52, "iscrowd": 0, "bbox": [352, 0, 231, 298], "area": 42697}, {"id": 4433108, "category_id": 52, "iscrowd": 0, "bbox": [452, 3, 188, 203], "area": 22225}, {"id": 1838958, "category_id": 53, "iscrowd": 0, "bbox": [59, 7, 303, 165], "area": 40337}, {"id": 3218326, "category_id": 53, "iscrowd": 0, "bbox": [1, 57, 73, 174], "area": 8886}, {"id": 2829158, "category_id": 53, "iscrowd": 0, "bbox": [36, 64, 95, 133], "area": 3106}, {"id": 8831672, "category_id": 53, "iscrowd": 0, "bbox": [2, 189, 254, 236], "area": 52091}, {"id": 2699649, "category_id": 53, "iscrowd": 0, "bbox": [79, 167, 224, 166], "area": 10688}, {"id": 5019805, "category_id": 122, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 55061}, {"id": 10134966, "category_id": 189, "iscrowd": 0, "bbox": [529, 357, 111, 68], "area": 5629}], "file_name": "000000548506.png", "image_id": 548506}, {"segments_info": [{"id": 9404018, "category_id": 1, "iscrowd": 0, "bbox": [442, 280, 23, 31], "area": 335}, {"id": 9465254, "category_id": 1, "iscrowd": 0, "bbox": [19, 172, 3, 7], "area": 15}, {"id": 7167850, "category_id": 1, "iscrowd": 0, "bbox": [15, 171, 4, 7], "area": 16}, {"id": 12835816, "category_id": 42, "iscrowd": 0, "bbox": [435, 308, 43, 8], "area": 135}, {"id": 4535859, "category_id": 95, "iscrowd": 0, "bbox": [0, 171, 33, 86], "area": 1433}, {"id": 10194555, "category_id": 155, "iscrowd": 0, "bbox": [0, 189, 640, 238], "area": 142999}, {"id": 13747645, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 203], "area": 128276}], "file_name": "000000548524.png", "image_id": 548524}, {"segments_info": [{"id": 9999527, "category_id": 1, "iscrowd": 0, "bbox": [3, 29, 330, 392], "area": 36521}, {"id": 7572911, "category_id": 58, "iscrowd": 0, "bbox": [0, 0, 625, 426], "area": 169771}, {"id": 12563890, "category_id": 195, "iscrowd": 0, "bbox": [290, 0, 296, 426], "area": 22538}], "file_name": "000000548555.png", "image_id": 548555}, {"segments_info": [{"id": 4141610, "category_id": 1, "iscrowd": 0, "bbox": [108, 0, 76, 211], "area": 11461}, {"id": 1842210, "category_id": 1, "iscrowd": 0, "bbox": [246, 1, 156, 142], "area": 7840}, {"id": 10463424, "category_id": 1, "iscrowd": 0, "bbox": [236, 72, 165, 298], "area": 16572}, {"id": 8490664, "category_id": 1, "iscrowd": 0, "bbox": [326, 64, 205, 311], "area": 20140}, {"id": 8028557, "category_id": 1, "iscrowd": 0, "bbox": [176, 0, 86, 210], "area": 11929}, {"id": 8155757, "category_id": 1, "iscrowd": 0, "bbox": [510, 17, 46, 111], "area": 2689}, {"id": 3681060, "category_id": 15, "iscrowd": 0, "bbox": [165, 108, 395, 258], "area": 29272}, {"id": 4271909, "category_id": 16, "iscrowd": 0, "bbox": [168, 345, 67, 35], "area": 1295}, {"id": 6969416, "category_id": 16, "iscrowd": 0, "bbox": [6, 362, 55, 47], "area": 1292}, {"id": 3681572, "category_id": 27, "iscrowd": 0, "bbox": [534, 55, 11, 40], "area": 375}, {"id": 1643538, "category_id": 31, "iscrowd": 0, "bbox": [201, 24, 39, 59], "area": 219}, {"id": 7765434, "category_id": 31, "iscrowd": 0, "bbox": [372, 142, 111, 97], "area": 601}, {"id": 2299406, "category_id": 31, "iscrowd": 0, "bbox": [97, 104, 33, 33], "area": 797}, {"id": 7044767, "category_id": 31, "iscrowd": 0, "bbox": [252, 177, 79, 34], "area": 2005}, {"id": 3945879, "category_id": 64, "iscrowd": 0, "bbox": [581, 220, 41, 30], "area": 801}, {"id": 3222145, "category_id": 64, "iscrowd": 0, "bbox": [16, 216, 171, 33], "area": 4304}, {"id": 5723774, "category_id": 119, "iscrowd": 0, "bbox": [0, 210, 640, 60], "area": 2349}, {"id": 3877929, "category_id": 144, "iscrowd": 0, "bbox": [16, 66, 145, 150], "area": 9641}, {"id": 12764370, "category_id": 149, "iscrowd": 0, "bbox": [574, 80, 66, 104], "area": 4431}, {"id": 2894375, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 242], "area": 30818}, {"id": 12830932, "category_id": 191, "iscrowd": 0, "bbox": [0, 47, 640, 380], "area": 44671}, {"id": 5465433, "category_id": 193, "iscrowd": 0, "bbox": [550, 189, 90, 50], "area": 2267}, {"id": 8617073, "category_id": 197, "iscrowd": 0, "bbox": [38, 13, 561, 167], "area": 10030}, {"id": 2695458, "category_id": 199, "iscrowd": 0, "bbox": [0, 115, 640, 256], "area": 49545}], "file_name": "000000548780.png", "image_id": 548780}, {"segments_info": [{"id": 1776931, "category_id": 1, "iscrowd": 0, "bbox": [316, 119, 156, 173], "area": 11840}, {"id": 3094328, "category_id": 42, "iscrowd": 0, "bbox": [250, 113, 128, 191], "area": 8911}, {"id": 9999241, "category_id": 155, "iscrowd": 0, "bbox": [0, 74, 640, 230], "area": 119526}, {"id": 13945530, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 94], "area": 53783}], "file_name": "000000549055.png", "image_id": 549055}, {"segments_info": [{"id": 3684969, "category_id": 88, "iscrowd": 0, "bbox": [185, 228, 99, 77], "area": 4586}, {"id": 14332069, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 434], "area": 168732}], "file_name": "000000549136.png", "image_id": 549136}, {"segments_info": [{"id": 1925717, "category_id": 56, "iscrowd": 0, "bbox": [303, 414, 51, 43], "area": 1252}, {"id": 3567965, "category_id": 56, "iscrowd": 0, "bbox": [133, 282, 120, 123], "area": 8773}, {"id": 3767160, "category_id": 56, "iscrowd": 0, "bbox": [281, 344, 70, 70], "area": 3494}, {"id": 6469809, "category_id": 56, "iscrowd": 0, "bbox": [356, 265, 31, 22], "area": 506}, {"id": 2976866, "category_id": 56, "iscrowd": 0, "bbox": [341, 260, 57, 56], "area": 824}, {"id": 1336673, "category_id": 56, "iscrowd": 0, "bbox": [395, 398, 31, 38], "area": 621}, {"id": 15920363, "category_id": 67, "iscrowd": 0, "bbox": [1, 3, 425, 630], "area": 118639}, {"id": 14274771, "category_id": 189, "iscrowd": 0, "bbox": [0, 357, 426, 283], "area": 4441}, {"id": 6984619, "category_id": 196, "iscrowd": 0, "bbox": [132, 239, 294, 276], "area": 45393}], "file_name": "000000549167.png", "image_id": 549167}, {"segments_info": [{"id": 1841181, "category_id": 1, "iscrowd": 0, "bbox": [442, 35, 38, 76], "area": 1759}, {"id": 789258, "category_id": 1, "iscrowd": 0, "bbox": [248, 3, 139, 224], "area": 17247}, {"id": 3617847, "category_id": 1, "iscrowd": 0, "bbox": [392, 9, 88, 208], "area": 5121}, {"id": 7627614, "category_id": 1, "iscrowd": 0, "bbox": [359, 33, 121, 203], "area": 9154}, {"id": 920859, "category_id": 15, "iscrowd": 0, "bbox": [361, 146, 57, 80], "area": 1003}, {"id": 9344413, "category_id": 18, "iscrowd": 0, "bbox": [1, 87, 445, 394], "area": 103233}, {"id": 4999236, "category_id": 41, "iscrowd": 0, "bbox": [1, 345, 479, 175], "area": 32388}, {"id": 2569818, "category_id": 84, "iscrowd": 0, "bbox": [350, 57, 57, 41], "area": 1048}, {"id": 2565946, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 480, 150], "area": 3994}, {"id": 6115917, "category_id": 184, "iscrowd": 0, "bbox": [143, 0, 97, 108], "area": 7932}, {"id": 3748150, "category_id": 187, "iscrowd": 0, "bbox": [217, 0, 37, 39], "area": 871}, {"id": 4802630, "category_id": 191, "iscrowd": 0, "bbox": [0, 216, 480, 424], "area": 98224}, {"id": 1842720, "category_id": 197, "iscrowd": 0, "bbox": [370, 0, 70, 50], "area": 1714}, {"id": 2565152, "category_id": 199, "iscrowd": 0, "bbox": [89, 0, 81, 104], "area": 4235}], "file_name": "000000549220.png", "image_id": 549220}, {"segments_info": [{"id": 5262431, "category_id": 1, "iscrowd": 0, "bbox": [583, 199, 5, 8], "area": 35}, {"id": 3355445, "category_id": 1, "iscrowd": 0, "bbox": [188, 88, 209, 294], "area": 23968}, {"id": 5924465, "category_id": 1, "iscrowd": 0, "bbox": [520, 187, 7, 17], "area": 52}, {"id": 3748671, "category_id": 1, "iscrowd": 0, "bbox": [551, 188, 22, 44], "area": 450}, {"id": 3748405, "category_id": 1, "iscrowd": 0, "bbox": [530, 195, 15, 12], "area": 103}, {"id": 1841956, "category_id": 1, "iscrowd": 0, "bbox": [593, 188, 32, 44], "area": 507}, {"id": 3682354, "category_id": 1, "iscrowd": 0, "bbox": [575, 197, 8, 10], "area": 59}, {"id": 4342374, "category_id": 1, "iscrowd": 0, "bbox": [510, 187, 11, 19], "area": 142}, {"id": 2762540, "category_id": 1, "iscrowd": 0, "bbox": [621, 194, 19, 38], "area": 303}, {"id": 8748935, "category_id": 1, "iscrowd": 0, "bbox": [450, 179, 19, 26], "area": 338}, {"id": 1974818, "category_id": 1, "iscrowd": 0, "bbox": [591, 192, 15, 18], "area": 131}, {"id": 5921378, "category_id": 1, "iscrowd": 0, "bbox": [434, 164, 46, 89], "area": 1087}, {"id": 5592407, "category_id": 2, "iscrowd": 0, "bbox": [429, 223, 51, 38], "area": 856}, {"id": 4472379, "category_id": 2, "iscrowd": 0, "bbox": [626, 212, 14, 24], "area": 239}, {"id": 4803146, "category_id": 2, "iscrowd": 0, "bbox": [65, 202, 319, 225], "area": 15718}, {"id": 4735564, "category_id": 2, "iscrowd": 0, "bbox": [599, 211, 19, 33], "area": 279}, {"id": 7039326, "category_id": 2, "iscrowd": 0, "bbox": [550, 206, 17, 31], "area": 262}, {"id": 4933190, "category_id": 2, "iscrowd": 0, "bbox": [589, 213, 14, 21], "area": 193}, {"id": 2566183, "category_id": 27, "iscrowd": 0, "bbox": [104, 237, 107, 131], "area": 10453}, {"id": 6395533, "category_id": 92, "iscrowd": 0, "bbox": [508, 205, 19, 18], "area": 297}, {"id": 5663077, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 228], "area": 74594}, {"id": 4153706, "category_id": 185, "iscrowd": 0, "bbox": [0, 167, 432, 82], "area": 14085}, {"id": 16184305, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 177], "area": 40095}, {"id": 6579302, "category_id": 191, "iscrowd": 0, "bbox": [0, 213, 640, 214], "area": 85888}, {"id": 4483699, "category_id": 193, "iscrowd": 0, "bbox": [232, 208, 40, 36], "area": 720}], "file_name": "000000549390.png", "image_id": 549390}, {"segments_info": [{"id": 596517, "category_id": 47, "iscrowd": 0, "bbox": [318, 264, 64, 79], "area": 4037}, {"id": 6646380, "category_id": 72, "iscrowd": 0, "bbox": [326, 9, 297, 329], "area": 79665}, {"id": 5596777, "category_id": 72, "iscrowd": 0, "bbox": [34, 31, 281, 238], "area": 58122}, {"id": 1190462, "category_id": 74, "iscrowd": 0, "bbox": [482, 337, 56, 59], "area": 2704}, {"id": 1322820, "category_id": 76, "iscrowd": 0, "bbox": [57, 347, 403, 111], "area": 34131}, {"id": 3239057, "category_id": 77, "iscrowd": 0, "bbox": [198, 311, 40, 44], "area": 1350}, {"id": 1543618, "category_id": 189, "iscrowd": 0, "bbox": [0, 195, 640, 285], "area": 63535}, {"id": 1533855, "category_id": 195, "iscrowd": 0, "bbox": [86, 0, 554, 374], "area": 7659}, {"id": 3628914, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 215], "area": 21805}], "file_name": "000000549674.png", "image_id": 549674}, {"segments_info": [{"id": 2829387, "category_id": 1, "iscrowd": 0, "bbox": [478, 399, 11, 25], "area": 153}, {"id": 3023653, "category_id": 1, "iscrowd": 0, "bbox": [379, 390, 14, 36], "area": 285}, {"id": 5526098, "category_id": 1, "iscrowd": 0, "bbox": [597, 400, 11, 26], "area": 221}, {"id": 3488098, "category_id": 1, "iscrowd": 0, "bbox": [391, 409, 9, 17], "area": 89}, {"id": 3420503, "category_id": 3, "iscrowd": 0, "bbox": [320, 405, 26, 11], "area": 212}, {"id": 1380914, "category_id": 3, "iscrowd": 0, "bbox": [354, 405, 31, 15], "area": 311}, {"id": 1447241, "category_id": 3, "iscrowd": 0, "bbox": [280, 402, 34, 13], "area": 288}, {"id": 3091803, "category_id": 3, "iscrowd": 0, "bbox": [505, 416, 31, 10], "area": 247}, {"id": 2762826, "category_id": 3, "iscrowd": 0, "bbox": [132, 398, 19, 10], "area": 157}, {"id": 3420501, "category_id": 3, "iscrowd": 0, "bbox": [114, 399, 17, 9], "area": 117}, {"id": 3815007, "category_id": 3, "iscrowd": 0, "bbox": [423, 409, 34, 15], "area": 371}, {"id": 1447231, "category_id": 3, "iscrowd": 0, "bbox": [177, 400, 30, 10], "area": 237}, {"id": 1250120, "category_id": 3, "iscrowd": 0, "bbox": [245, 402, 30, 10], "area": 231}, {"id": 4604768, "category_id": 38, "iscrowd": 0, "bbox": [96, 155, 208, 190], "area": 17984}, {"id": 1583443, "category_id": 185, "iscrowd": 0, "bbox": [0, 393, 640, 33], "area": 8891}, {"id": 11907244, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 359], "area": 191484}, {"id": 2050629, "category_id": 193, "iscrowd": 0, "bbox": [2, 419, 144, 7], "area": 604}, {"id": 1973789, "category_id": 197, "iscrowd": 0, "bbox": [0, 156, 640, 263], "area": 50299}], "file_name": "000000549738.png", "image_id": 549738}, {"segments_info": [{"id": 1645346, "category_id": 1, "iscrowd": 0, "bbox": [38, 190, 5, 20], "area": 78}, {"id": 1579819, "category_id": 1, "iscrowd": 0, "bbox": [10, 197, 5, 5], "area": 18}, {"id": 1842731, "category_id": 1, "iscrowd": 0, "bbox": [81, 160, 213, 398], "area": 35798}, {"id": 2238268, "category_id": 1, "iscrowd": 0, "bbox": [80, 189, 10, 18], "area": 141}, {"id": 922927, "category_id": 1, "iscrowd": 0, "bbox": [337, 290, 39, 103], "area": 1673}, {"id": 1908268, "category_id": 1, "iscrowd": 0, "bbox": [262, 151, 98, 407], "area": 22959}, {"id": 1055290, "category_id": 1, "iscrowd": 0, "bbox": [129, 193, 7, 26], "area": 126}, {"id": 3620688, "category_id": 1, "iscrowd": 0, "bbox": [3, 187, 6, 12], "area": 53}, {"id": 4541759, "category_id": 28, "iscrowd": 0, "bbox": [445, 194, 14, 5], "area": 46}, {"id": 4081977, "category_id": 28, "iscrowd": 0, "bbox": [465, 197, 27, 9], "area": 159}, {"id": 3613983, "category_id": 28, "iscrowd": 0, "bbox": [38, 15, 347, 151], "area": 24167}, {"id": 5925244, "category_id": 28, "iscrowd": 0, "bbox": [59, 187, 21, 6], "area": 84}, {"id": 5199183, "category_id": 28, "iscrowd": 0, "bbox": [488, 197, 18, 6], "area": 82}, {"id": 4937047, "category_id": 28, "iscrowd": 0, "bbox": [331, 191, 17, 7], "area": 75}, {"id": 7107454, "category_id": 28, "iscrowd": 0, "bbox": [398, 190, 17, 6], "area": 55}, {"id": 2965888, "category_id": 28, "iscrowd": 0, "bbox": [458, 180, 29, 15], "area": 193}, {"id": 5857897, "category_id": 28, "iscrowd": 0, "bbox": [507, 178, 13, 23], "area": 152}, {"id": 2308235, "category_id": 28, "iscrowd": 0, "bbox": [324, 178, 18, 5], "area": 62}, {"id": 3687216, "category_id": 28, "iscrowd": 0, "bbox": [513, 195, 18, 8], "area": 97}, {"id": 5594457, "category_id": 28, "iscrowd": 0, "bbox": [363, 187, 17, 9], "area": 101}, {"id": 1393764, "category_id": 28, "iscrowd": 0, "bbox": [249, 191, 22, 7], "area": 100}, {"id": 3885907, "category_id": 28, "iscrowd": 1, "bbox": [311, 183, 329, 24], "area": 734}, {"id": 3618616, "category_id": 149, "iscrowd": 0, "bbox": [0, 326, 640, 232], "area": 69518}, {"id": 1121586, "category_id": 154, "iscrowd": 0, "bbox": [0, 187, 640, 226], "area": 58552}, {"id": 4145480, "category_id": 155, "iscrowd": 0, "bbox": [235, 168, 405, 60], "area": 8382}, {"id": 4278352, "category_id": 178, "iscrowd": 0, "bbox": [614, 207, 26, 35], "area": 526}, {"id": 527633, "category_id": 184, "iscrowd": 0, "bbox": [0, 137, 640, 173], "area": 11923}, {"id": 7303282, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 217], "area": 91151}, {"id": 1776929, "category_id": 191, "iscrowd": 0, "bbox": [0, 305, 640, 187], "area": 23375}], "file_name": "000000549930.png", "image_id": 549930}, {"segments_info": [{"id": 2899804, "category_id": 8, "iscrowd": 0, "bbox": [271, 215, 229, 141], "area": 14807}, {"id": 9543059, "category_id": 8, "iscrowd": 0, "bbox": [85, 281, 103, 22], "area": 1068}, {"id": 7832185, "category_id": 8, "iscrowd": 0, "bbox": [0, 257, 88, 78], "area": 4532}, {"id": 3288611, "category_id": 128, "iscrowd": 0, "bbox": [279, 252, 81, 45], "area": 2982}, {"id": 4539450, "category_id": 149, "iscrowd": 0, "bbox": [0, 362, 53, 13], "area": 361}, {"id": 6388600, "category_id": 151, "iscrowd": 0, "bbox": [27, 252, 30, 7], "area": 137}, {"id": 8355436, "category_id": 184, "iscrowd": 0, "bbox": [11, 69, 489, 213], "area": 33023}, {"id": 14072718, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 239], "area": 77433}, {"id": 3224106, "category_id": 191, "iscrowd": 0, "bbox": [0, 327, 304, 48], "area": 1838}, {"id": 4871774, "category_id": 192, "iscrowd": 0, "bbox": [0, 206, 113, 69], "area": 1850}, {"id": 2832174, "category_id": 193, "iscrowd": 0, "bbox": [0, 332, 500, 43], "area": 11734}, {"id": 4211774, "category_id": 197, "iscrowd": 0, "bbox": [15, 217, 485, 145], "area": 23735}], "file_name": "000000550084.png", "image_id": 550084}, {"segments_info": [{"id": 4027258, "category_id": 47, "iscrowd": 0, "bbox": [74, 316, 184, 228], "area": 21273}, {"id": 5736849, "category_id": 50, "iscrowd": 0, "bbox": [207, 212, 185, 174], "area": 16150}, {"id": 4156788, "category_id": 50, "iscrowd": 0, "bbox": [238, 277, 182, 94], "area": 5530}, {"id": 1652542, "category_id": 67, "iscrowd": 0, "bbox": [0, 452, 361, 188], "area": 25920}, {"id": 2311496, "category_id": 87, "iscrowd": 0, "bbox": [76, 163, 113, 230], "area": 14006}, {"id": 1454132, "category_id": 87, "iscrowd": 0, "bbox": [121, 167, 106, 223], "area": 5976}, {"id": 597545, "category_id": 189, "iscrowd": 0, "bbox": [0, 452, 327, 188], "area": 408}, {"id": 11983837, "category_id": 195, "iscrowd": 0, "bbox": [0, 465, 210, 175], "area": 16761}, {"id": 2518659, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 128904}], "file_name": "000000550322.png", "image_id": 550322}, {"segments_info": [{"id": 6249849, "category_id": 1, "iscrowd": 0, "bbox": [40, 335, 55, 181], "area": 4981}, {"id": 7566191, "category_id": 1, "iscrowd": 0, "bbox": [355, 292, 72, 83], "area": 2738}, {"id": 6379105, "category_id": 1, "iscrowd": 0, "bbox": [3, 325, 65, 315], "area": 6855}, {"id": 3682645, "category_id": 1, "iscrowd": 0, "bbox": [0, 335, 76, 214], "area": 5780}, {"id": 8488580, "category_id": 1, "iscrowd": 0, "bbox": [224, 296, 74, 88], "area": 2759}, {"id": 6055283, "category_id": 6, "iscrowd": 0, "bbox": [101, 134, 379, 414], "area": 131558}, {"id": 4078919, "category_id": 10, "iscrowd": 0, "bbox": [248, 313, 17, 24], "area": 333}, {"id": 9798242, "category_id": 28, "iscrowd": 0, "bbox": [28, 509, 24, 129], "area": 1625}, {"id": 2499626, "category_id": 31, "iscrowd": 0, "bbox": [77, 367, 25, 63], "area": 616}, {"id": 6317932, "category_id": 149, "iscrowd": 0, "bbox": [68, 325, 412, 315], "area": 44281}, {"id": 5723991, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 51, 164], "area": 5762}, {"id": 4740692, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 169, 334], "area": 31494}, {"id": 14934237, "category_id": 187, "iscrowd": 0, "bbox": [65, 0, 415, 291], "area": 53656}, {"id": 9804186, "category_id": 191, "iscrowd": 0, "bbox": [0, 481, 151, 159], "area": 11564}], "file_name": "000000550349.png", "image_id": 550349}, {"segments_info": [{"id": 4416350, "category_id": 86, "iscrowd": 0, "bbox": [144, 323, 170, 303], "area": 38983}, {"id": 2505831, "category_id": 119, "iscrowd": 0, "bbox": [37, 59, 349, 138], "area": 12332}, {"id": 5669749, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 369, 562], "area": 85190}, {"id": 1062438, "category_id": 184, "iscrowd": 0, "bbox": [26, 28, 373, 374], "area": 64796}, {"id": 11713725, "category_id": 189, "iscrowd": 0, "bbox": [0, 542, 416, 98], "area": 16105}, {"id": 7833737, "category_id": 199, "iscrowd": 0, "bbox": [361, 0, 55, 453], "area": 18122}], "file_name": "000000550426.png", "image_id": 550426}, {"segments_info": [{"id": 5001817, "category_id": 48, "iscrowd": 0, "bbox": [224, 8, 116, 193], "area": 7139}, {"id": 2202061, "category_id": 55, "iscrowd": 0, "bbox": [254, 179, 333, 188], "area": 44522}, {"id": 6853046, "category_id": 122, "iscrowd": 0, "bbox": [494, 229, 69, 142], "area": 584}, {"id": 8555412, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 31767}, {"id": 7772831, "category_id": 196, "iscrowd": 0, "bbox": [0, 31, 640, 357], "area": 50932}], "file_name": "000000550471.png", "image_id": 550471}, {"segments_info": [{"id": 1777182, "category_id": 1, "iscrowd": 0, "bbox": [491, 278, 10, 23], "area": 155}, {"id": 3683117, "category_id": 1, "iscrowd": 0, "bbox": [248, 251, 42, 34], "area": 662}, {"id": 5131879, "category_id": 3, "iscrowd": 0, "bbox": [444, 286, 23, 16], "area": 287}, {"id": 3224374, "category_id": 3, "iscrowd": 0, "bbox": [116, 286, 85, 70], "area": 4393}, {"id": 6974566, "category_id": 3, "iscrowd": 0, "bbox": [448, 282, 13, 4], "area": 49}, {"id": 3029840, "category_id": 6, "iscrowd": 0, "bbox": [5, 217, 162, 109], "area": 13919}, {"id": 4802640, "category_id": 6, "iscrowd": 0, "bbox": [192, 59, 250, 352], "area": 78582}, {"id": 3485483, "category_id": 32, "iscrowd": 0, "bbox": [264, 272, 3, 11], "area": 25}, {"id": 5791326, "category_id": 128, "iscrowd": 0, "bbox": [156, 210, 43, 62], "area": 1658}, {"id": 4146249, "category_id": 149, "iscrowd": 0, "bbox": [0, 289, 472, 191], "area": 44182}, {"id": 2106148, "category_id": 171, "iscrowd": 0, "bbox": [524, 215, 116, 166], "area": 11827}, {"id": 3817016, "category_id": 184, "iscrowd": 0, "bbox": [0, 154, 611, 156], "area": 15614}, {"id": 2766904, "category_id": 185, "iscrowd": 0, "bbox": [0, 235, 526, 112], "area": 3504}, {"id": 15197923, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 256], "area": 90626}, {"id": 4805977, "category_id": 191, "iscrowd": 0, "bbox": [0, 293, 640, 187], "area": 32529}, {"id": 6710622, "category_id": 197, "iscrowd": 0, "bbox": [0, 7, 640, 289], "area": 3912}], "file_name": "000000550691.png", "image_id": 550691}, {"segments_info": [{"id": 4349592, "category_id": 1, "iscrowd": 0, "bbox": [5, 3, 634, 470], "area": 171740}, {"id": 3778768, "category_id": 52, "iscrowd": 0, "bbox": [3, 188, 637, 287], "area": 87597}, {"id": 6069188, "category_id": 122, "iscrowd": 0, "bbox": [147, 189, 305, 291], "area": 1970}, {"id": 8290437, "category_id": 128, "iscrowd": 0, "bbox": [502, 81, 138, 152], "area": 13352}, {"id": 3558723, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 41, 244], "area": 4348}, {"id": 16448251, "category_id": 187, "iscrowd": 0, "bbox": [481, 0, 159, 91], "area": 9455}, {"id": 6716548, "category_id": 193, "iscrowd": 0, "bbox": [0, 262, 129, 218], "area": 8386}], "file_name": "000000550714.png", "image_id": 550714}, {"segments_info": [{"id": 10649957, "category_id": 70, "iscrowd": 0, "bbox": [52, 215, 250, 391], "area": 71540}, {"id": 8619414, "category_id": 168, "iscrowd": 0, "bbox": [40, 0, 219, 183], "area": 32787}, {"id": 8490390, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 361, 525], "area": 59312}, {"id": 5199713, "category_id": 190, "iscrowd": 0, "bbox": [0, 446, 347, 194], "area": 26190}], "file_name": "000000550797.png", "image_id": 550797}, {"segments_info": [{"id": 5200474, "category_id": 184, "iscrowd": 0, "bbox": [0, 61, 386, 579], "area": 83729}, {"id": 11502691, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 418, 640], "area": 136142}], "file_name": "000000550939.png", "image_id": 550939}, {"segments_info": [{"id": 9803165, "category_id": 1, "iscrowd": 0, "bbox": [72, 69, 248, 442], "area": 37196}, {"id": 9996928, "category_id": 43, "iscrowd": 0, "bbox": [161, 142, 46, 98], "area": 3004}, {"id": 8165521, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 266557}], "file_name": "000000551215.png", "image_id": 551215}, {"segments_info": [{"id": 8882568, "category_id": 70, "iscrowd": 0, "bbox": [128, 80, 238, 471], "area": 76440}, {"id": 5859180, "category_id": 176, "iscrowd": 0, "bbox": [99, 0, 381, 411], "area": 82513}, {"id": 1054234, "category_id": 190, "iscrowd": 0, "bbox": [0, 380, 480, 260], "area": 86266}, {"id": 3751484, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 131, 558], "area": 53920}], "file_name": "000000551304.png", "image_id": 551304}, {"segments_info": [{"id": 6576993, "category_id": 15, "iscrowd": 0, "bbox": [432, 230, 98, 88], "area": 4200}, {"id": 10989764, "category_id": 15, "iscrowd": 0, "bbox": [586, 89, 23, 5], "area": 75}, {"id": 9945026, "category_id": 15, "iscrowd": 0, "bbox": [482, 81, 56, 3], "area": 102}, {"id": 5989248, "category_id": 15, "iscrowd": 0, "bbox": [180, 249, 138, 59], "area": 3198}, {"id": 6116702, "category_id": 67, "iscrowd": 0, "bbox": [253, 182, 223, 67], "area": 9378}, {"id": 11064791, "category_id": 67, "iscrowd": 0, "bbox": [487, 75, 50, 18], "area": 311}, {"id": 8029831, "category_id": 67, "iscrowd": 0, "bbox": [596, 79, 28, 4], "area": 91}, {"id": 13888749, "category_id": 67, "iscrowd": 0, "bbox": [627, 68, 12, 3], "area": 20}, {"id": 3755346, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 292], "area": 86362}, {"id": 15201011, "category_id": 187, "iscrowd": 0, "bbox": [307, 0, 32, 21], "area": 462}, {"id": 8358551, "category_id": 189, "iscrowd": 0, "bbox": [253, 72, 375, 181], "area": 1912}, {"id": 9404028, "category_id": 191, "iscrowd": 0, "bbox": [0, 113, 291, 107], "area": 8117}, {"id": 7176068, "category_id": 193, "iscrowd": 0, "bbox": [0, 52, 632, 144], "area": 14115}, {"id": 7636368, "category_id": 194, "iscrowd": 0, "bbox": [0, 107, 640, 373], "area": 155148}, {"id": 7305082, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 286], "area": 10285}], "file_name": "000000551350.png", "image_id": 551350}, {"segments_info": [{"id": 10858952, "category_id": 1, "iscrowd": 0, "bbox": [0, 32, 425, 597], "area": 140921}, {"id": 7966616, "category_id": 65, "iscrowd": 0, "bbox": [0, 140, 427, 491], "area": 37246}, {"id": 4342758, "category_id": 84, "iscrowd": 0, "bbox": [85, 189, 193, 209], "area": 25957}, {"id": 4671690, "category_id": 100, "iscrowd": 0, "bbox": [77, 301, 197, 82], "area": 943}, {"id": 6059126, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 204, 158], "area": 24671}, {"id": 11849172, "category_id": 112, "iscrowd": 0, "bbox": [277, 47, 150, 385], "area": 23200}], "file_name": "000000551439.png", "image_id": 551439}, {"segments_info": [{"id": 14739173, "category_id": 47, "iscrowd": 0, "bbox": [61, 6, 90, 113], "area": 8905}, {"id": 11581881, "category_id": 50, "iscrowd": 0, "bbox": [283, 455, 104, 135], "area": 4110}, {"id": 7047038, "category_id": 51, "iscrowd": 0, "bbox": [40, 288, 297, 283], "area": 44775}, {"id": 10211795, "category_id": 53, "iscrowd": 0, "bbox": [130, 299, 136, 71], "area": 2912}, {"id": 3839377, "category_id": 53, "iscrowd": 0, "bbox": [118, 501, 69, 31], "area": 1014}, {"id": 8241343, "category_id": 53, "iscrowd": 0, "bbox": [61, 338, 97, 86], "area": 4218}, {"id": 11266806, "category_id": 55, "iscrowd": 0, "bbox": [277, 190, 119, 115], "area": 6683}, {"id": 3435351, "category_id": 56, "iscrowd": 0, "bbox": [226, 388, 105, 145], "area": 6585}, {"id": 2313532, "category_id": 56, "iscrowd": 0, "bbox": [177, 412, 71, 60], "area": 2469}, {"id": 4687730, "category_id": 56, "iscrowd": 0, "bbox": [128, 172, 72, 43], "area": 1789}, {"id": 3232842, "category_id": 56, "iscrowd": 0, "bbox": [71, 321, 63, 63], "area": 2177}, {"id": 6001795, "category_id": 56, "iscrowd": 0, "bbox": [17, 147, 74, 112], "area": 3390}, {"id": 15200496, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 180, 640], "area": 63756}, {"id": 9411226, "category_id": 196, "iscrowd": 0, "bbox": [162, 193, 32, 29], "area": 190}], "file_name": "000000551660.png", "image_id": 551660}, {"segments_info": [{"id": 2565157, "category_id": 50, "iscrowd": 0, "bbox": [52, 102, 47, 89], "area": 337}, {"id": 12302522, "category_id": 85, "iscrowd": 0, "bbox": [240, 59, 200, 341], "area": 51044}, {"id": 5985881, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 255635}], "file_name": "000000551780.png", "image_id": 551780}, {"segments_info": [{"id": 5655109, "category_id": 1, "iscrowd": 0, "bbox": [172, 210, 139, 232], "area": 6713}, {"id": 3617075, "category_id": 4, "iscrowd": 0, "bbox": [176, 258, 149, 208], "area": 11608}, {"id": 8753037, "category_id": 27, "iscrowd": 0, "bbox": [247, 259, 68, 61], "area": 2139}, {"id": 11248799, "category_id": 149, "iscrowd": 0, "bbox": [167, 34, 473, 446], "area": 68410}, {"id": 5065816, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 180], "area": 57655}, {"id": 6055806, "category_id": 193, "iscrowd": 0, "bbox": [412, 37, 228, 182], "area": 22548}, {"id": 7898264, "category_id": 194, "iscrowd": 0, "bbox": [0, 34, 640, 446], "area": 132650}, {"id": 2699074, "category_id": 198, "iscrowd": 0, "bbox": [463, 161, 97, 51], "area": 2717}], "file_name": "000000551794.png", "image_id": 551794}, {"segments_info": [{"id": 6451082, "category_id": 1, "iscrowd": 0, "bbox": [220, 82, 217, 280], "area": 17326}, {"id": 2976140, "category_id": 43, "iscrowd": 0, "bbox": [346, 60, 41, 140], "area": 2801}], "file_name": "000000551804.png", "image_id": 551804}, {"segments_info": [{"id": 1252138, "category_id": 17, "iscrowd": 0, "bbox": [256, 128, 384, 224], "area": 51494}, {"id": 5133661, "category_id": 17, "iscrowd": 0, "bbox": [28, 116, 612, 364], "area": 101158}, {"id": 2832716, "category_id": 65, "iscrowd": 0, "bbox": [0, 150, 138, 330], "area": 31426}, {"id": 4344670, "category_id": 93, "iscrowd": 0, "bbox": [0, 155, 640, 325], "area": 14006}, {"id": 6377279, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 228], "area": 106907}], "file_name": "000000551815.png", "image_id": 551815}, {"segments_info": [{"id": 5730169, "category_id": 1, "iscrowd": 0, "bbox": [453, 191, 78, 174], "area": 5291}, {"id": 6188157, "category_id": 1, "iscrowd": 0, "bbox": [612, 241, 20, 66], "area": 894}, {"id": 6453896, "category_id": 1, "iscrowd": 0, "bbox": [576, 233, 24, 70], "area": 1013}, {"id": 8689567, "category_id": 1, "iscrowd": 0, "bbox": [57, 197, 62, 121], "area": 2020}, {"id": 11383987, "category_id": 1, "iscrowd": 0, "bbox": [141, 232, 13, 36], "area": 182}, {"id": 4149067, "category_id": 1, "iscrowd": 0, "bbox": [505, 232, 24, 70], "area": 1050}, {"id": 7110023, "category_id": 1, "iscrowd": 0, "bbox": [537, 229, 26, 73], "area": 1283}, {"id": 8684660, "category_id": 1, "iscrowd": 0, "bbox": [408, 235, 18, 45], "area": 468}, {"id": 8228505, "category_id": 1, "iscrowd": 0, "bbox": [420, 241, 24, 46], "area": 567}, {"id": 10200749, "category_id": 1, "iscrowd": 0, "bbox": [15, 235, 25, 58], "area": 833}, {"id": 6911095, "category_id": 1, "iscrowd": 0, "bbox": [107, 143, 315, 282], "area": 31127}, {"id": 8165288, "category_id": 1, "iscrowd": 0, "bbox": [199, 157, 58, 218], "area": 4962}, {"id": 8556695, "category_id": 1, "iscrowd": 0, "bbox": [399, 268, 33, 53], "area": 980}, {"id": 6190471, "category_id": 1, "iscrowd": 1, "bbox": [0, 222, 618, 102], "area": 3549}, {"id": 7573667, "category_id": 43, "iscrowd": 0, "bbox": [476, 258, 19, 41], "area": 369}, {"id": 7834006, "category_id": 43, "iscrowd": 0, "bbox": [23, 182, 120, 115], "area": 5433}, {"id": 9477792, "category_id": 43, "iscrowd": 0, "bbox": [198, 179, 26, 52], "area": 771}, {"id": 10600652, "category_id": 118, "iscrowd": 0, "bbox": [0, 256, 640, 169], "area": 38766}, {"id": 11186866, "category_id": 130, "iscrowd": 0, "bbox": [43, 12, 280, 70], "area": 1274}, {"id": 12177621, "category_id": 138, "iscrowd": 0, "bbox": [0, 307, 615, 118], "area": 26235}, {"id": 1856635, "category_id": 177, "iscrowd": 0, "bbox": [0, 146, 640, 164], "area": 27908}, {"id": 4675678, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 135], "area": 49935}, {"id": 5398116, "category_id": 199, "iscrowd": 0, "bbox": [0, 12, 640, 268], "area": 58687}], "file_name": "000000551820.png", "image_id": 551820}, {"segments_info": [{"id": 4532544, "category_id": 47, "iscrowd": 0, "bbox": [87, 24, 137, 158], "area": 16496}, {"id": 7885429, "category_id": 47, "iscrowd": 0, "bbox": [218, 23, 102, 173], "area": 13625}, {"id": 5519217, "category_id": 51, "iscrowd": 0, "bbox": [115, 162, 192, 134], "area": 17418}, {"id": 1906504, "category_id": 54, "iscrowd": 0, "bbox": [109, 256, 277, 144], "area": 31926}, {"id": 2432609, "category_id": 54, "iscrowd": 0, "bbox": [318, 213, 229, 174], "area": 22355}, {"id": 9063255, "category_id": 62, "iscrowd": 0, "bbox": [38, 18, 81, 108], "area": 4937}, {"id": 4139320, "category_id": 67, "iscrowd": 0, "bbox": [0, 131, 640, 322], "area": 62662}, {"id": 8093117, "category_id": 171, "iscrowd": 0, "bbox": [236, 0, 54, 25], "area": 918}, {"id": 327938, "category_id": 189, "iscrowd": 0, "bbox": [0, 225, 559, 228], "area": 885}, {"id": 2755603, "category_id": 190, "iscrowd": 0, "bbox": [0, 127, 123, 117], "area": 9019}, {"id": 10319519, "category_id": 196, "iscrowd": 0, "bbox": [352, 193, 111, 31], "area": 2301}, {"id": 5714275, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 341, 120], "area": 5843}], "file_name": "000000551822.png", "image_id": 551822}, {"segments_info": [{"id": 1783654, "category_id": 19, "iscrowd": 0, "bbox": [150, 0, 298, 250], "area": 42303}, {"id": 3954295, "category_id": 19, "iscrowd": 0, "bbox": [289, 3, 351, 418], "area": 94917}, {"id": 2901058, "category_id": 184, "iscrowd": 0, "bbox": [0, 89, 120, 49], "area": 916}, {"id": 6328735, "category_id": 185, "iscrowd": 0, "bbox": [0, 115, 300, 158], "area": 13130}, {"id": 14537154, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 67], "area": 19138}, {"id": 8810579, "category_id": 192, "iscrowd": 0, "bbox": [0, 6, 640, 96], "area": 13081}, {"id": 6066848, "category_id": 193, "iscrowd": 0, "bbox": [17, 96, 147, 27], "area": 2683}, {"id": 4220299, "category_id": 194, "iscrowd": 0, "bbox": [0, 152, 640, 274], "area": 65324}], "file_name": "000000552371.png", "image_id": 552371}, {"segments_info": [{"id": 7305613, "category_id": 20, "iscrowd": 0, "bbox": [336, 266, 60, 37], "area": 1148}, {"id": 6380406, "category_id": 20, "iscrowd": 0, "bbox": [206, 328, 75, 87], "area": 4565}, {"id": 6776461, "category_id": 20, "iscrowd": 0, "bbox": [67, 288, 40, 31], "area": 782}, {"id": 6647942, "category_id": 20, "iscrowd": 0, "bbox": [19, 310, 66, 75], "area": 2598}, {"id": 8629451, "category_id": 20, "iscrowd": 0, "bbox": [22, 292, 39, 30], "area": 610}, {"id": 6910092, "category_id": 20, "iscrowd": 0, "bbox": [183, 288, 36, 62], "area": 1496}, {"id": 7833749, "category_id": 20, "iscrowd": 0, "bbox": [60, 281, 53, 45], "area": 599}, {"id": 8888242, "category_id": 20, "iscrowd": 0, "bbox": [110, 275, 66, 57], "area": 2173}, {"id": 6579846, "category_id": 20, "iscrowd": 0, "bbox": [302, 270, 59, 40], "area": 1354}, {"id": 7704743, "category_id": 20, "iscrowd": 0, "bbox": [479, 334, 114, 93], "area": 6896}], "file_name": "000000552612.png", "image_id": 552612}, {"segments_info": [{"id": 9347022, "category_id": 1, "iscrowd": 0, "bbox": [2, 133, 94, 204], "area": 15016}, {"id": 9019845, "category_id": 44, "iscrowd": 0, "bbox": [252, 94, 19, 29], "area": 383}, {"id": 9218490, "category_id": 44, "iscrowd": 0, "bbox": [287, 96, 19, 28], "area": 475}, {"id": 5727119, "category_id": 44, "iscrowd": 0, "bbox": [140, 56, 30, 65], "area": 1318}, {"id": 8887750, "category_id": 44, "iscrowd": 0, "bbox": [234, 93, 18, 26], "area": 363}, {"id": 5531271, "category_id": 49, "iscrowd": 0, "bbox": [220, 251, 42, 32], "area": 429}, {"id": 8096934, "category_id": 50, "iscrowd": 0, "bbox": [320, 190, 13, 26], "area": 161}, {"id": 12833507, "category_id": 50, "iscrowd": 0, "bbox": [250, 177, 24, 52], "area": 454}, {"id": 7703981, "category_id": 51, "iscrowd": 0, "bbox": [242, 199, 98, 83], "area": 6047}, {"id": 4936810, "category_id": 79, "iscrowd": 0, "bbox": [42, 120, 331, 380], "area": 96451}, {"id": 6715533, "category_id": 82, "iscrowd": 0, "bbox": [0, 0, 139, 444], "area": 27517}, {"id": 11256273, "category_id": 171, "iscrowd": 0, "bbox": [133, 0, 242, 138], "area": 27270}, {"id": 3096156, "category_id": 190, "iscrowd": 0, "bbox": [343, 456, 32, 44], "area": 966}, {"id": 4808568, "category_id": 199, "iscrowd": 0, "bbox": [351, 314, 24, 159], "area": 1857}], "file_name": "000000552775.png", "image_id": 552775}, {"segments_info": [{"id": 11123146, "category_id": 1, "iscrowd": 0, "bbox": [338, 203, 139, 110], "area": 6966}, {"id": 4084643, "category_id": 40, "iscrowd": 0, "bbox": [365, 247, 22, 20], "area": 255}, {"id": 5211789, "category_id": 145, "iscrowd": 0, "bbox": [0, 10, 640, 417], "area": 256268}, {"id": 5000794, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 21], "area": 9590}], "file_name": "000000552842.png", "image_id": 552842}, {"segments_info": [{"id": 11053223, "category_id": 81, "iscrowd": 0, "bbox": [244, 237, 76, 14], "area": 570}, {"id": 16316407, "category_id": 109, "iscrowd": 0, "bbox": [507, 89, 23, 16], "area": 291}, {"id": 6784386, "category_id": 151, "iscrowd": 0, "bbox": [0, 0, 640, 70], "area": 29236}, {"id": 10134437, "category_id": 176, "iscrowd": 0, "bbox": [146, 175, 494, 121], "area": 28032}, {"id": 13421766, "category_id": 180, "iscrowd": 0, "bbox": [239, 45, 401, 206], "area": 30036}, {"id": 15265516, "category_id": 181, "iscrowd": 0, "bbox": [266, 98, 323, 147], "area": 18833}, {"id": 5597824, "category_id": 188, "iscrowd": 0, "bbox": [233, 249, 407, 177], "area": 54740}, {"id": 3030086, "category_id": 190, "iscrowd": 0, "bbox": [0, 339, 432, 87], "area": 20734}, {"id": 8755828, "category_id": 199, "iscrowd": 0, "bbox": [0, 9, 640, 390], "area": 82732}], "file_name": "000000552883.png", "image_id": 552883}, {"segments_info": [{"id": 7042176, "category_id": 24, "iscrowd": 0, "bbox": [130, 107, 331, 207], "area": 39850}, {"id": 2375997, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 258], "area": 124074}, {"id": 4813936, "category_id": 193, "iscrowd": 0, "bbox": [0, 236, 640, 191], "area": 107334}, {"id": 8032412, "category_id": 194, "iscrowd": 0, "bbox": [0, 304, 118, 24], "area": 1694}], "file_name": "000000552902.png", "image_id": 552902}, {"segments_info": [{"id": 8288367, "category_id": 5, "iscrowd": 0, "bbox": [178, 47, 277, 349], "area": 30219}, {"id": 14211028, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 242039}], "file_name": "000000553094.png", "image_id": 553094}, {"segments_info": [{"id": 8293021, "category_id": 1, "iscrowd": 0, "bbox": [256, 291, 5, 6], "area": 25}, {"id": 4079948, "category_id": 1, "iscrowd": 0, "bbox": [404, 290, 5, 21], "area": 76}, {"id": 4673894, "category_id": 1, "iscrowd": 0, "bbox": [454, 300, 11, 27], "area": 168}, {"id": 5195857, "category_id": 1, "iscrowd": 0, "bbox": [341, 103, 104, 112], "area": 3773}, {"id": 4278622, "category_id": 1, "iscrowd": 0, "bbox": [420, 304, 18, 23], "area": 204}, {"id": 4671061, "category_id": 1, "iscrowd": 0, "bbox": [480, 286, 6, 13], "area": 48}, {"id": 4078913, "category_id": 1, "iscrowd": 0, "bbox": [235, 287, 7, 9], "area": 45}, {"id": 3619910, "category_id": 1, "iscrowd": 0, "bbox": [209, 322, 26, 27], "area": 312}, {"id": 3360581, "category_id": 1, "iscrowd": 0, "bbox": [267, 288, 5, 10], "area": 36}, {"id": 5200237, "category_id": 1, "iscrowd": 0, "bbox": [184, 296, 6, 18], "area": 78}, {"id": 3687252, "category_id": 1, "iscrowd": 0, "bbox": [312, 290, 6, 16], "area": 65}, {"id": 2763566, "category_id": 1, "iscrowd": 0, "bbox": [246, 287, 7, 9], "area": 40}, {"id": 3555420, "category_id": 1, "iscrowd": 0, "bbox": [210, 305, 15, 25], "area": 207}, {"id": 6444603, "category_id": 38, "iscrowd": 0, "bbox": [311, 163, 20, 32], "area": 383}, {"id": 6052967, "category_id": 38, "iscrowd": 0, "bbox": [146, 76, 22, 27], "area": 405}, {"id": 6842479, "category_id": 38, "iscrowd": 0, "bbox": [527, 105, 40, 42], "area": 654}, {"id": 2697503, "category_id": 38, "iscrowd": 0, "bbox": [44, 0, 31, 23], "area": 551}, {"id": 9140842, "category_id": 38, "iscrowd": 0, "bbox": [85, 159, 12, 23], "area": 202}, {"id": 5000016, "category_id": 42, "iscrowd": 0, "bbox": [400, 202, 65, 13], "area": 258}, {"id": 9277071, "category_id": 42, "iscrowd": 0, "bbox": [235, 351, 9, 5], "area": 27}, {"id": 6189960, "category_id": 154, "iscrowd": 0, "bbox": [0, 296, 551, 28], "area": 7727}, {"id": 3883067, "category_id": 155, "iscrowd": 0, "bbox": [0, 307, 640, 120], "area": 67574}, {"id": 9799030, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 297], "area": 178127}, {"id": 5198936, "category_id": 192, "iscrowd": 0, "bbox": [202, 286, 35, 15], "area": 352}], "file_name": "000000553221.png", "image_id": 553221}, {"segments_info": [{"id": 6515044, "category_id": 3, "iscrowd": 0, "bbox": [48, 282, 9, 5], "area": 41}, {"id": 5595748, "category_id": 10, "iscrowd": 0, "bbox": [51, 270, 4, 7], "area": 28}, {"id": 6121066, "category_id": 10, "iscrowd": 0, "bbox": [58, 269, 8, 11], "area": 70}, {"id": 5593689, "category_id": 10, "iscrowd": 0, "bbox": [21, 276, 4, 5], "area": 18}, {"id": 6845790, "category_id": 10, "iscrowd": 0, "bbox": [91, 277, 3, 6], "area": 18}, {"id": 6056264, "category_id": 10, "iscrowd": 0, "bbox": [78, 272, 4, 6], "area": 16}, {"id": 5724792, "category_id": 10, "iscrowd": 0, "bbox": [66, 271, 4, 6], "area": 21}, {"id": 5925737, "category_id": 95, "iscrowd": 0, "bbox": [159, 223, 194, 58], "area": 515}, {"id": 7306109, "category_id": 149, "iscrowd": 0, "bbox": [0, 277, 283, 98], "area": 18375}, {"id": 4477257, "category_id": 184, "iscrowd": 0, "bbox": [142, 0, 358, 307], "area": 49647}, {"id": 13619150, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 289], "area": 70079}, {"id": 6122348, "category_id": 191, "iscrowd": 0, "bbox": [178, 308, 34, 30], "area": 470}, {"id": 1720371, "category_id": 193, "iscrowd": 0, "bbox": [124, 248, 376, 127], "area": 26641}], "file_name": "000000553339.png", "image_id": 553339}, {"segments_info": [{"id": 8093837, "category_id": 1, "iscrowd": 0, "bbox": [440, 259, 20, 36], "area": 336}, {"id": 5660019, "category_id": 1, "iscrowd": 0, "bbox": [97, 271, 17, 12], "area": 99}, {"id": 6509873, "category_id": 3, "iscrowd": 0, "bbox": [184, 270, 47, 37], "area": 1209}, {"id": 6186100, "category_id": 3, "iscrowd": 0, "bbox": [322, 261, 9, 8], "area": 62}, {"id": 5199720, "category_id": 3, "iscrowd": 0, "bbox": [49, 260, 142, 59], "area": 5698}, {"id": 5396585, "category_id": 3, "iscrowd": 0, "bbox": [325, 266, 60, 30], "area": 1278}, {"id": 3881520, "category_id": 3, "iscrowd": 0, "bbox": [454, 255, 46, 11], "area": 303}, {"id": 989240, "category_id": 10, "iscrowd": 0, "bbox": [431, 236, 8, 8], "area": 56}, {"id": 2302245, "category_id": 10, "iscrowd": 0, "bbox": [83, 28, 23, 47], "area": 882}, {"id": 5334137, "category_id": 10, "iscrowd": 0, "bbox": [112, 190, 14, 26], "area": 212}, {"id": 2961983, "category_id": 10, "iscrowd": 0, "bbox": [45, 166, 10, 23], "area": 207}, {"id": 2698811, "category_id": 10, "iscrowd": 0, "bbox": [0, 153, 7, 36], "area": 163}, {"id": 1184573, "category_id": 10, "iscrowd": 0, "bbox": [320, 182, 7, 17], "area": 95}, {"id": 2106184, "category_id": 10, "iscrowd": 0, "bbox": [269, 182, 7, 19], "area": 102}, {"id": 9867138, "category_id": 11, "iscrowd": 0, "bbox": [397, 296, 19, 37], "area": 361}, {"id": 9277599, "category_id": 149, "iscrowd": 0, "bbox": [0, 256, 500, 77], "area": 16410}, {"id": 3756639, "category_id": 184, "iscrowd": 0, "bbox": [0, 160, 500, 137], "area": 14063}, {"id": 11174468, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 195], "area": 37126}, {"id": 9214639, "category_id": 191, "iscrowd": 0, "bbox": [232, 272, 268, 31], "area": 1853}, {"id": 9078918, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 427, 300], "area": 67064}], "file_name": "000000553511.png", "image_id": 553511}, {"segments_info": [{"id": 4143992, "category_id": 73, "iscrowd": 0, "bbox": [271, 140, 283, 184], "area": 19689}, {"id": 11514547, "category_id": 74, "iscrowd": 0, "bbox": [428, 247, 69, 15], "area": 788}, {"id": 7171440, "category_id": 76, "iscrowd": 0, "bbox": [402, 274, 83, 37], "area": 1405}, {"id": 15592682, "category_id": 77, "iscrowd": 0, "bbox": [491, 326, 103, 29], "area": 2222}, {"id": 12699330, "category_id": 84, "iscrowd": 0, "bbox": [515, 145, 16, 62], "area": 767}, {"id": 10399416, "category_id": 84, "iscrowd": 0, "bbox": [443, 157, 10, 51], "area": 434}, {"id": 11510933, "category_id": 84, "iscrowd": 0, "bbox": [467, 0, 8, 51], "area": 319}, {"id": 8029838, "category_id": 84, "iscrowd": 0, "bbox": [495, 1, 16, 49], "area": 619}, {"id": 6187376, "category_id": 84, "iscrowd": 0, "bbox": [484, 72, 16, 58], "area": 475}, {"id": 10594994, "category_id": 84, "iscrowd": 0, "bbox": [217, 58, 94, 78], "area": 6858}, {"id": 8487336, "category_id": 84, "iscrowd": 0, "bbox": [460, 66, 22, 20], "area": 259}, {"id": 10725810, "category_id": 84, "iscrowd": 0, "bbox": [408, 76, 12, 54], "area": 558}, {"id": 8817562, "category_id": 84, "iscrowd": 0, "bbox": [542, 64, 56, 65], "area": 3398}, {"id": 12172991, "category_id": 84, "iscrowd": 0, "bbox": [542, 148, 5, 59], "area": 291}, {"id": 11055043, "category_id": 84, "iscrowd": 0, "bbox": [509, 70, 4, 59], "area": 180}, {"id": 3883329, "category_id": 84, "iscrowd": 0, "bbox": [259, 0, 2, 53], "area": 105}, {"id": 11118751, "category_id": 84, "iscrowd": 0, "bbox": [556, 1, 7, 49], "area": 316}, {"id": 10330793, "category_id": 84, "iscrowd": 1, "bbox": [97, 0, 543, 293], "area": 61796}, {"id": 10462375, "category_id": 156, "iscrowd": 0, "bbox": [238, 0, 402, 338], "area": 18931}, {"id": 3685693, "category_id": 188, "iscrowd": 0, "bbox": [582, 123, 58, 236], "area": 4268}, {"id": 10202049, "category_id": 189, "iscrowd": 0, "bbox": [0, 229, 640, 156], "area": 50666}, {"id": 11647420, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 227, 194], "area": 38720}], "file_name": "000000553664.png", "image_id": 553664}, {"segments_info": [{"id": 4670025, "category_id": 1, "iscrowd": 0, "bbox": [0, 94, 30, 47], "area": 574}, {"id": 9738153, "category_id": 1, "iscrowd": 0, "bbox": [460, 109, 30, 44], "area": 828}, {"id": 1251093, "category_id": 1, "iscrowd": 0, "bbox": [0, 221, 47, 117], "area": 3054}, {"id": 5001820, "category_id": 1, "iscrowd": 0, "bbox": [65, 97, 27, 44], "area": 605}, {"id": 4343120, "category_id": 1, "iscrowd": 0, "bbox": [512, 82, 10, 19], "area": 120}, {"id": 3289655, "category_id": 1, "iscrowd": 0, "bbox": [88, 104, 41, 35], "area": 623}, {"id": 6513015, "category_id": 1, "iscrowd": 0, "bbox": [594, 110, 46, 52], "area": 632}, {"id": 1645858, "category_id": 1, "iscrowd": 0, "bbox": [46, 193, 221, 282], "area": 24724}, {"id": 5858165, "category_id": 1, "iscrowd": 0, "bbox": [485, 79, 10, 11], "area": 61}, {"id": 5724313, "category_id": 3, "iscrowd": 0, "bbox": [241, 103, 164, 40], "area": 2659}, {"id": 5213602, "category_id": 3, "iscrowd": 0, "bbox": [360, 93, 138, 40], "area": 3016}, {"id": 4802631, "category_id": 3, "iscrowd": 0, "bbox": [573, 93, 67, 34], "area": 1383}, {"id": 6775908, "category_id": 3, "iscrowd": 0, "bbox": [491, 107, 124, 31], "area": 2423}, {"id": 8289393, "category_id": 3, "iscrowd": 0, "bbox": [188, 76, 109, 25], "area": 1568}, {"id": 6249558, "category_id": 3, "iscrowd": 0, "bbox": [85, 82, 144, 42], "area": 3967}, {"id": 6326156, "category_id": 8, "iscrowd": 0, "bbox": [378, 80, 131, 22], "area": 1577}, {"id": 8623030, "category_id": 15, "iscrowd": 0, "bbox": [401, 131, 101, 22], "area": 767}, {"id": 2830126, "category_id": 15, "iscrowd": 0, "bbox": [6, 319, 345, 116], "area": 17878}, {"id": 10263721, "category_id": 15, "iscrowd": 0, "bbox": [167, 122, 91, 18], "area": 509}, {"id": 8489638, "category_id": 15, "iscrowd": 0, "bbox": [508, 131, 104, 23], "area": 1501}, {"id": 9012876, "category_id": 15, "iscrowd": 0, "bbox": [17, 119, 52, 22], "area": 551}, {"id": 7698310, "category_id": 15, "iscrowd": 0, "bbox": [122, 119, 43, 14], "area": 418}, {"id": 3553850, "category_id": 73, "iscrowd": 0, "bbox": [124, 232, 97, 59], "area": 2306}, {"id": 5733273, "category_id": 119, "iscrowd": 0, "bbox": [0, 107, 640, 373], "area": 38933}, {"id": 5336426, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 595, 480], "area": 21560}, {"id": 6316645, "category_id": 185, "iscrowd": 0, "bbox": [0, 82, 576, 67], "area": 6487}, {"id": 7172461, "category_id": 191, "iscrowd": 0, "bbox": [43, 274, 597, 206], "area": 32783}, {"id": 3836521, "category_id": 193, "iscrowd": 0, "bbox": [0, 175, 513, 140], "area": 45109}, {"id": 6977151, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 113], "area": 38245}], "file_name": "000000553669.png", "image_id": 553669}, {"segments_info": [{"id": 1710363, "category_id": 1, "iscrowd": 0, "bbox": [363, 136, 63, 76], "area": 2610}, {"id": 3419167, "category_id": 1, "iscrowd": 0, "bbox": [584, 194, 56, 228], "area": 9167}, {"id": 5131339, "category_id": 1, "iscrowd": 0, "bbox": [173, 56, 260, 366], "area": 61277}, {"id": 10656411, "category_id": 1, "iscrowd": 0, "bbox": [392, 336, 176, 92], "area": 5466}, {"id": 4343131, "category_id": 1, "iscrowd": 0, "bbox": [21, 118, 117, 92], "area": 8097}, {"id": 1774872, "category_id": 1, "iscrowd": 0, "bbox": [410, 0, 230, 428], "area": 53653}, {"id": 7565948, "category_id": 77, "iscrowd": 0, "bbox": [317, 148, 8, 15], "area": 84}, {"id": 2303808, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 542, 307], "area": 15331}, {"id": 5793135, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 500, 248], "area": 40159}, {"id": 3158581, "category_id": 199, "iscrowd": 0, "bbox": [338, 0, 123, 287], "area": 2184}], "file_name": "000000553731.png", "image_id": 553731}, {"segments_info": [{"id": 5063993, "category_id": 1, "iscrowd": 0, "bbox": [219, 136, 204, 312], "area": 21484}, {"id": 4545913, "category_id": 4, "iscrowd": 0, "bbox": [187, 200, 380, 282], "area": 56305}, {"id": 7892072, "category_id": 149, "iscrowd": 0, "bbox": [0, 357, 640, 132], "area": 45658}, {"id": 7105384, "category_id": 184, "iscrowd": 0, "bbox": [0, 126, 327, 216], "area": 37845}, {"id": 14737373, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 242], "area": 119396}, {"id": 5527640, "category_id": 193, "iscrowd": 0, "bbox": [0, 239, 640, 143], "area": 15011}, {"id": 11183520, "category_id": 197, "iscrowd": 0, "bbox": [0, 193, 640, 130], "area": 7188}], "file_name": "000000553776.png", "image_id": 553776}, {"segments_info": [{"id": 3620197, "category_id": 1, "iscrowd": 0, "bbox": [1, 26, 373, 287], "area": 73326}, {"id": 4539037, "category_id": 65, "iscrowd": 0, "bbox": [1, 230, 639, 129], "area": 42578}, {"id": 8354205, "category_id": 73, "iscrowd": 0, "bbox": [284, 190, 323, 140], "area": 14756}, {"id": 3289470, "category_id": 93, "iscrowd": 0, "bbox": [0, 275, 640, 88], "area": 3268}, {"id": 9999770, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 288], "area": 96968}], "file_name": "000000553788.png", "image_id": 553788}, {"segments_info": [{"id": 8486015, "category_id": 1, "iscrowd": 0, "bbox": [194, 38, 138, 160], "area": 6336}, {"id": 4539987, "category_id": 19, "iscrowd": 0, "bbox": [41, 77, 369, 292], "area": 28184}, {"id": 6978683, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 600, 290], "area": 112926}, {"id": 11446427, "category_id": 185, "iscrowd": 0, "bbox": [444, 259, 156, 48], "area": 4054}, {"id": 15987184, "category_id": 187, "iscrowd": 0, "bbox": [71, 0, 354, 51], "area": 5336}, {"id": 8302736, "category_id": 193, "iscrowd": 0, "bbox": [0, 267, 600, 133], "area": 57652}], "file_name": "000000553990.png", "image_id": 553990}, {"segments_info": [{"id": 5790045, "category_id": 1, "iscrowd": 0, "bbox": [0, 2, 38, 249], "area": 7219}, {"id": 7631988, "category_id": 1, "iscrowd": 0, "bbox": [108, 0, 36, 112], "area": 2477}, {"id": 6123910, "category_id": 1, "iscrowd": 0, "bbox": [203, 2, 100, 278], "area": 17654}, {"id": 8490660, "category_id": 1, "iscrowd": 0, "bbox": [19, 2, 90, 256], "area": 12755}, {"id": 9013910, "category_id": 1, "iscrowd": 0, "bbox": [570, 39, 29, 27], "area": 500}, {"id": 6254743, "category_id": 1, "iscrowd": 0, "bbox": [156, 2, 96, 272], "area": 13574}, {"id": 5399187, "category_id": 1, "iscrowd": 0, "bbox": [404, 36, 59, 275], "area": 11000}, {"id": 8817299, "category_id": 1, "iscrowd": 0, "bbox": [531, 42, 21, 57], "area": 743}, {"id": 8487823, "category_id": 1, "iscrowd": 0, "bbox": [473, 54, 24, 23], "area": 373}, {"id": 5199980, "category_id": 1, "iscrowd": 0, "bbox": [261, 1, 153, 335], "area": 29633}, {"id": 4143661, "category_id": 18, "iscrowd": 0, "bbox": [429, 78, 187, 286], "area": 31908}, {"id": 3815223, "category_id": 31, "iscrowd": 0, "bbox": [405, 1, 61, 45], "area": 2060}, {"id": 3815469, "category_id": 31, "iscrowd": 0, "bbox": [27, 1, 68, 66], "area": 2145}, {"id": 7698810, "category_id": 62, "iscrowd": 0, "bbox": [512, 57, 19, 44], "area": 531}, {"id": 8030607, "category_id": 130, "iscrowd": 0, "bbox": [457, 0, 183, 39], "area": 1783}, {"id": 5857379, "category_id": 197, "iscrowd": 0, "bbox": [130, 0, 47, 101], "area": 2363}], "file_name": "000000554002.png", "image_id": 554002}, {"segments_info": [{"id": 5658725, "category_id": 1, "iscrowd": 0, "bbox": [116, 90, 341, 333], "area": 54873}, {"id": 2239788, "category_id": 43, "iscrowd": 0, "bbox": [418, 0, 103, 188], "area": 12145}, {"id": 1911823, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 205345}], "file_name": "000000554156.png", "image_id": 554156}, {"segments_info": [{"id": 7954264, "category_id": 1, "iscrowd": 0, "bbox": [275, 131, 133, 103], "area": 6881}, {"id": 8619929, "category_id": 1, "iscrowd": 0, "bbox": [377, 131, 251, 103], "area": 12491}, {"id": 11055545, "category_id": 65, "iscrowd": 0, "bbox": [76, 214, 67, 36], "area": 1025}, {"id": 5858692, "category_id": 65, "iscrowd": 0, "bbox": [273, 149, 266, 84], "area": 4831}, {"id": 8228284, "category_id": 93, "iscrowd": 0, "bbox": [215, 150, 61, 90], "area": 3489}, {"id": 3359318, "category_id": 109, "iscrowd": 0, "bbox": [487, 86, 74, 59], "area": 2825}, {"id": 658964, "category_id": 112, "iscrowd": 0, "bbox": [258, 83, 128, 69], "area": 3837}, {"id": 593435, "category_id": 118, "iscrowd": 0, "bbox": [208, 160, 19, 20], "area": 230}, {"id": 11514300, "category_id": 130, "iscrowd": 0, "bbox": [0, 9, 640, 140], "area": 6986}, {"id": 1318951, "category_id": 133, "iscrowd": 0, "bbox": [439, 78, 29, 39], "area": 881}, {"id": 658962, "category_id": 181, "iscrowd": 0, "bbox": [491, 55, 70, 46], "area": 2259}, {"id": 5068901, "category_id": 186, "iscrowd": 0, "bbox": [28, 0, 612, 80], "area": 17577}, {"id": 3226436, "category_id": 188, "iscrowd": 0, "bbox": [0, 74, 629, 156], "area": 7926}, {"id": 6582913, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 239], "area": 40946}], "file_name": "000000554266.png", "image_id": 554266}, {"segments_info": [{"id": 4344921, "category_id": 17, "iscrowd": 0, "bbox": [213, 78, 278, 339], "area": 41557}, {"id": 2249710, "category_id": 51, "iscrowd": 0, "bbox": [106, 75, 101, 54], "area": 4238}, {"id": 5316897, "category_id": 51, "iscrowd": 0, "bbox": [187, 54, 321, 346], "area": 35761}, {"id": 1710723, "category_id": 63, "iscrowd": 0, "bbox": [444, 39, 196, 201], "area": 29821}, {"id": 4684974, "category_id": 67, "iscrowd": 0, "bbox": [3, 235, 636, 193], "area": 46718}, {"id": 7172204, "category_id": 74, "iscrowd": 0, "bbox": [92, 251, 120, 81], "area": 5715}, {"id": 600163, "category_id": 112, "iscrowd": 0, "bbox": [375, 0, 265, 74], "area": 11838}, {"id": 4491455, "category_id": 118, "iscrowd": 0, "bbox": [0, 81, 206, 221], "area": 24106}, {"id": 4157336, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 45, 210], "area": 8474}, {"id": 4287129, "category_id": 189, "iscrowd": 0, "bbox": [0, 235, 640, 193], "area": 8709}, {"id": 11981028, "category_id": 195, "iscrowd": 0, "bbox": [504, 243, 136, 158], "area": 8399}, {"id": 9616081, "category_id": 199, "iscrowd": 0, "bbox": [36, 0, 355, 226], "area": 32078}, {"id": 6786240, "category_id": 200, "iscrowd": 0, "bbox": [91, 115, 140, 30], "area": 1885}], "file_name": "000000554291.png", "image_id": 554291}, {"segments_info": [{"id": 13092552, "category_id": 1, "iscrowd": 0, "bbox": [434, 39, 206, 455], "area": 53123}, {"id": 13815761, "category_id": 1, "iscrowd": 0, "bbox": [0, 19, 210, 473], "area": 62099}, {"id": 8683135, "category_id": 1, "iscrowd": 0, "bbox": [239, 82, 192, 410], "area": 55611}, {"id": 14473947, "category_id": 37, "iscrowd": 0, "bbox": [271, 276, 28, 10], "area": 125}, {"id": 9670031, "category_id": 40, "iscrowd": 0, "bbox": [128, 233, 64, 110], "area": 4282}, {"id": 10591133, "category_id": 40, "iscrowd": 0, "bbox": [436, 304, 108, 118], "area": 8527}, {"id": 8288378, "category_id": 128, "iscrowd": 0, "bbox": [404, 338, 236, 65], "area": 2472}, {"id": 6248538, "category_id": 145, "iscrowd": 0, "bbox": [0, 395, 640, 104], "area": 15711}, {"id": 6972261, "category_id": 177, "iscrowd": 0, "bbox": [408, 379, 45, 55], "area": 1487}, {"id": 5853523, "category_id": 184, "iscrowd": 0, "bbox": [0, 291, 628, 92], "area": 7491}, {"id": 12104886, "category_id": 185, "iscrowd": 0, "bbox": [0, 370, 223, 39], "area": 1863}, {"id": 13816017, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 373], "area": 97081}, {"id": 10196116, "category_id": 197, "iscrowd": 0, "bbox": [246, 71, 58, 340], "area": 3762}], "file_name": "000000554328.png", "image_id": 554328}, {"segments_info": [{"id": 6839634, "category_id": 1, "iscrowd": 0, "bbox": [0, 59, 193, 494], "area": 50514}, {"id": 3751831, "category_id": 1, "iscrowd": 0, "bbox": [171, 69, 163, 369], "area": 34189}, {"id": 4471111, "category_id": 1, "iscrowd": 0, "bbox": [304, 83, 183, 318], "area": 31136}, {"id": 9543363, "category_id": 18, "iscrowd": 0, "bbox": [200, 346, 264, 259], "area": 30842}, {"id": 5128009, "category_id": 31, "iscrowd": 0, "bbox": [360, 276, 70, 67], "area": 3193}, {"id": 5325131, "category_id": 88, "iscrowd": 0, "bbox": [18, 385, 41, 59], "area": 1580}, {"id": 5001323, "category_id": 100, "iscrowd": 0, "bbox": [181, 438, 34, 69], "area": 1222}, {"id": 6580357, "category_id": 171, "iscrowd": 0, "bbox": [0, 216, 86, 239], "area": 9343}, {"id": 1841189, "category_id": 184, "iscrowd": 0, "bbox": [127, 100, 115, 353], "area": 12935}, {"id": 11641777, "category_id": 186, "iscrowd": 0, "bbox": [66, 0, 428, 144], "area": 21372}, {"id": 2041667, "category_id": 188, "iscrowd": 0, "bbox": [449, 172, 45, 237], "area": 3555}, {"id": 2434356, "category_id": 190, "iscrowd": 0, "bbox": [0, 466, 76, 78], "area": 3482}, {"id": 13745094, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 494, 233], "area": 37219}, {"id": 4736889, "category_id": 200, "iscrowd": 0, "bbox": [0, 408, 494, 232], "area": 55837}], "file_name": "000000554579.png", "image_id": 554579}, {"segments_info": [{"id": 2301248, "category_id": 1, "iscrowd": 0, "bbox": [322, 245, 132, 107], "area": 7797}, {"id": 6398940, "category_id": 42, "iscrowd": 0, "bbox": [162, 230, 206, 105], "area": 9034}, {"id": 2766674, "category_id": 154, "iscrowd": 0, "bbox": [0, 181, 500, 195], "area": 66148}, {"id": 10976880, "category_id": 155, "iscrowd": 0, "bbox": [0, 89, 500, 166], "area": 55918}, {"id": 10259072, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 106], "area": 48811}], "file_name": "000000554595.png", "image_id": 554595}, {"segments_info": [{"id": 3892133, "category_id": 1, "iscrowd": 0, "bbox": [1, 88, 334, 386], "area": 86712}, {"id": 3306675, "category_id": 59, "iscrowd": 0, "bbox": [209, 62, 382, 330], "area": 77943}, {"id": 6331586, "category_id": 100, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 138818}], "file_name": "000000554735.png", "image_id": 554735}, {"segments_info": [{"id": 5012900, "category_id": 44, "iscrowd": 0, "bbox": [308, 301, 54, 82], "area": 3309}, {"id": 4159650, "category_id": 44, "iscrowd": 0, "bbox": [80, 304, 56, 83], "area": 3720}, {"id": 8091777, "category_id": 82, "iscrowd": 0, "bbox": [70, 380, 364, 253], "area": 86263}, {"id": 5463660, "category_id": 100, "iscrowd": 0, "bbox": [122, 89, 358, 218], "area": 24197}, {"id": 7964308, "category_id": 151, "iscrowd": 0, "bbox": [462, 72, 18, 21], "area": 281}, {"id": 9871784, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 469, 115], "area": 45194}, {"id": 5727090, "category_id": 195, "iscrowd": 0, "bbox": [179, 238, 254, 402], "area": 13478}, {"id": 1592183, "category_id": 196, "iscrowd": 0, "bbox": [77, 329, 4, 16], "area": 46}, {"id": 6854825, "category_id": 199, "iscrowd": 0, "bbox": [0, 101, 440, 404], "area": 57764}], "file_name": "000000554838.png", "image_id": 554838}, {"segments_info": [{"id": 9803412, "category_id": 18, "iscrowd": 0, "bbox": [108, 150, 445, 330], "area": 82536}, {"id": 6711142, "category_id": 65, "iscrowd": 0, "bbox": [0, 88, 636, 387], "area": 97310}, {"id": 9671826, "category_id": 84, "iscrowd": 0, "bbox": [304, 1, 24, 74], "area": 1335}, {"id": 10856100, "category_id": 84, "iscrowd": 0, "bbox": [376, 3, 27, 104], "area": 1321}, {"id": 10987686, "category_id": 84, "iscrowd": 0, "bbox": [432, 0, 33, 104], "area": 1630}, {"id": 9671824, "category_id": 84, "iscrowd": 0, "bbox": [322, 2, 26, 94], "area": 1603}, {"id": 5658454, "category_id": 84, "iscrowd": 0, "bbox": [448, 4, 29, 99], "area": 1452}, {"id": 10198170, "category_id": 84, "iscrowd": 0, "bbox": [373, 19, 10, 70], "area": 251}, {"id": 12237753, "category_id": 84, "iscrowd": 0, "bbox": [402, 28, 24, 71], "area": 862}, {"id": 6382176, "category_id": 84, "iscrowd": 0, "bbox": [388, 0, 29, 106], "area": 1551}, {"id": 12961476, "category_id": 84, "iscrowd": 0, "bbox": [275, 1, 18, 94], "area": 1551}, {"id": 3750457, "category_id": 93, "iscrowd": 0, "bbox": [0, 76, 640, 404], "area": 8970}, {"id": 7763829, "category_id": 189, "iscrowd": 0, "bbox": [121, 66, 452, 120], "area": 22572}, {"id": 2302754, "category_id": 190, "iscrowd": 0, "bbox": [0, 92, 139, 280], "area": 22122}, {"id": 8421759, "category_id": 195, "iscrowd": 0, "bbox": [154, 0, 230, 174], "area": 7270}, {"id": 5329488, "category_id": 199, "iscrowd": 0, "bbox": [106, 0, 534, 150], "area": 23911}], "file_name": "000000555005.png", "image_id": 555005}, {"segments_info": [{"id": 5856856, "category_id": 44, "iscrowd": 0, "bbox": [450, 113, 46, 111], "area": 2690}, {"id": 7892338, "category_id": 44, "iscrowd": 0, "bbox": [473, 120, 27, 126], "area": 1928}, {"id": 8548713, "category_id": 47, "iscrowd": 0, "bbox": [379, 151, 47, 83], "area": 2890}, {"id": 7553312, "category_id": 72, "iscrowd": 0, "bbox": [73, 9, 191, 175], "area": 28636}, {"id": 14533801, "category_id": 72, "iscrowd": 0, "bbox": [267, 1, 223, 169], "area": 33327}, {"id": 13680793, "category_id": 73, "iscrowd": 0, "bbox": [1, 106, 160, 221], "area": 11346}, {"id": 3482400, "category_id": 74, "iscrowd": 0, "bbox": [393, 270, 59, 56], "area": 2199}, {"id": 854023, "category_id": 76, "iscrowd": 0, "bbox": [0, 210, 164, 116], "area": 10607}, {"id": 2496788, "category_id": 76, "iscrowd": 0, "bbox": [170, 212, 184, 67], "area": 8399}, {"id": 10470849, "category_id": 168, "iscrowd": 0, "bbox": [98, 254, 88, 83], "area": 3656}, {"id": 9937310, "category_id": 189, "iscrowd": 0, "bbox": [0, 181, 500, 194], "area": 42976}, {"id": 263173, "category_id": 190, "iscrowd": 0, "bbox": [0, 339, 365, 36], "area": 5768}, {"id": 12168602, "category_id": 195, "iscrowd": 0, "bbox": [412, 194, 40, 44], "area": 1333}, {"id": 8552060, "category_id": 199, "iscrowd": 0, "bbox": [421, 0, 79, 185], "area": 2419}], "file_name": "000000555009.png", "image_id": 555009}, {"segments_info": [{"id": 11646644, "category_id": 70, "iscrowd": 0, "bbox": [295, 0, 150, 200], "area": 19201}, {"id": 10922915, "category_id": 112, "iscrowd": 0, "bbox": [492, 0, 148, 309], "area": 29305}, {"id": 7501430, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 34, 35], "area": 867}, {"id": 12501696, "category_id": 190, "iscrowd": 0, "bbox": [133, 66, 476, 360], "area": 94519}, {"id": 12238775, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 65498}], "file_name": "000000555012.png", "image_id": 555012}, {"segments_info": [{"id": 7365704, "category_id": 1, "iscrowd": 0, "bbox": [98, 186, 28, 27], "area": 483}, {"id": 6837074, "category_id": 3, "iscrowd": 0, "bbox": [41, 147, 23, 23], "area": 446}, {"id": 8352614, "category_id": 3, "iscrowd": 0, "bbox": [1, 177, 234, 92], "area": 15130}, {"id": 4204846, "category_id": 10, "iscrowd": 0, "bbox": [103, 78, 34, 35], "area": 1141}, {"id": 6443348, "category_id": 10, "iscrowd": 0, "bbox": [437, 85, 22, 65], "area": 1379}, {"id": 7296848, "category_id": 10, "iscrowd": 0, "bbox": [5, 51, 31, 82], "area": 2398}, {"id": 3546659, "category_id": 10, "iscrowd": 0, "bbox": [201, 106, 17, 29], "area": 438}, {"id": 7103328, "category_id": 21, "iscrowd": 0, "bbox": [222, 171, 56, 52], "area": 1467}, {"id": 2699606, "category_id": 62, "iscrowd": 0, "bbox": [358, 201, 19, 30], "area": 378}, {"id": 3426159, "category_id": 62, "iscrowd": 0, "bbox": [345, 172, 17, 31], "area": 369}, {"id": 10724262, "category_id": 62, "iscrowd": 0, "bbox": [471, 203, 29, 34], "area": 744}, {"id": 3551304, "category_id": 62, "iscrowd": 0, "bbox": [318, 202, 23, 28], "area": 240}, {"id": 2765140, "category_id": 62, "iscrowd": 0, "bbox": [313, 197, 8, 32], "area": 114}, {"id": 2832225, "category_id": 62, "iscrowd": 0, "bbox": [340, 201, 18, 31], "area": 348}, {"id": 4803427, "category_id": 63, "iscrowd": 0, "bbox": [386, 199, 73, 34], "area": 1563}, {"id": 5791092, "category_id": 63, "iscrowd": 0, "bbox": [419, 172, 38, 32], "area": 757}, {"id": 3029089, "category_id": 67, "iscrowd": 0, "bbox": [326, 204, 54, 27], "area": 180}, {"id": 7433835, "category_id": 149, "iscrowd": 0, "bbox": [0, 153, 500, 169], "area": 35989}, {"id": 5461864, "category_id": 166, "iscrowd": 0, "bbox": [151, 0, 349, 235], "area": 58223}, {"id": 8550770, "category_id": 181, "iscrowd": 0, "bbox": [184, 0, 273, 77], "area": 3851}, {"id": 6709869, "category_id": 185, "iscrowd": 0, "bbox": [143, 178, 28, 19], "area": 278}, {"id": 15723487, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 231, 114], "area": 15588}, {"id": 7105905, "category_id": 191, "iscrowd": 0, "bbox": [232, 221, 268, 29], "area": 3987}, {"id": 7433594, "category_id": 197, "iscrowd": 0, "bbox": [0, 35, 221, 150], "area": 14018}], "file_name": "000000555050.png", "image_id": 555050}, {"segments_info": [{"id": 2060678, "category_id": 59, "iscrowd": 0, "bbox": [0, 3, 640, 419], "area": 250951}, {"id": 998248, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 21960}], "file_name": "000000555412.png", "image_id": 555412}, {"segments_info": [{"id": 5789784, "category_id": 1, "iscrowd": 0, "bbox": [220, 381, 12, 27], "area": 227}, {"id": 4868682, "category_id": 3, "iscrowd": 0, "bbox": [163, 374, 32, 12], "area": 256}, {"id": 6184542, "category_id": 3, "iscrowd": 0, "bbox": [435, 408, 196, 96], "area": 13369}, {"id": 13750737, "category_id": 3, "iscrowd": 0, "bbox": [420, 374, 21, 7], "area": 109}, {"id": 10000536, "category_id": 3, "iscrowd": 0, "bbox": [7, 401, 35, 33], "area": 706}, {"id": 8158332, "category_id": 3, "iscrowd": 0, "bbox": [59, 392, 101, 40], "area": 2264}, {"id": 10461087, "category_id": 3, "iscrowd": 0, "bbox": [511, 381, 107, 30], "area": 2077}, {"id": 13750733, "category_id": 3, "iscrowd": 0, "bbox": [389, 385, 94, 36], "area": 2373}, {"id": 6184550, "category_id": 3, "iscrowd": 0, "bbox": [83, 375, 27, 11], "area": 199}, {"id": 7039851, "category_id": 3, "iscrowd": 0, "bbox": [185, 425, 256, 86], "area": 16773}, {"id": 11250603, "category_id": 3, "iscrowd": 0, "bbox": [577, 368, 44, 16], "area": 493}, {"id": 14079702, "category_id": 3, "iscrowd": 0, "bbox": [306, 387, 89, 38], "area": 2474}, {"id": 12566463, "category_id": 3, "iscrowd": 0, "bbox": [336, 376, 50, 13], "area": 375}, {"id": 8092539, "category_id": 8, "iscrowd": 0, "bbox": [153, 360, 154, 80], "area": 8308}, {"id": 3487029, "category_id": 14, "iscrowd": 0, "bbox": [439, 443, 9, 23], "area": 174}, {"id": 1513239, "category_id": 14, "iscrowd": 0, "bbox": [146, 448, 54, 62], "area": 2850}, {"id": 5987163, "category_id": 128, "iscrowd": 0, "bbox": [36, 266, 146, 119], "area": 9631}, {"id": 9539985, "category_id": 149, "iscrowd": 0, "bbox": [0, 393, 640, 124], "area": 20547}, {"id": 8224125, "category_id": 184, "iscrowd": 0, "bbox": [14, 346, 537, 52], "area": 2666}, {"id": 14474460, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 360], "area": 138586}, {"id": 8882055, "category_id": 193, "iscrowd": 0, "bbox": [0, 363, 388, 55], "area": 4738}, {"id": 7105644, "category_id": 197, "iscrowd": 0, "bbox": [163, 49, 477, 347], "area": 90305}], "file_name": "000000555597.png", "image_id": 555597}, {"segments_info": [{"id": 3554129, "category_id": 17, "iscrowd": 0, "bbox": [321, 21, 319, 289], "area": 47462}, {"id": 5595019, "category_id": 17, "iscrowd": 0, "bbox": [0, 52, 332, 253], "area": 51635}, {"id": 5929318, "category_id": 184, "iscrowd": 0, "bbox": [0, 51, 640, 238], "area": 12075}], "file_name": "000000555705.png", "image_id": 555705}, {"segments_info": [{"id": 4470318, "category_id": 62, "iscrowd": 0, "bbox": [259, 572, 221, 68], "area": 12810}, {"id": 9538456, "category_id": 63, "iscrowd": 0, "bbox": [3, 336, 110, 72], "area": 4987}, {"id": 6910591, "category_id": 67, "iscrowd": 0, "bbox": [251, 444, 229, 148], "area": 24879}, {"id": 13948111, "category_id": 84, "iscrowd": 0, "bbox": [245, 370, 25, 25], "area": 376}, {"id": 12427142, "category_id": 84, "iscrowd": 0, "bbox": [277, 378, 111, 24], "area": 1625}, {"id": 9675186, "category_id": 84, "iscrowd": 0, "bbox": [271, 385, 120, 37], "area": 2108}, {"id": 8747641, "category_id": 84, "iscrowd": 0, "bbox": [241, 379, 35, 29], "area": 513}, {"id": 6182731, "category_id": 86, "iscrowd": 0, "bbox": [51, 263, 32, 66], "area": 1612}, {"id": 4615342, "category_id": 86, "iscrowd": 0, "bbox": [98, 292, 166, 348], "area": 41584}, {"id": 4733527, "category_id": 86, "iscrowd": 0, "bbox": [311, 233, 28, 88], "area": 1404}, {"id": 7375232, "category_id": 119, "iscrowd": 0, "bbox": [121, 172, 212, 155], "area": 12958}, {"id": 6383242, "category_id": 141, "iscrowd": 0, "bbox": [70, 381, 25, 12], "area": 107}, {"id": 6259110, "category_id": 189, "iscrowd": 0, "bbox": [0, 447, 480, 193], "area": 19591}, {"id": 9144968, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 416], "area": 138466}], "file_name": "000000555972.png", "image_id": 555972}, {"segments_info": [{"id": 1318694, "category_id": 1, "iscrowd": 0, "bbox": [0, 127, 189, 388], "area": 43355}, {"id": 1384231, "category_id": 1, "iscrowd": 0, "bbox": [223, 104, 110, 409], "area": 23018}, {"id": 2109761, "category_id": 1, "iscrowd": 0, "bbox": [159, 343, 64, 166], "area": 7526}, {"id": 988962, "category_id": 1, "iscrowd": 0, "bbox": [453, 104, 179, 411], "area": 49715}, {"id": 923684, "category_id": 62, "iscrowd": 0, "bbox": [315, 267, 141, 155], "area": 15797}, {"id": 2108210, "category_id": 62, "iscrowd": 0, "bbox": [135, 269, 88, 163], "area": 7370}, {"id": 855309, "category_id": 62, "iscrowd": 0, "bbox": [306, 360, 173, 148], "area": 12140}, {"id": 1913161, "category_id": 62, "iscrowd": 0, "bbox": [231, 289, 35, 162], "area": 2927}, {"id": 12365224, "category_id": 72, "iscrowd": 0, "bbox": [0, 321, 20, 73], "area": 1063}, {"id": 4416653, "category_id": 75, "iscrowd": 0, "bbox": [222, 175, 33, 44], "area": 573}, {"id": 9408401, "category_id": 84, "iscrowd": 0, "bbox": [0, 493, 15, 17], "area": 137}, {"id": 4349546, "category_id": 180, "iscrowd": 0, "bbox": [73, 12, 365, 247], "area": 68442}, {"id": 1782080, "category_id": 190, "iscrowd": 0, "bbox": [0, 356, 640, 159], "area": 19823}, {"id": 7575978, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 421], "area": 73816}], "file_name": "000000556000.png", "image_id": 556000}, {"segments_info": [{"id": 3548709, "category_id": 1, "iscrowd": 0, "bbox": [148, 141, 139, 323], "area": 22837}, {"id": 8809577, "category_id": 35, "iscrowd": 0, "bbox": [176, 423, 92, 39], "area": 1899}, {"id": 13742766, "category_id": 159, "iscrowd": 0, "bbox": [0, 232, 480, 408], "area": 165617}, {"id": 6837075, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 293], "area": 105094}, {"id": 14598080, "category_id": 187, "iscrowd": 0, "bbox": [393, 0, 87, 143], "area": 9857}], "file_name": "000000556158.png", "image_id": 556158}, {"segments_info": [{"id": 855832, "category_id": 1, "iscrowd": 0, "bbox": [74, 60, 196, 266], "area": 20881}, {"id": 2961974, "category_id": 1, "iscrowd": 0, "bbox": [272, 36, 148, 297], "area": 30193}, {"id": 7171185, "category_id": 72, "iscrowd": 0, "bbox": [231, 162, 60, 108], "area": 4189}, {"id": 7113893, "category_id": 75, "iscrowd": 0, "bbox": [260, 178, 13, 9], "area": 79}, {"id": 4945040, "category_id": 75, "iscrowd": 0, "bbox": [303, 306, 12, 27], "area": 225}, {"id": 7709371, "category_id": 75, "iscrowd": 0, "bbox": [257, 169, 10, 9], "area": 48}, {"id": 526097, "category_id": 112, "iscrowd": 0, "bbox": [0, 76, 300, 257], "area": 17928}, {"id": 1918046, "category_id": 130, "iscrowd": 0, "bbox": [247, 62, 118, 18], "area": 376}, {"id": 4156810, "category_id": 176, "iscrowd": 0, "bbox": [192, 61, 225, 261], "area": 15124}, {"id": 1057858, "category_id": 177, "iscrowd": 0, "bbox": [62, 57, 438, 276], "area": 36894}, {"id": 3500683, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 120], "area": 34450}], "file_name": "000000556193.png", "image_id": 556193}, {"segments_info": [{"id": 6840404, "category_id": 130, "iscrowd": 0, "bbox": [316, 90, 132, 163], "area": 12698}, {"id": 6642516, "category_id": 181, "iscrowd": 0, "bbox": [225, 206, 312, 274], "area": 10403}, {"id": 7236195, "category_id": 184, "iscrowd": 0, "bbox": [0, 160, 343, 320], "area": 58950}, {"id": 16312270, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 237], "area": 91120}, {"id": 4870755, "category_id": 197, "iscrowd": 0, "bbox": [141, 0, 499, 480], "area": 125012}], "file_name": "000000556498.png", "image_id": 556498}, {"segments_info": [{"id": 4080455, "category_id": 22, "iscrowd": 0, "bbox": [231, 102, 323, 279], "area": 55141}, {"id": 10525062, "category_id": 148, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 218359}], "file_name": "000000556765.png", "image_id": 556765}, {"segments_info": [{"id": 11255226, "category_id": 61, "iscrowd": 0, "bbox": [99, 334, 145, 156], "area": 17492}, {"id": 7046535, "category_id": 119, "iscrowd": 0, "bbox": [0, 94, 427, 332], "area": 82206}, {"id": 3819601, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 427, 217], "area": 56932}, {"id": 14806253, "category_id": 187, "iscrowd": 0, "bbox": [263, 0, 164, 103], "area": 12586}, {"id": 4221800, "category_id": 193, "iscrowd": 0, "bbox": [0, 300, 427, 340], "area": 98377}], "file_name": "000000556873.png", "image_id": 556873}, {"segments_info": [{"id": 6848138, "category_id": 44, "iscrowd": 0, "bbox": [423, 293, 17, 20], "area": 194}, {"id": 7769763, "category_id": 44, "iscrowd": 0, "bbox": [494, 311, 9, 28], "area": 208}, {"id": 4803417, "category_id": 70, "iscrowd": 0, "bbox": [606, 371, 34, 76], "area": 2179}, {"id": 7638176, "category_id": 81, "iscrowd": 0, "bbox": [259, 356, 233, 124], "area": 18702}, {"id": 6455446, "category_id": 107, "iscrowd": 0, "bbox": [99, 307, 481, 173], "area": 36796}, {"id": 16447995, "category_id": 130, "iscrowd": 0, "bbox": [68, 0, 45, 364], "area": 9014}, {"id": 6059655, "category_id": 133, "iscrowd": 0, "bbox": [90, 0, 417, 385], "area": 132273}, {"id": 4148577, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 103195}], "file_name": "000000557172.png", "image_id": 557172}, {"segments_info": [{"id": 9021359, "category_id": 70, "iscrowd": 0, "bbox": [20, 182, 276, 310], "area": 70998}, {"id": 10074302, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 331, 500], "area": 59560}], "file_name": "000000557258.png", "image_id": 557258}, {"segments_info": [{"id": 9480103, "category_id": 81, "iscrowd": 0, "bbox": [416, 258, 102, 59], "area": 4105}, {"id": 10861755, "category_id": 81, "iscrowd": 0, "bbox": [332, 261, 96, 52], "area": 3993}, {"id": 7047799, "category_id": 133, "iscrowd": 0, "bbox": [0, 13, 107, 369], "area": 25965}, {"id": 6846314, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 401], "area": 157393}, {"id": 6015956, "category_id": 189, "iscrowd": 0, "bbox": [0, 289, 202, 191], "area": 29929}, {"id": 1845293, "category_id": 190, "iscrowd": 0, "bbox": [158, 357, 482, 123], "area": 42560}, {"id": 790893, "category_id": 199, "iscrowd": 0, "bbox": [501, 121, 139, 298], "area": 32579}], "file_name": "000000557501.png", "image_id": 557501}, {"segments_info": [{"id": 6707546, "category_id": 1, "iscrowd": 0, "bbox": [484, 197, 94, 206], "area": 8135}, {"id": 4206893, "category_id": 1, "iscrowd": 0, "bbox": [198, 42, 85, 108], "area": 2949}, {"id": 2893619, "category_id": 1, "iscrowd": 0, "bbox": [215, 39, 311, 390], "area": 68664}, {"id": 7186411, "category_id": 28, "iscrowd": 0, "bbox": [188, 20, 431, 241], "area": 53675}, {"id": 3025447, "category_id": 185, "iscrowd": 0, "bbox": [0, 145, 225, 288], "area": 46353}, {"id": 12829894, "category_id": 191, "iscrowd": 0, "bbox": [79, 265, 561, 168], "area": 21614}, {"id": 2958615, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 416], "area": 71495}], "file_name": "000000557672.png", "image_id": 557672}, {"segments_info": [{"id": 3953741, "category_id": 86, "iscrowd": 0, "bbox": [209, 141, 183, 386], "area": 40409}, {"id": 3496008, "category_id": 184, "iscrowd": 0, "bbox": [85, 56, 395, 523], "area": 37698}, {"id": 7178615, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 228867}], "file_name": "000000557884.png", "image_id": 557884}, {"segments_info": [{"id": 992596, "category_id": 1, "iscrowd": 0, "bbox": [144, 69, 386, 351], "area": 65710}, {"id": 3232649, "category_id": 65, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 154608}, {"id": 2574709, "category_id": 86, "iscrowd": 0, "bbox": [400, 1, 66, 75], "area": 3841}, {"id": 1651553, "category_id": 88, "iscrowd": 0, "bbox": [110, 89, 76, 94], "area": 4682}, {"id": 3371965, "category_id": 199, "iscrowd": 0, "bbox": [278, 0, 362, 183], "area": 34372}], "file_name": "000000557916.png", "image_id": 557916}, {"segments_info": [{"id": 4604495, "category_id": 17, "iscrowd": 0, "bbox": [122, 111, 243, 198], "area": 26786}, {"id": 12432315, "category_id": 109, "iscrowd": 0, "bbox": [395, 0, 105, 375], "area": 25291}], "file_name": "000000558073.png", "image_id": 558073}, {"segments_info": [{"id": 5194061, "category_id": 1, "iscrowd": 0, "bbox": [196, 239, 33, 42], "area": 794}, {"id": 7168375, "category_id": 1, "iscrowd": 0, "bbox": [546, 151, 94, 320], "area": 13004}, {"id": 9601169, "category_id": 1, "iscrowd": 0, "bbox": [273, 216, 25, 39], "area": 624}, {"id": 995916, "category_id": 1, "iscrowd": 0, "bbox": [555, 162, 28, 40], "area": 663}, {"id": 1251391, "category_id": 1, "iscrowd": 0, "bbox": [222, 193, 20, 46], "area": 616}, {"id": 740729, "category_id": 1, "iscrowd": 0, "bbox": [267, 197, 29, 31], "area": 493}, {"id": 921373, "category_id": 1, "iscrowd": 0, "bbox": [581, 162, 21, 41], "area": 571}, {"id": 6840698, "category_id": 1, "iscrowd": 0, "bbox": [1, 169, 68, 311], "area": 15188}, {"id": 7431807, "category_id": 1, "iscrowd": 0, "bbox": [441, 157, 117, 310], "area": 15593}, {"id": 800085, "category_id": 1, "iscrowd": 0, "bbox": [354, 127, 28, 30], "area": 550}, {"id": 1587021, "category_id": 1, "iscrowd": 0, "bbox": [593, 144, 15, 28], "area": 203}, {"id": 7039878, "category_id": 1, "iscrowd": 0, "bbox": [322, 180, 165, 300], "area": 16608}, {"id": 1973547, "category_id": 1, "iscrowd": 0, "bbox": [262, 175, 136, 291], "area": 16759}, {"id": 1578273, "category_id": 1, "iscrowd": 1, "bbox": [1, 6, 639, 273], "area": 91274}, {"id": 2698823, "category_id": 32, "iscrowd": 0, "bbox": [302, 217, 15, 41], "area": 163}, {"id": 2844581, "category_id": 47, "iscrowd": 0, "bbox": [156, 261, 11, 9], "area": 94}, {"id": 2038571, "category_id": 62, "iscrowd": 0, "bbox": [552, 235, 37, 53], "area": 1005}, {"id": 1708384, "category_id": 73, "iscrowd": 0, "bbox": [219, 256, 22, 12], "area": 254}, {"id": 4081510, "category_id": 138, "iscrowd": 0, "bbox": [536, 34, 60, 79], "area": 2738}, {"id": 4423342, "category_id": 145, "iscrowd": 0, "bbox": [0, 252, 640, 228], "area": 75507}, {"id": 1643289, "category_id": 161, "iscrowd": 0, "bbox": [181, 18, 196, 213], "area": 6262}], "file_name": "000000558114.png", "image_id": 558114}, {"segments_info": [{"id": 8884123, "category_id": 1, "iscrowd": 0, "bbox": [133, 250, 27, 74], "area": 1171}, {"id": 6711393, "category_id": 1, "iscrowd": 0, "bbox": [255, 216, 59, 137], "area": 4443}, {"id": 13356244, "category_id": 2, "iscrowd": 0, "bbox": [126, 289, 46, 28], "area": 461}, {"id": 2962736, "category_id": 7, "iscrowd": 0, "bbox": [315, 190, 325, 127], "area": 23499}, {"id": 7105386, "category_id": 41, "iscrowd": 0, "bbox": [121, 323, 21, 5], "area": 61}, {"id": 6387846, "category_id": 41, "iscrowd": 0, "bbox": [247, 344, 50, 17], "area": 232}, {"id": 11644849, "category_id": 184, "iscrowd": 0, "bbox": [323, 255, 17, 9], "area": 91}, {"id": 13675642, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 276], "area": 153697}, {"id": 11779792, "category_id": 190, "iscrowd": 0, "bbox": [0, 300, 640, 132], "area": 72043}, {"id": 7765107, "category_id": 197, "iscrowd": 0, "bbox": [0, 185, 341, 170], "area": 20312}], "file_name": "000000558213.png", "image_id": 558213}, {"segments_info": [{"id": 2433825, "category_id": 1, "iscrowd": 0, "bbox": [513, 275, 14, 12], "area": 96}, {"id": 4147032, "category_id": 7, "iscrowd": 0, "bbox": [300, 242, 233, 110], "area": 17292}, {"id": 12302517, "category_id": 16, "iscrowd": 0, "bbox": [609, 78, 5, 3], "area": 12}, {"id": 12438749, "category_id": 16, "iscrowd": 0, "bbox": [588, 72, 2, 3], "area": 5}, {"id": 12039090, "category_id": 16, "iscrowd": 0, "bbox": [548, 59, 4, 3], "area": 8}, {"id": 11977942, "category_id": 16, "iscrowd": 0, "bbox": [411, 22, 5, 2], "area": 7}, {"id": 12570584, "category_id": 16, "iscrowd": 0, "bbox": [393, 22, 5, 2], "area": 7}, {"id": 12567749, "category_id": 16, "iscrowd": 0, "bbox": [544, 53, 2, 2], "area": 4}, {"id": 12499903, "category_id": 16, "iscrowd": 0, "bbox": [580, 67, 4, 2], "area": 6}, {"id": 10722710, "category_id": 16, "iscrowd": 0, "bbox": [636, 94, 4, 3], "area": 5}, {"id": 12368312, "category_id": 16, "iscrowd": 0, "bbox": [591, 65, 5, 4], "area": 13}, {"id": 13027279, "category_id": 16, "iscrowd": 0, "bbox": [574, 58, 1, 2], "area": 2}, {"id": 12303811, "category_id": 16, "iscrowd": 0, "bbox": [402, 25, 3, 2], "area": 5}, {"id": 12829645, "category_id": 16, "iscrowd": 0, "bbox": [600, 75, 2, 1], "area": 2}, {"id": 12237494, "category_id": 16, "iscrowd": 1, "bbox": [126, 36, 502, 140], "area": 3479}, {"id": 5600645, "category_id": 95, "iscrowd": 0, "bbox": [152, 200, 155, 91], "area": 7851}, {"id": 3290424, "category_id": 147, "iscrowd": 0, "bbox": [0, 250, 640, 177], "area": 68222}, {"id": 4413547, "category_id": 184, "iscrowd": 0, "bbox": [0, 100, 640, 276], "area": 72335}, {"id": 12368308, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 221], "area": 103744}], "file_name": "000000558421.png", "image_id": 558421}, {"segments_info": [{"id": 6908806, "category_id": 3, "iscrowd": 0, "bbox": [515, 290, 113, 38], "area": 3100}, {"id": 13487601, "category_id": 10, "iscrowd": 0, "bbox": [258, 186, 23, 28], "area": 316}, {"id": 1641093, "category_id": 10, "iscrowd": 0, "bbox": [575, 108, 42, 27], "area": 443}, {"id": 9212884, "category_id": 10, "iscrowd": 0, "bbox": [200, 181, 23, 29], "area": 377}, {"id": 986399, "category_id": 10, "iscrowd": 0, "bbox": [628, 72, 12, 67], "area": 627}, {"id": 12699026, "category_id": 130, "iscrowd": 0, "bbox": [85, 107, 353, 185], "area": 6193}, {"id": 6385780, "category_id": 149, "iscrowd": 0, "bbox": [0, 281, 640, 199], "area": 91928}, {"id": 1645590, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 301], "area": 143292}, {"id": 3818048, "category_id": 197, "iscrowd": 0, "bbox": [0, 164, 640, 167], "area": 43061}], "file_name": "000000558558.png", "image_id": 558558}, {"segments_info": [{"id": 5131588, "category_id": 1, "iscrowd": 0, "bbox": [105, 2, 260, 43], "area": 6891}, {"id": 12369860, "category_id": 47, "iscrowd": 0, "bbox": [356, 12, 134, 189], "area": 17780}, {"id": 14013385, "category_id": 50, "iscrowd": 0, "bbox": [1, 138, 80, 52], "area": 1146}, {"id": 5067872, "category_id": 51, "iscrowd": 0, "bbox": [6, 143, 225, 169], "area": 27910}, {"id": 5799578, "category_id": 54, "iscrowd": 0, "bbox": [218, 19, 92, 70], "area": 4660}, {"id": 7115690, "category_id": 54, "iscrowd": 0, "bbox": [234, 189, 171, 138], "area": 18690}, {"id": 5726828, "category_id": 67, "iscrowd": 0, "bbox": [0, 11, 500, 362], "area": 95133}, {"id": 3291201, "category_id": 189, "iscrowd": 0, "bbox": [0, 54, 404, 321], "area": 4156}, {"id": 10392721, "category_id": 190, "iscrowd": 0, "bbox": [13, 0, 99, 62], "area": 3403}, {"id": 3486260, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 28, 63], "area": 1272}], "file_name": "000000558854.png", "image_id": 558854}, {"segments_info": [{"id": 1384486, "category_id": 21, "iscrowd": 0, "bbox": [437, 155, 20, 14], "area": 164}, {"id": 2108209, "category_id": 21, "iscrowd": 0, "bbox": [377, 160, 28, 17], "area": 312}, {"id": 924195, "category_id": 21, "iscrowd": 0, "bbox": [151, 165, 11, 13], "area": 88}, {"id": 3101041, "category_id": 21, "iscrowd": 0, "bbox": [588, 153, 26, 15], "area": 227}, {"id": 989727, "category_id": 21, "iscrowd": 0, "bbox": [334, 158, 20, 15], "area": 174}, {"id": 791317, "category_id": 21, "iscrowd": 0, "bbox": [274, 166, 27, 32], "area": 529}, {"id": 462095, "category_id": 21, "iscrowd": 0, "bbox": [25, 178, 101, 68], "area": 3078}, {"id": 857627, "category_id": 21, "iscrowd": 0, "bbox": [381, 180, 113, 111], "area": 6855}, {"id": 2767683, "category_id": 21, "iscrowd": 0, "bbox": [555, 152, 22, 15], "area": 195}, {"id": 1848639, "category_id": 21, "iscrowd": 0, "bbox": [364, 157, 9, 9], "area": 48}, {"id": 857109, "category_id": 21, "iscrowd": 0, "bbox": [108, 165, 25, 10], "area": 74}, {"id": 2570821, "category_id": 21, "iscrowd": 0, "bbox": [405, 155, 11, 12], "area": 87}, {"id": 1714479, "category_id": 21, "iscrowd": 0, "bbox": [427, 159, 11, 16], "area": 118}, {"id": 1845555, "category_id": 21, "iscrowd": 0, "bbox": [33, 169, 43, 17], "area": 462}, {"id": 792346, "category_id": 21, "iscrowd": 0, "bbox": [111, 165, 29, 21], "area": 355}, {"id": 922903, "category_id": 21, "iscrowd": 0, "bbox": [172, 164, 40, 27], "area": 572}, {"id": 3164506, "category_id": 21, "iscrowd": 0, "bbox": [492, 158, 12, 15], "area": 127}, {"id": 2047558, "category_id": 21, "iscrowd": 1, "bbox": [27, 140, 613, 39], "area": 3511}, {"id": 2567980, "category_id": 184, "iscrowd": 0, "bbox": [0, 134, 571, 35], "area": 4487}, {"id": 13605731, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 154], "area": 89642}, {"id": 7035463, "category_id": 192, "iscrowd": 0, "bbox": [499, 106, 141, 57], "area": 2694}, {"id": 2116689, "category_id": 193, "iscrowd": 0, "bbox": [0, 148, 640, 212], "area": 116046}], "file_name": "000000559099.png", "image_id": 559099}, {"segments_info": [{"id": 725881, "category_id": 1, "iscrowd": 0, "bbox": [207, 264, 31, 80], "area": 1023}, {"id": 1121843, "category_id": 1, "iscrowd": 0, "bbox": [89, 256, 34, 51], "area": 973}, {"id": 1521493, "category_id": 1, "iscrowd": 0, "bbox": [210, 191, 74, 81], "area": 2366}, {"id": 1452608, "category_id": 1, "iscrowd": 0, "bbox": [185, 179, 176, 409], "area": 34313}, {"id": 3100255, "category_id": 1, "iscrowd": 0, "bbox": [27, 230, 45, 57], "area": 1573}, {"id": 3953513, "category_id": 1, "iscrowd": 0, "bbox": [104, 211, 49, 105], "area": 2546}, {"id": 3760499, "category_id": 15, "iscrowd": 0, "bbox": [11, 258, 83, 35], "area": 397}, {"id": 924707, "category_id": 41, "iscrowd": 0, "bbox": [283, 395, 89, 181], "area": 7483}, {"id": 1977126, "category_id": 184, "iscrowd": 0, "bbox": [57, 95, 372, 302], "area": 25761}, {"id": 12833233, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 429, 276], "area": 90775}, {"id": 7048600, "category_id": 191, "iscrowd": 0, "bbox": [0, 421, 429, 219], "area": 43963}, {"id": 3890279, "category_id": 199, "iscrowd": 0, "bbox": [0, 271, 429, 294], "area": 61107}], "file_name": "000000559160.png", "image_id": 559160}, {"segments_info": [{"id": 7431798, "category_id": 1, "iscrowd": 0, "bbox": [495, 144, 30, 53], "area": 1046}, {"id": 4868441, "category_id": 1, "iscrowd": 0, "bbox": [145, 188, 74, 95], "area": 3174}, {"id": 5394791, "category_id": 1, "iscrowd": 0, "bbox": [433, 144, 28, 34], "area": 622}, {"id": 7893638, "category_id": 1, "iscrowd": 0, "bbox": [90, 137, 37, 37], "area": 821}, {"id": 5195087, "category_id": 1, "iscrowd": 0, "bbox": [301, 92, 34, 40], "area": 657}, {"id": 11511993, "category_id": 1, "iscrowd": 0, "bbox": [242, 172, 53, 117], "area": 3398}, {"id": 8357806, "category_id": 1, "iscrowd": 0, "bbox": [275, 125, 32, 49], "area": 657}, {"id": 8159636, "category_id": 1, "iscrowd": 0, "bbox": [34, 138, 40, 59], "area": 1492}, {"id": 8486543, "category_id": 1, "iscrowd": 0, "bbox": [29, 57, 18, 26], "area": 290}, {"id": 10921131, "category_id": 1, "iscrowd": 0, "bbox": [34, 267, 118, 191], "area": 8890}, {"id": 7372180, "category_id": 1, "iscrowd": 0, "bbox": [441, 125, 28, 36], "area": 458}, {"id": 8747398, "category_id": 1, "iscrowd": 0, "bbox": [388, 105, 29, 37], "area": 682}, {"id": 6905968, "category_id": 1, "iscrowd": 0, "bbox": [210, 202, 42, 79], "area": 2036}, {"id": 5525855, "category_id": 1, "iscrowd": 1, "bbox": [112, 122, 478, 83], "area": 6540}, {"id": 7170955, "category_id": 39, "iscrowd": 0, "bbox": [266, 145, 13, 30], "area": 89}, {"id": 4997967, "category_id": 40, "iscrowd": 0, "bbox": [229, 237, 17, 11], "area": 119}, {"id": 7957636, "category_id": 92, "iscrowd": 0, "bbox": [358, 153, 120, 84], "area": 4949}, {"id": 5535372, "category_id": 145, "iscrowd": 0, "bbox": [0, 225, 640, 255], "area": 143248}, {"id": 6051939, "category_id": 161, "iscrowd": 0, "bbox": [70, 0, 544, 212], "area": 27192}, {"id": 5525081, "category_id": 185, "iscrowd": 0, "bbox": [0, 139, 640, 101], "area": 23935}], "file_name": "000000559348.png", "image_id": 559348}, {"segments_info": [{"id": 7098991, "category_id": 44, "iscrowd": 0, "bbox": [294, 0, 78, 162], "area": 7906}, {"id": 8614008, "category_id": 44, "iscrowd": 0, "bbox": [168, 1, 112, 145], "area": 8645}, {"id": 16049350, "category_id": 48, "iscrowd": 0, "bbox": [356, 82, 284, 71], "area": 9016}, {"id": 14004658, "category_id": 49, "iscrowd": 0, "bbox": [430, 59, 210, 310], "area": 6782}, {"id": 15304256, "category_id": 67, "iscrowd": 0, "bbox": [0, 148, 80, 173], "area": 8005}, {"id": 7359035, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 421], "area": 24765}, {"id": 2432033, "category_id": 190, "iscrowd": 0, "bbox": [618, 153, 22, 15], "area": 215}, {"id": 4869485, "category_id": 196, "iscrowd": 0, "bbox": [38, 0, 602, 405], "area": 127824}], "file_name": "000000559513.png", "image_id": 559513}, {"segments_info": [{"id": 5132402, "category_id": 1, "iscrowd": 0, "bbox": [215, 120, 105, 210], "area": 14591}, {"id": 790805, "category_id": 62, "iscrowd": 0, "bbox": [62, 161, 169, 143], "area": 13614}, {"id": 593165, "category_id": 63, "iscrowd": 0, "bbox": [333, 162, 167, 171], "area": 20359}, {"id": 12104622, "category_id": 75, "iscrowd": 0, "bbox": [283, 184, 16, 19], "area": 180}, {"id": 329754, "category_id": 86, "iscrowd": 0, "bbox": [382, 120, 20, 54], "area": 711}, {"id": 1912128, "category_id": 100, "iscrowd": 0, "bbox": [288, 186, 119, 127], "area": 5217}, {"id": 1848404, "category_id": 109, "iscrowd": 0, "bbox": [247, 37, 30, 90], "area": 1657}, {"id": 6648189, "category_id": 112, "iscrowd": 0, "bbox": [168, 0, 135, 184], "area": 8034}, {"id": 2899278, "category_id": 130, "iscrowd": 0, "bbox": [9, 0, 277, 212], "area": 4268}, {"id": 4802384, "category_id": 141, "iscrowd": 0, "bbox": [213, 251, 16, 25], "area": 135}, {"id": 8559796, "category_id": 181, "iscrowd": 0, "bbox": [191, 37, 72, 138], "area": 5299}, {"id": 3034233, "category_id": 186, "iscrowd": 0, "bbox": [179, 11, 110, 29], "area": 1216}, {"id": 2047083, "category_id": 188, "iscrowd": 0, "bbox": [274, 101, 17, 51], "area": 446}, {"id": 659734, "category_id": 189, "iscrowd": 0, "bbox": [36, 236, 81, 52], "area": 1478}, {"id": 6451331, "category_id": 195, "iscrowd": 0, "bbox": [67, 245, 35, 17], "area": 319}, {"id": 3819609, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 315], "area": 56917}, {"id": 2306110, "category_id": 200, "iscrowd": 0, "bbox": [50, 255, 387, 78], "area": 11061}], "file_name": "000000559543.png", "image_id": 559543}, {"segments_info": [{"id": 9210249, "category_id": 1, "iscrowd": 0, "bbox": [456, 1, 184, 490], "area": 49409}, {"id": 8683904, "category_id": 1, "iscrowd": 0, "bbox": [211, 7, 178, 470], "area": 53133}, {"id": 8749954, "category_id": 1, "iscrowd": 0, "bbox": [0, 25, 201, 461], "area": 59997}, {"id": 6644321, "category_id": 37, "iscrowd": 0, "bbox": [464, 186, 24, 20], "area": 288}, {"id": 6249305, "category_id": 39, "iscrowd": 0, "bbox": [164, 301, 66, 190], "area": 2410}, {"id": 7894131, "category_id": 40, "iscrowd": 0, "bbox": [229, 320, 37, 64], "area": 1573}, {"id": 5591632, "category_id": 190, "iscrowd": 0, "bbox": [0, 433, 640, 58], "area": 17346}, {"id": 8749946, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 461], "area": 128887}], "file_name": "000000559547.png", "image_id": 559547}, {"segments_info": [{"id": 7702672, "category_id": 48, "iscrowd": 0, "bbox": [201, 45, 277, 116], "area": 9630}, {"id": 5611397, "category_id": 56, "iscrowd": 0, "bbox": [75, 392, 223, 209], "area": 27114}, {"id": 6665635, "category_id": 56, "iscrowd": 0, "bbox": [0, 252, 89, 115], "area": 5894}, {"id": 4685164, "category_id": 56, "iscrowd": 0, "bbox": [244, 236, 234, 243], "area": 30493}, {"id": 8299673, "category_id": 56, "iscrowd": 0, "bbox": [154, 62, 176, 165], "area": 18779}, {"id": 7434878, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 478, 640], "area": 5867}, {"id": 8102844, "category_id": 196, "iscrowd": 0, "bbox": [0, 109, 478, 434], "area": 89558}], "file_name": "000000559707.png", "image_id": 559707}, {"segments_info": [{"id": 5658025, "category_id": 1, "iscrowd": 0, "bbox": [334, 187, 80, 166], "area": 6362}, {"id": 4602482, "category_id": 1, "iscrowd": 0, "bbox": [476, 174, 45, 142], "area": 4253}, {"id": 10584712, "category_id": 1, "iscrowd": 0, "bbox": [257, 109, 57, 105], "area": 2737}, {"id": 6906276, "category_id": 1, "iscrowd": 0, "bbox": [327, 180, 33, 54], "area": 933}, {"id": 4868016, "category_id": 1, "iscrowd": 0, "bbox": [170, 185, 91, 152], "area": 5849}, {"id": 5853006, "category_id": 1, "iscrowd": 0, "bbox": [333, 99, 73, 120], "area": 4696}, {"id": 6576042, "category_id": 1, "iscrowd": 0, "bbox": [250, 174, 47, 134], "area": 3408}, {"id": 8619734, "category_id": 1, "iscrowd": 0, "bbox": [63, 186, 33, 84], "area": 938}, {"id": 5390919, "category_id": 1, "iscrowd": 0, "bbox": [294, 177, 53, 156], "area": 5463}, {"id": 7821908, "category_id": 1, "iscrowd": 0, "bbox": [552, 98, 71, 222], "area": 9388}, {"id": 6443130, "category_id": 1, "iscrowd": 0, "bbox": [14, 176, 81, 163], "area": 6501}, {"id": 11377822, "category_id": 1, "iscrowd": 0, "bbox": [468, 123, 76, 196], "area": 4951}, {"id": 4077417, "category_id": 1, "iscrowd": 0, "bbox": [409, 199, 47, 120], "area": 3947}, {"id": 7034703, "category_id": 1, "iscrowd": 1, "bbox": [0, 86, 640, 222], "area": 14944}, {"id": 12564665, "category_id": 37, "iscrowd": 0, "bbox": [293, 326, 35, 35], "area": 982}, {"id": 7959419, "category_id": 47, "iscrowd": 0, "bbox": [177, 141, 15, 22], "area": 216}, {"id": 9197124, "category_id": 62, "iscrowd": 0, "bbox": [125, 195, 57, 102], "area": 2970}, {"id": 6058101, "category_id": 62, "iscrowd": 0, "bbox": [17, 218, 6, 42], "area": 146}, {"id": 10454940, "category_id": 168, "iscrowd": 0, "bbox": [391, 189, 95, 54], "area": 1966}, {"id": 2963502, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 242], "area": 97056}, {"id": 8890546, "category_id": 193, "iscrowd": 0, "bbox": [0, 152, 640, 275], "area": 84761}], "file_name": "000000559842.png", "image_id": 559842}, {"segments_info": [{"id": 6249044, "category_id": 1, "iscrowd": 0, "bbox": [0, 65, 237, 407], "area": 44656}, {"id": 6972003, "category_id": 1, "iscrowd": 0, "bbox": [325, 1, 177, 203], "area": 21980}, {"id": 7105908, "category_id": 1, "iscrowd": 0, "bbox": [78, 6, 257, 296], "area": 30058}, {"id": 4085094, "category_id": 20, "iscrowd": 0, "bbox": [501, 52, 139, 243], "area": 17959}, {"id": 5994631, "category_id": 20, "iscrowd": 0, "bbox": [313, 94, 163, 378], "area": 43901}, {"id": 7179675, "category_id": 20, "iscrowd": 0, "bbox": [435, 132, 205, 343], "area": 50643}, {"id": 8684660, "category_id": 31, "iscrowd": 0, "bbox": [2, 232, 53, 243], "area": 10172}, {"id": 3222056, "category_id": 44, "iscrowd": 0, "bbox": [152, 397, 33, 39], "area": 837}, {"id": 4077886, "category_id": 44, "iscrowd": 0, "bbox": [245, 159, 27, 66], "area": 1182}, {"id": 7110787, "category_id": 189, "iscrowd": 0, "bbox": [483, 0, 157, 40], "area": 3486}, {"id": 3162700, "category_id": 194, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 63056}], "file_name": "000000559956.png", "image_id": 559956}, {"segments_info": [{"id": 1391455, "category_id": 51, "iscrowd": 0, "bbox": [127, 163, 161, 107], "area": 12219}, {"id": 660269, "category_id": 51, "iscrowd": 0, "bbox": [2, 114, 175, 133], "area": 18316}, {"id": 3614496, "category_id": 74, "iscrowd": 0, "bbox": [29, 284, 299, 111], "area": 17478}, {"id": 6323080, "category_id": 76, "iscrowd": 0, "bbox": [2, 326, 324, 167], "area": 42019}, {"id": 3953505, "category_id": 189, "iscrowd": 0, "bbox": [0, 183, 332, 317], "area": 24740}, {"id": 1914700, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 320, 155], "area": 35580}], "file_name": "000000560011.png", "image_id": 560011}, {"segments_info": [{"id": 8617870, "category_id": 1, "iscrowd": 0, "bbox": [1, 77, 278, 398], "area": 90543}, {"id": 2637346, "category_id": 56, "iscrowd": 0, "bbox": [272, 47, 105, 91], "area": 7189}, {"id": 3364401, "category_id": 56, "iscrowd": 0, "bbox": [364, 42, 207, 133], "area": 14606}, {"id": 8291795, "category_id": 57, "iscrowd": 0, "bbox": [233, 163, 184, 136], "area": 18040}, {"id": 2899492, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 616, 201], "area": 57018}, {"id": 10852214, "category_id": 191, "iscrowd": 0, "bbox": [220, 0, 420, 480], "area": 116219}], "file_name": "000000560178.png", "image_id": 560178}, {"segments_info": [{"id": 1997739, "category_id": 52, "iscrowd": 0, "bbox": [245, 233, 322, 176], "area": 34818}, {"id": 2458806, "category_id": 52, "iscrowd": 0, "bbox": [155, 329, 102, 73], "area": 3011}, {"id": 2325939, "category_id": 52, "iscrowd": 0, "bbox": [227, 333, 65, 74], "area": 1903}, {"id": 3250628, "category_id": 52, "iscrowd": 0, "bbox": [136, 411, 93, 55], "area": 2028}, {"id": 815004, "category_id": 52, "iscrowd": 0, "bbox": [150, 400, 56, 23], "area": 920}, {"id": 2130094, "category_id": 52, "iscrowd": 0, "bbox": [122, 317, 170, 158], "area": 5791}, {"id": 1513018, "category_id": 53, "iscrowd": 0, "bbox": [391, 126, 203, 77], "area": 5712}, {"id": 2169941, "category_id": 53, "iscrowd": 0, "bbox": [461, 169, 27, 24], "area": 486}, {"id": 3314090, "category_id": 53, "iscrowd": 0, "bbox": [226, 111, 27, 19], "area": 369}, {"id": 1801354, "category_id": 53, "iscrowd": 0, "bbox": [215, 92, 28, 30], "area": 502}, {"id": 3360123, "category_id": 53, "iscrowd": 0, "bbox": [242, 136, 33, 28], "area": 691}, {"id": 2636187, "category_id": 53, "iscrowd": 0, "bbox": [296, 80, 34, 17], "area": 458}, {"id": 3289474, "category_id": 53, "iscrowd": 0, "bbox": [161, 99, 22, 21], "area": 336}, {"id": 1249602, "category_id": 53, "iscrowd": 0, "bbox": [431, 148, 37, 31], "area": 571}, {"id": 2326675, "category_id": 53, "iscrowd": 0, "bbox": [240, 69, 26, 18], "area": 274}, {"id": 3841476, "category_id": 53, "iscrowd": 0, "bbox": [213, 63, 28, 27], "area": 425}, {"id": 1710423, "category_id": 53, "iscrowd": 0, "bbox": [508, 151, 74, 46], "area": 1061}, {"id": 3119289, "category_id": 53, "iscrowd": 0, "bbox": [196, 81, 28, 27], "area": 579}, {"id": 4552606, "category_id": 53, "iscrowd": 1, "bbox": [0, 63, 347, 166], "area": 10968}, {"id": 4566488, "category_id": 55, "iscrowd": 0, "bbox": [43, 293, 14, 14], "area": 140}, {"id": 2526161, "category_id": 55, "iscrowd": 0, "bbox": [42, 271, 19, 17], "area": 230}, {"id": 1796254, "category_id": 55, "iscrowd": 0, "bbox": [543, 401, 79, 73], "area": 3387}, {"id": 6796273, "category_id": 55, "iscrowd": 0, "bbox": [61, 272, 11, 5], "area": 29}, {"id": 4361949, "category_id": 55, "iscrowd": 0, "bbox": [72, 261, 15, 11], "area": 128}, {"id": 2325203, "category_id": 55, "iscrowd": 0, "bbox": [77, 245, 20, 15], "area": 218}, {"id": 677280, "category_id": 55, "iscrowd": 0, "bbox": [526, 328, 114, 96], "area": 6860}, {"id": 2783439, "category_id": 55, "iscrowd": 0, "bbox": [53, 246, 17, 18], "area": 155}, {"id": 608673, "category_id": 55, "iscrowd": 0, "bbox": [485, 396, 62, 52], "area": 2254}, {"id": 5662079, "category_id": 100, "iscrowd": 0, "bbox": [10, 16, 630, 464], "area": 91272}, {"id": 2440267, "category_id": 122, "iscrowd": 0, "bbox": [0, 0, 640, 430], "area": 47574}, {"id": 8683643, "category_id": 181, "iscrowd": 0, "bbox": [3, 0, 320, 92], "area": 8283}, {"id": 8355198, "category_id": 191, "iscrowd": 0, "bbox": [0, 283, 114, 197], "area": 11513}, {"id": 7304343, "category_id": 195, "iscrowd": 0, "bbox": [0, 6, 640, 446], "area": 3720}, {"id": 12632771, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 200, 152], "area": 17092}], "file_name": "000000560256.png", "image_id": 560256}, {"segments_info": [{"id": 3949904, "category_id": 23, "iscrowd": 0, "bbox": [78, 49, 243, 265], "area": 46153}, {"id": 4279900, "category_id": 23, "iscrowd": 0, "bbox": [296, 87, 342, 262], "area": 48439}, {"id": 6251362, "category_id": 178, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 169806}, {"id": 6980241, "category_id": 198, "iscrowd": 0, "bbox": [493, 0, 147, 79], "area": 7204}], "file_name": "000000560266.png", "image_id": 560266}, {"segments_info": [{"id": 12236218, "category_id": 44, "iscrowd": 0, "bbox": [325, 49, 45, 123], "area": 3272}, {"id": 11255744, "category_id": 70, "iscrowd": 0, "bbox": [182, 150, 253, 455], "area": 90567}, {"id": 8030874, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 612, 612], "area": 210542}, {"id": 2826048, "category_id": 190, "iscrowd": 0, "bbox": [67, 416, 490, 196], "area": 44761}, {"id": 12182241, "category_id": 195, "iscrowd": 0, "bbox": [0, 358, 52, 121], "area": 4951}], "file_name": "000000560279.png", "image_id": 560279}, {"segments_info": [{"id": 1646385, "category_id": 63, "iscrowd": 0, "bbox": [330, 330, 233, 87], "area": 13837}, {"id": 3288103, "category_id": 72, "iscrowd": 0, "bbox": [537, 174, 62, 38], "area": 2297}, {"id": 1514270, "category_id": 100, "iscrowd": 0, "bbox": [562, 350, 65, 32], "area": 1205}, {"id": 2831947, "category_id": 118, "iscrowd": 0, "bbox": [351, 384, 289, 41], "area": 4638}, {"id": 9473935, "category_id": 181, "iscrowd": 0, "bbox": [319, 63, 321, 211], "area": 39862}, {"id": 658705, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 68], "area": 23860}, {"id": 5198941, "category_id": 190, "iscrowd": 0, "bbox": [0, 362, 629, 63], "area": 13142}, {"id": 2501427, "category_id": 199, "iscrowd": 0, "bbox": [0, 31, 640, 371], "area": 106071}], "file_name": "000000560312.png", "image_id": 560312}, {"segments_info": [{"id": 7501684, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 273280}], "file_name": "000000560371.png", "image_id": 560371}, {"segments_info": [{"id": 7037540, "category_id": 1, "iscrowd": 0, "bbox": [0, 63, 26, 66], "area": 920}, {"id": 3686991, "category_id": 1, "iscrowd": 0, "bbox": [490, 26, 65, 66], "area": 1302}, {"id": 5526612, "category_id": 1, "iscrowd": 0, "bbox": [216, 44, 37, 54], "area": 1066}, {"id": 5196363, "category_id": 1, "iscrowd": 0, "bbox": [587, 13, 53, 72], "area": 1678}, {"id": 1316634, "category_id": 1, "iscrowd": 0, "bbox": [18, 35, 50, 96], "area": 2922}, {"id": 1185556, "category_id": 1, "iscrowd": 0, "bbox": [258, 262, 93, 128], "area": 9283}, {"id": 6578531, "category_id": 1, "iscrowd": 0, "bbox": [404, 52, 17, 29], "area": 162}, {"id": 7499366, "category_id": 1, "iscrowd": 0, "bbox": [564, 42, 58, 80], "area": 2942}, {"id": 2240313, "category_id": 1, "iscrowd": 0, "bbox": [343, 57, 49, 38], "area": 1295}, {"id": 5198406, "category_id": 3, "iscrowd": 0, "bbox": [0, 120, 640, 355], "area": 180101}, {"id": 7956564, "category_id": 28, "iscrowd": 0, "bbox": [487, 0, 152, 25], "area": 3144}, {"id": 9597758, "category_id": 90, "iscrowd": 0, "bbox": [464, 244, 35, 32], "area": 333}, {"id": 11384244, "category_id": 90, "iscrowd": 0, "bbox": [288, 149, 29, 44], "area": 246}, {"id": 8425114, "category_id": 90, "iscrowd": 0, "bbox": [347, 157, 64, 63], "area": 564}, {"id": 10661774, "category_id": 90, "iscrowd": 0, "bbox": [527, 290, 113, 102], "area": 1145}, {"id": 2171678, "category_id": 90, "iscrowd": 0, "bbox": [487, 273, 153, 145], "area": 2945}, {"id": 10328940, "category_id": 90, "iscrowd": 0, "bbox": [317, 142, 12, 42], "area": 202}, {"id": 8620935, "category_id": 90, "iscrowd": 0, "bbox": [114, 120, 44, 54], "area": 270}, {"id": 5853501, "category_id": 90, "iscrowd": 0, "bbox": [504, 51, 35, 148], "area": 2342}, {"id": 11835748, "category_id": 90, "iscrowd": 0, "bbox": [540, 284, 100, 93], "area": 1415}, {"id": 5132107, "category_id": 166, "iscrowd": 0, "bbox": [0, 0, 416, 38], "area": 7648}, {"id": 5920593, "category_id": 199, "iscrowd": 0, "bbox": [70, 0, 336, 58], "area": 5547}], "file_name": "000000560474.png", "image_id": 560474}, {"segments_info": [{"id": 5859428, "category_id": 1, "iscrowd": 0, "bbox": [241, 286, 27, 91], "area": 1567}, {"id": 5464671, "category_id": 18, "iscrowd": 0, "bbox": [280, 352, 26, 35], "area": 648}, {"id": 4147267, "category_id": 19, "iscrowd": 0, "bbox": [134, 269, 53, 130], "area": 4435}, {"id": 4410696, "category_id": 19, "iscrowd": 0, "bbox": [189, 267, 62, 127], "area": 4642}, {"id": 5530721, "category_id": 184, "iscrowd": 0, "bbox": [306, 0, 334, 340], "area": 35842}, {"id": 7044732, "category_id": 185, "iscrowd": 0, "bbox": [253, 310, 387, 77], "area": 16777}, {"id": 9545641, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 272], "area": 139836}, {"id": 7044989, "category_id": 192, "iscrowd": 0, "bbox": [0, 223, 342, 88], "area": 14935}, {"id": 7242368, "category_id": 193, "iscrowd": 0, "bbox": [0, 263, 640, 105], "area": 14911}], "file_name": "000000560880.png", "image_id": 560880}, {"segments_info": [{"id": 3560308, "category_id": 1, "iscrowd": 0, "bbox": [122, 38, 232, 560], "area": 74204}, {"id": 7434100, "category_id": 33, "iscrowd": 0, "bbox": [0, 270, 135, 76], "area": 8864}, {"id": 8361884, "category_id": 33, "iscrowd": 0, "bbox": [0, 344, 164, 290], "area": 43083}, {"id": 3363441, "category_id": 63, "iscrowd": 0, "bbox": [6, 135, 475, 322], "area": 57294}, {"id": 7710411, "category_id": 77, "iscrowd": 0, "bbox": [228, 126, 23, 21], "area": 388}, {"id": 11582664, "category_id": 190, "iscrowd": 0, "bbox": [0, 449, 481, 191], "area": 47668}, {"id": 6787228, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 481, 206], "area": 62970}], "file_name": "000000560911.png", "image_id": 560911}, {"segments_info": [{"id": 4082008, "category_id": 16, "iscrowd": 0, "bbox": [242, 155, 157, 268], "area": 32975}, {"id": 6584963, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 116243}], "file_name": "000000561009.png", "image_id": 561009}, {"segments_info": [{"id": 5198460, "category_id": 1, "iscrowd": 0, "bbox": [285, 174, 119, 157], "area": 9333}, {"id": 13753063, "category_id": 42, "iscrowd": 0, "bbox": [284, 320, 97, 31], "area": 1619}, {"id": 11512482, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 262142}], "file_name": "000000561223.png", "image_id": 561223}, {"segments_info": [{"id": 2966376, "category_id": 1, "iscrowd": 0, "bbox": [321, 120, 213, 353], "area": 52716}, {"id": 7317169, "category_id": 81, "iscrowd": 0, "bbox": [511, 308, 25, 44], "area": 670}, {"id": 6988717, "category_id": 81, "iscrowd": 0, "bbox": [524, 308, 112, 41], "area": 3528}, {"id": 16448764, "category_id": 130, "iscrowd": 0, "bbox": [106, 65, 55, 41], "area": 1604}, {"id": 7253687, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 172941}, {"id": 6074561, "category_id": 186, "iscrowd": 0, "bbox": [107, 0, 533, 105], "area": 40188}, {"id": 3764356, "category_id": 188, "iscrowd": 0, "bbox": [484, 348, 153, 109], "area": 12495}, {"id": 1916766, "category_id": 190, "iscrowd": 0, "bbox": [126, 340, 514, 140], "area": 16709}], "file_name": "000000561256.png", "image_id": 561256}, {"segments_info": [{"id": 3230779, "category_id": 9, "iscrowd": 0, "bbox": [247, 165, 139, 152], "area": 13907}, {"id": 3099717, "category_id": 9, "iscrowd": 0, "bbox": [210, 69, 115, 97], "area": 7787}, {"id": 3560779, "category_id": 144, "iscrowd": 0, "bbox": [223, 239, 71, 64], "area": 2549}, {"id": 927008, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 376], "area": 109544}, {"id": 1453369, "category_id": 194, "iscrowd": 0, "bbox": [0, 98, 500, 278], "area": 39003}], "file_name": "000000561335.png", "image_id": 561335}, {"segments_info": [{"id": 7573147, "category_id": 76, "iscrowd": 0, "bbox": [85, 8, 555, 158], "area": 32138}, {"id": 7230534, "category_id": 77, "iscrowd": 0, "bbox": [353, 90, 248, 169], "area": 20190}, {"id": 2175802, "category_id": 100, "iscrowd": 0, "bbox": [521, 0, 119, 107], "area": 4092}, {"id": 1786227, "category_id": 189, "iscrowd": 0, "bbox": [0, 39, 640, 441], "area": 135456}, {"id": 7112598, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 194, 193], "area": 19078}], "file_name": "000000561366.png", "image_id": 561366}, {"segments_info": [{"id": 1784433, "category_id": 60, "iscrowd": 0, "bbox": [60, 15, 178, 164], "area": 23108}, {"id": 927079, "category_id": 60, "iscrowd": 0, "bbox": [16, 138, 54, 43], "area": 1068}, {"id": 2310778, "category_id": 60, "iscrowd": 0, "bbox": [224, 49, 186, 168], "area": 24227}, {"id": 2247297, "category_id": 60, "iscrowd": 0, "bbox": [1, 2, 74, 169], "area": 9660}, {"id": 1122660, "category_id": 61, "iscrowd": 0, "bbox": [368, 317, 244, 288], "area": 46347}, {"id": 1780033, "category_id": 67, "iscrowd": 0, "bbox": [0, 206, 338, 406], "area": 54546}, {"id": 1716062, "category_id": 100, "iscrowd": 0, "bbox": [0, 0, 533, 287], "area": 70356}, {"id": 858669, "category_id": 189, "iscrowd": 0, "bbox": [0, 52, 612, 214], "area": 15231}, {"id": 1979771, "category_id": 196, "iscrowd": 0, "bbox": [0, 41, 612, 571], "area": 10615}], "file_name": "000000561465.png", "image_id": 561465}, {"segments_info": [{"id": 1446416, "category_id": 3, "iscrowd": 0, "bbox": [246, 324, 46, 26], "area": 808}, {"id": 3287859, "category_id": 128, "iscrowd": 0, "bbox": [0, 123, 162, 208], "area": 19019}, {"id": 5193266, "category_id": 149, "iscrowd": 0, "bbox": [0, 296, 308, 184], "area": 20246}, {"id": 2371634, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 162406}, {"id": 15065825, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 225, 88], "area": 7238}, {"id": 5455921, "category_id": 191, "iscrowd": 0, "bbox": [334, 322, 137, 158], "area": 9473}, {"id": 2238763, "category_id": 193, "iscrowd": 0, "bbox": [0, 297, 539, 183], "area": 22531}], "file_name": "000000561679.png", "image_id": 561679}, {"segments_info": [{"id": 5591892, "category_id": 48, "iscrowd": 0, "bbox": [313, 54, 299, 206], "area": 4672}, {"id": 2433311, "category_id": 49, "iscrowd": 0, "bbox": [450, 13, 107, 374], "area": 1655}, {"id": 2843764, "category_id": 56, "iscrowd": 0, "bbox": [358, 264, 74, 100], "area": 4973}, {"id": 4031639, "category_id": 56, "iscrowd": 0, "bbox": [251, 322, 126, 124], "area": 9999}, {"id": 2181010, "category_id": 57, "iscrowd": 0, "bbox": [336, 403, 25, 38], "area": 485}, {"id": 2316447, "category_id": 57, "iscrowd": 0, "bbox": [375, 344, 30, 48], "area": 646}, {"id": 1791667, "category_id": 57, "iscrowd": 0, "bbox": [347, 255, 47, 43], "area": 1016}, {"id": 2048133, "category_id": 57, "iscrowd": 0, "bbox": [220, 380, 47, 50], "area": 1592}, {"id": 5538991, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 525, 452], "area": 116000}], "file_name": "000000561889.png", "image_id": 561889}, {"segments_info": [{"id": 4471665, "category_id": 1, "iscrowd": 0, "bbox": [278, 230, 54, 102], "area": 2782}, {"id": 6316912, "category_id": 1, "iscrowd": 0, "bbox": [232, 174, 42, 122], "area": 3043}, {"id": 8877161, "category_id": 1, "iscrowd": 0, "bbox": [274, 183, 19, 61], "area": 789}, {"id": 5198691, "category_id": 1, "iscrowd": 0, "bbox": [153, 179, 17, 63], "area": 796}, {"id": 7105389, "category_id": 1, "iscrowd": 0, "bbox": [130, 178, 22, 70], "area": 1017}, {"id": 3033680, "category_id": 1, "iscrowd": 0, "bbox": [166, 183, 32, 63], "area": 1037}, {"id": 3222067, "category_id": 1, "iscrowd": 0, "bbox": [359, 223, 89, 201], "area": 8196}, {"id": 4344150, "category_id": 1, "iscrowd": 0, "bbox": [449, 158, 46, 132], "area": 2653}, {"id": 3223858, "category_id": 1, "iscrowd": 0, "bbox": [105, 171, 19, 76], "area": 1047}, {"id": 2963519, "category_id": 1, "iscrowd": 0, "bbox": [320, 171, 71, 156], "area": 5350}, {"id": 2368549, "category_id": 1, "iscrowd": 0, "bbox": [489, 188, 27, 65], "area": 897}, {"id": 4408135, "category_id": 1, "iscrowd": 1, "bbox": [1, 164, 639, 107], "area": 14654}, {"id": 4210774, "category_id": 35, "iscrowd": 0, "bbox": [203, 206, 24, 83], "area": 609}, {"id": 7304052, "category_id": 35, "iscrowd": 0, "bbox": [491, 231, 10, 22], "area": 141}, {"id": 3223603, "category_id": 35, "iscrowd": 0, "bbox": [120, 215, 13, 21], "area": 68}, {"id": 4277832, "category_id": 35, "iscrowd": 0, "bbox": [443, 206, 30, 16], "area": 123}, {"id": 4014142, "category_id": 35, "iscrowd": 0, "bbox": [436, 174, 43, 110], "area": 778}, {"id": 4473931, "category_id": 35, "iscrowd": 0, "bbox": [163, 189, 11, 43], "area": 125}, {"id": 5198933, "category_id": 35, "iscrowd": 0, "bbox": [558, 174, 53, 36], "area": 141}, {"id": 6250078, "category_id": 35, "iscrowd": 0, "bbox": [145, 219, 7, 28], "area": 106}, {"id": 5593432, "category_id": 35, "iscrowd": 0, "bbox": [335, 141, 49, 89], "area": 249}, {"id": 5328720, "category_id": 35, "iscrowd": 0, "bbox": [602, 186, 9, 41], "area": 138}, {"id": 5921897, "category_id": 36, "iscrowd": 0, "bbox": [243, 242, 8, 46], "area": 292}, {"id": 5523515, "category_id": 36, "iscrowd": 0, "bbox": [420, 180, 18, 80], "area": 419}, {"id": 2434624, "category_id": 36, "iscrowd": 0, "bbox": [197, 178, 31, 113], "area": 420}, {"id": 4870475, "category_id": 36, "iscrowd": 0, "bbox": [326, 139, 25, 35], "area": 346}, {"id": 12303033, "category_id": 159, "iscrowd": 0, "bbox": [0, 49, 640, 431], "area": 139095}, {"id": 9671569, "category_id": 184, "iscrowd": 0, "bbox": [29, 0, 346, 104], "area": 14833}, {"id": 12565688, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 70], "area": 20531}, {"id": 7237488, "category_id": 197, "iscrowd": 0, "bbox": [0, 15, 640, 218], "area": 80457}], "file_name": "000000561958.png", "image_id": 561958}, {"segments_info": [{"id": 7042190, "category_id": 47, "iscrowd": 0, "bbox": [3, 66, 194, 243], "area": 31317}, {"id": 9083306, "category_id": 50, "iscrowd": 0, "bbox": [202, 372, 225, 170], "area": 12465}, {"id": 6584225, "category_id": 51, "iscrowd": 0, "bbox": [125, 128, 302, 302], "area": 70479}, {"id": 4215976, "category_id": 53, "iscrowd": 0, "bbox": [1, 288, 145, 148], "area": 18080}, {"id": 8231119, "category_id": 53, "iscrowd": 0, "bbox": [227, 53, 147, 117], "area": 14627}, {"id": 4670292, "category_id": 67, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 57447}, {"id": 3946825, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 427, 640], "area": 3764}, {"id": 7494274, "category_id": 195, "iscrowd": 0, "bbox": [0, 39, 427, 586], "area": 59653}], "file_name": "000000562059.png", "image_id": 562059}, {"segments_info": [{"id": 7835322, "category_id": 24, "iscrowd": 0, "bbox": [319, 203, 120, 184], "area": 6723}, {"id": 7835063, "category_id": 24, "iscrowd": 0, "bbox": [363, 201, 119, 193], "area": 7602}, {"id": 7506351, "category_id": 24, "iscrowd": 0, "bbox": [142, 227, 16, 22], "area": 225}, {"id": 4086376, "category_id": 184, "iscrowd": 0, "bbox": [0, 100, 640, 261], "area": 96213}, {"id": 14536894, "category_id": 187, "iscrowd": 0, "bbox": [6, 0, 634, 103], "area": 57096}, {"id": 7823947, "category_id": 192, "iscrowd": 0, "bbox": [0, 71, 640, 86], "area": 27397}, {"id": 7115460, "category_id": 193, "iscrowd": 0, "bbox": [0, 214, 640, 232], "area": 76032}, {"id": 6783928, "category_id": 194, "iscrowd": 0, "bbox": [0, 405, 640, 49], "area": 16462}], "file_name": "000000562121.png", "image_id": 562121}, {"segments_info": [{"id": 3377785, "category_id": 56, "iscrowd": 0, "bbox": [323, 9, 305, 300], "area": 67401}, {"id": 4741237, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 640], "area": 292599}], "file_name": "000000562197.png", "image_id": 562197}, {"segments_info": [{"id": 6249567, "category_id": 1, "iscrowd": 0, "bbox": [373, 203, 54, 165], "area": 5996}, {"id": 6843514, "category_id": 1, "iscrowd": 0, "bbox": [102, 193, 81, 232], "area": 9733}, {"id": 6973807, "category_id": 1, "iscrowd": 0, "bbox": [181, 201, 90, 210], "area": 6741}, {"id": 3948871, "category_id": 22, "iscrowd": 0, "bbox": [209, 64, 201, 344], "area": 45585}, {"id": 2104344, "category_id": 51, "iscrowd": 0, "bbox": [171, 315, 37, 36], "area": 1023}, {"id": 11249317, "category_id": 148, "iscrowd": 0, "bbox": [0, 207, 640, 218], "area": 44591}, {"id": 3758145, "category_id": 184, "iscrowd": 0, "bbox": [0, 142, 640, 105], "area": 23989}, {"id": 16051171, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 150], "area": 77628}, {"id": 7234625, "category_id": 192, "iscrowd": 0, "bbox": [0, 112, 628, 81], "area": 17633}, {"id": 6649213, "category_id": 194, "iscrowd": 0, "bbox": [144, 286, 496, 139], "area": 38192}], "file_name": "000000562207.png", "image_id": 562207}, {"segments_info": [{"id": 8552394, "category_id": 1, "iscrowd": 0, "bbox": [275, 124, 181, 444], "area": 33166}, {"id": 5460634, "category_id": 1, "iscrowd": 0, "bbox": [502, 256, 14, 30], "area": 276}, {"id": 5460387, "category_id": 1, "iscrowd": 0, "bbox": [485, 257, 25, 33], "area": 382}, {"id": 2038661, "category_id": 41, "iscrowd": 0, "bbox": [255, 500, 163, 88], "area": 2612}, {"id": 9210805, "category_id": 128, "iscrowd": 0, "bbox": [60, 16, 482, 262], "area": 46878}, {"id": 5197170, "category_id": 144, "iscrowd": 0, "bbox": [518, 257, 122, 31], "area": 2057}, {"id": 2105679, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 262], "area": 80122}, {"id": 1973108, "category_id": 185, "iscrowd": 0, "bbox": [0, 222, 640, 66], "area": 14632}, {"id": 15197927, "category_id": 187, "iscrowd": 0, "bbox": [172, 0, 468, 117], "area": 18730}, {"id": 6645127, "category_id": 191, "iscrowd": 0, "bbox": [0, 256, 640, 384], "area": 208230}, {"id": 7632596, "category_id": 199, "iscrowd": 0, "bbox": [257, 261, 27, 14], "area": 282}], "file_name": "000000562229.png", "image_id": 562229}, {"segments_info": [{"id": 3219783, "category_id": 1, "iscrowd": 0, "bbox": [86, 59, 479, 571], "area": 155815}, {"id": 5587527, "category_id": 32, "iscrowd": 0, "bbox": [289, 347, 93, 293], "area": 15538}, {"id": 4012340, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 640], "area": 233312}], "file_name": "000000562243.png", "image_id": 562243}, {"segments_info": [{"id": 8619144, "category_id": 24, "iscrowd": 0, "bbox": [70, 2, 434, 434], "area": 121654}, {"id": 6447710, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 640, 341], "area": 96348}, {"id": 5740914, "category_id": 193, "iscrowd": 0, "bbox": [0, 284, 640, 196], "area": 76593}, {"id": 7761259, "category_id": 194, "iscrowd": 0, "bbox": [0, 303, 640, 73], "area": 10900}], "file_name": "000000562443.png", "image_id": 562443}, {"segments_info": [{"id": 138275, "category_id": 1, "iscrowd": 0, "bbox": [90, 209, 20, 26], "area": 270}, {"id": 271146, "category_id": 1, "iscrowd": 0, "bbox": [108, 206, 18, 29], "area": 299}, {"id": 2773851, "category_id": 6, "iscrowd": 0, "bbox": [26, 165, 446, 142], "area": 50348}, {"id": 15307936, "category_id": 130, "iscrowd": 0, "bbox": [591, 190, 49, 27], "area": 1124}, {"id": 869209, "category_id": 149, "iscrowd": 0, "bbox": [0, 279, 640, 201], "area": 117136}, {"id": 2453131, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 312], "area": 137674}], "file_name": "000000562448.png", "image_id": 562448}, {"segments_info": [{"id": 4217219, "category_id": 18, "iscrowd": 0, "bbox": [193, 44, 414, 429], "area": 64102}, {"id": 3947578, "category_id": 18, "iscrowd": 0, "bbox": [91, 181, 163, 229], "area": 20095}, {"id": 2569288, "category_id": 28, "iscrowd": 0, "bbox": [199, 157, 118, 85], "area": 4981}, {"id": 9540754, "category_id": 138, "iscrowd": 0, "bbox": [0, 365, 123, 115], "area": 7192}, {"id": 8551526, "category_id": 184, "iscrowd": 0, "bbox": [126, 0, 165, 211], "area": 15201}, {"id": 3884628, "category_id": 185, "iscrowd": 0, "bbox": [0, 72, 640, 331], "area": 36829}, {"id": 16116953, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 243], "area": 72830}, {"id": 3814961, "category_id": 190, "iscrowd": 0, "bbox": [619, 431, 21, 25], "area": 216}, {"id": 2179631, "category_id": 193, "iscrowd": 0, "bbox": [0, 175, 640, 305], "area": 52687}, {"id": 4610136, "category_id": 194, "iscrowd": 0, "bbox": [0, 124, 613, 306], "area": 4329}, {"id": 5597042, "category_id": 197, "iscrowd": 0, "bbox": [528, 151, 112, 141], "area": 8440}, {"id": 4674407, "category_id": 198, "iscrowd": 0, "bbox": [207, 208, 90, 83], "area": 2903}, {"id": 2894116, "category_id": 199, "iscrowd": 0, "bbox": [609, 336, 31, 101], "area": 1950}], "file_name": "000000562561.png", "image_id": 562561}, {"segments_info": [{"id": 11582922, "category_id": 1, "iscrowd": 0, "bbox": [45, 82, 87, 112], "area": 3049}, {"id": 8763834, "category_id": 37, "iscrowd": 0, "bbox": [222, 153, 6, 7], "area": 35}, {"id": 8959671, "category_id": 37, "iscrowd": 0, "bbox": [549, 300, 7, 6], "area": 26}, {"id": 9813190, "category_id": 43, "iscrowd": 0, "bbox": [50, 69, 23, 41], "area": 263}, {"id": 6974068, "category_id": 138, "iscrowd": 0, "bbox": [27, 304, 416, 140], "area": 22914}, {"id": 7237763, "category_id": 145, "iscrowd": 0, "bbox": [0, 0, 640, 444], "area": 244949}, {"id": 6582673, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 71, 20], "area": 1194}, {"id": 3883570, "category_id": 199, "iscrowd": 0, "bbox": [331, 0, 309, 69], "area": 11600}], "file_name": "000000562581.png", "image_id": 562581}, {"segments_info": [{"id": 6441571, "category_id": 1, "iscrowd": 0, "bbox": [633, 283, 7, 19], "area": 103}, {"id": 4994903, "category_id": 1, "iscrowd": 0, "bbox": [514, 240, 4, 10], "area": 30}, {"id": 7429484, "category_id": 1, "iscrowd": 0, "bbox": [549, 219, 5, 9], "area": 26}, {"id": 4076336, "category_id": 1, "iscrowd": 0, "bbox": [322, 234, 7, 18], "area": 81}, {"id": 5325634, "category_id": 1, "iscrowd": 0, "bbox": [190, 255, 9, 24], "area": 128}, {"id": 5719095, "category_id": 1, "iscrowd": 0, "bbox": [469, 238, 1, 3], "area": 3}, {"id": 8020590, "category_id": 1, "iscrowd": 0, "bbox": [520, 229, 4, 7], "area": 13}, {"id": 6581586, "category_id": 1, "iscrowd": 0, "bbox": [510, 239, 3, 6], "area": 6}, {"id": 5258809, "category_id": 1, "iscrowd": 0, "bbox": [448, 231, 8, 11], "area": 53}, {"id": 2630198, "category_id": 1, "iscrowd": 0, "bbox": [518, 244, 4, 16], "area": 42}, {"id": 3812147, "category_id": 1, "iscrowd": 0, "bbox": [508, 239, 6, 14], "area": 47}, {"id": 5195078, "category_id": 1, "iscrowd": 0, "bbox": [304, 282, 21, 35], "area": 322}, {"id": 5329740, "category_id": 1, "iscrowd": 0, "bbox": [483, 238, 6, 10], "area": 34}, {"id": 9271664, "category_id": 1, "iscrowd": 1, "bbox": [353, 229, 181, 40], "area": 860}, {"id": 11246489, "category_id": 27, "iscrowd": 0, "bbox": [304, 293, 4, 9], "area": 27}, {"id": 7691604, "category_id": 35, "iscrowd": 0, "bbox": [511, 264, 15, 2], "area": 21}, {"id": 8087142, "category_id": 35, "iscrowd": 0, "bbox": [446, 241, 5, 1], "area": 5}, {"id": 8083790, "category_id": 35, "iscrowd": 0, "bbox": [480, 257, 15, 1], "area": 12}, {"id": 9602436, "category_id": 35, "iscrowd": 0, "bbox": [192, 278, 10, 3], "area": 17}, {"id": 6576981, "category_id": 36, "iscrowd": 0, "bbox": [357, 246, 7, 1], "area": 7}, {"id": 6245962, "category_id": 36, "iscrowd": 0, "bbox": [304, 314, 15, 5], "area": 33}, {"id": 7891041, "category_id": 36, "iscrowd": 0, "bbox": [486, 263, 5, 2], "area": 8}, {"id": 8218204, "category_id": 36, "iscrowd": 0, "bbox": [510, 264, 19, 2], "area": 16}, {"id": 3876648, "category_id": 36, "iscrowd": 0, "bbox": [506, 253, 8, 1], "area": 8}, {"id": 10851468, "category_id": 159, "iscrowd": 0, "bbox": [0, 174, 640, 306], "area": 175548}, {"id": 10978930, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 250], "area": 125009}, {"id": 5984848, "category_id": 192, "iscrowd": 0, "bbox": [278, 138, 164, 61], "area": 4603}], "file_name": "000000562818.png", "image_id": 562818}, {"segments_info": [{"id": 8949644, "category_id": 47, "iscrowd": 0, "bbox": [213, 8, 274, 225], "area": 43801}, {"id": 5260341, "category_id": 77, "iscrowd": 0, "bbox": [68, 179, 175, 81], "area": 11948}, {"id": 4868206, "category_id": 87, "iscrowd": 0, "bbox": [88, 244, 412, 119], "area": 22340}, {"id": 11185064, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 78433}, {"id": 3228488, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 500, 160], "area": 11742}, {"id": 15641444, "category_id": 195, "iscrowd": 0, "bbox": [0, 9, 58, 120], "area": 3878}], "file_name": "000000562843.png", "image_id": 562843}, {"segments_info": [{"id": 8761282, "category_id": 1, "iscrowd": 0, "bbox": [224, 97, 64, 152], "area": 4801}, {"id": 5406084, "category_id": 1, "iscrowd": 0, "bbox": [240, 34, 150, 336], "area": 30661}, {"id": 3760739, "category_id": 44, "iscrowd": 0, "bbox": [435, 211, 15, 56], "area": 652}, {"id": 3830648, "category_id": 44, "iscrowd": 0, "bbox": [398, 212, 15, 55], "area": 553}, {"id": 2243904, "category_id": 44, "iscrowd": 0, "bbox": [417, 201, 11, 29], "area": 200}, {"id": 7841433, "category_id": 47, "iscrowd": 0, "bbox": [453, 249, 14, 15], "area": 185}, {"id": 9682638, "category_id": 67, "iscrowd": 0, "bbox": [180, 224, 320, 126], "area": 9207}, {"id": 6918997, "category_id": 72, "iscrowd": 0, "bbox": [469, 94, 30, 89], "area": 2233}, {"id": 13754338, "category_id": 75, "iscrowd": 0, "bbox": [246, 297, 14, 21], "area": 199}, {"id": 6725294, "category_id": 118, "iscrowd": 0, "bbox": [0, 277, 478, 98], "area": 20740}, {"id": 2381936, "category_id": 171, "iscrowd": 0, "bbox": [0, 0, 500, 328], "area": 63331}, {"id": 1780775, "category_id": 181, "iscrowd": 0, "bbox": [457, 14, 43, 182], "area": 4736}, {"id": 6395546, "category_id": 199, "iscrowd": 0, "bbox": [0, 280, 195, 70], "area": 2829}], "file_name": "000000563267.png", "image_id": 563267}, {"segments_info": [{"id": 8229810, "category_id": 1, "iscrowd": 0, "bbox": [113, 2, 141, 492], "area": 50199}, {"id": 7974354, "category_id": 90, "iscrowd": 0, "bbox": [233, 171, 30, 49], "area": 414}, {"id": 9477810, "category_id": 109, "iscrowd": 0, "bbox": [348, 0, 141, 197], "area": 22541}, {"id": 7965601, "category_id": 168, "iscrowd": 0, "bbox": [0, 75, 117, 105], "area": 8527}, {"id": 6325165, "category_id": 190, "iscrowd": 0, "bbox": [0, 291, 489, 209], "area": 57919}], "file_name": "000000563281.png", "image_id": 563281}, {"segments_info": [{"id": 3031090, "category_id": 1, "iscrowd": 0, "bbox": [185, 248, 179, 165], "area": 12107}, {"id": 4633963, "category_id": 36, "iscrowd": 0, "bbox": [360, 301, 31, 139], "area": 3373}, {"id": 14736862, "category_id": 159, "iscrowd": 0, "bbox": [0, 350, 427, 290], "area": 116288}, {"id": 10126711, "category_id": 184, "iscrowd": 0, "bbox": [0, 261, 427, 97], "area": 20368}, {"id": 14341588, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 427, 303], "area": 106256}], "file_name": "000000563349.png", "image_id": 563349}, {"segments_info": [{"id": 4012603, "category_id": 1, "iscrowd": 0, "bbox": [87, 94, 129, 229], "area": 16759}, {"id": 6441496, "category_id": 39, "iscrowd": 0, "bbox": [105, 191, 12, 147], "area": 1397}, {"id": 2038293, "category_id": 62, "iscrowd": 0, "bbox": [11, 11, 47, 90], "area": 2251}, {"id": 2300690, "category_id": 62, "iscrowd": 0, "bbox": [2, 8, 40, 17], "area": 395}, {"id": 11572080, "category_id": 148, "iscrowd": 0, "bbox": [81, 0, 57, 29], "area": 1281}, {"id": 12955799, "category_id": 178, "iscrowd": 0, "bbox": [305, 0, 335, 89], "area": 16361}, {"id": 7432279, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 632, 91], "area": 24911}, {"id": 4609120, "category_id": 193, "iscrowd": 0, "bbox": [0, 72, 640, 355], "area": 192812}, {"id": 4076062, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 209, 153], "area": 14503}], "file_name": "000000563470.png", "image_id": 563470}, {"segments_info": [{"id": 7241881, "category_id": 25, "iscrowd": 0, "bbox": [179, 212, 85, 169], "area": 2872}, {"id": 7244711, "category_id": 25, "iscrowd": 0, "bbox": [120, 219, 112, 179], "area": 4612}, {"id": 6650516, "category_id": 25, "iscrowd": 0, "bbox": [235, 210, 94, 171], "area": 4836}, {"id": 6058378, "category_id": 25, "iscrowd": 0, "bbox": [247, 237, 53, 55], "area": 633}, {"id": 5858674, "category_id": 171, "iscrowd": 0, "bbox": [0, 81, 136, 59], "area": 4357}, {"id": 11184293, "category_id": 178, "iscrowd": 0, "bbox": [0, 507, 459, 133], "area": 46356}, {"id": 7305602, "category_id": 184, "iscrowd": 0, "bbox": [99, 0, 360, 414], "area": 44460}, {"id": 7174267, "category_id": 185, "iscrowd": 0, "bbox": [0, 79, 51, 28], "area": 828}, {"id": 8563893, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 459, 480], "area": 114943}, {"id": 9477290, "category_id": 194, "iscrowd": 0, "bbox": [0, 329, 459, 311], "area": 60454}, {"id": 8884119, "category_id": 198, "iscrowd": 0, "bbox": [65, 369, 223, 101], "area": 8924}], "file_name": "000000563603.png", "image_id": 563603}, {"segments_info": [{"id": 2958630, "category_id": 1, "iscrowd": 0, "bbox": [532, 277, 28, 40], "area": 552}, {"id": 2499118, "category_id": 1, "iscrowd": 0, "bbox": [476, 267, 13, 35], "area": 306}, {"id": 1972249, "category_id": 1, "iscrowd": 0, "bbox": [145, 268, 32, 82], "area": 1351}, {"id": 2962565, "category_id": 1, "iscrowd": 0, "bbox": [595, 278, 22, 57], "area": 661}, {"id": 1578535, "category_id": 1, "iscrowd": 0, "bbox": [454, 264, 9, 28], "area": 171}, {"id": 4072746, "category_id": 1, "iscrowd": 0, "bbox": [447, 270, 4, 15], "area": 47}, {"id": 8281503, "category_id": 1, "iscrowd": 0, "bbox": [107, 296, 15, 35], "area": 218}, {"id": 2892086, "category_id": 1, "iscrowd": 0, "bbox": [119, 277, 24, 74], "area": 1255}, {"id": 9401494, "category_id": 1, "iscrowd": 0, "bbox": [185, 289, 9, 30], "area": 204}, {"id": 2433575, "category_id": 1, "iscrowd": 0, "bbox": [563, 273, 24, 45], "area": 673}, {"id": 7695468, "category_id": 2, "iscrowd": 0, "bbox": [110, 314, 9, 20], "area": 130}, {"id": 7896710, "category_id": 6, "iscrowd": 0, "bbox": [138, 226, 172, 59], "area": 6086}, {"id": 3612700, "category_id": 31, "iscrowd": 0, "bbox": [543, 290, 16, 27], "area": 165}, {"id": 1908778, "category_id": 31, "iscrowd": 0, "bbox": [610, 299, 9, 20], "area": 85}, {"id": 2238542, "category_id": 31, "iscrowd": 0, "bbox": [561, 293, 6, 10], "area": 40}, {"id": 13421007, "category_id": 149, "iscrowd": 0, "bbox": [0, 284, 640, 195], "area": 66989}, {"id": 6119270, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 344], "area": 97070}, {"id": 7569028, "category_id": 185, "iscrowd": 0, "bbox": [25, 244, 34, 31], "area": 649}, {"id": 10725563, "category_id": 191, "iscrowd": 0, "bbox": [0, 339, 578, 111], "area": 4179}, {"id": 7639968, "category_id": 193, "iscrowd": 0, "bbox": [0, 264, 640, 134], "area": 16400}, {"id": 8224648, "category_id": 194, "iscrowd": 0, "bbox": [285, 281, 67, 27], "area": 921}], "file_name": "000000563604.png", "image_id": 563604}, {"segments_info": [{"id": 2175815, "category_id": 1, "iscrowd": 0, "bbox": [232, 203, 126, 111], "area": 6348}, {"id": 7375523, "category_id": 1, "iscrowd": 0, "bbox": [2, 173, 57, 225], "area": 5754}, {"id": 2376785, "category_id": 1, "iscrowd": 0, "bbox": [329, 443, 15, 58], "area": 463}, {"id": 1122859, "category_id": 1, "iscrowd": 0, "bbox": [314, 432, 16, 40], "area": 344}, {"id": 3489864, "category_id": 1, "iscrowd": 0, "bbox": [39, 263, 49, 58], "area": 974}, {"id": 7769259, "category_id": 1, "iscrowd": 0, "bbox": [22, 234, 62, 145], "area": 3103}, {"id": 7897435, "category_id": 1, "iscrowd": 0, "bbox": [40, 264, 82, 199], "area": 6132}, {"id": 1647151, "category_id": 1, "iscrowd": 0, "bbox": [206, 432, 18, 60], "area": 703}, {"id": 9875138, "category_id": 1, "iscrowd": 0, "bbox": [27, 173, 77, 93], "area": 3372}, {"id": 2704737, "category_id": 1, "iscrowd": 0, "bbox": [0, 151, 21, 32], "area": 362}, {"id": 1516606, "category_id": 1, "iscrowd": 0, "bbox": [249, 431, 20, 62], "area": 588}, {"id": 2505792, "category_id": 1, "iscrowd": 0, "bbox": [223, 440, 11, 49], "area": 388}, {"id": 793122, "category_id": 1, "iscrowd": 0, "bbox": [229, 441, 20, 51], "area": 614}, {"id": 5663871, "category_id": 1, "iscrowd": 1, "bbox": [1, 311, 323, 329], "area": 31895}, {"id": 1653319, "category_id": 41, "iscrowd": 0, "bbox": [238, 465, 9, 24], "area": 110}, {"id": 6325431, "category_id": 41, "iscrowd": 0, "bbox": [118, 472, 21, 71], "area": 577}, {"id": 7707569, "category_id": 41, "iscrowd": 0, "bbox": [143, 433, 22, 104], "area": 412}, {"id": 9810615, "category_id": 41, "iscrowd": 0, "bbox": [1, 376, 84, 189], "area": 5177}, {"id": 5799822, "category_id": 41, "iscrowd": 0, "bbox": [202, 443, 8, 46], "area": 287}, {"id": 7313065, "category_id": 41, "iscrowd": 0, "bbox": [104, 459, 19, 91], "area": 1000}, {"id": 1390409, "category_id": 41, "iscrowd": 0, "bbox": [334, 494, 7, 6], "area": 23}, {"id": 3234646, "category_id": 41, "iscrowd": 0, "bbox": [221, 285, 66, 60], "area": 1851}, {"id": 4942189, "category_id": 92, "iscrowd": 0, "bbox": [330, 408, 59, 37], "area": 1526}, {"id": 7640744, "category_id": 118, "iscrowd": 0, "bbox": [120, 459, 348, 181], "area": 43544}, {"id": 7636106, "category_id": 130, "iscrowd": 0, "bbox": [448, 291, 20, 33], "area": 441}, {"id": 5602975, "category_id": 144, "iscrowd": 0, "bbox": [0, 613, 20, 27], "area": 180}, {"id": 8620939, "category_id": 181, "iscrowd": 0, "bbox": [200, 371, 27, 51], "area": 1024}, {"id": 4084312, "category_id": 186, "iscrowd": 0, "bbox": [18, 0, 450, 360], "area": 114416}, {"id": 15265005, "category_id": 187, "iscrowd": 0, "bbox": [202, 306, 35, 75], "area": 1595}, {"id": 7115675, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 468, 562], "area": 58585}], "file_name": "000000563648.png", "image_id": 563648}, {"segments_info": [{"id": 6578791, "category_id": 1, "iscrowd": 0, "bbox": [103, 236, 33, 84], "area": 1474}, {"id": 3682394, "category_id": 1, "iscrowd": 0, "bbox": [66, 237, 41, 83], "area": 1500}, {"id": 3551801, "category_id": 3, "iscrowd": 0, "bbox": [518, 253, 100, 46], "area": 3317}, {"id": 5261644, "category_id": 3, "iscrowd": 0, "bbox": [300, 253, 46, 26], "area": 940}, {"id": 6051154, "category_id": 3, "iscrowd": 0, "bbox": [171, 255, 4, 11], "area": 31}, {"id": 7233112, "category_id": 3, "iscrowd": 0, "bbox": [157, 249, 14, 18], "area": 81}, {"id": 3156807, "category_id": 3, "iscrowd": 0, "bbox": [180, 250, 32, 29], "area": 733}, {"id": 7304322, "category_id": 3, "iscrowd": 0, "bbox": [232, 254, 41, 24], "area": 689}, {"id": 4012612, "category_id": 3, "iscrowd": 0, "bbox": [372, 251, 37, 26], "area": 636}, {"id": 5525073, "category_id": 3, "iscrowd": 0, "bbox": [283, 252, 24, 21], "area": 320}, {"id": 6381421, "category_id": 3, "iscrowd": 0, "bbox": [218, 260, 12, 7], "area": 58}, {"id": 4541302, "category_id": 8, "iscrowd": 0, "bbox": [340, 240, 40, 36], "area": 1103}, {"id": 4278100, "category_id": 10, "iscrowd": 0, "bbox": [257, 218, 6, 11], "area": 63}, {"id": 8161428, "category_id": 10, "iscrowd": 0, "bbox": [198, 215, 7, 12], "area": 63}, {"id": 2235185, "category_id": 31, "iscrowd": 0, "bbox": [70, 247, 12, 38], "area": 209}, {"id": 5656660, "category_id": 149, "iscrowd": 0, "bbox": [168, 250, 472, 181], "area": 64857}, {"id": 5074529, "category_id": 184, "iscrowd": 0, "bbox": [76, 0, 564, 259], "area": 54742}, {"id": 14792584, "category_id": 187, "iscrowd": 0, "bbox": [181, 0, 459, 252], "area": 41882}, {"id": 5987681, "category_id": 191, "iscrowd": 0, "bbox": [0, 269, 312, 162], "area": 27973}, {"id": 5198935, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 322], "area": 67487}], "file_name": "000000563653.png", "image_id": 563653}, {"segments_info": [{"id": 1643796, "category_id": 1, "iscrowd": 0, "bbox": [217, 245, 23, 56], "area": 749}, {"id": 1842720, "category_id": 1, "iscrowd": 0, "bbox": [310, 242, 18, 60], "area": 681}, {"id": 4804200, "category_id": 8, "iscrowd": 0, "bbox": [1, 218, 92, 52], "area": 3614}, {"id": 4211530, "category_id": 8, "iscrowd": 0, "bbox": [269, 169, 345, 148], "area": 39043}, {"id": 5921127, "category_id": 8, "iscrowd": 0, "bbox": [83, 220, 113, 68], "area": 6193}, {"id": 5593181, "category_id": 128, "iscrowd": 0, "bbox": [187, 142, 453, 129], "area": 8669}, {"id": 6777452, "category_id": 149, "iscrowd": 0, "bbox": [0, 259, 640, 168], "area": 64191}, {"id": 3618098, "category_id": 181, "iscrowd": 0, "bbox": [595, 168, 45, 34], "area": 915}, {"id": 11710382, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 270], "area": 109650}, {"id": 15657186, "category_id": 187, "iscrowd": 0, "bbox": [206, 0, 394, 155], "area": 13727}, {"id": 9083815, "category_id": 191, "iscrowd": 0, "bbox": [0, 367, 139, 60], "area": 4722}, {"id": 5928072, "category_id": 193, "iscrowd": 0, "bbox": [0, 256, 640, 171], "area": 15736}, {"id": 5396826, "category_id": 199, "iscrowd": 0, "bbox": [605, 387, 35, 40], "area": 1197}], "file_name": "000000563702.png", "image_id": 563702}, {"segments_info": [{"id": 5270194, "category_id": 88, "iscrowd": 0, "bbox": [0, 6, 429, 628], "area": 236262}, {"id": 15199212, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 429, 375], "area": 31919}], "file_name": "000000563758.png", "image_id": 563758}, {"segments_info": [{"id": 5667488, "category_id": 1, "iscrowd": 0, "bbox": [184, 103, 86, 71], "area": 1362}, {"id": 7309477, "category_id": 1, "iscrowd": 0, "bbox": [2, 0, 348, 293], "area": 34513}, {"id": 9615837, "category_id": 1, "iscrowd": 0, "bbox": [184, 98, 77, 121], "area": 5359}, {"id": 4086134, "category_id": 1, "iscrowd": 0, "bbox": [0, 103, 570, 322], "area": 82352}, {"id": 2511757, "category_id": 1, "iscrowd": 0, "bbox": [404, 0, 141, 131], "area": 9240}, {"id": 4811927, "category_id": 1, "iscrowd": 0, "bbox": [76, 10, 126, 211], "area": 7889}, {"id": 5865913, "category_id": 1, "iscrowd": 0, "bbox": [142, 47, 50, 120], "area": 3827}, {"id": 8103369, "category_id": 1, "iscrowd": 0, "bbox": [255, 109, 125, 122], "area": 6615}, {"id": 3293259, "category_id": 62, "iscrowd": 0, "bbox": [389, 149, 80, 141], "area": 3849}, {"id": 2700094, "category_id": 62, "iscrowd": 0, "bbox": [474, 102, 89, 193], "area": 8081}, {"id": 2634040, "category_id": 62, "iscrowd": 0, "bbox": [574, 67, 66, 228], "area": 8389}, {"id": 3029574, "category_id": 62, "iscrowd": 0, "bbox": [415, 122, 96, 155], "area": 7001}, {"id": 7108987, "category_id": 77, "iscrowd": 0, "bbox": [365, 234, 85, 39], "area": 2118}, {"id": 5539749, "category_id": 199, "iscrowd": 0, "bbox": [105, 0, 389, 198], "area": 37946}], "file_name": "000000563882.png", "image_id": 563882}, {"segments_info": [{"id": 9209472, "category_id": 70, "iscrowd": 0, "bbox": [178, 406, 74, 116], "area": 6944}, {"id": 11642780, "category_id": 171, "iscrowd": 0, "bbox": [103, 0, 377, 640], "area": 54178}, {"id": 6189180, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 480, 633], "area": 134928}, {"id": 5394508, "category_id": 190, "iscrowd": 0, "bbox": [109, 392, 250, 248], "area": 45974}, {"id": 7433325, "category_id": 195, "iscrowd": 0, "bbox": [140, 115, 191, 249], "area": 2881}, {"id": 4998980, "category_id": 199, "iscrowd": 0, "bbox": [0, 620, 383, 20], "area": 2256}], "file_name": "000000564023.png", "image_id": 564023}, {"segments_info": [{"id": 1776414, "category_id": 1, "iscrowd": 0, "bbox": [10, 0, 314, 371], "area": 72418}, {"id": 4669276, "category_id": 31, "iscrowd": 0, "bbox": [355, 305, 72, 113], "area": 6360}, {"id": 7428941, "category_id": 44, "iscrowd": 0, "bbox": [170, 265, 38, 74], "area": 1822}, {"id": 4538176, "category_id": 77, "iscrowd": 0, "bbox": [220, 55, 30, 36], "area": 319}, {"id": 8550011, "category_id": 77, "iscrowd": 0, "bbox": [226, 62, 17, 11], "area": 26}, {"id": 1118737, "category_id": 161, "iscrowd": 0, "bbox": [0, 147, 108, 123], "area": 7483}, {"id": 4539716, "category_id": 191, "iscrowd": 0, "bbox": [0, 267, 427, 373], "area": 20423}, {"id": 8223350, "category_id": 199, "iscrowd": 0, "bbox": [101, 0, 326, 289], "area": 40331}], "file_name": "000000564091.png", "image_id": 564091}, {"segments_info": [{"id": 3158578, "category_id": 70, "iscrowd": 0, "bbox": [111, 214, 197, 356], "area": 52428}, {"id": 3620414, "category_id": 133, "iscrowd": 0, "bbox": [16, 121, 24, 33], "area": 494}, {"id": 5858414, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 428, 461], "area": 121012}, {"id": 1322050, "category_id": 190, "iscrowd": 0, "bbox": [0, 369, 428, 271], "area": 70650}, {"id": 6910066, "category_id": 195, "iscrowd": 0, "bbox": [339, 461, 79, 81], "area": 3492}, {"id": 3817793, "category_id": 199, "iscrowd": 0, "bbox": [0, 33, 48, 141], "area": 3170}], "file_name": "000000564127.png", "image_id": 564127}, {"segments_info": [{"id": 4672334, "category_id": 22, "iscrowd": 0, "bbox": [423, 145, 133, 183], "area": 13552}, {"id": 4475212, "category_id": 22, "iscrowd": 0, "bbox": [206, 180, 77, 105], "area": 4511}, {"id": 5593438, "category_id": 22, "iscrowd": 0, "bbox": [52, 194, 33, 30], "area": 625}, {"id": 4344400, "category_id": 22, "iscrowd": 0, "bbox": [262, 192, 32, 59], "area": 770}, {"id": 4344142, "category_id": 22, "iscrowd": 0, "bbox": [290, 202, 45, 59], "area": 1489}, {"id": 2039841, "category_id": 22, "iscrowd": 0, "bbox": [411, 192, 46, 114], "area": 3267}, {"id": 3818829, "category_id": 22, "iscrowd": 0, "bbox": [149, 188, 76, 95], "area": 3516}, {"id": 3816767, "category_id": 22, "iscrowd": 0, "bbox": [333, 165, 91, 114], "area": 7480}, {"id": 9211794, "category_id": 184, "iscrowd": 0, "bbox": [0, 80, 640, 261], "area": 32851}, {"id": 13151900, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 196], "area": 99448}, {"id": 8365242, "category_id": 193, "iscrowd": 0, "bbox": [0, 211, 640, 213], "area": 100080}], "file_name": "000000564133.png", "image_id": 564133}, {"segments_info": [{"id": 2369587, "category_id": 18, "iscrowd": 0, "bbox": [87, 9, 517, 405], "area": 78684}, {"id": 2960261, "category_id": 63, "iscrowd": 0, "bbox": [2, 1, 638, 418], "area": 145716}, {"id": 8818319, "category_id": 75, "iscrowd": 0, "bbox": [304, 279, 160, 29], "area": 4085}, {"id": 13357777, "category_id": 75, "iscrowd": 0, "bbox": [307, 304, 139, 43], "area": 4775}], "file_name": "000000564280.png", "image_id": 564280}, {"segments_info": [{"id": 4214635, "category_id": 1, "iscrowd": 0, "bbox": [107, 100, 85, 88], "area": 3833}, {"id": 15988211, "category_id": 3, "iscrowd": 0, "bbox": [275, 156, 137, 63], "area": 2816}, {"id": 15724262, "category_id": 3, "iscrowd": 0, "bbox": [412, 170, 77, 26], "area": 970}, {"id": 2304807, "category_id": 3, "iscrowd": 0, "bbox": [603, 174, 16, 7], "area": 91}, {"id": 7569020, "category_id": 8, "iscrowd": 0, "bbox": [571, 128, 69, 61], "area": 2883}, {"id": 13951457, "category_id": 14, "iscrowd": 0, "bbox": [427, 151, 20, 43], "area": 661}, {"id": 592917, "category_id": 44, "iscrowd": 0, "bbox": [531, 141, 57, 99], "area": 4341}, {"id": 989997, "category_id": 62, "iscrowd": 0, "bbox": [193, 185, 48, 56], "area": 2110}, {"id": 2960937, "category_id": 62, "iscrowd": 0, "bbox": [66, 182, 189, 178], "area": 16998}, {"id": 9343632, "category_id": 62, "iscrowd": 0, "bbox": [377, 186, 51, 35], "area": 1256}, {"id": 1118481, "category_id": 62, "iscrowd": 0, "bbox": [0, 162, 62, 100], "area": 4184}, {"id": 4540223, "category_id": 62, "iscrowd": 0, "bbox": [241, 182, 91, 49], "area": 3630}, {"id": 5396048, "category_id": 67, "iscrowd": 0, "bbox": [172, 141, 468, 175], "area": 34478}, {"id": 4413288, "category_id": 67, "iscrowd": 0, "bbox": [97, 188, 102, 23], "area": 253}, {"id": 15002343, "category_id": 73, "iscrowd": 0, "bbox": [185, 155, 51, 39], "area": 1435}, {"id": 6258836, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 227, 192], "area": 34578}, {"id": 12436932, "category_id": 181, "iscrowd": 0, "bbox": [205, 0, 435, 239], "area": 72760}], "file_name": "000000564336.png", "image_id": 564336}, {"segments_info": [{"id": 3627633, "category_id": 3, "iscrowd": 0, "bbox": [396, 175, 6, 6], "area": 25}, {"id": 4607812, "category_id": 3, "iscrowd": 0, "bbox": [153, 196, 19, 13], "area": 193}, {"id": 3160620, "category_id": 3, "iscrowd": 0, "bbox": [346, 178, 15, 9], "area": 95}, {"id": 2238788, "category_id": 8, "iscrowd": 0, "bbox": [538, 197, 45, 36], "area": 1367}, {"id": 1053703, "category_id": 10, "iscrowd": 0, "bbox": [299, 209, 11, 33], "area": 337}, {"id": 856362, "category_id": 10, "iscrowd": 0, "bbox": [333, 151, 15, 36], "area": 343}, {"id": 7515284, "category_id": 10, "iscrowd": 0, "bbox": [324, 209, 15, 39], "area": 469}, {"id": 1515054, "category_id": 10, "iscrowd": 0, "bbox": [296, 145, 20, 50], "area": 717}, {"id": 789524, "category_id": 14, "iscrowd": 0, "bbox": [37, 218, 4, 8], "area": 20}, {"id": 1848394, "category_id": 95, "iscrowd": 0, "bbox": [257, 158, 127, 51], "area": 2394}, {"id": 3299705, "category_id": 130, "iscrowd": 0, "bbox": [64, 33, 406, 132], "area": 4659}, {"id": 3095645, "category_id": 149, "iscrowd": 0, "bbox": [0, 143, 640, 282], "area": 121484}, {"id": 727598, "category_id": 184, "iscrowd": 0, "bbox": [0, 127, 464, 120], "area": 10399}, {"id": 1055021, "category_id": 185, "iscrowd": 0, "bbox": [0, 240, 640, 77], "area": 5553}, {"id": 11040121, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 131], "area": 50267}, {"id": 1250855, "category_id": 191, "iscrowd": 0, "bbox": [528, 208, 15, 18], "area": 155}, {"id": 2368559, "category_id": 197, "iscrowd": 0, "bbox": [0, 26, 640, 214], "area": 60712}, {"id": 729151, "category_id": 199, "iscrowd": 0, "bbox": [80, 188, 485, 92], "area": 11679}], "file_name": "000000565012.png", "image_id": 565012}, {"segments_info": [{"id": 3949663, "category_id": 1, "iscrowd": 0, "bbox": [259, 357, 74, 142], "area": 6692}, {"id": 3693179, "category_id": 55, "iscrowd": 0, "bbox": [265, 437, 20, 23], "area": 370}, {"id": 5662579, "category_id": 112, "iscrowd": 0, "bbox": [127, 45, 163, 346], "area": 44422}, {"id": 8621726, "category_id": 168, "iscrowd": 0, "bbox": [0, 61, 124, 280], "area": 21569}, {"id": 6713725, "category_id": 176, "iscrowd": 0, "bbox": [103, 20, 181, 359], "area": 10139}, {"id": 3096146, "category_id": 190, "iscrowd": 0, "bbox": [48, 362, 237, 138], "area": 13257}, {"id": 6448488, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 333, 500], "area": 59795}], "file_name": "000000565045.png", "image_id": 565045}, {"segments_info": [{"id": 5458583, "category_id": 13, "iscrowd": 0, "bbox": [110, 164, 57, 56], "area": 2612}, {"id": 5724500, "category_id": 14, "iscrowd": 0, "bbox": [163, 305, 37, 66], "area": 2189}, {"id": 7114127, "category_id": 119, "iscrowd": 0, "bbox": [181, 270, 31, 38], "area": 819}, {"id": 13422286, "category_id": 149, "iscrowd": 0, "bbox": [0, 216, 379, 284], "area": 33922}, {"id": 4214343, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 379, 245], "area": 78936}, {"id": 6058856, "category_id": 185, "iscrowd": 0, "bbox": [183, 223, 196, 54], "area": 3783}, {"id": 6204047, "category_id": 193, "iscrowd": 0, "bbox": [0, 209, 379, 291], "area": 49724}, {"id": 9873827, "category_id": 194, "iscrowd": 0, "bbox": [47, 249, 290, 104], "area": 2601}, {"id": 2987695, "category_id": 197, "iscrowd": 0, "bbox": [171, 378, 20, 45], "area": 837}, {"id": 8818062, "category_id": 198, "iscrowd": 0, "bbox": [84, 280, 59, 67], "area": 1740}], "file_name": "000000565153.png", "image_id": 565153}, {"segments_info": [{"id": 7759187, "category_id": 3, "iscrowd": 0, "bbox": [2, 507, 101, 122], "area": 7961}, {"id": 3749426, "category_id": 8, "iscrowd": 0, "bbox": [2, 117, 478, 518], "area": 201468}, {"id": 6975607, "category_id": 17, "iscrowd": 0, "bbox": [189, 279, 167, 42], "area": 5010}, {"id": 6122339, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 480, 284], "area": 75393}, {"id": 8094338, "category_id": 199, "iscrowd": 0, "bbox": [384, 268, 96, 74], "area": 3950}], "file_name": "000000565391.png", "image_id": 565391}, {"segments_info": [{"id": 5480361, "category_id": 85, "iscrowd": 0, "bbox": [161, 71, 52, 37], "area": 1084}, {"id": 197634, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 426, 640], "area": 130756}, {"id": 5792618, "category_id": 197, "iscrowd": 0, "bbox": [30, 34, 385, 606], "area": 140777}], "file_name": "000000565469.png", "image_id": 565469}, {"segments_info": [{"id": 3223600, "category_id": 1, "iscrowd": 0, "bbox": [308, 200, 8, 17], "area": 78}, {"id": 8947340, "category_id": 3, "iscrowd": 0, "bbox": [258, 203, 13, 12], "area": 105}, {"id": 10524560, "category_id": 3, "iscrowd": 0, "bbox": [83, 230, 123, 102], "area": 7069}, {"id": 11841453, "category_id": 3, "iscrowd": 0, "bbox": [235, 205, 19, 8], "area": 100}, {"id": 10921383, "category_id": 3, "iscrowd": 0, "bbox": [270, 208, 22, 24], "area": 111}, {"id": 7104612, "category_id": 3, "iscrowd": 0, "bbox": [99, 215, 48, 37], "area": 396}, {"id": 10920097, "category_id": 3, "iscrowd": 0, "bbox": [143, 211, 39, 15], "area": 452}, {"id": 9737109, "category_id": 3, "iscrowd": 0, "bbox": [2, 224, 82, 61], "area": 3351}, {"id": 10328211, "category_id": 3, "iscrowd": 0, "bbox": [260, 211, 27, 23], "area": 482}, {"id": 6249564, "category_id": 3, "iscrowd": 0, "bbox": [180, 207, 74, 37], "area": 1311}, {"id": 5986140, "category_id": 3, "iscrowd": 0, "bbox": [282, 204, 22, 16], "area": 214}, {"id": 10254689, "category_id": 65, "iscrowd": 0, "bbox": [348, 230, 52, 123], "area": 3496}, {"id": 1185564, "category_id": 112, "iscrowd": 0, "bbox": [497, 95, 107, 265], "area": 24719}, {"id": 6450822, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 101871}, {"id": 5857648, "category_id": 149, "iscrowd": 0, "bbox": [0, 217, 304, 263], "area": 27500}, {"id": 5135471, "category_id": 171, "iscrowd": 0, "bbox": [336, 139, 83, 206], "area": 7442}, {"id": 3555655, "category_id": 184, "iscrowd": 0, "bbox": [47, 161, 242, 67], "area": 4023}, {"id": 3554163, "category_id": 185, "iscrowd": 0, "bbox": [69, 216, 24, 13], "area": 254}, {"id": 16579836, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 345, 174], "area": 34349}, {"id": 9871018, "category_id": 191, "iscrowd": 0, "bbox": [102, 214, 354, 266], "area": 42426}, {"id": 9869989, "category_id": 197, "iscrowd": 0, "bbox": [16, 212, 94, 39], "area": 618}], "file_name": "000000565563.png", "image_id": 565563}, {"segments_info": [{"id": 678307, "category_id": 59, "iscrowd": 0, "bbox": [161, 2, 317, 219], "area": 49085}, {"id": 484003, "category_id": 59, "iscrowd": 0, "bbox": [32, 132, 445, 402], "area": 108144}, {"id": 609910, "category_id": 59, "iscrowd": 0, "bbox": [0, 53, 137, 165], "area": 12903}, {"id": 2772627, "category_id": 67, "iscrowd": 0, "bbox": [1, 377, 477, 254], "area": 63887}, {"id": 417981, "category_id": 196, "iscrowd": 0, "bbox": [221, 0, 257, 4], "area": 726}], "file_name": "000000565597.png", "image_id": 565597}, {"segments_info": [{"id": 3969907, "category_id": 11, "iscrowd": 0, "bbox": [446, 0, 170, 286], "area": 30987}, {"id": 4034987, "category_id": 64, "iscrowd": 0, "bbox": [311, 81, 95, 83], "area": 6461}, {"id": 8810114, "category_id": 64, "iscrowd": 0, "bbox": [97, 46, 31, 63], "area": 1353}, {"id": 2839133, "category_id": 64, "iscrowd": 0, "bbox": [17, 198, 166, 84], "area": 9279}, {"id": 4552573, "category_id": 64, "iscrowd": 0, "bbox": [588, 146, 52, 72], "area": 2451}, {"id": 5988479, "category_id": 64, "iscrowd": 0, "bbox": [39, 149, 47, 46], "area": 1455}, {"id": 2317657, "category_id": 64, "iscrowd": 0, "bbox": [179, 185, 157, 84], "area": 9838}, {"id": 1681836, "category_id": 64, "iscrowd": 0, "bbox": [357, 12, 43, 33], "area": 1166}, {"id": 3957074, "category_id": 64, "iscrowd": 0, "bbox": [397, 159, 76, 69], "area": 4111}, {"id": 3499104, "category_id": 64, "iscrowd": 0, "bbox": [334, 161, 75, 91], "area": 5704}, {"id": 4359572, "category_id": 119, "iscrowd": 0, "bbox": [0, 0, 640, 313], "area": 120855}, {"id": 6058624, "category_id": 194, "iscrowd": 0, "bbox": [449, 0, 191, 41], "area": 4902}], "file_name": "000000565607.png", "image_id": 565607}, {"segments_info": [{"id": 4081991, "category_id": 22, "iscrowd": 0, "bbox": [309, 128, 314, 243], "area": 51133}, {"id": 3490628, "category_id": 22, "iscrowd": 0, "bbox": [40, 127, 108, 155], "area": 11626}, {"id": 8492434, "category_id": 128, "iscrowd": 0, "bbox": [75, 35, 349, 88], "area": 19074}, {"id": 4542274, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 126], "area": 44691}, {"id": 14609902, "category_id": 187, "iscrowd": 0, "bbox": [46, 0, 594, 48], "area": 8274}, {"id": 4690816, "category_id": 193, "iscrowd": 0, "bbox": [0, 100, 640, 275], "area": 93712}], "file_name": "000000565624.png", "image_id": 565624}, {"segments_info": [{"id": 10725542, "category_id": 47, "iscrowd": 0, "bbox": [454, 205, 21, 31], "area": 526}, {"id": 14934746, "category_id": 47, "iscrowd": 0, "bbox": [242, 197, 7, 9], "area": 55}, {"id": 8554371, "category_id": 50, "iscrowd": 0, "bbox": [299, 133, 10, 47], "area": 173}, {"id": 11582911, "category_id": 51, "iscrowd": 0, "bbox": [573, 218, 65, 23], "area": 1093}, {"id": 12764863, "category_id": 51, "iscrowd": 0, "bbox": [163, 197, 28, 16], "area": 325}, {"id": 5560988, "category_id": 53, "iscrowd": 0, "bbox": [579, 210, 49, 9], "area": 258}, {"id": 8507285, "category_id": 64, "iscrowd": 0, "bbox": [121, 161, 36, 55], "area": 700}, {"id": 10528684, "category_id": 79, "iscrowd": 0, "bbox": [283, 199, 74, 108], "area": 6102}, {"id": 12168094, "category_id": 81, "iscrowd": 0, "bbox": [98, 223, 83, 22], "area": 1075}, {"id": 2771825, "category_id": 81, "iscrowd": 0, "bbox": [493, 223, 61, 5], "area": 221}, {"id": 11708319, "category_id": 82, "iscrowd": 0, "bbox": [464, 119, 96, 102], "area": 8969}, {"id": 15263442, "category_id": 86, "iscrowd": 0, "bbox": [131, 187, 13, 29], "area": 342}, {"id": 7760989, "category_id": 107, "iscrowd": 0, "bbox": [0, 190, 530, 136], "area": 12116}, {"id": 11124156, "category_id": 109, "iscrowd": 0, "bbox": [0, 13, 177, 109], "area": 2494}, {"id": 4675682, "category_id": 112, "iscrowd": 0, "bbox": [567, 115, 56, 112], "area": 3721}, {"id": 6464927, "category_id": 122, "iscrowd": 0, "bbox": [430, 213, 22, 18], "area": 316}, {"id": 8753569, "category_id": 156, "iscrowd": 0, "bbox": [10, 0, 231, 213], "area": 27042}, {"id": 10059433, "category_id": 168, "iscrowd": 0, "bbox": [341, 239, 16, 51], "area": 528}, {"id": 15856882, "category_id": 181, "iscrowd": 0, "bbox": [109, 93, 67, 115], "area": 3317}, {"id": 13488845, "category_id": 186, "iscrowd": 0, "bbox": [92, 0, 548, 129], "area": 37120}, {"id": 10856886, "category_id": 188, "iscrowd": 0, "bbox": [0, 213, 640, 208], "area": 71201}, {"id": 5801131, "category_id": 189, "iscrowd": 0, "bbox": [345, 206, 295, 53], "area": 9426}, {"id": 6652303, "category_id": 190, "iscrowd": 0, "bbox": [140, 298, 500, 123], "area": 28731}, {"id": 8888731, "category_id": 196, "iscrowd": 0, "bbox": [401, 193, 31, 38], "area": 619}, {"id": 12043712, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 232], "area": 44707}], "file_name": "000000565776.png", "image_id": 565776}, {"segments_info": [{"id": 2433323, "category_id": 1, "iscrowd": 0, "bbox": [422, 191, 17, 78], "area": 774}, {"id": 2234138, "category_id": 1, "iscrowd": 0, "bbox": [406, 188, 21, 83], "area": 1059}, {"id": 4602177, "category_id": 1, "iscrowd": 0, "bbox": [396, 228, 10, 28], "area": 178}, {"id": 7039630, "category_id": 1, "iscrowd": 0, "bbox": [265, 233, 7, 14], "area": 66}, {"id": 7885114, "category_id": 7, "iscrowd": 0, "bbox": [159, 132, 345, 216], "area": 52955}, {"id": 8097013, "category_id": 10, "iscrowd": 0, "bbox": [184, 325, 11, 10], "area": 101}, {"id": 4277859, "category_id": 10, "iscrowd": 0, "bbox": [184, 305, 10, 19], "area": 141}, {"id": 7898520, "category_id": 147, "iscrowd": 0, "bbox": [0, 271, 640, 129], "area": 48932}, {"id": 3036474, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 319], "area": 122808}, {"id": 4737867, "category_id": 197, "iscrowd": 0, "bbox": [0, 147, 213, 172], "area": 27615}], "file_name": "000000565778.png", "image_id": 565778}, {"segments_info": [{"id": 5917255, "category_id": 1, "iscrowd": 0, "bbox": [158, 107, 113, 233], "area": 11565}, {"id": 2105120, "category_id": 31, "iscrowd": 0, "bbox": [30, 297, 79, 50], "area": 2903}, {"id": 1842977, "category_id": 44, "iscrowd": 0, "bbox": [164, 310, 23, 62], "area": 1003}, {"id": 2171171, "category_id": 44, "iscrowd": 0, "bbox": [445, 326, 26, 48], "area": 741}, {"id": 1908772, "category_id": 44, "iscrowd": 0, "bbox": [66, 360, 15, 14], "area": 195}, {"id": 2631466, "category_id": 44, "iscrowd": 0, "bbox": [338, 322, 25, 50], "area": 749}, {"id": 1974821, "category_id": 44, "iscrowd": 0, "bbox": [203, 365, 16, 10], "area": 153}, {"id": 3029306, "category_id": 64, "iscrowd": 0, "bbox": [5, 201, 43, 80], "area": 2004}, {"id": 2238247, "category_id": 64, "iscrowd": 0, "bbox": [35, 70, 67, 224], "area": 9458}, {"id": 14604503, "category_id": 72, "iscrowd": 0, "bbox": [256, 145, 146, 82], "area": 10993}, {"id": 12811124, "category_id": 75, "iscrowd": 0, "bbox": [260, 214, 4, 4], "area": 12}, {"id": 4413012, "category_id": 109, "iscrowd": 0, "bbox": [0, 52, 45, 226], "area": 6498}, {"id": 2959399, "category_id": 112, "iscrowd": 0, "bbox": [123, 123, 60, 135], "area": 6135}, {"id": 3029052, "category_id": 118, "iscrowd": 0, "bbox": [0, 249, 500, 126], "area": 36347}, {"id": 2766133, "category_id": 130, "iscrowd": 0, "bbox": [139, 86, 29, 15], "area": 366}, {"id": 3879738, "category_id": 156, "iscrowd": 0, "bbox": [445, 138, 55, 30], "area": 1138}, {"id": 4737354, "category_id": 175, "iscrowd": 0, "bbox": [458, 165, 42, 105], "area": 3759}, {"id": 4809317, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 500, 88], "area": 18911}, {"id": 7111038, "category_id": 199, "iscrowd": 0, "bbox": [0, 11, 500, 258], "area": 48790}, {"id": 3555135, "category_id": 200, "iscrowd": 0, "bbox": [447, 293, 53, 17], "area": 629}], "file_name": "000000565853.png", "image_id": 565853}, {"segments_info": [{"id": 4998994, "category_id": 1, "iscrowd": 0, "bbox": [14, 72, 279, 522], "area": 93703}, {"id": 788858, "category_id": 63, "iscrowd": 0, "bbox": [0, 191, 425, 449], "area": 69015}, {"id": 4474452, "category_id": 73, "iscrowd": 0, "bbox": [51, 513, 357, 127], "area": 29763}, {"id": 4740956, "category_id": 84, "iscrowd": 0, "bbox": [278, 375, 38, 138], "area": 2175}, {"id": 12630971, "category_id": 85, "iscrowd": 0, "bbox": [150, 502, 17, 17], "area": 239}, {"id": 13290188, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 225], "area": 71169}], "file_name": "000000565877.png", "image_id": 565877}, {"segments_info": [{"id": 2305088, "category_id": 1, "iscrowd": 0, "bbox": [25, 132, 133, 185], "area": 15348}, {"id": 4338482, "category_id": 17, "iscrowd": 0, "bbox": [150, 66, 329, 253], "area": 46597}, {"id": 8021351, "category_id": 181, "iscrowd": 0, "bbox": [34, 0, 445, 322], "area": 7654}, {"id": 11987406, "category_id": 184, "iscrowd": 0, "bbox": [61, 0, 418, 279], "area": 65185}, {"id": 11770018, "category_id": 189, "iscrowd": 0, "bbox": [0, 289, 217, 33], "area": 2429}, {"id": 9731207, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 50, 293], "area": 8733}], "file_name": "000000565962.png", "image_id": 565962}, {"segments_info": [{"id": 4800326, "category_id": 22, "iscrowd": 0, "bbox": [13, 368, 72, 91], "area": 3324}, {"id": 8748148, "category_id": 85, "iscrowd": 0, "bbox": [189, 275, 60, 46], "area": 2042}, {"id": 6256487, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 480, 348], "area": 64247}, {"id": 16645627, "category_id": 187, "iscrowd": 0, "bbox": [70, 0, 410, 285], "area": 83395}, {"id": 4602431, "category_id": 197, "iscrowd": 0, "bbox": [0, 216, 480, 424], "area": 154086}], "file_name": "000000565989.png", "image_id": 565989}, {"segments_info": [{"id": 5337741, "category_id": 25, "iscrowd": 0, "bbox": [140, 142, 274, 186], "area": 13067}, {"id": 5271935, "category_id": 25, "iscrowd": 0, "bbox": [181, 22, 319, 308], "area": 26058}, {"id": 5796232, "category_id": 25, "iscrowd": 0, "bbox": [69, 190, 208, 143], "area": 10137}, {"id": 5272458, "category_id": 25, "iscrowd": 0, "bbox": [289, 32, 211, 232], "area": 13670}, {"id": 6256014, "category_id": 25, "iscrowd": 0, "bbox": [183, 218, 96, 113], "area": 3464}, {"id": 5005440, "category_id": 25, "iscrowd": 0, "bbox": [0, 243, 148, 90], "area": 8243}, {"id": 1983550, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 333], "area": 91257}], "file_name": "000000566042.png", "image_id": 566042}, {"segments_info": [{"id": 8092539, "category_id": 1, "iscrowd": 0, "bbox": [353, 2, 125, 343], "area": 24676}, {"id": 9934743, "category_id": 1, "iscrowd": 0, "bbox": [515, 194, 5, 21], "area": 75}, {"id": 921102, "category_id": 1, "iscrowd": 0, "bbox": [509, 196, 6, 19], "area": 91}, {"id": 5000268, "category_id": 1, "iscrowd": 0, "bbox": [562, 184, 16, 42], "area": 388}, {"id": 3750201, "category_id": 1, "iscrowd": 0, "bbox": [575, 189, 12, 36], "area": 294}, {"id": 1842204, "category_id": 1, "iscrowd": 0, "bbox": [590, 186, 14, 39], "area": 268}, {"id": 4802889, "category_id": 1, "iscrowd": 0, "bbox": [45, 34, 159, 341], "area": 23343}, {"id": 7500402, "category_id": 3, "iscrowd": 0, "bbox": [291, 168, 204, 72], "area": 6883}, {"id": 2829099, "category_id": 32, "iscrowd": 0, "bbox": [378, 61, 42, 73], "area": 592}, {"id": 13158600, "category_id": 37, "iscrowd": 0, "bbox": [99, 322, 53, 54], "area": 2308}, {"id": 12237498, "category_id": 149, "iscrowd": 0, "bbox": [288, 203, 352, 188], "area": 17033}, {"id": 15987699, "category_id": 187, "iscrowd": 0, "bbox": [372, 0, 142, 119], "area": 7341}, {"id": 14671839, "category_id": 191, "iscrowd": 0, "bbox": [0, 182, 640, 244], "area": 94067}, {"id": 10132122, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 236], "area": 94525}], "file_name": "000000566282.png", "image_id": 566282}, {"segments_info": [{"id": 4607835, "category_id": 1, "iscrowd": 0, "bbox": [74, 0, 328, 285], "area": 51031}, {"id": 3689572, "category_id": 15, "iscrowd": 0, "bbox": [11, 97, 504, 324], "area": 75575}, {"id": 2511482, "category_id": 119, "iscrowd": 0, "bbox": [0, 42, 610, 263], "area": 26201}, {"id": 2441313, "category_id": 125, "iscrowd": 0, "bbox": [0, 301, 640, 126], "area": 48606}, {"id": 3294559, "category_id": 177, "iscrowd": 0, "bbox": [0, 118, 206, 244], "area": 7409}, {"id": 3032933, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 305], "area": 43530}, {"id": 4085130, "category_id": 190, "iscrowd": 0, "bbox": [0, 335, 190, 92], "area": 4376}], "file_name": "000000566436.png", "image_id": 566436}, {"segments_info": [{"id": 8880006, "category_id": 1, "iscrowd": 0, "bbox": [495, 223, 5, 10], "area": 32}, {"id": 8880263, "category_id": 1, "iscrowd": 0, "bbox": [544, 214, 26, 60], "area": 829}, {"id": 7233642, "category_id": 1, "iscrowd": 0, "bbox": [500, 224, 4, 9], "area": 23}, {"id": 10857367, "category_id": 1, "iscrowd": 0, "bbox": [505, 222, 14, 53], "area": 527}, {"id": 2695195, "category_id": 1, "iscrowd": 0, "bbox": [359, 184, 12, 14], "area": 121}, {"id": 8019049, "category_id": 1, "iscrowd": 0, "bbox": [491, 222, 4, 14], "area": 36}, {"id": 5071719, "category_id": 7, "iscrowd": 0, "bbox": [264, 132, 181, 169], "area": 24643}, {"id": 3491930, "category_id": 147, "iscrowd": 0, "bbox": [0, 229, 459, 251], "area": 36334}, {"id": 9146008, "category_id": 154, "iscrowd": 0, "bbox": [502, 228, 47, 26], "area": 704}, {"id": 11043685, "category_id": 155, "iscrowd": 0, "bbox": [563, 215, 77, 93], "area": 4680}, {"id": 12436163, "category_id": 175, "iscrowd": 0, "bbox": [338, 250, 150, 230], "area": 16276}, {"id": 2897461, "category_id": 185, "iscrowd": 0, "bbox": [0, 216, 266, 100], "area": 11008}, {"id": 15251578, "category_id": 187, "iscrowd": 0, "bbox": [134, 0, 506, 217], "area": 70475}, {"id": 10526882, "category_id": 191, "iscrowd": 0, "bbox": [469, 232, 171, 248], "area": 32667}, {"id": 2108211, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 261], "area": 64023}, {"id": 2245955, "category_id": 193, "iscrowd": 0, "bbox": [28, 287, 27, 19], "area": 302}], "file_name": "000000566524.png", "image_id": 566524}, {"segments_info": [{"id": 6381146, "category_id": 3, "iscrowd": 0, "bbox": [541, 177, 91, 50], "area": 1963}, {"id": 4350585, "category_id": 6, "iscrowd": 0, "bbox": [31, 106, 497, 246], "area": 91945}, {"id": 8553092, "category_id": 149, "iscrowd": 0, "bbox": [0, 301, 640, 179], "area": 92883}, {"id": 10197399, "category_id": 151, "iscrowd": 0, "bbox": [463, 46, 131, 30], "area": 2532}, {"id": 4606543, "category_id": 181, "iscrowd": 0, "bbox": [519, 82, 95, 79], "area": 2973}, {"id": 4216656, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 562, 202], "area": 54977}, {"id": 9341058, "category_id": 185, "iscrowd": 0, "bbox": [0, 156, 45, 96], "area": 2037}, {"id": 6586254, "category_id": 191, "iscrowd": 0, "bbox": [0, 251, 640, 109], "area": 8682}, {"id": 4875624, "category_id": 193, "iscrowd": 0, "bbox": [543, 299, 81, 25], "area": 856}, {"id": 11645103, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 269], "area": 33140}, {"id": 10136756, "category_id": 199, "iscrowd": 0, "bbox": [521, 265, 119, 42], "area": 4152}], "file_name": "000000566758.png", "image_id": 566758}, {"segments_info": [{"id": 5129530, "category_id": 1, "iscrowd": 0, "bbox": [58, 1, 65, 131], "area": 2401}, {"id": 4406594, "category_id": 1, "iscrowd": 0, "bbox": [105, 3, 149, 295], "area": 22459}, {"id": 9998478, "category_id": 1, "iscrowd": 0, "bbox": [72, 3, 80, 194], "area": 6401}, {"id": 2433566, "category_id": 1, "iscrowd": 0, "bbox": [0, 0, 33, 88], "area": 1707}, {"id": 8551543, "category_id": 1, "iscrowd": 0, "bbox": [221, 14, 113, 221], "area": 13243}, {"id": 8289144, "category_id": 1, "iscrowd": 0, "bbox": [502, 59, 82, 165], "area": 6559}, {"id": 10323052, "category_id": 1, "iscrowd": 0, "bbox": [305, 22, 217, 398], "area": 11469}, {"id": 10130068, "category_id": 1, "iscrowd": 0, "bbox": [560, 76, 80, 344], "area": 15629}, {"id": 9732729, "category_id": 1, "iscrowd": 0, "bbox": [20, 7, 41, 104], "area": 2628}, {"id": 6254716, "category_id": 1, "iscrowd": 0, "bbox": [135, 16, 435, 404], "area": 84991}, {"id": 11906728, "category_id": 11, "iscrowd": 0, "bbox": [77, 225, 212, 196], "area": 12436}, {"id": 5984845, "category_id": 31, "iscrowd": 0, "bbox": [216, 40, 29, 138], "area": 1490}, {"id": 5265747, "category_id": 184, "iscrowd": 0, "bbox": [238, 0, 402, 101], "area": 10162}, {"id": 14868445, "category_id": 187, "iscrowd": 0, "bbox": [106, 0, 534, 56], "area": 6833}, {"id": 12041402, "category_id": 191, "iscrowd": 0, "bbox": [0, 68, 411, 358], "area": 51057}, {"id": 7901593, "category_id": 193, "iscrowd": 0, "bbox": [56, 32, 584, 394], "area": 8153}, {"id": 6381930, "category_id": 197, "iscrowd": 0, "bbox": [327, 8, 313, 137], "area": 4592}, {"id": 8557485, "category_id": 199, "iscrowd": 0, "bbox": [229, 0, 317, 128], "area": 1968}], "file_name": "000000566923.png", "image_id": 566923}, {"segments_info": [{"id": 2040105, "category_id": 1, "iscrowd": 0, "bbox": [399, 189, 78, 82], "area": 2024}, {"id": 8425618, "category_id": 42, "iscrowd": 0, "bbox": [329, 277, 126, 15], "area": 1223}, {"id": 10789533, "category_id": 155, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 269263}], "file_name": "000000567011.png", "image_id": 567011}, {"segments_info": [{"id": 11710382, "category_id": 1, "iscrowd": 0, "bbox": [203, 217, 20, 18], "area": 185}, {"id": 7697267, "category_id": 1, "iscrowd": 0, "bbox": [272, 287, 13, 11], "area": 97}, {"id": 6118492, "category_id": 3, "iscrowd": 0, "bbox": [46, 302, 27, 26], "area": 569}, {"id": 6777193, "category_id": 3, "iscrowd": 0, "bbox": [0, 287, 13, 50], "area": 429}, {"id": 7960696, "category_id": 3, "iscrowd": 0, "bbox": [16, 299, 26, 23], "area": 507}, {"id": 4473923, "category_id": 3, "iscrowd": 0, "bbox": [72, 298, 44, 35], "area": 1188}, {"id": 7829109, "category_id": 8, "iscrowd": 0, "bbox": [206, 258, 145, 84], "area": 5675}, {"id": 6184284, "category_id": 8, "iscrowd": 0, "bbox": [428, 258, 72, 80], "area": 3600}, {"id": 4210751, "category_id": 8, "iscrowd": 0, "bbox": [290, 257, 159, 85], "area": 9212}, {"id": 3224113, "category_id": 149, "iscrowd": 0, "bbox": [0, 298, 500, 109], "area": 38056}, {"id": 12500155, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 268], "area": 57381}, {"id": 5855576, "category_id": 197, "iscrowd": 0, "bbox": [0, 34, 500, 301], "area": 86149}], "file_name": "000000567197.png", "image_id": 567197}, {"segments_info": [{"id": 2831944, "category_id": 5, "iscrowd": 0, "bbox": [171, 237, 205, 175], "area": 9294}, {"id": 12299681, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 424], "area": 261871}], "file_name": "000000567432.png", "image_id": 567432}, {"segments_info": [{"id": 2434610, "category_id": 1, "iscrowd": 0, "bbox": [0, 82, 48, 208], "area": 3982}, {"id": 2583441, "category_id": 1, "iscrowd": 0, "bbox": [25, 58, 41, 108], "area": 2530}, {"id": 4276299, "category_id": 1, "iscrowd": 0, "bbox": [147, 58, 116, 281], "area": 10635}, {"id": 3356238, "category_id": 1, "iscrowd": 0, "bbox": [0, 79, 192, 301], "area": 21297}, {"id": 9537173, "category_id": 1, "iscrowd": 0, "bbox": [287, 44, 202, 328], "area": 20353}, {"id": 10525616, "category_id": 1, "iscrowd": 0, "bbox": [168, 53, 52, 101], "area": 1607}, {"id": 8945298, "category_id": 1, "iscrowd": 0, "bbox": [144, 75, 195, 318], "area": 20574}, {"id": 8419182, "category_id": 3, "iscrowd": 0, "bbox": [237, 71, 59, 56], "area": 1798}, {"id": 6708302, "category_id": 8, "iscrowd": 0, "bbox": [305, 59, 92, 73], "area": 4155}, {"id": 10924723, "category_id": 37, "iscrowd": 0, "bbox": [561, 353, 50, 48], "area": 1838}, {"id": 7173741, "category_id": 138, "iscrowd": 0, "bbox": [0, 57, 112, 74], "area": 3278}, {"id": 2457430, "category_id": 145, "iscrowd": 0, "bbox": [0, 116, 640, 309], "area": 110869}, {"id": 3290673, "category_id": 184, "iscrowd": 0, "bbox": [546, 13, 94, 69], "area": 3331}, {"id": 6714213, "category_id": 185, "iscrowd": 0, "bbox": [120, 49, 520, 116], "area": 18268}, {"id": 3695687, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 612, 92], "area": 32719}, {"id": 9013390, "category_id": 197, "iscrowd": 0, "bbox": [196, 0, 444, 165], "area": 5361}], "file_name": "000000567640.png", "image_id": 567640}, {"segments_info": [{"id": 3485236, "category_id": 1, "iscrowd": 0, "bbox": [442, 113, 133, 355], "area": 26214}, {"id": 3157041, "category_id": 1, "iscrowd": 0, "bbox": [1, 117, 219, 306], "area": 20599}, {"id": 2828840, "category_id": 27, "iscrowd": 0, "bbox": [47, 210, 41, 72], "area": 1460}, {"id": 1644823, "category_id": 27, "iscrowd": 0, "bbox": [563, 190, 23, 61], "area": 821}, {"id": 7498628, "category_id": 35, "iscrowd": 0, "bbox": [55, 396, 221, 67], "area": 3669}, {"id": 9602944, "category_id": 35, "iscrowd": 0, "bbox": [347, 400, 128, 68], "area": 1883}, {"id": 12365477, "category_id": 159, "iscrowd": 0, "bbox": [0, 214, 640, 266], "area": 107123}, {"id": 7367786, "category_id": 184, "iscrowd": 0, "bbox": [0, 110, 640, 184], "area": 34475}, {"id": 13212522, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 84], "area": 37697}, {"id": 9864825, "category_id": 192, "iscrowd": 0, "bbox": [0, 45, 640, 220], "area": 72554}], "file_name": "000000567740.png", "image_id": 567740}, {"segments_info": [{"id": 7571621, "category_id": 44, "iscrowd": 0, "bbox": [19, 0, 169, 305], "area": 44912}, {"id": 6580596, "category_id": 46, "iscrowd": 0, "bbox": [238, 8, 151, 350], "area": 34403}, {"id": 8361921, "category_id": 54, "iscrowd": 0, "bbox": [13, 260, 280, 312], "area": 70601}, {"id": 11253452, "category_id": 189, "iscrowd": 0, "bbox": [0, 320, 427, 308], "area": 60415}], "file_name": "000000567825.png", "image_id": 567825}, {"segments_info": [{"id": 8153681, "category_id": 1, "iscrowd": 0, "bbox": [0, 99, 198, 268], "area": 37271}, {"id": 3622464, "category_id": 84, "iscrowd": 0, "bbox": [54, 2, 18, 81], "area": 962}, {"id": 5665720, "category_id": 84, "iscrowd": 0, "bbox": [35, 1, 17, 85], "area": 772}, {"id": 5202060, "category_id": 84, "iscrowd": 0, "bbox": [0, 4, 42, 82], "area": 2752}, {"id": 11779522, "category_id": 88, "iscrowd": 0, "bbox": [67, 42, 151, 135], "area": 10570}, {"id": 7041398, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 111, 123], "area": 3321}, {"id": 4739687, "category_id": 195, "iscrowd": 0, "bbox": [17, 11, 69, 72], "area": 1257}, {"id": 11578799, "category_id": 199, "iscrowd": 0, "bbox": [107, 0, 370, 89], "area": 24582}, {"id": 3940625, "category_id": 200, "iscrowd": 0, "bbox": [0, 64, 500, 311], "area": 83759}], "file_name": "000000567886.png", "image_id": 567886}, {"segments_info": [{"id": 4415354, "category_id": 51, "iscrowd": 0, "bbox": [78, 215, 251, 233], "area": 43668}, {"id": 8157547, "category_id": 51, "iscrowd": 0, "bbox": [179, 0, 287, 261], "area": 13224}, {"id": 6654360, "category_id": 55, "iscrowd": 0, "bbox": [487, 279, 85, 156], "area": 7343}, {"id": 9416880, "category_id": 55, "iscrowd": 0, "bbox": [426, 223, 99, 119], "area": 6917}, {"id": 6655648, "category_id": 55, "iscrowd": 0, "bbox": [361, 231, 92, 64], "area": 3586}, {"id": 4491736, "category_id": 57, "iscrowd": 0, "bbox": [294, 17, 66, 71], "area": 2685}, {"id": 4755157, "category_id": 57, "iscrowd": 0, "bbox": [333, 95, 67, 70], "area": 2724}, {"id": 4224428, "category_id": 57, "iscrowd": 0, "bbox": [267, 33, 23, 23], "area": 377}, {"id": 3504314, "category_id": 57, "iscrowd": 0, "bbox": [175, 320, 54, 55], "area": 1237}, {"id": 3833280, "category_id": 57, "iscrowd": 0, "bbox": [308, 178, 70, 65], "area": 2579}, {"id": 4751805, "category_id": 57, "iscrowd": 0, "bbox": [379, 146, 23, 25], "area": 362}, {"id": 4556492, "category_id": 57, "iscrowd": 0, "bbox": [368, 37, 75, 73], "area": 2674}, {"id": 4028858, "category_id": 57, "iscrowd": 0, "bbox": [315, 84, 24, 25], "area": 396}, {"id": 4358595, "category_id": 57, "iscrowd": 0, "bbox": [284, 104, 22, 25], "area": 377}, {"id": 4623062, "category_id": 57, "iscrowd": 0, "bbox": [228, 54, 76, 73], "area": 2870}, {"id": 3766723, "category_id": 57, "iscrowd": 0, "bbox": [252, 142, 69, 53], "area": 2383}, {"id": 5925752, "category_id": 61, "iscrowd": 0, "bbox": [193, 2, 249, 234], "area": 28732}, {"id": 8035997, "category_id": 122, "iscrowd": 0, "bbox": [507, 266, 43, 91], "area": 319}, {"id": 2900583, "category_id": 196, "iscrowd": 0, "bbox": [359, 252, 149, 126], "area": 5268}], "file_name": "000000567898.png", "image_id": 567898}, {"segments_info": [{"id": 1654332, "category_id": 1, "iscrowd": 0, "bbox": [225, 0, 14, 29], "area": 314}, {"id": 2304288, "category_id": 1, "iscrowd": 0, "bbox": [0, 32, 37, 36], "area": 544}, {"id": 3682334, "category_id": 1, "iscrowd": 0, "bbox": [238, 0, 15, 28], "area": 381}, {"id": 3421488, "category_id": 1, "iscrowd": 0, "bbox": [384, 0, 31, 35], "area": 574}, {"id": 2246237, "category_id": 3, "iscrowd": 0, "bbox": [374, 0, 106, 25], "area": 1537}, {"id": 7237729, "category_id": 3, "iscrowd": 0, "bbox": [317, 0, 31, 28], "area": 669}, {"id": 3355695, "category_id": 14, "iscrowd": 0, "bbox": [148, 28, 209, 409], "area": 60256}, {"id": 10000534, "category_id": 149, "iscrowd": 0, "bbox": [0, 14, 480, 604], "area": 173620}, {"id": 9673888, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 40771}, {"id": 11838619, "category_id": 195, "iscrowd": 0, "bbox": [186, 484, 111, 141], "area": 9984}, {"id": 7238507, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 187, 40], "area": 3985}], "file_name": "000000568147.png", "image_id": 568147}, {"segments_info": [{"id": 5533850, "category_id": 1, "iscrowd": 0, "bbox": [5, 77, 148, 494], "area": 23081}, {"id": 2962498, "category_id": 1, "iscrowd": 0, "bbox": [286, 140, 141, 324], "area": 24493}, {"id": 6382997, "category_id": 1, "iscrowd": 0, "bbox": [124, 137, 233, 310], "area": 38464}, {"id": 2593203, "category_id": 44, "iscrowd": 0, "bbox": [290, 594, 26, 46], "area": 837}, {"id": 4676207, "category_id": 44, "iscrowd": 0, "bbox": [337, 592, 49, 48], "area": 1851}, {"id": 7766936, "category_id": 48, "iscrowd": 0, "bbox": [347, 507, 73, 14], "area": 259}, {"id": 4940152, "category_id": 48, "iscrowd": 0, "bbox": [341, 492, 74, 17], "area": 219}, {"id": 6715013, "category_id": 48, "iscrowd": 0, "bbox": [331, 495, 94, 18], "area": 386}, {"id": 4413038, "category_id": 48, "iscrowd": 0, "bbox": [333, 503, 64, 14], "area": 238}, {"id": 5464188, "category_id": 49, "iscrowd": 0, "bbox": [184, 400, 33, 29], "area": 300}, {"id": 11124438, "category_id": 61, "iscrowd": 0, "bbox": [198, 416, 121, 83], "area": 8009}, {"id": 3177667, "category_id": 67, "iscrowd": 0, "bbox": [0, 503, 427, 137], "area": 33894}, {"id": 8291203, "category_id": 85, "iscrowd": 0, "bbox": [40, 0, 52, 46], "area": 1896}, {"id": 2708865, "category_id": 156, "iscrowd": 0, "bbox": [0, 37, 373, 91], "area": 12033}, {"id": 4485274, "category_id": 189, "iscrowd": 0, "bbox": [0, 436, 427, 204], "area": 12433}, {"id": 10794172, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 427, 466], "area": 77110}], "file_name": "000000568195.png", "image_id": 568195}, {"segments_info": [{"id": 7634563, "category_id": 1, "iscrowd": 0, "bbox": [111, 34, 166, 231], "area": 13622}, {"id": 5266520, "category_id": 1, "iscrowd": 0, "bbox": [351, 14, 113, 253], "area": 12543}, {"id": 9611173, "category_id": 34, "iscrowd": 0, "bbox": [78, 98, 40, 28], "area": 712}, {"id": 3570022, "category_id": 145, "iscrowd": 0, "bbox": [0, 26, 500, 299], "area": 119897}], "file_name": "000000568213.png", "image_id": 568213}, {"segments_info": [{"id": 10717817, "category_id": 1, "iscrowd": 0, "bbox": [560, 199, 12, 27], "area": 161}, {"id": 7233867, "category_id": 1, "iscrowd": 0, "bbox": [300, 193, 31, 32], "area": 441}, {"id": 12109767, "category_id": 1, "iscrowd": 0, "bbox": [630, 199, 8, 17], "area": 69}, {"id": 9605248, "category_id": 3, "iscrowd": 0, "bbox": [539, 203, 39, 23], "area": 509}, {"id": 6381155, "category_id": 4, "iscrowd": 0, "bbox": [563, 214, 7, 16], "area": 71}, {"id": 10132626, "category_id": 4, "iscrowd": 0, "bbox": [615, 204, 14, 13], "area": 109}, {"id": 4208942, "category_id": 4, "iscrowd": 0, "bbox": [482, 210, 10, 17], "area": 106}, {"id": 10000787, "category_id": 4, "iscrowd": 0, "bbox": [513, 208, 15, 15], "area": 145}, {"id": 6710383, "category_id": 6, "iscrowd": 0, "bbox": [192, 127, 285, 166], "area": 40467}, {"id": 9606793, "category_id": 8, "iscrowd": 0, "bbox": [545, 175, 67, 46], "area": 2357}, {"id": 10133402, "category_id": 128, "iscrowd": 0, "bbox": [472, 31, 168, 199], "area": 18745}, {"id": 9540016, "category_id": 149, "iscrowd": 0, "bbox": [0, 204, 640, 223], "area": 99347}, {"id": 8951206, "category_id": 171, "iscrowd": 0, "bbox": [28, 202, 21, 23], "area": 336}, {"id": 4482127, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 256], "area": 87801}, {"id": 15919553, "category_id": 187, "iscrowd": 0, "bbox": [317, 0, 315, 58], "area": 6608}, {"id": 7829623, "category_id": 191, "iscrowd": 0, "bbox": [0, 229, 640, 83], "area": 8039}, {"id": 4284747, "category_id": 193, "iscrowd": 0, "bbox": [0, 221, 193, 52], "area": 2806}, {"id": 5658188, "category_id": 197, "iscrowd": 0, "bbox": [0, 117, 307, 130], "area": 2465}], "file_name": "000000568290.png", "image_id": 568290}, {"segments_info": [{"id": 1840663, "category_id": 1, "iscrowd": 0, "bbox": [594, 227, 30, 80], "area": 1325}, {"id": 1906711, "category_id": 1, "iscrowd": 0, "bbox": [561, 231, 12, 65], "area": 455}, {"id": 2569293, "category_id": 1, "iscrowd": 0, "bbox": [47, 243, 9, 13], "area": 73}, {"id": 1906965, "category_id": 1, "iscrowd": 0, "bbox": [624, 234, 12, 49], "area": 371}, {"id": 3750463, "category_id": 1, "iscrowd": 0, "bbox": [56, 243, 13, 39], "area": 302}, {"id": 4999753, "category_id": 1, "iscrowd": 0, "bbox": [238, 225, 21, 21], "area": 285}, {"id": 2171435, "category_id": 1, "iscrowd": 0, "bbox": [25, 242, 8, 19], "area": 89}, {"id": 2303794, "category_id": 1, "iscrowd": 0, "bbox": [32, 244, 9, 33], "area": 186}, {"id": 2169887, "category_id": 1, "iscrowd": 0, "bbox": [562, 230, 36, 81], "area": 1183}, {"id": 2893089, "category_id": 1, "iscrowd": 0, "bbox": [95, 244, 8, 31], "area": 119}, {"id": 3223091, "category_id": 1, "iscrowd": 0, "bbox": [490, 207, 73, 196], "area": 8598}, {"id": 1710626, "category_id": 1, "iscrowd": 0, "bbox": [68, 243, 10, 25], "area": 131}, {"id": 5461342, "category_id": 1, "iscrowd": 0, "bbox": [41, 246, 11, 35], "area": 240}, {"id": 3093300, "category_id": 1, "iscrowd": 1, "bbox": [566, 277, 23, 33], "area": 245}, {"id": 5395547, "category_id": 6, "iscrowd": 0, "bbox": [463, 202, 47, 60], "area": 2331}, {"id": 7895669, "category_id": 6, "iscrowd": 0, "bbox": [397, 187, 46, 79], "area": 2038}, {"id": 6054266, "category_id": 6, "iscrowd": 0, "bbox": [102, 152, 113, 145], "area": 14543}, {"id": 6118749, "category_id": 6, "iscrowd": 0, "bbox": [213, 112, 185, 203], "area": 29431}, {"id": 5459280, "category_id": 27, "iscrowd": 0, "bbox": [501, 235, 48, 55], "area": 440}, {"id": 1578527, "category_id": 27, "iscrowd": 0, "bbox": [583, 243, 14, 26], "area": 295}, {"id": 2835061, "category_id": 31, "iscrowd": 0, "bbox": [60, 253, 8, 8], "area": 35}, {"id": 4345684, "category_id": 31, "iscrowd": 0, "bbox": [631, 249, 6, 11], "area": 46}, {"id": 3291457, "category_id": 31, "iscrowd": 0, "bbox": [48, 251, 7, 13], "area": 45}, {"id": 8488572, "category_id": 31, "iscrowd": 0, "bbox": [93, 260, 7, 10], "area": 42}, {"id": 5990520, "category_id": 31, "iscrowd": 0, "bbox": [73, 254, 7, 5], "area": 20}, {"id": 5066318, "category_id": 149, "iscrowd": 0, "bbox": [0, 256, 494, 193], "area": 41686}, {"id": 3690314, "category_id": 184, "iscrowd": 0, "bbox": [420, 0, 220, 256], "area": 40004}, {"id": 16316382, "category_id": 187, "iscrowd": 0, "bbox": [158, 0, 323, 208], "area": 16505}, {"id": 6844017, "category_id": 191, "iscrowd": 0, "bbox": [0, 269, 640, 180], "area": 54753}, {"id": 5462879, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 294], "area": 64278}], "file_name": "000000568439.png", "image_id": 568439}, {"segments_info": [{"id": 1512216, "category_id": 1, "iscrowd": 0, "bbox": [299, 67, 243, 308], "area": 33282}, {"id": 722959, "category_id": 62, "iscrowd": 0, "bbox": [331, 166, 215, 239], "area": 8432}, {"id": 656648, "category_id": 63, "iscrowd": 0, "bbox": [1, 162, 292, 259], "area": 63096}, {"id": 6583939, "category_id": 85, "iscrowd": 0, "bbox": [225, 25, 31, 29], "area": 687}, {"id": 1841183, "category_id": 109, "iscrowd": 0, "bbox": [51, 0, 589, 391], "area": 51356}, {"id": 1842213, "category_id": 118, "iscrowd": 0, "bbox": [0, 305, 640, 121], "area": 31731}, {"id": 853511, "category_id": 119, "iscrowd": 0, "bbox": [33, 114, 78, 55], "area": 2905}, {"id": 13030614, "category_id": 130, "iscrowd": 0, "bbox": [253, 0, 125, 73], "area": 7489}, {"id": 1246210, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 144, 172], "area": 12995}, {"id": 6515823, "category_id": 199, "iscrowd": 0, "bbox": [192, 0, 356, 354], "area": 54507}], "file_name": "000000568584.png", "image_id": 568584}, {"segments_info": [{"id": 5139067, "category_id": 17, "iscrowd": 0, "bbox": [131, 182, 156, 143], "area": 17390}, {"id": 11123391, "category_id": 70, "iscrowd": 0, "bbox": [93, 282, 328, 349], "area": 76365}, {"id": 5069407, "category_id": 109, "iscrowd": 0, "bbox": [334, 0, 146, 453], "area": 54219}, {"id": 6054478, "category_id": 176, "iscrowd": 0, "bbox": [275, 0, 205, 539], "area": 19937}, {"id": 7373191, "category_id": 190, "iscrowd": 0, "bbox": [0, 410, 480, 230], "area": 54440}, {"id": 9213831, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 302, 432], "area": 84016}], "file_name": "000000568690.png", "image_id": 568690}, {"segments_info": [{"id": 6380110, "category_id": 1, "iscrowd": 0, "bbox": [502, 287, 138, 140], "area": 14308}, {"id": 795966, "category_id": 62, "iscrowd": 0, "bbox": [451, 171, 28, 23], "area": 517}, {"id": 3093816, "category_id": 63, "iscrowd": 0, "bbox": [412, 184, 228, 190], "area": 29255}, {"id": 1460061, "category_id": 64, "iscrowd": 0, "bbox": [503, 152, 39, 30], "area": 714}, {"id": 1389650, "category_id": 67, "iscrowd": 0, "bbox": [436, 178, 107, 18], "area": 769}, {"id": 2312038, "category_id": 79, "iscrowd": 0, "bbox": [434, 159, 27, 19], "area": 311}, {"id": 2832696, "category_id": 84, "iscrowd": 0, "bbox": [622, 114, 12, 24], "area": 78}, {"id": 1646143, "category_id": 86, "iscrowd": 0, "bbox": [362, 177, 18, 27], "area": 394}, {"id": 1383200, "category_id": 100, "iscrowd": 0, "bbox": [11, 188, 34, 52], "area": 1243}, {"id": 1519951, "category_id": 118, "iscrowd": 0, "bbox": [0, 222, 440, 128], "area": 21748}, {"id": 13823992, "category_id": 130, "iscrowd": 0, "bbox": [510, 103, 32, 19], "area": 409}, {"id": 7044997, "category_id": 156, "iscrowd": 0, "bbox": [545, 0, 95, 155], "area": 5242}, {"id": 11586773, "category_id": 181, "iscrowd": 0, "bbox": [488, 136, 22, 32], "area": 436}, {"id": 3895706, "category_id": 186, "iscrowd": 0, "bbox": [414, 0, 143, 137], "area": 11404}, {"id": 2121103, "category_id": 188, "iscrowd": 0, "bbox": [420, 112, 91, 80], "area": 3054}, {"id": 1647144, "category_id": 190, "iscrowd": 0, "bbox": [168, 270, 136, 36], "area": 2746}, {"id": 5661286, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 286], "area": 106344}, {"id": 4016238, "category_id": 200, "iscrowd": 0, "bbox": [0, 226, 527, 201], "area": 49229}], "file_name": "000000568710.png", "image_id": 568710}, {"segments_info": [{"id": 6775921, "category_id": 1, "iscrowd": 0, "bbox": [1, 245, 55, 108], "area": 2803}, {"id": 7367028, "category_id": 1, "iscrowd": 0, "bbox": [139, 2, 501, 353], "area": 75150}, {"id": 5264747, "category_id": 1, "iscrowd": 0, "bbox": [107, 250, 20, 54], "area": 672}, {"id": 6907223, "category_id": 32, "iscrowd": 0, "bbox": [81, 255, 288, 103], "area": 11240}, {"id": 1388157, "category_id": 62, "iscrowd": 0, "bbox": [1, 318, 28, 37], "area": 734}, {"id": 8553880, "category_id": 67, "iscrowd": 0, "bbox": [7, 318, 92, 15], "area": 939}, {"id": 5138066, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 231], "area": 44447}, {"id": 811442, "category_id": 199, "iscrowd": 0, "bbox": [0, 38, 640, 321], "area": 90614}], "file_name": "000000568814.png", "image_id": 568814}, {"segments_info": [{"id": 6248014, "category_id": 1, "iscrowd": 0, "bbox": [17, 156, 233, 221], "area": 12479}, {"id": 9468739, "category_id": 1, "iscrowd": 0, "bbox": [569, 7, 71, 221], "area": 8096}, {"id": 3485734, "category_id": 27, "iscrowd": 0, "bbox": [107, 315, 72, 55], "area": 2312}, {"id": 4938082, "category_id": 41, "iscrowd": 0, "bbox": [584, 220, 56, 25], "area": 892}, {"id": 9147283, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 158721}, {"id": 2510407, "category_id": 193, "iscrowd": 0, "bbox": [0, 173, 276, 253], "area": 37892}, {"id": 10197914, "category_id": 199, "iscrowd": 0, "bbox": [0, 12, 407, 414], "area": 51837}], "file_name": "000000568981.png", "image_id": 568981}, {"segments_info": [{"id": 7432307, "category_id": 1, "iscrowd": 0, "bbox": [297, 105, 9, 41], "area": 249}, {"id": 3813420, "category_id": 1, "iscrowd": 0, "bbox": [472, 93, 15, 22], "area": 206}, {"id": 4147283, "category_id": 1, "iscrowd": 0, "bbox": [31, 60, 60, 75], "area": 2991}, {"id": 3093047, "category_id": 1, "iscrowd": 0, "bbox": [356, 99, 10, 35], "area": 245}, {"id": 3618879, "category_id": 1, "iscrowd": 0, "bbox": [334, 94, 4, 11], "area": 34}, {"id": 7368034, "category_id": 1, "iscrowd": 0, "bbox": [377, 96, 18, 50], "area": 595}, {"id": 7764614, "category_id": 1, "iscrowd": 0, "bbox": [282, 104, 13, 41], "area": 369}, {"id": 5130838, "category_id": 1, "iscrowd": 0, "bbox": [247, 95, 16, 47], "area": 456}, {"id": 12699082, "category_id": 1, "iscrowd": 0, "bbox": [331, 100, 15, 41], "area": 377}, {"id": 3288631, "category_id": 1, "iscrowd": 0, "bbox": [216, 101, 15, 34], "area": 244}, {"id": 9539222, "category_id": 1, "iscrowd": 0, "bbox": [259, 97, 13, 48], "area": 356}, {"id": 4802385, "category_id": 1, "iscrowd": 0, "bbox": [240, 100, 10, 20], "area": 138}, {"id": 4734002, "category_id": 3, "iscrowd": 0, "bbox": [116, 110, 37, 17], "area": 358}, {"id": 12169386, "category_id": 3, "iscrowd": 0, "bbox": [426, 118, 51, 37], "area": 1230}, {"id": 14013132, "category_id": 8, "iscrowd": 0, "bbox": [459, 115, 41, 118], "area": 3227}, {"id": 2763319, "category_id": 8, "iscrowd": 0, "bbox": [1, 70, 116, 68], "area": 2793}, {"id": 2372446, "category_id": 10, "iscrowd": 0, "bbox": [234, 52, 10, 14], "area": 117}, {"id": 3291994, "category_id": 10, "iscrowd": 0, "bbox": [211, 14, 15, 18], "area": 202}, {"id": 4078897, "category_id": 10, "iscrowd": 0, "bbox": [299, 37, 13, 34], "area": 382}, {"id": 3027253, "category_id": 11, "iscrowd": 0, "bbox": [284, 179, 69, 142], "area": 4886}, {"id": 4014401, "category_id": 15, "iscrowd": 0, "bbox": [0, 165, 173, 159], "area": 12754}, {"id": 6580579, "category_id": 15, "iscrowd": 0, "bbox": [13, 133, 140, 33], "area": 4131}, {"id": 2301990, "category_id": 27, "iscrowd": 0, "bbox": [73, 97, 41, 38], "area": 1007}, {"id": 6573901, "category_id": 31, "iscrowd": 0, "bbox": [300, 111, 8, 8], "area": 36}, {"id": 11315624, "category_id": 149, "iscrowd": 0, "bbox": [0, 95, 500, 197], "area": 44634}, {"id": 1844507, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 411, 118], "area": 19985}, {"id": 16118509, "category_id": 187, "iscrowd": 0, "bbox": [341, 0, 55, 72], "area": 2230}, {"id": 7499881, "category_id": 191, "iscrowd": 0, "bbox": [0, 120, 500, 255], "area": 48119}, {"id": 5791321, "category_id": 197, "iscrowd": 0, "bbox": [20, 0, 480, 136], "area": 27689}], "file_name": "000000569030.png", "image_id": 569030}, {"segments_info": [{"id": 5266544, "category_id": 1, "iscrowd": 0, "bbox": [227, 179, 9, 11], "area": 53}, {"id": 4603769, "category_id": 1, "iscrowd": 0, "bbox": [397, 152, 21, 27], "area": 453}, {"id": 5003623, "category_id": 1, "iscrowd": 0, "bbox": [201, 185, 15, 28], "area": 265}, {"id": 5070199, "category_id": 1, "iscrowd": 0, "bbox": [211, 178, 8, 16], "area": 65}, {"id": 6122365, "category_id": 1, "iscrowd": 0, "bbox": [194, 179, 13, 21], "area": 157}, {"id": 3686218, "category_id": 1, "iscrowd": 0, "bbox": [220, 176, 11, 34], "area": 165}, {"id": 3159098, "category_id": 1, "iscrowd": 0, "bbox": [227, 172, 14, 38], "area": 281}, {"id": 3818321, "category_id": 1, "iscrowd": 0, "bbox": [211, 185, 14, 27], "area": 228}, {"id": 11251903, "category_id": 1, "iscrowd": 0, "bbox": [181, 179, 18, 33], "area": 346}, {"id": 5656394, "category_id": 62, "iscrowd": 0, "bbox": [387, 402, 253, 72], "area": 9636}, {"id": 7295788, "category_id": 72, "iscrowd": 0, "bbox": [231, 38, 164, 168], "area": 22068}, {"id": 13092810, "category_id": 74, "iscrowd": 0, "bbox": [461, 275, 42, 21], "area": 602}, {"id": 13158605, "category_id": 76, "iscrowd": 0, "bbox": [243, 268, 194, 71], "area": 6632}, {"id": 6910076, "category_id": 77, "iscrowd": 0, "bbox": [397, 191, 46, 17], "area": 513}, {"id": 3623778, "category_id": 118, "iscrowd": 0, "bbox": [243, 406, 177, 74], "area": 5067}, {"id": 4497130, "category_id": 130, "iscrowd": 0, "bbox": [77, 72, 93, 161], "area": 6607}, {"id": 6454163, "category_id": 185, "iscrowd": 0, "bbox": [198, 177, 17, 22], "area": 54}, {"id": 4875395, "category_id": 189, "iscrowd": 0, "bbox": [35, 173, 584, 307], "area": 101348}, {"id": 9406080, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 131855}], "file_name": "000000569059.png", "image_id": 569059}, {"segments_info": [{"id": 10787998, "category_id": 1, "iscrowd": 0, "bbox": [53, 123, 29, 25], "area": 398}, {"id": 8752547, "category_id": 1, "iscrowd": 0, "bbox": [13, 117, 23, 20], "area": 219}, {"id": 11647159, "category_id": 1, "iscrowd": 0, "bbox": [34, 101, 30, 46], "area": 844}, {"id": 6713453, "category_id": 1, "iscrowd": 0, "bbox": [154, 79, 49, 55], "area": 1654}, {"id": 6252930, "category_id": 1, "iscrowd": 0, "bbox": [212, 86, 54, 76], "area": 2174}, {"id": 7379114, "category_id": 11, "iscrowd": 0, "bbox": [405, 111, 168, 364], "area": 34975}, {"id": 4281175, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 381], "area": 110662}, {"id": 14533817, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 579, 40], "area": 18156}, {"id": 10132639, "category_id": 192, "iscrowd": 0, "bbox": [0, 20, 559, 145], "area": 37120}, {"id": 9412783, "category_id": 193, "iscrowd": 0, "bbox": [0, 126, 57, 21], "area": 485}, {"id": 6649997, "category_id": 194, "iscrowd": 0, "bbox": [0, 232, 640, 248], "area": 86187}], "file_name": "000000569273.png", "image_id": 569273}, {"segments_info": [{"id": 8355198, "category_id": 8, "iscrowd": 0, "bbox": [475, 234, 147, 58], "area": 6763}, {"id": 5601923, "category_id": 8, "iscrowd": 0, "bbox": [133, 191, 312, 126], "area": 23934}, {"id": 4869199, "category_id": 128, "iscrowd": 0, "bbox": [101, 118, 393, 183], "area": 21448}, {"id": 11579827, "category_id": 149, "iscrowd": 0, "bbox": [0, 265, 640, 162], "area": 72433}, {"id": 4478539, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 295], "area": 111409}, {"id": 16435355, "category_id": 187, "iscrowd": 0, "bbox": [160, 0, 480, 121], "area": 21908}, {"id": 6591113, "category_id": 193, "iscrowd": 0, "bbox": [0, 258, 640, 169], "area": 15010}], "file_name": "000000569565.png", "image_id": 569565}, {"segments_info": [{"id": 3428481, "category_id": 64, "iscrowd": 0, "bbox": [7, 24, 429, 314], "area": 52927}, {"id": 542257, "category_id": 86, "iscrowd": 0, "bbox": [198, 227, 82, 109], "area": 8461}, {"id": 7376543, "category_id": 133, "iscrowd": 0, "bbox": [0, 0, 495, 286], "area": 67855}, {"id": 5404552, "category_id": 181, "iscrowd": 0, "bbox": [355, 166, 61, 73], "area": 3034}, {"id": 8495786, "category_id": 189, "iscrowd": 0, "bbox": [0, 309, 500, 32], "area": 7017}, {"id": 6066842, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 326], "area": 25449}], "file_name": "000000569700.png", "image_id": 569700}, {"segments_info": [{"id": 986125, "category_id": 1, "iscrowd": 0, "bbox": [253, 12, 35, 41], "area": 871}, {"id": 197123, "category_id": 1, "iscrowd": 0, "bbox": [15, 65, 36, 65], "area": 1401}, {"id": 4734279, "category_id": 1, "iscrowd": 0, "bbox": [188, 27, 117, 440], "area": 28768}, {"id": 262924, "category_id": 1, "iscrowd": 0, "bbox": [81, 7, 89, 79], "area": 1659}, {"id": 723210, "category_id": 1, "iscrowd": 0, "bbox": [207, 134, 7, 19], "area": 80}, {"id": 855825, "category_id": 40, "iscrowd": 0, "bbox": [201, 255, 47, 57], "area": 2046}, {"id": 2704219, "category_id": 145, "iscrowd": 0, "bbox": [0, 149, 338, 351], "area": 85961}, {"id": 1905939, "category_id": 185, "iscrowd": 0, "bbox": [0, 23, 330, 154], "area": 27101}, {"id": 1447449, "category_id": 199, "iscrowd": 0, "bbox": [8, 0, 238, 50], "area": 6087}], "file_name": "000000569825.png", "image_id": 569825}, {"segments_info": [{"id": 6062498, "category_id": 44, "iscrowd": 0, "bbox": [161, 317, 41, 90], "area": 1249}, {"id": 4216686, "category_id": 70, "iscrowd": 0, "bbox": [1, 430, 136, 203], "area": 24300}, {"id": 6788794, "category_id": 81, "iscrowd": 0, "bbox": [150, 318, 327, 198], "area": 36985}, {"id": 5204366, "category_id": 90, "iscrowd": 0, "bbox": [337, 281, 16, 73], "area": 397}, {"id": 5134188, "category_id": 90, "iscrowd": 0, "bbox": [326, 282, 16, 73], "area": 475}, {"id": 6920641, "category_id": 107, "iscrowd": 0, "bbox": [431, 379, 49, 43], "area": 520}, {"id": 7511739, "category_id": 133, "iscrowd": 0, "bbox": [180, 0, 167, 183], "area": 25761}, {"id": 5138561, "category_id": 156, "iscrowd": 0, "bbox": [0, 0, 219, 640], "area": 41991}, {"id": 5403292, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 92248}, {"id": 5071737, "category_id": 188, "iscrowd": 0, "bbox": [119, 415, 361, 225], "area": 50929}, {"id": 6261682, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 132], "area": 26729}], "file_name": "000000569917.png", "image_id": 569917}, {"segments_info": [{"id": 5850166, "category_id": 1, "iscrowd": 0, "bbox": [93, 225, 113, 141], "area": 5608}, {"id": 11579297, "category_id": 42, "iscrowd": 0, "bbox": [115, 361, 104, 25], "area": 1920}, {"id": 8155242, "category_id": 154, "iscrowd": 0, "bbox": [0, 539, 640, 35], "area": 13773}, {"id": 10061942, "category_id": 155, "iscrowd": 0, "bbox": [0, 150, 640, 408], "area": 243381}, {"id": 15716776, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 170], "area": 102492}], "file_name": "000000569972.png", "image_id": 569972}, {"segments_info": [{"id": 2964034, "category_id": 1, "iscrowd": 0, "bbox": [129, 1, 212, 410], "area": 45529}, {"id": 3683113, "category_id": 1, "iscrowd": 0, "bbox": [39, 337, 198, 269], "area": 29524}, {"id": 5466243, "category_id": 1, "iscrowd": 0, "bbox": [188, 266, 146, 184], "area": 10721}, {"id": 6508331, "category_id": 62, "iscrowd": 0, "bbox": [210, 492, 123, 148], "area": 12604}, {"id": 6782839, "category_id": 62, "iscrowd": 0, "bbox": [169, 474, 108, 38], "area": 1576}, {"id": 3290964, "category_id": 62, "iscrowd": 0, "bbox": [0, 522, 264, 118], "area": 21516}, {"id": 3419691, "category_id": 89, "iscrowd": 0, "bbox": [195, 210, 144, 228], "area": 9639}, {"id": 3755602, "category_id": 133, "iscrowd": 0, "bbox": [308, 447, 28, 59], "area": 919}, {"id": 11392210, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 480, 640], "area": 145746}], "file_name": "000000569976.png", "image_id": 569976}, {"segments_info": [{"id": 5274265, "category_id": 88, "iscrowd": 0, "bbox": [42, 3, 379, 336], "area": 64289}, {"id": 9287619, "category_id": 189, "iscrowd": 0, "bbox": [0, 302, 390, 242], "area": 31664}, {"id": 3824260, "category_id": 190, "iscrowd": 0, "bbox": [33, 158, 149, 147], "area": 3169}, {"id": 2377564, "category_id": 200, "iscrowd": 0, "bbox": [0, 461, 260, 179], "area": 36709}], "file_name": "000000570169.png", "image_id": 570169}, {"segments_info": [{"id": 7039851, "category_id": 1, "iscrowd": 0, "bbox": [314, 166, 16, 41], "area": 294}, {"id": 8618883, "category_id": 1, "iscrowd": 0, "bbox": [220, 183, 17, 21], "area": 165}, {"id": 10197915, "category_id": 9, "iscrowd": 0, "bbox": [79, 167, 12, 8], "area": 60}, {"id": 2960685, "category_id": 9, "iscrowd": 0, "bbox": [575, 170, 37, 6], "area": 186}, {"id": 12434877, "category_id": 9, "iscrowd": 0, "bbox": [140, 168, 6, 2], "area": 11}, {"id": 10526880, "category_id": 9, "iscrowd": 0, "bbox": [207, 191, 173, 26], "area": 2116}, {"id": 10395294, "category_id": 9, "iscrowd": 0, "bbox": [493, 156, 27, 19], "area": 343}, {"id": 6908265, "category_id": 9, "iscrowd": 0, "bbox": [119, 160, 7, 10], "area": 36}, {"id": 11908533, "category_id": 9, "iscrowd": 0, "bbox": [271, 159, 41, 16], "area": 340}, {"id": 3947580, "category_id": 9, "iscrowd": 0, "bbox": [16, 162, 19, 13], "area": 182}, {"id": 10658466, "category_id": 154, "iscrowd": 0, "bbox": [0, 359, 640, 125], "area": 48371}, {"id": 11119017, "category_id": 155, "iscrowd": 0, "bbox": [0, 158, 640, 300], "area": 152161}, {"id": 11645361, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 566, 179], "area": 79257}, {"id": 3684408, "category_id": 192, "iscrowd": 0, "bbox": [0, 0, 640, 180], "area": 26018}], "file_name": "000000570448.png", "image_id": 570448}, {"segments_info": [{"id": 9142643, "category_id": 51, "iscrowd": 0, "bbox": [176, 315, 15, 13], "area": 149}, {"id": 5528158, "category_id": 51, "iscrowd": 0, "bbox": [120, 269, 32, 18], "area": 433}, {"id": 10330015, "category_id": 62, "iscrowd": 0, "bbox": [449, 224, 64, 79], "area": 3837}, {"id": 9803408, "category_id": 62, "iscrowd": 0, "bbox": [350, 258, 89, 84], "area": 3414}, {"id": 5465720, "category_id": 62, "iscrowd": 0, "bbox": [389, 185, 26, 60], "area": 834}, {"id": 2961201, "category_id": 63, "iscrowd": 0, "bbox": [295, 285, 132, 127], "area": 10087}, {"id": 2436415, "category_id": 67, "iscrowd": 0, "bbox": [285, 179, 113, 108], "area": 5176}, {"id": 7045000, "category_id": 67, "iscrowd": 0, "bbox": [100, 242, 119, 166], "area": 7696}, {"id": 6049606, "category_id": 81, "iscrowd": 0, "bbox": [48, 253, 45, 25], "area": 612}, {"id": 6716548, "category_id": 84, "iscrowd": 0, "bbox": [386, 181, 13, 8], "area": 55}, {"id": 7769751, "category_id": 84, "iscrowd": 0, "bbox": [387, 175, 30, 11], "area": 202}, {"id": 6849173, "category_id": 109, "iscrowd": 0, "bbox": [412, 70, 182, 220], "area": 10643}, {"id": 12634310, "category_id": 112, "iscrowd": 0, "bbox": [125, 88, 515, 234], "area": 32714}, {"id": 2567740, "category_id": 118, "iscrowd": 0, "bbox": [106, 323, 40, 42], "area": 779}, {"id": 8548426, "category_id": 141, "iscrowd": 0, "bbox": [370, 269, 37, 37], "area": 815}, {"id": 7106929, "category_id": 180, "iscrowd": 0, "bbox": [248, 70, 102, 131], "area": 10873}, {"id": 12236972, "category_id": 181, "iscrowd": 0, "bbox": [0, 101, 188, 128], "area": 3712}, {"id": 4868939, "category_id": 188, "iscrowd": 0, "bbox": [0, 262, 127, 103], "area": 6451}, {"id": 6382428, "category_id": 189, "iscrowd": 0, "bbox": [425, 310, 83, 51], "area": 1727}, {"id": 4083559, "category_id": 190, "iscrowd": 0, "bbox": [0, 216, 640, 264], "area": 54424}, {"id": 9801857, "category_id": 195, "iscrowd": 0, "bbox": [211, 172, 21, 24], "area": 353}, {"id": 9278604, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 118459}, {"id": 6974571, "category_id": 200, "iscrowd": 0, "bbox": [32, 321, 113, 112], "area": 8571}], "file_name": "000000570456.png", "image_id": 570456}, {"segments_info": [{"id": 5397612, "category_id": 1, "iscrowd": 0, "bbox": [48, 0, 327, 494], "area": 67788}, {"id": 5585221, "category_id": 1, "iscrowd": 0, "bbox": [199, 88, 176, 166], "area": 10370}, {"id": 6582388, "category_id": 47, "iscrowd": 0, "bbox": [24, 229, 55, 84], "area": 2928}, {"id": 3036256, "category_id": 51, "iscrowd": 0, "bbox": [0, 251, 36, 41], "area": 1111}, {"id": 9213373, "category_id": 61, "iscrowd": 0, "bbox": [56, 472, 79, 28], "area": 1628}, {"id": 8238274, "category_id": 61, "iscrowd": 0, "bbox": [0, 329, 62, 59], "area": 2232}, {"id": 8365753, "category_id": 61, "iscrowd": 0, "bbox": [46, 415, 99, 60], "area": 4310}, {"id": 9483978, "category_id": 61, "iscrowd": 0, "bbox": [0, 371, 101, 77], "area": 5280}, {"id": 5792349, "category_id": 62, "iscrowd": 0, "bbox": [32, 101, 66, 73], "area": 3857}, {"id": 3684407, "category_id": 67, "iscrowd": 0, "bbox": [72, 266, 136, 225], "area": 11348}, {"id": 1401736, "category_id": 122, "iscrowd": 0, "bbox": [0, 427, 112, 73], "area": 3700}, {"id": 4542812, "category_id": 189, "iscrowd": 0, "bbox": [0, 191, 216, 253], "area": 4882}, {"id": 12499643, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 267, 294], "area": 14905}, {"id": 8224386, "category_id": 196, "iscrowd": 0, "bbox": [0, 335, 169, 165], "area": 1294}, {"id": 10662329, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 253, 203], "area": 22110}, {"id": 856864, "category_id": 200, "iscrowd": 0, "bbox": [152, 410, 123, 90], "area": 5595}], "file_name": "000000570471.png", "image_id": 570471}, {"segments_info": [{"id": 2766650, "category_id": 1, "iscrowd": 0, "bbox": [140, 130, 156, 182], "area": 16337}, {"id": 9220524, "category_id": 1, "iscrowd": 0, "bbox": [134, 135, 12, 18], "area": 143}, {"id": 9748681, "category_id": 1, "iscrowd": 0, "bbox": [107, 135, 12, 18], "area": 135}, {"id": 7563116, "category_id": 1, "iscrowd": 0, "bbox": [38, 150, 67, 94], "area": 3246}, {"id": 7509678, "category_id": 1, "iscrowd": 0, "bbox": [119, 139, 10, 14], "area": 91}, {"id": 4147774, "category_id": 1, "iscrowd": 0, "bbox": [0, 103, 72, 162], "area": 5572}, {"id": 6256547, "category_id": 6, "iscrowd": 0, "bbox": [0, 1, 369, 499], "area": 153081}, {"id": 2766124, "category_id": 31, "iscrowd": 0, "bbox": [14, 182, 111, 115], "area": 4244}], "file_name": "000000570539.png", "image_id": 570539}, {"segments_info": [{"id": 2631464, "category_id": 1, "iscrowd": 0, "bbox": [0, 25, 105, 304], "area": 19430}, {"id": 7305345, "category_id": 17, "iscrowd": 0, "bbox": [177, 12, 180, 157], "area": 12280}, {"id": 4013117, "category_id": 17, "iscrowd": 0, "bbox": [276, 133, 185, 193], "area": 24253}, {"id": 5069161, "category_id": 100, "iscrowd": 0, "bbox": [252, 248, 87, 85], "area": 3436}, {"id": 3494004, "category_id": 118, "iscrowd": 0, "bbox": [79, 118, 53, 17], "area": 630}, {"id": 4868936, "category_id": 161, "iscrowd": 0, "bbox": [128, 0, 103, 108], "area": 5690}, {"id": 3691381, "category_id": 177, "iscrowd": 0, "bbox": [225, 0, 13, 61], "area": 442}, {"id": 6505766, "category_id": 180, "iscrowd": 0, "bbox": [229, 0, 271, 294], "area": 18318}, {"id": 9278356, "category_id": 190, "iscrowd": 0, "bbox": [38, 64, 258, 269], "area": 26011}, {"id": 10066069, "category_id": 199, "iscrowd": 0, "bbox": [22, 0, 461, 199], "area": 24839}, {"id": 4737356, "category_id": 200, "iscrowd": 0, "bbox": [64, 160, 436, 173], "area": 13704}], "file_name": "000000570664.png", "image_id": 570664}, {"segments_info": [{"id": 2108267, "category_id": 1, "iscrowd": 0, "bbox": [28, 363, 24, 64], "area": 859}, {"id": 1843777, "category_id": 1, "iscrowd": 0, "bbox": [93, 372, 27, 45], "area": 651}, {"id": 4939401, "category_id": 1, "iscrowd": 0, "bbox": [59, 365, 24, 33], "area": 283}, {"id": 5462141, "category_id": 1, "iscrowd": 0, "bbox": [215, 328, 42, 143], "area": 3812}, {"id": 4277619, "category_id": 1, "iscrowd": 0, "bbox": [497, 381, 31, 97], "area": 1824}, {"id": 2831449, "category_id": 1, "iscrowd": 0, "bbox": [155, 380, 59, 40], "area": 1174}, {"id": 5925026, "category_id": 1, "iscrowd": 0, "bbox": [293, 386, 57, 59], "area": 1523}, {"id": 1977960, "category_id": 1, "iscrowd": 0, "bbox": [140, 360, 33, 48], "area": 604}, {"id": 6117240, "category_id": 1, "iscrowd": 0, "bbox": [261, 342, 47, 123], "area": 2736}, {"id": 1318733, "category_id": 1, "iscrowd": 0, "bbox": [452, 370, 53, 110], "area": 3129}, {"id": 2898802, "category_id": 1, "iscrowd": 0, "bbox": [404, 345, 53, 135], "area": 3441}, {"id": 858446, "category_id": 1, "iscrowd": 0, "bbox": [522, 362, 47, 118], "area": 3946}, {"id": 5131892, "category_id": 1, "iscrowd": 0, "bbox": [33, 339, 27, 75], "area": 723}, {"id": 5203077, "category_id": 1, "iscrowd": 1, "bbox": [4, 187, 632, 266], "area": 13585}, {"id": 7961734, "category_id": 3, "iscrowd": 0, "bbox": [404, 347, 18, 8], "area": 72}, {"id": 9474458, "category_id": 3, "iscrowd": 0, "bbox": [488, 346, 12, 9], "area": 55}, {"id": 6449531, "category_id": 3, "iscrowd": 0, "bbox": [616, 344, 8, 8], "area": 43}, {"id": 6974593, "category_id": 3, "iscrowd": 0, "bbox": [571, 345, 22, 12], "area": 185}, {"id": 7108488, "category_id": 3, "iscrowd": 0, "bbox": [472, 348, 11, 7], "area": 40}, {"id": 6648968, "category_id": 3, "iscrowd": 0, "bbox": [476, 347, 16, 9], "area": 77}, {"id": 5594478, "category_id": 3, "iscrowd": 0, "bbox": [559, 345, 18, 11], "area": 124}, {"id": 6187905, "category_id": 3, "iscrowd": 0, "bbox": [600, 344, 15, 12], "area": 122}, {"id": 5790572, "category_id": 3, "iscrowd": 0, "bbox": [386, 348, 10, 9], "area": 83}, {"id": 6189714, "category_id": 38, "iscrowd": 0, "bbox": [241, 125, 23, 12], "area": 181}, {"id": 12823661, "category_id": 38, "iscrowd": 0, "bbox": [281, 217, 141, 48], "area": 2547}, {"id": 5425811, "category_id": 38, "iscrowd": 0, "bbox": [177, 238, 80, 21], "area": 443}, {"id": 8480911, "category_id": 38, "iscrowd": 0, "bbox": [431, 30, 19, 14], "area": 190}, {"id": 10043496, "category_id": 38, "iscrowd": 0, "bbox": [331, 65, 56, 21], "area": 450}, {"id": 6974363, "category_id": 38, "iscrowd": 0, "bbox": [223, 266, 171, 58], "area": 1404}, {"id": 12432049, "category_id": 38, "iscrowd": 0, "bbox": [281, 93, 45, 13], "area": 116}, {"id": 5913822, "category_id": 38, "iscrowd": 0, "bbox": [462, 253, 18, 16], "area": 190}, {"id": 10398114, "category_id": 38, "iscrowd": 0, "bbox": [222, 180, 231, 62], "area": 1864}, {"id": 10397867, "category_id": 38, "iscrowd": 0, "bbox": [233, 21, 9, 9], "area": 50}, {"id": 11307982, "category_id": 38, "iscrowd": 0, "bbox": [507, 195, 16, 20], "area": 237}, {"id": 9657717, "category_id": 38, "iscrowd": 0, "bbox": [324, 160, 142, 55], "area": 2093}, {"id": 5530544, "category_id": 38, "iscrowd": 0, "bbox": [116, 178, 21, 13], "area": 156}, {"id": 13871249, "category_id": 38, "iscrowd": 1, "bbox": [54, 0, 569, 264], "area": 882}, {"id": 8563926, "category_id": 154, "iscrowd": 0, "bbox": [0, 343, 640, 137], "area": 37579}, {"id": 11909069, "category_id": 155, "iscrowd": 0, "bbox": [0, 451, 21, 29], "area": 515}, {"id": 4142654, "category_id": 168, "iscrowd": 0, "bbox": [125, 393, 93, 25], "area": 244}, {"id": 992293, "category_id": 184, "iscrowd": 0, "bbox": [0, 285, 640, 84], "area": 18453}, {"id": 15452078, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 348], "area": 189468}, {"id": 1664141, "category_id": 193, "iscrowd": 0, "bbox": [142, 338, 143, 27], "area": 1135}], "file_name": "000000570688.png", "image_id": 570688}, {"segments_info": [{"id": 9934496, "category_id": 70, "iscrowd": 0, "bbox": [140, 348, 135, 207], "area": 14887}, {"id": 3093310, "category_id": 81, "iscrowd": 0, "bbox": [261, 347, 166, 72], "area": 7617}, {"id": 3099769, "category_id": 112, "iscrowd": 0, "bbox": [402, 373, 25, 267], "area": 3862}, {"id": 2765626, "category_id": 130, "iscrowd": 0, "bbox": [384, 0, 43, 34], "area": 850}, {"id": 7043463, "category_id": 133, "iscrowd": 0, "bbox": [168, 27, 259, 267], "area": 55764}, {"id": 7175580, "category_id": 168, "iscrowd": 0, "bbox": [305, 301, 39, 67], "area": 1899}, {"id": 8818592, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 427, 496], "area": 83886}, {"id": 15396076, "category_id": 181, "iscrowd": 0, "bbox": [0, 183, 21, 165], "area": 2192}, {"id": 8423053, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 175, 41], "area": 4378}, {"id": 530244, "category_id": 188, "iscrowd": 0, "bbox": [258, 381, 163, 220], "area": 25873}, {"id": 5528949, "category_id": 190, "iscrowd": 0, "bbox": [34, 474, 371, 166], "area": 33083}, {"id": 5727096, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 262, 640], "area": 18291}], "file_name": "000000570736.png", "image_id": 570736}, {"segments_info": [{"id": 3750000, "category_id": 1, "iscrowd": 0, "bbox": [291, 281, 6, 16], "area": 61}, {"id": 1971523, "category_id": 1, "iscrowd": 0, "bbox": [274, 284, 5, 12], "area": 25}, {"id": 2365467, "category_id": 1, "iscrowd": 0, "bbox": [225, 299, 42, 48], "area": 1060}, {"id": 4666430, "category_id": 1, "iscrowd": 0, "bbox": [351, 279, 7, 17], "area": 92}, {"id": 4933457, "category_id": 1, "iscrowd": 0, "bbox": [150, 282, 5, 20], "area": 74}, {"id": 3946601, "category_id": 1, "iscrowd": 0, "bbox": [163, 284, 7, 18], "area": 81}, {"id": 2630480, "category_id": 1, "iscrowd": 0, "bbox": [415, 291, 21, 41], "area": 670}, {"id": 6838622, "category_id": 1, "iscrowd": 0, "bbox": [186, 283, 6, 20], "area": 81}, {"id": 7232358, "category_id": 1, "iscrowd": 0, "bbox": [136, 281, 7, 19], "area": 84}, {"id": 5261138, "category_id": 1, "iscrowd": 0, "bbox": [485, 272, 8, 20], "area": 106}, {"id": 3486266, "category_id": 1, "iscrowd": 0, "bbox": [195, 283, 374, 20], "area": 103}, {"id": 5853791, "category_id": 1, "iscrowd": 0, "bbox": [212, 280, 10, 25], "area": 146}, {"id": 3811148, "category_id": 1, "iscrowd": 0, "bbox": [556, 292, 24, 43], "area": 690}, {"id": 6510952, "category_id": 1, "iscrowd": 1, "bbox": [0, 268, 563, 43], "area": 5871}, {"id": 7035020, "category_id": 38, "iscrowd": 0, "bbox": [0, 304, 53, 19], "area": 591}, {"id": 10906714, "category_id": 38, "iscrowd": 0, "bbox": [153, 174, 6, 4], "area": 13}, {"id": 11957069, "category_id": 38, "iscrowd": 0, "bbox": [191, 231, 28, 17], "area": 123}, {"id": 10699143, "category_id": 38, "iscrowd": 0, "bbox": [157, 249, 22, 22], "area": 199}, {"id": 9995149, "category_id": 38, "iscrowd": 0, "bbox": [499, 224, 9, 5], "area": 31}, {"id": 13015673, "category_id": 38, "iscrowd": 0, "bbox": [441, 168, 16, 6], "area": 37}, {"id": 9857917, "category_id": 38, "iscrowd": 0, "bbox": [161, 146, 9, 4], "area": 26}, {"id": 9923960, "category_id": 38, "iscrowd": 0, "bbox": [120, 179, 13, 5], "area": 27}, {"id": 11373440, "category_id": 38, "iscrowd": 0, "bbox": [341, 230, 8, 4], "area": 22}, {"id": 12488805, "category_id": 38, "iscrowd": 0, "bbox": [355, 210, 6, 5], "area": 16}, {"id": 5260123, "category_id": 38, "iscrowd": 0, "bbox": [513, 324, 110, 18], "area": 789}, {"id": 5651278, "category_id": 38, "iscrowd": 0, "bbox": [203, 335, 88, 19], "area": 520}, {"id": 5719640, "category_id": 38, "iscrowd": 0, "bbox": [367, 327, 108, 20], "area": 571}, {"id": 12030337, "category_id": 38, "iscrowd": 1, "bbox": [0, 149, 521, 141], "area": 4420}, {"id": 8351860, "category_id": 92, "iscrowd": 0, "bbox": [66, 265, 20, 23], "area": 296}, {"id": 7303305, "category_id": 154, "iscrowd": 0, "bbox": [0, 267, 640, 161], "area": 84445}, {"id": 7036524, "category_id": 166, "iscrowd": 0, "bbox": [98, 270, 39, 27], "area": 516}, {"id": 4079447, "category_id": 184, "iscrowd": 0, "bbox": [0, 253, 170, 38], "area": 1572}, {"id": 13410706, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 290], "area": 169233}, {"id": 10846071, "category_id": 192, "iscrowd": 0, "bbox": [205, 264, 48, 25], "area": 622}], "file_name": "000000570756.png", "image_id": 570756}, {"segments_info": [{"id": 13089206, "category_id": 44, "iscrowd": 0, "bbox": [137, 126, 47, 144], "area": 4516}, {"id": 4212814, "category_id": 73, "iscrowd": 0, "bbox": [249, 162, 189, 161], "area": 9963}, {"id": 7828596, "category_id": 73, "iscrowd": 0, "bbox": [30, 147, 276, 257], "area": 16919}, {"id": 2763048, "category_id": 74, "iscrowd": 0, "bbox": [497, 202, 40, 20], "area": 604}, {"id": 5391423, "category_id": 75, "iscrowd": 0, "bbox": [86, 253, 77, 36], "area": 1328}, {"id": 4079680, "category_id": 76, "iscrowd": 0, "bbox": [73, 283, 232, 120], "area": 14455}, {"id": 3947839, "category_id": 76, "iscrowd": 0, "bbox": [300, 196, 199, 60], "area": 6327}, {"id": 8293528, "category_id": 76, "iscrowd": 0, "bbox": [262, 254, 175, 79], "area": 7474}, {"id": 3884627, "category_id": 100, "iscrowd": 0, "bbox": [399, 99, 181, 123], "area": 9657}, {"id": 5263440, "category_id": 130, "iscrowd": 0, "bbox": [247, 107, 29, 79], "area": 1171}, {"id": 15329511, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 486, 136], "area": 39540}, {"id": 15195090, "category_id": 181, "iscrowd": 0, "bbox": [0, 128, 59, 45], "area": 1739}, {"id": 10397871, "category_id": 189, "iscrowd": 0, "bbox": [0, 190, 583, 237], "area": 28112}, {"id": 7697018, "category_id": 195, "iscrowd": 0, "bbox": [131, 37, 435, 302], "area": 13371}, {"id": 7172470, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 35639}], "file_name": "000000570782.png", "image_id": 570782}, {"segments_info": [{"id": 1250584, "category_id": 1, "iscrowd": 0, "bbox": [185, 165, 69, 185], "area": 7269}, {"id": 2895925, "category_id": 2, "iscrowd": 0, "bbox": [167, 209, 28, 75], "area": 1071}, {"id": 4209466, "category_id": 2, "iscrowd": 0, "bbox": [150, 196, 29, 43], "area": 523}, {"id": 2368804, "category_id": 2, "iscrowd": 0, "bbox": [192, 236, 8, 49], "area": 242}, {"id": 1514270, "category_id": 2, "iscrowd": 0, "bbox": [282, 226, 30, 69], "area": 987}, {"id": 1844010, "category_id": 2, "iscrowd": 0, "bbox": [297, 221, 24, 47], "area": 583}, {"id": 4803922, "category_id": 2, "iscrowd": 0, "bbox": [276, 269, 80, 149], "area": 5767}, {"id": 2040870, "category_id": 2, "iscrowd": 0, "bbox": [259, 230, 30, 61], "area": 934}, {"id": 3094077, "category_id": 2, "iscrowd": 0, "bbox": [393, 253, 75, 158], "area": 7577}, {"id": 2172207, "category_id": 2, "iscrowd": 0, "bbox": [246, 223, 35, 66], "area": 753}, {"id": 2829359, "category_id": 2, "iscrowd": 0, "bbox": [356, 258, 79, 162], "area": 3766}, {"id": 3487287, "category_id": 2, "iscrowd": 0, "bbox": [324, 266, 73, 164], "area": 4320}, {"id": 7765629, "category_id": 112, "iscrowd": 0, "bbox": [106, 156, 316, 134], "area": 7835}, {"id": 11056830, "category_id": 130, "iscrowd": 0, "bbox": [172, 0, 468, 163], "area": 2171}, {"id": 10929617, "category_id": 181, "iscrowd": 0, "bbox": [64, 137, 456, 172], "area": 7976}, {"id": 7436926, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 168], "area": 83920}, {"id": 5924471, "category_id": 190, "iscrowd": 0, "bbox": [71, 217, 486, 263], "area": 52771}, {"id": 5265760, "category_id": 199, "iscrowd": 0, "bbox": [0, 73, 640, 407], "area": 112935}], "file_name": "000000570834.png", "image_id": 570834}, {"segments_info": [{"id": 5063010, "category_id": 13, "iscrowd": 0, "bbox": [147, 45, 346, 330], "area": 93559}, {"id": 4211262, "category_id": 184, "iscrowd": 0, "bbox": [373, 335, 134, 90], "area": 7461}, {"id": 14929861, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 145252}], "file_name": "000000571008.png", "image_id": 571008}, {"segments_info": [{"id": 5921370, "category_id": 1, "iscrowd": 0, "bbox": [266, 30, 149, 359], "area": 26546}, {"id": 5329233, "category_id": 4, "iscrowd": 0, "bbox": [62, 85, 267, 314], "area": 40014}, {"id": 12369084, "category_id": 149, "iscrowd": 0, "bbox": [0, 309, 563, 117], "area": 32920}, {"id": 7697781, "category_id": 184, "iscrowd": 0, "bbox": [0, 198, 640, 113], "area": 28125}, {"id": 16645629, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 124], "area": 66416}, {"id": 10526880, "category_id": 192, "iscrowd": 0, "bbox": [0, 99, 640, 175], "area": 53049}, {"id": 9408399, "category_id": 193, "iscrowd": 0, "bbox": [0, 288, 640, 138], "area": 21693}, {"id": 12961221, "category_id": 194, "iscrowd": 0, "bbox": [403, 353, 128, 43], "area": 1889}, {"id": 13290186, "category_id": 197, "iscrowd": 0, "bbox": [33, 103, 92, 17], "area": 1074}], "file_name": "000000571264.png", "image_id": 571264}, {"segments_info": [{"id": 3161694, "category_id": 62, "iscrowd": 0, "bbox": [0, 518, 170, 122], "area": 12135}, {"id": 8291961, "category_id": 65, "iscrowd": 0, "bbox": [330, 420, 150, 213], "area": 19044}, {"id": 9866122, "category_id": 67, "iscrowd": 0, "bbox": [324, 305, 107, 117], "area": 3760}, {"id": 12893359, "category_id": 72, "iscrowd": 0, "bbox": [0, 252, 87, 113], "area": 7076}, {"id": 14145750, "category_id": 74, "iscrowd": 0, "bbox": [129, 335, 27, 21], "area": 394}, {"id": 10266532, "category_id": 76, "iscrowd": 0, "bbox": [7, 349, 115, 50], "area": 2248}, {"id": 14539994, "category_id": 78, "iscrowd": 0, "bbox": [3, 246, 94, 132], "area": 3052}, {"id": 10001301, "category_id": 82, "iscrowd": 0, "bbox": [206, 168, 118, 167], "area": 15699}, {"id": 2767671, "category_id": 93, "iscrowd": 0, "bbox": [331, 623, 149, 17], "area": 1575}, {"id": 9011577, "category_id": 100, "iscrowd": 0, "bbox": [93, 134, 271, 374], "area": 7672}, {"id": 12434871, "category_id": 109, "iscrowd": 0, "bbox": [0, 70, 56, 108], "area": 5726}, {"id": 13882056, "category_id": 112, "iscrowd": 0, "bbox": [444, 89, 36, 331], "area": 8554}, {"id": 16053492, "category_id": 130, "iscrowd": 0, "bbox": [0, 175, 93, 94], "area": 6665}, {"id": 7111043, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 480, 56], "area": 17596}, {"id": 7432543, "category_id": 188, "iscrowd": 0, "bbox": [189, 307, 184, 147], "area": 11035}, {"id": 3094586, "category_id": 189, "iscrowd": 0, "bbox": [0, 267, 349, 275], "area": 31405}, {"id": 5197900, "category_id": 190, "iscrowd": 0, "bbox": [1, 410, 435, 230], "area": 37080}, {"id": 9934998, "category_id": 195, "iscrowd": 0, "bbox": [122, 261, 175, 269], "area": 7161}, {"id": 7504515, "category_id": 199, "iscrowd": 0, "bbox": [0, 16, 480, 405], "area": 90755}, {"id": 13348734, "category_id": 200, "iscrowd": 0, "bbox": [413, 409, 66, 60], "area": 1915}], "file_name": "000000571313.png", "image_id": 571313}, {"segments_info": [{"id": 5531002, "category_id": 1, "iscrowd": 0, "bbox": [458, 120, 182, 352], "area": 42121}, {"id": 10656418, "category_id": 1, "iscrowd": 0, "bbox": [0, 107, 205, 373], "area": 48503}, {"id": 1648944, "category_id": 1, "iscrowd": 0, "bbox": [445, 262, 24, 28], "area": 447}, {"id": 2502715, "category_id": 1, "iscrowd": 0, "bbox": [137, 270, 12, 26], "area": 244}, {"id": 6575224, "category_id": 1, "iscrowd": 0, "bbox": [9, 268, 8, 11], "area": 47}, {"id": 7186640, "category_id": 1, "iscrowd": 0, "bbox": [466, 270, 13, 14], "area": 140}, {"id": 5076917, "category_id": 1, "iscrowd": 0, "bbox": [163, 253, 57, 52], "area": 846}, {"id": 2970761, "category_id": 1, "iscrowd": 0, "bbox": [476, 267, 17, 12], "area": 127}, {"id": 2435883, "category_id": 1, "iscrowd": 0, "bbox": [111, 285, 70, 56], "area": 1923}, {"id": 4608095, "category_id": 1, "iscrowd": 0, "bbox": [176, 95, 288, 385], "area": 71601}, {"id": 4731680, "category_id": 32, "iscrowd": 0, "bbox": [61, 317, 48, 163], "area": 4999}, {"id": 3685959, "category_id": 32, "iscrowd": 0, "bbox": [514, 290, 46, 190], "area": 5221}, {"id": 10331047, "category_id": 75, "iscrowd": 0, "bbox": [571, 349, 44, 73], "area": 1766}, {"id": 12894656, "category_id": 75, "iscrowd": 0, "bbox": [94, 448, 48, 32], "area": 1017}, {"id": 14474973, "category_id": 75, "iscrowd": 0, "bbox": [351, 371, 47, 51], "area": 1228}, {"id": 8293281, "category_id": 92, "iscrowd": 0, "bbox": [24, 108, 478, 187], "area": 6127}, {"id": 10662329, "category_id": 130, "iscrowd": 0, "bbox": [213, 0, 422, 183], "area": 2508}, {"id": 2374984, "category_id": 186, "iscrowd": 0, "bbox": [106, 0, 534, 193], "area": 72048}, {"id": 3489877, "category_id": 199, "iscrowd": 0, "bbox": [0, 108, 640, 200], "area": 29013}], "file_name": "000000571598.png", "image_id": 571598}, {"segments_info": [{"id": 8421761, "category_id": 1, "iscrowd": 0, "bbox": [414, 4, 211, 416], "area": 45136}, {"id": 4079166, "category_id": 1, "iscrowd": 0, "bbox": [220, 12, 84, 61], "area": 2314}, {"id": 7260649, "category_id": 52, "iscrowd": 0, "bbox": [205, 239, 61, 61], "area": 2777}, {"id": 8175330, "category_id": 52, "iscrowd": 0, "bbox": [338, 256, 57, 39], "area": 1495}, {"id": 9034485, "category_id": 52, "iscrowd": 0, "bbox": [198, 178, 46, 51], "area": 1371}, {"id": 6534616, "category_id": 52, "iscrowd": 0, "bbox": [225, 160, 70, 70], "area": 2171}, {"id": 6406877, "category_id": 52, "iscrowd": 0, "bbox": [296, 223, 26, 50], "area": 505}, {"id": 6857156, "category_id": 52, "iscrowd": 0, "bbox": [0, 265, 54, 22], "area": 644}, {"id": 8705002, "category_id": 52, "iscrowd": 0, "bbox": [264, 149, 78, 29], "area": 823}, {"id": 6145253, "category_id": 52, "iscrowd": 0, "bbox": [250, 230, 77, 73], "area": 2345}, {"id": 7978714, "category_id": 52, "iscrowd": 0, "bbox": [110, 205, 70, 81], "area": 3198}, {"id": 7193316, "category_id": 52, "iscrowd": 0, "bbox": [66, 254, 81, 47], "area": 2674}, {"id": 6335184, "category_id": 52, "iscrowd": 0, "bbox": [0, 235, 112, 53], "area": 2654}, {"id": 7718378, "category_id": 52, "iscrowd": 0, "bbox": [17, 199, 89, 50], "area": 3254}, {"id": 9757426, "category_id": 52, "iscrowd": 0, "bbox": [258, 168, 41, 42], "area": 896}, {"id": 7841466, "category_id": 52, "iscrowd": 1, "bbox": [126, 139, 342, 216], "area": 32951}, {"id": 3289650, "category_id": 62, "iscrowd": 0, "bbox": [46, 22, 41, 38], "area": 1136}, {"id": 4473924, "category_id": 62, "iscrowd": 0, "bbox": [179, 49, 46, 58], "area": 1965}, {"id": 3684665, "category_id": 62, "iscrowd": 0, "bbox": [127, 26, 44, 37], "area": 835}, {"id": 5921628, "category_id": 62, "iscrowd": 0, "bbox": [269, 61, 47, 37], "area": 1044}, {"id": 3487029, "category_id": 62, "iscrowd": 0, "bbox": [0, 34, 71, 160], "area": 5111}, {"id": 5921370, "category_id": 62, "iscrowd": 0, "bbox": [310, 76, 45, 34], "area": 1049}, {"id": 1579289, "category_id": 62, "iscrowd": 0, "bbox": [450, 64, 47, 17], "area": 503}, {"id": 4671303, "category_id": 62, "iscrowd": 0, "bbox": [382, 74, 44, 45], "area": 1360}, {"id": 2302756, "category_id": 62, "iscrowd": 0, "bbox": [183, 18, 44, 45], "area": 1119}, {"id": 4934475, "category_id": 62, "iscrowd": 0, "bbox": [215, 61, 57, 53], "area": 1842}, {"id": 4144959, "category_id": 62, "iscrowd": 0, "bbox": [34, 52, 57, 147], "area": 5113}, {"id": 3750459, "category_id": 62, "iscrowd": 0, "bbox": [297, 41, 38, 35], "area": 912}, {"id": 4802889, "category_id": 62, "iscrowd": 0, "bbox": [346, 63, 41, 74], "area": 1646}, {"id": 12698049, "category_id": 67, "iscrowd": 0, "bbox": [492, 105, 39, 49], "area": 998}, {"id": 9145227, "category_id": 67, "iscrowd": 0, "bbox": [585, 213, 55, 170], "area": 5742}, {"id": 11316396, "category_id": 67, "iscrowd": 0, "bbox": [424, 79, 74, 88], "area": 2186}, {"id": 15000804, "category_id": 67, "iscrowd": 0, "bbox": [84, 86, 98, 17], "area": 903}, {"id": 13882324, "category_id": 67, "iscrowd": 0, "bbox": [263, 90, 89, 32], "area": 1227}, {"id": 4408131, "category_id": 109, "iscrowd": 0, "bbox": [288, 0, 45, 49], "area": 1761}, {"id": 1316632, "category_id": 119, "iscrowd": 0, "bbox": [16, 0, 191, 30], "area": 1254}, {"id": 2171170, "category_id": 171, "iscrowd": 0, "bbox": [322, 0, 318, 89], "area": 3137}, {"id": 1052946, "category_id": 181, "iscrowd": 0, "bbox": [563, 0, 77, 87], "area": 3234}, {"id": 5000268, "category_id": 191, "iscrowd": 0, "bbox": [0, 165, 640, 262], "area": 6283}, {"id": 11645876, "category_id": 195, "iscrowd": 0, "bbox": [94, 54, 546, 168], "area": 8069}, {"id": 2237219, "category_id": 199, "iscrowd": 0, "bbox": [205, 0, 339, 86], "area": 5225}], "file_name": "000000571718.png", "image_id": 571718}, {"segments_info": [{"id": 6713956, "category_id": 51, "iscrowd": 0, "bbox": [151, 292, 49, 40], "area": 1576}, {"id": 4873046, "category_id": 51, "iscrowd": 0, "bbox": [352, 264, 97, 69], "area": 5183}, {"id": 3358777, "category_id": 51, "iscrowd": 0, "bbox": [145, 198, 65, 61], "area": 3046}, {"id": 3425859, "category_id": 51, "iscrowd": 0, "bbox": [457, 268, 101, 73], "area": 5830}, {"id": 5135700, "category_id": 70, "iscrowd": 0, "bbox": [273, 189, 87, 124], "area": 6806}, {"id": 6847091, "category_id": 81, "iscrowd": 0, "bbox": [153, 100, 137, 75], "area": 7281}, {"id": 8752767, "category_id": 81, "iscrowd": 0, "bbox": [358, 118, 205, 97], "area": 14929}, {"id": 5266769, "category_id": 81, "iscrowd": 0, "bbox": [18, 148, 82, 69], "area": 3184}, {"id": 5399646, "category_id": 86, "iscrowd": 0, "bbox": [100, 217, 52, 69], "area": 2471}, {"id": 7634287, "category_id": 189, "iscrowd": 0, "bbox": [0, 237, 582, 189], "area": 55725}, {"id": 6186325, "category_id": 190, "iscrowd": 0, "bbox": [0, 324, 275, 102], "area": 14551}, {"id": 9015163, "category_id": 195, "iscrowd": 0, "bbox": [218, 12, 88, 345], "area": 3583}, {"id": 6450788, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 426], "area": 145520}], "file_name": "000000571804.png", "image_id": 571804}, {"segments_info": [{"id": 4871528, "category_id": 1, "iscrowd": 0, "bbox": [117, 221, 30, 80], "area": 1271}, {"id": 6843506, "category_id": 1, "iscrowd": 0, "bbox": [170, 222, 37, 79], "area": 1596}, {"id": 6186084, "category_id": 2, "iscrowd": 0, "bbox": [481, 261, 54, 20], "area": 452}, {"id": 6516332, "category_id": 2, "iscrowd": 0, "bbox": [425, 262, 99, 35], "area": 1174}, {"id": 10462629, "category_id": 5, "iscrowd": 0, "bbox": [0, 161, 502, 130], "area": 16925}, {"id": 10329753, "category_id": 5, "iscrowd": 0, "bbox": [273, 193, 103, 12], "area": 335}, {"id": 10461339, "category_id": 5, "iscrowd": 0, "bbox": [269, 189, 157, 41], "area": 2302}, {"id": 11316648, "category_id": 5, "iscrowd": 0, "bbox": [3, 194, 85, 30], "area": 821}, {"id": 7501680, "category_id": 44, "iscrowd": 0, "bbox": [401, 273, 5, 14], "area": 59}, {"id": 9542033, "category_id": 44, "iscrowd": 0, "bbox": [388, 270, 10, 18], "area": 148}, {"id": 9345165, "category_id": 44, "iscrowd": 0, "bbox": [415, 268, 9, 19], "area": 144}, {"id": 11381932, "category_id": 47, "iscrowd": 0, "bbox": [130, 247, 6, 10], "area": 40}, {"id": 7043196, "category_id": 62, "iscrowd": 0, "bbox": [99, 250, 55, 48], "area": 832}, {"id": 6910066, "category_id": 62, "iscrowd": 0, "bbox": [160, 235, 54, 64], "area": 863}, {"id": 9807788, "category_id": 154, "iscrowd": 0, "bbox": [0, 190, 640, 236], "area": 120740}, {"id": 11571309, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 205], "area": 105062}, {"id": 9868173, "category_id": 192, "iscrowd": 0, "bbox": [331, 132, 309, 75], "area": 11827}], "file_name": "000000571857.png", "image_id": 571857}, {"segments_info": [{"id": 1784666, "category_id": 79, "iscrowd": 0, "bbox": [3, 125, 319, 160], "area": 20777}, {"id": 8762095, "category_id": 84, "iscrowd": 0, "bbox": [344, 152, 22, 83], "area": 1547}, {"id": 2442189, "category_id": 84, "iscrowd": 0, "bbox": [413, 168, 40, 67], "area": 749}, {"id": 5396606, "category_id": 84, "iscrowd": 0, "bbox": [310, 154, 16, 81], "area": 1071}, {"id": 5670358, "category_id": 84, "iscrowd": 0, "bbox": [362, 159, 26, 77], "area": 1362}, {"id": 1391197, "category_id": 84, "iscrowd": 0, "bbox": [379, 156, 29, 79], "area": 1296}, {"id": 5280971, "category_id": 84, "iscrowd": 0, "bbox": [300, 141, 29, 94], "area": 1096}, {"id": 4427732, "category_id": 84, "iscrowd": 0, "bbox": [401, 161, 27, 75], "area": 618}, {"id": 925122, "category_id": 84, "iscrowd": 0, "bbox": [279, 125, 12, 108], "area": 1126}, {"id": 662220, "category_id": 84, "iscrowd": 0, "bbox": [333, 151, 13, 83], "area": 936}, {"id": 2719659, "category_id": 84, "iscrowd": 0, "bbox": [292, 133, 12, 100], "area": 912}, {"id": 5285094, "category_id": 84, "iscrowd": 0, "bbox": [325, 154, 8, 81], "area": 567}, {"id": 2779556, "category_id": 84, "iscrowd": 0, "bbox": [298, 285, 12, 89], "area": 1027}, {"id": 4482755, "category_id": 84, "iscrowd": 0, "bbox": [394, 161, 26, 76], "area": 604}, {"id": 1851532, "category_id": 84, "iscrowd": 1, "bbox": [270, 167, 178, 226], "area": 8863}, {"id": 945235, "category_id": 85, "iscrowd": 0, "bbox": [0, 141, 16, 16], "area": 150}, {"id": 332630, "category_id": 86, "iscrowd": 0, "bbox": [466, 185, 15, 41], "area": 226}, {"id": 1259119, "category_id": 86, "iscrowd": 0, "bbox": [441, 187, 34, 51], "area": 1263}, {"id": 803700, "category_id": 107, "iscrowd": 0, "bbox": [0, 282, 513, 146], "area": 49503}, {"id": 336980, "category_id": 130, "iscrowd": 0, "bbox": [282, 0, 113, 155], "area": 6170}, {"id": 7648999, "category_id": 177, "iscrowd": 0, "bbox": [249, 0, 269, 236], "area": 7991}, {"id": 135486, "category_id": 186, "iscrowd": 0, "bbox": [285, 0, 213, 102], "area": 17357}, {"id": 1145279, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 174, 58], "area": 7196}, {"id": 994729, "category_id": 195, "iscrowd": 0, "bbox": [277, 128, 16, 41], "area": 179}, {"id": 5352161, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 428], "area": 123922}], "file_name": "000000571893.png", "image_id": 571893}, {"segments_info": [{"id": 1652554, "category_id": 10, "iscrowd": 0, "bbox": [40, 115, 176, 220], "area": 21803}, {"id": 9596249, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 176397}, {"id": 11627325, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 558, 480], "area": 28157}], "file_name": "000000571943.png", "image_id": 571943}, {"segments_info": [{"id": 3025967, "category_id": 3, "iscrowd": 0, "bbox": [0, 280, 19, 56], "area": 761}, {"id": 2831165, "category_id": 7, "iscrowd": 0, "bbox": [13, 33, 607, 320], "area": 104287}, {"id": 1906712, "category_id": 125, "iscrowd": 0, "bbox": [0, 304, 640, 176], "area": 25226}, {"id": 1644571, "category_id": 147, "iscrowd": 0, "bbox": [0, 266, 640, 202], "area": 48147}, {"id": 2565666, "category_id": 184, "iscrowd": 0, "bbox": [360, 0, 280, 480], "area": 63064}, {"id": 15645595, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 263], "area": 62507}, {"id": 11590374, "category_id": 199, "iscrowd": 0, "bbox": [0, 197, 15, 85], "area": 1199}], "file_name": "000000572303.png", "image_id": 572303}, {"segments_info": [{"id": 790034, "category_id": 17, "iscrowd": 0, "bbox": [0, 1, 185, 452], "area": 65670}, {"id": 2965868, "category_id": 60, "iscrowd": 0, "bbox": [225, 97, 80, 50], "area": 2379}, {"id": 5205682, "category_id": 60, "iscrowd": 0, "bbox": [241, 264, 108, 179], "area": 14459}, {"id": 4222151, "category_id": 60, "iscrowd": 0, "bbox": [124, 312, 176, 180], "area": 19645}, {"id": 3363478, "category_id": 60, "iscrowd": 0, "bbox": [259, 125, 90, 119], "area": 8739}, {"id": 3907266, "category_id": 195, "iscrowd": 0, "bbox": [238, 284, 27, 16], "area": 275}, {"id": 3632572, "category_id": 196, "iscrowd": 0, "bbox": [114, 297, 184, 203], "area": 2252}], "file_name": "000000572388.png", "image_id": 572388}, {"segments_info": [{"id": 2636108, "category_id": 20, "iscrowd": 0, "bbox": [105, 249, 179, 212], "area": 17883}, {"id": 3359313, "category_id": 21, "iscrowd": 0, "bbox": [230, 230, 30, 24], "area": 401}, {"id": 4215137, "category_id": 21, "iscrowd": 0, "bbox": [288, 223, 29, 36], "area": 648}, {"id": 2966103, "category_id": 21, "iscrowd": 0, "bbox": [35, 442, 209, 102], "area": 11660}, {"id": 13743526, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 424, 210], "area": 84261}, {"id": 4741992, "category_id": 192, "iscrowd": 0, "bbox": [0, 193, 424, 447], "area": 152492}], "file_name": "000000572408.png", "image_id": 572408}, {"segments_info": [{"id": 8880771, "category_id": 1, "iscrowd": 0, "bbox": [362, 410, 12, 25], "area": 176}, {"id": 8155761, "category_id": 1, "iscrowd": 0, "bbox": [334, 405, 37, 60], "area": 1155}, {"id": 9538165, "category_id": 1, "iscrowd": 0, "bbox": [134, 108, 53, 43], "area": 1084}, {"id": 6968649, "category_id": 1, "iscrowd": 0, "bbox": [220, 376, 87, 224], "area": 12037}, {"id": 7098213, "category_id": 1, "iscrowd": 0, "bbox": [340, 438, 94, 164], "area": 4100}, {"id": 7558202, "category_id": 1, "iscrowd": 0, "bbox": [372, 405, 26, 42], "area": 819}, {"id": 5790547, "category_id": 1, "iscrowd": 0, "bbox": [534, 391, 42, 166], "area": 5139}, {"id": 5985900, "category_id": 1, "iscrowd": 0, "bbox": [59, 457, 20, 23], "area": 384}, {"id": 6968131, "category_id": 1, "iscrowd": 0, "bbox": [423, 381, 52, 210], "area": 4485}, {"id": 10332067, "category_id": 7, "iscrowd": 0, "bbox": [12, 11, 350, 282], "area": 72616}, {"id": 7436666, "category_id": 15, "iscrowd": 0, "bbox": [516, 477, 83, 123], "area": 5363}, {"id": 4596237, "category_id": 27, "iscrowd": 0, "bbox": [467, 433, 49, 143], "area": 4183}, {"id": 6702379, "category_id": 27, "iscrowd": 0, "bbox": [284, 477, 31, 64], "area": 992}, {"id": 7954763, "category_id": 27, "iscrowd": 0, "bbox": [229, 430, 46, 26], "area": 293}, {"id": 5451321, "category_id": 27, "iscrowd": 0, "bbox": [357, 482, 78, 118], "area": 4888}, {"id": 7493697, "category_id": 32, "iscrowd": 0, "bbox": [451, 416, 16, 53], "area": 191}, {"id": 7891809, "category_id": 44, "iscrowd": 0, "bbox": [377, 554, 19, 29], "area": 394}, {"id": 7641519, "category_id": 144, "iscrowd": 0, "bbox": [0, 135, 140, 177], "area": 11253}, {"id": 6183523, "category_id": 181, "iscrowd": 0, "bbox": [552, 391, 48, 98], "area": 1657}, {"id": 10267567, "category_id": 186, "iscrowd": 0, "bbox": [532, 348, 67, 52], "area": 2192}, {"id": 5719349, "category_id": 190, "iscrowd": 0, "bbox": [500, 553, 54, 59], "area": 1261}, {"id": 11649996, "category_id": 199, "iscrowd": 0, "bbox": [300, 365, 78, 126], "area": 4243}], "file_name": "000000572462.png", "image_id": 572462}, {"segments_info": [{"id": 3489859, "category_id": 16, "iscrowd": 0, "bbox": [154, 191, 436, 211], "area": 26454}, {"id": 8625831, "category_id": 23, "iscrowd": 0, "bbox": [146, 72, 193, 173], "area": 22563}, {"id": 5333857, "category_id": 178, "iscrowd": 0, "bbox": [0, 252, 640, 140], "area": 47204}, {"id": 2310456, "category_id": 184, "iscrowd": 0, "bbox": [318, 0, 224, 150], "area": 12129}, {"id": 3371120, "category_id": 193, "iscrowd": 0, "bbox": [0, 188, 249, 236], "area": 5498}, {"id": 4744308, "category_id": 194, "iscrowd": 0, "bbox": [282, 220, 55, 23], "area": 789}, {"id": 5202278, "category_id": 198, "iscrowd": 0, "bbox": [0, 0, 640, 424], "area": 141021}], "file_name": "000000572517.png", "image_id": 572517}, {"segments_info": [{"id": 3754609, "category_id": 7, "iscrowd": 0, "bbox": [146, 56, 438, 302], "area": 82133}, {"id": 1644828, "category_id": 10, "iscrowd": 0, "bbox": [155, 42, 13, 45], "area": 512}, {"id": 3288620, "category_id": 10, "iscrowd": 0, "bbox": [259, 1, 29, 61], "area": 1287}, {"id": 723222, "category_id": 10, "iscrowd": 0, "bbox": [386, 19, 9, 45], "area": 298}, {"id": 6190996, "category_id": 125, "iscrowd": 0, "bbox": [0, 264, 152, 100], "area": 3005}, {"id": 5397605, "category_id": 144, "iscrowd": 0, "bbox": [0, 185, 172, 71], "area": 6751}, {"id": 3489358, "category_id": 147, "iscrowd": 0, "bbox": [0, 222, 375, 203], "area": 40946}, {"id": 2569006, "category_id": 184, "iscrowd": 0, "bbox": [0, 46, 262, 134], "area": 11161}, {"id": 13347207, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 122], "area": 28845}, {"id": 7834787, "category_id": 191, "iscrowd": 0, "bbox": [277, 193, 363, 232], "area": 51543}], "file_name": "000000572555.png", "image_id": 572555}, {"segments_info": [{"id": 3747168, "category_id": 1, "iscrowd": 0, "bbox": [438, 187, 48, 141], "area": 3637}, {"id": 5781801, "category_id": 1, "iscrowd": 0, "bbox": [160, 252, 20, 31], "area": 358}, {"id": 9406874, "category_id": 1, "iscrowd": 0, "bbox": [479, 197, 34, 95], "area": 1605}, {"id": 2043021, "category_id": 1, "iscrowd": 0, "bbox": [110, 244, 20, 41], "area": 451}, {"id": 4471623, "category_id": 1, "iscrowd": 0, "bbox": [112, 288, 40, 45], "area": 1007}, {"id": 6906476, "category_id": 1, "iscrowd": 0, "bbox": [406, 211, 35, 67], "area": 928}, {"id": 2762284, "category_id": 1, "iscrowd": 0, "bbox": [277, 228, 28, 71], "area": 1073}, {"id": 6248041, "category_id": 1, "iscrowd": 0, "bbox": [550, 156, 56, 75], "area": 2976}, {"id": 2627344, "category_id": 1, "iscrowd": 0, "bbox": [75, 260, 35, 53], "area": 774}, {"id": 3486791, "category_id": 1, "iscrowd": 0, "bbox": [581, 108, 58, 296], "area": 7343}, {"id": 5977630, "category_id": 1, "iscrowd": 0, "bbox": [11, 245, 33, 55], "area": 779}, {"id": 4466975, "category_id": 1, "iscrowd": 0, "bbox": [40, 247, 31, 53], "area": 1039}, {"id": 4998204, "category_id": 1, "iscrowd": 0, "bbox": [277, 91, 108, 192], "area": 8265}, {"id": 3749179, "category_id": 1, "iscrowd": 1, "bbox": [7, 132, 612, 224], "area": 15870}, {"id": 3422270, "category_id": 41, "iscrowd": 0, "bbox": [276, 280, 25, 18], "area": 147}, {"id": 5921633, "category_id": 41, "iscrowd": 0, "bbox": [330, 225, 63, 66], "area": 795}, {"id": 5721419, "category_id": 44, "iscrowd": 0, "bbox": [550, 364, 24, 11], "area": 192}, {"id": 8425379, "category_id": 144, "iscrowd": 0, "bbox": [82, 234, 347, 193], "area": 16896}, {"id": 2176552, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 295], "area": 94602}, {"id": 14668226, "category_id": 187, "iscrowd": 0, "bbox": [110, 0, 530, 178], "area": 34488}, {"id": 6973030, "category_id": 191, "iscrowd": 0, "bbox": [0, 255, 640, 172], "area": 40902}, {"id": 1185567, "category_id": 194, "iscrowd": 0, "bbox": [100, 322, 505, 72], "area": 467}, {"id": 7757976, "category_id": 199, "iscrowd": 0, "bbox": [352, 238, 30, 27], "area": 282}], "file_name": "000000572620.png", "image_id": 572620}, {"segments_info": [{"id": 9213820, "category_id": 46, "iscrowd": 0, "bbox": [367, 252, 26, 35], "area": 393}, {"id": 7899257, "category_id": 46, "iscrowd": 0, "bbox": [446, 240, 31, 42], "area": 704}, {"id": 12898226, "category_id": 46, "iscrowd": 0, "bbox": [395, 280, 40, 86], "area": 1702}, {"id": 10792335, "category_id": 46, "iscrowd": 0, "bbox": [415, 226, 11, 19], "area": 142}, {"id": 6912877, "category_id": 47, "iscrowd": 0, "bbox": [474, 241, 14, 32], "area": 351}, {"id": 8226957, "category_id": 47, "iscrowd": 0, "bbox": [21, 192, 20, 22], "area": 377}, {"id": 10726801, "category_id": 47, "iscrowd": 0, "bbox": [445, 278, 21, 49], "area": 941}, {"id": 8030839, "category_id": 47, "iscrowd": 0, "bbox": [306, 295, 21, 54], "area": 1045}, {"id": 8030351, "category_id": 47, "iscrowd": 0, "bbox": [50, 204, 7, 8], "area": 54}, {"id": 7567466, "category_id": 48, "iscrowd": 0, "bbox": [470, 332, 48, 14], "area": 100}, {"id": 7174505, "category_id": 48, "iscrowd": 0, "bbox": [374, 382, 37, 42], "area": 388}, {"id": 8425596, "category_id": 49, "iscrowd": 0, "bbox": [396, 394, 33, 31], "area": 233}, {"id": 7305323, "category_id": 49, "iscrowd": 0, "bbox": [327, 299, 35, 10], "area": 68}, {"id": 11843985, "category_id": 49, "iscrowd": 0, "bbox": [487, 291, 52, 17], "area": 85}, {"id": 6583135, "category_id": 50, "iscrowd": 0, "bbox": [494, 265, 7, 6], "area": 21}, {"id": 8162170, "category_id": 50, "iscrowd": 0, "bbox": [498, 263, 14, 12], "area": 48}, {"id": 7238497, "category_id": 50, "iscrowd": 0, "bbox": [470, 335, 48, 17], "area": 119}, {"id": 6122597, "category_id": 50, "iscrowd": 0, "bbox": [240, 343, 37, 28], "area": 205}, {"id": 5859678, "category_id": 50, "iscrowd": 0, "bbox": [322, 295, 40, 9], "area": 115}, {"id": 11648935, "category_id": 50, "iscrowd": 0, "bbox": [435, 419, 13, 6], "area": 50}, {"id": 7438967, "category_id": 50, "iscrowd": 0, "bbox": [247, 340, 46, 34], "area": 371}, {"id": 5461838, "category_id": 51, "iscrowd": 0, "bbox": [330, 235, 34, 13], "area": 320}, {"id": 5860962, "category_id": 62, "iscrowd": 0, "bbox": [456, 218, 56, 47], "area": 1620}, {"id": 6451300, "category_id": 62, "iscrowd": 0, "bbox": [523, 275, 87, 143], "area": 4524}, {"id": 6584180, "category_id": 62, "iscrowd": 0, "bbox": [166, 230, 119, 98], "area": 7979}, {"id": 4939101, "category_id": 62, "iscrowd": 0, "bbox": [182, 345, 145, 75], "area": 6264}, {"id": 7307378, "category_id": 62, "iscrowd": 0, "bbox": [266, 222, 61, 86], "area": 3370}, {"id": 7110012, "category_id": 63, "iscrowd": 0, "bbox": [145, 193, 178, 97], "area": 3704}, {"id": 8951175, "category_id": 63, "iscrowd": 0, "bbox": [339, 194, 82, 49], "area": 2201}, {"id": 5926997, "category_id": 64, "iscrowd": 0, "bbox": [395, 158, 81, 139], "area": 2474}, {"id": 9952437, "category_id": 64, "iscrowd": 0, "bbox": [415, 139, 11, 34], "area": 223}, {"id": 9148801, "category_id": 67, "iscrowd": 0, "bbox": [202, 245, 358, 175], "area": 34988}, {"id": 6649693, "category_id": 86, "iscrowd": 0, "bbox": [410, 203, 43, 86], "area": 1471}, {"id": 12501410, "category_id": 109, "iscrowd": 0, "bbox": [294, 0, 346, 276], "area": 45604}, {"id": 1647398, "category_id": 141, "iscrowd": 0, "bbox": [191, 188, 105, 48], "area": 2922}, {"id": 14278091, "category_id": 181, "iscrowd": 0, "bbox": [394, 0, 174, 182], "area": 25239}, {"id": 10464911, "category_id": 185, "iscrowd": 0, "bbox": [380, 169, 166, 86], "area": 4661}, {"id": 7502434, "category_id": 189, "iscrowd": 0, "bbox": [318, 220, 225, 205], "area": 2987}, {"id": 10464163, "category_id": 190, "iscrowd": 0, "bbox": [0, 255, 640, 170], "area": 37211}, {"id": 10858407, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 324, 307], "area": 73921}], "file_name": "000000572678.png", "image_id": 572678}, {"segments_info": [{"id": 4275801, "category_id": 1, "iscrowd": 0, "bbox": [3, 172, 42, 152], "area": 3741}, {"id": 790286, "category_id": 1, "iscrowd": 0, "bbox": [548, 173, 9, 19], "area": 90}, {"id": 1513500, "category_id": 1, "iscrowd": 0, "bbox": [587, 183, 12, 51], "area": 357}, {"id": 1710881, "category_id": 1, "iscrowd": 0, "bbox": [546, 183, 10, 48], "area": 323}, {"id": 1645085, "category_id": 1, "iscrowd": 0, "bbox": [613, 176, 15, 61], "area": 578}, {"id": 10259335, "category_id": 1, "iscrowd": 0, "bbox": [364, 166, 125, 206], "area": 7943}, {"id": 6444878, "category_id": 1, "iscrowd": 0, "bbox": [111, 154, 48, 136], "area": 3370}, {"id": 11777982, "category_id": 34, "iscrowd": 0, "bbox": [346, 200, 42, 20], "area": 402}, {"id": 6643813, "category_id": 54, "iscrowd": 0, "bbox": [137, 192, 12, 11], "area": 69}, {"id": 8357516, "category_id": 64, "iscrowd": 0, "bbox": [277, 195, 27, 30], "area": 655}, {"id": 9870493, "category_id": 64, "iscrowd": 0, "bbox": [225, 193, 33, 38], "area": 940}, {"id": 1909026, "category_id": 112, "iscrowd": 0, "bbox": [437, 135, 203, 103], "area": 8845}, {"id": 7832753, "category_id": 171, "iscrowd": 0, "bbox": [182, 78, 237, 151], "area": 17666}, {"id": 3487797, "category_id": 181, "iscrowd": 0, "bbox": [441, 96, 199, 48], "area": 7272}, {"id": 7700839, "category_id": 184, "iscrowd": 0, "bbox": [0, 49, 123, 115], "area": 7785}, {"id": 7306110, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 640, 97], "area": 48286}, {"id": 14801876, "category_id": 187, "iscrowd": 0, "bbox": [14, 46, 111, 72], "area": 4145}, {"id": 9933972, "category_id": 190, "iscrowd": 0, "bbox": [0, 215, 640, 265], "area": 147246}, {"id": 12839886, "category_id": 193, "iscrowd": 0, "bbox": [0, 147, 95, 40], "area": 2100}, {"id": 6911868, "category_id": 199, "iscrowd": 0, "bbox": [121, 18, 519, 258], "area": 33801}], "file_name": "000000572900.png", "image_id": 572900}, {"segments_info": [{"id": 6378569, "category_id": 4, "iscrowd": 0, "bbox": [309, 11, 112, 249], "area": 9767}, {"id": 5195331, "category_id": 4, "iscrowd": 0, "bbox": [163, 102, 207, 222], "area": 23186}, {"id": 7304060, "category_id": 4, "iscrowd": 0, "bbox": [397, 55, 69, 151], "area": 2233}, {"id": 7434609, "category_id": 4, "iscrowd": 0, "bbox": [438, 84, 61, 109], "area": 3016}, {"id": 4800569, "category_id": 4, "iscrowd": 0, "bbox": [0, 0, 241, 333], "area": 63148}, {"id": 8548452, "category_id": 4, "iscrowd": 0, "bbox": [330, 10, 126, 232], "area": 7453}, {"id": 8157298, "category_id": 4, "iscrowd": 0, "bbox": [430, 107, 46, 96], "area": 740}, {"id": 7430747, "category_id": 4, "iscrowd": 0, "bbox": [147, 20, 191, 140], "area": 11893}, {"id": 7169115, "category_id": 149, "iscrowd": 0, "bbox": [232, 170, 268, 163], "area": 16617}, {"id": 7374491, "category_id": 197, "iscrowd": 0, "bbox": [128, 0, 372, 170], "area": 20764}], "file_name": "000000572956.png", "image_id": 572956}, {"segments_info": [{"id": 9278102, "category_id": 85, "iscrowd": 0, "bbox": [250, 225, 66, 66], "area": 3548}, {"id": 7369327, "category_id": 95, "iscrowd": 0, "bbox": [555, 299, 85, 33], "area": 1465}, {"id": 7696227, "category_id": 155, "iscrowd": 0, "bbox": [0, 305, 640, 175], "area": 100618}, {"id": 5329477, "category_id": 184, "iscrowd": 0, "bbox": [0, 265, 628, 50], "area": 12050}, {"id": 10788760, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 578, 270], "area": 105817}, {"id": 6646379, "category_id": 194, "iscrowd": 0, "bbox": [0, 272, 566, 59], "area": 10993}, {"id": 7301993, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 313], "area": 72671}], "file_name": "000000573008.png", "image_id": 573008}, {"segments_info": [{"id": 6646640, "category_id": 2, "iscrowd": 0, "bbox": [257, 302, 117, 198], "area": 15057}, {"id": 5073544, "category_id": 62, "iscrowd": 0, "bbox": [0, 251, 179, 211], "area": 19414}, {"id": 6247005, "category_id": 64, "iscrowd": 0, "bbox": [281, 258, 22, 31], "area": 266}, {"id": 4670799, "category_id": 72, "iscrowd": 0, "bbox": [32, 188, 84, 80], "area": 5086}, {"id": 3948104, "category_id": 75, "iscrowd": 0, "bbox": [214, 316, 32, 10], "area": 215}, {"id": 4145221, "category_id": 75, "iscrowd": 0, "bbox": [229, 313, 29, 9], "area": 103}, {"id": 7040372, "category_id": 75, "iscrowd": 0, "bbox": [238, 310, 25, 8], "area": 145}, {"id": 3755141, "category_id": 84, "iscrowd": 0, "bbox": [190, 347, 47, 25], "area": 792}, {"id": 2963298, "category_id": 84, "iscrowd": 0, "bbox": [223, 339, 34, 10], "area": 169}, {"id": 5067384, "category_id": 84, "iscrowd": 0, "bbox": [170, 201, 5, 20], "area": 93}, {"id": 5658727, "category_id": 84, "iscrowd": 0, "bbox": [179, 194, 9, 25], "area": 118}, {"id": 4802135, "category_id": 84, "iscrowd": 0, "bbox": [277, 275, 15, 3], "area": 29}, {"id": 8223107, "category_id": 84, "iscrowd": 0, "bbox": [244, 288, 40, 11], "area": 310}, {"id": 7040638, "category_id": 100, "iscrowd": 0, "bbox": [180, 222, 195, 74], "area": 3477}, {"id": 4151679, "category_id": 118, "iscrowd": 0, "bbox": [0, 280, 339, 220], "area": 27432}, {"id": 9214889, "category_id": 130, "iscrowd": 0, "bbox": [67, 37, 247, 231], "area": 3529}, {"id": 3948376, "category_id": 156, "iscrowd": 0, "bbox": [137, 122, 58, 148], "area": 6205}, {"id": 10984604, "category_id": 180, "iscrowd": 0, "bbox": [194, 109, 181, 131], "area": 16477}, {"id": 11123912, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 375, 99], "area": 26644}, {"id": 3422800, "category_id": 188, "iscrowd": 0, "bbox": [41, 236, 144, 97], "area": 7376}, {"id": 5198438, "category_id": 189, "iscrowd": 0, "bbox": [180, 279, 185, 111], "area": 4669}, {"id": 10597056, "category_id": 199, "iscrowd": 0, "bbox": [0, 54, 375, 218], "area": 29916}], "file_name": "000000573094.png", "image_id": 573094}, {"segments_info": [{"id": 2761246, "category_id": 1, "iscrowd": 0, "bbox": [42, 47, 199, 425], "area": 44668}, {"id": 2236966, "category_id": 27, "iscrowd": 0, "bbox": [30, 94, 81, 146], "area": 5099}, {"id": 5656679, "category_id": 35, "iscrowd": 0, "bbox": [227, 433, 155, 41], "area": 2406}, {"id": 13158600, "category_id": 159, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 186598}, {"id": 6382953, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 169], "area": 46943}, {"id": 12697275, "category_id": 187, "iscrowd": 0, "bbox": [75, 0, 467, 61], "area": 10056}, {"id": 10986915, "category_id": 192, "iscrowd": 0, "bbox": [88, 0, 475, 94], "area": 7458}, {"id": 5725797, "category_id": 198, "iscrowd": 0, "bbox": [575, 53, 65, 57], "area": 2180}], "file_name": "000000573258.png", "image_id": 573258}, {"segments_info": [{"id": 6111310, "category_id": 23, "iscrowd": 0, "bbox": [3, 202, 141, 76], "area": 6170}, {"id": 13812180, "category_id": 125, "iscrowd": 0, "bbox": [0, 247, 640, 233], "area": 136791}, {"id": 7237479, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 198], "area": 106635}], "file_name": "000000573391.png", "image_id": 573391}, {"segments_info": [{"id": 2892578, "category_id": 21, "iscrowd": 0, "bbox": [184, 129, 60, 54], "area": 1933}, {"id": 4539480, "category_id": 21, "iscrowd": 0, "bbox": [285, 147, 32, 57], "area": 1248}, {"id": 4736067, "category_id": 148, "iscrowd": 0, "bbox": [0, 220, 500, 155], "area": 58809}, {"id": 4870213, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 500, 211], "area": 79333}, {"id": 7102043, "category_id": 198, "iscrowd": 0, "bbox": [0, 126, 500, 167], "area": 40064}], "file_name": "000000573626.png", "image_id": 573626}, {"segments_info": [{"id": 7763063, "category_id": 8, "iscrowd": 0, "bbox": [462, 346, 60, 38], "area": 1400}, {"id": 7894131, "category_id": 8, "iscrowd": 0, "bbox": [173, 253, 37, 31], "area": 836}, {"id": 6710147, "category_id": 8, "iscrowd": 0, "bbox": [466, 207, 50, 39], "area": 1713}, {"id": 8684420, "category_id": 8, "iscrowd": 0, "bbox": [367, 334, 66, 50], "area": 1835}, {"id": 7295565, "category_id": 8, "iscrowd": 0, "bbox": [283, 326, 31, 33], "area": 890}, {"id": 8223870, "category_id": 8, "iscrowd": 0, "bbox": [312, 343, 54, 41], "area": 1508}, {"id": 8223614, "category_id": 8, "iscrowd": 0, "bbox": [80, 339, 51, 41], "area": 1299}, {"id": 6056820, "category_id": 8, "iscrowd": 0, "bbox": [410, 345, 55, 39], "area": 1609}, {"id": 7300970, "category_id": 8, "iscrowd": 0, "bbox": [532, 201, 52, 40], "area": 1785}, {"id": 10461090, "category_id": 8, "iscrowd": 0, "bbox": [393, 137, 111, 29], "area": 2471}, {"id": 5526438, "category_id": 8, "iscrowd": 0, "bbox": [88, 311, 34, 30], "area": 771}, {"id": 10527142, "category_id": 8, "iscrowd": 0, "bbox": [573, 199, 46, 32], "area": 982}, {"id": 5261656, "category_id": 8, "iscrowd": 0, "bbox": [335, 330, 36, 32], "area": 801}, {"id": 5927288, "category_id": 8, "iscrowd": 1, "bbox": [130, 346, 185, 39], "area": 3240}, {"id": 8554124, "category_id": 149, "iscrowd": 0, "bbox": [0, 149, 640, 321], "area": 39289}, {"id": 8814717, "category_id": 151, "iscrowd": 0, "bbox": [0, 39, 640, 108], "area": 31035}, {"id": 5331030, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 88188}, {"id": 9147288, "category_id": 191, "iscrowd": 0, "bbox": [78, 174, 47, 43], "area": 927}, {"id": 6254190, "category_id": 193, "iscrowd": 0, "bbox": [285, 216, 355, 264], "area": 6669}, {"id": 7696497, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 291], "area": 71594}], "file_name": "000000573943.png", "image_id": 573943}, {"segments_info": [{"id": 4802905, "category_id": 1, "iscrowd": 0, "bbox": [242, 77, 84, 221], "area": 7437}, {"id": 3229034, "category_id": 19, "iscrowd": 0, "bbox": [132, 121, 284, 290], "area": 28866}, {"id": 10008787, "category_id": 125, "iscrowd": 0, "bbox": [0, 202, 640, 225], "area": 58170}, {"id": 5342854, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 210], "area": 67672}, {"id": 14799549, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 90], "area": 36352}, {"id": 6459806, "category_id": 193, "iscrowd": 0, "bbox": [0, 191, 533, 236], "area": 54380}, {"id": 11650008, "category_id": 197, "iscrowd": 0, "bbox": [45, 62, 571, 74], "area": 10316}], "file_name": "000000574297.png", "image_id": 574297}, {"segments_info": [{"id": 5197188, "category_id": 1, "iscrowd": 0, "bbox": [333, 0, 307, 411], "area": 73266}, {"id": 6055275, "category_id": 17, "iscrowd": 0, "bbox": [182, 106, 251, 235], "area": 40252}, {"id": 1842990, "category_id": 63, "iscrowd": 0, "bbox": [2, 1, 638, 470], "area": 102956}, {"id": 8227990, "category_id": 73, "iscrowd": 0, "bbox": [0, 257, 558, 216], "area": 60359}, {"id": 11056317, "category_id": 76, "iscrowd": 0, "bbox": [148, 343, 357, 129], "area": 20254}], "file_name": "000000574315.png", "image_id": 574315}, {"segments_info": [{"id": 8159098, "category_id": 6, "iscrowd": 0, "bbox": [70, 144, 99, 98], "area": 7763}, {"id": 5790812, "category_id": 6, "iscrowd": 0, "bbox": [164, 23, 457, 360], "area": 115388}, {"id": 12372690, "category_id": 128, "iscrowd": 0, "bbox": [0, 0, 136, 195], "area": 12001}, {"id": 9277326, "category_id": 149, "iscrowd": 0, "bbox": [0, 190, 640, 232], "area": 74470}, {"id": 3955784, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 326], "area": 56693}, {"id": 3291955, "category_id": 191, "iscrowd": 0, "bbox": [583, 320, 57, 47], "area": 1721}, {"id": 11254723, "category_id": 199, "iscrowd": 0, "bbox": [0, 110, 22, 98], "area": 1607}], "file_name": "000000574425.png", "image_id": 574425}, {"segments_info": [{"id": 3366260, "category_id": 1, "iscrowd": 0, "bbox": [286, 78, 133, 123], "area": 5171}, {"id": 7059152, "category_id": 42, "iscrowd": 0, "bbox": [235, 182, 78, 75], "area": 3912}, {"id": 8554869, "category_id": 155, "iscrowd": 0, "bbox": [0, 14, 640, 385], "area": 236115}, {"id": 11639408, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 18], "area": 9961}], "file_name": "000000574520.png", "image_id": 574520}, {"segments_info": [{"id": 4539460, "category_id": 1, "iscrowd": 0, "bbox": [145, 177, 25, 78], "area": 844}, {"id": 5133403, "category_id": 1, "iscrowd": 0, "bbox": [89, 186, 19, 28], "area": 220}, {"id": 3159884, "category_id": 1, "iscrowd": 0, "bbox": [216, 265, 84, 122], "area": 3232}, {"id": 2302755, "category_id": 1, "iscrowd": 0, "bbox": [106, 183, 41, 112], "area": 2002}, {"id": 2042182, "category_id": 1, "iscrowd": 0, "bbox": [183, 176, 3, 5], "area": 12}, {"id": 2235687, "category_id": 1, "iscrowd": 0, "bbox": [1, 186, 13, 208], "area": 1589}, {"id": 4209213, "category_id": 1, "iscrowd": 0, "bbox": [197, 192, 6, 23], "area": 91}, {"id": 2238511, "category_id": 1, "iscrowd": 0, "bbox": [165, 199, 33, 30], "area": 631}, {"id": 7506834, "category_id": 1, "iscrowd": 0, "bbox": [141, 189, 6, 15], "area": 55}, {"id": 3751495, "category_id": 1, "iscrowd": 0, "bbox": [164, 185, 11, 25], "area": 172}, {"id": 4539458, "category_id": 1, "iscrowd": 0, "bbox": [144, 182, 12, 43], "area": 293}, {"id": 4605253, "category_id": 1, "iscrowd": 0, "bbox": [90, 202, 36, 72], "area": 590}, {"id": 2961194, "category_id": 4, "iscrowd": 0, "bbox": [45, 302, 140, 197], "area": 14157}, {"id": 2894638, "category_id": 4, "iscrowd": 0, "bbox": [195, 292, 132, 202], "area": 15330}, {"id": 3092533, "category_id": 4, "iscrowd": 0, "bbox": [146, 248, 60, 162], "area": 5387}, {"id": 2040095, "category_id": 4, "iscrowd": 0, "bbox": [215, 223, 54, 51], "area": 1458}, {"id": 3093046, "category_id": 4, "iscrowd": 0, "bbox": [28, 218, 42, 89], "area": 1759}, {"id": 3026740, "category_id": 4, "iscrowd": 0, "bbox": [85, 216, 35, 87], "area": 1947}, {"id": 5594468, "category_id": 92, "iscrowd": 0, "bbox": [86, 143, 74, 56], "area": 1487}, {"id": 1646150, "category_id": 122, "iscrowd": 0, "bbox": [311, 297, 22, 36], "area": 623}, {"id": 11451318, "category_id": 184, "iscrowd": 0, "bbox": [115, 64, 70, 27], "area": 1075}, {"id": 16250871, "category_id": 187, "iscrowd": 0, "bbox": [22, 0, 149, 78], "area": 5992}, {"id": 6712685, "category_id": 191, "iscrowd": 0, "bbox": [0, 273, 333, 227], "area": 22104}, {"id": 3687492, "category_id": 196, "iscrowd": 0, "bbox": [11, 244, 31, 47], "area": 1123}, {"id": 2962997, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 333, 235], "area": 43036}, {"id": 5859691, "category_id": 199, "iscrowd": 0, "bbox": [23, 104, 310, 384], "area": 14864}], "file_name": "000000574702.png", "image_id": 574702}, {"segments_info": [{"id": 3820132, "category_id": 17, "iscrowd": 0, "bbox": [65, 94, 214, 366], "area": 58458}, {"id": 9013895, "category_id": 181, "iscrowd": 0, "bbox": [118, 0, 259, 487], "area": 65694}, {"id": 3356734, "category_id": 199, "iscrowd": 0, "bbox": [27, 0, 350, 500], "area": 33574}], "file_name": "000000574810.png", "image_id": 574810}, {"segments_info": [{"id": 8087905, "category_id": 1, "iscrowd": 0, "bbox": [70, 68, 45, 120], "area": 3018}, {"id": 6444444, "category_id": 1, "iscrowd": 0, "bbox": [87, 31, 238, 461], "area": 71875}, {"id": 9272956, "category_id": 1, "iscrowd": 0, "bbox": [26, 57, 57, 133], "area": 3651}, {"id": 7564400, "category_id": 1, "iscrowd": 0, "bbox": [318, 113, 57, 67], "area": 1485}, {"id": 7695730, "category_id": 1, "iscrowd": 0, "bbox": [319, 45, 54, 122], "area": 3466}, {"id": 12631731, "category_id": 37, "iscrowd": 0, "bbox": [262, 105, 13, 10], "area": 91}, {"id": 7304850, "category_id": 40, "iscrowd": 0, "bbox": [344, 152, 22, 19], "area": 309}, {"id": 9545373, "category_id": 145, "iscrowd": 0, "bbox": [0, 164, 375, 336], "area": 58992}, {"id": 4608341, "category_id": 184, "iscrowd": 0, "bbox": [257, 0, 19, 48], "area": 736}, {"id": 9213576, "category_id": 185, "iscrowd": 0, "bbox": [0, 83, 375, 113], "area": 13699}, {"id": 4153418, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 375, 108], "area": 25683}], "file_name": "000000574823.png", "image_id": 574823}, {"segments_info": [{"id": 4075835, "category_id": 1, "iscrowd": 0, "bbox": [219, 8, 103, 384], "area": 17582}, {"id": 3554107, "category_id": 72, "iscrowd": 0, "bbox": [474, 21, 166, 246], "area": 31895}, {"id": 6710631, "category_id": 75, "iscrowd": 0, "bbox": [115, 286, 14, 11], "area": 98}, {"id": 11643301, "category_id": 75, "iscrowd": 0, "bbox": [215, 0, 40, 39], "area": 379}, {"id": 5134695, "category_id": 118, "iscrowd": 0, "bbox": [0, 251, 471, 176], "area": 53781}, {"id": 1844277, "category_id": 156, "iscrowd": 0, "bbox": [375, 0, 265, 427], "area": 67800}, {"id": 15132130, "category_id": 180, "iscrowd": 0, "bbox": [0, 0, 94, 184], "area": 15885}, {"id": 14606816, "category_id": 181, "iscrowd": 0, "bbox": [235, 0, 186, 211], "area": 25661}, {"id": 8555147, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 380, 274], "area": 51518}, {"id": 4346720, "category_id": 200, "iscrowd": 0, "bbox": [0, 331, 84, 96], "area": 6422}], "file_name": "000000575081.png", "image_id": 575081}, {"segments_info": [{"id": 3355196, "category_id": 1, "iscrowd": 0, "bbox": [1, 160, 256, 188], "area": 19379}, {"id": 3028032, "category_id": 25, "iscrowd": 0, "bbox": [271, 54, 227, 113], "area": 12196}, {"id": 2700099, "category_id": 84, "iscrowd": 0, "bbox": [64, 290, 70, 38], "area": 1637}, {"id": 11517642, "category_id": 177, "iscrowd": 0, "bbox": [0, 0, 222, 375], "area": 44881}, {"id": 8882072, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 76, 156], "area": 10710}, {"id": 3294034, "category_id": 185, "iscrowd": 0, "bbox": [0, 0, 500, 375], "area": 95686}], "file_name": "000000575187.png", "image_id": 575187}, {"segments_info": [{"id": 5723215, "category_id": 5, "iscrowd": 0, "bbox": [127, 207, 342, 113], "area": 8670}, {"id": 5392963, "category_id": 149, "iscrowd": 0, "bbox": [0, 321, 640, 70], "area": 15438}, {"id": 5265232, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 324], "area": 131419}, {"id": 4344909, "category_id": 185, "iscrowd": 0, "bbox": [0, 268, 640, 159], "area": 29530}, {"id": 13286824, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 391, 177], "area": 43049}, {"id": 5535353, "category_id": 193, "iscrowd": 0, "bbox": [0, 317, 640, 110], "area": 44898}], "file_name": "000000575205.png", "image_id": 575205}, {"segments_info": [{"id": 4671303, "category_id": 1, "iscrowd": 0, "bbox": [287, 174, 48, 159], "area": 4268}, {"id": 5592405, "category_id": 3, "iscrowd": 0, "bbox": [525, 128, 115, 234], "area": 22282}, {"id": 7500402, "category_id": 3, "iscrowd": 0, "bbox": [444, 124, 131, 160], "area": 11509}, {"id": 6579300, "category_id": 3, "iscrowd": 0, "bbox": [378, 142, 50, 89], "area": 2789}, {"id": 10329501, "category_id": 10, "iscrowd": 0, "bbox": [356, 70, 11, 15], "area": 132}, {"id": 12763842, "category_id": 10, "iscrowd": 0, "bbox": [443, 79, 10, 15], "area": 132}, {"id": 12566463, "category_id": 10, "iscrowd": 0, "bbox": [436, 80, 8, 14], "area": 93}, {"id": 13092807, "category_id": 10, "iscrowd": 0, "bbox": [608, 105, 14, 10], "area": 130}, {"id": 12303291, "category_id": 10, "iscrowd": 0, "bbox": [266, 111, 8, 9], "area": 65}, {"id": 3289650, "category_id": 28, "iscrowd": 0, "bbox": [243, 142, 121, 79], "area": 3776}, {"id": 10066329, "category_id": 128, "iscrowd": 0, "bbox": [537, 32, 103, 100], "area": 6887}, {"id": 3881787, "category_id": 149, "iscrowd": 0, "bbox": [336, 146, 304, 281], "area": 10225}, {"id": 3750201, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 576, 355], "area": 40353}, {"id": 2171169, "category_id": 185, "iscrowd": 0, "bbox": [0, 148, 246, 279], "area": 26621}, {"id": 14869218, "category_id": 187, "iscrowd": 0, "bbox": [240, 0, 167, 147], "area": 15895}, {"id": 11711154, "category_id": 191, "iscrowd": 0, "bbox": [75, 149, 562, 278], "area": 67944}, {"id": 4144959, "category_id": 194, "iscrowd": 0, "bbox": [360, 317, 172, 42], "area": 3467}, {"id": 9408399, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 222], "area": 55766}], "file_name": "000000575243.png", "image_id": 575243}, {"segments_info": [{"id": 2770299, "category_id": 18, "iscrowd": 0, "bbox": [251, 158, 366, 200], "area": 32623}, {"id": 3818103, "category_id": 34, "iscrowd": 0, "bbox": [40, 129, 102, 60], "area": 4617}, {"id": 10267315, "category_id": 128, "iscrowd": 0, "bbox": [70, 211, 71, 31], "area": 1507}, {"id": 3029826, "category_id": 184, "iscrowd": 0, "bbox": [0, 86, 640, 158], "area": 38548}, {"id": 11248021, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 211], "area": 87888}, {"id": 5008261, "category_id": 193, "iscrowd": 0, "bbox": [0, 187, 640, 266], "area": 124434}], "file_name": "000000575357.png", "image_id": 575357}, {"segments_info": [{"id": 7037511, "category_id": 10, "iscrowd": 0, "bbox": [266, 165, 37, 99], "area": 2880}, {"id": 2763040, "category_id": 10, "iscrowd": 0, "bbox": [602, 378, 34, 69], "area": 1881}, {"id": 4277810, "category_id": 10, "iscrowd": 0, "bbox": [121, 384, 31, 55], "area": 1502}, {"id": 6445118, "category_id": 10, "iscrowd": 0, "bbox": [405, 75, 50, 116], "area": 3668}, {"id": 3359803, "category_id": 184, "iscrowd": 0, "bbox": [0, 311, 640, 169], "area": 68974}, {"id": 12884332, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 395], "area": 191424}, {"id": 6709588, "category_id": 192, "iscrowd": 0, "bbox": [280, 262, 360, 121], "area": 19084}], "file_name": "000000575372.png", "image_id": 575372}, {"segments_info": [{"id": 5077855, "category_id": 52, "iscrowd": 0, "bbox": [88, 114, 131, 194], "area": 20229}, {"id": 4610634, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 426, 640], "area": 213117}, {"id": 16381675, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 426, 514], "area": 36772}], "file_name": "000000575500.png", "image_id": 575500}, {"segments_info": [{"id": 2970247, "category_id": 59, "iscrowd": 0, "bbox": [99, 48, 417, 338], "area": 112825}, {"id": 8359316, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 640, 451], "area": 77316}, {"id": 10659752, "category_id": 195, "iscrowd": 0, "bbox": [12, 14, 603, 437], "area": 93889}, {"id": 5660513, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 37, 142], "area": 3179}], "file_name": "000000575815.png", "image_id": 575815}, {"segments_info": [{"id": 3489598, "category_id": 47, "iscrowd": 0, "bbox": [428, 164, 8, 16], "area": 114}, {"id": 3561864, "category_id": 47, "iscrowd": 0, "bbox": [478, 169, 8, 12], "area": 92}, {"id": 4217992, "category_id": 47, "iscrowd": 0, "bbox": [472, 248, 22, 34], "area": 634}, {"id": 4152194, "category_id": 47, "iscrowd": 0, "bbox": [436, 166, 8, 13], "area": 72}, {"id": 3292495, "category_id": 51, "iscrowd": 0, "bbox": [481, 137, 20, 10], "area": 151}, {"id": 8562376, "category_id": 51, "iscrowd": 0, "bbox": [245, 83, 17, 6], "area": 90}, {"id": 3288992, "category_id": 51, "iscrowd": 0, "bbox": [481, 110, 25, 15], "area": 329}, {"id": 5151436, "category_id": 51, "iscrowd": 0, "bbox": [428, 85, 35, 9], "area": 244}, {"id": 7315899, "category_id": 51, "iscrowd": 0, "bbox": [406, 256, 33, 28], "area": 642}, {"id": 3359582, "category_id": 51, "iscrowd": 0, "bbox": [481, 88, 36, 9], "area": 229}, {"id": 3621742, "category_id": 51, "iscrowd": 0, "bbox": [508, 113, 24, 12], "area": 195}, {"id": 5460313, "category_id": 51, "iscrowd": 0, "bbox": [503, 138, 24, 13], "area": 272}, {"id": 6779105, "category_id": 51, "iscrowd": 0, "bbox": [277, 84, 19, 6], "area": 74}, {"id": 2831954, "category_id": 51, "iscrowd": 0, "bbox": [338, 254, 47, 30], "area": 728}, {"id": 6992600, "category_id": 52, "iscrowd": 0, "bbox": [347, 255, 20, 11], "area": 120}, {"id": 6783699, "category_id": 53, "iscrowd": 0, "bbox": [361, 256, 8, 7], "area": 27}, {"id": 8894661, "category_id": 53, "iscrowd": 0, "bbox": [370, 261, 10, 6], "area": 36}, {"id": 6929863, "category_id": 53, "iscrowd": 0, "bbox": [346, 259, 11, 7], "area": 53}, {"id": 2110034, "category_id": 62, "iscrowd": 0, "bbox": [278, 315, 106, 159], "area": 10821}, {"id": 2176083, "category_id": 62, "iscrowd": 0, "bbox": [429, 316, 119, 150], "area": 11252}, {"id": 1845825, "category_id": 62, "iscrowd": 0, "bbox": [545, 310, 95, 158], "area": 8444}, {"id": 6183215, "category_id": 64, "iscrowd": 0, "bbox": [561, 183, 33, 41], "area": 885}, {"id": 3167374, "category_id": 67, "iscrowd": 0, "bbox": [237, 257, 402, 183], "area": 32865}, {"id": 3161937, "category_id": 78, "iscrowd": 0, "bbox": [473, 211, 57, 25], "area": 1195}, {"id": 3359061, "category_id": 79, "iscrowd": 0, "bbox": [375, 255, 96, 23], "area": 1127}, {"id": 1515309, "category_id": 79, "iscrowd": 0, "bbox": [416, 243, 56, 17], "area": 779}, {"id": 12111328, "category_id": 81, "iscrowd": 0, "bbox": [333, 231, 68, 9], "area": 466}, {"id": 3361632, "category_id": 82, "iscrowd": 0, "bbox": [14, 112, 70, 361], "area": 18025}, {"id": 3434149, "category_id": 86, "iscrowd": 0, "bbox": [301, 244, 23, 34], "area": 682}, {"id": 4020355, "category_id": 107, "iscrowd": 0, "bbox": [449, 240, 24, 38], "area": 133}, {"id": 6323099, "category_id": 112, "iscrowd": 0, "bbox": [88, 95, 159, 268], "area": 24317}, {"id": 3565215, "category_id": 118, "iscrowd": 0, "bbox": [52, 319, 588, 161], "area": 41548}, {"id": 4087455, "category_id": 119, "iscrowd": 0, "bbox": [269, 196, 72, 58], "area": 2116}, {"id": 6390180, "category_id": 156, "iscrowd": 0, "bbox": [0, 83, 545, 397], "area": 24214}, {"id": 8746338, "category_id": 181, "iscrowd": 0, "bbox": [311, 112, 329, 121], "area": 15075}, {"id": 9085371, "category_id": 186, "iscrowd": 0, "bbox": [106, 0, 534, 96], "area": 45164}, {"id": 5469603, "category_id": 188, "iscrowd": 0, "bbox": [216, 210, 424, 116], "area": 11464}, {"id": 7442599, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 48851}], "file_name": "000000575970.png", "image_id": 575970}, {"segments_info": [{"id": 4933701, "category_id": 1, "iscrowd": 0, "bbox": [144, 112, 68, 113], "area": 3036}, {"id": 1841951, "category_id": 1, "iscrowd": 0, "bbox": [266, 121, 29, 41], "area": 614}, {"id": 4012093, "category_id": 1, "iscrowd": 0, "bbox": [224, 79, 179, 390], "area": 33248}, {"id": 3683382, "category_id": 1, "iscrowd": 0, "bbox": [142, 125, 31, 85], "area": 1110}, {"id": 7367275, "category_id": 35, "iscrowd": 0, "bbox": [201, 434, 367, 46], "area": 2849}, {"id": 14275280, "category_id": 159, "iscrowd": 0, "bbox": [0, 158, 640, 322], "area": 158046}, {"id": 4407880, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 194], "area": 106998}], "file_name": "000000576031.png", "image_id": 576031}, {"segments_info": [{"id": 2959663, "category_id": 1, "iscrowd": 0, "bbox": [428, 91, 88, 161], "area": 4397}, {"id": 2633530, "category_id": 19, "iscrowd": 0, "bbox": [402, 148, 94, 235], "area": 12641}, {"id": 3290940, "category_id": 184, "iscrowd": 0, "bbox": [165, 265, 98, 72], "area": 3581}, {"id": 12691086, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 223], "area": 110998}, {"id": 7101520, "category_id": 192, "iscrowd": 0, "bbox": [0, 83, 640, 193], "area": 44605}, {"id": 4284004, "category_id": 193, "iscrowd": 0, "bbox": [0, 248, 640, 179], "area": 76287}, {"id": 8224383, "category_id": 194, "iscrowd": 0, "bbox": [0, 251, 433, 110], "area": 20070}], "file_name": "000000576052.png", "image_id": 576052}, {"segments_info": [{"id": 1052697, "category_id": 1, "iscrowd": 0, "bbox": [146, 18, 184, 419], "area": 20803}, {"id": 1448213, "category_id": 41, "iscrowd": 0, "bbox": [129, 553, 74, 75], "area": 3220}, {"id": 3422521, "category_id": 41, "iscrowd": 0, "bbox": [119, 312, 171, 164], "area": 3752}, {"id": 2303522, "category_id": 41, "iscrowd": 0, "bbox": [135, 522, 66, 56], "area": 2363}, {"id": 2108204, "category_id": 128, "iscrowd": 0, "bbox": [0, 215, 469, 291], "area": 31795}, {"id": 6051407, "category_id": 149, "iscrowd": 0, "bbox": [0, 528, 136, 112], "area": 8185}, {"id": 2500130, "category_id": 181, "iscrowd": 0, "bbox": [344, 323, 27, 58], "area": 1232}, {"id": 2765360, "category_id": 184, "iscrowd": 0, "bbox": [67, 271, 402, 236], "area": 11319}, {"id": 13219760, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 469, 486], "area": 155884}, {"id": 6250075, "category_id": 191, "iscrowd": 0, "bbox": [0, 488, 469, 152], "area": 24668}, {"id": 795928, "category_id": 193, "iscrowd": 0, "bbox": [0, 473, 469, 82], "area": 10593}, {"id": 4606797, "category_id": 195, "iscrowd": 0, "bbox": [441, 495, 14, 16], "area": 201}], "file_name": "000000576566.png", "image_id": 576566}, {"segments_info": [{"id": 2038814, "category_id": 1, "iscrowd": 0, "bbox": [502, 230, 82, 153], "area": 4850}, {"id": 3947582, "category_id": 1, "iscrowd": 0, "bbox": [191, 319, 11, 22], "area": 140}, {"id": 6708317, "category_id": 38, "iscrowd": 0, "bbox": [243, 36, 249, 122], "area": 19977}, {"id": 2171686, "category_id": 154, "iscrowd": 0, "bbox": [0, 319, 640, 108], "area": 53544}, {"id": 4141347, "category_id": 155, "iscrowd": 0, "bbox": [0, 335, 124, 79], "area": 5681}, {"id": 10191988, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 346], "area": 188810}], "file_name": "000000576654.png", "image_id": 576654}, {"segments_info": [{"id": 923412, "category_id": 1, "iscrowd": 0, "bbox": [239, 17, 31, 98], "area": 1871}, {"id": 5524827, "category_id": 1, "iscrowd": 0, "bbox": [309, 53, 117, 204], "area": 6370}, {"id": 5199979, "category_id": 19, "iscrowd": 0, "bbox": [334, 94, 110, 250], "area": 12289}, {"id": 10135729, "category_id": 178, "iscrowd": 0, "bbox": [0, 252, 640, 175], "area": 99554}, {"id": 2776401, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 154], "area": 60044}, {"id": 3883334, "category_id": 185, "iscrowd": 0, "bbox": [0, 32, 172, 246], "area": 11165}, {"id": 4618604, "category_id": 193, "iscrowd": 0, "bbox": [0, 55, 640, 170], "area": 37169}, {"id": 6978694, "category_id": 194, "iscrowd": 0, "bbox": [186, 164, 454, 97], "area": 17567}], "file_name": "000000576955.png", "image_id": 576955}, {"segments_info": [{"id": 5001816, "category_id": 24, "iscrowd": 0, "bbox": [418, 165, 83, 63], "area": 3423}, {"id": 5464427, "category_id": 24, "iscrowd": 0, "bbox": [191, 144, 61, 172], "area": 5644}, {"id": 5924464, "category_id": 24, "iscrowd": 0, "bbox": [107, 142, 80, 159], "area": 5934}, {"id": 5726830, "category_id": 24, "iscrowd": 0, "bbox": [342, 165, 225, 223], "area": 23369}, {"id": 2771271, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 201], "area": 86266}, {"id": 4419717, "category_id": 193, "iscrowd": 0, "bbox": [0, 30, 640, 375], "area": 70956}, {"id": 6917818, "category_id": 194, "iscrowd": 0, "bbox": [0, 131, 640, 282], "area": 67976}], "file_name": "000000577149.png", "image_id": 577149}, {"segments_info": [{"id": 4935260, "category_id": 15, "iscrowd": 0, "bbox": [3, 205, 637, 217], "area": 112901}, {"id": 3684938, "category_id": 15, "iscrowd": 0, "bbox": [1, 8, 44, 161], "area": 4131}, {"id": 3817566, "category_id": 15, "iscrowd": 0, "bbox": [500, 181, 140, 186], "area": 20642}, {"id": 4145989, "category_id": 16, "iscrowd": 0, "bbox": [307, 181, 34, 36], "area": 635}, {"id": 3641460, "category_id": 193, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 49674}], "file_name": "000000577182.png", "image_id": 577182}, {"segments_info": [{"id": 197378, "category_id": 1, "iscrowd": 0, "bbox": [443, 3, 57, 101], "area": 3749}, {"id": 6833488, "category_id": 1, "iscrowd": 0, "bbox": [1, 3, 167, 325], "area": 16619}, {"id": 10840655, "category_id": 51, "iscrowd": 0, "bbox": [18, 2, 434, 328], "area": 111357}, {"id": 7843271, "category_id": 52, "iscrowd": 0, "bbox": [250, 182, 79, 44], "area": 2217}, {"id": 8497594, "category_id": 52, "iscrowd": 0, "bbox": [167, 157, 81, 61], "area": 4043}, {"id": 2434340, "category_id": 190, "iscrowd": 0, "bbox": [284, 0, 216, 334], "area": 25229}], "file_name": "000000577539.png", "image_id": 577539}, {"segments_info": [{"id": 12042694, "category_id": 51, "iscrowd": 0, "bbox": [64, 277, 157, 81], "area": 7822}, {"id": 5135194, "category_id": 78, "iscrowd": 0, "bbox": [140, 157, 211, 185], "area": 32853}, {"id": 6389141, "category_id": 188, "iscrowd": 0, "bbox": [0, 0, 418, 640], "area": 174147}, {"id": 8557986, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 92, 640], "area": 52478}], "file_name": "000000577584.png", "image_id": 577584}, {"segments_info": [{"id": 4940114, "category_id": 64, "iscrowd": 0, "bbox": [63, 2, 515, 442], "area": 92315}, {"id": 3230845, "category_id": 86, "iscrowd": 0, "bbox": [395, 251, 100, 197], "area": 13766}, {"id": 9142134, "category_id": 109, "iscrowd": 0, "bbox": [71, 0, 302, 360], "area": 38259}, {"id": 3100773, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 590, 480], "area": 117100}, {"id": 9011320, "category_id": 190, "iscrowd": 0, "bbox": [236, 388, 404, 92], "area": 21874}, {"id": 12893358, "category_id": 199, "iscrowd": 0, "bbox": [566, 0, 74, 433], "area": 23324}], "file_name": "000000577735.png", "image_id": 577735}, {"segments_info": [{"id": 7700870, "category_id": 25, "iscrowd": 0, "bbox": [419, 43, 179, 366], "area": 25398}, {"id": 8884634, "category_id": 25, "iscrowd": 0, "bbox": [173, 22, 371, 402], "area": 55090}, {"id": 3170366, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 71], "area": 26174}, {"id": 2969652, "category_id": 185, "iscrowd": 0, "bbox": [0, 12, 640, 296], "area": 90095}, {"id": 4224598, "category_id": 193, "iscrowd": 0, "bbox": [0, 242, 640, 116], "area": 27790}, {"id": 7041909, "category_id": 194, "iscrowd": 0, "bbox": [0, 308, 640, 116], "area": 46030}], "file_name": "000000577862.png", "image_id": 577862}, {"segments_info": [{"id": 2760742, "category_id": 1, "iscrowd": 0, "bbox": [503, 0, 50, 67], "area": 2044}, {"id": 2434397, "category_id": 1, "iscrowd": 0, "bbox": [127, 1, 276, 334], "area": 49005}, {"id": 6768939, "category_id": 1, "iscrowd": 0, "bbox": [296, 0, 191, 165], "area": 9792}, {"id": 2571425, "category_id": 37, "iscrowd": 0, "bbox": [527, 85, 29, 27], "area": 619}, {"id": 7498587, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 640, 34], "area": 7332}, {"id": 5987920, "category_id": 185, "iscrowd": 0, "bbox": [563, 0, 77, 20], "area": 1262}, {"id": 4672586, "category_id": 191, "iscrowd": 0, "bbox": [0, 13, 640, 413], "area": 196787}, {"id": 7501675, "category_id": 194, "iscrowd": 0, "bbox": [353, 0, 75, 38], "area": 1909}, {"id": 4344642, "category_id": 199, "iscrowd": 0, "bbox": [405, 11, 235, 41], "area": 3291}], "file_name": "000000577864.png", "image_id": 577864}, {"segments_info": [{"id": 6645610, "category_id": 1, "iscrowd": 0, "bbox": [436, 233, 25, 97], "area": 1641}, {"id": 4933187, "category_id": 1, "iscrowd": 0, "bbox": [386, 234, 28, 97], "area": 1814}, {"id": 5984330, "category_id": 1, "iscrowd": 0, "bbox": [328, 216, 20, 28], "area": 287}, {"id": 6182480, "category_id": 1, "iscrowd": 0, "bbox": [129, 213, 15, 48], "area": 438}, {"id": 3617843, "category_id": 1, "iscrowd": 0, "bbox": [245, 233, 70, 259], "area": 10860}, {"id": 4869194, "category_id": 1, "iscrowd": 0, "bbox": [298, 215, 23, 25], "area": 308}, {"id": 3749427, "category_id": 1, "iscrowd": 0, "bbox": [299, 230, 79, 243], "area": 7637}, {"id": 3945261, "category_id": 1, "iscrowd": 0, "bbox": [135, 195, 15, 17], "area": 175}, {"id": 6511959, "category_id": 1, "iscrowd": 0, "bbox": [347, 220, 21, 36], "area": 407}, {"id": 5785915, "category_id": 1, "iscrowd": 0, "bbox": [152, 207, 19, 53], "area": 676}, {"id": 5262931, "category_id": 1, "iscrowd": 0, "bbox": [121, 194, 14, 18], "area": 189}, {"id": 6641783, "category_id": 2, "iscrowd": 0, "bbox": [304, 358, 37, 133], "area": 2776}, {"id": 6249839, "category_id": 3, "iscrowd": 0, "bbox": [34, 222, 68, 48], "area": 2543}, {"id": 13685194, "category_id": 3, "iscrowd": 0, "bbox": [1, 198, 12, 14], "area": 134}, {"id": 8486004, "category_id": 3, "iscrowd": 0, "bbox": [183, 227, 85, 55], "area": 3475}, {"id": 5526872, "category_id": 3, "iscrowd": 0, "bbox": [495, 246, 145, 290], "area": 28751}, {"id": 7433629, "category_id": 10, "iscrowd": 0, "bbox": [82, 141, 28, 42], "area": 831}, {"id": 7434351, "category_id": 27, "iscrowd": 0, "bbox": [208, 290, 44, 140], "area": 823}, {"id": 6975294, "category_id": 28, "iscrowd": 0, "bbox": [309, 168, 91, 81], "area": 1891}, {"id": 8020302, "category_id": 31, "iscrowd": 0, "bbox": [285, 267, 61, 96], "area": 2828}, {"id": 2894375, "category_id": 31, "iscrowd": 0, "bbox": [210, 294, 40, 84], "area": 1998}, {"id": 6775648, "category_id": 92, "iscrowd": 0, "bbox": [470, 0, 87, 82], "area": 1936}, {"id": 8423301, "category_id": 130, "iscrowd": 0, "bbox": [34, 0, 606, 154], "area": 3471}, {"id": 8881540, "category_id": 149, "iscrowd": 0, "bbox": [0, 203, 640, 340], "area": 97640}, {"id": 7633534, "category_id": 151, "iscrowd": 0, "bbox": [131, 0, 59, 67], "area": 2140}, {"id": 8882309, "category_id": 181, "iscrowd": 0, "bbox": [33, 12, 499, 216], "area": 9490}, {"id": 9999757, "category_id": 191, "iscrowd": 0, "bbox": [0, 211, 550, 221], "area": 14039}, {"id": 9080205, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 306], "area": 110491}, {"id": 13283198, "category_id": 199, "iscrowd": 0, "bbox": [417, 167, 26, 108], "area": 1882}], "file_name": "000000577932.png", "image_id": 577932}, {"segments_info": [{"id": 2959655, "category_id": 1, "iscrowd": 0, "bbox": [206, 277, 11, 34], "area": 286}, {"id": 11312022, "category_id": 38, "iscrowd": 0, "bbox": [379, 66, 97, 119], "area": 598}, {"id": 5395797, "category_id": 154, "iscrowd": 0, "bbox": [0, 206, 640, 221], "area": 135153}, {"id": 12890522, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 224], "area": 137133}], "file_name": "000000577959.png", "image_id": 577959}, {"segments_info": [{"id": 7763053, "category_id": 3, "iscrowd": 0, "bbox": [474, 270, 39, 36], "area": 869}, {"id": 2631196, "category_id": 3, "iscrowd": 0, "bbox": [0, 276, 104, 31], "area": 1808}, {"id": 4081740, "category_id": 8, "iscrowd": 0, "bbox": [510, 249, 130, 88], "area": 8708}, {"id": 4211005, "category_id": 8, "iscrowd": 0, "bbox": [391, 270, 85, 34], "area": 1649}, {"id": 989745, "category_id": 119, "iscrowd": 0, "bbox": [0, 291, 84, 42], "area": 1399}, {"id": 6252904, "category_id": 184, "iscrowd": 0, "bbox": [0, 164, 562, 128], "area": 14680}, {"id": 4343885, "category_id": 185, "iscrowd": 0, "bbox": [99, 248, 273, 61], "area": 6195}, {"id": 14539477, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 227], "area": 113935}, {"id": 5987935, "category_id": 191, "iscrowd": 0, "bbox": [0, 306, 640, 122], "area": 60947}, {"id": 3816509, "category_id": 197, "iscrowd": 0, "bbox": [100, 99, 540, 190], "area": 37211}, {"id": 986380, "category_id": 199, "iscrowd": 0, "bbox": [69, 271, 23, 17], "area": 317}], "file_name": "000000577976.png", "image_id": 577976}, {"segments_info": [{"id": 4672340, "category_id": 1, "iscrowd": 0, "bbox": [310, 300, 8, 15], "area": 73}, {"id": 3222834, "category_id": 1, "iscrowd": 0, "bbox": [348, 298, 6, 13], "area": 54}, {"id": 2564641, "category_id": 1, "iscrowd": 0, "bbox": [298, 300, 6, 17], "area": 61}, {"id": 4342088, "category_id": 1, "iscrowd": 0, "bbox": [304, 299, 6, 19], "area": 71}, {"id": 5459536, "category_id": 7, "iscrowd": 0, "bbox": [2, 231, 297, 157], "area": 31784}, {"id": 10195860, "category_id": 92, "iscrowd": 0, "bbox": [483, 288, 36, 43], "area": 1296}, {"id": 6383209, "category_id": 144, "iscrowd": 0, "bbox": [305, 304, 335, 176], "area": 36067}, {"id": 4408904, "category_id": 147, "iscrowd": 0, "bbox": [0, 305, 453, 175], "area": 48469}, {"id": 10395303, "category_id": 181, "iscrowd": 0, "bbox": [430, 249, 88, 44], "area": 2201}, {"id": 6711921, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 526, 292], "area": 123902}, {"id": 2631981, "category_id": 197, "iscrowd": 0, "bbox": [290, 0, 350, 412], "area": 58964}], "file_name": "000000578093.png", "image_id": 578093}, {"segments_info": [{"id": 1776411, "category_id": 16, "iscrowd": 0, "bbox": [278, 158, 84, 44], "area": 2116}, {"id": 8026746, "category_id": 16, "iscrowd": 0, "bbox": [164, 155, 52, 38], "area": 1053}, {"id": 2171169, "category_id": 16, "iscrowd": 0, "bbox": [39, 391, 43, 41], "area": 1296}, {"id": 4013373, "category_id": 191, "iscrowd": 0, "bbox": [0, 504, 429, 136], "area": 33967}, {"id": 6316128, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 429, 608], "area": 232000}], "file_name": "000000578236.png", "image_id": 578236}, {"segments_info": [{"id": 3025719, "category_id": 1, "iscrowd": 0, "bbox": [376, 51, 83, 109], "area": 3845}, {"id": 4010032, "category_id": 1, "iscrowd": 0, "bbox": [494, 66, 93, 305], "area": 14778}, {"id": 8413833, "category_id": 1, "iscrowd": 0, "bbox": [374, 115, 160, 360], "area": 25342}, {"id": 6248814, "category_id": 1, "iscrowd": 0, "bbox": [78, 97, 211, 304], "area": 33167}, {"id": 6642271, "category_id": 1, "iscrowd": 0, "bbox": [344, 100, 111, 269], "area": 15977}, {"id": 4078421, "category_id": 1, "iscrowd": 0, "bbox": [436, 112, 29, 70], "area": 829}, {"id": 7039870, "category_id": 1, "iscrowd": 0, "bbox": [525, 18, 115, 462], "area": 23895}, {"id": 6841166, "category_id": 44, "iscrowd": 0, "bbox": [62, 147, 15, 29], "area": 345}, {"id": 3945264, "category_id": 44, "iscrowd": 0, "bbox": [36, 127, 12, 22], "area": 163}, {"id": 7832200, "category_id": 63, "iscrowd": 0, "bbox": [140, 146, 268, 272], "area": 29628}, {"id": 14207429, "category_id": 75, "iscrowd": 0, "bbox": [348, 194, 55, 46], "area": 655}, {"id": 2178139, "category_id": 118, "iscrowd": 0, "bbox": [0, 313, 640, 167], "area": 52797}, {"id": 3223852, "category_id": 181, "iscrowd": 0, "bbox": [0, 0, 640, 227], "area": 71303}, {"id": 6844276, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 536, 364], "area": 28614}], "file_name": "000000578489.png", "image_id": 578489}, {"segments_info": [{"id": 3754343, "category_id": 62, "iscrowd": 0, "bbox": [193, 138, 14, 47], "area": 260}, {"id": 4740713, "category_id": 62, "iscrowd": 0, "bbox": [117, 136, 38, 57], "area": 1163}, {"id": 3428718, "category_id": 62, "iscrowd": 0, "bbox": [205, 140, 24, 37], "area": 532}, {"id": 4346987, "category_id": 62, "iscrowd": 0, "bbox": [158, 136, 26, 54], "area": 861}, {"id": 6713718, "category_id": 63, "iscrowd": 0, "bbox": [2, 148, 132, 99], "area": 4491}, {"id": 8948882, "category_id": 63, "iscrowd": 0, "bbox": [312, 149, 156, 89], "area": 9642}, {"id": 10191977, "category_id": 63, "iscrowd": 0, "bbox": [500, 117, 140, 173], "area": 14834}, {"id": 5860966, "category_id": 64, "iscrowd": 0, "bbox": [269, 143, 60, 54], "area": 1777}, {"id": 6448490, "category_id": 67, "iscrowd": 0, "bbox": [125, 150, 87, 5], "area": 179}, {"id": 7110026, "category_id": 86, "iscrowd": 0, "bbox": [119, 154, 8, 20], "area": 147}, {"id": 1653301, "category_id": 86, "iscrowd": 0, "bbox": [442, 72, 10, 39], "area": 211}, {"id": 4008225, "category_id": 86, "iscrowd": 0, "bbox": [345, 93, 7, 30], "area": 104}, {"id": 12761245, "category_id": 86, "iscrowd": 0, "bbox": [292, 179, 15, 11], "area": 109}, {"id": 11656685, "category_id": 130, "iscrowd": 0, "bbox": [0, 86, 533, 84], "area": 2216}, {"id": 5404597, "category_id": 133, "iscrowd": 0, "bbox": [359, 70, 72, 68], "area": 3419}, {"id": 12306111, "category_id": 181, "iscrowd": 0, "bbox": [126, 94, 46, 44], "area": 1453}, {"id": 9016744, "category_id": 186, "iscrowd": 0, "bbox": [16, 0, 469, 116], "area": 23145}, {"id": 2572649, "category_id": 189, "iscrowd": 0, "bbox": [0, 154, 510, 136], "area": 11626}, {"id": 10002077, "category_id": 190, "iscrowd": 0, "bbox": [0, 167, 621, 123], "area": 36624}, {"id": 3362214, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 215], "area": 66587}, {"id": 3883079, "category_id": 200, "iscrowd": 0, "bbox": [616, 276, 24, 14], "area": 285}], "file_name": "000000578500.png", "image_id": 578500}, {"segments_info": [{"id": 8746908, "category_id": 1, "iscrowd": 0, "bbox": [183, 92, 220, 284], "area": 34457}, {"id": 4873086, "category_id": 62, "iscrowd": 0, "bbox": [391, 131, 145, 144], "area": 10664}, {"id": 9991292, "category_id": 65, "iscrowd": 0, "bbox": [1, 68, 639, 401], "area": 135851}, {"id": 11702677, "category_id": 84, "iscrowd": 0, "bbox": [359, 227, 152, 137], "area": 9741}, {"id": 9988716, "category_id": 93, "iscrowd": 0, "bbox": [0, 342, 640, 132], "area": 3405}, {"id": 5064271, "category_id": 109, "iscrowd": 0, "bbox": [596, 0, 44, 141], "area": 4875}, {"id": 9938609, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 291], "area": 91173}], "file_name": "000000578545.png", "image_id": 578545}, {"segments_info": [{"id": 7630955, "category_id": 1, "iscrowd": 0, "bbox": [136, 78, 357, 124], "area": 18006}, {"id": 6441297, "category_id": 4, "iscrowd": 0, "bbox": [179, 121, 412, 205], "area": 54340}, {"id": 5591379, "category_id": 149, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 156089}, {"id": 4678249, "category_id": 193, "iscrowd": 0, "bbox": [0, 115, 640, 174], "area": 44338}], "file_name": "000000578792.png", "image_id": 578792}, {"segments_info": [{"id": 6778000, "category_id": 1, "iscrowd": 0, "bbox": [73, 1, 217, 294], "area": 35102}, {"id": 3553580, "category_id": 4, "iscrowd": 0, "bbox": [330, 1, 67, 62], "area": 2454}, {"id": 11974066, "category_id": 50, "iscrowd": 0, "bbox": [269, 327, 114, 72], "area": 2580}, {"id": 7170689, "category_id": 50, "iscrowd": 0, "bbox": [194, 501, 192, 71], "area": 6699}, {"id": 5394326, "category_id": 51, "iscrowd": 0, "bbox": [276, 223, 78, 62], "area": 3529}, {"id": 2105889, "category_id": 51, "iscrowd": 0, "bbox": [171, 121, 103, 74], "area": 4576}, {"id": 5196463, "category_id": 51, "iscrowd": 0, "bbox": [160, 460, 225, 141], "area": 11497}, {"id": 9221831, "category_id": 51, "iscrowd": 0, "bbox": [140, 328, 197, 131], "area": 18018}, {"id": 6923705, "category_id": 62, "iscrowd": 0, "bbox": [284, 166, 90, 78], "area": 3853}, {"id": 5461069, "category_id": 67, "iscrowd": 0, "bbox": [95, 37, 295, 81], "area": 6417}, {"id": 5855061, "category_id": 67, "iscrowd": 0, "bbox": [2, 240, 476, 393], "area": 141538}, {"id": 3421748, "category_id": 189, "iscrowd": 0, "bbox": [0, 341, 480, 299], "area": 3950}, {"id": 6908254, "category_id": 190, "iscrowd": 0, "bbox": [0, 0, 480, 252], "area": 34931}, {"id": 12040368, "category_id": 199, "iscrowd": 0, "bbox": [392, 0, 88, 121], "area": 8574}], "file_name": "000000578871.png", "image_id": 578871}, {"segments_info": [{"id": 1775731, "category_id": 44, "iscrowd": 0, "bbox": [422, 543, 104, 97], "area": 6736}, {"id": 2434689, "category_id": 44, "iscrowd": 0, "bbox": [538, 590, 59, 49], "area": 1660}, {"id": 8352932, "category_id": 47, "iscrowd": 0, "bbox": [376, 293, 74, 98], "area": 5687}, {"id": 1512044, "category_id": 47, "iscrowd": 0, "bbox": [318, 499, 111, 141], "area": 13335}, {"id": 921988, "category_id": 64, "iscrowd": 0, "bbox": [0, 0, 526, 635], "area": 180440}, {"id": 7497134, "category_id": 86, "iscrowd": 0, "bbox": [176, 455, 120, 173], "area": 13314}, {"id": 5524334, "category_id": 90, "iscrowd": 0, "bbox": [473, 237, 86, 93], "area": 1269}, {"id": 1054915, "category_id": 119, "iscrowd": 0, "bbox": [0, 0, 468, 266], "area": 450}, {"id": 1714076, "category_id": 133, "iscrowd": 0, "bbox": [253, 0, 345, 483], "area": 64256}, {"id": 8419007, "category_id": 156, "iscrowd": 0, "bbox": [78, 454, 520, 186], "area": 31867}, {"id": 2043362, "category_id": 175, "iscrowd": 0, "bbox": [0, 0, 598, 640], "area": 62607}], "file_name": "000000578922.png", "image_id": 578922}, {"segments_info": [{"id": 4407874, "category_id": 7, "iscrowd": 0, "bbox": [15, 141, 625, 323], "area": 121454}, {"id": 10134451, "category_id": 144, "iscrowd": 0, "bbox": [0, 312, 162, 157], "area": 13561}, {"id": 2698806, "category_id": 147, "iscrowd": 0, "bbox": [0, 291, 473, 178], "area": 27622}, {"id": 9012871, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 291], "area": 59146}, {"id": 13947603, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 493, 256], "area": 77383}], "file_name": "000000578967.png", "image_id": 578967}, {"segments_info": [{"id": 4936566, "category_id": 1, "iscrowd": 0, "bbox": [429, 310, 211, 63], "area": 5978}, {"id": 2564929, "category_id": 1, "iscrowd": 0, "bbox": [1, 0, 105, 90], "area": 4818}, {"id": 2303811, "category_id": 1, "iscrowd": 0, "bbox": [0, 90, 81, 175], "area": 10957}, {"id": 9145771, "category_id": 1, "iscrowd": 0, "bbox": [281, 25, 191, 239], "area": 27088}, {"id": 2038681, "category_id": 1, "iscrowd": 0, "bbox": [102, 30, 190, 202], "area": 22976}, {"id": 4277335, "category_id": 1, "iscrowd": 0, "bbox": [494, 115, 146, 215], "area": 23726}, {"id": 2695515, "category_id": 32, "iscrowd": 0, "bbox": [352, 180, 27, 57], "area": 901}, {"id": 2107466, "category_id": 44, "iscrowd": 0, "bbox": [197, 271, 37, 108], "area": 1806}, {"id": 4481969, "category_id": 47, "iscrowd": 0, "bbox": [368, 357, 49, 70], "area": 2259}, {"id": 10463422, "category_id": 47, "iscrowd": 0, "bbox": [146, 231, 21, 27], "area": 486}, {"id": 9079200, "category_id": 47, "iscrowd": 0, "bbox": [5, 263, 28, 21], "area": 432}, {"id": 8487571, "category_id": 47, "iscrowd": 0, "bbox": [5, 281, 30, 33], "area": 768}, {"id": 10528449, "category_id": 47, "iscrowd": 0, "bbox": [194, 220, 22, 26], "area": 433}, {"id": 10134204, "category_id": 47, "iscrowd": 0, "bbox": [149, 200, 22, 27], "area": 386}, {"id": 11253724, "category_id": 47, "iscrowd": 0, "bbox": [380, 333, 31, 41], "area": 973}, {"id": 9870777, "category_id": 47, "iscrowd": 0, "bbox": [168, 231, 22, 27], "area": 489}, {"id": 10924247, "category_id": 47, "iscrowd": 0, "bbox": [438, 330, 29, 42], "area": 904}, {"id": 9937342, "category_id": 47, "iscrowd": 0, "bbox": [330, 271, 25, 26], "area": 408}, {"id": 8750744, "category_id": 47, "iscrowd": 0, "bbox": [35, 266, 29, 34], "area": 768}, {"id": 11187155, "category_id": 47, "iscrowd": 0, "bbox": [401, 316, 29, 36], "area": 760}, {"id": 10704957, "category_id": 47, "iscrowd": 0, "bbox": [458, 244, 45, 62], "area": 2043}, {"id": 9476799, "category_id": 47, "iscrowd": 1, "bbox": [17, 10, 546, 417], "area": 6484}, {"id": 14210537, "category_id": 48, "iscrowd": 0, "bbox": [127, 329, 47, 32], "area": 927}, {"id": 3168891, "category_id": 51, "iscrowd": 0, "bbox": [232, 69, 23, 18], "area": 365}, {"id": 658997, "category_id": 51, "iscrowd": 0, "bbox": [279, 85, 28, 13], "area": 264}, {"id": 790055, "category_id": 62, "iscrowd": 0, "bbox": [78, 1, 87, 152], "area": 6986}, {"id": 1711922, "category_id": 62, "iscrowd": 0, "bbox": [484, 87, 72, 162], "area": 1723}, {"id": 1119285, "category_id": 62, "iscrowd": 0, "bbox": [471, 164, 30, 80], "area": 836}, {"id": 1060453, "category_id": 67, "iscrowd": 0, "bbox": [0, 49, 46, 46], "area": 956}, {"id": 4545690, "category_id": 67, "iscrowd": 0, "bbox": [0, 211, 535, 216], "area": 76220}, {"id": 2970506, "category_id": 67, "iscrowd": 0, "bbox": [227, 59, 122, 89], "area": 3766}, {"id": 3100320, "category_id": 100, "iscrowd": 0, "bbox": [298, 34, 56, 62], "area": 1922}, {"id": 922950, "category_id": 171, "iscrowd": 0, "bbox": [423, 0, 198, 82], "area": 2523}, {"id": 2441840, "category_id": 177, "iscrowd": 0, "bbox": [73, 0, 567, 158], "area": 7480}, {"id": 724792, "category_id": 188, "iscrowd": 0, "bbox": [200, 0, 176, 65], "area": 6953}, {"id": 4545426, "category_id": 189, "iscrowd": 0, "bbox": [3, 253, 588, 174], "area": 2739}, {"id": 2703455, "category_id": 190, "iscrowd": 0, "bbox": [35, 68, 453, 179], "area": 4141}, {"id": 8423076, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 598, 427], "area": 1547}], "file_name": "000000579070.png", "image_id": 579070}, {"segments_info": [{"id": 1191461, "category_id": 56, "iscrowd": 0, "bbox": [222, 52, 136, 143], "area": 12649}, {"id": 1855293, "category_id": 56, "iscrowd": 0, "bbox": [469, 262, 171, 125], "area": 13367}, {"id": 2186570, "category_id": 56, "iscrowd": 0, "bbox": [139, 146, 335, 273], "area": 45703}, {"id": 8365240, "category_id": 189, "iscrowd": 0, "bbox": [588, 12, 52, 56], "area": 1880}, {"id": 6986183, "category_id": 196, "iscrowd": 0, "bbox": [0, 0, 640, 425], "area": 144665}], "file_name": "000000579091.png", "image_id": 579091}, {"segments_info": [{"id": 9335151, "category_id": 5, "iscrowd": 0, "bbox": [0, 2, 575, 419], "area": 88154}, {"id": 8881538, "category_id": 8, "iscrowd": 0, "bbox": [0, 138, 150, 81], "area": 7791}, {"id": 3486258, "category_id": 33, "iscrowd": 0, "bbox": [95, 337, 26, 20], "area": 387}, {"id": 4868680, "category_id": 33, "iscrowd": 0, "bbox": [28, 331, 23, 13], "area": 267}, {"id": 3288878, "category_id": 33, "iscrowd": 0, "bbox": [188, 322, 32, 24], "area": 605}, {"id": 5986137, "category_id": 33, "iscrowd": 0, "bbox": [220, 328, 28, 14], "area": 300}, {"id": 7169926, "category_id": 33, "iscrowd": 0, "bbox": [254, 322, 29, 16], "area": 385}, {"id": 4407619, "category_id": 33, "iscrowd": 0, "bbox": [137, 310, 48, 38], "area": 1370}, {"id": 3223599, "category_id": 33, "iscrowd": 0, "bbox": [131, 335, 30, 17], "area": 425}, {"id": 5986901, "category_id": 95, "iscrowd": 0, "bbox": [190, 66, 450, 81], "area": 18848}, {"id": 6910330, "category_id": 149, "iscrowd": 0, "bbox": [0, 138, 640, 342], "area": 88567}, {"id": 5593686, "category_id": 184, "iscrowd": 0, "bbox": [0, 19, 640, 144], "area": 30363}, {"id": 15198175, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 315, 52], "area": 7078}, {"id": 7959400, "category_id": 197, "iscrowd": 0, "bbox": [182, 0, 458, 71], "area": 22997}], "file_name": "000000579158.png", "image_id": 579158}, {"segments_info": [{"id": 6775163, "category_id": 1, "iscrowd": 0, "bbox": [256, 223, 124, 417], "area": 23434}, {"id": 4341866, "category_id": 1, "iscrowd": 0, "bbox": [176, 168, 98, 217], "area": 8562}, {"id": 2169394, "category_id": 27, "iscrowd": 0, "bbox": [196, 209, 66, 46], "area": 508}, {"id": 6843333, "category_id": 38, "iscrowd": 0, "bbox": [154, 294, 178, 183], "area": 22196}, {"id": 6048617, "category_id": 38, "iscrowd": 0, "bbox": [207, 260, 46, 57], "area": 1058}, {"id": 9871264, "category_id": 154, "iscrowd": 0, "bbox": [0, 225, 480, 415], "area": 141325}, {"id": 12957345, "category_id": 155, "iscrowd": 0, "bbox": [0, 204, 480, 45], "area": 8352}, {"id": 12751719, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 480, 221], "area": 100863}], "file_name": "000000579307.png", "image_id": 579307}, {"segments_info": [{"id": 2107444, "category_id": 1, "iscrowd": 0, "bbox": [95, 1, 240, 211], "area": 31101}, {"id": 5198168, "category_id": 18, "iscrowd": 0, "bbox": [201, 90, 400, 251], "area": 75566}, {"id": 10132895, "category_id": 191, "iscrowd": 0, "bbox": [0, 0, 640, 498], "area": 210535}], "file_name": "000000579321.png", "image_id": 579321}, {"segments_info": [{"id": 4211011, "category_id": 1, "iscrowd": 0, "bbox": [433, 260, 33, 54], "area": 813}, {"id": 9404525, "category_id": 9, "iscrowd": 0, "bbox": [186, 84, 45, 66], "area": 1304}, {"id": 6318196, "category_id": 42, "iscrowd": 0, "bbox": [464, 304, 32, 12], "area": 137}, {"id": 12429701, "category_id": 155, "iscrowd": 0, "bbox": [0, 136, 640, 293], "area": 184400}, {"id": 13485233, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 140], "area": 87817}], "file_name": "000000579635.png", "image_id": 579635}, {"segments_info": [{"id": 3750201, "category_id": 1, "iscrowd": 0, "bbox": [183, 2, 456, 392], "area": 125605}, {"id": 4408131, "category_id": 46, "iscrowd": 0, "bbox": [23, 22, 17, 53], "area": 481}, {"id": 6250335, "category_id": 46, "iscrowd": 0, "bbox": [32, 18, 27, 58], "area": 869}, {"id": 5526612, "category_id": 46, "iscrowd": 0, "bbox": [52, 37, 26, 38], "area": 844}, {"id": 3684408, "category_id": 47, "iscrowd": 0, "bbox": [110, 238, 57, 68], "area": 3431}, {"id": 5723991, "category_id": 47, "iscrowd": 0, "bbox": [73, 21, 49, 53], "area": 2028}, {"id": 2565927, "category_id": 47, "iscrowd": 0, "bbox": [59, 237, 49, 69], "area": 3008}, {"id": 3092271, "category_id": 47, "iscrowd": 0, "bbox": [229, 127, 33, 57], "area": 1690}, {"id": 4079166, "category_id": 47, "iscrowd": 0, "bbox": [13, 245, 48, 66], "area": 2574}, {"id": 2894892, "category_id": 47, "iscrowd": 0, "bbox": [161, 129, 68, 57], "area": 3219}, {"id": 3947580, "category_id": 47, "iscrowd": 0, "bbox": [62, 123, 50, 69], "area": 3100}, {"id": 4605510, "category_id": 47, "iscrowd": 0, "bbox": [107, 122, 63, 67], "area": 3374}, {"id": 1907997, "category_id": 47, "iscrowd": 0, "bbox": [60, 118, 51, 19], "area": 336}, {"id": 3618615, "category_id": 47, "iscrowd": 0, "bbox": [13, 122, 50, 69], "area": 3116}, {"id": 12237498, "category_id": 51, "iscrowd": 0, "bbox": [158, 18, 95, 52], "area": 3385}, {"id": 131586, "category_id": 77, "iscrowd": 0, "bbox": [279, 168, 56, 107], "area": 3611}, {"id": 3158064, "category_id": 156, "iscrowd": 0, "bbox": [0, 58, 640, 265], "area": 25505}, {"id": 2894884, "category_id": 188, "iscrowd": 0, "bbox": [352, 0, 288, 176], "area": 14856}, {"id": 2236962, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 399], "area": 34449}], "file_name": "000000579655.png", "image_id": 579655}, {"segments_info": [{"id": 2364953, "category_id": 1, "iscrowd": 0, "bbox": [88, 184, 3, 3], "area": 9}, {"id": 5982279, "category_id": 1, "iscrowd": 0, "bbox": [429, 114, 28, 45], "area": 309}, {"id": 3224377, "category_id": 7, "iscrowd": 0, "bbox": [2, 90, 521, 133], "area": 36969}, {"id": 5793135, "category_id": 95, "iscrowd": 0, "bbox": [204, 200, 294, 149], "area": 30371}, {"id": 13284258, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 276], "area": 95605}, {"id": 3498093, "category_id": 192, "iscrowd": 0, "bbox": [0, 189, 640, 171], "area": 60294}, {"id": 2713702, "category_id": 193, "iscrowd": 0, "bbox": [209, 329, 258, 31], "area": 5486}], "file_name": "000000579818.png", "image_id": 579818}, {"segments_info": [{"id": 5596820, "category_id": 13, "iscrowd": 0, "bbox": [354, 126, 139, 202], "area": 18503}, {"id": 2641501, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 380, 332], "area": 71877}, {"id": 11710117, "category_id": 187, "iscrowd": 0, "bbox": [74, 0, 426, 332], "area": 55758}], "file_name": "000000579893.png", "image_id": 579893}, {"segments_info": [{"id": 2182726, "category_id": 56, "iscrowd": 0, "bbox": [212, 143, 48, 68], "area": 1716}, {"id": 5013394, "category_id": 56, "iscrowd": 0, "bbox": [119, 97, 47, 40], "area": 1182}, {"id": 2511200, "category_id": 56, "iscrowd": 0, "bbox": [221, 63, 51, 46], "area": 1188}, {"id": 1127989, "category_id": 56, "iscrowd": 0, "bbox": [337, 177, 30, 40], "area": 746}, {"id": 1722943, "category_id": 56, "iscrowd": 0, "bbox": [196, 356, 53, 54], "area": 1617}, {"id": 1327149, "category_id": 56, "iscrowd": 0, "bbox": [146, 265, 42, 41], "area": 1074}, {"id": 3761766, "category_id": 56, "iscrowd": 0, "bbox": [123, 168, 35, 35], "area": 652}, {"id": 1526588, "category_id": 56, "iscrowd": 0, "bbox": [289, 244, 30, 28], "area": 478}, {"id": 2054463, "category_id": 56, "iscrowd": 0, "bbox": [183, 281, 30, 35], "area": 644}, {"id": 1921096, "category_id": 56, "iscrowd": 0, "bbox": [271, 214, 44, 32], "area": 745}, {"id": 1063984, "category_id": 56, "iscrowd": 0, "bbox": [275, 297, 40, 37], "area": 1069}, {"id": 4091762, "category_id": 56, "iscrowd": 0, "bbox": [39, 164, 34, 38], "area": 974}, {"id": 5405077, "category_id": 59, "iscrowd": 0, "bbox": [1, 36, 374, 412], "area": 111083}, {"id": 3170658, "category_id": 189, "iscrowd": 0, "bbox": [0, 0, 375, 500], "area": 21065}], "file_name": "000000579900.png", "image_id": 579900}, {"segments_info": [{"id": 6509155, "category_id": 1, "iscrowd": 0, "bbox": [200, 233, 182, 270], "area": 17476}, {"id": 4732984, "category_id": 3, "iscrowd": 0, "bbox": [392, 199, 164, 441], "area": 53724}, {"id": 6443334, "category_id": 3, "iscrowd": 0, "bbox": [0, 238, 195, 87], "area": 12125}, {"id": 8021848, "category_id": 3, "iscrowd": 0, "bbox": [340, 239, 141, 96], "area": 8059}, {"id": 6048061, "category_id": 3, "iscrowd": 0, "bbox": [474, 252, 32, 35], "area": 575}, {"id": 8020555, "category_id": 3, "iscrowd": 0, "bbox": [3, 217, 209, 105], "area": 6062}, {"id": 5327432, "category_id": 4, "iscrowd": 0, "bbox": [190, 325, 156, 257], "area": 24537}, {"id": 7757905, "category_id": 41, "iscrowd": 0, "bbox": [267, 164, 61, 176], "area": 8057}, {"id": 11050652, "category_id": 149, "iscrowd": 0, "bbox": [0, 508, 395, 132], "area": 43061}, {"id": 6841956, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 556, 251], "area": 99739}, {"id": 14405057, "category_id": 187, "iscrowd": 0, "bbox": [16, 0, 502, 42], "area": 8296}, {"id": 11181207, "category_id": 199, "iscrowd": 0, "bbox": [0, 134, 556, 387], "area": 71840}], "file_name": "000000579902.png", "image_id": 579902}, {"segments_info": [{"id": 460551, "category_id": 62, "iscrowd": 0, "bbox": [170, 150, 88, 120], "area": 3807}, {"id": 1645594, "category_id": 62, "iscrowd": 0, "bbox": [265, 149, 53, 57], "area": 1947}, {"id": 2172711, "category_id": 63, "iscrowd": 0, "bbox": [171, 152, 86, 66], "area": 1789}, {"id": 3689294, "category_id": 63, "iscrowd": 0, "bbox": [185, 156, 70, 38], "area": 659}, {"id": 395528, "category_id": 63, "iscrowd": 0, "bbox": [171, 173, 88, 84], "area": 1719}, {"id": 328965, "category_id": 64, "iscrowd": 0, "bbox": [111, 231, 30, 62], "area": 1464}, {"id": 4407091, "category_id": 72, "iscrowd": 0, "bbox": [371, 105, 36, 51], "area": 1616}, {"id": 7366488, "category_id": 84, "iscrowd": 0, "bbox": [300, 194, 16, 4], "area": 58}, {"id": 987664, "category_id": 130, "iscrowd": 0, "bbox": [138, 104, 72, 104], "area": 3035}, {"id": 3224623, "category_id": 133, "iscrowd": 0, "bbox": [24, 0, 73, 275], "area": 16552}, {"id": 1776919, "category_id": 161, "iscrowd": 0, "bbox": [396, 32, 104, 304], "area": 22498}, {"id": 11052955, "category_id": 181, "iscrowd": 0, "bbox": [233, 49, 97, 118], "area": 8968}, {"id": 4473651, "category_id": 186, "iscrowd": 0, "bbox": [155, 0, 333, 56], "area": 13764}, {"id": 394757, "category_id": 188, "iscrowd": 0, "bbox": [351, 154, 56, 81], "area": 3470}, {"id": 526344, "category_id": 189, "iscrowd": 0, "bbox": [0, 191, 351, 145], "area": 7983}, {"id": 2435363, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 500, 312], "area": 49187}, {"id": 1119250, "category_id": 200, "iscrowd": 0, "bbox": [104, 206, 344, 130], "area": 26014}], "file_name": "000000579970.png", "image_id": 579970}, {"segments_info": [{"id": 3750203, "category_id": 1, "iscrowd": 0, "bbox": [190, 306, 260, 169], "area": 35919}, {"id": 1974062, "category_id": 1, "iscrowd": 0, "bbox": [66, 98, 252, 382], "area": 51544}, {"id": 2631993, "category_id": 1, "iscrowd": 0, "bbox": [493, 85, 147, 381], "area": 42596}, {"id": 1183766, "category_id": 32, "iscrowd": 0, "bbox": [585, 221, 45, 24], "area": 533}, {"id": 2170920, "category_id": 32, "iscrowd": 0, "bbox": [180, 231, 55, 18], "area": 775}, {"id": 2302009, "category_id": 109, "iscrowd": 0, "bbox": [0, 0, 640, 480], "area": 102414}], "file_name": "000000580197.png", "image_id": 580197}, {"segments_info": [{"id": 5134190, "category_id": 1, "iscrowd": 0, "bbox": [411, 3, 229, 435], "area": 48336}, {"id": 12371915, "category_id": 47, "iscrowd": 0, "bbox": [406, 174, 30, 24], "area": 445}, {"id": 4140339, "category_id": 50, "iscrowd": 0, "bbox": [1, 331, 342, 112], "area": 5371}, {"id": 8684424, "category_id": 51, "iscrowd": 0, "bbox": [2, 321, 191, 118], "area": 16826}, {"id": 14411239, "category_id": 51, "iscrowd": 0, "bbox": [451, 173, 45, 38], "area": 707}, {"id": 10189951, "category_id": 51, "iscrowd": 0, "bbox": [365, 172, 46, 29], "area": 1039}, {"id": 6645874, "category_id": 79, "iscrowd": 0, "bbox": [5, 245, 436, 164], "area": 18196}, {"id": 11187388, "category_id": 81, "iscrowd": 0, "bbox": [443, 186, 54, 26], "area": 764}, {"id": 6117472, "category_id": 90, "iscrowd": 0, "bbox": [495, 184, 5, 30], "area": 55}, {"id": 11327711, "category_id": 109, "iscrowd": 0, "bbox": [179, 0, 328, 192], "area": 26641}, {"id": 14276057, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 512, 269], "area": 59920}, {"id": 2107457, "category_id": 177, "iscrowd": 0, "bbox": [351, 209, 41, 25], "area": 623}, {"id": 10659500, "category_id": 181, "iscrowd": 0, "bbox": [310, 0, 289, 206], "area": 20445}, {"id": 16118515, "category_id": 195, "iscrowd": 0, "bbox": [308, 100, 20, 38], "area": 583}, {"id": 9486544, "category_id": 196, "iscrowd": 0, "bbox": [145, 254, 266, 164], "area": 8885}, {"id": 13552334, "category_id": 199, "iscrowd": 0, "bbox": [437, 0, 84, 413], "area": 3113}], "file_name": "000000580294.png", "image_id": 580294}, {"segments_info": [{"id": 2763822, "category_id": 31, "iscrowd": 0, "bbox": [111, 431, 122, 68], "area": 6047}, {"id": 4541012, "category_id": 62, "iscrowd": 0, "bbox": [238, 203, 77, 134], "area": 7230}, {"id": 10857906, "category_id": 63, "iscrowd": 0, "bbox": [0, 249, 133, 253], "area": 22333}, {"id": 13751510, "category_id": 73, "iscrowd": 0, "bbox": [136, 295, 40, 14], "area": 464}, {"id": 988435, "category_id": 84, "iscrowd": 0, "bbox": [323, 242, 6, 31], "area": 182}, {"id": 9542301, "category_id": 84, "iscrowd": 0, "bbox": [300, 123, 6, 14], "area": 79}, {"id": 3619698, "category_id": 84, "iscrowd": 0, "bbox": [332, 187, 4, 25], "area": 80}, {"id": 7568255, "category_id": 84, "iscrowd": 0, "bbox": [281, 145, 4, 24], "area": 86}, {"id": 2107440, "category_id": 84, "iscrowd": 0, "bbox": [323, 277, 28, 33], "area": 707}, {"id": 3683928, "category_id": 84, "iscrowd": 0, "bbox": [279, 178, 39, 33], "area": 681}, {"id": 2172454, "category_id": 84, "iscrowd": 0, "bbox": [340, 113, 9, 25], "area": 176}, {"id": 6648707, "category_id": 84, "iscrowd": 0, "bbox": [342, 189, 4, 23], "area": 84}, {"id": 1909798, "category_id": 84, "iscrowd": 0, "bbox": [339, 243, 14, 33], "area": 418}, {"id": 1514264, "category_id": 84, "iscrowd": 0, "bbox": [330, 243, 9, 32], "area": 268}, {"id": 2632527, "category_id": 84, "iscrowd": 0, "bbox": [323, 191, 4, 20], "area": 63}, {"id": 4476023, "category_id": 84, "iscrowd": 0, "bbox": [329, 191, 3, 21], "area": 51}, {"id": 2895664, "category_id": 84, "iscrowd": 0, "bbox": [344, 146, 5, 21], "area": 83}, {"id": 10134180, "category_id": 86, "iscrowd": 0, "bbox": [326, 79, 19, 30], "area": 357}, {"id": 4673618, "category_id": 86, "iscrowd": 0, "bbox": [294, 97, 14, 13], "area": 163}, {"id": 5197674, "category_id": 93, "iscrowd": 0, "bbox": [0, 287, 76, 192], "area": 2914}, {"id": 15132905, "category_id": 109, "iscrowd": 0, "bbox": [0, 82, 261, 244], "area": 19713}, {"id": 2172477, "category_id": 118, "iscrowd": 0, "bbox": [0, 297, 427, 343], "area": 26424}, {"id": 2369576, "category_id": 156, "iscrowd": 0, "bbox": [271, 95, 139, 240], "area": 21231}, {"id": 2633526, "category_id": 177, "iscrowd": 0, "bbox": [418, 263, 9, 28], "area": 197}, {"id": 12962506, "category_id": 186, "iscrowd": 0, "bbox": [0, 0, 427, 71], "area": 21348}, {"id": 6254468, "category_id": 189, "iscrowd": 0, "bbox": [126, 286, 67, 124], "area": 3732}, {"id": 10858678, "category_id": 199, "iscrowd": 0, "bbox": [0, 12, 427, 320], "area": 38696}, {"id": 8816780, "category_id": 200, "iscrowd": 0, "bbox": [70, 350, 357, 290], "area": 79226}], "file_name": "000000580410.png", "image_id": 580410}, {"segments_info": [{"id": 6118761, "category_id": 1, "iscrowd": 0, "bbox": [477, 226, 14, 14], "area": 135}, {"id": 7957600, "category_id": 3, "iscrowd": 0, "bbox": [564, 249, 62, 95], "area": 2512}, {"id": 6445140, "category_id": 3, "iscrowd": 0, "bbox": [599, 253, 40, 109], "area": 2994}, {"id": 7299407, "category_id": 3, "iscrowd": 0, "bbox": [154, 207, 95, 55], "area": 3459}, {"id": 4929830, "category_id": 13, "iscrowd": 0, "bbox": [603, 213, 15, 18], "area": 163}, {"id": 8154448, "category_id": 13, "iscrowd": 0, "bbox": [109, 131, 17, 37], "area": 250}, {"id": 9212566, "category_id": 21, "iscrowd": 0, "bbox": [71, 245, 295, 183], "area": 43053}, {"id": 8095118, "category_id": 21, "iscrowd": 0, "bbox": [423, 224, 45, 88], "area": 1611}, {"id": 8029582, "category_id": 21, "iscrowd": 0, "bbox": [437, 214, 155, 208], "area": 17975}, {"id": 8489614, "category_id": 21, "iscrowd": 0, "bbox": [0, 174, 165, 249], "area": 22320}, {"id": 8747121, "category_id": 149, "iscrowd": 0, "bbox": [0, 339, 640, 89], "area": 26673}, {"id": 9938863, "category_id": 181, "iscrowd": 0, "bbox": [0, 31, 207, 89], "area": 1784}, {"id": 3625284, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 618, 312], "area": 82090}, {"id": 7637887, "category_id": 185, "iscrowd": 0, "bbox": [104, 167, 101, 45], "area": 2340}, {"id": 16579319, "category_id": 187, "iscrowd": 0, "bbox": [66, 0, 574, 177], "area": 26035}, {"id": 6052440, "category_id": 191, "iscrowd": 0, "bbox": [363, 323, 97, 23], "area": 1660}, {"id": 6522994, "category_id": 193, "iscrowd": 0, "bbox": [363, 301, 51, 26], "area": 830}, {"id": 10465983, "category_id": 197, "iscrowd": 0, "bbox": [0, 0, 640, 267], "area": 21613}, {"id": 3948094, "category_id": 198, "iscrowd": 0, "bbox": [406, 301, 72, 42], "area": 1112}], "file_name": "000000580418.png", "image_id": 580418}, {"segments_info": [{"id": 11117244, "category_id": 11, "iscrowd": 0, "bbox": [336, 70, 232, 346], "area": 37635}, {"id": 2967877, "category_id": 184, "iscrowd": 0, "bbox": [619, 51, 21, 61], "area": 464}, {"id": 7964305, "category_id": 191, "iscrowd": 0, "bbox": [0, 177, 640, 248], "area": 90983}, {"id": 10597577, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 248], "area": 131583}], "file_name": "000000580757.png", "image_id": 580757}, {"segments_info": [{"id": 6706510, "category_id": 1, "iscrowd": 0, "bbox": [132, 51, 62, 113], "area": 2412}, {"id": 5525840, "category_id": 41, "iscrowd": 0, "bbox": [129, 153, 50, 17], "area": 371}, {"id": 6578005, "category_id": 184, "iscrowd": 0, "bbox": [335, 81, 165, 72], "area": 5911}, {"id": 13738611, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 500, 44], "area": 21087}], "file_name": "000000581062.png", "image_id": 581062}, {"segments_info": [{"id": 4080461, "category_id": 21, "iscrowd": 0, "bbox": [453, 219, 74, 45], "area": 725}, {"id": 4607836, "category_id": 21, "iscrowd": 0, "bbox": [92, 239, 112, 65], "area": 3429}, {"id": 4870241, "category_id": 25, "iscrowd": 0, "bbox": [235, 142, 152, 259], "area": 17039}, {"id": 4674663, "category_id": 25, "iscrowd": 0, "bbox": [375, 170, 83, 208], "area": 7258}, {"id": 7040363, "category_id": 184, "iscrowd": 0, "bbox": [0, 0, 640, 399], "area": 51677}, {"id": 16513785, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 166], "area": 64756}, {"id": 6193530, "category_id": 193, "iscrowd": 0, "bbox": [0, 151, 640, 329], "area": 82530}, {"id": 8361369, "category_id": 194, "iscrowd": 0, "bbox": [0, 156, 640, 257], "area": 54295}, {"id": 8158072, "category_id": 197, "iscrowd": 0, "bbox": [142, 174, 96, 26], "area": 1947}, {"id": 7235430, "category_id": 198, "iscrowd": 0, "bbox": [37, 96, 603, 143], "area": 14291}], "file_name": "000000581100.png", "image_id": 581100}, {"segments_info": [{"id": 5065808, "category_id": 1, "iscrowd": 0, "bbox": [0, 3, 469, 214], "area": 53342}, {"id": 4553109, "category_id": 58, "iscrowd": 0, "bbox": [40, 141, 308, 232], "area": 46333}, {"id": 2444920, "category_id": 58, "iscrowd": 0, "bbox": [147, 282, 247, 207], "area": 14863}, {"id": 11317433, "category_id": 100, "iscrowd": 0, "bbox": [0, 88, 479, 513], "area": 79346}, {"id": 2700855, "category_id": 191, "iscrowd": 0, "bbox": [0, 412, 479, 228], "area": 61927}, {"id": 1711644, "category_id": 195, "iscrowd": 0, "bbox": [393, 428, 86, 75], "area": 4176}, {"id": 6000552, "category_id": 196, "iscrowd": 0, "bbox": [139, 252, 309, 290], "area": 29793}], "file_name": "000000581206.png", "image_id": 581206}, {"segments_info": [{"id": 9601682, "category_id": 1, "iscrowd": 0, "bbox": [410, 56, 203, 298], "area": 33662}, {"id": 9470077, "category_id": 77, "iscrowd": 0, "bbox": [407, 142, 21, 36], "area": 307}, {"id": 4550480, "category_id": 184, "iscrowd": 0, "bbox": [0, 133, 640, 155], "area": 33318}, {"id": 16503994, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 640, 186], "area": 97175}, {"id": 14660222, "category_id": 192, "iscrowd": 0, "bbox": [0, 167, 289, 73], "area": 11218}, {"id": 5216890, "category_id": 193, "iscrowd": 0, "bbox": [0, 188, 640, 166], "area": 50691}], "file_name": "000000581317.png", "image_id": 581317}, {"segments_info": [{"id": 4733289, "category_id": 1, "iscrowd": 0, "bbox": [554, 388, 22, 53], "area": 460}, {"id": 4204892, "category_id": 1, "iscrowd": 0, "bbox": [20, 262, 29, 76], "area": 755}, {"id": 5654912, "category_id": 1, "iscrowd": 0, "bbox": [524, 404, 12, 37], "area": 285}, {"id": 5845337, "category_id": 1, "iscrowd": 0, "bbox": [211, 420, 24, 40], "area": 524}, {"id": 6505872, "category_id": 1, "iscrowd": 0, "bbox": [249, 420, 13, 24], "area": 169}, {"id": 5648737, "category_id": 1, "iscrowd": 0, "bbox": [429, 400, 22, 46], "area": 458}, {"id": 5981818, "category_id": 1, "iscrowd": 0, "bbox": [488, 412, 19, 23], "area": 274}, {"id": 6175353, "category_id": 1, "iscrowd": 0, "bbox": [263, 93, 219, 246], "area": 18460}, {"id": 5581140, "category_id": 1, "iscrowd": 0, "bbox": [230, 421, 19, 37], "area": 373}, {"id": 5978732, "category_id": 1, "iscrowd": 0, "bbox": [181, 441, 21, 37], "area": 349}, {"id": 3282233, "category_id": 1, "iscrowd": 0, "bbox": [579, 389, 13, 25], "area": 211}, {"id": 5515852, "category_id": 15, "iscrowd": 0, "bbox": [247, 440, 104, 18], "area": 1482}, {"id": 5715804, "category_id": 15, "iscrowd": 0, "bbox": [193, 444, 28, 19], "area": 246}, {"id": 6707851, "category_id": 41, "iscrowd": 0, "bbox": [230, 305, 143, 64], "area": 2104}, {"id": 6390452, "category_id": 144, "iscrowd": 0, "bbox": [20, 416, 572, 196], "area": 68797}, {"id": 9022924, "category_id": 187, "iscrowd": 0, "bbox": [0, 0, 592, 413], "area": 188090}, {"id": 5654896, "category_id": 189, "iscrowd": 0, "bbox": [19, 319, 94, 61], "area": 3724}, {"id": 5979754, "category_id": 192, "iscrowd": 0, "bbox": [170, 394, 309, 30], "area": 5224}, {"id": 4002608, "category_id": 199, "iscrowd": 0, "bbox": [20, 367, 175, 152], "area": 19267}], "file_name": "000000581357.png", "image_id": 581357}, {"segments_info": [{"id": 8618883, "category_id": 85, "iscrowd": 0, "bbox": [517, 220, 28, 99], "area": 1415}, {"id": 10790052, "category_id": 85, "iscrowd": 0, "bbox": [405, 205, 104, 101], "area": 8129}, {"id": 12632256, "category_id": 130, "iscrowd": 0, "bbox": [371, 378, 191, 49], "area": 2076}, {"id": 5263440, "category_id": 181, "iscrowd": 0, "bbox": [16, 0, 624, 427], "area": 86492}, {"id": 1579032, "category_id": 186, "iscrowd": 0, "bbox": [109, 0, 531, 205], "area": 36420}, {"id": 2894892, "category_id": 199, "iscrowd": 0, "bbox": [0, 0, 640, 427], "area": 129815}], "file_name": "000000581482.png", "image_id": 581482}, {"segments_info": [{"id": 8358274, "category_id": 70, "iscrowd": 0, "bbox": [139, 386, 192, 235], "area": 34106}, {"id": 7631469, "category_id": 176, "iscrowd": 0, "bbox": [0, 0, 478, 640], "area": 176577}], "file_name": "000000581615.png", "image_id": 581615}, {"segments_info": [{"id": 4430258, "category_id": 52, "iscrowd": 0, "bbox": [2, 184, 138, 159], "area": 14842}, {"id": 79959, "category_id": 52, "iscrowd": 0, "bbox": [562, 7, 78, 34], "area": 1734}, {"id": 5156541, "category_id": 52, "iscrowd": 0, "bbox": [439, 95, 160, 171], "area": 16679}, {"id": 2258584, "category_id": 52, "iscrowd": 0, "bbox": [75, 106, 99, 107], "area": 6334}, {"id": 5085364, "category_id": 52, "iscrowd": 0, "bbox": [2, 2, 42, 171], "area": 5151}, {"id": 5613256, "category_id": 52, "iscrowd": 0, "bbox": [582, 142, 58, 86], "area": 1753}, {"id": 9429486, "category_id": 52, "iscrowd": 0, "bbox": [468, 0, 70, 26], "area": 1189}, {"id": 4764338, "category_id": 52, "iscrowd": 0, "bbox": [215, 376, 232, 61], "area": 10227}, {"id": 1277546, "category_id": 52, "iscrowd": 0, "bbox": [206, 306, 241, 99], "area": 9955}, {"id": 2519186, "category_id": 52, "iscrowd": 0, "bbox": [49, 85, 121, 66], "area": 4694}, {"id": 542520, "category_id": 52, "iscrowd": 0, "bbox": [194, 183, 247, 64], "area": 8710}, {"id": 8703197, "category_id": 52, "iscrowd": 0, "bbox": [467, 280, 173, 177], "area": 22042}, {"id": 1938563, "category_id": 52, "iscrowd": 0, "bbox": [137, 216, 297, 100], "area": 13576}, {"id": 1995653, "category_id": 52, "iscrowd": 1, "bbox": [0, 20, 640, 458], "area": 24925}, {"id": 1325130, "category_id": 122, "iscrowd": 0, "bbox": [0, 0, 640, 478], "area": 83419}, {"id": 1252129, "category_id": 195, "iscrowd": 0, "bbox": [0, 0, 578, 478], "area": 52789}], "file_name": "000000581781.png", "image_id": 581781}], "categories": [{"supercategory": "person", "isthing": 1, "id": 1, "name": "person"}, {"supercategory": "vehicle", "isthing": 1, "id": 2, "name": "bicycle"}, {"supercategory": "vehicle", "isthing": 1, "id": 3, "name": "car"}, {"supercategory": "vehicle", "isthing": 1, "id": 4, "name": "motorcycle"}, {"supercategory": "vehicle", "isthing": 1, "id": 5, "name": "airplane"}, {"supercategory": "vehicle", "isthing": 1, "id": 6, "name": "bus"}, {"supercategory": "vehicle", "isthing": 1, "id": 7, "name": "train"}, {"supercategory": "vehicle", "isthing": 1, "id": 8, "name": "truck"}, {"supercategory": "vehicle", "isthing": 1, "id": 9, "name": "boat"}, {"supercategory": "outdoor", "isthing": 1, "id": 10, "name": "traffic light"}, {"supercategory": "outdoor", "isthing": 1, "id": 11, "name": "fire hydrant"}, {"supercategory": "outdoor", "isthing": 1, "id": 13, "name": "stop sign"}, {"supercategory": "outdoor", "isthing": 1, "id": 14, "name": "parking meter"}, {"supercategory": "outdoor", "isthing": 1, "id": 15, "name": "bench"}, {"supercategory": "animal", "isthing": 1, "id": 16, "name": "bird"}, {"supercategory": "animal", "isthing": 1, "id": 17, "name": "cat"}, {"supercategory": "animal", "isthing": 1, "id": 18, "name": "dog"}, {"supercategory": "animal", "isthing": 1, "id": 19, "name": "horse"}, {"supercategory": "animal", "isthing": 1, "id": 20, "name": "sheep"}, {"supercategory": "animal", "isthing": 1, "id": 21, "name": "cow"}, {"supercategory": "animal", "isthing": 1, "id": 22, "name": "elephant"}, {"supercategory": "animal", "isthing": 1, "id": 23, "name": "bear"}, {"supercategory": "animal", "isthing": 1, "id": 24, "name": "zebra"}, {"supercategory": "animal", "isthing": 1, "id": 25, "name": "giraffe"}, {"supercategory": "accessory", "isthing": 1, "id": 27, "name": "backpack"}, {"supercategory": "accessory", "isthing": 1, "id": 28, "name": "umbrella"}, {"supercategory": "accessory", "isthing": 1, "id": 31, "name": "handbag"}, {"supercategory": "accessory", "isthing": 1, "id": 32, "name": "tie"}, {"supercategory": "accessory", "isthing": 1, "id": 33, "name": "suitcase"}, {"supercategory": "sports", "isthing": 1, "id": 34, "name": "frisbee"}, {"supercategory": "sports", "isthing": 1, "id": 35, "name": "skis"}, {"supercategory": "sports", "isthing": 1, "id": 36, "name": "snowboard"}, {"supercategory": "sports", "isthing": 1, "id": 37, "name": "sports ball"}, {"supercategory": "sports", "isthing": 1, "id": 38, "name": "kite"}, {"supercategory": "sports", "isthing": 1, "id": 39, "name": "baseball bat"}, {"supercategory": "sports", "isthing": 1, "id": 40, "name": "baseball glove"}, {"supercategory": "sports", "isthing": 1, "id": 41, "name": "skateboard"}, {"supercategory": "sports", "isthing": 1, "id": 42, "name": "surfboard"}, {"supercategory": "sports", "isthing": 1, "id": 43, "name": "tennis racket"}, {"supercategory": "kitchen", "isthing": 1, "id": 44, "name": "bottle"}, {"supercategory": "kitchen", "isthing": 1, "id": 46, "name": "wine glass"}, {"supercategory": "kitchen", "isthing": 1, "id": 47, "name": "cup"}, {"supercategory": "kitchen", "isthing": 1, "id": 48, "name": "fork"}, {"supercategory": "kitchen", "isthing": 1, "id": 49, "name": "knife"}, {"supercategory": "kitchen", "isthing": 1, "id": 50, "name": "spoon"}, {"supercategory": "kitchen", "isthing": 1, "id": 51, "name": "bowl"}, {"supercategory": "food", "isthing": 1, "id": 52, "name": "banana"}, {"supercategory": "food", "isthing": 1, "id": 53, "name": "apple"}, {"supercategory": "food", "isthing": 1, "id": 54, "name": "sandwich"}, {"supercategory": "food", "isthing": 1, "id": 55, "name": "orange"}, {"supercategory": "food", "isthing": 1, "id": 56, "name": "broccoli"}, {"supercategory": "food", "isthing": 1, "id": 57, "name": "carrot"}, {"supercategory": "food", "isthing": 1, "id": 58, "name": "hot dog"}, {"supercategory": "food", "isthing": 1, "id": 59, "name": "pizza"}, {"supercategory": "food", "isthing": 1, "id": 60, "name": "donut"}, {"supercategory": "food", "isthing": 1, "id": 61, "name": "cake"}, {"supercategory": "furniture", "isthing": 1, "id": 62, "name": "chair"}, {"supercategory": "furniture", "isthing": 1, "id": 63, "name": "couch"}, {"supercategory": "furniture", "isthing": 1, "id": 64, "name": "potted plant"}, {"supercategory": "furniture", "isthing": 1, "id": 65, "name": "bed"}, {"supercategory": "furniture", "isthing": 1, "id": 67, "name": "dining table"}, {"supercategory": "furniture", "isthing": 1, "id": 70, "name": "toilet"}, {"supercategory": "electronic", "isthing": 1, "id": 72, "name": "tv"}, {"supercategory": "electronic", "isthing": 1, "id": 73, "name": "laptop"}, {"supercategory": "electronic", "isthing": 1, "id": 74, "name": "mouse"}, {"supercategory": "electronic", "isthing": 1, "id": 75, "name": "remote"}, {"supercategory": "electronic", "isthing": 1, "id": 76, "name": "keyboard"}, {"supercategory": "electronic", "isthing": 1, "id": 77, "name": "cell phone"}, {"supercategory": "appliance", "isthing": 1, "id": 78, "name": "microwave"}, {"supercategory": "appliance", "isthing": 1, "id": 79, "name": "oven"}, {"supercategory": "appliance", "isthing": 1, "id": 80, "name": "toaster"}, {"supercategory": "appliance", "isthing": 1, "id": 81, "name": "sink"}, {"supercategory": "appliance", "isthing": 1, "id": 82, "name": "refrigerator"}, {"supercategory": "indoor", "isthing": 1, "id": 84, "name": "book"}, {"supercategory": "indoor", "isthing": 1, "id": 85, "name": "clock"}, {"supercategory": "indoor", "isthing": 1, "id": 86, "name": "vase"}, {"supercategory": "indoor", "isthing": 1, "id": 87, "name": "scissors"}, {"supercategory": "indoor", "isthing": 1, "id": 88, "name": "teddy bear"}, {"supercategory": "indoor", "isthing": 1, "id": 89, "name": "hair drier"}, {"supercategory": "indoor", "isthing": 1, "id": 90, "name": "toothbrush"}, {"supercategory": "textile", "isthing": 0, "id": 92, "name": "banner"}, {"supercategory": "textile", "isthing": 0, "id": 93, "name": "blanket"}, {"supercategory": "building", "isthing": 0, "id": 95, "name": "bridge"}, {"supercategory": "raw-material", "isthing": 0, "id": 100, "name": "cardboard"}, {"supercategory": "furniture-stuff", "isthing": 0, "id": 107, "name": "counter"}, {"supercategory": "textile", "isthing": 0, "id": 109, "name": "curtain"}, {"supercategory": "furniture-stuff", "isthing": 0, "id": 112, "name": "door-stuff"}, {"supercategory": "floor", "isthing": 0, "id": 118, "name": "floor-wood"}, {"supercategory": "plant", "isthing": 0, "id": 119, "name": "flower"}, {"supercategory": "food-stuff", "isthing": 0, "id": 122, "name": "fruit"}, {"supercategory": "ground", "isthing": 0, "id": 125, "name": "gravel"}, {"supercategory": "building", "isthing": 0, "id": 128, "name": "house"}, {"supercategory": "furniture-stuff", "isthing": 0, "id": 130, "name": "light"}, {"supercategory": "furniture-stuff", "isthing": 0, "id": 133, "name": "mirror-stuff"}, {"supercategory": "structural", "isthing": 0, "id": 138, "name": "net"}, {"supercategory": "textile", "isthing": 0, "id": 141, "name": "pillow"}, {"supercategory": "ground", "isthing": 0, "id": 144, "name": "platform"}, {"supercategory": "ground", "isthing": 0, "id": 145, "name": "playingfield"}, {"supercategory": "ground", "isthing": 0, "id": 147, "name": "railroad"}, {"supercategory": "water", "isthing": 0, "id": 148, "name": "river"}, {"supercategory": "ground", "isthing": 0, "id": 149, "name": "road"}, {"supercategory": "building", "isthing": 0, "id": 151, "name": "roof"}, {"supercategory": "ground", "isthing": 0, "id": 154, "name": "sand"}, {"supercategory": "water", "isthing": 0, "id": 155, "name": "sea"}, {"supercategory": "furniture-stuff", "isthing": 0, "id": 156, "name": "shelf"}, {"supercategory": "ground", "isthing": 0, "id": 159, "name": "snow"}, {"supercategory": "furniture-stuff", "isthing": 0, "id": 161, "name": "stairs"}, {"supercategory": "building", "isthing": 0, "id": 166, "name": "tent"}, {"supercategory": "textile", "isthing": 0, "id": 168, "name": "towel"}, {"supercategory": "wall", "isthing": 0, "id": 171, "name": "wall-brick"}, {"supercategory": "wall", "isthing": 0, "id": 175, "name": "wall-stone"}, {"supercategory": "wall", "isthing": 0, "id": 176, "name": "wall-tile"}, {"supercategory": "wall", "isthing": 0, "id": 177, "name": "wall-wood"}, {"supercategory": "water", "isthing": 0, "id": 178, "name": "water-other"}, {"supercategory": "window", "isthing": 0, "id": 180, "name": "window-blind"}, {"supercategory": "window", "isthing": 0, "id": 181, "name": "window-other"}, {"supercategory": "plant", "isthing": 0, "id": 184, "name": "tree-merged"}, {"supercategory": "structural", "isthing": 0, "id": 185, "name": "fence-merged"}, {"supercategory": "ceiling", "isthing": 0, "id": 186, "name": "ceiling-merged"}, {"supercategory": "sky", "isthing": 0, "id": 187, "name": "sky-other-merged"}, {"supercategory": "furniture-stuff", "isthing": 0, "id": 188, "name": "cabinet-merged"}, {"supercategory": "furniture-stuff", "isthing": 0, "id": 189, "name": "table-merged"}, {"supercategory": "floor", "isthing": 0, "id": 190, "name": "floor-other-merged"}, {"supercategory": "ground", "isthing": 0, "id": 191, "name": "pavement-merged"}, {"supercategory": "solid", "isthing": 0, "id": 192, "name": "mountain-merged"}, {"supercategory": "plant", "isthing": 0, "id": 193, "name": "grass-merged"}, {"supercategory": "ground", "isthing": 0, "id": 194, "name": "dirt-merged"}, {"supercategory": "raw-material", "isthing": 0, "id": 195, "name": "paper-merged"}, {"supercategory": "food-stuff", "isthing": 0, "id": 196, "name": "food-other-merged"}, {"supercategory": "building", "isthing": 0, "id": 197, "name": "building-other-merged"}, {"supercategory": "solid", "isthing": 0, "id": 198, "name": "rock-merged"}, {"supercategory": "wall", "isthing": 0, "id": 199, "name": "wall-other-merged"}, {"supercategory": "textile", "isthing": 0, "id": 200, "name": "rug-merged"}]} \ No newline at end of file diff --git a/scenic/dataset_lib/coco_dataset/data/panoptic_val2017.zip b/scenic/dataset_lib/coco_dataset/data/panoptic_val2017.zip new file mode 100644 index 0000000000000000000000000000000000000000..7436647d30c0511047c8849cdafc6e7faa36c895 --- /dev/null +++ b/scenic/dataset_lib/coco_dataset/data/panoptic_val2017.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72a79468d15b556d5119dee22b6b82422752ff947dd8138970cde83fcaef40b2 +size 10991 diff --git a/scenic/dataset_lib/coco_dataset/data/panoptic_val2017_unittest.json b/scenic/dataset_lib/coco_dataset/data/panoptic_val2017_unittest.json new file mode 100644 index 0000000000000000000000000000000000000000..64dd548f74ada7bd450e3666d8897b9dfda7995c --- /dev/null +++ b/scenic/dataset_lib/coco_dataset/data/panoptic_val2017_unittest.json @@ -0,0 +1,1208 @@ +{ + "info": { + "description": "COCO 2018 Panoptic Dataset", + "url": "http://cocodataset.org", + "version": "1.0", + "year": 2018, + "contributor": "https://arxiv.org/abs/1801.00868", + "date_created": "2018-06-01 00:00:00.0" + }, + "licenses": [ + { + "url": "http://creativecommons.org/licenses/by-nc-sa/2.0/", + "id": 1, + "name": "Attribution-NonCommercial-ShareAlike License" + }, + { + "url": "http://creativecommons.org/licenses/by-nc/2.0/", + "id": 2, + "name": "Attribution-NonCommercial License" + }, + { + "url": "http://creativecommons.org/licenses/by-nc-nd/2.0/", + "id": 3, + "name": "Attribution-NonCommercial-NoDerivs License" + }, + { + "url": "http://creativecommons.org/licenses/by/2.0/", + "id": 4, + "name": "Attribution License" + }, + { + "url": "http://creativecommons.org/licenses/by-sa/2.0/", + "id": 5, + "name": "Attribution-ShareAlike License" + }, + { + "url": "http://creativecommons.org/licenses/by-nd/2.0/", + "id": 6, + "name": "Attribution-NoDerivs License" + }, + { + "url": "http://flickr.com/commons/usage/", + "id": 7, + "name": "No known copyright restrictions" + }, + { + "url": "http://www.usa.gov/copyright.shtml", + "id": 8, + "name": "United States Government Work" + } + ], + "images": [ + { + "license": 4, + "file_name": "000000397133.jpg", + "coco_url": "http://images.cocodataset.org/val2017/000000397133.jpg", + "height": 427, + "width": 640, + "date_captured": "2013-11-14 17:02:52", + "flickr_url": "http://farm7.staticflickr.com/6116/6255196340_da26cf2c9e_z.jpg", + "id": 397133 + } + ], + "annotations": [ + { + "segments_info": [ + { + "id": 5264729, + "category_id": 1, + "iscrowd": 0, + "bbox": [ + 389, + 70, + 109, + 277 + ], + "area": 17418 + }, + { + "id": 5069172, + "category_id": 1, + "iscrowd": 0, + "bbox": [ + 0, + 263, + 62, + 37 + ], + "area": 1045 + }, + { + "id": 6184554, + "category_id": 44, + "iscrowd": 0, + "bbox": [ + 218, + 241, + 39, + 57 + ], + "area": 1482 + }, + { + "id": 7106418, + "category_id": 47, + "iscrowd": 0, + "bbox": [ + 119, + 273, + 25, + 34 + ], + "area": 416 + }, + { + "id": 4212043, + "category_id": 47, + "iscrowd": 0, + "bbox": [ + 141, + 268, + 33, + 36 + ], + "area": 887 + }, + { + "id": 1582137, + "category_id": 49, + "iscrowd": 0, + "bbox": [ + 136, + 249, + 21, + 29 + ], + "area": 128 + }, + { + "id": 1583422, + "category_id": 50, + "iscrowd": 0, + "bbox": [ + 166, + 256, + 9, + 19 + ], + "area": 101 + }, + { + "id": 3358794, + "category_id": 51, + "iscrowd": 0, + "bbox": [ + 156, + 169, + 26, + 17 + ], + "area": 351 + }, + { + "id": 9808051, + "category_id": 51, + "iscrowd": 0, + "bbox": [ + 31, + 344, + 68, + 41 + ], + "area": 2135 + }, + { + "id": 4152689, + "category_id": 51, + "iscrowd": 0, + "bbox": [ + 60, + 287, + 75, + 42 + ], + "area": 1795 + }, + { + "id": 5200226, + "category_id": 51, + "iscrowd": 0, + "bbox": [ + 157, + 114, + 18, + 16 + ], + "area": 219 + }, + { + "id": 4349026, + "category_id": 56, + "iscrowd": 0, + "bbox": [ + 70, + 296, + 9, + 5 + ], + "area": 24 + }, + { + "id": 1847864, + "category_id": 56, + "iscrowd": 0, + "bbox": [ + 87, + 294, + 23, + 11 + ], + "area": 130 + }, + { + "id": 1782058, + "category_id": 56, + "iscrowd": 0, + "bbox": [ + 99, + 305, + 10, + 5 + ], + "area": 30 + }, + { + "id": 1390975, + "category_id": 57, + "iscrowd": 0, + "bbox": [ + 97, + 297, + 7, + 5 + ], + "area": 25 + }, + { + "id": 4612219, + "category_id": 67, + "iscrowd": 0, + "bbox": [ + 1, + 240, + 347, + 187 + ], + "area": 46120 + }, + { + "id": 263429, + "category_id": 79, + "iscrowd": 0, + "bbox": [ + 0, + 211, + 191, + 99 + ], + "area": 7036 + }, + { + "id": 592654, + "category_id": 79, + "iscrowd": 0, + "bbox": [ + 1, + 164, + 192, + 99 + ], + "area": 10067 + }, + { + "id": 3159353, + "category_id": 81, + "iscrowd": 0, + "bbox": [ + 497, + 203, + 122, + 29 + ], + "area": 2289 + }, + { + "id": 4423074, + "category_id": 130, + "iscrowd": 0, + "bbox": [ + 182, + 0, + 366, + 67 + ], + "area": 2603 + }, + { + "id": 1713717, + "category_id": 175, + "iscrowd": 0, + "bbox": [ + 0, + 127, + 192, + 77 + ], + "area": 5490 + }, + { + "id": 2968142, + "category_id": 184, + "iscrowd": 0, + "bbox": [ + 0, + 0, + 310, + 161 + ], + "area": 12977 + }, + { + "id": 3823996, + "category_id": 188, + "iscrowd": 0, + "bbox": [ + 416, + 219, + 81, + 108 + ], + "area": 3280 + }, + { + "id": 3099756, + "category_id": 189, + "iscrowd": 0, + "bbox": [ + 0, + 240, + 263, + 187 + ], + "area": 256 + }, + { + "id": 2108735, + "category_id": 190, + "iscrowd": 0, + "bbox": [ + 292, + 311, + 348, + 116 + ], + "area": 28614 + }, + { + "id": 1777705, + "category_id": 191, + "iscrowd": 0, + "bbox": [ + 344, + 309, + 46, + 22 + ], + "area": 691 + }, + { + "id": 5665922, + "category_id": 196, + "iscrowd": 0, + "bbox": [ + 0, + 288, + 17, + 64 + ], + "area": 196 + }, + { + "id": 4940924, + "category_id": 199, + "iscrowd": 0, + "bbox": [ + 157, + 0, + 474, + 242 + ], + "area": 43041 + } + ], + "file_name": "000000397133.png", + "image_id": 397133 + } + ], + "categories": [ + { + "supercategory": "person", + "isthing": 1, + "id": 1, + "name": "person" + }, + { + "supercategory": "vehicle", + "isthing": 1, + "id": 2, + "name": "bicycle" + }, + { + "supercategory": "vehicle", + "isthing": 1, + "id": 3, + "name": "car" + }, + { + "supercategory": "vehicle", + "isthing": 1, + "id": 4, + "name": "motorcycle" + }, + { + "supercategory": "vehicle", + "isthing": 1, + "id": 5, + "name": "airplane" + }, + { + "supercategory": "vehicle", + "isthing": 1, + "id": 6, + "name": "bus" + }, + { + "supercategory": "vehicle", + "isthing": 1, + "id": 7, + "name": "train" + }, + { + "supercategory": "vehicle", + "isthing": 1, + "id": 8, + "name": "truck" + }, + { + "supercategory": "vehicle", + "isthing": 1, + "id": 9, + "name": "boat" + }, + { + "supercategory": "outdoor", + "isthing": 1, + "id": 10, + "name": "traffic light" + }, + { + "supercategory": "outdoor", + "isthing": 1, + "id": 11, + "name": "fire hydrant" + }, + { + "supercategory": "outdoor", + "isthing": 1, + "id": 13, + "name": "stop sign" + }, + { + "supercategory": "outdoor", + "isthing": 1, + "id": 14, + "name": "parking meter" + }, + { + "supercategory": "outdoor", + "isthing": 1, + "id": 15, + "name": "bench" + }, + { + "supercategory": "animal", + "isthing": 1, + "id": 16, + "name": "bird" + }, + { + "supercategory": "animal", + "isthing": 1, + "id": 17, + "name": "cat" + }, + { + "supercategory": "animal", + "isthing": 1, + "id": 18, + "name": "dog" + }, + { + "supercategory": "animal", + "isthing": 1, + "id": 19, + "name": "horse" + }, + { + "supercategory": "animal", + "isthing": 1, + "id": 20, + "name": "sheep" + }, + { + "supercategory": "animal", + "isthing": 1, + "id": 21, + "name": "cow" + }, + { + "supercategory": "animal", + "isthing": 1, + "id": 22, + "name": "elephant" + }, + { + "supercategory": "animal", + "isthing": 1, + "id": 23, + "name": "bear" + }, + { + "supercategory": "animal", + "isthing": 1, + "id": 24, + "name": "zebra" + }, + { + "supercategory": "animal", + "isthing": 1, + "id": 25, + "name": "giraffe" + }, + { + "supercategory": "accessory", + "isthing": 1, + "id": 27, + "name": "backpack" + }, + { + "supercategory": "accessory", + "isthing": 1, + "id": 28, + "name": "umbrella" + }, + { + "supercategory": "accessory", + "isthing": 1, + "id": 31, + "name": "handbag" + }, + { + "supercategory": "accessory", + "isthing": 1, + "id": 32, + "name": "tie" + }, + { + "supercategory": "accessory", + "isthing": 1, + "id": 33, + "name": "suitcase" + }, + { + "supercategory": "sports", + "isthing": 1, + "id": 34, + "name": "frisbee" + }, + { + "supercategory": "sports", + "isthing": 1, + "id": 35, + "name": "skis" + }, + { + "supercategory": "sports", + "isthing": 1, + "id": 36, + "name": "snowboard" + }, + { + "supercategory": "sports", + "isthing": 1, + "id": 37, + "name": "sports ball" + }, + { + "supercategory": "sports", + "isthing": 1, + "id": 38, + "name": "kite" + }, + { + "supercategory": "sports", + "isthing": 1, + "id": 39, + "name": "baseball bat" + }, + { + "supercategory": "sports", + "isthing": 1, + "id": 40, + "name": "baseball glove" + }, + { + "supercategory": "sports", + "isthing": 1, + "id": 41, + "name": "skateboard" + }, + { + "supercategory": "sports", + "isthing": 1, + "id": 42, + "name": "surfboard" + }, + { + "supercategory": "sports", + "isthing": 1, + "id": 43, + "name": "tennis racket" + }, + { + "supercategory": "kitchen", + "isthing": 1, + "id": 44, + "name": "bottle" + }, + { + "supercategory": "kitchen", + "isthing": 1, + "id": 46, + "name": "wine glass" + }, + { + "supercategory": "kitchen", + "isthing": 1, + "id": 47, + "name": "cup" + }, + { + "supercategory": "kitchen", + "isthing": 1, + "id": 48, + "name": "fork" + }, + { + "supercategory": "kitchen", + "isthing": 1, + "id": 49, + "name": "knife" + }, + { + "supercategory": "kitchen", + "isthing": 1, + "id": 50, + "name": "spoon" + }, + { + "supercategory": "kitchen", + "isthing": 1, + "id": 51, + "name": "bowl" + }, + { + "supercategory": "food", + "isthing": 1, + "id": 52, + "name": "banana" + }, + { + "supercategory": "food", + "isthing": 1, + "id": 53, + "name": "apple" + }, + { + "supercategory": "food", + "isthing": 1, + "id": 54, + "name": "sandwich" + }, + { + "supercategory": "food", + "isthing": 1, + "id": 55, + "name": "orange" + }, + { + "supercategory": "food", + "isthing": 1, + "id": 56, + "name": "broccoli" + }, + { + "supercategory": "food", + "isthing": 1, + "id": 57, + "name": "carrot" + }, + { + "supercategory": "food", + "isthing": 1, + "id": 58, + "name": "hot dog" + }, + { + "supercategory": "food", + "isthing": 1, + "id": 59, + "name": "pizza" + }, + { + "supercategory": "food", + "isthing": 1, + "id": 60, + "name": "donut" + }, + { + "supercategory": "food", + "isthing": 1, + "id": 61, + "name": "cake" + }, + { + "supercategory": "furniture", + "isthing": 1, + "id": 62, + "name": "chair" + }, + { + "supercategory": "furniture", + "isthing": 1, + "id": 63, + "name": "couch" + }, + { + "supercategory": "furniture", + "isthing": 1, + "id": 64, + "name": "potted plant" + }, + { + "supercategory": "furniture", + "isthing": 1, + "id": 65, + "name": "bed" + }, + { + "supercategory": "furniture", + "isthing": 1, + "id": 67, + "name": "dining table" + }, + { + "supercategory": "furniture", + "isthing": 1, + "id": 70, + "name": "toilet" + }, + { + "supercategory": "electronic", + "isthing": 1, + "id": 72, + "name": "tv" + }, + { + "supercategory": "electronic", + "isthing": 1, + "id": 73, + "name": "laptop" + }, + { + "supercategory": "electronic", + "isthing": 1, + "id": 74, + "name": "mouse" + }, + { + "supercategory": "electronic", + "isthing": 1, + "id": 75, + "name": "remote" + }, + { + "supercategory": "electronic", + "isthing": 1, + "id": 76, + "name": "keyboard" + }, + { + "supercategory": "electronic", + "isthing": 1, + "id": 77, + "name": "cell phone" + }, + { + "supercategory": "appliance", + "isthing": 1, + "id": 78, + "name": "microwave" + }, + { + "supercategory": "appliance", + "isthing": 1, + "id": 79, + "name": "oven" + }, + { + "supercategory": "appliance", + "isthing": 1, + "id": 80, + "name": "toaster" + }, + { + "supercategory": "appliance", + "isthing": 1, + "id": 81, + "name": "sink" + }, + { + "supercategory": "appliance", + "isthing": 1, + "id": 82, + "name": "refrigerator" + }, + { + "supercategory": "indoor", + "isthing": 1, + "id": 84, + "name": "book" + }, + { + "supercategory": "indoor", + "isthing": 1, + "id": 85, + "name": "clock" + }, + { + "supercategory": "indoor", + "isthing": 1, + "id": 86, + "name": "vase" + }, + { + "supercategory": "indoor", + "isthing": 1, + "id": 87, + "name": "scissors" + }, + { + "supercategory": "indoor", + "isthing": 1, + "id": 88, + "name": "teddy bear" + }, + { + "supercategory": "indoor", + "isthing": 1, + "id": 89, + "name": "hair drier" + }, + { + "supercategory": "indoor", + "isthing": 1, + "id": 90, + "name": "toothbrush" + }, + { + "supercategory": "textile", + "isthing": 0, + "id": 92, + "name": "banner" + }, + { + "supercategory": "textile", + "isthing": 0, + "id": 93, + "name": "blanket" + }, + { + "supercategory": "building", + "isthing": 0, + "id": 95, + "name": "bridge" + }, + { + "supercategory": "raw-material", + "isthing": 0, + "id": 100, + "name": "cardboard" + }, + { + "supercategory": "furniture-stuff", + "isthing": 0, + "id": 107, + "name": "counter" + }, + { + "supercategory": "textile", + "isthing": 0, + "id": 109, + "name": "curtain" + }, + { + "supercategory": "furniture-stuff", + "isthing": 0, + "id": 112, + "name": "door-stuff" + }, + { + "supercategory": "floor", + "isthing": 0, + "id": 118, + "name": "floor-wood" + }, + { + "supercategory": "plant", + "isthing": 0, + "id": 119, + "name": "flower" + }, + { + "supercategory": "food-stuff", + "isthing": 0, + "id": 122, + "name": "fruit" + }, + { + "supercategory": "ground", + "isthing": 0, + "id": 125, + "name": "gravel" + }, + { + "supercategory": "building", + "isthing": 0, + "id": 128, + "name": "house" + }, + { + "supercategory": "furniture-stuff", + "isthing": 0, + "id": 130, + "name": "light" + }, + { + "supercategory": "furniture-stuff", + "isthing": 0, + "id": 133, + "name": "mirror-stuff" + }, + { + "supercategory": "structural", + "isthing": 0, + "id": 138, + "name": "net" + }, + { + "supercategory": "textile", + "isthing": 0, + "id": 141, + "name": "pillow" + }, + { + "supercategory": "ground", + "isthing": 0, + "id": 144, + "name": "platform" + }, + { + "supercategory": "ground", + "isthing": 0, + "id": 145, + "name": "playingfield" + }, + { + "supercategory": "ground", + "isthing": 0, + "id": 147, + "name": "railroad" + }, + { + "supercategory": "water", + "isthing": 0, + "id": 148, + "name": "river" + }, + { + "supercategory": "ground", + "isthing": 0, + "id": 149, + "name": "road" + }, + { + "supercategory": "building", + "isthing": 0, + "id": 151, + "name": "roof" + }, + { + "supercategory": "ground", + "isthing": 0, + "id": 154, + "name": "sand" + }, + { + "supercategory": "water", + "isthing": 0, + "id": 155, + "name": "sea" + }, + { + "supercategory": "furniture-stuff", + "isthing": 0, + "id": 156, + "name": "shelf" + }, + { + "supercategory": "ground", + "isthing": 0, + "id": 159, + "name": "snow" + }, + { + "supercategory": "furniture-stuff", + "isthing": 0, + "id": 161, + "name": "stairs" + }, + { + "supercategory": "building", + "isthing": 0, + "id": 166, + "name": "tent" + }, + { + "supercategory": "textile", + "isthing": 0, + "id": 168, + "name": "towel" + }, + { + "supercategory": "wall", + "isthing": 0, + "id": 171, + "name": "wall-brick" + }, + { + "supercategory": "wall", + "isthing": 0, + "id": 175, + "name": "wall-stone" + }, + { + "supercategory": "wall", + "isthing": 0, + "id": 176, + "name": "wall-tile" + }, + { + "supercategory": "wall", + "isthing": 0, + "id": 177, + "name": "wall-wood" + }, + { + "supercategory": "water", + "isthing": 0, + "id": 178, + "name": "water-other" + }, + { + "supercategory": "window", + "isthing": 0, + "id": 180, + "name": "window-blind" + }, + { + "supercategory": "window", + "isthing": 0, + "id": 181, + "name": "window-other" + }, + { + "supercategory": "plant", + "isthing": 0, + "id": 184, + "name": "tree-merged" + }, + { + "supercategory": "structural", + "isthing": 0, + "id": 185, + "name": "fence-merged" + }, + { + "supercategory": "ceiling", + "isthing": 0, + "id": 186, + "name": "ceiling-merged" + }, + { + "supercategory": "sky", + "isthing": 0, + "id": 187, + "name": "sky-other-merged" + }, + { + "supercategory": "furniture-stuff", + "isthing": 0, + "id": 188, + "name": "cabinet-merged" + }, + { + "supercategory": "furniture-stuff", + "isthing": 0, + "id": 189, + "name": "table-merged" + }, + { + "supercategory": "floor", + "isthing": 0, + "id": 190, + "name": "floor-other-merged" + }, + { + "supercategory": "ground", + "isthing": 0, + "id": 191, + "name": "pavement-merged" + }, + { + "supercategory": "solid", + "isthing": 0, + "id": 192, + "name": "mountain-merged" + }, + { + "supercategory": "plant", + "isthing": 0, + "id": 193, + "name": "grass-merged" + }, + { + "supercategory": "ground", + "isthing": 0, + "id": 194, + "name": "dirt-merged" + }, + { + "supercategory": "raw-material", + "isthing": 0, + "id": 195, + "name": "paper-merged" + }, + { + "supercategory": "food-stuff", + "isthing": 0, + "id": 196, + "name": "food-other-merged" + }, + { + "supercategory": "building", + "isthing": 0, + "id": 197, + "name": "building-other-merged" + }, + { + "supercategory": "solid", + "isthing": 0, + "id": 198, + "name": "rock-merged" + }, + { + "supercategory": "wall", + "isthing": 0, + "id": 199, + "name": "wall-other-merged" + }, + { + "supercategory": "textile", + "isthing": 0, + "id": 200, + "name": "rug-merged" + } + ] +} \ No newline at end of file diff --git a/scenic/dataset_lib/coco_dataset/tests/__init__.py b/scenic/dataset_lib/coco_dataset/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/dataset_lib/coco_dataset/tests/test_coco_utils.py b/scenic/dataset_lib/coco_dataset/tests/test_coco_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..44e41ac27a08fcb6816dbfc186c7cf752731f535 --- /dev/null +++ b/scenic/dataset_lib/coco_dataset/tests/test_coco_utils.py @@ -0,0 +1,48 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for functions in coco_utils.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +from scenic.dataset_lib.coco_dataset import coco_utils + + + +class CocoUtilsTest(parameterized.TestCase): + """Test COCO utils.""" + + @parameterized.parameters( + ('coco/2017',), + ('coco/2017_panoptic',), + ('lvis',), + ) + def get_label_map(self, tfds_name): + """Test get_label_map.""" + label_map = coco_utils.get_label_map(tfds_name) + self.assertIs(label_map, dict) + self.assertTrue(all(isinstance(k, int) for k in label_map.keys()), + msg='Not all label map keys are of type int.') + max_label = max(label_map.keys()) + self.assertSequenceEqual(range(max_label), label_map.keys()) + + def test_get_label_map_unknown(self): + """Test get_label_map for unknown TFDS name.""" + with self.assertRaisesWithPredicateMatch( + ValueError, lambda m: m.args == ('Unsupported TFDS name: unknown',)): + coco_utils.get_label_map('unknown') + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/dataset_lib/dataset_utils.py b/scenic/dataset_lib/dataset_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..6a66fd58b14923338345fea4ef692e0f5e59fd45 --- /dev/null +++ b/scenic/dataset_lib/dataset_utils.py @@ -0,0 +1,790 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Common utils for used by different dataset builders. + +Many of these were originally implemented by: Lucas Beyer, Alex Kolesnikov, +Xiaohua Zhai and other collaborators from Brain ZRH. +""" + +import collections +import dataclasses +import functools +import itertools +from typing import Any, Callable, Dict, List, Iterator, Optional, Sequence, Union + +from absl import logging +from flax.training import common_utils +import jax +import jax.numpy as jnp +import numpy as np +import tensorflow as tf +import tensorflow_datasets as tfds + +PyTree = Any +DatasetIterator = Union[Iterator[Any], Dict[str, Iterator[Any]]] +DatasetIteratorProvider = Callable[[], DatasetIterator] +DatasetIteratorType = DatasetIterator | DatasetIteratorProvider +DatasetType = Union[tf.data.Dataset, Dict[str, tf.data.Dataset]] + + +@dataclasses.dataclass(frozen=True) +class Dataset: + """Dataset type. + + Each instance of the Dataset has three iterators, train_iter, valid_iter, + and test_iter, that yield a batch, where each batch is a (nested) dict of + numpy arrays. These iterators are created by normally applying these + functions on TFDS instances: + + - dataset_utils.tf_to_numpy -> convert tensors to numpy arrays. + - dataset_utils.maybe_pad_batch -> pad partial batches and create + batch_mask if needed. + - dataset_utils.shard_batches -> shard batch across devices by reshaping + `[bs, ...]` to `[num_local_devices, bs/(num_local_devices), ...]`. + + Beside these iterators, there is a dictionary that stores the metadata + information about the dataset, that can be used for different purposes. + For instance, these fields are used in most of the datasets: + + 'input_shape': Used during compiling and initializing the model. + 'num_train_examples': Used for computing the number of training steps + and controlling the train_iter. + 'num_eval_examples': Same as num_train_examples, but for valid_iter. + 'num_test_examples': Same as num_train_examples, but for test_iter. + 'target_is_onehot': Used in the loss and metric functions. + + Note that each dataset can define its own meta-data field that is used + in the model and/or the trainer, depending on the task. As an example, for + classification tasks, `num_classes` is used for the configuring head of + the model. + """ + train_iter: DatasetIteratorType | None = None + valid_iter: DatasetIteratorType | None = None + test_iter: DatasetIteratorType | None = None + meta_data: Dict[str, Any] = dataclasses.field(default_factory=dict) + + train_ds: DatasetType | None = None + valid_ds: DatasetType | None = None + test_ds: DatasetType | None = None + + # Multiple dataset support. + train_multi_iter: List[DatasetIteratorType] | None = None + valid_multi_iter: List[DatasetIteratorType] | None = None + test_multi_iter: List[DatasetIteratorType] | None = None + + train_multi_ds: List[DatasetType] | None = None + valid_multi_ds: List[DatasetType] | None = None + test_multi_ds: List[DatasetType] | None = None + + +def maybe_pad_batch(batch: Dict[str, PyTree], + train: bool, + batch_size: int, + pixel_level: bool = False, + inputs_key: str = 'inputs', + batch_dim: int = 0) -> Dict[str, jnp.ndarray]: + """Zero pad the batch on the right to the batch_size. + + All leave tensors in the batch pytree will be padded. This function expects + the root structure of the batch pytree to be a dictionary and returns a + dictionary with the same structure (and substructures), additionally with the + key 'batch_mask' added to the root dict, with 1.0 indicating indices which are + true data and 0.0 indicating a padded index. `batch_mask` will be used for + calculating the weighted cross entropy, or weighted accuracy. + + Note that in this codebase, we assume we drop the last partial batch from the + training set, so if the batch is from the training set (i.e. `train=True`), + or when the batch is from the test/validation set, but it is a complete batch, + we *modify* the batch dict by adding an array of ones as the `batch_mask` of + all examples in the batch. Otherwise, we create a new dict that has the padded + patch and its corresponding `batch_mask` array. + + Note that batch_mask can be also used as the label mask (not input mask), for + task that are pixel/token level. This is simply done by applying the mask we + make for padding the partial batches on top of the existing label mask. + + Args: + batch: A dictionary containing a pytree. If `inputs_key` is not set, we use + the first leave to get the current batch size. Otherwise, the tensor + mapped with `inputs_key` at the root dictionary is used. + train: if the batch is from the training data. In that case, we drop + the last (incomplete) batch and thus don't do any padding. + batch_size: All arrays in the dict will be padded to have first + dimension equal to desired_batch_size. + pixel_level: If True, this will create a pixel-level (instead of + example-level) mask, e.g. for segmentation models. + inputs_key: Indicating the key used for the input that we do batch padding + based on. + batch_dim: Batch dimension. The default is 0, but it can be different + if a sharded batch is given. + + Returns: + A dictionary mapping the same keys to the padded batches. Additionally, we + add a key representing weights, to indicate how the batch was padded. + """ + assert batch_dim >= 0, f'batch_dim=={batch_dim} is expected to be >= 0' + if inputs_key is None: + sample_tensor = jax.tree_util.tree_leaves(batch)[0] + else: + sample_tensor = batch[inputs_key] + if sample_tensor.shape[batch_dim] > batch_size: + raise ValueError( + f'The indicated target batch_size is {batch_size}, but ' + 'the size of the current batch is larger than that: ' + f'{sample_tensor.shape[batch_dim]}.' + ) + batch_pad = batch_size - sample_tensor.shape[batch_dim] + + if pixel_level: + unpadded_mask_shape = sample_tensor.shape[:-1] + else: + assert 'batch_mask' not in batch, ( + 'When the labels of the task are not pixel-level, batch_mask should ' + 'not be already present in the batch.') + unpadded_mask_shape = sample_tensor.shape[:batch_dim + 1] + + if train and batch_pad != 0: + raise ValueError('In this codebase, we assumed that we always drop the ' + 'last partial batch of the train set. Please use ' + '` drop_remainder=True` for the training set.') + # Most batches will not need padding, so we quickly return to avoid slowdown. + if train or batch_pad == 0: + if 'batch_mask' not in batch: + batch['batch_mask'] = np.ones(unpadded_mask_shape, dtype=np.float32) + return batch + + def zero_pad(array): + pad_with = ([(0, 0)] * batch_dim + [(0, batch_pad)] + + [(0, 0)] * (array.ndim - batch_dim - 1)) + return np.pad(array, pad_with, mode='constant') + + padded_batch = jax.tree_util.tree_map(zero_pad, batch) + padded_batch_mask = zero_pad(np.ones(unpadded_mask_shape, dtype=np.float32)) + if 'batch_mask' in padded_batch: + padded_batch['batch_mask'] *= padded_batch_mask + else: + padded_batch['batch_mask'] = padded_batch_mask + return padded_batch + + +def shard(pytree, n_devices=None): + """Reshapes all arrays in the pytree to add a leading n_devices dimension. + + To be used for pmap-based data-parallelism. + + Note: We assume that all arrays in the pytree have leading dimension divisible + by n_devices and reshape (host_batch_size, height, width, channel) to + (local_devices, device_batch_size, height, width, channel). + + Args: + pytree: A pytree of arrays to be sharded. + n_devices: If None, this will be set to jax.local_device_count(). + + Returns: + Sharded data. + """ + if n_devices is None: + n_devices = jax.local_device_count() + + def _shard_array(array): + return array.reshape((n_devices, -1) + array.shape[1:]) + + return jax.tree_util.tree_map(_shard_array, pytree) + + +def shard_jit( + data: PyTree, + global_devices: np.ndarray, + mesh_axis: tuple[str, ...] = ('devices',), +) -> PyTree: + """Shards data for use in jit-based pipelines. + + Note that the order of global devices for sharding data is important and + should be compatible with device order used in the rest of the trainer for + models params, state, etc. + + Based on: + https://github.com/google-research/big_vision/blob/main/big_vision/input_pipeline.py. + + Args: + data: PyTree of data + global_devices: List of global devices to shard over. + mesh_axis: Specifies axis separately. + + Returns: + Sharded data. + """ + + def _shard_array(x): + mesh = jax.sharding.Mesh(global_devices, mesh_axis) + sharding = jax.sharding.NamedSharding( + mesh, jax.sharding.PartitionSpec(mesh_axis) + ) + local_ds = mesh.local_devices + + x = np.asarray(memoryview(x)) # No-copy: http://shortn/_KM5whIEtWI + xs = jax.device_put(np.split(x, len(local_ds), axis=0), local_ds) + + global_shape = (x.shape[0] * jax.process_count(), *x.shape[1:]) + return jax.make_array_from_single_device_arrays(global_shape, sharding, xs) + + return jax.tree_util.tree_map(_shard_array, data) + + +def prefetch_iterator(it, n): + """Prefetches batches from an iterator. + + Runs iterator `it` ahead for `n` steps. + + Adapted from big_vision: + https://github.com/google-research/big_vision/blob/main/big_vision/input_pipeline.py. + + Args: + it: Iterator + n: Number of steps to prefect for. + + Yields: + Original items from the iterator which have been prefetched. + """ + if not n: + yield from it + return + queue = collections.deque() + + def enqueue(n_steps): # Enqueues *up to* `n` elements from the iterator. + for data in itertools.islice(it, n_steps): + queue.append(data) + + enqueue(n) # Fill up the buffer. + while queue: + yield queue.popleft() + enqueue(1) + + +def unshard(pytree): + """Reshapes all arrays in the pytree from [ndev, bs, ...] to [host_bs, ...]. + + Args: + pytree: A pytree of arrays to be sharded. + + Returns: + Sharded data. + """ + + def _unshard_array(array): + ndev, bs = array.shape[:2] + return array.reshape((ndev * bs,) + array.shape[2:]) + + return jax.tree_util.tree_map(_unshard_array, pytree) + + +def tf_to_numpy(batch): + """Convert an input batch from tf Tensors to numpy arrays. + + Args: + batch: dict; A dictionary that has items in a batch: image and labels. + + Returns: + Numpy arrays of the given tf Tensors. + """ + # Use _numpy() for zero-copy conversion between TF and NumPy. + convert_data = lambda x: x._numpy() # pylint: disable=protected-access + return jax.tree_util.tree_map(convert_data, batch) + + +def augment_random_crop_flip(image, + height=None, + width=None, + num_channels=None, + crop_padding=4, + flip=True): + """Augment small image with random crop and h-flip. + + Args: + image: Input image to augment. + height: int; Height of the target image. + width: int; Width of the target image. + num_channels: int; Number of channels of the target image. + crop_padding: int; Random crop range. + flip: bool; If True perform random horizontal flip. + + Returns: + Augmented image. + """ + h, w, c = image.get_shape().as_list() + height = height or h + width = width or w + num_channels = num_channels or c + + assert crop_padding >= 0 + if crop_padding > 0: + # Pad with reflection padding + # (See https://arxiv.org/abs/1605.07146) + # Section 3. + image = tf.pad(image, [[crop_padding, crop_padding], + [crop_padding, crop_padding], [0, 0]], 'REFLECT') + + # Randomly crop a [HEIGHT, WIDTH] section of the image. + image = tf.image.random_crop(image, [height, width, num_channels]) + + if flip: + # Randomly flip the image horizontally. + image = tf.image.random_flip_left_right(image) + + return image + + +def normalize(image, dtype=tf.float32): + """Normalizes the value of pixels in the given image. + + Args: + image: `Tensor` representing an image binary of arbitrary size. + dtype: Tensorflow data type, Data type of the image. + + Returns: + A normalized image `Tensor`. + """ + image = tf.cast(image, dtype=dtype) + if dtype not in [tf.int32, tf.int64, tf.uint32, tf.uint64]: + image /= tf.constant(255.0, shape=[1, 1, 1], dtype=dtype) + return image + + +def load_split_from_tfds(dataset_name, + batch_size, + split, + data_dir=None, + preprocess_example=None, + augment_train_example=None, + postprocess_batch=None, + shuffle_buffer_size=None, + shuffle_seed=0, + cache=True, + **kwargs): + """Loads a split from a dataset using TensorFlow Datasets. + + Args: + dataset_name: str; Name of the dataset to be used to load from tfds. + batch_size: int; The batch size returned by the data pipeline. + split: str; Name of the split to be loaded. + data_dir: str; Data directory. + preprocess_example: function; A function that given an example, returns the + preprocessed example. Note that the preprocessing is done BEFORE caching + to re-use them. + augment_train_example: A function that given a train example returns the + augmented example. Note that this function is applied AFTER caching and + repeat to get true randomness. + postprocess_batch: function; A function that given a batch, returns the + postprocessed batch. + shuffle_buffer_size: int; Size of the tf.data.dataset shuffle buffer. + shuffle_seed: int; Seed for shuffling the training data. + cache: bool; Whether to cache the dataset in memory. + **kwargs: Passed to tfds.builder(). + + Returns: + A `tf.data.Dataset`, and dataset information. + """ + return load_split_from_tfds_builder( + builder=tfds.builder(dataset_name, data_dir=data_dir, **kwargs), + batch_size=batch_size, + split=split, + preprocess_example=preprocess_example, + augment_train_example=augment_train_example, + postprocess_batch=postprocess_batch, + shuffle_buffer_size=shuffle_buffer_size, + shuffle_seed=shuffle_seed, + cache=cache) + + +def load_split_from_tfds_builder(builder, + batch_size, + split, + preprocess_example=None, + augment_train_example=None, + postprocess_batch=None, + shuffle_buffer_size=None, + shuffle_seed=0, + cache=True): + """Loads a split from a dataset using TensorFlow Datasets compatible builder. + + Args: + builder: tfds.core.DatasetBuilder; A TFDS compatible dataset builder. + batch_size: int; The batch size returned by the data pipeline. + split: str; Name of the split to be loaded. + preprocess_example: function; A function that given an example, returns the + preprocessed example. Note that the preprocessing is done BEFORE caching + to re-use them. + augment_train_example: A function that given a train example returns the + augmented example. Note that this function is applied AFTER caching and + repeat to get true randomness. + postprocess_batch: function; A function that given a batch, returns the + postprocessed batch. + shuffle_buffer_size: int; Size of the tf.data.dataset shuffle buffer. + shuffle_seed: int; Seed for shuffling the training data. + cache: bool; Whether to cache dataset in memory. + + Returns: + A `tf.data.Dataset`, and dataset information. + """ + # Prepare map functions. + preprocess_example = preprocess_example or (lambda ex: ex) + augment_train_example = augment_train_example or (lambda ex: ex) + postprocess_batch = postprocess_batch or (lambda ex: ex) + shuffle_buffer_size = shuffle_buffer_size or (8 * batch_size) + + # Download dataset: + builder.download_and_prepare() + + # Each host is responsible for a fixed subset of data. + data_range = tfds.even_splits(split, jax.process_count())[jax.process_index()] + ds = builder.as_dataset(split=data_range, shuffle_files=False) + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + ds = ds.with_options(options) + + # Applying preprocessing before `ds.cache()` to re-use it. + ds = ds.map( + preprocess_example, num_parallel_calls=tf.data.experimental.AUTOTUNE) + # Caching. + if cache: + ds = ds.cache() + + if 'train' in split: + # First repeat then batch. + ds = ds.repeat() + # Augmentation should be done after repeat for true randomness. + ds = ds.map( + augment_train_example, num_parallel_calls=tf.data.experimental.AUTOTUNE) + # Shuffle after augmentation to avoid loading uncropped images into buffer: + ds = ds.shuffle(shuffle_buffer_size, seed=shuffle_seed) + ds = ds.batch(batch_size, drop_remainder=True) + + else: + # First batch then repeat. + ds = ds.batch(batch_size, drop_remainder=False) + ds = ds.repeat() + + ds = ds.map( + postprocess_batch, num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.prefetch(tf.data.experimental.AUTOTUNE) + return ds, builder.info + + +def target_to_one_hot(batch, num_classes): + """Converts the labels to one-hot targets. + + Args: + batch: dict; A batch of data with 'inputs' and 'label'. + num_classes: int; Number of classes. + + Returns: + Batch with one-hot labels. + """ + return { + 'inputs': batch['inputs'], + 'label': common_utils.onehot(batch['label'], num_classes) + } + + +def mixup(batch: Dict['str', jnp.ndarray], + alpha: float = 1.0, + image_format: str = 'NHWC', + input_key: str = 'inputs', + label_key: str = 'label', + rng: Optional[Any] = None) -> Dict['str', jnp.ndarray]: + """Mixes images and labels within a single batch. + + For more details, please see https://arxiv.org/abs/1710.09412. + + This function supports both using `numpy` to do mixup in the input-pipeline + and `jax.numpy` to do mixup within a jitted/pmapped function (e.g. within + a pmapped train step to apply mixup on device patch). + + Results in a batch with: + mixed_images[idx] = weight * images[idx] + (1-weight) * images[-(idx+1)], + where weight is sampled from a beta distribution with parameter alpha. + + Args: + batch: dict; A batch of data with 'inputs' and 'label'. + alpha: float; Used to control the beta distribution that weight is sampled + from. + image_format: string; The format of the input images. + input_key: The key in the `batch` dictionary corresponding to the input + images. Default is `inputs`. + label_key: The key in the `batch` dictionary corresponding to the labels. + Default is `labels`. + rng: JAX rng key. If given, JAX numpy will be used as the backend, and if + None (default value), normal numpy will be used. + + Returns: + Tuple (mixed_images, mixed_labels). + """ + images, labels = batch[input_key], batch[label_key] + if labels.shape[-1] == 1: + raise ValueError('Mixup requires one-hot targets.') + if 'N' not in image_format: + raise ValueError('Mixup requires "N" to be in "image_format".') + + batch_size = labels.shape[0] + + # Set up the numpy backend and prepare mixup weights. + if rng is None: + np_backend = np # Ordinary numpy + weight = np_backend.random.beta(alpha, alpha) + else: + np_backend = jnp # JAX numpy + weight = jax.random.beta(rng, alpha, alpha) + label_weight_shape = np.ones(labels.ndim) + label_weight_shape[image_format.index('N')] = batch_size + weight *= np_backend.ones(label_weight_shape.astype(np_backend.int32)) + + # Mixup labels. + batch[label_key] = weight * labels + (1.0 - weight) * labels[::-1] + + # Mixup inputs. + # Shape calculations use np to avoid device memory fragmentation: + image_weight_shape = np.ones((images.ndim)) + image_weight_shape[image_format.index('N')] = batch_size + weight = np_backend.reshape(weight, + image_weight_shape.astype(np_backend.int32)) + reverse = tuple( + slice(images.shape[i]) if d != 'N' else slice(-1, None, -1) + for i, d in enumerate(image_format)) + batch[input_key] = weight * images + (1.0 - weight) * images[reverse] + + return batch + + +@functools.lru_cache(maxsize=None) +def get_builder(dataset, data_dir): + return tfds.builder(dataset, data_dir=data_dir, try_gcs=True) + + +def get_num_examples(dataset, split, data_dir=None): + """Returns the total number of examples in a dataset split.""" + builder = get_builder(dataset, data_dir) + # Download dataset: + builder.download_and_prepare() + num_examples = builder.info.splits[split].num_examples + remainder = num_examples % jax.process_count() + if remainder: + warning = ( + f'Dropping {remainder} examples for the ' + f'{builder.info.name} dataset, {split} split. ' + 'The reason is that all hosts should have the same number ' + 'of examples in order to guarantee that they stay in sync.' + ) + logging.warning(warning) + + return num_examples + + +def make_skip_decoders(skip_decode, features): + if skip_decode is None: + return None + elif isinstance(skip_decode, list) or isinstance(skip_decode, tuple): + return {f: tfds.decode.SkipDecoding() for f in skip_decode if f in features} + elif isinstance(skip_decode, dict): + return jax.tree_util.tree_map( + lambda _: tfds.decode.SkipDecoding(), skip_decode + ) + else: + raise ValueError( + 'skip_decode should be None, tuple, list, or dict - instead got' + f'{type(skip_decode)} {skip_decode}' + ) + + +def get_dataset_tfds( + dataset: str, + split: str, + shuffle_files: bool = True, + data_dir: Optional[str] = None, + skip_decode: Optional[Union[Sequence[str], Dict[Any, Any]]] = ('image',), +): + """Data provider.""" + builder = get_builder(dataset, data_dir) + split = tfds.even_splits(split, jax.process_count(), drop_remainder=True)[ + jax.process_index() + ] + skip_decoders = make_skip_decoders(skip_decode, builder.info.features) + # Each host is responsible for a fixed subset of data + return builder.as_dataset( + split=split, + shuffle_files=shuffle_files, + read_config=tfds.ReadConfig( + skip_prefetch=True, # We prefetch after pipeline. + try_autocache=False, # We control this, esp. for few-shot. + add_tfds_id=True, + ), + decoders=skip_decoders) + + +def make_pipeline(data, + preprocess_fn, + batch_size, + drop_remainder, + cache='loaded', + repeats=None, + repeat_after_batching=False, + shuffle_buffer_size=None, + prefetch=2, + ignore_errors=False, + dataset_service_address=None): + """Makes an input pipeline for `data`.""" + if cache not in ('loaded', 'batched', False, None): + raise ValueError(f'Unknown cache value {cache}') + + data = _add_tpu_host_options(data) + + if cache == 'loaded': + data = data.cache() + + if not repeat_after_batching: + data = data.repeat(repeats) + + if shuffle_buffer_size is not None: + data = data.shuffle(shuffle_buffer_size) + + data = data.map( + preprocess_fn, num_parallel_calls=tf.data.experimental.AUTOTUNE) + + if ignore_errors: + # Skip broken images. This does not slow things down. + data = data.apply(tf.data.experimental.ignore_errors()) + + data = data.batch(batch_size, drop_remainder=drop_remainder) + + if cache == 'batched': + data = data.cache() + + if repeat_after_batching: + data = data.repeat(repeats) + + if dataset_service_address: + data = distribute(data, dataset_service_address) + + if prefetch == 'autotune': + data = data.prefetch(tf.data.experimental.AUTOTUNE) + elif prefetch: + data = data.prefetch(prefetch) + # And 0 or None mean no prefetching. + + return data + + +def get_data(dataset, + split, + batch_size, + preprocess_fn=lambda x: x, + repeats=None, + shuffle_buffer_size=None, + prefetch=2, + cache='loaded', + repeat_after_batching=False, + drop_remainder=True, + data_dir=None, + ignore_errors=False, + shuffle_files=True, + dataset_service_address=None, + skip_decode=('image',)): + """API kept for backwards compatibility.""" + data = get_dataset_tfds( + dataset=dataset, + split=split, + shuffle_files=shuffle_files, + data_dir=data_dir, + skip_decode=skip_decode, + ) + if 'train' not in split: + dataset_service_address = None + return make_pipeline( + data=data, + preprocess_fn=preprocess_fn, + batch_size=batch_size, + drop_remainder=drop_remainder, + cache=cache, + repeats=repeats, + prefetch=prefetch, + shuffle_buffer_size=shuffle_buffer_size, + repeat_after_batching=repeat_after_batching, + ignore_errors=ignore_errors, + dataset_service_address=dataset_service_address) + + +def inception_crop_with_mask( + image, mask, resize_size=None, area_min=5, area_max=100): + """Applies the same inception-style crop to an image and a mask tensor. + + Inception-style crop is a random image crop (its size and aspect ratio are + random) that was used for training Inception models, see + https://www.cs.unc.edu/~wliu/papers/GoogLeNet.pdf. + + Args: + image: [H, W, C] image tensor. + mask: [H, W, None] mask tensor. H and W must match the image. Will be + resized using tf.image.ResizeMethod.NEAREST_NEIGHBOR. + resize_size: Sequence of 2 ints; Resize image to [height, width] after crop. + area_min: minimal crop area. + area_max: maximal crop area. + + Returns: + Cropped image and mask tensors. + """ + begin, size, _ = tf.image.sample_distorted_bounding_box( + tf.shape(image), tf.zeros([0, 0, 4], tf.float32), + area_range=(area_min / 100, area_max / 100), + min_object_covered=0, # Don't enforce a minimum area. + use_image_if_no_bounding_boxes=True) + + # Process image: + image_cropped = tf.slice(image, begin, size) + image_cropped.set_shape([None, None, image.shape[-1]]) + if resize_size: + image_cropped = tf.image.resize( + image_cropped, resize_size, tf.image.ResizeMethod.BILINEAR) + + # Process mask: + mask_cropped = tf.slice(mask, begin, size) + mask_cropped.set_shape([None, None, mask.shape[-1]]) + if resize_size: + mask_cropped = tf.image.resize( + mask_cropped, resize_size, tf.image.ResizeMethod.NEAREST_NEIGHBOR) + + return image_cropped, mask_cropped + + +def distribute( + dataset: tf.data.Dataset, dataset_service_address: str, + processing_mode: str = 'parallel_epochs') -> tf.data.Dataset: + dataset_id = tf.data.experimental.service.register_dataset( + service=dataset_service_address, + dataset=dataset + ) + logging.info('tfds service: process %d got id %d', + jax.process_index(), dataset_id) + return tf.data.experimental.service.from_dataset_id( + processing_mode=processing_mode, + service=dataset_service_address, + dataset_id=dataset_id, + job_name='scenic_data_pipeline', + element_spec=dataset.element_spec) + + +def _add_tpu_host_options(data): + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + options.threading.max_intra_op_parallelism = 1 + return data.with_options(options) diff --git a/scenic/dataset_lib/datasets.py b/scenic/dataset_lib/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..42087204d01697a3e6932de59b46e876f994e098 --- /dev/null +++ b/scenic/dataset_lib/datasets.py @@ -0,0 +1,144 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for Scenic.""" + +import functools +import importlib +from typing import Callable, List + +from absl import logging +from scenic.dataset_lib import dataset_utils + +# The dict below hardcodes import that define datasets. This is necessary for +# several reasons: +# 1) Datasets are only registered once they are defined (have been imported). +# 2) We don't want the user code (e.g. trainers / projects) to have to import +# the dataset modules. Instead we'd like to do it for them. +# 3) And finally we don't want to import all datasets available to unless if the +# the user code does not need them. +# TODO(b/186631707): This routing table is not a great solution because it +# requires every new dataset to modify this import routing table. Going forward +# we should find a way to avoid that. +_IMPORT_TABLE = { + 'cifar10': 'scenic.dataset_lib.cifar10_dataset', + 'cityscapes': 'scenic.dataset_lib.cityscapes_dataset', + 'imagenet': 'scenic.dataset_lib.imagenet_dataset', + 'fashion_mnist': 'scenic.dataset_lib.fashion_mnist_dataset', + 'mnist': 'scenic.dataset_lib.mnist_dataset', + 'bair': 'scenic.dataset_lib.bair_dataset', + 'oxford_pets': 'scenic.dataset_lib.oxford_pets_dataset', + 'svhn': 'scenic.dataset_lib.svhn_dataset', + 'video_tfrecord_dataset': ( + 'scenic.projects.vivit.data.video_tfrecord_dataset' + ), + 'av_asr_tfrecord_dataset': ( + 'scenic.projects.avatar.datasets.av_asr_tfrecord_dataset' + ), + 'bit': 'scenic.dataset_lib.big_transfer.bit', + 'bert_wikibooks': ( + 'scenic.projects.baselines.bert.datasets.bert_wikibooks_dataset' + ), + 'bert_glue': 'scenic.projects.baselines.bert.datasets.bert_glue_dataset', + 'coco_detr_detection': ( + 'scenic.projects.baselines.detr.input_pipeline_detection' + ), + 'cityscapes_variants': ( + 'scenic.projects.robust_segvit.datasets.cityscapes_variants' + ), + 'robust_segvit_segmentation': ( + 'scenic.projects.robust_segvit.datasets.segmentation_datasets' + ), + 'robust_segvit_variants': ( + 'scenic.projects.robust_segvit.datasets.segmentation_variants' + ), + 'flexio': 'scenic.dataset_lib.flexio.flexio', +} + + +class DatasetRegistry(object): + """Static class for keeping track of available datasets.""" + _REGISTRY = {} + + @classmethod + def add(cls, name: str, builder_fn: Callable[..., dataset_utils.Dataset]): + """Add a dataset to the registry, i.e. register a dataset. + + Args: + name: Dataset name (must be unique). + builder_fn: Function to be called to construct the datasets. Must accept + dataset-specific arguments and return a dataset description. + + Raises: + KeyError: If the provided name is not unique. + """ + if name in cls._REGISTRY: + raise KeyError(f'Dataset with name ({name}) already registered.') + cls._REGISTRY[name] = builder_fn + + @classmethod + def get(cls, name: str) -> Callable[..., dataset_utils.Dataset]: + """Get a dataset from the registry by its name. + + Args: + name: Dataset name. + + Returns: + Dataset builder function that accepts dataset-specific parameters and + returns a dataset description. + + Raises: + KeyError: If the dataset is not found. + """ + if name not in cls._REGISTRY: + if name in _IMPORT_TABLE: + module = _IMPORT_TABLE[name] + importlib.import_module(module) + logging.info( + 'On-demand import of dataset (%s) from module (%s).', name, module) + if name not in cls._REGISTRY: + raise KeyError(f'Imported module ({module}) did not register dataset' + f'({name}). Please check that dataset names match.') + else: + raise KeyError(f'Unknown dataset ({name}). Did you import the dataset ' + f'module explicitly?') + return cls._REGISTRY[name] + + @classmethod + def list(cls) -> List[str]: + """List registered datasets.""" + return list(cls._REGISTRY.keys()) + + +def add_dataset(name: str, *args, **kwargs): + """Decorator for shorthand dataset registdation.""" + def inner(builder_fn: Callable[..., dataset_utils.Dataset] + ) -> Callable[..., dataset_utils.Dataset]: + DatasetRegistry.add(name, functools.partial(builder_fn, *args, **kwargs)) + return builder_fn + return inner + + +def get_dataset(dataset_name: str) -> Callable[..., dataset_utils.Dataset]: + """Maps dataset name to a dataset_builder. + + API kept for compatibility of existing code with the DatasetRegistry. + + Args: + dataset_name: Dataset name. + + Returns: + A dataset builder. + """ + return DatasetRegistry.get(dataset_name) diff --git a/scenic/dataset_lib/fashion_mnist_dataset.py b/scenic/dataset_lib/fashion_mnist_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..53f29f630c5e3fb9e9afae1879a2fa4ffbf64b32 --- /dev/null +++ b/scenic/dataset_lib/fashion_mnist_dataset.py @@ -0,0 +1,126 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the fashion-MNIST dataset.""" + +import functools +from typing import Optional + +from absl import logging +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf + + +def preprocess_example(example, dtype=tf.float32): + """Preprocesses the given image. + + Args: + example: dict; Example that has an 'image' and a 'label'. + dtype: Tensorflow data type; Data type of the image. + + Returns: + A preprocessed image `Tensor`. + """ + image = dataset_utils.normalize(example['image'], dtype) + return {'inputs': image, 'label': example['label']} + + +@datasets.add_dataset('fashion_mnist') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the fashion-MNIST train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + del dataset_configs + dtype = getattr(tf, dtype_str) + + preprocess_ex = functools.partial(preprocess_example, dtype=dtype) + logging.info('Loading train split of the Fashion-MNIST dataset.') + train_ds, train_ds_info = dataset_utils.load_split_from_tfds( + 'fashion_mnist', + batch_size, + split='train', + preprocess_example=preprocess_ex, + shuffle_seed=shuffle_seed) + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + logging.info('Loading test split of the Fashion-MNIST dataset.') + eval_ds, _ = dataset_utils.load_split_from_tfds( + 'fashion_mnist', + eval_batch_size, + split='test', + preprocess_example=preprocess_ex) + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + eval_iter = map(shard_batches, eval_iter) + + input_shape = (-1, 28, 28, 1) + meta_data = { + 'num_classes': + train_ds_info.features['label'].num_classes, + 'input_shape': + input_shape, + 'num_train_examples': + dataset_utils.get_num_examples('fashion_mnist', 'train'), + 'num_eval_examples': + dataset_utils.get_num_examples('fashion_mnist', 'test'), + 'input_dtype': + getattr(jnp, dtype_str), + 'target_is_onehot': + False, + } + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) diff --git a/scenic/dataset_lib/flexio/README.md b/scenic/dataset_lib/flexio/README.md new file mode 100644 index 0000000000000000000000000000000000000000..3b8142b061a0da3f97e4fdcd507076b34395f965 --- /dev/null +++ b/scenic/dataset_lib/flexio/README.md @@ -0,0 +1,16 @@ +# FlexIO + +Flexible IO that supports reading data from multiple sources. + +Contact: agritsenko@google.com dehghani@google.com mjlm@google.com + +# Motivation +Deliver a flexible lightweight research-friendly input pipeline that enables quick hacking and experimentation, and can be used for many projects and tasks. + +# Key requirements / features + * Support common image and video dataset sources + * Support extensible (per-dataset) pre-processing + * Provide a clear overview of the pre-processing ops + * Support fully deterministic pre-processing + * Rely on a well-tested pre-processing op library + * Support dataset mixing (e.g. for co-training on several datasets) diff --git a/scenic/dataset_lib/flexio/flexio.py b/scenic/dataset_lib/flexio/flexio.py new file mode 100644 index 0000000000000000000000000000000000000000..4e579db1a168eb54ffc6f7c34199af2a65ccfa2d --- /dev/null +++ b/scenic/dataset_lib/flexio/flexio.py @@ -0,0 +1,669 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""FlexIO input pipeline.""" + +import functools +from typing import Any, Callable, Dict, Iterable, Mapping, Optional, Sequence, Tuple, Union + +from absl import logging +from clu import deterministic_data +from clu import preprocess_spec +import grain.tensorflow as grain +import jax +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf +import tensorflow_datasets as tfds + + + +# Default source of pp ops. +DEFAULT_PP_LIBS = [] + +Features = preprocess_spec.Features +TfFeature = Union[tf.io.FixedLenFeature, tf.io.VarLenFeature, + tf.io.FixedLenSequenceFeature] + +# From grain/_src/core/constants.py +GRAIN_META_DATA = [ + '_index', '_record_key', '_dataset_index', '_epoch', '_record', 'mids', 'id' +] + + +def _get_feature(feature_type: str, shape=(), dtype='string') -> TfFeature: + dtype = tf.dtypes.as_dtype(dtype) + if feature_type == 'FixedLen': + return tf.io.FixedLenFeature(shape=shape, dtype=dtype) + if feature_type == 'VarLen': + return tf.io.VarLenFeature(dtype=dtype) + elif feature_type == 'FixedLenSequence': + return tf.io.FixedLenSequenceFeature(shape=shape, dtype=dtype) + raise NotImplementedError(f'Feature type {feature_type} not available yet.') + + +def tf2jax_dtype(dtype: tf.dtypes.DType) -> Union[jnp.dtype, tf.dtypes.DType]: + """Convert TF dtype to JAX.""" + conv = { + tf.int8: jnp.int8, + tf.int16: jnp.int16, + tf.int32: jnp.int32, + tf.int64: jnp.int64, + tf.uint8: jnp.uint8, + tf.uint16: jnp.uint16, + tf.uint32: jnp.uint32, + tf.uint64: jnp.uint64, + tf.float16: jnp.float16, + tf.float32: jnp.float32, + tf.float64: jnp.float64, + tf.bfloat16: jnp.bfloat16, + tf.bool: jnp.bool_ + } + return conv.get(dtype) or dtype + + + + +def apply_process_fn_with_populated_seed(ds: tf.data.Dataset, + preprocess_fn: Callable[[Features], + Features], *, + rng: jnp.ndarray) -> tf.data.Dataset: + """Maps `ds` using the preprocess_fn and a deterministic RNG per example. + + Args: + ds: Dataset containing Python dictionary with the features. The 'rng' + feature should not exist. + preprocess_fn: Preprocessing function that takes a Python dictionary of + tensors and returns a Python dictionary of tensors. The function should be + convertible into a TF graph. + rng: Base RNG to use. Per example RNGs will be derived from this by folding + in the example index. + + Returns: + The dataset mapped by the `preprocess_fn`. + """ + + def _fn(example_index: int, features: Features) -> Features: + example_index = tf.cast(example_index, tf.int64) + if preprocess_spec.SEED_KEY in features: + logging.warning(('Seed key (%s) already exists in the feature dict -> ' + '*not* overwriting'), preprocess_spec.SEED_KEY) + else: + features[ + preprocess_spec.SEED_KEY] = tf.random.experimental.stateless_fold_in( + tf.cast(rng, tf.int64), example_index) + processed = preprocess_fn(features) # Note: we keep the RNG in the dict. + return processed + + return ds.enumerate().map(_fn, num_parallel_calls=tf.data.AUTOTUNE) + + +def get_number_of_examples(config: ml_collections.ConfigDict) -> int: + """Obtain the number of examples in a thin DMVR or TFDS dataset.""" + if hasattr(config, 'num_examples'): + return config.num_examples + + + if config.source in ['tfds', 'grain']: + data_dir = config.get('data_dir', None) + return dataset_utils.get_num_examples( + config.tfds_name, config.split, data_dir=data_dir) + raise ValueError(f'Unknown data source: {config.source}') + + +def get_process_fn(spec: str, + pp_libs: Sequence[str]) -> preprocess_spec.PreprocessFn: + """Constructs the preprocess_fn that should be applied on the data. + + Args: + spec: Config string specifying the preprocessing. + pp_libs: List of libraries to collect pp ops from. + + Returns: + PreprocessFns for pre-processing. + """ + all_ops = sum(map(preprocess_spec.get_all_ops, pp_libs), []) + preprocess_fn = preprocess_spec.parse(spec, all_ops, only_jax_types=False) + return preprocess_fn + + +def _get_single_tfds_dataset( + builder: tfds.core.DatasetBuilder, + split: str, + batch_size: Optional[int], + preprocess_fn: Optional[preprocess_spec.PreprocessFn] = None, + postprocess_fn: Optional[preprocess_spec.PreprocessFn] = None, + rng: Union[None, jnp.ndarray, tf.Tensor] = None, + global_rng: Union[None, jnp.ndarray, tf.Tensor] = None, + shuffle: bool = False, + shuffle_buffer_size: int = 1000, + cache: bool = False, + skip_decoders: Sequence[str] | None = None, + repeat_dataset: bool = True, +) -> tf.data.Dataset: + """Creates dataset from builder and applies preprocessing. + + Args: + builder: TFDS dataset builder. + split: Train/test/validation split. + batch_size: Batch size. + preprocess_fn: Preprocess function with pre-caching ops. + postprocess_fn: Postprocess function executed *after* batching. + rng: Random seed. + global_rng: Global random seed (same across hosts). + shuffle: Whether to shuffle. + shuffle_buffer_size: Shuffle buffer size. + cache: Whether to cache the dataset. + skip_decoders: Pass decoders to skip to create_dataset (mainly for image). + repeat_dataset: If True, the dataset is repeated indefinitely. + + Returns: + tf.data.Dataset with preprocessing applied. + """ + + host_split = deterministic_data.get_read_instruction_for_host( + split, + dataset_info=builder.info, + remainder_options=deterministic_data.RemainderOptions.DROP, + ) + ds = deterministic_data.create_dataset( + builder, + split=host_split, + preprocess_fn=None, + cache=cache, + batch_dims=(), + rng=global_rng, + num_epochs=1, # None = repeat forever. + shuffle=False, + pad_up_to_batches=None, + decoders={d: tfds.decode.SkipDecoding() for d in skip_decoders or []}, + ) + if cache: + ds = ds.cache() + if repeat_dataset: + ds = ds.repeat() # Repeat indefinitly. + if shuffle: + ds = ds.shuffle(shuffle_buffer_size, seed=rng[0]) + if preprocess_fn is not None: + if rng is not None: + ds = apply_process_fn_with_populated_seed(ds, preprocess_fn, rng=rng) + else: + ds = ds.map(preprocess_fn, num_parallel_calls=tf.data.AUTOTUNE) + if batch_size: + ds = ds.batch( + batch_size, + drop_remainder=True, + num_parallel_calls=tf.data.AUTOTUNE, + deterministic=True) + if postprocess_fn is not None: + if rng is not None: + ds = apply_process_fn_with_populated_seed(ds, postprocess_fn, rng=rng) + else: + ds = ds.map(postprocess_fn, num_parallel_calls=tf.data.AUTOTUNE) + + return ds + + +def _get_single_grain_dataset( + builder: tfds.core.DatasetBuilder, + start_index: int, + split: str, + batch_size: Optional[int], + grain_configs: Optional[Dict[str, Any]] = None, + preprocess_fn: Optional[preprocess_spec.PreprocessFn] = None, + postprocess_fn: Optional[preprocess_spec.PreprocessFn] = None, + rng: Union[None, jnp.ndarray, tf.Tensor] = None, + global_rng: Union[None, jnp.ndarray, tf.Tensor] = None, + shuffle: bool = False, + cache: bool = False, + repeat_dataset: bool = True, +) -> tf.data.Dataset: + """Creates a Grain-backed dataset from builder and applies preprocessing. + + Args: + builder: TFDS dataset builder. + start_index: Index dataset (Grain) start index. + split: Train/test/validation split. + batch_size: Batch size. + grain_configs: To handle Grain config options. + preprocess_fn: Preprocess function with pre-caching ops. + postprocess_fn: Postprocess function executed *after* batching. + rng: Random seed. + global_rng: Global random seed (same across hosts). + shuffle: Whether to shuffle. + cache: Whether to cache the dataset. + repeat_dataset: If True, the dataset is repeated indefinitely. + + Returns: + tf.data.Dataset with preprocessing applied. + """ + + if rng is not None: + raise ValueError( + 'For Grain-backed datasets `global_rng` controls per-example seeds.') + if cache: + raise ValueError('Grain datasets are created as inifinitly repeating and ' + 'cannot be cached.') + + # TODO(dehghani): These settings are *not* per-dataset but rather global + # grain flags. This will be problematic if we have more than one Grain-backed + # source but wishing different setting for them. Find a way for setting + # these in a better way. + grain_configs = grain_configs or {} + for config_k, config_v in grain_configs.items(): + grain.config.update(config_k, config_v) + + ds = grain.load_from_tfds( + tfds_info=builder.info, + split=split, + num_epochs=None if repeat_dataset else 1, # None = repeat forever. + shuffle=shuffle, + seed=global_rng, + shard_options=grain.ShardByJaxProcess(drop_remainder=True), + transformations=preprocess_fn or (), + batch_size=batch_size).as_dataset(start_index=start_index) + + if postprocess_fn is not None: + ds = ds.map(postprocess_fn, num_parallel_calls=tf.data.AUTOTUNE) + + return ds + + + + + + +def _build_pipeline( + split: str, + start_step: Optional[int], + dataset_configs: ml_collections.ConfigDict, + batch_size: Optional[int], + num_local_shards: int, + rng: Union[None, jnp.ndarray, tf.Tensor] = None, + global_rng: Union[None, jnp.ndarray, tf.Tensor] = None, + shuffle: bool = False +) -> Optional[Union[tf.data.Dataset, Dict[str, tf.data.Dataset]]]: + """Build a tf.data.Dataset pipeline using clu.deterministic_data or DMVR. + + Args: + split: The split to be used. + start_step: Start step for GRAIN-backed datasets. + dataset_configs: Dataset configurations. + batch_size: Total batch size (sum for all devices). + num_local_shards: Number of local shards (usually num local devices). + rng: Per-host random seed (JAX format). + global_rng: Global random seed (JAX format). + shuffle: Whether to shuffle. + + Returns: + tf.data.Dataset after preprocessing, merging, mosaicing, and batching. + """ + # Pre-processing libs: + pp_libs = dataset_configs.get('pp_libs', DEFAULT_PP_LIBS) + process_fn = functools.partial(get_process_fn, pp_libs=pp_libs) + + if split not in dataset_configs: + return None + + mode_config = dataset_configs.get(split) + config = ml_collections.ConfigDict({**dataset_configs, **mode_config}) + + if len(config.sources) > 1: + merge_sources = config.merge_sources + else: + merge_sources = True + + any_grain = any([src.source == 'grain' for src in config.sources]) + if any_grain: + if len(config.sources) > 1 and merge_sources: + raise NotImplementedError( + 'Mixing of GRAIN-backed datasets is not yet ' + 'implemented in FlexIO, but can be accomplished ' + 'via `TfMixtureIndexSampler` and ' + '`TfMixtureDataLoader`.') + if start_step is None: + raise ValueError( + 'For GRAIN-backed datasets you need to provide a ' + '`start_step` to `get_dataset`.' + ) + elif start_step is not None: + logging.warning('Start step (%s) provided for non-GRAIN dataset.', + start_step) + + sources, weights = {}, {} + for src_id, src in enumerate(config.sources): + src_name = src.get('name', f'src_{src_id}') + if rng is not None: + rng, ds_rng = jax.random.split(rng) + else: + ds_rng = None + + if src.source == 'tfds': + builder = tfds.builder(src.tfds_name, data_dir=src.get('data_dir')) + ds = _get_single_tfds_dataset( + builder, + src.split, + batch_size=src.get('batch_size'), + preprocess_fn=process_fn(src.get('preproc_spec') or ''), + postprocess_fn=process_fn(src.get('postproc_spec') or ''), + rng=ds_rng, + global_rng=global_rng, + shuffle=shuffle, + shuffle_buffer_size=src.shuffle_buffer_size, + cache=src.get('cache', False), + skip_decoders=src.get('skip_decoders'), + repeat_dataset=src.get('repeat_dataset', True), + ) + elif src.source == 'grain': + if src.get('shuffle_buffer_size') is not None: + raise ValueError('GRAIN-backed datasets always use a global shuffle.') + if batch_size is not None: + global_batch_size = batch_size * jax.process_count() + else: + global_batch_size = jax.process_count() + # TODO(dehghani): Calculating `start_index` based on step like this + # works only if there is no filtering or example packing. Switch to + # grain checkpointing when it's mature. + start_index = int(start_step * global_batch_size + jax.process_index()) + builder = tfds.builder(src.tfds_name, data_dir=src.get('data_dir')) + ds = _get_single_grain_dataset( + builder, + start_index, + src.split, + batch_size=src.get('batch_size'), + grain_configs=src.get('grain_configs'), + preprocess_fn=process_fn(src.get('preproc_spec') or ''), + postprocess_fn=process_fn(src.get('postproc_spec') or ''), + rng=None, + global_rng=global_rng, + shuffle=shuffle, + repeat_dataset=src.get('repeat_dataset', True), + ) + if src.get('drop_grain_meta_features', True): + + def _drop_grain_meta_features( + features: Mapping[str, Any]) -> Mapping[str, Any]: + """Returns the features with any Grain meta features.""" + result = {} + for k, v in features.items(): + if k not in GRAIN_META_DATA: + result[k] = v + return result + + ds = ds.map( + _drop_grain_meta_features, num_parallel_calls=tf.data.AUTOTUNE) + else: + raise ValueError(f'Unknown dataset source: {src.source}') + sources[src_name] = ds + if merge_sources: + weights[src_name] = src.get('weight', 1.0) + else: + if src.get('weight'): + raise ValueError( + 'Per source `weight` should not be provided unless you are merging ' + 'datasets (i.e., merge_sources=True).') + + def _batch_and_prefetch(ds, batch_size): + if batch_size is None: + return ds + + # Batch to the desired output batch size: + if batch_size % num_local_shards != 0: + raise ValueError( + f'Local (host) batch size of {batch_size} is not divisible' + f'to num_local_shard={num_local_shards}.') + batch_dims = [num_local_shards, batch_size // num_local_shards] + for batch_size in reversed(batch_dims): + if dataset_configs.get('padded_batch'): + ds = ds.padded_batch(batch_size, drop_remainder=True) + else: + ds = ds.batch( + batch_size, + drop_remainder=True, + num_parallel_calls=tf.data.AUTOTUNE, + deterministic=True, + ) + + # Having prefetch as the last transformation will prevent automatic + # injection of prefetch(AUTOTUNE). + ds = ds.prefetch(2) + + # Configure parallelism. + # TODO(agritsenko, josipd): make these settings configurable as the defaults + # may leads to OOM. + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + options.threading.max_intra_op_parallelism = 1 + return ds.with_options(options) + + if merge_sources: + ds_sources = list(sources.values()) + if len(ds_sources) > 1: + ds_weights = list(weights.values()) + # Normalize sampling weights. + sum_weights = sum(ds_weights) + ds_weights = [w / sum_weights for w in ds_weights] + ds = tf.data.Dataset.sample_from_datasets( + ds_sources, ds_weights, seed=rng[0] if rng is not None else None) + else: + ds = ds_sources[0] + + # Map with shared pp spec, only possible if we are merging the sources: + def _apply_global_processing( + ds_pp: tf.data.Dataset, pp_str: str) -> tf.data.Dataset: + if rng is not None: + return apply_process_fn_with_populated_seed( + ds_pp, process_fn(pp_str), rng=rng) + else: + return ds_pp.map( + process_fn(pp_str), + num_parallel_calls=tf.data.AUTOTUNE) + + ds = _apply_global_processing(ds, config.get('preproc_spec') or '') + ds = _batch_and_prefetch(ds, batch_size) + return _apply_global_processing(ds, config.get('postproc_spec') or '') + + else: + for ds_name, ds in sources.items(): + # TODO(dehghani): Add support for have different batch_sizes for + # different sources. + sources[ds_name] = _batch_and_prefetch(ds, batch_size) + return sources + + +def get_iterator( + ds: Union[tf.data.Dataset, Dict[str, tf.data.Dataset]], + configs=ml_collections.ConfigDict, + *, + return_iterator: bool = False +) -> Tuple[Union[Iterable[Any] | None, Dict[str, Iterable[Any] | None]], Union[ + Tuple[Any, ...], Dict[str, Tuple[Any, ...]]], Union[int, Dict[str, int]]]: + """Given a (dict of) Dataset object(s), returns iterators and metadata. + + Args: + ds: A tf.data.Dataset instance or a dictionary of TFDS instances. + configs: A Config dict. + return_iterator: If False, the function returns a None instead of an + iterator. + + Returns: + Iterators, input specification and num_examples. + """ + + def _get_input_spec(ds): + return jax.tree_util.tree_map( + # Remove host dimension from the shapes. + lambda x: (tuple(x.shape.as_list()[1:]), tf2jax_dtype(x.dtype)), + ds.element_spec) + + if ds is not None: + total_examples = {} + for src_id, src in enumerate(configs.sources): + total_examples[src.get('name', + f'src_{src_id}')] = get_number_of_examples(src) + if isinstance(ds, dict): + ds_iter, input_spec = {}, {} + for dataset_name, dataset in ds.items(): + if not return_iterator: + ds_iter[dataset_name] = None + else: + ds_it = iter(dataset) + ds_iter[dataset_name] = map(dataset_utils.tf_to_numpy, ds_it) + input_spec[dataset_name] = _get_input_spec(dataset) + # TODO(dehghani): Add support for having different input specs. + first_input_spec = list(input_spec.values())[0] + for in_spec in input_spec.values(): + assert in_spec == first_input_spec, ( + 'For now, input specs for all sources should be the same.') + input_spec = first_input_spec + else: + # Either a single dataset, or we merged them into a single dataset. + if not return_iterator: + ds_iter = None + else: + ds_it = iter(ds) + ds_iter = map(dataset_utils.tf_to_numpy, ds_it) + total_examples = sum(list(total_examples.values())) + input_spec = _get_input_spec(ds) + else: + ds_iter = None + input_spec = None + total_examples = -1 + + return ds_iter, input_spec, total_examples + + +@datasets.add_dataset('flexio') +def get_dataset( + *, + batch_size: Optional[int], + eval_batch_size: Optional[int], + num_shards: int, + rng: Union[None, jnp.ndarray, tf.Tensor], + dataset_configs: ml_collections.ConfigDict, + start_step: Optional[int] = None, + dtype_str: str = 'float32', + shuffle_seed: int = 0, + dataset_service_address: Optional[str] = None) -> dataset_utils.Dataset: + """Returns generators for video datasets. + + Args: + batch_size: Determines the train batch size. + eval_batch_size: Determines the evaluation batch size. + num_shards: Number of local shards (usually num local devices). + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: Dataset configurations. + start_step: Current step, used for deterministic input pipeline backed by + GRAIN. + dtype_str: Data type of the image. Only 'float32' is currently supported. + shuffle_seed: Unsupported; use rng instead. + dataset_service_address: Unsupported; must be None. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + + if rng is None: + raise NotImplementedError('This dataset requires a JAX RNG.') + if shuffle_seed: + raise NotImplementedError( + 'This dataset requires a JAX RNG, do not use shuffle_seed.') + if dataset_service_address: + raise ValueError('FlexIO pipeline does not support data service.') + if dtype_str != 'float32': + raise ValueError(f'Unsupported dtype_str: {dtype_str}') + + # Delete unused arguments (see docstring): + del shuffle_seed + + # Ensure a different key on each worker: + global_rng = rng + rng = jax.random.fold_in(rng, jax.process_index()) + + # Training dataset: + rng, train_rng = jax.random.split(rng) + train_ds = _build_pipeline( + split='train', + start_step=start_step, + dataset_configs=dataset_configs, + batch_size=batch_size, + num_local_shards=num_shards, + rng=train_rng, + global_rng=global_rng, + shuffle=True) + + # Evaluation dataset: + rng, eval_rng = jax.random.split(rng) + eval_ds = _build_pipeline( + split='eval', + start_step=0, + dataset_configs=dataset_configs, + batch_size=eval_batch_size, + num_local_shards=num_shards, + global_rng=global_rng, + rng=eval_rng) + + return_iterators = dataset_configs.get('return_iterators', True) + train_iter, train_input_spec, total_train_examples = get_iterator( + train_ds, + dataset_configs.get('train'), + return_iterator=return_iterators) + eval_iter, eval_input_spec, total_eval_examples = get_iterator( + eval_ds, + dataset_configs.get('eval'), + return_iterator=return_iterators) + + # Testing dataset: + rng, test_rng = jax.random.split(rng) + test_ds = _build_pipeline( + split='test', + start_step=0, + dataset_configs=dataset_configs, + batch_size=eval_batch_size, + num_local_shards=num_shards, + global_rng=global_rng, + rng=test_rng) + + test_iter, test_input_spec, total_test_examples = get_iterator( + test_ds, + dataset_configs.get('test'), + return_iterator=return_iterators) + + # Collect dataset metadata. + meta_data = { + 'num_train_examples': total_train_examples, + 'num_eval_examples': total_eval_examples, + 'num_test_examples': total_test_examples, + } + + if train_ds is not None: + meta_data['input_spec'] = train_input_spec + if eval_ds is not None: + meta_data['eval_input_spec'] = eval_input_spec + if test_ds is not None: + meta_data['test_input_spec'] = test_input_spec + + # Update metadata if any extra was provided via config. + meta_data.update(dataset_configs.get('extra_meta_data', {})) + dataset = {'train_iter': train_iter, 'valid_iter': eval_iter, + 'test_iter': test_iter, 'meta_data': meta_data} + return_datasets = dataset_configs.get('return_datasets', False) + if return_datasets: + dataset.update( + {'train_ds': train_ds, 'valid_ds': eval_ds, 'test_ds': test_ds}) + logging.info('Dataset metadata: %s', dataset['meta_data']) + return dataset_utils.Dataset(**dataset) diff --git a/scenic/dataset_lib/flexio/tests/flexio_test.py b/scenic/dataset_lib/flexio/tests/flexio_test.py new file mode 100644 index 0000000000000000000000000000000000000000..33a0e4137b64ce84ba95cb0939b662d760864a4a --- /dev/null +++ b/scenic/dataset_lib/flexio/tests/flexio_test.py @@ -0,0 +1,97 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for FlexIO input pipeline.""" + +from absl.testing import absltest +from absl.testing import parameterized +from grand_vision.preprocessing import image_ops +from grand_vision.preprocessing import modalities +import jax +import ml_collections +from scenic.dataset_lib.flexio import flexio +import tensorflow as tf + + +D = ml_collections.ConfigDict + + +class InputPipelineTest(tf.test.TestCase, parameterized.TestCase): + """Test cases for FlexIO input pipeline.""" + + @parameterized.named_parameters( + ('coco_coco', 'coco', 'coco'), + ) + def test_tfds_datasets(self, train_tfds_name, eval_tfds_name): + """Test TFDS dataset loading.""" + dataset_configs = D({ + 'train': { + 'sources': [D({ + 'source': 'tfds', + 'tfds_name': train_tfds_name, + 'split': 'train', + 'shuffle_buffer_size': 2, + 'cache': False, + 'preproc_spec': 'decode_coco_example|crop_or_pad(64, 16)', + })], + 'preproc_spec': 'crop_or_pad_meta_data(16, 16)', + }, + 'eval': { + 'sources': [D({ + 'source': 'tfds', + 'tfds_name': eval_tfds_name, + 'split': 'validation', + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': 'decode_coco_example', + })], + 'preproc_spec': ('central_crop(64)' + '|crop_or_pad(64, 16)' + '|crop_or_pad_meta_data(16, 16)'), + }, + 'pp_libs': [ # We override the default ops. + 'grand_vision.preprocessing.image_ops'] + }) + rng = jax.random.PRNGKey(0) + num_devices = jax.local_device_count() + ds = flexio.get_dataset( + batch_size=8, + eval_batch_size=8, + num_shards=num_devices, + rng=rng, + dataset_configs=dataset_configs) + per_device = 8 // num_devices + prefix_shape = (num_devices, per_device) + expected_shapes = { + modalities.ANNOTATION_ID: prefix_shape + (16,), + modalities.AREA: prefix_shape + (16,), + modalities.BOXES: prefix_shape + (16, 4), + modalities.CROWD: prefix_shape + (16,), + modalities.IMAGE: prefix_shape + (64, 64, 3), + modalities.IMAGE_ID: prefix_shape, + modalities.IMAGE_PADDING_MASK: prefix_shape + (64, 64), + modalities.INSTANCE_LABELS: prefix_shape + (16,), + modalities.ORIGINAL_SIZE: prefix_shape + (2,), + image_ops.SEED_KEY: prefix_shape + (2,) + } + train_data = next(ds.train_iter) + valid_data = next(ds.valid_iter) + self.assertDictEqual( + jax.tree_util.tree_map(lambda x: x.shape, train_data), expected_shapes) + self.assertDictEqual( + jax.tree_util.tree_map(lambda x: x.shape, valid_data), expected_shapes) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/dataset_lib/imagenet_dataset.py b/scenic/dataset_lib/imagenet_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..63dc24f9a772c3be961a1059deec7708699d457a --- /dev/null +++ b/scenic/dataset_lib/imagenet_dataset.py @@ -0,0 +1,376 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the ImageNet dataset.""" + +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf +import tensorflow_datasets as tfds + +TRAIN_IMAGES = 1281167 +EVAL_IMAGES = 50000 +NUM_CLASSES = 1000 + +IMAGE_SIZE = 224 +CROP_PADDING = 32 +MEAN_RGB = [0.485 * 255, 0.456 * 255, 0.406 * 255] +STDDEV_RGB = [0.229 * 255, 0.224 * 255, 0.225 * 255] + + +def distorted_bounding_box_crop(image_bytes, + bbox, + min_object_covered=0.1, + aspect_ratio_range=(0.75, 1.33), + area_range=(0.05, 1.0), + max_attempts=100): + """Generates cropped_image using one of the bboxes randomly distorted. + + See `tf.image.sample_distorted_bounding_box` for more documentation. + + Args: + image_bytes: TF tensor; Binary image data. + bbox: `Tensor; Bounding boxes arranged `[1, num_boxes, coords]` where each + coordinate is [0, 1) and the coordinates are arranged as `[ymin, xmin, + ymax, xmax]`. If num_boxes is 0 then use the whole image. + min_object_covered: float; Defaults to `0.1`. The cropped area of the image + must contain at least this fraction of any bounding box supplied. + aspect_ratio_range: list[float]; The cropped area of the image must have an + aspect ratio = width / height within this range. + area_range: list[float]; The cropped area of the image must contain a + fraction of the supplied image within in this range. + max_attempts: int; Number of attempts at generating a cropped region of the + image of the specified constraints. After `max_attempts` failures, return + the entire image. + + Returns: + Cropped image TF Tensor. + """ + shape = tf.image.extract_jpeg_shape(image_bytes) + sample_distorted_bounding_box = tf.image.sample_distorted_bounding_box( + shape, + bounding_boxes=bbox, + min_object_covered=min_object_covered, + aspect_ratio_range=aspect_ratio_range, + area_range=area_range, + max_attempts=max_attempts, + use_image_if_no_bounding_boxes=True) + bbox_begin, bbox_size, _ = sample_distorted_bounding_box + + # Crop the image to the specified bounding box. + offset_y, offset_x, _ = tf.unstack(bbox_begin) + target_height, target_width, _ = tf.unstack(bbox_size) + crop_window = tf.stack([offset_y, offset_x, target_height, target_width]) + image = tf.image.decode_and_crop_jpeg(image_bytes, crop_window, channels=3) + + return image + + +def _resize(image, image_size): + """Resizes the image. + + Args: + image: Tensor; Input image. + image_size: int; Image size. + + Returns: + Resized image. + """ + return tf.image.resize([image], [image_size, image_size], + method=tf.image.ResizeMethod.BICUBIC)[0] + + +def _at_least_x_are_equal(a, b, x): + """At least `x` of `a` and `b` `Tensors` are equal.""" + match = tf.equal(a, b) + match = tf.cast(match, tf.int32) + return tf.greater_equal(tf.reduce_sum(match), x) + + +def _decode_and_random_crop(image_bytes, image_size): + """Make a random crop of `image_size`.""" + bbox = tf.constant([0.0, 0.0, 1.0, 1.0], dtype=tf.float32, shape=[1, 1, 4]) + image = distorted_bounding_box_crop( + image_bytes, + bbox, + min_object_covered=0.1, + aspect_ratio_range=(3. / 4, 4. / 3.), + area_range=(0.08, 1.0), + max_attempts=10) + original_shape = tf.image.extract_jpeg_shape(image_bytes) + bad = _at_least_x_are_equal(original_shape, tf.shape(image), 3) + + image = tf.cond(bad, lambda: _decode_and_center_crop(image_bytes, image_size), + lambda: _resize(image, image_size)) + + return image + + +def _decode_and_center_crop(image_bytes, image_size): + """Crops to center of image with padding then scales `image_size`.""" + shape = tf.image.extract_jpeg_shape(image_bytes) + image_height = shape[0] + image_width = shape[1] + + padded_center_crop_size = tf.cast( + ((image_size / (image_size + CROP_PADDING)) * + tf.cast(tf.minimum(image_height, image_width), tf.float32)), tf.int32) + + offset_height = ((image_height - padded_center_crop_size) + 1) // 2 + offset_width = ((image_width - padded_center_crop_size) + 1) // 2 + crop_window = tf.stack([ + offset_height, offset_width, padded_center_crop_size, + padded_center_crop_size + ]) + image = tf.image.decode_and_crop_jpeg(image_bytes, crop_window, channels=3) + image = _resize(image, image_size) + + return image + + +def normalize_image(image): + image -= tf.constant(MEAN_RGB, shape=[1, 1, 3], dtype=image.dtype) + image /= tf.constant(STDDEV_RGB, shape=[1, 1, 3], dtype=image.dtype) + return image + + +def preprocess_for_train(image_bytes, + dtype=tf.float32, + image_size=IMAGE_SIZE, + data_augmentations=None): + """Preprocesses the given image for training. + + Args: + image_bytes: Tensor; Representing an image binary of arbitrary size. + dtype: TF data type; Data type of the image. + image_size: int; The target size of the images. + data_augmentations: list(str); Types of data augmentation applied on + training data. + + Returns: + A preprocessed image `Tensor`. + """ + if data_augmentations is not None: + if 'default' in data_augmentations: + image = _decode_and_random_crop(image_bytes, image_size) + image = tf.reshape(image, [image_size, image_size, 3]) + image = tf.image.random_flip_left_right(image) + else: + image = _decode_and_center_crop(image_bytes, image_size) + image = tf.reshape(image, [image_size, image_size, 3]) + + if dtype not in [tf.int32, tf.int64, tf.uint32, tf.uint64]: + image = normalize_image(image) + image = tf.image.convert_image_dtype(image, dtype=dtype) + else: + image = tf.cast(image, dtype=dtype) + return image + + +def preprocess_for_eval(image_bytes, dtype=tf.float32, image_size=IMAGE_SIZE): + """Preprocesses the given image for evaluation. + + Args: + image_bytes: Tensor; Representing an image binary of arbitrary size. + dtype: TF data type; Data type of the image. + image_size: int; The target size of the images. + + Returns: + A preprocessed image `Tensor`. + """ + image = _decode_and_center_crop(image_bytes, image_size) + image = tf.reshape(image, [image_size, image_size, 3]) + if dtype not in [tf.int32, tf.int64, tf.uint32, tf.uint64]: + image = normalize_image(image) + image = tf.image.convert_image_dtype(image, dtype=dtype) + else: + image = tf.cast(image, dtype=dtype) + return image + + +def imagenet_load_split(batch_size, + train, + onehot_labels, + dtype=tf.float32, + image_size=IMAGE_SIZE, + prefetch_buffer_size=10, + shuffle_seed=None, + data_augmentations=None): + """Creates a split from the ImageNet dataset using TensorFlow Datasets. + + For the training set, we drop the last partial batch. This is fine to do + because we additionally shuffle the data randomly each epoch, thus the trainer + will see all data in expectation. For the validation set, we pad the final + batch to the desired batch size. + + Args: + batch_size: int; The batch size returned by the data pipeline. + train: bool; Whether to load the train or evaluation split. + onehot_labels: Whether to transform the labels to one hot. + dtype: TF data type; Data type of the image. + image_size: int; The target size of the images. + prefetch_buffer_size: int; Buffer size for the TFDS prefetch. + shuffle_seed: The seed to use when shuffling the train split. + data_augmentations: list(str); Types of data augmentation applied on + training data. + + Returns: + A `tf.data.Dataset`. + """ + if train: + split_size = TRAIN_IMAGES // jax.process_count() + start = jax.process_index() * split_size + split = 'train[{}:{}]'.format(start, start + split_size) + else: + split_size = EVAL_IMAGES // jax.process_count() + start = jax.process_index() * split_size + split = 'validation[{}:{}]'.format(start, start + split_size) + + def decode_example(example): + if train: + image = preprocess_for_train(example['image'], dtype, image_size, + data_augmentations) + else: + image = preprocess_for_eval(example['image'], dtype, image_size) + + label = example['label'] + label = tf.one_hot(label, NUM_CLASSES) if onehot_labels else label + return {'inputs': image, 'label': label} + + dataset_builder = tfds.builder('imagenet2012:5.*.*') + # Download dataset: + dataset_builder.download_and_prepare() + ds = dataset_builder.as_dataset( + split=split, decoders={ + 'image': tfds.decode.SkipDecoding(), + }) + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + ds = ds.with_options(options) + + ds = ds.cache() + + if train: + ds = ds.repeat() + ds = ds.shuffle(16 * batch_size, seed=shuffle_seed) + + # decode_example should be applied after caching as it also does augmentation + ds = ds.map(decode_example, num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.batch(batch_size, drop_remainder=train) + + if not train: + ds = ds.repeat() + + ds = ds.prefetch(prefetch_buffer_size) + return ds + + +@datasets.add_dataset('imagenet') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the ImageNet train, validation, and test sets. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + prefetch_buffer_size: int; Buffer size for the device prefetch. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + dataset_configs = dataset_configs or {} + del rng + data_augmentations = dataset_configs.get('data_augmentations', ['default']) + # TODO(dehghani): add mixup data augmentation. + for da in data_augmentations: + if da not in ['default']: + raise ValueError(f'Data augmentation {data_augmentations} is not ' + f'(yet) supported in the ImageNet dataset.') + dtype = getattr(tf, dtype_str) + onehot_labels = dataset_configs.get('onehot_labels', False) + + logging.info('Loading train split of the ImageNet dataset.') + train_ds = imagenet_load_split( + batch_size, + train=True, + onehot_labels=onehot_labels, + dtype=dtype, + shuffle_seed=shuffle_seed, + data_augmentations=data_augmentations) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + logging.info('Loading test split of the ImageNet dataset.') + eval_ds = imagenet_load_split(eval_batch_size, train=False, + onehot_labels=onehot_labels, dtype=dtype) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + train_iter = jax_utils.prefetch_to_device(train_iter, prefetch_buffer_size) + + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + eval_iter = map(shard_batches, eval_iter) + eval_iter = jax_utils.prefetch_to_device(eval_iter, prefetch_buffer_size) + + input_shape = (-1, IMAGE_SIZE, IMAGE_SIZE, 3) + + meta_data = { + 'num_classes': NUM_CLASSES, + 'input_shape': input_shape, + 'num_train_examples': TRAIN_IMAGES, + 'num_eval_examples': EVAL_IMAGES, + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': onehot_labels, + } + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) diff --git a/scenic/dataset_lib/mnist_dataset.py b/scenic/dataset_lib/mnist_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..235df09f8d9bde0b3e27c22c04367f56497fe64a --- /dev/null +++ b/scenic/dataset_lib/mnist_dataset.py @@ -0,0 +1,119 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the MNIST dataset.""" + +import functools +from typing import Optional + +from absl import logging +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf + + +def preprocess_example(example, dtype=tf.float32): + """Preprocesses the given image. + + Args: + example: dict; Example that has an 'image' and a 'label'. + dtype: Tensorflow data type; Data type of the image. + + Returns: + A preprocessed image `Tensor`. + """ + image = dataset_utils.normalize(example['image'], dtype) + return {'inputs': image, 'label': example['label']} + + +@datasets.add_dataset('mnist') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the MNIST train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + del dataset_configs + dtype = getattr(tf, dtype_str) + preprocess_ex = functools.partial(preprocess_example, dtype=dtype) + + logging.info('Loading train split of the MNIST dataset.') + train_ds, train_ds_info = dataset_utils.load_split_from_tfds( + 'mnist', + batch_size, + split='train', + preprocess_example=preprocess_ex, + shuffle_seed=shuffle_seed) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + logging.info('Loading test split of the MNIST dataset.') + eval_ds, _ = dataset_utils.load_split_from_tfds( + 'mnist', eval_batch_size, split='test', preprocess_example=preprocess_ex) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + eval_iter = map(shard_batches, eval_iter) + + input_shape = (-1, 28, 28, 1) + meta_data = { + 'num_classes': train_ds_info.features['label'].num_classes, + 'input_shape': input_shape, + 'num_train_examples': dataset_utils.get_num_examples('mnist', 'train'), + 'num_eval_examples': dataset_utils.get_num_examples('mnist', 'test'), + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': False, + } + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) diff --git a/scenic/dataset_lib/oxford_pets_dataset.py b/scenic/dataset_lib/oxford_pets_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..a7c5c30438b9de70abc9f0d6afd1e87276128904 --- /dev/null +++ b/scenic/dataset_lib/oxford_pets_dataset.py @@ -0,0 +1,144 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the Oxford-IIIT pet dataset.""" + +import functools +from typing import Optional + +from absl import logging +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf + +IMAGE_SIZE = [224, 224] + + +def preprocess_example(example, dtype=tf.float32): + """Preprocesses the given image. + + Args: + example: dict; Example coming from TFDS. + dtype: Tensorflow data type; Data type of the image. + + Returns: + An example dict as required by the model. + """ + example_out = {} + # For simplicity, just resize all images to the same shape: + example_out['inputs'] = tf.image.resize( + dataset_utils.normalize(example['image'], dtype), IMAGE_SIZE, 'bilinear') + example_out['inputs'] = tf.cast(example_out['inputs'], dtype) + + example_out['label'] = tf.image.resize( + example['segmentation_mask'], IMAGE_SIZE, 'nearest') + example_out['label'] = tf.squeeze(example_out['label'], axis=2) + example_out['label'] = tf.cast(example_out['label'], dtype) + + # The dataset has three classes: object/pet (label 1), background (label 2) + # and object outline (label 3). Convert to zero-indexed labels: + example_out['label'] -= 1 + + return example_out + + +@datasets.add_dataset('oxford_pets') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the Oxford Pet train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + del dataset_configs + dtype = getattr(tf, dtype_str) + preprocess_ex = functools.partial(preprocess_example, dtype=dtype) + + logging.info('Loading train split of the Oxford Pet dataset.') + train_ds, _ = dataset_utils.load_split_from_tfds( + 'oxford_iiit_pet', + batch_size, + split='train', + preprocess_example=preprocess_ex, + shuffle_seed=shuffle_seed) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + logging.info('Loading test split of the Oxford Pet dataset.') + eval_ds, _ = dataset_utils.load_split_from_tfds( + 'oxford_iiit_pet', eval_batch_size, split='test', + preprocess_example=preprocess_ex) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size, + pixel_level=True) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size, + pixel_level=True) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + eval_iter = map(shard_batches, eval_iter) + + input_shape = (-1, IMAGE_SIZE[0], IMAGE_SIZE[1], 3) + meta_data = { + 'num_classes': + 3, + 'input_shape': + input_shape, + 'num_train_examples': + dataset_utils.get_num_examples('oxford_iiit_pet', 'train'), + 'num_eval_examples': + dataset_utils.get_num_examples('oxford_iiit_pet', 'test'), + 'input_dtype': + getattr(jnp, dtype_str), + 'target_is_onehot': + False, + } + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) diff --git a/scenic/dataset_lib/svhn_dataset.py b/scenic/dataset_lib/svhn_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..6dd8e97769491cc8a156a503386cab2cbc2b767b --- /dev/null +++ b/scenic/dataset_lib/svhn_dataset.py @@ -0,0 +1,172 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the SVHN dataset. + +The Street View House Numbers (SVHN) Dataset is an image digit recognition + dataset of over 600,000 color digit images coming from real world data. + Split size: + - Training set: 73,257 images + - Testing set: 26,032 images + - Extra training set: 531,131 images + Following the common setup on SVHN, we only use the official training and + testing data. Images are cropped to 32x32. + + URL: http://ufldl.stanford.edu/housenumbers/ +""" + +import functools +from typing import Optional + +from absl import logging +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf + + +def preprocess_example(example, dtype=tf.float32): + """Preprocesses the given example. + + Args: + example: dict; Example that has an 'image' and a 'label'. + dtype: Tensorflow data type; Data type of the image. + + Returns: + A preprocessed image `Tensor`. + """ + image = tf.cast(example['image'], dtype=dtype) + if dtype not in [tf.int32, tf.int64, tf.uint32, tf.uint64]: + image /= tf.constant(255.0, shape=[1, 1, 1], dtype=dtype) + return {'inputs': image, 'label': example['label']} + + +def augment_example(example, dtype=tf.float32, data_augmentations=None): + """Apply data augmentation on the given training example. + + Args: + example: dict; Example that has an 'image' and a 'label'. + dtype: Tensorflow data type; Data type of the image. + data_augmentations: list(str); Types of data augmentation applied on + training data. + + Returns: + An augmented training example. + """ + image = tf.cast(example['inputs'], dtype=dtype) + if data_augmentations is not None: + if 'random_crop_flip' in data_augmentations: + image = dataset_utils.augment_random_crop_flip( + image, crop_padding=4, flip=True) + image = tf.cast(image, dtype=dtype) + return {'inputs': image, 'label': example['label']} + + +@datasets.add_dataset('svhn') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the SVHN train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + dataset_configs = dataset_configs or {} + data_augmentations = dataset_configs.get('data_augmentations', []) + for da in data_augmentations: + if da not in ['random_crop_flip']: + raise ValueError(f'Data augmentation type {da} is not yet supported ' + f'in the SVHN dataset.') + + dtype = getattr(tf, dtype_str) + preprocess_ex = functools.partial(preprocess_example, dtype=dtype) + + logging.info('Loading train split of the SVHN dataset.') + augment_ex = functools.partial( + augment_example, dtype=dtype, data_augmentations=data_augmentations) + train_ds, train_ds_info = dataset_utils.load_split_from_tfds( + 'svhn_cropped:3.*.*', + batch_size, + split='train', + preprocess_example=preprocess_ex, + augment_train_example=augment_ex, + shuffle_seed=shuffle_seed) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + logging.info('Loading test split of the SVHN dataset.') + eval_ds, _ = dataset_utils.load_split_from_tfds( + 'svhn_cropped:3.*.*', + eval_batch_size, + split='test', + preprocess_example=preprocess_ex) + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + eval_iter = map(shard_batches, eval_iter) + + input_shape = (-1, 32, 32, 3) + meta_data = { + 'num_classes': + train_ds_info.features['label'].num_classes, + 'input_shape': + input_shape, + 'num_train_examples': + dataset_utils.get_num_examples('svhn_cropped:3.*.*', 'train'), + 'num_eval_examples': + dataset_utils.get_num_examples('svhn_cropped:3.*.*', 'test'), + 'input_dtype': + getattr(jnp, dtype_str), + 'target_is_onehot': + False, + } + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) diff --git a/scenic/dataset_lib/tests/__init__.py b/scenic/dataset_lib/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/dataset_lib/tests/test_dataset_utils.py b/scenic/dataset_lib/tests/test_dataset_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..3a1b8a1c596f4aaefd14e587c41e53026bfae410 --- /dev/null +++ b/scenic/dataset_lib/tests/test_dataset_utils.py @@ -0,0 +1,195 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for utilities used in individual datasets and in dataset_utils.py.""" + +import functools + +from absl.testing import absltest +from absl.testing import parameterized +import jax +import jax.numpy as jnp +import numpy as np +from scenic.dataset_lib import dataset_utils + + +class DatasetUtilsTest(parameterized.TestCase): + """Tests Dataset Utilities.""" + + @parameterized.named_parameters( + # ('pixel_level_pre_pad_mask', True, (28, 28), 28 * 28, True), + # ('pixel_levefel', True, (28, 28), 28 * 28, False), + ('example_level', False, (), 1, False),) + def test_maybe_pad_batch(self, pixel_level, batch_mask_shape, mask_sum_coef, + pre_padding_mask): + """Tests maybe_pad_batch.""" + desired_bs = 32 + partial_bs = 13 + + def make_fake_batches(): + # Make dummy batches + complete_batch = { + 'inputs': jnp.array(np.random.normal(size=(desired_bs, 28, 28, 3))), + 'label': jnp.array(np.random.normal(size=(desired_bs, 10))) + } + partial_batch = { + 'inputs': jnp.array(np.random.normal(size=(partial_bs, 28, 28, 3))), + 'label': jnp.array(np.random.normal(size=(partial_bs, 10))) + } + + complete_batch_mask, partial_batch_mask = None, None + if pre_padding_mask: + complete_batch_mask = jnp.broadcast_to( + jnp.eye(28, 28), (desired_bs, 28, 28)) + complete_batch['batch_mask'] = complete_batch_mask + partial_batch_mask = jnp.broadcast_to( + jnp.eye(28, 28), (partial_bs, 28, 28)) + partial_batch['batch_mask'] = partial_batch_mask + + return (complete_batch, partial_batch, complete_batch_mask, + partial_batch_mask) + + ######## Test complete training batches + (complete_batch, partial_batch, complete_batch_mask, + partial_batch_mask) = make_fake_batches() + outputs = dataset_utils.maybe_pad_batch( + complete_batch, + train=True, + batch_size=desired_bs, + pixel_level=pixel_level) + # Check output shape: + self.assertEqual(outputs['inputs'].shape, (desired_bs, 28, 28, 3)) + # Check batch_mask: + self.assertEqual(outputs['batch_mask'].shape, + (desired_bs,) + batch_mask_shape) + if pre_padding_mask: + self.assertIsNotNone(complete_batch_mask) + self.assertEqual(outputs['batch_mask'].sum(), complete_batch_mask.sum()) + else: + self.assertEqual(outputs['batch_mask'].sum(), + float(desired_bs * mask_sum_coef)) + + print(complete_batch.keys()) + ######## Test partial training batches + # Assert that the code throws an error as we dont handle partial training + # batches in the codebase: + with self.assertRaises(ValueError): + _ = dataset_utils.maybe_pad_batch( + partial_batch, + train=True, + batch_size=desired_bs, + pixel_level=pixel_level) + + ######## Test complete test batches + (complete_batch, partial_batch, complete_batch_mask, + partial_batch_mask) = make_fake_batches() + outputs = dataset_utils.maybe_pad_batch( + complete_batch, + train=False, + batch_size=desired_bs, + pixel_level=pixel_level) + # Check output shape: + self.assertEqual(outputs['inputs'].shape, (desired_bs, 28, 28, 3)) + # Check batch_mask: + self.assertEqual(outputs['batch_mask'].shape, + (desired_bs,) + batch_mask_shape) + if pre_padding_mask: + self.assertIsNotNone(complete_batch_mask) + self.assertEqual(outputs['batch_mask'].sum(), complete_batch_mask.sum()) + else: + self.assertEqual(outputs['batch_mask'].sum(), + float(desired_bs * mask_sum_coef)) + + ######## Test partial test batches + outputs = dataset_utils.maybe_pad_batch( + partial_batch, + train=False, + batch_size=desired_bs, + pixel_level=pixel_level) + # Check output shape: + self.assertEqual(outputs['inputs'].shape, (desired_bs, 28, 28, 3)) + + # check output padding + expected_out_pad = jnp.array(np.zeros((desired_bs - partial_bs, 28, 28, 3))) + out_pad = outputs['inputs'][partial_bs:, :, :, :] + self.assertTrue(jnp.array_equal(out_pad, expected_out_pad)) + + # Check batch_mask: + self.assertEqual(outputs['batch_mask'].shape, + (desired_bs,) + batch_mask_shape) + + batch_mask = jnp.concatenate([ + jnp.array(np.ones((partial_bs,) + batch_mask_shape)), + jnp.array(np.zeros((desired_bs - partial_bs,) + batch_mask_shape)) + ], + axis=0) + if pre_padding_mask: + padded_pre_padding_mask = jnp.concatenate([ + partial_batch_mask, + jnp.array(np.zeros((desired_bs - partial_bs,) + batch_mask_shape)) + ], + axis=0) + batch_mask *= padded_pre_padding_mask + + self.assertTrue(jnp.array_equal(outputs['batch_mask'], batch_mask)) + + @parameterized.named_parameters( + ('NHWC-jnp', 'NHWC', (16, 4, 5, 32), True), + ('NTHWC-jnp', 'NTHWC', (16, 2, 4, 5, 32), True), + ('NHWC-np', 'NHWC', (16, 4, 5, 32), False), + ('NTHWC-np', 'NTHWC', (16, 2, 4, 5, 32), False), + ) + def test_mixup(self, image_format, inputs_shape, jax_numpy): + """Tests mixup augmentation for different input formats and numpys.""" + bs = inputs_shape[0] + num_classes = 10 + + if jax_numpy: + np_backend = jnp + mixup_fn = jax.jit( + functools.partial( + dataset_utils.mixup, + alpha=1.0, + image_format=image_format, + rng=jax.random.PRNGKey(0))) + else: + np_backend = np + mixup_fn = functools.partial( + dataset_utils.mixup, alpha=1.0, image_format=image_format, rng=None) + + # Make a fake batch: + inputs = np_backend.array( + np.concatenate((np.zeros(shape=(bs // 2,) + inputs_shape[1:]), + np.ones(shape=(bs // 2,) + inputs_shape[1:])), + axis=0)) + labels = np_backend.array( + jax.nn.one_hot( + np.concatenate( + ( + np.ones(shape=(bs // 2,)), # class 1 + np.ones(shape=(bs // 2,)) * 2 # class 2 + ), + axis=0), + num_classes)) + fake_batch = {'inputs': inputs, 'label': labels} + + # Apply mixup: + mixedup_batch = mixup_fn(fake_batch) + + self.assertEqual(mixedup_batch['inputs'].shape, inputs_shape) + self.assertEqual(mixedup_batch['label'].shape, (bs, num_classes)) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/dataset_lib/video_ops.py b/scenic/dataset_lib/video_ops.py new file mode 100644 index 0000000000000000000000000000000000000000..543f197b46c882b1b30e2128ba6bf0ad919a6c16 --- /dev/null +++ b/scenic/dataset_lib/video_ops.py @@ -0,0 +1,844 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Preprocessing functions for video data loading. + +Includes SimCLR-style data augmentation functions adapted to be temporally +consistent throughout the video. + +Code is based on: +SimCLR style data augmentation is based on: +https://github.com/google-research/simclr/blob/master/tf2/data_util.py +""" + +import functools +import math +from typing import Optional + + +from absl import logging +from dmvr import builders +from dmvr import processors as dmvr_processors +import simclr.tf2.data_util as simclr_data +import tensorflow as tf +from official.vision.image_classification import augment + + +def _get_shape(x): + """Gets tensor shape as a list, allowing mixing static and dynamic shapes.""" + dynamic_shape = tf.shape(x) + if x.shape.ndims is None: + return dynamic_shape + static_shape = x.shape.as_list() + shapes = [ + static_shape[i] if static_shape[i] is not None else dynamic_shape[i] + for i in range(x.shape.ndims) + ] + return shapes + + +def _fill_rectangle_video(image, + center_width, + center_height, + half_width, + half_height, + replace=None): + """Fills blank area for video.""" + image_time = tf.shape(image)[0] + image_height = tf.shape(image)[1] + image_width = tf.shape(image)[2] + + lower_pad = tf.maximum(0, center_height - half_height) + upper_pad = tf.maximum(0, image_height - center_height - half_height) + left_pad = tf.maximum(0, center_width - half_width) + right_pad = tf.maximum(0, image_width - center_width - half_width) + + cutout_shape = [ + image_time, image_height - (lower_pad + upper_pad), + image_width - (left_pad + right_pad) + ] + padding_dims = [[0, 0], [lower_pad, upper_pad], [left_pad, right_pad]] + mask = tf.pad( + tf.zeros(cutout_shape, dtype=image.dtype), + padding_dims, + constant_values=1) + mask = tf.expand_dims(mask, -1) + mask = tf.tile(mask, [1, 1, 1, 3]) + + if replace is None: + fill = tf.random.normal(tf.shape(image), dtype=image.dtype) + elif isinstance(replace, tf.Tensor): + fill = replace + else: + fill = tf.ones_like(image, dtype=image.dtype) * replace + image = tf.where(tf.equal(mask, 0), fill, image) + + return image + + +class RandomErasing: + """Applies RandomErasing to a video. + + + Reference: https://arxiv.org/abs/1708.04896 + """ + + def __init__(self, + probability: float = 0.25, + min_area: float = 0.02, + max_area: float = 1 / 3, + min_aspect: float = 0.3, + max_aspect: Optional[float] = None, + min_count=1, + max_count=1, + trials=10): + """Applies RandomErasing to a video. + + Args: + probability: Probability of augmenting the image. Defaults to `0.25`. + min_area: Minimum area of the random erasing rectangle. Defaults to + `0.02`. + max_area: Maximum area of the random erasing rectangle. Defaults to `1/3`. + min_aspect: Minimum aspect rate of the random erasing rectangle. Defaults + to `0.3`. + max_aspect: Maximum aspect rate of the random erasing rectangle. Defaults + to `None`. + min_count: Minimum number of erased rectangles. Defaults to `1`. + max_count: Maximum number of erased rectangles. Defaults to `1`. + trials: Maximum number of trials to randomly sample a rectangle that + fulfills constraint. Defaults to `10`. + """ + self._probability = probability + self._min_area = float(min_area) + self._max_area = float(max_area) + self._min_log_aspect = math.log(min_aspect) + self._max_log_aspect = math.log(max_aspect or 1 / min_aspect) + self._min_count = min_count + self._max_count = max_count + self._trials = trials + + def distort(self, video: tf.Tensor) -> tf.Tensor: + """Applies RandomErasing to video. + + Args: + video (tf.Tensor): Of shape [temporal, height, width, 3] representing a + video. + + Returns: + tf.Tensor: The augmented version of video. + """ + uniform_random = tf.random.uniform(shape=[], minval=0., maxval=1.0) + mirror_cond = tf.less(uniform_random, self._probability) + video = tf.cond(mirror_cond, lambda: self._erase(video), lambda: video) + return video + + @tf.function + def _erase(self, video: tf.Tensor) -> tf.Tensor: + """Erase an area.""" + if self._min_count == self._max_count: + count = self._min_count + else: + count = tf.random.uniform( + shape=[], + minval=int(self._min_count), + maxval=int(self._max_count - self._min_count + 1), + dtype=tf.int32) + + image_height = tf.shape(video)[1] + image_width = tf.shape(video)[2] + area = tf.cast(image_width * image_height, tf.float32) + + for _ in range(count): + # Work around since break is not supported in tf.function + is_trial_successfull = False + for _ in range(self._trials): + if not is_trial_successfull: + erase_area = tf.random.uniform( + shape=[], + minval=area * self._min_area, + maxval=area * self._max_area) + aspect_ratio = tf.math.exp( + tf.random.uniform( + shape=[], + minval=self._min_log_aspect, + maxval=self._max_log_aspect)) + + half_height = tf.cast( + tf.math.round(tf.math.sqrt(erase_area * aspect_ratio) / 2), + dtype=tf.int32) + half_width = tf.cast( + tf.math.round(tf.math.sqrt(erase_area / aspect_ratio) / 2), + dtype=tf.int32) + + if 2 * half_height < image_height and 2 * half_width < image_width: + center_height = tf.random.uniform( + shape=[], + minval=half_height, + maxval=int(image_height - half_height), + dtype=tf.int32, + ) + center_width = tf.random.uniform( + shape=[], + minval=half_width, + maxval=int(image_width - half_width), + dtype=tf.int32, + ) + + video = _fill_rectangle_video( + video, + center_width, + center_height, + half_width, + half_height, + replace=None) + + is_trial_successfull = True + return video + + +def random_erasing(frames: tf.Tensor, + probability: float = 0.25, min_area: float = 0.02, + max_area: float = 1 / 3, min_aspect: float = 0.3, + max_aspect: Optional[float] = None, min_count=1, + max_count=1, trials=10): + + """Applies RandomErasing to a video. + + Args: + frames: A Tensor of dimension [timesteps, input_h, input_w, channels]. + probability: Probability of augmenting the image. Defaults to `0.25`. + min_area: Minimum area of the random erasing rectangle. Defaults to + `0.02`. + max_area: Maximum area of the random erasing rectangle. Defaults to `1/3`. + min_aspect: Minimum aspect rate of the random erasing rectangle. Defaults + to `0.3`. + max_aspect: Maximum aspect rate of the random erasing rectangle. Defaults + to `None`. + min_count: Minimum number of erased rectangles. Defaults to `1`. + max_count: Maximum number of erased rectangles. Defaults to `1`. + trials: Maximum number of trials to randomly sample a rectangle that + fulfills constraint. Defaults to `10`. + Returns: + tf.Tensor: The augmented version of video. + """ + random_eraser = RandomErasing(probability, min_area, max_area, min_aspect, + max_aspect, min_count, max_count, trials) + return random_eraser.distort(frames) + + +def crop_resize( + frames: tf.Tensor, + output_h: int, + output_w: int, + num_frames: int, + num_channels: int, + area_range=(0.3, 1), + unused_state=None, + aspect_ratio=(0.5, 2.0), + resize_method: str = tf.image.ResizeMethod.BICUBIC, + resize_antialias: bool = False, +) -> tf.Tensor: + """First crop clip with jittering and then resizes to (output_h, output_w). + + Args: + frames: A Tensor of dimension [timesteps, input_h, input_w, channels]. + output_h: Size of the height of output. + output_w: Size of the width of output. + num_frames: Number of input frames per clip. + num_channels: Number of channels of the clip. + area_range: Random crop will preserve this proportion of the area of the + original frame. + unused_state: Argument included to be compatible with DeepMind Video Reader + preprocessing pipeline functions which pass in a state variable. + aspect_ratio: Aspect ratio range of area based random resizing. + resize_method: Method for resizing the frames. + resize_antialias: If True, apply anti-aliasing when resizing. + + Returns: + A Tensor of shape [timesteps, output_h, output_w, channels] of type + frames.dtype. + """ + + shape = tf.shape(frames) + seq_len, channels = int(shape[0]), int(shape[3]) + bbox = tf.constant([0.0, 0.0, 1.0, 1.0], dtype=tf.float32, shape=[1, 1, 4]) + factor = output_w / output_h + aspect_ratio = (aspect_ratio[0] * factor, aspect_ratio[1] * factor) + + sample_distorted_bbox = tf.image.sample_distorted_bounding_box( + shape[1:], + bounding_boxes=bbox, + min_object_covered=0.1, + aspect_ratio_range=aspect_ratio, + area_range=area_range, + max_attempts=100, + use_image_if_no_bounding_boxes=True) + bbox_begin, bbox_size, _ = sample_distorted_bbox + offset_y, offset_x, _ = tf.unstack(bbox_begin) + target_height, target_width, _ = tf.unstack(bbox_size) + size = tf.convert_to_tensor((seq_len, target_height, target_width, channels)) + offset = tf.convert_to_tensor((0, offset_y, offset_x, 0)) + + frames = tf.slice(frames, offset, size) + frames = tf.cast( + tf.image.resize( + frames, + (output_h, output_w), + method=resize_method, + antialias=resize_antialias, + ), + frames.dtype, + ) + frames.set_shape((num_frames, output_h, output_w, num_channels)) + return frames + + +def simclr_aug_fn(frames, num_frames): + """Applies the Simclr Augment policy to one video clip. + + Args: + frames: `Tensor` of shape [timesteps, height, width, 3]. + num_frames: number of frames. + + Returns: + A Tensor of shape [timesteps, output_h, output_w, channels] being random + augmented with the same operation. + """ + + def random_color_jitter(image, p=1.0): + + def _transform(image): + color_jitter_t = functools.partial( + simclr_data.color_jitter, strength=0.75) + image = simclr_data.random_apply(color_jitter_t, p=0.8, x=image) + return simclr_data.random_apply(simclr_data.to_grayscale, p=0.2, x=image) + + return simclr_data.random_apply(_transform, p=p, x=image) + + frame_list = tf.unstack(frames, num_frames, 0) + # Temporally random version + # simclr_aug_frame_list = [] + # for image in frame_list: + # image = random_color_jitter(image) + # simclr_aug_frame_list.append(image) + # return tf.stack(simclr_aug_frame_list, axis=0) + + # Temporally consistent version + big_image = tf.concat(frame_list, axis=0) # [t*h, w, c] + big_image = random_color_jitter(big_image) + simclr_aug_frame_list = tf.split(big_image, num_or_size_splits=num_frames) + return tf.stack(simclr_aug_frame_list, axis=0) # [t, h, w, c] + + +def batch_random_blur(images, height, width, blur_probability=0.5): + """Random blur to all frames. + + All frames have a blur applied to them, or all do not. + + Args: + images: `Tensor` of shape [timesteps, height, width, 3].. + height: the height of image. + width: the width of image. + blur_probability: the probaility to apply the blur operator. + + Returns: + Blurred images. + """ + + def generate_selector(p, bsz): + shape = [bsz, 1, 1, 1] + selector = tf.cast( + tf.less(tf.random.uniform(shape, 0, 1, dtype=tf.float32), p), + tf.float32) + return selector + + images_new = simclr_data.random_blur(images, height, width, p=1.) + # All frames have augmentation applied, or not. + selector = generate_selector(blur_probability, 1) + images = images_new * selector + images * (1 - selector) + images = tf.clip_by_value(images, 0., 1.) + + return images + + +def random_solarization(image, p=0.2): + + def _transform(image): + image = image * tf.cast(tf.less(image, 0.5), tf.float32) + ( + 1.0 - image) * tf.cast(tf.greater_equal(image, 0.5), tf.float32) + return image + + return simclr_data.random_apply(_transform, p=p, x=image) + + +def random_time_reverse(image, p=0.5): + + def _transform(image): + return image[::-1, :, :, :] + + return simclr_data.random_apply(_transform, p=p, x=image) + + +def simclr_style_augmentation(frames, height, width, zero_centre): + """Applies SimCLR-style random augmentations to frames. + + Args: + frames: `Tensor` of shape [timesteps, height, width, 3]. + height: Image height. + width: Image width. + zero_centre: Bool. If true, frames are between [-1. 1]. Otherwise, they are + in the range [0, 1] + + Returns: + A Tensor of shape [timesteps, height, width, channels] being random + augmented with the same operation. + """ + num_frames = frames.shape[0] + frames = simclr_aug_fn(frames, num_frames) + blur_frames = batch_random_blur(frames, height, width) + solarize_frames = random_solarization(blur_frames) + reversed_frames = random_time_reverse(solarize_frames) + reversed_frames = tf.clip_by_value(reversed_frames, 0., 1.) + + if zero_centre: + return reversed_frames * 2.0 - 1.0 + else: + return reversed_frames + + +def deterministic_crop(images, size, spatial_idx): + """Takes a deterministic crop of input images. + + Args: + images: `Tensor` of shape shape [t, h, w, c] + size: Integer ; size of height and width to crop the images. + spatial_idx: 0, 1, or 2 for left, center, and right crop if width is larger + than height. Or 0, 1, or 2 for top, center, and bottom crop if height is + larger than width. + + Returns: + cropped: `Tensor` of shape [t, crop_size, crop_size, c] + """ + assert spatial_idx in [0, 1, 2] + height, width = tf.shape(images)[1], tf.shape(images)[2] + + y_offset = tf.cast(tf.math.ceil((height - size) / 2), tf.int32) + x_offset = tf.cast(tf.math.ceil((width - size) / 2), tf.int32) + + if height > width: + if spatial_idx == 0: + y_offset = 0 + elif spatial_idx == 2: + y_offset = height - size + else: + if spatial_idx == 0: + x_offset = 0 + elif spatial_idx == 2: + x_offset = width - size + + cropped = tf.slice(images, [0, y_offset, x_offset, 0], [-1, size, size, -1]) + + return cropped + + +def three_spatial_crops(images, crop_size): + """Returns three spatial crops of the same frame, as done by SlowFast. + + This enables testing using the same protocol as prior works. ie + (https://arxiv.org/abs/1812.03982, https://arxiv.org/abs/1904.02811, + https://arxiv.org/abs/2004.04730) + If width > height, takes left, centre and right crop. + If height > width, takes top, middle and bottom crop. + + Args: + images: `Tensor` of shape [t, h, w, c] + crop_size: The size to crop from the images + + Returns: + `Tensor` of shape [3 * t, h, w, c] + """ + + result = [] + for spatial_index in range(3): + images_cropped = deterministic_crop(images, crop_size, spatial_index) + result.append(images_cropped) + + return tf.concat(result, axis=0) + + +def additional_augmentations( + ds_factory, + augmentation_params, + crop_size, + num_frames, + zero_centering, + rgb_feature_name=None, + resize_method: str = tf.image.ResizeMethod.BICUBIC, + resize_antialias: bool = False, +): + """Apply additional data augmentations in the DMVR pre-processsing graph.""" + + if not rgb_feature_name: + rgb_feature_name = builders.IMAGE_FEATURE_NAME + + do_simclr_crop_resize = augmentation_params.get('do_simclr_crop_resize', + False) + do_simclr_style_augmentations = augmentation_params.get( + 'do_simclr_style_augmentations', False) + do_rand_augment = augmentation_params.get('do_rand_augment', False) + do_color_augment = augmentation_params.get('do_color_augment', False) + do_jitter_scale = augmentation_params.get('do_jitter_scale', False) + do_random_erasing = augmentation_params.get('do_random_erasing', False) + + if do_simclr_crop_resize and do_jitter_scale: + logging.warning('Only doing simclr_crop_resize.' + 'Not compatible with jitter_scale') + + if do_simclr_crop_resize: + area_range = (augmentation_params.get('simclr_area_lower_bound', 0.5), 1) + aspect_ratio = augmentation_params.get('aspect_ratio_crop', (0.5, 2.0)) + + # Remove resize_smallest and Replace random_crop with crop_resize + ds_factory.preprocessor_builder.remove_fn( + f'{rgb_feature_name}_resize_smallest') + # To replace random_crop with the crop_resize we need to find out which + # function comes next, as not all datasets have the same list of + # preprocessing functions (e.g. SSv2 doesn't have a random_flip) + randcrop_fn_name = f'{rgb_feature_name}_random_crop' + fns_list = ds_factory.preprocessor_builder.get_summary() + idx = [i for i, fd in enumerate(fns_list) if fd.fn_name == randcrop_fn_name] + if not idx: + raise ValueError(f'No {randcrop_fn_name} in Preprocessing Builder.') + next_fn_name = fns_list[idx[0] + 1].fn_name + ds_factory.preprocessor_builder.remove_fn(randcrop_fn_name) + ds_factory.preprocessor_builder.add_fn( + functools.partial( + crop_resize, + num_frames=num_frames, + output_h=crop_size, + output_w=crop_size, + num_channels=3, + area_range=area_range, + aspect_ratio=aspect_ratio, + resize_method=resize_method, + resize_antialias=resize_antialias, + ), + feature_name=rgb_feature_name, + fn_name=f'{rgb_feature_name}_crop_resize', + add_before_fn_name=next_fn_name, + ) + + elif do_jitter_scale: + ds_factory.preprocessor_builder.add_fn( + functools.partial( + dmvr_processors.scale_jitter_augm, + min_scale_factor=augmentation_params.scale_min_factor, + max_scale_factor=augmentation_params.scale_max_factor, + prob=augmentation_params.prob_scale_jitter), + feature_name=rgb_feature_name, + fn_name=f'{rgb_feature_name}_jitter_scale', + add_before_fn_name=f'{rgb_feature_name}_random_crop') + + if do_simclr_style_augmentations and do_color_augment: + logging.warning('Only doing simclr_style_augmentations as it includes' + 'color augmentations') + + if sum([do_rand_augment, do_simclr_style_augmentations, do_color_augment + ]) > 1: + logging.warning('Priority for different augmentation functions is:' + '1) rand_augment. 2) simclr_style_augment.' + '3) colour_augment. Only one is performed.') + + if do_rand_augment: + logging.info('Adding rand_augment') + ds_factory.preprocessor_builder.add_fn( + functools.partial( + distort_image_with_randaugment, + num_layers=augmentation_params.rand_augment_num_layers, + magnitude=augmentation_params.rand_augment_magnitude, + ), + feature_name=rgb_feature_name, + fn_name=f'{rgb_feature_name}_rand_augment', + add_before_fn_name=f'{rgb_feature_name}_normalize') + elif do_simclr_style_augmentations: + # Add additional augmentations at the end + logging.info('Adding simclr_style augmentation') + ds_factory.preprocessor_builder.add_fn( + functools.partial( + simclr_style_augmentation, + height=crop_size, + width=crop_size, + zero_centre=zero_centering), rgb_feature_name) + elif do_color_augment: + logging.info('Adding color_augment') + ds_factory.preprocessor_builder.add_fn( + functools.partial( + dmvr_processors.color_default_augm, + zero_centering_image=zero_centering, + prob_color_augment=augmentation_params.prob_color_augment, + prob_color_drop=augmentation_params.prob_color_drop), + rgb_feature_name) + + if do_random_erasing: + logging.info('Adding random erasing') + random_erasing_prob = augmentation_params.get('random_erasing_prob', 0.25) + ds_factory.preprocessor_builder.add_fn( + functools.partial(random_erasing, probability=random_erasing_prob), + rgb_feature_name) + + return ds_factory + + +def random_sample_sequence_with_centre( + sequence: tf.Tensor, + num_steps: int, + stride: int = 1, + seed: Optional[int] = None, + state: Optional[builders.ProcessorState] = None) -> tf.Tensor: + """Samples a single segment of size `num_steps` from a given sequence. + + The segment is randomly chosen such that it contains the middle element + of the sequence. + + Args: + sequence: Any tensor where the first dimension is timesteps. + num_steps: Number of steps (e.g. frames) to take. + stride: Distance to sample between timesteps. + seed: A deterministic seed to use when sampling. + state: A mutable dictionary where keys are strings. The dictionary might + contain 'sample_offset_proportion' as key with metadata useful for + sampling. It will be modified with added metadata if needed. This can be + used to keep consistency between sampling of different sequences. + + Returns: + A single tensor with first dimension `num_steps` with the sampled segment. + """ + sequence_length = tf.shape(input=sequence)[0] + offset_lower_bound = tf.maximum(sequence_length / 2 - num_steps * stride, 0) + offset_upper_bound = sequence_length / 2 + + offset = tf.random.uniform( + (), + minval=tf.cast(offset_lower_bound, dtype=tf.int32), + maxval=tf.cast(offset_upper_bound, dtype=tf.int32), + dtype=tf.int32, + seed=seed) # Samples from [lower_bound, upper_bound) + + indices = dmvr_processors.sample_or_pad_sequence_indices( + sequence=sequence, + num_steps=num_steps, + repeat_sequence=True, # Will repeat the sequence if we request more. + stride=stride, + offset=offset) + indices.set_shape((num_steps,)) + output = tf.gather(sequence, indices) + + if state is not None: + # Update state. + sample_offset_proportion = ( + tf.cast(offset, tf.float32) / tf.cast(sequence_length, tf.float32)) + state['sample_offset_proportion'] = sample_offset_proportion + + return output + + +def cutout(big_image, pad_size, num_frames, replace=0) -> tf.Tensor: + """Apply cutout (https://arxiv.org/abs/1708.04552) to image. + + This operation applies a (2*pad_size x 2*pad_size) mask of zeros to + a random location within `img`. The pixel values filled in will be of the + value `replace`. The located where the mask will be applied is randomly + chosen uniformly over the whole image. + + Args: + big_image: An image Tensor of type uint8. Shape is [t * h, w, c] + pad_size: Specifies how big the zero mask that will be generated is that is + applied to the image. The mask will be of size (2*pad_size x 2*pad_size). + num_frames: Specifies the t dimension in the input shape. + replace: What pixel value to fill in the image in the area that has the + cutout mask applied to it. + + Returns: + An image Tensor that is of type uint8. + """ + big_image_shape = _get_shape(big_image) + image = tf.reshape(big_image, [ + num_frames, big_image_shape[0] // num_frames, big_image_shape[1], + big_image_shape[2] + ]) + image_height = tf.shape(image)[1] + image_width = tf.shape(image)[2] + + # Sample the center location in the image where the zero mask will be applied. + cutout_center_height = tf.random.uniform( + shape=[], minval=0, maxval=image_height, dtype=tf.int32) + + cutout_center_width = tf.random.uniform( + shape=[], minval=0, maxval=image_width, dtype=tf.int32) + + lower_pad = tf.maximum(0, cutout_center_height - pad_size) + upper_pad = tf.maximum(0, image_height - cutout_center_height - pad_size) + left_pad = tf.maximum(0, cutout_center_width - pad_size) + right_pad = tf.maximum(0, image_width - cutout_center_width - pad_size) + + cutout_shape = [ + image_height - (lower_pad + upper_pad), + image_width - (left_pad + right_pad) + ] + padding_dims = [[lower_pad, upper_pad], [left_pad, right_pad]] + mask = tf.pad( + tf.zeros(cutout_shape, dtype=image.dtype), + padding_dims, + constant_values=1) + mask = tf.expand_dims(mask, -1) + mask = tf.expand_dims(mask, 0) + mask = tf.tile(mask, [num_frames, 1, 1, 3]) + image = tf.where( + tf.equal(mask, 0), + tf.ones_like(image, dtype=image.dtype) * replace, image) + + big_image = tf.reshape(image, [num_frames * image_height, image_width, 3]) + return big_image + + +NAME_TO_FUNC = { + 'AutoContrast': augment.autocontrast, + 'Equalize': augment.equalize, + 'Invert': augment.invert, + # 'Rotate': wrapped_rotate, + 'Posterize': augment.posterize, + 'Solarize': augment.solarize, + 'SolarizeAdd': augment.solarize_add, + 'Color': augment.color, + 'Contrast': augment.contrast, + 'Brightness': augment.brightness, + 'Sharpness': augment.sharpness, + # 'ShearX': shear_x, + # 'ShearY': shear_y, + # 'TranslateX': translate_x, + # 'TranslateY': translate_y, + 'Cutout': cutout, +} + +# Functions that have a 'replace' parameter +REPLACE_FUNCS = frozenset({ + 'Rotate', + 'TranslateX', + 'ShearX', + 'ShearY', + 'TranslateY', + 'Cutout', +}) + + +def _parse_policy_info(name, prob, level, replace_value, cutout_const, + translate_const): + """Return the function that corresponds to `name` and update `level` param.""" + func = NAME_TO_FUNC[name] + args = augment.level_to_arg(cutout_const, translate_const)[name](level) + + if name in REPLACE_FUNCS: + # Add in replace arg if it is required for the function that is called. + args = tuple(list(args) + [replace_value]) + + return func, prob, args + + +def distort_image_with_randaugment(frames, + num_layers, + magnitude, + cutout_const=40, + translate_const=100): + """Applies the RandAugment policy to `image`. + + The original rand_augment implementation is for images. To be temporally + consistent in video, we + -- Reshape the video clip [t, h, w, c] to [t * h, w, c] + -- Only apply functions that do not depend on spatial extent (ie rotate, + shear, translate) + -- We do, however, use a modified cutout. + + Args: + frames: `Tensor` of shape [t, h, w, 3] representing an image. + num_layers: Integer, the number of augmentation transformations to apply + sequentially to an image. Represented as (N) in the paper. Usually best + values will be in the range [1, 3]. + magnitude: Integer, shared magnitude across all augmentation operations. + Represented as (M) in the paper. Usually best values are in the range [5, + 10]. + cutout_const: multiplier for applying cutout. + translate_const: multiplier for applying translation. + + Returns: + The augmented version of `frames`. + """ + available_ops = [ + 'AutoContrast', + 'Equalize', + 'Invert', + 'Posterize', + 'Solarize', + 'Color', + 'Contrast', + 'Brightness', + 'Sharpness', + 'Cutout', + 'SolarizeAdd', + # 'Rotate', 'ShearX', 'ShearY', 'TranslateX', 'TranslateY', + ] + + input_shape = _get_shape(frames) + num_frames = input_shape[0] + image = tf.reshape(frames, [-1, frames.shape[2], frames.shape[3]]) + input_image_type = image.dtype + + if input_image_type != tf.uint8: + image = tf.clip_by_value(image, 0.0, 255.0) + image = tf.cast(image, dtype=tf.uint8) + + replace_value = [128] * 3 + min_prob, max_prob = 0.2, 0.8 + + for _ in range(num_layers): + op_to_select = tf.random.uniform([], + maxval=len(available_ops) + 1, + dtype=tf.int32) + + branch_fns = [] + for (i, op_name) in enumerate(available_ops): + prob = tf.random.uniform([], + minval=min_prob, + maxval=max_prob, + dtype=tf.float32) + func, _, args = _parse_policy_info(op_name, prob, magnitude, + replace_value, cutout_const, + translate_const) + + if op_name == 'Cutout': + args = (args[0], num_frames) + + branch_fns.append(( + i, + # pylint:disable=g-long-lambda + lambda selected_func=func, selected_args=args: selected_func( + image, *selected_args))) + # pylint:enable=g-long-lambda + + image = tf.switch_case( + branch_index=op_to_select, + branch_fns=branch_fns, + default=lambda: tf.identity(image)) + + image = tf.cast(image, dtype=input_image_type) + return tf.reshape(image, input_shape) diff --git a/scenic/main.py b/scenic/main.py new file mode 100644 index 0000000000000000000000000000000000000000..7cd3da70f34698475478030c094587708bb98d83 --- /dev/null +++ b/scenic/main.py @@ -0,0 +1,66 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for Scenic.""" + +from absl import flags +from absl import logging +from clu import metric_writers +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.model_lib import models +from scenic.train_lib import train_utils +from scenic.train_lib import trainers + + +FLAGS = flags.FLAGS + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter) -> None: + """Main function for Scenic.""" + + model_cls = models.get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + + if config.checkpoint: + # When restoring from a checkpoint, change the dataset seed to ensure that + # the example order is new. With deterministic data, this ensures enough + # randomization and in the future with deterministic data + random access, + # we can feed the global step to the dataset loader to always continue + # reading the rest of the data if we resume a job that was interrupted. + checkpoint_path = checkpoints.latest_checkpoint(workdir) + logging.info('CHECKPOINT PATH: %s', checkpoint_path) + if checkpoint_path is not None: + global_step = train_utils.checkpoint_path_step(checkpoint_path) or 0 + logging.info('Folding global_step %s into dataset seed.', global_step) + data_rng = jax.random.fold_in(data_rng, global_step) + + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + + trainers.get_trainer(config.trainer_name)( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/model_lib/README.md b/scenic/model_lib/README.md new file mode 100644 index 0000000000000000000000000000000000000000..ee79cd4d80610a3442897671d9f1a33b8d476594 --- /dev/null +++ b/scenic/model_lib/README.md @@ -0,0 +1,109 @@ + +## Scenic `BaseModel` +A solution usually has several parts: data/task pipeline, model architecture, +losses and metrics, training and evaluation, etc. Given that much of research +done in Scenic is trying out different architectures, Scenic introduces the +concept of `model`, to facilitate plug-in/plug-out experiments. A Scenic model +is defined as the network architecture plus the losses that are used to update +the weights of the network as well as metrics that are used to evaluate the +output of the network. This is implemented as `BaseModel`. + +`BaseModel` is an abstract class with three members: `get_metrics_fn`, +`loss_fn`, and a `build_flax_model`. + +`get_metrics_fn` returns a callable function, `metric_fn`, that calculates the +metrics and returns a dictionary. The metric function computes `f(x_i, y_i)` on +a mini-batch, it has API: + +```python +metric_fn(logits, label, weights) +``` + +The trainer will then aggregate and compute the mean across all samples +evaluated. + +`loss_fn` is a function of API: + +```python +loss = loss_fn(logits, batch, +model_params=None) +``` + +And finally a `flax_model` is returned from the `build_flax_model` function. A +typical usage pattern will be: + +```python +model_cls = model_lib.models.get_model_cls('fully_connected_classification') +model = model_cls(config, dataset.meta_data) +flax_model = model.build_flax_model +dummy_input = jnp.zeros(input_shape, model_input_dtype) +model_state, params = flax_model.init( + rng, dummy_input, train=False).pop('params') +``` + +And this is how to call the model: + +```python +variables = {'params': params, **model_state} logits, +new_model_state = flax_model.apply(variables, inputs, ...) +``` + +The abstract classes defining Scenic models, including `BaseModel` that defines +the Scenic model as well as `ClassificationModel`, +`MultiLabelClassificationModel`, `EncoderDecoderModel`, `SegmentationModelthat` +that define losses and metrics for classification, seq2seq, and segmentation +tasks are defined in `model_lib/base_models`. A Scenic project can define a new +base-class based on the task, metrics or overwrite the existing one when it is +needed. + +Also, it is important to say that this design pattern, although recommended, is +not forced and there is no issue deviating from such structure, as some projects +in Scenic already do that. + +## Implementing loss and metrics with data parallelism +In Scenic, all the default training loops are designed to support data +parallelism. To do so, we have to be careful about our loss +and metrics calculations. + +When training on multiple devices on multiple hosts, the gradient calculations +are handled locally on each device, given the examples in the device batch. So, +in the loss function, we simply "average" over the loss of all examples in that +device and return a **scalar** value, indicating the loss in that device (Check +out `weighted_softmax_cross_entropy` loss in the [base_models/model_lib.py](./base_models/model_lib.py) +as an example). Then, in the training loop, we compute the gradient on each +device given the loss on that device. Then we **average** over the gradient from +all devices in all hosts: + +```python +grad = jax.lax.pmean(grad, axis_name='batch') +``` + +Note that the `pmean` operation is synchronised across all hosts. + +For metrics, however, the averaging is not done locally to make sure that we +account for actual number of examples in the partial last batch of +test/validation sets. +So each device returns two items: (1) the sum of the "per-example" value of that +metric and (2) number of actual examples processed by that device (to be used +for normalizing the value of that metric). Then, we **sum** over these two items +over all devices in all hosts (check out `psum_metric_normalizer` function +in [base_models/model_lib.py](./base_models/model_lib.py) and pass a tuple of +two scalars for each metric ``. +Then, the summary writer uses the sum and the normalizer to compute the final +value of the metric. +So if you implement a new metric, you should be careful of returning the sum +and normalizer instead of the average of metric value over the examples in the +device (local) batch to guarantee the correctness of metrics' calculation. + +This might seem a bit complicated, however, this is necessary as this carefully +accounts for the potential partial last batch in the test/validation splits and +guarantees correct computation of metrics. More precisely, if we average +locally and compute the mean of local averages, the batches with less example +would contribute to the final mean as much as full batches. + +Note that there are metrics that do not decompose across different examples, +and cannot be computed as `sum(metric_val)/N`, like Mean Average +Precision. For such metrics, we need a special procedure to bring all the +`` pairs to the host and then compute the metrics we want. +You can look at [DETR implementation](../projects/baselines/detr) to learn more +about how this can be implemented using `lax.all_gather`. diff --git a/scenic/model_lib/__init__.py b/scenic/model_lib/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/model_lib/__pycache__/__init__.cpython-310.pyc b/scenic/model_lib/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b37e64ad86056769c4d570ce63a99b8e1452b4af Binary files /dev/null and b/scenic/model_lib/__pycache__/__init__.cpython-310.pyc differ diff --git a/scenic/model_lib/__pycache__/__init__.cpython-311.pyc b/scenic/model_lib/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4ca752a13e468237fce9ef047bf8e691eb26d50 Binary files /dev/null and b/scenic/model_lib/__pycache__/__init__.cpython-311.pyc differ diff --git a/scenic/model_lib/__pycache__/__init__.cpython-312.pyc b/scenic/model_lib/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..97b41783a444481f01884e10ff44a5557703e3eb Binary files /dev/null and b/scenic/model_lib/__pycache__/__init__.cpython-312.pyc differ diff --git a/scenic/model_lib/base_models/__init__.py b/scenic/model_lib/base_models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/model_lib/base_models/__pycache__/__init__.cpython-310.pyc b/scenic/model_lib/base_models/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8980a1cfac9c2720f0c544ca99061835d7716048 Binary files /dev/null and b/scenic/model_lib/base_models/__pycache__/__init__.cpython-310.pyc differ diff --git a/scenic/model_lib/base_models/__pycache__/__init__.cpython-311.pyc b/scenic/model_lib/base_models/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..38c7229054214720207e93bbb05a6dfd54c3acc0 Binary files /dev/null and b/scenic/model_lib/base_models/__pycache__/__init__.cpython-311.pyc differ diff --git a/scenic/model_lib/base_models/__pycache__/__init__.cpython-312.pyc b/scenic/model_lib/base_models/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b1f280d0fcce3b4987f0b7027c3bdb48c092055 Binary files /dev/null and b/scenic/model_lib/base_models/__pycache__/__init__.cpython-312.pyc differ diff --git a/scenic/model_lib/base_models/__pycache__/base_model.cpython-310.pyc b/scenic/model_lib/base_models/__pycache__/base_model.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..961251fdb95d0e91dd935d4b7110365a5562ea39 Binary files /dev/null and b/scenic/model_lib/base_models/__pycache__/base_model.cpython-310.pyc differ diff --git a/scenic/model_lib/base_models/__pycache__/base_model.cpython-311.pyc b/scenic/model_lib/base_models/__pycache__/base_model.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ded1063054db224dc105843bf6666c894e900337 Binary files /dev/null and b/scenic/model_lib/base_models/__pycache__/base_model.cpython-311.pyc differ diff --git a/scenic/model_lib/base_models/__pycache__/box_utils.cpython-310.pyc b/scenic/model_lib/base_models/__pycache__/box_utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..beb211fd190a376a44f74774267e3791b6765b66 Binary files /dev/null and b/scenic/model_lib/base_models/__pycache__/box_utils.cpython-310.pyc differ diff --git a/scenic/model_lib/base_models/__pycache__/box_utils.cpython-311.pyc b/scenic/model_lib/base_models/__pycache__/box_utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79d1c7611cf3457761ad902cd28b687e2620c705 Binary files /dev/null and b/scenic/model_lib/base_models/__pycache__/box_utils.cpython-311.pyc differ diff --git a/scenic/model_lib/base_models/__pycache__/box_utils.cpython-312.pyc b/scenic/model_lib/base_models/__pycache__/box_utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85e945780fd06039334a2af0abe4bf7c9b7d7738 Binary files /dev/null and b/scenic/model_lib/base_models/__pycache__/box_utils.cpython-312.pyc differ diff --git a/scenic/model_lib/base_models/__pycache__/model_utils.cpython-310.pyc b/scenic/model_lib/base_models/__pycache__/model_utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f4800783368a16963fb5e15e488fef3962383f18 Binary files /dev/null and b/scenic/model_lib/base_models/__pycache__/model_utils.cpython-310.pyc differ diff --git a/scenic/model_lib/base_models/__pycache__/model_utils.cpython-311.pyc b/scenic/model_lib/base_models/__pycache__/model_utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f87622f9903c0b3e5238b499f9bb30d70037b52f Binary files /dev/null and b/scenic/model_lib/base_models/__pycache__/model_utils.cpython-311.pyc differ diff --git a/scenic/model_lib/base_models/base_model.py b/scenic/model_lib/base_models/base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..df0e7360d3e8a8ed9094e4cace90c0d474c8b1ba --- /dev/null +++ b/scenic/model_lib/base_models/base_model.py @@ -0,0 +1,190 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class models.""" + +from typing import Any, Callable, Dict, Mapping, Optional, Tuple + +from absl import logging +import flax.linen as nn +from flax.training import common_utils +import jax.numpy as jnp +import ml_collections + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricNormalizerFnDict = Mapping[ + str, Tuple[Callable[[jnp.ndarray, bool, Optional[jnp.ndarray]], float], + Callable[[jnp.ndarray, bool, Optional[jnp.ndarray]], float]]] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] + + +def metrics_function_jit( + logits: jnp.ndarray, + batch: Batch, + target_is_one_or_multihot: bool, + metrics, +) -> Dict[str, Tuple[float, int]]: + """Calculates metrics for the multi-label classification task for jit. + + Currently we assume each metric_fn has the API: + ```metric_fn(logits, targets, weights)``` + and returns an array of shape [batch_size]. + + Pmap-based trainers assume that to compute the aggregate metric, one should + sum across all batches, then divide by the total samples seen. + + We follow the same API here, but note that summing should no longer use + lax.psum, but rather a jnp.sum suffices as jit uses global arrays. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + target_is_one_or_multihot: If the target is a one-hot or multi-hot vector. + metrics: The metrics to evaluate. The key is the name of the metric, + and the value is the metrics function. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples of + (metric, normalizer). + """ + if target_is_one_or_multihot: + one_or_multihot_target = batch['label'] + else: + # This is to support running a multi-label classification model on + # single-label classification tasks: + one_or_multihot_target = common_utils.onehot(batch['label'], + logits.shape[-1]) + weights = batch.get('batch_mask') # batch_mask might not be defined + + evaluated_metrics = {} + for key, metric in metrics.items(): + fn, normaliser = metric + metric_value = fn(logits, one_or_multihot_target, weights) + norm_value = normaliser(logits, one_or_multihot_target, weights) + evaluated_metrics[key] = (jnp.sum(metric_value), jnp.sum(norm_value)) + + return evaluated_metrics # pytype: disable=bad-return-type # jax-types + + +class BaseModel: + """Defines commonalities between all models. + + A model is class with three members: get_metrics_fn, loss_fn, and a + flax_model. + + get_metrics_fn returns a callable function, metric_fn, that calculates the + metrics and returns a dictionary. The metric function computes f(x_i, y_i) on + a minibatch, it has API: + ```metric_fn(logits, label, weights).``` + + The trainer will then aggregate and compute the mean across all samples + evaluated. + + loss_fn is a function of API + loss = loss_fn(logits, batch, model_params=None). + + This model class defines a cross_entropy_loss with weight decay, where the + weight decay factor is determined by config.l2_decay_factor. + + flax_model is returned from the build_flax_model function. A typical + usage pattern will be: + ``` + model_cls = model_lib.models.get_model_cls('fully_connected_classification') + model = model_cls(config, dataset.meta_data) + flax_model = model.build_flax_model + dummy_input = jnp.zeros(input_shape, model_input_dtype) + model_state, params = flax_model.init( + rng, dummy_input, train=False).pop('params') + ``` + And this is how to call the model: + variables = {'params': params, **model_state} + logits, new_model_state = flax_model.apply(variables, inputs, ...) + ``` + """ + + def __init__( + self, + config: Optional[ml_collections.ConfigDict], + dataset_meta_data: Dict[str, Any], + ) -> None: + if config is None: + logging.warning('You are creating the model with default config.') + config = self.default_flax_model_config() + self.config = config + self.dataset_meta_data = dataset_meta_data + self.flax_model = self.build_flax_model() + + def get_metrics_fn(self, split: Optional[str] = None) -> MetricFn: + """Returns a callable metric function for the model. + + The metrics function is for pmap-based models, where we need to normalise + by doing p-sums over other devices. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + + Returns: + A metric function with the following API: ```metrics_fn(logits, + batch)``` + """ + raise NotImplementedError('Subclasses must implement get_metrics_fn.') + + def get_metrics_fn_jit(self, split: Optional[str] = None) -> MetricFn: + """Returns a callable metric function for the model. + + The metrics function is for jit-based models, where we normalise by doing + sums over global arrays. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + + Returns: + A metric function with the following API: ```metrics_fn(logits, + batch)``` + """ + raise NotImplementedError('Subclasses must implement get_metrics_fn_jit.') + + def loss_function(self, + logits: jnp.ndarray, + batch: Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Returns the loss. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + raise NotImplementedError('Subclasses must implement loss_function.') + + def build_flax_model(self) -> nn.Module: + raise NotImplementedError('Subclasses must implement build_flax_model().') + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + """Default config for the flax model that is built in `build_flax_model`. + + This function in particular serves the testing functions and supposed to + provide config that are passed to the flax_model when it's built in + `build_flax_model` function, e.g., `model_dtype_str`. + """ + raise NotImplementedError( + 'Subclasses must implement default_flax_model_config().') diff --git a/scenic/model_lib/base_models/box_utils.py b/scenic/model_lib/base_models/box_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..2eea28f3d3c86c23dacb0bb41de37388ef8412c4 --- /dev/null +++ b/scenic/model_lib/base_models/box_utils.py @@ -0,0 +1,329 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for boxes. + +Axis-aligned utils implemented based on: +https://github.com/facebookresearch/detr/blob/master/util/box_ops.py. + +Rotated box utils implemented based on: +https://github.com/lilanxiao/Rotated_IoU. +""" +from typing import Any, Union + +import jax.numpy as jnp +import numpy as np + +PyModule = Any +Array = Union[jnp.ndarray, np.ndarray] + + +def box_cxcywh_to_xyxy(x: Array, np_backbone: PyModule = jnp) -> Array: + """Converts boxes from [cx, cy, w, h] format into [x, y, x', y'] format.""" + x_c, y_c, w, h = np_backbone.split(x, 4, axis=-1) + b = [(x_c - 0.5 * w), (y_c - 0.5 * h), (x_c + 0.5 * w), (y_c + 0.5 * h)] + return np_backbone.concatenate(b, axis=-1) + + +def box_cxcywh_to_yxyx(x: Array, np_backbone: PyModule = jnp) -> Array: + """Converts boxes from [cx, cy, w, h] format into [y, x, y', x'] format.""" + x_c, y_c, w, h = np_backbone.split(x, 4, axis=-1) + b = [(y_c - 0.5 * h), (x_c - 0.5 * w), (y_c + 0.5 * h), (x_c + 0.5 * w)] + return np_backbone.concatenate(b, axis=-1) + + +def box_xyxy_to_cxcywh(x: Array, np_backbone: PyModule = jnp) -> Array: + """Converts boxes from [x, y, x', y'] format into [cx, cy, w, h] format.""" + x0, y0, x1, y1 = np_backbone.split(x, 4, axis=-1) + b = [(x0 + x1) / 2, (y0 + y1) / 2, (x1 - x0), (y1 - y0)] + return np_backbone.concatenate(b, axis=-1) + + +def box_yxyx_to_cxcywh(x: Array, np_backbone: PyModule = jnp) -> Array: + """Converts boxes from [y, x, y', x'] format into [cx, cy, w, h] format.""" + y0, x0, y1, x1 = np_backbone.split(x, 4, axis=-1) + b = [(x0 + x1) / 2, (y0 + y1) / 2, (x1 - x0), (y1 - y0)] + return np_backbone.concatenate(b, axis=-1) + + +def box_iou(boxes1: Array, + boxes2: Array, + np_backbone: PyModule = jnp, + all_pairs: bool = True, + eps: float = 1e-6) -> Array: + """Computes IoU between two sets of boxes. + + Boxes are in [x, y, x', y'] format [x, y] is top-left, [x', y'] is bottom + right. + + Args: + boxes1: Predicted bounding-boxes in shape [bs, n, 4]. + boxes2: Target bounding-boxes in shape [bs, m, 4]. Can have a different + number of boxes if all_pairs is True. + np_backbone: numpy module: Either the regular numpy package or jax.numpy. + all_pairs: Whether to compute IoU between all pairs of boxes or not. + eps: Epsilon for numerical stability. + + Returns: + If all_pairs == True, returns the pairwise IoU cost matrix of shape + [bs, n, m]. If all_pairs == False, returns the IoU between corresponding + boxes. The shape of the return value is then [bs, n]. + """ + + # First, compute box areas. These will be used later for computing the union. + wh1 = boxes1[..., 2:] - boxes1[..., :2] + area1 = wh1[..., 0] * wh1[..., 1] # [bs, n] + + wh2 = boxes2[..., 2:] - boxes2[..., :2] + area2 = wh2[..., 0] * wh2[..., 1] # [bs, m] + + if all_pairs: + # Compute pairwise top-left and bottom-right corners of the intersection + # of the boxes. + lt = np_backbone.maximum(boxes1[..., :, None, :2], + boxes2[..., None, :, :2]) # [bs, n, m, 2]. + rb = np_backbone.minimum(boxes1[..., :, None, 2:], + boxes2[..., None, :, 2:]) # [bs, n, m, 2]. + + # intersection = area of the box defined by [lt, rb] + wh = (rb - lt).clip(0.0) # [bs, n, m, 2] + intersection = wh[..., 0] * wh[..., 1] # [bs, n, m] + + # union = sum of areas - intersection + union = area1[..., :, None] + area2[..., None, :] - intersection + + iou = intersection / (union + eps) + + else: + # Compute top-left and bottom-right corners of the intersection between + # corresponding boxes. + assert boxes1.shape[1] == boxes2.shape[1], ( + 'Different number of boxes when all_pairs is False') + lt = np_backbone.maximum(boxes1[..., :, :2], + boxes2[..., :, :2]) # [bs, n, 2] + rb = np_backbone.minimum(boxes1[..., :, 2:], boxes2[..., :, + 2:]) # [bs, n, 2] + + # intersection = area of the box defined by [lt, rb] + wh = (rb - lt).clip(0.0) # [bs, n, 2] + intersection = wh[..., :, 0] * wh[..., :, 1] # [bs, n] + + # union = sum of areas - intersection. + union = area1 + area2 - intersection + + # Somehow the PyTorch implementation does not use eps to avoid 1/0 cases. + iou = intersection / (union + eps) + + return iou, union # pytype: disable=bad-return-type # jax-ndarray + + +def generalized_box_iou(boxes1: Array, + boxes2: Array, + np_backbone: PyModule = jnp, + all_pairs: bool = True, + eps: float = 1e-6) -> Array: + """Generalized IoU from https://giou.stanford.edu/. + + The boxes should be in [x, y, x', y'] format specifying top-left and + bottom-right corners. + + Args: + boxes1: Predicted bounding-boxes in shape [..., n, 4]. + boxes2: Target bounding-boxes in shape [..., m, 4]. + np_backbone: Numpy module: Either the regular numpy package or jax.numpy. + all_pairs: Whether to compute generalized IoU from between all-pairs of + boxes or not. Note that if all_pairs == False, we must have m==n. + eps: Epsilon for numerical stability. + + Returns: + If all_pairs == True, returns a [bs, n, m] pairwise matrix, of generalized + ious. If all_pairs == False, returns a [bs, n] matrix of generalized ious. + """ + # Degenerate boxes gives inf / nan results, so do an early check. + # TODO(b/166344282): Figure out how to enable asserts on inputs with jitting: + # assert (boxes1[:, :, 2:] >= boxes1[:, :, :2]).all() + # assert (boxes2[:, :, 2:] >= boxes2[:, :, :2]).all() + iou, union = box_iou( + boxes1, boxes2, np_backbone=np_backbone, all_pairs=all_pairs, eps=eps) + + # Generalized IoU has an extra term which takes into account the area of + # the box containing both of these boxes. The following code is very similar + # to that for computing intersection but the min and max are flipped. + if all_pairs: + lt = np_backbone.minimum(boxes1[..., :, None, :2], + boxes2[..., None, :, :2]) # [bs, n, m, 2] + rb = np_backbone.maximum(boxes1[..., :, None, 2:], + boxes2[..., None, :, 2:]) # [bs, n, m, 2] + + else: + lt = np_backbone.minimum(boxes1[..., :, :2], + boxes2[..., :, :2]) # [bs, n, 2] + rb = np_backbone.maximum(boxes1[..., :, 2:], boxes2[..., :, + 2:]) # [bs, n, 2] + + # Now, compute the covering box's area. + wh = (rb - lt).clip(0.0) # Either [bs, n, 2] or [bs, n, m, 2]. + area = wh[..., 0] * wh[..., 1] # Either [bs, n] or [bs, n, m]. + + # Finally, compute generalized IoU from IoU, union, and area. + # Somehow the PyTorch implementation does not use eps to avoid 1/0 cases. + return iou - (area - union) / (area + eps) + + +### Rotated Box Utilties ### + + +def cxcywha_to_corners(cxcywha: Array, np_backbone: PyModule = jnp) -> Array: + """Convert [cx, cy, w, h, a] to four corners of [x, y]. + + Args: + cxcywha: [..., 5]-ndarray of [center-x, center-y, width, height, angle] + representation of rotated boxes. Angle is in radians and center of rotation + is defined by [center-x, center-y] point. + np_backbone: Numpy module: Either the regular numpy package or jax.numpy. + + Returns: + [..., 4, 2]-ndarray of four corners of the rotated box as [x, y] points. + """ + assert cxcywha.shape[-1] == 5, 'Expected [..., [cx, cy, w, h, a] input.' + bs = cxcywha.shape[:-1] + cx, cy, w, h, a = np_backbone.split(cxcywha, indices_or_sections=5, axis=-1) + xs = np_backbone.array([.5, .5, -.5, -.5]) * w + ys = np_backbone.array([-.5, .5, .5, -.5]) * h + pts = np_backbone.stack([xs, ys], axis=-1) + sin = np_backbone.sin(a) + cos = np_backbone.cos(a) + rot = np_backbone.concatenate([cos, -sin, sin, cos], axis=-1).reshape( + (*bs, 2, 2)) + offset = np_backbone.concatenate([cx, cy], -1).reshape((*bs, 1, 2)) + corners = pts @ rot + offset + return corners + + +def corners_to_cxcywha(corners: jnp.ndarray, + np_backbone: PyModule = jnp) -> jnp.ndarray: + """Convert four corners of [x, y] to [cx, cy, w, h, a]. + + Although the conversion is only guaranteed to produce an exact rbox when given + vertices that form an rbox, there is some graceful handling of nearly rbox + vertices by choosing the rbox with corners minimizing the square distance to + the rbox vertices. This solution is equivalent to taking the average of the + top and bottom edges (wcorners*) as well as the left and right edges + (hcornersy). + + Args: + corners: [..., 4, 2]-ndarray of four corners of the rotated box as [x, y] + points. + np_backbone: Numpy module: Either the regular numpy package or jax.numpy. + + Returns: + [..., 5]-ndarray of [center-x, center-y, width, height, angle] + representation of rotated boxes. Angle is in radians and center of rotation + is defined by [center-x, center-y] point. + """ + assert corners.shape[-2] == 4 and corners.shape[-1] == 2, ( + 'Expected four corners [..., 4, 2] input.') + + cornersx, cornersy = corners[..., 0], corners[..., 1] + cx = np_backbone.mean(cornersx, axis=-1) + cy = np_backbone.mean(cornersy, axis=-1) + wcornersx = ( + cornersx[..., 0] + cornersx[..., 1] - cornersx[..., 2] - cornersx[..., 3]) + wcornersy = ( + cornersy[..., 0] + cornersy[..., 1] - cornersy[..., 2] - cornersy[..., 3]) + hcornersy = (-cornersy[..., 0,] + cornersy[..., 1] + cornersy[..., 2] - + cornersy[..., 3]) + a = -np_backbone.arctan2(wcornersy, wcornersx) + cos = np_backbone.cos(a) + w = wcornersx / (2 * cos) + h = hcornersy / (2 * cos) + cxcywha = np_backbone.stack([cx, cy, w, h, a], axis=-1) + + return cxcywha + + +def intersect_line_segments( + lines1: jnp.ndarray, lines2: jnp.ndarray, eps: float = 1e-8 +) -> jnp.ndarray: + """Intersect two line segments. + + Given two 2D line segments, where a line segment is defined as two 2D points. + Finds the point of intersection or returns [nan, nan] if no point exists. + + See https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection (Given two + points on each line segment). + + Performance Note: At the calling point, we expect user to appropriately vmap + function to work on batches of lines. + Args: + lines1: [..., 2, 2]-ndarray, [[x1, y1], [x2, y2]] for lines. + lines2: [..., 2, 2]-ndarray, [[x3, y3], [x4, y4]] for other lines. + eps: Epsilon for numerical stability. + + Returns: + Intersection points [..., 2]-ndarray or [..., [nan, nan]] if no point + exists. Since we are intersecting line segments in 2D, this happens if + lines are parallel or the intersection of the infinite line would occur + outside of both segments. + """ + assert lines1.shape[-2:] == (2, 2) and lines2.shape[-2:] == (2, 2) + x1, y1 = jnp.split(lines1[..., 0, :], 2, -1) + x2, y2 = jnp.split(lines1[..., 1, :], 2, -1) + x3, y3 = jnp.split(lines2[..., 0, :], 2, -1) + x4, y4 = jnp.split(lines2[..., 1, :], 2, -1) + den = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4) + num_t = (x1 - x3) * (y3 - y4) - (y1 - y3) * (x3 - x4) + num_u = (x1 - x2) * (y1 - y3) - (y1 - y2) * (x1 - x3) + # t and u are parameterizations of line1 and line2 respectively and are left + # as variable names from the original algorithm documentation. + t = num_t / (den + eps) + u = -num_u / (den + eps) + + intersection_pt = jnp.concatenate([x1 + t * (x2 - x1), y1 + t * (y2 - y1)], + -1) + are_parallel = jnp.abs(den) < eps + not_on_line1 = jnp.logical_or(u < 0, u > 1) + not_on_line2 = jnp.logical_or(t < 0, t > 1) + + not_possible = jnp.any( + jnp.concatenate([are_parallel, not_on_line1, not_on_line2], -1), -1) + nan_pt = jnp.ones_like(intersection_pt) * jnp.nan + return jnp.where(not_possible[..., None], nan_pt, intersection_pt) + + +def intersect_rbox_edges(corners1: jnp.ndarray, + corners2: jnp.ndarray) -> jnp.ndarray: + """Find intersection points between all four edges of both rotated boxes. + + Note that you are expected to explicitly use vmap to control batching. + + Args: + corners1: (4, 2)-ndarray of corners for rbox1. + corners2: (4, 2)-ndarray of corners for rbox2. + + Returns: + intersections: (4, 4, 2)-ndarray (i, j, :) means intersection of i-th + edge of rbox1 with j-th of rbox2. + """ + intersections = [] + # Apparently for-loop is 2-4x faster than vectorized implementation on TPU + # because it has much higher memory bandwidth. On GPU, the for-loop + # implementation is 1.5x slower than vectorized. + for i in range(4): + line1 = jnp.stack([corners1[i, :], corners1[(i + 1) % 4, :]], axis=0) + for j in range(4): + line2 = jnp.stack([corners2[j, :], corners2[(j + 1) % 4, :]], axis=0) + intersections.append(intersect_line_segments(line1, line2)) + intersections = jnp.reshape(jnp.stack(intersections), (4, 4, 2)) + return intersections diff --git a/scenic/model_lib/base_models/classification_model.py b/scenic/model_lib/base_models/classification_model.py new file mode 100644 index 0000000000000000000000000000000000000000..d41bcb17051d0f82330564106f0b23ca123168fc --- /dev/null +++ b/scenic/model_lib/base_models/classification_model.py @@ -0,0 +1,199 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class for all classification models.""" + +import functools +from typing import Dict, Optional, Tuple, Union + +from flax.training import common_utils +from immutabledict import immutabledict +import jax.numpy as jnp +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils + + +# Standard default metrics for the classification models. +_CLASSIFICATION_METRICS = immutabledict({ + 'accuracy': + (model_utils.weighted_correctly_classified, model_utils.num_examples), + 'loss': (model_utils.weighted_unnormalized_softmax_cross_entropy, + model_utils.num_examples) +}) + + +def classification_metrics_function( + logits: jnp.ndarray, + batch: base_model.Batch, + target_is_onehot: bool = False, + metrics: base_model.MetricNormalizerFnDict = _CLASSIFICATION_METRICS, + axis_name: Union[str, Tuple[str, ...]] = 'batch', +) -> Dict[str, Tuple[float, int]]: + """Calculates metrics for the classification task. + + + Currently we assume each metric_fn has the API: + ```metric_fn(logits, targets, weights)``` + and returns an array of shape [batch_size]. We also assume that to compute + the aggregate metric, one should sum across all batches, then divide by the + total samples seen. In this way we currently only support metrics of the 1/N + sum f(inputs, targets). Note, the caller is responsible for dividing by + the normalizer when computing the mean of each metric. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + target_is_onehot: If the target is a one-hot vector. + metrics: The classification metrics to evaluate. The key is the name of the + metric, and the value is the metrics function. + axis_name: List of axes on which we run the pmsum. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples of + (metric, normalizer). + """ + if target_is_onehot: + one_hot_targets = batch['label'] + else: + one_hot_targets = common_utils.onehot(batch['label'], logits.shape[-1]) + weights = batch.get('batch_mask') # batch_mask might not be defined + + # This psum is required to correctly evaluate with multihost. Only host 0 + # will report the metrics, so we must aggregate across all hosts. The psum + # will map an array of shape [n_global_devices, batch_size] -> [batch_size] + # by summing across the devices dimension. The outer sum then sums across the + # batch dim. The result is then we have summed across all samples in the + # sharded batch. + evaluated_metrics = {} + for key, val in metrics.items(): + evaluated_metrics[key] = model_utils.psum_metric_normalizer( # pytype: disable=wrong-arg-types # jax-ndarray + (val[0](logits, one_hot_targets, weights), val[1]( # pytype: disable=wrong-arg-types # jax-types + logits, one_hot_targets, weights)), + axis_name=axis_name) + return evaluated_metrics # pytype: disable=bad-return-type # jax-types + + +class ClassificationModel(base_model.BaseModel): + """Defines commonalities between all classification models. + + A model is class with three members: get_metrics_fn, loss_fn, & a flax_model. + + get_metrics_fn returns a callable function, metric_fn, that calculates the + metrics and returns a dictionary. The metric function computes f(x_i, y_i) on + a minibatch, it has API: + ```metric_fn(logits, label, weights).``` + + The trainer will then aggregate and compute the mean across all samples + evaluated. + + loss_fn is a function of API + loss = loss_fn(logits, batch, model_params=None). + + This model class defines a softmax_cross_entropy_loss with weight decay, + where the weight decay factor is determined by config.l2_decay_factor. + + flax_model is returned from the build_flax_model function. A typical + usage pattern will be: + ``` + model_cls = model_lib.models.get_model_cls('fully_connected_classification') + model = model_cls(config, dataset.meta_data) + flax_model = model.build_flax_model + dummy_input = jnp.zeros(input_shape, model_input_dtype) + model_state, params = flax_model.init( + rng, dummy_input, train=False).pop('params') + ``` + And this is how to call the model: + variables = {'params': params, **model_state} + logits, new_model_state = flax_model.apply(variables, inputs, ...) + ``` + """ + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + batch)``` + """ + del split # For all splits, we return the same metric functions. + return functools.partial( + classification_metrics_function, + target_is_onehot=self.dataset_meta_data.get('target_is_onehot', False), + metrics=_CLASSIFICATION_METRICS) + + def get_metrics_fn_jit(self, + split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + batch)``` + """ + del split # For all splits, we return the same metric functions. + return functools.partial( + base_model.metrics_function_jit, + target_is_multihot=self.dataset_meta_data.get('target_is_onehot', + False), + metrics=_CLASSIFICATION_METRICS) + + def loss_function(self, + logits: jnp.ndarray, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Returns softmax cross entropy loss with an L2 penalty on the weights. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + weights = batch.get('batch_mask') + + if self.dataset_meta_data.get('target_is_onehot', False): + one_hot_targets = batch['label'] + else: + one_hot_targets = common_utils.onehot(batch['label'], logits.shape[-1]) + + sof_ce_loss = model_utils.weighted_softmax_cross_entropy( + logits, + one_hot_targets, + weights, + label_smoothing=self.config.get('label_smoothing')) + if self.config.get('l2_decay_factor') is None: + total_loss = sof_ce_loss + else: + l2_loss = model_utils.l2_regularization(model_params) + total_loss = sof_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss # pytype: disable=bad-return-type # jax-ndarray + + def build_flax_model(self): + raise NotImplementedError('Subclasses must implement build_flax_model().') + + def default_flax_model_config(self): + """Default config for the flax model that is built in `build_flax_model`. + + This function in particular serves the testing functions and supposed to + provide config tha are passed to the flax_model when it's build in + `build_flax_model` function, e.g., `model_dtype_str`. + """ + raise NotImplementedError( + 'Subclasses must implement default_flax_model_config().') diff --git a/scenic/model_lib/base_models/encoder_decoder_model.py b/scenic/model_lib/base_models/encoder_decoder_model.py new file mode 100644 index 0000000000000000000000000000000000000000..222a943391f5c9a83af15c3ffb228fbaaf334181 --- /dev/null +++ b/scenic/model_lib/base_models/encoder_decoder_model.py @@ -0,0 +1,222 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class for all encoder-decoder models.""" + +import functools +from typing import Dict, Optional, Tuple, Union + +from flax.training import common_utils +from immutabledict import immutabledict +import jax.numpy as jnp +import numpy as np +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils + + +def num_tokens(logits: jnp.ndarray, + one_hot_targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None) -> float: + """Computes number of tokens in the target to be used for normalization. + + It needs to have the same API as other defined metrics. + + Args: + logits: Unused. + one_hot_targets: Targets, in form of one-hot vectors. + weights: Input weights (can be used for accounting the padding in the + input). + + Returns: + Number of (non-padded) tokens in the target. + """ + del logits + + if weights is None: + return np.prod(one_hot_targets.shape[:2]) + assert weights.ndim == 2, ( + 'Weights should be a token level mask of shape [bs, len].') + return weights.sum() # pytype: disable=bad-return-type # jax-ndarray + + +# Standard default metrics for the encoder-decoder models. +_ENCODER_DECODER_METRICS = immutabledict({ + 'accuracy': (model_utils.weighted_correctly_classified, num_tokens), + # The loss is already normalized, so we set the normalizer to 1.0: + 'loss': (model_utils.weighted_softmax_cross_entropy, lambda *a, **kw: 1.0) +}) + +# Value used for clipping the reported preplexity. +_MAX_PERPLEXITY = 1.0e4 + + +def encoder_decoder_metrics_function( + logits: jnp.ndarray, + batch: base_model.Batch, + target_is_onehot: bool = False, + metrics: base_model.MetricNormalizerFnDict = _ENCODER_DECODER_METRICS, + axis_name: Union[str, Tuple[str, ...]] = 'batch', +) -> Dict[str, Tuple[float, int]]: + """Calculates metrics for the encoder-decoder models. + + + Currently we assume each metric_fn has the API: + ```metric_fn(logits, targets, weights)``` + and returns an array of shape [batch_size]. We also assume that to compute + the aggregate metric, one should sum across all batches, then divide by the + total samples seen. In this way we currently only support metrics of the 1/N + sum f(inputs, targets). Note, the caller is responsible for dividing by + the normalizer when computing the mean of each metric. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + target_is_onehot: If the target is a one-hot vector. + metrics: The encoder-decoder metrics to evaluate. The key is the name of the + metric, and the value is the metrics function. + axis_name: List of axes on which we run the pmsum. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples of + (metric, normalizer). + """ + if target_is_onehot: + one_hot_targets = batch['label'] + else: + one_hot_targets = common_utils.onehot(batch['label'], logits.shape[-1]) + weights = batch.get('batch_mask') # `batch_mask` might not be defined. + + # Expanding from sequence-level to token level masking. + if weights is not None: + weights = jnp.tile(jnp.expand_dims(weights, axis=1), + one_hot_targets.shape[1]) + + # This psum is required to correctly evaluate with multihost. Only host 0 + # will report the metrics, so we must aggregate across all hosts. The psum + # will map an array of shape [n_global_devices, batch_size] -> [batch_size] + # by summing across the devices dimension. The outer sum then sums across the + # batch dim. The result is then we have summed across all samples in the + # sharded batch. + evaluated_metrics = {} + for key, val in metrics.items(): + evaluated_metrics[key] = model_utils.psum_metric_normalizer( # pytype: disable=wrong-arg-types # jax-ndarray + (val[0](logits, one_hot_targets, weights), val[1]( # pytype: disable=wrong-arg-types # jax-types + logits, one_hot_targets, weights)), + axis_name=axis_name) + if key == 'loss': + # TODO(dehghani): Move this to the training loop. + # Calculate (clipped) perplexity after averaging log-perplexities: + evaluated_metrics['perplexity'] = (jnp.clip( + jnp.exp(evaluated_metrics['loss'][0] / evaluated_metrics['loss'][1]), + max=_MAX_PERPLEXITY), 1) + return evaluated_metrics # pytype: disable=bad-return-type # jax-types + + +class EncoderDecoderModel(base_model.BaseModel): + """Defines commonalities between all encoder-decoder models. + + A model is class with three members: get_metrics_fn, loss_fn, and a + flax_model. + + get_metrics_fn returns a callable function, metric_fn, that calculates the + metrics and returns a dictionary. The metric function computes f(x_i, y_i) on + a minibatch, it has API: + ```metric_fn(logits, label, weights).``` + + The trainer will then aggregate and compute the mean across all samples + evaluated. + + loss_fn is a function of API + loss = loss_fn(logits, batch, model_params=None). + + This model class defines a softmax_cross_entropy_loss with weight decay, + where the weight decay factor is determined by config.l2_decay_factor. + + flax_model is returned from the build_flax_model function. A typical + usage pattern will be: + ``` + model_cls = model_lib.models.get_model_cls('seq_to_seq') + model = model_cls(config, dataset.meta_data) + flax_model = model.build_flax_model + dummy_input = jnp.zeros(input_shape, model_input_dtype) + model_state, params = flax_model.init( + rng, dummy_input, train=False).pop('params') + ``` + And this is how to call the model: + variables = {'params': params, **model_state} + logits, new_model_state = flax_model.apply(variables, inputs, ...) + ``` + """ + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + batch)``` + """ + del split # For all splits, we return the same metric functions. + return functools.partial( + encoder_decoder_metrics_function, + target_is_onehot=self.dataset_meta_data.get('target_is_onehot', False), + metrics=_ENCODER_DECODER_METRICS) + + def loss_function(self, + logits: jnp.ndarray, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Returns softmax cross entropy loss with an L2 penalty on the weights. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + weights = batch.get('batch_mask') + + if self.dataset_meta_data.get('target_is_onehot', False): + one_hot_targets = batch['label'] + else: + one_hot_targets = common_utils.onehot(batch['label'], logits.shape[-1]) + + sof_ce_loss = model_utils.weighted_softmax_cross_entropy( + logits, + one_hot_targets, + weights, + label_smoothing=self.config.get('label_smoothing')) + if self.config.get('l2_decay_factor') is None: + total_loss = sof_ce_loss + else: + l2_loss = model_utils.l2_regularization(model_params) + total_loss = sof_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss # pytype: disable=bad-return-type # jax-ndarray + + def build_flax_model(self): + raise NotImplementedError('Subclasses must implement build_flax_model().') + + def default_flax_model_config(self): + """Default config for the flax model that is built in `build_flax_model`. + + This function in particular serves the testing functions and supposed to + provide config tha are passed to the flax_model when it's build in + `build_flax_model` function, e.g., `model_dtype_str`. + """ + raise NotImplementedError( + 'Subclasses must implement default_flax_model_config().') diff --git a/scenic/model_lib/base_models/model_utils.py b/scenic/model_lib/base_models/model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..2da77244caab55fb0f79866b7505fb250b7015d1 --- /dev/null +++ b/scenic/model_lib/base_models/model_utils.py @@ -0,0 +1,1018 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for models.""" + +import functools +from typing import Optional, Any, Tuple, Union + +import flax.linen as nn +import jax +import jax.numpy as jnp +import numpy as np + + +PyTree = Any +PyModule = Any +Array = Union[jnp.ndarray, np.ndarray] + + +def psum_metric_normalizer( + metrics: Tuple[jnp.ndarray, jnp.ndarray], + axis_name: Union[str, Tuple[str, ...]] = 'batch' +) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Applies psum over the given tuple of (metric, normalizer).""" + psumed_metric = jax.lax.psum(jnp.sum(metrics[0]), axis_name=axis_name) + psumed_normalizer = jax.lax.psum(jnp.sum(metrics[1]), axis_name=axis_name) + return (psumed_metric, psumed_normalizer) + + +def num_examples(logits: jnp.ndarray, + one_hot_targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None + ) -> Union[jnp.ndarray, int]: + del logits + if weights is None: + return one_hot_targets.shape[0] + return weights.sum() + + +def apply_weights(output: jnp.ndarray, weights: jnp.ndarray) -> jnp.ndarray: + """Applies given weights of the inputs in the minibatch to outputs. + + Note that weights can be per example (i.e. of shape `[batch,]`) or per + pixel/token (i.e. of shape `[batch, height, width]` or + `[batch, len]`) so we need to broadcast it to the output shape. + + Args: + output: Computed output, which can be loss or the correctly classified + examples, etc. + weights: Weights of inputs in the batch, which can be None or array of shape + [batch, ...]. + + Returns: + Weighted output. + """ + if output.ndim < weights.ndim: + raise ValueError('Output rank should be higher or equal to weights rank.') + desired_weights_shape = weights.shape + (1,) * (output.ndim - weights.ndim) + weights = jax.lax.broadcast_in_dim( + weights, + shape=desired_weights_shape, + broadcast_dimensions=tuple(range(weights.ndim))) + # Scale the outputs with weights. + return output * weights + + +def weighted_correctly_classified( + logits: jnp.ndarray, + one_hot_targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None) -> jnp.ndarray: + """Computes weighted number of correctly classified over the given batch. + + This computes the weighted number of correctly classified examples/pixels in a + single, potentially padded minibatch. If the minibatch/inputs is padded (i.e., + it contains null examples/pad pixels) it is assumed that weights is a binary + mask where 0 indicates that the example/pixel is null/padded. We assume the + trainer will aggregate and divide by number of samples. + + Args: + logits: Output of model in shape [batch, ..., num_classes]. + one_hot_targets: One hot vector of shape [batch, ..., num_classes]. + weights: None or array of shape [batch, ...] (rank of one_hot_targets -1). + + Returns: + The number of correctly classified examples in the given batch. + """ + if logits.ndim != one_hot_targets.ndim: + raise ValueError( + 'Incorrect shapes. Got shape %s logits and %s one_hot_targets' % + (str(logits.shape), str(one_hot_targets.shape))) + preds = jnp.argmax(logits, axis=-1) + targets = jnp.argmax(one_hot_targets, axis=-1) + correct = jnp.equal(preds, targets) + + if weights is not None: + correct = apply_weights(correct, weights) + + return correct.astype(jnp.int32) + + +def weighted_top_one_correctly_classified( + logits: jnp.ndarray, + multi_hot_targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None) -> jnp.ndarray: + """Computes weighted number of correctly classified, given top 1 class. + + This computes the weighted number of correctly classified examples/pixels in a + single, potentially padded minibatch, given top-one prediction. If the + minibatch/inputs is padded (i.e., it contains null examples/pad pixels) it is + assumed that weights is a binary mask where 0 indicates that the example/pixel + is null/padded. We assume the trainer will aggregate and divide by number of + samples. + + Args: + logits: Output of model in shape [batch, ..., num_classes]. + multi_hot_targets: Multi hot vector of shape [batch, ..., num_classes]. + weights: None or array of shape [batch, ...] (rank of one_hot_targets -1). + + Returns: + The number of correctly classified examples in the given batch, given top + one prediction. + """ + if logits.ndim != multi_hot_targets.ndim: + raise ValueError( + 'Incorrect shapes. Got shape %s logits and %s multi_hot_targets' % + (str(logits.shape), str(multi_hot_targets.shape))) + + top1_idx = jnp.argmax(logits, axis=-1)[..., None] + # Extracts the label at the highest logit index for each input. + top1_correct = jnp.take_along_axis(multi_hot_targets, top1_idx, axis=-1) + if weights is not None: + top1_correct = apply_weights(top1_correct, weights) + + return top1_correct + + +def weighted_topk_correctly_classified(logits: jnp.ndarray, + multi_hot_target: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + k: int = 5) -> jnp.ndarray: + """Computes weighted number of correctly classified given the top k prediction. + + This computes the weighted number of correctly classified examples/pixels in a + single, potentially padded minibatch, given the top-k prediction. In the + multi-hot target case, the sample is considered correct when any of the top-k + predictions matches any of the multi-hot targets. If the minibatch/inputs is + padded (i.e., it contains null examples/pad pixels) it is assumed that weights + is a binary mask where 0 indicates that the example/pixel is null/padded. We + assume the trainer will aggregate and divide by number of + samples. + + Args: + logits: Output of model in shape [batch, ..., num_classes]. + multi_hot_target: Multi hot vector of shape [batch, ..., num_classes]. + weights: None or array of shape [batch, ...] (rank of one_hot_target -1). + k: Number of top prediction to consider. + + Returns: + The number of correctly classified examples in the given batch, given top + k prediction. + """ + if logits.ndim != multi_hot_target.ndim: + raise ValueError( + 'Incorrect shapes. Got shape %s logits and %s one_hot_target' % + (str(logits.shape), str(multi_hot_target.shape))) + if k <= 0 or k > logits.shape[-1]: + raise ValueError('Incorrect k. k must be in [1,%s]' % + str(logits.shape[-1])) + + topk_pred = jax.lax.top_k(logits, k)[1] + + num_classes = logits.shape[-1] + multi_hot_pred = jnp.sum( + jax.nn.one_hot(topk_pred, num_classes=num_classes), axis=-2) + correct = jnp.any( + multi_hot_pred * multi_hot_target, axis=-1, keepdims=True + ).astype(jnp.float32) + + if weights is not None: + correct = apply_weights(correct, weights) + + return correct.astype(jnp.int32) + + +def weighted_precision_at_k(logits: jnp.ndarray, + multi_hot_target: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + k: int = 5) -> jnp.ndarray: + """Computes fraction of correct predictions among the top k predictions. + + This computes the weighted precision-at-k (i.e. the fraction of true positives + among the top k predicted classes) in a single, potentially padded minibatch. + If the minibatch/inputs is padded (i.e., it contains null examples/pad pixels) + it is assumed that weights is a binary mask where 0 indicates that the + example/pixel is null/padded. We assume the trainer will aggregate and divide + by number of samples. + + Args: + logits: Output of model in shape [batch, ..., num_classes]. + multi_hot_target: Multi hot vector of shape [batch, ..., num_classes]. + weights: None or array of shape [batch, ...] (rank of one_hot_target -1). + k: Number of top predictions to consider. + + Returns: + The precision for each example in the batch, given top k predictions. + """ + if logits.ndim != multi_hot_target.ndim: + raise ValueError( + 'Incorrect shapes. Got shape %s logits and %s one_hot_target' % + (str(logits.shape), str(multi_hot_target.shape))) + if k <= 0 or k > logits.shape[-1]: + raise ValueError('Incorrect k. k must be in [1,%s]' % + str(logits.shape[-1])) + + topk_pred = jax.lax.top_k(logits, k)[1] + + num_classes = logits.shape[-1] + multi_hot_pred = jnp.sum( + jax.nn.one_hot(topk_pred, num_classes=num_classes), axis=-2) + + true_positive = jnp.sum( + multi_hot_pred * multi_hot_target, axis=-1).astype(jnp.float32) + # Above, the model is forced to predict exactly k positive classes, so the sum + # of true and false positives is equal to k: + precision = true_positive / k + + if weights is not None: + precision = apply_weights(precision, weights) + + return precision + + +def weighted_recall(logits: Array, multi_hot_target: Array, + weights: Optional[Array] = None) -> Array: + """Computes weighted recall given the top k prediction. + + This computes the weighted number of correctly recalled examples/pixels in a + single, potentially padded minibatch, given the top-k prediction. Per sample, + k is the number of gt labels in that sample. If the minibatch/inputs is padded + (i.e., it contains null examples/pad pixels) it is assumed that weights is a + binary mask where 0 indicates that the example/pixel is null/padded. We assume + the trainer will aggregate and divide by number of samples. + + Args: + logits: float array; Output of model in shape [batch, ..., num_classes]. + multi_hot_target: Multi hot vector of shape [batch, ..., num_classes]. + weights: None or array of shape [batch, ...] (rank of multi_hot_target -1). + + Returns: + The fraction of correctly recalled labels. + """ + if logits.ndim != multi_hot_target.ndim: + raise ValueError( + 'Incorrect shapes. Got shape %s logits and %s one_hot_target' % + (str(logits.shape), str(multi_hot_target.shape))) + + num_classes = multi_hot_target.shape[-1] + + indices_top = jnp.argsort(logits, axis=-1)[..., ::-1] + predictions_at_top = jax.nn.one_hot(indices_top, num_classes) + correct_at_top = jnp.sum( + predictions_at_top * jnp.expand_dims(multi_hot_target, axis=-2), axis=-1) + + # Mask out (in)correct predictions that are not in top k, where k is the + # number of gt labels. + num_gt_labels = jnp.sum(multi_hot_target, axis=-1, keepdims=True) + mask = (num_gt_labels > jnp.arange(num_classes)).astype(jnp.int32) + + recall = jnp.sum(correct_at_top * mask, axis=-1) / ( + jnp.sum(multi_hot_target, axis=-1) + 1E-12) + + if weights is not None: + recall = apply_weights(recall, weights) + + return recall + + +def apply_label_smoothing(one_hot_targets: jnp.ndarray, + label_smoothing: Optional[float]) -> jnp.ndarray: + """Apply label smoothing to the one-hot targets. + + Applies label smoothing such that the on-values are transformed from 1.0 to + `1.0 - label_smoothing + label_smoothing / num_classes`, and the off-values + are transformed from 0.0 to `label_smoothing / num_classes`. + https://arxiv.org/abs/1512.00567 + + Note that another way of performing label smoothing (which we don't use here) + is to take `label_smoothing` mass from the on-values and distribute it to the + off-values; in other words, transform the on-values to `1.0 - label_smoothing` + and the off-values to `label_smoothing / (num_classes - 1)`. + http://jmlr.org/papers/v20/18-789.html + + + Args: + one_hot_targets: One-hot targets for an example, a [batch, ..., num_classes] + float array. + label_smoothing: A scalar in [0, 1] used to smooth the labels. + + Returns: + A float array of the same shape as `one_hot_targets` with smoothed label + values. + """ + on_value = 1.0 - label_smoothing + num_classes = one_hot_targets.shape[-1] + off_value = label_smoothing / num_classes + one_hot_targets = one_hot_targets * on_value + off_value + return one_hot_targets + + +def weighted_unnormalized_softmax_cross_entropy( + logits: jnp.ndarray, + one_hot_targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + label_smoothing: Optional[float] = None, + label_weights: Optional[jnp.ndarray] = None, + logits_normalized: bool = False, + keep_label_dimension: bool = False) -> jnp.ndarray: + """Computes weighted softmax cross entropy give logits and targets. + + This computes sum_(x,y) softmax-ce(x, y) for a single, potentially padded + minibatch. If the minibatch is padded (that is it contains null examples) + it is assumed that weights is a binary mask where 0 indicates that the + example is null. + + Args: + logits: Output of model in shape [batch, ..., num_classes]. + one_hot_targets: One hot vector of shape [batch, ..., num_classes]. + weights: None or array of shape [batch x ...] (rank of one_hot_targets -1). + label_smoothing: Scalar to use to smooth the one-hot labels. + label_weights: Weight per label of shape [num_classes]. + logits_normalized: If True, the logits are assumed to already be normalized. + keep_label_dimension: If True, the class dimension of the output loss is not + summed over. + + Returns: + The softmax cross entropy of the examples in the given batch. + """ + if logits.ndim != one_hot_targets.ndim: + raise ValueError( + 'Incorrect shapes. Got shape %s logits and %s one_hot_targets' % + (str(logits.shape), str(one_hot_targets.shape))) + + # Optionally apply label smoothing. + if label_smoothing is not None: + one_hot_targets = apply_label_smoothing(one_hot_targets, label_smoothing) + + # Optionally apply label weights. + if label_weights is not None: + one_hot_targets *= label_weights + + if not logits_normalized: + logits = nn.log_softmax(logits) + loss = -one_hot_targets * logits + if weights is not None: + loss = apply_weights(loss, weights) + + if not keep_label_dimension: + loss = loss.sum(axis=-1) + + return loss + + +def weighted_unnormalized_sigmoid_cross_entropy( + logits: jnp.ndarray, + multi_hot_targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + label_weights: Optional[jnp.ndarray] = None, + label_smoothing: Optional[float] = None, + logits_normalized: bool = False) -> jnp.ndarray: + """Computes weighted sigmoid cross entropy given logits and targets. + + This also called Binary Cross-Entropy Loss and it measures the probability + error in discrete classification tasks in which each class is independent and + not mutually exclusive. + This computes sum_(x,y) sigmoid-ce(x, y) for a single, potentially padded + minibatch. If the minibatch is padded (that is it contains null examples) + it is assumed that weights is a binary mask where 0 indicates that the + example is null. + + Args: + logits: Output of model in shape [batch, ..., num_classes]. + multi_hot_targets: Multi-hot vector of shape [batch, ..., num_classes]. + weights: None or array of shape [batch x ...] (rank of one_hot_targets -1). + This is the weight to apply to the loss computed for each example in the + batch. Can be used to ignore padded examples in the batch. + label_weights: None or array of shape broadcastable to the shape of logits. + Typically this would be [num_classes] and is the weight to apply to each + label. + label_smoothing: Scalar to use to smooth the one-hot labels. + logits_normalized: If True, the logits are assumed to be log probs. + + Returns: + The sigmoid cross entropy of the examples in the given batch. + """ + if logits.ndim != multi_hot_targets.ndim: + raise ValueError( + 'Incorrect shapes. Got shape %s logits and %s multi_hot_targets' % + (str(logits.shape), str(multi_hot_targets.shape))) + + # Optionally apply label smoothing. + if label_smoothing is not None: + multi_hot_targets = apply_label_smoothing(multi_hot_targets, + label_smoothing) + + if logits_normalized: + log_p, prob = logits, jnp.exp(logits) + log_not_p = jnp.log((1 + 1e-6) - prob) + else: + log_p, log_not_p = jax.nn.log_sigmoid(logits), jax.nn.log_sigmoid(-logits) + + loss = -(multi_hot_targets * log_p + + (1. - multi_hot_targets) * log_not_p) + + if label_weights is not None: + loss = loss * label_weights + + if weights is not None: + loss = apply_weights(loss, weights) + + return loss + + +def weighted_softmax_cross_entropy( + logits: jnp.ndarray, + one_hot_targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + label_smoothing: Optional[float] = None, + label_weights: Optional[jnp.ndarray] = None) -> jnp.ndarray: + """Same as weighted_unnormalized, but additionally takes a mean. + + Args: + logits: Output of model in shape [batch, ..., num_classes]. + one_hot_targets: One hot vector of shape [batch, ..., num_classes]. + weights: None or array of shape [batch x ...] (rank of one_hot_targets -1). + label_smoothing: float scalar to use to smooth the one-hot labels. + label_weights: Weight per label of shape [num_classes]. + + Returns: + The mean cross entropy of the examples in the given batch as a scalar. + """ + if weights is not None: + normalization = weights.sum() + else: + normalization = np.prod(one_hot_targets.shape[:-1]) + + unnormalized_softmax_ce = weighted_unnormalized_softmax_cross_entropy( + logits, one_hot_targets, weights, label_smoothing, label_weights) + return jnp.sum(unnormalized_softmax_ce) / (normalization + 1e-8) + + +def weighted_sigmoid_cross_entropy( + logits: jnp.ndarray, + multi_hot_targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + label_weights: Optional[jnp.ndarray] = None, + label_smoothing: Optional[float] = None) -> jnp.ndarray: + """Computes weighted sigmoid cross entropy given logits and targets. + + Args: + logits: Output of model in shape [batch, ..., num_classes]. + multi_hot_targets: Multi-hot vector of shape [batch, ..., num_classes]. + weights: None or array of shape [batch x ...] (rank of one_hot_targets -1). + label_weights: None or array of shape broadcastable to the shape of logits. + Typically this would be [num_classes] and is the weight to apply to each + label. + label_smoothing: Scalar to use to smooth the one-hot labels. + + Returns: + The mean cross entropy of the examples in the given batch as a scalar. + """ + if weights is not None: + normalization = weights.sum() + else: + normalization = np.prod(multi_hot_targets.shape[:-1]) + + unnormalized_sigmoid_ce = weighted_unnormalized_sigmoid_cross_entropy( + logits, + multi_hot_targets, + weights=weights, + label_weights=label_weights, + label_smoothing=label_smoothing) + return jnp.sum(unnormalized_sigmoid_ce) / (normalization + 1e-8) + + +def l2_regularization(params: PyTree): + """Calculate the L2 loss (square L2 norm), given parameters of the model. + + Args: + params: Parameters of the model. + + Returns: + L2 norm. + + """ + weight_penalty_params = jax.tree_util.tree_leaves(params) + return sum([jnp.sum(x**2) for x in weight_penalty_params if x.ndim > 1]) + + +def weighted_l1_loss(x: jnp.ndarray, + y: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + reduction: Optional[str] = None) -> jnp.ndarray: + """L1 loss with optional reduction specified. + + Args: + x: Input array of any shape. + y: Input array of shape broadcastable to that of x. + weights: Weights to apply to the loss. + reduction: Type of reduction, which is from [None, 'mean']. + + Returns: + reduction(jnp.abs(x - y)). 'mean' reduction takes the global mean. To use + customized normalization use 'none' reduction and scale loss in the caller. + """ + abs_diff = jnp.abs(x - y) + if weights is not None: + abs_diff = apply_weights(abs_diff, weights) + if not reduction: + return abs_diff + elif reduction == 'mean': + return abs_diff.mean() # pytype: disable=bad-return-type # jax-ndarray + + +def weighted_box_l1_loss( + pred: jnp.ndarray, + tgt: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + reduction: Optional[str] = None, + tight: bool = True, +) -> jnp.ndarray: + """L1 loss for bounding box with optional reduction specified. + + Args: + pred: Prediction boxes of shape (..., 4), where the last dimension has form + (x_min, y_min, x_max, y_max). + tgt: Target boxes of shape (..., 4), where the last dimension has form + (x_min, y_min, x_max, y_max). + weights: Weights to apply to the loss. + reduction: Type of reduction, which is from [None, 'mean']. + tight: If True, returns the vanilla L1 loss on the bounding box coordinates. + If False, returns loose bounding-box L1 loss, where prediction edges only + generate loss when they stretch outside the target box, but not when they + are within it. + + Returns: + reduction(jnp.abs(src - tgt)). 'mean' reduction takes the global mean. To + use customized normalization use 'none' reduction and scale loss in the + caller. + """ + if pred.shape[-1] != 4: + raise ValueError( + f'The last dimension of the prediction boxes must be 4.' + f' Got shape {pred.shape}.' + ) + if tgt.shape[-1] != 4: + raise ValueError( + f'The last dimension of the target boxes must be 4.' + f' Got shape {tgt.shape}.' + ) + if tight: + abs_diff = jnp.abs(pred - tgt) + else: + xy1, xy2 = jnp.split(pred - tgt, 2, axis=-1) + xy1 = jnp.minimum(xy1, 0.) + xy2 = jnp.maximum(xy2, 0.) + abs_diff = jnp.abs(jnp.concatenate([xy1, xy2], axis=-1)) + if weights is not None: + abs_diff = apply_weights(abs_diff, weights) + if not reduction: + return abs_diff + elif reduction == 'mean': + return abs_diff.mean() + else: + raise ValueError(f'Unknown reduction: {reduction}') + + +############################## Regression Loss ################################# + + +def weighted_squared_error( + predictions: jnp.ndarray, + targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + axis: Optional[Union[int, Tuple[int, ...]]] = None) -> jnp.ndarray: + """Computes weighted squared error given predictions and targets. + + This computes the squared_error of examples in a single, potentially + padded minibatch. If the minibatch is padded (that is it contains null + examples) it is assumed that weights is a binary mask where 0 indicates that + the example is null. + + Args: + predictions: Output of model in shape shape [batch, ..., n_features]. + targets: Array of shape [batch, ..., n_features]. + weights: None or array of shape [batch, ...]. This is the weight to apply + to the loss computed for each example in the batch. Can be used to ignore + padded examples in the batch. + axis: The axis (or axes) to compute the loss over. If not specified, all + dimensions besides the leading batch dimension are used. + + Returns: + The mean squared error for each example in the given batch. The output shape + depends on axis. + """ + if predictions.ndim != targets.ndim: + raise ValueError( + 'Incorrect shapes. Got shape %s predictions and %s targets' % + (str(predictions.shape), str(targets.shape))) + if axis is None: + # Sum over all features in each example in the batch: + axis = tuple(range(1, predictions.ndim)) + + error = targets - predictions + loss = jnp.square(error) + loss = jnp.sum(loss, axis=axis) + if weights is not None: + loss = apply_weights(loss, weights) + return loss + + +def weighted_mean_squared_error( + predictions: jnp.ndarray, + targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + axis: Optional[Union[int, Tuple[int, ...]]] = None) -> jnp.ndarray: + """Weighted mean of weighted_squared_error. + + Args: + predictions: Output of model in shape [batch, ..., num_features]. + targets: Targets of shape [batch, ..., num_features]. + weights: None or array of shape [batch,] This is the weight to apply to the + loss computed for each example in the batch. Can be used to ignore padded + examples in the batch. + axis: The axis (or axes) to compute the loss over. If not specified, all + dimensions besides the leading batch dimension are used. + + Returns: + The averaged mean squared error of all the examples in the given batch as a + scalar. + """ + unnormalized_mse = weighted_squared_error( + predictions=predictions, targets=targets, weights=weights, axis=axis) + + if weights is not None: + # Divide by sum of the broadcasted weights: + broadcasted_shape = weights.shape + (1,) * ( + unnormalized_mse.ndim - weights.ndim) + broadcasted_weights = jax.lax.broadcast_in_dim( + weights, + shape=broadcasted_shape, + broadcast_dimensions=tuple(range(weights.ndim))) + normalization = jnp.sum(broadcasted_weights * + jnp.ones(unnormalized_mse.shape)) + else: + # Divide by number of examples: + normalization = unnormalized_mse.size + return jnp.sum(unnormalized_mse) / (normalization + 1e-8) + + +def weighted_absolute_error( + predictions: jnp.ndarray, + targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + axis: Optional[Union[int, Tuple[int, ...]]] = None) -> jnp.ndarray: + """Computes weighted absolute error given predictions and targets. + + This computes the absolute_error of examples in a single, potentially + padded minibatch. If the minibatch is padded (that is it contains null + examples) it is assumed that weights is a binary mask where 0 indicates that + the example is null. + + Args: + predictions: Output of model in shape shape [batch, ..., n_features]. + targets: Array of shape [batch, ..., n_features]. + weights: None or array of shape [batch, ...] This is the weight to apply to + the loss computed for each example in the batch. Can be used to ignore + padded examples in the batch. + axis: The axis (or axes) to compute the loss over. If not specified, all + dimensions besides the leading batch dimension are used. + + Returns: + The mean absolute error for each example in the given batch. The output + shape depends on axis. + """ + if predictions.ndim != targets.ndim: + raise ValueError( + 'Incorrect shapes. Got shape %s predictions and %s targets' % + (str(predictions.shape), str(targets.shape))) + if axis is None: + # Sum over all features in each example in the batch: + axis = tuple(range(1, predictions.ndim)) + + error = targets - predictions + loss = jnp.absolute(error) + # Sum over all features in each example in the batch: + loss = jnp.sum(loss, axis=axis) + if weights is not None: + loss = apply_weights(loss, weights) + return loss + + +def weighted_mean_absolute_error( + predictions: jnp.ndarray, + targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + axis: Optional[Union[int, Tuple[int, ...]]] = None) -> jnp.ndarray: + """Weighted mean of weighted_unnormalized_mean_absolute_error. + + Args: + predictions: Output of model in shape [batch, ..., num_features]. + targets: Targets of shape [batch, ..., num_features]. + weights: None or array of shape [batch, ...]. This is the weight to apply + to the loss computed for each example in the batch. Can be used to ignore + padded examples in the batch. + axis: The axis (or axes) to compute the loss over. If not specified, all + dimensions besides the leading batch dimension are used. + + Returns: + The averaged mean absolute error of all the examples in the given batch as + a scalar. + """ + unnormalized_mae = weighted_absolute_error( + predictions=predictions, targets=targets, weights=weights, axis=axis) + + if weights is not None: + # Divide by sum of weights: + normalization = weights.sum() + else: + # Divide by batch size: + normalization = unnormalized_mae.shape[0] + return jnp.sum(unnormalized_mae) / (normalization + 1e-8) + + +############################## Focal Loss ###################################### + + +def focal_softmax_cross_entropy( + logits: jnp.ndarray, + one_hot_targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + label_smoothing: Optional[float] = None, + label_weights: Optional[jnp.ndarray] = None, + logits_normalized: bool = False, + gamma: Optional[float] = 2.0, + keep_label_dimension: bool = False) -> jnp.ndarray: + """Computes focal softmax cross-entropy given logits and targets. + + Focal loss as defined in https://arxiv.org/abs/1708.02002. Assuming y is the + target vector and p is the predicted probability for the class, then: + + p_t = p if y == 1 and 1-p otherwise + Focal loss = -(1-p_t)**gamma * log(p_t) + + NOTE: this is weighted unnormalized computation of loss that returns the loss + of examples in the batch. If you are using it as a loss function, you can + use the normalilzed version as: + ``` + unnormalized_loss = focal_softmax_cross_entropy(...) + if weights is not None: + normalization = weights.sum() + else: + normalization = np.prod(one_hot_targets.shape[:-1]) + loss = jnp.sum(unnormalized_loss) / (normalization + 1e-8) + ``` + + Args: + logits: Output of model in shape [batch, ..., num_classes]. + one_hot_targets: One hot vector of shape [batch, ..., num_classes]. + weights: None or array of shape [batch, ...] (rank of one_hot_targets -1). + label_smoothing: Scalar to use to smooth the one-hot labels. + label_weights: Weight per label of shape [num_classes]. + logits_normalized: If True, the logits are assumed to be log probs. + gamma: Modulating factor of the focal loss. + keep_label_dimension: If True, the class dimension of the output loss is not + summed over. + + Returns: + The loss of the examples in the given batch. + """ + loss = weighted_unnormalized_softmax_cross_entropy( + logits, one_hot_targets, weights=None, label_smoothing=label_smoothing, + label_weights=label_weights, logits_normalized=logits_normalized, + keep_label_dimension=True) + prob = jnp.exp(logits) if logits_normalized else jax.nn.softmax(logits) + prob = (prob * one_hot_targets).sum(axis=-1, keepdims=True) + loss *= (1. - prob)**gamma + if weights is not None: + loss = apply_weights(loss, weights) + + if not keep_label_dimension: + loss = loss.sum(axis=-1) + + return loss + + +def focal_sigmoid_cross_entropy( + logits: jnp.ndarray, + multi_hot_targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + label_smoothing: Optional[float] = None, + label_weights: Optional[jnp.ndarray] = None, + logits_normalized: bool = False, + alpha: Optional[float] = 0.5, + gamma: Optional[float] = 2.0) -> jnp.ndarray: + """Computes focal softmax cross-entropy given logits and targets. + + Focal loss as defined in https://arxiv.org/abs/1708.02002. Assuming y is the + target vector and p is the predicted probability for the class, then: + + p_t = p if y == 1 and 1-p otherwise + alpha_t = alpha if y == 1 and 1-alpha otherwise + + Focal loss = -alpha_t * (1-p_t)**gamma * log(p_t) + + NOTE: this is weighted unnormalized computation of loss that returns the loss + of examples in the batch. If you are using it as a loss function, you can + use the normalilzed version as: + ``` + unnormalized_loss = focal_sigmoid_cross_entropy(...) + if weights is not None: + normalization = weights.sum() + else: + normalization = np.prod(multi_hot_targets.shape[:-1]) + loss = jnp.sum(unnormalized_loss) / (normalization + 1e-8) + ``` + + Args: + logits: Output of model in shape [batch, ..., num_classes]. + multi_hot_targets: Multi-hot vector of shape [batch, ..., num_classes]. + weights: None or array of shape [batch, ...] (rank of one_hot_targets -1). + label_smoothing: Scalar to use to smooth the one-hot labels. + label_weights: Weight per label of shape [num_classes]. + logits_normalized: If True, the logits are assumed to be log probs. + alpha: Balancing factor of the focal loss. + gamma: Modulating factor of the focal loss. + + Returns: + The loss of the examples in the given batch. + """ + # Optionally apply label smoothing. + if label_smoothing is not None: + multi_hot_targets = apply_label_smoothing(multi_hot_targets, + label_smoothing) + if logits_normalized: + log_p, prob = logits, jnp.exp(logits) + log_not_p = jnp.log((1 + 1e-6) - prob) + else: + log_p, log_not_p = jax.nn.log_sigmoid(logits), jax.nn.log_sigmoid(-logits) + + loss = -(multi_hot_targets * log_p + (1. - multi_hot_targets) * log_not_p) + + p_t = jnp.exp(-loss) + loss *= (1 - p_t)**gamma + loss *= alpha * multi_hot_targets + (1 - alpha) * (1 - multi_hot_targets) + + if label_weights is not None: + loss = loss * label_weights + + if weights is not None: + loss = apply_weights(loss, weights) + return loss + + +############################## Misc ###################################### + + +@functools.partial(jax.vmap, in_axes=[0, 0], out_axes=0) +def simple_gather(x: jnp.ndarray, idx: jnp.ndarray) -> jnp.ndarray: + """Gathers `x` using the indices in `idx`. + + `output[i] = x[i, idx[i]]` . This simple gather operation assumes that the + first dimension is the batch dimension. The indices index into the second + dimension. The rest of the dimensions are copied as is from `x` into output. + Note that the implementation below only handles a single element in the batch. + `jax.vmap` extends this to the batch dimension. + + Args: + x: Inputs of shape [bs, n, d]. + idx: An array of shape [bs, m] and dtype jnp.int32 or int64 that specifies + indexes we want to gather from x. + + Returns: + Gathered output of shape [bs, m, d]. + """ + return x[idx] + + +def confusion_matrix(y_true: Array, + y_pred: Array, + num_classes: int, + weights: Optional[Array] = None, + np_backbone: PyModule = jnp) -> Array: + """Computes the confusion matrix between y_true and y_pred. + + Args: + y_true: Array of true labels. + y_pred: Array of predicted labels. + num_classes: Number of classes. + weights: nd-array, Weight of each datapoint (e.g. for masking). + np_backbone: numpy module: Either the regular numpy package or jax.numpy. + + Returns: + A [num_classes, num_classes] confusion matrix, normalized by the number of + elements in y_true/y_pred. + """ + assert y_true.shape == y_pred.shape + if weights is None: + weights = np_backbone.ones_like(y_true) + else: + assert y_true.shape == weights.shape + + # If weights are all zero, histogram2d returns NaN. To avoid this, set weights + # to 1 and then set output to zero below: + weights_all_zero = 1.0 - np_backbone.any(weights).astype(np_backbone.float32) + weights = weights + weights_all_zero + + cm, *_ = np_backbone.histogram2d( + y_true.ravel(), + y_pred.ravel(), + bins=np_backbone.arange(num_classes + 1), + weights=None if weights is None else weights.ravel()) + + # If weights are all zero, set the confusion matrix to zero: + cm = cm * (1.0 - weights_all_zero) + return cm + + +def mean_iou(cm: np.ndarray) -> Tuple[np.ndarray, np.ndarray]: + """Computes the mean intersection-over-union, given a confusion matrix. + + Args: + cm: array_like; [num_classes, num_classes] confusion matrix. + + Returns: + Scalar mean intersection-over-union score. + """ + # TODO(mjlm): Check the mean IoU computation for correctness (end to end). + # Based on experimental/brain/off_the_grid/lib/metrics.py: + + sum_over_row = np.sum(cm, axis=0) + sum_over_col = np.sum(cm, axis=1) + true_positives = np.diag(cm) + + # sum_over_row + sum_over_col = + # 2 * true_positives + false_positives + false_negatives. + denominator = sum_over_row + sum_over_col - true_positives + + # The mean is only computed over classes that appear in the + # label or prediction tensor. If the denominator is 0, we need to + # ignore the class. + iou_per_class = true_positives / denominator + return (np.nan_to_num(np.nanmean(iou_per_class)), + np.nan_to_num(iou_per_class)) + + +def dice_loss(inputs: jnp.ndarray, + targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + all_pairs: bool = False, + eps: float = 1.0, + interpolation: str = 'nearest') -> jnp.ndarray: + """Computes the Dice loss given panoptic segmentation logits and targets. + + This loss is based on the Dice coefficient (F-1 score). For details, see + https://arxiv.org/abs/2005.12872 and https://arxiv.org/pdf/1606.04797.pdf. + + Args: + inputs: Predicted mask logits with shape [batch, num_objects, H, W]. + targets: Target masks with shape [batch, num_objects, H, W]. + weights: Array of shape [batch, ...]. + all_pairs: Whether to compute the loss for all object pairs or not. + eps: Epsilon for numerical stability. + interpolation: Method to use for upsampling inputs to target size. + + Returns: + If all_pairs == True, returns a [bs, n, m] pairwise matrix, of dice loss. + If all_pairs == False, returns a [bs, n] matrix of dice loss. + """ + _, n, h, w = inputs.shape + b, m, _, _ = targets.shape + + # Downsample targets to match prediction: + # TODO(mjlm): Check if it would be better to upsample predictions. + # For now, we downsample targets to save memory. + targets = jax.image.resize( + targets, shape=[b, m, h, w], method=interpolation, antialias=True) + + # TODO(mjlm): Also try softmax instead of sigmoid: + # As in MaX-DeepLab: + inputs = jax.nn.sigmoid(inputs) + + inputs = jnp.reshape(inputs, [b, n, h * w]) + targets = jnp.reshape(targets, [b, m, h * w]) + if all_pairs: + numerator = 2 * jnp.einsum('bnp,bkp->bnk', inputs, targets) + denominator = (jnp.sum(inputs[:, :, None, :], axis=-1) + + jnp.sum(targets[:, None, :, :], axis=-1)) + else: + assert n == m + numerator = 2 * jnp.einsum('bnp,bnp->bn', inputs, targets) + denominator = jnp.sum(inputs + targets, axis=-1) + loss = 1.0 - (numerator + eps) / (denominator + eps) + + if weights is not None: + loss = apply_weights(loss, weights) + + return loss diff --git a/scenic/model_lib/base_models/multilabel_classification_model.py b/scenic/model_lib/base_models/multilabel_classification_model.py new file mode 100644 index 0000000000000000000000000000000000000000..bca1fa19283c3f33613995ed90fe775b4fc36a8c --- /dev/null +++ b/scenic/model_lib/base_models/multilabel_classification_model.py @@ -0,0 +1,207 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class for all multi-label classification models.""" + +import functools +from typing import Dict, Optional, Tuple, Union + +from flax.training import common_utils +from immutabledict import immutabledict # pylint: disable=g-importing-member +import jax.numpy as jnp +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils + + +# Standard default metrics for the multi-label classification models. +_MULTI_LABEL_CLASSIFICATION_METRICS = immutabledict({ + 'prec@1': (model_utils.weighted_top_one_correctly_classified, + model_utils.num_examples), + 'loss': (model_utils.weighted_unnormalized_sigmoid_cross_entropy, + model_utils.num_examples) +}) + + +def multilabel_classification_metrics_function( + logits: jnp.ndarray, + batch: base_model.Batch, + target_is_multihot: bool = False, + metrics: base_model.MetricNormalizerFnDict = _MULTI_LABEL_CLASSIFICATION_METRICS, + axis_name: Union[str, Tuple[str, ...]] = 'batch', +) -> Dict[str, Tuple[float, int]]: + """Calculates metrics for the multi-label classification task. + + Currently we assume each metric_fn has the API: + ```metric_fn(logits, targets, weights)``` + and returns an array of shape [batch_size]. We also assume that to compute + the aggregate metric, one should sum across all batches, then divide by the + total samples seen. In this way we currently only support metrics of the 1/N + sum f(inputs, targets). Note, the caller is responsible for dividing by + the normalizer when computing the mean of each metric. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + target_is_multihot: If the target is a multi-hot vector. + metrics: The multi-label classification metrics to evaluate. The key is the + name of the metric, and the value is the metrics function. + axis_name: List of axes on which we run the pmsum. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples of + (metric, normalizer). + """ + if target_is_multihot: + multihot_target = batch['label'] + else: + # This is to support running a multi-label classification model on + # single-label classification tasks: + multihot_target = common_utils.onehot(batch['label'], logits.shape[-1]) + weights = batch.get('batch_mask') # batch_mask might not be defined + + # This psum is required to correctly evaluate with multihost. Only host 0 + # will report the metrics, so we must aggregate across all hosts. The psum + # will map an array of shape [n_global_devices, batch_size] -> [batch_size] + # by summing across the devices dimension. The outer sum then sums across the + # batch dim. The result is then we have summed across all samples in the + # sharded batch. + evaluated_metrics = {} + for key, val in metrics.items(): + evaluated_metrics[key] = model_utils.psum_metric_normalizer( # pytype: disable=wrong-arg-types # jax-ndarray + (val[0](logits, multihot_target, weights), val[1]( # pytype: disable=wrong-arg-types # jax-types + logits, multihot_target, weights)), + axis_name=axis_name) + return evaluated_metrics # pytype: disable=bad-return-type # jax-types + + +class MultiLabelClassificationModel(base_model.BaseModel): + """Defines commonalities between all multi-label classification models. + + A model is class with three members: get_metrics_fn, loss_fn, and a + flax_model. + + get_metrics_fn returns a callable function, metric_fn, that calculates the + metrics and returns a dictionary. The metric function computes f(x_i, y_i) on + a minibatch, it has API: + ```metric_fn(logits, label, weights).``` + + The trainer will then aggregate and compute the mean across all samples + evaluated. + + loss_fn is a function of API + loss = loss_fn(logits, batch, model_params=None). + + This model class defines a sigmoid_cross_entropy_loss with weight decay, where + the weight decay factor is determined by config.l2_decay_factor. + + flax_model is returned from the build_flax_model function. A typical + usage pattern will be: + ``` + model_cls = model_lib.models.get_model_cls( + 'fully_connected_multilabel_classification') + model = model_cls(config, dataset.meta_data) + flax_model = model.build_flax_model + dummy_input = jnp.zeros(input_shape, model_input_dtype) + model_state, params = flax_model.init( + rng, dummy_input, train=False).pop('params') + ``` + And this is how to call the model: + variables = {'params': params, **model_state} + logits, new_model_state = flax_model.apply(variables, inputs, ...) + ``` + """ + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + batch)``` + """ + del split # For all splits, we return the same metric functions. + return functools.partial( + multilabel_classification_metrics_function, + target_is_multihot=self.dataset_meta_data.get('target_is_onehot', + False), + metrics=_MULTI_LABEL_CLASSIFICATION_METRICS) + + def get_metrics_fn_jit(self, + split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + batch)``` + """ + del split # For all splits, we return the same metric functions. + return functools.partial( + base_model.metrics_function_jit, + target_is_one_or_multihot=self.dataset_meta_data.get('target_is_onehot', + False), + metrics=_MULTI_LABEL_CLASSIFICATION_METRICS) + + def loss_function( + self, + logits: jnp.ndarray, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None, + ) -> float: + """Returns sigmoid cross entropy loss with an L2 penalty on the weights. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + weights = batch.get('batch_mask') + + if self.dataset_meta_data.get('target_is_onehot', False): + multihot_target = batch['label'] + else: + # this is to support running a multi-label classification model on + # single-label classification tasks + multihot_target = common_utils.onehot(batch['label'], logits.shape[-1]) + + sig_ce_loss = model_utils.weighted_sigmoid_cross_entropy( + logits, + multihot_target, + weights, + label_smoothing=self.config.get('label_smoothing')) + if self.config.get('l2_decay_factor') is None: + total_loss = sig_ce_loss + else: + l2_loss = model_utils.l2_regularization(model_params) + total_loss = sig_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss # pytype: disable=bad-return-type # jax-ndarray + + def build_flax_model(self): + raise NotImplementedError('Subclasses must implement build_flax_model().') + + def default_flax_model_config(self): + """Default config for the flax model that is built in `build_flax_model`. + + This function in particular serves the testing functions and supposed to + provide config tha are passed to the flax_model when it's build in + `build_flax_model` function, e.g., `model_dtype_str`. + """ + raise NotImplementedError( + 'Subclasses must implement default_flax_model_config().') diff --git a/scenic/model_lib/base_models/regression_model.py b/scenic/model_lib/base_models/regression_model.py new file mode 100644 index 0000000000000000000000000000000000000000..7809ea1d2a1656f5a0be9f5daddc8bb1a0b4fd13 --- /dev/null +++ b/scenic/model_lib/base_models/regression_model.py @@ -0,0 +1,156 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class for all regression models.""" + +import functools +from typing import Dict, Optional, Tuple, Union + +from immutabledict import immutabledict +import jax.numpy as jnp +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils + + +_REGRESSION_METRICS = immutabledict({ + 'mean_squared_error': + (model_utils.weighted_squared_error, model_utils.num_examples) +}) + + +def regression_metrics_function( + predictions: jnp.ndarray, + batch: base_model.Batch, + metrics: base_model.MetricNormalizerFnDict = _REGRESSION_METRICS, + axis_name: Union[str, Tuple[str, ...]] = 'batch', +) -> Dict[str, Tuple[float, int]]: + """Calculate metrics for the regression task. + + Currently we assume each metric_fn has the API: + ```metric_fn(predictions, targets, weights)``` + and returns an array of shape [batch,]. We also assume that to compute + the aggregate metric, one should sum across all batches, then divide by the + total samples seen. In this way we currently only support metrics of the 1/N + sum f(inputs, targets). Note, the caller is responsible for dividing by + the normalizer when computing the mean of each metric. + + Args: + predictions: Output of model in shape [batch, length]. + batch: Batch (dict) with keys 'targets' and optionally 'batch_mask'. + metrics: The regression metrics to evaluate. The key is the + name of the metric, and the value is the metrics function. + axis_name: List of axes on which we run the pmsum. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples of + (metric, normalizer). + """ + targets = batch['targets'] + weights = batch.get('batch_mask') + evaluated_metrics = {} + for key, val in metrics.items(): + evaluated_metrics[key] = model_utils.psum_metric_normalizer( + (val[0](predictions, targets, weights), val[1](predictions, targets, # pytype: disable=wrong-arg-types # jax-ndarray + weights)), + axis_name=axis_name) + return evaluated_metrics # pytype: disable=bad-return-type # jax-ndarray + + +class RegressionModel(base_model.BaseModel): + """Defines commonalities between all regression models. + + A model is class with three members: get_metrics_fn, loss_fn, and a + flax_model. + + `get_metrics_fn` returns a callable function, metric_fn, that calculates the + metrics and returns a dictionary. The metric function computes f(x_i, y_i) on + a minibatch, it has API: + ```metric_fn(predictions, targets, weights).``` + + The trainer will then aggregate and compute the mean across all samples + evaluated. By default, both the metric and loss are the mean squared error. + + loss_fn is a function of API + loss = loss_fn(predictions, batch, model_params=None). + + flax_model is returned from the build_flax_model function. A typical + usage pattern will be: + ``` + model_cls = model_lib.models.get_model_cls( + 'my_regression_model') + model = model_cls(config, dataset.meta_data) + flax_model = model.build_flax_model + dummy_input = jnp.zeros(input_shape, model_input_dtype) + model_state, params = flax_model.init( + rng, dummy_input, train=False).pop('params') + ``` + The model can then be applied by: + variables = {'params': params, **model_state} + predictions, new_model_state = flax_model.apply(variables, inputs, ...) + ``` + """ + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + By default, we return the same metric for each split. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: + ```metrics_fn(predictions, batch)``` + """ + + del split # Same function for all splits. + return functools.partial( + regression_metrics_function, metrics=_REGRESSION_METRICS) + + def loss_function(self, + predictions: jnp.ndarray, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Returns the (weighted) mean squared error. + + Args: + predictions: Output of model in shape [batch, length]. + batch: Batch (dict) with keys 'targets' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + The (weighted) mean squared error. + """ + weights = batch.get('batch_mask') + targets = batch['targets'] + + total_loss = model_utils.weighted_mean_squared_error( + predictions, targets, weights) + if self.config.get('l2_decay_factor'): + l2_loss = model_utils.l2_regularization(model_params) + total_loss += 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss # pytype: disable=bad-return-type # jax-ndarray + + def build_flax_model(self): + raise NotImplementedError('Subclasses must implement build_flax_model().') + + def default_flax_model_config(self): + """Default config for the flax model that is built in `build_flax_model`. + + This function in particular serves the testing functions and supposed to + provide config tha are passed to the flax_model when it's build in + `build_flax_model` function, e.g., `model_dtype_str`. + """ + raise NotImplementedError( + 'Subclasses must implement default_flax_model_config().') diff --git a/scenic/model_lib/base_models/segmentation_model.py b/scenic/model_lib/base_models/segmentation_model.py new file mode 100644 index 0000000000000000000000000000000000000000..8f89400393692c1e7e3bf5b23866f4264db43d12 --- /dev/null +++ b/scenic/model_lib/base_models/segmentation_model.py @@ -0,0 +1,264 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class for all semantic segmentation models.""" + +import functools +from typing import Any, Callable, List, Dict, Optional, Tuple, Union + +from flax.training import common_utils +from immutabledict import immutabledict +import jax.numpy as jnp +import numpy as np +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils + + +GlobalMetricFn = Callable[[List[jnp.ndarray], Dict[str, Any]], Dict[str, float]] + + +def num_pixels(logits: jnp.ndarray, + one_hot_targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None) -> float: + """Computes number of pixels in the target to be used for normalization. + + It needs to have the same API as other defined metrics. + + Args: + logits: Unused. + one_hot_targets: Targets, in form of one-hot vectors. + weights: Input weights (can be used for accounting the padding in the + input). + + Returns: + Number of (non-padded) pixels in the input. + """ + del logits + if weights is None: + return np.prod(one_hot_targets.shape[:3]) + assert weights.ndim == 3, ( + 'For segmentation task, the weights should be a pixel level mask.') + return weights.sum() # pytype: disable=bad-return-type # jax-ndarray + + +# Standard default metrics for the semantic segmentation models. +_SEMANTIC_SEGMENTATION_METRICS = immutabledict({ + 'accuracy': (model_utils.weighted_correctly_classified, num_pixels), + + # The loss is already normalized, so we set num_pixels to 1.0: + 'loss': (model_utils.weighted_softmax_cross_entropy, lambda *a, **kw: 1.0) +}) + + +def semantic_segmentation_metrics_function( + logits: jnp.ndarray, + batch: base_model.Batch, + target_is_onehot: bool = False, + metrics: base_model.MetricNormalizerFnDict = _SEMANTIC_SEGMENTATION_METRICS, + axis_name: Union[str, Tuple[str, ...]] = 'batch', +) -> Dict[str, Tuple[jnp.ndarray, jnp.ndarray]]: + """Calculates metrics for the semantic segmentation task. + + Currently we assume each metric_fn has the API: + ```metric_fn(logits, targets, weights)``` + and returns an array of shape [batch_size]. We also assume that to compute + the aggregate metric, one should sum across all batches, then divide by the + total samples seen. In this way we currently only support metrics of the 1/N + sum f(inputs, targets). Note, the caller is responsible for dividing by + the normalizer when computing the mean of each metric. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + target_is_onehot: If the target is a one-hot vector. + metrics: The semantic segmentation metrics to evaluate. The key is the name + of the metric, and the value is the metrics function. + axis_name: List of axes on which we run the pmsum. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples of + (metric, normalizer). + """ + if target_is_onehot: + one_hot_targets = batch['label'] + else: + one_hot_targets = common_utils.onehot(batch['label'], logits.shape[-1]) + weights = batch.get('batch_mask') # batch_mask might not be defined + + # This psum is required to correctly evaluate with multihost. Only host 0 + # will report the metrics, so we must aggregate across all hosts. The psum + # will map an array of shape [n_global_devices, batch_size] -> [batch_size] + # by summing across the devices dimension. The outer sum then sums across the + # batch dim. The result is then we have summed across all samples in the + # sharded batch. + evaluated_metrics = {} + for key, val in metrics.items(): + evaluated_metrics[key] = model_utils.psum_metric_normalizer( # pytype: disable=wrong-arg-types # jax-ndarray + (val[0](logits, one_hot_targets, weights), val[1]( # pytype: disable=wrong-arg-types # jax-types + logits, one_hot_targets, weights)), + axis_name=axis_name) + return evaluated_metrics + + +class SegmentationModel(base_model.BaseModel): + """Defines commonalities between all semantic segmentation models. + + A model is class with three members: get_metrics_fn, loss_fn, and a + flax_model. + + get_metrics_fn returns a callable function, metric_fn, that calculates the + metrics and returns a dictionary. The metric function computes f(x_i, y_i) on + a minibatch, it has API: + ```metric_fn(logits, label, weights).``` + + The trainer will then aggregate and compute the mean across all samples + evaluated. + + loss_fn is a function of API + loss = loss_fn(logits, batch, model_params=None). + + This model class defines a softmax_cross_entropy_loss with weight decay, + where the weight decay factor is determined by config.l2_decay_factor. + + flax_model is returned from the build_flax_model function. A typical + usage pattern will be: + ``` + model_cls = model_lib.models.get_model_cls('simple_cnn_segmentation') + model = model_cls(config, dataset.meta_data) + flax_model = model.build_flax_model + dummy_input = jnp.zeros(input_shape, model_input_dtype) + model_state, params = flax_model.init( + rng, dummy_input, train=False).pop('params') + ``` + And this is how to call the model: + variables = {'params': params, **model_state} + logits, new_model_state = flax_model.apply(variables, inputs, ...) + ``` + """ + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + batch)``` + """ + del split # For all splits, we return the same metric functions. + return functools.partial( + semantic_segmentation_metrics_function, + target_is_onehot=self.dataset_meta_data.get('target_is_onehot', False), + metrics=_SEMANTIC_SEGMENTATION_METRICS) + + def loss_function(self, + logits: jnp.ndarray, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Returns softmax cross entropy loss with an L2 penalty on the weights. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + weights = batch.get('batch_mask') + + if self.dataset_meta_data.get('target_is_onehot', False): + one_hot_targets = batch['label'] + else: + one_hot_targets = common_utils.onehot(batch['label'], logits.shape[-1]) + + sof_ce_loss = model_utils.weighted_softmax_cross_entropy( + logits, + one_hot_targets, + weights, + label_smoothing=self.config.get('label_smoothing'), + label_weights=self.get_label_weights()) + if self.config.get('l2_decay_factor') is None: + total_loss = sof_ce_loss + else: + l2_loss = model_utils.l2_regularization(model_params) + total_loss = sof_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss # pytype: disable=bad-return-type # jax-ndarray + + def get_label_weights(self) -> jnp.ndarray: + """Returns labels' weights to be used for computing weighted loss. + + This can used for weighting the loss terms based on the amount of available + data for each class, when we have un-balances data for different classes. + """ + if not self.config.get('class_rebalancing_factor'): + return None # pytype: disable=bad-return-type # jax-ndarray + if 'class_proportions' not in self.dataset_meta_data: + raise ValueError( + 'When `class_rebalancing_factor` is nonzero, `class_proportions` must' + ' be provided in `dataset_meta_data`.') + w = self.config.get('class_rebalancing_factor') + assert 0.0 <= w <= 1.0, '`class_rebalancing_factor` must be in [0.0, 1.0]' + proportions = self.dataset_meta_data['class_proportions'] + proportions = np.maximum(proportions / np.sum(proportions), 1e-8) + # Interpolate between no rebalancing (w==0.0) and full reweighting (w==1.0): + proportions = w * proportions + (1.0 - w) + weights = 1.0 / proportions + weights /= np.sum(weights) # Normalize so weights sum to 1. + weights *= len(weights) # Scale so weights sum to num_classes. + return weights + + def get_global_metrics_fn(self) -> GlobalMetricFn: + """Returns a callable metric function for global metrics. + + The return function implements metrics that require the prediction for the + entire test/validation dataset in one place and has the following API: + ```global_metrics_fn(all_confusion_mats, dataset_metadata)``` + If return None, no global metrics will be computed. + """ + return global_metrics_fn + + def build_flax_model(self): + raise NotImplementedError('Subclasses must implement build_flax_model().') + + def default_flax_model_config(self): + """Default config for the flax model that is built in `build_flax_model`. + + This function in particular serves the testing functions and supposed to + provide config tha are passed to the flax_model when it's build in + `build_flax_model` function, e.g., `model_dtype_str`. + """ + raise NotImplementedError( + 'Subclasses must implement default_flax_model_config().') + + +def global_metrics_fn(all_confusion_mats: List[jnp.ndarray], + dataset_metadata: Dict[str, Any]) -> Dict[str, float]: + """Returns a dict with global (whole-dataset) metrics.""" + # Compute mIoU from list of confusion matrices: + assert isinstance(all_confusion_mats, list) # List of eval batches. + cm = np.sum(all_confusion_mats, axis=0) # Sum over eval batches. + assert cm.ndim == 3, ('Expecting confusion matrix to have shape ' + '[batch_size, num_classes, num_classes], got ' + f'{cm.shape}.') + cm = np.sum(cm, axis=0) # Sum over batch dimension. + mean_iou, iou_per_class = model_utils.mean_iou(cm) + metrics_dict = {'mean_iou': float(mean_iou)} + for label, iou in enumerate(iou_per_class): + tag = f'iou_per_class/{label:02.0f}' + if 'class_names' in dataset_metadata: + tag = f"{tag}_{dataset_metadata['class_names'][label]}" + metrics_dict[tag] = float(iou) + return metrics_dict diff --git a/scenic/model_lib/base_models/tests/__init__.py b/scenic/model_lib/base_models/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/model_lib/base_models/tests/test_box_utils.py b/scenic/model_lib/base_models/tests/test_box_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..b493bb3600ccb22a0cacf31a14d94dd4e4e787d2 --- /dev/null +++ b/scenic/model_lib/base_models/tests/test_box_utils.py @@ -0,0 +1,330 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for functions in box_utils.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +import jax +import jax.numpy as jnp +import numpy as np +from scenic.model_lib.base_models import box_utils +from shapely import geometry + + +def sample_cxcywh_bbox(key, batch_shape): + """Samples a bounding box in the [cx, cy, w, h] in [0, 1] range format.""" + frac = 0.8 + sample = jax.random.uniform(key, shape=(*batch_shape, 4)) * frac + cx, cy, w, h = jnp.split(sample, indices_or_sections=4, axis=-1) + # Make sure the bounding box doesn't cross the right and top image borders + w = jnp.where(cx + w / 2. >= 1., frac * 2. * (1. - cx), w) + h = jnp.where(cy + h / 2. >= 1., frac * 2. * (1. - cy), h) + # Make sure the bounding box doesn't cross the left and bottom image borders + w = jnp.where(cx - w / 2. <= 0., frac * 2. * cx, w) + h = jnp.where(cy - h / 2. <= 0., frac * 2. * cy, h) + + bbox = jnp.concatenate([cx, cy, w, h], axis=-1) + return bbox + + +class BoxUtilsTest(parameterized.TestCase): + """Tests all the bounding box related utilities.""" + + def test_box_cxcywh_to_xyxy(self): + """Test for correctness of the box_cxcywh_to_xyxy operation.""" + cxcywh = jnp.array([[[0.1, 0.3, 0.2, 0.4], [0.1, 0.3, 0.2, 0.4]], + [[0.3, 0.2, 0.1, 0.4], [0.3, 0.2, 0.1, 0.4]]], + dtype=jnp.float32) + expected = jnp.array([[[0.0, 0.1, 0.2, 0.5], [0.0, 0.1, 0.2, 0.5]], + [[0.25, 0.0, 0.35, 0.4], [0.25, 0.0, 0.35, 0.4]]], + dtype=jnp.float32) + output = box_utils.box_cxcywh_to_xyxy(cxcywh) + self.assertSequenceAlmostEqual( + expected.flatten(), output.flatten(), places=5) + + # also test whether an exception is raised when a non-box input is provided + with self.assertRaises(ValueError): + cxcywh = jnp.array(np.random.uniform(size=(2, 3, 5))) + _ = box_utils.box_cxcywh_to_xyxy(cxcywh) + + @parameterized.parameters([((3, 1, 4),), ((4, 6, 4),)]) + def test_box_cxcywh_to_xyxy_shape(self, input_shape): + """Test whether the shape is correct for box_cxcywh_to_xyxy.""" + cxcywh = jnp.array(np.random.uniform(size=input_shape)) + xyxy = box_utils.box_cxcywh_to_xyxy(cxcywh) + self.assertEqual(xyxy.shape, cxcywh.shape) + + @parameterized.parameters([((2, 5, 4),), ((1, 3, 4),)]) + def test_box_cxcy_to_xyxy_box_xyxy_to_cxcy(self, input_shape): + """Test both box conversion functions as they are inverses of each other.""" + cxcywh = jnp.array(np.random.uniform(size=input_shape)) + xyxy = box_utils.box_cxcywh_to_xyxy(cxcywh) + cxcywh_loop = box_utils.box_xyxy_to_cxcywh(xyxy) + self.assertSequenceAlmostEqual( + cxcywh_loop.flatten(), cxcywh.flatten(), places=5) + + +def sample_cxcywha(key, batch_shape): + """Sample rotated bounding boxes [cx, cy, w, h, a (radians)].""" + scale = jnp.array([0.3, 0.3, 0.5, 0.5, 1.0]) + offset = jnp.array([0.35, 0.35, 0, 0, 0]) + return jax.random.uniform(key, shape=(*batch_shape, 5)) * scale + offset + + +class RBoxUtilsTest(parameterized.TestCase): + """Tests all the rotated bounding box related utilities.""" + + def test_convert_cxcywha_to_corners(self): + key = jax.random.PRNGKey(0) + cxcywha = sample_cxcywha(key, batch_shape=(300, 200)) + self.assertEqual(cxcywha.shape, (300, 200, 5)) + + corners = box_utils.cxcywha_to_corners(cxcywha) + self.assertEqual(corners.shape, (300, 200, 4, 2)) + # This criteria depends on sample function sampling within unit square. + self.assertTrue(jnp.all(corners >= 0)) + self.assertTrue(jnp.all(corners <= 1)) + + def test_convert_corners_to_cxcywha(self): + key = jax.random.PRNGKey(0) + cxcywha = sample_cxcywha(key, batch_shape=(3, 2)) + self.assertEqual(cxcywha.shape, (3, 2, 5)) + + corners = box_utils.cxcywha_to_corners(cxcywha) + cxcywha2 = box_utils.corners_to_cxcywha(corners) + np.testing.assert_allclose(cxcywha2, cxcywha, atol=1e-6) + + def test_convert_cxcywha_to_corners_single_rotated(self): + cxcywha = jnp.array([1, 1, jnp.sqrt(2), jnp.sqrt(2), 45. * jnp.pi / 180.]) + corners = box_utils.cxcywha_to_corners(cxcywha) + expected_corners = [[1, 0], [2, 1], [1, 2], [0, 1]] + np.testing.assert_allclose(corners, expected_corners, atol=1e-7) + + def test_intersect_line_segments(self): + """Test for correctness of the intersect_lines operation.""" + key = jax.random.PRNGKey(0) + key, subkey = jax.random.split(key) + lines1 = jax.random.uniform(subkey, (100, 2, 2)) + lines2 = jax.random.uniform(key, (100, 2, 2)) + intersect_line_segments = jax.jit( + jax.vmap(box_utils.intersect_line_segments)) + intersections = intersect_line_segments(lines1, lines2) + self.assertEqual(intersections.shape, (100, 2)) + + expected_intersections = [] + for i in range(len(lines1)): + line1 = geometry.LineString(lines1[i]) + line2 = geometry.LineString(lines2[i]) + it = line1.intersection(line2) + it_coord = ( + it.coords[0] + if isinstance(it, geometry.Point) else jnp.asarray([jnp.nan] * 2)) + expected_intersections.append(it_coord) + + np.testing.assert_allclose(intersections, expected_intersections, atol=1e-7) + + def test_intersect_rbox_edges_same_box(self): + """Test for correctness of the intersect_rbox_edges operation.""" + rbox1 = jnp.array([0.5, 0.5, 1.0, 1.0, 0]) + rbox2 = rbox1 + corners1 = box_utils.cxcywha_to_corners(rbox1) + corners2 = box_utils.cxcywha_to_corners(rbox2) + it_points = box_utils.intersect_rbox_edges(corners1, corners2) + self.assertEqual(it_points.shape, (4, 4, 2)) + it_points = it_points[~jnp.any(jnp.isnan(it_points), -1)] + it_points = sorted([(x, y) for x, y in np.array(it_points)]) + expected_points = sorted([(0, 0), (0, 1), (1, 0), (1, 1)] * 2) + self.assertSequenceEqual(it_points, expected_points) + + def test_intersect_rbox_edges_rotated_box(self): + """Test rboxe inscribes the other with 45 degree angle.""" + rbox1 = jnp.array([1.0, 1.0, 1.0, 1.0, 0]) + rbox2 = jnp.array([1.0, 1.0, jnp.sqrt(2), jnp.sqrt(2), 45. * np.pi / 180.]) + corners1 = box_utils.cxcywha_to_corners(rbox1) + corners2 = box_utils.cxcywha_to_corners(rbox2) + it_points = box_utils.intersect_rbox_edges(corners1, corners2) + it_points = jnp.round( + it_points[~jnp.any(jnp.isnan(it_points), -1)], decimals=4) + it_points = sorted([(x, y) for x, y in np.array(it_points)]) + # Expect intersection at unrotated box vertices. + expected_pts = sorted([(1.5, 1.5), (1.5, 0.5), (0.5, 0.5), (0.5, 1.5)] * 2) + self.assertSequenceEqual(it_points, expected_pts) + + +class IoUTest(parameterized.TestCase): + """Test box_iou and generalized_box_iou functions.""" + + def test_box_iou_values(self): + """Tests if 0 <= IoU <= 1 and -1 <= gIoU <=1.""" + + # Create fake predictions and targets + key = jax.random.PRNGKey(0) + key, subkey = jax.random.split(key) + pred_bbox = sample_cxcywh_bbox(key, batch_shape=(4, 100)) + tgt_bbox = sample_cxcywh_bbox(subkey, batch_shape=(4, 63)) + + pred_bbox = box_utils.box_cxcywh_to_xyxy(pred_bbox) + tgt_bbox = box_utils.box_cxcywh_to_xyxy(tgt_bbox) + + iou, union = box_utils.box_iou(pred_bbox, tgt_bbox, all_pairs=True) + self.assertTrue(jnp.all(iou >= 0)) + self.assertTrue(jnp.all(iou <= 1.)) + self.assertTrue(jnp.all(union >= 0.)) + + giou = box_utils.generalized_box_iou(pred_bbox, tgt_bbox, all_pairs=True) + self.assertTrue(jnp.all(giou >= -1.)) + self.assertTrue(jnp.all(giou <= 1.)) + + def test_box_iou(self): + """Test box_iou using hand designed targets.""" + in1 = jnp.array([ + [[0.1, 0.2, 0.3, 0.4], [0.1, 0.2, 0.5, 1.0], [0.1, 0.2, 0.5, 0.8]], + [[0.6, 0.2, 1.0, 1.0], [0.6, 0.2, 1.0, 0.8], [0.0, 0.0, 0.0, 0.0]], + [[0.0, 0.0, 0.0, 0.0], [0.2, 0.1, 0.2, 0.1], [0.1, 0.1, 0.2, 0.2]], + ], + dtype=jnp.float32) + in2 = jnp.array([ + [[0.4, 0.4, 0.5, 0.8], [0.4, 0.4, 0.5, 0.8], [0.4, 0.4, 0.7, 0.8]], + [[0.7, 0.4, 0.8, 0.6], [0.8, 0.6, 0.7, 0.4], [0.1, 0.1, 0.2, 0.2]], + [[0.0, 0.0, 0.0, 0.0], [0.2, 0.1, 0.2, 0.1], [0.1, 0.1, 0.2, 0.2]], + ], + dtype=jnp.float32) + + target = jnp.array( + [[0.0, 0.125, 0.125], [0.0625, 0.0, 0.0], [0.0, 0.0, 1.0]], + dtype=jnp.float32) + + output, _ = box_utils.box_iou(in1, in2, all_pairs=False) + + self.assertSequenceAlmostEqual(output.flatten(), target.flatten(), places=3) + + @classmethod + def _get_method_fn(cls, method): + """Returns method_fn function corresponding to method str.""" + if method == 'iou': + method_fn = lambda x, y, **kwargs: box_utils.box_iou(x, y, **kwargs)[0] + elif method == 'giou': + method_fn = box_utils.generalized_box_iou + else: + raise ValueError(f'Unknown method {method}') + return method_fn + + @parameterized.parameters('iou', 'giou') + def test_all_pairs_true_false(self, method): + """Use *box_iou(..., all_pairs=False) to test the all_pairs=True case.""" + method_fn = self._get_method_fn(method) + + in1 = jnp.array( + [ # [2, 2, 4] tensor. + [[0.1, 0.2, 0.3, 0.4], [0.1, 0.2, 0.5, 1.0]], + [[0.6, 0.2, 1.0, 1.0], [0.6, 0.2, 1.0, 0.8]], + ], + dtype=jnp.float32) + in2 = jnp.array([ + [[0.4, 0.4, 0.5, 0.8], [0.4, 0.4, 0.5, 0.8]], + [[0.7, 0.4, 0.8, 0.6], [0.1, 0.5, 0.7, 0.7]], + ], + dtype=jnp.float32) + + # we will simulate all_pairs=True by manually permuting in1 + in1_1 = jnp.array( + [ # [2, 2, 4] tensor. + [[0.1, 0.2, 0.5, 1.0], [0.1, 0.2, 0.3, 0.4]], + [[0.6, 0.2, 1.0, 0.8], [0.6, 0.2, 1.0, 1.0]], + ], + dtype=jnp.float32) + + out = method_fn(in1, in2, all_pairs=False) # [2, 2] + out_1 = method_fn(in1_1, in2, all_pairs=False) # [2, 2] + + # we can compare these against the output of all_pairs=True + out_all = method_fn(in1, in2, all_pairs=True) # [2, 2, 2] + + # assemble out_all_ using out and out_1. The comparisons are illustrated + # below: + # out = [[0-0, 1-1], [2-2, 3-3]] + # out_1 = [[1-0, 0-1], [3-2, 2-3]] + # out_all = [[[0-0, 0-1], [1-0, 1-1]], [[2-2, 2-3], [3-2, 3-3]]] + out_all_ = jnp.array([[[out[0, 0], out_1[0, 1]], [out_1[0, 0], out[0, 1]]], + [[out[1, 0], out_1[1, 1]], [out_1[1, 0], out[1, 1]]]], + dtype=jnp.float32) + + self.assertSequenceAlmostEqual(out_all.flatten(), out_all_.flatten()) + + def test_generalized_box_iou(self): + """Same as test_box_iou but for generalized_box_iou().""" + in1 = jnp.array([ + [[0.1, 0.2, 0.3, 0.4], [0.1, 0.2, 0.5, 1.0], [0.1, 0.2, 0.5, 0.8]], + [[0.6, 0.2, 1.0, 1.0], [0.6, 0.2, 1.0, 0.8], [0.0, 0.0, 0.0, 0.0]], + [[0.0, 0.0, 0.0, 0.0], [0.2, 0.1, 0.2, 0.1], [0.1, 0.1, 0.2, 0.2]], + ], + dtype=jnp.float32) + in2 = jnp.array([ + [[0.4, 0.4, 0.5, 0.8], [0.4, 0.4, 0.5, 0.8], [0.4, 0.4, 0.7, 0.8]], + [[0.7, 0.4, 0.8, 0.6], [0.4, 0.4, 0.8, 0.6], [0.1, 0.1, 0.2, 0.2]], + [[0.0, 0.0, 0.0, 0.0], [0.2, 0.1, 0.2, 0.1], [0.1, 0.1, 0.2, 0.2]], + ], + dtype=jnp.float32) + + target_iou = jnp.array( + [[0.0, 0.125, 0.125], [0.0625, 1. / 7., 0.0], [0.0, 0.0, 1.0]], + dtype=jnp.float32) + target_extra = jnp.array( + [[-2. / 3., 0.0, -1. / 9.], [0.0, -2. / 9., -3. / 4.], [0.0, 0.0, 0.0]], + dtype=jnp.float32) + target = target_iou + target_extra + + output = box_utils.generalized_box_iou(in1, in2, all_pairs=False) + + self.assertSequenceAlmostEqual(output.flatten(), target.flatten(), places=3) + + # if the boxes are invalid it should raise an AssertionError + # TODO(b/166344282): uncomment these after enabling the assertions + # in1 = jnp.array([[[0.1, 0.2, 0.3, 0.4],],], dtype=jnp.float32) + # in2 = jnp.array([[[0.3, 0.4, 0.1, 0.2],],], dtype=jnp.float32) + # with self.assertRaises(AssertionError): + # _ = box_utils.generalized_box_iou(in1, in2, all_pairs=False) + + @parameterized.parameters('iou', 'giou') + def test_backward(self, method): + """Test whether *box_iou methods have a grad.""" + method_fn = self._get_method_fn(method) + + def loss_fn(x, y, all_pairs): + return method_fn(x, y, all_pairs=all_pairs).sum() + + grad_fn = jax.grad(loss_fn) + + in1 = jnp.array( + [ # [2, 2, 4] tensor. + [[0.1, 0.2, 0.3, 0.4], [0.1, 0.2, 0.5, 1.0]], + [[0.6, 0.2, 1.0, 1.0], [0.6, 0.2, 1.0, 0.8]], + ], + dtype=jnp.float32) + in2 = jnp.array([ + [[0.4, 0.4, 0.5, 0.8], [0.4, 0.4, 0.5, 0.8]], + [[0.7, 0.4, 0.8, 0.6], [0.1, 0.5, 0.7, 0.7]], + ], + dtype=jnp.float32) + + grad_in1 = grad_fn(in1, in2, all_pairs=True) + self.assertSequenceEqual(grad_in1.shape, in1.shape) + + grad_in1 = grad_fn(in1, in2, all_pairs=False) + self.assertSequenceEqual(grad_in1.shape, in1.shape) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/model_lib/base_models/tests/test_classification_model.py b/scenic/model_lib/base_models/tests/test_classification_model.py new file mode 100644 index 0000000000000000000000000000000000000000..8c19aabbc21771ecac282322b61f9aff87b939ea --- /dev/null +++ b/scenic/model_lib/base_models/tests/test_classification_model.py @@ -0,0 +1,106 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for classification_model.py.""" + +from absl.testing import absltest +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import classification_model + +NUM_CLASSES = 1000 +BATCH_SIZE = 4 + + +class FakeClassificationModel(classification_model.ClassificationModel): + """A dummy classification model for testing purposes.""" + + def __init__(self): + dataset_meta_data = {'num_classes': NUM_CLASSES, 'target_is_onehot': False} + super().__init__( + ml_collections.ConfigDict(), # An empty config dict. + dataset_meta_data) + + def build_flax_model(self): + pass + + def default_flax_model_config(self): + pass + + +def get_fake_batch_output(): + """Generates a fake `batch`. + + Returns: + `batch`: Dictionary of None inputs and fake ground truth targets. + outputs_noaux.pop('aux_outputs') + `output`: Dictionary of a fake output logits. + """ + batch = { + 'inputs': None, + 'label': jnp.array(np.random.randint(NUM_CLASSES, size=(BATCH_SIZE,))), + } + output = np.random.random(size=(BATCH_SIZE, NUM_CLASSES)) + return batch, output + + +class TestClassificationModel(absltest.TestCase): + """Tests for the ClassificationModel.""" + + def is_valid(self, t, value_name): + """Helper function to assert that tensor `t` does not have `nan`, `inf`.""" + self.assertFalse( + jnp.isnan(t).any(), msg=f'Found nan\'s in {t} for {value_name}') + self.assertFalse( + jnp.isinf(t).any(), msg=f'Found inf\'s in {t} for {value_name}') + + def test_loss_function(self): + """Tests loss_function by checking its output's validity.""" + model = FakeClassificationModel() + batch, output = get_fake_batch_output() + batch_replicated, outputs_replicated = (jax_utils.replicate(batch), + jax_utils.replicate(output)) + + # Test loss function in the pmapped setup: + loss_function_pmapped = jax.pmap(model.loss_function, axis_name='batch') + total_loss = loss_function_pmapped(outputs_replicated, batch_replicated) + # Check that loss is returning valid values: + self.is_valid(jax_utils.unreplicate(total_loss), value_name='loss') + + def test_metric_function(self): + """Tests metric_function by checking its output's format and validity.""" + model = FakeClassificationModel() + batch, output = get_fake_batch_output() + batch_replicated, outputs_replicated = (jax_utils.replicate(batch), + jax_utils.replicate(output)) + + # Test metric function in the pmapped setup + metrics_fn_pmapped = jax.pmap(model.get_metrics_fn(), axis_name='batch') + all_metrics = metrics_fn_pmapped(outputs_replicated, batch_replicated) + # Check expected metrics exist in the output: + expected_metrics_keys = ['accuracy', 'loss'] + self.assertSameElements(expected_metrics_keys, all_metrics.keys()) + + # For each metric, check that it is a valid value. + all_metrics = jax_utils.unreplicate(all_metrics) + for k, v in all_metrics.items(): + self.is_valid(v[0], value_name=f'numerator of {k}') + self.is_valid(v[1], value_name=f'denominator of {k}') + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/model_lib/base_models/tests/test_encoder_decoder_model.py b/scenic/model_lib/base_models/tests/test_encoder_decoder_model.py new file mode 100644 index 0000000000000000000000000000000000000000..50f99b6765347d7aff91998d0a61892fe18ad471 --- /dev/null +++ b/scenic/model_lib/base_models/tests/test_encoder_decoder_model.py @@ -0,0 +1,110 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for encoder_decoder_model.py.""" + +from absl.testing import absltest +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import encoder_decoder_model + +VOCAB_SIZE = 4_000 +TARGET_LENGTH = 32 +BATCH_SIZE = 4 + + +class FakeEncoderDecoderModel(encoder_decoder_model.EncoderDecoderModel): + """A dummy encoder-decoder model for testing purposes.""" + + def __init__(self): + dataset_meta_data = {'num_classes': VOCAB_SIZE, 'target_is_onehot': False} + super().__init__( + ml_collections.ConfigDict(), # An empty config dict. + dataset_meta_data) + + def build_flax_model(self): + pass + + def default_flax_model_config(self): + pass + + +def get_fake_batch_output(): + """Generates a fake `batch`. + + Returns: + `batch`: Dictionary of None inputs and fake ground truth targets. + outputs_noaux.pop('aux_outputs') + `output`: Dictionary of a fake output logits. + """ + batch = { + 'inputs': + None, + 'label': + jnp.array( + np.random.randint(VOCAB_SIZE, size=(BATCH_SIZE, TARGET_LENGTH))), + } + output = np.random.random(size=(BATCH_SIZE, TARGET_LENGTH, VOCAB_SIZE)) + return batch, output + + +class TestEncoderDecoderModel(absltest.TestCase): + """Tests for the EncoderDecoderModel.""" + + def is_valid(self, t, value_name): + """Helper function to assert that tensor `t` does not have `nan`, `inf`.""" + self.assertFalse( + jnp.isnan(t).any(), msg=f'Found nan\'s in {t} for {value_name}') + self.assertFalse( + jnp.isinf(t).any(), msg=f'Found inf\'s in {t} for {value_name}') + + def test_loss_function(self): + """Tests loss_function by checking its output's validity.""" + model = FakeEncoderDecoderModel() + batch, output = get_fake_batch_output() + batch_replicated, outputs_replicated = (jax_utils.replicate(batch), + jax_utils.replicate(output)) + + # Test loss function in the pmapped setup: + loss_function_pmapped = jax.pmap(model.loss_function, axis_name='batch') + total_loss = loss_function_pmapped(outputs_replicated, batch_replicated) + # Check that loss is returning valid values: + self.is_valid(jax_utils.unreplicate(total_loss), value_name='loss') + + def test_metric_function(self): + """Tests metric_function by checking its output's format and validity.""" + model = FakeEncoderDecoderModel() + batch, output = get_fake_batch_output() + batch_replicated, outputs_replicated = (jax_utils.replicate(batch), + jax_utils.replicate(output)) + + # Test metric function in the pmapped setup + metrics_fn_pmapped = jax.pmap(model.get_metrics_fn(), axis_name='batch') + all_metrics = metrics_fn_pmapped(outputs_replicated, batch_replicated) + # Check expected metrics exist in the output: + expected_metrics_keys = ['accuracy', 'loss', 'perplexity'] + self.assertSameElements(expected_metrics_keys, all_metrics.keys()) + + # For each metric, check that it is a valid value. + all_metrics = jax_utils.unreplicate(all_metrics) + for k, v in all_metrics.items(): + self.is_valid(v[0], value_name=f'numerator of {k}') + self.is_valid(v[1], value_name=f'denominator of {k}') + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/model_lib/base_models/tests/test_model_utils.py b/scenic/model_lib/base_models/tests/test_model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..5f9914e85ae49e86504980cf0b23eb2847204e9d --- /dev/null +++ b/scenic/model_lib/base_models/tests/test_model_utils.py @@ -0,0 +1,418 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for functions in model_utils.py.""" +import itertools + +from absl.testing import absltest +from absl.testing import parameterized +from flax.training import common_utils +import jax +import jax.numpy as jnp +import numpy as np +from scenic.model_lib.base_models import model_utils + + +class SimpleGatherTest(parameterized.TestCase): + """Test simple_gather().""" + + def test_simple_gather_ndarray(self): + """Test against manually specified target when idx is a nd-array.""" + x = jnp.array(np.random.normal(size=(2, 3, 5)), dtype=jnp.float32) + idx = jnp.array([[1, 0, 2], [2, 1, 0]], dtype=jnp.int32) + y = model_utils.simple_gather(x, idx) + y_target = jnp.stack([ + jnp.stack([x[0, 1], x[0, 0], x[0, 2]]), + jnp.stack([x[1, 2], x[1, 1], x[1, 0]])]) + + self.assertSequenceAlmostEqual(y.flatten(), y_target.flatten()) + + +class LossTest(parameterized.TestCase): + """Test various loss functions in model_utils.""" + + def test_weighted_l1_loss(self): + """Test weighted_l1_loss against a manually specified target.""" + x = jnp.array([[0.1, 0.3], [-1.0, 0.2]], dtype=jnp.float32) + y = jnp.array([[0.5, -1.3], [0.9, 1.2]], dtype=jnp.float32) + + out1 = model_utils.weighted_l1_loss(x, y, reduction=None) + out1_target = jnp.array([[0.4, 1.6], [1.9, 1.0]], dtype=jnp.float32) + self.assertSequenceAlmostEqual( + out1.flatten(), out1_target.flatten(), places=5) + + out2 = model_utils.weighted_l1_loss(x, y, reduction='mean').item() + out2_target = 4.9 / 4 + self.assertAlmostEqual(out2, out2_target, places=5) + + def test_weighted_box_l1_loss(self): + """Test weighted_box_l1_loss against manually specified targets.""" + x1 = jnp.array([[0.1, 0.3, 0.9, 0.8]], dtype=jnp.float32) + y1 = jnp.array([[0.5, 0.1, 0.9, 0.7]], dtype=jnp.float32) + + out1 = model_utils.weighted_box_l1_loss(x1, y1) + out1_target = jnp.array([[0.4, 0.2, 0, 0.1]], dtype=jnp.float32) + self.assertSequenceAlmostEqual( + out1.flatten(), out1_target.flatten(), places=5) + + out2 = model_utils.weighted_box_l1_loss(x1, y1, reduction='mean').item() + out2_target = jnp.mean(out1_target).item() + self.assertAlmostEqual(out2, out2_target, places=5) + + out3 = model_utils.weighted_box_l1_loss(x1, y1, tight=False) + out3_target = jnp.array([[0.4, 0.0, 0.0, 0.1]], dtype=jnp.float32) + self.assertSequenceAlmostEqual( + out3.flatten(), out3_target.flatten(), places=5) + + def test_weighted_sigmoid_cross_entropy(self): + """Tests weighted_sigmoid_cross_entropy.""" + + logits = jnp.array([[1, 2, 3], [4, 5, 6]], dtype=jnp.float32) + labels = jnp.array([[0, 1, 1], [1, 0, 1]], dtype=jnp.float32) + sigmoid = jax.nn.sigmoid + log = jnp.log + + loss = model_utils.weighted_sigmoid_cross_entropy(logits, labels) + gt_loss = jnp.array([[ + -log(1 - sigmoid(1.)), -log(sigmoid(2.)), -log(sigmoid(3.)) + ], [-log(sigmoid(4.)), -log(1 - sigmoid(5.)), -log(sigmoid(6.))] + ]) / np.prod(labels.shape[:-1]) + self.assertSequenceAlmostEqual( + loss.flatten(), gt_loss.sum().flatten(), places=3) + + example_weights = jnp.array([1., 0.]) + loss = model_utils.weighted_sigmoid_cross_entropy( + logits, labels, weights=example_weights) + gt_loss = jnp.array([[ + -log(1 - sigmoid(1.)), -log(sigmoid(2.)), -log(sigmoid(3.)) + ], [0., 0., 0.]]) / example_weights.sum() + 1e-9 + self.assertSequenceAlmostEqual( + loss.flatten(), gt_loss.sum().flatten(), places=3) + + label_weights = jnp.array([1., 2., 3.]) + loss = model_utils.weighted_sigmoid_cross_entropy( + logits, labels, label_weights=label_weights) + gt_loss = jnp.array([[ + -log(1 - sigmoid(1.)), -2 * log(sigmoid(2.)), -3 * log(sigmoid(3.)) + ], [-log(sigmoid(4.)), -2 * log(1 - sigmoid(5.)), -3 * log(sigmoid(6.))] + ]) / np.prod(labels.shape[:-1]) + self.assertSequenceAlmostEqual( + loss.flatten(), gt_loss.sum().flatten(), places=3) + + loss = model_utils.weighted_sigmoid_cross_entropy( + logits, labels, weights=example_weights, label_weights=label_weights) + gt_loss = jnp.array([[ + -log(1 - sigmoid(1.)), -2 * log(sigmoid(2.)), -3 * log(sigmoid(3.)) + ], [0., 0., 0.]]) / example_weights.sum() + 1e-9 + self.assertSequenceAlmostEqual( + loss.flatten(), gt_loss.sum().flatten(), places=3) + + # Label weights can actually be any shape that is broadcastable to the + # shape of logits. + label_weights = jnp.array([[1., 2., 3.], [4., 5., 6.]]) + loss = model_utils.weighted_sigmoid_cross_entropy( + logits, labels, weights=example_weights, label_weights=label_weights) + gt_loss = jnp.array([[ + -log(1 - sigmoid(1.)), -2 * log(sigmoid(2.)), -3 * log(sigmoid(3.)) + ], [0., 0., 0.]]) / example_weights.sum() + 1e-9 + self.assertSequenceAlmostEqual( + loss.flatten(), gt_loss.sum().flatten(), places=3) + + with self.assertRaises(ValueError): + label_weights = jnp.array([1., 2., 3., 4.]) + loss = model_utils.weighted_sigmoid_cross_entropy( + logits, labels, label_weights=label_weights) + + def test_focal_sigmoid_cross_entropy(self): + """Tests focal_sigmoid_cross_entropy.""" + logits = jnp.array([[1, 2, 3], [4, 5, 6]], dtype=jnp.float32) + labels = jnp.array([[0, 1, 1], [1, 0, 1]], dtype=jnp.float32) + sigmoid = jax.nn.sigmoid + log = jnp.log + + a = 0.25 + g = 2. + loss = model_utils.focal_sigmoid_cross_entropy( + logits, labels, alpha=a, gamma=g) + + gt_loss = jnp.array( + [[-log(1 - sigmoid(1.)), -log(sigmoid(2.)), -log(sigmoid(3.))], + [-log(sigmoid(4.)), -log(1 - sigmoid(5.)), -log(sigmoid(6.))]]) + focal_factor = jnp.array([[ + (1 - a) * sigmoid(1.)**g, a * sigmoid(-2.)**g, a * sigmoid(-3.)**g + ], [a * sigmoid(-4.)**g, (1 - a) * sigmoid(5.)**g, a * sigmoid(-6.)**g]]) + self.assertSequenceAlmostEqual( + loss.flatten(), (gt_loss * focal_factor).flatten(), places=3) + + def test_dice_loss(self): + """Tests the correctness of the segmentation dice loss.""" + # Create test targets: + batch, num_objects, h, w = 1, 2, 128, 128 + stride = 2 + targets = np.zeros((batch, num_objects, h, w), dtype=np.float32) + targets[0, 0, :64, :64] = 1.0 # Add object in top left of image. + targets[0, 1, 64:, 64:] = 1.0 # Add object in bottom right of image. + input_shape = batch, num_objects, h // stride, w // stride + + # Test perfect predictions: + inputs = np.zeros(input_shape, dtype=np.float32) + inputs[0, 0, :64 // stride, :64 // stride] = 1.0 + inputs[0, 1, 64 // stride:, 64 // stride:] = 1.0 + inputs = (inputs - 0.5) * 1e6 # Inputs will be passed through sigmoid. + loss = model_utils.dice_loss( + jnp.array(inputs), jnp.array(targets), interpolation='nearest') + np.testing.assert_array_almost_equal(loss, [[0.0, 0.0]], decimal=3) + + # Test one half-overlapping prediction: + inputs = np.zeros(input_shape, dtype=np.float32) + inputs[0, 0, 32 // stride:(32 + 64) // stride, :64 // stride] = 1.0 + inputs[0, 1, 64 // stride:, 64 // stride:] = 1.0 + inputs = (inputs - 0.5) * 1e6 # Inputs will be passed through sigmoid. + loss = model_utils.dice_loss( + jnp.array(inputs), jnp.array(targets), interpolation='nearest') + np.testing.assert_array_almost_equal(loss, [[0.5, 0.0]], decimal=3) + + # Test one non-overlapping prediction: + inputs = np.zeros(input_shape, dtype=np.float32) + inputs[0, 0, 64 // stride:, 64 // stride:] = 1.0 + inputs[0, 1, 64 // stride:, 64 // stride:] = 1.0 + inputs = (inputs - 0.5) * 1e6 # Inputs will be passed through sigmoid. + loss = model_utils.dice_loss( + jnp.array(inputs), jnp.array(targets), interpolation='nearest') + np.testing.assert_array_almost_equal(loss, [[1.0, 0.0]], decimal=3) + + # Test all-pairs with different instance numbers: + inputs = np.zeros((batch, 3, h // stride, w // stride), dtype=np.float32) + inputs[0, 0, :64 // stride, :64 // stride] = 1.0 + inputs[0, 1, 32 // stride:(32 + 64) // stride, :64 // stride] = 1.0 + inputs[0, 2, 64 // stride:, 64 // stride:] = 1.0 + inputs = (inputs - 0.5) * 1e6 # Inputs will be passed through sigmoid. + loss = model_utils.dice_loss( + jnp.array(inputs), jnp.array(targets), interpolation='nearest', + all_pairs=True) + self.assertTupleEqual(loss.shape, (1, 3, 2)) # [b, n_pred, n_true] + np.testing.assert_array_almost_equal(loss, [[[0.0, 1.0], + [0.5, 1.0], + [1.0, 0.0]]], decimal=3) + + def test_weighted_square_error(self): + """Tests implementation of squared error.""" + + predictions = jnp.array([ + [ + [1.0, 3.0, 5.0, 6.0], + [3.0, 5.0, 11.0, 10.0], + [9.0, 10.0, 11.0, 12.0], + [14.0, 13.0, 14.0, 17.0], + ], + [ + [17.0, 18.0, 21.0, 22.0], + [20.0, 19.0, 24.0, 25.0], + [27.0, 29.0, 30.0, 32.0], + [27.0, 28.0, 33.0, 32.0], + ], + ]) + targets = jnp.arange(1, 33).reshape(2, 4, 4) + + # Without specifying axis, this will be over the last two dimensions. + loss = model_utils.weighted_mean_squared_error(predictions, targets) + expected_loss = jnp.mean(jnp.array([38.0, 70.0])) + self.assertAlmostEqual(loss, expected_loss, places=5) + + # Test by specifying axes as a tuple. The following are all equivalent to + # the previous test. + loss = model_utils.weighted_mean_squared_error(predictions, targets, + axis=(1, 2)) + self.assertAlmostEqual(loss, expected_loss, places=5) + + loss = model_utils.weighted_mean_squared_error(predictions, targets, + axis=(-1, -2)) + self.assertAlmostEqual(loss, expected_loss, places=5) + + loss = model_utils.weighted_mean_squared_error(predictions, targets, + axis=(2, 1)) + self.assertAlmostEqual(loss, expected_loss, places=5) + + # Test by computing loss over a single axis only. + loss = model_utils.weighted_mean_squared_error(predictions, targets, + axis=-1) + expected_loss = jnp.mean(jnp.array([[9, 25, 0, 4], + [8, 12, 38, 12]])) + self.assertAlmostEqual(loss, expected_loss, places=5) + + loss = model_utils.weighted_mean_squared_error(predictions, targets, + axis=2) + self.assertAlmostEqual(loss, expected_loss, places=5) + + loss = model_utils.weighted_mean_squared_error(predictions, targets, + axis=1) + expected_loss = jnp.mean(jnp.array([[5, 3, 21, 9], + [9, 22, 18, 21]])) + self.assertAlmostEqual(loss, expected_loss, places=5) + + # Test with loss weights. + weights = jnp.array([[1, 1, 1, 0], [0, 1, 1, 0]]) + loss = model_utils.weighted_mean_squared_error(predictions, targets, + weights, axis=-1) + expected_loss = jnp.mean(jnp.array([9, 25, 12, 38, 0])) + self.assertAlmostEqual(loss, expected_loss, places=5) + + weights = jnp.array([1, 0]) + loss = model_utils.weighted_mean_squared_error(predictions, targets, + weights, axis=-1) + expected_loss = jnp.mean(jnp.array([9, 25, 0, 4])) + self.assertAlmostEqual(loss, expected_loss, places=5) + + +class MetricTest(parameterized.TestCase): + """Tests the metric computation related utilities.""" + + def is_valid(self, t, value_name): + """Helper function to assert that tensor `t` does not have `nan`, `inf`.""" + self.assertFalse( + jnp.isnan(t).any(), msg=f'Found nan\'s in {t} for {value_name}') + self.assertFalse( + jnp.isinf(t).any(), msg=f'Found inf\'s in {t} for {value_name}') + + def test_weighted_topk_correctly_classified(self): + """Tests the topk accuracy computation.""" + batch_size = 512 + num_of_classes = 100 + logits = jnp.array( + np.random.normal(size=(batch_size, num_of_classes)), dtype=jnp.float32) + labels = jnp.array(np.random.randint(num_of_classes, size=(batch_size,))) + + one_hot_targets = common_utils.onehot(labels, logits.shape[-1]) + classification_accuracy = model_utils.weighted_correctly_classified( + logits, one_hot_targets) + top_one_accuracy = model_utils.weighted_topk_correctly_classified( + logits, one_hot_targets, k=1) + self.assertSequenceAlmostEqual( + classification_accuracy.flatten(), top_one_accuracy.flatten()) + + top_n_accuracy = model_utils.weighted_topk_correctly_classified( + logits, one_hot_targets, k=num_of_classes) + self.assertEqual(jnp.mean(top_n_accuracy), 1) + + # computes using numpy + top_5_accuracy = model_utils.weighted_topk_correctly_classified( + logits, one_hot_targets, k=5) + top5_pred = np.argsort( + np.reshape(logits, [-1, num_of_classes]), axis=1)[:, -5:] + y_true = np.array(labels) + top5_pred = np.reshape(top5_pred, [-1, 5]) + y_true = np.reshape(y_true, [-1]) + np_top_accuracy = np.array( + [y_true[i] in top5_pred[i, :] for i in range(len(y_true))]) + self.assertSequenceAlmostEqual(top_5_accuracy.flatten(), + np_top_accuracy.flatten()) + + def test_weighted_recall(self): + """Tests the topk recall computation.""" + + logits = np.array([[[2, 3, 4], + [4, 3, 2], + [4, 2, 3], + [3, 2, 4], + [4, 2, 3], + ]]) + labels = np.array([[[1, 1, 0], + [1, 1, 0], + [1, 0, 0], + [1, 0, 0], + [0, 0, 0] + ]]) + + batch_size = 8 + logits = jnp.tile(logits, [batch_size, 1, 1]) + labels = jnp.tile(labels, [batch_size, 1, 1]) + + recall = model_utils.weighted_recall(logits, labels) + recall_expected = np.array([[1/2, 1., 1., 0., 0.]] * batch_size) + self.assertSequenceAlmostEqual( + recall.flatten(), recall_expected.flatten()) + + @parameterized.parameters(itertools.product([1., 0.], [1., 0.])) + def test_weighted_top_one_correctly_classified(self, label_multiplier, + weight_multiplier): + """Tests the top1 correct computation.""" + batch_size = 512 + num_of_classes = 100 + logits = jnp.array(np.random.normal( + size=(batch_size, 50, num_of_classes)), dtype=jnp.float32) + labels = jnp.array(np.random.randint( + 0, 2, size=(batch_size, 50, num_of_classes))) + labels *= label_multiplier + + weights = jnp.ones(shape=(batch_size,), dtype=jnp.float32) + weights *= weight_multiplier + + is_correct_array = model_utils.weighted_top_one_correctly_classified( + logits, labels, weights=weights) + num_correct = jnp.sum(is_correct_array) + is_correct_array_ref = model_utils.weighted_topk_correctly_classified( + logits, labels, weights, k=1) + + np.testing.assert_array_almost_equal( + is_correct_array, is_correct_array_ref) + np.testing.assert_equal(np.sum(is_correct_array), + np.sum(is_correct_array_ref)) + + self.is_valid(num_correct, 'Number of correctly classified') + + @parameterized.parameters(itertools.product([1., 0.], [1., 0.])) + def test_weighted_unnormalized_sigmoid_cross_entropy(self, label_multiplier, + weight_multiplier): + """Tests the unnormalized sigmoid cross entropy computation.""" + batch_size = 512 + num_of_classes = 100 + logits = jnp.array( + np.random.normal(size=(batch_size, num_of_classes)), dtype=jnp.float32) + labels = jnp.array(np.random.randint(0, 2, + size=(batch_size, num_of_classes))) + labels *= label_multiplier + + weights = jnp.ones(shape=(batch_size,), dtype=jnp.float32) + weights *= weight_multiplier + + loss_array = model_utils.weighted_unnormalized_sigmoid_cross_entropy( + logits, labels, weights=weights) + loss_sum = jnp.sum(loss_array) + + self.is_valid(loss_sum, 'Loss value') + + @parameterized.parameters(itertools.product([1., 0.], [1., 0.])) + def test_weighted_unnormalized_softmax_cross_entropy(self, label_multiplier, + weight_multiplier): + """Tests the unnormalized softmax cross entropy computation.""" + batch_size = 512 + num_of_classes = 100 + logits = jnp.array( + np.random.normal(size=(batch_size, num_of_classes)), dtype=jnp.float32) + labels = jnp.array( + np.random.randint(0, 2, size=(batch_size, num_of_classes))) + labels *= label_multiplier + + weights = jnp.ones(shape=(batch_size,), dtype=jnp.float32) + weights *= weight_multiplier + + loss_array = model_utils.weighted_unnormalized_softmax_cross_entropy( + logits, labels, weights=weights) + loss_sum = jnp.sum(loss_array) + + self.is_valid(loss_sum, 'Loss value') + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/model_lib/base_models/tests/test_multilabel_classification_model.py b/scenic/model_lib/base_models/tests/test_multilabel_classification_model.py new file mode 100644 index 0000000000000000000000000000000000000000..6691467adcfcc502aca95d28c4d0b54c271537e7 --- /dev/null +++ b/scenic/model_lib/base_models/tests/test_multilabel_classification_model.py @@ -0,0 +1,147 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for multilabel_classification_model.py.""" + +from absl.testing import absltest +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import multilabel_classification_model + +NUM_CLASSES = 1000 +BATCH_SIZE = 4 + + +class FakeMultiLabelClassificationModel( + multilabel_classification_model.MultiLabelClassificationModel): + """A dummy multi-label classification model for testing purposes.""" + + def __init__(self): + dataset_meta_data = {'num_classes': NUM_CLASSES, 'target_is_onehot': True} + super().__init__( + ml_collections.ConfigDict(), # An empty config dict. + dataset_meta_data) + + def build_flax_model(self): + pass + + def default_flax_model_config(self): + pass + + +def get_fake_batch_output(array_size=(BATCH_SIZE, NUM_CLASSES)): + """Generates a fake `batch`. + + Args: + array_size: size of the label and output array. + + Returns: + `batch`: Dictionary of None inputs and fake ground truth targets. + outputs_noaux.pop('aux_outputs') + `output`: Dictionary of a fake output logits. + """ + batch = { + 'inputs': None, + 'label': jnp.array(np.random.randint(2, size=array_size)), + } + output = jnp.array(np.random.random(size=array_size)) + return batch, output + + +class TestMultiLabelClassificationModel(absltest.TestCase): + """Tests for the MultiLabelClassificationModel.""" + + def is_valid(self, t, value_name): + """Helper function to assert that tensor `t` does not have `nan`, `inf`.""" + self.assertFalse( + jnp.isnan(t).any(), msg=f'Found nan\'s in {t} for {value_name}') + self.assertFalse( + jnp.isinf(t).any(), msg=f'Found inf\'s in {t} for {value_name}') + + def test_loss_function(self): + """Tests loss_function by checking its output's validity.""" + model = FakeMultiLabelClassificationModel() + batch, output = get_fake_batch_output() + batch_replicated, outputs_replicated = (jax_utils.replicate(batch), + jax_utils.replicate(output)) + + # Test loss function in the pmapped setup: + loss_function_pmapped = jax.pmap(model.loss_function, axis_name='batch') + total_loss = loss_function_pmapped(outputs_replicated, batch_replicated) + # Check that loss is returning valid values: + self.is_valid(jax_utils.unreplicate(total_loss), value_name='loss') + + def test_loss_function_masked(self): + """Tests a masked loss_function by comparing different canonical masks.""" + array_size = (BATCH_SIZE, 50, NUM_CLASSES) + + model = FakeMultiLabelClassificationModel() + batch, output = get_fake_batch_output( + array_size=array_size) + + # Unmasked loss + loss_value_unmasked = model.loss_function(output, batch) + + # Mask with only ones (so effectively no mask). + batch['batch_mask'] = jnp.ones((BATCH_SIZE, 50)) + loss_value_masked = model.loss_function(output, batch) + + self.assertAlmostEqual( + float(loss_value_unmasked), + float(loss_value_masked)) + + # Extend the batch with random outputs and labels, but mask them with 0's. + batch_extended = { + 'label': jnp.concatenate( + (batch['label'], np.random.randint(2, size=array_size)), axis=1), + 'batch_mask': jnp.concatenate( + (batch['batch_mask'], np.zeros((BATCH_SIZE, 50))), axis=1), + } + output_extended = jnp.concatenate( + (output, np.random.random(size=array_size)), axis=1) + loss_value_extended = model.loss_function(output_extended, batch_extended) + + # Test with `places=3` due to JAX issue: github.com/jax-ml/jax/issues/6553 + # TODO(robromijnders): follow up with JAX issue and remove `places=3`. + self.assertAlmostEqual( + float(loss_value_masked), + float(loss_value_extended), + places=3) + + def test_metric_function(self): + """Tests metric_function by checking its output's format and validity.""" + model = FakeMultiLabelClassificationModel() + batch, output = get_fake_batch_output() + batch_replicated, outputs_replicated = (jax_utils.replicate(batch), + jax_utils.replicate(output)) + + # Test metric function in the pmapped setup + metrics_fn_pmapped = jax.pmap(model.get_metrics_fn(), axis_name='batch') + all_metrics = metrics_fn_pmapped(outputs_replicated, batch_replicated) + # Check expected metrics exist in the output: + expected_metrics_keys = ['prec@1', 'loss'] + self.assertSameElements(expected_metrics_keys, all_metrics.keys()) + + # For each metric, check that it is a valid value. + all_metrics = jax_utils.unreplicate(all_metrics) + for k, v in all_metrics.items(): + self.is_valid(v[0], value_name=f'numerator of {k}') + self.is_valid(v[1], value_name=f'denominator of {k}') + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/model_lib/base_models/tests/test_regression_model.py b/scenic/model_lib/base_models/tests/test_regression_model.py new file mode 100644 index 0000000000000000000000000000000000000000..3e37096b904aadb42b5592ce71451503f0c82a9a --- /dev/null +++ b/scenic/model_lib/base_models/tests/test_regression_model.py @@ -0,0 +1,94 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for regression_model.py.""" + +from absl.testing import absltest +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models import regression_model + + +class FakeRegressionModel(regression_model.RegressionModel): + """A dummy regression model for testing purposes.""" + + def __init__(self): + dataset_meta_data = {} + super().__init__(ml_collections.ConfigDict(), dataset_meta_data) + + def build_flax_model(self): + pass + + def default_flax_model_config(self): + pass + + +def get_fake_batch_and_predictions(): + """Generates a fake `batch`.""" + targets = jnp.array( + [[2.0, 1.0, 0.0, 1.0], + [2.0, 1.0, 0.0, 1.0], + [5.0, 7.0, 0.0, 1.0]]) + predictions = jnp.array( + [[2.0, 0.0, 0.0, 1.0], + [2.0, 1.0, 0.0, 1.0], + [4.0, 10.0, 0.0, 1.0]]) + fake_batch = { + 'inputs': None, + 'targets': targets + } + return fake_batch, predictions + + +class TestRegressionModel(absltest.TestCase): + """Tests for the a fake regression model.""" + + def test_loss_function(self): + """Tests loss_function by checking its output's validity.""" + model = FakeRegressionModel() + batch, predictions = get_fake_batch_and_predictions() + batch_replicated, predictions_replicated = ( + jax_utils.replicate(batch), jax_utils.replicate(predictions)) + + # Test loss function in the pmapped setup: + loss_function_pmapped = jax.pmap(model.loss_function, axis_name='batch') + total_loss = loss_function_pmapped(predictions_replicated, batch_replicated) + total_loss = jax_utils.unreplicate(total_loss) + # Loss = 1/3 * (|[0, 1, 0, 0]|^2 + |[0, 0, 0, 0|^2 + |[1, 3, 0, 0]|^2) + self.assertAlmostEqual(total_loss, 11 / 3) + + def test_metric_function(self): + """Tests metric_function by checking its output's format and validity.""" + model = FakeRegressionModel() + batch, predictions = get_fake_batch_and_predictions() + batch_replicated, predictions_replicated = ( + jax_utils.replicate(batch), jax_utils.replicate(predictions)) + + metrics_fn_pmapped = jax.pmap(model.get_metrics_fn(), axis_name='batch') + all_metrics = metrics_fn_pmapped(predictions_replicated, batch_replicated) + expected_metrics_keys = ['mean_squared_error'] + self.assertSameElements(expected_metrics_keys, all_metrics.keys()) + + all_metrics = jax_utils.unreplicate(all_metrics) + self.assertLen(all_metrics, 1) + + mse_sum_count = all_metrics['mean_squared_error'] + # (|[0, 1, 0, 0]|^2 + |[0, 0, 0, 0|^2 + |[1, 3, 0, 0]|^2) = 11 + self.assertAlmostEqual(mse_sum_count[0], 11.0) + self.assertEqual(mse_sum_count[1], 3) + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/model_lib/base_models/tests/test_segmentation_model.py b/scenic/model_lib/base_models/tests/test_segmentation_model.py new file mode 100644 index 0000000000000000000000000000000000000000..4ba10c48e31cdd9c779ca51fae38a35ec5bbf79c --- /dev/null +++ b/scenic/model_lib/base_models/tests/test_segmentation_model.py @@ -0,0 +1,131 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for segmentation_model.py.""" + +from absl.testing import absltest +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import segmentation_model + +NUM_CLASSES = 16 +BATCH_SIZE = 4 +HEIGHT = 224 +WIDTH = 32 + + +class FakeSemanticSegmentationModel(segmentation_model.SegmentationModel): + """A dummy semantic segmentation model for testing purposes.""" + + def __init__(self): + dataset_meta_data = {'num_classes': NUM_CLASSES, 'target_is_onehot': False} + super().__init__( + ml_collections.ConfigDict(), # An empty config dict. + dataset_meta_data) + + def build_flax_model(self): + pass + + def default_flax_model_config(self): + pass + + +def get_fake_batch_output(): + """Generates a fake `batch`. + + Returns: + `batch`: Dictionary of None inputs and fake ground truth targets. + outputs_noaux.pop('aux_outputs') + `output`: Dictionary of a fake output logits. + """ + batch = { + 'inputs': + None, + 'label': + jnp.array( + np.random.randint(NUM_CLASSES, size=(BATCH_SIZE, HEIGHT, WIDTH))), + } + output = np.random.random(size=(BATCH_SIZE, HEIGHT, WIDTH, NUM_CLASSES)) + all_confusion_mat = [ + np.random.random(size=(BATCH_SIZE, NUM_CLASSES, NUM_CLASSES)) + ] + return batch, output, all_confusion_mat + + +class TestSegmentationModel(absltest.TestCase): + """Tests for the SegmentationModel.""" + + def is_valid(self, t, value_name): + """Helper function to assert that tensor `t` does not have `nan`, `inf`.""" + self.assertFalse( + jnp.isnan(t).any(), msg=f'Found nan\'s in {t} for {value_name}') + self.assertFalse( + jnp.isinf(t).any(), msg=f'Found inf\'s in {t} for {value_name}') + + def test_loss_function(self): + """Tests loss_function by checking its output's validity.""" + model = FakeSemanticSegmentationModel() + batch, output, _ = get_fake_batch_output() + batch_replicated, outputs_replicated = (jax_utils.replicate(batch), + jax_utils.replicate(output)) + + # Test loss function in the pmapped setup: + loss_function_pmapped = jax.pmap(model.loss_function, axis_name='batch') + total_loss = loss_function_pmapped(outputs_replicated, batch_replicated) + # Check that loss is returning valid values: + self.is_valid(jax_utils.unreplicate(total_loss), value_name='loss') + + def test_metric_function(self): + """Tests metric_function by checking its output's format and validity.""" + model = FakeSemanticSegmentationModel() + batch, output, _ = get_fake_batch_output() + batch_replicated, outputs_replicated = (jax_utils.replicate(batch), + jax_utils.replicate(output)) + + # Test metric function in the pmapped setup + metrics_fn_pmapped = jax.pmap(model.get_metrics_fn(), axis_name='batch') + all_metrics = metrics_fn_pmapped(outputs_replicated, batch_replicated) + # Check epxected metrics exist in the output: + expected_metrics_keys = ['accuracy', 'loss'] + self.assertSameElements(expected_metrics_keys, all_metrics.keys()) + + # For each metric, check that it is a valid value. + all_metrics = jax_utils.unreplicate(all_metrics) + for k, v in all_metrics.items(): + self.is_valid(v[0], value_name=f'numerator of {k}') + self.is_valid(v[1], value_name=f'denominator of {k}') + + def test_global_metric_function(self): + """Tests globa_metric_function by checking its output's format and validity.""" + model = FakeSemanticSegmentationModel() + _, _, all_confusion_mat = get_fake_batch_output() + all_global_metrics = model.get_global_metrics_fn()(all_confusion_mat, {}) + + # Check expected metrics exist in the output: + expected_global_metrics_keys = ['mean_iou'] + [ + f'iou_per_class/{label:02.0f}' for label in range(NUM_CLASSES) + ] + self.assertSameElements(expected_global_metrics_keys, + all_global_metrics.keys()) + + # For each global metric, check that it is a valid value. + for k, v in all_global_metrics.items(): + self.is_valid(v, value_name=k) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/model_lib/layers/__init__.py b/scenic/model_lib/layers/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/model_lib/layers/attention_layers.py b/scenic/model_lib/layers/attention_layers.py new file mode 100644 index 0000000000000000000000000000000000000000..f55604bc3fc9660f8b73c9ed0fe587473d2922eb --- /dev/null +++ b/scenic/model_lib/layers/attention_layers.py @@ -0,0 +1,756 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Common attention modules. + +Conventions: +- Pass `deterministic` and `rng` as an argument. `rng` is optional and defaults + to `self.make_rng()`. +- `train` and `deterministic` should not have a default. +- Do not define `rng`, `deterministic` or `train` as attributes. +- `rng`, `deterministic`, `train` should always be keyword only arguments. +- Prefer `use_bias` over `bias`. +""" +import functools +from typing import Callable, Optional, Sequence, Tuple + +import flax.linen as nn +import jax +import jax.numpy as jnp +import numpy as np +from scenic.model_lib.layers import nn_layers + +# TODO(mrit): Upstream this to jax.nn.initializers +# Inputs are PRNGKey, input shape and dtype. +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] +Shape = Sequence[int] + + +def _attention_dropout(attn_weights: jnp.ndarray, + *, + rate: float, + broadcast: bool = True, + dropout_rng: jnp.ndarray) -> jnp.ndarray: + """Applies dropout on attention weights. + + This always applies the dropout. There is no `deterministic` parameter. + + Arguments: + attn_weights: Attention weights. + rate: The dropout rate. (_not_ the keep rate!) + broadcast: Whether to broadcast on first and second last axis. + dropout_rng: RNG. + + Returns: + Weights after dropout. + """ + keep_prob = 1.0 - rate + if broadcast: + # Dropout is broadcast across the batch+head+non-attention dimension. + dropout_shape = list(attn_weights.shape) + dropout_shape[0] = 1 # Broadcast batch. + dropout_shape[-2] = 1 # Broadcast heads. + keep = jax.random.bernoulli(dropout_rng, keep_prob, dropout_shape) + else: + keep = jax.random.bernoulli(dropout_rng, keep_prob, attn_weights.shape) + multiplier = ( + keep.astype(attn_weights.dtype) / + jnp.asarray(keep_prob, dtype=attn_weights.dtype)) + return attn_weights * multiplier + + +def dot_product_attention( + query: jnp.ndarray, + key: jnp.ndarray, + value: jnp.ndarray, + *, + bias: Optional[jnp.ndarray] = None, + bias_kv: Optional[jnp.ndarray] = None, + broadcast_dropout: bool = True, + dropout_rate: float = 0.1, + dtype: jnp.dtype = jnp.float32, + precision: Optional[jax.lax.Precision] = None, + deterministic: bool, + dropout_rng: Optional[jnp.ndarray] = None, + capture_attention_weights: bool = True) -> jnp.ndarray: + """Computes the dot-product attention given query, key and value. + + This is the core function for applying attention based on + https://arxiv.org/abs/1706.03762. It calculates the attention weights given + query and key and combines the values using the attention weights. + + Note: query, key, value needn't have any batch dimensions. + + Args: + query: Queries for calculating attention with shape of `[batch..., q_length, + num_heads, qk_depth_per_head]`. + key: Keys for calculating attention with shape of `[batch..., kv_length, + num_heads, qk_depth_per_head]`. + value: Values to be used in attention with shape of `[batch..., kv_length, + num_heads, v_depth_per_head]`. + bias: Bias for the attention weights. This should be + broadcastable to the shape: `[batch..., num_heads, q_length, kv_length]` + This can be used for incorporating causal masks, padding masks, + proximity bias, etc. + bias_kv: Attention bias defined for keys only which has shape + `[batch..., kv_length]`. Can be used for masking elements in k/v. + broadcast_dropout: Use a broadcasted dropout along batch dims. + dropout_rate: Dropout rate. + dtype: The dtype of the computation (default: float32). + precision: Numerical precision of the computation see `jax.lax.Precision` + for details. + deterministic: Deterministic or not (to apply dropout). + dropout_rng: Optional JAX PRNGKey to be used for dropout. + capture_attention_weights: Whether to add an identity layer to tag the + attention weights to be used for capturing them using Flax + capture_intermediate, e.g. for visualization. Note that if this is set to + True, this function can be only called within a Flax module. + + Returns: + Output of shape `[batch..., length, num_heads, v_depth_per_head]`. + """ + assert key.ndim == query.ndim == value.ndim, 'q, k, v must have same rank.' + assert query.shape[:-3] == key.shape[:-3] == value.shape[:-3], ( + 'q, k, v batch dims must match.') + assert query.shape[-2] == key.shape[-2] == value.shape[-2], ( + 'q, k, v num_heads must match.') + assert key.shape[-3] == value.shape[-3], 'k, v lengths must match.' + assert query.shape[-1] == key.shape[-1], 'q, k depths must match.' + + # Calculate attention matrix. + depth = query.shape[-1] + query = query / jnp.sqrt(depth).astype(dtype) + # attn weight shape is (batch..., num_heads, q_length, kv_length) + attn_weights = jnp.einsum( + '...qhd,...khd->...hqk', query, key, precision=precision) + + # Apply attention bias: masking, dropout, proximity bias, etc. + if bias is not None: + attn_weights = attn_weights + bias + if bias_kv is not None: + bias_kv = bias_kv[..., jnp.newaxis, jnp.newaxis, :] + attn_weights += bias_kv + + # Normalize the attention weights. + attn_weights = jax.nn.softmax(attn_weights).astype(dtype) + + if capture_attention_weights: + # Tag the intermediate weights for logging/visualization. + attn_weights = nn_layers.IdentityLayer(name='attn_weights')(attn_weights) + + # Apply attention dropout. + if not deterministic and dropout_rate > 0.: + if dropout_rng is None: + raise ValueError('Did not provide `rng` to dot_product_attention().') + attn_weights = _attention_dropout( + attn_weights, + rate=dropout_rate, + broadcast=broadcast_dropout, + dropout_rng=dropout_rng) + + # Return weighted sum over values for each query position. + return jnp.einsum( + '...hqk,...khd->...qhd', attn_weights, value, precision=precision) + + +def axial_dot_product_attention( + query: jnp.ndarray, + key: jnp.ndarray, + value: jnp.ndarray, + *, + bias: Optional[jnp.ndarray] = None, + bias_kv: Optional[jnp.ndarray] = None, + broadcast_dropout: bool = True, + dropout_rate: float = 0.1, + dtype: jnp.dtype = jnp.float32, + precision: Optional[jax.lax.Precision] = None, + deterministic: bool, + dropout_rng: Optional[jnp.ndarray] = None) -> jnp.ndarray: + """Applies masked, head-axial qkv dot-product attention. + + Assigns different heads for different axes which is more efficient and + allows for having attention on all axes in every layer. + + Args: + query: Queries for calculating attention with shape of `[batch, ..., + num_heads, qk_depth_per_head]`. + key: Keys for calculating attention with shape of `[batch, ..., num_heads, + qk_depth_per_head]`. + value: Values to be used in attention with shape of `[batch, ..., num_heads, + v_depth_per_head]`. + bias: Bias is not supported and will raise an error if passed. + bias_kv: Bias for the attention weights. This should be + broadcastable to the shape: `[batch, ...]`. This can be used for + incorporating causal masks, padding masks, proximity bias, etc. Default + is None, which means no bias is applied on attention matrix. + broadcast_dropout: Use a broadcasted dropout along batch dims. + dropout_rate: Dropout rate. + dtype: The dtype of the computation (default: float32). + precision: Numerical precision of the computation see `jax.lax.Precision` + for details. + deterministic: Deterministic or not (to apply dropout). + dropout_rng: Optional JAX PRNGKey to be used for dropout. + + Returns: + Output of shape `[bs, ..., num_heads, features]`. + """ + if query.shape != key.shape: + raise ValueError('Axial dot product attention only supports ' + 'query and key with the same shape.') + if bias is not None: + raise NotImplementedError('Bias passed to axial attention.') + if bias_kv is not None: + # expand padding mask for head dimension, and last dimension, which will + # be broadcasted. [batch, ..., 1, 1] + bias_kv = bias_kv[..., jnp.newaxis, jnp.newaxis] + # Normalize the query with the squre of its depth. + query = query / jnp.sqrt(query.shape[-1]).astype(dtype) + prefix_str = 'abcdefghijk' + # Split heads for each axial attention dimension. + num_attn_dimensions = query.ndim - 3 # all dims but bs, heads, and channel. + if query.shape[-2] % num_attn_dimensions != 0: + raise ValueError(f'In head-axial dot-product attention, number of ' + f'heads ({query.shape[-2]}) should be divisible by number ' + f'of attention dimensions ({num_attn_dimensions})!') + + queries = jnp.split(query, num_attn_dimensions, axis=-2) + keys = jnp.split(key, num_attn_dimensions, axis=-2) + values = jnp.split(value, num_attn_dimensions, axis=-2) + + outputs = [] + for i, (query, key, value) in enumerate(zip(queries, keys, values)): + axis = i + 1 # + 1 for batch + batch_dims = prefix_str[:axis] + einsum_str = f'{batch_dims}x...z,{batch_dims}y...z->{batch_dims}x...y' + attn_logits = jnp.einsum(einsum_str, query, key, precision=precision) + if bias_kv is not None: + # put attention axis into last dimension + attn_logits += jnp.swapaxes(bias_kv, axis, -1) # {batch_dims}1...y + attn_weights = jax.nn.softmax(attn_logits, axis=-1) + + # Apply dropout. + if not deterministic and dropout_rate > 0.: + attn_weights = _attention_dropout( + attn_weights, + rate=dropout_rate, + broadcast=broadcast_dropout, + dropout_rng=dropout_rng) + einsum_str = f'{batch_dims}x...y,{batch_dims}y...z->{batch_dims}x...z' + outputs.append( + jnp.einsum(einsum_str, attn_weights, value, precision=precision)) + + return jnp.concatenate(outputs, axis=-2) + + +class MultiHeadAttention(nn.Module): + """Customized multi-head attention for scenic. + + Attributes: + num_heads: Number of attention heads. Features (i.e. inputs_q.shape[-1]) + should be divisible by the number of heads. + qkv_features: Dimension of the key, query, and value. + out_features: Dimension of the last projection. + dropout_rate: Dropout rate. + broadcast_dropout: Use a broadcasted dropout along batch dims. + kernel_init: Initializer for the kernel of the Dense layers. + bias_init: Initializer for the bias of the Dense layers. + out_kernel_init: Initializer for the kernel of the output Dense layers. If + None, kernel_init will be used. + use_bias: Whether pointwise QKV dense transforms use bias. + precision: Numerical precision of the computation see `jax.lax.Precision` + for details. + attention_fn: Defaults to dot_product_attention. Other function of the + same signature are possible. + dtype: the dtype of the computation (default: float32). + enforce_hidden_size_divisible_by_heads: Whether or not we allow the hidden + size to not be divisible by the number of heads. + """ + num_heads: int + qkv_features: Optional[int] = None + out_features: Optional[int] = None + dropout_rate: float = 0. + broadcast_dropout: bool = False + kernel_init: Initializer = nn.linear.default_kernel_init + bias_init: Initializer = nn.initializers.zeros + out_kernel_init: Optional[Initializer] = None + use_bias: bool = True + attention_fn: Callable[..., jnp.ndarray] = dot_product_attention + precision: Optional[jax.lax.Precision] = None + dtype: jnp.dtype = jnp.float32 + enforce_hidden_size_divisible_by_heads: bool = True + + @nn.compact + def __call__(self, + inputs_q: jnp.ndarray, + inputs_kv: Optional[jnp.ndarray], + *, + pos_emb_q: Optional[jnp.ndarray] = None, + pos_emb_k: Optional[jnp.ndarray] = None, + pos_emb_v: Optional[jnp.ndarray] = None, + attention_bias: Optional[jnp.ndarray] = None, + attention_bias_kv: Optional[jnp.ndarray] = None, + deterministic: bool = False) -> jnp.ndarray: + """Applies multi-head dot product attention on the input data. + + Projects the inputs into multi-headed query, key, and value vectors, + applies dot-product attention and project the results to an output vector. + + This can be used for encoder-decoder attention by specifying both `inputs_q` + and `inputs_kv` or for self-attention by only specifying `inputs_q` and + setting `inputs_kv` to None. + + Args: + inputs_q: Input queries of shape `[bs, ..., len_q, features]`. + inputs_kv: Key/values of shape `[bs, ..., len_k, features]` or None for + self-attention, in which case key/values will be derived from inputs_q. + pos_emb_q: Positional embedding to be added to the query. + pos_emb_k: Positional embedding to be added to the key. + pos_emb_v: Positional embedding to be added to the value. + attention_bias: Full attention bias. Should be broadcastable to: + inputs_q.shape[:-2] + (num_heads, len_q, len_k). + attention_bias_kv: Attention bias for keys independent of queries which + has shape (bs, ..., len_k). + deterministic: Run deterministically or with dropout. + + Returns: + Output of shape `[bs, ..., features]`. + """ + if inputs_kv is None: + inputs_kv = inputs_q + + features = self.out_features or inputs_q.shape[-1] + qkv_features = self.qkv_features or inputs_q.shape[-1] + + if self.enforce_hidden_size_divisible_by_heads: + assert qkv_features % self.num_heads == 0, ( + 'Memory dimension must be divisible by number of heads.') + head_dim = qkv_features // self.num_heads + + def add_positional_emb(x, pos): + return x + pos if pos is not None else x + + query, key, value = ( + add_positional_emb(inputs_q, pos_emb_q), + add_positional_emb(inputs_kv, pos_emb_k), + add_positional_emb(inputs_kv, pos_emb_v)) + + dense = functools.partial( + nn.DenseGeneral, + axis=-1, + features=(self.num_heads, head_dim), + kernel_init=self.kernel_init, + bias_init=self.bias_init, + use_bias=self.use_bias, + precision=self.precision) + # Project inputs_q to multi-headed q/k/v. + # Dimensions are then [..., l, n_heads, n_features_per_head]. + query, key, value = (dense(name='query')(query), + dense(name='key')(key), + dense(name='value')(value)) + + # pylint: disable=too-many-function-args + attn_kwargs = {} + if attention_bias_kv is not None: + # Not necessarily supported by all underlying functions. + attn_kwargs['bias_kv'] = attention_bias_kv + if not deterministic and self.dropout_rate > 0: + attn_kwargs['dropout_rng'] = self.make_rng('dropout') + + x = self.attention_fn( + query, + key, + value, + bias=attention_bias, + dropout_rate=self.dropout_rate, + broadcast_dropout=self.broadcast_dropout, + deterministic=deterministic, + dtype=self.dtype, + precision=self.precision, + **attn_kwargs) + # pylint: enable=too-many-function-args + + # Back to the original inputs dimensions. + out_kernel_init = (self.out_kernel_init if self.out_kernel_init is not None + else self.kernel_init) + out = nn.DenseGeneral( + features=features, + axis=(-2, -1), + kernel_init=out_kernel_init, + bias_init=self.bias_init, + use_bias=True, + dtype=self.dtype, + precision=self.precision, + name='out')(x) + + return out + + +class MlpBlock(nn.Module): + """Transformer MLP / feed-forward block.""" + + mlp_dim: int + out_dim: Optional[int] = None + dropout_rate: float = 0.1 + use_bias: bool = True + kernel_init: Initializer = nn.initializers.xavier_uniform() + bias_init: Initializer = nn.initializers.normal(stddev=1e-6) + activation_fn: Callable[[jnp.ndarray], jnp.ndarray] = nn.gelu + precision: Optional[jax.lax.Precision] = None + dtype: jnp.ndarray = jnp.float32 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, deterministic: bool): + """Applies Transformer MlpBlock module.""" + actual_out_dim = inputs.shape[-1] if self.out_dim is None else self.out_dim + x = nn.Dense( + self.mlp_dim, + dtype=self.dtype, + use_bias=self.use_bias, + kernel_init=self.kernel_init, + bias_init=self.bias_init, + precision=self.precision)( + inputs) + x = nn_layers.IdentityLayer(name='mlp1')(self.activation_fn(x)) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=deterministic) + output = nn.Dense( + actual_out_dim, + dtype=self.dtype, + use_bias=self.use_bias, + kernel_init=self.kernel_init, + bias_init=self.bias_init, + precision=self.precision)( + x) + output = nn_layers.IdentityLayer(name='mlp2')(output) + output = nn.Dropout(rate=self.dropout_rate)( + output, deterministic=deterministic) + return output + + +def sinusoidal_init(max_len: int, max_timescale: float = 1.0e4): + """1D Sinusoidal Position Embedding Initializer. + + Args: + max_len: maximum possible length for the input. + max_timescale: Maximum time scale. + + Returns: + output: init function returning `(1, max_len, d_feature)` + """ + + def init(key: jnp.ndarray, + shape: Sequence[int], + dtype: jnp.dtype = jnp.float32) -> jnp.ndarray: + """Sinusoidal init. + + The defined API by JAX for a custom initializer is: + `def init(key, shape, dtype)` + + Even though some of args might be not used, the signature should follow + this API as JAX passes all the three arguments (key, shape, dtype) + to the initializers. + + Args: + key: JAXPRNG key. + shape: Shape used for making the initialized values. + dtype: JAX data type. + + Returns: + Initialized values + """ + del key, dtype + d_feature = shape[-1] + pos_emb = np.zeros((max_len, d_feature), dtype=np.float32) + position = np.arange(0, max_len)[:, np.newaxis] + div_term = np.exp( + np.arange(0, d_feature, 2) * -(np.log(max_timescale) / d_feature)) + pos_emb[:, 0::2] = np.sin(position * div_term) + pos_emb[:, 1::2] = np.cos(position * div_term) + pe = pos_emb[np.newaxis, :, :] # Shape: `[1, max_len, d_feature]`. + return jnp.array(pe) + + return init + + +class Add1DPositionEmbedding(nn.Module): + """Adds 1-dimensional positional embeddings to the inputs. + + Attributes: + rescale_from: tuple; If not None, embeddings are rescaled from this shape. + max_len: int; Maximum possible length for the input. If None, the max_len is + set to the inputs sequence length. + posemb_init: Positional embedding initializer. + param_name: The name of the parameter that stores the positional embedding. + """ + + rescale_from: Optional[Sequence[int]] = None + max_len: Optional[int] = None + posemb_init: Optional[Initializer] = None + param_name: str = 'pos_embedding' + + @nn.compact + def __call__(self, inputs: jnp.ndarray) -> jnp.ndarray: + """Applies Add1DPositionEmbedding module. + + Args: + inputs: nd-arrary; Input data. + + Returns: + Output: `(bs, timesteps, in_dim)`. + """ + assert inputs.ndim == 3, ('Number of dimensions should be 3,' + ' but it is: %d' % inputs.ndim) + length = inputs.shape[1] + max_len = self.max_len or length + embedding_length = max_len + + if self.rescale_from: # Shape: `[len, c]`. + embedding_length = self.rescale_from[0] + + pos_emb_shape = (1, embedding_length, inputs.shape[-1]) + if self.posemb_init is None: + # Use a fixed (non-learned) sinusoidal position embedding. + pos_embedding = sinusoidal_init(max_len=embedding_length)(None, # pytype: disable=wrong-arg-types # jax-ndarray + pos_emb_shape, + None) + else: + pos_embedding = self.param(self.param_name, self.posemb_init, + pos_emb_shape) + pe = pos_embedding[:, :length, :] + + if max_len != embedding_length: + pe = jax.image.resize( + pe, (1, max_len, pe.shape[-1]), method='bilinear', antialias=False) + pe = jnp.reshape(pe, (1, max_len, -1)) + return inputs + pe + + +class Add2DPositionEmbedding(nn.Module): + """Adds 2-dimensional positional embeddings to the inputs. + + Attributes: + rescale_from: tuple; If not None, embeddings are rescaled from this shape. + posemb_init: Positional embedding initializer. + """ + + rescale_from: Optional[Tuple[int, ...]] = None + posemb_init: Initializer = nn.initializers.normal(stddev=0.02) # From BERT. + + @nn.compact + def __call__(self, inputs: jnp.ndarray) -> jnp.ndarray: + """Applies Add2DPositionEmbedding module. + + Args: + inputs: nd-arrary; Input data. + + Returns: + Output: `(bs, h, w, c)`. + """ + assert inputs.ndim == 4, ('Number of dimensions should be 4,' + ' but it is: %d' % inputs.ndim) + _, h, w, c = inputs.shape + embedding_h, embedding_w = h, w + if self.rescale_from: # `[h, w, c]` + embedding_h, embedding_w = self.rescale_from[0], self.rescale_from[1] + + row_pos_embed = self.param('row_pos_embedding', self.posemb_init, + (embedding_w, c // 2)) + col_pos_embed = self.param('col_pos_embedding', self.posemb_init, + (embedding_h, c // 2)) + # To `[h, w, c//2]`. + x_pos_emb = jnp.tile( + jnp.expand_dims(row_pos_embed, axis=0), (embedding_h, 1, 1)) + # To `[h, w, c//2]`. + y_pos_emb = jnp.tile( + jnp.expand_dims(col_pos_embed, axis=1), (1, embedding_w, 1)) + # To `[h, w, c]`. + pos = jnp.concatenate((x_pos_emb, y_pos_emb), axis=-1) + + if w != embedding_w or h != embedding_h: + pos = jax.image.resize(pos, (h, w, c), method='bilinear', antialias=False) + + # To `[1, h, w, c]`. + pos = jnp.expand_dims(pos, axis=0) + + return inputs + pos + + +def get_fixed_sincos_position_embedding(x_shape: Shape, + temperature: float = 10_000, + dtype: jnp.dtype = jnp.float32): + """Provides a fixed position encoding for 2D and 3D coordinates. + + The embedding follows the initialisation method used in multiple papers such + as "Attention is All You Need", https://arxiv.org/abs/1706.03762 and + "Better plain ViT baselines for ImageNet-1k", https://arxiv.org/abs/2205.01580 + + Arguments: + x_shape: the shape of the input for which a position embedding is needed. + temperature: Temperature parameter. + dtype: dtype of the position encoding. + Returns: + Matrix of position embeddings, has shape [1, ...], where ... = x_shape[1:]. + """ + assert len(x_shape) in (4, 5), f'Unsupported input shape: {x_shape}' + num_parts = 4 if len(x_shape) == 4 else 6 + channels = x_shape[-1] + assert channels % num_parts == 0, f'Channels must be multiple of {num_parts}' + omega = jnp.arange( + channels // num_parts, dtype=jnp.float32) / (channels / num_parts) + omega = 1. / (temperature**omega) + + if len(x_shape) == 4: # 2D input. + _, h, w, _ = x_shape + y, x = jnp.mgrid[:h, :w] + y = jnp.einsum('m,d->md', y.flatten(), omega) + x = jnp.einsum('m,d->md', x.flatten(), omega) + p = [jnp.sin(x), jnp.cos(x), jnp.sin(y), jnp.cos(y)] + shape = (1, h, w, channels) + elif len(x_shape) == 5: # 3D input. + _, t, h, w, _ = x_shape + z, y, x = jnp.mgrid[:t, :h, :w] + z = jnp.einsum('m,d->md', z.flatten(), omega) + y = jnp.einsum('m,d->md', y.flatten(), omega) + x = jnp.einsum('m,d->md', x.flatten(), omega) + p = [jnp.sin(z), jnp.cos(z), + jnp.sin(x), jnp.cos(x), + jnp.sin(y), jnp.cos(y)] + shape = (1, t, h, w, channels) + else: # Should never reach there because of assert at beginning. + raise ValueError(f'Unsupported input shape: {x_shape}') + + assert (shape[0] == 1) and (shape[1:] == x_shape[1:]) + pe = jnp.concatenate(p, axis=1) + return jnp.asarray(pe, dtype).reshape(*shape) + + +class AddFixedSinCosPositionEmbedding(nn.Module): + """Provides a fixed position encoding for 2D and 3D coordinates. + + The embedding follows the initialisation method used in multiple papers such + as "Attention is All You Need", https://arxiv.org/abs/1706.03762 and + "Better plain ViT baselines for ImageNet-1k", https://arxiv.org/abs/2205.01580 + + Attributes: + temperature: Temperature parameter. + dtype: dtype of the position encoding. + """ + temperature: float = 10_000 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, inputs: jnp.ndarray) -> jnp.ndarray: + """Adds the fixed embedding to the inputs. + + Args: + inputs: Either an [N, W, H, C] or [N, T, W, H, C] input array. + + Returns: + inputs with position encodings added to them. + """ + return inputs + get_fixed_sincos_position_embedding( + inputs.shape, self.temperature, self.dtype) + + +class RelativeAttentionBias(nn.Module): + """Provides learnable NxN relative attention bias. + + Attributes: + num_heads: Number of heads for which to provide relative attention. + nd_shape: Shape for which to provided relative attention bias. For instance, + for images we we would provide a 2D shape. Note that batch and feature + dimensions should be excluded here. + initializer: Initializer for the bias. + """ + + num_heads: int + nd_shape: Sequence[int] + initializer: Initializer = nn.initializers.zeros + + @nn.compact + def __call__(self) -> jnp.ndarray: + """Creates relative attention bias that factorizes over dimensions. + + length = prod(nd_shape) + + Returns: + Bias of shape `[num_heads, length, length]`. + """ + length = np.prod(self.nd_shape) + tile = 1 + biases = [] + for i, l in enumerate(self.nd_shape): + # Relative attention in every dimension separately. + if l > 1: + new_bias = self.relative_attn_bias(l, self.num_heads, f'bias_{i}') + repeat = length // (tile * l) + if repeat > 1: + new_bias = new_bias[:, :, jnp.newaxis, :, jnp.newaxis] + new_bias = jnp.tile(new_bias, [1, tile, repeat, tile, repeat]) + new_bias = jnp.reshape(new_bias, [self.num_heads, length, length]) + elif tile > 1: + new_bias = jnp.tile(new_bias, [1, tile, tile]) + tile *= l + biases.append(new_bias) + + return sum(biases) + + def relative_attn_bias(self, length, num_heads, name): + """Computes attention bias based on relative positions. + + Content-based relative position attention bias was used in: + https://arxiv.org/pdf/1803.02155. + Non-content-based relative position attention bias was used in: + https://arxiv.org/abs/1606.01933. + + Args: + length: Length of self-attention window for relative attention. + num_heads: Number of attention heads. + name: Name of the parameter to be created. + + Returns: + A `[num_heads, length, length]` tensor with queries. + """ + # Actually we need only 2 * length - 1 relative positions, but we need at + # least another entry as padding for relative shift of each row to the right + num_rel_pos = 2 * length + + rel_bias = self.param( + name, self.initializer, (self.num_heads, num_rel_pos)) + + # Now we have to shift in order to compute relative biases. + # Example: length = 3 + # Say we want: [[0, 1, 2], [-1, 0, 1], [-2, -1, 0]] + # Start: [[-2, -1, 0, 1, 2, 3], [-2, -1, 0, 1, 2, 3], [-2, -1, 0, 1, 2, 3]] + # We linearize: [-2, -1, 0, 1, 2, 3, -2, -1, 0, 1, 2, 3, -2, -1, 0, 1, 2, 3] + # We slice: [-2, -1, 0, 1, 2, 3, -2, -1, 0, 1, 2, 3, -2, -1, 0] + # We reshape: [[-2, -1, 0, 1, 2], [3, -2, -1, 0, 1], [2, 3, -2, -1, 0]] + # We slice: [[0, 1, 2], [-1, 0, 1], [-2, -1, 0]] + # Tadaaa! + + # [heads, length * num_rel_pos] + rel_bias = jnp.tile(rel_bias, [1, length]) + + # [heads, length * (num_rel_pos - 1)] + num_rel_pos -= 1 + rel_bias = rel_bias[..., :length * num_rel_pos] + + # [heads, length, num_rel_pos - 1] + # Now every row is shifted by 1 to the right. + rel_bias = rel_bias.reshape(num_heads, length, num_rel_pos) + + # [heads, length, length] + # Slice the overlapping elements from start. + rel_bias = rel_bias[..., num_rel_pos - length:] + + return rel_bias diff --git a/scenic/model_lib/layers/masked_layers.py b/scenic/model_lib/layers/masked_layers.py new file mode 100644 index 0000000000000000000000000000000000000000..ad1b41b3683eaf5253a826f03f4904bcae7db577 --- /dev/null +++ b/scenic/model_lib/layers/masked_layers.py @@ -0,0 +1,694 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Masked Flax layers. + +Useful when images (or more broadly) tensors are padded to maximum size for +batching. E.g. a naive convolution of will introduce edge effects that are +different for the padded and unpadded edges of the tensor; similarly, a naive +batch norm will aggregate accross masked out positions, etc. This module +introduces a Flax layers that do not suffer from this. +""" + +import enum +import functools +from typing import Optional, Tuple, Union, Callable, Any, Sequence, List, Iterable + +import flax.linen as nn +import jax +from jax import lax +import jax.numpy as jnp +import numpy as np + + +def _absolute_dims(rank: int, dims: Iterable[int]): + return tuple([rank + dim if dim < 0 else dim for dim in dims]) + + +def avg_pool( + inputs: jnp.ndarray, + window_shape: Tuple[int, ...], + strides: Optional[Tuple[int, ...]] = None, + padding: Union[str, Sequence[Tuple[int, int]]] = 'VALID', + spatial_shape: Optional[jnp.ndarray] = None +) -> Tuple[jnp.ndarray, Optional[jnp.ndarray]]: + """Pools the input by taking the average over a window. + + Args: + inputs: Input data with dimensions (batch, window_dims..., features). + window_shape: Shape tuple defining the window to reduce over. + strides: A sequence of `n` integers, representing the inter-window + strides (default: `(1, ..., 1)`). + padding: Either the string `'SAME'`, the string `'VALID'`, or a sequence + of `n` `(low, high)` integer pairs that give the padding to apply before + and after each spatial dimension (default: `'VALID'`). + spatial_shape: Per-input spatial shape of *unpadded* input data with + dimensions (batch, window_dims). + + Returns: + The average for each window slice. + """ + inputs = nn.avg_pool(inputs, window_shape, strides=strides, padding=padding) + if spatial_shape is not None: + if (isinstance(padding, str) and padding.upper() == 'SAME' and + window_shape != (1,) * len(window_shape)): + raise NotImplementedError( + "Padding 'SAME' is not supported by masked mean pool.") + spatial_shape = _conv_output_shape(spatial_shape=spatial_shape, + kernel_size=window_shape, + input_dilation=None, + kernel_dilation=None, + strides=strides, + padding=padding) + inputs = apply_spatial_mask(inputs, spatial_shape) + + return inputs, spatial_shape + + +def max_pool( + inputs: jnp.ndarray, + window_shape: Tuple[int, ...], + strides: Optional[Tuple[int, ...]] = None, + padding: Union[str, Sequence[Tuple[int, int]]] = 'VALID', + spatial_shape: Optional[jnp.ndarray] = None +) -> Tuple[jnp.ndarray, Optional[jnp.ndarray]]: + """Pools the input by taking the maximum of a window slice. + + Args: + inputs: Input data with dimensions (batch, window_dims..., features). + window_shape: A shape tuple defining the window to reduce over. + strides: A sequence of `n` integers, representing the inter-window + strides (default: `(1, ..., 1)`). + padding: Either the string `'SAME'`, the string `'VALID'`, or a sequence + of `n` `(low, high)` integer pairs that give the padding to apply before + and after each spatial dimension (default: `'VALID'`). + spatial_shape: Per-input spatial shape of *unpadded* input data with + dimensions (batch, window_dims). + + Returns: + The maximum for each window slice. + """ + if spatial_shape is not None: + # Unlike for avg pool, for max pool a spatial mask must be applied first. + inputs = apply_spatial_mask(inputs, spatial_shape, value=-jnp.inf) + + inputs = nn.max_pool(inputs, window_shape, strides=strides, padding=padding) + if spatial_shape is not None: + if (isinstance(padding, str) and padding.upper() == 'SAME' and + window_shape != (1,) * len(window_shape)): + raise NotImplementedError( + "Padding 'SAME' is not supported by masked max pool.") + spatial_shape = _conv_output_shape(spatial_shape=spatial_shape, + kernel_size=window_shape, + input_dilation=None, + kernel_dilation=None, + strides=strides, + padding=padding) + inputs = apply_spatial_mask(inputs, spatial_shape) + + return inputs, spatial_shape + + +def _bn_agg_mean_var( + x: jnp.ndarray, + axis: Union[Tuple[int, ...], int], + p_agg: bool, *, + axis_name: Optional[str] = None, + axis_index_groups: Optional[Sequence[Sequence[int]]] = None, + spatial_shape: Optional[jnp.ndarray] = None): + """Aggregate batch statistics accross devices. + + Args: + x: Inputs to compute batch statistics on. + axis: Reduction axes for the stats. + p_agg: If True, parallel aggregation is performed using psum. + axis_name: Name of the axis for psum aggregation. + axis_index_groups: Groups of axis indices within that named axis + representing subsets of devices to reduce over (default: None). + spatial_shape: Per-input spatial shape of *unpadded* input data with + dimensions (batch, spatial_dims, channels). + + Returns: + Batch stats (mean and variance). + """ + # When using spatial padding, we cannot accumulate the mean directly and + # instead must aaccumulate the numerator and sum directly. + acc_sum = jnp.sum(x, axis=axis, keepdims=False) + acc_sum2 = jnp.sum(lax.square(x), axis=axis, keepdims=False) + if spatial_shape is None: + denom = np.prod([x.shape[i] for i in axis]) + else: + reduction_axis_shifted = tuple(i - 1 for i in axis if i > 0) + denom = jnp.prod(spatial_shape[:, reduction_axis_shifted], axis=-1) + denom = jnp.sum(denom) + + if p_agg: + concatenated_acc_sum = jnp.concatenate([acc_sum, acc_sum2, denom]) + acc_sum, acc_sum2, denom = jnp.split( + lax.psum( + concatenated_acc_sum, + axis_name=axis_name, + axis_index_groups=axis_index_groups), 3) + + denom = jnp.maximum(denom, 1.) + mean = acc_sum / denom + var = acc_sum2 / denom - lax.square(mean) + return mean, var + + +class BatchNorm(nn.Module): + """Masking-aware Batch Normalization layer. + + Attributes: + use_running_average: If True, the statistics stored in batch_stats + will be used instead of computing the batch statistics on the input. + axis: The feature or non-batch axis of the input. + momentum: Decay rate for the exponential moving average of + the batch statistics. + epsilon: A small float added to variance to avoid dividing by zero. + dtype: The dtype of the computation (default: float32). + use_bias: If True, bias (beta) is added. + use_scale: If True, multiply by scale (gamma). + When the next layer is linear (also e.g. nn.relu), this can be disabled + since the scaling will be done by the next layer. + bias_init: Initializer for bias, by default, zero. + scale_init: Initializer for scale, by default, one. + spatial_norm: If True, spatial shapes influence group norm weights, + otherwise every batch element has an equal weight. + axis_name: Axis name used to combine batch statistics from multiple + devices. See `jax.pmap` for a description of axis names (default: None). + axis_index_groups: Groups of axis indices within that named axis + representing subsets of devices to reduce over (default: None). For + example, `[[0, 1], [2, 3]]` would independently batch-normalize over the + examples on the first two and last two devices. See `jax.lax.psum` for + more details. + """ + + use_running_average: Optional[bool] = None + axis: int = -1 + momentum: float = 0.99 + epsilon: float = 1e-5 + dtype: jnp.dtype = jnp.float32 + use_bias: bool = True + use_scale: bool = True + bias_init: Callable[ + [Any, Tuple[int, ...], Any], Any] = nn.initializers.zeros + scale_init: Callable[ + [Any, Tuple[int, ...], Any], Any] = nn.initializers.ones + spatial_norm: bool = True + axis_name: Optional[str] = None + axis_index_groups: Optional[Sequence[Sequence[int]]] = None + + @nn.compact + def __call__( + self, + x: jnp.ndarray, + use_running_average: Optional[bool] = None, + spatial_shape: Optional[jnp.ndarray] = None + ) -> Tuple[jnp.ndarray, Optional[jnp.ndarray]]: + """Normalizes the input using batch statistics. + + Args: + x: The input to be normalized. + use_running_average: If True, the statistics stored in batch_stats will be + used instead of computing the batch statistics on the input. + spatial_shape: Per-input spatial shape of *unpadded* input data with + dimensions (batch, spatial_dims, channels). + + Returns: + Normalized inputs (the same shape as inputs) and the spatial shape. + """ + use_running_average = nn.module.merge_param( + 'use_running_average', self.use_running_average, use_running_average) + x = jnp.asarray(x, jnp.float32) + axis = self.axis if isinstance(self.axis, tuple) else (self.axis,) + axis = _absolute_dims(x.ndim, axis) + feature_shape = tuple(d if i in axis else 1 for i, d in enumerate(x.shape)) + reduced_feature_shape = tuple(d for i, d in enumerate(x.shape) if i in axis) + reduction_axis = tuple(i for i in range(x.ndim) if i not in axis) + + # Detect if we're in initialization via empty variable tree. + initializing = not self.has_variable('batch_stats', 'mean') + + ra_mean = self.variable('batch_stats', 'mean', + lambda s: jnp.zeros(s, jnp.float32), + reduced_feature_shape) + ra_var = self.variable('batch_stats', 'var', + lambda s: jnp.ones(s, jnp.float32), + reduced_feature_shape) + + if use_running_average: + mean, var = ra_mean.value, ra_var.value + else: + p_agg = ((self.axis_name is not None) and (not initializing) + and self.spatial_norm) + mean, var = _bn_agg_mean_var( + x, + reduction_axis, + p_agg, + axis_name=self.axis_name, + axis_index_groups=self.axis_index_groups, + spatial_shape=spatial_shape) + + if not initializing: + ra_mean.value = (self.momentum * ra_mean.value + + (1 - self.momentum) * mean) + ra_var.value = (self.momentum * ra_var.value + + (1 - self.momentum) * var) + + # Apply normaliation. + mean, var = mean.reshape(feature_shape), var.reshape(feature_shape) + y = x - mean + mul = lax.rsqrt(var + self.epsilon) + + if self.use_scale: + scale = self.param('scale', + self.scale_init, + reduced_feature_shape).reshape(feature_shape) + mul = mul * scale + y = y * mul + if self.use_bias: + bias = self.param('bias', + self.bias_init, + reduced_feature_shape).reshape(feature_shape) + y = y + bias + + if spatial_shape is not None: + # Restore spatial mask for the outputs. + y = apply_spatial_mask(y, spatial_shape) + return jnp.asarray(y, self.dtype), spatial_shape + + +class GroupNorm(nn.Module): + """Masking-aware Group Normalization (arxiv.org/abs/1803.08494). + + This op is similar to batch normalization, but statistics are shared across + equally-sized groups of channels and not shared across batch dimension. + Thus, group normalization does not depend on the batch composition and does + not require maintaining internal state for storing statistics. + The user should either specify the total number of channel groups or the + number of channels per group. + + Attributes: + num_groups: Total number of channel groups. The default value of 32 is + proposed by the original group normalization paper. + group_size: The number of channels in a group. + epsilon: A small float added to variance to avoid dividing by zero. + dtype: The dtype of the computation (default: float32). + use_bias: If True, bias (beta) is added. + use_scale: If True, multiply by scale (gamma). When the next layer is linear + (also e.g. nn.relu), this can be disabled since the scaling will be done + by the next layer. + bias_init: Initializer for bias, by default, zero. + scale_init: Initializer for scale, by default, one. + spatial_norm: If True, spatial shapes influence group norm weights, + otherwise every batch element has an equal weight. + """ + + num_groups: int = 32 + group_size: Optional[int] = None + epsilon: float = 1e-6 + dtype: jnp.dtype = jnp.float32 + use_bias: bool = True + use_scale: bool = True + bias_init: Callable[ + [Any, Tuple[int, ...], Any], Any] = nn.initializers.zeros + scale_init: Callable[ + [Any, Tuple[int, ...], Any], Any] = nn.initializers.ones + spatial_norm: bool = True + + @nn.compact + def __call__( + self, + x: jnp.ndarray, + spatial_shape: Optional[jnp.ndarray] = None, + ) -> Tuple[jnp.ndarray, Optional[jnp.ndarray]]: + """Applies group normalization to the input (arxiv.org/abs/1803.08494). + + Args: + x: Input of shape N...C, where N is a batch dimension and C is a channels + dimensions. `...` represents an arbitrary number of extra dimensions + that are used to accumulate statistics over. + spatial_shape: Per-input spatial shape of *unpadded* input data with + dimensions (batch, spatial_dims, channels). + + Returns: + Normalized inputs (the same shape as inputs). + """ + x = jnp.asarray(x, jnp.float32) + if ((self.num_groups is None and self.group_size is None) or + (self.num_groups is not None and self.group_size is not None)): + raise ValueError('Either `num_groups` or `group_size` should be ' + 'specified, but not both of them.') + num_groups = self.num_groups + + channels = x.shape[-1] + if self.group_size is not None: + if channels % self.group_size != 0: + raise ValueError('Number of channels ({}) is not multiple of the ' + 'group size ({}).'.format(channels, self.group_size)) + num_groups = channels // self.group_size + + if num_groups <= 0 or channels % num_groups != 0: + raise ValueError('Number of groups ({}) does not divide the number' + ' of channels ({}).'.format(num_groups, channels)) + + input_shape = x.shape + group_shape = x.shape[:-1] + (num_groups, x.shape[-1] // num_groups) + x = x.reshape(group_shape) + + reduction_axis = tuple(range(1, x.ndim - 2)) + (x.ndim - 1,) + mean = jnp.mean(x, axis=reduction_axis, keepdims=True) + mean_of_squares = jnp.mean(jnp.square(x), axis=reduction_axis, + keepdims=True) + orig_denom = np.prod([x.shape[i] for i in reduction_axis[:-1]]) + if (spatial_shape is not None) and self.spatial_norm: + reduction_axis_shifted = tuple( + i - 1 for i in reduction_axis[:-1] if i > 0) + denom = jnp.prod(spatial_shape[:, reduction_axis_shifted], axis=-1) + denom = jnp.reshape(denom, (denom.shape[0],) + (1,) * (mean.ndim - 1)) + denom = jnp.maximum(denom, 1.) + mean = mean * (orig_denom / denom) + mean_of_squares = mean_of_squares * (orig_denom / denom) + + var = mean_of_squares - jnp.square(mean) + x = (x - mean) * lax.rsqrt(var + self.epsilon) + x = x.reshape(input_shape) + + feature_shape = tuple([1 for d in input_shape[:-1]] + [input_shape[-1]]) + if self.use_scale: + x *= self.param('scale', self.scale_init, feature_shape) + if self.use_bias: + x += self.param('bias', self.bias_init, feature_shape) + + if spatial_shape is not None: + # Restore spatial mask for the outputs. + x = apply_spatial_mask(x, spatial_shape) + return x.astype(self.dtype), spatial_shape + + +class Conv(nn.Conv): + """Masked convolution. + + Attributes: + features: Number of convolution filters. + kernel_size: Shape of the convolutional kernel. For 1D convolution, + the kernel size can be passed as an integer. For all other cases, it + must be a sequence of integers. + strides: A sequence of `n` integers, representing the inter-window + strides. + padding: Either the string `'SAME'`, the string `'VALID'`, or a sequence + of `n` `(low, high)` integer pairs that give the padding to apply before + and after each spatial dimension. + input_dilation: `None`, or a sequence of `n` integers, giving the + dilation factor to apply in each spatial dimension of `inputs`. + Convolution with input dilation `d` is equivalent to transposed + convolution with stride `d`. + kernel_dilation: `None`, or a sequence of `n` integers, giving the + dilation factor to apply in each spatial dimension of the convolution + kernel. Convolution with kernel dilation is also known as 'atrous + convolution'. + bias: Whether to add a bias to the output (default: True). + dtype: The dtype of the computation (default: float32). + precision: Numerical precision of the computation see `jax.lax.Precision` + for details. + kernel_init: Initializer for the convolutional kernel. + bias_init: Initializer for the bias. + """ + + features: int + kernel_size: Union[int, Tuple[int, ...]] + strides: Optional[Tuple[int, ...]] = None + padding: Union[str, Sequence[Tuple[int, int]]] = 'SAME' + input_dilation: Optional[Tuple[int, ...]] = None + kernel_dilation: Optional[Tuple[int, ...]] = None + use_bias: bool = True + dtype: jnp.dtype = jnp.float32 + precision: Optional[jax.lax.Precision] = None + kernel_init: Callable[ # pytype: disable=annotation-type-mismatch # jax-types + [Any, Sequence[int], Any], Any] = nn.linear.default_kernel_init + bias_init: Callable[ + [Any, Sequence[int], Any], Any] = nn.initializers.zeros + + @nn.compact + def __call__( + self, + inputs: jnp.ndarray, + spatial_shape: Optional[jnp.ndarray] = None + ) -> Tuple[jnp.ndarray, Optional[jnp.ndarray]]: + """Applies a *masked* convolution to the inputs. + + Args: + inputs: Input data with dimensions (batch, spatial_dims..., features). + spatial_shape: Per-input spatial shape of *unpadded* input data with + dimensions (batch, len(spatial_dims)). + + Returns: + The convolved data and the output spatial size as a tuple. + """ + outputs = super(Conv, self).__call__(inputs) + kernel_size = self.kernel_size + if isinstance(kernel_size, int): + kernel_size = (kernel_size,) + + if spatial_shape is not None: + if (isinstance(self.padding, str) and self.padding.upper() == 'SAME' and + kernel_size != (1,) * len(kernel_size)): + # In the case of 'SAME' padding the ammounts padded on the left and + # right depend on the shape of the input (which is dynamic in our case), + # the stride and the kernel size. In our case this means that each + # element of the batch might have to be paded in a different way and + # cannnot be batched. + # Because the possible number of dynamic pads for a given stride kernel + # size is finite, it should be possible in theory to run all of them and + # then select the correct out for masking. The implementation is left + # for a time when we have a use case for this. + raise NotImplementedError( + "Padding 'SAME' is not supported by masked convolutions.") + spatial_shape = _conv_output_shape(spatial_shape=spatial_shape, + kernel_size=kernel_size, + input_dilation=self.input_dilation, + kernel_dilation=self.kernel_dilation, + strides=self.strides, + padding=self.padding) + outputs = apply_spatial_mask(outputs, spatial_shape) + return outputs, spatial_shape + + +def apply_spatial_mask( + inputs: jnp.ndarray, + spatial_shape: jnp.ndarray, + value: float = 0.) -> jnp.ndarray: + """Construct and apply spatial mask to the inputs. + + Args: + inputs: Input tensor with dimensions [batch, spatial_dim, dim] to which the + mask should be applied. + spatial_shape: Per-input spatial shape of *unpadded* input data with + dimensions (batch, len(spatial_dims)). + value: Value to use for the mask (default: 0). + + Returns: + Inputs with masking spatial masking applied to them. + """ + assert inputs.shape[0] == spatial_shape.shape[0] + assert spatial_shape.shape[1] == inputs.ndim - 2 + mask = mask_from_spatial(inputs.shape[1:-1], spatial_shape, per_axis=False) + mask = jnp.expand_dims(mask, axis=-1) + inputs = jnp.where(mask, inputs, value) + return inputs + + +def mask_from_spatial( + padded_shape: Tuple[int, ...], + spatial_shape: jnp.ndarray, + per_axis: bool = False) -> Union[jnp.ndarray, List[jnp.ndarray]]: + """Create a spatial mask for a given padded shape and spatial size. + + Args: + padded_shape: Shape of the spatial dimensions padded data that needs to be + masked. + spatial_shape: Per-element unpadded spatial size of the data with dimensions + (batch, len(padded_shape)). + per_axis: If True, per list of per-spatial-dim masks is returned instead of + a single mask; that should enable some memory savings as it allows for + shape boradcasting to happen only when it is required. + + Returns: + The spatial mask. + """ + assert spatial_shape.ndim == 2 + assert len(padded_shape) == spatial_shape.shape[1] + ndim = spatial_shape.shape[1] + + masks = [] + for i in range(ndim): + # Construct per-axis mask and then broadcast if asked for. + mask = jnp.arange(0, padded_shape[i], dtype=jnp.int32) + mask = jnp.reshape( + mask, + (1,) * (i + 1) + (padded_shape[i],) + (1,) * (ndim - i - 1)) + threshold = spatial_shape[:, i] + threshold = jnp.reshape(threshold, (spatial_shape.shape[0],) + (1,) * ndim) + mask = mask < threshold + masks.append(mask) + + if not per_axis: + masks = functools.reduce(jnp.logical_and, masks) + return masks + + +def _dilate_shape(shape: jnp.ndarray, dilation: Tuple[int, ...]): + """Utility function for computing the shape resulting from a dilation. + + Args: + shape: Shapes (input or kernel i.e. lhr or rhs) to which the dilation should + be applied. + dilation: The dilation to apply. + + Returns: + Dilated input shapes. + """ + if not np.all(np.greater(dilation, 0)): + raise TypeError(f'All dilations must be positive, got {dilation}.') + dilation = (1,) * (shape.shape[1] - len(dilation)) + tuple(dilation) + dilation = jnp.array(dilation) + return jnp.where(shape == 0, 0, + jnp.multiply(dilation, jnp.subtract(shape, 1)) + 1) + + +def _conv_output_shape( + spatial_shape: jnp.ndarray, + kernel_size: Tuple[int, ...], + input_dilation: Optional[Tuple[int, ...]], + kernel_dilation: Optional[Tuple[int, ...]], + strides: Optional[Tuple[int, ...]], + padding: Union[str, Sequence[Tuple[int, int]]]) -> jnp.ndarray: + """Convenience wrapper function for inferring the convolution output shape. + + Args: + spatial_shape: Input (lhs) shapes for which the output shapes should be + inferred as array with dimensions (batch, spatial_dims, dims). + kernel_size: Covolution kernel size (i.e. rhs shape). + input_dilation: Input (lhs) dilation. + kernel_dilation: Convolution kernel (rhs) dilation. + strides: Convolution (rhs) stride. + padding: Input (lhs) padding. + + Returns: + Inferred convolution output shapes as array with dimensions + (batch, len(spatial_dims)). + """ + strides = strides or (1,) * len(kernel_size) + if input_dilation is not None: + spatial_shape = _dilate_shape(spatial_shape, input_dilation) + if kernel_dilation is not None: + kernel_size = tuple( + (k - 1) * r + 1 for k, r in zip(kernel_size, kernel_dilation)) + spatial_shape = jnp.concatenate( + [jnp.ones((spatial_shape.shape[0], 2), dtype=jnp.int32), spatial_shape], + axis=-1) + out_shape = conv_shape_tuple(lhs_shape=spatial_shape, + rhs_shape=(1, 1) + kernel_size, + strides=strides, + pads=padding) + return out_shape[:, 2:] + + +def _ceil_divide(x1: jnp.ndarray, x2: jnp.ndarray) -> jnp.ndarray: + """Ceil division of two JAX arrays.""" + return -jnp.floor_divide(jnp.negative(x1), x2) + + +class PaddingType(enum.Enum): + VALID = 1 + SAME = 2 + + +def padtype_to_pads( + in_shape: jnp.ndarray, + window_shape: Tuple[int, ...], + window_strides: Tuple[int, ...], + padding: str) -> jnp.ndarray: + """Convert padding string to list of pairs of pad values. + + Args: + in_shape: Input (lhs) shapes for which the padding should be inferred as + array with dimensions (batch, spatial_dims). + window_shape: Window (kernel; rhs) shape of the convolution. + window_strides: Window (kernel; rhs) convolution strides. + padding: Convlution (rhs) padding. + + Returns: + Inferred lhs paddings as array with dimensions + (batch, len(spatial_dims), 2). + """ + if isinstance(padding, str): + mapping = {'VALID': PaddingType.VALID, 'SAME': PaddingType.SAME} + try: + padding = mapping[padding.upper()] + except KeyError as err: + msg = "Unrecognized padding type: expected 'VALID' or 'SAME', got {}." + raise RuntimeError(msg.format(padding)) from err + + if padding == PaddingType.SAME: + window_shape = jnp.array(window_shape) + window_strides = jnp.array(window_strides) + out_shape = _ceil_divide(in_shape, window_strides) + pad_sizes = jnp.maximum( + (out_shape - 1) * window_strides + window_shape - in_shape, 0) + pad_sizes = jnp.stack([pad_sizes // 2, pad_sizes - pad_sizes // 2], axis=1) + return pad_sizes + elif padding == PaddingType.VALID: + return jnp.zeros((in_shape.shape[0], len(window_shape), 2), dtype=jnp.int32) + raise TypeError(f'Unknown padding type: {padding}.') + + +def conv_shape_tuple( + lhs_shape: jnp.ndarray, + rhs_shape: Tuple[int, ...], + strides: Tuple[int, ...], + pads: Union[str, Sequence[Tuple[int, int]]]) -> jnp.ndarray: + """Compute the shape of a conv given input shapes in canonical order. + + Args: + lhs_shape: Input (lhs) shapes for which the output shapes should be inferred + as array with dimensions (batch, spatial_dims, dims). + rhs_shape: Covolution kernel size (i.e. rhs shape). + strides: Convolution (rhs) stride. + pads: Input (lhs) padding. + + Returns: + Inferred convolution output shapes as array with dimensions + (batch, len(spatial_dims)). + """ + if isinstance(pads, str): + pads = padtype_to_pads(lhs_shape[:, 2:], rhs_shape[2:], strides, pads) + else: + pads = jnp.expand_dims(jnp.array(pads), axis=0) + + if pads.shape[1] != lhs_shape.shape[1] - 2: + msg = 'Wrong number of explicit pads for convolution: expected {}, got {}.' + raise TypeError(msg.format(lhs_shape.shape[1] - 2, pads.shape[1])) + lhs_padded = jnp.add(lhs_shape[:, 2:], jnp.sum(pads, axis=2)) + + rhs_shape = jnp.array(rhs_shape, dtype=jnp.int32) + strides = jnp.array(strides, dtype=jnp.int32) + out_space = jnp.floor_divide( + jnp.subtract(lhs_padded, rhs_shape[2:]), strides) + 1 + out_space = jnp.maximum(0, out_space) + out_shape = jnp.stack( + [lhs_shape[:, 0], jnp.full((lhs_shape.shape[0],), rhs_shape[0])], + axis=-1) + return jnp.concatenate([out_shape, out_space], axis=-1) diff --git a/scenic/model_lib/layers/nn_layers.py b/scenic/model_lib/layers/nn_layers.py new file mode 100644 index 0000000000000000000000000000000000000000..a43de4c7535865749ee15838a6a12ca04be19008 --- /dev/null +++ b/scenic/model_lib/layers/nn_layers.py @@ -0,0 +1,265 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Common neural network modules.""" + +from typing import Callable, Iterable, Optional, Sequence + +import flax.linen as nn +import jax +from jax.nn import initializers +import jax.numpy as jnp +import numpy as np + +# Inputs are PRNGKey, input shape and dtype. +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +class Residual(nn.Module): + """Residual connection module. + + Attributes: + residual_type: str; residual connection type. Possible values are [ + 'gated', 'sigtanh', 'rezero', 'highway', 'add']. + dtype: Jax dtype; The dtype of the computation (default: float32). + """ + + residual_type: str = 'add' + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x, y): + """Applies the residual connection on given input/output of a module. + + Args: + x: Input of the module. + y: Output of the module. + + Returns: + Output: A combination of the x and y. + """ + if x.shape != y.shape: + raise ValueError('x and y should be of the same shape.') + + dtype = self.dtype + + if self.residual_type == 'add': + return x + y + + elif self.residual_type == 'highway': + features = x.shape[-1] + hw_gate = nn.sigmoid( + nn.Dense( + features=features, + use_bias=True, + kernel_init=initializers.zeros, + bias_init=lambda rng, shape, *_: jnp.full(shape, -10.0), + dtype=dtype)(x)) + output = jnp.multiply((1 - hw_gate), x) + jnp.multiply(hw_gate, y) + + elif self.residual_type == 'rezero': + # Based on https://arxiv.org/pdf/2003.04887v1.pdf. + alpha = self.param('rezero_alpha', initializers.zeros, (1,)) + return x + (alpha * y) + + elif self.residual_type == 'sigtanh': + # Based on https://arxiv.org/pdf/1606.05328.pdf. + features = x.shape[-1] + # sigmoid(W_g.y). + sigmoid_y = nn.sigmoid( + nn.Dense( + features=features, + use_bias=True, + kernel_init=initializers.zeros, + bias_init=lambda rng, shape, *_: jnp.full(shape, -10.0), + dtype=dtype)(y)) + # tanh(U_g.y). + tanh_y = nn.tanh( + nn.Dense( + features=features, + use_bias=False, + kernel_init=initializers.zeros, + bias_init=initializers.zeros, + dtype=dtype)(y)) + return x + (sigmoid_y * tanh_y) + + elif self.residual_type == 'gated': + # Based on https://arxiv.org/pdf/1910.06764.pdf. + features = x.shape[-1] + # Reset gate: r = sigmoid(W_r.x + U_r.y). + r = nn.sigmoid( + nn.Dense( + features=features, + use_bias=False, + kernel_init=initializers.zeros, + bias_init=initializers.zeros, + dtype=dtype)(x) + nn.Dense( + features=features, + use_bias=False, + kernel_init=initializers.zeros, + bias_init=initializers.zeros, + dtype=dtype)(y)) + # Update gate: z = sigmoid(W_z.x + U_z.y - b_g). + # NOTE: the paper claims best initializtion for their task for b is 2. + b_g = self.param('b_g', + lambda rng, shape, *_: jnp.full(shape, 10.0), + (features,)).astype(dtype) + z = nn.sigmoid( + nn.Dense( + features=features, + use_bias=False, + kernel_init=initializers.zeros, + bias_init=initializers.zeros, + dtype=dtype)(x) + nn.Dense( + features=features, + use_bias=False, + kernel_init=initializers.zeros, + bias_init=initializers.zeros, + dtype=dtype)(y) - b_g) + # Candidate_activation: h' = tanh(W_g.y + U_g.(r*x)). + h = jnp.tanh( + nn.Dense( + features=features, + use_bias=False, + kernel_init=initializers.zeros, + bias_init=initializers.zeros, + dtype=dtype)(y) + nn.Dense( + features=features, + use_bias=False, + kernel_init=initializers.zeros, + bias_init=initializers.zeros, + dtype=dtype)(jnp.multiply(r, x))) + + # Output: g = (1-z)*x + z*h. + output = jnp.multiply((1.0 - z), x) + jnp.multiply(z, h) + + else: + raise ValueError(f'Residual type {self.residual_type} is not defined.') + return output + + +class SqueezeAndExcite(nn.Module): + """Squeeze-and-Excitation layer. + + Introduced in SENet: https://arxiv.org/abs/1709.01507 + """ + reduction_factor: int = 4 + + @nn.compact + def __call__(self, inputs: jnp.ndarray) -> jnp.ndarray: + """Applies SqueezeAndExcite on the 2D inputs. + + Args: + inputs: Input data in shape of `[bs, height, width, features]`. + + Returns: + Output in which channel-wise features of the input are recalibrated. + """ + if inputs.ndim != 4: + # TODO(dehghani): extend this to N-D inputs with arbitrary spatial dims. + raise ValueError( + 'Inputs should in shape of `[bs, height, width, features]`') + + # Squeeze. + x = jnp.mean(inputs, axis=(1, 2)) + x = nn.Dense(features=x.shape[-1] // self.reduction_factor)(x) + x = nn.relu(x) + # Back to the original feature size. + x = nn.Dense(features=inputs.shape[-1])(x) + x = nn.sigmoid(x) + x = jax.lax.broadcast_in_dim( + x, shape=(x.shape[0], 1, 1, x.shape[-1]), broadcast_dimensions=(0, 3)) + # Excite. + return inputs * x + + +class IdentityLayer(nn.Module): + """Identity layer, convenient for giving a name to an array.""" + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + return x + + +def get_constant_initializer(constant: float) -> Initializer: + """Returns an initializer that initializes everything to a given constant.""" + + def init_fn(unused_key: jnp.ndarray, # pytype: disable=annotation-type-mismatch # jnp-type + shape: Iterable[int], + dtype: jnp.dtype = np.float32) -> np.ndarray: + return constant * np.ones(shape, dtype=dtype) + + return init_fn # pytype: disable=bad-return-type # jax-ndarray + + +class Affine(nn.Module): + """Affine transformation layer. + + Described in: + Touvron et al, "ResMLP: Feedforward networks for image classification + with data-efficient training", 2021. + + Performs an affine transformation on the final dimension of the input tensor. + """ + bias_init: Initializer = nn.initializers.zeros + scale_init: Initializer = nn.initializers.ones + use_bias: bool = True + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + n = x.shape[-1] + scale = self.param('scale', self.scale_init, (n,)) + if self.use_bias: + bias = self.param('bias', self.bias_init, (n,)) + else: + bias = 0.0 + return scale * x + bias + + +class StochasticDepth(nn.Module): + """Performs layer-dropout (also known as stochastic depth). + + Described in + Huang & Sun et al, "Deep Networks with Stochastic Depth", 2016 + https://arxiv.org/abs/1603.09382 + + Attributes: + rate: the layer dropout probability (_not_ the keep rate!). + deterministic: If false (e.g. in training) the inputs are scaled by `1 / (1 + - rate)` and the layer dropout is applied, whereas if true (e.g. in + evaluation), no stochastic depth is applied and the inputs are returned as + is. + """ + rate: float = 0.0 + deterministic: Optional[bool] = None + + @nn.compact + def __call__(self, + x: jnp.ndarray, + deterministic: Optional[bool] = None) -> jnp.ndarray: + """Applies a stochastic depth mask to the inputs. + + Args: + x: Input tensor. + deterministic: If false (e.g. in training) the inputs are scaled by `1 / + (1 - rate)` and the layer dropout is applied, whereas if true (e.g. in + evaluation), no stochastic depth is applied and the inputs are returned + as is. + + Returns: + The masked inputs reweighted to preserve mean. + """ + broadcast_dims = range(1, x.ndim) + return nn.Dropout( + rate=self.rate, broadcast_dims=broadcast_dims)(x, deterministic) diff --git a/scenic/model_lib/layers/nn_ops.py b/scenic/model_lib/layers/nn_ops.py new file mode 100644 index 0000000000000000000000000000000000000000..dd1c032e5da446086dd0dbf4610b955580ea9850 --- /dev/null +++ b/scenic/model_lib/layers/nn_ops.py @@ -0,0 +1,520 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Common neural network funcitonality that doesn't require parameters.""" + +from typing import Callable, Sequence +import flax.linen as nn +import jax +from jax import lax +import jax.numpy as jnp +import numpy as np + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +def extract_image_patches(lhs, + rhs_shape, + strides, + padding, + rhs_dilation, + data_format='NHWC'): + """Extract patches of size `rhs_shape` from `lhs`. + + Args: + lhs: A 4-D Tensor; With shape `[batch, in_rows, in_cols, depth]. + rhs_shape: tuple; Size of the sliding window for each dimension of `lhs`. + strides: tuple; How far the centers of two consecutive patches are in the + lhs. Must be: `[1, stride_rows, stride_cols, 1]`. + padding: str; The type of padding algorithm to use. + We specify the size-related attributes as: ```python ksizes = [1, + ksize_rows, ksize_cols, 1] strides = [1, strides_rows, strides_cols, 1] + rates = [1, rates_rows, rates_cols, 1]``` + rhs_dilation: A 1-D Tensor of length 4; Must be: `[1, rate_rows, rate_cols, + 1]`. This is the input stride, specifying how far two consecutive patch + samples are in the input. Equivalent to extracting patches with + `patch_sizes_eff = patch_sizes + (patch_sizes - 1) * (rates - 1)`, + followed by subsampling them spatially by a factor of `rates`. This is + equivalent to `rate` in dilated (a.k.a. Atrous) convolutions. + data_format: str; The format of the `lhs`. Must be either `'NHWC'` or + `'NCHW'`. + + Returns: + A 4-D Tensor. Has the same type and data format as `lhs`, and with shape + `[batch, num_patches_col, num_patches_row, rhs_shape[1], rhs_shape[2], C]`. + """ + num_dims = lhs.ndim + num_spatial_dims = num_dims - 2 + + batch_dim = data_format.index('N') + feature_dim = data_format.index('C') + depth = lhs.shape[feature_dim] + + if rhs_shape[batch_dim] != 1 or rhs_shape[feature_dim] != 1: + raise NotImplementedError( + 'Current implementation does not yet support window sizes > 1 in ' + 'the batch and depth dimensions.') + + if strides[batch_dim] != 1 or strides[feature_dim] != 1: + raise NotImplementedError( + 'Current implementation does not support strides in the batch ' + 'and depth dimensions.') + + if rhs_dilation[batch_dim] != 1 or rhs_dilation[feature_dim] != 1: + raise NotImplementedError( + 'Current implementation does not support dilations in the batch ' + 'and depth dimensions.') + + # Replicating tensorflow's implementation. + lhs_perm = lax.conv_general_permutations( + (data_format, 'HWIO', data_format))[0] + kernel_shape = [rhs_shape[i] for i in lhs_perm[2:]] + + kernel_size = np.prod(kernel_shape) + conv_filter_shape = kernel_shape[:] + conv_filter_shape.append(1) + conv_filter_shape.append(kernel_size * depth) + + iota_kernel_shape = (kernel_size, depth, kernel_size) + + conv_filter = lax.eq( + lax.broadcasted_iota(jnp.int32, iota_kernel_shape, 0), + lax.broadcasted_iota(jnp.int32, iota_kernel_shape, 2), + ) + conv_filter = lax.convert_element_type(conv_filter, lhs.dtype) + conv_filter = lax.reshape(conv_filter, conv_filter_shape) + + dim_num = lax.conv_dimension_numbers(lhs.shape, conv_filter.shape, + (data_format, 'HWIO', data_format)) + conv_strides = [0] * num_spatial_dims + conv_rhs_dilation = [0] * num_spatial_dims + for i in range(num_spatial_dims): + dim = dim_num.lhs_spec[i + 2] + conv_strides[i] = strides[dim] + conv_rhs_dilation[i] = rhs_dilation[dim] + + conv = lax.conv_general_dilated(lhs, conv_filter, conv_strides, padding, None, + conv_rhs_dilation, dim_num, depth) + + conv_dims = list(conv.shape[:-1]) + conv_dims.append(depth) + conv_dims.extend(kernel_shape) + conv = lax.reshape(conv, conv_dims) + + permutation = list(range(len(conv_dims))) + depth_dim = permutation.pop(-3) + permutation.append(depth_dim) + + return lax.transpose(conv, permutation) + + +def extract_patches(lhs, rhs_shape, strides=(1, 1)): + """Extracts patches from an image using a convolution operator. + + Args: + lhs: A tensor of images of shapes (B, H, W, C). + rhs_shape: The size of the patches to extract (h, w). + strides: The shift between extracted patches (s1, s2) + + Returns: + All the patches in a tensor of dimension + (B, (H - h + 1) // s1, (W - w + 1) // s2, h, w, C). + """ + # [batch, channels, height, width] + lhs = jnp.moveaxis(lhs, -1, 1) + d = lhs.shape[1] + h, w = rhs_shape + + # Construct the lookup conv weights. + dim_out = jnp.arange(d * h * w).reshape((-1, 1, 1, 1)) + dim_in = jnp.arange(d).reshape((1, -1, 1, 1)) + i = jnp.arange(h).reshape((1, 1, -1, 1)) + j = jnp.arange(w).reshape((1, 1, 1, -1)) + weights = ((w * i + j) * d + dim_in == dim_out).astype(jnp.float32) + + # [batch, h * w * d, (H - h + 1) // s1, (W - w + 1) // s2] + concatenated_patches = lax.conv( + lhs, weights, window_strides=strides, padding='VALID') + + # [batch, (H - h + 1) // s1, (W - w + 1) // s2, h * w * d] + concatenated_patches = jnp.moveaxis(concatenated_patches, 1, -1) + + # [batch, (H - h + 1) // s1, (W - w + 1) // s2, h, w, d] + shape = concatenated_patches.shape[:3] + (h, w, d) + return concatenated_patches.reshape(shape) + + +def compute_relative_positions(query_spatial_shape, + key_spatial_shape, + spatial_axis=None): + """Generate relative positions of queries and keys. + + + For relative attention, the pairwise positional distance between each query + and key point is used in the attention weight computation. This function + generates the positional distances between each query-key pair, given the + offset of first position in the query with respect to first position in the + key. + + For example, if the query and key are 1d and query has 2 entries and the key + has 3 entries, the relative distance matrix is: + [[0, 1, 2], + [-1, 0, 1]] + where each [i, j] entry = j - i (j = key index, i = query index). Note that + the values in this matrix are being used by an embedding lookup, so we shift + them such that the smallest index is zero: + [[1, 2, 3], + [0, 1, 2]] + + This function produces the multi-dimensional distance for a query and key. + It factorizes the distance computation such that there is a positional + distance per dimension. An input with 3 dimensions will have a total of + 3 distances, 1 per dimension. + + Args: + query_spatial_shape: tuple; Indicating the spatial shape of the query. + key_spatial_shape: tuple; Indicating the spatial shape of the key. + spatial_axis: tuple; The axis over which the distance is calculated. Default + is None, which means distances over all axis is calculated. + + Returns: + a numpy (np) int array of shape [len(spatial_axis), + query_spatial_shape(spatial_axis), key_spatial_shape(spatial_axis)] + holding the distance between each query and key pair across dimensions + that are determined by `spatial_axis`, where the query and key are + indexed by their position. The smallest value in the array is zero. + """ + assert len(query_spatial_shape) == len(key_spatial_shape) + if spatial_axis is None: + spatial_axis = range(len(query_spatial_shape)) + for sa in spatial_axis: + if not 0 <= sa < len(query_spatial_shape): + raise ValueError('Element of `spatial_axis` should be between 0 and ' + 'length of `query_spatial_shape`.') + + num_dims = len(spatial_axis) + # Keep only dimensions we are iterested in. + query_spatial_shape = tuple([query_spatial_shape[a] for a in spatial_axis]) + key_spatial_shape = tuple([key_spatial_shape[a] for a in spatial_axis]) + + total_queries = np.prod(query_spatial_shape) + + total_keys = np.prod(key_spatial_shape) + # A distance per dimension in the flattened query-key arrays. + + relative_positions = np.empty((num_dims, total_queries, total_keys), + dtype=np.int32) + + # Convert flattened indices to multi-dimension coordinate indices. + coordinates_query = np.unravel_index( + range(total_queries), query_spatial_shape) + coordinates_key = np.unravel_index(range(total_keys), key_spatial_shape) + + # Compute distances between each query-key point. + for dim in range(num_dims): + for flat_index_query in range(total_queries): + for flat_index_key in range(total_keys): + relative_positions[dim, flat_index_query, flat_index_key] = ( + coordinates_key[dim][flat_index_key] - + coordinates_query[dim][flat_index_query]) + relative_positions[dim] = relative_positions[dim] + + # These indices are being used by an embedding lookup, so shift the indices + # such that the smallest index is zero. + relative_positions -= np.amin(relative_positions, axis=(1, 2), keepdims=True) + # Reshape to original dim. + relative_positions = relative_positions.reshape((num_dims,) + + query_spatial_shape + + key_spatial_shape) + return relative_positions + + +def patch_image(inputs, + inputs_shape, + patch_size, + strides=None, + padding='VALID', + mode='i2p'): + """Applies patching operation on the input. + + Args: + inputs: Input data. + inputs_shape: tuple; Shape of the input data. + patch_size: tuple; size of the patch: (height, width). + strides: tuple; Specifies how far two consecutive patches are in the + input. + padding: str; The type of padding algorithm to use. + mode: str; Either 'i2p' to convert the input image to patches or 'p2i' to + convert the patched image to the original shape. + + Returns: + Patched image if mode='i2p', original image if mode='p2i'. + """ + strides = strides or patch_size + + def i2p(x): + return extract_image_patches( + lhs=x.astype(jnp.float64), + rhs_shape=(1,) + patch_size + (1,), + strides=(1,) + strides + (1,), + padding=padding, + rhs_dilation=(1,) * inputs.ndim, + data_format='NHWC') + + if mode == 'i2p': + _, inputs_w, inputs_h, _ = inputs.shape + patch_w, patch_h = patch_size + if (inputs_w < patch_w or inputs_h < patch_h): + raise ValueError(f'Patch height and width ({patch_w} and {patch_h}) ' + 'should be smaller thatn inputs height and width' + f' ({inputs_w} and {inputs_h}).') + outputs = i2p(inputs) + + elif mode == 'p2i': + _, fn_vjp = jax.vjp(i2p, jnp.ones(inputs_shape)) + overlap_count = fn_vjp(jnp.ones_like(inputs))[0] + outputs = fn_vjp(inputs)[0] / overlap_count + + else: + raise ValueError() + return outputs + + +def space_to_depth(inputs, window_shape, strides=None, padding='VALID'): + """Applies space to depth. + + Args: + inputs: Input data with dimensions `[bs, window dims, ..., features]`. + window_shape: tuple; Defining the window to reduce over. + strides: tuple, A sequence of `n` integers, representing the inter-window + strides (default: window_shape). + padding: str; Either `'SAME'`, `'VALID'`, or a sequence of `n` `(low, + high)` integer pairs that give the padding to + apply before and after each spatial dimension (default: `'VALID'`). + + Returns: + An output image with less or equal spacial dimensions as inputs. + + """ + strides = strides or window_shape + patched = extract_image_patches( + lhs=inputs.astype(jnp.float64), + rhs_shape=(1,) + window_shape + (1,), + strides=(1,) + strides + (1,), + padding=padding, + rhs_dilation=(1,) * inputs.ndim, + data_format='NHWC') + + bs, n_patch_h, n_patch_w, _, _, _ = patched.shape + return patched.reshape(bs, n_patch_h, n_patch_w, -1) + + +def pooling(inputs, + window_shape, + pooling_configs=None, + strides=None, + padding='VALID'): + """Applies configurable pooling. + + Args: + inputs: an nd-array; Thego shape of inputs is `[bs, , + features]` and for presence_weights, the shape is `[bs, ]`. + window_shape: tuple; Defining the window to reduce over. + pooling_configs: dict; Configuration for the optional pooling operation. + strides: tuple, A sequence of `n` integers, representing the inter-window + strides (default: window_shape). + padding: str; Either `'SAME'`, `'VALID'`, or a sequence of `n` `(low, high)` + integer pairs that give the padding to + apply before and after each spatial dimension (default: `'VALID'`). + + Returns: + An output image with less or equal spacial dimensions as inputs. + """ + # TODO(dehghani): add positional embedding to other type of pooling? + strides = strides or window_shape + + pooling_type = pooling_configs.get('pooling_type') + if pooling_type == 'avg_pooling': + x = nn.avg_pool(inputs, window_shape, strides=strides, padding=padding) + + elif pooling_type == 'max_pooling': + x = nn.max_pool(inputs, window_shape, strides=strides, padding=padding) + + elif pooling_type == 'space_to_depth': + x = space_to_depth(inputs, window_shape, strides=strides, padding=padding) + + else: + raise ValueError('Pooling type {} is not defined.'.format(pooling_type)) + return x + + +def weighted_max_pool(inputs, + weights, + window_shape, + strides=None, + padding='VALID', + return_pooled_weights=False): + """Pools the input by taking max over a window, w.r.t their inputs' weights. + + Args: + inputs: Input data with dimensions (batch, , features). + weights: Input weights with dimensions (batch, ). + window_shape: tuple; A shape tuple defining the window to reduce over. + strides: tuple; A sequence of `n` integers, representing the inter-window + strides (default: `(1, ..., 1)`). + padding: str/list(tuple); Either the string `'SAME'`, the string `'VALID'`, + or a sequence of `n` `(low, high)` integer pairs that give the padding to + apply before and after each spatial dimension (default: `'VALID'`). + return_pooled_weights: bool; Also return the pooled weight + + Returns: + The maximum of each window slice. If return_pooled_weights is True, it also + returns the maximum of pooled weights. + """ + assert inputs.shape[:-1] == weights.shape + weights = jnp.expand_dims(weights, -1) + inputs = inputs * weights + outputs = nn.max_pool(inputs, window_shape, strides=strides, padding=padding) + if return_pooled_weights: + max_weights = nn.max_pool( + weights, window_shape, strides=strides, padding=padding) + return outputs, max_weights.squeeze(axis=-1) + return outputs + + +def weighted_avg_pool(inputs, + weights, + window_shape, + strides=None, + padding='VALID', + return_pooled_weights=False): + """Pools the input by averaging over a window, w.r.t their inputs' weights. + + Args: + inputs: Input data with dimensions (batch, , features). + weights: Input weights with dimensions (batch, ). + window_shape: tuple; A shape tuple defining the window to reduce over. + strides: tuple; A sequence of `n` integers, representing the inter-window + strides (default: `(1, ..., 1)`). + padding: str/list(tuple); Either the string `'SAME'`, the string `'VALID'`, + or a sequence of `n` `(low, high)` integer pairs that give the padding to + apply before and after each spatial dimension (default: `'VALID'`). + return_pooled_weights: bool; Also return the pooled weight + + Returns: + The average for each window slice. If return_pooled_weights is True, it also + returns the sum of pooled weights. + """ + assert inputs.shape[:-1] == weights.shape + weights = jnp.expand_dims(weights, -1) + inputs = inputs * weights + y = nn.pooling.pool(inputs, 0., lax.add, window_shape, strides, padding) + pooled_weights = nn.pooling.pool(weights, 0., lax.add, window_shape, strides, + padding) + outputs = y / pooled_weights + if return_pooled_weights: + return outputs, (pooled_weights.squeeze(axis=-1) / np.prod(window_shape)) + return outputs + + +def upscale2x_nearest_neighbor(inputs): + """Doubles image size by repeating every pixel 2x2 times. + + Args: + inputs: nd-array: Inputs in shape of `[bs, height, width, channels]' + + Returns: + Upscaled inputs, in shape of `[bs, 2*height, 2*width, channels]' + """ + input_channels = inputs.shape[-1] + input_h, input_w = inputs.shape[1], inputs.shape[2] + input_nchw = jnp.transpose(inputs, (0, 3, 1, 2)) + flat_input_shape = (-1, input_h, input_w, 1) + flat_input = jnp.reshape(input_nchw, flat_input_shape) + + height_scale, width_scale = 2, 2 + resize_kernel = jnp.ones((height_scale, width_scale, 1, 1)) + strides = (height_scale, width_scale) + flat_output = lax.conv_transpose( + flat_input, resize_kernel, strides, padding='VALID') + + output_nchw_shape = (-1, input_channels, height_scale * input_h, + width_scale * input_w) + output_nchw = jnp.reshape(flat_output, output_nchw_shape) + resized_x = jnp.transpose(output_nchw, (0, 2, 3, 1)) # Output: nhwc. + return resized_x + + +def central_crop(inputs, target_shape): + """Returns a central crop in axis (1, 2). + + Args: + inputs: nd-array; Inputs in shape of `[bs, height, width, channels]'. + target_shape: tuple(int); Target shape after crop. + + Returns: + Cropped image. + """ + h, w = target_shape[1:3] + assert h <= inputs.shape[1], f'{h} > {inputs.shape[1]}' + assert w <= inputs.shape[2], f'{w} > {inputs.shape[2]}' + h0 = (inputs.shape[1] - h) // 2 + w0 = (inputs.shape[2] - w) // 2 + return inputs[:, h0:(h0 + h), w0:(w0 + w)] + + +def compute_1d_relative_distance(query_len: int, key_len: int) -> np.ndarray: + """Generate relative positions of queries and keys for relative attention. + + Args: + query_len: Length of the query. + key_len: Length of the key. + + Returns: + A numpy (np) int array of shape [len_q, len_k] holding the distance + between each query and key pair, where the query and key are + indexed by their position. The smallest value in the array is zero. + """ + # A distance per dimension in the query-key arrays. + relative_positions = ( + np.arange(key_len)[np.newaxis, :] - np.arange(query_len)[:, np.newaxis]) + # These indices are being used by an embedding lookup, so shift the indices + # such that the smallest index is zero. + relative_positions -= np.min(relative_positions) + return relative_positions + + +def truncated_normal_initializer(stddev: float = 1e-2, + dtype: jnp.dtype = jnp.float_) -> Initializer: + """Returns a truncated normal parameter initializer. + + The truncation bounds are -2 and +2 standard deviations. + + Args: + stddev: The standard deviation of the truncated normal distribution. + dtype: The data type to use. + + Returns: + Initializer function compatible with Flax modules. + """ + def init(key, shape, dtype=dtype): + dtype = jax.dtypes.canonicalize_dtype(dtype) + if jnp.issubdtype(dtype, jnp.floating): + # constant is stddev of standard normal truncated to (-2, 2) + s = stddev / jnp.array(.87962566103423978, dtype) + else: + # constant is stddev of complex standard normal truncated to 2 + s = stddev / jnp.array(.95311164380491208, dtype) + return jax.random.truncated_normal(key, -2, 2, shape, dtype) * s + return init diff --git a/scenic/model_lib/layers/tests/__init__.py b/scenic/model_lib/layers/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/model_lib/layers/tests/test_attention_layers.py b/scenic/model_lib/layers/tests/test_attention_layers.py new file mode 100644 index 0000000000000000000000000000000000000000..d956956e4b6dac712532b76fb4632ebc4b009474 --- /dev/null +++ b/scenic/model_lib/layers/tests/test_attention_layers.py @@ -0,0 +1,210 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for attention_layers.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +import flax.linen as nn +from jax import random +import jax.numpy as jnp +import numpy as np +from scenic.model_lib.layers import attention_layers + + +class AttentionLayersTest(parameterized.TestCase): + """Tests for modules in attention_layers.py.""" + + @parameterized.named_parameters([ + ('test_same_qk', (10, 28, 4, 32), (10, 28, 4, 32)), + ('test_different_qk', (10, 12, 4, 32), (10, 13, 4, 32)), + ]) + def test_dot_product_attention(self, q_shape, k_shape): + """Test dot_product_attention function.""" + rng = random.PRNGKey(0) + v_shape = k_shape[:-1] + (64,) + expected_output_shape = q_shape[:-1] + (v_shape[-1],) + + query = jnp.array(np.random.normal(size=q_shape)) + key = jnp.array(np.random.normal(size=k_shape)) + value = jnp.array(np.random.normal(size=v_shape)) + y = attention_layers.dot_product_attention( + query, + key, + value, + deterministic=False, + dropout_rng=rng, + capture_attention_weights=False) + # Test outputs shape. + self.assertEqual(y.shape, expected_output_shape) + + def test_multihead_attention(self): + """Tests MultiHeadAttention.""" + rng = random.PRNGKey(0) + x = jnp.ones((4, 16, 32)) + n_heads = 2 + layer = attention_layers.MultiHeadAttention(num_heads=n_heads) + variables = layer.init(rng, x, x, deterministic=True) + y = layer.apply(variables, x, x, deterministic=True) + # Test outputs shape. + self.assertEqual(y.shape, x.shape) + + def test_multihead_attention_hidden_size_not_divisible_by_heads(self): + """Tests MultiHeadAttention.""" + rng = random.PRNGKey(0) + x = jnp.ones((4, 16, 30)) + n_heads = 4 + layer = attention_layers.MultiHeadAttention( + num_heads=n_heads, enforce_hidden_size_divisible_by_heads=False) + variables = layer.init(rng, x, x, deterministic=True) + self.assertTupleEqual(variables['params']['query']['kernel'].shape, + (30, 4, 7)) + self.assertTupleEqual(variables['params']['key']['kernel'].shape, + (30, 4, 7)) + self.assertTupleEqual(variables['params']['value']['kernel'].shape, + (30, 4, 7)) + self.assertTupleEqual(variables['params']['out']['kernel'].shape, + (4, 7, 30)) + y = layer.apply(variables, x, x, deterministic=True) + # Test outputs shape. + self.assertEqual(y.shape, x.shape) + + def test_multihead_attention_w_dropout(self): + """Tests MultiHeadAttention with dropout.""" + rng = random.PRNGKey(0) + rng, dropout_rng = random.split(rng) + x = jnp.ones((4, 16, 32)) + n_heads = 2 + layer = attention_layers.MultiHeadAttention( + num_heads=n_heads, dropout_rate=0.1) + variables = layer.init(rng, x, x, deterministic=True) + y = layer.apply( + variables, x, x, deterministic=False, rngs={'dropout': dropout_rng}) + # Test outputs shape. + self.assertEqual(y.shape, x.shape) + + @parameterized.named_parameters([ + ('test_learned', nn.initializers.ones), + ('test_sinusoidal', None), + ]) + def test_add_1d_positional_embedding(self, posemb_init): + """Tests Add1DPositionEmbedding.""" + rng = random.PRNGKey(0) + input_shape = (4, 16, 32) + inputs = jnp.array(np.random.normal(size=input_shape)) + + # Test output after adding positional embedding. + layer = (attention_layers.Add1DPositionEmbedding(posemb_init=posemb_init)) + variables = layer.init(rng, inputs) + outputs = layer.apply(variables, inputs) + + # Test output shape. + self.assertEqual(outputs.shape, input_shape) + + if posemb_init is not None: + # Test added learned embeddings. + # Note that we initialize them with nn.initializers.ones. + expected_added_pos_emb = jnp.ones(input_shape, dtype=inputs.dtype) + added_pos_emb = outputs - inputs + np.testing.assert_allclose( + added_pos_emb, expected_added_pos_emb, atol=1e-6) + + # Test embeddings shape + self.assertEqual(variables['params']['pos_embedding'].shape, + (1,) + input_shape[1:]) + + def test_add_2d_positional_embedding(self): + """Tests Add2DPositionEmbedding.""" + rng = random.PRNGKey(0) + input_shape = (4, 8, 16, 32) + inputs = jnp.ones(input_shape) + + # Test output after adding positional embedding. + layer = attention_layers.Add2DPositionEmbedding( + posemb_init=nn.initializers.ones) + variables = layer.init(rng, inputs) + outputs = layer.apply(variables, inputs) + + # Test output shape. + self.assertEqual(outputs.shape, input_shape) + + # Test added embeddings. + # Note that we initialize them with nn.initializers.ones. + expected_added_pos_emb = jnp.ones(input_shape, dtype=inputs.dtype) + added_pos_emb = outputs - inputs + np.testing.assert_allclose(added_pos_emb, expected_added_pos_emb, atol=1e-6) + + # Test embeddings shape. + self.assertEqual(variables['params']['row_pos_embedding'].shape, + (input_shape[2], input_shape[-1] // 2)) + self.assertEqual(variables['params']['col_pos_embedding'].shape, + (input_shape[1], input_shape[-1] // 2)) + + @parameterized.named_parameters([ + ('test_2d', (10, 28, 32, 4, 32), (10, 28, 32, 4, 32)), + ('test_3d', (10, 12, 28, 32, 9, 32), (10, 12, 28, 32, 9, 32)), + ]) + def test_axial_dot_product_attention_has_expected_shape( + self, q_shape, k_shape): + """Test axial_dot_product_attention function.""" + v_shape = k_shape[:-1] + (64,) + expected_output_shape = q_shape[:-1] + (v_shape[-1],) + + query = jnp.array(np.random.normal(size=q_shape)) + key = jnp.array(np.random.normal(size=k_shape)) + value = jnp.array(np.random.normal(size=v_shape)) + y = attention_layers.axial_dot_product_attention( + query, key, value, deterministic=True) + # Test outputs shape: + self.assertEqual(y.shape, expected_output_shape) + + @parameterized.named_parameters([ + ('test_1d', (7,)), + ('test_2d', (3, 7)), + ('test_3d', (3, 5, 7)), + ]) + def test_relative_attention_bias(self, nd_shape): + """Test axial_dot_product_attention function.""" + num_heads = 2 + bias_layer = attention_layers.RelativeAttentionBias( + num_heads=num_heads, nd_shape=nd_shape, + initializer=nn.initializers.normal()) + rng = random.PRNGKey(0) + variables = bias_layer.init(rng) + bias = bias_layer.apply(variables) + + length = np.prod(nd_shape) + self.assertEqual((num_heads, length, length), bias.shape) + + bias_nd = bias.reshape((num_heads,) + nd_shape + nd_shape) + for i in range(len(nd_shape)): + bias_crop = bias_nd + for _ in range(i + 1, len(nd_shape)): + # Crop until last dim is dim to be checked. + bias_crop = bias_crop[:, :, ..., 0] + for k in range(nd_shape[i] - 1): + np.testing.assert_array_equal(bias_crop[:, k, ..., :-1], + bias_crop[:, k + 1, ..., 1:]) + bias_nd = bias_nd[:, 0] + + # Now plug this bias into multi-head attention. + layer = attention_layers.MultiHeadAttention(num_heads=num_heads) + input_shape = (4, length, num_heads * 2) + inputs = jnp.array(np.random.normal(size=input_shape)) + variables = layer.init(rng, inputs, inputs) + layer.apply(variables, inputs, inputs, attention_bias=bias) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/model_lib/layers/tests/test_masked_layers.py b/scenic/model_lib/layers/tests/test_masked_layers.py new file mode 100644 index 0000000000000000000000000000000000000000..7c35226fb854d3c0ef1765e69fdd356d1be2415c --- /dev/null +++ b/scenic/model_lib/layers/tests/test_masked_layers.py @@ -0,0 +1,514 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for masked layers.""" + +import dataclasses +from typing import Any, Callable, Dict, Sequence, Tuple, Type, Union + +from absl.testing import absltest +from absl.testing import parameterized +import flax.linen as nn +from jax import random +import jax.numpy as jnp +import numpy as np +from scenic.model_lib.layers import masked_layers as masked + + +def _pad_norm_assert_shape(outputs): + """Test that the spatial shape output is correct for masked BN/GN.""" + outputs, spatial_shape = outputs + # Does it have the correct shape? + np.testing.assert_equal( + spatial_shape.shape, + MaskedLayersTest.INPUTS_SHAPE_SMALL.shape) + # Inferred spatial shape has the correct values. + np.testing.assert_allclose( + spatial_shape, + MaskedLayersTest.INPUTS_SHAPE_SMALL, + atol=0) + + _, h, w, _ = MaskedLayersTest.INPUTS_SMALL.shape + norm_unpad = outputs[:, :h, :w, :] # Region without padding. + norm_right_pad = outputs[:, :h, w:, :] # Right padded region. + norm_bottom_pad = outputs[:, h:, :w] # Bottom padded region. + return norm_unpad, [norm_right_pad, norm_bottom_pad] + + +def _pad_norm_assert_noshape(outputs): + """Assert Masked BN/GN w/o spatial shape returns None shape.""" + outputs, spatial_shape = outputs + assert spatial_shape is None + return outputs, [] + + +def _pad_norm_noshape(outputs): + """Equivalent of `_pad_norm_assert_noshape` for normal BN/GN.""" + return outputs, [] + + +@dataclasses.dataclass +class NormSpec: + """Used for consicely parameterizing Batch/Group Norm tests (see test_norm). + + Attributes: + cls: BatchNorm/GroupNorm class to create. + ctor_kwargs: Class constructor kwargs. + init_kwargs: Initializer (i.e. `cls.init_with_output`) kwargs. + process_fn: Output processing function. Takes output of Batch/Group Norm + (normalized outputs and a shape tensor in case masked layers; or just + normalized outputs), optionally asserts that spatial shapes are correct, + and returns unpadded (masked removed) outputs and a list of padded parts. + """ + cls: Union[Type[nn.BatchNorm], Type[masked.BatchNorm], + Type[nn.GroupNorm], Type[masked.GroupNorm]] + ctor_kwargs: Dict[str, Any] + init_kwargs: Dict[str, Any] + process_fn: Callable[[jnp.ndarray], Tuple[jnp.ndarray, Sequence[jnp.ndarray]]] + + +class MaskedLayersTest(parameterized.TestCase): + """Tests for modules in masked_layers.py.""" + + SMALL_SIZE, LARGE_SIZE, PADDED_SIZE = 16, 27, 35 + + INPUTS_SHAPE_SMALL = 8, SMALL_SIZE, SMALL_SIZE, 16 + INPUTS_SHAPE_LARGE = 8, LARGE_SIZE, LARGE_SIZE, 16 + + INPUTS_SMALL = np.random.normal(size=INPUTS_SHAPE_SMALL) + INPUTS_LARGE = np.random.normal(size=INPUTS_SHAPE_LARGE) + + INPUTS_SMALL_PADDED = np.pad( + INPUTS_SMALL, + [(0, 0), (0, PADDED_SIZE - SMALL_SIZE), (0, PADDED_SIZE - SMALL_SIZE), + (0, 0)], + 'constant') + INPUTS_LARGE_PADDED = np.pad( + INPUTS_LARGE, + [(0, 0), (0, PADDED_SIZE - LARGE_SIZE), (0, PADDED_SIZE - LARGE_SIZE), + (0, 0)], + 'constant') + INPUTS_PADDED = np.concatenate( + [INPUTS_SMALL_PADDED, INPUTS_LARGE_PADDED], + axis=0) + + INPUTS_SHAPE_SMALL = np.array([[SMALL_SIZE, SMALL_SIZE]] * 8) + INPUTS_SHAPE_LARGE = np.array([[LARGE_SIZE, LARGE_SIZE]] * 8) + SPATIAL_SHAPE = np.concatenate( + [INPUTS_SHAPE_SMALL, INPUTS_SHAPE_LARGE], axis=0) + + POOL_FN_DICT = {'avg': (nn.avg_pool, masked.avg_pool), + 'max': (nn.max_pool, masked.max_pool)} + + @parameterized.named_parameters([ + ('same_pad_11_11', (1, 1), (1, 1), 'SAME', None, None), + ('same_pad_11_22', (1, 1), (2, 2), 'SAME', None, None), + ('valid_pad_33_13', (3, 3), (1, 3), 'VALID', None, None), + ('valid_pad_53_21', (5, 3), (2, 1), 'VALID', None, None), + ('valid_pad_33_13_kd12', (3, 3), (1, 3), 'VALID', None, (1, 2)), + ('valid_pad_53_21_kd33', (5, 3), (2, 1), 'VALID', None, (3, 3)), + ('num_pad_33_13', (3, 3), (1, 3), [(4, 7), (1, 1)], None, None), + ('num_pad_53_21', (5, 3), (2, 1), [(0, 0), (1, 1)], None, None), + ('num_pad_33_13_id21', (3, 3), (1, 3), [(4, 7), (1, 1)], (2, 1), None), + ('num_pad_53_21_id33', (5, 3), (2, 1), [(0, 0), (1, 1)], (3, 3), None), + ('num_pad_33_13_id21_kd12', (3, 3), (1, 3), [(4, 7), (1, 1)], (2, 1), + (1, 2)), + ('num_pad_53_21_id33_kd25', (5, 3), (2, 1), [(0, 0), (1, 1)], (3, 3), + (2, 5)), + ]) + def test_unpadded_conv_eq_masked_padded(self, kernel_size, strides, padding, + input_dilation, kernel_dilation): + """Conv on unpadded data and conv on padded and masked data are same.""" + conv_args = { + 'features': 64, + 'kernel_size': kernel_size, + 'strides': strides, + 'padding': padding, + 'use_bias': True, + 'input_dilation': input_dilation, + 'kernel_dilation': kernel_dilation, + 'kernel_init': nn.initializers.ones, + 'bias_init': nn.initializers.ones, + } + + rng = random.PRNGKey(0) + conv, masked_conv = nn.Conv(**conv_args), masked.Conv(**conv_args) + + # It is OK to re-init since we're keeping the rng constant. + output_small, conv_params = conv.init_with_output(rng, self.INPUTS_SMALL) + output_large = conv.apply(conv_params, self.INPUTS_LARGE) + + (outputs_padded, spatial_shape), _ = masked_conv.init_with_output( + rng, + self.INPUTS_PADDED, + spatial_shape=self.SPATIAL_SHAPE) + + # Inferred spatial shape has the right shape. + self.assertEqual( + spatial_shape.shape, + (self.INPUTS_PADDED.shape[0], 2)) + + # Inferred spatial shape has the right values. + n_small, n_large = output_small.shape[0], output_large.shape[0] + np.testing.assert_allclose( + spatial_shape[:n_small, ...], + np.stack([np.array(output_small.shape[1:-1])] * n_small, axis=0), + atol=0) + np.testing.assert_allclose( + spatial_shape[-n_large:, ...], + np.stack([np.array(output_large.shape[1:-1])] * n_large, axis=0), + atol=0) + + # Masked output has the right values in the *un*masked region. + ind_small = [slice(s) for s in output_small.shape[1:-1]] + ind_large = [slice(s) for s in output_large.shape[1:-1]] + ind_small = tuple([slice(n_small)] + ind_small + [slice(None)]) + ind_large = tuple([slice(n_small, None)] + ind_large + [slice(None)]) + + np.testing.assert_allclose( + output_small, outputs_padded[ind_small], atol=1e-5) + np.testing.assert_allclose( + output_large, outputs_padded[ind_large], atol=1e-5) + + # Masked output has the right values in the masked region. + ind_small = [slice(s, None) for s in output_small.shape[1:-1]] + ind_large = [slice(s, None) for s in output_large.shape[1:-1]] + ind_small = tuple([slice(n_small)] + ind_small + [slice(None)]) + ind_large = tuple([slice(n_small, None)] + ind_large + [slice(None)]) + + np.testing.assert_allclose(jnp.zeros_like(outputs_padded[ind_small]), + outputs_padded[ind_small], + atol=1e-5) + np.testing.assert_allclose(jnp.zeros_like(outputs_padded[ind_large]), + outputs_padded[ind_large], + atol=1e-5) + + @parameterized.named_parameters([ + ('same_pad_11_11', (1, 1), (1, 1), 'SAME', None, None), + ('same_pad_11_22', (1, 1), (2, 2), 'SAME', None, None), + ('same_pad_33_23', (3, 3), (2, 3), 'SAME', None, None), + ('same_pad_53_32', (5, 3), (3, 2), 'SAME', None, None), + ('same_pad_33_23_kd12', (3, 3), (2, 3), 'SAME', None, (1, 2)), + ('same_pad_53_32_kd43', (5, 3), (3, 2), 'SAME', None, (4, 3)), + ('valid_pad_33_13', (3, 3), (1, 3), 'VALID', None, None), + ('valid_pad_53_21', (5, 3), (2, 1), 'VALID', None, None), + ('valid_pad_33_13_kd12', (3, 3), (1, 3), 'VALID', None, (1, 2)), + ('valid_pad_53_21_kd33', (5, 3), (2, 1), 'VALID', None, (3, 3)), + ('num_pad_33_13', (3, 3), (1, 3), [(4, 7), (1, 1)], None, None), + ('num_pad_53_21', (5, 3), (2, 1), [(0, 0), (1, 1)], None, None), + ('num_pad_33_13_id21', (3, 3), (1, 3), [(4, 7), (1, 1)], (2, 1), None), + ('num_pad_53_21_id33', (5, 3), (2, 1), [(0, 0), (1, 1)], (3, 3), None), + ('num_pad_33_13_id21_kd12', (3, 3), (1, 3), [(4, 7), (1, 1)], (2, 1), + (1, 2)), + ('num_pad_53_21_id33_kd25', (5, 3), (2, 1), [(0, 0), (1, 1)], (3, 3), + (2, 5)), + ]) + def test_masked_conv_without_spatial_shape( + self, kernel_size, strides, padding, input_dilation, kernel_dilation): + """Masked conv without spatial shape behaves same as normal conv.""" + conv_args = { + 'features': 64, + 'kernel_size': kernel_size, + 'strides': strides, + 'padding': padding, + 'use_bias': True, + 'input_dilation': input_dilation, + 'kernel_dilation': kernel_dilation, + 'kernel_init': nn.initializers.ones, + 'bias_init': nn.initializers.ones, + } + + rng = random.PRNGKey(0) + conv, masked_conv = nn.Conv(**conv_args), masked.Conv(**conv_args) + + output_conv, _ = conv.init_with_output(rng, self.INPUTS_SMALL) + (output_masked_conv, _), _ = masked_conv.init_with_output( + rng, self.INPUTS_SMALL) + np.testing.assert_allclose(output_conv, output_masked_conv, atol=1e-5) + + def test_masked_same_conv_raises(self): + """Masked convolutions with 'SAME' padding are not supported.""" + conv_args = { + 'features': 64, + 'kernel_size': (3, 3), + 'strides': (3, 3), + 'padding': 'SAME', + 'use_bias': True, + 'input_dilation': None, + 'kernel_dilation': None, + 'kernel_init': nn.initializers.ones, + 'bias_init': nn.initializers.ones, + } + + rng = random.PRNGKey(0) + masked_conv = masked.Conv(**conv_args) + + with self.assertRaises(NotImplementedError): + masked_conv.init( + rng, + self.INPUTS_PADDED, + spatial_shape=self.SPATIAL_SHAPE) + + @parameterized.named_parameters([ + ('same_pad_11_11_avg', 'avg', (1, 1), (1, 1), 'SAME'), + ('same_pad_11_22_avg', 'avg', (1, 1), (2, 2), 'SAME'), + ('valid_pad_33_13_avg', 'avg', (3, 3), (1, 3), 'VALID'), + ('valid_pad_53_21_avg', 'avg', (5, 3), (2, 1), 'VALID'), + ('num_pad_33_13_avg', 'avg', (3, 3), (1, 3), [(4, 7), (1, 1)]), + ('num_pad_53_21_avg', 'avg', (5, 3), (2, 1), [(0, 0), (1, 1)]), + ('same_pad_11_11_max', 'max', (1, 1), (1, 1), 'SAME'), + ('same_pad_11_22_max', 'max', (1, 1), (2, 2), 'SAME'), + ('valid_pad_33_13_max', 'max', (3, 3), (1, 3), 'VALID'), + ('valid_pad_53_21_max', 'max', (5, 3), (2, 1), 'VALID'), + ('num_pad_33_13_max', 'max', (3, 3), (1, 3), [(4, 7), (1, 1)]), + ('num_pad_53_21_max', 'max', (5, 3), (2, 1), [(0, 0), (1, 1)]), + ]) + def test_unpadded_pool_eq_masked_padded( + self, pool_fn, window_shape, strides, padding): + """Pool on unpadded data and pool on padded and masked data are same.""" + pool_fn, masked_pool_fn = self.POOL_FN_DICT[pool_fn] + output_small = pool_fn( + self.INPUTS_SMALL, window_shape, strides, padding=padding) + output_large = pool_fn( + self.INPUTS_LARGE, window_shape, strides, padding=padding) + + outputs_padded, spatial_shape = masked_pool_fn( + self.INPUTS_PADDED, + window_shape, + strides, + padding=padding, + spatial_shape=self.SPATIAL_SHAPE) + + # Inferred spatial shape has the right shape. + self.assertEqual( + spatial_shape.shape, + (self.INPUTS_PADDED.shape[0], 2)) + + # Inferred spatial shape has the right values. + n_small, n_large = output_small.shape[0], output_large.shape[0] + np.testing.assert_allclose( + spatial_shape[:n_small, ...], + np.stack([np.array(output_small.shape[1:-1])] * n_small, axis=0), + atol=0) + np.testing.assert_allclose( + spatial_shape[-n_large:, ...], + np.stack([np.array(output_large.shape[1:-1])] * n_large, axis=0), + atol=0) + + # Masked output has the right values in the *un*masked region. + ind_small = [slice(s) for s in output_small.shape[1:-1]] + ind_large = [slice(s) for s in output_large.shape[1:-1]] + ind_small = tuple([slice(n_small)] + ind_small + [slice(None)]) + ind_large = tuple([slice(n_small, None)] + ind_large + [slice(None)]) + + np.testing.assert_allclose( + output_small, outputs_padded[ind_small], atol=1e-5) + np.testing.assert_allclose( + output_large, outputs_padded[ind_large], atol=1e-5) + + # Masked output has the right values in the masked region. + ind_small = [slice(s, None) for s in output_small.shape[1:-1]] + ind_large = [slice(s, None) for s in output_large.shape[1:-1]] + ind_small = tuple([slice(n_small)] + ind_small + [slice(None)]) + ind_large = tuple([slice(n_small, None)] + ind_large + [slice(None)]) + + np.testing.assert_allclose(jnp.zeros_like(outputs_padded[ind_small]), + outputs_padded[ind_small], + atol=1e-5) + np.testing.assert_allclose(jnp.zeros_like(outputs_padded[ind_large]), + outputs_padded[ind_large], + atol=1e-5) + + @parameterized.named_parameters([ + ('same_pad_12_11_avg', 'avg', (1, 2), (1, 1), 'SAME'), + ('same_pad_21_22_max', 'max', (2, 1), (2, 2), 'SAME'), + ]) + def test_masked_same_pool_raises( + self, pool_fn, window_shape, strides, padding): + """Masked pool with 'SAME' padding is not supported.""" + _, masked_pool_fn = self.POOL_FN_DICT[pool_fn] + + with self.assertRaises(NotImplementedError): + masked_pool_fn( + self.INPUTS_PADDED, window_shape, strides, + padding=padding, spatial_shape=self.SPATIAL_SHAPE) + + @parameterized.named_parameters([ + # Batch Norm tests. + ('masked_bn_shape_eq_bn', + NormSpec(cls=nn.BatchNorm, + ctor_kwargs={ + 'use_running_average': False, + 'use_bias': True, + 'use_scale': True}, + init_kwargs={ + 'x': INPUTS_SMALL}, + process_fn=_pad_norm_noshape), + NormSpec(cls=masked.BatchNorm, + ctor_kwargs={ + 'use_running_average': False, + 'use_bias': True, + 'use_scale': True, + 'spatial_norm': True}, + init_kwargs={ + 'x': INPUTS_SMALL_PADDED, + 'spatial_shape': INPUTS_SHAPE_SMALL}, + process_fn=_pad_norm_assert_shape)), + ('masked_bn_shape_eq_masked_bn_noshape', + NormSpec(cls=masked.BatchNorm, + ctor_kwargs={ + 'use_running_average': False, + 'use_bias': True, + 'use_scale': True, + 'spatial_norm': True}, + init_kwargs={ + 'x': INPUTS_SMALL}, + process_fn=_pad_norm_assert_noshape), + NormSpec(cls=masked.BatchNorm, + ctor_kwargs={ + 'use_running_average': False, + 'use_bias': True, + 'use_scale': True, + 'spatial_norm': True}, + init_kwargs={ + 'x': INPUTS_SMALL_PADDED, + 'spatial_shape': INPUTS_SHAPE_SMALL}, + process_fn=_pad_norm_assert_shape)), + ('masked_bn_shape_eq_masked_bn_shape_nospatial', + NormSpec(cls=masked.BatchNorm, + ctor_kwargs={ + 'use_running_average': False, + 'use_bias': True, + 'use_scale': True, + 'spatial_norm': True}, + init_kwargs={ + 'x': INPUTS_SMALL, + 'spatial_shape': INPUTS_SHAPE_SMALL}, + process_fn=_pad_norm_assert_shape), + NormSpec(cls=masked.BatchNorm, + ctor_kwargs={ + 'use_running_average': False, + 'use_bias': True, + 'use_scale': True, + 'spatial_norm': False}, + init_kwargs={ + 'x': INPUTS_SMALL, + 'spatial_shape': INPUTS_SHAPE_SMALL}, + process_fn=_pad_norm_assert_shape)), + + # Group Norm tests. + ('masked_gn_shape_eq_gn', + NormSpec(cls=nn.GroupNorm, + ctor_kwargs={ + 'num_groups': 8, + 'use_bias': True, + 'use_scale': True}, + init_kwargs={ + 'x': INPUTS_SMALL}, + process_fn=_pad_norm_noshape), + NormSpec(cls=masked.GroupNorm, + ctor_kwargs={ + 'num_groups': 8, + 'use_bias': True, + 'spatial_norm': True, + 'use_scale': True}, + init_kwargs={ + 'x': INPUTS_SMALL_PADDED, + 'spatial_shape': INPUTS_SHAPE_SMALL}, + process_fn=_pad_norm_assert_shape)), + ('masked_gn_shape_eq_masked_gn_noshape', + NormSpec(cls=masked.GroupNorm, + ctor_kwargs={ + 'num_groups': 8, + 'use_bias': True, + 'spatial_norm': True, + 'use_scale': True}, + init_kwargs={ + 'x': INPUTS_SMALL}, + process_fn=_pad_norm_assert_noshape), + NormSpec(cls=masked.GroupNorm, + ctor_kwargs={ + 'num_groups': 8, + 'use_bias': True, + 'spatial_norm': True, + 'use_scale': True}, + init_kwargs={ + 'x': INPUTS_SMALL_PADDED, + 'spatial_shape': INPUTS_SHAPE_SMALL}, + process_fn=_pad_norm_assert_shape)), + ('masked_gn_shape_eq_masked_gn_shape_nosptial', + NormSpec(cls=masked.GroupNorm, + ctor_kwargs={ + 'num_groups': 8, + 'use_bias': True, + 'spatial_norm': False, + 'use_scale': True}, + init_kwargs={ + 'x': INPUTS_SMALL, + 'spatial_shape': INPUTS_SHAPE_SMALL}, + process_fn=_pad_norm_assert_shape), + NormSpec(cls=masked.GroupNorm, + ctor_kwargs={ + 'num_groups': 8, + 'use_bias': True, + 'spatial_norm': True, + 'use_scale': True}, + init_kwargs={ + 'x': INPUTS_SMALL_PADDED, + 'spatial_shape': INPUTS_SHAPE_SMALL}, + process_fn=_pad_norm_assert_shape)), + ]) + def test_norm(self, norm1_spec, norm2_spec): + """Test Batch/Group Norm unaffected by padding.""" + norm1 = norm1_spec.cls(**norm1_spec.ctor_kwargs) + norm2 = norm2_spec.cls(**norm2_spec.ctor_kwargs) + + # It is OK to re-init since we're keeping the rng constant. + rng = random.PRNGKey(0) + norm1_outputs, norm1_params = norm1.init_with_output( + rng, **norm1_spec.init_kwargs) + norm2_outputs, norm2_params = norm2.init_with_output( + rng, **norm2_spec.init_kwargs) + + # Inferred spatial shape has the right shape. + norm1_unpad, norm1_pad = norm1_spec.process_fn(norm1_outputs) + norm2_unpad, norm2_pad = norm2_spec.process_fn(norm2_outputs) + + # Unpadded parts of both outputs are the same. + np.testing.assert_allclose(norm1_unpad, norm2_unpad, atol=1e-5) + + # All padded parts are zero. + for part in norm1_pad + norm2_pad: + np.testing.assert_allclose(part, np.zeros_like(part), atol=1e-5) + + # Run a second time and repeat all the checks. This is necessary for BN + # because it is stateful; and does not change the output for GN. + norm1_outputs, norm1_params = norm1.apply( + norm1_params, mutable=['batch_stats'], **norm1_spec.init_kwargs) + norm2_outputs, norm2_params = norm2.apply( + norm2_params, mutable=['batch_stats'], **norm2_spec.init_kwargs) + + norm1_unpad, norm1_pad = norm1_spec.process_fn(norm1_outputs) + norm2_unpad, norm2_pad = norm2_spec.process_fn(norm2_outputs) + + # Unpadded parts of both outputs are the same. + np.testing.assert_allclose(norm1_unpad, norm2_unpad, atol=1e-5) + + # All padded parts are zero. + for part in norm1_pad + norm2_pad: + np.testing.assert_allclose(part, np.zeros_like(part), atol=1e-5) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/model_lib/layers/tests/test_nn_layers.py b/scenic/model_lib/layers/tests/test_nn_layers.py new file mode 100644 index 0000000000000000000000000000000000000000..f9b1b5ea04711ccfca0dacaa00e245f91b6ab652 --- /dev/null +++ b/scenic/model_lib/layers/tests/test_nn_layers.py @@ -0,0 +1,102 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for nn_layers.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +from jax import random +import jax.numpy as jnp +import numpy as np +from scenic.model_lib.layers import nn_layers + + +class NNLayersTest(parameterized.TestCase): + """Tests for modules in nn_layers.py.""" + + @parameterized.named_parameters([('test_residual', 'add'), + ('test_highway', 'highway'), + ('test_rezero', 'rezero'), + ('test_sigtanh', 'sigtanh'), + ('test_gated', 'gated')]) + def test_residual(self, residual_type): + """Test Residual module.""" + rng = random.PRNGKey(0) + inputs_shape = (16, 32, 32, 3) + + residual_module_def = nn_layers.Residual( + residual_type=residual_type) + x = jnp.array(np.random.normal(size=inputs_shape)) + y = jnp.array(np.random.normal(size=inputs_shape)) + outputs, _ = residual_module_def.init_with_output(rng, x, y) + + # test output shape for 4d inputs + self.assertEqual(outputs.shape, inputs_shape) + + # test the residual connection + if residual_type == 'add': + self.assertTrue(jnp.array_equal(outputs, x + y)) + + # make sure the residual connection is an identity mapping at initialization + else: + np.testing.assert_allclose(outputs, x, atol=1e-3) + + @parameterized.named_parameters([('test_red_1_axis_1', 1), + ('test_red_4_axis_1', 4)]) + def test_squeeze_and_excite(self, reduction_factor): + """Test the SqueezeAndExcite module.""" + rng = random.PRNGKey(0) + inputs_shape = (16, 24, 32, 64) + inputs = jnp.array(np.random.normal(size=inputs_shape)) + + squeeze_and_excite_def = nn_layers.SqueezeAndExcite( + reduction_factor=reduction_factor) + + # test output shape + outputs, _ = squeeze_and_excite_def.init_with_output(rng, inputs) + self.assertEqual(outputs.shape, inputs_shape) + + def test_stochastic_depth(self): + """Test the StochasticDepth module.""" + rng = random.PRNGKey(0) + rngs = {'dropout': rng} + + inputs_shape = (1024, 8, 8, 8) # Use many batches so averages work out. + inputs = jnp.array(np.random.normal(size=inputs_shape)) + inputs_np = np.asarray(inputs) + + drop_none = nn_layers.StochasticDepth(rate=0.0) + out_none = drop_none.apply({}, inputs, deterministic=False, rngs=rngs) + np.testing.assert_equal(np.asarray(out_none), inputs_np) + + # Make sure we zero out roughly half the samples when rate = 0.5. + drop_half = nn_layers.StochasticDepth(rate=0.5) + ones = jnp.ones_like(inputs) + out_half = drop_half.apply({}, ones, deterministic=False, rngs=rngs) + self.assertAlmostEqual(jnp.mean(out_half), 1.0, places=1) + + # Make sure that we always drop full samples. + # Note that the samples kept are scaled by 1 / (1 - rate). + for row in out_half: + assert jnp.all(row == 0.0) or jnp.all(row == 2.0) + + out_half_det = drop_half.apply({}, inputs, deterministic=True, rngs=rngs) + np.testing.assert_equal(np.asarray(out_half_det), inputs_np) + + drop_all = nn_layers.StochasticDepth(rate=1.0) + out_all = drop_all.apply({}, inputs, deterministic=False, rngs=rngs) + np.testing.assert_equal(np.asarray(out_all), 0.0) + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/model_lib/layers/tests/test_nn_ops.py b/scenic/model_lib/layers/tests/test_nn_ops.py new file mode 100644 index 0000000000000000000000000000000000000000..e733bdc75820a305fdd28f0335aea0e2e43b8903 --- /dev/null +++ b/scenic/model_lib/layers/tests/test_nn_ops.py @@ -0,0 +1,247 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for nn_ops.py.""" + +import functools + +from absl.testing import absltest +from absl.testing import parameterized +import flax.linen as nn +import jax +import jax.numpy as jnp +import numpy as np +from scenic.model_lib.layers import nn_ops + + +class NNOpsTest(parameterized.TestCase): + """Tests for utilities in nn_ops.py.""" + + @parameterized.named_parameters([('test_both', (0, 1), (2, 3, 5, 4, 6)), + ('test_rows', (0,), (1, 3, 4)), + ('test_columns', (1,), (1, 5, 6))]) + def test_compute_relative_positions(self, spatial_axis, + expected_output_shape): + """Tests compute_relative_positions. + + Args: + spatial_axis: position axis passed to the compute_relative_positions. + expected_output_shape: expected shape of the output. + """ + query_spatial_shape = (3, 5) + key_spatial_shape = (4, 6) + relative_positions = nn_ops.compute_relative_positions( + query_spatial_shape, key_spatial_shape, spatial_axis) + + # test output shape + self.assertEqual(relative_positions.shape, expected_output_shape) + + # test maximum positional distances + for dim_i, dim in enumerate(spatial_axis): + max_positional_distances = ( + query_spatial_shape[dim] + key_spatial_shape[dim] - 2) + self.assertEqual(max_positional_distances, + jnp.max(relative_positions[dim_i])) + + def test_weighted_max_pool(self): + """Tests weighted_max_pool.""" + inputs_shape = (16, 32, 32, 20) + window_shape = (4, 4) + strides = (4, 4) + inputs = jnp.array(np.random.normal(size=inputs_shape)) + weights = jnp.ones(inputs_shape[:-1]) + + outputs, pooled_weights = nn_ops.weighted_max_pool( + inputs, + weights, + window_shape=window_shape, + strides=strides, + padding='VALID', + return_pooled_weights=True) + + expected_outputs = nn.max_pool( + inputs, window_shape=window_shape, strides=strides, padding='VALID') + expected_pooled_weights = jnp.ones((16, 8, 8)) + self.assertTrue(jnp.array_equal(outputs, expected_outputs)) + self.assertTrue(jnp.array_equal(pooled_weights, expected_pooled_weights)) + + def test_weighted_avg_pool(self): + """Tests weighted_avg_pool.""" + inputs_shape = (16, 32, 32, 20) + window_shape = (4, 4) + strides = (4, 4) + inputs = jnp.array(np.random.normal(size=inputs_shape)) + weights = jnp.ones(inputs_shape[:-1]) + + outputs, pooled_weights = nn_ops.weighted_avg_pool( + inputs, + weights, + window_shape=window_shape, + strides=strides, + padding='VALID', + return_pooled_weights=True) + + expected_outputs = nn.avg_pool( + inputs, window_shape=window_shape, strides=strides, padding='VALID') + expected_pooled_weights = jnp.ones((16, 8, 8)) + self.assertTrue(jnp.array_equal(outputs, expected_outputs)) + self.assertTrue(jnp.array_equal(pooled_weights, expected_pooled_weights)) + + def test_extract_image_patches(self): + """Tests extract_image_patches.""" + input_shape = (16, 3, 3, 32) + inputs = np.array(np.random.normal(size=input_shape)) + + # patching a 3x3 image to 3x3 patches, with no stride 1x1 and no dilation + # and VALID padding should do nothing but reshaping the (bs, h, w, c) to + # (bs, 1, 1, h, w, c) + patched = nn_ops.extract_image_patches( + inputs, (1, 3, 3, 1), (1, 1, 1, 1), + padding='VALID', + rhs_dilation=(1, 1, 1, 1)) + self.assertEqual(patched.shape, (16, 1, 1, 3, 3, 32)) + np.testing.assert_allclose(inputs, patched.reshape(input_shape), atol=1e-2) + + def test_upscale2x_nearest_neighbor(self): + """Tests upscale2x_nearest_neighbor.""" + inputs = jnp.array(np.random.normal(size=(16, 32, 32, 128))) + + outputs = nn_ops.upscale2x_nearest_neighbor(inputs) + # check the output shape + self.assertEqual(outputs.shape, (16, 64, 64, 128)) + + def test_central_crop(self): + """Tests upscale2x_nearest_neighbor.""" + inputs = jnp.array(np.random.normal(size=(16, 32, 32, 128))) + + # check the case where the outputs should be same as the inputs + outputs = nn_ops.central_crop(inputs, target_shape=(16, 32, 32, 128)) + self.assertTrue(jnp.array_equal(outputs, inputs)) + + # check the output shape + outputs = nn_ops.central_crop(inputs, target_shape=(16, 6, 6, 128)) + self.assertEqual(outputs.shape, (16, 6, 6, 128)) + + inputs = jnp.arange(100.).reshape((1, 10, 10, 1)) + target_shape = (1, 8, 8, 1) + output = nn_ops.central_crop(inputs, target_shape) + # check up-left and down-right pixel of the output + self.assertEqual(output[0, 0, 0, 0], 11.) + self.assertEqual(output[0, -1, -1, 0], 88.) + + def test_extract_patches(self): + """Tests extract_patches.""" + input_shape = (16, 3, 3, 32) + inputs = np.array(np.random.normal(size=input_shape)) + + # patching a 3x3 image to 3x3 patches, with no stride 1x1 should do nothing + # but reshaping the (bs, h, w, c) to (bs, 1, 1, h, w, c) + patched = nn_ops.extract_patches(inputs, (3, 3), (1, 1)) + self.assertEqual(patched.shape, (16, 1, 1, 3, 3, 32)) + np.testing.assert_allclose(inputs, patched.reshape(input_shape), atol=1e-2) + + @parameterized.named_parameters([('test_avg_pooling', 'avg_pooling'), + ('test_max_pooling', 'max_pooling'), + ('test_avg_pooling_bu', 'avg_pooling'), + ('test_max_pooling_bu', 'max_pooling'), + ('test_space_to_depth', 'space_to_depth')]) + def test_pooling(self, pooling_type): + """Test Pooling module. + + Args: + pooling_type: str; Type of pooling function from `['avg_pooling', + 'max_pooling', 'space_to_depth']` + """ + inputs_shape = (16, 32, 32, 64) + window_shape = (4, 4) + strides = (4, 4) + inputs = jnp.array(np.random.normal(size=inputs_shape)) + + outputs = nn_ops.pooling( + inputs, + pooling_configs={'pooling_type': pooling_type}, + window_shape=window_shape, + strides=strides) + + if pooling_type == 'space_to_depth': + self.assertEqual(outputs.shape, (16, 8, 8, 1024)) + else: + self.assertEqual(outputs.shape, (16, 8, 8, 64)) + + @parameterized.named_parameters([ + ('test_4', (4, 28, 28, 32), (4, 4), (4, 4), 'VALID', (4, 7, 7, 4, 4, 32)), + ('test_4_stride', (4, 28, 28, 32), (4, 4), (1, 1), 'VALID', (4, 25, 25, 4, + 4, 32)), + ('test_4_stride_pad', (4, 28, 28, 32), (4, 4), (1, 1), 'SAME', + (4, 28, 28, 4, 4, 32)), + ('test_6_stride', (4, 28, 28, 32), (6, 6), (1, 1), 'VALID', (4, 23, 23, 6, + 6, 32)), + ]) + def test_image_patcher(self, input_shape, patch_size, strides, padding, + expected_output_shape): + """Tests ImagePatcher. + + Args: + input_shape: tuple; Shape of the input data. + patch_size: tuple; size of the patch: (height, width). + strides: tuple; Specifies how far two consecutive patches are in the + input. + padding: str; The type of padding algorithm to use. + expected_output_shape: expected shape of the output. + """ + inputs = jnp.zeros(input_shape) + + image_patcher = functools.partial( + nn_ops.patch_image, + inputs_shape=input_shape, + patch_size=patch_size, + strides=strides, + padding=padding, + mode='i2p') + + # test output shape + outputs = image_patcher(inputs) + self.assertEqual(outputs.shape, expected_output_shape) + + @parameterized.named_parameters([ + ('test_q1k4', 1, 4, np.array([[0, 1, 2, 3]])), + ('test_q5k1', 5, 1, np.array([[4], [3], [2], [1], [0]])), + ('test_q2k3', 2, 3, np.array([[1, 2, 3], [0, 1, 2]])), + ]) + def test_compute_1d_relative_distance(self, lenq, lenk, + expected_relative_distance): + """Tests compute_relative_positions.""" + relative_distance = nn_ops.compute_1d_relative_distance(lenq, lenk) + # Test output values. + self.assertTrue( + np.array_equal(relative_distance, expected_relative_distance)) + + def test_compute_1d_relative_distance_min_and_max(self): + len_q = np.random.randint(0, 100, (1,)) + len_k = np.random.randint(0, 100, (1,)) + relative_distance = nn_ops.compute_1d_relative_distance(len_q, len_k) + self.assertEqual(relative_distance.min(), 0) + self.assertEqual(relative_distance.max(), len_q + len_k - 2) + + def test_truncated_normal_init(self): + """Tests truncated_normal_initializer.""" + target_stddev = 0.4 + key = jax.random.PRNGKey(42) + shape = (128, 128, 128) + init_fn = nn_ops.truncated_normal_initializer(stddev=target_stddev) + x = init_fn(key, shape, jnp.float32) + self.assertAlmostEqual(target_stddev, jnp.std(x), places=2) + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/model_lib/matchers/__init__.py b/scenic/model_lib/matchers/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5d941171d359034bad09938780e52bdcec56b5b3 --- /dev/null +++ b/scenic/model_lib/matchers/__init__.py @@ -0,0 +1,25 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Matching utilities for Object Detection models.""" + +from scenic.model_lib.matchers.common import cpu_matcher +from scenic.model_lib.matchers.common import slicer +from scenic.model_lib.matchers.greedy import greedy_matcher +from scenic.model_lib.matchers.hungarian import hungarian_matcher +from scenic.model_lib.matchers.hungarian_cover import hungarian_cover_tpu_matcher +from scenic.model_lib.matchers.hungarian_jax import hungarian_scan_tpu_matcher +from scenic.model_lib.matchers.hungarian_jax import hungarian_tpu_matcher +from scenic.model_lib.matchers.lazy import lazy_matcher +from scenic.model_lib.matchers.sinkhorn import sinkhorn_matcher diff --git a/scenic/model_lib/matchers/__pycache__/__init__.cpython-310.pyc b/scenic/model_lib/matchers/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a799166e4ed62261c80e92161ff2986c057afe16 Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/__init__.cpython-310.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/__init__.cpython-311.pyc b/scenic/model_lib/matchers/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d58a327e265af31c2681614d40508ee1e2f78f76 Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/__init__.cpython-311.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/__init__.cpython-312.pyc b/scenic/model_lib/matchers/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3b967af8cef9d2260e39684d93cf4362d0484371 Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/__init__.cpython-312.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/common.cpython-310.pyc b/scenic/model_lib/matchers/__pycache__/common.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a218b4345e9c1a1d61117007234491a4b102967a Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/common.cpython-310.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/common.cpython-311.pyc b/scenic/model_lib/matchers/__pycache__/common.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2199f59fccf4c3ec12316c10b667359ad8a7786e Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/common.cpython-311.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/common.cpython-312.pyc b/scenic/model_lib/matchers/__pycache__/common.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..681a09afab6ad5aed722be8babc3bf627e031b69 Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/common.cpython-312.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/greedy.cpython-310.pyc b/scenic/model_lib/matchers/__pycache__/greedy.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5741d4263987981b21a42fc5f8f1b68b84c322da Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/greedy.cpython-310.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/greedy.cpython-311.pyc b/scenic/model_lib/matchers/__pycache__/greedy.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a272f219c12d48b407e0a657b224978adc147804 Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/greedy.cpython-311.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/greedy.cpython-312.pyc b/scenic/model_lib/matchers/__pycache__/greedy.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..77110dfbfc00f0f7e8329739f8bc1840f2975dd2 Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/greedy.cpython-312.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/hungarian.cpython-310.pyc b/scenic/model_lib/matchers/__pycache__/hungarian.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..694af345d7a46360d5b2a5007172bbba10a322fb Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/hungarian.cpython-310.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/hungarian.cpython-311.pyc b/scenic/model_lib/matchers/__pycache__/hungarian.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c06ef99da9a18cf5d8161e786e9ccb041b6478a Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/hungarian.cpython-311.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/hungarian.cpython-312.pyc b/scenic/model_lib/matchers/__pycache__/hungarian.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..03eb543e3066e77c286e5e1cafcf421ca822c648 Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/hungarian.cpython-312.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/hungarian_cover.cpython-310.pyc b/scenic/model_lib/matchers/__pycache__/hungarian_cover.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..10fd8dbce8c0411973e7afe24be3261ab4d83fbc Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/hungarian_cover.cpython-310.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/hungarian_cover.cpython-311.pyc b/scenic/model_lib/matchers/__pycache__/hungarian_cover.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..96b198c3b0095abd796829e0a61d00c352366878 Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/hungarian_cover.cpython-311.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/hungarian_cover.cpython-312.pyc b/scenic/model_lib/matchers/__pycache__/hungarian_cover.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..048fed06fe08abed0567efd3c6068d0177336263 Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/hungarian_cover.cpython-312.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/hungarian_jax.cpython-310.pyc b/scenic/model_lib/matchers/__pycache__/hungarian_jax.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f52ffa877dd23ae18825b7bd53b0bb0bbc01f3ba Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/hungarian_jax.cpython-310.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/hungarian_jax.cpython-311.pyc b/scenic/model_lib/matchers/__pycache__/hungarian_jax.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2908e94bd76d29b70badf4df9ac2d4ab433b376a Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/hungarian_jax.cpython-311.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/hungarian_jax.cpython-312.pyc b/scenic/model_lib/matchers/__pycache__/hungarian_jax.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2bb9efa182911f6eeb9012f3c2a58d7f32ec2ede Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/hungarian_jax.cpython-312.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/lazy.cpython-310.pyc b/scenic/model_lib/matchers/__pycache__/lazy.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..90ea6b982c9131ba45fa2bf62beab6e418f316a3 Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/lazy.cpython-310.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/lazy.cpython-311.pyc b/scenic/model_lib/matchers/__pycache__/lazy.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..50bc42cd5b09e3101e0f5467bd5c5f799ddbc457 Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/lazy.cpython-311.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/lazy.cpython-312.pyc b/scenic/model_lib/matchers/__pycache__/lazy.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd33a59bb05884d64f0384497f8ac374995eeaf7 Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/lazy.cpython-312.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/sinkhorn.cpython-310.pyc b/scenic/model_lib/matchers/__pycache__/sinkhorn.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a024f250dc8069a7d90f113ee6d97d7b223925fe Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/sinkhorn.cpython-310.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/sinkhorn.cpython-311.pyc b/scenic/model_lib/matchers/__pycache__/sinkhorn.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8bce698900a33e7f701dab738371a976531bab65 Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/sinkhorn.cpython-311.pyc differ diff --git a/scenic/model_lib/matchers/__pycache__/sinkhorn.cpython-312.pyc b/scenic/model_lib/matchers/__pycache__/sinkhorn.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20f89c8888f310c3fa4fb1d43e7b6e3da195865c Binary files /dev/null and b/scenic/model_lib/matchers/__pycache__/sinkhorn.cpython-312.pyc differ diff --git a/scenic/model_lib/matchers/common.py b/scenic/model_lib/matchers/common.py new file mode 100644 index 0000000000000000000000000000000000000000..da7a2ad8c76593db1144ecdf7dae0d1a366e8eb8 --- /dev/null +++ b/scenic/model_lib/matchers/common.py @@ -0,0 +1,120 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Common functions for computing matchings.""" + +import jax +import jax.numpy as jnp +import numpy as np + + +def slicer(cost, n_present_col, matching_fn): + """Maps matching_fn over examples after removing padding to speed up matching. + + Args: + cost: Cost matrix or batch of cost matrices with any number of batch + dimensions. Requires n_row >= n_col. + n_present_col: Number of non-padding columns of the cost matrices, or None + if padding should not be removed. + matching_fn: A matching function that operates on a single cost matrix. + + Returns: + Matchings of shape [batch, 2, n_col]. + + Raises: + ValueError if n_row < n_col and n_present_col is not None. + """ + batch_shape = cost.shape[:-2] + cost = cost.reshape(-1, *cost.shape[-2:]) + + if n_present_col is None: + matches = np.stack([matching_fn(c) for c in cost]) + return matches.reshape(*batch_shape, *matches.shape[1:]) + + n_present_col = n_present_col.reshape(-1) + assert cost.shape[:1] == n_present_col.shape, ( + cost.shape, + n_present_col.shape, + ) + + batch, n_row, n_col = cost.shape + if n_row < n_col: + raise ValueError( + f'Slicer requires that n_row ({n_row}) >= n_col ({n_col}).') + + eye = np.eye(n_row, dtype=bool) + matches = [] + for i in range(batch): + present_col = max(n_present_col[i], 1) # One col even if all are padded. + cost_m = cost[i, :, :present_col] # Slicing should avoid a copy. + + row, col = matching_fn(cost_m) + + # Add padded matches (if padding was done correctly these can be random). + unmatched_row = np.where(~eye[row].max(axis=0))[0] # Faster than setdiff1d. + unmatched_row = unmatched_row.astype(np.int32) + unmatched_col = np.arange(present_col, n_col, dtype=np.int32) + + # Assume n_row >= n_col >= n_present_col. + n_common = n_col - present_col + unmatched_row = unmatched_row[:n_common] + + # Reconstruct the matching. + row = np.concatenate([row, unmatched_row], axis=0) + col = np.concatenate([col, unmatched_col], axis=0) + + matches.append(np.stack([row, col], axis=0)) + + matches = np.stack(matches) + + return matches.reshape(*batch_shape, *matches.shape[1:]) + + +def cpu_matcher(matching_fn): + """Wraps matching function to be usable within jitted functions. + + Args: + matching_fn: function; A matching function that aligns the predictions of + the model with targets. + + Returns: + Matching function with host callback that can be jitted. + """ + # The callback function can only take a single argument. + def slice_and_match(args): + cost, ncol = args + return slicer(cost, ncol, matching_fn) + + @jax.custom_vjp + def matching_fn_hcb(cost, n_cols=None): + *b, n, m = cost.shape + return jax.pure_callback( + slice_and_match, + jax.ShapeDtypeStruct(b + [2, min(n, m)], jnp.int32), + (cost, n_cols), + vmap_method='broadcast_all') + + # Define forward and backward passes. + def matching_fn_hcb_vjp_fwd(cost, n_cols): + return matching_fn_hcb(cost, n_cols), None + + def matching_fn_hcb_vjp_bwd(*_): + return (None, None) # Return no gradient. + + matching_fn_hcb.defvjp(matching_fn_hcb_vjp_fwd, matching_fn_hcb_vjp_bwd) + + # Note: When called from TPU, errors in the callback will NOT cause the code + # to fail, but will produce nonsensical matching outputs. Test the callback + # carefully with jax.jit(callback, backend='cpu') first. + return matching_fn_hcb diff --git a/scenic/model_lib/matchers/greedy.py b/scenic/model_lib/matchers/greedy.py new file mode 100644 index 0000000000000000000000000000000000000000..b6b74010b3639b8d7559a23e04e1b5ae362eb965 --- /dev/null +++ b/scenic/model_lib/matchers/greedy.py @@ -0,0 +1,53 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Greedy matcher.""" +import jax +import jax.numpy as jnp + + +@jax.vmap +def greedy_matcher(cost): + """Computes greedy bipartite matching given a cost matrix. + + The code applies to a single matrix; vmap is applied for batching. + + Args: + cost: jnp.ndarray; Cost matrix for the matching of shape [N, M]. + + Returns: + An assignment of size [2, min(N, M)]. + """ + # Ensure that the shorter dimension comes first: + transposed = cost.shape[0] > cost.shape[1] + if transposed: + cost = jnp.transpose(cost) + + # Max cost is used for masking: + max_cost = jnp.max(cost) + + def select(cost, _): + min_index_flat = jnp.argmin(cost) + min_row, min_col = jnp.unravel_index(min_index_flat, cost.shape) + cost = cost.at[min_row, :].set(max_cost + 1) + cost = cost.at[:, min_col].set(max_cost + 1) + return cost, jnp.array([min_row, min_col]) + + _, indices = jax.lax.scan(f=select, init=cost, xs=None, length=cost.shape[0]) + + if transposed: + indices = jnp.flip(indices, axis=1) + + # From [N/M, 2] to [2, N/M]: + return jnp.transpose(indices) diff --git a/scenic/model_lib/matchers/hungarian.py b/scenic/model_lib/matchers/hungarian.py new file mode 100644 index 0000000000000000000000000000000000000000..668805d6d1f113e68703d789eaf50df407c58b85 --- /dev/null +++ b/scenic/model_lib/matchers/hungarian.py @@ -0,0 +1,38 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Hungarian matching based on Scipy.""" + +import numpy as np +from scenic.model_lib.matchers.common import cpu_matcher +import scipy.optimize as sciopt + + +@cpu_matcher +def hungarian_matcher(cost): + """Computes Hungarian Matching given a single cost matrix. + + Relevant DETR code: + https://github.com/facebookresearch/detr/blob/647917626d5017e63c1217b99537deb2dcb370d6/models/matcher.py#L35 + + Args: + cost: Matching cost matrix of shape [N, M]. + + Returns: + Array of shape [min(N, M), 2] where each row contains a matched pair of + indices into the rows (N) and columns (M) of the cost matrix. + """ + # Matrix is transposed to maintain the convention of other matchers: + col_ind, row_ind = sciopt.linear_sum_assignment(cost.T) + return np.stack([row_ind, col_ind]).astype(np.int32) diff --git a/scenic/model_lib/matchers/hungarian_cover.py b/scenic/model_lib/matchers/hungarian_cover.py new file mode 100644 index 0000000000000000000000000000000000000000..f683bc387aec68a4219fbc7d9e6c01935963c464 --- /dev/null +++ b/scenic/model_lib/matchers/hungarian_cover.py @@ -0,0 +1,481 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""TPU-friendly Hungarian matching algorithm. + +JAX implementation the Linear Sum Assignment problem solver. This implementation +builds off of the Hungarian Matching Algorithm +(https://www.cse.ust.hk/~golin/COMP572/Notes/Matching.pdf). + +Based on the original implementation by Jiquan Ngiam . +""" + + +from typing import Tuple, Optional, Dict + +import jax +import jax.numpy as jnp + + +def _prepare(weights: jnp.ndarray) -> jnp.ndarray: + """Prepare the cost matrix. + + To speed up computational efficiency of the algorithm, all weights are shifted + to be non-negative. Each element is reduced by the row / column minimum. Note + that neither operation will effect the resulting solution but will provide a + better starting point for the greedy assignment. Note this corresponds to the + pre-processing and step 1 of the Hungarian algorithm from Wikipedia. + + Args: + weights: A float32 [b, n, m] array, where each inner matrix represents + weights to be use for matching. + + Returns: + A prepared weights array of the same shape and dtype. + """ + # Since every worker needs a job and every job needs a worker, we can subtract + # the minimum from each. + assert weights.ndim == 3 + + weights = weights - jnp.min(weights, axis=2, keepdims=True) + weights = weights - jnp.min(weights, axis=1, keepdims=True) + return weights + + +def _greedy_assignment(adj_matrix: jnp.ndarray) -> jnp.ndarray: + """Greedily assigns workers to jobs based on an adjaceny matrix. + + Starting with an adjacency matrix representing the available connections in + the bi-partite graph, this function greedily chooses elements such that each + worker is matched to at most one job (or each job is assigned to at most one + worker). Note, if the adjacency matrix has no available values for a + particular row/column, the corresponding job/worker may go unassigned. + + Args: + adj_matrix: A bool [b, n, m] array, where each element of the inner matrix + represents whether the worker (row) can be matched to the job (column). + + Returns: + A bool [b, n, m] array, where each element of the inner matrix represents + whether the worker has been matched to the job. Each row and column can have + at most one true element. Some of the rows and columns may not be matched. + """ + b, _, m = adj_matrix.shape + + # To (n, b, m) + adj_matrix = jnp.transpose(adj_matrix, axes=(1, 0, 2)) + + # Iteratively assign each row using jax.lax.scan. Intuitively, this is a loop + # over rows, where we incrementally assign each row. + def _assign_row(col_assigned, row_adj): + # Viable candidates cannot already be assigned to another job. + candidates = jnp.logical_and(row_adj, jnp.logical_not(col_assigned)) + + # Deterministically assign to the candidates of the highest index count. + max_candidate_idx = jnp.argmax(candidates, axis=1) + candidates_indicator = jax.nn.one_hot(max_candidate_idx, m, dtype=jnp.bool_) + candidates_indicator = jnp.logical_and(candidates_indicator, candidates) + + # Make assignment to the column. + col_assigned = jnp.logical_or(candidates_indicator, col_assigned) + + return col_assigned, candidates_indicator + + # Store the elements assigned to each column to update each iteration. + col_assigned = jnp.zeros((b, m), dtype=jnp.bool_) + _, assignment = jax.lax.scan( + _assign_row, col_assigned, adj_matrix) + + # To (b, n, m) + assignment = jnp.transpose(assignment, axes=(1, 0, 2)) + return assignment + + +def _find_augmenting_path(assignment: jnp.ndarray, + adj_matrix: jnp.ndarray) -> Dict[str, jnp.ndarray]: + """Finds an augmenting path given an assignment and an adjacency matrix. + + The augmenting path search starts from the unassigned workers, then goes on + to find jobs (via an unassigned pairing), then back again to workers (via an + existing pairing), and so on. The path alternates between unassigned and + existing pairings. Returns the state after the search. + + Note: In the state the worker and job, indices are 1-indexed so that we can + use 0 to represent unreachable nodes. State contains the following keys: + + - jobs: A [b, 1, m] array containing the highest index unassigned worker that + can reach this job through a path. + - jobs_from_worker: A [b, n] array containing the worker reached immediately + before this job. + - workers: A [b, n, 1] array containing the highest index unassigned worker + that can reach this worker through a path. + - workers_from_job: A [b, m] array containing the job reached immediately + before this worker. + - new_jobs: A bool [b, m] array containing True if the unassigned job can be + reached via a path. + + State can be used to recover the path via backtracking. + + Args: + assignment: A bool [b, n, m] array, where each element of the inner matrix + represents whether the worker has been matched to the job. This may be a + partial assignment. + adj_matrix: A bool [b, n, m] array, where each element of the inner matrix + represents whether the worker (row) can be matched to the job (column). + + Returns: + A state dictionary, which represents the outcome of running an augmenting + path search on the graph given the assignment. + """ + b, n, m = assignment.shape + unassigned_workers = jnp.logical_not( + jnp.any(assignment, axis=2, keepdims=True)) + unassigned_jobs = jnp.logical_not(jnp.any(assignment, axis=1, keepdims=True)) + + unassigned_pairings = jnp.logical_and( + adj_matrix, jnp.logical_not(assignment)).astype(jnp.int32) + existing_pairings = assignment.astype(jnp.int32) + + # Initialize unassigned workers to have non-zero ids, assigned workers will + # have ids = 0. + worker_indices = jnp.arange(1, n + 1, dtype=jnp.int32) + init_workers = jnp.tile( + worker_indices[jnp.newaxis, :, jnp.newaxis], (b, 1, 1)) + init_workers = init_workers * unassigned_workers.astype(jnp.int32) + + state = {'jobs': jnp.zeros((b, 1, m), dtype=jnp.int32), + 'jobs_from_worker': jnp.zeros((b, m), dtype=jnp.int32), + 'workers': init_workers, + 'workers_from_job': jnp.zeros((b, n), dtype=jnp.int32),} + + def _has_active_workers(arg): + """Check if there are still active workers.""" + _, cur_workers = arg + return jnp.sum(cur_workers) > 0 + + def _augment_step(arg): + """Performs one search step.""" + state, cur_workers = arg + + # Find potential jobs using current workers. + potential_jobs = cur_workers * unassigned_pairings + curr_jobs = jnp.max(potential_jobs, axis=1, keepdims=True) + curr_jobs_from_worker = 1 + jnp.argmax(potential_jobs, axis=1) + + # Remove already accessible jobs from curr_jobs. + default_jobs = jnp.zeros_like(state['jobs']) + curr_jobs = jnp.where(state['jobs'] > 0, default_jobs, curr_jobs) + curr_jobs_from_worker = (curr_jobs_from_worker * + (curr_jobs > 0).astype(jnp.int32)[:, 0, :]) + + # Find potential workers from current jobs. + potential_workers = curr_jobs * existing_pairings + cur_workers = jnp.max(potential_workers, axis=2, keepdims=True) + cur_workers_from_job = 1 + jnp.argmax(potential_workers, axis=2) + + # Remove already accessible workers from cur_workers. + default_workers = jnp.zeros_like(state['workers']) + cur_workers = jnp.where( + state['workers'] > 0, default_workers, cur_workers) + cur_workers_from_job = (cur_workers_from_job * + (cur_workers > 0).astype(jnp.int32)[:, :, 0]) + + # Update state so that we can backtrack later. + state['jobs'] = jnp.maximum(state['jobs'], curr_jobs) + state['jobs_from_worker'] = jnp.maximum( + state['jobs_from_worker'], curr_jobs_from_worker) + state['workers'] = jnp.maximum(state['workers'], cur_workers) + state['workers_from_job'] = jnp.maximum( + state['workers_from_job'], cur_workers_from_job) + + return state, cur_workers + + state, _ = jax.lax.while_loop( + _has_active_workers, _augment_step, (state, init_workers)) + + # Compute new jobs, this is useful for determnining termnination of the + # maximum bi-partite matching and initialization for backtracking. + new_jobs = jnp.logical_and(state['jobs'] > 0, unassigned_jobs) + state['new_jobs'] = new_jobs[:, 0, :] + return state + + +def _improve_assignment(assignment: jnp.ndarray, + state: Dict[str, jnp.ndarray]) -> jnp.ndarray: + """Improves an assignment by backtracking the augmented path using state. + + Args: + assignment: A bool [b, n, m] array, where each element of the inner matrix + represents whether the worker has been matched to the job. This may be a + partial assignment. + state: Represents the outcome of running an augmenting path search on the + graph given the assignment. + + Returns: + A new assignment array of the same shape and type as assignment, where the + assignment has been updated using the augmented path found. + """ + b, n, m = assignment.shape + + # We store the current job id and iteratively backtrack using jobs_from_worker + # and workers_from_job until we reach an unassigned worker. We flip all the + # assignments on this path to discover a better overall assignment. + + # Note: The indices in state are 1-indexed, where 0 represents that the + # worker / job cannot be reached. + + # Obtain initial job indices based on new_jobs. + curr_job_idx = jnp.argmax(state['new_jobs'], axis=1) + + # Track whether an example is actively being backtracked. Since we are + # operating on a batch, not all examples in the batch may be active. + simple_gather = jax.vmap(lambda x, idx: x[idx], in_axes=[0, 0], out_axes=0) + active = simple_gather(state['new_jobs'], curr_job_idx) + batch_range = jnp.arange(0, b, dtype=jnp.int32) + + # Flip matrix tracks which assignments we need to flip - corresponding to the + # augmenting path taken. We use an integer array here so that we can use + # array_scatter_nd_add to update the array, and then cast it back to bool + # after the loop. + flip_matrix = jnp.zeros((b, n, m), dtype=jnp.int32) + + def _has_active_backtracks(arg): + """Check if there are still active workers.""" + _, active, _ = arg + return jnp.any(active) + + dimension_numbers = jax.lax.ScatterDimensionNumbers( + update_window_dims=(), + inserted_window_dims=(0, 1, 2), + scatter_dims_to_operand_dims=(0, 1, 2)) + + def _backtrack_one_step(arg): + """Take one step in backtracking.""" + flip_matrix, active, curr_job_idx = arg + # Discover the worker that the job originated from, note that this worker + # must exist by construction. + curr_worker_idx = simple_gather(state['jobs_from_worker'], curr_job_idx) - 1 + curr_worker_idx = jnp.maximum(curr_worker_idx, 0) + update_indices = jnp.stack([batch_range, curr_worker_idx, curr_job_idx], + axis=1) + update_indices = jnp.maximum(update_indices, 0) + flip_matrix = jax.lax.scatter_add( + flip_matrix, + update_indices, + active.astype(jnp.int32), + dimension_numbers, + unique_indices=True) + + # Discover the (potential) job that the worker originated from. + curr_job_idx = simple_gather(state['workers_from_job'], curr_worker_idx) - 1 + + # Note that jobs may not be active, and we track that here (before + # adjusting indices so that they are all >= 0 for gather). + active = jnp.logical_and(active, curr_job_idx >= 0) + curr_job_idx = jnp.maximum(curr_job_idx, 0) + update_indices = jnp.stack([batch_range, curr_worker_idx, curr_job_idx], + axis=1) + update_indices = jnp.maximum(update_indices, 0) + flip_matrix = jax.lax.scatter_add( + flip_matrix, + update_indices, + active.astype(jnp.int32), + dimension_numbers, + unique_indices=True) + + return flip_matrix, active, curr_job_idx + + flip_matrix, _, _ = jax.lax.while_loop( + _has_active_backtracks, + _backtrack_one_step, + (flip_matrix, active, curr_job_idx)) + + assignment = jnp.logical_xor(assignment, flip_matrix > 0) + return assignment + + +def _maximum_bipartite_matching( + adj_matrix: jnp.ndarray, assignment: Optional[jnp.ndarray] = None +) -> Tuple[Dict[str, jnp.ndarray], jnp.ndarray]: + """Performs maximum bipartite matching using augmented paths. + + Args: + adj_matrix: A bool [b, n, m] array, where each element of the inner matrix + represents whether the worker (row) can be matched to the job (column). + assignment: An optional bool [b, n, m] array, where each element of the + inner matrix represents whether the worker has been matched to the job. + This may be a partial assignment. If specified, this assignment will be + used to seed the iterative algorithm. + + Returns: + A state dict representing the final augmenting path state search, and + a maximum bipartite matching assignment array. Note that the state outcome + can be used to compute a minimum vertex cover for the bipartite graph. + """ + if assignment is None: + assignment = _greedy_assignment(adj_matrix) + state = _find_augmenting_path(assignment, adj_matrix) + + def _has_new_jobs(arg): + state, _ = arg + return jnp.any(state['new_jobs']) + + def _improve_assignment_and_find_new_path(arg): + state, assignment = arg + assignment = _improve_assignment(assignment, state) + state = _find_augmenting_path(assignment, adj_matrix) + return state, assignment + + state, assignment = jax.lax.while_loop( + _has_new_jobs, + _improve_assignment_and_find_new_path, + (state, assignment)) + + return state, assignment + + +def _compute_cover( + state: Dict[str, jnp.ndarray], assignment: jnp.ndarray +) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Computes a cover for the bipartite graph. + + We compute a cover using the construction provided at + https://en.wikipedia.org/wiki/K%C5%91nig%27s_theorem_(graph_theory)#Proof + which uses the outcome from the alternating path search. + + Args: + state: A state dict, which represents the outcome of running an augmenting + path search on the graph given the assignment. + assignment: An optional bool [b, n, m] array, where each element of the + inner matrix represents whether the worker has been matched to the job. + This may be a partial assignment. If specified, this assignment will be + used to seed the iterative algorithm. + + Returns: + Row and column covers for the bipartite graph: workers_cover is a boolean + array of shape [b, n, 1] and jobs_cover is a array array of shape + [b, 1, m]. + """ + assigned_workers = jnp.any(assignment, axis=2, keepdims=True) + assigned_jobs = jnp.any(assignment, axis=1, keepdims=True) + + workers_cover = jnp.logical_and(assigned_workers, state['workers'] <= 0) + jobs_cover = jnp.logical_and(assigned_jobs, state['jobs'] > 0) + + return workers_cover, jobs_cover + + +def _update_weights_using_cover(workers_cover: jnp.ndarray, + jobs_cover: jnp.ndarray, + weights: jnp.ndarray) -> jnp.ndarray: + """Updates weights for hungarian matching using a cover. + + We first find the minimum uncovered weight. Then, we subtract this from all + the uncovered weights, and add it to all the doubly covered weights. + + Args: + workers_cover: A boolean array of shape [b, n, 1]. + jobs_cover: A boolean array of shape [b, 1, n]. + weights: A float32 [b, n, n] array, where each inner matrix represents + weights to be use for matching. + + Returns: + A new weight matrix with elements adjusted by the cover. + """ + max_value = jnp.max(weights) + + covered = jnp.logical_or(workers_cover, jobs_cover) + double_covered = jnp.logical_and(workers_cover, jobs_cover) + + uncovered_weights = jnp.where( + covered, jnp.full_like(weights, max_value), weights) + min_weight = jnp.min(uncovered_weights, axis=(-2, -1), keepdims=True) + + add_weight = jnp.where(double_covered, + jnp.full_like(weights, min_weight), + jnp.zeros_like(weights)) + sub_weight = jnp.where(covered, jnp.zeros_like(weights), + jnp.full_like(weights, min_weight)) + + return weights + add_weight - sub_weight + + +def hungarian_cover_matcher(weights: jnp.ndarray, + eps: float = 1e-8) -> jnp.ndarray: + """Computes the minimum linear sum assignment using the Hungarian algorithm. + + Args: + weights: A float32 [b, n, m] array, where each inner matrix represents + weights to be use for matching. + eps: Small number to test for equality to 0. + + Returns: + Jobs and workers matching indices as [b, 2, m] . + """ + b, n, m = weights.shape + should_transpose = n > m + if should_transpose: + weights = jnp.transpose(weights, axes=(0, 2, 1)) + n, m = m, n + + # TODO(agritsenko): Figure out a more efficient way of correctly handling + # rectangular cost matrices. + if n != m: # So n < m based on the code block above. + pad_n = 1 # `m - n` is guaranteed to be correct, but 1 also works. + pad_values = jnp.max(weights, axis=(1, 2), keepdims=True) * 1.1 + pad_values = jnp.broadcast_to(pad_values, (b, pad_n, m)) + weights = jnp.concatenate((weights, pad_values), axis=1) + n += pad_n + else: + pad_n = 0 + + weights = _prepare(weights) + adj_matrix = jnp.abs(weights) < eps + state, assignment = _maximum_bipartite_matching(adj_matrix) + workers_cover, jobs_cover = _compute_cover(state, assignment) + + def _cover_incomplete(arg): + workers_cover, jobs_cover, _, _ = arg + cover_sum = (jnp.sum(workers_cover, dtype=jnp.int32) + + jnp.sum(jobs_cover, dtype=jnp.int32)) + return cover_sum < b * n + + def _update_weights_and_match(arg): + workers_cover, jobs_cover, weights, assignment = arg + weights = _update_weights_using_cover(workers_cover, jobs_cover, weights) + adj_matrix = jnp.abs(weights) < eps + state, assignment = _maximum_bipartite_matching(adj_matrix, assignment) + workers_cover, jobs_cover = _compute_cover(state, assignment) + return workers_cover, jobs_cover, weights, assignment + + workers_cover, jobs_cover, weights, assignment = jax.lax.while_loop( + _cover_incomplete, + _update_weights_and_match, + (workers_cover, jobs_cover, weights, assignment)) + + workers_ind = jnp.broadcast_to(jnp.arange(n), (b, n)) + jobs_ind = jnp.argmax(assignment, axis=2) + + # Remove padded indices. + workers_ind = workers_ind[:, :n - pad_n] + jobs_ind = jobs_ind[:, :n - pad_n] + + if not should_transpose: + ind = jnp.stack([workers_ind, jobs_ind], axis=1) + else: + ind = jnp.stack([jobs_ind, workers_ind], axis=1) + return ind + + +hungarian_cover_tpu_matcher = jax.jit(hungarian_cover_matcher) diff --git a/scenic/model_lib/matchers/hungarian_jax.py b/scenic/model_lib/matchers/hungarian_jax.py new file mode 100644 index 0000000000000000000000000000000000000000..c80be6b883d9554c0a080d3aa72d916b310c1100 --- /dev/null +++ b/scenic/model_lib/matchers/hungarian_jax.py @@ -0,0 +1,138 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""JAX-based Hungarian matcher implementation.""" + +import jax +import jax.numpy as jnp + + +def hungarian_single(cost): + """Hungarian matcher for a single example.""" + + is_transpose = cost.shape[0] > cost.shape[1] + if is_transpose: + cost = cost.T + + n, m = cost.shape + one_hot_m = jnp.eye(m + 1) + + def row_scan_fn(state, i): + """Loop over the rows of the cost matrix.""" + u, v, parent = state + + # parent[0] = i; note that i runs from 1 to n inclusive + parent = jax.lax.dynamic_update_index_in_dim(parent, i, 0, axis=0) + + def dfs_body_fn(state): + # Row potential, column potential, used array, support array, path array + # column index j0. + u, v, used, minv, way, j0 = state + + # Mark column as used + # used = jax.lax.dynamic_update_index_in_dim(used, True, j0, axis=0) + # used = jnp.logical_or(used, jnp.arange(m + 1) == j0) + used = jnp.logical_or(used, one_hot_m[j0]) + used_slice = used[1:] + + # Row paired to column j0 + i0 = parent[j0] + + # Update minv and path to it + cur = cost[i0 - 1, :] - u[i0] - v[1:] + cur = jnp.where(used_slice, jnp.full_like(cur, 1e10), cur) + way = jnp.where(cur < minv, jnp.full_like(way, j0), way) + minv = jnp.where(cur < minv, cur, minv) + + # When finding an index with minimal minv, we need to mask out the visited + # rows + masked_minv = jnp.where(used_slice, jnp.full_like(minv, 1e10), minv) + j1 = jnp.argmin(masked_minv) + 1 + delta = jnp.min(minv, initial=1e10, where=jnp.logical_not(used_slice)) + + # Update potentials + indices = jnp.where(used, parent, n + 1) # deliberately out of bounds + u = u.at[indices].add(delta) + v = jnp.where(used, v - delta, v) + minv = jnp.where(jnp.logical_not(used_slice), minv - delta, minv) + + return (u, v, used, minv, way, j1) + + def dfs_cond_fn(state): + _, _, _, _, _, j0 = state + return parent[j0] != 0 + + # Run the inner while loop (i.e. DFS) + way = jnp.zeros((m,), dtype=jnp.int32) + used = jnp.zeros((m + 1,), dtype=jnp.bool_) + minv = jnp.full((m,), 1e10, dtype=jnp.float32) + init_state = (u, v, used, minv, way, 0) + + state = jax.lax.while_loop(dfs_cond_fn, dfs_body_fn, init_state) + u, v, _, _, way, j0 = state + + def update_parent_body_fn(state): + """Update parents based on the DFS path.""" + parent, j0 = state + j1 = way[j0 - 1] + parent = jax.lax.dynamic_update_index_in_dim( + parent, parent[j1], j0, axis=0) + return (parent, j1) + + def update_parent_cond_fn(state): + """Condition function counterpart.""" + _, j0 = state + return j0 != 0 + + # Backtrack the DFS path + init_state = (parent, j0) + parent, _ = jax.lax.while_loop( + update_parent_cond_fn, update_parent_body_fn, init_state) + + return (u, v, parent), None + + # Define the initial state + u = jnp.zeros((n + 2,), dtype=jnp.float32) + v = jnp.zeros((m + 1,), dtype=jnp.float32) + parent = jnp.zeros((m + 1,), dtype=jnp.int32) + + init_state = (u, v, parent) + (u, v, parent), _ = jax.lax.scan( + row_scan_fn, init_state, jnp.arange(1, n + 1)) + + # -v[0] is the matching cost, but not returned to match the signature all + # other matchers. + if n != m: + # This is a costly operation, so skip it when possible (i.e. for square cost + # matrices). + parent, indices = jax.lax.top_k(parent[1:], n) + else: + parent, indices = parent[1:], jnp.arange(n) + parent = parent - 1 # Switch back to 0-based indexing. + + if is_transpose: + return jnp.stack([indices, parent], axis=0) + return jnp.stack([parent, indices], axis=0) + + +def hungarian_scan(cost): + """A scan-based batch version of the hungarian matching.""" + def hungarian_fn(_, cost): + return None, hungarian_single(cost) + _, indices = jax.lax.scan(hungarian_fn, None, cost, unroll=1) + return indices + + +hungarian_tpu_matcher = jax.jit(jax.vmap(hungarian_single)) +hungarian_scan_tpu_matcher = jax.jit(hungarian_scan) diff --git a/scenic/model_lib/matchers/lazy.py b/scenic/model_lib/matchers/lazy.py new file mode 100644 index 0000000000000000000000000000000000000000..6bc13ac128c8a6eb94752af9bbb979df8e88873a --- /dev/null +++ b/scenic/model_lib/matchers/lazy.py @@ -0,0 +1,33 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Lazy matcher.""" + +import jax +import jax.numpy as jnp + + +def lazy_matcher(cost: jnp.ndarray) -> jnp.ndarray: + """Computes lazy Matching on cost matrix for a batch of datapoints. + + This matcher ignores input and matches i-th to i-th input. + + Args: + cost: Cost matrix for the matching of shape [B, N, M]. + + Returns: + An assignment of size [B, 2, min(N,M)]. + """ + batch_size, n, m = cost.shape + return jax.lax.broadcast(jnp.arange(0, min(n, m)), (batch_size, 2)) diff --git a/scenic/model_lib/matchers/sinkhorn.py b/scenic/model_lib/matchers/sinkhorn.py new file mode 100644 index 0000000000000000000000000000000000000000..e0499764f17a9e85ce335ee2dcaf913083e0bf4e --- /dev/null +++ b/scenic/model_lib/matchers/sinkhorn.py @@ -0,0 +1,153 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Sinkhorn matcher. + +""" + + +from typing import Optional +import jax +import jax.numpy as jnp +import numpy as np +from ott.geometry import geometry +from ott.tools import transport + + +def idx2permutation(row_ind, col_ind): + """Constructs a permutation matrix from the column and row indices of ones.""" + bs, dim = row_ind.shape[:2] + perm = jnp.zeros(shape=(bs, dim, dim), dtype='float32') + perm = jax.vmap((lambda x, idx, y: x.at[idx].set(y)), + (0, 0, None))(perm, (row_ind, col_ind), 1.) + return perm + + +def sample_permutation(key, coupling): + """Samples a permutation matrix from a doubly stochastic coupling matrix. + + CAREFUL: the couplings that come out of the Sinkhorn solver are not doubly + stochastic but 1/dim * doubly_stochastic. + + See **Convex Relaxations for Permutation Problems** paper for rough + explanation of the algorithm. + + Best to use by drawing multiple samples and picking the permutation with + lowest cost as sometimes permutations seem to be drawn with high cost. The + sample_best_permutation method does this. + + Args: + key: jnp.ndarray; Functions as a PRNG key. + coupling: jnp.ndarray; Has shape [N, N] which must have marginals such that + coupling.sum(0) == 1. and coupling.sum(1) == 1. Note that in Sinkhorn we + usually output couplings with marginals that sum to 1/N. + + Returns: + Permutation matrix: jnp.ndarray of shape [N, N] of floating dtype. + """ + bs, dim = coupling.shape[:2] + + # Random monotonic vector v without duplicates. + v = jax.random.choice(key, 10 * dim, shape=(bs, dim), replace=False) + v = jnp.sort(v, axis=-1) * 10. + + w = jnp.einsum('bnm,bm->bn', coupling, v) + # Sorting w will give the row indices of the permutation matrix. + row_ind = jnp.argsort(w, axis=-1) + col_ind = jnp.tile(jnp.arange(0, dim)[None, :], [bs, 1]) + + # Compute permutation matrix from row and column indices. + perm = idx2permutation(row_ind, col_ind) + return perm + + +def sample_best_permutation(key, coupling, cost, num_trials=10): + """Samples permutation matrices and returns the one with lowest cost. + + See **Convex Relaxations for Permutation Problems** paper for rough + explanation of the algorithm. + + Args: + key: jnp.ndarray; functions as a PRNG key. + coupling: jnp.ndarray; has shape [N, N]. + cost: jnp.ndarray; has shape [N, N]. + num_trials: int; determines the amount of times we sample a permutation. + + Returns: + Permutation matrix: jnp.ndarray of shape [N, N] of floating point type. + This is the permutation matrix with lowest optimal transport cost. + """ + vec_sample_permutation = jax.vmap(sample_permutation, in_axes=(0, None), + out_axes=0) + key = jax.random.split(key, num_trials) + perms = vec_sample_permutation(key, coupling) + + # Pick the permutation with minimal ot cost + ot = jnp.einsum('nbij,bij->nb', perms, cost) + min_idx = jnp.argmin(ot, axis=0) + out_perm = jax.vmap(jnp.take, (1, 0, None))(perms, min_idx, 0) + return out_perm + + +def sinkhorn_matcher(cost: jnp.ndarray, + rng: Optional[jnp.ndarray] = None, + epsilon: float = 0.001, + init: float = 50, + decay: float = 0.9, + num_iters: int = 1000, + num_permutations: int = 100, + threshold: float = 1e-2, + chg_momentum_from: int = 100): + """Computes Sinkhorn Matching on cost matrix for a batch of datapoints. + + Args: + cost: Cost matrix for the matching of shape [B, N, N]. + rng: Random generator for sampling. + epsilon: Level of entropic regularization wanted. + init: Multiplier for epsilon decay at the first iteration. + decay: How much to decay epsilon between two iterations. + num_iters: Number of Sinkhorn iterations. + num_permutations: Number of random permutations to sample for + selecting the best. + threshold: Convergence threshold for Sinkhorn algorithm. + chg_momentum_from: Iteration from which to trigger the momemtum in Sinkhorn. + + Returns: + An assignment of size [B, 2, N]. + """ + def coupling_fn(c): + geom = geometry.Geometry( + cost_matrix=c, epsilon=epsilon, init=init, decay=decay) + return transport.solve(geom, + max_iterations=num_iters, + chg_momentum_from=chg_momentum_from, + threshold=threshold).matrix + + coupling = jax.vmap(coupling_fn)(cost) + + if rng is None: + # Use fixed key to make sampling deterministic. + rng = jax.random.PRNGKey(0) + + permutation = sample_best_permutation(rng, coupling, cost, num_permutations) + permutation = jnp.array(permutation, dtype=jnp.int32) + grid = np.stack( + np.meshgrid( + np.arange(cost.shape[1], dtype=np.int32), + np.arange(cost.shape[2], dtype=np.int32), + indexing='ij'), + axis=0) + indices = jnp.einsum('bnm,2nm->b2n', permutation, grid) + + return indices diff --git a/scenic/model_lib/matchers/tests/__init__.py b/scenic/model_lib/matchers/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/model_lib/matchers/tests/test_matchers.py b/scenic/model_lib/matchers/tests/test_matchers.py new file mode 100644 index 0000000000000000000000000000000000000000..500060a9da9fffa7ac7a5f573e727bcb92678b9e --- /dev/null +++ b/scenic/model_lib/matchers/tests/test_matchers.py @@ -0,0 +1,423 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for functions in matchers.""" + + +from typing import Optional + +from absl.testing import absltest +from absl.testing import parameterized +import jax +import jax.numpy as jnp +import numpy as np +from scenic.model_lib import matchers +from scenic.model_lib.base_models import box_utils +import scipy.optimize as sciopt + + +MATCHER_FUNCTIONS = { + 'hungarian': matchers.hungarian_matcher, + 'hungarian_tpu': matchers.hungarian_tpu_matcher, + 'hungarian_scan_tpu': matchers.hungarian_scan_tpu_matcher, + 'sinkhorn': matchers.sinkhorn_matcher, + 'greedy': matchers.greedy_matcher, + 'lazy': matchers.lazy_matcher, + 'hungarian_cover_tpu': matchers.hungarian_cover_tpu_matcher +} +EXACT_MATCHERS = ['hungarian', 'hungarian_tpu', 'hungarian_scan_tpu', + 'hungarian_cover_tpu'] +RECT_MATCHERS = ['hungarian', 'hungarian_tpu', 'hungarian_scan_tpu', + 'hungarian_cover_tpu'] +CPU_MATCHERS = ['hungarian'] + +EPS = 1e-4 + + +def compute_cost( + *, + tgt_labels: jnp.ndarray, + out_prob: jnp.ndarray, + tgt_bbox: Optional[jnp.ndarray] = None, + out_bbox: Optional[jnp.ndarray] = None, + class_loss_coef: float, + bbox_loss_coef: Optional[float] = None, + giou_loss_coef: Optional[float] = None, + target_is_onehot: bool, +) -> jnp.ndarray: + """Computes cost matrices for a batch of predictions. + + Relevant code: + https://github.com/facebookresearch/detr/blob/647917626d5017e63c1217b99537deb2dcb370d6/models/matcher.py#L35 + + Args: + tgt_labels: Class labels of shape [B, M]. If target_is_onehot then it is [B, + M, C]. Note that the labels corresponding to empty bounding boxes are not + yet supposed to be filtered out. + out_prob: Classification probabilities of shape [B, N, C]. + tgt_bbox: Target box coordinates of shape [B, M, 4]. Note that the empty + bounding boxes are not yet supposed to be filtered out. + out_bbox: Predicted box coordinates of shape [B, N, 4] + class_loss_coef: Relative weight of classification loss. + bbox_loss_coef: Relative weight of bbox loss. + giou_loss_coef: Relative weight of giou loss. + target_is_onehot: boolean; Whether targets are one-hot encoded. + + Returns: + A cost matrix [B, N, M]. + """ + if (tgt_bbox is None) != (out_bbox is None): + raise ValueError('Both `tgt_bbox` and `out_bbox` must be set.') + if (tgt_bbox is not None) and ((bbox_loss_coef is None) or + (giou_loss_coef is None)): + raise ValueError('For detection, both `bbox_loss_coef` and `giou_loss_coef`' + ' must be set.') + + batch_size, max_num_boxes = tgt_labels.shape[:2] + num_queries = out_prob.shape[1] + if target_is_onehot: + mask = tgt_labels[..., 0] == 0 # [B, M] + else: + mask = tgt_labels != 0 # [B, M] + + # [B, N, M] + cost_class = -out_prob # DETR uses -prob for matching. + max_cost_class = 0.0 + + # [B, N, M] + if target_is_onehot: + cost_class = jnp.einsum('bnl,bml->bnm', cost_class, tgt_labels) + else: + cost_class = jax.vmap(jnp.take, (0, 0, None))(cost_class, tgt_labels, 1) + + cost = class_loss_coef * cost_class + cost_upper_bound = max_cost_class + + if out_bbox is not None: + # [B, N, M, 4] + diff = jnp.abs(out_bbox[:, :, None] - tgt_bbox[:, None, :]) + cost_bbox = jnp.sum(diff, axis=-1) # [B, N, M] + cost = cost + bbox_loss_coef * cost_bbox + + # Cost_upper_bound is the approximate maximal possible total cost: + cost_upper_bound = cost_upper_bound + bbox_loss_coef * 4.0 # cost_bbox <= 4 + + # [B, N, M] + cost_giou = -box_utils.generalized_box_iou( + box_utils.box_cxcywh_to_xyxy(out_bbox), + box_utils.box_cxcywh_to_xyxy(tgt_bbox), + all_pairs=True) + cost = cost + giou_loss_coef * cost_giou + + # cost_giou < 0, but can be a bit higher in the beginning of training: + cost_upper_bound = cost_upper_bound + giou_loss_coef * 1.0 + + # Don't make costs too large w.r.t. the rest to avoid numerical instability. + mask = mask[:, None] + cost = cost * mask + (1.0 - mask) * cost_upper_bound + # Guard against NaNs and Infs. + cost = jnp.nan_to_num( + cost, + nan=cost_upper_bound, + posinf=cost_upper_bound, + neginf=cost_upper_bound) + + assert cost.shape == (batch_size, num_queries, max_num_boxes) + + # Compute the number of unpadded columns for each batch element. It is assumed + # that all padding is trailing padding. + n_cols = jnp.where( + jnp.max(mask, axis=1), + jnp.expand_dims(jnp.arange(1, max_num_boxes + 1), axis=0), 0) + n_cols = jnp.max(n_cols, axis=1) + return cost, n_cols # pytype: disable=bad-return-type # jax-ndarray + + +# TODO(agritsenko): remove this copy-paste from +# scenic.model_lib.base_models.tests.test_model_utils +def sample_cxcywh_bbox(key, batch_shape): + """Samples a bounding box in the [cx, cy, w, h] in [0, 1] range format.""" + frac = 0.8 + sample = jax.random.uniform(key, shape=(*batch_shape, 4)) * frac + cx, cy, w, h = jnp.split(sample, indices_or_sections=4, axis=-1) + # Make sure the bounding box doesn't cross the right and top image borders + w = jnp.where(cx + w / 2. >= 1., frac * 2. * (1. - cx), w) + h = jnp.where(cy + h / 2. >= 1., frac * 2. * (1. - cy), h) + # Make sure the bounding box doesn't cross the left and bottom image borders + w = jnp.where(cx - w / 2. <= 0., frac * 2. * cx, w) + h = jnp.where(cy - h / 2. <= 0., frac * 2. * cy, h) + + bbox = jnp.concatenate([cx, cy, w, h], axis=-1) + return bbox + + +class MatchingTest(parameterized.TestCase): + """Test hungarian matcher.""" + + def setUp(self): + """Setup sample output predictions and target labels and bounding boxes.""" + super().setUp() + + self.batchsize = 4 + self.num_classes = 1000 + self.num_preds = 100 + # TODO(diwe): only N->N mapping is supported by greedy and sinkhorn. + self.max_num_boxes = self.num_preds + + key = jax.random.PRNGKey(0) + + # Create fake predictions and targets + key, subkey = jax.random.split(key) + # set probabilities for class 0 higher than others + p_logits = jnp.ones(self.num_classes).at[0].set(5.) + p = jax.nn.softmax(p_logits) + tgt_labels = jax.random.choice( + subkey, + self.num_classes, + shape=(self.batchsize, self.max_num_boxes), + replace=True, + p=p) + # Ensure last target is dummy empty target. + tgt_labels = tgt_labels.at[:, -1].set(0) + onehot_tgt_labels = jax.nn.one_hot(tgt_labels, self.num_classes) + + key, subkey = jax.random.split(key) + pred_logits = jax.random.normal( + subkey, shape=(self.batchsize, self.num_preds, self.num_classes)) + pred_probs = jax.nn.softmax(pred_logits, axis=-1) + + key, subkey = jax.random.split(key) + pred_bbox = sample_cxcywh_bbox( + subkey, batch_shape=(self.batchsize, self.num_preds)) + + key, subkey = jax.random.split(key) + tgt_bbox = sample_cxcywh_bbox( + subkey, batch_shape=(self.batchsize, self.max_num_boxes)) + + self.outputs = {'pred_probs': pred_probs, 'pred_boxes': pred_bbox} + self.targets = {'labels': tgt_labels, 'boxes': tgt_bbox} + self.onehot_targets = {'labels': onehot_tgt_labels, 'boxes': tgt_bbox} + self.cost_matrix, self.cost_n_cols = compute_cost( + tgt_bbox=tgt_bbox, + tgt_labels=tgt_labels, + out_bbox=pred_bbox, + out_prob=pred_probs, + bbox_loss_coef=1., + giou_loss_coef=1., + class_loss_coef=1., + target_is_onehot=False) + self.cost_matrix_one_hot, self.cost_n_cols_one_hot = compute_cost( + tgt_bbox=tgt_bbox, + tgt_labels=onehot_tgt_labels, + out_bbox=pred_bbox, + out_prob=pred_probs, + bbox_loss_coef=1., + giou_loss_coef=1., + class_loss_coef=1., + target_is_onehot=True) + + def test_cost_onehot_consistency(self): + """Checks cost matrix consistency for one-hot and index representations.""" + diff = jnp.max(jnp.abs(self.cost_matrix - self.cost_matrix_one_hot)) + self.assertLess(diff, EPS) + + @parameterized.named_parameters(*(MATCHER_FUNCTIONS.items())) + def test_matchers_identity(self, matcher_fn): + """Tests if column==row indices for matching non-empty targets to itself.""" + + # Note: you can only do this in the one hot case with targets + # otherwise shapes don't match up. + + # Only use targets with non-empty boxes, otherwise + # filtering messes up this test as it only filters the target labels + # not the labels of the predictions. + + tgt_labels = [] + for i in range(self.batchsize): + key = jax.random.PRNGKey(i) + tgt_labels.append(jax.random.choice( + key, + jnp.arange(1, self.num_classes), + shape=(self.max_num_boxes,), + replace=False, + p=None)) + tgt_labels = jnp.stack(tgt_labels) + # Ensure last target is dummy empty target. + tgt_labels = tgt_labels.at[:, -1].set(0) + onehot_tgt_labels = jax.nn.one_hot(tgt_labels, self.num_classes) + + onehot_targets = self.onehot_targets.copy() + onehot_targets['labels'] = onehot_tgt_labels + + outputs = { + 'pred_probs': onehot_tgt_labels, + 'pred_boxes': onehot_targets['boxes'] + } + + cost, _ = compute_cost( + tgt_labels=tgt_labels, + out_prob=outputs['pred_probs'], + tgt_bbox=outputs['pred_boxes'], + out_bbox=outputs['pred_boxes'], + bbox_loss_coef=1., + giou_loss_coef=1., + class_loss_coef=1., + target_is_onehot=False) + + indices = matcher_fn(cost) + self.assertEqual(indices.shape, (cost.shape[0], 2, cost.shape[1])) + for row, col in indices: + self.assertTrue(jnp.array_equal(row, col)) + + @parameterized.named_parameters( + *[(name, MATCHER_FUNCTIONS[name]) for name in EXACT_MATCHERS]) + def test_cost_matches_scipy(self, matcher_fn): + """Can recover the matching returned by Scipy?""" + sp_ind = np.array(list(map(lambda x: tuple(sciopt.linear_sum_assignment(x)), + self.cost_matrix))) + ind = matcher_fn(self.cost_matrix) + + for i, ((sp_row, sp_col), (row, col)) in enumerate(zip(sp_ind, ind)): + sp_cost = self.cost_matrix[i, sp_row, sp_col].sum() + cost = self.cost_matrix[i, row, col].sum() + self.assertAlmostEqual(sp_cost, cost, places=4) + + @parameterized.named_parameters( + *[(name, MATCHER_FUNCTIONS[name]) for name in RECT_MATCHERS]) + def test_cost_matches_scipy_rect_n_bigger_m(self, matcher_fn): + """Can recover the matching returned by Scipy for m > n matrices?""" + # Test where n > m. + cost_matrix = self.cost_matrix[:, :, self.cost_matrix.shape[2] // 2:] + sp_ind = np.array(list(map(lambda x: tuple(sciopt.linear_sum_assignment(x)), + cost_matrix))) + ind = matcher_fn(cost_matrix) + + for i, ((sp_row, sp_col), (row, col)) in enumerate(zip(sp_ind, ind)): + sp_cost = cost_matrix[i, sp_row, sp_col].sum() + cost = cost_matrix[i, row, col].sum() + self.assertAlmostEqual(sp_cost, cost, places=4) + + @parameterized.named_parameters( + *[(name, MATCHER_FUNCTIONS[name]) for name in RECT_MATCHERS]) + def test_cost_matches_scipy_rect_n_smaller_m(self, matcher_fn): + """Can recover the matching returned by Scipy for n < m matrices?""" + # Test where n < m. + cost_matrix = self.cost_matrix[:, self.cost_matrix.shape[1] // 2:, :] + sp_ind = np.array(list(map(lambda x: tuple(sciopt.linear_sum_assignment(x)), + cost_matrix))) + ind = matcher_fn(cost_matrix) + + for i, ((sp_row, sp_col), (row, col)) in enumerate(zip(sp_ind, ind)): + sp_cost = cost_matrix[i, sp_row, sp_col].sum() + cost = cost_matrix[i, row, col].sum() + self.assertAlmostEqual(sp_cost, cost, places=4) + + @parameterized.named_parameters( + *[(name, MATCHER_FUNCTIONS[name]) for name in CPU_MATCHERS]) + def test_slicer_full(self, matcher_fn): + """For a full matrix the slicer must return the same matching.""" + ind_full = matcher_fn(self.cost_matrix) + ind_slicer = matchers.slicer(self.cost_matrix, self.cost_n_cols, matcher_fn) + + for i, ((full_row, full_col), (row, col)) in enumerate( + zip(ind_full, ind_slicer)): + full_cost = self.cost_matrix[i, full_row, full_col].sum() + cost = self.cost_matrix[i, row, col].sum() + self.assertAlmostEqual(full_cost, cost, places=4) + + @parameterized.named_parameters( + *[(name, MATCHER_FUNCTIONS[name]) for name in CPU_MATCHERS]) + def test_slicer(self, matcher_fn): + """Simulate padding and ensure that slicer can deal with it.""" + n_cols = self.cost_n_cols // 2 + mask = np.concatenate((np.ones((1, n_cols[0]), dtype=bool), + np.zeros( + (1, self.num_preds - n_cols[0]), dtype=bool)), + axis=1) + cost = mask * self.cost_matrix + (1. - mask) * 5 + + ind_full = matcher_fn(cost) + ind_slicer = matchers.slicer(cost, n_cols, matcher_fn) + + for i, ((full_row, full_col), (slicer_row, slicer_col)) in enumerate( + zip(ind_full, ind_slicer)): + full_cost = cost[i, full_row, full_col].sum() + slicer_cost = cost[i, slicer_row, slicer_col].sum() + self.assertAlmostEqual(full_cost, slicer_cost, places=3) + + @parameterized.named_parameters( + *[(name, MATCHER_FUNCTIONS[name]) for name in CPU_MATCHERS]) + def test_slicer_implicit(self, matcher_fn): + """Ensure that implicit use of slicer works.""" + n_cols = self.cost_n_cols // 2 + mask = np.concatenate((np.ones((1, n_cols[0]), dtype=bool), + np.zeros( + (1, self.num_preds - n_cols[0]), dtype=bool)), + axis=1) + cost = mask * self.cost_matrix + (1. - mask) * 5 + + ind_slicer_impl = matcher_fn(cost, n_cols=n_cols) + ind_slicer = matchers.slicer(cost, n_cols, matcher_fn) + + for i, ((impl_row, impl_col), (slicer_row, slicer_col)) in enumerate( + zip(ind_slicer_impl, ind_slicer)): + impl_cost = cost[i, impl_row, impl_col].sum() + slicer_cost = cost[i, slicer_row, slicer_col].sum() + self.assertAlmostEqual(impl_cost, slicer_cost, places=3) + + @parameterized.named_parameters( + *[(name, MATCHER_FUNCTIONS[name]) for name in RECT_MATCHERS]) + def test_manual_cost_matrix(self, matcher_fn): + """Test case from bencaine@ for repro.""" + cost_matrix = jnp.asarray([ + # We expect (0, 0) and (1, 1) to be matched. + [[-100, 100], + [100, -100], + [100, 100]], + # We expect (0, 0) and (2, 1) to be matched. + [[-100, 100], + [100, 100], + [100, -100]]], dtype=jnp.float32) + + sp_ind = np.array(list(map(lambda x: tuple(sciopt.linear_sum_assignment(x)), + cost_matrix))) + ind = matcher_fn(cost_matrix) + for i, ((sp_row, sp_col), (row, col)) in enumerate(zip(sp_ind, ind)): + sp_cost = cost_matrix[i, sp_row, sp_col].sum() + cost = cost_matrix[i, row, col].sum() + self.assertAlmostEqual(sp_cost, cost, places=4) + + class TestLazyMatcher(parameterized.TestCase): + """Test lazy_matcher function.""" + + @parameterized.named_parameters(('nbxy79', 7, 9), ('nbxy22', 2, 2)) + def test_lazy_matcher(self, nbx, nby): + """Test across varying number of boxes.""" + + cost_matrix = jnp.zeros((3, nbx, nby), dtype=jnp.float32) + + # Lazy matcher always returns jnp.array([0, 1, 2, ..., min-boxes]). + expected_indices_per_row = jnp.array(list(range(min(nbx, nby)))) + + indices = matchers.lazy_matcher(cost_matrix) + self.assertEqual(indices.shape, (3, 2, min(nbx, nby))) + for idx in indices: # Iterate over elements in batch. + src, tgt = idx + self.assertTrue(jnp.array_equal(src, expected_indices_per_row)) + self.assertTrue(jnp.array_equal(tgt, expected_indices_per_row)) + + +if __name__ == '__main__': + jax.config.update('jax_threefry_partitionable', False) + absltest.main() diff --git a/scenic/model_lib/models.py b/scenic/model_lib/models.py new file mode 100644 index 0000000000000000000000000000000000000000..cd4780c756cd241660ff5001e5094d3a51edefdf --- /dev/null +++ b/scenic/model_lib/models.py @@ -0,0 +1,84 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Registry for the available models we can train.""" + +from typing import Type + +from scenic.model_lib.base_models import base_model +from scenic.projects.baselines import axial_resnet +from scenic.projects.baselines import bit_resnet +from scenic.projects.baselines import fully_connected +from scenic.projects.baselines import hybrid_vit +from scenic.projects.baselines import mixer +from scenic.projects.baselines import resnet +from scenic.projects.baselines import simple_cnn +from scenic.projects.baselines import unet +from scenic.projects.baselines import vit + +ALL_MODELS = {} + +CLASSIFICATION_MODELS = { + 'fully_connected_classification': + fully_connected.FullyConnectedClassificationModel, + 'simple_cnn_classification': + simple_cnn.SimpleCNNClassificationModel, + 'axial_resnet_multilabel_classification': + axial_resnet.AxialResNetMultiLabelClassificationModel, + 'resnet_classification': + resnet.ResNetClassificationModel, + 'resnet_multilabel_classification': + resnet.ResNetMultiLabelClassificationModel, + 'bit_resnet_classification': + bit_resnet.BitResNetClassificationModel, + 'bit_resnet_multilabel_classification': + bit_resnet.BitResNetMultiLabelClassificationModel, + 'vit_multilabel_classification': + vit.ViTMultiLabelClassificationModel, + 'hybrid_vit_multilabel_classification': + hybrid_vit.HybridViTMultiLabelClassificationModel, + 'mixer_multilabel_classification': + mixer.MixerMultiLabelClassificationModel, +} + +SEGMENTATION_MODELS = { + 'simple_cnn_segmentation': simple_cnn.SimpleCNNSegmentationModel, + 'unet_segmentation': unet.UNetSegmentationModel, +} + + +ALL_MODELS.update(CLASSIFICATION_MODELS) +ALL_MODELS.update(SEGMENTATION_MODELS) + + +def get_model_cls(model_name: str) -> Type[base_model.BaseModel]: + """Get the corresponding model class based on the model string. + + API: + ``` + model_builder= get_model_cls('fully_connected') + model = model_builder(config, ...) + ``` + + Args: + model_name: str; Name of the model, e.g. 'fully_connected'. + + Returns: + The model architecture (a flax Model) along with its default config. + Raises: + ValueError if model_name is unrecognized. + """ + if model_name not in ALL_MODELS.keys(): + raise ValueError('Unrecognized model: {}'.format(model_name)) + return ALL_MODELS[model_name] diff --git a/scenic/model_lib/tests/__init__.py b/scenic/model_lib/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/model_lib/tests/test_models.py b/scenic/model_lib/tests/test_models.py new file mode 100644 index 0000000000000000000000000000000000000000..a99318a4a10335602cd0c84be73a42bc8c3370e0 --- /dev/null +++ b/scenic/model_lib/tests/test_models.py @@ -0,0 +1,138 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for models.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +import flax +from jax.flatten_util import ravel_pytree +import jax.numpy as jnp +import jax.tree_util +import numpy as np +from scenic.model_lib import models + +NUM_OUTPUTS = 5 +INPUT_SHAPE = (10, 32, 32, 3) + + +# Automatically test all defined classification models. +CLASSIFICATION_KEYS = [ + ('test_{}'.format(m), m) for m in models.CLASSIFICATION_MODELS.keys() +] + +# Automatically test all defined segmentation models. +SEGMENTATION_KEYS = [ + ('test_{}'.format(m), m) for m in models.SEGMENTATION_MODELS.keys() +] + + +class ModelsTest(parameterized.TestCase): + """Tests for all models.""" + + @parameterized.named_parameters(*CLASSIFICATION_KEYS) + def test_classification_models(self, model_name): + """Test forward pass of the classification models.""" + + model_cls = models.get_model_cls(model_name) + rng = jax.random.PRNGKey(0) + model = model_cls( + config=None, + dataset_meta_data={ + 'num_classes': NUM_OUTPUTS, + 'target_is_onehot': False, + }) + + model_input_dtype = getattr( + jnp, model.config.get('data_dtype_str', 'float32')) + + xs = jnp.array(np.random.normal(loc=0.0, scale=10.0, + size=INPUT_SHAPE)).astype(model_input_dtype) + + rng, init_rng = jax.random.split(rng) + dummy_input = jnp.zeros(INPUT_SHAPE, model_input_dtype) + init_model_state, init_params = flax.core.pop(model.flax_model.init( + init_rng, dummy_input, train=False, debug=False), 'params') + + # Check that the forward pass works with mutated model_state. + rng, dropout_rng = jax.random.split(rng) + variables = {'params': init_params, **init_model_state} + outputs, new_model_state = model.flax_model.apply( + variables, + xs, + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=False) + self.assertEqual(outputs.shape, (INPUT_SHAPE[0], NUM_OUTPUTS)) + + # If it's a batch norm model check the batch stats changed. + if init_model_state: + bflat, _ = ravel_pytree(init_model_state) + new_bflat, _ = ravel_pytree(new_model_state) + self.assertFalse(jnp.array_equal(bflat, new_bflat)) + + # Test batch_norm in inference mode. + outputs = model.flax_model.apply( + variables, xs, mutable=False, train=False, debug=False) + self.assertEqual(outputs.shape, (INPUT_SHAPE[0], NUM_OUTPUTS)) + + @parameterized.named_parameters(*SEGMENTATION_KEYS) + def test_segmentation_models(self, model_name): + """Test forward pass of the segmentation models.""" + + model_cls = models.get_model_cls(model_name) + rng = jax.random.PRNGKey(0) + model = model_cls( + config=None, + dataset_meta_data={ + 'num_classes': NUM_OUTPUTS, + 'target_is_onehot': False, + }) + + model_input_dtype = model.config.get('default_input_dtype', jnp.float32) + xs = jnp.array(np.random.normal(loc=0.0, scale=10.0, + size=INPUT_SHAPE)).astype(model_input_dtype) + + rng, init_rng = jax.random.split(rng) + dummy_input = jnp.zeros(INPUT_SHAPE, model_input_dtype) + init_model_state, init_params = flax.core.pop(model.flax_model.init( + init_rng, dummy_input, train=False, debug=False), 'params') + + # Check that the forward pass works with mutated model_state. + rng, dropout_rng = jax.random.split(rng) + variables = {'params': init_params, **init_model_state} + outputs, new_model_state = model.flax_model.apply( + variables, + xs, + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=False) + self.assertEqual(outputs.shape, INPUT_SHAPE[:3] + (NUM_OUTPUTS,)) + + # If it's a batch norm model check the batch stats changed. + if init_model_state: + bflat, _ = ravel_pytree(init_model_state) + new_bflat, _ = ravel_pytree(new_model_state) + self.assertFalse(jnp.array_equal(bflat, new_bflat)) + + # Test batch_norm in inference mode. + outputs = model.flax_model.apply( + variables, xs, mutable=False, train=False, debug=False) + self.assertEqual(outputs.shape, INPUT_SHAPE[:3] + (NUM_OUTPUTS,)) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/README.md b/scenic/projects/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d5e06c0f2f0a654b7c83d8f43e54d31227831bbf --- /dev/null +++ b/scenic/projects/README.md @@ -0,0 +1,248 @@ +## Contents +* [List of projects hosted in Scenic](#list-of-projects-hosted-in-scenic) +* [Scenic projects](#scenic-projects) + + +## List of projects hosted in Scenic + +* [AdaTape](adatape) + + > AdaTape is an adaptive computation transformer with elastic input sequence. + +* [AdversarialTraining](adversarialtraining) + + > Adversarial training is an implementation of modern forms of adversarial + > training that achieved state-of-the-art robustness results on image + > classifications. This includes [AdvProp](https://arxiv.org/abs/1911.09665) + > and (Pyramid Adversarial Training Improves ViT Performance)[https://arxiv.org/abs/2111.15121]. + +* [AVATAR](avatar) + + > [AVATAR](https://gabeur.github.io/avatar-visspeech) is a + > sequence-to-sequence AudioVisual ASR TrAnsformeR which is + > trained end-to-end from spectrograms and full-frame RGB for the task of + > audiovisual speech recognition (AV-ASR). + +* [Audiovisual Masked Autoencoders](av-mae) + + > Audiovisual Masked Autoencoders performs self-supervised learning on + > multiple modalities (audio and video) to improve representation learning + > for both unimodal and multimodal downstream tasks. Details can be found + > in the [paper](https://arxiv.org/abs/2212.05922). + +* [Boundary Attention](boundary_attention) + + > Boundary Attention is differentiable bottom-up model for detecting + > boundaries in high noise at any resolution. It uses a form of local + > attention to infer boundaries that include contours, corners and + > junctions, all without rasterization. Details and a link to + > the paper can be found on its [website](https://boundaryattention.github.io/). + +* [ViViT](vivit) + + > ViViT is a family of pure-transformer based models for video + > classification that achieved state-of-the-art results. + > Details can be found in the [paper](https://arxiv.org/abs/2103.15691). + +* [Tasseo](tasseo) + + > Tasseo is a project that uses transformer based models for aberration + > detection from chromosome karyotype images. + +* [TokenLearner](token_learner) + + > TokenLearner proposes dynamic tokenization of images and videos for faster + > and more accurate video/image processing tasks. More can be found in + > the [paper](https://arxiv.org/abs/2106.11297). + +* [Token Turing Machines](token_turing) + + > Token Turing Machines are a sequential, autoregressive transformer + > architecture with external memory. More can be found in the + > [paper](https://arxiv.org/abs/2106.11297). + +* [FastViT](fast_vit) + + > FastViT is a project that aims at exploring ideas around making ViT faster + > via using [efficient transformers](https://arxiv.org/abs/2009.06732), in + > particular on higher resolution inputs (more tokens and thus longer + > sequences). + +* [Omninet](omninet) + + > Omninet is a transformer model with + > [omni-directional representations](https://arxiv.org/abs/2103.01075). + +* [CLAY](layout_denoise) + + > CLAY is a Transformer-based pipeline for mobile UI layout denoising. Read + > more about this project in CLAY [paper](https://arxiv.org/abs/2201.04100). + +* [LOCA](loca) + + > LOCA ([paper](https://arxiv.org/abs/2212.02400)) is a self-supervised + > method to train spatially-aware vision transformer features. + +* [MatViT](matvit) + > MatViT is a MatFormer ([paper](https://arxiv.org/abs/2310.07707)) based + > nested ViT architecture designed to offer elasticity in a variety of + > deployment constraints, where each Feed Forward Network (FFN) block of a + > MatViT model is jointly optimized with a few nested smaller FFN blocks. + +* [MBT](mbt) + + > MBT presents a transformer based architecture that uses "fusion + > bottlenecks" for modality fusion at multiple layers. + > Details can be found in the [paper](https://arxiv.org/abs/2201.04100). + +* [MTV](mtv) + + > MTV presents a state-of-the-art transformer based architecture for video + > classification. MTV consists of separate encoders to represent different + > views of the input video with lateral connections and a global encoder to + > fuse information across views. More details are in the + > [paper](https://arxiv.org/abs/2201.04288). + +* [OWL-ViT](owl_vit) + + > OWL-ViT is an open-vocabulary object detector that given an image and a + > free-text query, it finds objects matching that query in the image. It can + > also do one-shot object detection, i.e. detect objects based on a single + > example image. More details are in the + > [paper](https://arxiv.org/abs/2205.06230). + +* [NCR](ncr) + + > NCR is a regularization method which encourages the network to make + > similar predictions for similar vectors in the feature space. + > Details can be found in the [paper](https://arxiv.org/abs/2202.02200), + > where we used this method to learn with noisy labels. + +* [PCT](pointcloud) + + > Point Cloud Transformer (PCT) is a Transformer-based model for + > performing inference (classification/segmentation) for point cloud data. + > Details can be found in the [paper](https://arxiv.org/abs/2012.09688). + +* [PolyViT](polyvit) + + > PolyViT is a simple and effective model for co-training a single + > transformer backbone on multiple modalities and tasks, resulting in a + > parameter-efficient model that performs as well or better than models + > trained on single modalities or tasks. + > Details can be found in the [paper](https://arxiv.org/abs/2111.12993). + +* [T5](t5) + + > Wrappers of T5 models in [t5x](https://github.com/google-research/t5x). + +* [Vid2Seq](vid2seq) + + > Vid2Seq is a single-stage dense video captioning model, pre-trained on + > unlabelled narrated videos. + > Details can be found in the [paper](https://arxiv.org/abs/2302.14115). + +* [ObjectViViT](objectvivit) + + > ObjectViViT uses object detection results from external object detectors + > to help action recognition. + > Details can be found in the [paper](https://openaccess.thecvf.com/content/CVPR2023/html/Zhou_How_Can_Objects_Help_Action_Recognition_CVPR_2023_paper.html). + +* [Verbs in action](verbs_in_action) + + > Verbs in action ([paper](https://arxiv.org/abs/2304.06708)) uses LLMs to + > create hard negative pairs for contrastive learning, in order to improve + > the verb understanding of video-text models based on CLIP. + +* [UniVRD](univrd) + + > UniVRD is a bottom-up visual relationship detector built upon pre-trained + > vision and language models. + > Details can be found in the [paper](https://arxiv.org/abs/2303.08998). + +* [UnLoc](unloc) + + > UnLoc proposes a unified architecture for video localization tasks, + > e.g., Temporal Action Localization, Moment Retrieval, and Action + > Segmentation. More details can be found in the [paper](https://openaccess.thecvf.com/content/ICCV2023/papers/Yan_UnLoc_A_Unified_Framework_for_Video_Localization_Tasks_ICCV_2023_paper.pdf). + +* [REVEAL](knowledge_visual_language) + + > REVEAL is an Retrieval-Augmented Visual Language Model that + > learns to retrieve world knowledge from a diverse set of multimodal + > knowledge sources, through end-to-end pre-training. + > Details can be found in the [paper](https://arxiv.org/abs/2212.05221). + + * [PixelLLM](pixel_llm) + > PixelLLM equips large language models with localization capability. + > Details can be found in the [paper](https://arxiv.org/abs/2312.09237). + +* [GER-ALD](gerald) + + > GER-ALD is a novel generative framework for web-scale visual entity + > recognition. We represent each entity by a compact, discriminative and + > semantic code that a generative model learns to auto-regressively decode. + > Details can be found in the [paper](https://arxiv.org/abs/2403.02041). + +* [Streaming Dense Video Captioning](streaming_dvc) + + > Streaming DVC is a framework for dense captioning of long videos. + > Details can be found in the [paper](https://arxiv.org/abs/2404.01297). + +* [Dense Video Object Captioning](densevoc) + + > Dense VOC is an end-to-end model for joint object detection, tracking, + > and captioning in videos. + > Details can be found in the [paper](https://arxiv.org/abs/2306.11729). + + +## Scenic projects +A typical project consists of models, trainers, configs, a runner, and some +utility functions developed for the project. + +### Models +Models are entities that define the network architecture, loss function, and +metrics. Network architectures are built using Flax `nn.Modules`. Common loss +functions and metrics can be included via a +[Base Model](../model_lib/README.md#base_model), or within the project +itself for more specific use-cases. + +To be accessible by the trainer, a model newly-defined by a project needs to be +registered *within a specific project*. As an exception, the baseline models +are registered directly in `model_lib.models`. + +### Trainers +Trainers implement the training and evaluation loops of the model. There are +already standard trainers that are provided in Scenic for classification, +segmentation, and adaptation (located in the `train_lib` module). +These trainers are directly registered in `train_lib_deprecated/trainers` and +given the careful optimization of these trainers for fast and efficient training +on accelerators (in particular TPUs), they can be forked by projects for further +customization. Projects need to register the new trainers they define within +their project, or they can simply use the standard Scenic trainers when no +modification is needed. + +### Configs +Config files are used to configure experiments. They define (hyper-)parameters +for the selected model, trainer, and dataset (e.g. number of layers, frequency +of logging, etc). + +### Binaries +Binaries bind models, trainers, and datasets together based on the config and +start the training. Usually, this is a `main.py` within the project that also +contains the registry for the project specific models and trainers. Note that +baselines make use of Scenic's default binary `main.py`. + +### Registries +There are three types of objects that can be registered in Scenic: +`model`, `trainer`, and `dataset`. A registry could be any simple data structure +that maps a string name to an object, for instance, a python dictionary. + +Scenic defines a dataset registry that uses ad-hoc importing to lazy-load +the code for the input pipeline of a requested dataset. This registry lives in +`dataset_lib/datasets.py`. There are common trainers and models that are +registered in `train_lib_deprecated/trainers.py` and `model_lib/models.py`. However, +a project can define its own dataset, model, and trainer and make a small +registry for these objects within the project, e.g. in the project's `main.py` +so that the right model, trainer, and dataset are selectable using the +configs specified in the config file. diff --git a/scenic/projects/__init__.py b/scenic/projects/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/__pycache__/__init__.cpython-310.pyc b/scenic/projects/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7c18cebbd5ffe6719be508f8bebc2a930462395 Binary files /dev/null and b/scenic/projects/__pycache__/__init__.cpython-310.pyc differ diff --git a/scenic/projects/__pycache__/__init__.cpython-311.pyc b/scenic/projects/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e6c8d1cf815aed0e4fc5bcca75b0b9560ae234f5 Binary files /dev/null and b/scenic/projects/__pycache__/__init__.cpython-311.pyc differ diff --git a/scenic/projects/__pycache__/__init__.cpython-312.pyc b/scenic/projects/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..34cd38110a64cb950ccc113a8aa6ad9fdc92e1ba Binary files /dev/null and b/scenic/projects/__pycache__/__init__.cpython-312.pyc differ diff --git a/scenic/projects/adatape/README.md b/scenic/projects/adatape/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d26f4b7cfa51dbf34185c502d676a94363450386 --- /dev/null +++ b/scenic/projects/adatape/README.md @@ -0,0 +1,25 @@ +# AdaTape + +![Adaptive Computation with Elastic Input Sequence](fig/adatape_overview.png) + +This repo is the implementation of [AdaTape paper](URL) in JAX. +AdaTape is a strategy that enables dynamic computation in neural networks +via adaptive tape tokens. As shown in the figure, AdaTape employs an elastic +input sequence be equipping an existing architecture with a dynamic read and +write tape. For different samples, we pick a variable number of different +tokens from the tape bank. The tape bank can be driven from input,e.g., by +extracting some extra fine-grained information or it can be a set of trainable +vectors. The Adaptive Tape Reader is used to recursively select different +sequences of tape tokens, with variable length, for different inputs. These +token are then simply appended to inputs and fed to the transformer encoder. + +## Reference +If you use AdaTape, please cite the paper. +``` +@inproceedings{xue2023adaptive, + title={Adaptive Computation with Elastic Input Sequence}, + author={Xue, Fuzhao and Likhosherstov, Valerii and Arnab, Anurag and Houlsby, Neil and Dehghani, Mostafa and You, Yang}, + booktitle={International Conference on Machine Learning}, + year={2023} +} +``` diff --git a/scenic/projects/adatape/__init__.py b/scenic/projects/adatape/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/adatape/adatape_vit/__init__.py b/scenic/projects/adatape/adatape_vit/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/adatape/adatape_vit/adatape_classify_trainer.py b/scenic/projects/adatape/adatape_vit/adatape_classify_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..e48566023654ef85aec815cc272acad6476caa62 --- /dev/null +++ b/scenic/projects/adatape/adatape_vit/adatape_classify_trainer.py @@ -0,0 +1,427 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script.""" + +import functools +from typing import Any, Callable, Dict, Tuple, Optional, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[ + [jnp.ndarray, Batch, Optional[jnp.ndarray], Any], float] +LrFn = Callable[[jnp.ndarray], jnp.ndarray] + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + lr_fn: LrFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, + Any]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, params, and optimizer. The buffer of this argument can + be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + lr_fn: The learning rate fn used for the logging the learning rate. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training and computed metrics and some training logs. + """ + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + rng=mixup_rng) + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + (logits, auxiliary_outputs), new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params'], auxiliary_outputs) + return loss, (new_model_state, logits, auxiliary_outputs) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (train_cost, compute_outputs), grad = compute_gradient_fn(train_state.params) + (new_model_state, logits, auxiliary_outputs) = compute_outputs + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm') is not None: + grad = clip_grads(grad, config.max_grad_norm) + + updates, new_opt_state = train_state.tx.update(grad, train_state.opt_state, + train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)])) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + # TODO(dehghani): Can we get this from the optimizer instead? + training_logs['learning_rate'] = lr_fn(train_state.global_step) + + # Logging the average sequence length we are using + if config.get('model.ac_config.dynamic_tape_length') is not None: + # Logging the sequence length + input_masks = auxiliary_outputs[0] + input_len = jnp.sum(input_masks, axis=-1) + avg_input_len = jnp.mean(input_len) + training_logs['sequence length'] = avg_input_len + # To check whether all examples are using the same sequence length, + # we write the variance of input_len into training_logs. + training_logs['sequence length var'] = jnp.var(input_len) + + metrics = metrics_fn(logits, batch) + + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + + return new_train_state, metrics, training_logs + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], jnp.ndarray]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, params and optimizer state. The buffer of + this argument can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and logits. + """ + variables = {'params': train_state.params, **train_state.model_state} + logits, _ = flax_model.apply( + variables, batch['inputs'], train=False, mutable=False, debug=debug) + metrics = metrics_fn(logits, batch) + return metrics, logits + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_state that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params=params) + # We jit this, such that the arrays that are created on the same device as the + # input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + rng, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + # Replicate the optimizer, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + lr_fn=lr_fn, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + extra_training_logs.append(t_logs) + for h in hooks: + h(step) + # Below are once-in-a-while ops -> pause. + ###################### LOG TRAIN SUMMARY ######################## + if ((step % log_summary_steps == 1) or (step == total_steps) or + (lead_host and chrono.warmup)): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + # train_metrics is list of a dictionaries of metrics, where the shape of + # the metrics[key] is [n_local_devices]. However, because metric functions + # have a psum, we have already summed across the whole sharded batch, and + # what's returned is n_local_devices copies of the same summed metric. + # So we do unreplicate and fetch them to host using `unreplicate_and_get`. + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_training_logs), + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + eval_metrics = [] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + for _ in range(steps_per_eval): + eval_batch = next(dataset.valid_iter) + e_metrics, _ = eval_step_pmapped(train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + eval_summary = train_utils.log_eval_summary( + step=step, eval_metrics=eval_metrics, writer=writer) + writer.flush() + del eval_metrics + chrono.resume() + ##################### CHECKPOINTING ################### + if ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + train_utils.save_checkpoint(workdir, unrep_train_state) + del unrep_train_state + chrono.resume() # Un-pause now. + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/adatape/adatape_vit/adatape_trainer.py b/scenic/projects/adatape/adatape_vit/adatape_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..ea4ebd5f596edb4e071b794415d48cab8c6a3eb7 --- /dev/null +++ b/scenic/projects/adatape/adatape_vit/adatape_trainer.py @@ -0,0 +1,667 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training script with transfer learning utilities.""" + +import functools +from typing import Any, Callable, Dict, Iterator, Tuple, Optional, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.common_lib import video_utils +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils +from scenic.train_lib.transfer import fewshot_utils +from scenic.train_lib.transfer import linear_probe_utils + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[ + [jnp.ndarray, Batch, Optional[jnp.ndarray], Any], float] +LrFn = Callable[[jnp.ndarray], jnp.ndarray] + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + metrics_fn: MetricFn, + lr_fn: LrFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, + Any]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, params, and optimizer. The buffer of this argument can + be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + lr_fn: The learning rate fn used for the logging the learning rate. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training and computed metrics for logging. + """ + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + rng=mixup_rng) + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + (logits, auxiliary_outputs), new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params'], auxiliary_outputs) + return loss, (new_model_state, logits, auxiliary_outputs) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (train_cost, compute_outputs), grad = compute_gradient_fn(train_state.params) + (new_model_state, logits, auxiliary_outputs) = compute_outputs + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm') is not None: + grad = clip_grads(grad, config.max_grad_norm) + + updates, new_opt_state = train_state.tx.update(grad, train_state.opt_state, + train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)])) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + training_logs['learning_rate'] = lr_fn(train_state.global_step) + + # Logging the average sequence length we are using + if config.get('model.ac_config.dynamic_tape_length') is not None: + # Logging the sequence length + input_masks = auxiliary_outputs[0] + input_len = jnp.sum(input_masks, axis=-1) + avg_input_len = jnp.mean(input_len) + training_logs['sequence length'] = avg_input_len + # To check whether all examples are using the same sequence length, + # we write the variance of input_len into training_logs. + training_logs['sequence length var'] = jnp.var(input_len) + loss_atr = auxiliary_outputs[1] + training_logs['loss_atr'] = jnp.mean(loss_atr) + + metrics = metrics_fn(logits, batch) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + + return new_train_state, metrics, training_logs + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], jnp.ndarray]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, params and optimizer state. The buffer of + this argument can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and logits. + """ + variables = {'params': train_state.params, **train_state.model_state} + logits, _ = flax_model.apply( + variables, batch['inputs'], train=False, mutable=False, debug=debug) + metrics = metrics_fn(logits, batch) + return metrics, logits + + +def representation_fn( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + representation_layer: str, + gather_to_host: bool = True +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Feeds the inputs to the model and returns their representations. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data from the dataset. + flax_model: A Flax model. + representation_layer: The name of the layer to use as the representation. + gather_to_host: Whether to gather results from all devices to the host, + rather than leaving them distributed. + + Returns: + Representation learned by the model for the given inputs and the labels and + masks. If `gather_to_host` is True, these are collected from all hosts. + """ + variables = {'params': train_state.params, **train_state.model_state} + + representation_layer_parts = representation_layer.split('/') + filter_rep = lambda mdl, _: mdl.name == representation_layer_parts[-1] + _, model_state = flax_model.apply( + variables, + batch['inputs'], + train=False, + capture_intermediates=filter_rep, + mutable=['intermediates'], + debug=False) + if 'intermediates' not in model_state: + raise ValueError(f'Layer with name "{representation_layer}"' + ' does not exist in your model.') + + representation = model_state['intermediates'] + for rep_layer in representation_layer_parts: + if rep_layer: + representation = representation[rep_layer] + representation = representation['__call__'][0] + if gather_to_host: + representation = jax.lax.all_gather(representation, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return representation, batch['label'], batch['batch_mask'] + + +def representation_fn_video( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + config: ml_collections.ConfigDict, + gather_to_host: bool = True, +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Feeds the video inputs to the model and returns their representations. + + Video representations are obtained by temporally average-pooling per-frame + representations from the input video clip. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, params, and optimizer. The buffer of this + argument can be donated to the computation. + batch: A single batch of data from the video dataset. + flax_model: A Flax model. + config: Configurations of the experiment. + gather_to_host: Whether to gather results from all devices to the host, + rather than leaving them distributed. + + Returns: + Representation learned by the model for the given inputs and the labels and + masks. If `gather_to_host` is True, these are collected from all hosts. + The shape of the returned tensors when `gather_to_host` is False are: + representation: `[num_devices, global_batch, features]`. + labels: `[num_devices, global_batch]`. + mask: `[num_devices, global_batch]`. + If `gather_to_host` is True then each shape is prepended with + `[num_hosts,]` + """ + variables = {'params': train_state.params, **train_state.model_state} + + representation_layer = config.video_fewshot.representation_layer.split('/') + filter_rep = lambda mdl, _: mdl.name == representation_layer[-1] + + def get_representation(inputs, variables, training, capture_intermediates, + mutable, debug): + _, model_state = flax_model.apply( + variables, + inputs, + train=training, + capture_intermediates=capture_intermediates, + mutable=mutable, + debug=debug) + if 'intermediates' not in model_state: + raise ValueError( + f'Layer with name "{config.video_fewshot.representation_layer}"' + ' does not exist in your model.') + + representation = model_state['intermediates'] + for rep_layer in representation_layer: + if rep_layer: + representation = representation[rep_layer] + representation = representation['__call__'][0] + return representation + + # Get representations for each frame in the video sample. + if config.video_fewshot.get('n_sampled_frames'): + inputs = video_utils.sample_frames_uniformly( + batch['inputs'], config.video_fewshot.n_sampled_frames) + else: + inputs = batch['inputs'] + representation = jax.vmap( + functools.partial( + get_representation, + variables=variables, + training=False, + capture_intermediates=filter_rep, + mutable=['intermediates'], + debug=False), + in_axes=1, + out_axes=1, + axis_name='time')( + inputs) + # Average pooling of representations over time axis. + representation = jnp.mean(representation, axis=1) + if gather_to_host: + representation = jax.lax.all_gather(representation, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return representation, batch['label'], batch['batch_mask'] + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current global_step, + model_state, rng, and the optimizer), train_summary and eval_summary which + are dict of metrics (from the last evaluation and train metric logging + respectively). These outputs are used for regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params=params) + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + rng, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + if init_checkpoint_path is not None: + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + # Load params from the init_model. + train_state = model.init_from_train_state( # pytype: disable=attribute-error + train_state, restored_train_state, restored_model_cfg) + del restored_train_state + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + lr_fn=lr_fn, + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + if 'fewshot' in config: + representation_fn_fewshot = functools.partial( + representation_fn, + flax_model=model.flax_model, + representation_layer=config.fewshot.representation_layer) + fewshotter = fewshot_utils.FewShotEvaluator(representation_fn_fewshot, + config.fewshot) + + if 'video_fewshot' in config: + representation_fn_video_fewshot = functools.partial( + representation_fn_video, flax_model=model.flax_model, config=config) + video_fewshotter = fewshot_utils.FewShotEvaluatorVideo( + representation_fn_video_fewshot, config.video_fewshot) + + if 'linear_probe' in config: + representation_fn_linear_probe = functools.partial( + representation_fn, + flax_model=model.flax_model, + representation_layer=config.linear_probe.representation_layer, + gather_to_host=False) + rng, linear_probe_rng = jax.random.split(rng) + linear_probe = linear_probe_utils.LinearEvaluator( + representation_fn=representation_fn_linear_probe, + rng=linear_probe_rng, + linear_eval_config=config.linear_probe) + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + def evaluate(train_state: train_utils.TrainState, step: int, + valid_iter: Iterator[Batch], + num_valid_ex: int) -> Dict[str, Any]: + eval_summary = {} + if not isinstance(valid_iter, dict): # Only on validation set. + valid_iter, num_valid_ex = {'valid': valid_iter}, {'valid': num_valid_ex} + + for val_name, val_iter in valid_iter.items(): + num_ex = num_valid_ex[val_name] + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int(np.ceil(num_ex / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + eval_metrics = [] + for _ in range(steps_per_eval): + eval_batch = next(val_iter) + if dataset.meta_data['target_is_onehot']: # Which includes multi-hot. + # Ignore the entries with all zero label for evaluation. + eval_batch['batch_mask'] *= eval_batch['label'].max(axis=-1) + e_metrics, _ = eval_step_pmapped(train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + eval_summary.update( + train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + writer=writer, + prefix=val_name)) + del eval_metrics + writer.flush() + return eval_summary + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + # t_logs.update({'learning_rate': lr_fn(step)}) + extra_training_logs.append(t_logs) + + # Quick indication that training is happening. + logging.log_first_n(logging.INFO, 'Finished training step %d.', 5, step) + for h in hooks: + h(step) + + ############### LOG TRAIN SUMMARY ############### + if (step % log_summary_steps == 1) or (step + == total_steps) or chrono.warmup: + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_training_logs), + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summary = evaluate(train_state, step, dataset.valid_iter, + dataset.meta_data['num_eval_examples']) + chrono.resume() + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 1 and step > 1) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + train_utils.save_checkpoint(workdir, unrep_train_state) + del unrep_train_state + chrono.resume() # Un-pause now. + + ##################### FEWSHOT EVALUATION ############################ + if 'fewshot' in config: + # Compute few-shot on-the-fly evaluation. + if (step % config.fewshot.log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('fewshot'): + results = fewshotter.run_all(train_state, config.fewshot.datasets) + fewshotter.log_fewshot_summary( + writer=writer, step=step, results=results) + del results + writer.write_scalars(step, {'zz/epoch': step / steps_per_epoch}) + writer.flush() + chrono.resume() # Un-pause now. + + ########### FEWSHOT EVALUATION USING VIDEO DATASETS ############### + + if 'video_fewshot' in config: + # Compute few-shot on-the-fly evaluation using video dataset. + if ((step % config.video_fewshot.log_eval_steps == 1) or + step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('video_fewshot'): + results = video_fewshotter.run_all(train_state, + config.video_fewshot.datasets) + video_fewshotter.log_fewshot_summary( + writer=writer, step=step, results=results) + del results + writer.write_scalars(step, {'zz/epoch': step / steps_per_epoch}) + writer.flush() + chrono.resume() # Un-pause now. + + ##################### LINEAR-PROBE EVALUATION ########################## + if 'linear_probe' in config: + if (config.linear_probe.log_eval_steps > 0 and + step % config.linear_probe.log_eval_steps == 1) or (step + == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('linear_probe'): + linear_probe.run_all( + train_state, + config.linear_probe.datasets, + writer=writer, + repr_step=step) + writer.flush() + chrono.resume() # Un-pause now. + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/adatape/adatape_vit/adatape_vit.py b/scenic/projects/adatape/adatape_vit/adatape_vit.py new file mode 100644 index 0000000000000000000000000000000000000000..8e16e8a9750177886210663eac9d68681e562590 --- /dev/null +++ b/scenic/projects/adatape/adatape_vit/adatape_vit.py @@ -0,0 +1,401 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Vision Transformer with Adaptive Computation.""" + +from typing import Any, Optional + +from absl import logging +import flax +import flax.linen as nn +from flax.training import common_utils +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.common_lib import debug_utils +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils +from scenic.model_lib.base_models.multilabel_classification_model import MultiLabelClassificationModel +from scenic.model_lib.layers import nn_layers +from scenic.projects.adatape import layers as adatape_layers +from scenic.projects.baselines import vit + + +def ponder_loss_fn(loss_atr: jnp.ndarray, + weights: Optional[jnp.ndarray] = None) -> jnp.ndarray: + """Ponder Loss for UT. + + Args: + loss_atr: Input array of any shape. + weights: None or array of any shape. + + Returns: + loss: A scaler to regularize the ACT + """ + if weights is not None: + normalization = weights.sum() + 1e-8 + else: + normalization = np.prod(loss_atr.shape) + loss = jnp.sum(loss_atr) / normalization + return loss + + +class AdaTapeViT(nn.Module): + """AdaTape Vision Transformer model. + + Attributes: + num_classes: Number of output classes. + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + patches: Configuration of the patches extracted in the stem of the model. + ac_config: Configuration of the adaptive computation. + hidden_size: Size of the hidden state of the output of model's stem. if + None, we skip the extra projection + tanh activation at the end. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + dtype: JAX data type for activations. + """ + + num_classes: int + mlp_dim: int + num_layers: int + num_heads: int + patches: ml_collections.ConfigDict + ac_config: ml_collections.ConfigDict + hidden_size: int + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + classifier: str = 'gap' + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, debug: bool = False): + + fh, fw = self.patches.size + x_input = x + # Extracting patches and then embedding is in fact a single convolution. + x = nn.Conv( + self.hidden_size, (fh, fw), + strides=(fh, fw), + padding='VALID', + name='embedding')( + x) + n, h, w, c = x.shape + # We use linear projection (large stride CNN) to encode patches, only when + # we are using input-driven bank. + if self.ac_config.bank_type == 'input': + patch_bank_size = self.ac_config.patch_bank_size + bank = nn.Conv( + self.hidden_size, (patch_bank_size, patch_bank_size), + strides=(patch_bank_size, patch_bank_size), + padding='VALID', + name='embedding_bank')( + x_input) + _, bank_h, bank_w, _ = bank.shape + bank = jnp.reshape(bank, [n, bank_h * bank_w, c]) + bank = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name='posembed_input_bank')( + bank) + bank = nn.Dense(bank.shape[-1], name='pre_bank')(bank) + else: + bank = None + x = jnp.reshape(x, [n, h * w, c]) + if -1 in self.ac_config.get('add_tape_token_to_layers', []): + x = adatape_layers.AddTapeToken(ac_config=self.ac_config)( + x, bank, train=train) + + # If we want to add a class token, add it here. + if self.classifier == 'token': + cls = self.param('cls', nn.initializers.zeros, (1, 1, c), x.dtype) + cls = jnp.tile(cls, [n, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + + x = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name='posembed_input')( + x) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + x, aux_output = adatape_layers.AdaTapeEncoder( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + ac_config=self.ac_config, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=self.stochastic_depth, + dtype=self.dtype, + name='Transformer')( + x, bank, train=train) + + if self.classifier in ('token', '0'): + x = x[:, 0] + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=1) + + x = nn_layers.IdentityLayer(name='pre_logits')(x) + x = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x) + return x, aux_output + + +class AdaTapeParity(nn.Module): + """AdaTape Transformer model for Parity task. + + Attributes: + num_classes: Number of output classes. + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + patches: Configuration of the patches extracted in the stem of the model. + ac_config: Configuration of the adaptive computation. + hidden_size: Size of the hidden state of the output of model's stem. if + None, we skip the extra projection + tanh activation at the end. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + dtype: JAX data type for activations. + """ + + num_classes: int + mlp_dim: int + num_layers: int + num_heads: int + patches: ml_collections.ConfigDict + ac_config: ml_collections.ConfigDict + hidden_size: int + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + classifier: str = 'gap' + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, debug: bool = False): + + if self.ac_config.bank_type == 'input': + x_input = x + n, s, c = x.shape + x = jnp.reshape(x, [n, 1, s * c]) + x = nn.Dense(self.hidden_size, name='embedding')(x) + bank = nn.Dense(self.hidden_size, name='pre_bank')(x_input) + else: + raise NotImplementedError + + # If we want to add a class token, add it here. + if self.classifier == 'token': + cls = self.param('cls', nn.initializers.zeros, (1, 1, self.hidden_size), + x.dtype) + cls = jnp.tile(cls, [n, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + + x, aux_output = adatape_layers.AdaTapeEncoder( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + ac_config=self.ac_config, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=self.stochastic_depth, + dtype=self.dtype, + name='Transformer')( + x, bank, train=train) + + if self.classifier in ('token', '0'): + x = x[:, 0] + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=1) + + x = nn_layers.IdentityLayer(name='pre_logits')(x) + x = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x) + return x, aux_output + + +class AdaTapeMultiLabelClassificationModel(MultiLabelClassificationModel): + """AdaTape Transformer model for multi-label classification task.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + # For the parity task, we use AdaTapeParity as our model. + if self.config.model_name == 'adatape-parity': + return AdaTapeParity( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + patches=self.config.model.patches, + ac_config=self.config.model.ac_config, + hidden_size=self.config.model.hidden_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + stochastic_depth=self.config.model.get('stochastic_depth', 0.0), + dtype=model_dtype, + ) + else: + return AdaTapeViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + patches=self.config.model.patches, + ac_config=self.config.model.ac_config, + hidden_size=self.config.model.hidden_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + stochastic_depth=self.config.model.get('stochastic_depth', 0.0), + dtype=model_dtype, + ) + + def loss_function( + self, + logits: jnp.ndarray, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None, + auxiliary_outputs: Any = None, + ) -> float: + """Returns sigmoid cross entropy loss with an L2 penalty (and ponder loss) on the weights. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + auxiliary_outputs: Output of model auxiliary_outputs. + + Returns: + Total loss. + """ + weights = batch.get('batch_mask') + + if self.dataset_meta_data.get('target_is_onehot', False): + multihot_target = batch['label'] + else: + # This is to support running a multi-label classification model on + # single-label classification tasks + multihot_target = common_utils.onehot(batch['label'], logits.shape[-1]) + + sig_ce_loss = model_utils.weighted_sigmoid_cross_entropy( + logits, + multihot_target, + weights, + label_smoothing=self.config.get('label_smoothing')) + if self.config.get('l2_decay_factor') is None: + total_loss = sig_ce_loss + else: + l2_loss = model_utils.l2_regularization(model_params) + total_loss = sig_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + act_config = self.config.model.ac_config.get('dynamic_tape_length') + if (act_config + is not None) and (act_config.act_loss_weight > 0.0): + ponder_loss = ponder_loss_fn(auxiliary_outputs[1], weights) + total_loss += act_config.act_loss_weight * ponder_loss + return total_loss # pytype: disable=bad-return-type # jax-ndarray + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is writen to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return initialise_from_train_state(train_state, restored_train_state, + self.config, restored_model_cfg) + + +def initialise_from_train_state( + train_state: Any, restored_train_state: Any, + config: ml_collections.ConfigDict, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of a + pretrained model. + config: Configurations for the model being updated. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + del config + del restored_model_cfg + # Create restored parameters dict: + params = flax.core.unfreeze(train_state.optimizer.target) + params_dict = { + '/'.join([str(kk) + for kk in k]): v + for k, v in flax.traverse_util.flatten_dict(params).items() + } + # Create restored parameters dict: + restored_params = flax.core.unfreeze(restored_train_state.optimizer.target) + restored_params_dict = dict() + for key, value in flax.traverse_util.flatten_dict(restored_params).items(): + name = '/'.join([str(k) for k in key]) + restored_params_dict[name] = value + # Copy parameters over: + for pname, pvalue in restored_params_dict.items(): + if 'output_projection' in pname: + continue + elif 'pos_embedding' in pname: + # TODO(dehghani) add support for reshaping pos-embedding to longer seq + # (e.g., for high res finetuning.). + continue + elif pname in params_dict: + params_dict[pname] = pvalue + else: + logging.error("Restored key doesn't exist in the model: %s.", pname) + logging.info('Inspect missing keys from the restored params:\n%s', + params_dict.keys() - restored_params_dict.keys()) + logging.info('Inspect extra keys the the restored params:\n%s', + restored_params_dict.keys() - params_dict.keys()) + # Restore data format + splitkeys = {tuple(k.split('/')): v for k, v in params_dict.items()} + params = flax.traverse_util.unflatten_dict(splitkeys) + logging.info('Parameter summary after initialising from train state:') + debug_utils.log_param_shapes(params) + return train_state.replace( + optimizer=train_state.optimizer.replace(target=flax.core.freeze(params))) diff --git a/scenic/projects/adatape/adatape_vit/configs/imagenet_adatape_vit_config.py b/scenic/projects/adatape/adatape_vit/configs/imagenet_adatape_vit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..ab47d4b5da3852d909da17ea5851b04ba827acac --- /dev/null +++ b/scenic/projects/adatape/adatape_vit/configs/imagenet_adatape_vit_config.py @@ -0,0 +1,158 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for AdaTape on ImageNet. + + +""" +# pylint: enable=line-too-long + +import ml_collections + +_IMAGENET_TRAIN_SIZE = 1281167 +NUM_CLASSES = 1000 +VARIANT = 'S/16' + +HIDDEN_SIZE = {'Ti': 192, 'S': 384, 'B': 768, 'L': 1024} +NUM_HEADS = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16} +MLP_DIM = {'Ti': 768, 'S': 1536, 'B': 3072, 'L': 4096} +NUM_LAYERS = {'Ti': 12, 'S': 12, 'B': 12, 'L': 24} + + +def get_config(runlocal=''): + """Returns the AdaTape_ViT experiment configuration for JFT.""" + config = ml_collections.ConfigDict() + + # Dataset. + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet-regularized_adavit' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'imagenet2012' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train' + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)|flip_lr' + '|randaug(2, 15)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|resize_small(256)|central_crop(224)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 250_000 + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'adatape' + config.model = ml_collections.ConfigDict() + + config.model.hidden_size = HIDDEN_SIZE[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = NUM_HEADS[version] + config.model.mlp_dim = MLP_DIM[version] + config.model.num_layers = NUM_LAYERS[version] + config.model.classifier = 'gap' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model_dtype_str = 'float32' + + config.model.ac_config = ml_collections.ConfigDict() + config.model.ac_config.add_tape_token_to_layers = (1,) + # 'from_input', 'random_learnable', 'from_tape_bank' + config.model.ac_config.num_tape_tokens = 10 + config.model.ac_config.tape_bank_size = 10000 + config.model.ac_config.tt_mlp_dim = MLP_DIM[version] + config.model.ac_config.tt_dropout_rate = 0.0 + config.model.ac_config.enc_tt_mlp_dim = 0 + config.model.ac_config.enc_tt_dropout_rate = 0.0 + config.model.ac_config.split_tt = NUM_HEADS[version] + config.model.ac_config.bank_norm = True + config.model.ac_config.bank_type = 'input' # learn + # Two following options will be activated only when bank_type == input. + config.model.ac_config.patch_bank_size = 8 + config.model.ac_config.query_type = config.model.classifier + + # Dynamic length. + config.model.ac_config.dynamic_tape_length = None + config.model.ac_config.dynamic_tape_length = ml_collections.ConfigDict() + config.model.ac_config.dynamic_tape_length.num_token_per_step = 1 + config.model.ac_config.dynamic_tape_length.act_epsilon = 2.0 + config.model.ac_config.dynamic_tape_length.act_loss_weight = 0.01 + config.model.ac_config.dynamic_tape_length.act_loss_type = 'entropy' + # max, entropy + # These two types works comparable in our experiments + config.model.ac_config.dynamic_tape_length.bernoulli_p = 0.0 + config.model.ac_config.dynamic_tape_length.complex_query = True + config.model.ac_config.dynamic_tape_length.query_noise = 0.0 + + # Training. + config.trainer_name = 'adatape_classify_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 300 + config.log_eval_steps = 1000 + config.batch_size = 8 if runlocal else 4096 + config.rng_seed = 42 + config.init_head_bias = -6.9 # -log(1000) + + # Learning rate. + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 0.001 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = base_lr + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.5 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + config.m = None # Placeholder for randaug strength. + config.l = None # Placeholder for randaug layers. + + + return config + + diff --git a/scenic/projects/adatape/dataset/__init__.py b/scenic/projects/adatape/dataset/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/adatape/dataset/parity_dataset.py b/scenic/projects/adatape/dataset/parity_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..3f2cf24430d3a2128b976a4c6b37490872650d30 --- /dev/null +++ b/scenic/projects/adatape/dataset/parity_dataset.py @@ -0,0 +1,131 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the parity task.""" + +import functools +import jax +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets + + +def generate_parity_sample(batch_size, seq_len): + """Generate one sample for parity task. + + Args: + batch_size: Determines the batch size. + seq_len: Determines the sequence length of parity vector. + + Yields: + One Sample. + + """ + rng = jax.random.PRNGKey(0) + while True: + rng, _ = jax.random.split(rng) + # Parity: + sample = jax.random.choice( + rng, + a=jnp.array((1.0, 0.0, -1.0), jnp.float32), + shape=(batch_size, seq_len)) + label = jnp.sum(jnp.equal(sample, 1.0), axis=-1).astype(jnp.int32) % 2 + sample = jax.nn.one_hot(sample+1, 3).astype(jnp.float32) + yield {'inputs': sample, 'label': label} + + +def generate_parity_eval_sample(batch_size, seq_len): + """Generate one sample for parity task. + + Args: + batch_size: Determines the batch size. + seq_len: Determines the sequence length of parity vector. + + Yields: + One Sample. + + """ + rng = jax.random.PRNGKey(42) + while True: + rng, _ = jax.random.split(rng) + # Parity: + sample = jax.random.choice( + rng, + a=jnp.array((1.0, 0.0, -1.0), jnp.float32), + shape=(batch_size, seq_len)) + label = jnp.sum(jnp.equal(sample, 1.0), axis=-1).astype(jnp.int32) % 2 + sample = jax.nn.one_hot(sample+1, 3).astype(jnp.float32) + yield {'inputs': sample, 'label': label} + + +@datasets.add_dataset('parity') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=None, + rng=None, + dataset_configs=None, + dataset_service_address=None): + """Returns generators for the PARITY train and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: We will not use it. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del shuffle_seed + del rng + del dataset_service_address + # Init configs. + if dataset_configs and dataset_configs.get('seq_len'): + seq_len = dataset_configs['seq_len'] + else: + seq_len = 32 + if dataset_configs and dataset_configs.get('num_train_examples'): + num_train_examples = dataset_configs['num_train_examples'] + else: + num_train_examples = 64000 + num_eval_examples = num_train_examples//10 + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + train_iter = generate_parity_sample(batch_size=batch_size, seq_len=seq_len) + train_iter = map(shard_batches, train_iter) + eval_iter = generate_parity_eval_sample( + batch_size=eval_batch_size, seq_len=seq_len) + eval_iter = map(shard_batches, eval_iter) + + # Parity: + input_shape = (-1, seq_len, 3) + + meta_data = { + 'num_classes': 2, + 'input_shape': input_shape, + 'num_train_examples': num_train_examples, + 'num_eval_examples': num_eval_examples, + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': False, + } + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) + diff --git a/scenic/projects/adatape/fig/adatape_overview.png b/scenic/projects/adatape/fig/adatape_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..0ee71b3042c4a0430667c188a84d05c3509a0c76 --- /dev/null +++ b/scenic/projects/adatape/fig/adatape_overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd9cce3a1d9ca97b5e0781df378a521a13d64dce1ef11165e6cfc193dde5c00d +size 227397 diff --git a/scenic/projects/adatape/layers.py b/scenic/projects/adatape/layers.py new file mode 100644 index 0000000000000000000000000000000000000000..e11a902b809cf213baae2be8bc85769b69aa9d0c --- /dev/null +++ b/scenic/projects/adatape/layers.py @@ -0,0 +1,670 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""AdaTape Layers.""" +from typing import Any, Callable, Optional, Sequence, Tuple + +from absl import logging +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.layers import nn_layers + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +def truncated_normal_initializer(): + """TruncatedNormal(0.02) initializer from BERT.""" + + def init(key, shape, dtype=jnp.float32): + dtype = jax.dtypes.canonicalize_dtype(dtype) + return jax.random.truncated_normal(key, -2, 2, shape, dtype) * 0.02 + + return init + + +class AddTapeToken(nn.Module): + """Adds tape token to the input.""" + ac_config: ml_collections.ConfigDict + + @nn.compact + def __call__(self, x: jnp.ndarray, bank: Optional[jnp.ndarray], + train: bool) -> Any: + """Add tape tokens.""" + feature_size = x.shape[-1] + logging.info('Input shape before adding tape tokens: %s', x.shape) + # Retrieve tape tokens from a tape bank: + # For now, we use CLS token, but we can have a separate token. + # 'token' or 'gap' to generate query. + # We use the same type as ViT classifier. + if self.ac_config.query_type == 'token': + tape_token_query = x[:, 0] + else: + tape_token_query = jnp.mean(x, axis=1) + tape_tokens, aux_output = TapeBank( + ac_config=self.ac_config, + features=feature_size, + tape_init=truncated_normal_initializer())( + tape_token_query, bank, not train) + # Optionally apply an MLP with GLU activation + if self.ac_config.get('tt_mlp_dim', 0): + tape_tokens = MlpBlock( + mlp_dim=self.ac_config.tt_mlp_dim, + dropout_rate=self.ac_config.tt_dropout_rate, + activation_fn=nn.glu, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6))( + tape_tokens, deterministic=not train) + + # Concat tape tokens to the input. + x = jnp.concatenate([x, tape_tokens], axis=1) + + logging.info('Input shape after adding tape tokens: %s', x.shape) + return x, aux_output + + +class ACTFunction(nn.Module): + """Adaptive Computation Time Function to help we use nn.scan on ACT.""" + + ac_config: ml_collections.ConfigDict + features: int + tape_tokens: Any + deterministic: bool = False + + def setup(self): + + # Init how many tokens we append at each time step. + self.num_token_per_step = self.ac_config.dynamic_tape_length.num_token_per_step + # Init max steps we need to ponder. + self.max_steps = self.ac_config.num_tape_tokens // self.num_token_per_step + # Init the threshold for act. + self.threshold = self.ac_config.dynamic_tape_length.act_epsilon + + def act_step(self, x) -> Any: + + # Unpack the carry input. + (query, halting_prob, remainders, n_updates, score_mask) = x + + # Init the still running mask. + still_running = jnp.less(halting_prob, self.threshold).astype(jnp.float32) + + # Init the tape token keys. + # Compute similarity for tape tokens and generate the topK index. + if self.ac_config.bank_type == 'learn': + tape_token_keys = self.tape_tokens[:, :self.features // + self.ac_config.split_tt] + scores = jnp.dot(query, tape_token_keys.T) + elif self.ac_config.bank_type == 'input': + tape_token_keys = self.tape_tokens[:, :, :self.features // + self.ac_config.split_tt] + tape_token_keys = jnp.transpose(tape_token_keys, [0, 2, 1]) + scores = jnp.matmul(jnp.expand_dims(query, 1), tape_token_keys) + scores = jnp.squeeze(scores, axis=1) + else: + raise NotImplementedError + + topk_idndex_inpool = jax.lax.top_k( + scores - score_mask * 1e+9, + self.ac_config.num_tape_tokens // self.threshold)[1] + # Select the weights from the scores and softmax. + weights = jnp.take(scores, topk_idndex_inpool) + weights = nn.softmax(weights / query.shape[-1]**0.5) + # Compute the entropy or max value for loss function. + if self.ac_config.dynamic_tape_length.act_loss_type == 'entropy': + entropy = 1.0 - jnp.sum(weights**2, axis=-1) + else: + entropy = 1.0 - jnp.max(weights, axis=-1) + + # Init the new halted mask. + sum_weights = jnp.sum(weights[:, :self.num_token_per_step], axis=-1) + new_halted = jnp.greater_equal(halting_prob + sum_weights, + self.threshold).astype( + jnp.float32) * still_running + + # Update still running. + still_running = still_running - new_halted + + # Update remainder. + remainders = remainders + (new_halted + still_running) * entropy + + # Update halting_prob. + halting_prob = halting_prob + sum_weights * still_running + halting_prob += new_halted * (self.threshold - halting_prob) + + # Increment n_updates for all inputs which are still running. + n_updates += still_running + new_halted + + # Take the new selected tokens from the token bank, + # and merge them into single tape token. + if self.ac_config.bank_type == 'learn': + token_selected_wo_merge = jnp.take( + self.tape_tokens, topk_idndex_inpool, axis=0) + elif self.ac_config.bank_type == 'input': + token_selected_wo_merge = jnp.take_along_axis( + self.tape_tokens, jnp.expand_dims(topk_idndex_inpool, -1), axis=1) + else: + raise NotImplementedError + + token_selected = token_selected_wo_merge * jnp.expand_dims(weights, -1) + token_selected = jnp.sum(token_selected, axis=-2, keepdims=True) + + # Update score_mask according to the new selected tokens. + if self.ac_config.bank_type == 'learn': + score_mask += jnp.sum( + jax.nn.one_hot(topk_idndex_inpool, self.tape_tokens.shape[0]), axis=1) + elif self.ac_config.bank_type == 'input': + score_mask += jnp.sum( + jax.nn.one_hot(topk_idndex_inpool, self.tape_tokens.shape[1]), axis=1) + else: + raise NotImplementedError + + # Update the query. + token_selected_keys = token_selected[:, :, :self.features // + self.ac_config.split_tt] + + # Different mode to update query. + # If True, replace the query by avg of old query and tape keys; + # If False, replace the query by the tape keys directly. + if self.ac_config.dynamic_tape_length.complex_query: + query = (query + jnp.mean(token_selected_keys, axis=1)) / 2.0 + else: + query = jnp.mean(token_selected_keys, axis=1) + + return (query, halting_prob, remainders, n_updates, + score_mask), token_selected + + # Define one stop function to decide the routing result. + def stop_fn(self, inputs: Any) -> jnp.ndarray: + # Returns True if all of halting probability >= 1-eps. + _, halting_prob, _, _, *_ = inputs + return jnp.all(halting_prob >= self.threshold) + + def take_a_step(self, x) -> Any: + return self.act_step(x) + + def skip_a_step(self, x) -> Any: # Shunt + bs = x[0].shape[0] + empty_tokens = jnp.zeros([bs, self.num_token_per_step, self.features]) + return x, empty_tokens + + @nn.compact + def __call__(self, carry_in, _) -> Any: + if self.is_mutable_collection('params'): # Init-mode + carry_out, scan_out = self.take_a_step(carry_in) + else: + decision = self.stop_fn(carry_in) + carry_out, scan_out = nn.cond(decision, self.skip_a_step, + self.take_a_step, self, carry_in) + return carry_out, scan_out + + +class ATRTapeAppender(nn.Module): + """ATRTapeToken Module. + + Given the TAPE token embedding, returns the top-k tpe tokens from the bank. + + Attributes: + ac_config: ml_collections.ConfigDict to use adaptive config + features: Number of feature dimensions for each embedding. + tape_tokens: Tape initializer. + dtype: The dtype of the embedding vectors (default: float32). + """ + ac_config: ml_collections.ConfigDict + features: int + tape_tokens: Any + num_tape_tokens: int + + def setup(self): + + # Init how many tokens we append at each time step. + self.num_token_per_step = self.ac_config.dynamic_tape_length.num_token_per_step + # Init max steps we need to ponder. + self.max_steps = self.ac_config.num_tape_tokens // self.num_token_per_step + + @nn.compact + def __call__(self, query: jnp.ndarray, deterministic: bool) -> jnp.ndarray: + + bs = query.shape[0] + # Init the values for scan func. + # Carry value required: query, halting_probability, + # loss_atr, n_updates, score_mask. + # Dynamic shape for update tensors below. + update_shape = query.shape[:1] + halting_probability = jnp.zeros(update_shape) + # ATR loss term for each sample. + loss_atr = jnp.zeros(update_shape) + # Number of updates performed (N(t) in the paper). + n_updates = jnp.zeros(update_shape) + # Scan value required: None. + score_mask = jnp.zeros([update_shape[0], self.tape_tokens.shape[-2]]) + + # One trick to enhance AdaTape with Learnable bank. + # We mask a subset of the whole bank during training. + if not deterministic and self.ac_config.dynamic_tape_length.bernoulli_p > 0.0: + # We split the rng, one for longer sequence, + # another one is for early exit. + rng = self.make_rng('dropout') + _, rng = jax.random.split(rng) + score_mask = score_mask + jax.random.bernoulli( + rng, + p=self.ac_config.dynamic_tape_length.bernoulli_p, + shape=score_mask.shape).astype(jnp.float32) + + # Pack the carry input for nn.scan. + carry_input = (query, halting_probability, loss_atr, n_updates, score_mask) + + # Init act_fn. + act_fn = nn.scan( + ACTFunction, + variable_broadcast='params', + split_rngs={ + 'params': False, + 'dropout': True + }, + length=self.max_steps) + + # Conduct the act_fn. + carry_output, scan_out = act_fn(self.ac_config, self.features, + self.tape_tokens, + deterministic)(carry_input, None) + + # Reshapt the outputs of nn.scan. + scan_out = jnp.transpose(scan_out, (1, 0, 2, 3)) + scan_out = jnp.reshape( + scan_out, (bs, self.max_steps * self.num_token_per_step, self.features)) + _, halting_probability, remainders, n_updates, _ = carry_output + + return scan_out, (remainders, n_updates) # pytype: disable=bad-return-type # jax-ndarray + + +class TapeBank(nn.Module): + """TapeBank Module. + + Given the TAPE token embedding, returns the top-k tpe tokens from the bank. + + Attributes: + ac_config: Configuration of the adaptive computation. + features: Number of feature dimensions for each embedding. + tape_init: Tape initializer. + dtype: The dtype of the embedding vectors (default: float32). + """ + ac_config: ml_collections.ConfigDict + features: int + tape_init: Initializer + dtype: jnp.ndarray = jnp.float32 + + def setup(self): + self.split_tt = self.ac_config.split_tt + self.num_tape_tokens = self.ac_config.num_tape_tokens + self.tape_bank_size = self.ac_config.tape_bank_size + if self.ac_config.bank_type == 'learn': + self.tape_tokens = self.param('tape_tokens', self.tape_init, + (self.tape_bank_size, self.features), + self.dtype) + self.norm_layer = nn.LayerNorm(name='bank_norm', dtype=self.dtype) + self.dy_config = self.ac_config.dynamic_tape_length + + @ nn.compact + def __call__(self, query: jnp.ndarray, + bank: Optional[jnp.ndarray], deterministic: bool) -> jnp.ndarray: + """Retrieve tape tokens from a bank. + + Args: + query: Array with last dimension equal the feature depth `features` of + the embedding of tape tokens. + bank: Array with candidate tape tokens. + deterministic: bool denotes training or not. + + Returns: + Output which is embedded input data. The output shape follows the input, + with an additional `features` dimension appended. + """ + # One trick to improve AdaTape with learnable bank. + # Add noise into to query during training. + if not deterministic and self.dy_config and self.dy_config.query_noise > 0.0: + rng = self.make_rng('dropout') + _, rng = jax.random.split(rng) + query += self.dy_config.query_noise * jax.random.normal(rng, query.shape) + if self.ac_config.bank_type == 'learn': + tape_tokens = jnp.asarray(self.tape_tokens, self.dtype) + elif self.ac_config.bank_type == 'input': + tape_tokens = bank + else: + raise NotImplementedError + # Norm query and bank with the same LayerNorm. + query = self.norm_layer(query) + tape_tokens = self.norm_layer(tape_tokens) + # Split the tape token [:,:, feature_dim] into two sub-vectors, i.e. key + # and value. We also use half of the query as the real query if so. + feature_dim = query.shape[-1] + query = query[:, :feature_dim // self.split_tt] + # We use ATR for dynamic reading. + if self.dy_config: + return ATRTapeAppender(self.ac_config, self.features, tape_tokens, + self.num_tape_tokens)(query, deterministic) + # `scores` is an array with final dim `tape_bank_size` corresponding to the + # batched inner-product of the array of query vectors against + # each tape token in tape_tokens. + + # When we do not consider adaptive length, we use the following code. + if self.ac_config.bank_type == 'learn': + tape_tokens_keys = tape_tokens[:, :feature_dim // self.split_tt] + scores = jnp.dot(query, tape_tokens_keys.T) + topk_idndex = jax.lax.top_k(scores, self.num_tape_tokens)[1] + assert jnp.issubdtype(topk_idndex.dtype, jnp.integer) + return jnp.take(tape_tokens, topk_idndex, axis=0), (None, None) # pytype: disable=bad-return-type # jax-ndarray + else: + token_selected_keys = tape_tokens[:, :, :self.features // + self.ac_config.split_tt] + token_selected_keys = jnp.transpose(token_selected_keys, [0, 2, 1]) + scores = jnp.matmul(jnp.expand_dims(query, 1), token_selected_keys) + scores = jnp.squeeze(scores, axis=1) + topk_idndex = jax.lax.top_k(scores, self.num_tape_tokens)[1] + assert jnp.issubdtype(topk_idndex.dtype, jnp.integer) + topk_idndex = jnp.expand_dims(topk_idndex, axis=-1) + tape_tokens = jnp.take_along_axis(tape_tokens, topk_idndex, axis=1) + return tape_tokens, (None, None) # pytype: disable=bad-return-type # jax-ndarray + + +class Encoder1DBlock(nn.Module): + """Transformer encoder layer. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: Number of self-attention heads. + dtype: The dtype of the computation (default: float32). + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_depth: probability of dropping a layer linearly grows from 0 to + the provided value. + + Returns: + output after transformer encoder block. + """ + mlp_dim: int + num_heads: int + ac_config: ml_collections.ConfigDict + dtype: Any = jnp.float32 + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + + @nn.compact + def __call__(self, # pytype: disable=annotation-type-mismatch # jax-ndarray + inputs_q: jnp.ndarray, + inputs_kv: jnp.ndarray = None, + input_mask: Optional[jnp.ndarray] = None, + added_tape_len: int = 0, + deterministic: bool = None) -> jnp.ndarray: + """Applies Encoder1DBlock module. + + Args: + inputs_q: Input data used to generate query. + inputs_kv: Input data used to generate key/value. + input_mask: Input mask, used for text input. + added_tape_len: Length of the tape that is added to the original input, in + terms of number of tape tokens. + deterministic: Deterministic or not (to apply dropout). + + Returns: + Output after transformer encoder block. + """ + assert inputs_q.ndim == 3 + # Attention block. + x_q = nn.LayerNorm(dtype=self.dtype)(inputs_q) + if inputs_kv is not None: + assert inputs_kv.ndim == 3 + x_kv = nn.LayerNorm(dtype=self.dtype)(inputs_kv) + else: + x_kv = x_q + if input_mask is not None: + attention_mask = input_mask[:, None, None, :] * jnp.ones( + [1, 1, x_q.shape[1], 1]) + else: + attention_mask = None + + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + dtype=self.dtype, + kernel_init=nn.initializers.xavier_uniform(), + broadcast_dropout=False, + deterministic=deterministic, + dropout_rate=self.attention_dropout_rate)( + x_q, x_kv, mask=attention_mask) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic) + x = nn_layers.StochasticDepth(rate=self.stochastic_depth)(x, deterministic) + x = x + inputs_q + + # MLP block. + y = nn.LayerNorm(dtype=self.dtype)(x) + use_tap_mlp = self.ac_config.get('enc_tt_mlp_dim', 0) and added_tape_len + if use_tap_mlp: + # Slice out y, and y_tapes: + y, y_tapes = jnp.split(y, [(y.shape[1] - added_tape_len)], axis=1) + y_tapes = MlpBlock( + mlp_dim=self.ac_config.enc_tt_mlp_dim, + dtype=self.dtype, + dropout_rate=self.ac_config.enc_tt_dropout_rate, + activation_fn=nn.glu, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6), + name='tape_mlp')( + y_tapes, deterministic=deterministic) + + y = MlpBlock( + mlp_dim=self.mlp_dim, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6))( + y, deterministic=deterministic) + if use_tap_mlp: + y = jnp.concatenate([y, y_tapes], axis=1) + + y = nn_layers.StochasticDepth(rate=self.stochastic_depth)(y, deterministic) + return y + x + + +def update_input_mask( + input_mask: Optional[jnp.ndarray], taped_x: jnp.ndarray, + ada_tt_len: Optional[jnp.ndarray], ac_config: ml_collections.ConfigDict +) -> Tuple[jnp.ndarray, Optional[jnp.ndarray], jnp.ndarray]: + """Updates input mask and taped_x if needed.""" + logging_input_mask = None + bs, in_len, _ = taped_x.shape + num_tape_tokens = ac_config.num_tape_tokens + if ac_config.get('dynamic_tape_length'): + if input_mask is None: + # Set the mask to one for all the tokens from the original input. + input_mask = jnp.ones((bs, (in_len - num_tape_tokens))) + assert ada_tt_len is not None + tape_mask = jnp.tile(jnp.arange(num_tape_tokens), + (bs, 1)) < ada_tt_len[..., None] + input_mask = jnp.concatenate( + [input_mask, tape_mask.astype(input_mask.dtype)], axis=1) + logging_input_mask = input_mask + elif ( + input_mask is not None + # Only update the mask if its size doesn't match the current input, + # which means we need mask to also cover added tape tokens. + and in_len != input_mask.shape[1]): + new_len = taped_x.shape[1] + # Update the input mask to include tape tokens. + tape_mask = jnp.ones((input_mask.shape[0], (new_len - input_mask.shape[1]))) + input_mask = jnp.concatenate([input_mask, tape_mask], axis=1) + + return input_mask, logging_input_mask, taped_x # pytype: disable=bad-return-type # jax-ndarray + + +def get_q_kv_mask( + x: jnp.ndarray, + input_mask: Optional[jnp.ndarray], + layer: int, + tape_added: int, + ac_config: ml_collections.ConfigDict, + bank: Optional[jnp.ndarray], + train: bool, +) -> Tuple[jnp.ndarray, Optional[jnp.ndarray], Optional[jnp.ndarray], + Optional[jnp.ndarray], Optional[jnp.ndarray], int]: + """Generates query, key/valye, input mask and logging input mask based on ac_config.""" + + # Prepare x and taped_x, if necessary: + if layer in ac_config.add_tape_token_to_layers: + # For layers where we add tape token: + taped_x, (loss_atr, n_updates) = AddTapeToken(ac_config=ac_config)( + x, bank=bank, train=train) + tape_added += taped_x.shape[1] - x.shape[1] + # Correct n_updates when the num_token_per_step > 1. + if ac_config.dynamic_tape_length: + n_updates = n_updates * ac_config.dynamic_tape_length.num_token_per_step + + input_mask, logging_input_mask, taped_x = update_input_mask( + input_mask=input_mask, + taped_x=taped_x, + ada_tt_len=n_updates, + ac_config=ac_config) + + # Prepare query and key/value (memory): + x_q, x_kv = taped_x, None + + return x_q, x_kv, input_mask, logging_input_mask, loss_atr, tape_added + + elif tape_added: + # For layers after adding tape tokens, where we don't add tape token. + # taped_x = x + # x = x[:, :-tape_added, :] + x_q, x_kv = x, None + return x_q, x_kv, input_mask, input_mask, None, tape_added + else: + # For layers before adding tape tokens, just run self attention: + return x, None, input_mask, input_mask, None, 0 + + +class AdaTapeEncoder(nn.Module): + """Transformer Encoder. + + Attributes: + num_layers: Number of layers. + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: Number of self-attention heads. + ac_config: Configuration of the adaptive computation. + dropout_rate: Dropout rate. + attention_dropout_rate: Attention dropout rate + stochastic_depth: probability of dropping a layer linearly grows from 0 to + the provided value. Our implementation of stochastic depth follows timm + library, which does per-example layer dropping and uses independent + dropping patterns for each skip-connection. + dtype: Dtype of activations. + """ + num_layers: int + mlp_dim: int + num_heads: int + ac_config: ml_collections.ConfigDict + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, + x: jnp.ndarray, + bank: Optional[jnp.ndarray] = None, + *, + input_mask: Optional[jnp.ndarray] = None, + train: bool = False): + """Applies Transformer model on the inputs.""" + + assert x.ndim == 3 # Shape is `[batch, len, emb]`. + # Init it as None and update it later. + logging_input_mask = None + tape_added = 0 + loss_atr = None + # Input Encoder. + for lyr in range(self.num_layers): + if self.ac_config.get('add_tape_token_to_layers', []): + output_q_kv = get_q_kv_mask( + x, input_mask, lyr, tape_added, self.ac_config, bank, train=train) + (x_q, x_kv, input_mask, logging_input_mask_tmp, loss_atr_tmp, + tape_added) = output_q_kv + # Update logging_input_mask only when the returned value is not None. + if logging_input_mask_tmp is not None: + logging_input_mask = logging_input_mask_tmp + # Update loss_atr only when the returned value is not None. + if loss_atr_tmp is not None: + loss_atr = loss_atr_tmp + else: + # Add no tape token + x_q, x_kv = x, None + + x = Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + ac_config=self.ac_config, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=(lyr / max(self.num_layers - 1, 1)) * + self.stochastic_depth, + name=f'encoderblock_{lyr}', + dtype=jax.dtypes.canonicalize_dtype(self.dtype))( + x_q, + x_kv, + input_mask=input_mask, + added_tape_len=tape_added, + deterministic=not train) + + encoded = nn.LayerNorm(name='encoder_norm')(x) + return encoded, (logging_input_mask, loss_atr) + + +class MlpBlock(nn.Module): + """Transformer MLP / feed-forward block.""" + + mlp_dim: int + out_dim: Optional[int] = None + dropout_rate: float = 0.1 + use_bias: bool = True + kernel_init: Initializer = nn.initializers.xavier_uniform() + bias_init: Initializer = nn.initializers.normal(stddev=1e-6) + activation_fn: Callable[[jnp.ndarray], jnp.ndarray] = nn.gelu + precision: Optional[jax.lax.Precision] = None + dtype: jnp.ndarray = jnp.float32 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, deterministic: bool): + """Applies Transformer MlpBlock module.""" + actual_out_dim = inputs.shape[-1] if self.out_dim is None else self.out_dim + dense_dim = self.mlp_dim * (2 if self.activation_fn == nn.glu else 1) + x = nn.Dense( + dense_dim, + dtype=self.dtype, + use_bias=self.use_bias, + kernel_init=self.kernel_init, + bias_init=self.bias_init, + precision=self.precision)( + inputs) + x = self.activation_fn(x) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=deterministic) + output = nn.Dense( + actual_out_dim, + dtype=self.dtype, + use_bias=self.use_bias, + kernel_init=self.kernel_init, + bias_init=self.bias_init, + precision=self.precision)( + x) + output = nn.Dropout(rate=self.dropout_rate)( + output, deterministic=deterministic) + return output diff --git a/scenic/projects/adatape/main.py b/scenic/projects/adatape/main.py new file mode 100644 index 0000000000000000000000000000000000000000..3191a365c5412d06b7e2008a4a4e38243373e1dc --- /dev/null +++ b/scenic/projects/adatape/main.py @@ -0,0 +1,69 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for AdaTape.""" + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.adatape.adatape_vit import adatape_classify_trainer +from scenic.projects.adatape.adatape_vit import adatape_trainer +from scenic.projects.adatape.adatape_vit import adatape_vit +from scenic.projects.adatape.dataset import parity_dataset # pylint: disable=unused-import +from scenic.train_lib import train_utils +from scenic.train_lib import trainers + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name: str): + """Get the model class for the AdaTape project.""" + if model_name == 'adatape' or model_name == 'adatape-parity': + return adatape_vit.AdaTapeMultiLabelClassificationModel + else: + raise ValueError(f'Unrecognized model: {model_name}.') + + +def get_trainer(trainer_name): + if trainer_name == 'adatape_trainer': + return adatape_trainer.train + elif trainer_name == 'adatape_classify_trainer': + return adatape_classify_trainer.train + else: + return trainers.get_trainer(trainer_name) + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the AdaTape project.""" + # Build the loss_fn, metrics, and flax_model. + model_cls = get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + trainer = get_trainer(config.trainer_name) + trainer( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/adversarialtraining/README.md b/scenic/projects/adversarialtraining/README.md new file mode 100644 index 0000000000000000000000000000000000000000..8fdfccdeca331d0810b110163d18728c14d1ab17 --- /dev/null +++ b/scenic/projects/adversarialtraining/README.md @@ -0,0 +1,53 @@ +## Pyramid Adversarial Training Improves ViT's Performance + +![Fig](images/pyramidat_fig1.gif) + +Visual example of a pyramid adversarial image. We show the original image, multiple scales of a perturbation pyramid, and the perturbed image. The perturbation is adversarially learned for different scales and with different weights for each scale. + +![Table](images/pyramidat_fig1.gif) + +Examples of evaluation datasets and our gains. We show thumbnails of in-distribution and out-of-distribution datasets, and the gains from applying our technique on each dataset. (Note that lower is better for ImageNet-C.) + +This directory contains the code for [Pyramid Adversarial Training Improves +ViT's Performance](https://pyramidat.github.io/) as well as [Adversarial Examples +Improve Image Recognition](https://arxiv.org/abs/1911.09665). + +This project uses adversarial images (with a new pyramid perturbation) in order +to substantially improve ViT's classification performance on ImageNet, both +on in-distribution data and on out-of-distribution data. We also +observe improved performance for other baselines (e.g. MLP-Mixer, +ViT-Discrete) and other pre-trainings (e.g. ImageNet-21k). In addition, these +gains persist after fine-tuning (e.g. different resolutions). + +# Paper + +[Pyramid Adversarial Training Improves +ViT's Performance](https://arxiv.org/pdf/2111.15121.pdf) + +**Abstract:** Aggressive data augmentation is a key component of the strong generalization capabilities of Vision Transformer (ViT). One such data augmentation technique is adversarial training (AT); however, many prior works have shown that this often results in poor clean accuracy. In this work, we present pyramid adversarial training (PyramidAT), a simple and effective technique to improve ViT’s overall performance. We pair it with a “matched” Dropout and stochastic depth regularization, which adopts the same Dropout and stochastic depth configuration for the cleanand adversarial samples. Similar to the improvements on CNNs by AdvProp (not directly applicable to ViT), our pyramid adversarial training breaks the trade-off between in-distribution accuracy and out-of-distribution robustness for ViT and related architectures. It leads to 1.82% absolute improvement on ImageNet clean accuracy for the ViT-B model when trained only on ImageNet-1K data, while simultaneously boosting performance on 7 ImageNet robustness metrics, by absolute numbers ranging from 1.76% to 15.68%. We set a new state-of-the-art for ImageNet-C (41.42 mCE), ImageNet-R (53.92%), and ImageNet-Sketch (41.04%) without extra data, using only the ViT-B/16 backbone and our pyramid adversarial training. Our code will be publicly available. + +``` +@inproceedings{herrmann2022pyramid, + title={Pyramid adversarial training improves vit performance}, + author={Herrmann, Charles and Sargent, Kyle and Jiang, Lu and Zabih, Ramin and Chang, Huiwen and Liu, Ce and Krishnan, Dilip and Sun, Deqing}, + booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition}, + pages={13419--13429}, + year={2022} +} +``` + +# Getting Started + +An example command-line to train a ViT B/16 model on ImageNet with three settings (baseline, PixelAT, PyramidAT) is: + +``` +python scenic/projects/adversarial_training/main.py -- \ + --config=scenic/projects/adversarial_training/configs/imagenet_train/imagenet_regvit_config.py \ + --workdir=pyramidat/ +``` + +# Contact + +PyramidAT and this code was done by VisCam in Google Research. If you are +interested, please feel free to contact: irwinherrmann at google.com or deqingsun at google.com + diff --git a/scenic/projects/adversarialtraining/attacks/__init__.py b/scenic/projects/adversarialtraining/attacks/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/adversarialtraining/attacks/attack_compute.py b/scenic/projects/adversarialtraining/attacks/attack_compute.py new file mode 100644 index 0000000000000000000000000000000000000000..56150f13c902dcebe0c7f25043837c1f75abedb2 --- /dev/null +++ b/scenic/projects/adversarialtraining/attacks/attack_compute.py @@ -0,0 +1,205 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Run the adversarial attacks.""" +import functools + +import jax +import jax.numpy as jnp +import ml_collections +from scenic.projects.adversarialtraining.attacks import attack_losses +from scenic.projects.adversarialtraining.attacks import attack_methods +from scenic.projects.adversarialtraining.attacks import attack_transforms +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers + + +def typecheck(obj): + return hasattr(obj, '__iter__') and not isinstance(obj, str) + + +def get_adv_pyramid(batch, + clean_logits, + attack_fn, + optimizer_def, + config, + dropout_rng, + lr_rng, + misc_artifacts): + """Get pyramid attack for batch.""" + del clean_logits, dropout_rng + + epsilon = config.advprop.epsilon + num_steps = config.advprop.num_steps + # 1 is global, 224 is pixel-level + # pylint: disable=eval-used + pyramid_sizes = eval(config.advprop.pyramid_sizes) + pyramid_scalars = eval(config.advprop.pyramid_scalars) + if not typecheck(pyramid_sizes): + pyramid_sizes = [pyramid_sizes] + if not typecheck(pyramid_scalars): + pyramid_scalars = [pyramid_scalars] + + local_batch_size = batch['inputs'].shape[0] + init_mode = config.advprop.get('init_mode', default=None) + init_aug_params = {} + if init_mode == 'zero': + for (layer, pyramid_size) in enumerate(pyramid_sizes): + init_aug_params[str(layer)] = jnp.zeros( + dtype=jnp.float32, + shape=(local_batch_size, pyramid_size, pyramid_size, 3)) + elif init_mode == 'random': + for (layer, pyramid_size) in enumerate(pyramid_sizes): + init_aug_params[str(layer)] = jax.random.uniform( + key=lr_rng, + dtype=jnp.float32, + shape=(local_batch_size, pyramid_size, pyramid_size, 3), + maxval=epsilon, + minval=-epsilon) + elif init_mode == 'normal': + for (layer, pyramid_size) in enumerate(pyramid_sizes): + init_aug_params[str(layer)] = epsilon * jax.random.normal( + key=lr_rng, + dtype=jnp.float32, + shape=(local_batch_size, pyramid_size, pyramid_size, 3)) + else: + raise NotImplementedError('Not valid init_mode %s' % init_mode) + + init_aug_scalars = {} + if pyramid_scalars is None: + for (layer, pyramid_size) in enumerate(pyramid_sizes): + init_aug_scalars[str(layer)] = jnp.ones((len(pyramid_sizes))) + else: + for (layer, pyramid_size) in enumerate(pyramid_sizes): + init_aug_scalars[str( + layer)] = pyramid_scalars[layer] * jnp.ones((len(pyramid_sizes),)) + + transform_fn = functools.partial( + attack_transforms.patched_color_jitter, + aug_fn=attack_transforms.fast_color_perturb) + def transform_fn_pyramid(input_image, aug_params_dict): + for layer in range(len(aug_params_dict)): + input_image = transform_fn( + input_image, + init_aug_scalars[str(layer)] * aug_params_dict[str(layer)]) + return input_image + + adv_image, adv_perturbation, _, attack_artifacts = attack_methods.pgd_attack_transform( + loss_fn=attack_fn, + transform_fn=transform_fn_pyramid, + init_aug_params=init_aug_params, + input_image=batch['inputs'], + label=batch['label'], + epsilon=epsilon, + num_steps=num_steps, + rng=lr_rng, + optimizer_def=optimizer_def, + projection=attack_methods.project_perturbation_pyramid_inf, + ) + local_result_advprop_pyramid = adv_image, adv_perturbation + for key in attack_artifacts: + misc_artifacts[key] = attack_artifacts[key] + + return (lambda _: local_result_advprop_pyramid), misc_artifacts + + +def get_adversarial_fn(adversarial_fn_name): + if adversarial_fn_name == 'advprop_pyramid': + return get_adv_pyramid + else: + raise NotImplementedError('No implementation for %s' % adversarial_fn_name) + + +def get_optimizer_def(optimizer_str, learning_rate_fn): + """Get optimizer for adversarial attack.""" + optimizer_config = ml_collections.ConfigDict() + if optimizer_str == 'GradientDescent': + optimizer_config.optimizer = 'sgd' + elif optimizer_str == 'Adam': + optimizer_config.optimizer = 'adam' + optimizer_config.b1 = 0.5 + optimizer_config.b2 = 0.5 + elif optimizer_str == 'AdaBelief': + optimizer_config.optimizer = 'adabelief' + optimizer_config.b1 = 0.5 + optimizer_config.b2 = 0.5 + else: + raise NotImplementedError('advprop.optimizer is not valid: %s' % + optimizer_str) + return functools.partial( + optimizers.get_optimizer, + optimizer_config=optimizer_config, + learning_rate_fn=learning_rate_fn) + + +def get_adversarial_image_and_perturbation(batch, clean_logits, config, + training_loss_fn_single, train_state, + dropout_rng, lr_rng): + """Get adversarial image and perturbation.""" + # initialize misc_artifacts which is piped through loss and attack + misc_artifacts = {} + + # get adversarial modes + if not config.get('adversarial_augmentation_mode'): + raise NotImplementedError('Adversarial should receive a mode') + adversarial_augmentation_mode = config.get('adversarial_augmentation_mode') + if ',' in adversarial_augmentation_mode: + adversarial_augmentation_modes = list( + config.get('adversarial_augmentation_mode').split(',') + ) + elif isinstance(adversarial_augmentation_mode, str): + adversarial_augmentation_modes = [config.get( + 'adversarial_augmentation_mode')] + else: + raise NotImplementedError('adversarial_augmentation_mode is not valid: %s' % + str(adversarial_augmentation_mode)) + adversarial_fns = [get_adversarial_fn(adversarial_name) + for adversarial_name in adversarial_augmentation_modes] + + # get loss function + attack_in_train_mode = config.advprop.get('attack_in_train_mode', + default=True) + attack_fn_str = config.advprop.get('attack_fn_str', default='random_target') + attack_fn, misc_artifacts = attack_losses.get_attack_fn( + attack_fn_str, training_loss_fn_single, batch, train_state, dropout_rng, + misc_artifacts, attack_in_train_mode, config) + + # get optimizer def + learning_rate_fn = lr_schedules.get_learning_rate_fn(config.advprop) + optimizer_str = config.advprop.get('optimizer', default='GradientDescent') + optimizer_def = get_optimizer_def(optimizer_str, learning_rate_fn) + + # initialize augmentation params + images_and_perturbations = [] + + # run all augmentations + for adv_fn in adversarial_fns: + ims_and_pert, misc_artifacts = adv_fn( + batch, clean_logits, attack_fn, optimizer_def, config, dropout_rng, + lr_rng, misc_artifacts) + images_and_perturbations.append(ims_and_pert) + + # sanity check + assert len(images_and_perturbations) == len(adversarial_augmentation_modes) + + # randomly run one of them + random_index = jax.random.randint( + key=dropout_rng, + shape=(), + minval=0, + maxval=len(adversarial_augmentation_modes)) + adversarial_image, adversarial_perturbation = jax.lax.switch( + random_index, images_and_perturbations, None) + + return adversarial_image, adversarial_perturbation, misc_artifacts diff --git a/scenic/projects/adversarialtraining/attacks/attack_losses.py b/scenic/projects/adversarialtraining/attacks/attack_losses.py new file mode 100644 index 0000000000000000000000000000000000000000..0c53fa9e9b55ccd3ee4d29c3d6c3178cf233f102 --- /dev/null +++ b/scenic/projects/adversarialtraining/attacks/attack_losses.py @@ -0,0 +1,86 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Losses for attack.""" +import jax +import jax.numpy as jnp + + +def get_attack_fn(attack_fn_str, + training_loss_fn_single, + batch, + train_state, + dropout_rng, + misc_artifacts, + attack_in_train_mode=True, + config=None): + """Get specified attack function.""" + # create random label + # ensure they don't change after initialization of loss + true_labels = batch['label'] + random_labels = jax.random.randint( + key=dropout_rng, + shape=true_labels.shape[:-1], + minval=0, + maxval=config.advprop.num_classes, + dtype=jnp.int16) + + # build loss functions + def attack_fn_targeted(inputs, pertubation, target_labels): + del pertubation + + new_batch = dict(batch) + new_batch['inputs'] = inputs + loss_clean, (_, _) = training_loss_fn_single( + train_state.params, + train_state.model_state, + batch=new_batch, + use_aux_batchnorm=True, + use_aux_dropout=True, + train_var=attack_in_train_mode, + ) + + target_labels_one_hot = jax.nn.one_hot( + target_labels, + num_classes=config.advprop.num_classes).astype(jnp.float32) + + new_batch['label'] = target_labels_one_hot + misc_artifacts['target_labels_one_hot'] = target_labels_one_hot + + loss, (_, logits) = training_loss_fn_single( + train_state.params, + train_state.model_state, + batch=new_batch, + use_aux_batchnorm=True, + use_aux_dropout=True, + train_var=attack_in_train_mode, + ) + + loss_breakdown = { + 'loss_adv': loss, + 'loss_base': loss_clean, + } + return loss, (loss_breakdown, logits) + + def attack_fn_random_target(inputs, pertubation, labels=None): + del labels + return attack_fn_targeted(inputs, pertubation, target_labels=random_labels) + + # select loss function + if attack_fn_str == 'random_target': + full_attack_fn = attack_fn_random_target + else: + raise NotImplementedError('No implementation of %s' % attack_fn_str) + + return full_attack_fn, misc_artifacts diff --git a/scenic/projects/adversarialtraining/attacks/attack_methods.py b/scenic/projects/adversarialtraining/attacks/attack_methods.py new file mode 100644 index 0000000000000000000000000000000000000000..d181006e0263edb250c51e756711a19611cbfad9 --- /dev/null +++ b/scenic/projects/adversarialtraining/attacks/attack_methods.py @@ -0,0 +1,137 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Methods for attacking.""" +import functools + +import jax +import jax.numpy as jnp +import optax + + +def project_perturbation_inf(perturbation, epsilon, input_image, image_bounds): + """Project `perturbation` onto L-infinity ball of radius `epsilon`.""" + if epsilon is None: + return perturbation + + clipped_perturbation = jnp.clip(perturbation, -epsilon, epsilon) + new_image = jnp.clip(input_image + clipped_perturbation, image_bounds[0], + image_bounds[1]) + return new_image - input_image + + +def project_perturbation_pyramid_inf(aug_params, epsilon, input_image, + image_bounds): + """Project `perturbation` onto L-infinity ball of radius `epsilon`.""" + del input_image, image_bounds + + if epsilon is None: + return aug_params + + # The idea is to ensure that the sum of the perturbations over the pyramid + # levels can't be more than epsilon. + clipped_perturbation_pyramid = jax.tree_util.tree_map( + functools.partial(jnp.clip, min=-epsilon, max=epsilon), aug_params) + + return clipped_perturbation_pyramid + + +def project_perturbation_pyramid_l2(aug_params, epsilon, input_image, + image_bounds): + """Project `perturbation` onto L-infinity ball of radius `epsilon`.""" + del input_image, image_bounds + + if epsilon is None: + return aug_params + + pyramid_levels = len(aug_params) + + # The idea is to ensure that the sum of the perturbations over the pyramid + # levels can't be more than epsilon. + clipped_perturbation_pyramid = jax.tree_util.tree_map( + functools.partial( + jnp.clip, + min=-epsilon / pyramid_levels, + max=epsilon / pyramid_levels), aug_params) + + return clipped_perturbation_pyramid + + +def pgd_attack_transform( + loss_fn, + transform_fn, + init_aug_params, + input_image, + label, + epsilon, + num_steps, + rng, + optimizer_def, + projection=None, + ): + """PGD attack through a transform.""" + del rng + local_batch_size = input_image.shape[0] + + wrapped_loss_fn = lambda x: loss_fn(transform_fn(input_image, x), x, label) + + train_params = init_aug_params + + tx = optimizer_def(params=train_params) + opt_state = jax.jit(tx.init, backend='tpu')(train_params) + + augmentation_params_list = [] + logits_list = [] + loss_breakdown_list = [] + compute_grad_fn = jax.value_and_grad(wrapped_loss_fn, has_aux=True) + for _ in range(num_steps): + (_, (loss_breakdown, logits)), grad = compute_grad_fn(train_params) + loss_breakdown_list.append(loss_breakdown) + logits_list.append(logits) + + edit_grad = jax.tree_util.tree_map(jnp.sign, grad) + updates, opt_state = tx.update(edit_grad, opt_state, train_params) + new_train_params = optax.apply_updates(params=train_params, updates=updates) + + if projection is not None: + image_bounds = (-1, 1) + new_train_params = projection(new_train_params, epsilon, input_image, + image_bounds) + + augmentation_params_list.append(jax.lax.stop_gradient(new_train_params)) + train_params = new_train_params + + (_, (loss_breakdown, logits)), grad = compute_grad_fn(train_params) + loss_breakdown_list.append(loss_breakdown) + logits_list.append(logits) + augmentation_params_list.append(jax.lax.stop_gradient(train_params)) + + final_aug_params = train_params + steps_per_example = jnp.ones( + shape=(local_batch_size,), dtype=jnp.int32) * num_steps + + adversarial_image = transform_fn(input_image, final_aug_params) + + misc_artifacts = { + 'steps_per_example': steps_per_example, + 'augmentation_params_list': augmentation_params_list, + 'loss_breakdown_list': loss_breakdown_list, + 'logits_list': logits_list, + } + return ( + jax.lax.stop_gradient(adversarial_image), + jax.lax.stop_gradient(adversarial_image - input_image), + jax.lax.stop_gradient(final_aug_params), + misc_artifacts, + ) diff --git a/scenic/projects/adversarialtraining/attacks/attack_metrics.py b/scenic/projects/adversarialtraining/attacks/attack_metrics.py new file mode 100644 index 0000000000000000000000000000000000000000..c8c08a42ba7f0122e167b538e2f839ec9e732ef8 --- /dev/null +++ b/scenic/projects/adversarialtraining/attacks/attack_metrics.py @@ -0,0 +1,115 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Metrics for attack code.""" +import functools + +import jax.numpy as jnp +from scenic.projects.adversarialtraining.attacks import train_utils + + +def batchwise_scalar_to_metric_with_counts(metric, weights, devicewise_counts): + norm_metric = train_utils.psum_metric_normalizer( + (metric * weights, devicewise_counts)) + return norm_metric[0], devicewise_counts + + +def get_metrics(misc_artifacts, batch, metrics, images_to_log, metrics_fn): + """Get the attack metrics.""" + logits = misc_artifacts['logits'] + adv_logits = misc_artifacts['adv_logits'] + adv_image = misc_artifacts['adv_image'] + adv_perturbation = misc_artifacts['adv_perturbation'] + + adv_metrics = metrics_fn(adv_logits, batch) + devicewise_counts = adv_metrics['loss'][1] + + batchwise_scalar_to_metric = functools.partial( + batchwise_scalar_to_metric_with_counts, + weights=batch.get('batch_mask'), + devicewise_counts=devicewise_counts) + + # images to log + images_to_log['adv_image'] = train_utils.unnormalize_imgnet(adv_image) + images_to_log['adv_perturbation'] = train_utils.normalize_minmax( + adv_perturbation) + + # simple train metrics + metrics['steps_per_example'] = batchwise_scalar_to_metric( + misc_artifacts['steps_per_example']) + + # simple network metrics + acc_key = 'accuracy' if 'accuracy' in adv_metrics else 'prec@1' + metrics['aux_accuracy'] = adv_metrics[acc_key] + metrics['adv_loss'] = adv_metrics['loss'] + metrics['adv_loss-loss'] = metrics['adv_loss'][0] - metrics['loss'][ + 0], devicewise_counts + + # adversarial interactions with the network + l2_norms = jnp.sqrt(jnp.sum(adv_perturbation**2, axis=(1, 2, 3))) + metrics['|adv-orig|_l2'] = batchwise_scalar_to_metric(l2_norms) + + # adversarial interactions with the network + linfty_norms = jnp.max(jnp.abs(adv_perturbation), axis=(1, 2, 3)) + metrics['|adv-orig|_linfty'] = batchwise_scalar_to_metric(linfty_norms) + metrics['|adv-orig|_stddev'] = batchwise_scalar_to_metric( + jnp.std(jnp.abs(adv_perturbation), axis=(1, 2, 3))) + + logit_norms = jnp.sqrt(jnp.sum((adv_logits - logits)**2, axis=(1))) + metrics['|adv_logits-logits|_l2'] = batchwise_scalar_to_metric(logit_norms) + metrics[ + '|adv_logits-logits|_l2 / |adv-orig|_l2'] = batchwise_scalar_to_metric( + logit_norms / (jnp.clip(l2_norms, min=1e-5))) + + # network performance on adversarial + logits_are_correct = jnp.argmax( + logits, axis=-1) == jnp.argmax( + batch['label'], axis=-1) + adv_logits_are_correct = jnp.argmax( + adv_logits, axis=-1) == jnp.argmax( + batch['label'], axis=-1) + + adv_correct_clean_incorrect = (adv_logits_are_correct > + logits_are_correct).astype(jnp.float32) + adv_incorrect_clean_correct = (adv_logits_are_correct < + logits_are_correct).astype(jnp.float32) + metrics['adv_correct_clean_incorrect'] = batchwise_scalar_to_metric( + adv_correct_clean_incorrect) + metrics['adv_incorrect_clean_correct'] = batchwise_scalar_to_metric( + adv_incorrect_clean_correct) + + if 'target_labels_one_hot' in misc_artifacts: + # We ran a targeted attack. This is to check that we hit the target after + # running the attack. + + # This should be ~1/1000 + logits_are_target = jnp.argmax( + logits, axis=-1) == jnp.argmax( + misc_artifacts['target_labels_one_hot'], axis=-1) + + adv_logits_are_target = jnp.argmax( + adv_logits, axis=-1) == jnp.argmax( + misc_artifacts['target_labels_one_hot'], axis=-1) + adv_are_target_clean_are_not_target = ( + adv_logits_are_target > logits_are_target).astype(jnp.float32) + adv_are_not_target_clean_are_target = ( + adv_logits_are_target < logits_are_target).astype(jnp.float32) + metrics['adv_are_target_clean_are_not_target'] = batchwise_scalar_to_metric( + adv_are_target_clean_are_not_target) + metrics['adv_are_not_target_clean_are_target'] = batchwise_scalar_to_metric( + adv_are_not_target_clean_are_target) + + metrics['adv_loss_weight'] = misc_artifacts['adv_loss_weight'], 1 + + return metrics, images_to_log diff --git a/scenic/projects/adversarialtraining/attacks/attack_transforms.py b/scenic/projects/adversarialtraining/attacks/attack_transforms.py new file mode 100644 index 0000000000000000000000000000000000000000..f7a0e5e2ad8a087f725f81ed5099f24709617194 --- /dev/null +++ b/scenic/projects/adversarialtraining/attacks/attack_transforms.py @@ -0,0 +1,73 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Transforms which we can attack through.""" +import jax +import jax.numpy as jnp + + +def _to_grid(x, patch_sidelength): + """To grid.""" + n, h, w, three = x.shape + assert three == 3 + gh = h // patch_sidelength + gw = w // patch_sidelength + fh, fw = patch_sidelength, patch_sidelength + + x = jnp.reshape(x, [n, gh, fh, gw, fw, 3]) + x = jnp.transpose(x, [0, 1, 3, 2, 4, 5]) + x_grid = jnp.reshape(x, [n, gh, gw, fh, fw, 3]) + return x_grid + + +def _from_grid(x, patch_sidelength): + """From grid.""" + (n, gh, gw, fh, fw, _) = x.shape + fh, fw = patch_sidelength, patch_sidelength + + x = x.reshape([n, gh, gw, fh, fw, 3]) + x = x.transpose([0, 1, 3, 2, 4, 5]) + x = x.reshape([n, gh*fh, gw*fw, 3]) + return x + + +def fast_color_perturb(input_image, aug_params): + return jnp.clip(input_image + aug_params.reshape(1, 1, 3), -1, 1) + + +def patched_color_jitter(input_image, aug_params, aug_fn=fast_color_perturb): + """Color jitter applied to patch granularity.""" + local_batch_size, num_patches, num_patches_1, three = aug_params.shape + assert three == 3 + assert num_patches == num_patches_1 + + local_batch_size_1, h, w, three = input_image.shape + assert three == 3 + assert h == w + # assert h == 224 + assert local_batch_size_1 == local_batch_size + + patch_sidelength = h // num_patches + grid = _to_grid(input_image, patch_sidelength) + + fast_color_jitter_vmapped = jax.vmap(aug_fn, in_axes=0, out_axes=0) + fast_color_jitter_vmapped = jax.vmap( + fast_color_jitter_vmapped, in_axes=1, out_axes=1) + fast_color_jitter_vmapped = jax.vmap( + fast_color_jitter_vmapped, in_axes=2, out_axes=2) + + jittered_grid = fast_color_jitter_vmapped(grid, aug_params) + jittered = _from_grid(jittered_grid, patch_sidelength) + return jittered + diff --git a/scenic/projects/adversarialtraining/attacks/train_utils.py b/scenic/projects/adversarialtraining/attacks/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..2c20629ff17d3ce8a8e22dd32975b09a389202c5 --- /dev/null +++ b/scenic/projects/adversarialtraining/attacks/train_utils.py @@ -0,0 +1,53 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Train utils for attack code.""" +from typing import Tuple, Optional + +import jax +import jax.numpy as jnp + + +def bind_rng_to_host_device(rng: jnp.ndarray, + axis_name: str, + bind_to: Optional[str] = None) -> jnp.ndarray: + """Bind rng to host device.""" + if bind_to is None: + return rng + if bind_to == 'host': + return jax.random.fold_in(rng, jax.process_index()) + elif bind_to == 'device': + return jax.random.fold_in(rng, jax.lax.axis_index(axis_name)) + else: + raise ValueError( + "`bind_to` should be one of the `[None, 'host', 'device']`") + + +def unnormalize_imgnet(input_tensors): + return (input_tensors + 1.) / 2. + + +def normalize_minmax(tensor): + mn = jnp.min(tensor, axis=(-1, -2, -3), keepdims=True) + mx = jnp.max(tensor, axis=(-1, -2, -3), keepdims=True) + return (tensor - mn) / jnp.clip(mx - mn, min=1e-5) + + +def psum_metric_normalizer(metrics: Tuple[jnp.ndarray, jnp.ndarray] + ) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Applies psum over the given tuple of (metric, normalizer).""" + psumed_metric = jnp.sum(jax.lax.psum(metrics[0], axis_name='batch')) + psumed_normalizer = jnp.sum( + jax.lax.psum(metrics[1], axis_name='batch')) + return (psumed_metric, psumed_normalizer) diff --git a/scenic/projects/adversarialtraining/classification_adversarialtraining_trainer.py b/scenic/projects/adversarialtraining/classification_adversarialtraining_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..9451be0a5ce74a66add5c30f6ade1dfbc8f988ee --- /dev/null +++ b/scenic/projects/adversarialtraining/classification_adversarialtraining_trainer.py @@ -0,0 +1,492 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script.""" + +import functools +from typing import Any, Callable, Dict, Optional, Tuple, Type + +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.adversarialtraining import train_utils as adv_train_utils +from scenic.projects.adversarialtraining.attacks import attack_compute +from scenic.projects.adversarialtraining.attacks import attack_metrics +from scenic.projects.adversarialtraining.models import models +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils + + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] +LrFn = Callable[[jnp.ndarray], jnp.ndarray] + + +def unnormalize_imgnet(input_tensors): + return (input_tensors + 1.) / 2. + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + lr_fn: LrFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False, +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[ + str, jnp.ndarray], Dict[str, jnp.ndarray]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + lr_fn: The learning rate fn used for the logging the learning rate. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, computed metrics, and learning rate for logging. + """ + new_rng, rng = jax.random.split(train_state.rng) + + images_to_log = {} + images_to_log['input_image_before_mixup'] = unnormalize_imgnet( + batch['inputs']) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + rng=mixup_rng) + + images_to_log['input_image_after_mixup'] = unnormalize_imgnet(batch['inputs']) + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn_single(params, + model_state, + batch, + use_aux_batchnorm, + use_aux_dropout, + train_var=True): + variables = {'params': params, **model_state} + apply_kwargs = models.get_kwargs(config, use_aux_batchnorm, use_aux_dropout) + logits, new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=train_var, + rngs={'dropout': dropout_rng}, + debug=debug, + **apply_kwargs) + loss = loss_fn(logits, batch, variables['params']) + return loss, (new_model_state, logits) + + if not config.adversarial_augmentation_mode: + + def training_loss_fn(params, model_state): + total_loss, (new_model_state, logits) = training_loss_fn_single( + params, + model_state, + batch, + use_aux_batchnorm=False, + use_aux_dropout=False) + misc_artifacts = {} + return total_loss, (new_model_state, logits, misc_artifacts) + elif config.adversarial_augmentation_mode == 'advprop_pyramid': + + def training_loss_fn(params, model_state): + clean_inputs = batch['inputs'] + clean_loss, (clean_model_state, clean_logits) = training_loss_fn_single( + params, + model_state, + batch, + use_aux_batchnorm=False, + use_aux_dropout=False) + + adv_image, adv_perturbation, misc_artifacts = attack_compute.get_adversarial_image_and_perturbation( + batch=batch, + clean_logits=clean_logits, + config=config, + training_loss_fn_single=training_loss_fn_single, + train_state=train_state, + dropout_rng=dropout_rng, + lr_rng=rng) + + adv_batch = batch + adv_batch['inputs'] = adv_image + adv_loss, (adv_model_state, adv_logits) = training_loss_fn_single( + params, + clean_model_state, + adv_batch, + use_aux_batchnorm=True, + use_aux_dropout=True) + + adv_loss_weight = config.advprop.adv_loss_weight + total_loss = clean_loss + adv_loss_weight * adv_loss + + # set up misc_artifacts + misc_artifacts['logits'] = clean_logits + misc_artifacts['adv_logits'] = adv_logits + misc_artifacts['image_diffs'] = (adv_image - + clean_inputs).sum(axis=(1, 2, 3)) + misc_artifacts['adv_loss_weight'] = adv_loss_weight + misc_artifacts['adv_logits'] = adv_logits + misc_artifacts['loss'] = clean_loss + misc_artifacts['adv_loss'] = adv_loss + misc_artifacts['adv_image'] = adv_image + misc_artifacts['adv_perturbation'] = adv_perturbation + + return total_loss, (adv_model_state, clean_logits, misc_artifacts) + else: + raise NotImplementedError('Unrecognized adversarial augmentation mode.') + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + + computed_gradient = compute_gradient_fn(train_state.params, + train_state.model_state) + + (train_cost, (new_model_state, logits, + misc_artifacts)), grad = computed_gradient + + metrics = metrics_fn(logits, batch) + if not config.adversarial_augmentation_mode: + metrics, images_to_log = attack_metrics.get_metrics(misc_artifacts, batch, + metrics, images_to_log, + metrics_fn) + + del train_cost + + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm', None) is not None: + grad = clip_grads(grad, config.max_grad_norm) + + updates, new_opt_state = train_state.tx.update(grad, train_state.opt_state, + train_state.params) + new_params = optax.apply_updates(params=train_state.params, updates=updates) + + training_logs = {} + training_logs['learning_rate'] = lr_fn(train_state.global_step) + + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + return new_train_state, metrics, training_logs, images_to_log + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], jnp.ndarray]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + debug: Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and logits. + """ + variables = { + 'params': train_state.params, + **train_state.model_state + } + logits = flax_model.apply( + variables, batch['inputs'], train=False, mutable=False, debug=debug) + metrics = metrics_fn(logits, batch) + return metrics, logits + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_state that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Get learning rate scheduler. + learning_rate_fn = lr_schedules.get_learning_rate_fn(config) + + # Create optimizer. + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + optimizer = optimizers.get_optimizer( + config.optimizer_configs, + learning_rate_fn=learning_rate_fn, + params=params) + opt_state = jax.jit(optimizer.init, backend='cpu')(params) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + rng, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=optimizer, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + lr_fn=learning_rate_fn, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + train_metrics, train_images, extra_training_logs = [], [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs, t_images = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + # Additional training logs: learning rate: + extra_training_logs.append(t_logs['learning_rate']) + for h in hooks: + h(step) + chrono.pause() # Below are once-in-a-while ops -> pause. + ###################### LOG TRAIN SUMMARY ######################## + if (step % log_summary_steps == 1) or (step == total_steps): + if lead_host: + chrono.tick(step, writer=writer, write_note=write_note) + train_images.append(t_images) + # train_metrics is list of a dictionaries of metrics, where the shape of + # the metrics[key] is [n_local_devices]. However, because metric functions + # have a psum, we have already summed across the whole sharded batch, and + # what's returned is n_local_devices copies of the same summed metric. + # So we do unreplicate and fetch them to host using `unreplicate_and_get`. + train_summary = adv_train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(jax.device_get, train_metrics), + train_images=jax.tree_util.tree_map(jax.device_get, train_images), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_training_logs), + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, train_images, extra_training_logs = [], [], [] + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + with report_progress.timed('eval'): + eval_metrics = [] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + for _ in range(steps_per_eval): + eval_batch = next(dataset.valid_iter) + e_metrics, _ = eval_step_pmapped(train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + eval_summary = train_utils.log_eval_summary( + step=step, eval_metrics=eval_metrics, writer=writer) + writer.flush() + del eval_metrics + ##################### CHECKPOINTING ################### + if ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)) and config.checkpoint: + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + train_utils.save_checkpoint(workdir, unrep_train_state) + del unrep_train_state + chrono.resume() # un-pause now + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regresesion testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/adversarialtraining/configs/imagenet_train/imagenet_regvit_config.py b/scenic/projects/adversarialtraining/configs/imagenet_train/imagenet_regvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..3e98443b7ab5c03edf315d81bac591ffbc3faa79 --- /dev/null +++ b/scenic/projects/adversarialtraining/configs/imagenet_train/imagenet_regvit_config.py @@ -0,0 +1,207 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for Regularized ViT on ImageNet2012. + +Based on: https://arxiv.org/pdf/2106.10270.pdf + +""" +# pylint: disable=line-too-long + +import ml_collections + +_IMAGENET_TRAIN_SIZE = 1281167 +NUM_CLASSES = 1000 + +VARIANT = 'B_16' + + +def get_default_adversarial_config(): + """Get default adversarial config.""" + # Adversarial Training + config = ml_collections.ConfigDict() + config.adversarial_augmentation_mode = '' + config.advprop = ml_collections.ConfigDict() + config.advprop.init_mode = 'zero' + config.advprop.optimizer = 'GradientDescent' + config.advprop.use_sign = True + config.advprop.epsilon = 6.0 / 255.0 + config.advprop.num_steps = 5 + config.advprop.pyramid_sizes = '()' + config.advprop.pyramid_scalars = '()' + config.advprop.attack_fn_str = 'random_target' + config.advprop.attack_in_train_mode = True + config.advprop.aux_update_in_train_mode = True + config.advprop.adv_loss_weight = 1.0 + config.advprop.aux_dropout_rate = 0.1 # equal to clean param + config.advprop.aux_stochastic_depth = 0.1 # equal to clean param + config.advprop.sd_direction = 'drop_late' + config.advprop.aux_sd_direction = 'drop_late' + + advprop_lr_configs = ml_collections.ConfigDict() + advprop_lr_configs.learning_rate_schedule = 'compound' + advprop_lr_configs.factors = 'constant' + advprop_lr_configs.warmup_steps = 0 + advprop_lr_configs.steps_per_cycle = 5 + advprop_lr_configs.base_learning_rate = 1.0 / 255.0 + config.advprop.lr_configs = advprop_lr_configs + + # Advprop has to know about the number of classes because it's not + # reported in a consistent style in other types of configs. + config.advprop.num_classes = 1000 + config.advprop.no_metrics = False # for colab usage + return config + + +def get_config(variant=VARIANT, runlocal=''): + """Returns the ViT experiment configuration for ImageNet.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.update(get_default_adversarial_config()) + + config.experiment_name = 'imagenet-regularized_vit' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.rvt_aug_strength = 0 + config.dataset_configs.dataset = 'imagenet2012' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train' + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)|flip_lr' + '|randaug(2, 15)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|resize_small(256)|central_crop(224)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 250_000 + + # Model. + version, patch = variant.split('_') + config.model_name = 'vit_advtrain_multilabel_classification' + config.model = ml_collections.ConfigDict() + + config.model.hidden_size = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = {'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config.model.num_layers = {'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0.0 + config.model.dropout_rate = 0.1 + config.model.stochastic_depth = 0.1 + config.model_dtype_str = 'float32' + + config.activation = ml_collections.ConfigDict() + config.activation.activation_str = 'gelu' + config.activation.activation_params = (0.0, 0.0) + config.activation.application_str = '0-12' + + # Training. + config.trainer_name = 'classification_adversarialtraining_trainer' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.optimizer = 'adamw' + config.optimizer_configs.b1 = 0.9 + config.optimizer_configs.b2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 300 + config.log_eval_steps = 1000 + config.batch_size = 8 if runlocal else 4096 + config.rng_seed = 0 + config.init_head_bias = -6.9 # -log(1000) + + # Learning rate. + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 0.001 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = base_lr + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.5 + + # Logging. + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.xprof = True # Profile using xprof + config.checkpoint = True # do checkpointing + config.checkpoint_steps = 5000 + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + + return config + + +def get_hyper(hyper): + return hyper.product([ + hyper.sweep('config.advprop.attack_fn_str', ['random_target']), + hyper.sweep('config.advprop.epsilon', [6 / 255]), + hyper.sweep('config.advprop.lr_configs.base_learning_rate', [1 / 255]), + hyper.sweep('config.advprop.num_steps', [5]), + hyper.chainit([ + # Baseline, reg-vit + hyper.product([ + hyper.sweep('config.adversarial_augmentation_mode', ['']), + ]), + # Pixel + hyper.product([ + hyper.sweep('config.adversarial_augmentation_mode', + ['advprop_pyramid']), + hyper.sweep('config.advprop.pyramid_sizes', ['(224)']), + hyper.sweep('config.advprop.pyramid_scalars', ['(1)']), + ]), + # Pyramid + hyper.product([ + hyper.sweep('config.adversarial_augmentation_mode', + ['advprop_pyramid']), + hyper.sweep('config.advprop.pyramid_sizes', ['(7, 14, 224)']), + hyper.sweep('config.advprop.pyramid_scalars', ['(20, 10, 1)']), + ]), + ]), + ]) diff --git a/scenic/projects/adversarialtraining/images/pyramidat_fig1.gif b/scenic/projects/adversarialtraining/images/pyramidat_fig1.gif new file mode 100644 index 0000000000000000000000000000000000000000..e8492529489ba420ece6663d51126cf8f4e716f8 --- /dev/null +++ b/scenic/projects/adversarialtraining/images/pyramidat_fig1.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ccd41d50fae9275f4aa16d2a3c85090734b7fbde248c46c393441eec5c3ec509 +size 1071816 diff --git a/scenic/projects/adversarialtraining/images/pyramidat_table.gif b/scenic/projects/adversarialtraining/images/pyramidat_table.gif new file mode 100644 index 0000000000000000000000000000000000000000..b61a6ad7b9775a64ff29fb4366769982925426fe --- /dev/null +++ b/scenic/projects/adversarialtraining/images/pyramidat_table.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e8f0b59a8586782daa5407e1bd4bc2f229c7311b81b8c07df10df5e3a1d82ad +size 2517015 diff --git a/scenic/projects/adversarialtraining/main.py b/scenic/projects/adversarialtraining/main.py new file mode 100644 index 0000000000000000000000000000000000000000..63f98fabbbcb03196cc99a34a0ac062d4b8f2715 --- /dev/null +++ b/scenic/projects/adversarialtraining/main.py @@ -0,0 +1,53 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for Scenic.""" + +from absl import flags +from clu import metric_writers +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.adversarialtraining import classification_adversarialtraining_trainer +from scenic.projects.adversarialtraining.models import models +from scenic.train_lib import train_utils + +FLAGS = flags.FLAGS + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the Scenic.""" + + # Enable wrapping of all module calls in a named_call for easier profiling: + nn.enable_named_call() + + model_cls = models.get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + + classification_adversarialtraining_trainer.train( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/adversarialtraining/models/__init__.py b/scenic/projects/adversarialtraining/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/adversarialtraining/models/models.py b/scenic/projects/adversarialtraining/models/models.py new file mode 100644 index 0000000000000000000000000000000000000000..e7bdbdcff9316153c856ede03aba9b7a28b32073 --- /dev/null +++ b/scenic/projects/adversarialtraining/models/models.py @@ -0,0 +1,68 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Registry for the available models we can train.""" + +from typing import Type + +from scenic.model_lib.base_models import base_model +from scenic.projects.adversarialtraining.models import vit_advtrain + +ALL_MODELS = {} + +CLASSIFICATION_MODELS = { + 'vit_advtrain_multilabel_classification': + vit_advtrain.ViTMultiLabelClassificationModel, +} + + +ALL_MODELS.update(CLASSIFICATION_MODELS) + + +def get_model_cls(model_name: str) -> Type[base_model.BaseModel]: + """Get the corresponding model class based on the model string. + + API: + ``` + model_builder= get_model_cls('fully_connected') + model = model_builder(config, ...) + ``` + + Args: + model_name: str; Name of the model, e.g. 'fully_connected'. + + Returns: + The model architecture (a flax Model) along with its default config. + Raises: + ValueError if model_name is unrecognized. + """ + if model_name not in ALL_MODELS.keys(): + raise ValueError('Unrecognized model: {}'.format(model_name)) + return ALL_MODELS[model_name] + + +def get_kwargs(config, use_aux_batchnorm, use_aux_dropout): + """Get parameterization for call.""" + if config.model_name == 'resnet_advtrain_classification': + apply_kwargs = { + 'use_aux_batchnorm': use_aux_batchnorm, + 'use_aux_dropout': use_aux_dropout, + } + elif config.model_name == 'vit_advtrain_multilabel_classification': + apply_kwargs = { + 'use_aux_dropout': use_aux_dropout, + } + else: + raise ValueError('Unknown model: %s' % config.model_name) + return apply_kwargs diff --git a/scenic/projects/adversarialtraining/models/vit_advtrain.py b/scenic/projects/adversarialtraining/models/vit_advtrain.py new file mode 100644 index 0000000000000000000000000000000000000000..602e514649b3839bc90f7ed3517de7eef3a07a40 --- /dev/null +++ b/scenic/projects/adversarialtraining/models/vit_advtrain.py @@ -0,0 +1,498 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Vision Transformer.""" + +from typing import Any, Callable, Optional, Sequence + +from absl import logging +import flax +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models.multilabel_classification_model import MultiLabelClassificationModel +from scenic.model_lib.layers import attention_layers +from scenic.model_lib.layers import nn_layers +import scipy + + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +class SplitDropout(nn.Module): + """Dropout with two paths.""" + + rate: float = 0.1 + aux_rate: float = 0.2 + + @nn.compact + def __call__(self, x, deterministic: bool, + use_aux_dropout: bool) -> jnp.ndarray: + x1 = nn.Dropout(rate=self.rate)(x, deterministic) + x2 = nn.Dropout(rate=self.aux_rate)(x, deterministic) + if use_aux_dropout: + return x2 + else: + return x1 + + +class AddPositionEmbs(nn.Module): + """Adds learned positional embeddings to the inputs. + + Attributes: + posemb_init: Positional embedding initializer. + + Returns: + Output in shape `[bs, timesteps, in_dim]`. + """ + posemb_init: Initializer = nn.initializers.normal(stddev=0.02) # From BERT. + + @nn.compact + def __call__(self, inputs: jnp.ndarray) -> jnp.ndarray: + # Inputs.shape is (batch_size, seq_len, emb_dim). + assert inputs.ndim == 3, ('Number of dimensions should be 3,' + ' but it is: %d' % inputs.ndim) + pos_emb_shape = (1, inputs.shape[1], inputs.shape[2]) + pe = self.param('pos_embedding', self.posemb_init, pos_emb_shape, + inputs.dtype) + return inputs + pe + + +class SplitStochasticDepth(nn.Module): + """Stochastic depth with two paths.""" + stochastic_depth: float + aux_stochastic_depth: float + + @nn.compact + def __call__(self, x: jnp.ndarray, deterministic: bool, + use_aux_dropout: bool) -> jnp.ndarray: + """Generate the stochastic depth mask in order to apply layer-drop.""" + if not deterministic and use_aux_dropout: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + mask = jax.random.bernoulli( + self.make_rng('dropout'), self.aux_stochastic_depth, shape) + return x * (1.0 - mask) + if not deterministic and not use_aux_dropout: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + mask = jax.random.bernoulli( + self.make_rng('dropout'), self.stochastic_depth, shape) + return x * (1.0 - mask) + else: + return x + + +class Encoder1DBlock(nn.Module): + """Transformer encoder layer. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: Number of self-attention heads. + dtype: The dtype of the computation (default: float32). + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_depth: probability of dropping a layer linearly grows from 0 to + the provided value. + + Returns: + output after transformer encoder block. + """ + mlp_dim: int + num_heads: int + dtype: Any = jnp.float32 + dropout_rate: float = 0.1 + aux_dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + aux_stochastic_depth: float = 0.0 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, deterministic: bool, + use_aux_dropout: bool) -> jnp.ndarray: + """Applies Encoder1DBlock module.""" + # Attention block. + assert inputs.ndim == 3 + x = nn.LayerNorm(dtype=self.dtype)(inputs) + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + dtype=self.dtype, + kernel_init=nn.initializers.xavier_uniform(), + broadcast_dropout=False, + deterministic=deterministic, + dropout_rate=self.attention_dropout_rate)(x, x) + x = SplitDropout( + rate=self.dropout_rate, + aux_rate=self.aux_dropout_rate)(x, deterministic, use_aux_dropout) + x = SplitStochasticDepth(self.stochastic_depth, self.aux_stochastic_depth)( + x, deterministic, use_aux_dropout) + inputs + + # MLP block. + y = nn.LayerNorm(dtype=self.dtype)(x) + y = attention_layers.MlpBlock( + mlp_dim=self.mlp_dim, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6))( + y, deterministic=deterministic) + + return SplitStochasticDepth(self.stochastic_depth, + self.aux_stochastic_depth)(y, deterministic, + use_aux_dropout) + x + + +class Encoder(nn.Module): + """Transformer Encoder. + + Attributes: + num_layers: Number of layers. + mlp_dim: Dimension of the mlp on top of attention block. + inputs_positions: Input subsequence positions for packed examples. + dropout_rate: Dropout rate. + stochastic_depth: probability of dropping a layer linearly grows + from 0 to the provided value. Our implementation of stochastic depth + follows timm library, which does per-example layer dropping and uses + independent dropping patterns for each skip-connection. + dtype: Dtype of activations. + """ + num_layers: int + mlp_dim: int + num_heads: int + dropout_rate: float = 0.1 + aux_dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + aux_stochastic_depth: float = 0.0 + sd_direction: str = 'drop_late' + aux_sd_direction: str = 'drop_late' + dtype: Any = jnp.float32 + + def get_sd_coef(self, sd_str, lyr): + mean_of_all_layers = np.mean( + [x / max(self.num_layers - 1, 1) for x in range(self.num_layers)]) + if sd_str == 'drop_flat': + sd_coef = mean_of_all_layers + elif sd_str == 'drop_late': + sd_coef = lyr / max(self.num_layers - 1, 1) + elif sd_str == 'drop_early': + sd_coef = max(self.num_layers - 1 - lyr, 0) / max(self.num_layers - 1, 1) + else: + raise NotImplementedError('not implemented sd_direction %s' % sd_str) + return sd_coef + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + *, + train: bool = False, + use_aux_dropout: bool = False): + """Applies Transformer model on the inputs.""" + + assert inputs.ndim == 3 # Shape is `[batch, len, emb]`. + dtype = jax.dtypes.canonicalize_dtype(self.dtype) + + x = AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name='posembed_input')( + inputs) + x = SplitDropout( + rate=self.dropout_rate, aux_rate=self.aux_dropout_rate)( + x, deterministic=not train, use_aux_dropout=use_aux_dropout) + + # Input Encoder. + for lyr in range(self.num_layers): + + clean_sd_coef = self.get_sd_coef(self.sd_direction, lyr) + aux_sd_coef = self.get_sd_coef(self.aux_sd_direction, lyr) + + # print('sd', self.sd_direction, lyr, sd_coef, flush=True) + x = Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + aux_dropout_rate=self.aux_dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=clean_sd_coef * self.stochastic_depth, + aux_stochastic_depth=aux_sd_coef * self.aux_stochastic_depth, + name=f'encoderblock_{lyr}', + dtype=dtype)( + x, deterministic=not train, use_aux_dropout=use_aux_dropout) + + encoded = nn.LayerNorm(name='encoder_norm')(x) + return encoded + + +class ViT(nn.Module): + """Vision Transformer model. + + Attributes: + num_classes: Number of output classes. + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + representation_size: Size of the representation layer in the model's head. + if None, we skip the extra projection + tanh activation at the end. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + dtype: JAX data type for activations. + """ + + num_classes: int + mlp_dim: int + num_layers: int + num_heads: int + patches: ml_collections.ConfigDict + hidden_size: int + representation_size: Optional[int] = None + dropout_rate: float = 0.1 + aux_dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + aux_stochastic_depth: float = 0.0 + sd_direction: str = 'drop_flat' + aux_sd_direction: str = 'drop_flat' + classifier: str = 'gap' + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, + x: jnp.ndarray, + *, + train: bool, + use_aux_dropout: bool = False, + debug: bool = False): + # print('use_aux_dropout', use_aux_dropout) + + n, h, w, c = x.shape + if self.patches.get('grid') is not None: + gh, gw = self.patches.grid + fh, fw = h // gh, w // gw + else: + fh, fw = self.patches.size + gh, gw = h // fh, w // fw + if self.hidden_size: # We can merge s2d+emb into a single conv. + x = nn.Conv( + self.hidden_size, (fh, fw), + strides=(fh, fw), + padding='VALID', + name='embedding')( + x) + else: + # This path often results in excessive padding. + x = jnp.reshape(x, [n, gh, fh, gw, fw, c]) + x = jnp.transpose(x, [0, 1, 3, 2, 4, 5]) + x = jnp.reshape(x, [n, gh, gw, -1]) + + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + + # If we want to add a class token, add it here. + if self.classifier == 'token': + cls = self.param('cls', nn.initializers.zeros, (1, 1, c), x.dtype) + cls = jnp.tile(cls, [n, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + + x = Encoder( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + aux_dropout_rate=self.aux_dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=self.stochastic_depth, + aux_stochastic_depth=self.aux_stochastic_depth, + sd_direction=self.sd_direction, + aux_sd_direction=self.aux_sd_direction, + dtype=self.dtype, + name='Transformer')( + x, train=train, use_aux_dropout=use_aux_dropout) + + if self.classifier in ('token', '0'): + x = x[:, 0] + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=1) + + if self.representation_size is not None: + x = nn.Dense(self.representation_size, name='pre_logits')(x) + x = nn.tanh(x) + else: + x = nn_layers.IdentityLayer(name='pre_logits')(x) + x = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x) + return x + + +class ViTMultiLabelClassificationModel(MultiLabelClassificationModel): + """Vision Transformer model for multi-label classification task.""" + + def build_flax_model(self)-> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return ViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + representation_size=self.config.model.representation_size, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + aux_dropout_rate=self.config.advprop.get('aux_dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + stochastic_depth=self.config.model.get('stochastic_depth', 0.0), + aux_stochastic_depth=self.config.advprop.get('aux_stochastic_depth', + 0.0), + sd_direction=self.config.advprop.get('sd_direction', 'drop_flat'), + aux_sd_direction=self.config.advprop.get('aux_sd_direction', + 'drop_flat'), + dtype=model_dtype, + ) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return ml_collections.ConfigDict({ + 'model': + dict( + num_heads=2, + num_layers=1, + representation_size=16, + mlp_dim=32, + dropout_rate=0., + attention_dropout_rate=0., + hidden_size=16, + patches={'grid': (4, 4)}, + classifier='gap', + data_dtype_str='float32') + }) + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is writen to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return init_vit_from_train_state(train_state, restored_train_state, + self.config, restored_model_cfg) + + +def init_vit_from_train_state( + train_state: Any, restored_train_state: Any, + model_cfg: ml_collections.ConfigDict, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is writen to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of a + pretrained model. + model_cfg: Configuration of the model. Usually used for some asserts. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + params = flax.core.unfreeze(train_state.optimizer.target) + restored_params = flax.core.unfreeze(restored_train_state.optimizer.target) + + # Start moving parameters, one-by-one and apply changes if needed. + for m_key, m_params in restored_params.items(): + if m_key == 'output_projection': + # For the classifier head, we use a the randomly initialized params and + # ignore the the one from pretrained model. + pass + + elif m_key == 'pre_logits': + if model_cfg.model.representation_size is None: + # We don't have representation_size in the new model, so let's ignore + # it from the pretained model, in case it has it. + # Note, removing the key from the dictionary is necessary to prevent + # obscure errors from the Flax optimizer. + params.pop(m_key, None) + else: + assert restored_model_cfg.model.representation_size + params[m_key] = m_params + + elif m_key == 'Transformer': + for tm_key, tm_params in m_params.items(): + if tm_key == 'posembed_input': # Might need resolution change. + posemb = params[m_key]['posembed_input']['pos_embedding'] + restored_posemb = m_params['posembed_input']['pos_embedding'] + + if restored_posemb.shape != posemb.shape: + # Rescale the grid of pos, embeddings: param shape is (1, N, d). + logging.info('Resized variant: %s to %s', restored_posemb.shape, + posemb.shape) + ntok = posemb.shape[1] + if restored_model_cfg.model.classifier == 'token': + # The first token is the CLS token. + cls_tok = restored_posemb[:, :1] + restored_posemb_grid = restored_posemb[0, 1:] + ntok -= 1 + else: + cls_tok = restored_posemb[:, :0] + restored_posemb_grid = restored_posemb[0] + + restored_gs = int(np.sqrt(len(restored_posemb_grid))) + gs = int(np.sqrt(ntok)) + if restored_gs != gs: # We need resolution change. + logging.info('Grid-size from %s to %s.', restored_gs, gs) + restored_posemb_grid = restored_posemb_grid.reshape( + restored_gs, restored_gs, -1) + zoom = (gs / restored_gs, gs / restored_gs, 1) + restored_posemb_grid = scipy.ndimage.zoom( + restored_posemb_grid, zoom, order=1) + restored_posemb_grid = restored_posemb_grid.reshape( + 1, gs * gs, -1) + # Attache the CLS token again. + restored_posemb = jnp.array( + np.concatenate([cls_tok, restored_posemb_grid], axis=1)) + + params[m_key][tm_key]['pos_embedding'] = restored_posemb + else: # Other parameters of the Transformer encoder. + params[m_key][tm_key] = tm_params + + else: + # Use the rest as they are in the pretrianed model. + params[m_key] = m_params + + return train_state.replace( + optimizer=train_state.optimizer.replace(target=flax.core.freeze(params))) diff --git a/scenic/projects/adversarialtraining/train_utils.py b/scenic/projects/adversarialtraining/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..76e2fba563abb0735d394a7e6656c610a2f14f3f --- /dev/null +++ b/scenic/projects/adversarialtraining/train_utils.py @@ -0,0 +1,91 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""For log_train_summary.""" + +from typing import Any, Callable, Dict, Tuple, Sequence, Optional, Mapping, Union + +from clu import metric_writers +import jax +import jax.numpy as jnp + +from scenic.train_lib import train_utils + +# JAX team is working on type annotation for pytree: +# https://github.com/jax-ml/jax/issues/1555 +PyTree = Union[Mapping[str, Mapping], Any] +PRNGKey = jnp.ndarray + + +def log_train_summary(step: int, + *, + writer: metric_writers.MetricWriter, + train_metrics: Sequence[Dict[str, Tuple[float, int]]], + train_images: Any = None, + extra_training_logs: Optional[Sequence[Dict[str, + Any]]] = None, + metrics_normalizer_fn: Optional[ + Callable[[Dict[str, Tuple[float, int]], str], + Dict[str, float]]] = None, + prefix: str = 'train', + step_idx: Optional[int] = None, + key_separator: str = '_') -> Dict[str, float]: + """Computes and logs train metrics.""" + if step_idx is None: + step_idx = step + + def fmt(i, p): + return f'%.{p}d' % i + + if train_images is not None: + train_images = train_utils.stack_forest( + train_images) # key -> list(ndarray) + train_images = jax.tree_util.tree_map(lambda x: jnp.concatenate(x)[:4], + train_images) + new_train_images = {} + for key, value in train_images.items(): + for (batch_idx, image) in enumerate(value): + new_train_images[ + f'{key}/bi{fmt(batch_idx,p=2)}/s{fmt(step_idx,p=8)}'] = image[0, + ...] + + writer.write_images(step, new_train_images) + + ##### Prepare metrics: + # Get metrics from devices: + train_metrics = train_utils.stack_forest(train_metrics) + # Compute the sum over all examples in all batches: + train_metrics_summary = jax.tree_util.tree_map(lambda x: x.sum(), + train_metrics) + # Normalize metrics by the total number of exampels: + metrics_normalizer_fn = metrics_normalizer_fn or train_utils.normalize_metrics_summary + train_metrics_summary = metrics_normalizer_fn(train_metrics_summary, 'train') + + ##### Prepare additional training logs: + # If None, set to an empty dictionary. + extra_training_logs = extra_training_logs or {} + train_logs = train_utils.stack_forest(extra_training_logs) + + # Metrics: + writer.write_scalars( + step, { + key_separator.join((prefix, key)): val + for key, val in train_metrics_summary.items() + }) + # Additional logs: + writer.write_scalars(step, + {key: val.mean() for key, val in train_logs.items()}) + + writer.flush() + return train_metrics_summary diff --git a/scenic/projects/av_mae/README.md b/scenic/projects/av_mae/README.md new file mode 100644 index 0000000000000000000000000000000000000000..5cd2d558b36cb2c08eec0c0d836762b56318f21d --- /dev/null +++ b/scenic/projects/av_mae/README.md @@ -0,0 +1,117 @@ +## Audiovisual Masked Autoencoders + +This repository is the JAX implementation of our ICCV 2023 paper, +[Audiovisual Masked Autoencoders](https://arxiv.org/abs/2212.05922). + +Audiovisual Masked Autoencoders (AV-MAE) pretrains models on video and audio +data jointly, and shows improvements in both unimodal and multimodal downstream +tasks. + +#### Getting Started + +This project, like others in Scenic, uses [configuration files](configs). + +To pretrain a model on AudioSet, run the following command: + +```shell +$ python -m scenic.projects.av_mae.main \ + --config=scenic/projects/av_mae/configs/audioset/pretrain.py \ + --workdir=av_mae/ +``` + +And then to finetune this model, run: + +```shell +$ python -m scenic.projects.av_mae.main \ + --config=scenic/projects/av_mae/configs/audioset/finetune.py \ + --workdir=av_mae/ +``` + +Make sure to set `config.init_from.checkpoint_path` to the pretrained model +when finetuning. + +#### Model Zoo + +The following table contains AV-MAE checkpoints trained on various datasets. +Checkpoints are provided as Scenic checkpoints compatible with +[Flax](https://github.com/google/flax), and in +Tensorflow [SavedModel](https://www.tensorflow.org/guide/saved_model) format +for easy inference. + +| Dataset | Model size | Pretraining modalities | Pretrained model | Finetuning modalities | Finetuned model | mAP / Accuracy | +|----------|------------|------------------------|-------------------|-----------------------|-------------------|----------------| +| AudioSet | Large | audio, video | [Config](configs/audioset/pretrain.py)
[Checkpoint](https://storage.googleapis.com/scenic-bucket/av_mae/audioset/as2m_selfsup_audiovisual/checkpoint)
[TF SavedModel](https://storage.googleapis.com/scenic-bucket/av_mae/audioset/as2m_selfsup_audiovisual/tf_saved_model.zip) | audio, video | [Config](configs/audioset/finetune.py)
[Checkpoint](https://storage.googleapis.com/scenic-bucket/av_mae/audioset/as2m_selfsup_audiovisual_finetuned_audiovisual/checkpoint)
[TF SavedModel](https://storage.googleapis.com/scenic-bucket/av_mae/audioset/as2m_selfsup_audiovisual_finetuned_audiovisual/tf_saved_model.zip) | 51.8 | +| | | | | audio | [Config](configs/audioset/finetune.py)
[Checkpoint](https://storage.googleapis.com/scenic-bucket/av_mae/audioset/as2m_selfsup_audiovisual_finetuned_audio/checkpoint)
[TF SavedModel](https://storage.googleapis.com/scenic-bucket/av_mae/audioset/as2m_selfsup_audiovisual_finetuned_audio/tf_saved_model.zip) | 46.6 | +| | | | | video | [Config](configs/audioset/finetune.py)
[Checkpoint](https://storage.googleapis.com/scenic-bucket/av_mae/audioset/as2m_selfsup_audiovisual_finetuned_video/checkpoint)
[TF SavedModel](https://storage.googleapis.com/scenic-bucket/av_mae/audioset/as2m_selfsup_audiovisual_finetuned_video/tf_saved_model.zip) | 31.1 | +| | | audio | [Config](configs/audioset/pretrain.py#L144)
[Checkpoint](https://storage.googleapis.com/scenic-bucket/av_mae/audioset/as2m_selfsup_audio/checkpoint)
[TF SavedModel](https://storage.googleapis.com/scenic-bucket/av_mae/audioset/as2m_selfsup_audio/tf_saved_model.zip) | audio | [Config](configs/audioset/finetune.py)
[Checkpoint](https://storage.googleapis.com/scenic-bucket/av_mae/audioset/as2m_selfsup_audio_finetuned_audio/checkpoint)
[TF SavedModel](https://storage.googleapis.com/scenic-bucket/av_mae/audioset/as2m_selfsup_audio_finetuned_audio/tf_saved_model.zip) | 46.4 | +| VGGSound | Large | audio, video | [Config](configs/vggsound/pretrain.py)
[Checkpoint](https://storage.googleapis.com/scenic-bucket/av_mae/vggsound/vggsound_selfsup_audiovisual/checkpoint)
[TF SavedModel](https://storage.googleapis.com/scenic-bucket/av_mae/vggsound/vggsound_selfsup_audiovisual/tf_saved_model.zip) | audio, video | [Config](configs/vggsound/finetune.py)
[Checkpoint](https://storage.googleapis.com/scenic-bucket/av_mae/vggsound/vggsound_selfsup_audiovisual_finetuned_audiovisual/checkpoint)
[TF SavedModel](https://storage.googleapis.com/scenic-bucket/av_mae/vggsound/vggsound_selfsup_audiovisual_finetuned_audiovisual/tf_saved_model.zip) | 65.0 | +| | | | | audio | [Config](configs/vggsound/finetune.py)
[Checkpoint](https://storage.googleapis.com/scenic-bucket/av_mae/vggsound/vggsound_selfsup_audiovisual_finetuned_audio/checkpoint)
[TF SavedModel](https://storage.googleapis.com/scenic-bucket/av_mae/vggsound/vggsound_selfsup_audiovisual_finetuned_audio/tf_saved_model.zip) | 57.2 | +| | | | | video | [Config](configs/vggsound/finetune.py)
[Checkpoint](https://storage.googleapis.com/scenic-bucket/av_mae/vggsound/vggsound_selfsup_audiovisual_finetuned_video/checkpoint)
[TF SavedModel](https://storage.googleapis.com/scenic-bucket/av_mae/vggsound/vggsound_selfsup_audiovisual_finetuned_video/tf_saved_model.zip) | 50.3 | + +#### Using Tensorflow SavedModels + +###### Pretrained models + +Here, the inputs are audio waveforms (16kHz) and/or rgb frames, and the outputs +are token embeddings from the encoder of the model. + +The model is called as follows: + +```python +restored_tf_model = tf.saved_model.load(model_dir) +tf_output = restored_tf_model(tf_input) +tf_output_spec = tf_output['spectrogram'] # shape is [batch, num_tokens=496, hidden_dimension=1024]. +tf_output_rgb = tf_output['rgb'] # shape is [batch, num_tokens=1568, hidden_dimension=1024]. +``` + +where `tf_input = {'rgb': TensorSpec(shape=(None, 16, 224, 224, 3), dtype=tf.float32), 'waveform': TensorSpec(shape=(None, 160 000, 1), dtype=tf.float32)}` +for an input clip of 10s (as used for AudioSet). +Models pretrained on VGGSound use 8s inputs instead (128 000 samples). +Log-mel spectrograms are computed within the model. +For the model pretrained only with audio, the input signature is the same, but +only the `'waveform'` key is used. +A `None` shape means that any positive value can be used in the batch dimension. + +And `tf_output['spectrogram']` has shape `(batch, 496, 1024)` for 10s inputs, or `(batch, 400, 1024)` for 8s input, where 496=62x8=TxF and 400=50x8=TxF squared 16x16-patches that fit in the incoming spectrogram +(T and F denote the number of time- and frequency bins in the spectrogram respectively). +Similarly, `tf_output['rgb']` usually has shape `(batch, 1568, 1024)`, +where 1568=14x14x8=HxWxD 16x16x2-patches that fit in the incoming 16 RGB frames. + + +###### Finetuned models + +Here, the inputs are audio waveforms (16kHz) and/or rgb frames, and the outputs +are classification logits from the model. + +The model is called as follows: + +```python +restored_tf_model = tf.saved_model.load(model_dir) +tf_output = restored_tf_model(tf_input) # shape is [batch, num_classes]. +``` + +where `tf_input = {'rgb': TensorSpec(shape=(None, 32, 224, 224, 3), dtype=tf.float32), 'waveform': TensorSpec(shape=(None, 160 000, 1), dtype=tf.float32)}` +for an input clip of 10s (as used for AudioSet). +Models finetuned on VGGSound use 8s inputs instead (128 000 samples). +Log-mel spectrograms are computed within the model. +For the models finetuned with only one modality, +the input signature is the same, but only one key is used +(`'rgb'` or `'waveform'`). +A `None` shape means that any positive value can be used in the batch dimension. + +`tf_output` has shape `(batch, num_classes)`, where the last dimension corresponds +to the classification logits (527 for AudioSet and 309 for VGGSound). + + +#### Reference + +If you use this project, please cite the following BibTeX entry: + +``` +@inproceedings{georgescu2023audiovisual, + title={Audiovisual Masked Autoencoders}, + author={Georgescu, Mariana-Iuliana and Fonseca, Eduardo and Ionescu, Radu Tudor and Lucic, Mario and Schmid, Cordelia and Arnab, Anurag}, + booktitle={International Conference on Computer Vision (ICCV)}, + year={2023} +} +``` diff --git a/scenic/projects/av_mae/base_model.py b/scenic/projects/av_mae/base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..263c6d0714064699d73929c961e3dc2c3ffbe579 --- /dev/null +++ b/scenic/projects/av_mae/base_model.py @@ -0,0 +1,318 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base model definition.""" + +import functools +from typing import Dict, Optional, Tuple, Union + +from immutabledict import immutabledict +import jax +import jax.numpy as jnp +import numpy as np + +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils +from scenic.model_lib.base_models import regression_model +from scenic.model_lib.layers import nn_ops + + +# TODO(aarnab): Compute validation metrics. +_REGRESSION_METRICS = immutabledict({ + 'mean_squared_error': + (functools.partial(model_utils.weighted_squared_error, axis=-1), + model_utils.num_examples) +}) + +Patch = Union[Tuple[int, int], Tuple[int, int, int]] + + +class FeatureTargets(): + RGB = 'rgb' + SPECTROGRAM = 'spectrogram' + + +def get_output_shapes(feature_target: str, + patch_size: Patch, + select_central_frame: Optional[bool] = None, + channels: int = 3): + """Returns the output shape, depending on the feature regression target.""" + if feature_target == FeatureTargets.RGB: + if len(patch_size) == 3 and select_central_frame: + output_elements = patch_size[:2] + (1, channels) + else: + output_elements = patch_size + (channels,) + return np.prod(np.array(output_elements)) + elif feature_target == FeatureTargets.SPECTROGRAM: + output_elements = patch_size + (channels,) + return np.prod(np.array(output_elements)) + else: + raise NotImplementedError('Other feature targets not implemented yet.') + + +def extract_tubelets_from_video( + x: jnp.ndarray, + tubelet_size: Tuple[int, int, int], + select_central_frame: bool) -> jnp.ndarray: + """Extracts tubelets from videos for use as regression targets. + + Args: + x: Input tensor of shape [batch, time, height, width, channels] + tubelet_size: Tuple containing tubelet/patch size parameterised as + [ph, pw, pt]. + select_central_frame: If True, select the central frame as the feature + regression target. + + Returns: + Tensor of shape [n, gt * gh * gw, pt * ph * pw * c] where + gt = t // pt, gh = h // ph, gw = w // pw. + """ + ph, pw, pt = tubelet_size + n, t, h, w, c = x.shape + gt, gh, gw = t // pt, h // ph, w // pw + x = x.reshape([n, gt, pt, gh, ph, gw, pw, c]) + # Shape is then [n, gt, gh, gw, pt, ph, pw, c]. + x = jnp.transpose(x, axes=[0, 1, 3, 5, 2, 4, 6, 7]) + if select_central_frame: + x = x[:, :, :, :, pt // 2, :, :, :] + pt = 1 + return x.reshape([n, gt * gh * gw, pt * ph * pw * c]) + + +def get_rgb_targets(inputs: jnp.ndarray, + patch_size: Patch, + select_central_frame: Optional[bool] = None, + reconstruct_grayscale: bool = False, + standardise_per_patch: bool = False, + standardise_per_patch_channels: bool = False + ) -> jnp.ndarray: + """Get RGB targets to use for feature regression. + + Here, the targets are the raw rgb patches of the image. + + Args: + inputs: Tensor of shape [b, h, w, c] or [b, t, h, w, c]. The former are + images, and the later video. + patch_size: The shape of the patch, defined as [ph, pw] for images, and + [ph, pw, pt] for video. + select_central_frame: If video and True, select the central frame as the + feature regression target. + reconstruct_grayscale: If True, the target patch is in grayscale rather + than rgb. + standardise_per_patch: If true, standardise each patch by subtracting the + mean and dividing by the standard deviation of that patch. + standardise_per_patch_channels: If true, standardise each patch by + subtracting the mean and dividing by the standard deviation of that patch + per channels. + + Returns: + Patched inputs. For images, shape is [b, gh * gw, ph * pw * c] where + gh = h // ph and gw = w // pw. + For video, shape is [b, gt * gh * gw, pt * ph * pw * c]. + """ + if not (inputs.ndim == 4 or inputs.ndim == 5): + raise ValueError('Inputs should be 4D (images) or 5D (video).') + + if reconstruct_grayscale: + # Reference for converting between RGB and grayscale. + # https://en.wikipedia.org/wiki/Luma_%28video%29 + # Also used in tf.image.rgb_to_grayscale + rgb_weights = jnp.tile(jnp.array([[0.2989, 0.5870, 0.1140]]), (3, 1)).T + inputs = jnp.matmul(inputs, rgb_weights) + + if inputs.ndim == 4: + batch = inputs.shape[0] + # Shape is [batch, ht, wt, hp, wp, c] + patched_image = nn_ops.patch_image(inputs, inputs_shape=None, + patch_size=patch_size) + num_tokens = patched_image.shape[1] * patched_image.shape[2] + patched_input = jnp.reshape(patched_image, (batch, num_tokens, -1)) + elif inputs.ndim == 5: + if select_central_frame is None: + raise ValueError('`select_central_frame` must be defined.') + patched_input = extract_tubelets_from_video( + inputs, + patch_size, + select_central_frame) + + if standardise_per_patch: + patched_input = jax.nn.standardize(patched_input, axis=-1, epsilon=1e-6) + elif standardise_per_patch_channels: + old_shape = patched_input.shape + batch, num_tokens = patched_input.shape[:2] + num_channels = inputs.shape[-1] + patched_input = jnp.reshape(patched_input, + (batch, num_tokens, -1, num_channels)) + patched_input = jax.nn.standardize(patched_input, axis=2, epsilon=1e-6) + patched_input = jnp.reshape(patched_input, old_shape) + + return patched_input + + +def get_spectogram_targets(inputs: jnp.ndarray, + patch_size: Patch, + standardise_per_patch: bool = False + ) -> jnp.ndarray: + """Get spectogram targets to use for feature regression. + + Here, the targets are the raw spectogram patches of the image. + + Args: + inputs: Tensor of shape [b, h, w, c]. + patch_size: The shape of the patch, defined as [ph, pw]. + standardise_per_patch: If true, standardise each patch by subtracting the + mean and dividing by the standard deviation of that patch. + + Returns: + Patched inputs. Shape is [b, gh * gw, ph * pw * c]. + """ + if inputs.ndim != 4: + raise ValueError('Inputs should be 4D.') + + if inputs.ndim == 4: + batch = inputs.shape[0] + # Shape is [batch, ht, wt, hp, wp, c] + patched_image = nn_ops.patch_image(inputs, inputs_shape=None, + patch_size=patch_size) + num_tokens = patched_image.shape[1] * patched_image.shape[2] + patched_input = jnp.reshape(patched_image, (batch, num_tokens, -1)) + + if standardise_per_patch: + patched_input = jax.nn.standardize(patched_input, axis=-1, epsilon=1e-6) + + return patched_input + + +def feature_regression_metrics_function( + predictions: jnp.ndarray, + prediction_masks: jnp.ndarray, + batch: base_model.Batch, + feature_target: str, + metrics: base_model.MetricNormalizerFnDict = _REGRESSION_METRICS, +) -> Dict[str, Tuple[float, int]]: + """Calculate metrics for the feature regression task. + + Currently we assume each metric_fn has the API: + ```metric_fn(predictions, targets, weights)``` + and returns an array of shape [batch,]. We also assume that to compute + the aggregate metric, one should sum across all batches, then divide by the + total samples seen. In this way we currently only support metrics of the 1/N + sum f(inputs, targets). Note, the caller is responsible for dividing by + the normalizer when computing the mean of each metric. + + Args: + predictions: Output of model in shape [batch, length]. + prediction_masks: Which of the predictions are valid. + batch: Batch (dict) with keys 'targets' and optionally 'batch_mask'. + feature_target: The feature target used for feature regression. + metrics: The regression metrics to evaluate. The key is the + name of the metric, and the value is the metrics function. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples of + (metric, normalizer). + """ + if feature_target == FeatureTargets.RGB: + targets = batch['target_rgb'] + else: + raise NotImplementedError( + f'Feature target {feature_target} not implemented') + + batch_mask = batch.get('batch_mask') + if batch_mask is None: + batch_mask = jnp.ones(prediction_masks.shape) + if batch_mask.ndim == 1: + n_batch = predictions.shape[0] + batch_mask = jnp.reshape(batch_mask, (n_batch, 1)) + weights = batch_mask * prediction_masks + + evaluated_metrics = {} + for key, val in metrics.items(): + evaluated_metrics[key] = model_utils.psum_metric_normalizer( + (val[0](predictions, targets, weights), val[1](predictions, targets, # pytype: disable=wrong-arg-types # jax-ndarray + weights))) + return evaluated_metrics # pytype: disable=bad-return-type # jax-ndarray + + +class MaskedFeatureRegressionModel(regression_model.RegressionModel): + """Defines commonalities between all masked self-supervised models.""" + + def loss_function(self, # pytype: disable=signature-mismatch # overriding-parameter-count-checks + predictions: jnp.ndarray, + prediction_masks: jnp.ndarray, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Returns the (weighted) mean squared error. + + Args: + predictions: Output of model in shape [batch, num_tokens, channels]. + prediction_masks: The tokens to compute the loss on. Shape is + [batch, num_tokens] + batch: Batch (dict) with keys 'targets' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + L2 regularization. + + Returns: + The (weighted) mean squared error. + """ + batch_mask = batch.get('batch_mask') + if batch_mask is None: + batch_mask = jnp.ones(prediction_masks.shape) + if batch_mask.ndim == 1: + batch_mask = jnp.expand_dims(batch_mask, axis=-1) + if self.config.masked_feature_loss.get('loss_unmasked_tokens', False): + loss_weights = batch_mask + else: + loss_weights = batch_mask * prediction_masks + + feature_target = self.config.masked_feature_loss.target + if feature_target == FeatureTargets.RGB: + targets = batch[f'target_{feature_target}'] + else: + raise NotImplementedError( + f'Feature target {feature_target} not implemented.') + + total_loss = model_utils.weighted_mean_squared_error( + predictions, targets, loss_weights, axis=-1) + + # Mean squared error is normalised by the number of tokens. + # If this option is enabled, we normalise further by the number of features + # we are regressing to. + if self.config.masked_feature_loss.get('normalise_by_output_dimension', + False): + output_dimension = predictions.shape[-1] + total_loss = total_loss / output_dimension + + if self.config.get('l2_decay_factor'): + l2_loss = model_utils.l2_regularization(model_params) + total_loss += 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss # pytype: disable=bad-return-type # jax-ndarray + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + By default, we return the same metric for each split. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: + ```metrics_fn(predictions, batch)``` + """ + + del split # Same function for all splits. + return functools.partial( + feature_regression_metrics_function, + feature_target=self.config.masked_feature_loss.target, + metrics=_REGRESSION_METRICS) diff --git a/scenic/projects/av_mae/configs/audioset/finetune.py b/scenic/projects/av_mae/configs/audioset/finetune.py new file mode 100644 index 0000000000000000000000000000000000000000..9af98b7692d04140f9307afdb3b1bce10bd52eb3 --- /dev/null +++ b/scenic/projects/av_mae/configs/audioset/finetune.py @@ -0,0 +1,195 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Audiovisual Masked Autoencoder finetuning. + +""" +# pylint: disable=line-too-long + +import ml_collections + +# The Audioset 500K balanced split from https://arxiv.org/abs/2107.00135. +# The size of the Audioset dataset changes as videos are removed from YouTube. +# Set this appropriately. +AUDIOSET_TRAIN_SIZE = 508994 +AUDIOSET_VAL_SIZE = 18589 + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'avmae_audioset_classification' + + # AudioSet dataset. + config.dataset_name = 'video_sstable_dataset_mfp' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + + config.dataset_name = 'avmae_audiovisual_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + + config.dataset_configs.base_dir = '/path/to/root_directory' + config.dataset_configs.tables = { + 'train': 'train@1000', + 'validation': 'val@1000', + } + config.dataset_configs.examples_per_subset = { + 'train': AUDIOSET_TRAIN_SIZE, + 'validation': AUDIOSET_VAL_SIZE, + 'test': AUDIOSET_VAL_SIZE + } + + config.dataset_configs.num_classes = 527 + config.dataset_configs.test_split = 'validation' + + # List of modalities to load, supports `rgb`, `spectrogram`. + # Note that it only specifies which modalities to load, not which to use, + # which is controlled by config.model.modality_fusion + config.dataset_configs.modalities = ('rgb', 'spectrogram') + config.dataset_configs.return_as_dict = True + # This is going to sample 32 frames, sampled at a stride of 2 from the video. + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 2 + config.dataset_configs.num_spec_frames = 10 + config.dataset_configs.spec_stride = 1 + + # These statistics are calculated over the entire unbalanced train set. + config.dataset_configs.normalization_mean_spec = 1.102 + config.dataset_configs.normalization_std_spec = 2.762 + + config.dataset_configs.min_resize_train = 256 + config.dataset_configs.min_resize_test = 256 + config.dataset_configs.crop_size = 224 + + config.dataset_configs.spec_shape = (100, 128) + config.dataset_configs.inflate_spectrograms = False + config.dataset_configs.num_waveform_samples = 32256 + config.dataset_configs.waveform_stride = 1 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + config.dataset_configs.circular_time_shift = True + + # Multicrop eval settings + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.log_test_epochs = 1 + config.dataset_configs.num_test_clips = 4 + config.dataset_configs.test_batch_size = 8 # Needs to be num_local_devices + config.multicrop_clips_per_device = 2 + + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = True + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + + config.dataset_configs.prefetch_to_device = 2 + + # SpecAugment hyperparameters + config.dataset_configs.spec_augment = True + config.dataset_configs.spec_augment_params = ml_collections.ConfigDict() + config.dataset_configs.spec_augment_params.freq_mask_max_bins = 36 + config.dataset_configs.spec_augment_params.freq_mask_count = 2 + config.dataset_configs.spec_augment_params.time_mask_max_frames = 48 + config.dataset_configs.spec_augment_params.time_mask_count = 4 + config.dataset_configs.spec_augment_params.time_warp_max_frames = 1.0 + config.dataset_configs.spec_augment_params.time_warp_max_ratio = 0 + config.dataset_configs.spec_augment_params.time_mask_max_ratio = 0 + + config.model_name = 'mbt_multilabel_classification' + config.model = ml_collections.ConfigDict() + # Adjust this to finetune on different modalities + config.model.modality_fusion = ('rgb', 'spectrogram') + config.model.use_bottleneck = True + config.model.test_with_bottlenecks = True + config.model.share_encoder = False + config.model.n_bottlenecks = 4 + + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [16, 16] + config.model.attention_config = ml_collections.ConfigDict() + config.model.attention_config.type = 'spacetime' + config.model.representation_size = None + config.model.classifier = 'gap' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model_dtype_str = 'float32' + + config.model.hidden_size = 1024 + config.model.num_heads = 16 + config.model.mlp_dim = 4096 + config.model.num_layers = 24 + config.model.fusion_layer = 18 + + config.model.temporal_encoding_config = ml_collections.ConfigDict() + config.model.temporal_encoding_config.method = '3d_conv' + config.model.patches.size = [16, 16, 2] + config.model.temporal_encoding_config.kernel_init_method = 'central_frame_initializer' + config.model.temporal_encoding_config.n_sampled_frames = 4 # Unused here. + + # Training. + config.trainer_name = 'transfer_trainer_multimodal' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.layerwise_decay = 0.75 + config.optimizer_configs.momentum = 0.9 + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.grad_clip_after_pmean = True + config.label_smoothing = 0.3 + config.num_training_epochs = 50 + config.batch_size = 128 + config.rng_seed = 0 + config.mixup = ml_collections.ConfigDict() + config.mixup.alpha = 0.5 + config.mixmod = True + # Additional regularization + config.model.stochastic_droplayer_rate = 0.3 + + config.init_from = ml_collections.ConfigDict() + config.init_from.model_type = 'multimae' + config.init_from.init_from_mae = True + + NB: Set this path correctly to the pretrained checkpoint + config.init_from.checkpoint_path = 'path_to_pretrained_checkpoint' + config.init_from.restore_positional_embedding = True + config.init_from.restore_input_embedding = True + config.init_from.positional_embed_size_change = 'resize_tile' + + # Learning rate. + steps_per_epoch = AUDIOSET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 2.5 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 1.6 + + # Logging. + config.log_summary_steps = 100 + config.checkpoint_steps = 1000 + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/av_mae/configs/audioset/pretrain.py b/scenic/projects/av_mae/configs/audioset/pretrain.py new file mode 100644 index 0000000000000000000000000000000000000000..fb46e0ff3356f458cc9746967879cc87472471ee --- /dev/null +++ b/scenic/projects/av_mae/configs/audioset/pretrain.py @@ -0,0 +1,207 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Audiovisual Masked Autoencoder pretraining. + +""" +# pylint: disable=line-too-long + +import ml_collections + +# The size of the Audioset dataset changes as videos are removed from YouTube. +# Set this appropriately. +AUDIOSET_TRAIN_SIZE = 1857210 +AUDIOSET_VAL_SIZE = 18589 +VARIANT = 'L/16x2' + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for ImageNet.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'vivit-mae-audioset' + + config.dataset_name = 'avmae_audiovisual_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + + config.dataset_configs.base_dir = '/path/to/root_directory' + config.dataset_configs.tables = { + 'train': 'train@1000', + 'validation': 'val@1000', + } + config.dataset_configs.examples_per_subset = { + 'train': AUDIOSET_TRAIN_SIZE, + 'validation': AUDIOSET_VAL_SIZE, + 'test': AUDIOSET_VAL_SIZE + } + + config.dataset_configs.num_classes = 527 + config.dataset_configs.test_split = 'validation' + + # This is going to sample 16 frames, sampled at a stride of 4 from the video. + config.dataset_configs.num_frames = 16 + config.dataset_configs.stride = 4 + config.dataset_configs.min_resize_train = 256 + config.dataset_configs.min_resize_test = 224 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + config.dataset_configs.num_spec_frames = 10 + config.dataset_configs.spec_stride = 1 + config.dataset_configs.spec_shape = (100, 128) + + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.return_as_dict = True + config.dataset_configs.modalities = ('spectrogram', 'rgb') + config.dataset_configs.inflate_spectrograms = False + + # Model. + version, tubelet = VARIANT.split('/') + spatial_dim, temporal_dim = tubelet.split('x') + spatial_dim, temporal_dim = int(spatial_dim), int(temporal_dim) + + config.model_name = 'vivit_multimodal_masked_autoencoder' + config.model = ml_collections.ConfigDict() + config.model.attention_config = ml_collections.ConfigDict() + config.model.attention_config.type = 'spacetime' + + config.model.hidden_size = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = (spatial_dim, spatial_dim, temporal_dim) + config.model.num_heads = {'Ti': 3, + 'S': 6, + 'B': 12, + 'L': 16, + 'H': 16}[version] + config.model.mlp_dim = {'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config.model.num_layers = {'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + config.model.representation_size = None + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0.0 + config.model_dtype_str = 'float32' + + config.model.temporal_encoding_config = ml_collections.ConfigDict() + config.model.temporal_encoding_config.method = '3d_conv' + config.model.positional_embedding = 'sinusoidal_1d' + config.model.positional_embedding_decoder = 'sinusoidal_1d' + + # Model decoder + config.model.decoder_config = ml_collections.ConfigDict() + config.model.decoder_config.hidden_size = { + 'B': 384, + 'L': 512 + }[version] + config.model.decoder_config.num_layers = { + 'B': 4, + 'L': 4 + }[version] + config.model.decoder_config.num_heads = { + 'B': 6, + 'L': 8, + }[version] + config.model.decoder_config.mlp_dim = { + 'B': 1536, + 'L': 2048 + }[version] + + config.model.decoder_config.dropout_rate = 0 + config.model.decoder_config.attention_dropout_rate = 0 + config.model.decoder_config.stochastic_depth = 0 + config.model.decoder_config.attention_config = ml_collections.ConfigDict() + config.model.decoder_config.attention_config.type = 'spacetime' + config.model.decoder_config.stochastic_droplayer_rate = 0 + config.model.classifier = 'none' + config.model.encoder_strategy = 'separate_encoders_and_concat' + config.model.decoder_strategy = 'same_decoder' + config.model.use_inpainting = False + config.model.use_modality_tokens = False + config.model.fusion_layers = 2 + + assert not (config.model.encoder_strategy == 'separate_encoders' and config.model.decoder_strategy == 'separate_decoders') + + # Masked Feature loss + config.masked_feature_loss = ml_collections.ConfigDict() + # NB: Change the following appropriately to train on a single modality. + config.masked_feature_loss.target = {'rgb', 'spectrogram'} + config.masked_feature_loss.token_mask_probability_dict = {'spectrogram': 0.7, 'rgb': 0.9} + config.masked_feature_loss.select_central_frame = False + config.masked_feature_loss.summary_num_columns = 1 + config.masked_feature_loss.number_of_img_in_column = 8 # must be divisible with temporal_dim + config.masked_feature_loss.standardise_per_patch = False + config.masked_feature_loss.standardise_per_patch_channels = False + config.masked_feature_loss.normalise_by_output_dimension = True + config.masked_feature_loss.masking_strategy = 'random' + config.masked_feature_loss.modality_weight = ml_collections.ConfigDict({'spectrogram': 0.5, 'rgb': 0.5}) + + assert not config.masked_feature_loss.select_central_frame + + # Training. + config.trainer_name = 'avmae_multimodal_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.95 + config.optimizer_configs.weight_decay = 0 + config.explicit_weight_decay = 0.05 + config.l2_decay_factor = None + config.label_smoothing = None + config.num_training_epochs = 120 + config.batch_size = 8 if runlocal else 512 + config.rng_seed = 42 + config.init_head_bias = 0 + + # Learning rate. + steps_per_epoch = AUDIOSET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 3e-4 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*cosine_decay' + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.warmup_steps = int(4 * steps_per_epoch) + config.lr_configs.base_learning_rate = base_lr * config.batch_size / 256 + end_lr = 0 + # alpha: float; The minimum value as a fraction of the initial value. + config.lr_configs.alpha = end_lr / config.lr_configs.base_learning_rate + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = steps_per_epoch + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.log_summary_steps = 100 + config.log_eval_steps = steps_per_epoch + + + return config + + diff --git a/scenic/projects/av_mae/configs/imagenet/finetune.py b/scenic/projects/av_mae/configs/imagenet/finetune.py new file mode 100644 index 0000000000000000000000000000000000000000..9055e119435b99c42841483e0d98bdec872ede1b --- /dev/null +++ b/scenic/projects/av_mae/configs/imagenet/finetune.py @@ -0,0 +1,168 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""MAE finetuning on ImageNet-1K. + +""" + +import ml_collections + +_IMAGENET_TRAIN_SIZE = 1281167 +NUM_CLASSES = 1000 +MEAN_RGB = [0.485, 0.456, 0.406] +STDDEV_RGB = [0.229, 0.224, 0.225] + +VARIANT = 'L/16' + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for ImageNet.""" + + runlocal = bool(runlocal) + random_erase_prob = 0.25 + + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet-mae-vit' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'imagenet2012' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224, 8, 100, resize_method="bicubic")' + '|flip_lr' + '|randaug(2, 15)' + '|value_range(0, 1)' + f'|standardize({MEAN_RGB}, {STDDEV_RGB})' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + f'|random_erase({random_erase_prob})' + '|keep("image", "labels")') + pp_eval = ( + 'decode' + '|resize_small(256, "bicubic")' + '|central_crop(224)' + '|value_range(0, 1)' + f'|standardize({MEAN_RGB}, {STDDEV_RGB})' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + pp_eval_real = ( + 'decode' + '|resize_small(256, "bicubic")' + '|central_crop(224)' + '|value_range(0, 1)' + f'|standardize({MEAN_RGB}, {STDDEV_RGB})' + f'|onehot({NUM_CLASSES}, key="real_label", key_result="labels")' + '|keep("image", "labels")') + + config.dataset_configs.val_split = [ + ('valid', 'imagenet2012', 'validation', pp_eval), + ('imagenet-v2', 'imagenet_v2', 'test', pp_eval), + ('imagenet-real', 'imagenet2012_real', 'validation', pp_eval_real), + ('imagenet_adversarial', 'imagenet_a', 'test', pp_eval), + ('imagenet_sketch', 'imagenet_sketch', 'test', pp_eval), + ('imagenet_rendition', 'imagenet_r', 'test', pp_eval) + ] + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 250_000 + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'vit_classification_mae' + config.model = ml_collections.ConfigDict() + + config.model.hidden_size = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = {'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config.model.num_layers = {'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0.0 + config.model.dropout_rate = 0.0 + config.model.stochastic_depth = {'B': 0.1, 'L': 0.2}[version] + config.model_dtype_str = 'float32' + config.model.positional_embedding = 'sinusoidal_2d' + + # Training. + config.trainer_name = 'avmae_transfer_trainer' + config.optimizer = 'adamw' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.b1 = 0.9 + config.optimizer_configs.b2 = 0.999 + config.optimizer_configs.weight_decay = 0.05 + config.optimizer_configs.skip_scale_and_bias_regularization = True + config.optimizer_configs.layerwise_decay = 0.75 + + config.max_grad_norm = None + config.label_smoothing = 0 # Do it with Mixup, as done in TIMM. + config.num_training_epochs = 50 + config.batch_size = 8 if runlocal else 1024 + config.rng_seed = 0 + + # Learning rate. + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 4e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 5 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = base_lr + config.lr_configs.alpha = 1e-6 / base_lr + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.8 + config.mixup.cutmix_alpha = 1.0 + config.mixup.cutmix_switch_prob = 0.5 + config.mixup.label_smoothing = 0.1 + + # Logging. + config.write_summary = True + config.log_summary_steps = 100 + config.log_eval_steps = 2 * steps_per_epoch + config.checkpoint_steps = steps_per_epoch + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + config.m = None # Placeholder for randaug strength. + config.l = None # Placeholder for randaug layers. + + # Initialisation from checkpoint + config.init_from = ml_collections.ConfigDict() + NB: Set this path correctly to the pretrained checkpoint + config.init_from.checkpoint_path = 'path_to_pretrained_checkpoint' + return config + + diff --git a/scenic/projects/av_mae/configs/imagenet/pretrain.py b/scenic/projects/av_mae/configs/imagenet/pretrain.py new file mode 100644 index 0000000000000000000000000000000000000000..7d84dfa6c79595089c0630e4fdc974e8922f6816 --- /dev/null +++ b/scenic/projects/av_mae/configs/imagenet/pretrain.py @@ -0,0 +1,180 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Masked Autoencoder on ImageNet-1K. + +``` + +""" +# pylint: disable=line-too-long + +import copy +import ml_collections + + +_IMAGENET_TRAIN_SIZE = 1281167 +MEAN_RGB = [0.485, 0.456, 0.406] +STDDEV_RGB = [0.229, 0.224, 0.225] +VARIANT = 'L/16' + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for ImageNet.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet-mae-vit' + + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'imagenet2012' + config.dataset_configs.val_split = 'validation' + config.dataset_configs.train_split = 'train' + config.dataset_configs.num_classes = 1000 + INPUT_RES = 224 # pylint: disable=invalid-name + RESIZE_RES = int(INPUT_RES * (256 / 224)) # pylint: disable=invalid-name + + config.dataset_configs.pp_train = ( + f'decode_jpeg_and_inception_crop({INPUT_RES}, 20, 100, resize_method="bicubic")' + '|flip_lr' + '|value_range(0, 1)' + f'|standardize({MEAN_RGB}, {STDDEV_RGB})' + f'|onehot({config.dataset_configs.num_classes}, key="label", key_result="labels")' # pylint: disable=line-too-long + f'|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + f'decode' + f'|resize_small({RESIZE_RES}, "bicubic")' + f'|central_crop({INPUT_RES})' + '|value_range(0, 1)' + f'|standardize({MEAN_RGB}, {STDDEV_RGB})' + f'|onehot({config.dataset_configs.num_classes}, key="label", key_result="labels")' # pylint: disable=line-too-long + f'|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + + # shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 250_000 + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'vit_masked_autoencoder' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = {'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config.model.num_layers = {'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + config.model.representation_size = None + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model.positional_embedding = 'sinusoidal_2d' + config.model.positional_embedding_decoder = 'sinusoidal_2d' + + # Taken from https://github.com/facebookresearch/mae/blob/main/models_mae.py#L223 + config.model.decoder_config = ml_collections.ConfigDict() + config.model.decoder_config.hidden_size = { + 'B': 512, + 'L': 512, + 'H': 512 + }[version] + config.model.decoder_config.num_layers = { + 'B': 8, + 'L': 8, + 'H': 8 + }[version] + config.model.decoder_config.num_heads = { + 'B': 16, + 'L': 16, + 'H': 16 + }[version] + config.model.decoder_config.mlp_dim = { + 'B': 2048, + 'L': 2048, + 'H': 2048 + }[version] + config.model.decoder_config.dropout_rate = 0 + config.model.decoder_config.attention_dropout_rate = 0 + config.model.decoder_config.stochastic_depth = 0 + + config.model_dtype_str = 'float32' + + # Masked Feature loss + config.masked_feature_loss = ml_collections.ConfigDict() + config.masked_feature_loss.target = 'rgb' + config.masked_feature_loss.token_mask_probability = 0.75 + config.masked_feature_loss.normalise_by_output_dimension = True + config.model.classifier = 'token' + config.masked_feature_loss.standardise_per_patch = True + + # Training. + config.trainer_name = 'feature_regression_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.95 + config.optimizer_configs.weight_decay = 0 + config.explicit_weight_decay = 0.05 + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 800 + config.batch_size = 8 if runlocal else 4096 + config.rng_seed = 0 + config.init_head_bias = 0.0 # -10.0 + + # Learning rate. + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 1.5e-4 * config.batch_size / 256 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*cosine_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.end_learning_rate = 0 + config.lr_configs.warmup_steps = 40 * steps_per_epoch + config.lr_configs.base_learning_rate = base_lr + + # Fewshot. + config.fewshot = common_fewshot.get_config(config.batch_size) + config.fewshot.representation_layer = 'representation' + config.fewshot.log_eval_steps = 5 * steps_per_epoch + + # Logging. + config.write_summary = True + config.log_summary_steps = 100 + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + + return config + + diff --git a/scenic/projects/av_mae/configs/vggsound/finetune.py b/scenic/projects/av_mae/configs/vggsound/finetune.py new file mode 100644 index 0000000000000000000000000000000000000000..7783438529b79001f562b9c6587fb7ea0e9b6420 --- /dev/null +++ b/scenic/projects/av_mae/configs/vggsound/finetune.py @@ -0,0 +1,201 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Audiovisual MAE finetuning. + +""" + +import ml_collections + +# The size of the VGGSound dataset changes as videos are removed from YouTube. +# Set this appropriately. +VGGSOUND_TRAIN_SIZE = 172427 +VARIANT = 'L/16x2' + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'avmae_vggsound_finetuning' + + # Dataset. + config.dataset_name = 'avmae_audiovisual_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + + config.dataset_configs.base_dir = '/path/to/root_directory' + config.dataset_configs.tables = { + 'train': 'train@1000', + 'validation': 'val@1000', + } + config.dataset_configs.num_classes = 309 + + # List of modalities to load, supports `rgb`, `spectrogram` and `waveform`. + # Note that it only specifies which modalities to load, not which to use, + # which is controlled by config.model.modality_fusion + config.dataset_configs.modalities = ('rgb', 'spectrogram') + config.dataset_configs.return_as_dict = True + # This is going to sample 32 frames, sampled at a stride of 2 from the video. + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 2 + config.dataset_configs.num_spec_frames = 8 + config.dataset_configs.spec_stride = 1 + config.dataset_configs.spec_mean = 0. + config.dataset_configs.spec_stddev = 1. + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.spec_shape = (100, 128) + config.dataset_configs.num_waveform_samples = 32256 + config.dataset_configs.waveform_stride = 1 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + # Multicrop eval settings + config.dataset_configs.do_multicrop_test = True + config.dataset_configs.log_test_epochs = 5 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size + config.dataset_configs.num_test_clips = 4 + config.dataset_configs.test_batch_size = 8 # Needs to be num_local_devices + config.multicrop_clips_per_device = 2 + + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = True + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + + config.dataset_configs.prefetch_to_device = 2 + + # SpecAugment hyperparameters + config.dataset_configs.spec_augment = True + config.dataset_configs.spec_augment_params = ml_collections.ConfigDict() + config.dataset_configs.spec_augment_params.freq_mask_max_bins = 48 + config.dataset_configs.spec_augment_params.freq_mask_count = 1 + config.dataset_configs.spec_augment_params.time_mask_max_frames = 48 + config.dataset_configs.spec_augment_params.time_mask_count = 4 + config.dataset_configs.spec_augment_params.time_warp_max_frames = 1.0 + config.dataset_configs.spec_augment_params.time_warp_max_ratio = 0 + config.dataset_configs.spec_augment_params.time_mask_max_ratio = 0 + + # Model + version, tubelet = VARIANT.split('/') + spatial_dim, temporal_dim = tubelet.split('x') + spatial_dim, temporal_dim = int(spatial_dim), int(temporal_dim) + + config.model_name = 'mbt_classification' + config.model = ml_collections.ConfigDict() + # The modalities that we will use for finetuning. + # NB: Adjust this to finetune on different modalities + config.model.modality_fusion = ('rgb', 'spectrogram') + config.model.use_bottleneck = True + config.model.use_cross_bottleneck = False + config.model.test_with_bottlenecks = True + config.model.share_encoder = False + config.model.n_bottlenecks = 4 + config.model.fusion_layer = 16 + + config.model.hidden_size = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = (spatial_dim, spatial_dim, temporal_dim) + config.model.num_heads = {'Ti': 3, + 'S': 6, + 'B': 12, + 'L': 16, + 'H': 16}[version] + config.model.mlp_dim = {'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config.model.num_layers = {'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + + config.model.attention_config = ml_collections.ConfigDict() + config.model.attention_config.type = 'spacetime' + config.model.representation_size = None + # For simplicity, we disable `token` classifier for multimodal inputs. + config.model.classifier = 'gap' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model_dtype_str = 'float32' + + config.model.temporal_encoding_config = ml_collections.ConfigDict() + # 3d_conv is only used for RGB inputs. + config.model.temporal_encoding_config.method = '3d_conv' + # 32 frames for RGB. Conv filter is 8. So total of 4 frames at input + config.model.patches.size = [16, 16, 2] + + # Training. + config.trainer_name = 'transfer_trainer_multimodal' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.layerwise_decay = 0.75 + config.optimizer_configs.momentum = 0.9 + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.grad_clip_after_pmean = True + config.label_smoothing = 0.3 + config.num_training_epochs = 50 + config.batch_size = 64 + config.rng_seed = 0 + # This does Mixup in the train loop. This is fast. But make sure that device + # batch size is more than 1. On a 4x4 TPU, this means that your batch size + # needs to be at least 64. + config.mixup = ml_collections.ConfigDict() + config.mixup.alpha = 0.5 + config.mixmod = True + # Additional regularization + config.model.stochastic_droplayer_rate = 0.3 + + # Initialisation + config.init_from = ml_collections.ConfigDict() + config.init_from.model_type = 'multimae' + NB: Set this path correctly to the pretrained checkpoint + config.init_from.checkpoint_path = 'path_to_pretrained_checkpoint' + config.init_from.restore_positional_embedding = True + config.init_from.restore_input_embedding = True + config.init_from.positional_embed_size_change = 'resize_tile' + + # Learning rate. + steps_per_epoch = VGGSOUND_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 2.5 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.8 + + # Logging. + config.log_summary_steps = 100 + config.checkpoint_steps = 500 + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/av_mae/configs/vggsound/pretrain.py b/scenic/projects/av_mae/configs/vggsound/pretrain.py new file mode 100644 index 0000000000000000000000000000000000000000..4711bb6ecafd0851d9c80046fa7bfcaeea41c2c5 --- /dev/null +++ b/scenic/projects/av_mae/configs/vggsound/pretrain.py @@ -0,0 +1,200 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Audiovisual MAE pretraining. + +""" +import ml_collections + +# The size of the VGGSound dataset changes as videos are removed from YouTube. +# Set this appropriately. +VGGSOUND_TRAIN_SIZE = 172427 +VARIANT = 'L/16x2' + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for ImageNet.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'avmae-vggsound-pretrain' + # Dataset. + config.dataset_name = 'avmae_audiovisual_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + + config.dataset_configs.base_dir = '/path/to/root_directory' + config.dataset_configs.tables = { + 'train': 'train@1000', + 'validation': 'val@1000', + } + + config.dataset_configs.num_classes = 309 + config.dataset_configs.test_split = 'validation' + + # This is going to sample 16 frames, sampled at a stride of 4 from the video. + config.dataset_configs.num_frames = 16 + config.dataset_configs.stride = 4 + config.dataset_configs.min_resize_train = 256 + config.dataset_configs.min_resize_test = 224 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + config.dataset_configs.num_spec_frames = 8 + config.dataset_configs.spec_stride = 1 + config.dataset_configs.spec_shape = (100, 128) + + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.return_as_dict = True + config.dataset_configs.modalities = ('spectrogram', 'rgb') + config.dataset_configs.inflate_spectrograms = False + + # Model. + version, tubelet = VARIANT.split('/') + spatial_dim, temporal_dim = tubelet.split('x') + spatial_dim, temporal_dim = int(spatial_dim), int(temporal_dim) + + config.model_name = 'vivit_multimodal_masked_autoencoder' + config.model = ml_collections.ConfigDict() + config.model.attention_config = ml_collections.ConfigDict() + config.model.attention_config.type = 'spacetime' + + config.model.hidden_size = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = (spatial_dim, spatial_dim, temporal_dim) + config.model.num_heads = {'Ti': 3, + 'S': 6, + 'B': 12, + 'L': 16, + 'H': 16}[version] + config.model.mlp_dim = {'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config.model.num_layers = {'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + config.model.representation_size = None + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0.0 + config.model_dtype_str = 'float32' + + config.model.temporal_encoding_config = ml_collections.ConfigDict() + config.model.temporal_encoding_config.method = '3d_conv' + config.model.positional_embedding = 'sinusoidal_1d' + config.model.positional_embedding_decoder = 'sinusoidal_1d' + + # Model decoder + config.model.decoder_config = ml_collections.ConfigDict() + config.model.decoder_config.hidden_size = { + 'B': 384, + 'L': 512 + }[version] + config.model.decoder_config.num_layers = { + 'B': 4, + 'L': 4 + }[version] + config.model.decoder_config.num_heads = { + 'B': 6, + 'L': 8, + }[version] + config.model.decoder_config.mlp_dim = { + 'B': 1536, + 'L': 2048 + }[version] + + config.model.decoder_config.dropout_rate = 0 + config.model.decoder_config.attention_dropout_rate = 0 + config.model.decoder_config.stochastic_depth = 0 + config.model.decoder_config.attention_config = ml_collections.ConfigDict() + config.model.decoder_config.attention_config.type = 'spacetime' + config.model.decoder_config.stochastic_droplayer_rate = 0 + config.model.classifier = 'none' + config.model.encoder_strategy = 'separate_encoders' + config.model.decoder_strategy = 'same_decoder' + + assert not ( + config.model.encoder_strategy == 'separate_encoders' + and config.model.decoder_strategy == 'separate_decoders' + ) + + # Masked Feature loss + config.masked_feature_loss = ml_collections.ConfigDict() + config.masked_feature_loss.target = {'rgb', 'spectrogram'} + config.masked_feature_loss.token_mask_probability_dict = { + 'spectrogram': 0.5, + 'rgb': 0.9, + } + config.masked_feature_loss.select_central_frame = False + config.masked_feature_loss.summary_num_columns = 1 + config.masked_feature_loss.number_of_img_in_column = 8 + config.masked_feature_loss.standardise_per_patch = False + config.masked_feature_loss.standardise_per_patch_channels = False + config.masked_feature_loss.normalise_by_output_dimension = True + config.masked_feature_loss.masking_strategy = 'random' + config.masked_feature_loss.modality_weight = ml_collections.ConfigDict( + {'spectrogram': 0.5, 'rgb': 0.5}) + + assert not config.masked_feature_loss.select_central_frame + + # Training. + config.trainer_name = 'avmae_multimodal_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.95 + config.optimizer_configs.weight_decay = 0 + config.explicit_weight_decay = 0.05 + config.l2_decay_factor = None + config.label_smoothing = None + config.num_training_epochs = 400 + config.batch_size = 8 if runlocal else 512 + config.rng_seed = 42 + config.init_head_bias = 0 # -10.0 + + # Learning rate. + steps_per_epoch = VGGSOUND_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 1.5e-4 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*cosine_decay' + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.warmup_steps = int(4 * steps_per_epoch) + config.lr_configs.base_learning_rate = base_lr * config.batch_size / 256 + end_lr = 0 + config.lr_configs.alpha = end_lr / config.lr_configs.base_learning_rate + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = steps_per_epoch + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.log_summary_steps = 100 + config.log_eval_steps = steps_per_epoch + + + return config + + diff --git a/scenic/projects/av_mae/datasets/audiovisual_tfrecord_dataset.py b/scenic/projects/av_mae/datasets/audiovisual_tfrecord_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..86f9374050e60d2a3ebdd2ca9bd59b4ea1398a8c --- /dev/null +++ b/scenic/projects/av_mae/datasets/audiovisual_tfrecord_dataset.py @@ -0,0 +1,898 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data-loader to read from TFRecords using the MediaSequence format. + +Forked from scenic/projects/vivit/data/video_tfrecord_dataset.py +""" + +import functools +from typing import Any, Dict, Iterator, List, Optional, Text, Tuple, Union + +from absl import logging +from dmvr import builders +from dmvr import modalities as data_utils +from dmvr import processors +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib import video_ops +import scenic.projects.av_mae.datasets.dataset_utils as dataset_util_avmae +from scenic.projects.vivit.data import video_tfrecord_dataset +import tensorflow as tf + + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +Rng = Union[jnp.ndarray, Dict[str, jnp.ndarray]] + + +def maybe_pad_batch(batch: Batch, train: bool, batch_size: int, + return_as_dict: bool): + """Zero pad the batch on the right to the batch_size.""" + if not return_as_dict: + return dataset_utils.maybe_pad_batch(batch, train, batch_size) + + assert 'batch_mask' not in batch + if 'rgb' in batch['inputs']: + unpadded_mask_shape = batch['inputs']['rgb'].shape[0] + batch_pad = batch_size - unpadded_mask_shape + elif 'flow' in batch['inputs']: + unpadded_mask_shape = batch['inputs']['flow'].shape[0] + batch_pad = batch_size - unpadded_mask_shape + elif 'spectrogram' in batch['inputs']: + unpadded_mask_shape = batch['inputs']['spectrogram'].shape[0] + batch_pad = batch_size - unpadded_mask_shape + else: + raise ValueError('invalid input batch') + + if train and batch_pad != 0: + raise ValueError('In this codebase, we assumed that we always drop the ' + 'last partial batch of the train set. Please use ' + '` drop_remainder=True` for the training set.') + + # Most batches will not need padding, so we quickly return to avoid slowdown. + if train or batch_pad == 0: + if 'batch_mask' not in batch: + batch['batch_mask'] = np.ones(unpadded_mask_shape, dtype=np.float32) + return batch + + def zero_pad(array): + pad_with = [(0, batch_pad)] + [(0, 0)] * (array.ndim - 1) + return np.pad(array, pad_with, mode='constant') + + padded_batch = jax.tree_util.tree_map(zero_pad, batch) + padded_batch_mask = zero_pad(np.ones(unpadded_mask_shape, dtype=np.float32)) + padded_batch['batch_mask'] = padded_batch_mask + return padded_batch + + +class DatasetFactory(video_tfrecord_dataset.TFRecordDatasetFactory): + """Reader for TFRecords using the MediaSequence format. + + Attributes: + num_classes: int. The number of classes in the dataset. + base_dir: str. The base directory from which the TFRecords are read. + subset: str. The subset of the dataset. In Scenic, the subsets are "train", + "validation" and "test". + """ + + _MODALITIES = ('rgb', 'spectrogram') + + def __init__(self, + base_dir: str, + tables: Dict[str, Union[str, List[str]]], + num_classes: int, + subset: str = 'train', + modalities: Tuple[str] = ('rgb',), + prop_data: float = 1.0, + prop_seed: Optional[int] = None, + num_groups: Optional[int] = None, + group_index: Optional[int] = None, + examples_per_subset: Optional[Dict[str, int]] = None): + """Initializes the instance of DatasetFactory. + + Initializes a data-loader using DeepMind Video Reader (DMVR) pre-processing. + TFRecord files are assumed to consist of tf.SequenceExample protos in the + MediaSequence format. + + Args: + base_dir: The base directory of the TFRecord files. + tables: A dictionary mapping the subset name (train, val or test) to the + relative path of the TFRecord containing them. Follows DMVR convention. + The values of the dictionary can either be a string or a list. If it is + a string, it specifies all the shards in the TFRecord. Example - + "/path/to/tfrecord@10". If passing a list, each entry is a shard of the + TFRecord. Example - "[/path/to/tfrecord_shard_1_of_10, ..., + /path/to/tfrecord_shard_10_of_10]." The latter scenario is useful for + debugging. + num_classes: The number of classes in the dataset. + subset: The subset of the dataset to load. Must be a key of "tables" + modalities: The modalities to be loaded. + prop_data: The proportion of the data to load. If less than 1.0, this + proportion of the total TFRecord shards are read. + prop_seed: Whether to shuffle the shards (with the given seed) before + choosing the data used (given the proportion). + num_groups: If specified will reshard the data according to `num_groups`. + A `group_index` should be specified if using `num_groups`. + group_index: Index of the shard to return after resharding. `num_groups` + should be specified if using `group_index`. This is useful in + distributed setting where one wants to ensure that different data is + read by different workers. + examples_per_subset: A dictionary mapping the subset name (train, val or + test) to the number of examples in the dataset for that subset. If None, + the number of entries in the TFRecord are counted manually. This flag is + useful if the TFRecord file being read is large. + """ + if examples_per_subset and subset in examples_per_subset: + self._num_examples = examples_per_subset[subset] + logging.info('Reading number of examples in subset %s from config: %d', + subset, self._num_examples) + else: + raise AssertionError('Number of examples per subset must be given.') + + for modality in modalities: + if modality not in DatasetFactory._MODALITIES: + raise ValueError('Invalid modality %s.' % modality) + self._modalities = modalities + + super().__init__( + base_dir=base_dir, + tables=tables, + examples_per_subset=examples_per_subset, + subset=subset, + num_classes=num_classes, + fraction_data=prop_data, + num_groups=num_groups, + group_index=group_index) + + def _build( + self, + is_training: bool = True, + # Video related parameters. + num_frames: int = 32, + stride: int = 1, + num_test_clips: int = 1, + min_resize: int = 256, + crop_size: int = 224, + resize_keep_aspect_ratio: bool = True, + zero_centering_image: bool = False, + random_flip: bool = True, + normalization_mean: Union[tf.Tensor, float] = 0, + normalization_std: Union[tf.Tensor, float] = 1, + train_frame_sampling_mode: str = 'random', + include_rgb: bool = True, + use_crop_and_resize_video_mae: bool = False, + include_flow: bool = False, + # Label related parameters. + one_hot_label: bool = True, + get_label_str: bool = False, + label_offset: int = 0, + # Spectogram related parameters + include_spectrogram: bool = False, + num_spec_frames: int = 5, + spec_stride: int = 1, + spec_shape: Tuple[int, int] = (100, 128), + spec_augment: bool = False, + spec_augment_params: Optional[ml_collections.ConfigDict] = None, + circular_time_shift: bool = False, + inflate_spectrograms: bool = True, + normalization_mean_spec: Union[tf.Tensor, float] = 0, + normalization_std_spec: Union[tf.Tensor, float] = 1, + ): + """Adds DMVR pre-processors to the dataset. + + Args: + is_training: whether in training mode. + num_frames: number of frames per subclip. + stride: temporal stride to sample frames. + num_test_clips: number of test clip (1 by default). If more than one, this + will sample multiple linearly spaced clips within each video at test + time. If 1, then a single clip in the middle of the video is sampled. + min_resize: frames are resized so that min width/height is min_resize. + crop_size: final size of the frame after cropping the resized frames. + resize_keep_aspect_ratio: If True, the image is first resized to have a + shorter side equal to min_resize and then cropped to (crop_size, + crop_size). Otherwise, the image is directly resized to (crop_size, + crop_size). + zero_centering_image: whether to have image values in the interval [-1, 1] + or [0, 1]. + random_flip: Whether to perform horizontal flipping during training. + normalization_mean: value to subtract from the input image to normalize + it. + normalization_std: value to divide by from the input image to normalize + it. + train_frame_sampling_mode: Method of sampling frames during training. + Options are one of {random, random_sample_with_centre, centre}. + include_rgb: Whether to include RGB images. + use_crop_and_resize_video_mae: Whether to use the crop and resize function + used in the VideoMAE paper. + include_flow: Whether to include optical flow images. + one_hot_label: whether to return one hot version of labels. + get_label_str: whether to return label as text. + label_offset: If non-zero, this value is subtracted from the parsed label. + Useful when dataset is 1-indexed. + include_spectrogram: Whether to include spectrogram. + num_spec_frames: number of spectrogram frames. + spec_stride: stride to sample spectrogram. + spec_shape: input size of spectrogram per frame. + spec_augment: whether to apply augmentation using SpecAugment. + spec_augment_params: parameters for SpecAugment. + circular_time_shift: If `True`, apply random time shift to spectrograms. + inflate_spectrograms: whether or not to repeat the single spectrogram + channel into 3 channels. + normalization_mean_spec: value to subtract from the spectogram image to + normalize it. + normalization_std_spec: value to divide by from the spectogram image to + normalize it. + """ + + if include_rgb: + dataset_util_avmae.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_feature_name='image/encoded', + output_feature_name=builders.IMAGE_FEATURE_NAME, + is_training=is_training, + random_flip=random_flip, + num_frames=num_frames, + stride=stride, + num_test_clips=num_test_clips, + min_resize=min_resize, + crop_size=crop_size, + use_crop_and_resize_video_mae=use_crop_and_resize_video_mae, + train_frame_sampling_mode=train_frame_sampling_mode, + zero_centering_image=zero_centering_image, + normalization_mean=normalization_mean, + normalization_std=normalization_std, + is_rgb=True) + + if include_flow: + data_utils.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_feature_name='FORWARD_FLOW/image/encoded', + output_feature_name=builders.FLOW_FEATURE_NAME, + is_training=is_training, + random_flip=random_flip, + num_frames=num_frames, + stride=stride, + num_test_clips=num_test_clips, + min_resize=min_resize, + crop_size=crop_size, + zero_centering_image=True, + sync_random_state=False, + is_rgb=None, + is_flow=True) + + if include_spectrogram: + dataset_util_avmae.add_spectrogram( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + # TODO(lgeorgescu): make this a parameter + input_feature_name='melspec/feature/floats', + output_feature_name='spectrogram', + input_shape=spec_shape, + is_training=is_training, + num_frames=num_spec_frames, + stride=spec_stride, + num_test_clips=num_test_clips, + spec_augment=spec_augment, + spec_augment_params=spec_augment_params, + circular_time_shift=circular_time_shift, + zero_centering_image=zero_centering_image, + dataset_mean=normalization_mean_spec, + dataset_stddev=normalization_std_spec, + sync_random_state=True, + inflate_spectrograms=inflate_spectrograms) + + if is_training and train_frame_sampling_mode != 'random': + # We modify the data-processing graph after its construction, as upstream + # changes to DMVR are not being accepted. + logging.info('Train frame sampling mode is %s', train_frame_sampling_mode) + + def random_sampling_with_centre(x, state=None): + return video_ops.random_sample_sequence_with_centre( + x, num_frames, stride, state=state) + + def deterministic_sampling_from_centre(x, state=None): + return processors.sample_sequence( + x, num_frames, False, stride, state=state) + + def random_sampling_entire_interval(x, state=None): + del state # Parameter was required by caller API, but is unused. + return dataset_util_avmae.sample_sequence_uniformly( + x, num_frames) + + if train_frame_sampling_mode == 'random_sample_with_centre': + sampling_function = random_sampling_with_centre + elif train_frame_sampling_mode == 'centre': + sampling_function = deterministic_sampling_from_centre + elif train_frame_sampling_mode == 'segment': + sampling_function = random_sampling_entire_interval + else: + raise AssertionError( + f'Unknown train frame sampling mode {train_frame_sampling_mode}') + + self.sampler_builder.replace_fn( + fn_name=f'{builders.IMAGE_FEATURE_NAME}_random_sample', + fn=sampling_function) + + data_utils.add_label( + parser_builder=self.parser_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + one_hot_label=one_hot_label, + num_classes=self.num_classes, + add_label_name=get_label_str) + + if label_offset: + self.preprocessor_builder.add_fn( + fn=lambda x: x - label_offset, + feature_name=builders.LABEL_INDEX_FEATURE_NAME, + fn_name=f'label_offset_{label_offset}', + add_before_fn_name=(f'{builders.LABEL_INDEX_FEATURE_NAME}_one_hot')) + + def get_num_examples(self) -> int: # Override. + """Returns the number of examples in the TFRecord files.""" + return self._num_examples + + +def load_split(ds_factory, + batch_size: int, + shuffle_buffer_size: int, + modalities: Tuple[str] = ('rgb',), + subset: Text = 'train', + num_frames: int = 32, + stride: int = 2, + num_test_clips: int = 1, + min_resize: int = 256, + crop_size: int = 224, + resize_keep_aspect_ratio: bool = True, + one_hot_label: bool = True, + zero_centering: bool = True, + random_flip: bool = True, + normalization_mean: Union[tf.Tensor, float] = 0.0, + normalization_std: Union[tf.Tensor, float] = 1.0, + get_label_str: bool = False, + augmentation_params: Optional[ml_collections.ConfigDict] = None, + keep_key: bool = False, + do_three_spatial_crops: bool = False, + label_offset: int = 0, + train_frame_sampling_mode: str = 'random', + include_rgb: bool = True, + use_crop_and_resize_video_mae: bool = False, + include_flow: bool = False, + include_spectrogram: bool = True, + num_spec_frames: int = 5, + spec_stride: int = 1, + spec_shape: Tuple[int, int] = (100, 128), + spec_augment: bool = False, + spec_augment_params: Optional[ml_collections.ConfigDict] = None, + circular_time_shift=False, + inflate_spectrograms: bool = True, + normalization_mean_spec: Union[tf.Tensor, float] = 0, + normalization_std_spec: Union[tf.Tensor, float] = 1, + ) -> Tuple[tf.data.Dataset, int]: + """Loads dataset using DMVR for pre-processing. + + DMVR dataset loader already does basic augmentation (random crop and flip in + train mode). It also already shuffles and batches the data. + + Args: + ds_factory: A DMVR factory to instantiate with the subset. + batch_size: The batch_size to use. + shuffle_buffer_size: The buffer size for shuffling the data. + modalities: list of input modalities. + subset: train, validation or test + num_frames: Number of frames per subclip. + stride: Temporal stride to sample frames. + num_test_clips: Number of test clips (1 by default). If more than 1, this + will sample multiple linearly spaced clips within each video at test time. + If 1, then a single clip in the middle of the video is sampled. The clips + are aggregated in the batch dimension. + min_resize: Frames are resized so that min(height, width) is min_resize. + crop_size: Final size of the frame after cropping the resized frames. Both + height and width are the same. + resize_keep_aspect_ratio: If True, the image is first resized to have a + shorter side equal to min_resize and then cropped to (crop_size, + crop_size). Otherwise, the image is directly resized to (crop_size, + crop_size). + one_hot_label: If True, return one-hot version of the labels (ie [N, C]) + array. Otherwise, return [N]-array of labels. + zero_centering: If True, frames are normalized to values in the interval + [-1, 1]. If False, values are in the interval [0, 1]. + random_flip: Whether to perform horizontal flipping during training. + normalization_mean: value to subtract from the input image to normalize + it. + normalization_std: value to divide by from the input image to normalize + it. + get_label_str: Whether to return label as text. Note that strings cannot be + used in pmapped functions in Jax! + augmentation_params: Augmentation configurations in train mode. + keep_key: bool; If true, also return the key for each example. + do_three_spatial_crops: If true, take three spatial crops of each clip + during testing. + label_offset: If non-zero, this value is subtracted from the parsed label. + Useful when dataset is 1-indexed. + train_frame_sampling_mode: Method of sampling frames during training. + Options are one of {random, random_sample_with_centre, centre}. + include_rgb: Whether to include RGB images. + use_crop_and_resize_video_mae: Whether to use the crop and resize function + used in the VideoMAE paper. + include_flow: Whether to include optical flow images. + include_spectrogram: Whether to include spectrogram. + num_spec_frames: Number of spectrogram frames per subclip. + spec_stride: Temporal stride to sample spectrogram. + spec_shape: Input size of spectrogram per frame. + spec_augment: whether to apply augmentation using SpecAugment. + spec_augment_params: dict; augmentation configurations for SpecAugment. + circular_time_shift: If `True`, apply random time shift to spectrograms. + inflate_spectrograms: whether or not to repeat the single spectrogram + channel into 3 channels. + normalization_mean_spec: value to subtract from the spectogram image to + normalize it. + normalization_std_spec: value to divide by from the spectogram image to + normalize it. + + Returns: + A pair `(ds, num_examples)` with + ds: A `tf.data.Dataset` object + num_examples: Number of examples in the dataset. + """ + dataset = ds_factory(subset=subset, modalities=modalities).configure( + is_training=(subset == 'train'), + num_frames=num_frames, + stride=stride, + num_test_clips=num_test_clips, + min_resize=min_resize, + crop_size=crop_size, + resize_keep_aspect_ratio=resize_keep_aspect_ratio, + zero_centering_image=zero_centering, + random_flip=random_flip, + train_frame_sampling_mode=train_frame_sampling_mode, + one_hot_label=one_hot_label, + get_label_str=get_label_str, + label_offset=label_offset, + include_rgb=include_rgb, + use_crop_and_resize_video_mae=use_crop_and_resize_video_mae, + include_flow=include_flow, + normalization_mean=normalization_mean, + normalization_std=normalization_std, + include_spectrogram=include_spectrogram, + num_spec_frames=num_spec_frames, + spec_stride=spec_stride, + spec_shape=spec_shape, + spec_augment=spec_augment, + spec_augment_params=spec_augment_params, + circular_time_shift=circular_time_shift, + inflate_spectrograms=inflate_spectrograms, + normalization_mean_spec=normalization_mean_spec, + normalization_std_spec=normalization_std_spec + ) + + if subset == 'train' and augmentation_params: + if include_rgb and include_flow: + dataset = video_ops.additional_augmentations( + dataset, + augmentation_params.get('rgb'), + crop_size, + num_frames, + zero_centering, + rgb_feature_name=builders.IMAGE_FEATURE_NAME) + dataset = video_ops.additional_augmentations( + dataset, + augmentation_params.get(builders.FLOW_FEATURE_NAME), + crop_size, + num_frames, + zero_centering, + rgb_feature_name=builders.FLOW_FEATURE_NAME) + elif include_rgb: + dataset = video_ops.additional_augmentations( + dataset, + augmentation_params, + crop_size, + num_frames, + zero_centering, + rgb_feature_name=builders.IMAGE_FEATURE_NAME) + elif include_flow: + dataset = video_ops.additional_augmentations( + dataset, + augmentation_params, + crop_size, + num_frames, + zero_centering, + rgb_feature_name=builders.FLOW_FEATURE_NAME) + + if subset != 'train' and do_three_spatial_crops and resize_keep_aspect_ratio: + if include_rgb: + dataset.preprocessor_builder.replace_fn( + f'{builders.IMAGE_FEATURE_NAME}_central_crop', + functools.partial(video_ops.three_spatial_crops, crop_size=crop_size)) + if include_flow: + dataset.preprocessor_builder.replace_fn( + f'{builders.FLOW_FEATURE_NAME}_central_crop', + functools.partial(video_ops.three_spatial_crops, crop_size=crop_size)) + + if num_test_clips == 1: + # This means that reshaping is not part of the post-processing graph. + if include_rgb: + dataset.postprocessor_builder.add_fn( + fn=lambda x: tf.reshape( # pylint: disable=g-long-lambda + x, (-1, num_frames, crop_size, crop_size, 3)), + feature_name=builders.IMAGE_FEATURE_NAME, + fn_name=f'{builders.IMAGE_FEATURE_NAME}_reshape') + if include_flow: + dataset.postprocessor_builder.add_fn( + fn=lambda x: tf.reshape( # pylint: disable=g-long-lambda + x, (-1, num_frames, crop_size, crop_size, 2)), + feature_name=builders.FLOW_FEATURE_NAME, + fn_name=f'{builders.FLOW_FEATURE_NAME}_reshape') + + logging.info('Frame sampling graph: %s', + dataset.sampler_builder.get_summary()) + logging.info('Preprocessing graph: %s', + dataset.preprocessor_builder.get_summary()) + logging.info('Postprocessing graph: %s', + dataset.postprocessor_builder.get_summary()) + num_examples = dataset.get_num_examples() + + if subset == 'train': + dataset.tune(shuffle_buffer=shuffle_buffer_size) + + # Validation and test splits are a single epoch, so that the last batch + # is padded with zeroes. This is then repeated. + ds = dataset.make_dataset( + batch_size=batch_size, + shuffle=(subset == 'train'), + num_epochs=None if (subset == 'train') else 1, + drop_remainder=(subset == 'train'), + keep_key=(subset != 'train' and keep_key)) + + if subset != 'train': + ds = ds.repeat(None) + + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + ds = ds.with_options(options) + + return ds, num_examples + + +def map_keys(batch: Batch, + include_rgb: bool, + include_flow: bool, + include_spectrogram: bool, + return_as_dict: bool = False) -> Batch: + """DMVR dataset returns 'image' and 'label'. We want 'inputs' and 'label'.""" + + if return_as_dict: + batch['inputs'] = {} # pytype: disable=container-type-mismatch # jax-ndarray + if include_rgb: + batch['inputs']['rgb'] = batch.pop(builders.IMAGE_FEATURE_NAME) + if include_flow: + batch['inputs']['flow'] = batch.pop(builders.FLOW_FEATURE_NAME) + if include_spectrogram: + batch['inputs']['spectrogram'] = batch.pop('spectrogram') + else: + assert (include_rgb + include_flow + include_spectrogram) == 1 + if include_rgb: + batch['inputs'] = batch.pop(builders.IMAGE_FEATURE_NAME) + if include_flow: + batch['inputs'] = batch.pop(builders.FLOW_FEATURE_NAME) + if include_spectrogram: + batch['inputs'] = batch.pop('spectrogram') + return batch # pytype: disable=bad-return-type # jax-ndarray + + +def tile_label_key(batch: Batch, + include_rgb: bool, + include_flow: bool, + include_spectrogram: bool, + return_as_dict: bool = False) -> Batch: + """Tile labels and keys to match input videos when num_test_clips > 1. + + When multiple test crops are used (ie num_test_clips > 1), the batch dimension + of batch['inputs'] = test_batch_size * num_test_clips. + However, labels and keys remain of size [test_batch_size]. + This function repeats label and key to match the inputs. + + Args: + batch: Batch from iterator + include_rgb: Whether to include RGB images. + include_flow: Whether to include optical flow images. + include_spectrogram: Whether to include spectrogram. + return_as_dict: Whether to return inputs as a dict. + + Returns: + Batch with 'label' and 'key' tiled to match 'inputs'. The input batch is + mutated by the function. + """ + if return_as_dict: + assert include_rgb or include_flow or include_spectrogram, ( + '"include_rgb", "include_flow" or "include_spectrogram" must be True.') + if include_rgb: + n_repeats = batch['inputs']['rgb'].shape[0] // batch['label'].shape[0] + elif include_flow: + n_repeats = batch['inputs']['flow'].shape[0] // batch['label'].shape[0] + elif include_spectrogram: + n_repeats = ( + batch['inputs']['spectrogram'].shape[0] // batch['label'].shape[0]) + else: + n_repeats = batch['inputs'].shape[0] // batch['label'].shape[0] + + batch['label'] = np.repeat(batch['label'], n_repeats, axis=0) + if 'key' in batch: + batch['key'] = np.repeat(batch['key'], n_repeats, axis=0) + return batch + + +def reshape_spectrogram(batch: Dict[str, Any], spec_shape: Tuple[int, int], + num_frames: int): + batch['spectrogram'] = np.reshape( + batch['spectrogram'], (-1, num_frames, spec_shape[0], spec_shape[1], + batch['spectrogram'].shape[-1])) + return batch + + +@datasets.add_dataset('avmae_audiovisual_tfrecord_dataset') +def get_dataset( + *, + batch_size: int, + eval_batch_size: int, + num_shards: int, + dtype_str: Text = 'float32', + shuffle_seed: Optional[int] = 0, + rng: Optional[Rng] = None, + dataset_configs: ml_collections.ConfigDict, + dataset_service_address: Optional[str] = None) -> dataset_utils.Dataset: + """Returns a generator for dataset.""" + del rng # Parameter was required by caller API, but is unused. + + shuffle_buffer_size = dataset_configs.get('shuffle_buffer_size', 256) + modalities = dataset_configs.get('modalities', ['rgb']) + num_frames = dataset_configs.get('num_frames', 32) + num_test_clips = dataset_configs.get('num_test_clips', 1) + stride = dataset_configs.get('stride', 2) + min_resize_train = dataset_configs.get('min_resize_train') + min_resize_test = dataset_configs.get('min_resize_test') + crop_size = dataset_configs.get('crop_size', 224) + resize_keep_aspect_ratio = dataset_configs.get('resize_keep_aspect_ratio', + True) + one_hot_label = dataset_configs.get('one_hot_label', True) + zero_centre_data = dataset_configs.get('zero_centering', True) + random_flip = dataset_configs.get('random_flip', True) + augmentation_params = dataset_configs.get('augmentation_params', None) + num_train_val_clips = dataset_configs.get('num_train_val_clips', 1) + keep_test_key = dataset_configs.get('keep_test_key', False) + # For the test set, the actual batch size is test_batch_size*num_test_clips. + test_batch_size = dataset_configs.get('test_batch_size', eval_batch_size) + do_three_spatial_crops = dataset_configs.get('do_three_spatial_crops', False) + num_spatial_crops = 3 if do_three_spatial_crops else 1 + test_split = dataset_configs.get('test_split', 'test') + label_offset = dataset_configs.get('label_offset', 0) + train_frame_sampling_mode = dataset_configs.get('train_frame_sampling_mode', + 'random') + examples_per_subset = dataset_configs.get('examples_per_subset', None) + include_flow = 'flow' in modalities + include_rgb = 'rgb'in modalities + use_crop_and_resize_video_mae = augmentation_params.get( + 'crop_and_resize_video_mae', False) if (augmentation_params + is not None) else False + return_as_dict = dataset_configs.get('return_as_dict', False) + + normalization_mean = dataset_configs.get('normalization_mean', 0) + normalization_std = dataset_configs.get('normalization_std', 1) + if isinstance(normalization_mean, (list, tuple)): + normalization_mean = tf.constant(normalization_mean, tf.float32) + if isinstance(normalization_std, (list, tuple)): + normalization_std = tf.constant(normalization_std, tf.float32) + + # Spectrogram related configs. + include_spectrogram = 'spectrogram'in modalities + num_spec_frames = dataset_configs.get('num_spec_frames', 5) + spec_stride = dataset_configs.get('spec_stride', 1) + spec_shape = dataset_configs.get('spec_shape', (100, 128)) + spec_augment = dataset_configs.get('spec_augment', False) + spec_augment_params = dataset_configs.get('spec_augment_params', None) + circular_time_shift = dataset_configs.get('circular_time_shift', False) + return_spec_as_2d = dataset_configs.get('return_spec_as_2d', True) + inflate_spectrograms = dataset_configs.get('inflate_spectrograms', True) + normalization_mean_spec = dataset_configs.get('normalization_mean_spec', 0) + normalization_std_spec = dataset_configs.get('normalization_std_spec', 1) + + if dataset_configs.get('base_dir') is None: + raise ValueError('base_dir must be specified for the dataset') + if not dataset_configs.get('tables'): + raise ValueError('tables mapping must be specified for the dataset') + if not dataset_configs.get('num_classes'): + raise ValueError('num_classes must be specified for the dataset') + + ds_factory = functools.partial( + DatasetFactory, + base_dir=dataset_configs.base_dir, + tables=dataset_configs.tables, + num_classes=dataset_configs.num_classes, + num_groups=jax.process_count(), + group_index=jax.process_index(), + examples_per_subset=examples_per_subset) + + def create_dataset_iterator( + subset: str, + batch_size_local: int, + num_clips: int, + keep_key_local: bool = False, + is_test: bool = False) -> Tuple[Iterator[Batch], int]: + is_training = subset == 'train' + is_test = (subset == 'test' or is_test) + logging.info('Loading split %s', subset) + + dataset, num_examples = load_split( + ds_factory, + batch_size=batch_size_local, + shuffle_buffer_size=shuffle_buffer_size, + subset=subset, + num_frames=num_frames, + stride=stride, + num_test_clips=num_clips, + min_resize=min_resize_train if is_training else min_resize_test, + crop_size=crop_size, + resize_keep_aspect_ratio=resize_keep_aspect_ratio, + one_hot_label=one_hot_label, + zero_centering=zero_centre_data, + random_flip=random_flip, + augmentation_params=augmentation_params, + keep_key=keep_key_local, + do_three_spatial_crops=do_three_spatial_crops and is_test, + label_offset=label_offset, + train_frame_sampling_mode=train_frame_sampling_mode, + include_rgb=include_rgb, + use_crop_and_resize_video_mae=use_crop_and_resize_video_mae, + include_flow=include_flow, + normalization_mean=normalization_mean, + normalization_std=normalization_std, + include_spectrogram=include_spectrogram, + num_spec_frames=num_spec_frames, + spec_stride=spec_stride, + spec_shape=spec_shape, + spec_augment=spec_augment, + spec_augment_params=spec_augment_params, + circular_time_shift=circular_time_shift, + inflate_spectrograms=inflate_spectrograms, + normalization_mean_spec=normalization_mean_spec, + normalization_std_spec=normalization_std_spec + ) + + if dataset_service_address and is_training: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + dataset = dataset_utils.distribute(dataset, dataset_service_address) + + pad_batch_size = batch_size_local * num_train_val_clips + + if is_test: + pad_batch_size = batch_size_local * num_clips * num_spatial_crops + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + current_ds_iterator = iter(dataset) + current_ds_iterator = map(dataset_utils.tf_to_numpy, current_ds_iterator) + current_ds_iterator = map( + functools.partial( + map_keys, + include_rgb=include_rgb, + include_flow=include_flow, + include_spectrogram=include_spectrogram, + return_as_dict=return_as_dict), current_ds_iterator) + if is_test and num_clips * num_spatial_crops > 1: + current_ds_iterator = map( + functools.partial( + tile_label_key, + include_rgb=include_rgb, + include_flow=include_flow, + include_spectrogram=include_spectrogram, + return_as_dict=return_as_dict), current_ds_iterator) + current_ds_iterator = map( + functools.partial( + maybe_pad_batch, + train=is_training, + batch_size=pad_batch_size, + return_as_dict=return_as_dict), current_ds_iterator) + + if is_training and augmentation_params and augmentation_params.get( + 'do_mixup', False): + mixup_alpha = augmentation_params.get('mixup_alpha', 1.0) + mixup_batches = functools.partial( + dataset_utils.mixup, alpha=mixup_alpha, image_format='NTHWC') + logging.info('Doing mixup with alpha %f', mixup_alpha) + current_ds_iterator = map(mixup_batches, current_ds_iterator) + current_ds_iterator = map(shard_batches, current_ds_iterator) + if is_training and dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + current_ds_iterator = jax_utils.prefetch_to_device( + current_ds_iterator, dataset_configs.get('prefetch_to_device')) + + if not return_spec_as_2d: + current_ds_iterator = map( + functools.partial( + reshape_spectrogram, + spec_shape=spec_shape, + num_frames=num_spec_frames), current_ds_iterator) + + return current_ds_iterator, num_examples + + train_iter, n_train_examples = create_dataset_iterator( + 'train', batch_size, num_train_val_clips) + eval_iter, n_eval_examples = create_dataset_iterator('validation', + eval_batch_size, + 1) + test_iter, n_test_examples = create_dataset_iterator(test_split, + test_batch_size, + num_test_clips, + keep_test_key, + is_test=True) + + meta_data = { + 'num_classes': dataset_configs.num_classes, + 'num_train_examples': n_train_examples * num_train_val_clips, + 'num_eval_examples': n_eval_examples * num_train_val_clips, + 'num_test_examples': + (n_test_examples * num_test_clips * num_spatial_crops), + 'target_is_onehot': one_hot_label, + } + + channels_spectogram = 3 if inflate_spectrograms else 1 + + if return_as_dict: + meta_data['input_shape'] = {} + meta_data['input_dtype'] = {} + if include_rgb: + meta_data['input_shape']['rgb'] = (-1, num_frames, crop_size, crop_size, + 3) + meta_data['input_dtype']['rgb'] = getattr(jnp, dtype_str) + if include_flow: + meta_data['input_shape']['flow'] = (-1, num_frames, crop_size, crop_size, + 2) + meta_data['input_dtype']['flow'] = getattr(jnp, dtype_str) + + if include_spectrogram: + meta_data['input_shape']['spectrogram'] = ( # pylint:disable=g-long-ternary + -1, num_spec_frames * spec_shape[0], spec_shape[1], + channels_spectogram) if return_spec_as_2d else ( + -1, num_spec_frames, spec_shape[0], spec_shape[1], + channels_spectogram) + meta_data['input_dtype']['spectrogram'] = getattr(jnp, dtype_str) + + else: + raise ValueError('Only returning a dictionary of inputs is supported.') + + logging.info('Dataset metadata:\n%s', meta_data) + + return dataset_utils.Dataset(train_iter, eval_iter, test_iter, meta_data) diff --git a/scenic/projects/av_mae/datasets/dataset_utils.py b/scenic/projects/av_mae/datasets/dataset_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..b0a9d240b5dc1212b1db2d3e33ea0f763400bc9e --- /dev/null +++ b/scenic/projects/av_mae/datasets/dataset_utils.py @@ -0,0 +1,781 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for adding modalities. + + +Forked from: +https://github.com/google-deepmind/dmvr/blob/master/dmvr/modalities.py. +""" + +from typing import Optional +from typing import Union + +from absl import logging +from dmvr import builders +from dmvr import processors +from lingvo.core import spectrum_augmenter +import tensorflow as tf + + +def crop_and_resize_image_vmae(frames: tf.Tensor, + resized_size: tuple[int, int] = (224, 224), + scales: tf.Tensor = tf.constant( + [1, .875, .75, .66])) -> tf.Tensor: + """Crops and resizes the images in the given sequence of images. + + Args: + frames: A tensor of dimension [timesteps, input_h, input_w, channels]. + resized_size: The size for the resize operation. + scales: The scales for the resize operation. Must be a tensor with 4 values. + Returns: + A tensor of shape [timesteps, output_h, output_w, channels] of same type as + input with the cropped and resized images. + """ + + shape = tf.shape(input=frames) + timesteps = shape[0] + image_h = shape[1] + image_w = shape[2] + channels = shape[3] + + crop_h, crop_w, offset_h, offset_w = sample_crop_size( + image_h=image_h, image_w=image_w, resized_size=resized_size, + scales=scales) + # offset [0, offset_h, offset_w, 0] + # size [timesteps, height, width, channels] + + offset = tf.convert_to_tensor(value=(0, offset_h, offset_w, 0)) + size = tf.convert_to_tensor(value=(timesteps, crop_h, crop_w, channels)) + frames = tf.slice(frames, offset, size) + frames = tf.image.resize(frames, resized_size) + + return frames + + +def sample_fixed_offset(image_w: int, image_h: int, crop_w: int, crop_h: int, + more_fix_crop: bool = True) -> tf.Tensor: + """Sample offset of the crop out of 13 fixed offsets. + + The sampling strategy is taken from: https://arxiv.org/abs/2203.12602, Github: + https://github.com/MCG-NJU/VideoMAE. + + Args: + image_w: The width of the image. + image_h: The height of the image. + crop_w: The width of the crop. + crop_h: The height of the crop. + more_fix_crop: Add another 8 fixed crops to the sampling. + + Returns: + A tensor of shape [1, 2] with the corresponding offset + [[offset_w, offset_h]]. + """ + w_step = (image_w - crop_w) // 4 + h_step = (image_h - crop_h) // 4 + + ret = list() + ret.append((tf.constant(0), tf.constant(0))) # upper left + ret.append((4 * w_step, 0)) # upper right + ret.append((0, 4 * h_step)) # lower left + ret.append((4 * w_step, 4 * h_step)) # lower right + ret.append((2 * w_step, 2 * h_step)) # center + + if more_fix_crop: + ret.append((0, 2 * h_step)) # center left + ret.append((4 * w_step, 2 * h_step)) # center right + ret.append((2 * w_step, 4 * h_step)) # lower center + ret.append((2 * w_step, 0 * h_step)) # upper center + + ret.append((1 * w_step, 1 * h_step)) # upper left quarter + ret.append((3 * w_step, 1 * h_step)) # upper right quarter + ret.append((1 * w_step, 3 * h_step)) # lower left quarter + ret.append((3 * w_step, 3 * h_step)) # lower right quarter + + ret_index = tf.random.uniform((1, 1), minval=0, maxval=len(ret), + dtype=tf.int32)[0, 0] + ret = tf.stack(ret) + + ret_pair = tf.slice(ret, [ret_index, 0], [1, 2]) + return ret_pair + + +def sample_crop_size(image_h: int, image_w: int, + resized_size: tuple[int, int], scales: tf.Tensor, + max_distort: int = 1) -> tuple[int, int, int, int]: + """Sample a crop size and the offset out of fixed choices. + + Args: + image_h: The height of the image. + image_w: The width of the image. + resized_size: The size of the resized image. + scales: The scales for the resize operation. + max_distort: How many adjact possitions in the scales array to combine in + order to get the pairs for the resize options. + + Returns: + A tuple of 4 elements -> [crop_h, crop_w, offset_h, offset_w]. + + """ + + if len(scales) != 4: + raise NotImplementedError('Only 4 values are supported for the scale.') + + base_size = tf.cast(tf.minimum(image_w, image_h), tf.float32) + + crop_sizes = [tf.cast(base_size * scales[0], tf.int32), + tf.cast(base_size * scales[1], tf.int32), + tf.cast(base_size * scales[2], tf.int32), + tf.cast(base_size * scales[3], tf.int32)] + rsize_h, rsize_w = resized_size + + crop_h = [ + rsize_h if abs(crop_sizes[0] - rsize_h) < 3 else crop_sizes[0], + rsize_h if abs(crop_sizes[1] - rsize_h) < 3 else crop_sizes[1], + rsize_h if abs(crop_sizes[2] - rsize_h) < 3 else crop_sizes[2], + rsize_h if abs(crop_sizes[3] - rsize_h) < 3 else crop_sizes[3]] + + crop_w = [ + rsize_w if abs(crop_sizes[0] - rsize_w) < 3 else crop_sizes[0], + rsize_w if abs(crop_sizes[1] - rsize_w) < 3 else crop_sizes[1], + rsize_w if abs(crop_sizes[2] - rsize_w) < 3 else crop_sizes[2], + rsize_w if abs(crop_sizes[3] - rsize_w) < 3 else crop_sizes[3]] + + # Get the resized pairs. + pairs = [] + for i, h in enumerate(crop_h): + for j, w in enumerate(crop_w): + if abs(i - j) <= max_distort: + pairs.append((w, h)) + + # Implement random.choice. + crop_pair_index = tf.random.uniform((1, 1), minval=0, maxval=len(pairs), + dtype=tf.int32)[0, 0] + pairs = tf.stack(pairs) + crop_pair = tf.slice(pairs, [crop_pair_index, 0], [1, 2]) + + offset = sample_fixed_offset(image_w=image_w, image_h=image_h, + crop_w=crop_pair[0][0], crop_h=crop_pair[0][1]) + return crop_pair[0][1], crop_pair[0][0], offset[0][1], offset[0][0] + + +def add_image( + parser_builder: builders.BaseParserBuilder, + sampler_builder: builders.SamplerBuilder, + decoder_builder: builders.DecoderBuilder, + preprocessor_builder: builders.PreprocessorBuilder, + postprocessor_builder: builders.PostprocessorBuilder, + input_feature_name: str = 'image/encoded', + output_feature_name: str = builders.IMAGE_FEATURE_NAME, + is_training: bool = True, + # Video related parameters. + num_frames: int = 32, + stride: int = 1, + num_test_clips: int = 1, + min_resize: int = 224, + resize_method: str = tf.image.ResizeMethod.BILINEAR, + crop_size: int = 200, + use_crop_and_resize_video_mae: bool = False, + train_frame_sampling_mode: Optional[str] = None, + zero_centering_image: bool = False, + sync_random_state: bool = True, + is_rgb: Optional[bool] = True, + is_flow: bool = False, + random_flip: bool = True, + normalization_mean: Union[tf.Tensor, float] = 0, + normalization_std: Union[tf.Tensor, float] = 1, +) -> None: + """Adds functions to process image feature to builders. + + This function expects the input to be either a `tf.train.SequenceExample` (for + videos) and have the following structure: + ``` + feature_lists { + feature_list { + key: input_feature_name + value { + feature { + bytes_list { + value: jpeg_bytes + } + } + } + } + } + ``` + + Or a `tf.train.Example` (for image only) and have the following structure: + ``` + features { + feature { + key: input_feature_name + value { + bytes_list { + value: "JPEG" + } + } + } + } + ``` + + The corresponding `builders.ExampleParserBuilder` or + `builders.SequenceExampleParserBuilder` has to be given as parameter. + + Args: + parser_builder: An instance of a `builders.BaseParserBuilder`. + sampler_builder: An instance of a `builders.SamplerBuilder`. + decoder_builder: An instance of a `builders.DecoderBuilder`. + preprocessor_builder: An instance of a `builders.PreprocessorBuilder`. + postprocessor_builder: An instance of a `builders.PostprocessorBuilder`. + input_feature_name: Name of the feature in the input `tf.train.Example` or + `tf.train.SequenceExample`. Exposing this as an argument allows using this + function for different image features within a single dataset. + output_feature_name: Name of the feature in the output features dictionary. + Exposing this as an argument allows using this function for different + image features within a single dataset. + is_training: Whether in training mode. If `True`, random sample, crop and + left right flip is used. + num_frames: Number of frames per subclip. For single images, use 1. + stride: Temporal stride to sample frames. + num_test_clips: Number of test clips (1 by default). If more than 1, this + will sample multiple linearly spaced clips within each video at test time. + If 1, then a single clip in the middle of the video is sampled. The clips + are aggregated in the batch dimension. + min_resize: Frames are resized so that `min(height, width)` is `min_resize`. + resize_method: A resizing method. + crop_size: Final size of the frame after cropping the resized frames. Both + height and width are the same. + use_crop_and_resize_video_mae: If True cropping stragy used by VideoMAE of + Tong et al. will be used. + train_frame_sampling_mode: The temporal sampling strategy used in the + training. + zero_centering_image: If `True`, frames are normalized to values in [-1, 1]. + If `False`, values in [0, 1]. + sync_random_state: Whether to use stateful option to keep random operations + in sync between different modalities. All modalities having this option + `True` will use the same outcome in random operations such as sampling and + cropping. + is_rgb: If `True`, the number of channels in the JPEG is 3, if False, 1. If + is_flow is `True`, `is_rgb` should be set to `None` (see below). + is_flow: If `True`, the image is assumed to contain flow and will be + processed as such. Note that the number of channels in the JPEG for flow + is 3, but only two channels will be output corresponding to the valid + horizontal and vertical displacement. + random_flip: If `True`, a random horizontal flip is applied to the input + image. This augmentation may not be used if the label set contains + direction related classes, such as `pointing left`, `pointing right`, etc. + normalization_mean: value to subtract from the input image to normalize it. + normalization_std: value to divide by from the input image to normalize it. + """ + + # Validate parameters. + if is_flow and is_rgb is not None: + raise ValueError('`is_rgb` should be `None` when requesting flow.') + + if is_flow and not zero_centering_image: + raise ValueError('Flow contains displacement values that can be negative, ' + 'but `zero_centering_image` was set to `False`.') + + if is_training and num_test_clips != 1: + logging.info('`num_test_clips` %d is ignored since `is_training` is true.', + num_test_clips) + + # Parse frames or single image. + if isinstance(parser_builder, builders.SequenceExampleParserBuilder): + parser_builder.parse_feature( + feature_name=input_feature_name, + feature_type=tf.io.FixedLenSequenceFeature((), dtype=tf.string), + output_name=output_feature_name) + elif isinstance(parser_builder, builders.ExampleParserBuilder): + parser_builder.parse_feature( + feature_name=input_feature_name, + feature_type=tf.io.FixedLenFeature((), dtype=tf.string), + output_name=output_feature_name) + # Expand dimensions so single images have the same structure as videos. + sampler_builder.add_fn( + fn=lambda x: tf.expand_dims(x, axis=0), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_expand_dims') + else: + raise ValueError('`parser_builder` has an unexpected type.') + + # Temporal sampler. + if is_training: + # Sample random clip. + sampler_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x, s=None: processors.sample_sequence( + x, num_frames, True, stride, state=s), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_random_sample', + # Use state to keep coherence between modalities if requested. + stateful=sync_random_state) + else: + if num_test_clips > 1: + if train_frame_sampling_mode == 'segment': + if num_test_clips != 2: + raise ValueError('For segment sampling only 2 video clips at test' + 'are implemented.') + sampler_builder.add_fn( + fn=lambda x: sample_two_sequences_uniformly(x, num_frames), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_segment_sample') + else: + # Sample linspace clips. + sampler_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x: processors.sample_linspace_sequence( + x, num_test_clips, num_frames, stride), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_linspace_sample') + else: + if train_frame_sampling_mode == 'segment': + sampler_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x: sample_sequence_uniformly(x, num_frames, + is_training=is_training), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_segment_sample_train') + else: + # Sample middle clip. + sampler_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x: processors.sample_sequence(x, + num_frames, False, stride), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_middle_sample') + + # Decode JPEG string to `tf.uint8`. + # Note that for flow, 3 channels are stored in the JPEG: the first two + # corresponds to horizontal and vertical displacement, respectively. + # The last channel contains zeros and is dropped later in the preprocessing. + # Hence, the output number of channels for flow is 2. + num_raw_channels = 3 if (is_rgb or is_flow) else 1 + decoder_builder.add_fn( + fn=lambda x: processors.decode_jpeg(x, channels=num_raw_channels), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_decode_jpeg') + + if is_flow: + # Cast the flow to `tf.float32`, normalizing between [-1.0, 1.0]. + preprocessor_builder.add_fn( + fn=lambda x: processors.normalize_image(x, zero_centering_image=True), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_normalize') + + # Resize images (resize happens only if necessary to save compute). + preprocessor_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x: processors.resize_smallest( + x, min_resize, is_flow=is_flow, method=resize_method), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_resize_smallest') + + if is_training: + # Standard image data augmentation: random crop and random flip. + if use_crop_and_resize_video_mae: + preprocessor_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x, s=None: crop_and_resize_image_vmae( + x), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_crop_and_resize', + # Use state to keep coherence between modalities if requested. + stateful=sync_random_state) + else: + preprocessor_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x, s=None: processors.crop_image( + x, crop_size, crop_size, True, state=s), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_random_crop', + # Use state to keep coherence between modalities if requested. + stateful=sync_random_state) + if random_flip: + preprocessor_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x, s=None: processors.random_flip_left_right( + x, state=s, is_flow=is_flow), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_random_flip', + # Use state to keep coherence between modalities if requested. + stateful=sync_random_state) + else: + # Central crop of the frames. + preprocessor_builder.add_fn( + fn=lambda x: processors.crop_image(x, crop_size, crop_size, False), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_central_crop') + + if is_flow: + # Keep only two channels for the flow: horizontal and vertical displacement. + preprocessor_builder.add_fn( + fn=lambda x: x[:, :, :, :2], + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_extract_flow_channels') + + # Clip the flow to stay between [-1.0 and 1.0] + preprocessor_builder.add_fn( + fn=lambda x: tf.clip_by_value(x, -1.0, 1.0), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_clip_flow') + else: + # Cast the frames to `tf.float32`, normalizing according to + # `zero_centering_image`. + preprocessor_builder.add_fn( + fn=lambda x: processors.normalize_image(x, zero_centering_image), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_normalize') + + preprocessor_builder.add_fn( + fn=lambda x: x - normalization_mean, + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_subtract_given_mean') + + preprocessor_builder.add_fn( + fn=lambda x: x / normalization_std, + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_divide_by_given_std') + + if num_test_clips > 1 and not is_training: + # In this case, multiple clips are merged together in batch dimension which + # will be `B * num_test_clips`. + postprocessor_builder.add_fn( + fn=lambda x: tf.reshape( # pylint: disable=g-long-lambda + x, (-1, num_frames, x.shape[2], x.shape[3], x.shape[4])), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_reshape') + + +def sample_sequence_uniformly( + sequence: tf.Tensor, + num_steps: int, + is_training: bool = True) -> tf.Tensor: + """Uniform frame sampling. + + Sample frames based on uniform sampling following TSN (Wang et al., 2019) + used by Tong et al. in VideoMAE. The stride is automatically computed based on + the length of the sequence and the number of frames to take (`num_steps`). If + `is_training` is set to False, a deterministic sequence will be returned. + + Args: + sequence: Any tensor where the first dimension is timesteps. + num_steps: Number of steps (e.g. frames) to take. + is_training: If is called during training or not. + Returns: + A single tensor with first dimension `num_steps` with the sampled segment. + """ + + sequence_length = tf.shape(input=sequence)[0] + sequence_length = tf.cast(sequence_length, tf.int32) + stride = tf.cast(sequence_length // num_steps, tf.int32) + + if stride > 0: + indices = tf.math.multiply(tf.range(num_steps), stride) + if is_training: + indices = indices + tf.random.uniform(shape=(1, num_steps), minval=0, + maxval=stride, dtype=tf.int32) + else: + if is_training: + indices = tf.sort(tf.random.uniform(shape=(1, num_steps), + minval=0, maxval=sequence_length, + dtype=tf.int32)) + else: + stride_float = tf.cast(sequence_length / num_steps, tf.float32) + indices = tf.cast(tf.range(num_steps, dtype=tf.float32) * stride_float, + tf.int32) + if is_training: + indices = indices[0] + + indices.set_shape((num_steps,)) + output = tf.gather(sequence, indices) + return output + + +def sample_two_sequences_uniformly(sequence: tf.Tensor, num_steps: int): + """Uniform sampling two non-overlapping sequences. + + Sample frames based on uniform sampling following TSN (Wang et al., 2019) + used by Tong et al. in VideoMAE. The stride is automatically computed based on + the length of the sequence and the number of frames to take (`num_steps`) + + Args: + sequence: Any tensor where the first dimension is timesteps. + num_steps: Number of steps (e.g. frames) to take. + Returns: + A single tensor with first dimension `2 * num_steps` with the sampled + segment. + """ + + sequence_length = tf.shape(input=sequence)[0] + sequence_length = tf.cast(sequence_length, tf.int32) + average_duration = tf.cast(sequence_length / num_steps, tf.float32) + + index_1 = tf.cast(tf.range(num_steps, dtype=tf.float32) + * average_duration + average_duration / 2.0, tf.int32) + + index_2 = tf.cast(tf.range(num_steps, dtype=tf.float32) + * average_duration, tf.int32) + indices = tf.concat((index_1, index_2), axis=0) + + indices.set_shape((2 * num_steps,)) + output = tf.gather(sequence, indices) + return output + + +def apply_specaugment(spec: tf.Tensor, spec_augment_params=None): + """Performs SpecAugment on the inputs. + + SpecAugment is a data augmentation technique from arXiv:1904.08779, + that combines three transformations: + - a time warping of up to max(time_warp_max_frames, + time_warp_max_ratio*input_length) frames. + - a masking of sampled frequencies with zeros along the entire time axis + (freq_mask) + - a masking of sampled timesteps with zeros along the entire frequency axis + (time_mask) + + Args: + spec: input mel spectrogram of shape [num_clips, time, freq, num_channels] + or [time, freq, num_channels]. + spec_augment_params: dictionary containing the following - + freq_mask_max_bins (int), max number of consecutive mel bins to mask in a + band. - freq_mask_count (int), number of frequency bands to mask. - + time_mask_max_frames (int), max number of consecutive time frames to mask. + - time_mask_count (int), number of time bands to mask. - + time_mask_max_ratio (float), max time mask ratio. - time_warp_max_frames + (int), max numer of time frames to warp. - time_warp_max_ratio (int), max + ratio of the time warp. + Optionally, the dictionary may contain the following params - + use_dynamic_time_mask_max_frames (bool), whether to determine the + time_mask_max_frames dynamically. - time_masks_per_frame (float) + + Returns: + Augmented mel spectrogram of shape (num_time_bins, num_freq_bins, channels) + or + (num_clips, num_time_bins, num_freq_bins, channels). + """ + # pylint: disable=line-too-long + spec_augment_params_obj = spectrum_augmenter.SpectrumAugmenter.Params() + spec_augment_params_obj.freq_mask_max_bins = spec_augment_params.freq_mask_max_bins + spec_augment_params_obj.freq_mask_count = spec_augment_params.freq_mask_count + spec_augment_params_obj.time_mask_max_frames = spec_augment_params.time_mask_max_frames + spec_augment_params_obj.time_mask_count = spec_augment_params.time_mask_count + spec_augment_params_obj.time_warp_max_frames = spec_augment_params.time_warp_max_frames + spec_augment_params_obj.time_warp_max_ratio = spec_augment_params.time_warp_max_ratio + spec_augment_params_obj.time_mask_max_ratio = spec_augment_params.time_mask_max_ratio + spec_augment_params_obj.use_dynamic_time_mask_max_frames = spec_augment_params.get( + 'use_dynamic_time_mask_max_frames', False) + spec_augment_params_obj.time_masks_per_frame = spec_augment_params.get( + 'time_masks_per_frame', 0.0) + spec_augment_params_obj.time_warp_bound = spec_augment_params.get( + 'time_warp_bound', 'static') + spec_augment_params_obj.name = 'specaugment' + spec_augment_layer = spec_augment_params_obj.Instantiate() + # pylint: enable=line-too-long + + squeeze_axis = [] + if spec.shape.ndims == 3: + spec = spec[None, :, :, :] + squeeze_axis = [0] + elif spec.shape.ndims != 4: + raise ValueError('Spectrogram shape must have 3 or 4 dimensions') + + outputs, _ = spec_augment_layer.FPropDefaultTheta( + spec, tf.zeros(tf.shape(spec)[:2])) + if squeeze_axis: + outputs = tf.squeeze(outputs, axis=squeeze_axis) + return outputs + + +def _decode_spectrogram(spectrogram, + inflate=True, + circular_time_shift=False, + zero_centering=True, + dataset_mean=0, + dataset_stddev=1): + + """Decodes audio spectrogram. + + Args: + spectrogram: input mel spectrogram + inflate: if True, adds a channel dimension + circular_time_shift: If `True`, apply random time shift to spectrograms + zero_centering: if True, zero centers the spectrogram + dataset_mean: mean over the dataset. + dataset_stddev: standard deviation over the dataset. + + Returns: + spectrogram: decoded spectrogram. + + """ + if circular_time_shift: + # randomly sample start time, then cyclically extract whole clip + shift = tf.random.uniform( + shape=(), minval=0, maxval=tf.shape(spectrogram)[0], dtype=tf.int32) + spectrogram = tf.roll(spectrogram, shift=shift, axis=0) + + # Expand the dimension as the specaugmentation always requires the last + # channel dimension. + spectrogram = tf.expand_dims(spectrogram, -1) + if inflate: + spectrogram = tf.tile(spectrogram, [1, 1, 3]) + + # normalize spectrogram by mean and std deviation + spectrogram = spectrogram - dataset_mean + spectrogram = spectrogram / dataset_stddev + if not zero_centering: + spectrogram = spectrogram + 1.0 + spectrogram = spectrogram / 2 + return spectrogram + + +def add_spectrogram(parser_builder, + sampler_builder, + decoder_builder, + preprocessor_builder, + postprocessor_builder, + input_feature_name='melspec/feature/floats', + input_shape=(100, 128), # (frames, num_mel_bins) + output_feature_name='spectrogram', + is_training=True, + num_frames=5, + stride=1, + num_test_clips=1, + spec_augment=True, + spec_augment_params=None, + circular_time_shift=False, + zero_centering_image=False, + dataset_mean=0.0, + dataset_stddev=1.0, + sync_random_state=True, + inflate_spectrograms: bool = True): + """Add audio spectrogram. + + Args: + parser_builder: An instance of a builders.BaseParserBuilder. + sampler_builder: An instance of a builders.SamplerBuilder. + decoder_builder: An instance of a builders.DecoderBuilder. + preprocessor_builder: An instance of a builders.PreprocessorBuilder. + postprocessor_builder: An instance of a builders.PostprocessorBuilder. + input_feature_name: Name of the feature in the input SequenceExample. + Exposing this as an argument allows using this function for different + image features. + input_shape: Shape of the input spectrogram. + output_feature_name: Name of the feature in the output features dictionary. + is_training: Whether or not in training mode. If True, random sample, and + crop are used. + num_frames: Number of seconds to sample per subclip. + stride: Temporal stride to sample frames. + num_test_clips: Number of test clips (1 by default). If more than 1, this + will sample multiple linearly spaced clips within each video at test time. + If 1, then a single clip in the middle of the video is sampled. The clips + are aggreagated in the batch dimension. + spec_augment: Whether to apply augmentation using SpecAugment. + spec_augment_params: Dict of parameters for SpecAugment. + circular_time_shift: If `True`, apply random time shift to spectrograms. + zero_centering_image: If `True`, frames are normalized to values in [-1, 1]. + If `False`, values in [0, 1]. + dataset_mean: Mean of values over the dataset. + dataset_stddev: Standard deviation of values of the dataset. + sync_random_state: Whether to use stateful option to keep random operations + in sync between different modalities. All modalities having this option + True will use the same outcome in random operations such as sampling and + cropping. + inflate_spectrograms: whether or not to repeat the single spectrogram + channel into 3 channels. + """ + if is_training and num_test_clips != 1: + logging.info('`num_test_clips` %d is ignored since `is_training` is true.', + num_test_clips) + if isinstance(parser_builder, builders.SequenceExampleParserBuilder): + parser_builder.parse_feature( + feature_name=input_feature_name, + feature_type=tf.io.FixedLenSequenceFeature( + shape=input_shape, dtype=tf.float32), + output_name=output_feature_name) + else: + raise ValueError('`parser_builder` has an unexpected type.') + + # Temporal sampler. + num_time_bins = num_frames * input_shape[0] + sampler_builder.add_fn( + fn=lambda x: tf.reshape(x, (-1, input_shape[1])), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_sampler_reshape') + if is_training: + # Sample random clip. + sampler_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x, s=None: processors.sample_sequence( + x, num_time_bins, True, stride, state=s), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_random_sample', + # Use state to keep coherence between modalities if requested. + stateful=sync_random_state) + else: + if num_test_clips > 1: + # Sample linspace clips. + sampler_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x: processors.sample_linspace_sequence( + x, num_test_clips, num_time_bins, stride), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_linspace_sample') + else: + # Sample middle clip. + sampler_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x: processors.sample_sequence( + x, num_time_bins, False, stride), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_middle_sample') + # pylint: disable=g-long-lambda + decoder_builder.add_fn( + fn=lambda x: _decode_spectrogram( + x, inflate_spectrograms, circular_time_shift and is_training, + zero_centering_image, dataset_mean, dataset_stddev), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_decode_spectrogram') + # pylint: enable=g-long-lambda + + if is_training and spec_augment: + # Apply specaugment + preprocessor_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x, s=None: apply_specaugment( + x, spec_augment_params), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_specaugment') + + if num_test_clips > 1 and not is_training: + # In this case, multiple clips are merged together in batch dimenstion which + # will be `B * num_test_clips`. + postprocessor_builder.add_fn( + fn=lambda x: tf.reshape( # pylint: disable=g-long-lambda + x, (-1, num_time_bins, x.shape[2], x.shape[3])), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_reshape') diff --git a/scenic/projects/av_mae/evaluation_lib.py b/scenic/projects/av_mae/evaluation_lib.py new file mode 100644 index 0000000000000000000000000000000000000000..26f7ece93b728395db614c6c49f642e02fa0bd2f --- /dev/null +++ b/scenic/projects/av_mae/evaluation_lib.py @@ -0,0 +1,87 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Functions for evaluation.""" + +from absl import logging +import numpy as np +from scipy import stats +from sklearn.metrics import average_precision_score +from sklearn.metrics import roc_auc_score + + +def get_d_prime(auc_roc_value): + d_prime = stats.norm().ppf(auc_roc_value) * np.sqrt(2.0) + return d_prime + + +def compute_mean_avg_precision_dprime(logits, + labels, + suffix='', + suffix_separator='_', + return_per_class_ap=False): + """Computes mean average precision and d-prime for multi-label classification. + + Args: + logits: Numpy array of shape [num_examples, num_classes] + labels: Numpy array of shape [num_examples, num_classes] + suffix: Suffix to add to the summary + suffix_separator: Separator before adding the suffix + return_per_class_ap: If True, return results for each class in the summary. + + Returns: + summary: Dictionary containing the mean average precision, ROC AUC, d-prime, + and maybe the average precision per class. + """ + + assert logits.shape == labels.shape, 'Logits and labels have different shapes' + n_classes = logits.shape[1] + average_precisions = [] + if suffix: + suffix = suffix_separator + suffix + summary = {} + + for i in range(n_classes): + ave_precision = average_precision_score(labels[:, i], logits[:, i]) + if np.isnan(ave_precision): + logging.warning('AP for class %d is NaN', i) + + if return_per_class_ap: + summary_key = f'per_class_average_precision_{i}{suffix}' + summary[summary_key] = ave_precision + average_precisions.append(ave_precision) + + nanmean_ap = np.nanmean(average_precisions) + summary[f'nanmean_average_precision{suffix}'] = nanmean_ap + logging.info('NanMean AP is %0.5f', nanmean_ap) + logging.info('Shape of logits for computing mAP: %s', logits.shape) + logging.info('Shape of labels for computing mAP: %s', labels.shape) + + # Compute overall mAP, ROC AUC, d-prime. With average=None, scores for each + # class are returned. + auc_pc = roc_auc_score(labels, logits, average=None) + + mean_average_precision = np.mean(average_precisions) + mean_auc = np.mean(auc_pc) + balanced_d_prime = get_d_prime(mean_auc) + + logging.info('====Reporting overall multi-label evaluation metrics:') + logging.info('Mean AP is %0.5f', mean_average_precision) + logging.info('Mean AUC is %0.5f', mean_auc) + logging.info('Mean d-prime is %1.4f', balanced_d_prime) + summary[f'mAP{suffix}'] = mean_average_precision + summary[f'AUC{suffix}'] = mean_auc + summary[f'd-prime{suffix}'] = balanced_d_prime + + return summary diff --git a/scenic/projects/av_mae/main.py b/scenic/projects/av_mae/main.py new file mode 100644 index 0000000000000000000000000000000000000000..2e3777d1a1bcfcad1fdd64250147d070866e1337 --- /dev/null +++ b/scenic/projects/av_mae/main.py @@ -0,0 +1,80 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for Audiovisual Masked Autoencoders.""" + +from absl import flags +from clu import metric_writers +from clu import platform +import flax +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.av_mae import registry +from scenic.projects.av_mae import trainer as avmae_trainer +from scenic.projects.av_mae import trainer_multimodal as avmae_multimodal_trainer +from scenic.projects.av_mae import transfer_trainer as avmae_transfer_trainer +from scenic.projects.av_mae import transfer_trainer_multimodal +from scenic.train_lib_deprecated import train_utils + + +FLAGS = flags.FLAGS +FINAL_CKPT_ARTIFACT_DESCRIPTION = 'Final checkpoint' + +# Flax checkpointing is deprecated. This is a temporary fix. +flax.config.update('flax_use_orbax_checkpointing', False) + + +def get_trainer(trainer_name): + """Returns the trainer to use.""" + if trainer_name == 'avmae_trainer': + return avmae_trainer.train + elif trainer_name == 'avmae_transfer_trainer': + return avmae_transfer_trainer.train + elif trainer_name == 'avmae_multimodal_trainer': + return avmae_multimodal_trainer.train + elif trainer_name == 'transfer_trainer_multimodal': + return transfer_trainer_multimodal.train + else: + raise ValueError(f'Unsupported trainer: {trainer_name}') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for AV-MAE training.""" + model_cls = registry.get_model_cls(config.model_name) + + # Don't write to datatable, as it cannot handle large image summaries. + del writer + writer = metric_writers.create_default_writer( + FLAGS.workdir, just_logging=jax.process_index() > 0, asynchronous=True, + write_to_datatable=False) + + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + trainer = get_trainer(config.trainer_name) + trainer( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/av_mae/mbt.py b/scenic/projects/av_mae/mbt.py new file mode 100644 index 0000000000000000000000000000000000000000..dc0d4f478d759863bce86ac46e333cbf86646b2a --- /dev/null +++ b/scenic/projects/av_mae/mbt.py @@ -0,0 +1,1564 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""MBT model for finetuning.""" + +import functools +import re +from typing import Any, Callable, Dict, Optional, Sequence, Tuple + +from absl import logging +import flax +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.common_lib import debug_utils +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import classification_model +from scenic.model_lib.base_models import model_utils as base_model_utils +from scenic.model_lib.base_models.classification_model import ClassificationModel +from scenic.model_lib.layers import nn_layers +from scenic.projects.av_mae import model_utils as avmae_model_utils +from scenic.projects.baselines import vit +from scenic.projects.mbt import model as mbt_model +from scenic.projects.vivit import model_utils as vivit_utils +import scipy + + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] +PyTree = Any + +# pylint: disable=protected-access +_MBT_CLASSIFICATION_METRICS = mbt_model._MBT_CLASSIFICATION_METRICS +_MODALITIES = mbt_model._MODALITIES +# pylint: enable=protected-access + + +def add_positional_embed( + x: jnp.ndarray, + feat_name: str, + positional_embedding='sinusoidal_1d'): + """Adds positional embedding.""" + + if x.ndim != 3: # (batch, len, emb) + raise ValueError(f'Input should be 3 dimensional. Got {x.shape}') + if positional_embedding != 'sinusoidal_1d': + raise ValueError('Only sinusoidal_1d embedding is supported!') + + return avmae_model_utils.add_positional_embeddings( + x, positional_embedding, input_shape=x.shape, + layer_name=f'posembed_{feat_name}') + + +def _inflate_with_mean_channel(x): + """Inflate tensor with an extra mean channel.""" + mean_channel = jnp.mean(x, axis=-1, keepdims=True) + y = jnp.concatenate([x, mean_channel], axis=-1) + return y + + +class Encoder(nn.Module): + """Transformer Encoder. + + Attributes: + inputs: nd-array, Input data + modality_fusion: Tuple with modalities to combine. + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of attention heads. + attention_config: Has parameters for the type of attention. + dropout_rate: Dropout rate. + fusion_layer: Which layer to fuse modalities. fusion_layer == 0 provides + early fusion. + attention_dropout_rate: Dropout for attention heads. + stochastic_droplayer_rate: Probability of dropping a layer linearly + grows from 0 to the provided value. Our implementation of stochastic + depth follows timm library, which does per-example layer dropping and + uses independent dropping patterns for each skip-connection. + use_bottleneck: If True, adds self-attention bottleneck. + test_with_bottlenecks: Whether to use bottlenecks at test time. + share_encoder: If True, different modalities share the same encoder weights + for the layers before fusion. + add_pos_embedding: If True, positional embeddings are added to the input + token embeddings. + return_bottlenecks: If True, return bottleneck embeddings. + """ + + mlp_dim: int + num_layers: int + num_heads: int + attention_config: Optional[ml_collections.ConfigDict] = None + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_droplayer_rate: float = 0.0 + modality_fusion: Tuple[str] = ('spectrogram',) + fusion_layer: int = 0 + use_bottleneck: bool = False + test_with_bottlenecks: bool = True + share_encoder: bool = False + add_pos_embedding: bool = True + return_bottlenecks: bool = False + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: Dict[str, Any], + bottleneck: jnp.ndarray, *, + train: bool): + """Applies Transformer model on the inputs.""" + + def get_encoder_block(encoder_block, droplayer_p, name): + """Returns the encoder block for a single layer.""" + dtype = jax.dtypes.canonicalize_dtype(self.dtype) + return encoder_block( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + droplayer_p=droplayer_p, + name=name, + dtype=dtype) + + def get_context(target_modality, modality_fusion, x): + """Returns list of context modalities.""" + context = [] + for modality in _MODALITIES: + if modality != target_modality and modality in modality_fusion: + context.append(x[modality]) + return context + + def combine_context(x, other_modalities): + """Combine x with a list of other modalities.""" + t_x = x.shape[1] + # Append x to the end of the list + other_modalities.append(x) + x_combined = jnp.concatenate(other_modalities, axis=1) + return x_combined, t_x + + assert self.modality_fusion + + # Add positional embeddings + if self.add_pos_embedding: + for modality in self.modality_fusion: + if modality == 'spectrogram': + modality_name = 'spec' + else: + modality_name = modality + if modality == 'rgb': + name = '' + else: + name = '_' + modality_name + x[modality] = add_positional_embed(x[modality], 'posembed_input' + name) + + if self.attention_config is None or self.attention_config.type in [ # pytype: disable=attribute-error + 'spacetime', 'factorized_encoder' + ]: + encoder_block = mbt_model.EncoderBlock + else: + raise ValueError(f'Unknown attention type {self.attention_config.type}') # pytype: disable=attribute-error + + use_bottlenecks = train or self.test_with_bottlenecks + x_combined = None + # Input Encoder + for lyr in range(self.num_layers): + droplayer_p = ( + lyr / max(self.num_layers - 1, 1)) * self.stochastic_droplayer_rate + encoders = {} + first_modality = self.modality_fusion[0] + encoders[first_modality] = get_encoder_block(encoder_block, droplayer_p, + f'encoderblock_{lyr}') + for modality in self.modality_fusion: + # This is important for loading old checkpoints, where we used 'spec' + if modality == 'spectrogram': + modality_name = 'spec' + else: + modality_name = modality + if modality != first_modality: + if self.share_encoder: + encoders[modality] = encoders[first_modality] + else: + encoders[modality] = get_encoder_block( + encoder_block, droplayer_p, + f'encoderblock_{lyr}_' + modality_name) + + if (lyr < self.fusion_layer or len(self.modality_fusion) == 1 or + (self.use_bottleneck and not use_bottlenecks)): + for modality in self.modality_fusion: + x[modality] = encoders[modality](x[modality], deterministic=not train) + else: + if self.use_bottleneck: + bottle = [] + for modality in self.modality_fusion: + t_mod = x[modality].shape[1] + in_mod = jnp.concatenate([x[modality], bottleneck], axis=1) + out_mod = encoders[modality](in_mod, deterministic=not train) + x[modality] = out_mod[:, :t_mod] + bottle.append(out_mod[:, t_mod:]) + bottleneck = jnp.mean(jnp.stack(bottle, axis=-1), axis=-1) + else: + if not self.share_encoder and len(self.modality_fusion) > 1: + x_new = {} + for modality in self.modality_fusion: + other_modalities = get_context(modality, self.modality_fusion, x) + combined_mods, t = combine_context(x[modality], other_modalities) + combined_mods = encoders[modality]( + combined_mods, deterministic=not train) + x_new[modality] = combined_mods[:, -t:] + x = x_new + + elif self.share_encoder and len(self.modality_fusion) > 1: + if x_combined is None: + x_combined = [] + for modality in self.modality_fusion: + x_combined.append(x[modality]) + x_combined = jnp.concatenate(x_combined, axis=1) + x_combined = encoders[first_modality]( + x_combined, deterministic=not train) + if x_combined is not None: + x_out = x_combined + else: + x_out = [] + for modality in self.modality_fusion: + x_out.append(x[modality]) + x_out = jnp.concatenate(x_out, axis=1) + encoded = nn.LayerNorm(name='encoder_norm')(x_out) + + if self.return_bottlenecks: + assert self.use_bottleneck, ("`use_bottleneck' should be True to return " + "bottlenecks") + return encoded, bottleneck + + return encoded + + +class ProjectionHeadAndClassifier(nn.Module): + """Projection Head and Classifier for MBT. + + Attributes: + inputs: nd-array, Input data + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token', 'onetoken' + num_classes: Number of output classes. + modality_fusion: Tuple with modalities to combine. + representation_size: Size of the representation layer in the model's head. + if None, we skip the extra projection + tanh activation at the end. + num_layers: Number of extra projection + tanh activation layers before + projection. Must set representation_size. + return_prelogits: If true, return the final representation of the network + before the classification head. Useful when using features for a + downstream task. + dtype: JAX data type for activations. + """ + + classifier: str + num_classes: int + modality_fusion: Tuple[str] + representation_size: Optional[int] = None + num_layers: int = 1 # default set for backwards compatibility + return_prelogits: bool = False + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: Dict[str, Any], + temporal_dims: Dict[str, Any], + *, + train: bool): + """Applies projection and classifier on the inputs.""" + if self.num_layers > 1: + assert (self.representation_size + is not None), 'Please provide representation_size' + x_out = {} + counter = 0 + if self.classifier in ['onetoken', 'token', '0']: + # Obtaining the CLS tokens for each modality. + # Note when self.classifier is 'onetoken', counter remains 0. + for modality in self.modality_fusion: + x_out[modality] = x[:, counter] + counter += temporal_dims[modality] + 1 + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + # Note here we pool each modality separately + for modality in self.modality_fusion: + modality_tokens = x[:, counter:counter + temporal_dims[modality]] + x_out[modality] = fn( + modality_tokens, axis=list(range(1, modality_tokens.ndim - 1))) + counter += temporal_dims[modality] + + if self.representation_size is not None: + for layer in range(self.num_layers): + if self.num_layers == 1: # backward compatibility with previous models + name = 'pre_logits' + else: + name = 'pre_logits_fc_{}'.format(layer) + pre_logits_fc = nn.Dense( + self.representation_size, name=name) + if isinstance(x_out, dict): + for modality in x_out: + x_out[modality] = pre_logits_fc(x_out[modality]) + x_out[modality] = nn.tanh(x_out[modality]) + else: + x_out = pre_logits_fc(x_out) + x_out = nn.tanh(x_out) + else: + if not isinstance(x_out, dict): + x_out = nn_layers.IdentityLayer(name='pre_logits')(x_out) + + if self.return_prelogits: + return x_out + if isinstance(x_out, dict): + output_projection_fc = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection') + x_pool = 0 + for modality in x_out: + x_out[modality] = output_projection_fc(x_out[modality]) + x_pool += x_out[modality] + x_pool /= len(x_out) + # We always use the average CLS logits during inference. + if not train: + return x_pool + else: + x_out = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x_out) + logging.info('Shape of final logits is %s', x_out.shape) + return x_out + + +class MBT(nn.Module): + """Audio-Visual Fusion Transformer model for Video. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_classes: Number of output classes. + modality_fusion: Tuple with modalities to combine. + fusion_layer: Which layer to fuse modalities. + num_heads: Number of self-attention heads. + num_layers: Number of layers. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + representation_size: Size of the representation layer in the model's head. + if None, we skip the extra projection + tanh activation at the end. + temporal_encoding_config: ConfigDict which defines the type of input + encoding when tokenising the video. + attention_config: ConfigDict which defines the type of spatio-temporal + attention applied in the model. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_droplayer_rate: Probability of dropping a layer. Linearly + increases from 0 to the provided value.. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + return_prelogits: If true, return the final representation of the network + before the classification head. Useful when using features for a + downstream task. + return_preclassifier: If true, return a dict of all token embeddings. + Useful when using token embeddings for a downstream task. + return_as_dict: If true, return the token embeddings as a dictionary instead + of a concatenated tensor. + use_bottleneck: If True, adds self-attention bottleneck. + n_bottlenecks: Number of bottleneck tokens. + test_with_bottlenecks: Whether to use bottlenecks at test time. + share_encoder: If True, different modalities share the same encoder weights + for the layers before fusion. + return_bottlenecks: If True, return bottleneck embeddings. + use_modality_tokens: If True, modality tokens are used. + dtype: JAX data type for activations. + """ + + mlp_dim: int + num_layers: int + num_heads: int + num_classes: int + patches: ml_collections.ConfigDict + hidden_size: int + temporal_encoding_config: ml_collections.ConfigDict + attention_config: ml_collections.ConfigDict + representation_size: Optional[int] = None + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_droplayer_rate: float = 0. + classifier: str = 'gap' + modality_fusion: Tuple[str] = ('spectrogram',) + fusion_layer: int = 0 + return_prelogits: bool = False + return_preclassifier: bool = False + return_as_dict: bool = True + use_bottleneck: bool = False + n_bottlenecks: int = 4 + test_with_bottlenecks: bool = True + share_encoder: bool = False + return_bottlenecks: bool = False + use_modality_tokens: bool = False + dtype: Any = jnp.float32 + + def _temporal_encode(self, x: Dict[str, jnp.ndarray]): + temporal_dims = {} + is_single_modal = 'size' in self.patches + for modality in self.modality_fusion: + patch = self.patches if is_single_modal else self.patches[modality] + if modality == 'flow': + # Inflate from 2 channels to 3 channels with the mean of the first two. + x[modality] = _inflate_with_mean_channel(x[modality]) + x[modality], _ = mbt_model.temporal_encode( + x[modality], modality, self.temporal_encoding_config, patch, + self.hidden_size) + n, temporal_dims[modality], c = x[modality].shape + # If we want to add a class token, add it here. + if self.classifier in ['token']: + if modality == 'rgb' or len(self.modality_fusion) == 1: + name = '' + else: + name = modality + cls = self.param('cls'+name, nn.initializers.zeros, (1, 1, c), + x[modality].dtype) + cls = jnp.tile(cls, [n, 1, 1]) + x[modality] = jnp.concatenate([cls, x[modality]], axis=1) + return x, temporal_dims + + def add_modality_token(self, x_tokens_dict, name: str = 'Encoder'): + """Add modality learned tokens.""" + for key, x_tokens in x_tokens_dict.items(): + modality_token = self.param(f'{name}_modality_token_{key}', + nn.initializers.zeros, + (1, 1, x_tokens.shape[-1])) + x_tokens = x_tokens + modality_token + x_tokens_dict[key] = x_tokens + + return x_tokens_dict + + @nn.compact + def __call__(self, + x: Dict[str, jnp.ndarray], + *, + train: bool, + debug: bool = False): + assert self.fusion_layer <= self.num_layers and self.fusion_layer >= 0 + assert self.classifier in ['onetoken', 'token', '0', 'gap', 'gmp', 'gsp'] + attention_type = self.attention_config.get('type', 'spacetime') + assert attention_type not in [ + 'factorized_transformer_block', 'factorized_self_attention_block', + 'factorized_dot_product_attention' + ], ('Factorised attention is not implemented') + + x, temporal_dims = self._temporal_encode(x) + if self.use_modality_tokens: + x = self.add_modality_token(x) + + bottleneck_dtype = x[self.modality_fusion[0]].dtype + n, _, c = x[self.modality_fusion[0]].shape + bottleneck = None + if self.use_bottleneck: + n_bottlenecks = self.n_bottlenecks + if self.classifier in ['token']: + n_bottlenecks += 1 + bottleneck = self.param('bottleneck', + nn.initializers.normal(stddev=0.02), # From BERT. + (1, n_bottlenecks, c), bottleneck_dtype) + bottleneck = jnp.tile(bottleneck, [n, 1, 1]) + + token_lengths = {m: x[m].shape[1] for m in self.modality_fusion} + output = Encoder( + modality_fusion=self.modality_fusion, + fusion_layer=self.fusion_layer, + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + attention_config=self.attention_config, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_droplayer_rate=self.stochastic_droplayer_rate, + use_bottleneck=self.use_bottleneck, + test_with_bottlenecks=self.test_with_bottlenecks, + share_encoder=self.share_encoder, + return_bottlenecks=self.return_bottlenecks, + dtype=self.dtype, + name='Transformer')(x, bottleneck, train=train) + if self.return_bottlenecks: + x, bottleneck = output + else: + x = output + if self.return_preclassifier: + if self.return_as_dict: + x_dict = {} + for m in self.modality_fusion: + v = token_lengths[m] + x_dict[m] = x[:, :v] + x = x[:, v:] + x = x_dict + if self.return_bottlenecks: + return x, bottleneck + return x + + x_out = ProjectionHeadAndClassifier( + classifier=self.classifier, + num_classes=self.num_classes, + modality_fusion=self.modality_fusion, + representation_size=self.representation_size, + return_prelogits=self.return_prelogits)( + x, temporal_dims, train=train) + return x_out + + +class MBTMultilabelClassificationModel(vit.ViTMultiLabelClassificationModel): + """Video Transformer model for multi-class classification.""" + + def build_flax_model(self) -> nn.Module: + assert (self.config.model.attention_config.get('type', 'spacetime') != + 'factorized_encoder'), ( + 'Please add support for factorized_encoder for models with ' + 'sigmoid loss.') + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + mbt_args = { + 'num_classes': + self.dataset_meta_data['num_classes'], + 'modality_fusion': + self.config.model.modality_fusion, + 'fusion_layer': + self.config.model.fusion_layer, + 'use_bottleneck': + self.config.model.get('use_bottleneck', False), + 'test_with_bottlenecks': + self.config.model.get('test_with_bottlenecks', True), + 'n_bottlenecks': + self.config.model.get('n_bottlenecks', 4), + 'share_encoder': + self.config.model.get('share_encoder', False), + 'mlp_dim': + self.config.model.mlp_dim, + 'num_layers': + self.config.model.num_layers, + 'num_heads': + self.config.model.num_heads, + 'representation_size': + self.config.model.representation_size, + 'patches': + self.config.model.patches, + 'hidden_size': + self.config.model.hidden_size, + 'temporal_encoding_config': + self.config.model.temporal_encoding_config, + 'attention_config': + self.config.model.attention_config, + 'classifier': + self.config.model.classifier, + 'dropout_rate': + self.config.model.get('dropout_rate', 0.1), + 'attention_dropout_rate': + self.config.model.get('attention_dropout_rate', 0.1), + 'stochastic_droplayer_rate': + self.config.model.get('stochastic_droplayer_rate', 0), + 'return_prelogits': + self.config.model.get('return_prelogits', False), + 'return_preclassifier': + self.config.model.get('return_preclassifier', False), + 'dtype': + model_dtype + } + return MBT(**mbt_args) + + def init_from_train_state(self, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_proj: bool = False) -> Any: + """Updates the train_state with data from restored_train_state.""" + return initialise_from_train_state( + self.config, train_state, restored_train_state, restored_model_cfg, + restore_output_proj) + + def loss_function( + self, + logits: jnp.ndarray, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None, + ) -> float: + """Returns sigmoid cross entropy loss with an L2 penalty on the weights. + + Args: + logits: Output of model in shape [batch, length, num_classes]. Optionally, + this can also be a dictionary with logits for individual modalities. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + weights = batch.get('batch_mask') + labels = batch['label'] + + assert self.dataset_meta_data.get('target_is_onehot', False) + + label_weights = self.dataset_meta_data.get('class_weights', None) + if self.config.model.classifier in ['onetoken']: + if isinstance(labels, dict): + assert 'all' in labels, 'mixmod must be turned off.' + labels = labels['all'] + sig_ce_loss = base_model_utils.weighted_sigmoid_cross_entropy( + logits['onetoken'], + labels, + weights, + label_weights=label_weights, + label_smoothing=self.config.get('label_smoothing')) + elif isinstance(logits, dict): + sig_ce_loss = [] + for modality in logits: + sig_ce_loss.append(base_model_utils.weighted_sigmoid_cross_entropy( + logits[modality], + labels[modality], + weights, + label_weights=label_weights, + label_smoothing=self.config.get('label_smoothing'))) + sig_ce_loss = jnp.mean(jnp.array(sig_ce_loss)) + else: + if isinstance(labels, dict): + assert 'all' in labels, 'mixmod must be turned off.' + labels = labels['all'] + sig_ce_loss = base_model_utils.weighted_sigmoid_cross_entropy( + logits, + labels, + weights, + label_weights=label_weights, + label_smoothing=self.config.get('label_smoothing')) + if self.config.get('l2_decay_factor') is None: + total_loss = sig_ce_loss + else: + l2_loss = base_model_utils.l2_regularization(model_params) + total_loss = sig_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss # pytype: disable=bad-return-type # jax-ndarray + + +class MBTClassificationModel(ClassificationModel): + """Audio Video Transformer model for n-way classification.""" + + def build_flax_model(self) -> nn.Module: + assert (self.config.model.attention_config.get('type', 'spacetime') != + 'factorized_encoder'), ( + 'Other attention types not supported.') + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return MBT( + num_classes=self.dataset_meta_data['num_classes'], + modality_fusion=self.config.model.modality_fusion, + fusion_layer=self.config.model.fusion_layer, + use_bottleneck=self.config.model.get('use_bottleneck', False), + test_with_bottlenecks=self.config.model.get( + 'test_with_bottlenecks', True), + n_bottlenecks=self.config.model.get('n_bottlenecks', 4), + share_encoder=self.config.model.get('share_encoder', False), + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + representation_size=self.config.model.representation_size, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + temporal_encoding_config=self.config.model.temporal_encoding_config, + attention_config=self.config.model.attention_config, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + stochastic_droplayer_rate=self.config.model.get( + 'stochastic_droplayer_rate', 0), + return_prelogits=self.config.model.get('return_prelogits', False), + return_preclassifier=self.config.model.get( + 'return_preclassifier', False), + use_modality_tokens=self.config.model.get( + 'use_modality_tokens', False), + dtype=model_dtype) + + def loss_function(self, + logits: jnp.ndarray, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Returns softmax cross entropy loss with an L2 penalty on the weights. + + Args: + logits: Output of model in shape [batch, length, num_classes]. Optionally, + this can also be a dictionary with logits for individual modalities. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + weights = batch.get('batch_mask') + labels = batch['label'] + + assert self.dataset_meta_data.get('target_is_onehot', False) + + if isinstance(logits, dict): + sof_ce_loss = [] + for modality in logits: + sof_ce_loss.append(base_model_utils.weighted_softmax_cross_entropy( + logits[modality], + labels[modality], + weights, + label_smoothing=self.config.get('label_smoothing'))) + sof_ce_loss = jnp.mean(jnp.array(sof_ce_loss)) + else: + sof_ce_loss = base_model_utils.weighted_softmax_cross_entropy( + logits, + labels, + weights, + label_smoothing=self.config.get('label_smoothing')) + if self.config.get('l2_decay_factor') is None: + total_loss = sof_ce_loss + else: + l2_loss = base_model_utils.l2_regularization(model_params) + total_loss = sof_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss # pytype: disable=bad-return-type # jax-ndarray + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one + of the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + label, weights)``` + """ + del split # for all splits, we return the same metric functions + + return functools.partial( + classification_model.classification_metrics_function, + target_is_onehot=self.dataset_meta_data.get('target_is_onehot', False), + metrics=_MBT_CLASSIFICATION_METRICS) + + def init_from_train_state(self, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_proj: bool = False) -> Any: + """Updates the train_state with data from restored_train_state.""" + return initialise_from_train_state( + self.config, train_state, restored_train_state, restored_model_cfg, + restore_output_proj) + + +class MBTMultiHeadClassificationModel(MBTClassificationModel): + """Audio Visual Transformer model for multiple n-way classification.""" + + def __init__(self, config, dataset_meta_data): + super().__init__(config, dataset_meta_data) + + assert self.config.dataset_configs.get('class_splits'), ( + 'dataset_configs.class_splits must be specified') + self.class_splits = np.cumsum(self.config.dataset_configs.class_splits) + if self.config.dataset_configs.get('split_names'): + self.split_names = self.config.dataset_configs.split_names + else: + self.split_names = [str(x + 1) for x in range(len(self.class_splits))] + + assert not config.get('multicrop_softmax_logits', False), ( + 'Returning softmaxed logits during multicrop evaluation is not ' + 'supported for this model.') + + def loss_function(self, + logits: jnp.ndarray, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Return softmax cross entropy loss with an L2 penalty on the weights.""" + weights = batch.get('batch_mask') + labels = batch['label'] + + assert self.dataset_meta_data.get('target_is_onehot', False) + if not isinstance(logits, dict): + all_logits = logits + logits = {} + logits['all'] = all_logits + if isinstance(labels, dict): + assert 'all' in labels, 'mixmod must be turned off.' + labels = labels['all'] + else: + all_labels = labels + labels = {} + labels['all'] = all_labels + + sof_ce_loss = [] + for modality in logits: + if logits[modality].shape[-1] != self.class_splits[-1]: + raise AssertionError( + 'Logit dimension must be equal to number of classes') + + logit_splits = jnp.split(logits[modality], + self.class_splits, axis=-1)[:-1] + assert not isinstance(labels[modality], dict), labels.keys() + labels_splits = jnp.split( + labels[modality], self.class_splits, axis=-1)[:-1] + label_smoothing = self.config.get('label_smoothing') + + sof_ce_losses = [ + base_model_utils.weighted_softmax_cross_entropy( + logit_split, labels_split, weights, label_smoothing) + for logit_split, labels_split in zip(logit_splits, labels_splits) + ] + sof_ce_loss.append(jnp.mean(jnp.array(sof_ce_losses))) + sof_ce_loss = jnp.mean(jnp.array(sof_ce_loss)) + + if self.config.get('l2_decay_factor') is None: + total_loss = sof_ce_loss + else: + l2_loss = base_model_utils.l2_regularization(model_params) + total_loss = sof_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss # pytype: disable=bad-return-type # jnp-type + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one + of the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + label, weights)``` + """ + del split # for all splits, we return the same metric functions + + def classification_metrics_function(logits, batch, metrics, class_splits, + split_names): + + one_hot_targets = batch['label'] + weights = batch.get('batch_mask') # batch_mask might not be defined + + logit_splits = jnp.split(logits, class_splits, axis=-1)[:-1] + one_hot_target_splits = jnp.split( + one_hot_targets, class_splits, axis=-1)[:-1] + + evaluated_metrics = {} + total_loss = [0.0, 0.0] + for logits_i, one_hot_targets_i, name in zip(logit_splits, + one_hot_target_splits, + split_names): + for key, val in metrics.items(): + evaluated_metrics[ + f'{name}_{key}'] = base_model_utils.psum_metric_normalizer( + (val[0](logits_i, one_hot_targets_i, + weights), val[1](logits_i, one_hot_targets_i, + weights))) + if key == 'loss': + total_loss[0] += evaluated_metrics[f'{name}_{key}'][0] + total_loss[1] += evaluated_metrics[f'{name}_{key}'][1] + evaluated_metrics['total_loss'] = total_loss + + if len(class_splits) == 2: + pairwise_acc = base_model_utils.psum_metric_normalizer( + (vivit_utils.joint_accuracy(logits, one_hot_targets, class_splits, + weights), + base_model_utils.num_examples(logits, one_hot_targets, weights))) + pairwise_top_five = base_model_utils.psum_metric_normalizer( + (vivit_utils.joint_top_k( + logits, one_hot_targets, class_splits, k=5, weights=weights), + base_model_utils.num_examples(logits, one_hot_targets, weights))) + eval_name = f'{split_names[0]}-{split_names[1]}' + evaluated_metrics[f'{eval_name}_accuracy'] = pairwise_acc + evaluated_metrics[f'{eval_name}_accuracy_top_5'] = pairwise_top_five + + return evaluated_metrics + + return functools.partial( + classification_metrics_function, + metrics=_MBT_CLASSIFICATION_METRICS, + class_splits=self.class_splits, + split_names=self.split_names) + + +def initialise_from_train_state( + config, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_proj: bool, + mbt_transformer_key: str = 'Transformer', + log_initialised_param_shapes: bool = True, + one_config: bool = True, + prefix_path: Any = None) -> Any: + # TODO(aarnab): Deal with Optax and flax.Optim format train states. + """Updates the train_state with data from restored_train_state. + + This function is written to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + config: Configurations for the model being updated, or tuple of configs. + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of a + pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + restore_output_proj: If true, load the final output projection. Set + to False if finetuning to a new dataset. + mbt_transformer_key: The key used for storing the subtree in the + parameters that keeps Transformer weights, that are supposed to be + initialized from the given pre-trained model. + log_initialised_param_shapes: If true, print tabular summary of all the + variables in the model once they have been initialised. + one_config: If true, we have only a single config. If false, we get a tuple + of configs in the order [init_config, model_config, dataset_config]. This + is useful for works that build upon MBT and have different models in their + config. + prefix_path: If parameters are in a subtree. + + Returns: + Updated train_state. + """ + def _get_optimizer(train_state): + if hasattr(train_state, 'optimizer'): + if hasattr(train_state.optimizer, 'target'): + return train_state.optimizer.target + else: + return train_state.optimizer['target'] + else: + return train_state.params + + # Split up configs + if one_config: + init_config = config.init_from + model_config = config.model + else: + init_config, model_config, _ = config + + params = flax.core.unfreeze(_get_optimizer(train_state)) + logging.info('Parameters in the target model are: %s', params.keys()) + restored_params = flax.core.unfreeze(_get_optimizer(restored_train_state)) + + if init_config.model_type == 'vit': + params = initialise_from_vit(params=params, + restored_params=restored_params, + config=config, + restored_model_cfg=restored_model_cfg, + mbt_transformer_key=mbt_transformer_key, + restore_output_proj=restore_output_proj, + prefix_path=prefix_path) + + elif init_config.model_type == 'multimae': + encoder_strategy = restored_model_cfg.model.encoder_strategy + if encoder_strategy == 'separate_encoders': + params = initialise_from_separate_encoders( + params, restored_params, config, restored_model_cfg) + elif encoder_strategy == 'separate_encoders_and_concat': + params = initialise_from_mid_fusion( + params, restored_params, config, restored_model_cfg) + elif encoder_strategy in ['concat_and_encode', 'same_encoder']: + params = initialise_from_same_encoder( + params, restored_params, config, restored_model_cfg) + else: + raise AssertionError(f'Unsupported encoder strategy {encoder_strategy}.') + + elif init_config.model_type == 'mbt': + for m_key, m_params in restored_params.items(): + logging.info('mkey is: %s', m_key) + if 'ProjectionHeadAndClassifier' in m_key: + for tm_key, tm_params in m_params.items(): + if tm_key == 'output_projection': + if restore_output_proj: + params[m_key][tm_key] = tm_params + else: + logging.info('Skipping output projection in restoring weights') + pass + elif tm_key == 'pre_logits': + if model_config.representation_size is None: + # We don't have representation_size in the new model, so let's + # ignore if from the pretained model, in case it has it. + # Note, removing the key from the dictionary is necessary to + # prevent obscure errors from the Flax optimizer. + params.pop(tm_key, None) + else: + assert restored_model_cfg.model.representation_size + params[m_key][tm_key] = tm_params + else: + if m_key in params: + params[m_key] = m_params + else: + logging.info('Skipping %s. In restored model but not in target', + m_key) + else: + raise ValueError( + f'Type of model initialising from unknown: {init_config.model_type}') + + if log_initialised_param_shapes: + logging.info('Parameter summary after initialising from train state') + debug_utils.log_param_shapes(params) + if hasattr(train_state, 'optimizer'): + return train_state.replace( + optimizer=train_state.optimizer.replace( + target=flax.core.freeze(params))) + else: + return train_state.replace(params=flax.core.freeze(params)) + + +def _flatten(x): + return flax.traverse_util.flatten_dict(x, sep='/') + + +def _unflatten(x): + return flax.traverse_util.unflatten_dict(x, sep='/') + + +def initialise_from_vit(params: PyTree, + restored_params: PyTree, + config: ml_collections.ConfigDict, + restored_model_cfg: ml_collections.ConfigDict, + mbt_transformer_key: str, + restore_output_proj: bool, + prefix_path: Any) -> PyTree: + """Initialize the parameters from a ViT like model.""" + init_config = config.init_from + model_config = config.model + dataset_config = config.dataset_configs + + if prefix_path: + video_params = params[prefix_path] + else: + video_params = params + + # Start moving parameters, one-by-one and apply changes if needed + for m_key, m_params in restored_params.items(): + if 'ProjectionHeadAndClassifier' in m_key: + for tm_key, tm_params in m_params.items(): + if tm_key == 'output_projection': + if restore_output_proj: + video_params[m_key][tm_key] = tm_params + else: + logging.info('Skipping output projection in restoring weights') + pass + elif tm_key == 'pre_logits': + if model_config.representation_size is None: + # We don't have representation_size in the new model, so let's + # ignore if from the pretained model, in case it has it. + # Note, removing the key from the dictionary is necessary to + # prevent obscure errors from the Flax optimizer. + video_params.pop(tm_key, None) + else: + assert restored_model_cfg.model.representation_size + video_params[m_key][tm_key] = tm_params + + elif m_key in ['Transformer']: + for tm_key, tm_params in m_params.items(): + if tm_key == 'posembed_input': # Might need resolution change + init_posemb( + video_params[mbt_transformer_key], + m_params, + init_config, + model_config, + dataset_config, + restored_model_cfg, + 'posembed_input', + prefix_path=prefix_path) + init_posemb( + video_params, + m_params, + init_config, + model_config, + dataset_config, + restored_model_cfg, + 'bottleneck', + prefix_path=prefix_path) + for modality in model_config.modality_fusion: + if modality == 'spectrogram': + modality_name = 'spec' + else: + modality_name = modality + name = '_' + modality_name + init_posemb( + video_params[mbt_transformer_key], + m_params, + init_config, + model_config, + dataset_config, + restored_model_cfg, + 'posembed_input' + name, + prefix_path=prefix_path) + elif 'encoderblock' in tm_key: + logging.info('Loading encoder parameters.') + init_encoderblock( + video_params[mbt_transformer_key], m_params, + tm_key, model_config) + else: # Other parameters of the Transformer encoder + video_params[mbt_transformer_key][tm_key] = tm_params + elif m_key == 'embedding': + init_embedding(video_params, m_params, init_config, + model_config, 'embedding') + for modality in model_config.modality_fusion: + if modality == 'spectrogram': + modality_name = 'spec' + else: + modality_name = modality + name = '_' + modality_name + init_embedding(video_params, m_params, init_config, + model_config, 'embedding' + name) + + else: + mkey_found = False + if m_key in params: + video_params[m_key] = m_params + mkey_found = True + for modality in model_config.modality_fusion: + if modality == 'spectrogram': + modality_name = 'spec' + else: + modality_name = modality + mkey_name = '{}_'.format(m_key) + modality_name + if mkey_name in params: + video_params[mkey_name] = m_params + mkey_found = True + if not mkey_found: + logging.info('Skipping %s. In restored model but not in target', m_key) + + return params + + +def initialise_from_separate_encoders( + params: PyTree, + restored_params: PyTree, + config: ml_collections.ConfigDict, + restored_model_cfg: ml_collections.ConfigDict) -> PyTree: + """Initialise MBT parameters from MultiMAE with separate encoders. + + Args: + params: PyTree of model parameters in the target model. + restored_params: PyTree of model parameters to restore. + config: Configuration of the target model. + restored_model_cfg: Configuration of the restored model. + + Returns: + Adapted parameters for MBT. + """ + + del restored_model_cfg # Can be used for asserts. + + flattened_params = _flatten(params) + flattened_restored = _flatten(restored_params) + + # We need to check if we are restoring RGB only, Spectogram only or + # RGB and Spectogram + restore_rgb_spec = False + restore_rgb_only = False + restore_spec_only = False + + if len(config.model.modality_fusion) > 2: + raise AssertionError('Only support 1 or 2 modalities.') + if len(config.model.modality_fusion) == 2: + if config.model.modality_fusion[0] != 'rgb': + raise AssertionError('We assume that rgb is the first listed modality.') + restore_rgb_spec = True + elif config.model.modality_fusion[0] == 'spectrogram': + restore_spec_only = True + elif config.model.modality_fusion[0] == 'rgb': + restore_rgb_only = True + else: + raise AssertionError(f'Unknown modalities {config.model.modality_fusion}') + + # Use a regex to rename all the transformer variables. + renamed_params = {} + for name, value in flattened_restored.items(): + new_name = name + if restore_rgb_spec or restore_rgb_only: + new_name = re.sub('Transformer_rgb/encoderblock_([0-9]+)', + r'Transformer/encoderblock_\1', new_name) + if restore_rgb_spec: + new_name = re.sub('Transformer_spectrogram/encoderblock_([0-9]+)', + r'Transformer/encoderblock_\1_spec', new_name) + if restore_spec_only: + new_name = re.sub('Transformer_spectrogram/encoderblock_([0-9]+)', + r'Transformer/encoderblock_\1', new_name) + + renamed_params[new_name] = value + + # Now handle special cases. + renamed_params['embedding/bias'] = renamed_params.pop( + 'embedding_rgb/bias') + renamed_params['embedding/kernel'] = renamed_params.pop( + 'embedding_rgb/kernel') + renamed_params['embedding_spec/bias'] = renamed_params.pop( + 'embedding_spectrogram/bias') + renamed_params['embedding_spec/kernel'] = renamed_params.pop( + 'embedding_spectrogram/kernel') + + if ('embedding_spec/kernel' in flattened_params and + flattened_params['embedding_spec/kernel'].shape[2] == 3 and + renamed_params['embedding_spec/kernel'].shape[2] == 1): + value = renamed_params['embedding_spec/kernel'] + value = np.tile(value, [1, 1, 3, 1]) + renamed_params['embedding_spec/kernel'] = value + else: + logging.info('Not inflating spectrogram embedding filter.') + + # Note: MAE has separate layer-norms per modality: + # ie Transformer_rgb/encoder_norm/... and + # Transformer_spectogram/encoder_norm/... + # MBT has a single layer-norm. We do not rename any of the MAE layer-norms + # and keep the standard identity initialisation here. + + # Assign transformed names. + for name in flattened_params: + if name in renamed_params: + if flattened_params[name].shape == renamed_params[name].shape: + flattened_params[name] = renamed_params[name] + else: + logging.warning( + 'Shapes for %s do not match. %s vs %s', name, + flattened_params[name].shape, renamed_params[name].shape) + else: + logging.info('%s in target model not being initialised', name) + + for name in renamed_params: + if name not in flattened_params: + logging.info('%s not being restored.', name) + + params = _unflatten(flattened_params) + return params + + +def initialise_from_same_encoder( + params: PyTree, + restored_params: PyTree, + config: ml_collections.ConfigDict, + restored_model_cfg: ml_collections.ConfigDict) -> PyTree: + """Init MBT from "same_encoder" or "concat_and_encode" pretrained models. + + Because the model has a single encoder "Transformer", we can call the + "initialise_from_vit" method then add the embeddings for both modalities. + + Args: + params: PyTree of model parameters in the target model. + restored_params: PyTree of model parameters to restore. + config: Configuration of the target model. + restored_model_cfg: Configuration of the restored model. + + Returns: + Adapted parameters for MBT. + """ + if len(config.model.modality_fusion) == 2: + assert config.model.modality_fusion == ('rgb', 'spectrogram'), ( + 'The modality fusion must be "rgb, spectrogram".') + + params = initialise_from_vit(params=params, + restored_params=restored_params, + config=config, + restored_model_cfg=restored_model_cfg, + mbt_transformer_key='Transformer', + restore_output_proj=False, + prefix_path=None) + + # Now handle special cases. + if 'rgb' in config.model.modality_fusion: + params['embedding']['bias'] = restored_params['embedding_rgb']['bias'] + params['embedding']['kernel'] = restored_params['embedding_rgb']['kernel'] + + if 'spectrogram' in config.model.modality_fusion: + params['embedding_spec']['bias'] = ( + restored_params['embedding_spectrogram']['bias']) + + if ('embedding_spec' in params and + params['embedding_spec']['kernel'].shape[2] == 3 and + restored_params['embedding_spectrogram']['kernel'].shape[2] == 1): + value = restored_params['embedding_spectrogram']['kernel'] + value = np.tile(value, [1, 1, 3, 1]) + params['embedding_spec']['kernel'] = value + else: + logging.info('Not inflating spectrogram embedding filter.') + params['embedding_spec']['kernel'] = ( + restored_params['embedding_spectrogram']['kernel']) + + return params + + +def initialise_from_mid_fusion( + params: PyTree, + restored_params: PyTree, + config: ml_collections.ConfigDict, + restored_model_cfg: ml_collections.ConfigDict) -> PyTree: + """Initialise MBT from "separate_encoders_and_concat" pretrained models. + + Here, we convert the model parameter names to the same format as + "separate_encoders" by replicating the model parameters from the shared part + to each of the individual encoders. + And then, we initialise the way we would for a "separate_encoders" model. + + Args: + params: PyTree of model parameters in the target model. + restored_params: PyTree of model parameters to restore. + config: Configuration of the target model. + restored_model_cfg: Configuration of the restored model. + + Returns: + Adapted parameters for MBT. + """ + if ( + restored_model_cfg.model.encoder_strategy + != 'separate_encoders_and_concat' + ): + raise AssertionError('Only support "separate_encoders_and_concat" models.') + + flattened_restored = _flatten(restored_params) + + ## Duplicate the shared parameters to each encoder. + # First, we need to determine the number of layers + num_separate_layers = 0 + num_shared_layers = 0 + for name in flattened_restored: + for modality in restored_model_cfg.masked_feature_loss.target: + match = re.match(f'Transformer_{modality}/encoderblock_([0-9]+)', name) + if match: + layer_id = int(match[1]) + 1 + num_separate_layers = max(num_separate_layers, layer_id) + + # Now, the number of shared layers + match = re.match('Transformer_concat/encoderblock_([0-9]+)', name) + if match: + layer_id = int(match[1]) + 1 + num_shared_layers = max(num_shared_layers, layer_id) + + if num_shared_layers == 0 or num_separate_layers == 0: + raise AssertionError( + 'num_shared_layers and num_separate_layers should both be > 0.' + f'Got {num_shared_layers} and {num_separate_layers}') + + # Now, we rename the shared layers. + flattened_restored_renamed = {} + for name, value in flattened_restored.items(): + if 'Transformer_concat/' in name: + if 'Transformer_concat/encoder_norm' in name: + new_name = name.replace('Transformer_concat/', 'Transformer/') + flattened_restored_renamed[new_name] = value + continue + + layer_id = int(re.match( + 'Transformer_concat/encoderblock_([0-9]+)', name)[1]) + new_id = layer_id + num_separate_layers + name_rgb = name.replace('Transformer_concat', 'Transformer_rgb') + name_rgb = name_rgb.replace(f'encoderblock_{layer_id}', + f'encoderblock_{new_id}') + flattened_restored_renamed[name_rgb] = value + + name_spec = name.replace('Transformer_concat', 'Transformer_spectrogram') + name_spec = name_spec.replace(f'encoderblock_{layer_id}', + f'encoderblock_{new_id}') + flattened_restored_renamed[name_spec] = value + else: + flattened_restored_renamed[name] = value + + restored_params = _unflatten(flattened_restored_renamed) + logging.info('Restored parameters after renaming:') + debug_utils.log_param_shapes(restored_params) + return initialise_from_separate_encoders( + params, restored_params, config, restored_model_cfg) + + +def interpolate_positional_embeddings(restored_posemb_grid, n_tokens): + """Interpolate positional embeddings from one size to another. + + Args: + restored_posemb_grid: Positional embeddings from restored model. Shape is + [n_restored_tokens, d]. It is assumed that the restored model used square + image patches. + n_tokens: Number of tokens in the target model. Can be a scalar if the + target image is square, otherwise should be a tuple of 2. + + Returns: + positional embedding resized to match n_tokens. Shape is [1, n_tokens, d] + """ + + restored_gs = int(np.sqrt(len(restored_posemb_grid))) + if isinstance(n_tokens, tuple): + gh, gw = n_tokens + else: + if n_tokens == len(restored_posemb_grid): + # No need to interpolate + return np.expand_dims(restored_posemb_grid, axis=0) + gh = int(np.sqrt(n_tokens)) + gw = n_tokens // gh + assert gh * gw == n_tokens + logging.info('Resizing grid-size from (%s, %s) to (%s, %s).', + restored_gs, restored_gs, gh, gw) + restored_posemb_grid = restored_posemb_grid.reshape(restored_gs, restored_gs, + -1) + zoom = (gh / restored_gs, gw / restored_gs, 1) + restored_posemb_grid = scipy.ndimage.zoom(restored_posemb_grid, zoom, order=1) + restored_posemb_grid = restored_posemb_grid.reshape(1, gh * gw, -1) + return restored_posemb_grid + + +def init_posemb(to_params, from_params, init_config, model_config, + dataset_config, restored_model_cfg, name, prefix_path=None): + """Initialize the positional embeddings.""" + if name not in to_params: + logging.info('No %s in target model', name) + elif init_config.restore_positional_embedding: + if name == 'bottleneck': + posemb = to_params[name] + else: + posemb = to_params[name]['pos_embedding'] + restored_posemb = from_params['posembed_input']['pos_embedding'] + if restored_posemb.shape != posemb.shape: + # Rescale the grid of pos, embeddings. + # Default parameter shape is (1, N, 768) + logging.info('Adapting positional embeddings %s from %s to %s', + name, restored_posemb.shape, posemb.shape) + ntok = posemb.shape[1] + if prefix_path: + # MBT is part of a larger model + classifier = restored_model_cfg.mbt.model.classifier + else: + classifier = restored_model_cfg.model.classifier + if classifier == 'token': + # the first token is the CLS token + cls_tok = restored_posemb[:, :1] + restored_posemb_grid = restored_posemb[0, 1:] + else: + cls_tok = restored_posemb[:, :0] + restored_posemb_grid = restored_posemb[0] + if model_config.classifier == 'token': + ntok -= 1 + + size_change = init_config.positional_embed_size_change + if name == 'bottleneck': + restored_posemb_grid = interpolate_positional_embeddings( + restored_posemb_grid, ntok) + elif size_change == 'tile': + restored_posemb_grid = vivit_utils.tile_positional_embeddings( + restored_posemb_grid, ntok) + elif size_change in ['resize_tile', 'resize']: + temp_encoding = model_config.temporal_encoding_config + if name.find('spec') > -1: + gh = ((dataset_config.spec_shape[0] * + dataset_config.num_spec_frames) // + model_config.patches.size[0]) + gw = (dataset_config.spec_shape[1] // + model_config.patches.size[1]) + tokens_per_frame = (gh, gw) + elif name.find('wave') > -1 or size_change == 'resize': + tokens_per_frame = ntok + elif temp_encoding.method == 'temporal_sampling': + tokens_per_frame = int(ntok / temp_encoding.n_sampled_frames) + elif temp_encoding.method == '3d_conv': + # This is for RGB only. + n_frames = ( + dataset_config.num_frames // + model_config.patches.size[2]) + tokens_per_frame = ntok // n_frames + else: + raise AssertionError( + f'Unknown temporal encoding {temp_encoding.method}') + + restored_posemb_grid = interpolate_positional_embeddings( + restored_posemb_grid, tokens_per_frame) + if size_change == 'resize_tile' and ntok != tokens_per_frame: + restored_posemb_grid = restored_posemb_grid[0] + restored_posemb_grid = vivit_utils.tile_positional_embeddings( + restored_posemb_grid, ntok) + else: + raise AssertionError( + 'Unknown positional embedding size changing method') + # attach the CLS token again + if model_config.classifier == 'token': + restored_posemb = jnp.array( + np.concatenate([cls_tok, restored_posemb_grid], axis=1)) + else: + restored_posemb = restored_posemb_grid + + if name == 'bottleneck': + to_params[name] = restored_posemb + else: + to_params[name]['pos_embedding'] = restored_posemb + else: + logging.info('Not restoring positional encodings from pretrained model') + + +def init_embedding(to_params, from_params, init_config, model_config, name): + """Initialize input embedding.""" + if name not in to_params: + logging.info('No %s in target model', name) + elif init_config.get('restore_input_embedding', True): + input_kernel = to_params[name]['kernel'] + restored_kernel = from_params['kernel'] + restored_bias = from_params['bias'] + + if input_kernel.shape != restored_kernel.shape: + kernel_init_method = ( + model_config.temporal_encoding_config.kernel_init_method + ) + if input_kernel.shape == restored_kernel.shape[1:]: + # Deflates a ViViT 3D embedder to work with 2D spectrogram inputs. + restored_kernel = np.mean(restored_kernel, axis=0) + elif input_kernel.shape[1:] != restored_kernel.shape: + # Kernel dimensions are [t, c_in, c_out] + restored_kernel = np.reshape(restored_kernel, input_kernel.shape) + elif input_kernel.shape[0] == 1: + # Kernel dimensions are [t, h, w, c_in, c_out] + restored_kernel = np.expand_dims(restored_kernel, axis=0) + elif kernel_init_method == 'average_frame_initializer': + # This corresponds to "filter inflation" in + # J Carreira and A Zisserman. Quo vadis, action recognition? + # A new model and the kinetics dataset. CVPR 2017" + logging.info('Initializing input kernel with filter inflation.') + t = input_kernel.shape[0] + restored_kernel = np.expand_dims(restored_kernel, axis=0) + restored_kernel = np.tile(restored_kernel, [t, 1, 1, 1, 1]) / t + elif kernel_init_method == 'central_frame_initializer': + logging.info('Initializing input kernel to select centre frame.') + central_time_index = input_kernel.shape[0] // 2 + temp = np.zeros(input_kernel.shape) + temp[central_time_index] = restored_kernel.copy() + restored_kernel = temp + else: + raise AssertionError( + 'Unknown input kernel initialization {}'.format(kernel_init_method)) + + to_params[name]['kernel'] = restored_kernel + to_params[name]['bias'] = restored_bias + else: + logging.info('Not restoring input embedding parameters') + + +def init_encoderblock(to_params, from_params, tm_key, model_config): + """Initialize encoder_block_parameters.""" + # Explicitly enumerate over the keys in the encoder-block. Don't just + # assign the dictionary. It is possible for the target model to + # contain keys that are not in the restored model. + attention_type = model_config.attention_config.type + for enc_key in from_params[tm_key].keys(): + if attention_type in [ + 'spacetime', 'factorized_encoder', 'factorized_dot_product_attention' + ]: + restoring_params = False + if tm_key in to_params: + assert enc_key in to_params[tm_key], '%s not in to_params[%s]' % ( + enc_key, tm_key) + to_params[tm_key][enc_key] = from_params[tm_key][enc_key] + restoring_params = True + for modality in model_config.modality_fusion: + if modality == 'spectrogram': + modality_name = 'spec' + else: + modality_name = modality + tmkey_name = '{}_'.format(tm_key) + modality_name + if tmkey_name in to_params: + assert enc_key in to_params[ + tmkey_name], '%s not in to_params[%s]' % (enc_key, tmkey_name) + to_params[tmkey_name][enc_key] = from_params[tm_key][enc_key] + restoring_params = True + if not restoring_params: + logging.info('Warning: Not restoring encoder parameters.') + + elif attention_type == 'factorized_transformer_block': + raise NotImplementedError('Factorized attention not implemented.') + else: + raise ValueError(f'Unknown attention type {attention_type}') diff --git a/scenic/projects/av_mae/model_utils.py b/scenic/projects/av_mae/model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..9a18e8ab1e4bd32e86c6220d4ec499b54fb1f107 --- /dev/null +++ b/scenic/projects/av_mae/model_utils.py @@ -0,0 +1,231 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utility functions for defining models.""" + +from typing import Callable, Iterable, Optional, Sequence + +import flax.linen as nn +import jax +import jax.numpy as jnp + +from scenic.model_lib.layers import attention_layers +from scenic.projects.baselines import vit + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +def shuffle_and_partition(n_batch: int, + n_tokens: int, + n_masked: int, + rng: jax.Array): + """Implements random shuffling and partitioning necessary for MAE. + + Args: + n_batch: The batch size of the sequence to generate. + n_tokens: The number of tokens. + n_masked: The number of tokens to mask. Must have 0 <= n_masked < n_tokens. + rng: The random number key. + + Returns: + Two arrays. The first one contains indices of masked tokens, and has + shape [n_batch, n_masked]. The second contains indices of unmasked tokens + and has shape [n_batch, n_tokens - n_masked]. + """ + if n_masked >= n_tokens or n_masked < 0: + raise ValueError(f'n_masked = {n_masked} should be >=0 and <{n_tokens}.') + + ids = jnp.tile(jnp.arange(n_tokens), n_batch).reshape((n_batch, n_tokens)) + n_remainder = n_tokens - n_masked + if n_masked > 0: + rng_keys = jax.random.split(rng, n_batch) + ids = jax.vmap( + lambda seq, rng: jax.random.permutation(rng, seq, independent=True))( + ids, rng_keys) + masked = jax.lax.dynamic_slice(ids, (0, 0,), (n_batch, n_masked,)) + unmasked = jax.lax.dynamic_slice(ids, (0, n_masked,), (n_batch, n_remainder,)) + return masked, unmasked + + +def get_mask_indices(n_batch: int, + n_tokens: int, + n_masked: int, + rng: jax.Array): + """Returns indices to use for masking in MAE. + + Args: + n_batch: The batch size of the sequence to generate. + n_tokens: The number of tokens. + n_masked: The number of tokens to mask. Must have 0 <= n_masked < n_tokens. + rng: The random number key. + + Returns: + Three arrays. masked_indices of shape [n_batch, n_masked], unmasked_indices + of shape [n_batch, n_tokens - n_masked] and binary_mask of shape + [n_batch, n_tokens] where 1 indicates that the token is masked. + """ + batch_indices = jnp.arange(n_batch).reshape(n_batch, 1) + mask_indices, unmasked_indices = shuffle_and_partition( + n_batch, n_tokens, n_masked, rng) + binary_mask = jnp.zeros((n_batch, n_tokens)).at[batch_indices, + mask_indices].set(1.0) + + return mask_indices, unmasked_indices, binary_mask + + +def get_tube_mask_indices(n_batch: int, + n_tokens: int, + token_mask_probability: float, + temporal_dims: int, + rng: jax.Array): + """Returns indices to use for tube masking in VideoMAE. + + The difference between the random and tube masking is that the tube masking + takes into account the temporal dimension when masking. + + Args: + n_batch: The batch size of the sequence to generate. + n_tokens: The number of tokens. + token_mask_probability: Probability of dropping out the input tokens + during training. + temporal_dims: The temporal dimension. + rng: The random number key. + + Returns: + Three arrays. masked_indices of shape [n_batch, n_masked], unmasked_indices + of shape [n_batch, n_tokens - n_masked] and binary_mask of shape + [n_batch, n_tokens] where 1 indicates that the token is masked. + """ + + n_tokens_frame = n_tokens // temporal_dims + n_masked_frame = int(token_mask_probability * n_tokens_frame) + batch_indices = jnp.arange(n_batch).reshape(n_batch, 1) + + mask_indices_frame, _ = shuffle_and_partition(n_batch, n_tokens_frame, + n_masked_frame, rng) + binary_mask_frame = jnp.zeros((n_batch, n_tokens_frame) + ).at[batch_indices, mask_indices_frame].set(1.0) + + # Add temporal dims + binary_mask = jnp.tile(binary_mask_frame, [1, temporal_dims]) + + # Apply binary_mask + n_masked_tokens = n_masked_frame * temporal_dims + n_unmasked_tokens = n_tokens - n_masked_tokens + masked_indices = jnp.nonzero(binary_mask, size=(n_batch * n_masked_tokens) + )[1].reshape(n_batch, -1) + unmasked_indices = jnp.nonzero(binary_mask - 1, + size=(n_batch * n_unmasked_tokens) + )[1].reshape(n_batch, -1) + + return masked_indices, unmasked_indices, binary_mask + + +class AddFactorisedSpaceTimePositionEmbs(nn.Module): + """Adds learned positional embeddings to the inputs. + + Attributes: + posemb_init_space: Positional embedding initializer. Default value is taken + from BERT. + posemb_init_time: Positional embedding initializer. Default value is taken + from BERT. + + Returns: + Output with same shape as input. + """ + posemb_init_space: Initializer = nn.initializers.normal(stddev=0.02) + posemb_init_time: Initializer = nn.initializers.normal(stddev=0.02) + + @nn.compact + def __call__(self, inputs: jnp.ndarray) -> jnp.ndarray: + # Inputs.shape is [batch_size, time, space, hidden_dim]. + assert inputs.ndim == 4, ('Number of dimensions should be 4,' + ' but it is: %d' % inputs.ndim) + _, time, space, hidden_dim = inputs.shape + pos_emb_shape_space = (1, 1, space, hidden_dim) + pos_emb_shape_time = (1, time, 1, hidden_dim) + pe_spatial = self.param('pos_embedding_space', self.posemb_init_space, + pos_emb_shape_space, inputs.dtype) + pe_temporal = self.param('pos_embedding_time', self.posemb_init_time, + pos_emb_shape_time, inputs.dtype) + return inputs + pe_spatial + pe_temporal + + +def add_positional_embeddings( + inputs: jnp.ndarray, + posemb_type: str, + input_shape: Optional[Iterable[int]] = None, + layer_name: str = 'posembed_input') -> jnp.ndarray: + """Adds positional embeddings to an input sequence. + + Args: + inputs: Tokens of shape [batch, num_tokens, hidden_size]. + posemb_type: The type of positional encoding. Must be one of + {sinusoidal_1d, sinusoidal_2d, sinusoidal_3d, learned_1d}. + input_shape: Used for "sinusoidal_2d" and "sinusoidal_3d". In this case, + the input is reshaped to this size ie [batch, height, width, hidden_size], + before applying the positional encodings and then reshaping back. + layer_name: The layer name for learned embedddings. + + Returns: + The input tokens with the positional encodings added. The shape is + [batch, num_tokens, hidden_size]. + """ + + if posemb_type == 'learned_1d': + x_posemb = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name=layer_name)(inputs) + elif posemb_type == 'learned_space_time': + x_reshape = inputs.reshape(input_shape) + x_posemb = AddFactorisedSpaceTimePositionEmbs( + posemb_init_space=nn.initializers.normal(stddev=0.02), # from BERT. + posemb_init_time=nn.initializers.normal(stddev=0.02), + name=layer_name)(x_reshape) + x_posemb = jnp.reshape(x_posemb, inputs.shape) + elif posemb_type == 'sinusoidal_1d': + x_posemb = attention_layers.Add1DPositionEmbedding( + posemb_init=None)(inputs) + elif posemb_type in {'sinusoidal_2d', 'sinusoidal_3d'}: + x_reshape = inputs.reshape(input_shape) + x_posemb = attention_layers.AddFixedSinCosPositionEmbedding()(x_reshape) + x_posemb = jnp.reshape(x_posemb, inputs.shape) + elif posemb_type == 'none': + x_posemb = inputs + else: + raise ValueError(f'Unknown positional embedding {posemb_type}') + + return x_posemb + + +def embed_2d_patch(x, patches, embedding_dim, return_1d=True, name='embedding'): + """Embedding input patches with 2D conv.""" + + assert patches.get('size') is not None, ('patches.size is now the only way' + 'to define the patches') + assert embedding_dim, 'embedding_dim must be specified' + fh = patches.size[0] + fw = patches.size[1] + + x = nn.Conv( + embedding_dim, (fh, fw), + strides=(fh, fw), + padding='VALID', + name=name)(x) + + if return_1d: + batch_size = x.shape[0] + x = jnp.reshape(x, [batch_size, -1, embedding_dim]) + return x + diff --git a/scenic/projects/av_mae/optimizer_utils.py b/scenic/projects/av_mae/optimizer_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..c5ae964feb7f69ff2e1cfb30f9f6c3e96497fa15 --- /dev/null +++ b/scenic/projects/av_mae/optimizer_utils.py @@ -0,0 +1,128 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for optimizers.""" + +import copy +import re +from typing import Any, Callable, Optional, Union + +from absl import logging +import flax +import ml_collections +import optax +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers as optimizer_lib + +ScalarOrSchedule = Union[float, optax.Schedule] +MaskOrFn = Optional[Union[Any, Callable[[optax.Params], Any]]] +PyTree = Any # JAX team is working on type annotation for pytree: + + +def optimizer_with_layerwise_decay( + config: ml_collections.ConfigDict, + params: PyTree, + use_frozen_params: bool = True): + """Returns an optimizer with layerwise decay. + + Implementation of layerwise decay follows BEIT and MAE. + Reference: https://github.com/facebookresearch/mae/blob/main/util/lr_decay.py + + This function can apply layerwise decay to any optimizer, although this is + typically done with Adam. + + Args: + config: The training config. + params: The parameters of the model being trained. + use_frozen_params: If True, the optimizer will always expect to receive + a FrozenDict of parameters and gradients. + + Returns: + An Optax optimizer. + """ + if config.model_name not in { + 'vit_multilabel_classification', 'vit_multilabel_classification_mae', + 'vit_classification_mae', 'vivit_classification_mae', + 'vivit_multimodal_classification', 'mbt_classification', + 'vivit_multimodal_multiclassification', 'mbt_multilabel_classification' + }: + + raise ValueError(f'Unsupported model: {config.model_name}.') + + optimizer_config = optimizer_lib.get_optax_optimizer_config(config) + # Avoid modifying original config and allow alteration. + optimizer_config = copy.deepcopy(optimizer_config).unlock() + base_learning_rate = config.lr_configs.base_learning_rate + + if optimizer_config.get('layerwise_decay', 0) <= 0: + logging.info('Not performing any layerwise decay.') + if 'layerwise_decay' in optimizer_config: + del optimizer_config.layerwise_decay + lr_fn = lr_schedules.get_learning_rate_fn(config) + return optimizer_lib.get_optimizer(optimizer_config, lr_fn, params) + + num_transformer_layers = config.model.num_layers + num_layers = num_transformer_layers + 1 + layer_decay = optimizer_config.layerwise_decay + learning_rate_scales = [ + layer_decay**(num_layers - i) for i in range(num_layers + 1) + ] + logging.info('Learning rate scales: %s', learning_rate_scales) + + layer_configs = [copy.deepcopy(config) for _ in range(num_layers + 1)] + for index in range(len(layer_configs)): + learning_rate = base_learning_rate * learning_rate_scales[index] + layer_configs[index].lr_configs.base_learning_rate = learning_rate + + learning_rate_fns = [ + lr_schedules.get_learning_rate_fn(layer_config) + for layer_config in layer_configs + ] + + # Weight decay mask is applied within optimizer_lib.get_optimizer. + # Note that we need to delete the layerwise_decay attribute, as Optax + # optimizers do not accept this argument. + del optimizer_config.layerwise_decay + optimizers = { + i: optimizer_lib.get_optimizer( + optimizer_config, learning_rate_fns[i], params) + for i in range(num_layers + 1) + } + + def _get_layer_id(name: str, num_layers: int) -> int: + if (name == 'cls' or 'posembed_input' in name + or 'embedding' in name or 'modality_token' in name): + return 0 + elif re.match(r'Transformer(.*)/encoderblock_', name) is not None: + substring = re.findall(r'encoderblock_\d+', name)[0] + layer_id = int(substring.replace('encoderblock_', '')) + if 'Transformer_concat' in name: + return layer_id + 11 # TODO(lgeorgescu): compute it somehow. + return layer_id + 1 + else: + return num_layers + + flat_params = flax.traverse_util.flatten_dict( + flax.core.unfreeze(params), keep_empty_nodes=True, sep='/') + flat_layer_map = {k: _get_layer_id(k, num_layers) for k in flat_params} + layer_map = flax.traverse_util.unflatten_dict(flat_layer_map, sep='/') + if use_frozen_params: + layer_map = flax.core.freeze(layer_map) + + logging.info( + 'Layer assignments:\n%s', + flax.traverse_util.flatten_dict(layer_map, sep='/')) + tx = optax.multi_transform(optimizers, layer_map) + + return tx diff --git a/scenic/projects/av_mae/registry.py b/scenic/projects/av_mae/registry.py new file mode 100644 index 0000000000000000000000000000000000000000..52d0923c3e44be5b98bc337c427c5c7a4d342e19 --- /dev/null +++ b/scenic/projects/av_mae/registry.py @@ -0,0 +1,49 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Class File Registry for the AV-MAE project.""" + +from scenic.model_lib import models +from scenic.projects.av_mae import mbt +from scenic.projects.av_mae import vit +from scenic.projects.av_mae import vivit +from scenic.projects.av_mae import vivit_multimodal +from scenic.projects.baselines import vit as baseline_vit +from scenic.projects.vivit import model as baseline_vivit + + +def get_model_cls(model_name): + """Returns the model class for training.""" + if model_name == 'vit_multilabel_classification': + return baseline_vit.ViTMultiLabelClassificationModel + elif model_name == 'vit_multilabel_classification_mae': + return vit.ViTMAEMultilabelFinetuning + elif model_name == 'vit_classification_mae': + return vit.ViTMAEClassificationFinetuning + elif model_name == 'vit_masked_autoencoder': + return vit.ViTMaskedAutoencoderModel + elif model_name == 'vivit_masked_autoencoder': + return vivit.ViViTMaskedAutoencoderModel + elif model_name == 'vivit_classification': + return baseline_vivit.ViViTClassificationModel + elif model_name == 'vivit_classification_mae': + return vivit.ViViTMAEClassificationFinetuningModel + elif model_name == 'vivit_multimodal_masked_autoencoder': + return vivit_multimodal.ViViTMultiMaskedAutoencoderModel + elif model_name == 'mbt_classification': + return mbt.MBTClassificationModel + elif model_name == 'mbt_multilabel_classification': + return mbt.MBTMultilabelClassificationModel + else: + return models.get_model_cls(model_name) diff --git a/scenic/projects/av_mae/tests/test_base_model.py b/scenic/projects/av_mae/tests/test_base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..575350674ecddf1e035c18efefa43aaafba4e2e0 --- /dev/null +++ b/scenic/projects/av_mae/tests/test_base_model.py @@ -0,0 +1,131 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for base_model.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +from scenic.projects.av_mae import base_model + + +class FakeModel(base_model.MaskedFeatureRegressionModel): + """A dummy model for testing purposes.""" + + def __init__(self, loss_unmasked_tokens): + dataset_meta_data = {} + config = ml_collections.ConfigDict({ + 'masked_feature_loss': { + 'target': 'rgb', + 'loss_unmasked_tokens': loss_unmasked_tokens + }, + 'model': {'patches': {'size': (2, 2)}} + }) + super().__init__(config, dataset_meta_data) + + def build_flax_model(self): + pass + + def default_flax_model_config(self): + pass + + +def get_fake_batch_and_predictions(): + """Generates a fake `batch`.""" + # Predictions and targets have shape [batch, num_tokens, channels], and here + # we set channels=1. + batch, height, width, channels = 2, 4, 4, 1 + inputs = jnp.arange(1, 33).reshape(batch, height, width, channels) + predictions = jnp.array([ + [ + [1.0, 3.0, 5.0, 6.0], + [3.0, 5.0, 11.0, 10.0], + [9.0, 10.0, 11.0, 12.0], + [14.0, 13.0, 14.0, 17.0], + ], + [ + [17.0, 18.0, 21.0, 22.0], + [20.0, 19.0, 24.0, 25.0], + [27.0, 29.0, 30.0, 32.0], + [27.0, 28.0, 33.0, 32.0], + ], + ]) + prediction_masks = jnp.array([[1.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0]]) + + fake_batch = { + 'inputs': inputs, + 'target_rgb': base_model.get_rgb_targets(inputs, (2, 2)) + } + return fake_batch, predictions, prediction_masks + + +class TestMaskedFeatureRegressionModel(parameterized.TestCase): + """Tests for a fake feature regression regression model.""" + + @parameterized.named_parameters( + ('loss_masked_tokens', False), + ('loss_all_tokens', True), + ) + def test_loss_function(self, loss_unmasked_tokens): + """Tests loss_function by checking its output's validity.""" + model = FakeModel(loss_unmasked_tokens=loss_unmasked_tokens) + batch, predictions, prediction_masks = get_fake_batch_and_predictions() + batch_replicated, predictions_replicated, prediction_masks_replicated = ( + jax_utils.replicate(batch), jax_utils.replicate(predictions), + jax_utils.replicate(prediction_masks)) + + # Test loss function in the pmapped setup: + loss_function_pmapped = jax.pmap(model.loss_function, axis_name='batch') + total_loss = loss_function_pmapped( + predictions_replicated, prediction_masks_replicated, batch_replicated) + total_loss = jax_utils.unreplicate(total_loss) + if loss_unmasked_tokens: + expected_loss = jnp.mean(jnp.array( + [1.0, 21.0, 8.0, 12.0, 0.0, 4.0, 18.0, 4.0])) + else: + expected_loss = jnp.mean(jnp.array([1.0, 21.0, 18.0])) + self.assertAlmostEqual(total_loss, expected_loss, delta=1e-6) + + def test_rgb_image_targets(self): + """Test shapes of generating rgb targets for images.""" + test_image = jnp.arange(1, 65).reshape(8, 8).astype(jnp.float32) + batch = jnp.expand_dims(test_image, (0, -1)) + targets = base_model.get_rgb_targets(batch, patch_size=(2, 2)) + + expected_shape = (1, (8 // 2) * (8 // 2), 2 * 2) + self.assertEqual(targets.shape, expected_shape) + + @parameterized.named_parameters( + ('select_central_frame_False', False), + ('select_central_frame_True', True), + ) + def test_rgb_video_targets(self, select_central_frame): + """Test shapes of generating rgb targets for video.""" + test_video = jnp.arange(768).reshape(4, 8, 8, 3).astype(jnp.float32) + batch = jnp.expand_dims(test_video, 0) + targets = base_model.get_rgb_targets( + batch, patch_size=(4, 4, 2), select_central_frame=select_central_frame) + + if select_central_frame: + expected_shape = (1, (8 // 4) * (8 // 4) * (4 // 2), 4 * 4 * 3) + else: + expected_shape = (1, (8 // 4) * (8 // 4) * (4 // 2), 4 * 4 * 2 * 3) + self.assertEqual(targets.shape, expected_shape) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/av_mae/tests/test_mbt.py b/scenic/projects/av_mae/tests/test_mbt.py new file mode 100644 index 0000000000000000000000000000000000000000..8a3430742faa0b0f652516730a181441133e381d --- /dev/null +++ b/scenic/projects/av_mae/tests/test_mbt.py @@ -0,0 +1,145 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for mbt.py.""" + +from absl import logging +from absl.testing import absltest +from absl.testing import parameterized +import chex +from jax import random +import jax.numpy as jnp +import ml_collections + +from scenic.projects.av_mae import mbt +from scenic.projects.av_mae import trainer_multimodal + + +def get_config(): + return ml_collections.ConfigDict({ + 'model': + dict( + modality_fusion=('rgb', 'spectrogram'), + fusion_layer=2, + share_encoder=False, + use_bottleneck=True, + n_bottlenecks=4, + attention_config=dict(type='spacetime'), + temporal_encoding_config=dict(method='3d_conv'), + num_heads=2, + num_layers=4, + mlp_dim=96, + hidden_size=24, + patches={'size': (4, 4, 2)}, + classifier='gap', + data_dtype_str='float32', + dropout_rate=0.0, + attention_dropout_rate=0.0, + return_preclassifier=False, + representation_size=None), + }) + + +class TestMBT(parameterized.TestCase): + """Tests for MBT.""" + + @parameterized.named_parameters( + ('multilabel_noprecls', mbt.MBTMultilabelClassificationModel, False), + ('classification_precls', mbt.MBTClassificationModel, True), + ) + def test_shapes(self, model_class, return_preclassifier): + """Tests the output shapes of the ViViT model are correct.""" + + # Get random input data + rng = random.PRNGKey(0) + unused_batch, time, height, width, channels = 2, 16, 32, 32, 3 + batch, height_spec, width_spec, channels_spec = 2, 12, 8, 1 + num_classes = 5 + dataset_meta_data = { + 'input_shape': { + 'rgb': (-1, time, height, width, channels), + 'spectrogram': (-1, height_spec, width_spec, channels_spec) + }, + 'input_dtype': { + 'rgb': jnp.float32, + 'spectrogram': jnp.float32 + }, + + 'num_classes': num_classes + } + + config = get_config() + config.model.return_preclassifier = return_preclassifier + config.batch_size = batch + + # Initialise the model + init_rngs = {'params': random.PRNGKey(0), 'dropout': random.PRNGKey(1)} + scenic_model = model_class(config, dataset_meta_data) + + input_spec_dict = {} + for key in dataset_meta_data['input_shape']: + input_spec = (dataset_meta_data['input_shape'][key], + dataset_meta_data['input_dtype'][key]) + input_spec_dict[key] = input_spec + logging.info('input_spec: %s', input_spec_dict) + + params, _, _, _ = trainer_multimodal.initialize_model( + model_def=scenic_model.flax_model, + input_spec_dict=input_spec_dict, + config=config, + rngs=init_rngs, + is_train=True) + + # Check output shapes match. + for train in (False, True): + logging.info('Running for mode train = %s', train) + + # ATTENTION: MBT mutates the input dictionary. Therefore, we need to + # recreate the inputs each time in this loop. + inputs = { + 'rgb': random.normal( + rng, shape=(batch, time, height, width, channels)), + 'spectrogram': random.normal( + rng, shape=(batch, height_spec, width_spec, channels_spec)) + } + + output = scenic_model.flax_model.apply( + {'params': params}, inputs, train=train, mutable=False, + rngs=init_rngs) + + # The default patch size is 4x4x2. + if return_preclassifier: + for modality, tensor in output.items(): + logging.info('modality: %s, output shape: %s', modality, tensor.shape) + if modality == 'rgb': + num_tokens = height * width * time / (4 * 4 * 2) + elif modality == 'spectrogram': + num_tokens = height_spec * width_spec / (4 * 4) + else: + raise ValueError('Unknown modality ' + modality) + expected_output_shape = (batch, num_tokens, config.model.hidden_size) + self.assertEqual(tensor.shape, expected_output_shape) + else: + expected_output_shape = (batch, num_classes) + if train: # Then MBT returns a dictionary of each modality. + for tensor in output.values(): + self.assertEqual(tensor.shape, expected_output_shape) + else: + self.assertEqual(output.shape, expected_output_shape) + + chex.assert_tree_all_finite(output) + chex.assert_tree_all_finite(params) + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/av_mae/tests/test_train_utils.py b/scenic/projects/av_mae/tests/test_train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..ec14b4970699dc8af0150582daf72a93593086e2 --- /dev/null +++ b/scenic/projects/av_mae/tests/test_train_utils.py @@ -0,0 +1,103 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for train_utils.py.""" + +import functools + +from absl.testing import absltest +from absl.testing import parameterized +import jax +from jax import random +import jax.numpy as jnp +from scenic.projects.av_mae import train_utils + + +class TestTrainUtils(parameterized.TestCase): + """Tests for modules in train_utils.py.""" + + @parameterized.named_parameters( + ('num_columns_2', 2), + ('num_columns_4', 4), + ) + def test_generate_image_grid(self, n_columns): + """Tests that shapes of generate image grid are correct.""" + + rng = random.PRNGKey(0) + height = 16 + width = 16 + patch_size = (4, 4) + num_tokens = int(height / patch_size[0] * width / patch_size[1]) + batch = 8 + channels = patch_size[0] * patch_size[1] * 3 + + input_shape = (batch, num_tokens, channels) + inputs = random.uniform(rng, shape=input_shape, minval=-1, maxval=1) + input_mask = random.bernoulli(rng, p=0.2, shape=(batch, num_tokens)) + + output = train_utils.generate_image_grid( + target=inputs, + prediction=inputs, + prediction_masks=input_mask, + patch_size=patch_size, + n_columns=n_columns, + input_size=(height, width, 3)) + + expected_shape = (batch / n_columns * 6 * height, n_columns * width, 3) + self.assertEqual(output.shape, expected_shape) + self.assertEqual(output.dtype, jnp.uint8) + self.assertTrue(jnp.all(jnp.greater_equal(output, 0))) + self.assertTrue(jnp.all(jnp.less_equal(output, 255))) + + @parameterized.named_parameters( + ('NHWC', (16, 4, 5, 32)), + ('NTHWC', (16, 2, 4, 5, 32)) + ) + def test_mixup(self, inputs_shape): + """Tests syntax errors and shape for mixup and cutmix.""" + bs = inputs_shape[0] + num_classes = 10 + + mixup_fn = jax.jit( + functools.partial( + train_utils.mixup_cutmix, + mixup_alpha=1.0, + cutmix_alpha=1.0, + rng=jax.random.PRNGKey(0), + switch_prob=0.5, + label_smoothing=0.2)) + + # Make a fake batch. + inputs = jnp.concatenate((jnp.zeros(shape=(bs // 2,) + inputs_shape[1:]), + jnp.ones(shape=(bs // 2,) + inputs_shape[1:])), + axis=0) + labels = jax.nn.one_hot( + jnp.concatenate( + ( + jnp.ones(shape=(bs // 2,)), # class 1 + jnp.ones(shape=(bs // 2,)) * 2 # class 2 + ), + axis=0), + num_classes) + fake_batch = {'inputs': inputs, 'label': labels} + + # Apply mixup. + mixedup_batch = mixup_fn(fake_batch) + + self.assertEqual(mixedup_batch['inputs'].shape, inputs_shape) + self.assertEqual(mixedup_batch['label'].shape, (bs, num_classes)) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/av_mae/tests/test_trainer.py b/scenic/projects/av_mae/tests/test_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..79a91d8c0144b63f8128b06c54e4a0ee8b8ec490 --- /dev/null +++ b/scenic/projects/av_mae/tests/test_trainer.py @@ -0,0 +1,245 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests the MAE trainers.""" + +import shutil +import tempfile + +from absl import logging +from absl.testing import absltest +from absl.testing import parameterized +from clu import metric_writers +import jax +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.projects.av_mae import trainer as avmae_trainer +from scenic.projects.av_mae import vit +import tensorflow as tf + + +def get_fake_config_mae(version='Test'): + """Returns config for testing MAE.""" + + patch = 16 + + config = ml_collections.ConfigDict() + config.model_name = 'vit_masked_autoencoder' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = {'Test': 16, + 'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = {'Test': 2, + 'Ti': 3, + 'S': 6, + 'B': 12, + 'L': 16, + 'H': 16}[version] + config.model.mlp_dim = {'Test': 64, + 'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config.model.num_layers = {'Test': 3, + 'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + config.model.representation_size = None + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0.1 + config.model_dtype_str = 'float32' + config.model.classifier = 'token' + + config.model.decoder_config = ml_collections.ConfigDict() + config.model.decoder_config.hidden_size = { + 'Test': 16, + 'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280 + }[version] + config.model.decoder_config.num_heads = { + 'Test': 2, + 'Ti': 3, + 'S': 6, + 'B': 12, + 'L': 16, + 'H': 16 + }[version] + config.model.decoder_config.mlp_dim = { + 'Test': 64, + 'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120 + }[version] + config.model.decoder_config.num_layers = { + 'Test': 3, + 'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32 + }[version] + config.model.decoder_config.attention_dropout_rate = 0. + config.model.decoder_config.dropout_rate = 0. + config.model.decoder_config.stochastic_depth = 0. + + config.dataset_configs = ml_collections.ConfigDict() + + # Masked loss + config.masked_feature_loss = ml_collections.ConfigDict() + config.masked_feature_loss.target = 'rgb' + config.masked_feature_loss.token_mask_probability = 0.75 + + # Training. + config.trainer_name = 'feature_regression_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.05 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 0.02 # In the MFP paper. + config.label_smoothing = None + config.num_training_epochs = 1 + config.log_eval_steps = 1000 + config.batch_size = 8 + config.rng_seed = 42 + config.init_head_bias = 0 + + # Learning rate. + steps_per_epoch = 2 + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 1.6e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.end_learning_rate = 0 + config.lr_configs.base_learning_rate = base_lr + + config.checkpoint = False + config.debug_train = False + config.debug_eval = False + + return config + + +class FakeDataset(): + """Fake dataset for testing.""" + + def __init__(self, batch_size=8, batch_size_eval=8, + input_shape=(-1, 64, 64, 3), num_classes=5): + logging.info('Construct test dataset with batch size %s', batch_size) + self.batch_size = batch_size + self.batch_size_eval = batch_size_eval + self.num_classes = num_classes + + self.meta_data = { + 'input_shape': input_shape, + 'input_dtype': 'float32', + 'num_train_examples': batch_size * 2, + 'num_eval_examples': batch_size_eval * 2, + 'target_is_onehot': False, + 'num_classes': self.num_classes + } + + def fake_batch(self): + shape_inputs = [self.batch_size] + list(self.meta_data['input_shape'][1:]) + return { + 'inputs': + np.random.uniform(size=tuple(shape_inputs)), + 'label': + np.random.randint( + low=0, high=self.num_classes, size=(self.batch_size)) + } + + def iter_data(self): + while True: + yield self.fake_batch() + + @property + def train_iter(self): + ds_iter = map(dataset_utils.shard, self.iter_data()) + yield from ds_iter + + @property + def eval_iter(self): + yield from self.train_iter + + @property + def test_iter(self): + yield from self.train_iter + + +def make_fake_dataset(batch_size, batch_size_eval, input_shape=(-1, 64, 64, 3)): + ds = FakeDataset(batch_size, batch_size_eval, input_shape) + return dataset_utils.Dataset( + ds.train_iter, + ds.eval_iter, + ds.test_iter, + ds.meta_data) + + +class TrainerTest(parameterized.TestCase): + """Tests the default trainer on single device setup.""" + + def setUp(self): + super(TrainerTest, self).setUp() + self.test_dir = tempfile.mkdtemp() + # Make sure Tensorflow does not allocate gpu memory. + tf.config.experimental.set_visible_devices([], 'GPU') + + def tearDown(self): + shutil.rmtree(self.test_dir) + super(TrainerTest, self).tearDown() + + def test_trainer_mae(self): + """Tests MAE trainer.""" + model_cls = vit.ViTMaskedAutoencoderModel + trainer = avmae_trainer.train + rng = jax.random.PRNGKey(0) + config = get_fake_config_mae() + workdir = self.test_dir + dataset = make_fake_dataset(config.batch_size, config.batch_size) + writer = metric_writers.LoggingWriter() + + _, train_summary, eval_summary = trainer( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + self.assertLess(train_summary['total_loss'], 1E5) + self.assertLess(eval_summary['mean_squared_error'], 1E5) + + +if __name__ == '__main__': + absltest.main() + diff --git a/scenic/projects/av_mae/tests/test_vit.py b/scenic/projects/av_mae/tests/test_vit.py new file mode 100644 index 0000000000000000000000000000000000000000..0bcd1a03d962edd35c6a6ec74ad8c92b903809b1 --- /dev/null +++ b/scenic/projects/av_mae/tests/test_vit.py @@ -0,0 +1,170 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for vit.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +import chex +from jax import random +import jax.numpy as jnp +import ml_collections + +from scenic.projects.av_mae import vit +from scenic.train_lib_deprecated import train_utils + + +class TestViT(parameterized.TestCase): + """Tests for ViT with token masking.""" + + @parameterized.named_parameters( + ('mae_model', vit.ViTMaskedAutoencoderModel) + ) + def test_shapes(self, model_class): + """Tests the output shapes of the ViT model are correct.""" + + # Get random input data + rng = random.PRNGKey(0) + batch, height, width, channels = 4, 32, 32, 3 + input_shape = (batch, height, width, channels) + inputs = random.normal(rng, shape=input_shape) + dataset_meta_data = {'input_shape': (-1, height, width, channels)} + + # Initialise the model + init_rngs = {'params': random.PRNGKey(0), 'dropout': random.PRNGKey(1)} + config = None # Will use the default config. + scenic_model = model_class(config, dataset_meta_data) + scenic_model.config.batch_size = batch + + params, _, _, _ = train_utils.initialize_model( + model_def=scenic_model.flax_model, + input_spec=[(dataset_meta_data['input_shape'], + dataset_meta_data.get('input_dtype', jnp.float32))], + config=scenic_model.config, + rngs=init_rngs, + train=True) + + # Check output shapes match. + for train in (True, False): + output, token_mask = scenic_model.flax_model.apply( + {'params': params}, inputs, train=train, mutable=False, + rngs=init_rngs) + + # The default patch size is 4x4. + expected_output_shape = [batch, int(height * width / (4 * 4)), 4 * 4 * 3] + if model_class == vit.ViTMaskedAutoencoderModel and not train: + # For MAE, in test mode, we return the features output by the encoder. + expected_output_shape = [batch, int(height * width / (4 * 4)), + scenic_model.config.model.hidden_size] + if scenic_model.config.model.classifier == 'token': + expected_output_shape[1] += 1 + + expected_mask_shape = (batch, height * width / (4 * 4)) + self.assertEqual(output.shape, tuple(expected_output_shape)) + self.assertEqual(token_mask.shape, expected_mask_shape) + chex.assert_tree_all_finite(output) + chex.assert_tree_all_finite(params) + + if not train: + self.assertEqual(jnp.sum(token_mask), 0) + else: + token_mask_sum = jnp.sum(token_mask) + mask_prob = scenic_model.config.masked_feature_loss.token_mask_probability # pylint: disable=line-too-long + patch_h, patch_w = scenic_model.config.model.patches.size + expected_sum = ( + mask_prob * (batch * height * width) / (patch_h * patch_w)) + + delta = 0.05 * expected_sum + self.assertAlmostEqual(token_mask_sum, expected_sum, delta=delta) + + +class TestViTMaeFinetuning(parameterized.TestCase): + """Tests for ViT for finetuning MAE pretrained models.""" + + @parameterized.named_parameters( + ('learned_false_cls', 'learned_1d', False, 'token', + vit.ViTMAEMultilabelFinetuning), + ('learned_false_gap', 'learned_1d', True, 'gap', + vit.ViTMAEClassificationFinetuning), + ('sin_1d_True', 'sinusoidal_1d', True, 'token', + vit.ViTMAEMultilabelFinetuning), + ('sin_2d_True', 'sinusoidal_2d', True, 'gap', + vit.ViTMAEClassificationFinetuning), + ) + def test_shapes(self, positional_embedding, freeze_backbone, + classifier, model_class): + """Tests the output shapes of the ViT model are correct.""" + + # Get random input data + rng = random.PRNGKey(0) + batch, height, width, channels = 4, 32, 32, 3 + num_classes = 5 + input_shape = (batch, height, width, channels) + inputs = random.normal(rng, shape=input_shape) + dataset_meta_data = { + 'input_shape': (-1, height, width, channels), + 'num_classes': num_classes + } + + config = ml_collections.ConfigDict({ + 'batch_size': batch, + 'model': + dict( + num_heads=2, + num_layers=1, + representation_size=None, + mlp_dim=64, + dropout_rate=0., + attention_dropout_rate=0., + positional_embedding=positional_embedding, + hidden_size=16, + patches={'size': (4, 4)}, + classifier=classifier, + data_dtype_str='float32', + freeze_backbone=freeze_backbone), + }) + + # Initialise the model + init_rngs = {'params': random.PRNGKey(0), 'dropout': random.PRNGKey(1)} + scenic_model = model_class(config, dataset_meta_data) + + params, model_state, _, _ = train_utils.initialize_model( + model_def=scenic_model.flax_model, + input_spec=[(dataset_meta_data['input_shape'], + dataset_meta_data.get('input_dtype', jnp.float32))], + config=scenic_model.config, + rngs=init_rngs, + train=True) + + # Check output shapes match. + for train in (True, False): + if train: + output, unused_model_state = scenic_model.flax_model.apply( + {'params': params, **model_state}, inputs, train=train, + mutable=['batch_stats'], + rngs=init_rngs) + else: + output = scenic_model.flax_model.apply( + {'params': params, **model_state}, inputs, train=train, + mutable=False, rngs=init_rngs) + + # The default patch size is 4x4. + expected_output_shape = (batch, num_classes) + self.assertEqual(output.shape, expected_output_shape) + chex.assert_tree_all_finite(output) + chex.assert_tree_all_finite(params) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/av_mae/train_utils.py b/scenic/projects/av_mae/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..f99c450e50a5280ee4ef2f071974fb6262bd6a3b --- /dev/null +++ b/scenic/projects/av_mae/train_utils.py @@ -0,0 +1,782 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utility functions for the training loop.""" +import functools +from typing import Any, Callable, Dict, Optional, Tuple, Union + +from absl import logging +from clu import platform + +import flax.linen as nn +import jax +import jax.numpy as jnp +import matplotlib.pyplot as plt +import numpy as np +from scenic.model_lib.base_models import model_utils +from scenic.model_lib.layers import nn_ops +from scenic.train_lib import train_utils +from scenic.train_lib_deprecated import train_utils as train_utils_deprecated + + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +MetricFnEval = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, jnp.ndarray, Batch, Optional[jnp.ndarray]], + float] +# TODO(scenic-dev) JAX team is working on type annotation for pytree: +# https://github.com/jax-ml/jax/issues/1555 +PyTree = Any + + +def generate_image_grid(target: jnp.ndarray, + prediction: jnp.ndarray, + prediction_masks: jnp.ndarray, + patch_size: Tuple[int, int], + n_columns: int, + input_size: Tuple[int, int, int], + modality: str = 'rgb'): + """Generates a grid of images for logging summaries. + + Args: + target: Array of shape [batch, num_tokens, patch_size * patch_size * + channels]. Values are in the range [-1, 1]. + prediction: Array of same shape as target. It is possible that values are + outside of the range [-1, 1]. + prediction_masks: Array of shape [batch, num_tokens]. Each entry is binary, + ie 0 or 1. Used to mask out patches in the input and predictions. + patch_size: The patch size of the model. + n_columns: The number of columns to generate in the summary. + input_size: The size of the input, specified as [height, width, channels]. + modality: The modality which is shown. + Returns: + An image grid. The shape is + [batch_size / n_columns * 2 * height, n_columns * width, channels]. + Data type is uint8, and values are in the range [0, 255]. + """ + if target.shape != prediction.shape: + raise ValueError('Shape of target and prediction must match.' + f'{target.shape} vs {prediction.shape}.') + # TODO(aarnab): Correctly handle the case where the input is normalised by + # mean and std-dev instead of [-1, 1]. + # if jnp.max(target) > 1 or jnp.min(target) < -1: + # raise ValueError('Invalid ranges in target.') + if modality == 'spectrogram': + prediction_clipped = prediction + else: + prediction_clipped = jnp.clip(prediction, min=-1, max=1) + + # Normalise to uint8 in range [0, 255] for summary-writing. + def normalise(tensor: jnp.ndarray, offset: float = 127.5) -> jnp.ndarray: + if modality == 'spectrogram': + return tensor + else: + return tensor * offset + offset + + target_normalised = normalise(target) + prediction_normalised = normalise(prediction_clipped) + + # if prediction_masks is not None: + # Mask out corresponding part of the input. + mask_image = jnp.zeros(target.shape) + pred_mask = jnp.expand_dims(prediction_masks, axis=-1) + input_normalized = target_normalised + + target_normalised = ((1 - pred_mask) * target_normalised + + pred_mask * mask_image) + pred_unmasked_tokens = ((1 - pred_mask) * prediction_normalised + + pred_mask * mask_image) + pred_masked_tokens = ((1 - pred_mask) * mask_image + + pred_mask * prediction_normalised) + pred_with_unmasked_replaced = ( + (1 - pred_mask) * input_normalized + pred_mask * prediction_normalised) + + batch_size = target.shape[0] + height, width, channels = input_size + n_rows = batch_size // n_columns + if batch_size != n_rows * n_columns: + raise ValueError('`n_columns` must divide the number of images evenly') + + def unpatch_to_images(tensor: jnp.ndarray) -> jnp.ndarray: + n_patches_h = height // patch_size[0] + n_patches_w = width // patch_size[1] + # Reshape the tensor as expected by the `patch_image` function. + tensor_reshaped = jnp.reshape( + tensor, (batch_size, n_patches_h, n_patches_w, patch_size[0], + patch_size[1], channels)) + return nn_ops.patch_image(tensor_reshaped, + inputs_shape=(batch_size, height, + width, channels), + patch_size=patch_size, + mode='p2i') + + input_images = unpatch_to_images(input_normalized) + target_images = unpatch_to_images(target_normalised) + prediction_images = unpatch_to_images(prediction_normalised) + masked_token_images = unpatch_to_images(pred_masked_tokens) + unmasked_token_images = unpatch_to_images(pred_unmasked_tokens) + pred_with_unmasked_replaced_images = unpatch_to_images( + pred_with_unmasked_replaced) + + num_images = 6 + if modality == 'spectrogram': + images_concat = jnp.array( + [jnp.concatenate([x1, x2, x3, x4, x5, x6], axis=1) # pylint: disable= g-complex-comprehension + for x1, x2, x3, x4, x5, x6 in zip( + input_images, target_images, prediction_images, + masked_token_images, unmasked_token_images, + pred_with_unmasked_replaced_images)]) + image_grid = images_concat.reshape( + n_rows, n_columns, height, num_images * width, channels).swapaxes(1, 2) + + image_grid = image_grid.reshape( + height * n_rows, num_images * width * n_columns, channels) + else: + images_concat = jnp.array( + [jnp.concatenate([x1, x2, x3, x4, x5, x6], axis=0) # pylint: disable= g-complex-comprehension + for x1, x2, x3, x4, x5, x6 in zip( + input_images, target_images, prediction_images, + masked_token_images, unmasked_token_images, + pred_with_unmasked_replaced_images)]) + + image_grid = images_concat.reshape(n_rows, n_columns, num_images * height, + width, channels).swapaxes(1, 2) + + image_grid = image_grid.reshape( + num_images * height * n_rows, width * n_columns, channels + ).astype(jnp.uint8) + + if modality == 'spectrogram': + # Normalize the entire image + image_grid = image_grid - image_grid.min() + image_grid = image_grid / image_grid.max() + + cm = plt.get_cmap('viridis') + # plt.get_cmap expects uint8 as input + image_grid = image_grid * 255 + image_grid = cm(image_grid[:, :, 0].astype(jnp.uint8)) + # image_grid is between [0, 1] + image_grid = (image_grid[:, :, :3] * 255).astype(jnp.uint8) + + return image_grid + + +def generate_image_grid_from_video(target: jnp.ndarray, + prediction: jnp.ndarray, + prediction_masks: jnp.ndarray, + patch_size: Tuple[int, int, int], + input_size: Tuple[int, int, int, int], + select_central_frame: bool, + n_columns: int = 1, + num_img_in_column: int = 1): + """Generates a grid of images for a video for logging summaries. + + When select_central_frame=True, all the reconstructed frames + ( = video length / temporal size) will be stacked and shown onto a single row. + When select_central_frame=False, the reconstructed frames + ( = video length) will be split into multiple rows by num_img_in_column. It is + highly recommended to set n_columns to 1 if the video is long. + + Args: + target: Array of shape [batch, num_tokens, patch_size * patch_size * + channels] or [batch, num_tokens, patch_size_t * patch_size_h * patch_size_w + channels] depending on the value of select_central_frame. + Values are in the range [-1, 1]. + prediction: Array of same shape as target. It is possible that values are + outside of the range [-1, 1]. + prediction_masks: Array of shape [batch, num_tokens]. Each entry is binary, + ie 0 or 1. Used to mask out patches in the input and predictions. + patch_size: The patch size of the model. + input_size: The size of the input TxHxWxC without the batch dimension. + select_central_frame: If only the central frame is used for reconstruction. + n_columns: The number of columns to generate in the summary. When + select_central_frame=False is highly recommended to set it to 1. + num_img_in_column: This is used only when select_central_frame=False. It + splits the frames from an example onto multiple rows instead of stacking them + onto a single row. It must be a multiple of the temporal size. + Returns: + An image grid. The shape is [height, width, channels]. + Data type is uint8, and values are in the range [0, 255]. + """ + + if target.shape != prediction.shape: + raise ValueError('Shape of target and prediction must match.' + f'{target.shape} vs {prediction.shape}.') + + # TODO(lgeorgescu): Correctly handle the case where the input is normalised by + # mean and std-dev instead of [-1, 1]. + # if jnp.max(target) > 1 or jnp.min(target) < -1: + # raise ValueError('Invalid ranges in target.') + prediction_clipped = jnp.clip(prediction, min=-1, max=1) + + # Normalise to uint8 in range [0, 255] for summary-writing. + def normalise(tensor: jnp.ndarray, offset: float = 127.5) -> jnp.ndarray: + return tensor * offset + offset + + target_normalised = normalise(target) + prediction_normalised = normalise(prediction_clipped) + + # if prediction_masks is not None: + # Mask out corresponding part of the input. + mask_image = jnp.zeros(target.shape) + pred_mask = jnp.expand_dims(prediction_masks, axis=-1) + input_normalised = ((1 - pred_mask) * target_normalised + + pred_mask * mask_image) + pred_unmasked_tokens = ((1 - pred_mask) * prediction_normalised + + pred_mask * mask_image) + pred_masked_tokens = ((1 - pred_mask) * mask_image + + pred_mask * prediction_normalised) + + pred_with_unmasked_replaced = ( + (1 - pred_mask) * input_normalised + pred_mask * prediction_normalised) + + batch_size = target.shape[0] + if select_central_frame: + channels = int(target.shape[2] / (patch_size[0] * patch_size[1])) + else: + channels = int(target.shape[2] / (patch_size[0] * patch_size[1] + * patch_size[2])) + + height = input_size[1] + width = input_size[2] + temporal_dims = input_size[0] // patch_size[2] + n_rows = batch_size // n_columns + if batch_size != n_rows * n_columns: + raise ValueError('`n_columns` must divide the number of images evenly') + + def unpatch_to_images(tensor: jnp.ndarray) -> jnp.ndarray: + n_patches_h = height // patch_size[0] + n_patches_w = width // patch_size[1] + + if select_central_frame: + # Reshape the tensor as expected by the `patch_image` function. + tensor_reshaped = jnp.reshape(tensor, (batch_size, temporal_dims, + n_patches_h, n_patches_w, + patch_size[0], patch_size[1], 3)) + + images_list = jax.vmap( + functools.partial(nn_ops.patch_image, + inputs_shape=(batch_size, height, width, 3), + patch_size=patch_size[:2], + mode='p2i'), + in_axes=1, out_axes=0)(tensor_reshaped) + + final_image = jnp.concatenate(images_list, axis=2) + return final_image + + else: + # Reshape the tensor as expected by the `patch_image` function. + tensor_reshaped = jnp.reshape(tensor, (batch_size, temporal_dims, + n_patches_h, n_patches_w, + patch_size[2], patch_size[0], + patch_size[1], 3)) + images_list = [] + for temporal_video_idx in range(temporal_dims): + images_list_patch = jax.vmap( + functools.partial(nn_ops.patch_image, + inputs_shape=(batch_size, height, width, 3), + patch_size=patch_size[:2], + mode='p2i'), + in_axes=3, out_axes=0)(tensor_reshaped[:, temporal_video_idx]) + + images_list.extend(images_list_patch) + + if num_img_in_column % patch_size[2] != 0: + raise ValueError('`patch_size[2]` must divide' + 'the `num_img_in_column` evenly!') + + grouped_images_list = np.array_split( + images_list, max(1, len(images_list) // num_img_in_column)) + + final_image = jnp.concatenate( + [jnp.concatenate(sub_images_list, axis=2) + for sub_images_list in grouped_images_list], axis=1) + return final_image + + input_images = unpatch_to_images(input_normalised) + pred_images = unpatch_to_images(prediction_normalised) + masked_token_images = unpatch_to_images(pred_masked_tokens) + unmasked_token_images = unpatch_to_images(pred_unmasked_tokens) + target_images = unpatch_to_images(target_normalised) + pred_with_unmasked_replaced_images = unpatch_to_images( + pred_with_unmasked_replaced) + + images_concat = jnp.array([ + jnp.concatenate([x1, x2, x3, x4, x5, x6], axis=0) # pylint: disable= g-complex-comprehension + for x1, x2, x3, x4, x5, x6 in zip(target_images, input_images, + pred_images, + masked_token_images, + unmasked_token_images, + pred_with_unmasked_replaced_images) + ]) + # add margin 2% of the image height + margin_size = max(int(0.02 * images_concat.shape[1]), 10) + margin = np.ones((images_concat.shape[0], margin_size, + images_concat.shape[2], images_concat.shape[3]), + dtype=np.uint8) * 255 + images_concat = jax.numpy.concatenate((images_concat, margin), axis=1) + + new_height = unmasked_token_images.shape[1] + new_width = unmasked_token_images.shape[2] + image_grid = images_concat.reshape(n_rows, n_columns, + 6 * new_height + margin_size, + new_width, channels).swapaxes(1, 2) + image_grid = image_grid.reshape((6 * new_height * n_rows + + batch_size * margin_size), + new_width * n_columns, + channels).astype(jnp.uint8) + return image_grid + + +def get_random_bounding_box( + image_shape: Tuple[int, int], + ratio: jnp.ndarray, + rng: Any, + margin: float = 0.) -> Tuple[int, int, int, int]: + """Returns a random bounding box for Cutmix. + + Based on the implementation in timm: + https://github.com/rwightman/pytorch-image-models/blob/master/timm/data/mixup.py + + Args: + image_shape: The shape of the image, specified as [height, width]. + ratio: Ratio of the input height/width to use as the maximum dimensions of + the randomly sampled bounding box. + rng: JAX rng key. + margin: Percentage of bounding box dimension to enforce as the margin. + This reduces the amount of the bounding box outside the image. + + Returns: + The bounding box parameterised as y_min, y_max, x_min, x_max. + """ + img_h, img_w = image_shape + cut_h, cut_w = (img_h * ratio).astype(int), (img_w * ratio).astype(int) + margin_y, margin_x = (margin * cut_h).astype(int), (margin * + cut_w).astype(int) + rngx, rngy = jax.random.split(rng) + cy = jax.random.randint(rngy, [1], 0 + margin_y, img_h - margin_y) + cx = jax.random.randint(rngx, [1], 0 + margin_x, img_w - margin_x) + + y_min = jnp.clip(cy - cut_h // 2, 0, img_h)[0] + y_max = jnp.clip(cy + cut_h // 2, 0, img_h)[0] + x_min = jnp.clip(cx - cut_w // 2, 0, img_w)[0] + x_max = jnp.clip(cx + cut_w // 2, 0, img_w)[0] + return y_min, y_max, x_min, x_max # pytype: disable=bad-return-type # jnp-type + + +def _do_mixup(inputs: jnp.ndarray, rng: Any, + alpha: float) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Performs Mixup. + + Args: + inputs: The input images of shape NHWC or NTHWC. Mixup is always performed + along the leading axis of the array, i.e., along the "N" dimension. + rng: A PRNGKey. Will be consumed by this function. + alpha: The alpha value for mixup. + + Returns: + The modified images and label weights. + """ + batch_size = inputs.shape[0] + weight = jax.random.beta(rng, alpha, alpha) + weight *= jnp.ones((batch_size, 1)) + + # Mixup inputs. + # Shape calculations use np to avoid device memory fragmentation: + image_weight_shape = np.ones(inputs.ndim, np.int32) + image_weight_shape[0] = batch_size + image_weight = weight.reshape(image_weight_shape) + reverse = tuple( + slice(inputs.shape[i]) if i > 0 else slice(-1, None, -1) + for i in range(inputs.ndim)) + result_img = (image_weight * inputs + (1.0 - image_weight) * inputs[reverse]) + return result_img, weight + + +def _do_cutmix(inputs: jnp.ndarray, rng: Any, + alpha: float) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Performs Cutmix. + + Args: + inputs: The input images of shape NHWC or NTHWC. + rng: A PRNGKey. Will be consumed by this function. + alpha: The alpha value for cutmix. + + Returns: + The modified images and label weights. + """ + rng, beta_key = jax.random.split(rng) + cutmix_lambda = jax.random.beta(beta_key, alpha, alpha) + ratio = jnp.sqrt(1 - cutmix_lambda) + + # TODO(unterthiner): we are using the same bounding box for the whole batch + y_min, y_max, x_min, x_max = get_random_bounding_box( + inputs.shape[-3:-1], ratio, rng) + + height, width = inputs.shape[-3], inputs.shape[-2] + y_idx = jnp.arange(height) + x_idx = jnp.arange(width) + mask0 = (y_min <= y_idx) & (y_idx < y_max) + mask1 = (x_min <= x_idx) & (x_idx < x_max) + mask = (~jnp.outer(mask0, mask1)).astype(int) + if inputs.ndim == 4: # image format NWHC + mask = jnp.expand_dims(mask, axis=(0, -1)) + elif inputs.ndim == 5: # image format NTWHC + mask = jnp.expand_dims(mask, axis=(0, 1, -1)) + else: + raise ValueError('Invalid image format') + + result_img = (inputs * mask + jnp.flip(inputs, axis=0) * (1.0 - mask)) + box_area = (y_max - y_min) * (x_max - x_min) + weight = 1.0 - box_area / float(height * width) + weight *= jnp.ones((inputs.shape[0], 1)) + return result_img, weight + + +def mixup_cutmix(batch: Dict['str', jnp.ndarray], + rng: Any, + mixup_alpha: float = 1.0, + cutmix_alpha: float = 0., + switch_prob: float = 0.5, + label_smoothing: float = 0.0) -> Dict['str', jnp.ndarray]: + """Performs Mixup or Cutmix within a single batch. + + For more details on Mixup, please see https://arxiv.org/abs/1710.09412. + And for details on Cutmix, refer to https://arxiv.org/abs/1905.04899. + + Based on the implementation from: + https://github.com/rwightman/pytorch-image-models/blob/master/timm/data/mixup.py + + This function supports `jax.numpy` to do mixup within a jitted/pmapped + function (e.g. within a pmapped train step to apply mixup on device patch). + + Results in a batch with: + mixed_images[idx] = weight * images[idx] + (1-weight) * images[-(idx+1)], + where weight is sampled from a beta distribution with parameter alpha. + + Args: + batch: dict; A batch of data with 'inputs' and 'label'. 'inputs' is expected + to have shape [batch, height, width, channels] or NTWHC. + rng: JAX rng key. This key will be consumed by the function call. + mixup_alpha: The alpha parameter of the beta distribution that the weight is + sampled from. + cutmix_alpha: The alpha parameter of the beta distribution that the cutmix + weight is sampled from. + switch_prob: The probability of switching to cutmix when both mixup and + cutmix are enabled. + label_smoothing: The co-efficient for label-smoothing. If using mixup or + cutmix, this is done before mixing the labels. + + Returns: + Tuple (mixed_images, mixed_labels). + """ + + if cutmix_alpha <= 0 and mixup_alpha <= 0: + return batch + + images, labels = batch['inputs'], batch['label'] + if labels.shape[-1] == 1: + raise ValueError('Mixup requires one-hot targets.') + if images.ndim not in (4, 5): + raise ValueError(f'Unexpected shape: {images.shape}, wanted 4 or 5 dims.') + + rng, rng_coinflip = jax.random.split(rng) + coin_flip = jax.random.bernoulli(rng_coinflip, p=switch_prob) + pick_cutmix = cutmix_alpha > 0 and (mixup_alpha <= 0 or coin_flip) + + alpha = jax.lax.cond(pick_cutmix, lambda: cutmix_alpha, lambda: mixup_alpha) + batch['inputs'], label_weight = jax.lax.cond(pick_cutmix, _do_cutmix, + _do_mixup, images, rng, alpha) + + if label_smoothing > 0: + labels = model_utils.apply_label_smoothing(labels, label_smoothing) + + batch['label'] = label_weight * labels + (1.0 - label_weight) * labels[::-1] + return batch + + +def log_note(note: str): + """Logging function.""" + if jax.process_index() == 0: # Only perform on the lead_host + logging.info(note) + platform.work_unit().set_notes(note) + + +def compute_max_norm(tensors: PyTree) -> float: + """Compute the maximum norm in a pytree of tensors.""" + leaves, _ = jax.tree_util.tree_flatten(tensors) + norms = jnp.sqrt(sum(jnp.vdot(x, x) for x in leaves)) + max_norm = jnp.max(norms) + return max_norm # pytype: disable=bad-return-type # jnp-type + + +def test_step( + train_state: Union[ + train_utils.TrainState, train_utils_deprecated.TrainState + ], + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFnEval, + n_clips: int = 2, + return_logits_and_labels: bool = False, + softmax_logits: bool = False, + debug: bool = False, +) -> Union[ + Dict[str, Tuple[float, int]], + Tuple[Dict[str, Tuple[float, int]], jnp.ndarray, jnp.ndarray], +]: + """Runs a single step of testing. + + For multi-crop testing, we assume that num_crops consecutive entries in the + batch are from the same example. And we average the logits over these examples + + We assume that the batch contains different crops of the same original + example. Therefore, we can average all the logits of it. + This assumption is true when local_batch_size = num_local_devices + + Args: + train_state: The state of training including the current + global_step, model_state, rng, and optimizer, and other metadata. + batch: Dictionary with keys 'inputs', 'labels', 'batch_mask'. We assume that + all the inputs correspond to the same original example in the test set. + The input shapes to this function are batch['inputs'] = [num_crops, t, h, + w, c] batch['labels'] = [num_crops, num_classes] However, for + classification, the labels for all the crops are the same. + batch['batch_mask'] = [num_crops] + flax_model: A Flax model. + metrics_fn: Metrics function for the model. + n_clips: The number of clips to process at a time by each device. Set + due to memory constraints. + return_logits_and_labels: Whether return logits of the model or not. + softmax_logits: Whether to softmax-normalise the logits before + averaging + debug: Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics [and optionally averaged logits that are of + shape `[1, num_classes]`]. + """ + all_logits = jnp.zeros(batch['label'].shape[1]) + num_crops = batch['inputs'].shape[0] + if isinstance(train_state, train_utils.TrainState): + variables = { + 'params': train_state.params, + **train_state.model_state + } + elif isinstance(train_state, train_utils_deprecated.TrainState): + variables = { + 'params': train_state.optimizer.target, # pytype: disable=attribute-error + **train_state.model_state + } + else: + raise ValueError('Unknown train_state type.') + + # TODO(aarnab): Implement this with jax.scan to improve efficiency. + for idx in range(0, num_crops, n_clips): + temp_input = batch['inputs'][idx:idx + n_clips] + logits = flax_model.apply( + variables, temp_input, train=False, mutable=False, debug=debug) + if softmax_logits: + logits = nn.softmax(logits, axis=-1) + logits = jnp.sum(logits, axis=0) + all_logits = all_logits + logits + + all_logits = all_logits / num_crops + all_logits = jnp.expand_dims(all_logits, axis=0) + batch['label'] = jnp.expand_dims(batch['label'][0], axis=0) + batch['batch_mask'] = jnp.expand_dims(batch['batch_mask'][0], axis=0) + metrics = metrics_fn(all_logits, batch) + if return_logits_and_labels: + return metrics, all_logits, batch['label'] + return metrics + + +def test_step_multimodal( + train_state: Union[ + train_utils.TrainState, train_utils_deprecated.TrainState + ], + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFnEval, + n_clips: int = 2, + return_logits_and_labels: bool = False, + softmax_logits: bool = False, + debug: bool = False, +) -> Union[ + Dict[str, Tuple[float, int]], + Tuple[Dict[str, Tuple[float, int]], jnp.ndarray, jnp.ndarray], +]: + """Runs a single step of testing. + + For multi-crop testing, we assume that num_crops consecutive entries in the + batch are from the same example. And we average the logits over these examples + + We assume that the batch contains different crops of the same original + example. Therefore, we can average all the logits of it. + This assumption is true when local_batch_size = num_local_devices + + Args: + train_state: The state of training including the current + global_step, model_state, rng, and optimizer, and other metadata. + batch: Dictionary with keys 'inputs', 'labels', 'batch_mask'. We assume that + all the inputs correspond to the same original example in the test set. + The input shapes to this function are batch['inputs'] = [num_crops, t, h, + w, c] batch['labels'] = [num_crops, num_classes] However, for + classification, the labels for all the crops are the same. + batch['batch_mask'] = [num_crops] + flax_model: A Flax model. + metrics_fn: Metrics function for the model. + n_clips: The number of clips to process at a time by each device. Set + due to memory constraints. + return_logits_and_labels: Whether return logits of the model or not. + softmax_logits: Whether to softmax-normalise the logits before + averaging + debug: Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics [and optionally averaged logits that are of + shape `[1, num_classes]`]. + """ + + all_logits = jnp.zeros(batch['label'].shape[1]) + assert len(batch['batch_mask'].shape) == 1, ( + 'Spatial padding is not supported in multi-crop evaluation.') + + if isinstance(train_state, train_utils.TrainState): + variables = { + 'params': train_state.params, + **train_state.model_state + } + elif isinstance(train_state, train_utils_deprecated.TrainState): + variables = { + 'params': train_state.optimizer.target, # pytype: disable=attribute-error + **train_state.model_state + } + else: + raise ValueError('Unknown train_state type.') + + for modality in batch['inputs']: + num_crops = batch['inputs'][modality].shape[0] + for idx in range(0, num_crops, n_clips): + current_input = {} + for modality in batch['inputs']: + current_input[modality] = batch['inputs'][modality][idx:idx + n_clips] + logits = flax_model.apply( + variables, current_input, train=False, mutable=False, debug=debug) + + if softmax_logits: + logits = nn.softmax(logits, axis=-1) + logits = jnp.sum(logits, axis=0) + all_logits = all_logits + logits + + # Average logits accross all views (segments) within the clip. + all_logits = all_logits / num_crops + all_logits = jnp.expand_dims(all_logits, axis=0) + batch['label'] = jnp.expand_dims(batch['label'][0], axis=0) + batch['batch_mask'] = jnp.expand_dims(batch['batch_mask'][0], axis=0) + metrics = metrics_fn(all_logits, batch) + if return_logits_and_labels: + # Here we have the logits predicted for one eval clip, but mAP is computed + # over the entire eval set. So we + # 1) Gather & return logits and labels for the N eval clips processed in + # N hosts during this test_step, + # 2) Repeat for M test_batches (steps_per_test) needed to traverse eval set, + # 3) Once we gathered logits and labels for the entire eval set, + # we compute the mAP. + all_logits = jax.lax.all_gather(all_logits, 'batch') + labels = jax.lax.all_gather(batch['label'], 'batch') + return metrics, all_logits, labels + return metrics + + +def mixup_modalities(batch: Dict[str, Any], + alpha: float = 1.0, + batch_first: bool = True, + mixmod: bool = False, + rng: Optional[Any] = None) -> Dict['str', jnp.ndarray]: + """Mixes multimodal inputs and labels within a single batch. + + For more details, please see https://arxiv.org/abs/1710.09412. + + This function supports both using `numpy` to do mixup in the input-pipeline + and `jax.numpy` to do mixup within a jitted/pmapped function (e.g. within + a pmapped train step to apply mixup on device patch). + + Results in a batch with: + mixed_inputs[idx] = weight * inputs[idx] + (1-weight) * inputs[-(idx+1)], + where weight is sampled from a beta distribution with parameter alpha. + + Args: + batch: dict; A batch of data with 'inputs' and 'label'. batch['inputs'] has + field like 'rgb', 'flow', spectrogram', 'waveform' or 'text'. + alpha: float; Used to control the beta distribution that weight is sampled + from. + batch_first: bool; Batch is the first dimension or the last dimension. + mixmod: bool; If True, applies mixup to each modality separately. + rng: JAX rng key. If given, JAX numpy will be used as the backend, and if + None (default value), normal numpy will be used. + + Returns: + Tuple (mixed_images, mixed_labels). + """ + inputs, labels = batch['inputs'], batch['label'] + batch['label'] = {} + num_modalities = len(inputs) + + if labels.shape[-1] == 1: + raise ValueError('Mixup requires one-hot targets.') + + batch_size = labels.shape[0] + + if mixmod: + weights = list(jax.random.beta(rng, alpha, alpha, shape=[num_modalities])) + else: + weights = [jax.random.beta(rng, alpha, alpha)] * num_modalities + for i in range(num_modalities): + weights[i] *= jnp.ones((batch_size, 1)) + + # Mixup inputs. + # Shape calculations use np to avoid device memory fragmentation: + for modality, values in inputs.items(): + weight = weights[len(batch['label'])] + # Mixup labels. + batch['label'][modality] = weight * labels + (1.0 - weight) * labels[::-1] + weight_shape = np.ones((values.ndim)) + if batch_first: + weight_shape[0] = batch_size + else: + weight_shape[-1] = batch_size + weight = jnp.reshape(weight, weight_shape.astype(jnp.int32)) + reverse = [] + for i in range(values.ndim): + if (i == 0 and batch_first) or (i == values.ndim - 1 and not batch_first): + reverse.append(slice(-1, None, -1)) + else: + reverse.append(slice(values.shape[i])) + batch['inputs'][modality] = (weight * values + + (1.0 - weight) * values[tuple(reverse)]) + if num_modalities == 1 or not mixmod: + batch['label']['all'] = weights[0] * labels + (1.0 - + weights[0]) * labels[::-1] + + return batch diff --git a/scenic/projects/av_mae/trainer.py b/scenic/projects/av_mae/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..edf3b34420955711213158309ad923dedf6bf610 --- /dev/null +++ b/scenic/projects/av_mae/trainer.py @@ -0,0 +1,601 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script.""" + +import functools +from typing import Any, Callable, Dict, Iterator, Optional, Tuple, Type, Union + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.common_lib import debug_utils +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.av_mae import base_model as avmae_base_model +from scenic.projects.av_mae import train_utils as avmae_train_utils +from scenic.train_lib_deprecated import lr_schedules +from scenic.train_lib_deprecated import optimizers +from scenic.train_lib_deprecated import pretrain_utils +from scenic.train_lib_deprecated import train_utils + + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, jnp.ndarray, Batch, Optional[jnp.ndarray]], + float] + + +def compute_max_norm(tensors: train_utils.PyTree) -> float: + """Compute the maximum norm in a pytree of tensors.""" + leaves, _ = jax.tree_util.tree_flatten(tensors) + norms = jnp.sqrt(sum(jnp.vdot(x, x) for x in leaves)) + max_norm = jnp.max(norms) + return max_norm # pytype: disable=bad-return-type # jnp-type + + +def compute_feature_targets(batch: Batch, config: ml_collections.ConfigDict): + """Compute the feature targets for feature regression. + + Args: + batch: A single batch of data. This is updated with the feature target. + config: The training configuration, used to generate the targets. + """ + feature_target = config.masked_feature_loss.target + if feature_target == avmae_base_model.FeatureTargets.RGB: + batch['target_rgb'] = avmae_base_model.get_rgb_targets( + batch['inputs'], + tuple(config.model.patches.size), + config.masked_feature_loss.get('select_central_frame'), + config.masked_feature_loss.get('reconstruct_grayscale', False), + config.masked_feature_loss.get('standardise_per_patch', False), + config.masked_feature_loss.get('standardise_per_patch_channels', False)) + else: + raise ValueError(f'Unsupported feature target: {feature_target}.') + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + learning_rate_fn: Callable[[int], float], + loss_fn: LossFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False, +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], float]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, and optimizer. The buffer of this argument can be + donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + learning_rate_fn: Learning rate scheduler which given the global_step + generates the learning rate. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, computed metrics, and learning rate for logging. + """ + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + label_key='target_rgb', + rng=mixup_rng) + + # Bind the dropout rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + # Compute the targets for feature regression. + compute_feature_targets(batch, config) + + def training_loss_fn(params, batch, dropout_rng): + variables = {'params': params, **train_state.model_state} + (logits, token_mask), new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, token_mask, batch, variables['params']) + return loss, (new_model_state, logits, token_mask) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (loss, (new_model_state, logits, token_mask)), grad = compute_gradient_fn( + train_state.optimizer.target, batch, dropout_rng) # pytype: disable=attribute-error + metrics = metrics_fn(logits, token_mask, batch) + metrics['total_loss'] = (loss, 1) + metrics['mask_ratio'] = (jnp.mean(token_mask), 1) + + step = train_state.global_step + lr = learning_rate_fn(step) + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + metrics['max_grad_norm_preclip'] = (compute_max_norm(grad), 1) + if config.get('max_grad_norm', None) is not None: + grad = clip_grads(grad, config.max_grad_norm) + metrics['max_grad_norm_postclip'] = (compute_max_norm(grad), 1) + + new_optimizer = train_state.optimizer.apply_gradient(grad, learning_rate=lr) # pytype: disable=attribute-error + + # Explicit weight decay, if necessary. + if config.get('explicit_weight_decay', None) is not None: + new_optimizer = new_optimizer.replace( + target=optimizers.tree_map_with_names( + functools.partial( + optimizers.decay_weight_fn, + lr=lr, + decay=config.explicit_weight_decay), + new_optimizer.target, + match_name_fn=lambda name: 'kernel' in name)) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=step + 1, + optimizer=new_optimizer, + model_state=new_model_state, + rng=new_rng) + return new_train_state, metrics, lr # pytype: disable=bad-return-type # jnp-type + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and logits. + """ + variables = { + 'params': train_state.optimizer.target, # pytype: disable=attribute-error + **train_state.model_state + } + + # Compute the targets for feature regression. + compute_feature_targets(batch, config) + + # We need an rng for masking at test time. + # Note that we are using the same rng for the whole validation set (ie each + # batch will have the same token mask). + # TODO(aarnab, unterthiner): Verify the above statement. + _, rng = jax.random.split(train_state.rng) + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + logits, token_mask = flax_model.apply( + variables, batch['inputs'], train=True, mutable=False, debug=debug, + rngs={'dropout': dropout_rng}) + metrics = metrics_fn(logits, token_mask, batch) + + return metrics, logits, token_mask, batch['target_rgb'] + + +def get_image_grid( + targets: jnp.ndarray, predictions: jnp.ndarray, + token_mask: jnp.ndarray, config: ml_collections.ConfigDict, + input_size: Optional[ + Union[Tuple[int, int, int], + Tuple[int, int, int, int]]] = None) -> Optional[jnp.ndarray]: + """Returns an image grid for summary writing.""" + + image_grid = None + feature_target = config.masked_feature_loss.target + + n_columns = config.masked_feature_loss.get('summary_num_columns', + 1) + + if feature_target == avmae_base_model.FeatureTargets.RGB: + if len(config.model.patches.size) == 2: + image_grid = avmae_train_utils.generate_image_grid( + targets, predictions, token_mask, + tuple(config.model.patches.size), n_columns=n_columns, + input_size=input_size) + elif len(config.model.patches.size) == 3: + num_img_in_column = config.masked_feature_loss.get( + 'number_of_img_in_column', 16) + select_central_frame = config.masked_feature_loss.get( + 'select_central_frame', True) + + assert input_size is not None, 'Input size must be provided for video!' + + image_grid = avmae_train_utils.generate_image_grid_from_video( + targets, predictions, token_mask, + tuple(config.model.patches.size), + input_size, n_columns=n_columns, + num_img_in_column=num_img_in_column, + select_central_frame=select_central_frame) + + return image_grid + + +def representation_fn( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + representation_layer: str, + gather_to_host: bool = True +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Feeds the inputs to the model and returns their representations. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data from the dataset. + flax_model: A Flax model. + representation_layer: The name of the layer to use as the representation. + gather_to_host: Whether to gather results from all devices to the host, + rather than leaving them distributed. + + Returns: + Representation learned by the model for the given inputs and the labels and + masks. If `gather_to_host` is True, these are collected from all hosts. + """ + variables = { + 'params': train_state.optimizer.target, # pytype: disable=attribute-error + **train_state.model_state + } + + representation_layer_parts = representation_layer.split('/') + filter_rep = lambda mdl, _: mdl.name == representation_layer_parts[-1] + _, model_state = flax_model.apply( + variables, + batch['inputs'], + train=False, + capture_intermediates=filter_rep, + mutable=['intermediates'], + debug=False) + if 'intermediates' not in model_state: + raise ValueError(f'Layer with name "{representation_layer}"' + ' does not exist in your model.') + + representation = model_state['intermediates'] + for rep_layer in representation_layer_parts: + if rep_layer: + representation = representation[rep_layer] + representation = representation['__call__'][0] + + if representation.ndim == 3: + # Feature regression models return [batch, num_tokens, channels] + logging.info('Representation shape before pooling tokens: %s', + representation.shape) + representation = jnp.mean(representation, axis=1) + logging.info('Representation shape: %s', representation.shape) + + if gather_to_host: + representation = jax.lax.all_gather(representation, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return representation, batch['label'], batch['batch_mask'] + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter): + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current global_step, + model_state, rng, and the optimizer), train_summary and eval_summary which + are dict of metrics (from the last evaluation and train metric logging + respectively). These outputs are used for regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, params_init_rng, dropout_init_rng = jax.random.split(rng, num=3) + init_rngs = {'params': params_init_rng, 'dropout': dropout_init_rng} + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rngs, + train=True) + + # Create optimizer. + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + optimizer = jax.jit( + optimizers.get_optimizer(config).create, backend='cpu')( + params) + rng, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + optimizer=optimizer, + model_state=model_state, + rng=train_rng, + accum_train_time=0) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + logging.info('Parameter summary after restoring checkpoint') + debug_utils.log_param_shapes(train_state.optimizer.target) # pytype: disable=attribute-error + + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + # Load params from the init_model. + train_state = model.init_from_train_state( # pytype: disable=attribute-error + train_state, restored_train_state, restored_model_cfg) + logging.info('Parameter summary after adapting pretrained checkpoint.') + debug_utils.log_param_shapes(train_state.optimizer.target) + del restored_train_state + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + # Get learning rate scheduler. + learning_rate_fn = lr_schedules.get_learning_rate_fn(config) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + learning_rate_fn=learning_rate_fn, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + config=config, + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + def evaluate(train_state: train_utils.TrainState, step: int, + valid_iter: Iterator[Batch], + num_valid_ex: int) -> Dict[str, Any]: + eval_summary = {} + image_summary = {} + if not isinstance(valid_iter, dict): # Only on validation set. + valid_iter, num_valid_ex = {'valid': valid_iter}, {'valid': num_valid_ex} + + for val_name, val_iter in valid_iter.items(): + num_ex = num_valid_ex[val_name] + # Ceil rounding such that we include the last incomplete batch. + total_eval_steps = int(np.ceil(num_ex / config.batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + eval_metrics = [] + for iteration in range(steps_per_eval): + eval_batch = next(val_iter) + if dataset.meta_data['target_is_onehot']: # Which includes multi-hot. + # Ignore the entries with all zero label for evaluation. + eval_batch['batch_mask'] *= eval_batch['label'].max(axis=-1) + e_metrics, predictions, token_mask, rgb_targets = eval_step_pmapped( + train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + + if iteration == 0: + input_size = eval_batch['inputs'].shape[2:] # DCxBxTxHxWxC->TxHxWxC + unreplicate = jax_utils.unreplicate + image_grid = get_image_grid( + unreplicate(rgb_targets), unreplicate(predictions), + unreplicate(token_mask), config, input_size) + if image_grid is not None: + image_summary = {'valid/reconstruction': jax.device_get(image_grid)} + del predictions + del token_mask + del rgb_targets + eval_summary.update( + train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + writer=writer, + key_separator='/', + prefix=val_name)) + del eval_metrics + if image_summary: + writer.write_images(step, image_summary) + writer.flush() + return eval_summary + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono = train_utils.Chrono( + first_step=start_step, + total_steps=total_steps, + steps_per_epoch=steps_per_epoch, + global_bs=config.batch_size, + accum_train_time=int(jax_utils.unreplicate(train_state.accum_train_time))) + + logging.info('Starting training loop at step %d for %d steps', + start_step, total_steps) + + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + + + train_state, t_metrics, lr = train_step_pmapped(train_state, train_batch) + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + extra_training_logs.append({'learning_rate': lr}) + + # Quick indication that training is happening. + logging.log_first_n(logging.INFO, 'Finished training step %d.', 5, step) + for h in hooks: + h(step) + + chrono.pause() # Below are once-in-a-while ops -> pause. + ############### LOG TRAIN SUMMARY ############### + if (step % log_summary_steps == 1) or (step == total_steps): + if lead_host: + chrono.tick(step, writer=writer) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, extra_training_logs), + key_separator='/', + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + # Sync model state across replicas. + with report_progress.timed('eval'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summary = evaluate(train_state, step, dataset.valid_iter, + dataset.meta_data['num_eval_examples']) + + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 1) or + (step == total_steps)) and config.checkpoint: + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + train_state.replace( # pytype: disable=attribute-error + accum_train_time=chrono.accum_train_time) + train_utils.save_checkpoint(workdir, train_state) + + + chrono.resume() # Un-pause now. + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/av_mae/trainer_multimodal.py b/scenic/projects/av_mae/trainer_multimodal.py new file mode 100644 index 0000000000000000000000000000000000000000..730c4f1f8164e6d428c51671b6a64df11b289df8 --- /dev/null +++ b/scenic/projects/av_mae/trainer_multimodal.py @@ -0,0 +1,679 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script.""" + +import functools +from typing import Any, Callable, Dict, Iterator, Mapping, Optional, Tuple, Type, Union + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +import flax +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.common_lib import debug_utils +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.av_mae import base_model as avmae_base_model +from scenic.projects.av_mae import train_utils as avmae_train_utils +from scenic.train_lib_deprecated import lr_schedules +from scenic.train_lib_deprecated import optimizers +from scenic.train_lib_deprecated import pretrain_utils +from scenic.train_lib_deprecated import train_utils + + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, jnp.ndarray, Batch, Optional[jnp.ndarray]], + float] +# JAX team is working on type annotation for pytree: +# https://github.com/jax-ml/jax/issues/1555 +PyTree = Any + + +def initialize_model( + *, + model_def: nn.Module, + input_spec_dict: Dict[str, Tuple[Tuple[int, ...], jnp.dtype]], + config: ml_collections.ConfigDict, + rngs: Union[jnp.ndarray, Mapping[str, jnp.ndarray]], + is_train: Optional[bool] = False +) -> Tuple[PyTree, PyTree, int, Optional[float]]: + """Initializes parameters and model state. + + Args: + model_def: Definition of a model. + input_spec_dict: A dictionary of modality_name: (shape, dtype) specifying + the shape and dtype of the inputs. If unspecified the dtype is float32. + config: Configurations of the initialization. + rngs: Jax rng keys. + is_train: If the scenic model should be initialized in the train mode. + + Returns: + Initial params, Init model_state, and number of trainable_params. + """ + batch_size = (config.batch_size // + jax.device_count()) if config.get('batch_size') else None + dummy_input = {} + + for key, input_spec in input_spec_dict.items(): + in_st = debug_utils.input_spec_to_jax_shape_dtype_struct( + input_spec, batch_size=batch_size) + dummy_input[key] = jnp.zeros(in_st.shape, in_st.dtype) + + # We want all parameters to be created in host RAM, not on any device, they'll + # be sent there later as needed, otherwise we already encountered two + # situations where we allocate them twice. + @functools.partial(jax.jit, backend='cpu') + def _initialize_model(rngs): + """Initialization function to be jitted.""" + init_model_state, init_params = flax.core.pop(model_def.init( + rngs, dummy_input, train=is_train, debug=False), 'params') + # Set bias in the head to low value, such that loss is small initially. + if config.get('init_head_bias', None) is not None: + init_params = flax.core.unfreeze(init_params) + for key in input_spec_dict.keys(): + init_params[f'output_projection_{key}'] = optimizers.tree_map_with_names( # pylint: disable=line-too-long + lambda p: jnp.full_like(p, config.init_head_bias), + init_params[f'output_projection_{key}'], + match_name_fn=lambda name: 'bias' in name) + init_params = flax.core.freeze(init_params) + return init_params, init_model_state + + if not isinstance(rngs, dict): + rngs = {'params': rngs} + init_params, init_model_state = _initialize_model(rngs) + # Pop out params rng: + rngs.pop('params') + + # Count number of trainable parameters: + num_trainable_params = debug_utils.log_param_shapes(init_params) + gflops = None # TODO(lgeorgescu): count the gflops. + + return init_params, init_model_state, num_trainable_params, gflops + + +def compute_max_norm(tensors: train_utils.PyTree) -> float: + """Compute the maximum norm in a pytree of tensors.""" + leaves, _ = jax.tree_util.tree_flatten(tensors) + norms = jnp.sqrt(sum(jnp.vdot(x, x) for x in leaves)) + max_norm = jnp.max(norms) + return max_norm # pytype: disable=bad-return-type # jnp-type + + +def compute_feature_targets(batch: Batch, config: ml_collections.ConfigDict): + """Compute the feature targets for feature regression. + + Args: + batch: A single batch of data. This is updated with the feature target. + config: The training configuration, used to generate the targets. + """ + # TODO(lgeorgescu): some parameters should be modified only for one modality + # such as patch size. + + batch['targets'] = {} # pytype: disable=container-type-mismatch # jax-ndarray + feature_targets = config.masked_feature_loss.target + for feature_target in feature_targets: + if feature_target == avmae_base_model.FeatureTargets.RGB: + batch['targets'][feature_target] = avmae_base_model.get_rgb_targets( + batch['inputs'][feature_target], + tuple(config.model.patches.size), + config.masked_feature_loss.get('select_central_frame'), + config.masked_feature_loss.get('reconstruct_grayscale', False), + config.masked_feature_loss.get('standardise_per_patch', False), + config.masked_feature_loss.get('standardise_per_patch_channels', + False)) + elif feature_target == avmae_base_model.FeatureTargets.SPECTROGRAM: + batch['targets'][feature_target] = avmae_base_model.get_spectogram_targets( # pylint: disable=line-too-long + batch['inputs'][feature_target], tuple(config.model.patches.size[:2]), + config.masked_feature_loss.get('standardise_per_patch', False) + ) + else: + raise ValueError(f'Unsupported feature target: {feature_target}.') + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + learning_rate_fn: Callable[[int], float], + loss_fn: LossFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False): + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, and optimizer. The buffer of this argument can be + donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + learning_rate_fn: Learning rate scheduler which given the global_step + generates the learning rate. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, computed metrics, and learning rate for logging. + """ + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + raise ValueError('mixup is not supported yet!') + + # Bind the dropout rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + # Compute the targets for feature regression. + compute_feature_targets(batch, config) + + def training_loss_fn(params, batch, dropout_rng): + variables = {'params': params, **train_state.model_state} + (logits, token_mask), new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, token_mask, batch, variables['params']) + return loss, (new_model_state, logits, token_mask) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (loss, (new_model_state, logits, token_mask)), grad = compute_gradient_fn( + train_state.optimizer.target, batch, dropout_rng) # pytype: disable=attribute-error + metrics = metrics_fn(logits, token_mask, batch) + metrics['total_loss'] = (loss, 1) + + for key, token_mask_ in token_mask.items(): + metrics[f'mask_ratio_{key}'] = (jnp.mean(token_mask_), 1) + + step = train_state.global_step + lr = learning_rate_fn(step) + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + metrics['max_grad_norm_preclip'] = (compute_max_norm(grad), 1) + if config.get('max_grad_norm', None) is not None: + grad = clip_grads(grad, config.max_grad_norm) + metrics['max_grad_norm_postclip'] = (compute_max_norm(grad), 1) + + new_optimizer = train_state.optimizer.apply_gradient(grad, learning_rate=lr) # pytype: disable=attribute-error + + # Explicit weight decay, if necessary. + if config.get('explicit_weight_decay', None) is not None: + new_optimizer = new_optimizer.replace( + target=optimizers.tree_map_with_names( + functools.partial( + optimizers.decay_weight_fn, + lr=lr, + decay=config.explicit_weight_decay), + new_optimizer.target, + match_name_fn=lambda name: 'kernel' in name)) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=step + 1, + optimizer=new_optimizer, + model_state=new_model_state, + rng=new_rng) + return new_train_state, metrics, lr + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and logits. + """ + variables = { + 'params': train_state.optimizer.target, # pytype: disable=attribute-error + **train_state.model_state + } + + # Compute the targets for feature regression. + compute_feature_targets(batch, config) + + # We need an rng for masking at test time. + # Note that we are using the same rng for the whole validation set (ie each + # batch will have the same token mask). + _, rng = jax.random.split(train_state.rng) + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + logits, token_mask = flax_model.apply( + variables, batch['inputs'], train=True, mutable=False, debug=debug, + rngs={'dropout': dropout_rng}) + metrics = metrics_fn(logits, token_mask, batch) + + return metrics, logits, token_mask, batch['targets'] + + +def get_image_grid( + targets: jnp.ndarray, predictions: jnp.ndarray, + token_mask: jnp.ndarray, config: ml_collections.ConfigDict, + target_modality: str, input_size: Optional[ + Union[Tuple[int, int, int], + Tuple[int, int, int, int]]] = None) -> Optional[jnp.ndarray]: + """Returns an image grid for summary writing.""" + + image_grid = None + + n_columns = config.masked_feature_loss.get('summary_num_columns', + 1) + if len(config.model.patches.size) == 2 or target_modality == 'spectrogram': + patch_size = tuple(config.model.patches.size[:2]) if ( + target_modality == 'spectrogram') else tuple(config.model.patches.size) + + image_grid = avmae_train_utils.generate_image_grid( + targets, predictions, token_mask, + patch_size, n_columns=n_columns, input_size=input_size, + modality=target_modality) + elif len(config.model.patches.size) == 3: + num_img_in_column = config.masked_feature_loss.get( + 'number_of_img_in_column', 16) + select_central_frame = config.masked_feature_loss.get( + 'select_central_frame', True) + + assert input_size is not None, 'Input size must be provided for video!' + + image_grid = avmae_train_utils.generate_image_grid_from_video( + targets, predictions, token_mask, + tuple(config.model.patches.size), + input_size, num_img_in_column=num_img_in_column, + select_central_frame=select_central_frame) + else: + raise ValueError( + 'The visualization is not implemented for' + f'{config.model.patches} patches!') + return image_grid + + +def representation_fn( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + representation_layer: str, + gather_to_host: bool = True +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Feeds the inputs to the model and returns their representations. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data from the dataset. + flax_model: A Flax model. + representation_layer: The name of the layer to use as the representation. + gather_to_host: Whether to gather results from all devices to the host, + rather than leaving them distributed. + + Returns: + Representation learned by the model for the given inputs and the labels and + masks. If `gather_to_host` is True, these are collected from all hosts. + """ + variables = { + 'params': train_state.optimizer.target, # pytype: disable=attribute-error + **train_state.model_state + } + + representation_layer_parts = representation_layer.split('/') + filter_rep = lambda mdl, _: mdl.name == representation_layer_parts[-1] + _, model_state = flax_model.apply( + variables, + batch['inputs'], + train=False, + capture_intermediates=filter_rep, + mutable=['intermediates'], + debug=False) + if 'intermediates' not in model_state: + raise ValueError(f'Layer with name "{representation_layer}"' + ' does not exist in your model.') + + representation = model_state['intermediates'] + for rep_layer in representation_layer_parts: + if rep_layer: + representation = representation[rep_layer] + representation = representation['__call__'][0] + + if representation.ndim == 3: + # Feature regression models return [batch, num_tokens, channels] + logging.info('Representation shape before pooling tokens: %s', + representation.shape) + representation = jnp.mean(representation, axis=1) + logging.info('Representation shape: %s', representation.shape) + + if gather_to_host: + representation = jax.lax.all_gather(representation, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return representation, batch['label'], batch['batch_mask'] + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter): + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current global_step, + model_state, rng, and the optimizer), train_summary and eval_summary which + are dict of metrics (from the last evaluation and train metric logging + respectively). These outputs are used for regression testing. + """ + + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + # Initialize model. + rng, params_init_rng, dropout_init_rng = jax.random.split(rng, num=3) + init_rngs = {'params': params_init_rng, 'dropout': dropout_init_rng} + input_spec_dict = {} + for key in config.dataset_configs.modalities: + input_spec = (dataset.meta_data['input_shape'][key], + dataset.meta_data['input_dtype'][key]) + input_spec_dict[key] = input_spec + + (params, model_state, num_trainable_params, + gflops) = initialize_model( + model_def=model.flax_model, + input_spec_dict=input_spec_dict, + config=config, + rngs=init_rngs, + is_train=True) + + # Create optimizer. + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + optimizer = jax.jit( + optimizers.get_optimizer(config).create, backend='cpu')( + params) + rng, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + optimizer=optimizer, + model_state=model_state, + rng=train_rng, + accum_train_time=0) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + logging.info('Parameter summary after restoring checkpoint') + debug_utils.log_param_shapes(train_state.optimizer.target) # pytype: disable=attribute-error + + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + # Load params from the init_model. + train_state = model.init_from_train_state( # pytype: disable=attribute-error + train_state, restored_train_state, restored_model_cfg) + logging.info('Parameter summary after adapting pretrained checkpoint.') + debug_utils.log_param_shapes(train_state.optimizer.target) + del restored_train_state + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + # Get learning rate scheduler. + learning_rate_fn = lr_schedules.get_learning_rate_fn(config) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + learning_rate_fn=learning_rate_fn, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + config=config, + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + def evaluate(train_state: train_utils.TrainState, step: int, + valid_iter: Iterator[Batch], + num_valid_ex: int) -> Dict[str, Any]: + eval_summary = {} + image_summary = {} + if not isinstance(valid_iter, dict): # Only on validation set. + valid_iter, num_valid_ex = {'valid': valid_iter}, {'valid': num_valid_ex} + + for val_name, val_iter in valid_iter.items(): + num_ex = num_valid_ex[val_name] + # Ceil rounding such that we include the last incomplete batch. + total_eval_steps = int(np.ceil(num_ex / config.batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + eval_metrics = [] + for iteration in range(steps_per_eval): + eval_batch = next(val_iter) + if dataset.meta_data['target_is_onehot']: # Which includes multi-hot. + # Ignore the entries with all zero label for evaluation. + eval_batch['batch_mask'] *= eval_batch['label'].max(axis=-1) + e_metrics, predictions, token_mask, targets = eval_step_pmapped( + train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + + if iteration == 0: + for key in eval_batch['inputs'].keys(): # pytype: disable=attribute-error # jax-ndarray + input_size = eval_batch['inputs'][key].shape[2:] + unreplicate = jax_utils.unreplicate + image_grid = get_image_grid( + unreplicate(targets[key]), unreplicate(predictions[key]), + unreplicate(token_mask[key]), config, + target_modality=key, input_size=input_size) + + if image_grid is not None: + image_summary[f'valid/reconstruction_{key}'] = ( + jax.device_get(image_grid)) + + del predictions + del token_mask + del targets + eval_summary.update( + train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + writer=writer, + key_separator='/', + prefix=val_name)) + del eval_metrics + if image_summary: + writer.write_images(step, image_summary) + writer.flush() + return eval_summary + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono = train_utils.Chrono( + first_step=start_step, + total_steps=total_steps, + steps_per_epoch=steps_per_epoch, + global_bs=config.batch_size, + accum_train_time=int(jax_utils.unreplicate(train_state.accum_train_time))) + + logging.info('Starting training loop at step %d for %d steps', + start_step, total_steps) + + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + + + train_state, t_metrics, lr = train_step_pmapped(train_state, train_batch) + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + extra_training_logs.append({'learning_rate': lr}) + + # Quick indication that training is happening. + logging.log_first_n(logging.INFO, 'Finished training step %d.', 5, step) + for h in hooks: + h(step) + + chrono.pause() # Below are once-in-a-while ops -> pause. + ############### LOG TRAIN SUMMARY ############### + if (step % log_summary_steps == 1) or (step == total_steps): + if lead_host: + chrono.tick(step, writer=writer) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, extra_training_logs), + key_separator='/', + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + # Sync model state across replicas. + with report_progress.timed('eval'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summary = evaluate(train_state, step, dataset.valid_iter, + dataset.meta_data['num_eval_examples']) + + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 1) or + (step == total_steps)) and config.checkpoint: + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + train_state.replace( # pytype: disable=attribute-error + accum_train_time=chrono.accum_train_time) + train_utils.save_checkpoint(workdir, train_state) + + chrono.resume() # Un-pause now. + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/av_mae/transfer_trainer.py b/scenic/projects/av_mae/transfer_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..6a6a34e75dbd8c162496cf694bcd9cfe44fdc0f3 --- /dev/null +++ b/scenic/projects/av_mae/transfer_trainer.py @@ -0,0 +1,610 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script.""" + +import copy +import functools +from typing import Any, Callable, Dict, Iterator, Optional, Tuple, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.common_lib import debug_utils +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.av_mae import optimizer_utils +from scenic.projects.av_mae import train_utils as avmae_train_utils +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils +from scenic.train_lib.transfer import fewshot_utils + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, and optimizer. The buffer of this argument can be + donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, computed metrics, and learning rate for logging. + """ + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = avmae_train_utils.mixup_cutmix( + batch, + mixup_rng, + config.mixup.alpha, + cutmix_alpha=config.mixup.get('cutmix_alpha', 0.), + switch_prob=config.mixup.get('cutmix_switch_prob', 0.5), + label_smoothing=config.mixup.get('label_smoothing', 0.0)) + + # Bind the dropout rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + logits, new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params']) + return loss, (new_model_state, logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (_, (new_model_state, + logits)), grad = compute_gradient_fn(train_state.params) + + metrics = metrics_fn(logits, batch) + + if not config.get('grad_clip_after_pmean', True): + metrics['max_grad_norm_preclip_before_pmean'] = ( + avmae_train_utils.compute_max_norm(grad), 1) + if config.get('max_grad_norm', None) is not None: + grad = clip_grads(grad, config.max_grad_norm) + metrics['max_grad_norm_postclip_before_pmean'] = ( + avmae_train_utils.compute_max_norm(grad), 1) + + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('grad_clip_after_pmean', True): + metrics['max_grad_norm_preclip_after_pmean'] = ( + avmae_train_utils.compute_max_norm(grad), 1) + if config.get('max_grad_norm', None) is not None: + grad = clip_grads(grad, config.max_grad_norm) + metrics['max_grad_norm_postclip_after_pmean'] = ( + avmae_train_utils.compute_max_norm(grad), 1) + + # We no longer perform explicit weight decay here. This can be added + # as an Optax gradient transformation if necessary. Or one can also use + # AdamW instead of Adam. + updates, new_opt_state = train_state.tx.update(grad, train_state.opt_state, # pytype: disable=attribute-error + train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + # Log additional statistics. These are the L2 norms of the entire flattened + # vector. + metrics['l2_grads'] = (jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)])), 1) + metrics['l2_params'] = (jnp.sqrt( + sum([jnp.vdot(p, p) for p in jax.tree_util.tree_leaves(new_params)])), 1) + metrics['l2_updates'] = (jnp.sqrt( + sum([jnp.vdot(u, u) for u in jax.tree_util.tree_leaves(updates)])), 1) + + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + return new_train_state, metrics # pytype: disable=bad-return-type # jax-types + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], jnp.ndarray]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and logits. + """ + variables = { + 'params': train_state.params, + **train_state.model_state + } + logits = flax_model.apply( + variables, batch['inputs'], train=False, mutable=False, debug=debug) + metrics = metrics_fn(logits, batch) + return metrics, logits + + +def representation_fn( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + representation_layer: str, + gather_to_host: bool = True +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Feeds the inputs to the model and returns their representations. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data from the dataset. + flax_model: A Flax model. + representation_layer: The name of the layer to use as the representation. + gather_to_host: Whether to gather results from all devices to the host, + rather than leaving them distributed. + + Returns: + Representation learned by the model for the given inputs and the labels and + masks. If `gather_to_host` is True, these are collected from all hosts. + """ + variables = { + 'params': train_state.params, + **train_state.model_state + } + + representation_layer_parts = representation_layer.split('/') + filter_rep = lambda mdl, _: mdl.name == representation_layer_parts[-1] + _, model_state = flax_model.apply( + variables, + batch['inputs'], + train=False, + capture_intermediates=filter_rep, + mutable=['intermediates'], + debug=False) + if 'intermediates' not in model_state: + raise ValueError(f'Layer with name "{representation_layer}"' + ' does not exist in your model.') + + representation = model_state['intermediates'] + for rep_layer in representation_layer_parts: + if rep_layer: + representation = representation[rep_layer] + representation = representation['__call__'][0] + if gather_to_host: + representation = jax.lax.all_gather(representation, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return representation, batch['label'], batch['batch_mask'] + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter): + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current global_step, + model_state, rng, and the optimizer), train_summary and eval_summary which + are dict of metrics (from the last evaluation and train metric logging + respectively). These outputs are used for regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + if 'layerwise_decay' in config.optimizer_configs: + tx = optimizer_utils.optimizer_with_layerwise_decay(config, params) + else: + optimizer_config = optimizers.get_optax_optimizer_config(config) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params) + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + # Create Chrono ojbect to track and store training statistics and metadata. + chrono = train_utils.Chrono() + + rng, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + logging.info('Parameter summary after restoring checkpoint') + debug_utils.log_param_shapes(train_state.params) + + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + + if init_checkpoint_path is not None: + checkpoint_format = config.init_from.get('checkpoint_format', 'scenic') + if checkpoint_format == 'scenic': + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + elif checkpoint_format == 'big_vision': + restored_train_state = ( + pretrain_utils.convert_big_vision_to_scenic_checkpoint( # pylint: disable=g-line-too-long + init_checkpoint_path, train_state + ) + ) + # Config dict in big_vision is not the same format as scenic. + # Therefore, make sure config match the config of the loaded model! + restored_model_cfg = copy.deepcopy(config) + # The following is needed when the restored and target models used a + # different classifier. As big_vision uses a different config dict, we + # have to specify this manually. + restored_model_cfg.model.classifier = config.init_from.get( + 'classifier_type', 'token') + + train_state = model.init_from_train_state(train_state, # pytype: disable=attribute-error + restored_train_state, + restored_model_cfg) + # Free unnecessary memory. + del restored_train_state + logging.info('Parameters after initialising weights from checkpoint.') + debug_utils.log_param_shapes(train_state.params) + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + + if 'fewshot' in config: + repr_fn = functools.partial( + representation_fn, + flax_model=model.flax_model, + representation_layer=config.fewshot.representation_layer) + + if config.model_name.startswith('mvit'): + is_2d_model = len(config.model.patch_size) == 2 + else: + is_2d_model = len(config.model.patches.size) == 2 + + if is_2d_model: + fewshotter = fewshot_utils.FewShotEvaluator(repr_fn, config.fewshot) + else: + fewshotter = fewshot_utils.FewShotEvaluatorVideo(repr_fn, config.fewshot) + + if config.get('dataset_configs', dict()).get('do_multicrop_test', False): + log_test_steps = int( + steps_per_epoch * config.dataset_configs.log_test_epochs) + + test_step_pmapped = jax.pmap( + functools.partial( + avmae_train_utils.test_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('test'), + n_clips=config.get('multicrop_clips_per_device', 2), + debug=config.debug_eval), + axis_name='batch', + # We can donate the test_batch's buffer. + donate_argnums=(1,), + ) + + if config.dataset_configs.test_batch_size != jax.local_device_count(): + raise ValueError( + 'The per-host batch size must be equal to the number of local devices' + 'This ensures that each TPU device is processing different views of' + 'the same original video. Got ' + f'{config.dataset_configs.test_batch_size} vs' + f'{jax.local_device_count()}.') + + total_test_steps = int( + np.ceil(dataset.meta_data['num_test_examples'] / + (config.get('dataset_configs.test_batch_size') * + config.get('dataset_configs.num_test_clips') * + jax.process_count()))) + steps_per_test = config.get('steps_per_test') or total_test_steps + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + def evaluate(train_state: train_utils.TrainState, step: int, + valid_iter: Iterator[Batch], + num_valid_ex: int) -> Dict[str, Any]: + eval_summary = {} + if not isinstance(valid_iter, dict): # Only on validation set. + valid_iter, num_valid_ex = {'valid': valid_iter}, {'valid': num_valid_ex} + + for val_name, val_iter in valid_iter.items(): + num_ex = num_valid_ex[val_name] + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int(np.ceil(num_ex / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + eval_metrics = [] + for _ in range(steps_per_eval): + eval_batch = next(val_iter) + if dataset.meta_data['target_is_onehot']: # Which includes multi-hot. + # Ignore the entries with all zero label for evaluation. + eval_batch['batch_mask'] *= eval_batch['label'].max(axis=-1) + e_metrics, _ = eval_step_pmapped(train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + eval_summary.update( + train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + writer=writer, + prefix=val_name)) + del eval_metrics + writer.flush() + return eval_summary + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step) + + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics = train_step_pmapped(train_state, train_batch) + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + extra_training_logs.append({'learning_rate': lr_fn(step)}) + + # Quick indication that training is happening. + logging.log_first_n(logging.INFO, 'Finished training step %d.', 5, step) + for h in hooks: + h(step) + + ############### LOG TRAIN SUMMARY ############### + if ((step % log_summary_steps == 1) or (step == total_steps) or + (chrono.warmup and lead_host)): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, avmae_train_utils.log_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=extra_training_logs, + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summary = evaluate(train_state, step, dataset.valid_iter, + dataset.meta_data['num_eval_examples']) + chrono.resume() + + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 1 and step > 1) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + train_utils.handle_checkpointing(train_state, chrono, workdir) + chrono.resume() + + ##################### FEWSHOT EVALUATION ############################ + if 'fewshot' in config: + # Compute few-shot on-the-fly evaluation. + if (step % config.fewshot.log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('fewshot'): + results = fewshotter.run_all(train_state, config.fewshot.datasets) + fewshotter.log_fewshot_summary( + writer=writer, step=step, results=results) + del results + writer.write_scalars(step, {'zz/epoch': step / steps_per_epoch}) + writer.flush() + chrono.resume() + + ############# MULTICROP TESTING ############################ + if (config.get('dataset_configs', dict()).get('do_multicrop_test') and + ((step % log_test_steps == 1) or step == total_steps)): + + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('checkpoint'): + test_metrics = [] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + + # At the end of training, evaluate on the whole test set. + if step == total_steps: + steps_per_test = total_test_steps + + logging.info('Starting multicrop test') + for _ in range(steps_per_test): + test_batch = next(dataset.test_iter) + t_metrics = test_step_pmapped(train_state, test_batch) + # Fetch t_metrics to host and store. + test_metrics.append(train_utils.unreplicate_and_get(t_metrics)) + # Log eval summary. + train_utils.log_eval_summary( + step=step, + eval_metrics=test_metrics, + writer=writer, + prefix='test') + logging.info('Completed multicrop test') + del test_metrics + writer.flush() + chrono.resume() + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + logging.info('Parameter summary after completing training.') + debug_utils.log_param_shapes(train_state.params) + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/av_mae/transfer_trainer_multimodal.py b/scenic/projects/av_mae/transfer_trainer_multimodal.py new file mode 100644 index 0000000000000000000000000000000000000000..99caa9b702965d77acc26a14faae5039b64504e9 --- /dev/null +++ b/scenic/projects/av_mae/transfer_trainer_multimodal.py @@ -0,0 +1,741 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script.""" + +import copy +import functools +from typing import Any, Callable, Dict, Iterator, Optional, Tuple, Type, Union + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.common_lib import debug_utils +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.av_mae import evaluation_lib +from scenic.projects.av_mae import optimizer_utils +from scenic.projects.av_mae import train_utils as avmae_train_utils +from scenic.projects.av_mae import trainer_multimodal +from scenic.projects.vivit import train_utils as vivit_train_utils +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils +from scenic.train_lib.transfer import fewshot_utils + + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, and optimizer. The buffer of this argument can be + donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, computed metrics, and learning rate for logging. + """ + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + image_format = config.mixup.get('image_format', 'NTHWC') + batch_first = True + if image_format.index('N') > 0: + batch_first = False + batch = avmae_train_utils.mixup_modalities( + batch, + config.mixup.alpha, + batch_first, + mixmod=config.get('mixmod', False), + rng=mixup_rng) + else: + # No mixup is applied, all modalities share the same labels. + if config.get('labels_as_dict', True): + labels = batch['label'] + batch['label'] = {} # pytype: disable=container-type-mismatch # jax-ndarray + for modality in batch['inputs']: + batch['label'][modality] = labels + batch['label']['all'] = labels + + # Bind the dropout rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + logits, new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params']) + return loss, (new_model_state, logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (_, (new_model_state, + logits)), grad = compute_gradient_fn(train_state.params) + + if isinstance(logits, dict): + # Necessary for MBT. + # We use the first retrieved logits to report training metrics. + modality = list(logits.keys())[0] + batch['label'] = batch['label'][modality] + metrics = metrics_fn(logits[modality], batch) + else: + metrics = metrics_fn(logits, batch) + + if not config.get('grad_clip_after_pmean', True): + metrics['max_grad_norm_preclip_before_pmean'] = ( + avmae_train_utils.compute_max_norm(grad), 1) + if config.get('max_grad_norm', None) is not None: + grad = clip_grads(grad, config.max_grad_norm) + metrics['max_grad_norm_postclip_before_pmean'] = ( + avmae_train_utils.compute_max_norm(grad), 1) + + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('grad_clip_after_pmean', True): + metrics['max_grad_norm_preclip_after_pmean'] = ( + avmae_train_utils.compute_max_norm(grad), 1) + if config.get('max_grad_norm', None) is not None: + grad = clip_grads(grad, config.max_grad_norm) + metrics['max_grad_norm_postclip_after_pmean'] = ( + avmae_train_utils.compute_max_norm(grad), 1) + + # We no longer perform explicit weight decay here. This can be added + # as an Optax gradient transformation if necessary. Or one can also use + # AdamW instead of Adam. + updates, new_opt_state = train_state.tx.update(grad, train_state.opt_state, # pytype: disable=attribute-error + train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + # Log additional statistics. These are the L2 norms of the entire flattened + # vector. + metrics['l2_grads'] = (jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)])), 1) + metrics['l2_params'] = (jnp.sqrt( + sum([jnp.vdot(p, p) for p in jax.tree_util.tree_leaves(new_params)])), 1) + metrics['l2_updates'] = (jnp.sqrt( + sum([jnp.vdot(u, u) for u in jax.tree_util.tree_leaves(updates)])), 1) + + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + return new_train_state, metrics # pytype: disable=bad-return-type # jax-types + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + return_logits_and_labels: bool = False, + debug: Optional[bool] = False, +) -> Union[ + Tuple[Dict[str, Tuple[float, int]], jnp.ndarray, jnp.ndarray], + Tuple[Dict[str, Tuple[float, int]], jnp.ndarray], +]: + """Runs a single step of validation. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + return_logits_and_labels: If true, returns logits and labels. Can be used + for calculating mean Average Precision for multi-label problems. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and logits. + """ + variables = { + 'params': train_state.params, + **train_state.model_state + } + logits = flax_model.apply( + variables, batch['inputs'], train=False, mutable=False, debug=debug) + metrics = metrics_fn(logits, batch) + # Here we have validation metrics computed on a single batch of data but + # mAP is computed over the entire eval set. So we + # 1) Gather & return logits and labels from all hosts for the sharded + # global batch in this eval_step, + # 2) Repeat for N global batches (eval_steps) needed to traverse the eval set, + # 3) Once we gathered logits and labels for the entire eval set, compute mAP. + if return_logits_and_labels: + logits = jax.lax.all_gather(logits, 'batch') + labels = jax.lax.all_gather(batch['label'], 'batch') + return metrics, logits, labels + return metrics, logits + + +def representation_fn( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + representation_layer: str, + gather_to_host: bool = True +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Feeds the inputs to the model and returns their representations. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data from the dataset. + flax_model: A Flax model. + representation_layer: The name of the layer to use as the representation. + gather_to_host: Whether to gather results from all devices to the host, + rather than leaving them distributed. + + Returns: + Representation learned by the model for the given inputs and the labels and + masks. If `gather_to_host` is True, these are collected from all hosts. + """ + variables = { + 'params': train_state.params, + **train_state.model_state + } + + representation_layer_parts = representation_layer.split('/') + filter_rep = lambda mdl, _: mdl.name == representation_layer_parts[-1] + _, model_state = flax_model.apply( + variables, + batch['inputs'], + train=False, + capture_intermediates=filter_rep, + mutable=['intermediates'], + debug=False) + if 'intermediates' not in model_state: + raise ValueError(f'Layer with name "{representation_layer}"' + ' does not exist in your model.') + + representation = model_state['intermediates'] + for rep_layer in representation_layer_parts: + if rep_layer: + representation = representation[rep_layer] + representation = representation['__call__'][0] + if gather_to_host: + representation = jax.lax.all_gather(representation, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return representation, batch['label'], batch['batch_mask'] + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter): + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current global_step, + model_state, rng, and the optimizer), train_summary and eval_summary which + are dict of metrics (from the last evaluation and train metric logging + respectively). These outputs are used for regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + is_multilabel_model = config.model_name in { + 'vit_multilabel_classification_mae', 'vit_multilabel_classification', + 'vivit_multimodal_multilabel_classification', + 'mbt_multilabel_classification' + } + logging.info('is_multilabel_model: %s', is_multilabel_model) + + # Initialize model. + rng, params_init_rng, dropout_init_rng = jax.random.split(rng, num=3) + init_rngs = {'params': params_init_rng, 'dropout': dropout_init_rng} + input_spec_dict = {} + for key in config.dataset_configs.modalities: + if isinstance(dataset.meta_data['input_dtype'], dict): + dtype = dataset.meta_data['input_dtype'][key] + else: + dtype = dataset.meta_data['input_dtype'] + input_spec = (dataset.meta_data['input_shape'][key], dtype) + input_spec_dict[key] = input_spec + + (params, model_state, num_trainable_params, + gflops) = trainer_multimodal.initialize_model( + model_def=model.flax_model, + input_spec_dict=input_spec_dict, + config=config, + rngs=init_rngs, + is_train=True) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + if 'layerwise_decay' in config.optimizer_configs: + tx = optimizer_utils.optimizer_with_layerwise_decay(config, params) + else: + optimizer_config = optimizers.get_optax_optimizer_config(config) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params) + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + # Create Chrono ojbect to track and store training statistics and metadata. + chrono = train_utils.Chrono() + + rng, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + logging.info('Parameter summary after restoring checkpoint') + debug_utils.log_param_shapes(train_state.params) + + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + + if init_checkpoint_path is not None: + checkpoint_format = config.init_from.get('checkpoint_format', 'scenic') + if checkpoint_format == 'scenic': + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + elif checkpoint_format == 'big_vision': + restored_train_state = ( + pretrain_utils.convert_big_vision_to_scenic_checkpoint( # pylint: disable=g-line-too-long + init_checkpoint_path, train_state + ) + ) + # Config dict in big_vision is not the same format as scenic. + # Therefore, make sure config match the config of the loaded model! + restored_model_cfg = copy.deepcopy(config) + # The following is needed when the restored and target models used a + # different classifier. As big_vision uses a different config dict, we + # have to specify this manually. + restored_model_cfg.model.classifier = config.init_from.get( + 'classifier_type', 'token') + + train_state = model.init_from_train_state(train_state, # pytype: disable=attribute-error + restored_train_state, + restored_model_cfg) + # Free unnecessary memory. + del restored_train_state + logging.info('Parameters after initialising weights from checkpoint.') + debug_utils.log_param_shapes(train_state.params) + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + return_logits_and_labels=is_multilabel_model, + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + + if 'fewshot' in config: + repr_fn = functools.partial( + representation_fn, + flax_model=model.flax_model, + representation_layer=config.fewshot.representation_layer) + + if config.model_name.startswith('mvit'): + is_2d_model = len(config.model.patch_size) == 2 + else: + is_2d_model = len(config.model.patches.size) == 2 + + if is_2d_model: + fewshotter = fewshot_utils.FewShotEvaluator(repr_fn, config.fewshot) + else: + fewshotter = fewshot_utils.FewShotEvaluatorVideo(repr_fn, config.fewshot) + + if config.dataset_configs.get('do_multicrop_test'): + log_test_steps = int( + steps_per_epoch * config.dataset_configs.log_test_epochs) + + test_step_pmapped = jax.pmap( + functools.partial( + avmae_train_utils.test_step_multimodal, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('test'), + n_clips=config.get('multicrop_clips_per_device', 2), + return_logits_and_labels=is_multilabel_model, + debug=config.debug_eval), + axis_name='batch', + # We can donate the test_batch's buffer. + donate_argnums=(1,), + ) + + if config.dataset_configs.test_batch_size != jax.local_device_count(): + raise ValueError( + 'The per-host batch size must be equal to the number of local devices' + 'This ensures that each TPU device is processing different views of' + 'the same original video. Got ' + f'{config.dataset_configs.test_batch_size} vs' + f'{jax.local_device_count()}.') + + total_test_steps = int( + np.ceil(dataset.meta_data['num_test_examples'] / + (config.get('dataset_configs.test_batch_size') * + config.get('dataset_configs.num_test_clips') * + jax.process_count()))) + steps_per_test = config.get('steps_per_test') or total_test_steps + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + def evaluate(train_state: train_utils.TrainState, step: int, + valid_iter: Iterator[Batch], + num_valid_ex: int, + compute_map: bool = False) -> Dict[str, Any]: + """Perform validation and log results, possibly including mAP. + """ + + eval_summary = {} + if not isinstance(valid_iter, dict): # Only on validation set. + valid_iter, num_valid_ex = {'valid': valid_iter}, {'valid': num_valid_ex} + + for val_name, val_iter in valid_iter.items(): + num_ex = num_valid_ex[val_name] + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int(np.ceil(num_ex / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + eval_metrics = [] + additional_summary = None + if compute_map: + eval_logits = [] + eval_labels = [] + n_classes = dataset.meta_data['num_classes'] + + for _ in range(steps_per_eval): + eval_batch = next(val_iter) + if dataset.meta_data['target_is_onehot']: # Which includes multi-hot. + # Ignore the entries with all zero label for evaluation. + eval_batch['batch_mask'] *= eval_batch['label'].max(axis=-1) + + # Compute validation metrics. + if not compute_map: + # only keep metrics + e_metrics, _ = eval_step_pmapped(train_state, eval_batch) + else: + # return metrics, logits, labels + e_metrics = eval_step_pmapped(train_state, eval_batch) + e_metrics, logits_batch, labels_batch = e_metrics + # Outcome of jax.lax.all_gather: all logits & labels from all hosts + # for eval_batch in current evaluation step. + # shape: (cores_per_host, n_devices, batch_size per device, n_classes) + + # Return a single instance of a replicated array, reshape to one + # global batch, and transfer to host, where all global batches will be + # concatenated for mAP computation. + logits_batch_in_cpu = vivit_train_utils.to_cpu(logits_batch) + labels_batch_in_cpu = vivit_train_utils.to_cpu(labels_batch) + eval_logits.append(logits_batch_in_cpu) + eval_labels.append(labels_batch_in_cpu) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + + if compute_map: + # Once traversed the entire validation set, compute mAP. + additional_summary = evaluation_lib.compute_mean_avg_precision_dprime( + np.concatenate(eval_logits, axis=0), + np.concatenate(eval_labels, axis=0), + return_per_class_ap=n_classes < 10) + + eval_summary.update( + train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + extra_eval_summary=additional_summary, + writer=writer, + key_separator='/', + prefix=val_name)) + del eval_metrics + writer.flush() + return eval_summary + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step) + + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + + + train_state, t_metrics = train_step_pmapped(train_state, train_batch) + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + extra_training_logs.append({'learning_rate': lr_fn(step)}) + + # Quick indication that training is happening. + logging.log_first_n(logging.INFO, 'Finished training step %d.', 5, step) + for h in hooks: + h(step) + + ############### LOG TRAIN SUMMARY ############### + if ((step % log_summary_steps == 1) or (step == total_steps) or + (chrono.warmup and lead_host)): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, avmae_train_utils.log_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=extra_training_logs, + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + logging.info('Starting validation') + eval_summary = evaluate(train_state, step, dataset.valid_iter, + dataset.meta_data['num_eval_examples'], + is_multilabel_model) + chrono.resume() + + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 1 and step > 1) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + train_utils.handle_checkpointing(train_state, chrono, workdir) + chrono.resume() + + ##################### FEWSHOT EVALUATION ############################ + if 'fewshot' in config: + # Compute few-shot on-the-fly evaluation. + if (step % config.fewshot.log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('fewshot'): + results = fewshotter.run_all(train_state, config.fewshot.datasets) + fewshotter.log_fewshot_summary( + writer=writer, step=step, results=results) + del results + writer.write_scalars(step, {'zz/epoch': step / steps_per_epoch}) + writer.flush() + chrono.resume() + + ############# MULTICROP TESTING ############################ + if (config.dataset_configs.get('do_multicrop_test') and + ((step % log_test_steps == 1) or step == total_steps)): + + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('test'): + test_metrics = [] + additional_summary = None + if is_multilabel_model: + all_test_logits, all_test_labels = [], [] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + + # At the end of training, evaluate on the whole test set. + if step == total_steps: + steps_per_test = total_test_steps + + logging.info('Starting multicrop test') + for _ in range(steps_per_test): + test_batch = next(dataset.test_iter) + + if not is_multilabel_model: + # Only keep metrics. + t_metrics = test_step_pmapped(train_state, test_batch) + else: + # Return metrics, logits, labels. + t_metrics, t_logits, t_labels = test_step_pmapped( + train_state, test_batch) + # This should return n_classes logits and labels for each eval clip, + # with N eval clips as we run in N devices in parallel. + t_logits_in_cpu = vivit_train_utils.to_cpu(t_logits) + t_labels_in_cpu = vivit_train_utils.to_cpu(t_labels) + all_test_logits.append(t_logits_in_cpu) + all_test_labels.append(t_labels_in_cpu) + + # Fetch t_metrics to host and store. + test_metrics.append(train_utils.unreplicate_and_get(t_metrics)) + + if is_multilabel_model: + # Once traversed the entire eval set, compute mAP. + all_test_logits_concat = np.concatenate(all_test_logits, axis=0) + all_test_labels_concat = np.concatenate(all_test_labels, axis=0) + additional_summary = evaluation_lib.compute_mean_avg_precision_dprime( + all_test_logits_concat, + all_test_labels_concat, + return_per_class_ap=dataset.meta_data['num_classes'] < 10) + + # Log eval summary. + train_utils.log_eval_summary( + step=step, + eval_metrics=test_metrics, + extra_eval_summary=additional_summary, + writer=writer, + key_separator='/', + prefix='test') + logging.info('Completed multicrop test') + del test_metrics + writer.flush() + chrono.resume() + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + logging.info('Parameter summary after completing training.') + # Object train_state is replicated for each TPU core. + unrep_train_state = jax_utils.unreplicate(train_state) + debug_utils.log_param_shapes(unrep_train_state.params) + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/av_mae/vit.py b/scenic/projects/av_mae/vit.py new file mode 100644 index 0000000000000000000000000000000000000000..8d7540fc6aa26ed88f817c2a39eca15340a27761 --- /dev/null +++ b/scenic/projects/av_mae/vit.py @@ -0,0 +1,546 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Vision Transformer.""" + +from typing import Any, Callable, Optional, Sequence + +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections + +from scenic.model_lib.base_models import classification_model +from scenic.model_lib.base_models import multilabel_classification_model +from scenic.model_lib.layers import attention_layers +from scenic.model_lib.layers import nn_layers +from scenic.projects.av_mae import base_model +from scenic.projects.av_mae import model_utils +from scenic.projects.baselines import vit + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +class ViT(nn.Module): + """Vision Transformer model. + + This differs from scenic.projects.baselines.vit in that + -- Positional embeddings are added before the transformer block. This makes + it easier to load MAE-pretrained checkpoints. + -- The CLS token is added after the positional embeddings. This follows MAE. + -- Add support for linear evaluation by adding a stop-gradient. + + Attributes: + num_classes: Number of output classes. + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + positional_embedding: The type of positional embeddings to add to the + tokens at the beginning of the transformer encoder. Options are + {learned_1d, sinusoidal_2d, none}. + representation_size: Size of the representation layer in the model's head. + if None, we skip the extra projection + tanh activation at the end. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token', 'none'. + freeze_backbone: If True, add a stop-gradient before the final + classifier to only evaluate linear evaluation performance. + use_batch_norm_after_encoder: Only applies when the backbone is frozen. + In this case, an additional batch normalisation layer is applied before + the linear classifier. This was done in MAE + (https://arxiv.org/abs/2111.06377). + dtype: JAX data type for activations. + """ + + num_classes: int + mlp_dim: int + num_layers: int + num_heads: int + patches: ml_collections.ConfigDict + hidden_size: int + positional_embedding: str = 'learned_1d' + representation_size: Optional[int] = None + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + classifier: str = 'gap' + freeze_backbone: bool = False + use_batch_norm_after_encoder: bool = True + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, debug: bool = False): + + fh, fw = self.patches.size + # Extracting patches and then embedding is in fact a single convolution. + x = nn.Conv( + self.hidden_size, (fh, fw), + strides=(fh, fw), + padding='VALID', + name='embedding')( + x) + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + + # Add positional embeddings to tokens. + if self.positional_embedding == 'learned_1d': + x = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name='posembed_input')(x) + elif self.positional_embedding == 'sinusoidal_1d': + x = attention_layers.Add1DPositionEmbedding(posemb_init=None)(x) + elif self.positional_embedding == 'sinusoidal_2d': + x_reshape = x.reshape([n, h, w, c]) + x = attention_layers.AddFixedSinCosPositionEmbedding()(x_reshape) + x = jnp.reshape(x, [n, h * w, c]) + elif self.positional_embedding == 'none': + pass + else: + raise ValueError('Unknown positional embedding: ' + f'{self.positional_embedding}') + + # If we want to add a class token, add it here. + if self.classifier == 'token': + cls = self.param('cls', nn.initializers.zeros, (1, 1, c), x.dtype) + cls = jnp.tile(cls, [n, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + + x = vit.Encoder( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + positional_embedding='none', + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=self.stochastic_depth, + dtype=self.dtype, + name='Transformer')( + x, train=train) + + if self.classifier in ('token', '0'): + x = x[:, 0] + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=1) + elif self.classifier == 'none': + pass + else: + raise ValueError(f'Unknown classifier {self.classifier}') + + if self.representation_size is not None: + x = nn.Dense(self.representation_size, name='pre_logits')(x) + x = nn.tanh(x) + else: + x = nn_layers.IdentityLayer(name='pre_logits')(x) + + if self.freeze_backbone: + x = jax.lax.stop_gradient(x) + + if self.use_batch_norm_after_encoder: + x = nn.BatchNorm( + # Match PyTorch default and MAE PyTorch code + # https://github.com/facebookresearch/mae/blob/efb2a8062c206524e35e47d04501ed4f544c0ae8/main_linprobe.py#L222 + momentum=0.9, + epsilon=1e-6, + use_bias=False, + use_scale=False, + )(x, use_running_average=not train) + + if self.num_classes > 0: + # If self.num_classes <= 0, we just return the backbone features. + x = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x) + return x + + +class ViTMaskedAutoencoder(nn.Module): + """Vision Transformer model for masked-autoencoding. + + The differences to `scenic.baselines.vit` are that: + -- Remove masked tokens from the encoder. + -- Process all tokens with the decoder. + + Attributes: + num_classes: Number of output classes. + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + token_mask_probability: Probability of masking out the input tokens (with + a learned mask token) during training. + representation_size: Size of the representation layer in the model's head. + if None, we skip the extra projection + tanh activation at the end. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_depth: Probability of dropping out a layer during training. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + dtype: JAX data type for activations. + """ + + num_classes: int + mlp_dim: int + num_layers: int + num_heads: int + patches: ml_collections.ConfigDict + hidden_size: int + token_mask_probability: float + decoder_config: ml_collections.ConfigDict + representation_size: Optional[int] = None + positional_embedding: str = 'sinusoidal_1d' + positional_embedding_decoder: str = 'sinusoidal_1d' + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + classifier: str = 'gap' + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, train: bool, debug: bool = False): + """Forward pass of Vision Transformer.""" + + # Extracting patches and embed via a convolution. + fh, fw = self.patches.size + x_tokens = nn.Conv( + self.hidden_size, (fh, fw), + strides=(fh, fw), + padding='VALID', + name='embedding')(inputs) + n_batch, height, width, channels = x_tokens.shape + n_tokens = height * width + x_tokens = jnp.reshape(x_tokens, [n_batch, n_tokens, channels]) + + # Add positional encodings. + x_tokens = model_utils.add_positional_embeddings( + x_tokens, self.positional_embedding, [n_batch, height, width, channels]) + + if train: + # Generate mask indices. + n_masked = int(self.token_mask_probability * n_tokens) + mask_indices, unmasked_indices, token_mask = model_utils.get_mask_indices( + n_batch, n_tokens, n_masked, self.make_rng('dropout')) + + # Process only unmasked tokens with the encoder. + batch_indices = jnp.arange(n_batch).reshape(n_batch, 1) + x_unmasked = x_tokens[batch_indices, unmasked_indices] + else: + x_unmasked = x_tokens + token_mask = jnp.zeros((n_batch, n_tokens)) + + # If we want to add a class token, add it here. + # Note that in MAE, positional encodings are not added to the CLS token. + if self.classifier == 'token': + cls = self.param('cls', nn.initializers.zeros, + (1, 1, channels), x_unmasked.dtype) + cls = jnp.tile(cls, [n_batch, 1, 1]) + x_unmasked = jnp.concatenate([cls, x_unmasked], axis=1) + + x_unmasked_encoded = vit.Encoder( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=self.stochastic_depth, + dtype=self.dtype, + positional_embedding='none', # Has already been added. + name='Transformer')( + x_unmasked, train=train) + + if not train: + x_representation = nn_layers.IdentityLayer(name='representation')( + x_unmasked_encoded) + return x_representation, token_mask + + # Process entire sequence with the decoder. + mask_token = self.param('mask_token', + nn.initializers.zeros, + (1, 1, self.decoder_config.hidden_size)) + + x_unmasked_proj = nn.Dense( + self.decoder_config.hidden_size, + kernel_init=nn.initializers.xavier_uniform(), + name='decoder_projection')(x_unmasked_encoded) + if self.classifier == 'token': + cls_encoded = x_unmasked_proj[:, :1, :] + x_unmasked_proj = x_unmasked_proj[:, 1:, :] + + # This effectively "unshuffles" the tokens. This means that we can simply + # add positional encodings in the decoder without having to worry about + # their ordering. + x_all = jnp.zeros((n_batch, n_tokens, self.decoder_config.hidden_size)) + x_all = x_all.at[batch_indices, unmasked_indices].set(x_unmasked_proj) + x_all = x_all.at[batch_indices, mask_indices].set(mask_token) + + # Add positional encodings to the decoder. + x_all = model_utils.add_positional_embeddings( + x_all, self.positional_embedding_decoder, + [n_batch, height, width, self.decoder_config.hidden_size]) + + if self.classifier == 'token': + x_all = jnp.concatenate([cls_encoded, x_all], axis=1) + + x_decoded = vit.Encoder( + mlp_dim=self.decoder_config.mlp_dim, + num_layers=self.decoder_config.num_layers, + num_heads=self.decoder_config.num_heads, + dropout_rate=self.decoder_config.dropout_rate, + attention_dropout_rate=self.decoder_config.attention_dropout_rate, + stochastic_depth=self.decoder_config.stochastic_depth, + dtype=self.dtype, + positional_embedding='none', # Has already been added. + name='Decoder')(x_all, train=train) + + if self.classifier == 'token': + # Remove the CLS token for predicting reconstructions. + x_decoded = x_decoded[:, 1:, :] + + # Predict pixel reconstructions. + if self.representation_size is not None: + x_prelogits = nn.Dense(self.representation_size, name='pre_logits')( + x_decoded) + x_prelogits = nn.tanh(x_prelogits) + else: + x_prelogits = nn_layers.IdentityLayer(name='pre_logits')(x_decoded) + x_logits = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')(x_prelogits) + + return x_logits, token_mask + + +class ViTMaskedAutoencoderModel(base_model.MaskedFeatureRegressionModel): + """Vision Transformer model for masked autoencoder pretraining.""" + + def build_flax_model(self)-> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + num_classes = base_model.get_output_shapes( + self.config.masked_feature_loss.target, + tuple(self.config.model.patches.size)) + + return ViTMaskedAutoencoder( + num_classes=num_classes, + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + representation_size=self.config.model.representation_size, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + positional_embedding=self.config.model.get( + 'positional_embedding', 'sinusoidal_2d'), + positional_embedding_decoder=self.config.model.get( + 'positional_embedding_decoder', 'sinusoidal_2d'), + decoder_config=self.config.model.decoder_config, + token_mask_probability=( + self.config.masked_feature_loss.token_mask_probability), + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + stochastic_depth=self.config.model.get('stochastic_depth', 0.0), + dtype=model_dtype, + ) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return ml_collections.ConfigDict({ + 'model': + dict( + num_heads=2, + num_layers=1, + representation_size=None, + mlp_dim=64, + dropout_rate=0., + attention_dropout_rate=0., + hidden_size=16, + patches={'size': (4, 4)}, + classifier='token', + data_dtype_str='float32', + decoder_config=dict( + num_heads=2, + num_layers=1, + mlp_dim=32, + hidden_size=8, + dropout_rate=0, + attention_dropout_rate=0, + stochastic_depth=0)), + 'masked_feature_loss': + dict(target='rgb', token_mask_probability=0.75), + }) + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is writen to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return vit.init_vit_from_train_state(train_state, restored_train_state, + self.config, restored_model_cfg) + + +class ViTMAEMultilabelFinetuning( + multilabel_classification_model.MultiLabelClassificationModel): + """Vision Transformer model for multi-label classification task.""" + + def build_flax_model(self)-> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + + return ViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + positional_embedding=self.config.model.positional_embedding, + representation_size=self.config.model.representation_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.0), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.0), + stochastic_depth=self.config.model.get('stochastic_depth', 0.0), + freeze_backbone=self.config.model.get('freeze_backbone', False), + use_batch_norm_after_encoder=self.config.model.get( + 'use_batch_norm_after_encoder', True), + dtype=model_dtype, + ) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return ml_collections.ConfigDict({ + 'model': + dict( + num_heads=2, + num_layers=1, + representation_size=None, + mlp_dim=64, + dropout_rate=0., + attention_dropout_rate=0., + positional_embedding='learned_1d', + hidden_size=16, + patches={'size': (4, 4)}, + classifier='token', + data_dtype_str='float32', + freeze_backbone=False), + }) + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is writen to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return vit.init_vit_from_train_state(train_state, restored_train_state, + self.config, restored_model_cfg) + + +class ViTMAEClassificationFinetuning( + classification_model.ClassificationModel): + """Vision Transformer model for multi-label classification task.""" + + def build_flax_model(self)-> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + + return ViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + positional_embedding=self.config.model.positional_embedding, + representation_size=self.config.model.representation_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.0), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.0), + stochastic_depth=self.config.model.get('stochastic_depth', 0.0), + freeze_backbone=self.config.model.get('freeze_backbone', False), + use_batch_norm_after_encoder=self.config.model.get( + 'use_batch_norm_after_encoder', True), + dtype=model_dtype, + ) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return ml_collections.ConfigDict({ + 'model': + dict( + num_heads=2, + num_layers=1, + representation_size=None, + mlp_dim=64, + dropout_rate=0., + attention_dropout_rate=0., + positional_embedding='learned_1d', + hidden_size=16, + patches={'size': (4, 4)}, + classifier='token', + data_dtype_str='float32', + freeze_backbone=False, + use_batch_norm_after_encoder=True), + }) + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is writen to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return vit.init_vit_from_train_state(train_state, restored_train_state, + self.config, restored_model_cfg) diff --git a/scenic/projects/av_mae/vivit.py b/scenic/projects/av_mae/vivit.py new file mode 100644 index 0000000000000000000000000000000000000000..a4c1fc75dbfd2b1bcc2c273d4d856d779915b2b5 --- /dev/null +++ b/scenic/projects/av_mae/vivit.py @@ -0,0 +1,558 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""ViViT model for MAE pretraining.""" + +from typing import Any, Optional + +import flax +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np + +from scenic.model_lib.base_models import classification_model +from scenic.model_lib.layers import nn_layers + +from scenic.projects.av_mae import base_model +from scenic.projects.av_mae import model_utils +from scenic.projects.vivit import model as vivit_model +from scenic.projects.vivit import model_utils as vivit_model_utils + + +class ViViT(nn.Module): + """Vision Video Transformer model baseline for transfer learning. + + The differences to the scenic.project.vivit.model.ViViT are that: + -- Posibility of freezing the backbone. + -- The positional embedding is added before the encoder. + -- The CLS token is added after the positional embeddings. This follows MAE. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_classes: Number of output classes. + num_heads: Number of self-attention heads. + num_layers: Number of layers. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + temporal_encoding_config: ConfigDict which defines the type of input + encoding when tokenising the video. + attention_config: ConfigDict which defines the type of spatio-temporal + attention applied in the model. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_droplayer_rate: Probability of dropping a layer. Linearly + increases from 0 to the provided value. + representation_size: Size of the representation layer in the model's head. + if None, we skip the extra projection + tanh activation at the end. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + freeze_backbone: If True, add a stop-gradient before the final + classifier to only evaluate linear evaluation performance. + use_batch_norm_after_encoder: Only applies when the backbone is frozen. + In this case, an additional batch normalisation layer is applied before + the linear classifier. This was done in MAE + (https://arxiv.org/abs/2111.06377). + positional_embedding: The type of positional embeddings to add to the + tokens at the beginning of the transformer encoder. Options are + {learned_1d, sinusoidal_3d, none}. + normalise_encoder_output: If true, layer normalisation is applied to the + output of the transformer encoder. This is typically not done when + not using the token classifier. + dtype: JAX data type for activations. + """ + + mlp_dim: int + num_layers: int + num_heads: int + num_classes: int + patches: ml_collections.ConfigDict + hidden_size: int + temporal_encoding_config: ml_collections.ConfigDict + attention_config: ml_collections.ConfigDict + dropout_rate: float = 0. + attention_dropout_rate: float = 0. + stochastic_droplayer_rate: float = 0. + representation_size: Optional[int] = None + classifier: str = 'gap' + freeze_backbone: bool = False + use_batch_norm_after_encoder: bool = True + positional_embedding: str = 'sinusoidal_1d' + normalise_encoder_output: bool = True + dtype: jnp.dtype = jnp.float32 + modality: str = base_model.FeatureTargets.RGB + use_modality_tokens: bool = False + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, train: bool, debug: bool = False): + + del debug + + # Shape is [batch, num_tokens, hidden_size] + if self.modality == base_model.FeatureTargets.RGB: + x_tokens, temporal_dims = vivit_model.temporal_encode( + inputs, self.temporal_encoding_config, self.patches, self.hidden_size) + elif self.modality == base_model.FeatureTargets.SPECTROGRAM: + x_tokens = model_utils.embed_2d_patch( + inputs, self.patches, self.hidden_size) + temporal_dims = None + else: + raise ValueError(f'Unknown modality {self.modality}') + + n_batch, n_tokens, hidden_dim = x_tokens.shape + if self.modality == base_model.FeatureTargets.RGB: + height = width = int(np.sqrt(n_tokens // temporal_dims)) + if height * width * temporal_dims != n_tokens: + raise ValueError('Input is assumed to be square.') + + if (self.modality == base_model.FeatureTargets.SPECTROGRAM + and self.positional_embedding not in ['learned_1d', 'sinusoidal_1d']): + raise ValueError( + 'Only 1d positional embdeddings are supported for spectograms.') + + # Add positional encodings. + input_shape = None + if self.positional_embedding == 'sinusoidal_3d': + input_shape = [n_batch, temporal_dims, height, width, hidden_dim] + elif self.positional_embedding == 'learned_space_time': + input_shape = [n_batch, temporal_dims, height * width, hidden_dim] + + x_tokens = model_utils.add_positional_embeddings( + x_tokens, self.positional_embedding, input_shape=input_shape) + + x_tokens = self.add_modality_token(x_tokens) + + # If we want to add a class token, add it here. + if self.classifier == 'token': + cls = self.param('cls', nn.initializers.zeros, (1, 1, hidden_dim), + x_tokens.dtype) + cls = jnp.tile(cls, [n_batch, 1, 1]) + x_tokens = jnp.concatenate([cls, x_tokens], axis=1) + + x_tokens_encoded = vivit_model.Encoder( + temporal_dims=temporal_dims, + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + attention_config=self.attention_config, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_droplayer_rate=self.stochastic_droplayer_rate, + dtype=self.dtype, + positional_embedding='none', # Has already been added. + normalise_output=self.normalise_encoder_output, + name='Transformer')(x_tokens, train=train) + + if self.classifier in ('token', '0'): + x_tokens_encoded = x_tokens_encoded[:, 0] + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x_tokens_encoded = fn(x_tokens_encoded, axis=1) + x_tokens_encoded = nn.LayerNorm(name='encoder_norm')(x_tokens_encoded) + elif self.classifier in ('none'): + return x_tokens_encoded + else: + raise ValueError(f'Unknown classifier {self.classifier}') + + if self.representation_size is not None: + x_tokens_encoded = nn.Dense(self.representation_size, + name='pre_logits')(x_tokens_encoded) + x_tokens_encoded = nn.tanh(x_tokens_encoded) + else: + x_tokens_encoded = nn_layers.IdentityLayer(name='pre_logits')( + x_tokens_encoded) + + if self.freeze_backbone: + x_tokens_encoded = jax.lax.stop_gradient(x_tokens_encoded) + + if self.use_batch_norm_after_encoder: + x_tokens_encoded = nn.BatchNorm( + # Match PyTorch default and MAE PyTorch code + # https://github.com/facebookresearch/mae/blob/efb2a8062c206524e35e47d04501ed4f544c0ae8/main_linprobe.py#L222 + momentum=0.9, + epsilon=1e-6, + use_bias=False, + use_scale=False, + )(x_tokens_encoded, use_running_average=not train) + + x_tokens_encoded = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x_tokens_encoded) + return x_tokens_encoded + + def add_modality_token(self, x_tokens: jnp.ndarray, name: str = 'Encoder' + ) -> jnp.ndarray: + """Add modality learned tokens.""" + if not self.use_modality_tokens: + return x_tokens + + modality_token = self.param(f'{name}_modality_token_{self.modality}', + nn.initializers.zeros, + (1, 1, x_tokens.shape[-1])) + x_tokens = x_tokens + modality_token + return x_tokens + + +class ViViTMaskedAutoencoder(nn.Module): + """Vision Video Transformer model for masked-autoencoding. + + The differences to the scenic.project.vivit.model.ViViT are that: + -- Remove masked tokens from the encoder. + -- Process all tokens with the decoder. + -- The CLS token is added after the positional embeddings. This follows MAE. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_classes: Number of output classes. + num_heads: Number of self-attention heads. + num_layers: Number of layers. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + token_mask_probability: Probability of dropping out the input tokens + during training. + masking_strategy: Masking strategy used to mask the tokens. + temporal_encoding_config: ConfigDict which defines the type of input + encoding when tokenising the video. + attention_config: ConfigDict which defines the type of spatio-temporal + attention applied in the model. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_droplayer_rate: Probability of dropping a layer. Linearly + increases from 0 to the provided value.. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + normalise_encoder_output: If true, layer normalisation is applied to the + output of the transformer encoder. + dtype: JAX data type for activations. + """ + + mlp_dim: int + num_layers: int + num_heads: int + num_classes: int + patches: ml_collections.ConfigDict + hidden_size: int + token_mask_probability: float + masking_strategy: str + temporal_encoding_config: ml_collections.ConfigDict + decoder_config: ml_collections.ConfigDict + attention_config: ml_collections.ConfigDict + dropout_rate: float = 0. + attention_dropout_rate: float = 0. + stochastic_droplayer_rate: float = 0. + classifier: str = 'gap' + positional_embedding: str = 'sinusoidal_1d' + positional_embedding_decoder: str = 'sinusoidal_1d' + normalise_encoder_output: bool = True + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, train: bool, debug: bool = False): + + del debug + # Shape is [batch, num_tokens, hidden_size]. + x_tokens, temporal_dims = vivit_model.temporal_encode( + inputs, self.temporal_encoding_config, self.patches, self.hidden_size) + + n_batch, n_tokens, hidden_dim = x_tokens.shape + height = width = int(np.sqrt(n_tokens // temporal_dims)) + if height * width * temporal_dims != n_tokens: + raise ValueError('Input is assumed to be square.') + + # Add positional encodings. + input_shape = None + if self.positional_embedding == 'sinusoidal_3d': + input_shape = [n_batch, temporal_dims, height, width, hidden_dim] + elif self.positional_embedding == 'learned_space_time': + input_shape = [n_batch, temporal_dims, height * width, hidden_dim] + + x_tokens = model_utils.add_positional_embeddings( + x_tokens, self.positional_embedding, input_shape=input_shape + ) + + if train: + if self.masking_strategy == 'random': + # Generate mask indices by randomly masking the tokens. + n_masked = int(self.token_mask_probability * n_tokens) + mask_indices, unmasked_indices, token_mask = ( + model_utils.get_mask_indices( + n_batch, n_tokens, n_masked, self.make_rng('dropout') + ) + ) + + elif self.masking_strategy == 'tube': + # Generate mask indices by using tube masking. + mask_indices, unmasked_indices, token_mask = ( + model_utils.get_tube_mask_indices( + n_batch=n_batch, + n_tokens=n_tokens, + token_mask_probability=self.token_mask_probability, + temporal_dims=temporal_dims, + rng=self.make_rng('dropout'), + ) + ) + else: + raise ValueError( + f'The masking strategy {self.masking_strategy} is not implemented.' + ) + # Process only unmasked tokens with the encoder. + batch_indices = jnp.arange(n_batch).reshape(n_batch, 1) + x_unmasked = x_tokens[batch_indices, unmasked_indices] + else: + x_unmasked = x_tokens + token_mask = jnp.zeros((n_batch, n_tokens)) + + # If we want to add a class token, add it here. + # Note that in MAE, positional encodings are not added to the CLS token. + if self.classifier == 'token': + cls = self.param('cls', nn.initializers.zeros, (1, 1, hidden_dim), + inputs.dtype) + cls = jnp.tile(cls, [n_batch, 1, 1]) + x_unmasked = jnp.concatenate([cls, x_unmasked], axis=1) + + x_unmasked_encoded = vivit_model.Encoder( + temporal_dims=temporal_dims, + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + attention_config=self.attention_config, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_droplayer_rate=self.stochastic_droplayer_rate, + dtype=self.dtype, + positional_embedding='none', # Has already been added. + normalise_output=self.normalise_encoder_output, + name='Transformer')(x_unmasked, train=train) + + x_unmasked_encoded = nn_layers.IdentityLayer(name='encoder_output')( + x_unmasked_encoded) + if not train: + x_representation = nn_layers.IdentityLayer(name='representation')( + x_unmasked_encoded) + return x_representation, token_mask + + # Process entire sequence with the decoder. + mask_token = self.param('mask_token', + nn.initializers.zeros, + (1, 1, self.decoder_config.hidden_size)) + x_unmasked_proj = nn.Dense( + self.decoder_config.hidden_size, + use_bias=self.decoder_config.get('use_projection_bias', True), + kernel_init=nn.initializers.xavier_uniform(), + name='decoder_projection')(x_unmasked_encoded) + if self.classifier == 'token': + cls_encoded = x_unmasked_proj[:, :1, :] + x_unmasked_proj = x_unmasked_proj[:, 1:, :] + + # This effectively "unshuffles" the tokens. This means that we can simply + # add positional encodings in the decoder without having to worry about + # their ordering. + x_all = jnp.zeros((n_batch, n_tokens, self.decoder_config.hidden_size)) + x_all = x_all.at[batch_indices, unmasked_indices].set(x_unmasked_proj) + x_all = x_all.at[batch_indices, mask_indices].set(mask_token) + + # Note. VideoMAE (Facebook) adds positional encodinggs to the CLS token at + # the encoder as well. VideoMAE (Tong et al) don't use a CLS token. + # This implementation does not add positional embeddings to the CLS token, + # as in the original image MAE of He et al. + if input_shape is not None: + input_shape = input_shape[:-1] + [self.decoder_config.hidden_size] + x_all = model_utils.add_positional_embeddings( + x_all, self.positional_embedding_decoder, + input_shape=input_shape, + layer_name='posembed_decoder') + + if self.classifier == 'token': + x_all = jnp.concatenate([cls_encoded, x_all], axis=1) + + x_decoded = vivit_model.Encoder( + temporal_dims=temporal_dims, + mlp_dim=self.decoder_config.mlp_dim, + num_layers=self.decoder_config.num_layers, + num_heads=self.decoder_config.num_heads, + attention_config=self.decoder_config.attention_config, + dropout_rate=self.decoder_config.dropout_rate, + attention_dropout_rate=self.decoder_config.attention_dropout_rate, + stochastic_droplayer_rate=self.decoder_config.stochastic_droplayer_rate, + dtype=self.dtype, + positional_embedding='none', # Has already been added. + normalise_output=self.normalise_encoder_output, + name='Decoder')(x_all, train=train) + + if self.classifier == 'token': + # Remove the CLS token for predicting reconstructions. + x_decoded = x_decoded[:, 1:, :] + + x_prelogits = nn_layers.IdentityLayer(name='pre_logits')(x_decoded) + + x_logits = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')(x_prelogits) + + return x_logits, token_mask + + +class ViViTMaskedAutoencoderModel(base_model.MaskedFeatureRegressionModel): + """Vision Video Transformer model for masked autoencoder pretraining.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + num_classes = base_model.get_output_shapes( + self.config.masked_feature_loss.target, + tuple(self.config.model.patches.size), + self.config.masked_feature_loss.select_central_frame) + + return ViViTMaskedAutoencoder( + num_classes=num_classes, + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + token_mask_probability=( + self.config.masked_feature_loss.token_mask_probability), + masking_strategy=self.config.masked_feature_loss.get('masking_strategy', + 'random'), + temporal_encoding_config=self.config.model.temporal_encoding_config, + attention_config=self.config.model.attention_config, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get( + 'attention_dropout_rate', 0.1), + stochastic_droplayer_rate=self.config.model.get( + 'stochastic_droplayer_rate', 0), + dtype=model_dtype, + decoder_config=self.config.model.get('decoder_config', None), + positional_embedding=self.config.model.get('positional_embedding', + 'sinusoidal_1d'), + positional_embedding_decoder=self.config.model + .get('positional_embedding_decoder', 'sinusoidal_1d'), + normalise_encoder_output=self.config.model.get( + 'normalise_encoder_output', True), + ) + + def init_from_train_state(self, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_proj: bool = False) -> Any: + """Updates the train_state with data from restored_train_state.""" + + return vivit_model_utils.initialise_from_train_state( + self.config, + train_state, + restored_train_state, + restored_model_cfg, + restore_output_proj) + + +class ViViTMAEClassificationFinetuningModel( + classification_model.ClassificationModel): + """Vision Video Transformer model for MAE finetuning.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + num_classes = self.dataset_meta_data['num_classes'] + + return ViViT( + num_classes=num_classes, + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + temporal_encoding_config=self.config.model.temporal_encoding_config, + attention_config=self.config.model.attention_config, + representation_size=self.config.model.representation_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.0), + attention_dropout_rate=self.config.model.get( + 'attention_dropout_rate', 0.0), + stochastic_droplayer_rate=self.config.model.get( + 'stochastic_droplayer_rate', 0), + dtype=model_dtype, + normalise_encoder_output=self.config.model.get( + 'normalise_encoder_output', + self.config.model.classifier == 'token'), + positional_embedding=self.config.model.get('positional_embedding', + 'sinusoidal_1d'), + freeze_backbone=self.config.model.get('freeze_backbone', False), + use_batch_norm_after_encoder=self.config.model.get( + 'use_batch_norm_after_encoder', True), + ) + + def init_from_train_state(self, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_proj: bool = False) -> Any: + """Updates the train_state with data from restored_train_state.""" + attention_type = self.config.model.attention_config.get( + 'type', 'spacetime') + if attention_type in [ + 'spacetime', 'factorized_transformer_block', + 'factorized_self_attention_block', 'factorized_dot_product_attention' + ]: + vivit_transformer_key = 'Transformer' + elif attention_type == 'factorized_encoder': + vivit_transformer_key = 'SpatialTransformer' + else: + raise ValueError(f'Attention type {attention_type} does not exist.') + + # Move the encoder norm if it is there outside of the transformer encoder. + if 'encoder_norm' in restored_train_state.params['Transformer']: + restored_parameters = flax.core.unfreeze(restored_train_state.params) + norm_parameters = restored_parameters['Transformer'].pop('encoder_norm') + restored_parameters['encoder_norm'] = norm_parameters + restored_train_state = restored_train_state.replace( + params=flax.core.freeze(restored_parameters)) + + # If we restore from a non-MAE checkpoint and the positional embedding is + # 'learned_1d', we have to move the positional embedding outside + # the 'Transformer' block and also to drop the value of cls positional + # embedding from the positonal embedding and add it to cls token. + + if (self.config.init_from.get('restore_from_non_mae_checkpoint', False) + and self.config.model.get('positional_embedding', + 'sinusoidal_1d') == 'learned_1d'): + # Move the positional embedding outside the 'Transformer' block. + restored_parameters = flax.core.unfreeze(restored_train_state.params) + restored_parameters['posembed_input'] = restored_parameters[ + 'Transformer'].pop('posembed_input') + + if restored_model_cfg.model.classifier == 'token': + pos_embedding_params = restored_parameters[ + 'posembed_input']['pos_embedding'] + # Drop the value of cls positional embedding. + cls_pos_embedding = pos_embedding_params[:, 0] + restored_parameters['posembed_input'][ + 'pos_embedding'] = pos_embedding_params[:, 1:] + # Add the value of cls positional embedding to cls token. + restored_parameters['cls'] = restored_parameters[ + 'cls'] + cls_pos_embedding + + restored_train_state = restored_train_state.replace( + params=flax.core.freeze(restored_parameters)) + + return vivit_model_utils.initialise_from_train_state( + self.config, + train_state, + restored_train_state, + restored_model_cfg, + restore_output_proj, + vivit_transformer_key=vivit_transformer_key) diff --git a/scenic/projects/av_mae/vivit_multimodal.py b/scenic/projects/av_mae/vivit_multimodal.py new file mode 100644 index 0000000000000000000000000000000000000000..e8b83fe893002ca3fd2ca1b985a2627057e072ff --- /dev/null +++ b/scenic/projects/av_mae/vivit_multimodal.py @@ -0,0 +1,933 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""ViViT model for multimodal masked pretraining.""" + +import functools +from typing import Any, Dict, Optional, Tuple +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections + +from scenic.model_lib.base_models import base_model as base_model_lib +from scenic.model_lib.base_models import model_utils as model_utils_lib +from scenic.model_lib.layers import nn_layers + +from scenic.projects.av_mae import base_model +from scenic.projects.av_mae import model_utils +from scenic.projects.mbt import model as mbt_model +from scenic.projects.vivit import model as vivit_model +from scenic.projects.vivit import model_utils as vivit_model_utils + + +ArrayDict = Dict[str, jnp.ndarray] + +# pylint: disable=protected-access +_MBT_CLASSIFICATION_METRICS = mbt_model._MBT_CLASSIFICATION_METRICS +# pylint: enable=protected-access + + +class ViViTMultiMaskedAutoencoder(nn.Module): + """ViViT model for Multi-Modality Masked AutoEncoder. + + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_classes_dict: Dictionary with the number of output classes. + num_heads: Number of self-attention heads. + num_layers: Number of layers. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + token_mask_probability_dict: Probability of dropping out the input tokens + during training. + masking_strategy: Masking strategy used to mask the tokens. + temporal_encoding_config: ConfigDict which defines the type of input + encoding when tokenising the video. + decoder_config: ConfigDict which define the decoder. + attention_config: ConfigDict which defines the type of spatio-temporal + attention applied in the model. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_droplayer_rate: Probability of dropping a layer. Linearly + increases from 0 to the provided value.. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + encoder_strategy: Specify how to combine the modalities in the encoder. + Choose from: separate_encoders, concat_and_encode, same_encoder. + decoder_strategy: Specify how to combine the modalities in the decoder, + Choose from: separate_decoders, same_decoder. + use_inpainting: Whether or not to use the modality inpaiting strategy. + normalise_encoder_output: If true, layer normalisation is applied to the + output of the transformer encoder. + use_modality_tokens: If True, modality learnable tokens are added. + fusion_layers: When the encoder strategy is 'encode_and_concat', + this specify how many layers to use for concatenation. + dtype: JAX data type for activations. + """ + + mlp_dim: int + num_layers: int + num_heads: int + num_classes_dict: Dict[str, int] + patches: ml_collections.ConfigDict + hidden_size: int + token_mask_probability_dict: Dict[str, float] + masking_strategy: str + temporal_encoding_config: ml_collections.ConfigDict + decoder_config: ml_collections.ConfigDict + attention_config: ml_collections.ConfigDict + dropout_rate: float = 0. + attention_dropout_rate: float = 0. + stochastic_droplayer_rate: float = 0. + classifier: str = 'gap' + positional_embedding: str = 'sinusoidal_1d' + positional_embedding_decoder: str = 'sinusoidal_1d' + encoder_strategy: str = 'concat_and_encode' + decoder_strategy: str = 'same_decoder' + use_inpainting: bool = False + shuffle_inpainted_tokens: bool = False + normalise_encoder_output: bool = True + use_modality_tokens: bool = False + fusion_layers: Optional[int] = None + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, inputs: ArrayDict, *, train: bool, debug: bool = False): + del debug + # inputs will be a dictionary + + x_tokens_dict = tokenize_input( + inputs, temporal_encoding_config=self.temporal_encoding_config, + patches=self.patches, hidden_size=self.hidden_size) + + x_tokens_dict = add_positional_embeddings( + x_tokens_dict, positional_embedding=self.positional_embedding) + + x_tokens_dict = self.add_modality_token(x_tokens_dict) + + (x_unmasked_dict, token_mask_dict, + unmasked_indices_dict, masked_indices_dict) = self.mask_tokens( + x_tokens_dict, train=train) + # If we want to add a class token, add it here. + # Note that in MAE, positional encodings are not added to the CLS token. + x_unmasked_dict = add_cls_token(x_unmasked_dict, self.classifier, None) + + x_unmasked_encoded_dict = apply_encoder( + x_unmasked_dict, + encoder_strategy=self.encoder_strategy, + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + attention_config=self.attention_config, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_droplayer_rate=self.stochastic_droplayer_rate, + dtype=self.dtype, + normalise_encoder_output=self.normalise_encoder_output, + fusion_layers=self.fusion_layers, + train=train) + + if not train: + return x_unmasked_encoded_dict, token_mask_dict + + # Process entire sequence with the decoder. + mask_token_dict = {} + for key in x_unmasked_encoded_dict: + mask_token_ = self.param(f'mask_token_{key}', + nn.initializers.zeros, + (1, 1, self.decoder_config.hidden_size)) + mask_token_dict[key] = mask_token_ + + x_unmasked_proj_dict = self.apply_decoder_projection( + x_unmasked_encoded_dict) + + cls_encoded_dict, x_unmasked_proj_dict = self.remove_cls_token( + x_unmasked_proj_dict) + + if self.use_inpainting: + x_all_dict, token_mask_dict = self.unshuffle_tokens_inpainting( + x_unmasked_proj_dict, x_tokens_dict, mask_token_dict) + else: + x_all_dict = self.unshuffle_tokens(x_unmasked_proj_dict, + unmasked_indices_dict, + masked_indices_dict, + x_tokens_dict, mask_token_dict) + + # Note. VideoMAE (Facebook) adds positional encodinggs to the CLS token at + # the encoder as well. VideoMAE (Tong et al) don't use a CLS token. + # This implementation does not add positional embeddings to the CLS token, + # as in the original image MAE of He et al. + x_all_dict = add_positional_embeddings( + x_all_dict, positional_embedding=self.positional_embedding_decoder) + x_all_dict = self.add_modality_token(x_all_dict, name='Decoder') + + # Shuffle the tokens and token_mask accordingly if use_inpainting is True. + if self.use_inpainting and self.shuffle_inpainted_tokens: + x_all_dict, token_mask_dict = self.shuffle_tokens_and_token_mask( + x_all_dict, token_mask_dict, rng=self.make_rng('dropout')) + + x_all_dict = add_cls_token(x_all_dict, self.classifier, cls_encoded_dict) + + x_decoded_dict = self.apply_decoder(x_all_dict, train=train) + + _, x_decoded_dict = self.remove_cls_token(x_decoded_dict) + + x_prelogits_dict = {} + for key, x_decoded in x_decoded_dict.items(): + x_prelogits = nn_layers.IdentityLayer(name=f'pre_logits_{key}')(x_decoded) + x_prelogits_dict[key] = x_prelogits + + x_logits_dict = self.apply_dense_layer(x_prelogits_dict) + + return x_logits_dict, token_mask_dict + + def add_modality_token(self, x_tokens_dict: ArrayDict, name: str = 'Encoder' + ) -> ArrayDict: + """Add modality learned tokens.""" + if not self.use_modality_tokens: + return x_tokens_dict + for key, x_tokens in x_tokens_dict.items(): + modality_token = self.param(f'{name}_modality_token_{key}', + nn.initializers.zeros, + (1, 1, x_tokens.shape[-1])) + x_tokens = x_tokens + modality_token + x_tokens_dict[key] = x_tokens + + return x_tokens_dict + + def apply_dense_layer(self, x_prelogits_dict: ArrayDict) -> ArrayDict: + """Apply the regressor for each modality.""" + x_logits_dict = {} + + for key, x_prelogits in x_prelogits_dict.items(): + x_logits = nn.Dense(self.num_classes_dict[key], + kernel_init=nn.initializers.zeros, + name=f'output_projection_{key}')(x_prelogits) + x_logits_dict[key] = x_logits + return x_logits_dict + + def apply_decoder(self, x_all_dict: ArrayDict, train: bool) -> ArrayDict: + """Apply the decoder for each modality.""" + + def concat_and_decode(): + x_decoded_dict = {} + decoder = vivit_model.Encoder( + temporal_dims=None, + mlp_dim=self.decoder_config.mlp_dim, + num_layers=self.decoder_config.num_layers, + num_heads=self.decoder_config.num_heads, + attention_config=self.decoder_config.attention_config, + dropout_rate=self.decoder_config.dropout_rate, + attention_dropout_rate=self.decoder_config.attention_dropout_rate, + stochastic_droplayer_rate=( + self.decoder_config.stochastic_droplayer_rate), + dtype=self.dtype, + positional_embedding='none', # Has already been added. + normalise_output=self.normalise_encoder_output, + name='Decoder') + + x_all_input_list = [] + x_all_key_list = [] + for key, x_all in x_all_dict.items(): + x_all_input_list.append(x_all) + x_all_key_list.append(key) + + x_all_concat_input = jnp.concatenate(x_all_input_list, axis=1) + x_all_decoded_concat = decoder(x_all_concat_input, train=train) + start_index = 0 + for key, x_all_ in zip(x_all_key_list, x_all_input_list): + end_index = start_index + x_all_.shape[1] + x_decoded_dict[key] = x_all_decoded_concat[:, start_index:end_index] + start_index = end_index + assert x_decoded_dict[key].shape[1] == x_all_.shape[1] + + return x_decoded_dict + + def same_decoder(): + x_decoded_dict = {} + decoder = vivit_model.Encoder( + temporal_dims=None, + mlp_dim=self.decoder_config.mlp_dim, + num_layers=self.decoder_config.num_layers, + num_heads=self.decoder_config.num_heads, + attention_config=self.decoder_config.attention_config, + dropout_rate=self.decoder_config.dropout_rate, + attention_dropout_rate=self.decoder_config.attention_dropout_rate, + stochastic_droplayer_rate=( + self.decoder_config.stochastic_droplayer_rate), + dtype=self.dtype, + positional_embedding='none', # Has already been added. + normalise_output=self.normalise_encoder_output, + name='Decoder') + + for key, x_all in x_all_dict.items(): + x_decoded = decoder(x_all, train=train) + x_decoded_dict[key] = x_decoded + return x_decoded_dict + + def separate_decoders(): + x_decoded_dict = {} + for key, x_all in x_all_dict.items(): + x_decoded = vivit_model.Encoder( + temporal_dims=None, + mlp_dim=self.decoder_config.mlp_dim, + num_layers=self.decoder_config.num_layers, + num_heads=self.decoder_config.num_heads, + attention_config=self.decoder_config.attention_config, + dropout_rate=self.decoder_config.dropout_rate, + attention_dropout_rate=self.decoder_config.attention_dropout_rate, + stochastic_droplayer_rate=( + self.decoder_config.stochastic_droplayer_rate), + dtype=self.dtype, + positional_embedding='none', # Has already been added. + normalise_output=self.normalise_encoder_output, + name=f'Decoder_{key}')(x_all, train=train) + x_decoded_dict[key] = x_decoded + return x_decoded_dict + + if self.decoder_strategy == 'separate_decoders': + return separate_decoders() + elif self.decoder_strategy == 'same_decoder': + return same_decoder() + elif self.decoder_strategy == 'concat_and_decode': + return concat_and_decode() + else: + raise ValueError( + f'The decoder strategy {self.decoder_strategy} is not supported!') + + def unshuffle_tokens_inpainting(self, + x_unmasked_proj_dict: ArrayDict, + x_tokens_dict: ArrayDict, + mask_token_dict: ArrayDict + ) -> Tuple[ArrayDict, ArrayDict]: + """"Unshuffle the tokens for modality inpainting. + + Place the masked tokens of one modality (target) and the unmasked tokens + of another modality in a matrix to create the input for the decoder. + The unmasked tokens are placed first followed by the masked tokens. + + Args: + x_unmasked_proj_dict: Dictionary with the unmasked tokens. The shape of + the unmasked tokens is: [n_batch, n_unmasked_tokens, hidden_size]. + x_tokens_dict: Dictionary with all tokens. Used only for computing the + total number of tokens. The shape of the tokens is: + [n_batch, n_tokens, hidden_size]. + mask_token_dict: Dictionary with the masked tokens. The shape of the mask + token is: [1, 1, hidden_size]. + + Returns: + x_all_dict: Dictionary with the input for the decoder. The shape of the + tokens is: [n_batch, n_tokens, hidden_size]. + """ + + def get_different_key(key_): + available_keys = set([base_model.FeatureTargets.RGB, + base_model.FeatureTargets.SPECTROGRAM]) + return next(iter((available_keys - set([key_])))) + + x_all_dict = {} + token_mask_dict = {} + for key in x_unmasked_proj_dict.keys(): + x_unmasked_proj = x_unmasked_proj_dict[get_different_key(key)] + n_batch = x_unmasked_proj.shape[0] + batch_indices = jnp.arange(n_batch).reshape(n_batch, 1) + n_tokens = x_tokens_dict[key].shape[1] + x_all = jnp.zeros((n_batch, n_tokens, self.decoder_config.hidden_size)) + + # These are indices that come from the other modality. Note that as shapes + # between modalities can vary, there is no correspondence between the + # tokens. Therefore, we place all the unmasked tokens first in the token + # sequence. + num_unmasked_tokens = x_unmasked_proj.shape[1] + unmasked_indices = jnp.repeat( + jnp.arange(num_unmasked_tokens).reshape(1, num_unmasked_tokens), + n_batch, axis=0) + x_all = x_all.at[batch_indices, unmasked_indices].set(x_unmasked_proj) + + # These are indices that will be updated with the current mask token. + num_masked_tokens = n_tokens - num_unmasked_tokens + masked_indices = jnp.repeat( + jnp.arange(num_unmasked_tokens, n_tokens).reshape( + 1, num_masked_tokens), n_batch, axis=0) + x_all = x_all.at[batch_indices, masked_indices].set(mask_token_dict[key]) + + unmasked_token_mask = jnp.zeros((n_batch, num_unmasked_tokens)) + masked_token_mask = jnp.ones((n_batch, num_masked_tokens)) + token_mask = jnp.concatenate(( + unmasked_token_mask, masked_token_mask), axis=1) + + x_all_dict[key] = x_all + token_mask_dict[key] = token_mask + + return x_all_dict, token_mask_dict + + def unshuffle_tokens(self, + x_unmasked_proj_dict: ArrayDict, + unmasked_indices_dict: ArrayDict, + masked_indices_dict: ArrayDict, + x_tokens_dict: ArrayDict, + mask_token_dict: ArrayDict + ) -> ArrayDict: + """"Unshuffles the tokens and puts mask tokens at masked indices.""" + # This effectively "unshuffles" the tokens. This means that we can simply + # add positional encodings in the decoder without having to worry about + # their ordering. + + x_all_dict = {} + for key in x_unmasked_proj_dict.keys(): + x_unmasked_proj = x_unmasked_proj_dict[key] + n_batch = x_unmasked_proj.shape[0] + batch_indices = jnp.arange(n_batch).reshape(n_batch, 1) + n_tokens = x_tokens_dict[key].shape[1] + x_all = jnp.zeros((n_batch, n_tokens, self.decoder_config.hidden_size)) + + unmasked_indices = unmasked_indices_dict[key] + masked_indices = masked_indices_dict[key] + x_all = x_all.at[batch_indices, unmasked_indices].set(x_unmasked_proj) + x_all = x_all.at[batch_indices, masked_indices].set(mask_token_dict[key]) + + x_all_dict[key] = x_all + + return x_all_dict + + def remove_cls_token(self, x_unmasked_proj_dict: ArrayDict + ) -> Tuple[ArrayDict, ArrayDict]: + """"Remove the cls token.""" + cls_encoded_dict = {} + if self.classifier == 'token': + raise NotImplementedError('Token classifier is not implemented yet!') + return cls_encoded_dict, x_unmasked_proj_dict + + def apply_decoder_projection(self, + x_unmasked_encoded_dict: ArrayDict + ) -> ArrayDict: + """Project the unmasked tokens to decoder latent space dimension.""" + x_unmasked_proj_dict = {} + for key, x_unmasked_encoded in x_unmasked_encoded_dict.items(): + x_unmasked_proj = nn.Dense( + self.decoder_config.hidden_size, + use_bias=self.decoder_config.get('use_projection_bias', True), + kernel_init=nn.initializers.xavier_uniform(), + name=f'decoder_projection_{key}')(x_unmasked_encoded) + + x_unmasked_proj_dict[key] = x_unmasked_proj + return x_unmasked_proj_dict + + def mask_tokens(self, x_tokens_dict: ArrayDict, train: bool + ) -> Tuple[ArrayDict, ArrayDict, ArrayDict, ArrayDict]: + """Mask the tokens based on their probability.""" + x_unmasked_dict = {} + token_mask_dict = {} + unmasked_indices_dict = {} + masked_indices_dict = {} + + for key, x_tokens in x_tokens_dict.items(): + n_batch, n_tokens = x_tokens.shape[:2] + if train: + if self.masking_strategy == 'random': + # Generate mask indices by randomly masking the tokens. + n_masked = int(self.token_mask_probability_dict[key] * n_tokens) + mask_indices, unmasked_indices, token_mask = ( + model_utils.get_mask_indices( + n_batch, n_tokens, n_masked, self.make_rng('dropout') + ) + ) + else: + raise ValueError( + f'The masking strategy {self.masking_strategy} is not supported.' + ) + # Process only unmasked tokens with the encoder. + batch_indices = jnp.arange(n_batch).reshape(n_batch, 1) + x_unmasked = x_tokens[batch_indices, unmasked_indices] + else: + x_unmasked = x_tokens + token_mask = jnp.zeros((n_batch, n_tokens)) + # We won't need this if train is False. + unmasked_indices = None + mask_indices = None + + x_unmasked_dict[key] = x_unmasked + token_mask_dict[key] = token_mask + unmasked_indices_dict[key] = unmasked_indices + masked_indices_dict[key] = mask_indices + + return (x_unmasked_dict, token_mask_dict, # pytype: disable=bad-return-type # jax-ndarray + unmasked_indices_dict, masked_indices_dict) + + def shuffle_tokens_and_token_mask(self, + x_tokens_dict: ArrayDict, + token_mask_dict: ArrayDict, + rng: jax.Array, + ) -> Tuple[ArrayDict, ArrayDict]: + """Shuffle the tokens and the token masks.""" + # For the inpainting strategy, we add the unmasked token (from a different + # modality) at the begining of the array and then we complete with unmasked + # tokens. Now, we shuffle the tokens and the token masks. + # TODO(lgeorgescu): hard assumption that RGB is in the dict. + n_batch = x_tokens_dict[base_model.FeatureTargets.RGB].shape[0] + batch_indices = jnp.arange(n_batch).reshape(n_batch, 1) + rng_keys = jax.random.split(rng, n_batch * len(x_tokens_dict)) + idx_rng_key = 0 + for key in x_tokens_dict: + x_tokens = x_tokens_dict[key] + token_mask = token_mask_dict[key] + n_tokens = x_tokens.shape[1] + ids = jnp.tile(jnp.arange(n_tokens), n_batch).reshape((n_batch, n_tokens)) + ids = jax.vmap( + lambda seq, rng: jax.random.permutation(rng, seq, independent=True))( + ids, rng_keys[idx_rng_key * n_batch: (idx_rng_key + 1) * n_batch]) + + x_tokens = x_tokens.at[batch_indices, ids].set(x_tokens) + token_mask = token_mask.at[batch_indices, ids].set(token_mask) + x_tokens_dict[key] = x_tokens + token_mask_dict[key] = token_mask + idx_rng_key += 1 + + return x_tokens_dict, token_mask_dict + + +def apply_encoder(x_unmasked_dict: ArrayDict, + encoder_strategy: str, + mlp_dim: int, + num_layers: int, + num_heads: int, + attention_config: ml_collections.ConfigDict, + dropout_rate: float, + attention_dropout_rate: float, + stochastic_droplayer_rate: float, + dtype: jnp.dtype, + normalise_encoder_output: bool, + train: bool, + fusion_layers: Optional[int] = None)-> ArrayDict: + """Apply the encoder for each modality.""" + + def separate_encoders(): + x_unmasked_encoded_dict = {} + for key, x_unmasked_ in x_unmasked_dict.items(): + x_unmasked_encoded = vivit_model.Encoder( + temporal_dims=None, + mlp_dim=mlp_dim, + num_layers=num_layers, + num_heads=num_heads, + attention_config=attention_config, + dropout_rate=dropout_rate, + attention_dropout_rate=attention_dropout_rate, + stochastic_droplayer_rate=stochastic_droplayer_rate, + dtype=dtype, + positional_embedding='none', # Has already been added. + normalise_output=normalise_encoder_output, + name=f'Transformer_{key}')(x_unmasked_, train=train) + + x_unmasked_encoded = nn_layers.IdentityLayer( + name=f'encoder_output_{key}')(x_unmasked_encoded) + + x_unmasked_encoded_dict[key] = x_unmasked_encoded + return x_unmasked_encoded_dict + + def concat_and_encode(): + x_unmasked_encoded_dict = {} + encoder = vivit_model.Encoder( + temporal_dims=None, + mlp_dim=mlp_dim, + num_layers=num_layers, + num_heads=num_heads, + attention_config=attention_config, + dropout_rate=dropout_rate, + attention_dropout_rate=attention_dropout_rate, + stochastic_droplayer_rate=stochastic_droplayer_rate, + dtype=dtype, + positional_embedding='none', # Has already been added. + normalise_output=normalise_encoder_output, + name='Transformer') + + x_unmasked_input_list = [] + x_unmasked_key_list = [] + for key, x_unmasked_ in x_unmasked_dict.items(): + x_unmasked_input_list.append(x_unmasked_) + x_unmasked_key_list.append(key) + + x_unmasked_concat_input = jnp.concatenate(x_unmasked_input_list, axis=1) + x_unmasked_encoded_concat = encoder(x_unmasked_concat_input, train=train) + start_index = 0 + for key, x_unmasked_ in zip(x_unmasked_key_list, x_unmasked_input_list): + end_index = start_index + x_unmasked_.shape[1] + x_unmasked_encoded_dict[key] = nn_layers.IdentityLayer( + name=f'encoder_output_{key}')( + x_unmasked_encoded_concat[:, start_index:end_index]) + start_index = end_index + assert x_unmasked_encoded_dict[key].shape[1] == x_unmasked_.shape[1] + + return x_unmasked_encoded_dict + + def same_encoder(): + x_unmasked_encoded_dict = {} + encoder = vivit_model.Encoder( + temporal_dims=None, + mlp_dim=mlp_dim, + num_layers=num_layers, + num_heads=num_heads, + attention_config=attention_config, + dropout_rate=dropout_rate, + attention_dropout_rate=attention_dropout_rate, + stochastic_droplayer_rate=stochastic_droplayer_rate, + dtype=dtype, + positional_embedding='none', # Has already been added. + normalise_output=normalise_encoder_output, + name='Transformer') + + for key, x_unmasked_ in x_unmasked_dict.items(): + x_unmasked_encoded = encoder(x_unmasked_, train=train) + x_unmasked_encoded = nn_layers.IdentityLayer( + name=f'encoder_output_{key}')(x_unmasked_encoded) + x_unmasked_encoded_dict[key] = x_unmasked_encoded + return x_unmasked_encoded_dict + + def separate_encoders_and_concat(): + assert fusion_layers is not None + num_layers_single = num_layers - fusion_layers + num_layers_concat = fusion_layers + assert num_layers_single + num_layers_concat == num_layers + + x_unmasked_encoded_dict = {} + + for key, x_unmasked_ in x_unmasked_dict.items(): + x_unmasked_encoded = vivit_model.Encoder( + temporal_dims=None, + mlp_dim=mlp_dim, + num_layers=num_layers_single, + num_heads=num_heads, + attention_config=attention_config, + dropout_rate=dropout_rate, + attention_dropout_rate=attention_dropout_rate, + stochastic_droplayer_rate=stochastic_droplayer_rate, + dtype=dtype, + positional_embedding='none', # Has already been added. + normalise_output=normalise_encoder_output, + name=f'Transformer_{key}')(x_unmasked_, train=train) + + x_unmasked_encoded_dict[key] = x_unmasked_encoded + + encoder_concat = vivit_model.Encoder( + temporal_dims=None, + mlp_dim=mlp_dim, + num_layers=num_layers_concat, + num_heads=num_heads, + attention_config=attention_config, + dropout_rate=dropout_rate, + attention_dropout_rate=attention_dropout_rate, + stochastic_droplayer_rate=stochastic_droplayer_rate, + dtype=dtype, + positional_embedding='none', + normalise_output=normalise_encoder_output, + name='Transformer_concat') + + x_unmasked_input_list = [] + x_unmasked_key_list = [] + for key, x_unmasked_encoded_ in x_unmasked_encoded_dict.items(): + x_unmasked_input_list.append(x_unmasked_encoded_) + x_unmasked_key_list.append(key) + + x_unmasked_concat_input = jnp.concatenate(x_unmasked_input_list, axis=1) + x_unmasked_encoded_concat = encoder_concat(x_unmasked_concat_input, + train=train) + + x_unmasked_encoded_dict_out = {} + start_index = 0 + for key, x_unmasked_ in zip(x_unmasked_key_list, x_unmasked_input_list): + end_index = start_index + x_unmasked_.shape[1] + x_unmasked_encoded_dict_out[key] = nn_layers.IdentityLayer( + name=f'encoder_output_{key}')( + x_unmasked_encoded_concat[:, start_index:end_index]) + start_index = end_index + assert x_unmasked_encoded_dict_out[key].shape[1] == x_unmasked_.shape[1] + + return x_unmasked_encoded_dict_out + + if encoder_strategy == 'separate_encoders': + return separate_encoders() + elif encoder_strategy == 'concat_and_encode': + return concat_and_encode() + elif encoder_strategy == 'same_encoder': + return same_encoder() + elif encoder_strategy == 'separate_encoders_and_concat': + return separate_encoders_and_concat() + else: + raise ValueError( + f'The encoder strategy {encoder_strategy} is not supported!') + + +def add_cls_token(x_all_dict: ArrayDict, classifier: str, + cls_encoded_dict: Optional[ArrayDict] = None + ) -> ArrayDict: + """Add the cls token.""" + # If cls_encoded_dict is None, then the cls token will be generated. + # Otherwise with be added back to the matrix. + if cls_encoded_dict is None: + # generate the cls token + pass + if classifier == 'token': + raise NotImplementedError('Token classifer is not implemented yet!') + + return x_all_dict + + +def add_positional_embeddings(x_tokens_dict, positional_embedding): + """Add positional encodings.""" + if positional_embedding in ['sinusoidal_1d', 'learned_1d']: + for key, x_tokens_ in x_tokens_dict.items(): + x_tokens_ = model_utils.add_positional_embeddings( + x_tokens_, positional_embedding, input_shape=x_tokens_.shape, + layer_name=f'posembed_input_{key}') + x_tokens_dict[key] = x_tokens_ + else: + raise ValueError('Only 1d positional embdedding are supported!') + + return x_tokens_dict + + +def tokenize_input(inputs: ArrayDict, temporal_encoding_config: str, + patches: ml_collections.ConfigDict, hidden_size: int, + ) -> ArrayDict: + """Tokenize the input based on their modality.""" + embed_2d = {'spectrogram'} + temporal_encode = {'RGB', 'modis', 'l7', 's2', 's1', 'nicfi', 'nicfi_monthly', + 'alos'} + if 'size' in patches: # Handles case of one patch given for all modalities. + modal_patches = {key: patches for key in inputs} + else: + modal_patches = patches + tokens_dict = {} + for key in inputs: + # Shape is [batch, num_tokens, hidden_size]. + if key in temporal_encode: + x_tokens, _ = vivit_model.temporal_encode( + inputs[key], + temporal_encoding_config, + patches=modal_patches[key], + hidden_size=hidden_size, + name=f'embedding_{key}', + ) + elif key in embed_2d: + x_tokens = model_utils.embed_2d_patch( + inputs[key], + patches=modal_patches[key], + embedding_dim=hidden_size, + name=f'embedding_{key}', + ) + else: + raise ValueError(f'Modality {key} is not supported!') + tokens_dict[key] = x_tokens + + return tokens_dict + + +class ViViTMultiMaskedAutoencoderModel(base_model.MaskedFeatureRegressionModel): + """ViViT model for multi-modalitymasked autoencoder pretraining.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + + num_classes_dict = {} + for feature_target in self.config.masked_feature_loss.target: + if feature_target == base_model.FeatureTargets.RGB: + select_central_frame = ( + self.config.masked_feature_loss.select_central_frame) + patch_size = tuple(self.config.model.patches.size) + channels = 3 + elif feature_target == base_model.FeatureTargets.SPECTROGRAM: + patch_size = tuple(self.config.model.patches.size[:2]) + select_central_frame = False + channels = 1 + else: + raise ValueError(f'{feature_target} is not supported!') + + num_classes = base_model.get_output_shapes(feature_target, + patch_size, + select_central_frame, + channels=channels) + num_classes_dict[feature_target] = num_classes + + return ViViTMultiMaskedAutoencoder( + num_classes_dict=num_classes_dict, + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + token_mask_probability_dict=( + self.config.masked_feature_loss.token_mask_probability_dict), + masking_strategy=self.config.masked_feature_loss.get('masking_strategy', + 'random'), + temporal_encoding_config=self.config.model.temporal_encoding_config, + attention_config=self.config.model.attention_config, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.0), + attention_dropout_rate=self.config.model.get( + 'attention_dropout_rate', 0.1), + stochastic_droplayer_rate=self.config.model.get( + 'stochastic_droplayer_rate', 0), + dtype=model_dtype, + decoder_config=self.config.model.get('decoder_config', None), + positional_embedding=self.config.model.get('positional_embedding', + 'sinusoidal_1d'), + positional_embedding_decoder=self.config.model + .get('positional_embedding_decoder', 'sinusoidal_1d'), + normalise_encoder_output=self.config.model.get( + 'normalise_encoder_output', True), + use_inpainting=self.config.model.get('use_inpainting', False), + shuffle_inpainted_tokens=self.config.model.get( + 'shuffle_inpainted_tokens', False), + encoder_strategy=self.config.model.get('encoder_strategy'), + decoder_strategy=self.config.model.get('decoder_strategy'), + use_modality_tokens=self.config.model.get('use_modality_tokens', False), + fusion_layers=self.config.model.get('fusion_layers', None) + ) + + def init_from_train_state(self, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_proj: bool = False) -> Any: + """Updates the train_state with data from restored_train_state.""" + return vivit_model_utils.initialise_from_train_state( + self.config, + train_state, + restored_train_state, + restored_model_cfg, + restore_output_proj) + + def loss_function(self, # pytype: disable=signature-mismatch # jax-ndarray + predictions: ArrayDict, + prediction_masks: ArrayDict, + batch: base_model_lib.Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Returns the (weighted) mean squared error. + + Args: + predictions: Dictionary with the output of model in shape + [batch, num_tokens, channels]. + prediction_masks: Dictionary with the tokens to compute the loss on. + Shape is [batch, num_tokens] + batch: Batch (dict) with keys 'targets' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + L2 regularization. + + Returns: + The (weighted) mean squared error. + """ + + def get_loss_weights(target_name_): + batch_mask = batch.get('batch_mask') + if batch_mask is None: + batch_mask = jnp.ones(prediction_masks[target_name_].shape) + if batch_mask.ndim == 1: + batch_mask = jnp.expand_dims(batch_mask, axis=-1) + if self.config.masked_feature_loss.get('loss_unmasked_tokens', False): + loss_weights = batch_mask + else: + loss_weights = batch_mask * prediction_masks[target_name_] + + return loss_weights + + total_loss = 0.0 + for target_name in self.config.masked_feature_loss.target: + targets = batch['targets'][target_name] + loss_weights = get_loss_weights(target_name) + loss = model_utils_lib.weighted_mean_squared_error( + predictions[target_name], targets, loss_weights, axis=-1) + + # Mean squared error is normalised by the number of tokens. + # If this option is enabled, we normalise further by the number + # of features we are regressing to. + if self.config.masked_feature_loss.get('normalise_by_output_dimension', + False): + output_dimension = predictions[target_name].shape[-1] + loss = loss / output_dimension + total_loss = total_loss + ( + loss * self.config.masked_feature_loss.modality_weight[target_name]) + + if self.config.get('l2_decay_factor'): + l2_loss = model_utils_lib.l2_regularization(model_params) + total_loss += 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss # pytype: disable=bad-return-type # jax-ndarray + + def get_metrics_fn(self, split: Optional[str] = None + ) -> base_model_lib.MetricFn: + """Returns a callable metric function for the model. + + By default, we return the same metric for each split. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: + ```metrics_fn(predictions, batch)``` + """ + + del split # Same function for all splits. + return functools.partial( + feature_regression_metrics_function, + feature_target=self.config.masked_feature_loss.target, + metrics=base_model._REGRESSION_METRICS) # pylint: disable=protected-access + + +def feature_regression_metrics_function( + predictions: ArrayDict, prediction_masks: ArrayDict, + batch: base_model_lib.Batch, feature_target: str, + metrics: base_model_lib.MetricNormalizerFnDict, + ) -> Dict[str, Tuple[float, int]]: + """Calculate metrics for the feature regression task. + + Currently we assume each metric_fn has the API: + ```metric_fn(predictions, targets, weights)``` + and returns an array of shape [batch,]. We also assume that to compute + the aggregate metric, one should sum across all batches, then divide by the + total samples seen. In this way we currently only support metrics of the 1/N + sum f(inputs, targets). Note, the caller is responsible for dividing by + the normalizer when computing the mean of each metric. + + Args: + predictions: Dictionary with the output of model in shape [batch, length]. + prediction_masks: Dictionary of the predictions which are valid. + batch: Batch (dict) with keys 'targets' and optionally 'batch_mask'. + feature_target: The feature targets used for feature regression. + metrics: The regression metrics to evaluate. The key is the + name of the metric, and the value is the metrics function. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples of + (metric, normalizer). + """ + evaluated_metrics = {} + # TODO(lgeorgescu): add the weighted sum in the evaluation too + + for key_target in feature_target: + batch_mask = batch.get('batch_mask') + if batch_mask is None: + batch_mask = jnp.ones(prediction_masks[key_target].shape) + if batch_mask.ndim == 1: + n_batch = predictions[key_target].shape[0] + batch_mask = jnp.reshape(batch_mask, (n_batch, 1)) + weights = batch_mask * prediction_masks[key_target] + + for key, val in metrics.items(): + evaluated_metrics[key + '_' + key_target] = ( + model_utils_lib.psum_metric_normalizer( + (val[0](predictions[key_target], batch['targets'][key_target], # pytype: disable=wrong-arg-types # jax-ndarray + weights), + val[1](predictions[key_target], batch['targets'][key_target], # pytype: disable=wrong-arg-types # jax-ndarray + weights)))) + + return evaluated_metrics # pytype: disable=bad-return-type # jax-ndarray diff --git a/scenic/projects/avatar/README.md b/scenic/projects/avatar/README.md new file mode 100644 index 0000000000000000000000000000000000000000..66c4cbf08ab414613a0f7df0ec87d19e492dfae9 --- /dev/null +++ b/scenic/projects/avatar/README.md @@ -0,0 +1,24 @@ +# AVATAR: Unconstrained Audiovisual Speech Recognition + +### [Project Page](https://gabeur.github.io/avatar-visspeech) | [arXiv](https://arxiv.org/abs/2206.07684) + + + +AVATAR is a sequence-to-sequence AudioVisual ASR TrAnsformeR which is trained +end-to-end from spectrograms and full-frame RGB for the task of audiovisual +speech recognition (AV-ASR). This project requires installing +[JiWER](https://github.com/jitsi/jiwer). + + +## Citation + +If you use AVATAR, please use the following BibTeX entry. + +``` +@InProceedings{gabeur2022avatar, + title={AVATAR: Unconstrained Audiovisual Speech Recognition}, + author={Gabeur, Valentin and Seo, Paul Hongsuck and Nagrani, Arsha and Sun, Chen and Alahari, Karteek and Schmid, Cordelia}, + journal={Interspeech}, + year={2022} +} +``` diff --git a/scenic/projects/avatar/architecture_avatar.png b/scenic/projects/avatar/architecture_avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..4f7029e0f2e115866c8404ce0c55267822c169b8 --- /dev/null +++ b/scenic/projects/avatar/architecture_avatar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56213e6a10309dd751b5722805db3262f83ad9e0224a84ec88269afd8d8b5c60 +size 755093 diff --git a/scenic/projects/avatar/configs/how2/how2_ft.py b/scenic/projects/avatar/configs/how2/how2_ft.py new file mode 100644 index 0000000000000000000000000000000000000000..d429dec82286889e6956f4703bf038ee81c40487 --- /dev/null +++ b/scenic/projects/avatar/configs/how2/how2_ft.py @@ -0,0 +1,276 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Trains an ASR model on the howto100m dataset. + +""" + +import ml_collections + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'how2' + + # dataset + config.dataset_name = 'av_asr_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.readahead = True + config.dataset_configs.return_as_dict = True + + config.dataset_configs.base_dir = '/path/to/dataset' + config.dataset_configs.tables = { + 'train': { + 'name': 'train-how2', + 'path': 'how2-5fps_tfrecord/train.rgb.wave.spec.normtext.visscore.tfrecord@512', + 'len': 184_868, + }, + 'val': { + 'name': 'val-how2', + 'path': 'how2-5fps_tfrecord/val.rgb.wave.spec.normtext.visscore.tfrecord@20', + 'len': int(2020 * 2), + }, + 'test': { + 'name': 'test-how2', + 'path': 'how2-5fps_tfrecord/test.rgb.wave.spec.normtext.visscore.tfrecord@20', + 'len': int(2303 * 2), + }, + } + + # List of modalities to load, supports `rgb`, `spectrogram` and `waveform`. + # Note that it only specifies which modalities to load, not which to use, + # which is controlled by config.model.modality_fusion + config.dataset_configs.modalities = ( + 'rgb', + 'spectrogram', + ) + + # RGB parameters + config.dataset_configs.num_frames = 8 + # config.dataset_configs.num_frames = 2 + config.dataset_configs.stride = 5 + # config.dataset_configs.stride = 1 + # Augmentation + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = True + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + + # Spectrogram parameters + config.dataset_configs.num_spec_frames = 25 + config.dataset_configs.eval_num_spec_frames = 25 + config.dataset_configs.spec_shape = (100, 80) + + # Online Spectrogram Computation + config.dataset_configs.spec_compute_online = True + config.dataset_configs.spec_from_wave_snr = None + config.dataset_configs.spec_from_wave_add_train_masking_noise = True + config.dataset_configs.spec_from_wave_visualness_threshold = 0.01 + # content word rate: 0.27548048555 + config.dataset_configs.spec_from_wave_random_mask_noise_rate = 0.363 # ~10% + config.dataset_configs.spec_from_wave_max_num_masks = 16 + + config.dataset_configs.spec_from_wave_environment_noise_path = ( + 'path/to/noise/matrix.npy' + ) + + # pylint: disable=g-complex-comprehension + config.dataset_configs.spec_from_wave_eval_noise_configs = { + 'environment_noise': [{ + 'environment_noise_configs': { + 'snr': 1 / i + } + } for i in range(1, 4)], + 'packet_loss_noise': [{ + 'packet_loss_noise_configs': { + 'max_num_bursts': 2, + 'max_length_rate': 0.1 * i + } + } for i in range(1, 4)], + 'environment_noise,packet_loss_noise': [{ + 'environment_noise_configs': { + 'snr': 1 / i + }, + 'packet_loss_noise_configs': { + 'max_num_bursts': 2, + 'max_length_rate': 0.1 * i + } + } for i in range(1, 4)], + } + # pylint: enable=g-complex-comprehension + + # SpecAugment hyperparameters + config.dataset_configs.spec_augment = True + config.dataset_configs.spec_augment_params = ml_collections.ConfigDict() + config.dataset_configs.spec_augment_params.freq_mask_max_bins = 27 + config.dataset_configs.spec_augment_params.freq_mask_count = 2 + config.dataset_configs.spec_augment_params.time_mask_max_frames = 100 + config.dataset_configs.spec_augment_params.time_mask_count = 2 + config.dataset_configs.spec_augment_params.time_warp_max_frames = 80 + config.dataset_configs.spec_augment_params.time_warp_max_ratio = 0 + config.dataset_configs.spec_augment_params.time_mask_max_ratio = 0 + + # Text parameters + config.dataset_configs.max_num_words = 64 + config.dataset_configs.eval_max_num_words = 128 + config.dataset_configs.tokenizer = ml_collections.ConfigDict() + bert_tokenizer_path = r'path/to/bert/vocabulary.txt' + config.dataset_configs.tokenizer.tokenizer_vocab = bert_tokenizer_path + config.dataset_configs.tokenizer.tokenizer_type = 'bert' + + # + # Model. + config.model_name = 'seq2seq_model' + config.model = ml_collections.ConfigDict() + dim = 768 + config.model.embedding_dimension = dim + config.model.encoder_model = 'mbt' + config.model.decoder_model = 'vd' + config.model_dtype_str = 'float32' + + # + # MBT configs + config.mbt = ml_collections.ConfigDict() + config.mbt.model = ml_collections.ConfigDict() + # Supports 'rgb' and 'spectrogram' + config.mbt.model.modality_fusion = ( + 'rgb', + 'spectrogram', + ) + config.mbt.model.use_bottleneck = True + config.mbt.model.share_encoder = False + config.mbt.model.n_bottlenecks = 4 + # Layer at which to fuse. '0' refers to early fusion, if fusion_layer is equal + # to model.num_layers, then there is no cross-modal attention and CLS tokens + # for each modality are averaged right at the end. + config.mbt.model.fusion_layer = 8 + config.mbt.model.hidden_size = dim + config.mbt.model.patches = ml_collections.ConfigDict() + config.mbt.model.patches.size = [16, 16, 2] + config.mbt.model.attention_config = ml_collections.ConfigDict() + config.mbt.model.attention_config.type = 'spacetime' + config.mbt.model.num_heads = 12 + config.mbt.model.mlp_dim = dim * 4 + config.mbt.model.num_layers = 12 + # For simplicity, we disable `token` classifier for multimodal inputs. + config.mbt.model.classifier = 'token' + config.mbt.model.attention_dropout_rate = 0.1 + config.mbt.model.dropout_rate = 0.0 + config.mbt.model.stochastic_droplayer_rate = 0.2 + config.mbt.model.temporal_encoding_config = ml_collections.ConfigDict() + # 3d_conv is only used for RGB inputs. + config.mbt.model.temporal_encoding_config.method = '3d_conv' + config.mbt.model.temporal_encoding_config.kernel_init_method = ( + 'central_frame_initializer' + ) + config.mbt.model.temporal_encoding_config.n_sampled_frames = 4 # Unused here. + + # + # VD config + config.vd = ml_collections.ConfigDict() + config.vd.model = ml_collections.ConfigDict() + + config.vd.model.dtype = config.model_dtype_str + + # Maximum number of position embeddings + config.vd.model.max_len = 256 + + # Number of transformer layers. + config.vd.model.num_layers = 8 + # Number of attention heads. + config.vd.model.num_heads = 4 + + # Size of query/key/value for attention. + config.vd.model.qkv_dim = dim + # Size of embeddings. + config.vd.model.emb_dim = dim + # Size of the MLP. + config.vd.model.mlp_dim = dim * 4 + + # Dropout rate. + config.vd.model.dropout_rate = 0.1 + # Attention dropout rate. + config.vd.model.attention_dropout_rate = 0.0 + + # Vocabulary size. + config.vd.model.vocab_size = 30_522 + + config.vd.logits_via_embedding = True + + # Initalisation configs + config.init_from = ml_collections.ConfigDict() + config.init_from.init_from_vit = False + config.init_from.xm = (31430128, 1) + + # Training. + config.trainer_name = 'generation_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.l2_decay_factor = 0. + config.max_grad_norm = 1. + config.label_smoothing = 0.1 + # config.num_training_epochs = 150 + config.num_training_steps = 40_000 + config.batch_size = 256 # Minimum is num_devices = 32 + config.eval_batch_size = 128 # Smaller than batch size because beam search + config.rng_seed = 0 + + # Learning schedule. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 0 + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.base_learning_rate = 0.3 + + # Eval + # Beam size for inference. + config.beam_size = 4 + config.max_decode_len = 128 + config.eos_id = 102 # Depend on tokenizer + + # Logging + config.write_summary = True + config.write_xm_measurements = True + config.checkpoint = True + config.debug_train = False + config.debug_eval = False + config.log_eval_steps = 500 # Perform evaluation and testing + config.log_summary_steps = 100 # Log training summary + + config.dataset_configs.base_dir = '/path/to/checkpoint/directory' + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + + return hyper.product([ + hyper.sweep( + 'config.dataset_configs.spec_from_wave_visualness_threshold', + [0.1], + ), + hyper.sweep( + 'config.dataset_configs.spec_from_wave_random_mask_noise_rate', + [0.31], + ), + ]) diff --git a/scenic/projects/avatar/datasets/av_asr_tfrecord_dataset.py b/scenic/projects/avatar/datasets/av_asr_tfrecord_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..714a30045d5991b2f5ccdeacade8e97f98d51126 --- /dev/null +++ b/scenic/projects/avatar/datasets/av_asr_tfrecord_dataset.py @@ -0,0 +1,1078 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""TFRecords data-loader for audiovisual speech recognition datasets.""" + +import functools +from typing import Any, Dict, Iterator, Optional, Sequence, Text, Tuple + +from absl import logging +from dmvr import builders +from dmvr import modalities as load_modalities +from dmvr import tokenizers +from flax import jax_utils +import jax +import jax.numpy as jnp +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib import video_ops +from scenic.projects.avatar.datasets.dataset_utils import add_int64 +from scenic.projects.avatar.datasets.dataset_utils import add_spectrogram +from scenic.projects.avatar.datasets.dataset_utils import add_spectrogram_from_audio +from scenic.projects.avatar.datasets.dataset_utils import add_text +from scenic.projects.vivit.data import video_tfrecord_dataset +import tensorflow as tf + + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] + + +def maybe_pad_batch(batch, train, batch_size, return_as_dict): + """Zero pad the batch on the right to the batch_size.""" + if not return_as_dict: + return dataset_utils.maybe_pad_batch(batch, train, batch_size) + + assert 'batch_mask' not in batch + if 'rgb' in batch['inputs']: + unpadded_mask_shape = batch['inputs']['rgb'].shape[0] + batch_pad = batch_size - unpadded_mask_shape + elif 'spectrogram' in batch['inputs']: + unpadded_mask_shape = batch['inputs']['spectrogram'].shape[0] + batch_pad = batch_size - unpadded_mask_shape + elif 'waveform' in batch['inputs']: + unpadded_mask_shape = batch['inputs']['waveform'].shape[0] + batch_pad = batch_size - unpadded_mask_shape + elif 'text' in batch['inputs']: + unpadded_mask_shape = batch['inputs']['text'].shape[0] + batch_pad = batch_size - unpadded_mask_shape + else: + raise ValueError('invalid input batch') + + if train and batch_pad != 0: + raise ValueError('In this codebase, we assumed that we always drop the ' + 'last partial batch of the train set. Please use ' + '` drop_remainder=True` for the training set.') + + # Most batches will not need padding so we quickly return to avoid slowdown. + if train or batch_pad == 0: + if 'batch_mask' not in batch: + batch['batch_mask'] = np.ones(unpadded_mask_shape, dtype=np.float32) + return batch + + def zero_pad(array): + pad_with = [(0, batch_pad)] + [(0, 0)] * (array.ndim - 1) + return np.pad(array, pad_with, mode='constant') + + padded_batch = jax.tree_util.tree_map(zero_pad, batch) + padded_batch_mask = zero_pad(np.ones(unpadded_mask_shape, dtype=np.float32)) + padded_batch['batch_mask'] = padded_batch_mask + return padded_batch + + +def _convert_strings_to_int_sequences(in_strs, max_len): + """Converts string to sequence of ints so that it is XLA compatible.""" + seq_list = [] + for s in in_strs: + s = s.decode('utf-8') + + int_list = [] + for char in s: + int_list.append(ord(char)) + nb_char = len(int_list) + if nb_char <= max_len: + pad_len = max_len - nb_char + seq = np.array(int_list, dtype=np.int32) + seq = np.pad(seq, (0, pad_len), 'constant', constant_values=(0,)) + else: + seq = np.array(int_list[:max_len]) + seq_list.append(seq) + return np.stack(seq_list, axis=0) + + +def _convert_key_string_to_int(features: Dict[str, Any]) -> Dict[str, Any]: + """Converts keys to sequence of ints.""" + if 'key' in features: + # Maximum output length + features['key'] = _convert_strings_to_int_sequences(features['key'], 256) + + return features + + +def _convert_caption_string_to_int(features: Dict[str, Any]) -> Dict[str, Any]: + """Converts keys to sequence of ints.""" + if 'key' in features: + # Maximum output length + features['raw_caption'] = _convert_strings_to_int_sequences( + features['raw_caption'][:, 0], 512) + + return features + + +def _convert_ref_string_to_int(features: Dict[str, Any]) -> Dict[str, Any]: + """Converts keys to sequence of ints.""" + if 'reference' in features: + # Maximum output length + features['reference'] = _convert_strings_to_int_sequences( + features['reference'], 256) + + return features + + +class ASRTFRecordDatasetFactory(video_tfrecord_dataset.TFRecordDatasetFactory): + """Reader for TFRecords using the MediaSequence format. + + The TFrecords already contain images and spectrograms. + """ + + _MODALITIES = ('rgb', 'spectrogram', 'waveform') + + def __init__( + self, + base_dir: str, + tables: Any, + subset: str = 'train', + modalities: Tuple[str] = ('rgb',), + prop_data: float = 1.0, + num_groups: Optional[int] = None, + group_index: Optional[int] = None, + ): + """Initializes the instance of AVSSTableDatasetFactory. + + Initializes a data-loader using DeepMind Video Reader (DMVR) pre-processing. + TFrecords are assumed to consist of tf.SequenceExample protocol buffers in + the MediaSequence format + (https://github.com/google/mediapipe/tree/master/mediapipe/util/sequence). + + Args: + base_dir: The base directory of the TFrecords. + tables: A dictionary mapping the subset name (train, val or test) to the + relative path of the SSTable containing them. Follows DMVR convention. + The values of the dictionary can either be a string or a list. If it is + a string, it specifies all the shards in the SSTable. Example - + "/path/to/tfrecord@10". If passing a list, each entry is a shard of the + TFRecord. Example - "[/path/to/sstable_shard_1_of_10, ..., + /path/to/sstabble_shard_10_of_10]." The latter scenario is useful for + debugging. + subset: The subset of the dataset to load. Must be a key of "tables" + modalities: Which modality to load. Currently supports 'rgb' and + 'spectrogram' + prop_data: The proportion of the data to load. If less than 1.0, this + proportion of the total SSTable shards are read. + num_groups: If specified will reshard the data according to `num_groups`. + A `group_index` should be specified if using `num_groups`. + group_index: Index of the shard to return after resharding. `num_groups` + should be specified if using `group_index`. This is useful in + distributed setting where one wants to ensure that different data is + read by different workers. + """ + if subset not in tables: + raise ValueError(f'Invalid subset {subset}. ' + f'The available subsets are: {set(tables)}') + + for modality in modalities: + if modality not in ASRTFRecordDatasetFactory._MODALITIES: + raise ValueError('Invalid modality %s.' % modality) + self._modalities = modalities + + super().__init__( + base_dir=base_dir, + tables=self.construct_tables(tables), + examples_per_subset=self.construct_examples_per_subset(tables), + subset=subset, + num_classes=0, + fraction_data=prop_data, + num_groups=num_groups, + group_index=group_index) + + def construct_tables(self, splits): + ret = {} + for split, dic in splits.items(): + ret[split] = dic['path'] + return ret + + def construct_examples_per_subset(self, splits): + ret = {} + for split, dic in splits.items(): + ret[split] = dic['len'] + return ret + + def _build( + self, + is_training: bool = True, + # Video related parameters. + num_frames: int = 32, + stride: int = 1, + num_spec_frames: int = 5, + dataset_spec_mean: float = 0., + dataset_spec_stddev: float = 1., + num_test_clips: int = 1, + min_resize: int = 256, + crop_size: int = 224, + # Audio related parameters. + spec_compute_online: bool = False, + spec_shape: Tuple[int, int] = (100, 80), + spec_augment: bool = False, + spec_augment_params=None, + num_waveform_samples: int = 32000, + waveform_stride: int = 1, + zero_centering_image: bool = False, + spec_from_wave_sample_rate: int = 16000, + spec_from_wave_snr: float = -1.0, + spec_from_wave_add_gaussian_noise: bool = False, + spec_from_wave_add_masking_noise: bool = False, + spec_from_wave_visualness_threshold: float = 0.2, + spec_from_wave_random_mask_noise_rate: float = 0.4, + spec_from_wave_max_word_len: int = 128, + spec_from_wave_extend_mask_boundaries_ms: float = 0., + spec_from_wave_max_num_masks: int = -1, + spec_from_wave_add_word_mask: bool = True, + spec_from_wave_add_word_mask_info: bool = False, + spec_from_wave_eval_noise_types: Optional[Sequence[str]] = None, + spec_from_wave_environment_noise_path: Optional[str] = None, + spec_from_wave_eval_noise_configs: Optional[Dict[str, Dict[str, + Any]]] = None, + spectrogram_type: str = 'logmf', + spec_frame_length: int = 400, # Corresponds to 25ms with 16K sampl rate. + spec_frame_step: int = 160, # Corresponds to 10ms with 16K sampl rate. + spec_num_features: int = 80, + spec_lower_edge_hertz: float = 0.0, + spec_upper_edge_hertz: float = 7600.0, + # Text related parameters. + max_num_words: int = 16, + max_num_captions: int = 1, + tokenizer: Optional[tokenizers.TextTokenizer] = None, + prepend_bos: bool = True, + append_eos: bool = True, + caption_string: str = 'caption/label/string', + # Masked word prediction related parameters. + masked_word_pred_aligned_caption_string: str = 'caption/label/string', + masked_word_pred_max_num_tokens: int = 8, + masked_word_pred_patch_size: Sequence[int] = (), + masked_word_pred_max_num_masked_input_indices: int = 64, + ): + """Adds DMVR pre-processors to the dataset. + + Args: + is_training: whether or not in training mode. + num_frames: number of frames per subclip. + stride: temporal stride to sample frames. + num_spec_frames: number of spectrogram frames. + dataset_spec_mean: Mean of spectrograms in the dataset. + dataset_spec_stddev: Std dev of spectrograms in the dataset. + num_test_clips: number of test clip (1 by default). If more than one, this + will sample multiple linearly spaced clips within each video at test + time. If 1, then a single clip in the middle of the video is sampled. + min_resize: frames are resized so that min width/height is min_resize. + crop_size: final size of the frame after cropping the resized frames. + spec_compute_online: whether to compute spectrograms on the fly. + spec_shape: input size of spectrogram per frame. + spec_augment: whether to apply augmentation using SpecAugment. + spec_augment_params: parameters for SpecAugment. + num_waveform_samples: Number of waveform samples to use, defaults to 32000 + which corresponds to two seconds at 16kHz sampling rate. + waveform_stride: Temporal stride to sample waveform. + zero_centering_image: whether to have images between [-1, 1] or [0, 1]. + spec_from_wave_sample_rate: spectrogram computation parameter. The sample + rate of the input audio. + spec_from_wave_snr: spectrogram computation parameter. Signal-to-noise + ratio used to inject white noise. The default value None or non-positive + values disable the noise injection. Noise is add to non-training + examples only by default. Training noise is added if `add_train_noise` + is `True`. + spec_from_wave_add_gaussian_noise: Whether to add Gaussian noise. + spec_from_wave_add_masking_noise: If the noise type is word masking noise. + spec_from_wave_visualness_threshold: The threshold for determining the + visual words. + spec_from_wave_random_mask_noise_rate: The random mask noise sampling + ratio. If 1, the word masking is deterministic. If below 1, the masking + noise is random and each word is masked out with this chance. + spec_from_wave_max_word_len: Maximum length of the words. This is used to + pad and truncate noise_word_mask added to the batch dictionary in the + word masking noise addition. + spec_from_wave_extend_mask_boundaries_ms: If set, the start and end + boundaries of each maksing region in the signal is extended. + spec_from_wave_max_num_masks: Maximum number of word masks to apply. -1 + means unlimited. + spec_from_wave_add_word_mask: If set, add masks indicating masked words + into the batch dict. Used for computing recovery rate of the masked + words. + spec_from_wave_add_word_mask_info: If set, add word masking related + information such as timestamps and masks to the batch dict. Used for + applying masked word prediction loss. + spec_from_wave_eval_noise_types: A tuple of noise type strings used in + evaluation. Each string should be either `environment_noise` or + `packet_loss_noise`. + spec_from_wave_environment_noise_path: Path to the npy file containing + noise waveforms in numpy array. + spec_from_wave_eval_noise_configs: A dict of noise config dicts for each + noise type listed in `spec_from_wave_eval_noise_types`. + spectrogram_type: spectrogram computation parameter. The type of the + spectrogram to be extracted from the waveform. Can be either + `spectrogram`, `logmf`, and `mfcc`. + spec_frame_length: spectrogram computation parameter. The length of each + spectroram frame. + spec_frame_step: spectrogram computation parameter. The stride of + spectrogram frames. + spec_num_features: spectrogram computation parameter. The number of + spectrogram features. + spec_lower_edge_hertz: spectrogram computation parameter. Lowest frequency + to consider. + spec_upper_edge_hertz: spectrogram computation parameter. Highest + frequency to consider. + max_num_words: Maximum number of tokens to keep from the text for each + caption. If there are more tokens, sequence is cropped, if less, the + caption is padded using the tokenizer pad id. + max_num_captions: Maximum number of captions to keep. If there are more + captions in the proto, only the first `max_num_captions` will be + returned is `is_training` is set to `False`. If `is_training` is `True`, + then `max_num_captions` will be randomly sampled. Finally if the proto + contains less than `max_num_captions`, we pad with empty srings to make + sure there are `max_num_captions` in total. + tokenizer: An instance of a tokenizer. + prepend_bos: Whether to prepend BOS token. + append_eos: Whether to append EOS token. + caption_string: Input feature name in sstable for caption. + masked_word_pred_aligned_caption_string: The feature name to parse to + extract the caption aligned with the timestamps. Used for the masked + word prediction. + masked_word_pred_max_num_tokens: Maximum number of tokens for each masked + word. + masked_word_pred_patch_size: The patch size used in the network + architecture for spectrogram token embedding. Used to compute the token + index. + masked_word_pred_max_num_masked_input_indices: Maximum number of masked + input tokens (spectrogram tokens). + """ + # We set sync_random_state to True so that sample_offset_proportion is + # the same for all modalities. + if 'rgb' in self._modalities: + load_modalities.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + is_training=is_training, + num_frames=num_frames, + stride=stride, + num_test_clips=num_test_clips, + min_resize=min_resize, + crop_size=crop_size, + zero_centering_image=zero_centering_image, + sync_random_state=True, + ) + if 'spectrogram' in self._modalities: + if spec_compute_online: + if spec_from_wave_eval_noise_configs is None: + spec_from_wave_eval_noise_configs = {} + add_spectrogram_from_audio( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + preprocessor_builder=self.preprocessor_builder, + is_training=is_training, + spectrogram_type=spectrogram_type, + sample_rate=spec_from_wave_sample_rate, + snr=spec_from_wave_snr, + add_gaussian_noise=spec_from_wave_add_gaussian_noise, + add_masking_noise=spec_from_wave_add_masking_noise, + visualness_score_threshold=spec_from_wave_visualness_threshold, + random_mask_noise_rate=spec_from_wave_random_mask_noise_rate, + max_word_len=spec_from_wave_max_word_len, + extend_mask_boundaries_ms=spec_from_wave_extend_mask_boundaries_ms, + max_num_masks=spec_from_wave_max_num_masks, + add_word_mask=spec_from_wave_add_word_mask, + add_word_mask_info=spec_from_wave_add_word_mask_info, + eval_noise_types=spec_from_wave_eval_noise_types, + environment_noise_path=spec_from_wave_environment_noise_path, + **spec_from_wave_eval_noise_configs, + frame_length=spec_frame_length, + frame_step=spec_frame_step, + num_features=spec_num_features, + lower_edge_hertz=spec_lower_edge_hertz, + upper_edge_hertz=spec_upper_edge_hertz, + num_frames=num_spec_frames, + spec_augment=spec_augment, + spec_augment_params=spec_augment_params, + zero_centering_image=zero_centering_image, + dataset_mean=dataset_spec_mean, + dataset_stddev=dataset_spec_stddev, + word_tokenizer=tokenizer, + aligned_caption_feature_name=masked_word_pred_aligned_caption_string, + prepend_bos=prepend_bos, + append_eos=append_eos, + max_num_word_tokens=masked_word_pred_max_num_tokens, + patch_size=masked_word_pred_patch_size, + max_num_masked_input_indices=masked_word_pred_max_num_masked_input_indices, + ) + else: + add_spectrogram( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_feature_name='melspec/feature/floats', + input_shape=spec_shape, + is_training=is_training, + num_frames=num_spec_frames, + num_test_clips=num_test_clips, + spec_augment=spec_augment, + spec_augment_params=spec_augment_params, + zero_centering_image=zero_centering_image, + dataset_mean=dataset_spec_mean, + dataset_stddev=dataset_spec_stddev, + ) + if 'waveform' in self._modalities: + load_modalities.add_audio( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + postprocessor_builder=self.postprocessor_builder, + output_feature_name='waveform', + is_training=is_training, + num_samples=num_waveform_samples, + stride=waveform_stride, + num_test_clips=num_test_clips, + sync_random_state=True, + ) + + add_text( + parser_builder=self.parser_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + tokenizer=tokenizer, + is_training=is_training, + input_feature_name=caption_string, + prepend_bos=prepend_bos, + append_eos=append_eos, + max_num_captions=max_num_captions, + max_num_tokens=max_num_words, + keep_raw_string=False if is_training else True + ) + + add_int64( + parser_builder=self.parser_builder, + decoder_builder=self.decoder_builder, + feature_name='clip/start/timestamp', + output_name='clip/start/timestamp') + add_int64( + parser_builder=self.parser_builder, + decoder_builder=self.decoder_builder, + feature_name='clip/end/timestamp', + output_name='clip/end/timestamp') + + def keep_only_short_videos(sample: builders.FeaturesDict) -> tf.Tensor: + """Filter out the videos that are too long.""" + duration = sample['clip/end/timestamp'] - sample['clip/start/timestamp'] + duration = tf.cast(duration, tf.float32) + duration = duration * 1E-6 + max_duration = float(num_spec_frames) + duration_ok = tf.reshape(tf.less(duration, max_duration), []) + return duration_ok + + if is_training: + # Filter out the videos that are too long to fit in the encoder. + # Otherwise the model could be trained to hallucinate words corresponding + # to the cropped-out parts of the audio input. + self.filter_builder.add_filter_fn(keep_only_short_videos, + builders.Phase.DECODE) + + +def load_split_from_dmvr( + ds_factory, + batch_size, + subset='train', + modalities=('rgb'), + num_frames=32, + stride=2, + num_spec_frames=5, + num_test_clips=1, + min_resize=256, + crop_size=224, + spec_shape=(96, 64), + dataset_spec_mean=0., + dataset_spec_stddev=1., + spec_augment=False, + spec_augment_params=None, + num_waveform_samples=32000, + waveform_stride=1, + zero_centering=True, + spec_compute_online: bool = False, + spec_from_wave_sample_rate: int = 16000, + spec_from_wave_snr: Optional[float] = None, + spec_from_wave_add_gaussian_noise: bool = False, + spec_from_wave_add_masking_noise: bool = False, + spec_from_wave_visualness_threshold: float = 0.2, + spec_from_wave_random_mask_noise_rate: float = 0.4, + spec_from_wave_max_word_len: int = 128, + spec_from_wave_extend_mask_boundaries_ms: float = 0., + spec_from_wave_max_num_masks: int = -1, + spec_from_wave_add_word_mask: bool = True, + spec_from_wave_add_word_mask_info: bool = False, + spec_from_wave_eval_noise_types: Optional[Sequence[str]] = None, + spec_from_wave_environment_noise_path: Optional[str] = None, + spec_from_wave_eval_noise_configs: Optional[Dict[str, Dict[str, + Any]]] = None, + spectrogram_type: str = 'logmf', + spec_frame_length: int = 400, + spec_frame_step: int = 160, + spec_num_features: int = 80, + spec_lower_edge_hertz: float = 0.0, + spec_upper_edge_hertz: float = 7600.0, + augmentation_params=None, + keep_key=False, + max_num_words: int = 16, + max_num_captions: int = 1, + tokenizer_type='bert', + tokenizer_vocab=None, + prepend_bos: bool = False, + append_eos: bool = True, + caption_string='caption/string', + masked_word_pred_aligned_caption_string: str = 'caption/label/string', + masked_word_pred_max_num_tokens: int = 8, + masked_word_pred_patch_size: Sequence[int] = (), + masked_word_pred_max_num_masked_input_indices: int = 64): + """Loads dataset using DMVR for pre-processing. + + DMVR dataset loader already does basic augmentation (random crop and flip in + train mode. It also already shuffles and batches the data. + + Args: + ds_factory: A DMVR factory to instantiate with the subset. + batch_size: The batch_size to use. + subset: train, validation or test. + modalities: list of input modalities. + num_frames: Number of RGB frames per subclip. + stride: Temporal stride to sample RGB frames. + num_spec_frames: Number of spectrogram frames per subclip. + num_test_clips: Number of test clips (1 by default). If more than 1, this + will sample multiple linearly spaced clips within each video at test time. + If 1, then a single clip in the middle of the video is sampled. The clips + are aggreagated in the batch dimension. + min_resize: Frames are resized so that min(height, width) is min_resize. + crop_size: Final size of the frame after cropping the resized frames. Both + height and width are the same. + spec_shape: Input size of spectrogram per frame. + dataset_spec_mean: Mean of spectrograms in the dataset. + dataset_spec_stddev: Std dev of spectrograms in the dataset. + spec_augment: whether to apply augmentation using SpecAugment. + spec_augment_params: dict; augmentation configurations for SpecAugment + num_waveform_samples: Number of waveform samples to use, defaults to 32000 + which corresponds to two seconds at 16kHz sampling rate. + waveform_stride: Temporal stride to sample waveform. + zero_centering: If True, frames are normalized to values in [-1, 1]. If + False, values in [0, 1]. + spec_compute_online: whether to compute spectrograms on the fly. + spec_from_wave_sample_rate: spectrogram computation parameter. The sample + rate of the input audio. + spec_from_wave_snr: spectrogram computation parameter. Signal-to-noise ratio + used to inject white noise. The default value None or non-positive values + disable the noise injection. Noise is add to non-training examples only by + default. Training noise is added if `add_train_noise` is `True`. + spec_from_wave_add_gaussian_noise: Whether to add Gaussian noise. + spec_from_wave_add_masking_noise: If the noise type is word masking noise. + spec_from_wave_visualness_threshold: The threshold for determining the + visual words. + spec_from_wave_random_mask_noise_rate: The random mask noise sampling + ratio. If 1, the word masking is deterministic. If below 1, + the masking noise is random and each word is masked out with this + chance. + spec_from_wave_max_word_len: Maximum length of the words. This is used to + pad and truncate noise_word_mask added to the batch dictionary in the word + masking noise addition. + spec_from_wave_extend_mask_boundaries_ms: If set, the start and end + boundaries of each maksing region in the signal is extended. + spec_from_wave_max_num_masks: Maximum number of word masks to apply. -1 + means unlimited. + spec_from_wave_add_word_mask: If set, add masks indicating masked words + into the batch dict. Used for computing recovery rate of the masked + words. + spec_from_wave_add_word_mask_info: If set, add word masking related + information such as timestamps and masks to the batch dict. Used for + applying masked word prediction loss. + spec_from_wave_eval_noise_types: A tuple of noise type strings used in + evaluation. Each string should be either `environment_noise` or + `packet_loss_noise`. + spec_from_wave_environment_noise_path: Path to the npy file containing + noise waveforms in numpy array. + spec_from_wave_eval_noise_configs: A dict of noise config dicts for each + noise type listed in `spec_from_wave_eval_noise_types`. + spectrogram_type: spectrogram computation parameter. The type of the + spectrogram to be extracted from the waveform. Can be either + `spectrogram`, `logmf`, and `mfcc`. + spec_frame_length: spectrogram computation parameter. The length of each + spectroram frame. + spec_frame_step: spectrogram computation parameter. The stride of + spectrogram frames. + spec_num_features: spectrogram computation parameter. The number of + spectrogram features. + spec_lower_edge_hertz: spectrogram computation parameter. Lowest frequency + to consider. + spec_upper_edge_hertz: spectrogram computation parameter. Highest frequency + to consider. + augmentation_params: dict; augmentation configurations in train mode. + keep_key: bool; If true, also return the key for each example. + max_num_words: Maximum number of tokens to keep from the text for each + caption. If there are more tokens, sequence is cropped, if less, the + caption is padded using the tokenizer pad id. + max_num_captions: Maximum number of captions to keep. If there are more + captions in the proto, only the first `max_num_captions` will be returned + is `is_training` is set to `False`. If `is_training` is `True`, then + `max_num_captions` will be randomly sampled. Finally if the proto contains + less than `max_num_captions`, we pad with empty srings to make sure there + are `max_num_captions` in total. + tokenizer_type: The type of tokenizer. Supported types: ('bert',). + tokenizer_vocab: The path to the tokenizer vocabulary. + prepend_bos: Whether to prepend BOS token. + append_eos: Whether to append EOS token. + caption_string: Input feature name in sstable for caption. + masked_word_pred_aligned_caption_string: The feature name to parse to + extract the caption aligned with the timestamps. Used for the masked + word prediction. + masked_word_pred_max_num_tokens: Maximum number of tokens for each masked + word. + masked_word_pred_patch_size: The patch size used in the network architecture + for spectrogram token embedding. Used to compute the token index. + masked_word_pred_max_num_masked_input_indices: Maximum number of masked + input tokens (spectrogram tokens). + + Returns: + A pair `(ds, num_examples)` with + ds: A `tf.data.Dataset` object + num_examples: Number of examples in the dataset. + """ + is_training = (subset == 'train') + + if tokenizer_type == 'bert': + assert tokenizer_vocab + tokenizer = tokenizers.BertTokenizer(tokenizer_vocab) + else: + raise ValueError('Tokenizer not supported') + vocab_size = int(tokenizer.vocab_size) + logging.info('vocab_size %d', vocab_size) + logging.info('EOS token: %d', tokenizer.eos_token) + # Init the TF models of the tokenizer. + tokenizer.initialize() + + ds_factory = ds_factory( + subset=subset, modalities=modalities + ).configure( + is_training=is_training, + num_frames=num_frames, + stride=stride, + num_spec_frames=num_spec_frames, + num_test_clips=num_test_clips, + min_resize=min_resize, + crop_size=crop_size, + spec_shape=spec_shape, + dataset_spec_mean=dataset_spec_mean, + dataset_spec_stddev=dataset_spec_stddev, + spec_augment=spec_augment, + spec_augment_params=spec_augment_params, + spec_compute_online=spec_compute_online, + spec_from_wave_sample_rate=spec_from_wave_sample_rate, + spec_from_wave_snr=spec_from_wave_snr, + spec_from_wave_add_gaussian_noise=spec_from_wave_add_gaussian_noise, + spec_from_wave_add_masking_noise=spec_from_wave_add_masking_noise, + spec_from_wave_visualness_threshold=spec_from_wave_visualness_threshold, + spec_from_wave_random_mask_noise_rate=( + spec_from_wave_random_mask_noise_rate), + spec_from_wave_max_word_len=spec_from_wave_max_word_len, + spec_from_wave_extend_mask_boundaries_ms=( + spec_from_wave_extend_mask_boundaries_ms), + spec_from_wave_max_num_masks=spec_from_wave_max_num_masks, + spec_from_wave_add_word_mask=spec_from_wave_add_word_mask, + spec_from_wave_add_word_mask_info=spec_from_wave_add_word_mask_info, + spec_from_wave_eval_noise_types=spec_from_wave_eval_noise_types, + spec_from_wave_environment_noise_path=spec_from_wave_environment_noise_path, + spec_from_wave_eval_noise_configs=spec_from_wave_eval_noise_configs, + spectrogram_type=spectrogram_type, + spec_frame_length=spec_frame_length, + spec_frame_step=spec_frame_step, + spec_num_features=spec_num_features, + spec_lower_edge_hertz=spec_lower_edge_hertz, + spec_upper_edge_hertz=spec_upper_edge_hertz, + num_waveform_samples=num_waveform_samples, + waveform_stride=waveform_stride, + zero_centering_image=zero_centering, + max_num_words=max_num_words, + max_num_captions=max_num_captions, + tokenizer=tokenizer, + prepend_bos=prepend_bos, + append_eos=append_eos, + caption_string=caption_string, + masked_word_pred_aligned_caption_string=masked_word_pred_aligned_caption_string, + masked_word_pred_max_num_tokens=masked_word_pred_max_num_tokens, + masked_word_pred_patch_size=masked_word_pred_patch_size, + masked_word_pred_max_num_masked_input_indices=masked_word_pred_max_num_masked_input_indices, + ) + + if 'rgb' in modalities and is_training and augmentation_params: + # additional augmentation for the RGB features. + ds_factory = video_ops.additional_augmentations(ds_factory, + augmentation_params, + crop_size, num_frames, + zero_centering) + + logging.info('Preprocessing graph: %s', + ds_factory.preprocessor_builder.get_summary()) + logging.info('Postprocessing graph: %s', + ds_factory.postprocessor_builder.get_summary()) + + # Val and test splits are a single epoch otherwise the last + # batch is not padded with zeros but with valid examples + num_examples = ds_factory.num_examples + ds = ds_factory.make_dataset( + batch_size=batch_size, + shuffle=is_training, + num_epochs=None if is_training else 1, + drop_remainder=is_training, + keep_key=(not is_training and keep_key)) + + if not is_training: + # Repeat indefinitely + ds = ds.repeat(None) + + options = tf.data.Options() + options.experimental_threading.private_threadpool_size = 48 + ds = ds.with_options(options) + + return ds, num_examples + + +def map_keys(batch, modalities=('rgb'), return_as_dict=False): + """DMVR dataset returns 'image' and 'label'. We want 'inputs' and 'label'.""" + if not return_as_dict: + if len(modalities) == 1 and modalities[0] == 'rgb': + batch['inputs'] = batch['image'] + elif len(modalities) == 1 and modalities[0] == 'spectrogram': + batch['inputs'] = batch['spectrogram'] + elif len(modalities) == 1 and modalities[0] == 'waveform': + batch['inputs'] = batch['waveform'] + else: + raise NotImplementedError('modality not supported by map_keys.') + else: + batch['inputs'] = {} + if 'rgb' in modalities: + batch['inputs']['rgb'] = batch['image'] + batch.pop('image') + if 'spectrogram' in modalities: + batch['inputs']['spectrogram'] = batch['spectrogram'] + batch.pop('spectrogram') + if 'waveform' in modalities: + batch['inputs']['waveform'] = batch['waveform'] + batch.pop('waveform') + batch['targets'] = batch['text_indices'] + batch.pop('text_indices') + return batch + + +@datasets.add_dataset('av_asr_tfrecord_dataset') +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, # pylint:disable=unused-argument + rng=None, + dataset_configs, + dataset_service_address: Optional[str] = None): + """Returns a generator for the audiovisual dataset.""" + del rng + dataset_configs = dataset_configs or {} + modalities = dataset_configs.get('modalities', ['rgb']) + return_as_dict = dataset_configs.get('return_as_dict', True) + # RGB related configs. + num_frames = dataset_configs.get('num_frames', 32) + stride = dataset_configs.get('stride', 2) + eval_stride = dataset_configs.get('eval_stride', stride) + min_resize = dataset_configs.get('min_resize', 256) + crop_size = dataset_configs.get('crop_size', 224) + # Spectrogram related configs. + num_spec_frames = dataset_configs.get('num_spec_frames', 25) + eval_num_spec_frames = dataset_configs.get('eval_num_spec_frames', + num_spec_frames) + spec_shape = dataset_configs.get('spec_shape', (100, 80)) + spec_augment = dataset_configs.get('spec_augment', False) + spec_augment_params = dataset_configs.get('spec_augment_params', None) + dataset_spec_mean = dataset_configs.get('spec_mean', 0.) + dataset_spec_stddev = dataset_configs.get('spec_stddev', 1.) + # Waveform related configs + num_waveform_samples = dataset_configs.get('num_waveform_samples', 16000) + eval_num_waveform_samples = dataset_configs.get('eval_num_waveform_samples', + num_waveform_samples) + waveform_stride = dataset_configs.get('waveform_stride', 1) + # Spectrogram computation related configs + spec_compute_online = dataset_configs.get('spec_compute_online', False) + spec_from_wave_sample_rate = dataset_configs.get('spec_from_wave_sample_rate', + 16000) + spec_from_wave_snr = dataset_configs.get('spec_from_wave_snr', None) + spec_from_wave_add_gaussian_noise = dataset_configs.get( + 'spec_from_wave_add_gaussian_noise', False) + spec_from_wave_add_train_masking_noise = dataset_configs.get( + 'spec_from_wave_add_train_masking_noise', False) + spec_from_wave_visualness_threshold = dataset_configs.get( + 'spec_from_wave_visualness_threshold', None) + spec_from_wave_random_mask_noise_rate = dataset_configs.get( + 'spec_from_wave_random_mask_noise_rate', 0.4) + spec_from_wave_max_word_len = dataset_configs.get( + 'spec_from_wave_max_word_len', 0) + spec_from_wave_extend_mask_boundaries_ms = dataset_configs.get( + 'spec_from_wave_extend_mask_boundaries_ms', 0.) + spec_from_wave_max_num_masks = dataset_configs.get( + 'spec_from_wave_max_num_masks', 16) + spec_from_wave_add_word_mask = dataset_configs.get( + 'spec_from_wave_add_word_mask', False) + spec_from_wave_add_word_mask_info = dataset_configs.get( + 'spec_from_wave_add_word_mask_info', False) + spec_from_wave_eval_noise_configs = dataset_configs.get( + 'spec_from_wave_eval_noise_configs', None) + spec_from_wave_environment_noise_path = dataset_configs.get( + 'spec_from_wave_environment_noise_path', None) + spectrogram_type = dataset_configs.get('spectrogram_type', 'logmf') + spec_frame_length = dataset_configs.get('spec_frame_length', 400) + spec_frame_step = dataset_configs.get('spec_frame_step', 160) + spec_num_features = dataset_configs.get('spec_num_features', 80) + spec_lower_edge_hertz = dataset_configs.get('spec_lower_edge_hertz', 0.0) + spec_upper_edge_hertz = dataset_configs.get('spec_upper_edge_hertz', 7600.0) + masked_word_pred_aligned_caption_string = dataset_configs.get( + 'masked_word_pred_aligned_caption_string', 'caption/label/string') + masked_word_pred_max_num_tokens = dataset_configs.get( + 'masked_word_pred_max_num_tokens', 8) + masked_word_pred_patch_size = dataset_configs.get( + 'masked_word_pred_patch_size', []) + masked_word_pred_max_num_masked_input_indices = dataset_configs.get( + 'masked_word_pred_max_num_masked_input_indices', 32) + # General configs. + num_eval_clips = dataset_configs.get('num_eval_clips', 1) + zero_centre_data = dataset_configs.get('zero_centering', True) + augmentation_params = dataset_configs.get('augmentation_params', None) + num_train_val_clips = dataset_configs.get('num_train_val_clips', 1) + do_three_spatial_crops = dataset_configs.get('do_three_spatial_crops', False) + num_spatial_crops = 3 if do_three_spatial_crops else 1 + + # Should hold two fields: tokenizer_type and tokenizer_vocab. + tokenizer_config = dataset_configs.get('tokenizer', {}) + max_num_words = dataset_configs.get('max_num_words', 16) + eval_max_num_words = dataset_configs.get('eval_max_num_words', max_num_words) + max_num_captions = dataset_configs.get('max_num_captions', 1) + caption_string = dataset_configs.get('caption_string', 'clip/label/string') + + if (spec_from_wave_add_train_masking_noise and + spec_from_wave_visualness_threshold is None): + raise ValueError( + '`spec_from_wave_visualness_threshold` must be specified when ' + '`spec_from_wave_add_train_masking_noise` is True') + + def validate_config(field): + if dataset_configs.get(field) is None: + raise ValueError(f'{field} must be specified for TFRecord dataset.') + + validate_config('base_dir') + validate_config('tables') + + ds_factory = functools.partial( + ASRTFRecordDatasetFactory, + base_dir=dataset_configs.get('base_dir'), + tables=dataset_configs.get('tables'), + num_groups=jax.process_count(), + group_index=jax.process_index(), + ) + + def create_dataset_iterator( + subset: Text, + batch_size_local: int, + num_clips: int, + caption_string: str, + stride: int, + num_spec_frames: int, + num_waveform_samples: int, + max_num_words: int, + keep_key_local: bool = True, + add_masking_noise: bool = False, + eval_noise_types: Optional[Sequence[str]] = None, + eval_noise_configs: Optional[Dict[str, Dict[str, Any]]] = None, + ) -> Tuple[Iterator[Batch], int]: + + is_training = subset == 'train' + is_test = subset == 'test' + logging.info('Loading split %s', subset) + + # TODO(phseo): Remove duplicates and pass the dict itself. + dataset, num_examples = load_split_from_dmvr( + ds_factory, + batch_size=batch_size_local, + subset=subset, + modalities=modalities, + num_frames=num_frames, + stride=stride, + num_spec_frames=num_spec_frames, + num_test_clips=num_clips, + min_resize=min_resize, + crop_size=crop_size, + spec_shape=spec_shape, + dataset_spec_mean=dataset_spec_mean, + dataset_spec_stddev=dataset_spec_stddev, + spec_augment=spec_augment, + spec_augment_params=spec_augment_params, + spec_compute_online=spec_compute_online, + spec_from_wave_sample_rate=spec_from_wave_sample_rate, + spec_from_wave_snr=spec_from_wave_snr, + spec_from_wave_add_gaussian_noise=spec_from_wave_add_gaussian_noise, + spec_from_wave_add_masking_noise=add_masking_noise, + spec_from_wave_visualness_threshold=( + spec_from_wave_visualness_threshold), + spec_from_wave_random_mask_noise_rate=( + spec_from_wave_random_mask_noise_rate), + spec_from_wave_max_word_len=spec_from_wave_max_word_len, + spec_from_wave_extend_mask_boundaries_ms=( + spec_from_wave_extend_mask_boundaries_ms), + spec_from_wave_max_num_masks=spec_from_wave_max_num_masks, + spec_from_wave_add_word_mask=spec_from_wave_add_word_mask, + spec_from_wave_add_word_mask_info=spec_from_wave_add_word_mask_info, + spec_from_wave_eval_noise_types=eval_noise_types, + spec_from_wave_environment_noise_path=spec_from_wave_environment_noise_path, + spec_from_wave_eval_noise_configs=eval_noise_configs, + spectrogram_type=spectrogram_type, + spec_frame_length=spec_frame_length, + spec_frame_step=spec_frame_step, + spec_num_features=spec_num_features, + spec_lower_edge_hertz=spec_lower_edge_hertz, + spec_upper_edge_hertz=spec_upper_edge_hertz, + num_waveform_samples=num_waveform_samples, + waveform_stride=waveform_stride, + zero_centering=zero_centre_data, + augmentation_params=augmentation_params, + keep_key=keep_key_local, + max_num_words=max_num_words, + max_num_captions=max_num_captions, + **tokenizer_config, + caption_string=caption_string, + masked_word_pred_aligned_caption_string=masked_word_pred_aligned_caption_string, + masked_word_pred_max_num_tokens=masked_word_pred_max_num_tokens, + masked_word_pred_patch_size=masked_word_pred_patch_size, + masked_word_pred_max_num_masked_input_indices=masked_word_pred_max_num_masked_input_indices, + ) + + if dataset_service_address and is_training: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + dataset = dataset_utils.distribute(dataset, dataset_service_address) + + pad_batch_size = batch_size_local + if is_test: + pad_batch_size = batch_size_local * num_clips * num_spatial_crops + maybe_pad_batches = functools.partial( + maybe_pad_batch, + train=is_training, + batch_size=pad_batch_size, + return_as_dict=return_as_dict) + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + current_iter = iter(dataset) + current_iter = map(dataset_utils.tf_to_numpy, current_iter) + current_iter = map( + functools.partial( + map_keys, modalities=modalities, return_as_dict=return_as_dict), + current_iter) + current_iter = map(_convert_key_string_to_int, current_iter) + if not is_training: + current_iter = map(_convert_caption_string_to_int, current_iter) + current_iter = map(maybe_pad_batches, current_iter) + + if augmentation_params and augmentation_params.get('do_mixup', False): + raise ValueError('mixup should be done in the trainer.') + + current_iter = map(shard_batches, current_iter) + + if is_training and dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + current_iter = jax_utils.prefetch_to_device( + current_iter, dataset_configs.get('prefetch_to_device')) + + return current_iter, num_examples + + train_iter, n_train_examples = create_dataset_iterator( + 'train', batch_size, num_train_val_clips, caption_string, stride, + num_spec_frames, num_waveform_samples, max_num_words, + add_masking_noise=spec_from_wave_add_train_masking_noise) + eval_iter, n_eval_examples = create_dataset_iterator( + 'val', eval_batch_size, num_eval_clips, caption_string, eval_stride, + eval_num_spec_frames, eval_num_waveform_samples, eval_max_num_words) + test_iter, n_test_examples = create_dataset_iterator( + 'test', eval_batch_size, num_eval_clips, caption_string, eval_stride, + eval_num_spec_frames, eval_num_waveform_samples, eval_max_num_words) + if spec_from_wave_eval_noise_configs: + test_iter = [test_iter] + for noise_types, configs in spec_from_wave_eval_noise_configs.items(): + noise_types = noise_types.split(',') + for config in configs: + test_iter.append( + create_dataset_iterator( + 'test', eval_batch_size, num_eval_clips, caption_string, + eval_stride, eval_num_spec_frames, eval_num_waveform_samples, + eval_max_num_words, eval_noise_types=noise_types, + eval_noise_configs=config)[0] + ) + + meta_data = { + # pylint:disable=protected-access + 'num_train_examples': (n_train_examples * num_train_val_clips), + 'num_eval_examples': (n_eval_examples * num_eval_clips), + 'num_test_examples': + (n_test_examples * num_eval_clips * num_spatial_crops), + 'input_dtype': getattr(jnp, dtype_str) + } + + # Set the input shapes + input_shapes = { + 'rgb': (-1, num_frames, crop_size, crop_size, 3), + 'spectrogram': (-1, num_spec_frames * spec_shape[0], spec_shape[1], 3), + 'waveform': (-1, num_waveform_samples), + } + meta_data['input_shape'] = {} + for modality, shape in input_shapes.items(): + if modality in modalities: + meta_data['input_shape'][modality] = shape + + meta_data['target_shape'] = (-1, max_num_words) + meta_data['target_dtype'] = jnp.int32 + + if spec_from_wave_add_word_mask_info: + meta_data['masked_token_idxs_shape'] = ( + -1, spec_from_wave_max_num_masks, + masked_word_pred_max_num_masked_input_indices) + meta_data['masked_token_idx_masks_shape'] = ( + -1, spec_from_wave_max_num_masks, + masked_word_pred_max_num_masked_input_indices) + meta_data['masked_word_targets_shape'] = ( + -1, spec_from_wave_max_num_masks, + masked_word_pred_max_num_tokens) + meta_data['masked_token_idxs_dtype'] = jnp.int32 + meta_data['masked_token_idx_masks_dtype'] = jnp.int32 + meta_data['masked_word_targets_dtype'] = jnp.int32 + + logging.info('Number of training examples: %d', + meta_data['num_train_examples']) + logging.info('Number of validation examples: %d', + meta_data['num_eval_examples']) + logging.info('Number of test examples: %d', meta_data['num_test_examples']) + + return dataset_utils.Dataset(train_iter, eval_iter, test_iter, meta_data) diff --git a/scenic/projects/avatar/datasets/dataset_utils.py b/scenic/projects/avatar/datasets/dataset_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..4be20d38d2ee108a0eb8aeabfb82aa54f4919bfc --- /dev/null +++ b/scenic/projects/avatar/datasets/dataset_utils.py @@ -0,0 +1,1081 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utility functions for datasets that process SequenceExample.""" + +import functools +from typing import Any, Dict, Optional, Sequence + +from absl import logging +from dmvr import builders +from dmvr import processors +from dmvr import tokenizers +import numpy as np +from scenic.projects.mbt.datasets.dataset_utils import _decode_spectrogram +from scenic.projects.mbt.datasets.dataset_utils import apply_specaugment +import tensorflow as tf + + +VALID_EVAL_NOISE_TYPES = ['environment_noise', 'packet_loss_noise'] + + +def pad_first_dim(sequence, max_len, pad_value): + """Pads the first dimension of the input `sequence` to `max_len`.""" + sequence_length = tf.shape(sequence)[0] + padding_pattern = [ + [0, tf.maximum(0, max_len - sequence_length)], + ] + + num_dim = len(tf.shape(sequence)) + if num_dim > 1: + padding_pattern.extend([[0, 0]] * (num_dim - 1)) + return tf.pad( + tensor=sequence, paddings=padding_pattern, constant_values=pad_value) + + +def normalize_input(signal, normalization_threshold=5e-4): + """Normalizes the signal to the [-1, 1] range.""" + sig_min = tf.reduce_min(signal, name='norm_min', keepdims=True) + sig_max = tf.reduce_max(signal, name='norm_max', keepdims=True) + # Don't normalize silent noise. + sig_delta = tf.maximum( + (sig_max - sig_min) * 0.5, normalization_threshold, name='norm_delta') + return (signal - sig_min) / sig_delta - 1.0 + + +def add_white_noise(wave_tensor, snr): + """Adds deterministic gaussian white noise to the signal. + + While setting a global seeds does not guarrantee the deterministic per-sample + noise generation due to the intrinsic randomness in the TF dataloading + process. Instead, we generate the seeds from the input signal and generate + noise from the stateless normal sampling process. This effectively sample + deterministic noise per sample while the noise varies between samples. (A + constant seed for all sample would generate identical noise for all samples, + which is not a desired behavior.) + + Args: + wave_tensor: Input tensor containing the raw wave signal. + snr: The signal to noise ratio to determine the power of the noise. + + Returns: + Output signal with gaussian white noise injected. + """ + pos = tf.reduce_mean(tf.square(wave_tensor)) + nos = pos / snr + # Deterministically create the noise using the input signal as the seeds. + # The seeds are determined by the sums of the positive and negative signals. + positive_sum = tf.cast(tf.reduce_sum(tf.maximum(wave_tensor, 0)), tf.int32) + negative_sum = tf.cast(tf.reduce_sum(tf.maximum(-wave_tensor, 0)), tf.int32) + noise = tf.random.stateless_normal( + tf.shape(wave_tensor), + seed=[positive_sum, negative_sum], + stddev=tf.sqrt(nos), + dtype=wave_tensor.dtype) + + return wave_tensor + noise + + +def mask_word_with_white_noise(wave_tensor, snr, word_mask, word_sts, word_ets, + sample_rate, extend_boundaries_ms): + """Add word masking noise to the signal. + + Masks out wave signal that correspond to words indicated by word_mask. Each + masked part is filled with Gaussian white noise whose power is determined by + snr. + + Args: + wave_tensor: Input tensor containing the raw wave signal. + snr: The signal to noise ratio to determine the power of the white noise + filled in the masked region. If None, the regions are zeroed out. + word_mask: A boolean mask tensor where the words to mask are marked as True. + word_sts: The start timestamps of the words. + word_ets: The end timestamps of the words. + sample_rate: The sample rate of the input wave signal. + extend_boundaries_ms: If set, the start and end boundaries of each masking + region in the signal is extended. + + Returns: + Output signal with word masking noise injected. + """ + if snr is not None and snr > 0.0: + pos = tf.reduce_mean(tf.square(wave_tensor)) + nos = pos / snr + # Deterministically create the noise using the input signal as the seeds. + # The seeds are determined by the sums of the positive and negative signals. + positive_sum = tf.cast(tf.reduce_sum(tf.maximum(wave_tensor, 0)), tf.int32) + negative_sum = tf.cast(tf.reduce_sum(tf.maximum(-wave_tensor, 0)), tf.int32) + noise = tf.random.stateless_normal( + tf.shape(wave_tensor), + seed=[positive_sum, negative_sum], + stddev=tf.sqrt(nos), + dtype=wave_tensor.dtype) + else: + noise = 0 + + target_word_sts = tf.boolean_mask(word_sts, word_mask) - extend_boundaries_ms + target_word_ets = tf.boolean_mask(word_ets, word_mask) + extend_boundaries_ms + + timestamps = (tf.range(tf.shape(wave_tensor)[0], dtype=tf.float32) / + sample_rate) * 1000 + timestamps = tf.repeat(timestamps[None, :], tf.shape(target_word_sts)[0], 0) + + time_mask = tf.logical_and( + tf.greater_equal(timestamps, target_word_sts[:, None]), + tf.less_equal(timestamps, target_word_ets[:, None])) + time_mask = tf.cast(tf.reduce_any(time_mask, 0), tf.float32) + + noised_wave_tensor = wave_tensor * (1 - time_mask) + noise * time_mask + return noised_wave_tensor, target_word_sts, target_word_ets + + +def add_visual_word_masking_noise( + batch, + wave_feature_name: str, + snr: float = 1.0, + sample_rate: int = 16000, + vis_threshold: float = 0.2, + max_word_len: int = 128, + mask_rate: float = 0.4, + max_num_masks: int = -1, + extend_boundaries_ms: float = 0., + add_word_mask: bool = True, + add_word_mask_info: bool = False, +): + """Add word masking noise to the wave signal in the input batch. + + Masks out wave signal that correspond to words indicated by word_mask. Each + masked part is filled with Gaussian white noise whose power is determined by + snr. If snr is None, Gaussian white noise filling is not performed. When + mask_rate < 1.0, the target words are randomly selected with the probability + of mask_rate and only the selected words are masked out. + + Args: + batch: The input batch dictionary. + wave_feature_name: Dictionary key for the raw wave feature. + snr: The signal to noise ratio to determine the power of the white noise. If + None, the target regions are simply zeroed out. + sample_rate: The sample rate of the input wave signal. + vis_threshold: The threshold for the visualness scores of the input words. + max_word_len: Maximum length of the words. This is used to pad and truncate + noise_word_mask which is added in the batch dictionary. + mask_rate: The masking ratio used for random mask generation. + max_num_masks: The maximum number of masks to keep. If the number of mask + candidates are larger than this, the masks are randomly subsampled to + match this number. If -1, all masks are kept. + extend_boundaries_ms: If set, the start and end boundaries of each maksing + region in the signal is extended. + add_word_mask: If set, add raw word mask into the batch dict. Used to + compute recovery rate. + add_word_mask_info: If set, add word masking related information including + timestamps and length to be used for computing masked word prediction + loss. + + Returns: + The updated batch dictionary where the wave signal is updated with the noise + injected one. + """ + + vis_score = batch['visualness_score'] + word_sts = batch['word_start_timestamp'] + word_ets = batch['word_end_timestamp'] + wave_tensor = batch[wave_feature_name] + + word_mask = vis_score > vis_threshold + + logging.info('mask_rate: %f', mask_rate) + if mask_rate < 1.0: + logging.info('doing random masking') + random_mask = tf.random.uniform(tf.shape(word_mask)) < mask_rate + word_mask = tf.logical_and(random_mask, word_mask) + + logging.info('max_num_masks: %d', max_num_masks) + logging.info('word_mask: %s', word_mask) + + if max_num_masks > -1: + if tf.reduce_sum(tf.cast(word_mask, tf.int32)) > max_num_masks: + indices = tf.where(word_mask) + indices = tf.random.shuffle(indices)[:max_num_masks] + word_mask = tf.cast( + tf.scatter_nd( + tf.cast(indices, tf.int32), tf.ones(max_num_masks), + tf.shape(word_mask)), tf.bool) + + if add_word_mask: + logging.info('adding noise_word_mask') + # This is for computing word recovery rate + batch['noise_word_mask'] = pad_first_dim(word_mask[:max_word_len], + max_word_len, 0) + + batch[wave_feature_name], word_start_timestamp, word_end_timestamp = ( + mask_word_with_white_noise(wave_tensor, snr, word_mask, word_sts, + word_ets, sample_rate, extend_boundaries_ms)) + + if add_word_mask_info: + # This is for masked word prediction loss + batch['mwp_word_mask'] = word_mask + batch['mwp_start_timestamp'] = word_start_timestamp + batch['mwp_end_timestamp'] = word_end_timestamp + batch['mwp_wave_length'] = tf.math.divide( + tf.cast(tf.size(wave_tensor), tf.float32), + tf.cast(sample_rate, tf.float32)) * 1000. + + del batch['word_start_timestamp'], batch['word_end_timestamp'], batch[ + 'visualness_score'] + + return batch + + +def tokenize_masked_words(batch, tokenizer, max_num_tokens, prepend_bos, + append_eos): + """Tokenize masked words and add them to the batch in `masked_targets` field.""" + + caption_string = batch['mwp_caption_string'][0] + word_mask = batch['mwp_word_mask'] + masked_word_strings = tf.boolean_mask( + tf.strings.split(caption_string), word_mask) + + tokenized = tokenizer.string_tensor_to_indices( + masked_word_strings, + prepend_bos=prepend_bos, + append_eos=append_eos, + max_num_tokens=max_num_tokens) + + batch['masked_targets'] = tokenized + + del batch['mwp_word_mask'], batch['mwp_caption_string'] + + return batch + + +def convert_ms_to_frame_number(batch, spectrogram_feature_name): + """Convert start timestamps in microsec into the frame numbers.""" + word_start_timestamp = batch['mwp_start_timestamp'] + word_end_timestamp = batch['mwp_end_timestamp'] + wave_length = batch['mwp_wave_length'] + spectrogram = batch[spectrogram_feature_name] + + start_idxs = tf.cast( + tf.math.divide_no_nan(word_start_timestamp, wave_length) + * tf.cast((tf.shape(spectrogram)[0] - 1), tf.float32), tf.int32) + end_idxs = tf.cast( + tf.math.divide_no_nan(word_end_timestamp, wave_length) + * tf.cast((tf.shape(spectrogram)[0] - 1), tf.float32), tf.int32) + + batch['mwp_start_indices'] = start_idxs + batch['mwp_end_indices'] = end_idxs + + del batch['mwp_wave_length'], batch['mwp_start_timestamp'], batch[ + 'mwp_end_timestamp'] + + return batch + + +def finalize_word_mask_info(batch, spectrogram_feature_name, patch_size, + max_num_word_masks, max_num_masked_input_indices): + """Format the word mask related information in the batch dict.""" + spectrogram = batch[spectrogram_feature_name] + len_spec = tf.shape(spectrogram)[0] + num_feats = tf.shape(spectrogram)[1] + + len_spec = tf.cast(len_spec / patch_size[0], tf.int32) * patch_size[0] + + start_idxs = batch['mwp_start_indices'] + end_idxs = batch['mwp_end_indices'] + masked_targets = batch['masked_targets'] + + oor_mask = tf.less(start_idxs, len_spec) + + start_idxs = tf.boolean_mask(start_idxs, oor_mask) + end_idxs = tf.boolean_mask(end_idxs, oor_mask) + masked_targets = tf.boolean_mask(masked_targets, oor_mask, axis=0) + + # now convert spectrogram index to token index using patch size + start_idxs = tf.math.divide( + tf.cast(start_idxs, tf.float32), tf.cast(patch_size[0], tf.float32)) + end_idxs = tf.math.divide( + tf.cast(end_idxs, tf.float32), tf.cast(patch_size[0], tf.float32)) + + num_tokens_per_step = tf.cast(tf.math.divide( + tf.cast(num_feats, tf.int32), tf.cast(patch_size[1], tf.int32)), tf.int32) + start_token_index = tf.cast(start_idxs, tf.int32) * num_tokens_per_step + end_token_index = tf.cast(end_idxs + 1, tf.int32) * num_tokens_per_step + + token_length = tf.cast(len_spec / patch_size[0], + tf.int32) * num_tokens_per_step + idx_pool = tf.range(token_length, dtype=tf.int32) + word_token_idx_mask = tf.logical_and( + tf.greater_equal(idx_pool[None, :], start_token_index[:, None]), + tf.less(idx_pool[None, :], end_token_index[:, None])) + + masked_input_idxs = tf.ragged.boolean_mask( + tf.tile(idx_pool[None, :], [tf.size(start_token_index), 1]), + word_token_idx_mask) + valid_input_idx_mask = tf.ones_like(masked_input_idxs) + + batch['masked_targets'] = pad_first_dim(masked_targets, + max_num_word_masks, 0) + batch['masked_input_token_indices'] = masked_input_idxs.to_tensor( + shape=[max_num_word_masks, max_num_masked_input_indices]) + batch['valid_input_token_index_mask'] = valid_input_idx_mask.to_tensor( + shape=[max_num_word_masks, max_num_masked_input_indices]) + + del batch['mwp_start_indices'], batch['mwp_end_indices'] + + return batch + + +# Eval noise addition should be deterministic for each example. +def add_packet_loss_noise(wave_tensor, max_num_bursts, max_length_rate): + """Simulate burst packet loss noise deterministically to the input `wave_tensor`. + + Args: + wave_tensor: The input waveform signals to add noise to. + max_num_bursts: The number of burst losses to simulate. + max_length_rate: The maximum ratio of each burst loss length to the input + signal length. The ratio is uniformly sampled for each burst loss in range + (0, max_rength_rate]. + + Returns: + Noise injected waveform signals. + """ + positive_sum = tf.cast(tf.reduce_sum(tf.maximum(wave_tensor, 0)), tf.int32) + negative_sum = tf.cast(tf.reduce_sum(tf.maximum(-wave_tensor, 0)), tf.int32) + + max_length = tf.cast( + tf.round(tf.cast(tf.size(wave_tensor), tf.float32) * max_length_rate), + tf.int32) + + mask_lengths = tf.random.stateless_uniform([max_num_bursts], + [positive_sum, negative_sum], + 1, + max_length + 1, + dtype=tf.int32) + + mask_start_idxs = tf.math.floormod( + tf.abs( + tf.random.stateless_uniform([max_num_bursts], + [positive_sum + 1, negative_sum + 1], + None, + None, + dtype=tf.int32)), + tf.size(wave_tensor) - mask_lengths) + + mask_end_idxs = mask_start_idxs + mask_lengths + + timestamps = tf.repeat( + tf.range(tf.size(wave_tensor))[None, :], max_num_bursts, 0) + + time_mask = tf.logical_and( + tf.greater_equal(timestamps, mask_start_idxs[:, None]), + tf.less(timestamps, mask_end_idxs[:, None])) + time_mask = tf.cast(tf.reduce_any(time_mask, 0), tf.float32) + + noised_wave_tensor = wave_tensor * (1 - time_mask) + + return noised_wave_tensor + + +def add_environment_noise(wave_tensor, snr, noise_db): + """Adds random environment noise deterministically chosen from `noise_db`. + + Args: + wave_tensor: The input waveform signals to add noise to. + snr: The signal to noise ratio for controlling the power of the noise. + noise_db: A two dimensional tensor where the first dimension corresponds to + the number of noise on which we sample the random noise. + + Returns: + Noise injected waveform signals. + """ + + positive_sum = tf.cast(tf.reduce_sum(tf.maximum(wave_tensor, 0)), tf.int32) + negative_sum = tf.cast(tf.reduce_sum(tf.maximum(-wave_tensor, 0)), tf.int32) + + snr = tf.cast(snr, wave_tensor.dtype) + + noise_idx = tf.random.stateless_uniform([], [positive_sum, negative_sum], 0, + tf.shape(noise_db)[0], tf.int32) + target_noise = tf.cast(noise_db[noise_idx], wave_tensor.dtype) + + pos = tf.reduce_mean(tf.square(wave_tensor)) + if tf.size(target_noise) >= tf.size(wave_tensor): + start_idx = tf.random.stateless_uniform( + [], [positive_sum + 1, negative_sum + 1], 0, + tf.size(target_noise) - tf.size(wave_tensor) + 1, tf.int32) + target_noise = target_noise[start_idx:start_idx + tf.size(wave_tensor)] + nos = tf.reduce_mean(tf.square(target_noise)) + else: + start_idx = tf.random.stateless_uniform( + [], [positive_sum + 1, negative_sum + 1], 0, + tf.size(wave_tensor) - tf.size(target_noise) + 1, tf.int32) + nos = tf.reduce_mean(tf.square(target_noise)) + target_noise = tf.pad(target_noise, [[ + start_idx, + tf.size(wave_tensor) - (start_idx + tf.size(target_noise)) + ]]) + + multiplier = tf.math.divide_no_nan( + 1., tf.sqrt(tf.math.divide_no_nan(nos * snr, pos))) + wave_tensor = wave_tensor + target_noise * multiplier + + return wave_tensor + + +def add_spectrogram_from_audio( + parser_builder, + sampler_builder, + preprocessor_builder, + input_feature_name='WAVEFORM/feature/floats', + output_feature_name='spectrogram', + is_training=True, + # Wave related parameters (stride is always assumed to be 1). + sample_rate: int = 16000, + add_gaussian_noise: bool = False, + add_masking_noise: bool = False, + snr: Optional[float] = None, + visualness_score_threshold: float = 0.2, + random_mask_noise_rate: float = 0.4, + max_word_len: int = 128, + max_num_masks: int = -1, + extend_mask_boundaries_ms: float = 0., + add_word_mask: bool = True, + add_word_mask_info: bool = False, + eval_noise_types: Sequence[str] = tuple(), + environment_noise_configs: Optional[Dict[str, Any]] = None, + environment_noise_path: Optional[str] = None, + packet_loss_noise_configs: Optional[Dict[str, Any]] = None, + aligned_caption_feature_name: str = 'caption/label/string', + word_tokenizer: Optional[tokenizers.TextTokenizer] = None, + max_num_word_tokens: int = 8, + prepend_bos: bool = True, + append_eos: bool = True, + patch_size: Sequence[int] = tuple(), + max_num_masked_input_indices: int = 64, + # Spectrogram computation parameters. + spectrogram_type: str = 'logmf', + frame_length: int = 400, + frame_step: int = 160, + num_features: int = 80, + lower_edge_hertz: float = 80.0, + upper_edge_hertz: float = 7600.0, + # Spectrogram related parameters. + num_frames=5, + spec_augment=True, + spec_augment_params=None, + zero_centering_image=False, + dataset_mean=0.0, + dataset_stddev=1.0, +): + """Add audio spectrogram computed from waveform. + + Args: + parser_builder: An instance of a builders.BaseParserBuilder. + sampler_builder: An instance of a builders.SamplerBuilder. + preprocessor_builder: An instance of a builders.PreprocessorBuilder. + input_feature_name: Name of the feature in the input SequenceExample. + Exposing this as an argument allows using this function for different + image features. + output_feature_name: Name of the feature in the output features dictionary. + is_training: Whether or not in training mode. + sample_rate: The sample rate of the input audio. + add_gaussian_noise: Whether to add Gaussian noise. + add_masking_noise: Whether to add word masking noise. + snr: Signal-to-noise ratio used to inject white noise. For word masking + noise, white noise is added to the masked region. If None, no white noise + is added to the masked region. + visualness_score_threshold: The threshold for determining the visual words. + random_mask_noise_rate: The random mask noise sampling ratio. If 1, the word + masking is deterministic. If below 1, the masking noise is random and each + word is masked out with this chance. + max_word_len: Maximum length of the words. This is used to pad and truncate + noise_word_mask added to the batch dictionary in the word masking noise + addition. + max_num_masks: Maximum number of word masks to apply. -1 means unlimited. + extend_mask_boundaries_ms: If set, the start and end boundaries of each + maksing region in the signal is extended. + add_word_mask: If set, add masks indicating masked words into the batch + dict. Used for computing recovery rate of the masked words. + add_word_mask_info: If set, add word masking related information such as + timestamps and masks to the batch dict. Used for applying masked word + prediction loss. + eval_noise_types: A tuple of noise type strings used in evaluation. Each + string should be either `environment_noise` or `packet_loss_noise`. + environment_noise_configs: A config dict for environment noise addition. + Used if eval_noise_types contain `environment_noise`. The dict contains + `snr`. + environment_noise_path: Path to the npy file containing noise waveforms in + numpy array. + packet_loss_noise_configs: A config dict for packet loss noise addition. + Used if eval_noise_types contain `packet_loss_noise`. The dict contains + `max_num_bursts` and `max_length_rate`. + aligned_caption_feature_name: The feature name to parse to extract the + caption aligned with the timestamps. Used for the masked word prediction. + word_tokenizer: Tokenizer used to tokenize the masked words for masked word + prediction. + max_num_word_tokens: Maximum number of tokens for each masked word. + prepend_bos: Whether to add BOS token to a tokenized word. + append_eos: Whether to add EOS token to a tokenized word. + patch_size: The patch size used in the network architecture for spectrogram + token embedding. Used to compute the token index. + max_num_masked_input_indices: Maximum number of masked input tokens + (spectrogram tokens). + spectrogram_type: The type of the spectrogram to be extracted from the + waveform. Can be either `spectrogram`, `logmf`, and `mfcc`. + frame_length: The length of each spectroram frame. + frame_step: The stride of spectrogram frames. + num_features: The number of spectrogram features. + lower_edge_hertz: Lowest frequency to consider. + upper_edge_hertz: Highest frequency to consider. crop are used. + num_frames: Number of seconds to sample per subclip. + spec_augment: Whether to apply augmentation using SpecAugment. + spec_augment_params: Dict of parameters for SpecAugment. + zero_centering_image: If `True`, frames are normalized to values in [-1, 1]. + If `False`, values in [0, 1]. + dataset_mean: Mean of values over the dataset. + dataset_stddev: Standard deviation of values of the dataset. + """ + + ############################################################################## + ### Load audio signal and sample from the beginning. + ############################################################################## + # Keep audio signal. + parser_builder.parse_feature( + feature_name=input_feature_name, + # Entire signal stored in one Feature. + feature_type=tf.io.VarLenFeature(dtype=tf.float32), + output_name=output_feature_name) + + # Densify and flatten. + sampler_builder.add_fn( + fn=lambda x: tf.reshape(tf.sparse.to_dense(x), [-1]), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_sparse_to_dense') + + # Add noise + if eval_noise_types: + for noise_type in eval_noise_types: + if noise_type not in VALID_EVAL_NOISE_TYPES: + raise ValueError(f'noise_type `{noise_type}` not supported.') + if 'environment_noise' in eval_noise_types: + # Load environment noise samples dumped in a numpy array in a .npy file. + with tf.io.gfile.GFile(environment_noise_path, 'rb') as f: + noise_db = tf.constant(np.load(f), tf.float32) + sampler_builder.add_fn( + fn=functools.partial( + add_environment_noise, + **environment_noise_configs, + noise_db=noise_db), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_add_environment_noise' + ) + if 'packet_loss_noise' in eval_noise_types: + sampler_builder.add_fn( + fn=functools.partial(add_packet_loss_noise, + **packet_loss_noise_configs), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_add_packet_loss_noise') + + if add_masking_noise: + logging.info('Adding word masking noise to the signal.') + # First, parse related data: visualness score, word start and end timestamps + parser_builder.parse_feature( + feature_name='clip/label/align/visualness', + feature_type=tf.io.VarLenFeature(dtype=tf.float32), + output_name='visualness_score', + is_context=True) + + parser_builder.parse_feature( + feature_name='clip/label/align/start_ms', + feature_type=tf.io.VarLenFeature(dtype=tf.float32), + output_name='word_start_timestamp', + is_context=True) + + parser_builder.parse_feature( + feature_name='clip/label/align/end_ms', + feature_type=tf.io.VarLenFeature(dtype=tf.float32), + output_name='word_end_timestamp', + is_context=True) + + # Densify and flatten. + sampler_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name='visualness_score', + fn_name='visualness_score_sparse_to_dense') + + sampler_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name='word_start_timestamp', + fn_name='word_start_timestamp_sparse_to_dense') + + sampler_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name='word_end_timestamp', + fn_name='word_end_timestamp_sparse_to_dense') + + sampler_builder.add_fn( + fn=functools.partial( + add_visual_word_masking_noise, + wave_feature_name=output_feature_name, + snr=snr, + sample_rate=sample_rate, + vis_threshold=visualness_score_threshold, + max_word_len=max_word_len, + mask_rate=random_mask_noise_rate, + max_num_masks=max_num_masks, + extend_boundaries_ms=extend_mask_boundaries_ms, + add_word_mask=add_word_mask, + add_word_mask_info=add_word_mask_info), + fn_name=f'{output_feature_name}_add_masking_noise') + elif add_gaussian_noise and snr is not None and snr > 0.0: + logging.info('Adding Gaussian white noise to the signal.') + sampler_builder.add_fn( + fn=lambda x: add_white_noise(x, snr), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_add_white_noise') + else: + logging.info('Adding no noise to the signal.') + + # Normalize the waveform before spectrogram computation. + sampler_builder.add_fn( + fn=normalize_input, + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_normalize') + + ############################################################################## + ### Compute spectrograms from the loaded audio. + ############################################################################## + # Extract audio spectrograms. + sampler_builder.add_fn( + functools.partial( + processors.compute_audio_spectrogram, + sample_rate=sample_rate, + spectrogram_type=spectrogram_type, + frame_length=frame_length, + frame_step=frame_step, + num_features=num_features, + lower_edge_hertz=lower_edge_hertz, + upper_edge_hertz=upper_edge_hertz, + audio_feature_name=output_feature_name, + spectrogram_feature_name=output_feature_name)) + + ############################################################################## + ### Generate meta data needed for masked word prediction. + ############################################################################## + if add_masking_noise and add_word_mask_info: + sampler_builder.add_fn( + fn=functools.partial( + convert_ms_to_frame_number, + spectrogram_feature_name=output_feature_name), + fn_name='word_mask_info_convert_ms_to_frame_number') + add_text_untokenized( + parser_builder, sampler_builder, aligned_caption_feature_name, + 'mwp_caption_string') + sampler_builder.add_fn( + fn=functools.partial( + tokenize_masked_words, + tokenizer=word_tokenizer, + max_num_tokens=max_num_word_tokens, + prepend_bos=prepend_bos, + append_eos=append_eos), + fn_name='word_mask_info_tokenize_masked_words') + + ############################################################################## + ### Preprocess the computed spectrograms. + ############################################################################## + + # We apply spec_augment after the signal truncation but before padding. + # In this way, we apply spec_augment to the valid signals only excluding + # padding and the truncated non-target signals. + + # Temporal sampling (beginning_sample) + num_time_bins = tf.cast( + num_frames * (sample_rate / frame_step), dtype=tf.int32) + preprocessor_builder.add_fn( + fn=lambda x: x[:num_time_bins], + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_beginning_sample') + + preprocessor_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x: _decode_spectrogram(x, True, zero_centering_image, + dataset_mean, dataset_stddev), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_decode_spectrogram') + + if is_training and spec_augment: + # Apply specaugment + preprocessor_builder.add_fn( + fn=lambda x, s=None: apply_specaugment(x, spec_augment_params), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_specaugment') + + # Padding + pad_value = .0 + preprocessor_builder.add_fn( + fn=lambda x: pad_first_dim(x, num_time_bins, pad_value), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_pad') + + ############################################################################## + ### Finalize the word mask info by truncating, padding and converting indices. + ############################################################################## + if add_masking_noise and add_word_mask_info: + preprocessor_builder.add_fn( + fn=functools.partial( + finalize_word_mask_info, + spectrogram_feature_name=output_feature_name, + patch_size=patch_size, + max_num_word_masks=max_num_masks, + max_num_masked_input_indices=max_num_masked_input_indices), + fn_name='finalize_word_mask_info') + + +def add_spectrogram( + parser_builder, + sampler_builder, + decoder_builder, + preprocessor_builder, + postprocessor_builder, + input_feature_name='melspec/feature/floats', + input_shape=(100, 128), # (frames, num_mel_bins) + output_feature_name='spectrogram', + is_training=True, + num_frames=5, + num_test_clips=1, + spec_augment=True, + spec_augment_params=None, + zero_centering_image=False, + dataset_mean=0.0, + dataset_stddev=1.0,): + """Add audio spectrogram. + + Args: + parser_builder: An instance of a builders.BaseParserBuilder. + sampler_builder: An instance of a builders.SamplerBuilder. + decoder_builder: An instance of a builders.DecoderBuilder. + preprocessor_builder: An instance of a builders.PreprocessorBuilder. + postprocessor_builder: An instance of a builders.PostprocessorBuilder. + input_feature_name: Name of the feature in the input SequenceExample. + Exposing this as an argument allows using this function for different + image features. + input_shape: Shape of the input spectrogram. + output_feature_name: Name of the feature in the output features dictionary. + is_training: Whether or not in training mode. If True, random sample, and + crop are used. + num_frames: Number of seconds to sample per subclip. + num_test_clips: Number of test clips (1 by default). If more than 1, this + will sample multiple linearly spaced clips within each video at test time. + If 1, then a single clip in the middle of the video is sampled. The clips + are aggreagated in the batch dimension. + spec_augment: Whether to apply augmentation using SpecAugment. + spec_augment_params: Dict of parameters for SpecAugment. + zero_centering_image: If `True`, frames are normalized to values in [-1, 1]. + If `False`, values in [0, 1]. + dataset_mean: Mean of values over the dataset. + dataset_stddev: Standard deviation of values of the dataset. + """ + if is_training and num_test_clips != 1: + logging.info('`num_test_clips` %d is ignored since `is_training` is true.', + num_test_clips) + if isinstance(parser_builder, builders.SequenceExampleParserBuilder): + parser_builder.parse_feature( + feature_name=input_feature_name, + feature_type=tf.io.FixedLenSequenceFeature( + shape=input_shape, dtype=tf.float32), + output_name=output_feature_name) + else: + raise ValueError('`parser_builder` has an unexpected type.') + + # Temporal sampler. + num_time_bins = num_frames * input_shape[0] + sampler_builder.add_fn( + fn=lambda x: tf.reshape(x, (-1, input_shape[1])), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_sampler_reshape') + + # Get the first num_time_bins of the sequence. + sampler_builder.add_fn( + fn=lambda x: x[:num_time_bins], + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_beginning_sample') + + # pylint: disable=g-long-lambda + decoder_builder.add_fn( + fn=lambda x: _decode_spectrogram(x, True, zero_centering_image, + dataset_mean, dataset_stddev), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_decode_spectrogram') + # pylint: enable=g-long-lambda + + if is_training and spec_augment: + # Apply specaugment + preprocessor_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x, s=None: apply_specaugment(x, spec_augment_params), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_specaugment') + + # Pad if necessary. + pad_value = .0 + preprocessor_builder.add_fn( + fn=lambda x: pad_first_dim(x, num_time_bins, pad_value), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_pad') + + if num_test_clips > 1 and not is_training: + # In this case, multiple clips are merged together in batch dimenstion which + # will be `B * num_test_clips`. + postprocessor_builder.add_fn( + fn=lambda x: tf.reshape( # pylint: disable=g-long-lambda + x, (-1, num_time_bins, x.shape[2], x.shape[3])), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_reshape') + + +def add_text( + parser_builder: builders.BaseParserBuilder, + decoder_builder: builders.DecoderBuilder, + preprocessor_builder: builders.PreprocessorBuilder, + tokenizer: tokenizers.TextTokenizer, + is_training: bool = True, + input_feature_name: str = 'caption/string', + output_raw_string_name: str = 'raw_caption', + output_feature_name: str = builders.TEXT_INDICES_FEATURE_NAME, + # Text related parameters. + prepend_bos: bool = False, + append_eos: bool = False, + keep_raw_string: bool = False, + max_num_captions: int = 1, + max_num_tokens: int = 16, + sync_random_state: bool = False): + """Adds functions to process text feature to builders. + + This function expects the input to be either a `tf.train.SequenceExample` + (with the features in the context) or a `tf.train.Example`. The expected + structure is (or equivalent for `tf.train.Example`): + ``` + context { + feature { + key: input_feature_name + value { + bytes_list { + value: "Hello world!" + value: "This is a caption." + ... + } + } + } + } + ``` + + The corresponding `builders.ExampleParserBuilder` or + `builders.SequenceExampleParserBuilder` has to be given as parameter. + + Args: + parser_builder: An instance of a `builders.BaseParserBuilder`. + decoder_builder: An instance of a `builders.DecoderBuilder`. + preprocessor_builder: An instance of a `builders.PreprocessorBuilder`. + tokenizer: An instance of a tokenizer. + is_training: Whether or not in training mode. This will be used to randomly + sample the captions. + input_feature_name: Name of the feature in the input `tf.train.Example` or + `tf.train.SequenceExample`. Exposing this as an argument allows using this + function for different text features within a single dataset. + output_raw_string_name: Name of the raw string in the output features + dictionary. Exposing this as an argument allows using this function for + different text features within a single dataset. + output_feature_name: Name of the feature in the output features dictionary. + Exposing this as an argument allows using this function for different text + features. + prepend_bos: Whether to prepend BOS token. + append_eos: Whether to append EOS token. + keep_raw_string: Whether to keep raw string. + max_num_captions: Maximum number of captions to keep. If there are more + captions in the proto, only the first `max_num_captions` will be returned + is `is_training` is set to `False`. If `is_training` is `True`, then + `max_num_captions` will be randomly sampled. Finally if the proto contains + less than `max_num_captions`, we pad with empty srings to make sure there + are `max_num_captions` in total. + max_num_tokens: Maximum number of tokens to keep from the text for each + caption. If there are more tokens, sequence is cropped, if less, the + caption is padded using the tokenizer pad id. The sequence is unmodified + if max_num_tokens is None. + sync_random_state: Whether to use stateful option to keep random operations + in sync between different modalities. All modalities having this option + `True` will use the same outcome in random operations used for sampling + the captions. + """ + # Parse text indices. + if isinstance(parser_builder, builders.SequenceExampleParserBuilder): + parser_builder.parse_feature( + feature_name=input_feature_name, + feature_type=tf.io.VarLenFeature(dtype=tf.string), + output_name=output_raw_string_name, + is_context=True) + elif isinstance(parser_builder, builders.ExampleParserBuilder): + parser_builder.parse_feature( + feature_name=input_feature_name, + feature_type=tf.io.VarLenFeature(dtype=tf.string), + output_name=output_raw_string_name) + + # Densify text tensor. + decoder_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name=output_raw_string_name, + fn_name=f'{output_feature_name}_sparse_to_dense') + + preprocessor_builder.add_fn( + # pylint: disable=g-long-lambda + lambda x, s=None: processors.sample_or_pad_non_sorted_sequence( + x, max_num_captions, b'', random=is_training, state=s), + # pylint: enable=g-long-lambda + feature_name=output_raw_string_name, + fn_name=f'{output_feature_name}_sample_captions', + # Use state to keep coherence between modalities if requested. + stateful=sync_random_state) + + preprocessor_builder.add_fn( + fn=lambda x: format_text( # pylint: disable=g-long-lambda + x, output_raw_string_name, output_raw_string_name), + fn_name=f'{output_feature_name}_formatting') + + # Tokenize the sentence. + preprocessor_builder.add_fn( + fn=lambda x: processors.tokenize( # pylint: disable=g-long-lambda + x, tokenizer, output_raw_string_name, output_feature_name, + prepend_bos, append_eos, max_num_tokens, keep_raw_string), + fn_name=f'{output_feature_name}_tokenization') + + if max_num_tokens is not None: + # Set text shape. + shape = (max_num_captions, max_num_tokens) + preprocessor_builder.add_fn( + fn=lambda x: processors.set_shape(x, shape), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_set_shape') + + +def add_text_untokenized( + parser_builder: builders.BaseParserBuilder, + decoder_builder: builders.DecoderBuilder, + input_feature_name: str = 'caption/string', + output_raw_string_name: str = builders.TEXT_FEATURE_NAME): + """Adds functions to process text feature to builders.""" + + # Parse text indices. + if isinstance(parser_builder, builders.SequenceExampleParserBuilder): + parser_builder.parse_feature( + feature_name=input_feature_name, + feature_type=tf.io.VarLenFeature(dtype=tf.string), + output_name=output_raw_string_name, + is_context=True) + elif isinstance(parser_builder, builders.ExampleParserBuilder): + parser_builder.parse_feature( + feature_name=input_feature_name, + feature_type=tf.io.VarLenFeature(dtype=tf.string), + output_name=output_raw_string_name) + + # Densify text tensor. + decoder_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name=output_raw_string_name, + fn_name=f'{output_raw_string_name}_sparse_to_dense') + + +def add_int64(parser_builder: builders.BaseParserBuilder, + decoder_builder: builders.DecoderBuilder, + feature_name: str = 'clip/label/index', + output_name: str = 'label_index'): + """Adds functions to process integer feature to builders. + + This function expects the input to be either a `tf.train.SequenceExample` + (with the features in the context) or a `tf.train.Example`. The expected + structure is (or equivalent for `tf.train.Example`): + ``` + context { + feature { + key: input_label_index_feature_name + value { + int64_list { + value: 42 + ... + } + } + } + } + ``` + + The corresponding `builders.ExampleParserBuilder` or + `builders.SequenceExampleParserBuilder` has to be given as parameter. + + Args: + parser_builder: An instance of a `builders.BaseParserBuilder`. + decoder_builder: An instance of a `builders.DecoderBuilder`. + feature_name: Name of the label index feature in the input + `tf.train.Example` or `tf.train.SequenceExample`. Exposing this as an + argument allows using this function for different label features within a + single dataset. + output_name: Name of the label index feature in the output features + dictionary. Exposing this as an argument allows using this function for + different label features within a single dataset. + """ + + # Parse label. + if isinstance(parser_builder, builders.SequenceExampleParserBuilder): + parser_builder.parse_feature( + feature_name=feature_name, + feature_type=tf.io.VarLenFeature(dtype=tf.int64), + output_name=output_name, + is_context=True) + elif isinstance(parser_builder, builders.ExampleParserBuilder): + parser_builder.parse_feature( + feature_name=feature_name, + feature_type=tf.io.VarLenFeature(dtype=tf.int64), + output_name=output_name) + else: + raise ValueError('`parser_builder` has an unexpected type.') + + # Densify tensor + decoder_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name=output_name, + fn_name=f'{output_name}_sparse_to_dense') + + +def custom_standardization(input_data): + # Removes punctuation + lowercase = tf.strings.lower(input_data) + ret = tf.strings.regex_replace( + lowercase, + '[!"\\#\\$%\\&\\(\\)\\*\\+,\\-\\./:;<=>\\?@\\[\\\\\\]\\^_`\\{\\|\\}\\~]', + '') + return ret + + +def format_text(features: builders.FeaturesDict, raw_string_name: str, + formated_name: str, + keep_raw_string: bool = False) -> builders.FeaturesDict: + """Tokenize raw string with tokenizer.""" + raw_caption = features[raw_string_name] + + formated = custom_standardization(raw_caption) + + if not keep_raw_string: + del features[raw_string_name] + + features[formated_name] = formated + return features diff --git a/scenic/projects/avatar/decode.py b/scenic/projects/avatar/decode.py new file mode 100644 index 0000000000000000000000000000000000000000..a15665b6d28253c65357fc80c4176ad95c973cc1 --- /dev/null +++ b/scenic/projects/avatar/decode.py @@ -0,0 +1,369 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Fast decoding routines at inference from a trained model. + +From third_party/py/flax/examples/wmt/decode.py +""" + +import typing +import flax +import jax +from jax import lax +import jax.numpy as jnp +import numpy as np + +# Constants +# We assume the default End-of-Sentence token id is 1 +EOS_ID = 1 +# "Effective negative infinity" constant for masking in beam search. +NEG_INF = np.array(-1.0e7) + + +def brevity_penalty(alpha, length): + """Brevity penalty function for beam search penalizing short sequences. + + Args: + alpha: float: brevity-penalty scaling parameter. + length: int: length of considered sequence. + + Returns: + Brevity penalty score as jax scalar. + """ + return jnp.power(((5.0 + length) / 6.0), alpha) + + +# Beam handling utility functions: + + +def add_beam_dim(x, beam_size): + """Creates new beam dimension in non-scalar array and tiles into it.""" + if x.ndim == 0: # ignore scalars (e.g. cache index) + return x + x = jnp.expand_dims(x, axis=1) + tile_dims = [1] * x.ndim + tile_dims[1] = beam_size + return jnp.tile(x, tile_dims) + + +def flatten_beam_dim(x): + """Flattens the first two dimensions of a non-scalar array.""" + if x.ndim == 0: # ignore scalars (e.g. cache index) + return x + return x.reshape((x.shape[0] * x.shape[1],) + x.shape[2:]) + + +def unflatten_beam_dim(x, batch_size, beam_size): + """Unflattens the first, flat batch*beam dimension of a non-scalar array.""" + if x.ndim == 0: # ignore scalars (e.g. cache index) + return x + assert batch_size * beam_size == x.shape[0] + return x.reshape((batch_size, beam_size) + x.shape[1:]) + + +def flat_batch_beam_expand(x, beam_size): + """Expands the each batch item by beam_size in batch_dimension.""" + return flatten_beam_dim(add_beam_dim(x, beam_size)) + + +def gather_beams(nested, beam_indices, batch_size, new_beam_size): + """Gathers the beam slices indexed by beam_indices into new beam array. + + Args: + nested: pytree of arrays or scalars (the latter ignored). + beam_indices: array of beam_indices + batch_size: int: size of batch. + new_beam_size: int: size of _new_ beam dimension. + + Returns: + New pytree with new beam arrays. + [batch_size, old_beam_size, ...] --> [batch_size, new_beam_size, ...] + """ + batch_indices = jnp.reshape( + jnp.arange(batch_size * new_beam_size) // new_beam_size, + (batch_size, new_beam_size)) + def gather_fn(x): + if x.ndim == 0: # ignore scalars (e.g. cache index) + return x + else: + return x[batch_indices, beam_indices] + + return jax.tree_util.tree_map(gather_fn, nested) + + +def gather_topk_beams(nested, score_or_log_prob, batch_size, new_beam_size): + """Gathers the top-k beam slices given by score_or_log_prob array. + + Args: + nested: pytree of arrays or scalars (the latter ignored). + score_or_log_prob: [batch_size, old_beam_size] array of values to sort by + for top-k selection of beam slices. + batch_size: int: size of batch. + new_beam_size: int: size of _new_ top-k selected beam dimension + + Returns: + New pytree with new beam arrays containing top k new_beam_size slices. + [batch_size, old_beam_size, ...] --> [batch_size, new_beam_size, ...] + """ + _, topk_indices = lax.top_k(score_or_log_prob, k=new_beam_size) + topk_indices = jnp.flip(topk_indices, axis=1) + return gather_beams(nested, topk_indices, batch_size, new_beam_size) + + +# Beam search state: + + +@flax.struct.dataclass +class BeamState: + """Holds beam search state data.""" + # The position of the decoding loop in the length dimension. + cur_index: jax.Array # scalar int32: current decoded length index + # The active sequence log probabilities and finished sequence scores. + live_logprobs: jax.Array # float32: [batch_size, beam_size] + finished_scores: jax.Array # float32: [batch_size, beam_size] + # The current active-beam-searching and finished sequences. + live_seqs: jax.Array # int32: [batch_size, beam_size, max_decode_len] + finished_seqs: jax.Array # int32: [batch_size, beam_size, + # max_decode_len] + # Records which of the 'finished_seqs' is occupied and not a filler slot. + finished_flags: jax.Array # bool: [batch_size, beam_size] + # The current state of the autoregressive decoding caches. + cache: typing.Any # Any pytree of arrays, e.g. flax attention Cache object + + +def beam_init(batch_size, beam_size, max_decode_len, cache): + """Initializes the beam search state data structure.""" + cur_index0 = jnp.array(0) + live_logprobs0 = jnp.tile( + jnp.array([0.0] + [NEG_INF] * (beam_size - 1)), + [batch_size, 1]) + finished_scores0 = jnp.ones((batch_size, beam_size)) * NEG_INF + live_seqs0 = jnp.zeros( + (batch_size, beam_size, max_decode_len), jnp.int32) + finished_seqs0 = jnp.zeros( + (batch_size, beam_size, max_decode_len), jnp.int32) + finished_flags0 = jnp.zeros((batch_size, beam_size), jnp.bool_) + # add beam dimension to attention cache pytree elements + beam_cache0 = jax.tree_util.tree_map(lambda x: add_beam_dim(x, beam_size), + cache) + return BeamState(cur_index=cur_index0, + live_logprobs=live_logprobs0, + finished_scores=finished_scores0, + live_seqs=live_seqs0, + finished_seqs=finished_seqs0, + finished_flags=finished_flags0, + cache=beam_cache0) + + +# Beam search routine: + + +def beam_search(inputs, + cache, + tokens_to_logits, + beam_size=4, + alpha=0.6, + eos_id=EOS_ID, + max_decode_len=None): + """Beam search for transformer machine translation. + + Args: + inputs: array: [batch_size, length] int32 sequence of tokens. + cache: flax attention cache. + tokens_to_logits: fast autoregressive decoder function taking single token + slices and cache and returning next-token logits and updated cache. + beam_size: int: number of beams to use in beam search. + alpha: float: scaling factor for brevity penalty. + eos_id: int: id of end-of-sentence token for target vocabulary. + max_decode_len: int: maximum length of decoded translations. + + Returns: + Tuple of: + [batch_size, beam_size, max_decode_len] top-scoring sequences + [batch_size, beam_size] beam-search scores. + """ + # We liberally annotate shape information for clarity below. + + batch_size = inputs.shape[0] + if max_decode_len is None: + max_decode_len = inputs.shape[1] + end_marker = jnp.array(eos_id) + + # initialize beam search state + beam_search_init_state = beam_init(batch_size, + beam_size, + max_decode_len, + cache) + + def beam_search_loop_cond_fn(state): + """Beam search loop termination condition.""" + # Have we reached max decoding length? + not_at_end = (state.cur_index < max_decode_len - 1) + + # Is no further progress in the beam search possible? + # Get the best possible scores from alive sequences. + min_brevity_penalty = brevity_penalty(alpha, max_decode_len) + best_live_scores = state.live_logprobs[:, -1:] / min_brevity_penalty + # Get the worst scores from finished sequences. + worst_finished_scores = jnp.min( + state.finished_scores, axis=1, keepdims=True) + # Mask out scores from slots without any actual finished sequences. + worst_finished_scores = jnp.where( + state.finished_flags, worst_finished_scores, NEG_INF) + # If no best possible live score is better than current worst finished + # scores, the search cannot improve the finished set further. + search_terminated = jnp.all(worst_finished_scores > best_live_scores) + + # If we're not at the max decode length, and the search hasn't terminated, + # continue looping. + return not_at_end & (~search_terminated) + + def beam_search_loop_body_fn(state): + """Beam search loop state update function.""" + # Collect the current position slice along length to feed the fast + # autoregressive decoder model. Flatten the beam dimension into batch + # dimension for feeding into the model. + # --> [batch * beam, 1] + flat_ids = flatten_beam_dim(lax.dynamic_slice( + state.live_seqs, + (0, 0, state.cur_index), + (batch_size, beam_size, 1))) + # Flatten beam dimension into batch to be compatible with model. + # {[batch, beam, ...], ...} --> {[batch * beam, ...], ...} + flat_cache = jax.tree_util.tree_map(flatten_beam_dim, state.cache) + + # Call fast-decoder model on current tokens to get next-position logits. + # --> [batch * beam, vocab] + flat_logits, new_flat_cache = tokens_to_logits(flat_ids, flat_cache) + + # unflatten beam dimension + # [batch * beam, vocab] --> [batch, beam, vocab] + logits = unflatten_beam_dim(flat_logits, batch_size, beam_size) + # Unflatten beam dimension in attention cache arrays + # {[batch * beam, ...], ...} --> {[batch, beam, ...], ...} + new_cache = jax.tree_util.tree_map( + lambda x: unflatten_beam_dim(x, batch_size, beam_size), new_flat_cache) + + # Gather log probabilities from logits + candidate_log_probs = jax.nn.log_softmax(logits) + # Add new logprobs to existing prefix logprobs. + # --> [batch, beam, vocab] + log_probs = (candidate_log_probs + + jnp.expand_dims(state.live_logprobs, axis=2)) + + # We'll need the vocab size, gather it from the log probability dimension. + vocab_size = log_probs.shape[2] + + # Each item in batch has beam_size * vocab_size candidate sequences. + # For each item, get the top 2*k candidates with the highest log- + # probabilities. We gather the top 2*K beams here so that even if the best + # K sequences reach EOS simultaneously, we have another K sequences + # remaining to continue the live beam search. + beams_to_keep = 2 * beam_size + # Flatten beam and vocab dimensions. + flat_log_probs = log_probs.reshape((batch_size, beam_size * vocab_size)) + # Gather the top 2*K scores from _all_ beams. + # --> [batch, 2*beams], [batch, 2*beams] + topk_log_probs, topk_indices = lax.top_k(flat_log_probs, k=beams_to_keep) + # Recover the beam index by floor division. + topk_beam_indices = topk_indices // vocab_size + # Gather 2*k top beams. + # --> [batch, 2*beams, length] + topk_seq = gather_beams(state.live_seqs, + topk_beam_indices, + batch_size, beams_to_keep) + + # Append the most probable 2*K token IDs to the top 2*K sequences + # Recover token id by modulo division and expand Id array for broadcasting. + # --> [batch, 2*beams, 1] + topk_ids = jnp.expand_dims(topk_indices % vocab_size, axis=2) + # Update sequences for the 2*K top-k new sequences. + # --> [batch, 2*beams, length] + topk_seq = lax.dynamic_update_slice( + topk_seq, topk_ids, (0, 0, state.cur_index + 1)) + + # Update LIVE (in-progress) sequences: + # Did any of these sequences reach an end marker? + # --> [batch, 2*beams] + newly_finished = (topk_seq[:, :, state.cur_index + 1] == end_marker) + # To prevent these newly finished sequences from being added to the LIVE + # set of active beam search sequences, set their log probs to a very large + # negative value. + new_log_probs = topk_log_probs + newly_finished * NEG_INF + # Determine the top k beam indices (from top 2*k beams) from log probs. + # --> [batch, beams] + _, new_topk_indices = lax.top_k(new_log_probs, k=beam_size) + new_topk_indices = jnp.flip(new_topk_indices, axis=1) + # Gather the top k beams (from top 2*k beams). + # --> [batch, beams, length], [batch, beams] + top_alive_seq, top_alive_log_probs = gather_beams( + [topk_seq, new_log_probs], new_topk_indices, batch_size, beam_size) + + # Determine the top k beam indices from the original set of all beams. + # --> [batch, beams] + top_alive_indices = gather_beams( + topk_beam_indices, new_topk_indices, batch_size, beam_size) + # With these, gather the top k beam-associated caches. + # --> {[batch, beams, ...], ...} + top_alive_cache = gather_beams( + new_cache, top_alive_indices, batch_size, beam_size) + + # Update FINISHED (reached end of sentence) sequences: + # Calculate new seq scores from log probabilities. + new_scores = topk_log_probs / brevity_penalty(alpha, state.cur_index + 1) + # Mask out the still unfinished sequences by adding large negative value. + # --> [batch, 2*beams] + new_scores += (~newly_finished) * NEG_INF + + # Combine sequences, scores, and flags along the beam dimension and compare + # new finished sequence scores to existing finished scores and select the + # best from the new set of beams. + finished_seqs = jnp.concatenate( # --> [batch, 3*beams, length] + [state.finished_seqs, topk_seq], axis=1) + finished_scores = jnp.concatenate( # --> [batch, 3*beams] + [state.finished_scores, new_scores], axis=1) + finished_flags = jnp.concatenate( # --> [batch, 3*beams] + [state.finished_flags, newly_finished], axis=1) + # --> [batch, beams, length], [batch, beams], [batch, beams] + top_finished_seq, top_finished_scores, top_finished_flags = ( + gather_topk_beams([finished_seqs, finished_scores, finished_flags], + finished_scores, batch_size, beam_size)) + + return BeamState(cur_index=state.cur_index + 1, + live_logprobs=top_alive_log_probs, + finished_scores=top_finished_scores, + live_seqs=top_alive_seq, + finished_seqs=top_finished_seq, + finished_flags=top_finished_flags, + cache=top_alive_cache) + + # Run while loop and get final beam search state. + final_state = lax.while_loop(beam_search_loop_cond_fn, + beam_search_loop_body_fn, + beam_search_init_state) + + # Account for the edge-case where there are no finished sequences for a + # particular batch item. If so, return live sequences for that batch item. + # --> [batch] + none_finished = jnp.any(final_state.finished_flags, axis=1) + # --> [batch, beams, length] + finished_seqs = jnp.where(none_finished[:, None, None], + final_state.finished_seqs, + final_state.live_seqs) + # --> [batch, beams] + finished_scores = jnp.where(none_finished[:, None], + final_state.finished_scores, + final_state.live_logprobs) + + return finished_seqs, finished_scores diff --git a/scenic/projects/avatar/generation_trainer.py b/scenic/projects/avatar/generation_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..b30907bb68003dce73c102d10546b0f0b73e2126 --- /dev/null +++ b/scenic/projects/avatar/generation_trainer.py @@ -0,0 +1,995 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Token generation training. + +Template from third_party/py/scenic/projects/vtretrieval/trainer.py +Auto-regressive generation from third_party/py/flax/examples/wmt/train.py +""" + +import copy +import dataclasses +import functools +import json +import os +import re +from typing import Any, Callable, Dict, List, Optional, Tuple + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from dmvr import tokenizers +from flax import jax_utils +import flax.linen as nn +import jax +import jax.example_libraries.optimizers as jax_optimizers +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.avatar import decode +from scenic.projects.avatar import metrics_utils +from scenic.projects.avatar import model_utils +from scenic.projects.avatar.datasets import dataset_utils as ds_utils +from scenic.train_lib_deprecated import lr_schedules +from scenic.train_lib_deprecated import optimizers +from scenic.train_lib_deprecated import pretrain_utils +from scenic.train_lib_deprecated import train_utils + +from tensorflow.io import gfile + + +# Note this list must be in the exact order of the inputs required by the model. +SUPPORTED_MODALITIES = ['rgb', 'flow', 'spectrogram', 'waveform', 'text'] + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricNormalizerFnDict = base_model.MetricNormalizerFnDict +MetricFn = Callable[[jnp.ndarray, jnp.ndarray, jnp.ndarray], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, jnp.ndarray, jnp.ndarray, jnp.ndarray], float] +PyTree = Any + + +def tohost(x): + """Collect batches from all devices to host and flatten batch dimensions.""" + n_device, n_batch, *remaining_dims = x.shape + return np.array(x).reshape((n_device * n_batch,) + tuple(remaining_dims)) + + +def to_cpu(pytree: PyTree) -> PyTree: + """Transfers arrays (replicated on multiple hosts) to a single host. + + Args: + pytree: PyTree of replicated arrays of [num_hosts, num_devices, + local_batch_size, ...] + + Returns: + PyTree of arrays of shape [global_batch_size, ...] where + global_batch_size = num_devices * local_batch_size + """ + return jax.device_get(dataset_utils.unshard(jax_utils.unreplicate(pytree))) + + +def decode_tokens(tokenizer, toks): + # Decode a sequence of tokens into text + eos_id = tokenizer.eos_token + toks = toks.astype(np.int32) + if eos_id in toks: + toks = toks[:np.argmax(toks == eos_id) + 1] + s = tokenizer.indices_to_string(toks) + # Remove spaces around apostrophe + s = s.replace(' \' ', '\'') + return s + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + learning_rate_fn: Callable[[int], float], + loss_fn: LossFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], float]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, and optimizer. The buffer of this argument can be + donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + learning_rate_fn: learning rate scheduler which give the global_step + generates the learning rate. + loss_fn: A loss function that given logits, targets, weights, and parameters + of the model calculates the loss. + metrics_fn: A metrics function that given logits, targets and weights + calculates the metrics as well as the loss. + config: Configuration of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, computed metrics, and learning rate for logging. + """ + new_rng, rng = jax.random.split(train_state.rng) + + # Bind the rng to the host/device we are on for dropout. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + if config.model.encoder_model == 'vivit': + video_inputs = batch['inputs'] + elif config.dataset_configs.return_as_dict: + video_inputs = [ + batch['inputs'].get('rgb', None), # pytype: disable=attribute-error # jax-ndarray + batch['inputs'].get('flow', None), # pytype: disable=attribute-error # jax-ndarray + batch['inputs'].get('spectrogram', None), # pytype: disable=attribute-error # jax-ndarray + batch['inputs'].get('waveform', None), # pytype: disable=attribute-error # jax-ndarray + batch['inputs'].get('text', None) # pytype: disable=attribute-error # jax-ndarray + ] + # When using DMVR datasets which only have RGB + else: + video_inputs = [batch['inputs'], None, None, None, None] + targets = batch['targets'] + # Remove the "num_captions" dimension + targets = jnp.squeeze(targets, axis=-2) + + weights = jnp.where(targets > 0, 1, 0).astype(jnp.float32) + + other_inputs = {} + if config.get('predict_masked_word', False): + other_inputs['masked_token_idxs'] = batch['masked_input_token_indices'] + other_inputs['masked_token_idx_masks'] = batch[ + 'valid_input_token_index_mask'] + other_inputs['masked_word_targets'] = batch['masked_targets'] + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + + logits, new_model_state = flax_model.apply( + variables, + *video_inputs, + targets, + **other_inputs, + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + + if config.get('predict_masked_word', False): + b, m, t = batch['masked_targets'].shape + masked_word_targets = jnp.reshape(batch['masked_targets'], [b * m, t]) + masked_word_weights = jnp.where(masked_word_targets > 0, 1, + 0).astype(jnp.float32) + logits, masked_word_logits = logits + + loss = loss_fn((logits, masked_word_logits), # pytype: disable=wrong-arg-types # jax-ndarray + (targets, masked_word_targets), + (weights, masked_word_weights), variables['params']) + else: + loss = loss_fn(logits, targets, weights, variables['params']) + + return loss, (new_model_state, logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + step = train_state.global_step + lr = learning_rate_fn(step) + (train_cost, + (new_model_state, + logits)), grad = compute_gradient_fn(train_state.optimizer.target) + del train_cost + + if config.get('max_grad_norm', None): + grad = jax_optimizers.clip_grads(grad, config.max_grad_norm) + + grad = jax.lax.pmean(grad, axis_name='batch') + new_optimizer = train_state.optimizer.apply_gradient(grad, learning_rate=lr) + + # Explicit weight decay, if necessary. + if config.get('explicit_weight_decay', None): + new_optimizer = new_optimizer.replace( + target=optimizers.tree_map_with_names( + functools.partial( + optimizers.decay_weight_fn, + lr=lr, + decay=config.explicit_weight_decay), + new_optimizer.target, + match_name_fn=lambda name: 'kernel' in name)) + + metrics = metrics_fn(logits, targets, weights) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=step + 1, + optimizer=new_optimizer, + model_state=new_model_state, + rng=new_rng) + return new_train_state, metrics, lr + + +def eval_step(train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False) -> Any: + """Runs a single step of evaluation. + + Note: The buffer of the provided batch is donated to the computation. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. + flax_model: A Flax model. + metrics_fn: A metrics function that given logits, targets and weights + calculates the metrics as well as the loss. + config: Configuration of the experiment. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics. + """ + variables = { + 'params': train_state.optimizer.target, + **train_state.model_state + } + if config.model.encoder_model == 'vivit': + video_inputs = batch['inputs'] + elif config.dataset_configs.return_as_dict: + video_inputs = [ + batch['inputs'].get('rgb', None), batch['inputs'].get('flow', None), # pytype: disable=attribute-error # jax-ndarray + batch['inputs'].get('spectrogram', # pytype: disable=attribute-error # jax-ndarray + None), batch['inputs'].get('waveform', None), # pytype: disable=attribute-error # jax-ndarray + batch['inputs'].get('text', None) # pytype: disable=attribute-error # jax-ndarray + ] + # When using DMVR datasets which only have RGB + else: + video_inputs = [batch['inputs'], None, None, None, None] + + targets = batch['targets'] + # Remove the "num_captions" dimension + targets = jnp.squeeze(targets, axis=-2) + + weights = jnp.where(targets > 0, 1, 0).astype(jnp.float32) + + logits = flax_model.apply( + variables, + *video_inputs, + targets=targets, + mutable=False, + train=False, + debug=debug) + + return metrics_fn(logits, targets, weights) + + +def test_step(*, + train_state: train_utils.TrainState, + batch: Batch, + flax_model: nn.Module, + cache, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False) -> Any: + """Runs a single step of test.""" + variables = { + 'params': train_state.optimizer.target, + **train_state.model_state + } + if config.model.encoder_model == 'vivit': + video_inputs = batch['inputs'] + elif config.dataset_configs.return_as_dict: + video_inputs = [ + batch['inputs'].get('rgb', None), # pytype: disable=attribute-error # jax-ndarray + batch['inputs'].get('flow', None), # pytype: disable=attribute-error # jax-ndarray + batch['inputs'].get('spectrogram', None), # pytype: disable=attribute-error # jax-ndarray + batch['inputs'].get('waveform', None), # pytype: disable=attribute-error # jax-ndarray + batch['inputs'].get('text', None) # pytype: disable=attribute-error # jax-ndarray + ] + # When using DMVR datasets which only have RGB + else: + video_inputs = [batch['inputs'], None, None, None, None] + + beam_size = config.get('beam_size', 4) + # Prepare transformer fast-decoder call for beam search: for beam search, we + # need to set up our decoder model to handle a batch size equal to + # batch_size * beam_size, where each batch item"s data is expanded in-place + # rather than tiled. + # i.e. if we denote each batch element subtensor as el[n]: + # [el0, el1, el2] --> beamsize=2 --> [el0,el0,el1,el1,el2,el2] + + # As the second return value of flax_model.encode is None in test time, we + # simply use the first return value here. + encoded_inputs = decode.flat_batch_beam_expand( + flax_model.apply( + variables, *video_inputs, train=False, method=flax_model.encode)[0], + beam_size) + + def tokens_ids_to_logits(flat_ids, flat_cache): + """Token slice to logits from decoder model.""" + # --> [batch * beam, 1, vocab] + flat_logits, new_vars = flax_model.apply( + { + 'params': train_state.optimizer.target, + 'cache': flat_cache, + **train_state.model_state, + }, + encoded_inputs, + flat_ids, + decode=True, + train=False, + mutable=['cache'], + method=flax_model.decode, + debug=debug) + new_flat_cache = new_vars['cache'] + # Remove singleton sequence-length dimension: + # [batch * beam, 1, vocab] --> [batch * beam, vocab] + flat_logits = flat_logits.squeeze(axis=1) + return flat_logits, new_flat_cache + + # Get the first modality + mod = list(batch['inputs'].keys())[0] # pytype: disable=attribute-error # jax-ndarray + batch_size = batch['inputs'][mod].shape[0] + dummy_inputs = jnp.ones((batch_size), jnp.int32) + + brevity_penalty = config.get('brevity_penalty', 0.6) + # Using the above-defined single-step decoder function, run a + # beam search over possible sequences given input encoding. + beam_seqs, _ = decode.beam_search( + dummy_inputs, # Only used to obtain the batch size + cache, + tokens_ids_to_logits, + beam_size=beam_size, + alpha=brevity_penalty, + eos_id=config.eos_id, + max_decode_len=config.max_decode_len) + + # Beam search returns [device_batch_size, n_beam, n_length + 1] with beam + # dimension sorted in increasing order of log-probability. + # Keep the highest scoring beam sequence, drop first dummy 0 token. + # Gather those beam sequences across all devices across replicas + predicted = beam_seqs[:, -1, 1:] + outputs = { + 'key': batch['key'], + 'pred': predicted, + 'ref': batch['raw_caption'], + 'batch_mask': batch['batch_mask'] + } + + return outputs + + +def pmapped_steps(model, config): + """Returns the pmapped train and eval steps.""" + # Learning rate scheduler. + learning_rate_fn = lr_schedules.get_learning_rate_fn(config) + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + learning_rate_fn=learning_rate_fn, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + config=config, + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + test_step_pmapped = jax.pmap( + functools.partial( + test_step, + flax_model=model.flax_model, + config=config, + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + init_cache_pmapped = jax.pmap( + functools.partial( + initialize_cache, flax_model=model.flax_model, config=config + ), + axis_name='batch', + ) + return ( + train_step_pmapped, + eval_step_pmapped, + test_step_pmapped, + init_cache_pmapped, + ) + + +def init_state( + model: base_model.BaseModel, + dataset: dataset_utils.Dataset, + config: ml_collections.ConfigDict, + workdir: str, + rng: jnp.ndarray, +): + """Initialize the model state.""" + + input_shapes = dataset.meta_data['input_shape'] + input_dtype = dataset.meta_data.get('input_dtype', jnp.float32) + target_spec = (dataset.meta_data['target_shape'], + dataset.meta_data['target_dtype']) + encoder_model = config.model.get('encoder_model', 'mbt') + + if isinstance(input_shapes, dict): + final_spec_list = [] + for mod in SUPPORTED_MODALITIES: + if mod in input_shapes: + logging.info('Modality %s is present for this dataset', mod) + final_spec_list.append((input_shapes[mod], input_dtype)) + else: + final_spec_list.append(None) + final_spec_list.append(target_spec) + # Using MBT model with DMVR datasets that only return RGB + elif encoder_model == 'mbt': + final_spec_list = [] + for mod in SUPPORTED_MODALITIES: + if mod == 'rgb': + final_spec_list.append((input_shapes, input_dtype)) + else: + final_spec_list.append(None) + final_spec_list.append(target_spec) + else: + final_spec_list = [(input_shapes, input_dtype)] + final_spec_list.append(target_spec) + if config.get('predict_masked_word', False): + final_spec_list.append((dataset.meta_data['masked_token_idxs_shape'], + dataset.meta_data['masked_token_idxs_dtype'])) + final_spec_list.append((dataset.meta_data['masked_token_idx_masks_shape'], + dataset.meta_data['masked_token_idx_masks_dtype'])) + final_spec_list.append((dataset.meta_data['masked_word_targets_shape'], + dataset.meta_data['masked_word_targets_dtype'])) + + # Initialize model. + logging.debug('Initializing model...') + rng, init_rng = jax.random.split(rng) + params, model_state, num_params, gflops = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=final_spec_list, + config=config, + rngs=init_rng) + logging.info('The model has %d params, uses %d gflops', num_params, gflops) + + # Create the optimizer. + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + optimizer = jax.jit( + optimizers.get_optimizer(config).create, backend='cpu')( + params) + del params # Do not keep a copy of the initial params. + + rng, train_rng = jax.random.split(rng) + # The variable global_step indicates the last completed step. + # Because the step number is incremented in the training loop and we start + # with step=0 (zero-shot evaluation), we set global_step=-1 here. + global_step = -1 + train_state = train_utils.TrainState( + global_step=global_step, + optimizer=optimizer, + model_state=model_state, + rng=train_rng, + accum_train_time=0, + ) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state + ) + + if start_step == -1 and config.get('checkpoint_path', None): + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + config.checkpoint_path, train_state, assert_exist=True + ) + restored_model_cfg = copy.deepcopy(config) + train_state = model_utils.initialise_from_train_state( + config, + train_state, + restored_train_state, + restored_model_cfg, + restore_output_proj=config.init_from.get('restore_output_proj', False), + restore_from_old_format=config.get('restore_from_old_format', True), + ) + else: + # TODO(valgab): Seperately intialise encoder and decoder + pass + elif start_step == -1: + logging.info('Training completely from scratch. ' + 'Not restoring from any checkpoint.') + return train_state, start_step + + +def initialize_cache(flax_model, batch, config): + """Initialize a cache for a given input shape and max decode length.""" + + if config.model.encoder_model == 'vivit': + video_inputs = batch['inputs'] + elif config.dataset_configs.return_as_dict: + video_inputs = [ + batch['inputs'].get('rgb', None), batch['inputs'].get('flow', None), + batch['inputs'].get('spectrogram', + None), batch['inputs'].get('waveform', None), + batch['inputs'].get('text', None) + ] + # When using DMVR datasets which only have RGB + else: + video_inputs = [batch['inputs'], None, None, None, None] + + target_shape = tuple(batch['targets'].shape[:-1]) + (config.max_decode_len,) + target_dtype = jnp.int32 + dummy_target = jnp.ones(target_shape, target_dtype) + # Remove the "num_captions" dimension + dummy_target = jnp.squeeze(dummy_target, axis=-2) + + initial_variables = flax_model.init( + jax.random.PRNGKey(0), + *video_inputs, + dummy_target, + decode=True, + train=False) + return initial_variables['cache'] + + +@dataclasses.dataclass +class SummaryBuilder: + """A helper class to build the summary over the training iterations.""" + metrics: List[Dict[str, Tuple[float, int]]] + extra_logs: List[Dict[str, Any]] + + def update(self, metrics_update, extra_logs_update): + """Update with the given per-step metrics.""" + self.metrics.append(metrics_update) + self.extra_logs.append(extra_logs_update) + + def write(self, writer: metric_writers.MetricWriter, step: int): + """Write to the given writer and training step. + + After writing, the state gets reset. + + Args: + writer: The summary will be written with this writer. + step: The current training step. + + Returns: + The summary since the last write. + """ + summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + self.metrics), + extra_training_logs=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, self.extra_logs), + writer=writer, + key_separator='/') + self.metrics = [] + self.extra_logs = [] + return summary + + +def eval_and_log_summary( + *, + train_state: train_utils.TrainState, + writer: metric_writers.MetricWriter, + iterator, + eval_step_fn, + eval_steps, + train_iteration, + prefix, +): + """Evaluate the model and write the summary.""" + + eval_metrics = [] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + + logging.info('Total number of eval steps is %s', eval_steps) + for step in range(eval_steps): + with jax.profiler.StepTraceAnnotation('eval', step_num=step): + eval_batch = next(iterator) + metrics = eval_step_fn(train_state, eval_batch) + # Fetch metrics to host and store. + eval_metrics.append(train_utils.unreplicate_and_get(metrics)) + + return train_utils.log_eval_summary( + step=train_iteration, + eval_metrics=eval_metrics, + extra_eval_summary=None, + prefix=prefix, + writer=writer, + key_separator='/') + + +def decode_ints_to_string(ints): + """Decode a sequence of ASCII values into a string.""" + char_list = [chr(char_int) for char_int in ints if char_int] + return ''.join(char_list) + + +def test_and_log_summary(*, train_state: train_utils.TrainState, + writer: metric_writers.MetricWriter, iterator, + eval_step_fn, init_cache_fn, eval_steps, + train_iteration, tokenizer, workdir, prefix): + """Eval the model and write the summary.""" + logging.info('Generating tokens for the test set.') + output_dicts = {} + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + + logging.info('Total number of test steps is %s', eval_steps) + for step in range(eval_steps): + with jax.profiler.StepTraceAnnotation('test', step_num=step): + eval_batch = next(iterator) + cache = init_cache_fn(batch=eval_batch) + outputs = eval_step_fn( + train_state=train_state, batch=eval_batch, cache=cache) + + if 'noise_word_mask' in eval_batch and eval_batch['noise_word_mask'].size: + outputs['noise_word_mask'] = eval_batch['noise_word_mask'] + + outputs = to_cpu( + jax.pmap(lambda x: jax.lax.all_gather(x, 'batch'), 'batch')(outputs)) + + for i, valid in enumerate(outputs['batch_mask']): + if valid: + k = decode_ints_to_string(outputs['key'][i]) + + if k not in output_dicts: + output_dicts[k] = { + 'ref': decode_ints_to_string(outputs['ref'][i]), + 'hyp': decode_tokens(tokenizer, outputs['pred'][i]), + } + if 'noise_word_mask' in outputs: + output_dicts[k]['word_mask'] = outputs['noise_word_mask'][i] + + logging.info('%s: %d outputs.', prefix, len(output_dicts)) + + # TODO(phseo): Currently, we are iterating over 1.x times the total eval + # dataset size to handle different number of batches per host. This should + # be changed later to properly iterate over the dataset exactly one time. + keys = [] + refs = [] + preds = [] + for k, v in output_dicts.items(): + keys.append(k) + refs.append(v['ref']) + preds.append(v['hyp']) + + wer, rates = metrics_utils.word_error_rate(refs, preds) + # Save decoded samples for tensorboard. + exemplars = '' + for n in np.random.choice(np.arange(len(preds)), 8): + exemplars += f'{keys[n]}\n\nGT: {refs[n]}\n\nHY: {preds[n]}\n\n' + logging.info(f'{prefix}: ' + exemplars.replace('%', '').replace('\n', ' ')) + + if jax.host_id() == 0: + prefix_local = re.sub(r'[\[\]]', '_', prefix) + write_examples_to_disk(workdir, prefix_local, train_iteration, keys, refs, + preds) + + writer.write_texts(train_iteration, {f'{prefix}_samples': exemplars}) + + (del_rate, ins_rate, sub_rate, cor_rate) = rates + eval_dict = { + 'wer': (wer, 1), + 'del_rate': (del_rate, 1), + 'ins_rate': (ins_rate, 1), + 'sub_rate': (sub_rate, 1), + 'cor_rate': (cor_rate, 1), + } + + return train_utils.log_eval_summary( + step=train_iteration, + eval_metrics=[eval_dict], + extra_eval_summary=None, + prefix=prefix, + writer=writer, + key_separator='/') + + +def write_examples_to_disk(workdir, prefix, train_iteration, keys, refs, preds): + """Convert examples to dict and write to json file.""" + res = {} + for i, key in enumerate(keys): + res[key] = {} + res[key]['groundtruth'] = refs[i] + res[key]['predictions'] = preds[i] + res[key]['dataset'] = prefix + + out_path = os.path.join(workdir, prefix, f'{train_iteration:012d}.json') + logging.info('Writing results to file %s', out_path) + gfile.makedirs(os.path.dirname(out_path)) + with gfile.GFile(out_path, 'w') as f: + f.write(json.dumps(res, indent=4, sort_keys=True)) + + +def set_tokenizer(tokenizer_config): + """Set the tokenizer.""" + tokenizer_type = tokenizer_config.get('tokenizer_type', 'bert') + tokenizer_vocab = tokenizer_config.get('tokenizer_vocab', None) + if tokenizer_type == 'bert': + assert tokenizer_vocab + tokenizer = tokenizers.BertTokenizer(tokenizer_vocab) + else: + raise ValueError('Tokenizer not supported') + vocab_size = int(tokenizer.vocab_size) + logging.info('vocab_size %d', vocab_size) + logging.info('EOS token: %d', tokenizer.eos_token) + # Init the TF models of the tokenizer. + tokenizer.initialize() + return tokenizer + + +def get_num_training_steps( + config: ml_collections.ConfigDict, + dataset_metadata: Dict[str, Any]) -> Tuple[int, Optional[int]]: + """Calculates the total number of training step and possibly steps_per_epoch. + + The main raining loop is based on number of training steps. Thus, for datasets + that we want to train based on number of epochs, we need to calculate the + total number of training steps. This function looks for `num_training_steps` + in config, if it exists it returns that as the total step and `None` as + `steps_per_epoch`. If num_training_steps doesn't exist, then it looks for + `num_training_epochs` and given the size of training data calculates the total + steps and steps_per_epoch. In this computation, we assume that + drop_remainder=True. + + Args: + config: Configuration of the experiment. + dataset_metadata: Meta-data that is generated by the dataset_builder. + + Returns: + total_steps: Total number of training steps. + steps_per_epoch: Number of steps in every epoch. + """ + # We either use num_training_epochs or num_training_steps. + steps_per_epoch = dataset_metadata.get('num_train_examples', + 0) // config.batch_size + + if config.get('num_training_steps', None) is not None: + assert not config.get('num_training_epochs') + return config.num_training_steps, steps_per_epoch or None + else: + assert config.num_training_epochs and not config.get('num_training_steps') + return int(steps_per_epoch * config.num_training_epochs), steps_per_epoch + + +def get_noise_info(configs_dict): + """Make noise config strings to show metrics in XM.""" + noise_info = ['[clean]'] + for noise_types, configs in configs_dict.items(): + noise_types = noise_types.split(',') + for nt in noise_types: + assert nt in ds_utils.VALID_EVAL_NOISE_TYPES + for config in configs: + noise_str = [] + if 'environment_noise' in noise_types: + en_config = config['environment_noise_configs'] + noise_str += ['EnvN:%0.1f' % en_config['snr']] + if 'packet_loss_noise' in noise_types: + pln_config = config['packet_loss_noise_configs'] + noise_str += ['PacN:%d_%0.1f' % (pln_config['max_num_bursts'], + pln_config['max_length_rate'])] + noise_str = '[' + ';'.join(noise_str) + ']' + noise_info.append(noise_str) + return noise_info + + +def train_and_eval( + rng: np.ndarray, config: ml_collections.ConfigDict, *, workdir: str, + writer: Any, model_cls, + dataset) -> Tuple[train_utils.TrainState, Any, Dict[str, Any]]: + """Train (and occasionally evaluate) the model. + + Args: + rng: JAX prng key. + config: The configuration of the experiment. + workdir: Where to checkpoint and write the summaries. + writer: Summary writer object. + model_cls: The model class used to instantiate the model. + dataset: The dataset for training and evaluation. + + Returns: + A tuple with: + * the state that has the state of training (including current + global_step, model_state, rng, and the optimizer) + * a dictionary with the train_summary + * a dictionary with the evaluation summary + """ + logging.info('Starting train and eval') + + lead_host = jax.host_id() == 0 + logging.info('Number of processes is %s', jax.process_count()) + + # Tokenizer + tokenizer = set_tokenizer(config.dataset_configs.get('tokenizer')) + + model = model_cls(config, dataset.meta_data) + ( + train_step_pmapped, + eval_step_pmapped, + test_step_pmapped, + init_cache_pmapped, + ) = pmapped_steps(model, config) + + train_state, start_step = init_state(model, dataset, config, workdir, rng) # pytype: disable=wrong-arg-types # jax-ndarray + train_state = jax_utils.replicate(train_state) + + del rng # So that we don't mistakenly re-use it. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = get_num_training_steps(config, + dataset.meta_data) + logging.info('Total number of training steps %d', total_steps) + logging.info('Steps per epoch %d', steps_per_epoch) + log_eval_steps = config.get('log_eval_steps', steps_per_epoch) + log_summary_steps = config.get('log_summary_steps', log_eval_steps) + + # Calculate the number of evaluation steps. + num_eval_examples = dataset.meta_data['num_eval_examples'] + total_eval_steps = int( + np.ceil(num_eval_examples / (config.get('eval_batch_size')))) + steps_per_eval = config.get('steps_per_eval', total_eval_steps) + logging.info('Total number of eval steps %d', total_eval_steps) + logging.info('Steps per eval %d', steps_per_eval) + + # Calculate the number of test steps. + total_test_steps = int( + np.ceil(dataset.meta_data['num_test_examples'] / + (config.get('eval_batch_size')))) + steps_per_test = config.get('steps_per_test', total_test_steps) + logging.info('Total number of test steps %d', total_test_steps) + logging.info('Steps per test %d', steps_per_test) + + chrono = train_utils.Chrono( + first_step=start_step + 1, + total_steps=total_steps, + steps_per_epoch=steps_per_epoch, + global_bs=config.batch_size, + accum_train_time=int(jax_utils.unreplicate(train_state.accum_train_time))) + + logging.info('Start training from step %d', start_step + 1) + hooks = [] + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + if jax.process_index() == 0: + hooks.append(report_progress) + if config.get('xprof', True): + hooks.append( + periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + summary_builder = SummaryBuilder([], []) + for step in range(start_step + 1, total_steps + 1): + # Step 0 only consists in a zero-shot evaluation. + if step > 0: + chrono.resume() + train_batch = next(dataset.train_iter) + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_state, t_metrics, lr = train_step_pmapped(train_state, + train_batch) + for h in hooks: + # Catch exception in case XProf fails. + try: + h(step) + except ValueError as error: + logging.exception('Hook failed: %r', error) + summary_builder.update(t_metrics, {'lr': lr}) + chrono.pause() + + # Log the train summary every `log_summary_steps`. + if (step % log_summary_steps == 0) or (step == total_steps): + if lead_host: + chrono.tick(step, writer) + train_summary = summary_builder.write(writer, step) + else: + train_summary = None + + # Evaluate every `log_eval_steps`. + should_eval = (step % log_eval_steps == 0) or (step == total_steps) + + if should_eval: + # TODO(valgab): Make the evaluation on a single host. Because of the way + # the shards are split between hosts, evaluating on a + # multi host is wrong because some eval examples are missed or repeated. + splits = { + config.dataset_configs.tables.val.name: + (dataset.valid_iter, steps_per_eval), + config.dataset_configs.tables.test.name: + (dataset.test_iter, steps_per_test), + } + for split, (iterators, nb_steps) in splits.items(): + if isinstance(iterators, list): + noise_descs = get_noise_info( + config.dataset_configs.spec_from_wave_eval_noise_configs) + else: + iterators = [iterators] + noise_descs = ['[clean]'] + assert len(iterators) == len(noise_descs) + with report_progress.timed('eval'): + for iterator, noise_desc in zip(iterators, noise_descs): + eval_summary = eval_and_log_summary( + train_state=train_state, + iterator=iterator, + eval_step_fn=eval_step_pmapped, + eval_steps=nb_steps, + writer=writer, + train_iteration=step, + prefix=split + noise_desc) + + with report_progress.timed('test'): + logging.info('Starting testing') + for iterator, noise_desc in zip(iterators, noise_descs): + test_summary = test_and_log_summary( + train_state=train_state, + iterator=iterator, + eval_step_fn=test_step_pmapped, + init_cache_fn=init_cache_pmapped, + eval_steps=nb_steps, + writer=writer, + train_iteration=step, + tokenizer=tokenizer, + workdir=workdir, + prefix=split + noise_desc) + # Free up some space. + del test_summary + writer.flush() + + # Checkpoint. + if not config.checkpoint: + continue + elif should_eval and step > 0: + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + train_state.replace( # pytype: disable=attribute-error + accum_train_time=chrono.accum_train_time) + train_utils.save_checkpoint(workdir, train_state) + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + + logging.info('Training completed in %d steps', step) + + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/avatar/main.py b/scenic/projects/avatar/main.py new file mode 100644 index 0000000000000000000000000000000000000000..0d4899558bae85a2d174737597d58ffcfe01bccf --- /dev/null +++ b/scenic/projects/avatar/main.py @@ -0,0 +1,51 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for training token generation models.""" + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.avatar import generation_trainer +from scenic.projects.avatar import models +from scenic.train_lib_deprecated import train_utils + + +FLAGS = flags.FLAGS + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """The main entry point, sets and runs the training loop.""" + model_cls = models.Seq2SeqModel + data_rng, rng = jax.random.split(rng) + + + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + + generation_trainer.train_and_eval( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/avatar/metrics_utils.py b/scenic/projects/avatar/metrics_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..9ece8ac160ade481e2d33cc3f00b139f04ed75a7 --- /dev/null +++ b/scenic/projects/avatar/metrics_utils.py @@ -0,0 +1,35 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Calculation of metrics to evaluate tokgen generation performance.""" + +from jiwer.measures import compute_measures + + +def word_error_rate(ref, hyp): + ref = [format_string(s) for s in ref] + hyp = [format_string(s) for s in hyp] + scores = compute_measures(ref, hyp) + wer = scores['wer'] + cor_c, sub_c = scores['hits'], scores['substitutions'] + del_c, ins_c = scores['deletions'], scores['insertions'] + total_c = del_c + sub_c + cor_c + rates = (del_c / total_c, ins_c / total_c, sub_c / total_c, cor_c / total_c) + return wer, rates + + +def format_string(s): + # Replaces multiple spaces by a single space + s = ' '.join(s.split()) + return s diff --git a/scenic/projects/avatar/model_utils.py b/scenic/projects/avatar/model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..ed7bb78dfb65fdba1397b80e60baa8f943782bd4 --- /dev/null +++ b/scenic/projects/avatar/model_utils.py @@ -0,0 +1,278 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Model utils for MBT.""" + +from collections import abc +from typing import Any + +from absl import logging +import flax +import ml_collections +from scenic.common_lib import debug_utils +from scenic.projects.mbt.model_utils import init_embedding +from scenic.projects.mbt.model_utils import init_encoderblock +from scenic.projects.mbt.model_utils import init_posemb + + +def flatten_params(d, parent_key='', sep='/'): + """Flattens a dictionary, keeping empty leaves.""" + items = [] + for k, v in d.items(): + path = parent_key + sep + k if parent_key else k + if isinstance(v, abc.MutableMapping): + items.extend(flatten_params(v, path, sep=sep).items()) + else: + items.append((path, v)) + # Keeps the empty dict if it was set explicitly. + if parent_key and not d: + items.append((parent_key, {})) + return dict(items) + + +def nest_params(flat_dic, sep='/'): + """Nest (un-flatten) a dictionary.""" + res = dict() + for key, value in flat_dic.items(): + parts = key.split(sep) + d = res + for part in parts[:-1]: + if part not in d: + d[part] = dict() + d = d[part] + d[parts[-1]] = value + return res + + +def initialise_from_train_state(config, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_proj: bool, + mbt_transformer_key: str = 'Transformer', + log_initialised_param_shapes: bool = True, + one_config: bool = True, + prefix_path: Any = None, + restore_from_old_format: bool = True) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is written to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + config: Configurations for the model being updated, or tuple of configs. + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of a + pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + restore_output_proj: If true, load the final output projection. Set to False + if finetuning to a new dataset. + mbt_transformer_key: The key used for storing the subtree in the parameters + that keeps Transformer weights, that are supposed to be initialized from + the given pre-trained model. + log_initialised_param_shapes: If true, print tabular summary of all the + variables in the model once they have been initialised. + one_config: If true, we have only a single config. If false, we get a tuple + of configs in the order [init_config, model_config, dataset_config]. This + is useful for works that build upon MBT and have different models in their + config. + prefix_path: If parameters are in a subtree. + restore_from_old_format: Whether to restore from old MBT network names. + + Returns: + Updated train_state. + """ + + # Split up configs + if one_config: + init_config = config.init_from + model_config = config.model + dataset_config = config.dataset_configs + else: + init_config, model_config, dataset_config = config + + # Inspect and compare the parameters of the model with the init-model + params = flax.core.unfreeze(train_state.optimizer.target) + + if init_config.get('checkpoint_format', + 'scenic') in ('big_vision', 'bigvision'): + restored_params = restored_train_state.optimizer['target'] + else: + restored_params = restored_train_state.optimizer.target + restored_params = flax.core.unfreeze(restored_params) + if init_config.get('init_from_vit', True): + if prefix_path: + video_params = params[prefix_path] + else: + video_params = params + # Start moving parameters, one-by-one and apply changes if needed + for m_key, m_params in restored_params.items(): + if m_key == 'output_projection': + if restore_output_proj: + video_params[m_key] = m_params + else: + pass + elif m_key == 'pre_logits': + if model_config.get('representation_size', None) is None: + # We don't have representation_size in the new model, so let's ignore + # if from the pretained model, in case it has it. + # Note, removing the key from the dictionary is necessary to prevent + # obscure errors from the Flax optimizer. + video_params.pop(m_key, None) + else: + assert restored_model_cfg.model.representation_size + video_params[m_key] = m_params + + elif m_key in ['Transformer']: + for tm_key, tm_params in m_params.items(): + if tm_key == 'posembed_input': # Might need resolution change + init_posemb( + video_params[mbt_transformer_key], + m_params, + init_config, + model_config, + dataset_config, + restored_model_cfg, + 'posembed_input', + prefix_path=prefix_path) + init_posemb( + video_params[mbt_transformer_key], + m_params, + init_config, + model_config, + dataset_config, + restored_model_cfg, + 'posembed_input_spectrogram', + prefix_path=prefix_path) + init_posemb( + video_params[mbt_transformer_key], + m_params, + init_config, + model_config, + dataset_config, + restored_model_cfg, + 'posembed_input_flow', + prefix_path=prefix_path) + init_posemb( + video_params[mbt_transformer_key], + m_params, + init_config, + model_config, + dataset_config, + restored_model_cfg, + 'posembed_input_wave', + prefix_path=prefix_path) + init_posemb( + video_params, + m_params, + init_config, + model_config, + dataset_config, + restored_model_cfg, + 'bottleneck', + prefix_path=prefix_path) + elif 'encoderblock' in tm_key: + logging.info('Loading encoder parameters.') + init_encoderblock(video_params[mbt_transformer_key], m_params, + tm_key) + else: # Other parameters of the Transformer encoder + video_params[mbt_transformer_key][tm_key] = tm_params + elif m_key == 'embedding': + init_embedding(video_params, m_params, init_config, model_config, + 'embedding') + init_embedding(video_params, m_params, init_config, model_config, + 'embedding_flow') + init_embedding(video_params, m_params, init_config, model_config, + 'embedding_spectrogram') + init_embedding(video_params, m_params, init_config, model_config, + 'embedding_wave') + else: + if m_key in train_state.optimizer.target: + video_params[m_key] = m_params + if '%s_spectrogram' % m_key in train_state.optimizer.target: + video_params['%s_spectrogram' % m_key] = m_params + if '%s_flow' % m_key in train_state.optimizer.target: + video_params['%s_flow' % m_key] = m_params + if '%s_wave' % m_key in train_state.optimizer.target: + video_params['%s_wave' % m_key] = m_params + else: + logging.info('Skipping %s. In restored model but not in target', + m_key) + else: + from_flat = flatten_params(restored_params) + to_flat = flatten_params(params) + + for key in from_flat: + if key in to_flat: + if from_flat[key].shape == to_flat[key].shape: + to_flat[key] = from_flat[key] + elif key == 'video_encoder/Transformer/posembed_input/pos_embedding': + nb_pos = to_flat[key].shape[1] + to_flat[key] = from_flat[key][:, :nb_pos, :] + else: + logging.info('Skipping %s. In restored model but not in target', key) + + if restore_from_old_format: + assert one_config + model_modalities = config.mbt.model.modality_fusion + + for key in to_flat: + if '_spectrogram/' not in key: + continue + if len(model_modalities) == 1 and 'embedding' not in key: + from_key = key.replace('_spectrogram/', '/') + else: + from_key = key.replace('_spectrogram/', '_spec/') + + if from_key in from_flat: + if from_flat[from_key].shape == to_flat[key].shape: + to_flat[key] = from_flat[from_key] + logging.info( + 'Restoring with converted key from %s to %s.', key, from_key, + ) + else: + logging.info( + 'Shape missmatch with converted key %s from %s.', key, from_key + ) + else: + logging.info('Not found: converted key %s from %s.', key, from_key) + + if init_config.get('dual_stream_init', False): + for to_key in to_flat: + if '_spec' in to_key: + from_key = to_key.replace('_spec', '') + if from_key in from_flat: + if from_flat[from_key].shape == to_flat[to_key].shape: + to_flat[to_key] = from_flat[from_key] + elif ( + from_key + == 'video_encoder/Transformer/posembed_input/pos_embedding' + ): + nb_pos = to_flat[to_key].shape[1] + to_flat[to_key] = from_flat[from_key][:, :nb_pos, :] + logging.info('Dual stream loading %s from %s', to_key, from_key) + else: + logging.info( + 'Skipping %s. In restored model but not in target', to_key + ) + + params = nest_params(to_flat) + + if log_initialised_param_shapes: + logging.info('Parameter summary after initialising from train state') + debug_utils.log_param_shapes(params) + return train_state.replace( + optimizer=train_state.optimizer.replace(target=flax.core.freeze(params))) diff --git a/scenic/projects/avatar/models.py b/scenic/projects/avatar/models.py new file mode 100644 index 0000000000000000000000000000000000000000..8085cf6eaa22c16e099d9ee914bb01aa6d327ce5 --- /dev/null +++ b/scenic/projects/avatar/models.py @@ -0,0 +1,766 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Transformer-based sequence-to-sequence model for video inputs. + +Based on third_party/py/flax/examples/wmt/models.py +""" + +# pylint: disable=attribute-defined-outside-init,g-bare-generic +# See issue #620. +# pytype: disable=wrong-arg-count +# pytype: disable=wrong-keyword-args +# pytype: disable=attribute-error + +from typing import Any, Dict, Optional, Tuple + +from absl import logging +from flax import linen as nn +from flax.training import common_utils +from immutabledict import immutabledict +import jax +from jax import lax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils +from scenic.projects.mbt import model as mbt_model +from scenic.projects.mbt.model import temporal_encode + +# Standard default metrics for the classification models. +_CLASSIFICATION_METRICS = immutabledict({ + 'accuracy': + (model_utils.weighted_correctly_classified, model_utils.num_examples), + 'loss': (model_utils.weighted_unnormalized_softmax_cross_entropy, + model_utils.num_examples) +}) + + +def shift_right(x, axis=1): + """Shift the input to the right for a given axis.""" + pad_widths = [(0, 0)] * len(x.shape) + pad_widths[axis] = (1, 0) + padded = jnp.pad( + x, pad_widths, mode='constant', constant_values=x.dtype.type(0)) + slicing = [slice(None)] * len(x.shape) + slicing[axis] = slice(0, -1) + return padded[tuple(slicing)] + + +def sinusoidal_init(max_len=2048, min_scale=1.0, max_scale=10000.0): + """1D Sinusoidal Position Embedding Initializer. + + Args: + max_len: maximum possible length for the input. + min_scale: float: minimum frequency-scale in sine grating. + max_scale: float: maximum frequency-scale in sine grating. + + Returns: + output: init function returning `(1, max_len, d_feature)` + """ + + def init(key, shape, dtype=np.float32): + """Sinusoidal init.""" + del key, dtype + d_feature = shape[-1] + pe = np.zeros((max_len, d_feature), dtype=np.float32) + position = np.arange(0, max_len)[:, np.newaxis] + scale_factor = -np.log(max_scale / min_scale) / (d_feature // 2 - 1) + div_term = min_scale * np.exp(np.arange(0, d_feature // 2) * scale_factor) + pe[:, :d_feature // 2] = np.sin(position * div_term) + pe[:, d_feature // 2:2 * (d_feature // 2)] = np.cos(position * div_term) + pe = pe[np.newaxis, :, :] # [1, max_len, d_feature] + return jnp.array(pe) + + return init + + +class AddPositionEmbs(nn.Module): + """Adds (optionally learned) positional embeddings to the inputs. + + Attributes: + config: hyperparameters of the module + """ + config: ml_collections.ConfigDict + + @nn.compact + def __call__(self, inputs, inputs_positions=None, decode=False): + """Applies AddPositionEmbs module. + + By default this layer uses a fixed sinusoidal embedding table. If a + learned position embedding is desired, pass an initializer to + posemb_init in the configuration. + + Args: + inputs: input data. + inputs_positions: input position indices for packed sequences. + decode: whether to run in single-position autoregressive mode. + + Returns: + output: `(bs, timesteps, in_dim)` + """ + cfg = self.config + # inputs.shape is (batch_size, seq_len, emb_dim) + assert inputs.ndim == 3, ('Number of dimensions should be 3,' + ' but it is: %d' % inputs.ndim) + length = inputs.shape[1] + pos_emb_shape = (1, cfg.max_len, inputs.shape[-1]) + if cfg.get('posemb_init', None): + pos_embedding = self.param('pos_embedding', cfg.posemb_init, + pos_emb_shape) + else: + # Use a fixed (non-learned) sinusoidal position embedding. + pos_embedding = sinusoidal_init(max_len=cfg.max_len)(None, pos_emb_shape, + None) + + pe = pos_embedding[:, :length, :] + + # We use a cache position index for tracking decoding position. + if decode: + is_initialized = self.has_variable('cache', 'cache_index') + cache_index = self.variable('cache', 'cache_index', + lambda: jnp.array(0, dtype=jnp.uint32)) + if is_initialized: + i = cache_index.value + cache_index.value = i + 1 + _, _, df = pos_embedding.shape + pe = lax.dynamic_slice(pos_embedding, jnp.array((0, i, 0)), (1, 1, df)) + if inputs_positions is None: + # normal unpacked case: + return inputs + pe + else: + # for packed data we need to use known position indices: + return inputs + jnp.take(pe[0], inputs_positions, axis=0) + + +class MlpBlock(nn.Module): + """Transformer MLP / feed-forward block. + + Attributes: + config: hyperparameters of the module + out_dim: optionally specify out dimension. + """ + config: ml_collections.ConfigDict + out_dim: Optional[int] = None + + @nn.compact + def __call__(self, inputs, train): + """Applies Transformer MlpBlock module.""" + cfg = self.config + actual_out_dim = ( + inputs.shape[-1] if self.out_dim is None else self.out_dim) + x = nn.Dense( + cfg.mlp_dim, + dtype=cfg.dtype, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6))( + inputs) + x = nn.relu(x) + x = nn.Dropout(rate=cfg.dropout_rate)(x, deterministic=not train) + output = nn.Dense( + actual_out_dim, + dtype=cfg.dtype, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6))( + x) + output = nn.Dropout(rate=cfg.dropout_rate)(output, deterministic=not train) + return output + + +class Encoder1DBlock(nn.Module): + """Transformer encoder layer. + + Attributes: + config: hyperparameters of the module + """ + config: ml_collections.ConfigDict + + @nn.compact + def __call__(self, inputs, encoder_mask=None, train=False): + """Applies Encoder1DBlock module. + + Args: + inputs: input data. + encoder_mask: encoder self-attention mask. + train: whether to apply dropout + + Returns: + output after transformer encoder block. + """ + cfg = self.config + + # Attention block. + assert inputs.ndim == 3 + x = nn.LayerNorm(dtype=cfg.dtype)(inputs) + x = nn.SelfAttention( + num_heads=cfg.num_heads, + dtype=cfg.dtype, + qkv_features=cfg.qkv_dim, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6), + use_bias=False, + broadcast_dropout=False, + dropout_rate=cfg.attention_dropout_rate, + deterministic=not train)(x, encoder_mask) + + x = nn.Dropout(rate=cfg.dropout_rate)(x, deterministic=not train) + x = x + inputs + + # MLP block. + y = nn.LayerNorm(dtype=cfg.dtype)(x) + y = MlpBlock(config=cfg)(y, train=train) + + return x + y + + +class EncoderDecoder1DBlock(nn.Module): + """Transformer encoder-decoder layer. + + Attributes: + config: hyperparameters of the module + """ + config: ml_collections.ConfigDict + + @nn.compact + def __call__(self, + targets, + encoded, + decoder_mask=None, + encoder_decoder_mask=None, + decode=False, + train=False): + """Applies EncoderDecoder1DBlock module. + + Args: + targets: input data for decoder + encoded: input data from encoder + decoder_mask: decoder self-attention mask. + encoder_decoder_mask: encoder-decoder attention mask. + decode: whether to run in single-position autoregressive mode. + train: whether to apply dropout + + Returns: + output after transformer encoder-decoder block. + """ + cfg = self.config + + # Decoder block. + assert targets.ndim == 3 + x = nn.LayerNorm(dtype=cfg.dtype)(targets) + x = nn.SelfAttention( + num_heads=cfg.num_heads, + dtype=cfg.dtype, + qkv_features=cfg.qkv_dim, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6), + use_bias=False, + broadcast_dropout=False, + dropout_rate=cfg.attention_dropout_rate, + deterministic=not train, + decode=decode)(x, decoder_mask) + x = nn.Dropout(rate=cfg.dropout_rate)(x, deterministic=not train) + x = x + targets + + # Encoder-Decoder block. + y = nn.LayerNorm(dtype=cfg.dtype)(x) + y = nn.MultiHeadDotProductAttention( + num_heads=cfg.num_heads, + dtype=cfg.dtype, + qkv_features=cfg.qkv_dim, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6), + use_bias=False, + broadcast_dropout=False, + dropout_rate=cfg.attention_dropout_rate, + deterministic=not train)(y, encoded, encoder_decoder_mask) + + y = nn.Dropout(rate=cfg.dropout_rate)(y, deterministic=not train) + y = y + x + + # MLP block. + z = nn.LayerNorm(dtype=cfg.dtype)(y) + z = MlpBlock(config=cfg)(z, train=train) + + return y + z + + +class Encoder(nn.Module): + """Transformer Model Encoder for sequence to sequence translation. + + Attributes: + config: hyperparameters of the module + """ + config: ml_collections.ConfigDict + + @nn.compact + def __call__(self, x, + *, + train: bool, + debug: bool = False): + """Applies Transformer model on the inputs.""" + cfg = self.config + + # Only spectrogram inputs are implemented for now. + for modality in x: + if modality == 'spectrogram': + x_spec = x[modality] + else: + assert x[modality] is None + + x = [] + if 'spectrogram' in cfg.modality_fusion: + x_spec, _ = temporal_encode(x_spec, 'spectrogram', + cfg.temporal_encoding_config, cfg.patches, + cfg.emb_dim) + # TODO(valgab): Have different pos embeddings for different modalities + x_spec = AddPositionEmbs(config=cfg, name='posembed_input')(x_spec) + x.append(x_spec) + x = jnp.concatenate(x, axis=1) + + x = nn.Dropout(rate=cfg.dropout_rate)(x, deterministic=not train) + + x = x.astype(cfg.dtype) + + # Input Encoder + encoder_mask = None + for lyr in range(cfg.num_layers): + x = Encoder1DBlock( + config=cfg, name=f'encoderblock_{lyr}')( + x, encoder_mask, train=train) + + encoded = nn.LayerNorm(dtype=cfg.dtype, name='encoder_norm')(x) + + return encoded + + +class Decoder(nn.Module): + """Transformer Model Decoder for sequence to sequence translation. + + Attributes: + config: hyperparameters of the module + """ + config: ml_collections.ConfigDict + + @nn.compact + def __call__(self, + encoded, + targets, + decoder_mask=None, + encoder_decoder_mask=None, + decode=False, + train=False): + """Applies Transformer model on the inputs. + + Args: + encoded: encoded input data from encoder. + targets: target inputs. + decoder_mask: decoder self-attention mask. + encoder_decoder_mask: encoder-decoder attention mask. + decode: whether to run in single-position autoregressive mode. + train: whether to apply dropout + + Returns: + output of a transformer decoder. + """ + cfg = self.config + + assert encoded.ndim == 3 # (batch, len, depth) + assert targets.ndim == 2 # (batch, len) + + # Output tokens embedding table + output_embed = nn.Embed( + num_embeddings=cfg.vocab_size, + features=cfg.emb_dim, + embedding_init=nn.initializers.normal(stddev=1.0)) + + y = targets.astype('int32') + if not decode: + y = shift_right(y) + y = output_embed(y) + y = AddPositionEmbs( + config=cfg, name='posembed_output')( + y, decode=decode) + y = nn.Dropout(rate=cfg.dropout_rate)(y, deterministic=not train) + + y = y.astype(cfg.dtype) + + # Target-Input Decoder + for lyr in range(cfg.num_layers): + y = EncoderDecoder1DBlock( + config=cfg, name=f'encoderdecoderblock_{lyr}')( + y, + encoded, + decoder_mask=decoder_mask, + encoder_decoder_mask=encoder_decoder_mask, + decode=decode, + train=train) + y = nn.LayerNorm(dtype=cfg.dtype, name='encoderdecoder_norm')(y) + + # Decoded Logits + if cfg.get('logits_via_embedding', True): + # Use the transpose of embedding matrix for logit transform. + logits = output_embed.attend(y.astype(jnp.float32)) + # Correctly normalize pre-softmax logits for this shared case. + logits = logits / jnp.sqrt(y.shape[-1]) + else: + logits = nn.Dense( + cfg.vocab_size, + dtype=cfg.dtype, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6), + name='logitdense')( + y) + return logits + + +class Seq2SeqModule(nn.Module): + """Transformer Model for sequence to sequence translation.""" + + encoder_model: str + encoder_config: ml_collections.ConfigDict + decoder_model: str + decoder_config: ml_collections.ConfigDict + add_masked_word_prediction_loss: bool + freeze_rgb_stream: bool + dtype: jnp.dtype + + def setup(self): + + if self.encoder_model == 've': + # Vanilla transformer encoder + self.encoder = Encoder(config=self.encoder_config) + elif self.encoder_model == 'mbt': + self.encoder = mbt_model.MBT( + num_classes=1, + dtype=self.dtype, + return_preclassifier=True, + **self.encoder_config, + name='video_encoder') + self.decoder = Decoder(config=self.decoder_config) + + def encode(self, + x_rgb: Optional[jnp.ndarray], + x_flow: Optional[jnp.ndarray], + x_spec: Optional[jnp.ndarray], + x_wave: Optional[jnp.ndarray], + x_text: Optional[jnp.ndarray], + *, + train: bool, + debug: bool = False): + """Applies Transformer encoder-branch on the inputs.""" + # TODO(valgab): Make attention masks for the case where input_segmentation + # is not None + x = { + 'rgb': x_rgb, + 'flow': x_flow, + 'spectrogram': x_spec, + 'wave': x_wave, + 'text': x_text + } + + encoded = self.encoder(x, train=train, debug=debug) + encoding_dict = None + + if self.freeze_rgb_stream: + encoded['rgb'] = jax.lax.stop_gradient(encoded['rgb']) + encoded = jnp.concatenate( + [encoded[m] for m in self.encoder_config.modality_fusion], axis=1) + logging.info('stop_gradient applied') + elif self.add_masked_word_prediction_loss: + encoding_dict = encoded + encoded = jnp.concatenate( + [encoded[m] for m in self.encoder_config.modality_fusion], axis=1) + return encoded, encoding_dict + + def decode( + self, + encoded, + targets, # Used for teacher forcing + decode: bool, + train: bool, + encoded_mask: Optional[jnp.ndarray] = None, + debug: bool = False, + ): + """Applies Transformer decoder-branch on encoded-input and target. + + Args: + encoded: encoded input data from encoder. + targets: target data. + decode: whether to run in single-position autoregressive mode. + train: whether to apply dropout + encoded_mask: mask tensor indicating valitity of each token in encoded. + debug: debug mode + + Returns: + logits array from transformer decoder. + """ + cfg = self.decoder_config + + # Make padding attention masks. + if decode: + # for fast autoregressive decoding only a special encoder-decoder mask is + # used. + decoder_mask = None + else: + # Teacher forcing + # No attention to target paddings, no attention to future tokens + decoder_mask = nn.combine_masks( + nn.make_attention_mask(targets > 0, targets > 0, dtype=cfg.dtype), + nn.make_causal_mask(targets, dtype=self.dtype)) + encoder_decoder_mask = None + if encoded_mask is not None: + encoder_decoder_mask = encoded_mask[:, jnp.newaxis, jnp.newaxis, :] + logits = self.decoder( + encoded, + targets, + decoder_mask=decoder_mask, + encoder_decoder_mask=encoder_decoder_mask, + decode=decode, + train=train) + return logits.astype(self.dtype) + + def __call__(self, + x_rgb: Optional[jnp.ndarray], + x_flow: Optional[jnp.ndarray], + x_spec: Optional[jnp.ndarray], + x_wave: Optional[jnp.ndarray], + x_text: Optional[jnp.ndarray], + targets, + masked_token_idxs: Optional[jnp.ndarray] = None, + masked_token_idx_masks: Optional[jnp.ndarray] = None, + masked_word_targets: Optional[jnp.ndarray] = None, + decode: bool = False, + *, + train: bool, + debug: bool = False): + """Applies Transformer model on the inputs.""" + + encoded = self.encode( + x_rgb, x_flow, x_spec, x_wave, x_text, train=train, debug=debug) + + output = self.decode(encoded[0], targets, decode=decode, train=train) + + if not train or not self.add_masked_word_prediction_loss: + return output + + assert masked_token_idxs is not None + assert masked_token_idx_masks is not None + assert masked_word_targets is not None + assert encoded[1] is not None + logging.info('encoded[0] %s', encoded[0]) + logging.info('encoded[1] %s', encoded[1]) + max_num_masked_words = masked_token_idxs.shape[1] + x_out = [] + x_mask = [] + sample_masked_inputs = jax.vmap( + jax.vmap(lambda x, y: x[y], (None, 0), 0), (0, 0), 0) + for modality in self.encoder_config.modality_fusion: + modality_feature = encoded[1][modality] + if modality == 'spectrogram': + logging.info('spectrogram feature %s', modality_feature) + modality_feature_mask = masked_token_idx_masks + if self.encoder_config.classifier == 'token': + cls_token = sample_masked_inputs( + modality_feature, jnp.zeros_like(masked_word_targets[..., 0:1])) + modality_feature = modality_feature[:, 1:, :] + cls_token_mask = jnp.ones_like(masked_token_idx_masks[..., 0:1]) + modality_feature = sample_masked_inputs(modality_feature, + masked_token_idxs) + if self.encoder_config.classifier == 'token': + modality_feature = jnp.concatenate([cls_token, modality_feature], 2) + modality_feature_mask = jnp.concatenate( + [cls_token_mask, masked_token_idx_masks], 2) + logging.info('spectrogram feature 2 %s', modality_feature) + else: + modality_feature = jnp.repeat( + modality_feature[:, jnp.newaxis], max_num_masked_words, 1) + modality_feature_mask = jnp.ones_like(modality_feature[..., 0]) + x_out.append(modality_feature) + x_mask.append(modality_feature_mask) + masked_input_features = jnp.concatenate(x_out, 2) + masked_input_feature_masks = jnp.concatenate(x_mask, 2) + logging.info('masked_input_features %s', masked_input_features) + b, m, t, e = masked_input_features.shape + masked_input_features = jnp.reshape(masked_input_features, [b * m, t, e]) + masked_input_masks = jnp.reshape(masked_input_feature_masks, [b * m, t]) + masked_word_targets = jnp.reshape(masked_word_targets, [b * m, -1]) + + word_pred_output = self.decode( + masked_input_features, + masked_word_targets, + decode=False, + train=False, + encoded_mask=masked_input_masks) + + return output, word_pred_output + + +class Seq2SeqModel(object): + """Sequence to sequence model.""" + + def __init__( + self, + config: Optional[ml_collections.ConfigDict], + dataset_meta_data: Dict[str, Any], + ) -> None: + if config is None: + logging.warning('You are creating the model with default config.') + config = self.default_flax_model_config() + self.config = config + self.dataset_meta_data = dataset_meta_data + self.flax_model = self.build_flax_model() + + def build_flax_model(self) -> nn.Module: + """Sequence to sequence flax module.""" + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + encoder_model = self.config.model.get('encoder_model', 've') + if encoder_model == 've': + encoder_config = self.config.ve.model + elif encoder_model == 'mbt': + encoder_config = self.config.mbt.model + decoder_model = self.config.model.get('decoder_model', 'vd') + if decoder_model == 'vd': + decoder_config = self.config.vd.model + add_mwp = self.config.get('predict_masked_word', False) + freeze_rgb_stream = self.config.model.get('freeze_rgb_stream', False) + return Seq2SeqModule( + dtype=model_dtype, + encoder_model=encoder_model, + encoder_config=encoder_config, + decoder_model=decoder_model, + decoder_config=decoder_config, + add_masked_word_prediction_loss=add_mwp, + freeze_rgb_stream=freeze_rgb_stream,) + + def get_metrics_fn(self, split: Optional[str] = None): + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + targets, weights)``` + """ + del split # The metric function is the same for all splits. + + def metric_fn( + logits: jnp.ndarray, + targets: jnp.ndarray, + weights: jnp.ndarray, + target_is_onehot: bool = False, + metrics: base_model.MetricNormalizerFnDict = _CLASSIFICATION_METRICS, + ) -> Dict[str, Tuple[float, int]]: + """Calcualte metrics for the classification task. + + + Currently we assume each metric_fn has the API: + ```metric_fn(logits, targets, weights)``` + and returns an array of shape [batch_size]. We also assume that to compute + the aggregate metric, one should sum across all batches, then divide by + the + total samples seen. In this way we currently only support metrics of the + 1/N + sum f(inputs, targets). Note, the caller is responsible for dividing by + the normalizer when computing the mean of each metric. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + targets: Targets to be decoded. + weights: Indicate which tokens are valid (1) vs padding (0). + target_is_onehot: If the target is a one-hot vector. + metrics: The classification metrics to evaluate. The key is the name of + the metric, and the value is the metrics function. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples + of + (metric, normalizer). + """ + if target_is_onehot: + one_hot_targets = targets + else: + one_hot_targets = common_utils.onehot(targets, + logits.shape[-1]) + + # This psum is required to correctly evaluate with multihost. Only host 0 + # will report the metrics, so we must aggregate across all hosts. The psum + # will map an array of shape [n_devices, batch_size] -> [batch_size] + # by summing across the devices dim. The outer sum then sums across the + # batch dim. The result is then we have summed across all samples in the + # sharded batch. + evaluated_metrics = {} + for key, val in metrics.items(): + evaluated_metrics[key] = model_utils.psum_metric_normalizer( # pytype: disable=wrong-arg-types # jax-ndarray + (val[0](logits, one_hot_targets, # pytype: disable=wrong-arg-types # jax-types + weights), val[1](logits, one_hot_targets, weights))) # pytype: disable=wrong-arg-types # jax-types + return evaluated_metrics # pytype: disable=bad-return-type # jax-types + + return metric_fn + + def loss_function( + self, + logits: jnp.ndarray, + targets: jnp.ndarray, + weights: jnp.ndarray, + model_params: Optional[jnp.ndarray] = None, + ) -> float: + """Returns softmax cross entropy loss with an L2 penalty on the weights. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + targets: Targets to be decoded. + weights: Indicate which tokens are valid (1) vs padding (0). + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + + if self.config.get('predict_masked_word', False): + logits, masked_word_logits = logits + targets, masked_word_targets = targets + weights, masked_word_weights = weights + + if self.dataset_meta_data.get('target_is_onehot', False): + one_hot_targets = targets + else: + one_hot_targets = common_utils.onehot(targets, logits.shape[-1]) + + sof_ce_loss = model_utils.weighted_softmax_cross_entropy( + logits, + one_hot_targets, + weights, + label_smoothing=self.config.get('label_smoothing')) + + if self.config.get('l2_decay_factor') is None: + total_loss = sof_ce_loss + else: + l2_loss = model_utils.l2_regularization(model_params) + total_loss = sof_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + + if self.config.get('predict_masked_word', False): + mwp_loss = model_utils.weighted_softmax_cross_entropy( + masked_word_logits, + common_utils.onehot(masked_word_targets, + masked_word_logits.shape[-1]), + masked_word_weights, + label_smoothing=self.config.get('label_smoothing')) + total_loss += mwp_loss * self.config.get('mwp_loss_factor', 1.0) + + return total_loss # pytype: disable=bad-return-type # jax-ndarray + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return ml_collections.ConfigDict({}) diff --git a/scenic/projects/baselines/README.md b/scenic/projects/baselines/README.md new file mode 100644 index 0000000000000000000000000000000000000000..57e784bd9d8efd0b8dd33cce122fc750f5171232 --- /dev/null +++ b/scenic/projects/baselines/README.md @@ -0,0 +1,108 @@ +## Scenic baseline models +This directory contains several baseline models implemented in Scenic. +These models span a range of architectures, tasks and modalities. + +They include: + + * [Vision Transformer](https://arxiv.org/abs/2010.11929) (ViT) for image classification. [[Official Implementation](https://github.com/google-research/vision_transformer#vision-transformer)] + * [Detection Transformer](https://arxiv.org/abs/2005.12872) (DETR) for object detection. [[Official PyTorch Implementation](https://github.com/facebookresearch/detr)] + * [Deformable Detection Transformer](https://arxiv.org/abs/2010.04159) (Deformable DETR) for object detection. [[Official PyTorch Implementation](https://github.com/fundamentalvision/Deformable-DETR)] + * [MLP-Mixer](https://arxiv.org/abs/2105.01601) an all-MLP model for image classification. [[Official Implementation](https://github.com/google-research/vision_transformer#mlp-mixer)] + * [CLIP](https://arxiv.org/abs/2103.00020) for learning visual concepts from natural language supervision [[Official Implementation](https://github.com/openai/CLIP/tree/main/clip)] + * [BERT](https://arxiv.org/abs/1810.04805) for language understanding. [[Official TF Implementation](https://github.com/google-research/bert)] + * [Residual Networks](https://arxiv.org/abs/1512.03385) (ResNet) for image classification. + * [Big Transfer ResNet](https://arxiv.org/abs/1912.11370) (BitResNet) for image classification. [[Official Implementation](https://github.com/google-research/big_transfer)] + * [UNet](http://arxiv.org/abs/1505.04597) for semantic segmentation. + * [Axial-ResNet](https://arxiv.org/abs/2003.07853) for image classification. [[Official TF Implementation](https://github.com/csrhddlam/axial-deeplab)] + * [PCT: Point Cloud Transformer](https://arxiv.org/abs/2012.09688) for shape classification, part segmentation and normal estimation tasks. + * [Universal Transformers](https://arxiv.org/abs/1807.03819) for sequence modeling with adaptive computation. + * [PonderNet](https://arxiv.org/abs/2107.05407) for sequence modeling with adaptive computation. + * [CenterNet](https://arxiv.org/abs/1904.07850) and [CenterNet2](https://arxiv.org/abs/2103.07461) for object detection. + * [SAM](https://arxiv.org/abs/2304.02643) for prompt-based segmentation + +## Model Zoo + +### Vision Transformers +We share checkpoints of models from the following papers, trained on various +datasets: + +- **ViT**: [An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale](https://arxiv.org/abs/2010.11929) +- **ViT-AugReg:** [How to train your ViT? Data, Augmentation, and Regularization in Vision Transformers](https://arxiv.org/abs/2106.10270) + For the `ImageNet-21K`-pre-trained checkpoints we are using the "recommended + checkpoints" (see paper section 4.5). The `ImageNet Accuracy` numbers are + after fine-tuning (resolution 224px) as described in Appendix B. For more + information see https://github.com/google-research/vision_transformer/ + +| Model | Dataset | Pretraining | ImageNet Accuracy | Checkpoint | +|-------|:-:|:-:|:-:|:-:| +| ViT-B/16 | ImageNet | - | 73.7* | [Link](https://storage.googleapis.com/scenic-bucket/baselines/ViT_B_16_ImageNet1k) | +| ViT-AugReg-B/16 | ImageNet | - | 79.7 | [Link](https://storage.googleapis.com/scenic-bucket/baselines/ViT-AugReg_B_16_ImageNet1k) | +| ViT-B/32 | - | ImageNet-21K | - | [Link](https://storage.googleapis.com/scenic-bucket/baselines/ViT_B_32_ImageNet21k) | +| ViT-B/16 | - | ImageNet-21K | - | [Link](https://storage.googleapis.com/scenic-bucket/baselines/ViT_B_16_ImageNet21k) | +| ViT-L/32 | - | ImageNet-21K | - | [Link](https://storage.googleapis.com/scenic-bucket/baselines/ViT_L_32_ImageNet21k) | +| ViT-L/16 | - | ImageNet-21K | - | [Link](https://storage.googleapis.com/scenic-bucket/baselines/ViT_L_16_ImageNet21k) | +| ViT-AugReg-B/32 | - | ImageNet-21K | 79.1 | [Link](https://storage.googleapis.com/vit_models/augreg/B_32-i21k-300ep-lr_0.001-aug_light1-wd_0.1-do_0.0-sd_0.0.npz) | +| ViT-AugReg-B/16 | - | ImageNet-21K | 84.0 | [Link](https://storage.googleapis.com/vit_models/augreg/B_16-i21k-300ep-lr_0.001-aug_medium1-wd_0.1-do_0.0-sd_0.0.npz) | + +*Note that 73.7 is the accuracy on ImageNet1k validation set, for a model that +is trained for 90 epochs from scratch. The scores reported in [How to train your ViT?](https://arxiv.org/abs/2106.10270) paper for vanilla ViT (74.1) is with 300 +epochs of pre-training on ImageNet1k followed by fine-tuning on ImageNet1k. + + +The AugReg params can be directly loaded into a `train_state`: + +```python +train_state_with_augreg_params = model.load_augreg_params( + train_state, + # Can read directly from storage bucket. Filename must start with model name + # ("B_32-" in this case). + 'gs://vit_models/augreg/B_32-i21k-300ep-lr_0.001-aug_light1-wd_0.1-do_0.0-sd_0.0.npz', + # Config is checked against AugReg config. + config.model) +``` + + +### ResNet +We share checkpoints of models from the following papers, trained on ImageNet: + +- **ResNet**: [Deep Residual Learning for Image Recognition](https://arxiv.org/abs/1512.03385) +- **BiTResNet**: [Big Transfer (BiT): General Visual Representation Learning](https://arxiv.org/abs/1912.11370) + +| Model | Dataset | Pretraining | ImageNet Accuracy | Checkpoint | +|-------|:-:|:-:|:-:|:-:| +| ResNet50 | ImageNet | - | 76.1 | [Link](https://storage.googleapis.com/scenic-bucket/baselines/ResNet50_ImageNet1k) | +| BiTResNet50 | ImageNet | - | 77.0 | [Link](https://storage.googleapis.com/scenic-bucket/baselines/BiTResNet50_ImageNet1k) | + + +### DETR +Please check [DETR directory](detr) for more information and link to download +pretrained checkpoints. + +### Deformable DETR + +Please check [Deformable DETR directory](deformable_detr) for more information +and link to download pretrained checkpoints. + +### CLIP +Please check [CLIP directory](clip) for more information and link to download +pretrained checkpoints. + + +### BERT +Please check [BERT directory](bert) for more information and link to download +pretrained checkpoints. + +### Universal Transformers +Please check [Universal Transformer directory](universal_transformer) for more +information. + +### PonderNet +Please check [PonderNet directory](pondernet) for more information. + +### CenterNet +Please check [CenterNet directory](centernet) for more information and link to download +pretrained checkpoints. + +### SAM +Please check [SAM directory](segment_anything) for more information and link to +download pretrained checkpoints. diff --git a/scenic/projects/baselines/__init__.py b/scenic/projects/baselines/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/__pycache__/__init__.cpython-310.pyc b/scenic/projects/baselines/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac0f8fbae0bbb1dcc841d551dbf30108bb206d85 Binary files /dev/null and b/scenic/projects/baselines/__pycache__/__init__.cpython-310.pyc differ diff --git a/scenic/projects/baselines/__pycache__/__init__.cpython-311.pyc b/scenic/projects/baselines/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b48023b6c30cc7f6ae3725efbe5187ba0c5978a2 Binary files /dev/null and b/scenic/projects/baselines/__pycache__/__init__.cpython-311.pyc differ diff --git a/scenic/projects/baselines/__pycache__/__init__.cpython-312.pyc b/scenic/projects/baselines/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4dad81af3e61c6ad1607fe290eb17ba5881250d2 Binary files /dev/null and b/scenic/projects/baselines/__pycache__/__init__.cpython-312.pyc differ diff --git a/scenic/projects/baselines/axial_resnet.py b/scenic/projects/baselines/axial_resnet.py new file mode 100644 index 0000000000000000000000000000000000000000..c1f8a2897d942c0ef597bddbc3e7b15bbf3dc61c --- /dev/null +++ b/scenic/projects/baselines/axial_resnet.py @@ -0,0 +1,339 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of AxialResNet with group norm and weight standardization. + +Ported from: +https://arxiv.org/abs/2003.07853 +based on: +https://github.com/csrhddlam/axial-deeplab/tree/optimize +""" + +from typing import Dict, Tuple, Union + +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models.multilabel_classification_model import MultiLabelClassificationModel +from scenic.model_lib.layers import nn_layers +from scenic.model_lib.layers import nn_ops +from scenic.projects.baselines import bit_resnet + + +class SelfAttentionWith1DRelativePos(nn.Module): + """Multi-head dot-product self-attention with reltive positional encodeing. + + Attributes: + num_heads: Number of attention heads. + """ + + num_heads: int + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + """Applies multi-head dot product self-attention on the input data. + + Args: + x: input of shape `[bs, len, features]`. + + Returns: + output of shape `[bs, len, features]`. + """ + bs, input_len, features = x.shape + if features % (2 * self.num_heads) != 0: + raise ValueError( + f'Inputs feature dimension {features} must be divisible by 2 * number ' + f'of heads {2*self.num_heads}.') + head_features = features // self.num_heads + + # Apply qkv transformation. + qkv = nn.Dense( + features=features * 2, + kernel_init=nn.initializers.normal(stddev=1.0 / features), + use_bias=False, + dtype=jnp.float32)( + x) + + # Normalize. + qkv = nn.GroupNorm(epsilon=1e-4, name='gn_qkv')(qkv) + # Split to multi-headed. + qkv = qkv.reshape(bs, input_len, self.num_heads, + head_features * 2).transpose((0, 2, 3, 1)) # To bhdl. + # Following the reference implementation, we set feature-size per head + # of query, key, to half of the feature size per head for value: + query, key, value = jnp.split( + qkv, [head_features // 2, head_features], axis=2) + + # Compute relative positional attention logits. + length = query.shape[-1] # Shape: `[bs, heads, depth, len]`. + relative_emb = self.param( + 'relative_pos_emb', nn.initializers.normal(stddev=1.0 / head_features), + (head_features * 2, 2 * length - 1), jnp.float32) + relative_pos_emb = jnp.take( + relative_emb, + nn_ops.compute_1d_relative_distance(length, length), + axis=-1) + relative_pos_emb_q, relative_pos_emb_k, relative_pos_emb_v = jnp.split( + relative_pos_emb, [head_features // 2, head_features], axis=0) + + # When computing the similarity of keys and queries, we in fact have + # (Q + P_q)*(K + P_k), which is Q*K + K*P_q + Q*P_k + P_q*P_k. + # The last term, i.e. P_q*P_k, is fixed for all Q, K, but but we compute + # the attention logits for other three terms: + # 1) We attend from content of queries to the relative position of keys, + # i.e. Q*P_k: + qr_attn_logits = jnp.einsum('bhdi,dij->bhij', query, relative_pos_emb_k) + # 2) We attend from content of keys to the relative position of queries, + # i.e. K*P_q + kr_attn_logits = jnp.einsum('bhdi,dij->bhij', key, relative_pos_emb_q) + # 3) We attend from content of queries to the content of keys, i.e. Q*K: + qk_attn_logits = jnp.einsum('bhdi,bhdj->bhij', query, key) + # Finally we combine all these attention logits: + attn_weights = qk_attn_logits + qr_attn_logits + kr_attn_logits + + # Normalize the attention weights with softmax. + attn_weights = jax.nn.softmax(attn_weights, axis=3).astype(jnp.float32) + # Weighted sum over values for each query position. + wv = jnp.einsum('bhij,bhdj->bhdi', attn_weights, value) + wve = jnp.einsum('bhij,dij->bhdi', attn_weights, relative_pos_emb_v) + # From bhdi to bihd and smash head dim. + + x = (wv + wve).transpose((0, 3, 1, 2)) # From bhdi to bihd. + # Smash head dim and back to the original inputs dimensions. + out = x.reshape(bs, input_len, features) + return nn.GroupNorm(epsilon=1e-4, name='gn_out')(out) + + +class AxialSelfAttention(nn.Module): + """Axial Self Attention module. + + Attributes: + attention_axis: Axis of the attention + axial_attention_configs: Configurations of the axial attention. + """ + + attention_axis: int + axial_attention_configs: ml_collections.ConfigDict + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + """Applies Axial Self Attention module. + + Args: + x: Input data. + + Returns: + Output after axial attention applied on it. + """ + bs, height, width, channel = x.shape + if self.attention_axis == 1: # Row attention. + x = x.transpose((0, 2, 1, 3)).reshape(bs * width, height, channel) + elif self.attention_axis == 2: # Column attention. + x = x.reshape(bs * height, width, channel) + else: + raise ValueError('Only attention over rows or columns is supported.') + + x = SelfAttentionWith1DRelativePos(self.axial_attention_configs.num_heads)( + x) + + if self.attention_axis == 1: + return x.reshape((bs, width, height, channel)).transpose((0, 2, 1, 3)) + else: + return x.reshape((bs, height, width, channel)) + + +class AxialResidualUnit(nn.Module): + """Bottleneck AxialResNet block. + + Attributes: + nout: Number of output features. + axial_attention_configs: Configurations of the axial attention. + strides: Down-sampling stride. + bottleneck: If True, the block is a bottleneck block. + """ + nout: int + axial_attention_configs: ml_collections.ConfigDict + strides: Tuple[int, ...] = (1, 1) + bottleneck: bool = True + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + features = self.nout + nout = self.nout * 4 if self.bottleneck else self.nout + needs_projection = x.shape[-1] != nout or self.strides != (1, 1) + residual = x + if needs_projection: + residual = bit_resnet.StdConv( + nout, (1, 1), self.strides, use_bias=False, name='conv_proj')( + residual) + residual = nn.GroupNorm(epsilon=1e-4, name='gn_proj')(residual) + + if self.bottleneck: + x = bit_resnet.StdConv(features, (1, 1), use_bias=False, name='conv1')(x) + x = nn.GroupNorm(epsilon=1e-4, name='gn1')(x) + x = nn.relu(x) + + # Axial block that is replacing the 3x3 Convs in the ResNet residual unit. + # Row attention: + x = AxialSelfAttention( + attention_axis=1, axial_attention_configs=self.axial_attention_configs)( + x) + # Column attention: + x = AxialSelfAttention( + attention_axis=2, axial_attention_configs=self.axial_attention_configs)( + x) + if self.strides == (2, 2): + x = nn.avg_pool(x, (2, 2), strides=(2, 2), padding='SAME') + x = nn.relu(x) + + last_kernel = (1, 1) if self.bottleneck else (3, 3) + x = bit_resnet.StdConv(nout, last_kernel, use_bias=False, name='conv3')(x) + x = nn.GroupNorm( + epsilon=1e-4, name='gn3', scale_init=nn.initializers.zeros)( + x) + x = nn.relu(residual + x) + + return x + + +class AxialResNetStage(nn.Module): + """ResNet Stage: one or more stacked ResNet blocks. + + Attributes: + block_size: Number of ResNet blocks to stack. + nout: Number of features. + first_stride: Downsampling stride. + bottleneck: If True, the bottleneck block is used. + """ + + block_size: int + nout: int + axial_attention_configs: ml_collections.ConfigDict + first_stride: Tuple[int, ...] + bottleneck: bool = True + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + x = AxialResidualUnit( + self.nout, + axial_attention_configs=self.axial_attention_configs, + strides=self.first_stride, + bottleneck=self.bottleneck, + name='unit1')( + x) + for i in range(1, self.block_size): + x = AxialResidualUnit( + self.nout, + axial_attention_configs=self.axial_attention_configs, + strides=(1, 1), + bottleneck=self.bottleneck, + name=f'unit{i + 1}')( + x) + return x + + +class AxialResNet(nn.Module): + """Axial ResNet. + + Attributes: + num_outputs: Num output classes. If None, a dict of intermediate feature + maps is returned. + width_factor: Width multiplier for each of the ResNet stages. + num_layers: Number of layers (see `BLOCK_SIZE_OPTIONS` for stage + configurations). + """ + num_outputs: int + axial_attention_configs: ml_collections.ConfigDict + width_factor: int = 1 + num_layers: int = 50 + + @nn.compact + def __call__( + self, + x: jnp.ndarray, + *, + train: bool = True, + debug: bool = False) -> Union[jnp.ndarray, Dict[str, jnp.ndarray]]: + """Applies the AxialResNet model to the inputs. + + Args: + x: Inputs to the model. + train: Unused. + debug: Unused. + + Returns: + Un-normalized logits if `num_outputs` is provided, a dictionary with + representations otherwise. + """ + del train + del debug + blocks, bottleneck = bit_resnet.BLOCK_SIZE_OPTIONS[self.num_layers] + width = int(64 * self.width_factor) + + # Root block. + x = bit_resnet.StdConv( + width, (7, 7), (2, 2), use_bias=False, name='conv_root')( + x) + x = nn.GroupNorm(epsilon=1e-4, name='gn_root')(x) + x = nn.relu(x) + x = nn.max_pool(x, (3, 3), strides=(2, 2), padding='SAME') + + # Stages. + x = AxialResNetStage( + blocks[0], + width, + axial_attention_configs=self.axial_attention_configs, + first_stride=(1, 1), + bottleneck=bottleneck, + name='block1')( + x) + for i, block_size in enumerate(blocks[1:], 1): + x = AxialResNetStage( + block_size, + width * 2**i, + axial_attention_configs=self.axial_attention_configs, + first_stride=(2, 2), + bottleneck=bottleneck, + name=f'block{i + 1}')( + x) + + # Head. + x = jnp.mean(x, axis=(1, 2)) + x = nn_layers.IdentityLayer(name='pre_logits')(x) + return nn.Dense( + self.num_outputs, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x) + + +class AxialResNetMultiLabelClassificationModel(MultiLabelClassificationModel): + """Implements the AxialResNet model for multi-label classification.""" + + def build_flax_model(self) -> nn.Module: + return AxialResNet( + num_outputs=self.dataset_meta_data['num_classes'], + axial_attention_configs=self.config.axial_attention_configs, + width_factor=self.config.get('width_factor', 1), + num_layers=self.config.num_layers, + ) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return ml_collections.ConfigDict( + dict( + width_factor=1, + num_layers=5, + axial_attention_configs=ml_collections.ConfigDict({'num_heads': 2}), + )) diff --git a/scenic/projects/baselines/bert/README.md b/scenic/projects/baselines/bert/README.md new file mode 100644 index 0000000000000000000000000000000000000000..6a0e18e6b9b78e7dbb773c80077ee3b2c82141c3 --- /dev/null +++ b/scenic/projects/baselines/bert/README.md @@ -0,0 +1,92 @@ +# BERT + +JAX implementation of [BERT](https://arxiv.org/abs/1810.04805) that +follows and reproduces the numbers of the +[official TF implmenetation of BERT](https://github.com/tensorflow/models/tree/master/official/nlp/bert). + +The code here at this point supports the pretraining and finetuning/fewshot eval +on GLUE. We hope to find time to also add support for finetuning on SuperGLUE, +SQUAD, and XTREME based on [the code in Tensorflow model](https://github.com/tensorflow/models/tree/master/official/nlp/finetuning). + +### Additional Requirements: +The following command will install the required packages for BERT. +```shell +$ pip install -r scenic/projects/baselines/bert/requirements.txt +``` + +## Process Datasets +The code here consumes data with the same format as the official +implementation. So to generate the data, you can follow this instruction, +that is also explained in [BERT official repo](https://github.com/tensorflow/models/tree/master/official/nlp/bert#process-datasets): + +So to start, you first need to get the preprocessing code: +```shell +$ git clone https://github.com/tensorflow/models.git +``` + +### Pre-training + +To generate pre-training data, you can use the +[`create_pretraining_data` script](https://github.com/tensorflow/models/blob/master/official/nlp/data/create_pretraining_data.py) +(which is essentially branched from [BERT research repo](https://github.com/google-research/bert)) +to get the processed pre-training data. + +Running the pre-training script requires an input and output directory, as well +as a vocab file. Note that `max_seq_length` will need to match the sequence +length parameter you specify when you run pre-training. + +Example shell script to call create_pretraining_data.py +```shell +$ export WORKING_DIR='local disk or cloud location' +$ export BERT_DIR='local disk or cloud location' +$ python models/official/nlp/data/create_pretraining_data.py \ + --input_file=$WORKING_DIR/input/input.txt \ + --output_file=$WORKING_DIR/output/tf_examples.tfrecord \ + --vocab_file=$BERT_DIR/wwm_uncased_L-24_H-1024_A-16/vocab.txt \ + --do_lower_case=True \ + --max_seq_length=512 \ + --max_predictions_per_seq=76 \ + --masked_lm_prob=0.15 \ + --random_seed=12345 \ + --dupe_factor=5 +``` + +### Fine-tuning +To prepare the fine-tuning data for final model training, use the +[`create_finetuning_data.py` script](https://github.com/tensorflow/models/blob/master/official/nlp/data/create_finetuning_data.py). +Resulting datasets in `tf_record` format and training meta data should be later +passed to training or evaluation scripts. The task-specific arguments are +described in following sections: + +#### GLUE + +Users can download the +[GLUE data](https://gluebenchmark.com/tasks) by running +[this script](https://gist.github.com/W4ngatang/60c2bdb54d156a41194446737ce03e2e) +and unpack it to some directory `$GLUE_DIR`. + +```shell +$ export GLUE_DIR=~/glue +$ export BERT_DIR=gs://cloud-tpu-checkpoints/bert/keras_bert/uncased_L-24_H-1024_A-16 + +$ export TASK_NAME=MNLI +$ export OUTPUT_DIR=gs://some_bucket/datasets +$ python ../data/create_finetuning_data.py \ + --input_data_dir=${GLUE_DIR}/${TASK_NAME}/ \ + --vocab_file=${BERT_DIR}/vocab.txt \ + --train_data_output_path=${OUTPUT_DIR}/${TASK_NAME}_train.tf_record \ + --eval_data_output_path=${OUTPUT_DIR}/${TASK_NAME}_eval.tf_record \ + --meta_data_file_path=${OUTPUT_DIR}/${TASK_NAME}_meta_data \ + --fine_tuning_task_type=classification --max_seq_length=128 \ + --classification_task_name=${TASK_NAME} +``` + + +## Pretrained checkpoints +We will release BERT checkpoints that are pretrained using this code and can be +used with no specific modification or weight surgery. + + +### Acknowledgment +We would like to thank Valerii Likhosherstov and Yi Tay for their contribution +to the BERT implementation in Scenic. diff --git a/scenic/projects/baselines/bert/__init__.py b/scenic/projects/baselines/bert/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/bert/bert_base_model.py b/scenic/projects/baselines/bert/bert_base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..4879116894057e736b38700c909560e8cf9dd306 --- /dev/null +++ b/scenic/projects/baselines/bert/bert_base_model.py @@ -0,0 +1,298 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class for models working with bert.""" + +from typing import Callable, Dict, Optional, Tuple, Union + +from flax.training import common_utils +import jax +import jax.numpy as jnp +import numpy as np +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[Dict[str, jnp.ndarray], Batch], Dict[str, Tuple[float, + int]]] +LossFn = Callable[[Dict[str, jnp.ndarray], Batch, Optional[jnp.ndarray]], float] + + +def num_examples( + logits: jnp.ndarray, + weights: Optional[jnp.ndarray] = None) -> Union[jnp.ndarray, int]: + if weights is None: + return logits.shape[0] + return weights.sum() + + +def sparse_weighted_unnormalized_softmax_cross_entropy( + logits: jnp.ndarray, + labels: jnp.ndarray, + mlm_weights: jnp.ndarray, + batch_mask_weights: Optional[jnp.ndarray] = None) -> jnp.ndarray: + """Computes sparse weighted softmax cross entropy give logits and targets. + + Args: + logits: Logits of shape [batch_size, length, vocab_size]. + labels: Labels from {0 ... vocab_size - 1} of shape [batch_size, length]. + mlm_weights: Weights of shape [batch_size, length], indicating masked tokens + in masked language modeling task. + batch_mask_weights: None or array of shape [batch,] indicating masked + examples. + + Returns: + Per example Loss value. + """ + batch_size, length, vocab_size = logits.shape + logits = jax.nn.log_softmax(logits) + logits, mlm_weights = logits.ravel(), mlm_weights.ravel() + offsets = (np.arange(batch_size * length) * vocab_size).reshape((-1, length)) + labels = (labels + offsets).ravel() + loss = -jnp.take(logits, labels, axis=0) + loss = loss * mlm_weights + loss = loss.sum(axis=-1, keepdims=True) / ( + mlm_weights.sum(axis=-1, keepdims=True) + 1e-8 + ) + if batch_mask_weights is not None: + loss = model_utils.apply_weights(loss, batch_mask_weights) + + return loss + + +def sparse_weighted_softmax_cross_entropy( + logits: jnp.ndarray, + labels: jnp.ndarray, + mlm_weights: jnp.ndarray, + batch_mask_weights: Optional[jnp.ndarray] = None) -> jnp.ndarray: + """Same as weighted_unnormalized, but additionally takes a mean. + + Args: + logits: Logits of shape [batch_size, length, vocab_size]. + labels: Labels from {0 ... vocab_size - 1} of shape [batch_size, length]. + mlm_weights: Weights of shape [batch_size, length], indicating masked tokens + in masked language modeling task. + batch_mask_weights: None or array of shape [batch,] indicating masked + examples. + + Returns: + The mean cross entropy of the examples in the given batch as a scalar. + """ + if batch_mask_weights is not None: + normalization = batch_mask_weights.sum() + else: + normalization = mlm_weights.shape[0] # Batch size. + sparse_unnormalized_softmax_ce = ( + sparse_weighted_unnormalized_softmax_cross_entropy( # pylint: disable=line-too-long + logits, labels, mlm_weights, batch_mask_weights + ) + ) + return jnp.sum(sparse_unnormalized_softmax_ce) / (normalization + 1e-8) + + +def sparse_weighted_per_example_accuracy( + logits: jnp.ndarray, + labels: jnp.ndarray, + mlm_weights: jnp.ndarray, + batch_mask_weights: Optional[jnp.ndarray] = None) -> jnp.ndarray: + """Computes weighted number of correctly classified over the given batch. + + This computes the weighted number of correctly classified masked tokens in a + single, potentially padded minibatch. If the minibatch/inputs is padded (i.e., + it contains null examples/pad pixels) it is assumed that batch_mask_weights + is a binary mask where 0 indicates that the example/pixel is null/padded. + We assume the trainer will aggregate and divide by number of samples. + + Args: + logits: Logits of shape [batch_size, length, vocab_size]. + labels: Labels from {0 ... vocab_size - 1} of shape [batch_size, length]. + mlm_weights: Weights of shape [batch_size, length], indicating masked tokens + in masked language modeling task. + batch_mask_weights: None or array of shape [batch,] indicating masked + examples. + + Returns: + Per example accuracy of predicted masked tokens. + """ + preds = jnp.argmax(logits, axis=-1) + correct = jnp.equal(preds, labels) + correct = correct * mlm_weights + # Shape of per example acccuracy will be (batch_size,). + per_ex_accuracy = correct.sum(axis=-1) / (mlm_weights.sum(axis=-1) + 1e-8) + if batch_mask_weights is not None: + per_ex_accuracy = model_utils.apply_weights(per_ex_accuracy, + batch_mask_weights) + return per_ex_accuracy + + +def bert_metrics_function(outputs: Dict[str, jnp.ndarray], + batch: Batch) -> Dict[str, Tuple[float, int]]: + """Calcualte metrics for the BERT task. + + Args: + outputs: Output of model that has masked LM logits of shape [batch, length, + vocab_size], and next sentence prediction logits of shape [batch, 2]. + batch: Batch of data that has 'masked_lm_ids', 'masked_lm_weights' and + 'next_sentence_labels'. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples of + (metric, normalizer). + """ + mlm_logits = outputs['mlm_logits'] + nsp_logits = outputs['nsp_logits'] + next_sentence_labels = common_utils.onehot(batch['next_sentence_labels'], 2) + batch_weights = batch.get('batch_mask') # batch_mask might not be defined + per_ex_nsp_loss = model_utils.weighted_unnormalized_softmax_cross_entropy( + nsp_logits, next_sentence_labels, batch_weights) + per_ex_nsp_accuracy = model_utils.weighted_correctly_classified( + nsp_logits, next_sentence_labels, batch_weights) + + per_ex_mlm_loss = sparse_weighted_unnormalized_softmax_cross_entropy( + mlm_logits, batch['masked_lm_ids'], batch['masked_lm_weights'], + batch_weights) + per_ex_mlm_accuracy = sparse_weighted_per_example_accuracy( + mlm_logits, batch['masked_lm_ids'], batch['masked_lm_weights'], + batch_weights) + + # This psum is required to correctly evaluate with multihost. Only host 0 + # will report the metrics, so we must aggregate across all hosts. The psum + # will map an array of shape [n_global_devices, batch_size] -> [batch_size] + # by summing across the devices dimension. The outer sum then sums across the + # batch dim. The result is then we have summed across all samples in the + # sharded batch. + evaluated_metrics = {} + normalizer = num_examples(mlm_logits, batch_weights) + for name, value in zip( + ['nsp_loss', 'nsp_accuracy', 'mlm_loss', 'mlm_accuracy', 'loss'], [ + per_ex_nsp_loss, per_ex_nsp_accuracy, per_ex_mlm_loss, + per_ex_mlm_accuracy, per_ex_nsp_loss + per_ex_mlm_loss + ]): + evaluated_metrics[name] = model_utils.psum_metric_normalizer( + (value, normalizer)) + return evaluated_metrics # pytype: disable=bad-return-type # jax-ndarray + + +def compute_bert_loss(mlm_logits: jnp.ndarray, nsp_logits: jnp.ndarray, + batch: Batch) -> float: + """Computes BERT loss. + + Args: + mlm_logits: Masked LM logits of shape [batch, length, vocab_size]. + nsp_logits: Next sentence prediction logits of shape [batch, 2]. + batch: Batch of data that has 'masked_lm_ids', 'masked_lm_weights' and + 'next_sentence_labels'. + + Returns: + Loss value. + """ + next_sentence_labels = common_utils.onehot(batch['next_sentence_labels'], 2) + batch_weights = batch.get('batch_mask') # batch_mask might not be defined + nsp_loss = model_utils.weighted_softmax_cross_entropy(nsp_logits, + next_sentence_labels, + batch_weights) + mlm_loss = sparse_weighted_softmax_cross_entropy(mlm_logits, + batch['masked_lm_ids'], + batch['masked_lm_weights'], + batch_weights) + return nsp_loss + mlm_loss # pytype: disable=bad-return-type # jax-ndarray + + +class BERTBaseModel(base_model.BaseModel): + """Defines BERT base models. + + A model is class with three members: get_metrics_fn, loss_fn, and a + flax_model. + + get_metrics_fn returns a callable function, metric_fn, that calculates the + metrics and returns a dictionary. The metric function computes f(x_i, y_i) on + a minibatch, it has API: + ```metric_fn(logits, label, weights).``` + + The trainer will then aggregate and compute the mean across all samples + evaluated. + + loss_fn is a function of API + loss = loss_fn(logits, batch, model_params=None). + + This model class defines a softmax_cross_entropy_loss with weight decay, + where the weight decay factor is determined by config.l2_decay_factor. + + flax_model is returned from the build_flax_model function. A typical + usage pattern will be: + ``` + model_cls = bert_model.BERTModel + model = model_cls(config, dataset.meta_data) + flax_model = model.build_flax_model + dummy_input = {name: jnp.zeros(input_shape, model_input_dtype), ...} + model_state, params = flax_model.init( + rng, dummy_input, train=False).pop('params') + ``` + And this is how to call the model:s + ``` + variables = {'params': params, **model_state} + output, new_model_state = flax_model.apply(variables, inputs, ...) + ``` + """ + + def get_metrics_fn(self, split: Optional[str] = None) -> MetricFn: # pytype: disable=signature-mismatch # jax-ndarray + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(outputs, + batch)``` + """ + del split # For all splits, we return the same metric functions. + return bert_metrics_function + + def loss_function(self, + outputs: Dict[str, jnp.ndarray], + batch: Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Returns softmax cross entropy loss with an L2 penalty on the weights. + + Args: + outputs: a dictionary containing either 'logits' key of shape [batch, + length, num_classes] or 'nsp_logits' of shape [batch, 2] and + 'mlm_logits' of shape [batch, length, vocab_size] (for 'BERT' task). + batch: Batch of data that has 'label' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + total_loss = compute_bert_loss(outputs['mlm_logits'], outputs['nsp_logits'], + batch) + + if self.config.get('l2_decay_factor'): + l2_loss = model_utils.l2_regularization(model_params) + total_loss += 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss + + def build_flax_model(self): + raise NotImplementedError('Subclasses must implement build_flax_model().') + + def default_flax_model_config(self): + """Default config for the flax model that is built in `build_flax_model`. + + This function in particular serves the testing functions and supposed to + provide config tha are passed to the flax_model when it's build in + `build_flax_model` function, e.g., `model_dtype_str`. + """ + raise NotImplementedError( + 'Subclasses must implement default_flax_model_config().') diff --git a/scenic/projects/baselines/bert/configs/__init__.py b/scenic/projects/baselines/bert/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/bert/configs/bert_pretraining_config.py b/scenic/projects/baselines/bert/configs/bert_pretraining_config.py new file mode 100644 index 0000000000000000000000000000000000000000..268af4b3d8d854868c909461d81f9412caf243c0 --- /dev/null +++ b/scenic/projects/baselines/bert/configs/bert_pretraining_config.py @@ -0,0 +1,173 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for BERT pretraining. + +""" +# pylint: enable=line-too-long + +import ml_collections +from scenic.projects.baselines.bert.configs.glue import glue_fewshot + +VARIANT = 'BERT-B' + +EMBEDDING_WIDTH = {'Ti': 128, 'S': 128, 'B': 768, 'L': 1024} +HIDDEN_SIZE = {'Ti': 128, 'S': 256, 'B': 768, 'L': 1024} +NUM_HEADS = {'Ti': 2, 'S': 4, 'B': 12, 'L': 16} +MLP_DIM = {'Ti': 512, 'S': 1024, 'B': 3072, 'L': 4096} +NUM_LAYERS = {'Ti': 6, 'S': 12, 'B': 12, 'L': 24} + + +def get_config(): + """Returns configuration for BERT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'bert' + + # Dataset. + config.dataset_name = 'bert_wikibooks' + config.data_dtype_str = 'float32' + config.batch_size = 512 + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.prefetch_to_device = 2 + # Training data: + config.dataset_configs.train_data_loader = ml_collections.ConfigDict() + wikibooks_train_loader = config.dataset_configs.train_data_loader + wikibooks_train_loader.seq_length = 512 + wikibooks_train_loader.max_predictions_per_seq = 76 + wikibooks_train_loader.use_next_sentence_label = True + wikibooks_train_loader.use_position_id = False + wikibooks_train_loader.use_v2_feature_names = False + wikibooks_train_loader.file_type = 'tfrecord' + # Add path to training files containing tf.records. + wikibooks_train_loader.input_path = '' + wikibooks_train_loader.drop_remainder = True + wikibooks_train_loader.shuffle_buffer_size = 100 + wikibooks_train_loader.cycle_length = None + wikibooks_train_loader.block_length = 1 + wikibooks_train_loader.deterministic = None + wikibooks_train_loader.sharding = True + wikibooks_train_loader.enable_tf_data_service = False + wikibooks_train_loader.tf_data_service_address = None + wikibooks_train_loader.enable_shared_tf_data_service_between_parallel_trainers = ( + False # pylint: disable=line-too-long + ) + wikibooks_train_loader.apply_tf_data_service_before_batching = False + wikibooks_train_loader.trainer_id = '' + wikibooks_train_loader.tfds_name = None + wikibooks_train_loader.tfds_split = None + wikibooks_train_loader.tfds_data_dir = None + wikibooks_train_loader.tfds_as_supervised = False + wikibooks_train_loader.tfds_skip_decoding_feature = '' + wikibooks_train_loader.global_batch_size = config.batch_size + wikibooks_train_loader.prefetch_buffer_size = None # Autotune. + wikibooks_train_loader.autotune_algorithm = None + # Validation data: + config.dataset_configs.val_data_loader = ml_collections.ConfigDict() + wikibooks_val_loader = config.dataset_configs.val_data_loader + wikibooks_val_loader.seq_length = 512 + wikibooks_val_loader.max_predictions_per_seq = 76 + wikibooks_val_loader.use_next_sentence_label = True + wikibooks_val_loader.use_position_id = False + wikibooks_val_loader.use_v2_feature_names = False + wikibooks_val_loader.file_type = 'tfrecord' + # Add path to validation files containing tf.records. + wikibooks_val_loader.input_path = '' + wikibooks_val_loader.drop_remainder = False + wikibooks_val_loader.cycle_length = None + wikibooks_val_loader.block_length = 1 + wikibooks_val_loader.deterministic = None + wikibooks_val_loader.sharding = True + wikibooks_val_loader.enable_tf_data_service = False + wikibooks_val_loader.tf_data_service_address = None + wikibooks_val_loader.enable_shared_tf_data_service_between_parallel_trainers = ( + False # pylint: disable=line-too-long + ) + wikibooks_val_loader.apply_tf_data_service_before_batching = False + wikibooks_val_loader.trainer_id = '' + wikibooks_val_loader.tfds_name = None + wikibooks_val_loader.tfds_split = None + wikibooks_val_loader.tfds_data_dir = None + wikibooks_val_loader.tfds_as_supervised = False + wikibooks_val_loader.tfds_skip_decoding_feature = '' + wikibooks_val_loader.global_batch_size = config.batch_size + wikibooks_val_loader.prefetch_buffer_size = None # Autotune. + wikibooks_val_loader.autotune_algorithm = None + + # Model. + _, model_size = VARIANT.split('-') + config.model_name = 'bert' + config.model_dtype_str = 'float32' + config.model = ml_collections.ConfigDict() + config.model.stem = ml_collections.ConfigDict() + config.model.stem.hidden_size = HIDDEN_SIZE[model_size] + config.model.stem.embedding_width = EMBEDDING_WIDTH[model_size] + config.model.stem.max_position_embeddings = 512 + config.model.stem.dropout_rate = 0.1 + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.num_heads = NUM_HEADS[model_size] + config.model.encoder.mlp_dim = MLP_DIM[model_size] + config.model.encoder.num_layers = NUM_LAYERS[model_size] + config.model.encoder.attention_dropout_rate = 0.1 + config.model.encoder.dropout_rate = 0.1 + config.model.encoder.pre_norm = True + config.model.head = ml_collections.ConfigDict() + config.model.head.type = 'pretraining' + config.model.head.hidden_size = HIDDEN_SIZE[model_size] + + # Training. + config.trainer_name = 'bert_trainer' + optim = ml_collections.ConfigDict() + optim.optax_name = 'scale_by_adam' + optim.optax_configs = ml_collections.ConfigDict({ # Optimizer settings. + 'b1': 0.9, + 'b2': 0.999, + }) + config.optimizer = optim + config.num_training_epochs = None + config.num_training_steps = 1000_000 + config.log_eval_steps = 1000 + config.steps_per_eval = 64 + config.rng_seed = 42 + config.optimizer = optim + + # Gradient clipping (BERT clips grads before pmean). + config.max_grad_norm = 1.0 + config.optimizer.max_grad_norm = None + + # Fewshot. + config.fewshot = glue_fewshot.get_config(config.batch_size) + config.fewshot.log_eval_steps = 50_000 + + sched = ml_collections.ConfigDict() + sched.re = '(.*)' + sched.lr_configs = ml_collections.ConfigDict() + sched.lr_configs.learning_rate_schedule = 'compound' + sched.lr_configs.factors = 'constant * linear_warmup * linear_decay' + sched.lr_configs.total_steps = config.num_training_steps + sched.lr_configs.steps_per_cycle = sched.lr_configs.total_steps + sched.lr_configs.warmup_steps = 10_000 + sched.lr_configs.base_learning_rate = 1e-4 + config.schedule = ml_collections.ConfigDict({'all': sched}) + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 20000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + diff --git a/scenic/projects/baselines/bert/configs/glue/__init__.py b/scenic/projects/baselines/bert/configs/glue/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/bert/configs/glue/bert_glue_config.py b/scenic/projects/baselines/bert/configs/glue/bert_glue_config.py new file mode 100644 index 0000000000000000000000000000000000000000..3a514a48819d871cc30dda312e465bc8c49ac477 --- /dev/null +++ b/scenic/projects/baselines/bert/configs/glue/bert_glue_config.py @@ -0,0 +1,45 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for BERT finetuning on GLUE. + +""" +# pylint: enable=line-too-long + +import ml_collections + +_GLUE_TASKS = [ + 'stsb', 'cola', 'sst2', 'mrpc', 'qqp', 'mnli_matched', 'mnli_mismatched', + 'rte', 'wnli', 'qnli' +] + +VARIANT = 'BERT-B' + +INIT_FROM = ml_collections.ConfigDict({ + 'checkpoint_path': '', + 'model_config': 'SET-MODEL-CONFIG', +}) + + +def get_config(): + """Returns configuration for BERT.""" + config = ml_collections.ConfigDict() + config.rng_seed = 42 + config.glue_task = '' + config.variant = VARIANT + config.init_from = INIT_FROM + return config + + diff --git a/scenic/projects/baselines/bert/configs/glue/glue_common.py b/scenic/projects/baselines/bert/configs/glue/glue_common.py new file mode 100644 index 0000000000000000000000000000000000000000..d9e10bfa9b3c0cfe6694fd0c79d5d5f1d153418b --- /dev/null +++ b/scenic/projects/baselines/bert/configs/glue/glue_common.py @@ -0,0 +1,53 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""BERT Common configurations.""" + +import ml_collections + +EMBEDDING_WIDTH = {'Ti': 128, 'S': 128, 'B': 768, 'L': 1024} +HIDDEN_SIZE = {'Ti': 128, 'S': 256, 'B': 768, 'L': 1024} +NUM_HEADS = {'Ti': 2, 'S': 4, 'B': 12, 'L': 16} +MLP_DIM = {'Ti': 512, 'S': 1024, 'B': 3072, 'L': 4096} +NUM_LAYERS = {'Ti': 6, 'S': 12, 'B': 12, 'L': 24} + +# Classification data path: +INPUT_MEAT_DATA_PATH = '/path/to/data/tfrecords/{task_path}_meta_data' +TRAIN_DATA_PATH = '/path/to/data/tfrecords/{task_path}_train.tf_record' +EVAL_DATA_PATH = '/path/to/data/tfrecords/{task_path}_eval.tf_record' + + +# task_name to task_path +GLUE_TASK_PATH = { + # From glue + 'mnli_matched': 'MNLI/MNLI_matched', + 'mnli_mismatched': 'MNLI/MNLI_mismatched', + 'qqp': 'QQP/QQP', + 'qnli': 'QNLI/QNLI', + 'sst2': 'SST-2/SST-2', + 'cola': 'COLA/COLA', + 'stsb': 'STS-B/STS-B', + 'mrpc': 'MRPC/MRPC', + 'rte': 'RTE/RTE', + # GLUE webpage notes that there are issues with the construction of WNLI. + 'wnli': 'WNLI/WNLI', + # AX is the GLUE diagnostics dataset (https://gluebenchmark.com/diagnostics) + # which provides examples usedful to debug and diagnose models + 'ax': 'AX/AX', +} + + +def get_config(): + """Dummy get_config function to pass tests.""" + return ml_collections.ConfigDict() diff --git a/scenic/projects/baselines/bert/configs/glue/glue_fewshot.py b/scenic/projects/baselines/bert/configs/glue/glue_fewshot.py new file mode 100644 index 0000000000000000000000000000000000000000..efb665188408fe539a111ac88b6a1f1f1aa8d1dc --- /dev/null +++ b/scenic/projects/baselines/bert/configs/glue/glue_fewshot.py @@ -0,0 +1,59 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Most common few-shot eval configuration for GLUE.""" + +import ml_collections +from scenic.projects.baselines.bert.configs.glue import glue_common + +FEW_SHOT_TASKS = ['sst2', 'mnli_matched', 'mnli_mismatched'] + + +def get_glue_task_config(task_name, batch_size): + """Returns GLUE task config.""" + config = ml_collections.ConfigDict() + config.dataset_name = 'bert_glue' + config.data_dtype_str = 'float32' + config.batch_size = batch_size + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = task_name + task_path = glue_common.GLUE_TASK_PATH[task_name] + config.dataset_configs.input_meta_data_path = glue_common.INPUT_MEAT_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.train_data_path = glue_common.TRAIN_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.eval_data_path = glue_common.EVAL_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.prefetch_to_device = 2 + return config + + +def get_config(batch_size=None): + """Returns a standard-ish fewshot eval configuration for BERT.""" + config = ml_collections.ConfigDict() + config.batch_size = batch_size + config.rng_seed = 42 + # We use the prelogits of the the next_sentence_prediction head for fewshot + # eval on classification tasks. + config.representation_layer = 'next_sentence_prediction_head/pre_logits' + config.log_steps = 50_000 + config.datasets = [ + get_glue_task_config(task_name, batch_size) + for task_name in FEW_SHOT_TASKS + ] + config.shots = [1, 5, 10, 25, 100, 500, 1000] + config.l2_regs = [2.0**i for i in range(-10, 20)] + config.walk_first = ('sst2', 100) + + return config diff --git a/scenic/projects/baselines/bert/configs/glue/tasks/__init__.py b/scenic/projects/baselines/bert/configs/glue/tasks/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/bert/configs/glue/tasks/bert_cola_config.py b/scenic/projects/baselines/bert/configs/glue/tasks/bert_cola_config.py new file mode 100644 index 0000000000000000000000000000000000000000..9c740b7cfad7a9dded4491ef73125aed9f4d5d35 --- /dev/null +++ b/scenic/projects/baselines/bert/configs/glue/tasks/bert_cola_config.py @@ -0,0 +1,118 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for BERT finetuning on COLA. + +""" +# pylint: enable=line-too-long + +import ml_collections +from scenic.projects.baselines.bert.configs.glue import glue_common + +VARIANT = 'BERT-B' +INIT_FROM = ml_collections.ConfigDict({ + 'checkpoint_path': '', + 'model_config': 'SET-MODEL-CONFIG', +}) + + +def get_config(variant=VARIANT, init_from=INIT_FROM): + """Returns configuration for BERT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'bert' + + # Dataset. + config.dataset_name = 'bert_glue' + config.data_dtype_str = 'float32' + config.batch_size = 32 + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'cola' + config.dataset_configs.prefetch_to_device = 2 + task_path = glue_common.GLUE_TASK_PATH[config.dataset_configs.task] + config.dataset_configs.input_meta_data_path = glue_common.INPUT_MEAT_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.train_data_path = glue_common.TRAIN_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.eval_data_path = glue_common.EVAL_DATA_PATH.format( + task_path=task_path) + + # Model. + _, model_size = variant.split('-') + config.model_name = 'bert_classification' + config.model_dtype_str = 'float32' + config.model = ml_collections.ConfigDict() + config.model.stem = ml_collections.ConfigDict() + config.model.stem.hidden_size = glue_common.HIDDEN_SIZE[model_size] + config.model.stem.embedding_width = glue_common.EMBEDDING_WIDTH[model_size] + config.model.stem.max_position_embeddings = 512 + config.model.stem.dropout_rate = 0.1 + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.num_heads = glue_common.NUM_HEADS[model_size] + config.model.encoder.mlp_dim = glue_common.MLP_DIM[model_size] + config.model.encoder.num_layers = glue_common.NUM_LAYERS[model_size] + config.model.encoder.attention_dropout_rate = 0.1 + config.model.encoder.dropout_rate = 0.1 + config.model.encoder.pre_norm = True + config.model.head = ml_collections.ConfigDict() + config.model.head.type = 'classification' + config.model.head.hidden_size = glue_common.HIDDEN_SIZE[model_size] + + # Pre-training. + config.init_from = init_from + config.init_from.unlock() + config.init_from.restore_next_sentence_prediction_head_params = True + + # Training. + config.trainer_name = 'bert_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = None + # Training data size 8551 examples, 3 epochs. + config.num_training_steps = 801 + config.log_summary_steps = 1000 + config.log_eval_steps = 133 + # Eval data size is 1043 examples. + config.steps_per_eval = 33 + config.rng_seed = 42 + + # Learning rate. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = config.num_training_steps + config.lr_configs.end_learning_rate = 0.0 + config.lr_configs.warmup_steps = 80 + config.lr_configs.base_learning_rate = 3e-05 + + # Evaluation + config.global_metrics = ['matthews_corrcoef'] + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 1000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/baselines/bert/configs/glue/tasks/bert_mnli_matched_config.py b/scenic/projects/baselines/bert/configs/glue/tasks/bert_mnli_matched_config.py new file mode 100644 index 0000000000000000000000000000000000000000..f6ab6cd7e055dbc44ca1d8c1b76d4ba4962181c2 --- /dev/null +++ b/scenic/projects/baselines/bert/configs/glue/tasks/bert_mnli_matched_config.py @@ -0,0 +1,115 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for BERT finetuning on MNLI-matched. + +""" +# pylint: enable=line-too-long + +import ml_collections +from scenic.projects.baselines.bert.configs.glue import glue_common + +VARIANT = 'BERT-B' +INIT_FROM = ml_collections.ConfigDict({ + 'checkpoint_path': '', + 'model_config': 'SET-MODEL-CONFIG', +}) + + +def get_config(variant=VARIANT, init_from=INIT_FROM): + """Returns configuration for BERT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'bert' + + # Dataset. + config.dataset_name = 'bert_glue' + config.data_dtype_str = 'float32' + config.batch_size = 32 + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'mnli_matched' + config.dataset_configs.prefetch_to_device = 2 + task_path = glue_common.GLUE_TASK_PATH[config.dataset_configs.task] + config.dataset_configs.input_meta_data_path = glue_common.INPUT_MEAT_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.train_data_path = glue_common.TRAIN_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.eval_data_path = glue_common.EVAL_DATA_PATH.format( + task_path=task_path) + + # Model. + _, model_size = variant.split('-') + config.model_name = 'bert_classification' + config.model_dtype_str = 'float32' + config.model = ml_collections.ConfigDict() + config.model.stem = ml_collections.ConfigDict() + config.model.stem.hidden_size = glue_common.HIDDEN_SIZE[model_size] + config.model.stem.embedding_width = glue_common.EMBEDDING_WIDTH[model_size] + config.model.stem.max_position_embeddings = 512 + config.model.stem.dropout_rate = 0.1 + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.num_heads = glue_common.NUM_HEADS[model_size] + config.model.encoder.mlp_dim = glue_common.MLP_DIM[model_size] + config.model.encoder.num_layers = glue_common.NUM_LAYERS[model_size] + config.model.encoder.attention_dropout_rate = 0.1 + config.model.encoder.dropout_rate = 0.1 + config.model.encoder.pre_norm = True + config.model.head = ml_collections.ConfigDict() + config.model.head.type = 'classification' + config.model.head.hidden_size = glue_common.HIDDEN_SIZE[model_size] + + # Pre-training. + config.init_from = init_from + config.init_from.unlock() + config.init_from.restore_next_sentence_prediction_head_params = True + + # Training. + config.trainer_name = 'bert_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = None + # Training data size 392,702 examples, 3 epochs. + config.num_training_steps = 36813 + config.log_summary_steps = 1000 + config.log_eval_steps = 1000 + # Eval data size is 9815 examples. + config.steps_per_eval = 307 + config.rng_seed = 42 + + # Learning rate. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = config.num_training_steps + config.lr_configs.end_learning_rate = 0.0 + config.lr_configs.warmup_steps = 3681 + config.lr_configs.base_learning_rate = 3e-05 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 3000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/baselines/bert/configs/glue/tasks/bert_mnli_mismatched_config.py b/scenic/projects/baselines/bert/configs/glue/tasks/bert_mnli_mismatched_config.py new file mode 100644 index 0000000000000000000000000000000000000000..9f2b16390f38847864419f0ae3baa32064ea101e --- /dev/null +++ b/scenic/projects/baselines/bert/configs/glue/tasks/bert_mnli_mismatched_config.py @@ -0,0 +1,115 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for BERT finetuning on MNLI-mismatched. + +""" +# pylint: enable=line-too-long + +import ml_collections +from scenic.projects.baselines.bert.configs.glue import glue_common + +VARIANT = 'BERT-B' +INIT_FROM = ml_collections.ConfigDict({ + 'checkpoint_path': '', + 'model_config': 'SET-MODEL-CONFIG', +}) + + +def get_config(variant=VARIANT, init_from=INIT_FROM): + """Returns configuration for BERT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'bert' + + # Dataset. + config.dataset_name = 'bert_glue' + config.data_dtype_str = 'float32' + config.batch_size = 32 + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'mnli_mismatched' + config.dataset_configs.prefetch_to_device = 2 + task_path = glue_common.GLUE_TASK_PATH[config.dataset_configs.task] + config.dataset_configs.input_meta_data_path = glue_common.INPUT_MEAT_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.train_data_path = glue_common.TRAIN_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.eval_data_path = glue_common.EVAL_DATA_PATH.format( + task_path=task_path) + + # Model. + _, model_size = variant.split('-') + config.model_name = 'bert_classification' + config.model_dtype_str = 'float32' + config.model = ml_collections.ConfigDict() + config.model.stem = ml_collections.ConfigDict() + config.model.stem.hidden_size = glue_common.HIDDEN_SIZE[model_size] + config.model.stem.embedding_width = glue_common.EMBEDDING_WIDTH[model_size] + config.model.stem.max_position_embeddings = 512 + config.model.stem.dropout_rate = 0.1 + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.num_heads = glue_common.NUM_HEADS[model_size] + config.model.encoder.mlp_dim = glue_common.MLP_DIM[model_size] + config.model.encoder.num_layers = glue_common.NUM_LAYERS[model_size] + config.model.encoder.attention_dropout_rate = 0.1 + config.model.encoder.dropout_rate = 0.1 + config.model.encoder.pre_norm = True + config.model.head = ml_collections.ConfigDict() + config.model.head.type = 'classification' + config.model.head.hidden_size = glue_common.HIDDEN_SIZE[model_size] + + # Pre-training. + config.init_from = init_from + config.init_from.unlock() + config.init_from.restore_next_sentence_prediction_head_params = True + + # Training. + config.trainer_name = 'bert_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = None + # Training data size 392,702 examples, 3 epochs. + config.num_training_steps = 36813 + config.log_summary_steps = 1000 + config.log_eval_steps = 1000 + # Eval data size is 9832 examples. + config.steps_per_eval = 308 + config.rng_seed = 42 + + # Learning rate. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = config.num_training_steps + config.lr_configs.end_learning_rate = 0.0 + config.lr_configs.warmup_steps = 3681 + config.lr_configs.base_learning_rate = 3e-05 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 3000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/baselines/bert/configs/glue/tasks/bert_mrpc_config.py b/scenic/projects/baselines/bert/configs/glue/tasks/bert_mrpc_config.py new file mode 100644 index 0000000000000000000000000000000000000000..9ae0661e12bf36b05e52b96a74f0779a52077eb6 --- /dev/null +++ b/scenic/projects/baselines/bert/configs/glue/tasks/bert_mrpc_config.py @@ -0,0 +1,118 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for BERT finetuning on MRPC. + +""" +# pylint: enable=line-too-long + +import ml_collections +from scenic.projects.baselines.bert.configs.glue import glue_common + +VARIANT = 'BERT-B' +INIT_FROM = ml_collections.ConfigDict({ + 'checkpoint_path': '', + 'model_config': 'SET-MODEL-CONFIG', +}) + + +def get_config(variant=VARIANT, init_from=INIT_FROM): + """Returns configuration for BERT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'bert' + + # Dataset. + config.dataset_name = 'bert_glue' + config.data_dtype_str = 'float32' + config.batch_size = 32 + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'mrpc' + config.dataset_configs.prefetch_to_device = 2 + task_path = glue_common.GLUE_TASK_PATH[config.dataset_configs.task] + config.dataset_configs.input_meta_data_path = glue_common.INPUT_MEAT_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.train_data_path = glue_common.TRAIN_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.eval_data_path = glue_common.EVAL_DATA_PATH.format( + task_path=task_path) + + # Model. + _, model_size = variant.split('-') + config.model_name = 'bert_classification' + config.model_dtype_str = 'float32' + config.model = ml_collections.ConfigDict() + config.model.stem = ml_collections.ConfigDict() + config.model.stem.hidden_size = glue_common.HIDDEN_SIZE[model_size] + config.model.stem.embedding_width = glue_common.EMBEDDING_WIDTH[model_size] + config.model.stem.max_position_embeddings = 512 + config.model.stem.dropout_rate = 0.1 + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.num_heads = glue_common.NUM_HEADS[model_size] + config.model.encoder.mlp_dim = glue_common.MLP_DIM[model_size] + config.model.encoder.num_layers = glue_common.NUM_LAYERS[model_size] + config.model.encoder.attention_dropout_rate = 0.1 + config.model.encoder.dropout_rate = 0.1 + config.model.encoder.pre_norm = True + config.model.head = ml_collections.ConfigDict() + config.model.head.type = 'classification' + config.model.head.hidden_size = glue_common.HIDDEN_SIZE[model_size] + + # Pre-training. + config.init_from = init_from + config.init_from.unlock() + config.init_from.restore_next_sentence_prediction_head_params = True + + # Training. + config.trainer_name = 'bert_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = None + # Training data size 3668 examples, 3 epochs. + config.num_training_steps = 342 + config.log_summary_steps = 1000 + config.log_eval_steps = 57 + # Eval data size is 408 examples. + config.steps_per_eval = 13 + config.rng_seed = 42 + + # Learning rate. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = config.num_training_steps + config.lr_configs.end_learning_rate = 0.0 + config.lr_configs.warmup_steps = 34 + config.lr_configs.base_learning_rate = 3e-05 + + # Evaluation: + config.global_metrics = ['f1'] + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 1000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/baselines/bert/configs/glue/tasks/bert_qnli_config.py b/scenic/projects/baselines/bert/configs/glue/tasks/bert_qnli_config.py new file mode 100644 index 0000000000000000000000000000000000000000..4a6ef37fff899bb40bbce085602d99217b21b5ee --- /dev/null +++ b/scenic/projects/baselines/bert/configs/glue/tasks/bert_qnli_config.py @@ -0,0 +1,115 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for BERT finetuning on QNLI. + +""" +# pylint: enable=line-too-long + +import ml_collections +from scenic.projects.baselines.bert.configs.glue import glue_common + +VARIANT = 'BERT-B' +INIT_FROM = ml_collections.ConfigDict({ + 'checkpoint_path': '', + 'model_config': 'SET-MODEL-CONFIG', +}) + + +def get_config(variant=VARIANT, init_from=INIT_FROM): + """Returns configuration for BERT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'bert' + + # Dataset. + config.dataset_name = 'bert_glue' + config.data_dtype_str = 'float32' + config.batch_size = 32 + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'qnli' + config.dataset_configs.prefetch_to_device = 2 + task_path = glue_common.GLUE_TASK_PATH[config.dataset_configs.task] + config.dataset_configs.input_meta_data_path = glue_common.INPUT_MEAT_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.train_data_path = glue_common.TRAIN_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.eval_data_path = glue_common.EVAL_DATA_PATH.format( + task_path=task_path) + + # Model. + _, model_size = variant.split('-') + config.model_name = 'bert_classification' + config.model_dtype_str = 'float32' + config.model = ml_collections.ConfigDict() + config.model.stem = ml_collections.ConfigDict() + config.model.stem.hidden_size = glue_common.HIDDEN_SIZE[model_size] + config.model.stem.embedding_width = glue_common.EMBEDDING_WIDTH[model_size] + config.model.stem.max_position_embeddings = 512 + config.model.stem.dropout_rate = 0.1 + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.num_heads = glue_common.NUM_HEADS[model_size] + config.model.encoder.mlp_dim = glue_common.MLP_DIM[model_size] + config.model.encoder.num_layers = glue_common.NUM_LAYERS[model_size] + config.model.encoder.attention_dropout_rate = 0.1 + config.model.encoder.dropout_rate = 0.1 + config.model.encoder.pre_norm = True + config.model.head = ml_collections.ConfigDict() + config.model.head.type = 'classification' + config.model.head.hidden_size = glue_common.HIDDEN_SIZE[model_size] + + # Pre-training. + config.init_from = init_from + config.init_from.unlock() + config.init_from.restore_next_sentence_prediction_head_params = True + + # Training. + config.trainer_name = 'bert_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = None + # Training data size 104,743 examples, 3 epochs. + config.num_training_steps = 9819 + config.log_summary_steps = 1000 + config.log_eval_steps = 1636 + # Eval data size is 5463 examples. + config.steps_per_eval = 171 + config.rng_seed = 42 + + # Learning rate. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = config.num_training_steps + config.lr_configs.end_learning_rate = 0.0 + config.lr_configs.warmup_steps = 981 + config.lr_configs.base_learning_rate = 3e-05 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 1000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/baselines/bert/configs/glue/tasks/bert_qqp_config.py b/scenic/projects/baselines/bert/configs/glue/tasks/bert_qqp_config.py new file mode 100644 index 0000000000000000000000000000000000000000..d1d79fe9b03ad8feacc3c62c6f5b65063d6e19bc --- /dev/null +++ b/scenic/projects/baselines/bert/configs/glue/tasks/bert_qqp_config.py @@ -0,0 +1,118 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for BERT finetuning on QQP. + +""" +# pylint: enable=line-too-long + +import ml_collections +from scenic.projects.baselines.bert.configs.glue import glue_common + +VARIANT = 'BERT-B' +INIT_FROM = ml_collections.ConfigDict({ + 'checkpoint_path': '', + 'model_config': 'SET-MODEL-CONFIG', +}) + + +def get_config(variant=VARIANT, init_from=INIT_FROM): + """Returns configuration for BERT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'bert' + + # Dataset. + config.dataset_name = 'bert_glue' + config.data_dtype_str = 'float32' + config.batch_size = 32 + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'qqp' + config.dataset_configs.prefetch_to_device = 2 + task_path = glue_common.GLUE_TASK_PATH[config.dataset_configs.task] + config.dataset_configs.input_meta_data_path = glue_common.INPUT_MEAT_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.train_data_path = glue_common.TRAIN_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.eval_data_path = glue_common.EVAL_DATA_PATH.format( + task_path=task_path) + + # Model. + _, model_size = variant.split('-') + config.model_name = 'bert_classification' + config.model_dtype_str = 'float32' + config.model = ml_collections.ConfigDict() + config.model.stem = ml_collections.ConfigDict() + config.model.stem.hidden_size = glue_common.HIDDEN_SIZE[model_size] + config.model.stem.embedding_width = glue_common.EMBEDDING_WIDTH[model_size] + config.model.stem.max_position_embeddings = 512 + config.model.stem.dropout_rate = 0.1 + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.num_heads = glue_common.NUM_HEADS[model_size] + config.model.encoder.mlp_dim = glue_common.MLP_DIM[model_size] + config.model.encoder.num_layers = glue_common.NUM_LAYERS[model_size] + config.model.encoder.attention_dropout_rate = 0.1 + config.model.encoder.dropout_rate = 0.1 + config.model.encoder.pre_norm = True + config.model.head = ml_collections.ConfigDict() + config.model.head.type = 'classification' + config.model.head.hidden_size = glue_common.HIDDEN_SIZE[model_size] + + # Pre-training. + config.init_from = init_from + config.init_from.unlock() + config.init_from.restore_next_sentence_prediction_head_params = True + + # Training. + config.trainer_name = 'bert_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = None + # Training data size 363,849 examples, 3 epochs. + config.num_training_steps = 34110 + config.log_summary_steps = 1000 + config.log_eval_steps = 5685 + # Eval data size is 40,430 examples. + config.steps_per_eval = 1264 + config.rng_seed = 42 + + # Learning rate. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = config.num_training_steps + config.lr_configs.end_learning_rate = 0.0 + config.lr_configs.warmup_steps = 3411 + config.lr_configs.base_learning_rate = 3e-05 + + # Evaluation: + config.global_metrics = ['f1'] + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 3000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/baselines/bert/configs/glue/tasks/bert_rte_config.py b/scenic/projects/baselines/bert/configs/glue/tasks/bert_rte_config.py new file mode 100644 index 0000000000000000000000000000000000000000..90a12953d70be65897d5469244d36cf54ce61f8f --- /dev/null +++ b/scenic/projects/baselines/bert/configs/glue/tasks/bert_rte_config.py @@ -0,0 +1,115 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for BERT finetuning on RTE. + +""" +# pylint: enable=line-too-long + +import ml_collections +from scenic.projects.baselines.bert.configs.glue import glue_common + +VARIANT = 'BERT-B' +INIT_FROM = ml_collections.ConfigDict({ + 'checkpoint_path': '', + 'model_config': 'SET-MODEL-CONFIG', +}) + + +def get_config(variant=VARIANT, init_from=INIT_FROM): + """Returns configuration for BERT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'bert' + + # Dataset. + config.dataset_name = 'bert_glue' + config.data_dtype_str = 'float32' + config.batch_size = 32 + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'rte' + config.dataset_configs.prefetch_to_device = 2 + task_path = glue_common.GLUE_TASK_PATH[config.dataset_configs.task] + config.dataset_configs.input_meta_data_path = glue_common.INPUT_MEAT_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.train_data_path = glue_common.TRAIN_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.eval_data_path = glue_common.EVAL_DATA_PATH.format( + task_path=task_path) + + # Model. + _, model_size = variant.split('-') + config.model_name = 'bert_classification' + config.model_dtype_str = 'float32' + config.model = ml_collections.ConfigDict() + config.model.stem = ml_collections.ConfigDict() + config.model.stem.hidden_size = glue_common.HIDDEN_SIZE[model_size] + config.model.stem.embedding_width = glue_common.EMBEDDING_WIDTH[model_size] + config.model.stem.max_position_embeddings = 512 + config.model.stem.dropout_rate = 0.1 + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.num_heads = glue_common.NUM_HEADS[model_size] + config.model.encoder.mlp_dim = glue_common.MLP_DIM[model_size] + config.model.encoder.num_layers = glue_common.NUM_LAYERS[model_size] + config.model.encoder.attention_dropout_rate = 0.1 + config.model.encoder.dropout_rate = 0.1 + config.model.encoder.pre_norm = True + config.model.head = ml_collections.ConfigDict() + config.model.head.type = 'classification' + config.model.head.hidden_size = glue_common.HIDDEN_SIZE[model_size] + + # Pre-training. + config.init_from = init_from + config.init_from.unlock() + config.init_from.restore_next_sentence_prediction_head_params = True + + # Training. + config.trainer_name = 'bert_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = None + # Training data size 2490 examples, 3 epochs. + config.num_training_steps = 231 + config.log_summary_steps = 1000 + config.log_eval_steps = 38 + # Eval data size is 277 examples. + config.steps_per_eval = 9 + config.rng_seed = 42 + + # Learning rate. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = config.num_training_steps + config.lr_configs.end_learning_rate = 0.0 + config.lr_configs.warmup_steps = 23 + config.lr_configs.base_learning_rate = 3e-05 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 1000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/baselines/bert/configs/glue/tasks/bert_sst2_config.py b/scenic/projects/baselines/bert/configs/glue/tasks/bert_sst2_config.py new file mode 100644 index 0000000000000000000000000000000000000000..1e2a57ee737ef30f8ce29c759fe4ba582eb1e2d9 --- /dev/null +++ b/scenic/projects/baselines/bert/configs/glue/tasks/bert_sst2_config.py @@ -0,0 +1,115 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for BERT finetuning on SST-2. + +""" +# pylint: enable=line-too-long + +import ml_collections +from scenic.projects.baselines.bert.configs.glue import glue_common + +VARIANT = 'BERT-B' +INIT_FROM = ml_collections.ConfigDict({ + 'checkpoint_path': '', + 'model_config': 'SET-MODEL-CONFIG', +}) + + +def get_config(variant=VARIANT, init_from=INIT_FROM): + """Returns configuration for BERT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'bert' + + # Dataset. + config.dataset_name = 'bert_glue' + config.data_dtype_str = 'float32' + config.batch_size = 32 + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'sst2' + config.dataset_configs.prefetch_to_device = 2 + task_path = glue_common.GLUE_TASK_PATH[config.dataset_configs.task] + config.dataset_configs.input_meta_data_path = glue_common.INPUT_MEAT_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.train_data_path = glue_common.TRAIN_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.eval_data_path = glue_common.EVAL_DATA_PATH.format( + task_path=task_path) + + # Model. + _, model_size = variant.split('-') + config.model_name = 'bert_classification' + config.model_dtype_str = 'float32' + config.model = ml_collections.ConfigDict() + config.model.stem = ml_collections.ConfigDict() + config.model.stem.hidden_size = glue_common.HIDDEN_SIZE[model_size] + config.model.stem.embedding_width = glue_common.EMBEDDING_WIDTH[model_size] + config.model.stem.max_position_embeddings = 512 + config.model.stem.dropout_rate = 0.1 + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.num_heads = glue_common.NUM_HEADS[model_size] + config.model.encoder.mlp_dim = glue_common.MLP_DIM[model_size] + config.model.encoder.num_layers = glue_common.NUM_LAYERS[model_size] + config.model.encoder.attention_dropout_rate = 0.1 + config.model.encoder.dropout_rate = 0.1 + config.model.encoder.pre_norm = True + config.model.head = ml_collections.ConfigDict() + config.model.head.type = 'classification' + config.model.head.hidden_size = glue_common.HIDDEN_SIZE[model_size] + + # Pre-training. + config.init_from = init_from + config.init_from.unlock() + config.init_from.restore_next_sentence_prediction_head_params = True + + # Training. + config.trainer_name = 'bert_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = None + # Training data size 67,349 examples, 3 epochs. + config.num_training_steps = 6312 + config.log_summary_steps = 1000 + config.log_eval_steps = 1052 + # Eval data size is 872 examples. + config.steps_per_eval = 28 + config.rng_seed = 42 + + # Learning rate. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = config.num_training_steps + config.lr_configs.end_learning_rate = 0.0 + config.lr_configs.warmup_steps = 361 + config.lr_configs.base_learning_rate = 3e-05 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 1000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/baselines/bert/configs/glue/tasks/bert_stsb_config.py b/scenic/projects/baselines/bert/configs/glue/tasks/bert_stsb_config.py new file mode 100644 index 0000000000000000000000000000000000000000..5b1bc67883850ce72708275cb42c25005822facd --- /dev/null +++ b/scenic/projects/baselines/bert/configs/glue/tasks/bert_stsb_config.py @@ -0,0 +1,118 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for BERT finetuning on STS-B. + +""" +# pylint: enable=line-too-long + +import ml_collections +from scenic.projects.baselines.bert.configs.glue import glue_common + +VARIANT = 'BERT-B' +INIT_FROM = ml_collections.ConfigDict({ + 'checkpoint_path': '', + 'model_config': 'SET-MODEL-CONFIG', +}) + + +def get_config(variant=VARIANT, init_from=INIT_FROM): + """Returns configuration for BERT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'bert' + + # Dataset. + config.dataset_name = 'bert_glue' + config.data_dtype_str = 'float32' + config.batch_size = 32 + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'stsb' + config.dataset_configs.prefetch_to_device = 2 + task_path = glue_common.GLUE_TASK_PATH[config.dataset_configs.task] + config.dataset_configs.input_meta_data_path = glue_common.INPUT_MEAT_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.train_data_path = glue_common.TRAIN_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.eval_data_path = glue_common.EVAL_DATA_PATH.format( + task_path=task_path) + + # Model. + _, model_size = variant.split('-') + config.model_name = 'bert_regression' + config.model_dtype_str = 'float32' + config.model = ml_collections.ConfigDict() + config.model.stem = ml_collections.ConfigDict() + config.model.stem.hidden_size = glue_common.HIDDEN_SIZE[model_size] + config.model.stem.embedding_width = glue_common.EMBEDDING_WIDTH[model_size] + config.model.stem.max_position_embeddings = 512 + config.model.stem.dropout_rate = 0.1 + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.num_heads = glue_common.NUM_HEADS[model_size] + config.model.encoder.mlp_dim = glue_common.MLP_DIM[model_size] + config.model.encoder.num_layers = glue_common.NUM_LAYERS[model_size] + config.model.encoder.attention_dropout_rate = 0.1 + config.model.encoder.dropout_rate = 0.1 + config.model.encoder.pre_norm = True + config.model.head = ml_collections.ConfigDict() + config.model.head.type = 'regression' + config.model.head.hidden_size = glue_common.HIDDEN_SIZE[model_size] + + # Pre-training. + config.init_from = init_from + config.init_from.unlock() + config.init_from.restore_next_sentence_prediction_head_params = True + + # Training. + config.trainer_name = 'bert_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = None + # Training data size 5749 examples, 3 epochs. + config.num_training_steps = 537 + config.log_summary_steps = 1000 + config.log_eval_steps = 89 + # Eval data size is 1500 examples. + config.steps_per_eval = 47 + config.rng_seed = 42 + + # Learning rate. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = config.num_training_steps + config.lr_configs.end_learning_rate = 0.0 + config.lr_configs.warmup_steps = 53 + config.lr_configs.base_learning_rate = 3e-05 + + # Evaluation: + config.global_metrics = ['pearson_corrcoef'] + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 1000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/baselines/bert/configs/glue/tasks/bert_wnli_config.py b/scenic/projects/baselines/bert/configs/glue/tasks/bert_wnli_config.py new file mode 100644 index 0000000000000000000000000000000000000000..c864a5ffe259c39e998bc670ed163099cdea4b4a --- /dev/null +++ b/scenic/projects/baselines/bert/configs/glue/tasks/bert_wnli_config.py @@ -0,0 +1,115 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for BERT finetuning on WNLI. + +""" +# pylint: enable=line-too-long + +import ml_collections +from scenic.projects.baselines.bert.configs.glue import glue_common + +VARIANT = 'BERT-B' +INIT_FROM = ml_collections.ConfigDict({ + 'checkpoint_path': '', + 'model_config': 'SET-MODEL-CONFIG', +}) + + +def get_config(variant=VARIANT, init_from=INIT_FROM): + """Returns configuration for BERT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'bert' + + # Dataset. + config.dataset_name = 'bert_glue' + config.data_dtype_str = 'float32' + config.batch_size = 32 + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'wnli' + config.dataset_configs.prefetch_to_device = 2 + task_path = glue_common.GLUE_TASK_PATH[config.dataset_configs.task] + config.dataset_configs.input_meta_data_path = glue_common.INPUT_MEAT_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.train_data_path = glue_common.TRAIN_DATA_PATH.format( + task_path=task_path) + config.dataset_configs.eval_data_path = glue_common.EVAL_DATA_PATH.format( + task_path=task_path) + + # Model. + _, model_size = variant.split('-') + config.model_name = 'bert_classification' + config.model_dtype_str = 'float32' + config.model = ml_collections.ConfigDict() + config.model.stem = ml_collections.ConfigDict() + config.model.stem.hidden_size = glue_common.HIDDEN_SIZE[model_size] + config.model.stem.embedding_width = glue_common.EMBEDDING_WIDTH[model_size] + config.model.stem.max_position_embeddings = 512 + config.model.stem.dropout_rate = 0.1 + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.num_heads = glue_common.NUM_HEADS[model_size] + config.model.encoder.mlp_dim = glue_common.MLP_DIM[model_size] + config.model.encoder.num_layers = glue_common.NUM_LAYERS[model_size] + config.model.encoder.attention_dropout_rate = 0.1 + config.model.encoder.dropout_rate = 0.1 + config.model.encoder.pre_norm = True + config.model.head = ml_collections.ConfigDict() + config.model.head.type = 'classification' + config.model.head.hidden_size = glue_common.HIDDEN_SIZE[model_size] + + # Pre-training. + config.init_from = init_from + config.init_from.unlock() + config.init_from.restore_next_sentence_prediction_head_params = True + + # Training. + config.trainer_name = 'bert_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = None + # Training data size 635 examples, 3 epochs. + config.num_training_steps = 57 + config.log_summary_steps = 1000 + config.log_eval_steps = 9 + # Eval data size is 71 examples. + config.steps_per_eval = 3 + config.rng_seed = 42 + + # Learning rate. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = config.num_training_steps + config.lr_configs.end_learning_rate = 0.0 + config.lr_configs.warmup_steps = 5 + config.lr_configs.base_learning_rate = 3e-05 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 1000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/baselines/bert/datasets/__init__.py b/scenic/projects/baselines/bert/datasets/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/bert/datasets/bert_glue_dataset.py b/scenic/projects/baselines/bert/datasets/bert_glue_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..17b9156ef86ae6ea067d9d787b498376086df169 --- /dev/null +++ b/scenic/projects/baselines/bert/datasets/bert_glue_dataset.py @@ -0,0 +1,264 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Scenic wrapper around BERT GLUE. + +General Language Understanding Evaluation benchmark (GLUE) dataset from +Tensorflow Models. +""" + +import functools +import json +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf + +from official.nlp.data.bert import input_pipeline + +_TYPE_VOCAB_SIZE = 2 +_VOCAB_SIZE = 30522 +_LABEL_TYPES_MAP = {'int': tf.int64, 'float': tf.float32} + +REGRESSION_TASKS = ['stsb'] +SEQ_CLASSIFICATION_TASKS = ['cola', 'sst2'] +SEQ_PAIR_CLASSIFICATION_TASKS = [ + 'mrpc', 'qqp', 'mnli_matched', 'mnli_mismatched', 'rte', 'wnli', 'qnli' +] +DEBUGGING_TASKS = ['ax'] + +_SUPPORTED_TASK_NAMES = ( + REGRESSION_TASKS + SEQ_CLASSIFICATION_TASKS + + SEQ_PAIR_CLASSIFICATION_TASKS + DEBUGGING_TASKS) + + +def create_classifier_dataset(file_path, + seq_length, + batch_size, + is_training=True, + repeats=None, + input_pipeline_context=None, + label_type=tf.int64, + include_sample_weights=False, + num_samples=None): + """Creates input dataset from (tf)records files for train/eval.""" + name_to_features = { + 'input_ids': tf.io.FixedLenFeature([seq_length], tf.int64), + 'input_mask': tf.io.FixedLenFeature([seq_length], tf.int64), + 'segment_ids': tf.io.FixedLenFeature([seq_length], tf.int64), + 'label_ids': tf.io.FixedLenFeature([], label_type), + } + if include_sample_weights: + name_to_features['weight'] = tf.io.FixedLenFeature([], tf.float32) + dataset = input_pipeline.single_file_dataset( + file_path, name_to_features, num_samples=num_samples) + + # The dataset is always sharded by number of hosts. + # num_input_pipelines is the number of hosts rather than number of cores. + if input_pipeline_context and input_pipeline_context.num_input_pipelines > 1: + dataset = dataset.shard(input_pipeline_context.num_input_pipelines, + input_pipeline_context.input_pipeline_id) + + def _select_data_from_record(record): + x = { + 'input_word_ids': record['input_ids'], + 'input_mask': record['input_mask'], + 'input_type_ids': record['segment_ids'] + } + y = record['label_ids'] + if include_sample_weights: + w = record['weight'] + return (x, y, w) + return (x, y) + + if is_training: + # The correct way would be to repeat and then shuffle but this is how it is + # done in: + # https://github.com/tensorflow/models/blob/master/official/nlp/bert/input_pipeline.py#L190 + dataset = dataset.shuffle(100) + dataset = dataset.repeat(repeats) + + dataset = dataset.map( + _select_data_from_record, + num_parallel_calls=tf.data.experimental.AUTOTUNE) + dataset = dataset.batch(batch_size, drop_remainder=is_training) + + if not is_training: + dataset = dataset.repeat(repeats) + return dataset + + +def get_dataset_fn(input_file_pattern, + max_seq_length, + batch_size, + is_training, + repeats=None, + label_type=tf.int64, + include_sample_weights=False, + num_samples=None): + """Gets a closure to create a dataset.""" + + def _dataset_fn(ctx=None): + """Returns tf.data.Dataset for distributed BERT pretraining.""" + dataset = create_classifier_dataset( + tf.io.gfile.glob(input_file_pattern), + max_seq_length, + batch_size, + is_training=is_training, + repeats=repeats, + input_pipeline_context=ctx, + label_type=label_type, + include_sample_weights=include_sample_weights, + num_samples=num_samples) + return dataset + + return _dataset_fn + + +def postprocess(batch, task): + """Post process the batch and make it ready to be sent to the model.""" + if task == 'stsb': # Regression task + return dict(targets=batch[1][:, None], **batch[0]) + return dict(label=batch[1], **batch[0]) + + +@datasets.add_dataset('bert_glue') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the BERT classification task, train and validation. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type for inputs. Not used. + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. Not used. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + del dtype_str + del dataset_service_address + del shuffle_seed + assert dataset_configs is not None + if dataset_configs.task not in _SUPPORTED_TASK_NAMES: + raise ValueError('dataset_configs.task_name must be one of [{}].'.format( + ', '.join(_SUPPORTED_TASK_NAMES))) + with tf.io.gfile.GFile(dataset_configs.input_meta_data_path, 'rb') as reader: + input_meta_data = json.loads(reader.read().decode('utf-8')) + label_type = _LABEL_TYPES_MAP[input_meta_data.get('label_type', 'int')] + include_sample_weights = input_meta_data.get('has_sample_weights', False) + + logging.info('Loading train split of the %s dataset.', dataset_configs.task) + train_input_fn = get_dataset_fn( + dataset_configs.train_data_path, + input_meta_data['max_seq_length'], + batch_size, + is_training=True, + label_type=label_type, + include_sample_weights=include_sample_weights, + num_samples=input_meta_data['train_data_size']) + + input_context = tf.distribute.InputContext( + num_input_pipelines=jax.process_count(), + input_pipeline_id=jax.process_index(), + num_replicas_in_sync=jax.process_count()) + + train_ds = train_input_fn(ctx=input_context).prefetch( + dataset_configs.get('prefetch_to_host', 2)) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, + train=True, + batch_size=batch_size, + inputs_key='input_word_ids') + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + task_postprocess = functools.partial(postprocess, task=dataset_configs.task) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(task_postprocess, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + if dataset_configs.prefetch_to_device: + train_iter = jax_utils.prefetch_to_device( + train_iter, dataset_configs.prefetch_to_device) + + logging.info('Loading validation split of the %s dataset.', + dataset_configs.task) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, + train=False, + batch_size=eval_batch_size, + inputs_key='input_word_ids') + + eval_input_fn = get_dataset_fn( + dataset_configs.eval_data_path, + input_meta_data['max_seq_length'], + eval_batch_size, + is_training=False, + label_type=label_type, + include_sample_weights=include_sample_weights) + + val_ds = eval_input_fn(ctx=input_context).prefetch( + dataset_configs.get('prefetch_to_host', 2)) + + valid_iter = iter(val_ds) + valid_iter = map(dataset_utils.tf_to_numpy, valid_iter) + valid_iter = map(task_postprocess, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + valid_iter = map(shard_batches, valid_iter) + + if dataset_configs.prefetch_to_device: + valid_iter = jax_utils.prefetch_to_device( + valid_iter, dataset_configs.prefetch_to_device) + + input_shape = (-1, input_meta_data['max_seq_length']) + + input_spec = { + 'input_word_ids': (input_shape, jnp.int32), + 'input_mask': (input_shape, jnp.int32), + 'input_type_ids': (input_shape, jnp.int32), + } + num_classes = ( + None if dataset_configs.task == 'stsb' # Regression task! + else input_meta_data['num_labels']) + meta_data = { + 'type_vocab_size': _TYPE_VOCAB_SIZE, + 'vocab_size': _VOCAB_SIZE, + 'input_spec': input_spec, + 'num_classes': num_classes, + 'num_train_examples': input_meta_data['train_data_size'], + 'num_eval_examples': input_meta_data['eval_data_size'], + 'target_is_onehot': False, + } + return dataset_utils.Dataset(train_iter, valid_iter, None, meta_data) diff --git a/scenic/projects/baselines/bert/datasets/bert_wikibooks_dataset.py b/scenic/projects/baselines/bert/datasets/bert_wikibooks_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..cf7c0a17ea085a4a433c0f3efc160d9550aa6392 --- /dev/null +++ b/scenic/projects/baselines/bert/datasets/bert_wikibooks_dataset.py @@ -0,0 +1,163 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Scenic wrapper around Wikipedia dataset from Tensorflow Models.""" + +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf + +from official.nlp.data import pretrain_dataloader + +_TYPE_VOCAB_SIZE = 2 +_VOCAB_SIZE = 30522 +_NUM_TRAIN_EXAMPLES = 200_000_000 +_NUM_EVAL_EXAMPLES = 344793 + + +def reduce_next_sentence_label_dimension(batch): + """Change next_sentence_labels's shape from (-1, 1) to (-1,). + + Args: + batch: A dictionary mapping keys to arrays. + + Returns: + Updated batch. + """ + + batch['next_sentence_labels'] = batch['next_sentence_labels'][:, 0] + return batch + + +@datasets.add_dataset('bert_wikibooks') +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', # pylint: disable=unused-argument + shuffle_seed=0, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None): # pylint: disable=unused-argument + """Returns generators for the Wikipedia train and validation sets. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type for inputs. Not used. + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. Not used. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + assert dataset_configs is not None + logging.info('Loading train split of the wikibooks dataset.') + + with dataset_configs.unlocked(): + dataset_configs.train_data_loader.seed = shuffle_seed + dataset_configs.train_data_loader.is_training = True + dataset_configs.train_data_loader.cache = False + + train_data_loader = pretrain_dataloader.BertPretrainDataLoader( + dataset_configs.train_data_loader) + input_context = tf.distribute.InputContext( + num_input_pipelines=jax.process_count(), + input_pipeline_id=jax.process_index(), + num_replicas_in_sync=jax.process_count()) + + train_ds = train_data_loader.load(input_context=input_context).prefetch( + dataset_configs.get('prefetch_to_host', 2)) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, + train=True, + batch_size=batch_size, + inputs_key='input_word_ids') + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(reduce_next_sentence_label_dimension, train_iter) + train_iter = map(shard_batches, train_iter) + if dataset_configs.prefetch_to_device: + train_iter = jax_utils.prefetch_to_device( + train_iter, dataset_configs.prefetch_to_device) + + logging.info('Loading validation split of the wikibooks dataset.') + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, + train=False, + batch_size=eval_batch_size, + inputs_key='input_word_ids') + + with dataset_configs.unlocked(): + dataset_configs.val_data_loader.seed = shuffle_seed + # Some tricks to make sure that the dataset is repeated but not shuffled. + dataset_configs.val_data_loader.is_training = True + dataset_configs.val_data_loader.cache = False + dataset_configs.val_data_loader.shuffle_buffer_size = 1 + + val_data_loader = pretrain_dataloader.BertPretrainDataLoader( + dataset_configs.val_data_loader) + val_ds = val_data_loader.load(input_context=input_context).prefetch( + dataset_configs.get('prefetch_to_host', 2)) + + valid_iter = iter(val_ds) + valid_iter = map(dataset_utils.tf_to_numpy, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + valid_iter = map(reduce_next_sentence_label_dimension, valid_iter) + valid_iter = map(shard_batches, valid_iter) + if dataset_configs.prefetch_to_device: + valid_iter = jax_utils.prefetch_to_device( + valid_iter, dataset_configs.prefetch_to_device) + + input_shape = (-1, dataset_configs.train_data_loader.seq_length) + + input_spec = { + 'input_word_ids': (input_shape, jnp.int32), + 'input_mask': (input_shape, jnp.int32), + 'input_type_ids': (input_shape, jnp.int32), + 'masked_lm_positions': ( + (-1, dataset_configs.train_data_loader.max_predictions_per_seq), + jnp.int32) + } + + meta_data = { + 'type_vocab_size': _TYPE_VOCAB_SIZE, + 'vocab_size': _VOCAB_SIZE, + 'input_spec': input_spec, + # TODO(vlikhosherstov): Put the real value. + 'num_train_examples': _NUM_TRAIN_EXAMPLES, + 'num_eval_examples': _NUM_EVAL_EXAMPLES, + } + if dataset_configs.get('extra_meta_data'): + for k, v in dataset_configs.extra_meta_data.items(): + meta_data[k] = v + return dataset_utils.Dataset(train_iter, valid_iter, None, meta_data) diff --git a/scenic/projects/baselines/bert/layers.py b/scenic/projects/baselines/bert/layers.py new file mode 100644 index 0000000000000000000000000000000000000000..30df4724ddc62287ef366f7251576e4600fe0942 --- /dev/null +++ b/scenic/projects/baselines/bert/layers.py @@ -0,0 +1,399 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""BERT Layers.""" + +from typing import Any, Callable, Optional, Sequence, Tuple, Union + +import flax.linen as nn +import jax +from jax.nn import initializers +import jax.numpy as jnp +import numpy as np +from scenic.model_lib.layers import nn_layers + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +def bert_truncated_normal_initializer(): + """TruncatedNormal(0.02) initializer.""" + + def init(key, shape, dtype=jnp.float32): + dtype = jax.dtypes.canonicalize_dtype(dtype) + return jax.random.truncated_normal(key, -2, 2, shape, dtype) * 0.02 + + return init + + +def sinusoidal_init(max_len: int = 2048, + min_scale: float = 1.0, + max_scale: float = 10000.0): + """1D Sinusoidal Position Embedding Initializer. + + Args: + max_len: Maximum possible length for the input. + min_scale: Minimum frequency-scale in sine grating. + max_scale: Maximum frequency-scale in sine grating. + + Returns: + output: init function returning `(1, max_len, d_feature)` + """ + + def init(key, shape, dtype=np.float32): + """Sinusoidal init.""" + del key, dtype + d_feature = shape[-1] + pe = np.zeros((max_len, d_feature), dtype=np.float32) + position = np.arange(0, max_len)[:, np.newaxis] + scale_factor = -np.log(max_scale / min_scale) / (d_feature // 2 - 1) + div_term = min_scale * np.exp(np.arange(0, d_feature // 2) * scale_factor) + pe[:, :d_feature // 2] = np.sin(position * div_term) + pe[:, d_feature // 2: 2 * (d_feature // 2)] = np.cos(position * div_term) + pe = pe[np.newaxis, :, :] # [1, max_len, d_feature] + return jnp.array(pe) + return init + + +class AddPositionEmbs(nn.Module): + """Adds (optionally learned) positional embeddings to the inputs. + + Attributes: + max_len: Maximum supported length + posemb_init: Positional embedding initializer. + """ + max_len: int + posemb_init: Initializer = nn.initializers.normal(stddev=0.02) + + @nn.compact + def __call__(self, inputs): + """Applies AddPositionEmbs module. + + By default this layer uses a fixed sinusoidal embedding table. If a + learned position embedding is desired, pass an initializer to + posemb_init in the configuration. + Args: + inputs: input data. + Returns: + output: `[bs, timesteps, in_dim]` + """ + # Inputs.shape is [batch_size, seq_len, emb_dim]. + assert inputs.ndim == 3, ('Number of dimensions should be 3,' + ' but it is: %d' % inputs.ndim) + length = inputs.shape[1] + pos_emb_shape = (1, self.max_len, inputs.shape[-1]) + if self.posemb_init is None: + # Use a fixed (non-learned) sinusoidal position embedding. + pos_embedding = sinusoidal_init(max_len=self.max_len)(None, pos_emb_shape, + None) + else: + pos_embedding = self.param('pos_embedding', + self.posemb_init, + pos_emb_shape) + pe = pos_embedding[:, :length, :] + return inputs + pe + + +class Stem(nn.Module): + """Stem for BERT. + + Attributes: + vocab_size: Size of words/tokens vocabulary. + type_vocab_size: Size of type vocabulary. + hidden_size: Size of the hidden state of the output of model's stem. + max_position_embeddings: The maximum sequence length that this model might + ever be used with. + embedding_width: Size of embedding + dropout_rate: Dropout rate. + dtype: JAX data type for activations. + """ + vocab_size: int + type_vocab_size: int + hidden_size: int + max_position_embeddings: int + embedding_width: Optional[int] = None + dropout_rate: float = 0.0 + dtype: Any = jnp.float32 + + @nn.compact + def __call__( + self, input_word_ids: jnp.ndarray, input_type_ids: jnp.ndarray, + input_mask: jnp.ndarray, *, + train: bool) -> Union[jnp.ndarray, Tuple[jnp.ndarray, jnp.ndarray]]: + if input_word_ids.ndim != 2: + raise ValueError('Input_word_ids should be of shape `[bs, l]` but it is ' + f'{input_word_ids.shape}.') + if input_type_ids.ndim != 2: + raise ValueError('Input_type_ids should be of shape `[bs, l]` but it is ' + f'{input_type_ids.shape}.') + if input_mask.ndim != 2: + raise ValueError('Input_mask should be of shape `[bs, l]` but it is ' + f'{input_mask.shape}.') + + embedding_width = ( + self.embedding_width if self.embedding_width else self.hidden_size) + + word_embedding_layer = nn.Embed( + num_embeddings=self.vocab_size, + features=embedding_width, + embedding_init=bert_truncated_normal_initializer(), + name='word_embedding') + x = word_embedding_layer(input_word_ids) + x = x + nn.Embed( + num_embeddings=self.type_vocab_size, + features=embedding_width, + embedding_init=bert_truncated_normal_initializer(), + name='type_embedding')( + input_type_ids) + # NOTE: CLS token is added during pre-processing in the tokenizer. + x = AddPositionEmbs( + max_len=self.max_position_embeddings, + posemb_init=bert_truncated_normal_initializer(), + name='posembed_input')( + x) + x = nn.LayerNorm(dtype=self.dtype, name='embedding_norm')(x) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + if embedding_width != self.hidden_size: + x = nn.Dense( + self.hidden_size, + kernel_init=bert_truncated_normal_initializer(), + name='embedding_projection')( + x) + return x, word_embedding_layer.embedding + + +class MlpBlock(nn.Module): + """Transformer MLP / feed-forward block. + + Attributes: + dtype: floating point type used in the layer. + mlp_dim: hidden dimension of the multilayer perceptron. + dropout_rate: dropout rate used in the hidden layer. + kernel_init: weight matrix initializer. + bias_init: bias vector initializer. + """ + dtype: Any = jnp.float32 + mlp_dim: int = 2048 + dropout_rate: float = 0.1 + kernel_init: Initializer = nn.initializers.xavier_uniform() + bias_init: Initializer = nn.initializers.normal(stddev=1e-6) + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, train: bool) -> jnp.ndarray: + """Applies Transformer MlpBlock module.""" + out_dim = inputs.shape[-1] + x = nn.Dense(self.mlp_dim, + dtype=self.dtype, + kernel_init=self.kernel_init, + bias_init=self.bias_init)(inputs) + x = nn_layers.IdentityLayer(name='gelu')(nn.gelu(x)) + x = nn.Dropout(rate=self.dropout_rate)( + x, deterministic=not train) + output = nn.Dense(out_dim, + dtype=self.dtype, + kernel_init=self.kernel_init, + bias_init=self.bias_init)(x) + output = nn.Dropout(rate=self.dropout_rate)( + output, deterministic=not train) + return output + + +class Encoder1DBlock(nn.Module): + """Transformer/BERT encoder layer. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: Number of self-attention heads. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + pre_norm: Whether to use PreLN, otherwise PostLN. For more detail, see + https://arxiv.org/pdf/2002.04745.pdf. + dtype: The dtype of the computation (default: float32). + + Returns: + output after transformer encoder block. + """ + mlp_dim: int + num_heads: int + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + pre_norm: bool = True + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, input_mask: Optional[jnp.ndarray], + deterministic: bool) -> jnp.ndarray: + """Applies Encoder1DBlock module. + + Args: + inputs: Input data. + input_mask: Input mask, used for text input. + deterministic: Deterministic or not (to apply dropout). + + Returns: + Output after transformer encoder block. + """ + # Attention block. + assert inputs.ndim == 3 + + # pre-attention-layer-normalization + x = nn.LayerNorm(dtype=self.dtype)(inputs) if self.pre_norm else inputs + attention_mask = input_mask[:, None, None, :] * jnp.ones( + [1, 1, x.shape[1], 1]) + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + dtype=self.dtype, + kernel_init=nn.initializers.xavier_uniform(), + broadcast_dropout=False, + dropout_rate=self.attention_dropout_rate)( + x, x, mask=attention_mask, deterministic=deterministic) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic) + x = x + inputs + if not self.pre_norm: # post-attention-layer-normalization + # Normalized x is used for residual connection. + x = nn.LayerNorm(dtype=self.dtype)(x) + + # MLP block. + if self.pre_norm: # pre-mlp-layer-normalization + # Do not overwrite x because it will be used for residual connection. + y = nn.LayerNorm(dtype=self.dtype)(x) + y = MlpBlock( + dtype=self.dtype, + mlp_dim=self.mlp_dim, + dropout_rate=self.dropout_rate, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6))( + y if self.pre_norm else x, train=not deterministic) + y = y + x + # post-mlp-layer-normalization + if not self.pre_norm: + y = nn.LayerNorm(dtype=self.dtype)(y) + return y + + +class BERTEncoder(nn.Module): + """BERT encoder. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + pre_norm: Whether to use PreLN in encoder layers, otherwise PostLN. + dtype: JAX data type for activations. + """ + + mlp_dim: int + num_layers: int + num_heads: int + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + pre_norm: bool = False + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, input_mask: jnp.ndarray, *, train: bool): + + for lyr in range(self.num_layers): + x = Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + pre_norm=self.pre_norm, + name=f'encoderblock_{lyr}', + dtype=jax.dtypes.canonicalize_dtype(self.dtype))( + x, input_mask=input_mask, deterministic=not train) + + if self.pre_norm: + x = nn.LayerNorm(name='encoder_norm')(x) + return x + + +class ClassificationHead(nn.Module): + """Head used for classification with BERT. + + Attributes: + num_outputs: Number of output classes. + hidden_sizes: Size of hidden units in additional projections in the head. + kernel_init: Kernel initialization. + bias_init: Bias initialization. + nonlinearity: Nonlinearity, ReLU by default. + dtype: Model dtype. + """ + num_outputs: int + hidden_sizes: Union[int, Tuple[int, ...]] + kernel_init: Initializer = initializers.lecun_normal() + bias_init: Initializer = initializers.zeros + nonlinearity: Callable[[jnp.ndarray], jnp.ndarray] = nn.tanh + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool) -> jnp.ndarray: + # Get CLS token: + x = x[:, 0] + hidden_sizes = self.hidden_sizes + if isinstance(hidden_sizes, int): + hidden_sizes = [hidden_sizes] + for num_hid in hidden_sizes: + # These intermediate layers are only used in BERT. + x = nn.Dense( + num_hid, + kernel_init=bert_truncated_normal_initializer(), + bias_init=self.bias_init)( + x) + x = self.nonlinearity(x) + + x = nn_layers.IdentityLayer(name='pre_logits')(x) + x = nn.Dense( + self.num_outputs, + kernel_init=self.kernel_init, + bias_init=self.bias_init, + name='output_projection')( + x) + return x + + +class MaskedLanguageModelHead(nn.Module): + """Head used for masked language modelling in BERT. + + Attributes: + dtype: Data type. + """ + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, masked_lm_positions: jnp.ndarray, + word_embeddings: jnp.ndarray, *, train: bool) -> jnp.ndarray: + + batch_size, length, hidden_size = x.shape + x = x.reshape((-1, hidden_size)) + + offsets = np.arange(batch_size)[:, None] * length + masked_lm_positions = masked_lm_positions + offsets + masked_lm_positions = masked_lm_positions.ravel() + + x = jnp.take(x, masked_lm_positions, axis=0) + x = x.reshape((batch_size, -1, hidden_size)) + + vocab_size, embedding_width = word_embeddings.shape + kernel_init = bert_truncated_normal_initializer() + + x = nn.Dense(embedding_width, kernel_init=kernel_init, dtype=self.dtype)(x) + x = nn.gelu(x) + x = nn.LayerNorm(dtype=self.dtype)(x) + x = jnp.einsum('ijk,lk->ijl', x, word_embeddings) + x = x + self.param('embedding_bias', nn.initializers.zeros, + (1, 1, vocab_size), self.dtype) + return x diff --git a/scenic/projects/baselines/bert/main.py b/scenic/projects/baselines/bert/main.py new file mode 100644 index 0000000000000000000000000000000000000000..f6e873b1a37e93249be582c120d18239cb04c407 --- /dev/null +++ b/scenic/projects/baselines/bert/main.py @@ -0,0 +1,69 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main script for BERT.""" +import importlib +from typing import Any + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.baselines.bert import model as bert_model +from scenic.projects.baselines.bert import trainer as bert_trainer +from scenic.train_lib import train_utils + + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name: str) -> Any: + """Returns model class given its name.""" + if model_name == 'bert': + return bert_model.BERTModel + if model_name == 'bert_classification': + return bert_model.BERTClassificationModel + if model_name == 'bert_regression': + return bert_model.BERTRegressionModel + else: + raise ValueError(f'Unrecognized model: {model_name}.') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the BERT project.""" + if 'glue_task' in config: + task_config_file = importlib.import_module( + f'scenic.projects.baselines.bert.configs.glue.tasks.bert_{config.glue_task}_config' + ) + config = task_config_file.get_config( + variant=config.variant, init_from=config.init_from) + # Build the loss_fn, metrics, and flax_model. + model_cls = get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + bert_trainer.train( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/baselines/bert/model.py b/scenic/projects/baselines/bert/model.py new file mode 100644 index 0000000000000000000000000000000000000000..1f318bb26ca66eb14822594053baa0f4cdc08e04 --- /dev/null +++ b/scenic/projects/baselines/bert/model.py @@ -0,0 +1,251 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""BERT Model.""" + +from typing import Any, Dict + +from absl import logging +import flax +import flax.linen as nn +import jax.numpy as jnp +import ml_collections +from scenic.common_lib import debug_utils +from scenic.model_lib.base_models.classification_model import ClassificationModel +from scenic.model_lib.base_models.regression_model import RegressionModel +from scenic.projects.baselines.bert import bert_base_model +from scenic.projects.baselines.bert import layers + + +class BERT(nn.Module): + """BERT.""" + + stem_config: ml_collections.ConfigDict + encoder_config: ml_collections.ConfigDict + head_config: ml_collections.ConfigDict + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, + inputs: Dict[str, jnp.ndarray], + *, + train: bool, + transfer_mode=False, + debug: bool = False): + + x, word_embeddings = layers.Stem( + vocab_size=self.stem_config.vocab_size, + type_vocab_size=self.stem_config.type_vocab_size, + hidden_size=self.stem_config.hidden_size, + max_position_embeddings=self.stem_config.max_position_embeddings, + dropout_rate=self.stem_config.dropout_rate, + embedding_width=self.stem_config.get('embedding_width'), + dtype=self.dtype, + name='stem')( + input_word_ids=inputs['input_word_ids'], + input_type_ids=inputs['input_type_ids'], + input_mask=inputs['input_mask'], + train=train) + + x = layers.BERTEncoder( + mlp_dim=self.encoder_config.mlp_dim, + num_layers=self.encoder_config.num_layers, + num_heads=self.encoder_config.num_heads, + dropout_rate=self.encoder_config.dropout_rate, + attention_dropout_rate=self.encoder_config.attention_dropout_rate, + pre_norm=self.encoder_config.pre_norm, + dtype=self.dtype, + name='bert_encoder')( + x, input_mask=inputs['input_mask'], train=train) + + if self.head_config.type == 'pretraining': + next_sentence_prediction_logits = layers.ClassificationHead( + num_outputs=2, + hidden_sizes=(x.shape[-1], self.head_config.hidden_size), + nonlinearity=nn.tanh, + dtype=self.dtype, + name='next_sentence_prediction_head')( + x, train=train) + if transfer_mode: + # Next sentence prediction head is a classification head and we can + # reuse it for transfer evaluation on classification tasks. + return next_sentence_prediction_logits + + masked_language_modeling_logits = layers.MaskedLanguageModelHead( + dtype=self.dtype, name='masked_language_model_head')( + x, inputs['masked_lm_positions'], word_embeddings, train=train) + return { + 'nsp_logits': next_sentence_prediction_logits, + 'mlm_logits': masked_language_modeling_logits + } + elif self.head_config.type == 'classification': + return layers.ClassificationHead( + num_outputs=self.head_config.num_classes, + hidden_sizes=(x.shape[-1], self.head_config.hidden_size), + nonlinearity=nn.tanh, + dtype=self.dtype, + name='classification_head')( + x, train=train) + elif self.head_config.type == 'regression': + return layers.ClassificationHead( + num_outputs=1, + hidden_sizes=(x.shape[-1], self.head_config.hidden_size), + nonlinearity=nn.tanh, + dtype=self.dtype, + name='regression_head')( + x, train=train) + + +class BERTModel(bert_base_model.BERTBaseModel): + """BERT model.""" + + def build_flax_model(self): + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + with self.config.unlocked(): + # Add vocabulary information from dataset meta-data to configs: + self.config.model.stem.vocab_size = self.dataset_meta_data['vocab_size'] + self.config.model.stem.type_vocab_size = self.dataset_meta_data[ + 'type_vocab_size'] + return BERT( + stem_config=self.config.model.stem, + encoder_config=self.config.model.encoder, + head_config=self.config.model.head, + dtype=model_dtype, + ) + + def init_from_bert_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state.""" + raise NotImplementedError + + +class BERTClassificationModel(ClassificationModel): + """BERT Classification model.""" + + def build_flax_model(self): + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + with self.config.unlocked(): + # Add vocabulary information from dataset meta-data to configs: + self.config.model.stem.vocab_size = self.dataset_meta_data['vocab_size'] + self.config.model.stem.type_vocab_size = self.dataset_meta_data[ + 'type_vocab_size'] + self.config.model.head.num_classes = self.dataset_meta_data['num_classes'] + return BERT( + stem_config=self.config.model.stem, + encoder_config=self.config.model.encoder, + head_config=self.config.model.head, + dtype=model_dtype, + ) + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state.""" + return init_bert_from_train_state(train_state, restored_train_state, + self.config, restored_model_cfg) + + +class BERTRegressionModel(RegressionModel): + """BERT Regression model.""" + + def build_flax_model(self): + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + with self.config.unlocked(): + # Add vocabulary information from dataset meta-data to configs: + self.config.model.stem.vocab_size = self.dataset_meta_data['vocab_size'] + self.config.model.stem.type_vocab_size = self.dataset_meta_data[ + 'type_vocab_size'] + return BERT( + stem_config=self.config.model.stem, + encoder_config=self.config.model.encoder, + head_config=self.config.model.head, + dtype=model_dtype, + ) + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state.""" + return init_bert_from_train_state(train_state, restored_train_state, + self.config, restored_model_cfg) + + +def init_bert_from_train_state( + train_state: Any, restored_train_state: Any, + config: ml_collections.ConfigDict, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state.""" + del restored_model_cfg + + def _get_param_dict(params): + return { + '/'.join([str(kk) + for kk in k]): v + for k, v in flax.traverse_util.flatten_dict(params).items() + } + + if hasattr(train_state, 'optimizer'): + # TODO(dehghani): Remove support for flax optim. + params = flax.core.unfreeze(train_state.optimizer.target) + restored_params = flax.core.unfreeze( + restored_train_state.optimizer.target) + else: + params = flax.core.unfreeze(train_state.params) + restored_params = flax.core.unfreeze(restored_train_state.params) + + params_dict = _get_param_dict(params) + # Fix some names: + restored_params_dict = dict() + for key, value in flax.traverse_util.flatten_dict(restored_params).items(): + name = '/'.join([str(k) for k in key]) + if config.init_from.restore_next_sentence_prediction_head_params: + name = name.replace('next_sentence_prediction_head', + 'classification_head') + restored_params_dict[name] = value + # Copy parameters over: + for pname, pvalue in restored_params_dict.items(): + if 'masked_language_model_head' in pname: + # We throw away parameters of `masked_language_model_head`, but + # for the `next_sentence_prediction_head`, we only discard the final + # dense (`output_projection`) tha maps model representation to the + # label space. + continue + if (not config.init_from.restore_next_sentence_prediction_head_params and + 'next_sentence_prediction_head' in pname): + continue + if 'output_projection' in pname: + continue + elif pname in params_dict: + params_dict[pname] = pvalue + else: + logging.error("Restored key doesn't exist in the model: %s.", pname) + + logging.info('Inspect missing keys from the restored params:\n%s', + params_dict.keys() - restored_params_dict.keys()) + logging.info('Inspect extra keys the the restored params:\n%s', + restored_params_dict.keys() - params_dict.keys()) + + splitkeys = {tuple(k.split('/')): v for k, v in params_dict.items()} + params = flax.traverse_util.unflatten_dict(splitkeys) + logging.info('Parameter summary after initialising from train state:') + debug_utils.log_param_shapes(params) + if hasattr(train_state, 'optimizer'): + # TODO(dehghani): Remove support for flax optim. + return train_state.replace( + optimizer=train_state.optimizer.replace( + target=flax.core.freeze(params))) + else: + return train_state.replace(params=flax.core.freeze(params)) + diff --git a/scenic/projects/baselines/bert/requirements.txt b/scenic/projects/baselines/bert/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..0c62c11b422400f71fd75812134ef7b8e4891966 --- /dev/null +++ b/scenic/projects/baselines/bert/requirements.txt @@ -0,0 +1 @@ +sklearn diff --git a/scenic/projects/baselines/bert/train_utils.py b/scenic/projects/baselines/bert/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..2af6180683fb301887d2c073ed046d7cc1bf843f --- /dev/null +++ b/scenic/projects/baselines/bert/train_utils.py @@ -0,0 +1,445 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for BERT trainer.""" + +import functools +from typing import Any, Dict, List, Mapping, Optional, Tuple, Union + +from absl import logging +from clu import metric_writers +import flax +from flax import jax_utils +import flax.linen as nn +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.common_lib import debug_utils +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils +import scipy +import sklearn.metrics + +# JAX team is working on type annotation for pytree: +# https://github.com/google/jax/issues/1555 +PyTree = Union[Mapping[str, Mapping], Any] + + +def f1_score_with_invalid(target: np.ndarray, + prediction: np.ndarray) -> Dict[str, float]: + """Compute F1 score, but any prediction != 0 or 1 is counted as incorrect. + + Args: + target: Numpy array of targets, either 0 or 1 (binary label space). + prediction: Numpy array of model predictions, any integer value. + + Returns: + F1 score, where any prediction != 0 or 1 is counted as wrong. + """ + # Get indices of invalid predictions: + invalid_idx_mask = np.logical_and(prediction != 0, prediction != 1) + # For any prediction != 0 or 1, set it to the opposite of what the target is: + prediction[invalid_idx_mask] = 1 - target[invalid_idx_mask] + return {'f1': sklearn.metrics.f1_score(target, prediction)} + + +_BIAS_CONSTANT = 100.0 + + +# Setup function for few-shot regression on CPU to avoid 'polluting' the TPU. +# It's fast enough when done in jax instead of numpy. +@functools.partial(jax.jit, backend='cpu', static_argnums=(5, 6)) +def _fewshot_acc_fn( + x: jnp.ndarray, + y: jnp.ndarray, + x_test: jnp.ndarray, + y_test: jnp.ndarray, + l2_reg: float, + num_classes: int, + target_is_one_hot: bool = False, + stddev_constant: float = 1e-5, +) -> jax.Array: + """Computes (x,y) linear regression accuracy on (x_test, y_test). + + Args: + x: An [n_examples, n_classes] matrix of feature representations. This will + be whitened before computing linear regression. + y: Array of labels. Shape is either [n_examples] or [n_examples, n_classes]. + In the latter case, target_is_one_hot must be True. + x_test: An [n_test_examples, n_classes] matrix of feature representations. + Will be whitened before computing linear regression. + y_test: Array of labels. Shape is either [n_examples] or [n_examples, + n_classes]. In the latter case, target_is_one_hot must be True. + l2_reg: L2 regularisation co-efficient to apply when computing linear + regression (also known as "ridge regression"). + num_classes: The number of classes in the dataset. Used to convert y to a + one-hot representation if not already. + target_is_one_hot: If the labels, y, are already one-hot or not. + stddev_constant: Small constant to add when computing the standard deviation + to avoid it being 0. + + Returns: + The accuracy or precision@1 (for one-hot labels), after computing linear + regression. + """ + + def preprocess_features( + data: jnp.ndarray, mean: jnp.ndarray, std: jnp.ndarray + ) -> jnp.ndarray: + """Whitens features and adds a bias term.""" + data_whitened = (data - mean) / std + # Add a constant feature for the bias, large so it's almost unregularized. + data_whitened_bias = jnp.pad( + data_whitened, ((0, 0), (0, 1)), constant_values=_BIAS_CONSTANT + ) + return data_whitened_bias + + mean = jnp.mean(x, axis=0, keepdims=True) + std = jnp.std(x, axis=0, keepdims=True) + stddev_constant + + x_whitened = preprocess_features(x, mean, std) + x_test_whitened = preprocess_features(x_test, mean, std) + + # Solve linear regression problem. + if not target_is_one_hot: + y_one_hot = jax.nn.one_hot(y, num_classes) + else: + y_one_hot = y + y_rescaled = 2.0 * y_one_hot - 1.0 + w = jnp.linalg.solve( + x_whitened.T @ x_whitened + jnp.eye(x_whitened.shape[1]) * l2_reg, + x_whitened.T @ y_rescaled, + ) + + if target_is_one_hot: + # Compute the precision@1 for multilabel datasets. This is the same as + # accuracy if there is one active label. + preds = x_test_whitened @ w + top1_idx = jnp.argmax(preds, axis=-1) + top1_correct = jnp.take_along_axis(y_test, top1_idx[..., None], axis=-1) + top1_correct = jnp.squeeze(top1_correct) + return jnp.mean(top1_correct) + else: + # Predict test-set values and measure their accuracy. + preds = jnp.argmax(x_test_whitened @ w, axis=1) + return jnp.mean(preds == y_test) + + +def matthews_corrcoef(target: np.ndarray, + prediction: np.ndarray) -> Dict[str, float]: + """Returns Matthews correlation coefficient (MCC).""" + return { + 'matthews_corrcoef': sklearn.metrics.matthews_corrcoef( + target, prediction) + } + + +def pearson_corrcoef(target: np.ndarray, + prediction: np.ndarray) -> Dict[str, float]: + """Returns Pearson correlation coefficient.""" + return {'pearson_corrcoef': scipy.stats.pearsonr(target, prediction)[0]} + + +class BERTGlobalEvaluator(): + """Evaluator used for BERT global metrics evaluation.""" + + def __init__(self, global_metrics: List[str]): + self.global_metrics = global_metrics + self.batches = None + self._num_examples_added = 0 + + def add_batch_of_examples(self, target: np.ndarray, output: np.ndarray): + """Add a batch of examples to the evaluator. + + Args: + target: Target to be predicted as a Numpy array. + output: Output from the model as a Numpy array. + """ + self._num_examples_added += output.shape[0] + if self.batches is None: + self.batches = (target, output) + else: # Append targets and outputs for the new examples. + self.batches = (np.append(self.batches[0], target, axis=0), + np.append(self.batches[1], output, axis=0)) + + def compute_metrics(self, + clear_annotations: Optional[bool] = True + ) -> Dict[str, Any]: + """Computes the relevant metrics for all added pairs.""" + metrics = {} + if 'f1' in self.global_metrics: + # Used for QQP and MRPC tasks. + prediction = np.argmax(self.batches[1], axis=-1) + metrics.update( + f1_score_with_invalid(target=self.batches[0], prediction=prediction)) + + if 'matthews_corrcoef' in self.global_metrics: + # Used for COLA task. + prediction = np.argmax(self.batches[1], axis=-1) + metrics.update( + matthews_corrcoef(target=self.batches[0], prediction=prediction)) + + if 'pearson_corrcoef' in self.global_metrics: + # Used for STS-B task (which is a regression task). + metrics.update( + pearson_corrcoef( + target=np.squeeze(self.batches[0]), + prediction=np.squeeze(self.batches[1]))) + + if clear_annotations: + self.clear() + return metrics + + def clear(self): + self.batches = None + self._num_examples_added = 0 + + def __len__(self): + return self._num_examples_added + + +def initialize_bert_model( + *, + model_def: nn.Module, + input_spec: Dict[str, Union[Tuple[Tuple[int, ...], jnp.dtype], + Tuple[int, ...], None]], + config: ml_collections.ConfigDict, + rngs: Union[jnp.ndarray, Mapping[str, jnp.ndarray]], +) -> Tuple[PyTree, PyTree, int, Optional[float]]: + """Initializes parameters and model state of BERT. + + Args: + model_def: Definition of a model. + input_spec: A dictionary of arg name to a (shape, dtype) pair specifying the + shape and dtype of the input arguments. If unspecified the dtype is + float32. + config: Configurations of the initialization. + rngs: Jax rng keys. + + Returns: + Initial params, Init model_state, and number of trainable_params. + """ + batch_size = (config.batch_size // + jax.device_count()) if config.get('batch_size') else None + dummy_input = {} + for name, spec in input_spec.items(): + if spec is not None: + in_st = debug_utils.input_spec_to_jax_shape_dtype_struct( + spec, batch_size=batch_size) + dummy_input[name] = jnp.zeros(in_st.shape, in_st.dtype) + else: + dummy_input[name] = None + + # We want all parameters to be created in host RAM, not on any device, they'll + # be sent there later as needed, otherwise we already encountered two + # situations where we allocate them twice. + @functools.partial(jax.jit, backend='cpu') + def _initialize_model(rngs): + """Initialization function to be jitted.""" + init_model_state, init_params = model_def.init( + rngs, dummy_input, train=False, debug=False).pop('params') + # Set bias in the head to low value, such that loss is small initially. + if config.get('init_head_bias', None) is not None: + init_params = flax.core.unfreeze(init_params) + potential_keys = {'classification_head', + 'regression_head', 'next_sentence_prediction_head'} + head_key = potential_keys & set(init_params.keys()) + assert len(head_key) == 1 + head_key = head_key.pop() + new_params = optimizers.tree_map_with_names( + lambda p: jnp.full_like(p, config.init_head_bias), + init_params[head_key]['output_projection'], + match_name_fn=lambda name: 'bias' in name) + init_params[head_key]['output_projection'] = new_params + init_params = flax.core.freeze(init_params) + return init_params, init_model_state + + if not isinstance(rngs, dict): + rngs = {'params': rngs} + init_params, init_model_state = _initialize_model(rngs) + # Pop out params rng: + rngs.pop('params') + + # Count number of trainable parameters: + num_trainable_params = debug_utils.log_param_shapes(init_params) + + # Count gflops: + count_flops = config.get('count_flops', + ml_collections.ConfigDict({'count_flops': True})) + if count_flops: + variables = {'params': init_params, **init_model_state} + flax_model_apply_fn = functools.partial( + model_def.apply, variables, train=False, debug=False, rngs=rngs) + analysis = jax.jit(flax_model_apply_fn).lower(dummy_input).cost_analysis() + flops = analysis['flops'] + if count_flops.get('fuse_multiply_add', True): + flops = flops / 2 + gflops = flops / (10**9) + logging.info('GFLOPs %0.3f for input spec: %s', gflops, input_spec) + else: + gflops = None + + return init_params, init_model_state, num_trainable_params, gflops + + +class BERTFewShotEvaluator: + """Class for BERT few-shot evaluation.""" + + # These are classificcation tasks from GLUE that are pretty common and + # standard indicator of quality of models, used for sanity checking. + SUPPORTED_FEWSHOT_TASK_NAMES = [ + 'sst2', 'mnli_matched', 'mnli_mismatched', 'rte', 'qnli' + ] + + def __init__(self, representation_fn, fewshot_config): + self.rng_seed = fewshot_config.get('rng_seed', 42) + self.shots = fewshot_config.shots + self.l2_regs = fewshot_config.l2_regs + self.local_batch_size = fewshot_config.batch_size // jax.process_count() + self.repr_fn = jax.pmap( + representation_fn, donate_argnums=(1,), axis_name='batch') + self.walk_first = fewshot_config.walk_first + self._datasets = {} # This will be our cache for lazy loading. + + def _get_dataset(self, config): + """Lazy-loads given dataset.""" + if config.dataset_configs.task not in self.SUPPORTED_FEWSHOT_TASK_NAMES: + raise ValueError('dataset_configs.task_name must be one of [{}].'.format( + ', '.join(self.SUPPORTED_FEWSHOT_TASK_NAMES))) + key = config.dataset_configs.task + try: + return self._datasets[key] + except KeyError: + data_rng = jax.random.PRNGKey(self.rng_seed) + dataset = train_utils.get_dataset(config, data_rng) + train_ds = dataset.train_iter + num_train_samples = dataset.meta_data['num_train_examples'] + test_ds = dataset.valid_iter + num_test_samples = dataset.meta_data['num_eval_examples'] + num_classes = dataset.meta_data['num_classes'] + return self._datasets.setdefault( + key, + (train_ds, test_ds, num_train_samples, num_test_samples, num_classes)) + + def _get_repr(self, train_state, data, num_samples): + """Compute representation for the whole dataset.""" + pre_logits_list = [] + labels_list = [] + total_steps = int(np.ceil(num_samples / self.local_batch_size)) + for _ in range(1, total_steps + 1): + batch = next(data) + pre_logits, labels, mask = self.repr_fn(train_state, batch) + # We need to unreplicate the output of `lax.all_gather`. + # Shapes at this point are: + # pre_logits: `[hosts, devices, global_batch, features]`. + # labels: `[hosts, devices, global_batch]`. + # mask: `[hosts, devices, global_batch]`. + pre_logits = jax_utils.unreplicate(pre_logits) + if pre_logits.ndim != 3: + raise ValueError('Shape of the representations sent to the linear ' + 'fewshot should be `[num_devices, bs, features]`.') + if pre_logits.shape[-1] > 2048: + logging.warning( + 'The feature size for the representations is too large' + '(feature size = %d). This might cause severe slowdown ' + 'of solving the linear equation.', pre_logits.shape[-1]) + mask = np.array(jax_utils.unreplicate(mask)).astype(bool) + pre_logits_list.append(np.array(pre_logits)[mask]) + labels_list.append(np.array(jax_utils.unreplicate(labels))[mask]) + pre_logits = np.concatenate(pre_logits_list, axis=0) + labels = np.concatenate(labels_list, axis=0) + return pre_logits, labels + + def compute_fewshot_metrics(self, train_state, config): + """Compute few-shot metrics on one dataset.""" + (train_ds, test_ds, num_train_samples, num_test_samples, + num_classes) = self._get_dataset(config) + task = config.dataset_configs.task + logging.info('[fewshot][%s]: Precomputing train', task) + repr_train, labels_train = self._get_repr(train_state, train_ds, + num_train_samples) + logging.info('[fewshot][%s]: Precomputing test', task) + repr_test, labels_test = self._get_repr(train_state, test_ds, + num_test_samples) + logging.info('[fewshot][%s]: solving systems', task) + + # Collect where we have samples of which classes. + class_indices = [ + np.where(labels_train == cls_i)[0] for cls_i in range(num_classes) + ] + + results = {} + for shots in self.shots: + all_idx = [indices[:shots] for indices in class_indices] + all_idx = np.concatenate(all_idx, axis=0) + x = repr_train[all_idx] + y = labels_train[all_idx] + + for l2_reg in self.l2_regs: + acc = _fewshot_acc_fn( # pylint: disable=protected-access + x, y, repr_test, labels_test, l2_reg, num_classes + ) + results[shots, l2_reg] = np.array(acc) + return results + + def run_all(self, train_state, datasets): + """Compute summary over all `datasets` that comes from config.""" + results = {} + for cfg in datasets: + results[cfg.dataset_configs.task] = self.compute_fewshot_metrics( + train_state, cfg) + + # Now also figure out the regularization parameter that works best across + # all datasets, per-shot. Similar to ATARI benchmark requiring one single + # hyper-param across tasks, or BiT-HyperRule defining one clear thing. + # Avoids over-fitting to a single task by selecting on test there, while + # also avoiding the need to do cross-validation runs for each task. + best_l2 = {} + for shots in self.shots: + reg_ranks = [] + for _, res in results.items(): + reg_accus = [res[shots, l2] for l2 in self.l2_regs] + reg_ranks.append(np.argsort(np.argsort(reg_accus))) + best_l2[shots] = self.l2_regs[np.argmax(np.mean(reg_ranks, axis=0))] + + return results, best_l2 + + def log_fewshot_summary(self, writer: metric_writers.MetricWriter, step, + results): + """Call `writer` with a descriptive string and the results.""" + results, best_l2 = results + scalars = {} + + # First, go through each individual result: + for dataset_name, result in results.items(): + for (shots, l2), acc in result.items(): + scalars[f'zz/{dataset_name}_{shots}shot_l2={l2}'] = acc + + # Second, report each dataset/shot with the single 'globally' best l2. + for shots, l2 in best_l2.items(): + scalars[f'z/best_l2_for_{shots}shot_eval'] = l2 + + for dataset_name, result in results.items(): + scalars[f'z/{dataset_name}_{shots}shot'] = result[shots, l2] + + # And a highlight, if desired: + if self.walk_first: + dataset_name, shots = self.walk_first + l2 = best_l2[shots] + highlight_value = results[dataset_name][shots, l2] + scalars[f'a/{dataset_name}_{shots}shot'] = highlight_value + + writer.write_scalars(step, scalars) diff --git a/scenic/projects/baselines/bert/trainer.py b/scenic/projects/baselines/bert/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..d7787c3e988fe5e3e6b9b60bec8d621d641790b6 --- /dev/null +++ b/scenic/projects/baselines/bert/trainer.py @@ -0,0 +1,545 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""BERT Training Script.""" + +import functools +from typing import Any, Callable, Dict, Optional, Tuple, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.projects.baselines.bert import bert_base_model +from scenic.projects.baselines.bert import train_utils as bert_train_utils +from scenic.train_lib import optax as scenic_optax +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils + +LrFns = Dict[str, Callable[[jnp.ndarray], jnp.ndarray]] + + +def train_step( + train_state: train_utils.TrainState, + batch: bert_base_model.Batch, + *, + flax_model: nn.Module, + lr_fns: LrFns, + loss_fn: bert_base_model.LossFn, + metrics_fn: bert_base_model.MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False, +) -> Tuple[ + train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, Any] +]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, and optimizer. The buffer of this argument can be + donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + lr_fns: The learning rate fns used for the optimizer in train_state. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training and computed metrics and some training logs. + """ + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + output, new_model_state = flax_model.apply( + variables, + batch, + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(output, batch, variables['params']) + return loss, (new_model_state, output) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (train_cost, (new_model_state, output)), grad = compute_gradient_fn( + train_state.params + ) + + del train_cost + + # We clip gradients before pmean in BERT. + if config.get('max_grad_norm', None) is not None: + grad = clip_grads(grad, config.max_grad_norm) + + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + updates, new_opt_state = train_state.tx.update( + grad, train_state.opt_state, train_state.params + ) + new_params = optax.apply_updates(train_state.params, updates) + + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)]) + ) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + for name, lr_fn in lr_fns.items(): + lr_name = 'learning_rate' if name == 'all' else f'learning_rate_{name}' + training_logs[lr_name] = lr_fn(train_state.global_step) + + metrics = metrics_fn(output, batch) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng, + ) + + return new_train_state, metrics, training_logs + + +def eval_step( + train_state: train_utils.TrainState, + batch: bert_base_model.Batch, + *, + flax_model: nn.Module, + metrics_fn: bert_base_model.MetricFn, + all_gather: bool = False, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], Optional[jnp.ndarray], + Optional[jnp.ndarray]]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + all_gather: If True, the function gather batch and output of + model in from all hosts, using `jax.lax.all_gather` and return it, e.g., + for computing global metrics on CPU. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and optionally output, and batch after all_gather. + """ + variables = {'params': train_state.params, **train_state.model_state} + output = flax_model.apply( + variables, batch, train=False, mutable=False, debug=debug + ) + metrics = metrics_fn(output, batch) + if all_gather: + output = jax.lax.all_gather(output, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return metrics, output, batch + else: + return metrics, None, None + + +def representation_fn( + train_state: train_utils.TrainState, + batch: bert_base_model.Batch, + *, + flax_model: nn.Module, + representation_layer: str, + gather_to_host: bool = True +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Feeds the inputs to the model and returns their representations. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data from the dataset. + flax_model: A Flax model. + representation_layer: The name of the layer to use as the representation. + gather_to_host: Whether to gather results from all devices to the host, + rather than leaving them distributed. + + Returns: + Representation learned by the model for the given inputs and the labels and + masks. If `gather_to_host` is True, these are collected from all hosts. + """ + variables = {'params': train_state.params, **train_state.model_state} + + representation_layer_parts = representation_layer.split('/') + filter_rep = lambda mdl, _: mdl.name == representation_layer_parts[-1] + _, model_state = flax_model.apply( + variables, + batch, + train=False, + capture_intermediates=filter_rep, + mutable=['intermediates'], + transfer_mode=True, + debug=False) + if 'intermediates' not in model_state: + raise ValueError(f'Layer with name "{representation_layer}"' + ' does not exist in your model.') + representation = model_state['intermediates'] + for rep_layer in representation_layer_parts: + if rep_layer: + representation = representation[rep_layer] + representation = representation['__call__'][0] + if gather_to_host: + representation = jax.lax.all_gather(representation, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return representation, batch['label'], batch['batch_mask'] + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[bert_base_model.BERTBaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_state that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = bert_train_utils.initialize_bert_model( + model_def=model.flax_model, + input_spec=dataset.meta_data['input_spec'], + config=config, + rngs=init_rng) + + # Create LR schedules and optimizer. + schedule_fns = scenic_optax.make_schedule(config.get('schedule')) + tx, _ = scenic_optax.make(config.optimizer, schedule_fns, params) + opt_state = tx.init(params) + + rng, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}, + ) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + # Load params from the init_model. + train_state = model.init_from_train_state( # pytype: disable=attribute-error + train_state, restored_train_state, restored_model_cfg) + del restored_train_state + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + lr_fns={name: lr_fn for _, name, (lr_fn, _) in schedule_fns}, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train, + ), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + all_gather=config.get('global_metrics', False), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + if 'fewshot' in config: + representation_fn_fewshot = functools.partial( + representation_fn, + flax_model=model.flax_model, + representation_layer=config.fewshot.representation_layer) + fewshotter = bert_train_utils.BERTFewShotEvaluator( + representation_fn_fewshot, config.fewshot) + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + # If `global_metrics` are set in the config and we are the the lead host + compute_global_metrics = False + if config.get('global_metrics', False) and lead_host: + compute_global_metrics = True + if compute_global_metrics: + global_metrics_evaluator = bert_train_utils.BERTGlobalEvaluator( + config.global_metrics) + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, + writer=writer, + every_secs=None, + every_steps=config.get('report_progress_step', log_summary_steps), + ) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs = train_step_pmapped( + train_state, train_batch + ) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + extra_training_logs.append(t_logs) + + # Quick indication that training is happening. + logging.log_first_n(logging.INFO, 'Finished training step %d.', 5, step) + for h in hooks: + h(step) + + ############### LOG TRAIN SUMMARY ############### + if ( + (step % log_summary_steps == 1) + or (step == total_steps) + or (lead_host and chrono.warmup) + ): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + # train_metrics is list of a dictionaries of metrics, where the shape of + # the metrics[key] is [n_local_devices]. However, because metric functions + # have a psum, we have already summed across the whole sharded batch, and + # what's returned is n_local_devices copies of the same summed metric. + # So we do unreplicate and fetch them to host using `unreplicate_and_get`. + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, train_metrics + ), + extra_training_logs=jax.tree_util.tree_map( + jax.device_get, extra_training_logs + ), + writer=writer, + ) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + eval_metrics = [] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + for _ in range(steps_per_eval): + eval_batch = next(dataset.valid_iter) + e_metrics, e_output, e_batch = eval_step_pmapped( + train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + if compute_global_metrics: + # Unreplicate outputs of eval_step_pmapped that are coming from + # `lax.all_gather`, fetch to the host and add to the Evaluator: + e_batch_mask = train_utils.unreplicate_and_get( + e_batch['batch_mask']).astype(bool) + # Classification: 'label', regression: 'target' + t_key = 'label' if 'label' in e_batch else 'targets' + global_metrics_evaluator.add_batch_of_examples( + target=train_utils.unreplicate_and_get( + e_batch[t_key])[e_batch_mask], + output=train_utils.unreplicate_and_get(e_output)[e_batch_mask]) + del e_batch, e_output, e_batch_mask + eval_global_metrics_summary = None + if compute_global_metrics: + if (len(global_metrics_evaluator) != + dataset.meta_data['num_eval_examples']): + # Make sure no example is lost (specially in multi-host setup). + raise ValueError(f'Number of eval examples should be ' + f'{dataset.meta_data["num_eval_examples"]}, ' + f'but it is {len(global_metrics_evaluator)}.') + eval_global_metrics_summary = ( + global_metrics_evaluator.compute_metrics(clear_annotations=True)) + eval_summary = train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + extra_eval_summary=eval_global_metrics_summary, + writer=writer) + writer.flush() + del eval_metrics, eval_global_metrics_summary + chrono.resume() # Un-pause now. + ##################### CHECKPOINTING ################### + if ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + train_utils.save_checkpoint(workdir, unrep_train_state) + del unrep_train_state + chrono.resume() # Un-pause now. + + ##################### FEWSHOT EVALUATION ############################ + if 'fewshot' in config: + # Compute few-shot on-the-fly evaluation. + if (step % config.fewshot.log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('fewshot'): + results = fewshotter.run_all(train_state, config.fewshot.datasets) + fewshotter.log_fewshot_summary( + writer=writer, step=step, results=results) + del results + writer.write_scalars(step, {'zz/epoch': step / steps_per_epoch}) + writer.flush() + chrono.resume() # Un-pause now. + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/baselines/bit_resnet.py b/scenic/projects/baselines/bit_resnet.py new file mode 100644 index 0000000000000000000000000000000000000000..6190939989f88a79e333cce92a88d29cf3a55104 --- /dev/null +++ b/scenic/projects/baselines/bit_resnet.py @@ -0,0 +1,344 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of ResNetV1 with group norm and weight standardization. + +Ported from: +https://github.com/google-research/big_transfer/blob/master/bit_jax/models.py +""" + +from typing import Any, Dict, Optional, Sequence, Tuple, Union +from absl import logging + +import flax +import flax.linen as nn +import jax.numpy as jnp +import ml_collections +from scenic.common_lib import debug_utils +from scenic.model_lib.base_models.classification_model import ClassificationModel +from scenic.model_lib.base_models.multilabel_classification_model import MultiLabelClassificationModel +from scenic.model_lib.layers import nn_layers + + +def weight_standardize(w: jnp.ndarray, + axis: Union[Sequence[int], int], + eps: float): + """Standardize (mean=0, var=1) a weight.""" + w = w - jnp.mean(w, axis=axis, keepdims=True) + w = w / jnp.sqrt(jnp.mean(jnp.square(w), axis=axis, keepdims=True) + eps) + return w + + +class StdConv(nn.Conv): + """Convolution with weight standardized kernel.""" + + def param(self, name: str, *args, **kwargs): + param = super().param(name, *args, **kwargs) + if name == 'kernel': + param = weight_standardize(param, axis=[0, 1, 2], eps=1e-10) + return param + + +class ResidualUnit(nn.Module): + """Bottleneck ResNet block. + + Attributes: + nout: Number of output features. + strides: Downsampling stride. + dilation: Kernel dilation. + bottleneck: If True, the block is a bottleneck block. + gn_num_groups: Number of groups in GroupNorm layer. + """ + nout: int + strides: Tuple[int, ...] = (1, 1) + dilation: Tuple[int, ...] = (1, 1) + bottleneck: bool = True + gn_num_groups: int = 32 + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + features = self.nout + nout = self.nout * 4 if self.bottleneck else self.nout + needs_projection = x.shape[-1] != nout or self.strides != (1, 1) + residual = x + if needs_projection: + residual = StdConv(nout, + (1, 1), + self.strides, + use_bias=False, + name='conv_proj')(residual) + residual = nn.GroupNorm(num_groups=self.gn_num_groups, epsilon=1e-4, + name='gn_proj')(residual) + + if self.bottleneck: + x = StdConv(features, (1, 1), use_bias=False, name='conv1')(x) + x = nn.GroupNorm(num_groups=self.gn_num_groups, epsilon=1e-4, + name='gn1')(x) + x = nn.relu(x) + + x = StdConv(features, (3, 3), self.strides, kernel_dilation=self.dilation, + use_bias=False, name='conv2')(x) + x = nn.GroupNorm(num_groups=self.gn_num_groups, epsilon=1e-4, name='gn2')(x) + x = nn.relu(x) + + last_kernel = (1, 1) if self.bottleneck else (3, 3) + x = StdConv(nout, last_kernel, use_bias=False, name='conv3')(x) + x = nn.GroupNorm(num_groups=self.gn_num_groups, + epsilon=1e-4, + name='gn3', + scale_init=nn.initializers.zeros)(x) + x = nn.relu(residual + x) + + return x + + +class ResNetStage(nn.Module): + """ResNet Stage: one or more stacked ResNet blocks. + + Attributes: + block_size: Number of ResNet blocks to stack. + nout: Number of features. + first_stride: Downsampling stride. + first_dilation: Kernel dilation. + bottleneck: If True, the bottleneck block is used. + gn_num_groups: Number of groups in group norm layer. + """ + + block_size: int + nout: int + first_stride: Tuple[int, ...] + first_dilation: Tuple[int, ...] = (1, 1) + bottleneck: bool = True + gn_num_groups: int = 32 + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + x = ResidualUnit(self.nout, + strides=self.first_stride, + dilation=self.first_dilation, + bottleneck=self.bottleneck, + gn_num_groups=self.gn_num_groups, + name='unit1')(x) + for i in range(1, self.block_size): + x = ResidualUnit(self.nout, + strides=(1, 1), + bottleneck=self.bottleneck, + gn_num_groups=self.gn_num_groups, + name=f'unit{i + 1}')(x) + return x + + +class BitResNet(nn.Module): + """Bit ResNetV1. + + Attributes: + num_outputs: Num output classes. If None, a dict of intermediate feature + maps is returned + gn_num_groups: Number groups in the group norm layer.. + width_factor: Width multiplier for each of the ResNet stages. + num_layers: Number of layers (see `BLOCK_SIZE_OPTIONS` for stage + configurations). + max_output_stride: Defines the maximum output stride of the resnet. + Typically, resnets output feature maps have sride 32. We can, however, + lower that number by swapping strides with dilation in later stages. This + is common in cases where stride 32 is too large, e.g., in dense prediciton + tasks. + """ + + num_outputs: Optional[int] = 1000 + gn_num_groups: int = 32 + width_factor: int = 1 + num_layers: int = 50 + max_output_stride: int = 32 + + @nn.compact + def __call__(self, + x: jnp.ndarray, + train: bool = True, + debug: bool = False + ) -> Union[jnp.ndarray, Dict[str, jnp.ndarray]]: + """Applies the Bit ResNet model to the inputs. + + Args: + x: Inputs to the model. + train: Unused. + debug: Unused. + + Returns: + Un-normalized logits if `num_outputs` is provided, a dictionary with + representations otherwise. + """ + del train + del debug + if self.max_output_stride not in [4, 8, 16, 32]: + raise ValueError('Only supports output strides of [4, 8, 16, 32]') + + blocks, bottleneck = BLOCK_SIZE_OPTIONS[self.num_layers] + + width = int(64 * self.width_factor) + + # Root block. + x = StdConv(width, (7, 7), (2, 2), use_bias=False, name='conv_root')(x) + x = nn.GroupNorm(num_groups=self.gn_num_groups, epsilon=1e-4, + name='gn_root')(x) + x = nn.relu(x) + x = nn.max_pool(x, (3, 3), strides=(2, 2), padding='SAME') + representations = {'stem': x} + + # Stages. + x = ResNetStage( + blocks[0], + width, + first_stride=(1, 1), + bottleneck=bottleneck, + gn_num_groups=self.gn_num_groups, + name='block1')(x) + stride = 4 + for i, block_size in enumerate(blocks[1:], 1): + max_stride_reached = self.max_output_stride <= stride + x = ResNetStage( + block_size, + width * 2**i, + first_stride=(2, 2) if not max_stride_reached else (1, 1), + first_dilation=(2, 2) if max_stride_reached else (1, 1), + bottleneck=bottleneck, + gn_num_groups=self.gn_num_groups, + name=f'block{i + 1}')(x) + if not max_stride_reached: + stride *= 2 + representations[f'stage_{i + 1}'] = x + + if self.num_outputs: + # Head. + x = jnp.mean(x, axis=(1, 2)) + x = nn_layers.IdentityLayer(name='pre_logits')(x) + x = nn.Dense( + self.num_outputs, + kernel_init=nn.initializers.zeros, + name='output_projection')(x) + return x + return representations + + +# A dictionary mapping the number of layers in a resnet to the number of +# blocks in each stage of the model. The second argument indicates whether we +# use bottleneck layers or not. +BLOCK_SIZE_OPTIONS = { + 5: ([1], True), # Only strided blocks. Total stride 4. + 8: ([1, 1], True), # Only strided blocks. Total stride 8. + 11: ([1, 1, 1], True), # Only strided blocks. Total stride 16. + 14: ([1, 1, 1, 1], True), # Only strided blocks. Total stride 32. + 9: ([1, 1, 1, 1], False), # Only strided blocks. Total stride 32. + 18: ([2, 2, 2, 2], False), + 26: ([2, 2, 2, 2], True), + 34: ([3, 4, 6, 3], False), + 50: ([3, 4, 6, 3], True), + 101: ([3, 4, 23, 3], True), + 152: ([3, 8, 36, 3], True), + 200: ([3, 24, 36, 3], True) +} + + +class BitResNetClassificationModel(ClassificationModel): + """Implements the Bit ResNet model for classification.""" + + def build_flax_model(self) -> nn.Module: + return BitResNet( + num_outputs=self.dataset_meta_data['num_classes'], + gn_num_groups=self.config.get('gn_num_groups', 32), + width_factor=self.config.get('width_factor', 1), + num_layers=self.config.num_layers) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return _get_default_configs_for_testing() + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from `restored_train_state`. + + This function is writen to be used for 'fine-tuning' experiments. + As defined in the ResNet definition above output head is called + `output_projection` and not loaded since often target tasks have a + new output head, possibly with different shape. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + `restored_train_state` come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + del restored_model_cfg + if hasattr(train_state, 'optimizer'): + # TODO(dehghani): Remove support for flax optim. + params = flax.core.unfreeze(train_state.optimizer.target) + restored_params = flax.core.unfreeze( + restored_train_state.optimizer.target) + else: + params = flax.core.unfreeze(train_state.params) + restored_params = flax.core.unfreeze(restored_train_state.params) + # Check all parameters are loaded. + params_to_load = set(params.keys()) + params_to_load.remove('output_projection') + for pname, pvalue in restored_params.items(): + if pname == 'output_projection': + # The `output_projection` is used as the name of the linear lyaer at the + # head of the model that maps the representation to the label space. + # By default, for finetuning to another dataset, we drop this layer as + # the label space is different. + continue + else: + if pname not in params: + raise ValueError(f'Loaded parameter {pname} doesnt exist in params.') + params[pname] = pvalue + params_to_load.remove(pname) + if params_to_load: + raise ValueError( + f'Paramater groups that are not loaded: {params_to_load}') + logging.info('Parameter summary after initialising from train state:') + debug_utils.log_param_shapes(params) + if hasattr(train_state, 'optimizer'): + # TODO(dehghani): Remove support for flax optim. + return train_state.replace( + optimizer=train_state.optimizer.replace( + target=flax.core.freeze(params)), + model_state=restored_train_state.model_state) + else: + return train_state.replace(params=flax.core.freeze(params), + model_state=restored_train_state.model_state) + + +class BitResNetMultiLabelClassificationModel(MultiLabelClassificationModel): + """Implements the Bit ResNet model for multi-label classification.""" + + def build_flax_model(self) -> nn.Module: + return BitResNet( + num_outputs=self.dataset_meta_data['num_classes'], + gn_num_groups=self.config.get('gn_num_groups', 32), + width_factor=self.config.get('width_factor', 1), + num_layers=self.config.num_layers) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return _get_default_configs_for_testing() + + +def _get_default_configs_for_testing() -> ml_collections.ConfigDict: + return ml_collections.ConfigDict(dict( + width_factor=1, + num_layers=5, + )) diff --git a/scenic/projects/baselines/centernet/README.md b/scenic/projects/baselines/centernet/README.md new file mode 100644 index 0000000000000000000000000000000000000000..82c3e700d2bee10c8b9e64827d930ad5e1fa9399 --- /dev/null +++ b/scenic/projects/baselines/centernet/README.md @@ -0,0 +1,62 @@ +CenterNet +== + +This folder contains a Jax implementation of object detection using +CenterNet or CenterNet2. + +Papers + + - CenterNet: https://arxiv.org/abs/1904.07850 + - CenterNet2: https://arxiv.org/abs/2103.07461 + +Pytorch code: + + - https://github.com/xingyizhou/CenterNet2 + + +#### Install + +In the Scenic root folder, run + +``` +pip install -r scenic/projects/baselines/centernet/requirements.txt +``` + +#### Dataset setup + +Datasets are handled by [Tensorflow Dataset](https://www.tensorflow.org/datasets/catalog/overview) (tfds). +If the dataset used is already in tfds (e.g., COCO), +no additional steps are needed to setup the dataset. +The dataset will be downloaded automatically at the first run. +If the dataset used is not in tfds (e.g., Objects365), we'll need to convert the dataset format to +[TFRecord](https://www.tensorflow.org/tutorials/load_data/tfrecord) format first. +Todo this, we'll need to first convert the dataset to +[COCO format](https://cocodataset.org/#format-data), and run + +``` +python scenic/projects/baselines/centernet/tools/build_coco_tfrecord.py \ +--input_json /path/to/instance/annotation.json \ +--image_path /path/to/image/folder/ \ +--output_path /path/to/output/instance.tfrecord +``` + +#### ImageNet pretrained checkpoint setup + +For [ConvNeXt](https://arxiv.org/abs/2201.03545) backbones, run [this colab](notebooks/convert_convnext_weights.ipynb) +to convert ImageNet pretrained checkpoints to Jax. +For VitDet backbones, run [this colab](notebooks/convert_d2_vitdet_weights.ipynb) +to convert [MAE](https://arxiv.org/abs/2111.06377) pretrained checkpoints to Jax. +Update the `config.weights` in each config to the converted weights before running. + +#### Training and evaluation + +To train a model with a config, e.g., `centernet2_CXT_LSJ_4x`, run + +``` +python scenic/projects/baselines/centernet/main.py -- \ + --config=scenic/projects/baselines/centernet/configs/centernet2_CXT_LSJ_4x.py \ + --workdir=output/centernet2_CXT_LSJ_4x/ +``` +By default our model runs in multiple GPU/ TPU machines. +To run on fewer devices, reducing the batch size and learning rate accordingly +following linear learning rate rule is fine. diff --git a/scenic/projects/baselines/centernet/__init__.py b/scenic/projects/baselines/centernet/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/centernet/configs/__init__.py b/scenic/projects/baselines/centernet/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/centernet/configs/centernet2_CXT_LSJ_4x.py b/scenic/projects/baselines/centernet/configs/centernet2_CXT_LSJ_4x.py new file mode 100644 index 0000000000000000000000000000000000000000..d6fa405d624e1be3d6dddae6975814e63657ac1c --- /dev/null +++ b/scenic/projects/baselines/centernet/configs/centernet2_CXT_LSJ_4x.py @@ -0,0 +1,99 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for COCO detection using CenterNet. + +""" +# pylint: enable=line-too-long + +import ml_collections + + +def get_config(): + """get config.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'centernet2_CXT_LSJ_4x' + + # Dataset. + config.dataset_name = 'coco_centernet_detection' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 10_000 + config.dataset_configs.max_boxes = 100 + config.dataset_configs.scale_range = (0.1, 2.0) + config.dataset_configs.crop_size = 1024 + config.dataset_configs.size_divisibility = 32 + config.dataset_configs.remove_crowd = True + config.data_dtype_str = 'float32' + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'centernet2' + config.model.backbone_name = 'convnext' + config.model.num_classes = -1 # classification head for the proposal network + config.model.strides = (8, 16, 32, 64, 128) + config.model.pixel_mean = (103.530, 116.280, 123.675) + config.model.pixel_std = (57.375, 57.120, 58.395) + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.size = 'T' + config.model.backbone_args.drop_path_rate = 0.3 + config.model.freeze_model_state = False + + # CenterNet2 parameters + config.model.hm_weight = 0.5 + config.model.reg_weight = 1.0 + config.model.score_thresh = 0.05 + config.model.pre_nms_topk_train = 2000 + config.model.post_nms_topk_train = 1000 + config.model.pre_nms_topk_test = 1000 + config.model.post_nms_topk_test = 256 + config.model.iou_thresh = 0.9 + config.model.roi_matching_threshold = (0.6, 0.7, 0.8) + config.model.roi_nms_threshold = 0.7 + + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.05 + config.optimizer.skip_scale_and_bias_regularization = True + + # Training. + config.batch_size = 64 + config.num_training_steps = 90000 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = 500 + config.lr_configs.base_learning_rate = 0.0002 + + # Pretrained_backbone. + config.weights = '/path/to/convnext_tiny_in22k/' + config.load_prefix = 'backbone/bottom_up/' + config.checkpoint_steps = 5000 + config.log_eval_steps = 2500 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 20 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config diff --git a/scenic/projects/baselines/centernet/configs/centernet2_O365_ViTDetH_LSJ_75e.py b/scenic/projects/baselines/centernet/configs/centernet2_O365_ViTDetH_LSJ_75e.py new file mode 100644 index 0000000000000000000000000000000000000000..be980fb83981d4719f60e574dbab2ab828f14657 --- /dev/null +++ b/scenic/projects/baselines/centernet/configs/centernet2_O365_ViTDetH_LSJ_75e.py @@ -0,0 +1,122 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for COCO detection using CenterNet. + +""" + +import ml_collections + + +def get_config(): + """get config.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'centernet2_O365_ViTDetH_LSJ_75e' + + # Dataset. + config.dataset_name = 'coco_centernet_detection' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.train_data_path = 'path/to/objects_365_train.tfrecord' + config.dataset_configs.test_data_path = 'path/to/objects_365_val.tfrecord' + config.dataset_configs.test_annotation_path = 'path/to/annotations/zhiyuan_objv2_val.json' + config.dataset_configs.num_train_examples = 1_742_289 + config.dataset_configs.num_eval_examples = 80_000 + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 10_000 + config.dataset_configs.max_boxes = 100 + config.dataset_configs.train_augmentation_type = 'resize_crop' + config.dataset_configs.test_augmentation_type = 'resize_crop' + config.dataset_configs.scale_range = (0.1, 2.0) + config.dataset_configs.crop_size = 1024 + config.dataset_configs.size_divisibility = 32 + config.dataset_configs.remove_crowd = True + config.data_dtype_str = 'float32' + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'centernet2' + config.model.backbone_name = 'vitdet' + config.model.num_classes = -1 + config.model.strides = (8, 16, 32, 64, 128) + config.model.pixel_mean = (123.675, 116.28, 103.53) + config.model.pixel_std = (58.395, 57.12, 57.375) + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.size = 'H' + config.model.backbone_args.embed_dim = 1280 + config.model.backbone_args.depth = 32 + config.model.backbone_args.num_heads = 16 + config.model.backbone_args.drop_path_rate = 0.5 + config.model.backbone_args.window_block_indexes = ( + list(range(0, 7)) + list(range(8, 15)) + list(range(16, 23)) + list(range(24, 31)) + ) + config.model.freeze_model_state = False + + # CenterNet2 parameters + config.model.roi_num_classes = 365 + config.model.hm_weight = 0.5 + config.model.reg_weight = 1.0 + config.model.score_thresh = 0.05 + config.model.pre_nms_topk_train = 2000 + config.model.post_nms_topk_train = 1000 + config.model.pre_nms_topk_test = 1000 + config.model.post_nms_topk_test = 256 + config.model.iou_thresh = 0.9 + config.model.roi_matching_threshold = (0.6, 0.7, 0.8) + config.model.roi_nms_threshold = 0.7 + + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.b1 = 0.9 + config.optimizer.b2 = 0.999 + config.optimizer.weight_decay = 0.1 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.9 + config.optimizer.num_layers = 32 + config.optimizer.decay_layer_prefix = 'backbone/net/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + + # learning rate and training schedule + config.num_training_steps = 184375 * 3 // 4 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = [163889 * 3 // 4, 177546 * 3 // 4] + config.lr_configs.decay_factors = [0.1, 0.01] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 0.0001 + + # Pretrained_backbone. + config.weights = '/path/to/mae_pretrain_vit_huge_p14to16/' + config.load_prefix = 'backbone/net/' + config.skip_wrong_shape = True + config.checkpoint_steps = 500 + config.log_eval_steps = 500000 + + # Training. + config.batch_size = 64 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 20 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config diff --git a/scenic/projects/baselines/centernet/configs/centernet2_ViTDetB_LSJ_4x.py b/scenic/projects/baselines/centernet/configs/centernet2_ViTDetB_LSJ_4x.py new file mode 100644 index 0000000000000000000000000000000000000000..f9e49ca0b5a1f8cefcf2140b56c96c75848a45be --- /dev/null +++ b/scenic/projects/baselines/centernet/configs/centernet2_ViTDetB_LSJ_4x.py @@ -0,0 +1,105 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for COCO detection using CenterNet. + +""" +# pylint: enable=line-too-long + +import ml_collections + + +def get_config(): + """get config.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'centernet2_ViTDetB_LSJ_4x' + + # Dataset. + config.dataset_name = 'coco_centernet_detection' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 10_000 + config.dataset_configs.max_boxes = 100 + config.dataset_configs.scale_range = (0.1, 2.0) + config.dataset_configs.crop_size = 1024 + config.dataset_configs.size_divisibility = 32 + config.dataset_configs.remove_crowd = True + config.data_dtype_str = 'float32' + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'centernet2' + config.model.backbone_name = 'vitdet' + config.model.num_classes = -1 + config.model.strides = (8, 16, 32, 64, 128) + config.model.pixel_mean = (103.530, 116.280, 123.675) + config.model.pixel_std = (57.375, 57.120, 58.395) # For most other models + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.drop_path_rate = 0.1 + config.model.freeze_model_state = False + + # CenterNet2 parameters + config.model.hm_weight = 0.5 + config.model.reg_weight = 1.0 + config.model.score_thresh = 0.05 + config.model.pre_nms_topk_train = 2000 + config.model.post_nms_topk_train = 1000 + config.model.pre_nms_topk_test = 1000 + config.model.post_nms_topk_test = 256 + config.model.iou_thresh = 0.9 + config.model.roi_matching_threshold = (0.6, 0.7, 0.8) + config.model.roi_nms_threshold = 0.7 + + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.05 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.7 + config.optimizer.num_layers = 12 + config.optimizer.decay_layer_prefix = 'backbone/net/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + + # learning rate and training schedule + config.num_training_steps = 90000 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = [80000, 87500] + config.lr_configs.decay_factors = [0.1, 0.01] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 0.0001 + + # Pretrained_backbone. + config.weights = '/path/to/mae_pretrain_vit_base/' + config.load_prefix = 'backbone/net/' + config.checkpoint_steps = 500 + config.log_eval_steps = 2500 + + # Training. + config.batch_size = 64 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 20 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config diff --git a/scenic/projects/baselines/centernet/configs/centernet2_ViTDetH_LSJ_25e_ftO365.py b/scenic/projects/baselines/centernet/configs/centernet2_ViTDetH_LSJ_25e_ftO365.py new file mode 100644 index 0000000000000000000000000000000000000000..e517861c3d76e13f409ead06fe1c71ea4cc95761 --- /dev/null +++ b/scenic/projects/baselines/centernet/configs/centernet2_ViTDetH_LSJ_25e_ftO365.py @@ -0,0 +1,118 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for COCO detection using CenterNet. + +""" + +import ml_collections + + +def get_config(): + """get config.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'centernet2_ViTDetH_LSJ_25e_ftO365' + + # Dataset. + config.dataset_name = 'coco_centernet_detection' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 10_000 + config.dataset_configs.max_boxes = 100 + config.dataset_configs.scale_range = (0.1, 2.0) + config.dataset_configs.crop_size = 1024 + config.dataset_configs.size_divisibility = 32 + config.dataset_configs.remove_crowd = True + config.data_dtype_str = 'float32' + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'centernet2' + config.model.backbone_name = 'vitdet' + config.model.num_classes = -1 + config.model.strides = (8, 16, 32, 64, 128) + config.model.pixel_mean = (123.675, 116.28, 103.53) + config.model.pixel_std = (58.395, 57.12, 57.375) + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.size = 'H' + config.model.backbone_args.embed_dim = 1280 + config.model.backbone_args.depth = 32 + config.model.backbone_args.num_heads = 16 + config.model.backbone_args.drop_path_rate = 0.5 + config.model.backbone_args.window_block_indexes = ( + list(range(0, 7)) + list(range(8, 15)) + list(range(16, 23)) + list(range(24, 31)) + ) + config.model.freeze_model_state = False + + # CenterNet2 parameters + config.model.hm_weight = 0.5 + config.model.reg_weight = 1.0 + config.model.score_thresh = 0.05 + config.model.pre_nms_topk_train = 2000 + config.model.post_nms_topk_train = 1000 + config.model.pre_nms_topk_test = 1000 + config.model.post_nms_topk_test = 256 + config.model.iou_thresh = 0.9 + config.model.roi_matching_threshold = (0.6, 0.7, 0.8) + config.model.roi_nms_threshold = 0.7 + + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.b1 = 0.9 + config.optimizer.b2 = 0.999 + config.optimizer.weight_decay = 0.1 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.9 + config.optimizer.num_layers = 32 + config.optimizer.decay_layer_prefix = 'backbone/net/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + + # learning rate and training schedule + config.num_training_steps = 184375 * 1 // 4 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = [163889 * 1 // 4, 177546 * 1 // 4] + config.lr_configs.decay_factors = [0.1, 0.01] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 0.00005 + + # Pretrained_backbone. + train config centernet2_O365_ViTDetH_LSJ_75e or download at + https://storage.googleapis.com/scenic-bucket/centernet/ + centernet2_O365_ViTDetH_LSJ_75e/checkpoint + config.weights = '/path/to/centernet2_O365_ViTDetH_LSJ_75e/' + config.skip_wrong_shape = True + config.checkpoint_steps = 500 + config.log_eval_steps = 5000 + + # Training. + config.batch_size = 64 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 20 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/baselines/centernet/configs/centernet2_ViTDetH_LSJ_75e.py b/scenic/projects/baselines/centernet/configs/centernet2_ViTDetH_LSJ_75e.py new file mode 100644 index 0000000000000000000000000000000000000000..85ae16007849e42a45629347b5fa900186818066 --- /dev/null +++ b/scenic/projects/baselines/centernet/configs/centernet2_ViTDetH_LSJ_75e.py @@ -0,0 +1,114 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for COCO detection using CenterNet. + +""" + +import ml_collections + + +def get_config(): + """get config.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'centernet2_ViTDetH_LSJ_75e' + + # Dataset. + config.dataset_name = 'coco_centernet_detection' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 10_000 + config.dataset_configs.max_boxes = 100 + config.dataset_configs.scale_range = (0.1, 2.0) + config.dataset_configs.crop_size = 1024 + config.dataset_configs.size_divisibility = 32 + config.dataset_configs.remove_crowd = True + config.data_dtype_str = 'float32' + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'centernet2' + config.model.backbone_name = 'vitdet' + config.model.num_classes = -1 + config.model.strides = (8, 16, 32, 64, 128) + config.model.pixel_mean = (123.675, 116.28, 103.53) + config.model.pixel_std = (58.395, 57.12, 57.375) + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.size = 'H' + config.model.backbone_args.embed_dim = 1280 + config.model.backbone_args.depth = 32 + config.model.backbone_args.num_heads = 16 + config.model.backbone_args.drop_path_rate = 0.5 + config.model.backbone_args.window_block_indexes = ( + list(range(0, 7)) + list(range(8, 15)) + list(range(16, 23)) + list(range(24, 31)) + ) + config.model.freeze_model_state = False + + # CenterNet2 parameters + config.model.hm_weight = 0.5 + config.model.reg_weight = 1.0 + config.model.score_thresh = 0.05 + config.model.pre_nms_topk_train = 2000 + config.model.post_nms_topk_train = 1000 + config.model.pre_nms_topk_test = 1000 + config.model.post_nms_topk_test = 256 + config.model.iou_thresh = 0.9 + config.model.roi_matching_threshold = (0.6, 0.7, 0.8) + config.model.roi_nms_threshold = 0.7 + + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.b1 = 0.9 + config.optimizer.b2 = 0.999 + config.optimizer.weight_decay = 0.1 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.9 + config.optimizer.num_layers = 32 + config.optimizer.decay_layer_prefix = 'backbone/net/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + + # learning rate and training schedule + config.num_training_steps = 184375 * 3 // 4 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = [163889 * 3 // 4, 177546 * 3 // 4] + config.lr_configs.decay_factors = [0.1, 0.01] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 0.0001 + + # Pretrained_backbone. + config.weights = '/path/to/mae_pretrain_vit_huge_p14to16/' + config.load_prefix = 'backbone/net/' + config.skip_wrong_shape = True + config.checkpoint_steps = 500 + config.log_eval_steps = 5000 + + # Training. + config.batch_size = 64 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 20 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config diff --git a/scenic/projects/baselines/centernet/configs/centernet2_ViTDetL_LSJ_100e.py b/scenic/projects/baselines/centernet/configs/centernet2_ViTDetL_LSJ_100e.py new file mode 100644 index 0000000000000000000000000000000000000000..23e42bccf845fec08738276567bcbfdd0322e211 --- /dev/null +++ b/scenic/projects/baselines/centernet/configs/centernet2_ViTDetL_LSJ_100e.py @@ -0,0 +1,113 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for COCO detection using CenterNet. + +""" + +import ml_collections + + +def get_config(): + """get config.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'centernet2_ViTDetL_LSJ_100e' + + # Dataset. + config.dataset_name = 'coco_centernet_detection' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 10_000 + config.dataset_configs.max_boxes = 100 + config.dataset_configs.scale_range = (0.1, 2.0) + config.dataset_configs.crop_size = 1024 + config.dataset_configs.size_divisibility = 32 + config.dataset_configs.remove_crowd = True + config.data_dtype_str = 'float32' + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'centernet2' + config.model.backbone_name = 'vitdet' + config.model.num_classes = -1 + config.model.strides = (8, 16, 32, 64, 128) + config.model.pixel_mean = (123.675, 116.28, 103.53) + config.model.pixel_std = (58.395, 57.12, 57.375) + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.size = 'L' + config.model.backbone_args.embed_dim = 1024 + config.model.backbone_args.depth = 24 + config.model.backbone_args.num_heads = 16 + config.model.backbone_args.drop_path_rate = 0.4 + config.model.backbone_args.window_block_indexes = ( + list(range(0, 5)) + list(range(6, 11)) + list(range(12, 17)) + list(range(18, 23)) + ) + config.model.freeze_model_state = False + + # CenterNet2 parameters + config.model.hm_weight = 0.5 + config.model.reg_weight = 1.0 + config.model.score_thresh = 0.05 + config.model.pre_nms_topk_train = 2000 + config.model.post_nms_topk_train = 1000 + config.model.pre_nms_topk_test = 1000 + config.model.post_nms_topk_test = 256 + config.model.iou_thresh = 0.9 + config.model.roi_matching_threshold = (0.6, 0.7, 0.8) + config.model.roi_nms_threshold = 0.7 + + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.b1 = 0.9 + config.optimizer.b2 = 0.999 + config.optimizer.weight_decay = 0.1 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.8 + config.optimizer.num_layers = 24 + config.optimizer.decay_layer_prefix = 'backbone/net/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + + # learning rate and training schedule + config.num_training_steps = 184375 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = [163889, 177546] + config.lr_configs.decay_factors = [0.1, 0.01] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 0.0001 + + # Pretrained_backbone. + config.weights = '/path/to/mae_pretrain_vit_large/' + config.load_prefix = 'backbone/net/' + config.checkpoint_steps = 500 + config.log_eval_steps = 5000 + + # Training. + config.batch_size = 64 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 20 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config diff --git a/scenic/projects/baselines/centernet/configs/centernet_ViTDetB_LSJ_4x.py b/scenic/projects/baselines/centernet/configs/centernet_ViTDetB_LSJ_4x.py new file mode 100644 index 0000000000000000000000000000000000000000..da4a0c1f466d654d0e0df87785aafeb081af9817 --- /dev/null +++ b/scenic/projects/baselines/centernet/configs/centernet_ViTDetB_LSJ_4x.py @@ -0,0 +1,99 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for COCO detection using CenterNet. + +""" +# pylint: enable=line-too-long + +import ml_collections + + +def get_config(): + """get config.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'centernet_ViTDetB_LSJ_4x' + + # Dataset. + config.dataset_name = 'coco_centernet_detection' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 10_000 + config.dataset_configs.max_boxes = 100 + config.dataset_configs.scale_range = (0.1, 2.0) + config.dataset_configs.crop_size = 1024 + config.dataset_configs.size_divisibility = 32 + config.dataset_configs.remove_crowd = True + config.data_dtype_str = 'float32' + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'centernet' + config.model.backbone_name = 'vitdet' + config.model.num_classes = 80 + config.model.strides = (8, 16, 32, 64, 128) + config.model.pixel_mean = (103.530, 116.280, 123.675) + config.model.pixel_std = (57.375, 57.120, 58.395) # For most other models + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.drop_path_rate = 0.1 + config.model.freeze_model_state = False + + # Evaluation parameters + config.model.score_thresh = 0.05 + config.model.pre_nms_topk = 1000 + config.model.post_nms_topk = 100 + config.model.iou_thresh = 0.6 # Note: CenterNet uses 0.6 + + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.05 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.7 + config.optimizer.num_layers = 12 + config.optimizer.decay_layer_prefix = 'backbone/net/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + + # learning rate and training schedule + config.num_training_steps = 90000 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = [80000, 87500] + config.lr_configs.decay_factors = [0.1, 0.01] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 0.0001 + + # Pretrained_backbone. + config.weights = '/path/to/mae_pretrain_vit_base/' + config.load_prefix = 'backbone/net/' + config.checkpoint_steps = 500 + config.log_eval_steps = 5000 + + # Training. + config.batch_size = 64 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 20 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config diff --git a/scenic/projects/baselines/centernet/configs/centernet_ViTDetB_S4_LSJ_4x.py b/scenic/projects/baselines/centernet/configs/centernet_ViTDetB_S4_LSJ_4x.py new file mode 100644 index 0000000000000000000000000000000000000000..619404621d814832624a1c0f36b70cf935eff083 --- /dev/null +++ b/scenic/projects/baselines/centernet/configs/centernet_ViTDetB_S4_LSJ_4x.py @@ -0,0 +1,105 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for COCO detection using CenterNet. + +""" +# pylint: enable=line-too-long + +import ml_collections + + +def get_config(): + """get config.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'centernet_ViTDetB_S4_LSJ_4x' + + # Dataset. + config.dataset_name = 'coco_centernet_detection' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 10_000 + config.dataset_configs.max_boxes = 100 + config.dataset_configs.scale_range = (0.1, 2.0) + config.dataset_configs.crop_size = 1024 + config.dataset_configs.size_divisibility = 32 + config.dataset_configs.remove_crowd = True + config.data_dtype_str = 'float32' + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'centernet' + config.model.backbone_name = 'vitdet' + config.model.num_classes = 80 + + config.model.strides = (4,) + config.model.fpn_range = ((0, 1000000),) + config.model.vitdet_num_top_blocks = 0 + config.model.vitdet_scale_factors = (4.,) + + config.model.pixel_mean = (103.530, 116.280, 123.675) + config.model.pixel_std = (57.375, 57.120, 58.395) # For most other models + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.drop_path_rate = 0.1 + config.model.backbone_args.img_size = 1024 + + # Evaluation parameters + config.model.score_thresh = 0.05 + config.model.pre_nms_topk = 1000 + config.model.post_nms_topk = 100 + config.model.iou_thresh = 0.6 # Note: CenterNet uses 0.6 + + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.05 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.7 + config.optimizer.num_layers = 12 + config.optimizer.decay_layer_prefix = 'backbone/net/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + + # learning rate and training schedule + config.num_training_steps = 90000 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = [80000, 87500] + config.lr_configs.decay_factors = [0.1, 0.01] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 0.0001 + + # Pretrained_backbone. + config.weights = '/path/to/mae_pretrain_vit_base/' + config.load_prefix = 'backbone/net/' + config.skip_wrong_shape = True + config.checkpoint_steps = 500 + config.log_eval_steps = 5000 + + # Training. + config.batch_size = 64 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 20 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config diff --git a/scenic/projects/baselines/centernet/evaluate.py b/scenic/projects/baselines/centernet/evaluate.py new file mode 100644 index 0000000000000000000000000000000000000000..e5e0da27238b8b80d1bbe474fe39ad429ff9f8a8 --- /dev/null +++ b/scenic/projects/baselines/centernet/evaluate.py @@ -0,0 +1,234 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Evaluation script for the CenterNet. + +This file is modified from scenic DETR code at +https://github.com/google-research/scenic/blob/main/scenic/projects/baselines/ +detr/trainer.py +""" + +import functools +import time +from typing import Any + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +import flax +from flax import jax_utils +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.projects.baselines.centernet import evaluators +from scenic.projects.baselines.centernet import train_utils as centernet_train_utils +from scenic.train_lib import train_utils + + +def eval_step( + train_state, batch, *, + flax_model, postprocess=False, debug=False): + """Runs a single step of inference.""" + variables = { + 'params': train_state.params, + **train_state.model_state + } + predictions = flax_model.apply( + variables, + batch['inputs'], + preprocess=True, + postprocess=postprocess, + padding_mask=batch['padding_mask'], + train=False, + mutable=False, + debug=debug) + # metrics (losses, etc.) are disabled for testing, as the model directly + # return post-processed outputs. + metrics = {} + targets = {'label': batch['label'], 'batch_mask': batch['batch_mask']} + predictions = jax.lax.all_gather(predictions, 'batch') + targets = jax.lax.all_gather(targets, 'batch') + return targets, predictions, metrics + + +def inference_on_dataset( + flax_model: Any, + train_state: train_utils.TrainState, + dataset: dataset_utils.Dataset, + eval_batch_size: int = 1, + is_host: bool = False, + save_dir: str = '', + config: ml_collections.ConfigDict = ml_collections.ConfigDict(), + ) -> Any: + """The main evaluation loop. Run evaluation on the whole validation set. + + Args: + flax_model: Flax model (an instance of nn.Module). + train_state: train_state that contains the model parameters. + dataset: The dataset that has valid_iter and meta_data. + eval_batch_size: integer. Batch size per-device in evaluation. + is_host: bool: whether its the host machine. During multi-machine training, + we only hold the evaluating data in one of the machines. The machine with + `jax.process_index() == 0` sets `is_host` to True and will gather data + from other machines and do the evaluation. Other machines set `is_host` + as False. + save_dir: string: where to save the json prediction. + config: config dict. + Returns: + evaluation results. + """ + annotations_loc = config.get('dataset_configs', {}).get( + 'test_annotation_path', None) + eval_class_agnostic = config.get('eval_class_agnostic', False) + eval_step_multiplier = config.get('eval_step_multiplier', 1.3) + debug = config.get('debug_eval', False) + global_metrics_evaluator = None # Only run eval on the is_host node. + if is_host: + global_metrics_evaluator = evaluators.DetectionEvaluator( + 'lvis' if annotations_loc and ('lvis' in annotations_loc) else 'coco', + annotations_loc=annotations_loc) + global_metrics_evaluator.clear() + + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=flax_model, + postprocess=True, + debug=debug, + ), + axis_name='batch', donate_argnums=(1,), + ) + + eval_metrics = [] + total_eval_steps = int(np.ceil(eval_step_multiplier * dataset.meta_data[ + 'num_eval_examples'] / eval_batch_size)) + for eval_step_i in range(total_eval_steps): + if eval_step_i % 100 == 0: + logging.info('Running eval step %d', eval_step_i) + eval_batch = next(dataset.valid_iter) + + eval_batch_all_hosts, predictions_all_hosts, metrics = eval_step_pmapped( + train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(metrics)) + + if global_metrics_evaluator is not None: + eval_batch_all_hosts = jax_utils.unreplicate(eval_batch_all_hosts) + predictions_all_hosts = jax_utils.unreplicate( + predictions_all_hosts) + + # Collect preds and labels to be sent for computing global metrics. + labels = centernet_train_utils.split_batch_and_fetch_to_host( + eval_batch_all_hosts['label'], eval_batch_all_hosts['batch_mask']) + labels = jax.tree_util.tree_map(np.asarray, labels) + + # concate per-device batch + predictions_all_hosts = [ + jnp.concatenate( + [predictions_all_hosts[b][i][:, None] for b in range( + len(predictions_all_hosts))], axis=1) for i in range(3)] + results = centernet_train_utils.split_batch_and_fetch_to_host( + predictions_all_hosts, eval_batch_all_hosts['batch_mask']) + + for pred, label in zip(results, labels): + global_metrics_evaluator.add_example(prediction=pred, target=label) + + results = None + if global_metrics_evaluator is not None: + logging.info('Number of eval examples: %d', len(global_metrics_evaluator)) + if save_dir: + global_metrics_evaluator.write_pred_annotations_to_file( + save_dir, clear_annotations=False) + results = global_metrics_evaluator.compute_metrics( + clear_annotations=True, eval_class_agnostic=eval_class_agnostic) + return results, eval_metrics + + +def evaluate( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +): + """Prepares the items needed to run the evaluation. + + Args: + rng: JAX PRNGKey. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + """ + is_host = jax.process_index() == 0 + model_config = config + checkpoint_path = config.weights + model = model_cls(model_config, dataset.meta_data) + + checkpoint_data = checkpoints.restore_checkpoint(checkpoint_path, None) + params = checkpoint_data['params'] + model_state = {} + if 'batch_stats' in checkpoint_data: # For models converted from pytorch. + model_state['batch_stats'] = checkpoint_data['batch_stats'] + elif 'model_state' in checkpoint_data: # For saved scenic checkpoints. + if 'batch_stats' in checkpoint_data['model_state']: + model_state = flax.core.FrozenDict( + {'batch_stats': checkpoint_data['model_state']['batch_stats']}) + train_state = train_utils.TrainState( + global_step=0, + params=flax.core.FrozenDict(params), + model_state=flax.core.FrozenDict(model_state), + rng=rng) + train_state = jax_utils.replicate(train_state) + del checkpoint_data, params, model_state + + eval_batch_size = config.get('eval_batch_size', config.batch_size) + report_progress = periodic_actions.ReportProgress( + num_train_steps=0, writer=writer) + + hooks = [] + if is_host: + hooks.append(report_progress) + if config.get('xprof', True) and is_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + start_time = time.time() + with report_progress.timed('eval'): + eval_results, eval_metrics = inference_on_dataset( + model.flax_model, + train_state, + dataset, + eval_batch_size=eval_batch_size, + is_host=is_host, + save_dir=workdir, + config=config, + ) + train_utils.log_eval_summary( + step=0, + eval_metrics=eval_metrics, + extra_eval_summary=eval_results, + writer=writer, + ) + duration = time.time() - start_time + logging.info('Done with evaluation: %.4f sec.', duration) + writer.flush() + train_utils.barrier() diff --git a/scenic/projects/baselines/centernet/evaluators.py b/scenic/projects/baselines/centernet/evaluators.py new file mode 100644 index 0000000000000000000000000000000000000000..6786e0fa8fcdff7b3fcade877b185d02d57caff4 --- /dev/null +++ b/scenic/projects/baselines/centernet/evaluators.py @@ -0,0 +1,186 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Evaluator classes. + +This file is modified from the scenic coco evaluator at +https://github.com/google-research/scenic/blob/main/scenic/dataset_lib/ +coco_dataset/coco_eval.py +""" + +import json +import os +from typing import Any, Dict, Optional +from absl import logging + +import lvis +import numpy as np +from pycocotools import cocoeval +from scenic.dataset_lib.coco_dataset import coco_eval as coco_eval_wrapper +from tensorflow.io import gfile + + +class LvisEvaluator(coco_eval_wrapper.DetectionEvaluator): + """LVIS evaluator.""" + + def __init__(self, annotations_loc): + """Initializes a LvisEvaluator object.""" + self.annotations = [] + self.annotated_img_ids = [] + self.coco = lvis.LVIS(json.load(gfile.GFile(annotations_loc, 'r'))) + self.label_to_coco_id = { + i: cat['id'] for i, cat in enumerate(sorted( + self.coco.dataset['categories'], key=lambda x: x['id']))} + + +class DetectionEvaluator(object): + """Class that feeds model outputs to COCO evaluation api. + + The module is mostly the same as DetrGlobalEvaluator, except for CenterNet + outputs are in different format. + """ + + def __init__(self, dataset_name: str = 'coco', annotations_loc=None): + self.dataset_name = dataset_name + if self.dataset_name == 'lvis': + self.coco_evaluator = LvisEvaluator(annotations_loc=annotations_loc) + else: + assert self.dataset_name == 'coco', self.dataset_name + self.coco_evaluator = coco_eval_wrapper.DetectionEvaluator( + threshold=0.0, annotations_loc=annotations_loc) + self._included_image_ids = set() + self._num_examples_added = 0 + + def add_example(self, prediction: Any, target: Dict[str, np.ndarray]): + """Add a single example to the evaluator. + + Args: + prediction: Model prediction tuple of 3 arrays: boxes, scores, classes. + 'boxes' is in shape of `[num_objects, 4]` and 'pred_boxes', 'classes' + are botoh in shape of `[num_objects, num_classes]`. + Box coordinates are absolute values in the input image coordinates. + We need to scale them back to the original image coordinates using + information in target. + target: Target dictionary with keys 'orig_size', 'size', and 'image/id'. + """ + boxes, scores, classes = prediction + h, w = np.asarray(target['orig_size']) + input_h, input_w = np.asarray(target['size']) + scale_factor = np.array([w, h, w, h]) / np.array( + [input_w, input_h, input_w, input_h]) + boxes = boxes * scale_factor[np.newaxis, :] + boxes = np.maximum(boxes, 0) + boxes[:, [0, 2]] = np.minimum(boxes[:, [0, 2]], w) + boxes[:, [1, 3]] = np.minimum(boxes[:, [1, 3]], h) + boxes[:, 2] -= boxes[:, 0] + boxes[:, 3] -= boxes[:, 1] + boxes = np.asarray(boxes).tolist() + img_id = int(target['image/id']) + if img_id in self._included_image_ids: + logging.info('Duplicate image %s not being added again', img_id) + return + self._included_image_ids.add(img_id) + + # coco_eval.DetectionEvaluator.add_annotation is specific for DETR formats + # and not compatible here. + for bbox, label, score in zip(boxes, classes, scores): + single_classification = { + 'image_id': img_id, + 'category_id': self.coco_evaluator.label_to_coco_id[label], + 'bbox': bbox, + 'score': score, + } + self.coco_evaluator.annotations.append(single_classification) + self.coco_evaluator.annotated_img_ids.append(img_id) + self._num_examples_added += 1 + + def compute_metrics( + self, + clear_annotations: Optional[bool] = True, + eval_class_agnostic: bool = False) -> Dict[str, Any]: + """Computes the metrics for all added predictions.""" + if eval_class_agnostic: + default_id = self.coco_evaluator.coco.dataset['categories'][0]['id'] + for x in self.coco_evaluator.coco.dataset['annotations']: + x['category_id'] = default_id + if self.dataset_name == 'lvis': + lvis_dt = lvis.LVISResults( + self.coco_evaluator.coco, + self.coco_evaluator.annotations) + lvis_eval = lvis.LVISEval( + self.coco_evaluator.coco, lvis_dt, iou_type='bbox') + lvis_eval.evaluate() + lvis_eval.accumulate() + lvis_eval.summarize() + lvis_eval.print_results() + results_dict = lvis_eval.results + else: + coco_eval = cocoeval.COCOeval( + self.coco_evaluator.coco, + self.coco_evaluator.coco.loadRes( # pytype: disable=attribute-error + self.coco_evaluator.annotations), + 'bbox') + coco_eval.params.imgIds = self.coco_evaluator.annotated_img_ids + coco_eval.evaluate() + coco_eval.accumulate() + coco_eval.summarize() + results_dict = self.coco_evaluator.construct_result_dict(coco_eval.stats) + recall50 = coco_eval.eval['recall'] # ious x classes x areas x max_dets + recall50 = recall50[0, :, 0, -1] # iou=0.5, area=all, max_det=100 + recall50 = recall50[recall50 >= 0].mean() + results_dict['Recall50'] = recall50 + if clear_annotations: + self.coco_evaluator.clear_annotations() + return results_dict + + def write_pred_annotations_to_file(self, + path: str, + fname_app: Optional[str] = None, + clear_annotations: Optional[bool] = True): + """Writes predictions to file in JSON format. + + Args: + path: Path to write the prediction annotation JSON file. + fname_app: Optional string to append to the file name. + clear_annotations: Clear annotations after they are stored in a file. + """ + if not gfile.exists(path): + gfile.makedirs(path) + json_file_name = f"predictions{fname_app if fname_app else ''}.json" + json_file_path = os.path.join(path, json_file_name) + + def _convert_to_serializable(obj): + if isinstance(obj, np.ndarray): + return obj.tolist() + elif isinstance(obj, np.float32): + return float(obj) + else: + raise TypeError(f'Unserializable object {obj} of type {type(obj)}') + + with gfile.GFile(json_file_path, 'w') as f: + f.write( + json.dumps( + self.coco_evaluator.annotations, + default=_convert_to_serializable)) + logging.info('Predicted annotations are stored in %s.', json_file_path) + if clear_annotations: + self.coco_evaluator.clear_annotations() + + def __len__(self): + return self._num_examples_added + + def clear(self): + self.coco_evaluator.clear_annotations() + self._num_examples_added = 0 + self._included_image_ids = set() diff --git a/scenic/projects/baselines/centernet/input_pipeline.py b/scenic/projects/baselines/centernet/input_pipeline.py new file mode 100644 index 0000000000000000000000000000000000000000..3b983a93382193ba02a33ab34bd719050062e93e --- /dev/null +++ b/scenic/projects/baselines/centernet/input_pipeline.py @@ -0,0 +1,513 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the object detection. + +The file is modified from +https://github.com/google-research/scenic/blob/main/scenic/projects/baselines/ +detr/input_pipeline_detection.py +""" + +import functools +from typing import Optional +from absl import logging + +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections + +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib.coco_dataset import coco_utils +from scenic.projects.baselines.centernet import transforms +import tensorflow as tf +import tensorflow_datasets as tfds + +PRNGKey = jnp.ndarray + + +def make_resize_crop_transforms( + image_set, + scale_range=(0.1, 2.0), + crop_size=1024): + """Preprocessing and data-augmentation functions. + + Currently it only supports the default data augmentation in detectron2. + + Args: + image_set: 'train' or 'validation' + scale_range: list of integers. Sizes of the shorter edge. + crop_size: integer. Size of the longer edge. + Returns: + The data-augmentation functions. + """ + init_padding_mask = transforms.InitPaddingMask() + if image_set == 'train': + return transforms.Compose( + [transforms.RandomHorizontalFlip(), + transforms.RandomRatioResize(scale_range, crop_size), + transforms.FixedSizeCrop(crop_size), + init_padding_mask]) + elif image_set == 'validation': + return transforms.Compose( + [transforms.Resize(crop_size, max_size=crop_size), + init_padding_mask]) + else: + raise ValueError(f'Unknown image_set: {image_set}') + + +def decode_boxes(bbox, size): + """Convert yxyx [0, 1] normalized boxes to xyxy unnormalized format.""" + y0, x0, y1, x1 = tf.split(bbox, 4, axis=-1) + h = tf.cast(size[0], tf.float32) + w = tf.cast(size[1], tf.float32) + + y0 = tf.clip_by_value(y0 * h, 0.0, h) + x0 = tf.clip_by_value(x0 * w, 0.0, w) + y1 = tf.clip_by_value(y1 * h, 0.0, h) + x1 = tf.clip_by_value(x1 * w, 0.0, w) + + bbox = tf.concat([x0, y0, x1, y1], axis=-1) + return bbox + + +# From tfrecord official: https://www.tensorflow.org/datasets/catalog/coco +coco_feature_description = { + 'image/encoded': tf.io.FixedLenFeature([], tf.string), + 'image/id': tf.io.FixedLenFeature([], tf.int64), + 'objects/bbox': tf.io.VarLenFeature(dtype=tf.float32), + 'objects/area': tf.io.VarLenFeature(dtype=tf.int64), + 'objects/is_crowd': tf.io.VarLenFeature(dtype=tf.int64), + 'objects/id': tf.io.VarLenFeature(dtype=tf.int64), + 'objects/label': tf.io.VarLenFeature(dtype=tf.int64), + 'objects/segmentation': tf.io.VarLenFeature(tf.string), +} + + + + +def coco_decode_example(data, with_masks=False): + """Convert custom tfrecord into tfds builder format.""" + example = {} + example['image'] = tf.io.decode_jpeg(data['image/encoded'], channels=3) + example['image/id'] = data['image/id'] + example['objects'] = {} + example['objects']['bbox'] = tf.reshape( + tf.sparse.to_dense(data['objects/bbox']), [-1, 4]) + example['objects']['id'] = tf.sparse.to_dense(data['objects/id']) + example['objects']['area'] = tf.sparse.to_dense(data['objects/area']) + example['objects']['is_crowd'] = tf.cast( + tf.sparse.to_dense(data['objects/is_crowd']), tf.bool) + example['objects']['label'] = tf.sparse.to_dense(data['objects/label']) + num_objs = tf.shape(example['objects']['id'])[0] + if with_masks: + segmentation = tf.sparse.to_dense(data['objects/segmentation']) + tf.debugging.assert_equal(num_objs, tf.shape(segmentation)[0]) + height, width, _ = tf.unstack(tf.shape(example['image'])) + if num_objs > 0: + segmentation = tf.map_fn( + lambda x: tf.image.decode_jpeg(x, channels=1), + segmentation, back_prop=False, dtype=tf.uint8) + else: + segmentation = tf.zeros((0,), dtype=tf.uint8) + example['objects']['segmentation'] = tf.reshape( + segmentation, [num_objs, height, width, 1]) + return example + + +def decode_sharded_names(paths, end=''): + """Convert sharded file names into a list.""" + ret = [] + paths = paths.split(',') + for name in paths: + if '@' in name: + idx = name.find('@') + if end: + num_shards = int(name[idx + 1:-len(end)]) + else: + num_shards = int(name[idx + 1:]) + names = ['{}-{:05d}-of-{:05d}{}'.format( + name[:idx], i, num_shards, end) for i in range(num_shards)] + ret.extend(names) + else: + ret.append(name) + return ret + + +def decode_coco_detection_example( + example, max_boxes=100, model_input_format='RGB', + remove_crowd=False, class_id_base=0, with_masks=False): + """Given an instance and raw labels, creates pair. + + Modified: not add 1 to class label + + Decoding includes. + 1. Convert RGB to BGR if the model uses BGR format. + 2. Convert boxes from yxyx [0-1] to xyxy un-normalized. + 3. Shuffling dictionary keys to be consistent with the rest of the code. + + Args: + example: dict; Input image and raw labels. + max_boxes: int; max number of objects to load. + model_input_format: string "RGB" or "BGR". The input format from tfds is + always RGB. Reverse the pixel order here if the model needs BGR. + remove_crowd: remove objects labeled as 'is_crowd' + class_id_base: int; make sure the output class id is 0-based. + with_masks: bool; + Returns: + A dictionary of {'inputs': input image, 'labels': task label}. + """ + image = tf.cast(example['image'], tf.float32) + if model_input_format == 'BGR': + image = image[:, :, ::-1] # RGB to BGR + + boxes = decode_boxes(example['objects']['bbox'], tf.shape(image)[0:2]) + target = { + 'area': example['objects']['area'], + 'boxes': boxes, + 'objects/id': example['objects']['id'], + 'is_crowd': example['objects']['is_crowd'], + 'labels': example['objects']['label'] - class_id_base, + } + if with_masks: + target['masks'] = example['objects']['segmentation'] + + if remove_crowd: + keep = tf.where( + tf.logical_and( + tf.logical_not(example['objects']['is_crowd']), + tf.logical_and( + boxes[:, 2] > boxes[:, 0], boxes[:, 3] > boxes[:, 1]) + ) + )[:, 0] + else: + # Filters objects to exclude degenerate boxes. + keep = tf.where(tf.logical_and( + boxes[:, 2] > boxes[:, 0], boxes[:, 3] > boxes[:, 1]))[:, 0] + target_kept = {k: tf.gather(v, keep)[:max_boxes] for k, v in target.items()} + + target_kept['orig_size'] = tf.cast(tf.shape(image)[0:2], dtype=tf.int32) + target_kept['size'] = tf.identity(target_kept['orig_size']) + target_kept['image/id'] = example['image/id'] + + return { + 'inputs': image, + 'label': target_kept, + } + + +def coco_load_split_from_tfds( + batch_size, + train, + preprocess_fn, + decode_fn, + dataset_path='coco/2017', + cache=False, + max_size=1333, + max_boxes=100, + remove_crowd=True, + with_masks=False, + shuffle_buffer_size=1000, + shuffle_seed=0): + """Loads a split from the COCO dataset using TensorFlow Datasets. + + Args: + batch_size: int; The batch size returned by the data pipeline. + train: bool; Whether to load the train or evaluation split. + preprocess_fn: function; A function that given an example, train flag, + and dtype returns the preprocessed the example. Note that the + preprocessing is done BEFORE caching to re-use them. + decode_fn: A function that given an example decodes the image, converts + it to float32, mean-subtracts it, and pulls out the relevant parts from + the tfds features. + dataset_path: string; path of the dataset; by default load from tfds + cache: bool; whether to use the ds.cache or nor. + max_size: int; Maximum image size. + max_boxes: int; Maximum number of boxes. + remove_crowd: bool; Remove objects labeled with 'is_crowd' + with_masks: bool; If include instance segmentation masks. + shuffle_buffer_size: int; Size of the shuffle buffer. + shuffle_seed: int; Seed for shuffling the training data. + + Returns: + A `tf.data.Dataset`, and dataset info. + """ + split = 'train' if train else 'validation' + + if dataset_path == 'coco/2017': + builder = tfds.builder('coco/2017') + # Each host is responsible for a fixed subset of data. + data_range = tfds.even_splits( + split, jax.process_count())[jax.process_index()] + ds = builder.as_dataset(split=data_range, shuffle_files=False) + ds_info = { + 'num_classes': builder.info.features['objects']['label'].num_classes} + class_id_base = 0 + else: + feature_description = coco_feature_description + end = '' + decode_example_fn = lambda x: coco_decode_example(x, with_masks) + class_id_base = 0 + ds = tf.data.TFRecordDataset(decode_sharded_names(dataset_path, end=end)) + # Split datasets into machines. Otherwise multi-machine evaluation takes the + # same images. + ds = ds.shard(jax.process_count(), jax.process_index()) + ds = ds.map( + lambda x: tf.io.parse_single_example(x, feature_description)) + ds = ds.map(decode_example_fn) + ds_info = {} + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + ds = ds.with_options(options) + ds = ds.map( + lambda x: decode_fn( # pylint: disable=g-long-lambda + x, remove_crowd=train and remove_crowd, class_id_base=class_id_base, + with_masks=with_masks), + num_parallel_calls=tf.data.experimental.AUTOTUNE) + if cache: + ds = ds.cache() + + padded_shapes = { + 'inputs': [max_size, max_size, 3], + 'padding_mask': [max_size, max_size], + 'label': { + 'area': [max_boxes,], + 'boxes': [max_boxes, 4], + 'objects/id': [max_boxes,], + 'is_crowd': [max_boxes,], + 'labels': [max_boxes,], + 'image/id': [], + 'orig_size': [2,], + 'size': [2,] + }, + } + + if with_masks: + padded_shapes['label']['masks'] = [max_boxes, max_size, max_size, 1] + + if train: + # First repeat then batch. + ds = ds.shuffle(shuffle_buffer_size, seed=shuffle_seed) + ds = ds.repeat() + # Augmentation should be done after repeat for true randomness. + ds = ds.map(preprocess_fn, num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.padded_batch(batch_size, padded_shapes=padded_shapes, + drop_remainder=True) + + else: + ds = ds.map(preprocess_fn, num_parallel_calls=tf.data.experimental.AUTOTUNE) + # First batch then repeat. + ds = ds.padded_batch(batch_size, padded_shapes=padded_shapes, + drop_remainder=False) + ds = ds.repeat() + + ds = ds.prefetch(tf.data.experimental.AUTOTUNE) + return ds, ds_info + + +def dataset_builder(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for COCO object detection 2017 train & validation set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image. Only 'float32' is currently supported. + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. Must be empty. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + assert dtype_str == 'float32', ( + f'coco_detr_dataset invoked with unsupported dtype_str: {dtype_str}') + del dtype_str + + dataset_configs = dataset_configs or {} + + scale_range = dataset_configs.get('scale_range', (0.1, 2.0)) + crop_size = dataset_configs.get('crop_size', 1024) + max_boxes = dataset_configs.get('max_boxes', 100) + size_divisibility = dataset_configs.get('size_divisibility', 1) + model_input_format = dataset_configs.get('model_input_format', 'RGB') + remove_crowd = dataset_configs.get('remove_crowd', True) + train_data_path = dataset_configs.get('train_data_path', 'coco/2017') + test_data_path = dataset_configs.get('test_data_path', 'coco/2017') + with_masks = dataset_configs.get('with_masks', False) + + assert model_input_format in ['RGB', 'BGR'], model_input_format + crop_size = ((crop_size - 1) // size_divisibility + 1) * size_divisibility + + train_preprocess_fn = make_resize_crop_transforms( + 'train', scale_range=scale_range, crop_size=crop_size) + eval_preprocess_fn = make_resize_crop_transforms( + 'validation', scale_range=(1.0, 1.0), crop_size=crop_size) + + decode_fn = functools.partial( + decode_coco_detection_example, max_boxes=max_boxes, + model_input_format=model_input_format) + + train_ds, train_ds_info = coco_load_split_from_tfds( + batch_size, train=True, + preprocess_fn=train_preprocess_fn, + decode_fn=decode_fn, + dataset_path=train_data_path, + shuffle_buffer_size=dataset_configs.get('shuffle_buffer_size', 1000), + max_size=crop_size, + max_boxes=max_boxes, + remove_crowd=remove_crowd, + with_masks=with_masks, + shuffle_seed=shuffle_seed) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + eval_ds, _ = coco_load_split_from_tfds( + eval_batch_size, + train=False, + preprocess_fn=eval_preprocess_fn, + max_size=crop_size, + max_boxes=max_boxes, + decode_fn=decode_fn, + with_masks=with_masks, + dataset_path=test_data_path) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + if dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + train_iter = jax_utils.prefetch_to_device( + train_iter, dataset_configs.get('prefetch_to_device')) + + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + eval_iter = map(shard_batches, eval_iter) + + num_classes = dataset_configs.get( + 'num_classes', train_ds_info.get('num_classes', 1)) + num_train_examples = dataset_configs.get( + 'num_train_examples', + dataset_utils.get_num_examples('coco/2017', 'train')) + num_eval_examples = dataset_configs.get( + 'num_eval_examples', + dataset_utils.get_num_examples('coco/2017', 'validation')) + label_to_name = coco_utils.get_label_map('coco/2017_panoptic') + + meta_data = { + 'num_classes': num_classes, + 'input_shape': [-1, crop_size, crop_size, 3], + 'num_train_examples': num_train_examples, + 'num_eval_examples': num_eval_examples, + 'input_dtype': jnp.float32, + 'target_is_onehot': False, + 'label_to_name': label_to_name, + } + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) + + +def get_dataset( + config: ml_collections.ConfigDict, + data_rng: PRNGKey, + *, + dataset_service_address: Optional[str] = None, + dataset_name: Optional[str] = None, + dataset_configs: Optional[ml_collections.ConfigDict] = None +) -> dataset_utils.Dataset: + """Creates dataset. + + By default, the values in the config file are used. + However, if the optional `dataset_name` and `dataset_configs` are passed, + those are used instead. + + Args: + config: The configuration of the experiment. + data_rng: Random number generator key to use for the dataset. + dataset_service_address: Used when using the tf.data.experimental.service + dataset_name: Name of dataset to load, if not reading from the config. + dataset_configs: Configuration of the dataset, if not reading directly from + the config. + + Returns: + A dataset_utils.Dataset object. + """ + device_count = jax.device_count() + logging.info('device_count: %d', device_count) + logging.info('num_hosts : %d', jax.process_count()) + logging.info('host_id : %d', jax.process_index()) + + del dataset_name + + batch_size = config.batch_size + if batch_size % device_count > 0: + raise ValueError(f'Batch size ({batch_size}) must be divisible by the ' + f'number of devices ({device_count})') + + eval_batch_size = config.get('eval_batch_size', batch_size) + if eval_batch_size % device_count > 0: + raise ValueError(f'Eval batch size ({eval_batch_size}) must be divisible ' + f'by the number of devices ({device_count})') + + local_batch_size = batch_size // jax.process_count() + eval_local_batch_size = eval_batch_size // jax.process_count() + device_batch_size = batch_size // device_count + logging.info('local_batch_size : %d', local_batch_size) + logging.info('device_batch_size : %d', device_batch_size) + + shuffle_seed = config.get('shuffle_seed', None) + if dataset_service_address and shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you want ' + 'to run with dataset service.') + + dataset_configs = dataset_configs or config.get('dataset_configs') + dataset = dataset_builder( + batch_size=local_batch_size, + eval_batch_size=eval_local_batch_size, + num_shards=jax.local_device_count(), + dtype_str=config.data_dtype_str, + rng=data_rng, + shuffle_seed=shuffle_seed, + dataset_configs=dataset_configs, + dataset_service_address=dataset_service_address) + + return dataset diff --git a/scenic/projects/baselines/centernet/main.py b/scenic/projects/baselines/centernet/main.py new file mode 100644 index 0000000000000000000000000000000000000000..e5409de672dad22addf167f703b5f388bf5f2015 --- /dev/null +++ b/scenic/projects/baselines/centernet/main.py @@ -0,0 +1,71 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for CenterNet.""" + +from typing import Any + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.baselines.centernet import evaluate +from scenic.projects.baselines.centernet import input_pipeline +from scenic.projects.baselines.centernet import trainer +from scenic.projects.baselines.centernet.modeling import centernet +from scenic.projects.baselines.centernet.modeling import centernet2 + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name: str) -> Any: + """Returns model class given its name.""" + if model_name == 'centernet': + return centernet.CenterNetModel + elif model_name == 'centernet2': + return centernet2.CenterNet2Model + else: + raise ValueError(f'Unrecognized model: {model_name}.') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the CenterNet project.""" + model_cls = get_model_cls(config.model.model_name) + data_rng, rng = jax.random.split(rng) + dataset = input_pipeline.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + eval_only = config.get('eval_only', False) + if eval_only: + evaluate.evaluate( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + else: + trainer.train_and_evaluate( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/baselines/centernet/modeling/__init__.py b/scenic/projects/baselines/centernet/modeling/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/centernet/modeling/box_head.py b/scenic/projects/baselines/centernet/modeling/box_head.py new file mode 100644 index 0000000000000000000000000000000000000000..da011a381d399b616474625f1ac4e59a4573939b --- /dev/null +++ b/scenic/projects/baselines/centernet/modeling/box_head.py @@ -0,0 +1,162 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""The ROI box head in Faster R-CNN. + +Modified from +https://github.com/google-research/google-research/blob/master/fvlm/ +modeling/heads.py +""" +from typing import Optional +import einops +from flax import linen as nn +import jax +from jax.nn import initializers +import jax.numpy as jnp + + +class ROIBoxHead(nn.Module): + """A standard conv + fc + classification/regression box head in Faster R-CNN. + + Attributes: + num_classes: Number of classes (not including additional "background" + class). + conv_dims: Number of filters in each of the conv layer. + conv_norm: Either None or "BN", "LN", the norm layer after each conv. + fc_dims: Number of filters in each of the fc layer. + class_box_regression: if do class specific box regression + use_zeroshot_cls: if using open-vocabulary classifier + zs_weight_dim: feature dimension of open-vocabulary classifier + zs_weight: array in shape (zs_weight_dim, num_classes + 1) + bias_init_prob: if init bias prob + """ + num_classes: int + conv_dims: tuple[int, ...] = (256, 256, 256, 256) + conv_norm: Optional[str] = None + fc_dims: tuple[int, ...] = (1024,) + class_box_regression: bool = True + add_box_pred_layers: bool = False + use_zeroshot_cls: bool = False + zs_weight_dim: int = 512 + zs_weight: Optional[jnp.float32] = None + norm_temp: float = 50.0 + bias_init_prob: Optional[float] = None + + def __call__(self, roi_features: jnp.ndarray, *, + training: bool) -> tuple[jnp.ndarray, jnp.ndarray]: + """The forward logic. + + Args: + roi_features: Per-roi feature of shape (Batch, T, h, w, C), where T is the + number of RoIs, h and w are shape of the feature. + training: Training mode. + + Returns: + class_outputs of shape (Batch, T, cls + 1) + box_outputs of shape (Batch, T, cls + 1, 4) or (Batch, T, 4) + """ + batch_size = roi_features.shape[0] + # TODO(yuxinw): This reshape is not friendly to pjit. Use nn.vmap. + roi_features = einops.rearrange(roi_features, 'B T H W C -> (B T) H W C') + class_outputs, box_outputs = self.predict(roi_features, training=training) + + class_outputs = einops.rearrange( + class_outputs, '(B T) C -> B T C', B=batch_size) + if self.class_box_regression: + box_outputs = einops.rearrange( + box_outputs, '(B T) (C b) -> B T C b', B=batch_size, b=4) + else: + box_outputs = einops.rearrange( + box_outputs, '(B T) (b) -> B T b', B=batch_size, b=4) + return class_outputs, box_outputs + + @nn.compact + def predict(self, roi_features: jnp.ndarray, *, + training: bool) -> tuple[jnp.ndarray, jnp.ndarray]: + """Runs the head and returns raw layer outputs.""" + del training + use_bias = self.conv_norm is None + x = roi_features + for dim in self.conv_dims: + x = nn.Conv( + features=dim, + kernel_size=(3, 3), + kernel_init=initializers.variance_scaling( + scale=2, mode='fan_out', distribution='normal'), + use_bias=use_bias, + bias_init=initializers.zeros, + padding='same')( + x) + if self.conv_norm is not None: + raise NotImplementedError + x = jax.nn.relu(x) + + x = einops.rearrange(x, 'N H W C -> N (H W C)') + for i, dim in enumerate(self.fc_dims): + x = nn.Dense( + features=dim, + kernel_init=initializers.variance_scaling( + 1, mode='fan_in', distribution='uniform'), + name=f'fc{i+1}')( + x) + x = jax.nn.relu(x) + + if self.add_box_pred_layers: + box_outputs = nn.Dense( + features=self.fc_dims[-1], + name='bbox_pred.0', + kernel_init=initializers.variance_scaling( + 1, mode='fan_in', distribution='uniform'), + bias_init=initializers.zeros, + )(x) + box_outputs = jax.nn.relu(box_outputs) + box_outputs = nn.Dense( + features=4, + name='bbox_pred.2', + kernel_init=initializers.normal(stddev=0.001), + bias_init=initializers.zeros, + )(box_outputs) + else: + box_outputs = nn.Dense( + features=( + self.num_classes + 1) * 4 if self.class_box_regression else 4, + name='bbox_pred', + kernel_init=initializers.normal(stddev=0.001), + bias_init=initializers.zeros, + )(x) + + if self.use_zeroshot_cls: + assert not self.class_box_regression + class_outputs = nn.Dense( + features=self.zs_weight_dim, + name='cls_score.linear', + kernel_init=initializers.normal(stddev=0.01), + bias_init=initializers.zeros, + )(x) + if self.zs_weight is not None: + class_outputs = class_outputs / ( + (class_outputs ** 2).sum(axis=0)[None, :] ** 0.5 + 1e-8) # l2 norm + class_outputs = self.norm_temp * jnp.dot(class_outputs, self.zs_weight) + else: + cls_bias_init = initializers.zeros + if self.bias_init_prob is not None: + bias = -jnp.log((1 - self.bias_init_prob) / self.bias_init_prob) + cls_bias_init = initializers.constant(bias, dtype=jnp.float32) + class_outputs = nn.Dense( + features=self.num_classes + 1, + name='cls_score', + kernel_init=initializers.normal(stddev=0.01), + bias_init=cls_bias_init, + )(x) + return class_outputs, box_outputs diff --git a/scenic/projects/baselines/centernet/modeling/centernet.py b/scenic/projects/baselines/centernet/modeling/centernet.py new file mode 100644 index 0000000000000000000000000000000000000000..982dd33a8bf3e339df96375285e936474755fd01 --- /dev/null +++ b/scenic/projects/baselines/centernet/modeling/centernet.py @@ -0,0 +1,543 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of CenterNet architecture.""" + +# pylint: disable=not-callable + +import dataclasses +from typing import Any, Dict, List, Optional, Tuple + +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models import base_model +from scenic.projects.baselines.centernet.modeling import centernet_head +from scenic.projects.baselines.centernet.modeling import centernet_utils +from scenic.projects.baselines.centernet.modeling import fpn +from scenic.projects.baselines.centernet.modeling import nms +from scenic.projects.baselines.centernet.modeling import vitdet + + +ArrayDict = Dict[str, jnp.ndarray] +MetricsDict = Dict[str, Tuple[jnp.ndarray, jnp.ndarray]] + +INF = centernet_utils.INF +# ImageNet mean and std from detectron2: +# https://github.com/facebookresearch/detectron2/blob/main/detectron2/config/ +# defaults.py#L42 +IMAGENET_PIXEL_MEAN = (103.530, 116.280, 123.675) +IMAGENET_PIXEL_STD = (57.375, 57.120, 58.395) + + +class CenterNetDetector(nn.Module): + """One-stage centernet detector. + + Attributes: + num_classes: Number of object classes. num_classes = 0 will merge the + classification feature layers and regression layers. This is + class-agnostic detection. This is used for proposal-only mode. + backbone_name: string of the backbone name. + score_thresh: output score threshold. + pre_nms_topk: extracting top K pixels and run NMS on it. A high value will + slow down inference. + strides: strides of all FPN levels. + dtype: Data type of the computation (default: float32). + """ + + num_classes: int + backbone_name: str = 'convnext' + score_thresh: float = 0.05 + pre_nms_topk: int = 1000 + post_nms_topk: int = 100 + iou_thresh: float = 0.5 + strides: Any = (8, 16, 32, 64, 128) + fpn_range: Any = ((0, 80), (64, 160), (128, 320), (256, 640), (512, 100000)) + head_norm: str = 'GN' + hm_min_overlap: float = 0.8 + min_radius: int = 4 + sigmoid_eps: float = 1e-4 + focal_alpha: float = 0.25 + focal_beta: float = 4. + focal_gamma: float = 2. + hm_weight: float = 1. + reg_weight: float = 2. + sqrt_score: bool = False + pixel_mean: Any = IMAGENET_PIXEL_MEAN + pixel_std: Any = IMAGENET_PIXEL_STD + sync_device_norm: bool = True + dtype: jnp.dtype = jnp.float32 + vitdet_scale_factors: Any = (2.0, 1.0, 0.5) + vitdet_num_top_blocks: int = 2 + backbone_args: ml_collections.ConfigDict = dataclasses.field( + default_factory=ml_collections.ConfigDict) + fpn_args: ml_collections.ConfigDict = dataclasses.field( + default_factory=ml_collections.ConfigDict) + + def setup(self): + if self.backbone_name == 'vitdet': + self.backbone = vitdet.SimpleFeaturePyramid( + backbone_args=self.backbone_args, + scale_factors=self.vitdet_scale_factors, + num_top_blocks=self.vitdet_num_top_blocks, + dtype=self.dtype, + name='backbone') + else: + self.backbone = fpn.FPN( + backbone_name=self.backbone_name, + in_features=['stage_2', 'stage_3', 'stage_4'], + backbone_args=self.backbone_args, + dtype=self.dtype, + name='backbone') + self.proposal_generator = centernet_head.CenterNetHead( + num_classes=self.num_classes, dtype=self.dtype, + num_levels=len(self.strides), + norm=self.head_norm, + name='proposal_generator') + + @nn.compact + def __call__( + self, + inputs: jnp.ndarray, + train: bool = False, + preprocess: bool = False, + postprocess: bool = False, + *, + padding_mask: Optional[jnp.ndarray] = None, + debug: bool = False, + ): + """Applies CenterNet model on the input. + + Args: + inputs: array of the preprocessed input images, in shape B x H x W x 3. + train: Whether it is training. + preprocess: If using the build-in preprocessing functions on inputs. + postprocess: If true, return post-processed boxes withe scores and + classes; If false, return raw network outputs from FPN: heatmaps and + regressions. + padding_mask: Binary matrix with 0 at padded image regions. + debug: Whether the debug mode is enabled. debug=True enables model + specific logging/storing some values using jax.host_callback. + + Returns: + If postprocess == False, return a dict of outputs. + That might be different across detection heads. For example, + for CenterNet, it will be: 'heatmaps' and `box_regs`. The value of the + dict should be list of arrays from different FPN levels, + each in shape B x H' x W' x C'. + If postprocess == True, return a list of tuples. Each tuple is + three arrays (boxes, scores, classes). boxes is in shape of + n x 4, scores and classes are both in shape n. + """ + if preprocess: + inputs = self.preprocess(inputs, padding_mask) + + backbone_features = self.backbone(inputs, train=train) + output = self.proposal_generator(backbone_features, train=train) + if postprocess: + output = self.inference(output) + return output + + def loss_function( + self, + outputs: ArrayDict, + batch: ArrayDict, + ): + """loss function of CenterNet. + + Args: + outputs: dict of 'heatmaps' and `box_regs`. Both are list of arrays from + different FPN levels, in shape L x [B, hl, wl, C']. L is the number + of FPN levels, hl, wl are the shape in FPN level l. + batch: dict that has 'inputs', 'batch_mask' and, 'label' (ground truth). + batch['label'] is a dict with the following keys and shape: + 'boxes': B x max_boxes x 4 + 'labels': B x max_boxes + Returns: + total_loss: Total loss weighted appropriately. + metrics: auxiliary metrics for debugging and visualization. + """ + # Generate ground truth. + # grids: # L x [hl*wl, 2] + # gt_heatmaps: B x m x C, where m = sum_l hl * wl, C is num of classes + # gt_regs: B x m x 4. + grids = centernet_utils.get_grid( + [(x.shape[1], x.shape[2]) for x in outputs['heatmaps']], self.strides) + gt_heatmaps, gt_regs = self.get_ground_truth( + batch['label']['boxes'], batch['label']['labels'], grids) + + # Convert output shape to match ground gruth: + # L x [B, hl, wl, C] --> B x m x C, where m = sum_l hl * wl. + heatmaps = centernet_utils.level_first_to_batch_first(outputs['heatmaps']) + box_regs = centernet_utils.level_first_to_batch_first(outputs['box_regs']) + + # Compute losses. + reg_loss, _, reg_norm = self.reg_loss(box_regs, gt_regs) + pos_loss, neg_loss, hm_norm = self.heatmap_focal_loss(heatmaps, gt_heatmaps) + total_loss = self.hm_weight * ( + pos_loss + neg_loss) + self.reg_weight * reg_loss + metrics = {'total_loss': total_loss, 'reg_loss': reg_loss, + 'pos_loss': pos_loss, 'neg_loss': neg_loss, + 'hm_norm': hm_norm, 'reg_norm': reg_norm} + return total_loss, metrics + + def heatmap_focal_loss(self, heatmaps, gt_heatmaps): + """Compute heatmap loss. + + Args: + heatmaps: a single array in shape B x m x C. m = sum_l hl * wl. B is + the batch size, C is the number of classes. + gt_heatmaps: a single array in shape B x m x C. Pixels with value 1. are + positive. All other pixels are negative. + Returns: + pos_loss: a scalar for the positive loss. + neg_loss: a scalar for the negative loss. + norm: a scalar, the normalization factor, which is the number of positive + pixels. This is for visualization/ debugging only. + """ + pred = jnp.clip( + nn.sigmoid(heatmaps), + self.sigmoid_eps, 1. - self.sigmoid_eps) # B x m x C + neg_w = jnp.power(1. - gt_heatmaps, self.focal_beta) # B x m x C + pos_w = (gt_heatmaps == 1.).astype(jnp.float32) # B x m x C + pos_loss = jnp.log(pred) * jnp.power(1 - pred, self.focal_gamma) * pos_w + neg_loss = jnp.log(1. - pred) * jnp.power(pred, self.focal_gamma) * neg_w + bs = pos_w.shape[0] + norm = jnp.maximum(pos_w.reshape((bs, -1)).sum(1), 1.0) + norm = jnp.mean(norm) # scalar + if self.sync_device_norm: # sync across GPUs. Helpful for small batch size. + norm = jax.lax.pmean(norm, axis_name='batch') # scalar + pos_loss = jnp.mean(pos_loss.reshape((bs, -1)).sum(1)) / norm # scalar + neg_loss = jnp.mean(neg_loss.reshape((bs, -1)).sum(1)) / norm # scalar + if self.focal_alpha >= 0: + pos_loss = self.focal_alpha * pos_loss + neg_loss = (1. - self.focal_alpha) * neg_loss + return -pos_loss, -neg_loss, norm + + def reg_loss(self, box_regs, gt_regs): + """Compute regression loss. + + Args: + box_regs: a single array in shape B x m x 4. m = sum_l hl * wl. B is + the batch size. + gt_regs: a single array in shape B x m x 4. Invalid/ padded pixels have + gt of - INF. + Returns: + reg_loss: a single scalar for the regression loss. + gious: the per-pixel losses. + norm: a scalar, the normalization factor, which is the number of pixels + that have been applied the loss. Note this is different from the norm + in heatmap loss, where here we apply regression loss to the 3x3 region + near the center, and the heatmap loss is only applied to the peaks. + """ + reg_inds = gt_regs.max(axis=2) >= 0 # B x m: find valid pixels. + gious = centernet_utils.giou_loss(box_regs, gt_regs) # B x m + norm = jnp.maximum(reg_inds.sum(1), 1.0) + norm = jnp.mean(norm) # scalar + if self.sync_device_norm: + norm = jax.lax.pmean(norm, axis_name='batch') + reg_loss = jnp.mean((gious * reg_inds).sum(1)) / norm # scalar + return reg_loss, gious, norm + + def _get_bbox_ltrb(self, grids, boxes, m, n): + """generate FCOS style regression targets. + + Args: + grids: array in shape m x 2: all output pixel coordinates. + boxes: array in shape n x 4: ground truth boxes. + m: number of output pixels. + n: number of objects. + Returns: + reg_target: array in shape m x n x 4: the left, top, right, bottom pixel + distance between each pixel and object center pairs. + """ + l = grids[:, 0].reshape(m, 1) - boxes[:, 0].reshape(1, n) # m x n + t = grids[:, 1].reshape(m, 1) - boxes[:, 1].reshape(1, n) # m x n + r = boxes[:, 2].reshape(1, n) - grids[:, 0].reshape(m, 1) # m x n + b = boxes[:, 3].reshape(1, n) - grids[:, 1].reshape(m, 1) # m x n + reg_target = jnp.stack([l, t, r, b], axis=2) # m x n x 4 + return reg_target + + def _get_centers_and_expand(self, grids, boxes, stride_per_pixel, m, n): + """pad arrays which will be used to generate heatmaps. + + Args: + grids: array in shape m x 2: all output pixel coordinates. + boxes: array in shape n x 4: ground truth boxes. + stride_per_pixel: array in shape m: the stride of the FPN level that + the pixel is from. This will be used for determining if a center is + within a pixel grid and for normalizing regression target. + m: number of output pixels. + n: number of objects. + Returns: + centers_expanded: array in shape m x n x 2: expended n object centers. + centers_discret: array in shape m x n x 2: snap each of the n centers to + its closest pixels. + grid_expanded: array in shape m x n x 2: expanded m pixels. + strides_expanded: array in shape m x n x 2: expanded m pixel strides. + """ + centers = (boxes[:, [0, 1]] + boxes[:, [2, 3]]) / 2 # n x 2 + centers_expanded = jnp.broadcast_to(centers.reshape(1, n, 2), (m, n, 2)) + strides_expanded = jnp.broadcast_to( + stride_per_pixel.reshape((m, 1, 1)), (m, n, 2)) # m x n x 2 + grid_expanded = jnp.broadcast_to(grids.reshape((m, 1, 2)), (m, n, 2)) + centers_discret = ((centers_expanded / strides_expanded).astype( + jnp.int32) * strides_expanded).astype( + jnp.float32) + strides_expanded / 2 # m x n x 2 + return centers_expanded, centers_discret, grid_expanded, strides_expanded + + def _get_positive_masks( + self, centers_discret, grid_expanded, strides_expanded, + is_valid, reg_target, fpn_range): + """define positive/ negative pixels for regression and heatmap. + + Args: + centers_discret: array in shape m x n x 2: snap each of the n centers to + its closest pixels. + grid_expanded: array in shape m x n x 2: expanded m pixels. + strides_expanded: array in shape m x n x 2: expanded m pixel strides. + is_valid: array in shape m x n: if the object is padded for batching. + reg_target: array in shape m x n x 4: pairwise pixel-to-center distance. + fpn_range: array in shape m x 2: the FPN assign threshold for the FPN + level that each pixel is from. + Returns: + reg_pos_mask: array in shape m x n: if we will apply regression loss to + a pixel-object pair. + heatmap_pos_mask: array in shape m x n: if we will apply a positive + heatmap loss to a pixel-object pair. + """ + is_peak = ((grid_expanded - centers_discret) ** 2).sum( + axis=2) == 0 # m x n + is_in_boxes = reg_target.min(axis=2) > 0 # m x n + is_center3x3 = centernet_utils.get_center3x3( + grid_expanded, centers_discret, strides_expanded) # m x n + is_in_fpn_level = centernet_utils.assign_fpn_level( + reg_target, fpn_range) # m x n + # pixels to apply regression losses + reg_pos_mask = is_center3x3 & is_in_boxes & is_in_fpn_level # m x n + reg_pos_mask = reg_pos_mask & is_valid # m x n, remove padded boxes + # positive pixels are defined here as (is_peak & is_in_fpn_level) + heatmap_pos_mask = is_peak & is_in_fpn_level + return reg_pos_mask, heatmap_pos_mask + + def _get_regression_and_heatmaps( + self, area, centers_expanded, grid_expanded, stride_per_pixel, + is_valid, reg_target, reg_pos_mask, heatmap_pos_mask, labels, m, n): + """generate heatmaps and normalized regression targets. + + Args: + area: array in shape n: area if each ground truth box. + centers_expanded: array in shape m x n x 2: expended n object centers. + grid_expanded: array in shape m x n x 2: expanded m pixels. + stride_per_pixel: array in shape m: the stride of the FPN level that + the pixel is from. This will be used for determining if a center is + within a pixel grid and for normalizing regression target. + is_valid: array in shape m x n: if the object is padded for batching. + reg_target: array in shape m x n x 4: pairwise pixel-to-center distance. + reg_pos_mask: array in shape m x n: if we will apply regression loss to + a pixel-object pair. + heatmap_pos_mask: array in shape m x n: if we will apply a positive + heatmap loss to a pixel-object pair. + labels: int array in shape n: the class label of each object. + m: number of output pixels. + n: number of objects. + Returns: + reg: array in shape m x 4: the regression target of each pixel. + heatmap: array in shape m x C: the heatmap to apply loss in Eq.1 of the + CenterNet paper (https://arxiv.org/pdf/1904.07850.pdf). + """ + dist2 = ((grid_expanded - centers_expanded) ** 2).sum(axis=2) # m x n + delta = (1. - self.hm_min_overlap) / (1. + self.hm_min_overlap) # scalar + radius2 = delta ** 2 * 2 * area # n + radius2 = jnp.maximum(radius2, self.min_radius ** 2) # n + weighted_dist2 = dist2 / jnp.broadcast_to(radius2.reshape(1, n), (m, n)) + weighted_dist2 = jnp.maximum(weighted_dist2, 1e-6) # ensure neg gt<1 + weighted_dist2 = weighted_dist2 * (1. - heatmap_pos_mask) # m x n + # remove padded boxes + weighted_dist2 = weighted_dist2 * is_valid + (1. - is_valid) * INF + # render dense heatmaps and regression maps. + heatmap = centernet_utils.create_heatmaps( + weighted_dist2, labels, self.num_classes) # m x C + reg = centernet_utils.get_reg_targets( + reg_target, weighted_dist2, reg_pos_mask) # m x 4 + reg = reg / stride_per_pixel[:, None] + return reg, heatmap + + def get_ground_truth(self, gt_boxes, gt_labels, grids): + """Generate ground truth heatmaps and regression maps. + + Args: + gt_boxes: array in shape (B x max_boxes x 4) + gt_labels: array in shape (B x max_boxes) + grids: List of arrays, in shape L x [hl * wl, 2]. L is the number of + FPN levels. hl, wl are the size in FPN level l. + Returns: + gt_heatmaps: array in shape B x m x C. m = sum_l hl * wl. B is + the batch size, C is the number of classes. + gt_regs: array in shape B x m x 4. + """ + num_locs_per_level = [len(x) for x in grids] # L + stride_per_pixel = jnp.concatenate([ + jnp.ones(x, dtype=jnp.float32) * self.strides[l] + for l, x in enumerate(num_locs_per_level)], axis=0) # m = sum_l wl * hl + fpn_range = jnp.concatenate( + [jnp.broadcast_to(jnp.asarray( + r, dtype=jnp.float32).reshape(1, 2), (x, 2)) + for x, r in zip(num_locs_per_level, self.fpn_range)], axis=0) # m x 2 + grids = jnp.concatenate(grids, axis=0) # m x 2 + m = len(grids) + gt_heatmaps, gt_regs = [], [] + batch_size = gt_boxes.shape[0] + for i in range(batch_size): + n = gt_boxes[i].shape[0] # n = max_boxes, including padded ones. + boxes = gt_boxes[i] # n * 4 in order of [l, t, r, b] + labels = jnp.minimum(gt_labels[i], max(self.num_classes - 1, 0)) # n + area = jnp.prod(boxes[:, 2:] - boxes[:, :2], axis=1) # n + + reg_target = self._get_bbox_ltrb(grids, boxes, m, n) # m x n x 4 + + centers_expanded, centers_discret, grid_expanded, strides_expanded = ( + self._get_centers_and_expand(grids, boxes, stride_per_pixel, m, n) + ) # all arrays are m x n x 2 + + is_valid = jnp.broadcast_to((area > 0).reshape(1, n), (m, n)) # m x n + reg_pos_mask, heatmap_pos_mask = self._get_positive_masks( + centers_discret, grid_expanded, strides_expanded, + is_valid, reg_target, fpn_range + ) # all arrays are m x n + + reg, heatmap = self._get_regression_and_heatmaps( + area, centers_expanded, grid_expanded, stride_per_pixel, + is_valid, reg_target, reg_pos_mask, heatmap_pos_mask, labels, m, n) + + gt_heatmaps.append(heatmap) + gt_regs.append(reg) + + gt_heatmaps = jnp.stack(gt_heatmaps, axis=0) # B x m x C + gt_regs = jnp.stack(gt_regs, axis=0) # B x m x 4 + return gt_heatmaps, gt_regs + + def extract_peaks(self, outputs, pre_nms_topk): + """Concert dense outputs from the network to objects. + + Args: + outputs: dict of list of arrays. The keys should be 'heatmaps' and + 'box_regs'. Both should be a list of arrays in FPN levels. + 'heatmaps' has a shape of B x Hl x Wl x C, 'box_regs' has a shape + of B x Hl x Wl x 4. + pre_nms_topk: int: number of peaks to extract + + Returns: + boxes: float arrays in shape B x n x 4. B is the batch size, n is the + number of detected objects, which is limited by pre_nms_topk. + Boxes are in absolute coordinate in order of (l, t, r, b). + scores: float arrays in shape B x n in range [0, 1]. + classes: int arrays in shape B x n: classes of each object in range [0, C) + """ + grids = centernet_utils.get_grid( + [(x.shape[1], x.shape[2]) for x in outputs['heatmaps']], + self.strides) # L x [hl*wl, 2] + grids = jnp.concatenate(grids, axis=0) # m x 2 + box_regs = [x * self.strides[l] for l, x in enumerate(outputs['box_regs'])] + # Convert output shape + # L x [bs, hl, wl, C] --> bs x m x C, where m = sum_l hl * wl. + box_regs = centernet_utils.level_first_to_batch_first(box_regs) + heatmaps = centernet_utils.level_first_to_batch_first(outputs['heatmaps']) + heatmaps = nn.sigmoid(heatmaps) + bs, m, c = heatmaps.shape[0], heatmaps.shape[1], heatmaps.shape[2] + k = min(pre_nms_topk, m * c - 1) + scores, inds = jax.lax.top_k(heatmaps.reshape(bs, -1), k) # bs x k + if self.sqrt_score: + scores = jnp.sqrt(scores) + loc, classes = inds // c, inds % c # bs x k + grids = jnp.broadcast_to(grids[None], (bs, m, 2)) + # Equivalence of torch.gather(grid, 2, loc[..., None].expand(bs, m, 2)) + gather_inds = jnp.arange(bs * k) // k * m + loc.reshape(bs * k) + peaks = grids.reshape(bs * m, 2)[gather_inds].reshape(bs, k, 2) + regs = box_regs.reshape(bs * m, 4)[gather_inds].reshape(bs, k, 4) + boxes = jnp.stack([ + peaks[:, :, 0] - regs[:, :, 0], + peaks[:, :, 1] - regs[:, :, 1], + peaks[:, :, 0] + regs[:, :, 2], + peaks[:, :, 1] + regs[:, :, 3], + ], axis=2) # bs x k x 4 + return boxes, scores, classes + + def nms(self, boxes, scores, classes, post_nms_topk): + """Running NMS on batched objects. + + Args: + boxes: float arrays in shape B x n x 4. Boxes are in absolute coordinate + in order of (l, t, r, b). + scores: float arrays in shape B x n in range [0, 1]. + classes: int arrays in shape B x n: classes of each object in range [0, C) + post_nms_topk: int; number of boxes after NMS. + Returns: + detection results in batched list of tuples. Each tuple is + three arrays (boxes, scores, classes). boxes is in shape of + n_i x 4, scores and classes are both in shape n_i. Different batches + can have different number of objects. + """ + results = [] + for box_i, sc_i, cls_i in zip(boxes, scores, classes): + box_i, sc_i, cls_i = nms.batched_nms_jax( + box_i, sc_i, cls_i, post_nms_topk, self.iou_thresh) + results.append((box_i, sc_i, cls_i)) + return results + + def inference( + self, + outputs, + ) -> List[Tuple[Any, Any, Any]]: + """Generate detections from model outputs. + + Args: + outputs: dict of list of arrays. The keys should be 'heatmaps' and + 'box_regs'. Both should be a list of arrays in FPN levels. + 'heatmaps' has a shape of B x Hl x Wl x C, 'box_regs' has a shape + of B x Hl x Wl x 4. + + Returns: + detection results in batched list of tuples. Each tuple is + three arrays (boxes, scores, classes). boxes is in shape of + n x 4, scores and classes are both in shape n. + """ + boxes, scores, classes = self.extract_peaks( + outputs, pre_nms_topk=self.pre_nms_topk) + results = self.nms( + boxes, scores, classes, post_nms_topk=self.post_nms_topk) + return results + + def preprocess(self, inputs, padding_mask=None): + """Proprocess images. Normalize pixels for non-padded pixels.""" + mean = jnp.asarray(self.pixel_mean, dtype=self.dtype).reshape(1, 1, 1, 3) + std = jnp.asarray(self.pixel_std, dtype=self.dtype).reshape(1, 1, 1, 3) + inputs = (inputs.astype(self.dtype) - mean) / std + if padding_mask is not None: + inputs = inputs * padding_mask[..., None] # Padded pixels remain 0 + return inputs + + +class CenterNetModel(base_model.BaseModel): + """Scenic Model Wrapper.""" + + def build_flax_model(self): + fields = set(x.name for x in dataclasses.fields(CenterNetDetector)) + config_dict = { + k: v for k, v in self.config.model.items() if k in fields} + return CenterNetDetector(**config_dict) + + def loss_function(self, outputs, batch): + return self.flax_model.loss_function(outputs, batch) diff --git a/scenic/projects/baselines/centernet/modeling/centernet2.py b/scenic/projects/baselines/centernet/modeling/centernet2.py new file mode 100644 index 0000000000000000000000000000000000000000..1edb452dbc02d7356fc6fef3a5039c4189faeddf --- /dev/null +++ b/scenic/projects/baselines/centernet/modeling/centernet2.py @@ -0,0 +1,237 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of CenterNet with RoIHeads.""" + +# pylint: disable=not-callable + +import dataclasses +import math +from typing import Any, Dict, Optional, Tuple + +import flax.linen as nn +import jax.numpy as jnp +import numpy as np + +from scenic.projects.baselines.centernet.modeling import centernet +from scenic.projects.baselines.centernet.modeling import roi_heads +from tensorflow.io import gfile + +ArrayDict = Dict[str, jnp.ndarray] +MetricsDict = Dict[str, Tuple[jnp.ndarray, jnp.ndarray]] + + +class CenterNet2Detector(centernet.CenterNetDetector): + """Two-stage detector with Centernet as proposal network.""" + roi_matching_threshold: Any = (0.6,) + pre_nms_topk_train: int = 2000 + post_nms_topk_train: int = 1000 + pre_nms_topk_test: int = 1000 + post_nms_topk_test: int = 256 + roi_nms_threshold: float = 0.7 + roi_num_classes: int = 80 + roi_conv_dims: Any = () + roi_conv_norm: Optional[str] = None + roi_fc_dims: Any = (1024, 1024) + roi_samples_per_image: int = 512 + roi_positive_fraction: float = 0.25 + roi_mult_proposal_score: bool = True + roi_class_box_regression: bool = False + roi_scale_cascade_gradient: bool = False + roi_use_sigmoid_ce: bool = False + roi_add_box_pred_layers: bool = False + roi_use_zeroshot_cls: bool = False + roi_zs_weight_dim: int = 512 + roi_zs_weight_path: Optional[str] = None + roi_one_class_per_proposal: bool = False + roi_score_threshold: float = 0.05 + roi_post_nms_num_detections: int = 100 + roi_append_gt_boxes: bool = True + custom_classifier: Optional[jnp.ndarray] = None + + def setup(self): + super().setup() + if isinstance(self.roi_matching_threshold, float): + roi_matching_threshold = [self.roi_matching_threshold] + else: + roi_matching_threshold = self.roi_matching_threshold + if self.roi_zs_weight_path: + assert self.custom_classifier is None + zs_weight = jnp.asarray( + np.load(gfile.GFile(self.roi_zs_weight_path, 'rb')) + ).transpose(1, 0) # roi_zs_weight_dim x roi_num_classes + zs_weight = jnp.concatenate( + [jnp.zeros((zs_weight.shape[0], 1), jnp.float32), zs_weight], + axis=1) # roi_zs_weight_dim x (roi_num_classes + 1) + zs_weight = zs_weight / ( + (zs_weight ** 2).sum(axis=0)[None, :] ** 0.5 + 1e-8) # L2 normalize + elif self.custom_classifier is not None: + zs_weight = self.custom_classifier + zs_weight = jnp.concatenate( + [jnp.zeros((zs_weight.shape[0], 1), jnp.float32), zs_weight], + axis=1) # roi_zs_weight_dim x (roi_num_classes + 1) + zs_weight = zs_weight / ( + (zs_weight ** 2).sum(axis=0)[None, :] ** 0.5 + 1e-8) # L2 normalize + else: + zs_weight = None + self.roi_heads = roi_heads.CascadeROIHeads( + input_strides={str(int(math.log2(s))): s for s in self.strides}, + num_classes=self.roi_num_classes, + conv_dims=self.roi_conv_dims, + conv_norm=self.roi_conv_norm, + fc_dims=self.roi_fc_dims, + samples_per_image=self.roi_samples_per_image, + positive_fraction=self.roi_positive_fraction, + matching_threshold=roi_matching_threshold, + nms_threshold=self.roi_nms_threshold, + class_box_regression=self.roi_class_box_regression, + mult_proposal_score=self.roi_mult_proposal_score, + scale_cascade_gradient=self.roi_scale_cascade_gradient, + use_sigmoid_ce=self.roi_use_sigmoid_ce, + add_box_pred_layers=self.roi_add_box_pred_layers, + use_zeroshot_cls=self.roi_use_zeroshot_cls, + zs_weight_dim=self.roi_zs_weight_dim, + zs_weight=zs_weight, + one_class_per_proposal=self.roi_one_class_per_proposal, + score_threshold=self.roi_score_threshold, + post_nms_num_detections=self.roi_post_nms_num_detections, + append_gt_boxes=self.roi_append_gt_boxes, + ) + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + gt_boxes: Optional[jnp.ndarray] = None, + gt_classes: Optional[jnp.ndarray] = None, + train: bool = False, + preprocess: bool = False, + postprocess: bool = True, + *, + padding_mask: Optional[jnp.ndarray] = None, + debug: bool = False) -> Any: + """Applies CenterNet2 model on the input. + + Args: + inputs: array of the preprocessed input images, in shape B x H x W x 3. + gt_boxes: B x N x 4. Only used in training. + gt_classes: B x N. Only used in training. + train: Whether it is training. + preprocess: If using the build-in preprocessing functions on inputs. + postprocess: If true, return post-processed boxes withe scores and + classes; If false, return raw network outputs from FPN: heatmaps, + regressions, RoI regression and classification. + padding_mask: Binary matrix with 0 at padded image regions. + debug: Whether the debug mode is enabled. debug=True enables model + specific logging/storing some values using jax.host_callback. + + Returns: + If postprocess == False, return a dict of outputs. See the output of + CenterNetDetector for details. In addition of outputs from CenterNet, + return outputs from the RoI heads. That includes losses (if train==True) + or raw outputs from the RoI heads (if train==False). + If postprocess == True, return a list of tuples. Each tuple is + three arrays (boxes, scores, classes). boxes is in shape of + n x 4, scores and classes are both in shape n. + """ + if preprocess: + inputs = self.preprocess(inputs, padding_mask) + + backbone_features = self.backbone(inputs, train=train) + outputs = self.proposal_generator(backbone_features, train=train) + + pre_nms_topk = self.pre_nms_topk_train if train else self.pre_nms_topk_test + post_nms_topk = ( + self.post_nms_topk_train if train else self.post_nms_topk_test) + boxes, scores, classes = self.extract_peaks( + outputs, pre_nms_topk=pre_nms_topk) + proposals = self.nms( + boxes, scores, classes, post_nms_topk=post_nms_topk) + proposal_boxes = jnp.stack( + [x[0] for x in proposals], axis=0) # B x num_prop x 4 + proposal_boxes = jnp.maximum(proposal_boxes, 0) + proposal_boxes = jnp.minimum( + proposal_boxes, max(inputs.shape[1], inputs.shape[2])) + proposal_scores = jnp.stack( + [x[1] for x in proposals], axis=0) # B x num_propq + rpn_features = {str(int(math.log2(s))): v for s, v in zip( + self.strides, backbone_features)} + # scenic dataloader loads classes in range [0, num_class - 1], and + # dpax RoI heads assume gt_classes in range [1, num_class]. Add 1 to valid + # gt objects (indicated by any box axis > 0). + if gt_classes is not None and gt_boxes is not None: + gt_classes = gt_classes + (gt_boxes.max(axis=2) > 0) + image_shape = jnp.concatenate([ + jnp.ones((inputs.shape[0], 1), jnp.float32) * inputs.shape[1], + jnp.ones((inputs.shape[0], 1), jnp.float32) * inputs.shape[2], + ], axis=1) # B x 2, in order (height, width) + detections, metrics = self.roi_heads( + rpn_features, image_shape, + gt_boxes, gt_classes, + proposal_boxes, proposal_scores, + training=train, postprocess=postprocess, debug=debug) + if not train: + if postprocess: + # Return a list for batch and convert 1-based class id to 0-based. + per_batch_detection = [ + (d, s, c) for d, s, c in zip( + detections['detection_boxes'], detections['detection_scores'], + (detections['detection_classes'] - 1).astype(jnp.int32))] + return per_batch_detection + else: + # Return raw network output. + outputs.update(detections) + return outputs + else: + # Return training losses computed in the RoI heads. + outputs['metrics'] = metrics + return outputs + + def loss_function( + self, + outputs: Any, + batch: Any, + ): + """loss function of CenterNet. + + Args: + outputs: dict of 'heatmaps' and `box_regs`. Both are list of arrays from + different FPN levels, in shape L x [B, hl, wl, C']. L is the number + of FPN levels, hl, wl are the shape in FPN level l. + batch: dict that has 'inputs', 'batch_mask' and, 'label' (ground truth). + batch['label'] is a dict with the following keys and shape: + 'boxes': B x max_boxes x 4 + 'labels': B x max_boxes + Returns: + total_loss: Total loss weighted appropriately. + metrics: auxiliary metrics for debugging and visualization. + """ + proposal_loss, metrics = super().loss_function(outputs, batch) + roi_metrics = outputs['metrics'] + metrics.update(roi_metrics) + loss = proposal_loss + for k in range(len(self.roi_matching_threshold)): + loss += (roi_metrics[f'stage{k}_roi_cls_loss'] + roi_metrics[ + f'stage{k}_roi_reg_loss']) / len(self.roi_matching_threshold) + metrics['total_loss'] = loss + return loss, metrics + + +class CenterNet2Model(centernet.CenterNetModel): + """Scenic Model Wrapper.""" + + def build_flax_model(self): + fields = set(x.name for x in dataclasses.fields(CenterNet2Detector)) + config_dict = { + k: v for k, v in self.config.model.items() if k in fields} + return CenterNet2Detector(**config_dict) diff --git a/scenic/projects/baselines/centernet/modeling/centernet_head.py b/scenic/projects/baselines/centernet/modeling/centernet_head.py new file mode 100644 index 0000000000000000000000000000000000000000..1e4c456c97041e61869ecbc055a8e086dbdb038b --- /dev/null +++ b/scenic/projects/baselines/centernet/modeling/centernet_head.py @@ -0,0 +1,170 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""CenterNet head.""" + +import functools +from typing import List, Dict + +import flax.linen as nn +from jax.nn import initializers +import jax.numpy as jnp + + +ArrayList = List[jnp.ndarray] +ArrayListDict = Dict[str, ArrayList] + + +class Tower(nn.Module): + """Layers between backbone and outputs. + + Attributes: + num_layers: number of layers. + out_channels: number of channels of all layers. + norm: normalization layer type after each layer. Currently only support GN. + dtype: Data type of the computation (default: float32). + """ + num_layers: int = 4 + out_channels: int = 256 + norm: str = 'GN' + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, train: bool = False) -> jnp.ndarray: + """Apply module to a feature. + + Args: + x: array in shape B x H x W x C: features from the backbone or a + single level of FPN. + train: whether it is training. + Returns: + array in shape B x H x W x C. + """ + conv = functools.partial( + nn.Conv, features=self.out_channels, + kernel_size=(3, 3), padding=1, dtype=self.dtype, + kernel_init=initializers.normal(stddev=0.01), + bias_init=initializers.constant(0.0), + ) + if self.norm == 'GN': + norm = functools.partial(nn.GroupNorm, dtype=self.dtype) + elif self.norm == 'LN': + norm = functools.partial(nn.LayerNorm, dtype=self.dtype) + else: + raise ValueError(f'Unsupported norm: {self.norm}') + for i in range(self.num_layers): + x = conv(name=f'{i * 3}')(x) + x = norm(name=f'{i * 3 + 1}')(x) + x = nn.relu(x) + return x + + +class Scale(nn.Module): + """Multiplying a feature by a single learnable scale. + + Attributes: + init_value: initialization value. Default 1: no effect. + dtype: data type of the computation (default: float32). + """ + init_value: float = 1.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, train: bool = False) -> jnp.ndarray: + """Apply module to a feature. + + Args: + x: array in any shape. + train: whether it is training. + Returns: + array with the same shape as the input. + """ + return x * self.param('scale', initializers.constant(self.init_value), (1,)) + + +class CenterNetHead(nn.Module): + """CenterNet output layers. + + Attributes: + num_classes: Number of object classes. num_classes = 0 will merge the + classification feature layers and regression layers. This is + class-agnostic detection. This is used for proposal-only mode. + num_layers: number of layers between backbone and outputs. + out_channels: channels of the layers. + num_levels: number of FPN levels. + dtype: data type of the computation (default: float32). + """ + num_classes: int = 80 + num_layers: int = 4 + out_channels: int = 256 + num_levels: int = 5 + dtype: jnp.dtype = jnp.float32 + norm: str = 'GN' + + @nn.compact + def __call__( + self, + features: ArrayList, + train: bool = False) -> ArrayListDict: + """Apply model to a list of features (from FPN). + + Args: + features: list of arrays in FPN levels. Each array has a shape of + B x H_l x W_l x C, where l is the FPN level index. Different levels + have different spatial size, but the same channels. + train: whether it is training. + Returns: + A dict with 'heatmaps' and 'box_regs', both are list of arrays in FPN + levels. Each level of 'heatmaps' is in shape B x H_l x W_l x num_classes, + each level of `box_regs` is in shape B x H_l x W_l x 4. + """ + heatmaps = [] + box_regs = [] + tower = functools.partial( + Tower, num_layers=self.num_layers, + out_channels=self.out_channels, norm=self.norm, dtype=self.dtype) + bbox_tower = tower(name='bbox_tower') + bbox_pred = nn.Conv( + 4, kernel_size=(3, 3), padding=1, + # make the initial prediction close to the regression range. + bias_init=initializers.constant(8.0), + kernel_init=initializers.normal(stddev=0.01), + dtype=self.dtype, name='bbox_pred') + if self.num_classes > 0: + cls_tower = tower(name='cls_tower') + cls_logits = nn.Conv( + self.num_classes, kernel_size=(3, 3), padding=1, + bias_init=initializers.constant(-4.6), # sigmoid(-4.6) = 0.01 + kernel_init=initializers.normal(stddev=0.01), + dtype=self.dtype, name='cls_logits') + else: + agn_hm = nn.Conv( + 1, kernel_size=(3, 3), padding=1, + bias_init=initializers.constant(-4.6), # sigmoid(-4.6) = 0.01 + kernel_init=initializers.normal(stddev=0.01), + dtype=self.dtype, name='agn_hm') + for l in range(self.num_levels): + feature = features[l] + bbox_feat = bbox_tower(feature, train=train) + reg = bbox_pred(bbox_feat) + reg = Scale(name=f'scales.{l}')(reg) + reg = nn.relu(reg) + box_regs.append(reg) + if self.num_classes > 0: + cls_feat = cls_tower(feature, train=train) + heatmaps.append(cls_logits(cls_feat)) + else: + heatmaps.append(agn_hm(bbox_feat)) + return {'heatmaps': heatmaps, 'box_regs': box_regs} + diff --git a/scenic/projects/baselines/centernet/modeling/centernet_utils.py b/scenic/projects/baselines/centernet/modeling/centernet_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..43528e585f6c859998cbae9c319fbba8a8698b94 --- /dev/null +++ b/scenic/projects/baselines/centernet/modeling/centernet_utils.py @@ -0,0 +1,224 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Util functions for centernet.""" + +import functools +from typing import Any, List, Tuple + +import jax +import jax.numpy as jnp + +INF = 100000000 +Array = jnp.ndarray + + +def box_iou(boxes1: Array, boxes2: Array) -> Tuple[Array, Array]: + """Compute box IoU. Boxes in format [-l, -t, b, r]. + + Args: + boxes1: array in shape B x n x 4 or n x 4 + boxes2: array in shape B x m x 4 or m x 4 + Returns: + iou: array in shape B x n x m or n x m + union: array in shape B x n x m or n x m + """ + wh1 = boxes1[..., 2:] + boxes1[..., :2] + area1 = wh1[..., 0] * wh1[..., 1] # [bs, n] + wh2 = boxes2[..., 2:] + boxes2[..., :2] + area2 = wh2[..., 0] * wh2[..., 1] # [bs, m] + lt = jnp.maximum(- boxes1[..., :, :2], - boxes2[..., :, :2]) # [bs, n, 2] + rb = jnp.minimum(boxes1[..., :, 2:], boxes2[..., :, 2:]) # [bs, n, 2] + wh = (rb - lt).clip(0.0) # [bs, n, 2] + intersection = wh[..., :, 0] * wh[..., :, 1] # [bs, n] + union = area1 + area2 - intersection + iou = intersection / (union + 1e-6) + return iou, union + + +def giou_loss(boxes1: Array, boxes2: Array) -> Array: + """Compute GIoU loss. Boxes in format [-l, -t, b, r]. + + Args: + boxes1: array in shape B x n x 4 or n x 4 + boxes2: array in shape B x m x 4 or m x 4 + Returns: + array in shape B x n + """ + iou, union = box_iou(boxes1, boxes2) + lt = jnp.minimum(- boxes1[..., :, :2], - boxes2[..., :, :2]) # [bs, n, 2] + rb = jnp.maximum(boxes1[..., :, 2:], boxes2[..., :, 2:]) # [bs, n, 2] + wh = (rb - lt).clip(0.0) # [bs, n, 2] + area = wh[..., 0] * wh[..., 1] # [bs, n] + giou = iou - (area - union) / (area + 1e-6) + return 1. - giou + + +def get_grid(shapes: List[Tuple[int, int]], strides: Any) -> List[Array]: + """Generate the default locations of each output pixels. + + Args: + shapes: list of (hl, wl) tuples in FPN levels, with length L (number of + FPN levels). l is the FPN level index. In general hl == h // (2**l) where + h is the original input size. + strides: list of integers. The strides in each FPN level. + + Returns: + grids: List of arrays with length L, each in shape (hl * wl, 2). + """ + grids = [] + for l, (h, w) in enumerate(shapes): + shifts_x = jnp.arange( + 0, w * strides[l], step=strides[l], dtype=jnp.float32) + shifts_y = jnp.arange( + 0, h * strides[l], step=strides[l], dtype=jnp.float32) + shift_x, shift_y = jnp.meshgrid(shifts_x, shifts_y) + shift_x = shift_x.reshape(-1) + shift_y = shift_y.reshape(-1) + grids_per_level = jnp.stack( + (shift_x, shift_y), axis=1) + strides[l] // 2 + grids.append(grids_per_level) + return grids + + +def naive_create_heatmaps( + dist: Array, labels: Array, num_classes: int) -> Array: + """create per-class heatmaps from normalized distances. + + Args: + dist: arrays in shape m x n. m is the sum pixels in all levels, n is + the number of objects. + labels: int arrays in shape n: the class index (int range [0, C - 1]) + num_classes: C or 0. 0 for class agnostic. + + Returns: + array in shape m x C or m x 1 (agnostic): the CenterNet heatmaps. + """ + # output a single-channel heatmap when num_classes == 0 (agnostic) + out_channels = max(num_classes, 1) + heatmap = jnp.zeros((out_channels, dist.shape[0]), dtype=jnp.float32) + dist = jnp.exp(-dist) # m x n + for i in range(labels.shape[0]): + heatmap = heatmap.at[labels[i]].set( + jnp.maximum(dist[:, i], heatmap[labels[i]])) + heatmap = heatmap.transpose(1, 0) # m x C + return heatmap + + +def scatter_max(inp, index, src): + """Jax implementation of torch.scatter(inp, 1, index, src).""" + # from https://github.com/jax-ml/jax/issues/8487 + dnums = jax.lax.ScatterDimensionNumbers( + update_window_dims=(), inserted_window_dims=(0,), + scatter_dims_to_operand_dims=(0,)) + scatter = functools.partial(jax.lax.scatter_max, dimension_numbers=dnums) + scatter = jax.vmap(scatter, in_axes=(0, 0, 0), out_axes=0) + return scatter(inp, jnp.expand_dims(index, axis=-1), src) + + +def create_heatmaps(dist: Array, labels: Array, num_classes: int) -> Array: + """create heatmaps. + + This is equivalent to "naive_create_heatmaps" but runs faster. + + Args: + dist: arrays in shape m x n. m is the sum pixels in all levels, n is + the number of objects. The weighted distance (Y_{xyc} in Eq. 1 in paper + https://arxiv.org/pdf/1904.07850.pdf) between the m output pixels + and n object centers. + labels: int arrays in shape n: the class label (int range [0, C - 1]) of + each ground truth object. + num_classes: C or 0. 0 for class agnostic. + + Returns: + array in shape m x C or m x 1 (agnostic): the CenterNet heatmaps. + """ + # output a single-channel heatmap when num_classes == 0 (agnostic) + out_channels = max(num_classes, 1) + heatmap = jnp.zeros((dist.shape[0], out_channels), dtype=jnp.float32) + heatmap = scatter_max( + heatmap, + jnp.broadcast_to(labels[None], (dist.shape[0], dist.shape[1])), + jnp.exp(-dist)) + return heatmap + + +def get_center3x3(grids_expanded: Array, centers_discret: Array, + strides_expanded: Array) -> Array: + """Get the 3x3 regions near each discret centers for regression. + + Args: + grids_expanded: arrays in shape m x n x 2. m is the sum pixels in all + levels, n is the number of objects. + centers_discret: arrays in shape m x n x 2 + strides_expanded: arrays in shape m x n x 2 + + Returns: + bool array in shape m x n: if a pixel is within the 3x3 region of an object + in any of the fpn level. + """ + dist_x = jnp.absolute(grids_expanded[:, :, 0] - centers_discret[:, :, 0]) + dist_y = jnp.absolute(grids_expanded[:, :, 1] - centers_discret[:, :, 1]) + return (dist_x <= strides_expanded[:, :, 0]) & ( + dist_y <= strides_expanded[:, :, 0]) + + +def assign_fpn_level(reg_target: Array, fpn_range: Array) -> Array: + """Assign each ground truth object to its FPN level. + + Args: + reg_target: array in shape m x n x 4. m is the sum pixels in all levels, + n is the number of objects. + fpn_range: array in shape m x 2: the range of each pixel. + Returns: + a bool array in shape m x n + """ + diag_length = ((reg_target[:, :, :2] + reg_target[:, :, 2:]) ** 2).sum( + axis=2) ** 0.5 / 2 # m x n, where all values are the same in m + is_cared_in_fpn_level = (diag_length >= fpn_range[:, None, 0]) & ( + diag_length <= fpn_range[:, None, 1]) # m x n + return is_cared_in_fpn_level + + +def get_reg_targets(reg_target: Array, dist: Array, mask: Array) -> Array: + """Assign regression gts. Each pixel regress to its "closest" valid object. + + Args: + reg_target: array in shape m x n x 4. m is the sum pixels in all levels, + n is the number of objects. + dist: array in shape m x n: the weighted distance between pixels and objects + defined in the heatmap. + mask: bool array in shape m x n: if assign the pixel is valid of the object. + Returns: + regs: array in shape m x 4: the regression target of each pixel. + """ + dist = dist * mask + (1. - mask) * INF # m x n + min_dist, min_inds = dist.min(axis=1), dist.argmin(axis=1) # m + regs = reg_target[jnp.arange(len(reg_target)), min_inds] # m x n x 4 -> m x 4 + invalid = (min_dist == INF) # m + regs = regs * (1. - invalid[:, None]) - 1. * INF * invalid[:, None] # m x 4 + return regs + + +def level_first_to_batch_first(preds) -> Array: + """Concatenate features from different FPN level. + + Args: + preds: list of arrays: L x [B, hl, wl, D]. B is the batch size, hl * wl + is the numbers of pixels in the FPN level, D is the feature dimention. + Returns: + array in shape B x m x D, m = sum_l hl * wl + """ + return jnp.concatenate( + [x.reshape(x.shape[0], -1, x.shape[-1]) for x in preds], axis=1) diff --git a/scenic/projects/baselines/centernet/modeling/convnext.py b/scenic/projects/baselines/centernet/modeling/convnext.py new file mode 100644 index 0000000000000000000000000000000000000000..31c78d7de0161f8f79516094a1474f23911601f7 --- /dev/null +++ b/scenic/projects/baselines/centernet/modeling/convnext.py @@ -0,0 +1,182 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of ConvNeXt.""" + +import functools +from typing import Callable, Any, Optional, Union, Dict + +import flax.linen as nn +import jax +from jax.nn import initializers +import jax.numpy as jnp +from scenic.model_lib.layers import nn_layers + + +class ConvNeXtBlock(nn.Module): + """ConvNeXt block: DwConv -> LayerNorm -> Linear -> GELU -> Linear.""" + + dim: int + droplayer_p: float = 0 + layer_scale_init_value: float = 1e-6 + gelu_approximate: bool = False + scale_drop_path: bool = False + dtype: jnp.dtype = jnp.float32 + + def get_drop_pattern(self, + x: jnp.ndarray, + deterministic: bool) -> jnp.ndarray: + """DropPath Layer.""" + if not deterministic and self.droplayer_p: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + return jax.random.bernoulli( + self.make_rng('dropout'), self.droplayer_p, shape).astype(self.dtype) + else: + return 0.0 # pytype: disable=bad-return-type # jax-ndarray + + @nn.compact + def __call__(self, x: jnp.ndarray, train: bool = False) -> jnp.ndarray: + residual = x + x = nn.Conv( + self.dim, (7, 7), + 1, + padding=3, + feature_group_count=self.dim, + use_bias=True, + dtype=self.dtype, + name='dwconv')( + x) + x = nn.LayerNorm(epsilon=1e-6, name='norm', dtype=self.dtype)(x) + x = nn.Dense( + 4 * self.dim, name='pwconv1', dtype=self.dtype)(x) # B x H x W x 4C + x = nn.gelu(x, approximate=self.gelu_approximate) + x = nn.Dense(self.dim, name='pwconv2', dtype=self.dtype)(x) # B x H x W x C + if self.layer_scale_init_value > 0: + gamma = self.param( + 'gamma', + initializers.constant(self.layer_scale_init_value), + (self.dim)) + x = x * gamma[..., :] + drop_pattern = self.get_drop_pattern(x, deterministic=not train) + + keep_prob = (1 - self.droplayer_p) + if self.scale_drop_path and train and keep_prob > 1e-3: + divisor = keep_prob + else: + divisor = 1.0 + + x = residual + (1.0 - drop_pattern) * x / divisor + return x + +SIZE_OPTIONS = { + 'T': ([3, 3, 9, 3], [96, 192, 384, 768], 0.1), + 'S': ([3, 3, 27, 3], [96, 192, 384, 768], 0.4), + 'B': ([3, 3, 27, 3], [128, 256, 512, 1024], 0.5), + 'L': ([3, 3, 27, 3], [192, 384, 768, 1536], 0.5), + 'XL': ([3, 3, 27, 3], [256, 512, 1024, 2048], 0.5), +} + + +class ConvNeXt(nn.Module): + """ConvNeXt architecture. + + Attributes: + num_outputs: Num output classes. If None, a dict of intermediate feature + maps is returned. + size: size as pre-defined in the paper. Options: T, S, B, L, XL + kernel_init: Kernel initialization. + bias_init: Bias initialization. + dtype: Data type, e.g. jnp.float32. + """ + num_outputs: Optional[int] + size: str = 'T' + layer_scale_init_value: float = 1e-6 + gelu_approximate: bool = False + drop_path_rate: Optional[float] = None + scale_drop_path: bool = False + kernel_init: Callable[..., Any] = initializers.lecun_normal() + bias_init: Callable[..., Any] = initializers.zeros + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__( + self, + x: jnp.ndarray, + train: bool = False, + debug: bool = False) -> Union[jnp.ndarray, Dict[str, jnp.ndarray]]: + """Applies ResNet model to the inputs. + + Args: + x: Inputs to the model. + train: Whether it is training or not. + debug: Whether the debug mode is enabled. debug=True enables model + specific logging/storing some values using jax.host_callback. + + Returns: + Un-normalized logits. + """ + if self.size not in SIZE_OPTIONS: + raise ValueError('Please provide a valid size') + depths, dims, default_drop_path_rate = SIZE_OPTIONS[self.size] + drop_path_rate = self.drop_path_rate or default_drop_path_rate + sum_depth = sum(depths) + dp_rates = [drop_path_rate * i / (sum_depth - 1) for i in range(sum_depth)] + layernorm = functools.partial(nn.LayerNorm, epsilon=1e-6, dtype=self.dtype) + block = functools.partial( + ConvNeXtBlock, + layer_scale_init_value=self.layer_scale_init_value, + scale_drop_path=self.scale_drop_path, + dtype=self.dtype) + x = nn.Conv( + dims[0], + kernel_size=(4, 4), + strides=(4, 4), + dtype=self.dtype, + name='downsample_layers.0.0')( + x) + x = layernorm(name='downsample_layers.0.1')(x) + representations = {'stem': x} + cur = 0 + for i, (depth, dim) in enumerate(zip(depths, dims)): + if i > 0: + x = layernorm(name='downsample_layers.{}.0'.format(i))(x) + x = nn.Conv( + dims[i], + kernel_size=(2, 2), + strides=(2, 2), + dtype=self.dtype, + name='downsample_layers.{}.1'.format(i))( + x) + for j in range(depth): + x = block( + dim=dim, droplayer_p=dp_rates[cur + j], + name='stages.{}.{}'.format(i, j))(x, train) + cur += depth + representations[f'stage_{i + 1}'] = x + + # Head. + if self.num_outputs: + x = jnp.mean(x, axis=(1, 2)) + x = layernorm(name='norm')(x) + x = nn_layers.IdentityLayer(name='pre_logits')(x) + x = nn.Dense( + self.num_outputs, + kernel_init=self.kernel_init, + bias_init=self.bias_init, + dtype=self.dtype, + name='output_projection')( + x) + return x + else: + return representations diff --git a/scenic/projects/baselines/centernet/modeling/fpn.py b/scenic/projects/baselines/centernet/modeling/fpn.py new file mode 100644 index 0000000000000000000000000000000000000000..1b5bde9f58b0e26078e73ba5ad1539e56f6fdde5 --- /dev/null +++ b/scenic/projects/baselines/centernet/modeling/fpn.py @@ -0,0 +1,145 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""FPN Backbones for object detection.""" + +import functools +from typing import List + +import flax +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections + +from scenic.projects.baselines.centernet.modeling import convnext + +ArrayList = List[jnp.ndarray] + +BOTTOM_UP_CLASS = { + 'convnext': convnext.ConvNeXt, +} + + +class TwiceDownsampleBlock(nn.Module): + """Generate two more downsampled feature maps from a input feature.""" + out_channels: int = 256 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, train: bool = False) -> jnp.ndarray: + """Apply model on a single output feature. + + Args: + x: Array in shape B x H x W x C. + train: Whether it is training. + + Returns: + List of array [p6, p7]. p6 is in shape B x H//2 x W/2 x out_channels. + p7 is in shape B x H//4 x W// 4 x out_channels. + """ + conv = functools.partial( + nn.Conv, features=self.out_channels, kernel_size=(3, 3), + strides=2, padding=1, dtype=self.dtype) + p6 = conv(name='p6')(x) + p7 = conv(name='p7')(nn.relu(p6)) + return [p6, p7] # pytype: disable=bad-return-type # jax-ndarray + + +class FPN(nn.Module): + """FPN implementation following detectron2. + + Attributes: + backbone_name: string of the backbone name. + in_features: names of the input feature from the backbone. For example, + ['stage_2', 'stage_3', 'stage_4']. The name should be from the output dict + of the backbone. + out_channels: number of channels of the FPN output. All levels should have + the same channel. + num_out_levels: number of output FPN levels. + start_idx: the stage index of the first output block. Following the + convention in detectron2, this implies the output stride of the first + level. I.e., the stride of the first level is 2 ** start_idx. + norm: normalization layer type. Only no normalization is supported yet. + TODO(zhouxy): add other normalization types. + dtype: data type of the computation (default: float32). + """ + backbone_name: str + in_features: List[str] + out_channels: int = 256 + num_out_levels: int = 5 + start_idx: int = 3 + norm: str = '' + backbone_args: ml_collections.ConfigDict = flax.struct.field( + default_factory=ml_collections.ConfigDict + ) + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, train: bool = False) -> ArrayList: + """Apply backbone + FPN to the input image. + + Args: + x: array of the preprocessed input images, in shape B x H x W x 3. + train: Whether it is training. + + Returns: + outputs: A list of array in different FPN layers. Array in level l is in + shape B x H_l x W_l x out_channels, where H_l and W_l are the spatial + size of each level. H_l = H // (2 ** l). + """ + assert not self.norm, 'Normalization layers in FPN is not supported yet!' + use_bias = not self.norm + + lateral_conv = functools.partial( + nn.Conv, features=self.out_channels, kernel_size=(1, 1), + use_bias=use_bias, dtype=self.dtype) + output_conv = functools.partial( + nn.Conv, features=self.out_channels, kernel_size=(3, 3), padding=1, + use_bias=use_bias, dtype=self.dtype) + + bottom_up_class = BOTTOM_UP_CLASS[self.backbone_name] + bottom_up_features = bottom_up_class( + num_outputs=None, **self.backbone_args, name='bottom_up')( + x, train=train) + results = {} + mid_idx = self.start_idx + len(self.in_features) - 1 + prev_features = lateral_conv(name=f'fpn_lateral{mid_idx}')( + bottom_up_features[self.in_features[-1]]) + out = output_conv(name=f'fpn_output{mid_idx}')( + prev_features) + results[f'p{mid_idx}'] = out + + for idx in range(1, len(self.in_features)): + features = bottom_up_features[self.in_features[-1 - idx]] + top_down_features = jax.image.resize( + prev_features, + (prev_features.shape[0], prev_features.shape[1] * 2, + prev_features.shape[2] * 2, prev_features.shape[3]), + method='nearest' + ) + lateral_features = lateral_conv( + name=f'fpn_lateral{mid_idx-idx}')(features) + prev_features = lateral_features + top_down_features + out = output_conv( + name=f'fpn_output{mid_idx-idx}')(prev_features) + results[f'p{mid_idx-idx}'] = out + + # TODO(zhouxy): Support other top blocks + top_block = TwiceDownsampleBlock( + out_channels=self.out_channels, dtype=self.dtype, name='top_block') + results['p6'], results['p7'] = top_block(results[f'p{mid_idx}']) + outputs = [results[f'p{i}'] for i in range(3, 8)] + + return outputs diff --git a/scenic/projects/baselines/centernet/modeling/iou_assignment.py b/scenic/projects/baselines/centernet/modeling/iou_assignment.py new file mode 100644 index 0000000000000000000000000000000000000000..29237292829584c5bd3d65d87239ed9bcaf0c9c1 --- /dev/null +++ b/scenic/projects/baselines/centernet/modeling/iou_assignment.py @@ -0,0 +1,142 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Label assignment based on IoUs. + +This implementation is provided by Yuxin Wu. +""" + +import enum + +import jax +import jax.numpy as jnp + + +class Assignment(enum.IntEnum): + """Assignment result of each anchor after matching them with ground truth.""" + + IGNORE = -1 # The anchor is ignored / excluded from training. + NEGATIVE = 0 # The anchor is negative / does not match objects. + POSITIVE = 1 # The anchor is positive / matches some object. + + +def label_assignment( + iou_matrix: jnp.ndarray, + thresholds: list[float], + assignments: list[Assignment], + ) -> tuple[jnp.ndarray, jnp.ndarray]: + """Match groundtruth boxes with detection boxes to assign objectness labels. + + The matched groundtruth (GT) of each detection box (DT) is the GT with maximum + IoU. After a match is found, the label of this DT is determined by the + threshold range that the IoU value falls into: if + thresholds[i] <= IoU < thresholds[i+1], then the DT is given assignments[i+1]. + + Args: + iou_matrix: a (N, M) IoU matrix where N, M are the number of ground truth + and detection (or anchor) boxes. Values are expected to be non-negative. + thresholds: a sorted list of iou thresholds to determine which label to + assign to each detection box. + assignments: a list of assignments. Must have length == len(thresholds) + 1. + + Returns: + A length-M integer vector, the matched GT index of every DT box. + A length-M integer vector, the assigned label of every DT box. + """ + if len(assignments) != len(thresholds) + 1: + raise ValueError('Invalid length of assignments & thresholds!') + if thresholds != sorted(thresholds): + raise ValueError('Thresholds must be sorted!') + thresholds = jnp.array(thresholds) + matches = jnp.argmax(iou_matrix, axis=0) + matched_max = jnp.max(iou_matrix, axis=0) # Best IoU for each DT. + # For each IoU, find its position inside "thresholds" + if len(thresholds) == 1: + assignments_per_box = jnp.where(matched_max < thresholds[0], assignments[0], + assignments[1]) + elif len(thresholds) == 2: + assignments_per_box = jnp.where( + matched_max < thresholds[0], assignments[0], + jnp.where(matched_max < thresholds[1], assignments[1], assignments[2])) + else: + # Handle the generic case, but much slower. + indices = jnp.searchsorted(thresholds, matched_max, side='right') + assignments_per_box = jnp.array(assignments, dtype=jnp.int32)[indices] + + return matches, assignments_per_box + + +def random_top_k(vec: jnp.ndarray, k: int, + prng_key: jnp.ndarray) -> jnp.ndarray: + """Select top k elements from the given vector x, randomly breaking ties. + + Args: + vec: input vector. + k: number of elements to select + prng_key: jax PRNG key + + Returns: + A bool vector same size as `x` indicating the k elements that are selected. + """ + if k < 0: + raise ValueError(f'Cannot use k={k}!') + if k == 0: + return jnp.zeros_like(vec, dtype=bool) + n = vec.size + + if vec.dtype == bool: + vec = vec.astype(jnp.int32) + perm_array = jnp.stack([vec, jnp.arange(n, dtype=vec.dtype)], axis=0) + # Get permuted vector together with permutation index (avoid extra gather). + perm_array = jax.random.permutation(prng_key, perm_array, axis=1) + permuted_vec, permutation = jnp.split(perm_array, 2, axis=0) + permutation = permutation[0].astype(jnp.int32) + + # Find the topk elements under permuted indices. + _, topk_inds = jax.lax.top_k(permuted_vec[0], k) + inds = permutation[topk_inds] # Get back the original indices. + return jnp.zeros_like( + vec, dtype=bool).at[inds].set( + True, mode='promise_in_bounds', unique_indices=True) + + +def subsample_assignments(assignments: jnp.ndarray, num_samples: int, + positive_fraction: float, + prng_key: jnp.ndarray) -> jnp.ndarray: + """Randomly sample a subset from `assignments` for training. + + Args: + assignments: an integer vector. Value must belong to `Assignment`. + num_samples: number of samples to take. + positive_fraction: the desired fraction of positive samples in the result. + Will sample this amount of positive samples as long as there is enough. + The rest of samples will be negative as long as there is enough. + prng_key: jax PRNG key + + Returns: + Result assignment vector with the same meaning as input. Items that are + not sampled are assigned IGNORE. + """ + pos_mask = assignments == Assignment.POSITIVE + sampled_pos_mask = random_top_k( + pos_mask, int(num_samples * positive_fraction), prng_key) & pos_mask + # Ignore the positives that are not selected. sampled_assignments now have + # desired number of positives, but possibly too many negatives. + sampled_assignments = jnp.where( + pos_mask & jnp.logical_not(sampled_pos_mask), + Assignment.IGNORE, assignments) + # Now pick top `num_samples` from it. This assumes order in Assignment enum. + assert Assignment.IGNORE < Assignment.NEGATIVE < Assignment.POSITIVE + final_mask = random_top_k(sampled_assignments, num_samples, prng_key) + return jnp.where(final_mask, sampled_assignments, Assignment.IGNORE) diff --git a/scenic/projects/baselines/centernet/modeling/nms.py b/scenic/projects/baselines/centernet/modeling/nms.py new file mode 100644 index 0000000000000000000000000000000000000000..10b9f7ba7fc067cf8decef62bbe3b5601526487d --- /dev/null +++ b/scenic/projects/baselines/centernet/modeling/nms.py @@ -0,0 +1,289 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Implement NMS functions. + +Jax NMS is forked from +https://github.com/mlperf/training_results_v0.7/blob/master/Google/benchmarks/\ +ssd/implementations/ssd-research-JAX-tpu-v3-4096/nms.py +""" + +from typing import Tuple +import jax +import jax.numpy as jnp +import numpy as np + +_NMS_TILE_SIZE = 256 + + +def _bbox_overlap(boxes: jnp.ndarray, gt_boxes: jnp.ndarray): + """Find Bounding box overlap. + + Args: + boxes: first set of bounding boxes + gt_boxes: second set of boxes to compute IOU + + Returns: + iou: Intersection over union matrix of all input bounding boxes + """ + bb_y_min, bb_x_min, bb_y_max, bb_x_max = jnp.split( + ary=boxes, indices_or_sections=4, axis=2) + gt_y_min, gt_x_min, gt_y_max, gt_x_max = jnp.split( + ary=gt_boxes, indices_or_sections=4, axis=2) + + # Calculates the intersection area. + i_xmin = jnp.maximum(bb_x_min, jnp.transpose(gt_x_min, [0, 2, 1])) + i_xmax = jnp.minimum(bb_x_max, jnp.transpose(gt_x_max, [0, 2, 1])) + i_ymin = jnp.maximum(bb_y_min, jnp.transpose(gt_y_min, [0, 2, 1])) + i_ymax = jnp.minimum(bb_y_max, jnp.transpose(gt_y_max, [0, 2, 1])) + i_area = jnp.maximum((i_xmax - i_xmin), 0) * jnp.maximum((i_ymax - i_ymin), 0) + + # Calculates the union area. + bb_area = (bb_y_max - bb_y_min) * (bb_x_max - bb_x_min) + gt_area = (gt_y_max - gt_y_min) * (gt_x_max - gt_x_min) + # Adds a small epsilon to avoid divide-by-zero. + u_area = bb_area + jnp.transpose(gt_area, [0, 2, 1]) - i_area + 1e-8 + + # Calculates IoU. + iou = i_area / u_area + + return iou + + +def _self_suppression(in_args): + iou, _, iou_sum = in_args + batch_size = iou.shape[0] + can_suppress_others = jnp.reshape( + jnp.max(iou, 1) <= 0.5, [batch_size, -1, 1]).astype(iou.dtype) + iou_suppressed = jnp.reshape( + (jnp.max(can_suppress_others * iou, 1) <= 0.5).astype(iou.dtype), + [batch_size, -1, 1]) * iou + iou_sum_new = jnp.sum(iou_suppressed, [1, 2]) + return iou_suppressed, jnp.any(iou_sum - iou_sum_new > 0.5), iou_sum_new + + +def _cross_suppression(in_args): + boxes, box_slice, iou_threshold, inner_idx = in_args + batch_size = boxes.shape[0] + new_slice = jax.lax.dynamic_slice( + boxes, [0, inner_idx * _NMS_TILE_SIZE, 0], + [batch_size, _NMS_TILE_SIZE, 4]) + iou = _bbox_overlap(new_slice, box_slice) + ret_slice = jnp.expand_dims( + (jnp.all(iou < iou_threshold, [1])).astype(box_slice.dtype), + 2) * box_slice + return boxes, ret_slice, iou_threshold, inner_idx + 1 + + +def _suppression_loop_body(in_args): + """Process boxes in the range [idx*_NMS_TILE_SIZE, (idx+1)*_NMS_TILE_SIZE). + + Args: + in_args: A tuple of arguments: boxes, iou_threshold, output_size, idx + + Returns: + boxes: updated boxes. + iou_threshold: pass down iou_threshold to the next iteration. + output_size: the updated output_size. + idx: the updated induction variable. + """ + boxes, iou_threshold, output_size, idx = in_args + num_tiles = boxes.shape[1] // _NMS_TILE_SIZE + batch_size = boxes.shape[0] + + # Iterates over tiles that can possibly suppress the current tile. + box_slice = jax.lax.dynamic_slice( + boxes, [0, idx * _NMS_TILE_SIZE, 0], + [batch_size, _NMS_TILE_SIZE, 4]) + def _loop_cond(in_args): + _, _, _, inner_idx = in_args + return inner_idx < idx + + _, box_slice, _, _ = jax.lax.while_loop( + _loop_cond, + _cross_suppression, (boxes, box_slice, iou_threshold, + 0)) + + # Iterates over the current tile to compute self-suppression. + iou = _bbox_overlap(box_slice, box_slice) + mask = jnp.expand_dims( + jnp.reshape(jnp.arange(_NMS_TILE_SIZE), [1, -1]) > jnp.reshape( + jnp.arange(_NMS_TILE_SIZE), [-1, 1]), 0) + iou *= (jnp.logical_and(mask, iou >= iou_threshold)).astype(iou.dtype) + + def _loop_cond2(in_args): + _, loop_condition, _ = in_args + return loop_condition + + suppressed_iou, _, _ = jax.lax.while_loop( + _loop_cond2, _self_suppression, + (iou, True, + jnp.sum(iou, [1, 2]))) + suppressed_box = jnp.sum(suppressed_iou, 1) > 0 + box_slice *= jnp.expand_dims(1.0 - suppressed_box.astype(box_slice.dtype), 2) + + # Uses box_slice to update the input boxes. + mask = jnp.reshape( + (jnp.equal(jnp.arange(num_tiles), idx)).astype(boxes.dtype), + [1, -1, 1, 1]) + boxes = jnp.tile(jnp.expand_dims( + box_slice, 1), [1, num_tiles, 1, 1]) * mask + jnp.reshape( + boxes, [batch_size, num_tiles, _NMS_TILE_SIZE, 4]) * (1 - mask) + boxes = jnp.reshape(boxes, [batch_size, -1, 4]) + + # Updates output_size. + output_size += jnp.sum( + jnp.any(box_slice > 0, [2]).astype(jnp.int32), [1]) + return boxes, iou_threshold, output_size, idx + 1 + + +def non_max_suppression_padded(scores: jnp.ndarray, + boxes: jnp.ndarray, + max_output_size: jnp.ndarray, + iou_threshold: float, + return_idx: bool = False): + """A wrapper that handles non-maximum suppression. + + Assumption: + * The boxes are sorted by scores unless the box is a dot (all coordinates + are zero). + * Boxes with higher scores can be used to suppress boxes with lower scores. + + The overal design of the algorithm is to handle boxes tile-by-tile: + + boxes = boxes.pad_to_multiply_of(tile_size) + num_tiles = len(boxes) // tile_size + output_boxes = [] + for i in range(num_tiles): + box_tile = boxes[i*tile_size : (i+1)*tile_size] + for j in range(i - 1): + suppressing_tile = boxes[j*tile_size : (j+1)*tile_size] + iou = _bbox_overlap(box_tile, suppressing_tile) + # if the box is suppressed in iou, clear it to a dot + box_tile *= _update_boxes(iou) + # Iteratively handle the diagnal tile. + iou = _box_overlap(box_tile, box_tile) + iou_changed = True + while iou_changed: + # boxes that are not suppressed by anything else + suppressing_boxes = _get_suppressing_boxes(iou) + # boxes that are suppressed by suppressing_boxes + suppressed_boxes = _get_suppressed_boxes(iou, suppressing_boxes) + # clear iou to 0 for boxes that are suppressed, as they cannot be used + # to suppress other boxes any more + new_iou = _clear_iou(iou, suppressed_boxes) + iou_changed = (new_iou != iou) + iou = new_iou + # remaining boxes that can still suppress others, are selected boxes. + output_boxes.append(_get_suppressing_boxes(iou)) + if len(output_boxes) >= max_output_size: + break + + Args: + scores: a tensor with a shape of [batch_size, anchors]. + boxes: a tensor with a shape of [batch_size, anchors, 4]. + max_output_size: a scalar integer `Tensor` representing the maximum number + of boxes to be selected by non max suppression. + iou_threshold: a float representing the threshold for deciding whether boxes + overlap too much with respect to IOU. + return_idx: bool. If true, addtionally return index of the remaining boxes. + Returns: + nms_scores: a tensor with a shape of [batch_size, max_output_size]. + It has the same dtype as input scores. + nms_proposals: a tensor with a shape of [batch_size, max_output_size, 4]. + It has the same dtype as input boxes. + idx: only return if return_idx == True. A int32 array of shape + [batch_size, max_output_size]. The values are in range [0, num_boxes): + the indexes of the remaining boxes. + """ + batch_size = boxes.shape[0] + num_boxes = boxes.shape[1] + pad = int(np.ceil(float(num_boxes) / _NMS_TILE_SIZE) + ) * _NMS_TILE_SIZE - num_boxes + boxes = jnp.pad(boxes.astype(jnp.float32), [[0, 0], [0, pad], [0, 0]]) + scores = jnp.pad(scores.astype(jnp.float32), [[0, 0], [0, pad]]) + num_boxes += pad + + def _loop_cond(in_args): + unused_boxes, unused_threshold, output_size, idx = in_args + return jnp.logical_and( + jnp.min(output_size) < max_output_size, + idx < num_boxes // _NMS_TILE_SIZE) + + selected_boxes, _, output_size, _ = jax.lax.while_loop( + _loop_cond, _suppression_loop_body, ( + boxes, iou_threshold, + jnp.zeros([batch_size], jnp.int32), + 0 + )) + idx = num_boxes - jax.lax.top_k( # pytype: disable=wrong-arg-types # jax-ndarray + jnp.any(selected_boxes > 0, [2]).astype(jnp.int32) * + jnp.expand_dims(jnp.arange(num_boxes, 0, -1), 0), + max_output_size)[0].astype(jnp.int32) + idx = jnp.minimum(idx, num_boxes - 1) + idx_return = idx + idx = jnp.reshape( + idx + jnp.reshape(jnp.arange(batch_size) * num_boxes, [-1, 1]), [-1]) + boxes = jnp.reshape( + (jnp.reshape(boxes, [-1, 4]))[idx], + [batch_size, max_output_size, 4]) + boxes = boxes * ( + jnp.reshape(jnp.arange(max_output_size), [1, -1, 1]) < jnp.reshape( + output_size, [-1, 1, 1])).astype(boxes.dtype) + scores = jnp.reshape( + jnp.reshape(scores, [-1, 1])[idx], + [batch_size, max_output_size]) + scores = scores * ( + jnp.reshape(jnp.arange(max_output_size), [1, -1]) < jnp.reshape( + output_size, [-1, 1])).astype(scores.dtype) + if return_idx: + return scores, boxes, idx_return + else: + return scores, boxes + + +def batched_nms_jax( + boxes: jnp.ndarray, + scores: jnp.ndarray, + idxs: jnp.ndarray, + output_size: int, + iou_threshold: float) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Class-independent NMS using a coordinate trick. + + Args: + boxes: array in shape N x 4, in format (x_min, y_min, x_max, y_max). Can be + eithor absolute or normalized. + scores: array in shape N. + idxs: array in shape N: the class index. We only apply NMS within + the same class. + output_size: int: the number of remaining boxes. + iou_threshold: float. A box will be suppressed if there is another box that + has a higher score and an IoU greater than the threshold. + Returns: + nms_boxes: a tensor with a shape of [[output_size, 4]. + nms_scores: a tensor with a shape of [output_size]. + nms_classes: a tensor with a shape of [output_size]. + """ + max_coordinate = boxes.max() + offsets = idxs * (max_coordinate + 1) + boxes_for_nms = boxes + offsets[:, None] + # non_max_suppression_padded uses an additional batch dimension. + nms_scores, _, keep = non_max_suppression_padded( # pytype: disable=wrong-arg-types # jax-ndarray + scores[None], boxes_for_nms[None], output_size, iou_threshold, + return_idx=True) + vmap_index = jax.vmap(lambda x, i: x[i]) + nms_boxes = vmap_index(boxes[None], keep) + nms_classes = vmap_index(idxs[None], keep) + # undo batch + return nms_boxes[0], nms_scores[0], nms_classes[0] diff --git a/scenic/projects/baselines/centernet/modeling/roi_align.py b/scenic/projects/baselines/centernet/modeling/roi_align.py new file mode 100644 index 0000000000000000000000000000000000000000..a31a59b666b183baa3ad233d958e449167315507 --- /dev/null +++ b/scenic/projects/baselines/centernet/modeling/roi_align.py @@ -0,0 +1,170 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""ROI Align implementation using einsum. + +This implementation is provided by Yuxin Wu. +""" +import functools +import einops +import jax +import jax.numpy as jnp + + +@functools.partial(jax.vmap, in_axes=(0, None, None)) +def _get_grid_per_box(box: jnp.ndarray, size: int, + sparse: bool) -> tuple[jnp.ndarray, jnp.ndarray]: + """Obtain a size x size meshgrid inside the given box. + + Args: + box: XYXY-format boxes of shape (T, 4). + size: Resolution of the grid. + sparse: Whether to return sparse meshgrid. + + Returns: + Two arrays, each has shape (T, size, size) if sparse=False, or + (T, size, 1) and (T, 1, size) if sparse=True. + """ + scale_x = size * 1.0 / (box[2] - box[0]) + scale_y = size * 1.0 / (box[3] - box[1]) + return jnp.meshgrid( # pytype: disable=bad-return-type # jnp-type + (jnp.arange(size, dtype=box.dtype) + 0.5) / scale_y + box[1], + (jnp.arange(size, dtype=box.dtype) + 0.5) / scale_x + box[0], + indexing="ij", + sparse=sparse) + + +def _roi_align_einsum(feature: jnp.ndarray, boxes: jnp.ndarray, + output_size: int, sampling_ratio: int) -> jnp.ndarray: + """An einsum-based implementation of ROIAlign.""" + height, width = feature.shape[:2] + grid_y, grid_x = _get_grid_per_box(boxes, output_size * sampling_ratio, True) + grid_y = jnp.squeeze(grid_y, axis=2) # (T, output_size * sampling_ratio) + grid_x = jnp.squeeze(grid_x, axis=1) + + def _get_index_and_weights(grid): + """Computes the 1d index & their weights to be used in interpolation.""" + grid -= 0.5 # Coordinates -> Index + x0 = jnp.floor(grid) + x0x1 = jnp.stack([x0, x0 + 1], axis=-1) + # No need to handle out-of-bounds indices here, because jax.nn.one_hot + # ensures that out-of-bounds indices are encoded to all-zero vector. + # This is equivalent to interpolation with zero padding. + + x1_weights = grid - x0 + x0x1_weights = jnp.stack([1 - x1_weights, x1_weights], axis=-1) + return x0x1, x0x1_weights + + def _get_einsum_weights(grid: jnp.ndarray, size: int) -> jnp.ndarray: + """Combines the 1d index & their interpolation weights to do einsum. + + Args: + grid: (T, output_size * sampling_ratio), 1d grid for each box. + size: the input size. + + Returns: + A tensor of shape (T, output_size, size), where result[n, i] is a vector + that determines how much every input contributes to the i-th output of + boxes[n]. + """ + # Each is (T, output_size * sampling_ratio, 2) + x0x1, x0x1_weights = _get_index_and_weights(grid) + x0x1 = einops.rearrange( + x0x1, "T (o s) two -> T o (s two)", s=sampling_ratio) + x0x1_weights = einops.rearrange( + x0x1_weights, "T (o s) two -> T o (s two) 1", s=sampling_ratio) + # Multiple samples defined by sampling_ratio should be averaged. + x0x1_weights = x0x1_weights / sampling_ratio + + # (T, output_size, s*2, size) + x0x1 = jax.nn.one_hot(x0x1, size, dtype=grid.dtype) + # In 1d case, every output value is interpolated from sampling_ratio*2 + # input values. So we sum the weights over the s*2 dimension. + return (x0x1 * x0x1_weights).sum(axis=-2) + + # Bilinear interpolation can be done by two 1d interpolations. + y_weights = _get_einsum_weights(grid_y, height) + x_weights = _get_einsum_weights(grid_x, width) + return jnp.einsum( # pytype: disable=wrong-arg-types # jnp-type + "HWc,ThH,TwW->Thwc", feature, y_weights, x_weights, optimize=True) + + +def roi_align(feature: jnp.ndarray, boxes: jnp.ndarray, output_size: int, + sampling_ratio: int) -> jnp.ndarray: + """ROIAlign operation that crops & resample features within the given boxes. + + Args: + feature: feature of shape (H, W, C). + boxes: XYXY boxes of shape (T, 4), boxes to crop from feature. + output_size: Output resolution. + sampling_ratio: Over-sampling ratio of each output value. + + Returns: + Output with shape (T, output_size, output_size, C). + """ + if len(feature.shape) != 3: + raise ValueError(f"Expect 3d feature in roi_align! Got {feature.shape}") + if len(boxes.shape) != 2: + raise ValueError(f"Expect 2d boxes in roi_align! Got {boxes.shape}") + return _roi_align_einsum(feature, boxes, output_size, sampling_ratio) + + +def _multilevel_roi_align_loop(features: list[jnp.ndarray], + boxes: jnp.ndarray, + feature_ids: jnp.ndarray, + output_size: int, + sampling_ratio: int = 2, + roi_align_func=roi_align) -> jnp.ndarray: + """A loop implementation of multilevel ROIAlign.""" + batch_roi_align = jax.vmap(roi_align_func, in_axes=(0, 0, None, None)) + results = [] + for idx, feature in enumerate(features): + # Just run roi_align on all features, and mask out those not needed. + cropped = batch_roi_align(feature, boxes, output_size, sampling_ratio) + mask = (feature_ids == idx)[:, :, None, None, None] + results.append(cropped * mask) + return sum(results) + + +def multilevel_roi_align(features: list[jnp.ndarray], + boxes: jnp.ndarray, + feature_ids: jnp.ndarray, + output_size: int, + sampling_ratio: int = 2) -> jnp.ndarray: + """ROIAlign on multilevel features. + + Args: + features: A list of (B, Hi, Wi, C) features with different spatial shapes. + boxes: (B, T, 4) boxes in XYXY format, coordinates should have the same + scale as each corresponding feature. + feature_ids: A (B, T) integer array, each value in range of [0, ..., + len(features) - 1] specifying the feature to crop each box from. + output_size: Output resolution. + sampling_ratio: Over-sampling ratio of each output value. + + Returns: + Cropped and resized features of shape (B, T, output_size, output_size, C). + """ + channels = [x.shape[-1] for x in features] + if len(set(channels)) != 1: + raise ValueError("multilevel_roi_align() needs features with same " + f"number of channels. Got {channels}.") + if feature_ids.dtype not in [jnp.int32, jnp.int64]: + raise TypeError(f"feature_ids must be integers. Got {feature_ids.dtype}") + if sampling_ratio <= 0: + raise ValueError("sampling_ratio must be larger than 0. " + f"Got {sampling_ratio}!") + + return _multilevel_roi_align_loop(features, boxes, feature_ids, output_size, + sampling_ratio) diff --git a/scenic/projects/baselines/centernet/modeling/roi_head_utils.py b/scenic/projects/baselines/centernet/modeling/roi_head_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..006c433218d068b9bdf2598ef48ea95817f68d41 --- /dev/null +++ b/scenic/projects/baselines/centernet/modeling/roi_head_utils.py @@ -0,0 +1,503 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Util functions for RoI Head. + +The box operation code is forked from +https://github.com/google-research/google-research/blob/master/fvlm/utils/\ +box_utils.py + +The detection post-processing code is forked from +https://github.com/google-research/google-research/blob/master/fvlm/ops/\ +generate_detections.py +""" +import functools +from typing import Any, Dict, Optional, Sequence, Tuple + +import jax +import jax.numpy as jnp +import numpy as np + +from scenic.projects.baselines.centernet.modeling import nms + +Array = jnp.ndarray +_EPSILON = 1e-7 +BBOX_XFORM_CLIP = np.log(1000. / 16.) + + +def pairwise_iou(boxes1: Array, boxes2: Array) -> Array: + """Compute pairwise IoU between two batches of boxes. + + Given two Boxes of size N and M, compute the IoU (intersection over + union) between **all** N x M pairs of boxes. + + Args: + boxes1: N bounding boxes. + boxes2: M bounding boxes. + + Returns: + IoU matrix of size (N, M). Invalid boxes will have a IoU of + 0 with any other boxes. + """ + if boxes1.ndim != 2 or boxes2.ndim != 2: + raise ValueError("pairwise_iou only supports 2D Boxes! " + "Either flatten your inputs or use vmap.") + area1 = (boxes1[..., 2] - boxes1[..., 0]) * (boxes1[..., 3] - boxes1[..., 1]) + area2 = (boxes2[..., 2] - boxes2[..., 0]) * (boxes2[..., 3] - boxes2[..., 1]) + + x1y1 = jnp.maximum(boxes1[:, None, :2], boxes2[:, :2]) + x2y2 = jnp.minimum(boxes1[:, None, 2:], boxes2[:, 2:]) + intersection = jnp.maximum(x2y2 - x1y1, 0) # (N, M, 2) + intersection = intersection[:, :, 0] * intersection[:, :, 1] + + union = area1[:, None] + area2 - intersection + # Intersection must be 0 when union is 0. + iou = intersection / jnp.where(union > 0, union, 1.0) + return iou + + +def encode_boxes(boxes: Array, + anchors: Array, + weights: Optional[Sequence[float]] = None) -> Array: + """Encode boxes to targets. + + Args: + boxes: a tensor whose last dimension is 4 representing the coordinates + of boxes in ymin, xmin, ymax, xmax order. + anchors: a tensor whose shape is the same as, or `broadcastable` to `boxes`, + representing the coordinates of anchors in ymin, xmin, ymax, xmax order. + weights: None or a list of four float numbers used to scale coordinates. + + Returns: + encoded_boxes: a tensor whose shape is the same as `boxes` representing the + encoded box targets. + + Raises: + ValueError: If the last dimension of boxes is not 4. + """ + if boxes.shape[-1] != 4: + raise ValueError( + "boxes.shape[-1] is {:d}, but must be 4.".format(boxes.shape[-1])) + + boxes = boxes.astype(anchors.dtype) + ymin = boxes[..., 0:1] + xmin = boxes[..., 1:2] + ymax = boxes[..., 2:3] + xmax = boxes[..., 3:4] + box_h = ymax - ymin + box_w = xmax - xmin + box_yc = ymin + 0.5 * box_h + box_xc = xmin + 0.5 * box_w + + anchor_ymin = anchors[..., 0:1] + anchor_xmin = anchors[..., 1:2] + anchor_ymax = anchors[..., 2:3] + anchor_xmax = anchors[..., 3:4] + anchor_h = anchor_ymax - anchor_ymin + anchor_w = anchor_xmax - anchor_xmin + anchor_yc = anchor_ymin + 0.5 * anchor_h + anchor_xc = anchor_xmin + 0.5 * anchor_w + + encoded_dy = (box_yc - anchor_yc) / anchor_h + encoded_dx = (box_xc - anchor_xc) / anchor_w + encoded_dh = jnp.log(box_h / anchor_h) + encoded_dw = jnp.log(box_w / anchor_w) + if weights: + encoded_dy *= weights[0] + encoded_dx *= weights[1] + encoded_dh *= weights[2] + encoded_dw *= weights[3] + + encoded_boxes = jnp.concatenate( + [encoded_dy, encoded_dx, encoded_dh, encoded_dw], + axis=-1) + return encoded_boxes + + +def decode_boxes(encoded_boxes: Array, + anchors: Array, + weights: Optional[Sequence[float]] = None) -> Array: + """Decode boxes. + + Args: + encoded_boxes: a tensor whose last dimension is 4 representing the + coordinates of encoded boxes in ymin, xmin, ymax, xmax order. + anchors: a tensor whose shape is the same as, or `broadcastable` to `boxes`, + representing the coordinates of anchors in ymin, xmin, ymax, xmax order. + weights: None or a list of four float numbers used to scale coordinates. + + Returns: + encoded_boxes: a tensor whose shape is the same as `boxes` representing the + decoded box targets. + """ + if encoded_boxes.shape[-1] != 4: + raise ValueError( + "encoded_boxes.shape[-1] is {:d}, but must be 4." + .format(encoded_boxes.shape[-1])) + + encoded_boxes = encoded_boxes.astype(anchors.dtype) + dy = encoded_boxes[..., 0:1] + dx = encoded_boxes[..., 1:2] + dh = encoded_boxes[..., 2:3] + dw = encoded_boxes[..., 3:4] + if weights: + dy /= weights[0] + dx /= weights[1] + dh /= weights[2] + dw /= weights[3] + dh = jnp.minimum(dh, BBOX_XFORM_CLIP) + dw = jnp.minimum(dw, BBOX_XFORM_CLIP) + + anchor_ymin = anchors[..., 0:1] + anchor_xmin = anchors[..., 1:2] + anchor_ymax = anchors[..., 2:3] + anchor_xmax = anchors[..., 3:4] + anchor_h = anchor_ymax - anchor_ymin + anchor_w = anchor_xmax - anchor_xmin + anchor_yc = anchor_ymin + 0.5 * anchor_h + anchor_xc = anchor_xmin + 0.5 * anchor_w + + decoded_boxes_yc = dy * anchor_h + anchor_yc + decoded_boxes_xc = dx * anchor_w + anchor_xc + decoded_boxes_h = jnp.exp(dh) * anchor_h + decoded_boxes_w = jnp.exp(dw) * anchor_w + + decoded_boxes_ymin = decoded_boxes_yc - 0.5 * decoded_boxes_h + decoded_boxes_xmin = decoded_boxes_xc - 0.5 * decoded_boxes_w + decoded_boxes_ymax = decoded_boxes_ymin + decoded_boxes_h + decoded_boxes_xmax = decoded_boxes_xmin + decoded_boxes_w + + decoded_boxes = jnp.concatenate( + [decoded_boxes_ymin, decoded_boxes_xmin, + decoded_boxes_ymax, decoded_boxes_xmax], + axis=-1) + return decoded_boxes + + +def clip_boxes(boxes: Array, + image_shape: Array) -> Array: + """Clips boxes to image boundaries. It's called from roi_ops.py. + + Args: + boxes: a tensor whose last dimension is 4 representing the coordinates + of boxes in ymin, xmin, ymax, xmax order. + image_shape: (batch_size, 1, 2). [height, width]. + + Returns: + clipped_boxes: a tensor whose shape is the same as `boxes` representing the + clipped boxes in ymin, xmin, ymax, xmax order. + + Raises: + ValueError: If the last dimension of boxes is not 4. + """ + if boxes.shape[-1] != 4: + raise ValueError( + "boxes.shape[-1] is {:d}, but must be 4.".format(boxes.shape[-1])) + + image_shape = image_shape.astype(boxes.dtype) + height, width = jnp.split(image_shape, 2, axis=-1) + y_x_max_list = jnp.concatenate([height, width, height, width], -1) + + return jnp.maximum(jnp.minimum(boxes, y_x_max_list), 0.0) + + +def generate_detections( + class_outputs: Array, + box_outputs: Array, + pre_nms_num_detections: int = 5000, + post_nms_num_detections: int = 100, + nms_threshold: float = 0.3, + score_threshold: float = 0.05, + class_box_regression: bool = True, +) -> Tuple[Array, Array, Array, Array]: + """Generates the detections given anchor boxes and predictions. + + Args: + class_outputs: An array with shape [batch, num_boxes, num_classes] of class + logits for each box. + box_outputs: An array with shape [batch, num_boxes, num_classes, 4] of + predicted boxes in [ymin, xmin, ymax, xmax] order. Also accept num_classes + = 1 for class agnostic box outputs. + pre_nms_num_detections: An integer that specifies the number of candidates + before NMS. + post_nms_num_detections: An integer that specifies the number of candidates + after NMS. + nms_threshold: A float number to specify the IOU threshold of NMS. + score_threshold: A float representing the threshold for deciding when to + remove boxes based on score. + class_box_regression: Whether to use class-specific box regression or not. + Default True is to assume box_outputs are class-specific. + + Returns: + A tuple of arrays corresponding to + (box coordinates, object categories for each boxes, and box scores). + """ + batch_size, _, num_classes = jnp.shape(class_outputs) + + final_boxes = [] + final_scores = [] + final_classes = [] + all_valid = [] + for b in range(batch_size): + nmsed_boxes = [] + nmsed_scores = [] + nmsed_classes = [] + # Skips the background class. + for i in range(1, num_classes): + box_idx = i if class_box_regression else 0 + boxes_i = box_outputs[b, :, box_idx] + scores_i = class_outputs[b, :, i] + # Filter by threshold. + above_threshold = scores_i > score_threshold + scores_i = jnp.where(above_threshold, scores_i, -1) + + # Obtains pre_nms_num_boxes before running NMS. + scores_i, indices = jax.lax.top_k( + scores_i, k=min(pre_nms_num_detections, scores_i.shape[-1]) + ) + boxes_i = boxes_i[indices] + + nmsed_scores_i, nmsed_boxes_i = nms.non_max_suppression_padded( # pytype: disable=wrong-arg-types # jax-ndarray + scores=scores_i[None, ...], + boxes=boxes_i[None, ...], + max_output_size=post_nms_num_detections, + iou_threshold=nms_threshold, + ) + + nmsed_classes_i = jnp.ones([post_nms_num_detections]) * i + nmsed_boxes.append(nmsed_boxes_i[0]) + nmsed_scores.append(nmsed_scores_i[0]) + nmsed_classes.append(nmsed_classes_i) + + # Concats results from all classes and sort them. + nmsed_boxes = jnp.concatenate(nmsed_boxes, axis=0) + nmsed_scores = jnp.concatenate(nmsed_scores, axis=0) + nmsed_classes = jnp.concatenate(nmsed_classes, axis=0) + nmsed_scores, indices = jax.lax.top_k( + nmsed_scores, k=post_nms_num_detections) + nmsed_boxes = nmsed_boxes[indices] + nmsed_classes = nmsed_classes[indices] + valid_detections = jnp.sum((nmsed_scores > 0.0).astype(jnp.int32)) + + all_valid.append(valid_detections) + final_classes.append(nmsed_classes) + final_scores.append(nmsed_scores) + final_boxes.append(nmsed_boxes) + + return ( + jnp.stack(final_boxes, axis=0), + jnp.stack(final_scores, axis=0), + jnp.stack(final_classes, axis=0), + jnp.stack(all_valid, axis=0), + ) + + +@functools.partial(jax.vmap, in_axes=[0, 0], out_axes=0) +def batch_gather(x: Array, idx: Array) -> Array: + """Performs a batched gather of the data. + + Args: + x: A [batch, num_in, ...] JTensor of data to gather from. + idx: A [batch, num_out] JTensor of dtype int32 or int64 specifying which + elements to gather. Every value is expected to be in the range of [0, + num_in]. + + Returns: + A [batch, num_out, ...] JTensor of gathered data. + """ + return x[idx] + + +def generate_detections_vmap( + class_outputs: Array, + box_outputs: Array, + pre_nms_num_detections: int = 5000, + post_nms_num_detections: int = 100, + nms_threshold: float = 0.3, + score_threshold: float = 0.05, + class_box_regression: bool = True, +) -> Tuple[Array, Array, Array, Array]: + """Generates the detections given anchor boxes and predictions. + + + Args: + class_outputs: An array with shape [batch, num_boxes, num_classes] of class + logits for each box. + box_outputs: An array with shape [batch, num_boxes, num_classes, 4] of + predicted boxes in [ymin, xmin, ymax, xmax] order. Also accept num_classes + = 1 for class agnostic box outputs. + pre_nms_num_detections: An integer that specifies the number of candidates + before NMS. + post_nms_num_detections: An integer that specifies the number of candidates + after NMS. + nms_threshold: A float number to specify the IOU threshold of NMS. + score_threshold: A float representing the threshold for deciding when to + remove boxes based on score. + class_box_regression: Whether to use class-specific box regression or not. + Default True is to assume box_outputs are class-specific. + + Returns: + A tuple of arrays corresponding to + (box coordinates, object categories for each boxes, and box scores). + """ + _, _, num_classes = jnp.shape(class_outputs) + + if not class_box_regression: + if num_classes == 1: + raise ValueError( + "If using `class_box_regression=False` we expect num_classes = 1" + ) + box_outputs = jnp.tile(box_outputs, [1, 1, num_classes, 1]) + + box_outputs = box_outputs[:, :, 1:, :] + box_scores = class_outputs[:, :, 1:] + + def batched_per_class_nms_fn(per_class_boxes, per_class_scores): + # Transpose the data so the class dim is now a batch dim. + per_class_boxes = jnp.transpose(per_class_boxes, (1, 0, 2)) + per_class_scores = jnp.transpose(per_class_scores, (1, 0)) + + above_threshold = per_class_scores > score_threshold + per_class_scores = jnp.where( + above_threshold, per_class_scores, per_class_scores * 0 - 1 + ) + # Obtains pre_nms_num_boxes before running NMS. + per_class_scores, indices = jax.lax.top_k( + per_class_scores, + k=min(pre_nms_num_detections, per_class_scores.shape[-1]), + ) + per_class_boxes = batch_gather(per_class_boxes, indices) + + # Run NMS where the [num_classes, ...] dim is the batch dim. + nmsed_scores, nmsed_boxes = nms.non_max_suppression_padded( # pytype: disable=wrong-arg-types # jax-ndarray + scores=per_class_scores, + boxes=per_class_boxes, + max_output_size=post_nms_num_detections, + iou_threshold=nms_threshold, + ) + + nmsed_classes = jnp.ones([num_classes - 1, post_nms_num_detections]) + nmsed_classes *= jnp.arange(1, num_classes, dtype=jnp.int32)[:, None] + + nmsed_boxes = jnp.reshape(nmsed_boxes, [-1, 4]) + nmsed_scores = jnp.reshape(nmsed_scores, [-1]) + nmsed_classes = jnp.reshape(nmsed_classes, [-1]) + + nmsed_scores, indices = jax.lax.top_k( + nmsed_scores, k=post_nms_num_detections) + nmsed_boxes = nmsed_boxes[indices] + nmsed_classes = nmsed_classes[indices] + valid_detections = jnp.sum((nmsed_scores > 0.0).astype(jnp.int32)) + return nmsed_boxes, nmsed_scores, nmsed_classes, valid_detections + + batched_per_class_nms = jax.vmap( + batched_per_class_nms_fn, in_axes=0, out_axes=0 + ) + + final_boxes, final_scores, final_classes, valid_detections = ( + batched_per_class_nms(box_outputs, box_scores) + ) + return final_boxes, final_scores, final_classes, valid_detections + + +def process_and_generate_detections( + box_outputs: Array, + class_outputs: Array, + anchor_boxes: Array, + image_shape: Array, + pre_nms_num_detections: int = 5000, + post_nms_num_detections: int = 100, + nms_threshold: float = 0.5, + score_threshold: float = 0.05, + class_box_regression: bool = True, + box_weights: Any = (10.0, 10.0, 5.0, 5.0), + use_vmap: bool = True, +) -> Dict[str, Array]: + """Generate final detections. + + Move softmax of class_outputs out of this function so that it can multiply + with proposal scores. + + Args: + box_outputs: An array of shape of [batch_size, K, num_classes * 4] + representing the class-specific box coordinates relative to anchors. + class_outputs: An array of shape of [batch_size, K, num_classes] + representing the class logits before applying score activiation. + anchor_boxes: An array of shape of [batch_size, K, 4] representing the + corresponding anchor boxes w.r.t `box_outputs`. + image_shape: An array of shape of [batch_size, 2] storing the image height + and width w.r.t. the scaled image, i.e. the same image space as + `box_outputs` and `anchor_boxes`. + pre_nms_num_detections: An integer that specifies the number of candidates + before NMS. + post_nms_num_detections: An integer that specifies the number of candidates + after NMS. + nms_threshold: A float number to specify the IOU threshold of NMS. + score_threshold: A float representing the threshold for deciding when to + remove boxes based on score. + class_box_regression: Whether to use class-specific box regression or not. + Default True is to assume box_outputs are class-specific. + box_weights: four float numbers used to scale coordinates. + use_vmap: bool; + + Returns: + A dictionary with the following key-value pairs: + detection_boxes: `float` array of shape [batch_size, max_total_size, 4] + representing top detected boxes in [y1, x1, y2, x2]. + detection_scores: `float` array of shape [batch_size, max_total_size] + representing sorted confidence scores for detected boxes. The values are + between [0, 1]. + detection_classes: `int` array of shape [batch_size, max_total_size] + representing classes for detected boxes. + num_detections: `int` array of shape [batch_size] only the top + `valid_detections` boxes are valid detections. + """ + _, num_locations, num_classes = class_outputs.shape + + if class_box_regression: + num_detections = num_locations * num_classes + box_outputs = box_outputs.reshape(-1, num_detections, 4) + anchor_boxes = jnp.tile( + jnp.expand_dims(anchor_boxes, axis=2), [1, 1, num_classes, 1]) + anchor_boxes = anchor_boxes.reshape(-1, num_detections, 4) + + decoded_boxes = decode_boxes( + box_outputs, anchor_boxes, weights=box_weights) + decoded_boxes = clip_boxes( + decoded_boxes, image_shape[:, None, :]) + if class_box_regression: + decoded_boxes = decoded_boxes.reshape(-1, num_locations, num_classes, 4) + else: + decoded_boxes = decoded_boxes[:, :, None, :] + + generate_detections_fn = ( + generate_detections_vmap if use_vmap else generate_detections) + + nmsed_boxes, nmsed_scores, nmsed_classes, valid_detections = ( + generate_detections_fn( + class_outputs, + decoded_boxes, + pre_nms_num_detections, + post_nms_num_detections, + nms_threshold, + score_threshold, + class_box_regression, + )) + + return { + "num_detections": valid_detections, + "detection_boxes": nmsed_boxes, + "detection_classes": nmsed_classes, + "detection_scores": nmsed_scores, + } diff --git a/scenic/projects/baselines/centernet/modeling/roi_heads.py b/scenic/projects/baselines/centernet/modeling/roi_heads.py new file mode 100644 index 0000000000000000000000000000000000000000..cd97e0e2f09ca87285909a2ba02074f384dce435 --- /dev/null +++ b/scenic/projects/baselines/centernet/modeling/roi_heads.py @@ -0,0 +1,471 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Code to implement a cascade ROI head in two stage detectors. + +The original FasterRCNN head can be a special case of CascadeROIHead by +setting a single matching_threshold. + +Modified from +https://github.com/google-research/google-research/blob/master/fvlm/ +modeling/heads.py + +""" + +import math +from typing import Any, Dict, List, Optional + +from flax import linen as nn +import jax +import jax.numpy as jnp +import optax +from scenic.projects.baselines.centernet.modeling import box_head as roi_box_head +from scenic.projects.baselines.centernet.modeling import iou_assignment +from scenic.projects.baselines.centernet.modeling import roi_align +from scenic.projects.baselines.centernet.modeling import roi_head_utils + +Assignment = iou_assignment.Assignment +ArrayDict = Dict[str, jnp.ndarray] +ArrayList = List[jnp.ndarray] +Array = jnp.ndarray + + +class CascadeROIHeads(nn.Module): + """Module that performs per-region computation in an R-CNN.""" + + input_strides: dict[str, int] + """Stride of each input feature. + + The keys can be a subset of what will be passed to __call__. In that case + the extra input features are not used. + """ + num_classes: int = 80 + conv_dims: Any = () + conv_norm: Optional[str] = None + fc_dims: Any = (1024, 1024) + + samples_per_image: int = 512 + """Number of RoI samples to train on.""" + + positive_fraction: float = 0.25 + """The desired fraction of positive RoIs selected for training.""" + + matching_threshold: Any = (0.6, 0.7, 0.8) + """IoU threshold to match proposals with groundtruth. + Proposals are assigned foreground or background based on this threshold. + """ + cascade_box_weights: Any = ( + (10.0, 10.0, 5.0, 5.0), + (20.0, 20.0, 10.0, 10.0), + (30.0, 30.0, 15.0, 15.0),) + + nms_threshold: float = 0.7 # Final NMS threshold + class_box_regression: bool = False # class specific box head + mult_proposal_score: bool = True + scale_cascade_gradient: bool = False + use_sigmoid_ce: bool = False + use_zeroshot_cls: bool = False + add_box_pred_layers: bool = False + zs_weight_dim: int = 512 + zs_weight: Optional[jnp.ndarray] = None + one_class_per_proposal: bool = False + return_last_proposal: bool = False + append_gt_boxes: bool = True + score_threshold: float = 0.05 + post_nms_num_detections: int = 100 + return_detection_in_training: bool = False + + @property + def _levels(self) -> list[int]: + """Sorted list of input feature levels.""" + return [int(math.log2(s)) for s in sorted(self.input_strides.values())] + + def label_and_sample_proposals( + self, proposals: jnp.ndarray, gt_boxes: jnp.ndarray, + gt_classes: jnp.ndarray) -> tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Match proposals with ground truth, and sample a subset for training. + + Args: + proposals: (B, T, 4) proposal boxes. + gt_boxes: (B, M, 4) ground truth boxes. + gt_classes: (B, M) integer labels in range [1, #classes]. + + Returns: + proposals: (B, T', 4) sampled proposals, sorted by their foreground / + background status. Foregrounds are placed at the beginning. + matched_idxs: (B, T') integer id of matched GT for each sampled proposal. + If the proposal is background, its corresponding item could point to any + GT. + matched_classes: (B, T') integer labels for each sampled proposals. Label + is 0 if the proposal is considered background. + """ + + def _impl(proposals: jnp.ndarray, gt_boxes: jnp.ndarray, gt_classes, + key: jnp.ndarray) -> tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + iou = roi_head_utils.pairwise_iou(gt_boxes, proposals) + matched_idxs, assignments = iou_assignment.label_assignment( + iou, [self.matching_threshold[0]], + [Assignment.NEGATIVE, Assignment.POSITIVE]) + num_samples = self.samples_per_image + # Invalid proposals will have IoU=0 but should be ignored. + valid = ( + (proposals >= 0) | (proposals != proposals[..., :1])).any(axis=-1) + assignments = jnp.where(valid, assignments, Assignment.IGNORE) + assignments = iou_assignment.subsample_assignments( + assignments, num_samples, self.positive_fraction, key) + # Select the final sampled proposals, with foreground first. + assert Assignment.IGNORE < Assignment.NEGATIVE < Assignment.POSITIVE + sampled_idxs = jnp.argsort(-assignments)[:num_samples] + + assignments = assignments[sampled_idxs] + proposals = proposals[sampled_idxs] + matched_idxs = matched_idxs[sampled_idxs] + + # Note: invalid box will have an IoU of 0 with any boxes. As long as + # threshold > 0, invalid GT will not match any proposals. + matched_classes = gt_classes[matched_idxs] + matched_classes = jnp.where(assignments != Assignment.POSITIVE, 0, + matched_classes) + return proposals, matched_idxs, matched_classes # pytype: disable=bad-return-type # jax-ndarray + + key = self.make_rng("dropout") + return jax.vmap( + _impl, in_axes=0)(proposals, gt_boxes, gt_classes, + jax.random.split(key, gt_boxes.shape[0])) + + @nn.compact + def __call__( + self, features: dict[str, jnp.ndarray], image_shape: jnp.ndarray, + gt_boxes: jnp.ndarray, gt_classes: jnp.ndarray, + proposal_boxes: jnp.ndarray, proposal_scores: jnp.ndarray, *, + training: bool, postprocess: bool = True, debug: bool = False, + ): + """Forward computation. + + Args: + features: Features to crop RoIs from. + image_shape: array in shape B x 2. + gt_boxes: (B, max_gt_boxes, 4) + gt_classes: (B, max_gt_boxes) + proposal_boxes: (B, num_boxes, 4) boxes of region proposals. + proposal_scores: (B, num_boxes) scores of region proposals. + training: Training mode. + postprocess: if False, directly return box head outputs. + debug: if output more logs. + + Returns: + In training, a dict[str, jnp.ndarray] of losses. + In eval, a dict of final predictions. See return value of + `flax/ops/generate_detections.py:process_and_generate_detections()` + """ + strides = sorted(self.input_strides.items(), key=lambda x: x[1]) + features = [features[s[0]] for s in strides] # Sorted features + proposals = proposal_boxes + + if training: + # Proposals should have no gradients when training RoI heads. + proposals = jax.lax.stop_gradient(proposals) + if self.append_gt_boxes: + proposals = jnp.concatenate([proposals, gt_boxes], axis=1) + + proposals, matched_idxs, matched_classes = ( + self.label_and_sample_proposals(proposals, gt_boxes, gt_classes)) + matched_boxes = jnp.take_along_axis( + gt_boxes, + matched_idxs[..., None], + axis=1, + mode="promise_in_bounds") + + detections, losses = self._forward_box( # pytype: disable=wrong-arg-types # jax-ndarray + features, + proposals, + image_shape, + matched_boxes=matched_boxes, + matched_classes=matched_classes, + gt_boxes=gt_boxes, + gt_classes=gt_classes, + training=training, + debug=debug) + + return detections, losses + else: + detections, _ = self._forward_box( + features, proposals, image_shape, + proposal_scores=proposal_scores, training=training, + postprocess=postprocess, debug=debug) + return detections, {} + + def roi_align(self, + features: list[jnp.ndarray], + boxes: jnp.ndarray, + output_size: int, + sampling_ratio: int = 2) -> jnp.ndarray: + """RoIAlign on multilevel features. + + Args: + features: A sorted list of (B, Hi, Wi, C) features. + boxes: (B, T, 4) boxes in XYXY format, where T is the max number of boxes. + output_size: Output resolution. + sampling_ratio: Over-sampling ratio of each output value. + + Returns: + Cropped and resized features of shape (B, T, output_size, output_size, C). + Invalid boxes result in undefined, finite feature values. + """ + if len(features) != len(self.input_strides): + raise ValueError( + "features in roi_align does not match self.input_strides!") + min_level, max_level = min(self._levels), max(self._levels) + if len(self.input_strides) != max_level - min_level + 1: + raise ValueError("Features levels in ROIHeads must be contiguous! " + f"Got {self.input_strides}.") + area = (boxes[..., 2] - boxes[..., 0]) * (boxes[..., 3] - boxes[..., 1]) + sqrt_area = jnp.sqrt(jnp.maximum(area, 0)) + + # Eqn.(1) in the FPN paper. An input with area 224**2 (typical ImageNet + # pretraining size) is assigned to feature level 4 (stride 16). We can + # make these numbers configurable if needed. + level_assignment = jnp.floor(4 + jnp.log2(sqrt_area / 224 + 1e-8)) + level_assignment = jnp.clip( + level_assignment, min=min_level, max=max_level) + scale = jnp.float_power(2.0, level_assignment)[:, :, None] + + return roi_align.multilevel_roi_align( + features, + boxes / scale, + level_assignment.astype(jnp.int32) - min_level, + output_size=output_size, + sampling_ratio=sampling_ratio) + + def _forward_box( + self, + features: list[jnp.ndarray], + proposals: jnp.ndarray, + image_shape: jnp.ndarray, + proposal_scores: Optional[jnp.ndarray] = None, + matched_boxes: Optional[jnp.ndarray] = None, + matched_classes: Optional[jnp.ndarray] = None, + gt_boxes: Optional[jnp.ndarray] = None, + gt_classes: Optional[jnp.ndarray] = None, + *, + training: bool, + postprocess: bool = True, + debug: bool = False, + ): + """Forward box head and get losses or post-processed predictions. + + Args: + features: A sorted list of (B, Hi, Wi, C) features. + proposals: array in shape (B, samples_per_image, 4) in XYXY. + image_shape: array in shape B x 2 + proposal_scores: array in shape (B, samples_per_image): scores of + proposals. Used in inference only. + matched_boxes: shape (B, samples_per_image, 4). Used in training only. + matched_classes: shape (B, samples_per_image). Used in training only. + gt_boxes: array (B, max_gt_boxes, 4). Used in training only. + gt_classes: (B, max_gt_boxes). Used in training only. + training: bool. + postprocess: mostly should be True. If False (for debugging), return the + raw outputs of bounding box regression and classification. + debug: if return more info. + Returns: + detection_results: dict, only return if training == False. Otherwise {}. + detection_boxes: (B, samples_per_image, 4) + detection_scores: (B, samples_per_image) + detection_classes: (B, samples_per_image) + metrics: dict. only return if training == True. Owtherwise {}. + roi_cls_loss: float scalar. + roi_reg_loss: float scalar. + """ + head_outputs = [] + class_outputs = None + for k, (thresh, box_weights) in enumerate( + zip(self.matching_threshold, self.cascade_box_weights)): + if k > 0 and training: + matched_boxes, matched_classes = self._match_and_label_boxes( + proposals, gt_boxes, gt_classes, thresh) + roi_features = self.roi_align(features, proposals, 7) + # TODO(zhouxy): scale gradient here. This is an approximite version. + # Fix this with actual gradient scale. + if self.scale_cascade_gradient: + roi_features = roi_features / len(self.matching_threshold) + box_head = roi_box_head.ROIBoxHead( + num_classes=self.num_classes, + conv_dims=self.conv_dims, + conv_norm=self.conv_norm, + fc_dims=self.fc_dims, + class_box_regression=self.class_box_regression, + add_box_pred_layers=self.add_box_pred_layers, + use_zeroshot_cls=self.use_zeroshot_cls, + zs_weight_dim=self.zs_weight_dim, + zs_weight=self.zs_weight, + bias_init_prob=0.01 if self.use_sigmoid_ce else None, + name=f"box_head.{k}", + ) + class_outputs, box_outputs = box_head( + roi_features, training=training) + head_outputs.append( + (proposals, box_outputs, class_outputs, + matched_boxes, matched_classes)) + proposals = roi_head_utils.decode_boxes( + box_outputs, proposals, weights=box_weights) + # Do not backpropgate to previous stage proposals. Otherwise gives nan. + proposals = jax.lax.stop_gradient(proposals) + proposals = roi_head_utils.clip_boxes( + proposals, image_shape[:, None, [1, 0]]) + + if not training: + # Use box predictions from the last cascade stage. + proposals, box_outputs = head_outputs[-1][0], head_outputs[-1][1] + if not postprocess: + return {"class_outputs": class_outputs, "box_outputs": box_outputs}, {} + # Convert from XYXY to YXYX to be used with existing ops. + proposals_yxyx = proposals[..., [1, 0, 3, 2]] + box_outputs = box_outputs[..., [1, 0, 3, 2]] + # use class predictions as the average of all cascade stages + if self.use_sigmoid_ce: + class_outputs = sum([jax.nn.sigmoid(x[2]) for x in head_outputs] + ) / len(head_outputs) # B x N x (C + 1) + else: + class_outputs = sum( + [jax.nn.softmax(x[2], axis=-1) for x in head_outputs] + ) / len(head_outputs) # B x N x (C + 1) + if self.mult_proposal_score: + class_outputs = (class_outputs * proposal_scores[..., None]) ** 0.5 + if self.one_class_per_proposal: + class_outputs = class_outputs * ( + class_outputs == class_outputs[..., 1:].max(axis=-1)[..., None]) + detection_results = roi_head_utils.process_and_generate_detections( + box_outputs, class_outputs, proposals_yxyx, image_shape, + nms_threshold=self.nms_threshold, + score_threshold=self.score_threshold, + post_nms_num_detections=self.post_nms_num_detections, + class_box_regression=self.class_box_regression, + box_weights=self.cascade_box_weights[len(self.matching_threshold)-1], + use_vmap=True) + # YXYX to XYXY + detection_results["detection_boxes"] = detection_results[ + "detection_boxes"][..., [1, 0, 3, 2]] + return detection_results, {} + else: + outputs, metrics = {}, {} + for k, (head_output, box_weights) in enumerate( + zip(head_outputs, self.cascade_box_weights)): + (proposals, box_outputs, class_outputs, + matched_boxes, matched_classes) = head_output + metrics[f"stage{k}_num_proposals"] = proposals.shape[1] + + batch_size = proposals.shape[0] + area = (proposals[..., 2] - proposals[..., 0]) * ( + proposals[..., 3] - proposals[..., 1]) + valid_mask = area > 0 + fg_mask = (matched_classes > 0) & valid_mask # Foreground proposals. + metrics[f"stage{k}_num_valid_proposals"] = valid_mask.sum() / batch_size + metrics[f"stage{k}_num_positives_per_img_scalar"] = fg_mask.sum( + ) / batch_size + + eps = 1e-4 + pred_classes = class_outputs.argmax(axis=-1) + metrics[f"stage{k}_accuracy_scalar"] = ( + (pred_classes == matched_classes) & valid_mask) / ( + valid_mask.sum() + eps) + metrics[f"stage{k}_foreground_accuracy_scalar"] = ( + ((pred_classes == matched_classes) & fg_mask).sum() / ( + fg_mask.sum() + eps)) + if self.use_sigmoid_ce: + gt = jax.lax.stop_gradient(jax.nn.one_hot( + matched_classes, self.num_classes + 1)) # B x N x (C + 1) + cls_loss = optax.sigmoid_binary_cross_entropy(class_outputs, gt) + cls_loss = ( + cls_loss * valid_mask[..., None]).sum() / jnp.size(valid_mask) + else: + cls_loss = (optax.softmax_cross_entropy_with_integer_labels( + class_outputs, matched_classes) * valid_mask).sum() / ( + valid_mask.sum() + eps) + + box_targets = roi_head_utils.encode_boxes( + matched_boxes, proposals, weights=box_weights) + # Invalid GT boxes could encode to infinite values. Reset them to 0. + box_targets = jnp.where(jnp.isfinite(box_targets), box_targets, 0) + + assert not self.class_box_regression, ( + "class-specific box is not supported for cascade rcnn.") + reg_loss = jnp.abs(box_outputs - box_targets) + reg_loss = (reg_loss * fg_mask[..., None]).sum() / jnp.size(fg_mask) + metrics[f"stage{k}_roi_cls_loss"] = cls_loss + metrics[f"stage{k}_roi_reg_loss"] = reg_loss + if debug: + metrics[f"stage{k}_box_outputs"] = box_outputs + metrics[f"stage{k}_class_outputs"] = class_outputs + metrics[f"stage{k}_proposals"] = proposals + metrics[f"stage{k}_matched_boxes"] = matched_boxes + metrics[f"stage{k}_matched_classes"] = matched_classes + metrics[f"stage{k}_box_targets"] = box_targets + if self.return_last_proposal: + outputs["last_proposals"] = head_outputs[-1][0] + if self.return_detection_in_training: + proposals, box_outputs = head_outputs[-1][0], head_outputs[-1][1] + # Convert from XYXY to YXYX to be used with existing ops. + proposals_yxyx = proposals[..., [1, 0, 3, 2]] + box_outputs = box_outputs[..., [1, 0, 3, 2]] + # use class predictions as the average of all cascade stages + if self.use_sigmoid_ce: + class_outputs = sum([jax.nn.sigmoid(x[2]) for x in head_outputs] + ) / len(head_outputs) # B x N x (C + 1) + else: + class_outputs = sum( + [jax.nn.softmax(x[2], axis=-1) for x in head_outputs] + ) / len(head_outputs) # B x N x (C + 1) + detection_results = roi_head_utils.process_and_generate_detections( + box_outputs, class_outputs, proposals_yxyx, image_shape, + nms_threshold=self.nms_threshold, + score_threshold=self.score_threshold, + post_nms_num_detections=self.post_nms_num_detections, + class_box_regression=self.class_box_regression, + box_weights=self.cascade_box_weights[ + len(self.matching_threshold)-1]) + # YXYX to XYXY + detection_results["detection_boxes"] = detection_results[ + "detection_boxes"][..., [1, 0, 3, 2]] + outputs.update(detection_results) + return outputs, metrics # pytype: disable=bad-return-type # jax-ndarray + + def _match_and_label_boxes(self, proposals, gt_boxes, gt_classes, thresh): + """Match and label boxes in each cascade stages. + + Args: + proposals: array (B, samples_per_image, 4). + gt_boxes: array (B, max_gt_boxes, 4). Used in training only. + gt_classes: (B, max_gt_boxes). Used in training only. + thresh: float. + Returns: + matched_boxes: shape (B, samples_per_image, 4). + matched_classes: shape (B, samples_per_image). + """ + def _impl(proposals, gt_boxes, gt_classes): + iou = roi_head_utils.pairwise_iou(gt_boxes, proposals) + matched_idxs, assignments = iou_assignment.label_assignment( + iou, [thresh], [Assignment.NEGATIVE, Assignment.POSITIVE]) + matched_classes = gt_classes[matched_idxs] + matched_classes = jnp.where(assignments != Assignment.POSITIVE, 0, + matched_classes) + return matched_idxs, matched_classes + matched_idxs, matched_classes = jax.vmap(_impl, in_axes=0)( + proposals, gt_boxes, gt_classes) + matched_boxes = jnp.take_along_axis( + gt_boxes, + matched_idxs[..., None], + axis=1, + mode="promise_in_bounds") + return matched_boxes, matched_classes diff --git a/scenic/projects/baselines/centernet/modeling/vitdet.py b/scenic/projects/baselines/centernet/modeling/vitdet.py new file mode 100644 index 0000000000000000000000000000000000000000..2e378c55d26294e0b384e4faed20f5bda98d0060 --- /dev/null +++ b/scenic/projects/baselines/centernet/modeling/vitdet.py @@ -0,0 +1,583 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""ViTDet with simple FPN.""" + +import copy +import functools +from typing import Any, Optional + +import flax +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.projects.baselines.centernet.modeling import fpn + +__all__ = ['ViT', 'SimpleFeaturePyramid'] + +KERNEL_INIT = { + 'normal': nn.initializers.normal(stddev=0.02), +} + + +class Attention(nn.Module): + """Multi-head Attention block with relative position embeddings. + + Attributes: + dim (int): Number of input channels. + num_heads (int): Number of attention heads. + qkv_bias (bool: If True, add a learnable bias to query, key, value. + beit_like_qkv_bias (bool): no bias for k. + use_rel_pos (bool): If True, add relative positional embeddings to the + attention map. + rel_pos_zero_init (bool): If True, zero initialize relative positional + parameters. + input_size (int or None): Input resolution for calculating the relative + positional parameter size. + """ + dim: int + num_heads: int = 8 + qkv_bias: bool = True + beit_like_qkv_bias: bool = False + use_rel_pos: bool = False + rel_pos_zero_init: bool = True + input_size: Optional[Any] = None + kernel_init: str = 'normal' + dtype: jnp.dtype = jnp.float32 + + def get_rel_pos(self, q_size, k_size, rel_pos): + """Get relative positional embeddings. + + Args: + q_size (int): size of query q. + k_size (int): size of key k. + rel_pos (Tensor): relative position embeddings (L, C). + Returns: + Extracted positional embeddings according to relative positions. + """ + max_rel_dist = int(2 * max(q_size, k_size) - 1) + # Interpolate rel pos if needed. + if rel_pos.shape[0] != max_rel_dist: + # Interpolate rel pos. + rel_pos_resized = jax.image.resize( + rel_pos, + shape=(max_rel_dist, rel_pos.shape[1]), + method='linear', + ) + else: + rel_pos_resized = rel_pos + + # Scale the coords with short length if shapes for q and k are different. + q_coords = jnp.arange(q_size)[:, None] * max(k_size / q_size, 1.0) + k_coords = jnp.arange(k_size)[None, :] * max(q_size / k_size, 1.0) + relative_coords = (q_coords - k_coords) + (k_size - 1) * max( + q_size / k_size, 1.0) + relative_coords = relative_coords.astype(jnp.int32).reshape(-1) + return rel_pos_resized[relative_coords].reshape(q_size, k_size, -1) + + def add_decomposed_rel_pos( + self, attn, q, rel_pos_h, rel_pos_w, q_size, k_size): + """Calculate decomposed Relative Positional Embeddings from paper:`mvitv2`. + + Args: + attn (Tensor): attention map. + q (Tensor): query q in the attention layer with shape (B, q_h * q_w, C). + rel_pos_h (Tensor): relative position embeddings (Lh, C) for height axis. + rel_pos_w (Tensor): relative position embeddings (Lw, C) for width axis. + q_size (Tuple): spatial sequence size of query q with (q_h, q_w). + k_size (Tuple): spatial sequence size of key k with (k_h, k_w). + Returns: + attn (Tensor): attention map with added relative positional embeddings. + """ + q_h, q_w = q_size + k_h, k_w = k_size + rh = self.get_rel_pos(q_h, k_h, rel_pos_h) + rw = self.get_rel_pos(q_w, k_w, rel_pos_w) + + batch, _, dim = q.shape + r_q = q.reshape(batch, q_h, q_w, dim) + rel_h = jnp.einsum('bhwc,hkc->bhwk', r_q, rh) + rel_w = jnp.einsum('bhwc,wkc->bhwk', r_q, rw) + + attn = ( + attn.reshape(batch, q_h, q_w, k_h, k_w) + rel_h[ + :, :, :, :, None] + rel_w[:, :, :, None, :] + ).reshape(batch, q_h * q_w, k_h * k_w) + + return attn + + @nn.compact + def __call__(self, x): + batch, height, width, _ = x.shape + head_dim = self.dim // self.num_heads + if self.beit_like_qkv_bias: + q_bias = self.param( + 'q_bias', nn.initializers.zeros, (self.dim,)) + v_bias = self.param( + 'v_bias', nn.initializers.zeros, (self.dim,)) + k_bias = jnp.zeros((self.dim,), dtype=jnp.float32) + qkv_bias = jnp.concatenate([q_bias, k_bias, v_bias], axis=0) + qkv = nn.Dense( + self.dim * 3, use_bias=False, dtype=self.dtype, + kernel_init=KERNEL_INIT[self.kernel_init], name='qkv')( + x) # batch x height x width x 3dim + qkv = qkv + qkv_bias[None, None, None, :] + else: + qkv = nn.Dense( + self.dim * 3, use_bias=self.qkv_bias, dtype=self.dtype, + kernel_init=KERNEL_INIT[self.kernel_init], name='qkv')( + x) # batch x height x width x 3dim + qkv = qkv.reshape(batch, height * width, 3, self.num_heads, -1).transpose( + 2, 0, 3, 1, 4) # 3 x batch x num_heads x num_tokens x D + qkv = qkv.reshape(3, batch * self.num_heads, height * width, -1) + q, k, v = qkv[0], qkv[1], qkv[2] # [batch * num_heads, num_tokens, D] + attn = (q * (head_dim ** -0.5)) @ k.transpose( + 0, 2, 1) # [batch * num_heads, num_tokens, num_tokens] + if self.use_rel_pos: + rel_pos_h = self.param( + 'rel_pos_h', nn.initializers.zeros, + (2 * self.input_size[0] - 1, head_dim)) + rel_pos_w = self.param( + 'rel_pos_w', nn.initializers.zeros, + (2 * self.input_size[0] - 1, head_dim)) + attn = self.add_decomposed_rel_pos( + attn, q, rel_pos_h, rel_pos_w, + (height, width), (height, width)) + attn = jax.nn.softmax(attn) + x = (attn @ v).reshape(batch, self.num_heads, height, width, -1).transpose( + 0, 2, 3, 1, 4).reshape(batch, height, width, -1) + x = nn.Dense( + self.dim, dtype=self.dtype, kernel_init=KERNEL_INIT[self.kernel_init], + name='proj')(x) + return x + + +class Mlp(nn.Module): + """Multilayer perceptron.""" + + hidden_features: int + out_features: int + kernel_init: str = 'normal' + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x): + x = nn.Dense( + self.hidden_features, dtype=self.dtype, + kernel_init=KERNEL_INIT[self.kernel_init], name='fc1')(x) + x = nn.gelu(x, approximate=False) + x = nn.Dense( + self.out_features, dtype=self.dtype, + kernel_init=KERNEL_INIT[self.kernel_init], name='fc2')(x) + return x + + +class Block(nn.Module): + """Transformer blocks with support of window attention and residual blocks. + + Attributes: + dim (int): Number of input channels. + num_heads (int): Number of attention heads in each ViT block. + mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. + qkv_bias (bool): If True, add a learnable bias to query, key, value. + beit_like_qkv_bias (bool): no bias for k. + drop_path (float): Stochastic depth rate. + use_rel_pos (bool): If True, add relative positional embeddings to the + attention map. + rel_pos_zero_init (bool): If True, zero initialize relative positional + parameters. + window_size (int): Window size for window attention blocks. If it equals 0, + then not use window attention. + input_size (int or None): Input resolution for calculating the relative + positional parameter size. + """ + dim: int + num_heads: int + mlp_ratio: float = 4.0 + qkv_bias: bool = True + beit_like_qkv_bias: bool = False + drop_path: float = 0.0 + use_rel_pos: bool = False + rel_pos_zero_init: bool = True + window_size: int = 0 + input_size: Optional[Any] = None + kernel_init: str = 'normal' + layer_scale_init_value: float = -1.0 + dtype: jnp.dtype = jnp.float32 + + def window_partition(self, x): + """Partition into non-overlapping windows with padding if needed. + + Args: + x (array): input tokens with [B, H, W, C]. + Returns: + windows: windows after partition with [B * num_windows, window_size, + window_size, C]. + (Hp, Wp): padded height and width before partition + """ + batch, h, w, c = x.shape + + pad_h = (self.window_size - h % self.window_size) % self.window_size + pad_w = (self.window_size - w % self.window_size) % self.window_size + if pad_h > 0 or pad_w > 0: + x = jnp.pad( + x, ((0, 0), (0, pad_w), (0, pad_h), (0, 0)), + 'constant', constant_values=0) + hp, wp = h + pad_h, w + pad_w + + x = x.reshape( + batch, hp // self.window_size, self.window_size, + wp // self.window_size, self.window_size, c) + windows = x.transpose(0, 1, 3, 2, 4, 5).reshape( + -1, self.window_size, self.window_size, c) + return windows, (hp, wp) + + def window_unpartition(self, windows, pad_hw, hw): + """Window unpartition into original sequences and removing padding. + + Args: + windows (array): inputs: [B * num_windows, window_size, window_size, C]. + pad_hw (Tuple): padded height and width (Hp, Wp). + hw (Tuple): original height and width (H, W) before padding. + + Returns: + x: unpartitioned sequences with [B, H, W, C]. + """ + hp, wp = pad_hw + h, w = hw + batch = windows.shape[0] // ( + hp * wp // self.window_size // self.window_size) + x = windows.reshape( + batch, + hp // self.window_size, wp // self.window_size, + self.window_size, self.window_size, -1) + x = x.transpose(0, 1, 3, 2, 4, 5).reshape(batch, hp, wp, -1) + if hp > h or wp > w: + x = x[:, :h, :w, :] + return x + + def get_keep_pattern(self, + x: jnp.ndarray, + deterministic: bool) -> jnp.ndarray: + """DropPath Layer.""" + if not deterministic and self.drop_path: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + drop_pattern = jax.random.bernoulli( + self.make_rng('dropout'), self.drop_path, shape).astype(self.dtype) + keep_pattern = (1. - drop_pattern) + if self.drop_path < 1.: + keep_pattern = keep_pattern / (1. - self.drop_path) + return keep_pattern + else: + return 1.0 # pytype: disable=bad-return-type # jax-ndarray + + @nn.compact + def __call__(self, x, train=False): + shortcut = x + ln = functools.partial(nn.LayerNorm, epsilon=1e-6, dtype=self.dtype) + x = ln(name='norm1')(x) + # Window partition + if self.window_size > 0: + h, w = x.shape[1], x.shape[2] + x, pad_hw = self.window_partition(x) + + x = Attention( + self.dim, + num_heads=self.num_heads, + qkv_bias=self.qkv_bias, + beit_like_qkv_bias=self.beit_like_qkv_bias, + use_rel_pos=self.use_rel_pos, + rel_pos_zero_init=self.rel_pos_zero_init, + input_size=self.input_size if self.window_size == 0 else ( + self.window_size, self.window_size), + kernel_init=self.kernel_init, + dtype=self.dtype, + name='attn')(x) + + # Reverse window partition + if self.window_size > 0: + x = self.window_unpartition(x, pad_hw, (h, w)) + + if self.layer_scale_init_value > 0: + gamma_1 = self.param( + 'gamma_1', + nn.initializers.constant(self.layer_scale_init_value), + (self.dim)) + x = x * gamma_1[..., :] + x = shortcut + self.get_keep_pattern(x, not train) * x + y = ln(name='norm2')(x) + y = Mlp( + int(self.dim * self.mlp_ratio), + self.dim, + kernel_init=self.kernel_init, + dtype=self.dtype, + name='mlp')(y) + if self.layer_scale_init_value > 0: + gamma_2 = self.param( + 'gamma_2', + nn.initializers.constant(self.layer_scale_init_value), + (self.dim)) + y = y * gamma_2[..., :] + x = x + self.get_keep_pattern(y, not train) * y + return x + + +class ViT(nn.Module): + """This module implements Vision Transformer (ViT) backbone in paper:`vitdet`. + + "Exploring Plain Vision Transformer Backbones for Object Detection", + https://arxiv.org/abs/2203.16527 + + Attributes: + img_size (int): Input image size. + patch_size (int): Patch size. + in_chans (int): Number of input image channels. + embed_dim (int): Patch embedding dimension. + depth (int): Depth of ViT. + num_heads (int): Number of attention heads in each ViT block. + mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. + qkv_bias (bool): If True, add a learnable bias to query, key, value. + beit_like_qkv_bias (bool): no bias for k. + drop_path_rate (float): Stochastic depth rate. + use_abs_pos (bool): If True, use absolute positional embeddings. + use_rel_pos (bool): If True, add relative positional embeddings to the + attention map. + rel_pos_zero_init (bool): If True, zero initialize relative positional + parameters. + window_size (int): Window size for window attention blocks. + window_block_indexes (list): Indexes for blocks using window attention. + pretrain_img_size (int): input image size for pretraining models. + pretrain_use_cls_token (bool): If True, pretrainig models use class token. + """ + img_size: int = 1024 + patch_size: int = 16 + in_chans: int = 3 + embed_dim: int = 768 + depth: int = 12 + num_heads: int = 12 + mlp_ratio: float = 4.0 + qkv_bias: bool = True + beit_like_qkv_bias: bool = False + drop_path_rate: float = 0.1 + use_abs_pos: bool = True + use_rel_pos: bool = True + rel_pos_zero_init: bool = True + window_size: int = 14 + window_block_indexes: Any = (0, 1, 3, 4, 6, 7, 9, 10) + pretrain_img_size: int = 224 + pretrain_use_cls_token: int = 1 + kernel_init: str = 'normal' + layer_scale_init_value: float = -1.0 + freeze_vit_layer: int = -1 + use_ln_pre: bool = False + dtype: jnp.dtype = jnp.float32 + return_intermediate: Optional[int] = None + + def _get_abs_pos(self, abs_pos, hw): + """Calculate absolute positional embeddings. + + If needed, resize embeddings and remove cls_token dimension for the original + embeddings. + Args: + abs_pos (array): absolute positional embeddings with (1, num_position, C). + hw (Tuple): size of input image tokens. + Returns: + Absolute positional embeddings after processing with shape (1, H, W, C) + """ + h, w = hw + if self.pretrain_use_cls_token: + abs_pos = abs_pos[:, self.pretrain_use_cls_token:] + xy_num = abs_pos.shape[1] + size = int(xy_num ** 0.5) + assert size * size == xy_num + abs_pos = abs_pos.reshape(abs_pos.shape[0], size, size, -1) + if size != h or size != w: + new_abs_pos = jax.image.resize( + abs_pos, + (abs_pos.shape[0], h, w, abs_pos.shape[3]), + method='bicubic', + ) + else: + new_abs_pos = abs_pos + return new_abs_pos + + @nn.compact + def __call__(self, + x: jnp.ndarray, + train: bool = False,): + x = nn.Conv( + self.embed_dim, (self.patch_size, self.patch_size), + strides=(self.patch_size, self.patch_size), + padding='VALID', + dtype=self.dtype, + name='patch_embed.proj')(x) + if self.use_abs_pos: + num_patches = (self.pretrain_img_size // self.patch_size) ** 2 + num_positions = num_patches + self.pretrain_use_cls_token + pos_embed = self.param( + 'pos_embed', nn.initializers.zeros, + (1, num_positions, self.embed_dim)) + x = x + self._get_abs_pos(pos_embed, (x.shape[1], x.shape[2])) + dp_rates = [ + self.drop_path_rate * i / (self.depth - 1) for i in range(self.depth)] + if self.use_ln_pre: + x = nn.LayerNorm(name='ln_pre')(x) + + intermediate_layer = None + for i in range(self.depth): + x = Block( + dim=self.embed_dim, + num_heads=self.num_heads, + mlp_ratio=self.mlp_ratio, + qkv_bias=self.qkv_bias, + beit_like_qkv_bias=self.beit_like_qkv_bias, + drop_path=dp_rates[i], + use_rel_pos=self.use_rel_pos, + rel_pos_zero_init=self.rel_pos_zero_init, + window_size=self.window_size if i in self.window_block_indexes else 0, + input_size=( + self.img_size // self.patch_size, + self.img_size // self.patch_size), + kernel_init=self.kernel_init, + dtype=self.dtype, + layer_scale_init_value=self.layer_scale_init_value, + name=f'blocks.{i}', + )(x, train=train) + if i + 1 < self.freeze_vit_layer: + x = jax.lax.stop_gradient(x) + if self.return_intermediate is not None and ( + i == self.return_intermediate): + intermediate_layer = x + + if intermediate_layer is not None: + return intermediate_layer + return x + +SIZE_CONFIGS = { + 'B': (768, 12, 12, 0.1, (0, 1, 3, 4, 6, 7, 9, 10)), + 'L': (1024, 24, 16, 0.4, ( + 0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22)), + 'H': (1280, 32, 16, 0.5, ( + 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, + 22, 24, 25, 26, 27, 28, 29, 30)), +} + + +class SimpleFeaturePyramid(nn.Module): + """This module implements SimpleFeaturePyramid in paper:`vitdet`. + + It creates pyramid features built on top of the input feature map. + + Attributes: + in_dim (int): input dim + out_channels (int): number of channels in the output feature maps. + scale_factors (list[float]): list of scaling factors to upsample or + downsample the input features for creating pyramid features. + num_top_blocks (int): top level downsample block + norm (str): the normalization to use. + """ + in_dim: int = 768 + out_channels: int = 256 + scale_factors: Any = (2.0, 1.0, 0.5) + num_top_blocks: int = 2 + num_additional_convs: int = 0 + backbone_args: ml_collections.ConfigDict = flax.struct.field( + default_factory=ml_collections.ConfigDict + ) + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, train: bool = False): + + backbone_args = copy.deepcopy(self.backbone_args) + backbone_args.unlock() + sz = backbone_args.get('size', 'B') + freeze_backbone = backbone_args.get('freeze_backbone', False) + for delete_key in [ + 'size', 'freeze_backbone', 'bifpn_norm', 'num_repeats']: + if delete_key in backbone_args: + del backbone_args[delete_key] + dim, depth, num_heads, dp, window_block_indexes = SIZE_CONFIGS[sz] + backbone_args['embed_dim'] = backbone_args.get('embed_dim', dim) + backbone_args['depth'] = backbone_args.get('depth', depth) + backbone_args['num_heads'] = backbone_args.get('num_heads', num_heads) + backbone_args['drop_path_rate'] = backbone_args.get('drop_path_rate', dp) + backbone_args['window_block_indexes'] = backbone_args.get( + 'window_block_indexes', window_block_indexes) + backbone_args.lock() + backbone_net = ViT(**backbone_args, dtype=self.dtype, name='net') + + if freeze_backbone: + features = jax.lax.stop_gradient(backbone_net(x, train=False)) + else: + features = backbone_net(x, train=train) + results = [] + dim = self.in_dim + conv_transpose = functools.partial( + nn.ConvTranspose, kernel_size=(2, 2), strides=(2, 2), dtype=self.dtype) + ln = functools.partial(nn.LayerNorm, epsilon=1e-6) + conv = functools.partial(nn.Conv, use_bias=False, dtype=self.dtype) + for scale in self.scale_factors: + x = features + if scale == 4.0: + stage, idx_base = 2, 4 + x = conv_transpose(dim // 2, name='simfp_2.0')(x) + x = ln(name='simfp_2.1')(x) + x = nn.gelu(x, approximate=False) + x = conv_transpose(dim // 4, name='simfp_2.3')(x) + elif scale == 2.0: + stage, idx_base = 3, 1 + x = conv_transpose(dim // 2, name='simfp_3.0')(x) + elif scale == 1.0: + stage, idx_base = 4, 0 + elif scale == 0.5: + stage, idx_base = 5, 1 + x = nn.max_pool(x, (2, 2), strides=(2, 2)) + else: + raise NotImplementedError(f'scale_factor={scale} is not supported yet.') + x = conv( + self.out_channels, kernel_size=(1, 1), + name=f'simfp_{stage}.{idx_base}')(x) + x = ln(name=f'simfp_{stage}.{idx_base}.norm')(x) + x = conv( + self.out_channels, kernel_size=(3, 3), padding=[(1, 1), (1, 1)], + name=f'simfp_{stage}.{idx_base + 1}')(x) + x = ln(name=f'simfp_{stage}.{idx_base + 1}.norm')(x) + if self.num_additional_convs > 0: + for i in range(self.num_additional_convs): + x = conv( + self.out_channels, + kernel_size=(3, 3), + padding=[(1, 1), (1, 1)], + name=f'simfp_{stage}.{idx_base + 2 + i}')( + x) + x = ln(name=f'simfp_{stage}.{idx_base + 2 + i}.norm')(x) + results.append(x) + + if self.num_top_blocks == 1: + x = nn.max_pool( + results[-1], (1, 1), strides=(2, 2), padding=[(0, 0), (0, 0)]) + results.append(x) + elif self.num_top_blocks == 2: + top_block = fpn.TwiceDownsampleBlock( + out_channels=self.out_channels, dtype=self.dtype, name='top_block') + p6, p7 = top_block(results[-1]) + results.extend([p6, p7]) + else: + if self.num_top_blocks != 0: + raise NotImplementedError( + f'num_top_blocks={self.num_top_blocks} is not supported yet.') + return results + diff --git a/scenic/projects/baselines/centernet/notebooks/convert_convnext_weights.ipynb b/scenic/projects/baselines/centernet/notebooks/convert_convnext_weights.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..e9acd244e80cb74530a0cb237530baf4536727bf --- /dev/null +++ b/scenic/projects/baselines/centernet/notebooks/convert_convnext_weights.ipynb @@ -0,0 +1,380 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "AtrkMwI0o4es", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "8a12a78e-c079-4262-dedf-ac313340989a" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: ml_collections in /usr/local/lib/python3.10/dist-packages (0.1.1)\n", + "Requirement already satisfied: absl-py in /usr/local/lib/python3.10/dist-packages (from ml_collections) (1.4.0)\n", + "Requirement already satisfied: PyYAML in /usr/local/lib/python3.10/dist-packages (from ml_collections) (6.0.1)\n", + "Requirement already satisfied: six in /usr/local/lib/python3.10/dist-packages (from ml_collections) (1.16.0)\n", + "Requirement already satisfied: contextlib2 in /usr/local/lib/python3.10/dist-packages (from ml_collections) (21.6.0)\n" + ] + } + ], + "source": [ + "import functools\n", + "from typing import Tuple, Callable, Any, Optional, Union, Dict\n", + "\n", + "from absl import logging\n", + "import flax\n", + "import flax.linen as nn\n", + "import jax\n", + "from jax.nn import initializers\n", + "import jax.numpy as jnp\n", + "!pip install ml_collections\n", + "import ml_collections\n", + "from jax import random\n", + "import numpy as np\n", + "from flax.training import checkpoints\n", + "import torch\n", + "import torch.utils.model_zoo\n", + "flax.config.update('flax_use_orbax_checkpointing', False)" + ] + }, + { + "cell_type": "code", + "source": [ + "# From https://github.com/rwightman/pytorch-image-models/blob/master/timm/models/convnext.py\n", + "MODEL_URLS = dict(\n", + " convnext_tiny_1k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_tiny_1k_224_ema.pth',\n", + " convnext_small_1k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_small_1k_224_ema.pth',\n", + " convnext_base_1k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_base_1k_224_ema.pth',\n", + " convnext_large_1k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_large_1k_224_ema.pth',\n", + " convnext_tiny_in22ft1k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_tiny_22k_1k_224.pth',\n", + " convnext_small_in22ft1k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_small_22k_1k_224.pth',\n", + " convnext_base_in22ft1k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_1k_224.pth',\n", + " convnext_large_in22ft1k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_large_22k_1k_224.pth',\n", + " convnext_xlarge_in22ft1k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_1k_224_ema.pth',\n", + "\n", + " convnext_tiny_384_in22ft1k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_tiny_22k_1k_384.pth',\n", + " convnext_small_384_in22ft1k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_small_22k_1k_384.pth',\n", + " convnext_base_384_in22ft1k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_1k_384.pth',\n", + " convnext_large_384_in22ft1k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_large_22k_1k_384.pth',\n", + " convnext_xlarge_384_in22ft1k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_1k_384_ema.pth',\n", + "\n", + " convnext_tiny_in22k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_tiny_22k_224.pth',\n", + " convnext_small_in22k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_small_22k_224.pth',\n", + " convnext_base_in22k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_224.pth',\n", + " convnext_large_in22k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_large_22k_224.pth',\n", + " convnext_xlarge_in22k=\n", + " 'https://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_224.pth',\n", + ")\n", + "\n", + "SIZE_MAP = {\n", + " 'tiny': 'T',\n", + " 'small': 'S',\n", + " 'base': 'B',\n", + " 'large': 'L',\n", + " 'xlarge': 'XL'\n", + "}" + ], + "metadata": { + "id": "qgf104GJ348q" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#@title Jax model implementation\n", + "\n", + "class ConvNeXtBlock(nn.Module):\n", + " \"\"\"Bottleneck ResNet block.\n", + " \"\"\"\n", + "\n", + " dim: int\n", + " droplayer_p: float = 0\n", + " layer_scale_init_value: float = 1e-6\n", + " dtype: jnp.dtype = jnp.float32\n", + "\n", + " def get_drop_pattern(self,\n", + " x: jnp.ndarray,\n", + " deterministic: bool) -> jnp.ndarray:\n", + " \"\"\"Returns dropout mask for stochastic depth regularisation.\"\"\"\n", + " if not deterministic and self.droplayer_p:\n", + " shape = (x.shape[0],) + (1,) * (x.ndim - 1)\n", + " return jax.random.bernoulli(\n", + " self.make_rng('dropout'), self.droplayer_p, shape).astype(self.dtype)\n", + " else:\n", + " return 0.0\n", + "\n", + " @nn.compact\n", + " def __call__(self, x: jnp.ndarray, train: bool = False) -> jnp.ndarray:\n", + " residual = x\n", + " x = nn.Conv(\n", + " self.dim, (7, 7),\n", + " 1,\n", + " padding=3,\n", + " feature_group_count=self.dim,\n", + " use_bias=True,\n", + " dtype=self.dtype,\n", + " name='dwconv')(\n", + " x)\n", + " x = nn.LayerNorm(epsilon=1e-6, name='norm')(x)\n", + " x = nn.Dense(4 * self.dim, name='pwconv1')(x) # B x H x W x 4C\n", + " x = nn.gelu(x)\n", + " x = nn.Dense(self.dim, name='pwconv2')(x) # B x H x W x C\n", + " if self.layer_scale_init_value > 0:\n", + " gamma = self.param(\n", + " 'gamma',\n", + " initializers.constant(self.layer_scale_init_value),\n", + " (self.dim))\n", + " x = x * gamma[..., :]\n", + " drop_pattern = self.get_drop_pattern(x, deterministic=not train)\n", + " x = residual + (1.0 - drop_pattern) * x\n", + " return x\n", + "\n", + "SIZE_OPTIONS = {\n", + " 'T': ([3, 3, 9, 3], [96, 192, 384, 768], 0.1),\n", + " 'S': ([3, 3, 27, 3], [96, 192, 384, 768], 0.4),\n", + " 'B': ([3, 3, 27, 3], [128, 256, 512, 1024], 0.5),\n", + " 'L': ([3, 3, 27, 3], [192, 384, 768, 1536], 0.5),\n", + " 'XL': ([3, 3, 27, 3], [256, 512, 1024, 2048], 0.5),\n", + "}\n", + "\n", + "class ConvNeXt(nn.Module):\n", + " \"\"\"ConvNeXt architecture.\n", + "\n", + " Attributes:\n", + " num_outputs: Num output classes. If None, a dict of intermediate feature\n", + " maps is returned.\n", + " size: size as pre-defined in the paper. Options: T, S, B, L\n", + " kernel_init: Kernel initialization.\n", + " bias_init: Bias initialization.\n", + " dtype: Data type, e.g. jnp.float32.\n", + " \"\"\"\n", + " num_outputs: Optional[int]\n", + " size: str = 'T'\n", + " layer_scale_init_value: float = 1e-6\n", + " kernel_init: Callable[..., Any] = initializers.lecun_normal()\n", + " bias_init: Callable[..., Any] = initializers.zeros\n", + " dtype: jnp.dtype = jnp.float32\n", + "\n", + " @nn.compact\n", + " def __call__(\n", + " self,\n", + " x: jnp.ndarray,\n", + " train: bool = False,\n", + " debug: bool = False) -> Union[jnp.ndarray, Dict[str, jnp.ndarray]]:\n", + " \"\"\"Applies ResNet model to the inputs.\n", + "\n", + " Args:\n", + " x: Inputs to the model.\n", + " train: Whether it is training or not.\n", + " debug: Whether the debug mode is enabled. debug=True enables model\n", + " specific logging/storing some values using jax.host_callback.\n", + "\n", + " Returns:\n", + " Un-normalized logits.\n", + " \"\"\"\n", + " if self.size not in SIZE_OPTIONS:\n", + " raise ValueError('Please provide a valid size')\n", + " depths, dims, drop_path_rate = SIZE_OPTIONS[self.size]\n", + " sum_depth = sum(depths)\n", + " dp_rates = [drop_path_rate * i / (sum_depth - 1) for i in range(sum_depth)]\n", + " layernorm = functools.partial(nn.LayerNorm, epsilon=1e-6)\n", + " block = functools.partial(\n", + " ConvNeXtBlock,\n", + " layer_scale_init_value=self.layer_scale_init_value,\n", + " dtype=self.dtype)\n", + " x = nn.Conv(\n", + " dims[0],\n", + " kernel_size=(4, 4),\n", + " strides=(4, 4),\n", + " dtype=self.dtype,\n", + " name='downsample_layers.0.0')(\n", + " x)\n", + " x = layernorm(name='downsample_layers.0.1')(x)\n", + " representations = {'stem': x}\n", + " cur = 0\n", + " for i, (depth, dim) in enumerate(zip(depths, dims)):\n", + " if i > 0:\n", + " x = layernorm(name='downsample_layers.{}.0'.format(i))(x)\n", + " x = nn.Conv(\n", + " dims[i],\n", + " kernel_size=(2, 2),\n", + " strides=(2, 2),\n", + " dtype=self.dtype,\n", + " name='downsample_layers.{}.1'.format(i))(\n", + " x)\n", + " for j in range(depth):\n", + " x = block(\n", + " dim=dim, droplayer_p=dp_rates[cur + j],\n", + " name='stages.{}.{}'.format(i, j))(x, train)\n", + " cur += depth\n", + " representations[f'stage_{i + 1}'] = x\n", + "\n", + " # Head.\n", + " if self.num_outputs:\n", + " x = jnp.mean(x, axis=(1, 2))\n", + " x = layernorm(name='norm')(x)\n", + " # x = nn_layers.IdentityLayer(name='pre_logits')(x)\n", + " x = nn.Dense(\n", + " self.num_outputs,\n", + " kernel_init=self.kernel_init,\n", + " bias_init=self.bias_init,\n", + " dtype=self.dtype,\n", + " name='output_projection')(\n", + " x)\n", + " return x\n", + " else:\n", + " return representations" + ], + "metadata": { + "id": "OAqvrREPPTt4", + "cellView": "form" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Recursively matching layer names\n", + "def dfs(k, ori_k, v):\n", + " if isinstance(v, jnp.ndarray):\n", + " torch_data = torch_weights[k]\n", + " if len(v.shape) == 2: # FC layers\n", + " torch_data = np.transpose(torch_data, (1, 0))\n", + " if len(v.shape) == 4: # Conv layers\n", + " torch_data = np.transpose(torch_data, (2, 3, 1, 0))\n", + " return [(k, torch_data.shape)], torch_data\n", + " lst, tree = [], {}\n", + " for kk, vv in v.items():\n", + " if isinstance(vv, jnp.ndarray) and (kk == 'kernel' or kk == 'scale'):\n", + " new_kk = 'weight'\n", + " elif kk == 'output_projection':\n", + " new_kk = 'head'\n", + " else:\n", + " new_kk = kk\n", + " sub_lst, sub_tree = dfs(\n", + " '{}.{}'.format(k, new_kk) if k != '' else new_kk, kk, vv)\n", + " lst.extend(sub_lst)\n", + " tree[kk] = sub_tree\n", + " return lst, tree" + ], + "metadata": { + "id": "LcYt2ByvwMOK" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "RefK_x578Fqk" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Load pytorch weights (converted state_dict to npy files) in list\n", + "# and convert to Jax weights in tree\n", + "MODEL_NAMES = ['convnext_tiny_in22k']\n", + "\n", + "for model_name in MODEL_NAMES:\n", + " print('Processing', model_name)\n", + " model_path = MODEL_URLS[model_name]\n", + " torch_weights = torch.utils.model_zoo.load_url(model_path)['model']\n", + " torch_weights = {k: v.cpu().numpy() for k, v in torch_weights.items()}\n", + " num_params_torch = 0\n", + " for k, v in torch_weights.items():\n", + " num_params_torch += np.prod(v.shape)\n", + " print('num_params_torch', num_params_torch)\n", + " num_class = 21841 if model_name.endswith('_in22k') else 1000\n", + " size = SIZE_MAP[model_name[9: model_name[10:].find('_') + 10]]\n", + " res = 384 if '384' in model_name else 224\n", + " model = ConvNeXt(num_outputs=num_class, size=size)\n", + " x = jnp.zeros((1, res, res, 3))\n", + " rngs = {'params': random.PRNGKey(0), 'dropout': random.PRNGKey(0)}\n", + " variables = model.init(rngs, x)\n", + " ret, tree = dfs('', '', variables['params'])\n", + " ret = [(k, v) for k, v in sorted(ret)]\n", + " tot_params = 0\n", + " for k, v in ret:\n", + " tot_params += np.prod(v)\n", + " print('tot_params ', tot_params)\n", + " tree.keys()\n", + " new_variables = {'params': tree}\n", + " save_path = '{}'.format(model_name)\n", + " checkpoints.save_checkpoint(save_path, new_variables, 0)" + ], + "metadata": { + "id": "MFUz5nFs38ZP", + "outputId": "8c4e614c-66d5-4f6b-e05e-2ea6b0994fb2", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Processing convnext_tiny_in22k\n", + "num_params_torch 44615857\n", + "tot_params 44615857\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "pTBTa9EnDMSG" + }, + "execution_count": null, + "outputs": [] + } + ] +} diff --git a/scenic/projects/baselines/centernet/notebooks/convert_d2_vitdet_weights.ipynb b/scenic/projects/baselines/centernet/notebooks/convert_d2_vitdet_weights.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..fd2cf982a249d5efc407683fe6b111447b19ad83 --- /dev/null +++ b/scenic/projects/baselines/centernet/notebooks/convert_d2_vitdet_weights.ipynb @@ -0,0 +1,761 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU" + }, + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "9Uaoeb0TF8Gz", + "outputId": "a96d4381-ec4d-4b4f-9432-eb5c5d819223" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "torch: 2.1 ; cuda: cu121\n", + "Requirement already satisfied: ml_collections in /usr/local/lib/python3.10/dist-packages (0.1.1)\n", + "Requirement already satisfied: absl-py in /usr/local/lib/python3.10/dist-packages (from ml_collections) (1.4.0)\n", + "Requirement already satisfied: PyYAML in /usr/local/lib/python3.10/dist-packages (from ml_collections) (6.0.1)\n", + "Requirement already satisfied: six in /usr/local/lib/python3.10/dist-packages (from ml_collections) (1.16.0)\n", + "Requirement already satisfied: contextlib2 in /usr/local/lib/python3.10/dist-packages (from ml_collections) (21.6.0)\n" + ] + } + ], + "source": [ + "import torch\n", + "TORCH_VERSION = \".\".join(torch.__version__.split(\".\")[:2])\n", + "CUDA_VERSION = torch.__version__.split(\"+\")[-1]\n", + "print(\"torch: \", TORCH_VERSION, \"; cuda: \", CUDA_VERSION)\n", + "import jax\n", + "import jax.numpy as jnp\n", + "import numpy as np\n", + "import torch\n", + "!pip install ml_collections\n", + "import ml_collections" + ] + }, + { + "cell_type": "code", + "source": [ + "!wget \"https://dl.fbaipublicfiles.com/detectron2/ImageNetPretrained/MAE/mae_pretrain_vit_base.pth\"\n", + "mae_model = torch.load('mae_pretrain_vit_base.pth')\n", + "torch_weights = {k: v.numpy() for k, v in mae_model['model'].items()}" + ], + "metadata": { + "id": "OUlRll4TGKS-", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "b2a2a45f-29f3-4d64-8f1a-f1afe273e1eb" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "--2024-01-18 18:41:05-- https://dl.fbaipublicfiles.com/detectron2/ImageNetPretrained/MAE/mae_pretrain_vit_base.pth\n", + "Resolving dl.fbaipublicfiles.com (dl.fbaipublicfiles.com)... 3.162.163.51, 3.162.163.11, 3.162.163.19, ...\n", + "Connecting to dl.fbaipublicfiles.com (dl.fbaipublicfiles.com)|3.162.163.51|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 343249461 (327M) [binary/octet-stream]\n", + "Saving to: ‘mae_pretrain_vit_base.pth’\n", + "\n", + "mae_pretrain_vit_ba 100%[===================>] 327.35M 136MB/s in 2.4s \n", + "\n", + "2024-01-18 18:41:08 (136 MB/s) - ‘mae_pretrain_vit_base.pth’ saved [343249461/343249461]\n", + "\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "def dfs(k, v, converted_torch_weight):\n", + " \"\"\"Recursively match weights.\"\"\"\n", + " if isinstance(v, jnp.ndarray):\n", + " if k in converted_torch_weight:\n", + " torch_data = converted_torch_weight[k]\n", + " if len(v.shape) == 2 and not 'rel_pos' in k:\n", + " torch_data = np.transpose(torch_data, (\n", + " 1, 0))\n", + " if len(v.shape) == 4:\n", + " if 'simfp_2.0' in k or 'simfp_2.3' in k or 'simfp_3.0' in k:\n", + " torch_data = np.transpose(torch_data, (2, 3, 0, 1))\n", + " else:\n", + " torch_data = np.transpose(torch_data, (2, 3, 1, 0))\n", + " else:\n", + " print(f'{k} not in checkpoint')\n", + " torch_data = v\n", + " return [(k, torch_data.shape)], torch_data\n", + " lst, tree = [], {}\n", + " for kk, vv in v.items():\n", + " if isinstance(vv, jnp.ndarray) and (kk == 'kernel' or kk == 'scale'):\n", + " new_kk = 'weight'\n", + " elif kk == 'output_projection':\n", + " new_kk = 'head'\n", + " else:\n", + " new_kk = kk\n", + " sub_lst, sub_tree = dfs(\n", + " '{}.{}'.format(k, new_kk) if k else new_kk,\n", + " vv,\n", + " converted_torch_weight)\n", + " lst.extend(sub_lst)\n", + " tree[kk] = sub_tree\n", + " return lst, tree\n" + ], + "metadata": { + "id": "Lovw3WQKIOjC" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#@title jax ViTDet implementation\n", + "\"\"\"ViTDet with simple FPN.\"\"\"\n", + "\n", + "import functools\n", + "from typing import Any, Optional\n", + "\n", + "import flax.linen as nn\n", + "import jax\n", + "import jax.numpy as jnp\n", + "import ml_collections\n", + "\n", + "\n", + "__all__ = ['ViT', 'SimpleFeaturePyramid']\n", + "\n", + "\n", + "class Attention(nn.Module):\n", + " \"\"\"Multi-head Attention block with relative position embeddings.\n", + "\n", + " Attributes:\n", + " dim (int): Number of input channels.\n", + " num_heads (int): Number of attention heads.\n", + " qkv_bias (bool: If True, add a learnable bias to query, key, value.\n", + " use_rel_pos (bool): If True, add relative positional embeddings to the\n", + " attention map.\n", + " rel_pos_zero_init (bool): If True, zero initialize relative positional\n", + " parameters.\n", + " input_size (int or None): Input resolution for calculating the relative\n", + " positional parameter size.\n", + " \"\"\"\n", + " dim: int\n", + " num_heads: int = 8\n", + " qkv_bias: bool = True\n", + " use_rel_pos: bool = False\n", + " rel_pos_zero_init: bool = True\n", + " input_size: Optional[Any] = None\n", + "\n", + " def get_rel_pos(self, q_size, k_size, rel_pos):\n", + " \"\"\"Get relative positional embeddings.\n", + "\n", + " Args:\n", + " q_size (int): size of query q.\n", + " k_size (int): size of key k.\n", + " rel_pos (Tensor): relative position embeddings (L, C).\n", + " Returns:\n", + " Extracted positional embeddings according to relative positions.\n", + " \"\"\"\n", + " max_rel_dist = int(2 * max(q_size, k_size) - 1)\n", + " # Interpolate rel pos if needed.\n", + " if rel_pos.shape[0] != max_rel_dist:\n", + " # Interpolate rel pos.\n", + " rel_pos_resized = jax.image.resize(\n", + " rel_pos,\n", + " shape=(max_rel_dist, rel_pos.shape[1]),\n", + " method='linear',\n", + " )\n", + " else:\n", + " rel_pos_resized = rel_pos\n", + "\n", + " # Scale the coords with short length if shapes for q and k are different.\n", + " q_coords = jnp.arange(q_size)[:, None] * max(k_size / q_size, 1.0)\n", + " k_coords = jnp.arange(k_size)[None, :] * max(q_size / k_size, 1.0)\n", + " relative_coords = (q_coords - k_coords) + (k_size - 1) * max(\n", + " q_size / k_size, 1.0)\n", + " relative_coords = relative_coords.astype(jnp.int32).reshape(-1)\n", + " return rel_pos_resized[relative_coords].reshape(q_size, k_size, -1)\n", + "\n", + " def add_decomposed_rel_pos(\n", + " self, attn, q, rel_pos_h, rel_pos_w, q_size, k_size):\n", + " \"\"\"Calculate decomposed Relative Positional Embeddings from paper:`mvitv2`.\n", + "\n", + " Args:\n", + " attn (Tensor): attention map.\n", + " q (Tensor): query q in the attention layer with shape (B, q_h * q_w, C).\n", + " rel_pos_h (Tensor): relative position embeddings (Lh, C) for height axis.\n", + " rel_pos_w (Tensor): relative position embeddings (Lw, C) for width axis.\n", + " q_size (Tuple): spatial sequence size of query q with (q_h, q_w).\n", + " k_size (Tuple): spatial sequence size of key k with (k_h, k_w).\n", + " Returns:\n", + " attn (Tensor): attention map with added relative positional embeddings.\n", + " \"\"\"\n", + " q_h, q_w = q_size\n", + " k_h, k_w = k_size\n", + " rh = self.get_rel_pos(q_h, k_h, rel_pos_h)\n", + " rw = self.get_rel_pos(q_w, k_w, rel_pos_w)\n", + "\n", + " batch, _, dim = q.shape\n", + " r_q = q.reshape(batch, q_h, q_w, dim)\n", + " rel_h = jnp.einsum('bhwc,hkc->bhwk', r_q, rh)\n", + " rel_w = jnp.einsum('bhwc,wkc->bhwk', r_q, rw)\n", + "\n", + " attn = (\n", + " attn.reshape(batch, q_h, q_w, k_h, k_w) + rel_h[\n", + " :, :, :, :, None] + rel_w[:, :, :, None, :]\n", + " ).reshape(batch, q_h * q_w, k_h * k_w)\n", + "\n", + " return attn\n", + "\n", + " @nn.compact\n", + " def __call__(self, x):\n", + " batch, height, width, _ = x.shape\n", + " head_dim = self.dim // self.num_heads\n", + " qkv = nn.Dense(self.dim * 3, use_bias=self.qkv_bias, name='qkv')(\n", + " x) # batch x height x width x 3dim\n", + " qkv = qkv.reshape(batch, height * width, 3, self.num_heads, -1).transpose(\n", + " 2, 0, 3, 1, 4) # 3 x batch x num_heads x num_tokens x D\n", + " qkv = qkv.reshape(3, batch * self.num_heads, height * width, -1)\n", + " q, k, v = qkv[0], qkv[1], qkv[2] # [batch * num_heads, num_tokens, D]\n", + " attn = (q * (head_dim ** -0.5)) @ k.transpose(\n", + " 0, 2, 1) # [batch * num_heads, num_tokens, num_tokens]\n", + " if self.use_rel_pos:\n", + " rel_pos_h = self.param(\n", + " 'rel_pos_h', nn.initializers.zeros,\n", + " (2 * self.input_size[0] - 1, head_dim))\n", + " rel_pos_w = self.param(\n", + " 'rel_pos_w', nn.initializers.zeros,\n", + " (2 * self.input_size[0] - 1, head_dim))\n", + " attn = self.add_decomposed_rel_pos(\n", + " attn, q, rel_pos_h, rel_pos_w,\n", + " (height, width), (height, width))\n", + " attn = jax.nn.softmax(attn)\n", + " x = (attn @ v).reshape(batch, self.num_heads, height, width, -1).transpose(\n", + " 0, 2, 3, 1, 4).reshape(batch, height, width, -1)\n", + " x = nn.Dense(self.dim, name='proj')(x)\n", + " return x\n", + "\n", + "\n", + "class Mlp(nn.Module):\n", + " \"\"\"Multilayer perceptron.\"\"\"\n", + "\n", + " hidden_features: int\n", + " out_features: int\n", + "\n", + " @nn.compact\n", + " def __call__(self, x):\n", + " x = nn.Dense(self.hidden_features, name='fc1')(x)\n", + " x = nn.gelu(x, approximate=False)\n", + " x = nn.Dense(self.out_features, name='fc2')(x)\n", + " return x\n", + "\n", + "\n", + "class Block(nn.Module):\n", + " \"\"\"Transformer blocks with support of window attention and residual blocks.\n", + "\n", + " Attributes:\n", + " dim (int): Number of input channels.\n", + " num_heads (int): Number of attention heads in each ViT block.\n", + " mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.\n", + " qkv_bias (bool): If True, add a learnable bias to query, key, value.\n", + " drop_path (float): Stochastic depth rate.\n", + " use_rel_pos (bool): If True, add relative positional embeddings to the\n", + " attention map.\n", + " rel_pos_zero_init (bool): If True, zero initialize relative positional\n", + " parameters.\n", + " window_size (int): Window size for window attention blocks. If it equals 0,\n", + " then not use window attention.\n", + " input_size (int or None): Input resolution for calculating the relative\n", + " positional parameter size.\n", + " \"\"\"\n", + " dim: int\n", + " num_heads: int\n", + " mlp_ratio: float = 4.0\n", + " qkv_bias: bool = True\n", + " drop_path: float = 0.0\n", + " use_rel_pos: bool = False\n", + " rel_pos_zero_init: bool = True\n", + " window_size: int = 0\n", + " input_size: Optional[int] = None\n", + "\n", + " def window_partition(self, x):\n", + " \"\"\"Partition into non-overlapping windows with padding if needed.\n", + "\n", + " Args:\n", + " x (array): input tokens with [B, H, W, C].\n", + " Returns:\n", + " windows: windows after partition with [B * num_windows, window_size,\n", + " window_size, C].\n", + " (Hp, Wp): padded height and width before partition\n", + " \"\"\"\n", + " batch, h, w, c = x.shape\n", + "\n", + " pad_h = (self.window_size - h % self.window_size) % self.window_size\n", + " pad_w = (self.window_size - w % self.window_size) % self.window_size\n", + " if pad_h > 0 or pad_w > 0:\n", + " x = jnp.pad(\n", + " x, ((0, 0), (0, pad_w), (0, pad_h), (0, 0)),\n", + " 'constant', constant_values=0)\n", + " hp, wp = h + pad_h, w + pad_w\n", + "\n", + " x = x.reshape(\n", + " batch, hp // self.window_size, self.window_size,\n", + " wp // self.window_size, self.window_size, c)\n", + " windows = x.transpose(0, 1, 3, 2, 4, 5).reshape(\n", + " -1, self.window_size, self.window_size, c)\n", + " return windows, (hp, wp)\n", + "\n", + " def window_unpartition(self, windows, pad_hw, hw):\n", + " \"\"\"Window unpartition into original sequences and removing padding.\n", + "\n", + " Args:\n", + " windows (array): inputs: [B * num_windows, window_size, window_size, C].\n", + " pad_hw (Tuple): padded height and width (Hp, Wp).\n", + " hw (Tuple): original height and width (H, W) before padding.\n", + "\n", + " Returns:\n", + " x: unpartitioned sequences with [B, H, W, C].\n", + " \"\"\"\n", + " hp, wp = pad_hw\n", + " h, w = hw\n", + " batch = windows.shape[0] // (\n", + " hp * wp // self.window_size // self.window_size)\n", + " x = windows.reshape(\n", + " batch,\n", + " hp // self.window_size, wp // self.window_size,\n", + " self.window_size, self.window_size, -1)\n", + " x = x.transpose(0, 1, 3, 2, 4, 5).reshape(batch, hp, wp, -1)\n", + " if hp > h or wp > w:\n", + " x = x[:, :h, :w, :]\n", + " return x\n", + "\n", + " def get_drop_pattern(self, x, deterministic):\n", + " if not deterministic and self.drop_path:\n", + " shape = (x.shape[0],) + (1,) * (x.ndim - 1)\n", + " return jax.random.bernoulli(\n", + " self.make_rng('dropout'), self.drop_path, shape).astype('float32')\n", + " else:\n", + " return 0.0\n", + "\n", + " @nn.compact\n", + " def __call__(self, x, train = False):\n", + " shortcut = x\n", + " ln = functools.partial(nn.LayerNorm, epsilon=1e-6)\n", + " x = ln(name='norm1')(x)\n", + " # Window partition\n", + " if self.window_size > 0:\n", + " h, w = x.shape[1], x.shape[2]\n", + " x, pad_hw = self.window_partition(x)\n", + "\n", + " x = Attention(\n", + " self.dim,\n", + " num_heads=self.num_heads,\n", + " qkv_bias=self.qkv_bias,\n", + " use_rel_pos=self.use_rel_pos,\n", + " rel_pos_zero_init=self.rel_pos_zero_init,\n", + " input_size=self.input_size if self.window_size == 0 else (\n", + " self.window_size, self.window_size),\n", + " name='attn')(x)\n", + " # Reverse window partition\n", + " if self.window_size > 0:\n", + " x = self.window_unpartition(x, pad_hw, (h, w))\n", + "\n", + " x = shortcut + (1.0 - self.get_drop_pattern(x, not train)) * x\n", + " y = ln(name='norm2')(x)\n", + " y = Mlp(int(self.dim * self.mlp_ratio), self.dim, name='mlp')(y)\n", + " x = x + (1.0 - self.get_drop_pattern(y, not train)) * y\n", + " return x\n", + "\n", + "\n", + "class ViT(nn.Module):\n", + " \"\"\"This module implements Vision Transformer (ViT) backbone in paper:`vitdet`.\n", + "\n", + " \"Exploring Plain Vision Transformer Backbones for Object Detection\",\n", + " https://arxiv.org/abs/2203.16527\n", + "\n", + " Attributes:\n", + " img_size (int): Input image size.\n", + " patch_size (int): Patch size.\n", + " in_chans (int): Number of input image channels.\n", + " embed_dim (int): Patch embedding dimension.\n", + " depth (int): Depth of ViT.\n", + " num_heads (int): Number of attention heads in each ViT block.\n", + " mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.\n", + " qkv_bias (bool): If True, add a learnable bias to query, key, value.\n", + " drop_path_rate (float): Stochastic depth rate.\n", + " use_abs_pos (bool): If True, use absolute positional embeddings.\n", + " use_rel_pos (bool): If True, add relative positional embeddings to the\n", + " attention map.\n", + " rel_pos_zero_init (bool): If True, zero initialize relative positional\n", + " parameters.\n", + " window_size (int): Window size for window attention blocks.\n", + " window_block_indexes (list): Indexes for blocks using window attention.\n", + " pretrain_img_size (int): input image size for pretraining models.\n", + " pretrain_use_cls_token (bool): If True, pretrainig models use class token.\n", + " \"\"\"\n", + " img_size: int = 1024\n", + " patch_size: int = 16\n", + " in_chans: int = 3\n", + " embed_dim: int = 768\n", + " depth: int = 12\n", + " num_heads: int = 12\n", + " mlp_ratio: float = 4.0\n", + " qkv_bias: bool = True\n", + " drop_path_rate: float = 0.1\n", + " use_abs_pos: bool = True\n", + " use_rel_pos: bool = True\n", + " rel_pos_zero_init: bool = True\n", + " window_size: int = 14\n", + " window_block_indexes: Any = (0, 1, 3, 4, 6, 7, 9, 10)\n", + " pretrain_img_size: int = 224\n", + " pretrain_use_cls_token: bool = True\n", + "\n", + " def _get_abs_pos(self, abs_pos, hw):\n", + " \"\"\"Calculate absolute positional embeddings.\n", + "\n", + " If needed, resize embeddings and remove cls_token dimension for the original\n", + " embeddings.\n", + " Args:\n", + " abs_pos (array): absolute positional embeddings with (1, num_position, C).\n", + " hw (Tuple): size of input image tokens.\n", + " Returns:\n", + " Absolute positional embeddings after processing with shape (1, H, W, C)\n", + " \"\"\"\n", + " h, w = hw\n", + " if self.pretrain_use_cls_token:\n", + " abs_pos = abs_pos[:, 1:]\n", + " xy_num = abs_pos.shape[1]\n", + " size = int(xy_num ** 0.5)\n", + " assert size * size == xy_num\n", + " abs_pos = abs_pos.reshape(abs_pos.shape[0], size, size, -1)\n", + " if size != h or size != w:\n", + " new_abs_pos = jax.image.resize(\n", + " abs_pos,\n", + " (abs_pos.shape[0], h, w, abs_pos.shape[3]),\n", + " method='bicubic',\n", + " )\n", + " return new_abs_pos\n", + "\n", + " @nn.compact\n", + " def __call__(self, x: jnp.ndarray, train: bool = False):\n", + " # print('input', x.shape)\n", + " x = nn.Conv(\n", + " self.embed_dim, (self.patch_size, self.patch_size),\n", + " strides=(self.patch_size, self.patch_size),\n", + " padding='VALID',\n", + " name='patch_embed.proj')(x)\n", + " # print('after conv', x.shape, x[0, 0, 0, :10])\n", + " if self.use_abs_pos:\n", + " num_patches = (self.pretrain_img_size // self.patch_size) ** 2\n", + " num_positions = (\n", + " num_patches + 1) if self.pretrain_use_cls_token else num_patches\n", + " pos_embed = self.param(\n", + " 'pos_embed', nn.initializers.zeros,\n", + " (1, num_positions, self.embed_dim))\n", + " x = x + self._get_abs_pos(pos_embed, (x.shape[1], x.shape[2]))\n", + " # print('after pos emb', x.shape, x[0, 0, 0, :10])\n", + " dp_rates = [\n", + " self.drop_path_rate * i / (self.depth - 1) for i in range(self.depth)]\n", + " for i in range(self.depth):\n", + " x = Block(\n", + " dim=self.embed_dim,\n", + " num_heads=self.num_heads,\n", + " mlp_ratio=self.mlp_ratio,\n", + " qkv_bias=self.qkv_bias,\n", + " drop_path=dp_rates[i],\n", + " use_rel_pos=self.use_rel_pos,\n", + " rel_pos_zero_init=self.rel_pos_zero_init,\n", + " window_size=self.window_size if i in self.window_block_indexes else 0,\n", + " input_size=(\n", + " self.img_size // self.patch_size,\n", + " self.img_size // self.patch_size),\n", + " name=f'blocks.{i}',\n", + " )(x, train=train)\n", + " # print(f'after block {i}', x.shape, x[0, 0, 0, :10])\n", + " return x\n", + "\n", + "\n", + "SIZE_CONFIGS = {\n", + " 'B': (768, 12, 12, 0.1, (0, 1, 3, 4, 6, 7, 9, 10)),\n", + " 'L': (1024, 24, 16, 0.4, (\n", + " 0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22)),\n", + " 'H': (1280, 32, 16, 0.5, (\n", + " 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21,\n", + " 22, 24, 25, 26, 27, 28, 29, 30)),\n", + "}\n", + "\n", + "\n", + "class SimpleFeaturePyramid(nn.Module):\n", + " \"\"\"This module implements SimpleFeaturePyramid in paper:`vitdet`.\n", + "\n", + " It creates pyramid features built on top of the input feature map.\n", + "\n", + " Attributes:\n", + " in_dim (int): input dim\n", + " out_channels (int): number of channels in the output feature maps.\n", + " scale_factors (list[float]): list of scaling factors to upsample or\n", + " downsample the input features for creating pyramid features.\n", + " num_top_blocks (int): top level downsample block\n", + " norm (str): the normalization to use.\n", + " square_pad (int): If > 0, require input images to be padded to specific\n", + " square size.\n", + " \"\"\"\n", + " in_dim: int = 768\n", + " out_channels: int = 256\n", + " scale_factors: Any = (4.0, 2.0, 1.0, 0.5)\n", + " num_top_blocks: int = 1\n", + " square_pad: int = 1024\n", + " backbone_args: ml_collections.ConfigDict = ml_collections.ConfigDict()\n", + "\n", + " @nn.compact\n", + " def __call__(self, x: jnp.ndarray, train: bool = False):\n", + " sz = self.backbone_args.pop('size', 'B')\n", + " dim, depth, num_heads, dp, window_block_indexes = SIZE_CONFIGS[sz]\n", + " self.backbone_args['embed_dim'] = self.backbone_args.get(\n", + " 'embed_dim', dim)\n", + " self.backbone_args['depth'] = self.backbone_args.get('depth', depth)\n", + " self.backbone_args['num_heads'] = self.backbone_args.get(\n", + " 'num_heads', num_heads)\n", + " self.backbone_args['drop_path_rate'] = self.backbone_args.get(\n", + " 'drop_path_rate', dp)\n", + " self.backbone_args['window_block_indexes'] = self.backbone_args.get(\n", + " 'window_block_indexes', window_block_indexes)\n", + " features = ViT(**self.backbone_args, name='net')(x, train=train)\n", + " # features = ViT(name='net')(x, train=train)\n", + " results = []\n", + " dim = self.in_dim\n", + " conv_transpose = functools.partial(\n", + " nn.ConvTranspose, kernel_size=(2, 2), strides=(2, 2))\n", + " ln = functools.partial(nn.LayerNorm, epsilon=1e-6)\n", + " conv = functools.partial(nn.Conv, use_bias=False)\n", + " for scale in self.scale_factors:\n", + " x = features\n", + " if scale == 4.0:\n", + " stage, idx_base = 2, 4\n", + " x = conv_transpose(dim // 2, name='simfp_2.0')(x)\n", + " x = ln(name='simfp_2.1')(x)\n", + " x = nn.gelu(x, approximate=False)\n", + " x = conv_transpose(dim // 4, name='simfp_2.3')(x)\n", + " elif scale == 2.0:\n", + " stage, idx_base = 3, 1\n", + " x = conv_transpose(dim // 2, name='simfp_3.0')(x)\n", + " elif scale == 1.0:\n", + " stage, idx_base = 4, 0\n", + " elif scale == 0.5:\n", + " stage, idx_base = 5, 1\n", + " x = nn.max_pool(x, (2, 2), strides=(2, 2))\n", + " else:\n", + " raise NotImplementedError(f'scale_factor={scale} is not supported yet.')\n", + " x = conv(\n", + " self.out_channels, kernel_size=(1, 1),\n", + " name=f'simfp_{stage}.{idx_base}')(x)\n", + " x = ln(name=f'simfp_{stage}.{idx_base}.norm')(x)\n", + " x = conv(\n", + " self.out_channels, kernel_size=(3, 3), padding=[(1, 1), (1, 1)],\n", + " name=f'simfp_{stage}.{idx_base + 1}')(x)\n", + " x = ln(name=f'simfp_{stage}.{idx_base + 1}.norm')(x)\n", + " results.append(x)\n", + " if self.num_top_blocks == 1:\n", + " x = nn.max_pool(\n", + " results[-1], (1, 1), strides=(2, 2), padding=[(0, 0), (0, 0)])\n", + " results.append(x)\n", + " elif self.num_top_blocks == 2:\n", + " top_block = TwiceDownsampleBlock(\n", + " out_channels=self.out_channels, name='top_block')\n", + " p6, p7 = top_block(results[-1])\n", + " results.extend([p6, p7])\n", + " else:\n", + " raise NotImplementedError(\n", + " f'num_top_blocks={self.num_top_blocks} is not supported yet.')\n", + " return results" + ], + "metadata": { + "id": "vQqESU6MILoT", + "cellView": "form" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#@title\n", + "import ml_collections\n", + "backbone_args = ml_collections.ConfigDict()\n", + "sz = 'B'\n", + "dim, depth, num_heads, dp, window_block_indexes = SIZE_CONFIGS[sz]\n", + "backbone_args['embed_dim'] = backbone_args.get(\n", + " 'embed_dim', dim)\n", + "backbone_args['depth'] = backbone_args.get('depth', depth)\n", + "backbone_args['num_heads'] = backbone_args.get(\n", + " 'num_heads', num_heads)\n", + "backbone_args['drop_path_rate'] = backbone_args.get(\n", + " 'drop_path_rate', dp)\n", + "backbone_args['window_block_indexes'] = backbone_args.get(\n", + " 'window_block_indexes', window_block_indexes)\n", + "vit_model = ViT(**backbone_args)\n", + "\n", + "rng = {'dropout': jax.random.PRNGKey(0), 'params': jax.random.PRNGKey(0)}\n", + "input = jax.random.normal(jax.random.PRNGKey(0), (1, 1024, 1024, 3))\n", + "vit_vars = vit_model.init(rng, input)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "CR7nggeHSBKx", + "outputId": "dbae5c9e-aea9-4f43-ef87-681fd6ff0ab1" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "WARNING:jax._src.xla_bridge:CUDA backend failed to initialize: Found CUDA version 12010, but JAX was built against version 12020, which is newer. The copy of CUDA that is installed must be at least as new as the version against which JAX was built. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "ret, tree = dfs('', vit_vars['params'], torch_weights)\n", + "num_params = 0\n", + "for k, v in torch_weights.items():\n", + " if 'cls_token' not in k and 'norm.' not in k:\n", + " num_params += np.prod(v.shape)\n", + " else:\n", + " print(f'{k} not loaded')\n", + "print('#params in loaded model:', num_params)\n", + "num_params = 0\n", + "for k, v in ret:\n", + " if 'rel_pos' not in k:\n", + " num_params += np.prod(v)\n", + "print('#params in converted model:', num_params)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XrgNQVbYSYzG", + "outputId": "f0314032-30e8-4064-9e33-d777072434bf" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "blocks.0.attn.rel_pos_h not in checkpoint\n", + "blocks.0.attn.rel_pos_w not in checkpoint\n", + "blocks.1.attn.rel_pos_h not in checkpoint\n", + "blocks.1.attn.rel_pos_w not in checkpoint\n", + "blocks.2.attn.rel_pos_h not in checkpoint\n", + "blocks.2.attn.rel_pos_w not in checkpoint\n", + "blocks.3.attn.rel_pos_h not in checkpoint\n", + "blocks.3.attn.rel_pos_w not in checkpoint\n", + "blocks.4.attn.rel_pos_h not in checkpoint\n", + "blocks.4.attn.rel_pos_w not in checkpoint\n", + "blocks.5.attn.rel_pos_h not in checkpoint\n", + "blocks.5.attn.rel_pos_w not in checkpoint\n", + "blocks.6.attn.rel_pos_h not in checkpoint\n", + "blocks.6.attn.rel_pos_w not in checkpoint\n", + "blocks.7.attn.rel_pos_h not in checkpoint\n", + "blocks.7.attn.rel_pos_w not in checkpoint\n", + "blocks.8.attn.rel_pos_h not in checkpoint\n", + "blocks.8.attn.rel_pos_w not in checkpoint\n", + "blocks.9.attn.rel_pos_h not in checkpoint\n", + "blocks.9.attn.rel_pos_w not in checkpoint\n", + "blocks.10.attn.rel_pos_h not in checkpoint\n", + "blocks.10.attn.rel_pos_w not in checkpoint\n", + "blocks.11.attn.rel_pos_h not in checkpoint\n", + "blocks.11.attn.rel_pos_w not in checkpoint\n", + "cls_token not loaded\n", + "norm.weight not loaded\n", + "norm.bias not loaded\n", + "#params in loaded model: 85796352\n", + "#params in converted model: 85796352\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import flax\n", + "from flax.training import checkpoints\n", + "flax.config.update('flax_use_orbax_checkpointing', False)\n", + "out_path = 'mae_pretrain_vit_base'\n", + "checkpoints.save_checkpoint(out_path, {'params': tree}, 0)" + ], + "metadata": { + "id": "OQ74viedZCRx", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + }, + "outputId": "7ab19d0a-c9ca-4987-95fe-435dae1902bb" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "'mae_pretrain_vit_base/checkpoint_0'" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + } + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# from google.colab import files\n", + "# files.download(f'{out_path}/checkpoint_0')" + ], + "metadata": { + "id": "d6oCOAvjpWyG" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "ijt7f4h1Yzdi" + }, + "execution_count": null, + "outputs": [] + } + ] +} diff --git a/scenic/projects/baselines/centernet/optimizer_utils.py b/scenic/projects/baselines/centernet/optimizer_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..0613da39e7f50dff28a5527f12e7d3eb8a81db3b --- /dev/null +++ b/scenic/projects/baselines/centernet/optimizer_utils.py @@ -0,0 +1,205 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for optimizers.""" + +import copy +from typing import Any, Callable, Optional, Union + +from absl import logging +import flax +import ml_collections +import optax +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers as optimizer_lib + +ScalarOrSchedule = Union[float, optax.Schedule] +MaskOrFn = Optional[Union[Any, Callable[[optax.Params], Any]]] +PyTree = Any + + +def optimizer_with_layerwise_decay( + config: ml_collections.ConfigDict, + params: PyTree, + use_frozen_params: bool = True): + """Returns an optimizer with layerwise decay. + + This implementation is forked from av_mae: + https://github.com/google-research/scenic/blob/main/scenic/projects/av_mae/ + optimizer_utils.py + + Implementation of layerwise decay follows BEIT and MAE. + Reference: https://github.com/facebookresearch/mae/blob/main/util/lr_decay.py + + This function can apply layerwise decay to any optimizer, although this is + typically done with Adam. + + Args: + config: The training config. + params: The parameters of the model being trained. + use_frozen_params: If True, the optimizer will always expect to receive + a FrozenDict of parameters and gradients. + + Returns: + An Optax optimizer. + """ + optimizer_config = config.optimizer + # Avoid modifying original config and allow alteration. + optimizer_config = copy.deepcopy(optimizer_config).unlock() + base_learning_rate = config.lr_configs.base_learning_rate + + decay_layer_prefix = optimizer_config.decay_layer_prefix + decay_stem_layers = optimizer_config.decay_stem_layers + num_transformer_layers = config.optimizer.num_layers + del optimizer_config.decay_layer_prefix + del optimizer_config.decay_stem_layers + del optimizer_config.num_layers + + if optimizer_config.get('layerwise_decay', 0) <= 0: + logging.info('Not performing any layerwise decay.') + if 'layerwise_decay' in optimizer_config: + del optimizer_config.layerwise_decay + lr_fn = lr_schedules.get_learning_rate_fn(config) + return optimizer_lib.get_optimizer(optimizer_config, lr_fn, params) + + num_layers = num_transformer_layers + 1 + layer_decay = optimizer_config.layerwise_decay + learning_rate_scales = [ + layer_decay**(num_layers - i) for i in range(num_layers + 1) + ] + logging.info('Learning rate scales: %s', learning_rate_scales) + + layer_configs = [copy.deepcopy(config) for _ in range(num_layers + 1)] + for index in range(len(layer_configs)): + learning_rate = base_learning_rate * learning_rate_scales[index] + layer_configs[index].lr_configs.base_learning_rate = learning_rate + + learning_rate_fns = [ + lr_schedules.get_learning_rate_fn(layer_config) + for layer_config in layer_configs + ] + + # Weight decay mask is applied within optimizer_lib.get_optimizer. + # Note that we need to delete the layerwise_decay attribute, as Optax + # optimizers do not accept this argument. + del optimizer_config.layerwise_decay + optimizers = { + i: optimizer_lib.get_optimizer( + optimizer_config, learning_rate_fns[i], params) + for i in range(num_layers + 1) + } + + def _get_layer_id(name: str, num_layers: int) -> int: + for k in decay_stem_layers: + if k in name: + return 0 + if name.startswith(decay_layer_prefix): + l = len(decay_layer_prefix) + substring = name[l: name[l:].find('/') + l] + layer_id = int(substring) + return layer_id + 1 + else: + return num_layers + + flat_params = flax.traverse_util.flatten_dict( + flax.core.unfreeze(params), keep_empty_nodes=True, sep='/') + flat_layer_map = {k: _get_layer_id(k, num_layers) for k in flat_params} + layer_map = flax.traverse_util.unflatten_dict(flat_layer_map, sep='/') + if use_frozen_params: + layer_map = flax.core.freeze(layer_map) + + logging.info( + 'Layer assignments:\n%s', + flax.traverse_util.flatten_dict(layer_map, sep='/')) + tx = optax.multi_transform(optimizers, layer_map) + return tx + + +def optimizer_with_backbone_multiplier( + config: ml_collections.ConfigDict, + params: PyTree, + use_frozen_params: bool = True): + """Returns an optimizer with backbone learning rate multiplier. + + + Args: + config: The training config. + params: The parameters of the model being trained. + use_frozen_params: If True, the optimizer will always expect to receive + a FrozenDict of parameters and gradients. + + Returns: + An Optax optimizer. + """ + optimizer_config = config.optimizer + # Avoid modifying original config and allow alteration. + optimizer_config = copy.deepcopy(optimizer_config).unlock() + base_learning_rate = config.lr_configs.base_learning_rate + + backbone_layer_prefix = optimizer_config.backbone_layer_prefix + backbone_multiplier = optimizer_config.backbone_multiplier + backbone_learning_rate = base_learning_rate * backbone_multiplier + del optimizer_config.backbone_layer_prefix + del optimizer_config.backbone_multiplier + logging.info('Learning rate scales: %s', backbone_learning_rate) + + backbone_config = copy.deepcopy(config) + backbone_config.lr_configs.base_learning_rate = backbone_learning_rate + + learning_rate_fns = lr_schedules.get_learning_rate_fn(config) + backbone_learning_rate_fns = lr_schedules.get_learning_rate_fn( + backbone_config) + + optimizers = { + False: optimizer_lib.get_optimizer( # not backbone + optimizer_config, learning_rate_fns, params), + True: optimizer_lib.get_optimizer( # is backbone + optimizer_config, backbone_learning_rate_fns, params), + } + + def is_backbone(name: str) -> bool: + return name.startswith(backbone_layer_prefix) + + flat_params = flax.traverse_util.flatten_dict( + flax.core.unfreeze(params), keep_empty_nodes=True, sep='/') + flat_layer_map = {k: is_backbone(k) for k in flat_params} + layer_map = flax.traverse_util.unflatten_dict(flat_layer_map, sep='/') + if use_frozen_params: + layer_map = flax.core.freeze(layer_map) + + logging.info( + 'Layer assignments:\n%s', + flax.traverse_util.flatten_dict(layer_map, sep='/')) + tx = optax.multi_transform(optimizers, layer_map) + return tx + + +def create_optimizer_and_lr_fn(params, config): + """Returns an optimizer.""" + lr_fn = lr_schedules.get_learning_rate_fn(config) + if config.optimizer.get('layerwise_decay', 0.0) > 0: + tx = optimizer_with_layerwise_decay( + config, params=params) + elif config.optimizer.get('backbone_multiplier', -1.) >= 0.0: + tx = optimizer_with_backbone_multiplier( + config, params=params) + else: + config = config.unlock() + for k in ['layerwise_decay', 'num_layers', + 'decay_layer_prefix', 'decay_stem_layers']: + if k in config.optimizer: + del config.optimizer[k] + config = config.lock() + tx = optimizer_lib.get_optimizer(config.optimizer, lr_fn, params=params) + return tx, lr_fn diff --git a/scenic/projects/baselines/centernet/requirements.txt b/scenic/projects/baselines/centernet/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..99f22cd1258a69ec92127f440e89b7fe13da59a0 --- /dev/null +++ b/scenic/projects/baselines/centernet/requirements.txt @@ -0,0 +1 @@ +pycocotools diff --git a/scenic/projects/baselines/centernet/tools/build_coco_tfrecord.py b/scenic/projects/baselines/centernet/tools/build_coco_tfrecord.py new file mode 100644 index 0000000000000000000000000000000000000000..638ee2b0b7d4aa7c8560539d4a69ee54b85494be --- /dev/null +++ b/scenic/projects/baselines/centernet/tools/build_coco_tfrecord.py @@ -0,0 +1,200 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Convert COCO json annotation and images into tfrecord. + +Example usage: + + +python scenic/projects/baselines/centernet/tools/build_coco_tfrecord.py \ +--input_json ~/Datasets/COCO/annotations/instances_train2017.json \ +--image_path ~/Datasets/COCO/train2017/ \ +--output_path ~/Datasets/COCO/tfrecords/instances_train2017.tfrecord \ +--num_shards 256 +""" +import io +import json + +from absl import app +from absl import flags +from absl import logging +import numpy as np +from PIL import Image +from pycocotools import mask as mask_api +import tensorflow as tf +from tensorflow.io import gfile + + +FLAGS = flags.FLAGS + +flags.DEFINE_string( + 'input_json', + '', + 'path to the json annotations.') +flags.DEFINE_string( + 'image_path', + '', + 'path to images.') +flags.DEFINE_string( + 'output_path', + '', + 'Output path of SSTable of bounding boxes') +flags.DEFINE_integer('num_samples', -1, '') +flags.DEFINE_integer('num_shards', 32, '') + + +def str_to_bytes(string): + return string.encode('utf-8') + + +def _bytes_feature(value): + return tf.train.Feature(bytes_list=tf.train.BytesList(value=value)) + + +def _float_feature(value): + return tf.train.Feature(float_list=tf.train.FloatList(value=value)) + + +def _int64_feature(value): + return tf.train.Feature(int64_list=tf.train.Int64List(value=value)) + + +def polygons_to_bitmask(polygons, height, width): + """Convert polygons to bitmask.""" + if len(polygons) <= 0: + # COCOAPI does not support empty polygons + return np.zeros((height, width)).astype(bool) + rles = mask_api.frPyObjects(polygons, height, width) + rle = mask_api.merge(rles) + return mask_api.decode(rle).astype(bool) + + +def numpy_to_encoded(image_nps): + image_bytes = [] + for image_np in image_nps: + image_pil = Image.fromarray(image_np) + buffer = io.BytesIO() + image_pil.save(buffer, format='PNG') + buffer.seek(0) + image_byte = buffer.getvalue() + image_bytes.append(image_byte) + return tf.train.Feature(bytes_list=tf.train.BytesList(value=image_bytes)) + + +def process_record(image_info, anns, image_path, clsid2contid): + """Creates a sequence example from a list of dict.""" + if 'file_name' in image_info: + file_name = image_info['file_name'] + else: + file_name = image_info['coco_url'][30:] + img_path = image_path + file_name + img_string = gfile.Open(img_path, 'rb').read() + width, height = image_info['width'], image_info['height'] + bbox = np.asarray( + [x['bbox'] for x in anns], dtype=np.float32).reshape(-1, 4) + + with_mask = False + for x in anns: + if 'segmentation' in x: + with_mask = True + if isinstance(x['segmentation'], list): + x['mask'] = polygons_to_bitmask(x['segmentation'], height, width) + elif isinstance(x['segmentation'], dict): + if isinstance(x['segmentation']['counts'], list): + rle = mask_api.frPyObjects([x['segmentation']], height, width) + else: + rle = [x['segmentation']] + x['mask'] = mask_api.decode(rle) + else: + assert 0, type(x['segmentation']) + if len(x['mask'].shape) == 3: + assert x['mask'].shape[2] == 1, x['mask'].shape + x['mask'] = x['mask'][:, :, 0] + + if with_mask: + mask = np.asarray([x['mask'] * 255 for x in anns], dtype=np.uint8) + else: + mask = None + areas = bbox[:, 2] * bbox[:, 3] + bbox[:, 2:] = bbox[:, 2:] + bbox[:, :2] + bbox[:, [0, 2]] /= width + bbox[:, [1, 3]] /= height + # tfds builder use format [y0, x0, y1, x1] + bbox[:, [0, 1]], bbox[:, [2, 3]] = bbox[:, [1, 0]], bbox[:, [3, 2]] + + feature = { + 'image/encoded': _bytes_feature([img_string]), + 'image/filename': _bytes_feature([str_to_bytes(file_name)]), + 'image/height': _int64_feature([image_info['height']]), + 'image/width': _int64_feature([image_info['width']]), + 'image/id': _int64_feature([image_info['id']]), + 'objects/bbox': _float_feature(bbox.flatten()), + 'objects/area': _int64_feature(np.asarray(areas, dtype=np.int64)), + 'objects/id': _int64_feature(np.asarray( + [x['id'] for x in anns], dtype=np.int64)), + 'objects/is_crowd': _int64_feature(np.asarray( + [x['iscrowd'] if 'iscrowd' in x else 0 for x in anns], + dtype=np.int64)), + 'objects/label': _int64_feature(np.asarray( + [clsid2contid[x['category_id']] for x in anns], dtype=np.int64)), + } + if with_mask: + feature['objects/segmentation'] = numpy_to_encoded(mask) + for x in anns: + del x['mask'] + example = tf.train.Example(features=tf.train.Features(feature=feature)) + example = example.SerializeToString() + return example + + +def main(unused_argv): + logging.info('Loading %s', FLAGS.input_json) + data = json.load(gfile.Open(FLAGS.input_json, 'r')) + images = data['images'] + annotations = {x['id']: [] for x in images} + clsid2contid = {x['id']: i for i, x in enumerate( + sorted(data['categories'], key=lambda x: x['id']))} + + for x in data['annotations']: + annotations[x['image_id']].append(x) + + if FLAGS.num_samples > 0: + images = images[:FLAGS.num_samples] + + output_path = FLAGS.output_path + shard_id = 0 + output_path_pattern = output_path + '-{:05d}-of-{:05d}' + output_path = output_path_pattern.format(shard_id, FLAGS.num_shards) + num_examples_per_shard = (len(images) - 1) // FLAGS.num_shards + 1 + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + num_exampels = 0 + for i, image_info in enumerate(images): + if i % 1000 == 0: + print(i) + anns = annotations[image_info['id']] + record = process_record( + image_info, anns, FLAGS.image_path, clsid2contid) + writer.write(record) + num_exampels += 1 + if (num_exampels % num_examples_per_shard == 0): + writer.close() + shard_id += 1 + output_path = output_path_pattern.format(shard_id, FLAGS.num_shards) + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + writer.close() + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/baselines/centernet/train_utils.py b/scenic/projects/baselines/centernet/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..ca2abf3573ce569b164776a4f23df43d74c7365b --- /dev/null +++ b/scenic/projects/baselines/centernet/train_utils.py @@ -0,0 +1,158 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utility functions for the trainer.""" + +from absl import logging +import flax +from flax.training import checkpoints +import jax +import numpy as np +from scenic.common_lib import debug_utils + +FrozenDict = flax.core.FrozenDict + + +def copy_matched_params( + expected_params, restored_params, load_prefix='', load_replace=(), + skip_wrong_shape=False, load_available_shape=()): + """Copy matched parameters from a restored one.""" + flattened_restored_params = flax.traverse_util.flatten_dict( + restored_params, sep='/') + if load_prefix: + flattened_restored_params = { + load_prefix + k: v for k, v in flattened_restored_params.items()} + if load_replace: + for x in load_replace: + flattened_restored_params = { + k.replace( + x[0], x[1]): v for k, v in flattened_restored_params.items()} + flattened_expected_params = flax.traverse_util.flatten_dict( + expected_params, sep='/') + extra_keys = flattened_restored_params.keys( + ) - flattened_expected_params.keys() + missing_keys = flattened_expected_params.keys( + ) - flattened_restored_params.keys() + logging.info('Inspect extra keys:%s', extra_keys) + logging.info('Inspect missing keys:%s', missing_keys) + for k, v in flattened_restored_params.items(): + if k not in flattened_expected_params: + logging.info( + 'Skipping parameter %s in restored model, but not in target.', k) + continue + if flattened_expected_params[k].shape != v.shape: + logging.info( + 'Key: %s. Expected shape: %s. Restored shape: %s', k, + flattened_expected_params[k].shape, v.shape) + if k in load_available_shape: + logging.info('Loading available shape for Key: %s.', k) + if len(v.shape) == 1: + flattened_expected_params[k] = flattened_expected_params[k].at[ + :v.shape[0]].set(v) + else: + flattened_expected_params[k] = flattened_expected_params[k].at[ + :v.shape[0], :v.shape[1]].set(v) + elif not skip_wrong_shape: + raise ValueError( + 'Shape mismatch between restored and target model. ' + 'Set config.skip_wrong_shape = True if this is expected.') + else: + flattened_expected_params[k] = v + new_params = flax.traverse_util.unflatten_dict( + flattened_expected_params, sep='/') + return new_params + + +def load_weights(train_state, config): + """Load pretrained weights or checkpoint. + + Args: + train_state: the parameters that need to be restored. + config: config dict that should contain "weights": the path of the + checkpoint. + Returns: + train_state: restored train_state. + start_step: step number of the checkpoint. + """ + start_step = 0 + weight_path = config.get('weights', '') + skip_wrong_shape = config.get('skip_wrong_shape', False) + load_available_shape = config.get('load_available_shape', ()) + load_prefix = config.get('load_prefix', '') + load_replace = config.get('load_replace', ()) + if weight_path: + logging.info('Loading weights from %s', weight_path) + weight_data = checkpoints.restore_checkpoint(weight_path, None) + if 'params' in weight_data: + restored_params = weight_data['params'] + else: + # Old Scenic train state format. + restored_params = weight_data['optimizer']['target'] + if 'params' in restored_params: # Backward compatibility. + restored_params = restored_params['params'] + + expected_params = train_state.params.unfreeze() + new_params = copy_matched_params( + expected_params, restored_params, + load_prefix=load_prefix, load_replace=load_replace, + skip_wrong_shape=skip_wrong_shape, + load_available_shape=load_available_shape) + train_state = train_state.replace(params=FrozenDict(new_params)) + debug_utils.log_param_shapes(train_state.params) + logging.info('Finish loading weights from %s', weight_path) + + return train_state, start_step + + +def split_batch_and_fetch_to_host(pred_or_tgt, batch_mask): + """Used to collect predictions and targets of the whole valid/test set. + + Args: + pred_or_tgt: pytree; A pytree of jnp-arrays where leaves are of shape + `[num_devices, bs, X,...,Y]`. + batch_mask: A nd-array of shape `[num_devices, bs]`, where zero values + indicate padded examples. + + Returns: + A list of length num_devices * bs of items, where each item is a tree with + the same structure as `pred_or_tgt` and each leaf contains a single example. + """ + # Fetch to host in a single call. + pred_or_tgt, batch_mask = jax.device_get((pred_or_tgt, batch_mask)) + batch_mask = np.array(batch_mask).astype(bool) + + def _split_mini_batches(x): + # Filter out padded examples. + x = x[batch_mask] + # Split minibatch of examples into a list of examples. + x_list = np.split(x, x.shape[0], axis=0) + # Squeeze out the dummy dimension. + return jax.tree_util.tree_map(lambda x: np.squeeze(x, axis=0), x_list) + + leaves, treedef = jax.tree_util.tree_flatten(pred_or_tgt) + + batch_shape = batch_mask.shape + assert all([leaf.shape[:2] == batch_shape for leaf in leaves]), ( + 'Inconsistent batch shapes.') + + # Split batched leaves into lists of examples: + leaves = list(map(_split_mini_batches, leaves)) + + # Go from leaf-lists to list of trees: + out = [] + if leaves: + num_examples = np.sum(batch_mask, dtype=np.int32) + for example_ind in range(num_examples): + out.append(treedef.unflatten([leaf[example_ind] for leaf in leaves])) + return out diff --git a/scenic/projects/baselines/centernet/trainer.py b/scenic/projects/baselines/centernet/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..c1020c022d7c91cd01a6c13d8e0d1bf160ce18c2 --- /dev/null +++ b/scenic/projects/baselines/centernet/trainer.py @@ -0,0 +1,278 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training script for the CenterNet.""" + +import functools +import time +from typing import Any + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import optax +from scenic.dataset_lib import dataset_utils +from scenic.projects.baselines.centernet import evaluate +from scenic.projects.baselines.centernet import optimizer_utils +from scenic.projects.baselines.centernet import train_utils as centernet_train_utils +from scenic.projects.baselines.centernet.modeling import centernet2 +from scenic.train_lib import train_utils + + +def train_step( + train_state, + batch, + *, + flax_model: nn.Module, + loss_and_metrics_fn: Any, + learning_rate_fn: Any, + debug: bool = False): + """Run a single step of training. + + Args: + train_state: learnable parameters and optimizer states. + batch: a batch of data containing images ("inputs") and annotations. + flax_model: the model definition. + loss_and_metrics_fn: loss function. + learning_rate_fn: Learning rate scheduler which given the global_step + generates the learning rate. + debug: enable debug mode or not. + Returns: + new_train_state: updated network parameters and optimizer states. + lr: the learning rate of the current step (for visualization). + predictions: the output of the network. + metrics: losses and other metrics for visualization. + """ + def loss_fn(params): + new_rng, rng = jax.random.split(train_state.rng) + model_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + variables = {'params': params, **train_state.model_state} + kwargs = {} + if isinstance(flax_model, centernet2.CenterNet2Detector): + # Two-stage detectors adds gt boxes in RoI heads in training. + kwargs['gt_boxes'] = batch['label']['boxes'] + kwargs['gt_classes'] = batch['label']['labels'] + predictions, new_model_state = flax_model.apply( + variables, + batch['inputs'], + preprocess=True, + padding_mask=batch['padding_mask'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': model_rng}, + debug=debug, + **kwargs) + loss, metrics = loss_and_metrics_fn(predictions, batch) + # adapt to normalization API in log_train_summary + metrics = {k: (v, 1.) for k, v in metrics.items()} + return loss, (new_model_state, new_rng, metrics, predictions) + + compute_gradient_fn = jax.value_and_grad(loss_fn, has_aux=True) + (_, aux), grad = compute_gradient_fn(train_state.params) + new_model_state, new_rng, metrics, predictions = aux + + step = train_state.global_step + lr = learning_rate_fn(step) + grad = jax.lax.pmean(grad, axis_name='batch') + updates, new_opt_state = train_state.tx.update( + grad, train_state.opt_state, train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + new_train_state = train_state.replace( + global_step=step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + return new_train_state, lr, predictions, metrics + + +def train_and_evaluate( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +): + """Main training loop lives in this function. + + Args: + rng: JAX PRNGKey. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + is_host = jax.process_index() == 0 + + # Initialize model class (without parameters) + model = model_cls(config, dataset.meta_data) + + # Create and initialize model parameters + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create and initialize optimizer parameters + tx, lr_fn = optimizer_utils.create_optimizer_and_lr_fn(params, config) + opt_state = tx.init(params) + + # Initialize "train_state" class, which contains all parameters. + _, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng) + + # Resume (interrupted) training from the same workdir + train_state = checkpoints.restore_checkpoint(workdir, train_state) + start_step = int(train_state.global_step) + + # Load pretrained weights at the first step + if start_step == 0: + train_state, start_step = centernet_train_utils.load_weights( + train_state, config) + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Define the function for each train step, and make it run on devices (pmap). + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_and_metrics_fn=model.loss_function, + learning_rate_fn=lr_fn, + debug=config.debug_train, + ), + axis_name='batch', donate_argnums=(0,), + ) + + # Define log options + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + log_eval_steps = config.get('log_eval_steps', steps_per_epoch) + log_summary_steps = config.get('log_summary_steps', 20) + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + eval_batch_size = config.get('eval_batch_size', config.batch_size) + chrono = train_utils.Chrono() + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + def write_note(note): + if is_host: + platform.work_unit().set_notes(note) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + hooks = [] + if is_host: + hooks.append(report_progress) + if config.get('xprof', True) and is_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + # The actual train loop + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + # Get a batch of training data + train_batch = next(dataset.train_iter) + + # Actual training happens here. + train_state, lr, train_predictions, metrics = train_step_pmapped( + train_state, train_batch) + + train_metrics.append(metrics) + extra_training_logs.append({'learning_rate': lr}) + for h in hooks: + h(step) + chrono.pause() + del train_predictions + + # Print train log + if (step % log_summary_steps == 0) or (step == total_steps - 1): + if is_host: + chrono.tick(step, writer, write_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, train_metrics), + extra_training_logs=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, extra_training_logs), + writer=writer) + train_metrics, extra_training_logs = [], [] + + # Run evaluation + if (step % log_eval_steps == 0) or (step == total_steps): + start_time = time.time() + with report_progress.timed('eval'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + last_eval_results, last_eval_metrics = evaluate.inference_on_dataset( + model.flax_model, + train_state, dataset, + eval_batch_size=eval_batch_size, + is_host=is_host, + save_dir=workdir, + config=config) + last_eval_step = step + train_utils.log_eval_summary( + step=last_eval_step, eval_metrics=last_eval_metrics, + extra_eval_summary=last_eval_results, writer=writer) + duration = time.time() - start_time + logging.info('Done with evaluation: %.4f sec.', duration) + writer.flush() + + # Handle checkpointing + if ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)): + with report_progress.timed('checkpoint'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + if is_host: + unrep_train_state = jax_utils.unreplicate(train_state) + train_utils.save_checkpoint(workdir, unrep_train_state, max_to_keep=1) + del unrep_train_state + chrono.resume() # Un-pause now. + + train_utils.barrier() + return train_state, train_summary, eval_summary diff --git a/scenic/projects/baselines/centernet/transforms.py b/scenic/projects/baselines/centernet/transforms.py new file mode 100644 index 0000000000000000000000000000000000000000..1dcdc470d025f2ff0b6d07e0d08e3727d836b44c --- /dev/null +++ b/scenic/projects/baselines/centernet/transforms.py @@ -0,0 +1,320 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data augmentation transforms for data loading. + +Forked and modified from +https://github.com/google-research/scenic/blob/main/scenic/projects/baselines/ +detr/transforms.py +""" + +from typing import Any, Dict +import tensorflow as tf + + +class FixedSizeCrop: + """Crop a random sized region from the image.""" + + def __init__(self, crop_size): + self.crop_size = crop_size + + def __call__(self, features): + h, w = get_hw(features, dtype=tf.int32) + wcrop = tf.cast(tf.minimum(w, self.crop_size), tf.int32) + hcrop = tf.cast(tf.minimum(h, self.crop_size), tf.int32) + i = tf.random.uniform([], 0, h - hcrop + 1, dtype=tf.int32) + j = tf.random.uniform([], 0, w - wcrop + 1, dtype=tf.int32) + region = (i, j, hcrop, wcrop) + return crop(features, region) + + +class RandomRatioResize: + """EfficientNet data augmentation. First resize than crop a fixed size.""" + + def __init__(self, scale_range, target_size): + self.min_scale = scale_range[0] + self.max_scale = scale_range[1] + self.target_size = target_size + + def __call__(self, features): + ratio = tf.random.uniform( + [], self.min_scale, self.max_scale, dtype=tf.float32) + size = tf.cast(tf.cast(self.target_size, tf.float32) * ratio, tf.int32) + return resize(features, size, max_size=size) + + +class InitPaddingMask: + """Create a `padding_mask` of `ones` to match the current unpadded image.""" + + def __call__(self, features): + h, w = get_hw(features, dtype=tf.int32) + # padding_mask is initialized as ones. It will later be padded with zeros. + features['padding_mask'] = tf.ones((h, w), dtype=tf.float32) + return features + + +class RandomHorizontalFlip: + """Horizontally flip image and boxes [cxcywh format] with probability `p`.""" + + def __init__(self, p: float = 0.5): + self.p = p + + def __call__(self, features): + rnd = tf.random.uniform([], minval=0.0, maxval=1.0, dtype=tf.float32) + if rnd < self.p: + return hflip(identity(features)) # Identity helps avoid autograph errors. + else: + return identity(features) + + +class Resize: + """Resizes image so that min side is of provided size.""" + + def __init__(self, size, max_size=None): + assert isinstance(size, int) + self.size = tf.constant(size, dtype=tf.int32) + self.max_size = max_size # Max side after resize should be < max_size. + + def __call__(self, features): + return resize(features, self.size, self.max_size) + + +class Compose: + """Compose several transforms together. + + Attributes: + transforms (list of ``Transform`` objects): list of transforms to compose. + + """ + + def __init__(self, transforms): + self.transforms = transforms + + def __call__(self, features): + for t in self.transforms: + features = t(features) + if 'masks' in features['label']: + tf.debugging.assert_shapes( + shapes=( + (features['label']['masks'], ['n', 'w', 'h', 1]), + (features['inputs'], [..., 'w', 'h', 3]), + (features['label']['labels'], ['n']), + ), + message=f'Shape mismatch after transformation {t.__class__}') + + return features + + def __repr__(self): + format_string = self.__class__.__name__ + '(' + for t in self.transforms: + format_string += '\n' + format_string += ' {0}'.format(t) + format_string += '\n)' + return format_string + + +def tf_float(t): + return tf.cast(t, tf.float32) + + +def tf_int32(t): + return tf.cast(t, tf.int32) + + +def identity(features: Dict[str, Any]) -> Dict[str, Any]: + """tf.identity for nested dictionary of Tensors.""" + out = {} + for k, v in features.items(): + if isinstance(v, tf.Tensor): + out[k] = tf.identity(v) + elif isinstance(v, dict): + out[k] = identity(v) + else: + raise NotImplementedError(f'{v}\'s type that is unsupported by identity.') + + return out + + +def hflip(features): + """Flip an image, boxes [xyxy un-normalized] (, and masks) horizontally.""" + image = features['inputs'] + target = features['label'] + + flipped_image = tf.image.flip_left_right(image) + + if 'boxes' in target: + # Flips the boxes. + _, w = get_hw(image, dtype=tf.float32) + x0, y0, x1, y1 = tf.split(target['boxes'], 4, axis=-1) + # Converts as [w - x1, y0, w - x0, y1] not [w - x1 - 1, w - x0 - 1, y1] + # because these are float coordinates not pixel indices. + target['boxes'] = tf.concat([w - x1, y0, w - x0, y1], axis=-1) + + if 'masks' in target: + target['masks'] = tf.image.flip_left_right(target['masks']) + + features['inputs'] = flipped_image + features['label'] = target + return features + + +def get_hw(features, dtype=tf.int32): + """Return the height, width of image as float32 tf.Tensors.""" + if isinstance(features, dict): + sz = tf.shape(features['inputs']) + elif isinstance(features, tf.Tensor): + sz = tf.shape(features) + else: + raise ValueError(f'Unknown type of object: {features}') + + h = tf.cast(sz[0], dtype=dtype) + w = tf.cast(sz[1], dtype=dtype) + return h, w + + +def get_size_with_aspect_ratio(image_size, size, max_size=None): + """Output (h, w) such that smallest side in image_size resizes to size.""" + h, w = image_size[0], image_size[1] + if max_size is not None: + max_size = tf_float(max_size) + min_original_size = tf_float(tf.minimum(w, h)) + max_original_size = tf_float(tf.maximum(w, h)) + if max_original_size / min_original_size * tf_float(size) > max_size: + size = tf_int32(tf.floor( + max_size * min_original_size / max_original_size)) + + if (w <= h and tf.equal(w, size)) or (h <= w and tf.equal(h, size)): + return (h, w) + + if w < h: + ow = size + oh = tf_int32(size * h / w) + else: + oh = size + ow = tf_int32(size * w / h) + + return (oh, ow) + + +def resize(features, size, max_size=None): + """Resize the image to min-side = size and adjust target boxes, area, mask. + + Args: + features: dict; 'inputs' contains tf.Tensor image unbatched. 'label' is + a dictionary of label information such a boxes, area, etc. + size: tf.Tensor; Scalar for size of smallest sized after resize. + max_size: int[Optional]; Scalar upper bound on resized image dimensions. + + Returns: + Resized and adjusted features. Also features['size'] = (w, h) tuple. + """ + image = features['inputs'] + target = features['label'] + + # Resize the image while preserving aspect ratio. + original_size = tf.shape(image)[0:2] + new_size = get_size_with_aspect_ratio(original_size, size, max_size) + rescaled_image = tf.image.resize(image, new_size) + + # Compute resize ratios for each dimension to be used for scaling boxes, area. + r_height = tf_float(new_size[0] / original_size[0]) + r_width = tf_float(new_size[1] / original_size[1]) + + if 'boxes' in target: + x0, y0, x1, y1 = tf.split(target['boxes'], 4, axis=-1) + target['boxes'] = tf.concat([x0 * r_width, y0 * r_height, + x1 * r_width, y1 * r_height], axis=-1) + + if 'area' in target: + area = target['area'] + scaled_area = tf_float(area) * (r_width * r_height) + target['area'] = scaled_area + + target['size'] = tf.stack(new_size) + + if 'masks' in target: + dtype = target['masks'].dtype + rescaled_masks = tf.image.resize( + tf_float(target['masks']), + new_size, + method=tf.image.ResizeMethod.NEAREST_NEIGHBOR) + tf.debugging.assert_shapes(( + (rescaled_image, [..., 'w', 'h', 3]), + (rescaled_masks, [..., 'w', 'h', 1]))) + target['masks'] = tf.cast(rescaled_masks, dtype) + + features['inputs'] = rescaled_image + features['label'] = target + return features + + +def crop(features, region): + """Crop the image + bbox (+ mask) to region. + + WARNING! Only use during train. In eval mode the original_size would need to + be updated somehow. + + Args: + features: DETR decoded input features. + region: (i, j, h, w) tuple of the region to be cropped. + + Returns: + Cropped features dictionary. + """ + image = features['inputs'] + target = features['label'] + i, j, h, w = region + + cropped_image = image[i:i+h, j:j+w, :] + features['inputs'] = cropped_image + + target['size'] = tf.stack([h, w]) + + fields = ['labels', 'area', 'is_crowd', 'objects/id'] + + if 'boxes' in target: + boxes = target['boxes'] + cropped_boxes = boxes - tf_float(tf.expand_dims( + tf.stack([j, i, j, i]), axis=0)) + cropped_boxes = tf.minimum( + tf.reshape(cropped_boxes, [-1, 2, 2]), + tf.reshape(tf_float(tf.stack([w, h])), [1, 1, 2])) + cropped_boxes = tf.clip_by_value(cropped_boxes, 0, 1000000) + target['boxes'] = tf.reshape(cropped_boxes, [-1, 4]) + fields.append('boxes') + + if 'area' in target: + area = tf.reduce_prod(cropped_boxes[:, 1, :] - cropped_boxes[:, 0, :], + axis=1) + target['area'] = area + + if 'masks' in target: + target['masks'] = target['masks'][..., i:i+h, j:j+w, :] + fields.append('masks') + + # Removes elements for which the boxes or masks that have zero area. + if 'boxes' in target or 'masks' in target: + if 'boxes' in target: + cropped_boxes = tf.reshape(target['boxes'], [-1, 2, 2]) + keep = tf.logical_and(cropped_boxes[:, 1, 0] > cropped_boxes[:, 0, 0], + cropped_boxes[:, 1, 1] > cropped_boxes[:, 0, 1]) + else: + keep = tf.reduce_any(tf.not_equal(target['masks'], 0), axis=[1, 2, 3]) + + for field in fields: + if field in target: + target[field] = target[field][keep] + + features['label'] = target + return features diff --git a/scenic/projects/baselines/clip/README.md b/scenic/projects/baselines/clip/README.md new file mode 100644 index 0000000000000000000000000000000000000000..7eac656a13a7e0a3d2a57ac7a8ebecd806b08302 --- /dev/null +++ b/scenic/projects/baselines/clip/README.md @@ -0,0 +1,60 @@ +## CLIP +This directory contains the implementation of CLIP for [learning visual models from natural language supervision](https://arxiv.org/abs/2103.00020). +The code here uses JAX and Flax and follows the [official implementation of CLIP](https://github.com/openai/CLIP). + +Note that the current implementation does not yet support training CLIP from +scratch. + +## Setup +This implementation uses the [tokenizer from the original implementation](https://github.com/openai/CLIP/blob/main/clip/simple_tokenizer.py). +The following command will install the required packages for CLIP, including +torch and CLIP to automatically download and convert official checkpoints and +use the tokenizer: +```shell +$ pip install -r scenic/projects/baselines/clip/requirements.txt +``` + +## Example usage: +``` +from scenic.projects.baselines.clip import model as clip +from scenic.projects.baselines.clip import tokenizer as clip_tokenizer + +model_name = 'resnet_50' + +model = clip.MODELS[model_name]() +clip_vars = clip.load_model_vars(model_name) +model_bound = model.bind(clip_vars) + +tokenizer = clip_tokenizer.build_tokenizer() +text = tokenizer('This is a cat.') +# Note that different pretrained models run natively on different images +# resolution (See `IMAGE_RESOLUTION` in model.py). +image = jnp.zeros((1, 224, 224, 3)) +image = clip.normalize_image(image) + +encoded_image, encoded_text = model_bound(image, text) + +# Or individually: +encoded_text = model_bound.encode_text(text) +encoded_image = model_bound.encode_image(image) +``` + +To be loadable, new checkpoints have to be converted from torch: +``` +import torch +import numpy as np +import jax + +clip = torch.load('/path/to/clip.pt') +params = jax.tree_util.tree_map(lambda p: p.cpu().numpy(), clip.state_dict()) +with open('/path/to/clip.npy', 'wb') as f: + np.save(f, params) +``` + +Note that these models run natively on images with resolution 224 and normalized +using `IMAGE_MEAN` and `IMAGE_STD`. The maximum text length is 77. + + +### Acknowledgment +We would like to thank Ben Poole and Dirk Weissenborn for their contribution to +the CLIP implementation in Scenic. diff --git a/scenic/projects/baselines/clip/__init__.py b/scenic/projects/baselines/clip/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/clip/__pycache__/__init__.cpython-310.pyc b/scenic/projects/baselines/clip/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..58a95b2ef062344ead51e1507ba186058e1ca0f8 Binary files /dev/null and b/scenic/projects/baselines/clip/__pycache__/__init__.cpython-310.pyc differ diff --git a/scenic/projects/baselines/clip/__pycache__/__init__.cpython-311.pyc b/scenic/projects/baselines/clip/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..862441988fc513d88ba2b2fb11a353c87a2dfc04 Binary files /dev/null and b/scenic/projects/baselines/clip/__pycache__/__init__.cpython-311.pyc differ diff --git a/scenic/projects/baselines/clip/__pycache__/__init__.cpython-312.pyc b/scenic/projects/baselines/clip/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b7d25ef9274b0cfb48d0b7208e8943b6d726c24a Binary files /dev/null and b/scenic/projects/baselines/clip/__pycache__/__init__.cpython-312.pyc differ diff --git a/scenic/projects/baselines/clip/__pycache__/download.cpython-310.pyc b/scenic/projects/baselines/clip/__pycache__/download.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..16502d5af79ba95f35913c3ce3f449771e0f1cf3 Binary files /dev/null and b/scenic/projects/baselines/clip/__pycache__/download.cpython-310.pyc differ diff --git a/scenic/projects/baselines/clip/__pycache__/download.cpython-311.pyc b/scenic/projects/baselines/clip/__pycache__/download.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dcd2c84eefa052139f62bc29828766606157a4ad Binary files /dev/null and b/scenic/projects/baselines/clip/__pycache__/download.cpython-311.pyc differ diff --git a/scenic/projects/baselines/clip/__pycache__/download.cpython-312.pyc b/scenic/projects/baselines/clip/__pycache__/download.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dbc1468027b985fa872255e8756235cff4f7be1f Binary files /dev/null and b/scenic/projects/baselines/clip/__pycache__/download.cpython-312.pyc differ diff --git a/scenic/projects/baselines/clip/download.py b/scenic/projects/baselines/clip/download.py new file mode 100644 index 0000000000000000000000000000000000000000..f657b144de7d6331b1dde12c91e27960d8078d7c --- /dev/null +++ b/scenic/projects/baselines/clip/download.py @@ -0,0 +1,92 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Provides checkpoint download helpers.""" + +import hashlib +import os +import tempfile +from typing import Optional +import urllib + +from absl import logging +from tensorflow.io import gfile +import tqdm + +DEFAULT_DOWNLOAD_DIR = os.path.expanduser('~/.cache/scenic/clip') + + +def hash_file(path): + return hashlib.sha256(gfile.GFile(path, 'rb').read()).hexdigest() + + +def download( + url: str, + root: str = DEFAULT_DOWNLOAD_DIR, + expected_sha256: Optional[str] = None +): + """Download a file if it does not exist, with a progress bar. + + Based on https://github.com/openai/CLIP/blob/main/clip/clip.py#L4 + + Args: + url (str): URL of file to download. + root (str): Directory to place the downloaded file. + expected_sha256: Optional sha256 sum. If provided, checks downloaded file. + Raises: + RuntimeError: Downloaded file existed as a directory, or sha256 of dowload + does not match expected_sha256. + Returns: + download_target (str): path to downloaded file + """ + gfile.makedirs(root) + filename = os.path.basename(url) + if '?' in filename: + # strip trailing HTTP GET arguments + filename = filename[:filename.rindex('?')] + + download_target = os.path.join(root, filename) + + if gfile.exists(download_target): + if gfile.isdir(download_target): + raise RuntimeError(f'{download_target} exists and is not a regular file') + elif expected_sha256: + if hash_file(download_target) == expected_sha256: + return download_target + logging.warning('%s exists, but the SHA256 checksum does not match;' + 're-downloading the file', download_target) + + temp_file = tempfile.NamedTemporaryFile(delete=False).name + with gfile.GFile(temp_file, 'wb') as output: + with urllib.request.urlopen(url) as source: + loop = tqdm.tqdm(total=int(source.info().get('Content-Length')), + ncols=80, unit='iB', unit_scale=True, unit_divisor=1024) + while True: + buffer = source.read(8192) + if not buffer: + break + + output.write(buffer) + loop.update(len(buffer)) + + if expected_sha256 and hash_file(temp_file) != expected_sha256: + raise RuntimeError( + 'Model has been downloaded but the SHA256 checksum does not not match') + + # Use copy+remove instead of rename in case source and target are on different + # file systems: + gfile.copy(temp_file, download_target, overwrite=True) + gfile.remove(temp_file) + + return download_target diff --git a/scenic/projects/baselines/clip/layers.py b/scenic/projects/baselines/clip/layers.py new file mode 100644 index 0000000000000000000000000000000000000000..90133e3dd969f2e4389fc9c9fdbced5d45990793 --- /dev/null +++ b/scenic/projects/baselines/clip/layers.py @@ -0,0 +1,474 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""OpenAI's CLIP models in Flax. + +The implementation is based on an initial port of code in +https://github.com/openai/CLIP to JAX, by pooleb@google.com. +""" + +import functools +from typing import Sequence, Optional, Union, Tuple + +import flax.linen as nn +import jax +import jax.numpy as jnp + +# TODO(scenic): Make initialization of all layers identical to official one. +# Note: this doesn't matter for loading pretrained models. + +# Match PyTorch default LayerNorm epsilon of 1e-5 (FLAX defaults to 1e-6). +LayerNorm = functools.partial(nn.LayerNorm, epsilon=1e-5) + + +def quick_gelu(x: jnp.ndarray) -> jnp.ndarray: + return x * jax.nn.sigmoid(1.702 * x) + + +class Shortcut(nn.Module): + """Shortcut in ResNet. + + Attributes: + features: Number of features. + stride: Stride of the down-sampled output. + """ + features: int + stride: int + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + x = nn.avg_pool(x, (self.stride, self.stride), (self.stride, self.stride)) + x = nn.Conv( + self.features, (1, 1), strides=(1, 1), use_bias=False, name='0')(x) + x = nn.BatchNorm(use_running_average=True, name='1')(x) + return x + + +class Bottleneck(nn.Module): + """Bottleneck layer of ResNet. + + Attributes: + features: Number of features. + stride: Stride of the down-sampled output. + expansion: Expansion of feature dimension. + """ + features: int + stride: int = 1 + expansion: int = 4 + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + conv1 = nn.Conv(self.features, (1, 1), use_bias=False, name='conv1') + bn1 = nn.BatchNorm(use_running_average=True, name='bn1') + + conv2 = nn.Conv(self.features, (3, 3), padding=[(1, 1), (1, 1)], + use_bias=False, name='conv2') + bn2 = nn.BatchNorm(use_running_average=True, name='bn2') + + conv3 = nn.Conv( + self.features * self.expansion, (1, 1), use_bias=False, name='conv3') + bn3 = nn.BatchNorm(use_running_average=True, name='bn3') + + out = nn.relu(bn1(conv1(x))) + out = nn.relu(bn2(conv2(out))) + out = nn.avg_pool(out, (self.stride, self.stride), + (self.stride, self.stride)) + out = bn3(conv3(out)) + + downsample = ( + self.stride > 1 or x.shape[-1] != self.features * self.expansion + ) + if downsample: + x = Shortcut(features=self.features * self.expansion, + stride=self.stride, name='downsample')(x) + + out += x + out = nn.relu(out) + return out + + +class AttentionPool(nn.Module): + """Attention pooling layer. + + Attributes: + num_heads: Number of heads. + features: Number of features. + """ + num_heads: int + features: Optional[int] = None + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + x = x.reshape(x.shape[0], -1, x.shape[3]) + + x = jnp.concatenate([x.mean(axis=1, keepdims=True), x], axis=1) + + positional_embedding = self.param( + 'positional_embedding', + jax.nn.initializers.normal(1. / x.shape[-1]**0.5), + (x.shape[1], x.shape[2])) + attn = nn.MultiHeadDotProductAttention( + self.num_heads, + qkv_features=x.shape[-1], + use_bias=True, + out_features=self.features, + name='attn') + + x = x + positional_embedding[jnp.newaxis].astype(x.dtype) + x = attn(x[:, :1], x) + return x[:, 0] + + +class ResNetStage(nn.Module): + """Attention pooling layer. + + Attributes: + features: Number of features. + num_layers: Number of bottleneck blocks. + stride: Stride in the Bottleneck module. + """ + features: int + num_layers: int + stride: int = 1 + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + x = Bottleneck(self.features, self.stride, name='0')(x) + for i in range(1, self.num_layers): + x = Bottleneck(self.features, name=str(i))(x) + return x + + +class ModifiedResNet(nn.Module): + """A ResNet class that is similar to torchvision's with changes. + + - There are now 3 "stem" convolutions as opposed to 1, with an average pool + instead of a max pool. + - Performs anti-aliasing strided convolutions, where an avgpool is + prepended to convolutions with stride > 1 - The final pooling layer is a + QKV attention instead of an average pool. + + Attributes: + features: Number of features. + out_features: Number of output features. If None, return resnet feature-map. + num_layers: Number of layers for each block. + num_heads: Number of heads. + """ + features: int + out_features: Optional[int] + num_layers: Sequence[int] + num_heads: Optional[int] + + def setup(self): + # The 3-layer stem. + self.conv1 = nn.Conv( + self.features // 2, + kernel_size=(3, 3), + strides=(2, 2), + padding=[(1, 1), (1, 1)], + use_bias=False, + name='conv1') + self.bn1 = nn.BatchNorm(use_running_average=True, name='bn1') + self.conv2 = nn.Conv( + self.features // 2, + kernel_size=(3, 3), + padding=[(1, 1), (1, 1)], + use_bias=False, + name='conv2') + self.bn2 = nn.BatchNorm(use_running_average=True, name='bn2') + self.conv3 = nn.Conv( + self.features, + kernel_size=(3, 3), + padding=[(1, 1), (1, 1)], + use_bias=False, + name='conv3') + self.bn3 = nn.BatchNorm(use_running_average=True, name='bn3') + + # Residual layers. + self.layer1 = ResNetStage(self.features, self.num_layers[0], name='layer1') + self.layer2 = ResNetStage( + self.features * 2, self.num_layers[1], stride=2, name='layer2') + self.layer3 = ResNetStage( + self.features * 4, self.num_layers[2], stride=2, name='layer3') + self.layer4 = ResNetStage( + self.features * 8, self.num_layers[3], stride=2, name='layer4') + if self.out_features is not None: + self.attnpool = AttentionPool( + self.num_heads, self.out_features, name='attnpool') + + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + + def stem(x): + for conv, bn in [(self.conv1, self.bn1), (self.conv2, self.bn2), + (self.conv3, self.bn3)]: + x = nn.relu(bn(conv(x))) + x = nn.avg_pool(x, (2, 2), (2, 2)) + return x + + x = stem(x) + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = feature_map = self.layer4(x) + + if self.out_features is not None: + x = self.attnpool(x) + + return x, feature_map # pytype: disable=bad-return-type # jax-ndarray + + +class MLP(nn.Module): + """Simple MLP for Transformer.""" + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + ch = x.shape[-1] + x = nn.Dense(4 * ch, name='c_fc')(x) + x = quick_gelu(x) + x = nn.Dense(ch, name='c_proj')(x) + return x + + +class ResidualAttentionBlock(nn.Module): + """Self-attention block of Transformer. + + Attributes: + num_heads: Number of heads. + """ + num_heads: int + + @nn.compact + def __call__(self, x: jnp.ndarray, attn_mask=None) -> jnp.ndarray: + xn = LayerNorm(name='ln_1')(x) + x = x + nn.MultiHeadDotProductAttention( + self.num_heads, name='attn', deterministic=True)( + inputs_q=xn, mask=attn_mask) + xn = LayerNorm(name='ln_2')(x) + x = x + MLP(name='mlp')(xn) + return x + + +class Transformer(nn.Module): + """Transformer module. + + Attributes: + features: Number of features. + num_layers: Number of layers for each block. + num_heads: Number of heads. + use_underscore_module_name: Optionally replace '.' with '_' in parameter + naming for PAX checkpoint loading. + """ + features: int + num_layers: int + num_heads: int + use_underscore_module_name: bool = False + + @nn.compact + def __call__(self, + x: jnp.ndarray, + attn_mask: Optional[jnp.ndarray] = None) -> jnp.ndarray: + def _n(name): + """A helper function that optionally replace '.' with '_'.""" + if self.use_underscore_module_name: + return name.replace('.', '_') + else: + return name + + for i in range(self.num_layers): + x = ResidualAttentionBlock( + num_heads=self.num_heads, name=_n(f'resblocks.{i}'))(x, attn_mask) + return x + + +class VisionTransformer(nn.Module): + """Vision Transformer. + + Attributes: + patch_size: The size of the patches to embed. + features: Number of features. + num_layers: Number of transformer blocks (self-attn + MLP). + num_heads: Number of attention heads. + out_features: Number of output features. If None, return transformer output. + use_underscore_module_name: Optionally replace '.' with '_' in parameter + naming for PAX checkpoint loading. + """ + patch_size: int + features: int + num_layers: int + num_heads: int + out_features: Optional[int] + use_underscore_module_name: bool = False + + @nn.compact + def __call__(self, + x: jnp.ndarray, + attn_mask: Optional[jnp.ndarray] = None) -> jnp.ndarray: + x = nn.Conv(self.features, + kernel_size=(self.patch_size, self.patch_size), + strides=(self.patch_size, self.patch_size), + use_bias=False, name='conv1')(x) + x = x.reshape(x.shape[0], -1, x.shape[-1]) + scale = 1.0 / jnp.sqrt(self.features) + class_embedding = self.param('class_embedding', + jax.nn.initializers.normal(stddev=scale), + (self.features,)) + x = jnp.concatenate((jnp.tile(class_embedding[None, None, :], + (x.shape[0], 1, 1)), x), + axis=1) + positional_embedding = self.param('positional_embedding', + jax.nn.initializers.normal(stddev=scale), + (x.shape[1], self.features)) + x = x + positional_embedding[None] + + x = LayerNorm(name='ln_pre')(x) + x = feature_map = Transformer( + features=self.features, + num_layers=self.num_layers, + num_heads=self.num_heads, + use_underscore_module_name=self.use_underscore_module_name, + name='transformer')( + x) + + if self.out_features is not None: + x = LayerNorm(name='ln_post')(x[:, 0]) + x = nn.Dense(self.out_features, use_bias=False, name='proj')(x) + else: + x = LayerNorm(name='ln_post')(x) + + return x, feature_map # pytype: disable=bad-return-type # jax-ndarray + + +class TextEncoder(nn.Module): + """Text Transformer. + + Attributes: + vocab_size: Size of the vocabulary. + features: Number of features. + num_layers: Number of transformer blocks (self-attn + MLP). + num_heads: Number of attention heads. + out_features: Size of the final text embedding. + use_underscore_module_name: Optionally replace '.' with '_' in parameter + naming for PAX checkpoint loading. + """ + vocab_size: int + features: int + num_layers: int + num_heads: int + out_features: int + use_underscore_module_name: bool = False + + @nn.compact + def __call__(self, text: jnp.ndarray) -> jnp.ndarray: + positional_embedding = self.param('positional_embedding', + jax.nn.initializers.zeros, + (text.shape[1], self.features)) + mask = nn.combine_masks( + nn.make_attention_mask(text > 0, text > 0), nn.make_causal_mask(text)) + x = nn.Embed(self.vocab_size, self.features, name='token_embedding')(text) + x = x + positional_embedding[None] + x = Transformer( + self.features, + self.num_layers, + self.num_heads, + use_underscore_module_name=self.use_underscore_module_name, + name='transformer')( + x, attn_mask=mask) + x = LayerNorm(name='ln_final')(x) + x = x[jnp.arange(x.shape[0]), text.argmax(-1)] + x = nn.Dense(self.out_features, use_bias=False, name='text_projection')(x) + return x + + +class CLIP(nn.Module): + """Clip model consisting of a vision and text transformer. + + Attributes: + vocab_size: Size of the vocabulary. + embed_dim: Size of the text and vision embeddings. + text_features: Number of features in text transformer. + text_num_layers: Number of text transformer blocks (self-attn + MLP). + text_num_heads: Number of heads in text transformer. + vision_features: Number of features in vision transformer. + vision_num_layers: Number of vision transformer blocks (self-attn + MLP). + vision_head_dim: Number of features per vision transformer attention head. + vision_patch_size: Size of patches to embed in vision transformer. + use_underscore_module_name: Optionally replace '.' with '_' in parameter + naming for PAX checkpoint loading. + """ + vocab_size: int + embed_dim: int + # Text. + text_features: int + text_num_layers: int + text_num_heads: int + # Vision. + vision_features: int + vision_num_layers: Union[int, Sequence[int]] + vision_head_dim: int = 64 + vision_patch_size: Optional[int] = None + vision_return_map: bool = False + use_underscore_module_name: bool = False + + def setup(self): + if isinstance(self.vision_num_layers, (tuple, list)): + self.vision_num_heads = self.vision_features * 32 // self.vision_head_dim + self.visual = ModifiedResNet( + num_layers=self.vision_num_layers, + features=self.vision_features, + num_heads=self.vision_num_heads, + out_features=None if self.vision_return_map else self.embed_dim) + else: + self.vision_num_heads = self.vision_features // self.vision_head_dim + self.visual = VisionTransformer( + patch_size=self.vision_patch_size, + features=self.vision_features, + num_layers=self.vision_num_layers, + num_heads=self.vision_num_heads, + out_features=None if self.vision_return_map else self.embed_dim, + use_underscore_module_name=self.use_underscore_module_name) + self.text = TextEncoder( + out_features=self.embed_dim, + vocab_size=self.vocab_size, + features=self.text_features, + num_layers=self.text_num_layers, + num_heads=self.text_num_heads, + use_underscore_module_name=self.use_underscore_module_name) + self.logit_scale = self.param('logit_scale', jax.nn.initializers.zeros, ()) + + def encode_image(self, + image: jnp.ndarray, + normalize: bool = True) -> jnp.ndarray: + x = self.visual(image)[0] + if normalize: + x /= jnp.linalg.norm(x, axis=-1, keepdims=True) + return x + + def encode_text(self, + text: jnp.ndarray, + normalize: bool = True) -> jnp.ndarray: + x = self.text(text) + if normalize: + x /= jnp.linalg.norm(x, axis=-1, keepdims=True) + return x + + def __call__(self, + image: jnp.ndarray, + text: jnp.ndarray, + normalize: bool = True) -> Tuple[jnp.ndarray, jnp.ndarray]: + x = y = None + if image is not None: + x = self.encode_image(image, normalize) + if text is not None: + y = self.encode_text(text, normalize) + return x, y diff --git a/scenic/projects/baselines/clip/model.py b/scenic/projects/baselines/clip/model.py new file mode 100644 index 0000000000000000000000000000000000000000..1f575221efc0a1a11fd2aa287670626e2b072a94 --- /dev/null +++ b/scenic/projects/baselines/clip/model.py @@ -0,0 +1,419 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Provides builders and loaders of CLIP checkpoints.""" + +import os +from typing import Any, Mapping, Optional + +from absl import logging +import flax +import jax +import jax.numpy as jnp +import numpy as np +from scenic.projects.baselines.clip import layers +from scenic.projects.baselines.clip import download + +from tensorflow.io import gfile + +# JAX team is working type checking for pytrees: +# https://github.com/jax-ml/jax/issues/3340 +PyTree = Any + +# pylint: disable=line-too-long +# Checkpoint paths from https://github.com/openai/CLIP/blob/main/clip/clip.py#L30 +CHECKPOINTS_TORCH = { + 'resnet_50': 'https://openaipublic.azureedge.net/clip/models/afeb0e10f9e5a86da6080e35cf09123aca3b358a0c3e3b6c78a7b63bc04b6762/RN50.pt', + 'resnet_101': 'https://openaipublic.azureedge.net/clip/models/8fa8567bab74a42d41c5915025a8e4538c3bdbe8804a470a72f30b0d94fab599/RN101.pt', + 'resnet_50x4': 'https://openaipublic.azureedge.net/clip/models/7e526bd135e493cef0776de27d5f42653e6b4c8bf9e0f653bb11773263205fdd/RN50x4.pt', + 'resnet_50x16': 'https://openaipublic.azureedge.net/clip/models/52378b407f34354e150460fe41077663dd5b39c54cd0bfd2b27167a4a06ec9aa/RN50x16.pt', + 'resnet_50x64': 'https://openaipublic.azureedge.net/clip/models/be1cfb55d75a9666199fb2206c106743da0f6468c9d327f3e0d0a543a9919d9c/RN50x64.pt', + 'vit_b32': 'https://openaipublic.azureedge.net/clip/models/40d365715913c9da98579312b702a82c18be219cc2a73407c4526f58eba950af/ViT-B-32.pt', + 'vit_b16': 'https://openaipublic.azureedge.net/clip/models/5806e77cd80f8b59890b7e101eabd078d9fb84e6937f9e85e4ecb61988df416f/ViT-B-16.pt', + 'vit_l14': 'https://openaipublic.azureedge.net/clip/models/b8cca3fd41ae0c99ba7e8951adf17d267cdb84cd88be6f7c2e0eca1737a03836/ViT-L-14.pt', + 'vit_l14_336px': 'https://openaipublic.azureedge.net/clip/models/3035c92b350959924f9f00213499208652fc7ea050643e8b385c2dac08641f02/ViT-L-14-336px.pt', +} + +CHECKPOINTS = { + 'resnet_50': None, + 'resnet_101': None, + 'resnet_50x4': None, + 'resnet_50x16': None, + 'resnet_50x64': None, + 'vit_b32': None, + 'vit_b16': None, + 'vit_l14': None, + 'vit_l14_336px': None, +} +# pylint: enable=line-too-long + + +MAX_TEXT_LENGTH = 77 +IMAGE_RESOLUTION = { + 'resnet_50': 224, + 'resnet_101': 224, + 'resnet_50x4': 288, + 'resnet_50x16': 384, + 'resnet_50x64': 448, + 'vit_b32': 224, + 'vit_b16': 224, + 'vit_l14': 224, + 'vit_l14_336px': 336, +} +IMAGE_MEAN = np.array([0.48145466, 0.4578275, 0.40821073]) +IMAGE_STD = np.array([0.26862954, 0.26130258, 0.27577711]) + +CONFIGS = { + 'vit_b32': dict(embed_dim=512, + vocab_size=49408, + vision_num_layers=12, + vision_features=768, + vision_patch_size=32, + text_features=512, + text_num_heads=8, + text_num_layers=12), + 'vit_b16': dict(embed_dim=512, + vocab_size=49408, + vision_num_layers=12, + vision_features=768, + vision_patch_size=16, + text_features=512, + text_num_heads=8, + text_num_layers=12), + 'vit_l14': dict(embed_dim=768, + vocab_size=49408, + vision_num_layers=24, + vision_features=1024, + vision_patch_size=14, + text_features=768, + text_num_heads=12, + text_num_layers=12), + 'vit_l14_336px': dict(embed_dim=768, + vocab_size=49408, + vision_num_layers=24, + vision_features=1024, + vision_patch_size=14, + text_features=768, + text_num_heads=12, + text_num_layers=12), + 'resnet_50': dict(embed_dim=1024, + vocab_size=49408, + vision_num_layers=(3, 4, 6, 3), + vision_features=64, + text_features=512, + text_num_heads=8, + text_num_layers=12), + 'resnet_50x4': dict(embed_dim=640, + vocab_size=49408, + vision_num_layers=(4, 6, 10, 6), + vision_features=80, + text_features=640, + text_num_heads=10, + text_num_layers=12), + 'resnet_50x16': dict(embed_dim=768, + vocab_size=49408, + vision_num_layers=(6, 8, 18, 8), + vision_features=96, + text_features=768, + text_num_heads=12, + text_num_layers=12), + 'resnet_50x64': dict(embed_dim=1024, + vocab_size=49408, + vision_num_layers=(3, 15, 36, 10), + vision_features=128, + text_features=1024, + text_num_heads=16, + text_num_layers=12), + 'resnet_101': dict(embed_dim=512, + vocab_size=49408, + vision_num_layers=(3, 4, 23, 3), + vision_features=64, + text_features=512, + text_num_heads=8, + text_num_layers=12) +} + + +def load_model_vars( + model_name: str, + checkpoint_path: Optional[str] = None, + download_dir: str = download.DEFAULT_DOWNLOAD_DIR, +) -> PyTree: + """Load model variables from a checkpoint, downloading if necessary.""" + checkpoint_path = checkpoint_path or CHECKPOINTS.get(model_name) + if checkpoint_path is None: + checkpoint_path = os.path.join(download_dir, model_name + '.npy') + + if not gfile.exists(checkpoint_path): + # Download PyTorch checkpoint + url = CHECKPOINTS_TORCH.get(model_name) + logging.info('Downloading checkpoint from %s to %s', url, download_dir) + checkpoint_path_torch = download.download( + url, download_dir, expected_sha256=url.split('/')[-2]) + + # Load and convert checkpoint to numpy + logging.info('Converting checkpoint %s to numpy', checkpoint_path_torch) + try: + import torch + except ImportError as e: + logging.error('Could not import torch for CLIP checkpoint conversion') + params = torch.jit.load( + checkpoint_path_torch, map_location='cpu').state_dict() + params = jax.tree_util.tree_map(lambda p: p.cpu().numpy(), params) + + # Save converted checkpoint + with gfile.GFile(checkpoint_path, 'wb') as f: + np.save(f, params) + del params + gfile.remove(checkpoint_path_torch) + + with gfile.GFile(checkpoint_path, 'rb') as f: + np_params = np.load(f, allow_pickle=True).tolist() + return _convert_vars(np_params) + + +def vit_b32(): + return layers.CLIP(**CONFIGS['vit_b32']) + + +def vit_b16(): + return layers.CLIP(**CONFIGS['vit_b16']) + + +def vit_l14(): + return layers.CLIP(**CONFIGS['vit_l14']) + + +def vit_l14_336px(): + return layers.CLIP(**CONFIGS['vit_l14_336px']) + + +def resnet_50(): + return layers.CLIP(**CONFIGS['resnet_50']) + + +def resnet_50x4(): + return layers.CLIP(**CONFIGS['resnet_50x4']) + + +def resnet_50x16(): + return layers.CLIP(**CONFIGS['resnet_50x16']) + + +def resnet_50x64(): + return layers.CLIP(**CONFIGS['resnet_50x64']) + + +def resnet_101(): + return layers.CLIP(**CONFIGS['resnet_101']) + + +MODELS = { + 'resnet_50': resnet_50, + 'resnet_101': resnet_101, + 'resnet_50x4': resnet_50x4, + 'resnet_50x16': resnet_50x16, + 'resnet_50x64': resnet_50x64, + 'vit_b32': vit_b32, + 'vit_b16': vit_b16, + 'vit_l14': vit_l14, + 'vit_l14_336px': vit_l14_336px, +} + + +def _convert_attn_layers(params: Mapping[str, np.ndarray], + dim_head: int = 64) -> PyTree: + """Convert attention parameters.""" + new_params = {} + processed_attn_layers = [] + for k, v in params.items(): + if 'attn.' in k: + base = k[:k.rindex('attn.')+5] + if base in processed_attn_layers: + continue + processed_attn_layers.append(base) + dim = params[base + 'out_proj.bias'].shape[-1] + heads = dim // dim_head + new_params[base + 'out.weight'] = params[ + base + 'out_proj.weight'].T.reshape(heads, dim_head, dim) + new_params[base + 'out.bias'] = params[base + 'out_proj.bias'] + qkv_bias = params[base + 'in_proj_bias'].reshape(3, heads, dim_head) + qkv_kernel = np.transpose(params[base + 'in_proj_weight'].reshape( + 3, heads, dim_head, dim), (0, 3, 1, 2)) + for i, kk in enumerate(('query', 'key', 'value')): + new_params[base + f'{kk}.bias'] = qkv_bias[i] + new_params[base + f'{kk}.weight'] = qkv_kernel[i] + else: + new_params[k] = v + return new_params + + +def _convert_vars(torch_vars: Mapping[str, np.ndarray], + dim_head: int = 64) -> PyTree: + """Convert torch parameters to flax parameters.""" + # Expand QKV dense input projection to separate Q, K, V projections + # and fix shape/transposing of attention layers. + torch_vars = _convert_attn_layers(torch_vars, dim_head) + flax_vars = {} + torch_vars.pop('context_length', None) + torch_vars.pop('input_resolution', None) + torch_vars.pop('vocab_size', None) + for torch_key, v in torch_vars.items(): + if 'num_batches_tracked' in torch_key: + continue + + if 'conv' in torch_key or 'downsample.0.weight' in torch_key: + v = v.transpose(2, 3, 1, 0) + elif 'weight' in torch_key and v.ndim == 2 and 'embedding' not in torch_key: + # Fully connected layers are transposed, embeddings are not + v = v.T + + jax_key = torch_key.replace('visual.proj', 'visual.proj.kernel') + jax_key = jax_key.replace('text_projection', 'text_projection.kernel') + if 'bn' in jax_key or 'ln' in jax_key or 'downsample.1' in jax_key: + jax_key = jax_key.replace('.weight', '.scale') + else: + jax_key = jax_key.replace('.weight', '.kernel') + if (jax_key.startswith('transformer') or + jax_key.startswith('text_projection') or + jax_key.startswith('ln_final') or + jax_key.startswith('positional_embedding')): + jax_key = 'text.' + jax_key + + jax_key = jax_key.replace( + 'token_embedding.kernel', 'text.token_embedding.embedding') + + jax_key = jax_key.replace('attnpool.k_proj', 'attnpool.attn.key') + jax_key = jax_key.replace('attnpool.q_proj', 'attnpool.attn.query') + jax_key = jax_key.replace('attnpool.v_proj', 'attnpool.attn.value') + jax_key = jax_key.replace('attnpool.c_proj', 'attnpool.attn.out') + if 'attnpool.attn.out' in jax_key: + if jax_key.endswith('kernel'): + v = v.reshape(-1, dim_head, v.shape[-1]) + elif 'attnpool.attn' in jax_key: + if jax_key.endswith('bias'): + v = v.reshape(-1, dim_head) + else: + v = v.reshape(v.shape[0], -1, dim_head) + + if jax_key.endswith('running_mean'): + jax_key = 'batch_stats.' + jax_key.replace('.running_mean', '.mean') + elif jax_key.endswith('running_var'): + jax_key = 'batch_stats.' + jax_key.replace('.running_var', '.var') + else: + jax_key = 'params.' + jax_key + + jax_key = jax_key.replace('.', '/') + jax_key = jax_key.replace('resblocks/', 'resblocks.') + jax_key = jax_key.replace('resblocks/', 'resblocks.') + + flax_vars[tuple(jax_key.split('/'))] = jnp.asarray(v) + + # Transform the flattened param dict to the original nested structure. + new_vars = flax.core.freeze(flax.traverse_util.unflatten_dict(flax_vars)) + return new_vars + + +def normalize_image(img: jnp.ndarray) -> jnp.ndarray: + return (img - IMAGE_MEAN) / IMAGE_STD + + +def unnormalize_image(x: jnp.ndarray) -> jnp.ndarray: + return x * IMAGE_STD + IMAGE_MEAN + + +# Class names and templates copied from: +# https://github.com/openai/CLIP/blob/main/notebooks/Prompt_Engineering_for_ImageNet.ipynb +PROMPTS = [ + 'a bad photo of a {}.', + 'a photo of many {}.', + 'a sculpture of a {}.', + 'a photo of the hard to see {}.', + 'a low resolution photo of the {}.', + 'a rendering of a {}.', + 'graffiti of a {}.', + 'a bad photo of the {}.', + 'a cropped photo of the {}.', + 'a tattoo of a {}.', + 'the embroidered {}.', + 'a photo of a hard to see {}.', + 'a bright photo of a {}.', + 'a photo of a clean {}.', + 'a photo of a dirty {}.', + 'a dark photo of the {}.', + 'a drawing of a {}.', + 'a photo of my {}.', + 'the plastic {}.', + 'a photo of the cool {}.', + 'a close-up photo of a {}.', + 'a black and white photo of the {}.', + 'a painting of the {}.', + 'a painting of a {}.', + 'a pixelated photo of the {}.', + 'a sculpture of the {}.', + 'a bright photo of the {}.', + 'a cropped photo of a {}.', + 'a plastic {}.', + 'a photo of the dirty {}.', + 'a jpeg corrupted photo of a {}.', + 'a blurry photo of the {}.', + 'a photo of the {}.', + 'a good photo of the {}.', + 'a rendering of the {}.', + 'a {} in a video game.', + 'a photo of one {}.', + 'a doodle of a {}.', + 'a close-up photo of the {}.', + 'a photo of a {}.', + 'the origami {}.', + 'the {} in a video game.', + 'a sketch of a {}.', + 'a doodle of the {}.', + 'a origami {}.', + 'a low resolution photo of a {}.', + 'the toy {}.', + 'a rendition of the {}.', + 'a photo of the clean {}.', + 'a photo of a large {}.', + 'a rendition of a {}.', + 'a photo of a nice {}.', + 'a photo of a weird {}.', + 'a blurry photo of a {}.', + 'a cartoon {}.', + 'art of a {}.', + 'a sketch of the {}.', + 'a embroidered {}.', + 'a pixelated photo of a {}.', + 'itap of the {}.', + 'a jpeg corrupted photo of the {}.', + 'a good photo of a {}.', + 'a plushie {}.', + 'a photo of the nice {}.', + 'a photo of the small {}.', + 'a photo of the weird {}.', + 'the cartoon {}.', + 'art of the {}.', + 'a drawing of the {}.', + 'a photo of the large {}.', + 'a black and white photo of a {}.', + 'the plushie {}.', + 'a dark photo of a {}.', + 'itap of a {}.', + 'graffiti of the {}.', + 'a toy {}.', + 'itap of my {}.', + 'a photo of a cool {}.', + 'a photo of a small {}.', + 'a tattoo of the {}.', +] diff --git a/scenic/projects/baselines/clip/requirements.txt b/scenic/projects/baselines/clip/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..cee5dec3cae97c45164167a31289c8979e7c4e1a --- /dev/null +++ b/scenic/projects/baselines/clip/requirements.txt @@ -0,0 +1,3 @@ +torch>=1.10.2 +tqdm +git+https://github.com/openai/CLIP.git diff --git a/scenic/projects/baselines/clip/tokenizer.py b/scenic/projects/baselines/clip/tokenizer.py new file mode 100644 index 0000000000000000000000000000000000000000..ec99628e8b37bb52a061df9df8116c82392830c7 --- /dev/null +++ b/scenic/projects/baselines/clip/tokenizer.py @@ -0,0 +1,71 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Simple CLIP tokenizer wrapper.""" + +from absl import logging +import functools +from typing import Any, Callable, Optional, Sequence, Union + +from clip.simple_tokenizer import SimpleTokenizer +import numpy as np +from scenic.projects.baselines.clip import download + + +# pylint: disable=line-too-long +DEFAULT_BPE_PATH = None +DEFAULT_BPE_URL = 'https://github.com/openai/CLIP/blob/main/clip/bpe_simple_vocab_16e6.txt.gz?raw=true' +MAX_TEXT_LENGTH = 77 +# pylint: enable=line-too-long + + +def _tokenize(texts: Union[str, Sequence[str]], tokenizer: Any, + context_length: int, truncate: bool = False) -> np.ndarray: + """Tokenizes texts using tokenizer.""" + if isinstance(texts, str): + texts = [texts] + sot_token = tokenizer.encoder['<|startoftext|>'] + eot_token = tokenizer.encoder['<|endoftext|>'] + all_tokens = [ + [sot_token] + tokenizer.encode(text) + [eot_token] for text in texts + ] + result = np.zeros((len(all_tokens), context_length), dtype=int) + for i, tokens in enumerate(all_tokens): + if len(tokens) > context_length: + if truncate: + tokens = tokens[:context_length - 1] + [eot_token] + else: + raise RuntimeError( + f'Input {texts[i]} is too long for context length {context_length}') + + result[i, :len(tokens)] = np.asarray(tokens) + return result + + +def build_tokenizer( + bpe_path: Optional[str] = DEFAULT_BPE_PATH, + truncate: Optional[bool] = False, + bpe_url: str = DEFAULT_BPE_URL, + download_dir: str = download.DEFAULT_DOWNLOAD_DIR +) -> Callable[[Union[str, Sequence[str]]], np.ndarray]: + """Returns CLIP's tokenization function.""" + if bpe_path is None: + bpe_path = download.download(bpe_url, download_dir) + logging.info('Downloaded vocabulary from %s to %s', bpe_url, download_dir) + + tokenizer = SimpleTokenizer(bpe_path) + tokenizer_fn = functools.partial(_tokenize, tokenizer=tokenizer, + context_length=MAX_TEXT_LENGTH, + truncate=truncate) + return tokenizer_fn diff --git a/scenic/projects/baselines/configs/__init__.py b/scenic/projects/baselines/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/configs/cityscapes/__init__.py b/scenic/projects/baselines/configs/cityscapes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/configs/cityscapes/cityscapes_config.py b/scenic/projects/baselines/configs/cityscapes/cityscapes_config.py new file mode 100644 index 0000000000000000000000000000000000000000..fe8515d7840efb4629454b07cd1a37519811587a --- /dev/null +++ b/scenic/projects/baselines/configs/cityscapes/cityscapes_config.py @@ -0,0 +1,87 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for CityScapes Semantic Segmentation. + +""" +# pylint: enable=line-too-long + +import ml_collections + +_CITYSCAPES_TRAIN_SIZE = 2975 + + +def get_config(): + """Returns the base experiment configuration for CityScapes.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'cityscapes' + + # Dataset. + config.dataset_name = 'cityscapes' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.target_size = (512, 1024) # Image size. + + # Model. + config.model_name = 'unet_segmentation' + config.model = ml_collections.ConfigDict() + # config.model.block_size = (64, 128, 256, 512, 1024, 1024, 1024) + config.model.block_size = (64, 128, 256, 512, 1024, 1024) + config.model.use_batch_norm = True + config.model.padding = 'SAME' + + # Trainer. + config.trainer_name = 'segmentation_trainer' + + # Optimizer. + config.batch_size = 32 + config.num_training_epochs = 400 + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 1e-4 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None + config.class_rebalancing_factor = 0.0 + config.rng_seed = 0 + + # Learning rate. + config.steps_per_epoch = (_CITYSCAPES_TRAIN_SIZE // + config.get_ref('batch_size')) + config.total_steps = (config.get_ref('num_training_epochs') * + config.get_ref('steps_per_epoch')) + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.base_learning_rate = 1e-3 + config.lr_configs.warmup_steps = 1 * config.get_ref('steps_per_epoch') + # Setting 'steps_per_cycle' to total_steps basically means non-cycling cosine. + config.lr_configs.steps_per_cycle = config.get_ref('total_steps') + + # Data type. + config.model_dtype_str = 'float32' + config.data_dtype_str = 'float32' + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + diff --git a/scenic/projects/baselines/configs/imagenet/__init__.py b/scenic/projects/baselines/configs/imagenet/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/configs/imagenet/imagenet_augreg_mixer_config.py b/scenic/projects/baselines/configs/imagenet/imagenet_augreg_mixer_config.py new file mode 100644 index 0000000000000000000000000000000000000000..06f6c2118647d3031ca4ff9b6b76d5fa0d274b96 --- /dev/null +++ b/scenic/projects/baselines/configs/imagenet/imagenet_augreg_mixer_config.py @@ -0,0 +1,146 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for Mixer on ImageNet2012. + + +Based on: https://arxiv.org/abs/2105.01601 + +""" +# pylint: disable=line-too-long + +import ml_collections + +_IMAGENET_TRAIN_SIZE = 1281167 +NUM_CLASSES = 1000 + +VARIANT = 'B/16' + + +def get_config(runlocal=''): + """Returns the Mixer experiment configuration for ImageNet.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet-regularized_mixer' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'imagenet2012' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train' + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)|flip_lr' + '|randaug(2, 15)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|resize_small(256)|central_crop(224)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 250_000 + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'mixer_multilabel_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = { + 'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.patch_size = [int(patch), int(patch)] + config.model.channels_mlp_dim = { + 'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120 + }[version] + config.model.sequence_mlp_dim = { + 'Ti': 96, + 'S': 192, + 'B': 384, + 'L': 512, + 'H': 640 + }[version] + config.model.num_layers = { + 'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + config.model.dropout_rate = 0. + config.model.stochastic_depth = 0.1 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 300 + config.log_eval_steps = 1000 + config.batch_size = 8 if runlocal else 4096 + config.rng_seed = 42 + config.init_head_bias = -6.9 # -log(1000) + + # Learning rate. + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 0.001 if version in {'L', 'H'} else 0.003 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.end_learning_rate = 1e-5 + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.base_learning_rate = base_lr + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.5 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + config.m = None # Placeholder for randaug strength. + config.l = None # Placeholder for randaug layers. + + + return config + + diff --git a/scenic/projects/baselines/configs/imagenet/imagenet_augreg_vit_config.py b/scenic/projects/baselines/configs/imagenet/imagenet_augreg_vit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..1ceeb775e440aa414d3a90c01e0db3245a871c2b --- /dev/null +++ b/scenic/projects/baselines/configs/imagenet/imagenet_augreg_vit_config.py @@ -0,0 +1,139 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for Regularized ViT on ImageNet2012. + +Based on: https://arxiv.org/pdf/2106.10270.pdf + +""" +# pylint: disable=line-too-long + +import ml_collections + +_IMAGENET_TRAIN_SIZE = 1281167 +NUM_CLASSES = 1000 + +VARIANT = 'B/16' + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for ImageNet.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet-regularized_vit' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'imagenet2012' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train' + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)|flip_lr' + '|randaug(2, 15)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|resize_small(256)|central_crop(224)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 250_000 + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'vit_multilabel_classification' + config.model = ml_collections.ConfigDict() + + config.model.hidden_size = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = {'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config.model.num_layers = {'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0.0 + config.model.dropout_rate = 0.1 + config.model.stochastic_depth = 0.1 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 300 + config.log_eval_steps = 1000 + config.batch_size = 8 if runlocal else 4096 + config.rng_seed = 42 + config.init_head_bias = -6.9 # -log(1000) + + # Learning rate. + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 0.001 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = base_lr + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.5 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + config.m = None # Placeholder for randaug strength. + config.l = None # Placeholder for randaug layers. + + + return config + + diff --git a/scenic/projects/baselines/configs/imagenet/imagenet_axial_resnet_config.py b/scenic/projects/baselines/configs/imagenet/imagenet_axial_resnet_config.py new file mode 100644 index 0000000000000000000000000000000000000000..562091541de3693b2fe8b9700b719f8871be2809 --- /dev/null +++ b/scenic/projects/baselines/configs/imagenet/imagenet_axial_resnet_config.py @@ -0,0 +1,78 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for ResNet on ImageNet. + +""" +# pylint: enable=line-too-long + +import ml_collections +_IMAGENET_TRAIN_SIZE = 1281167 + + +def get_config(): + """Returns the base experiment configuration for ImageNet.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet_axial_resnet' + # Dataset. + config.dataset_name = 'imagenet' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + + # Model. + config.model_name = 'axial_resnet_multilabel_classification' + config.width_factor = 1 + config.num_layers = 50 + config.axial_attention_configs = ml_collections.ConfigDict() + config.axial_attention_configs.num_heads = 8 + + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'momentum_hp' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = 0.9 + config.explicit_weight_decay = 1e-3 + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 130 + config.batch_size = 2048 + config.rng_seed = 0 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 0.1 * config.batch_size / 256 + # setting 'steps_per_cycle' to total_steps basically means non-cycling cosine. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 7 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 10 * steps_per_epoch + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + diff --git a/scenic/projects/baselines/configs/imagenet/imagenet_bit_resnet_config.py b/scenic/projects/baselines/configs/imagenet/imagenet_bit_resnet_config.py new file mode 100644 index 0000000000000000000000000000000000000000..03471840be2a74b90518f8f1220362ba7bee71a4 --- /dev/null +++ b/scenic/projects/baselines/configs/imagenet/imagenet_bit_resnet_config.py @@ -0,0 +1,76 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for ResNet on ImageNet. + +""" +# pylint: enable=line-too-long + +import ml_collections + +_IMAGENET_TRAIN_SIZE = 1281167 + + +def get_config(): + """Returns the base experiment configuration for ImageNet.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet_bit_resnet' + # Dataset. + config.dataset_name = 'imagenet' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + + # Model. + config.model_name = 'bit_resnet_multilabel_classification' + config.width_factor = 1 + config.num_layers = 50 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'momentum_hp' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = 0.9 + config.explicit_weight_decay = 1e-3 + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 90 + config.batch_size = 1024 + config.rng_seed = 0 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 0.1 * config.batch_size / 256 + # setting 'steps_per_cycle' to total_steps basically means non-cycling cosine. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 5000 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 10 * steps_per_epoch + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + diff --git a/scenic/projects/baselines/configs/imagenet/imagenet_resnet_config.py b/scenic/projects/baselines/configs/imagenet/imagenet_resnet_config.py new file mode 100644 index 0000000000000000000000000000000000000000..11755687d8315f4943dd8bbcf5bf1e026b68b1f6 --- /dev/null +++ b/scenic/projects/baselines/configs/imagenet/imagenet_resnet_config.py @@ -0,0 +1,75 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for ResNet on ImageNet. + +""" +# pylint: enable=line-too-long + +import ml_collections + +_IMAGENET_TRAIN_SIZE = 1281167 + + +def get_config(): + """Returns the base experiment configuration for ImageNet.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet_resnet' + # Dataset. + config.dataset_name = 'imagenet' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + + # Model. + config.model_name = 'resnet_classification' + config.num_filters = 64 + config.num_layers = 50 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = 0.9 + config.l2_decay_factor = .00005 + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 90 + config.batch_size = 8192 + config.rng_seed = 0 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 0.1 * config.batch_size / 256 + # setting 'steps_per_cycle' to total_steps basically means non-cycling cosine. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 7 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 10 * steps_per_epoch + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + diff --git a/scenic/projects/baselines/configs/imagenet/imagenet_resnet_randaug_config.py b/scenic/projects/baselines/configs/imagenet/imagenet_resnet_randaug_config.py new file mode 100644 index 0000000000000000000000000000000000000000..e642329ea1054304bd08bdde205329239103bf28 --- /dev/null +++ b/scenic/projects/baselines/configs/imagenet/imagenet_resnet_randaug_config.py @@ -0,0 +1,112 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for ResNet on ImageNet with randaugment. + +""" + +import ml_collections + +_IMAGENET_TRAIN_SIZE = 1281167 + + +def get_config(): + """Returns the base experiment configuration for ImageNet.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet_resnet' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'imagenet2012' + # aka tiny_test/test[:5%] in task_adapt + config.dataset_configs.train_split = 'train[:99%]' + + config.dataset_configs.num_classes = 1000 + INPUT_RES = 224 # pylint: disable=invalid-name + RESIZE_RES = int(INPUT_RES * (256 / 224)) # pylint: disable=invalid-name + LS = 1e-4 # pylint: disable=invalid-name + config.dataset_configs.pp_train = ( + f'decode_jpeg_and_inception_crop_plus({INPUT_RES})|flip_lr' + f'|randaug(2, 15)' + f'|value_range(-1, 1)' + f'|onehot({config.dataset_configs.num_classes},' + f' key="label", key_result="labels", ' + f'on={1.0-LS}, off={LS})|keep("image", ' + f'"labels", "crop_hr", "crop_wr")') # pylint: disable=line-too-long + + pp_eval_common = ( + f'decode|resize_small({RESIZE_RES})|' + f'central_crop_plus({INPUT_RES})|value_range(-1, ' + f'1)|onehot({config.dataset_configs.num_classes},' + ' key="{lbl}", ' + f'key_result="labels")|keep("image", ' + f'"labels", "crop_hr", "crop_wr")') # pylint: disable=line-too-long + + pp_real = pp_eval_common.format(lbl='real_label') + pp_val = pp_eval_common.format(lbl='label') + + config.dataset_configs.val_split = [ + ('valid', 'imagenet2012', 'train[99%:]', pp_val), + ('test', 'imagenet2012', 'validation', pp_val), + ('v2', 'imagenet_v2', 'test', pp_val), + ('real', 'imagenet2012_real', 'validation', pp_real), + ] + config.dataset_configs.prefetch_to_device = 2 + # shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 250_000 + + # Model. + config.model_name = 'resnet_classification' + config.num_filters = 64 + config.num_layers = 50 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = 0.9 + config.l2_decay_factor = .00005 + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 300 + config.batch_size = 8192 + config.rng_seed = 0 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 0.1 * config.batch_size / 256 + # setting 'steps_per_cycle' to total_steps basically means non-cycling cosine. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 7 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 10 * steps_per_epoch + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + diff --git a/scenic/projects/baselines/configs/imagenet/imagenet_vit_config.py b/scenic/projects/baselines/configs/imagenet/imagenet_vit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..a431d6b33c1a5ec91116cd32da97857c7fb4b2b1 --- /dev/null +++ b/scenic/projects/baselines/configs/imagenet/imagenet_vit_config.py @@ -0,0 +1,149 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for ViT on ImageNet2012. + + + +Note: you can also use ImageNet input pipeline from big transfer pipeline: +``` + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'imagenet2012' + # aka tiny_test/test[:5%] in task_adapt + config.dataset_configs.val_split = 'validation' + config.dataset_configs.train_split = 'train' + config.dataset_configs.num_classes = 1000 + INPUT_RES = 224 # pylint: disable=invalid-name + RESIZE_RES = int(INPUT_RES * (256 / 224)) # pylint: disable=invalid-name + LS = 1e-4 # pylint: disable=invalid-name + config.dataset_configs.pp_train = ( + f'decode_jpeg_and_inception_crop({INPUT_RES})|flip_lr|value_range(-1, ' + f'1)|onehot({config.dataset_configs.num_classes},' + f' key="label", key_result="labels", ' + f'on={1.0-LS}, off={LS})|keep("image", ' + f'"labels")') # pylint: disable=line-too-long + config.dataset_configs.pp_eval = ( + f'decode|resize_small({RESIZE_RES})|' + f'central_crop({INPUT_RES})|value_range(-1, ' + f'1)|onehot({config.dataset_configs.num_classes},' + f' key="label", ' + f'key_result="labels")|keep("image", ' + f'"labels")') # pylint: disable=line-too-long + config.dataset_configs.prefetch_to_device = 2 + + # shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 250_000 + +``` + +""" +# pylint: disable=line-too-long + +import ml_collections + +_IMAGENET_TRAIN_SIZE = 1281167 +VARIANT = 'B/16' + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for ImageNet.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet-vit' + # Dataset. + config.dataset_name = 'imagenet' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'vit_multilabel_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = {'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config.model.num_layers = {'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + # Representation Size has to be set to the hidden size, to match + # ImageNet-1k results reported in the original ViT paper. + config.model.representation_size = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0.1 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.3 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 90 + config.log_eval_steps = 1000 + config.batch_size = 8 if runlocal else 4096 + config.rng_seed = 42 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 3e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*cosine_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.end_learning_rate = 1e-5 + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + + return config + + diff --git a/scenic/projects/baselines/configs/imagenet/optax_imagenet_augreg_vit_config.py b/scenic/projects/baselines/configs/imagenet/optax_imagenet_augreg_vit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..286b4778adda0e5caed8d0b885adef7febfc065d --- /dev/null +++ b/scenic/projects/baselines/configs/imagenet/optax_imagenet_augreg_vit_config.py @@ -0,0 +1,137 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for Regularized ViT on ImageNet2012. + +Based on: https://arxiv.org/pdf/2106.10270.pdf + +""" +# pylint: disable=line-too-long + +import ml_collections + +_IMAGENET_TRAIN_SIZE = 1281167 +NUM_CLASSES = 1000 + +VARIANT = 'B/16' + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for ImageNet.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet-regularized_vit' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'imagenet2012' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train' + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)|flip_lr' + '|randaug(2, 15)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|resize_small(256)|central_crop(224)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 250_000 + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'vit_multilabel_classification' + config.model = ml_collections.ConfigDict() + + config.model.hidden_size = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = {'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config.model.num_layers = {'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0.0 + config.model.dropout_rate = 0.1 + config.model.stochastic_depth = 0.1 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'adamw' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 300 + config.log_eval_steps = 1000 + config.batch_size = 8 if runlocal else 4096 + config.rng_seed = 42 + config.init_head_bias = -6.9 # -log(1000) + + # Learning rate. + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 0.001 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = base_lr + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.5 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + config.m = None # Placeholder for randaug strength. + config.l = None # Placeholder for randaug layers. + + + return config + + diff --git a/scenic/projects/baselines/configs/mnist/__init__.py b/scenic/projects/baselines/configs/mnist/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/configs/mnist/mnist_config.py b/scenic/projects/baselines/configs/mnist/mnist_config.py new file mode 100644 index 0000000000000000000000000000000000000000..548cb176632a60baa5479dcec3f261af8d21ae14 --- /dev/null +++ b/scenic/projects/baselines/configs/mnist/mnist_config.py @@ -0,0 +1,62 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for MNIST classification. + +""" +# pylint: enable=line-too-long + +import ml_collections + + +def get_config(): + """Returns the base experiment configuration for MNIST.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'mnist' + # Dataset. + config.dataset_name = 'mnist' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + + # Model. + config.model_name = 'fully_connected_classification' + config.model_dtype_str = 'float32' + config.hid_sizes = [64, 64] + # Training. + config.trainer_name = 'classification_trainer' + + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant' + config.lr_configs.base_learning_rate = 0.1 + + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = 0.9 + config.l2_decay_factor = .0005 + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 10 + config.batch_size = 128 + config.rng_seed = 0 + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + diff --git a/scenic/projects/baselines/deformable_detr/README.md b/scenic/projects/baselines/deformable_detr/README.md new file mode 100644 index 0000000000000000000000000000000000000000..1a90eb0bad70056ce1070f21c6a279d2b9059bfe --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/README.md @@ -0,0 +1,32 @@ +## Deformable DEtection TRansformer (Deformable DETR) +This directory contains the implementation of Deformable DETR for [Deformable DETR: Deformable Transformers for End-to-End Object Detection](https://arxiv.org/abs/2010.04159). +The code here uses JAX and Flax and follows the [official implementation of Deformable DETR in PyTorch](https://github.com/fundamentalvision/Deformable-DETR). Note that we implement the iterative bounding box refinement but not the two-stage paradigm. + +### Additional Requirements: +The following command will install the required packages for DETR. + +```shell +$ pip install -r scenic/projects/baselines/deformable_detr/requirements.txt +``` + +### Training Deformable DETR +In order to train DETR on COCO object detection, you can use `coco_config.py` +(to run locally) or `xc_coco_config.py` (to run on Google Cloud) in the +[configs directory](configs). For example: + +```shell +$ python scenic/projects/baselines/deformable_detr/main.py -- \ + --config=scenic/projects/baselines/deformable_detr/configs/coco_config.py \ + --workdir=./ +``` + +In the config, you have to set the path to a pre-trained ResNet50 backbone. +You can download one from [here](https://storage.googleapis.com/scenic-bucket/baselines/ResNet50_ImageNet1k). +(More information on other potential pre-trained backbones can be found [here](../baselines#resnet).) + + +### Results +| Average Precision | Notes | +|:-----------------:|-------| +| 0.459 | The model is trained from PyTorch ResNet50_Weights.IMAGENET1K_V1. | +| 0.459 | The model is evaluated with the corresponding official PyTorch weights. | diff --git a/scenic/projects/baselines/deformable_detr/attention.py b/scenic/projects/baselines/deformable_detr/attention.py new file mode 100644 index 0000000000000000000000000000000000000000..dd88b9fae7f0817416b3e411b2e462a11c11078e --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/attention.py @@ -0,0 +1,347 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Modules and uttilities for multi-scale deformable attention. + +See paper "Deformable DETR: Deformable Transformers for End-to-End Object +Detection" [1] and corresponding code [2]. + +[1] https://arxiv.org/abs/2010.04159. +[2] https://github.com/fundamentalvision/Deformable-DETR. +""" + +import functools +import math +from typing import Callable, Sequence, Tuple, Union + +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np + + +Array = Union[jnp.ndarray, np.ndarray] +Shape = Tuple[int, ...] + + +@functools.partial(jax.jit, static_argnames=('w', 'h')) +def bilinear_interpolate(im: Array, grid: Array, w: int, h: int) -> jnp.ndarray: + """Performs 2D bilinear interpolation. + + It is assumed that the center of the top-left pixel in `im` has coordinate + (0.5, 0.5). If you want a different mapping, transform `grid` before calling + this function. For example, if you want the center of the top-left pixel to + have coordinate (0, 0), pass `grid + [0.5, 0.5]` into the function instead. + + Args: + im: [image_height * image_width, nembed] a flattened 2D image. + grid: [..., 2] normalized sampling grid. + w: Image width. + h: Image height. + + Returns: + [..., nembed] array of interpolated values. + """ + im = im.reshape(h, w, -1) + im = jnp.pad(im, ((1, 1), (1, 1), (0, 0)), 'empty') + im = im.reshape((h + 2) * (w + 2), -1) + + x = grid[..., 0] * w + y = grid[..., 1] * h + x -= 0.5 + y -= 0.5 + x0 = jnp.floor(x).astype(int) + x1 = x0 + 1 + y0 = jnp.floor(y).astype(int) + y1 = y0 + 1 + + # An important observation that can be made is that we can group the gathering + # of (x, y), (x + 1, y), (x, y + 1), (x + 1, y + 1) together since they use + # the same indices for gathering. After packing, we perform one gathering with + # 4x feature dimension instead of four gatherings with 1x feature dimension, + # which greatly improves the speed on TPUs, since TPUs have very slow + # gathering and also forces the feature dimension onto the 128-dimensional + # sublanes. + + # prepare for packing + indices_y0_offset = (jnp.arange(h + 1) * (w + 2))[:, None] + indices_y1_offset = (jnp.arange(1, h + 2) * (w + 2))[:, None] + indices_x0 = jnp.arange(w + 1) + indices_x1 = jnp.arange(1, w + 2) + im00 = im[(indices_y0_offset + indices_x0).flatten()] + im10 = im[(indices_y1_offset + indices_x0).flatten()] + im01 = im[(indices_y0_offset + indices_x1).flatten()] + im11 = im[(indices_y1_offset + indices_x1).flatten()] + + # pack: (nembed * 4, (h + 1) * (w + 1)) + im_packed = jnp.concatenate([im00, im10, im01, im11], axis=-1) + + # gather + indices11 = jnp.clip(y1, 0, h + 1) * (w + 1) + jnp.clip(x1, 0, w + 1) + im_gathered = im_packed[indices11] + + # unpack + im_a, im_b, im_c, im_d = jnp.split(im_gathered, 4, axis=-1) + + # Mark indices out-of-bounds. + x0_out = jnp.logical_or(x0 < 0, x0 > w - 1) + y0_out = jnp.logical_or(y0 < 0, y0 > h - 1) + x1_out = jnp.logical_or(x1 < 0, x1 > w - 1) + y1_out = jnp.logical_or(y1 < 0, y1 > h - 1) + out00 = jnp.logical_or(x0_out, y0_out) + out01 = jnp.logical_or(x0_out, y1_out) + out10 = jnp.logical_or(x1_out, y0_out) + out11 = jnp.logical_or(x1_out, y1_out) + + # Set weights where weights for out-of-bound pixels are forced to be 0. + wa = jnp.where(out00, 0, (x1 - x) * (y1 - y)) + wb = jnp.where(out01, 0, (x1 - x) * (y - y0)) + wc = jnp.where(out10, 0, (x - x0) * (y1 - y)) + wd = jnp.where(out11, 0, (x - x0) * (y - y0)) + + return (jnp.einsum('...e,...->...e', im_a, wa) + + jnp.einsum('...e,...->...e', im_b, wb) + + jnp.einsum('...e,...->...e', im_c, wc) + + jnp.einsum('...e,...->...e', im_d, wd)) + + +def _map( + map_fn: Callable[[Array], jnp.ndarray], + mode: str, +) -> Callable[[jnp.ndarray], jnp.ndarray]: + """A versatile vmap-like function.""" + if mode == 'auto': + # Current tests show that for our purpose 'map' is better than the other + # options on all platforms ('gpu', 'tpu', 'cpu'). But this may change in the + # future. + mode = 'map' + if mode == 'loop': + return lambda v: jnp.stack([map_fn(e) for e in v], axis=0) + elif mode == 'map': + return lambda v: jax.lax.map(map_fn, v) + elif mode == 'vmap': + return jax.vmap(map_fn) + else: + raise ValueError('Invalid batching mode.') + + +@functools.partial(jax.jit, static_argnames=('shapes', 'use_remat', 'mode')) +def deform_attn_sampling_fn(values: Array, sampling_locations: Array, + attn_weights: Array, shapes: Tuple[Tuple[int, int], + ...], + use_remat: bool, mode: str) -> jnp.ndarray: + """Performs deformable attention sampling calculation. + + Args: + values: [bs, len_v, nembed]-array of values. + sampling_locations: [bs, nlevels, npoints * len_q, 2]-array of + sampling locations. + attn_weights: [bs, len_q, nlevels * npoints]-array of attention weights. + shapes: Static tuple of image shapes for each level to unflatten len_v. + use_remat: Flag for rematerialization. + mode: Determines how batching is performed, can be one of the following: + 'loop', 'map', 'vmap', 'auto'. + + Returns: + [bs, len_q, nembed]-array + """ + nembed = values.shape[-1] + len_q = attn_weights.shape[1] + split_indices = np.cumsum(np.array([h * w for h, w in shapes]))[:-1] + # Split values by level. + values_by_level = jnp.split(values, split_indices, axis=-2) + sampled_values_all_levels = [] + + if use_remat: + attention_fn = jax.remat( + bilinear_interpolate, + policy=jax.checkpoint_policies.checkpoint_dots_with_no_batch_dims, + static_argnums=(2, 3)) + else: + attention_fn = bilinear_interpolate + + def attention_at_index_fn(i, level_idx): + return attention_fn( + values_by_level[level_idx][i], + sampling_locations[:, level_idx][i], + shapes[level_idx][1], + shapes[level_idx][0], + ) + + def reshape_attn(fn): + return lambda *args: jnp.reshape(fn(*args), (-1, len_q, nembed)) + + for level_idx in range(len(shapes)): + fn = functools.partial(attention_at_index_fn, level_idx=level_idx) + fn = _map(reshape_attn(fn), mode) + sampled_values_all_levels.append(fn(jnp.arange(values.shape[0]))) + + # (bs, nlevels * npoints, len_q, nembed) + sampled_values_all_levels = jnp.concatenate( + sampled_values_all_levels, axis=1) + + # (bs, len_q, nembed) + return jnp.einsum('blqe,bql->bqe', sampled_values_all_levels, attn_weights) + + +class MultiScaleDeformableAttention(nn.Module): + """Layer for MultiScaleDeformableAttention.""" + spatial_shapes: Sequence[Tuple[int, int]] + embed_dim: int + num_levels: int + num_heads: int + num_points: int + compiler_config: ml_collections.ConfigDict + dtype: jnp.dtype + + def setup(self): + # (nlevels, 2) + arr_shapes = jnp.asarray(self.spatial_shapes) + self.offset_norm = jnp.stack( + [arr_shapes[:, 1], arr_shapes[:, 0]], -1) + # (1, 1, 1, nlevels, 1, 2) + self.offset_norm = self.offset_norm[None, None, None, :, None, :] + + def pos_grid_init(self, key: jax.Array, shape: Shape, + dtype: jnp.dtype) -> Array: + """Initializes deformable attention sampling offsets.""" + del key, shape + thetas = jnp.arange( + self.num_heads, dtype=dtype) * (2 * math.pi) / self.num_heads + grid_init = jnp.stack([jnp.cos(thetas), jnp.sin(thetas)], -1) + denom = jnp.max(jnp.abs(grid_init), axis=-1, keepdims=True) + grid_init = (grid_init / denom) + grid_init = grid_init.reshape(self.num_heads, 1, 1, 2) + grid_init = jnp.tile(grid_init, (1, self.num_levels, self.num_points, 1)) + for i in range(self.num_points): + grid_i = grid_init[:, :, i, :] * (i + 1) + grid_init = grid_init.at[:, :, i, :].set(grid_i) + return grid_init + + @nn.compact + def __call__(self, query: jnp.ndarray, ref_points: jnp.ndarray, + value: jnp.ndarray, pad_mask: jnp.ndarray, + train: bool) -> jnp.ndarray: + """Calculates multi-scale multi-head deformable attention. + + Args: + query: [bs, len_q, embed_dim]-ndarray of queries. + ref_points: [bs, len_q, num_levels, box_dim]-ndarray of reference points + for each query. + value: [bs, len_v, embed_dim]-ndarray of values. + pad_mask: [bs, len_v]-ndarray of boolean values, where 0 indicates pad. + train: Whether we are in training mode. + + Returns: + Attention weighted values based on the queries and reference points + relevant to the queries. + """ + assert self.embed_dim % self.num_heads == 0, ( + '`embed_dim` must be divisible by `num_heads`.') + ref_dim = ref_points.shape[-1] + bs, len_q, _ = query.shape + _, len_v, _ = value.shape + + nembed = self.embed_dim // self.num_heads + + # (bs, len_v, nheads, nembed) + value = nn.DenseGeneral( + features=(self.num_heads, nembed), + param_dtype=self.dtype, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.zeros, + name='value_proj', + )( + value) + # (bs, len_v, nheads, nembed) + value = jnp.where(pad_mask[..., None, None], value, 0) + # (bs, nheads, len_v, nembed) + value = value.transpose(0, 2, 1, 3) + # (bs * nheads, len_v, nembed) + value = value.reshape(bs * self.num_heads, len_v, -1) + + # (bs, len_q, nheads, nlevels, npoints, 2) + sampling_offsets = nn.DenseGeneral( + features=(self.num_heads, self.num_levels, self.num_points, 2), + param_dtype=self.dtype, + kernel_init=nn.initializers.zeros, + bias_init=self.pos_grid_init, + name='sampling_offsets', + )( + query) + + if ref_dim == 2: + # (bs, len_q, 1, nlevels, 1, 2) + ref_xy = ref_points[:, :, None, :, None, :] + # (bs, len_q, nheads, nlevels, npoints, 2) + normalized_offsets = sampling_offsets / self.offset_norm + elif ref_dim >= 4: + # (bs, len_q, 1, nlevels, 1, 2) + ref_xy = ref_points[:, :, None, :, None, :2] + # (bs, len_q, 1, nlevels, 1, 2) + ref_wh = ref_points[:, :, None, :, None, 2:4] + # (bs, len_q, nheads, nlevels, npoints, 2) + normalized_offsets = sampling_offsets / (2 * self.num_points) * ref_wh + + # (bs, len_q, nheads, nlevels, npoints, 2) + sampling_locations = ref_xy + normalized_offsets + # (bs, nheads, nlevels, npoints, len_q, 2) + sampling_locations = sampling_locations.transpose(0, 2, 3, 4, 1, 5) + # (bs * nheads, nlevels, npoints * len_q, 2) + sampling_locations = sampling_locations.reshape(bs * self.num_heads, + self.num_levels, + self.num_points * len_q, 2) + + # (bs, len_q, nheads, nlevels * npoints) + attn_weights = nn.DenseGeneral( + features=(self.num_heads, self.num_levels * self.num_points), + param_dtype=self.dtype, + kernel_init=nn.initializers.zeros, + bias_init=nn.initializers.zeros, + name='attention_weights', + )( + query) + # (bs, len_q, nheads, nlevels * npoints) + attn_weights = nn.softmax(attn_weights) + # (bs, nheads, len_q, nlevels * npoints) + attn_weights = attn_weights.transpose(0, 2, 1, 3) + # (bs * nheads, len_q, nlevels * npoints) + attn_weights = attn_weights.reshape(bs * self.num_heads, len_q, + self.num_levels * self.num_points) + if train: + use_remat = self.compiler_config.train_remat + else: + use_remat = False + # (bs * nheads, len_q, nembed) + x = deform_attn_sampling_fn( + values=value, + sampling_locations=sampling_locations, + attn_weights=attn_weights, + shapes=self.spatial_shapes, + use_remat=use_remat, + mode=self.compiler_config.attention_batching_mode) + + # (bs, nheads, len_q, nembed) + x = x.reshape(bs, self.num_heads, len_q, nembed) + # (bs, len_q, embed_dim) + return nn.DenseGeneral( + features=self.embed_dim, + axis=(-3, -1), + param_dtype=self.dtype, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.zeros, + name='output_proj', + )( + x) diff --git a/scenic/projects/baselines/deformable_detr/backbone.py b/scenic/projects/baselines/deformable_detr/backbone.py new file mode 100644 index 0000000000000000000000000000000000000000..7af6b46e75fea8a4aa1033464c35ea742912a26e --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/backbone.py @@ -0,0 +1,163 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Backbone for DeformableDETR.""" + +from typing import List, Optional, Sequence + +import flax.linen as nn +import jax +import jax.numpy as jnp +from scenic.projects.baselines import resnet + + +class InputPosEmbeddingSine(nn.Module): + """Creates sinusoidal positional embeddings for inputs.""" + + hidden_dim: int + dtype: jnp.dtype = jnp.float32 + scale: Optional[float] = None + temperature: float = 10000 + offset: float = -0.5 + + @nn.compact + def __call__(self, padding_mask: jnp.ndarray) -> jnp.ndarray: + """Creates the positional embeddings for transformer inputs. + + This is slightly different from the one used in DETR in that an offset of + -0.5 may be added when calculating `x_embed` and `y_embed`. + + Args: + padding_mask: Binary matrix with 0 at padded image regions. Shape is + [batch, height, width] + + Returns: + Positional embedding for inputs. + + Raises: + ValueError if `hidden_dim` is not an even number. + """ + if self.hidden_dim % 2: + raise ValueError('`hidden_dim` must be an even number.') + + mask = padding_mask.astype(jnp.float32) + y_embed = jnp.cumsum(mask, axis=1) + x_embed = jnp.cumsum(mask, axis=2) + + # Normalization: + eps = 1e-6 + scale = self.scale if self.scale is not None else 2 * jnp.pi + y_embed = (y_embed + self.offset)/ (y_embed[:, -1:, :] + eps) * scale + x_embed = (x_embed + self.offset) / (x_embed[:, :, -1:] + eps) * scale + + num_pos_feats = self.hidden_dim // 2 + dim_t = jnp.arange(num_pos_feats, dtype=jnp.float32) + dim_t = self.temperature**(2 * (dim_t // 2) / num_pos_feats) + + pos_x = x_embed[:, :, :, jnp.newaxis] / dim_t + pos_y = y_embed[:, :, :, jnp.newaxis] / dim_t + pos_x = jnp.stack([ + jnp.sin(pos_x[:, :, :, 0::2]), + jnp.cos(pos_x[:, :, :, 1::2]), + ], + axis=4).reshape(padding_mask.shape + (-1,)) + pos_y = jnp.stack([ + jnp.sin(pos_y[:, :, :, 0::2]), + jnp.cos(pos_y[:, :, :, 1::2]), + ], + axis=4).reshape(padding_mask.shape + (-1,)) + + pos = jnp.concatenate([pos_y, pos_x], axis=3) + b, h, w = padding_mask.shape + pos = jnp.reshape(pos, [b, h * w, self.hidden_dim]) + return jnp.asarray(pos, self.dtype) + + +def mask_for_shape(shape, pad_mask: Optional[jnp.ndarray] = None): + """Create boolean mask by resizing from given mask or set all True.""" + bs, h, w, _ = shape + if pad_mask is None: + resized_pad_mask = jnp.ones((bs, h, w), dtype=jnp.bool_) + else: + resized_pad_mask = jax.image.resize( + pad_mask.astype(jnp.float32), shape=[bs, h, w], + method='nearest').astype(jnp.bool_) + return resized_pad_mask + + +class DeformableDETRBackbone(nn.Module): + """Backbone CNN for multi-scale feature extraction for DeformableDETR. + + Attributes: + num_filters: Number of Resnet filters. + num_layers: Number of Resnet layers. + embed_dim: Position embedding dimension. + num_feature_levels: Number of feature levels to output. + dtype: Data type of the computation (default: float32). + """ + embed_dim: int + num_filters: int + num_layers: int + num_feature_levels: int + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__( + self, + inputs: jnp.ndarray, + train: bool = False, + *, + padding_mask: Optional[jnp.ndarray] = None, + update_batch_stats: Optional[bool] = None) -> Sequence[List[jnp.ndarray]]: + """Perform multi-scale feature extraction, padding and position embedding. + + Args: + inputs: [bs, h, w, c] input data. + train: Whether it is training. + padding_mask: [bs, h, w] of bools with 0 at padded image regions. + update_batch_stats: Whether update the batch statistics for the BatchNorms + in the backbone. if None, the value of `train` flag will be used, i.e. + we update the batch stat if we are in the train mode. + + Returns: + Output: Features [bs, h, w, c], pad masks [bs, h, w], and + position_embeddings [bs, h * w, embed_dim] each in a list ordered by + scale ordered from smallest to largest stride (highest resolution at + fist index). + """ + assert 0 < self.num_feature_levels < 4 + if update_batch_stats is None: + update_batch_stats = train + + backbone_features = resnet.ResNet( + num_outputs=None, + num_filters=self.num_filters, + num_layers=self.num_layers, + dtype=self.dtype, + name='resnet')( + inputs, train=update_batch_stats) + + # Highest resolution first strides=[8, 16, 32] + feature_keys = ['stage_2', 'stage_3', 'stage_4'][-self.num_feature_levels:] + backbone_features = [backbone_features[k] for k in feature_keys] + + # Interpolate pad_mask for each feature level. + pad_masks = [ + mask_for_shape(x.shape, padding_mask) for x in backbone_features + ] + pos_embeds = [ + InputPosEmbeddingSine(hidden_dim=self.embed_dim)(m) for m in pad_masks + ] + + return backbone_features, pad_masks, pos_embeds diff --git a/scenic/projects/baselines/deformable_detr/coco_eval.py b/scenic/projects/baselines/deformable_detr/coco_eval.py new file mode 100644 index 0000000000000000000000000000000000000000..77560f9eeb018cc08a6e69024427a6c0df59c180 --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/coco_eval.py @@ -0,0 +1,173 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for DeformableDETR trainer/evaluator.""" + +import copy +from typing import Any, Callable, Dict, Optional, Tuple + +import jax +import jax.numpy as jnp +import numpy as np +from scenic.dataset_lib.coco_dataset import coco_eval +from scenic.model_lib.base_models import box_utils +from scenic.projects.baselines.detr.train_utils import DetrGlobalEvaluator + +import scipy + + +class DetectionEvaluator(coco_eval.DetectionEvaluator): + """Changes DETR Evaluator bay assuming labels vary in label_id space.""" + + def __init__(self, + annotations_loc: Optional[str] = None, + threshold: float = 0., + disable_output: bool = True): + """Initializes a DetectionEvaluator object.""" + super().__init__( + annotations_loc=annotations_loc, + threshold=threshold, + disable_output=disable_output) + + # Just override the label map. + max_id = max([c['id'] for c in self.coco.dataset['categories']]) + # Just a mapping from 0-index to 1-index, to remove no-object label. + self.label_to_coco_id = {i: i + 1 for i in range(max_id)} + + +class DeformableDetrGlobalEvaluator(DetrGlobalEvaluator): + """An interface between DeformableDETR implementation and COCO.""" + + def __init__(self, dataset_name: str, **kwargs): + """Instantiate evaluator and override to use DeformableDETR Eval.""" + del dataset_name # Unused. + + self.coco_evaluator = DetectionEvaluator(**kwargs) + self._included_image_ids = set() + self._num_examples_added = 0 + + def add_example( + self, prediction: Dict[str, np.ndarray], target: Dict[str, np.ndarray]): + """Add a single example to the evaluator. + + Note that the postprocessing of the predictions is significantly different + from the one used in DETR. In DETR, each query gives one predicted box. Here + each query gives num_classes predicted boxes, one for each class, and all + these num_queries * num_classes predicted boxes are mixed together and the + top 100 of them are sent to the evaluator. This different postprocessing + gives about 0.5 final AP increase. + + Args: + prediction: Model prediction dictionary with keys 'pred_img_ids', + 'pred_probs' in shape of `[num_objects, num_classes]` and 'pred_boxes' + in shape of `[num_objects, 4]`. Box coordinates should be in raw DETR + format, i.e. [cx, cy, w, h] in range [0, 1]. + target: Target dictionary with keys 'orig_size', 'size', and 'image/id'. + Must also contain 'padding_mask' if the input image was padded. + """ + if 'pred_boxes' not in prediction: + # Add dummy to make eval work: + prediction = copy.deepcopy(prediction) + prediction['pred_boxes'] = np.zeros( + (prediction['pred_logits'].shape[0], 4)) + 0.5 + + # Convert from DETR [cx, cy, w, h] to COCO [x, y, w, h] bounding box format: + boxes = box_utils.box_cxcywh_to_xyxy(prediction['pred_boxes']) + boxes = np.array(boxes) + boxes[:, 2] -= boxes[:, 0] + boxes[:, 3] -= boxes[:, 1] + + # Scale from relative to absolute size: + # Note that the padding is implemented such that such that the model's + # predictions are [0,1] normalized to the non-padded image, so scaling by + # `orig_size` will convert correctly to the original image coordinates. No + # image flipping happens during evaluation. + h, w = np.asarray(target['orig_size']) + scale_factor = np.array([w, h, w, h]) + boxes = boxes * scale_factor[np.newaxis, :] + boxes = np.asarray(boxes) + + # Get scores, excluding the background class: + if 'pred_probs' in prediction: + scores = prediction['pred_probs'][:, 1:] + else: + scores = scipy.special.softmax(prediction['pred_logits'], axis=-1)[:, 1:] + scores = np.asarray(scores) + + num_classes = scores.shape[1] + topk_indices = np.argsort(scores.flatten())[-1:-101:-1] + topk_box_indices = topk_indices // num_classes + topk_score_indices = topk_indices % num_classes + + for i in range(len(topk_indices)): + # Add example to evaluator: + img_id = int(target['image/id']) + single_classification = { + 'image_id': + img_id, + 'category_id': + self.coco_evaluator.label_to_coco_id[topk_score_indices[i]], + 'bbox': + boxes[topk_box_indices[i]].tolist(), + 'score': + scores[topk_box_indices[i]][topk_score_indices[i]] + } + self.coco_evaluator.annotations.append(single_classification) + self.coco_evaluator.annotated_img_ids.append(img_id) + + self._num_examples_added += 1 + + +def prepare_coco_eval_dicts( + batch: Dict[str, Any], + predictions: Dict[str, jnp.ndarray], + logits_to_probs_fn: Callable[[jnp.ndarray], jnp.ndarray], + gather: bool = False +) -> Tuple[Dict[str, jnp.ndarray], Dict[str, jnp.ndarray]]: + """Prepare predictions and validations for COCO eval. + + Args: + batch: Eval batch targets. + predictions: Predictions from DeformableDETR. + logits_to_probs_fn: Convert logits to probabilities. + gather: Whether to perform gather if we are in a pmapped eval. + + Returns: + Targets and predictions formatted for COCO eval. + """ + pred_probs = logits_to_probs_fn(predictions['pred_logits']) + # Collect necessary predictions and target information from all hosts. + predictions_out = { + 'pred_probs': pred_probs, + 'pred_logits': predictions['pred_logits'], + 'pred_boxes': predictions['pred_boxes'] + } + labels = { + 'image/id': batch['label']['image/id'], + 'size': batch['label']['size'], + 'orig_size': batch['label']['orig_size'], + } + to_copy = [ + 'labels', 'boxes', 'not_exhaustive_category_ids', 'neg_category_ids' + ] + for name in to_copy: + if name in batch['label']: + labels[name] = batch['label'][name] + + targets = {'label': labels, 'batch_mask': batch['batch_mask']} + + if gather: + predictions_out = jax.lax.all_gather(predictions_out, 'batch') + targets = jax.lax.all_gather(targets, 'batch') + return targets, predictions_out # pytype: disable=bad-return-type # jax-ndarray diff --git a/scenic/projects/baselines/deformable_detr/configs/coco_config.py b/scenic/projects/baselines/deformable_detr/configs/coco_config.py new file mode 100644 index 0000000000000000000000000000000000000000..a490fdad5fd6cfad9aab874d5b4d3a0c7b9a225f --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/configs/coco_config.py @@ -0,0 +1,32 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for COCO detection using DeformableDETR. + +""" +# pylint: enable=line-too-long + +from scenic.projects.baselines.deformable_detr.configs.common import get_coco_config + + +def get_config(): + """Returns the configuration for COCO detection using DeformableDETR.""" + config = get_coco_config() + + # Download pretrained ResNet50 checkpoints from here: + # https://github.com/google-research/scenic/tree/main/scenic/projects/baselines pylint: disable=line-too-long + config.pretrained_backbone_configs.checkpoint_path = 'path_to_checkpoint_of_resnet_50' + + return config diff --git a/scenic/projects/baselines/deformable_detr/configs/common.py b/scenic/projects/baselines/deformable_detr/configs/common.py new file mode 100644 index 0000000000000000000000000000000000000000..e3d0bb7b3724a0e3eb22dc6d60e754870d9e9511 --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/configs/common.py @@ -0,0 +1,116 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for COCO detection using DeformableDETR. +""" +# pylint: enable=line-too-long + +import ml_collections + +_COCO_TRAIN_SIZE = 118287 +batch_size = ml_collections.FieldReference(32) +num_epochs = ml_collections.FieldReference(50) +steps_per_epoch = _COCO_TRAIN_SIZE // batch_size + + +def get_coco_config(): + """Returns the configuration for COCO detection using DeformableDETR.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'coco_detection_deformable_detr' + + # Compiler + config.compiler_config = ml_collections.ConfigDict() + config.compiler_config.train_remat = True + config.compiler_config.attention_batching_mode = 'auto' + + # Dataset. + config.dataset_name = 'coco_deformable_detr_detection' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 10_000 + config.dataset_configs.max_boxes = 299 + config.dataset_configs.max_size = 1333 + config.dataset_configs.valid_max_size = 1333 + config.data_dtype_str = 'float32' + + # Model. + config.model_dtype_str = 'float32' + config.model_name = 'deformable_detr' + config.matcher = 'hungarian' + config.num_classes = 91 + config.embed_dim = 256 + config.enc_embed_dim = 256 + config.num_queries = 300 + config.num_feature_levels = 4 + config.num_heads = 8 + config.num_encoder_layers = 6 + config.num_decoder_layers = 6 + config.transformer_ffn_dim = 1024 + config.num_enc_points = 4 + config.num_dec_points = 4 + config.backbone_num_filters = 64 + config.backbone_num_layers = 50 + config.dropout_rate = 0.1 + + # Loss. + config.aux_loss = True + config.bbox_loss_coef = 5.0 + config.giou_loss_coef = 2.0 + config.class_loss_coef = 2.0 + config.focal_loss_alpha = 0.25 + config.focal_loss_gamma = 2.0 + # Use the mean num_boxes as normalization. + config.normalization = 'global' + + # Training. + config.trainer_name = 'deformable_detr_trainer' + config.num_training_epochs = num_epochs + config.rng_seed = 0 + config.batch_size = batch_size + config.eval_batch_size = batch_size * 2 + + # Optimization. + config.optimizer_config = ml_collections.ConfigDict() + config.optimizer_config.weight_decay = 1e-4 + config.optimizer_config.beta1 = 0.9 + config.optimizer_config.beta2 = 0.999 + config.optimizer_config.base_learning_rate = 2e-4 + config.optimizer_config.max_grad_norm = 0.1 + config.optimizer_config.learning_rate_decay_rate = 0.1 + config.optimizer_config.learning_rate_reduction = 0.1 + config.optimizer_config.learning_rate_decay_event = ( + num_epochs * 4 // 5 * steps_per_epoch) + + # Pretrained_backbone. + config.load_pretrained_backbone = True + config.freeze_backbone_batch_stats = True + config.pretrained_backbone_configs = ml_collections.ConfigDict() + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 200 # Train summary steps. + # Expensive summary operations freq. + config.log_large_summary_steps = steps_per_epoch.identity() + # Train steps before eval, typically one epoch. + config.log_eval_steps = steps_per_epoch.identity() + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = steps_per_epoch.identity() + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/baselines/deformable_detr/configs/mini_config.py b/scenic/projects/baselines/deformable_detr/configs/mini_config.py new file mode 100644 index 0000000000000000000000000000000000000000..bc13e5c42e58c6d24a24ff0227b23447c3efd601 --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/configs/mini_config.py @@ -0,0 +1,58 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Mini config for COCO detection using DeformableDETR. +""" + +from scenic.projects.baselines.deformable_detr.configs.common import get_coco_config + + +def get_config(): + """Returns the configuration for COCO using a mini DeformableDETR.""" + config = get_coco_config() + + # Dataset. + config.dataset_configs.max_boxes = 10 + + # Model. + config.embed_dim = 32 + config.enc_embed_dim = 32 + config.num_queries = 12 + config.num_feature_levels = 4 + config.num_heads = 4 + config.num_encoder_layers = 2 + config.num_decoder_layers = 2 + config.transformer_ffn_dim = 256 + config.num_enc_points = 1 + config.num_dec_points = 2 + config.backbone_num_filters = 16 + config.backbone_num_layers = 18 + + # Pretrained_backbone. + config.load_pretrained_backbone = False + config.freeze_backbone_batch_stats = False + + # Logging. + config.write_summary = False # don't write summary + config.checkpoint = False # don't do checkpointing + config.checkpoint_steps = None + config.debug_train = False # don't debug during training + config.debug_eval = False # don't debug during eval + + config.num_training_steps = 2 + config.log_eval_steps = 2 + config.steps_per_eval = 2 + config.num_training_epochs = None + + return config diff --git a/scenic/projects/baselines/deformable_detr/configs/xc_coco_config.py b/scenic/projects/baselines/deformable_detr/configs/xc_coco_config.py new file mode 100644 index 0000000000000000000000000000000000000000..d3e6243a88b117d372789a51e55141d41249a98f --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/configs/xc_coco_config.py @@ -0,0 +1,34 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for COCO detection using DeformableDETR on Google Cloud. + +""" +# pylint: enable=line-too-long + +from scenic.projects.baselines.deformable_detr.configs.common import get_coco_config + + +def get_config(): + """Returns the configuration for COCO detection using DeformableDETR.""" + config = get_coco_config() + + config.dataset_configs.data_dir = 'gs://tensorflow-datasets/datasets' + + # pylint: disable=line-too-long + config.pretrained_backbone_configs.checkpoint_path = '/workdir/scenic/scenic/projects/baselines/deformable_detr/checkpoints/ResNet50_ImageNet1k' + # pylint: enable=line-too-long + + return config diff --git a/scenic/projects/baselines/deformable_detr/deformable_transformer.py b/scenic/projects/baselines/deformable_detr/deformable_transformer.py new file mode 100644 index 0000000000000000000000000000000000000000..4635ec7ad03297729efbef882ed8d75a203ba90c --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/deformable_transformer.py @@ -0,0 +1,645 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Transformer modules for DeformableDETR. + +Note that most names and variables are chose for staying closely aligned to +the official pytorch implementation [1]. + +[1] https://github.com/fundamentalvision/Deformable-DETR. +""" + +import functools +from typing import Sequence, Tuple + +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.projects.baselines.deformable_detr.attention import MultiScaleDeformableAttention +from scenic.projects.baselines.detr.model import MultiHeadDotProductAttention + + +def inverse_sigmoid(x: jnp.ndarray, eps: float = 1e-5): + x = x.clip(min=0, max=1) + x1 = x.clip(min=eps) + x2 = (1 - x).clip(min=eps) + return jnp.log(x1) - jnp.log(x2) + + +pytorch_kernel_init = functools.partial(jax.nn.initializers.variance_scaling, + 1. / 3., 'fan_in', 'uniform') + + +def uniform_initializer(minval, maxval, dtype=jnp.float32): + + def init(key, shape, dtype=dtype): + return jax.random.uniform(key, shape, dtype, minval=minval, maxval=maxval) + + return init + + +class BBoxCoordPredictor(nn.Module): + """FFN block for predicting bounding box coordinates.""" + mlp_dim: int + num_layers: int + use_sigmoid: bool + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + """Applies FFN MLP block to inputs. + + Args: + x: Input tensor. + + Returns: + Output of FFN MLP block. + """ + for _ in range(self.num_layers - 1): + # This is like pytorch initializes biases in linear layers. + bias_range = 1 / np.sqrt(x.shape[-1]) + x = nn.Dense( + self.mlp_dim, + kernel_init=pytorch_kernel_init(dtype=self.dtype), + bias_init=uniform_initializer( + -bias_range, bias_range, dtype=self.dtype), + dtype=self.dtype)( + x) + x = nn.relu(x) + + bias_range = 1 / np.sqrt(x.shape[-1]) + x = nn.Dense( + 4, + kernel_init=pytorch_kernel_init(dtype=self.dtype), + bias_init=uniform_initializer( + -bias_range, bias_range, dtype=self.dtype))( + x) + if self.use_sigmoid: + x = nn.sigmoid(x) + return x + + +class DeformableDETREncoderLayer(nn.Module): + """Layer of DETR encoder.""" + spatial_shapes: Tuple[Tuple[int, int], ...] + embed_dim: int + num_heads: int + num_levels: int + num_reference_points: int + ffn_dim: int + dropout: float + compiler_config: ml_collections.ConfigDict + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__( + self, + src: jnp.ndarray, + pos_embed: jnp.ndarray, + ref_points: jnp.ndarray, + pad_mask: jnp.ndarray, + train: bool, + ) -> jnp.ndarray: + """Single encoder layer using MultiScaleDeformableAttention. + + Args: + src: [bs, len_qkv, embed_dim]-ndarray of values. This is self-attention so + these will also be used as queries after position embedding added. + pos_embed: [bs, len_qkv, embed_dim]-ndarray of position embedding for each + src position. + ref_points: [bs, len_qkv, num_levels, box_dim]-ndarray of reference points + for each query. box_dim is in {2, 4} as ref_points can either be box + cxcy or cxcywh. + pad_mask: [bs, len_qkv]-ndarray of boolean values, where 1 indicates pad. + train: Whether we are in training mode. + + Returns: + [bs, len_qkv, embed_dim]-ndarray of encoding from layer. + """ + query = src + pos_embed + x = MultiScaleDeformableAttention( + spatial_shapes=self.spatial_shapes, + embed_dim=self.embed_dim, + num_heads=self.num_heads, + num_levels=self.num_levels, + num_points=self.num_reference_points, + compiler_config=self.compiler_config, + dtype=self.dtype, + name='self_attn')(query, ref_points, src, pad_mask, train) + + x = nn.Dropout(rate=self.dropout)(x, deterministic=not train) + x = src + x + x = nn.LayerNorm(name='norm1')(x) + + # FeedForward Network. + residual = x + bias_range = 1 / np.sqrt(x.shape[-1]) + x = nn.Dense( + self.ffn_dim, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=uniform_initializer( + -bias_range, bias_range, dtype=self.dtype), + name='linear1')( + x) + x = nn.relu(x) + x = nn.Dropout(rate=self.dropout)(x, deterministic=not train) + bias_range = 1 / np.sqrt(x.shape[-1]) + x = nn.Dense( + self.embed_dim, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=uniform_initializer( + -bias_range, bias_range, dtype=self.dtype), + name='linear2')( + x) + x = nn.Dropout(rate=self.dropout)(x, deterministic=not train) + x = residual + x + x = nn.LayerNorm(name='norm2')(x) + + # TODO(tonysherbondy): Consider clamping values between [-max, max]. + return x + + +class DeformableDETREncoder(nn.Module): + """Sequence of DeformableDETREncoderLayer.""" + spatial_shapes: Tuple[Tuple[int, int]] + embed_dim: int + num_layers: int + num_heads: int + num_levels: int + num_reference_points: int + ffn_dim: int + dropout: float + compiler_config: ml_collections.ConfigDict + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__( + self, + src: jnp.ndarray, + pos_embed: jnp.ndarray, + ref_points: jnp.ndarray, + pad_mask: jnp.ndarray, + train: bool, + ) -> jnp.ndarray: + """Compute encoding with stack of encoder layers. + + Args: + src: [bs, len_qkv, embed_dim]-ndarray of values. This is self-attention so + these will also be used as queries after position embedding added. + pos_embed: [bs, len_qkv, embed_dim]-ndarray of position embedding for each + src position. + ref_points: [bs, len_qkv, num_levels, box_dim]-ndarray of reference points + for each query. box_dim is in {2, 4} as ref_points can either be box + cxcy or cxcywh. + pad_mask: [bs, len_qkv]-ndarray of boolean values, where 1 indicates pad. + train: Whether we are in training mode. + + Returns: + [bs, len_qkv, embed_dim]-ndarray of encoding from layer. + """ + x = src + for i in range(self.num_layers): + # TODO(tonysherbondy): Consider layerdrop (see + # https://arxiv.org/abs/1909.11556) + x = DeformableDETREncoderLayer( + spatial_shapes=self.spatial_shapes, + embed_dim=self.embed_dim, + num_heads=self.num_heads, + num_levels=self.num_levels, + num_reference_points=self.num_reference_points, + ffn_dim=self.ffn_dim, + dropout=self.dropout, + compiler_config=self.compiler_config, + dtype=self.dtype, + name=f'layer{i}')( + x, pos_embed, ref_points, pad_mask, train=train) + + return x + + +class DeformableDETRDecoderLayer(nn.Module): + """Layer of DeformableDETR decoder. + + Uses MultiScaleDeformableAttention for cross-attention and typical DETR dense + attention for the self-attention. + + Attributes: + spatial_shapes: (h, w) for each feature level. + embed_dim: Size of the hidden embedding dimension, used for query, value, + embeddings, and outputs. + num_heads: Number of heads. + num_levels: Number of feature levels. + num_points: Number of points in deformable attention. + dropout: Dropout rate. + ffn_dim: Hidden dimension for feed-forward/MLP network. + dtype: Data type of the computation (default: float32). + """ + spatial_shapes: Sequence[Tuple[int, int]] + embed_dim: int + num_heads: int + num_levels: int + num_reference_points: int + ffn_dim: int + dropout: float + compiler_config: ml_collections.ConfigDict + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__( + self, + query: jnp.ndarray, + query_pos: jnp.ndarray, + ref_points: jnp.ndarray, + value: jnp.ndarray, + pad_mask: jnp.ndarray, + train: bool, + ) -> jnp.ndarray: + """Compute decoder layer. + + Args: + query: [bs, len_q, embed_dim] of queries. + query_pos: [bs, len_q, embed_dim] of position embedding for each query + position. + ref_points: [bs, len_q, num_levels, box_dim] of reference points for each + query. box_dim is in {2, 4} as ref_points can either be box cxcy or + cxcywh. + value: [bs, len_v, embed_dim] of values to be applied in cross-attention. + pad_mask: [bs, len_v] of boolean values, where 0 indicates padding in + value array. + train: Whether we are in training mode. + + Returns: + [bs, len_q, embed_dim] of decoder-encoded queries. + """ + x = MultiHeadDotProductAttention( + name='self_attn', + # Scaling is necessary to match pytorch official model that combines + # the kernel into one init with larger fan_in. + # qkv_kernel_init=jax.nn.initializers.variance_scaling( + # 0.5, 'fan_avg', 'uniform'), + num_heads=self.num_heads)( + inputs_q=query, pos_emb_q=query_pos, pos_emb_k=query_pos) + + query = query + nn.Dropout(rate=self.dropout)(x, deterministic=not train) + # TODO(tonysherbondy): Reverse layer norm naming and just fix in + # torch_param map. + query = nn.LayerNorm(dtype=self.dtype, name='norm2')(query) + + # cross attention + x = MultiScaleDeformableAttention( + spatial_shapes=self.spatial_shapes, + num_levels=self.num_levels, + num_heads=self.num_heads, + num_points=self.num_reference_points, + embed_dim=self.embed_dim, + compiler_config=self.compiler_config, + dtype=self.dtype, + name='cross_attn')(query + query_pos, ref_points, value, pad_mask, + train) + + query = query + nn.Dropout(rate=self.dropout)(x, deterministic=not train) + query = nn.LayerNorm(dtype=self.dtype, name='norm1')(query) + + # FeedForward Network. + # TODO(tonysherbondy): Extract as module since its the same as other FFN. + bias_range = 1 / np.sqrt(x.shape[-1]) + x = nn.Dense( + self.ffn_dim, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=uniform_initializer( + -bias_range, bias_range, dtype=self.dtype), + name='linear1')( + query) + + x = nn.relu(x) + x = nn.Dropout(rate=self.dropout)(x, deterministic=not train) + bias_range = 1 / np.sqrt(x.shape[-1]) + x = nn.Dense( + self.embed_dim, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=uniform_initializer( + -bias_range, bias_range, dtype=self.dtype), + name='linear2')( + x) + x = nn.Dropout(rate=self.dropout)(x, deterministic=not train) + query = query + x + query = nn.LayerNorm(name='norm3')(query) + + # TODO(tonysherbondy): Consider clamping values between [-max, max]. + return query + + +class DeformableDETRDecoder(nn.Module): + """Sequence of DeformableDETRDecoderLayers. + + Attributes: + embed_dim: Size of the hidden embedding dimension, used for query, value, + embeddings, and outputs. + num_heads: Number of heads. num_levels : Number of feature levels. + num_layers: Number of decoder layers. + dropout: Dropout rate. + dtype: Data type of the computation (default: float32). + """ + spatial_shapes: Sequence[Tuple[int, int]] + embed_dim: int + num_heads: int + num_levels: int + num_layers: int + num_reference_points: int + ffn_dim: int + bbox_embeds: Sequence[nn.Module] + dropout: float + compiler_config: ml_collections.ConfigDict + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__( + self, + query: jnp.ndarray, + query_pos: jnp.ndarray, + ref_points: jnp.ndarray, + value: jnp.ndarray, + pad_mask: jnp.ndarray, + valid_ratios: jnp.ndarray, + train: bool, + ) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Apply decoder. + + Args: + query: [bs, len_q, embed_dim] of queries. + query_pos: [bs, len_q, embed_dim] of position embedding for each query + position. + ref_points: [bs, len_q, box_dim] of reference points for each query. + box_dim is in {2, 4} as ref_points can either be box cxcy or cxcywh. + value: [bs, len_v, embed_dim] of values to be applied in cross-attention. + pad_mask: [bs, len_v] of boolean values, where 0 indicates padding in + value array. + valid_ratios: [bs, num_levels, 2] of ratios of actual shape dim to padded + dim. Range from (0, 1]; 0 is all padding (impossible) and 1 is no + padding. + train: Whether we are in training mode. + + Returns: + [bs, len_q, embed_dim] of decoder-encoded queries and [bs, len_q, box_dim] + of output reference points. + """ + assert ref_points.shape[-1] in {2, 4} + + output = query + output_by_layer = [] + ref_points_by_layer = [] + for i in range(self.num_layers): + # Use valid shape ratios to keep reference points in bounds at each level. + vratios = valid_ratios + if ref_points.shape[-1] == 4: + vratios = jnp.concatenate([vratios] * 2, -1) + ref_points_input = ref_points[:, :, None] * vratios[:, None] + + output = DeformableDETRDecoderLayer( + spatial_shapes=self.spatial_shapes, + embed_dim=self.embed_dim, + num_heads=self.num_heads, + num_levels=self.num_levels, + num_reference_points=self.num_reference_points, + ffn_dim=self.ffn_dim, + dropout=self.dropout, + compiler_config=self.compiler_config, + dtype=self.dtype, + name=f'layer{i}')( + query=output, + query_pos=query_pos, + ref_points=ref_points_input, + value=value, + pad_mask=pad_mask, + train=train) + + bbox_offset_embed = self.bbox_embeds[i](output) + + if ref_points.shape[-1] == 4: + new_ref_points = bbox_offset_embed + inverse_sigmoid(ref_points) + else: + new_ref_points = bbox_offset_embed + xy = bbox_offset_embed[..., :2] + inverse_sigmoid(ref_points) + # Here is where ref_points goes to 4d. + new_ref_points = jnp.concatenate([xy, bbox_offset_embed[..., 2:]], + axis=-1) + ref_points = nn.sigmoid(new_ref_points) + # To satisfy deformable detr iterative refinement must stop gradient here. + ref_points = jax.lax.stop_gradient(ref_points) + + output_by_layer.append(output) + ref_points_by_layer.append(ref_points) + + output, ref_points = jnp.stack(output_by_layer), jnp.stack( + ref_points_by_layer) + + return output, ref_points + + +def get_mask_valid_ratio(mask: jnp.ndarray) -> jnp.ndarray: + """Get non-padded:padded ratio for width/height for each mask.""" + _, h, w = mask.shape + valid_h = jnp.sum(mask[:, :, 0], 1) + valid_w = jnp.sum(mask[:, 0, :], 1) + valid_ratio_h = valid_h / h + valid_ratio_w = valid_w / w + valid_ratio = jnp.stack([valid_ratio_w, valid_ratio_h], -1) + return valid_ratio + + +def prepare_encoder_input( + inputs: Sequence[jnp.ndarray], masks: Sequence[jnp.ndarray], + pos_embeds: Sequence[jnp.ndarray], level_embeds: jnp.ndarray +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Flatten all image dimensions and add level embed to position embed.""" + input_flattened = [] + mask_flattened = [] + level_pos_embed_flattened = [] + for inp, mask, pos_embed, level_embed in zip(inputs, masks, pos_embeds, + level_embeds): + bs, h, w, c = inp.shape + inp = inp.reshape(bs, h * w, c) + mask = mask.reshape(bs, h * w) + pos_embed = pos_embed.reshape(bs, h * w, c) + lvl_pos_embed = pos_embed + level_embed + + level_pos_embed_flattened.append(lvl_pos_embed) + input_flattened.append(inp) + mask_flattened.append(mask) + + input_flattened = jnp.concatenate(input_flattened, 1) + mask_flattened = jnp.concatenate(mask_flattened, 1) + level_pos_embed_flattened = jnp.concatenate(level_pos_embed_flattened, 1) + valid_ratios = jnp.stack([get_mask_valid_ratio(m) for m in masks], 1) + return (input_flattened, valid_ratios, level_pos_embed_flattened, + mask_flattened) + + +@functools.partial(jax.jit, static_argnums=0) +def get_encoder_reference_points(spatial_shapes: Sequence[Tuple[int, int]], + valid_ratios: jnp.ndarray, + dtype=jnp.float32) -> jnp.ndarray: + """Return grid of 2D reference points within valid range by feature level. + + Args: + spatial_shapes: [h, w] for each feature map level. + valid_ratios: [bs, num_levels, 2] fraction of non-pad pixels in x and y. + dtype: The dtype of the computation. + + Returns: + [bs, len_v, num_levels, 2] of reference point positions in range [0, 1], + where len_v is the sum of all feature map areas. + """ + reference_points_list = [] + for lvl, (h, w) in enumerate(spatial_shapes): + ref_y, ref_x = jnp.meshgrid( + jnp.linspace(0.5, h - 0.5, h, dtype=dtype), + jnp.linspace(0.5, w - 0.5, w, dtype=dtype)) + ref_y, ref_x = ref_y.T, ref_x.T + ref_y = ref_y.reshape(-1)[None] / (valid_ratios[:, None, lvl, 1] * h) + ref_x = ref_x.reshape(-1)[None] / (valid_ratios[:, None, lvl, 0] * w) + ref = jnp.stack((ref_x, ref_y), -1) + reference_points_list.append(ref) + reference_points = jnp.concatenate(reference_points_list, 1) + # TODO(tonysherbondy): The reference implementation does this multiplication + # of the valid_ratios again, which basically removes normalizing by + # valid_ratios in the loop. It should be equivalent to just normalizing by h + # and w, but for some reason it does not reproduce the results if we do that. + reference_points = reference_points[:, :, None] * valid_ratios[:, None] + return reference_points + + +class DeformableDETRTransformer(nn.Module): + """DeformableDETR Transformer. + + Attributes: + embed_dim: Size of the hidden embedding dimension. + enc_embed_dim: Size of the hidden embedding dimension for encoder. + num_heads: Number of heads. + num_queries: Number of object queries. + num_enc_layers: Number of encoder layers. + num_dec_layers: Number of decoder layers. + num_enc_points: Number of encoder points in deformable attention. + num_dec_points: Number of decoder points in deformable attention. + ffn_dim: Size of feed-forward network embedding. + dropout: Dropout rate. + compiler_config: Compiler configuration. + dtype: Data type of the computation (default: float32). + """ + + embed_dim: int + enc_embed_dim: int + num_heads: int + num_queries: int + num_enc_layers: int + num_dec_layers: int + num_enc_points: int + num_dec_points: int + bbox_embeds: Sequence[nn.Module] + ffn_dim: int + dropout: float + compiler_config: ml_collections.ConfigDict + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__( + self, + inputs: Sequence[jnp.ndarray], + pad_masks: Sequence[jnp.ndarray], + pos_embeds: Sequence[jnp.ndarray], + train: bool) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + # Prepare inputs for encoder. + spatial_shapes = tuple([inp.shape[1:3] for inp in inputs]) + num_levels = len(spatial_shapes) + + level_embeds = jnp.asarray( + self.param('level_embed', nn.initializers.normal(stddev=1.0), + (num_levels, self.enc_embed_dim))) + (x, valid_ratios, pos_embeds, pad_masks) = prepare_encoder_input( + inputs=inputs, + masks=pad_masks, + pos_embeds=pos_embeds, + level_embeds=level_embeds) + + enc_ref_points = get_encoder_reference_points( + tuple(spatial_shapes), valid_ratios) + + # Encoder. + encoder = DeformableDETREncoder( + spatial_shapes=spatial_shapes, + embed_dim=self.enc_embed_dim, + num_heads=self.num_heads, + num_layers=self.num_enc_layers, + num_levels=num_levels, + ffn_dim=self.ffn_dim, + num_reference_points=self.num_enc_points, + dropout=self.dropout, + compiler_config=self.compiler_config, + dtype=self.dtype, + name='encoder') + + x = encoder( + src=x, + pos_embed=pos_embeds, + ref_points=enc_ref_points, + pad_mask=pad_masks, + train=train) + + # Project encoder output to decoder embedding. Note that this layer does + # not exist in the reference implementation. However, this greatly reduces + # the amount of memory required while training and seems to have no + # noticeable effect in COCO mAP. + if self.enc_embed_dim != self.embed_dim: + x = nn.Conv( + features=self.embed_dim, + kernel_size=(1,), + name='enc_to_dec_proj_conv')( + x) + x = nn.GroupNorm(num_groups=32, name='enc_to_dec_proj_groupnorm')(x) + + query_embed = jnp.asarray( + self.param('query_embed', nn.initializers.normal(stddev=1.0), + (self.num_queries, self.embed_dim * 2))) + + # Prepare decoder input. + bs = x.shape[0] + query_embed = query_embed[None, ...].repeat(bs, 0) + query_embed, query = jnp.split(query_embed, indices_or_sections=2, axis=-1) + dec_init_ref_points = nn.Dense(2, name='ref_embed')(query_embed) + dec_init_ref_points = nn.sigmoid(dec_init_ref_points) + + x, ref_points = DeformableDETRDecoder( + spatial_shapes=spatial_shapes, + embed_dim=self.embed_dim, + num_heads=self.num_heads, + num_layers=self.num_dec_layers, + num_levels=num_levels, + ffn_dim=self.ffn_dim, + num_reference_points=self.num_dec_points, + bbox_embeds=self.bbox_embeds, + dropout=self.dropout, + compiler_config=self.compiler_config, + dtype=self.dtype, + name='decoder')( + value=x, + query=query, + query_pos=query_embed, + ref_points=dec_init_ref_points, + pad_mask=pad_masks, + valid_ratios=valid_ratios, + train=train) + + return x, ref_points, dec_init_ref_points diff --git a/scenic/projects/baselines/deformable_detr/evaluate.py b/scenic/projects/baselines/deformable_detr/evaluate.py new file mode 100644 index 0000000000000000000000000000000000000000..8a489ebb452b590aee40f83d43c2e6c21f18ce33 --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/evaluate.py @@ -0,0 +1,168 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Eval functionality for DeformableDETR.""" + +from concurrent import futures +from typing import Any, Callable, Dict, Optional, Sequence, Tuple + +from absl import logging +from flax import jax_utils +import flax.linen as nn +import jax +import jax.numpy as jnp +import numpy as np +from scenic.dataset_lib.dataset_utils import Dataset +from scenic.projects.baselines.deformable_detr.coco_eval import DeformableDetrGlobalEvaluator +from scenic.projects.baselines.deformable_detr.coco_eval import prepare_coco_eval_dicts +from scenic.projects.baselines.detr import train_utils as detr_train_utils +from scenic.train_lib import train_utils + +ArrayDict = Dict[str, jnp.ndarray] + + +def get_eval_step( + flax_model: nn.Module, + loss_and_metrics_fn: Callable[..., Any], + logits_to_probs_fn: Callable[[jnp.ndarray], jnp.ndarray], + metrics_only: bool = False, + debug: bool = False +) -> Callable[[train_utils.TrainState, ArrayDict], Tuple[Any, Any, Any]]: + """Runs a single step of training. + + + Args: + flax_model: Instance of model to evaluate. + loss_and_metrics_fn: A function that given model predictions, a batch, and + parameters of the model calculates the loss as well as metrics. + logits_to_probs_fn: Function that takes logits and converts them to probs. + metrics_only: Only return metrics. + debug: bool; Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Eval step function which returns predictions and calculated metrics. Also + the buffer of the second argument (batch) is donated to the computation. + """ + + def metrics_fn(train_state: train_utils.TrainState, batch: ArrayDict, + predictions: ArrayDict) -> Tuple[Any, Any, Any]: + _, metrics = loss_and_metrics_fn( + predictions, batch, model_params=train_state.params) + + if metrics_only: + return None, None, metrics + + targets, predictions_out = prepare_coco_eval_dicts( + batch=batch, + predictions=predictions, + logits_to_probs_fn=logits_to_probs_fn, + gather=True) + return targets, predictions_out, metrics + + def eval_step(train_state: train_utils.TrainState, + batch: ArrayDict) -> Tuple[Any, Any, Any]: + variables = { + 'params': train_state.params, + **train_state.model_state + } + predictions = flax_model.apply( + variables, + batch['inputs'], + padding_mask=batch['padding_mask'], + train=False, + mutable=False, + debug=debug) + return metrics_fn(train_state, batch, predictions) + + return eval_step + + +def _wait(future: Optional[futures.Future]) -> Any: # pylint: disable=g-bare-generic + if future is None: + return None + return future.result() + + +def _add_examples(global_metrics_evaluator: DeformableDetrGlobalEvaluator, + predictions: Sequence[ArrayDict], + labels: Sequence[ArrayDict]): + for pred, label in zip(predictions, labels): + global_metrics_evaluator.add_example(prediction=pred, target=label) # pytype: disable=wrong-arg-types # jax-ndarray + + +def run_eval( + global_metrics_evaluator: DeformableDetrGlobalEvaluator, dataset: Dataset, + train_state: train_utils.TrainState, + eval_step_pmapped: Callable[[train_utils.TrainState, ArrayDict], Any], + pool: futures.ThreadPoolExecutor, step: int, steps_per_eval: int +) -> Tuple[Tuple[int, Any], futures.Future]: # pylint: disable=g-bare-generic + """Run full eval on dataset.""" + future = None + + eval_metrics = [] + if global_metrics_evaluator is not None: + global_metrics_evaluator.clear() + + for eval_step in range(steps_per_eval): + logging.info('Running eval step %d', eval_step) + eval_batch = next(dataset.valid_iter) + + # Do the eval step given the matches. + (eval_batch_all_hosts, eval_predictions_all_hosts, + e_metrics) = eval_step_pmapped(train_state, eval_batch) + + # Variable aux_outputs is not needed anymore. + eval_predictions_all_hosts.pop('aux_outputs', None) + + # Collect local metrics (returned by the loss function). + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + + if global_metrics_evaluator is not None: + # Unreplicate the output of eval_step_pmapped (used `lax.all_gather`). + eval_batch_all_hosts = jax_utils.unreplicate(eval_batch_all_hosts) + eval_predictions_all_hosts = jax_utils.unreplicate( + eval_predictions_all_hosts) + + # Collect preds and labels to be sent for computing global metrics. + predictions = detr_train_utils.process_and_fetch_to_host( + eval_predictions_all_hosts, eval_batch_all_hosts['batch_mask']) + predictions = jax.tree_util.tree_map(np.asarray, predictions) + + labels = detr_train_utils.process_and_fetch_to_host( + eval_batch_all_hosts['label'], eval_batch_all_hosts['batch_mask']) + labels = jax.tree_util.tree_map(np.asarray, labels) + + if eval_step == 0: + logging.info('Pred keys: %s', list(predictions[0].keys())) + logging.info('Labels keys: %s', list(labels[0].keys())) + + # Add to evaluator. + _wait(future) + future = pool.submit(_add_examples, global_metrics_evaluator, predictions, + labels) + + del predictions, labels + + del eval_batch, eval_batch_all_hosts, eval_predictions_all_hosts + + eval_global_metrics_summary_future = None + if global_metrics_evaluator is not None: + _wait(future) + logging.info('Number of eval examples: %d', len(global_metrics_evaluator)) + eval_global_metrics_summary_future = pool.submit( + global_metrics_evaluator.compute_metrics, clear_annotations=False) + + return (step, eval_metrics), eval_global_metrics_summary_future diff --git a/scenic/projects/baselines/deformable_detr/input_pipeline_detection.py b/scenic/projects/baselines/deformable_detr/input_pipeline_detection.py new file mode 100644 index 0000000000000000000000000000000000000000..0d6db2d69fa7f91dbbc10d1c8056a1589d197295 --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/input_pipeline_detection.py @@ -0,0 +1,381 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generator for COCO with Deformable DETR.""" +import functools +from typing import Any, Callable, Mapping, Optional + +from absl import logging +from flax import jax_utils +import jax +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib.coco_dataset import coco_utils +from scenic.projects.baselines.detr import transforms +import tensorflow as tf +import tensorflow_datasets as tfds + +DecodeExampleFn = Callable[[Mapping[str, Any]], Mapping[str, Any]] + + +class ImageNetNormalization: + """Performs standard ImageNet normalization. + + Note: ImageNet normalization is separated out as a module to fix bugs in the + original DETR porting to JAX. Bugs: + (1) 0.485 in mean_rgb was typoed as 0.48. (2) To be consistent with the + pytorch implementation, rgb normalization should happen after data + augmentation instead of before. + """ + + def __init__(self): + # Computed from a subset of the training set. The original (randomly + # generated) subset used for calculation and the exact way of calculation is + # not known to the public, but the numbers have been widely adopted since. + self.mean_rgb = tf.constant([0.485, 0.456, 0.406], dtype=tf.float32) + self.std_rgb = tf.constant([0.229, 0.224, 0.225], dtype=tf.float32) + + def __call__(self, features): + features['inputs'] = (features['inputs'] - self.mean_rgb) / self.std_rgb + return features + + +def make_coco_transforms(image_set, max_size=1333): + """Returns a preprocessing function that operates on inputs and labels.""" + scales = [480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800] + ratio = max_size / 1333. + + scales = [int(s * ratio) for s in scales] + scales2 = [int(s * ratio) for s in [400, 500, 600]] + + normalize_boxes = transforms.NormalizeBoxes() + normalize_image = ImageNetNormalization() + init_padding_mask = transforms.InitPaddingMask() + + if image_set == 'train': + return transforms.Compose([ + transforms.RandomHorizontalFlip(), + transforms.RandomSelect( + transforms.RandomResize(scales, max_size=max_size), + transforms.Compose([ + transforms.RandomResize(scales2), + transforms.RandomSizeCrop(int(ratio * 384), int(ratio * 600)), + transforms.RandomResize(scales, max_size=max_size), + ])), normalize_boxes, normalize_image, init_padding_mask + ]) + + elif image_set == 'validation': + return transforms.Compose([ + transforms.Resize(max(scales), max_size=max_size), + normalize_boxes, normalize_image, init_padding_mask + ]) + + else: + raise ValueError(f'Unknown image_set: {image_set}') + + +def decode_boxes(bbox, size): + """Convert yxyx [0, 1] normalized boxes to xyxy unnormalized format.""" + y0, x0, y1, x1 = tf.split(bbox, 4, axis=-1) + h = tf.cast(size[0], tf.float32) + w = tf.cast(size[1], tf.float32) + + y0 = tf.clip_by_value(y0 * h, 0.0, h) + x0 = tf.clip_by_value(x0 * w, 0.0, w) + y1 = tf.clip_by_value(y1 * h, 0.0, h) + x1 = tf.clip_by_value(x1 * w, 0.0, w) + + bbox = tf.concat([x0, y0, x1, y1], axis=-1) + return bbox + + +def decode_coco_detection_example(example): + """Given an instance and raw labels, creates pair. + + Decoding includes. + 1. Converting images from uint8 [0, 255] to [0, 1.] float32. + 2. Mean subtraction and standardization using hard-coded mean and std. + 3. Convert boxes from yxyx [0-1] to xyxy un-normalized. + 4. Add 1 to all labels to account for background/padding object at label 0. + 5. Shuffling dictionary keys to be consistent with the rest of the code. + + Args: + example: dict; Input image and raw labels. + + Returns: + A dictionary of {'inputs': input image, 'labels': task label}. + """ + image = tf.image.convert_image_dtype(example['image'], dtype=tf.float32) + + boxes = decode_boxes(example['objects']['bbox'], tf.shape(image)[0:2]) + + target = { + 'area': example['objects']['area'], + 'boxes': boxes, + 'objects/id': example['objects']['id'], + 'is_crowd': example['objects']['is_crowd'], + 'labels': example['objects']['label'] + 1, # 0'th class is padding. + } + + # Filters objects to exclude degenerate boxes. + keep = tf.where(tf.logical_and(boxes[:, 2] > boxes[:, 0], + boxes[:, 3] > boxes[:, 1]))[:, 0] + target_kept = {k: tf.gather(v, keep) for k, v in target.items()} + + target_kept['orig_size'] = tf.cast(tf.shape(image)[0:2], dtype=tf.int32) + target_kept['size'] = tf.identity(target_kept['orig_size']) + target_kept['image/id'] = example['image/id'] + + return { + 'inputs': image, + 'label': target_kept, + } + + +# This is only overridden from DETR to take a data_dir. +def coco_load_split_from_tfds(batch_size: int, + *, + train: bool, + preprocess_fn: Callable[..., Any], + decode_fn: DecodeExampleFn, + cache: bool = False, + max_size: int = 1333, + max_boxes: int = 100, + shuffle_buffer_size: int = 1000, + shuffle_seed: int = 0, + data_dir: Optional[str] = None): + """Loads a split from the COCO dataset using TensorFlow Datasets. + + Args: + batch_size: The batch size returned by the data pipeline. + train: Whether to load the train or evaluation split. + preprocess_fn: A function that given an example, train flag, and dtype + returns the preprocessed the example. Note that the preprocessing is done + BEFORE caching to re-use them. + decode_fn: A function that given an example decodes the image, converts it + to float32, and pulls out the relevant parts from the tfds features. + cache: whether to use the ds.cache or nor. + max_size: Maximum image size. + max_boxes: Maximum number of boxes. + shuffle_buffer_size: Size of the shuffle buffer. + shuffle_seed: Seed for shuffling the training data. + data_dir: Passed to tfds.builder to optionally specify where to load from. + + Returns: + A `tf.data.Dataset`, and dataset info. + """ + split = 'train' if train else 'validation' + builder = tfds.builder('coco/2017', data_dir=data_dir) + + # Each host is responsible for a fixed subset of data. + data_range = tfds.even_splits(split, jax.process_count())[jax.process_index()] + ds = builder.as_dataset(split=data_range, shuffle_files=False) + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + ds = ds.with_options(options) + ds = ds.map(decode_fn, num_parallel_calls=tf.data.experimental.AUTOTUNE) + if cache: + ds = ds.cache() + + # TLDR: make sure max_boxes is set >=64. + # NOTE: the number of boxes/labels always needs to be strictly larger than 63 + # to ensure that there is at least one dummy target corresponding + # to an empty bounding box, and that the last target box is such a dummy + # empty target. This is needed for matching functions that in principle only + # produce matches with non-empty target boxes, and produce dummy matches + # with an empty target for the rest of the unmatched predicted boxes. The + # latter behaviour is necessary to ensure that the number of matches per + # datapoint is the same for all datapoints and shapes are static and jit + # compatible. + padded_shapes = { + 'inputs': [max_size, max_size, 3], + 'padding_mask': [max_size, max_size], + 'label': { + 'area': [max_boxes,], + 'boxes': [max_boxes, 4], + 'objects/id': [max_boxes,], + 'is_crowd': [max_boxes,], + 'labels': [max_boxes,], + 'image/id': [], + 'orig_size': [2,], + 'size': [2,] + }, + } + + if train: + # First repeat then batch. + ds = ds.shuffle(shuffle_buffer_size, seed=shuffle_seed) + ds = ds.repeat() + # Augmentation should be done after repeat for true randomness. + ds = ds.map(preprocess_fn, num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.padded_batch( + batch_size, padded_shapes=padded_shapes, drop_remainder=True) + + else: + ds = ds.map(preprocess_fn, num_parallel_calls=tf.data.experimental.AUTOTUNE) + # First batch then repeat. + ds = ds.padded_batch( + batch_size, padded_shapes=padded_shapes, drop_remainder=False) + ds = ds.repeat() + + ds = ds.prefetch(tf.data.experimental.AUTOTUNE) + return ds, builder.info + + +def decode_coco_deformable_detr_example( + example: Mapping[str, Any]) -> Mapping[str, Any]: + """Given an instance and raw labels, creates pair. + + Calls DETR decoder and then just converts the labels to those expected by + deformable detr. Labels are the exact label indices in the coco map where + max id is 90. Whereas, detr labels are the index of the sorted COCO ids. + + Args: + example: Input image and raw labels. + + Returns: + A dictionary of {'inputs': input image, 'labels': task label}. + """ + result = decode_coco_detection_example(example) + + # Remap labels. + label_ref_keys = sorted(list(coco_utils.get_label_map('ref_coco').keys())) + label_keys = tf.range(len(label_ref_keys), dtype=tf.int64) + label_vals = tf.constant(label_ref_keys, dtype=tf.int64) + label_map = tf.lookup.StaticHashTable( + tf.lookup.KeyValueTensorInitializer(label_keys, label_vals), + default_value=0) + labels = label_map.lookup(result['label']['labels']) + labels = tf.cast(labels, tf.int32) + + result['label']['labels'] = labels + return result + + +@datasets.add_dataset('coco_deformable_detr_detection') +def get_dataset(*, + batch_size: int, + eval_batch_size: int, + num_shards: int, + dtype_str: str = 'float32', + shuffle_seed: int = 0, + rng: Optional[jnp.ndarray] = None, + dataset_configs: Optional[Mapping[str, Any]] = None, + dataset_service_address: Optional[str] = None): + """Returns generators for COCO object detection 2017 train & validation set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image. Only 'float32' is currently supported. + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. Must be empty. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + assert dtype_str == 'float32', ( + f'coco_detr_dataset invoked with unsupported dtype_str: {dtype_str}') + del dtype_str + + dataset_configs = dataset_configs or {} + + max_size = dataset_configs.get('max_size', 1333) + max_boxes = dataset_configs.get('max_boxes', 100) + + train_preprocess_fn = make_coco_transforms('train', max_size) + valid_max_size = dataset_configs.get('valid_max_size', max_size) + eval_preprocess_fn = make_coco_transforms('validation', valid_max_size) + + decode_fn = decode_coco_deformable_detr_example + + train_ds, train_ds_info = coco_load_split_from_tfds( + batch_size, + train=True, + preprocess_fn=train_preprocess_fn, + decode_fn=decode_fn, + shuffle_buffer_size=dataset_configs.get('shuffle_buffer_size', 1000), + max_size=max_size, + max_boxes=max_boxes, + shuffle_seed=shuffle_seed, + data_dir=dataset_configs.get('data_dir')) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + eval_ds, _ = coco_load_split_from_tfds( + eval_batch_size, + train=False, + preprocess_fn=eval_preprocess_fn, + max_size=valid_max_size, + max_boxes=max_boxes, + decode_fn=decode_fn, + data_dir=dataset_configs.get('data_dir')) + + # Labels take on values 1-90. We set 0 to be padded objects. + num_classes = train_ds_info.features['objects']['label'].num_classes + 1 + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + if dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + train_iter = jax_utils.prefetch_to_device( + train_iter, dataset_configs.get('prefetch_to_device')) + + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + eval_iter = map(shard_batches, eval_iter) + + meta_data = { + 'num_classes': + num_classes, + 'input_shape': [-1, max_size, max_size, 3], + 'num_train_examples': + dataset_utils.get_num_examples( + 'coco/2017', 'train', data_dir=dataset_configs.get('data_dir')), + 'num_eval_examples': + dataset_utils.get_num_examples( + 'coco/2017', + 'validation', + data_dir=dataset_configs.get('data_dir')), + 'input_dtype': + jnp.float32, + 'target_is_onehot': + False, + 'label_to_name': + coco_utils.get_label_map('ref_coco'), + } + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) diff --git a/scenic/projects/baselines/deformable_detr/main.py b/scenic/projects/baselines/deformable_detr/main.py new file mode 100644 index 0000000000000000000000000000000000000000..cea825317f282788bc4f69b35a778fd298d64b80 --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/main.py @@ -0,0 +1,106 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for DeformableDETR.""" + +from typing import Any + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.baselines.deformable_detr import input_pipeline_detection # pylint: disable=unused-import +from scenic.projects.baselines.deformable_detr import trainer +from scenic.projects.baselines.deformable_detr.model import DeformableDETRModel +from scenic.train_lib import train_utils + +FLAGS = flags.FLAGS + +_TRAIN = flags.DEFINE_bool('train', True, 'Run training or just eval.') +_BATCH_SIZE = flags.DEFINE_integer('batch_size', None, 'Batch size.') + + +def get_model_cls(model_name: str) -> Any: + """Returns model class given its name.""" + if model_name == 'deformable_detr': + return DeformableDETRModel + else: + raise ValueError(f'Unrecognized model: {model_name}.') + + +def resolve(obj): + """Resolve `FieldReference`s in `obj`. + + We do not have a good way to resolve every `FieldReference` in `obj`. The + function will raise a TypeError if it encounters something it cannot handle. + + Args: + obj: The object to resolve. + + Returns: + The resolved object. + """ + if obj is None: + return None + elif isinstance(obj, (int, float, str, bool)): + return obj + elif isinstance(obj, ml_collections.FieldReference): + return resolve(obj.get()) + elif isinstance(obj, ml_collections.ConfigDict): + resolved = ml_collections.ConfigDict() + for key, value in obj.items(): + resolved[key] = resolve(value) + return resolved + elif isinstance(obj, list): + return [resolve(x) for x in obj] + elif isinstance(obj, tuple): + return tuple([resolve(x) for x in obj]) + else: + raise TypeError(f'Cannot resolve type {type(obj)}') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the DETR project.""" + if _BATCH_SIZE.value is not None: + config.batch_size = _BATCH_SIZE.value + config = resolve(config) + config = ml_collections.FrozenConfigDict(config) + + model_cls = get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + if _TRAIN.value: + trainer.train_and_evaluate( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + else: + trainer.evaluate( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/baselines/deformable_detr/model.py b/scenic/projects/baselines/deformable_detr/model.py new file mode 100644 index 0000000000000000000000000000000000000000..481f2ebec4f55ca1c3a7cb459917c23a87cee2bd --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/model.py @@ -0,0 +1,630 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""DeformableDETR model.""" + +import math +from typing import Any, Dict, Optional, Sequence, Tuple, Union + +from absl import logging +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib import matchers +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import box_utils +from scenic.model_lib.base_models import model_utils +from scenic.projects.baselines.deformable_detr.backbone import DeformableDETRBackbone +from scenic.projects.baselines.deformable_detr.backbone import InputPosEmbeddingSine +from scenic.projects.baselines.deformable_detr.backbone import mask_for_shape +from scenic.projects.baselines.deformable_detr.deformable_transformer import BBoxCoordPredictor +from scenic.projects.baselines.deformable_detr.deformable_transformer import DeformableDETRTransformer +from scenic.projects.baselines.deformable_detr.deformable_transformer import inverse_sigmoid +from scenic.projects.baselines.deformable_detr.deformable_transformer import pytorch_kernel_init + +ArrayDict = Dict[str, jnp.ndarray] +MetricsDict = Dict[str, Tuple[jnp.ndarray, jnp.ndarray]] + + +def compute_cost( + *, + tgt_labels: jnp.ndarray, + out_prob: jnp.ndarray, + tgt_bbox: jnp.ndarray, + out_bbox: jnp.ndarray, + alpha: float = 0.25, + gamma: float = 2.0, + class_loss_coef: float = 1.0, + bbox_loss_coef: float = 1.0, + giou_loss_coef: float = 1.0, + target_is_onehot: bool = False) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Computes cost matrices for DeformableDETR predictions. + + Relevant code: + https://github.com/fundamentalvision/Deformable-DETR/blob/11169a60c33333af00a4849f1808023eba96a931/models/matcher.py#L45 + + Args: + tgt_labels: Class labels of shape [bs, ntargets]. If target_is_onehot then + it is [bs, ntargets, nclasses]. Note that the labels corresponding to + empty bounding boxes are not yet supposed to be filtered out. + out_prob: Classification probabilities of shape [bs, nout, nclasses]. + tgt_bbox: Target box coordinates of shape [bs, ntargets, 4]. Note that the + empty bounding boxes are not yet supposed to be filtered out. + out_bbox: Predicted box coordinates of shape [bs, nout, 4] + alpha: Focal loss alpha for class classification loss. + gamma: Focal loss gamma for class classification loss. + class_loss_coef: Relative weight of classification loss. + bbox_loss_coef: Relative weight of bbox loss. + giou_loss_coef: Relative weight of giou loss. + target_is_onehot: Whether targets are one-hot encoded. + + Returns: + All pairs cost matrix [bs, nout, ntargets]. + """ + # Calculate cost using pred_prob [bs, npreds]. + logfn = lambda x: jnp.log(jnp.clip(x, min=1e-8)) + neg_cost_class = (1 - alpha) * (out_prob**gamma) * (-logfn(1 - out_prob)) + pos_cost_class = alpha * ((1 - out_prob)**gamma) * (-logfn(out_prob)) + cost_class = pos_cost_class - neg_cost_class + + # Select class cost for target class [bs, npreds, ntargets]. + if target_is_onehot: + cost_class = jnp.einsum('bnl,bml->bnm', cost_class, tgt_labels) + else: + cost_class = jax.vmap(jnp.take, (0, 0, None))(cost_class, tgt_labels, 1) + + # Pairwise box l1 [bs, npreds, ntargets, 4]. + diff = jnp.abs(out_bbox[:, :, None] - tgt_bbox[:, None, :]) + # [bs, npreds, ntargets] + cost_bbox = jnp.sum(diff, axis=-1) + + # [bs, npreds, ntargets] + cost_giou = -box_utils.generalized_box_iou( + box_utils.box_cxcywh_to_xyxy(out_bbox), + box_utils.box_cxcywh_to_xyxy(tgt_bbox), + all_pairs=True, + eps=1e-8) + + total_cost = ( + bbox_loss_coef * cost_bbox + class_loss_coef * cost_class + + giou_loss_coef * cost_giou) + + # Compute the number of unpadded columns for each batch element. It is assumed + # that all padding is trailing padding. + if target_is_onehot: + tgt_not_padding = tgt_labels[..., 0] == 0 + else: + tgt_not_padding = tgt_labels != 0 + n_cols = jnp.sum(tgt_not_padding, axis=-1) + return total_cost, n_cols + + +def loss_labels(*, + pred_logits: jnp.ndarray, + tgt_labels: jnp.ndarray, + indices: jnp.ndarray, + alpha: float = 0.25, + gamma: float = 2.0, + class_loss_coef: float = 1.0, + target_is_onehot: bool = False) -> ArrayDict: + """Calculate DeformableDETR classification loss. + + Args: + pred_logits: [bs, n_preds, n_classes]. + tgt_labels: [bs, n_max_targets]. + indices: [bs, 2, min(n_preds, n_max_targets)]. + alpha: Focal loss alpha. + gamma: Focal loss gamma. + class_loss_coef: Classification loss coefficient. + target_is_onehot: Tgt is [bs, n_max_targets, n_classes] + + Returns: + `loss_class`: Classification loss with coefficient applied. + """ + # Apply the permutation communicated by indices. + pred_logits = model_utils.simple_gather(pred_logits, indices[..., 0, :]) + tgt_labels = model_utils.simple_gather(tgt_labels, indices[..., 1, :]) + + if target_is_onehot: + tgt_labels_onehot = tgt_labels + else: + nclasses = pred_logits.shape[-1] + tgt_labels_onehot = jnp.where(tgt_labels == 0, nclasses, tgt_labels) + tgt_labels_onehot = jax.nn.one_hot(tgt_labels_onehot, nclasses) + + loss = model_utils.focal_sigmoid_cross_entropy( + pred_logits, tgt_labels_onehot, alpha=alpha, gamma=gamma) + loss = loss.mean(1).sum() * pred_logits.shape[1] + loss = class_loss_coef * loss + return {'loss_class': loss} + + +def loss_boxes(*, + src_boxes: jnp.ndarray, + tgt_labels: jnp.ndarray, + tgt_boxes: jnp.ndarray, + indices: jnp.ndarray, + bbox_loss_coef: float = 1.0, + giou_loss_coef: float = 1.0, + target_is_onehot: bool = False) -> ArrayDict: + """Calculate DeformableDETR bounding box losses. + + Args: + src_boxes: [bs, n_preds, 4]. + tgt_labels: [bs, n_max_targets]. + tgt_boxes: [bs, n_max_targets, 4]. + indices: [bs, 2, min(n_preds, n_max_targets)]. + bbox_loss_coef: L1 box coordinate loss coefficient. + giou_loss_coef: Generalized IOU (GIOU) loss coefficient. + target_is_onehot: Tgt is [bs, n_max_targets, n_classes] + + Returns: + `loss_class`: Classification loss with coefficient applied. + """ + src_indices = indices[..., 0, :] + tgt_indices = indices[..., 1, :] + + src_boxes = model_utils.simple_gather(src_boxes, src_indices) + tgt_boxes = model_utils.simple_gather(tgt_boxes, tgt_indices) + + # Some of the boxes are padding. We want to discount them from the loss. + if target_is_onehot: + tgt_not_padding = 1 - tgt_labels[..., 0] + else: + tgt_not_padding = tgt_labels != 0 + # Align this with the permuted target indices. + tgt_not_padding = model_utils.simple_gather(tgt_not_padding, tgt_indices) + tgt_not_padding = jnp.asarray(tgt_not_padding, dtype=jnp.float32) + + # To match official repo we do L1 loss on the cxcywh format. + loss_bbox = model_utils.weighted_box_l1_loss(src_boxes, tgt_boxes) + loss_bbox *= tgt_not_padding[..., None] + loss_bbox = bbox_loss_coef * loss_bbox.sum() + + loss_giou = 1 - box_utils.generalized_box_iou( + box_utils.box_cxcywh_to_xyxy(src_boxes), + box_utils.box_cxcywh_to_xyxy(tgt_boxes), + all_pairs=False, + eps=1e-8) + loss_giou *= tgt_not_padding + loss_giou = giou_loss_coef * loss_giou.sum() + + losses = {'loss_bbox': loss_bbox, 'loss_giou': loss_giou} + return losses + + +def _targets_from_batch( + batch: ArrayDict, + target_is_onehot: bool = False) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Get target labels and boxes with additional non-object appended.""" + # Append the no-object class label so we are always guaranteed one. + tgt_labels = batch['label']['labels'] + tgt_boxes = batch['label']['boxes'] + + # Append a class label. + if target_is_onehot: + # Shape is [batch, num_instances, num_classes] + label_shape = tgt_labels.shape + num_classes = label_shape[-1] + instance = jax.nn.one_hot(0, num_classes) + reshape_shape = (1,) * (len(label_shape) - 1) + (num_classes,) + broadcast_shape = label_shape[:-2] + (1, num_classes) + instance = jnp.broadcast_to( + jnp.reshape(instance, reshape_shape), broadcast_shape) + else: + instance = jnp.zeros_like(tgt_labels[..., :1]) + tgt_labels = jnp.concatenate([tgt_labels, instance], axis=1) + + # Same for boxes. + instance = jnp.zeros_like(tgt_boxes[..., :1, :]) + tgt_boxes = jnp.concatenate([tgt_boxes, instance], axis=1) + return tgt_labels, tgt_boxes + + +class InputProj(nn.Module): + """Simple input projection layer. + + Attributes: + embed_dim: Size of the output embedding dimension. + num_groups: Number channel groups for group norm. + kernel_size: Convolution kernel size. + stride: Stride in all dimensions. + padding: Same as nn.Conv padding type. + """ + embed_dim: int + num_groups: int = 32 + kernel_size: int = 1 + stride: int = 1 + padding: Union[str, int] = 'SAME' + + @nn.compact + def __call__(self, x: jnp.ndarray): + """Use conv kernel to project into embed_dim.""" + if isinstance(self.padding, str): + padding = self.padding + else: + padding = [self.padding] * 2 + x = nn.Conv( + features=self.embed_dim, + kernel_size=[self.kernel_size] * 2, + strides=self.stride, + padding=padding, + kernel_init=nn.initializers.glorot_uniform(), + bias_init=nn.initializers.zeros, + )( + x) + x = nn.GroupNorm(num_groups=self.num_groups)(x) + return x + + +class ObjectClassPredictor(nn.Module): + """Linear Projection block for predicting classification.""" + num_classes: int + prior_prob: float = 0.01 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, inputs: jnp.ndarray) -> jnp.ndarray: + """Applies Linear Projection to inputs. + + Args: + inputs: Input data. + + Returns: + Output of Linear Projection block. + """ + bias_init_value = -math.log((1 - self.prior_prob) / self.prior_prob) + return nn.Dense( + self.num_classes, + kernel_init=pytorch_kernel_init(dtype=self.dtype), + bias_init=nn.initializers.constant(bias_init_value), + dtype=self.dtype)( + inputs) + + +class DeformableDETR(nn.Module): + """DeformableDETR. + + Attributes: + num_classes: Number of classes to predict. + embed_dim: Size of the hidden embedding dimension. + embed_dim: Size of the hidden embedding dimension for encoder. + num_heads: Number of heads. + num_queries: Number of object queries. + num_enc_layers: Number of encoder layers. + num_dec_layers: Number of decoder layers. + num_feature_levels: Number of feature levels/scales. + num_enc_points: Number of encoder points in deformable attention. + num_dec_points: Number of decoder points in deformable attention. + transformer_ffn_dim: Transformers feed-forward/MLP dimension. + backbone_num_filters: Number of filters for Resnet. + backbone_num_layers: Number of layers for Resnet. + dropout: Dropout rate. + compiler_config: Compiler configuration. + dtype: Data type of the computation (default: float32). + """ + num_classes: int + embed_dim: int + enc_embed_dim: int + num_heads: int + num_queries: int + num_enc_layers: int + num_dec_layers: int + num_feature_levels: int + num_enc_points: int + num_dec_points: int + transformer_ffn_dim: int + backbone_num_filters: int + backbone_num_layers: int + dropout: float + compiler_config: ml_collections.ConfigDict + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + train: bool = False, + *, + padding_mask: Optional[jnp.ndarray] = None, + update_batch_stats: bool = False, + debug: bool = False) -> Dict[str, jnp.ndarray]: + """Perform multi-scale DeformableDETR. + + Args: + inputs: [bs, h, w, c] input data. + train: Whether it is training. + padding_mask: [bs, h, w] of bools with 0 at padded image regions. + update_batch_stats: Whether update the batch statistics for the BatchNorms + in the backbone. if None, the value of `train` flag will be used, i.e. + we update the batch stat if we are in the train mode. + debug: Necessary for scenic api. + + Returns: + Output: + 'pred_logits' - [bs, num_queries, num_classes] logits. + 'pred_boxes' - [bs, num_queries, 4] boxes in cxcywh format. + """ + del debug + if padding_mask is not None: + padding_mask = padding_mask.astype(bool) + + features, pad_masks, pos_embeds = DeformableDETRBackbone( + embed_dim=self.enc_embed_dim, + num_layers=self.backbone_num_layers, + num_filters=self.backbone_num_filters, + num_feature_levels=min(self.num_feature_levels, 3), + dtype=self.dtype, + name='backbone')( + inputs, train=update_batch_stats, padding_mask=padding_mask) + + projs = [ + InputProj(embed_dim=self.enc_embed_dim, name=f'input_proj{idx}')(x) + for idx, x in enumerate(features) + ] + + # Add any additional feature scales beyond the last features from backbone. + x = features[-1] + for i in range(len(features), self.num_feature_levels): + x = InputProj( + embed_dim=self.enc_embed_dim, + kernel_size=3, + stride=2, + padding=1, + name=f'input_proj{i}')( + x) + projs.append(x) + pad_masks.append(mask_for_shape(x.shape, pad_mask=padding_mask)) + pos_embeds.append( + InputPosEmbeddingSine(hidden_dim=self.enc_embed_dim)(pad_masks[-1])) + + # Create shared bbox predictors. + bbox_embeds = [] + for layer_idx in range(self.num_dec_layers): + bbox = BBoxCoordPredictor( + mlp_dim=self.embed_dim, + num_layers=3, + use_sigmoid=False, + name=f'bbox_embed{layer_idx}') + bbox_embeds.append(bbox) + + x, ref_points, dec_init_ref_points = DeformableDETRTransformer( + enc_embed_dim=self.enc_embed_dim, + embed_dim=self.embed_dim, + num_heads=self.num_heads, + num_queries=self.num_queries, + num_enc_layers=self.num_enc_layers, + num_dec_layers=self.num_dec_layers, + ffn_dim=self.transformer_ffn_dim, + num_enc_points=self.num_enc_points, + num_dec_points=self.num_dec_points, + bbox_embeds=bbox_embeds, + name='transformer', + dropout=self.dropout, + compiler_config=self.compiler_config, + dtype=self.dtype)( + inputs=projs, + pad_masks=pad_masks, + pos_embeds=pos_embeds, + train=train) + + assert len(x) == self.num_dec_layers + + # Classes and Box coordinates prediction heads. + pred_logits_by_layer = [] + pred_boxes_by_layer = [] + for layer_idx in range(self.num_dec_layers): + # Logits. + logits = ObjectClassPredictor( + num_classes=self.num_classes, name=f'class_embed{layer_idx}')( + x[layer_idx]) + pred_logits_by_layer.append(logits) + + # Predict box coordinates using intermediate decoder outputs. + if layer_idx == 0: + level_ref = dec_init_ref_points + else: + level_ref = ref_points[layer_idx - 1] + level_ref = inverse_sigmoid(level_ref) + + bbox = bbox_embeds[layer_idx](x[layer_idx]) + if level_ref.shape[-1] == 4: + bbox += level_ref + else: + xy = bbox[..., :2] + level_ref + bbox = jnp.concatenate([xy, bbox[..., 2:]], -1) + bbox = nn.sigmoid(bbox) + pred_boxes_by_layer.append(bbox) + + *prev_layers_out, out = jax.tree_util.tree_map( + lambda logits, boxes: dict(pred_logits=logits, pred_boxes=boxes), + pred_logits_by_layer, pred_boxes_by_layer) + out['aux_outputs'] = prev_layers_out + return out + + +class DeformableDETRModel(base_model.BaseModel): + """DeformableDETR model for object detection task.""" + + def __init__(self, config: Optional[ml_collections.ConfigDict], + dataset_meta_data: Dict[str, Any]): + """Initialize DeformableDETR Detection model. + + Args: + config: Configurations of the model. + dataset_meta_data: Dataset meta data specifies `target_is_onehot`, which + is False by default. The padded objects have label 0. The first + legitimate object has label 1, and so on. + """ + if config is not None: + self.loss_terms_weights = { + 'loss_class': config.class_loss_coef, + 'loss_bbox': config.bbox_loss_coef, + 'loss_giou': config.giou_loss_coef + } + super().__init__(config, dataset_meta_data) + + def build_flax_model(self): + return DeformableDETR( + num_classes=self.config.num_classes, + embed_dim=self.config.embed_dim, + enc_embed_dim=self.config.enc_embed_dim, + num_queries=self.config.num_queries, + num_heads=self.config.num_heads, + num_enc_layers=self.config.num_encoder_layers, + num_dec_layers=self.config.num_decoder_layers, + num_feature_levels=self.config.num_feature_levels, + num_enc_points=self.config.num_enc_points, + num_dec_points=self.config.num_dec_points, + backbone_num_filters=self.config.backbone_num_filters, + backbone_num_layers=self.config.backbone_num_layers, + transformer_ffn_dim=self.config.transformer_ffn_dim, + dropout=self.config.dropout_rate, + compiler_config=self.config.compiler_config, + dtype=jnp.float32) + + def compute_loss_for_layer( + self, + tgt_labels: jnp.ndarray, + pred_logits: jnp.ndarray, + tgt_boxes: jnp.ndarray, + pred_boxes: jnp.ndarray, + indices: Optional[jnp.ndarray] = None) -> ArrayDict: + """Loss and metrics function for single prediction layer.""" + target_is_onehot = self.dataset_meta_data.get('target_is_onehot', False) + if indices is None: + pred_prob = self.logits_to_probs(pred_logits) + cost, n_cols = compute_cost( + tgt_labels=tgt_labels, + out_prob=pred_prob, + tgt_bbox=tgt_boxes, + out_bbox=pred_boxes, + alpha=self.config.focal_loss_alpha, + gamma=self.config.focal_loss_gamma, + class_loss_coef=self.config.class_loss_coef, + bbox_loss_coef=self.config.bbox_loss_coef, + giou_loss_coef=self.config.giou_loss_coef, + target_is_onehot=target_is_onehot) + indices = matchers.hungarian_matcher(cost, n_cols=n_cols) + + losses = {} + # Class loss. + losses.update( + loss_labels( + pred_logits=pred_logits, + tgt_labels=tgt_labels, + indices=indices, + alpha=self.config.focal_loss_alpha, + gamma=self.config.focal_loss_gamma, + class_loss_coef=self.config.class_loss_coef, + target_is_onehot=target_is_onehot)) + # Boxes loss. + losses.update( + loss_boxes( + src_boxes=pred_boxes, + tgt_labels=tgt_labels, + tgt_boxes=tgt_boxes, + indices=indices, + bbox_loss_coef=self.config.bbox_loss_coef, + giou_loss_coef=self.config.giou_loss_coef, + target_is_onehot=target_is_onehot)) + return losses + + def logits_to_probs(self, + logits: jnp.ndarray, + log_p: bool = False) -> jnp.ndarray: + is_sigmoid = self.config.get('sigmoid_loss', True) + # We can overwrite logit normalization explicitly if we wanted to, so we + # can normalize logits using softmax but using sigmoid loss. + is_sigmoid = self.config.get('sigmoid_logit_norm', is_sigmoid) + if not is_sigmoid: + return jax.nn.log_softmax(logits) if log_p else jax.nn.softmax(logits) + else: + return jax.nn.log_sigmoid(logits) if log_p else jax.nn.sigmoid(logits) + + def loss_and_metrics_function( + self, + outputs: ArrayDict, + batch: ArrayDict, + matches: Optional[Sequence[jnp.ndarray]] = None, + model_params: Optional[jnp.ndarray] = None + ) -> Tuple[jnp.ndarray, MetricsDict]: + """Loss and metrics function for DeformableDETR. + + Args: + outputs: Model prediction. The exact fields depend on the losses used. + Please see labels_losses_and_metrics and boxes_losses_and_metrics for + details. + batch: Dict that has 'inputs', 'batch_mask' and, 'label' (ground truth). + batch['label'] is a dict where the keys and values depend on the losses + used. Please see labels_losses_and_metrics and boxes_losses_and_metrics + member methods. + matches: Possibly pass in matches if already done. + model_params: Pass in model params if we are doing L2 regularization. + + Returns: + total_loss: Total loss weighted appropriately. + metrics_dict: Individual loss terms for logging purposes. + """ + tgt_labels, tgt_boxes = _targets_from_batch( + batch, self.config.get('target_is_onehot', False)) + if matches is None: + indices, aux_indices = None, None + else: + indices, *aux_indices = matches + losses = self.compute_loss_for_layer( + pred_logits=outputs['pred_logits'], + tgt_labels=tgt_labels, + pred_boxes=outputs['pred_boxes'], + tgt_boxes=tgt_boxes, + indices=indices) + + if 'aux_outputs' in outputs: + for i, aux_outputs in enumerate(outputs['aux_outputs']): + aux_losses = self.compute_loss_for_layer( + pred_logits=aux_outputs['pred_logits'], + tgt_labels=tgt_labels, + pred_boxes=aux_outputs['pred_boxes'], + tgt_boxes=tgt_boxes, + indices=aux_indices[i] if aux_indices is not None else None) + aux_losses = {f'{k}_aux{i}': v for k, v in aux_losses.items()} + losses.update(aux_losses) + + ntargets = jnp.sum(tgt_labels > 0, axis=1) + norm_type = self.config.get('normalization', 'detr') + logging.info('Normalization type: %s', norm_type) + if norm_type == 'detr': + ntargets = jnp.maximum(ntargets.sum(), 1.) + elif norm_type == 'global': + ntargets = jax.lax.pmean(ntargets.sum(), axis_name='batch') + ntargets = jnp.maximum(ntargets, 1.) + else: + raise ValueError(f'Unknown normalization {norm_type}.') + + # Normalize losses by num_boxes. + losses = jax.tree_util.tree_map(lambda x: x / ntargets, losses) + + if self.config.get('l2_decay_factor', 0) > 0: + l2_loss = model_utils.l2_regularization(model_params) + losses['l2_loss'] = 0.5 * self.config.l2_decay_factor * l2_loss + + # Sum total loss. + losses['total_loss'] = jax.tree_util.tree_reduce(jnp.add, losses, 0) # pytype: disable=wrong-arg-types # numpy-scalars + + # Store metrics for logging. + metrics = {k: (v, 1.) for k, v in losses.items()} + for k, v in metrics.items(): + metrics[k] = model_utils.psum_metric_normalizer(v) # pytype: disable=wrong-arg-types # jax-ndarray + + return losses['total_loss'], metrics # pytype: disable=bad-return-type # jax-ndarray diff --git a/scenic/projects/baselines/deformable_detr/requirements.txt b/scenic/projects/baselines/deformable_detr/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..7004992c8d8426b7f4fabca8e2684e5f84fd7944 --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/requirements.txt @@ -0,0 +1,12 @@ +absl-py +clu +sklearn +flax==0.5.3 +ott-jax +ipdb +jax==0.3.17 +--find-links https://storage.googleapis.com/jax-releases/jax_cuda_releases.html +jaxlib==0.3.15+cuda11.cudnn82 # Make sure CUDA version matches the base image. +numpy +tensorflow +tensorflow-datasets diff --git a/scenic/projects/baselines/deformable_detr/tests/test_attention.py b/scenic/projects/baselines/deformable_detr/tests/test_attention.py new file mode 100644 index 0000000000000000000000000000000000000000..ecb9d9b581a920fc31167f721243f4896e96d5fb --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/tests/test_attention.py @@ -0,0 +1,137 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests attention.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +import jax +from jax import random +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.projects.baselines.deformable_detr.attention import bilinear_interpolate +from scenic.projects.baselines.deformable_detr.attention import MultiScaleDeformableAttention + + +class DeformAttnSamplingFnTest(parameterized.TestCase): + """Tests for deform_attn_sampling_fn.""" + + def test_bilinear_interp_single_pixel(self): + """Tests matches results from pytorch custom CUDA kernel.""" + im = np.ones((1, 1, 1)) + grid = np.array([[[0, 0], [0.5, 0.5], [1, 1]]]) + res = bilinear_interpolate(im, grid, 1, 1) + self.assertSequenceEqual(res.shape, (1, 3, 1)) + res = res.reshape(-1) + + # (0, 0) maps to top-left, (0.5, 0.5) is center, (1, 1) is bottom-right. + exp_res = [0.25, 1, 0.25] + self.assertSequenceAlmostEqual(res, exp_res) + + def test_bilinear_interp_tiny_image(self): + """Tests makes sense on tiny adhoc image.""" + im = np.arange(8).reshape(4, 2, 1) + grid = np.array([[0.25, 0.25], [0.25, 0.5], [0.25, 0.75]]) + res = bilinear_interpolate(im, grid, 2, 4) + self.assertSequenceEqual(res.shape, (3, 1)) + res = res.reshape(-1) + + # (0, 0) maps to top-left, (0.5, 0.5) is center, (1, 1) is bottom-right. + exp_res = [1, 3, 5] + self.assertSequenceAlmostEqual(res, exp_res) + + def test_bilinear_interp_out_of_bounds(self): + """Tests handling of out-of-bounds with zero-padding.""" + im = np.ones((1, 10, 1)).astype(float) + # Center rightmost pixel, edge rightmost pixel, way out of bounds. + grid = np.array([[0.95, 0.5], [1.0, 0.5], [1.5, 0.5]]) + res = bilinear_interpolate(im, grid, 10, 1) + self.assertSequenceEqual(res.shape, (3, 1)) + res = res.reshape(-1).tolist() + self.assertSequenceEqual(res, [1., 0.5, 0.]) + + +class MultiScaleDeformableAttentionTest(parameterized.TestCase): + """Tests for MultiScaleDeformableAttention.""" + + @parameterized.named_parameters( + { + 'testcase_name': '2D Ref Points', + 'ref_dim': 2, + 'shapes': ((10, 10), (2, 2)), + 'embed_dim': 8, + 'num_heads': 4 + }, { + 'testcase_name': '4D Ref Points', + 'ref_dim': 4, + 'shapes': ((10, 10), (2, 2)), + 'embed_dim': 8, + 'num_heads': 4 + }, { + 'testcase_name': 'One level', + 'ref_dim': 2, + 'shapes': ((2, 2),), + 'embed_dim': 8, + 'num_heads': 4 + }, { + 'testcase_name': 'NumHeads == EmbedDim', + 'ref_dim': 2, + 'shapes': ((2, 2),), + 'embed_dim': 8, + 'num_heads': 8 + }) + def test_ms_deformable_attn_output_shape(self, ref_dim, shapes, embed_dim, + num_heads): + """Test MultiScaleDeformableAttention output shape.""" + rng = random.PRNGKey(8877) + # Setup remaining size params. + bs, len_q, num_points, num_levels = 2, 10, 1, len(shapes) + len_v = np.array(shapes).prod(axis=-1).sum() + + # Set inputs. + query = jnp.array(np.random.normal(size=(bs, len_q, embed_dim))) + ref_points = jnp.array( + np.random.normal(size=(bs, len_q, num_levels, ref_dim))) + value = jnp.array(np.random.normal(size=(bs, len_v, embed_dim))) + pad_mask = jnp.zeros(value.shape[:-1], dtype=bool) + + # Compute. + model = MultiScaleDeformableAttention( + embed_dim=embed_dim, + num_levels=num_levels, + num_heads=num_heads, + num_points=num_points, + spatial_shapes=shapes, + compiler_config=ml_collections.ConfigDict( + dict( + train_remat=True, + eval_remat=False, + attention_batching_mode='auto', + )), + dtype=jnp.float32, + ) + + out, init_params = model.init_with_output(rng, query, ref_points, value, + pad_mask, True) + self.assertSequenceEqual(out.shape, (bs, len_q, embed_dim)) + + # Can jit. + run = jax.jit(model.apply, static_argnums=5) + out2 = run(init_params, query, ref_points, value, pad_mask, True) + self.assertSequenceEqual(out2.shape, (bs, len_q, embed_dim)) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/baselines/deformable_detr/tests/test_backbone.py b/scenic/projects/baselines/deformable_detr/tests/test_backbone.py new file mode 100644 index 0000000000000000000000000000000000000000..1cd6cc87b676b3411f32966797895d5758f7680e --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/tests/test_backbone.py @@ -0,0 +1,87 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for backbone.py.""" + +import math + +from absl.testing import absltest +from absl.testing import parameterized +from jax import random +import jax.numpy as jnp +from scenic.projects.baselines.deformable_detr.backbone import DeformableDETRBackbone +from scenic.projects.baselines.deformable_detr.backbone import mask_for_shape + + +class DeformableDETRBackboneTest(parameterized.TestCase): + """Tests for DeformableDETRBackbone.""" + + @parameterized.named_parameters( + { + 'testcase_name': 'Single scale.', + 'num_feature_levels': 1, + 'shape': (2, 32, 64, 3), + }, { + 'testcase_name': 'Multi scale.', + 'num_feature_levels': 3, + 'shape': (2, 32, 64, 3), + }, { + 'testcase_name': 'Odd tiny shape.', + 'num_feature_levels': 3, + 'shape': (10, 9, 4, 3), + }) + def test_backbone_output_shape(self, shape, num_feature_levels): + """Test DeformableDETREncoderLayer output shape.""" + rng = random.PRNGKey(8877) + x = jnp.ones(shape) + + backbone = DeformableDETRBackbone( + embed_dim=4, + num_filters=16, + num_layers=18, + num_feature_levels=num_feature_levels) + (features, pad_masks, pos_embs), _ = backbone.init_with_output(rng, x) + self.assertLen(features, num_feature_levels) + for i in range(num_feature_levels): + fshape = features[i].shape[1:3] + self.assertSequenceEqual(fshape, pad_masks[i].shape[1:3]) + self.assertEqual(math.prod(fshape), pos_embs[i].shape[1]) + if i > 0: + self.assertGreater(features[i].shape[-1], features[i - 1].shape[-1]) + + @parameterized.named_parameters( + { + 'testcase_name': 'Without mask.', + 'shape': (2, 32, 64, 3), + 'pad_mask_shape': None, + }, { + 'testcase_name': 'Down-scale preserve ratio.', + 'shape': (2, 32, 64, 3), + 'pad_mask_shape': (2, 128, 256), + }, { + 'testcase_name': 'Up-scale does not preserve ratio.', + 'shape': (2, 32, 64, 3), + 'pad_mask_shape': (2, 16, 16), + }) + def test_mask_for_shape(self, shape, pad_mask_shape): + """Test DeformableDETREncoderLayer output shape.""" + pad_mask = None + if pad_mask_shape is not None: + pad_mask = jnp.ones(pad_mask_shape, dtype=jnp.bool_) + x = mask_for_shape(shape, pad_mask=pad_mask) + self.assertSequenceEqual(x.shape, shape[:3]) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/baselines/deformable_detr/tests/test_deformable_transformer.py b/scenic/projects/baselines/deformable_detr/tests/test_deformable_transformer.py new file mode 100644 index 0000000000000000000000000000000000000000..a51844ef1be16e2f65f4a45a01b88da80607f1f0 --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/tests/test_deformable_transformer.py @@ -0,0 +1,358 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for deformable_transformer.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +import flax.linen as nn +import jax +from jax import random +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.projects.baselines.deformable_detr.deformable_transformer import BBoxCoordPredictor +from scenic.projects.baselines.deformable_detr.deformable_transformer import DeformableDETRDecoder +from scenic.projects.baselines.deformable_detr.deformable_transformer import DeformableDETRDecoderLayer +from scenic.projects.baselines.deformable_detr.deformable_transformer import DeformableDETREncoder +from scenic.projects.baselines.deformable_detr.deformable_transformer import DeformableDETREncoderLayer +from scenic.projects.baselines.deformable_detr.deformable_transformer import DeformableDETRTransformer +from scenic.projects.baselines.deformable_detr.deformable_transformer import get_encoder_reference_points +from scenic.projects.baselines.deformable_detr.deformable_transformer import get_mask_valid_ratio +from scenic.projects.baselines.deformable_detr.deformable_transformer import inverse_sigmoid + +compiler_config = ml_collections.ConfigDict( + dict( + train_remat=True, + eval_remat=False, + attention_batching_mode='auto', + )) + + +class DeformableDETREncoderLayerTest(parameterized.TestCase): + """Tests for DeformableDETREncoderLayer.""" + + @parameterized.named_parameters( + { + 'testcase_name': 'Multi level', + 'shapes': ((10, 10), (2, 2)), + 'embed_dim': 8, + 'num_heads': 4, + }, { + 'testcase_name': 'Single level', + 'shapes': ((2, 2),), + 'embed_dim': 8, + 'num_heads': 4, + }) + def test_encoder_layer_output_shape(self, shapes, embed_dim, num_heads): + """Test DeformableDETREncoderLayer output shape.""" + rng = random.PRNGKey(8877) + + # Setup size params. + len_qkv = np.array(shapes).prod(axis=-1).sum() + bs, num_levels, ref_dim = 2, len(shapes), 2 + src = jnp.array(np.random.normal(size=(bs, len_qkv, embed_dim))) + ref_points = jnp.array( + np.random.normal(size=(bs, len_qkv, num_levels, ref_dim))) + pad_mask = np.zeros(src.shape[:-1], dtype=bool) + pos_embed = jnp.array(np.random.normal(size=src.shape)) + + # Compute. + model = DeformableDETREncoderLayer( + spatial_shapes=shapes, + embed_dim=embed_dim, + num_heads=num_heads, + num_levels=num_levels, + num_reference_points=1, + dropout=0.1, + ffn_dim=16, + compiler_config=compiler_config, + ) + + out, init_params = model.init_with_output(rng, src, pos_embed, ref_points, + pad_mask, False) + self.assertSequenceEqual(out.shape, (bs, len_qkv, embed_dim)) + + # Can jit. + run = jax.jit(model.apply, static_argnums=5) + out2 = run(init_params, src, pos_embed, ref_points, pad_mask, False) + self.assertSequenceEqual(out2.shape, (bs, len_qkv, embed_dim)) + + +class DeformableDETREncoderTest(parameterized.TestCase): + """Tests for DeformableDETREncoder.""" + + @parameterized.named_parameters( + { + 'testcase_name': 'Multi layer', + 'num_layers': 4, + 'shapes': ((10, 10), (2, 2)), + }, { + 'testcase_name': 'Single layer', + 'num_layers': 1, + 'shapes': ((10, 10), (2, 2)), + }) + def test_encoder_layer_output_shape(self, num_layers, shapes): + """Test DeformableDETREncoderLayer output shape.""" + rng = random.PRNGKey(8877) + + # Setup size params. + embed_dim, num_heads = 8, 2 + len_qkv = np.array(shapes).prod(axis=-1).sum() + bs, num_levels, ref_dim = 2, len(shapes), 2 + src = jnp.array(np.random.normal(size=(bs, len_qkv, embed_dim))) + ref_points = jnp.array( + np.random.normal(size=(bs, len_qkv, num_levels, ref_dim))) + pad_mask = np.zeros(src.shape[:-1], dtype=bool) + pos_embed = jnp.array(np.random.normal(size=src.shape)) + + # Compute. + model = DeformableDETREncoder( + spatial_shapes=shapes, + embed_dim=embed_dim, + num_heads=num_heads, + num_levels=num_levels, + num_layers=num_layers, + num_reference_points=1, + ffn_dim=8, + dropout=0.1, + compiler_config=compiler_config, + ) + + out, init_params = model.init_with_output(rng, src, pos_embed, ref_points, + pad_mask, False) + self.assertSequenceEqual(out.shape, (bs, len_qkv, embed_dim)) + + # Can jit. + run = jax.jit(model.apply, static_argnums=5) + out2 = run(init_params, src, pos_embed, ref_points, pad_mask, False) + self.assertSequenceEqual(out2.shape, (bs, len_qkv, embed_dim)) + + +class DeformableDETRDecoderLayerTest(parameterized.TestCase): + """Tests for DeformableDETRDecoderLayer.""" + + @parameterized.named_parameters( + { + 'testcase_name': 'Multi level', + 'num_heads': 4, + 'shapes': ((10, 10), (2, 2)), + }, { + 'testcase_name': 'Single level', + 'num_heads': 4, + 'shapes': ((2, 2),), + }) + def test_decoder_layer_output_shape(self, shapes, num_heads): + """Test DeformableDETRDecoderLayer output shape.""" + rng = random.PRNGKey(8877) + bs, len_q, embed_dim = 4, 16, 32 + len_v = np.array(shapes).prod(1).sum() + num_levels = len(shapes) + + query = jnp.ones((bs, len_q, embed_dim), dtype=jnp.float32) + query_pos = jnp.ones_like(query) + ref_points = jnp.zeros((bs, len_q, num_levels, 4)) + value = jnp.ones((bs, len_v, 8), dtype=jnp.float32) + pad_mask = jnp.ones((bs, len_v), dtype=bool) + + model = DeformableDETRDecoderLayer( + spatial_shapes=shapes, + embed_dim=embed_dim, + num_heads=num_heads, + num_levels=num_levels, + num_reference_points=1, + ffn_dim=32, + dropout=0.1, + compiler_config=compiler_config, + ) + + params = model.init(rng, query, query_pos, ref_points, value, pad_mask, + False) + apply = jax.jit(model.apply, static_argnums=6) + out = apply(params, query, query_pos, ref_points, value, pad_mask, False) + self.assertEqual(out.shape, (bs, len_q, embed_dim)) + + +class DeformableDETRDecoderTest(parameterized.TestCase): + """Tests for DeformableDETRDecoder.""" + + def test_inverse_sigmoid(self): + x = jnp.array(np.random.normal(size=(2, 4, 8))) + y = inverse_sigmoid(nn.sigmoid(x)) + self.assertSequenceAlmostEqual(x.reshape(-1), y.reshape(-1), delta=1e-5) + + @parameterized.named_parameters( + { + 'testcase_name': 'Multi level, ref as points', + 'ref_dim': 2, + 'shapes': ((10, 10), (2, 2)), + }, { + 'testcase_name': 'Single level, ref as boxes', + 'ref_dim': 4, + 'shapes': ((2, 2),), + }) + def test_decoder_output_shape(self, shapes, ref_dim): + """Test DeformableDETRDecoder output shape.""" + rng = random.PRNGKey(8877) + bs, len_q, embed_dim, num_heads = 3, 16, 32, 4 + num_layers = 5 + len_v = np.array(shapes).prod(1).sum() + num_levels = len(shapes) + + query = jnp.ones((bs, len_q, embed_dim), dtype=jnp.float32) + query_pos = jnp.ones_like(query) + ref_points = jnp.zeros((bs, len_q, ref_dim)) + value = jnp.ones((bs, len_v, 8), dtype=jnp.float32) + pad_mask = jnp.ones((bs, len_v), dtype=bool) + valid_ratios = jnp.ones((bs, num_levels, 2), dtype=jnp.float32) + + bbox_embeds = [ + BBoxCoordPredictor(mlp_dim=embed_dim, num_layers=3, use_sigmoid=False) + for _ in range(num_layers) + ] + + model = DeformableDETRDecoder( + spatial_shapes=shapes, + embed_dim=embed_dim, + num_heads=num_heads, + num_layers=num_layers, + num_levels=num_levels, + num_reference_points=1, + bbox_embeds=bbox_embeds, + ffn_dim=16, + dropout=0.1, + compiler_config=compiler_config, + ) + + dec_input = dict( + query=query, + query_pos=query_pos, + ref_points=ref_points, + value=value, + valid_ratios=valid_ratios, + pad_mask=pad_mask, + train=False) + + params = model.init(rng, **dec_input) + apply = jax.jit(model.apply, static_argnames='train') + out, out_boxes = apply(params, **dec_input) + self.assertEqual(out.shape, (num_layers, bs, len_q, embed_dim)) + self.assertEqual(out_boxes.shape, (num_layers, bs, len_q, 4)) + + +class DeformableDETRTransformerTest(parameterized.TestCase): + """Tests for DeformableDETRTransformer and utilities.""" + + def test_get_mask_valid_ratio(self): + """Test get_mask_valid_ratio.""" + shapes = ((10, 15), (6, 2), (30, 30)) + # Make masks of each shape, where only first pixel is not-padding. + max_d = 30 + + def create_mask(h, w): + pad = ((0, max_d - h), (0, max_d - w)) + m = np.ones((h, w), dtype=bool) + return np.pad(m, pad, 'constant', constant_values=False) + + masks = np.stack([create_mask(h, w) for w, h in shapes], 0) + + out = get_mask_valid_ratio(masks) + exp_ratios = np.array(shapes, dtype=float) / max_d + self.assertSequenceAlmostEqual(exp_ratios.flatten(), out.flatten()) + + def test_get_encoder_reference_points(self): + """Test get_encoder_reference_points.""" + shapes = ((10, 10), (2, 2), (30, 30)) + bs, nlevels = 3, len(shapes) + valid_ratios = jnp.array([1., .5])[None, None, :] * jnp.ones( + (bs, nlevels, 2), dtype=jnp.float32) + ref_points = get_encoder_reference_points(shapes, valid_ratios) + flat_shape = np.array(shapes).prod(1).sum() + + self.assertSequenceEqual(ref_points.shape, (bs, flat_shape, nlevels, 2)) + delta = 0.5 + self.assertSequenceAlmostEqual(ref_points[0, -1, 0], [1. - delta / 30.] * 2) + self.assertSequenceAlmostEqual(ref_points[0, 0, 0], [delta / 10.] * 2) + + @parameterized.named_parameters( + { + 'testcase_name': 'Three decoder layers', + 'num_dec_layers': 3, + 'shapes': ((10, 10), (2, 2)), + }, { + 'testcase_name': 'One decoder layer', + 'shapes': ((10, 10), (2, 2)), + 'num_dec_layers': 1, + }, { + 'testcase_name': 'Single scale, single decoder layer', + 'shapes': ((2, 2),), + 'num_dec_layers': 1, + }) + def test_transformer_output_shape(self, shapes, num_dec_layers): + """Test DeformableDETRTransformer output shape.""" + rng = random.PRNGKey(8877) + + bs, num_heads, num_queries = 2, 3, 5 + embed_dim = 2 * num_heads + inputs = [] + pad_masks = [] + pos_embeds = [] + for h, w in shapes: + inputs.append(jnp.ones((bs, h, w, embed_dim), dtype=jnp.float32)) + pad_masks.append(jnp.ones((bs, h, w), dtype=jnp.bool_)) + pos_embeds.append(jnp.ones((bs, h * w, embed_dim), dtype=jnp.float32)) + + bbox_embeds = [ + BBoxCoordPredictor(mlp_dim=embed_dim, num_layers=3, use_sigmoid=False) + for _ in range(num_dec_layers) + ] + + # Compute. + model = DeformableDETRTransformer( + enc_embed_dim=embed_dim, + embed_dim=embed_dim, + num_queries=num_queries, + num_heads=num_heads, + num_dec_layers=num_dec_layers, + num_enc_layers=2, + ffn_dim=8, + bbox_embeds=bbox_embeds, + num_enc_points=1, + num_dec_points=2, + dropout=0.1, + compiler_config=compiler_config, + ) + + (out, ref_boxes, init_ref_points), init_params = model.init_with_output( + rng, inputs, pad_masks, pos_embeds, False) + + self.assertSequenceEqual(out.shape, + (num_dec_layers, bs, num_queries, embed_dim)) + self.assertSequenceEqual(ref_boxes.shape, + (num_dec_layers, bs, num_queries, 4)) + self.assertSequenceEqual(init_ref_points.shape, (bs, num_queries, 2)) + + # Can jit. + run = jax.jit(model.apply, static_argnums=4) + out, ref_boxes, init_ref_points = run(init_params, inputs, pad_masks, + pos_embeds, False) + self.assertSequenceEqual(out.shape, + (num_dec_layers, bs, num_queries, embed_dim)) + self.assertSequenceEqual(ref_boxes.shape, + (num_dec_layers, bs, num_queries, 4)) + self.assertSequenceEqual(init_ref_points.shape, (bs, num_queries, 2)) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/baselines/deformable_detr/tests/test_evaluate.py b/scenic/projects/baselines/deformable_detr/tests/test_evaluate.py new file mode 100644 index 0000000000000000000000000000000000000000..17bc16f0dbfc8dce580364c47d4b52cb1f10afaf --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/tests/test_evaluate.py @@ -0,0 +1,110 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Test for the DeformableDETR eval functions.""" + +import shutil +import tempfile + +from absl.testing import absltest +from absl.testing import parameterized +from jax import flatten_util +import jax.numpy as jnp +import jax.random +import numpy as np +from scenic.dataset_lib import datasets +from scenic.projects.baselines.deformable_detr import evaluate as ddetr_eval +from scenic.projects.baselines.deformable_detr import input_pipeline_detection # pylint: disable=unused-import +from scenic.projects.baselines.deformable_detr import trainer +from scenic.projects.baselines.deformable_detr.configs import mini_config +from scenic.projects.baselines.deformable_detr.model import DeformableDETRModel +from scenic.projects.baselines.detr.tests import test_util +import tensorflow as tf +import tensorflow_datasets as tfds + + +class DETRTrainerTest(parameterized.TestCase): + """Tests the DeformableDETR trainer on single device setup.""" + + def setUp(self): + super().setUp() + self.test_dir = tempfile.mkdtemp() + # Make sure tf does not allocate GPU memory. + tf.config.experimental.set_visible_devices([], 'GPU') + + self.config = mini_config.get_config() + num_shards = jax.local_device_count() + self.config.batch_size = num_shards * 2 + self.config.eval_batch_size = num_shards * 2 + + self.model_cls = DeformableDETRModel + + with tfds.testing.mock_data( + num_examples=50, + as_dataset_fn=test_util.generate_fake_dataset(num_examples=50)): + dataset_builder = datasets.get_dataset(self.config.dataset_name) + self.dataset = dataset_builder( + batch_size=self.config.batch_size, + eval_batch_size=self.config.eval_batch_size, + num_shards=num_shards, + dtype_str=self.config.data_dtype_str, + dataset_configs=self.config.dataset_configs) + + def tearDown(self): + shutil.rmtree(self.test_dir) + super().tearDown() + + def test_deformable_detr_eval_step(self): + """Test DeformableDETR eval_step directly.""" + rng = jax.random.PRNGKey(0) + np.random.seed(0) + + model, _, train_state, _, _, _ = trainer.get_model_and_tx_and_train_state( + rng=rng, + dataset=self.dataset, + config=self.config, + model_cls=self.model_cls, + workdir='', + input_spec=[(self.dataset.meta_data['input_shape'], + self.dataset.meta_data.get('input_dtype', jnp.float32))]) + + eval_step = ddetr_eval.get_eval_step( + flax_model=model.flax_model, + loss_and_metrics_fn=model.loss_and_metrics_function, + logits_to_probs_fn=model.logits_to_probs, + debug=False) + eval_step_pmapped = jax.pmap( + eval_step, axis_name='batch', donate_argnums=(1,)) + + with tfds.testing.mock_data( + num_examples=50, + as_dataset_fn=test_util.generate_fake_dataset(num_examples=50)): + eval_batch = next(self.dataset.valid_iter) + + init_params, _ = flatten_util.ravel_pytree(train_state.params) + _, predictions, metrics = eval_step_pmapped(train_state, eval_batch) + after_params, _ = flatten_util.ravel_pytree(train_state.params) + self.assertTrue(jnp.array_equal(init_params, after_params)) + + exp_pred_keys = {'pred_logits', 'pred_boxes', 'pred_probs'} + self.assertSameElements(predictions.keys(), exp_pred_keys) + exp_metric_keys = ['loss_bbox', 'loss_class', 'loss_giou', 'total_loss'] + for i in range(self.config.num_decoder_layers - 1): + aux = [f'loss_class_aux{i}', f'loss_bbox_aux{i}', f'loss_giou_aux{i}'] + exp_metric_keys += aux + self.assertSameElements(exp_metric_keys, metrics.keys()) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/baselines/deformable_detr/tests/test_input_pipeline.py b/scenic/projects/baselines/deformable_detr/tests/test_input_pipeline.py new file mode 100644 index 0000000000000000000000000000000000000000..eac81e059d7277a84a899ec3e1a9e4f8e9b3003e --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/tests/test_input_pipeline.py @@ -0,0 +1,92 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for detr input pipeline.""" + +from absl.testing import absltest +from absl.testing import parameterized +import jax +import jax.numpy as jnp +import ml_collections +from scenic.projects.baselines.deformable_detr import input_pipeline_detection +from scenic.projects.baselines.detr.tests import test_util +import tensorflow_datasets as tfds + + +class DeformableDETRInputPipelineTests(parameterized.TestCase): + """Unit tests for detr test_input_pipeline_detection.py.""" + + def test_dataset_builder_coco_deformable_detr_detection(self): + """Tests dataset builder for coco_deformable_detr_detection.""" + num_shards = jax.local_device_count() + batch_size = num_shards * 2 + eval_batch_size = num_shards * 2 + + dataset_config = ml_collections.ConfigDict() + dataset_config.max_size = 1333 + dataset_config.valid_max_size = 1333 + + with tfds.testing.mock_data( + num_examples=50, + as_dataset_fn=test_util.generate_fake_dataset(num_examples=50)): + dataset = input_pipeline_detection.get_dataset( + batch_size=batch_size, + eval_batch_size=eval_batch_size, + dataset_configs=dataset_config, + num_shards=num_shards) + + # A dataset should at least provide `train_iter` and `valid_iter`. + self.assertIsNotNone(dataset.train_iter) + self.assertIsNotNone(dataset.valid_iter) + + train_batch = next(dataset.train_iter) + eval_batch = next(dataset.valid_iter) + + # Check shapes. + # Tests first two shape dimensions. + expected_shape = [num_shards, batch_size // num_shards, 1333, 1333, 3] + expected_shape_eval = [ + num_shards, eval_batch_size // num_shards, 1333, 1333, 3 + ] + self.assertSequenceEqual(train_batch['inputs'].shape, expected_shape) + self.assertSequenceEqual(eval_batch['inputs'].shape, expected_shape_eval) + + self.assertEqual(train_batch['inputs'].shape[:-1], + train_batch['padding_mask'].shape) + self.assertEqual(eval_batch['inputs'].shape[:-1], + eval_batch['padding_mask'].shape) + + def test_dtypes_input_pipeline_detection(self): + """Tests data type of dataset coco_deformable_detr_detection.""" + + with tfds.testing.mock_data( + num_examples=50, + as_dataset_fn=test_util.generate_fake_dataset(num_examples=50)): + num_shards = jax.local_device_count() + for dt in ['float32']: + dataset = input_pipeline_detection.get_dataset( + batch_size=num_shards * 2, + eval_batch_size=num_shards * 2, + num_shards=num_shards, + dtype_str=dt) + + train_batch = next(dataset.train_iter) + eval_batch = next(dataset.valid_iter) + + # Check dtype. + self.assertEqual(train_batch['inputs'].dtype, getattr(jnp, dt)) + self.assertEqual(eval_batch['inputs'].dtype, getattr(jnp, dt)) + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/baselines/deformable_detr/tests/test_model.py b/scenic/projects/baselines/deformable_detr/tests/test_model.py new file mode 100644 index 0000000000000000000000000000000000000000..0b07ec3c5dec03e9e798c10a5b06778c073fff26 --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/tests/test_model.py @@ -0,0 +1,203 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for model.py.""" + +import functools + +from absl.testing import absltest +from absl.testing import parameterized +from flax import jax_utils +import jax +from jax import random +import jax.numpy as jnp +import numpy as np +from scenic.projects.baselines.deformable_detr.configs import mini_config +from scenic.projects.baselines.deformable_detr.model import compute_cost +from scenic.projects.baselines.deformable_detr.model import DeformableDETRModel + + +def sample_cxcywh_bbox(key, batch_shape): + """Samples a bounding box in the [cx, cy, w, h] in [0, 1] range format.""" + frac = 0.8 + sample = jax.random.uniform(key, shape=(*batch_shape, 4)) * frac + cx, cy, w, h = jnp.split(sample, indices_or_sections=4, axis=-1) + # Make sure the bounding box doesn't cross the right and top image borders + w = jnp.where(cx + w / 2. >= 1., frac * 2. * (1. - cx), w) + h = jnp.where(cy + h / 2. >= 1., frac * 2. * (1. - cy), h) + # Make sure the bounding box doesn't cross the left and bottom image borders + w = jnp.where(cx - w / 2. <= 0., frac * 2. * cx, w) + h = jnp.where(cy - h / 2. <= 0., frac * 2. * cy, h) + + bbox = jnp.concatenate([cx, cy, w, h], axis=-1) + return bbox + + +class DeformableDETRModelLossTest(parameterized.TestCase): + """Test DeformableDETRModel loss test.""" + + def setUp(self): + super().setUp() + + self.num_classes = 5 + self.input_shape = (3, 128, 128, 3) + self.num_decoder_layers = 2 + config = mini_config.get_config() + + # Create and initialize the model. + model_cls = DeformableDETRModel + self.model = model_cls( + config=config, + dataset_meta_data={ + 'num_classes': self.num_classes, + 'target_is_onehot': False, + }) + + rng = random.PRNGKey(0) + initial_params = self.model.flax_model.init( + rng, jnp.zeros(self.input_shape, jnp.float32), train=False) + flax_model = functools.partial(self.model.flax_model.apply, initial_params) + + # A fake batch with 3 examples. + self.batch = { + 'inputs': + jnp.array(np.random.normal(size=self.input_shape) + ).astype(jnp.float32), + 'padding_mask': + jnp.array(np.random.normal(size=self.input_shape[:-1]) + ).astype(jnp.float32), + 'label': { + 'labels': + jnp.array( + np.random.randint( + self.num_classes, + size=(3, self.model.config.num_queries))), + 'boxes': + jnp.array( + np.random.uniform( + size=(3, self.model.config.num_queries, 4), + low=0.0, + high=1.0), + dtype=jnp.float32), + } + } + self.outputs = flax_model( + self.batch['inputs'], + padding_mask=self.batch['padding_mask'], + train=False) + + seq = np.arange(self.model.config.num_queries, dtype=np.int32) + seq_rev = seq[::-1] + seq_21 = np.concatenate([ + seq[self.model.config.num_queries // 2:], + seq[:self.model.config.num_queries // 2] + ]) + self.indices = jnp.array([(seq, seq_rev), (seq_rev, seq), (seq, seq_21)]) + + def test_loss_function(self): + """Test loss_function by checking its output's dictionary format.""" + + # Test loss function in the pmapped setup. + loss_function_pmapped = jax.pmap( + self.model.loss_and_metrics_function, axis_name='batch') + + matches = jax_utils.replicate( + # Fake matching for the final output + 2 aux outputs. + [self.indices] * 3) + outputs_replicated, batch_replicated = (jax_utils.replicate(self.outputs), + jax_utils.replicate(self.batch)) + total_loss, metrics_dict = loss_function_pmapped( + outputs_replicated, batch_replicated, matches=matches) + + total_loss, metrics_dict = (jax_utils.unreplicate(total_loss), + jax_utils.unreplicate(metrics_dict)) + + # Collect what keys we expect to find in the metrics_dict. + expected_metrics_keys = [ + 'loss_class', 'loss_bbox', 'loss_giou', 'total_loss' + ] + for i in range(self.num_decoder_layers - 1): + expected_metrics_keys += [ + f'loss_class_aux{i}', f'loss_bbox_aux{i}', f'loss_giou_aux{i}' + ] + self.assertSameElements(expected_metrics_keys, metrics_dict.keys()) + + # Since weight decay is not used, the following must hold. + object_detection_loss = 0 + for k in metrics_dict.keys(): + b = k.split('_aux')[0] + # If this loss going to be included in the total loss. + if b in self.model.loss_terms_weights.keys(): + # Get the normalizer for this loss. + object_detection_loss += ( + # Already scaled loss term / loss term normalizer. + metrics_dict[k][0] / metrics_dict[k][1]) + self.assertAlmostEqual(total_loss, object_detection_loss, places=3) + + +class DeformableDETRModelCostTest(parameterized.TestCase): + """Test DeformableDETRModel cost test.""" + + def test_compute_cost(self): + """Test compute_cost.""" + + bs = 3 + num_classes = 7 + num_preds = 5 + # Includes padding. + max_targets = 10 + + key = jax.random.PRNGKey(0) + + # Create fake predictions and targets + key, subkey = jax.random.split(key) + # set probabilities for class 0 higher than others + p_logits = jnp.ones(num_classes).at[0].set(5.) + tgt_labels = jax.random.choice( + subkey, + np.arange(1, num_classes + 1), + shape=(bs, max_targets), + replace=True, + p=jax.nn.softmax(p_logits)) + + # Set padding for targets by index of batch + for i in range(1, bs + 1): + tgt_labels = tgt_labels.at[i, -i:].set(0) + + key, subkey = jax.random.split(key) + pred_logits = jax.random.normal(subkey, shape=(bs, num_preds, num_classes)) + pred_probs = jax.nn.sigmoid(pred_logits) + + key, subkey = jax.random.split(key) + pred_bbox = sample_cxcywh_bbox(subkey, batch_shape=(bs, num_preds)) + + key, subkey = jax.random.split(key) + tgt_bbox = sample_cxcywh_bbox(subkey, batch_shape=(bs, max_targets)) + + cost, n_cols = compute_cost( + tgt_bbox=tgt_bbox, + tgt_labels=tgt_labels, + out_bbox=pred_bbox, + out_prob=pred_probs, + bbox_loss_coef=1., + giou_loss_coef=1., + class_loss_coef=1., + target_is_onehot=False) + self.assertSequenceEqual(cost.shape, (bs, num_preds, max_targets)) + exp_n_cols = range(max_targets, max_targets - bs, -1) + self.assertSequenceEqual(n_cols.tolist(), exp_n_cols) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/baselines/deformable_detr/tests/test_trainer.py b/scenic/projects/baselines/deformable_detr/tests/test_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..993244a9627198b26870c9a390a1c31bb9ddd2ba --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/tests/test_trainer.py @@ -0,0 +1,162 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Test for the DeformableDETR train script.""" + +import shutil +import tempfile + +from absl.testing import absltest +from absl.testing import parameterized +from clu import metric_writers +from jax import flatten_util +import jax.numpy as jnp +import jax.random +import numpy as np +from scenic.dataset_lib import datasets +from scenic.projects.baselines.deformable_detr import trainer +from scenic.projects.baselines.deformable_detr.configs import mini_config +from scenic.projects.baselines.deformable_detr.model import DeformableDETRModel +from scenic.projects.baselines.detr.tests import test_util +import tensorflow as tf +import tensorflow_datasets as tfds + + +class DETRTrainerTest(parameterized.TestCase): + """Tests the DeformableDETR trainer on single device setup.""" + + def setUp(self): + super().setUp() + self.test_dir = tempfile.mkdtemp() + # Make sure tf does not allocate GPU memory. + tf.config.experimental.set_visible_devices([], 'GPU') + + self.config = mini_config.get_config() + num_shards = jax.local_device_count() + self.config.batch_size = num_shards * 2 + self.config.eval_batch_size = num_shards * 2 + + self.model_cls = DeformableDETRModel + + with tfds.testing.mock_data( + num_examples=50, + as_dataset_fn=test_util.generate_fake_dataset(num_examples=50)): + dataset_builder = datasets.get_dataset(self.config.dataset_name) + self.dataset = dataset_builder( + batch_size=self.config.batch_size, + eval_batch_size=self.config.eval_batch_size, + num_shards=num_shards, + dtype_str=self.config.data_dtype_str, + dataset_configs=self.config.dataset_configs) + + def tearDown(self): + shutil.rmtree(self.test_dir) + super().tearDown() + + def test_deformable_detr_trainer(self): + """Test training for a few steps of a mini DETR on a mini COCO dataset.""" + + rng = jax.random.PRNGKey(0) + np.random.seed(0) + + with tfds.testing.mock_data( + num_examples=50, + as_dataset_fn=test_util.generate_fake_dataset(num_examples=50)): + _, train_summary, eval_summary = trainer.train_and_evaluate( + rng=rng, + config=self.config, + model_cls=self.model_cls, + dataset=self.dataset, + workdir=self.test_dir, + writer=metric_writers.LoggingWriter()) + + expected_summary_keys = [ + 'loss_bbox', + 'loss_class', + 'loss_giou', + 'total_loss', + 'object_detection_loss', + ] + for i in range(self.config.num_decoder_layers - 1): + expected_summary_keys += [ + f'loss_class_aux{i}', f'loss_bbox_aux{i}', f'loss_giou_aux{i}' + ] + expected_global_summary_keys = [ + 'AP', 'AP_50', 'AP_75', 'AP_small', 'AP_medium', 'AP_large', 'AR_max_1', + 'AR_max_10', 'AR_max_100', 'AR_small', 'AR_medium', 'AR_large' + ] + + # Check summaries. + self.assertSameElements(expected_summary_keys, train_summary.keys()) + self.assertSameElements( + expected_summary_keys + expected_global_summary_keys, + eval_summary.keys()) + + @parameterized.named_parameters(('update_batch_stats', True), + ('freeze_batch_stats', False)) + def test_deformable_detr_train_step(self, update_batch_stats): + """Test DeformableDETR train_step directly.""" + rng = jax.random.PRNGKey(0) + np.random.seed(0) + + model, tx, train_state, _, _, _ = trainer.get_model_and_tx_and_train_state( + rng=rng, + dataset=self.dataset, + config=self.config, + model_cls=self.model_cls, + workdir='', + input_spec=[(self.dataset.meta_data['input_shape'], + self.dataset.meta_data.get('input_dtype', jnp.float32))]) + + train_step = trainer.get_train_step( + apply_fn=model.flax_model.apply, + loss_and_metrics_fn=model.loss_and_metrics_function, + tx=tx, + update_batch_stats=update_batch_stats, + debug=False) + + train_step_pmapped = jax.pmap( + train_step, + axis_name='batch', + donate_argnums=(0,), + ) + + with tfds.testing.mock_data( + num_examples=50, + as_dataset_fn=test_util.generate_fake_dataset(num_examples=50)): + train_batch = next(self.dataset.train_iter) + + init_params, _ = flatten_util.ravel_pytree(train_state.params) + init_model_state, _ = flatten_util.ravel_pytree(train_state.model_state) + + train_state, _, _ = train_step_pmapped(train_state, train_batch) + + self.assertFalse(jnp.array_equal(init_params, train_state.params)) + if update_batch_stats: + # make sure that state were updated in the train step + self.assertFalse( + jnp.array_equal(init_model_state, + flatten_util.ravel_pytree( + train_state.model_state)[0])) + + else: + # make sure the state were stayed frozen in the train step + self.assertTrue( + jnp.array_equal(init_model_state, + flatten_util.ravel_pytree( + train_state.model_state)[0])) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/baselines/deformable_detr/trainer.py b/scenic/projects/baselines/deformable_detr/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..7002b413748daee9276de5ab9e1b078a199613f0 --- /dev/null +++ b/scenic/projects/baselines/deformable_detr/trainer.py @@ -0,0 +1,638 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training utilities for DeformableDETR.""" + +from collections.abc import Mapping +from concurrent import futures +import functools +import time +from typing import Any, Callable, Dict, Sequence, Tuple, Type, Union + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +import flax +from flax import jax_utils +from flax.training.checkpoints import restore_checkpoint as flax_restore_checkpoint +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils + + +from scenic.projects.baselines.deformable_detr import coco_eval +from scenic.projects.baselines.deformable_detr import evaluate as ddetr_eval +from scenic.projects.baselines.deformable_detr.model import DeformableDETRModel +from scenic.projects.baselines.detr import train_utils as detr_train_utils +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils +from scenic.train_lib.train_utils import PyTree +from scenic.train_lib.train_utils import TrainState + +RngType = Union[jnp.ndarray, Mapping] +InputSpec = Sequence[Union[Tuple[Tuple[int, ...], jnp.dtype], Tuple[int, ...], + None]] + + +def get_optimizer(config: ml_collections.ConfigDict, + params: PyTree) -> optax.GradientTransformation: + """Makes a Optax GradientTransformation for DeformableDETR.""" + + # If we freeze the batch statistics for the backbone, the affine + # transformation of a bn layer can be absorbed by its previous linear + # transformation and therefore there is no need to train on the affine weights + # of bn layers. + def bn_and_freeze_batch_stats(path): + if not config.freeze_backbone_batch_stats: + return False + names = ['/bn1/', '/bn2/', '/bn3/', '/init_bn/', '/proj_bn/'] + for s in names: + if s in path: + return True + return False + + def early_and_load_pretrain(path): + if not config.load_pretrained_backbone: + return False + names = [f'/ResidualBlock_{i}/' for i in range(3) + ] + ['/init_bn/', '/stem_conv/'] + for s in names: + if s in path: + return True + return False + + backbone_traversal = flax.traverse_util.ModelParamTraversal( + lambda path, _: 'backbone' in path) + ref_embed_traversal = flax.traverse_util.ModelParamTraversal( + lambda path, _: 'ref_embed' in path or 'sampling_offsets' in path) + bn_traversal = flax.traverse_util.ModelParamTraversal( + lambda path, _: bn_and_freeze_batch_stats(path)) + early_layer_traversal = flax.traverse_util.ModelParamTraversal( + lambda path, _: early_and_load_pretrain(path)) + + all_false = jax.tree_util.tree_map(lambda _: False, params) + + def get_mask(traversal): + return traversal.update(lambda _: True, all_false) + + backbone_mask = get_mask(backbone_traversal) + ref_embed_mask = get_mask(ref_embed_traversal) + bn_mask = get_mask(bn_traversal) + early_layer_mask = get_mask(early_layer_traversal) + + oc = config.optimizer_config + + tx = optax.chain( + optax.clip_by_global_norm(oc.max_grad_norm), + optax.adamw( + learning_rate=optax.piecewise_constant_schedule( + oc.base_learning_rate, + {oc.learning_rate_decay_event: oc.learning_rate_decay_rate}), + b1=oc.beta1, + b2=oc.beta2, + weight_decay=oc.weight_decay), + optax.masked(optax.scale(oc.learning_rate_reduction), backbone_mask), + optax.masked(optax.scale(oc.learning_rate_reduction), ref_embed_mask), + optax.masked(optax.scale(0), bn_mask), + optax.masked(optax.scale(0), early_layer_mask)) + + return tx + + +def get_train_step(apply_fn: Callable[..., Tuple[PyTree, PyTree]], + loss_and_metrics_fn: Callable[..., Tuple[PyTree, PyTree]], + tx: optax.GradientTransformation, + update_batch_stats: bool = False, + debug: bool = False): + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) argument is + donated to the computation. + + Args: + apply_fn: Model application function. + loss_and_metrics_fn: Function to calculate loss and metrics. + tx: An optax.GradientTransformation. + update_batch_stats: Whether to update batch statistics in BatchNorm + during training or freeze it. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Train step function that takes a train_state and batch and returns + new_train_state, metrics, predictions. + + """ + + def train_step(train_state, batch): + + def loss_fn(params): + new_rng, rng = jax.random.split(train_state.rng) + # Bind the rng to the host/device we are on. + model_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + variables = {'params': params, **train_state.model_state} + predictions, mutated_variables = apply_fn( + variables, + batch['inputs'], + padding_mask=batch['padding_mask'], + update_batch_stats=update_batch_stats, + mutable=train_state.model_state.keys(), + train=True, + rngs={'dropout': model_rng}, + debug=debug) + loss, metrics = loss_and_metrics_fn( + predictions, batch, model_params=variables['params']) + return loss, (mutated_variables, metrics, predictions, new_rng) + + new_global_step = train_state.global_step + 1 + (_, (new_model_state, metrics, predictions, + new_rng)), grads = jax.value_and_grad( + loss_fn, has_aux=True)( + train_state.params) + + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grads = jax.lax.pmean(grads, axis_name='batch') + + updates, new_opt_state = tx.update( + grads, train_state.opt_state, params=train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + train_state = train_state.replace( + global_step=new_global_step, + params=new_params, + opt_state=new_opt_state, + model_state=new_model_state, + rng=new_rng) + return train_state, metrics, predictions + + return train_step + + +def _handle_legacy_format(train_state): + """Handle legacy format. + + To remove this function, make sure all checkpoints that are to be loaded are + in the non-legacy format: + * checkpoint['params'] is a PyTree of parameters; + * checkpoint['model_state']['batch_stats'] is a PyTree of batch statistics. + + Args: + train_state: A train state. + """ + if 'params' not in train_state: + train_state['params'] = train_state.pop('optimizer').pop( + 'target') + if 'param' in train_state['params']: + train_state['params'] = train_state['params']['param'] + if 'model_state' in train_state and 'batch_stats' not in train_state[ + 'model_state']: + bad_restored_batch_stats = train_state.pop('model_state') + good_restored_batch_stats = {} + for key, value in bad_restored_batch_stats.items(): + current = good_restored_batch_stats + subkeys = [subkey for subkey in key.split('/') if subkey] + for subkey in subkeys[:-1]: + if subkey not in current: + new_current = {} + current[subkey] = new_current + current = new_current + else: + current = current[subkey] + current[subkeys[-1]] = value + train_state['model_state'] = {} + train_state['model_state']['batch_stats'] = good_restored_batch_stats + + +def get_model_and_tx_and_train_state(rng: RngType, + dataset: dataset_utils.Dataset, + config: ml_collections.ConfigDict, + model_cls: Type[DeformableDETRModel], + workdir: str, input_spec: InputSpec): + """Create model and train state.""" + # Build the loss_and_metrics_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=input_spec, + config=config, + rngs=init_rng) + + tx = get_optimizer(config, params) + + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0] + opt_state = jax.jit(tx.init, backend='cpu')(params) + + rng, train_rng = jax.random.split(rng) + train_state = TrainState( + global_step=0, + params=params, + opt_state=opt_state, + model_state=model_state, + rng=train_rng) + + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + + init_checkpoint_path = config.init_from.get('checkpoint_path') + logging.info('Init from checkpoint: %s', init_checkpoint_path) + restored_train_state = flax_restore_checkpoint( + init_checkpoint_path, target=None) + _handle_legacy_format(restored_train_state) + + train_state = pretrain_utils.init_from_pretrain_state( + train_state, + restored_train_state, + ckpt_prefix_path=config.init_from.get('ckpt_prefix_path'), + model_prefix_path=config.init_from.get('model_prefix_path'), + name_mapping=config.init_from.get('name_mapping'), + skip_regex=config.init_from.get('skip_regex')) + # Free unecessary memory. + del restored_train_state + elif start_step == 0 and config.get('load_pretrained_backbone', False): + # Only load pretrained backbone if we are at the beginning of training. + bb_checkpoint_path = config.pretrained_backbone_configs.get( + 'checkpoint_path') + bb_train_state = flax_restore_checkpoint(bb_checkpoint_path, target=None) + _handle_legacy_format(bb_train_state) + train_state = pretrain_utils.init_from_pretrain_state( + train_state, bb_train_state) + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + return model, tx, train_state, num_trainable_params, gflops, start_step + + +def train_and_evaluate( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: JAX PRNGKey. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + lead_host = jax.process_index() == 0 + + # The pool is used to perform misc operations such as logging in async way. + pool = futures.ThreadPoolExecutor(max_workers=2) + + input_spec = [(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))] + (model, tx, train_state, num_trainable_params, gflops, + start_step) = get_model_and_tx_and_train_state( + rng, dataset, config, model_cls, workdir, input_spec=input_spec) + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + update_batch_stats = not config.get('freeze_backbone_batch_stats', False) + if not update_batch_stats: + if not config.load_pretrained_backbone: + raise ValueError('Freezing the batch statistics of the resnet backbone ' + 'is only possible when loading a pretrained resnet ' + 'backbone is enabled.') + + train_step = get_train_step( + apply_fn=model.flax_model.apply, + loss_and_metrics_fn=model.loss_and_metrics_function, + tx=tx, + update_batch_stats=update_batch_stats, + debug=config.debug_train) + + train_step_pmapped = jax.pmap( + train_step, axis_name='batch', donate_argnums=(0,)) + + ############### EVALUATION CODE ################# + eval_step = ddetr_eval.get_eval_step( + flax_model=model.flax_model, + loss_and_metrics_fn=model.loss_and_metrics_function, + logits_to_probs_fn=model.logits_to_probs, + debug=config.debug_eval) + eval_step_pmapped = jax.pmap(eval_step, axis_name='batch') + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + metrics_normalizer_fn = functools.partial( + detr_train_utils.normalize_metrics_summary, + object_detection_loss_keys=model.loss_terms_weights.keys()) + + global_metrics_evaluator = None # Only run eval on the lead_host node. + if lead_host: + global_metrics_evaluator = coco_eval.DeformableDetrGlobalEvaluator( + config.dataset_name) + + ################################################### + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + log_summary_steps = config.get('log_summary_steps', 25) + log_large_summary_steps = config.get('log_large_summary_steps', 0) + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, + writer=writer, + every_secs=None, + every_steps=config.get('report_progress_step', log_summary_steps), + ) + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + (last_eval_step, last_eval_metrics), last_eval_future = (None, None), None + + # Do eval before first train step. + if config.get('do_eval_first', False): + # Sync model state across replicas (in case of having model state, e.g. + # batch statistic when using batch norm). + start_time = time.time() + with report_progress.timed('eval'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + (last_eval_step, + last_eval_metrics), last_eval_future = ddetr_eval.run_eval( + global_metrics_evaluator, dataset, train_state, eval_step_pmapped, + pool, 0, steps_per_eval) + duration = time.time() - start_time + logging.info('Done with async evaluation: %.4f sec.', duration) + writer.flush() + + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, train_predictions = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(train_utils.unreplicate_and_get(t_metrics)) + + for h in hooks: + h(step) + + if (log_large_summary_steps and step % log_large_summary_steps == 0 and + lead_host): + ############### LOG EXPENSIVE TRAIN SUMMARY ############### + # Visualizes detections using side-by-side gt-pred images. + # TODO(mjlm): Investigate this error when including `batch_mask`: + # RuntimeError: Invalid argument: from_python argument must be an array. + to_cpu = lambda x: jax.device_get(dataset_utils.unshard(x)) + del train_batch['batch_mask'] + train_pred_cpu = to_cpu(train_predictions) + train_batch_cpu = to_cpu(train_batch) + viz = detr_train_utils.draw_boxes_side_by_side( + train_pred_cpu, + train_batch_cpu, + label_map=dataset.meta_data['label_to_name']) + viz_detections = { + f'sidebyside_{i}/detection': viz_[None, ...] + for i, viz_ in enumerate(viz) + } + writer.write_images(step, viz_detections) + + del train_predictions + + if (step % log_summary_steps == 0) or (step == total_steps): + ############### LOG TRAIN SUMMARY ############### + + # Write summary: + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=train_metrics, + extra_training_logs=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, extra_training_logs), + writer=writer, + metrics_normalizer_fn=metrics_normalizer_fn) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + ################################################# + + if (step % log_eval_steps == 0) or (step == total_steps): + # First wait for the previous eval to finish & write summary. + if last_eval_future is not None: + eval_summary = train_utils.log_eval_summary( + step=last_eval_step, + eval_metrics=last_eval_metrics, + extra_eval_summary=last_eval_future.result(), + writer=writer, + metrics_normalizer_fn=metrics_normalizer_fn) + last_eval_future = None + + # Sync model state across replicas (in case of having model state, e.g. + # batch statistic when using batch norm). + start_time = time.time() + with report_progress.timed('eval'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + (last_eval_step, + last_eval_metrics), last_eval_future = ddetr_eval.run_eval( + global_metrics_evaluator, dataset, train_state, eval_step_pmapped, + pool, step, steps_per_eval) + duration = time.time() - start_time + logging.info('Done with async evaluation: %.4f sec.', duration) + writer.flush() + + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)) and config.checkpoint: + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + train_utils.save_checkpoint(workdir, + jax_utils.unreplicate(train_state)) + + # Wait until computations are done before exiting. + pool.shutdown() + if last_eval_future is not None: + eval_summary = train_utils.log_eval_summary( + step=last_eval_step, + eval_metrics=last_eval_metrics, + extra_eval_summary=last_eval_future.result(), + writer=writer, + metrics_normalizer_fn=metrics_normalizer_fn) + train_utils.barrier() + return train_state, train_summary, eval_summary + + +def evaluate( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Dict[str, Any]: + """Eval only loop. + + Given the model class and dataset, it prepares the items needed to run the + evaluation without training. + + Args: + rng: JAX PRNGKey. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + Eval summary. + """ + lead_host = jax.process_index() == 0 + + # The pool is used to perform misc operations such as logging in async way. + pool = futures.ThreadPoolExecutor(max_workers=2) + + input_spec = [(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))] + (model, _, train_state, num_trainable_params, gflops, + _) = get_model_and_tx_and_train_state( + rng, dataset, config, model_cls, workdir, input_spec=input_spec) + + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + report_progress = periodic_actions.ReportProgress( + writer=writer, + every_secs=None, + every_steps=config.get('report_progress_step', 10), + ) + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + eval_step = ddetr_eval.get_eval_step( + flax_model=model.flax_model, + loss_and_metrics_fn=model.loss_and_metrics_function, + logits_to_probs_fn=model.logits_to_probs, + debug=config.debug_eval) + eval_step_pmapped = jax.pmap( + eval_step, axis_name='batch', donate_argnums=(1,)) + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + logging.info('steps_per_eval: %s', steps_per_eval) + + metrics_normalizer_fn = functools.partial( + detr_train_utils.normalize_metrics_summary, + object_detection_loss_keys=model.loss_terms_weights.keys()) + + global_metrics_evaluator = None # Only run eval on the lead_host node. + if lead_host: + global_metrics_evaluator = coco_eval.DeformableDetrGlobalEvaluator( + config.dataset_name) + + # Sync model state across replicas (in case of having model state, e.g. + # batch statistic when using batch norm). + start_time = time.time() + with report_progress.timed('eval'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + (last_eval_step, last_eval_metrics), last_eval_future = ddetr_eval.run_eval( + global_metrics_evaluator=global_metrics_evaluator, + dataset=dataset, + train_state=train_state, + eval_step_pmapped=eval_step_pmapped, + pool=pool, + step=0, + steps_per_eval=steps_per_eval) + duration = time.time() - start_time + logging.info('Done with async evaluation: %.4f sec.', duration) + writer.flush() + + # Wait until computations are done before exiting. + pool.shutdown() + + assert last_eval_future is not None + eval_summary = train_utils.log_eval_summary( + step=last_eval_step, + eval_metrics=last_eval_metrics, + extra_eval_summary=last_eval_future.result(), + writer=writer, + metrics_normalizer_fn=metrics_normalizer_fn) + train_utils.barrier() + + logging.info('Eval Summary: %s.', eval_summary) + return eval_summary diff --git a/scenic/projects/baselines/detr/README.md b/scenic/projects/baselines/detr/README.md new file mode 100644 index 0000000000000000000000000000000000000000..44dfed86ea331ae15a45b3901c73f589e6a95f9d --- /dev/null +++ b/scenic/projects/baselines/detr/README.md @@ -0,0 +1,48 @@ +## DEtection TRansformer (DETR) +This directory contains the implementation of DETR for [end-to-end object detection with transformers](https://arxiv.org/abs/2005.12872). +The code here uses JAX and Flax and follows the [official implementation of DETR in PyTorch](https://github.com/facebookresearch/detr). + +### Additional Requirements: +The following command will install the required packages for DETR. +```shell +$ pip install -r scenic/projects/baselines/detr/requirements.txt +``` + +### Training DETR +In order to train DETR on COCO object detection, you can use the +`detr_config.py` in the [configs directory](configs): + +```shell +$ python scenic/projects/baselines/detr/main.py -- \ + --config=scenic/projects/baselines/detr/configs/detr_config.py \ + --workdir=./ +``` + +In the config, you have to set the path to the pre-trained ResNet50 backbone +that you can download from [here](https://storage.googleapis.com/scenic-bucket/baselines/ResNet50_ImageNet1k). +(More information on other potential pre-trained backbones can be found [here](../baselines#resnet).) + + +### Checkpoint +We also share checkpoint of a DETR model trained on COCO dataset: + +| Model | Task | Dataset | Average Precision | Checkpoint | +|-------|:-:|:-:|:-:|:-:| +| DETR | Object Detection | COCO | 0.4038 | [Link](https://storage.googleapis.com/scenic-bucket/baselines/DETR_COCO_detection) | + + +### Alternative matcher +DETR uses bipartite matching loss to find a bipartite matching +between ground truth and prediction. This is required for end-to-end training to +enforce permutation-invariance, and guarantee that each target element +has a unique match. By default, the Hungarian algorithm is used for the matching, +however, there are alternative algorithms, like Sinkhorn that are more +accelerator friendly. We have used [OTT](https://github.com/google-research/ott) +and added [a config file with Sinkhorn matching](configs/detr_sinkhorn_config.py) +that achieves similar performance, with relatively higher speed than Hungarian. + + +### Acknowledgment +We would like to thank Dirk Weissenborn, Aravindh Mahendran, Sunayana Rane, +Rianne van den Berg, Olivier Teboul, Marco Cuturi for their amazing +help on implementing DETR in Scenic. diff --git a/scenic/projects/baselines/detr/__init__.py b/scenic/projects/baselines/detr/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/detr/configs/__init__.py b/scenic/projects/baselines/detr/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/detr/configs/detr_config.py b/scenic/projects/baselines/detr/configs/detr_config.py new file mode 100644 index 0000000000000000000000000000000000000000..7fc27ea61d576a94dbc97f248093941521fd9b35 --- /dev/null +++ b/scenic/projects/baselines/detr/configs/detr_config.py @@ -0,0 +1,119 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for COCO detection using DETR. + +""" +# pylint: enable=line-too-long + +import copy +import ml_collections +_COCO_TRAIN_SIZE = 118287 +NUM_EPOCHS = 300 + + +def get_config(): + """Returns the configuration for COCO detection using DETR.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'coco_detection_detr' + + # Dataset. + config.dataset_name = 'coco_detr_detection' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 10_000 + config.dataset_configs.max_boxes = 99 + config.data_dtype_str = 'float32' + + # Model. + config.model_dtype_str = 'float32' + config.model_name = 'detr' + config.matcher = 'hungarian_cover_tpu' + config.hidden_dim = 256 + config.num_queries = 100 + config.query_emb_size = None # Same as hidden_size. + config.transformer_num_heads = 8 + config.transformer_num_encoder_layers = 6 + config.transformer_num_decoder_layers = 6 + config.transformer_qkv_dim = 256 + config.transformer_mlp_dim = 2048 + config.transformer_normalize_before = False + config.backbone_num_filters = 64 + config.backbone_num_layers = 50 + config.dropout_rate = 0. + config.attention_dropout_rate = 0.1 + + # Loss. + config.aux_loss = True + config.bbox_loss_coef = 5.0 + config.giou_loss_coef = 2.0 + config.class_loss_coef = 1.0 + config.eos_coef = 0.1 + + # Training. + config.trainer_name = 'detr_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.weight_decay = 1e-4 + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.max_grad_norm = 0.1 + config.num_training_epochs = NUM_EPOCHS + config.batch_size = 64 + config.rng_seed = 0 + + decay_events = {500: 400} + + # Learning rate. + steps_per_epoch = _COCO_TRAIN_SIZE // config.batch_size + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*piecewise_constant' + config.lr_configs.decay_events = [ + decay_events.get(NUM_EPOCHS, NUM_EPOCHS * 2 // 3) * steps_per_epoch, + ] + # Note: this is absolute (not relative): + config.lr_configs.decay_factors = [.1] + config.lr_configs.base_learning_rate = 1e-4 + + # Backbone training configs: optimizer and learning rate. + config.backbone_training = ml_collections.ConfigDict() + config.backbone_training.optimizer = copy.deepcopy(config.optimizer) + config.backbone_training.optimizer_configs = copy.deepcopy( + config.optimizer_configs) + config.backbone_training.lr_configs = copy.deepcopy(config.lr_configs) + config.backbone_training.lr_configs.base_learning_rate = 1e-5 + + # Pretrained_backbone. + config.load_pretrained_backbone = True + config.freeze_backbone_batch_stats = True + config.pretrained_backbone_configs = ml_collections.ConfigDict() + # Download pretrained ResNet50 checkpoints from here: + # https://github.com/google-research/scenic/tree/main/scenic/projects/baselines pylint: disable=line-too-long + config.pretrained_backbone_configs.checkpoint_path = 'path_to_checkpoint_of_resnet_50' + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = steps_per_epoch + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/baselines/detr/configs/detr_sinkhorn_config.py b/scenic/projects/baselines/detr/configs/detr_sinkhorn_config.py new file mode 100644 index 0000000000000000000000000000000000000000..fe160a46c77f10ee79b94fddfe2a4a131dd02af5 --- /dev/null +++ b/scenic/projects/baselines/detr/configs/detr_sinkhorn_config.py @@ -0,0 +1,136 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Configs for COCO detection using DETR with Sinkhorn as matching algorithm. + +""" +# pylint: enable=line-too-long + +import copy +import ml_collections +_COCO_TRAIN_SIZE = 118287 +NUM_EPOCHS = 300 + + +def get_config(): + """Returns the configuration for COCO detection using DETR.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'coco_detection_detr' + + # Dataset. + config.dataset_name = 'coco_detr_detection' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 10_000 + # Should be `config.num_queries - 1` because (i) Sinkhorn currently requires + # square cost matrices; and (ii) an additional empty box is appended inside + # the model. + config.dataset_configs.max_boxes = 99 + config.data_dtype_str = 'float32' + + # Model. + config.model_dtype_str = 'float32' + config.model_name = 'detr' + config.matcher = 'sinkhorn' + config.hidden_dim = 256 + config.num_queries = 100 + config.query_emb_size = None # Same as hidden_size. + config.transformer_num_heads = 8 + config.transformer_num_encoder_layers = 6 + config.transformer_num_decoder_layers = 6 + config.transformer_qkv_dim = 256 + config.transformer_mlp_dim = 2048 + config.transformer_normalize_before = False + config.backbone_num_filters = 64 + config.backbone_num_layers = 50 + config.dropout_rate = 0. + config.attention_dropout_rate = 0.1 + + # Sinkhorn. + # See https://ott-jax.readthedocs.io/en/latest/notebooks/One_Sinkhorn.html + # for more insights about the meanings and effects of those parameters. + config.sinkhorn_epsilon = 1e-3 + # Speeds up convergence using epsilon decay. Start with a value 50 times + # higher than the target and decay by a factor 0.9 between iterations. + config.sinkhorn_init = 50 + config.sinkhorn_decay = 0.9 + config.sinkhorn_num_iters = 1000 # Sinkhorn number of iterations. + config.sinkhorn_threshold = 1e-2 # Reconstruction threshold. + # Starts using momemtum after after 100 Sinkhorn iterations. + config.sinkhorn_chg_momentum_from = 100 + config.sinkhorn_num_permutations = 100 + + # Loss. + config.aux_loss = True + config.bbox_loss_coef = 5.0 + config.giou_loss_coef = 2.0 + config.class_loss_coef = 1.0 + config.eos_coef = 0.1 + + # Training. + config.trainer_name = 'detr_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.weight_decay = 1e-4 + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.max_grad_norm = 0.1 + config.num_training_epochs = NUM_EPOCHS + config.batch_size = 64 + config.rng_seed = 0 + + decay_events = {500: 400} + + # Learning rate. + steps_per_epoch = _COCO_TRAIN_SIZE // config.batch_size + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*piecewise_constant' + config.lr_configs.decay_events = [ + decay_events.get(NUM_EPOCHS, NUM_EPOCHS * 2 // 3) * steps_per_epoch, + ] + # Note: this is absolute (not relative): + config.lr_configs.decay_factors = [.1] + config.lr_configs.base_learning_rate = 1e-4 + + # Backbone training configs: optimizer and learning rate. + config.backbone_training = ml_collections.ConfigDict() + config.backbone_training.optimizer = copy.deepcopy(config.optimizer) + config.backbone_training.optimizer_configs = copy.deepcopy( + config.optimizer_configs) + config.backbone_training.lr_configs = copy.deepcopy(config.lr_configs) + config.backbone_training.lr_configs.base_learning_rate = 1e-5 + + # Pretrained_backbone. + config.load_pretrained_backbone = True + config.freeze_backbone_batch_stats = True + config.pretrained_backbone_configs = ml_collections.ConfigDict() + # Download pretrained ResNet50 checkpoints from here: + # https://github.com/google-research/scenic/tree/main/scenic/projects/baselines pylint: disable=line-too-long + config.init_from.checkpoint_path = 'path_to_checkpoint_of_resnet_50' + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = steps_per_epoch + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/baselines/detr/detr_base_model.py b/scenic/projects/baselines/detr/detr_base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..752a69ad91b183d2a92881c1eb9526cb3b5797af --- /dev/null +++ b/scenic/projects/baselines/detr/detr_base_model.py @@ -0,0 +1,732 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class for detr object detection with matching.""" + +import abc +import functools +from typing import Any, Callable, Dict, Optional, Tuple + +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib import matchers +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import box_utils +from scenic.model_lib.base_models import model_utils + +ArrayDict = Dict[str, jnp.ndarray] +MetricsDict = Dict[str, Tuple[jnp.ndarray, jnp.ndarray]] + + +def compute_cost( + *, + tgt_labels: jnp.ndarray, + out_prob: jnp.ndarray, + tgt_bbox: Optional[jnp.ndarray] = None, + out_bbox: Optional[jnp.ndarray] = None, + class_loss_coef: float, + bbox_loss_coef: Optional[float] = None, + giou_loss_coef: Optional[float] = None, + target_is_onehot: bool, +) -> jnp.ndarray: + """Computes cost matrices for a batch of predictions. + + Relevant code: + https://github.com/facebookresearch/detr/blob/647917626d5017e63c1217b99537deb2dcb370d6/models/matcher.py#L35 + + Args: + tgt_labels: Class labels of shape [B, M]. If target_is_onehot then it is [B, + M, C]. Note that the labels corresponding to empty bounding boxes are not + yet supposed to be filtered out. + out_prob: Classification probabilities of shape [B, N, C]. + tgt_bbox: Target box coordinates of shape [B, M, 4]. Note that the empty + bounding boxes are not yet supposed to be filtered out. + out_bbox: Predicted box coordinates of shape [B, N, 4] + class_loss_coef: Relative weight of classification loss. + bbox_loss_coef: Relative weight of bbox loss. + giou_loss_coef: Relative weight of giou loss. + target_is_onehot: Whether targets are one-hot encoded. + + Returns: + A cost matrix [B, N, M]. + """ + if (tgt_bbox is None) != (out_bbox is None): + raise ValueError('Both `tgt_bbox` and `out_bbox` must be set.') + if (tgt_bbox is not None) and ((bbox_loss_coef is None) or + (giou_loss_coef is None)): + raise ValueError('For detection, both `bbox_loss_coef` and `giou_loss_coef`' + ' must be set.') + + batch_size, max_num_boxes = tgt_labels.shape[:2] + num_queries = out_prob.shape[1] + if target_is_onehot: + mask = tgt_labels[..., 0] == 0 # [B, M] + else: + mask = tgt_labels != 0 # [B, M] + + # [B, N, M] + cost_class = -out_prob # DETR uses -prob for matching. + max_cost_class = 0.0 + + # [B, N, M] + if target_is_onehot: + cost_class = jnp.einsum('bnl,bml->bnm', cost_class, tgt_labels) + else: + cost_class = jax.vmap(jnp.take, (0, 0, None))(cost_class, tgt_labels, 1) + + cost = class_loss_coef * cost_class + cost_upper_bound = class_loss_coef * max_cost_class + + if out_bbox is not None: + # [B, N, M, 4] + diff = jnp.abs(out_bbox[:, :, None] - tgt_bbox[:, None, :]) + cost_bbox = jnp.sum(diff, axis=-1) # [B, N, M] + cost = cost + bbox_loss_coef * cost_bbox + + # Cost_upper_bound is the approximate maximal possible total cost: + cost_upper_bound = cost_upper_bound + bbox_loss_coef * 4.0 # cost_bbox <= 4 + + # [B, N, M] + cost_giou = -box_utils.generalized_box_iou( + box_utils.box_cxcywh_to_xyxy(out_bbox), + box_utils.box_cxcywh_to_xyxy(tgt_bbox), + all_pairs=True) + cost = cost + giou_loss_coef * cost_giou + + # cost_giou < 0, but can be a bit higher in the beginning of training: + cost_upper_bound = cost_upper_bound + giou_loss_coef * 1.0 + + # Don't make costs too large w.r.t. the rest to avoid numerical instability. + mask = mask[:, None] + cost = cost * mask + (1.0 - mask) * cost_upper_bound + # Guard against NaNs and Infs. + cost = jnp.nan_to_num( + cost, + nan=cost_upper_bound, + posinf=cost_upper_bound, + neginf=cost_upper_bound) + + assert cost.shape == (batch_size, num_queries, max_num_boxes) + + # Compute the number of unpadded columns for each batch element. It is assumed + # that all padding is trailing padding. + n_cols = jnp.where( + jnp.max(mask, axis=1), + jnp.expand_dims(jnp.arange(1, max_num_boxes + 1), axis=0), 0) + n_cols = jnp.max(n_cols, axis=1) + return cost, n_cols # pytype: disable=bad-return-type # jax-ndarray + + +class BaseModelWithMatching(base_model.BaseModel): # pytype: disable=ignored-abstractmethod # abcmeta-check + """Base model for object detection or instance segmentation with matching. + + This model implements the classification and matching parts which are shared + between the object detection and instance segmentation models. + """ + + def __init__(self, config: Optional[ml_collections.ConfigDict], + dataset_meta_data: Dict[str, Any]): + """Initialize Detection model. + + Args: + config: Configurations of the model. + dataset_meta_data: Dataset meta data specifies `target_is_onehot`, which + is False by default. The padded objects have label 0. The first + legitimate object has label 1, and so on. + """ + self.losses_and_metrics = ['labels'] + if config is not None: + self.loss_terms_weights = {'loss_class': config.class_loss_coef} + super().__init__(config, dataset_meta_data) + + @property + @abc.abstractmethod + def loss_and_metrics_map( + self) -> Dict[str, Callable[..., Tuple[ArrayDict, MetricsDict]]]: + """Returns a dict that lists all losses for this model.""" + return {'labels': self.labels_losses_and_metrics} + + def compute_cost_matrix(self, predictions: ArrayDict, + targets: ArrayDict) -> jnp.ndarray: + """Implements the matching cost matrix computations. + + Args: + predictions: Dictionary of outputs from a model. Must contain 'pred_boxes' + and 'pred_probs' keys with shapes [B, N, 4] and [B, N, L] respectively. + targets: Dictionary of ground truth targets. Must contain 'boxes' and + 'labels' keys of shapes [B, M, 4] and [B, M, L] respectively. + + Returns: + The matching cost matrix of shape [B, N, M]. + """ + raise NotImplementedError('Subclasses must implement compute_cost_matrix.') + + def matcher( + self, cost: jnp.ndarray, n_cols: Optional[jnp.ndarray] = None + ) -> jnp.ndarray: + """Implements a matching function. + + Matching function matches output detections against ground truth detections + and returns indices. + + Args: + cost: Matching cost matrix + n_cols: Number of non-padded columns in each cost matrix. + + Returns: + Matched indices which in the form of a list of tuples (src, dst), where + `src` and `dst` are indices of corresponding source and target detections. + """ + matcher_name, matcher_fn = self.config.get('matcher'), None + if matcher_name == 'lazy': + matcher_fn = matchers.lazy_matcher + elif matcher_name == 'sinkhorn': + matcher_fn = functools.partial( + matchers.sinkhorn_matcher, + epsilon=self.config.get('sinkhorn_epsilon', 0.001), + init=self.config.get('sinkhorn_init', 50), + decay=self.config.get('sinkhorn_decay', 0.9), + num_iters=self.config.get('sinkhorn_num_iters', 1000), + threshold=self.config.get('sinkhorn_threshold', 1e-2), + chg_momentum_from=self.config.get('sinkhorn_chg_momentum_from', 100), + num_permutations=self.config.get('sinkhorn_num_permutations', 100)) + + elif matcher_name == 'greedy': + matcher_fn = matchers.greedy_matcher + elif matcher_name == 'hungarian': + matcher_fn = functools.partial(matchers.hungarian_matcher, n_cols=n_cols) + elif matcher_name == 'hungarian_tpu': + matcher_fn = matchers.hungarian_tpu_matcher + elif matcher_name == 'hungarian_scan_tpu': + matcher_fn = matchers.hungarian_scan_tpu_matcher + elif matcher_name == 'hungarian_cover_tpu': + matcher_fn = matchers.hungarian_cover_tpu_matcher + else: + raise ValueError('Unknown matcher (%s).' % matcher_name) + + return jax.lax.stop_gradient(matcher_fn(cost)) + + def logits_to_probs(self, + logits: jnp.ndarray, + log_p: bool = False) -> jnp.ndarray: + is_sigmoid = self.config.get('sigmoid_loss', False) + # We can overwrite logit normalization explicitly if we wanted to, so we + # can normalize logits using softmax but using sigmoid loss. + is_sigmoid = self.config.get('sigmoid_logit_norm', is_sigmoid) + if not is_sigmoid: + return jax.nn.log_softmax(logits) if log_p else jax.nn.softmax(logits) + else: + return jax.nn.log_sigmoid(logits) if log_p else jax.nn.sigmoid(logits) + + def labels_losses_and_metrics( + self, + outputs: ArrayDict, + batch: ArrayDict, + indices: jnp.ndarray, + log: bool = True) -> Tuple[ArrayDict, MetricsDict]: + """Classification softmax cross entropy loss and (optionally) top-1 correct. + + Args: + outputs: Model predictions. For the purpose of this loss, outputs must + have key 'pred_logits'. outputs['pred_logits'] is a nd-array of the + predicted pre-softmax logits of shape [batch-size, num-objects, + num-classes]. + batch: Dict that has 'inputs', 'batch_mask' and, 'label' (ground truth). + batch['label'] is a dict. For the purpose of this loss, label dict must + have key 'labels', which the value is an int nd-array of labels. It may + be one-hot if dataset_meta_data.target_is_onehot was set to True. If + batch['batch_mask'] is provided it is used to weight the loss for + different images in the current batch of examples. + indices: Matcher output of shape [batch-size, 2, num-objects] which + conveys source to target pairing of objects. + log: If true, return class_error as well. + + Returns: + loss: Dict with keys 'loss_class'. + metrics: Dict with keys 'loss_class' and 'class_error`. + """ + assert 'pred_logits' in outputs + assert 'label' in batch + + batch_weights = batch.get('batch_mask') + losses, metrics = {}, {} + targets = batch['label'] + if isinstance(targets, dict): + targets = targets['labels'] + + src_logits = outputs['pred_logits'] + num_classes = src_logits.shape[-1] + + # Copy unpermuted logits & targets; this is done to be doubly sure that + # prec@1 evaluation is not in any way affected by the matching. + orig_src_logits, orig_tgt_labels = src_logits, targets + + # Apply the permutation communicated by indices. + src_logits = model_utils.simple_gather(src_logits, indices[:, 0]) + tgt_labels = model_utils.simple_gather(targets, indices[:, 1]) + if self.dataset_meta_data.get('target_is_onehot', False): + tgt_labels_onehot = tgt_labels + orig_tgt_labels_onehot = orig_tgt_labels + else: + tgt_labels_onehot = jax.nn.one_hot(tgt_labels, num_classes) + orig_tgt_labels_onehot = jax.nn.one_hot(orig_tgt_labels, num_classes) + + def get_label(label): + if isinstance(batch['label'], dict) and label in batch['label']: + value = batch['label'][label] + else: + value = None + return value + + neg_category_ids = get_label('neg_category_ids') + loose_box = get_label('loose_box') + + # Normalization before masking is important so that masked classes can + # be assigned when using softmax normalization. In federated datasets + # we don't have exhaustive annotation so this is important. + src_log_p = self.logits_to_probs(src_logits, log_p=True) + + unnormalized_loss_class, denom = self._compute_per_example_class_loss( + tgt_labels_onehot=tgt_labels_onehot, + src_log_p=src_log_p, + batch_weights=batch_weights, + neg_category_ids=neg_category_ids, + loose_box=loose_box, + ) + + metrics['loss_class'] = (unnormalized_loss_class.sum(), denom.sum()) + + norm_type = self.config.get('normalization', 'detr') + if norm_type == 'detr': + denom = jnp.maximum(denom.sum(), 1.) + normalized_loss_class = unnormalized_loss_class.sum() / denom + elif norm_type == 'global': + denom = jax.lax.pmean(denom.sum(), axis_name='batch') + denom = jnp.maximum(denom, 1.) + normalized_loss_class = unnormalized_loss_class.sum() / denom + else: + raise ValueError(f'Unknown normalization {norm_type}.') + + losses['loss_class'] = normalized_loss_class + + if log: + # For normalization, we need to have number of inputs that we do + # prediction for, which is number of examples in the batch times + # number of boxes (including padded boxes). + # note that: tgt_labels_onehot.shape = (bs, num_boxes, num_classes) + if batch_weights is not None: + batch_num_inputs = batch_weights.sum() * tgt_labels_onehot.shape[-2] + else: + batch_num_inputs = np.prod(tgt_labels_onehot.shape[:-1]) + + # Class accuracy for non-padded (label != 0) labels + not_padded = tgt_labels_onehot[:, :, 0] == 0 + if batch_weights is not None: + not_padded = not_padded * jnp.expand_dims(batch_weights, axis=1) + num_correct_no_pad = model_utils.weighted_correctly_classified( + src_log_p[..., 1:], tgt_labels_onehot[..., 1:], weights=not_padded) + metrics['class_accuracy_not_pad'] = (num_correct_no_pad, not_padded.sum()) + + if not self.config.get('sigmoid_loss', False): + num_correct = model_utils.weighted_correctly_classified( + src_log_p, tgt_labels_onehot, weights=batch_weights) + metrics['class_accuracy'] = (num_correct, batch_num_inputs) + + if 'loss_bbox' not in self.loss_terms_weights: + # Prec@1 for classification only models. + if batch_weights is not None: + batch_num_inputs = batch_weights.sum() + else: + batch_num_inputs = jnp.asarray(tgt_labels_onehot.shape[0]) + max_logits = jnp.max(orig_src_logits, axis=-2) + tgt_labels_multihot = jnp.max(orig_tgt_labels_onehot, axis=-2) + prec_at_one = model_utils.weighted_top_one_correctly_classified( + max_logits[:, 1:], + tgt_labels_multihot[:, 1:], + weights=batch_weights) + metrics['prec@1'] = (prec_at_one, batch_num_inputs) + + # Sum metrics and normalizers over all replicas. + for k, v in metrics.items(): + metrics[k] = model_utils.psum_metric_normalizer(v) + return losses, metrics + + def _compute_per_example_class_loss( + self, + *, + tgt_labels_onehot: jnp.ndarray, + src_log_p: jnp.ndarray, + batch_weights: Optional[jnp.ndarray], + neg_category_ids: Optional[jnp.ndarray] = None, + loose_box: Optional[jnp.ndarray] = None, + ) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Computes the unnormalized per-example classification loss and denom.""" + num_classes = src_log_p.shape[-1] + + # We want to weight the padded objects differently. So class 0 gets + # eof_coef and others get 1.0. + label_weights = jnp.concatenate([ + jnp.array([self.config.get('eos_coef', 1.0)], dtype=jnp.float32), + jnp.ones(num_classes - 1) + ]) + unnormalized_loss_class = model_utils.weighted_unnormalized_softmax_cross_entropy( + src_log_p, + tgt_labels_onehot, + weights=batch_weights, + label_weights=label_weights, + logits_normalized=True) + + if label_weights is not None: + denom = (tgt_labels_onehot * label_weights).sum(axis=[1, 2]) # pytype: disable=wrong-arg-types # jax-ndarray + else: # Normalize by number of boxes after removing padding label. + denom = tgt_labels_onehot[..., 1:].sum(axis=[1, 2]) # pytype: disable=wrong-arg-types # jax-ndarray + + if batch_weights is not None: + denom *= batch_weights + + return unnormalized_loss_class, denom + + def get_losses_and_metrics(self, loss: str, outputs: ArrayDict, + batch: ArrayDict, indices: jnp.ndarray, + **kwargs: Any) -> Tuple[ArrayDict, MetricsDict]: + """A convenience wrapper to all the loss_* functions in this class.""" + assert loss in self.loss_and_metrics_map, f'Unknown loss {loss}.' + return self.loss_and_metrics_map[loss](outputs, batch, indices, **kwargs) + + def loss_function( # pytype: disable=signature-mismatch # overriding-return-type-checks + self, + outputs: ArrayDict, + batch: ArrayDict, + matches: Optional[jnp.ndarray] = None, + model_params: Optional[jnp.ndarray] = None + ) -> Tuple[jnp.ndarray, MetricsDict]: + """Loss and metrics function for ObjectDetectionWithMatchingModel. + + Args: + outputs: Model prediction. The exact fields depend on the losses used. + Please see labels_losses_and_metrics and boxes_losses_and_metrics for + details. + batch: Dict that has 'inputs', 'batch_mask' and, 'label' (ground truth). + batch['label'] is a dict where the keys and values depend on the losses + used. Please see labels_losses_and_metrics and boxes_losses_and_metrics + member methods. + matches: Output of hungarian matcher, if available. + model_params: pytree (optional); Parameters of the model. + + Returns: + total_loss: Total loss weighted appropriately using + self.loss_terms_weights and combined across all auxiliary outputs. + metrics_dict: Individual loss terms with and without weighting for + logging purposes. + """ + # Append a padding instance to the inputs. Those are not guaranteed by the + # input pipeline to always be present. + batch = batch.copy() + batch['label'] = batch['label'].copy() + + # Append a class label. + if self.dataset_meta_data['target_is_onehot']: + # Shape is [batch, num_instances, num_classes] + label_shape = batch['label']['labels'].shape + num_classes = label_shape[-1] + instance = jax.nn.one_hot(0, num_classes) + reshape_shape = (1,) * (len(label_shape) - 1) + (num_classes,) + broadcast_shape = label_shape[:-2] + (1, num_classes) + instance = jnp.broadcast_to( + jnp.reshape(instance, reshape_shape), broadcast_shape) + else: + instance = jnp.zeros_like(batch['label']['labels'][..., :1]) + batch['label']['labels'] = jnp.concatenate( + [batch['label']['labels'], instance], axis=-1) + + # Same for boxes. + instance = jnp.zeros_like(batch['label']['boxes'][..., :1, :]) + batch['label']['boxes'] = jnp.concatenate( + [batch['label']['boxes'], instance], axis=-2) + + if matches is None: + if 'cost' not in outputs: + cost, n_cols = self.compute_cost_matrix(outputs, batch['label']) # pytype: disable=wrong-arg-types # jax-ndarray + else: + cost, n_cols = outputs['cost'], outputs.get('cost_n_cols') + matches = self.matcher(cost, n_cols) + if 'aux_outputs' in outputs: + matches = [matches] + for aux_pred in outputs['aux_outputs']: + if 'cost' not in outputs: + cost, n_cols = self.compute_cost_matrix(aux_pred, batch['label']) # pytype: disable=wrong-arg-types # jax-ndarray + else: + cost, n_cols = aux_pred['cost'], outputs.get('cost_n_cols') + matches.append(self.matcher(cost, n_cols)) + + if not isinstance(matches, (list, tuple)): + # Ensure matches come as a sequence. + matches = [matches] + + # If the matching is not complete (i.e. the number of tokens is larger than + # the number of labels) we will pad the matches. + n = outputs['pred_logits'].shape[-2] + + def pad_matches(match): + b, m = match.shape[0], match.shape[-1] + if n > m: + + def get_unmatched_indices(row, ind): + return jax.lax.top_k(jnp.logical_not(row.at[ind].set(1)), k=n - m) + + get_unmatched_indices = jax.vmap(get_unmatched_indices) + + indices = jnp.zeros((b, n), dtype=jnp.bool_) + _, indices = get_unmatched_indices(indices, match[:, 0, :]) + indices = jnp.expand_dims(indices, axis=1) + + padding = jnp.concatenate( + [indices, jnp.full(indices.shape, fill_value=m - 1)], axis=1) + return jnp.concatenate([match, padding], axis=-1) + return match + + matches = [pad_matches(match) for match in matches] + + aux_matches = matches[1:] + indices = matches[0] + + # Computes all the requested losses + loss_dict = {} + metrics_dict = {} + for loss in self.losses_and_metrics: + loss, metrics = self.get_losses_and_metrics(loss, outputs, batch, indices) + loss_dict.update(loss) + metrics_dict.update(metrics) + + # The outputs might have auxiliary predictions from more layers. We process + # them in the next code block + if aux_matches: + for i, aux_outputs in enumerate(outputs['aux_outputs']): + indices = aux_matches[i] + # Computes all the losses for this auxiliary output except class_error + for loss in self.losses_and_metrics: + # Disable class error for loss on labels. + kwargs = {'log': False} if loss == 'labels' else {} + l_dict, m_dict = self.get_losses_and_metrics(loss, aux_outputs, batch, + indices, **kwargs) + l_dict = {k + f'_aux_{i}': v for k, v in l_dict.items()} + loss_dict.update(l_dict) + # Add metrics for aux outputs: + metrics_dict.update({k + f'_aux_{i}': v for k, v in m_dict.items()}) + + # Compute the total loss by combining loss_dict with loss_terms_weights: + total_loss = [] + for k, v in loss_dict.items(): + k = k.split('_aux_')[0] # Remove aux suffix for term weights. + if k in self.loss_terms_weights: + total_loss.append(self.loss_terms_weights[k] * v) + total_loss = sum(total_loss) + + if self.config.get('l2_decay_factor') is not None: + l2_loss = model_utils.l2_regularization(model_params) + metrics['l2_loss'] = l2_loss + total_loss = total_loss + 0.5 * self.config.l2_decay_factor * l2_loss + + # Process metrics dictionary to generate final unnormalized metrics. + metrics = self.get_metrics(metrics_dict) + metrics['total_loss'] = (total_loss, 1) + return total_loss, metrics # pytype: disable=bad-return-type # jax-ndarray + + def get_metrics(self, metrics_dict: MetricsDict) -> MetricsDict: + """Arrange loss dictionary into a metrics dictionary.""" + metrics = {} + # Some metrics don't get scaled, so no need to keep their unscaled version, + # i.e. those that are not in self.loss_terms_weights.keys() + for k, v in metrics_dict.items(): + loss_term = self.loss_terms_weights.get(k.split('_aux_')[0]) + if loss_term is not None: + metrics[f'{k}_unscaled'] = v + metrics[k] = (loss_term * v[0], v[1]) + else: + metrics[k] = v + + return metrics + + def build_flax_model(self): + raise NotImplementedError('Subclasses must implement build_flax_module().') + + def default_flax_model_config(self): + """Default config for the flax model that is built in `build_flax_model`. + + This function in particular serves the testing functions and supposed to + provide config tha are passed to the flax_model when it's build in + `build_flax_model` function, e.g., `model_dtype_str`. + """ + raise NotImplementedError( + 'Subclasses must implement default_flax_model_config().') + + +class ObjectDetectionWithMatchingModel(BaseModelWithMatching): + """Base model for object detection with matching.""" + + def __init__(self, config: Optional[ml_collections.ConfigDict], + dataset_meta_data: Dict[str, Any]): + """Initialize Detection model. + + Args: + config: Hyper-parameter dictionary. + dataset_meta_data: Dataset meta data specifies `target_is_onehot`, which + is False by default, and a required `num_classes`, which is the number + of object classes including background/unlabeled/padding. The padded + objects have label 0. The first legitimate object has label 1, and so + on. + """ + super().__init__(config, dataset_meta_data) + self.losses_and_metrics.append('boxes') + if config is not None: + self.loss_terms_weights['loss_bbox'] = config.bbox_loss_coef + self.loss_terms_weights['loss_giou'] = config.giou_loss_coef + + @property + def loss_and_metrics_map( + self) -> Dict[str, Callable[..., Tuple[ArrayDict, MetricsDict]]]: + """Returns a dict that lists all losses for this model.""" + return { + **super().loss_and_metrics_map, + 'boxes': self.boxes_losses_and_metrics, + } + + def compute_cost_matrix(self, predictions: ArrayDict, + targets: ArrayDict) -> jnp.ndarray: + """Implements the matching cost matrix computations. + + Args: + predictions: Dictionary of outputs from a model. Must contain 'pred_boxes' + and 'pred_probs' keys with shapes [B, N, 4] and [B, N, L] respectively. + targets: Dictionary of ground truth targets. Must contain 'boxes' and + 'labels' keys of shapes [B, M, 4] and [B, M, L] respectively. + + Returns: + The matching cost matrix of shape [B, N, M]. + """ + return compute_cost( + tgt_labels=targets['labels'], + out_prob=self.logits_to_probs(predictions['pred_logits']), + tgt_bbox=targets['boxes'], + out_bbox=predictions['pred_boxes'], + class_loss_coef=self.config.class_loss_coef, + bbox_loss_coef=self.config.bbox_loss_coef, + giou_loss_coef=self.config.giou_loss_coef, + target_is_onehot=self.dataset_meta_data['target_is_onehot']) + + def boxes_losses_and_metrics( + self, outputs: ArrayDict, batch: ArrayDict, + indices: jnp.ndarray) -> Tuple[ArrayDict, MetricsDict]: + """Bounding box losses: L1 regression loss and GIoU loss.. + + Args: + outputs: dict; Model predictions. For the purpose of this loss, outputs + must have key 'pred_boxes'. outputs['pred_boxes'] is a nd-array of the + predicted box coordinates in (cx, cy, w, h) format. This nd-array has + shape [batch-size, num-boxes, 4]. + batch: dict; that has 'inputs', 'batch_mask' and, 'label' (ground truth). + batch['label'] is a dict. For the purpose of this loss, batch['label'] + must have key 'boxes', which the value has the same format as + outputs['pred_boxes']. Additionally in batch['label'], key 'labels' is + required that should match the specs defined in the member function + `labels_losses_and_metrics`. This is to decide which boxes are invalid + and need to be ignored. Invalid boxes have class label 0. If + batch['batch_mask'] is provided it is used to weight the loss for + different images in the current batch of examples. + indices: list[tuple[nd-array, nd-array]]; Matcher output which conveys + source to target pairing of objects. + + Returns: + loss: dict with keys 'loss_bbox', 'loss_bbox. These are + losses averaged over the batch. Therefore they have shape []. + metrics: dict with keys 'loss_bbox' and 'loss_giou`. + These are metrics psumed over the batch. Therefore they have shape []. + """ + assert 'pred_boxes' in outputs + assert 'label' in batch + + targets = batch['label'] + assert 'boxes' in targets + assert 'labels' in targets + losses, metrics = {}, {} + batch_weights = batch.get('batch_mask') + + src_boxes = model_utils.simple_gather(outputs['pred_boxes'], indices[:, 0]) + tgt_boxes = model_utils.simple_gather(targets['boxes'], indices[:, 1]) + + # Some of the boxes are padding. We want to discount them from the loss. + target_is_onehot = self.dataset_meta_data.get('target_is_onehot', False) + if target_is_onehot: + tgt_not_padding = 1 - targets['labels'][..., 0] + else: + tgt_not_padding = targets['labels'] != 0 + + # tgt_is_padding has shape [batch-size, num-boxes]. + # Align this with the model predictions using simple_gather. + tgt_not_padding = model_utils.simple_gather(tgt_not_padding, indices[:, 1]) + + src_boxes_xyxy = box_utils.box_cxcywh_to_xyxy(src_boxes) + tgt_boxes_xyxy = box_utils.box_cxcywh_to_xyxy(tgt_boxes) + unnormalized_loss_giou = 1 - box_utils.generalized_box_iou( + src_boxes_xyxy, tgt_boxes_xyxy, all_pairs=False) + + if 'loose_box' in batch['label']: + is_loose = batch['label']['loose_box'][..., 1] + else: + is_loose = False + loose_bbox_loss = model_utils.weighted_box_l1_loss( + src_boxes_xyxy, + tgt_boxes_xyxy, + weights=batch_weights, + tight=False, + ).sum(axis=2) + tight_bbox_loss = model_utils.weighted_box_l1_loss( + src_boxes_xyxy, + tgt_boxes_xyxy, + weights=batch_weights, + ).sum(axis=2) + unnormalized_loss_bbox = ( + is_loose * loose_bbox_loss + (1 - is_loose) * tight_bbox_loss) + + denom = tgt_not_padding.sum(axis=1) + if batch_weights is not None: + denom *= batch_weights + unnormalized_loss_giou = model_utils.apply_weights( + unnormalized_loss_giou, batch_weights) + + unnormalized_loss_bbox *= tgt_not_padding + unnormalized_loss_giou *= tgt_not_padding + + norm_type = self.config.get('normalization') + if norm_type != 'per_example': + # Normalize by number of boxes in batch. + denom = jnp.maximum(jax.lax.pmean(denom.sum(), axis_name='batch'), 1) + normalized_loss_bbox = unnormalized_loss_bbox.sum() / denom + normalized_loss_giou = unnormalized_loss_giou.sum() / denom + else: # Normalize by number of boxes in image. + denom = jnp.maximum(denom, 1.) + normalized_loss_bbox = (unnormalized_loss_bbox.sum(axis=1) / denom).mean() + normalized_loss_giou = (unnormalized_loss_giou.sum(axis=1) / denom).mean() + + losses['loss_bbox'] = normalized_loss_bbox + metrics['loss_bbox'] = (normalized_loss_bbox, 1.) + losses['loss_giou'] = normalized_loss_giou + metrics['loss_giou'] = (normalized_loss_giou, 1.) + + # Sum metrics and normalizers over all replicas. + for k, v in metrics.items(): + metrics[k] = model_utils.psum_metric_normalizer(v) # pytype: disable=wrong-arg-types # jax-ndarray + return losses, metrics # pytype: disable=bad-return-type # jax-ndarray diff --git a/scenic/projects/baselines/detr/input_pipeline_detection.py b/scenic/projects/baselines/detr/input_pipeline_detection.py new file mode 100644 index 0000000000000000000000000000000000000000..5c3d01d351a8e8cb9a754314256ab2527557b969 --- /dev/null +++ b/scenic/projects/baselines/detr/input_pipeline_detection.py @@ -0,0 +1,343 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the COCO dataset. + +For a detailed explanation of data format see +https://cocodataset.org/#format-data + +This data loader supports the following tasks in this dataset: +- Panoptic Segmentation, which combines semantic and instance segmentation + such that all pixels are assigned a class label and all object instances are + uniquely segmented. +""" + +import functools +from typing import Optional +from absl import logging + +from flax import jax_utils +import jax +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib.coco_dataset import coco_utils +from scenic.projects.baselines.detr import transforms +import tensorflow as tf +import tensorflow_datasets as tfds + +# Computed from the training set by taking the per-channel mean/std-dev +# over sample, height and width axes of all training samples +MEAN_RGB = [0.48, 0.456, 0.406] +STDDEV_RGB = [0.229, 0.224, 0.225] + + +def make_coco_transforms(image_set, max_size=1333): + """Returns a preprocessing function that operates on inputs and labels.""" + scales = [480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800] + ratio = max_size / 1333. + + scales = [int(s * ratio) for s in scales] + scales2 = [int(s * ratio) for s in [400, 500, 600]] + + normalize_boxes = transforms.NormalizeBoxes() + init_padding_mask = transforms.InitPaddingMask() + + if image_set == 'train': + return transforms.Compose( + [transforms.RandomHorizontalFlip(), + transforms.RandomSelect( + transforms.RandomResize(scales, max_size=max_size), + transforms.Compose([ + transforms.RandomResize(scales2), + transforms.RandomSizeCrop(int(ratio * 384), int(ratio * 600)), + transforms.RandomResize(scales, max_size=max_size), + ])), + normalize_boxes, + init_padding_mask]) + + elif image_set == 'validation': + return transforms.Compose( + [transforms.Resize(max(scales), max_size=max_size), + normalize_boxes, + init_padding_mask]) + + else: + raise ValueError(f'Unknown image_set: {image_set}') + + +def decode_boxes(bbox, size): + """Convert yxyx [0, 1] normalized boxes to xyxy unnormalized format.""" + y0, x0, y1, x1 = tf.split(bbox, 4, axis=-1) + h = tf.cast(size[0], tf.float32) + w = tf.cast(size[1], tf.float32) + + y0 = tf.clip_by_value(y0 * h, 0.0, h) + x0 = tf.clip_by_value(x0 * w, 0.0, w) + y1 = tf.clip_by_value(y1 * h, 0.0, h) + x1 = tf.clip_by_value(x1 * w, 0.0, w) + + bbox = tf.concat([x0, y0, x1, y1], axis=-1) + return bbox + + +def decode_coco_detection_example(example, input_range=None): + """Given an instance and raw labels, creates pair. + + Decoding includes. + 1. Converting images from uint8 [0, 255] to [0, 1.] float32. + 2. Mean subtraction and standardization using hard-coded mean and std. + 3. Convert boxes from yxyx [0-1] to xyxy un-normalized. + 4. Add 1 to all labels to account for background/padding object at label 0. + 5. Shuffling dictionary keys to be consistent with the rest of the code. + + Args: + example: dict; Input image and raw labels. + input_range: tuple; Range of input. By default we use Mean and StdDev + normalization. + + Returns: + A dictionary of {'inputs': input image, 'labels': task label}. + """ + image = tf.image.convert_image_dtype(example['image'], dtype=tf.float32) + + ### normalize + if input_range: + image = image * (input_range[1] - input_range[0]) + input_range[0] + else: + mean_rgb = tf.constant(MEAN_RGB, shape=[1, 1, 3], dtype=tf.float32) + std_rgb = tf.constant(STDDEV_RGB, shape=[1, 1, 3], dtype=tf.float32) + image = (image - mean_rgb) / std_rgb + + boxes = decode_boxes(example['objects']['bbox'], tf.shape(image)[0:2]) + + target = { + 'area': example['objects']['area'], + 'boxes': boxes, + 'objects/id': example['objects']['id'], + 'is_crowd': example['objects']['is_crowd'], + 'labels': example['objects']['label'] + 1, # 0'th class is padding. + } + + # Filters objects to exclude degenerate boxes. + keep = tf.where(tf.logical_and(boxes[:, 2] > boxes[:, 0], + boxes[:, 3] > boxes[:, 1]))[:, 0] + target_kept = {k: tf.gather(v, keep) for k, v in target.items()} + + target_kept['orig_size'] = tf.cast(tf.shape(image)[0:2], dtype=tf.int32) + target_kept['size'] = tf.identity(target_kept['orig_size']) + target_kept['image/id'] = example['image/id'] + + return { + 'inputs': image, + 'label': target_kept, + } + + +def coco_load_split_from_tfds(batch_size, + *, + train, + preprocess_fn, + decode_fn, + cache=False, + max_size=1333, + max_boxes=100, + shuffle_buffer_size=1000, + shuffle_seed=0): + """Loads a split from the COCO dataset using TensorFlow Datasets. + + Args: + batch_size: int; The batch size returned by the data pipeline. + train: bool; Whether to load the train or evaluation split. + preprocess_fn: function; A function that given an example, train flag, + and dtype returns the preprocessed the example. Note that the + preprocessing is done BEFORE caching to re-use them. + decode_fn: A function that given an example decodes the image, converts + it to float32, mean-subtracts it, and pulls out the relevant parts from + the tfds features. + cache: bool; whether to use the ds.cache or nor. + max_size: int; Maximum image size. + max_boxes: int; Maximum number of boxes. + shuffle_buffer_size: int; Size of the shuffle buffer. + shuffle_seed: int; Seed for shuffling the training data. + + Returns: + A `tf.data.Dataset`, and dataset info. + """ + split = 'train' if train else 'validation' + builder = tfds.builder('coco/2017') + + # Each host is responsible for a fixed subset of data. + data_range = tfds.even_splits(split, jax.process_count())[jax.process_index()] + ds = builder.as_dataset(split=data_range, shuffle_files=False) + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + ds = ds.with_options(options) + ds = ds.map(decode_fn, num_parallel_calls=tf.data.experimental.AUTOTUNE) + if cache: + ds = ds.cache() + + # TLDR: make sure max_boxes is set >=64. + # NOTE: the number of boxes/labels always needs to be strictly larger than 63 + # to ensure that there is at least one dummy target corresponding + # to an empty bounding box, and that the last target box is such a dummy + # empty target. This is needed for matching functions that in principle only + # produce matches with non-empty target boxes, and produce dummy matches + # with an empty target for the rest of the unmatched predicted boxes. The + # latter behaviour is necessary to ensure that the number of matches per + # datapoint is the same for all datapoints and shapes are static and jit + # compatible. + padded_shapes = { + 'inputs': [max_size, max_size, 3], + 'padding_mask': [max_size, max_size], + 'label': { + 'area': [max_boxes,], + 'boxes': [max_boxes, 4], + 'objects/id': [max_boxes,], + 'is_crowd': [max_boxes,], + 'labels': [max_boxes,], + 'image/id': [], + 'orig_size': [2,], + 'size': [2,] + }, + } + + if train: + # First repeat then batch. + ds = ds.shuffle(shuffle_buffer_size, seed=shuffle_seed) + ds = ds.repeat() + # Augmentation should be done after repeat for true randomness. + ds = ds.map(preprocess_fn, num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.padded_batch(batch_size, padded_shapes=padded_shapes, + drop_remainder=True) + + else: + ds = ds.map(preprocess_fn, num_parallel_calls=tf.data.experimental.AUTOTUNE) + # First batch then repeat. + ds = ds.padded_batch(batch_size, padded_shapes=padded_shapes, + drop_remainder=False) + ds = ds.repeat() + + ds = ds.prefetch(tf.data.experimental.AUTOTUNE) + return ds, builder.info + + +@datasets.add_dataset('coco_detr_detection') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for COCO object detection 2017 train & validation set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image. Only 'float32' is currently supported. + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. Must be empty. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + assert dtype_str == 'float32', ( + f'coco_detr_dataset invoked with unsupported dtype_str: {dtype_str}') + del dtype_str + + dataset_configs = dataset_configs or {} + + max_size = dataset_configs.get('max_size', 1333) + max_boxes = dataset_configs.get('max_boxes', 100) + + train_preprocess_fn = make_coco_transforms('train', max_size) + eval_preprocess_fn = make_coco_transforms('validation', max_size) + + decode_fn = functools.partial(decode_coco_detection_example, + input_range=dataset_configs.get('input_range')) + + train_ds, train_ds_info = coco_load_split_from_tfds( + batch_size, train=True, + preprocess_fn=train_preprocess_fn, + decode_fn=decode_fn, + shuffle_buffer_size=dataset_configs.get('shuffle_buffer_size', 1000), + max_size=max_size, + max_boxes=max_boxes, + shuffle_seed=shuffle_seed) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + eval_ds, _ = coco_load_split_from_tfds( + eval_batch_size, + train=False, + preprocess_fn=eval_preprocess_fn, + max_size=max_size, + max_boxes=max_boxes, + decode_fn=decode_fn) + + # Labels take on values 1-80. We set 0 to be padded objects. + num_classes = train_ds_info.features['objects']['label'].num_classes + 1 + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + if dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + train_iter = jax_utils.prefetch_to_device( + train_iter, dataset_configs.get('prefetch_to_device')) + + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + eval_iter = map(shard_batches, eval_iter) + + meta_data = { + 'num_classes': + num_classes, + 'input_shape': [-1, max_size, max_size, 3], + 'num_train_examples': + dataset_utils.get_num_examples('coco/2017', 'train'), + 'num_eval_examples': + dataset_utils.get_num_examples('coco/2017', 'validation'), + 'input_dtype': + jnp.float32, + 'target_is_onehot': + False, + 'label_to_name': + coco_utils.get_label_map('coco/2017_panoptic'), + } + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) diff --git a/scenic/projects/baselines/detr/main.py b/scenic/projects/baselines/detr/main.py new file mode 100644 index 0000000000000000000000000000000000000000..e62c19295cd90209bf867a772f95f70fbbb1623e --- /dev/null +++ b/scenic/projects/baselines/detr/main.py @@ -0,0 +1,57 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for DETR.""" + +from typing import Any + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.baselines.detr import model as detr_model +from scenic.projects.baselines.detr import trainer +from scenic.train_lib_deprecated import train_utils + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name: str) -> Any: + """Returns model class given its name.""" + if model_name == 'detr': + return detr_model.DETRModel + else: + raise ValueError(f'Unrecognized model: {model_name}.') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the DETR project.""" + model_cls = get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + trainer.train_and_evaluate( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/baselines/detr/model.py b/scenic/projects/baselines/detr/model.py new file mode 100644 index 0000000000000000000000000000000000000000..520435dcf3aca893b515f258d62c55521c4b9e15 --- /dev/null +++ b/scenic/projects/baselines/detr/model.py @@ -0,0 +1,1077 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of DETR architecture. + +End-to-End Object Detection with Transformers: https://arxiv.org/abs/2005.12872 +Implementation is based on: https://github.com/facebookresearch/detr +""" + +# pylint: disable=not-callable + +import functools +from typing import Any, Callable, Dict, Tuple, Optional + +import flax.linen as nn +import jax +from jax.nn import initializers +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.layers import attention_layers +from scenic.projects.baselines import resnet +from scenic.projects.baselines.detr import detr_base_model + +# TODO(scenic): add support for DC5 in the backbone + +pytorch_kernel_init = functools.partial(initializers.variance_scaling, 1. / 3., + 'fan_in', 'uniform') + + +def uniform_initializer(minval, maxval, dtype=jnp.float32): + + def init(key, shape, dtype=dtype): + return jax.random.uniform(key, shape, dtype, minval=minval, maxval=maxval) + + return init + + +class QueryPosEmbedding(nn.Module): + """Creates learned positional embeddings for object queries. + + Attributes: + hidden_dim: Hidden dimension for the pos embeddings. + num_queries: Number of object queries. + posemb_init: Positional embeddings initializer. + dtype: Jax dtype; The dtype of the computation (default: float32). + """ + hidden_dim: int + num_queries: int + posemb_init: Callable[..., Any] = initializers.normal(stddev=1.0) + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self) -> jnp.ndarray: + """Creates the positional embeddings for queries. + + Returns: + Positional embedding for object queries. + """ + query_pos = self.param('query_emb', self.posemb_init, + (self.num_queries, self.hidden_dim)) + query_pos = jnp.expand_dims(query_pos, 0) + return jnp.asarray(query_pos, self.dtype) + + +class InputPosEmbeddingLearned(nn.Module): + """Creates learned positional embeddings for inputs. + + Attributes: + inputs_shape: Shape of the 2D input, before flattening. + hidden_dim: hidden dimension for the pos embeddings. + max_h_w: Maximum height and width for the transformer inputs. + posemb_init: Positional embeddings initializer. + dtype: The dtype of the computation (default: float32). + """ + + inputs_shape: Tuple[int, int, int, int] + hidden_dim: Optional[int] = None + max_h_w: Optional[int] = None + posemb_init: Callable[..., Any] = initializers.normal(stddev=1.0) + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self) -> jnp.ndarray: + """Creates the positional embeddings for transformer inputs. + + Returns: + Positional embedding for inputs and queries. + """ + _, h, w, c = self.inputs_shape + max_h_w = self.max_h_w or np.max((h, w)) + assert h <= max_h_w and w <= max_h_w + + hidden_dim = self.hidden_dim or c + + row_pos_embed = self.param('row_pos_embed', self.posemb_init, + (max_h_w, hidden_dim // 2)) + col_pos_embed = self.param('col_pos_embed', self.posemb_init, + (max_h_w, hidden_dim // 2)) + + # to `[h, w, hidden_dim//2]` + x_pos_emb = jnp.tile(jnp.expand_dims(col_pos_embed[:w], axis=0), (h, 1, 1)) + # to `[h, w, hidden_dim//2]` + y_pos_emb = jnp.tile(jnp.expand_dims(row_pos_embed[:h], axis=1), (1, w, 1)) + # to `[1, h*w, hidden_dim]` + pos = jnp.expand_dims( + jnp.concatenate((x_pos_emb, y_pos_emb), axis=-1).reshape( + (h * w, hidden_dim)), + axis=0) + + return jnp.asarray(pos, self.dtype) + + +class InputPosEmbeddingSine(nn.Module): + """Creates sinusoidal positional embeddings for inputs.""" + + hidden_dim: int + dtype: jnp.dtype = jnp.float32 + scale: Optional[float] = None + temperature: float = 10000 + + @nn.compact + def __call__(self, padding_mask: jnp.ndarray) -> jnp.ndarray: + """Creates the positional embeddings for transformer inputs. + + Args: + padding_mask: Binary matrix with 0 at padded image regions. Shape is + [batch, height, width] + + Returns: + Positional embedding for inputs. + + Raises: + ValueError if `hidden_dim` is not an even number. + """ + if self.hidden_dim % 2: + raise ValueError('`hidden_dim` must be an even number.') + + mask = padding_mask.astype(jnp.float32) + y_embed = jnp.cumsum(mask, axis=1) + x_embed = jnp.cumsum(mask, axis=2) + + # Normalization: + eps = 1e-6 + scale = self.scale if self.scale is not None else 2 * jnp.pi + y_embed = y_embed / (y_embed[:, -1:, :] + eps) * scale + x_embed = x_embed / (x_embed[:, :, -1:] + eps) * scale + + num_pos_feats = self.hidden_dim // 2 + dim_t = jnp.arange(num_pos_feats, dtype=jnp.float32) + dim_t = self.temperature**(2 * (dim_t // 2) / num_pos_feats) + + pos_x = x_embed[:, :, :, jnp.newaxis] / dim_t + pos_y = y_embed[:, :, :, jnp.newaxis] / dim_t + pos_x = jnp.stack([ + jnp.sin(pos_x[:, :, :, 0::2]), + jnp.cos(pos_x[:, :, :, 1::2]), + ], + axis=4).reshape(padding_mask.shape + (-1,)) + pos_y = jnp.stack([ + jnp.sin(pos_y[:, :, :, 0::2]), + jnp.cos(pos_y[:, :, :, 1::2]), + ], + axis=4).reshape(padding_mask.shape + (-1,)) + + pos = jnp.concatenate([pos_y, pos_x], axis=3) + b, h, w = padding_mask.shape + pos = jnp.reshape(pos, [b, h * w, self.hidden_dim]) + return jnp.asarray(pos, self.dtype) + + +class MlpBlock(nn.Module): + """Transformer MLP / feed-forward block.""" + + mlp_dim: int + out_dim: Optional[int] = None + dropout_rate: float = 0.1 + kernel_init: Callable[..., Any] = nn.initializers.xavier_uniform() + bias_init: Callable[..., Any] = nn.initializers.normal(stddev=1e-6) + activation_fn: Callable[[jnp.ndarray], jnp.ndarray] = nn.gelu + dtype: jnp.ndarray = jnp.float32 + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + *, + deterministic: bool = True) -> jnp.ndarray: + """Applies Transformer MlpBlock model.""" + actual_out_dim = inputs.shape[-1] if self.out_dim is None else self.out_dim + x = nn.Dense( + self.mlp_dim, + dtype=self.dtype, + kernel_init=self.kernel_init, + bias_init=self.bias_init)( + inputs) + x = self.activation_fn(x) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=deterministic) + output = nn.Dense( + actual_out_dim, + dtype=self.dtype, + kernel_init=self.kernel_init, + bias_init=self.bias_init)( + x) + output = nn.Dropout(rate=self.dropout_rate)( + output, deterministic=deterministic) + return output + + +class MultiHeadDotProductAttention(nn.Module): + """DETR Customized Multi-head dot-product attention. + + Attributes: + num_heads: Number of attention heads. Features (i.e. inputs_q.shape[-1]) + should be divisible by the number of heads. + pos_emb_q: Positional embedding to be added to the query. + pos_emb_k: Positional embedding to be added to the key. + pos_emb_v: Positional embedding to be added to the value. + qkv_features: dimension of the key, query, and value. + out_features: dimension of the last projection + dropout_rate: dropout rate + broadcast_dropout: use a broadcasted dropout along batch dims. + kernel_init: initializer for the kernel of the Dense layers. + bias_init: initializer for the bias of the Dense layers. + use_bias: bool: whether pointwise QKV dense transforms use bias. In DETR + they always have a bias on the output. + dtype: the dtype of the computation (default: float32) + """ + + num_heads: int + qkv_features: Optional[int] = None + out_features: Optional[int] = None + dropout_rate: float = 0. + broadcast_dropout: bool = False + kernel_init: Callable[..., Any] = initializers.xavier_uniform() + bias_init: Callable[..., Any] = initializers.zeros + use_bias: bool = True + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + inputs_q: jnp.ndarray, + inputs_kv: Optional[jnp.ndarray] = None, + *, + pos_emb_q: Optional[jnp.ndarray] = None, + pos_emb_k: Optional[jnp.ndarray] = None, + pos_emb_v: Optional[jnp.ndarray] = None, + key_padding_mask: Optional[jnp.ndarray] = None, + train: bool = False) -> jnp.ndarray: + """Applies multi-head dot product attention on the input data. + + Projects the inputs into multi-headed query, key, and value vectors, + applies dot-product attention and project the results to an output vector. + + This can be used for encoder-decoder attention by specifying both `inputs_q` + and `inputs_kv` or for self-attention by only specifying `inputs_q` and + setting `inputs_kv` to None. + + Args: + inputs_q: Input queries of shape `[bs, len, features]`. + inputs_kv: Key/values of shape `[bs, len, features]` or None for + self-attention, in which case key/values will be derived from inputs_q. + pos_emb_q: Positional embedding to be added to the query. + pos_emb_k: Positional embedding to be added to the key. + pos_emb_v: Positional embedding to be added to the value. + key_padding_mask: Binary array. Key-value tokens that are padded are 0, + and 1 otherwise. + train: Train or not (to apply dropout). + + Returns: + output of shape `[bs, len, features]`. + """ + if inputs_kv is None: + inputs_kv = inputs_q + + assert inputs_kv.ndim == inputs_q.ndim == 3 + features = self.out_features or inputs_q.shape[-1] + qkv_features = self.qkv_features or inputs_q.shape[-1] + + assert qkv_features % self.num_heads == 0, ( + 'Memory dimension must be divisible by number of heads.') + head_dim = qkv_features // self.num_heads + + def add_positional_emb(x, pos_emb_x): + return x if pos_emb_x is None else x + pos_emb_x + + query, key, value = (add_positional_emb(inputs_q, pos_emb_q), + add_positional_emb(inputs_kv, pos_emb_k), + add_positional_emb(inputs_kv, pos_emb_v)) + + dense = functools.partial( + nn.DenseGeneral, + axis=-1, + features=(self.num_heads, head_dim), + kernel_init=self.kernel_init, + bias_init=self.bias_init, + use_bias=self.use_bias, + dtype=self.dtype) + # project inputs_q to multi-headed q/k/v + # dimensions are then [bs, l, n_heads, n_features_per_head] + query, key, value = (dense(name='query')(query), dense(name='key')(key), + dense(name='value')(value)) + + # create attention masks + if key_padding_mask is not None: + attention_bias = (1 - key_padding_mask) * -1e10 + # add head and query dimension. + attention_bias = jnp.expand_dims(attention_bias, -2) + attention_bias = jnp.expand_dims(attention_bias, -2) + else: + attention_bias = None + + # apply attention + x = attention_layers.dot_product_attention( + query, + key, + value, + dtype=self.dtype, + bias=attention_bias, + dropout_rate=self.dropout_rate, + broadcast_dropout=self.broadcast_dropout, + dropout_rng=self.make_rng('dropout') if train else None, + deterministic=not train, + capture_attention_weights=True) + + # back to the original inputs dimensions + out = nn.DenseGeneral( + features=features, + axis=(-2, -1), + kernel_init=self.kernel_init, + bias_init=self.bias_init, + use_bias=True, + dtype=self.dtype, + name='out')( + x) + + return out + + +class EncoderBlock(nn.Module): + """DETR Transformer encoder block. + + Attributes: + num_heads: Number of heads. + qkv_dim: Dimension of the query/key/value. + mlp_dim: Dimension of the mlp on top of attention block. + pre_norm: If use LayerNorm before attention/mlp blocks. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout rate for attention weights. + dtype: Data type of the computation (default: float32). + """ + + num_heads: int + qkv_dim: int + mlp_dim: int + pre_norm: bool = False + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + *, + pos_embedding: Optional[jnp.ndarray] = None, + padding_mask: Optional[jnp.ndarray] = None, + train: bool = False) -> jnp.ndarray: + """Applies EncoderBlock module. + + Args: + inputs: Input data of shape [batch_size, len, features]. + pos_embedding: Positional Embedding to be added to the queries and keys in + the self-attention operation. + padding_mask: Binary mask containing 0 for padding tokens. + train: Train or not (to apply dropout). + + Returns: + Output after transformer encoder block. + """ + self_attn = MultiHeadDotProductAttention( + num_heads=self.num_heads, + qkv_features=self.qkv_dim, + dropout_rate=self.attention_dropout_rate, + broadcast_dropout=False, + kernel_init=initializers.xavier_uniform(), + bias_init=initializers.zeros, + use_bias=True, + dtype=self.dtype) + + mlp = MlpBlock( # pytype: disable=wrong-arg-types # jnp-type + mlp_dim=self.mlp_dim, + activation_fn=nn.relu, + dtype=self.dtype, + dropout_rate=self.dropout_rate) + + assert inputs.ndim == 3 + + if self.pre_norm: + x = nn.LayerNorm(dtype=self.dtype)(inputs) + x = self_attn( + inputs_q=x, + pos_emb_q=pos_embedding, + pos_emb_k=pos_embedding, + pos_emb_v=None, + key_padding_mask=padding_mask, + train=train) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + x = x + inputs + y = nn.LayerNorm(dtype=self.dtype)(x) + y = mlp(y, deterministic=not train) + out = x + y + + else: + x = self_attn( + inputs_q=inputs, + pos_emb_q=pos_embedding, + pos_emb_k=pos_embedding, + pos_emb_v=None, + key_padding_mask=padding_mask, + train=train) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + x = x + inputs + x = nn.LayerNorm(dtype=self.dtype)(x) + y = mlp(x, deterministic=not train) + y = x + y + out = nn.LayerNorm(dtype=self.dtype)(y) + + return out + + +class DecoderBlock(nn.Module): + """DETR Transformer decoder block. + + Attributes: + num_heads: Number of heads. + qkv_dim: Dimension of the query/key/value. + mlp_dim: Dimension of the mlp on top of attention block. + pre_norm: If use LayerNorm before attention/mlp blocks. + dropout_rate:Dropout rate. + attention_dropout_rate:Dropout rate for attention weights. + dtype: Data type of the computation (default: float32). + """ + + num_heads: int + qkv_dim: int + mlp_dim: int + pre_norm: bool = False + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + obj_queries: jnp.ndarray, + encoder_output: jnp.ndarray, + *, + pos_embedding: Optional[jnp.ndarray] = None, + query_pos_emb: Optional[jnp.ndarray] = None, + key_padding_mask: Optional[jnp.ndarray] = None, + train: bool = False): + """Applies DecoderBlock module. + + Args: + obj_queries: Input data for decoder. + encoder_output: Output of encoder, which are encoded inputs. + pos_embedding: Positional Embedding to be added to the keys in + cross-attention. + query_pos_emb: Positional Embedding to be added to the queries. + key_padding_mask: Binary mask containing 0 for pad tokens in key. + train: Train or not (to apply dropout) + + Returns: + Output after transformer decoder block. + """ + + assert query_pos_emb is not None, ('Given that object_queries are zeros ' + 'and not learnable, we should add ' + 'learnable query_pos_emb to them.') + # Seems in DETR the self-attention in the first layer basically does + # nothing, as the value vector is a zero vector and we add no learnable + # positional embedding to it! + self_attn = MultiHeadDotProductAttention( + num_heads=self.num_heads, + qkv_features=self.qkv_dim, + broadcast_dropout=False, + dropout_rate=self.attention_dropout_rate, + kernel_init=initializers.xavier_uniform(), + bias_init=initializers.zeros, + use_bias=True, + dtype=self.dtype) + + cross_attn = MultiHeadDotProductAttention( + num_heads=self.num_heads, + qkv_features=self.qkv_dim, + broadcast_dropout=False, + dropout_rate=self.attention_dropout_rate, + kernel_init=initializers.xavier_uniform(), + bias_init=initializers.zeros, + use_bias=True, + dtype=self.dtype) + + mlp = MlpBlock( # pytype: disable=wrong-arg-types # jnp-type + mlp_dim=self.mlp_dim, + activation_fn=nn.relu, + dtype=self.dtype, + dropout_rate=self.dropout_rate) + + assert obj_queries.ndim == 3 + if self.pre_norm: + # self attention block + x = nn.LayerNorm(dtype=self.dtype)(obj_queries) + x = self_attn( + inputs_q=x, + pos_emb_q=query_pos_emb, + pos_emb_k=query_pos_emb, + pos_emb_v=None, + train=train) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + x = x + obj_queries + # cross attention block + y = nn.LayerNorm(dtype=self.dtype)(x) + y = cross_attn( + inputs_q=y, + inputs_kv=encoder_output, + pos_emb_q=query_pos_emb, + pos_emb_k=pos_embedding, + pos_emb_v=None, + key_padding_mask=key_padding_mask, + train=train) + y = nn.Dropout(rate=self.dropout_rate)(y, deterministic=not train) + y = y + x + # mlp block + z = nn.LayerNorm(dtype=self.dtype)(y) + z = mlp(z, deterministic=not train) + out = y + z + + else: + # self attention block + x = self_attn( + inputs_q=obj_queries, + pos_emb_q=query_pos_emb, + pos_emb_k=query_pos_emb, + pos_emb_v=None, + train=train) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + x = x + obj_queries + x = nn.LayerNorm(dtype=self.dtype)(x) + # cross attention block + y = cross_attn( + inputs_q=x, + inputs_kv=encoder_output, + pos_emb_q=query_pos_emb, + pos_emb_k=pos_embedding, + pos_emb_v=None, + key_padding_mask=key_padding_mask, + train=train) + y = nn.Dropout(rate=self.dropout_rate)(y, deterministic=not train) + y = y + x + y = nn.LayerNorm(dtype=self.dtype)(y) + # mlp block + z = mlp(y, deterministic=not train) + z = y + z + out = nn.LayerNorm(dtype=self.dtype)(z) + + return out + + +class Encoder(nn.Module): + """DETR Transformer Encoder. + + Attributes: + num_heads: Number of heads. + num_layers: Number of layers. + qkv_dim: Dimension of the query/key/value. + mlp_dim: Dimension of the mlp on top of attention block. + normalize_before: If use LayerNorm before attention/mlp blocks. + norm: normalization layer to be applied on the output. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout rate for attention weights. + dtype: Data type of the computation (default: float32). + """ + + num_heads: int + num_layers: int + qkv_dim: int + mlp_dim: int + normalize_before: bool = False + norm: Optional[Callable[..., Any]] = None + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + *, + pos_embedding: Optional[jnp.ndarray] = None, + padding_mask: Optional[jnp.ndarray] = None, + train: bool = False) -> jnp.ndarray: + """Applies Encoder on the inputs. + + Args: + inputs: Input data. + pos_embedding: Positional Embedding to be added to the queries and keys in + the self-attention operation. + padding_mask: Binary mask containing 0 for padding tokens, and 1 + otherwise. + train: Whether it is training. + + Returns: + Output of the transformer encoder. + """ + assert inputs.ndim == 3 # `[batch, height*width, features]` + x = inputs + + # input Encoder + for lyr in range(self.num_layers): + x = EncoderBlock( + qkv_dim=self.qkv_dim, + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + pre_norm=self.normalize_before, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name=f'encoderblock_{lyr}', + dtype=self.dtype)( + x, + pos_embedding=pos_embedding, + padding_mask=padding_mask, + train=train) + + if self.norm is not None: + x = self.norm(x) + return x + + +class Decoder(nn.Module): + """DETR Transformer Decoder. + + Attributes: + num_heads: Number of heads. + num_layers: Number of layers. + qkv_dim: Dimension of the query/key/value. + mlp_dim: Dimension of the mlp on top of attention block. + normalize_before: If use LayerNorm before attention/mlp blocks. + return_intermediate: If return the outputs from intermediate layers. + padding_mask: Binary mask containing 0 for padding tokens. + dropout_rate:Dropout rate. + attention_dropout_rate:Dropout rate for attention weights. + dtype: Data type of the computation (default: float32). + """ + + num_heads: int + num_layers: int + qkv_dim: int + mlp_dim: int + normalize_before: bool = False + norm: Optional[Callable[..., Any]] = None + return_intermediate: bool = False + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + obj_queries: jnp.ndarray, + encoder_output: jnp.ndarray, + *, + key_padding_mask: Optional[jnp.ndarray] = None, + pos_embedding: Optional[jnp.ndarray] = None, + query_pos_emb: Optional[jnp.ndarray] = None, + train: bool = False) -> jnp.ndarray: + """Applies Decoder on the inputs. + + Args: + obj_queries: Input data for decoder. + encoder_output: Output of encoder, which are encoded inputs. + key_padding_mask: Binary mask containing 0 for padding tokens in the keys. + pos_embedding: Positional Embedding to be added to the keys. + query_pos_emb: Positional Embedding to be added to the queries. + train: Whether it is training. + + Returns: + Output of a transformer decoder. + """ + assert encoder_output.ndim == 3 # `[batch, len, features]` + assert obj_queries.ndim == 3 # `[batch, num queries, embedding size]` + y = obj_queries + outputs = [] + for lyr in range(self.num_layers): + y = DecoderBlock( + qkv_dim=self.qkv_dim, + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + pre_norm=self.normalize_before, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + dtype=self.dtype, + name=f'decoderblock_{lyr}')( + y, + encoder_output, + pos_embedding=pos_embedding, + query_pos_emb=query_pos_emb, + key_padding_mask=key_padding_mask, + train=train) + if self.return_intermediate: + outputs.append(y) + + if self.return_intermediate: + y = jnp.stack(outputs, axis=0) + return y if self.norm is None else self.norm(y) + + +class DETRTransformer(nn.Module): + """DETR Transformer. + + Attributes: + num_queries: Number of object queries. query_emb_size; Size of the embedding + learned for object queries. + query_emb_size: Size of the embedding learned for object queries. + num_heads: Number of heads. + num_encoder_layers: Number of encoder layers. + num_decoder_layers: Number of decoder layers. + qkv_dim: Dimension of the query/key/value. + mlp_dim: Dimension of the mlp on top of attention block. + return_intermediate_dec: If return the outputs from intermediate layers of + the decoder. + normalize_before: If use LayerNorm before attention/mlp blocks. + dropout_rate: Dropout rate. + attention_dropout_rate:Dropout rate for attention weights. + dtype: Data type of the computation (default: float32). + """ + + num_queries: int = 100 + query_emb_size: Optional[int] = None + num_heads: int = 8 + num_encoder_layers: int = 6 + num_decoder_layers: int = 6 + qkv_dim: int = 512 + mlp_dim: int = 2048 + return_intermediate_dec: bool = False + normalize_before: bool = False + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + *, + padding_mask: Optional[jnp.ndarray] = None, + pos_embedding: Optional[jnp.ndarray] = None, + query_pos_emb: Optional[jnp.ndarray] = None, + train: bool = False) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Applies DETRTransformer on the inputs. + + Args: + inputs: Input data. + padding_mask: Binary mask containing 0 for padding tokens. + pos_embedding: Positional Embedding to be added to the inputs. + query_pos_emb: Positional Embedding to be added to the queries. + train: Whether it is training. + + Returns: + Output of the DETR transformer and output of the encoder. + """ + encoder_norm = nn.LayerNorm() if self.normalize_before else None + encoded = Encoder( + num_heads=self.num_heads, + num_layers=self.num_encoder_layers, + qkv_dim=self.qkv_dim, + mlp_dim=self.mlp_dim, + normalize_before=self.normalize_before, + norm=encoder_norm, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + dtype=self.dtype, + name='encoder')( + inputs, + padding_mask=padding_mask, + pos_embedding=pos_embedding, + train=train) + + query_dim = self.query_emb_size or inputs.shape[-1] + obj_query_shape = tuple([inputs.shape[0], self.num_queries, query_dim]) + # Note that we always learn query_pos_embed, so we simply use constant + # zero vectors for obj_queries and later when applying attention, we have: + # query = query_pos_embed + obj_queries + obj_queries = jnp.zeros(obj_query_shape) + + decoder_norm = nn.LayerNorm() + output = Decoder( + num_heads=self.num_heads, + num_layers=self.num_decoder_layers, + qkv_dim=self.qkv_dim, + mlp_dim=self.mlp_dim, + normalize_before=self.normalize_before, + return_intermediate=self.return_intermediate_dec, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + norm=decoder_norm, + dtype=self.dtype, + name='decoder')( + obj_queries, + encoded, + key_padding_mask=padding_mask, + pos_embedding=pos_embedding, + query_pos_emb=query_pos_emb, + train=train) + return output, encoded + + +class BBoxCoordPredictor(nn.Module): + """FFN block for predicting bounding box coordinates.""" + mlp_dim: int + num_layers: int = 3 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + """Applies FFN MLP block to inputs. + + Args: + x: Input tensor. + + Returns: + Output of FFN MLP block. + """ + for _ in range(self.num_layers - 1): + # This is like pytorch initializes biases in linear layers. + bias_range = 1 / np.sqrt(x.shape[-1]) + x = nn.Dense( + self.mlp_dim, + kernel_init=pytorch_kernel_init(dtype=self.dtype), + bias_init=uniform_initializer( + -bias_range, bias_range, dtype=self.dtype), + dtype=self.dtype)( + x) + x = nn.relu(x) + + bias_range = 1 / np.sqrt(x.shape[-1]) + x = nn.Dense( + 4, + kernel_init=pytorch_kernel_init(dtype=self.dtype), + bias_init=uniform_initializer( + -bias_range, bias_range, dtype=self.dtype))( + x) + output = nn.sigmoid(x) + return output + + +class ObjectClassPredictor(nn.Module): + """Linear Projection block for predicting classification.""" + num_classes: int + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, inputs: jnp.ndarray) -> jnp.ndarray: + """Applies Linear Projection to inputs. + + Args: + inputs: Input data. + + Returns: + Output of Linear Projection block. + """ + bias_range = 1. / np.sqrt(inputs.shape[-1]) + return nn.Dense( + self.num_classes, + kernel_init=pytorch_kernel_init(dtype=self.dtype), + bias_init=uniform_initializer(-bias_range, bias_range, self.dtype), + dtype=self.dtype)( + inputs) + + +class DETR(nn.Module): + """Detection Transformer (DETR) model. + + Attributes: + num_classes: Number of object classes. + hidden_dim: Hidden dimension of the inputs to the model. + num_queries: Number of object queries, ie detection slot. This is the + maximal number of objects DETR can detect in a single image. For COCO, + DETR paper recommends 100 queries. + query_emb_size: Size of the embedding learned for object queries. + transformer_num_heads: Number of transformer heads. + transformer_num_encoder_layers: Number of transformer encoder layers. + transformer_num_decoder_layers: Number of transformer decoder layers. + transformer_qkv_dim: Dimension of the transformer query/key/value. + transformer_mlp_dim: Dimension of the mlp on top of attention block. + transformer_normalize_before: If use LayerNorm before attention/mlp blocks. + backbone_num_filters: Num filters in the ResNet backbone. + backbone_num_layers: Num layers in the ResNet backbone. + aux_loss: If train with auxiliary loss. + dropout_rate:Dropout rate. + attention_dropout_rate:Attention dropout rate. + dtype: Data type of the computation (default: float32). + """ + + num_classes: int + hidden_dim: int = 512 + num_queries: int = 100 + query_emb_size: Optional[int] = None + transformer_num_heads: int = 8 + transformer_num_encoder_layers: int = 6 + transformer_num_decoder_layers: int = 6 + transformer_qkv_dim: int = 512 + transformer_mlp_dim: int = 2048 + transformer_normalize_before: bool = False + backbone_num_filters: int = 64 + backbone_num_layers: int = 50 + aux_loss: bool = False + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + train: bool, + *, + padding_mask: Optional[jnp.ndarray] = None, + update_batch_stats: bool = False, + debug: bool = False) -> Dict[str, Any]: + """Applies DETR model on the input. + + Args: + inputs: Input data. + train: Whether it is training. + padding_mask: Binary matrix with 0 at padded image regions. + update_batch_stats: Whether update the batch statistics for the BatchNorms + in the backbone. if None, the value of `train` flag will be used, i.e. + we update the batch stat if we are in the train mode. + debug: Whether the debug mode is enabled. debug=True enables model + specific logging/storing some values using jax.host_callback. + + Returns: + Output: dit; that has 'pred_logits' and 'pred_boxes', and potentially + 'aux_outputs'. + """ + # for now, we only support this case + assert self.hidden_dim == self.transformer_qkv_dim + + if update_batch_stats is None: + update_batch_stats = train + + backbone_features = resnet.ResNet( + num_outputs=None, + num_filters=self.backbone_num_filters, + num_layers=self.backbone_num_layers, + dtype=self.dtype, + name='backbone')( + inputs, train=update_batch_stats) + x = backbone_features['stage_4'] + + bs, h, w, _ = x.shape + + if padding_mask is None: + padding_mask_downsampled = jnp.ones((bs, h, w), dtype=jnp.bool_) + else: + padding_mask_downsampled = jax.image.resize( + padding_mask.astype(jnp.float32), shape=[bs, h, w], + method='nearest').astype(jnp.bool_) + pos_emb = InputPosEmbeddingSine(hidden_dim=self.hidden_dim)( + padding_mask_downsampled) + + query_pos_emb = QueryPosEmbedding( + hidden_dim=self.hidden_dim, num_queries=self.num_queries)() + + # project and reshape to 3 dimensions and project + x = nn.Conv(features=self.hidden_dim, kernel_size=(1, 1), strides=(1, 1))(x) + x = x.reshape(bs, h * w, self.hidden_dim) + transformer_input = x + + return_intermediate = self.aux_loss + transformer = DETRTransformer( + num_queries=self.num_queries, + query_emb_size=self.query_emb_size, + num_heads=self.transformer_num_heads, + num_encoder_layers=self.transformer_num_encoder_layers, + num_decoder_layers=self.transformer_num_decoder_layers, + qkv_dim=self.transformer_qkv_dim, + mlp_dim=self.transformer_mlp_dim, + return_intermediate_dec=return_intermediate, + normalize_before=self.transformer_normalize_before, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate) + decoder_output, encoder_output = transformer( + x, + padding_mask=jnp.reshape(padding_mask_downsampled, [bs, h * w]), + pos_embedding=pos_emb, + query_pos_emb=query_pos_emb, + train=train) + + def output_projection(model_output): + # classification head + pred_logits = ObjectClassPredictor(num_classes=self.num_classes)( + model_output) + # bounding box detection head + pred_boxes = BBoxCoordPredictor(mlp_dim=self.hidden_dim)(model_output) + return pred_logits, pred_boxes + + if not return_intermediate: + pred_logits, pred_boxes = output_projection(decoder_output) + return {'pred_logits': pred_logits, 'pred_boxes': pred_boxes} + + pred_logits, pred_boxes = jax.vmap(output_projection)(decoder_output) + output = { + 'pred_logits': pred_logits[-1], + 'pred_boxes': pred_boxes[-1], + 'transformer_input': transformer_input, + 'backbone_features': backbone_features, + 'encoder_output': encoder_output, + 'decoder_output': decoder_output[-1], + 'padding_mask': padding_mask_downsampled, + } + + if self.aux_loss: + output['aux_outputs'] = [] + for lgts, bxs in zip(pred_logits[:-1], pred_boxes[:-1]): + output['aux_outputs'].append({'pred_logits': lgts, 'pred_boxes': bxs}) + + return output + + +class DETRModel(detr_base_model.ObjectDetectionWithMatchingModel): + """Detr model for object detection task.""" + + def build_flax_model(self): + return DETR( + num_classes=self.dataset_meta_data['num_classes'], + hidden_dim=self.config.get('hidden_dim', 512), + num_queries=self.config.get('num_queries', 100), + query_emb_size=self.config.get('query_emb_size', None), + transformer_num_heads=self.config.get('transformer_num_heads', 8), + transformer_num_encoder_layers=self.config.get( + 'transformer_num_encoder_layers', 6), + transformer_num_decoder_layers=self.config.get( + 'transformer_num_decoder_layers', 6), + transformer_qkv_dim=self.config.get('transformer_qkv_dim', 512), + transformer_mlp_dim=self.config.get('transformer_mlp_dim', 2048), + transformer_normalize_before=self.config.get( + 'transformer_normalize_before', False), + backbone_num_filters=self.config.get('backbone_num_filters', 64), + backbone_num_layers=self.config.get('backbone_num_layers', 50), + aux_loss=self.config.get('aux_loss', False), + dropout_rate=self.config.get('dropout_rate', 0.0), + attention_dropout_rate=self.config.get('attention_dropout_rate', 0.0), + dtype=jnp.float32) + + def default_flax_model_config(self): + return ml_collections.ConfigDict( + dict( + hidden_dim=32, + num_queries=8, + query_emb_size=None, + transformer_num_heads=2, + transformer_num_encoder_layers=1, + transformer_num_decoder_layers=1, + transformer_qkv_dim=32, + transformer_mlp_dim=32, + transformer_normalize_before=False, + backbone_num_filters=32, + backbone_num_layers=1, + aux_loss=False, + dropout_rate=0.0, + attention_dropout_rate=0.0)) diff --git a/scenic/projects/baselines/detr/requirements.txt b/scenic/projects/baselines/detr/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..2e66adbc3b69064f53553fa5ebc73900017d76f6 --- /dev/null +++ b/scenic/projects/baselines/detr/requirements.txt @@ -0,0 +1,2 @@ +pycocotools +ott-jax>=0.2.0 diff --git a/scenic/projects/baselines/detr/tests/__init__.py b/scenic/projects/baselines/detr/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/detr/tests/test_datasets.py b/scenic/projects/baselines/detr/tests/test_datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..7f257444e2e0c40a29efab3002a30cf21b3130aa --- /dev/null +++ b/scenic/projects/baselines/detr/tests/test_datasets.py @@ -0,0 +1,38 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for datasets.""" + +from absl.testing import absltest +from absl.testing import parameterized +from scenic.dataset_lib import datasets +from scenic.projects.baselines.detr import input_pipeline_detection # pylint: disable=unused-import + + +EXPECTED_DATASETS = frozenset([ + 'coco_detr_detection', +]) + + +class DatasetsTest(parameterized.TestCase): + """Unit tests for datasets.py.""" + + @parameterized.named_parameters(*zip(EXPECTED_DATASETS, EXPECTED_DATASETS)) + def test_available(self, name): + """Test the a given dataset is available.""" + self.assertIsNotNone(datasets.get_dataset(name)) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/baselines/detr/tests/test_detr_base_model.py b/scenic/projects/baselines/detr/tests/test_detr_base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..ffa3a7b071acfe49354a306bfd708afd50e30701 --- /dev/null +++ b/scenic/projects/baselines/detr/tests/test_detr_base_model.py @@ -0,0 +1,320 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit test for the components in detr_base_model.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.projects.baselines.detr import detr_base_model + +NUM_CLASSES = 81 # Lets say 80 classes + background. +BBOX_LOSS_COEF = 1.0 +GIOU_LOSS_COEF = 0.1 +CE_LOSS_COEF = 2.0 +EOS_COEF = 0.1 +NUM_AUX_OUTPUTS = 2 + + +class MyObjectDetectionWithMatchingModel( + detr_base_model.ObjectDetectionWithMatchingModel): + """A dummy set detection model for testing purposes.""" + + def __init__(self, config=None, dataset_meta_data=None): + dataset_meta_data = {'num_classes': NUM_CLASSES, 'target_is_onehot': False} + self.losses_and_metrics = ['labels', 'boxes'] + config = config or ml_collections.ConfigDict() + config.aux_loss = True + config.bbox_loss_coef = BBOX_LOSS_COEF + config.giou_loss_coef = GIOU_LOSS_COEF + config.class_loss_coef = CE_LOSS_COEF + config.eos_coef = EOS_COEF + self.loss_terms_weights = { + 'loss_class': config.class_loss_coef, + 'loss_bbox': config.bbox_loss_coef, + 'loss_giou': config.giou_loss_coef, + } + super().__init__(config, dataset_meta_data) + + def build_flax_model(self): + pass + + +def fake_model_outputs_batch(num_boxes): + """Generate fake data that resembles model `outputs` `batch` `indices`. + + See ObjectDetectionWithMatchingModel's loss_* functions for more details + regarding the format of these dictionaries. The batch-size is hard-coded to + 3 because `indices` are manually synthesized. + + Args: + num_boxes: int; Number of boxes in the data. + + Returns: + `outputs`: dict; Dictionary of model predictions. + `batch`: dict; Dictionary of None inputs and fake ground truth targets. + `indices`: nd-array; Indices matching the structure returned by a matcher. + """ + np.random.seed(num_boxes) + + outputs = { + 'pred_logits': + jnp.array( + np.random.normal(size=(3, num_boxes, NUM_CLASSES)), + dtype=jnp.float32), + 'pred_boxes': + jnp.array( + np.random.uniform(size=(3, num_boxes, 4), low=0.0, high=1.0), + dtype=jnp.float32), + 'pred_masks': + jnp.array( + np.random.uniform(size=(3, num_boxes, 8, 8), low=0.0, high=1.0), + dtype=jnp.float32), + } + aux_outputs = [dict(outputs), dict(outputs)] + outputs['aux_outputs'] = aux_outputs + batch = { + 'inputs': None, + 'label': { + 'labels': + jnp.array(np.random.randint(NUM_CLASSES, size=(3, num_boxes))), + 'boxes': + jnp.array( + np.random.uniform(size=(3, num_boxes, 4), low=0.0, high=1.0), + dtype=jnp.float32), + 'masks': + jnp.array( + np.argsort( + np.random.uniform(size=(3, num_boxes, 16, 16)), + axis=1) == 0, + dtype=jnp.float32), + 'image/id': + jnp.array([87038, 348881, 143931]), + 'orig_size': + jnp.array( + np.random.uniform(size=(3, 2), low=1, high=100), + dtype=jnp.int32), + } + } + + seq = np.arange(num_boxes, dtype=np.int32) + seq_rev = seq[::-1] + seq_21 = np.concatenate([seq[num_boxes // 2:], seq[:num_boxes // 2]]) + indices = np.array([(seq, seq_rev), (seq_rev, seq), (seq, seq_21)]) + + return outputs, batch, indices + + +class TestObjectDetectionWithMatchingModel(parameterized.TestCase): + """Test ObjectDetectionWithMatchingModel.""" + + def is_valid(self, t): + """Helper function to assert that tensor `t` does not have `nan`, `inf`.""" + self.assertFalse(jnp.isnan(t).any(), msg=f'Found nan\'s in {t}') + self.assertFalse(jnp.isinf(t).any(), msg=f'Found inf\'s in {t}') + + def is_valid_loss(self, loss): + """Helper function to assert that `loss` is of shape [] and `is_valid`.""" + self.assertSequenceEqual(loss.shape, []) + self.is_valid(loss) + + @parameterized.named_parameters( + ('num_boxes_8_without_log', 8, False, ['loss_class'], False), + ('num_boxes_8_without_log_focal', 8, False, ['loss_class'], True), + ('num_boxes_8_with_log', 8, True, + ['loss_class', 'class_accuracy', 'class_accuracy_not_pad'], False), + ('num_boxes_3_without_log', 3, False, ['loss_class'], False), + ('num_boxes_3_without_log_focal', 3, False, ['loss_class'], True), + ('num_boxes_3_with_log', 3, True, + ['loss_class', 'class_accuracy', 'class_accuracy_not_pad'], False)) + def test_labels_losses_and_metrics(self, num_boxes, log, metrics_key, + focal_loss): + """Test loss_labels by checking its output's dictionary format. + + Args: + num_boxes: int; Number of boxes used for creating the flax model. + log: bool; Whether do logging or not in labels_losses_and_metrics. + metrics_key: list; Expected metric keys. + focal_loss: bool; Whether to use focal loss. + """ + config = ml_collections.ConfigDict() + config.focal_loss = focal_loss + model = MyObjectDetectionWithMatchingModel(config=config) + outputs, batch, indices = fake_model_outputs_batch(num_boxes) + + # Test loss function in the pmapped setup: + def function_to_pmap(outputs, batch): + return model.labels_losses_and_metrics(outputs, batch, indices, log) # pytype: disable=wrong-arg-types # jax-ndarray + + labels_lm_pmapped = jax.pmap(function_to_pmap, axis_name='batch') + + outputs, batch = (jax_utils.replicate(outputs), jax_utils.replicate(batch)) + losses, metrics = labels_lm_pmapped(outputs, batch) + losses = jax_utils.unreplicate(losses) + metrics = jax_utils.unreplicate(metrics) + self.assertSameElements(['loss_class'], losses.keys()) + self.is_valid_loss(losses['loss_class']) + self.assertSameElements(metrics_key, metrics.keys()) + for mk in metrics_key: + self.is_valid(metrics[mk][0]) + self.is_valid(metrics[mk][1]) + + @parameterized.named_parameters(('num_boxes_4', 4), ('num_boxes_9', 9)) + def test_boxes_losses_and_metrics(self, num_boxes): + """Test loss_boxes by checking its output's dictionary format.""" + model = MyObjectDetectionWithMatchingModel() + outputs, batch, indices = fake_model_outputs_batch(num_boxes) + + # Test loss function in the pmapped setup: + boxes_lm_pmapped = jax.pmap( + lambda o, b: model.boxes_losses_and_metrics(o, b, indices), + axis_name='batch') + + outputs_replicate, batch_replicate = (jax_utils.replicate(outputs), + jax_utils.replicate(batch)) + + losses, metrics = boxes_lm_pmapped(outputs_replicate, batch_replicate) + losses = jax_utils.unreplicate(losses) + metrics = jax_utils.unreplicate(metrics) + + self.assertSameElements(['loss_bbox', 'loss_giou'], losses.keys()) + self.is_valid_loss(losses['loss_bbox']) + self.is_valid_loss(losses['loss_giou']) + + self.assertSameElements(['loss_bbox', 'loss_giou'], metrics.keys()) + for i in range(2): # metric and its normalizer + self.is_valid(metrics['loss_bbox'][i]) + self.is_valid(metrics['loss_giou'][i]) + + # Check whether hard-wiring boxes to match and hard-wiring indices to align + # gives loss_bbox = 0.0 and loss_giou = 1.0: + outputs['pred_boxes'] = batch['label']['boxes'] + indices = jnp.stack([indices[:, 0, :], indices[:, 0, :]], axis=1) + outputs_replicate, batch_replicate = (jax_utils.replicate(outputs), + jax_utils.replicate(batch)) + boxes_lm_pmapped = jax.pmap( + lambda o, b: model.boxes_losses_and_metrics(o, b, indices), + axis_name='batch') + losses, metrics = boxes_lm_pmapped(outputs_replicate, batch_replicate) + losses = jax_utils.unreplicate(losses) + metrics = jax_utils.unreplicate(metrics) + + self.assertAlmostEqual(losses['loss_bbox'], 0.0, places=4) + self.assertAlmostEqual(losses['loss_giou'], 0.0, places=4) + + self.assertAlmostEqual( + metrics['loss_bbox'][0] / metrics['loss_bbox'][1], 0.0, places=5) + self.assertAlmostEqual( + metrics['loss_giou'][0] / metrics['loss_giou'][1], 0.0, places=4) + + @parameterized.named_parameters(('num_boxes_5', 5), ('num_boxes_6', 6)) + def test_loss_function(self, num_boxes): + """Test loss_function by checking its output's dictionary format.""" + model = MyObjectDetectionWithMatchingModel() + outputs, batch, indices = fake_model_outputs_batch(num_boxes) + outputs_noaux = dict(outputs) + outputs_noaux.pop('aux_outputs') + + outputs_replicated, batch_replicated = (jax_utils.replicate(outputs_noaux), + jax_utils.replicate(batch)) + + # Test loss function in the pmapped setup: + loss_function_pmapped = jax.pmap(model.loss_function, axis_name='batch') + outputs_replicated = jax_utils.replicate(outputs) + + indices_replicated = jax_utils.replicate( + # Fake matching for the final output + 2 aux outputs: + [indices] * 3) + total_loss, metrics_dict = loss_function_pmapped(outputs_replicated, + batch_replicated, + indices_replicated) + + total_loss, metrics_dict = (jax_utils.unreplicate(total_loss), + jax_utils.unreplicate(metrics_dict)) + + # Collect what keys we expect to find in the metrics_dict: + base = [ + 'class_accuracy', 'loss_class', 'loss_bbox', 'loss_giou', 'total_loss', + 'loss_class_aux_0', 'loss_bbox_aux_0', 'loss_giou_aux_0', + 'loss_class_aux_1', 'loss_bbox_aux_1', 'loss_giou_aux_1', + 'class_accuracy_not_pad' + ] + base_unscaled = [] + for b in base: + if b.split('_aux_')[0] in model.loss_terms_weights.keys(): + base_unscaled.append(b + '_unscaled') + else: + base_unscaled.append(b) + base_scaled = [ + 'loss_class', + 'loss_bbox', + 'loss_giou', + 'loss_class_aux_0', + 'loss_bbox_aux_0', + 'loss_giou_aux_0', + 'loss_class_aux_1', + 'loss_bbox_aux_1', + 'loss_giou_aux_1', + ] + expected_metrics_keys = base_unscaled + base_scaled + self.assertSameElements(expected_metrics_keys, metrics_dict.keys()) + + # Because weight decay is not used, the following must hold: + object_detection_loss = 0 + for k in metrics_dict.keys(): + b = k.split('_aux_')[0] + # If this loss is included in the total object detection loss... + if '_unscaled' not in k and b in model.loss_terms_weights.keys(): + # ...get the normalizer for this loss: + object_detection_loss += ( + # Already scaled loss term / loss term normalizer: + metrics_dict[k][0] / metrics_dict[k][1]) + self.assertAlmostEqual(total_loss, object_detection_loss, places=5) + + def test_auxiliary_loss_consistency(self): + """Test whether loss_function for the output and aux_outputs is same.""" + + model = MyObjectDetectionWithMatchingModel() + outputs, batch, indices = fake_model_outputs_batch(num_boxes=4) + + # Test loss function in the pmapped setup: + loss_function_pmapped = jax.pmap(model.loss_function, axis_name='batch') + + indices_replicated = jax_utils.replicate( + # Fake matching for the final output + 2 aux outputs: + [indices] * 3) + outputs_replicated, batch_replicated = (jax_utils.replicate(outputs), + jax_utils.replicate(batch)) + _, metrics_dict = loss_function_pmapped(outputs_replicated, + batch_replicated, + indices_replicated) + + metrics_dict = jax_utils.unreplicate(metrics_dict) + + for key in ['loss_class', 'loss_bbox', 'loss_giou']: + for i in range(NUM_AUX_OUTPUTS): + self.assertAlmostEqual( + metrics_dict[key + '_unscaled'], + metrics_dict[key + f'_aux_{i}_unscaled'], + places=5) + self.assertAlmostEqual( + metrics_dict[key], metrics_dict[key + f'_aux_{i}'], places=5) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/baselines/detr/tests/test_model.py b/scenic/projects/baselines/detr/tests/test_model.py new file mode 100644 index 0000000000000000000000000000000000000000..691bdde20e728bfd2ba3a2f7e90350cc648e1c26 --- /dev/null +++ b/scenic/projects/baselines/detr/tests/test_model.py @@ -0,0 +1,412 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for model.py.""" + +import functools + +from absl.testing import absltest +from absl.testing import parameterized +from flax import jax_utils +from flax import traverse_util +from flax.core import unfreeze +import jax +from jax import random +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.projects.baselines.detr import model + + +class DETRModulesTest(parameterized.TestCase): + """Tests for detr model.py.""" + + def test_input_pos_embedding_learned(self): + """Tests InputPosEmbeddingLearned.""" + rng = random.PRNGKey(0) + inputs_shape = (8, 32, 19, 64) + + positional_embedding_def = model.InputPosEmbeddingLearned( + inputs_shape=inputs_shape, hidden_dim=64, max_h_w=50) + pos, _ = positional_embedding_def.init_with_output(rng) + # test output shape + self.assertEqual(pos.shape, (1, 32 * 19, 64)) + + def test_input_pos_embedding_sine(self): + """Tests InputPosEmbeddingSine.""" + rng = random.PRNGKey(0) + b, h, w, hidden = (8, 32, 19, 64) + padding_mask = np.zeros((b, h, w)) + padding_mask[:, 16:, :] = 0 + padding_mask[:, :, 16:] = 0 + + positional_embedding_def = model.InputPosEmbeddingSine(hidden_dim=hidden) + pos, _ = positional_embedding_def.init_with_output(rng, padding_mask) + # test output shape + self.assertEqual(pos.shape, (b, h * w, hidden)) + + def test_query_pos_embedding(self): + """Tests QueryPosEmbedding.""" + rng = random.PRNGKey(0) + positional_embedding_def = model.QueryPosEmbedding( + hidden_dim=64, num_queries=100) + query_pos, _ = positional_embedding_def.init_with_output(rng) + # test output shape + self.assertEqual(query_pos.shape, (1, 100, 64)) + + @parameterized.named_parameters( + ('test_without_intermediate', False, (8, 100, 64)), + ('test_with_intermediate', True, (6, 8, 100, 64)), + ) + def test_detr_transformer_output_shape(self, return_intermediate, + expected_output_shape): + """Test DETRTransformer output shape.""" + rng = random.PRNGKey(0) + inputs_shape = (8, 20 * 20, 64) + num_query_objects = 100 + num_decoder_layers = 6 + inputs = jnp.array(np.random.normal(size=inputs_shape)) + query_pos_emb = jnp.array(np.random.normal(size=(1, num_query_objects, 64))) + + # test output shape of DETR Transformer model + detr_transformer_def = model.DETRTransformer( + num_queries=num_query_objects, + qkv_dim=64, + num_heads=4, + num_decoder_layers=num_decoder_layers, + return_intermediate_dec=return_intermediate) + + (outputs, _), _ = detr_transformer_def.init_with_output( + rng, inputs, query_pos_emb=query_pos_emb) + self.assertEqual(outputs.shape, expected_output_shape) + + +class DETRModelTest(parameterized.TestCase): + """Test DETRModel.""" + + def setUp(self): + super(DETRModelTest, self).setUp() + + self.num_classes = 5 + self.input_shape = (3, 128, 128, 3) + + # create and initialize the model + model_cls = model.DETRModel + config = ml_collections.ConfigDict( + dict( + hidden_dim=32, + num_queries=8, + query_emb_size=None, + transformer_num_heads=2, + transformer_num_encoder_layers=1, + transformer_qkv_dim=32, + transformer_mlp_dim=32, + transformer_normalize_before=False, + backbone_num_filters=32, + backbone_num_layers=14, + dropout_rate=0.1, + attention_dropout_rate=0.1, + class_loss_coef=1.0, + bbox_loss_coef=1.0, + giou_loss_coef=1.0, + eos_coef=1.0, + aux_loss=False, + transformer_num_decoder_layers=3, + )) + self.model = model_cls( + config=config, + dataset_meta_data={ + 'num_classes': self.num_classes, + 'target_is_onehot': False, + }) + rng = random.PRNGKey(0) + initial_params = self.model.flax_model.init( + rng, jnp.zeros(self.input_shape, jnp.float32), train=False) + flax_model = functools.partial( + self.model.flax_model.apply, + initial_params, + mutable=['intermediates'], + capture_intermediates=lambda mdl, _: mdl.name == 'attn_weights') + + # a fake batch with 3 examples + self.batch = { + 'inputs': + jnp.array(np.random.normal(size=self.input_shape) + ).astype(jnp.float32), + 'padding_mask': + jnp.array(np.random.normal(size=self.input_shape[:-1]) + ).astype(jnp.float32), + 'label': { + 'labels': + jnp.array( + np.random.randint( + self.num_classes, + size=(3, self.model.config.num_queries))), + 'boxes': + jnp.array( + np.random.uniform( + size=(3, self.model.config.num_queries, 4), + low=0.0, + high=1.0), + dtype=jnp.float32), + } + } + + self.outputs, self.variables = flax_model( + self.batch['inputs'], + padding_mask=self.batch['padding_mask'], + train=False) + + seq = np.arange(self.model.config.num_queries, dtype=np.int32) + seq_rev = seq[::-1] + seq_21 = np.concatenate([ + seq[self.model.config.num_queries // 2:], + seq[:self.model.config.num_queries // 2] + ]) + self.indices = jnp.array([(seq, seq_rev), (seq_rev, seq), (seq, seq_21)]) + + def is_valid(self, t): + """Helper function to assert that tensor `t` does not have `nan`, `inf`.""" + self.assertFalse(jnp.isnan(t).any(), msg=f'Found nan\'s in {t}') + self.assertFalse(jnp.isinf(t).any(), msg=f'Found inf\'s in {t}') + + def is_valid_loss(self, loss): + """Helper function to assert that `loss` is of shape [] and `is_valid`.""" + self.assertSequenceEqual(loss.shape, []) + self.is_valid(loss) + + @parameterized.named_parameters( + ('without_log', False, ['loss_class']), + ('with_log', True, + ['loss_class', 'class_accuracy', 'class_accuracy_not_pad'])) + def test_labels_losses_and_metrics(self, log, metrics_key): + """Test loss_labels by checking its output's dictionary format. + + Args: + log: bool; Whether do logging or not in labels_losses_and_metrics. + metrics_key: list; Expected metric keys. + """ + + def f_to_pmap(outputs, batch): + return self.model.labels_losses_and_metrics( + outputs, batch, indices=self.indices, log=log) + + # test loss function in the pmapped setup + labels_lm_pmapped = jax.pmap(f_to_pmap, axis_name='batch') + + outputs, batch = (jax_utils.replicate(self.outputs), + jax_utils.replicate(self.batch)) + + losses, metrics = labels_lm_pmapped(outputs, batch) + losses = jax_utils.unreplicate(losses) + metrics = jax_utils.unreplicate(metrics) + self.assertSameElements(losses.keys(), ['loss_class']) + self.is_valid_loss(losses['loss_class']) + self.assertSameElements(metrics.keys(), metrics_key) + for mk in metrics_key: + self.is_valid(metrics[mk][0]) + self.is_valid(metrics[mk][1]) + + def test_boxes_losses_and_metrics(self): + """Test loss_boxes by checking its output's dictionary format.""" + + def f_to_pmap(outputs, batch): + return self.model.boxes_losses_and_metrics( + outputs, batch, indices=self.indices) + + # test loss function in the pmapped setup + boxes_lm_pmapped = jax.pmap(f_to_pmap, axis_name='batch') + + outputs_replicate, batch_replicate = (jax_utils.replicate(self.outputs), + jax_utils.replicate(self.batch)) + + losses, metrics = boxes_lm_pmapped(outputs_replicate, batch_replicate) + losses = jax_utils.unreplicate(losses) + metrics = jax_utils.unreplicate(metrics) + + self.assertSameElements(losses.keys(), ['loss_bbox', 'loss_giou']) + self.is_valid_loss(losses['loss_bbox']) + self.is_valid_loss(losses['loss_giou']) + + self.assertSameElements(metrics.keys(), ['loss_bbox', 'loss_giou']) + for i in range(2): # metric and its normalizer + self.is_valid(metrics['loss_bbox'][i]) + self.is_valid(metrics['loss_giou'][i]) + + def test_intermediates(self): + """Test the capture of intermediates.""" + + intermediates = self.variables['intermediates'] + keys = traverse_util.flatten_dict(unfreeze(intermediates)).keys() + actual = ['/'.join(key) for key in keys] + expected = [ + 'DETRTransformer_0/decoder/decoderblock_0/MultiHeadDotProductAttention_0/attn_weights/__call__', + 'DETRTransformer_0/decoder/decoderblock_0/MultiHeadDotProductAttention_1/attn_weights/__call__', + 'DETRTransformer_0/decoder/decoderblock_1/MultiHeadDotProductAttention_0/attn_weights/__call__', + 'DETRTransformer_0/decoder/decoderblock_1/MultiHeadDotProductAttention_1/attn_weights/__call__', + 'DETRTransformer_0/decoder/decoderblock_2/MultiHeadDotProductAttention_0/attn_weights/__call__', + 'DETRTransformer_0/decoder/decoderblock_2/MultiHeadDotProductAttention_1/attn_weights/__call__', + 'DETRTransformer_0/encoder/encoderblock_0/MultiHeadDotProductAttention_0/attn_weights/__call__', + ] + self.assertSameElements(expected, actual) + + +class DETRModelTestWithAuxLoss(parameterized.TestCase): + """Test DETRModel with auxilary loss.""" + + def setUp(self): + super(DETRModelTestWithAuxLoss, self).setUp() + + self.num_classes = 5 + self.input_shape = (3, 128, 128, 3) + config = ml_collections.ConfigDict( + dict( + hidden_dim=32, + num_queries=8, + query_emb_size=None, + transformer_num_heads=2, + transformer_num_encoder_layers=1, + transformer_qkv_dim=32, + transformer_mlp_dim=32, + transformer_normalize_before=False, + backbone_num_filters=32, + backbone_num_layers=14, + dropout_rate=0.1, + class_loss_coef=1.0, + bbox_loss_coef=1.0, + giou_loss_coef=1.0, + eos_coef=1.0, + # for this test: + aux_loss=True, + transformer_num_decoder_layers=3, + )) + + # create and initialize the model + model_cls = model.DETRModel + self.model = model_cls( + config=config, + dataset_meta_data={ + 'num_classes': self.num_classes, + 'target_is_onehot': False, + }) + + rng = random.PRNGKey(0) + initial_params = self.model.flax_model.init( + rng, jnp.zeros(self.input_shape, jnp.float32), train=False) + flax_model = functools.partial(self.model.flax_model.apply, initial_params) + + # a fake batch with 3 examples + self.batch = { + 'inputs': + jnp.array(np.random.normal(size=self.input_shape) + ).astype(jnp.float32), + 'padding_mask': + jnp.array(np.random.normal(size=self.input_shape[:-1]) + ).astype(jnp.float32), + 'label': { + 'labels': + jnp.array( + np.random.randint( + self.num_classes, + size=(3, self.model.config.num_queries))), + 'boxes': + jnp.array( + np.random.uniform( + size=(3, self.model.config.num_queries, 4), + low=0.0, + high=1.0), + dtype=jnp.float32), + } + } + self.outputs = flax_model( + self.batch['inputs'], + padding_mask=self.batch['padding_mask'], + train=False) + + seq = np.arange(self.model.config.num_queries, dtype=np.int32) + seq_rev = seq[::-1] + seq_21 = np.concatenate([ + seq[self.model.config.num_queries // 2:], + seq[:self.model.config.num_queries // 2] + ]) + self.indices = jnp.array([(seq, seq_rev), (seq_rev, seq), (seq, seq_21)]) + + def test_loss_function(self): + """Test loss_function by checking its output's dictionary format.""" + + # test loss function in the pmapped setup + loss_function_pmapped = jax.pmap( + self.model.loss_function, axis_name='batch') + + matches = jax_utils.replicate( + # fake matching for the final output + 2 aux outputs + [self.indices] * 3) + outputs_replicated, batch_replicated = (jax_utils.replicate(self.outputs), + jax_utils.replicate(self.batch)) + total_loss, metrics_dict = loss_function_pmapped( + outputs_replicated, batch_replicated, matches=matches) + + total_loss, metrics_dict = (jax_utils.unreplicate(total_loss), + jax_utils.unreplicate(metrics_dict)) + + # collect what keys we expect to find in the metrics_dict + base = [ + 'class_accuracy', + 'loss_class', + 'loss_bbox', + 'loss_giou', + 'total_loss', + 'loss_class_aux_0', + 'loss_bbox_aux_0', + 'loss_giou_aux_0', + 'loss_class_aux_1', + 'loss_bbox_aux_1', + 'loss_giou_aux_1', + 'class_accuracy_not_pad', + ] + base_unscaled = [] + for b in base: + if b.split('_aux_')[0] in self.model.loss_terms_weights.keys(): + base_unscaled.append(b + '_unscaled') + else: + base_unscaled.append(b) + base_scaled = [ + 'loss_class', + 'loss_bbox', + 'loss_giou', + 'loss_class_aux_0', + 'loss_bbox_aux_0', + 'loss_giou_aux_0', + 'loss_class_aux_1', + 'loss_bbox_aux_1', + 'loss_giou_aux_1', + ] + expected_metrics_keys = base_unscaled + base_scaled + self.assertSameElements(expected_metrics_keys, metrics_dict.keys()) + + # because weight decay is not used, the following must hold + object_detection_loss = 0 + for k in metrics_dict.keys(): + b = k.split('_aux_')[0] + # if this loss going to be included in the total object dtection loss + if '_unscaled' not in k and b in self.model.loss_terms_weights.keys(): + # get the normalizer for this loss + object_detection_loss += ( + # already scaled loss term / loss term normalizer + metrics_dict[k][0] / metrics_dict[k][1]) + self.assertAlmostEqual(total_loss, object_detection_loss, places=3) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/baselines/detr/tests/test_train_utils.py b/scenic/projects/baselines/detr/tests/test_train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..d6c88185b760e4b4aaa653a0d2901179f576b5a4 --- /dev/null +++ b/scenic/projects/baselines/detr/tests/test_train_utils.py @@ -0,0 +1,248 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for functions in train_utils.py.""" + +import collections +import os + +from absl.testing import absltest +from absl.testing import parameterized +import jax +import jax.numpy as jnp +import numpy as np +from scenic.projects.baselines.detr import train_utils as detr_train_utils + +NUM_COCO_CLASSES = 81 # COCO (non-panoptic) uses 80 classes, + background. + + +def sample_cxcywh_bbox(key, batch_shape): + """Samples a bounding box in the [cx, cy, w, h] in [0, 1] range format.""" + frac = 0.8 + sample = jax.random.uniform(key, shape=(*batch_shape, 4)) * frac + cx, cy, w, h = jnp.split(sample, indices_or_sections=4, axis=-1) + # Make sure the bounding box doesn't cross the right and top image borders + w = jnp.where(cx + w / 2. >= 1., frac * 2. * (1. - cx), w) + h = jnp.where(cy + h / 2. >= 1., frac * 2. * (1. - cy), h) + # Make sure the bounding box doesn't cross the left and bottom image borders + w = jnp.where(cx - w / 2. <= 0., frac * 2. * cx, w) + h = jnp.where(cy - h / 2. <= 0., frac * 2. * cy, h) + + bbox = jnp.concatenate([cx, cy, w, h], axis=-1) + return bbox + + +class TrainUtilsTest(parameterized.TestCase): + """Test train utilities.""" + + def setUp(self): + """Setup sample output predictions and target labels and bounding boxes.""" + super().setUp() + + self.batchsize = 4 + self.num_classes = 81 + self.max_num_boxes = 63 + self.num_preds = 100 + + key = jax.random.PRNGKey(0) + + # Create fake predictions and targets + key, subkey = jax.random.split(key) + # set probabilities for class 0 higher than others + p_logits = jnp.ones(self.num_classes).at[0].set(5.) + p = jax.nn.softmax(p_logits) + tgt_labels = jax.random.choice( + subkey, + self.num_classes, + shape=(self.batchsize, self.max_num_boxes), + replace=True, + p=p) + # Ensure last target is dummy empty target. + tgt_labels = tgt_labels.at[:, -1].set(0) + onehot_tgt_labels = jax.nn.one_hot(tgt_labels, self.num_classes) + + key, subkey = jax.random.split(key) + pred_logits = jax.random.normal( + subkey, shape=(self.batchsize, self.num_preds, self.num_classes)) + pred_probs = jax.nn.softmax(pred_logits, axis=-1) + + key, subkey = jax.random.split(key) + pred_bbox = sample_cxcywh_bbox( + subkey, batch_shape=(self.batchsize, self.num_preds)) + + key, subkey = jax.random.split(key) + tgt_bbox = sample_cxcywh_bbox( + subkey, batch_shape=(self.batchsize, self.max_num_boxes)) + + self.outputs = {'pred_probs': pred_probs, 'pred_boxes': pred_bbox} + self.targets = {'labels': tgt_labels, 'boxes': tgt_bbox} + self.onehot_targets = {'labels': onehot_tgt_labels, 'boxes': tgt_bbox} + + def test_coco_global_val_metrics_function_results(self): + """Test coco_global_metrics_function correctness on a single box.""" + data_dir = os.path.join( + os.path.normpath(os.path.dirname(__file__) + '/../../../../'), + 'dataset_lib', 'coco_dataset', 'data') + test_annotations_path = os.path.join( + data_dir, 'instances_val2017_unittest.json') + outputs, targets = _get_fake_detection_example() + + global_metrics_evaluator = detr_train_utils.DetrGlobalEvaluator( + 'coco_detr_detection', annotations_loc=test_annotations_path) + global_metrics_evaluator.add_example(prediction=outputs, target=targets) + metrics = global_metrics_evaluator.compute_metrics() + + self.assertAlmostEqual(metrics['AP'], 1.0, 5) + self.assertAlmostEqual(metrics['AP_50'], 1.0, 5) + self.assertAlmostEqual(metrics['AP_75'], 1.0, 5) + self.assertAlmostEqual(metrics['AP_small'], -1.0, 5) + self.assertAlmostEqual(metrics['AP_medium'], 1.0, 5) + self.assertAlmostEqual(metrics['AP_large'], -1.0, 5) + self.assertAlmostEqual(metrics['AR_max_1'], 1.0, 5) + self.assertAlmostEqual(metrics['AR_max_10'], 1.0, 5) + self.assertAlmostEqual(metrics['AR_max_100'], 1.0, 5) + self.assertAlmostEqual(metrics['AR_small'], -1.0, 5) + self.assertAlmostEqual(metrics['AR_medium'], 1.0, 5) + self.assertAlmostEqual(metrics['AR_large'], -1.0, 5) + + def test_coco_global_val_metrics_function_subset(self): + """Test that evaluation on part of the dataset works.""" + # Instatiate evaluator with default annotations file: + outputs, targets = _get_fake_detection_example() + included_image_ids = {int(targets['image/id'])} + global_metrics_evaluator = detr_train_utils.DetrGlobalEvaluator( + 'coco_detr_detection') + global_metrics_evaluator.add_example(prediction=outputs, target=targets) + global_metrics_evaluator.compute_metrics( + included_image_ids=included_image_ids) + + +class DETRVisualizationsTest(parameterized.TestCase): + """Test visualization functions.""" + + @classmethod + def _sample_cxcywh_bbox(cls, key, batch_shape): + """Samples a bounding box in the [cx, cy, w, h] in [0, 1] range format.""" + frac = 0.8 + sample = jax.random.uniform(key, shape=(*batch_shape, 4)) * frac + cx, cy, w, h = jnp.split(sample, indices_or_sections=4, axis=-1) + # Make sure the bounding box doesn't cross the right and top image borders + w = jnp.where(cx + w/2. >= 1., frac * 2. * (1. - cx), w) + h = jnp.where(cy + h/2. >= 1., frac * 2. * (1. - cy), h) + # Make sure the bounding box doesn't cross the left and bottom image borders + w = jnp.where(cx - w/2. <= 0., frac * 2. * cx, w) + h = jnp.where(cy - h/2. <= 0., frac * 2. * cy, h) + + bbox = jnp.concatenate([cx, cy, w, h], axis=-1) + return bbox + + def _generate_visualization_inputs(self): + """Returns fake inputs for visualization tests.""" + batchsize = 4 + num_classes = 81 + max_num_boxes = 3 + num_preds = 5 + + key = jax.random.PRNGKey(0) + + # Create fake predictions and targets + key, subkey = jax.random.split(key) + # set probabilities for class 0 higher than others + p_logits = jnp.ones(num_classes).at[0].set(5.) + p = jax.nn.softmax(p_logits) + tgt_labels = jax.random.choice(subkey, + num_classes, + shape=(batchsize, max_num_boxes), + replace=True, + p=p) + # Ensure last target is dummy empty target. + tgt_labels = tgt_labels.at[:, -1].set(0) + + key, subkey = jax.random.split(key) + pred_logits = jax.random.normal(subkey, + shape=(batchsize, num_preds, num_classes)) + + key, subkey = jax.random.split(key) + pred_bbox = self._sample_cxcywh_bbox(subkey, + batch_shape=(batchsize, num_preds)) + + key, subkey = jax.random.split(key) + tgt_bbox = self._sample_cxcywh_bbox(subkey, + batch_shape=(batchsize, max_num_boxes)) + key, subkey = jax.random.split(key) + iscrowd = jax.random.uniform(subkey, shape=(batchsize, max_num_boxes)) > 0.5 + + pred = {'pred_logits': pred_logits, 'pred_boxes': pred_bbox} + tgt = {'labels': tgt_labels, + 'boxes': tgt_bbox, + 'is_crowd': iscrowd, + 'size': jnp.array([[128, 256], [256, 128], [224, 224], [256, 256]])} + + mean_rgb = np.reshape(np.array([0.48, 0.456, 0.406]), [1, 1, 1, 3]) + std_rgb = np.reshape(np.array([0.229, 0.224, 0.225]), [1, 1, 1, 3]) + + imgs = np.zeros((batchsize, 256, 256, 3)) + for i, sz in enumerate(tgt['size']): + img = np.random.uniform(size=(sz[0], sz[1], 3)) + imgs[i, :sz[0], :sz[1], :] = img + + imgs = (imgs - mean_rgb) / std_rgb + batch = { + 'inputs': jnp.array(imgs), + 'label': tgt, + } + + return jax.device_get(pred), jax.device_get(batch) + + def test_draw_boxes_side_by_side(self): + """Test draw_boxes_side_by_side.""" + pred, batch = self._generate_visualization_inputs() + viz = detr_train_utils.draw_boxes_side_by_side( + pred, batch, collections.defaultdict(lambda: '')) + self.assertSequenceEqual(viz.shape, [4, 256, 512, 3]) + + +def _get_fake_detection_example(dataset='coco'): + """Manually create a single example that has known results.""" + # A single box, values taken from ground-truth annotations and manually + # converted to relative [cx, cy, w, h] format: + h, w = 427, 640 + bx, by, bw, bh = 217.62, 240.54, 38.99, 57.75 + + outputs = {} + outputs['pred_boxes'] = np.array([ + [(bx + bw / 2) / w, (by + bh / 2) / h, bw / w, bh / h], + ]) + outputs['pred_boxes'] = jnp.asarray(outputs['pred_boxes']) + outputs['pred_logits'] = np.zeros((1, NUM_COCO_CLASSES)) + outputs['pred_logits'][0, 1] = 100.0 + + targets = {} + targets['size'] = np.array([h, w]) + targets['orig_size'] = np.array([h, w]) + targets['image/id'] = np.array([397133]) + targets['boxes'] = outputs['pred_boxes'] + targets['is_crowd'] = np.array([0]) + + if dataset == 'coco': + targets['labels'] = np.array([44]) + elif dataset == 'lvis': + targets['labels'] = np.array([1]) + targets['not_exhaustive_category_ids'] = np.array([]) + targets['neg_category_ids'] = np.array([2, 3]) + return outputs, targets + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/baselines/detr/tests/test_transforms.py b/scenic/projects/baselines/detr/tests/test_transforms.py new file mode 100644 index 0000000000000000000000000000000000000000..3e6636be12d74dc8fc8ec89d84f586af2ce40b8a --- /dev/null +++ b/scenic/projects/baselines/detr/tests/test_transforms.py @@ -0,0 +1,260 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for transforms.py.""" + +import copy + +from absl.testing import absltest +from absl.testing import parameterized + +import numpy as np + +from scenic.projects.baselines.detr import transforms + +import tensorflow as tf + +# TODO(aravindhm): Add unit tests for masks if doing panoptic segmentation. + + +def fake_boxes(n, h, w): + """Sample boxes in [x, y, x, y] format in un-normalized image coordinates.""" + h, w = float(h), float(w) + + # samples boxes in [0, 1] + boxes = tf.random.uniform((n, 4), minval=0.0, maxval=1.0, dtype=tf.float32) + + # ensures that x0 < x1, y0 < y1, and un-normalizes boxes + x0 = tf.minimum(boxes[:, 0], boxes[:, 2]) * h + x1 = tf.maximum(boxes[:, 0], boxes[:, 2]) * w + y0 = tf.minimum(boxes[:, 1], boxes[:, 3]) * h + y1 = tf.maximum(boxes[:, 1], boxes[:, 3]) * w + + area = (x1 - x0) * (y1 - y0) + + return tf.stack([x0, y0, x1, y1], axis=-1), area + + +def fake_decoded_features(n, h, w): + """Create a fake features dictionary. + + Args: + n: int; number of boxes/objects. + h: int; height of fake image. + w: int; width of fake image. + + Returns: + Features dictionary with fields - + 'inputs': tf.Tensor; float32 [H x W x 3] decoded mean-subtracted image. + 'label': dict; target labels dict with keys - + 'boxes': tf.Tensor; float32 [n-objects x 4] in xyxy unnormalized format. + 'labels': tf.Tensor; int32 labels. + 'area': tf.Tensor; float32 [n-objects,] object box area. + 'is_crowd': tf.Tensor; bool [n-objects,] object is crowd type or not. + 'objects/id': tf.Tensor; int32 [n-objects,] object identifier. + """ + inputs = tf.random.normal((h, w, 3), dtype=tf.float32) + boxes, area = fake_boxes(n, h, w) + + is_crowd = [False for _ in range(n)] + is_crowd[-1] = True + + label = { + 'boxes': boxes, + 'labels': tf.range(7), + 'area': area, + 'is_crowd': tf.constant(is_crowd, dtype=tf.bool), + 'objects/id': tf.random.uniform([n,], 0, 1024, dtype=tf.int32), + } + return {'inputs': inputs, 'label': label} + + +class TransformsTestBase(parameterized.TestCase): + """A baseclass for testing transforms.""" + + def _assert_tensors_equal(self, v1, v2, msg=''): + """A wrapper that picks assertion based on tensor dtype.""" + self.assertEqual(v1.dtype, v2.dtype, msg=f'{msg}: Dtype mismatch') + + if v1.dtype == tf.bool or v1.dtype == tf.int32 or v1.dtype == tf.int64: + # exact match for these data types + self.assertTrue(np.all(np.equal(v1, v2)), msg=msg) + elif v1.dtype == tf.float32 or v1.dtype == tf.float64: + # approximate match for all others + np.testing.assert_allclose( + v1, v2, equal_nan=False, err_msg=msg, rtol=5e-5) + else: + raise NotImplementedError(f'{v1.dtype} type not supported.') + + def _assert_features_equal(self, f1, f2, msg=''): + """Assert whether two feature dicts are equal.""" + self.assertSequenceEqual(list(f1.keys()), list(f2.keys())) + for k, v in f1.items(): + if isinstance(v, tf.Tensor): + self._assert_tensors_equal(v, f2[k], msg=f'{msg}[{k}]') + elif isinstance(v, dict): + self._assert_features_equal(v, f2[k], msg=f'{msg}[{k}]') + else: + # some other object type ... leave it to tensorflow and cross fingers + self.assertEqual(v, f2[k], msg=f'{msg}[{k}]') + + +class RandomHorizontalFlipTest(TransformsTestBase): + """Unit tests for RandomHorizontalFlip.""" + + @parameterized.parameters([(7, 5, 4), (2, 4, 6)]) + def test_hflip_twice(self, n, h, w): + """Tests hflip function by applying it twice and matching with original.""" + features = fake_decoded_features(n, h, w) + + features_copy = copy.deepcopy(features) + features_flip = transforms.hflip(features_copy) + features_recon = transforms.hflip(features_flip) + + self._assert_features_equal(features, features_recon, + msg='flip_twice mismatch at features') + + def test_hflip(self): + """Tests hflip function by checking actual values.""" + features = fake_decoded_features(7, 5, 4) # hardcoded `expected` for [5, 4] + features['label']['boxes'] = tf.constant( + [[1.0, 3.0, 3.0, 4.0], + [2.0, 0.0, 3.0, 3.0]], dtype=tf.float32) + expected = copy.deepcopy(features) + # the following assumes cx-cy-h-w format to construct target. + expected['inputs'] = features['inputs'][:, ::-1, :] + expected['label']['boxes'] = tf.constant( + [[1.0, 3.0, 3.0, 4.0], + [1.0, 0.0, 2.0, 3.0]], dtype=tf.float32) + + features_flip = transforms.hflip(features) + + self._assert_features_equal(features_flip, expected, + msg='test_hflip') + + +class RandomResizeTest(TransformsTestBase): + """Unit test RandomResize.""" + + @parameterized.parameters([(8, None, [10, 8, 3]), (12, 10, [10, 8, 3])]) + def test_resize_shape(self, size, max_size, expected_shape): + """Test whether resize produces the correct output shape.""" + features = fake_decoded_features(7, 5, 4) + features_resized = transforms.resize(features, size, max_size=max_size) + self.assertSequenceEqual(features_resized['inputs'].shape, expected_shape) + + def test_resize_transform(self): + """Test Resize transform by checking shapes, box coordinates, area.""" + features = fake_decoded_features(7, 5, 4) + features['label']['boxes'] = tf.constant( + [[1.0, 3.0, 3.0, 4.0], + [2.0, 0.0, 3.0, 3.0]], dtype=tf.float32) + features['label']['area'] = tf.constant([2.0, 3.0], dtype=tf.float32) + + transform = transforms.Resize(12, max_size=10) + features_resized = transform(features) + + # checks resized shape + self.assertSequenceEqual(features_resized['inputs'].shape, [10, 8, 3]) + + # checks resized boxes + expected_boxes = np.array([[2.0, 6.0, 6.0, 8.0], + [4.0, 0.0, 6.0, 6.0]], dtype=np.float32) + np.testing.assert_allclose(features_resized['label']['boxes'].numpy(), + expected_boxes) + + # checks resized object area + expected_areas = np.array([8.0, 12.0], dtype=np.float32) + np.testing.assert_allclose(features_resized['label']['area'].numpy(), + expected_areas) + + def test_resize_randomresize(self): + """Test consistency between Resize and RandomResize.""" + features = fake_decoded_features(7, 5, 4) + transform_resize = transforms.Resize(10, max_size=11) + transform_rnd_resize = transforms.RandomResize([10,], max_size=11) + + # resizes features using two different `Transforms` that are mathematically + # identical + features_resized = transform_resize(copy.deepcopy(features)) + features_rnd_resized = transform_rnd_resize(copy.deepcopy(features)) + + # asserts that the outputs match + self._assert_features_equal(features_resized, features_rnd_resized, + msg='resized vs random resized') + + # checks that they do not match had the parameter been different + transform_rnd_resize = transforms.RandomResize([10,], max_size=None) + features_rnd_resized = transform_rnd_resize(copy.deepcopy(features)) + with self.assertRaises(AssertionError): + self._assert_features_equal(features_resized, features_rnd_resized, + msg='resized vs random resized') + + +class NormalizeBoxesTest(TransformsTestBase): + """Unit test NormalizeBoxes.""" + + def test_normalize_boxes(self): + """Numerically test whether boxes are being normalized correctly.""" + features = fake_decoded_features(2, 4, 8) + features['label']['boxes'] = tf.constant( + [[0.5, 0.5, 3.5, 2.5], + [4.5, 1.5, 5.5, 3.5]], dtype=tf.float32) + # area does not matter as area remains unnormalized + del features['label']['area'] + + expected = copy.deepcopy(features) + expected['label']['boxes'] = tf.constant( + [[0.25, 0.375, 0.375, 0.5], + [0.625, 0.625, 0.125, 0.5]], dtype=tf.float32) + + features_normalized = transforms.NormalizeBoxes()(features) + + self._assert_features_equal(features_normalized, expected, + msg='Test normalization') + + +class InitPaddingMaskTest(TransformsTestBase): + """Unit test for InitPaddingMask.""" + + @parameterized.parameters([(4, 5, 3), (2, 4, 7)]) + def test_padding_mask(self, n, h, w): + """Testing whether padding mask is currently initialized.""" + features = fake_decoded_features(n, h, w) + + expected = copy.deepcopy(features) + expected['padding_mask'] = tf.ones((h, w), dtype=tf.float32) + + features_with_padding_mask = transforms.InitPaddingMask()(features) + + self._assert_features_equal(features_with_padding_mask, expected, + msg='Test padding mask') + + +class RandomSizeCrop(TransformsTestBase): + """Unit test for RandomSizeCrop.""" + + @parameterized.parameters([((1, 2, 3, 2), [3, 2, 3]), + ((2, 3, 1, 1), [1, 1, 3]), + ((0, 1, 5, 3), [5, 3, 3]), + ((1, 0, 4, 4), [4, 4, 3])]) + def test_crop_shape(self, region, expected_shape): + """Test whether resize produces the correct output shape.""" + features = fake_decoded_features(7, 5, 4) + features_resized = transforms.crop(features, region) + self.assertSequenceEqual(features_resized['inputs'].shape, expected_shape) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/baselines/detr/tests/test_util.py b/scenic/projects/baselines/detr/tests/test_util.py new file mode 100644 index 0000000000000000000000000000000000000000..711efa0db9659a7c868eeb2eb2b1199543c15a12 --- /dev/null +++ b/scenic/projects/baselines/detr/tests/test_util.py @@ -0,0 +1,79 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""COCO testing utilities.""" +import numpy as np +import tensorflow as tf + + +# Width, height and ID are taken from real COCO annotations. This is required to +# make the COCO evaluator work (for the trainer test). +FAKE_W = [640, 352, 640, 640, 640, 640, 427, 375, 640, 351, 640, 640, 500, 375, + 640, 640, 640, 640, 640, 640, 640, 480, 640, 427, 427, 480, 461, 640, + 640, 634, 640, 640, 640, 640, 640, 480, 640, 640, 500, 640, 640, 640, + 500, 640, 425, 581, 640, 427, 640, 640] + +FAKE_H = [427, 230, 428, 480, 388, 511, 640, 500, 426, 500, 427, 480, 423, 500, + 500, 462, 480, 480, 425, 480, 480, 640, 427, 640, 640, 640, 500, 428, + 426, 640, 480, 480, 400, 432, 480, 640, 427, 371, 375, 480, 427, 480, + 375, 449, 640, 640, 480, 640, 360, 640] + +FAKE_ID = [397133, 37777, 252219, 87038, 174482, 403385, 6818, 480985, 458054, + 331352, 296649, 386912, 502136, 491497, 184791, 348881, 289393, + 522713, 181666, 17627, 143931, 303818, 463730, 460347, 322864, + 226111, 153299, 308394, 456496, 58636, 41888, 184321, 565778, 297343, + 336587, 122745, 219578, 555705, 443303, 500663, 418281, 25560, + 403817, 85329, 329323, 239274, 286994, 511321, 314294, 233771] + + +def generate_fake_example(w: int, h: int, identifier: int): + """Generate a random COCO example.""" + num_objects = 8 + return { + 'image': np.random.randint(0, 256, size=(w, h, 3), dtype=np.uint8), + 'image/filename': f'{identifier:012}.jpg', + 'image/id': identifier, + 'objects': { + 'area': np.arange(num_objects, dtype=np.int64) * 50, + 'bbox': np.stack([np.array([0., 0., 1., 1.])] * num_objects), + 'id': np.arange(num_objects), + 'is_crowd': np.full((num_objects,), False, dtype=bool), + 'label': np.random.randint( + 0, 81, size=(num_objects,), dtype=np.int32), + } + } + + +def generate_fake_dataset(num_examples: int): + """Constructs a dataset generator object.""" + + def _generator(self, *args, **kwargs): + """Generate a fake dataset for testing.""" + del args + del kwargs + + def gen(): + n_annotations = len(FAKE_ID) + for i in range(num_examples): + yield generate_fake_example( + w=FAKE_W[i % n_annotations], + h=FAKE_H[i % n_annotations], + identifier=FAKE_ID[i % n_annotations]) + + return tf.data.Dataset.from_generator( + gen, + output_types=self.info.features.dtype, + output_shapes=self.info.features.shape, + ) + return _generator diff --git a/scenic/projects/baselines/detr/train_utils.py b/scenic/projects/baselines/detr/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..d18c2bc44ff894072d09e67792c0b7029767c1cf --- /dev/null +++ b/scenic/projects/baselines/detr/train_utils.py @@ -0,0 +1,393 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for DETR trainer.""" + +import copy +import json +import os +from typing import Any, Dict, Optional, Set + +from absl import logging +from flax import core as flax_core +from flax import optim as optimizers +from flax import traverse_util +import jax +from jax.example_libraries import optimizers as experimental_optimizers +import jax.numpy as jnp +import numpy as np +import PIL +import PIL.ImageDraw +import PIL.ImageFont +from scenic.common_lib import image_utils +from scenic.dataset_lib.coco_dataset import coco_eval +from scenic.model_lib.base_models import box_utils +from scenic.train_lib_deprecated import optimizers as scenic_optimizers +from scenic.train_lib_deprecated import train_utils +import scipy.special +import tensorflow as tf + + +class DetrGlobalEvaluator(): + """An interface between the Scenic DETR implementation and COCO evaluators.""" + + def __init__(self, dataset_name: str, **kwargs): + del dataset_name # Unused. + + self.coco_evaluator = coco_eval.DetectionEvaluator( + threshold=0.0, **kwargs) + self._included_image_ids = set() + self._num_examples_added = 0 + + def add_example( + self, prediction: Dict[str, np.ndarray], target: Dict[str, np.ndarray]): + """Add a single example to the evaluator. + + Args: + prediction: Model prediction dictionary with keys 'pred_img_ids', + 'pred_probs' in shape of `[num_objects, num_classes]` and 'pred_boxes' + in shape of `[num_objects, 4]`. Box coordinates should be in raw DETR + format, i.e. [cx, cy, w, h] in range [0, 1]. + target: Target dictionary with keys 'orig_size', 'size', and 'image/id'. + Must also contain 'padding_mask' if the input image was padded. + """ + if 'pred_boxes' not in prediction: + # Add dummy to make eval work: + prediction = copy.deepcopy(prediction) + prediction['pred_boxes'] = np.zeros( + (prediction['pred_logits'].shape[0], 4)) + 0.5 + + # Convert from DETR [cx, cy, w, h] to COCO [x, y, w, h] bounding box format: + boxes = box_utils.box_cxcywh_to_xyxy(prediction['pred_boxes']) + boxes = np.array(boxes) + boxes[:, 2] -= boxes[:, 0] + boxes[:, 3] -= boxes[:, 1] + + # Scale from relative to absolute size: + # Note that the padding is implemented such that such that the model's + # predictions are [0,1] normalized to the non-padded image, so scaling by + # `orig_size` will convert correctly to the original image coordinates. No + # image flipping happens during evaluation. + h, w = np.asarray(target['orig_size']) + scale_factor = np.array([w, h, w, h]) + boxes = boxes * scale_factor[np.newaxis, :] + boxes_np = np.asarray(boxes) + + # Get scores, excluding the background class: + if 'pred_probs' in prediction: + scores = prediction['pred_probs'][:, 1:] + else: + scores = scipy.special.softmax(prediction['pred_logits'], axis=-1)[:, 1:] + + # Add example to evaluator: + self.coco_evaluator.add_annotation( + bboxes=boxes_np, + scores=np.asarray(scores), + img_id=int(target['image/id'])) + + self._num_examples_added += 1 + + def compute_metrics( + self, + included_image_ids: Optional[Set[int]] = None, + clear_annotations: Optional[bool] = True) -> Dict[str, Any]: + """Computes the metrics for all added predictions.""" + if included_image_ids is not None: + self.coco_evaluator.coco.reload_ground_truth(included_image_ids) + return self.coco_evaluator.compute_coco_metrics( + clear_annotations=clear_annotations) + + def clear(self): + self.coco_evaluator.clear_annotations() + self._num_examples_added = 0 + + def __len__(self): + return self._num_examples_added + + def write_pred_annotations_to_file(self, + path: str, + fname_app: Optional[str] = None, + clear_annotations: Optional[bool] = True): + """Writes predictions to file in JSON format. + + Args: + path: Path to write the prediction annotation JSON file. + fname_app: Optional string to append to the file name. + clear_annotations: Clear annotations after they are stored in a file. + """ + if not tf.io.gfile.exists(path): + tf.io.gfile.makedirs(path) + json_file_name = f"predictions{fname_app if fname_app else ''}.json" + json_file_path = os.path.join(path, json_file_name) + + def _convert_to_serializable(obj): + if isinstance(obj, np.ndarray): + return obj.tolist() + elif isinstance(obj, np.float32): + return float(obj) + else: + raise TypeError(f'Unserializable object {obj} of type {type(obj)}') + + with tf.io.gfile.GFile(json_file_path, 'w') as f: + f.write( + json.dumps( + self.coco_evaluator.annotations, + default=_convert_to_serializable)) + logging.info('Predicted annotations are stored in %s.', json_file_path) + if clear_annotations: + self.coco_evaluator.clear_annotations() + + +def _unpad_and_resize(masks, padding_mask, orig_size): + """Removes padding and resizes masks.""" + # Resize masks to the padding_mask size in case they have a lower resolution: + masks = image_utils.resize_pil( + masks, + out_h=padding_mask.shape[0], + out_w=padding_mask.shape[1], + num_batch_dims=1, + method='linear') + # Remove padding: + row_masks = np.any(padding_mask, axis=-1) + col_masks = np.any(padding_mask, axis=-2) + masks = masks[:, row_masks, :] + masks = masks[:, :, col_masks] + # Resize to original size: + return image_utils.resize_pil( + masks, + out_h=orig_size[0], + out_w=orig_size[1], + num_batch_dims=1, + method='linear') + + +def normalize_metrics_summary(metrics_summary, split, + object_detection_loss_keys): + """Normalizes the metrics in the given metrics summary. + + Note that currently we only support metrics of the form 1/N sum f(x_i). + + Args: + metrics_summary: dict; Each value is a sum of a calculated metric over all + examples. + split: str; Split for which we normalize the metrics. Used for logging. + object_detection_loss_keys: list; A loss key used for computing the object + detection loss. + + Returns: + Normalized metrics summary. + + Raises: + TrainingDivergedError: Due to observing a NaN in the metrics. + """ + for key, val in metrics_summary.items(): + metrics_summary[key] = val[0] / val[1] + if np.isnan(metrics_summary[key]): + raise train_utils.TrainingDivergedError( + 'NaN detected in {}'.format(f'{split}_{key}')) + + # compute and add object_detection_loss using globally normalize terms + object_detection_loss = 0 + for loss_term_key in object_detection_loss_keys: + object_detection_loss += metrics_summary[loss_term_key] + metrics_summary['object_detection_loss'] = object_detection_loss + + return metrics_summary + + +def process_and_fetch_to_host(pred_or_tgt, batch_mask): + """Used to collect predictions and targets of the whole valid/test set. + + Args: + pred_or_tgt: pytree; A pytree of jnp-arrays where leaves are of shape + `[num_devices, bs, X,...,Y]`. + batch_mask: A nd-array of shape `[num_devices, bs]`, where zero values + indicate padded examples. + + Returns: + A list of length num_devices * bs of items, where each item is a tree with + the same structure as `pred_or_tgt` and each leaf contains a single example. + """ + # Fetch to host in a single call. + pred_or_tgt, batch_mask = jax.device_get((pred_or_tgt, batch_mask)) + batch_mask = np.array(batch_mask).astype(bool) + + def _split_mini_batches(x): + # Filter out padded examples. + x = x[batch_mask] + # Split minibatch of examples into a list of examples. + x_list = np.split(x, x.shape[0], axis=0) + # Squeeze out the dummy dimension. + return jax.tree_util.tree_map(lambda x: np.squeeze(x, axis=0), x_list) + + leaves, treedef = jax.tree_util.tree_flatten(pred_or_tgt) + + batch_shape = batch_mask.shape + assert all([leaf.shape[:2] == batch_shape for leaf in leaves]), ( + 'Inconsistent batch shapes.') + + # Split batched leaves into lists of examples: + leaves = list(map(_split_mini_batches, leaves)) + + # Go from leaf-lists to list of trees: + out = [] + if leaves: + num_examples = np.sum(batch_mask, dtype=np.int32) + for example_ind in range(num_examples): + out.append(treedef.unflatten([leaf[example_ind] for leaf in leaves])) + return out + + +def draw_boxes_side_by_side(pred: Dict[str, Any], batch: Dict[str, Any], + label_map: Dict[int, str]) -> np.ndarray: + """Side-by-side visualization of detection predictions and ground truth.""" + + viz = [] + + # unnormalizes images to be [0, 1] + mean_rgb = np.reshape(np.array([0.48, 0.456, 0.406]), [1, 1, 1, 3]) + std_rgb = np.reshape(np.array([0.229, 0.224, 0.225]), [1, 1, 1, 3]) + imgs = ((batch['inputs'] * std_rgb + mean_rgb) * 255.0).astype(np.uint8) + + font = PIL.ImageFont.load_default() + + # iterates over images in the batch and makes visualizations + for indx in range(imgs.shape[0]): + h, w = batch['label']['size'][indx] + + # first for ground truth + gtim = PIL.Image.fromarray(imgs[indx]) + gtdraw = PIL.ImageDraw.Draw(gtim) + for bb, cls, is_crowd in zip(batch['label']['boxes'][indx], + batch['label']['labels'][indx], + batch['label']['is_crowd'][indx]): + if cls == 0: + continue # dummy object. + + bcx, bcy, bw, bh = bb * [w, h, w, h] + bb = [bcx - bw / 2, bcy - bh / 2, bcx + bw / 2, bcy + bh / 2] + if is_crowd: + edgecolor = (255, 0, 0) + else: + edgecolor = (255, 255, 0) + + gtdraw.rectangle(bb, fill=None, outline=edgecolor, width=3) + gtdraw.text( + [bb[0], max(bb[1] - 10, 0)], # pytype: disable=wrong-arg-types # pillow-102-upgrade + label_map[cls], + font=font, + fill=(0, 0, 255), + ) + + # second for model predictions + predim = PIL.Image.fromarray(imgs[indx]) + preddraw = PIL.ImageDraw.Draw(predim) + pred_lbls = np.argmax(pred['pred_logits'], axis=-1) + for bb, cls in zip(pred['pred_boxes'][indx], pred_lbls[indx]): + h, w = batch['label']['size'][indx] + bcx, bcy, bw, bh = bb * [w, h, w, h] + bb = [bcx - bw / 2, bcy - bh / 2, bcx + bw / 2, bcy + bh / 2] + edgecolor = (0, 255, 0) if cls else (0, 150, 0) + preddraw.rectangle( + bb, fill=None, outline=edgecolor, width=3 if cls else 1) + # Separate loop for text to prevent occlusion of text by boxes: + for bb, cls in zip(pred['pred_boxes'][indx], pred_lbls[indx]): + if not cls: + continue + h, w = batch['label']['size'][indx] + bcx, bcy, bw, bh = bb * [w, h, w, h] + bb = [bcx - bw / 2, bcy - bh / 2, bcx + bw / 2, bcy + bh / 2] + preddraw.text( + [bb[0], max(bb[1] - 10, 0)], # pytype: disable=wrong-arg-types # pillow-102-upgrade + label_map[cls], + font=font, + fill=(0, 0, 255), + ) + + gtim_np = np.asarray(gtim) + predim_np = np.asarray(predim) + composite = np.concatenate([predim_np, gtim_np], axis=1) + + viz.append(composite) + return np.stack(viz, axis=0) + + +def get_detr_optimizer(config): + """Makes a Flax MultiOptimizer for DETR.""" + other_optim = scenic_optimizers.get_optimizer(config) + + if config.get('backbone_training'): + backbone_optim = scenic_optimizers.get_optimizer(config.backbone_training) + else: + backbone_optim = other_optim + + def is_bn(path): + # For DETR we need to skip the BN affine transforms as well. + names = ['/bn1/', '/bn2/', '/bn3/', '/init_bn/', '/proj_bn/'] + for s in names: + if s in path: + return True + return False + backbone_traversal = optimizers.ModelParamTraversal( + lambda path, param: ('backbone' in path) and (not is_bn(path))) + other_traversal = optimizers.ModelParamTraversal( + lambda path, param: 'backbone' not in path) + + return MultiOptimizerWithLogging((backbone_traversal, backbone_optim), + (other_traversal, other_optim)) + + +class MultiOptimizerWithLogging(optimizers.MultiOptimizer): + """Adds logging to MultiOptimizer to show which params are trained.""" + + def init_state(self, params): + self.log(params) + return super().init_state(params) + + def log(self, inputs): + for i, traversal in enumerate(self.traversals): + params = _get_params_dict(inputs) + flat_dict = traverse_util.flatten_dict(params) + for key, value in _sorted_items(flat_dict): + path = '/' + '/'.join(key) + if traversal._filter_fn(path, value): # pylint: disable=protected-access + logging.info( + 'ParamTraversalLogger (opt %d): %s, %s', i, value.shape, path) + + +def _sorted_items(x): + """Returns items of a dict ordered by keys.""" + return sorted(x.items(), key=lambda x: x[0]) + + +def _get_params_dict(inputs): + if isinstance(inputs, (dict, flax_core.FrozenDict)): + return flax_core.unfreeze(inputs) + else: + raise ValueError( + 'Can only traverse a flax Model instance or a nested dict, not ' + f'{type(inputs)}') + + +def clip_grads(grad_tree, max_norm): + """Clip gradients stored as a pytree of arrays to maximum norm `max_norm`.""" + # jax.example_libraries.optimizers.clip_grads implements this differently. + # First, it uses clip_coef of max_norm / norm without the 1e-6. + # Second, the jnp.where condition and argument order are reversed. This should + # normally be a no-change but we do not know what changes in XLA are triggered + # as a result of this and how that effects precision etc. + norm = experimental_optimizers.l2_norm(grad_tree) + clip_coef = max_norm / (norm + 1e-6) + normalize = lambda g: jnp.where(clip_coef < 1., g * clip_coef, g) + return jax.tree_util.tree_map(normalize, grad_tree) diff --git a/scenic/projects/baselines/detr/trainer.py b/scenic/projects/baselines/detr/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..e3fa6d1d64c416dc513000668015ea0614495fb6 --- /dev/null +++ b/scenic/projects/baselines/detr/trainer.py @@ -0,0 +1,571 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training script for the DETR.""" + +from concurrent import futures +import functools +import time +from typing import Any, Dict, Tuple, Optional + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from flax import jax_utils +from flax.training.checkpoints import restore_checkpoint as flax_restore_checkpoint +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils + + +from scenic.projects.baselines.detr import train_utils as detr_train_utils +from scenic.train_lib_deprecated import lr_schedules +from scenic.train_lib_deprecated import pretrain_utils +from scenic.train_lib_deprecated import train_utils + + +def get_train_step(flax_model, + loss_and_metrics_fn, + learning_rate_fn, + backbone_learning_rate_fn, + max_grad_norm=None, + update_model_state=False, + debug=False): + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + flax_model: Flax model (an instance of nn.Module). + loss_and_metrics_fn: A function that given model predictions, a batch, and + parameters of the model calculates the loss as well as metrics. + learning_rate_fn: Learning rate scheduler which given the global_step + generates the learning rate. + backbone_learning_rate_fn: Learning rate scheduler which given the + global_step generates the learning rate used for updating the parameters + of the backbone in the model. + max_grad_norm: float; Maximum gradient norm used for gradient clipping. If + set to None, no gradient clipping happens. + update_model_state: bool; whether to update the model_state (e.g. batch + stats in BatchNorm) during training or freeze it. + debug: bool; Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Train step function that takes a train_state and batch and returns + new_train_state, metrics, lr, predictions. + + """ + backbone_learning_rate_fn = backbone_learning_rate_fn or learning_rate_fn + + def update_fn(train_state, new_model_state, grad, new_rng): + step = train_state.global_step + backbone_lr = backbone_learning_rate_fn(step) + lr = learning_rate_fn(step) + + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if max_grad_norm is not None: + grad = detr_train_utils.clip_grads(grad, max_grad_norm) + + (backbone_opt_hps, + opt_hps) = train_state.optimizer.optimizer_def.hyper_params + new_optimizer = train_state.optimizer.apply_gradient( + grad, + hyper_params=[ + backbone_opt_hps.replace(learning_rate=backbone_lr), + opt_hps.replace(learning_rate=lr) + ]) + new_train_state = train_state.replace( + global_step=step + 1, + optimizer=new_optimizer, + model_state=new_model_state, + rng=new_rng) + return new_train_state, lr, backbone_lr + + def train_step(train_state, batch): + + def loss_fn(params): + new_rng, rng = jax.random.split(train_state.rng) + # Bind the rng to the host/device we are on. + model_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + variables = {'params': params, **train_state.model_state} + predictions, new_model_state = flax_model.apply( + variables, + batch['inputs'], + padding_mask=batch['padding_mask'], + update_batch_stats=update_model_state, + mutable=['batch_stats'], + train=True, + rngs={'dropout': model_rng}, + debug=debug) + loss, metrics = loss_and_metrics_fn( + predictions, batch, model_params=variables['params']) + return loss, (new_model_state, metrics, predictions, new_rng) + + compute_gradient_fn = jax.value_and_grad(loss_fn, has_aux=True) + (_, aux), grad = compute_gradient_fn(train_state.optimizer.target) + new_model_state, metrics, predictions, new_rng = aux + new_train_state, lr, backbone_lr = update_fn(train_state, new_model_state, + grad, new_rng) + return new_train_state, metrics, lr, backbone_lr, predictions + + return train_step + + +def get_eval_step(flax_model, + loss_and_metrics_fn, + logits_to_probs_fn, + metrics_only=False, + debug=False): + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Args: + flax_model: Flax model (an instance of nn.Module). + loss_and_metrics_fn: A function that given model predictions, a batch, and + parameters of the model calculates the loss as well as metrics. + logits_to_probs_fn: Function that takes logits and converts them to probs. + metrics_only: bool; Only return metrics. + debug: bool; Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Eval step function which returns predictions and calculated metrics. + """ + + def metrics_fn(train_state, batch, predictions): + _, metrics = loss_and_metrics_fn( + predictions, batch, model_params=train_state.optimizer.target) + + if metrics_only: + return None, None, metrics + + pred_probs = logits_to_probs_fn(predictions['pred_logits']) + # Collect necessary predictions and target information from all hosts. + predictions_out = { + 'pred_probs': pred_probs, + 'pred_logits': predictions['pred_logits'], + 'pred_boxes': predictions['pred_boxes'] + } + labels = { + 'image/id': batch['label']['image/id'], + 'size': batch['label']['size'], + 'orig_size': batch['label']['orig_size'], + } + to_copy = [ + 'labels', 'boxes', 'not_exhaustive_category_ids', 'neg_category_ids' + ] + for name in to_copy: + if name in batch['label']: + labels[name] = batch['label'][name] + + targets = {'label': labels, 'batch_mask': batch['batch_mask']} + + predictions_out = jax.lax.all_gather(predictions_out, 'batch') + targets = jax.lax.all_gather(targets, 'batch') + return targets, predictions_out, metrics + + def eval_step(train_state, batch): + variables = { + 'params': train_state.optimizer.target, + **train_state.model_state + } + predictions = flax_model.apply( + variables, + batch['inputs'], + padding_mask=batch['padding_mask'], + train=False, + mutable=False, + debug=debug) + return metrics_fn(train_state, batch, predictions) + + return eval_step + + +def train_and_evaluate( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: JAX PRNGKey. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + lead_host = jax.process_index() == 0 + + # The pool is used to perform misc operations such as logging in async way. + pool = futures.ThreadPoolExecutor(max_workers=2) + + # Build the loss_and_metrics_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create optimizer. + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0] + optimizer = jax.jit( + detr_train_utils.get_detr_optimizer(config).create, backend='cpu')( + params) + + rng, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + optimizer=optimizer, + model_state=model_state, + rng=train_rng, + accum_train_time=0) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + init_checkpoint_path = config.init_from.get('checkpoint_path') + restored_train_state = flax_restore_checkpoint( + init_checkpoint_path, target=None) + train_state = pretrain_utils.init_from_pretrain_state( + train_state, + restored_train_state, + ckpt_prefix_path=config.init_from.get('ckpt_prefix_path'), + model_prefix_path=config.init_from.get('model_prefix_path'), + name_mapping=config.init_from.get('name_mapping'), + skip_regex=config.init_from.get('skip_regex')) + # Free unecessary memory. + del restored_train_state + elif start_step == 0 and config.get('load_pretrained_backbone', False): + # Only load pretrained backbone if we are at the beginning of training. + bb_checkpoint_path = config.pretrained_backbone_configs.get( + 'checkpoint_path') + bb_train_state = flax_restore_checkpoint(bb_checkpoint_path, target=None) + + model_prefix_path = ['backbone'] + train_state = pretrain_utils.init_from_pretrain_state( + train_state, bb_train_state, model_prefix_path=model_prefix_path) + + update_model_state = not config.get('freeze_backbone_batch_stats', False) + if not update_model_state: + if not config.load_pretrained_backbone: + raise ValueError('Freezing the batch statistics of the resnet backbone ' + 'is only possible when loading a pretrained resnet ' + 'backbone is enabled.') + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + # Get learning rate scheduler. + learning_rate_fn = lr_schedules.get_learning_rate_fn(config) + backbone_learning_rate_fn = None + if config.get('backbone_training'): + backbone_learning_rate_fn = lr_schedules.get_learning_rate_fn( + config.backbone_training) + + train_step = get_train_step( + flax_model=model.flax_model, + loss_and_metrics_fn=model.loss_function, + learning_rate_fn=learning_rate_fn, + backbone_learning_rate_fn=backbone_learning_rate_fn, + max_grad_norm=config.get('max_grad_norm', None), + update_model_state=update_model_state, + debug=config.debug_train) + + train_step_pmapped = jax.pmap( + train_step, axis_name='batch', donate_argnums=(0,)) + + ############### EVALUATION CODE ################# + eval_step = get_eval_step( + flax_model=model.flax_model, + loss_and_metrics_fn=model.loss_function, + logits_to_probs_fn=model.logits_to_probs, + debug=config.debug_eval) + eval_step_pmapped = jax.pmap( + eval_step, axis_name='batch', donate_argnums=(1,)) + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + metrics_normalizer_fn = functools.partial( + detr_train_utils.normalize_metrics_summary, + object_detection_loss_keys=model.loss_terms_weights.keys()) + + def evaluate(train_state, step): + """Runs evaluation code.""" + future = None + + def _wait(future: Optional[futures.Future]) -> Any: # pylint: disable=g-bare-generic + if future is None: + return None + return future.result() + + def _add_examples(predictions, labels): + for pred, label in zip(predictions, labels): + global_metrics_evaluator.add_example(prediction=pred, target=label) + + eval_metrics = [] + if global_metrics_evaluator is not None: + global_metrics_evaluator.clear() + + for eval_step in range(steps_per_eval): + logging.info('Running eval step %d', eval_step) + eval_batch = next(dataset.valid_iter) + + # Do the eval step given the matches. + (eval_batch_all_hosts, eval_predictions_all_hosts, + e_metrics) = eval_step_pmapped(train_state, eval_batch) + + # Variable aux_outputs is not needed anymore. + eval_predictions_all_hosts.pop('aux_outputs', None) + + # Collect local metrics (returned by the loss function). + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + + if global_metrics_evaluator is not None: + # Unreplicate the output of eval_step_pmapped (used `lax.all_gather`). + eval_batch_all_hosts = jax_utils.unreplicate(eval_batch_all_hosts) + eval_predictions_all_hosts = jax_utils.unreplicate( + eval_predictions_all_hosts) + + # Collect preds and labels to be sent for computing global metrics. + predictions = detr_train_utils.process_and_fetch_to_host( + eval_predictions_all_hosts, eval_batch_all_hosts['batch_mask']) + predictions = jax.tree_util.tree_map(np.asarray, predictions) + + labels = detr_train_utils.process_and_fetch_to_host( + eval_batch_all_hosts['label'], eval_batch_all_hosts['batch_mask']) + labels = jax.tree_util.tree_map(np.asarray, labels) + + if eval_step == 0: + logging.info('Pred keys: %s', list(predictions[0].keys())) + logging.info('Labels keys: %s', list(labels[0].keys())) + + # Add to evaluator. + _wait(future) + future = pool.submit(_add_examples, predictions, labels) + + del predictions, labels + + del eval_batch, eval_batch_all_hosts, eval_predictions_all_hosts + + eval_global_metrics_summary_future = None + if global_metrics_evaluator is not None: + _wait(future) + logging.info('Number of eval examples: %d', len(global_metrics_evaluator)) + if lead_host: + eval_global_metrics_summary_future = pool.submit( + global_metrics_evaluator.compute_metrics, clear_annotations=False) + + return (step, eval_metrics), eval_global_metrics_summary_future + + ################################################### + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + log_summary_steps = config.get('log_summary_steps', 25) + log_large_summary_steps = config.get('log_large_summary_steps', 0) + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + + global_metrics_evaluator = None # Only run eval on the lead_host node. + if lead_host: + global_metrics_evaluator = detr_train_utils.DetrGlobalEvaluator( + config.dataset_name) + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono = train_utils.Chrono( + first_step=start_step, + total_steps=total_steps, + steps_per_epoch=steps_per_epoch, + global_bs=config.batch_size, + accum_train_time=int(jax_utils.unreplicate(train_state.accum_train_time))) + + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, + writer=writer, + every_secs=None, + every_steps=config.get('report_progress_step', log_summary_steps), + ) + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + (last_eval_step, last_eval_metrics), last_eval_future = (None, None), None + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + (train_state, t_metrics, lr, backbone_lr, + train_predictions) = train_step_pmapped(train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate, learning_rate_backbone: + extra_training_logs.append({ + 'learning_rate': lr, + 'learning_rate_backbone': backbone_lr, + }) + + for h in hooks: + h(step) + + chrono.pause() + if (log_large_summary_steps and step % log_large_summary_steps == 0 and + lead_host): + ############### LOG EXPENSIVE TRAIN SUMMARY ############### + # Visualizes detections using side-by-side gt-pred images. + # TODO(mjlm): Investigate this error when including `batch_mask`: + # RuntimeError: Invalid argument: from_python argument must be an array. + to_cpu = lambda x: jax.device_get(dataset_utils.unshard(x)) + del train_batch['batch_mask'] + train_pred_cpu = to_cpu(train_predictions) + train_batch_cpu = to_cpu(train_batch) + viz = detr_train_utils.draw_boxes_side_by_side( + train_pred_cpu, + train_batch_cpu, + label_map=dataset.meta_data['label_to_name']) + viz_detections = { + f'sidebyside_{i}/detection': viz_[None, ...] + for i, viz_ in enumerate(viz) + } + writer.write_images(step, viz_detections) + + del train_predictions + + if (step % log_summary_steps == 0) or (step == total_steps - 1): + ############### LOG TRAIN SUMMARY ############### + if lead_host: + chrono.tick(step, writer) + + # Write summary: + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, extra_training_logs), + writer=writer, + metrics_normalizer_fn=metrics_normalizer_fn) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + ################################################# + + if (step % log_eval_steps == 0) or (step == total_steps): + # First wait for the previous eval to finish & write summary. + if last_eval_future is not None: + train_utils.log_eval_summary( + step=last_eval_step, + eval_metrics=last_eval_metrics, + extra_eval_summary=last_eval_future.result(), + writer=writer, + metrics_normalizer_fn=metrics_normalizer_fn) + last_eval_future = None + + # Sync model state across replicas (in case of having model state, e.g. + # batch statistic when using batch norm). + start_time = time.time() + with report_progress.timed('eval'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + (last_eval_step, last_eval_metrics), last_eval_future = evaluate( + train_state, step) + duration = time.time() - start_time + logging.info('Done with async evaluation: %.4f sec.', duration) + writer.flush() + + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)) and config.checkpoint: + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + train_state.replace(accum_train_time=chrono.accum_train_time) + train_utils.save_checkpoint(workdir, train_state) + + chrono.resume() # Un-pause now. + + # Wait until computations are done before exiting. + pool.shutdown() + if last_eval_future is not None: + train_utils.log_eval_summary( + step=last_eval_step, + eval_metrics=last_eval_metrics, + extra_eval_summary=last_eval_future.result(), + writer=writer, + metrics_normalizer_fn=metrics_normalizer_fn) + jax.random.normal(jax.random.PRNGKey(0), ()).block_until_ready() + return train_state, train_summary, eval_summary diff --git a/scenic/projects/baselines/detr/transforms.py b/scenic/projects/baselines/detr/transforms.py new file mode 100644 index 0000000000000000000000000000000000000000..b04d2f9c915ba7be7c1dd3eee7df70f010cbab74 --- /dev/null +++ b/scenic/projects/baselines/detr/transforms.py @@ -0,0 +1,496 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data augmentation transforms for data loading.""" + +from typing import Any, Dict +import tensorflow as tf + +# TODO(aravindhm): Control randomness by passing Rndkey and splitting, etc. + + +def tf_float(t): + return tf.cast(t, tf.float32) + + +def tf_int32(t): + return tf.cast(t, tf.int32) + + +def get_hw(features, dtype=tf.int32): + """Return the height, width of image as float32 tf.Tensors.""" + if isinstance(features, dict): + sz = tf.shape(features['inputs']) + elif isinstance(features, tf.Tensor): + sz = tf.shape(features) + else: + raise ValueError(f'Unknown type of object: {features}') + + h = tf.cast(sz[0], dtype=dtype) + w = tf.cast(sz[1], dtype=dtype) + return h, w + + +def identity(features: Dict[str, Any]) -> Dict[str, Any]: + """tf.identity for nested dictionary of Tensors.""" + out = {} + for k, v in features.items(): + if isinstance(v, tf.Tensor): + out[k] = tf.identity(v) + elif isinstance(v, dict): + out[k] = identity(v) + else: + raise NotImplementedError(f'{v}\'s type that is unsupported by identity.') + + return out + + +class Compose: + """Compose several transforms together. + + Attributes: + transforms (list of ``Transform`` objects): list of transforms to compose. + + """ + + def __init__(self, transforms): + self.transforms = transforms + + def __call__(self, features): + for t in self.transforms: + features = t(features) + if 'masks' in features['label']: + tf.debugging.assert_shapes( + shapes=( + (features['label']['masks'], ['n', 'w', 'h', 1]), + (features['inputs'], [..., 'w', 'h', 3]), + (features['label']['labels'], ['n']), + ), + message=f'Shape mismatch after transformation {t.__class__}') + + return features + + def __repr__(self): + format_string = self.__class__.__name__ + '(' + for t in self.transforms: + format_string += '\n' + format_string += ' {0}'.format(t) + format_string += '\n)' + return format_string + + +class RandomHorizontalFlip: + """Horizontally flip image and boxes [cxcywh format] with probability `p`.""" + + def __init__(self, p: float = 0.5): + self.p = p + + def __call__(self, features): + rnd = tf.random.uniform([], minval=0.0, maxval=1.0, dtype=tf.float32) + if rnd < self.p: + return hflip(identity(features)) # Identity helps avoid autograph errors. + else: + return identity(features) + + +class RandomSelect: + """Randomly selects between transforms1 and transforms2 ~ [p, 1 - p] .""" + + def __init__(self, transforms1, transforms2, p: float = 0.5): + self.transforms1 = transforms1 + self.transforms2 = transforms2 + self.p = p + + def __call__(self, features): + rnd = tf.random.uniform([], minval=0.0, maxval=1.0, dtype=tf.float32) + if rnd < self.p: + return self.transforms1(identity(features)) + else: + return self.transforms2(identity(features)) + + +class Resize: + """Resizes image so that min side is of provided size.""" + + def __init__(self, size, max_size=None): + assert isinstance(size, int) + self.size = tf.constant(size, dtype=tf.int32) + self.max_size = max_size # Max side after resize should be < max_size. + + def __call__(self, features): + return resize(features, self.size, self.max_size) + + +class RandomResize: + """Randomly resizes image so that min side is one of provided sizes.""" + + def __init__(self, sizes, max_size=None): + assert isinstance(sizes, (list, tuple)) + self.sizes = tf.constant(sizes, dtype=tf.int32) + self.max_size = max_size # Max side after resize should be < max_size. + + def __call__(self, features): + # Randomly picks a size. + logits = tf.zeros([1, len(self.sizes)]) + idx = tf.random.categorical(logits, 1)[0, 0] + size = self.sizes[idx] + return resize(features, size, self.max_size) + + +class NormalizeBoxes: + """Map boxes from xyxy to cxcywh and normalize to [0,1].""" + + def __call__(self, features): + h, w = get_hw(features, dtype=tf.float32) + if 'boxes' in features['label']: + boxes = features['label']['boxes'] + + # Maps boxes from xyxy to cxcywh. + x0, y0, x1, y1 = tf.split(boxes, 4, axis=-1) + boxes = tf.concat([(x0 + x1) / 2, (y0 + y1) / 2, (x1 - x0), (y1 - y0)], + axis=-1) + + # Normalizes boxes to [0, 1]. + boxes = boxes / tf.reshape(tf.stack([w, h, w, h]), shape=[1, 4]) + features['label']['boxes'] = boxes + + return features + + +class GetCocoInstanceMasks: + """Constructs the instance mask for each object in the original image.""" + + def __call__(self, features): + """Constructs the instance mask for each object in the original image. + + Args: + features: dict; Contains a single unbatched input example with keys + `inputs` and `label`. `label` contains the key `masks`, which is a COCO + panoptic image (with object IDs encoded in RGB). + + Returns: + An updated feature dict with a mask tensor of shape [num_objects, H, W]. + """ + + if 'masks' not in features['label']: + raise ValueError('masks are required when using this transformation.') + + panoptic_image = features['label']['masks'] + object_ids = features['label']['objects/id'] + + # Number of objects in the image. + num_objects = tf.shape(object_ids)[0] + object_ids_map = tf.reshape(object_ids, (num_objects, 1, 1)) + object_ids_map = tf.cast(object_ids_map, dtype=tf.int32) + + # Reconstruct object ids from the panoptic image per-pixel segment id. + panoptic_image = tf.cast(panoptic_image, dtype=tf.int32) + # convert RGB from panoptic_image to object id + object_id_mask = ( + panoptic_image[:, :, 0] + panoptic_image[:, :, 1] * 256 + + panoptic_image[:, :, 2] * 256 * 256) + + # `instance_masks` contains values in {0,1} to indicate presence of this + # object for each pixel. instance_masks.shape = [num_objects, height, width] + instance_masks = tf_int32(tf.equal(object_id_mask, object_ids_map)) + + # Add channel dimension. This makes things like hflip easier because it will + # treat the leading dimension (num_objects) as batch dimension: + instance_masks = instance_masks[..., tf.newaxis] + + features['label']['masks'] = tf.identity(instance_masks, 'masks') + + return features + + +class GetCocoBboxFromMasks: + """Compute the bounding boxes and object classes from segmentation masks.""" + + def __init__(self, keep_masks): + self.keep_masks = keep_masks + + def __call__(self, features): + """Compute the bounding boxes and object classes. + + based on: + https://github.com/facebookresearch/detr/blob/6a608d3c3a9e10403379f7e7f65f48e26d03f645/util/box_ops.py#L64 + + Args: + features: dict; Contains a single unbatched input example with keys + `inputs` and `label`. `label` contains the field `masks` with a tensor + of shape [num_objects, H, W, 1]. + + Returns: + An updated feature dict with box coordinates and labels. + """ + instance_masks = features['label']['masks'][..., 0] # Remove channel dim. + object_labels = features['label']['labels'] + h = tf.shape(instance_masks)[-2] + w = tf.shape(instance_masks)[-1] + x, y = tf.meshgrid(tf.range(w), tf.range(h)) + + def get_axis_min_max(axis_grid): + """Calculates the min and max pixel along the given axis for each object. + + Args: + axis_grid: tensor; grid of axis over which min and max is calculated. + + Returns: + tuple(int): axis_min and axis_max + """ + axis_mask = instance_masks * tf.expand_dims(axis_grid, axis=0) + axis_max = tf.math.reduce_max(axis_mask, axis=(1, 2)) + axis_min = tf.math.reduce_min( + tf.where(instance_masks == 0, int(1e8), axis_mask), axis=(1, 2)) + return axis_min, axis_max + + x_min, x_max = get_axis_min_max(x) + y_min, y_max = get_axis_min_max(y) + + # Stack objects to form the shape [num_objects, 4]. + bbox = tf.stack([x_min, y_min, x_max, y_max], 1) + + # Filter out objects that do not fall into the resized/cropped image + # non-existing objects are those with: + # [x_min, y_min, x_max, y_max] = [int(1e8), int(1e8), 0, 0] + existing_objects_bool = tf.reduce_all( + tf.not_equal(bbox, [int(1e8), int(1e8), 0, 0]), axis=-1) + existing_objects = tf.where(existing_objects_bool) + existing_objects = tf.squeeze(existing_objects, -1) + + # Gather rows that correspond to the existing objects. + instance_masks = tf.gather(instance_masks, existing_objects) + bbox = tf.gather(bbox, existing_objects) + object_labels = tf.gather(object_labels, existing_objects) + object_labels = object_labels + 1 # for the padded objects + + # Maps boxes to cxcywh format (the loss function expects to receive cxcywh). + bbox = tf.cast(bbox, tf.float32) + x0, y0, x1, y1 = tf.split(bbox, 4, axis=-1) + bbox = tf.concat([(x0 + x1) / 2, (y0 + y1) / 2, (x1 - x0), (y1 - y0)], + axis=-1) + + # Normalizes boxes to [0, 1]. + size = tf.reshape(tf.stack([w, h, w, h]), shape=[1, 4]) + size = tf.cast(size, tf.float32) + bbox = bbox / size + + # Add channel dim back: + instance_masks = instance_masks[..., tf.newaxis] + + tf.debugging.assert_shapes(( + (bbox, ['num_objects', 4]), + (object_labels, ['num_objects']), + (instance_masks, ['num_objects', 'h', 'w', 1]))) + + if self.keep_masks: + features['label']['masks'] = tf.identity(instance_masks, 'masks') + else: + del features['label']['masks'] + features['label']['boxes'] = tf.identity(bbox, 'boxes') + features['label']['labels'] = tf.identity(object_labels, 'labels') + + return features + + +class InitPaddingMask: + """Create a `padding_mask` of `ones` to match the current unpadded image.""" + + def __call__(self, features): + h, w = get_hw(features, dtype=tf.int32) + # padding_mask is initialized as ones. It will later be padded with zeros. + features['padding_mask'] = tf.ones((h, w), dtype=tf.float32) + return features + + +class RandomSizeCrop: + """Crop a random sized region from the image.""" + + def __init__(self, min_size, max_size): + self.min_size = min_size + self.max_size = max_size + + def __call__(self, features): + h, w = get_hw(features, dtype=tf.int32) + wcrop = tf.random.uniform([], self.min_size, tf.minimum(w, self.max_size), + dtype=tf.int32) + hcrop = tf.random.uniform([], self.min_size, tf.minimum(h, self.max_size), + dtype=tf.int32) + + i = tf.random.uniform([], 0, h - hcrop + 1, dtype=tf.int32) + j = tf.random.uniform([], 0, w - wcrop + 1, dtype=tf.int32) + region = (i, j, hcrop, wcrop) + + return crop(features, region) + + +def hflip(features): + """Flip an image, boxes [xyxy un-normalized] (, and masks) horizontally.""" + image = features['inputs'] + target = features['label'] + + flipped_image = tf.image.flip_left_right(image) + + if 'boxes' in target: + # Flips the boxes. + _, w = get_hw(image, dtype=tf.float32) + x0, y0, x1, y1 = tf.split(target['boxes'], 4, axis=-1) + # Converts as [w - x1, y0, w - x0, y1] not [w - x1 - 1, w - x0 - 1, y1] + # because these are float coordinates not pixel indices. + target['boxes'] = tf.concat([w - x1, y0, w - x0, y1], axis=-1) + + if 'masks' in target: + target['masks'] = tf.image.flip_left_right(target['masks']) + + features['inputs'] = flipped_image + features['label'] = target + return features + + +def get_size_with_aspect_ratio(image_size, size, max_size=None): + """Output (h, w) such that smallest side in image_size resizes to size.""" + h, w = image_size[0], image_size[1] + if max_size is not None: + max_size = tf_float(max_size) + min_original_size = tf_float(tf.minimum(w, h)) + max_original_size = tf_float(tf.maximum(w, h)) + if max_original_size / min_original_size * tf_float(size) > max_size: + size = tf_int32(tf.floor( + max_size * min_original_size / max_original_size)) + + if (w <= h and tf.equal(w, size)) or (h <= w and tf.equal(h, size)): + return (h, w) + + if w < h: + ow = size + oh = tf_int32(size * h / w) + else: + oh = size + ow = tf_int32(size * w / h) + + return (oh, ow) + + +def resize(features, size, max_size=None): + """Resize the image to min-side = size and adjust target boxes, area, mask. + + Args: + features: dict; 'inputs' contains tf.Tensor image unbatched. 'label' is + a dictionary of label information such a boxes, area, etc. + size: tf.Tensor; Scalar for size of smallest sized after resize. + max_size: int[Optional]; Scalar upper bound on resized image dimensions. + + Returns: + Resized and adjusted features. Also features['size'] = (w, h) tuple. + """ + image = features['inputs'] + target = features['label'] + + # Resize the image while preserving aspect ratio. + original_size = tf.shape(image)[0:2] + new_size = get_size_with_aspect_ratio(original_size, size, max_size) + rescaled_image = tf.image.resize(image, new_size) + + # Compute resize ratios for each dimension to be used for scaling boxes, area. + r_height = tf_float(new_size[0] / original_size[0]) + r_width = tf_float(new_size[1] / original_size[1]) + + if 'boxes' in target: + x0, y0, x1, y1 = tf.split(target['boxes'], 4, axis=-1) + target['boxes'] = tf.concat([x0 * r_width, y0 * r_height, + x1 * r_width, y1 * r_height], axis=-1) + + if 'area' in target: + area = target['area'] + scaled_area = tf_float(area) * (r_width * r_height) + target['area'] = scaled_area + + target['size'] = tf.stack(new_size) + + if 'masks' in target: + dtype = target['masks'].dtype + rescaled_masks = tf.image.resize( + tf_float(target['masks']), + new_size, + method=tf.image.ResizeMethod.NEAREST_NEIGHBOR) + tf.debugging.assert_shapes(( + (rescaled_image, [..., 'w', 'h', 3]), + (rescaled_masks, [..., 'w', 'h', 1]))) + target['masks'] = tf.cast(rescaled_masks, dtype) + + features['inputs'] = rescaled_image + features['label'] = target + return features + + +def crop(features, region): + """Crop the image + bbox (+ mask) to region. + + WARNING! Only use during train. In eval mode the original_size would need to + be updated somehow. + + Args: + features: DETR decoded input features. + region: (i, j, h, w) tuple of the region to be cropped. + + Returns: + Cropped features dictionary. + """ + image = features['inputs'] + target = features['label'] + i, j, h, w = region + + cropped_image = image[i:i+h, j:j+w, :] + features['inputs'] = cropped_image + + target['size'] = tf.stack([h, w]) + + fields = ['labels', 'area', 'is_crowd', 'objects/id'] + + if 'boxes' in target: + boxes = target['boxes'] + cropped_boxes = boxes - tf_float(tf.expand_dims( + tf.stack([j, i, j, i]), axis=0)) + cropped_boxes = tf.minimum( + tf.reshape(cropped_boxes, [-1, 2, 2]), + tf.reshape(tf_float(tf.stack([w, h])), [1, 1, 2])) + cropped_boxes = tf.clip_by_value(cropped_boxes, 0, 1000000) + target['boxes'] = tf.reshape(cropped_boxes, [-1, 4]) + fields.append('boxes') + + if 'area' in target: + area = tf.reduce_prod(cropped_boxes[:, 1, :] - cropped_boxes[:, 0, :], + axis=1) + target['area'] = area + + if 'masks' in target: + # TODO(aravindhm): should we update the area here if there are no boxes? + target['masks'] = target['masks'][..., i:i+h, j:j+w, :] + fields.append('masks') + + # Removes elements for which the boxes or masks that have zero area. + if 'boxes' in target or 'masks' in target: + if 'boxes' in target: + cropped_boxes = tf.reshape(target['boxes'], [-1, 2, 2]) + keep = tf.logical_and(cropped_boxes[:, 1, 0] > cropped_boxes[:, 0, 0], + cropped_boxes[:, 1, 1] > cropped_boxes[:, 0, 1]) + else: + keep = tf.reduce_any(tf.not_equal(target['masks'], 0), axis=[1, 2, 3]) + + for field in fields: + if field in target: + target[field] = target[field][keep] + + features['label'] = target + return features diff --git a/scenic/projects/baselines/fully_connected.py b/scenic/projects/baselines/fully_connected.py new file mode 100644 index 0000000000000000000000000000000000000000..c055a62f8bd6fc10b71366812e57f5374577d482 --- /dev/null +++ b/scenic/projects/baselines/fully_connected.py @@ -0,0 +1,100 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Simple fully connected feedforward neural network classifier.""" + +from typing import Callable, Iterable, Union, Sequence + +import flax.linen as nn +from jax.nn import initializers +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models.classification_model import ClassificationModel +from scenic.model_lib.layers import nn_layers + + +# TODO(mrit): Upstream this to jax.nn.initializers +# Inputs are PRNGKey, input shape and dtype. +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +class FullyConnected(nn.Module): + """Defines a fully connected neural network. + + The model assumes the input data has shape + [batch_size_per_device, *input_shape] where input_shape may be of arbitrary + rank. The model flatten the input before applying a dense layer. + + Attributes: + num_outputs: Number of output classes. + hid_sizes: Size of hidden units in each layer. + kernel_init: Kernel initialization. + bias_init: Bias initialization. + dtype: Model dtype. + """ + num_outputs: int + hid_sizes: Union[Iterable[int], int] + kernel_init: Initializer = initializers.lecun_normal() + bias_init: Initializer = initializers.zeros + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, debug: bool = False + ) -> jnp.ndarray: + """Applies fully connected model on the input. + + Args: + x: Input tensor. + train: bool; Whether the model is running at train time. + debug: bool; Whether the debug mode is enabled. debug=True enables model + specific logging/storing some values using jax.host_callback. + + Returns: + Unnormalized logits. + """ + del train, debug + hid_sizes = self.hid_sizes + if isinstance(hid_sizes, int): + hid_sizes = [hid_sizes] + x = jnp.reshape(x, (x.shape[0], -1)) + for num_hid in hid_sizes: + x = nn.Dense( + num_hid, kernel_init=self.kernel_init, bias_init=self.bias_init)( + x) + x = nn.relu(x) + + # head + x = nn_layers.IdentityLayer(name='pre_logits')(x) + x = nn.Dense( + self.num_outputs, + kernel_init=self.kernel_init, + bias_init=self.bias_init, + name='output_projection')( + x) + return x + + +class FullyConnectedClassificationModel(ClassificationModel): + """Implemets a fully connected model for classification.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return FullyConnected( + num_outputs=self.dataset_meta_data['num_classes'], + hid_sizes=self.config.hid_sizes, + dtype=model_dtype) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return ml_collections.ConfigDict( + dict(hid_sizes=[20, 10], data_dtype_str='float32')) diff --git a/scenic/projects/baselines/hybrid_vit.py b/scenic/projects/baselines/hybrid_vit.py new file mode 100644 index 0000000000000000000000000000000000000000..e5402f9219406c5c524477197f4144443c1fbb0b --- /dev/null +++ b/scenic/projects/baselines/hybrid_vit.py @@ -0,0 +1,200 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Hybrid Vision Transformer.""" + +from typing import Any, Optional + +import flax.linen as nn +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models.multilabel_classification_model import MultiLabelClassificationModel +from scenic.model_lib.layers import nn_layers +from scenic.projects.baselines import bit_resnet +from scenic.projects.baselines import vit + + +class HybridViT(nn.Module): + """Vision Transformer model. + + Attributes: + num_classes: Number of output classes. + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + hidden_size: Size of the hidden state of the output of model's stem. + resnet: Configuration of the ResNet block in the stem of the model. + patches: Configuration of the patches extracted in the stem of the model. + representation_size: Size of the representation layer in the model's head. + if None, we skip the extra projection + tanh activation at the end. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + dtype: JAX data type for activations. + """ + + num_classes: int + mlp_dim: int + num_layers: int + num_heads: int + hidden_size: int + resnet: Optional[ml_collections.ConfigDict] = None + patches: Optional[ml_collections.ConfigDict] = None + representation_size: Optional[int] = None + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + classifier: str = 'gap' + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, debug: bool = False): + patches_ = self.patches + assert patches_ is not None + + res_net = self.resnet + if res_net is not None: + width = int(64 * res_net.width_factor) + # Root block. + x = bit_resnet.StdConv( + width, (7, 7), strides=(2, 2), use_bias=False, name='conv_root')( + x) + x = nn.GroupNorm(name='gn_root')(x) + x = nn.relu(x) + x = nn.max_pool(x, (3, 3), strides=(2, 2), padding='SAME') + # ResNet stages. + if res_net.num_layers: + x = bit_resnet.ResNetStage( + block_size=res_net.num_layers[0], + nout=width, + first_stride=(1, 1), + name='block1')( + x) + for i, block_size in enumerate(res_net.num_layers[1:], 1): + x = bit_resnet.ResNetStage( + block_size=block_size, + nout=width * 2**i, + first_stride=(2, 2), + name=f'block{i + 1}')( + x) + + fh, fw = patches_.size + x = nn.Conv( + self.hidden_size, (fh, fw), + strides=(fh, fw), + padding='VALID', + name='embedding')( + x) + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + # If we want to add a class token, add it here. + if self.classifier == 'token': + cls = self.param('cls', nn.initializers.zeros, (1, 1, c), x.dtype) + cls = jnp.tile(cls, [n, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + + x = vit.Encoder( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=self.stochastic_depth, + dtype=self.dtype, + name='Transformer')( + x, train=train) + + if self.classifier in ('token', '0'): + x = x[:, 0] + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=1) + + if self.representation_size is not None: + x = nn.Dense(self.representation_size, name='pre_logits')(x) + x = nn.tanh(x) + else: + x = nn_layers.IdentityLayer(name='pre_logits')(x) + x = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x) + return x + + +class HybridViTMultiLabelClassificationModel(MultiLabelClassificationModel): + """Hybrid Vision Transformer model for multi-label classification task.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return HybridViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + representation_size=self.config.model.representation_size, + hidden_size=self.config.model.hidden_size, + resnet=self.config.model.resnet, + patches=self.config.model.patches, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + stochastic_depth=self.config.model.get('stochastic_depth', 0.0), + dtype=model_dtype, + ) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return ml_collections.ConfigDict({ + 'model': + dict( + num_heads=2, + num_layers=1, + representation_size=16, + mlp_dim=32, + dropout_rate=0., + attention_dropout_rate=0., + hidden_size=16, + patches={'size': (4, 4)}, + resnet={ + 'num_layers': (1,), + 'width_factor': 1 + }, + classifier='gap', + data_dtype_str='float32') + }) + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is writen to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return vit.init_vit_from_train_state(train_state, restored_train_state, + self.config, restored_model_cfg) diff --git a/scenic/projects/baselines/mixer.py b/scenic/projects/baselines/mixer.py new file mode 100644 index 0000000000000000000000000000000000000000..72bfc6a538470dd7fe7b76de7d97202a0a101c66 --- /dev/null +++ b/scenic/projects/baselines/mixer.py @@ -0,0 +1,185 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of MLP-Mixer model.""" + +from typing import Optional, Sequence + +import flax.linen as nn +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models.multilabel_classification_model import MultiLabelClassificationModel +from scenic.model_lib.layers import attention_layers +from scenic.model_lib.layers import nn_layers + + +class MixerBlock(nn.Module): + """Mixer block consisting of a token- and a channel-mixing phase. + + Attributes: + channels_mlp_dim: Hidden dimension of the channel mixing MLP. + sequence_mlp_dim: Hidden dimension of the token (sequence) mixing MLP. + dropout_rate: Dropout rate. + stochastic_depth: The layer dropout rate (= stochastic depth). + layer_scale: The scalar value used to initialise layer_scale. If None, + layer_scale is not used. + + Returns: + Output after mixer block. + """ + channels_mlp_dim: int + sequence_mlp_dim: int + dropout_rate: float = 0.0 + stochastic_depth: float = 0.0 + layer_scale: Optional[float] = None + + # Having this as a separate function makes it possible to capture the + # intermediate representation via capture_intermediandarrates. + def combine_branches(self, long_branch: jnp.ndarray, + short_branch: jnp.ndarray) -> jnp.ndarray: + """Merges residual connections.""" + return long_branch + short_branch + + @nn.compact + def __call__(self, inputs: jnp.ndarray, deterministic: bool) -> jnp.ndarray: + """Applies the Mixer block to inputs.""" + if inputs.ndim != 3: + raise ValueError('Input should be of shape `[batch, tokens, channels]`.') + + if self.layer_scale is not None: + layerscale_init = nn_layers.get_constant_initializer( + self.layer_scale) + + # Token mixing part, provides between-patches communication. + x = nn.LayerNorm()(inputs) + x = jnp.swapaxes(x, 1, 2) + + x = attention_layers.MlpBlock( + mlp_dim=self.sequence_mlp_dim, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + name='token_mixing')( + x, deterministic=deterministic) + x = jnp.swapaxes(x, 1, 2) + if self.layer_scale is not None: + x = nn_layers.Affine(scale_init=layerscale_init, use_bias=False)(x) + + x = nn_layers.StochasticDepth(rate=self.stochastic_depth)(x, deterministic) + x = self.combine_branches(x, inputs) + + # Channel-mixing part, which provides within-patch communication. + y = nn.LayerNorm()(x) + y = attention_layers.MlpBlock( + mlp_dim=self.channels_mlp_dim, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + name='channel_mixing')( + y, deterministic=deterministic) + if self.layer_scale is not None: + x = nn_layers.Affine(scale_init=layerscale_init, use_bias=False)(x) + + y = nn_layers.StochasticDepth(rate=self.stochastic_depth)(y, deterministic) + return self.combine_branches(y, x) + + +class Mixer(nn.Module): + """Mixer model. + + Attributes: + num_classes: Number of output classes. + patch_size: Patch size of the stem. + hidden_size: Size of the hidden state of the output of model's stem. + num_layers: Number of layers. + channels_mlp_dim: hidden dimension of the channel mixing MLP. + sequence_mlp_dim: hidden dimension of the token (sequence) mixing MLP. + dropout_rate: Dropout rate. + stochastic_depth: overall stochastic depth rate. + """ + + num_classes: int + patch_size: Sequence[int] + hidden_size: int + num_layers: int + channels_mlp_dim: int + sequence_mlp_dim: int + dropout_rate: float = 0.0 + stochastic_depth: float = 0.0 + layer_scale: Optional[float] = None + + @nn.compact + def __call__(self, + x: jnp.ndarray, + *, + train: bool, + debug: bool = False) -> jnp.ndarray: + + x = nn.Conv( + self.hidden_size, + self.patch_size, + strides=self.patch_size, + padding='VALID', + name='embedding')( + x) + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + for i in range(self.num_layers): + p = (i / max(self.num_layers - 1, 1)) * self.stochastic_depth + x = MixerBlock( + channels_mlp_dim=self.channels_mlp_dim, + sequence_mlp_dim=self.sequence_mlp_dim, + dropout_rate=self.dropout_rate, + stochastic_depth=p, + layer_scale=self.layer_scale, + name=f'mixerblock_{i}')( + x, deterministic=not train) + x = nn.LayerNorm(name='pre_logits_norm')(x) + # Use global average pooling for classifier: + x = jnp.mean(x, axis=1) + x = nn_layers.IdentityLayer(name='pre_logits')(x) + return nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x) + + +class MixerMultiLabelClassificationModel(MultiLabelClassificationModel): + """Mixer model for multi-label classification task.""" + + def build_flax_model(self) -> nn.Module: + return Mixer( + num_classes=self.dataset_meta_data['num_classes'], + patch_size=self.config.model.patch_size, + hidden_size=self.config.model.hidden_size, + num_layers=self.config.model.num_layers, + channels_mlp_dim=self.config.model.channels_mlp_dim, + sequence_mlp_dim=self.config.model.sequence_mlp_dim, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + stochastic_depth=self.config.model.get('stochastic_depth', 0.0), + layer_scale=self.config.model.get('layer_scale', None) + ) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return ml_collections.ConfigDict({ + 'model': + dict( + patch_size=(4, 4), + hidden_size=16, + num_layers=1, + channels_mlp_dim=32, + sequence_mlp_dim=32, + dropout_rate=0., + stochastic_depth=0, + ) + }) diff --git a/scenic/projects/baselines/plainvit/README.md b/scenic/projects/baselines/plainvit/README.md new file mode 100644 index 0000000000000000000000000000000000000000..fc27378ffdf30206d59dcbbb9c47482f53be8891 --- /dev/null +++ b/scenic/projects/baselines/plainvit/README.md @@ -0,0 +1,8 @@ +## Plain ViT +This directory contains the implementation of Plain ViT proposed in +[Better plain ViT baselines for ImageNet-1k](https://arxiv.org/pdf/2205.01580). + +### Acknowledgment +Thanks to Fuzhao Xue for his contribution to the implementation of this +baseline. Also thanks to Manoj Kumar for his help with the details of +the hyper-parameters and implementation. diff --git a/scenic/projects/baselines/plainvit/configs/imagenet_plainvit_config.py b/scenic/projects/baselines/plainvit/configs/imagenet_plainvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..bb59c75e82bf640c5fb389b7a8a20d49a8161984 --- /dev/null +++ b/scenic/projects/baselines/plainvit/configs/imagenet_plainvit_config.py @@ -0,0 +1,180 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for Plain ViT on ImageNet2012. + +Based on: https://arxiv.org/pdf/2205.01580.pdf + +""" +# pylint: disable=line-too-long + +import ml_collections + +_IMAGENET_TRAIN_SIZE = 1281167 +NUM_CLASSES = 1000 + +VARIANT = 'S/16' + +HIDDEN_SIZES = { + 'Ti': 192, + 'S': 384, + 'M': 512, + 'B': 768, + 'L': 1024, + 'H': 1280, + 'g': 1408, + 'G': 1664, + 'e': 1792 +} +MLP_DIMS = { + 'Ti': 768, + 'S': 1536, + 'M': 2048, + 'B': 3072, + 'L': 4096, + 'H': 5120, + 'g': 6144, + 'G': 8192, + 'e': 15360 +} +NUM_HEADS = { + 'Ti': 3, + 'S': 6, + 'M': 8, + 'B': 12, + 'L': 16, + 'H': 16, + 'g': 16, + 'G': 16, + 'e': 16 +} +NUM_LAYERS = { + 'Ti': 12, + 'S': 12, + 'M': 12, + 'B': 12, + 'L': 24, + 'H': 32, + 'g': 40, + 'G': 48, + 'e': 56 +} + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for ImageNet.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet-regularized_vit' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'imagenet2012' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train' + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)|flip_lr' + '|randaug(2, 10)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|resize_small(256)|central_crop(224)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 250_000 + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'plainvit' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = HIDDEN_SIZES[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = NUM_HEADS[version] + config.model.mlp_dim = MLP_DIMS[version] + config.model.num_layers = NUM_LAYERS[version] + config.model.dropout_rate = 0. + config.model.classifier = 'map' + config.model.representation_size = None + config.model.positional_embedding = 'learn' + config.init_head_bias = -6.9 # -log(1000) + + # Training. + config.trainer_name = 'plainvit_trainer' + config.loss = 'sigmoid_xent' + config.l2_decay_factor = None + config.label_smoothing = None + config.num_training_epochs = 300 + config.log_eval_steps = 1000 + config.batch_size = 8 if runlocal else 1024 + config.rng_seed = 42 + sched = ml_collections.ConfigDict() + sched.re = '(.*)' + sched.lr_configs = ml_collections.ConfigDict() + sched.lr_configs.learning_rate_schedule = 'compound' + sched.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + sched.lr_configs.total_steps = config.num_training_epochs * steps_per_epoch + sched.lr_configs.steps_per_cycle = sched.lr_configs.total_steps + sched.lr_configs.warmup_steps = 10_000 + sched.lr_configs.base_learning_rate = 0.001 + sched.lr_configs.timescale = 10_000 + config.schedule = ml_collections.ConfigDict({'all': sched}) + + # *Single* optimizer. + optim = ml_collections.ConfigDict() + optim.optax_name = 'scale_by_adam' + # optim.optax = dict(mu_dtype='bfloat16') + optim.optax_configs = ml_collections.ConfigDict( + { # Optimizer settings. + 'b1': 0.9, + 'b2': 0.999, + }) + config.optax = dict(mu_dtype='bfloat16') + optim.max_grad_norm = 1.0 + + optim.weight_decay = 0.0001 + optim.weight_decay_decouple = True + config.optimizer = optim + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.2 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + config.m = None # Placeholder for randaug strength. + config.l = None # Placeholder for randaug layers. + + + return config + + diff --git a/scenic/projects/baselines/plainvit/configs/transfer_plainvit_config.py b/scenic/projects/baselines/plainvit/configs/transfer_plainvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..00b8afde3e74aee0281615b95381377671b93f53 --- /dev/null +++ b/scenic/projects/baselines/plainvit/configs/transfer_plainvit_config.py @@ -0,0 +1,190 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for Plain ViT on ImageNet2012. + +Based on: https://arxiv.org/pdf/2205.01580.pdf + +""" +# pylint: disable=line-too-long + +import ml_collections + +VARIANT = 'B/16' + +HRES = 440 +LRES = 384 + +HIDDEN_SIZES = { + 'Ti': 192, + 'S': 384, + 'M': 512, + 'B': 768, + 'L': 1024, + 'H': 1280, + 'g': 1408, + 'G': 1664, + 'e': 1792 +} +MLP_DIMS = { + 'Ti': 768, + 'S': 1536, + 'M': 2048, + 'B': 3072, + 'L': 4096, + 'H': 5120, + 'g': 6144, + 'G': 8192, + 'e': 15360 +} +NUM_HEADS = { + 'Ti': 3, + 'S': 6, + 'M': 8, + 'B': 12, + 'L': 16, + 'H': 16, + 'g': 16, + 'G': 16, + 'e': 16 +} +NUM_LAYERS = { + 'Ti': 12, + 'S': 12, + 'M': 12, + 'B': 12, + 'L': 24, + 'H': 32, + 'g': 40, + 'G': 48, + 'e': 56 +} + + +CHECKPOINTS = { + # Better plain vit-s16 baselines from https://arxiv.org/abs/2205.01580 + 'S/16': 'gs://big_vision/vit_s16_i1k_300ep.npz', +} + + +def get_config(): + """Returns the ViT experiment configuration for ImageNet.""" + + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet_vit' + + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'imagenet2012' + common = '|value_range(-1, 1)' + common += '|onehot(1000, key="{lbl}", key_result="labels")' + common += '|keep("image", "labels")' + pp_train = f'decode_jpeg_and_inception_crop({LRES})|flip_lr' + pp_train += common.format(lbl='label') + pps_val = { + 'resize': f'decode|resize({LRES})', + 'resize_crop': f'decode|resize({HRES})|central_crop({LRES})', + 'resmall_crop': f'decode|resize_small({HRES})|central_crop({LRES})', + } + val_split = () + for pp_val_name, pp_val in pps_val.items(): + val_split += ( + (f'val_{pp_val_name}', 'imagenet2012', 'train[99%:]', + pp_val + common.format(lbl='label')), + (f'test_{pp_val_name}', 'imagenet2012', 'validation', + pp_val + common.format(lbl='label')), + (f'v2_{pp_val_name}', 'imagenet_v2', 'test', + pp_val + common.format(lbl='label')), + (f'real_{pp_val_name}', 'imagenet2012_real', 'validation', + pp_val + common.format(lbl='real_label')), + ) + config.dataset_configs.val_split = val_split + config.dataset_configs.train_split = 'train[:99%]' + config.dataset_configs.num_classes = 1000 + config.dataset_configs.pp_train = pp_train + config.dataset_configs.pp_eval = None + config.dataset_configs.prefetch_to_device = None + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 50_000 + config.batch_size = 512 + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'plainvit' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = HIDDEN_SIZES[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = NUM_HEADS[version] + config.model.mlp_dim = MLP_DIMS[version] + config.model.num_layers = NUM_LAYERS[version] + config.model.dropout_rate = 0. + config.model.classifier = 'map' + config.model.representation_size = None + config.model.positional_embedding = 'learn' + config.init_head_bias = -6.9 # -log(1000) + + # Pretrained model info. + config.init_from = ml_collections.ConfigDict() + config.init_from.checkpoint_format = 'big_vision' + config.init_from.checkpoint_path = CHECKPOINTS[VARIANT] + + # Training. + config.trainer_name = 'plainvit_trainer' + config.loss = 'sigmoid_xent' + config.l2_decay_factor = None + config.label_smoothing = None + config.log_eval_steps = 1000 + config.log_summary_steps = 100 + config.num_training_epochs = None # we use number of steps + config.num_training_steps = 20_000 + config.rng_seed = 42 + sched = ml_collections.ConfigDict() + sched.re = '(.*)' + sched.lr_configs = ml_collections.ConfigDict() + sched.lr_configs.learning_rate_schedule = 'compound' + sched.lr_configs.factors = 'constant*linear_warmup*cosine_decay' + sched.lr_configs.steps_per_cycle = config.num_training_steps + sched.lr_configs.total_steps = config.num_training_steps + sched.lr_configs.warmup_steps = 500 + sched.lr_configs.base_learning_rate = 0.03 + + # Configure both learning rate schedules. + config.schedule = ml_collections.ConfigDict({'all': sched}) + + # *Single* optimizer. + optim = ml_collections.ConfigDict() + optim.optax_name = 'scenic.momentum_hp' + # Disable Optax gradient clipping as we handle it ourselves. + optim.max_grad_norm = 1.0 + optim.weight_decay = 0.0 + config.optimizer = optim + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/baselines/plainvit/configs/transfer_standard4_plainvit_config.py b/scenic/projects/baselines/plainvit/configs/transfer_standard4_plainvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..737768ef1070a31016da0c8e935471c763127187 --- /dev/null +++ b/scenic/projects/baselines/plainvit/configs/transfer_standard4_plainvit_config.py @@ -0,0 +1,237 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for Plain ViT on ImageNet2012. + +Based on: https://arxiv.org/pdf/2205.01580.pdf + +""" +# pylint: disable=line-too-long + +import ml_collections + +VARIANT = 'B/16' + +HIDDEN_SIZES = { + 'Ti': 192, + 'S': 384, + 'M': 512, + 'B': 768, + 'L': 1024, + 'H': 1280, + 'g': 1408, + 'G': 1664, + 'e': 1792 +} +MLP_DIMS = { + 'Ti': 768, + 'S': 1536, + 'M': 2048, + 'B': 3072, + 'L': 4096, + 'H': 5120, + 'g': 6144, + 'G': 8192, + 'e': 15360 +} +NUM_HEADS = { + 'Ti': 3, + 'S': 6, + 'M': 8, + 'B': 12, + 'L': 16, + 'H': 16, + 'g': 16, + 'G': 16, + 'e': 16 +} +NUM_LAYERS = { + 'Ti': 12, + 'S': 12, + 'M': 12, + 'B': 12, + 'L': 24, + 'H': 32, + 'g': 40, + 'G': 48, + 'e': 56 +} + +CHECKPOINTS = { + # Better plain vit-s16 baselines from https://arxiv.org/abs/2205.01580 + 'S/16': 'gs://big_vision/vit_s16_i1k_300ep.npz', +} + + +def get_config(): + """Returns the ViT experiment configuration for ImageNet.""" + + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet_vit' + + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = '' + config.dataset_configs.val_split = () + config.dataset_configs.train_split = '' + config.dataset_configs.num_classes = 0 + config.dataset_configs.pp_train = '' + config.dataset_configs.pp_eval = None + config.dataset_configs.prefetch_to_device = None + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 50_000 + config.batch_size = 512 + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'plainvit' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = HIDDEN_SIZES[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = NUM_HEADS[version] + config.model.mlp_dim = MLP_DIMS[version] + config.model.num_layers = NUM_LAYERS[version] + config.model.dropout_rate = 0. + config.model.classifier = 'map' + config.model.representation_size = None + config.model.positional_embedding = 'learn' + config.init_head_bias = -6.9 # -log(1000) + + # Pretrained model info. + config.init_from = ml_collections.ConfigDict() + config.init_from.checkpoint_format = 'big_vision' + config.init_from.checkpoint_path = CHECKPOINTS[VARIANT] + + # Training. + config.trainer_name = 'plainvit_trainer' + config.loss = 'sigmoid_xent' + config.l2_decay_factor = None + config.label_smoothing = None + config.log_eval_steps = 1000 + config.log_summary_steps = 100 + config.num_training_epochs = None # we use number of steps + config.num_training_steps = 20_000 + config.rng_seed = 42 + sched = ml_collections.ConfigDict() + sched.re = '(.*)' + sched.lr_configs = ml_collections.ConfigDict() + sched.lr_configs.learning_rate_schedule = 'compound' + sched.lr_configs.factors = 'constant*linear_warmup*cosine_decay' + sched.lr_configs.steps_per_cycle = config.num_training_steps + sched.lr_configs.total_steps = config.num_training_steps + sched.lr_configs.warmup_steps = 500 + sched.lr_configs.base_learning_rate = 0.03 + + # Configure both learning rate schedules. + config.schedule = ml_collections.ConfigDict({'all': sched}) + + # *Single* optimizer. + optim = ml_collections.ConfigDict() + optim.optax_name = 'scenic.momentum_hp' + # Disable Optax gradient clipping as we handle it ourselves. + optim.max_grad_norm = 1.0 + optim.weight_decay = 0.0 + config.optimizer = optim + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.2 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + +def fixed(hyper, **kw): + return hyper.zipit( + [hyper.fixed(f'config.{k}', v, length=1) for k, v in kw.items()] + ) + + +def task( + hyper, name, train, val, n_cls, steps, warmup, h_res=256, l_res=224, ch=3 +): + """Vision task with val and test splits.""" + # pylint: disable=line-too-long + common = '|value_range(-1, 1)' + common += f'|onehot({n_cls}, key="label", key_result="labels")' + common += '|keep("image", "labels")' + pp_train = f'decode(channels={ch})|inception_crop({l_res})|flip_lr' + common + pp_eval = f'decode(channels={ch})|resize({l_res})' + common + pp_eval_resize_crop = ( + f'decode(channels={ch})|resize({h_res})|central_crop({l_res})' + common + ) + pp_eval_resmall_crop = ( + f'decode(channels={ch})|resize_small({h_res})|central_crop({l_res})' + + common + ) + # pylint: enable=line-too-long + + return fixed( + hyper, + **{ + 'dataset_configs.dataset': name, + 'dataset_configs.train_split': train, + 'dataset_configs.pp_train': pp_train, + 'dataset_configs.val_split': ( + ('val', name, val, pp_eval), + ('y/val_resize', name, val, pp_eval), + ('y/val_resize_crop', name, val, pp_eval_resize_crop), + ('y/val_resmall_crop', name, val, pp_eval_resmall_crop), + ('test', name, 'test', pp_eval), + ('y/test_resize', name, 'test', pp_eval), + ('y/test_resize_crop', name, 'test', pp_eval_resize_crop), + ('y/test_resmall_crop', name, 'test', pp_eval_resmall_crop), + ), + 'dataset_configs.num_classes': n_cls, + 'schedule.all.lr_configs.warmup_steps': warmup, + 'schedule.all.lr_configs.total_steps': steps, + 'schedule.all.lr_configs.steps_per_cycle': steps, + 'num_training_steps': steps, + }, + ) + + +def get_hyper(hyper): + """Sweeps over datasets.""" + # pylint: disable=line-too-long + c100 = lambda **kw: task(hyper, 'cifar100', 'train[:98%%]', 'train[98%%:]', n_cls=100, **kw) + c10 = lambda **kw: task(hyper, 'cifar10', 'train[:98%%]', 'train[98%%:]', n_cls=10, **kw) + pet = lambda **kw: task(hyper, 'oxford_iiit_pet', 'train[:90%%]', 'train[90%%:]', n_cls=37, **kw) + flower = lambda **kw: task(hyper, 'oxford_flowers102', 'train[:90%%]', 'train[90%%:]', n_cls=102, **kw) + # pylint: enable=line-too-long + + return hyper.product([ + hyper.chainit([ + c100(h_res=448, l_res=384, steps=10_000, warmup=500), + c10(h_res=448, l_res=384, steps=10_000, warmup=500), + pet(h_res=448, l_res=384, steps=500, warmup=100), + flower(h_res=448, l_res=384, steps=500, warmup=100), + ]), + hyper.sweep( + 'config.schedule.all.lr_configs.base_learning_rate', + [0.03, 0.01, 0.003, 0.001], + ), + ]) diff --git a/scenic/projects/baselines/plainvit/configs/vtab_plainvit_config.py b/scenic/projects/baselines/plainvit/configs/vtab_plainvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..a0ee79d08faf12b7728c455b4b3ee913a17d5e97 --- /dev/null +++ b/scenic/projects/baselines/plainvit/configs/vtab_plainvit_config.py @@ -0,0 +1,440 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for Plain ViT on VTAB. + +Based on: https://arxiv.org/pdf/2106.04560.pdf + +ViT-G/14 gets 78.29 +/- 0.53 on VTAB (see https://arxiv.org/pdf/2106.04560.pdf). + +""" +# pylint: disable=line-too-long + +import ml_collections + +VARIANT = 'B/16' + +HIDDEN_SIZES = { + 'Ti': 192, + 'S': 384, + 'M': 512, + 'B': 768, + 'L': 1024, + 'H': 1280, + 'g': 1408, + 'G': 1664, + 'e': 1792 +} +MLP_DIMS = { + 'Ti': 768, + 'S': 1536, + 'M': 2048, + 'B': 3072, + 'L': 4096, + 'H': 5120, + 'g': 6144, + 'G': 8192, + 'e': 15360 +} +NUM_HEADS = { + 'Ti': 3, + 'S': 6, + 'M': 8, + 'B': 12, + 'L': 16, + 'H': 16, + 'g': 16, + 'G': 16, + 'e': 16 +} +NUM_LAYERS = { + 'Ti': 12, + 'S': 12, + 'M': 12, + 'B': 12, + 'L': 24, + 'H': 32, + 'g': 40, + 'G': 48, + 'e': 56 +} + +CHECKPOINTS = { + # Better plain vit-s16 baselines from https://arxiv.org/abs/2205.01580 + 'S/16': 'gs://big_vision/vit_s16_i1k_300ep.npz', +} + + +def get_config(): + """Returns the ViT experiment configuration for ImageNet.""" + + config = ml_collections.ConfigDict() + config.experiment_name = 'vtab_vit_g' + + # Dataset (changed in the sweep). + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = '' + config.dataset_configs.val_split = () + config.dataset_configs.train_split = '' + config.dataset_configs.num_classes = 0 + config.dataset_configs.pp_train = '' + config.dataset_configs.pp_eval = None + config.dataset_configs.prefetch_to_device = None + config.dataset_configs.shuffle_buffer_size = 1_000 + config.batch_size = 512 + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'plainvit' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = HIDDEN_SIZES[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = NUM_HEADS[version] + config.model.mlp_dim = MLP_DIMS[version] + config.model.num_layers = NUM_LAYERS[version] + config.model.dropout_rate = 0. + config.model.classifier = 'gap' # ViT-G was tuned on VTAB using 'gap'. + config.model.representation_size = None + config.model.positional_embedding = 'learn' + config.init_head_bias = 0.0 + + # Pretrained model info. + config.init_from = ml_collections.ConfigDict() + config.init_from.checkpoint_format = 'big_vision' + config.init_from.checkpoint_path = CHECKPOINTS[VARIANT] + + # Training. + config.trainer_name = 'plainvit_trainer' + config.loss = 'softmax_xent' + config.l2_decay_factor = None + config.label_smoothing = None + config.log_eval_steps = 100 + config.log_summary_steps = 50 + config.num_training_epochs = None # we use number of steps + config.num_training_steps = 2_500 # ViT-G was tuned on VTAB with 2500 steps. + config.rng_seed = 42 + sched = ml_collections.ConfigDict() + sched.re = '(.*)' + sched.lr_configs = ml_collections.ConfigDict() + sched.lr_configs.learning_rate_schedule = 'compound' + sched.lr_configs.factors = 'constant*linear_warmup*cosine_decay' + sched.lr_configs.steps_per_cycle = config.num_training_steps + sched.lr_configs.total_steps = config.num_training_steps + sched.lr_configs.warmup_steps = 200 # ViT-G was tuned on VTAB with 200 warmup steps. + sched.lr_configs.base_learning_rate = 0.01 # ViT-G was tuned on VTAB with 0.01. + + # Configure both learning rate schedules. + config.schedule = ml_collections.ConfigDict({'all': sched}) + + # *Single* optimizer. + optim = ml_collections.ConfigDict() + optim.optax_name = 'scenic.momentum_hp' + # Disable Optax gradient clipping as we handle it ourselves. + optim.max_grad_norm = 1.0 + optim.weight_decay = 0.0 + config.optimizer = optim + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + +def fix1(hyper, key, val): + return hyper.fixed(f'config.{key}', val, length=1) + + +def task(hyper, + name, + train, + test, + n_cls, + steps=None, + warmup=None, + lr=None, + ch=3, + base_pp='', + label='label', + crop=True, + flip=True, + h_res=256, + l_res=224): + """Vision task with val and test splits.""" + common = '|value_range(-1, 1)' + common += f'|onehot({n_cls},key="{label}",key_result="labels")' + common += '|keep("image", "labels")' + pp_train = f'decode(channels={ch})|{base_pp}' + if crop: + pp_train += f'resize({h_res})|random_crop({l_res})' + else: + pp_train += f'resize({l_res})' + if flip: + pp_train += '|flip_lr' + pp_train += common + pp_eval = f'decode(channels={ch})|{base_pp}resize({l_res})' + common + pp_eval_resize_crop = f'decode(channels={ch})|{base_pp}resize({h_res})|central_crop({l_res})' + common + pp_eval_resmall_crop = f'decode(channels={ch})|{base_pp}resize_small({h_res})|central_crop({l_res})' + common + + task_info = [ + fix1(hyper, 'dataset_configs.dataset', name), + fix1(hyper, 'dataset_configs.train_split', train), + fix1(hyper, 'dataset_configs.val_split', ( + ('test', name, test, pp_eval), + ('y/test_resize', name, test, pp_eval), + ('y/test_resize_crop', name, test, pp_eval_resize_crop), + ('y/test_resmall_crop', name, test, pp_eval_resmall_crop), + )), + fix1(hyper, 'dataset_configs.num_classes', n_cls), + fix1(hyper, 'dataset_configs.pp_train', pp_train), + ] + schedule = [] + if steps: + schedule += [fix1(hyper, 'schedule.all.lr_configs.total_steps', steps)] + schedule += [fix1(hyper, 'schedule.all.lr_configs.steps_per_cycle', steps)] + schedule += [fix1(hyper, 'num_training_steps', steps)] + if warmup: + schedule += [fix1(hyper, 'schedule.all.lr_configs.warmup_steps', warmup)] + if lr: + schedule += [fix1(hyper, 'schedule.all.lr_configs.base_learning_rate', lr)] + + return hyper.zipit(task_info + schedule) + + +def vtab_b_tasks(hyper): + """Vision task with val and test splits.""" + # Note: steps, warmup and learning rate were tuned using vtab_ft_val.py. + tasks = hyper.chainit([ + # Resize, crop, flip + task( + hyper, + 'caltech101:3.*.*', + 'train[:800]+train[2754:2954]', + 'test', + 102, + crop=True, + flip=True, + h_res=448, + l_res=384), + task( + hyper, + 'diabetic_retinopathy_detection/btgraham-300:3.*.*', + 'train[:800]+validation[:200]', + 'test', + 5, + crop=True, + flip=True, + h_res=448, + l_res=384), + task( + hyper, + 'dtd:3.*.*', + 'train[:800]+validation[:200]', + 'test', + 47, + crop=True, + flip=True, + h_res=448, + l_res=384), + task( + hyper, + 'oxford_flowers102:2.*.*', + 'train[:800]+validation[:200]', + 'test', + 102, + crop=True, + flip=True, + h_res=448, + l_res=384), + task( + hyper, + 'oxford_iiit_pet:3.*.*', + 'train[:800]+train[2944:3144]', + 'test', + 37, + crop=True, + flip=True, + h_res=448, + l_res=384), + task( + hyper, + 'resisc45:3.*.*', + 'train[:800]+train[18900:19100]', + 'train[25200:]', + 45, + crop=True, + flip=True, + h_res=448, + l_res=384), + task( + hyper, + 'sun397/tfds:4.*.*', + 'train[:800]+validation[:200]', + 'test', + 397, + crop=True, + flip=True, + h_res=448, + l_res=384), + task( + hyper, + 'cifar100:3.*.*', + 'train[:800]+train[45000:45200]', + 'test', + 100, + crop=True, + flip=True, + h_res=448, + l_res=384), + task( + hyper, + 'eurosat/rgb:2.*.*', + 'train[:800]+train[16200:16400]', + 'train[21600:]', + 10, + crop=True, + flip=True, + h_res=448, + l_res=384), + task( + hyper, + 'patch_camelyon:2.*.*', + 'train[:800]+validation[:200]', + 'test', + 2, + crop=True, + flip=True, + h_res=448, + l_res=384), + task( + hyper, + 'smallnorb:2.*.*', + 'train[:800]+test[:200]', + 'test[50%%:]', + 9, + label='label_elevation', + crop=True, + flip=True, + h_res=448, + l_res=384), + task( + hyper, + 'svhn_cropped:3.*.*', + 'train[:800]+train[65931:66131]', + 'test', + 10, + crop=True, + flip=True, + h_res=448, + l_res=384), + + # Resize, crop + task( + hyper, + 'dsprites:2.*.*', + 'train[:800]+train[589824:590024]', + 'train[663552:]', + 16, + base_pp='dsprites_pp("label_orientation",16)|', + crop=True, + flip=False, + h_res=448, + l_res=384), + task( + hyper, + 'smallnorb:2.*.*', + 'train[:800]+test[:200]', + 'test[50%%:]', + 18, + label='label_azimuth', + crop=True, + flip=False, + h_res=448, + l_res=384), + + # Resize, flip + task( + hyper, + 'clevr:3.*.*', + 'train[:800]+train[63000:63200]', + 'validation', + 6, + base_pp='clevr_pp("closest_object_distance")|', + crop=False, + flip=True, + h_res=448, + l_res=384), + task( + hyper, + 'clevr:3.*.*', + 'train[:1000]+train[63000:63200]', + 'validation', + 8, + base_pp='clevr_pp("count_all")|', + crop=False, + flip=True, + h_res=448, + l_res=384), + task( + hyper, + 'dmlab:2.0.1', + 'train[:800]+validation[:200]', + 'test', + 6, + crop=False, + flip=True, + h_res=448, + l_res=384), + task( + hyper, + 'kitti:3.1.0', + 'train[:800]+validation[:200]', + 'test', + 4, + base_pp='kitti_pp("closest_vehicle_distance")|', + crop=False, + flip=True, + h_res=448, + l_res=384), + + # Resize + task( + hyper, + 'dsprites:2.*.*', + 'train[:800]+train[589824:590024]', + 'train[663552:]', + 16, + base_pp='dsprites_pp("label_x_position",16)|', + crop=False, + flip=False, + h_res=448, + l_res=384), + ]) + return tasks + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([ + hyper.sweep('config.rng_seed', [0, 1, 2]), + vtab_b_tasks(hyper), + ]) diff --git a/scenic/projects/baselines/plainvit/main.py b/scenic/projects/baselines/plainvit/main.py new file mode 100644 index 0000000000000000000000000000000000000000..34577bb958042e50883e85d47ac41605ddf45c87 --- /dev/null +++ b/scenic/projects/baselines/plainvit/main.py @@ -0,0 +1,63 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for PlainViT.""" + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.baselines.plainvit import plainvit +from scenic.projects.baselines.plainvit import trainer +from scenic.train_lib import train_utils + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name: str): + """Get the model class for the PlainViT project.""" + if model_name == 'plainvit': + return plainvit.PlainViT + else: + raise ValueError(f'Unrecognized model: {model_name}.') + + +def get_trainer(trainer_name): + if trainer_name == 'plainvit_trainer': + return trainer.train + else: + raise ValueError(f'Unrecognized trainer: {trainer_name}.') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the PlainViT project.""" + # Build the loss_fn, metrics, and flax_model. + model_cls = get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + get_trainer(config.trainer_name)( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/baselines/plainvit/plainvit.py b/scenic/projects/baselines/plainvit/plainvit.py new file mode 100644 index 0000000000000000000000000000000000000000..aee535414cff3dd84846422c6fbb812527df9e9d --- /dev/null +++ b/scenic/projects/baselines/plainvit/plainvit.py @@ -0,0 +1,422 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Plain Vision Transformer from https://arxiv.org/abs/2205.01580. + +This implementation is forked from the big_vision codebase. +""" + +import functools +from typing import Any, Optional + +from absl import logging +import flax +import flax.linen as nn +from flax.training import common_utils +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import classification_model +from scenic.model_lib.base_models import model_utils +from scenic.model_lib.base_models import multilabel_classification_model +from scenic.model_lib.layers import nn_layers +import scipy + + +def posemb_sincos_2d(h, w, width, temperature=10_000., dtype=jnp.float32): + """Follows the MoCo v3 logic.""" + y, x = jnp.mgrid[:h, :w] + + assert width % 4 == 0, 'Width must be mult of 4 for sincos posemb' + omega = jnp.arange(width // 4) / (width // 4 - 1) + omega = 1. / (temperature**omega) + y = jnp.einsum('m,d->md', y.flatten(), omega) + x = jnp.einsum('m,d->md', x.flatten(), omega) + pe = jnp.concatenate([jnp.sin(x), jnp.cos(x), jnp.sin(y), jnp.cos(y)], axis=1) + return jnp.asarray(pe, dtype)[None, :, :] + + +def get_posemb(self, typ, seqshape, width, name, dtype=jnp.float32): + if typ == 'learn': + return self.param(name, nn.initializers.normal(stddev=1 / np.sqrt(width)), + (1, np.prod(seqshape), width), dtype) + elif typ == 'sincos2d': + return posemb_sincos_2d(*seqshape, width, dtype=dtype) + else: + raise ValueError(f'Unknown posemb type: {typ}') + + +class MlpBlock(nn.Module): + """Transformer MLP / feed-forward block.""" + mlp_dim: Optional[int] = None # Defaults to 4x input dim + dropout: float = 0.0 + + @nn.compact + def __call__(self, x, deterministic=True): + """Applies Transformer MlpBlock module.""" + inits = dict( + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6), + ) + n, l, d = x.shape # pylint: disable=unused-variable + x = nn.Dense(self.mlp_dim or 4 * d, **inits)(x) + x = nn.gelu(x) + x = nn.Dropout(rate=self.dropout)(x, deterministic) + x = nn.Dense(d, **inits)(x) + return x + + +class Encoder1DBlock(nn.Module): + """Single transformer encoder block (MHSA + MLP).""" + mlp_dim: Optional[int] = None # Defaults to 4x input dim + num_heads: int = 12 + dropout: float = 0.0 + + @nn.compact + def __call__(self, x, deterministic=True): + y = nn.LayerNorm()(x) + y = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + kernel_init=nn.initializers.xavier_uniform(), + deterministic=deterministic, + )(y, y) + y = nn.Dropout(rate=self.dropout)(y, deterministic) + x = x + y + + y = nn.LayerNorm()(x) + y = MlpBlock( + mlp_dim=self.mlp_dim, + dropout=self.dropout, + )(y, deterministic) + y = nn.Dropout(rate=self.dropout)(y, deterministic) + return x + y + + +class Encoder(nn.Module): + """Transformer Model Encoder for sequence to sequence translation.""" + depth: int + mlp_dim: Optional[int] = None # Defaults to 4x input dim + num_heads: int = 12 + dropout: float = 0.0 + + @nn.compact + def __call__(self, x, deterministic=True): + for lyr in range(self.depth): + x = Encoder1DBlock( + name=f'encoderblock_{lyr}', + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout=self.dropout, + )(x, deterministic) + return nn.LayerNorm(name='encoder_norm')(x) + + +class MAPHead(nn.Module): + """Multihead Attention Pooling.""" + mlp_dim: Optional[int] = None # Defaults to 4x input dim + num_heads: int = 12 + + @nn.compact + def __call__(self, x): + n, l, d = x.shape # pylint: disable=unused-variable + probe = self.param('probe', nn.initializers.xavier_uniform(), (1, 1, d), + x.dtype) + probe = jnp.tile(probe, [n, 1, 1]) + + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, kernel_init=nn.initializers.xavier_uniform() + )(probe, x) + + y = nn.LayerNorm()(x) + x = x + MlpBlock(mlp_dim=self.mlp_dim)(y) + return x[:, 0] + + +class ViT(nn.Module): + """Vision Transformer model. + + Attributes: + num_classes: Number of output classes. + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + positional_embedding: The type of positional embeddings to add to the tokens + at the beginning of the transformer encoder. Options are {learned_1d, + sinusoidal_2d, none}. + representation_size: Size of the representation layer in the model's head. + if None, we skip the extra projection + tanh activation at the end. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + dtype: JAX data type for activations. + """ + + num_classes: int + mlp_dim: int + num_layers: int + num_heads: int + patches: ml_collections.ConfigDict + hidden_size: int + positional_embedding: str = 'learn' + representation_size: Optional[int] = None + dropout_rate: float = 0.1 + classifier: str = 'gap' + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, debug: bool = False): + + fh, fw = self.patches.size + # Extracting patches and then embedding is in fact a single convolution. + x = nn.Conv( + self.hidden_size, + (fh, fw), + strides=(fh, fw), + padding='VALID', + name='embedding', + )(x) + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + + # Add posemb before adding extra token. + x = x + get_posemb(self, self.positional_embedding, + (h, w), c, 'pos_embedding', x.dtype) + + if self.classifier == 'token': + cls = self.param('cls', nn.initializers.zeros, (1, 1, c), x.dtype) + x = jnp.concatenate([jnp.tile(cls, [n, 1, 1]), x], axis=1) + + x = nn.Dropout(rate=self.dropout_rate)(x, not train) + + x = Encoder( + depth=self.num_layers, + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout=self.dropout_rate, + name='Transformer', + )(x, deterministic=not train) + + if self.classifier == 'map': + x = MAPHead(num_heads=self.num_heads, mlp_dim=self.mlp_dim)(x) + elif self.classifier == 'gap': + x = jnp.mean(x, axis=1) + elif self.classifier in ('token', '0'): + x = x[:, 0] + else: + raise ValueError(f'Unknown classifier {self.classifier}') + + if self.representation_size is not None: + x = nn.Dense(self.representation_size, name='pre_logits')(x) + x = nn.tanh(x) + else: + x = nn_layers.IdentityLayer(name='pre_logits')(x) + + return nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection', + )(x) + + +class PlainViT(classification_model.ClassificationModel): + """Plain Vision Transformer.""" + + def build_flax_model(self)-> nn.Module: + dtype_str = self.config.get('model_dtype_str', 'float32') + if dtype_str != 'float32': + raise ValueError( + '`dtype` argument is not propagated properly ' + 'in the current implementation, so only ' + '`float32` is supported for now.' + ) + return ViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + positional_embedding=self.config.model.positional_embedding, + representation_size=self.config.model.representation_size, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.dropout_rate, + dtype=getattr(jnp, dtype_str), + ) + + def loss_function( + self, + logits: jnp.ndarray, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None, + ) -> float: + """Returns sigmoid or softmax cross entropy loss. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + weights = batch.get('batch_mask') + loss_fn = self.config.get('loss', 'sigmoid_xent') + + if self.dataset_meta_data.get('target_is_onehot', False): + one_hot_targets = batch['label'] + else: + # This is to support running a multi-label classification model on + # single-label classification tasks. + one_hot_targets = common_utils.onehot(batch['label'], logits.shape[-1]) + + if loss_fn == 'sigmoid_xent': + total_loss = model_utils.weighted_sigmoid_cross_entropy( + logits, + one_hot_targets, + weights, + label_smoothing=self.config.get('label_smoothing'), + ) + elif loss_fn == 'softmax_xent': + total_loss = model_utils.weighted_softmax_cross_entropy( + logits, + one_hot_targets, + weights, + label_smoothing=self.config.get('label_smoothing'), + ) + else: + raise ValueError(f'Unknown loss function {loss_fn}.') + + if self.config.get('l2_decay_factor'): + l2_loss = model_utils.l2_regularization(model_params) + total_loss = total_loss + 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss # pytype: disable=bad-return-type # jax-ndarray + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + batch)``` + """ + del split # For all splits, we return the same metric functions. + loss_fn = self.config.get('loss', 'sigmoid_xent') + # pylint: disable=protected-access + if loss_fn == 'sigmoid_xent': + return functools.partial( + multilabel_classification_model.multilabel_classification_metrics_function, + target_is_multihot=self.dataset_meta_data.get( + 'target_is_onehot', False + ), + metrics=multilabel_classification_model._MULTI_LABEL_CLASSIFICATION_METRICS, + ) + elif loss_fn == 'softmax_xent': + return functools.partial( + classification_model.classification_metrics_function, + target_is_onehot=self.dataset_meta_data.get( + 'target_is_onehot', False + ), + metrics=classification_model._CLASSIFICATION_METRICS, + ) + # pylint: enable=protected-access + else: + raise ValueError(f'Unknown loss function {loss_fn}.') + + def init_from_train_state( + self, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + ) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is writen to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return init_vit_from_train_state( + train_state, restored_train_state, self.config, restored_model_cfg + ) + + +def init_vit_from_train_state( + train_state: Any, + restored_train_state: Any, + model_cfg: ml_collections.ConfigDict, + restored_model_cfg: ml_collections.ConfigDict, +) -> Any: + """Updates the init_params with data from restored_params.""" + del restored_model_cfg + params_dict = flax.traverse_util.flatten_dict( + flax.core.unfreeze(train_state.params), sep='/' + ) + restored_params_dict = flax.traverse_util.flatten_dict( + flax.core.unfreeze(restored_train_state.params), sep='/' + ) + del restored_train_state + # Copy parameters over: + for pname, pvalue in restored_params_dict.items(): + if 'output_projection' in pname or 'head' in pname: + # Don't copy the output projection weight and bias from the checkpoint. + continue + elif 'MAPHead' in pname and model_cfg.model.classifier != 'map': + # Skip the MapHead parameters. + continue + elif 'pos_embedding' in pname: + params_dict[pname] = resample_posemb(pvalue, params_dict[pname]) + else: + params_dict[pname] = pvalue + + logging.info('Inspect missing keys from the restored params:\n%s', + params_dict.keys() - restored_params_dict.keys()) + logging.info('Inspect extra keys the the restored params:\n%s', + restored_params_dict.keys() - params_dict.keys()) + + # Restore data format, then initialize embeddings + params = flax.traverse_util.unflatten_dict(params_dict, sep='/') + return train_state.replace(params=flax.core.freeze(params)) + + +def resample_posemb(old, new): + """Resampling posemb to finetune a ViT on different resolutions.""" + # Rescale the grid of position embeddings. Param shape is (1,N,1024) + if old.shape == new.shape: + return old + + logging.info('ViT: resize %s to %s', old.shape, new.shape) + gs_old = int(np.sqrt(old.shape[1])) + gs_new = int(np.sqrt(new.shape[1])) + logging.info('ViT: grid-size from %s to %s', gs_old, gs_new) + grid = old.reshape(gs_old, gs_old, -1) + + zoom = (gs_new / gs_old, gs_new / gs_old, 1) + grid = scipy.ndimage.zoom(grid, zoom, order=1) + grid = grid.reshape(1, gs_new * gs_new, -1) + return jnp.array(grid) diff --git a/scenic/projects/baselines/plainvit/trainer.py b/scenic/projects/baselines/plainvit/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..8fe211343d4fa827610d32b2ade3e331b625ef29 --- /dev/null +++ b/scenic/projects/baselines/plainvit/trainer.py @@ -0,0 +1,587 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script.""" + +import collections +import functools +from typing import Any, Callable, Dict, Iterator, Tuple, Optional, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.train_lib import optax as scenic_optax +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils +from scenic.train_lib.transfer import fewshot_utils +from tensorflow.io import gfile + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] +LrFns = Dict[str, Callable[[jnp.ndarray], jnp.ndarray]] + + +def convert_big_vision_to_scenic_checkpoint( + checkpoint_path: str, + train_state: Optional[train_utils.TrainState] = None +) -> train_utils.TrainState: + """Converts a big_vision checkpoint to a scenic train state. + + The model weights, global step and accumulated train time are extracted. + Optimizer state, such as the momentum, is not extracted. + + Args: + checkpoint_path: Path to big_vision checkpoint. + train_state: A Scenic TrainState object. + + Returns: + restored_train_state: Scenic train state with model weights, global step + and accumulated training time. + """ + + def _recover_tree(keys, values): + tree = {} + sub_trees = collections.defaultdict(list) + for k, v in zip(keys, values): + if '/' not in k: + tree[k] = v + else: + k_left, k_right = k.split('/', 1) + sub_trees[k_left].append((k_right, v)) + for k, kv_pairs in sub_trees.items(): + k_subtree, v_subtree = zip(*kv_pairs) + tree[k] = _recover_tree(k_subtree, v_subtree) + return tree + + logging.info('Loading big_vision checkpoint from %s', checkpoint_path) + checkpoint_npz = np.load(gfile.GFile(checkpoint_path, 'rb')) + keys, values = zip(*list(checkpoint_npz.items())) + checkpoint = _recover_tree(keys, values) + restored_params = checkpoints.convert_pre_linen( + checkpoint.get('params', checkpoint)) + if train_state: + restored_params = pretrain_utils.inspect_params( + expected_params=train_state.params, + restored_params=restored_params, + fail_if_extra=False, + fail_if_missing=False, + fail_if_shapes_mismatch=False) + else: + train_state = train_utils.TrainState() + + global_step = None + if 'opt' in checkpoint: + global_step = scenic_optax.get_step(checkpoint['opt']) + + # pytype: disable=wrong-arg-types + restored_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=global_step, + params=restored_params, + ) + # pytype: enable=wrong-arg-types + + return restored_train_state + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + lr_fns: LrFns, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, + Any]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, params, and optimizer. The buffer of this argument can + be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + lr_fns: The learning rate fns used for the optimizer in train_state. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training and computed metrics and some training logs. + """ + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + rng=mixup_rng) + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + logits, new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params']) + return loss, (new_model_state, logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (train_cost, (new_model_state, + logits)), grad = compute_gradient_fn(train_state.params) + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + updates, new_opt_state = train_state.tx.update(grad, train_state.opt_state, + train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)])) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + for name, lr_fn in lr_fns.items(): + lr_name = 'learning_rate' if name == 'all' else f'learning_rate_{name}' + training_logs[lr_name] = lr_fn(train_state.global_step) + + metrics = metrics_fn(logits, batch) + + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + + return new_train_state, metrics, training_logs + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], jnp.ndarray]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, params and optimizer state. The buffer of + this argument can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and logits. + """ + variables = {'params': train_state.params, **train_state.model_state} + logits = flax_model.apply( + variables, batch['inputs'], train=False, mutable=False, debug=debug) + metrics = metrics_fn(logits, batch) + return metrics, logits + + +def representation_fn( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + representation_layer: str, + gather_to_host: bool = True +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Feeds the inputs to the model and returns their representations. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data from the dataset. + flax_model: A Flax model. + representation_layer: The name of the layer to use as the representation. + gather_to_host: Whether to gather results from all devices to the host, + rather than leaving them distributed. + + Returns: + Representation learned by the model for the given inputs and the labels and + masks. If `gather_to_host` is True, these are collected from all hosts. + """ + variables = {'params': train_state.params, **train_state.model_state} + + representation_layer_parts = representation_layer.split('/') + filter_rep = lambda mdl, _: mdl.name == representation_layer_parts[-1] + _, model_state = flax_model.apply( + variables, + batch['inputs'], + train=False, + capture_intermediates=filter_rep, + mutable=['intermediates'], + debug=False) + if 'intermediates' not in model_state: + raise ValueError(f'Layer with name "{representation_layer}"' + ' does not exist in your model.') + + representation = model_state['intermediates'] + for rep_layer in representation_layer_parts: + if rep_layer: + representation = representation[rep_layer] + representation = representation['__call__'][0] + if gather_to_host: + representation = jax.lax.all_gather(representation, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return representation, batch['label'], batch['batch_mask'] + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current global_step, + model_state, rng, and the optimizer), train_summary and eval_summary which + are dict of metrics (from the last evaluation and train metric logging + respectively). These outputs are used for regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create LR schedules and optimizer. + schedule_fns = scenic_optax.make_schedule(config.get('schedule')) + tx, _ = scenic_optax.make(config.optimizer, schedule_fns, params) + opt_state = tx.init(params) + + rng, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + checkpoint_format = config.init_from.get('checkpoint_format', 'scenic') + if init_checkpoint_path is not None: + if checkpoint_format == 'scenic': + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + elif checkpoint_format == 'big_vision': + restored_train_state = convert_big_vision_to_scenic_checkpoint( + init_checkpoint_path, train_state) + # Load params from the init_model. + train_state = model.init_from_train_state( # pytype: disable=attribute-error + train_state, restored_train_state, restored_model_cfg) + del restored_train_state + + # Do not keep a copy of the initial params. + del params, opt_state, model_state + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + lr_fns={name: lr_fn for _, name, (lr_fn, _) in schedule_fns}, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + if 'fewshot' in config: + representation_fn_fewshot = functools.partial( + representation_fn, + flax_model=model.flax_model, + representation_layer=config.fewshot.representation_layer) + fewshotter = fewshot_utils.FewShotEvaluator(representation_fn_fewshot, + config.fewshot) + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + def evaluate(train_state: train_utils.TrainState, step: int, + valid_iter: Iterator[Batch], + num_valid_ex: int) -> Dict[str, Any]: + eval_summary = {} + if not isinstance(valid_iter, dict): # Only on validation set. + valid_iter, num_valid_ex = {'valid': valid_iter}, {'valid': num_valid_ex} + + for val_name, val_iter in valid_iter.items(): + num_ex = num_valid_ex[val_name] + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int(np.ceil(num_ex / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + eval_metrics = [] + for _ in range(steps_per_eval): + eval_batch = next(val_iter) + e_metrics, _ = eval_step_pmapped(train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + eval_summary.update( + train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + writer=writer, + prefix=val_name)) + del eval_metrics + writer.flush() + return eval_summary + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, + writer=writer, + every_secs=None, + every_steps=config.get('report_progress_step', log_summary_steps), + ) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + extra_training_logs.append(t_logs) + + # Quick indication that training is happening. + logging.log_first_n(logging.INFO, 'Finished training step %d.', 5, step) + for h in hooks: + h(step) + + ############### LOG TRAIN SUMMARY ############### + if ((step % log_summary_steps == 1) or (step == total_steps) or + (lead_host and chrono.warmup)): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + # train_metrics is list of a dictionaries of metrics, where the shape of + # the metrics[key] is [n_local_devices]. However, because metric functions + # have a psum, we have already summed across the whole sharded batch, and + # what's returned is n_local_devices copies of the same summed metric. + # So we do unreplicate and fetch them to host using `unreplicate_and_get`. + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_training_logs), + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summary = evaluate(train_state, step, dataset.valid_iter, + dataset.meta_data['num_eval_examples']) + chrono.resume() + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 1 and step > 1) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state = unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + train_utils.save_checkpoint(workdir, unrep_train_state) + del unrep_train_state + chrono.resume() # Un-pause now. + + ##################### FEWSHOT EVALUATION ############################ + if 'fewshot' in config: + # Compute few-shot on-the-fly evaluation. + if (step % config.fewshot.log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('fewshot'): + results = fewshotter.run_all(train_state, config.fewshot.datasets) + fewshotter.log_fewshot_summary( + writer=writer, step=step, results=results) + del results + writer.write_scalars(step, {'zz/epoch': step / steps_per_epoch}) + writer.flush() + chrono.resume() # Un-pause now. + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/baselines/pondernet/README.md b/scenic/projects/baselines/pondernet/README.md new file mode 100644 index 0000000000000000000000000000000000000000..9a089560f6fe9454a341cb4af61189ce946fe7b1 --- /dev/null +++ b/scenic/projects/baselines/pondernet/README.md @@ -0,0 +1,7 @@ +## PonderNet +This directory contains the implementation of PonderNet for Vision Transformer +using [PonderNet: Learning to Ponder](https://arxiv.org/abs/2107.05407). + +### Acknowledgment +We would like to thank Fuzhao Xue and Mostafa Dehghani for their contribution +to the PonderNet implementation in Scenic. diff --git a/scenic/projects/baselines/pondernet/layers.py b/scenic/projects/baselines/pondernet/layers.py new file mode 100644 index 0000000000000000000000000000000000000000..b14d6b05c6178db1be700b2b502bbd75bab87972 --- /dev/null +++ b/scenic/projects/baselines/pondernet/layers.py @@ -0,0 +1,250 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Adaptive Computation Time layers.""" + +from typing import Any + +from flax import linen as nn +import jax +import jax.numpy as jnp +import ml_collections + + +class Identity(nn.Module): + """Identity layer (used for shunting).""" + + @nn.compact + def __call__(self, *args): + # Inputs and outputs must maintain same tree structure. + return args[0] if len(args) == 1 else args + + +class PonderStep(nn.Module): + """Takes an ACT step.""" + ac_config: ml_collections.ConfigDict + layer: nn.Module + + @nn.compact + def __call__(self, carry_inputs: Any) -> Any: + """An pondernet act step. + + Args: + carry_inputs: A tuple of: - state: An array of shape `[batch_size, length, + channel]`. - unhalting_probability: An array containing the unhalting + probabilities. - halted: An array containing halted flag of each token. + - layer_id: An int denotes the layer id - layer_call_args: Arguments to + be passed to the self.layer. + + Returns: + A tupe of (output_state, unhalting_probability, halted). + """ + halting_bias_init = self.ac_config.act_halting_bias_init + + # Unpack the inputs. + (output_state, unhalting_probability, halted, layer_id, _, current_state, + all_states, all_p, n_updates, *layer_call_args) = carry_inputs + + p = nn.sigmoid( + nn.Dense( + features=1, + use_bias=True, + kernel_init=nn.initializers.zeros, + bias_init=lambda k, s, *_: jnp.full(s, halting_bias_init), + dtype=jnp.float32, + name='step_halting_prob')(current_state)) + + # Average over all tokens: + p = jnp.mean(p, axis=1) + p = jnp.squeeze(p, axis=-1) + + # Update p if this is the last layer. + # if layer_id == self.act_config.act_max_steps - 1: + # p = 1 - jnp.sum(all_p, axis=0) + p = jax.lax.cond(layer_id == self.ac_config.act_max_steps - 1, + lambda: 1 - jnp.sum(all_p, axis=0), lambda: p) + + # Init the prob of halting here. + prob_halt_here = unhalting_probability * p + + # Update unhalting_probability according to the new p. + unhalting_probability = unhalting_probability * (1 - p) + + # Init the halting decision by sampling from bernoulli distribution. + rng = self.make_rng('ponder') + halt_decision = (1 - halted) * jax.random.bernoulli(rng, p=p, shape=p.shape) + + # Apply the layer on the state. And update output_state by the halted mask. + new_state = self.layer(current_state, *layer_call_args) + + update_halted_decision = jnp.expand_dims(halt_decision, -1) + update_halted_decision = jnp.expand_dims(update_halted_decision, -1) + output_state = output_state + new_state * update_halted_decision + + # Update the all states and all p. + all_states = all_states.at[layer_id].set(all_states[layer_id] + new_state) + all_p = all_p.at[layer_id].set(all_p[layer_id] + prob_halt_here) + + # Update n_updates. + n_updates += (1 - halted) + + # Update the halted. + halted = halted + halt_decision + + return (output_state, unhalting_probability, halted, layer_id + 1, + prob_halt_here, new_state, all_states, all_p, n_updates, + *layer_call_args) + + +class PonderFunction(nn.Module): + """Adaptive Computation Time Function to help we use nn.scan on ACT.""" + ac_config: ml_collections.ConfigDict + layer: nn.Module + stop_fn: Any + deterministic: bool + + def setup(self): + self.ponder_step = PonderStep( + ac_config=self.ac_config, layer=self.layer, name='ponder_step') + + def take_a_step(self, x) -> Any: + return self.ponder_step(x) + + def skip_a_step(self, x) -> Any: # Shunt + return x + + @nn.compact + def __call__(self, x, _) -> Any: + # We only consider take_a_step here, since for PonderNet, the skip only + # happens during inference. + if self.is_mutable_collection('params'): # Init-mode + out = self.take_a_step(x) + else: + decision = self.stop_fn(x) * self.deterministic + out = nn.cond(decision, self.skip_a_step, self.take_a_step, self, x) + return out, None + + +class AdaptiveComputationTime(nn.Module): + """Adaptive Computation Time module, based on: arxiv.org/abs/1807.03819.""" + + ac_config: ml_collections.ConfigDict + layer: nn.Module + share_parameters: bool + + @nn.compact + def __call__(self, x: jnp.ndarray, *layer_call_args): + + max_steps = self.ac_config.act_max_steps + deterministic = layer_call_args[0] + + state = x + original_state_shape = state.shape + + state_slice = slice(0, 1) + + # Dynamic shape for update tensors below. + update_shape = state.shape[state_slice] + # Unhalting probabilities. + unhalting_probability = jnp.ones(update_shape) + # Halted mask. + halted = jnp.zeros(update_shape) + # All states from different steps. + all_states = jnp.zeros((max_steps,) + original_state_shape) + # All p from different steps. + all_p = jnp.zeros((max_steps,) + update_shape) + # Count how many updates we did, we use this to log and debug + n_updates = jnp.zeros(update_shape) + + # Define one stop function to decide the routing result. + def stop_fn(inputs: Any) -> jnp.ndarray: + # Returns True if all of halting probability >= 1-eps. + _, _, halted, _, _, _, *_ = inputs + return jnp.all(halted) + + # Create one empty_probability with unhalting_probability + empty_probability = jnp.zeros_like(unhalting_probability) + # empty_state = jnp.zeros_like(state) + + # Run max_steps, for each sample/token, when the decision is True, + # go to the shunt_layer. + scan_carry_input = (state, unhalting_probability, halted, 0, + empty_probability, state, all_states, all_p, n_updates, + *layer_call_args) + + if self.share_parameters: + # Scan over `PonderFunction` while broadcasing (sharing) the params. + act_fn = nn.scan( + PonderFunction, + variable_broadcast='params', + split_rngs={ + 'params': False, + 'dropout': True, + 'ponder': True + }, + length=max_steps) + else: + # Scan over PonderFunction while only broadcasing the shared param. + def trans_in_fn(target): + return { + 'params': + dict( + target.get('params', {}), **target.get('shared_params', {})) + } + + def trans_out_fn(target): + params = target.get('params', {}) + shared_params = {} + if 'ponder_step' in params: + shared_params['ponder_step'] = params.pop('ponder_step') + return {'params': params, 'shared_params': shared_params} + + act_fn_two_collections = nn.scan( + # Map params to a two collections. + nn.map_variables( + PonderFunction, ['params', 'shared_params'], + trans_in_fn=trans_in_fn, + trans_out_fn=trans_out_fn, + mutable=True), + variable_broadcast='shared_params', + variable_axes={'params': 0}, + split_rngs={ + 'params': False, + 'dropout': True, + 'ponder': True + }, + length=max_steps) + + # Map all params back to a single collection. + act_fn = nn.map_variables( + act_fn_two_collections, ['params', 'shared_params'], + trans_in_fn=trans_out_fn, + trans_out_fn=trans_in_fn, + mutable=True) + + scan_carry_output, _ = act_fn( + self.ac_config, + self.layer, + stop_fn, + deterministic, + )(scan_carry_input, None) + + (final_state, unhalting_probability, halted, _, _, _, all_states, all_p, + n_updates, *layer_call_args) = scan_carry_output + + # Check some shapes + assert final_state.shape == original_state_shape + for x in [unhalting_probability, halted]: + assert x.shape == original_state_shape[state_slice] + return final_state, (all_states, all_p, n_updates) diff --git a/scenic/projects/baselines/pondernet/main.py b/scenic/projects/baselines/pondernet/main.py new file mode 100644 index 0000000000000000000000000000000000000000..4180ee4ef43f20f5c2269d11b29e9c9a0586454b --- /dev/null +++ b/scenic/projects/baselines/pondernet/main.py @@ -0,0 +1,64 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for PonderNet.""" + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.baselines.pondernet import pondernet_trainer +from scenic.projects.baselines.pondernet.pondervit import pondervit +from scenic.train_lib import train_utils + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name: str): + """Get the model class for the PonderNet project.""" + if model_name == 'pondervit': + return pondervit.PonderViTMultiLabelClassificationModel + else: + raise ValueError(f'Unrecognized model: {model_name}.') + + +def get_trainer(trainer_name): + if trainer_name == 'pondernet_trainer': + return pondernet_trainer.train + else: + raise ValueError(f'Unrecognized trainer: {trainer_name}.') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the PonderNet project.""" + # Build the loss_fn, metrics, and flax_model. + model_cls = get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + trainer = get_trainer(config.trainer_name) + trainer( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/baselines/pondernet/pondernet_trainer.py b/scenic/projects/baselines/pondernet/pondernet_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..70798e0ee9314062ae25abb8e7bea83b4ed62869 --- /dev/null +++ b/scenic/projects/baselines/pondernet/pondernet_trainer.py @@ -0,0 +1,691 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training script.""" + +import functools +from typing import Any, Callable, Dict, Iterator, Tuple, Optional, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.common_lib import video_utils +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils +from scenic.train_lib.transfer import fewshot_utils +from scenic.train_lib.transfer import linear_probe_utils + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Any, Batch, Optional[jnp.ndarray]], float] +LrFn = Callable[[jnp.ndarray], jnp.ndarray] + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + metrics_fn: MetricFn, + lr_fn: LrFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, + Any]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, params, and optimizer. The buffer of this argument can + be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + lr_fn: The learning rate fn used for the logging the learning rate. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training and computed metrics for logging. + """ + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + rng=mixup_rng) + + # Create rng for the Ponder sampling + rng, ponder_rng = jax.random.split(rng) + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + ponder_rng = train_utils.bind_rng_to_host_device( + ponder_rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + (logits, auxiliary_outputs), new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={ + 'dropout': dropout_rng, + 'ponder': ponder_rng + }, + debug=debug) + loss = loss_fn(logits, auxiliary_outputs, batch, variables['params']) + return loss, (new_model_state, logits, auxiliary_outputs) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (train_cost, compute_outputs), grad = compute_gradient_fn(train_state.params) + (new_model_state, logits, auxiliary_outputs) = compute_outputs + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm') is not None: + grad = clip_grads(grad, config.max_grad_norm) + + updates, new_opt_state = train_state.tx.update(grad, train_state.opt_state, + train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)])) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + training_logs['learning_rate'] = lr_fn(train_state.global_step) + + # Logging the n_updates (N_t) + _, _, n_updates = auxiliary_outputs + n_t = jax.lax.pmean(n_updates, axis_name='batch') + training_logs['n_updates N(t)'] = n_t + + metrics = metrics_fn(logits, batch) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + + return new_train_state, metrics, training_logs + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], jnp.ndarray]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, params and optimizer state. The buffer of + this argument can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and logits. + """ + variables = {'params': train_state.params, **train_state.model_state} + # Create rng for the Ponder sampling + _, ponder_rng = jax.random.split(train_state.rng) + ponder_rng = train_utils.bind_rng_to_host_device( + ponder_rng, axis_name='batch', bind_to='device') + logits, _ = flax_model.apply( + variables, + batch['inputs'], + train=False, + mutable=False, + debug=debug, + rngs={'ponder': ponder_rng}) + metrics = metrics_fn(logits, batch) + return metrics, logits + + +def representation_fn( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + representation_layer: str, + gather_to_host: bool = True +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Feeds the inputs to the model and returns their representations. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data from the dataset. + flax_model: A Flax model. + representation_layer: The name of the layer to use as the representation. + gather_to_host: Whether to gather results from all devices to the host, + rather than leaving them distributed. + + Returns: + Representation learned by the model for the given inputs and the labels and + masks. If `gather_to_host` is True, these are collected from all hosts. + """ + variables = {'params': train_state.params, **train_state.model_state} + _, ponder_rng = jax.random.split(train_state.rng) + ponder_rng = train_utils.bind_rng_to_host_device( + ponder_rng, axis_name='batch', bind_to='device') + representation_layer_parts = representation_layer.split('/') + filter_rep = lambda mdl, _: mdl.name == representation_layer_parts[-1] + _, model_state = flax_model.apply( + variables, + batch['inputs'], + train=False, + capture_intermediates=filter_rep, + mutable=['intermediates'], + debug=False, + rngs={'ponder': ponder_rng}) + if 'intermediates' not in model_state: + raise ValueError(f'Layer with name "{representation_layer}"' + ' does not exist in your model.') + + representation = model_state['intermediates'] + for rep_layer in representation_layer_parts: + if rep_layer: + representation = representation[rep_layer] + representation = representation['__call__'][0] + if gather_to_host: + representation = jax.lax.all_gather(representation, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return representation, batch['label'], batch['batch_mask'] + + +def representation_fn_video( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + config: ml_collections.ConfigDict, + gather_to_host: bool = True, +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Feeds the video inputs to the model and returns their representations. + + Video representations are obtained by temporally average-pooling per-frame + representations from the input video clip. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, params, and optimizer. The buffer of this + argument can be donated to the computation. + batch: A single batch of data from the video dataset. + flax_model: A Flax model. + config: Configurations of the experiment. + gather_to_host: Whether to gather results from all devices to the host, + rather than leaving them distributed. + + Returns: + Representation learned by the model for the given inputs and the labels and + masks. If `gather_to_host` is True, these are collected from all hosts. + The shape of the returned tensors when `gather_to_host` is False are: + representation: `[num_devices, global_batch, features]`. + labels: `[num_devices, global_batch]`. + mask: `[num_devices, global_batch]`. + If `gather_to_host` is True then each shape is prepended with + `[num_hosts,]` + """ + variables = {'params': train_state.params, **train_state.model_state} + _, ponder_rng = jax.random.split(train_state.rng) + ponder_rng = train_utils.bind_rng_to_host_device( + ponder_rng, axis_name='batch', bind_to='device') + representation_layer = config.video_fewshot.representation_layer.split('/') + filter_rep = lambda mdl, _: mdl.name == representation_layer[-1] + + def get_representation(inputs, variables, training, capture_intermediates, + mutable, debug, ponder_rng): + _, model_state = flax_model.apply( + variables, + inputs, + train=training, + capture_intermediates=capture_intermediates, + mutable=mutable, + debug=debug, + rngs={'ponder': ponder_rng}) + if 'intermediates' not in model_state: + raise ValueError( + f'Layer with name "{config.video_fewshot.representation_layer}"' + ' does not exist in your model.') + + representation = model_state['intermediates'] + for rep_layer in representation_layer: + if rep_layer: + representation = representation[rep_layer] + representation = representation['__call__'][0] + return representation + + # Get representations for each frame in the video sample. + if config.video_fewshot.get('n_sampled_frames'): + inputs = video_utils.sample_frames_uniformly( + batch['inputs'], config.video_fewshot.n_sampled_frames) + else: + inputs = batch['inputs'] + representation = jax.vmap( + functools.partial( + get_representation, + variables=variables, + training=False, + capture_intermediates=filter_rep, + mutable=['intermediates'], + debug=False, + ponder_rng=ponder_rng), + in_axes=1, + out_axes=1, + axis_name='time')( + inputs) + # Average pooling of representations over time axis. + representation = jnp.mean(representation, axis=1) + if gather_to_host: + representation = jax.lax.all_gather(representation, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return representation, batch['label'], batch['batch_mask'] + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current global_step, + model_state, rng, and the optimizer), train_summary and eval_summary which + are dict of metrics (from the last evaluation and train metric logging + respectively). These outputs are used for regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + # We need to pass two rng to init the model here. + rng, init_rng = jax.random.split(rng) + rng, ponder_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs={ + 'params': init_rng, + 'ponder': ponder_rng + }) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params=params) + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + rng, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + if init_checkpoint_path is not None: + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + # Load params from the init_model. + train_state = model.init_from_train_state( # pytype: disable=attribute-error + train_state, restored_train_state, restored_model_cfg) + del restored_train_state + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + lr_fn=lr_fn, + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + if 'fewshot' in config: + representation_fn_fewshot = functools.partial( + representation_fn, + flax_model=model.flax_model, + representation_layer=config.fewshot.representation_layer) + fewshotter = fewshot_utils.FewShotEvaluator(representation_fn_fewshot, + config.fewshot) + + if 'video_fewshot' in config: + representation_fn_video_fewshot = functools.partial( + representation_fn_video, flax_model=model.flax_model, config=config) + video_fewshotter = fewshot_utils.FewShotEvaluatorVideo( + representation_fn_video_fewshot, config.video_fewshot) + + if 'linear_probe' in config: + representation_fn_linear_probe = functools.partial( + representation_fn, + flax_model=model.flax_model, + representation_layer=config.linear_probe.representation_layer, + gather_to_host=False) + rng, linear_probe_rng = jax.random.split(rng) + linear_probe = linear_probe_utils.LinearEvaluator( + representation_fn=representation_fn_linear_probe, + rng=linear_probe_rng, + linear_eval_config=config.linear_probe) + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + def evaluate(train_state: train_utils.TrainState, step: int, + valid_iter: Iterator[Batch], + num_valid_ex: int) -> Dict[str, Any]: + eval_summary = {} + if not isinstance(valid_iter, dict): # Only on validation set. + valid_iter, num_valid_ex = {'valid': valid_iter}, {'valid': num_valid_ex} + + for val_name, val_iter in valid_iter.items(): + num_ex = num_valid_ex[val_name] + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int(np.ceil(num_ex / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + eval_metrics = [] + for _ in range(steps_per_eval): + eval_batch = next(val_iter) + if dataset.meta_data['target_is_onehot']: # Which includes multi-hot. + # Ignore the entries with all zero label for evaluation. + eval_batch['batch_mask'] *= eval_batch['label'].max(axis=-1) + e_metrics, _ = eval_step_pmapped(train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + eval_summary.update( + train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + writer=writer, + prefix=val_name)) + del eval_metrics + writer.flush() + return eval_summary + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, + writer=writer, + every_secs=None, + every_steps=config.get('report_progress_step', log_summary_steps), + ) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + # t_logs.update({'learning_rate': lr_fn(step)}) + extra_training_logs.append(t_logs) + + # Quick indication that training is happening. + logging.log_first_n(logging.INFO, 'Finished training step %d.', 5, step) + for h in hooks: + h(step) + + ############### LOG TRAIN SUMMARY ############### + if (step % log_summary_steps == 1) or (step + == total_steps) or chrono.warmup: + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_training_logs), + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summary = evaluate(train_state, step, dataset.valid_iter, + dataset.meta_data['num_eval_examples']) + chrono.resume() + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 1 and step > 1) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + train_utils.save_checkpoint(workdir, unrep_train_state) + del unrep_train_state + chrono.resume() # Un-pause now. + + ##################### FEWSHOT EVALUATION ############################ + if 'fewshot' in config: + # Compute few-shot on-the-fly evaluation. + if (step % config.fewshot.log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('fewshot'): + results = fewshotter.run_all(train_state, config.fewshot.datasets) + fewshotter.log_fewshot_summary( + writer=writer, step=step, results=results) + del results + writer.write_scalars(step, {'zz/epoch': step / steps_per_epoch}) + writer.flush() + chrono.resume() # Un-pause now. + + ########### FEWSHOT EVALUATION USING VIDEO DATASETS ############### + + if 'video_fewshot' in config: + # Compute few-shot on-the-fly evaluation using video dataset. + if ((step % config.video_fewshot.log_eval_steps == 1) or + step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('video_fewshot'): + results = video_fewshotter.run_all(train_state, + config.video_fewshot.datasets) + video_fewshotter.log_fewshot_summary( + writer=writer, step=step, results=results) + del results + writer.write_scalars(step, {'zz/epoch': step / steps_per_epoch}) + writer.flush() + chrono.resume() # Un-pause now. + + ##################### LINEAR-PROBE EVALUATION ########################## + if 'linear_probe' in config: + if (config.linear_probe.log_eval_steps > 0 and + step % config.linear_probe.log_eval_steps == 1) or (step + == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('linear_probe'): + linear_probe.run_all( + train_state, + config.linear_probe.datasets, + writer=writer, + repr_step=step) + writer.flush() + chrono.resume() # Un-pause now. + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/baselines/pondernet/pondervit/pondervit.py b/scenic/projects/baselines/pondernet/pondervit/pondervit.py new file mode 100644 index 0000000000000000000000000000000000000000..89b0cb7c0744d27941930f60e142483f53eda91f --- /dev/null +++ b/scenic/projects/baselines/pondernet/pondervit/pondervit.py @@ -0,0 +1,452 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Vision Transformer with PonderNet.""" + +from typing import Any, Optional + +import flax.linen as nn +from flax.training import common_utils +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils +from scenic.model_lib.base_models.multilabel_classification_model import MultiLabelClassificationModel +from scenic.model_lib.layers import attention_layers +from scenic.model_lib.layers import nn_layers +from scenic.projects.baselines import vit +from scenic.projects.baselines.pondernet import layers + + +def ponder_loss_fn( + all_p: jnp.ndarray, + p_g: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, +) -> jnp.ndarray: + """Ponder Loss for PonderNet. + + Args: + all_p: Input array of any shape. + p_g: Input array of any shape. + weights: None or array of any shape. + + Returns: + loss: A scaler to regularize the PonderNet. + """ + all_p = all_p.transpose((1, 0)) + if weights is not None: + normalization = weights.sum() + else: + normalization = np.prod(all_p.shape[0]) + p_g = jnp.expand_dims(p_g, axis=0) + p_g = p_g.repeat(all_p.shape[0], axis=0) + # Calculate the KL div between all_p and p_g + loss = jnp.sum(p_g * (jnp.log(p_g + 1e-8) - jnp.log(all_p + 1e-8))) / ( + normalization + 1e-8) + return loss + + +class UTStochasticDepth(nn.Module): + """Performs layer-dropout (also known as stochastic depth). + + Described in + Huang & Sun et al, "Deep Networks with Stochastic Depth", 2016 + https://arxiv.org/abs/1603.09382 + + Attributes: + rate: the layer dropout probability (_not_ the keep rate!). + deterministic: If false (e.g. in training) the inputs are scaled by `1 / (1 + - rate)` and the layer dropout is applied, whereas if true (e.g. in + evaluation), no stochastic depth is applied and the inputs are returned as + is. + Note: This is a repeated implementation of model_lib.nn_layers.StochasticDepth + The implementation here is to match the nn.cond in UT + """ + rate: float = 0.0 + deterministic: Optional[bool] = None + + @nn.compact + def __call__(self, + x: jnp.ndarray, + deterministic: Optional[bool] = None) -> jnp.ndarray: + """Applies a stochastic depth mask to the inputs. + + Args: + x: Input tensor. + deterministic: If false (e.g. in training) the inputs are scaled by `1 / + (1 - rate)` and the layer dropout is applied, whereas if true (e.g. in + evaluation), no stochastic depth is applied and the inputs are returned + as is. + + Returns: + The masked inputs reweighted to preserve mean. + """ + if self.rate <= 0.0: + return x + if deterministic: + return x + else: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + rng = self.make_rng('dropout') + mask = jax.random.bernoulli(rng, self.rate, shape) + return x * (1.0 - mask) + + +class Encoder1DBlock(nn.Module): + """Transformer encoder layer. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: Number of self-attention heads. + dtype: The dtype of the computation (default: float32). + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_depth: probability of dropping a layer linearly grows from 0 to + the provided value. + + Returns: + output after transformer encoder block. + """ + mlp_dim: int + num_heads: int + dtype: Any = jnp.float32 + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, deterministic: bool) -> jnp.ndarray: + """Applies Encoder1DBlock module. + + Args: + inputs: Input data. + deterministic: Deterministic or not (to apply dropout). + + Returns: + Output after transformer encoder block. + """ + # Attention block. + assert inputs.ndim == 3 + x = nn.LayerNorm(dtype=self.dtype)(inputs) + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + dtype=self.dtype, + kernel_init=nn.initializers.xavier_uniform(), + broadcast_dropout=False, + deterministic=deterministic, + dropout_rate=self.attention_dropout_rate)(x, x) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic) + x = UTStochasticDepth(rate=self.stochastic_depth)(x, deterministic) + x = x + inputs + + # MLP block. + y = nn.LayerNorm(dtype=self.dtype)(x) + y = attention_layers.MlpBlock( + mlp_dim=self.mlp_dim, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6))( + y, deterministic=deterministic) + y = UTStochasticDepth(rate=self.stochastic_depth)(y, deterministic) + return y + x + + +class PonderNetEncoder(nn.Module): + """PonderNet Transformer Encoder. + + Attributes: + num_layers: Number of layers. + mlp_dim: Dimension of the mlp on top of attention block. + inputs_positions: Input subsequence positions for packed examples. + dropout_rate: Dropout rate. + stochastic_depth: probability of dropping a layer linearly grows from 0 to + the provided value. Our implementation of stochastic depth follows timm + library, which does per-example layer dropping and uses independent + dropping patterns for each skip-connection. + dtype: Dtype of activations. + """ + num_layers: int + mlp_dim: int + num_heads: int + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + parameter_sharing: bool = True + ac_config: Optional[ml_collections.ConfigDict] = None + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, train: bool = False): + """Applies Transformer model on the inputs.""" + assert inputs.ndim == 3 # Shape is `[batch, len, emb]`. + x = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name='posembed_input')( + inputs) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + dtype = jax.dtypes.canonicalize_dtype(self.dtype) + + # We use layers.AdaptiveComputationTime only when we are doing ACT. + if self.ac_config is None: + # We make the layer first if we are using parameter sharing. + if not self.parameter_sharing: + for i in range(self.num_layers): + x = Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name='encoderblock_' + str(i), + dtype=dtype)( + x, deterministic=not train) + else: + encoder_block = Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name='encoderblock', + dtype=dtype) + for i in range(self.num_layers): + x = encoder_block(x, deterministic=not train) + auxiliary_outputs = None + else: + encoder_block = Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name='encoderblock', + dtype=dtype) + x, auxiliary_outputs = layers.AdaptiveComputationTime( + self.ac_config, encoder_block, self.parameter_sharing, + name='act')(x, not train) + (all_states, all_p, n_updates) = auxiliary_outputs + encoded_norm_layer = nn.LayerNorm(name='encoder_norm') + encoded = encoded_norm_layer(x) + all_states = encoded_norm_layer(all_states) + return encoded, (all_states, all_p, n_updates) + + +class PonderViT(nn.Module): + """Pondernet Vision Transformer model. + + Attributes: + num_classes: Number of output classes. + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + patches: Configuration of the patches extracted in the stem of the model. + ac_config: Configuration of the adaptive computation. + hidden_size: Size of the hidden state of the output of model's stem. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + dtype: JAX data type for activations. + """ + + num_classes: int + mlp_dim: int + num_layers: int + num_heads: int + patches: ml_collections.ConfigDict + ac_config: ml_collections.ConfigDict + hidden_size: int + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + classifier: str = 'gap' + parameter_sharing: bool = True + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, debug: bool = False): + + fh, fw = self.patches.size + # Extracting patches and then embedding is in fact a single convolution. + x = nn.Conv( + self.hidden_size, (fh, fw), + strides=(fh, fw), + padding='VALID', + name='embedding')( + x) + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + + # If we want to add a class token, add it here. + if self.classifier == 'token': + cls = self.param('cls', nn.initializers.zeros, (1, 1, c), x.dtype) + cls = jnp.tile(cls, [n, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + + x, auxiliary_outputs = PonderNetEncoder( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + ac_config=self.ac_config, + stochastic_depth=self.stochastic_depth, + parameter_sharing=self.parameter_sharing, + dtype=self.dtype, + name='PonderNetTransformer')( + x, train=train) + if auxiliary_outputs is not None: + (all_states, all_p, n_updates) = auxiliary_outputs + + if self.classifier in ('token', '0'): + x = x[:, 0] + all_states = all_states[:, :, 0] + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=1) + all_states = fn(all_states, axis=2) + + pre_logits_layer = nn_layers.IdentityLayer(name='pre_logits') + x = pre_logits_layer(x) + all_states = pre_logits_layer(all_states) + output_projection_layer = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection') + x = output_projection_layer(x) + all_states = output_projection_layer(all_states) + return x, (all_states, all_p, n_updates) + + +class PonderViTMultiLabelClassificationModel(MultiLabelClassificationModel): + """Universal Vision Transformer model for multi-label classification task.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return PonderViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + patches=self.config.model.patches, + ac_config=self.config.model.get('ac_config'), + hidden_size=self.config.model.hidden_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + stochastic_depth=self.config.model.get('stochastic_depth', 0.0), + parameter_sharing=self.config.model.get('parameter_sharing', True), + dtype=model_dtype, + ) + + def loss_function( + self, # pytype: disable=signature-mismatch # overriding-parameter-count-checks + logits: jnp.ndarray, + auxiliary_outputs: Any, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None, + ) -> float: + """Returns sigmoid cross entropy loss with an L2 penalty on the weights. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + auxiliary_outputs: Output of model auxiliary_outputs, (ponder_times, + remainders) + batch: Batch of data that has 'label' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + weights = batch.get('batch_mask') + ac_config = self.config.model.get('ac_config') + total_loss = 0.0 + + if self.dataset_meta_data.get('target_is_onehot', False): + multihot_target = batch['label'] + else: + # This is to support running a multi-label classification model on + # single-label classification tasks. + multihot_target = common_utils.onehot(batch['label'], logits.shape[-1]) + + # We calculate the ponder loss only when the ac_config is used. + if ac_config is not None: + + # Unpack the auxiliary_outputs. + all_states = auxiliary_outputs[0] + all_p = auxiliary_outputs[1] + + # Calculate different losses for different states + for i in range(ac_config.act_max_steps): + sig_ce_loss = model_utils.weighted_sigmoid_cross_entropy( + all_states[i], + multihot_target, + all_p[i] * weights, # weighted averaging different decisions + label_smoothing=self.config.get('label_smoothing')) + total_loss += sig_ce_loss + p_g = jnp.zeros([ + ac_config.act_max_steps, + ]) + not_halted = 1.0 + + # Init a geometric prior distribution. + for i in range(ac_config.act_max_steps): + # For the last time step, we need to ensure the sum of different + # steps equal to 1.0. + if i < ac_config.act_max_steps - 1: + p_g = p_g.at[i].set(ac_config.lambda_p * not_halted) + not_halted = not_halted * (1 - ac_config.lambda_p) + else: + p_g = p_g.at[-1].set(1.0 - jnp.sum(p_g, axis=0)) + ponder_loss = ponder_loss_fn(all_p, p_g, weights) + total_loss += ac_config.act_loss_weight * ponder_loss + + else: + # We do not calculate the ponder loss as no act used in config. + sig_ce_loss = model_utils.weighted_sigmoid_cross_entropy( + logits, + multihot_target, + weights, + label_smoothing=self.config.get('label_smoothing')) + + if self.config.get('l2_decay_factor') is not None: + l2_loss = model_utils.l2_regularization(model_params) + total_loss = total_loss + 0.5 * self.config.l2_decay_factor * l2_loss + + return total_loss # pytype: disable=bad-return-type # jax-ndarray + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is writen to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + raise NotImplementedError diff --git a/scenic/projects/baselines/resnet.py b/scenic/projects/baselines/resnet.py new file mode 100644 index 0000000000000000000000000000000000000000..01f9a3fc98c1169558d8f04d764d284a2a7bf30b --- /dev/null +++ b/scenic/projects/baselines/resnet.py @@ -0,0 +1,270 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of ResNet.""" + +import functools +from typing import Tuple, Callable, Any, Optional, Union, Dict + +from absl import logging +import flax +import flax.linen as nn +from jax.nn import initializers +import jax.numpy as jnp +import ml_collections +from scenic.common_lib import debug_utils +from scenic.model_lib.base_models.classification_model import ClassificationModel +from scenic.model_lib.base_models.multilabel_classification_model import MultiLabelClassificationModel +from scenic.model_lib.layers import nn_layers + + +class ResidualBlock(nn.Module): + """Bottleneck ResNet block.""" + filters: int + strides: Tuple[int, int] = (1, 1) + dtype: jnp.dtype = jnp.float32 + bottleneck: bool = True + + @nn.compact + def __call__(self, x: jnp.ndarray, train: bool = True) -> jnp.ndarray: + needs_projection = x.shape[-1] != self.filters * 4 or self.strides != (1, 1) + nout = self.filters * 4 if self.bottleneck else self.filters + + batch_norm = functools.partial( + nn.BatchNorm, + use_running_average=not train, + momentum=0.9, + epsilon=1e-5, + dtype=self.dtype) + conv = functools.partial(nn.Conv, use_bias=False, dtype=self.dtype) + + residual = x + if needs_projection: + residual = conv(nout, (1, 1), self.strides, name='proj_conv')(residual) + residual = batch_norm(name='proj_bn')(residual) + + if self.bottleneck: + x = conv(self.filters, (1, 1), name='conv1')(x) + x = batch_norm(name='bn1')(x) + x = nn_layers.IdentityLayer(name='relu1')(nn.relu(x)) + + y = conv( + self.filters, (3, 3), + self.strides, + padding=[(1, 1), (1, 1)], + name='conv2')( + x) + y = batch_norm(name='bn2')(y) + y = nn_layers.IdentityLayer(name='relu2')(nn.relu(y)) + + if self.bottleneck: + y = conv(nout, (1, 1), name='conv3')(y) + else: + y = conv(nout, (3, 3), padding=[(1, 1), (1, 1)], name='conv3')(y) + y = batch_norm(name='bn3', scale_init=nn.initializers.zeros)(y) + y = nn_layers.IdentityLayer(name='relu3')(nn.relu(residual + y)) + return y + + +class ResNet(nn.Module): + """ResNet architecture. + + Attributes: + num_outputs: Num output classes. If None, a dict of intermediate feature + maps is returned. + num_filters: Num filters. + num_layers: Num layers. + kernel_init: Kernel initialization. + bias_init: Bias initialization. + dtype: Data type, e.g. jnp.float32. + """ + num_outputs: Optional[int] + num_filters: int = 64 + num_layers: int = 50 + kernel_init: Callable[..., Any] = initializers.lecun_normal() + bias_init: Callable[..., Any] = initializers.zeros + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__( + self, + x: jnp.ndarray, + train: bool = False, + debug: bool = False) -> Union[jnp.ndarray, Dict[str, jnp.ndarray]]: + """Applies ResNet model to the inputs. + + Args: + x: Inputs to the model. + train: Whether it is training or not. + debug: Whether the debug mode is enabled. debug=True enables model + specific logging/storing some values using jax.host_callback. + + Returns: + Un-normalized logits. + """ + if self.num_layers not in BLOCK_SIZE_OPTIONS: + raise ValueError('Please provide a valid number of layers') + block_sizes, bottleneck = BLOCK_SIZE_OPTIONS[self.num_layers] + x = nn.Conv( + self.num_filters, + kernel_size=(7, 7), + strides=(2, 2), + padding=[(3, 3), (3, 3)], + use_bias=False, + dtype=self.dtype, + name='stem_conv')( + x) + x = nn.BatchNorm( + use_running_average=not train, + momentum=0.9, + epsilon=1e-5, + dtype=self.dtype, + name='init_bn')( + x) + x = nn_layers.IdentityLayer(name='init_relu')(nn.relu(x)) + x = nn.max_pool(x, (3, 3), strides=(2, 2), padding=[(1, 1), (1, 1)]) + x = nn_layers.IdentityLayer(name='stem_pool')(x) + + residual_block = functools.partial( + ResidualBlock, dtype=self.dtype, bottleneck=bottleneck) + representations = {'stem': x} + for i, block_size in enumerate(block_sizes): + for j in range(block_size): + strides = (2, 2) if i > 0 and j == 0 else (1, 1) + filters = self.num_filters * 2**i + x = residual_block(filters=filters, strides=strides)(x, train) + representations[f'stage_{i + 1}'] = x + + # Head. + if self.num_outputs: + x = jnp.mean(x, axis=(1, 2)) + x = nn_layers.IdentityLayer(name='pre_logits')(x) + x = nn.Dense( + self.num_outputs, + kernel_init=self.kernel_init, + bias_init=self.bias_init, + dtype=self.dtype, + name='output_projection')( + x) + return x + else: + return representations + + +# A dictionary mapping the number of layers in a resnet to the number of +# blocks in each stage of the model. The second argument indicates whether we +# use bottleneck layers or not. +BLOCK_SIZE_OPTIONS = { + 5: ([1], True), # Only strided blocks. Total stride 4. + 8: ([1, 1], True), # Only strided blocks. Total stride 8. + 11: ([1, 1, 1], True), # Only strided blocks. Total stride 16. + 14: ([1, 1, 1, 1], True), # Only strided blocks. Total stride 32. + 9: ([1, 1, 1, 1], False), # Only strided blocks. Total stride 32. + 18: ([2, 2, 2, 2], False), + 26: ([2, 2, 2, 2], True), + 34: ([3, 4, 6, 3], False), + 50: ([3, 4, 6, 3], True), + 101: ([3, 4, 23, 3], True), + 152: ([3, 8, 36, 3], True), + 200: ([3, 24, 36, 3], True) +} + + +class ResNetClassificationModel(ClassificationModel): + """Implemets the ResNet model for classification.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return ResNet( + num_outputs=self.dataset_meta_data['num_classes'], + num_filters=self.config.num_filters, + num_layers=self.config.num_layers, + dtype=model_dtype) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return _get_default_configs_for_testing() + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from `restored_train_state`. + + This function is writen to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + `restored_train_state` come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + del restored_model_cfg + if hasattr(train_state, 'optimizer'): + # TODO(dehghani): Remove support for flax optim. + params = flax.core.unfreeze(train_state.optimizer.target) + restored_params = flax.core.unfreeze( + restored_train_state.optimizer.target) + else: + params = flax.core.unfreeze(train_state.params) + restored_params = flax.core.unfreeze(restored_train_state.params) + for pname, pvalue in restored_params.items(): + if pname == 'output_projection': + # The `output_projection` is used as the name of the linear layer at the + # head of the model that maps the representation to the label space. + # By default, for finetuning to another dataset, we drop this layer as + # the label space is different. + continue + else: + params[pname] = pvalue + logging.info('Parameter summary after initialising from train state:') + debug_utils.log_param_shapes(params) + if hasattr(train_state, 'optimizer'): + # TODO(dehghani): Remove support for flax optim. + return train_state.replace( + optimizer=train_state.optimizer.replace( + target=flax.core.freeze(params)), + model_state=restored_train_state.model_state) + else: + return train_state.replace( + params=flax.core.freeze(params), + model_state=restored_train_state.model_state) + + +class ResNetMultiLabelClassificationModel(MultiLabelClassificationModel): + """Implemets the ResNet model for multi-label classification.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return ResNet( + num_outputs=self.dataset_meta_data['num_classes'], + num_filters=self.config.num_filters, + num_layers=self.config.num_layers, + dtype=model_dtype) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return _get_default_configs_for_testing() + + +def _get_default_configs_for_testing() -> ml_collections.ConfigDict: + return ml_collections.ConfigDict( + dict( + num_filters=16, + num_layers=5, + data_dtype_str='float32', + )) diff --git a/scenic/projects/baselines/segment_anything/README.md b/scenic/projects/baselines/segment_anything/README.md new file mode 100644 index 0000000000000000000000000000000000000000..f85114b20827b9482a317d5dc243da767380b1c1 --- /dev/null +++ b/scenic/projects/baselines/segment_anything/README.md @@ -0,0 +1,85 @@ +Segment Anything +== + +Scenic re-implementation of +[Segment Anything](https://ai.facebook.com/research/publications/segment-anything/), +which is a zero-shot segmentation module that takes an image and a prompt as +input and produce segmentation mask of the indicated object. + + - Paper: Segment Anything, Kirillov et al. ICCV 2023 + - Reference pytorch code: https://github.com/facebookresearch/segment-anything + +## Setup + +Run [this colab](notebooks/Convert_SAM_weights.ipynb) to convert the official +PyTorch pretrained weights to JAX. +Download the converted weights to a local path. + +## Usage: + +``` +from flax.training import checkpoints +from scenic.projects.baselines.segment_anything import demo_utils +from scenic.projects.baselines.segment_anything.modeling import sam + + +# setup model and load weights +input_size = 1024 +model_size = 'B' +checkpoint_path = '/path/to/sav_vit_x/' +sam_model = sam.Sam( + image_encoder_args=demo_utils.get_encoder_config(model_size)) +params = checkpoints.restore_checkpoint(checkpoint_path, None)['params'] + +# Load a test image +image_path = '/path/to/image/' +image = demo_utils.load_image(image_path) +input_image, padding_mask, ori_size = demo_utils.resize_and_pad_image( + image, target_size=input_size) + +## Prompt-based segmentation +# Prepare point prompts +point_prompts = [[500, 375]] +point_coords, point_labels = demo_utils.get_point_coords_and_labels( + point_prompts, input_size, ori_size, +) + +# Run model +ret = sam_model.apply( + {'params': params}, + input_image, + point_coords, + point_labels, + padding_mask, + return_image_embedding=True, + train=False) + +# Visualize outputs +for mask, score in zip(ret[0]['masks'][0], ret[0]['iou_predictions'][0]): + demo_utils.plot(input_image[0], point_coords[0], point_labels[0], mask, score) + +# To run the model again with more prompts using the cached image embeddings +# from the previous run. +cached_image_embedding = ret[0]['image_embedding'][None] +ret = sam_model.apply( + {'params': params}, + input_image=None, + point_coords=point_coords, + point_labels=point_labels, + padding_mask=padding_mask, + image_embeddings=cached_image_embedding, + train=False) + +## Segment all objects + +# Run model +ret = sam_model.apply( + {'params': params}, + image=input_image[0], + padding_mask=padding_mask[0], + method=sam_model.generate) + +# Visualize outputs +demo_utils.plot_all_masks(input_image[0], ret) + +``` diff --git a/scenic/projects/baselines/segment_anything/__init__.py b/scenic/projects/baselines/segment_anything/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/segment_anything/demo_utils.py b/scenic/projects/baselines/segment_anything/demo_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..c62d5ee6c2e44c2e88677eee5d1fcda5f260323b --- /dev/null +++ b/scenic/projects/baselines/segment_anything/demo_utils.py @@ -0,0 +1,127 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Util functions for running the SAM demo.""" + +import matplotlib.pyplot as plt +import ml_collections +import numpy as np +from PIL import Image + +from scenic.projects.baselines.segment_anything.modeling import sam +from tensorflow.io import gfile + + +def get_encoder_config(model_size): + dim, depth, num_heads, dp, window_block_indexes = sam.SIZE_CONFIGS[model_size] + image_encoder_args = ml_collections.ConfigDict() + image_encoder_args['embed_dim'] = dim + image_encoder_args['depth'] = depth + image_encoder_args['num_heads'] = num_heads + image_encoder_args['drop_path_rate'] = dp + image_encoder_args['window_block_indexes'] = window_block_indexes + return image_encoder_args + + +def load_image(image_path): + image = np.array( + Image.open(gfile.GFile(image_path, 'rb')), dtype=np.uint8).copy() + return image + + +def resize_and_pad_image(image, target_size=1024): + h, w = image.shape[:2] + scale = 1.0 * target_size / max(h, w) + new_h, new_w = int(scale * h + 0.5), int(scale * w + 0.5) + image = np.array( + Image.fromarray(image).resize((new_w, new_h), Image.Resampling.BILINEAR)) + ret = np.zeros((1, target_size, target_size, 3)) + padding_mask = np.zeros((1, target_size, target_size), np.float32) + ret[0, :image.shape[0], :image.shape[1]] = image + padding_mask[0, :image.shape[0], :image.shape[1]] = 1 + return ret, padding_mask, (h, w) + + +def get_point_coords_and_labels(point_prompts, input_size, ori_size): + ori_h, ori_w = ori_size + point_coords = np.asarray( + point_prompts, dtype=np.float32).reshape(1, 1, -1, 2) + point_coords[..., 0] = point_coords[..., 0] / max(ori_h, ori_w) * input_size + point_coords[..., 1] = point_coords[..., 1] / max(ori_h, ori_w) * input_size + point_labels = np.ones(point_coords.shape[:-1], dtype=np.int32) + return point_coords, point_labels + + +def show_mask(mask, ax, random_color=False): + if random_color: + color = np.concatenate([np.random.random(3), np.array([0.6])], axis=0) + else: + color = np.array([30/255, 144/255, 255/255, 0.6]) + h, w = mask.shape[-2:] + mask_image = mask.reshape(h, w, 1) * color.reshape(1, 1, -1) + ax.imshow(mask_image) + + +def show_points(coords, labels, ax, marker_size=375): + pos_points = coords[labels == 1] + neg_points = coords[labels == 0] + ax.scatter( + pos_points[:, 0], pos_points[:, 1], color='green', marker='*', + s=marker_size, edgecolor='white', linewidth=1.25) + ax.scatter( + neg_points[:, 0], neg_points[:, 1], color='red', marker='*', + s=marker_size, edgecolor='white', linewidth=1.25) + + +def show_box(box, ax): + x0, y0 = box[0], box[1] + w, h = box[2] - box[0], box[3] - box[1] + ax.add_patch( + plt.Rectangle( + (x0, y0), w, h, edgecolor='green', facecolor=(0, 0, 0, 0), lw=2)) + + +def plot( + image, point_coords, point_labels, mask, score, figsize=10, save_path=''): + plt.figure(figsize=(figsize, figsize)) + plt.imshow(image.astype(np.uint8)) + show_mask(mask, plt.gca()) + show_points(point_coords[0], point_labels[0], plt.gca()) + plt.title(f'Score: {score:.3f}', fontsize=18) + plt.axis('off') + if save_path: + plt.savefig(gfile.GFile(save_path, 'w')) + else: + plt.show() + + +def plot_all_masks(image, ret, figsize=20, save_path=''): + """Plots all masks.""" + plt.figure(figsize=(figsize, figsize)) + plt.imshow(image.astype(np.uint8)) + ax = plt.gca() + ax.set_autoscale_on(False) + img = np.ones((ret['masks'].shape[1], ret['masks'].shape[2], 4)) + img[:, :, 3] = 0 + for i in range(ret['iou_predictions'].shape[0]): + if ret['iou_predictions'][i] > 0: + m = np.asarray(ret['masks'][i]) + color_mask = np.concatenate([np.random.random(3), [0.35]]) + img[m] = color_mask + ax.imshow(img) + plt.axis('off') + if save_path: + plt.savefig(gfile.GFile(save_path, 'w')) + else: + plt.show() diff --git a/scenic/projects/baselines/segment_anything/modeling/__init__.py b/scenic/projects/baselines/segment_anything/modeling/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/segment_anything/modeling/image_encoder.py b/scenic/projects/baselines/segment_anything/modeling/image_encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..17af5742fff844f996597e126fc8fc6da6127e47 --- /dev/null +++ b/scenic/projects/baselines/segment_anything/modeling/image_encoder.py @@ -0,0 +1,485 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""ViT with windows attention. + +Pytorch reference: + +https://github.com/facebookresearch/segment-anything/blob/HEAD/\ +segment_anything/modeling/image_encoder.py + +""" + +import functools +from typing import Any, Optional + +import flax.linen as nn +import jax +import jax.numpy as jnp + +KERNEL_INIT = { + 'normal': nn.initializers.normal(stddev=0.02), +} + + +class ImageEncoderViT(nn.Module): + """This ViT model in Sam. + + Known differences from ViTDet: + - Neck block after transformers. + - Not resizing image-net positional embedding, but randomly-initialize 2D + embedding and learn from scratch. + + Attributes: + img_size (int): Input image size. + patch_size (int): Patch size. + in_chans (int): Number of input image channels. + embed_dim (int): Patch embedding dimension. + depth (int): Depth of ViT. + num_heads (int): Number of attention heads in each ViT block. + mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. + out_chans (int): output channals + qkv_bias (bool): If True, add a learnable bias to query, key, value. + beit_like_qkv_bias (bool): no bias for k. + drop_path_rate (float): Stochastic depth rate. + use_abs_pos (bool): If True, use absolute positional embeddings. + use_rel_pos (bool): If True, add relative positional embeddings to the + attention map. + rel_pos_zero_init (bool): If True, zero initialize relative positional + parameters. + window_size (int): Window size for window attention blocks. + window_block_indexes (list): Indexes for blocks using window attention. + pretrain_img_size (int): input image size for pretraining models. + """ + img_size: int = 1024 + patch_size: int = 16 + in_chans: int = 3 + embed_dim: int = 768 + depth: int = 12 + num_heads: int = 12 + mlp_ratio: float = 4.0 + out_chans: int = 256 + qkv_bias: bool = True + beit_like_qkv_bias: bool = False + drop_path_rate: float = 0.1 + use_abs_pos: bool = True + use_rel_pos: bool = True + rel_pos_zero_init: bool = True + window_size: int = 14 + window_block_indexes: Any = (0, 1, 3, 4, 6, 7, 9, 10) + pretrain_img_size: int = 224 + kernel_init: str = 'normal' + layer_scale_init_value: float = -1.0 + freeze_vit_layer: int = -1 + use_ln_pre: bool = False + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + x: jnp.ndarray, + train: bool = False,): + """Forward vit. + + Args: + x: (batch_size, H, W, 3) + train: bool + Returns: + x: (batch_size, H // patch_size, W // patch_size, embed_dim) + """ + x = nn.Conv( + self.embed_dim, (self.patch_size, self.patch_size), + strides=(self.patch_size, self.patch_size), + padding='VALID', + dtype=self.dtype, + name='patch_embed.proj')(x) + if self.use_abs_pos: + pos_embed = self.param( + 'pos_embed', nn.initializers.zeros, + (1, self.img_size // self.patch_size, + self.img_size // self.patch_size, self.embed_dim)) + if pos_embed.shape[1:2] != x.shape[1:2]: + pos_embed = jax.image.resize( + pos_embed, + (1, x.shape[1], x.shape[2], self.embed_dim), + method='bicubic', + ) + x = x + pos_embed + dp_rates = [ + self.drop_path_rate * i / (self.depth - 1) for i in range(self.depth)] + if self.use_ln_pre: + x = nn.LayerNorm(name='ln_pre')(x) + + for i in range(self.depth): + x = Block( + dim=self.embed_dim, + num_heads=self.num_heads, + mlp_ratio=self.mlp_ratio, + qkv_bias=self.qkv_bias, + beit_like_qkv_bias=self.beit_like_qkv_bias, + drop_path=dp_rates[i], + use_rel_pos=self.use_rel_pos, + rel_pos_zero_init=self.rel_pos_zero_init, + window_size=self.window_size if i in self.window_block_indexes else 0, + input_size=( + self.img_size // self.patch_size, + self.img_size // self.patch_size), + kernel_init=self.kernel_init, + dtype=self.dtype, + layer_scale_init_value=self.layer_scale_init_value, + name=f'blocks.{i}', + )(x, train=train) + if i + 1 < self.freeze_vit_layer: + x = jax.lax.stop_gradient(x) + + x = Neck(out_chans=self.out_chans, name='neck')(x) + return x + + +class MHAttention(nn.Module): + """Multi-head Attention block with relative position embeddings. + + Attributes: + dim (int): Number of input channels. + num_heads (int): Number of attention heads. + qkv_bias (bool: If True, add a learnable bias to query, key, value. + beit_like_qkv_bias (bool): no bias for k. + use_rel_pos (bool): If True, add relative positional embeddings to the + attention map. + rel_pos_zero_init (bool): If True, zero initialize relative positional + parameters. + input_size (int or None): Input resolution for calculating the relative + positional parameter size. + """ + dim: int + num_heads: int = 8 + qkv_bias: bool = True + beit_like_qkv_bias: bool = False + use_rel_pos: bool = False + rel_pos_zero_init: bool = True + input_size: Optional[Any] = None + kernel_init: str = 'normal' + dtype: jnp.dtype = jnp.float32 + + def get_rel_pos(self, q_size, k_size, rel_pos): + """Get relative positional embeddings. + + Args: + q_size (int): size of query q. + k_size (int): size of key k. + rel_pos (Tensor): relative position embeddings (L, C). + Returns: + Extracted positional embeddings according to relative positions. + """ + max_rel_dist = int(2 * max(q_size, k_size) - 1) + # Interpolate rel pos if needed. + if rel_pos.shape[0] != max_rel_dist: + # Interpolate rel pos. + rel_pos_resized = jax.image.resize( + rel_pos, + shape=(max_rel_dist, rel_pos.shape[1]), + method='linear', + ) + else: + rel_pos_resized = rel_pos + + # Scale the coords with short length if shapes for q and k are different. + q_coords = jnp.arange(q_size)[:, None] * max(k_size / q_size, 1.0) + k_coords = jnp.arange(k_size)[None, :] * max(q_size / k_size, 1.0) + relative_coords = (q_coords - k_coords) + (k_size - 1) * max( + q_size / k_size, 1.0) + relative_coords = relative_coords.astype(jnp.int32).reshape(-1) + return jnp.take_along_axis( + rel_pos_resized, relative_coords[:, None], axis=0).reshape( + q_size, k_size, -1) + + def add_decomposed_rel_pos( + self, attn, q, rel_pos_h, rel_pos_w, q_size, k_size): + """Calculate decomposed Relative Positional Embeddings from paper:`MViTv2`. + + Args: + attn (Tensor): attention map. + q (Tensor): query q in the attention layer with shape (B, q_h * q_w, C). + rel_pos_h (Tensor): relative position embeddings (Lh, C) for height axis. + rel_pos_w (Tensor): relative position embeddings (Lw, C) for width axis. + q_size (Tuple): spatial sequence size of query q with (q_h, q_w). + k_size (Tuple): spatial sequence size of key k with (k_h, k_w). + Returns: + attn (Tensor): attention map with added relative positional embeddings. + """ + q_h, q_w = q_size + k_h, k_w = k_size + rh = self.get_rel_pos(q_h, k_h, rel_pos_h) + rw = self.get_rel_pos(q_w, k_w, rel_pos_w) + + batch, _, dim = q.shape + r_q = q.reshape(batch, q_h, q_w, dim) + rel_h = jnp.einsum('bhwc,hkc->bhwk', r_q, rh) + rel_w = jnp.einsum('bhwc,wkc->bhwk', r_q, rw) + + attn = ( + attn.reshape(batch, q_h, q_w, k_h, k_w) + rel_h[ + :, :, :, :, None] + rel_w[:, :, :, None, :] + ).reshape(batch, q_h * q_w, k_h * k_w) + + return attn + + @nn.compact + def __call__(self, x): + batch, height, width, _ = x.shape + head_dim = self.dim // self.num_heads + if self.beit_like_qkv_bias: + q_bias = self.param( + 'q_bias', nn.initializers.zeros, (self.dim,)) + v_bias = self.param( + 'v_bias', nn.initializers.zeros, (self.dim,)) + k_bias = jnp.zeros((self.dim,), dtype=jnp.float32) + qkv_bias = jnp.concatenate([q_bias, k_bias, v_bias], axis=0) + qkv = nn.Dense( + self.dim * 3, use_bias=False, dtype=self.dtype, + kernel_init=KERNEL_INIT[self.kernel_init], name='qkv')( + x) # batch x height x width x 3dim + qkv = qkv + qkv_bias[None, None, None, :] + else: + qkv = nn.Dense( + self.dim * 3, use_bias=self.qkv_bias, dtype=self.dtype, + kernel_init=KERNEL_INIT[self.kernel_init], name='qkv')( + x) # batch x height x width x 3dim + qkv = qkv.reshape(batch, height * width, 3, self.num_heads, -1).transpose( + 2, 0, 3, 1, 4) # 3 x batch x num_heads x num_tokens x D + qkv = qkv.reshape(3, batch * self.num_heads, height * width, -1) + q, k, v = qkv[0], qkv[1], qkv[2] # [batch * num_heads, num_tokens, D] + attn = (q * (head_dim ** -0.5)) @ k.transpose( + 0, 2, 1) # [batch * num_heads, num_tokens, num_tokens] + if self.use_rel_pos: + rel_pos_h = self.param( + 'rel_pos_h', nn.initializers.zeros, + (2 * self.input_size[0] - 1, head_dim)) + rel_pos_w = self.param( + 'rel_pos_w', nn.initializers.zeros, + (2 * self.input_size[0] - 1, head_dim)) + attn = self.add_decomposed_rel_pos( + attn, q, rel_pos_h, rel_pos_w, + (height, width), (height, width)) + attn = jax.nn.softmax(attn) + x = (attn @ v).reshape(batch, self.num_heads, height, width, -1).transpose( + 0, 2, 3, 1, 4).reshape(batch, height, width, -1) + x = nn.Dense( + self.dim, dtype=self.dtype, kernel_init=KERNEL_INIT[self.kernel_init], + name='proj')(x) + return x + + +class Mlp(nn.Module): + """Multilayer perceptron.""" + + hidden_features: int + out_features: int + kernel_init: str = 'normal' + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x): + x = nn.Dense( + self.hidden_features, dtype=self.dtype, + kernel_init=KERNEL_INIT[self.kernel_init], name='lin1')(x) + x = nn.gelu(x, approximate=False) + x = nn.Dense( + self.out_features, dtype=self.dtype, + kernel_init=KERNEL_INIT[self.kernel_init], name='lin2')(x) + return x + + +class Block(nn.Module): + """Transformer blocks with support of window attention and residual blocks. + + Attributes: + dim (int): Number of input channels. + num_heads (int): Number of attention heads in each ViT block. + mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. + qkv_bias (bool): If True, add a learnable bias to query, key, value. + beit_like_qkv_bias (bool): no bias for k. + drop_path (float): Stochastic depth rate. + use_rel_pos (bool): If True, add relative positional embeddings to the + attention map. + rel_pos_zero_init (bool): If True, zero initialize relative positional + parameters. + window_size (int): Window size for window attention blocks. If it equals 0, + then not use window attention. + input_size (int or None): Input resolution for calculating the relative + positional parameter size. + """ + dim: int + num_heads: int + mlp_ratio: float = 4.0 + qkv_bias: bool = True + beit_like_qkv_bias: bool = False + drop_path: float = 0.0 + use_rel_pos: bool = False + rel_pos_zero_init: bool = True + window_size: int = 0 + input_size: Optional[Any] = None + kernel_init: str = 'normal' + layer_scale_init_value: float = -1.0 + dtype: jnp.dtype = jnp.float32 + + def window_partition(self, x): + """Partition into non-overlapping windows with padding if needed. + + Args: + x (array): input tokens with [B, H, W, C]. + Returns: + windows: windows after partition with [B * num_windows, window_size, + window_size, C]. + (Hp, Wp): padded height and width before partition + """ + batch, h, w, c = x.shape + + pad_h = (self.window_size - h % self.window_size) % self.window_size + pad_w = (self.window_size - w % self.window_size) % self.window_size + if pad_h > 0 or pad_w > 0: + x = jnp.pad( + x, ((0, 0), (0, pad_w), (0, pad_h), (0, 0)), + 'constant', constant_values=0) + hp, wp = h + pad_h, w + pad_w + + x = x.reshape( + batch, hp // self.window_size, self.window_size, + wp // self.window_size, self.window_size, c) + windows = x.transpose(0, 1, 3, 2, 4, 5).reshape( + -1, self.window_size, self.window_size, c) + return windows, (hp, wp) + + def window_unpartition(self, windows, pad_hw, hw): + """Window unpartition into original sequences and removing padding. + + Args: + windows (array): inputs: [B * num_windows, window_size, window_size, C]. + pad_hw (Tuple): padded height and width (Hp, Wp). + hw (Tuple): original height and width (H, W) before padding. + + Returns: + x: unpartitioned sequences with [B, H, W, C]. + """ + hp, wp = pad_hw + h, w = hw + batch = windows.shape[0] // ( + hp * wp // self.window_size // self.window_size) + x = windows.reshape( + batch, + hp // self.window_size, wp // self.window_size, + self.window_size, self.window_size, -1) + x = x.transpose(0, 1, 3, 2, 4, 5).reshape(batch, hp, wp, -1) + if hp > h or wp > w: + x = x[:, :h, :w, :] + return x + + def get_keep_pattern(self, + x: jnp.ndarray, + deterministic: bool): + """DropPath Layer.""" + if not deterministic and self.drop_path: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + drop_pattern = jax.random.bernoulli( + self.make_rng('dropout'), self.drop_path, shape).astype(self.dtype) + keep_pattern = (1. - drop_pattern) + if self.drop_path < 1.: + keep_pattern = keep_pattern / (1. - self.drop_path) + return keep_pattern + else: + return 1.0 + + @nn.compact + def __call__(self, x, train=False): + shortcut = x + ln = functools.partial(nn.LayerNorm, epsilon=1e-6, dtype=self.dtype) + x = ln(name='norm1')(x) + h, w, pad_hw = -1, -1, (-1, -1) + # Window partition + if self.window_size > 0: + h, w = x.shape[1], x.shape[2] + x, pad_hw = self.window_partition(x) + + x = MHAttention( + self.dim, + num_heads=self.num_heads, + qkv_bias=self.qkv_bias, + beit_like_qkv_bias=self.beit_like_qkv_bias, + use_rel_pos=self.use_rel_pos, + rel_pos_zero_init=self.rel_pos_zero_init, + input_size=self.input_size if self.window_size == 0 else ( + self.window_size, self.window_size), + kernel_init=self.kernel_init, + dtype=self.dtype, + name='attn')(x) + # Reverse window partition + if self.window_size > 0: + x = self.window_unpartition(x, pad_hw, (h, w)) + + if self.layer_scale_init_value > 0: + gamma_1 = self.param( + 'gamma_1', + nn.initializers.constant(self.layer_scale_init_value), + (self.dim)) + x = x * gamma_1[..., :] + x = shortcut + self.get_keep_pattern(x, not train) * x + y = ln(name='norm2')(x) + y = Mlp( + int(self.dim * self.mlp_ratio), + self.dim, + kernel_init=self.kernel_init, + dtype=self.dtype, + name='mlp')(y) + if self.layer_scale_init_value > 0: + gamma_2 = self.param( + 'gamma_2', + nn.initializers.constant(self.layer_scale_init_value), + (self.dim)) + y = y * gamma_2[..., :] + x = x + self.get_keep_pattern(y, not train) * y + return x + + +class Neck(nn.Module): + """Sam convolutional neck blocks.""" + out_chans: int = 768 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x): + """Forward pass. + + Args: + x: (batch_size, height, width, dim) + Returns: + x: (batch_size, height, width, dim) + """ + x = nn.Conv( + self.out_chans, + (1, 1), + strides=(1, 1), + padding='VALID', + use_bias=False, + dtype=self.dtype, + name='0')(x) + x = nn.LayerNorm(name='1')(x) + x = nn.Conv( + self.out_chans, + (3, 3), + strides=(1, 1), + padding=[(1, 1), (1, 1)], + use_bias=False, + dtype=self.dtype, + name='2')(x) + x = nn.LayerNorm(name='3')(x) + return x diff --git a/scenic/projects/baselines/segment_anything/modeling/mask_decoder.py b/scenic/projects/baselines/segment_anything/modeling/mask_decoder.py new file mode 100644 index 0000000000000000000000000000000000000000..5e8a6a0ec4a999927f60175591efc6fbd7094e5c --- /dev/null +++ b/scenic/projects/baselines/segment_anything/modeling/mask_decoder.py @@ -0,0 +1,179 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Sam mask decoder. + +Pytorch reference: + +https://github.com/facebookresearch/segment-anything/blob/HEAD/\ +segment_anything/modeling/mask_decoder.py + +""" + +import flax.linen as nn +import jax.numpy as jnp +from scenic.projects.baselines.segment_anything.modeling import transformer + + +class MaskDecoder(nn.Module): + """Sam mask decoder.""" + + transformer_dim: int = 256 + num_multimask_outputs: int = 3 + iou_head_depth: int = 3 + iou_head_hidden_dim: int = 256 + + def setup(self): + self.iou_token = self.param( + 'iou_token.weight', + nn.initializers.normal(stddev=1.), + (1, self.transformer_dim)) + self.mask_tokens = self.param( + 'mask_tokens.weight', + nn.initializers.normal(stddev=1.), + (self.num_multimask_outputs + 1, self.transformer_dim)) + self.output_upscaling = OutputScaling( + transformer_dim=self.transformer_dim, name='output_upscaling') + + self.output_hypernework_mlps = [ + MLP(hidden_dim=self.iou_head_hidden_dim, + output_dim=self.transformer_dim // 8, num_layers=3, + name=f'output_hypernetworks_mlps.{i}', + ) for i in range(self.num_multimask_outputs + 1)] + + self.iou_prediction_head = MLP( + hidden_dim=self.iou_head_hidden_dim, + output_dim=self.num_multimask_outputs + 1, + num_layers=self.iou_head_depth, + name='iou_prediction_head') + + self.transformer = transformer.TwoWayTransformer(name='transformer') + + def predict_masks( + self, image_embeddings, image_pe, + sparse_prompt_embeddings, dense_prompt_embeddings): + """Predict masks for a single image. + + Args: + image_embeddings: (H, W, embed_dim) + image_pe: (H, W, embed_dim) + sparse_prompt_embeddings: (num_prompts, num_points, embed_dim) + dense_prompt_embeddings: (num_prompts, H, W, embed_dim) + Returns: + masks: (num_prompts, num_multimask_outputs + 1, h', w') + iou_pred: (num_prompts, num_multimask_outputs + 1) + """ + output_tokens = jnp.concatenate( + [self.iou_token, self.mask_tokens], + axis=0) # (num_multimask_outputs + 2, transformer_dim) + num_prompts = sparse_prompt_embeddings.shape[0] + output_tokens = jnp.broadcast_to( + output_tokens[None], + (num_prompts, self.num_multimask_outputs + 2, self.transformer_dim)) + tokens = jnp.concatenate( + [output_tokens, sparse_prompt_embeddings], axis=1, + ) # (num_prompts, num_multimask_outputs + 2 + num_points, embed_dim) + + src = jnp.repeat( + image_embeddings[None], tokens.shape[0], + axis=0) # (num_prompts, H, W, D) + src = src + dense_prompt_embeddings + pos_src = jnp.repeat( + image_pe[None], tokens.shape[0], axis=0) # (num_prompts, H, W, D) + num_prompts, h, w, d = src.shape + + hs, src = self.transformer(src, pos_src, tokens) + iou_token_out = hs[:, 0, :] + mask_tokens_out = hs[:, 1: (1 + self.num_multimask_outputs + 1), :] + + src = src.reshape(num_prompts, h, w, d) + upscaled_embedding = self.output_upscaling(src) # (num_prompts, h', w', d) + hyper_in_list = [] + for i in range(self.num_multimask_outputs + 1): + hyper_in_list.append( + self.output_hypernework_mlps[i]( + mask_tokens_out[:, i, :]) # (num_prompts, d) + ) + hyper_in = jnp.stack(hyper_in_list, axis=1) # (num_prompts, num_masks, d) + num_prompts, h, w, d = upscaled_embedding.shape + masks = hyper_in @ upscaled_embedding.reshape( + num_prompts, h * w, d).transpose( + 0, 2, 1) # (num_prompts, num_masks, h'w') + masks = masks.reshape(num_prompts, self.num_multimask_outputs + 1, h, w) + + iou_pred = self.iou_prediction_head(iou_token_out) + return masks, iou_pred + + @nn.compact + def __call__( + self, image_embeddings, image_pe, + sparse_prompt_embeddings, dense_prompt_embeddings, + multimask_output: bool = True): + """Forward model for a single image. + + Args: + image_embeddings: (H, W, 3) + image_pe: (H, W, D) + sparse_prompt_embeddings: (num_prompts, num_points, embed_dim) + dense_prompt_embeddings: (num_prompts, H, W, embed_dim) + multimask_output: bool + Returns: + masks: (num_prompts, num_multimask_outputs, h', w'), + num_multimask_outputs = 3 if multimask_output is True, otherwise 1. + iou_pred: (num_prompts, num_multimask_outputs) + """ + masks, iou_pred = self.predict_masks( + image_embeddings=image_embeddings, + image_pe=image_pe, + sparse_prompt_embeddings=sparse_prompt_embeddings, + dense_prompt_embeddings=dense_prompt_embeddings, + ) + if multimask_output: + return masks[:, 1:], iou_pred[:, 1:] + else: + return masks[:, :1], iou_pred[:, :1] + + +class MLP(nn.Module): + hidden_dim: int + output_dim: int + num_layers: int + + @nn.compact + def __call__(self, x): + for i in range(self.num_layers - 1): + x = nn.Dense(self.hidden_dim, name=f'layers.{i}')(x) + x = nn.relu(x) + x = nn.Dense(self.output_dim, name=f'layers.{self.num_layers - 1}')(x) + return x + + +class OutputScaling(nn.Module): + """Output scaling.""" + transformer_dim: int + + @nn.compact + def __call__(self, x): + x = nn.ConvTranspose( + self.transformer_dim // 4, kernel_size=(2, 2), strides=(2, 2), + transpose_kernel=True, + name='0')(x) + x = nn.LayerNorm(name='1')(x) + x = nn.gelu(x, approximate=False) + x = nn.ConvTranspose( + self.transformer_dim // 8, kernel_size=(2, 2), strides=(2, 2), + transpose_kernel=True, + name='3')(x) + x = nn.gelu(x, approximate=False) + return x diff --git a/scenic/projects/baselines/segment_anything/modeling/nms.py b/scenic/projects/baselines/segment_anything/modeling/nms.py new file mode 100644 index 0000000000000000000000000000000000000000..04fc252f21265d5438bd89e2911c65b7ab4976a0 --- /dev/null +++ b/scenic/projects/baselines/segment_anything/modeling/nms.py @@ -0,0 +1,251 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Non-max Suppression example. + +Forked from +https://github.com/mlperf/training_results_v0.7/blob/master/Google/benchmarks/ +ssd/implementations/ssd-research-JAX-tpu-v3-4096/nms.py + +""" + +from jax import lax +import jax.numpy as jnp +import numpy as np + +_NMS_TILE_SIZE = 256 + + +def _bbox_overlap(boxes: jnp.ndarray, gt_boxes: jnp.ndarray): + """Find Bounding box overlap. + + Args: + boxes: first set of bounding boxes + gt_boxes: second set of boxes to compute IOU + + Returns: + iou: Intersection over union matrix of all input bounding boxes + """ + bb_y_min, bb_x_min, bb_y_max, bb_x_max = jnp.split( + ary=boxes, indices_or_sections=4, axis=2) + gt_y_min, gt_x_min, gt_y_max, gt_x_max = jnp.split( + ary=gt_boxes, indices_or_sections=4, axis=2) + + # Calculates the intersection area. + i_xmin = jnp.maximum(bb_x_min, jnp.transpose(gt_x_min, [0, 2, 1])) + i_xmax = jnp.minimum(bb_x_max, jnp.transpose(gt_x_max, [0, 2, 1])) + i_ymin = jnp.maximum(bb_y_min, jnp.transpose(gt_y_min, [0, 2, 1])) + i_ymax = jnp.minimum(bb_y_max, jnp.transpose(gt_y_max, [0, 2, 1])) + i_area = jnp.maximum((i_xmax - i_xmin), 0) * jnp.maximum((i_ymax - i_ymin), 0) + + # Calculates the union area. + bb_area = (bb_y_max - bb_y_min) * (bb_x_max - bb_x_min) + gt_area = (gt_y_max - gt_y_min) * (gt_x_max - gt_x_min) + # Adds a small epsilon to avoid divide-by-zero. + u_area = bb_area + jnp.transpose(gt_area, [0, 2, 1]) - i_area + 1e-8 + + # Calculates IoU. + iou = i_area / u_area + + return iou + + +def _self_suppression(in_args): + iou, _, iou_sum = in_args + batch_size = iou.shape[0] + can_suppress_others = jnp.reshape( + jnp.max(iou, 1) <= 0.5, [batch_size, -1, 1]).astype(iou.dtype) + iou_suppressed = jnp.reshape( + (jnp.max(can_suppress_others * iou, 1) <= 0.5).astype(iou.dtype), + [batch_size, -1, 1]) * iou + iou_sum_new = jnp.sum(iou_suppressed, [1, 2]) + return iou_suppressed, jnp.any(iou_sum - iou_sum_new > 0.5), iou_sum_new + + +def _cross_suppression(in_args): + boxes, box_slice, iou_threshold, inner_idx = in_args + batch_size = boxes.shape[0] + new_slice = lax.dynamic_slice(boxes, [0, inner_idx * _NMS_TILE_SIZE, 0], + [batch_size, _NMS_TILE_SIZE, 4]) + iou = _bbox_overlap(new_slice, box_slice) + ret_slice = jnp.expand_dims( + (jnp.all(iou < iou_threshold, [1])).astype(box_slice.dtype), + 2) * box_slice + return boxes, ret_slice, iou_threshold, inner_idx + 1 + + +def _suppression_loop_body(in_args): + """Process boxes in the range [idx*_NMS_TILE_SIZE, (idx+1)*_NMS_TILE_SIZE). + + Args: + in_args: A tuple of arguments: boxes, iou_threshold, output_size, idx + + Returns: + boxes: updated boxes. + iou_threshold: pass down iou_threshold to the next iteration. + output_size: the updated output_size. + idx: the updated induction variable. + """ + boxes, iou_threshold, output_size, idx = in_args + num_tiles = boxes.shape[1] // _NMS_TILE_SIZE + batch_size = boxes.shape[0] + + # Iterates over tiles that can possibly suppress the current tile. + box_slice = lax.dynamic_slice(boxes, [0, idx * _NMS_TILE_SIZE, 0], + [batch_size, _NMS_TILE_SIZE, 4]) + def _loop_cond(in_args): + _, _, _, inner_idx = in_args + return inner_idx < idx + + _, box_slice, _, _ = lax.while_loop( + _loop_cond, + _cross_suppression, (boxes, box_slice, iou_threshold, + 0)) + + # Iterates over the current tile to compute self-suppression. + iou = _bbox_overlap(box_slice, box_slice) + mask = jnp.expand_dims( + jnp.reshape(jnp.arange(_NMS_TILE_SIZE), [1, -1]) > jnp.reshape( + jnp.arange(_NMS_TILE_SIZE), [-1, 1]), 0) + iou *= (jnp.logical_and(mask, iou >= iou_threshold)).astype(iou.dtype) + + def _loop_cond2(in_args): + _, loop_condition, _ = in_args + return loop_condition + + suppressed_iou, _, _ = lax.while_loop( + _loop_cond2, _self_suppression, + (iou, True, + jnp.sum(iou, [1, 2]))) + suppressed_box = jnp.sum(suppressed_iou, 1) > 0 + box_slice *= jnp.expand_dims(1.0 - suppressed_box.astype(box_slice.dtype), 2) + + # Uses box_slice to update the input boxes. + mask = jnp.reshape( + (jnp.equal(jnp.arange(num_tiles), idx)).astype(boxes.dtype), + [1, -1, 1, 1]) + boxes = jnp.tile(jnp.expand_dims( + box_slice, 1), [1, num_tiles, 1, 1]) * mask + jnp.reshape( + boxes, [batch_size, num_tiles, _NMS_TILE_SIZE, 4]) * (1 - mask) + boxes = jnp.reshape(boxes, [batch_size, -1, 4]) + + # Updates output_size. + output_size += jnp.sum( + jnp.any(box_slice > 0, [2]).astype(jnp.int32), [1]) + return boxes, iou_threshold, output_size, idx + 1 + + +def non_max_suppression_padded(scores: jnp.ndarray, + boxes: jnp.ndarray, + max_output_size: jnp.ndarray, + iou_threshold: float, + return_idx: bool = False): + """A wrapper that handles non-maximum suppression. + + Assumption: + * The boxes are sorted by scores unless the box is a dot (all coordinates + are zero). + * Boxes with higher scores can be used to suppress boxes with lower scores. + + The overal design of the algorithm is to handle boxes tile-by-tile: + + boxes = boxes.pad_to_multiply_of(tile_size) + num_tiles = len(boxes) // tile_size + output_boxes = [] + for i in range(num_tiles): + box_tile = boxes[i*tile_size : (i+1)*tile_size] + for j in range(i - 1): + suppressing_tile = boxes[j*tile_size : (j+1)*tile_size] + iou = _bbox_overlap(box_tile, suppressing_tile) + # if the box is suppressed in iou, clear it to a dot + box_tile *= _update_boxes(iou) + # Iteratively handle the diagnal tile. + iou = _box_overlap(box_tile, box_tile) + iou_changed = True + while iou_changed: + # boxes that are not suppressed by anything else + suppressing_boxes = _get_suppressing_boxes(iou) + # boxes that are suppressed by suppressing_boxes + suppressed_boxes = _get_suppressed_boxes(iou, suppressing_boxes) + # clear iou to 0 for boxes that are suppressed, as they cannot be used + # to suppress other boxes any more + new_iou = _clear_iou(iou, suppressed_boxes) + iou_changed = (new_iou != iou) + iou = new_iou + # remaining boxes that can still suppress others, are selected boxes. + output_boxes.append(_get_suppressing_boxes(iou)) + if len(output_boxes) >= max_output_size: + break + + Args: + scores: a tensor with a shape of [batch_size, anchors]. + boxes: a tensor with a shape of [batch_size, anchors, 4]. + max_output_size: a scalar integer `Tensor` representing the maximum number + of boxes to be selected by non max suppression. + iou_threshold: a float representing the threshold for deciding whether boxes + overlap too much with respect to IOU. + return_idx: bool. If true, addtionally return index of the remaining boxes. + Returns: + nms_scores: a tensor with a shape of [batch_size, max_output_size]. + It has the same dtype as input scores. + nms_proposals: a tensor with a shape of [batch_size, max_output_size, 4]. + It has the same dtype as input boxes. + idx: only return if return_idx == True. A int32 array of shape + [batch_size, max_output_size]. The values are in range [0, num_boxes): + the indexes of the remaining boxes. + """ + batch_size = boxes.shape[0] + num_boxes = boxes.shape[1] + pad = int(np.ceil(float(num_boxes) / _NMS_TILE_SIZE) + ) * _NMS_TILE_SIZE - num_boxes + boxes = jnp.pad(boxes.astype(jnp.float32), [[0, 0], [0, pad], [0, 0]]) + scores = jnp.pad(scores.astype(jnp.float32), [[0, 0], [0, pad]]) + num_boxes += pad + + def _loop_cond(in_args): + unused_boxes, unused_threshold, output_size, idx = in_args + return jnp.logical_and( + jnp.min(output_size) < max_output_size, + idx < num_boxes // _NMS_TILE_SIZE) + + selected_boxes, _, output_size, _ = lax.while_loop( + _loop_cond, _suppression_loop_body, ( + boxes, iou_threshold, + jnp.zeros([batch_size], jnp.int32), + 0 + )) + idx = num_boxes - lax.top_k( # pytype: disable=wrong-arg-types # jax-ndarray + jnp.any(selected_boxes > 0, [2]).astype(jnp.int32) * + jnp.expand_dims(jnp.arange(num_boxes, 0, -1), 0), + max_output_size)[0].astype(jnp.int32) + idx = jnp.minimum(idx, num_boxes - 1) + idx_return = idx + idx = jnp.reshape( + idx + jnp.reshape(jnp.arange(batch_size) * num_boxes, [-1, 1]), [-1]) + boxes = jnp.reshape( + (jnp.reshape(boxes, [-1, 4]))[idx], + [batch_size, max_output_size, 4]) + boxes = boxes * ( + jnp.reshape(jnp.arange(max_output_size), [1, -1, 1]) < jnp.reshape( + output_size, [-1, 1, 1])).astype(boxes.dtype) + scores = jnp.reshape( + jnp.reshape(scores, [-1, 1])[idx], + [batch_size, max_output_size]) + scores = scores * ( + jnp.reshape(jnp.arange(max_output_size), [1, -1]) < jnp.reshape( + output_size, [-1, 1])).astype(scores.dtype) + if return_idx: + return scores, boxes, idx_return + else: + return scores, boxes diff --git a/scenic/projects/baselines/segment_anything/modeling/prompt_encoder.py b/scenic/projects/baselines/segment_anything/modeling/prompt_encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..a0862b501c272e3c38cea874fa06cc5541523125 --- /dev/null +++ b/scenic/projects/baselines/segment_anything/modeling/prompt_encoder.py @@ -0,0 +1,247 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Sam prompt encoder. + +Pytorch reference: + +https://github.com/facebookresearch/segment-anything/blob/HEAD/\ +segment_anything/modeling/prompt_encoder.py + +""" + +from typing import Optional, Tuple + +import flax.linen as nn +import jax +import jax.numpy as jnp + + +class PromptEncoder(nn.Module): + """Sam prompt encoder for points and boxes.""" + + embed_dim: int = 256 + image_embedding_size: Tuple[int, int] = (1024 // 16, 1024 // 16) + input_image_size: Tuple[int, int] = (1024, 1024) + num_point_embeddings: int = 4 # pos/neg point + 2 box corners + mask_in_chans: int = 16 + + def setup(self): + self.pe_layer = PositionEmbeddingRandom( + self.embed_dim // 2, name='pe_layer') + point_embeddings = [] + # TODO(zhouxy): check if `nn.initializers.normal(stddev=1.)` is the same as + # pytorch nn.Embedding default initialization. + for i in range(self.num_point_embeddings): + point_embeddings.append(self.param( + f'point_embeddings.{i}.weight', + nn.initializers.normal(stddev=1.), + (1, self.embed_dim))) + self.point_embeddings = point_embeddings + del point_embeddings + self.not_a_point_embed = self.param( + 'not_a_point_embed.weight', + nn.initializers.normal(stddev=1.), + (1, self.embed_dim)) + self.no_mask_embed = self.param( + 'no_mask_embed.weight', + nn.initializers.normal(stddev=1.), + (1, self.embed_dim)) + self.mask_downscaling = MaskDownScaling( + mask_in_chans=self.mask_in_chans, embed_dim=self.embed_dim, + name='mask_downscaling') + + def get_dense_pe(self, image_embedding_size=None): + if image_embedding_size is None: + image_embedding_size = self.image_embedding_size + return self.pe_layer(image_embedding_size) + + def _embed_points(self, points, labels, pad, image_size=None): + """Embed points. + + Args: + points: (num_prompts, num_points, 2). In absolute coordinates. + labels: (num_prompts, num_points) + pad: bool + image_size: Tuple[int, int] or None + Returns: + point_embeddings: (num_prompts, num_points, embed_dim) + """ + # Shift to center of pixel following: + # https://github.com/facebookresearch/segment-anything/blob/main/\ + # segment_anything/modeling/prompt_encoder.py#L80 + points = points + 0.5 + if pad: + padding_point = jnp.zeros((points.shape[0], 1, 2), dtype=jnp.float32) + padding_label = -jnp.ones((labels.shape[0], 1), dtype=jnp.float32) + points = jnp.concatenate([points, padding_point], axis=1) + labels = jnp.concatenate([labels, padding_label], axis=1) + point_embedding = self.pe_layer.forward_with_coords( + points, self.input_image_size if image_size is None else image_size + ) # (num_prompts, num_points, embed_dim) + ignored_points = labels[..., None] == -1 # (num_prompts, num_points, 1) + point_embedding = point_embedding * (1 - ignored_points) + ( + self.not_a_point_embed[None] * ignored_points + ) + neg_points = labels[..., None] == 0 # (num_prompts, num_points, 1) + point_embedding += neg_points * self.point_embeddings[0][None] + pos_points = labels[..., None] == 1 # (num_prompts, num_points, 1) + point_embedding += pos_points * self.point_embeddings[1][None] + return point_embedding + + def _embed_boxes(self, boxes, image_size=None): + boxes = boxes + 0.5 + coords = boxes.reshape(-1, 2, 2) + corner_embedding = self.pe_layer.forward_with_coords( + coords, self.input_image_size if image_size is None else image_size + ) # (num_prompts, 2, embed_dim) + lt_emb = corner_embedding[:, 0, :] + self.point_embeddings[2] + rb_emb = corner_embedding[:, 1, :] + self.point_embeddings[3] + corner_embedding = jnp.stack( + [lt_emb, rb_emb], axis=1 + ) # (num_prompts, 2, embed_dim) + return corner_embedding + + def _embed_masks(self, masks): + mask_embedding = self.mask_downscaling(masks) + return mask_embedding + + @nn.compact + def __call__( + self, + points, + point_labels, + boxes=None, + masks=None, + image_size=None, + image_embedding_size=None, + ): + """Forward pass. Currently only supports points prompt. + + Args: + points: (num_prompts, num_points, 2) + point_labels: (num_prompts, num_points): labels of each point. 1 means + positive points, 0 means negative points (shouldn't be included in the + mask), and -1 means padded/ ignored points. + boxes: (num_prompts, 4) or None + masks: (num_prompts, height, width) or None + image_size: Tuple[int, int] or None + image_embedding_size: Tuple[int, int] or None + Returns: + sparse_embeddings: (num_prompts, num_points, embed_dim) + dense_embeddings: (num_prompts, H, W, embed_dim) + """ + num_prompts = points.shape[0] if points is not None else ( + boxes.shape[0] if boxes is not None else masks.shape[0]) + sparse_embeddings = jnp.zeros( + (num_prompts, 0, self.embed_dim), dtype=jnp.float32) + if points is not None: + point_embeddings = self._embed_points( + points, point_labels, pad=(boxes is None), image_size=image_size) + sparse_embeddings = jnp.concatenate( + [sparse_embeddings, point_embeddings], axis=1) + if boxes is not None: + box_embeddings = self._embed_boxes(boxes, image_size=image_size) + sparse_embeddings = jnp.concatenate( + [sparse_embeddings, box_embeddings], axis=1) + if masks is not None: + dense_embeddings = self._embed_masks(masks) + else: + if image_embedding_size is None: + image_embedding_size = self.image_embedding_size + dense_embeddings = jnp.broadcast_to( + self.no_mask_embed[:, None, None], + (num_prompts, image_embedding_size[0], + image_embedding_size[1], self.embed_dim,) + ) + return sparse_embeddings, dense_embeddings + + +class PositionEmbeddingRandom(nn.Module): + """Positional encoding using random spatial frequencies.""" + + num_pos_feats: int + scale: Optional[float] = None + + def setup(self): + scale = 1.0 if self.scale is None or self.scale <= 0.0 else self.scale + self.positional_encoding_gaussian_matrix = self.param( + 'positional_encoding_gaussian_matrix', + nn.initializers.normal(stddev=scale), + (2, self.num_pos_feats) + ) + + def _pe_encoding(self, coords): + """PE encoding.""" + # Assuming coords are in [0, 1]^2 square and have d_1 x ... x d_n x 2 shape + coords = 2 * coords - 1 + coords = coords @ jax.lax.stop_gradient( + self.positional_encoding_gaussian_matrix) + coords = 2 * jnp.pi * coords + # outputs d_1 x ... x d_n x C shape + return jnp.concatenate([jnp.sin(coords), jnp.cos(coords)], axis=-1) + + @nn.compact + def __call__(self, size): + """Forward pass. + + Args: + size: 2 + Returns: + pe: H x W x D + """ + h, w = size + grid = jnp.ones((h, w), dtype=jnp.float32) + y_embed = jnp.cumsum(grid, axis=0) - 0.5 + x_embed = jnp.cumsum(grid, axis=1) - 0.5 + y_embed = y_embed / h + x_embed = x_embed / w + pe = self._pe_encoding(jnp.stack([x_embed, y_embed], axis=-1)) + return pe + + def forward_with_coords(self, coords_input, image_size): + """Forward with points. + + Args: + coords_input: (num_prompts, num_points, 2) + image_size: (2,) + Returns: + embedding: (num_prompts, num_points, self.num_pos_feats * 2) + """ + x = coords_input[:, :, 0] / image_size[1] + y = coords_input[:, :, 1] / image_size[0] + return self._pe_encoding(jnp.stack([x, y], axis=-1)) + + +class MaskDownScaling(nn.Module): + """Mask downscaling.""" + mask_in_chans: int = 16 + embed_dim: int = 256 + + @nn.compact + def __call__(self, x): + x = nn.Conv( + self.mask_in_chans // 4, kernel_size=(2, 2), strides=(2, 2), + name='0')(x) + x = nn.LayerNorm(name='1')(x) + x = nn.gelu(x, approximate=False) + x = nn.Conv( + self.mask_in_chans, kernel_size=(2, 2), strides=(2, 2), + name='3')(x) + x = nn.LayerNorm(name='4')(x) + x = nn.gelu(x, approximate=False) + x = nn.Conv( + self.embed_dim, kernel_size=(1, 1), strides=(1, 1), + name='6')(x) + return x diff --git a/scenic/projects/baselines/segment_anything/modeling/sam.py b/scenic/projects/baselines/segment_anything/modeling/sam.py new file mode 100644 index 0000000000000000000000000000000000000000..f0eeffcee4b40cd2e0c14cae2f2d929cff2eaa7f --- /dev/null +++ b/scenic/projects/baselines/segment_anything/modeling/sam.py @@ -0,0 +1,388 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Segment Anything Model. + +Pytorch reference: + +https://github.com/facebookresearch/segment-anything/blob/HEAD/\ +segment_anything/modeling/sam.py + +""" +import dataclasses +from typing import Any, Optional + +from flax import linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.projects.baselines.segment_anything.modeling import image_encoder +from scenic.projects.baselines.segment_anything.modeling import mask_decoder +from scenic.projects.baselines.segment_anything.modeling import prompt_encoder +from scenic.projects.baselines.segment_anything.modeling import utils + +PIXEL_MEAN = (123.675, 116.28, 103.53) +PIXEL_STD = (58.395, 57.12, 57.375) + +SIZE_CONFIGS = { + 'B': (768, 12, 12, 0.1, (0, 1, 3, 4, 6, 7, 9, 10)), + 'L': (1024, 24, 16, 0.4, ( + 0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22)), + 'H': (1280, 32, 16, 0.5, ( + 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, + 22, 24, 25, 26, 27, 28, 29, 30)), +} + + +class Sam(nn.Module): + """Segment anything model. + + Default parameters following + https://github.com/facebookresearch/segment-anything/blob/main/ + segment_anything/automatic_mask_generator.py#L35 + + Attributes: + mask_threshold: threshold to convert output logits to binary masks. + pixel_mean: used in preprocessing inputs. + pixel_std: used in preprocessing inputs. + max_objects: number of output objects in "segment anything" mode. + points_per_side: number of point anchors perside in "segment anything" mode. + points_per_batch: batch size for processing point anchors. + pred_iou_thresh: score threshold in "segment anything" mode. + box_nms_thresh: NMS threshold + stability_score_thresh: threshold for filtering with a stability metric. + stability_score_offset: used in computing the stability metric. + pre_nms_topk: new hyper-parameter in this implementation. Used for keeping a + fixed shape after filtering mask predictions. + image_encoder_args: args for image backbone. + prompt_encoder_args: args for prompt encoder. + mask_decoder_args: args for mask decoder. + """ + mask_threshold: float = 0.0 + pixel_mean: Any = PIXEL_MEAN + pixel_std: Any = PIXEL_STD + max_objects: int = 100 + points_per_side: Optional[int] = 32 + points_per_batch: int = 64 + pred_iou_thresh: float = 0.88 + box_nms_thresh: float = 0.7 + stability_score_thresh: float = 0.95 + stability_score_offset: float = 1.0 + pre_nms_topk: int = 1536 + image_encoder_args: ml_collections.ConfigDict = dataclasses.field( + default_factory=ml_collections.ConfigDict) + prompt_encoder_args: ml_collections.ConfigDict = dataclasses.field( + default_factory=ml_collections.ConfigDict) + mask_decoder_args: ml_collections.ConfigDict = dataclasses.field( + default_factory=ml_collections.ConfigDict) + + def setup(self): + # pylint: disable=not-a-mapping + self.image_encoder = image_encoder.ImageEncoderViT( + **self.image_encoder_args, name='image_encoder') + self.prompt_encoder = prompt_encoder.PromptEncoder( + **self.prompt_encoder_args, name='prompt_encoder') + self.mask_decoder = mask_decoder.MaskDecoder( + **self.mask_decoder_args, name='mask_decoder') + # pylint: enable=not-a-mapping + + @nn.compact + def __call__( + self, image, point_coords, point_labels, padding_mask=None, + image_embeddings=None, boxes=None, mask_inputs=None, + multimask_output: bool = True, return_image_embedding: bool = False, + upsample_mask: bool = True, return_batch_as_list: bool = True, + train: bool = False, debug: bool = False): + """Forward Sam model. + + Args: + image: (batch_size, H, W, 3). Input pixels in RGB values [0, 255]. + point_coords: (batch_size, num_prompts, num_points, 2). Input point + prompts. In absolute range [0, image.shape[1 or 2]]. + point_labels: (batch_size, num_prompts, num_points). 1: positive points; + 0: negative points. -1: padded/ ignored points. + padding_mask: (batch_size, H, W). Indicate which pixels in the input are + padded. 1: not padded; 0: padded. This is used to match the pytorch + preprocessing process: normalize then pad, while in Jax we need to pad + first. + image_embeddings: cached image embeddings if they are provided. + (batch_size, H', W', D). If not provided, image must be not None. + boxes: (batch_size, num_prompts, 4); box prompts; + mask_inputs: (batch_size, num_prompts, 1, H, W); mask prompts. + multimask_output: bool. If false, C = 1, otherwise, + C = self.mask_decoder_args.num_multimask_outputs + return_image_embedding: bool + upsample_mask: bool; If False, only return the 4x downsampled masks. This + saves memory. + return_batch_as_list: If True, return a list where each item is the + results of a single image; If False, return a dict with batched results. + train: bool + debug: bool + Returns: + ret: a list (batch) of dicts, each with the following keys: + 'masks': (num_prompts, C, H, W). C is the num of masks (see above). + 'iou_predictions': (num_prompts, C). Predicted mask quality scores. + 'low_res_logits': (num_prompts, C, H', W'). The output mask of the + mask decoder. The final masks are resized from this. + """ + del debug + msg = 'One of "image" or "image_embedding" should be provided!' + assert image is not None or image_embeddings is not None, msg + assert image is None or image_embeddings is None, msg + if image_embeddings is None: + assert image is not None + image_embeddings = self.get_image_embeddings( + image, padding_mask=padding_mask, + train=train) # (batch_size, H', W', D) + image_size = image.shape[1:3] if image is not None else ( + (image_embeddings.shape[1] * 16, image_embeddings.shape[2] * 16)) + ret = [] + for b, curr_embedding in enumerate(image_embeddings): + curr_point_coords = point_coords[b] if point_coords is not None else None + curr_point_labels = point_labels[b] if point_labels is not None else None + box_prompt = boxes[b] if boxes is not None else None + mask_prompt = mask_inputs[b] if mask_inputs is not None else None + sparse_embeddings, dense_embeddings = self.prompt_encoder( + curr_point_coords, curr_point_labels, + boxes=box_prompt, masks=mask_prompt, + image_size=image_size, + image_embedding_size=curr_embedding.shape[:2]) + low_res_masks, iou_predictions = self.mask_decoder( + image_embeddings=curr_embedding, + image_pe=self.prompt_encoder.get_dense_pe(curr_embedding.shape[:2]), + sparse_prompt_embeddings=sparse_embeddings, + dense_prompt_embeddings=dense_embeddings, + multimask_output=multimask_output, + ) + out = { + 'iou_predictions': iou_predictions, + 'low_res_logits': low_res_masks, + } + if upsample_mask: + masks = ( + self.postprocess_masks( + low_res_masks, image_size[0], image_size[1] + ) + > self.mask_threshold + ) + out['masks'] = masks + ret.append(out) + if return_image_embedding: + for batch_i, image_embedding in enumerate(image_embeddings): + ret[batch_i]['image_embedding'] = image_embedding + if not return_batch_as_list: + ret = {k: jnp.stack([ret[i][k] for i in range(len(ret))], axis=0) + for k in ret[0].keys()} + return ret + + def get_image_embeddings(self, image, padding_mask=None, train=False): + image = self.preprocess(image, padding_mask) # (batch_size, H, W, 3) + image_embeddings = self.image_encoder( + image, train=train) # (batch_size, H', W', D) + return image_embeddings + + @staticmethod + def postprocess_masks(masks, h, w): + """Resize masks to input resolution.""" + masks = jax.image.resize( + masks, (masks.shape[0], masks.shape[1], h, w), + method='bilinear', antialias=False) + return masks + + @staticmethod + def postprocess_to_orig( + lowres_masks, unpad_size, orig_size, mask_threshold=0.0): + """Resize masks to input resolution.""" + lowres_h, lowres_w = lowres_masks.shape[1:] + unpad_h, unpad_w = unpad_size + down_ratio = max(lowres_h, lowres_w) / max(unpad_h, unpad_w) + h, w = int(unpad_h * down_ratio), int(unpad_w * down_ratio) + orig_h, orig_w = orig_size + + masks = ( + jax.image.resize( + jax.device_put( + lowres_masks[:, :h, :w], + device=jax.local_devices(backend='cpu')[0], + ), + (lowres_masks.shape[0], orig_h, orig_w), + method='bilinear', + antialias=False, + ) + > mask_threshold + ) + boxes = utils.batched_mask_to_box_np(np.asarray(masks)) + return masks, boxes + + def preprocess(self, inputs, padding_mask=None): + """Proprocess images. Normalize pixels for non-padded pixels.""" + mean = jnp.asarray(self.pixel_mean, dtype=jnp.float32).reshape(1, 1, 1, 3) + std = jnp.asarray(self.pixel_std, dtype=jnp.float32).reshape(1, 1, 1, 3) + inputs = (inputs - mean) / std + if padding_mask is not None: + inputs = inputs * padding_mask[..., None] # Padded pixels remain 0 + return inputs + + def generate( + self, image=None, padding_mask=None, upsample_mask=True, + image_embedding=None, return_image_embedding=False): + """Automatically generate masks for all objects. + + This function is from the original SamAutomaticMaskGenerator at + https://github.com/facebookresearch/segment-anything/blob/HEAD/ + segment_anything/automatic_mask_generator.py. + + Here we merge it inside the Sam flax model, as we don't use a separate + predictor class. + + Here are a few key differences compared to the original implementation: + + - The original implementation did filtering inside each prompt-batch. We + can't do this in jax as the filtering changes the data shape. Instead, + we do a filtering after concatenating the raw outputs from all batches, + and use an additional parameter "pre_nms_topk" to control the output + shape. By default "pre_nms_topk" is half of all prompts. + + - We move mask upsampling (i.e., "postprocess_masks") to the very end of + the process (after NMS), to save peak memory. This means the box-NMS and + the stability_score are computed on the 4x-downsampled masks. This + introduces small errors compared to the original implementation. + + - We don't support the multi-crop testing in the original code as this is + not enabled in the default config. + + Args: + image: a single image, (H x W x 3) + padding_mask: (H x W) + upsample_mask: bool; If False, only return the 4x downsampled masks. This + saves memory. + image_embedding: image embeddings if they are provided. (H', W', D). If + not provided, image must be not None. + return_image_embedding: bool + Returns: + Result dict of that image, with keys: + 'masks': (self.max_objects H, W). + 'iou_predictions': (self.max_objects,). Predicted mask quality scores. + 'low_res_logits': (self.max_objects, H', W'). The output mask of the + mask decoder. The final masks are resized from this. + 'boxes': (self.max_objects, 4). Box from the masks. + 'stability_score': (stability_score,). A measurement of how stable the + mask is when self.mask_threshold changes. + """ + msg = 'One of "image" or "image_embedding" should be provided!' + assert image is not None or image_embedding is not None, msg + assert image is None or image_embedding is None, msg + if image_embedding is None: + padding_mask = padding_mask if padding_mask is not None else ( + jnp.ones((image.shape[0], image.shape[1]), dtype=jnp.float32)) + image_embedding = self.get_image_embeddings( + image[None], padding_mask=padding_mask[None])[0] # (H', W', D) + else: + nopadding_msg = 'Padding_mask should be provided if using image_embedding' + assert padding_mask is not None, nopadding_msg + + point_grid = utils.build_point_grid( + self.points_per_side)[:, None] # (points_per_side ** 2, 1, 2) + # Ignore padded region in creating grid. + valid_h = padding_mask.max(axis=1).sum() + valid_w = padding_mask.max(axis=0).sum() + point_grid = point_grid * jnp.asarray( + [valid_w, valid_h], dtype=jnp.float32).reshape(1, 1, 2) + point_labels = jnp.ones( + (point_grid.shape[0], point_grid.shape[1]), + dtype=jnp.int32) # (points_per_side ** 2, 1) + + num_prompts = point_grid.shape[0] + bs = self.points_per_batch + assert num_prompts % bs == 0, num_prompts + num_batches = num_prompts // bs + low_res_masks, iou_predictions = [], [] + for b in range(num_batches): + in_points = point_grid[b * bs: (b + 1) * bs] + in_labels = point_labels[b * bs: (b + 1) * bs] + sparse_embeddings_cur, dense_embeddings_cur = self.prompt_encoder( + in_points, in_labels, + image_size=image.shape[:2], + image_embedding_size=image_embedding.shape[:2]) + low_res_masks_cur, iou_predictions_cur = self.mask_decoder( + image_embeddings=image_embedding, + image_pe=self.prompt_encoder.get_dense_pe(image_embedding.shape[:2]), + sparse_prompt_embeddings=sparse_embeddings_cur, + dense_prompt_embeddings=dense_embeddings_cur, + multimask_output=True, + ) # low_res_masks: (bs, 3, h', w') + low_res_masks.append(low_res_masks_cur) + iou_predictions.append(iou_predictions_cur) + ret = {} + if return_image_embedding: + ret['image_embedding'] = image_embedding + del image_embedding + + low_res_masks = jnp.concatenate( + low_res_masks, axis=0) + iou_predictions = jnp.concatenate(iou_predictions, axis=0) + low_res_masks = low_res_masks.reshape( + (-1,) + low_res_masks.shape[-2:]) # (points_per_side ** 2 * 3, h', w') + iou_predictions = iou_predictions.reshape(-1) # (points_per_side ** 2 * 3,) + keep_mask = iou_predictions > self.pred_iou_thresh + + # Note: the original code computes stability_score on upsampled masks. + stability_score = utils.calculate_stability_score( + low_res_masks, + self.mask_threshold, self.stability_score_offset) + if self.stability_score_thresh > 0.0: + keep_mask = keep_mask & (stability_score > self.stability_score_thresh) + + iou_predictions = iou_predictions * keep_mask + + _, inds = jax.lax.top_k(iou_predictions, k=self.pre_nms_topk) + iou_predictions = jnp.take_along_axis(iou_predictions, inds, axis=0) + low_res_masks = jnp.take_along_axis( + low_res_masks, inds[:, None, None], axis=0) + + # Note: the original code run NMS on upsampled masks. + low_res_boxes = utils.batched_mask_to_box( + low_res_masks > self.mask_threshold) + keep_inds = utils.nms( + low_res_boxes, iou_predictions, + iou_threshold=self.box_nms_thresh, + num_outputs=self.max_objects) # (max_objects,) + low_res_masks = jnp.take_along_axis( + low_res_masks, keep_inds[:, None, None], axis=0) + ret.update({ + 'iou_predictions': jnp.take_along_axis( + iou_predictions, keep_inds, axis=0), + 'low_res_logits': low_res_masks, + 'low_res_boxes': jnp.take_along_axis( + low_res_boxes, keep_inds[:, None], axis=0), + 'stability_score': jnp.take_along_axis( + stability_score, keep_inds, axis=0), + }) + if upsample_mask: + masks = ( + self.postprocess_masks( + low_res_masks[None], image.shape[0], image.shape[1] + )[0] + > self.mask_threshold + ) + boxes = utils.batched_mask_to_box(masks) + ret['masks'] = masks + ret['boxes'] = boxes + return ret + + def batch_generate(self, image, padding_mask, upsample_mask=True): + return jax.vmap(lambda x, y: self.generate(x, y, upsample_mask))( + image, padding_mask) + diff --git a/scenic/projects/baselines/segment_anything/modeling/transformer.py b/scenic/projects/baselines/segment_anything/modeling/transformer.py new file mode 100644 index 0000000000000000000000000000000000000000..13dbdd6936e20ab754cc13f44eec964bc2cad8fe --- /dev/null +++ b/scenic/projects/baselines/segment_anything/modeling/transformer.py @@ -0,0 +1,240 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Sam transformer for running cross-attention. + +Pytorch reference: + +https://github.com/facebookresearch/segment-anything/blob/HEAD/\ +segment_anything/modeling/transformer.py + +""" + +import math +from typing import Any + +import flax.linen as nn +import jax.numpy as jnp + + +class TwoWayTransformer(nn.Module): + """Transformer with query and key/ value inputs.""" + + depth: int = 2 + embedding_dim: int = 256 + num_heads: int = 8 + mlp_dim: int = 2048 + activation: Any = nn.relu + attention_downsample_rate: int = 2 + + def setup(self): + layers = [] + for i in range(self.depth): + layer = TwoWayAttentionBlock( + embedding_dim=self.embedding_dim, + num_heads=self.num_heads, + mlp_dim=self.mlp_dim, + activation=self.activation, + attention_downsample_rate=self.attention_downsample_rate, + skip_first_layer_pe=(i == 0), + name=f'layers.{i}') + layers.append(layer) + self.layers = layers + + self.final_attn_token_to_image = Attention( + self.embedding_dim, self.num_heads, self.attention_downsample_rate, + name='final_attn_token_to_image') + self.norm_final_attn = nn.LayerNorm(epsilon=1e-5, name='norm_final_attn') + + def __call__(self, image_embedding, image_pe, point_embedding): + """Forward pass. + + Args: + image_embedding: (batch_size, h, w, embedding_dim) + image_pe: (batch_size, h, w, embedding_dim) + point_embedding: (batch_size, num_points, embedding_dim) + Returns: + """ + batch_size, c = image_embedding.shape[0], image_embedding.shape[-1] + image_embedding = image_embedding.reshape((batch_size, -1, c)) + image_pe = image_pe.reshape((batch_size, -1, c)) + + # Prepare queries + queries = point_embedding + keys = image_embedding + + # Apply transformer blocks and final layernorm + for layer in self.layers: + queries, keys = layer( + queries=queries, + keys=keys, + query_pe=point_embedding, + key_pe=image_pe, + ) + + # Apply the final attention layer from the points to the image + q = queries + point_embedding + k = keys + image_pe + attn_out = self.final_attn_token_to_image(q=q, k=k, v=keys) + queries = queries + attn_out + queries = self.norm_final_attn(queries) + + return queries, keys + + +class TwoWayAttentionBlock(nn.Module): + """Transformer block.""" + + embedding_dim: int + num_heads: int + mlp_dim: int = 2048 + activation: Any = nn.relu + attention_downsample_rate: int = 2 + skip_first_layer_pe: bool = False + + def setup(self): + self.self_attn = Attention( + self.embedding_dim, self.num_heads, name='self_attn') + self.norm1 = nn.LayerNorm(epsilon=1e-5, name='norm1') + + self.cross_attn_token_to_image = Attention( + self.embedding_dim, self.num_heads, self.attention_downsample_rate, + name='cross_attn_token_to_image') + self.norm2 = nn.LayerNorm(epsilon=1e-5, name='norm2') + + self.mlp = MLPBlock( + self.embedding_dim, self.mlp_dim, self.activation, + name='mlp') + self.norm3 = nn.LayerNorm(epsilon=1e-5, name='norm3') + + self.norm4 = nn.LayerNorm(epsilon=1e-5, name='norm4') + self.cross_attn_image_to_token = Attention( + self.embedding_dim, self.num_heads, self.attention_downsample_rate, + name='cross_attn_image_to_token') + + def __call__(self, queries, keys, query_pe, key_pe): + """Forward two-way attention block. + + Args: + queries: (batch_size, query_tokens, embedding_dim) + keys: (batch_size, key_tokens, embedding_dim) + query_pe: (batch_size, query_tokens, embedding_dim) + key_pe: (batch_size, key_tokens, embedding_dim) + Returns: + queries: (batch_size, query_tokens, embedding_dim) + keys: (batch_size, key_tokens, embedding_dim) + """ + # Self attention block + if self.skip_first_layer_pe: + queries = self.self_attn(q=queries, k=queries, v=queries) + else: + q = queries + query_pe + attn_out = self.self_attn(q=q, k=q, v=queries) + queries = queries + attn_out + queries = self.norm1(queries) + + # Cross attention block, tokens attending to image embedding + q = queries + query_pe + k = keys + key_pe + attn_out = self.cross_attn_token_to_image(q=q, k=k, v=keys) + queries = queries + attn_out + queries = self.norm2(queries) + + # MLP block + mlp_out = self.mlp(queries) + queries = queries + mlp_out + queries = self.norm3(queries) + + # Cross attention block, image embedding attending to tokens + q = queries + query_pe + k = keys + key_pe + attn_out = self.cross_attn_image_to_token(q=k, k=q, v=queries) + keys = keys + attn_out + keys = self.norm4(keys) + + return queries, keys + + +class Attention(nn.Module): + """Attention module.""" + embedding_dim: int + num_heads: int + downsample_rate: int = 1 + + def setup(self): + self.internal_dim = self.embedding_dim // self.downsample_rate + assert self.internal_dim % self.num_heads == 0, ( + 'num_heads must divide embedding_dim.') + + self.q_proj = nn.Dense(self.internal_dim, name='q_proj') + self.k_proj = nn.Dense(self.internal_dim, name='k_proj') + self.v_proj = nn.Dense(self.internal_dim, name='v_proj') + self.out_proj = nn.Dense(self.embedding_dim, name='out_proj') + + def _separate_heads(self, x): + b, n, c = x.shape + x = x.reshape(b, n, self.num_heads, c // self.num_heads) + return x.transpose((0, 2, 1, 3)) # B x N_heads x N_tokens x C_per_head + + def _recombine_heads(self, x): + b, n_heads, n_tokens, c_per_head = x.shape + x = x.transpose((0, 2, 1, 3)) + return x.reshape(b, n_tokens, n_heads * c_per_head) # B x N_tokens x C + + def __call__(self, q, k, v): + """Forward attention module. + + Args: + q: (batch_size, query_tokens, embedding_dim) + k: (batch_size, key_tokens, embedding_dim) + v: (batch_size, key_tokens, embedding_dim) + Returns: + out: (batch_size, query_tokens, embedding_dim) + """ + # Input projections + q = self.q_proj(q) + k = self.k_proj(k) + v = self.v_proj(v) + + # Separate into heads + q = self._separate_heads(q) # (batch_size, num_heads, n, c_per_head) + k = self._separate_heads(k) # (batch_size, num_heads, m, c_per_head) + v = self._separate_heads(v) # (batch_size, num_heads, m, c_per_head) + + # Attention + _, _, _, c_per_head = q.shape + attn = jnp.matmul( + q, k.transpose((0, 1, 3, 2))) # B x N_heads x N_tokens x N_tokens + attn = attn / math.sqrt(c_per_head) + attn = nn.softmax(attn, axis=-1) + + # Get output + out = jnp.matmul(attn, v) + out = self._recombine_heads(out) + out = self.out_proj(out) + + return out + + +class MLPBlock(nn.Module): + embedding_dim: int + mlp_dim: int + activation: Any = nn.relu # Confirmed in the original code. + + @nn.compact + def __call__(self, x): + x = nn.Dense(self.mlp_dim, name='lin1')(x) + x = self.activation(x) + x = nn.Dense(self.embedding_dim, name='lin2')(x) + return x diff --git a/scenic/projects/baselines/segment_anything/modeling/utils.py b/scenic/projects/baselines/segment_anything/modeling/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..1295aa8a07004f3eb59bcd0d27fba51b478055e2 --- /dev/null +++ b/scenic/projects/baselines/segment_anything/modeling/utils.py @@ -0,0 +1,100 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Util functions for Segment Anything models.""" + +import jax.numpy as jnp +import numpy as np +from scenic.projects.baselines.segment_anything.modeling import nms as nms_lib + + +def build_point_grid(points_per_side): + """Generates a 2D grid of points evenly spaced in [0, 1] x [0, 1].""" + offset = 1. / (2 * points_per_side) + points_one_side = jnp.linspace(offset, 1 - offset, points_per_side) + points_x = jnp.tile(points_one_side[None, :], (points_per_side, 1)) + points_y = jnp.tile(points_one_side[:, None], (1, points_per_side)) + points = jnp.stack([points_x, points_y], axis=-1).reshape(-1, 2) + return points # (points_per_side ** 2, 1) + + +def batched_mask_to_box(masks): + """Convert binary masks in (n, h, w) to boxes (n, 4).""" + if masks.shape[0] == 0: + return jnp.zeros((0, 4), dtype=jnp.float32) + + h, w = masks.shape[-2:] + in_height = jnp.max(masks, axis=-1) # (n, h) + in_height_coords = in_height * jnp.arange(h)[None] # (n, h) + bottom_edges = jnp.max(in_height_coords, axis=-1) # (n, ) + # Mark "0" as "h" so that we can take min. + in_height_coords = in_height_coords + h * (1 - in_height) # (n, h) + top_edges = jnp.min(in_height_coords, axis=-1) # (n,) + + in_width = jnp.max(masks, axis=-2) # (n, w) + in_width_coords = in_width * jnp.arange(w)[None] # (n, w) + right_edges = jnp.max(in_width_coords, axis=-1) # (n,) + in_width_coords = in_width_coords + w * (1 - in_width) # (n, w) + left_edges = jnp.min(in_width_coords, axis=-1) + + # mark empty mask as [0, 0, 0, 0] + empty_filter = (right_edges < left_edges) | (bottom_edges < top_edges) + out = jnp.stack( + [left_edges, top_edges, right_edges, bottom_edges], axis=-1) # (n, 4) + out = out * (1 - empty_filter)[:, None] + return out + + +def batched_mask_to_box_np(masks): + """Convert binary masks in (n, h, w) to boxes (n, 4).""" + if masks.shape[0] == 0: + return np.zeros((0, 4), dtype=np.float32) + + h, w = masks.shape[-2:] + in_height = np.max(masks, axis=-1) # (n, h) + in_height_coords = in_height * np.arange(h)[None] # (n, h) + bottom_edges = np.max(in_height_coords, axis=-1) # (n, ) + # Mark "0" as "h" so that we can take min. + in_height_coords = in_height_coords + h * (1 - in_height) # (n, h) + top_edges = np.min(in_height_coords, axis=-1) # (n,) + + in_width = np.max(masks, axis=-2) # (n, w) + in_width_coords = in_width * np.arange(w)[None] # (n, w) + right_edges = np.max(in_width_coords, axis=-1) # (n,) + in_width_coords = in_width_coords + w * (1 - in_width) # (n, w) + left_edges = np.min(in_width_coords, axis=-1) + + # mark empty mask as [0, 0, 0, 0] + empty_filter = (right_edges < left_edges) | (bottom_edges < top_edges) + out = np.stack( + [left_edges, top_edges, right_edges, bottom_edges], axis=-1) # (n, 4) + out = out * (1 - empty_filter)[:, None] + return out + + +def calculate_stability_score( + mask_logits, mask_threshold, stability_score_offset): + """The stability score measures if the mask changes with different thresh.""" + low = (mask_logits > (mask_threshold + stability_score_offset)).sum( + axis=-1).sum(axis=-1) + high = (mask_logits > (mask_threshold - stability_score_offset)).sum( + axis=-1).sum(axis=-1) + return low / high + + +def nms(boxes, scores, iou_threshold, num_outputs=100): + _, _, keep = nms_lib.non_max_suppression_padded( + scores[None], boxes[None], num_outputs, iou_threshold, + return_idx=True) # pytype: disable=wrong-arg-types + return keep[0] # undo batch diff --git a/scenic/projects/baselines/segment_anything/notebooks/Convert_SAM_weights.ipynb b/scenic/projects/baselines/segment_anything/notebooks/Convert_SAM_weights.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..d365abf2b3e4718eedcee31c512d1d017e75c141 --- /dev/null +++ b/scenic/projects/baselines/segment_anything/notebooks/Convert_SAM_weights.ipynb @@ -0,0 +1,2321 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "91dd9a89", + "metadata": { + "id": "91dd9a89" + }, + "outputs": [], + "source": [ + "using_colab = True\n", + "if using_colab:\n", + " import torch\n", + " import torchvision\n", + " from google.colab.patches import cv2_imshow\n", + " print(\"PyTorch version:\", torch.__version__)\n", + " print(\"Torchvision version:\", torchvision.__version__)\n", + " print(\"CUDA is available:\", torch.cuda.is_available())\n", + " import sys\n", + " !{sys.executable} -m pip install opencv-python matplotlib\n", + " !{sys.executable} -m pip install 'git+https://github.com/facebookresearch/segment-anything.git'\n", + "\n", + " !mkdir images\n", + " !wget -P images https://raw.githubusercontent.com/facebookresearch/segment-anything/main/notebooks/images/truck.jpg\n", + " !wget -P images https://raw.githubusercontent.com/facebookresearch/segment-anything/main/notebooks/images/groceries.jpg\n", + "\n", + " # !wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth\n", + " !wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth" + ] + }, + { + "cell_type": "markdown", + "id": "0be845da", + "metadata": { + "id": "0be845da" + }, + "source": [ + "## Set-up" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "29bc90d5", + "metadata": { + "id": "29bc90d5", + "cellView": "form" + }, + "outputs": [], + "source": [ + "#@title visualization utils\n", + "import numpy as np\n", + "import torch\n", + "import matplotlib.pyplot as plt\n", + "import cv2\n", + "\n", + "def show_mask(mask, ax, random_color=False):\n", + " if random_color:\n", + " color = np.concatenate([np.random.random(3), np.array([0.6])], axis=0)\n", + " else:\n", + " color = np.array([30/255, 144/255, 255/255, 0.6])\n", + " h, w = mask.shape[-2:]\n", + " mask_image = mask.reshape(h, w, 1) * color.reshape(1, 1, -1)\n", + " ax.imshow(mask_image)\n", + "\n", + "def show_points(coords, labels, ax, marker_size=375):\n", + " pos_points = coords[labels==1]\n", + " neg_points = coords[labels==0]\n", + " ax.scatter(pos_points[:, 0], pos_points[:, 1], color='green', marker='*', s=marker_size, edgecolor='white', linewidth=1.25)\n", + " ax.scatter(neg_points[:, 0], neg_points[:, 1], color='red', marker='*', s=marker_size, edgecolor='white', linewidth=1.25)\n", + "\n", + "def show_box(box, ax):\n", + " x0, y0 = box[0], box[1]\n", + " w, h = box[2] - box[0], box[3] - box[1]\n", + " ax.add_patch(plt.Rectangle((x0, y0), w, h, edgecolor='green', facecolor=(0,0,0,0), lw=2))\n" + ] + }, + { + "cell_type": "markdown", + "id": "23842fb2", + "metadata": { + "id": "23842fb2" + }, + "source": [ + "## Example image" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e30125fd", + "metadata": { + "scrolled": false, + "id": "e30125fd" + }, + "outputs": [], + "source": [ + "image = cv2.imread('images/truck.jpg')\n", + "image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n", + "print('image.shape', image.shape)\n", + "plt.figure(figsize=(10,10))\n", + "plt.imshow(image)\n", + "plt.axis('on')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "98b228b8", + "metadata": { + "id": "98b228b8" + }, + "source": [ + "## Selecting objects with SAM" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7e28150b", + "metadata": { + "id": "7e28150b" + }, + "outputs": [], + "source": [ + "import sys\n", + "from typing import Optional, Tuple\n", + "sys.path.append(\"..\")\n", + "from segment_anything import sam_model_registry, SamPredictor\n", + "\n", + "sam_checkpoint = \"sam_vit_b_01ec64.pth\"\n", + "model_type = \"vit_b\"\n", + "\n", + "device = \"cpu\"\n", + "\n", + "sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)\n", + "sam.to(device=device)\n", + "\n", + "class CustomSamPredictor(SamPredictor):\n", + " @torch.no_grad()\n", + " def set_torch_image(\n", + " self,\n", + " transformed_image,\n", + " original_image_size,\n", + " ) -> None:\n", + " assert (\n", + " len(transformed_image.shape) == 4\n", + " and transformed_image.shape[1] == 3\n", + " and max(*transformed_image.shape[2:]) == self.model.image_encoder.img_size\n", + " ), f\"set_torch_image input must be BCHW with long side {self.model.image_encoder.img_size}.\"\n", + " self.reset_image()\n", + "\n", + " self.original_size = original_image_size\n", + " self.input_size = tuple(transformed_image.shape[-2:])\n", + " input_image = self.model.preprocess(transformed_image)\n", + " self.features = self.model.image_encoder(input_image)\n", + " self.input_image = input_image\n", + " self.transformed_image = transformed_image\n", + " self.is_image_set = True\n", + "predictor = CustomSamPredictor(sam)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d95d48dd", + "metadata": { + "id": "d95d48dd" + }, + "outputs": [], + "source": [ + "predictor.set_image(image)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a91ba973", + "metadata": { + "id": "a91ba973" + }, + "outputs": [], + "source": [ + "input_point = np.array([[500, 375]])\n", + "input_label = np.array([1])\n", + "plt.figure(figsize=(10,10))\n", + "print('image.shape', image.shape)\n", + "print('image.max', image.max())\n", + "print('image.min', image.min())\n", + "plt.imshow(image)\n", + "show_points(input_point, input_label, plt.gca())\n", + "plt.axis('on')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5373fd68", + "metadata": { + "id": "5373fd68" + }, + "outputs": [], + "source": [ + "masks, scores, logits = predictor.predict(\n", + " point_coords=input_point,\n", + " point_labels=input_label,\n", + " multimask_output=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "source": [ + "print(scores)" + ], + "metadata": { + "id": "uGylQ3e7M4x9" + }, + "id": "uGylQ3e7M4x9", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from google.colab.patches import cv2_imshow\n", + "cv2_imshow((logits[0] > 0)*255)" + ], + "metadata": { + "id": "raEIajJlqHrw" + }, + "id": "raEIajJlqHrw", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e9c227a6", + "metadata": { + "scrolled": false, + "id": "e9c227a6" + }, + "outputs": [], + "source": [ + "for i, (mask, score) in enumerate(zip(masks, scores)):\n", + " plt.figure(figsize=(10,10))\n", + " plt.imshow(image)\n", + " show_mask(mask, plt.gca())\n", + " show_points(input_point, input_label, plt.gca())\n", + " plt.title(f\"Mask {i+1}, Score: {score:.3f}\", fontsize=18)\n", + " plt.axis('off')\n", + " plt.show()\n" + ] + }, + { + "cell_type": "code", + "source": [ + "logits[0]" + ], + "metadata": { + "id": "6IF5sz3hyU3x" + }, + "id": "6IF5sz3hyU3x", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "masks_2, scores_2, logits_2 = predictor.predict(\n", + " point_coords=input_point,\n", + " point_labels=input_label,\n", + " multimask_output=True,\n", + " mask_input=logits[:1]\n", + ")" + ], + "metadata": { + "id": "EdWv_O7iyJDJ" + }, + "id": "EdWv_O7iyJDJ", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "for i, (mask, score) in enumerate(zip(masks_2, scores_2)):\n", + " plt.figure(figsize=(10,10))\n", + " plt.imshow(image)\n", + " show_mask(mask, plt.gca())\n", + " show_points(input_point, input_label, plt.gca())\n", + " plt.title(f\"Mask {i+1}, Score: {score:.3f}\", fontsize=18)\n", + " plt.axis('off')\n", + " plt.show()\n" + ], + "metadata": { + "id": "U6D_aDQWyirk" + }, + "id": "U6D_aDQWyirk", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "cLeuzuRhyJFb" + }, + "id": "cLeuzuRhyJFb", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "VXSCO7HOyJIE" + }, + "id": "VXSCO7HOyJIE", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "xZ1s7iWexyuI" + }, + "id": "xZ1s7iWexyuI", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "PLEH1NWkxyw-" + }, + "id": "PLEH1NWkxyw-", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "state_dict = sam.state_dict()\n", + "print(sam)" + ], + "metadata": { + "id": "tDsO9UfitZvJ" + }, + "id": "tDsO9UfitZvJ", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from tabulate import tabulate\n", + "import copy\n", + "torch_weights = copy.deepcopy(sam.state_dict())\n", + "table = []\n", + "num_params = 0\n", + "for k in sorted(torch_weights):\n", + " if 'mask_downscaling' in k:\n", + " continue\n", + " v = torch_weights[k]\n", + " table.append((k, f'{v.shape}', f'{v.mean():.3f}', f'{v.std():.3f}'))\n", + " num_params += np.prod(np.asarray(v.shape))\n", + "table_str = tabulate(\n", + " table, tablefmt=\"pipe\", headers=[\"Names\", \"shape\", \"mean\", \"std\"])\n", + "print(table_str)\n", + "print('num_params', num_params)" + ], + "metadata": { + "id": "jc-2b4T9tdAJ" + }, + "id": "jc-2b4T9tdAJ", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "!pip install ml_collections" + ], + "metadata": { + "id": "FTRmOVneulcw" + }, + "id": "FTRmOVneulcw", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#@title Jax image-encoder\n", + "\"\"\"ViT with windows attention.\"\"\"\n", + "\n", + "import functools\n", + "from typing import Any, Optional\n", + "\n", + "import flax.linen as nn\n", + "import jax\n", + "import jax.numpy as jnp\n", + "\n", + "KERNEL_INIT = {\n", + " 'normal': nn.initializers.normal(stddev=0.02),\n", + "}\n", + "\n", + "\n", + "class HMAttention(nn.Module):\n", + " \"\"\"Multi-head Attention block with relative position embeddings.\n", + "\n", + " Attributes:\n", + " dim (int): Number of input channels.\n", + " num_heads (int): Number of attention heads.\n", + " qkv_bias (bool: If True, add a learnable bias to query, key, value.\n", + " beit_like_qkv_bias (bool): no bias for k.\n", + " use_rel_pos (bool): If True, add relative positional embeddings to the\n", + " attention map.\n", + " rel_pos_zero_init (bool): If True, zero initialize relative positional\n", + " parameters.\n", + " input_size (int or None): Input resolution for calculating the relative\n", + " positional parameter size.\n", + " \"\"\"\n", + " dim: int\n", + " num_heads: int = 8\n", + " qkv_bias: bool = True\n", + " beit_like_qkv_bias: bool = False\n", + " use_rel_pos: bool = False\n", + " rel_pos_zero_init: bool = True\n", + " input_size: Optional[Any] = None\n", + " kernel_init: str = 'normal'\n", + " dtype: jnp.dtype = jnp.float32\n", + "\n", + " def get_rel_pos(self, q_size, k_size, rel_pos):\n", + " \"\"\"Get relative positional embeddings.\n", + "\n", + " Args:\n", + " q_size (int): size of query q.\n", + " k_size (int): size of key k.\n", + " rel_pos (Tensor): relative position embeddings (L, C).\n", + " Returns:\n", + " Extracted positional embeddings according to relative positions.\n", + " \"\"\"\n", + " max_rel_dist = int(2 * max(q_size, k_size) - 1)\n", + " # Interpolate rel pos if needed.\n", + " if rel_pos.shape[0] != max_rel_dist:\n", + " # Interpolate rel pos.\n", + " rel_pos_resized = jax.image.resize(\n", + " rel_pos,\n", + " shape=(max_rel_dist, rel_pos.shape[1]),\n", + " method='linear',\n", + " )\n", + " else:\n", + " rel_pos_resized = rel_pos\n", + "\n", + " # Scale the coords with short length if shapes for q and k are different.\n", + " q_coords = jnp.arange(q_size)[:, None] * max(k_size / q_size, 1.0)\n", + " k_coords = jnp.arange(k_size)[None, :] * max(q_size / k_size, 1.0)\n", + " relative_coords = (q_coords - k_coords) + (k_size - 1) * max(\n", + " q_size / k_size, 1.0)\n", + " relative_coords = relative_coords.astype(jnp.int32).reshape(-1)\n", + " return rel_pos_resized[relative_coords].reshape(q_size, k_size, -1)\n", + "\n", + " def add_decomposed_rel_pos(\n", + " self, attn, q, rel_pos_h, rel_pos_w, q_size, k_size):\n", + " \"\"\"Calculate decomposed Relative Positional Embeddings from paper:`mvitv2`.\n", + "\n", + " Args:\n", + " attn (Tensor): attention map.\n", + " q (Tensor): query q in the attention layer with shape (B, q_h * q_w, C).\n", + " rel_pos_h (Tensor): relative position embeddings (Lh, C) for height axis.\n", + " rel_pos_w (Tensor): relative position embeddings (Lw, C) for width axis.\n", + " q_size (Tuple): spatial sequence size of query q with (q_h, q_w).\n", + " k_size (Tuple): spatial sequence size of key k with (k_h, k_w).\n", + " Returns:\n", + " attn (Tensor): attention map with added relative positional embeddings.\n", + " \"\"\"\n", + " q_h, q_w = q_size\n", + " k_h, k_w = k_size\n", + " rh = self.get_rel_pos(q_h, k_h, rel_pos_h)\n", + " rw = self.get_rel_pos(q_w, k_w, rel_pos_w)\n", + "\n", + " batch, _, dim = q.shape\n", + " r_q = q.reshape(batch, q_h, q_w, dim)\n", + " rel_h = jnp.einsum('bhwc,hkc->bhwk', r_q, rh)\n", + " rel_w = jnp.einsum('bhwc,wkc->bhwk', r_q, rw)\n", + "\n", + " attn = (\n", + " attn.reshape(batch, q_h, q_w, k_h, k_w) + rel_h[\n", + " :, :, :, :, None] + rel_w[:, :, :, None, :]\n", + " ).reshape(batch, q_h * q_w, k_h * k_w)\n", + "\n", + " return attn\n", + "\n", + " @nn.compact\n", + " def __call__(self, x):\n", + " batch, height, width, _ = x.shape\n", + " head_dim = self.dim // self.num_heads\n", + " if self.beit_like_qkv_bias:\n", + " q_bias = self.param(\n", + " 'q_bias', nn.initializers.zeros, (self.dim,))\n", + " v_bias = self.param(\n", + " 'v_bias', nn.initializers.zeros, (self.dim,))\n", + " k_bias = jnp.zeros((self.dim,), dtype=jnp.float32)\n", + " qkv_bias = jnp.concatenate([q_bias, k_bias, v_bias], axis=0)\n", + " qkv = nn.Dense(\n", + " self.dim * 3, use_bias=False, dtype=self.dtype,\n", + " kernel_init=KERNEL_INIT[self.kernel_init], name='qkv')(\n", + " x) # batch x height x width x 3dim\n", + " qkv = qkv + qkv_bias[None, None, None, :]\n", + " else:\n", + " qkv = nn.Dense(\n", + " self.dim * 3, use_bias=self.qkv_bias, dtype=self.dtype,\n", + " kernel_init=KERNEL_INIT[self.kernel_init], name='qkv')(\n", + " x) # batch x height x width x 3dim\n", + " qkv = qkv.reshape(batch, height * width, 3, self.num_heads, -1).transpose(\n", + " 2, 0, 3, 1, 4) # 3 x batch x num_heads x num_tokens x D\n", + " qkv = qkv.reshape(3, batch * self.num_heads, height * width, -1)\n", + " q, k, v = qkv[0], qkv[1], qkv[2] # [batch * num_heads, num_tokens, D]\n", + " attn = (q * (head_dim ** -0.5)) @ k.transpose(\n", + " 0, 2, 1) # [batch * num_heads, num_tokens, num_tokens]\n", + " if self.use_rel_pos:\n", + " rel_pos_h = self.param(\n", + " 'rel_pos_h', nn.initializers.zeros,\n", + " (2 * self.input_size[0] - 1, head_dim))\n", + " rel_pos_w = self.param(\n", + " 'rel_pos_w', nn.initializers.zeros,\n", + " (2 * self.input_size[0] - 1, head_dim))\n", + " attn = self.add_decomposed_rel_pos(\n", + " attn, q, rel_pos_h, rel_pos_w,\n", + " (height, width), (height, width))\n", + " attn = jax.nn.softmax(attn)\n", + " x = (attn @ v).reshape(batch, self.num_heads, height, width, -1).transpose(\n", + " 0, 2, 3, 1, 4).reshape(batch, height, width, -1)\n", + " x = nn.Dense(\n", + " self.dim, dtype=self.dtype, kernel_init=KERNEL_INIT[self.kernel_init],\n", + " name='proj')(x)\n", + " return x\n", + "\n", + "\n", + "class Mlp(nn.Module):\n", + " \"\"\"Multilayer perceptron.\"\"\"\n", + "\n", + " hidden_features: int\n", + " out_features: int\n", + " kernel_init: str = 'normal'\n", + " dtype: jnp.dtype = jnp.float32\n", + "\n", + " @nn.compact\n", + " def __call__(self, x):\n", + " x = nn.Dense(\n", + " self.hidden_features, dtype=self.dtype,\n", + " kernel_init=KERNEL_INIT[self.kernel_init], name='lin1')(x)\n", + " x = nn.gelu(x, approximate=False)\n", + " x = nn.Dense(\n", + " self.out_features, dtype=self.dtype,\n", + " kernel_init=KERNEL_INIT[self.kernel_init], name='lin2')(x)\n", + " return x\n", + "\n", + "\n", + "class Block(nn.Module):\n", + " \"\"\"Transformer blocks with support of window attention and residual blocks.\n", + "\n", + " Attributes:\n", + " dim (int): Number of input channels.\n", + " num_heads (int): Number of attention heads in each ViT block.\n", + " mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.\n", + " qkv_bias (bool): If True, add a learnable bias to query, key, value.\n", + " beit_like_qkv_bias (bool): no bias for k.\n", + " drop_path (float): Stochastic depth rate.\n", + " use_rel_pos (bool): If True, add relative positional embeddings to the\n", + " attention map.\n", + " rel_pos_zero_init (bool): If True, zero initialize relative positional\n", + " parameters.\n", + " window_size (int): Window size for window attention blocks. If it equals 0,\n", + " then not use window attention.\n", + " input_size (int or None): Input resolution for calculating the relative\n", + " positional parameter size.\n", + " \"\"\"\n", + " dim: int\n", + " num_heads: int\n", + " mlp_ratio: float = 4.0\n", + " qkv_bias: bool = True\n", + " beit_like_qkv_bias: bool = False\n", + " drop_path: float = 0.0\n", + " use_rel_pos: bool = False\n", + " rel_pos_zero_init: bool = True\n", + " window_size: int = 0\n", + " input_size: Optional[Any] = None\n", + " kernel_init: str = 'normal'\n", + " layer_scale_init_value: float = -1.0\n", + " dtype: jnp.dtype = jnp.float32\n", + "\n", + " def window_partition(self, x):\n", + " \"\"\"Partition into non-overlapping windows with padding if needed.\n", + "\n", + " Args:\n", + " x (array): input tokens with [B, H, W, C].\n", + " Returns:\n", + " windows: windows after partition with [B * num_windows, window_size,\n", + " window_size, C].\n", + " (Hp, Wp): padded height and width before partition\n", + " \"\"\"\n", + " batch, h, w, c = x.shape\n", + "\n", + " pad_h = (self.window_size - h % self.window_size) % self.window_size\n", + " pad_w = (self.window_size - w % self.window_size) % self.window_size\n", + " if pad_h > 0 or pad_w > 0:\n", + " x = jnp.pad(\n", + " x, ((0, 0), (0, pad_w), (0, pad_h), (0, 0)),\n", + " 'constant', constant_values=0)\n", + " hp, wp = h + pad_h, w + pad_w\n", + "\n", + " x = x.reshape(\n", + " batch, hp // self.window_size, self.window_size,\n", + " wp // self.window_size, self.window_size, c)\n", + " windows = x.transpose(0, 1, 3, 2, 4, 5).reshape(\n", + " -1, self.window_size, self.window_size, c)\n", + " return windows, (hp, wp)\n", + "\n", + " def window_unpartition(self, windows, pad_hw, hw):\n", + " \"\"\"Window unpartition into original sequences and removing padding.\n", + "\n", + " Args:\n", + " windows (array): inputs: [B * num_windows, window_size, window_size, C].\n", + " pad_hw (Tuple): padded height and width (Hp, Wp).\n", + " hw (Tuple): original height and width (H, W) before padding.\n", + "\n", + " Returns:\n", + " x: unpartitioned sequences with [B, H, W, C].\n", + " \"\"\"\n", + " hp, wp = pad_hw\n", + " h, w = hw\n", + " batch = windows.shape[0] // (\n", + " hp * wp // self.window_size // self.window_size)\n", + " x = windows.reshape(\n", + " batch,\n", + " hp // self.window_size, wp // self.window_size,\n", + " self.window_size, self.window_size, -1)\n", + " x = x.transpose(0, 1, 3, 2, 4, 5).reshape(batch, hp, wp, -1)\n", + " if hp > h or wp > w:\n", + " x = x[:, :h, :w, :]\n", + " return x\n", + "\n", + " def get_keep_pattern(self,\n", + " x: jnp.ndarray,\n", + " deterministic: bool):\n", + " \"\"\"DropPath Layer.\"\"\"\n", + " if not deterministic and self.drop_path:\n", + " shape = (x.shape[0],) + (1,) * (x.ndim - 1)\n", + " drop_pattern = jax.random.bernoulli(\n", + " self.make_rng('dropout'), self.drop_path, shape).astype(self.dtype)\n", + " keep_pattern = (1. - drop_pattern)\n", + " if self.drop_path < 1.:\n", + " keep_pattern = keep_pattern / (1. - self.drop_path)\n", + " return keep_pattern\n", + " else:\n", + " return 1.0\n", + "\n", + " @nn.compact\n", + " def __call__(self, x, train=False):\n", + " shortcut = x\n", + " ln = functools.partial(nn.LayerNorm, epsilon=1e-6, dtype=self.dtype)\n", + " x = ln(name='norm1')(x)\n", + " # Window partition\n", + " if self.window_size > 0:\n", + " h, w = x.shape[1], x.shape[2]\n", + " x, pad_hw = self.window_partition(x)\n", + "\n", + " x = HMAttention(\n", + " self.dim,\n", + " num_heads=self.num_heads,\n", + " qkv_bias=self.qkv_bias,\n", + " beit_like_qkv_bias=self.beit_like_qkv_bias,\n", + " use_rel_pos=self.use_rel_pos,\n", + " rel_pos_zero_init=self.rel_pos_zero_init,\n", + " input_size=self.input_size if self.window_size == 0 else (\n", + " self.window_size, self.window_size),\n", + " kernel_init=self.kernel_init,\n", + " dtype=self.dtype,\n", + " name='attn')(x)\n", + " # Reverse window partition\n", + " if self.window_size > 0:\n", + " x = self.window_unpartition(x, pad_hw, (h, w))\n", + "\n", + " if self.layer_scale_init_value > 0:\n", + " gamma_1 = self.param(\n", + " 'gamma_1',\n", + " nn.initializers.constant(self.layer_scale_init_value),\n", + " (self.dim))\n", + " x = x * gamma_1[..., :]\n", + " x = shortcut + self.get_keep_pattern(x, not train) * x\n", + " y = ln(name='norm2')(x)\n", + " y = Mlp(\n", + " int(self.dim * self.mlp_ratio),\n", + " self.dim,\n", + " kernel_init=self.kernel_init,\n", + " dtype=self.dtype,\n", + " name='mlp')(y)\n", + " if self.layer_scale_init_value > 0:\n", + " gamma_2 = self.param(\n", + " 'gamma_2',\n", + " nn.initializers.constant(self.layer_scale_init_value),\n", + " (self.dim))\n", + " y = y * gamma_2[..., :]\n", + " x = x + self.get_keep_pattern(y, not train) * y\n", + " return x\n", + "\n", + "\n", + "class Neck(nn.Module):\n", + " \"\"\"Sam convolutional neck blocks.\"\"\"\n", + " out_chans: int = 768\n", + " dtype: jnp.dtype = jnp.float32\n", + "\n", + " @nn.compact\n", + " def __call__(self, x):\n", + " \"\"\"Forward pass.\n", + "\n", + " Args:\n", + " x: (batch_size, height, width, dim)\n", + " Returns:\n", + " x: (batch_size, height, width, dim)\n", + " \"\"\"\n", + " x = nn.Conv(\n", + " self.out_chans,\n", + " (1, 1),\n", + " strides=(1, 1),\n", + " padding='VALID',\n", + " use_bias=False,\n", + " dtype=self.dtype,\n", + " name='0')(x)\n", + " x = nn.LayerNorm(name='1')(x)\n", + " x = nn.Conv(\n", + " self.out_chans,\n", + " (3, 3),\n", + " strides=(1, 1),\n", + " padding=[(1, 1), (1, 1)],\n", + " use_bias=False,\n", + " dtype=self.dtype,\n", + " name='2')(x)\n", + " x = nn.LayerNorm(name='3')(x)\n", + " return x\n", + "\n", + "\n", + "class ImageEncoderViT(nn.Module):\n", + " \"\"\"This ViT model in Sam.\n", + "\n", + " TODO(zhouxy): check difference from ViTDet:\n", + " - neck block after transformers\n", + " - no droppath (inference only?).\n", + "\n", + " Attributes:\n", + " img_size (int): Input image size.\n", + " patch_size (int): Patch size.\n", + " in_chans (int): Number of input image channels.\n", + " embed_dim (int): Patch embedding dimension.\n", + " depth (int): Depth of ViT.\n", + " num_heads (int): Number of attention heads in each ViT block.\n", + " mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.\n", + " out_chans (int): output channals\n", + " qkv_bias (bool): If True, add a learnable bias to query, key, value.\n", + " beit_like_qkv_bias (bool): no bias for k.\n", + " drop_path_rate (float): Stochastic depth rate.\n", + " use_abs_pos (bool): If True, use absolute positional embeddings.\n", + " use_rel_pos (bool): If True, add relative positional embeddings to the\n", + " attention map.\n", + " rel_pos_zero_init (bool): If True, zero initialize relative positional\n", + " parameters.\n", + " window_size (int): Window size for window attention blocks.\n", + " window_block_indexes (list): Indexes for blocks using window attention.\n", + " pretrain_img_size (int): input image size for pretraining models.\n", + " \"\"\"\n", + " img_size: int = 1024\n", + " patch_size: int = 16\n", + " in_chans: int = 3\n", + " embed_dim: int = 768\n", + " depth: int = 12\n", + " num_heads: int = 12\n", + " mlp_ratio: float = 4.0\n", + " out_chans: int = 256\n", + " qkv_bias: bool = True\n", + " beit_like_qkv_bias: bool = False\n", + " drop_path_rate: float = 0.1\n", + " use_abs_pos: bool = True\n", + " use_rel_pos: bool = True\n", + " rel_pos_zero_init: bool = True\n", + " window_size: int = 14\n", + " window_block_indexes: Any = (0, 1, 3, 4, 6, 7, 9, 10)\n", + " pretrain_img_size: int = 224\n", + " kernel_init: str = 'normal'\n", + " layer_scale_init_value: float = -1.0\n", + " freeze_vit_layer: int = -1\n", + " use_ln_pre: bool = False\n", + " dtype: jnp.dtype = jnp.float32\n", + "\n", + " @nn.compact\n", + " def __call__(self,\n", + " x: jnp.ndarray,\n", + " train: bool = False,):\n", + " \"\"\"Forward vit.\n", + "\n", + " Args:\n", + " x: (batch_size, H, W, 3)\n", + " train: bool\n", + " Returns:\n", + " x: (batch_size, H // patch_size, W // patch_size, embed_dim)\n", + " \"\"\"\n", + " x = nn.Conv(\n", + " self.embed_dim, (self.patch_size, self.patch_size),\n", + " strides=(self.patch_size, self.patch_size),\n", + " padding='VALID',\n", + " dtype=self.dtype,\n", + " name='patch_embed.proj')(x)\n", + " if self.use_abs_pos:\n", + " pos_embed = self.param(\n", + " 'pos_embed', nn.initializers.zeros,\n", + " (1, self.img_size // self.patch_size,\n", + " self.img_size // self.patch_size, self.embed_dim))\n", + " x = x + pos_embed\n", + " dp_rates = [\n", + " self.drop_path_rate * i / (self.depth - 1) for i in range(self.depth)]\n", + " if self.use_ln_pre:\n", + " x = nn.LayerNorm(name='ln_pre')(x)\n", + "\n", + " for i in range(self.depth):\n", + " x = Block(\n", + " dim=self.embed_dim,\n", + " num_heads=self.num_heads,\n", + " mlp_ratio=self.mlp_ratio,\n", + " qkv_bias=self.qkv_bias,\n", + " beit_like_qkv_bias=self.beit_like_qkv_bias,\n", + " drop_path=dp_rates[i],\n", + " use_rel_pos=self.use_rel_pos,\n", + " rel_pos_zero_init=self.rel_pos_zero_init,\n", + " window_size=self.window_size if i in self.window_block_indexes else 0,\n", + " input_size=(\n", + " self.img_size // self.patch_size,\n", + " self.img_size // self.patch_size),\n", + " kernel_init=self.kernel_init,\n", + " dtype=self.dtype,\n", + " layer_scale_init_value=self.layer_scale_init_value,\n", + " name=f'blocks.{i}',\n", + " )(x, train=train)\n", + " if i + 1 < self.freeze_vit_layer:\n", + " x = jax.lax.stop_gradient(x)\n", + "\n", + " x = Neck(out_chans=self.out_chans, name='neck')(x)\n", + " return x\n" + ], + "metadata": { + "id": "Gqwh6j3YuMll", + "cellView": "form" + }, + "id": "Gqwh6j3YuMll", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#@title Jax transformer\n", + "\"\"\"Sam transformer for running cross-attention.\"\"\"\n", + "\n", + "import math\n", + "from typing import Any\n", + "\n", + "import flax.linen as nn\n", + "import jax.numpy as jnp\n", + "\n", + "\n", + "class TwoWayTransformer(nn.Module):\n", + " \"\"\"Transformer with query and key/ value inputs.\"\"\"\n", + "\n", + " depth: int = 2\n", + " embedding_dim: int = 256\n", + " num_heads: int = 8\n", + " mlp_dim: int = 2048\n", + " activation: Any = nn.relu\n", + " attention_downsample_rate: int = 2\n", + "\n", + " def setup(self):\n", + " layers = []\n", + " for i in range(self.depth):\n", + " layer = TwoWayAttentionBlock(\n", + " embedding_dim=self.embedding_dim,\n", + " num_heads=self.num_heads,\n", + " mlp_dim=self.mlp_dim,\n", + " activation=self.activation,\n", + " attention_downsample_rate=self.attention_downsample_rate,\n", + " skip_first_layer_pe=(i == 0),\n", + " name=f'layers.{i}')\n", + " layers.append(layer)\n", + " self.layers = layers\n", + "\n", + " self.final_attn_token_to_image = Attention(\n", + " self.embedding_dim, self.num_heads, self.attention_downsample_rate,\n", + " name='final_attn_token_to_image')\n", + " self.norm_final_attn = nn.LayerNorm(epsilon=1e-5, name='norm_final_attn')\n", + "\n", + " def __call__(self, image_embedding, image_pe, point_embedding):\n", + " \"\"\"Forward pass.\n", + "\n", + " Args:\n", + " image_embedding: (batch_size, h, w, embedding_dim)\n", + " image_pe: (batch_size, h, w, embedding_dim)\n", + " point_embedding: (batch_size, num_points, embedding_dim)\n", + " Returns:\n", + " \"\"\"\n", + " batch_size, c = image_embedding.shape[0], image_embedding.shape[3]\n", + " image_embedding = image_embedding.reshape((batch_size, -1, c))\n", + " image_pe = image_pe.reshape((batch_size, -1, c))\n", + "\n", + " # Prepare queries\n", + " queries = point_embedding\n", + " keys = image_embedding\n", + "\n", + " # Apply transformer blocks and final layernorm\n", + " for layer in self.layers:\n", + " queries, keys = layer(\n", + " queries=queries,\n", + " keys=keys,\n", + " query_pe=point_embedding,\n", + " key_pe=image_pe,\n", + " )\n", + "\n", + " # Apply the final attention layer from the points to the image\n", + " q = queries + point_embedding\n", + " k = keys + image_pe\n", + " attn_out = self.final_attn_token_to_image(q=q, k=k, v=keys)\n", + " queries = queries + attn_out\n", + " queries = self.norm_final_attn(queries)\n", + "\n", + " return queries, keys\n", + "\n", + "\n", + "class TwoWayAttentionBlock(nn.Module):\n", + " \"\"\"Transformer block.\"\"\"\n", + "\n", + " embedding_dim: int\n", + " num_heads: int\n", + " mlp_dim: int = 2048\n", + " activation: Any = nn.relu\n", + " attention_downsample_rate: int = 2\n", + " skip_first_layer_pe: bool = False\n", + "\n", + " def setup(self):\n", + " self.self_attn = Attention(\n", + " self.embedding_dim, self.num_heads, name='self_attn')\n", + " self.norm1 = nn.LayerNorm(epsilon=1e-5, name='norm1')\n", + "\n", + " self.cross_attn_token_to_image = Attention(\n", + " self.embedding_dim, self.num_heads, self.attention_downsample_rate,\n", + " name='cross_attn_token_to_image')\n", + " self.norm2 = nn.LayerNorm(epsilon=1e-5, name='norm2')\n", + "\n", + " self.mlp = MLPBlock(\n", + " self.embedding_dim, self.mlp_dim, self.activation,\n", + " name='mlp')\n", + " self.norm3 = nn.LayerNorm(epsilon=1e-5, name='norm3')\n", + "\n", + " self.norm4 = nn.LayerNorm(epsilon=1e-5, name='norm4')\n", + " self.cross_attn_image_to_token = Attention(\n", + " self.embedding_dim, self.num_heads, self.attention_downsample_rate,\n", + " name='cross_attn_image_to_token')\n", + "\n", + " def __call__(self, queries, keys, query_pe, key_pe):\n", + " \"\"\"Forward two-way attention block.\n", + "\n", + " Args:\n", + " queries: (batch_size, query_tokens, embedding_dim)\n", + " keys: (batch_size, key_tokens, embedding_dim)\n", + " query_pe: (batch_size, query_tokens, embedding_dim)\n", + " key_pe: (batch_size, key_tokens, embedding_dim)\n", + " Returns:\n", + " queries: (batch_size, query_tokens, embedding_dim)\n", + " keys: (batch_size, key_tokens, embedding_dim)\n", + " \"\"\"\n", + " # Self attention block\n", + " if self.skip_first_layer_pe:\n", + " queries = self.self_attn(q=queries, k=queries, v=queries)\n", + " else:\n", + " q = queries + query_pe\n", + " attn_out = self.self_attn(q=q, k=q, v=queries)\n", + " queries = queries + attn_out\n", + " queries = self.norm1(queries)\n", + "\n", + " # Cross attention block, tokens attending to image embedding\n", + " q = queries + query_pe\n", + " k = keys + key_pe\n", + " attn_out = self.cross_attn_token_to_image(q=q, k=k, v=keys)\n", + " queries = queries + attn_out\n", + " queries = self.norm2(queries)\n", + "\n", + " # MLP block\n", + " mlp_out = self.mlp(queries)\n", + " queries = queries + mlp_out\n", + " queries = self.norm3(queries)\n", + "\n", + " # Cross attention block, image embedding attending to tokens\n", + " q = queries + query_pe\n", + " k = keys + key_pe\n", + " attn_out = self.cross_attn_image_to_token(q=k, k=q, v=queries)\n", + " keys = keys + attn_out\n", + " keys = self.norm4(keys)\n", + "\n", + " return queries, keys\n", + "\n", + "\n", + "class Attention(nn.Module):\n", + " \"\"\"Attention module.\"\"\"\n", + " embedding_dim: int\n", + " num_heads: int\n", + " downsample_rate: int = 1\n", + "\n", + " def setup(self):\n", + " self.internal_dim = self.embedding_dim // self.downsample_rate\n", + " assert self.internal_dim % self.num_heads == 0, (\n", + " 'num_heads must divide embedding_dim.')\n", + "\n", + " self.q_proj = nn.Dense(self.internal_dim, name='q_proj')\n", + " self.k_proj = nn.Dense(self.internal_dim, name='k_proj')\n", + " self.v_proj = nn.Dense(self.internal_dim, name='v_proj')\n", + " self.out_proj = nn.Dense(self.embedding_dim, name='out_proj')\n", + "\n", + " def _separate_heads(self, x):\n", + " b, n, c = x.shape\n", + " x = x.reshape(b, n, self.num_heads, c // self.num_heads)\n", + " return x.transpose((0, 2, 1, 3)) # B x N_heads x N_tokens x C_per_head\n", + "\n", + " def _recombine_heads(self, x):\n", + " b, n_heads, n_tokens, c_per_head = x.shape\n", + " x = x.transpose((0, 2, 1, 3))\n", + " return x.reshape(b, n_tokens, n_heads * c_per_head) # B x N_tokens x C\n", + "\n", + " def __call__(self, q, k, v):\n", + " \"\"\"Forward attention module.\n", + "\n", + " Args:\n", + " q: (batch_size, query_tokens, embedding_dim)\n", + " k: (batch_size, key_tokens, embedding_dim)\n", + " v: (batch_size, key_tokens, embedding_dim)\n", + " Returns:\n", + " out: (batch_size, query_tokens, embedding_dim)\n", + " \"\"\"\n", + " # Input projections\n", + " q = self.q_proj(q)\n", + " k = self.k_proj(k)\n", + " v = self.v_proj(v)\n", + "\n", + " # Separate into heads\n", + " q = self._separate_heads(q) # (batch_size, num_heads, n, c_per_head)\n", + " k = self._separate_heads(k) # (batch_size, num_heads, m, c_per_head)\n", + " v = self._separate_heads(v) # (batch_size, num_heads, m, c_per_head)\n", + "\n", + " # Attention\n", + " _, _, _, c_per_head = q.shape\n", + " attn = jnp.matmul(\n", + " q, k.transpose((0, 1, 3, 2))) # B x N_heads x N_tokens x N_tokens\n", + " attn = attn / math.sqrt(c_per_head)\n", + " attn = nn.softmax(attn, axis=-1)\n", + "\n", + " # Get output\n", + " out = jnp.matmul(attn, v)\n", + " out = self._recombine_heads(out)\n", + " out = self.out_proj(out)\n", + "\n", + " return out\n", + "\n", + "\n", + "class MLPBlock(nn.Module):\n", + " embedding_dim: int\n", + " mlp_dim: int\n", + " activation: Any = nn.relu\n", + "\n", + " @nn.compact\n", + " def __call__(self, x):\n", + " x = nn.Dense(self.mlp_dim, name='lin1')(x)\n", + " x = self.activation(x)\n", + " x = nn.Dense(self.embedding_dim, name='lin2')(x)\n", + " return x\n" + ], + "metadata": { + "id": "mTlFjcegtvXo", + "cellView": "form" + }, + "id": "mTlFjcegtvXo", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#@title Jax mask decoder.\n", + "r\"\"\"Sam mask decoder.\n", + "\n", + "Pytorch reference:\n", + "\n", + "https://github.com/facebookresearch/segment-anything/blob/HEAD/\\\n", + "segment_anything/modeling/mask_decoder.py\n", + "\n", + "\"\"\"\n", + "\n", + "import flax.linen as nn\n", + "import jax.numpy as jnp\n", + "# from scenic.projects.segment_anything.modeling import transformer\n", + "\n", + "\n", + "class MaskDecoder(nn.Module):\n", + " \"\"\"Sam mask decoder.\"\"\"\n", + "\n", + " transformer_dim: int = 256\n", + " num_multimask_outputs: int = 3\n", + " iou_head_depth: int = 3\n", + " iou_head_hidden_dim: int = 256\n", + "\n", + " def setup(self):\n", + " self.iou_token = self.param(\n", + " 'iou_token.weight',\n", + " nn.initializers.normal(stddev=1.),\n", + " (1, self.transformer_dim))\n", + " self.mask_tokens = self.param(\n", + " 'mask_tokens.weight',\n", + " nn.initializers.normal(stddev=1.),\n", + " (self.num_multimask_outputs + 1, self.transformer_dim))\n", + " self.output_upscaling = OutputScaling(\n", + " transformer_dim=self.transformer_dim, name='output_upscaling')\n", + "\n", + " self.output_hypernework_mlps = [\n", + " MLP(hidden_dim=self.iou_head_hidden_dim,\n", + " output_dim=self.transformer_dim // 8, num_layers=3,\n", + " name=f'output_hypernetworks_mlps.{i}',\n", + " ) for i in range(self.num_multimask_outputs + 1)]\n", + "\n", + " self.iou_prediction_head = MLP(\n", + " hidden_dim=self.iou_head_hidden_dim,\n", + " output_dim=self.num_multimask_outputs + 1,\n", + " num_layers=self.iou_head_depth,\n", + " name='iou_prediction_head')\n", + "\n", + " self.transformer = TwoWayTransformer(name='transformer')\n", + "\n", + " def predict_masks(\n", + " self, image_embeddings, image_pe,\n", + " sparse_prompt_embeddings, dense_prompt_embeddings):\n", + " \"\"\"Predict masks for a single image.\n", + "\n", + " Args:\n", + " image_embeddings: (H, W, embed_dim)\n", + " image_pe: (H, W, embed_dim)\n", + " sparse_prompt_embeddings: (num_prompts, num_points, embed_dim)\n", + " dense_prompt_embeddings: (num_prompts, H, W, embed_dim)\n", + " Returns:\n", + " masks: (num_prompts, num_multimask_outputs + 1, h', w')\n", + " iou_pred: (num_prompts, num_multimask_outputs + 1)\n", + " \"\"\"\n", + " output_tokens = jnp.concatenate(\n", + " [self.iou_token, self.mask_tokens],\n", + " axis=0) # (num_multimask_outputs + 2, transformer_dim)\n", + " num_prompts = sparse_prompt_embeddings.shape[0]\n", + " output_tokens = jnp.broadcast_to(\n", + " output_tokens[None],\n", + " (num_prompts, self.num_multimask_outputs + 2, self.transformer_dim))\n", + " tokens = jnp.concatenate(\n", + " [output_tokens, sparse_prompt_embeddings], axis=1,\n", + " ) # (num_prompts, num_multimask_outputs + 2 + num_points, embed_dim)\n", + "\n", + " src = jnp.repeat(\n", + " image_embeddings[None], tokens.shape[0],\n", + " axis=0) # (num_prompts, H, W, D)\n", + " src = src + dense_prompt_embeddings\n", + " pos_src = jnp.repeat(\n", + " image_pe[None], tokens.shape[0], axis=0) # (num_prompts, H, W, D)\n", + " num_prompts, h, w, d = src.shape\n", + "\n", + " hs, src = self.transformer(src, pos_src, tokens)\n", + " iou_token_out = hs[:, 0, :]\n", + " mask_tokens_out = hs[:, 1: (1 + self.num_multimask_outputs + 1), :]\n", + "\n", + " src = src.reshape(num_prompts, h, w, d)\n", + " upscaled_embedding = self.output_upscaling(src) # (num_prompts, h', w', d)\n", + " hyper_in_list = []\n", + " for i in range(self.num_multimask_outputs + 1):\n", + " hyper_in_list.append(\n", + " self.output_hypernework_mlps[i](\n", + " mask_tokens_out[:, i, :]) # (num_prompts, d)\n", + " )\n", + " hyper_in = jnp.stack(hyper_in_list, axis=1) # (num_prompts, num_masks, d)\n", + " num_prompts, h, w, d = upscaled_embedding.shape\n", + " masks = hyper_in @ upscaled_embedding.reshape(\n", + " num_prompts, h * w, d).transpose(\n", + " 0, 2, 1) # (num_prompts, num_masks, h'w')\n", + " masks = masks.reshape(num_prompts, self.num_multimask_outputs + 1, h, w)\n", + "\n", + " iou_pred = self.iou_prediction_head(iou_token_out)\n", + " return masks, iou_pred\n", + "\n", + " @nn.compact\n", + " def __call__(\n", + " self, image_embeddings, image_pe,\n", + " sparse_prompt_embeddings, dense_prompt_embeddings,\n", + " multimask_output: bool = True):\n", + " \"\"\"Forward model for a single image.\n", + "\n", + " Args:\n", + " image_embeddings: (H, W, 3)\n", + " image_pe: (H, W, D)\n", + " sparse_prompt_embeddings: (num_prompts, num_points, embed_dim)\n", + " dense_prompt_embeddings: (num_prompts, H, W, embed_dim)\n", + " multimask_output: bool\n", + " Returns:\n", + " masks: (num_prompts, num_multimask_outputs, h', w'),\n", + " num_multimask_outputs = 3 if multimask_output is True, otherwise 1.\n", + " iou_pred: (num_prompts, num_multimask_outputs)\n", + " \"\"\"\n", + " masks, iou_pred = self.predict_masks(\n", + " image_embeddings=image_embeddings,\n", + " image_pe=image_pe,\n", + " sparse_prompt_embeddings=sparse_prompt_embeddings,\n", + " dense_prompt_embeddings=dense_prompt_embeddings,\n", + " )\n", + " if multimask_output:\n", + " return masks[:, 1:], iou_pred[:, 1:]\n", + " else:\n", + " return masks[:, :1], iou_pred[:, :1]\n", + "\n", + "\n", + "class MLP(nn.Module):\n", + " hidden_dim: int\n", + " output_dim: int\n", + " num_layers: int\n", + "\n", + " @nn.compact\n", + " def __call__(self, x):\n", + " for i in range(self.num_layers - 1):\n", + " x = nn.Dense(self.hidden_dim, name=f'layers.{i}')(x)\n", + " x = nn.relu(x)\n", + " x = nn.Dense(self.output_dim, name=f'layers.{self.num_layers - 1}')(x)\n", + " return x\n", + "\n", + "\n", + "class OutputScaling(nn.Module):\n", + " \"\"\"Output scaling.\"\"\"\n", + " transformer_dim: int\n", + "\n", + " @nn.compact\n", + " def __call__(self, x):\n", + " x = nn.ConvTranspose(\n", + " self.transformer_dim // 4, kernel_size=(2, 2), strides=(2, 2),\n", + " transpose_kernel=True,\n", + " name='0')(x)\n", + " x = nn.LayerNorm(name='1')(x)\n", + " x = nn.gelu(x, approximate=False)\n", + " x = nn.ConvTranspose(\n", + " self.transformer_dim // 8, kernel_size=(2, 2), strides=(2, 2),\n", + " transpose_kernel=True,\n", + " name='3')(x)\n", + " x = nn.gelu(x, approximate=False)\n", + " return x\n" + ], + "metadata": { + "id": "MkaZQaGyuItk" + }, + "id": "MkaZQaGyuItk", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#@title Jax prompt-encoder\n", + "r\"\"\"Sam prompt encoder.\n", + "\n", + "Pytorch reference:\n", + "\n", + "https://github.com/facebookresearch/segment-anything/blob/HEAD/\\\n", + "segment_anything/modeling/prompt_encoder.py\n", + "\n", + "\"\"\"\n", + "\n", + "from typing import Optional, Tuple\n", + "\n", + "import flax.linen as nn\n", + "import jax\n", + "import jax.numpy as jnp\n", + "\n", + "\n", + "class PromptEncoder(nn.Module):\n", + " \"\"\"Sam prompt encoder for points and boxes.\"\"\"\n", + "\n", + " embed_dim: int = 256\n", + " image_embedding_size: Tuple[int, int] = (1024 // 16, 1024 // 16)\n", + " input_image_size: Tuple[int, int] = (1024, 1024)\n", + " num_point_embeddings: int = 4 # pos/neg point + 2 box corners\n", + " mask_in_chans: int = 16\n", + "\n", + " def setup(self):\n", + " self.pe_layer = PositionEmbeddingRandom(\n", + " self.embed_dim // 2, name='pe_layer')\n", + " point_embeddings = []\n", + " # TODO(zhouxy): check if `nn.initializers.normal(stddev=1.)` is the same as\n", + " # pytorch nn.Embedding default initialization.\n", + " for i in range(self.num_point_embeddings):\n", + " point_embeddings.append(self.param(\n", + " f'point_embeddings.{i}.weight',\n", + " nn.initializers.normal(stddev=1.),\n", + " (1, self.embed_dim)))\n", + " self.point_embeddings = point_embeddings\n", + " del point_embeddings\n", + " self.not_a_point_embed = self.param(\n", + " 'not_a_point_embed.weight',\n", + " nn.initializers.normal(stddev=1.),\n", + " (1, self.embed_dim))\n", + " self.no_mask_embed = self.param(\n", + " 'no_mask_embed.weight',\n", + " nn.initializers.normal(stddev=1.),\n", + " (1, self.embed_dim))\n", + " self.mask_downscaling = MaskDownScaling(\n", + " mask_in_chans=self.mask_in_chans, embed_dim=self.embed_dim,\n", + " name='mask_downscaling')\n", + "\n", + " def get_dense_pe(self):\n", + " return self.pe_layer(self.image_embedding_size)\n", + "\n", + " def _embed_points(self, points, labels, pad):\n", + " \"\"\"Embed points.\n", + "\n", + " Args:\n", + " points: (num_prompts, num_points, 2). In absolute coordinates.\n", + " labels: (num_prompts, num_points)\n", + " pad: bool\n", + " Returns:\n", + " point_embeddings: (num_prompts, num_points, embed_dim)\n", + " \"\"\"\n", + " # Shift to center of pixel following:\n", + " # https://github.com/facebookresearch/segment-anything/blob/main/\\\n", + " # segment_anything/modeling/prompt_encoder.py#L80\n", + " points = points + 0.5\n", + " if pad:\n", + " padding_point = jnp.zeros((points.shape[0], 1, 2), dtype=jnp.float32)\n", + " padding_label = - jnp.ones((labels.shape[0], 1), dtype=jnp.float32)\n", + " points = jnp.concatenate([points, padding_point], axis=1)\n", + " labels = jnp.concatenate([labels, padding_label], axis=1)\n", + " point_embedding = self.pe_layer.forward_with_coords(\n", + " points, self.input_image_size) # (num_prompts, num_points, embed_dim)\n", + " ignored_points = labels[..., None] == -1 # (num_prompts, num_points, 1)\n", + " point_embedding = point_embedding * (1 - ignored_points) + (\n", + " self.not_a_point_embed[None] * ignored_points)\n", + " neg_points = labels[..., None] == 0 # (num_prompts, num_points, 1)\n", + " point_embedding += neg_points * self.point_embeddings[0][None]\n", + " pos_points = labels[..., None] == 1 # (num_prompts, num_points, 1)\n", + " point_embedding += pos_points * self.point_embeddings[1][None]\n", + " return point_embedding\n", + "\n", + " def _embed_boxes(self, boxes):\n", + " boxes = boxes + 0.5\n", + " coords = boxes.reshape(-1, 2, 2)\n", + " corner_embedding = self.pe_layer.forward_with_coords(\n", + " coords, self.input_image_size) # (num_prompts, 2, embed_dim)\n", + " lt_emb = corner_embedding[:, 0, :] + self.point_embeddings[2]\n", + " rb_emb = corner_embedding[:, 1, :] + self.point_embeddings[3]\n", + " corner_embedding = jnp.stack(\n", + " [lt_emb, rb_emb], axis=1) # (num_prompts, 2, embed_dim)\n", + " return corner_embedding\n", + "\n", + " def _embed_masks(self, masks):\n", + " mask_embedding = self.mask_downscaling(masks)\n", + " return mask_embedding\n", + "\n", + " @nn.compact\n", + " def __call__(self, points, point_labels, boxes=None, masks=None):\n", + " \"\"\"Forward pass. Currently only supports points prompt.\n", + "\n", + " Args:\n", + " points: (num_prompts, num_points, 2)\n", + " point_labels: (num_prompts, num_points): labels of each point. 1 means\n", + " positive points, 0 means negative points (shouldn't be included in the\n", + " mask), and -1 means padded/ ignored points.\n", + " boxes: (num_prompts, 4) or None\n", + " masks: (num_prompts, height, width) or None\n", + " Returns:\n", + " point_embeddings: (num_prompts, num_points, embed_dim)\n", + " dense_embeddings: (num_prompts, H, W, embed_dim)\n", + " \"\"\"\n", + " num_prompts = points.shape[0] if points is not None else (\n", + " boxes.shape[0] if boxes is not None else masks.shape[0])\n", + " sparse_embeddings = jnp.zeros(\n", + " (num_prompts, 0, self.embed_dim), dtype=jnp.float32)\n", + " if points is not None:\n", + " assert boxes is None\n", + " point_embeddings = self._embed_points(\n", + " points, point_labels, pad=(boxes is None))\n", + " sparse_embeddings = point_embeddings\n", + " if boxes is not None:\n", + " assert points is None\n", + " box_embeddings = self._embed_boxes(boxes)\n", + " sparse_embeddings = box_embeddings\n", + " if masks is not None:\n", + " dense_embeddings = self._embed_masks(masks)\n", + " else:\n", + " dense_embeddings = jnp.broadcast_to(\n", + " self.no_mask_embed[:, None, None],\n", + " (num_prompts, self.image_embedding_size[0],\n", + " self.image_embedding_size[1], self.embed_dim,)\n", + " )\n", + " return sparse_embeddings, dense_embeddings\n", + "\n", + "\n", + "class PositionEmbeddingRandom(nn.Module):\n", + " \"\"\"Positional encoding using random spatial frequencies.\"\"\"\n", + "\n", + " num_pos_feats: int\n", + " scale: Optional[float] = None\n", + "\n", + " def setup(self):\n", + " scale = 1.0 if self.scale is None or self.scale <= 0.0 else self.scale\n", + " self.positional_encoding_gaussian_matrix = self.param(\n", + " 'positional_encoding_gaussian_matrix',\n", + " nn.initializers.normal(stddev=scale),\n", + " (2, self.num_pos_feats)\n", + " )\n", + "\n", + " def _pe_encoding(self, coords):\n", + " \"\"\"PE encoding.\"\"\"\n", + " # assuming coords are in [0, 1]^2 square and have d_1 x ... x d_n x 2 shape\n", + " coords = 2 * coords - 1\n", + " coords = coords @ jax.lax.stop_gradient(\n", + " self.positional_encoding_gaussian_matrix)\n", + " coords = 2 * jnp.pi * coords\n", + " # outputs d_1 x ... x d_n x C shape\n", + " return jnp.concatenate([jnp.sin(coords), jnp.cos(coords)], axis=-1)\n", + "\n", + " @nn.compact\n", + " def __call__(self, size):\n", + " \"\"\"Forward pass.\n", + "\n", + " Args:\n", + " size: 2\n", + " Returns:\n", + " pe: H x W x D\n", + " \"\"\"\n", + " h, w = size\n", + " grid = jnp.ones((h, w), dtype=jnp.float32)\n", + " y_embed = jnp.cumsum(grid, axis=0) - 0.5\n", + " x_embed = jnp.cumsum(grid, axis=1) - 0.5\n", + " y_embed = y_embed / h\n", + " x_embed = x_embed / w\n", + " pe = self._pe_encoding(jnp.stack([x_embed, y_embed], axis=-1))\n", + " return pe\n", + "\n", + " def forward_with_coords(self, coords_input, image_size):\n", + " \"\"\"Forward with points.\n", + "\n", + " Args:\n", + " coords_input: (num_prompts, num_points, 2)\n", + " image_size: (2,)\n", + " Returns:\n", + " embedding: (num_prompts, num_points, self.num_pos_feats * 2)\n", + " \"\"\"\n", + " x = coords_input[:, :, 0] / image_size[1]\n", + " y = coords_input[:, :, 1] / image_size[0]\n", + " return self._pe_encoding(jnp.stack([x, y], axis=-1))\n", + "\n", + "\n", + "class MaskDownScaling(nn.Module):\n", + " \"\"\"Mask downscaling.\"\"\"\n", + " mask_in_chans: int = 16\n", + " embed_dim: int = 256\n", + "\n", + " @nn.compact\n", + " def __call__(self, x):\n", + " x = nn.Conv(\n", + " self.mask_in_chans // 4, kernel_size=(2, 2), strides=(2, 2),\n", + " name='0')(x)\n", + " x = nn.LayerNorm(name='1')(x)\n", + " x = nn.gelu(x, approximate=False)\n", + " x = nn.Conv(\n", + " self.mask_in_chans, kernel_size=(2, 2), strides=(2, 2),\n", + " name='3')(x)\n", + " x = nn.LayerNorm(name='4')(x)\n", + " x = nn.gelu(x, approximate=False)\n", + " x = nn.Conv(\n", + " self.embed_dim, kernel_size=(1, 1), strides=(1, 1),\n", + " name='6')(x)\n", + " return x\n" + ], + "metadata": { + "id": "twkefuPIuaLv", + "cellView": "form" + }, + "id": "twkefuPIuaLv", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#@title Util functions\n", + "\"\"\"Util functions for Segment Anything models.\"\"\"\n", + "\n", + "import jax.numpy as jnp\n", + "import numpy as np\n", + "# from scenic.projects.segment_anything.modeling import nms as nms_lib\n", + "\n", + "\n", + "def build_point_grid(points_per_side):\n", + " \"\"\"Generates a 2D grid of points evenly spaced in [0, 1] x [0, 1].\"\"\"\n", + " offset = 1. / (2 * points_per_side)\n", + " points_one_side = jnp.linspace(offset, 1 - offset, points_per_side)\n", + " points_x = jnp.tile(points_one_side[None, :], (points_per_side, 1))\n", + " points_y = jnp.tile(points_one_side[:, None], (1, points_per_side))\n", + " points = jnp.stack([points_x, points_y], axis=-1).reshape(-1, 2)\n", + " return points # (points_per_side ** 2, 1)\n", + "\n", + "\n", + "def batched_mask_to_box(masks):\n", + " \"\"\"Convert binary masks in (n, h, w) to boxes (n, 4).\"\"\"\n", + " if masks.shape[0] == 0:\n", + " return jnp.zeros((0, 4), dtype=jnp.float32)\n", + "\n", + " h, w = masks.shape[-2:]\n", + " in_height = jnp.max(masks, axis=-1) # (n, h)\n", + " in_height_coords = in_height * jnp.arange(h)[None] # (n, h)\n", + " bottom_edges = jnp.max(in_height_coords, axis=-1) # (n, )\n", + " # Mark \"0\" as \"h\" so that we can take min.\n", + " in_height_coords = in_height_coords + h * (1 - in_height) # (n, h)\n", + " top_edges = jnp.min(in_height_coords, axis=-1) # (n,)\n", + "\n", + " in_width = jnp.max(masks, axis=-2) # (n, w)\n", + " in_width_coords = in_width * jnp.arange(w)[None] # (n, w)\n", + " right_edges = jnp.max(in_width_coords, axis=-1) # (n,)\n", + " in_width_coords = in_width_coords + w * (1 - in_width) # (n, w)\n", + " left_edges = jnp.min(in_width_coords, axis=-1)\n", + "\n", + " # mark empty mask as [0, 0, 0, 0]\n", + " empty_filter = (right_edges < left_edges) | (bottom_edges < top_edges)\n", + " out = jnp.stack(\n", + " [left_edges, top_edges, right_edges, bottom_edges], axis=-1) # (n, 4)\n", + " out = out * (1 - empty_filter)[:, None]\n", + " return out\n", + "\n", + "\n", + "def batched_mask_to_box_np(masks):\n", + " \"\"\"Convert binary masks in (n, h, w) to boxes (n, 4).\"\"\"\n", + " if masks.shape[0] == 0:\n", + " return np.zeros((0, 4), dtype=np.float32)\n", + "\n", + " h, w = masks.shape[-2:]\n", + " in_height = np.max(masks, axis=-1) # (n, h)\n", + " in_height_coords = in_height * np.arange(h)[None] # (n, h)\n", + " bottom_edges = np.max(in_height_coords, axis=-1) # (n, )\n", + " # Mark \"0\" as \"h\" so that we can take min.\n", + " in_height_coords = in_height_coords + h * (1 - in_height) # (n, h)\n", + " top_edges = np.min(in_height_coords, axis=-1) # (n,)\n", + "\n", + " in_width = np.max(masks, axis=-2) # (n, w)\n", + " in_width_coords = in_width * np.arange(w)[None] # (n, w)\n", + " right_edges = np.max(in_width_coords, axis=-1) # (n,)\n", + " in_width_coords = in_width_coords + w * (1 - in_width) # (n, w)\n", + " left_edges = np.min(in_width_coords, axis=-1)\n", + "\n", + " # mark empty mask as [0, 0, 0, 0]\n", + " empty_filter = (right_edges < left_edges) | (bottom_edges < top_edges)\n", + " out = np.stack(\n", + " [left_edges, top_edges, right_edges, bottom_edges], axis=-1) # (n, 4)\n", + " out = out * (1 - empty_filter)[:, None]\n", + " return out\n", + "\n", + "\n", + "def calculate_stability_score(\n", + " mask_logits, mask_threshold, stability_score_offset):\n", + " \"\"\"The stability score measures if the mask changes with different thresh.\"\"\"\n", + " low = (mask_logits > (mask_threshold + stability_score_offset)).sum(\n", + " axis=-1).sum(axis=-1)\n", + " high = (mask_logits > (mask_threshold - stability_score_offset)).sum(\n", + " axis=-1).sum(axis=-1)\n", + " return low / high\n", + "\n", + "\n", + "def nms(boxes, scores, iou_threshold, num_outputs=100):\n", + " _, _, keep = nms_lib.non_max_suppression_padded(\n", + " scores[None], boxes[None], num_outputs, iou_threshold,\n", + " return_idx=True) # pytype: disable=wrong-arg-types\n", + " return keep[0] # undo batch\n" + ], + "metadata": { + "cellView": "form", + "id": "2NAKAK-DqQnQ" + }, + "id": "2NAKAK-DqQnQ", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#@title Jax SAM model\n", + "r\"\"\"Segment Anything Model.\n", + "\n", + "Pytorch reference:\n", + "\n", + "https://github.com/facebookresearch/segment-anything/blob/HEAD/\\\n", + "segment_anything/modeling/sam.py\n", + "\n", + "\"\"\"\n", + "from typing import Any\n", + "\n", + "from flax import linen as nn\n", + "# import jax\n", + "import jax.numpy as jnp\n", + "import ml_collections\n", + "import dataclasses\n", + "# from scenic.projects.segment_anything.modeling.image_encoder import ImageEncoderViT\n", + "# from scenic.projects.segment_anything.modeling.mask_decoder import MaskDecoder\n", + "# from scenic.projects.segment_anything.modeling.prompt_encoder import PromptEncoder\n", + "\n", + "PIXEL_MEAN = (123.675, 116.28, 103.53)\n", + "PIXEL_STD = (58.395, 57.12, 57.375)\n", + "\n", + "class Sam(nn.Module):\n", + " \"\"\"Segment anything model.\n", + "\n", + " Default parameters following\n", + " https://github.com/facebookresearch/segment-anything/blob/main/\n", + " segment_anything/automatic_mask_generator.py#L35\n", + "\n", + " Attributes:\n", + " mask_threshold: threshold to convert output logits to binary masks.\n", + " pixel_mean: used in preprocessing inputs.\n", + " pixel_std: used in preprocessing inputs.\n", + " max_objects: number of output objects in \"segment anything\" mode.\n", + " points_per_side: number of point anchors perside in \"segment anything\" mode.\n", + " points_per_batch: batch size for processing point anchors.\n", + " pred_iou_thresh: score threshold in \"segment anything\" mode.\n", + " box_nms_thresh: NMS threshold\n", + " stability_score_thresh: threshold for filtering with a stability metric.\n", + " stability_score_offset: used in computing the stability metric.\n", + " pre_nms_topk: new hyper-parameter in this implementation. Used for keeping a\n", + " fixed shape after filtering mask predictions.\n", + " image_encoder_args: args for image backbone.\n", + " prompt_encoder_args: args for prompt encoder.\n", + " mask_decoder_args: args for mask decoder.\n", + " \"\"\"\n", + " mask_threshold: float = 0.0\n", + " pixel_mean: Any = PIXEL_MEAN\n", + " pixel_std: Any = PIXEL_STD\n", + " max_objects: int = 100\n", + " points_per_side: Optional[int] = 32\n", + " points_per_batch: int = 64\n", + " pred_iou_thresh: float = 0.88\n", + " box_nms_thresh: float = 0.7\n", + " stability_score_thresh: float = 0.95\n", + " stability_score_offset: float = 1.0\n", + " pre_nms_topk: int = 1536\n", + " image_encoder_args: ml_collections.ConfigDict = dataclasses.field(\n", + " default_factory=ml_collections.ConfigDict)\n", + " prompt_encoder_args: ml_collections.ConfigDict = dataclasses.field(\n", + " default_factory=ml_collections.ConfigDict)\n", + " mask_decoder_args: ml_collections.ConfigDict = dataclasses.field(\n", + " default_factory=ml_collections.ConfigDict)\n", + "\n", + " def setup(self):\n", + " # pylint: disable=not-a-mapping\n", + " self.image_encoder = ImageEncoderViT(\n", + " **self.image_encoder_args, name='image_encoder')\n", + " self.prompt_encoder = PromptEncoder(\n", + " **self.prompt_encoder_args, name='prompt_encoder')\n", + " self.mask_decoder = MaskDecoder(\n", + " **self.mask_decoder_args, name='mask_decoder')\n", + " # pylint: enable=not-a-mapping\n", + "\n", + " @nn.compact\n", + " def __call__(\n", + " self, image, point_coords, point_labels, padding_mask=None,\n", + " image_embeddings=None, boxes=None, mask_inputs=None,\n", + " multimask_output: bool = True, return_image_embedding: bool = False,\n", + " upsample_mask: bool = True, return_batch_as_list: bool = True,\n", + " train: bool = False, debug: bool = False):\n", + " \"\"\"Forward Sam model.\n", + "\n", + " Args:\n", + " image: (batch_size, H, W, 3). Input pixels in RGB values [0, 255].\n", + " point_coords: (batch_size, num_prompts, num_points, 2). Input point\n", + " prompts. In absolute range [0, image.shape[1 or 2]].\n", + " point_labels: (batch_size, num_prompts, num_points). 1: positive points;\n", + " 0: negative points. -1: padded/ ignored points.\n", + " padding_mask: (batch_size, H, W). Indicate which pixels in the input are\n", + " padded. 1: not padded; 0: padded. This is used to match the pytorch\n", + " preprocessing process: normalize then pad, while in Jax we need to pad\n", + " first.\n", + " image_embeddings: cached image embeddings if they are provided.\n", + " (batch_size, H', W', D). If not provided, image must be not None.\n", + " boxes: (batch_size, num_prompts, 4); box prompts;\n", + " mask_inputs: (batch_size, num_prompts, 1, H, W); mask prompts.\n", + " multimask_output: bool. If false, C = 1, otherwise,\n", + " C = self.mask_decoder_args.num_multimask_outputs\n", + " return_image_embedding: bool\n", + " upsample_mask: bool; If False, only return the 4x downsampled masks. This\n", + " saves memory.\n", + " return_batch_as_list: If True, return a list where each item is the\n", + " results of a single image; If False, return a dict with batched results.\n", + " train: bool\n", + " debug: bool\n", + " Returns:\n", + " ret: a list (batch) of dicts, each with the following keys:\n", + " 'masks': (num_prompts, C, H, W). C is the num of masks (see above).\n", + " 'iou_predictions': (num_prompts, C). Predicted mask quality scores.\n", + " 'low_res_logits': (num_prompts, C, H', W'). The output mask of the\n", + " mask decoder. The final masks are resized from this.\n", + " \"\"\"\n", + " del debug\n", + " msg = 'One of \"image\" or \"image_embedding\" should be provided!'\n", + " assert image is not None or image_embeddings is not None, msg\n", + " assert image is None or image_embeddings is None, msg\n", + " if image_embeddings is None:\n", + " assert image is not None\n", + " image_embeddings = self.get_image_embeddings(\n", + " image, padding_mask=padding_mask,\n", + " train=train) # (batch_size, H', W', D)\n", + "\n", + " ret = []\n", + " for b, curr_embedding in enumerate(image_embeddings):\n", + " curr_point_coords = point_coords[b] if point_coords is not None else None\n", + " curr_point_labels = point_labels[b] if point_labels is not None else None\n", + " box_prompt = boxes[b] if boxes is not None else None\n", + " mask_prompt = mask_inputs[b] if mask_inputs is not None else None\n", + " sparse_embeddings, dense_embeddings = self.prompt_encoder(\n", + " curr_point_coords, curr_point_labels,\n", + " boxes=box_prompt, masks=mask_prompt)\n", + " low_res_masks, iou_predictions = self.mask_decoder(\n", + " image_embeddings=curr_embedding,\n", + " image_pe=self.prompt_encoder.get_dense_pe(),\n", + " sparse_prompt_embeddings=sparse_embeddings,\n", + " dense_prompt_embeddings=dense_embeddings,\n", + " multimask_output=multimask_output,\n", + " )\n", + " size = self.image_encoder.img_size\n", + " out = {\n", + " 'iou_predictions': iou_predictions,\n", + " 'low_res_logits': low_res_masks,\n", + " }\n", + " if upsample_mask:\n", + " masks = self.postprocess_masks(\n", + " low_res_masks, size, size) > self.mask_threshold\n", + " out['masks'] = masks\n", + " ret.append(out)\n", + " if return_image_embedding:\n", + " for batch_i, image_embedding in enumerate(image_embeddings):\n", + " ret[batch_i]['image_embedding'] = image_embedding\n", + " if not return_batch_as_list:\n", + " ret = {k: jnp.stack([ret[i][k] for i in range(len(ret))], axis=0)\n", + " for k in ret[0].keys()}\n", + " return ret\n", + "\n", + " def get_image_embeddings(self, image, padding_mask=None, train=False):\n", + " image = self.preprocess(image, padding_mask) # (batch_size, H, W, 3)\n", + " image_embeddings = self.image_encoder(\n", + " image, train=train) # (batch_size, H', W', D)\n", + " return image_embeddings\n", + "\n", + " @staticmethod\n", + " def postprocess_masks(masks, h, w):\n", + " \"\"\"Resize masks to input resolution.\"\"\"\n", + " masks = jax.image.resize(\n", + " masks, (masks.shape[0], masks.shape[1], h, w),\n", + " method='bilinear', antialias=False)\n", + " return masks\n", + "\n", + " @staticmethod\n", + " def postprocess_to_orig(\n", + " lowres_masks, unpad_size, orig_size, mask_threshold=0.0):\n", + " \"\"\"Resize masks to input resolution.\"\"\"\n", + " lowres_h, lowres_w = lowres_masks.shape[1:]\n", + " unpad_h, unpad_w = unpad_size\n", + " down_ratio = max(lowres_h, lowres_w) / max(unpad_h, unpad_w)\n", + " h, w = int(unpad_h * down_ratio), int(unpad_w * down_ratio)\n", + " orig_h, orig_w = orig_size\n", + "\n", + " masks = (\n", + " jax.image.resize(\n", + " jax.device_put(\n", + " lowres_masks[:, :h, :w],\n", + " device=jax.local_devices(backend='cpu')[0],\n", + " ),\n", + " (lowres_masks.shape[0], orig_h, orig_w),\n", + " method='bilinear',\n", + " antialias=False,\n", + " )\n", + " > mask_threshold\n", + " )\n", + " boxes = batched_mask_to_box_np(np.asarray(masks))\n", + " return masks, boxes\n", + "\n", + " def preprocess(self, inputs, padding_mask=None):\n", + " \"\"\"Proprocess images. Normalize pixels for non-padded pixels.\"\"\"\n", + " mean = jnp.asarray(self.pixel_mean, dtype=jnp.float32).reshape(1, 1, 1, 3)\n", + " std = jnp.asarray(self.pixel_std, dtype=jnp.float32).reshape(1, 1, 1, 3)\n", + " inputs = (inputs - mean) / std\n", + " if padding_mask is not None:\n", + " inputs = inputs * padding_mask[..., None] # Padded pixels remain 0\n", + " return inputs\n", + "\n", + " def generate(\n", + " self, image=None, padding_mask=None, upsample_mask=True,\n", + " image_embedding=None, return_image_embedding=False):\n", + " \"\"\"Automatically generate masks for all objects.\n", + "\n", + " This function is from the original SamAutomaticMaskGenerator at\n", + " https://github.com/facebookresearch/segment-anything/blob/HEAD/\n", + " segment_anything/automatic_mask_generator.py.\n", + "\n", + " Here we merge it inside the Sam flax model, as we don't use a separate\n", + " predictor class.\n", + "\n", + " Here are a few key differences compared to the original implementation:\n", + "\n", + " - The original implementation did filtering inside each prompt-batch. We\n", + " can't do this in jax as the filtering changes the data shape. Instead,\n", + " we do a filtering after concatenating the raw outputs from all batches,\n", + " and use an additional parameter \"pre_nms_topk\" to control the output\n", + " shape. By default \"pre_nms_topk\" is half of all prompts.\n", + "\n", + " - We move mask upsampling (i.e., \"postprocess_masks\") to the very end of\n", + " the process (after NMS), to save peak memory. This means the box-NMS and\n", + " the stability_score are computed on the 4x-downsampled masks. This\n", + " introduces small errors compared to the original implementation.\n", + "\n", + " - We don't support the multi-crop testing in the original code as this is\n", + " not enabled in the default config.\n", + "\n", + " Args:\n", + " image: a single image, (H x W x 3)\n", + " padding_mask: (H x W)\n", + " upsample_mask: bool; If False, only return the 4x downsampled masks. This\n", + " saves memory.\n", + " image_embedding: image embeddings if they are provided. (H', W', D). If\n", + " not provided, image must be not None.\n", + " return_image_embedding: bool\n", + " Returns:\n", + " Result dict of that image, with keys:\n", + " 'masks': (self.max_objects H, W).\n", + " 'iou_predictions': (self.max_objects,). Predicted mask quality scores.\n", + " 'low_res_logits': (self.max_objects, H', W'). The output mask of the\n", + " mask decoder. The final masks are resized from this.\n", + " 'boxes': (self.max_objects, 4). Box from the masks.\n", + " 'stability_score': (stability_score,). A measurement of how stable the\n", + " mask is when self.mask_threshold changes.\n", + " \"\"\"\n", + " msg = 'One of \"image\" or \"image_embedding\" should be provided!'\n", + " assert image is not None or image_embedding is not None, msg\n", + " assert image is None or image_embedding is None, msg\n", + " if image_embedding is None:\n", + " padding_mask = padding_mask if padding_mask is not None else (\n", + " jnp.ones((image.shape[0], image.shape[1]), dtype=jnp.float32))\n", + " image_embedding = self.get_image_embeddings(\n", + " image[None], padding_mask=padding_mask[None])[0] # (H', W', D)\n", + " else:\n", + " nopadding_msg = 'Padding_mask should be provided if using image_embedding'\n", + " assert padding_mask is not None, nopadding_msg\n", + "\n", + " point_grid = build_point_grid(\n", + " self.points_per_side)[:, None] # (points_per_side ** 2, 1, 2)\n", + " # Ignore padded region in creating grid.\n", + " valid_h = padding_mask.max(axis=1).sum()\n", + " valid_w = padding_mask.max(axis=0).sum()\n", + " point_grid = point_grid * jnp.asarray(\n", + " [valid_w, valid_h], dtype=jnp.float32).reshape(1, 1, 2)\n", + " point_labels = jnp.ones(\n", + " (point_grid.shape[0], point_grid.shape[1]),\n", + " dtype=jnp.int32) # (points_per_side ** 2, 1)\n", + "\n", + " num_prompts = point_grid.shape[0]\n", + " bs = self.points_per_batch\n", + " assert num_prompts % bs == 0, num_prompts\n", + " num_batches = num_prompts // bs\n", + " low_res_masks, iou_predictions = [], []\n", + " for b in range(num_batches):\n", + " in_points = point_grid[b * bs: (b + 1) * bs]\n", + " in_labels = point_labels[b * bs: (b + 1) * bs]\n", + " sparse_embeddings_cur, dense_embeddings_cur = self.prompt_encoder(\n", + " in_points, in_labels)\n", + " low_res_masks_cur, iou_predictions_cur = self.mask_decoder(\n", + " image_embeddings=image_embedding,\n", + " image_pe=self.prompt_encoder.get_dense_pe(),\n", + " sparse_prompt_embeddings=sparse_embeddings_cur,\n", + " dense_prompt_embeddings=dense_embeddings_cur,\n", + " multimask_output=True,\n", + " ) # low_res_masks: (bs, 3, h', w')\n", + " low_res_masks.append(low_res_masks_cur)\n", + " iou_predictions.append(iou_predictions_cur)\n", + " ret = {}\n", + " if return_image_embedding:\n", + " ret['image_embedding'] = image_embedding\n", + " del image_embedding\n", + "\n", + " low_res_masks = jnp.concatenate(\n", + " low_res_masks, axis=0)\n", + " iou_predictions = jnp.concatenate(iou_predictions, axis=0)\n", + " low_res_masks = low_res_masks.reshape(\n", + " (-1,) + low_res_masks.shape[-2:]) # (points_per_side ** 2 * 3, h', w')\n", + " iou_predictions = iou_predictions.reshape(-1) # (points_per_side ** 2 * 3,)\n", + " keep_mask = iou_predictions > self.pred_iou_thresh\n", + "\n", + " # Note: the original code computes stability_score on upsampled masks.\n", + " stability_score = calculate_stability_score(\n", + " low_res_masks,\n", + " self.mask_threshold, self.stability_score_offset)\n", + " if self.stability_score_thresh > 0.0:\n", + " keep_mask = keep_mask & (stability_score > self.stability_score_thresh)\n", + "\n", + " iou_predictions = iou_predictions * keep_mask\n", + "\n", + " _, inds = jax.lax.top_k(iou_predictions, k=self.pre_nms_topk)\n", + " iou_predictions = jnp.take_along_axis(iou_predictions, inds, axis=0)\n", + " low_res_masks = jnp.take_along_axis(\n", + " low_res_masks, inds[:, None, None], axis=0)\n", + "\n", + " # Note: the original code run NMS on upsampled masks.\n", + " low_res_boxes = batched_mask_to_box(\n", + " low_res_masks > self.mask_threshold)\n", + " keep_inds = nms(\n", + " low_res_boxes, iou_predictions,\n", + " iou_threshold=self.box_nms_thresh,\n", + " num_outputs=self.max_objects) # (max_objects,)\n", + " low_res_masks = jnp.take_along_axis(\n", + " low_res_masks, keep_inds[:, None, None], axis=0)\n", + " ret.update({\n", + " 'iou_predictions': jnp.take_along_axis(\n", + " iou_predictions, keep_inds, axis=0),\n", + " 'low_res_logits': low_res_masks,\n", + " 'low_res_boxes': jnp.take_along_axis(\n", + " low_res_boxes, keep_inds[:, None], axis=0),\n", + " 'stability_score': jnp.take_along_axis(\n", + " stability_score, keep_inds, axis=0),\n", + " })\n", + " if upsample_mask:\n", + " size = self.image_encoder.img_size\n", + " masks = self.postprocess_masks(\n", + " low_res_masks[None], size, size)[0] > self.mask_threshold\n", + " boxes = batched_mask_to_box(masks)\n", + " ret['masks'] = masks\n", + " ret['boxes'] = boxes\n", + " return ret\n", + "\n", + " def batch_generate(self, image, padding_mask, upsample_mask=True):\n", + " return jax.vmap(lambda x, y: self.generate(x, y, upsample_mask))(\n", + " image, padding_mask)" + ], + "metadata": { + "id": "G14IctsEucTC" + }, + "id": "G14IctsEucTC", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "sam_model = Sam()" + ], + "metadata": { + "id": "Uj0XtiLfrVP8" + }, + "id": "Uj0XtiLfrVP8", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "rng = {'dropout': jax.random.PRNGKey(0), 'params': jax.random.PRNGKey(0)}\n", + "S = 1024\n", + "num_prompts, num_points = 1, 1\n", + "inp = jax.random.normal(jax.random.PRNGKey(0), (1, S, S, 3))\n", + "mask_inputs = jax.random.normal(jax.random.PRNGKey(0), (1, S // 4, S // 4, 1))\n", + "point_coords = jnp.zeros((1, num_prompts, num_points, 2), jnp.float32)\n", + "point_labels = jnp.zeros((1, num_prompts, num_points), jnp.int32)\n", + "sam_vars = sam_model.init(\n", + " rng, inp, point_coords, point_labels, padding_mask=None,\n", + " image_embeddings=None, boxes=None, mask_inputs=mask_inputs)" + ], + "metadata": { + "id": "t4drZJNvunYc" + }, + "id": "t4drZJNvunYc", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "import flax" + ], + "metadata": { + "id": "ZGNK6hiaZRkX" + }, + "id": "ZGNK6hiaZRkX", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from tabulate import tabulate\n", + "import copy\n", + "\n", + "flattened_tree = flax.traverse_util.flatten_dict(sam_vars['params'], sep='.')\n", + "table = []\n", + "num_params = 0\n", + "for k in sorted(flattened_tree):\n", + " v = flattened_tree[k]\n", + " table.append((k, f'{v.shape}', f'{v.mean():.3f}', f'{v.std():.3f}'))\n", + " num_params += jnp.prod(jnp.asarray(v.shape))\n", + "table_str = tabulate(\n", + " table, tablefmt=\"pipe\", headers=[\"Names\", \"shape\", \"mean\", \"std\"])\n", + "print(table_str)\n", + "print('num_params', num_params)" + ], + "metadata": { + "id": "ixCqhbu9wnao" + }, + "id": "ixCqhbu9wnao", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def dfs(k, v, converted_torch_weight):\n", + " \"\"\"Recursively match weights.\"\"\"\n", + " if isinstance(v, jnp.ndarray):\n", + " if k in converted_torch_weight:\n", + " torch_data = converted_torch_weight[k]\n", + " if len(v.shape) == 2 and 'not_a_point_embed' not in k and \\\n", + " 'positional_encoding_gaussian_matrix' not in k and \\\n", + " 'rel_pos' not in k and \\\n", + " 'point_embeddings' not in k and \\\n", + " 'iou_token' not in k and \\\n", + " 'mask_tokens' not in k and\\\n", + " 'no_mask_embed' not in k:\n", + " torch_data = np.transpose(torch_data, (1, 0))\n", + " if len(v.shape) == 4:\n", + " if 'output_upscaling' in k:\n", + " torch_data = np.transpose(torch_data, (2, 3, 1, 0))\n", + " elif 'image_encoder.pos_embed' in k:\n", + " torch_data = torch_data\n", + " else:\n", + " torch_data = np.transpose(torch_data, (2, 3, 1, 0))\n", + " if torch_data.shape != v.shape:\n", + " print('Wrong shape! {} {} {}'.format(\n", + " k, torch_data.shape, v.shape))\n", + " else:\n", + " print(f'{k} not in checkpoint')\n", + " torch_data = v\n", + " return [(k, torch_data.shape)], torch_data\n", + " lst, tree = [], {}\n", + " for kk, vv in v.items():\n", + " if isinstance(vv, jnp.ndarray) and (\n", + " kk == 'kernel' or kk == 'scale' or kk == 'embedding'):\n", + " if 'proposal_generator.scales' not in k:\n", + " new_kk = 'weight'\n", + " else:\n", + " new_kk = kk\n", + " else:\n", + " new_kk = kk\n", + " sub_lst, sub_tree = dfs(\n", + " '{}.{}'.format(k, new_kk) if k else new_kk,\n", + " vv,\n", + " converted_torch_weight)\n", + " lst.extend(sub_lst)\n", + " tree[kk] = sub_tree\n", + " return lst, tree\n", + "\n", + "COMMEN_NAME_MAP = []\n", + "\n", + "def map_names(state_dict, name_map):\n", + " \"\"\"Change names according to a pre-defined map.\"\"\"\n", + " ret = {}\n", + " for k, v in state_dict.items():\n", + " new_k = k\n", + " for ori_name, new_name in name_map:\n", + " new_k = new_k.replace(ori_name, new_name)\n", + " ret[new_k] = v\n", + " return ret\n", + "\n", + "converted_torch_weight = {\n", + " k: v for k, v in torch_weights.items()}\n", + "converted_torch_weight = {k: v.cpu().numpy() for k, v in converted_torch_weight.items()}" + ], + "metadata": { + "id": "BrPPrgOoZSqd" + }, + "id": "BrPPrgOoZSqd", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "ret, tree = dfs('', sam_vars['params'], converted_torch_weight)\n", + "num_params = 0\n", + "for k, v in converted_torch_weight.items():\n", + " num_params += np.prod(v.shape)\n", + "print('#params in loaded model:', num_params)\n", + "num_params = 0\n", + "for k, v in ret:\n", + " num_params += np.prod(v)\n", + "print('#params in converted model:', num_params)" + ], + "metadata": { + "id": "-6gZAg93XcAH" + }, + "id": "-6gZAg93XcAH", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from tabulate import tabulate\n", + "import copy\n", + "\n", + "flattened_tree = flax.traverse_util.flatten_dict(tree, sep='.')\n", + "table = []\n", + "num_params = 0\n", + "for k in sorted(flattened_tree):\n", + " v = flattened_tree[k]\n", + " table.append((k, f'{v.shape}', f'{v.mean():.3f}', f'{v.std():.3f}'))\n", + " num_params += jnp.prod(jnp.asarray(v.shape))\n", + "table_str = tabulate(\n", + " table, tablefmt=\"pipe\", headers=[\"Names\", \"shape\", \"mean\", \"std\"])\n", + "print(table_str)\n", + "print('num_params', num_params)" + ], + "metadata": { + "id": "ZkPVY-9AXhvo" + }, + "id": "ZkPVY-9AXhvo", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "transformed_image = predictor.transformed_image.cpu().numpy().transpose(0, 2, 3, 1)\n", + "inp = np.zeros((1, S, S, 3), np.float32)\n", + "padding_mask = np.zeros((1, S, S), np.float32)\n", + "inp[0, :transformed_image.shape[1], :transformed_image.shape[2]] = transformed_image#[..., ::-1]\n", + "padding_mask[0, :transformed_image.shape[1], :transformed_image.shape[2]] = 1\n", + "point_coords = np.asarray(input_point.copy(), dtype=np.float32).reshape(1, 1, 1, 2) # jnp.zeros((1, num_prompts, num_points, 2), jnp.float32)\n", + "point_coords[..., 0] = point_coords[..., 0] / max(image.shape[:2]) * S\n", + "point_coords[..., 1] = point_coords[..., 1] / max(image.shape[:2]) * S\n", + "point_labels = jnp.asarray(input_label).reshape(1, 1, 1) # jnp.zeros((1, num_prompts, num_points), jnp.int32)" + ], + "metadata": { + "id": "MrYH4H-xaemA" + }, + "id": "MrYH4H-xaemA", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "ret = sam_model.apply(\n", + " {'params': tree},\n", + " inp,\n", + " point_coords,\n", + " point_labels,\n", + " padding_mask,\n", + " train=False)\n" + ], + "metadata": { + "id": "ucpaMaSLfrrD" + }, + "id": "ucpaMaSLfrrD", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "transformed_image = predictor.transformed_image.cpu().numpy().transpose(0, 2, 3, 1)[0].astype(np.uint8)\n", + "for i, (mask, score) in enumerate(zip(ret[0]['masks'][0], ret[0]['iou_predictions'][0])):\n", + " plt.figure(figsize=(10,10))\n", + " plt.imshow(transformed_image)\n", + " show_mask(mask, plt.gca())\n", + " show_points(point_coords[0, 0], input_label, plt.gca())\n", + " plt.title(f\"Mask {i+1}, Score: {score:.3f}\", fontsize=18)\n", + " plt.axis('off')\n", + " plt.show()\n" + ], + "metadata": { + "id": "qkL9zZUolS9I" + }, + "id": "qkL9zZUolS9I", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "jax.tree_util.tree_map(lambda x: x.shape, ret[0])" + ], + "metadata": { + "id": "-XUC0c7dxnfQ" + }, + "id": "-XUC0c7dxnfQ", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "ret_with_mask_prompt = sam_model.apply(\n", + " {'params': tree},\n", + " inp,\n", + " point_coords,\n", + " point_labels,\n", + " padding_mask,\n", + " mask_inputs=ret[0]['low_res_logits'][:, 0, :, :, None],\n", + " train=False)" + ], + "metadata": { + "id": "4nTNruIExcR_" + }, + "id": "4nTNruIExcR_", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "print(jax.tree_util.tree_map(lambda x: x.shape, ret_with_mask_prompt[0]))\n", + "transformed_image = predictor.transformed_image.cpu().numpy().transpose(0, 2, 3, 1)[0].astype(np.uint8)\n", + "for i, (mask, score) in enumerate(zip(ret_with_mask_prompt[0]['masks'][0], ret_with_mask_prompt[0]['iou_predictions'][0])):\n", + " plt.figure(figsize=(10,10))\n", + " plt.imshow(transformed_image)\n", + " show_mask(mask, plt.gca())\n", + " show_points(point_coords[0, 0], input_label, plt.gca())\n", + " plt.title(f\"Mask {i+1}, Score: {score:.3f}\", fontsize=18)\n", + " plt.axis('off')\n", + " plt.show()\n" + ], + "metadata": { + "id": "AH_3_WwfxzlW" + }, + "id": "AH_3_WwfxzlW", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from flax.training import checkpoints\n", + "flax.config.update('flax_use_orbax_checkpointing', False)\n", + "out_path = 'sam_vit_b'\n", + "checkpoints.save_checkpoint(out_path, {'params': tree}, 0)" + ], + "metadata": { + "id": "M0FPKhRiw3IY" + }, + "id": "M0FPKhRiw3IY", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# from google.colab import files\n", + "# files.download(f'{out_path}/checkpoint_0')" + ], + "metadata": { + "id": "t5WYYCuQk_sD" + }, + "id": "t5WYYCuQk_sD", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "x04S2LsKKqtS" + }, + "id": "x04S2LsKKqtS", + "execution_count": null, + "outputs": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.0" + }, + "colab": { + "provenance": [], + "gpuType": "T4" + }, + "accelerator": "GPU" + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/scenic/projects/baselines/simple_cnn.py b/scenic/projects/baselines/simple_cnn.py new file mode 100644 index 0000000000000000000000000000000000000000..1647e2284a899c7f98f76b2973067c646f9beb2c --- /dev/null +++ b/scenic/projects/baselines/simple_cnn.py @@ -0,0 +1,146 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Simple convolutional neural network classifier.""" + +from typing import Iterable, Callable, Sequence, Optional, Union + +import flax.linen as nn +from jax.nn import initializers +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models.classification_model import ClassificationModel +from scenic.model_lib.base_models.segmentation_model import SegmentationModel +from scenic.model_lib.layers import nn_layers + + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +class SimpleCNN(nn.Module): + """Defines a simple convolutional neural network. + + The model assumes the input shape is [batch, H, W, C]. + + Attributes: + num_outputs: Number of output classes. + output_projection_type: Type of the output projection layer. + num_filters: Number of filters in each layer. + kernel_sizes: Size of kernel in each layer. + use_bias: If add bias in each layer. + kernel_init: Kernel initialization. + bias_init: Bias initialization. + dtype: Model JAX dtype. + """ + + num_outputs: int + output_projection_type: str + num_filters: Sequence[int] + kernel_sizes: Sequence[int] + use_bias: Optional[Union[bool, Sequence[bool]]] + kernel_init: Initializer = initializers.lecun_normal() + bias_init: Initializer = initializers.zeros + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + x: jnp.ndarray, + *, + train: bool, + debug: bool = False) -> jnp.ndarray: + """Applies SimpleCNN on the input data. + + Args: + x: Input tensor. + train: Unused. + debug: Unused. + + Returns: + Unnormalized logits. + """ + del train, debug + use_bias = True if self.use_bias is None else self.use_bias + if not isinstance(use_bias, Iterable): + use_bias = [use_bias] * len(self.num_filters) + for n_filters, kernel_size, use_bias in zip(self.num_filters, + self.kernel_sizes, + use_bias): + x = nn.Conv( + features=n_filters, + kernel_size=(kernel_size, kernel_size), + strides=(1, 1), + use_bias=use_bias, + kernel_init=self.kernel_init, + bias_init=self.bias_init, + dtype=self.dtype)( + x) + x = nn.relu(x) + + # Head + if self.output_projection_type == 'reduce_mean': + x = jnp.mean(x, axis=(1, 2)) + + x = nn_layers.IdentityLayer(name='pre_logits')(x) + x = nn.Dense( + self.num_outputs, + kernel_init=self.kernel_init, + bias_init=self.bias_init, + dtype=self.dtype, + name='output_projection')( + x) + return x + + +class SimpleCNNClassificationModel(ClassificationModel): + """Simple CNN model for classifcation task.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return SimpleCNN( + num_outputs=self.dataset_meta_data['num_classes'], + num_filters=self.config.num_filters, + kernel_sizes=self.config.kernel_sizes, + use_bias=self.config.get('use_bias', None), + output_projection_type='reduce_mean', + dtype=model_dtype) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return ml_collections.ConfigDict( + dict( + num_filters=[20, 10], + kernel_sizes=[3, 3], + data_dtype_str='float32', + )) + + +class SimpleCNNSegmentationModel(SegmentationModel): + """Simple CNN model for segmentation task.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return SimpleCNN( + num_outputs=self.dataset_meta_data['num_classes'], + num_filters=self.config.num_filters, + kernel_sizes=self.config.kernel_sizes, + use_bias=self.config.get('use_bias', None), + output_projection_type='keep_dims', + dtype=model_dtype) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return ml_collections.ConfigDict( + dict( + num_filters=[20, 10], + kernel_sizes=[3, 3], + data_dtype_str='float32', + )) diff --git a/scenic/projects/baselines/tests/__init__.py b/scenic/projects/baselines/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/baselines/tests/test_axial_resnet.py b/scenic/projects/baselines/tests/test_axial_resnet.py new file mode 100644 index 0000000000000000000000000000000000000000..9f69e0bd1b0c8c4dcfb7b73ee0c38d806144ee42 --- /dev/null +++ b/scenic/projects/baselines/tests/test_axial_resnet.py @@ -0,0 +1,108 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for axial_resnet.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +from jax import random +import jax.numpy as jnp +import ml_collections +from scenic.projects.baselines import axial_resnet + + +class AxialResNetTest(parameterized.TestCase): + """Test cases for AxialResNet.""" + + def test_self_attention_with_1d_relative_pos_output_shape(self): + rng = random.PRNGKey(0) + x = jnp.ones((4, 6, 128)) + sa_module = axial_resnet.SelfAttentionWith1DRelativePos(num_heads=8) + y, _ = sa_module.init_with_output(rng, x) + self.assertEqual(y.shape, x.shape) + + def test_self_attention_with_1d_relative_pos_unacceptable_num_features(self): + rng = random.PRNGKey(0) + x = jnp.ones((4, 6, 5)) + # The channel size should be divisible by `2 * num_heads`, which is not: + with self.assertRaises(ValueError): + axial_resnet.SelfAttentionWith1DRelativePos(num_heads=8).init(rng, x) + + @parameterized.named_parameters(('row', 1), ('col', 2), ('channel', 3)) + def test_axial_self_attention_output_shape(self, attention_axis): + """Tests AxialSelfAttention module given different attention axis.""" + rng = random.PRNGKey(0) + x = jnp.ones((6, 8, 10, 128)) + axial_attention_configs = ml_collections.ConfigDict({'num_heads': 4}) + if attention_axis not in [1, 2]: + with self.assertRaises(ValueError): + axial_resnet.AxialSelfAttention( + attention_axis=attention_axis, + axial_attention_configs=axial_attention_configs).init_with_output( + rng, x) + else: + asa_module = axial_resnet.AxialSelfAttention( + attention_axis=attention_axis, + axial_attention_configs=axial_attention_configs) + y, _ = asa_module.init_with_output(rng, x) + self.assertEqual(y.shape, x.shape) + + @parameterized.named_parameters( + ('strides_1', (1, 1), False, (10, 32, 32, 128)), + ('strides_2', (2, 2), False, (10, 16, 16, 128)), + ('strides_1_bottleneck', (1, 1), True, (10, 32, 32, 512)), + ('strides_2_bottleneck', (2, 2), True, (10, 16, 16, 512)), + ) + def test_axial_residual_unit_output_shape(self, strides, bottleneck, + expected_output_shape): + """Tests AxialResidualUnit module given different strides.""" + rng = random.PRNGKey(0) + x = jnp.ones((10, 32, 32, 64)) + axial_attention_configs = ml_collections.ConfigDict({'num_heads': 4}) + aru_module = axial_resnet.AxialResidualUnit( + nout=128, + strides=strides, + bottleneck=bottleneck, + axial_attention_configs=axial_attention_configs) + y, _ = aru_module.init_with_output(rng, x) + self.assertEqual(y.shape, expected_output_shape) + + @parameterized.named_parameters( + ('strides_1_block1', (1, 1), False, 1, (10, 32, 32, 128)), + ('strides_2__block1', (2, 2), False, 1, (10, 16, 16, 128)), + ('strides_1_bottleneck_block1', (1, 1), True, 1, (10, 32, 32, 512)), + ('strides_2_bottleneck_block1', (2, 2), True, 1, (10, 16, 16, 512)), + ('strides_1_block2', (1, 1), False, 2, (10, 32, 32, 128)), + ('strides_2__block2', (2, 2), False, 2, (10, 16, 16, 128)), + ('strides_1_bottleneck_block2', (1, 1), True, 2, (10, 32, 32, 512)), + ('strides_2_bottleneck_block2', (2, 2), True, 2, (10, 16, 16, 512)), + ) + def test_axial_residual_stage_output_shape(self, strides, bottleneck, + block_size, expected_output_shape): + """Tests AxialResNetStage module given different strides.""" + rng = random.PRNGKey(0) + x = jnp.ones((10, 32, 32, 64)) + axial_attention_configs = ml_collections.ConfigDict({'num_heads': 4}) + aru_module = axial_resnet.AxialResNetStage( + block_size=block_size, + nout=128, + first_stride=strides, + bottleneck=bottleneck, + axial_attention_configs=axial_attention_configs) + y, _ = aru_module.init_with_output(rng, x) + self.assertEqual(y.shape, expected_output_shape) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/baselines/tests/test_mixer.py b/scenic/projects/baselines/tests/test_mixer.py new file mode 100644 index 0000000000000000000000000000000000000000..f7cba151fbcb9574c6992f4cd1dbbde6606e4834 --- /dev/null +++ b/scenic/projects/baselines/tests/test_mixer.py @@ -0,0 +1,102 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for mixer.py.""" + +import functools + +from absl.testing import absltest +from absl.testing import parameterized +import flax +from jax import random +from jax.flatten_util import ravel_pytree +import jax.numpy as jnp +import jax.tree_util +import numpy as np +from scenic.projects.baselines import mixer + +NUM_OUTPUTS = 5 +INPUT_SHAPE = (10, 32, 32, 3) + + +class MixerTest(parameterized.TestCase): + """Tests for modules in mixer.py.""" + + @parameterized.named_parameters( + ('without_dropout_without_stochastic_depth', 0.0, 0.0), + ('with_dropout_without_stochastic_depth', 0.1, 0.0), + ('without_dropout_with_stochastic_depth', 0.0, 0.1), + ('with_dropout_with_stochastic_depth', 0.1, 0.1), + ('with_dropout_stochastic_depth_layer_scale', 0.1, 0.1, 0.1) + ) + def test_mixer_block(self, dropout_rate, stochastic_depth, layer_scale=None): + """Tests MixerBlock.""" + rng = random.PRNGKey(0) + x = jnp.ones((4, 16, 32)) + mixer_block = functools.partial( + mixer.MixerBlock, + channels_mlp_dim=32, + sequence_mlp_dim=32, + dropout_rate=dropout_rate, + stochastic_depth=stochastic_depth, + layer_scale=layer_scale) + mixer_block_vars = mixer_block().init(rng, x, deterministic=True) + y = mixer_block().apply(mixer_block_vars, x, deterministic=True) + # Test outputs shape. + self.assertEqual(y.shape, x.shape) + + def test_mixer_models(self): + """Test forward pass of the mixer classification model.""" + rng = jax.random.PRNGKey(0) + model = mixer.MixerMultiLabelClassificationModel( + config=None, + dataset_meta_data={ + 'num_classes': NUM_OUTPUTS, + 'target_is_onehot': False, + }) + + xs = jnp.array(np.random.normal(loc=0.0, scale=10.0, + size=INPUT_SHAPE)).astype(jnp.float32) + + rng, init_rng = jax.random.split(rng) + dummy_input = jnp.zeros(INPUT_SHAPE, jnp.float32) + init_model_state, init_params = flax.core.pop(model.flax_model.init( + init_rng, dummy_input, train=False, debug=False), 'params') + + # Check that the forward pass works with mutated model_state. + rng, dropout_rng = jax.random.split(rng) + variables = {'params': init_params, **init_model_state} + outputs, new_model_state = model.flax_model.apply( + variables, + xs, + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=False) + self.assertEqual(outputs.shape, (INPUT_SHAPE[0], NUM_OUTPUTS)) + + # If it's a batch norm model check the batch stats changed. + if init_model_state: + bflat, _ = ravel_pytree(init_model_state) + new_bflat, _ = ravel_pytree(new_model_state) + self.assertFalse(jnp.array_equal(bflat, new_bflat)) + + # Test batch_norm in inference mode. + outputs = model.flax_model.apply( + variables, xs, mutable=False, train=False, debug=False) + self.assertEqual(outputs.shape, (INPUT_SHAPE[0], NUM_OUTPUTS)) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/baselines/tests/test_unet.py b/scenic/projects/baselines/tests/test_unet.py new file mode 100644 index 0000000000000000000000000000000000000000..aee28b8bb72bb42fc045c7f0aa31687c6cfb302a --- /dev/null +++ b/scenic/projects/baselines/tests/test_unet.py @@ -0,0 +1,62 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for unet.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +import flax +from jax import random +import jax.numpy as jnp +from scenic.common_lib import debug_utils +from scenic.projects.baselines import unet + + +class UNetTest(parameterized.TestCase): + """Test cases for UNet.""" + + @parameterized.named_parameters( + ("128_128", (128, 128), 34_491_599), + # It's fully convolutional => same parameter number. + ("256_256", (256, 256), 34_491_599), + ) + def test_output_shape_and_param_count_of_unet_with_different_input_shapes( + self, hw, param_count: int): + """Test UNet model. + + We just test the output shape as well as number of trainable parameters, + using two different input shapes, i.e. 128x128 and 256x256. + We need to see the same shape as input in the output and given the all + the components of the model are convolutions, we expect to see no change + in the parameters of the model, when input resolutions changes. + + Args: + hw: Height and Width of the input. + param_count: Expected number of parameters. + """ + rng = random.PRNGKey(0) + dummy_input = jnp.zeros((2, *hw, 5), jnp.float32) + output, init_var = unet.UNet(num_classes=5).init_with_output( + rng, dummy_input, train=True, debug=False) + # Check the output shape. + self.assertEqual((2, *hw, 5), output.shape) + + _, init_params = flax.core.pop(init_var, "params") + # Check the parameters count. + num_trainable_params = debug_utils.log_param_shapes(init_params) + self.assertEqual(param_count, num_trainable_params) + + +if __name__ == "__main__": + absltest.main() diff --git a/scenic/projects/baselines/tests/test_vit.py b/scenic/projects/baselines/tests/test_vit.py new file mode 100644 index 0000000000000000000000000000000000000000..35ca47ae05ce91670813788392b4317a1a4e2654 --- /dev/null +++ b/scenic/projects/baselines/tests/test_vit.py @@ -0,0 +1,97 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for vit.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +import flax +import jax +import jax.numpy as jnp +import jax.tree_util +import ml_collections +import numpy as np +from scenic.projects.baselines import vit + +NUM_OUTPUTS = 5 +INPUT_SHAPE = (10, 32, 32, 3) + + +class ViTTest(parameterized.TestCase): + """Tests for modules in vit.py.""" + + @parameterized.named_parameters( + ('pos_embed_learned_1d', 'learned_1d', False), + ('pos_embed_sinusoidal_1d', 'sinusoidal_1d', False), + ('pos_embed_sinusoidal_2d', 'sinusoidal_2d', False), + ('pos_embed_none', 'none', False), + ('default_config', 'ignored', True) + ) + def test_vit_model(self, positional_embedding, use_default_config): + """Test forward pass of the ViT classification model.""" + rng = jax.random.PRNGKey(0) + + # Config for model. + if not use_default_config: + config = ml_collections.ConfigDict({ + 'model': + dict( + num_heads=2, + num_layers=1, + representation_size=16, + mlp_dim=32, + dropout_rate=0., + attention_dropout_rate=0., + hidden_size=16, + patches={'size': (4, 4)}, + positional_embedding=positional_embedding, + classifier='gap', + data_dtype_str='float32') + }) + else: + config = None + model = vit.ViTMultiLabelClassificationModel( + config=config, + dataset_meta_data={ + 'num_classes': NUM_OUTPUTS, + 'target_is_onehot': False, + }) + + xs = jnp.array(np.random.normal(loc=0.0, scale=10.0, + size=INPUT_SHAPE)).astype(jnp.float32) + + rng, init_rng = jax.random.split(rng) + dummy_input = jnp.zeros(INPUT_SHAPE, jnp.float32) + init_model_state, init_params = flax.core.pop(model.flax_model.init( + init_rng, dummy_input, train=False, debug=False), 'params') + + # Check that the forward pass works in train mode. + rng, dropout_rng = jax.random.split(rng) + variables = {'params': init_params, **init_model_state} + outputs = model.flax_model.apply( + variables, + xs, + train=True, + rngs={'dropout': dropout_rng}, + debug=False) + self.assertEqual(outputs.shape, (INPUT_SHAPE[0], NUM_OUTPUTS)) + + # Test model in inference mode. + outputs = model.flax_model.apply( + variables, xs, mutable=False, train=False, debug=False) + self.assertEqual(outputs.shape, (INPUT_SHAPE[0], NUM_OUTPUTS)) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/baselines/unet.py b/scenic/projects/baselines/unet.py new file mode 100644 index 0000000000000000000000000000000000000000..6debc1e076d98d92e87ffd2668bbc7f7b4b88cdb --- /dev/null +++ b/scenic/projects/baselines/unet.py @@ -0,0 +1,285 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""UNet model (http://arxiv.org/abs/1505.04597).""" + +import functools +from typing import Tuple + +import flax.linen as nn +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models.segmentation_model import SegmentationModel +from scenic.model_lib.layers import nn_layers +from scenic.model_lib.layers import nn_ops + +Conv3x3 = functools.partial(nn.Conv, kernel_size=(3, 3)) + + +class DeConv3x3(nn.Module): + """Deconvolution layer for upscaling. + + Attributes: + features: Num convolutional features. + padding: Type of padding: 'SAME' or 'VALID'. + use_batch_norm: Whether to use batchnorm at the end or not. + """ + + features: int + padding: str = 'SAME' + use_batch_norm: bool = True + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool) -> jnp.ndarray: + """Applies deconvolution with 3x3 kernel.""" + if self.padding == 'SAME': + padding = ((1, 2), (1, 2)) + elif self.padding == 'VALID': + padding = ((0, 0), (0, 0)) + else: + raise ValueError(f'Unkonwn padding: {self.padding}') + x = nn.Conv( + features=self.features, + kernel_size=(3, 3), + input_dilation=(2, 2), + padding=padding)( + x) + if self.use_batch_norm: + x = nn.BatchNorm(use_running_average=not train)(x) + return x + + +class ConvRelu2(nn.Module): + """Two unpadded convolutions & relus. + + Attributes: + features: Num convolutional features. + padding: Type of padding: 'SAME' or 'VALID'. + use_batch_norm: Whether to use batchnorm at the end or not. + """ + + features: int + padding: str = 'SAME' + use_batch_norm: bool = True + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool) -> jnp.ndarray: + x = Conv3x3(features=self.features, name='conv1', padding=self.padding)(x) + if self.use_batch_norm: + x = nn.BatchNorm(use_running_average=not train)(x) + x = nn.relu(x) + x = Conv3x3(features=self.features, name='conv2', padding=self.padding)(x) + if self.use_batch_norm: + x = nn.BatchNorm(use_running_average=not train)(x) + x = nn.relu(x) + return x + + +class DownsampleBlock(nn.Module): + """Two unpadded convolutions & downsample 2x. + + Attributes: + features: Num convolutional features. + padding: Type of padding: 'SAME' or 'VALID'. + use_batch_norm: Whether to use batchnorm at the end or not. + """ + + features: int + padding: str = 'SAME' + use_batch_norm: bool = True + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool) -> jnp.ndarray: + residual = x = ConvRelu2( + features=self.features, + padding=self.padding, + use_batch_norm=self.use_batch_norm)( + x, train=train) + x = nn.max_pool(x, window_shape=(2, 2), strides=(2, 2)) + return x, residual # pytype: disable=bad-return-type # jax-ndarray + + +class BottleneckBlock(nn.Module): + """Two unpadded convolutions, dropout & deconvolution. + + Attributes: + features: Num convolutional features. + padding: Type of padding: 'SAME' or 'VALID'. + use_batch_norm: Whether to use batchnorm at the end or not. + """ + + features: int + padding: str = 'SAME' + use_batch_norm: bool = True + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool) -> jnp.ndarray: + x = ConvRelu2( + self.features, padding=self.padding, + use_batch_norm=self.use_batch_norm)( + x, train=train) + x = DeConv3x3( + features=self.features // 2, + name='deconv', + padding=self.padding, + use_batch_norm=self.use_batch_norm)( + x, train=train) + return x + + +class UpsampleBlock(nn.Module): + """Two unpadded convolutions and upsample. + + Attributes: + features: Num convolutional features. + padding: Type of padding: 'SAME' or 'VALID'. + use_batch_norm: Whether to use batchnorm at the end or not. + """ + + features: int + padding: str = 'SAME' + use_batch_norm: bool = True + + @nn.compact + def __call__(self, x: jnp.ndarray, residual, *, train: bool) -> jnp.ndarray: + if residual is not None: + x = jnp.concatenate([x, nn_ops.central_crop(residual, x.shape)], axis=-1) + x = ConvRelu2( + self.features, padding=self.padding, + use_batch_norm=self.use_batch_norm)( + x, train=train) + x = DeConv3x3( + features=self.features // 2, + name='deconv', + padding=self.padding, + use_batch_norm=self.use_batch_norm)( + x, train=train) + return x + + +class OutputBlock(nn.Module): + """Two unpadded convolutions followed by linear FC. + + + Attributes: + features: Num convolutional features. + num_classes: Number of classes. + padding: Type of padding: 'SAME' or 'VALID'. + use_batch_norm: Whether to use batchnorm at the end or not. + """ + + features: int + num_classes: int + padding: str = 'SAME' + use_batch_norm: bool = True + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool) -> jnp.ndarray: + x = ConvRelu2( + self.features, padding=self.padding, + use_batch_norm=self.use_batch_norm)( + x, train=train) + x = nn.Conv( + features=self.num_classes, kernel_size=(1, 1), name='conv1x1')( + x) + if self.use_batch_norm: + x = nn.BatchNorm(use_running_average=not train)(x) + return x + + +class UNet(nn.Module): + """U-Net from http://arxiv.org/abs/1505.04597. + + Based on: + https://github.com/NVIDIA/DeepLearningExamples/blob/master/TensorFlow2/Segmentation/UNet_Medical/model/unet.py + Note that the default configuration `config.padding="VALID"` does only work + with images that have a certain minimum size (e.g. 128x128 is too small). + + Attributes: + num_classes: Number of classes. + block_size: Sequence of feature sizes used in UNet blocks. + padding: Type of padding. + use_batch_norm: Whether to use batchnorm or not. + """ + + num_classes: int + block_size: Tuple[int, ...] = (64, 128, 256, 512) + padding: str = 'SAME' + use_batch_norm: bool = True + + @nn.compact + def __call__(self, + x: jnp.ndarray, + *, + train: bool, + debug: bool = False) -> jnp.ndarray: + """Applies the UNet model.""" + del debug + skip_connections = [] + for i, features in enumerate(self.block_size): + x, residual = DownsampleBlock( + features=features, + padding=self.padding, + use_batch_norm=self.use_batch_norm, + name=f'0_down_{i}')( + x, train=train) + skip_connections.append(residual) + x = BottleneckBlock( + features=2 * self.block_size[-1], + padding=self.padding, + use_batch_norm=self.use_batch_norm, + name='1_bottleneck')( + x, train=train) + + *upscaling_features, final_features = self.block_size[::-1] + for i, features in enumerate(upscaling_features): + x = UpsampleBlock( + features=features, + padding=self.padding, + use_batch_norm=self.use_batch_norm, + name=f'2_up_{i}')( + x, residual=skip_connections.pop(), train=train) + + x = nn_layers.IdentityLayer(name='pre_logits')(x) + if self.num_classes > 0: + # If self.num_classes <= 0, we just return the backbone features. + x = OutputBlock( + features=final_features, + num_classes=self.num_classes, + padding=self.padding, + use_batch_norm=self.use_batch_norm, + name='output_projection')( + x, train=train) + return x + + +class UNetSegmentationModel(SegmentationModel): + """UNet model for segmentation task.""" + + def build_flax_model(self): + return UNet( + num_classes=self.dataset_meta_data['num_classes'], + padding=self.config.model.get('padding', 'SAME'), + use_batch_norm=self.config.model.get('use_batch_norm', True), + block_size=self.config.model.get('block_size', (64, 128, 256, 512))) + + def default_flax_model_config(self): + return ml_collections.ConfigDict({ + 'model': + dict( + padding='SAME', + use_batch_norm=False, + block_size=(64, 128, 256, 512), + data_dtype_str='float32') + }) diff --git a/scenic/projects/baselines/universal_transformer/README.md b/scenic/projects/baselines/universal_transformer/README.md new file mode 100644 index 0000000000000000000000000000000000000000..cd12825ce76916949526f805586d446e65050378 --- /dev/null +++ b/scenic/projects/baselines/universal_transformer/README.md @@ -0,0 +1,77 @@ +# Universal Transformer + +>This repo is the reimplementation of Universal Transformers in JAX. We also +include implementation of a "Universal Vision Transformer" wich is a ViT with +dynamic halting mechanism. + +The Universal Transformer is an extension to the Transformer models which +combines the parallelizability and global receptive field of the Transformer +model with the recurrent inductive bias of RNNs, which seems to be better +suited to a range of algorithmic and natural language understanding +sequence-to-sequence problems. +Besides, as the name implies, in contrast to the standard Transformer, +under certain assumptions the Universal Transformer can be shown to be +computationally universal. + +Universal Transformer + +### Universal Transformer: A Concurrent-Recurrent Sequence Model +In the standard Transformer, we have a "fixed" stack of Transformer blocks, +where each block is applied to all the input symbols in parallel. +In the Universal Transformer, however, instead of having a fixed number of +layers, we iteratively apply a Universal Transformer block +(a self-attention mechanism followed by a recurrent transformation) to +refine the representations of all positions in the sequence in parallel, +during an arbitrary number of steps (which is possible due to the recurrence). + +In fact, Universal Transformer is a recurrent function (not in time,but in +depth) that evolves per-symbol hidden states in parallel, based at each step +on the sequence of previous hidden states. In that sense, UT is similar to +architectures such as the Neural GPU and the Neural Turing Machine. +This gives UTs the attractive computational efficiency of the original +feed-forward Transformer model, but with the added recurrent inductive bias +of RNNs. + +Note that when running for a fixed number of steps, the Universal Transformer +is equivalent to a multi-layer Transformer with tied parameters across its +layers. + +### Universal Transformer with Dynamic Halting +In sequence processing systems, certain symbols (e.g. some words or phonemes) +are usually more ambiguous than others. It is, therefore, reasonable to +allocate more processing resources to these more ambiguous symbols. + +As stated before, the standard Transformer applies the same amount of +computations (fixed number of layers) to all symbols in all inputs. +To address this, Universal Transformer with dynamic halting modulates +the number of computational steps needed to process each input symbol +dynamically based on a scalar pondering value that is predicted by the model at +each step. The pondering values are in a sense the model’s estimation of +how much further computation is required for the input symbols at each +processing step. + +Universal Transformer with dynamic halting uses an Adaptive +Computation Time (ACT) mechanism, which was originally proposed for RNNS, to +enable conditional computation. + +Universal Transformer with Adaptive Computation + +More precisely, Universal Transformer with dynamic halting adds a dynamic ACT +halting mechanism to each position in the input sequence. Once the per-symbol +recurrent block halts (indicating a sufficient number of revisions for that +symbol), its state is simply copied to the next step until all blocks halt or +we reach a maximum number of steps. The final output of the encoder is +then the final layer of representations produced in this way. + +## Reference +This code is developed by [Fuzhao Xue](https://xuefuzhao.github.io/) and +[Mostafa Dehghani](https://mostafadehghani.com/). +If you use UT, please cite the paper. +``` +@article{dehghani2018universal, + title={Universal transformers}, + author={Dehghani, Mostafa and Gouws, Stephan and Vinyals, Oriol and Uszkoreit, Jakob and Kaiser, {\L}ukasz}, + journal={arXiv preprint arXiv:1807.03819}, + year={2018} +} +``` diff --git a/scenic/projects/baselines/universal_transformer/fig/AdaptiveUT.gif b/scenic/projects/baselines/universal_transformer/fig/AdaptiveUT.gif new file mode 100644 index 0000000000000000000000000000000000000000..083c62147259f51eb6b08fa5e89bb90aa2785dde --- /dev/null +++ b/scenic/projects/baselines/universal_transformer/fig/AdaptiveUT.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e77ae5c0f3daaba51c4294d622f04e7d1e54e910ab27e90b453041e059359d2 +size 12128643 diff --git a/scenic/projects/baselines/universal_transformer/fig/UTtransformer.gif b/scenic/projects/baselines/universal_transformer/fig/UTtransformer.gif new file mode 100644 index 0000000000000000000000000000000000000000..2feb417e055b37f58c48a16629c06a90b2cb2ef9 --- /dev/null +++ b/scenic/projects/baselines/universal_transformer/fig/UTtransformer.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:205c3c3c9b9fbca4f2a5931048d5f4590b17d063303dd66b0122f9c325b51132 +size 9748237 diff --git a/scenic/projects/baselines/universal_transformer/layers.py b/scenic/projects/baselines/universal_transformer/layers.py new file mode 100644 index 0000000000000000000000000000000000000000..9afac097897daf08e44f8e8777f414e53d490210 --- /dev/null +++ b/scenic/projects/baselines/universal_transformer/layers.py @@ -0,0 +1,273 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Adaptive Computation Time layers.""" + +from typing import Any + +from flax import linen as nn +import jax +import jax.numpy as jnp +import ml_collections + + +class Identity(nn.Module): + """Identity layer (used for shunting).""" + + @nn.compact + def __call__(self, *args): + # Inputs and outputs must maintain same tree structure. + return args[0] if len(args) == 1 else args + + +class ActStep(nn.Module): + """Takes an ACT step.""" + ac_config: ml_collections.ConfigDict + layer: nn.Module + + @nn.compact + def __call__(self, inputs: Any) -> Any: + """An act step (which either adaptivaly appies the layer or skips). + + Args: + inputs: A tuple of: - state: An array of shape `[batch_size, length, + channel]`. - halting_probability: An array containing the halting probs. + - remainders: An array containing the act remainders. - n_updates: An + array containing the act n_updates. - previous_state: An array that has + the previous state. - layer_call_args: Arguments to be passed to the + self.layer. + + Returns: + A tupe of (output_state, new halting_probabilities, + updated remainders, updated n_updates, new_state). + """ + threshold = 1.0 - self.ac_config.act_epsilon + act_type = self.ac_config.act_type + halting_bias_init = self.ac_config.act_halting_bias_init + act_level = self.ac_config.act_level + + (state, halting_probability, remainders, n_updates, previous_state, + *layer_call_args) = inputs + if act_type == 'random': + # Random as halting probability, to be used as a baseline. + rng = jax.random.PRNGKey(0) # bind rng to step? + # TODO(dehghani): currently, it gives the error of: + # ScanACTFunction_0 needs PRNG for "dropout"! + p = jax.random.uniform(rng, shape=halting_probability.shape) + + else: + p = nn.sigmoid( + nn.Dense( + features=1, + use_bias=True, + kernel_init=nn.initializers.zeros, + bias_init=lambda k, s, *_: jnp.full(s, halting_bias_init), + dtype=jnp.float32, + name='step_halting_prob')(state)) + + if act_level == 'per_example': + # Average over all tokens: + p = jnp.mean(p, axis=1) + p = jnp.squeeze(p, axis=-1) + + # Create a mask for inputs which have not halted yet. + still_running = jnp.less(halting_probability, 1.0).astype(jnp.float32) + + # Create a mask for inputs which halted at this step. + new_halted = jnp.greater(halting_probability + p * still_running, + threshold).astype(jnp.float32) * still_running + + # Crerate mask of inputs which haven't halted and didn't halt this step. + still_running = jnp.less_equal(halting_probability + p * still_running, + threshold).astype( + jnp.float32) * still_running + + # Add the halting probability for this step to the halting + # probabilities for those inputs which haven't halted yet. + halting_probability += p * still_running + + # Compute remainders for the inputs which halted at this step. + remainders += new_halted * (1 - halting_probability) + + # Add the remainders to those inputs which halted at this step. + halting_probability += new_halted * remainders + + # Increment n_updates for all inputs which are still running. + n_updates += still_running + new_halted + + # Compute the weight to be applied to the new state and output: + # 0: when the input has already halted. + # p: when the input hasn't halted yet. + # remainders: when it halted this step. + update_weights = jnp.expand_dims( + p * still_running + new_halted * remainders, -1) + if act_level == 'per_example': + update_weights = jnp.expand_dims(update_weights, -1) + + # Apply the layer on the state. + output_state = self.layer(state, *layer_call_args) + + if act_type in ['basic', 'random']: + # Update running part in the weighted state and keep the rest + new_state = ((output_state * update_weights) + (previous_state * + (1 - update_weights))) + elif act_type == 'accumulated': + # Add in the weighted state. + new_state = (output_state * update_weights) + previous_state + else: + raise ValueError(f'Unknown act_type {act_type}!') + + return (output_state, halting_probability, remainders, n_updates, new_state, + *layer_call_args) + + +class ACTFunction(nn.Module): + """Adaptive Computation Time Function to help we use nn.scan on ACT.""" + ac_config: ml_collections.ConfigDict + layer: nn.Module + stop_fn: Any + + def setup(self): + self.act_step = ActStep( + ac_config=self.ac_config, layer=self.layer, name='act_step') + + def take_a_step(self, x) -> Any: + return self.act_step(x) + + def skip_a_step(self, x) -> Any: # Shunt + return x + + @nn.compact + def __call__(self, x, _) -> Any: + if self.is_mutable_collection('params'): # Init-mode + out = self.take_a_step(x) + else: + decision = self.stop_fn(x) + out = nn.cond(decision, self.skip_a_step, self.take_a_step, self, x) + return out, None + + +class AdaptiveComputationTime(nn.Module): + """Adaptive Computation Time module, based on: arxiv.org/abs/1807.03819.""" + + ac_config: ml_collections.ConfigDict + layer: nn.Module + share_parameters: bool + + @nn.compact + def __call__(self, x: jnp.ndarray, *layer_call_args): + + threshold = 1.0 - self.ac_config.act_epsilon + max_steps = self.ac_config.act_max_steps + + state = x + original_state_shape = state.shape + + if self.ac_config.act_level == 'per_example': + state_slice = slice(0, 1) + elif self.ac_config.act_level == 'per_token': + state_slice = slice(0, 2) + else: + raise ValueError(f'Unknown act_level {self.ac_config.act_level}') + + # Dynamic shape for update tensors below. + update_shape = state.shape[state_slice] + # Halting probabilities (p_t^n in the paper). + halting_probability = jnp.zeros(update_shape) + # Remainders (R(t) in the paper). + remainders = jnp.zeros(update_shape) + # Number of updates performed (N(t) in the paper). + n_updates = jnp.zeros(update_shape) + # Previous cell states (s_t in the paper). + previous_state = jnp.zeros_like(state) + + # Define one stop function to decide the routing result. + def stop_fn(inputs: Any) -> jnp.ndarray: + # Returns True if all of halting probability >= 1-eps. + _, halting_probability, _, _, _, *_ = inputs + return jnp.all(jnp.greater_equal(halting_probability, threshold)) + + # Run max_steps, for each sample/token, when the decision is True, + # go to the shunt_layer. + intermedia_output = (state, halting_probability, remainders, n_updates, + previous_state, *layer_call_args) + + if self.share_parameters: + # Scan over `ACTFunction` while broadcasing (sharing) the params. + act_fn = nn.scan( + ACTFunction, + variable_broadcast='params', + split_rngs={ + 'params': False, + 'dropout': True + }, + length=max_steps) + + else: + # When we want to have different parameters for different layers, if we + # use simple nn.scan and set "variable_broadcast=None", we also get + # different parameters for the haulting mechaniems (the dense layer the + # predicts the halting probs) for different layers, however we want to + # have the same mdoule make the halting decision across all layers. + # To do that we need to map variables to two collections: `params` and + # `shared_params` before sending it to the scan, then set + # variable_broadcast='shared_params', and then map them back to a single + # collection. + def trans_in_fn(target): + return { + 'params': + dict( + target.get('params', {}), **target.get('shared_params', {})) + } + + def trans_out_fn(target): + params = target.get('params', {}) + shared_params = {} + if 'act_step' in params: + shared_params['act_step'] = params.pop('act_step') + return {'params': params, 'shared_params': shared_params} + + act_fn_two_collections = nn.scan( + # Map params to a two collections. + nn.map_variables( + ACTFunction, ['params', 'shared_params'], + trans_in_fn=trans_in_fn, + trans_out_fn=trans_out_fn, + mutable=True), + variable_broadcast='shared_params', + variable_axes={'params': 0}, + split_rngs={ + 'params': False, + 'dropout': True + }, + length=max_steps) + + # Map all params back to a single collection. + act_fn = nn.map_variables( + act_fn_two_collections, ['params', 'shared_params'], + trans_in_fn=trans_out_fn, + trans_out_fn=trans_in_fn, + mutable=True) + + output, _ = act_fn(self.ac_config, self.layer, stop_fn)(intermedia_output, + None) + + (output_state, halting_probability, remainders, ponder_times, new_state, + *layer_call_args) = output + + # Check some shapes + assert output_state.shape == new_state.shape == original_state_shape + for x in [halting_probability, remainders, n_updates]: + assert x.shape == original_state_shape[state_slice] + return new_state, (ponder_times, remainders) diff --git a/scenic/projects/baselines/universal_transformer/main.py b/scenic/projects/baselines/universal_transformer/main.py new file mode 100644 index 0000000000000000000000000000000000000000..cad7e584566d18777a4b8d176b8f9b9263455294 --- /dev/null +++ b/scenic/projects/baselines/universal_transformer/main.py @@ -0,0 +1,63 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for Universal Transformer.""" + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.baselines.universal_transformer import trainer +from scenic.projects.baselines.universal_transformer.uvit import uvit +from scenic.train_lib import train_utils + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name: str): + """Get the model class for the Universal Transformer project.""" + if model_name == 'uvit': + return uvit.UViTMultiLabelClassificationModel + else: + raise ValueError(f'Unrecognized model: {model_name}.') + + +def get_trainer(trainer_name): + if trainer_name == 'ut_trainer': + return trainer.train + else: + raise ValueError(f'Unrecognized trainer: {trainer_name}.') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the Universal Transformer project.""" + # Build the loss_fn, metrics, and flax_model. + model_cls = get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + get_trainer(config.trainer_name)( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/baselines/universal_transformer/trainer.py b/scenic/projects/baselines/universal_transformer/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..ebb97a34df908ba0dda1fdb32d8ba531750b8724 --- /dev/null +++ b/scenic/projects/baselines/universal_transformer/trainer.py @@ -0,0 +1,683 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training script with transfer learning utilities.""" + +import functools +from typing import Any, Callable, Dict, Iterator, Tuple, Optional, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.common_lib import video_utils +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils +from scenic.train_lib.transfer import fewshot_utils +from scenic.train_lib.transfer import linear_probe_utils + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Any, Batch, Optional[jnp.ndarray]], float] +LrFn = Callable[[jnp.ndarray], jnp.ndarray] + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + metrics_fn: MetricFn, + lr_fn: LrFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, + Any]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, params, and optimizer. The buffer of this argument can + be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + lr_fn: The learning rate fn used for the logging the learning rate. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training and computed metrics for logging. + """ + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + rng=mixup_rng) + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + (logits, auxiliary_outputs), new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, auxiliary_outputs, batch, variables['params']) + return loss, (new_model_state, logits, auxiliary_outputs) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (train_cost, compute_outputs), grad = compute_gradient_fn(train_state.params) + (new_model_state, logits, auxiliary_outputs) = compute_outputs + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm') is not None: + grad = clip_grads(grad, config.max_grad_norm) + + updates, new_opt_state = train_state.tx.update(grad, train_state.opt_state, + train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)])) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + training_logs['learning_rate'] = lr_fn(train_state.global_step) + + # Only logging auxiliary_outputs when we are using act + if config.model.get('ac_config', None): + # Logging the ponder loss, n_updates (N_t) and remainders (R_t) + ponder_times, remainders = auxiliary_outputs + p_t = ponder_times + remainders + + # We only do mean when ac_config.act_level == per_example. + # When ac_config.act_level == per_token, we do sum first. + # The jnp.mean here does not consider the masking and padding. + # It is fine for logging. + if jnp.ndim(p_t) == 1: + n_t_loss = jax.lax.pmean(ponder_times, axis_name='batch') + r_t_loss = jax.lax.pmean(remainders, axis_name='batch') + p_t_loss = jax.lax.pmean(p_t, axis_name='batch') + else: + n_t_loss = jax.lax.pmean(jnp.mean(ponder_times), axis_name='batch') + r_t_loss = jax.lax.pmean(jnp.mean(remainders), axis_name='batch') + p_t_loss = jax.lax.pmean(jnp.mean(p_t), axis_name='batch') + + training_logs['N_updates N(t)'] = n_t_loss + training_logs['Remainder R(t)'] = r_t_loss + training_logs['Ponder loss P_t'] = p_t_loss + + metrics = metrics_fn(logits, batch) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + + return new_train_state, metrics, training_logs + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], jnp.ndarray]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, params and optimizer state. The buffer of + this argument can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and logits. + """ + variables = {'params': train_state.params, **train_state.model_state} + logits, _ = flax_model.apply( + variables, batch['inputs'], train=False, mutable=False, debug=debug) + metrics = metrics_fn(logits, batch) + return metrics, logits + + +def representation_fn( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + representation_layer: str, + gather_to_host: bool = True +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Feeds the inputs to the model and returns their representations. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data from the dataset. + flax_model: A Flax model. + representation_layer: The name of the layer to use as the representation. + gather_to_host: Whether to gather results from all devices to the host, + rather than leaving them distributed. + + Returns: + Representation learned by the model for the given inputs and the labels and + masks. If `gather_to_host` is True, these are collected from all hosts. + """ + variables = {'params': train_state.params, **train_state.model_state} + + representation_layer_parts = representation_layer.split('/') + filter_rep = lambda mdl, _: mdl.name == representation_layer_parts[-1] + _, model_state = flax_model.apply( + variables, + batch['inputs'], + train=False, + capture_intermediates=filter_rep, + mutable=['intermediates'], + debug=False) + if 'intermediates' not in model_state: + raise ValueError(f'Layer with name "{representation_layer}"' + ' does not exist in your model.') + + representation = model_state['intermediates'] + for rep_layer in representation_layer_parts: + if rep_layer: + representation = representation[rep_layer] + representation = representation['__call__'][0] + if gather_to_host: + representation = jax.lax.all_gather(representation, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return representation, batch['label'], batch['batch_mask'] + + +def representation_fn_video( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + config: ml_collections.ConfigDict, + gather_to_host: bool = True, +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Feeds the video inputs to the model and returns their representations. + + Video representations are obtained by temporally average-pooling per-frame + representations from the input video clip. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, params, and optimizer. The buffer of this + argument can be donated to the computation. + batch: A single batch of data from the video dataset. + flax_model: A Flax model. + config: Configurations of the experiment. + gather_to_host: Whether to gather results from all devices to the host, + rather than leaving them distributed. + + Returns: + Representation learned by the model for the given inputs and the labels and + masks. If `gather_to_host` is True, these are collected from all hosts. + The shape of the returned tensors when `gather_to_host` is False are: + representation: `[num_devices, global_batch, features]`. + labels: `[num_devices, global_batch]`. + mask: `[num_devices, global_batch]`. + If `gather_to_host` is True then each shape is prepended with + `[num_hosts,]` + """ + variables = {'params': train_state.params, **train_state.model_state} + + representation_layer = config.video_fewshot.representation_layer.split('/') + filter_rep = lambda mdl, _: mdl.name == representation_layer[-1] + + def get_representation(inputs, variables, training, capture_intermediates, + mutable, debug): + _, model_state = flax_model.apply( + variables, + inputs, + train=training, + capture_intermediates=capture_intermediates, + mutable=mutable, + debug=debug) + if 'intermediates' not in model_state: + raise ValueError( + f'Layer with name "{config.video_fewshot.representation_layer}"' + ' does not exist in your model.') + + representation = model_state['intermediates'] + for rep_layer in representation_layer: + if rep_layer: + representation = representation[rep_layer] + representation = representation['__call__'][0] + return representation + + # Get representations for each frame in the video sample. + if config.video_fewshot.get('n_sampled_frames'): + inputs = video_utils.sample_frames_uniformly( + batch['inputs'], config.video_fewshot.n_sampled_frames) + else: + inputs = batch['inputs'] + representation = jax.vmap( + functools.partial( + get_representation, + variables=variables, + training=False, + capture_intermediates=filter_rep, + mutable=['intermediates'], + debug=False), + in_axes=1, + out_axes=1, + axis_name='time')( + inputs) + # Average pooling of representations over time axis. + representation = jnp.mean(representation, axis=1) + if gather_to_host: + representation = jax.lax.all_gather(representation, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return representation, batch['label'], batch['batch_mask'] + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current global_step, + model_state, rng, and the optimizer), train_summary and eval_summary which + are dict of metrics (from the last evaluation and train metric logging + respectively). These outputs are used for regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng, + ) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params=params) + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + rng, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + if init_checkpoint_path is not None: + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + # Load params from the init_model. + train_state = model.init_from_train_state( # pytype: disable=attribute-error + train_state, restored_train_state, restored_model_cfg) + del restored_train_state + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + lr_fn=lr_fn, + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + if 'fewshot' in config: + representation_fn_fewshot = functools.partial( + representation_fn, + flax_model=model.flax_model, + representation_layer=config.fewshot.representation_layer) + fewshotter = fewshot_utils.FewShotEvaluator(representation_fn_fewshot, + config.fewshot) + + if 'video_fewshot' in config: + representation_fn_video_fewshot = functools.partial( + representation_fn_video, flax_model=model.flax_model, config=config) + video_fewshotter = fewshot_utils.FewShotEvaluatorVideo( + representation_fn_video_fewshot, config.video_fewshot) + + if 'linear_probe' in config: + representation_fn_linear_probe = functools.partial( + representation_fn, + flax_model=model.flax_model, + representation_layer=config.linear_probe.representation_layer, + gather_to_host=False) + rng, linear_probe_rng = jax.random.split(rng) + linear_probe = linear_probe_utils.LinearEvaluator( + representation_fn=representation_fn_linear_probe, + rng=linear_probe_rng, + linear_eval_config=config.linear_probe) + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + def evaluate(train_state: train_utils.TrainState, step: int, + valid_iter: Iterator[Batch], + num_valid_ex: int) -> Dict[str, Any]: + eval_summary = {} + if not isinstance(valid_iter, dict): # Only on validation set. + valid_iter, num_valid_ex = {'valid': valid_iter}, {'valid': num_valid_ex} + + for val_name, val_iter in valid_iter.items(): + num_ex = num_valid_ex[val_name] + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int(np.ceil(num_ex / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + eval_metrics = [] + for _ in range(steps_per_eval): + eval_batch = next(val_iter) + if dataset.meta_data['target_is_onehot']: # Which includes multi-hot. + # Ignore the entries with all zero label for evaluation. + eval_batch['batch_mask'] *= eval_batch['label'].max(axis=-1) + e_metrics, _ = eval_step_pmapped(train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + eval_summary.update( + train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + writer=writer, + prefix=val_name)) + del eval_metrics + writer.flush() + return eval_summary + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, + writer=writer, + every_secs=None, + every_steps=config.get('report_progress_step', log_summary_steps), + ) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + # t_logs.update({'learning_rate': lr_fn(step)}) + extra_training_logs.append(t_logs) + + # Quick indication that training is happening. + logging.log_first_n(logging.INFO, 'Finished training step %d.', 5, step) + for h in hooks: + h(step) + + ############### LOG TRAIN SUMMARY ############### + if (step % log_summary_steps == 1) or (step + == total_steps) or chrono.warmup: + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_training_logs), + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summary = evaluate(train_state, step, dataset.valid_iter, + dataset.meta_data['num_eval_examples']) + chrono.resume() + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 1 and step > 1) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + train_utils.save_checkpoint(workdir, unrep_train_state) + del unrep_train_state + chrono.resume() # Un-pause now. + + ##################### FEWSHOT EVALUATION ############################ + if 'fewshot' in config: + # Compute few-shot on-the-fly evaluation. + if (step % config.fewshot.log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('fewshot'): + results = fewshotter.run_all(train_state, config.fewshot.datasets) + fewshotter.log_fewshot_summary( + writer=writer, step=step, results=results) + del results + writer.write_scalars(step, {'zz/epoch': step / steps_per_epoch}) + writer.flush() + chrono.resume() # Un-pause now. + + ########### FEWSHOT EVALUATION USING VIDEO DATASETS ############### + + if 'video_fewshot' in config: + # Compute few-shot on-the-fly evaluation using video dataset. + if ((step % config.video_fewshot.log_eval_steps == 1) or + step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('video_fewshot'): + results = video_fewshotter.run_all(train_state, + config.video_fewshot.datasets) + video_fewshotter.log_fewshot_summary( + writer=writer, step=step, results=results) + del results + writer.write_scalars(step, {'zz/epoch': step / steps_per_epoch}) + writer.flush() + chrono.resume() # Un-pause now. + + ##################### LINEAR-PROBE EVALUATION ########################## + if 'linear_probe' in config: + if (config.linear_probe.log_eval_steps > 0 and + step % config.linear_probe.log_eval_steps == 1) or (step + == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('linear_probe'): + linear_probe.run_all( + train_state, + config.linear_probe.datasets, + writer=writer, + repr_step=step) + writer.flush() + chrono.resume() # Un-pause now. + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/baselines/universal_transformer/uvit/configs/imagenet_uvit_config.py b/scenic/projects/baselines/universal_transformer/uvit/configs/imagenet_uvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..5d34a89760a1abbeb074e97f80bce78b81bd8479 --- /dev/null +++ b/scenic/projects/baselines/universal_transformer/uvit/configs/imagenet_uvit_config.py @@ -0,0 +1,137 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# pylint: disable=line-too-long +r"""Default configs for Regularized UViT on ImageNet2012. + +""" +# pylint: disable=line-too-long +import ml_collections +_IMAGENET_TRAIN_SIZE = 1281167 +NUM_CLASSES = 1000 +VARIANT = 'B/16' + + +def get_config(runlocal=''): + """Returns the UViT experiment configuration for ImageNet.""" + runlocal = bool(runlocal) + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet-uvit' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'imagenet2012' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train' + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)|flip_lr' + '|randaug(2, 15)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|resize_small(256)|central_crop(224)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 250_000 + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'uvit' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = { + 'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280 + }[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = { + 'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120 + }[version] + config.model.num_layers = { + 'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32 + }[version] + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0.0 + config.model.dropout_rate = 0.1 + config.model.stochastic_depth = 0.1 + config.model_dtype_str = 'float32' + config.model.parameter_sharing = False # True or False + # ACT Config + # Commented out all config.model.ac_config to disable ACT + config.model.ac_config = ml_collections.ConfigDict() + config.model.ac_config.act_max_steps = 12 + config.model.ac_config.act_epsilon = 0.01 + config.model.ac_config.act_type = 'basic' # 'random', 'accumulated', 'basic' + config.model.ac_config.act_level = 'per_example' # 'per_example', 'per_token' + config.model.ac_config.act_halting_bias_init = -1.0 + config.model.ac_config.act_loss_weight = 0.01 + # Training. + config.trainer_name = 'ut_trainer' + config.optimizer = 'adamw' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 300 + config.log_eval_steps = 1000 + config.batch_size = 8 if runlocal else 4096 + config.rng_seed = 42 + config.init_head_bias = -6.9 # -log(1000) + # Learning rate. + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 0.001 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = base_lr + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.5 + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.m = None # Placeholder for randaug strength. + config.l = None # Placeholder for randaug layers. + return config + + diff --git a/scenic/projects/baselines/universal_transformer/uvit/uvit.py b/scenic/projects/baselines/universal_transformer/uvit/uvit.py new file mode 100644 index 0000000000000000000000000000000000000000..61dcdc195644d45abbe768b34368a7dd0d8a04b5 --- /dev/null +++ b/scenic/projects/baselines/universal_transformer/uvit/uvit.py @@ -0,0 +1,419 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Universal Vision Transformer with Adaptive Computation Time.""" + +from typing import Any, Optional + +import flax.linen as nn +from flax.training import common_utils +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils +from scenic.model_lib.base_models.multilabel_classification_model import MultiLabelClassificationModel +from scenic.model_lib.layers import attention_layers +from scenic.model_lib.layers import nn_layers +from scenic.projects.baselines import vit +from scenic.projects.baselines.universal_transformer import layers + + +def ponder_loss_fn( + ponder_times: jnp.ndarray, + remainders: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, +) -> jnp.ndarray: + """Ponder Loss for UT. + + Args: + ponder_times: Input array of any shape. + remainders: Input array of any shape. + weights: None or array of any shape. + + Returns: + loss: A scaler to regularize the ACT + """ + + if weights is not None: + normalization = weights.sum() + 1e-8 + else: + normalization = np.prod(ponder_times.shape) + + p_t = ponder_times + remainders + # We only do mean when ac_config.act_level == per_example. + # When ac_config.act_level == per_token, we do sum first. + if jnp.ndim(p_t) == 1: + loss = jnp.sum(p_t) / normalization + else: + loss = jnp.sum(jnp.sum(p_t, axis=-1)) / normalization + return loss + + +class UTStochasticDepth(nn.Module): + """Performs layer-dropout (also known as stochastic depth). + + Described in + Huang & Sun et al, "Deep Networks with Stochastic Depth", 2016 + https://arxiv.org/abs/1603.09382 + + Attributes: + rate: the layer dropout probability (_not_ the keep rate!). + deterministic: If false (e.g. in training) the inputs are scaled by `1 / (1 + - rate)` and the layer dropout is applied, whereas if true (e.g. in + evaluation), no stochastic depth is applied and the inputs are returned as + is. + Note: This is a repeated implementation of model_lib.nn_layers.StochasticDepth + The implementation here is to match the nn.cond in UT + """ + rate: float = 0.0 + deterministic: Optional[bool] = None + + @nn.compact + def __call__(self, + x: jnp.ndarray, + deterministic: Optional[bool] = None) -> jnp.ndarray: + """Applies a stochastic depth mask to the inputs. + + Args: + x: Input tensor. + deterministic: If false (e.g. in training) the inputs are scaled by `1 / + (1 - rate)` and the layer dropout is applied, whereas if true (e.g. in + evaluation), no stochastic depth is applied and the inputs are returned + as is. + + Returns: + The masked inputs reweighted to preserve mean. + """ + if self.rate <= 0.0: + return x + if deterministic: + return x + else: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + rng = self.make_rng('dropout') + mask = jax.random.bernoulli(rng, self.rate, shape) + return x * (1.0 - mask) + + +class Encoder1DBlock(nn.Module): + """Transformer encoder layer. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: Number of self-attention heads. + dtype: The dtype of the computation (default: float32). + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_depth: probability of dropping a layer linearly grows from 0 to + the provided value. + + Returns: + output after transformer encoder block. + """ + mlp_dim: int + num_heads: int + dtype: Any = jnp.float32 + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + deterministic: bool = False + + @nn.compact + def __call__(self, inputs: jnp.ndarray) -> jnp.ndarray: + """Applies Encoder1DBlock module. + + Args: + inputs: Input data. + + Returns: + Output after transformer encoder block. + """ + # Attention block. + assert inputs.ndim == 3 + x = nn.LayerNorm(dtype=self.dtype)(inputs) + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + dtype=self.dtype, + kernel_init=nn.initializers.xavier_uniform(), + broadcast_dropout=False, + deterministic=self.deterministic, + dropout_rate=self.attention_dropout_rate)(x, x) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=self.deterministic) + x = UTStochasticDepth(rate=self.stochastic_depth)(x, self.deterministic) + x = x + inputs + + # MLP block. + y = nn.LayerNorm(dtype=self.dtype)(x) + y = attention_layers.MlpBlock( + mlp_dim=self.mlp_dim, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6))( + y, deterministic=self.deterministic) + y = UTStochasticDepth(rate=self.stochastic_depth)(y, self.deterministic) + return y + x + + +class UTEncoder(nn.Module): + """Universal Transformer Encoder. + + Attributes: + num_layers: Number of layers. + mlp_dim: Dimension of the mlp on top of attention block. + inputs_positions: Input subsequence positions for packed examples. + dropout_rate: Dropout rate. + stochastic_depth: probability of dropping a layer linearly grows from 0 to + the provided value. Our implementation of stochastic depth follows timm + library, which does per-example layer dropping and uses independent + dropping patterns for each skip-connection. + dtype: Dtype of activations. + """ + num_layers: int + mlp_dim: int + num_heads: int + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + parameter_sharing: bool = True + ac_config: Optional[ml_collections.ConfigDict] = None + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, train: bool = False): + """Applies Transformer model on the inputs.""" + assert inputs.ndim == 3 # Shape is `[batch, len, emb]`. + x = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name='posembed_input')( + inputs) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + dtype = jax.dtypes.canonicalize_dtype(self.dtype) + + # We use layers.AdaptiveComputationTime only when we are doing ACT. + if self.ac_config is None: + # We make the layer first if we are using parameter sharing. + if not self.parameter_sharing: + for i in range(self.num_layers): + x = Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=self.stochastic_depth, + deterministic=not train, + name='encoderblock_' + str(i), + dtype=dtype)( + x) + else: + encoder_block = Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=self.stochastic_depth, + deterministic=not train, + name='encoderblock', + dtype=dtype) + for i in range(self.num_layers): + x = encoder_block(x) + auxiliary_outputs = None + else: + encoder_block = Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=self.stochastic_depth, + deterministic=not train, + name='encoderblock', + dtype=dtype) + x, auxiliary_outputs = layers.AdaptiveComputationTime( + self.ac_config, encoder_block, self.parameter_sharing, + name='act')(x) + encoded = nn.LayerNorm(name='encoder_norm')(x) + return encoded, auxiliary_outputs + + +class UViT(nn.Module): + """Universall Vision Transformer model. + + Attributes: + num_classes: Number of output classes. + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + patches: Configuration of the patches extracted in the stem of the model. + ac_config: Configuration of the adaptive computation. + hidden_size: Size of the hidden state of the output of model's stem. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + dtype: JAX data type for activations. + """ + + num_classes: int + mlp_dim: int + num_layers: int + num_heads: int + patches: ml_collections.ConfigDict + ac_config: ml_collections.ConfigDict + hidden_size: int + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + classifier: str = 'gap' + parameter_sharing: bool = True + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, debug: bool = False): + + fh, fw = self.patches.size + # Extracting patches and then embedding is in fact a single convolution. + x = nn.Conv( + self.hidden_size, (fh, fw), + strides=(fh, fw), + padding='VALID', + name='embedding')( + x) + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + + # If we want to add a class token, add it here. + if self.classifier == 'token': + cls = self.param('cls', nn.initializers.zeros, (1, 1, c), x.dtype) + cls = jnp.tile(cls, [n, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + + x, auxiliary_outputs = UTEncoder( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + ac_config=self.ac_config, + stochastic_depth=self.stochastic_depth, + parameter_sharing=self.parameter_sharing, + dtype=self.dtype, + name='UTransformer')( + x, train=train) + + if self.classifier in ('token', '0'): + x = x[:, 0] + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=1) + + x = nn_layers.IdentityLayer(name='pre_logits')(x) + x = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x) + return x, auxiliary_outputs + + +class UViTMultiLabelClassificationModel(MultiLabelClassificationModel): + """Universal Vision Transformer model for multi-label classification task.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return UViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + patches=self.config.model.patches, + ac_config=self.config.model.get('ac_config'), + hidden_size=self.config.model.hidden_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + stochastic_depth=self.config.model.get('stochastic_depth', 0.0), + parameter_sharing=self.config.model.get('parameter_sharing', True), + dtype=model_dtype, + ) + + def loss_function( + self, # pytype: disable=signature-mismatch # overriding-parameter-count-checks + logits: jnp.ndarray, + auxiliary_outputs: Any, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None, + ) -> float: + """Returns sigmoid cross entropy loss with an L2 penalty on the weights. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + auxiliary_outputs: Output of model auxiliary_outputs, (ponder_times, + remainders) + batch: Batch of data that has 'label' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + weights = batch.get('batch_mask') + + if self.dataset_meta_data.get('target_is_onehot', False): + multihot_target = batch['label'] + else: + # This is to support running a multi-label classification model on + # single-label classification tasks + multihot_target = common_utils.onehot(batch['label'], logits.shape[-1]) + + sig_ce_loss = model_utils.weighted_sigmoid_cross_entropy( + logits, + multihot_target, + weights, + label_smoothing=self.config.get('label_smoothing')) + if self.config.get('l2_decay_factor') is None: + total_loss = sig_ce_loss + else: + l2_loss = model_utils.l2_regularization(model_params) + total_loss = sig_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + ac_config = self.config.model.get('ac_config') + if (ac_config is not None) and (ac_config.act_loss_weight > 0.0): + ponder_loss = ponder_loss_fn(auxiliary_outputs[0], auxiliary_outputs[1]) + total_loss += ac_config.act_loss_weight * ponder_loss + return total_loss # pytype: disable=bad-return-type # jax-ndarray + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is writen to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + raise NotImplementedError diff --git a/scenic/projects/baselines/vit.py b/scenic/projects/baselines/vit.py new file mode 100644 index 0000000000000000000000000000000000000000..8a5b56e5437d2190bf14c9a4d002d1cce358d3c1 --- /dev/null +++ b/scenic/projects/baselines/vit.py @@ -0,0 +1,580 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Vision Transformer.""" + +from typing import Any, Callable, Optional, Sequence + +from absl import logging +import flax +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models.multilabel_classification_model import MultiLabelClassificationModel +from scenic.model_lib.layers import attention_layers +from scenic.model_lib.layers import nn_layers +import scipy +from tensorflow.io import gfile + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +class AddPositionEmbs(nn.Module): + """Adds learned positional embeddings to the inputs. + + Attributes: + posemb_init: Positional embedding initializer. + + Returns: + Output in shape `[bs, timesteps, in_dim]`. + """ + posemb_init: Initializer = nn.initializers.normal(stddev=0.02) # From BERT. + + @nn.compact + def __call__(self, inputs: jnp.ndarray) -> jnp.ndarray: + # Inputs.shape is (batch_size, seq_len, emb_dim). + assert inputs.ndim == 3, ('Number of dimensions should be 3,' + ' but it is: %d' % inputs.ndim) + pos_emb_shape = (1, inputs.shape[1], inputs.shape[2]) + pe = self.param('pos_embedding', self.posemb_init, pos_emb_shape, + inputs.dtype) + return inputs + pe + + +class MAPHead(nn.Module): + """Multihead Attention Pooling.""" + mlp_dim: Optional[int] = None # Defaults to 4x input dim + num_heads: int = 12 + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x): + n, _, d = x.shape + probe = self.param('probe', nn.initializers.xavier_uniform(), (1, 1, d), + x.dtype) + probe = jnp.tile(probe, [n, 1, 1]) + + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, kernel_init=nn.initializers.xavier_uniform() + )(probe, x) + + y = nn.LayerNorm()(x) + x = x + attention_layers.MlpBlock( + mlp_dim=self.mlp_dim, + dtype=self.dtype, + dropout_rate=0.0)(y, deterministic=True) + return x[:, 0] + + +class Encoder1DBlock(nn.Module): + """Transformer encoder layer. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: Number of self-attention heads. + dtype: The dtype of the computation (default: float32). + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_depth: probability of dropping a layer linearly grows + from 0 to the provided value. + + Returns: + output after transformer encoder block. + """ + mlp_dim: int + num_heads: int + dtype: Any = jnp.float32 + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, deterministic: bool) -> jnp.ndarray: + """Applies Encoder1DBlock module. + + Args: + inputs: Input data. + deterministic: Deterministic or not (to apply dropout). + + Returns: + Output after transformer encoder block. + """ + # Attention block. + assert inputs.ndim == 3 + x = nn.LayerNorm(dtype=self.dtype)(inputs) + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + dtype=self.dtype, + kernel_init=nn.initializers.xavier_uniform(), + broadcast_dropout=False, + deterministic=deterministic, + dropout_rate=self.attention_dropout_rate)(x, x) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic) + x = nn_layers.StochasticDepth(rate=self.stochastic_depth)(x, deterministic) + x = x + inputs + + # MLP block. + y = nn.LayerNorm(dtype=self.dtype)(x) + y = attention_layers.MlpBlock( + mlp_dim=self.mlp_dim, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6))( + y, deterministic=deterministic) + y = nn_layers.StochasticDepth(rate=self.stochastic_depth)(y, deterministic) + return y + x + + +class Encoder(nn.Module): + """Transformer Encoder. + + Attributes: + num_layers: Number of layers. + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: The number of heads for multi-head self-attention. + positional_embedding: The type of positional embeddings to add to the + input tokens. Options are {learned_1d, sinusoidal_2d, none}. + dropout_rate: Dropout rate. + stochastic_depth: probability of dropping a layer linearly grows + from 0 to the provided value. Our implementation of stochastic depth + follows timm library, which does per-example layer dropping and uses + independent dropping patterns for each skip-connection. + dtype: Dtype of activations. + has_cls_token: Whether or not the sequence is prepended with a CLS token. + """ + num_layers: int + mlp_dim: int + num_heads: int + positional_embedding: str = 'learned_1d' + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + dtype: Any = jnp.float32 + has_cls_token: bool = False + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, train: bool = False): + """Applies Transformer model on the inputs. + + Args: + inputs: Input tokens of shape [batch, num_tokens, channels]. + train: If in training mode, dropout and stochastic depth is applied. + + Returns: + Encoded tokens. + """ + + assert inputs.ndim == 3 # Shape is `[batch, len, emb]`. + dtype = jax.dtypes.canonicalize_dtype(self.dtype) + + # Add positional embeddings to tokens. + if self.positional_embedding == 'learned_1d': + x = AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name='posembed_input')( + inputs) + elif self.positional_embedding == 'sinusoidal_1d': + x = attention_layers.Add1DPositionEmbedding(posemb_init=None)(inputs) + elif self.positional_embedding == 'sinusoidal_2d': + batch, num_tokens, hidden_dim = inputs.shape + if self.has_cls_token: + num_tokens -= 1 + height = width = int(np.sqrt(num_tokens)) + if height * width != num_tokens: + raise ValueError('Input is assumed to be square for sinusoidal init.') + if self.has_cls_token: + inputs_reshape = inputs[:, 1:].reshape( + [batch, height, width, hidden_dim] + ) + x = attention_layers.AddFixedSinCosPositionEmbedding()(inputs_reshape) + x = x.reshape([batch, num_tokens, hidden_dim]) + x = jnp.concatenate([inputs[:, :1], x], axis=1) + else: + inputs_reshape = inputs.reshape([batch, height, width, hidden_dim]) + x = attention_layers.AddFixedSinCosPositionEmbedding()(inputs_reshape) + x = x.reshape([batch, num_tokens, hidden_dim]) + elif self.positional_embedding == 'none': + x = inputs + else: + raise ValueError('Unknown positional embedding: ' + f'{self.positional_embedding}') + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + # Input Encoder. + for lyr in range(self.num_layers): + x = Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=(lyr / max(self.num_layers - 1, 1)) + * self.stochastic_depth, + name=f'encoderblock_{lyr}', + dtype=dtype, + )(x, deterministic=not train) + encoded = nn.LayerNorm(name='encoder_norm')(x) + return encoded + + +class ViT(nn.Module): + """Vision Transformer model. + + Attributes: + num_classes: Number of output classes. + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + positional_embedding: The type of positional embeddings to add to the + tokens at the beginning of the transformer encoder. Options are + {learned_1d, sinusoidal_2d, none}. + representation_size: Size of the representation layer in the model's head. + if None, we skip the extra projection + tanh activation at the end. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token', 'none'. + dtype: JAX data type for activations. + """ + + num_classes: int + mlp_dim: int + num_layers: int + num_heads: int + patches: ml_collections.ConfigDict + hidden_size: int + positional_embedding: str = 'learned_1d' + representation_size: Optional[int] = None + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + classifier: str = 'gap' + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, debug: bool = False): + + fh, fw = self.patches.size + # Extracting patches and then embedding is in fact a single convolution. + x = nn.Conv( + self.hidden_size, (fh, fw), + strides=(fh, fw), + padding='VALID', + name='embedding')( + x) + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + + # If we want to add a class token, add it here. + if self.classifier == 'token': + cls = self.param('cls', nn.initializers.zeros, (1, 1, c), x.dtype) + cls = jnp.tile(cls, [n, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + + x = Encoder( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + positional_embedding=self.positional_embedding, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=self.stochastic_depth, + dtype=self.dtype, + has_cls_token=self.classifier == 'token', + name='Transformer', + )(x, train=train) + + if self.classifier in ('token', '0'): + x = x[:, 0] + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=1) + elif self.classifier == 'map': + x = MAPHead( + num_heads=self.num_heads, mlp_dim=self.mlp_dim, dtype=self.dtype)(x) + elif self.classifier == 'none': + pass + else: + raise ValueError(f'Unknown classifier {self.classifier}') + + if self.representation_size is not None: + x = nn.Dense(self.representation_size, name='pre_logits')(x) + x = nn.tanh(x) + else: + x = nn_layers.IdentityLayer(name='pre_logits')(x) + + if self.num_classes > 0: + # If self.num_classes <= 0, we just return the backbone features. + x = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x) + return x + + +class ViTMultiLabelClassificationModel(MultiLabelClassificationModel): + """Vision Transformer model for multi-label classification task.""" + + def build_flax_model(self)-> nn.Module: + dtype_str = self.config.get('model_dtype_str', 'float32') + if dtype_str != 'float32': + raise ValueError('`dtype` argument is not propagated properly ' + 'in the current implmentation, so only ' + '`float32` is supported for now.') + return ViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + positional_embedding=self.config.model.get('positional_embedding', + 'learned_1d'), + representation_size=self.config.model.representation_size, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate'), + attention_dropout_rate=self.config.model.get('attention_dropout_rate'), + stochastic_depth=self.config.model.get('stochastic_depth', 0.0), + dtype=getattr(jnp, dtype_str), + ) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return ml_collections.ConfigDict({ + 'model': + dict( + num_heads=2, + num_layers=1, + representation_size=16, + mlp_dim=32, + dropout_rate=0., + attention_dropout_rate=0., + hidden_size=16, + patches={'size': (4, 4)}, + classifier='gap', + data_dtype_str='float32') + }) + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is writen to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return init_vit_from_train_state(train_state, restored_train_state, + self.config, restored_model_cfg) + + def load_augreg_params(self, train_state: Any, params_path: str, + model_cfg: ml_collections.ConfigDict) -> Any: + """Loads parameters from an AugReg checkpoint. + + See + https://github.com/google-research/vision_transformer/ + and + https://arxiv.org/abs/2106.10270 + for more information about these pre-trained models. + + Args: + train_state: A raw TrainState for the model. + params_path: Path to an Augreg checkpoint. The model config is read from + the filename (e.g. a B/32 model starts with "B_32-"). + model_cfg: Configuration of the model. Usually used for some asserts. + + Returns: + Updated train_state with params replaced with the ones read from the + AugReg checkpoint. + """ + restored_model_cfg = _get_augreg_cfg(params_path) + assert tuple(restored_model_cfg.patches.size) == tuple( + model_cfg.patches.size) + assert restored_model_cfg.hidden_size == model_cfg.hidden_size + assert restored_model_cfg.mlp_dim == model_cfg.mlp_dim + assert restored_model_cfg.num_layers == model_cfg.num_layers + assert restored_model_cfg.num_heads == model_cfg.num_heads + assert restored_model_cfg.classifier == model_cfg.classifier + + flattened = np.load(gfile.GFile(params_path, 'rb')) + restored_params = flax.traverse_util.unflatten_dict( + {tuple(k.split('/')): v for k, v in flattened.items()}) + restored_params['output_projection'] = restored_params.pop('head') + + if 'optimizer' in train_state: + # TODO(dehghani): Remove support for flax optim. + params = flax.core.unfreeze(train_state.optimizer.target) + _merge_params(params, restored_params, model_cfg, restored_model_cfg) + return train_state.replace( + optimizer=train_state.optimizer.replace( + target=flax.core.freeze(params))) + else: + params = flax.core.unfreeze(train_state.params) + _merge_params(params, restored_params, model_cfg, restored_model_cfg) + return train_state.replace(params=flax.core.freeze(params)) + + +def _get_augreg_cfg(params_path): + model = params_path.split('/')[-1].split('-')[0] + assert model in ('B_16', 'B_32'), ( + 'Currently only B/16 and B/32 models are supported.') + sz = {'B_16': 16, 'B_32': 32}[model] + return ml_collections.ConfigDict( + dict( + num_classes=0, + mlp_dim=3072, + num_layers=12, + num_heads=12, + hidden_size=768, + classifier='token', + patches=dict(size=(sz, sz)), + dropout_rate=0., + attention_dropout_rate=0., + )) + + +def _merge_params(params, restored_params, model_cfg, restored_model_cfg): + """Merges `restored_params` into `params`.""" + # Start moving parameters, one-by-one and apply changes if needed. + for m_key, m_params in restored_params.items(): + if m_key == 'output_projection': + # For the classifier head, we use a the randomly initialized params and + # ignore the one from pretrained model. + pass + + elif m_key == 'pre_logits': + if model_cfg.model.representation_size is None: + # We don't have representation_size in the new model, so let's ignore + # it from the pretained model, in case it has it. + # Note, removing the key from the dictionary is necessary to prevent + # obscure errors from the Flax optimizer. + params.pop(m_key, None) + else: + assert restored_model_cfg.model.representation_size + params[m_key] = m_params + + elif m_key == 'Transformer': + for tm_key, tm_params in m_params.items(): + if tm_key == 'posembed_input': # Might need resolution change. + posemb = params[m_key]['posembed_input']['pos_embedding'] + restored_posemb = m_params['posembed_input']['pos_embedding'] + + if restored_posemb.shape != posemb.shape: + # Rescale the grid of pos, embeddings: param shape is (1, N, d). + logging.info('Resized variant: %s to %s', restored_posemb.shape, + posemb.shape) + ntok = posemb.shape[1] + if restored_model_cfg.model.classifier == 'token': + # The first token is the CLS token. + restored_posemb_grid = restored_posemb[0, 1:] + if model_cfg.model.classifier == 'token': + # CLS token in restored model and in target. + cls_tok = restored_posemb[:, :1] + ntok -= 1 + else: + # CLS token in restored model, but not target. + cls_tok = restored_posemb[:, :0] + else: + restored_posemb_grid = restored_posemb[0] + if model_cfg.model.classifier == 'token': + # CLS token in target, but not restored model. + cls_tok = posemb[:, :1] + ntok -= 1 + else: + # CLS token not in target or restored model. + cls_tok = restored_posemb[:, :0] + + restored_gs = int(np.sqrt(len(restored_posemb_grid))) + gs = int(np.sqrt(ntok)) + if restored_gs != gs: # We need resolution change. + logging.info('Grid-size from %s to %s.', restored_gs, gs) + restored_posemb_grid = restored_posemb_grid.reshape( + restored_gs, restored_gs, -1) + zoom = (gs / restored_gs, gs / restored_gs, 1) + restored_posemb_grid = scipy.ndimage.zoom( + restored_posemb_grid, zoom, order=1) + # Attach the CLS token again. + restored_posemb_grid = restored_posemb_grid.reshape( + 1, gs * gs, -1) + restored_posemb = jnp.array( + np.concatenate([cls_tok, restored_posemb_grid], axis=1)) + + params[m_key][tm_key]['pos_embedding'] = restored_posemb + # Other parameters of the Transformer encoder if they are in the target. + elif tm_key in params[m_key]: + params[m_key][tm_key] = tm_params + else: + logging.info('Ignoring %s. In restored model\'s Transformer,' + 'but not in target', m_key) + + elif m_key in params: + # Use the rest if they are in the pretrained model. + params[m_key] = m_params + + else: + logging.info('Ignoring %s. In restored model, but not in target', m_key) + + +def init_vit_from_train_state( + train_state: Any, restored_train_state: Any, + model_cfg: ml_collections.ConfigDict, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is written to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + The function supports train_states using either Optax or flax.optim (which + has been deprecated, and will be removed from Scenic.) + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of a + pretrained model. + model_cfg: Configuration of the model. Usually used for some asserts. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + if hasattr(train_state, 'optimizer'): + # TODO(dehghani): Remove support for flax optim. + params = flax.core.unfreeze(train_state.optimizer.target) + restored_params = flax.core.unfreeze(restored_train_state.optimizer.target) + _merge_params(params, restored_params, model_cfg, restored_model_cfg) + return train_state.replace( + optimizer=train_state.optimizer.replace( + target=flax.core.freeze(params))) + else: + params = flax.core.unfreeze(train_state.params) + restored_params = flax.core.unfreeze(restored_train_state.params) + _merge_params(params, restored_params, model_cfg, restored_model_cfg) + return train_state.replace(params=flax.core.freeze(params)) diff --git a/scenic/projects/boundary_attention/README.md b/scenic/projects/boundary_attention/README.md new file mode 100644 index 0000000000000000000000000000000000000000..6a94ce1f11cfcebf9c9abdee6de4dcac62bc94a9 --- /dev/null +++ b/scenic/projects/boundary_attention/README.md @@ -0,0 +1,201 @@ +## Boundary Attention + +![Boundary Attention](rm.png) + +### [Project Page](https://boundaryattention.github.io) | [arXiv](https://arxiv.org/abs/2401.00935) | [Dataset](#kaleidoshapes-dataset) + +Boundary Attention is a differentiable model that explicitly models +boundaries—including contours, corners and junctions—using a new mechanism +that we call boundary attention. Our model provides accurate results +even when the boundary signal is very weak or is swamped by noise. + +> [**Boundary Attention**](https://arxiv.org/abs/2401.00935), +> Mia Gaia Polansky, Charles Herrmann, Junhwa Hur, Deqing Sun, Dor Verbin, Todd Zickler + +### Quick Start + +Boundary Attention is written in JAX and uses Scenic framework for training. +For more information on how to install JAX with GPU support, +see [here](https://github.com/jax-ml/jax#installation). + +To begin, we recommend installing scenic to a new conda virtual environment. If necessary, install anaconda or [miniconda](https://docs.conda.io/projects/miniconda/en/latest/). + +```shell +# Create virtual environment with python 3.10 and activate +conda create -n boundary_attention python=3.10 -y +conda activate boundary_attention +# Clone the scenic github repository +git clone https://github.com/google-research/scenic.git +cd scenic +# Install scenic-wide packages +pip install -e . +# Install Boundary Attention specific packages +pip install -r scenic/projects/boundary_attention/requirements.txt + +# (Optional) For GPU support: +pip install --upgrade "jax[cuda]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html --force-reinstall +``` + + Download the [pretrained weights](#pretrained-weights) and place inside a folder within the boundary attention main folder: + +```shell +# Create directories for saving your results and placing the pretrained checkpoint +mkdir scenic/projects/boundary_attention/workdir +mkdir scenic/projects/boundary_attention/pretrained_weights + +# Move the checkpoint to the folder +cp ~/Downloads/checkpoint scenic/projects/boundary_attention/pretrained_weights +``` + +Then, you can use the following script to test Boundary Attention on new images, replacing `IMAGE_PATH` with a path to any local image. + +```shell +PRETRAINED_PATH='scenic/projects/boundary_attention/pretrained_weights/' +IMAGE_PATH='scenic/projects/boundary_attention/noisy_flower.png' +SAVE_PATH='scenic/projects/boundary_attention/workdir/' + +python scenic/projects/boundary_attention/helpers/test_new_images.py \ + --weights_dir=${PRETRAINED_PATH} \ + --img_path=${IMAGE_PATH} \ + --save_path=${SAVE_PATH} \ + --height=216 \ + --width=216 \ + --save_raw_output=False +``` + +The height and width options resize the input image. The option "save_raw_output" toggles whether the entire output from the network is saved to a pickle file. + +Alternatively, you can modify this script for Jupyter or Colab. + +```python +import PIL +import jax.numpy as jnp +from tensorflow.io import gfile +from scenic.projects.boundary_attention.configs import base_config +from scenic.projects.boundary_attention.helpers import train_utils +from scenic.projects.boundary_attention.helpers import viz_utils + +######## MODIFY THE OPTIONS BELOW ######### + +im_height = 216 # Replace with height to resize input to +im_width = 216 # Replace with width to resize input to + +img_path = 'scenic/projects/boundary_attention/noisy_flower.png' # Replace with path to new input +weights_dir = 'scenic/projects/boundary_attention/pretrained_weights/' # Add path to pretrained weights here + +############################################ + +input_img = jnp.array(PIL.Image.open(gfile.GFile(img_path, 'rb')).resize((im_width, im_height)))/255.0 +input_img = jnp.expand_dims(input_img.transpose(2,0,1)[:3,:,:], axis=0) + +config = base_config.get_config(model_name='boundary_attention', + dataset_name='testing', + input_size=(im_height, im_width, 3)) + +apply_jitted, trained_params = train_utils.make_apply(config, weights_dir) + +outputs = apply_jitted(trained_params['params'], input_img) +viz_utils.visualize_outputs(input_img, outputs) +``` + +### Pretrained Weights +The pretrained model weights for boundary attention are available in [this Google Drive folder](https://drive.google.com/drive/folders/1VwDx3UUGA_Sh8ax1eWAOzE1xwfu2uKtU?usp=share_link). + +### Kaleidoshapes Dataset + +To download kaleidoshapes, install the [gcloudCLI](https://cloud.google.com/sdk/docs/install-sdk) and then use: + +```shell +# Make new directory to store dataset +mkdir scenic/boundary_attention/kaleidoshapes_dataset + +# Copy dataset to directory +gsutil cp -r gs://scenic-bucket/boundary_attention/kaleidoshapes/ scenic/boundary_attention/kaleidoshapes_dataset +``` + +To generate your own kaleidoshapes dataset or for additional detail on how to use kaleidoshapes see [here](kaleidoshapes/README.md). + +### File Structure + +A few important model files in this projects are: + +- [`boundary_attention_model_base.py`](models/model_lib/boundary_attention_model_base.py) is our base model, which is called by wrapper [`boundary_attention.py`](models/boundary_attention.py) +- [`junction_functions.py`](helpers/junction_functions.py) defines a class to manipulate the model's output junctions and calls [`render_junctions.py`](helpers/render_junctions.py) to render junction patches +- [`params2maps.py`](helpers/params2maps.py) is a wrapper for [`junction_functions.py`](helpers/junction_functions.py) + +### Training + +Below is an example command-line script to train Boundary Attention on [Kaleidoshapes](#kaleidoshapes-dataset) with this [base config](configs/boundary_attention_model_config.py). + +There are two ways to specify dataset and checkpoint locations. +The first is to modify the [base config](configs/base_config.py) so that the parameters defined at the top point to the correct locations. + +Here, `_CHECKPOINT_PATH` refers to checkpoints saved during training. +Use `_MODEL_WEIGHTS_PATH` if using the pretrained weights provided. + +```python +_CHECKPOINT_PATH = '' # Leave empty if using pretrained weights +_CHECKPOINT_STEP = -1 # Add step, or leave as -1 for the latest checkpoint +_MODEL_WEIGHTS_PATH = 'scenic/projects/boundary_attention/pretrained_weights/' # Add path to pretrained weights if using, otherwise put '' +_DATASET_DIR = '' # Add path to kaleidoshapes here +_INPUT_SIZE = None # Define to resize data to here (H, W, C) or set to None to use default size +``` + +Then, create a workdir and train with the following terminal command: + +```shell +WORKDIR='scenic/projects/boundary_attention/workdir/' # Modify to point to a desired location +python -m scenic.projects.boundary_attention.main \ + --config=scenic/projects/boundary_attention/configs/base_config.py \ + --workdir=${WORKDIR} +``` + +Alternatively, specify these settings at train time (this will override changes to `base_config`): + +```shell +WORKDIR='scenic/projects/boundary_attention/workdir/' +DATASET_DIR='ADD PATH TO DATASET HERE' +CHECKPOINT_PATH='' +CHECKPOINT_STEP=-1 +MODEL_WEIGHTS_PATH='scenic/projects/boundary_attention/pretrained_weights/' + +python -m scenic.projects.boundary_attention.main \ + --config=scenic/projects/boundary_attention/configs/base_config.py \ + --workdir=${WORKDIR} \ + --dataset_dir=${DATASET_DIR} \ + --checkpoint_path=${CHECKPOINT_PATH} \ + --checkpoint_step=${CHECKPOINT_STEP} \ + --weights_path=${MODEL_WEIGHTS_PATH} +``` + +### Evaluation + +Below is an example command-line script to evaluate Boundary Attention on Kaleidoshapes. + +```shell +WORKDIR='scenic/projects/boundary_attention/workdir/' +DATASET_DIR='ADD PATH TO DATASET HERE' +CHECKPOINT_PATH='' +CHECKPOINT_STEP=-1 +MODEL_WEIGHTS_PATH='scenic/projects/boundary_attention/pretrained_weights/' + +python -m scenic.projects.boundary_attention.eval_main \ + --config=scenic/projects/boundary_attention/configs/base_config.py \ + --workdir=${WORKDIR} \ + --dataset_dir=${DATASET_DIR} \ + --checkpoint_path=${CHECKPOINT_PATH} \ + --checkpoint_step=${CHECKPOINT_STEP} \ + --weights_path=${MODEL_WEIGHTS_PATH} +``` + + +### Citation +``` +@article{mia2024boundaries, + author = {Polansky, Mia Gaia and Herrmann, Charles and Hur, Junhwa and Sun, Deqing + and Verbin, Dor and Zickler, Todd}, + title = {Boundary Attention: Learning to Localize Boundaries Under High Noise}, + journal = {arXiv}, + year = {2024}, + } +``` diff --git a/scenic/projects/boundary_attention/__init__.py b/scenic/projects/boundary_attention/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/boundary_attention/configs/__init__.py b/scenic/projects/boundary_attention/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/boundary_attention/configs/base_config.py b/scenic/projects/boundary_attention/configs/base_config.py new file mode 100644 index 0000000000000000000000000000000000000000..9fd4c0e5f36ea9907f7c342b249404bf184b3a90 --- /dev/null +++ b/scenic/projects/boundary_attention/configs/base_config.py @@ -0,0 +1,124 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base config for Boundary Attention.""" + +import datetime +from typing import Optional, Any + +import ml_collections +from scenic.projects.boundary_attention.configs import dataset_configs +from scenic.projects.boundary_attention.configs import model_configs +from scenic.projects.boundary_attention.helpers import get_input_opts + + # Add path to the trained model here: +_CHECKPOINT_PATH = '' +_CHECKPOINT_STEP = -1 +# If starting with pretrained weights, modify this instead +_MODEL_WEIGHTS_PATH = '' +# Add path to your data here: +_DATASET_DIR = '' +# Define to resize data to here (H, W, C) or set to None to use default size: +_INPUT_SIZE = None + + +def get_config( + model_name: str = 'boundary_attention', + checkpoint_path: Any = _CHECKPOINT_PATH, + checkpoint_step: int = _CHECKPOINT_STEP, + weights_path: Any = _MODEL_WEIGHTS_PATH, + input_size: Optional[Any] = _INPUT_SIZE, + dataset_name: str = 'kaleidoshapes', + dataset_dir: Optional[str] = _DATASET_DIR, + training_type: Optional[str] = 'train', + runlocal: Optional[bool] = False, + ) -> ml_collections.ConfigDict: + """Returns base config for Boundary Attention.""" + + runlocal = bool(runlocal) + config = ml_collections.ConfigDict() + config.model_name = model_name + config.dataset_name = dataset_name + config.training_type = training_type + time_now = datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S') + config.experiment_name = (model_name + '_' + dataset_name + '_' + + training_type + '_' + time_now) + + # Infra. + # does eval on the train device + config.eval_during_train = False + config.disable_pmap_and_jit = False + config.visualize = True + + # Dataset. + config.dataset = dataset_configs.get_dataset_config(dataset_name, + dataset_dir, + input_size) + config.batch_size = config.dataset.get('train_batchsize', 1) + config.eval_batch_size = config.dataset.get('eval_batchsize', 1) + + # Model. + config.model = model_configs.get_model_config(model_name) + config.model.opts.training_type = training_type + + # Input Opts. + config.model.input_opts = get_input_opts.get_input_opts( + config.dataset.input_size, config.model.opts) + + # Initialize from. + config.init_from = ml_collections.ConfigDict() + config.init_from.checkpoint_path = config.model.get('checkpoint_path', + checkpoint_path) + config.init_from.checkpoint_step = config.model.get('checkpoint_step', + checkpoint_step) + config.init_from.params_path = config.model.get('pretrained_params_path', + weights_path) + + # Training. + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.optimizer = 'adam' + # config.optimizer_configs.weight_decay = 0.0 + config.optimizer_configs.skip_scale_and_bias_regularization = False + config.l2_decay_factor = 0 + config.max_grad_norm = 10.0 + config.num_training_steps = int(300_000) + config.log_eval_steps = 5000 + config.rng_seed = 42 + config.num_devices = None # Updated by main() + + # Learning rate. + base_lr = config.model.learning_rate + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * linear_decay * linear_warmup' + config.lr_configs.warmup_steps = 5000 + config.lr_configs.total_steps = config.num_training_steps + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.base_learning_rate = base_lr + config.lr_configs.end_learning_rate = base_lr / 10 + + # Logging. + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.xprof = True # Profile using xprof + config.checkpoint = True # do checkpointing + config.checkpoint_steps_per_device = 5_000 # used for backward compatibility + config.checkpoint_steps = int(config.checkpoint_steps_per_device) + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + + # Visualization config. + config.viz_utils = ml_collections.ConfigDict() + + return config diff --git a/scenic/projects/boundary_attention/configs/boundary_attention_model_config.py b/scenic/projects/boundary_attention/configs/boundary_attention_model_config.py new file mode 100644 index 0000000000000000000000000000000000000000..64c3b9a2f77fc1a80ff6d144c12c8b70bd5d1c75 --- /dev/null +++ b/scenic/projects/boundary_attention/configs/boundary_attention_model_config.py @@ -0,0 +1,96 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Config for boundary attention model.""" + +import ml_collections + + +def get_boundary_attention_model_config(): + """Returns config for boundary attention model.""" + + model_config = ml_collections.ConfigDict() + model_config.name = 'boundary_attention' + model_config.learning_rate = .000005 + + # General model options + model_config.opts = ml_collections.ConfigDict() + model_config.opts.num_wedges = 3 + model_config.opts.patchsize = 17 + model_config.opts.patchmin = -1 + model_config.opts.patchmax = 1 + model_config.opts.stride = 1 + model_config.opts.jparameterization = 'standard' + model_config.opts.bparameterization = 'standard' + + model_config.opts.delta = 0.001 + model_config.opts.eta = 0.0001 + model_config.opts.mask_shape = 'square' + model_config.opts.patch_scales = [3, 9, 17] + + # Model architecture choices + model_config.model_opts = ml_collections.ConfigDict() + model_config.model_opts.input_feature_dim = 3 + model_config.model_opts.hidden_dim = 64 + + # Initialization options + model_config.model_opts.init_opts = ml_collections.ConfigDict() + model_config.model_opts.init_opts.normalize_input = True + model_config.model_opts.init_opts.hidden_dim = ( + model_config.model_opts.hidden_dim + ) + model_config.model_opts.init_opts.token_conv_dim = 96 + model_config.model_opts.init_opts.channels_conv_dim = 64 + model_config.model_opts.init_opts.junction_mixer_rf = 3 + model_config.model_opts.init_opts.num_junction_mixer_blocks = 2 + model_config.model_opts.init_opts.junction_mixer_padding = 'SAME' + model_config.model_opts.init_opts.stride = 1 + + # Refinement options + model_config.model_opts.refine_opts = ml_collections.ConfigDict() + model_config.model_opts.refine_opts.hidden_dim = ( + model_config.model_opts.hidden_dim + ) + model_config.model_opts.refine_opts.niters = 4 + model_config.model_opts.refine_opts.add_linear_residual = True + model_config.model_opts.refine_opts.use_transformer = True + model_config.model_opts.refine_opts.encoding_dim = 128 + model_config.model_opts.refine_opts.num_transformer_layers = 2 + model_config.model_opts.refine_opts.attention_patch_size = 11 + model_config.model_opts.refine_opts.num_attention_heads = 4 + model_config.model_opts.refine_opts.attn_dropout_prob = 0.1 + model_config.model_opts.refine_opts.ps_token_dim = 8 + model_config.model_opts.refine_opts.estimate_distribution = True + model_config.model_opts.refine_opts.reuse_token = False + + # Training options + model_config.train_opts = ml_collections.ConfigDict() + model_config.train_opts.lmbda_wedge_mixing = 0 + model_config.train_opts.delta = model_config.opts.delta + model_config.train_opts.eta = model_config.opts.eta + + # Loss options + model_config.loss_opts = ml_collections.ConfigDict() + + model_config.loss_opts.beta = 0.1 + model_config.loss_opts.loss_constant = 0.3 + + model_config.loss_opts.beta_PDS = 1e-3 # Patch distance supervision loss + model_config.loss_opts.beta_PFS = 1.0 # Patch clean feature supervision loss + model_config.loss_opts.beta_GDS = 1e-3 # Global distance supervision loss + model_config.loss_opts.beta_GFS = 1.0 # Global clean feature supervision loss + model_config.loss_opts.beta_BC = 1e-2 # Boundary consistency loss + model_config.loss_opts.beta_FC = 20.0 # Feature consistency loss + + return model_config diff --git a/scenic/projects/boundary_attention/configs/dataset_configs.py b/scenic/projects/boundary_attention/configs/dataset_configs.py new file mode 100644 index 0000000000000000000000000000000000000000..4fa64e269c04feacad1d2ca158fc208a427f4068 --- /dev/null +++ b/scenic/projects/boundary_attention/configs/dataset_configs.py @@ -0,0 +1,44 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset configurations.""" + +from typing import Optional, Any + +import ml_collections +from scenic.projects.boundary_attention.configs import kaleidoshapes_config + +DATASET_CONFIG = { + 'kaleidoshapes': kaleidoshapes_config.get_config_kaleidoshapes, + 'testing': kaleidoshapes_config.get_config_testing, +} + + +def get_dataset_config( + dataset_name: str, + dataset_dir: str, + input_shape: Optional[Any], +) -> ml_collections.ConfigDict: + """Returns the dataset config.""" + + # Set a default input size if not defined + if input_shape is None: + input_shape = (125, 125, 3) + + # Fetch the dataset config + try: + return DATASET_CONFIG[dataset_name](dataset_dir, input_shape) + except: + raise NotImplementedError( + f'Did not recognize dataset_name {dataset_name}') from None diff --git a/scenic/projects/boundary_attention/configs/deformable_boundary_attention_model_config.py b/scenic/projects/boundary_attention/configs/deformable_boundary_attention_model_config.py new file mode 100644 index 0000000000000000000000000000000000000000..a2f946b0be5c35e1b7031f542fbc89aaacc35e1b --- /dev/null +++ b/scenic/projects/boundary_attention/configs/deformable_boundary_attention_model_config.py @@ -0,0 +1,99 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Config for deformable boundary attention model.""" + +import ml_collections + + +def get_deformable_boundary_attention_model_config(): + """Returns config for deformable boundary attention model.""" + + model_config = ml_collections.ConfigDict() + model_config.name = 'deformable_boundary_attention' + model_config.learning_rate = .000005 + + + # General model options + model_config.opts = ml_collections.ConfigDict() + model_config.opts.num_wedges = 3 + model_config.opts.patchsize = 17 + model_config.opts.patchmin = -1 + model_config.opts.patchmax = 1 + model_config.opts.stride = 1 + model_config.opts.jparameterization = 'standard' + model_config.opts.bparameterization = 'standard' + + model_config.opts.delta = .02 + model_config.opts.eta = .01 + model_config.opts.mask_shape = 'square' + model_config.opts.patch_scales = [3, 9, 17] + + # Model architecture choices + model_config.model_opts = ml_collections.ConfigDict() + model_config.model_opts.input_feature_dim = 3 + + hidden_dim = 64 + model_config.model_opts.hidden_dim = hidden_dim + + # Initialization options + model_config.model_opts.init_opts = ml_collections.ConfigDict() + model_config.model_opts.init_opts.normalize_input = True + model_config.model_opts.init_opts.crop_output = True + model_config.model_opts.init_opts.hidden_dim = hidden_dim + model_config.model_opts.init_opts.token_conv_dim = 96 + model_config.model_opts.init_opts.channels_conv_dim = 64 + model_config.model_opts.init_opts.junction_mixer_rf = 3 + model_config.model_opts.init_opts.num_junction_mixer_blocks = 2 + model_config.model_opts.init_opts.junction_mixer_padding = 'SAME' + model_config.model_opts.init_opts.stride = 1 + + # Refinement options + model_config.model_opts.refine_opts = ml_collections.ConfigDict() + model_config.model_opts.refine_opts.deformation_type = 'simple' + model_config.model_opts.refine_opts.offset_fn = 'dense' + model_config.model_opts.refine_opts.max_offset = 30 + model_config.model_opts.refine_opts.num_samples = 20 + model_config.model_opts.refine_opts.offset_token_dim = 8 + model_config.model_opts.refine_opts.hidden_dim = hidden_dim + model_config.model_opts.refine_opts.niters = 4 + model_config.model_opts.refine_opts.add_linear_residual = True + model_config.model_opts.refine_opts.use_transformer = True + model_config.model_opts.refine_opts.encoding_dim = 128 + model_config.model_opts.refine_opts.num_transformer_layers = 2 + model_config.model_opts.refine_opts.attention_patch_size = 11 + model_config.model_opts.refine_opts.num_attention_heads = 3 + model_config.model_opts.refine_opts.attn_dropout_prob = 0.1 + model_config.model_opts.refine_opts.ps_token_dim = 8 + model_config.model_opts.refine_opts.estimate_distribution = True + model_config.model_opts.refine_opts.reuse_token = False + + # Training options + model_config.train_opts = ml_collections.ConfigDict() + model_config.train_opts.lmbda_wedge_mixing = 0 + + # Loss options + model_config.loss_opts = ml_collections.ConfigDict() + + model_config.loss_opts.beta = 0.1 + model_config.loss_opts.loss_constant = 0.3 + + model_config.loss_opts.beta_PDS = 1e-3 # Patch distance supervision loss + model_config.loss_opts.beta_PFS = 1.0 # Patch clean feature supervision loss + model_config.loss_opts.beta_GDS = 1e-3 # Global distance supervision loss + model_config.loss_opts.beta_GFS = 1.0 # Global clean feature supervision loss + model_config.loss_opts.beta_BC = 1e-2 # Boundary consistency loss + model_config.loss_opts.beta_FC = 20.0 # Feature consistency loss + + return model_config diff --git a/scenic/projects/boundary_attention/configs/kaleidoshapes_config.py b/scenic/projects/boundary_attention/configs/kaleidoshapes_config.py new file mode 100644 index 0000000000000000000000000000000000000000..49b3a5df10c72004e43e9c9851eb9de1870011f0 --- /dev/null +++ b/scenic/projects/boundary_attention/configs/kaleidoshapes_config.py @@ -0,0 +1,65 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Returns default config for kaleidoshapes dataset.""" + +from typing import Tuple +import ml_collections + + +def get_config_kaleidoshapes( + dataset_dir: str, + input_shape: Tuple[int, int, int] = (125, 125, 3), +) -> ml_collections.ConfigDict: + """Returns default config for kaleidoshapes dataset.""" + + dataset_config = ml_collections.ConfigDict() + dataset_config.name = 'kaleidoshapes' + dataset_config.train_batchsize = 1 + dataset_config.eval_batchsize = 1 + dataset_config.prefetch_to_host = 0 + dataset_config.num_train_images = 90_000 + dataset_config.num_eval_images = 10_000 + dataset_config.image_size = (240, 320, 3) + + if (input_shape != dataset_config.image_size): + dataset_config.crop = True + dataset_config.crop_size = input_shape + else: + dataset_config.crop = False + + dataset_config.min_noise_level = .3 + dataset_config.max_noise_level = .8 + dataset_config.iv_radius = 7 + dataset_config.add_greyscale_samples = True + dataset_config.prop_grey = .10 + dataset_config.max_num_shapes = 15 + dataset_config.input_size = dataset_config.crop_size if ( + dataset_config.crop) else dataset_config.image_size + dataset_config.dataset_dir = dataset_dir + + return dataset_config + + +def get_config_testing( + dataset_dir: str, # pylint: disable=unused-argument + input_shape: Tuple[int, int, int] = (125, 125, 3), +) -> ml_collections.ConfigDict: + """Returns default config for kaleidoshapes dataset.""" + + dataset_config = ml_collections.ConfigDict() + dataset_config.name = 'testing' + dataset_config.input_size = input_shape + + return dataset_config diff --git a/scenic/projects/boundary_attention/configs/model_configs.py b/scenic/projects/boundary_attention/configs/model_configs.py new file mode 100644 index 0000000000000000000000000000000000000000..b464049775b568c0ff5c9235e10ba80fe5fa77c2 --- /dev/null +++ b/scenic/projects/boundary_attention/configs/model_configs.py @@ -0,0 +1,32 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Define all model configs.""" + +import ml_collections +from scenic.projects.boundary_attention.configs import boundary_attention_model_config + + +MODEL_CONFIGS = { + 'boundary_attention': + boundary_attention_model_config.get_boundary_attention_model_config(), +} + + +def get_model_config(model_name: str) -> ml_collections.ConfigDict: + try: + return MODEL_CONFIGS[model_name] + except: + raise NotImplementedError( + 'Did not recognize model_name %s' % model_name) from None diff --git a/scenic/projects/boundary_attention/configs/training_config.py b/scenic/projects/boundary_attention/configs/training_config.py new file mode 100644 index 0000000000000000000000000000000000000000..f96214b3dd96c6f730e5c191e5b5a7c5346809c7 --- /dev/null +++ b/scenic/projects/boundary_attention/configs/training_config.py @@ -0,0 +1,35 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training config for boundary_attention.""" + +from scenic.projects.boundary_attention.configs import base_config + + +def get_config(args): + return base_config.get_config(args) + + +def get_hyper(hyper): + """Returns the hyperparameter sweep.""" + + eta = [.001] + + hyper1 = hyper.sweep( + 'config.model.opts.eta', + eta) + + hyper_val = hyper.chainit([hyper.product([hyper1])]) + + return hyper_val diff --git a/scenic/projects/boundary_attention/dataset_lib/__init__.py b/scenic/projects/boundary_attention/dataset_lib/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/boundary_attention/dataset_lib/dataloader.py b/scenic/projects/boundary_attention/dataset_lib/dataloader.py new file mode 100644 index 0000000000000000000000000000000000000000..8dd0b9efc70110b929ba941b844690fa510dae8d --- /dev/null +++ b/scenic/projects/boundary_attention/dataset_lib/dataloader.py @@ -0,0 +1,88 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset loader.""" +import functools +from typing import Optional + +from absl import logging +import jax +import jax.numpy as jnp +import ml_collections +from scenic.projects.boundary_attention.dataset_lib.datasets import dataset_utils +from scenic.projects.boundary_attention.dataset_lib.datasets import kaleidoshapes_dataset +from scenic.projects.boundary_attention.dataset_lib.datasets import pickled_dataset + + +_ALL_DATASETS = { + 'circle_triangles': pickled_dataset, + 'kaleidoshapes': kaleidoshapes_dataset, +} + + +def get_dataset_by_name(name): + try: + return functools.partial( + dataset_utils.get_dataset, dataset_module=_ALL_DATASETS[name] + ) + except: + raise NotImplementedError('Cannot find dataset: %s, %s' % (name)) from None + + +def get_dataloader(config: ml_collections.ConfigDict, + data_rng: jnp.ndarray, + *, + dataset_service_address: Optional[str] = None, + dataset_shuffle=0): + """Given a config, returns a dataset dataloader.""" + del data_rng + + dataset_config = config.dataset + + device_count = jax.device_count() + logging.info('device_count: %d', device_count) + logging.info('jax.local_device_count(): %d', jax.local_device_count()) + logging.info('num_hosts : %d', jax.process_count()) + logging.info('host_id : %d', jax.process_index()) + logging.info('dataset_shuffle: %d', dataset_shuffle) + + dataset_builder = get_dataset_by_name(name=dataset_config.name) + + batch_size = config.batch_size * device_count + eval_batch_size = config.eval_batch_size * device_count + + local_batch_size = batch_size // jax.process_count() + eval_local_batch_size = eval_batch_size // jax.process_count() + device_batch_size = batch_size // device_count + logging.info('local_batch_size : %d', local_batch_size) + logging.info('device_batch_size : %d', device_batch_size) + + shuffle_seed = config.get('shuffle_seed', None) + if dataset_service_address and shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you want ' + 'to run with dataset service.') + + dataset = dataset_builder( + dataset_config=dataset_config, + batch_size=local_batch_size, + eval_batch_size=eval_local_batch_size, + num_shards=jax.local_device_count(), + shuffle_seed=shuffle_seed, + dataset_shuffle=dataset_shuffle, + dataset_service_address=dataset_service_address, + ) + + return dataset diff --git a/scenic/projects/boundary_attention/dataset_lib/datasets/__init__.py b/scenic/projects/boundary_attention/dataset_lib/datasets/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/boundary_attention/dataset_lib/datasets/dataset_utils.py b/scenic/projects/boundary_attention/dataset_lib/datasets/dataset_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..2ed3cc1010ab34ebe0ca3663666a7abbff0e4ec6 --- /dev/null +++ b/scenic/projects/boundary_attention/dataset_lib/datasets/dataset_utils.py @@ -0,0 +1,88 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset library.""" + +import functools + +from absl import logging +from flax import jax_utils +from scenic.dataset_lib import dataset_utils as scenic_dataset_utils +import tensorflow_datasets as tfds + + +def get_dataset( + *, + dataset_module, + dataset_config, + batch_size=1, + eval_batch_size=1, + num_shards=1, + shuffle_buffer_size=10, + shuffle_seed=0, + dataset_shuffle=0, + prefetch_buffer_size=2, + dataset_service_address=None, + ): + """Returns a dataset. + + Args: + dataset_module: A dataset module. + dataset_config: A ml_collections dataset config. + batch_size: Training batch size. + eval_batch_size: Evaluation batch size. + num_shards: Number of shards (devices). + shuffle_buffer_size: Size of shuffle buffer. + shuffle_seed: Seed for shuffling. + dataset_shuffle: Whether to shuffle the dataset. + prefetch_buffer_size: Size of the buffer for dataset preprocessing. + dataset_service_address: Address of the dataset service. + + Returns: + A dataset object containing train_iter, val_iter, and metadata. + """ + + shard_batches = functools.partial(scenic_dataset_utils.shard, + n_devices=num_shards) + + # train setup + train_dataset, eval_dataset, metadata = dataset_module.get_dataset_and_count( + dataset_config=dataset_config, + batch_size=batch_size, + eval_batch_size=eval_batch_size, + shuffle_buffer_size=shuffle_buffer_size, + dataset_shuffle=dataset_shuffle) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_dataset = scenic_dataset_utils.distribute(train_dataset, + dataset_service_address) + + train_dataset = tfds.as_numpy(train_dataset) + eval_dataset = tfds.as_numpy(eval_dataset) + + train_iter = iter(train_dataset) + train_iter = map(shard_batches, train_iter) + train_iter = jax_utils.prefetch_to_device(train_iter, prefetch_buffer_size) + + eval_iter = iter(eval_dataset) + eval_iter = map(shard_batches, eval_iter) + eval_iter = jax_utils.prefetch_to_device(eval_iter, prefetch_buffer_size) + + return scenic_dataset_utils.Dataset(train_iter, eval_iter, None, metadata) diff --git a/scenic/projects/boundary_attention/dataset_lib/datasets/kaleidoshapes_dataset.py b/scenic/projects/boundary_attention/dataset_lib/datasets/kaleidoshapes_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..cc0686a14e13a120d56a41421435467675e1d451 --- /dev/null +++ b/scenic/projects/boundary_attention/dataset_lib/datasets/kaleidoshapes_dataset.py @@ -0,0 +1,122 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset library for KaleidoShapes.""" + +import functools + +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.projects.boundary_attention.dataset_lib.datasets import kaleidoshapes_dataset_utils +from scenic.projects.boundary_attention.helpers import additive_noise_model +import scenic.projects.boundary_attention.kaleidoshapes.kaleidoshapes # pylint: disable=unused-import +import tensorflow as tf + + +def get_input_shape(dataset_config): + """Returns input shape for the dataset.""" + + if dataset_config.get('crop', True): + input_shape = [[1, 3] + + list(dataset_config.get('crop_size', (100, 100, 3))[:2])] + else: + input_shape = [[1, 3] + + list(dataset_config.get('input_size', (240, 320, 3))[:2])] + + return input_shape + + +def get_dataset_and_count(dataset_config, + batch_size=4, + eval_batch_size=4, + shuffle_buffer_size=1, + dataset_shuffle=0, + prebatch=True, + readahead_buffer=256, + dtype_str='float32'): + """Returns generators for KaleidoShapes dataset. + + Args: + dataset_config: ml_collections dict with dataset specific configuration. + batch_size: int; Batch size per device. + eval_batch_size: int; Eval batch size. + shuffle_buffer_size: int; Size of shuffle buffer. + dataset_shuffle: int; Number of datasets to shuffle. + prebatch: bool; Whether to prebatch images. + readahead_buffer: int; Size of readahead buffer. + dtype_str: str; Data type of the image (e.g. 'float32'). + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + and a dict of metadata. + """ + + del dataset_shuffle, prebatch, readahead_buffer + + num_train_images = dataset_config.num_train_images + num_eval_images = dataset_config.num_eval_images + + tf.random.set_seed(1234) + + # Define noise model and dataset preprocessing function + noise_model = additive_noise_model.NoiseModel( + min_noise_level=dataset_config.get('min_noise_level', 0.3), + max_noise_level=dataset_config.get('max_noise_level', 0.9), + normalize=True, + ) + preprocess_fn = functools.partial( + kaleidoshapes_dataset_utils.process_kaleido_images, + dataset_config=dataset_config, + nmodel=noise_model, + ) + + train_ds = dataset_utils.get_data( + dataset=dataset_config.get('dataset_name', 'kaleidoshapes'), + split=dataset_config.get('split', 'train'), + data_dir=dataset_config.dataset_dir, + batch_size=batch_size, + preprocess_fn=preprocess_fn, + shuffle_buffer_size=shuffle_buffer_size, + prefetch=dataset_config.get('prefetch_to_host', 0), + drop_remainder=True, + cache=False, + repeats=-1, # infinite repeats + ignore_errors=False, + skip_decode=[], + ) + + eval_ds = dataset_utils.get_data( + dataset=dataset_config.get('dataset_name', 'kaleidoshapes'), + split=dataset_config.get('split', 'test'), + data_dir=dataset_config.dataset_dir, + batch_size=eval_batch_size, + preprocess_fn=preprocess_fn, + cache=False, + shuffle_files=False, + repeats=-1, + drop_remainder=True, + skip_decode=[], + ) + + input_shape = get_input_shape(dataset_config) + + metadata = { + 'max_num_shapes': dataset_config.max_num_shapes, + 'num_train_examples': num_train_images, + 'num_eval_examples': num_eval_images, + 'input_shape': input_shape, + 'input_dtype': getattr(jnp, dtype_str), + } + + return train_ds, eval_ds, metadata diff --git a/scenic/projects/boundary_attention/dataset_lib/datasets/kaleidoshapes_dataset_utils.py b/scenic/projects/boundary_attention/dataset_lib/datasets/kaleidoshapes_dataset_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..0e882c58aafb8f9c69f6014c8971e0a457ea8134 --- /dev/null +++ b/scenic/projects/boundary_attention/dataset_lib/datasets/kaleidoshapes_dataset_utils.py @@ -0,0 +1,145 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Processes Kaleidoshape images.""" +import tensorflow as tf + + +def process_kaleido_images(example, dataset_config, nmodel): + """Processes Kaleido images by adding noise, cropping, etc. + + Args: + example: A dictionary of a kaleidoshape image and corresponding features. + dataset_config: A ml_collections containing the dataset configuration. + nmodel: A function that takes an image and returns a noisy image. + + Returns: + A dictionary of the processed image. + """ + del example['shapes']['type'] + del example['tfds_id'] + + example['image'] = tf.cast(example['image'], dtype=tf.float32) / 255.0 + example['boundaries'] = ( + tf.cast(example['boundaries'], dtype=tf.float32) / 255.0 + ) + example['distances'] = tf.expand_dims(example['distances'], -1) + + input_image_size = tf.cast( + dataset_config.get('image_size', (240, 320, 3)), dtype=tf.int32 + ) + + if dataset_config.get('crop', True): + crop_size = tf.cast( + dataset_config.get('crop_size', (100, 100, 3)), dtype=tf.int32 + ) + margin = 10 # in pixels + + y0 = tf.random.uniform( + [], + margin, + input_image_size[0] - crop_size[0] + 1 - margin, + dtype=tf.int32, + ) + x0 = tf.random.uniform( + [], margin, input_image_size[1] - crop_size[1] - margin, dtype=tf.int32 + ) + + example['image'] = example['image'][ + y0 : y0 + crop_size[0], x0 : x0 + crop_size[1], : + ] + example['boundaries'] = example['boundaries'][ + y0 : y0 + crop_size[0], x0 : x0 + crop_size[1], : + ] + example['distances'] = example['distances'][ + y0 : y0 + crop_size[0], x0 : x0 + crop_size[1] + ] + example['segments'] = example['segments'][ + y0 : y0 + crop_size[0], x0 : x0 + crop_size[1], : + ] + + image_size = crop_size + else: + x0, y0 = 0, 0 + image_size = input_image_size + + example['crop_start'] = tf.cast([x0, y0], dtype=tf.int32) + + # Make importance mask: + if dataset_config.get('make_iv_mask', True): + centers = tf.cast( + example['intersections'][: example['num_intersections']], tf.float32 + ) + vertices = tf.cast( + example['vertices'][: example['num_vertices']], tf.float32 + ) + cv_all = tf.concat([centers, vertices], axis=0) + + x, y = tf.meshgrid( + tf.range(x0, x0 + image_size[0]), tf.range(y0, y0 + image_size[1]) + ) + + x = tf.cast(tf.expand_dims(x, 2), tf.float32) + y = tf.cast(tf.expand_dims(y, 2), tf.float32) + + cv_x = tf.expand_dims(tf.expand_dims(cv_all[:, 0], 0), 1) * tf.cast( + tf.math.maximum(input_image_size[0], input_image_size[1]), tf.float32 + ) + cv_y = tf.expand_dims(tf.expand_dims(cv_all[:, 1], 0), 1) * tf.cast( + tf.math.maximum(input_image_size[0], input_image_size[1]), tf.float32 + ) + + radius = dataset_config.get('iv_radius', 10.0) + + iv_mask = ( + tf.exp(-((x - cv_x) ** 2 + (y - cv_y) ** 2) / (2 * radius**2)) + 1e-4 + ) + iv_mask = tf.math.reduce_max(iv_mask, -1) + # iv_mask = iv_mask/tf.math.reduce_max(iv_mask) + + example['iv_mask'] = tf.expand_dims(iv_mask, -1) + else: + example['iv_mask'] = tf.ones_like(example['boundaries']) + + ############### Add noise ################################################### + + example['clean_image'] = example['image'] + example['image'] = nmodel(example['image'], image_size) + + ############################################################################# + + # If inject greyscale images: + if dataset_config.get('add_greyscale_samples', True): + if tf.random.uniform([], 0, 1, dtype=tf.float32) < dataset_config.get( + 'prop_grey', 0.2 + ): + example['image'] = tf.repeat( + tf.math.reduce_mean(example['image'], axis=-1, keepdims=True), + 3, + axis=-1, + ) + example['clean_image'] = tf.repeat( + tf.math.reduce_mean(example['clean_image'], axis=-1, keepdims=True), + 3, + axis=-1, + ) + + # Transpose all image matrices + example['image'] = tf.transpose(example['image'], (2, 0, 1)) + example['clean_image'] = tf.transpose(example['clean_image'], (2, 0, 1)) + example['boundaries'] = tf.transpose(example['boundaries'], (2, 0, 1)) + example['distances'] = tf.transpose(example['distances'], (2, 0, 1)) + example['segments'] = tf.transpose(example['segments'], (2, 0, 1)) + + return example diff --git a/scenic/projects/boundary_attention/dataset_lib/datasets/pickled_dataset.py b/scenic/projects/boundary_attention/dataset_lib/datasets/pickled_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..a854970b2079a13721d9c1a451f6fd8e2769b2e7 --- /dev/null +++ b/scenic/projects/boundary_attention/dataset_lib/datasets/pickled_dataset.py @@ -0,0 +1,153 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Defines dataset made of pickled objects.""" + +import pickle +import jax.numpy as jnp +import tensorflow as tf +from tensorflow.io import gfile + + +def normalize_input(sample): + """Normalize input. + + Args: + sample: The input data. + + Returns: + The normalized input data. + """ + sample['boundaries'] = tf.cast(sample['boundaries'], tf.float32) / 255.0 + + # Threshold noisy image: + sample['image'] = tf.where( + sample['image'] > 1.0, tf.ones_like(sample['image']), sample['image'] + ) + sample['image'] = tf.where( + sample['image'] < 0.0, tf.zeros_like(sample['image']), sample['image'] + ) + + return sample + + +def get_dataset_and_count( + dataset_config, + batch_size=1, + eval_batch_size=1, + split_train_eval=True, + shuffle_buffer_size=1, # pylint: disable=unused-argument + dataset_shuffle=0, # pylint: disable=unused-argument + prebatch=True, # pylint: disable=unused-argument + readahead_buffer=256, # pylint: disable=unused-argument + dtype_str='float32', +): + """Get dataset and count. + + Args: + dataset_config: A config object that contains the paths and num_samples_use. + batch_size: The batch size. + eval_batch_size: The eval batch size. + split_train_eval: If True, split the dataset into train and eval. + shuffle_buffer_size: The shuffle buffer size. + dataset_shuffle: The shuffle buffer size. + prebatch: If True, prebatch the dataset. + readahead_buffer: The readahead buffer size. + dtype_str: The dtype string. + + Returns: + A tuple of datasets, num_images, metadata. + """ + + file_paths = dataset_config.paths + num_samples_use = dataset_config.num_samples_use + + images = [] + clean_images = [] + distances = [] + boundaries = [] + num_images = 0 + + for ii, file_name in enumerate(file_paths): + + with gfile.Gfile(file_name, 'rb') as f: + data = pickle.load(f) + + images.append( + data['images'].squeeze().transpose(0, 3, 1, 2)[: num_samples_use[ii]] + ) + clean_images.append( + data['clean_images'] + .squeeze() + .transpose(0, 3, 1, 2)[: num_samples_use[ii]] + ) + distances.append( + jnp.expand_dims(data['dist_boundaries'][: num_samples_use[ii]], 1) + ) + boundaries.append( + jnp.expand_dims(data['boundaries'][: num_samples_use[ii]], 1) + ) + num_images = num_images + num_samples_use[ii] + + ######### DEFINE DATA STRUCTURE ######## + data = { + 'image': jnp.concatenate(images, axis=0), + 'clean_image': jnp.concatenate(clean_images, axis=0), + 'distances': jnp.concatenate(distances, axis=0), + 'boundaries': jnp.concatenate(boundaries, axis=0), + } + + dataset = tf.data.Dataset.from_tensor_slices(data).shuffle( + num_images, seed=1, reshuffle_each_iteration=False + ) + dataset = dataset.map(normalize_input) + + if split_train_eval: + num_train_batches = int(0.9 * num_images) // batch_size + num_train_images = num_train_batches * batch_size + + num_eval_batches = (num_images - num_train_images) // eval_batch_size + num_eval_images = num_eval_batches * eval_batch_size + + train_dataset = ( + dataset.take(num_train_images) + .repeat() + .batch(batch_size, drop_remainder=True) + ) + eval_dataset = dataset.skip(num_train_images).batch( + eval_batch_size, drop_remainder=True + ) + + datasets = ( + train_dataset, + eval_dataset, + ) + num_images = (num_train_images, num_eval_images) + + else: + num_train_batches = int(0.9 * num_images) // batch_size + num_train_images = num_train_batches * batch_size + num_eval_images = 0 + + datasets = dataset + num_images = num_train_images + + metadata = { + 'input_dtype': getattr(jnp, dtype_str), + 'num_train_examples': num_train_images, + 'num_eval_examples': num_eval_images, + 'input_shape': [[1, *data['image'][0].shape]], + } + + return datasets, num_images, metadata diff --git a/scenic/projects/boundary_attention/eval_main.py b/scenic/projects/boundary_attention/eval_main.py new file mode 100644 index 0000000000000000000000000000000000000000..a0ab83526b81b3c3886044860f5e8ab3a2ceb458 --- /dev/null +++ b/scenic/projects/boundary_attention/eval_main.py @@ -0,0 +1,123 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Standalone eval binary.""" + +from absl import flags +from absl import logging +import chex +from clu import metric_writers +from flax import jax_utils +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app as scenic_app +from scenic.projects.boundary_attention import eval_manager +from scenic.projects.boundary_attention import trainer +from scenic.projects.boundary_attention.dataset_lib import dataloader +from scenic.projects.boundary_attention.models import all_models +from scenic.train_lib import train_utils as scenic_train_utils + +flags.DEFINE_string('dataset_dir', '', 'Dataset directory.') +flags.DEFINE_string('checkpoint_path', '', 'Checkpoint path.') +flags.DEFINE_integer('checkpoint_step', -1, 'Checkpoint step.') +flags.DEFINE_string('weights_path', '', 'Pretrained weights path.') + +FLAGS = flags.FLAGS +EVAL_ARTIFACT_DESCRIPTION = 'Last evaluated checkpoint' +FINAL_CKPT_ARTIFACT_DESCRIPTION = 'Final checkpoint' + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, # pylint: disable=unused-argument + writer: metric_writers.MetricWriter): + """Main function for Boundary Attention evals.""" + + # Update config if flags defined + if len(FLAGS.dataset_dir) > 0: # pylint: disable=g-explicit-length-test + config.dataset.dataset_dir = FLAGS.dataset_dir + if len(FLAGS.checkpoint_path) > 0: # pylint: disable=g-explicit-length-test + config.init_from.checkpoint_path = FLAGS.checkpoint_path + if FLAGS.checkpoint_step != -1: + config.init_from.checkpoint_step = FLAGS.checkpoint_step + if len(FLAGS.weights_path) > 0: # pylint: disable=g-explicit-length-test + config.init_from.params_path = FLAGS.weights_path + + model_cls = all_models.get_model_cls(config.model.name) + # Create the dataset for the primary eval, which we assume uses the same + # dataset as the train job, but a different split. Other evals create their + # own dataset instances. + data_rng, model_rng = jax.random.split(rng) + dataset = dataloader.get_dataloader(config, data_rng) + if config.disable_pmap_and_jit: + chex.fake_pmap_and_jit().start() + + dataset_metadata = dataset.meta_data + + # Build the loss_and_metrics_fn, metrics, and flax_model. + model = model_cls(config, dataset_metadata) + + evaler = eval_manager.EvalManager(model, config, model_rng) + + checkpoint_dir = FLAGS.checkpoint_path + latest_checkpoint = checkpoints.latest_checkpoint(checkpoint_dir) + + # Initialize model. + rng, params_rng, dropout_rng = jax.random.split(key=rng, num=3) + + input_specs = [] + for input_shape in dataset_metadata['input_shape']: + input_spec = (input_shape, dataset_metadata.get('input_dtype', + jnp.float32)) + input_specs.append(input_spec) + + (params, model_state, _, + _) = scenic_train_utils.initialize_model( + model_def=model.flax_model, + input_spec=input_specs, + config=config, + rngs={'params': params_rng, + 'dropout': dropout_rng}) + + _, train_rng = jax.random.split(rng) + + train_state = scenic_train_utils.TrainState( + global_step=0, + params=params, + model_state=model_state, + rng=train_rng) + + train_state, step = trainer.maybe_restore_model_or_params(model, train_state, + workdir, config) + train_state = jax_utils.replicate(train_state) + + # Evaluate + evaler.run_one_eval( + train_state, step, dataset, writer, is_final=True) + + # Wait for all hosts to finish before proceeding to next checkpoint: + logging.info('Reached barrier on host %s for checkpoint %s', + jax.process_index(), latest_checkpoint) + scenic_train_utils.barrier() + + # Wait for all hosts to finish before exiting: + logging.info('Reached final barrier on host %s', jax.process_index()) + scenic_train_utils.barrier() + + # Shut down work unit and exit: + logging.info('Exiting.') + + +if __name__ == '__main__': + scenic_app.run(main=main) diff --git a/scenic/projects/boundary_attention/eval_manager.py b/scenic/projects/boundary_attention/eval_manager.py new file mode 100644 index 0000000000000000000000000000000000000000..992df0a8004a162fd0c824068259866a0abf250a --- /dev/null +++ b/scenic/projects/boundary_attention/eval_manager.py @@ -0,0 +1,221 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""An eval manager. + +It can be run either from a standalone eval binary or as part of a periodic +evaluation in a train loop. +""" + +import contextlib +import functools +from typing import ContextManager, Dict, Optional, Tuple + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.projects.boundary_attention.helpers import viz_utils +from scenic.projects.boundary_attention.types import ArrayDict, MetricFn # pylint: disable=g-multiple-import, g-importing-member +from scenic.train_lib import train_utils as scenic_train_utils + + +def eval_step( + train_state: scenic_train_utils.TrainState, + batch: ArrayDict, + flax_model: nn.Module, + metrics_fn: MetricFn, +) -> Tuple[Dict[str, jnp.ndarray], ArrayDict]: + """Runs a single step of evaluation.""" + + variables = {'params': train_state.params, **train_state.model_state} + + rng = train_state.rng + + params_rng, codebook_rng, _ = jax.random.split(rng, 3) + # Bind the rng to the host/device we are on. + params_rng = scenic_train_utils.bind_rng_to_host_device( + params_rng, axis_name='batch', bind_to='device' + ) + + rngs = {'params': params_rng, 'codebook': codebook_rng} + + # Run model + model_outputs = flax_model.apply( + variables, batch['image'], train=False, rngs=rngs + ) + + # Metrics + metrics = metrics_fn(model_outputs, batch) + + return metrics, model_outputs + + +_SPARSE_BATCHES_FOR_VISUALIZATION = list(range(4)) + + +class EvalManager: + """Manages evaluations, deciding which to run at any given step.""" + + def __init__( + self, + model, + config: ml_collections.ConfigDict, + rng: jax.Array, + report_progress: Optional[periodic_actions.ReportProgress] = None, + ): + self.model = model + self.config = config + self.rng = rng + self.report_progress = report_progress + + self.last_eval_step = -1 + + def _evaluate( + self, + train_state: scenic_train_utils.TrainState, + step: int, + dataset: dataset_utils.Dataset, + writer: metric_writers.MetricWriter, + ): + """Performs a single evaluation pass over the dataset for the given step.""" + + valid_iter = dataset.valid_iter + num_valid_ex = dataset.meta_data['num_eval_examples'] + # split = self.config.dataset.get('split', 'validation') + split = 'test' + + if not isinstance(valid_iter, dict): # Only on validation set. + valid_iter = {'valid': (valid_iter, True)} + num_valid_ex = {'valid': num_valid_ex} + + for val_name, (val_iter, gen_viz) in valid_iter.items(): + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=self.model.flax_model, + metrics_fn=self.model.get_metrics_fn(split), + ), + axis_name='batch', + ) + + num_ex = num_valid_ex[val_name] + logging.info('Dataset %s has %d of examples', val_name, num_ex) + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = self.config.get( + 'eval_batch_size', self.config.batch_size + ) + total_eval_steps = int(np.ceil(num_ex / eval_batch_size)) + steps_per_eval = self.config.get('steps_per_eval') or total_eval_steps + if steps_per_eval > total_eval_steps: + logging.warning( + 'Requested %d eval steps, but iterating through the full ' + 'validation set only takes %d steps. Performing %d eval steps.', + steps_per_eval, + total_eval_steps, + total_eval_steps, + ) + steps_per_eval = total_eval_steps + eval_metrics = [] + additional_summary = None + for i in range(steps_per_eval): + eval_batch = next(val_iter) + + e_metrics, model_outputs = eval_step_pmapped( + batch=eval_batch, train_state=train_state + ) + + ################### Visualization ################### + if ( + split == 'test' + and gen_viz + and i in _SPARSE_BATCHES_FOR_VISUALIZATION + and self.config.get('visualize', False) + ): + img_val_name = f'{val_name}_batch{i}' + write_images = viz_utils.get_viz_dict_from_batch( + eval_batch, model_outputs, self.model, img_val_name + ) + write_images = jax.tree_util.tree_map( + scenic_train_utils.unreplicate_and_get, write_images + ) + writer.write_images(step, write_images) + + ################### Save evaluation metrics ################### + eval_metrics.append(scenic_train_utils.unreplicate_and_get(e_metrics)) + if i % 10 == 0 or i == steps_per_eval - 1: + logging.info('Completed eval step %d of %d.', i + 1, steps_per_eval) + + ######################################################### + + prefix = f'eval/{val_name}' + scenic_train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + extra_eval_summary=additional_summary, + writer=writer, + prefix=prefix, + ) + + writer.flush() + + def _eval_stage_context(self, name: str) -> ContextManager[None]: + """A context manager for each state of eval.""" + if self.report_progress: + return self.report_progress.timed(name) + return contextlib.nullcontext() + + def run_one_eval( + self, + train_state: scenic_train_utils.TrainState, + step: int, + dataset: dataset_utils.Dataset, + writer: metric_writers.MetricWriter, + is_final: bool, + ): + """Runs evaluations against a single train_state/step. + + Args: + train_state: The train state being evaluated. + step: The global step corresponding to the `train_state`. + dataset: The dataset to compute metrics on. Note that fewshot and linear + probe evals create their own datasets independent of this. + writer: A metrics writer. + is_final: Whether this is the final step being evaluated, so evals should + be run even if they wouldn't normally run at this step. + """ + log_eval_steps = self.config.get('log_eval_steps') + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + if ( + self.last_eval_step < 0 + or step >= self.last_eval_step + log_eval_steps + or is_final + ): + logging.info('Running eval at step %d.', step) + with self._eval_stage_context('eval'): + # Sync model state across replicas. + train_state = scenic_train_utils.sync_model_state_across_replicas( + train_state + ) + self._evaluate(train_state, step, dataset, writer) + writer.flush() + self.last_eval_step = step + + logging.info('Completed all evaluations for step %d,', step) diff --git a/scenic/projects/boundary_attention/field_of_junctions_jax/__init__.py b/scenic/projects/boundary_attention/field_of_junctions_jax/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/boundary_attention/field_of_junctions_jax/demo.ipynb b/scenic/projects/boundary_attention/field_of_junctions_jax/demo.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..4e7ec0df75f67bb19d9ac0fe25cabaa66cc6d88c --- /dev/null +++ b/scenic/projects/boundary_attention/field_of_junctions_jax/demo.ipynb @@ -0,0 +1,307 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "qyp8u2RHEL12" + }, + "source": [ + "# JAX Field of Junctions Demo" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "executionInfo": { + "elapsed": 528, + "status": "ok", + "timestamp": 1704742464731, + "user": { + "displayName": "Mia Polansky", + "userId": "05670773924513039265" + }, + "user_tz": 300 + }, + "id": "2nBYEB04XeyJ" + }, + "outputs": [], + "source": [ + "from etils.lazy_imports import *\n", + "from types import SimpleNamespace\n", + "\n", + "from scenic.projects.boundary_attention.field_of_junctions_jax import field_of_junctions\n", + "from scenic.projects.boundary_attention.field_of_junctions_jax import foj_helpers" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "height": 335 + }, + "executionInfo": { + "elapsed": 7398, + "status": "ok", + "timestamp": 1704742497841, + "user": { + "displayName": "Mia Polansky", + "userId": "05670773924513039265" + }, + "user_tz": 300 + }, + "id": "De-QUxud7iAV", + "outputId": "910fdea6-6e86-468e-eb64-5d0d920d11d4" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(-0.5, 47.5, 47.5, -0.5)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(-0.5, 47.5, 47.5, -0.5)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABHgAAAI3CAYAAADgLOzAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAABYl\nAAAWJQFJUiTwAABZPklEQVR4nO3dd5hcd3k37udr9d57b1a3bMu9V8B0cExvIYEEEkLyS0Ly5i0h\nb0ghvcCbRjGhB0Moxr1XGVvusmwVq/e26l3n98fMxhuhFY+FYX3gvq9rr9XufOYzZ2bOzhw9c+ZM\nqaoqAAAAAKivkzp6AQAAAAD48RjwAAAAANScAQ8AAABAzRnwAAAAANScAQ8AAABAzRnwAAAAANSc\nAQ8AAABAzRnwAAAAANScAQ8AAABAzRnwAAAAANScAQ8AAABAzRnwAAAAANScAQ8AAABAzRnwUHul\nlKr5Nb6jl+UnqZQyvvW6dvSyvJyUUpY3b5dLOnpZAIAXpw7bcXVYxp+2UspdzdvkfR29LMALDHh4\n2Sil9CylfKiU8r1SyspSyp5Syu5SyrJSynWllHeVUnp09HLy0imlfLz51b+jlwUAft6UUq5tM7x4\npJRSjpP9UjN37U9xEfkJKKX8ZnP7a3xHLwvw0urc0QsAERGllNdFxL9GxPA2v94dEUciYnzz6+qI\n+GQp5d1VVd3x017Gl4GDEfFcRy/ES+wPm9+vjYiWE+xYGhH7ImLPS7A8APDzam5EvCkivvVTvtzW\nbZuDP+XLfTHqsIwvxm9GxLiIuCsilp9gx8po3C7bX5IlAl4SBjx0uOaunZ+Nxh5lz0XEJyLixqqq\ntjRP7xcRV0TEr0fEJRFxUUT83A14qqpaExHTOno5Xm6qqrq8o5cBAH5G/N9Syrerqjry07rAqqpe\n9ts2dVjGn7aqqt7T0csA/DBv0aJDlVJOiYh/jsa6eENEnFZV1ZdahzsREVVVba+q6ptVVV0aEW+N\niJ0ds7QAAD+T7o7GnrAzI+IdHbwsAJwgAx462p9ERLeIWBMR76iqau/xwlVV/UdE/M2LuYBSSu9S\nyh+UUh4upWwvpewrpSwupfxDKWXMcc5zTSnly6WUp0spLaWUvaWUJaWUfy2lTDnO5f3XgfhKKWNL\nKf9WSlldStnfPJ7QX5VS+r6Y69Dsbfcgy23eQ//xUkqn5nurn2gex2hrKeX6UsoZ7fR+vPU99aWU\nk0opv9U87+5SypZSyndLKWe1c973Nc9713GW+7/6j17eNrFlbW63F/X+/vYOsnz0spVS3l5KeaCU\nsqOUsqmU8p+llOlt8iNKKf/Y7NvXvK9/v5TSqZ3LnVhK+e1Syu3N+3Vfcz2Z1/z9cY8XVUqZUUr5\neillY3PderaU8kellO7Hus2Ocf7XlVK+U0pZX0o50Oz5XinlldnbDgCa1kfEp5r//ngp5YT28i+l\nvLmUclPzeXZ/c/vny6WU049znnYPYFxKubg0jsO4uvlct725DfftUsqvlFJOauYuanbsL6UMOs5l\nTSylHGlmp76I63XMZTz6+bqU8t5SykOllJ3N7Y07SylXttN59HbKe5vbEDua1/P2Usqr2jnvJc3z\nLj/OMv/QNlrr8kbj7VkREXcetf1117G62uk/5kGWj162UsorSym3lcb2aEsp5dZSyrlt8v1KKX9S\nSlnU3B5aVUr5ZHvbUc3ttQ+VUr7fXBf2NG+zx5rbUf1/xHKPLqV8tpSyprnt9nwp5W9LKQOOdZsd\n4/wXlFK+Vl7Ytt/SvH5vL6X9Y1jBT01VVb58dchXRIyKxjF2qoj42I/RUzW/xh/jtOnReG9xa+Zg\nROxq8/PWiDj/GOf79TaZKiJ2RMT+Nj/viogrfsTyvCEitrQ5/8E2pz0cEV1e5PUc33r+Y5x2bfO0\nT0TEjc1/H4jG3k6tl7k3Is49xnk/3jz9CxHxzTa3U0ub8x6KiLce47zva55+13GWu7X/2ja/+/to\nbEy29m9q/tz69fcv4nZpvX8vaW/ZIuKTba7XjjaXuyUiTo6IKRGxqs19dahN5tPtXO4jbTJHImJb\nm/W59T7u0855r2jeH63Z7W3Wrwcj4s+Ovs3anLdLRHzpqPVz+1E//0VH/3378uXLl6+X/1eb7Yev\nRcTANs8nHzhG9kvHeW46qbkd0Xa7YVubnw9HxIfaWYZjbsdFxAePem7bHf99G66KiO5t8s81f/eR\n41zfP25m7nuRt1N7y/hf2zgR8Zk2173t8/LhiLj6GJ1tt1P+tk326O2J3znGeS9pnrb8OMv8X/1t\nfvc70djOOhwvbAe33f761ou4Te5qdryvvWWLiA83r8vho26TvRFxQUQMiYin4oVt67bb2te3c7nX\nHbUObGtzfaqIWBIRo9s57ynxwrZ5FY3t5D1tzvf/HX2bHXX+Tx512TuOuuyvRsRJHf137evn+8se\n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\nXHR4SCp34D0t6c69t01JZ2/ZnnvMn7z0denOt+1rSeUenTsu3Xl+y6ZUbu8bH013tmy4Ip3tszWX\ne3X/ZDAivj3i9lRu+jP559sTYQ8eAAAAgJoz4AEAAACoOQMeAAAAgJoz4AEAAACoOQMeAAAAgJoz\n4AEAAACoOQMeAAAAgJoz4AEAAACoOQMeAAAAgJoz4AEAAACouc4dvQAAAOQdWHxPOnvW+Fmp3Pqp\n/dKdz057IJUbtuu0dOeoww+nchv7LEx3ru5xZTp78Z5uqdzku7anOz/eZWUqd/WaTunOh7uWdHbC\np7+bynUZ0jPd+cCIC1K5TtX8dOcbn8tdpz6n3Z3ufGrx9HR2/9dX5TrfdCjdee4VZ6dy192dX597\nnrYunb2sDEjlHr8nf99vfdUjudyR69Kd4+a/NpVbOX51unP43Wels/9+0XOp3KRH5qY7h+xflsr1\nuGdqunP6GdvS2df2PS+V6/qDvunO9XNyzzlTNsxJdz7TsjSVu+jg+enOrb2qdPY7+3Pr/nsH7093\nzpi3JpXrMfBIuvNE2IMHAAAAoOYMeAAAAABqzoAHAAAAoOYMeAAAAABqzoAHAAAAoOYMeAAAAABq\nzoAHAAAAoOYMeAAAAABqzoAHAAAAoOY6d/QCAACQN2LCRens/kWrc50DdqQ7+35tWiq3fMId6c7N\nB69M5R58zYF05x+dszidvWXtmFTu/rOmpDsvWtMrlXskjqQ7p5z+fDq7rufvpXKz9i1Pd/Z8ZGUq\nd+rUwfnONz2Wyj236bXpzpndH0xnd86akcp1P3Qw3fn0xoWpXI8J16Q7Fz3aKZ19ckru8sf0nZ7u\nnPXsN1K5LSNfn+68/93dU7npCw+lO7/UUtLZ2Uv7pHIDLtud7lxz265UrveVX053Lrnj/6Sz+6av\nSeWOnNmS7ty99vJUrkfnBenOcZfnOv/l3h+kO6/onX9uvPTsJancrjWfTnfOfe3/SuVuPbQ23Xki\n7MEDAAAAUHMGPAAAAAA1Z8ADAAAAUHMGPAAAAAA1Z8ADAAAAUHMGPAAAAAA1Z8ADAAAAUHMGPAAA\nAAA1Z8ADAAAAUHMGPAAAAAA117mjFwAAgLzHVy5NZyeOPSeVO3jvgXTnriFdU7lV75uS7rx88bxU\nbmn0THd+cWP+dczDQ0ekcjM3b0p3rui7J5U7fdKydOfqXdPS2Xj0X1Ox/t1/OV35+rFbU7k1m69P\n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\nI7ans9Nvy637W16xL905aHcue9fYyenOi9PJF9iDBwAAAKDmDHgAAAAAas6ABwAAAKDmDHgAAAAA\nas6ABwAAAKDmDHgAAAAAas6ABwAAAKDmDHgAAAAAas6ABwAAAKDmDHgAAAAAaq5zRy8AAAB5u869\nOJ0d0dI9lbt+7dR053sO5ToPjN6U7ny0LEvlJo1ekO7csWNQOvv01Nx1mnjb+nTn5MsOp3Lrrn1T\nunPGuOfS2R+cd00qN/FbLenOR17/6lRu8K6t6c6ZO55N5ZZO6pfuXHDjfenskrm5++kds/unO29a\ntCqVe3L8nHTniKW52ykiYuOKPancrr1/kO58ft2nUrlTupd058PDrkzlOt94U7rz8mf7prN3v3Zo\nKjd79cJ0Z6+Tcvfp7t0D051bnn4qnX12+KhUrmXV4nTnHWe/I5U7p9s96c7uJ/VJ5V515YF05233\nj0tnWzbmbqd3rrk13XlSNTeV+/qAx9KdJ8IePAAAAAA1Z8ADAAAAUHMGPAAAAAA1Z8ADAAAAUHMG\nPAAAAAA1Z8ADAAAAUHMGPAAAAAA1Z8ADAAAAUHMGPAAAAAA117mjFwAAgLzp1dJ09sFFK1O5DeOm\npTv3jnw2lauG53IREVPuHpDKdemXy0VEjF42Op0d0r8lldvf+7x0Z6/9z6dyT73jgXTn1iPL8tkN\nF6dyn/nlfOfs589P5Q48mFvvIiI2Xz4slXvs0Mx05+gLL09npy+6MZX78pFe6c7T5yRvp4e/ke48\n8+8vSWdX/cOEVG7O7G3pzkc35+6nUSOOpDsntZySyi1/03fTnZurHunsiEVfSuU2XPGWdOfc27ul\ncg8v/sN05+QLrkhnN61bk8od6JR/fHzdqQdTuSHfWpLuXDE4l7vumUXpzg90zv+NbhqS+xtZ1+mt\n6c6HH/tMKjez+2+mO+ND+Wgre/AAAAAA1JwBDwAAAEDNGfAAAAAA1JwBDwAAAEDNGfAAAAAA1JwB\nDwAAAEDNGfAAAAAA1JwBDwAAAEDNGfAAAAAA1JwBDwAAAEDNde7oBQAAIG/t+Pzm2/nLh6Zyp535\n5XRnp63jUrme1z6X7hw7flYqt3tTz3TnucP3pbP37eqXyq0d0yfdefl3hqVyI3cOSncuvuqCdPaK\niU+lcpsf7Z/uXNPn+VRuxbTcehcRMWT511K59dEl3Tlz19Z09umuU1K5oT8Yme4cNOXJVG7ErRel\nO2/7i/3p7IX916Ry3y3/lu4c8fivpnItB25Md3bplXssW1vyj3nPbOmfzg4YdGYqt3zTxHRn34E3\npHJl+jvSnUMOdE1nO5+yKZVb3GdaunP0Y3encos2nJLuXD41tz6fumpyunNft8Pp7Ni+ueen3uvn\npjtbLvnHVK7bYzenOyMufxHZBnvwAAAAANScAQ8AAABAzRnwAAAAANScAQ8AAABAzRnwAAAAANSc\nAQ8AAABAzRnwAAAAANScAQ8AAABAzRnwAAAAANRc545eAAAA8g7s3p7O7jt3fyr31GfOTndefPnE\nVO6xmf3Tnf135rIDBnRPd35j9bx0tkwpqdzUQb+Y7lw1anMq13PypnTnhc9+LZ2d//y7U7lh+xam\nO4ce6pHKTTyyPN15sJqQyp014IZ057LxZ6azr92Q61346kvTnWuOLErlen60d7rzyWpUOrttz6pU\nbsSQw+nOnmfk1pPuEy9Pd548a3Eq13Vl/v7sMTd/O817YGUq1+8HS9KdT4zom8oN69ct3fnMsoPp\n7BmHn0vl7lmZv+8fPXNqKjf7wTHpzvGdcrdpn8FPpztvXJn/exo1+4lUrt9j+cfclYdz99OW9ZPS\nnSfCHjwAAAAANWfAAwAAAFBzBjwAAAAANWfAAwAAAFBzBjwAAAAANWfAAwAAAFBzBjwAAAAANWfA\nAwAAAFBzBjwAAAAANWfAAwAAAFBznTt6AQAAyLusTE1nv/mX81O53n8yLN15+5Onp3KjDudfRxx3\n4adSuS9f3z/dOeOOt+cv/5XLU7kNN92X7ixX7Ezlpqwv6c4vHL4knZ10OLesC2e2pDsHPXpNKrf1\nyB3pzuFjJqZypzzwZLpz74Xj0tnFQ6akcge2bU93XrH7zancw2NuSnee+1jPdPaMSVtTuSfWnJLu\nHHUgd/273b0j3Tn62UGp3NLxz6Q7O9+4JJ1947jcevLUnm7pztMvezoXfPiKdOfqwyens9etG57K\nDZ68Jd057uu5x7JNu6alO3tt25TKrR6SX0e3rftiOlv2jkzlerakK+PUpR9I5TasXJAvPQH24AEA\nAACoOQMeAAAAgJoz4AEAAACoOQMeAAAAgJoz4AEAAACoOQMeAAAAgJoz4AEAAACoOQMeAAAAgJoz\n4AEAAACouc4dvQAAAOQtXHR3Orvq4ktTuXEPfCvdecHGoancokNL050njX9T7rJ3rU53LvjgLens\nmFOHpHLLt1bpzl99pncqt2XY/nTnVXvT0eg9Zmoqt/mbh9Odfa48lMrdvLlLuvOp07emcl37XJnu\nrLo/nc4e2p57vfup5fPTnaefdXoqt+yR/G1/2o5709kH5g9O5SasGZXu7DTwzlTu0Nxh6c6NT+fW\n/fHru6c7N73rSDq7fXHub7TaPTLdufCWv0zlhsy7Ld258u3L09l5i8ancqd3yT+YVLPXpnI9ln8z\n3bm4c+5+mrjygXTnK8uMdHbCg2ekchtfcX+6c2j/A6nc4S+tSXeeCHvwAAAAANScAQ8AAABAzRnw\nAAAAANScAQ8AAABAzRnwAAAAANScAQ8AAABAzRnwAAAAANScAQ8AAABAzRnwAAAAANScAQ8AAABA\nzXXu6AUAACCv2n1aOnvo0GdTuZnLP5jufLzHf6Zyk+O30p09vvt8Krdx4nPpzr2HR6Szm+/om8pN\nWr403fn4kNmp3JMH7kt37pszPp2d2H9HKnf/U3PSnaeM25LL9eqT7hz09yWVu+OUbenO88vBdPah\nMbnb6UMXnpnuXHjb7ancvFPyt9OAk/LZyV12pnIrL7kp3dl/Yu7vefDX56U7l+85L5UbNP4r6c5H\nn5qbzp627UAq13/zP6U7hw98dSp375i16c4JG96Szs46cFcqd3bnw+nOp1eOSuUG7NqT7ty3emwq\nt63bxnTn8oO5x9yIiOqcu1O5loe6pjuXDsqtJ8Ne8Z5054mwBw8AAABAzRnwAAAAANScAQ8AAABA\nzRnwAAAAANScAQ8AAABAzRnwAAAAANScAQ8AAABAzRnwAAAAANScAQ8AAABAzRnwAAAAANRc545e\nAAAA8pbO2JjOzuh/USr38Jot6c6LW85P5W5+5JZ055n9t6Zyg1Z1SnfuHr0vnZ16xZFUrvt3p6Q7\nRz63LJU7Mm5WurNseiSdXbZrTCr3zjflb6fr+qxN5Q6c1TXdub/3hlTu7TuHpDt7DZibzp486vlU\n7usb7kl3Tnr/B1O5dy29Id1565CJ6exZpWcqN+veOenOB3fllnVT5/zj05zZPXKXfWBwuvNdS55O\nZ+/scUEqN6zva9KdqwcfSuX69p6a7hwyf286O3Nc7rHsvvl3pztHdr8ilVs9NXd/RkSc0i/3mH/w\ns/3Snf3Py697nfadlsqdMeNwuvM7O3LryY4ep6c7T4Q9eAAAAABqzoAHAAAAoOYMeAAAAABqzoAH\nAAAAoOYMeAAAAABqzoAHAAAAoOYMeAAAAABqzoAHAAAAoOYMeAAAAABqrnNHLwAAAHlzF56dzm4Z\ndVMqN7T/9nTn80/sTOVOvrxXurPL5jNTuW7VU+nOCx/Zk87e3nNoKjd2yfx055Brcpc/r1NJd854\n/OJ09uK+q1K5/tPz99ObDj+Uym29/Y/TnQ93viWVe9X4g+nOhQ99Pp3tee87UrlVvd6a7hxx2cOp\n3MCnfzXd+cY+30hnt0zN3Vb39FuR7rz8odz6/Mz2CenOgz2Tf6NLqnTnpitmpLNDb2hJ5bY+PCzd\nOXPQnalcl0n5v/uVhx9NZ2d3vzKVW3TFNenOA/0/lMr1vOPkdOfQQ7kxxEnnjk93njQm9zgeETFq\n/PpU7uCNuee7iIjJv30klWv5y2fTnSfCHjwAAAAANWfAAwAAAFBzBjwAAAAANWfAAwAAAFBzBjwA\nAAAANWfAAwAAAFBzBjwAAAAANWfAAwAAAFBzBjwAAAAANWfAAwAAAFBznTt6AQAAyLt18I50dlr0\nT+UGLOyb7hw3Ldd583PL0p3Lf3lDKnfyth7pzvv/o0pnL7pnUyp3Uvdx6c4eD0xP5aZOeiDdueHc\n4ensQ9/ukspdesbOdOeePZekcvOG/Xu6803bX5fKPXDL3nTn6ovPSmdHDFqZyp3e52C6Mz7Xkoqt\nnf2v6cpq8NvS2SO97k7l3nLulHTnlu53pnJzu41Pd+7a8WAq1393/rZfd3h3Ojt19ORUrvPbF6U7\nj9x0SSrXZ9++dOfm5Y+ls3dOyN33M2/L36YPjHpvKjf8/NvTnd3vzt322y6fne7ct/j+dHbv8+em\nclf+/mfSnd0+kbtOd711cbrzRNiDBwAAAKDmDHgAAAAAas6ABwAAAKDmDHgAAAAAas6ABwAAAKDm\nDHgAAAAAas6ABwAAAKDmDHgAAAAAas6ABwAAAKDmOnf0AgAA8CLsmpOObuj1zVRucM8J6c71M/uk\nciNfxOuI0+9en8ptO21sunPRiL3p7Mh4PpUbOmNSunPZtVUqt3t9r3Tn3Gd2p7OHR21M5db0T1fG\nlvW56//RcSPSnTfOyt325140Jt255Mmh6WzfrTencjffcE66c9CZuXV/7sar0509T3osnd12f+76\n33/W7enOHfvPT+XeOWVPuvO6p16Xyo3vvzzdeXDT4XT2yY1np3KDtz+Y7rx5x9pU7hUDtqc7u+8Z\nl85ePCL3uHNb56XpztH9cn97g57KPze1dF6YynV9tF+6c83qy9LZBe+al8o985mD6c7ew3N/9+d+\nen66M96Qj7ayBw8AAABAzRnwAAAAANScAQ8AAABAzRnwAAAAANScAQ8AAABAzRnwAAAAANScAQ8A\nAABAzRnwAAAAANScAQ8AAABAzRnwAAAAANRc545eAAAA8k5ae1c6+9bD3VO5f1g+NN3Z75qVqVyP\nLw9Kd6659Klc57cPpTvnnHIknV249oxU7qIHTkt3Dr3mT1O5r5bXpjuXPTw4nX1btSyVu2djt3Tn\n9MMtqdz8R3anO6fu3JPKDVk1Ld259qot6ezbDl6Syh0+a0O6c0L33Po0uPvX0513LOqTznYamXsN\n/7xtU9Od+3uNSOU+98SBdGe/Cfelci1H9qU7x+7en84On9s3lVu97P5057QLX53KPbzoB+nOLX/8\nwXR27/cX5HLD56Y7J59ybSq3c2H+8XHb2l9OJnOXHRFxar/F6eyWr85M5Ua+5hPpzlWrco97Y6tZ\n6c4TYQ8eAAAAgJoz4AEAAACoOQMeAAAAgJoz4AEAAACoOQMeAAAAgJoz4AEAAACoOQMeAAAAgJoz\n4AEAAACoOQMeAAAAgJoz4AEAAACouc4dvQAAAOQN3fpUOvv5yaemcm+9ele685mv5F4f3D3lrHTn\n8uifyk08eH268/wbZqWzf3N6lcrdt2tlujO6TE7Fxm44nK5cMHpNOnvopK6p3Mb5+dd7dw7amcp1\nOjldGdN6b0jlytNH0p3vOrl/Onv9kkdSudk7z0h3jt2/IpX73JNnpzs/MXFtOnvL+txttW7ggHTn\n5uoHqdyFc4alO+euaEnlHr3p9enO6jduTWcfbcn9PfXfe0W6c8zWO3LBXW9Kd/bd+3A6u/OS9anc\ntK8PSXcefDx3/de/YWS68/T+30nlelWD052LN+T+liMiDgzcksqteHRdurN6LLc+zT/1QLrz0vhw\nOtvKHjwAAAAANWfAAwAAAFBzBjwAAAAANWfAAwAAAFBzBjwAAAAANWfAAwAAAFBzBjwAAAAANWfA\nAwAAAFBzBjwAAAAANde5oxcAAIC8I/+3Xzo7YPvhVO7WLz2a7lxz8OpUbujbHkh3blrWJ5W77M3X\npDsPP7g7nZ34SI9Ubscpj6U7X7VrRip3/+GF6c6xp3VNZ4fcltvM73XuJenOwyu3pXIHH8/fTs+s\nGZfKDTn1znTnomXPprOveeZjqdy8M/qnO7cd3J7KnXX12nTn3YuGpLN9zso9Riy+9d5059y5+1O5\n7+3ek+58ZtelqdzZI4alO59s6Z3OjvnitFTuyPj8Y8m+IZelcs8fyv0tRUSc+d3h6exJV+1L5Z58\nf0u6893fOJTKVcPy63Of7+cecx88dWa6c8ShNensrMG5dWrPxtXpzgUHT0/ltj95SbrzRNiDBwAA\nAKDmDHgAAAAAas6ABwAAAKDmDHgAAAAAas6ABwAAAKDmDHgAAAAAas6ABwAAAKDmDHgAAAAAas6A\nBwAAAKDmDHgAAAAAaq5zRy8AAAB5V37pmnT2iSPzU7muw/Od/c/4Tip3+NmJ6c6u+09P5ZY89N10\n56Ihw9PZvmf0SOU2dD0n3fkvDy1M5c49uWu6c/U3dqWza4b3TeWu2F6lO0fueDqVe2Lqa9KdI3o/\nl8odGJv/b8u4xTvT2c+tuDWV6zJof7pzT251jt9d1S3deV2/u9LZ39j9ylTuL94+M9156ryDqdzj\ny/LXqeeOJ1K5PkNzjzkRETsOvDqdXfuG3OPJ21pKunPh+Nydf/6GtenOKwatTGfvXZj7O1neeVm6\n86/H5K7TiEVvT3dunP73qdwrnvzPdOeyTpvS2VFrB6ZyvQZemO4cfvHhVO7GIdelOyPOfxHZBnvw\nAAAAANScAQ8AAABAzRnwAAAAANScAQ8AAABAzRnwAAAAANScAQ8AAABAzRnwAAAAANScAQ8AAABA\nzRnwAAAAANRc545eAAAA8tb1/Uo6+43Tz0zlLnugV7qz86OXpHJHpvRMd55+0jdSuQcGvjnd2f/+\nw+ns4fHXpXLdH92U7pzZ89Wp3OLzv5fuPPkVY9PZC68/O5X75K7n0p0TTn13Kjf8nlvSnfN6DUrl\nxo09ku6sep6czk6bNC+V679rWLpz3b93T+VuuDiXi4gY2T33txwR8a1zDqRyFz8xI915R6c1qdz0\nNy9Odw745jmp3Kembk93zjiSX5/fHR9I5a6f9rvpzlEbcn93Ux7PPz7+y9kD09lO2/umcrMWnJ7u\n3Pq/9qdyQ7d/Kt3ZMupgKnff2E7pzv77X5nOfmpj7nHn3C5Ppju79Oqayj2xdFm680TYgwcAAACg\n5gx4AAAAAGrOgAcAAACg5gx4AAAAAGrOgAcAAACg5gx4AAAAAGrOgAcAAACg5gx4AAAAAGrOgAcA\n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\nJ85Pd26/cHs6O/qUX0jlbvzXL6Q7T/7Yk6nc9+7//XRn78v/I5U748n8PglDvnIwnV0yuk8qd2T4\n2HTnGZsWp3L3zhmc7uzbdWc6+8Thfqnc9pbc40NExKiVZ6Ryc/ftTnd235UbQ3zpgdztGRHxtlNy\nf8sRETtmLk3lhk8dmu7s1Gt/Ktf1ufzf/YmwBw8AAABAzRnwAAAAANScAQ8AAABAzRnwAAAAANSc\nAQ8AAABAzRnwAAAAANScAQ8AAABAzRnwAAAAANScAQ8AAABAzXXu6AUAACBv7eyx6eyg51emcv22\nnJXunLq6fyr31PlT0p09Ju5N5TZ2eibdWc07NZ19/OB9qdzssTPSnb1WD0rlNm+9PN15cv8u6eyw\nk5akcgfnlnTnhIeqVO7Ih/enO+c9vzqVG7XqqnTniFlD0tmd5elUrm/fa9OdA7oNzQXP3JPuPPXb\ni9LZ2z7YKZU7cs7BdOf0eVNTuQvPeSLd+ZXP5/5GPjzi5nTnvN8cmc72/+3c7d+px5F0521vOCOV\nO7Az95gTETHn2eHp7IpxO1K5nTs3pDufP/dwKjeiZUK682sj56dyQyf3TXfuHndaOjvm+SdTubum\nb0p37t85O5Ubf/FN6c6Id72IbIM9eAAAAABqzoAHAAAAoOYMeAAAAABqzoAHAAAAoOYMeAAAAABq\nzoAHAAAAoOYMeAAAAABqzoAHAAAAoOYMeAAAAABqzoAHAAAAoOY6d/QCAACQd2BD73R29djTcp27\nV6Q7n588OJWbuu6edGe/U3qlct/uOz3deeHBnenss7N+LZXb/Py6dOeo7atTuZ5vHpHu7HrdY+ns\noXN7pnKd7h+b7tyxuFMqt39N7v6MiHhX71NTuRXn7Up3HlywKZ2dc7BbKndg0BvSndvGfz+V6711\nVLpz7Z8NTWcHf+u6VG7c8Nz9GRHx9JJLU7nd8+9Pd17+ztxt+vVn56Q7pz50Wzp78vRtqdwXDg1P\nd16w5POpXJf735/ufPw9j6SzZ2xbm8p1XZp/3Jl0KPc38sjli9Kdl8wfl8p1P+vZdOfWz+cfn3sO\neSKVe+TM3HofEXHe/udTuVX35e/PeEs+2soePAAAAAA1Z8ADAAAAUHMGPAAAAAA1Z8ADAAAAUHMG\nPAAAAAA1Z8ADAAAAUHMGPAAAAAA1Z8ADAAAAUHMGPAAAAAA1Z8ADAAAAUHOdO3oBAADIW9ajRzo7\nsOe2VG7r9jXpzh5XzU3lpvzH4HTn7SO2p3LvuqUl3bl62eZ0dvI5n0vlTu3bNd3ZecTZqdymWzel\nOy+bOC2d/fbBLanchPO/nu7s3uPkVK7vrGfTnX0W5P470mVN73Tnru2/ls4u6fbJVG7ZwbHpztFL\n3pDKPbBtebpz8OKd6eyYUSNSuW+vvizd+YsXL0nlHm3JXfeIiGHzt6ZyFw06mO48uHtcOntbnydT\nufe0zEx3zh/06lTuNdM7pTtXbnptOnvXHctSuR5v+kq6c9k/5Z5HjvR7fbrzll65v+e5q/LPTaNO\n/oV0dsW9G1K5qwadnu4ceNXKVK7H3/1dujP+IR9tZQ8eAAAAgJoz4AEAAACoOQMeAAAAgJoz4AEA\nAACoOQMeAAAAgJoz4AEAAACoOQMeAAAAgJoz4AEAAACoOQMeAAAAgJrr3NELwE/Wio5eAADgJdX7\n3pLPzlmTyo3cPTDduW7Bk6ncvwwek+6cePviVO6WPrPSneedn38dc1WX81K5Ow4eTnfOvW5kKnfL\nuTelOzd2uTCdPbx2dyp3239elO6c/ca7U7k9Qz+V7jyw5q9TuW6jeqU7H5vxR+nsxUv7p3LbN61O\nd3apuqRyqye1pDtH3Jtf99cPnJLKTe6V+1uOiPh/387d/leeeXO685GuJ6dyzzw3O9054tH8/bT+\ngvNTuW7jl6Q7Dz61PZX7yr616c4547qmsyOn7U/lui77nXTnty/Idb52zF3pzqktB1O5B5dfke5s\nGf1v6WyPz52Zyg2bn//f9N/edW4q9/4Je9KdJ8IePAAAAAA1Z8ADAAAAUHMGPAAAAAA1Z8ADAAAA\nUHMGPAAAAAA1Z8ADAAAAUHMGPAAAAAA1Z8ADAAAAUHMGPAAAAAA1Z8ADAAAAUHOdO3oBAADIG3ho\nWTr7dDUolRu3cnW684wtZ6dyC3rsTneumrUhlbtg5YR05+Ku+eyQg1tSuT5rdqQ7H7x4ayr3lpOO\npDtvHHUgnT3t7tzruAt+Of9674qn3pELjvlquvOW589M5S4b+8V05/i/+/d0dukb/jqV6zW2a7pz\n3OF5qdyOx05Nd26Y0SOdbem1L5XrvyB/34+bkHuM+Iv1b0p3njrr06nc4f4r053Luv2PdHbshtx6\nMiB2pTu3n3koldvYkv9bvn/5densxP0XpXI7Dq3Id56beyzrtWBguvO+J/qlcr1/6Qfpzi7DXp/O\nnlXGp3J3rnsi3Tn5nP+byi2beE66M+JVLyLbYA8eAAAAgJoz4AEAAACoOQMeAAAAgJoz4AEAAACo\nOQMeAAAAgJoz4AEAAACoOQMeAAAAgJoz4AEAAACoOQMeAAAAgJrr3NELAABAXqczrkxnT12wK5Xb\nPWtwurN7n2WpXL9Rn0h3HtyxN5VrWTMg3dm/x+F0dvHa3anckNkj0517Nz2Syi3f2C/decW4gens\ntgsfSuVGL9me7ux0sE8qt2zZjnTn24b1TeVuXfTadOe4D3wqnT1wc69U7spznk93PjjuHanc7PPu\nSnfeNu/MdPbxkUNSubeuzN/3XcasSuV+bXL+vp/4+UtSuWffOSLdufXQXels107PpnI7D5yS7hyy\npH8qt7nfxHTngAeqdHbVFa9K5aaXhenOUcsOpHJPt1yV7pzyyi+lco9vyT/fbXzuxnR22JEtqdzi\ngzvTnTs2TUrldq3rn+48EfbgAQAAAKg5Ax4AAACAmjPgAQAAAKg5Ax4AAACAmjPgAQAAAKg5Ax4A\nAACAmjPgAQAAAKg5Ax4AAACAmjPgAQAAAKg5Ax4AAACAmuvc0QsAAEDe/OtuSGcn/96KVG7Hytel\nOzevn5LKPTHwX9Kdpz2xLZXbM75furPz8CqdPW/FvFRu8iMj0p2rL12Qyi2/65R055iJi9LZIbO6\npHJdV70+3Tlx7iOp3ANfvzLd2fPqe1K5CVuGpDtXLxybzp4047pU7lDfAenOQz9Yk8q1PFvSndOH\n35TOvnlb7rbasjx/+dXIcancyruXpzt/cPI7U7mJ3/9GunPV/txtHxExffKlqdz8mfn7fvZ1fVK5\n8f3uSHf2mJ1/3Nnf49FU7o79e9OdMez5VOzQpofTlaeVt6ZyXZdsSHceOHV3Ovvcwtz1P2tlvrPP\ntJZU7qTeucfmE2UPHgAAAICaM+ABAAAAqDkDHgAAAICaM+ABAAAAqDkDHgAAAICaM+ABAAAAqDkD\nHgAAAICaM+ABAAAAqDkDHgAAAICa69zRCwAAQN6Ucz+QD6+/IRXr1GNzunJdtT2VG3Hd7nTnimHn\np3J9t+Q3XasD+dcxuwx9XSr3eJ+z0p3d7lqYyl12QZd05xM7VqSzk3oOSeUm7s93rnlkXCo3+LTb\n0p1LuhxK5XqN7JnunNTlmXT2yZPemMutX5Xu3H5yv1RuxpFL053d+nwunf2PYb1SuUnLt6U7Z5Tc\nderxtY3pzlf+n9tTucUj16U71+yfmc4OWLo/les9M3d7RkS0/O7KVG7bzWPTnYNvfjCdnfXRc1K5\nVdWRdOdpG9+Zyi07tWu68/G+n07l9mybke6c89f909mTfmlAKje01+R05/wHcs9Pe9Zcn+48Efbg\nAQAAAKg5Ax4AAACAmjPgAQAAAKg5Ax4AAACAmjPgAQAAAKg5Ax4AAACAmjPgAQAAAKg5Ax4AAACA\nmjPgAQAAAKg5Ax4AAACAmuvc0QsAAEDejlkL09lBK0sqd8HKXenO7w6cmsqdN3FKuvOpvU+ncqeP\nXJbuXDN2Tjr7/L51qdycjV9Md36+d+9Ubmr//P35m8t/L539i5W/n8qtOe+UdOeQj21J5ZZfdGa6\nc8qwRancwDt3pztXntMznb28V6dUrst9d6Y7x51yWio38qqH05033fCqdPbC3d9L5cq7X5vu/PaB\nLqncO3/tQLrzzoHzU7lp3zoj3bn/lLXp7L5NudwZLb3Snd/4zzWp3K9vnp3u3PqRwensoTtyj5FT\nzrgg3bntyPpU7qStO/KdC7qlcgOOjE53LviNUensxm/dk8rNGp3fH2bbhNzj3oxJV6U7T4Q9eAAA\nAABqzoAHAAAAoOYMeAAAAABqzoAHAAAAoOYMeAAAAABqzoAHAAAAoOYMeAAAAABqzoAHAAAAoOYM\neAAAAABqzoAHAAAAoOY6d/QCAACQV2bOT2f77JuUyt3abUe6c8YP9qRy35v6b+nOcTtzy3lvt4np\nziOjx6Sz+/5jYyo3+ZpV6c6P3z03ldu/Zle6898nPZnOTu92WSr33Jbp6c5Nr9+Xyl3cp0e688bh\nLanc1rf/Q7pz4K3vTWf7j9qUyg0ePzbdueLw91K5TQunpjtPHrcind360OtTueEP7k93HlqzJpXb\neMrz6c6p8cFU7rFzHkh3Xtjl6XR2zqlnpHL/uiL/WHb5oiGp3MMjV6c7Dz/TPZ3dO/GcVG5Pv2vT\nnb/cJTcyuHvTlenOQ5PGp3J7hvdJd3Z9/uF0dvCQLqncik652zMiYueAlanc0FsPpjtPhD14AAAA\nAGrOgAcAAACg5gx4AAAAAGrOgAcAAACg5gx4AAAAAGrOgAcAAACg5gx4AAAAAGrOgAcAAACg5gx4\nAAAAAGquc0cvAAAAebv+5a3p7OaT703lLh5xYbrzvrOWp3IDJr8y3bns/otSuZGXfDnd+ba/WZ3O\nbpk4PJVb//2r052Pdnoilevz6vHpzrH3jUxn9w3qncqt/6dvpzuHXrIilbt/bv52Gj9vaSo3cOYF\n6c5y2aZ09o7vnZnKvWnN3nRn10umpHL9Om9Mdz520oF09tTTc3/PZ9zxtXTnnt/K3f5rruuW7nzF\nstzj08o3dk13PvWdd6azq4Y/k8pN6vK2dOdNZy9O5d7Q+8F059y1n0hnV/T5Tio3oHwg3fnkwnWp\n3OO9t6c7r+md+xv51FO3pzs/suqqdPamqQ+lcqOO9Ex3TlmXu05rOu1Id54Ie/AAAAAA1JwBDwAA\nAEDNGfAAAAAA1JwBDwAAAEDNGfAAAAAA1JwBDwAAAEDNGfAAAAAA1JwBDwAAAEDNGfAAAAAA1JwB\nDwAAAEDNde7oBQAAIG/oyAfT2W6D+6Zy254elO6csWteKvfIQ6vSnaPeOiqVu7hlQLpz4LTn0tnP\nPdstlfvDd96f7jywcEYq133hsnTn2jVd09kLN/fJXf6rrkh3bn9ueyr38JYt6c5e3fflct/rle7s\n8atPp7Pnn39OKnfX+oPpzl+4eX0qt3Pod9KdE057bzrbc+x9qdznxgxMdy45uDCVe1ffI+nO7wza\nkcpdcMuL+Ls7NR2NWauXp3I378ytoxERUyafnsotf3RyunPPmMXp7OAFb0vlqiG5x/GIiM07c/uE\nrBy7Ld1556LBqdycca9Idz7QKb+eTF91cir3dGlJdz42bEgq9/Y35x4fTpQ9eAAAAABqzoAHAAAA\noOYMeAAAAABqzoAHAAAAoOYMeAAAAABqzoAHAAAAoOYMeAAAAABqzoAHAAAAoOYMeAAAAABqrnNH\nLwAAAHlXljXp7KMPdU/lnrpwc7pz4OHFqdysbaPSnX1/sC2Ve+ikXenOb23cm84OHzMxlbt2eS4X\nETGjS5XK3X/h6HTnhfv6p7MP7fpcKnfRq34x3fmXw+5L5f743nHpzrtmnJHK7RzWKd255O/y616f\nsw6mcu/dOTjdueyUYancmKnvT3du3L01nZ18uGcq9+CA76c7Z3/tlFTu+tX5/16OeO/YVG7Z1hnp\nzjNWLUtnn/pB7jrN7L0v3XnF2Nx68vVeC9Kd3RYMTGc3jHo4lTt99uR05333HUrlfuXZ/enOe39p\nTyo35qYu6c6W5w+ks32GLU/lDk/JPT5ERLxmzYRU7vlHco8PERHxrny0lT14AAAAAGrOgAcAAACg\n5gx4AAAAAGrOgAcAAACg5gx4AAAAAGrOgAcAAACg5gx4AAAAAGrOgAcAAACg5gx4AAAAAGrOgAcA\nAACg5kpVVR29DAAAAAD8GOzBAwAAAFBzBjwAAAAANWfAAwAAAFBzBjwAAAAANWfAAwAAAFBzBjwA\nAAAANWfAAwAAAFBzBjwAAAAANWfAAwAAAFBzBjwAAAAANWfAAwAAAFBzBjwAAAAANWfAAwAAAFBz\n/z9mo2l0fl/YegAAAABJRU5ErkJggg==\n", + "text/plain": [ + "\u003cFigure size 1000x1000 with 2 Axes\u003e" + ] + }, + "metadata": { + "image/png": { + "height": 283, + "width": 572 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "# Red square on black background\n", + "clean_img = jnp.zeros((48, 48, 3), dtype=jnp.float32)\n", + "clean_img = clean_img.at[10:-10, 10:-10, 0].set(1)\n", + "\n", + "# Add noise\n", + "img = clean_img + jax.random.normal(jax.random.PRNGKey(0), shape=clean_img.shape)\n", + "mn, mx = img.min(), img.max()\n", + "\n", + "# Adjust contrast (equally to both images)\n", + "img = (img - mn) / (mx - mn)\n", + "clean_img = (clean_img - mn) / (mx - mn)\n", + "\n", + "plt.figure(figsize=[10, 10])\n", + "plt.subplot(121)\n", + "plt.imshow(clean_img)\n", + "plt.title('Clean input image')\n", + "plt.axis('off');\n", + "plt.subplot(122)\n", + "plt.imshow(img)\n", + "plt.title('Noisy input image')\n", + "plt.axis('off');" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "colab": { + "height": 522 + }, + "executionInfo": { + "elapsed": 9608, + "status": "ok", + "timestamp": 1704742738950, + "user": { + "displayName": "Mia Polansky", + "userId": "05670773924513039265" + }, + "user_tz": 300 + }, + "id": "tq_DRf2-kyFe", + "outputId": "d71ab84b-103d-482d-e6bd-4467921c6e96" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Beginning initialization...\n", + "Initialization iteration 0/30\n", + "Initialization iteration 5/30\n", + "Initialization iteration 10/30\n", + "Initialization iteration 15/30\n", + "Initialization iteration 20/30\n", + "Initialization iteration 25/30\n", + "Initialization done. Beginning refinement...\n", + "Refinement iteration 100/1000\n", + "Refinement iteration 200/1000\n", + "Refinement iteration 300/1000\n", + "Refinement iteration 400/1000\n", + "Refinement iteration 500/1000\n", + "Refinement iteration 600/1000\n", + "Refinement iteration 700/1000\n", + "Refinement iteration 800/1000\n", + "Refinement iteration 900/1000\n", + "Refinement iteration 1000/1000\n" + ] + }, + { + "data": { + "text/plain": [ + "(-0.5, 47.5, 47.5, -0.5)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nn/eWpGkS/VXyfNVm9mFPexN954Mp7ofY/WY0/4yoT05Me7Jem1ebWc847U3al3Pq5X/pr83sF9H/\na+q1udbM7vIsd1a0TYlpT0TbHJjZEjP7ju/1wMyWJ81XF50XdUnZMjPrLOZ7MHp+vpn9JKmNx6N/\nb68/naftf2vvPi9P2bvPyzfMrEO9eQZa+Od7iWlqovUmt/vTLX1982hbDzO7O+n8ec89WSPmT76O\nn0jqe04lLXenhd/zd2l0rQUWft1A8rn7D57lD0vqQxL9WPJ1v9vMhnvmvcXe3Y+VmllV0s9zzaxj\n0vSXWXjPl5jnlNW7H0yadk40za7oeq+Jtqc0afmBmf3I07ZsC7+aIXnaE/V+/r5n3th93zmOpbff\nSjoGf2VmB5LWm9xv/Vc07b8l9VEnk54vUcfKmvaamW3h9wcnT1uS9P+7kp4bJOa/wt792ldp7/5d\nZY+ZjWzp65QHj1Qflt577eT+7ov27nunGjP7QjRdhpn9Omm9NUnXY+J+6W8aWn4DbWiof0os/7ak\n6/lk1Ack39dli3mzLPwKBV8fcmdDfYinrV+y8DUjcZ933N79WvJ00rQPRdP8OqkdyfttUjTdfItx\nvx2tL/HaUmXvHeO4LB37kUcTr9eWbgCP1vOwcw+wllj4ydAbzCwz6nivNLO90fO/b2CZpRbeZH0k\ncSFb+CXNK6LnD5pZ13rzJjqpRxvR5ofq5YMSnUdL71cePC7kh4WVqhMv1COauCzvdWvhL8uJm5s/\nmFm/KO9kZl+zs7/cf13Mm7hJKbVwIPWKKM+IbjwSb8i8KuadY2aPmNnVZtY9KR9gZj+M5jtjZgPE\nvIm+88EU90NT+s2udnbgbq2ZTY/yTDP7gIU3hoGZzY3TXjv3AGtJtD8+bdGgopkNtvDL+IOobVmi\nzYei51eY2cQoz462vdzODnQ8Ktr0czP7vJkNNbOcKMs1s/db+B1lgZn9TMz3YPRcWXT+/LOZ5UfP\n5Vk0CG0N/yJwm50dvPk/SfNkW/jdZ5uj5x+uN98jUb7NwtfRjKR2jzOzb1k0wMuDR2MfZjbEzvbH\nL5tZQYrzJ67j0ui6uN/CT0y56DxNDMb9T9QXPG9mQ6J588zsv+1sn9i93rJzzGyNnR3oui5arjOz\naywcXA3MbL2Z5dabd6idHeSdb9EgWXS9fNLCN/0DM/uF2KZHTdwn1ptmjp0dDKw0s/8ys8LouXw7\n+wZMnZmNFfMnXguKzOw+M+sU5Z2i9iV+Ib6v3nxN6vvOcSwfNH+/tSvpOC8xswlR3sHMvp60rV+z\n8Jf4z1s0eB31T4l+Td33z7H4r5nftLMDEp83s/ZRPjA610rMMzgSTZN4/ucWFnTLiM6vsWb2UvTc\nBhNvxPLg0Zoflt577UR/dya61n6W1N+1s7P3119N6gu+btEb1WbW18x+b2cHWWd5lr+rgTY01D8l\ntrPEzF43s3FRnmvhd84m+vvPiHn/MaldX7J334e+ZO9+02xQivst0W/OaWCah+zsfWWFmf1NUht6\nmlle9P/5Fv9+27vv0rUfeTTt0eIN4NF6HnbuAdbTZjZMzJd4R7nCol9uxTIDM7tfzNvDzI6aGBgx\nBlh58Gj1DzP7Vzt7o+aauCzvdRvdHARmtsj0p1QTn/IpS9zAJD23K6mNqg+7KqmfuiLFNv8ymu8b\n4rlz3kB5ltmUfvOfkm6oeol5r09a9tWpttfOPcDqa3NvO/uprPo344k2HzWzHmLe5F8sHk1xXw6x\n8N36cnvvp0gfTFrudxpYRmK6+fXyzKT9cYdn3sEWDgxVW9InpM1sYzTfPU25ZnjwqP+wd3/iqNLC\n71z9toVvBjQ44FrvOv6oeP7DSc9vtfe+WZJh4ZsGgZl9xDNvtUW/6NV7fqyd/UTqx+o9l+hnt9e/\njqPnP2lnBwKG1XvuUWv8AGtgZj/3TLM2ev6f6+XDLfxlvsSiwWYx7wejedfXy5uz75P9VvRcot86\nbtGbSvWefz1pvf8snr/SPPf9jWiXfM20cDA6MYj+NTFftoV/fZFo16B6zyc+Qfxjz3pzkub/QLqv\nOx48mvNh6b3XTu7vHvdM09HOvjH0XfF8ppktjJ5/07P8XQ20oaH+KdG297zZFj3/X9Hz8xpo80Ni\nvlwL32CRfUgj9lui35zTwDQPJS3/kw1MN9/O3wBrSvuRR9MffAcrUvFUEATbRf6chRdoroV//qXs\nNrPH64dBEBw1s4ejHz+QjkYCOK8S32lWGkSv2PU55/7Rhd9JV//x48asIPretKuiH78bhF/iX9/3\nLPxlr5OZvc+zqN+rPiwIgjcs/BSPWer90PPRv5enOF9jxOk3Ez//IgiCg2LeVy382gGz8Jf+dNtj\nus0HzOyd6Mf6392XaPPPo22r7zEL90XKgiDYaeENdQcLP/2r1JrZf8ZY/BwLPzW1KwiCP3nWX2Rm\nSy38s7U5SU+djP7tHWO9QEM+YeH5XGXhoNI1Fn6q5xkzOxx9H9z9zjX4faL7LPzKlfpeS/r/D4Ig\nqEl+MgiCOgu/EsPMf50/EwTB+voLDsLvCUwU5fpL3xS1M/Ed2z8MguC0aNcvzKzYwk8rNvVe8rue\n/Nno3/rb9RELB5afifob5WkLB7vHOueSr/lm6/sa6X+CICgVeeI4V5nuGxdb+Hrb0H2/j+818wYL\nB0gqLPzE8LsEQVDtaYu58Hu2745+lNMEQVBlZ8+vBr8PHGiFmute+wee/HoL/yqhysy+X//J6D78\nW9GPVzrnejVuM1Lyn0EQVIr8mejf+n1xos2VFn5a/l2iZf17OhvYgGMWfpK/NUh1P6KJGGBFKpap\nMLrpORz92NUz7wLfC4KFfzpqZjbOOZfThPYBaJ06m1mheHRp5PyTLfzFObCz/cW7BEFwwsI/sTQz\nk1+8b+E7xj6J5b5nXudcN+fcP7mw+NAx51yNO1skJTGw1ucc2xBHSv1m9G/iRukNOVdoXvSvbz81\nxfIG2lwc/fuX14mozWOjH33HNjCzNxtaqXPuOhcWidnhwqJeyYVsJkaT+Y7Rds/gxrlclliu55ea\ng865g3Z2IKF/0rwvRv9+zzn3M+fcVc5TjAtIRRAWNvmihefbp83sd3b2U6VmZtMt/LTfky6pkFE9\nG6PB0voOJ/3/PYOkkUPRv/XvBxP9Tap90xA7+1oh543aOl/Mm6rjDQySvqf/iiT6gQ800Afss/AT\nmGZRP5Cuvq+J1nnyxHHeFQTBqfpPRvs70We+574/5mvm5Ojf1WqdkYWefJqFbyaYmb3dwHH4h2ia\n/noxQJuW6r32GQu/tkVJ9KNrgiAo8UzzpoVfMZA8fTrJcQfz98WJNqyOfidQZF/bDJbXfwOyBaW6\nH9FEWS3dALQpZQ08l6hkKKsl29mLuKHnMu3s91EBaBuOR//mO+ecGlwLguCrFn6Xk5mZOed+a+F3\n+zVWQfTviQZ+8TILf4lNnr6+xvRD75rXOTfGwl/6C5Pi5AJZORb2Wx0bWHZcqfab3ezsG6cNzXuu\n/dQUqb5OdLNwG8zC72f18W6Pc+4nZvZ3SVG1hedlddI6ss1/jI40sN6GJD6JlmPvPj98OiT9/3tm\nNtXMbjWzz0SPGufcMgsHIH7u+WQZ0ChBEBy28JPuD5uZOecKLfxe4n+2cIDpbgs/iag+3XTAs8za\npA++ymks/ES42XvvBxP9TWP6pu5JryfJ/VRz92tx7nMT/UCn6HEuiX6gyX1fGpzrGPqeT57mXfuj\nCa+ZPRqxTt9+Sv5UcKp9MdAWNMe99jHPG2lmjeivgyCocM4ds/CaO5/3k4m+uP44VqINLdWfJot7\nX9kcUt2PaCI+wYrWoKE/UwPQum2K/m1n4XfRNafcZly2rx/6lYU3jyvN7EYLv+Q/LwiCwiAIetnZ\nP0s83/3YudbXnPuqJcjtdc7dZOHgaq2F3301zMLvmuoeBEGv6Bi93dAy7OxAQaoS91B/CoLANeLx\nUGLGIAgqgyC4zcxmWvjnd0stHHxI/LzVOTfRgDQJguBQEAS/sPBTPok3sj/WAk1pSt/UGvu1RD/w\n+Ub2A/NTXH5bu0eO+5rZmO30/XVE4hiUNPIYzElxm4CW1hz32o2592mNfW5bEPe+EhcABlhxvjT0\n57OJd54TRQISEh+tb9fAvI39E2MAzSP5z21ubqZ1JN4Jbu+ca+hd8n71pq+vMf3QX+Z1zg0wsxkW\n9k23BkHwivgEbWM+LRNXqv3mcQuLvJiF3w3q49tPLdHnHrezN6KN2d76Er+s/yIIgm8GQbBDfLKj\nuY5RYpBqTNwFBEGwNAiCrwRBMNPCT3XdZ+H32BZY+L2SQFpFX4eR+D7REedx1Yn+pjF907Gk6zi5\nn4rTrzW3uP1AU/u+VqeJr5mJ49bQ9vr201++lqKZvgsSaGnn41472Tn7a+dcOzPrXm96s5b7/T3R\nhob60+b4Oq84GOO4gDHAivNldiOeWx99CX1CafRvPxOiwgdTPcusqzcdgGYQBMFeM3sp+vHzzrnG\n/IlkqlbZ2U+uXKUmcM51sbP9wUrPchrTDyXP+5df2IMg8P1Z0bUNLLOpUuo3o38T34so91Pk6ujf\n+vupNPrX1+cOM7P8BpabsqjNG6IfZ3nW63zP2dm2rvLMO9BSL8LSWIliYSOdc2MbnLIRgiAoD4Lg\nCQsropuZTXXONcdXTwDl0b9VDU6VXon+JtW+aaed7Zt8/X+GnS0iV79fS9wPNte9YKIfeL9zzvc1\nWe+Rhr6vNWrKa2aiD5/UwH3ElZ58uZ0dsLiz4SYCbc95utdOluhHhzvn+nqmmWVn/7w8ud8tjf7t\n2UBtlelNa56UaMMk51yeZ5qG7qvPJZ2vJaXRv3Hut5v7NQ1NxAArzpdBzrn76odRdfDEL5N/qPd0\n4sv3p9eruppwv/m/qP5k0v/zU2gngNR93cJf1Aea2W+jd7XTJgiC43a2uMlXPIVZvmLhO8Gn7GwB\nofrucc4NqR8652bZ2UJEyf1Q4kvyC51zPcV8483sQ+fegtji9JuJKskPqn7TOXe9hX+Gbmb2+3pP\nJ/rcWz3t+aonb6rENnwi2rb67jWzQZ55E8dovOf571jz3YS+buGnTc3Mfuicy/RN6JzrWu/nhgo6\nnklMZmcLtwDn5Jwb7Jwbeo5pOpjZ7dGPq5u7TUkSfdNNzrnJ9Z+M3qT4QPTjX/qm6JOsT0c/fj5q\nf30fN7O+Fr4R91S95xL3g/nxmn1Ov7bwF94+ZvZ/Gpqwfj9gTev7WqOmvGa+auHAfzsz+6yYN8vM\n/l7NGARBmZn9Mfrx69H3DUvOuazzMDgFNIdmvdeu51UL+85sO1sc7i+i+51/in5cGATBwaSnt5pZ\npYX3MO8X8w4zs7vS3WAze8XCNuea2efFenPM7ItNWH46X0uacr/d3K9paCIGWHG+nDCznzvnHohu\nksw5N8HCzrDAwoql/7fePIst/KLqHDP7nXNucDRfB+fcp8zs5/burxT4i6g4SOJLrv8qvZsCIFkQ\nBCstLNJTZ2a3mdlq59zHkgf4XGioc+4fzOyGGKv5p2j5U8zsCedcv2i5nZxzX7OzNyP/FgTBSc8y\nqszsJefcZdG8Gc6599vZX8jnBkGwOGn6TRYWTnEWVtweFs2X7Zy708zmWjig21zi9Js/tbBISHsz\ne9k5Ny2aL9M5d5eZPRFN91oQBPPqzfuUhQMU451zP3bO5Ufz9owKSX3YzE6neRvNzH4WbUsPM3sl\n2sbEfn7Awr7eVxF2bvTvp6JzLiead4Bz7tcW/sm9rwJukwRBUG3h978GZnadmb3qnLsk8VcT0S/y\nU51z/2bhp/CSrXfOfcc5Nz2pzc45N8PM/iuaZlkD1XsBZayZbXHOPe2c+2C9Prhj1N8tNLPBUawK\nXDWXJ81sbfT/Z5xz1yZdK9dY+MZYtoWf6nys3rzfsXDwrY+Z/dk5NzKaL9c59wkz+0k03S+DINhe\nb97Ep0Rv9LxZ3yRBEGwysx9FP37TOfez5Dfyoteo65xzv7H3viHWlL6vNYr9mhkNkv4w+vHbzrm/\nc861j+YfYOHr02A1b+SrFn7tQm8zW+Kcu8M595fvj3TODXPOfSFq47T4mwi0jPN0r51YV7mF/a6Z\n2eecc/+YeGPChZ9o/Z2ZXRG15ev15q2ys19D80Pn3BXR/XZG9Cb/XDv7RnLaBEFw2sLvsDcz+4Zz\n7v9L6kMGWVhA1PfBrMZIvJbcl4bB7abcbyfaMcY5d0kT24HmEAQBDx4WBIGZ2aMWXuzz6+Xzo/zB\nBubdFU0zx7PM71r4Z1SBhVXrTkT/Dyy8aZ7lWe4dFn6XU2LaExZWhg7M7JdJy39IzPvNpPlORW3c\nZWZfaOl9zYPHhfiw8J3qA0nXXWDhTdSR6LpPzl80s5H15h+UeN6z/E8l9Qd1Fv4yVZO0zN+aWaaY\nL9E/fdzCX2YDC6tqnk6ad5uZ9Rbz1u+DTlr4znxgZrvN7IHo/7vEvOfsOz3b2dR+c0a0b5LbfCbp\n5zVm1tMz73/WO04l0b6uMbMHzd/XPxTljzZiux4Sz82udzxKk86ZJdG+eM/yLXwD7q2k+WqiNid+\n/iffcYi25z2veaJtDU5n4Zt4lUnrPGNmR+udm0G9eUrrtfmYhW8AJLIjZjahpa9pHm3rYeEv1EG9\nx+l651vinPuamL8x13FiGYM8z3uXYeHXdexKWkZ59Ej8vNvMRniW+357dz9WUu+aec3MOor5ekTX\nV2BhX34gasOupGnmmKcfT5rG2w+YWaaFb3Yl7+OTdrb/TGRviHlj9X2NOBcaam/iGMxJdd5zLcOa\n9pqZY+EbiIl5q+zsa1lVtOzEc+r1erqFVcIT01Rb2BfXv/+Y3dLXKg8ecR/W9Hvtc/Z30XSZFn5C\nP/l1I/Fd/4n+9DOeeYdE115yX5/ov1eZ2eca6J/O9RozKDGNeC7LzJ6p1weUJP3/znMtv4H9cXXS\nvJVmtjfqB59ImuYha2R/bTHvt6N5FyTNd8zOjnFcmo79yKNpDz7BivOl0sLvzvoXC2+wcix8IXjC\nzKYEQfCmmikIgj+Z2fUW/nlwmYWd/Woz+3gQBH99jnX+i4V/NrzWwnfTB0aP/KZtCgAlCILnLbyp\n+qSF7xTvtvBmIc/CG4cFFr4jPjYIgvcFQbAlxeU/bOEvUI9beHPZycJBx7lmdncQBA8EQdBQ5c7t\nFn5y5ZFovkwLb0j+w8ymBUFwQKzzTxbeVM21sA/Kjrbr381ssoWf1mkucfvNdywsuPJDC/9UK9vC\nG7blFv6p1yVBEBz2rPOLFn5CYo2dvVF/xcyuDoLg0bRslW7zAgv355MWbmOuhcfmIQv3f6VnvioL\nv9Mv8SnRxM3pXDN7fxAE32quNie14VdmNtLCT7FtiNbfxcKb3jfM7Ev23j/zvc3CgZPEX2p0snAA\nYa2F2zI2CIK1BqQgCIJXLDwXv2ThL5mJT3N2snDgbqWF5+nEIAi+894lNHv7tpvZRAv7tPVJT603\ns29Z+KbCVs+8z1v4VSA/t7Bv6GDhwOQiC19zbgjCT13Vn++ohf3o0xb2LQV29n4wLYIgqA2C4DMW\nfqLrt3a2v25v4deI/MnMPmpnv5ohed5YfV9r1ZTXzKg/v9nC16H1FvbntWb2vIXf9/hG0uSlYv5l\nZjbKwnv/JdH68y0c2FluZt8zs+nRPgfapOa+105aT20QBB+18KtbXrXwmutk4f3378xsRhAE9f+K\nKjHvTjO7JJruiIX32/vM7F8t/Eou31+aNUkQBDUWfv3A5yy8n6qxsA/5s4VvrDzdwOznWvY8C9/k\nWWBhn9LXwteRuIX1mnK/faeFb+oVWXhMEq9pzfm1EWgkF4Qj2ECzcM49auFN5TeDIHioZVsDAAAA\noK2JvkriNTPbHQTBoBZuDgAA78EnWAEAAAAArVmi2M7cBqcCAKCFMMAKAAAAAGgxUTHGp5xzNzrn\nuiTlY51zT1n4HcPVdraoGQAArUpWSzcAAAAAAHBRcxZ+f+JdZmbOuZMW/q7aIXq+zsz+NgiCdS3T\nPAAAGsYAKwAAAACgJdVaWPTlBgsLmvW0sDjObjN708x+FATBypZrHgAADaPIFQAAAAAAAADExHew\nAgAAAAAAAEBMDLACAAAAAAAAQEwMsAIAAAAAAABATAywAgAAAAAAAEBMDLACAAAAAAAAQExZcWf8\n4l9/OVB53W0b5fQjny6U+bb+c2TereyPMq/Ima2nf2uAzM3MFg15Tub3lH9K5j+8fp7Mu74wQuYj\nrqqWeb+lL8j8tquukflXJy2Q+ZDvF8h8x5kdMh/lLpf5vkElMjcz61pZI/PK0UNk7o6/LvOjpTfI\n/LrMP8m8R/5Imb84aKLMBz+7W+YbJ6yUuRs4VObdVw2X+b52e2RuZjaj/FKZvzFnncwHvbhZ5lf0\n7SzzDd31vj5arqc/uaWTzKfNWi/zYzUdZX56gD6v5yxdIfOFG0tlbmZmn86U8agXimW+5vhYmV+y\nXr/3s+z6JTL/6X+84fyNunBkZWXJfjcjQ++vrCzdxefl5cn8xhtvlPk//uM/yvzWW2+VuZnZ/v37\nZV5RUSHz2tpamQeB3OSUc0BxTncdvtx3TfnOu7q6ungNa+Tyz/VcOqZvYDkXfL/75a/oe91U96Dn\ndLLAt6RKz3l5PnZ5azuqKbYnrc1P17rT1ag0Lee8HGLvSnxXj+ecT/lq8/E06LzsjPRsw3e+9/3W\ndnWm3Ve+8hVu4gC0Ct/73vdi9bl8ghUAAAAAAAAAYmKAFQAAAAAAAABiYoAVAAAAAAAAAGJigBUA\nAAAAAAAAYmKAFQAAAAAAAABi0uVwG6FDoCtEF/xylMxP99XVwnPvmyfzSxbp5fzLEV1F/n22VOZm\nZr2m6IrZW9r9WOafy+8r8zUTvybzo89eL/MuvXR19kf+d7vM69YNlPm8yaUy71Q3TOalnXvJfF+p\nrtJtZtah4yaZ9zuh85rdM2U+MG+DzJ88qqd/IH+RzFdt3CnzrsMLZf6BwnEyP1hcJfPqPntk3i44\nLnMzs8OdXpH5jb/U67bJZTLOyimV+ZQgU+bbzoyXeclUXWhzf783ZX58zSCZT16sr81VTu+Lg/mX\nydzMbORb78j80MBLZT70Jr3vtj6rz4vaEzO8674Y+Kp/p1rBvKKiQuarV6+WeX5+vszHjtXnjpnZ\nsWPHZF5dXS1z3zbU1vr7LcVX/T1dldNxcUjX+ehbTqrnKedvC0mt4HnKy/GcBhbk6L7bKlvj5yKa\nt7B5i5ZNT/G4pbqcVDfOpet8TKvU+iZ/U5u7j6MPBQA0v9Z4pwYAAAAAAAAAbQIDrAAAAAAAAAAQ\nEwOsAAAAAAAAABATA6wAAAAAAAAAEBMDrAAAAAAAAAAQU1bcGdet1VXBe1+xQ+YlJaUyn7B1gMzf\n7KArqPYs1pXNN4z/iMzNzHJ+NU/ma+/U68javE7mf31CV7B/6sMjZF62u53Mc5fryvaj8nV14pnF\nBTLfPVBX6R7YtaPMezy5WeZmZpOG6Yr3XfrdIfP/vmylzPO3H5T5R4bpyuFdx39I5n9X9huZL3l5\njsz37T0s8/V5S2Q+qke+zHdn6vPRzKxj5zyZb+xdJPNZPa6W+cq852T++CsnZP7tB1+U+ZkVQ2Ve\nvVDG1t86y/zk8b0y39OzUuajzuj2m5kNq9Pn0cISve96Pf4jmQ+/6xaZ//GlVd51X8x8Fcbr6nQf\nV12tr8ejR4/K/Hvf+57MH3zwQW+bVq9eLfOKigqZ+6qz+6qt+6SrajvSL9Vj2ZJ8bU11G1Jdju+a\nbQjncAto5mru3tOsoeWn6TTwV6pvoeu3mfd1Q1qqx2o7PaWZv7UXcr+Upm2+GHcdAFzg+AQrAAAA\nAAAAAMTEACsAAAAAAAAAxMQAKwAAAAAAAADExAArAAAAAAAAAMTEACsAAAAAAAAAxJQVd8ahH9wn\n84UVo2Q+qkpX/+5YeUzm1Vt1Jd0Js2bKfPCq38nczOyNfpNknpuZLfOTG2+T+XNjXpL5wb2bZT58\n/s0yr/m7ZTJf9qQuJ9ntel3Nvaasncxz5u6Wee01E2VuZvazFTtkPqv9Bplnzh8o835zest85QZd\ntby47imZF+TdIfPC24/o5a+okXm3Efp8zH5ktMyvav+czM3MXrjsXr2swm0y37mzg25Tjt62m8r1\n9Et35si8INDV2IPB3WW+5UyZzGcN0sc4o6irzOsOdpK5mdm6jDEyH3JCH/93+syWec5LQ2U+KOsN\n77ovBqlWC/dNX1tbK/PTp0/LfNGiRTL/93//d++6f/SjH8m8tLRU5tXV+hzxVVVv7srpbaniPeJr\n7uPMeXRhSv2opqe/CrJ0f2hm5qrT85kJb0t9TzTzKe5d/Hloj3cVzbzulBef6ul1PrqlIMWVpG3j\nUl5BGnnW4T1hAAAXGj7BCgAAAAAAAAAxMcAKAAAAAAAAADExwAoAAAAAAAAAMTHACgAAAAAAAAAx\nMcAKAAAAAAAAADFlxZ0xON1L5iNPvyTznGCwzIf84C6Zvzpjtczd7n06754vczOzUV1+J/MVgyfK\nfE27Z2X+qcU9Zf7bibo6ZM+878l8SMHtMq/9xDUyd5t0pe7agk/I/MDlB2Q+OnuvzM3MuszQ23B8\nd77Mp96+Wa/72DCZ39B1k8wX7psk857V82X+dmk/mXfLHSnzAQvnyHztrK/KvP+JQTI3M/tof92m\nmu3tZb6vx8sy31pbIPOqj5TK/Mxrw2X+6gl9rQ3b8X6Z31uhl79y6kCZX156RLfn9pUyNzMrPXSt\nzDsf19O/L18/8Uzv12U+eqPuR6AFgb6ufXlVVZXMDxzQfcqPfvQj77pvvvlmmW/dulXmFRUVMq+t\nrZV5qtXZfdt8MVZ5vxi3OVW+fZRqnpmZKfN0ndcN8Z3zaE1SPEaZDUxf07SWnFtqbXXpqtp+Xror\nz+uDb/Jm7kPTtvQW7Oqd73y5kF9+PNvm22TvFXUh7yMAuMDxCVYAAAAAAAAAiIkBVgAAAAAAAACI\niQFWAAAAAAAAAIiJAVYAAAAAAAAAiIkBVgAAAAAAAACIKSvujFXb3pT5jEHjZH5wZBeZbx61ROaF\npybLvG/tMpkf7qyr1JuZ7Wt/ncxnn86V+bD5J2T+UPYemd9VrKsEL8vRZSAH/+w5mWcXdJD5kt5X\nyDwzWCHz27fo9XaevEDmZmbrto2WeeWTe/X0d+hytTOvvUTmTy3Qx6fDZF2d/GrXVear39T76PiN\ny3Ve95TMB664ReZ7Bu2TuZlZrwUzZP6/s7bIfOjyqTIvqCySefs3R8p89LQSmd+Sd5nMc97Jk/nB\nifqaHX5oosw3lu6Q+azqy2VuZna8o66J+mylPm4f7VEp8zFLi2Xevludd90Xs1SrhdfV6f3oq2xe\nXl4u8+ee032Zmdmrr74q88cff1zmZWVlMq+p0X2Nbxt80lmdvbVh287fejMy9PvSmZn6PiA7O1vm\nFRUVKa031Wu8oWWlKs66L14p7ivf5HEOXYanT6xrqc9StJ3zJvXdneq26TWkrXc7D91kyqtobS9L\nLbqPfMdfn0dt58oBANTHJ1gBAAAAAAAAICYGWAEAAAAAAAAgJgZYAQAAAAAAACAmBlgBAAAAAAAA\nICYGWAEAAAAAAAAgpqy4M/YePEvmlVt1FfbeXU/KPO+JUTLfNXiezI9WXyfzt26ukrmZ2Tcv3Sbz\nV/f3l/niGcNlPqu4o8yXm67cOnzKTpkf6PAVmY+r2CXzDsv3yHzSyB56+jtWyXzLkVtkbmY2tt1b\nMi8bN0bm7WqqZb7+8CaZtx98t8y3rtSVl9cO18vpnzda5uM2/0Hmx/rcKvPFH24n89GbdMVyM7Pf\nluoqoON3dJZ516t15fXi107JvNN1j8l8+7x/lnnF6GKZ100vlXn5/mtk3j5rg8wHXqOnf3jhOzI3\nM7u2k+4Xrrpku8xPFf9M5lNv+brM59bs964bjeerCl5Xp/uyyspKme/Zo/smM7Pnn39e5rNnz5Z5\ncbE+n33r9lVz921Dczsf1e7Pxzqac72tcR/5pvflWVn6tiknJ0fmvvMxM1O/9vk0tF2+dbTUtXBR\n85X/Pg+XbpClV+6qUmtUW6psnypvk9LUVv/yUzwxUovTq7n3Rdo0805qwfO3FV46AIBG4hOsAAAA\nAAAAABATA6wAAAAAAAAAEBMDrAAAAAAAAAAQEwOsAAAAAAAAABATA6wAAAAAAAAAEBMDrAAAAAAA\nAAAQU1bcGVfv2SHzIQMulXn1wiqZnyrIkfneB4fL/JptS2W+wzrI3MzsN4f1OHJtz94yH3v0iMx3\n552W+ZShRTLfd2qUbtDK/yfj/HYfl/mtA47LvPjoCzJf/+IMmffaXqzbY2bPDz8k8wklB2W++UhX\nmY/t0kXmuR3+W+ZH2t0q8855BTJ/e7ze5qw9A2Ter99OmY+eu1/mg744QuZmZtetXi3z3E3tZN53\nZYnMOw+qkHlh5/4y3zd5rcz7Ferz9/SZjTKvqdDtyazU1+bBKifz6lv7ydzMbP/K3TKf3Flvw7zL\nPyjziZ7ldF3fSa/4Y94mXVCCIJC5c/pY+ab3qaurk3ltba3MT5486V3Wr3/9a5k//PDDMn/llVdk\nXl5eLnNfW318+yhVqS6noenTuazmnD5dearrPR9tysjQ9we+PDs7W+aFhYUyP3hQv4ZmZmbKvKJC\nvz5UVlbK3Cz16xzNKOVuxjdDjGPqW5R3FRfmeZOmrr7hdfh2aorrdnGOc2orOB+zpGf5Ka9Y7zv/\nHk3PMYsl1XVcmJcmAFwU+AQrAAAAAAAAAMTEACsAAAAAAAAAxMQAKwAAAAAAAADExAArAAAAAAAA\nAMTEACsAAAAAAAAAxJQVd8Z7J26Suds3SeZfztsq87vb6crpKx4dJvMFx7fL/PLv58rczKxuQ3eZ\nn9i/VOa/rbtW5nmbRsn8Y0d0Je01WVfIfFKHQzLfXbBX5jt6vCzzEesmybw8Xx/W/K7bZG5mNuKl\ny2Ve9369baNts8xLjgzSKxjTTsbD8nRb11foSs13FR6R+SP7d8p8aFG1zPtN7SPzPb8bLXMzs+LT\nx2UeDHtc5jvW3yXzq67vIfNTL6yW+fbh3WR+MOeAzHuWHpZ5J6evtZ4Z+li+3lcfs+u37ZO5mVnd\nSV369OWl18g895JHZb7yxFSZj84v9a4bTeerRl5bWyvzhiqbb9myReb79++X+aRJk2R+5Ii+5n1t\nau6q86lWo8/K8r/M+pblqzCfasV7X+5bvq+tvumzs3U/7VuOb/qcnByZx5mnXTvdb/nyDh06yLxT\np04y79Kli8x97XzhhRdkvnOnfs2qqqqSeV1dnczN/NetL091OWg83x70FRFPdfo4gmx97mRUNfNn\nLNK0cWkqLt/gwlLf36ldKy5NK/ZOns4TppnXna6m+o/AedgZAAB48AlWAAAAAAAAAIiJAVYAAAAA\nAAAAiIkBVgAAAAAAAACIiQFWAAAAAAAAAIiJAVYAAAAAAAAAiMlf3vgciv6oK5LP/YSuSP65Zbqy\n+Y5dunp992vXy3zgyptkPnPHapmbmR3ZeELmpTUdZf6xVWdk/vb4BTLfWqfHqSfs0/tiXp9dMu/U\n8QaZD9s9UearKw7JvNvS9jJ//nq9fDOzaVfpbe5VXiTzl3NHynzkkCUyv3LTl2X+4u3DZD7gd7+Q\n+Qb7sMzvvvwlmZe9c1Lmyyr1sf9Il2KZm5llVeTKvPTYGJmP3nhA5ht66crrucf6yXzqKX1+nS7W\n1a+73aUrBr96cqDMJ5YPlXmvXx+V+Zrxep+amc0cpquN99qjr//DdqnMewSlMt9bdtC77ouZr/q3\nr0p9upZfXV3tnae0tFTmP/nJT2T+qU99SubLly+Xefv2up/zVbD35b5q9L7cV3Xe1x5fNXozs86d\nO8s8Pz9f5gUFBTLv3r27zAsLC2Xeo0ePlKbv2rWrzH3t9+1r33lUUVEhczOzU6dOyfzECf26fvz4\ncZkfO3ZM5iUlJSktv6amRua+89233qqqKpnX1en+27fv0DJSr2Ce2vFL69FO8XWgtdVgT2d7Ul2W\n88zh26W+5fun109keKbXd1j+X+Z8eUOfrvE953wnZYonq0txBt0jmpV4dlKdZ9+lqfkAADSIT7AC\nAAAAAAAAQEwMsAIAAAAAAABATAywAgAAAAAAAEBMDLACAAAAAAAAQEwMsAIAAAAAAABATL4Ck+dU\nfYOunN53zXaZ95mq6zQe6LdB5qMv1ZV62z+3Wuav12bL3MxsZrWu7rynSFeSf/naMpnP3vOOzLvl\njJV5VX5vmS8qrZX5Fcfny7xicjuZ5x3Uyx92xWmZ321rZG5mtm9snswvmddLr7vTDpkv3n23zCvb\nL5b5mBN6OZ36jZT5olX7ZL6nQxeZzyjrI/OJubpC9Kb8VTI3M/vgsdky/3WpPl+OXv9xmfcbqKui\n5+w/IvPnxw+U+RV7d8n89aIbZX7NUV1de/9kfc0WjP6izPPW6WrvZmYb7CMy79T/lzKv23SfzLt1\n1OfwydGTvetG46Vakdw3va/iuZm/MvzatWtlPn78eJl/6Utfkrmv4n3fvn1l3quX7su6desm86ws\n/fJ45swZmR89elTmBw4ckLmZ2f79+1Oa5/DhwzJfv369zJcsWSLzsjLdZ/m2rbKyUuZVVVUpTV9T\no1/XfbmZ/xxLV+6Tk5Mj85tvvlnmzlMm/PRp3ZdVV1fL3HetNXTNput6RgpSLEffKvd4tm5Vlj41\nzbfRnlPfu4uyPTPkeGbwTZ+Z4nobei7Fw4kmYW+f5dsXrbLHQDPRv+UBrcvulm5AG8InWAEAAAAA\nAAAgJgZYAQAAAAAAACAmBlgBAAAAAAAAICYGWAEAAAAAAAAgJgZYAQAAAAAAACAmXSa5EbLP6Mr2\nnayHzH+131MZd3+2zMfW6qrzp0ZNl/nBTd+SuZlZTtev6Dxrncw/UHe5zDu211XkT9fpisklpw/K\n/L6sFTJf2/UumXddXSTzWx7SVas7vT1Y5itWDJe5mVlpb13NurCdrmx/aKiuJTdzx2UyrxquT7VO\npX1kftr9WeY979cVwvMP6GMwfozeRwur82T+iX2XytzM7N9KHpV5YZdJMt++3LMNnU/KfFwPve7c\n4qUyP3xVB5n33bdH5oNGdpd51S59DIoqFsp8RN7VMjczq7liq8wHuxky37+wVObrL9UV6P9mzzHv\nuvFevmrhvornqS6nocrsvsrwpaWlMvdVvF+/fr3M586dK/OTJ/X15avmfubMGZlXVuo+xVf9vaqq\nSua+/WBmVltbm1Lu29/pylOtYB+n4n2q06dzWYrvWujSpYvMfcczMzMzpfWm2k60kJQLnqd4XFuw\noHqG5yMWvbJj/2rwLhdGrXiu079o9oL3qS5INyhI+cxr/mOc+q67MK4eALgY8QlWAAAAAAAAAIiJ\nAVYAAAAAAAAAiIkBVgAAAAAAAACIiQFWAAAAAAAAAIiJAVYAAAAAAAAAiCl2qdCjq3TF59zJN8t8\nVMkimdcd7SHz0hemy7x7dblefsW/ytzM7A+ddDXgO84UyvwXM9fo6Rf3l/nQcRtkfrhshMxL9ult\nuHSArlq9smaZzA+9/mm9/GxdlzKneoXMzcxuXTdG5u06lcl8ydx7ZN6pvV5Ht4rJMs/eekjmQ0cN\nlHnJk8tlPmPONTJ/cdslMh/pfiXzn9lUmZuZDZz5YZlnzNsq8x7TdVXpFZn7ZH7LkGdkftdr+rzI\nnzlc5nMH6H2979hqmdvAkTKuOKynP1AyQy/HzHb2PiHz0a/p43bs+gqZdy/X+fwBw2Q+29sipMJX\n2dxXaT3OsnwV7Gtra2V+6JDuI9544w2ZV1dXp6U9vunTlZ/rubYwfbq01HrNzLKy9G1QqudpdnZ2\n2toEtChPd5/yq0DLXdZo1VI7MfznXWpnpH+tqd/fxFkLAODiwCdYAQAAAAAAACAmBlgBAAAAAAAA\nICYGWAEAAAAAAAAgJgZYAQAAAAAAACAmBlgBAAAAAAAAICZdPrcRTs3Udbt7l7aT+Qv7daXyj9To\n6av6HZH5Slck86H9NsjczOzkye4yXz9Sr3vIawdlPuxqXT34wKN3yHzMwC0yf+eyu/V6ny6V+fJb\n3yfzHqeOy3zsyc0y3zG0i8zNzDa8tEjm26fqbf7Q+HyZv7x1r8zXDpoo8947dFsP7z4t81Nnvibz\nnQd+KvMJ7XR10GWF18k866WXZW5mds3mPJkvuKWnzMfv2yTzjhl6X5SXd5P5sfXrZL65V1+Zl+7d\nJvN5l3xI5pfmvinzdhmdZX7jdVUyNzN7bfFA3abDuq33F8+VeUYwVeZPdl3lXTcuLr4q72fOnJG5\nr1J9qnmq0rWcll5HW+ecfi1I1/HPzMxMuU2Kr51Am5OuU5nurXXzHeeL8nXJuzPSMDUAoC3gE6wA\nAAAAAAAAEBMDrAAAAAAAAAAQEwOsAAAAAAAAABATA6wAAAAAAAAAEBMDrAAAAAAAAAAQU1bcGUcH\nO2T+1tY9Mj80cJTMz/TRVeSDXjofvqCrzLO76NzMrF9RP5kX5JfKvLLTZTLvWLlT5us+tETmx+uK\ndH5otsx/8XE9/fidl8u86i29r49eUyjzVTVjZW5m1u/Ka2Q+eutLMn+srqPMp0z0tHXZH2Q+/cdz\nZL73J4NlPnF8icxXHtXb3Le3rjQ+tHSCzHfd8ZzMzcyOBu1l3nvrb2V+6NoPynzq67kyX7btGzIf\ndsW1Mj9yoFjmVZn6fH//pGqZFzy9Xea7e8jYntq4VT9hZp/I0ufFkQJ9PA9k3iPzZat+IfOx7b6g\nV/w33iahjcjISO39vlSrv9fW1qY0farrvRC0pW1zLrUS5alOD5wXvksu1ul6cZ3j6dza4AKt235+\nzgjPa3GqK0/xWkh5+S3K19gL87wDgIsZn2AFAAAAAAAAgJgYYAUAAAAAAACAmBhgBQAAAAAAAICY\nGGAFAAAAAAAAgJgYYAUAAAAAAACAmLLizrh/kJ718l09ZT55+mMyzzw+UOYdHt0i8wGDxsm8/EgH\nmZuZzexVIfNFp7rIfH//zjK/5lldqb5PWXeZb7vpCplfO2SdzI+uzJd5ceedMt89Su/rgl1PyPyg\n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\ntLtWt2ek3hcTuuhrrfqXXWRuZpZ/md7fmRWTZT5tTK3Mnz2p993J9lO860bbVlenz2eqraMtcC61\nqs+pTo+2wndcW64f40xDW+A7T/3nr++aSrEvTmnqdOPqBIALDZ9gBQAAAAAAAICYGGAFAAAAAAAA\ngJgYYAUAAAAAAACAmBhgBQAAAAAAAICYGGAFAAAAAAAAgJiy4s44ddMlMj/W92WZ98w/IfOda8pk\nPuKajjLPPjpd5rnBOpmbmV25/LTMX+/QU+YDtq+QecHdejlLM3UVyDGrZ8t8dt5emeeP1tt8R+3b\nMj/++rdkvizrVZnfOKha5mZmm97+lcw7LPyQzPd2vEfmva9eJvNu6z8t89s7/0Hmx0bqtr7ZZbfM\nr3lbH5uNJwbLvLqDnt62+yv9Hrl2jMx7vlgq8+PLCmU+tvsbMs8eqs+jPbUrZT6+3XUy33rt3TKv\nyv8bmXeYN0LmPWt095Axc5DMzcwy+utrqu+ggzKvfklf/8O+qCvKl/5gs3fduDAFQctV38aFz3d+\n+fLa2lqZO0c1aJh5K5u3xtMj1a41PUXbz4OGGsTryQWjNfa5rbBJAIDzi0+wAgAAAAAAAEBMDLAC\nAAAAAAAAQEwMsAIAAAAAAABATAywAgAAAAAAAEBMDLACAAAAAAAAQEy6THgjzO1xUuajLF/mXTfl\nyXzgKD39K1uKZL7r44dkPqKkvczNzBb/XlcNnfXmEZlntBso8/ZLRst85NAlMj80s5fM334mW+ZX\nTdMV1U+fniPzpYX/K/M7Trxf5ktePSNzM7N9s2fIvHf3PTKf0rlaL+iRUhnvH///ZB70uFfmdR0X\nyPyDM4fL/Fi7N2Q+NXeQzE+dfEvm+eWe7TKzA7XlMh/Zb5jMs+7bKvO6l+fIvHNFhcyP7lol8zcG\n63009jW9DUv6flTmvS5/XebtFujtKrlmvMzNzCq2LZb5mZ0zZX7dV38h89xv63XPv2ebd924MFGd\nHUCb4e2vUq1en67l4N3Yrxe6C+EIc9cDAG0Xn2AFAAAAAAAAgJgYYAUAAAAAAACAmBhgBQAAAAAA\nAICYGGAFAAAAAAAAgJgYYAUAAAAAAACAmLJiz3lqoowPdfyjzHt0GCzzg2M7y7yPZ+x39IKDMi+Z\nPEDmZmZbe5/xrGOnzHuOGSrzokd1Dcrygx1lPnWjrjpf2/ewzIvzZWzHDur2fH5gb5m/NE5v18xZ\n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\nq/U5//Al3WSeeSJP5uM2TJH58a9XyrzniZ/KvLRvtcwXDdBVtM3M8itvkPlPD+tzcmb2Wplnd8yR\n+ZodRd51o22j2jraAucoB41WyluGva2cs23oNaCt7NI2JdXjn9pB8C2dQwkASCc+wQoAAAAAAAAA\nMTHACgAAAAAAAAAxMcAKAAAAAAAAADExwAoAAAAAAAAAMTHACgAAAAAAAAAxZcWd8RdVvWR+3eu6\nsnnQY4HM9x4YJvPFXXVF9U/n6fV2PnhI5mZmg4aslPmhNbriefY1ereMPDBf5geXnpG5e3mIzB++\nulbmdw/Q+ZqtT8l8Q02NzO/r/brM3/qfD8vczKzHcL2/S2dXyfyak7qSfPVYXXn+T9ZV5uX5J2We\nv3KezJe9vUTmk664S+aH9+v2dB++Tua3u84yNzObXjpG5t+t08vKPXqJzDfuK5D5pL89KPMbVhTK\n/NV+w2VeM/NNme/dny3z8pK+Mt+VcUzmM6v1eW1mVndGn8NDO5yS+dLcUTJ327rJ/LJ1dd51o22r\nq+PY4vxzLrUa0r7pgyC1Cti+6VNdDloZSpI3wsV4jqdnmy+M0+tiPP4AgIsFn2AFAAAAAAAAgJgY\nYAUAAAAAAACAmBhgBQAAAAAAAICYGGAFAAAAAAAAgJgYYAUAAAAAAACAmLLizjhrh66o3i5/kc6D\n22W+aPoLMr+zp646X7lxs8wLTy2UuZlZaW07me8e0VPmG2pWyXzc8v4y7zZFt7Xqzo4y71d1VOYV\n6w/L/OSRvTK/8Spd8X5d32/IvFdQJHMzsyHrVsu89IyuWTpvj15W8XhdCXxS5qUyP1rkqYm6f5zO\nB8yX8evFet999qRuz466Upnnb52l12tm+z9eLPM+Re1lXrB8iszzPrlJ5sefWinz7ptul/nXrtwt\n8x+dqJD5324eJvNNpvfRx/K6yPybffT5a2Y2btUomQ+bUiXz7rvLZP7sxKUyv+LqD3nXjdYl1Wro\ndXX6PMzI4H1AnH/O6dcm3/mY6vkOpFtrqzDvuyJaWzvN2lZb2w76RADAxYffXAEAAAAAAAAgJgZY\nAQAAAAAAACAmBlgBAAAAAAAAICYGWAEAAAAAAAAgJgZYAQAAAAAAACAmBlgBAAAAAAAAIKasuDOe\nmvJbmU/InC7zN6qXyvx9fzigV3DDIBnvOtxT5keDr+nlmFmX+38m80v2rZB5v5cukXlZv6Myr9zf\nReZ9+ubKfN+ZDTI/Nm2izDvu1Yfp+In9Mu9/6TMy/9OWbjI3M+s6bpDMC7Y+IfMOdd+WecXzP5R5\nyVXLZN7pzFCZb7pW56PeHiXzYxlvyryo2ziZ/7h9L5l//uoimZuZLTp8UuY9Duj3KTp0LpN5302D\nZX5k12Uyf2uWXu/vButrZ8HRQpm361Mt84o/D5P5sroXZd7rq/p8NzMr/3Odzg9Plfm49vq8uPaW\nj+o2/dtyveK77/S2Ca1LEAQyr6vT505r45yTuW+70DS+/d3aluM7/pwXSCdn6TmPz4+L8dy/GLcZ\nAAAk8AlWAAAAAAAAAIiJAVYAAAAAAAAAiIkBVgAAAAAAAACIiQFWAAAAAAAAAIiJAVYAAAAAAAAA\niEmXp2+Eus2zZb59yjaZX3F6vMy39psu8725NTIfXNtR5ldN/5XMzcze/h9dwXxTtl7H9tqjMr+y\nu86L2++V+Qvlp2Q+oreuFp/ziq7abpm64n3RwMky3/n0IZl3OeCvPvunyhdkfkfQQeb5QzfIvOtn\nCmTebm62zH9eWCXzab/IlfmUEStk/scKfYwH9NRV5x8sHinzogMDZG5mNsQWybxDn1qZr8/U27bt\n9BaZ5w8tlPnowftkXrJmrMxvKd0s8wWdj8jc3V4u8yv26H3Rs7xY5mZmXW6cK/OC07qtL/fS7/FM\n+N18mbvxg73rRttWV1cn85aq/p6u5ePCkpGh+6zaWv06gAvUBX25p6dPvKD5dlEznxcttNpzaKHz\npRXujFbYJADAecYnWAEAAAAAAAAgJgZYAQAAAAAAACAmBlgBAAAAAAAAICYGWAEAAAAAAAAgJgZY\nAQAAAAAAACCmrLgzTuzYTubzio7J/J3+Z2Q+btIemQ97vKPMT12lq9pvWOOv0bh/+lGZ37R6psyr\nCnQl9MLMfJl36XiFzMe/vVDmO/rpfffBymyZLxijq8jfltFJ5m/26iLz3sfby9zMbGmXy2W+/Yhe\nVt2WvTIv65Mp84LCLTK/p3iyzDsNeF3mvQboY+Y7kfeO1efF209vk/m+zH6eJZlNv2enzKe+OEDm\n1bX6Wug56EqZ9zi4WuYHtg+WeU7nMpkf7KLPi6llpTJf3F63P/8afc1OPjlC5mZm23KKZX5k7XqZ\nd5in27T/g51lXl2qr2W0fUHQuipXO5eeur+tbbtao3Tt63TytcmX19XVyZzjD7xbW6q03pbaigSO\nGgCg5fAJVgAAAAAAAACIiQFWAAAAAAAAAIiJAVYAAAAAAAAAiIkBVgAAAAAAAACIiQFWAAAAAAAA\nAIjJV3z9nLp0+7PMb9oxVuYvTzwt8+J2JTLvNmmYzlcekfm0CTUyNzMb10VXts+p1pXtu7vRMt+x\nq7vM85f+Rua7+3WT+ZiqgzJflNtb5kV5ujL7w0/pau6npp2U+Z3Vc2VuZjbw+M0yr+inK8l3Xzdd\n5guLVsu855rLZX7iyhMy7zfhAzJ/6f/9WuYjvrxW5s8v/qrMO13ze5lPW+t/z6Hg8WqZb++nK97X\n9Rqg13Fkm8wXTuwh87ycMpmvqe0i8xOl+vzqu2eazKdWlMu83SndPfx2iW6/mdm9E/T5cnLsDpn3\nGtlT5pkdK2Wes0WfR2g7fFXVa2trZZ5qNfdUK9JnZOhrPl3V31NtD5om1f2drul95y/aOt/5kZ7+\nofmXH6d2evO3CenlOzIXwquP/6y7kLcaANBW8QlWAAAAAAAAAIiJAVYAAAAAAAAAiIkBVgAAAAAA\nAACIiQFWAAAAAAAAAIiJAVYAAAAAAAAAiEmXCW+E/eN1hfTuO/fIvMuxGTIfuS9f5usuHy7z9kN0\nlfLDmRtlbmYWLJ0k89XVi2Q+fsAYmXfc113mR49fI/MR+dkyL8zYLvPqqbry5eC3daXMus/oSutL\nd+6Ted+9N8nczKz3uAKZl7n1Ms/Le1TmXXN1VXibflrGk57ZKvPXPpkp87pLq2U+eulImV956RqZ\nP/4rfSw/0/sVmZuZLf1CH5nnf1FvW2b7Opm/dts0mVeV6fNx4uZeMt898KTMy8oOyXznTF3lunfp\nYJk/0WeFzHsOy5O5mVn5wMky779zrcznjz4i88qy8TIfNPtlz5of8LYJzaehCuy+53x5EOh+LtXl\n+PKsLP1y51vv+dCS625NGjqPmnsdvjwjI7X3n+vqdH+fqlTb2ZBUr6lUp78opLzprXBf+Zrk6X78\nvZLn3GxgjlS0pZrwbaWtbaWdZg2dd6lJ8XRvQJwWpWnPtsYDBABoFD7BCgAAAAAAAAAxMcAKAAAA\nAAAAADExwAoAAAAAAAAAMTHACgAAAAAAAAAxMcAKAAAAAAAAADHpssqNUHWok8z3DdBVxKvKd8t8\n57AeMh954E2Zd5nQUebP5I2WuZnZldVlMt887rMyP7rzgMz7ntgn8w539pZ5zlOrZF4zs4PMMxcP\nkPnJbZkyryzW++KBTpNkvvuyUzI3M6veoKu5T6zOlXlV99tkXjLozzLvdLyvzPd/t6fMezz9lMwH\n9tL7Yv32q2RevmKxzK+5X7f/yc0TZW5mNvLt12Q+YnSJzH9d00vmV2z/lcyzF39M5qs/slzm00r2\nyzxnhz4fh9boY7n8mq0yn7NioMzbzdgsczOz47/S106HgjV63dP1cbuscqfM9y7S+8I+6G0SmlFD\n1cV9VdhTrc6enZ2dUt6pk35t8lVI9+WpStdy0DSpVrz3TZ+ZqV9rfOdvXV1dSstPtZ3nQ1tqa5tz\nPnZhil2QS1uj0le3PZWltMazsq20Nc6RaW3bkCqXpvMRAICG8AlWAAAAAAAAAIiJAVYAAAAAAAAA\niIkBVgAAAAAAAACIiQFWAAAAAAAAAIiJAVYAAAAAAAAAiCkr7oxF7dvLvFsHXVH9+Ilimbe/aarM\nh/++h8xf731C5g+8WipzM7N9RUdlPuzSR2Q+KS9H5lm9L5H5kblHZH71kFEyf6b6mMwHX/6kzNu1\nHyHzvHG6mnvnDfqwZhfr6tpmZqdOfFbm23O/J/Oi6gEy77f9NpkvKdkl8x7bymTev29vmT+z72qZ\n/9Xs7TJfWarbU7jiuMxnda+WuZlZdflAmb/Wea3MP1I6VuYrur9P5jeP1lWr9xy5Rebz5xXJvP0d\nj8u86L/1tVnX5VaZv9pRny9T9+pr2cys74gPyHz3wkMyv6n7FJl3u2mPzNv/6Ed6xT/xNgkpSLVa\nuK9yuplZEKSnYm+3bt1kft1116XUJt+2pdpO3/S1tbUpLaehZaVr3zW3VM+XdFajz8hI7f1h37p9\ny/HleXl5Mq+srJR5e8+9Unl5uczTeX41dH0qvm3OydH3RBDaeql1i1dhXkt1Z+g1+5bSkr1keras\n5cQ5Tf3b0DJHqDWeF/61XwAdAwCgUfgEKwAAAAAAAADExAArAAAAAAAAAMTEACsAAAAAAAAAxMQA\nKwAAAAAAAADExAArAAAAAAAAAMSky803QqeFuiJip4m6wnifcl0J+sAGXYH94R79ZT7k9W0yf7Xz\nOJmbmV12uR5H3pt9mcznVetqvVOf6qPXPfNlmR/OvlLmtft19eDX/jRL5uNvXyDz0z1/KvOq4v+Q\neW7fjjI3M1s15psyn70jX+YnjuyTeXaQLfN9Q0tl3nuhPm4Huw2X+bCO+nz5v8/obbtu+isyX54z\nQuYbt4yXuZlZ75V6mw9ecbnMcwdtl3n1uhMyf7xiv8wnDtQVnPuM0lWrc4q+JPNnrtDT39J/vsxH\nllbL/K1d18rczKy0389l3v6R6TIvXLFb5j+cP1PmHxt82rtuvFc6q7anuvzMzEyZd+yor9WxY8fK\n/MQJfb0UFhbK3FcJ3dce3/RZWfrl0ZenWqU+zjypbptv+b5K9b7cx1elPl3Lb2ie2lr9Ou1rU6q5\nT25ursz37t0rc98x8x2bVPM4Ul1Wc/cjbVNz75MYNdI9swSBfqLOM31p2jYt1QWlOn3L1ouXPPva\nO3kzNaM18G9bera61nuJeF73Uj6v/e1s7jP1Qj4v8F76NyEAbRWfYAUAAAAAAACAmBhgBQAAAAAA\nAICYGGAFAAAAAAAAgJgYYAUAAAAAAACAmBhgBQAAAAAAAICYdDnkRuhWUyTz9UF3mQ/coyuwTzt2\nicw3tC+X+d5xh2R+xZ7BMjcz25ajnyuoPibzzsUnZf7W7OMy/2CGrkL8Ut8qmU9eoMe1N3xc57vX\nfUjm1v93Mn51p67YfvWA3+jlmNmgH/2vzHfc9h8y7zhAV7YfWLtU5idXTZL5oTHtZV7asULm+Rv0\nPho4WJ9f3z94h8wnjfuZzGvz98jczKwo9//IfMAhve+62imZn5heI/PDpfp8WbzrKZkPqZwl85M1\nuh7lkJn6/O24oZvMF63pIvNOf/2OzM3MsgtvlfkMN0jmbxxYI/Nhl/6LzIuGXOpZ843eNqHpUq12\nb2aWlaVfXnr16iXzgoICmT/66KMyP35cn8+pVqq/ECqqN3ebfMtv7n1tZlZXp19f08W3DZmZmTLv\n0aOHzKurq2VeXq7vZXzT+/KG9oNvG1I9Pj61tbVpWc4FxXMqp7rHU78i0netZ3rKqqd+tFuqT2z+\n9aZ8BaWrSWm6dr2Lb9aln0vzHjfPaZ3edXjyVFfdsscBANAc+AQrAAAAAAAAAMTEACsAAAAAAAAA\nxMQAKwAAAAAAAADExAArAAAAAAAAAMTEACsAAAAAAAAAxKTLPDdC5rTrZD5pg66cXj5OV95t17lI\n5l36flvm1SfPyLy0uKvMzczy2+uaqNv26+q+BeP7yPzMkeUy33VYV1u/dqCuzl5y5dsy77f9hMwz\nqzvLvKjopMzvLcyT+dytt8jczGzgJ34q86pXOsr8ukt3yvytgR+S+fjL5sv8taXTZb66j64ofs8e\nvY+y+++V+WeH6X005FdzZL75/t4yNzM7XjNf5jmZm2VeVjVB5gXb82V+tMsQmXddouuM7r32RpmP\ndptk3reoSubrS2+S+fAbfivz1cf0tW9mdnjLSzIvrDsm823VZTI/eWSozE8dyPeuG43nq+aeap6R\n4X+Prl27djKfNWuWzB977DGZHzumz52SkhKZp6tyelviOz4XgpY6npmZmTKvrq6WeV1dnczLynQf\n15bOU9+2oenSVY08Dm/vnfLKW+hcjrHa1Gdp5or33tW2xj49tb3nnbrNdH0NHQO9EW1m0wAAzYZP\nsAIAAAAAAABATAywAgAAAAAAAEBMDLACAAAAAAAAQEwMsAIAAAAAAABATAywAgAAAAAAAEBMWXFn\nXPHUizIf9pXdMj+55/0yP3pwuMzXdHtY5pPX6MrRpwd1kbmZWVYvXdfxst1LZT5sua4kv++qDTLf\nNV9Xi+8/ZKvMC8Zlyzxn760yHzJ1ucyXPKmruXe4602ZDz5WIHMzs32bBsg8Y8xTMq/J66rzd4pl\nXrpZV+Mc3etlmd9Zott6bJdeTtBnoMz3LNgl83dG3C/zIX/+g8zNzPZW6m0bPewqma8Yq/fR+Kc6\ny3xQl3kybz9en4+V7VfKfF7lGZlb4U4Z1xxZJvPJ7h6Z52w/pJdvZlWTymW+ZZNu04w9evrOo0pl\nntFJXzsXu+auIp+Rod+Ly872H4/u3bvL/LOf/azM77vvPpmXl+tzpKamRuZUPEc6+M6vU6dOydx3\nDVZXV8vcd54Ggac6tSc/13Op8C2nufuXtqilqoU3tF7fUfLnvqW17eOd3mNDXfiEtO2JNJ1e3vak\n7bRO47H39dGeNgVt/BoEgIsZn2AFAAAAAAAAgJgYYAUAAAAAAACAmBhgBQAAAAAAAICYGGAFAAAA\nAAAAgJgYYAUAAAAAAACAmLLizjh85if0EwdflHFm+6MyPxCckHnvp3Tl6N2Fl8s875h/U4IqTwXs\nnu+X+erOM2SeO3+TzK++QlfSXnNyt8yHdiiQ+ZBKPX3x8oEy7zH5NZlvz9bVjzv26SBzM7Oh2Rtl\nvjbjdp0f3CvzEyO6yHxM3VUyz+38iMx/X9hR5kN3lejlO73e9k8clvkN//y6zLf1OSBzM7PiyrEy\n77qjUuadxuptKP2HPTIveWWAzHu88pbMx33+UpnvDXR16smH75d50aQcma/O+5nMT5eMkbmZ2cT/\n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\nkS/zt089IvNZN/6VzH9QuEjm31o4UObzx0yTeVlhpszNzLb/SO/vzjOqZf7RMl1hvmhCocz7j/yY\nzA+XH5f5sFpdtfytrn+W+fgnJsj8hX36FO/90QEyLzo+RuZmZtP2Fsl83Tt63WM7Vcj82gF63z3Z\ncYPMczd0k/mhvstkPmX8MJkvWlQj809trpT5wr/W1d77v5wtczOz0p1VMu9cuEvmtcP1+XVz8WCZ\n71yuzy97wNuki0IQ6L7JOV2J1pdnZuo+Ij8/X+aXXXaZt02PPfaYzGtq9Hno2wZfDgDNzVfLO+Ve\nyTeDZwW+9WbG6A9bWz3yVLfgfLS/xV5lAs9rdGqT2/nYgpSvhZSblOKRbm0nNgAAxidYAQAAAAAA\nACA2BlgBAAAAAAAAICYGWAEAAAAAAAAgJgZYAQAAAAAAACAmBlgBAAAAAAAAICZHhWYAAAAAAAAA\niIdPsAIAAAAAAABATAywAgAAAAAAAEBMDLACAAAAAAAAQEwMsAIAAAAAAABATAywAgAAAAAAAEBM\nDLACAAAAAAAAQEwMsAIAAAAAAABATAywAgAAAAAAAEBMDLACAAAAAAAAQEwMsAIAAAAAAABATAyw\nAgAAAAAAAEBMDLACAAAAAAAAQEwMsAIAAAAAAABATP8/JoKOAcbef+YAAAAASUVORK5CYII=\n", + "text/plain": [ + "\u003cFigure size 1200x1200 with 4 Axes\u003e" + ] + }, + "metadata": { + "image/png": { + "height": 175, + "width": 684 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "opts = foj_helpers.get_opts()\n", + "\n", + "angles, x0y0, global_image, global_boundaries = foj_helpers.foj_optimize_verbose(img, opts)\n", + "\n", + "plt.figure(figsize=[12, 12])\n", + "plt.subplot(141)\n", + "plt.imshow(img)\n", + "plt.title('Input')\n", + "plt.axis('off')\n", + "plt.subplot(142)\n", + "plt.imshow(global_boundaries.squeeze(), cmap='gray')\n", + "plt.title('Global boundaries')\n", + "plt.axis('off')\n", + "plt.subplot(143)\n", + "plt.imshow(global_image.squeeze().transpose(1, 2, 0))\n", + "plt.title('Smoothed image')\n", + "plt.axis('off')\n", + "plt.subplot(144)\n", + "plt.imshow(clean_img)\n", + "plt.title('Ground truth')\n", + "plt.axis('off');" + ] + } + ], + "metadata": { + "colab": { + "last_runtime": { + "build_target": "//experimental/viscam/miapolansky/fast_foj_base:notebook", + "kind": "private" + }, + "provenance": [ + { + "file_id": "1XBSKGaaQyFllpFjnx2OHt9Losn9jv0Qm", + "timestamp": 1704742773872 + }, + { + "file_id": "11SmenxnjkTNz1HtFqHm0J7Lf-1U0IxFe", + "timestamp": 1704742338939 + }, + { + "file_id": "1dqZiL6OGDkOm351Jx47TFnN7lQKLplJP", + "timestamp": 1703705589384 + }, + { + "file_id": "1oeT7tUYK3CA7ZFGETW6a04hVGmA3DezU", + "timestamp": 1699278071204 + }, + { + "file_id": "1kPxAt3tzGuDgakCMr6ldNNpAKQzYU89I", + "timestamp": 1699267335524 + }, + { + "file_id": "1ecKTorN089Kvjny7OZpGbHiUFWIqOvm4", + "timestamp": 1699004428298 + }, + { + "file_id": "1wNg6_3IeIX27I10S5mlJPgD8W-c1v9XV", + "timestamp": 1698700120469 + }, + { + "file_id": "1RS8XWkEqqA8cNdWgyECsx_8I3s0zmWVl", + "timestamp": 1698521809338 + }, + { + "file_id": "1ddNfh7wN8pWy-6QLwsDWHn1mQhVZ-L4L", + "timestamp": 1698151784386 + }, + { + "file_id": "1IXnuXZ2L9jv8NvUcA58SprqYo1Hab50c", + "timestamp": 1698096093988 + }, + { + "file_id": "1HD5KztmM2Ke77F1F47g9bLCxJxVdGM3I", + "timestamp": 1697650769515 + }, + { + "file_id": "1OVFUGjxcOx-XxTjVPr81YqkWfrLUD8g0", + "timestamp": 1697485611387 + }, + { + "file_id": "1GNWV_ce-XOanM8RZkl3WseCl29ZqfWWk", + "timestamp": 1692903917461 + }, + { + "file_id": "1MGRIt5EHY9mVKUPJmhCIWyRyqNjDxFwq", + "timestamp": 1690465791754 + }, + { + "file_id": "1Bdx3Gh--3gNyoTuLK46a1YO5_0D3PIXn", + "timestamp": 1689879314268 + }, + { + "file_id": "16CxZdovN-WOpJJuSD4PrpILcAMKJoeZx", + "timestamp": 1689000607956 + }, + { + "file_id": "1m4dAZK-aqph_qRkK0pLZ6oylxoNMc9ti", + "timestamp": 1686588075425 + }, + { + "file_id": "17H70tjn6ueLBZuZbgOEj3LYWso5iqyX2", + "timestamp": 1686583056801 + }, + { + "file_id": "1VrfNtznsEdp3zcRjBIAS84HOixpPmXZA", + "timestamp": 1686240619692 + } + ], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/scenic/projects/boundary_attention/field_of_junctions_jax/field_of_junctions.py b/scenic/projects/boundary_attention/field_of_junctions_jax/field_of_junctions.py new file mode 100644 index 0000000000000000000000000000000000000000..f7ba3edb809daa55b70a3a0cdd54775bae46f984 --- /dev/null +++ b/scenic/projects/boundary_attention/field_of_junctions_jax/field_of_junctions.py @@ -0,0 +1,894 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Field of Junctions optimization reimplemented in JAX.""" + +import functools +import types + +import jax +import jax.numpy as jnp +import optax + + +class FieldOfJunctions: + """Field of Junctions optimization.""" + + def __init__(self, img, opts): + """Inputs. + + Args: + img: Input image: a numpy array of shape [height, width, channels] + opts: Object with the following attributes: + patchsize Patch size + stride Stride for junctions (e.g. opts.stride == + 1 is a dense field of junctions) + eta Width parameter for Heaviside functions + delta Width parameter for boundary maps + lr_angles Angle learning rate + lr_x0y0 Vertex position learning rate + lambda_boundary_final Final value of spatial boundary + consistency term + lambda_color_final Final value of spatial color consistency + term + nvals Number of values to query in Algorithm 2 + from the paper + num_initialization_iters Number of initialization iterations + num_refinement_iters Number of refinement iterations + greedy_step_every_iters Frequency of "greedy" iteration (applying + Algorithm 2 with consistency) + parallel_mode Whether or not to run Algorithm 2 in + parallel over all `nvals` values. + """ + + # Save opts + self.opts = opts + + # Get image dimensions + self.height, self.width, self.channels = img.shape + + # Number of patches (throughout the documentation hpatches and wpatches + # are denoted by H' and W' resp.) + self.hpatches = (self.height - opts.patchsize) // opts.stride + 1 + self.wpatches = (self.width - opts.patchsize) // opts.stride + 1 + + # Set initial lmbda_boundary and lmbda_color variables + self.lmbda_boundary = 0 + self.lmbda_color = 0 + + # Store total number of iterations (initialization + refinement) + self.num_iters = opts.num_initialization_iters + opts.num_refinement_iters + + # Split image into overlapping patches, creating a array of shape + # N, channels, R, R, hpatches, wpatches + t_img = jnp.expand_dims( + jnp.array(img).transpose(2, 0, 1), 0 + ) # input image, shape [1, channels, height, width] + self.img_patches = self.unfold(t_img) + + # Create variables for angles and vertex position for each patch + self.angles = jnp.zeros( + (1, 3, self.hpatches, self.wpatches), dtype=jnp.float32 + ) + self.x0y0 = jnp.zeros( + (1, 2, self.hpatches, self.wpatches), dtype=jnp.float32 + ) + + val = types.SimpleNamespace( + shape=(1, 1, self.height, self.width), dtype=jnp.dtype(jnp.float32) + ) + self.num_patches = self.fold( + jnp.ones( + (1, 1, opts.patchsize, opts.patchsize, self.hpatches, + self.wpatches)), val).reshape(self.height, self.width) + + # Create local grid within each patch + y, x = jnp.meshgrid( + jnp.linspace(-1.0, 1.0, opts.patchsize), + jnp.linspace(-1.0, 1.0, opts.patchsize) + ) + self.x = x.reshape(1, opts.patchsize, opts.patchsize, 1, 1) + self.y = y.reshape(1, opts.patchsize, opts.patchsize, 1, 1) + + # Optimization parameters + adam_beta1 = 0.5 + adam_beta2 = 0.99 + adam_eps = 1e-08 + + optimizer_angles = optax.adam( + opts.lr_angles, adam_beta1, adam_beta2, eps=adam_eps + ) + opt_state_angles = optimizer_angles.init(self.angles) + + optimizer_x0y0 = optax.adam( + opts.lr_x0y0, adam_beta1, adam_beta2, eps=adam_eps + ) + opt_state_x0y0 = optimizer_x0y0.init(self.x0y0) + + self.optimizers = [optimizer_angles, optimizer_x0y0] + self.opt_states = [opt_state_angles, opt_state_x0y0] + + # # Values to search over in Algorithm 2: [0, 2pi) for angles, [-3, 3] for + # vertex position. + self.angle_range = jnp.linspace(0.0, 2 * jnp.pi, opts.nvals + 1)[ + : opts.nvals + ] + self.x0y0_range = jnp.linspace(-3.0, 3.0, opts.nvals) + + # Save current global image and boundary map (initially None) + self.global_image = jnp.zeros( + (1, 3, self.height, self.width), dtype=jnp.float32 + ) + self.global_boundaries = jnp.zeros( + (1, 1, self.height, self.width), dtype=jnp.float32 + ) + + def step( + self, iteration, angles, x0y0, global_image, global_boundaries, opt_states + ): + """Performs one step of initialization or refinement. + + Args: + iteration: Iteration number (integer) + angles: Array of shape [N, 3, H', W'] with the angles for each patch + x0y0: Array of shape [N, 2, H', W'] with the vertex positions for each + patch + global_image: Array of shape [N, C, H, W] with the global image + global_boundaries: Array of shape [N, 1, H, W] with the global boundaries + opt_states: Optimization states for each patch + + Returns: + angles: Updated angles for each patch + x0y0: Updated vertex positions for each patch + global_image: Updated global image + global_boundaries: Updated global boundaries + opt_states: Updated optimization states for each patch + """ + + # Linearly increase lambda from 0 to lambda_boundary_final and + # lambda_color_final + if self.opts.num_refinement_iters <= 1: + factor = 0.0 + else: + factor = max([ + 0, + (iteration - self.opts.num_initialization_iters) + / (self.opts.num_refinement_iters - 1), + ]) + + lmbda_boundary = factor * self.opts.lambda_boundary_final + lmbda_color = factor * self.opts.lambda_color_final + + if ( + iteration < self.opts.num_initialization_iters + or (iteration - self.opts.num_initialization_iters + 1) + % self.opts.greedy_step_every_iters + == 0 + ): + angles, x0y0, global_image, global_boundaries = self.initialization_step( + angles, + x0y0, + global_image, + global_boundaries, + lmbda_boundary, + lmbda_color, + ) + else: + angles, x0y0, global_image, global_boundaries, opt_states = ( + self.refinement_step( + angles, + x0y0, + global_image, + global_boundaries, + lmbda_boundary, + lmbda_color, + opt_states, + ) + ) + + return angles, x0y0, global_image, global_boundaries, opt_states + + @functools.partial(jax.jit, static_argnums=(0,)) + def initialization_step( + self, + angles, + x0y0, + global_image, + global_boundaries, + lmbda_boundary, + lmbda_color, + ): + """Perform a single coordinate descent step. + + Implements a heuristic for searching along the three junction angles after + updating each of the five parameters. The original value is included in the + search, so the extra step is guaranteed to obtain a better (or equally-good) + set of parameters. + + Args: + angles: Array of shape [N, 3, H', W'] with the angles for each patch + x0y0: Array of shape [N, 2, H', W'] with the vertex positions for each + patch + global_image: Array of shape [N, C, H, W] with the global image + global_boundaries: Array of shape [N, 1, H, W] with the global boundaries + lmbda_boundary: Spatial consistency boundary loss weight + lmbda_color: Spatial consistency color loss weight + + Returns: + angles: Updated angles for each patch + x0y0: Updated vertex positions for each patch + global_image: Updated global image + global_boundaries: Updated global boundaries + """ + + params = jnp.concatenate([angles, x0y0], axis=1) + + # Run one step of Algorithm 2, sequentially improving each coordinate + for i in range(5): + # Repeat the set of parameters `nvals` times along 0th dimension + params_query = jnp.repeat(params, self.opts.nvals, axis=0) + param_range = self.angle_range if i < 3 else self.x0y0_range + params_query = params_query.at[:, i, :, :].set( + params_query[:, i, :, :] + param_range.reshape(-1, 1, 1) + ) + + best_ind = self.get_best_inds( + params_query, + global_image, + global_boundaries, + lmbda_boundary, + lmbda_color, + ) + + # Update parameters + params = params.at[0, i, :, :].set( + params_query[ + best_ind.reshape(self.hpatches, self.wpatches), + i, + jnp.arange(self.hpatches).reshape(-1, 1), + jnp.arange(self.wpatches).reshape(1, -1), + ] + ) + + # Heuristic for accelerating convergence(not necessary but sometimes + # helps): + # Update x0 and y0 along the three optimal angles (search over a line + # passing through current x0, y0) + for i in range(3): + params_query = jnp.repeat(params, self.opts.nvals, axis=0) + params_query = params_query.at[:, 3, :, :].set( + params[:, 3, :, :] + + jnp.cos(params[:, i, :, :]) + * jnp.expand_dims(self.x0y0_range, [1, 2]).reshape(-1, 1, 1) + ) + params_query = params_query.at[:, 4, :, :].set( + params[:, 4, :, :] + + jnp.sin(params[:, i, :, :]) + * jnp.expand_dims(self.x0y0_range, [1, 2]).reshape(-1, 1, 1) + ) + + best_ind = self.get_best_inds( + params_query, + global_image, + global_boundaries, + lmbda_boundary, + lmbda_color, + ) + + # Update vertex positions of parameters + for j in range(3, 5): + params = params.at[:, j, :, :].set( + params_query[ + jnp.expand_dims(best_ind, 0).reshape( + 1, self.hpatches, self.wpatches + ), + j, + jnp.expand_dims(jnp.arange(self.hpatches), [0, 2]).reshape( + 1, -1, 1 + ), + jnp.expand_dims(jnp.arange(self.wpatches), [0, 1]).reshape( + 1, 1, -1 + ), + ] + ) + + # Update angles and vertex position using the best values found + angles = params[:, :3, :, :] + x0y0 = params[:, 3:, :, :] + + # Update global boundaries and image + dists, _, patches = self.get_dists_and_patches( + params, global_image, lmbda_color + ) + global_image = self.local2global(patches) + global_boundaries = self.local2global(self.dists2boundaries(dists)) + + return angles, x0y0, global_image, global_boundaries + + def get_best_inds( + self, params, global_image, global_boundaries, lmbda_boundary, lmbda_color + ): + """Compute the best index for each patch. + + Has two possible modes determined by self.opts.parallel_mode: 1) When True, + all N values are computed in parallel (generally faster, requires more + memory) 2) When False, the values are computed sequentially (generally + slower, requires less memory) + + Args: + params: Array of shape [N, 5, H', W'] holding N field of junctions + parameters. Each 5-vector has format (angle1, angle2, angle3, x0, y0). + global_image: Array of shape [N, C, H, W] with the global image + global_boundaries: Array of shape [N, 1, H, W] with the global boundaries + lmbda_boundary: Spatial consistency boundary loss weight + lmbda_color: Spatial consistency color loss weight + + Returns: + Array of shape [H', W'] with each value in {0, ..., N-1} holding the + index of the best junction parameters at that patch position. + """ + + if self.opts.parallel_mode: + dists, colors, smoothpatches = self.get_dists_and_patches( + params, global_image, lmbda_color + ) + loss_per_patch = self.get_loss( + dists, + colors, + smoothpatches, + global_image, + global_boundaries, + lmbda_boundary, + lmbda_color, + ) + best_ind = jnp.argmin(loss_per_patch, axis=0) + + else: + # First initialize arrays + best_ind = jnp.zeros((self.hpatches, self.wpatches), dtype=jnp.int64) + best_loss_per_patch = jnp.zeros((self.hpatches, self.wpatches)) + 1e10 + + # Now fill arrays by iterating over the junction dimension and choosing + # the best junction parameters + for n in range(params.shape[0]): + dists, colors, smoothpatches = self.get_dists_and_patches( + params[n : n + 1, :, :, :], global_image, lmbda_color + ) + loss_per_patch = self.get_loss( + dists, + colors, + smoothpatches, + global_image, + global_boundaries, + lmbda_boundary, + lmbda_color, + ) + + improved_inds = loss_per_patch[0] < best_loss_per_patch + best_ind = jnp.where( + improved_inds, jnp.array(n, dtype=jnp.int64), best_ind + ) + best_loss_per_patch = jnp.where( + improved_inds, loss_per_patch, best_loss_per_patch + ) + + return best_ind + + def unfold(self, im): + """Extract patches from an image. + + Args: + im: Array of shape [N, C, H, W] + + Returns: + Array of shape [N, C, R, R, H', W'] containing all image patches. + E.g. [k,l,:,:,i,j] is the lth channel of the (i,j)th patch of the kth + image + """ + + return jax.lax.conv_general_dilated_patches( + im, + filter_shape=[self.opts.patchsize, self.opts.patchsize], + window_strides=[self.opts.stride, self.opts.stride], + padding='VALID', + ).reshape([ + -1, + im.shape[1], + self.opts.patchsize, + self.opts.patchsize, + self.hpatches, + self.wpatches, + ]) + + def fold(self, patches, val): + """Fold patches into a single image. + + Args: + patches: Array of shape [N, C, R, R, H', W'] + val: Container of shape [N, C, H, W] + + Returns: + Array of shape [N, C, H, W] containing the folded image patches. + """ + + f_transpose = jax.linear_transpose(self.unfold, val) + + return f_transpose(patches)[0] + + def get_dists_and_patches(self, params, global_image, lmbda_color): + """Compute distance functions and piecewise-constant patches. + + Args: + params: Array of shape [N, 5, H', W'] holding N field of junctions + parameters. Each 5-vector has format (angle1, angle2, angle3, x0, y0) + global_image: Array of shape [N, C, H, W] with the global image + lmbda_color: Factor between 0 and 1 that dictates how to mix global image + with the input noisy image when calculating wedge colors + + Returns: + dists: Array of shape [N, 2, R, R, H', W'] with samples of the two + distance functions for every patch + colors: Array of shape [N, C, 3, H', W'] storing the colors at each wedge + patches: Array of shape [N, C, H', W'] with the constant color function + at each of the 3 wedges + """ + + # Get dists + dists = self.params2dists(params) # shape [N, 2, R, R, H', W'] + + # Get wedge indicator functions + wedges = self.dists2indicators(dists) # shape [N, 3, R, R, H', W'] + + curr_global_image_patches = self.unfold(global_image) + + numerator = ( + jnp.expand_dims( + self.img_patches + lmbda_color * curr_global_image_patches, 2 + ) + * jnp.expand_dims(wedges, 1) + ).sum([3, 4]) + denominator = (1.0 + lmbda_color) * jnp.expand_dims(wedges.sum([2, 3]), 1) + colors = numerator / (denominator + 1e-10) + + # Fill wedges with optimal colors + patches = ( + jnp.expand_dims(wedges, 1) * jnp.expand_dims(colors, [3, 4]) + ).sum(axis=2) + + return dists, colors, patches + + def params2dists(self, params, tau=1e-1): + """Compute distance functions d_{13}, d_{12}. + + Args: + params: Array of shape [N, 5, H', W'] holding N field of junctions + parameters. Each 5-vector has format (angle1, angle2, angle3, x0, y0) + tau: Small constant to add to the gradient of the distance functions + + Returns: + dists: Array of shape [N, 2, R, R, H', W'] with samples of the two + distance functions for every patch + """ + + x0 = jnp.expand_dims(params[:, 3, :, :], [1, 2]) # shape [N, 1, 1, H', W'] + y0 = jnp.expand_dims(params[:, 4, :, :], [1, 2]) # shape [N, 1, 1, H', W'] + + # Sort so angle1 <= angle2 <= angle3 (mod 2pi) + angles = jnp.remainder(params[:, :3, :, :], 2 * jnp.pi) + + angles = jnp.sort(angles, axis=1) + + angle1 = jnp.expand_dims( + angles[:, 0, :, :], [1, 2] + ) # shape [N, 1, 1, H', W'] + angle2 = jnp.expand_dims( + angles[:, 1, :, :], [1, 2] + ) # shape [N, 1, 1, H', W'] + angle3 = jnp.expand_dims( + angles[:, 2, :, :], [1, 2] + ) # shape [N, 1, 1, H', W'] + + # Define another angle halfway between angle3 and angle1, clockwise from + # angle3. This isn't critical but it seems a bit more stable for computing + # gradients. + angle4 = 0.5 * (angle1 + angle3) + jnp.where( + jnp.remainder(0.5 * (angle1 - angle3), 2 * jnp.pi) >= jnp.pi, + jnp.ones_like(angle1) * jnp.pi, + jnp.zeros_like(angle1), + ) + + def g(dtheta): + # Map from [0, 2pi] to [-1, 1] + return (dtheta / jnp.pi - 1.0) ** 35 + + # Compute the two distance functions + sgn42 = jnp.where( + jnp.remainder(angle2 - angle4, 2 * jnp.pi) < jnp.pi, + jnp.ones_like(angle2), + -jnp.ones_like(angle2), + ) + tau42 = g(jnp.remainder(angle2 - angle4, 2 * jnp.pi)) * tau + + dist42 = ( + sgn42 + * jnp.minimum( + sgn42 + * ( + -jnp.sin(angle4) * (self.x - x0) + + jnp.cos(angle4) * (self.y - y0) + ), + -sgn42 + * ( + -jnp.sin(angle2) * (self.x - x0) + + jnp.cos(angle2) * (self.y - y0) + ), + ) + + tau42 + ) + + sgn13 = jnp.where( + jnp.remainder(angle3 - angle1, 2 * jnp.pi) < jnp.pi, + jnp.ones_like(angle3), + -jnp.ones_like(angle3), + ) + tau13 = g(jnp.remainder(angle3 - angle1, 2 * jnp.pi)) * tau + dist13 = ( + sgn13 + * jnp.minimum( + sgn13 + * ( + -jnp.sin(angle1) * (self.x - x0) + + jnp.cos(angle1) * (self.y - y0) + ), + -sgn13 + * ( + -jnp.sin(angle3) * (self.x - x0) + + jnp.cos(angle3) * (self.y - y0) + ), + ) + + tau13 + ) + + return jnp.stack([dist13, dist42], axis=1) + + def dists2indicators(self, dists): + """Computes the indicator functions from the distance functions. + + Args: + dists: Array of shape [N, 2, R, R, H', W'] with samples of the two + distance functions for every patch + + Returns: + Array of shape [N, 3, R, R, H', W'] with samples of the three + indicator functions for every patch + """ + # Apply smooth Heaviside function to distance functions + hdists = 0.5 * (1.0 + (2.0 / jnp.pi) * jnp.arctan(dists / self.opts.eta)) + + # Convert Heaviside functions into wedge indicator functions + return jnp.stack( + [ + 1.0 - hdists[:, 0, :, :, :, :], + hdists[:, 0, :, :, :, :] * (1.0 - hdists[:, 1, :, :, :, :]), + hdists[:, 0, :, :, :, :] * hdists[:, 1, :, :, :, :], + ], + axis=1, + ) + + def get_loss( + self, + dists, + colors, + patches, + global_image, + global_boundaries, + lmbda_boundary, + lmbda_color, + ): + """Compute the objective of the model (see Equation 8 of the paper). + + Args: + dists: Array of shape [N, 2, R, R, H', W'] with samples of the two + distance functions for every patch + colors: Array of shape [N, C, 3, H', W'] storing the colors at each wedge + patches: Array of shape [N, C, H', W'] with the constant color function + at each of the 3 wedges + global_image: Array of shape [N, C, H, W] with the global image + global_boundaries: Array of shape [N, 1, H, W] with the global boundaries + lmbda_boundary: Spatial consistency boundary loss weight + lmbda_color: Spatial consistency color loss weight + + Returns: + Array of shape [N, H', W'] with the loss at each patch + """ + # Compute negative log-likelihood for each patch (shape [N, H', W']) + loss_per_patch = ( + ((self.img_patches - patches) ** 2).mean(-3).mean(-3).sum(1) + ) + + # Add spatial consistency loss for each patch, if lambda > 0 + loss_per_patch = ( + loss_per_patch + + lmbda_boundary + * self.get_boundary_consistency_term(dists, global_boundaries) + ) + loss_per_patch = ( + loss_per_patch + + lmbda_color + * self.get_color_consistency_term(dists, colors, global_image) + ) + + return loss_per_patch + + def local2global(self, patches): + """Compute average value for each pixel over all patches containing it. + + For example, this can be used to compute the global boundary maps, or the + boundary-aware smoothed image. + + Args: + patches: Array of shape [N, C, H', W'] with the constant color function + at each of the 3 wedges + patches[n, :, :, :, i, j] is an RxR C-channel patch at the (i, j)th + spatial position of the nth entry. + + Returns: + Array of shape [N, C, H, W] of averages over all patches containing + each pixel. + """ + batch = patches.shape[0] + channels = patches.shape[1] + + val = types.SimpleNamespace( + shape=(batch, channels, self.height, self.width), + dtype=jnp.dtype(jnp.float32), + ) + + return jnp.divide( + self.fold( + patches, + val).reshape(batch, + channels, + self.height, + self.width), jnp.expand_dims(self.num_patches, [0, 1])) + + def dists2boundaries(self, dists): + """Compute boundary map for each patch, given distance functions. + + The width of the boundary is determined by self.opts.delta. + + Args: + dists: Array of shape [N, 2, R, R, H', W'] with samples of the two + distance functions for every patch + + Returns: + Array of shape [N, 1, R, R, H', W'] with values of boundary map for + every patch + """ + # Find places where either distance transform is small, except where d1 > 0 + # and d2 < 0 + d1 = dists[:, 0:1, :, :, :, :] + d2 = dists[:, 1:2, :, :, :, :] + minabsdist = jnp.where( + d1 < 0.0, + -d1, + jnp.where(d2 < 0.0, jnp.minimum(d1, -d2), jnp.minimum(d1, d2)), + ) + + return 1.0 / (1.0 + (minabsdist / self.opts.delta) ** 2) + + @functools.partial(jax.jit, static_argnums=(0,)) + def refinement_step( + self, + angles, + x0y0, + global_image, + global_boundaries, + lmbda_boundary, + lmbda_color, + opt_states, + ): + """Perform a single refinement step. + + Args: + angles: Array of shape [N, 3, H', W'] with the angles for each patch + x0y0: Array of shape [N, 2, H', W'] with the vertex positions for each + patch + global_image: Array of shape [N, C, H, W] with the global image + global_boundaries: Array of shape [N, 1, H, W] with the global boundaries + lmbda_boundary: Spatial consistency boundary loss weight + lmbda_color: Spatial consistency color loss weight + opt_states: Optimization states for each patch + + Returns: + angles: Array of shape [N, 3, H', W'] with the updated angles for each + patch + x0y0: Array of shape [N, 2, H', W'] with the updated vertex positions for + each patch + global_image: Array of shape [N, C, H, W] with updated global image + global_boundaries: Array of shape [N, 1, H, W] with updated global + boundaries + opt_states: Updated optimization states for each patch + """ + dists, _, patches, angles, x0y0, opt_states = self.refinement_loss( + angles, + x0y0, + global_image, + global_boundaries, + lmbda_boundary, + lmbda_color, + opt_states, + ) + + global_image = self.local2global(patches) + global_boundaries = self.local2global(self.dists2boundaries(dists)) + + return angles, x0y0, global_image, global_boundaries, opt_states + + def avg_loss( + self, + angles, + x0y0, + global_image, + global_boundaries, + lmbda_boundary, + lmbda_color, + ): + """Calculates the average loss. + + Args: + angles: Array of shape [N, 3, H', W'] with angles for each patch + x0y0: Array of shape [N, 2, H', W'] with vertex positions for each patch + global_image: Array of shape [N, C, H, W] with the global image + global_boundaries: Array of shape [N, 1, H, W] with the global boundaries + lmbda_boundary: Spatial consistency boundary loss weight + lmbda_color: Spatial consistency color loss weight + + Returns: + Average loss + """ + params = jnp.concatenate([angles, x0y0], axis=1) + + # Compute distance functions, colors, and junction patches + dists, colors, patches = self.get_dists_and_patches( + params, global_image, lmbda_color + ) + + # Compute average loss + return self.get_loss( + dists, + colors, + patches, + global_image, + global_boundaries, + lmbda_boundary, + lmbda_color, + ).mean() + + def refinement_loss( + self, + angles, + x0y0, + global_image, + global_boundaries, + lmbda_boundary, + lmbda_color, + opt_states, + ): + """Calculates the refinement loss. + + Args: + angles: Array of shape [N, 3, H', W'] with the angles for each patch + x0y0: Array of shape [N, 2, H', W'] with the vertex positions for each + patch + global_image: Array of shape [N, C, H, W] with the global image + global_boundaries: Array of shape [N, 1, H, W] with the global boundaries + lmbda_boundary: Spatial consistency boundary loss weight + lmbda_color: Spatial consistency color loss weight + opt_states: The optimizer’s states + + Returns: + dists: Array of shape [N, 2, R, R, H', W'] with samples of the two + distance functions for every patch + colors: Array of shape [N, C, 3, H', W'] storing the colors at each wedge + patches: Array of shape [N, C, H', W'] with the constant color function + at each of the 3 wedges + angles: Array of shape [N, 3, H', W'] with the angles for each patch + x0y0: Array of shape [N, 2, H', W'] with the vertex positions for each + patch + opt_states: The optimizer’s states + """ + + grad_angles, grad_x0y0 = jax.grad(self.avg_loss, argnums=[0, 1])( + angles, + x0y0, + global_image, + global_boundaries, + lmbda_boundary, + lmbda_color, + ) + + updates_angles, opt_states[0] = self.optimizers[0].update( + grad_angles, opt_states[0] + ) + angles = optax.apply_updates(angles, updates_angles) + + updates_x0y0, opt_states[1] = self.optimizers[1].update( + grad_x0y0, opt_states[1] + ) + x0y0 = optax.apply_updates(x0y0, updates_x0y0) + + # Update global boundaries and image + params = jnp.concatenate([angles, x0y0], axis=1) + dists, colors, patches = self.get_dists_and_patches( + params, global_image, lmbda_color + ) + + return dists, colors, patches, angles, x0y0, opt_states + + def get_boundary_consistency_term(self, dists, global_boundaries): + """Compute the boundary consistency loss. + + Args: + dists: Array of shape [N, 2, R, R, H', W'] with samples of the two + distance functions for every patch + global_boundaries: Array of shape [N, 1, H, W] with the global boundaries + + Returns: + consistency: Array of shape [N, H', W'] with the boundary consistency loss + at each patch + """ + + # Split global boundaries into patches + curr_global_boundaries_patches = self.unfold(global_boundaries) + + # Get local boundaries defined using the queried parameters (defined by + # `dists`) + local_boundaries = self.dists2boundaries(dists) + + # Compute consistency term + consistency = ( + ((local_boundaries - curr_global_boundaries_patches) ** 2) + .mean(2).mean(2) + ) + + return consistency[:, 0, :, :] + + def get_color_consistency_term(self, dists, colors, global_image): + """Compute the spatial color consistency loss. + + Args: + dists: Array of shape [N, 2, R, R, H', W'] with samples of the two + distance functions for every patch + colors: Array of shape [N, C, 3, H', W'] storing the colors at each wedge + global_image: Array of shape [N, C, H, W] with the global image + + Returns: + Array of shape [N, H', W'] with the color consistency loss at each + patch + """ + + # Split global image into patches + curr_global_image_patches = self.unfold(global_image) + + wedges = self.dists2indicators(dists) + + # Compute the color consistency loss + consistency = ( + (jnp.expand_dims(wedges, 1) + * (jnp.expand_dims(colors, [3, 4]) + - jnp.expand_dims(curr_global_image_patches, 2) + ) ** 2).mean(2).mean(2).sum(1).sum(1)) + + return consistency diff --git a/scenic/projects/boundary_attention/field_of_junctions_jax/foj_helpers.py b/scenic/projects/boundary_attention/field_of_junctions_jax/foj_helpers.py new file mode 100644 index 0000000000000000000000000000000000000000..234918c07ad16aa490918b96aff4852b745d1110 --- /dev/null +++ b/scenic/projects/boundary_attention/field_of_junctions_jax/foj_helpers.py @@ -0,0 +1,67 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Runs the field of junctions optimization with verbose logging.""" + +import types +from scenic.projects.boundary_attention.field_of_junctions_jax import field_of_junctions + + +def get_opts(patchsize=21, lambda_boundary_final=0.5, lambda_color_final=0.1): + """Returns the optimization options for the field of junctions model.""" + opts = types.SimpleNamespace() + + opts.patchsize = patchsize + opts.stride = 1 + opts.eta = 0.01 + opts.delta = 0.05 + opts.lr_angles = 0.003 + opts.lr_x0y0 = 0.03 + opts.lambda_boundary_final = lambda_boundary_final + opts.lambda_color_final = lambda_color_final + opts.nvals = 31 + opts.num_initialization_iters = 30 + opts.num_refinement_iters = 1000 + opts.greedy_step_every_iters = 50 + opts.parallel_mode = True + + return opts + + +def foj_optimize_verbose(img, opts): + """Runs the field of junctions optimization with verbose logging.""" + foj = field_of_junctions.FieldOfJunctions(img, opts) + angles = foj.angles + x0y0 = foj.x0y0 + global_image = foj.global_image + global_boundaries = foj.global_boundaries + opt_states = foj.opt_states + + for i in range(foj.num_iters): + if i == 0: + print("Beginning initialization...") + if i == opts.num_initialization_iters: + print("Initialization done. Beginning refinement...") + if i < opts.num_initialization_iters: + if i % 5 == 0: + print(f"Initialization iteration {i}/{opts.num_initialization_iters}") + else: + if i % 100 == 0: + print(f"Refinement iteration {i}/{opts.num_refinement_iters}") + + angles, x0y0, global_image, global_boundaries, opt_states = foj.step( + i, angles, x0y0, global_image, global_boundaries, opt_states + ) + + return angles, x0y0, global_image, global_boundaries diff --git a/scenic/projects/boundary_attention/helpers/__init__.py b/scenic/projects/boundary_attention/helpers/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/boundary_attention/helpers/additive_noise_model.py b/scenic/projects/boundary_attention/helpers/additive_noise_model.py new file mode 100644 index 0000000000000000000000000000000000000000..a3d4e756048fed0574c46130b78aea9a3b8cf4cd --- /dev/null +++ b/scenic/projects/boundary_attention/helpers/additive_noise_model.py @@ -0,0 +1,216 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Noise model for the boundary attention training.""" + +from scenic.projects.boundary_attention.helpers import perlin_noise +import tensorflow as tf + + +class NoiseModel: + """Noise model for the boundary attention training.""" + + def __init__(self, min_noise_level, max_noise_level, *, normalize=True): + self.min_noise_lvl = min_noise_level + self.max_noise_lvl = max_noise_level + self.normalize = normalize + + def __call__(self, input_im, input_im_shape): + + # Decide on an overall noise level given a minimum noise level and a maximum + # noise level + overall_noise_lvl = tf.random.uniform( + shape=[], minval=self.min_noise_lvl, maxval=self.max_noise_lvl + ) + + # A toggle that decides which noise mode to implement + r = tf.random.uniform(shape=[], minval=0.0, maxval=1.0) + + # If r is between 0 and .3, add both camera noise and perlin noise, where + # the amount of each is uniformly + # chosen to sum to the maxmimum noise level + if 0.0 < r < 0.3: + amnt_perlin = tf.random.uniform( + shape=[], minval=0.0, maxval=overall_noise_lvl + ) + noisy_im = self._get_perlin_noise( + input_im_shape + ) * amnt_perlin + self._get_camera_noise(input_im, input_im_shape) * ( + 1 - amnt_perlin + ) + + # If r is between .4 and .8, add gaussian noise in the same manner as our + # original training + elif 0.3 <= r < 0.75: + noisy_im = ( + overall_noise_lvl * self._get_gaussian_noise(input_im_shape) + + input_im + ) + + elif 0.75 <= r < 0.8: + chunk_size = 7 + noisy_im = input_im + overall_noise_lvl * self._get_chunky_noise( + input_im, input_im_shape, chunk_size + ) + + # If r is between .6 and .8, add camera noise + elif 0.8 <= r < 0.9: + noisy_im = overall_noise_lvl * self._get_camera_noise( + input_im, input_im_shape + ) + + # If r is between .9 and 1.0, add perlin noise + else: + noisy_im = input_im + overall_noise_lvl * self._get_perlin_noise( + input_im_shape + ) + + # Truncate any values below 0 or greater than 1 + noisy_im = tf.where(noisy_im > 1.0, 1.0, noisy_im) + noisy_im = tf.where(noisy_im < 0.0, 0.0, noisy_im) + + return noisy_im + + def normalize_fn(self, im): + """Normalizes an image.""" + im = im - tf.math.reduce_min(im, axis=(0, 1), keepdims=True) + im = im / tf.math.reduce_max(im, axis=(0, 1), keepdims=True) + + return im + + def _get_gaussian_noise(self, y_shape): + """Generates a gaussian noise.""" + return tf.random.normal(shape=y_shape) + + def _get_chunky_noise(self, y, y_shape, chunk_size): + """Generates a noise that is a chunky version of the input noise.""" + + noise = tf.random.normal( + shape=tf.concat([tf.cast(([1]), dtype=tf.int32), y_shape], axis=0), + stddev=tf.expand_dims(tf.norm(y, axis=-1, keepdims=True), 0), + ) + noise = ( + 3 + * tf.squeeze( + tf.nn.avg_pool2d(noise, chunk_size, strides=1, padding='SAME'), 0 + ) + * tf.random.uniform([3], minval=0, maxval=1, dtype=tf.float32) + ) + + return noise + + def _get_perlin_noise(self, y_shape): + """Generates perlin noise.""" + + # h, w = tf.cast(y.shape[0], tf.float32), tf.cast(y.shape[1], tf.float32) + h, w = tf.cast(y_shape[0], tf.float32), tf.cast(y_shape[1], tf.float32) + + # f controls the coarseness of the generated perlin noise + f = tf.math.maximum( + tf.cast( + tf.cast(tf.random.normal(shape=[], mean=0, stddev=2), tf.int32) + 5, + tf.float32, + ), + 2.0, + ) + + # f needs to be a factor of the rendered image size, so we choose any size + # large than our image and crop it later + h_render, w_render = (tf.math.ceil(h / f) * f), (tf.math.ceil(w / f)) * f + + r_h, r_w = tf.cast(h_render / f, tf.int32), tf.cast(w_render / f, tf.int32) + + h_render, w_render = tf.cast(h_render, tf.int32), tf.cast( + w_render, tf.int32 + ) + + colors = tf.stack( + ( + perlin_noise.rand_perlin_2d_tf( + (h_render, w_render), res=(r_h, r_w) + ), + perlin_noise.rand_perlin_2d_tf( + (h_render, w_render), res=(r_h, r_w) + ), + perlin_noise.rand_perlin_2d_tf( + (h_render, w_render), res=(r_h, r_w) + ), + ), + -1, + ) + qcolors = tf.quantization.fake_quant_with_min_max_args(colors, -1, 1, 3) + + return qcolors[:y_shape[0], :y_shape[1], :y_shape[2]] + + def _get_camera_noise(self, y, y_shape, *, model=None, params=None): + """Generates camera noise.""" + + all_models = ['g', 'gP', 'gp'] + + if model is None: + model = tf.gather( + all_models, + tf.random.uniform(shape=[], minval=0, maxval=3, dtype=tf.int32), + ) + + if params is None: + kconst, g_scale, saturation_level, ratio = self._sample_camera_params() + else: + kconst, g_scale, saturation_level, ratio = params + + y = y * saturation_level + y = y / ratio + + if tf.strings.regex_full_match(model, '.*P.*'): + z = tf.random.poisson(shape=[], lam=(y / kconst)) * kconst + elif tf.strings.regex_full_match(model, '.*p.*'): + z = y + tf.random.normal(shape=y_shape) * tf.math.sqrt( + tf.math.maximum(kconst * y, 1e-10) + ) + else: + z = y + + if tf.strings.regex_full_match(model, '.*g.*'): + z = z + tf.random.normal(shape=y_shape) * tf.math.maximum( + g_scale, 1e-10 + ) # Gaussian noise + + z = z * ratio + z = z / saturation_level + return z + + def _sample_camera_params(self): + """Samples reasonable camera parameters.""" + saturation_level = 16383 - 800 + + g_scale_sigma = tf.random.uniform(shape=[], minval=0.2, maxval=0.27) + g_scale_bias = tf.random.uniform(shape=[], minval=0.7, maxval=2.2) + g_scale_slope = tf.random.uniform(shape=[], minval=0.5, maxval=0.7) + + log_kconst = tf.random.uniform( + shape=[], minval=tf.math.log(1e-1), maxval=tf.math.log(30.0) + ) + + log_g_scale = ( + tf.random.normal(shape=[]) * g_scale_sigma * 1 + + g_scale_slope * log_kconst + + g_scale_bias + ) + + kconst = tf.math.exp(log_kconst) + g_scale = tf.math.exp(log_g_scale) + + ratio = tf.random.uniform(shape=[], minval=100, maxval=300) + + return (kconst, g_scale, saturation_level, ratio) diff --git a/scenic/projects/boundary_attention/helpers/get_input_opts.py b/scenic/projects/boundary_attention/helpers/get_input_opts.py new file mode 100644 index 0000000000000000000000000000000000000000..c1dd346781da5894d72c164239bb35f8d5cfcda7 --- /dev/null +++ b/scenic/projects/boundary_attention/helpers/get_input_opts.py @@ -0,0 +1,38 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Returns model input_opts given input shape.""" + +import ml_collections + + +def get_receptive_field(kernel_size, num_mixer_layers): + receptive_field = 1 + (num_mixer_layers*2) * 1 * (kernel_size - 1) + return receptive_field + + +def get_input_opts(input_shape, opts): + """Returns input shape dependent model opts.""" + + height, width, channels = input_shape + + input_opts = ml_collections.ConfigDict() + input_opts.patchsize = opts.get('patchsize', 17) + input_opts.height = height + input_opts.width = width + input_opts.channels = channels + input_opts.hpatches = (height - input_opts.patchsize) // opts.stride + 1 + input_opts.wpatches = (width - input_opts.patchsize) // opts.stride + 1 + + return input_opts diff --git a/scenic/projects/boundary_attention/helpers/junction_functions.py b/scenic/projects/boundary_attention/helpers/junction_functions.py new file mode 100644 index 0000000000000000000000000000000000000000..015619532d55376a62ab13924e956d589d0e29e3 --- /dev/null +++ b/scenic/projects/boundary_attention/helpers/junction_functions.py @@ -0,0 +1,424 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Maps Junctions To Images.""" + +import einops +import jax +import jax.numpy as jnp +import ml_collections +from scenic.projects.boundary_attention.helpers import render_junctions + + +class JunctionFunctions(render_junctions.JunctionRenderer): + """Maps Junctions To Images.""" + + def __init__(self, + opts: ml_collections.ConfigDict, + input_opts: ml_collections.ConfigDict): + + # First, define parameters that depend on opts + self.patchmin = opts.patchmin + self.patchmax = opts.patchmax + self.patchsize = opts.patchsize + self.stride = opts.stride + self.num_wedges = opts.num_wedges + self.delta = opts.delta + self.eta = opts.eta + + self.mask_shape = opts.mask_shape + self.jparameterization = opts.jparameterization + self.bparameterization = opts.bparameterization + self.patch_scales = opts.patch_scales + + # Next, define parameters that depend on input_opts + self.height = input_opts.height + self.width = input_opts.width + self.channels = input_opts.channels + self.hpatches = input_opts.hpatches + self.wpatches = input_opts.wpatches + + self.val_features = [1, self.channels, self.height, self.width] + self.val_boundaries = [1, 1, self.height, self.width] + self.patch_density = self.fold(jnp.ones([1, 1, + self.patchsize, self.patchsize, + self.hpatches, self.wpatches]), + self.val_boundaries) + + def unfold(self, + im: jnp.ndarray, + patchsize: int = 17, + stride: int = 1, + ) -> jnp.ndarray: + """Extract patches from an image. + + Args: + im: Array of shape [N, C, H, W] to be unfolded into patches + patchsize: Size of extracted patches + stride: Stride of extracted patches + + Returns: + Array of shape [N, C, R, R, H', W'] containing all extracted patches. + E.g. [k,l,:,:,i,j] is the lth channel of the (i,j)th patch of + the kth image + """ + _, channels, height, width = im.shape + + # Define patchsize and stride and use to calculate the number of patches for + # each axis + patchsize = self.patchsize if patchsize is None else patchsize + stride = self.stride if stride is None else stride + + # If both patchsize and stride are undefined, use default + hpatches = self.hpatches if (patchsize is None) and (stride is None) else ( + (height - patchsize) // stride + 1) + wpatches = self.wpatches if (patchsize is None) and (stride is None) else ( + (width - patchsize) // stride + 1) + + patches = jax.lax.conv_general_dilated_patches(im, + filter_shape=(patchsize, + patchsize), + window_strides=[stride, + stride], + padding='VALID', + dimension_numbers=('NCHW', + 'HWIO', + 'NCHW')) + patches = patches.reshape([-1, channels, patchsize, patchsize, + hpatches, wpatches]) + + return patches + + def fold(self, + unfolded: jnp.ndarray, + output_shape: list[int], + fn: str = 'sum', + stride: int = 1, + ) -> jnp.ndarray: + """Fold patches of an image using function fn. + + Args: + unfolded: Array of shape [N, C, R, R, H', W'] containing all unfolded + patches. + output_shape: Shape of folded array. + fn: Function to fold with (example: mean or mode) + stride: Stride of unfolded patches. + + Returns: + Array of shape [N, C, H, W] + """ + stride = self.stride if stride is None else stride + + kernel_size = (unfolded.shape[2], unfolded.shape[3]) + dilation = (1, 1) + + if isinstance(stride, int): + stride = (stride, stride) + + # Calculate indices for each spatial location + idx_h = jnp.arange(0, output_shape[2] - kernel_size[0] * dilation[0] + 1, + stride[0]) + idx_w = jnp.arange(0, output_shape[3] - kernel_size[1] * dilation[1] + 1, + stride[1]) + + # Create a meshgrid for height and width indices + grid_h, grid_w = jnp.meshgrid(idx_h, idx_w, indexing='ij') + + # Expand dimensions for broadcasting + grid_h = grid_h[None, None, None, :, :] + grid_w = grid_w[None, None, None, :, :] + + # Compute the window indices for height and width + window_h_indices = jnp.arange(0, kernel_size[0] * dilation[0], + dilation[0])[None, :, None, None, None] + window_w_indices = jnp.arange(0, kernel_size[1] * dilation[1], + dilation[1])[None, None, :, None, None] + + # Add the window indices to the grid indices + h_indices = grid_h + window_h_indices + w_indices = grid_w + window_w_indices + + # Compute indices for segment_sum + batch_indices = jnp.arange(output_shape[0] * + output_shape[1])[:, None, None, None, None] + + indices = (batch_indices * output_shape[2] * + output_shape[3] + h_indices * output_shape[3]+ w_indices) + + flattened_indices = indices.flatten() + + # Flatten unfolded array for segment_sum + unfolded_flat = unfolded.flatten() + + if fn == 'sum': + fold_fn = jax.ops.segment_sum + elif fn == 'prod': + fold_fn = jax.ops.segment_prod + elif fn == 'min': + fold_fn = jax.ops.segment_min + elif fn == 'max': + fold_fn = jax.ops.segment_max + else: + # Default to segment sum + fold_fn = jax.ops.segment_sum + + # Use function to accumulate the values + folded_flat = fold_fn(unfolded_flat, flattened_indices, + num_segments=output_shape[0] * output_shape[1] * + output_shape[2] * output_shape[3]) + + # Reshape the result to the original shape + folded = folded_flat.reshape(output_shape) + + return folded + + def local2global(self, + local_features: jnp.ndarray, + patch_density: jnp.ndarray, + stride: int = 1, + ) -> jnp.ndarray: + """Takes feature patches and folds and normalizes to form global features. + + Args: + local_features: Array of shape [N, C, R, R, H', W']. + patch_density: Number of patches that overlap each pixel. + Used for normalization. + stride: Stride of the patches. + + Returns: + jnp.ndarray containing folded global features + """ + + stride = self.stride if stride is None else stride + + batch, channels, patchsize, _, hpatches, wpatches = local_features.shape + + height = hpatches * stride + patchsize - 1 + width = wpatches * stride + patchsize - 1 + + val_outputs = [batch, channels, height, width] + + # Calculate global features and boundaries + global_outputs = self.fold(local_features, val_outputs, + stride=stride)/(patch_density + 1e-5) + + return global_outputs + + def get_avg_wedge_feature(self, + input_features, + global_features, + wedges, + patchsize=None, + stride=None, + lmbda_wedge_mixing=0.0): + """Find smoothed patches of the image along with wedge colors. + + Args: + input_features: Input features with shape [N, C, H, W] + global_features: Current estimate of globally smoothed image with shape + [N, C, H, W] + wedges: Array with shape [N, M, R, R, H', W'] containing rendered wedges + patchsize: Patchsize of each patch. + stride: Patch stride. + lmbda_wedge_mixing: Mixing parameter. Determines how much to weigh current + junction parameters versus new parameter estimates when determining wedge + colors. + + Returns: + patches: Array of shape [N, C, R, R, H', W'] containing wedges with + average feature superimposed + wedge_colors: Array of shape [N, C, M, H', W'] with wedge average feature + for each wedge of each patch + """ + + patchsize = self.patchsize if patchsize is None else patchsize + stride = self.stride if stride is None else stride + + input_feature_patches = self.unfold(input_features, patchsize, stride) + current_global_feature_patches = self.unfold(global_features, patchsize, + stride) + + numerator = (jnp.expand_dims(input_feature_patches + lmbda_wedge_mixing * + current_global_feature_patches, + 2) * jnp.expand_dims(wedges, 1)).sum([3, 4]) + denominator = (1.0 + lmbda_wedge_mixing) * jnp.expand_dims(wedges.sum([2, + 3]), + 1) + + wedge_colors = numerator / (denominator + 1e-10) + + # Fill wedges with optimal colors + patches = jnp.sum(jnp.expand_dims(wedges, 1) * jnp.expand_dims(wedge_colors, + [3, 4]), + axis=2) + + return patches, wedge_colors + + def dist2bdry(self, dist_boundaries, delta=None): + """Convert a distance map into a boundary map.""" + + delta = self.delta if delta is None else delta + + return 1 / (1 + (dist_boundaries/delta)**2) + + def make_square_patch_masks(self, rf_size, patchsize=None): + """Make square patch masks.""" + + patchsize = self.patchsize if patchsize is None else patchsize + + xy = jnp.linspace(-jnp.floor((patchsize-1)/2), jnp.floor((patchsize-1)/2), + patchsize) + xlim, ylim = jnp.meshgrid(xy, xy) + mask = jnp.where((jnp.abs(xlim) < rf_size/2) & + (jnp.abs(ylim) < rf_size/2), 1, 0) + + return mask + + def make_circle_patch_masks(self, rf_size, patchsize=None): + """Make circle patch masks.""" + + patchsize = self.patchsize if patchsize is None else patchsize + + xy = jnp.linspace(-jnp.floor((patchsize-1)/2), jnp.floor((patchsize-1)/2), + patchsize) + + xlim, ylim = jnp.meshgrid(xy, xy) + mask = jnp.where(jnp.sqrt(xlim**2 + ylim**2) <= rf_size/2, 1, 0) + + return mask + + def get_scale_masks(self, scales, mask_shape=None, patchsize=None): + """Get scale masks for patches with variable patchsizes.""" + + mask_shape = self.mask_shape if mask_shape is None else mask_shape + patchsize = self.patchsize if patchsize is None else patchsize + + if mask_shape == 'square': + flat_scale = einops.rearrange(scales, 'n f h w -> (n h w) f') + masks = jax.vmap(self.make_square_patch_masks, in_axes=(0, None), + out_axes=0)(flat_scale, patchsize) + masks = einops.rearrange(masks, '(n h w) i j -> n i j h w', + n=scales.shape[0], h=scales.shape[2], + w=scales.shape[3]) + + elif mask_shape == 'circle': + flat_scale = einops.rearrange(scales, 'n f h w -> (n h w) f') + masks = jax.vmap(self.make_circle_patch_masks, in_axes=(0, None), + out_axes=0)(flat_scale, patchsize) + masks = einops.rearrange(masks, '(n h w) i j -> n i j h w', + n=scales.shape[0], h=scales.shape[2], + w=scales.shape[3]) + + else: + raise NotImplementedError('%s not a valid mask shape') % mask_shape + + return masks + + def get_patch_density_and_masks(self, scales, mask_shape=None, patchsize=None, + height=None, width=None): + """Get patch density and masks.""" + + height = self.height if height is None else height + width = self.width if width is None else width + patchsize = self.patchsize if patchsize is None else patchsize + mask_shape = self.mask_shape if mask_shape is None else mask_shape + + scale_masks = self.get_scale_masks(scales, mask_shape, patchsize) + + return scale_masks, self.fold(scale_masks, [scale_masks.shape[0], + scale_masks.shape[1], height, + width]) + + def get_alpha_omega_vertex(self, jparams, jparameterization=None, + num_wedges=None): + """Maps output of model to alpha, omega, vertex.""" + + num_wedges = self.num_wedges if num_wedges is None else num_wedges + jparameterization = self.jparameterization if (jparameterization is + None) else jparameterization + + if jparameterization == 'standard': + # default parameterization: (cos(alpha), sin(alpha), omega1, omega2, + # omega3, u, v)) + alpha = jnp.expand_dims(jnp.arctan2(jparams[..., 1], jparams[..., 0]), 1) + omega = jparams[..., 2:num_wedges+2].transpose(0, -1, 1, 2) + vertex = jparams[..., num_wedges+2:].transpose(0, -1, 1, 2) + + # Normalize omega + omega = omega*(2*jnp.pi)/jnp.expand_dims(jnp.sum(omega, 1), 1) + else: + raise NotImplementedError('%s not a valid parameterization.' + '' % jparameterization) + + return alpha, omega, vertex + + def jparams2patches(self, jparams, jparameterization=None, num_wedges=None, + patchmin=None, patchmax=None, patchsize=None, delta=None, + eta=None): + """Render boundary and wedge patches.""" + + jparameterization = self.jparameterization if (jparameterization is + None) else jparameterization + num_wedges = self.num_wedges if num_wedges is None else num_wedges + patchmin = self.patchmin if patchmin is None else patchmin + patchmax = self.patchmax if patchmax is None else patchmax + patchsize = self.patchsize if patchsize is None else patchsize + delta = self.delta if delta is None else delta + eta = self.eta if eta is None else eta + + alpha, omega, vertex = self.get_alpha_omega_vertex(jparams, + jparameterization, + num_wedges) + + return self.get_local_maps(alpha, omega, vertex, patchmin, patchmax, + patchsize, delta=delta, eta=eta) + + def get_local_maps(self, alpha, omega, vertex, patchmin=None, patchmax=None, + patchsize=None, delta=None, eta=None): + """Render boundary and wedge patches.""" + + patchmin = self.patchmin if patchmin is None else patchmin + patchmax = self.patchmax if patchmax is None else patchmax + patchsize = self.patchsize if patchsize is None else patchsize + delta = self.delta if delta is None else delta + eta = self.eta if eta is None else eta + + padding = [(0, 0)] + [(1, 0)] + [(0, 0)] + [(0, 0)] + + # Compute wedge central angles + centralangles = jnp.expand_dims(alpha + + omega/2 + + jnp.pad(jnp.cumsum(omega, + axis=1)[:, :-1, ...], + padding), (2, 3)) + + # Compute wedge angles + wedgeangles = jnp.expand_dims(omega*(2*jnp.pi)/ + jnp.expand_dims(jnp.sum(omega, 1), 1), (2, 3)) + + # Compute wedge boundary angles + boundaryangles = jnp.expand_dims(alpha + + jnp.pad(jnp.cumsum(omega, + axis=1)[:,:-1, ...], + padding), (2, 3)) + + # Render and return boundary and feature patches + feature_patches = self.render_wedges(vertex, centralangles, wedgeangles, + patchmin, patchmax, patchsize, eta) + distance_patches = self.render_distance(vertex, boundaryangles, patchmin, + patchmax, patchsize) + boundary_patches = self.render_boundaries(vertex, boundaryangles, patchmin, + patchmax, patchsize, delta) + + return feature_patches, distance_patches, boundary_patches diff --git a/scenic/projects/boundary_attention/helpers/params2maps.py b/scenic/projects/boundary_attention/helpers/params2maps.py new file mode 100644 index 0000000000000000000000000000000000000000..09fefc07fb19c185b2819232b25e46dc74ac07bf --- /dev/null +++ b/scenic/projects/boundary_attention/helpers/params2maps.py @@ -0,0 +1,89 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Maps Junction Parameters to Images.""" +import jax.numpy as jnp +import ml_collections +from scenic.projects.boundary_attention.helpers import junction_functions + + +class Params2Maps(junction_functions.JunctionFunctions): + """Maps Junction Parameters to Images.""" + + def __call__(self, + jparams: jnp.ndarray, + patchsize_distribution: jnp.ndarray, + img: jnp.ndarray, + global_features: jnp.ndarray, + train_opts: ml_collections.ConfigDict) -> dict[str, jnp.ndarray]: + + if patchsize_distribution is not None: + scales = jnp.expand_dims(jnp.array(self.patch_scales), (0, 1, 2)) + all_patch_masks = jnp.expand_dims( + self.get_scale_masks(scales, self.mask_shape), axis=(1, 4) + ) + all_patch_masks = jnp.mean( + all_patch_masks * jnp.expand_dims(patchsize_distribution, (1, 2, 3)), + axis=-1, + ) + + patch_density = self.fold( + all_patch_masks, + [patchsize_distribution.shape[0], 1, self.height, self.width], + ) + else: + all_patch_masks = 1 + patch_density = self.patch_density + + local_wedges, local_distance_branches, local_boundary_branches = ( + self.jparams2patches( + jparams, delta=train_opts.delta, eta=train_opts.eta + ) + ) + + # Apply patch masks + masked_local_wedges = local_wedges*all_patch_masks + masked_distance_patches = local_distance_branches * all_patch_masks + masked_boundary_patches = local_boundary_branches * all_patch_masks + + # Find image patches, wedge_colors, and global_image + feature_patches, wedge_colors = self.get_avg_wedge_feature( + img, + global_features, + masked_local_wedges, + lmbda_wedge_mixing=train_opts.lmbda_wedge_mixing + ) + + # Make global maps from patches + all_patches = jnp.concatenate([feature_patches, masked_distance_patches, + masked_boundary_patches], axis=1) + global_maps = self.local2global(all_patches, patch_density) + + # Split into individual maps + global_features, global_distances, global_boundaries = jnp.split( + global_maps, [self.channels, self.channels + 1], axis=1 + ) + + return dict(jparams=jparams, + patchsize_distribution=patchsize_distribution, + global_features=global_features, + global_distances=global_distances, + global_boundaries=global_boundaries, + feature_patches=feature_patches, + distance_patches=masked_distance_patches, + boundary_patches=masked_boundary_patches, + wedge_colors=wedge_colors, + wedges=local_wedges, + patch_masks=all_patch_masks, + patch_density=patch_density) diff --git a/scenic/projects/boundary_attention/helpers/perlin_noise.py b/scenic/projects/boundary_attention/helpers/perlin_noise.py new file mode 100644 index 0000000000000000000000000000000000000000..613dee9d80eb8ff3541d3e172b93b4288799c0b5 --- /dev/null +++ b/scenic/projects/boundary_attention/helpers/perlin_noise.py @@ -0,0 +1,60 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Perlin Noise.""" +import math +import tensorflow as tf + + +def lerp_np(x, y, w): + fin_out = (y - x) * w + x + return fin_out + + +def rand_perlin_2d_tf(shape, res): + """Perlin noise implementation in tensorflow.""" + def f(t): + return 6 * t**5 - 15 * t**4 + 10 * t**3 + + delta = (tf.cast(res[0] / shape[0], + tf.float32), tf.cast(res[1] / shape[1], tf.float32)) + d = (shape[0] // res[0], shape[1] // res[1]) + grid = tf.transpose( + tf.stack( + tf.meshgrid( + tf.range(0, res[1], delta[1]), + tf.range(0, res[0], delta[0]))[::-1], axis=0), (1, 2, 0)) % 1 + # Gradients + angles = 2 * math.pi * tf.random.uniform((res[0] + 1, res[1] + 1)) + gradients = tf.stack((tf.cos(angles), tf.sin(angles)), axis=-1) + g00 = tf.repeat(tf.repeat(gradients[0:-1, 0:-1], d[0], 0), d[1], 1) + g10 = tf.repeat(tf.repeat(gradients[1:, 0:-1], d[0], 0), d[1], 1) + g01 = tf.repeat(tf.repeat(gradients[0:-1, 1:], d[0], 0), d[1], 1) + g11 = tf.repeat(tf.repeat(gradients[1:, 1:], d[0], 0), d[1], 1) + + # Ramps + n00 = tf.reduce_sum(grid * g00, 2) + n10 = tf.reduce_sum( + tf.stack((grid[:, :, 0] - 1, grid[:, :, 1]), axis=-1) * g10, 2) + n01 = tf.reduce_sum( + tf.stack((grid[:, :, 0], grid[:, :, 1] - 1), axis=-1) * g01, 2) + n11 = tf.reduce_sum( + tf.stack((grid[:, :, 0] - 1, grid[:, :, 1] - 1), axis=-1) * g11, 2) + + # Interpolation + t = f(grid) + n0 = n00 * (1 - t[:, :, 0]) + t[:, :, 0] * n10 + n1 = n01 * (1 - t[:, :, 0]) + t[:, :, 0] * n11 + return tf.sqrt(2.0) * ((1 - t[:, :, 1]) * n0 + t[:, :, 1] * n1) + diff --git a/scenic/projects/boundary_attention/helpers/render_junctions.py b/scenic/projects/boundary_attention/helpers/render_junctions.py new file mode 100644 index 0000000000000000000000000000000000000000..5bf6e7467e7ab3aa80e6a195ae540870ba3909aa --- /dev/null +++ b/scenic/projects/boundary_attention/helpers/render_junctions.py @@ -0,0 +1,174 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Renders the junctions of the wedge support and distance maps.""" + +import jax.numpy as jnp + + +class JunctionRenderer: + """Renders the junctions of the wedge support and distance maps.""" + + def render_wedges(self, + vertex: jnp.ndarray, + centralangles: jnp.ndarray, + wedgeangles: jnp.ndarray, + patchmin: float, + patchmax: float, + patchres: int, + eta: float) -> jnp.ndarray: + """Render an integer-valued image of the wedge supports over a square patch. + + Args: + vertex: Array of shape [N, 2, H, W] containing the u and v coordinates + of vertices + centralangles: Array of shape [N, 3, H, W] containing the three central + angles (wedge directions) + wedgeangles: Array of shape [N, 3, H, W] containing the three wedge angles + that sum to 2*pi + patchmin: Minimum value of the patch + patchmax: Maximum value of the patch + patchres: Size of the patch in pixels + eta: Array of shape [N, 1] containing the angular speed of the wedge + support + + Returns: + Array of shape [N, M, R, R, H, W] + """ + + # coordinate grid of pixel locations + yt = jnp.expand_dims(jnp.expand_dims(jnp.linspace(patchmin, + patchmax, + patchres), + -1), (0, 1, 4, 5)) + xt = jnp.expand_dims(jnp.expand_dims(jnp.linspace(patchmin, + patchmax, + patchres), + 0), (0, 1, 4, 5)) + + x0 = jnp.expand_dims(vertex[:, 0, ...], (1, 2, 3)) + y0 = jnp.expand_dims(vertex[:, 1, ...], (1, 2, 3)) + + cos_ca = jnp.cos(centralangles) + sin_ca = jnp.sin(centralangles) + + x = ((xt - x0) * cos_ca + + (yt - y0) * sin_ca - + jnp.cos(wedgeangles/2) * jnp.sqrt((xt - x0)**2 + (yt - y0)**2)) + + x = 0.5 * (1.0 + (2.0 / jnp.pi) * jnp.arctan(x / eta)) + x = x/jnp.sum(x, axis=1, keepdims=True) + + return x + + def render_distance(self, + vertex: jnp.ndarray, + boundaryangles: jnp.ndarray, + patchmin: float, + patchmax: float, + patchres: int): + """Render a distance map over a square patch. + + Args: + vertex: Array of shape [N, 2, H, W] containing the u and v coordinates + of the vertices + boundaryangles: Array of shape [N, 3, H, W] containing the three boundary + angles (boundary-ray directions) + patchmin: Minimum value of the patch + patchmax: Maximum value of the patch + patchres: Size of the patch + + Returns: + Array of shape [N, 1, R, R, H, W] + """ + + # coordinate grid of pixel locations + yt = jnp.expand_dims(jnp.expand_dims(jnp.linspace(patchmin, + patchmax, + patchres), + -1), + (0, 1, 4, 5)) + xt = jnp.expand_dims(jnp.expand_dims(jnp.linspace(patchmin, + patchmax, + patchres), + 0), + (0, 1, 4, 5)) + + x0 = jnp.expand_dims(vertex[:, 0, ...], (1, 2, 3)) + y0 = jnp.expand_dims(vertex[:, 1, ...], (1, 2, 3)) + + cos_ba = jnp.cos(boundaryangles) + sin_ba = jnp.sin(boundaryangles) + + distance_branches = jnp.where(0 < ((xt - x0)*cos_ba + (yt - y0)*sin_ba), + jnp.abs(-(xt - x0)*sin_ba + (yt - y0)*cos_ba), + jnp.sqrt((xt - x0)**2 + (yt - y0)**2)) + + # final distance is minimum over arms, expanded to [N, 1, R, R, H, W] + distance = jnp.min(distance_branches, + axis=1, keepdims=True)*(patchres/(patchmax-patchmin)) + + return distance + + def render_distance_tf(self, boundary_branches): + return boundary_branches + + def render_boundaries(self, + vertex: jnp.ndarray, + boundaryangles: jnp.ndarray, + patchmin: float, + patchmax: float, + patchres: int, + delta: float = 0.005): + """Render an image of the wedge boundaries over a square patch. + + Args: + vertex: Array of shape [N, 2, H, W] containing the u and v coordinates + of the vertices + boundaryangles: Array of shape [N, 3, H, W] containing the three boundary + angles (boundary-ray directions) + patchmin: Minimum value of the patch + patchmax: Maximum value of the patch + patchres: Size of the patch + delta: Delta value of the patch + + Returns: + Array of shape [N, 1, R, R, H, W] + """ + # coordinate grid of pixel locations + yt = jnp.expand_dims(jnp.expand_dims(jnp.linspace(patchmin, + patchmax, + patchres), -1), + (0, 1, 4, 5)) + xt = jnp.expand_dims(jnp.expand_dims(jnp.linspace(patchmin, + patchmax, + patchres), 0), + (0, 1, 4, 5)) + + x0 = jnp.expand_dims(vertex[:, 0, ...], (1, 2, 3)) + y0 = jnp.expand_dims(vertex[:, 1, ...], (1, 2, 3)) + + cos_ba = jnp.cos(boundaryangles) + sin_ba = jnp.sin(boundaryangles) + + # Use [1 / (1 + (x/opts.delta)**2 )] for the relaxed dirac distribution + x = ((xt - x0)*cos_ba + (yt - y0)*sin_ba - + jnp.sqrt((xt - x0)**2 + (yt - y0)**2)) + r = ((xt - x0)**2 + (yt - y0)**2)**(.5) + + patches = 1.0 / (1.0 + ((x * r) / delta)**2) + + standard_boundaries = jnp.max(patches, axis=1, keepdims=True) + + return standard_boundaries diff --git a/scenic/projects/boundary_attention/helpers/test_new_images.py b/scenic/projects/boundary_attention/helpers/test_new_images.py new file mode 100644 index 0000000000000000000000000000000000000000..3c647b775c3465041fbac2b635a79176e77e75f6 --- /dev/null +++ b/scenic/projects/boundary_attention/helpers/test_new_images.py @@ -0,0 +1,70 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Code to test Boundary Attention on new images.""" + +import pickle + +from absl import app +from absl import flags +import matplotlib.pyplot as plt +import numpy as np +import PIL +from scenic.projects.boundary_attention.configs import base_config +from scenic.projects.boundary_attention.helpers import train_utils +from scenic.projects.boundary_attention.helpers import viz_utils +from tensorflow.io import gfile + + +flags.DEFINE_integer('height', 216, 'Height of input.') +flags.DEFINE_integer('width', 216, 'Width of input.') +flags.DEFINE_integer('rng_seed', 0, 'Rng seed.') +flags.DEFINE_string('weights_dir', None, 'Weights directory.') +flags.DEFINE_string('img_path', None, 'Image path.') +flags.DEFINE_string('save_path', None, 'Save output path.') +flags.DEFINE_bool('save_raw_output', False, 'Save raw output.') + +FLAGS = flags.FLAGS + + +def main(argv): + del argv + + config = base_config.get_config(model_name='boundary_attention', + dataset_name='testing', + input_size=(FLAGS.height, FLAGS.width, 3)) + + apply_jitted, trained_params = train_utils.make_apply(config, + FLAGS.weights_dir) + + im_real = np.array( + PIL.Image.open( + gfile.GFile(FLAGS.img_path, + 'rb')).resize((FLAGS.height, FLAGS.width))) / 255.0 + + im_use = np.expand_dims(im_real.transpose(2, 0, 1)[:3, :, :], axis=0) + + outputs = apply_jitted(trained_params['params'], im_use) + + viz_utils.visualize_outputs(im_use, outputs) + + plt.savefig(gfile.GFile(FLAGS.save_path + '/output.png', 'wb'), format='png') + + if FLAGS.save_raw_output: + pickle.dump(outputs, + gfile.GFile(FLAGS.save_path + '/raw_output.pkl', 'wb')) + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/boundary_attention/helpers/train_utils.py b/scenic/projects/boundary_attention/helpers/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..22e636688d896953a52240fbfc93f438ddf1f80f --- /dev/null +++ b/scenic/projects/boundary_attention/helpers/train_utils.py @@ -0,0 +1,99 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utility functions for training.""" + +import functools + +from flax.training import checkpoints +from flax.training import train_state +import jax +from scenic.projects.boundary_attention.models import boundary_attention + + +def make_apply(config, ckpt_dir): + """Make jitted apply function and load trained params.""" + + model = boundary_attention.BoundaryAttention(config=config, + dataset_metadata={}, + ).build_flax_model() + + apply_jitted = jax.jit(functools.partial(model.apply, + train=False)) + + # Load Parameters + trained_params = checkpoints.restore_checkpoint(ckpt_dir=ckpt_dir, + target=None)['params'] + + return apply_jitted, {'params': trained_params} + + +class TrainState(train_state.TrainState): + key: jax.Array + + +def initialize_model_params(model, batch, params_key): + """Initialize model parameters.""" + params = jax.jit(functools.partial(model.init, train=False))( + params_key, **batch + ) + + param_count = sum(p.size for p in jax.tree_util.tree_flatten(params)[0]) + print('Total Number of Learnable Parameters=', param_count) + + return params + + +def count_model_params(params): + """Count number of parameters.""" + param_count = sum(p.size for p in jax.tree_util.tree_flatten(params)[0]) + print('Total Number of Learnable Parameters=', param_count) + + return param_count + + +def load_saved_state(ckpt_dir, state, what_use, step_use=-1): + """Load model parameters.""" + + if what_use == 'xm': + if step_use == -1: + temp = checkpoints.restore_checkpoint(ckpt_dir=ckpt_dir, target=None) + else: + temp = checkpoints.restore_checkpoint( + ckpt_dir=ckpt_dir, target=None, step=step_use + ) + + state = state.replace(params={'params': temp['params']}) + + return state, temp + + elif what_use == 'flax': + if step_use == -1: + state = checkpoints.restore_checkpoint(ckpt_dir=ckpt_dir, target=state) + else: + state = checkpoints.restore_checkpoint( + ckpt_dir=ckpt_dir, target=state, step=step_use + ) + + return state + + else: + if step_use == -1: + state = checkpoints.restore_checkpoint(ckpt_dir=ckpt_dir, target=state) + else: + state = checkpoints.restore_checkpoint( + ckpt_dir=ckpt_dir, target=state, step=step_use + ) + + return state diff --git a/scenic/projects/boundary_attention/helpers/viz_utils.py b/scenic/projects/boundary_attention/helpers/viz_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..7039a8836111b01fd0792aac7b6983eeaf0817e6 --- /dev/null +++ b/scenic/projects/boundary_attention/helpers/viz_utils.py @@ -0,0 +1,281 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for visualization.""" + +import einops +import jax.numpy as jnp +from matplotlib import colors +import matplotlib.pyplot as plt + + +def visualize_outputs(input_image, outputs, num_levels=8): + """Script to visualize the outputs of the network.""" + + my_pubu = plt.get_cmap('PuBu')(jnp.arange(plt.get_cmap('PuBu').N)) + my_pubu[:, 0:3] *= 0.7 + my_pubu = colors.ListedColormap(my_pubu) + + # Crop the outputs to account for boundary effects + global_distances = outputs[-1]['global_distances'].squeeze()[8:-8, 8:-8] + jn_levels = jnp.linspace(0, jnp.max(global_distances), num_levels) + + # Define mesh of pixel coordinates in width x height + xymesh = jnp.meshgrid(jnp.arange(0.5, global_distances.shape[1] + 0.5, 1.0), + jnp.arange(0.5, global_distances.shape[0] + 0.5, 1.0)) + + # Threshold output boundaries + output_boundaries = (outputs[-1]['global_boundaries'].squeeze() * ( + outputs[-1]['global_boundaries'].squeeze() > .3))[8:-8, 8:-8] + output_features = outputs[-1]['global_features'].squeeze( + ).transpose(1, 2, 0)[8:-8, 8:-8, :] + + plt.figure(figsize=(20, 10)) + plt.subplot(141) + plt.imshow(input_image.squeeze().transpose(1, 2, 0)[8:-8, 8:-8]) + plt.axis('off') + plt.subplot(142) + plt.imshow(global_distances, cmap='PuBu') + plt.contour(xymesh[0], + xymesh[1], + global_distances, + levels=jn_levels, + cmap=my_pubu) + plt.axis('off') + plt.subplot(143) + plt.imshow(output_boundaries, cmap='gray') + plt.axis('off') + plt.subplot(144) + plt.imshow(output_features) + plt.axis('off') + plt.tight_layout() + plt.show() + + +def make_weight_map(params2maps, yc, xc, patchres, height, width, hpatches, + wpatches, wedges, crop=False): + """Make a weight map for a given pixel. + + Args: + params2maps: a map of params to maps + yc: y coordinate + xc: x coordinate + patchres: patch resolution + height: height + width: width + hpatches: number of patches + wpatches: number of patches + wedges: wedges + crop: whether to crop the image + + Returns: + A weight map for the pixel + """ + + # This defines where the query pixel is located depending on which patch it + # belongs to + x, y = jnp.meshgrid(jnp.arange(patchres-1, -1, -1), + jnp.arange(patchres-1, -1, -1)) + + # This is the patch for each pixel + p_yc_range = jnp.minimum(jnp.maximum(yc - y, 0), hpatches).astype(int) + p_xc_range = jnp.minimum(jnp.maximum(xc - x, 0), wpatches).astype(int) + + # Make a binary indicator array indicating whether wedge m contains pixel + # [xc, yc] + bin_ind = jnp.zeros_like(wedges) + bin_array = bin_ind.at[:, :, :, :, p_yc_range, + p_xc_range].set(jnp.expand_dims( + wedges[:, :, y, x, p_yc_range, p_xc_range], + (2, 3))) + + bin_array = jnp.sum(bin_array * wedges, axis=1, keepdims=True) + binary_wedge_map = params2maps.fold(bin_array, + (1, 1, height, width)).squeeze() + binary_wedge_map = binary_wedge_map/jnp.max(binary_wedge_map) + + if crop: + binary_wedge_map_padded = jnp.pad(binary_wedge_map, + ((patchres, patchres), + (patchres, patchres))) + binary_wedge_map = binary_wedge_map_padded[yc:yc+patchres*2, + xc:xc+patchres*2] + + return binary_wedge_map + + +def patchstack(patches, border=2, padvalue=0.0): + """Stack field of patches into one large image. + + Args: + patches: a tensor of patches + border: space (in pixels) between neighboring patches (integer) + padvalue: value to fill space with + + Returns: + A tensor of stacked patches + """ + + assert border % 2 == 0, f'border must be even (but got {border})' + + # Pad 3rd and 4th to last dimensions with border//2 pixels valued `padvalue`. + padamt = ((0, 0), + (0, 0), + (border//2, border//2), + (border//2, border//2), + (border//2, border//2), + (border//2, border//2)) + + padded = jnp.pad(patches, padamt, mode='constant', constant_values=padvalue) + + output = einops.rearrange(padded, 'b c p1 p2 hp wp -> b (hp p1) (wp p2) c') + + return output + + +def image_to_uint8(float_image: jnp.ndarray, mean=None, stddev=None): + """Converts a float image to uint8. Also un-whitens the image, if needed.""" + if stddev is not None: + float_image = float_image * stddev + if mean is not None: + float_image = float_image + mean + if mean is None and stddev is None: + float_image = float_image * 255. + float_image = jnp.round(jnp.clip(float_image, 0., 255.)) + return float_image.astype(jnp.uint8) + + +def get_viz_dict_from_batch(batch, model_outputs, model, name, + num_image_summaries=16): + """Get a dictionary of images to be written to disk. + + Args: + batch: a batch of data + model_outputs: a dictionary of model outputs + model: a model + name: a string + num_image_summaries: number of image summaries to generate + + Returns: + Arrays containing different visualizations. + """ + def get_images(config, model_outputs, im_num, ii, sbatch): + + if config.model_name == 'deformable_boundary_attention_v0' or ( + config.model_name == 'deformable_boundary_attention') or ( + config.model_name == 'boundary_attention'): + + global_features = model_outputs[ii]['global_features'][sbatch, + im_num, ...] + global_distances = model_outputs[ii]['global_distances'][sbatch, + im_num, ...] + global_distances = global_distances/jnp.max(global_distances, + axis=(2, 3), keepdims=True) + global_boundaries = model_outputs[ii]['global_boundaries'][sbatch, + im_num, ...] + output_pred_scales = model_outputs[ii]['patchsize_distribution'][sbatch, + im_num, + ...] + else: + raise NotImplementedError('Need to define visualization for model.') + + return global_distances, global_boundaries, global_features, ( + output_pred_scales) + + # accumulate image dictionary + num_image_summaries = min(num_image_summaries, batch['image'].shape[1]) + + num_iters_plot = min(3, len(model_outputs)) + iters = jnp.linspace(-num_iters_plot, + -num_iters_plot+num_iters_plot-1, + num_iters_plot).astype(int) + sbatch = jnp.arange(1) + + write_images = {} + for nn in range(num_image_summaries): + for ii in iters: + + token_name = '%s_sample%d_iter%d' % (name, nn, ii) + + # (shard_batch, iter, scale, batch, feature, H, W) + input_opts = model.config.model.input_opts + + input_image = (batch['image'][sbatch, nn, ...]) + input_boundaries = (batch['boundaries'][sbatch, nn, ...]) + input_boundaries = input_boundaries/jnp.max(input_boundaries, + axis=(2, 3), keepdims=True) + input_distances = (batch['distances'][sbatch, nn, ...]) + input_distances = input_distances/jnp.max(input_distances, + axis=(2, 3), keepdims=True) + + global_distances, global_boundaries, global_features, ( + output_pred_scales) = get_images(model.config, model_outputs, nn, + ii, sbatch) + + # White out the border pixels + # Make border pixles + border_template = jnp.ones_like(global_distances) + hps = input_opts.patchsize // 2 + border_template = border_template.at[:, :, hps, hps:-hps].set(0) + border_template = border_template.at[:, :, -hps, hps:-hps].set(0) + border_template = border_template.at[:, :, hps:-hps, hps].set(0) + border_template = border_template.at[:, :, hps:-hps, -hps].set(0) + + input_image = input_image*border_template + (1-border_template) + input_boundaries = input_boundaries*border_template + ( + 1-border_template) + input_distances = input_distances*border_template + ( + 1-border_template) + output_distances = global_distances*border_template + ( + 1-border_template) + output_boundaries = global_boundaries*border_template + ( + 1-border_template) + output_global_features = global_features*border_template + ( + 1- border_template) + + # frames + write_images['%s/input_image' % token_name] = ( + image_to_uint8(input_image.transpose(0, 2, 3, 1))) + write_images['%s/input_boundaries' % token_name] = ( + image_to_uint8(input_boundaries.transpose(0, 2, 3, 1))) + write_images['%s/input_distances' % token_name] = ( + image_to_uint8(input_distances.transpose(0, 2, 3, 1))) + write_images['%s/output_distances' % token_name] = ( + image_to_uint8(output_distances.transpose(0, 2, 3, 1))) + write_images['%s/output_boundaries' % token_name] = ( + image_to_uint8(output_boundaries.transpose(0, 2, 3, 1))) + write_images['%s/output_global_features' % token_name] = ( + image_to_uint8(output_global_features.transpose(0, 2, 3, 1))) + + if output_pred_scales is not None: + all_data = [] + for jj in range(output_pred_scales.shape[0]): + fig = plt.figure() + plt.imshow(output_pred_scales[jj]) + plt.axis('off') + plt.colorbar(fraction=0.046, pad=0.04, shrink=.95) + fig.tight_layout(pad=0) + fig.canvas.draw() + plt.close(fig) + + data = jnp.frombuffer(fig.canvas.tostring_rgb(), dtype=jnp.uint8) + data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,)) + + all_data.append(data) + + write_images['%s/output_pred_scale' % token_name] = ( + jnp.stack(all_data, axis=0)) + + return write_images + diff --git a/scenic/projects/boundary_attention/kaleidoshapes/README.md b/scenic/projects/boundary_attention/kaleidoshapes/README.md new file mode 100644 index 0000000000000000000000000000000000000000..4a1d167cfc0d014f6cd0d1bc47517c554cdfece2 --- /dev/null +++ b/scenic/projects/boundary_attention/kaleidoshapes/README.md @@ -0,0 +1,86 @@ +## Kaleidoshapes + + + +### [Project Page](https://boundaryattention.github.io) | [arXiv](https://arxiv.org/abs/2401.00935) + +### Download + +To download kaleidoshapes, install the [gcloudCLI](https://cloud.google.com/sdk/docs/install-sdk) and then use: + +```shell +# Make new directory to store dataset +mkdir scenic/boundary_attention/kaleidoshapes_dataset + +# Copy dataset to directory +gsutil cp -r gs://scenic-bucket/boundary_attention/kaleidoshapes/ scenic/boundary_attention/kaleidoshapes_dataset +``` + +### Quick Start + +Begin by installing Scenic and Boundary Attention using the instructions provided by the [Boundary Attention main page]('https://github.com/google-research/scenic/tree/main/scenic/projects/boundary_attention'). + +Then, install any additional dependencies: + +```bash +pip install -r scenic/projects/boundary_attention/kaleidoshapes/requirements.txt +``` + +You can load kaleidoshapes with the following command: + +```python +import tensorflow_datasets as tfds +import scenic.projects.boundary_attention.kaleidoshapes.kaleidoshapes + +kaleidoshapes_dir = '' # Add path to kaleidoshapes here +kaleidoshapes_dataset = tfds.load('kaleidoshapes', data_dir=kaleidoshapes_dir, download=False) +``` + +Note that this loads the original, noiseless images. To crop the images to `125x125` and add noise use: + +```python +import ml_collections +import jax + +from scenic.projects.boundary_attention.dataset_lib import dataloader +from scenic.projects.boundary_attention.configs import kaleidoshapes_config +from scenic.projects.boundary_attention.dataset_lib.datasets import kaleidoshapes_dataset + +batch_size = 5 +rng_seed = 0 +kaleidoshapes_dir = '' # Add directory here + +config = ml_collections.ConfigDict() +config.dataset = kaleidoshapes_config.get_config_kaleidoshapes(kaleidoshapes_dir) +# You can adjust the dataset here, as an example: +# config.dataset.crop_size = (150, 150, 3) +config.batch_size = batch_size +config.eval_batch_size = batch_size + +kaleidoshapes_dataset = dataloader.get_dataloader(config, jax.random.PRNGKey(rng_seed)) + +example_batch = next(kaleidoshapes_dataset.train_iter) +``` + +### Dataset Generation + +To generate an entire dataset, modify the parameters defined at the top of `kaleidoshapes.py` and then run: + +```bash +tfds build scenic/projects/boundary_attention/kaleidoshapes/kaleidoshapes.py \ + --register_checksums \ + --data_dir=workdir/ \ +``` + +To generate a single image and visualize with jupyter or colab, you can use: + +```python +import matplotlib.pyplot as plt +from scenic.projects.boundary_attention.kaleidoshapes import make_kaleido_image, kaleidoshapes, plot_image + +config = kaleidoshapes.ShapesConfig() +ex_image = make_kaleido_image.generate_image(0, config) + +# Finally, visualize the output +plot_image.plot_image(ex_image) +``` diff --git a/scenic/projects/boundary_attention/kaleidoshapes/__init__.py b/scenic/projects/boundary_attention/kaleidoshapes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/boundary_attention/kaleidoshapes/checksums.tsv b/scenic/projects/boundary_attention/kaleidoshapes/checksums.tsv new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/boundary_attention/kaleidoshapes/kaleidoshapes.py b/scenic/projects/boundary_attention/kaleidoshapes/kaleidoshapes.py new file mode 100644 index 0000000000000000000000000000000000000000..1877cacb9a049b300bef51b65f4d2be608c11471 --- /dev/null +++ b/scenic/projects/boundary_attention/kaleidoshapes/kaleidoshapes.py @@ -0,0 +1,193 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset builder for Kaleidoshapes dataset.""" + +import functools + +import numpy as np +from scenic.projects.boundary_attention.kaleidoshapes import make_kaleido_image +import tensorflow as tf +import tensorflow_datasets as tfds + +_BASE_DIR = '' +_MIN_OBJECTS = 15 +_MAX_OBJECTS = 20 +_BOUNDARY_WIDTH = 0.001 +_MIN_RADIUS = 0.0 +_MAX_RADIUS = 0.2 +_MIN_TRIANGLE_BASE = 0.02 +_MAX_TRIANGLE_BASE = 0.5 +_MIN_TRIANGLE_HEIGHT = 0.02 +_MAX_TRIANGLE_HEIGHT = 0.3 +_MIN_VISIBILITY = 0.005 +_IMAGE_HEIGHT = 240 +_IMAGE_WIDTH = 320 +_PROB_CIRCLE = 0.4 +_NUM_IMAGES = 100_000 + + +class ShapesConfig: + """Configuration for Kaleidoshapes dataset.""" + + def __init__(self): + + # bounds on number of objects in an image + self.min_objects = _MIN_OBJECTS + self.max_objects = _MAX_OBJECTS + + # bounds on object sizes and locations, as percentage of maximum image + # dimension + # all objects must be at least this far from the image boundary + self.boundary_width = _BOUNDARY_WIDTH + + # circle bounds + self.min_radius = _MIN_RADIUS + self.max_radius = _MAX_RADIUS + + # triangle bounds + self.min_triangle_height = _MIN_TRIANGLE_HEIGHT + self.max_triangle_height = _MAX_TRIANGLE_HEIGHT + + self.min_triangle_base = _MIN_TRIANGLE_BASE + self.max_triangle_base = _MAX_TRIANGLE_BASE + + # threshold for a shape being "visible", as fraction of total (normalized) + # image area + self.min_visibility = _MIN_VISIBILITY + + self.image_height = _IMAGE_HEIGHT + self.image_width = _IMAGE_WIDTH + + self.prob_circle = _PROB_CIRCLE + + self.num_images = _NUM_IMAGES + + +_DESCRIPTION = """ +The KaleidoShapes dataset. +""" + +_CITATION = """ +@inproceedings{KaleidoShapes, + author = {Todd Zickler, Mia Polansky}, + title = {KaleidoShapes: A repository of colorful multi-object images + segmentation and boundary detection}, + year = {2023} +} +""" + + +def flatten(nested_list): + for item in nested_list: + yield item + + +class Kaleidoshapes(tfds.core.GeneratorBasedBuilder): + """DatasetBuilder for Kaleidoshapes dataset.""" + + VERSION = tfds.core.Version('1.0.0') + RELEASE_NOTES = { + '1.0.0': 'Initial release.', + } + + def _info(self) -> tfds.core.DatasetInfo: + """Returns the dataset metadata.""" + + self.config = ShapesConfig() + + return tfds.core.DatasetInfo( + builder=self, + description=_DESCRIPTION, + features=tfds.features.FeaturesDict({ + # These are the features of your dataset like images, labels ... + 'image_index': tf.int64, + 'image': tfds.features.Image(shape=(self.config.image_height, + self.config.image_width, 3)), + 'boundaries': tfds.features.Image(shape=(self.config.image_height, + self.config.image_width, + 1)), + 'segments': tfds.features.Image(shape=(self.config.image_height, + self.config.image_width, + 1)), + 'distances': tfds.features.Tensor(shape=(self.config.image_height, + self.config.image_width), + dtype=tf.float32), + 'num_shapes': tf.int64, + 'shapes': tfds.features.Sequence(feature={ + 'type': tfds.features.Text(), + 'color': tfds.features.Tensor(shape=(3,), dtype=tf.uint8), + 'triangle_params': tfds.features.Tensor(shape=(3, 2), + dtype=tf.float32), + 'circle_params': tfds.features.Tensor(shape=(3,), + dtype=tf.float32), + }), + 'basecolor': tfds.features.Tensor(shape=(3,), dtype=tf.uint8), + 'num_intersections': tf.int64, + 'intersections': tfds.features.Tensor(shape=(2700, 2), + dtype=tf.float32), + 'vertices': tfds.features.Tensor(shape=(75, 2), dtype=tf.float32), + 'num_vertices': tf.int64, + }), + supervised_keys=None, # Set to `None` to disable + citation=_CITATION, + ) + + def _split_generators(self, dl_manager: tfds.download.DownloadManager): + """Returns SplitGenerators.""" + + num_images = self.config.num_images + + return { + 'train': self._generate_examples( + num_images=int(num_images*.9), + config=self.config), + 'test': self._generate_examples( + num_images=num_images - int(num_images*.9), config=self.config) + } + + def _generate_examples(self, num_images: int, config: ShapesConfig): + """Yields examples.""" + beam = tfds.core.lazy_imports.apache_beam + + image_indices = range(num_images) + + # split image_patchs into shards + images_per_shard = 10 + total_shards = len(image_indices) // images_per_shard + + if total_shards > 0: + split_indices = np.array(np.array_split(np.array(image_indices), + total_shards, axis=0)).tolist() + else: + split_indices = [image_indices] + + create_fn = functools.partial(self._generate_multiple_images, config=config) + + return ( + 'Create' >> beam.Create(split_indices) + | 'Process Images' >> beam.Map(create_fn) + | 'Flatten' >> beam.FlatMap(flatten) + | 'Add Keys' >> beam.Map(lambda x: (x['image_index'], x)) + ) + + def _generate_multiple_images(self, image_indices, config): + + all_images = [] + + for image_idx in image_indices: + image_dict = make_kaleido_image.generate_image(image_idx, config) + all_images.append(image_dict) + + return all_images diff --git a/scenic/projects/boundary_attention/kaleidoshapes/make_kaleido_image.py b/scenic/projects/boundary_attention/kaleidoshapes/make_kaleido_image.py new file mode 100644 index 0000000000000000000000000000000000000000..d3921b0a6194484bccd4ffbc5521a91721f22fcf --- /dev/null +++ b/scenic/projects/boundary_attention/kaleidoshapes/make_kaleido_image.py @@ -0,0 +1,897 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Helper functions for shape generation.""" + +import jax +from jax import random +import jax.numpy as jnp +import numpy as np +from PIL import Image, ImageDraw # pylint: disable=g-multiple-import +from shapely import geometry + +MultiPoint = geometry.MultiPoint +Polygon = geometry.Polygon + + +def choose_valid_point(key, array): + """Randomly select a non-zero element from a 2D mask. + + Args: + key: random key + array: 2D array of non-zero elements + + Returns: + point: [x,y] ([column,row]) coordinates of non-zero element + """ + + nonzero_indices = np.argwhere(array > 0) + if np.size(nonzero_indices) == 0: + point = np.array([]) + else: + _, subkey = random.split(key) + ind = random.choice(subkey, jnp.arange(len(nonzero_indices))) + point = np.flip(np.array(tuple(nonzero_indices[ind]))) + + return point + + +def disk_to_zero(array, center, radius): + """Set to zero all elements of a 2D array that are WITHIN radius of a point. + + Args: + array: 2D array of non-zero elements + center: [x,y] ([column,row]) coordinates of center point + radius: radius of disk + + Returns: + array: 2D array of non-zero elements with all elements within radius of + center + """ + + h, w = array.shape + x, y = np.meshgrid(np.arange(w), np.arange(h)) + + # return array with all elements close to the center replaced by 0 + return np.where((center[0] - x)**2 + (center[1] - y)**2 > radius**2, array, 0) + + +def inverted_disk_to_zero(array, center, radius): + """Set to zero all elements of a 2D array that are BEYOND radius of a point. + + Args: + array: 2D array of non-zero elements + center: [x,y] ([column,row]) coordinates of center point + radius: radius of disk + + Returns: + array: 2D array of non-zero elements with all elements far from center + """ + + h, w = array.shape + x, y = np.meshgrid(np.arange(w), np.arange(h)) + + # return array with all elements far from center replaced by 0 + return np.where((center[0] - x)**2 + (center[1] - y)**2 < radius**2, array, 0) + + +def boundary_to_zero(array, dist): + """Set to zero all elements within dist of the outer boundary. + + Args: + array: 2D array of non-zero elements + dist: distance of boundary + + Returns: + array: 2D array of non-zero elements with all elements within dist of + boundary + """ + + dist = max(dist, 1) + array[:int(dist), :] = 0 # top rows + array[-int(dist):, :] = 0 # bottom rows + array[:, :int(dist)] = 0 # left columns + array[:, -int(dist):] = 0 # right columns + + return array + + +def linesegment_to_zero(array, endpoints, dist): + """Set to zero all elements of a 2D array... + + ...that are WITHIN perpendicular-distance D of the join of two points. + + Args: + array: 2D array of non-zero elements + endpoints: [x,y] ([column,row]) coordinates of endpoints + dist: distance of line + + Returns: + array: 2D array of non-zero elements with all elements within + perpendicular-distance D of line + """ + + h, w = array.shape + x, y = np.meshgrid(np.arange(w), np.arange(h)) + + # compute line (a,b,c) from endpoints + line = [endpoints[0][1] - endpoints[1][1], + endpoints[1][0] - endpoints[0][0], + endpoints[0][0]*endpoints[1][1] - endpoints[1][0]*endpoints[0][1]] + + # return array with all elements close to the line replaced by 0 + return np.where(np.abs( + line[0]*x + line[1]*y + line[2]) / np.sqrt( + line[0]**2 + line[1]**2) > dist, array, 0) + + +def inverted_linesegment_to_zero(array, endpoints, dist): + """Set to zero all elements of a 2D array that are BEYOND... + + ...perpendicular-distance D of the join of two points. + + Args: + array: 2D array of non-zero elements + endpoints: [x,y] ([column,row]) coordinates of endpoints + dist: distance of line + + Returns: + array: 2D array of non-zero elements with all elements far from line + """ + + h, w = array.shape + x, y = np.meshgrid(np.arange(w), np.arange(h)) + + # compute line (a,b,c) from endpoints + line = [endpoints[0][1] - endpoints[1][1], + endpoints[1][0] - endpoints[0][0], + endpoints[0][0]*endpoints[1][1] - endpoints[1][0]*endpoints[0][1]] + + # return array with all elements close to the line replaced by 0 + return np.where(np.abs( + line[0]*x + line[1]*y + line[2]) / np.sqrt( + line[0]**2 + line[1]**2) < dist, array, 0) + + +def sample_random_color(key): + """Generate a random RGB vector (in [0,255]). + + Args: + key: random key + + Returns: + tuple: RGB color + """ + + rgb = random.randint(key, (3,), minval=0, maxval=256) + return tuple(rgb.tolist()) + + +def sample_triangle(key, config, h=240, w=320): + """Randomly sample a triangle with constraints. + + Args: + key: random key + config: configuration object (hyper-parameters for shape generation) + h: height of image + w: width of image + + Returns: + triangle vertices [(x1,y1), (x2,y2), (x3,y3)] + """ + + # initialize vertex lists + vertices = [] + + # Note: Our strategy for handling shape constraints is to randomly sample + # integer values for the vertex locations over the grid [0,w-1]x[0,h-1] + # (which allows imposing arbitrary constraints via a pixelated binary mask) + # and then add a random sub-pixel displacement from Uniform([-0.5,0.5]) + + # create a binary mask to kep track of valid choices of vertex locations + vertex_options = np.ones((h, w), dtype=np.uint8) + + # first vertex can be anywhere except within boundary_width*max(w,h) of the + # image boundary + vertex_options = boundary_to_zero(vertex_options, + config.boundary_width * max(w, h)) + next_vertex = choose_valid_point(key, vertex_options) + if np.size(next_vertex) == 0: + raise ValueError('Triangle sampling: cannot find valid vertex') + else: + key, subkey = random.split(key) + next_vertex = next_vertex + random.uniform(subkey, shape=(2,), + minval=-0.5, maxval=0.5) + vertices.append(next_vertex) + + # second vertex must additionally be in a donut around the first one, as + # determined by [min_triangle_base, max_triangle_base]*max(w,h) + vertex_options = disk_to_zero(vertex_options, vertices[0], + config.min_triangle_base * max(w, h)) + vertex_options = inverted_disk_to_zero(vertex_options, vertices[0], + config.max_triangle_base * max(w, h)) + next_vertex = choose_valid_point(key, vertex_options) + if np.size(next_vertex) == 0: + raise ValueError('Triangle sampling: cannot find valid vertex') + else: + key, subkey = random.split(key) + next_vertex = next_vertex + random.uniform(subkey, + shape=(2,), + minval=-0.5, + maxval=0.5) + vertices.append(next_vertex) + + # third vertex must additionally be at least [min_triangle_height*max(w,h) + # from the line connecting the first two vertices + vertex_options = linesegment_to_zero(vertex_options, vertices, + config.min_triangle_height * max(w, h)) + next_vertex = choose_valid_point(key, vertex_options) + if np.size(next_vertex) == 0: + raise ValueError('Triangle sampling: cannot find valid vertex') + else: + _, subkey = random.split(key) + next_vertex = next_vertex + random.uniform(subkey, shape=(2,), + minval=-0.5, maxval=0.5) + vertices.append(next_vertex) + + # compute from pixel units to normalized units, and from arrays to tuples + vertices = [tuple(v / max(w, h)) for v in vertices] + + return vertices + + +def render_image_from_shapes(shapes, shapecolors, basecolor, h=240, w=320): + """Render image using dictionary of shapes and associated RGB colors. + + Args: + shapes: list of shape dictionaries, in order of back-object to front-object + shapecolors: list of RGB color values (in [0,255]) + basecolor: RBG color of background (in [0,255]) + h: height of image + w: width of image + + Returns: + image: RGB image of shape (h, w, 3) + boundaries: binary image of pixelated boundariues (h, w, 1) + segments: integer-value image indicating shape segmentations + (0=background, 1=shapes[0], 2=shapes[1],...) + + Shape dictionary: + 'type' : {'circle', 'triangle'} + 'params' : {(cx,cy,r), [(x1,y1), (x2,y2), (x3,y3)]} + """ + + # create blank image with base_color + im = Image.new('RGB', (w, h), basecolor) + draw_im = ImageDraw.Draw(im) + + # create binary all-zeros image for (pixelated) boundaries + im_b = Image.new('1', (w, h), 0) + draw_b = ImageDraw.Draw(im_b) + + # create single-channel (grayscale) all-zeros image for segment indicators + im_s = Image.new('L', (w, h), color=0) + draw_s = ImageDraw.Draw(im_s) + + # iterate through list from, drawing color-filled shapes and white-filled + # shapes using back-to-front depth ordering + for i, shape in enumerate(shapes): + if shape['type'] == 'circle': + + # draw circle + circle_params = np.array(shape['params']) # (x,y,r) + circle_params = circle_params * max(w, h) + + # convert from (cx,cy,r) to bounding box (x1,y1,x2,y2) + circle_bbox = (circle_params[0]-circle_params[2], + circle_params[1]-circle_params[2], + circle_params[0]+circle_params[2], + circle_params[1]+circle_params[2]) + + draw_im.ellipse(circle_bbox, fill=shapecolors[i]) + draw_b.ellipse(circle_bbox, fill=0, outline=1, width=1) + draw_s.ellipse(circle_bbox, fill=i+1) + + elif shape['type'] == 'triangle': + + # draw triangle + verts = np.array(shape['params']) # [(x1,y1), (x2,y2), (x3,y3)] + verts = verts * max(w, h) + verts = verts.ravel().tolist() # make into a list for PIL + + draw_im.polygon(verts, fill=shapecolors[i]) + draw_b.polygon(verts, fill=0, outline=1, width=1) + draw_s.polygon(verts, fill=i+1) + + # render bitmaps + image = np.array(im.convert()) + boundaries = np.array(im_b) + segments = np.array(im_s.convert('L')) + + return image, boundaries, segments + + +def compute_distance_from_shapes(shapes, h=240, w=320): + """Compute distance map using dictionary of shapes. + + Args: + shapes: list of shape dictionaries, in order of back-object to front-object + h: height of image + w: width of image + + Returns: + dmap: jax array of size (h, w + + Shape dictionary: + 'type' : {'circle', 'triangle'} + 'params' : {(cx,cy,r), [(x1,y1), (x2,y2), (x3,y3)]} + """ + + # initialize distance map + dmap = np.full((h, w), np.inf) + dmap = dmap.ravel() + + # Create 2D coordinate arrays + x, y = np.meshgrid(np.arange(w), np.arange(h)) + x = x.ravel() + y = y.ravel() + + # Create Shapely MultiPoint object from coordinate arrays + points = MultiPoint(np.column_stack((x.ravel(), y.ravel()))) + + # iterate through list of shapes from back to front + for _, shape in enumerate(shapes): + if shape['type'] == 'circle': + + # get circle parameters and scale to image size + circle_params = np.array(shape['params']) # (x,y,r) + circle_params = circle_params * max(w, h) + + # signed distance from circle + shapedist = np.sqrt( + (x - circle_params[0]) ** 2 + ( + y - circle_params[1]) ** 2) - circle_params[2] + + # foreground mask + shapemask = shapedist <= 0 + + # unsigned distance from disk + shapedist = np.abs(shapedist) + + # Composite with previous distance map + dmap = np.where(shapemask, shapedist, np.minimum(shapedist, dmap)) + + elif shape['type'] == 'triangle': + + # get triangle parameters and scale to image size + verts = np.array(shape['params']) + verts = verts * max(w, h) + verts = verts.tolist() + + # create Shapely Polygon object for the triangle + poly = Polygon(verts) + + # unsigned distance from polygon's outline + shapedist = np.array([p.distance(poly.boundary) for p in points.geoms]) + + # foreground mask + shapemask = np.array([p.distance(poly) for p in points.geoms]) == 0 + + # Composite with previous distance map + dmap = np.where(shapemask, shapedist, np.minimum(shapedist, dmap)) + + return dmap.reshape(h, w) + + +def sample_shapes(key, config, h=240, w=320): + """Randomly sample a set of shapes. + + Args: + key: random key + config: configuration object (hyper-parameters for shape generation) + h: height of image + w: width of image + + Returns: + List of shape dictionaries, in order of back-object to front-object + + Shape dictionary: + 'type' : {'circle', 'triangle'} + 'params' : {(x,y,r), [(x1,y1), (x2,y2), (x3,y3)]} + """ + + aspect_ratio = (w/max(w, h), h/max(w, h)) + + shapes = [] + + key, subkey = random.split(key) + for _ in range(jax.random.randint(subkey, (1,), config.min_objects, + config.max_objects)[0]): + + # choose circle or triangle + key, subkey = random.split(key) + if random.bernoulli(subkey, config.prob_circle): + + # make circle + key, *subkeys = random.split(key, 4) + radius = random.uniform(subkeys[0], + minval=config.min_radius, + maxval=config.max_radius) + center_x = random.uniform( + subkeys[1], + minval=(radius + config.boundary_width), + maxval=(aspect_ratio[0] - radius - config.boundary_width)) + center_y = random.uniform( + subkeys[2], + minval=(radius + config.boundary_width), + maxval=(aspect_ratio[1] - radius - config.boundary_width)) + circparams = jnp.stack([center_x, center_y, radius]).tolist() + + shape = {'type': 'circle', + 'params': circparams} + + else: + + # make triangle + key, subkey = random.split(key) + verts = sample_triangle(subkey, config, h=h, w=w) + + shape = {'type': 'triangle', + 'params': verts} + + shapes.append(shape) + + return shapes + + +def filter_shape_image(config, imagedict): + """Remove shapes that are not visible in the image. + + Args: + config: configuration object (hyper-parameters for shape generation) + imagedict: shape_image dictionary + + Returns: + filtered_shape_image: shape_image dictionary + + Notes: + imagedict dictionary: + 'height': height + 'width': width + 'num_shapes': number of shapes + 'shapes': list of shape dictionaries (see below) + 'shapecolors': list of RGB shapecolors + 'basecolor': background color + 'image': RGB image + 'boundaries': boundary image + 'segments': segmentation map + 'distance': distance map + + shape dictionary: + 'type' : {'circle', 'triangle'} + 'params' : {(x,y,r), [(x1,y1), (x2,y2), (x3,y3)]} + """ + + # number of input shapes + num_input_shapes = imagedict['num_shapes'] + + # scaled visbility threshold in proportion to image size + vis_threshold = config.min_visibility * ( + imagedict['width'] * imagedict['height']) + + num_shapes_orig = len(imagedict['shapes']) + + imagedict['shapes'] = [e for i, e in enumerate( + imagedict['shapes']) if (np.sum( + imagedict['segments'] == i+1) > vis_threshold)] + imagedict['shapecolors'] = [e for i, e in enumerate( + imagedict['shapecolors']) if (np.sum( + imagedict['segments'] == i+1) > vis_threshold)] + + # update number of shapes + imagedict['num_shapes'] = len(imagedict['shapes']) + + # if any shapes have been removed, then re-render image and maps + if imagedict['num_shapes'] < num_input_shapes: + image, boundaries, segments = render_image_from_shapes( + imagedict['shapes'], + imagedict['shapecolors'], + imagedict['basecolor'], + imagedict['height'], + imagedict['width']) + imagedict['image'] = image + imagedict['boundaries'] = boundaries + imagedict['segments'] = segments + + return imagedict, num_shapes_orig - imagedict['num_shapes'] + + +# Helper function to check if a point is inside a given shape +def point_inside_shape(point, shape): + if shape['type'] == 'circle': + return inside_circle(point, np.array(shape['params'][:2]), + np.array(shape['params'][2])) + elif shape['type'] == 'triangle': + return inside_triangle(point, list(np.array(shape['params']))) + + +def circle_circle_intersections(circle1, circle2): + """Find the points where two circles intersect.""" + + c1_center, c1_radius = circle1 + c2_center, c2_radius = circle2 + + x1, y1 = c1_center + x2, y2 = c2_center + r1 = c1_radius + r2 = c2_radius + + # Distance between the centers + d = np.linalg.norm(c2_center - c1_center) + + # No solution conditions + if d > r1 + r2 or d < abs(r1 - r2) or (d == 0 and r1 != r2): + return [] + + # Compute the formula variables + a = (r1**2 - r2**2 + d**2) / (2 * d) + h = np.sqrt(r1**2 - a**2) + + # Compute the point P, which is the intersection of the line passing + # through the circle centers and the line orthogonal to it where the circles + # intersect + px = x1 + a * (x2 - x1) / d + py = y1 + a * (y2 - y1) / d + + # Intersection points + x3_1 = px + h * (y2 - y1) / d + y3_1 = py - h * (x2 - x1) / d + + x3_2 = px - h * (y2 - y1) / d + y3_2 = py + h * (x2 - x1) / d + + if h == 0: # The circles are tangent + return [(x3_1, y3_1)] + else: + return [(x3_1, y3_1), (x3_2, y3_2)] + + +def inside_circle(point, center, radius): + """Check if a point is inside a circle.""" + return np.sum((point - center)**2) < radius**2 + + +def circle_line_segment_intersection(circle_center, circle_radius, pt1, pt2): + """Find the points where the circle intersects with the line segment.""" + intersections = [] + + a = (pt2[0] - pt1[0])**2 + (pt2[1] - pt1[1])**2 + b = 2 * ((pt2[0] - pt1[0]) * (pt1[0] - circle_center[0]) + + (pt2[1] - pt1[1]) * (pt1[1] - circle_center[1])) + + c = circle_center[0]**2 + circle_center[1]**2 + pt1[0]**2 + pt1[1]**2 - 2 * ( + circle_center[0] * pt1[0] + circle_center[1] * pt1[1] + ) - circle_radius**2 + + discriminant = b**2 - 4 * a * c + + if discriminant >= 0: + t1 = (-b + np.sqrt(discriminant)) / (2 * a) + t2 = (-b - np.sqrt(discriminant)) / (2 * a) + + if 0 <= t1 <= 1: + intersections.append((1 - t1) * pt1 + t1 * pt2) + + if 0 <= t2 <= 1: + intersections.append((1 - t2) * pt1 + t2 * pt2) + + return intersections + + +def triangle_circle_intersections(triangle, circle): + """Find the points where the circle intersects with the triangle.""" + + circle_center, circle_radius = circle + + intersections = [] + + # Check intersection with each edge of the triangle + for i in range(3): + edge_start = triangle[i] + edge_end = triangle[(i + 1) % 3] + intersections.extend(circle_line_segment_intersection(circle_center, + circle_radius, + edge_start, edge_end)) + + return intersections + + +def inside_triangle(pt, triangle): + """Check if a point pt is inside the triangle.""" + # Convert triangle to barycentric coordinates + a, b, c = triangle + v0 = b - a + v1 = c - a + v2 = pt - a + + # Compute dot products + dot00 = np.dot(v0, v0) + dot01 = np.dot(v0, v1) + dot02 = np.dot(v0, v2) + dot11 = np.dot(v1, v1) + dot12 = np.dot(v1, v2) + + # Compute barycentric coordinates + inv_denom = 1 / (dot00 * dot11 - dot01 * dot01) + u = (dot11 * dot02 - dot01 * dot12) * inv_denom + v = (dot00 * dot12 - dot01 * dot02) * inv_denom + + # Check if point is in triangle + return (u >= 0) and (v >= 0) and (u + v <= 1) + + +def on_segment(p, q, r): + """Check if point q lies on line segment pr.""" + + return (q[0] <= max(p[0], r[0]) and q[0] >= min(p[0], r[0]) and + q[1] <= max(p[1], r[1]) and q[1] >= min(p[1], r[1])) + + +def orientation(p, q, r): + """Determine the orientation of the triplet (p, q, r).""" + + val = (q[1] - p[1]) * (r[0] - q[0]) - (q[0] - p[0]) * (r[1] - q[1]) + if val == 0: return 0 + return 1 if val > 0 else 2 + + +def line_intersection(line1, line2): + """Return the intersection point of two lines (if it exists).""" + + xdiff = (line1[0][0] - line1[1][0], line2[0][0] - line2[1][0]) + ydiff = (line1[0][1] - line1[1][1], line2[0][1] - line2[1][1]) + + def det(a, b): + return a[0] * b[1] - a[1] * b[0] + + div = det(xdiff, ydiff) + if div == 0: + return None + + d = (det(*line1), det(*line2)) + x = det(d, xdiff) / div + y = det(d, ydiff) / div + + return x, y + + +def triangle_triangle_intersections(triangle1, triangle2): + """Check if two triangles intersect and return the intersection points.""" + intersections = [] + for i in range(3): + for j in range(3): + if do_intersect(triangle1[i], triangle1[(i+1)%3], triangle2[j], + triangle2[(j+1)%3]): + intersection = line_intersection((triangle1[i], + triangle1[(i+1)%3]), + (triangle2[j], + triangle2[(j+1)%3])) + + if intersection and intersection not in intersections: + intersections.append(intersection) + return intersections + + +def do_intersect(p1, q1, p2, q2): + """Check if the line segments p1q1 and p2q2 intersect.""" + o1 = orientation(p1, q1, p2) + o2 = orientation(p1, q1, q2) + o3 = orientation(p2, q2, p1) + o4 = orientation(p2, q2, q1) + + if o1 != o2 and o3 != o4: + return True + + if o1 == 0 and on_segment(p1, p2, q1): return True + if o2 == 0 and on_segment(p1, q2, q1): return True + if o3 == 0 and on_segment(p2, p1, q2): return True + if o4 == 0 and on_segment(p2, q1, q2): return True + + return False + + +def compute_intersections_and_vertices(shapes): + """Compute the intersections and vertices of a list of shapes.""" + + all_intersections = [] + all_vertices = [] + + for i in range(len(shapes)): + + shape_i = shapes[i] + + if shape_i['type'] == 'triangle': + vertices = shape_i['params'] + + # Check for occulusions + occluded = False + for vertex in vertices: + + for k in range(0, len(shapes)): + shape_k = shapes[k] + + if point_inside_shape(vertex, shape_k) and ((k > i)): + occluded = True + break + + if not occluded: + all_vertices.append(vertex) + + for j in range(i+1, len(shapes)): + + shape_j = shapes[j] + + intersections = [] + + if shape_i['type'] == 'circle': + if shape_j['type'] == 'circle': + intersections = circle_circle_intersections( + (np.array(shape_i['params'][:2]), + np.array(shape_i['params'][2])), + (np.array(shape_j['params'][:2]), + np.array(shape_j['params'][2]))) + elif shape_j['type'] == 'triangle': + intersections = triangle_circle_intersections( + np.array(shape_j['params']), + (np.array(shape_i['params'][:2]), + np.array(shape_i['params'][2]))) + elif shape_i['type'] == 'triangle': + if shape_j['type'] == 'triangle': + intersections = triangle_triangle_intersections( + np.array(shape_i['params']), + np.array(shape_j['params'])) + elif shape_j['type'] == 'circle': + intersections = triangle_circle_intersections( + np.array(shape_i['params']), + (np.array(shape_j['params'][:2]), + np.array(shape_j['params'][2]))) + + # Check for occlusions + if len(intersections) == 0: # pylint: disable=g-explicit-length-test + continue + + for intersection in intersections: + if len(intersection) == 0: # pylint: disable=g-explicit-length-test + continue + + occluded = False + for k in range(0, len(shapes)): + + shape_k = shapes[k] + + if point_inside_shape(intersection, + shape_k) and ((k > i) & (k != j)): + occluded = True + break + + if not(occluded): + all_intersections.append(intersection) + + return all_intersections, all_vertices + + +def generate_image(im_idx, config): + """Generate a kaleidoshapes image. + + Args: + im_idx: index of image to generate + config: config object + + Returns: + imagedict: dictionary of image data + """ + + # initialize random key with image index as the seed + key = jax.random.PRNGKey(im_idx) + + # sample a random shape set + shapes = sample_shapes(key, config, h=config.image_height, + w=config.image_width) + + # sample random shape-colors and basecolor + key, *subkeys = jax.random.split(key, len(shapes)+1) + shapecolors = [sample_random_color(subkey) for subkey in subkeys] + + _, subkey = jax.random.split(key) + basecolor = sample_random_color(subkey) + + # make the image, boundary map and segmentation map + image, boundaries, segments = render_image_from_shapes(shapes, + shapecolors, + basecolor, + h=config.image_height, + w=config.image_width) + distance = compute_distance_from_shapes(shapes, h=config.image_height, + w=config.image_width) + + # organize into a dictionary + imagedict = { + 'height': boundaries.shape[0], + 'width': boundaries.shape[1], + 'num_shapes': len(shapes), + 'shapes': shapes, + 'shapecolors': shapecolors, + 'basecolor': basecolor, + 'image': image, + 'boundaries': boundaries, + 'segments': segments, + 'distance': distance + } + + imagedict, _ = filter_shape_image(config, imagedict) + imagedict['distance'] = compute_distance_from_shapes(imagedict['shapes'], + h=imagedict['height'], + w=imagedict['width']) + + all_intersections, all_vertices = compute_intersections_and_vertices( + imagedict['shapes']) + num_intersections = len(all_intersections) + num_vertices = len(all_vertices) + + intersections = np.zeros((2700, 2), dtype=np.float32) + + if num_intersections > 0: + intersections[:num_intersections] = np.array(all_intersections, + dtype=np.float32) + + circle_shape_params = np.zeros((config.max_objects, 3), dtype=np.float32) + triangle_shape_params = np.zeros((config.max_objects, 3, 2), dtype=np.float32) + shape_colors = np.zeros((config.max_objects, 3), dtype=np.uint8) + shape_types = ['None']*config.max_objects + + for ii in range(imagedict['num_shapes']): + shape_types[ii] = imagedict['shapes'][ii]['type'] + shape_colors[ii] = imagedict['shapecolors'][ii] + + if shape_types[ii] == 'circle': + circle_shape_params[ii] = imagedict['shapes'][ii]['params'] + else: + triangle_shape_params[ii] = np.array(imagedict['shapes'][ii]['params']) + + vertices = np.zeros((75, 2), dtype=np.float32) + + if all_vertices: + vertices[:num_vertices, :] = np.array(all_vertices, dtype=np.float32) + + final_imagedict = {'image_index': im_idx, + 'image': np.array(imagedict['image'], dtype=np.uint8), + 'boundaries': np.expand_dims(np.array( + imagedict['boundaries'], dtype=np.uint8), -1), + 'segments': np.expand_dims(np.array( + imagedict['segments'], dtype=np.uint8), -1), + 'distances': np.array(imagedict['distance'], + dtype=np.float32), + 'num_shapes': imagedict['num_shapes'], + 'shapes': {'type': shape_types, + 'color': shape_colors, + 'triangle_params': triangle_shape_params, + 'circle_params': circle_shape_params}, + 'basecolor': np.array(imagedict['basecolor'], + dtype=np.uint8), + 'intersections': intersections, + 'num_intersections': num_intersections, + 'vertices': vertices, + 'num_vertices': num_vertices + } + return final_imagedict diff --git a/scenic/projects/boundary_attention/kaleidoshapes/plot_image.py b/scenic/projects/boundary_attention/kaleidoshapes/plot_image.py new file mode 100644 index 0000000000000000000000000000000000000000..f8f382974f21d1a9377616f982115d950be2ef5e --- /dev/null +++ b/scenic/projects/boundary_attention/kaleidoshapes/plot_image.py @@ -0,0 +1,52 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""""Visualize kaleidoshapes data.""" + +import matplotlib.pyplot as plt + + +def plot_image(imagedict): + """Visualize a single kaleidoshapes image.""" + + plt.figure(figsize=(20, 10)) + plt.subplot(141) + plt.imshow(imagedict['image']) + plt.xticks([]) + plt.yticks([]) + plt.title(f"Image ({imagedict['num_shapes']})") + plt.ylabel('Raw shapes') + + plt.subplot(142) + plt.imshow(imagedict['boundaries'], cmap='binary') + for intersection in imagedict['intersections']* 320: + plt.plot(intersection[0], intersection[1], 'rx') + for vertex in imagedict['vertices']* 320: + plt.plot(vertex[0], vertex[1], 'bx') + plt.xticks([]) + plt.yticks([]) + plt.title(f"Boundaries ({imagedict['num_shapes']})") + + plt.subplot(143) + plt.imshow(imagedict['segments'], cmap='gray') + plt.xticks([]) + plt.yticks([]) + plt.title(f"Segments ({imagedict['num_shapes']})") + + plt.subplot(144) + plt.imshow(imagedict['distances']) + plt.xticks([]) + plt.yticks([]) + plt.title(f"Distance ({imagedict['num_shapes']})") + plt.colorbar(fraction=0.046, pad=0.04) diff --git a/scenic/projects/boundary_attention/kaleidoshapes/requirements.txt b/scenic/projects/boundary_attention/kaleidoshapes/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..9ac90b8ed7d7fad51b31dd12544732f6c988e66d --- /dev/null +++ b/scenic/projects/boundary_attention/kaleidoshapes/requirements.txt @@ -0,0 +1 @@ +apache_beam diff --git a/scenic/projects/boundary_attention/kaleidoshapes/rm.png b/scenic/projects/boundary_attention/kaleidoshapes/rm.png new file mode 100644 index 0000000000000000000000000000000000000000..68ed0e9c06bc8ea22236a3d8be1b2114b3178827 --- /dev/null +++ b/scenic/projects/boundary_attention/kaleidoshapes/rm.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:561be21636e0cfc10f39083739b9487d2113a49c1cc6419f3cfbbab445f53ad5 +size 1226086 diff --git a/scenic/projects/boundary_attention/loss_lib/__init__.py b/scenic/projects/boundary_attention/loss_lib/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/boundary_attention/loss_lib/boundary_attention_loss.py b/scenic/projects/boundary_attention/loss_lib/boundary_attention_loss.py new file mode 100644 index 0000000000000000000000000000000000000000..aee0e064435fbc09ea123087ed24a3a9f38858c9 --- /dev/null +++ b/scenic/projects/boundary_attention/loss_lib/boundary_attention_loss.py @@ -0,0 +1,202 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Loss Functions for Boundary Attention.""" + +import jax +import jax.numpy as jnp +import ml_collections +from scenic.projects.boundary_attention.helpers import params2maps as params2maps_lib + + +def pytrees_stack(pytrees, axis=0): + results = jax.tree_util.tree_map( + lambda *values: jnp.stack(values, axis=axis), *pytrees + ) + return results + + +class BoundaryAttentionLoss: + """Loss functions for Boundary Attention.""" + + def __init__( + self, + config: ml_collections.ConfigDict, + params2maps: params2maps_lib.Params2Maps, + ): + self.config = config + self.params2maps = params2maps + self.loss_opts = self.get_loss_opts() + + def get_loss_opts(self): + return self.config.model.loss_opts + + def get_patch_supervision_loss(self, local_est, global_truth): + """Calculates the loss for patch supervision.""" + local_boundaries_gt = self.params2maps.unfold(global_truth) + loss = jnp.sum((local_est - local_boundaries_gt)**2, axis=1, keepdims=True) + return loss + + def get_global_supervision_loss(self, global_est, global_gt): + """Calculates the loss for global supervision.""" + return jnp.sum((global_est - global_gt)**2, axis=1, keepdims=True) + + def get_patch_consistency_loss(self, local_est, global_est): + """Calculates the loss for patch consistency.""" + global_patches_est = jax.lax.stop_gradient( + self.params2maps.unfold(global_est) + ) + return jnp.sum((local_est - global_patches_est)**2, axis=1, keepdims=True) + + def get_per_pixel_importance( + self, + gt_distances, + patch_density=1, + iv_masks=1, + beta=0.1, + delta=1.0, + const=1.0, + ): + """Calculates the per-pixel importance function.""" + + global_scale_mask = patch_density > 0 + return ( + jnp.exp(-beta * (gt_distances + delta)) + * (iv_masks + const) + * global_scale_mask + ) + + def get_per_patch_importance( + self, gt_distances, patch_masks, pixel_importance, delta=1.0 + ): + """Calculates the per-patch importance function.""" + + normalized_patch_masks = patch_masks / ( + jnp.sum(patch_masks, axis=(1, 2, 3), keepdims=True) + 1e-4 + ) + distance_weight = 1 / jnp.sum( + self.params2maps.unfold(gt_distances) + delta, + axis=(2, 3), + keepdims=True, + ) + patched_pixel_importance = self.params2maps.unfold(pixel_importance) + return distance_weight * normalized_patch_masks * patched_pixel_importance + + def get_loss(self, outputs, inputs): + """Calculates the loss function.""" + + num_losses = 2 + weights = (0.3) ** (num_losses - jnp.arange(num_losses)) + weights = weights/jnp.sum(weights) + + output_loss = jnp.expand_dims(weights, + (1, 2, 3, 4)) * jax.vmap( + self.get_layer_loss, + in_axes=(0, None))( + pytrees_stack(outputs[-2:]), inputs) + + return output_loss + + def get_layer_loss(self, outputs, inputs): + """Calculates the loss function for a single layer.""" + + global_distances = outputs['global_distances'] + global_features = outputs['global_features'] + global_boundaries = outputs['global_boundaries'] + distance_patches = outputs['distance_patches'] + boundary_patches = outputs['boundary_patches'] + feature_patches = outputs['feature_patches'] + patch_density = outputs['patch_density'] + patch_masks = outputs['patch_masks'] + + pixel_importance = self.get_per_pixel_importance( + inputs['distances'], + patch_density, + inputs['iv_mask'].transpose(0, 3, 1, 2), + beta=self.loss_opts.beta, + delta=1.0, + const=self.loss_opts.loss_constant, + ) + patch_importance = self.get_per_patch_importance( + inputs['distances'], + patch_masks, + pixel_importance, + delta=self.loss_opts.loss_constant, + ) + + # --- Global Supervision Losses + global_distance_supervision_loss = ( + self.get_global_supervision_loss(global_distances, inputs['distances']) + * pixel_importance + ) + global_feature_supervision_loss = ( + self.get_global_supervision_loss(global_features, inputs['clean_image']) + * pixel_importance + ) + + # ---- Patchwise Supervision Losses + patch_distance_supervision_loss = ( + self.get_patch_supervision_loss(distance_patches, inputs['distances']) + * patch_importance + ) + patch_feature_supervision_loss = ( + self.get_patch_supervision_loss(feature_patches, inputs['clean_image']) + * patch_importance + ) + + # ---- Patchwise consistency Losses + patch_boundary_consistency_loss = ( + self.get_patch_consistency_loss(boundary_patches, global_boundaries) + * patch_importance + ) + patch_feature_consistency_loss = ( + self.get_patch_consistency_loss(feature_patches, global_features) + * patch_importance + ) + + # Fold patched losses so that output shapes are consistent + folded_shape = global_distances.shape + + patch_distance_supervision_loss = self.params2maps.fold( + patch_distance_supervision_loss, folded_shape + ) + patch_feature_supervision_loss = self.params2maps.fold( + patch_feature_supervision_loss, folded_shape + ) + patch_boundary_consistency_loss = self.params2maps.fold( + patch_boundary_consistency_loss, folded_shape + ) + patch_feature_consistency_loss = self.params2maps.fold( + patch_feature_consistency_loss, folded_shape + ) + + return ( + self.loss_opts.beta_GDS * global_distance_supervision_loss + + self.loss_opts.beta_GFS * global_feature_supervision_loss + + self.loss_opts.beta_PDS * patch_distance_supervision_loss + + self.loss_opts.beta_PFS * patch_feature_supervision_loss + + self.loss_opts.beta_BC * patch_boundary_consistency_loss + + self.loss_opts.beta_FC * patch_feature_consistency_loss + ) + + def standard_metric(self, outputs, inputs): + """Define objective loss function.""" + + # The simplest metric is the difference between the global ground truth + # distance map and the predicted distance map + standard_metric = self.get_global_supervision_loss( + outputs[-1]['global_distances'], inputs['distances'] + ) + + return {'standard_metric': standard_metric} diff --git a/scenic/projects/boundary_attention/loss_lib/metrics.py b/scenic/projects/boundary_attention/loss_lib/metrics.py new file mode 100644 index 0000000000000000000000000000000000000000..82b4385d0be2028c05c8d03ce46de8f66e0fb1d3 --- /dev/null +++ b/scenic/projects/boundary_attention/loss_lib/metrics.py @@ -0,0 +1,66 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Loss functions for the GT dataset.""" + + +def gt_train_loss(model_output, batch, weights, loss_fn): + """Computes the loss for the given model output and batch. + + Args: + model_output: The output of the model. + batch: The batch of data. + weights: The weights of the batch. + loss_fn: The loss function to use. + + Returns: + The loss. + """ + del weights + + return loss_fn.get_loss(model_output, batch) + + +def gt_standard_metric(model_output, batch, weights, loss_fn): + """Computes the standard metric for the given model output and batch. + + Args: + model_output: The output of the model. + batch: The batch of data. + weights: The weights of the batch. + loss_fn: The loss function to use. + + Returns: + The standard metric. + """ + del weights + + return loss_fn.standard_metric(model_output, batch) + + +def gt_test_loss(model_output, batch, weights, loss_fn): + """Computes the loss for the given model output and batch. + + Args: + model_output: The output of the model. + batch: The batch of data. + weights: The weights of the batch. + loss_fn: The loss function to use. + + Returns: + The loss. + """ + del weights + + return loss_fn.get_loss(model_output, batch) diff --git a/scenic/projects/boundary_attention/loss_lib/metrics_dict.py b/scenic/projects/boundary_attention/loss_lib/metrics_dict.py new file mode 100644 index 0000000000000000000000000000000000000000..c2ac63dc590ae1a07841b89414e4c696b8b85ed2 --- /dev/null +++ b/scenic/projects/boundary_attention/loss_lib/metrics_dict.py @@ -0,0 +1,87 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Metrics functions for the boundary attention model.""" + +from typing import Any, Callable, Dict, Optional, Tuple + +import jax +import jax.numpy as jnp +from scenic.model_lib.base_models import base_model as scenic_base_model +from scenic.projects.boundary_attention.loss_lib import metrics + + +def get_number(number): + + def helper(batch, target, weights=None): + del batch, target, weights + return number + + return helper + + +FASTFOJ_METRICS = { + 'gt_train_loss': (metrics.gt_train_loss, get_number(1)), + 'gt_standard_metric': (metrics.gt_standard_metric, get_number(1)), +} + + +def metric_function_noop( + model_output: Dict[str, Any], + batch: scenic_base_model.Batch, +) -> Dict[str, Tuple[jnp.ndarray, jnp.ndarray]]: + del model_output, batch + return {} + + +def metric_function( # pylint: disable=dangerous-default-value + model_output: Dict[str, Any], + batch: scenic_base_model.Batch, + metrics_dict=FASTFOJ_METRICS, + loss_fn: Optional[Callable] = None # pylint: disable=g-bare-generic +) -> Dict[str, Tuple[jnp.ndarray, jnp.ndarray]]: + """Computes metrics for the given model output and batch. + + Args: + model_output: The output of the model. + batch: The batch of data. + metrics_dict: A dictionary of metrics to compute. + loss_fn: A loss function to use. + + Returns: + A dictionary of metrics. + """ + psum_metric_norm = psum_metric_normalizer + evaluated_metrics = {} + + weights = 1 + for key, val in metrics_dict.items(): + metric_val = val[0](model_output, batch, weights, loss_fn=loss_fn) + metric_count = val[1](model_output, batch, weights) + if isinstance(metric_val, dict): + for k, v in metric_val.items(): + evaluated_metrics[key + '_' + k] = psum_metric_norm((v, metric_count)) + else: + evaluated_metrics[key] = psum_metric_norm((metric_val, metric_count)) + return evaluated_metrics + + +# Helper Functions +def psum_metric_normalizer( + metrics: Tuple[jnp.ndarray, jnp.ndarray] # pylint: disable=redefined-outer-name + ) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Applies psum over the given tuple of (metric, normalizer).""" + psumed_metric = jnp.sum(jax.lax.psum(metrics[0], axis_name='batch')) + psumed_normalizer = jnp.sum(jax.lax.psum(metrics[1], axis_name='batch')) + return (psumed_metric, psumed_normalizer) diff --git a/scenic/projects/boundary_attention/main.py b/scenic/projects/boundary_attention/main.py new file mode 100644 index 0000000000000000000000000000000000000000..137d1dc780f7b67d8758c178e324ed5e4aae8117 --- /dev/null +++ b/scenic/projects/boundary_attention/main.py @@ -0,0 +1,103 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main script for Boundary Attention project.""" + +from absl import flags +from absl import logging +import chex +from clu import metric_writers +from clu import platform +from flax import linen as nn +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app as scenic_app +from scenic.projects.boundary_attention import trainer +from scenic.projects.boundary_attention.dataset_lib import dataloader +from scenic.projects.boundary_attention.models import all_models + +flags.DEFINE_string('dataset_dir', '', 'Dataset directory.') +flags.DEFINE_string('checkpoint_path', '', 'Checkpoint path.') +flags.DEFINE_integer('checkpoint_step', -1, 'Checkpoint step.') +flags.DEFINE_string('weights_path', '', 'Pretrained weights path.') + +FLAGS = flags.FLAGS +FINAL_CKPT_ARTIFACT_DESCRIPTION = 'Final checkpoint' + + +def collapse_str_to_int(workdir): + return sum([ord(s) for s in workdir]) + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the Boundary Attention.""" + + # Update config if flags defined + if len(FLAGS.dataset_dir) > 0: # pylint: disable=g-explicit-length-test + config.dataset.dataset_dir = FLAGS.dataset_dir + if len(FLAGS.checkpoint_path) > 0: # pylint: disable=g-explicit-length-test + config.init_from.checkpoint_path = FLAGS.checkpoint_path + if FLAGS.checkpoint_step != -1: + config.init_from.checkpoint_step = FLAGS.checkpoint_step + if len(FLAGS.weights_path) > 0: # pylint: disable=g-explicit-length-test + config.init_from.params_path = FLAGS.weights_path + + # Update learning rate to take into account the number of devices + num_devices = jax.device_count() + config.num_devices = num_devices + config.lr_configs.base_learning_rate = (config.lr_configs.base_learning_rate * + (num_devices / 2)) + config.lr_configs.end_learning_rate = (config.lr_configs.end_learning_rate * + (num_devices / 2)) + logging.info('num_devices: %d', num_devices) + + # Build the loss_fn, metrics, and flax_model. + model_cls = all_models.get_model_cls(config.model.name) + data_rng, rng = jax.random.split(rng) + dataset_shuffle = collapse_str_to_int(workdir) + dataset = dataloader.get_dataloader( + config, + data_rng, + dataset_service_address=FLAGS.dataset_service_address, + dataset_shuffle=dataset_shuffle, + ) + if config.disable_pmap_and_jit: + chex.fake_pmap_and_jit().start() + nn.enable_named_call() + trainer.train( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + # Log final checkpoint path as XManager artifact to tell parallel jobs that + # training is done: + if jax.process_index() == 0: + # XManager overwrites artifacts with identical content even if their + # description is different. As a workaround, we prepend "TRAIN", so that + # the path can be distinguished from the "Last evaluated checkpoint" + # artifact written by the evaluator. + # TODO(b/210825478): Remove prepended string. + artifact = 'TRAIN' + checkpoints.latest_checkpoint(workdir) + platform.work_unit().create_artifact(platform.ArtifactType.FILE, artifact, + FINAL_CKPT_ARTIFACT_DESCRIPTION) + + +if __name__ == '__main__': + scenic_app.run(main=main) diff --git a/scenic/projects/boundary_attention/models/__init__.py b/scenic/projects/boundary_attention/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/boundary_attention/models/all_models.py b/scenic/projects/boundary_attention/models/all_models.py new file mode 100644 index 0000000000000000000000000000000000000000..ea105541089ea64f2bce679a60b3bb5593ee0d29 --- /dev/null +++ b/scenic/projects/boundary_attention/models/all_models.py @@ -0,0 +1,31 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Defines the models for the boundary attention project.""" + +import immutabledict +from scenic.projects.boundary_attention.models import boundary_attention + + +ALL_MODELS = immutabledict.immutabledict({ + 'boundary_attention': boundary_attention.BoundaryAttention, + }) + + +def get_model_cls(model_name): + """Returns the model class for the given model name.""" + + if model_name not in ALL_MODELS.keys(): + raise NotImplementedError('Unrecognized model: {}'.format(model_name)) + return ALL_MODELS[model_name] diff --git a/scenic/projects/boundary_attention/models/boundary_attention.py b/scenic/projects/boundary_attention/models/boundary_attention.py new file mode 100644 index 0000000000000000000000000000000000000000..46f906d9cf1b1bdd149be6b24c40d311b5fb9c90 --- /dev/null +++ b/scenic/projects/boundary_attention/models/boundary_attention.py @@ -0,0 +1,84 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Define Boundary Attention Model.""" + +import functools +from typing import Any, Dict, Optional + +import flax +import flax.linen as nn +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models import base_model as scenic_base_model +from scenic.projects.boundary_attention.helpers import params2maps +from scenic.projects.boundary_attention.loss_lib import boundary_attention_loss +from scenic.projects.boundary_attention.loss_lib import metrics_dict +from scenic.projects.boundary_attention.models.model_lib import boundary_attention_model_base + + +_FASTFOJ_METRICS = metrics_dict.FASTFOJ_METRICS + + +class BoundaryAttention(scenic_base_model.BaseModel): + """Boundary Attention model.""" + + def __init__(self, config: ml_collections.ConfigDict, + dataset_metadata: Dict[str, Dict[str, Any]]) -> None: + self.config = config + self.dataset_metadata = dataset_metadata + self.params2maps = params2maps.Params2Maps(config.model.opts, + config.model.input_opts) + self.flax_model = self.build_flax_model() + self.loss_fn = boundary_attention_loss.BoundaryAttentionLoss( + config, params2maps=self.params2maps) + + def loss_function(self, model_outputs: Dict[str, jnp.ndarray], + batch: jnp.ndarray) -> Any: + + return self.loss_fn.get_loss(model_outputs, batch) + + def get_metrics_fn(self, split: Optional[str] = None) -> Any: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + batch)``` + """ + if split == 'test': + return metrics_dict.metric_function_noop + else: + return functools.partial( + metrics_dict.metric_function, + metrics_dict=_FASTFOJ_METRICS, + loss_fn=self.loss_fn) + + def build_flax_model(self) -> nn.Module: + return boundary_attention_model_base.BoundaryAttentionModelBase( + config=self.config, params2maps=self.params2maps) + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from `restored_train_state`.""" + del restored_model_cfg + params = flax.core.unfreeze(train_state.params) + restored_params = flax.core.unfreeze(restored_train_state.params) + for pname, pvalue in restored_params.items(): + params[pname] = pvalue + return train_state.replace( + params=flax.core.freeze(params), + model_state=restored_train_state.model_state) diff --git a/scenic/projects/boundary_attention/models/model_lib/__init__.py b/scenic/projects/boundary_attention/models/model_lib/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/boundary_attention/models/model_lib/attention_blocks.py b/scenic/projects/boundary_attention/models/model_lib/attention_blocks.py new file mode 100644 index 0000000000000000000000000000000000000000..043ee35e1a2f938cc910fb48d8937d64c2031773 --- /dev/null +++ b/scenic/projects/boundary_attention/models/model_lib/attention_blocks.py @@ -0,0 +1,109 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Transformer block for boundary attention.""" + +from typing import Optional +import flax.linen as nn +import jax.numpy as jnp +from scenic.projects.boundary_attention.models.model_lib import model_utils + + +class TransformerBlock(nn.Module): + """Finds next hidden state given junction features and prev hidden state.""" + + M: int = 3 + C: int = 3 + patchsize: int = 5 + encoding_dim: int = 256 + num_heads: Optional[int] = 4 + num_layers: Optional[int] = 1 + attn_dropout_prob: Optional[float] = 0 + + @nn.compact + def __call__(self, + hidden_state: jnp.ndarray, + embedded_hidden_state: jnp.ndarray, + train: bool = True): + + hidden_dim = embedded_hidden_state.shape[-1] + + # Extract patches from the input + hidden_state_patches, bin_mask = model_utils.extract_patches( + embedded_hidden_state, (self.patchsize, self.patchsize), 1) + + # Add positional encoding to patches + pos_embedding = self.param('PositionalEmbedding', + nn.initializers.lecun_normal(), + (self.patchsize, self.patchsize, hidden_dim)) + hidden_state_patches = hidden_state_patches + jnp.expand_dims( + pos_embedding, [0, 1, 2]) + + # Flatten patches and prepare binary mask + hidden_state_patches_flattened = hidden_state_patches.reshape( + [-1, hidden_state_patches.shape[1], hidden_state_patches.shape[2], + hidden_state_patches.shape[3]*hidden_state_patches.shape[4], + hidden_state_patches.shape[5]]) + bin_mask_flattened = bin_mask.reshape( + [-1, bin_mask.shape[1], bin_mask.shape[2], 1, + bin_mask.shape[3]*bin_mask.shape[4], bin_mask.shape[5]]).squeeze(-1) + + # Process through transformer encoder layers + for _ in range(self.num_layers): + hidden_state = EncoderBlock(hidden_state.shape[-1], + self.encoding_dim, self.num_heads, + self.attn_dropout_prob)( + jnp.expand_dims(hidden_state, 3), + hidden_state_patches_flattened, + jnp.expand_dims(bin_mask_flattened, + -2).astype(bool), + train=train) + + # Return new hidden state + return hidden_state + + +class EncoderBlock(nn.Module): + """Encoder block for transformer.""" + + hidden_dim: int + dim_conv: int + num_heads: int = 4 + dropout_prob: float = 0 + + @nn.compact + def __call__(self, + hidden_state: jnp.ndarray, + hidden_state_kv: jnp.ndarray, + attn_mask: jnp.ndarray, + train=True): + + next_hidden_state = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads)(hidden_state, hidden_state_kv, + mask=attn_mask, deterministic=not train) + + hidden_state = hidden_state + next_hidden_state + hidden_state = nn.LayerNorm()(hidden_state) + + # MLP + mlp_out = nn.Dense(self.dim_conv)(hidden_state) + mlp_out = nn.Dropout(self.dropout_prob, + name='MLPDropout')(mlp_out, deterministic=not train) + mlp_out = nn.relu(mlp_out) + mlp_out = nn.Dense(self.hidden_dim)(mlp_out) + + hidden_state = hidden_state + mlp_out + hidden_state = nn.LayerNorm()(hidden_state) + + return hidden_state.squeeze(-2) diff --git a/scenic/projects/boundary_attention/models/model_lib/boundary_attention_model_base.py b/scenic/projects/boundary_attention/models/model_lib/boundary_attention_model_base.py new file mode 100644 index 0000000000000000000000000000000000000000..d4fcb663e0a43c8870b872259ca178b648ed097d --- /dev/null +++ b/scenic/projects/boundary_attention/models/model_lib/boundary_attention_model_base.py @@ -0,0 +1,129 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class for boundary attention models.""" + +from flax import linen as nn +import jax.numpy as jnp +import ml_collections +from scenic.projects.boundary_attention.helpers import params2maps +from scenic.projects.boundary_attention.models.model_lib import deformable_refinement_blocks +from scenic.projects.boundary_attention.models.model_lib import initialization_blocks +from scenic.projects.boundary_attention.models.model_lib import misc_blocks +from scenic.projects.boundary_attention.models.model_lib import refinement_blocks + + +class BoundaryAttentionModelBase(nn.Module): + """Base class for boundary attention models.""" + + config: ml_collections.ConfigDict + params2maps: params2maps.Params2Maps + + def setup(self): + + if self.config.model_name == 'boundary_attention': + self.initialization = initialization_blocks.PatchInitializer( + init_opts=self.config.model.model_opts.init_opts, + train_opts=self.config.model.train_opts, + params2maps=self.params2maps, + name='PatchInitializer', + ) + refinement_block_1 = refinement_blocks.BaseRefinementBlock( + refine_opts=self.config.model.model_opts.refine_opts, + train_opts=self.config.model.train_opts, + params2maps=self.params2maps, + name='PatchRefinement_0', + ) + refinement_block_2 = refinement_blocks.BaseRefinementBlock( + refine_opts=self.config.model.model_opts.refine_opts, + train_opts=self.config.model.train_opts, + params2maps=self.params2maps, + name='PatchRefinement_1', + ) + self.refinement = refinement_blocks.BaseRefinement( + [refinement_block_1, refinement_block_2] + ) + + elif self.config.model_name == 'deformable_boundary_attention': + self.hidden2outputs = misc_blocks.Hidden2OutputsBlock( + num_wedges=self.params2maps.num_wedges, + parameterization=self.params2maps.jparameterization, + params2maps=self.params2maps, + name='Hidden2OutputsBlock', + ) + self.initialization = initialization_blocks.PatchInitializer( + init_opts=self.config.model.model_opts.init_opts, + train_opts=self.config.model.train_opts, + params2maps=self.params2maps, + name='PatchInitializer', + ) + refinement_block = ( + deformable_refinement_blocks.DeformableRefinementBlock( + refine_opts=self.config.model.model_opts.refine_opts, + train_opts=self.config.model.train_opts, + params2maps=self.params2maps, + hidden2outputs=self.hidden2outputs, + name='PatchRefinement_1', + ) + ) + self.refinement = deformable_refinement_blocks.DeformableRefinement( + [refinement_block] + ) + + elif self.config.model_name == 'deformable_boundary_attention_v0': + self.hidden2outputs = misc_blocks.Hidden2OutputsBlock( + num_wedges=self.params2maps.num_wedges, + parameterization=self.params2maps.jparameterization, + params2maps=self.params2maps, + name='Hidden2OutputsBlock', + ) + self.initialization = initialization_blocks.PatchInitializer( + init_opts=self.config.model.model_opts.init_opts, + train_opts=self.config.model.train_opts, + params2maps=self.params2maps, + name='PatchInitializer', + ) + refinement_block_1 = refinement_blocks.BaseRefinementBlock( + refine_opts=self.config.model.model_opts.refine_opts, + train_opts=self.config.model.train_opts, + params2maps=self.params2maps, + hidden2outputs=self.hidden2outputs, + use_deformable_attention=True, + name='PatchRefinement_0', + ) + refinement_block_2 = refinement_blocks.BaseRefinementBlock( + refine_opts=self.config.model.model_opts.refine_opts, + train_opts=self.config.model.train_opts, + params2maps=self.params2maps, + hidden2outputs=self.hidden2outputs, + use_deformable_attention=True, + name='PatchRefinement_1', + ) + self.refinement = refinement_blocks.BaseRefinement( + [refinement_block_1, refinement_block_2] + ) + + else: + raise NameError('No valid boundary attention model found') + + def __call__(self, + image: jnp.ndarray, + *, + train: bool = True, + debug: bool = False): + + init_outputs = self.initialization(image, train=train, debug=debug) + outputs = self.refinement(init_outputs, image, train=train, debug=debug) + + return outputs diff --git a/scenic/projects/boundary_attention/models/model_lib/deformable_attention_blocks.py b/scenic/projects/boundary_attention/models/model_lib/deformable_attention_blocks.py new file mode 100644 index 0000000000000000000000000000000000000000..262c07b4f97b3164e67cdd04d3ebb56a46d8d6a3 --- /dev/null +++ b/scenic/projects/boundary_attention/models/model_lib/deformable_attention_blocks.py @@ -0,0 +1,384 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Deformable attention model blocks.""" + +import functools +from typing import Optional + +import flax.linen as nn +from flax.linen import attention +import jax +import jax.numpy as jnp +import numpy as np +from scenic.projects.boundary_attention.models.model_lib import deformable_attention_utils +from scenic.projects.boundary_attention.models.model_lib import misc_blocks +from scenic.projects.boundary_attention.models.model_lib import rope_embedding + + +class DeformableTransformerBlock(nn.Module): + """Finds next hidden state given junction features and prev hidden state.""" + + deformation_type: str = 'simple' + offset_fn: str = 'dense' + max_offset: int = 30 + num_samples: int = 16 + M: int = 3 + C: int = 3 + patchsize: int = 5 + encoding_dim: int = 256 + num_heads: Optional[int] = 4 + num_layers: Optional[int] = 1 + attn_dropout_prob: Optional[float] = 0 + + @nn.compact + def __call__( + self, + hidden_state: jnp.ndarray, + embedded_hidden_state: jnp.ndarray, + train=True, + ): + + ref_xy = self.get_ref_xy(hidden_state.shape[1], hidden_state.shape[2]) + + # Process through transformer encoder layers + for ll in range(self.num_layers): + if self.deformation_type == 'simple': + hidden_state = DeformableEncoder( + self.num_samples, + self.offset_fn, + self.max_offset, + self.encoding_dim, + self.num_heads, + self.attn_dropout_prob, + name='EncoderBlock_{:d}'.format(ll), + )(hidden_state, embedded_hidden_state, ref_xy, train=train) + elif self.deformation_type == 'simple_with_rotary_embedding': + hidden_state = DeformableEncoderWithRotaryEmbedding( + self.num_samples, + self.offset_fn, + self.max_offset, + hidden_dim=hidden_state.shape[-1], + encoding_dim=self.encoding_dim, + num_heads=self.num_heads, + attn_dropout_prob=self.attn_dropout_prob, + name='EncoderBlock_{:d}'.format(ll), + )(hidden_state, embedded_hidden_state, ref_xy, train=train) + else: + hidden_state = DeformableEncoder( + self.num_samples, + self.offset_fn, + self.max_offset, + self.encoding_dim, + self.num_heads, + self.attn_dropout_prob, + name='EncoderBlock_{:d}'.format(ll), + )(hidden_state, embedded_hidden_state, ref_xy, train=train) + + # Return new hidden state + return hidden_state + + def get_ref_xy(self, hpatches, wpatches): + + # to do: change this...maybe + ref_xy = jnp.stack( + jnp.meshgrid(jnp.arange(hpatches), jnp.arange(wpatches), indexing='ij'), + axis=-1, + ) + + return ref_xy + + +class PredictOffsets(nn.Module): + """Predicts deformable attention sampling offsets.""" + + num_samples: int = 16 + offset_fn: str = 'dense' + max_offset: int = 30 + + @nn.compact + def __call__(self, hidden_state): + + if self.offset_fn == 'dense': + offsets = nn.DenseGeneral(features=(self.num_samples, 2), axis=-1, + kernel_init=nn.initializers.zeros, + bias_init=self.offset_bias_init, + name='SamplingOffsets')(hidden_state) + else: + offsets = nn.Conv( + features=(self.num_samples * 2), + kernel_size=(3, 3), + name='SamplingOffsets', + )(hidden_state) + offsets = jnp.reshape( + offsets, (*hidden_state.shape[:-1], self.num_samples, 2) + ) + + # Normalize offsets + normalized_offsets = ( + 2 * self.max_offset * nn.sigmoid(offsets) - self.max_offset + ) + + return normalized_offsets + + def offset_bias_init(self, rng, flat_shape, dtype) -> jax.Array: + """Initializes deformable attention sampling offsets.""" + + del rng, flat_shape, dtype + + sqn = np.ceil(np.sqrt(self.num_samples)) + n = np.square(sqn).astype(int) + init_bias = np.stack( + np.meshgrid( + np.linspace(-sqn // 2, sqn // 2, sqn.astype(int)), + np.linspace(-sqn // 2, sqn // 2, sqn.astype(int)), + indexing='ij', + ), + axis=-1, + ).reshape((n, 2))[: self.num_samples, :] + init_bias = init_bias / 15 + + return init_bias + + +class DeformableEncoder(nn.Module): + """Finds next hidden state.""" + + num_samples: int = 16 + offset_fn: str = 'dense' + max_offset: int = 30 + encoding_dim: int = 256 + num_heads: int = 4 + attn_dropout_prob: float = 0 + + @nn.compact + def __call__( + self, + hidden_state_q: jnp.ndarray, + hidden_state_kv: jnp.ndarray, + ref_xy: jnp.ndarray, + train: bool = True, + ): + + # 1. Calculate offsets + normalized_offsets = PredictOffsets(self.num_samples, + self.offset_fn, + self.max_offset)(hidden_state_q) + + # 2. Calculate sampling locations + sampling_locations = jnp.expand_dims(ref_xy, (0, 3,)) + normalized_offsets + + # 3. Threshold sampling locations so that they remain inside the image + sampling_locations = jnp.where(sampling_locations > + jnp.array((hidden_state_q.shape[1]-1, + hidden_state_q.shape[2]-1)), + jnp.array((hidden_state_q.shape[1]-1, + hidden_state_q.shape[2]-1)), + sampling_locations) + sampling_locations = jnp.where(sampling_locations < + jnp.zeros((2)), + jnp.zeros((2)), + sampling_locations) + + # 4. Sample hidden state using the offsets to get inputs_kv + inputs_kv = deformable_attention_utils.linearly_interpolate( + hidden_state_kv, sampling_locations + ) + + # 5. Add projected offsets as positional encodings to inputs_kv + inputs_q = jnp.expand_dims(hidden_state_q, 3) + inputs_kv = inputs_kv + nn.Dense(hidden_state_kv.shape[-1])( + normalized_offsets + ) + + # 6. Process through attention block to update the hidden state + attention_block = AttentionBlock( + hidden_state_q.shape[-1], + self.encoding_dim, + self.num_heads, + self.attn_dropout_prob, + name='AttentionBlock', + ) + hidden_state = attention_block(inputs_q, inputs_kv, train=train) + + return hidden_state + + +class AttentionBlock(nn.Module): + """Attention block. + + Attributes: + num_samples: number of points to sample per query + inputs_q: [N, H, W, 1, D)] = [batch_sizes...,length, features] + inputs_kv: [N, H, W, num_samples, D] = [batch_sizes..., length, features] + """ + + hidden_dim: int + mlp_hidden_dim: int + num_heads: int = 4 + dropout_prob: float = 0 + + @nn.compact + def __call__(self, inputs_q, inputs_kv, train=True): + + assert self.hidden_dim % self.num_heads == 0, ( + 'hidden_dim must be divisible by num_heads.') + + # Estimate the next hidden state + hidden_state = inputs_q + nn.MultiHeadDotProductAttention( + num_heads=self.num_heads)(inputs_q, inputs_kv, + deterministic=not train) + hidden_state = nn.LayerNorm()(hidden_state) + + # Process the hidden state with an additive MLP + mlp = misc_blocks.MLP(hidden_size=self.mlp_hidden_dim, + dropout_rate=self.dropout_prob, + name='MLP') + hidden_state = hidden_state + mlp(hidden_state, train=train) + + # A final layer norm + hidden_state = nn.LayerNorm()(hidden_state) + + return hidden_state.squeeze(-2) + + +class DeformableEncoderWithRotaryEmbedding(nn.Module): + """Finds next hidden state.""" + + num_samples: int = 16 + offset_fn: str = 'dense' + max_offset: int = 30 + hidden_dim: int = 72 + encoding_dim: int = 256 + num_heads: int = 3 + attn_dropout_prob: float = 0 + + rot_embed = rope_embedding.RotaryEmbedding2D(hidden_dim // num_heads) + + @nn.compact + def __call__(self, hidden_state_q, hidden_state_kv, ref_xy, train=True): + + # 0. Predict offsets + normalized_offsets = PredictOffsets(self.num_samples, + self.offset_fn, + self.max_offset)(hidden_state_q) + + # 1. Calculate sampling locations + sampling_locations = jnp.expand_dims(ref_xy, (0, 3,)) + normalized_offsets + + # 2. Threshold sampling locations so that they remain inside the image + sampling_locations = jnp.where(sampling_locations > + jnp.array((hidden_state_q.shape[1]-1, + hidden_state_q.shape[2]-1)), + jnp.array((hidden_state_q.shape[1]-1, + hidden_state_q.shape[2]-1)), + sampling_locations) + sampling_locations = jnp.where(sampling_locations < + jnp.zeros((2)), + jnp.zeros((2)), + sampling_locations) + + # 3. Project Hidden state to Q and KV + dense = functools.partial( + nn.DenseGeneral, + axis=-1, + features=(self.num_heads, hidden_state_q.shape[-1] // self.num_heads) + ) + + # project inputs_q to multi-headed q/k/v + # dimensions are then [batch..., length, n_heads, n_features_per_head] + query, key, value = ( + dense(name='query')(hidden_state_q), + dense(name='key')(hidden_state_kv), + dense(name='value')(hidden_state_kv)) + + query = jnp.expand_dims(query, 3) # (1, 109, 109, 1, 4, 32) + key_flat = key.reshape((*key.shape[:-2], -1)) + value_flat = value.reshape((*value.shape[:-2], -1)) + + # 4. Sample KV at offset locations + sampled_keys = deformable_attention_utils.linearly_interpolate( + key_flat, sampling_locations).reshape((*sampling_locations.shape[:-1], + self.num_heads, -1)) + sampled_values = deformable_attention_utils.linearly_interpolate( + value_flat, sampling_locations).reshape((*sampling_locations.shape[:-1], + self.num_heads, -1)) + + # 4. Add rotary embedding to q as well as sampled keys and values + sinusoid_inp = self.rot_embed.get_pos(sampling_locations) + + sampled_keys_with_pos = self.rot_embed.apply_2d_rotary_pos_emb( + sampled_keys, sinusoid_inp) + sampled_values_with_pos = self.rot_embed.apply_2d_rotary_pos_emb( + sampled_values, sinusoid_inp) + + xy_grid = jnp.expand_dims( + jnp.stack(jnp.meshgrid(jnp.arange(hidden_state_q.shape[1]), + jnp.arange(hidden_state_q.shape[2]), + indexing='ij'), axis=-1), (0, 3,)) + query_with_pos = self.rot_embed.calc_and_apply(query, xy_grid) + + # Define attention block and update hidden state + attention_block = RotaryAttentionBlock(hidden_state_q.shape[-1], + self.encoding_dim, + self.num_heads, + self.attn_dropout_prob, + name='AttentionBlock') + hidden_state = attention_block(hidden_state_q, + query_with_pos, + sampled_keys_with_pos, + sampled_values_with_pos, + train=train) + + return hidden_state + + +class RotaryAttentionBlock(nn.Module): + """Attention block with rotary positional embedding. + + Attributes: + num_samples: number of points to sample per query + query: [N, H, W, 1, D)] + key: [N, H, W, num_samples, D] + value: [N, H, W, num_samples, D] + """ + + hidden_dim: int + mlp_hidden_dim: int + num_heads: int = 4 + dropout_prob: float = 0 + + @nn.compact + def __call__(self, hidden_state, query, key, value, train=True): + + new_hidden = nn.DenseGeneral( + features=self.hidden_dim, + axis=(-3, -2, -1))(attention.dot_product_attention(query, key, value)) + + # 5. Calculate attention and find updated hidden state + hidden_state = hidden_state + new_hidden + + # 6. Continue normally + hidden_state = nn.LayerNorm()(hidden_state) + + # Process the hidden state with an additive MLP + mlp = misc_blocks.MLP(hidden_size=self.mlp_hidden_dim, + dropout_rate=self.dropout_prob, + name='MLP') + hidden_state = hidden_state + mlp(hidden_state, train=train) + + # A final layer norm + hidden_state = nn.LayerNorm()(hidden_state) + + return hidden_state diff --git a/scenic/projects/boundary_attention/models/model_lib/deformable_attention_utils.py b/scenic/projects/boundary_attention/models/model_lib/deformable_attention_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..27b722e42df636e9630f84c735433a579e618f94 --- /dev/null +++ b/scenic/projects/boundary_attention/models/model_lib/deformable_attention_utils.py @@ -0,0 +1,78 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Linearly interpolates the values of an array with a set of points.""" + +import functools +import jax +import jax.numpy as jnp + + +@functools.partial(jax.jit) +def linearly_interpolate(arr, points): + """Linearly interpolates the values of an array with a set of points. + + Args: + arr: An array of shape [batch_size, H, W, C] + points: An array of shape [batch_size, H, W, num_points, 2] + + Returns: + An array of shape [batch_size, H, W, num_points, C] + """ + + # Flatten the batch and grid dimensions of arr + batch_size, height, width, channels = arr.shape + arr_flat = arr.reshape(batch_size, height * width, channels) + + # Flatten the corresponding dimensions in points + points_flat = points.reshape(batch_size, height * width, -1, 2) + + # Ensure points are within the bounds + points_flat = points_flat.clip(0, jnp.array([[height - 1, width - 1]])) + + # Splitting points into h and w components + h, w = points_flat[..., 0], points_flat[..., 1] + + # Identify neighboring points + h_floor = jnp.floor(h).astype(jnp.int32) + w_floor = jnp.floor(w).astype(jnp.int32) + h_ceil = jnp.ceil(h).astype(jnp.int32).clip(0, height - 1) + w_ceil = jnp.ceil(w).astype(jnp.int32).clip(0, width - 1) + + # Compute 1D indices for the flattened array + idx_floor_floor = h_floor * width + w_floor + idx_floor_ceil = h_floor * width + w_ceil + idx_ceil_floor = h_ceil * width + w_floor + idx_ceil_ceil = h_ceil * width + w_ceil + + # Compute the interpolation weights + lh = height - h_floor + lw = width - w_floor + hh = 1 - lh + hw = 1 - lw + + # Gather the values from the four corners for each point + top_left = arr_flat[..., idx_floor_floor, :] + top_right = arr_flat[..., idx_floor_ceil, :] + bottom_left = arr_flat[..., idx_ceil_floor, :] + bottom_right = arr_flat[..., idx_ceil_ceil, :] + + # Perform interpolation + interpolated_values = (top_left * hh[..., None] * hw[..., None] + + top_right * hh[..., None] * lw[..., None] + + bottom_left * lh[..., None] * hw[..., None] + + bottom_right * lh[..., None] * lw[..., None]) + + # Reshape back to original grid and batch dimensions + return interpolated_values.reshape(batch_size, height, width, -1, channels) diff --git a/scenic/projects/boundary_attention/models/model_lib/deformable_refinement_blocks.py b/scenic/projects/boundary_attention/models/model_lib/deformable_refinement_blocks.py new file mode 100644 index 0000000000000000000000000000000000000000..79e4bdd466d05b31b2861ef9d86e7d30be20d734 --- /dev/null +++ b/scenic/projects/boundary_attention/models/model_lib/deformable_refinement_blocks.py @@ -0,0 +1,197 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Deformable Refinement Network.""" + +from collections.abc import Sequence +from typing import Any +from typing import Optional +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.projects.boundary_attention.models.model_lib import deformable_attention_blocks +from scenic.projects.boundary_attention.models.model_lib import misc_blocks + + +def pytrees_stack(pytrees, axis=0): + """Stacks a list of pytrees along a given axis.""" + results = jax.tree_util.tree_map( + lambda *values: jnp.stack(values, axis=axis), *pytrees + ) + return results + + +class DeformableRefinement(nn.Module): + """Base Refinement Network.""" + + refinement_blocks: Sequence[nn.Module] + + @nn.compact + def __call__(self, + init_hidden_state: jnp.ndarray, + image: jnp.ndarray, + *, + train: bool = True, + debug: bool = False): + + # Initialize inputs + hidden_state = init_hidden_state.copy() + patchsize_tokens = None + offset_tokens = None + global_features = image + + all_outputs = [] + # Do refinement + for block in self.refinement_blocks: + outputs = block(hidden_state, + init_hidden_state, + patchsize_tokens, + offset_tokens, + global_features, + image, + train=train, + debug=debug) + + # Update inputs after each block + hidden_state = outputs[-1]['hidden_state'] + global_features = outputs[-1]['global_features'] + patchsize_tokens = outputs[-1]['patchsize_tokens'] + + if outputs[-1]['offset_tokens'] is not None: + offset_tokens = outputs[-1]['offset_tokens'] + + # Save outputs + all_outputs.extend(outputs) + + return all_outputs + + +class DeformableRefinementBlock(nn.Module): + """Boundary Attention Block.""" + + refine_opts: ml_collections.ConfigDict + train_opts: ml_collections.ConfigDict + params2maps: Any + hidden2outputs: Optional[nn.Module] = None + + def setup(self): + + self.niters = self.refine_opts.niters + + if self.hidden2outputs is None: + self.hidden2outputs = misc_blocks.Hidden2OutputsBlock( + num_wedges=self.params2maps.num_wedges, + parameterization=self.params2maps.jparameterization, + params2maps=self.params2maps, + name='Hidden2OutputsBlock') + + self.attention_block = ( + deformable_attention_blocks.DeformableTransformerBlock( + deformation_type=self.refine_opts.get('deformation_type', 'simple'), + offset_fn=self.refine_opts.get('offset_fn', 'dense'), + max_offset=self.refine_opts.get('max_offset', 30), + num_samples=self.refine_opts.get('num_samples', 16), + M=self.params2maps.num_wedges, + C=self.params2maps.C, + patchsize=self.refine_opts.attention_patch_size, + encoding_dim=self.refine_opts.encoding_dim, + num_heads=self.refine_opts.num_attention_heads, + num_layers=self.refine_opts.num_transformer_layers, + attn_dropout_prob=self.refine_opts.attn_dropout_prob, + name='TransformerBlock')) + + self.residual_block = misc_blocks.ResidualBlock( + hidden_dim=self.refine_opts.hidden_dim, + name='ResidualBlock') + + self.ps_token = self.param('PatchsizeToken', + nn.initializers.lecun_normal(), + (1, 1, 1, self.refine_opts.ps_token_dim)) + self.est_maxps = nn.Dense( + 3, + kernel_init=nn.initializers.constant(1), + name='EstMaxPatchsize') + + if self.refine_opts.get('deformation_type', 'simple') == 'token': + self.offset_token = self.param( + 'OffsetToken', + nn.initializers.lecun_normal(), + (1, 1, 1, self.refine_opts.get('offset_token_dim', 8))) + + def __call__(self, + hidden_state: jnp.ndarray, + init_hidden_state: jnp.ndarray, + patchsize_tokens: Any, + offset_tokens: Any, + global_features: jnp.ndarray, + input_image: jnp.ndarray, + *, + train: bool = True, + debug: bool = False): + + refine_outputs = [] + + if patchsize_tokens is None: + patchsize_tokens = jnp.tile( + self.ps_token, + (hidden_state.shape[0], self.params2maps.H_patches, + self.params2maps.W_patches, 1)) + if (offset_tokens is None) and ( + self.refine_opts.get('deformation_type', 'simple') == 'token'): + offset_tokens = jnp.tile( + self.offset_token, + (hidden_state.shape[0], self.params2maps.H_patches, + self.params2maps.W_patches, 1)) + + for _ in range(self.niters): + + # Embed initial hidden state + hidden_state = self.residual_block(hidden_state, init_hidden_state) + + # Add a patchsize token to the hidden state + full_hidden_state = jnp.concatenate((hidden_state, patchsize_tokens), -1) + + if self.refine_opts.get('deformation_type', 'simple') == 'token': + full_hidden_state = jnp.concatenate((full_hidden_state, offset_tokens), + -1) + + # Do cross attention + output_hidden_state_with_ps_token = self.attention_block( + full_hidden_state, full_hidden_state, train=train) + + # Separate updated hidden state with patch size token + hidden_dim = hidden_state.shape[-1] + hidden_state = output_hidden_state_with_ps_token[:, :, :, :hidden_dim] + ps_token = output_hidden_state_with_ps_token[:, :, :, hidden_dim:] + + if self.refine_opts.get('deformation_type', 'simple') == 'token': + ps_token_dim = self.refine_opts.ps_token_dim + ps_token = ps_token[:ps_token_dim] + offset_tokens = ps_token[ps_token_dim:] + # to try: try stopping the gradients of the patchsize and offset tokens + + # Estimate patchsize distribution + patchsize_distribution = nn.softmax(self.est_maxps(ps_token), axis=-1) + + # Gather and save outputs + outputs = self.hidden2outputs(hidden_state, patchsize_distribution, + input_image, global_features, + self.train_opts, train=train) + outputs['patchsize_tokens'] = patchsize_tokens + outputs['offset_tokens'] = offset_tokens + + refine_outputs.append(outputs) + + return refine_outputs diff --git a/scenic/projects/boundary_attention/models/model_lib/initialization_blocks.py b/scenic/projects/boundary_attention/models/model_lib/initialization_blocks.py new file mode 100644 index 0000000000000000000000000000000000000000..6fc22c419eaf2a9ea4699df577b399a65389e8b3 --- /dev/null +++ b/scenic/projects/boundary_attention/models/model_lib/initialization_blocks.py @@ -0,0 +1,111 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Initialization blocks: patch mixer.""" +from typing import Optional, Any + +import flax.linen as nn +from jax import lax +import jax.numpy as jnp +import ml_collections +from scenic.projects.boundary_attention.models.model_lib import misc_blocks +from scenic.projects.boundary_attention.models.model_lib import patch_mixer_blocks + + +class PatchInitializer(nn.Module): + """Junction Predictor.""" + + init_opts: ml_collections.ConfigDict + train_opts: ml_collections.ConfigDict + params2maps: Any + hidden2outputs: Optional[nn.Module] = None + + @nn.compact + def __call__(self, + image: jnp.ndarray, + extras: Optional[Any] = None, + *, + train: bool = True, + debug: bool = False): + + if not(self.hidden2outputs): + hidden2outputs_block = misc_blocks.Hidden2OutputsBlock( + num_wedges=self.params2maps.num_wedges, + parameterization=self.params2maps.jparameterization, + params2maps=self.params2maps, + name='Hidden2OutputsBlock', + ) + else: + hidden2outputs_block = self.hidden2outputs + + # Define Junction-Mixer + junction_mixer = patch_mixer_blocks.PatchMixer( + tokens_rf=self.init_opts.junction_mixer_rf, + num_blocks=self.init_opts.num_junction_mixer_blocks, + hidden_dim=self.init_opts.hidden_dim, + tokens_conv_dim=self.init_opts.token_conv_dim, + channels_conv_dim=self.init_opts.channels_conv_dim, + padding=self.init_opts.junction_mixer_padding, + stride=self.init_opts.stride, + ) + + init_junction_block = InitJunctionBlock( + junction_mixer=junction_mixer, + patchsize=self.params2maps.patchsize, + hpatches=self.params2maps.hpatches, + wpatches=self.params2maps.wpatches, + crop_output=self.init_opts.get('crop_output', True), + ) + + if self.init_opts.get('normalize_input', True): + im_min = jnp.min(image, axis=(-2, -1), keepdims=True) + im_max = jnp.max(image, axis=(-2, -1), keepdims=True) + image_norm = (image - im_min) / (im_max - im_min) + else: + image_norm = image + + # Next, pass through the local block to get initial junction parameter + # estimates for each iteration of the patch mixer + init_hidden_state = init_junction_block(image_norm) + + init_outputs = hidden2outputs_block( + init_hidden_state, None, image, image, self.train_opts, train=train + ) + + return init_outputs + + +class InitJunctionBlock(nn.Module): + """Finds initial hidden_state given input image.""" + + junction_mixer: nn.Module + patchsize: int + hpatches: int + wpatches: int + crop_output: bool = True + + @nn.compact + def __call__(self, input_img: jnp.ndarray): + + hidden_states = self.junction_mixer(input_img.transpose(0, 2, 3, 1)) + + if self.crop_output: + # Extract valid estimates (ones that aren't zero-padded) + start = self.patchsize // 2 + hidden_states = lax.dynamic_slice(hidden_states, (0, start, start, 0), + (hidden_states.shape[0], + self.hpatches, self.wpatches, + hidden_states.shape[-1])) + + return hidden_states diff --git a/scenic/projects/boundary_attention/models/model_lib/misc_blocks.py b/scenic/projects/boundary_attention/models/model_lib/misc_blocks.py new file mode 100644 index 0000000000000000000000000000000000000000..f3805ac8edbc0f5faee1806be90a02cfb53ad86f --- /dev/null +++ b/scenic/projects/boundary_attention/models/model_lib/misc_blocks.py @@ -0,0 +1,184 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Contains modules for junction images.""" + +from typing import Any, Optional, Callable + +import flax.linen as nn +import jax.numpy as jnp +import ml_collections + + +class Hidden2OutputsBlock(nn.Module): + """Finds junction images given hidden state.""" + + num_wedges: int + parameterization: str + params2maps: Callable[..., Any] + return_jparams: Optional[bool] = False + + @nn.compact + def __call__(self, + hidden_state: jnp.ndarray, + max_patchsize: Any, + input_image: jnp.ndarray, + global_features: jnp.ndarray, + train_opts: ml_collections.ConfigDict, + train: bool = True): + + if self.parameterization == 'standard': + num_classes = self.num_wedges + 4 + else: + raise NotImplementedError('No valid parameterization found') + + jparams_un = nn.Dense(num_classes, + bias_init=nn.initializers.uniform(), + name='head')(hidden_state) # [N, H, W, C_out] + + jparams = NormalizeOutputs(self.num_wedges, + self.parameterization)(jparams_un) + + if self.return_jparams: + return jparams + else: + all_maps = self.params2maps( + jparams, max_patchsize, input_image, global_features, train_opts + ) + all_maps['hidden_state'] = hidden_state + return all_maps + + +class NormalizeOutputs(nn.Module): + """Normalize junction parameters. + + Normalized so that sqrt(cos(omega)**2 + sin(omega)**2) = 1 + """ + + num_wedges: int + parameterization: str + + @nn.compact + def __call__(self, x) -> jnp.ndarray: + + if self.parameterization == 'standard': + # First map the orientation sin/cosine to be between -1 and 1 + xtanh = jnp.tanh(x[..., :2]) + + # Then normalize so that cos(theta)**2 + sin(theta)**2 = 1 + alpha = xtanh/jnp.linalg.norm(xtanh, axis=-1, keepdims=True) + + # Next, map the three angles to be between 0 and 1, + # and then scale to sum to 2*pi + omega = nn.sigmoid(x[..., 2:self.num_wedges+2]) + omega = omega/jnp.sum(omega, axis=-1, keepdims=True) * 2*jnp.pi + + out = jnp.concatenate((alpha, omega, x[..., self.num_wedges+2:]), axis=-1) + + else: + raise NotImplementedError('No valid parameterization found') + + return out + + +class ResidualBlock(nn.Module): + """Adds a residual and returns next hidden state.""" + + hidden_dim: ml_collections.ConfigDict + + @nn.compact + def __call__(self, hidden_state, prev_state, train=True): + + hidden_state = hidden_state + nn.Dense(self.hidden_dim, + name='Residual')(prev_state) + hidden_state = nn.LayerNorm()(hidden_state) + + return hidden_state + + +class GRU(nn.Module): + """GRU cell as nn.Module.""" + + @nn.compact + def __call__(self, carry: jnp.ndarray, inputs: jnp.ndarray, + train: bool = False) -> jnp.ndarray: + del train # Unused. + carry, _ = nn.GRUCell(features=carry.shape[-1])(carry, inputs) + # carry, _ = nn.GRUCell()(carry, inputs) + return carry + + +class Identity(nn.Module): + """Module that applies the identity function, ignoring any additional args.""" + + @nn.compact + def __call__(self, inputs: jnp.ndarray, **args) -> jnp.ndarray: + return inputs + + +class MLP(nn.Module): + """Simple MLP with one hidden layer and optional pre-/post-layernorm.""" + + hidden_size: int + output_size: Optional[int] = None + num_hidden_layers: int = 1 + activation_fn: str = 'relu' + output_activation_fn: str = 'relu' + layernorm: Optional[str] = None + activate_output: bool = False + residual: bool = False + use_bias: bool = True + kernel_init: Optional[str] = None + dropout_rate: float = 0.0 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, train: bool = False) -> jnp.ndarray: + output_size = self.output_size or inputs.shape[-1] + + x = inputs + + if self.layernorm == 'pre': + x = nn.LayerNorm()(x) + + activation_fn = getattr(nn, self.activation_fn) + output_activation_fn = getattr(nn, self.output_activation_fn) + kernel_init = ( + getattr(nn.initializers, self.kernel_init)() + if self.kernel_init + else nn.linear.default_kernel_init + ) + for _ in range(self.num_hidden_layers): + x = nn.Dense( + self.hidden_size, + use_bias=self.use_bias, + kernel_init=kernel_init, + )(x) + x = activation_fn(x) + x = nn.Dropout(rate=self.dropout_rate, deterministic=not train)(x) + x = nn.Dense( + output_size, + use_bias=self.use_bias, + kernel_init=kernel_init, + )(x) + + if self.activate_output: + x = output_activation_fn(x) + + if self.residual: + x = x + inputs + + if self.layernorm == 'post': + x = nn.LayerNorm()(x) + + return x diff --git a/scenic/projects/boundary_attention/models/model_lib/model_utils.py b/scenic/projects/boundary_attention/models/model_lib/model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..1f2332b3b8c013ab8798a9e1bf12f8b17efc492c --- /dev/null +++ b/scenic/projects/boundary_attention/models/model_lib/model_utils.py @@ -0,0 +1,72 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Custom unfolding for image patches.""" + +from typing import Tuple + +from jax import lax +import jax.numpy as jnp + + +def custom_unfold(im, patchsize, stride, hpatches, wpatches): + """Extract patches from an image. + + Args: + im: Array of shape [N, H, W, C] + patchsize: Tuple of integers representing the filter shape. + stride: Integer representing the stride or step size. + hpatches: Integer representing how many vertical patches. + wpatches: Integer representing how many horizontal patches. + + Returns: + Array of shape [N, C, R, R, H', W'] containing all image patches. + E.g. [k,l,:,:,i,j] is the lth channel of the (i,j)th patch of the kth image + """ + + patches = lax.conv_general_dilated_patches( + im, filter_shape=patchsize, + window_strides=[stride, stride], + padding='SAME', + dimension_numbers=('NHWC', 'HWIO', 'NHWC')) + + return patches.reshape([-1, hpatches, wpatches, + im.shape[-1], patchsize[0], + patchsize[1]]).transpose(0, 1, 2, 4, 5, 3) + + +def extract_patches(image: jnp.ndarray, + patchsize: Tuple[int, int], + stride: int): + """Extracts patches from the input image. + + Args: + image: The input image of shape (batch, height, width, channels). + patchsize (int): The size of the patches to extract. + stride (int): The stride or step size to move the window for each patch. + + Returns: + Extracted patches of shape (batch, out_height, out_width, + patch_size, patch_size, channels). + """ + + hpatches = image.shape[1] + wpatches = image.shape[2] + + # Create patches using einops + patches = custom_unfold(image, patchsize, stride, hpatches, wpatches) + mask = custom_unfold(jnp.ones_like(image)[:, :, :, 0:1], patchsize, stride, + hpatches, wpatches) + + return patches, mask diff --git a/scenic/projects/boundary_attention/models/model_lib/patch_mixer_blocks.py b/scenic/projects/boundary_attention/models/model_lib/patch_mixer_blocks.py new file mode 100644 index 0000000000000000000000000000000000000000..f352a5dc187a9bed12c48984e0333cb5bd532a61 --- /dev/null +++ b/scenic/projects/boundary_attention/models/model_lib/patch_mixer_blocks.py @@ -0,0 +1,187 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Code for Patch-Mixer.""" + +from typing import Optional + +import flax.linen as nn +import jax +import jax.numpy as jnp + + +class PatchMixer(nn.Module): + """Patch-Mixer architecture. + + Attributes: + tokens_rf: receptive field of token mixer + num_blocks: number of mixer blocks + hidden_dim: dimension to project input to + tokens_conv_dim: number of filters for token mixer + channels_conv_dim: number of filters for channel mixer + """ + + tokens_rf: int + num_blocks: int + hidden_dim: int + tokens_conv_dim: int + channels_conv_dim: int + padding: str = 'VALID' + stride: Optional[int] = 1 + + @nn.compact + def __call__(self, inputs): + + if self.stride == 1: + # Each pixel of the input image gets mapped to self.hidden_dim + x = nn.Dense(self.hidden_dim, bias_init=nn.initializers.uniform(), + name='stem')(inputs) # [N, H, W, self.hidden_dim] + + else: + # Extract pixels with stride: + x = nn.Conv(self.hidden_dim, kernel_size=(3, 3), + bias_init=nn.initializers.uniform(), + strides=self.stride, padding='SAME')(inputs) + x = nn.Dense(self.hidden_dim, bias_init=nn.initializers.uniform(), + name='stem')(x) + + # Conv mixer blocks + for _ in range(self.num_blocks): + x = MixerBlock(self.tokens_conv_dim, self.tokens_rf, + self.channels_conv_dim, padding=self.padding)(x) + + # Output of mixer blocks [N, H, W, self.hidden_dim] + x = nn.LayerNorm(name='pre_head_layer_norm')(x) + + return x + + +class MixerBlock(nn.Module): + """Mixer block layer. + + Attributes: + tokens_conv_dim: number of filters for token mixer + tokens_rf: filter size for token mixer (receptive field of tokens) + channels_conv_dim: number of filters for channel mixer + """ + tokens_conv_dim: int + tokens_rf: int + channels_conv_dim: int + padding: str = 'SAME' + + @nn.compact + def __call__(self, x): + + # Future to do: Reshape array prior to layer normalization + y = nn.LayerNorm()(x) + + # First, token mixing + y = TiedConvBlock(self.tokens_conv_dim, self.tokens_rf, + padding=self.padding, name='token_mixing')(y) + + x = x + y + y = nn.LayerNorm()(x) + + # Next, channel mixing + y = ConvBlock(self.channels_conv_dim, 1, name='channel_mixing')(y) + + return x + y + + +class TiedConvBlock(nn.Module): + """Two convolutions with gelu activation. + + Attributes: + conv_dim: number of filters + conv_rf: filter size + padding: 'SAME' or 'VALID' + """ + conv_dim: int + conv_rf: int + padding: str = 'SAME' + + @nn.compact + def __call__(self, x): + y = TiedWeightsConv(self.conv_dim, self.conv_rf, padding=self.padding)(x) + y = nn.gelu(y) + y = TiedWeightsConv(x.shape[-1], self.conv_rf, padding=self.padding)(y) + return y + + +class ConvBlock(nn.Module): + """Two convolutions with gelu activation. + + Attributes: + conv_dim: number of filters + conv_rf: filter size + """ + conv_dim: int + conv_rf: int + + @nn.compact + def __call__(self, x): + y = nn.Dense(self.conv_dim, bias_init=nn.initializers.uniform())(x) + y = nn.gelu(y) + y = nn.Dense(x.shape[-1], bias_init=nn.initializers.uniform())(y) + return y + + +class TiedWeightsConv(nn.Module): + """Convolution with tied weights. + + Attributes: + filters: number of filters + kernel_size: filter size + strides: strides + padding: 'SAME' or 'VALID' + dilation: dilation + """ + + filters: int + kernel_size: int + strides: tuple[int, int] = (1, 1) + padding: str = 'SAME' + dilation: tuple[int, int] = (1, 1) + + @nn.compact + def __call__(self, inputs): + """Applies convolution with tied weights. + + Args: + inputs: input data + + Returns: + output of convolution + """ + + def tied_weights_conv(inputs, kernel, bias): + num_channels = inputs.shape[-1] + kernel = jnp.repeat(kernel, num_channels, axis=2) + dimension_numbers = ('NHWC', 'HWIO', 'NHWC') + + return jax.lax.conv_general_dilated(inputs, kernel, + self.strides, self.padding, + self.dilation, self.dilation, + dimension_numbers) + bias + + kernel_init = nn.initializers.lecun_normal() + kernel_shape = (self.kernel_size, self.kernel_size, 1, self.filters) + kernel = self.param('kernel', kernel_init, kernel_shape) + + bias_init = nn.initializers.uniform() + bias_shape = (1, self.filters) + bias = jnp.expand_dims(self.param('bias', bias_init, bias_shape), (0, 1)) + + return tied_weights_conv(inputs, kernel, bias) + diff --git a/scenic/projects/boundary_attention/models/model_lib/refinement_blocks.py b/scenic/projects/boundary_attention/models/model_lib/refinement_blocks.py new file mode 100644 index 0000000000000000000000000000000000000000..72e68aec061eea7613b1759c5e019cbc01df2777 --- /dev/null +++ b/scenic/projects/boundary_attention/models/model_lib/refinement_blocks.py @@ -0,0 +1,279 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Refinement networks.""" + +from collections.abc import Sequence +from typing import Any, Dict, Optional + +import einops +import flax.linen as nn +import jax +from jax import lax +import jax.numpy as jnp +import ml_collections +from scenic.projects.boundary_attention.models.model_lib import attention_blocks +from scenic.projects.boundary_attention.models.model_lib import deformable_attention_blocks +from scenic.projects.boundary_attention.models.model_lib import misc_blocks + + +def pytrees_stack(pytrees, axis=0): + results = jax.tree_util.tree_map( + lambda *values: jnp.stack(values, axis=axis), *pytrees + ) + return results + + +def pytrees_cat(pytrees, axis=0): + results = jax.tree_util.tree_map( + lambda *values: jnp.concatenate(values, axis=axis), *pytrees + ) + return results + + +def pytrees_list(pytrees): + results = jax.tree_util.tree_map(lambda *values: list(values), *pytrees) + return results + + +class BaseRefinement(nn.Module): + """Base Refinement Network. + + This is the base class for all refinement networks. + """ + + refinement_blocks: Sequence[nn.Module] + + @nn.compact + def __call__( + self, + init_outputs: Dict[str, jnp.ndarray], + image: jnp.ndarray, + *, + train: bool = True, + debug: bool = False + ): + init_hidden_state = init_outputs['hidden_state'].copy() + hidden_state = init_outputs['hidden_state'] + global_features = init_outputs['global_features'] + all_outputs = [init_outputs] + patchsize_tokens = None + + for block in self.refinement_blocks: + outputs = block(hidden_state, + init_hidden_state, + patchsize_tokens, + global_features, + image, + train=train, + debug=debug) + all_outputs.extend(outputs) + + init_hidden_state = outputs[0]['hidden_state'] + hidden_state = outputs[-1]['hidden_state'] + global_features = outputs[-1]['global_features'] + patchsize_tokens = outputs[-1]['patchsize_tokens'] + + return all_outputs + + +class BaseRefinementBlock(nn.Module): + """Base Refinement Block. + + This is the base class for all refinement blocks. + """ + + refine_opts: ml_collections.ConfigDict + train_opts: ml_collections.ConfigDict + params2maps: Any + hidden2outputs: Optional[nn.Module] = None + use_deformable_attention: Optional[bool] = False + + def setup(self): + + self.niters = self.refine_opts.niters + + if self.hidden2outputs is None: + self.hidden2outputs_block = misc_blocks.Hidden2OutputsBlock( + num_wedges=self.params2maps.num_wedges, + parameterization=self.params2maps.jparameterization, + params2maps=self.params2maps, + name='Hidden2OutputsBlock') + else: + self.hidden2outputs_block = self.hidden2outputs + + if self.use_deformable_attention: + self.attention_block = ( + deformable_attention_blocks.DeformableTransformerBlock( + deformation_type=self.refine_opts.get( + 'deformation_type', 'simple' + ), + offset_fn=self.refine_opts.get('offset_fn', 'dense'), + max_offset=self.refine_opts.get('max_offset', 30), + num_samples=self.refine_opts.get('num_samples', 16), + M=self.params2maps.num_wedges, + C=self.params2maps.channels, + patchsize=self.refine_opts.attention_patch_size, + encoding_dim=self.refine_opts.encoding_dim, + num_heads=self.refine_opts.num_attention_heads, + num_layers=self.refine_opts.num_transformer_layers, + attn_dropout_prob=self.refine_opts.attn_dropout_prob, + name='TransformerBlock', + ) + ) + else: + self.attention_block = attention_blocks.TransformerBlock( + M=self.params2maps.num_wedges, + C=self.params2maps.channels, + patchsize=self.refine_opts.attention_patch_size, + encoding_dim=self.refine_opts.encoding_dim, + num_heads=self.refine_opts.num_attention_heads, + num_layers=self.refine_opts.num_transformer_layers, + attn_dropout_prob=self.refine_opts.attn_dropout_prob, + name='TransformerBlock', + ) + + self.residual_block = misc_blocks.ResidualBlock( + hidden_dim=self.refine_opts.hidden_dim, + name='ResidualBlock') + self.ps_token = self.param('PatchsizeToken', + nn.initializers.lecun_normal(), + (1, 1, 1, self.refine_opts.ps_token_dim)) + self.est_maxps = nn.Dense(3, kernel_init=nn.initializers.constant(1), + name='EstMaxPatchsize') + + def __call__(self, + hidden_state: jnp.ndarray, + init_hidden_state: jnp.ndarray, + patchsize_tokens: Any, + global_features: jnp.ndarray, + input_image: jnp.ndarray, + *, + train: bool = True, + debug: bool = False): + + # Crop the input image + start = self.params2maps.patchsize // 2 + if self.params2maps.stride == 1: + input_image_valid = lax.dynamic_slice( + input_image, + (0, 0, start, start), + ( + input_image.shape[0], + input_image.shape[1], + self.params2maps.hpatches, + self.params2maps.wpatches, + ), + ) + else: + sliced_input = jax.lax.dynamic_slice( + input_image, + (0, 0, start, start), + ( + input_image.shape[0], + input_image.shape[1], + self.params2maps.stride * self.params2maps.hpatches, + self.params2maps.stride * self.params2maps.wpatches, + ), + ) + input_image_valid = jax.lax.slice(sliced_input, (0, 0, 0, 0), + (sliced_input.shape[0], + sliced_input.shape[1], + sliced_input.shape[2], + sliced_input.shape[3]), + strides=(1, 1, self.params2maps.stride, + self.params2maps.stride)) + + refine_outputs = [] + for _ in range(self.niters): + # Embed initial hidden state + hidden_state = self.residual_block(hidden_state, init_hidden_state) + + if (patchsize_tokens is None) or (not self.refine_opts.reuse_token): + ps_token = jnp.tile( + self.ps_token, + ( + hidden_state.shape[0], + self.params2maps.hpatches, + self.params2maps.wpatches, + 1, + ), + ) + else: + ps_token = patchsize_tokens + + # Add a patchsize token to the hidden state + hidden_state_with_ps_token = jnp.concatenate((hidden_state, ps_token), -1) + + # First, crop the global_features: + if self.params2maps.stride == 1: + global_features_valid = lax.dynamic_slice( + global_features, + (0, 0, start, start), + ( + global_features.shape[0], + global_features.shape[1], + self.params2maps.hpatches, + self.params2maps.wpatches, + ), + ) + else: + sliced_features = jax.lax.dynamic_slice( + global_features, + (0, 0, start, start), + ( + global_features.shape[0], + global_features.shape[1], + self.params2maps.stride * self.params2maps.hpatches, + self.params2maps.stride * self.params2maps.wpatches, + ), + ) + global_features_valid = jax.lax.slice( + sliced_features, (0, 0, 0, 0), + (sliced_features.shape[0], sliced_features.shape[1], + sliced_features.shape[2], sliced_features.shape[3]), + strides=( + 1, 1, self.params2maps.hpatches, self.params2maps.wpatches)) + + hidden_state_proposal = jnp.concatenate( + (hidden_state, + einops.rearrange(global_features_valid, 'b f h w -> b h w f'), + einops.rearrange( + global_features_valid[:, 0:1, :, :], 'b f h w -> b h w f'), + einops.rearrange(input_image_valid, 'b f h w -> b h w f'), + ), + -1, + ) + + # Do cross attention + output_hidden_state_with_ps_token = self.attention_block( + hidden_state_with_ps_token, hidden_state_proposal, train=train) + + # Separate updated hidden state with patch size token + hidden_dim = hidden_state.shape[-1] + hidden_state = output_hidden_state_with_ps_token[:, :, :, :hidden_dim] + ps_token = output_hidden_state_with_ps_token[:, :, :, hidden_dim:] + patchsize_distribution = nn.softmax(self.est_maxps(ps_token), axis=-1) + + outputs = self.hidden2outputs_block(hidden_state, patchsize_distribution, + input_image, global_features, + self.train_opts, train=train) + outputs['patchsize_tokens'] = patchsize_tokens + + # Update global features + global_features = outputs['global_features'] + + refine_outputs.append(outputs) + + return refine_outputs diff --git a/scenic/projects/boundary_attention/models/model_lib/rope_embedding.py b/scenic/projects/boundary_attention/models/model_lib/rope_embedding.py new file mode 100644 index 0000000000000000000000000000000000000000..b3cf78c921aabd947be5891f592e79dea3ebe39f --- /dev/null +++ b/scenic/projects/boundary_attention/models/model_lib/rope_embedding.py @@ -0,0 +1,68 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Rotary embedding.""" + +import functools +import einops +import jax +import jax.numpy as jnp + + +class RotaryEmbedding2D: + """Calculates and applies the rotary embedding.""" + + def __init__(self, dim: int): + self.dim = dim + assert self.dim // 2 % 2 == 0 + + @functools.partial(jax.jit, static_argnums=(0,)) + def calc_and_apply(self, x, x_coords): + """Calculates and applies the rotary embedding.""" + + sinusoid_inp = self.get_pos(coords=x_coords) + return self.apply_2d_rotary_pos_emb(x, sinusoid_inp) + + # @functools.partial(jax.jit, static_argnums=(0,)) + def get_pos(self, coords): + """Calculates the position of the rotary embedding.""" + + # Half of each feature will get x, the other half will get y + inv_freq = 1.0 / (10000 ** (jnp.arange(0, + self.dim // 2, 2) / (self.dim // 2))) + + # Take inner product with inverse frequencies + sinusoid_inp = jnp.einsum("b x y n i , j -> b x y n i j", coords, inv_freq) + + # Reshape so that x and y are now stacked in a single dimension + sinusoid_inp = jnp.reshape(sinusoid_inp, (*coords.shape[:-1], -1)) + + return sinusoid_inp + + def rotate_every_two(self, x): + x1 = x[..., ::2] + x2 = x[..., 1::2] + + x = jnp.stack((-x2, x1), axis=-1) + + return einops.rearrange(x, "... d j -> ... (d j)") + + @functools.partial(jax.jit, static_argnums=(0,)) + def apply_2d_rotary_pos_emb(self, x, sinusoid_inp): + """Applies the rotary embedding to the input.""" + + sin = jnp.repeat(jnp.sin(sinusoid_inp)[..., None, :], 2, axis=-1) + cos = jnp.repeat(jnp.cos(sinusoid_inp)[..., None, :], 2, axis=-1) + + return (x * cos) + (self.rotate_every_two(x) * sin) diff --git a/scenic/projects/boundary_attention/noisy_flower.png b/scenic/projects/boundary_attention/noisy_flower.png new file mode 100644 index 0000000000000000000000000000000000000000..345be86d6bb537436c0b807f0d668b3fd68d03cd --- /dev/null +++ b/scenic/projects/boundary_attention/noisy_flower.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eddcc02fb2a1b260168683ef14c8c6be3b938a2c82e2e3e3139a164f292c24f5 +size 107741 diff --git a/scenic/projects/boundary_attention/requirements.txt b/scenic/projects/boundary_attention/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..0420e6a22247e33f58ec9db817711fac81fcfd6f --- /dev/null +++ b/scenic/projects/boundary_attention/requirements.txt @@ -0,0 +1,5 @@ +matplotlib +einops +shapely +typing-extensions +mediapy diff --git a/scenic/projects/boundary_attention/rm.png b/scenic/projects/boundary_attention/rm.png new file mode 100644 index 0000000000000000000000000000000000000000..af7420ddc091bafc7d85d8055d018bc183fed6a3 --- /dev/null +++ b/scenic/projects/boundary_attention/rm.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10045bbebd0b70d2afc0d7880aa11587402d29fde87ebacc354d9262500397fb +size 451349 diff --git a/scenic/projects/boundary_attention/train_utils.py b/scenic/projects/boundary_attention/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..1bb123da44c63c30757c0b2420962b7342045784 --- /dev/null +++ b/scenic/projects/boundary_attention/train_utils.py @@ -0,0 +1,268 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utils for training.""" + +import functools +import os +import re +from typing import Any, Dict, Mapping, Optional, Sequence, Tuple, Union + +import flax +from flax import linen as nn +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.common_lib import debug_utils +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils +from tensorflow.io import gfile + + +# Single-group reg-exps for int or float numerical substrings. +# captures sign: +_SIGNED_FLOAT_RE = re.compile( + r'([-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?)') + +SATURATION_MAGNITUDE = 12 + + +def restore_pretrained_params( + checkpoint_path: str, + train_state: Optional[train_utils.TrainState] = None, + assert_exist: bool = False, + step: Optional[int] = None) -> train_utils.TrainState: + """Restores the last checkpoint. + + First restores the checkpoint, which is an instance of TrainState that holds + the state of training. This function also take care converting pre-Linen + checkpoints. + + Args: + checkpoint_path: Directory for saving the checkpoint. + train_state: An instance of TrainState that holds the state of training. + assert_exist: Assert that there is at least one checkpoint exists in the + given path. + step: Step number to load or None to load latest. If specified, + checkpoint_path must be a directory. + + Returns: + Training state and an int which is the current step. + """ + if assert_exist: + glob_path = os.path.join(checkpoint_path, 'checkpoint*') + if not gfile.glob(glob_path): + raise ValueError('No checkpoint for the pretrained model is found in: ' + f'{checkpoint_path}') + + restored_train_state = checkpoints.restore_checkpoint(checkpoint_path, None, + step) + + if restored_train_state is None: + raise ValueError('No checkpoint for the pretrained model is found in: ' + f'{checkpoint_path}') + + if 'params' in restored_train_state: + # restored_train_state was trained using optax + restored_params = restored_train_state['params'] + if 'params' in restored_params: + restored_params = restored_params['params'] + restored_params = flax.core.freeze(restored_params) + else: + # restored_train_state was trained using flax.optim. Note that this does + # not convert the naming of pre-Linen checkpoints. + restored_params = restored_train_state['optimizer']['target'] + if 'params' in restored_params: # Backward compatibility. + restored_params = restored_params['params'] + restored_params = dict(checkpoints.convert_pre_linen(restored_params)) + restored_params = flax.core.freeze(restored_params) + + # restored_model_state = flax.core.freeze(restored_train_state['model_state']) + + if not train_state: + train_state = train_utils.TrainState() + params = restored_params + else: + # Inspect and compare the parameters of the model with the init-model. + params = pretrain_utils.inspect_params( + expected_params=train_state.params, + restored_params=restored_params, + fail_if_extra=False, + fail_if_missing=False, + fail_if_shapes_mismatch=False) + + params = pretrain_utils._replace_dict(train_state.params, restored_params) # pylint: disable=protected-access + train_state = train_state.replace( + # Inspect and compare the parameters of the model with the init-model. + params=params, + # model_state=restored_model_state, + # global_step=int(restored_train_state['global_step']), + # rng=restored_train_state['rng'], + # metadata=restored_train_state.get('metadata', None)) + ) + return train_state + + +def checkpoint_path_step(path: str) -> Optional[float]: + """Returns the step number of a checkpoint path. + + Copied from a private method in Flax. + + Args: + path: Checkpoint file path. + + Returns: + The step number derived from the filename as a float, or None if it can't be + determined. + """ + for s in _SIGNED_FLOAT_RE.split(path)[::-1]: + if _SIGNED_FLOAT_RE.match(s): + return float(s) + return None + + +def get_num_training_steps( + config: ml_collections.ConfigDict, + dataset_metadata: Dict[str, Any]) -> Tuple[int, Optional[int]]: + """Calculates the total number of training step and possibly steps_per_epoch. + + The main training loop is based on number of training steps. Thus, for + datasets + that we want to train based on number of epochs, we need to calculate the + total number of training steps. This function looks for `num_training_steps` + in config, if it exists it returns that as the total step and `None` as + `steps_per_epoch`. If num_training_steps doesn't exist, then it looks for + `num_training_epochs` and given the size of training data calculates the total + steps and steps_per_epoch. In this computation, we assume that + drop_remainder=True. + + Args: + config: Configuration of the experiment. + dataset_metadata: Meta-data that is generated by the dataset_builder. + + Returns: + total_steps: Total number of training steps. + steps_per_epoch: Number of steps in every epoch. + """ + num_total_train_examples = dataset_metadata.get('num_train_examples', 0) + + # We either use num_training_epochs or num_training_steps. + steps_per_epoch = num_total_train_examples // config.batch_size + + if config.get('num_training_steps'): + assert not config.get('num_training_epochs') + return config.num_training_steps, steps_per_epoch or None + else: + assert config.num_training_epochs and not config.get('num_training_steps') + return (steps_per_epoch * config.num_training_epochs), steps_per_epoch + + +def get_grad_weight_schedule_fn(config): + """Retrieves dataset gradient weight schedules.""" + + if config.get('grad_weight_schedules') is None: + grad_weights = config.get('grad_weights', 1.0) + return lambda _: grad_weights + + return lr_schedules.lr_fn_dict['compound'](config.grad_weight_schedules) + + +def initialize_model( + *, + model_def: nn.Module, + input_spec: Sequence[Union[Tuple[Tuple[int, ...], jnp.dtype], + Tuple[int, ...], None]], + config: ml_collections.ConfigDict, + rngs: Union[jnp.ndarray, Mapping[str, jnp.ndarray]], +): + """Initializes parameters and model state. + + Args: + model_def: Definition of a model. + input_spec: An iterable of (shape, dtype) pairs specifying the shape and + dtype of the inputs. If unspecified the dtype is float32. + config: Configurations of the initialization. + rngs: Jax rng keys. + + Returns: + Initial params, Init model_state, and number of trainable_params. + """ + batch_size = (config.batch_size // + jax.device_count()) if config.get('batch_size') else None + dummy_input = [] + for spec in input_spec: + if spec is not None: + in_st = debug_utils.input_spec_to_jax_shape_dtype_struct( + spec, batch_size=batch_size) + dummy_input.append(jnp.zeros(in_st.shape, in_st.dtype)) + else: + dummy_input.append(None) + print(type(model_def)) + # We want all parameters to be created in host RAM, not on any device, they'll + # be sent there later as needed, otherwise we already encountered two + # situations where we allocate them twice. + @functools.partial(jax.jit, backend='cpu') + def _initialize_model(rngs): + """Initialization function to be jitted.""" + init_model_state, init_params = model_def.init( + rngs, *dummy_input, train=False).pop('params') + # Set bias in the head to low value, such that loss is small initially. + if config.get('init_head_bias', None) is not None: + init_params = flax.core.unfreeze(init_params) + init_params['output_projection'] = optimizers.tree_map_with_names( + lambda p: jnp.full_like(p, config.init_head_bias), + init_params['output_projection'], + match_name_fn=lambda name: 'bias' in name) + init_params = flax.core.freeze(init_params) + return init_params, init_model_state + + if not isinstance(rngs, dict): + rngs = {'params': rngs} + init_params, init_model_state = _initialize_model(rngs) + # Pop out params rng: + rngs.pop('params') + + # Count number of trainable parameters: + num_trainable_params = debug_utils.log_param_shapes(init_params) + + # Count gflops: + count_flops = config.get('count_flops', + ml_collections.ConfigDict({'count_flops': True})) + if count_flops: + variables = {'params': init_params, **init_model_state} + flops = debug_utils.compute_flops( + flax_model_apply_fn=functools.partial( + model_def.apply, variables, train=False, debug=False, rngs=rngs), + input_spec=count_flops.get('input_spec', input_spec), + fuse_multiply_add=count_flops.get('fuse_multiply_add', True)) + gflops = flops / (10**9) + else: + gflops = None + + return init_params, init_model_state, num_trainable_params, gflops + + +def convert_from_utf8(val): + return ''.join([chr(b) for b in np.array(val)]) + + +def partial_mkdir(create_dir): + try: + gfile.MakeDirs(create_dir) + except: # pylint: disable=bare-except + pass diff --git a/scenic/projects/boundary_attention/trainer.py b/scenic/projects/boundary_attention/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..56352f8ea71d2fb2e526237a9d32bc6266aaa9ec --- /dev/null +++ b/scenic/projects/boundary_attention/trainer.py @@ -0,0 +1,420 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Boundary Attention Training Script.""" + +import functools +from typing import Any, Callable, Dict, Optional, Tuple + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import optax +from scenic.dataset_lib import dataset_utils +from scenic.projects.boundary_attention import eval_manager +from scenic.projects.boundary_attention import train_utils +from scenic.projects.boundary_attention.helpers import viz_utils +from scenic.projects.boundary_attention.types import ArrayDict, LossFn, MetricFn # pylint: disable=g-multiple-import, g-importing-member +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils as scenic_train_utils + + +# pylint: disable=unused-argument +def train_step( + train_state: scenic_train_utils.TrainState, + batch: ArrayDict, + flax_model: nn.Module, + grad_weight_schedule_fn: Callable[[int], float], + loss_fn: LossFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + log_grad_info: bool = False +) -> Tuple[scenic_train_utils.TrainState, Dict[str, jnp.ndarray], + ArrayDict]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Args: + train_state: The current training state. + batch: The batch of data that will be used for training. + flax_model: The Flax model used in training. + grad_weight_schedule_fn: A function that takes the current step and returns + the current learning rate. + loss_fn: The loss function used in training. + metrics_fn: The metrics function used in training. + config: The experiment config. + log_grad_info: Whether to log gradient information. + + Returns: + The new training state, the metrics, and the model outputs. + """ + rng = train_state.rng + + # Bind the rng to the host/device we are on. + # dropout_rng, rng = jax.random.split(rng) + dropout_rng, params_rng, codebook_rng, rng = jax.random.split(key=rng, num=4) + dropout_rng = scenic_train_utils.bind_rng_to_host_device( + dropout_rng, axis_name='batch', bind_to='device') + params_rng = scenic_train_utils.bind_rng_to_host_device( + params_rng, axis_name='batch', bind_to='device') + codebook_rng = scenic_train_utils.bind_rng_to_host_device( + codebook_rng, axis_name='batch', bind_to='device') + + rngs = {'dropout': dropout_rng, + 'params': params_rng, + 'codebook': codebook_rng} + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + model_outputs, new_model_state = flax_model.apply( + variables, + batch['image'], + mutable=['batch_stats'], + rngs=rngs, + train=True) + loss = jnp.mean(loss_fn(model_outputs, batch)) + return loss, (new_model_state, model_outputs) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (train_cost, + (new_model_state, + model_outputs)), grad = compute_gradient_fn(train_state.params) + + del train_cost + + # Clip gradients + # grad = jax_optimizers.clip_grads(grad, config.max_grad_norm) + + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if train_state.tx is None: + raise ValueError('train_state.tx is None') + + updates, new_opt_state = train_state.tx.update(grad, train_state.opt_state, + train_state.params) + new_params = optax.apply_updates(params=train_state.params, updates=updates) + + # Explicit weight decay, if necessary. + # if config.get('explicit_weight_decay', None) is not None: + # new_optimizer = new_optimizer.replace( + # target=optimizers.tree_map_with_names( + # functools.partial( + # optimizers.decay_weight_fn, + # lr=lr, + # decay=config.explicit_weight_decay), + # new_optimizer.target, + # match_name_fn=lambda name: 'kernel' in name)) + + metrics = metrics_fn(model_outputs, batch) + new_rng, _ = jax.random.split(rng) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + + return new_train_state, metrics, model_outputs + + +def maybe_restore_model_or_params(model: Any, + train_state: scenic_train_utils.TrainState, + workdir: str, + config: ml_collections.ConfigDict): + """Restores the model parameters from a checkpoint, if available.""" + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = scenic_train_utils.restore_checkpoint( + workdir, train_state) + + if (start_step == 0 # Which means "no" checkpoint is restored! + and len(config.init_from.get('checkpoint_path')) > 0): # pylint: disable=g-explicit-length-test + restored_model_cfg = config.init_from.get('model_config', config.model) + init_checkpoint_path = config.init_from.get('checkpoint_path') + if config.init_from.get('checkpoint_step', -1) != -1: + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True, + step=config.init_from.checkpoint_step) + else: + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + # Load params from the init_model. + train_state = model.init_from_train_state( # pytype: disable=attribute-error + train_state, restored_train_state, restored_model_cfg) + del restored_train_state + + elif (start_step == 0) and len(config.init_from.get('params_path')) > 0: # pylint: disable=g-explicit-length-test + restored_model_cfg = config.init_from.get('model_config', config.model) + init_checkpoint_path = config.init_from.get('params_path') + restored_train_state = train_utils.restore_pretrained_params( + init_checkpoint_path, train_state, assert_exist=True) + # Load params from the init_model. + train_state = model.init_from_train_state( # pytype: disable=attribute-error + train_state, restored_train_state, restored_model_cfg) + + return train_state, start_step + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[scenic_train_utils.TrainState, Optional[Dict[str, Any]], + Optional[Dict[str, Any]]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: A dataset object that contains train_iter, eval_iter, meta_data, + and optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current global_step, + model_state, rng, and the optimizer), train_summary and eval_summary which + are dict of metrics (from the last evaluation and train metric logging + respectively). These outputs are used for regression testing. + """ + lead_host = jax.process_index() == 0 + dataset_metadata = dataset.meta_data + train_task = '' # pylint: disable=unused-variable + + # Build the loss_and_metrics_fn, metrics, and flax_model. + model = model_cls(config, dataset_metadata) + + # Initialize model. + rng, params_rng, dropout_rng = jax.random.split(key=rng, num=3) + + input_specs = [] + for input_shape in dataset_metadata['input_shape']: + input_spec = (input_shape, dataset_metadata.get('input_dtype', + jnp.float32)) + input_specs.append(input_spec) + + (params, model_state, num_trainable_params, + gflops) = scenic_train_utils.initialize_model( + model_def=model.flax_model, + input_spec=input_specs, + config=config, + rngs={'params': params_rng, + 'dropout': dropout_rng}) + + # Get learning rate scheduler. + learning_rate_fn = lr_schedules.get_learning_rate_fn(config) + + # Create optimizer. + optimizer = optimizers.get_optimizer(config.optimizer_configs, + learning_rate_fn=learning_rate_fn, + params=params) + opt_state = jax.jit(optimizer.init, backend='cpu')(params) + + _, train_rng = jax.random.split(rng) + # Creat chrono class to track and store training statistics and metadata: + chrono = scenic_train_utils.Chrono() + + train_state = scenic_train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=optimizer, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + + train_state, start_step = maybe_restore_model_or_params(model, train_state, + workdir, config) + + chrono.load(train_state.metadata['chrono']) + + # Replicate the optimizer, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset_metadata) + + grad_weight_schedule_fn = train_utils.get_grad_weight_schedule_fn(config) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + grad_weight_schedule_fn=grad_weight_schedule_fn, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + config=config, + log_grad_info=config.get('log_grad_info', False)), + axis_name='batch', + # We can donate the buffer of train_state. train_batch might be needed for + # image summaries later. + donate_argnums=(0,), + ) + + log_eval_steps = config.get('log_eval_steps') + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + train_metrics = [] + extra_training_logs = [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + + logging.info('Starting training loop at step %d.', start_step) + + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + + if config.eval_during_train: + evaler = eval_manager.EvalManager(model, config, rng, report_progress) + + hooks = [report_progress] + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + + train_state, t_metrics, model_outputs = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `scenic_train_utils.unreplicate_and_get` here instead of right before + # writing summaries, but that means in each step, we have data transfer + # between tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + extra_training_logs.append({'learning_rate': learning_rate_fn(step)}) + + # Quick indication that training is happening. + logging.log_first_n(logging.INFO, 'Finished training step %d.', 5, step) + for h in hooks: + h(step) + + ############### LOG TRAIN SUMMARY ############### + if (step % log_summary_steps == 1) or (step + == total_steps) or chrono.warmup: + chrono.pause() + if lead_host: + chrono.tick(step, writer, write_note) + + train_summary = {} + prefix = 'train' + train_summary.update( + scenic_train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map( + scenic_train_utils.unreplicate_and_get, train_metrics + ), + extra_training_logs=jax.tree_util.tree_map( + jax.device_get, extra_training_logs + ), + writer=writer, + prefix=prefix, + ) + ) + + # ################### VISUALIZATION ################### + + if config.get('visualize', False): + write_images = viz_utils.get_viz_dict_from_batch(train_batch, + model_outputs, + model, + 'train') + write_images = jax.tree_util.tree_map( + scenic_train_utils.unreplicate_and_get, write_images + ) + writer.write_images(step, write_images) + + # ######################################################### + + writer.flush() + # Reset metric accumulation for next evaluation cycle. + train_metrics = [] + extra_training_logs = [] + chrono.resume() + + print('One step completed.') + + ################### EVALUATION ####################### + + if config.eval_during_train: + chrono.pause(wait_for=(train_state.params)) + evaler.run_one_eval( # pylint: disable=undefined-variable + train_state, step, dataset, writer, is_final=(step == total_steps)) + chrono.resume() + + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 1 or step == total_steps) and + config.checkpoint): + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = scenic_train_utils.sync_model_state_across_replicas( + train_state) + if lead_host: + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + scenic_train_utils.save_checkpoint(workdir, + unrep_train_state, + max_to_keep=100) + del unrep_train_state + chrono.resume() + + # Wait until computations are done before exiting. + jax.random.normal(jax.random.key(0), ()).block_until_ready() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/boundary_attention/types.py b/scenic/projects/boundary_attention/types.py new file mode 100644 index 0000000000000000000000000000000000000000..95ca71714a44687f318e37e45bdb9a5b39874a3c --- /dev/null +++ b/scenic/projects/boundary_attention/types.py @@ -0,0 +1,30 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Type aliases that are shared throughout the code.""" + +from typing import Callable, Dict, Iterable + +import jax.numpy as jnp + + +# Aliases for custom types: +ArrayDict = Dict[str, jnp.ndarray] + +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, jnp.ndarray]] + +LossFn = Callable[[ArrayDict, Dict[str, jnp.ndarray]], float] + +Initializer = Callable[[jnp.ndarray, Iterable[int], jnp.dtype], jnp.ndarray] diff --git a/scenic/projects/densevoc/README.md b/scenic/projects/densevoc/README.md new file mode 100644 index 0000000000000000000000000000000000000000..27eb07d633b1d459035cac8db446c0ea01a65ac1 --- /dev/null +++ b/scenic/projects/densevoc/README.md @@ -0,0 +1,101 @@ +# Dense Video Object Captioning from Disjoint Supervision + +> [**Dense Video Object Captioning from Disjoint Supervision**](http://arxiv.org/abs/2306.11729),\ +> Xingyi Zhou*, Anurag Arnab*, Chen Sun, Cordelia Schmid. + +

+ +Dense video object captioning (Dense VOC) is the task of detecting, tracking, and captioning object trajectories in a video. +We propose an end-to-end model for the task, and leverage a mixture of disjoint tasks +and datasets that supervise different parts of our model. + +## Getting started + +First install Scenic following the instructions +[here](https://github.com/google-research/scenic#quickstart). +Then install additional dependencies with: + +``` +pip install -r scenic/projects/densevoc/requirements.txt +``` + +Before training and evaluation, we need to set up [TFRecord](https://www.tensorflow.org/tutorials/load_data/tfrecord) +datasets that our data pipeline processes. +Please follow the instructions in `tools/build_*_tfrecord.py` to set up the datasets +for [Visual Genome](https://homes.cs.washington.edu/~ranjay/visualgenome/index.html), +[Spoken Moments-in-Time](http://moments.csail.mit.edu/spoken.html), +[VidSTG](https://github.com/Guaranteer/VidSTG-Dataset), +and [Video Localized Narratives](https://google.github.io/video-localized-narratives/). +The first two are used for pretraining, and the latter two for finetuning and evaluation. + +Next, create the COCO-format json annotation files for evaluation following +[tools/create_coco_json_from_tfrecord.py](tools/create_coco_json_from_tfrecord.py). +After that, update the generated data path in [configs/common.py](configs/common.py). + +Our model use a [CLIP](https://github.com/openai/CLIP) pretrained checkpoint. +Before training, run [tools/densevoc_convert_clip_b16_weights_to_jax.ipynb](tools/densevoc_convert_clip_b16_weights_to_jax.ipynb) +to convert and download the CLIP weights, and update the path in [configs/common.py](configs/common.py) accordingly. + +To train a config, e.g., `densevoc_vidstg`, run + +```shell +python -m scenic.projects.densevoc.main \ +--config=scenic/projects/densevoc/configs/densevoc_vidstg.py \ +--workdir=./output/densevoc_vidstg/ +``` + +By default, our models are trained on 16 TPU/GPU cores with a total batch size +16 videos (per-device batch size of 1). +It is possible to train with different number of devices and +different batch sizes following the linear learning rate rule. +Training can be done on accelerators with 16GB of memory. + +Our model feeds all video frames (up to 200 frames) to the model and produces +trajectories end-to-end, and therefore requires more TPU/GPU memory during inference. +Evaluation on VidSTG requires 32GB of accelerator memory, and we therefore use a separate config +for evaluation. +To perform evaluation on VidSTG, run + +```shell +python -m scenic.projects.densevoc.main \ +--config=scenic/projects/densevoc/configs/densevoc_vidstg_videoeval.py \ +--workdir=./output/densevoc_vidstg/ \ +--config.weights=/path/to/checkpoint/densevoc_vidstg +``` + +## Model Zoo + +**Pretrained models**. We report zero-shot evaluation on VidSTG below + +| | CHOTA | CapA | AssA | DetA | mAP | Checkpoint | +|--------------------------------------------------------------------------|--------|------|------|------|--------|-----------------| +| [grit_vg_384](configs/grit_vg_384.py) | - | - | - | - | 17.1 | Coming soon | +| [densevoc_disjoint_pretraining](configs/densevoc_disjoint_pretraining.py)| 31.1 | 9.8 | 59.6 | 51.4 | 39.5 | Coming soon | + +**VidSTG**. These models are finetuned on VidSTG from the pretrained model above. + +| | CHOTA | CapA | AssA | DetA | mAP | Checkpoint | +|----------------------------------------------------------------------------------------------|--------|------|------|------|-------|-----------------| +| [densevoc_vidstg_ftgrit_soft_aggregation](configs/densevoc_vidstg_ftgrit_soft_aggregation.py)| 54.6 | 38.4 | 65.9 | 64.4 | 68.7 | Coming soon | +| [densevoc_vidstg_ftgrit_hard_aggregation](configs/densevoc_vidstg_ftgrit_hard_aggregation.py)| 54.9 | 39.1 | 65.9 | 64.2 | 68.7 | Coming soon | +| [densevoc_vidstg](configs/densevoc_vidstg.py) | 56.9 | 39.7 | 70.4 | 65.8 | 71.5 | Coming soon | + +**Video Localized Narratives (VLN)**. These models are finetuned on VLN from the +pretrained model above. + +| | CHOTA | CapA | AssA | DetA | mAP | Checkpoint | +|----------------------------------------|--------|------|------|------|-------|-----------------| +| [densevoc_vln](configs/densevoc_vln.py)| 41.3 | 17.7 | 89.5 | 44.3 | 48.2 | Coming soon | + +## Citation + +If you use our Dense VOC project, please cite the following BibTeX entry: + +``` +@article{zhou2023dense, + title={Dense Video Object Captioning from Disjoint Supervision}, + author={Zhou, Xingyi and Arnab, Anurag and Sun, Chen and Schmid, Cordelia}, + journal={arXiv:2306.11729}, + year={2023} +} +``` diff --git a/scenic/projects/densevoc/__init__.py b/scenic/projects/densevoc/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/densevoc/chota.py b/scenic/projects/densevoc/chota.py new file mode 100644 index 0000000000000000000000000000000000000000..d517702790e56aaf7591f1535c5ed9827218faa5 --- /dev/null +++ b/scenic/projects/densevoc/chota.py @@ -0,0 +1,431 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""CHOTA evaluation metric. + +CHOTA adds a caption accuracy (CapA) term to the HOTA metric. + +This evaluation script assumes the annotations and the predictions are saved +in json in COCO detection-format (https://cocodataset.org/#format-data), +with two additonal keys for both ground turth and predictions: + 'track_id': int; the track identity. + 'caption': string; the object caption. + +The code is based on the HOTA metric implemented in +https://github.com/JonathonLuiten/TrackEval/blob/master/trackeval/\ +metrics/hota.py + +Usage: + +import json +from chota import CHOTA + +gt_data = json.load(open('path/to/coco/format/gt.json', 'r')) +pred_data = json.load(open('path/to/coco/format/pred.json', 'r')) +chota_evaluator = CHOTA() +results = chota_evaluator.compute_metrics(gt_data, pred_data) +print(results) + +""" + +from absl import logging +from pycocoevalcap import cider +from pycocoevalcap import spice +import numpy as np +from pycocoevalcap import meteor +import scipy + + +def box_iou(boxes1, boxes2): + """Compute box IoU. Boxes in format [l, t, w, h]. + + Args: + boxes1: array in shape n x 4 + boxes2: array in shape m x 4 + Returns: + iou: array in shape n x m + union: array in shape n x m + """ + wh1 = boxes1[:, 2:] + wh2 = boxes2[:, 2:] + area1 = wh1[:, 0] * wh1[:, 1] # [n] + area2 = wh2[:, 0] * wh2[:, 1] # [m] + lt = np.maximum(boxes1[:, None, :2], boxes2[None, :, :2]) # [n, m, 2] + rb = np.minimum( + boxes1[:, None, 2:] + boxes1[:, None, :2], + boxes2[None, :, 2:] + boxes2[None, :, :2]) # [n, m, 2] + wh = (rb - lt).clip(0.0) # [n, m, 2] + intersection = wh[:, :, 0] * wh[:, :, 1] # [n, m] + union = area1[:, None] + area2[None, :] - intersection # [n, m] + iou = np.where(union > 0, intersection / union, 0) + return iou + + +class CHOTA(object): + """Class which implements the CHOTA metrics. + + Attribute: + iou_thresh: list of floats; iou threshold to decide the true-positive or + false-positive. The overall results will be the average of all thresholds. + caption_metric: list of strings; caption similarity evaluation metrics. The + overall CapA will be the average of all metrics. + """ + + def __init__( + self, + iou_thresh=(0.5,), # np.arange(0.05, 0.99, 0.05) + caption_metric=('cider', 'meteor', 'spice')): + super().__init__() + self.array_labels = np.asarray(iou_thresh).reshape(-1) + self.integer_array_fields = [ + 'HOTA_TP', 'HOTA_FN', 'HOTA_FP', 'TP_with_caps'] + self.float_array_fields = [ + 'HOTA', 'DetA', 'AssA', 'DetRe', 'DetPr', 'AssRe', 'AssPr', 'LocA', + 'OWTA', 'CapA'] + self.float_fields = [] + self.fields = self.float_array_fields + self.integer_array_fields + ( + self.float_fields) + self.summary_fields = self.float_array_fields + self.float_fields + self.caption_metric = (caption_metric,) if isinstance( + caption_metric, str) else caption_metric + print('self.caption_metric', self.caption_metric) + self.caption_scorer = [] + for caption_metric in self.caption_metric: + if caption_metric == 'meteor': + self.caption_scorer.append(meteor.Meteor()) + elif caption_metric == 'cider': + self.caption_scorer.append(cider.Cider()) + elif caption_metric == 'spice': + self.caption_scorer.append(spice.Spice()) + else: + assert caption_metric == 'none', self.caption_metric + + def compute_caption_similarity(self, gt_captions, pred_captions, i=0): + """Compute caption metrics.""" + if len(gt_captions) == 0: # pylint: disable=g-explicit-length-test + return 0.0, np.ones((0,), dtype=np.float32) + references = { + i: [x] for i, x in enumerate(gt_captions)} + candidate = { + i: [x] for i, x in enumerate(pred_captions)} + _, ret = self.caption_scorer[i].compute_score(references, candidate) + # Return sum, will normalize by number of positive instances later. + return np.sum(ret), ret + + def eval_sequence(self, data): + """Calculates the HOTA metrics for one sequence. + + Args: + data: dict with keys: + 'num_tracker_dets': int + 'num_gt_dets': int + 'num_tracker_ids': int + 'num_gt_ids': int + 'gt_ids': list of arrays with length T, each in G_t + 'tracker_ids': list of arrays with length T, each in P_t + 'similarity_scores': list of arrays with length T, in (G_t, P_t) + Returns: + res: dict of array + """ + + # Initialise results + res = {} + for field in self.float_array_fields + self.integer_array_fields: + res[field] = np.zeros((len(self.array_labels)), dtype=np.float32) + + # Return result quickly if tracker or gt sequence is empty + if data['num_tracker_dets'] == 0: + res['HOTA_FN'] = data['num_gt_dets'] * np.ones( + (len(self.array_labels)), dtype=np.float32) + res['LocA'] = np.ones((len(self.array_labels)), dtype=np.float32) + for cap_metric in self.caption_metric: + res[f'CapA-{cap_metric}'] = np.ones( + (len(self.array_labels)), dtype=np.float32) + return res + if data['num_gt_dets'] == 0: + res['HOTA_FP'] = data['num_tracker_dets'] * np.ones( + (len(self.array_labels)), dtype=np.float32) + res['LocA'] = np.ones((len(self.array_labels)), dtype=np.float32) + for cap_metric in self.caption_metric: + res[f'CapA-{cap_metric}'] = np.ones( + (len(self.array_labels)), dtype=np.float32) + return res + + # Variables counting global association + potential_matches_count = np.zeros( + (data['num_gt_ids'], data['num_tracker_ids'])) + gt_id_count = np.zeros((data['num_gt_ids'], 1)) + tracker_id_count = np.zeros((1, data['num_tracker_ids'])) + + # First loop through each timestep and accumulate global track information. + for t, (gt_ids_t, tracker_ids_t) in enumerate( + zip(data['gt_ids'], data['tracker_ids'])): + # Count the potential matches between ids in each timestep + # These are normalised, weighted by the match similarity. + similarity = data['similarity_scores'][t] + sim_iou_denom = similarity.sum(0)[np.newaxis, :] + similarity.sum(1)[ + :, np.newaxis] - similarity + sim_iou = np.zeros_like(similarity) + sim_iou_mask = sim_iou_denom > 0 + np.finfo('float').eps + sim_iou[sim_iou_mask] = similarity[sim_iou_mask] / sim_iou_denom[ + sim_iou_mask] + potential_matches_count[ + gt_ids_t[:, np.newaxis], tracker_ids_t[np.newaxis, :]] += sim_iou + + # Calculate the total number of dets for each gt_id and tracker_id. + gt_id_count[gt_ids_t] += 1 + tracker_id_count[0, tracker_ids_t] += 1 + + # Calculate overall jaccard alignment score (before matching) between IDs + global_alignment_score = potential_matches_count / ( + gt_id_count + tracker_id_count - potential_matches_count) + matches_counts = [ + np.zeros_like(potential_matches_count) for _ in self.array_labels] + + matched_gt_captions = [[] for _ in self.array_labels] + matched_pred_captions = [[] for _ in self.array_labels] + # Calculate scores for each timestep + for t, (gt_ids_t, tracker_ids_t) in enumerate( + zip(data['gt_ids'], data['tracker_ids'])): + # Deal with the case that there are no gt_det/tracker_det in a timestep. + if len(gt_ids_t) == 0: # pylint: disable=g-explicit-length-test + for a, unused_alpha in enumerate(self.array_labels): + res['HOTA_FP'][a] += len(tracker_ids_t) + continue + if len(tracker_ids_t) == 0: # pylint: disable=g-explicit-length-test + for a, unused_alpha in enumerate(self.array_labels): + res['HOTA_FN'][a] += len(gt_ids_t) + continue + + # Get matching scores between pairs of dets for optimizing HOTA + similarity = data['similarity_scores'][t] + score_mat = global_alignment_score[ + gt_ids_t[:, np.newaxis], tracker_ids_t[np.newaxis, :]] * similarity + + # Hungarian algorithm to find best matches + match_rows, match_cols = scipy.optimize.linear_sum_assignment(-score_mat) + gt_captions = data['gt_captions'][t] + pred_captions = data['pred_captions'][t] + + # Calculate and accumulate basic statistics + for a, alpha in enumerate(self.array_labels): + actually_matched_mask = similarity[ + match_rows, match_cols] >= alpha - np.finfo('float').eps + alpha_match_rows = match_rows[actually_matched_mask] + alpha_match_cols = match_cols[actually_matched_mask] + num_matches = len(alpha_match_rows) + res['HOTA_TP'][a] += num_matches + res['HOTA_FN'][a] += len(gt_ids_t) - num_matches + res['HOTA_FP'][a] += len(tracker_ids_t) - num_matches + if num_matches > 0: + res['LocA'][a] += sum( + similarity[alpha_match_rows, alpha_match_cols]) + matches_counts[a][ + gt_ids_t[alpha_match_rows], tracker_ids_t[alpha_match_cols]] += 1 + + if self.caption_metric != 'none' and num_matches > 0: + matched_gt_caption = [ + gt_captions[x] for x in alpha_match_rows if gt_captions[x]] + matched_gt_captions[a].extend(matched_gt_caption) + matched_pred_caption = [ + pred_captions[x] for x, y in zip( + alpha_match_cols, alpha_match_rows) if gt_captions[y]] + matched_pred_captions[a].extend(matched_pred_caption) + res['TP_with_caps'][a] += len(matched_gt_caption) + + # Calculate association scores (AssA, AssRe, AssPr) for the alpha value. + # First calculate scores per gt_id/tracker_id combo and then average over + # the number of detections. + for a, unused_alpha in enumerate(self.array_labels): + matches_count = matches_counts[a] + ass_a = matches_count / np.maximum( + 1, gt_id_count + tracker_id_count - matches_count) + res['AssA'][a] = np.sum(matches_count * ass_a) / np.maximum( + 1, res['HOTA_TP'][a]) + ass_re = matches_count / np.maximum(1, gt_id_count) + res['AssRe'][a] = np.sum(matches_count * ass_re) / np.maximum( + 1, res['HOTA_TP'][a]) + ass_pr = matches_count / np.maximum(1, tracker_id_count) + res['AssPr'][a] = np.sum(matches_count * ass_pr) / np.maximum( + 1, res['HOTA_TP'][a]) + + # Calculate final scores + res['LocA'] = np.maximum(1e-10, res['LocA']) / np.maximum( + 1e-10, res['HOTA_TP']) + for cap_metric_i, cap_metric in enumerate(self.caption_metric): + res[f'CapA-{cap_metric}'] = np.asarray([ + self.compute_caption_similarity( + matched_gt_captions_a, matched_pred_captions_a, cap_metric_i)[0] + for (matched_gt_captions_a, matched_pred_captions_a) in zip( + matched_gt_captions, matched_pred_captions)]) / np.maximum( + 1e-10, res['TP_with_caps']) + res = self._compute_final_fields(res) + return res + + def combine_sequences(self, all_res): + """Combines metrics across all sequences. + + Args: + all_res: dict of dict; video_id to res from eval_sequence. + Returns: + res: same format as eval_sequence. + """ + res = {} + for field in self.integer_array_fields: + res[field] = self._combine_sum(all_res, field) + for field in ['AssRe', 'AssPr', 'AssA']: + res[field] = self._combine_weighted_av( + all_res, field, res, weight_field='HOTA_TP') + loca_weighted_sum = sum( + [all_res[k]['LocA'] * all_res[k]['HOTA_TP'] for k in all_res.keys()]) + res['LocA'] = np.maximum(1e-10, loca_weighted_sum) / np.maximum( + 1e-10, res['HOTA_TP']) + for cap_metric in self.caption_metric: + capa_weighted_sum = sum( + [all_res[k][f'CapA-{cap_metric}'] * all_res[k][ + 'TP_with_caps'] for k in all_res.keys()]) + res[f'CapA-{cap_metric}'] = np.maximum( + 1e-10, capa_weighted_sum) / np.maximum(1e-10, res['TP_with_caps']) + res = self._compute_final_fields(res, caption_metrics=self.caption_metric) + return res + + @staticmethod + def _compute_final_fields(res, caption_metrics=()): + """Calculate sub-metric values which only depend on other values.""" + res['DetRe'] = res['HOTA_TP'] / np.maximum( + 1, res['HOTA_TP'] + res['HOTA_FN']) + res['DetPr'] = res['HOTA_TP'] / np.maximum( + 1, res['HOTA_TP'] + res['HOTA_FP']) + res['DetA'] = res['HOTA_TP'] / np.maximum( + 1, res['HOTA_TP'] + res['HOTA_FN'] + res['HOTA_FP']) + res['OWTA'] = np.sqrt(res['DetRe'] * res['AssA']) + res['HOTA'] = np.sqrt(res['DetA'] * res['AssA']) + + if len(caption_metrics) == 3: + res['CapA'] = 0 + for cap_metric in caption_metrics: + res['CapA'] += res[f'CapA-{cap_metric}'] / len(caption_metrics) + res['CHOTA'] = (res['DetA'] * res['AssA'] * res['CapA']) ** (1./ 3.) + return res + + @staticmethod + def _combine_sum(all_res, field): + """Combine sequence results via sum.""" + return sum([all_res[k][field] for k in all_res.keys()]) + + @staticmethod + def _combine_weighted_av(all_res, field, comb_res, weight_field): + """Combine sequence results via weighted average.""" + return sum( + [all_res[k][field] * all_res[k][weight_field] for k in all_res.keys()] + ) / np.maximum(1.0, comb_res[weight_field]) + + @staticmethod + def convert_coco_to_hota_format( + gt_data, pred_data, score_thresh=-1., caption_metric='none'): + """Convert coco format to HOTA required format. + + Args: + gt_data: coco json format with key "annotations" and "images". + pred_data: coco prediction format, list of dict in "annotation" format. + score_thresh: float; convert score-based detection to hard detection. + caption_metric: str; 'none', 'cider', 'meteor'. + Returns: + Dict of dict; video_id to data that will be used in eval_sequence. + """ + all_ret = {} + imageid2videoid = {x['id']: x['video_id'] for x in gt_data['images']} + video_ids = set(imageid2videoid.values()) + pred_data = [x for x in pred_data if x['score'] > score_thresh] + pred_data_video = {video_id: [] for video_id in video_ids} + gt_data_video = {video_id: [] for video_id in video_ids} + for x in pred_data: + pred_data_video[imageid2videoid[x['image_id']]].append(x) + for x in gt_data['annotations']: + gt_data_video[imageid2videoid[x['image_id']]].append(x) + for video_id in video_ids: + ret = {} + image_ids = sorted(set(x['id'] for x in gt_data['images'] + if imageid2videoid[x['id']] == video_id)) + ret['num_tracker_dets'] = len(pred_data_video[video_id]) + ret['num_gt_dets'] = len(gt_data_video[video_id]) + tracker_ids = set(x['track_id'] for x in pred_data_video[video_id]) + gt_ids = set(x['track_id'] for x in gt_data_video[video_id]) + ret['num_tracker_ids'] = len(tracker_ids) + ret['num_gt_ids'] = len(gt_ids) + pred_id_map = {v: k for k, v in enumerate(sorted(tracker_ids))} + gt_id_map = {v: k for k, v in enumerate(sorted(gt_ids))} + id2gts = {x: [] for x in image_ids} + id2preds = {x: [] for x in image_ids} + for x in gt_data_video[video_id]: + id2gts[x['image_id']].append(x) + for x in pred_data_video[video_id]: + id2preds[x['image_id']].append(x) + gt_ids, tracker_ids, similarity_scores = [], [], [] + gt_captions, pred_captions = [], [] + for image_id in image_ids: + gt_id = np.asarray( + [gt_id_map[x['track_id']] for x in id2gts[image_id]], + dtype=np.int32).reshape(-1) + tracker_id = np.asarray( + [pred_id_map[x['track_id']] for x in id2preds[image_id]], + dtype=np.int32).reshape(-1) + gt_boxes = np.asarray( + [x['bbox'] for x in id2gts[image_id]], + dtype=np.float32).reshape(-1, 4) + tracker_boxes = np.asarray( + [x['bbox'] for x in id2preds[image_id]], + dtype=np.float32).reshape(-1, 4) + gt_ids.append(gt_id) + tracker_ids.append(tracker_id) + similarity_scores.append(box_iou(gt_boxes, tracker_boxes)) + if caption_metric != 'none': + gt_captions.append([x['caption'] for x in id2gts[image_id]]) + pred_captions.append([x['caption'] for x in id2preds[image_id]]) + ret['gt_ids'] = gt_ids + ret['tracker_ids'] = tracker_ids + ret['similarity_scores'] = similarity_scores + ret['gt_captions'] = gt_captions + ret['pred_captions'] = pred_captions + all_ret[video_id] = ret + return all_ret + + def compute_metrics( + self, gt_data, pred_data, score_thresh=0.5): + """Compute HOTA on coco format. + + Args: + gt_data: coco json format with key "annotations" and "images". + pred_data: coco prediction format, list of dict in "annotation" format. + score_thresh: float; convert score-based detection to hard detection. + Returns: + Dict of floats; evaluation results. + """ + logging.info('Converting format...') + eval_data = self.convert_coco_to_hota_format( + gt_data, pred_data, score_thresh=score_thresh, + caption_metric=self.caption_metric) + logging.info('Evaluating sequences...') + sequence_results = {} + for i, (k, v) in enumerate(eval_data.items()): + if i % 100 == 0: + logging.info('%d of %d', i, len(eval_data)) + sequence_results[k] = self.eval_sequence(v) + logging.info('Combining results...') + final_results = self.combine_sequences(sequence_results) + final_results = { + k: float(v) if isinstance(v, (np.float32, float)) else float( + v.sum() / len(v)) + for k, v in final_results.items()} + return final_results diff --git a/scenic/projects/densevoc/configs/__init__.py b/scenic/projects/densevoc/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/densevoc/configs/common.py b/scenic/projects/densevoc/configs/common.py new file mode 100644 index 0000000000000000000000000000000000000000..dcdfb0c32cdc3ba4ba8943e096bc0262ae526c0a --- /dev/null +++ b/scenic/projects/densevoc/configs/common.py @@ -0,0 +1,52 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Common variables for Dense VOC.""" +# pylint: disable=line-too-long + +# Download from +# https://huggingface.co/google-bert/bert-base-uncased/blob/main/vocab.txt +BERT_TOKENIZER_PATH = '/path/to/bert-base-uncased/vocab.txt' + +NUM_EXAMPLES_SMIT_TRAIN = 481094 +NUM_EXAMPLES_COCO_TRAIN = 118287 +NUM_VG_TRAIN_EXAMPLES = 77396 +NUM_VG_VAL_EXAMPLES = 5000 +NUM_VIDSTG_TRAIN_VIDEOS = 5436 +NUM_VIDSTG_VAL_VIDEOS = 603 +NUM_VIDSTG_VAL_FPS1_MAX40F_IMAGES = 16434 +NUM_VLN_TRAIN_VIDEOS = 5136 +NUM_VLN_VAL_SEGMENTS = 2451 + +Build VG tf records using `tools/build_vg_tfrecord.py` +VG_TRAIN_PATH = '/path/to/vg/tfrecords/train.tfrecord@128' +VG_TEST_PATH = '/path/to/vg/tfrecords/test.tfrecord' +VG_TEST_ANN_PATH = '/path/to/vg/annotations/test.json' +# Build SMiT tfrecord using `tools/build_smit_tfrecord.py` +SMIT_TRAIN_PATH = '/path/to/smit_train.tfrecord@1024' +# Build VidSTG tfrecord using `tools/build_vidstg_tfrecord.py` +VIDSTG_TRAIN_VIDEO_TFRECORD_PATH = '/path/to/vidstg.video.caption.train.tfrecord@256' +VIDSTG_VAL_VIDEO_TFRECORD_PATH = '/path/to/vidstg.video.max200f.caption.val.tfrecord@32' +# Build VidSTG image tfrecord in tools/convert_video_tfrecord_to_image_tfrecord.py +VIDSTG_VAL_IMAGE_TFRECORD_PATH = '/path/to/vidstg.image.max200f.caption.val.tfrecord@32' +# Create the coco format json using `tools/create_coco_json_from_tfrecord.py` +VIDSTG_VAL_VIDEO_ANN_PATH = '/path/to/vidstg_max200f_val_coco_format.json' +VIDSTG_VAL_IMAGE_ANN_PATH = VIDSTG_VAL_VIDEO_ANN_PATH +# Build VLN tfrecord using `tools/build_vng_tfrecord.py` +VLN_UVO_TRAIN_PATH = '/path/to/vng_uvo_sparse_train.tfrecord@32' +VLN_UVO_VAL_PATH = '/path/to/vng_uvo_sparse_val.tfrecord@32' +# Create the coco format json using `tools/create_coco_json_from_tfrecord.py` +VLN_UVO_VAL_ANN_PATH = '/path/to/vng_uvo_sparse_val_coco_format.json' +# Convert CLIP weights using `tools/densevoc_convert_clip_b16_weights_to_jax.ipynb` +CLIP_WEIGHT_PATH = '/path/to/clip_b_16/' diff --git a/scenic/projects/densevoc/configs/densevoc_disjoint_pretraining.py b/scenic/projects/densevoc/configs/densevoc_disjoint_pretraining.py new file mode 100644 index 0000000000000000000000000000000000000000..6b1d3234944739cd9ecb36d7114a420641790af4 --- /dev/null +++ b/scenic/projects/densevoc/configs/densevoc_disjoint_pretraining.py @@ -0,0 +1,172 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""DenseVOC config. + +""" + +import ml_collections +from scenic.projects.densevoc.configs import common + + +def get_config(): + """Returns the config.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'densevoc_disjoint_pretraining' + config.model = ml_collections.ConfigDict() + + # Dataset. + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.is_video_dataset_train = True + config.dataset_configs.is_video_dataset_test = False + config.dataset_configs.temporal_stride = 4 + config.model.flatten_video_input = True + t, res = 8, 384 + config.dataset_configs.max_frames_train = t + config.dataset_configs.max_frames_test = t + config.dataset_configs.input_shape = (-1, t, res, res, 3) + config.dataset_configs.multi_dataset_training = True + config.dataset_configs.dataset_format = ( + 'imagedetection', 'imagedensecap-nodet', 'videocap', 'imagedetection-augment') + config.dataset_configs.dataset_sample_weights = (1., 1., 1., 1.,) + config.dataset_configs.max_frames_train = t + config.dataset_configs.max_frames_test = 1 + config.dataset_configs.train_data_path = ( + 'coco/2017', + common.VG_TRAIN_PATH, + common.SMIT_TRAIN_PATH, + 'coco/2017', + ) + + config.dataset_configs.test_data_path = common.VIDSTG_VAL_IMAGE_TFRECORD_PATH + config.dataset_configs.test_annotation_path = common.VIDSTG_VAL_IMAGE_ANN_PATH + config.dataset_configs.num_eval_examples = common.NUM_VIDSTG_VAL_FPS1_MAX40F_IMAGES + config.dataset_configs.tokenizer_weight_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.num_train_examples = ( + common.NUM_EXAMPLES_SMIT_TRAIN + common.NUM_VG_TRAIN_EXAMPLES + common.NUM_EXAMPLES_COCO_TRAIN + common.NUM_EXAMPLES_COCO_TRAIN) + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 1000 + config.dataset_configs.max_video_captions = 1 + config.dataset_configs.max_boxes = 64 + config.dataset_configs.max_text_tokens = 40 + config.dataset_configs.scale_range = (0.1, 2.0) + config.dataset_configs.crop_size = res + config.dataset_configs.size_divisibility = 32 + config.dataset_configs.ensure_sample_has_objects = False + config.data_dtype_str = 'float32' + + config.rng_seed = 0 + + # Model. + config.model.model_dtype_str = 'float32' + config.model.model_name = 'densevoc' + config.model.backbone_name = 'vitdet' + config.model.num_classes = -1 + config.model.strides = (8, 16, 32, 64, 128) + config.model.pixel_mean = (103.530, 116.280, 123.675) + config.model.pixel_std = (57.375, 57.120, 58.395) # For most other models + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.drop_path_rate = 0.1 + config.model.backbone_args.img_size = config.dataset_configs.crop_size + config.model.freeze_model_state = False + config.model.backbone_args.use_ln_pre = True + + s = 2 + config.model.fpn_range = ( + (0, 80 / s), (64 / s, 160 / s), (128 / s, 320 / s), + (256 / s, 640 / s), (512 / s, 100000 / s)) + + # CenterNet2 parameters + config.model.roi_num_classes = 1 + config.model.hm_weight = 0.5 + config.model.reg_weight = 1.0 + config.model.score_thresh = 0.0001 + config.model.pre_nms_topk_train = 2000 + config.model.post_nms_topk_train = 1000 + config.model.pre_nms_topk_test = 1000 + config.model.post_nms_topk_test = 256 + config.model.iou_thresh = 0.9 + config.model.roi_matching_threshold = (0.6,) + config.model.roi_nms_threshold = 0.5 + config.model.mult_caption_score = False + config.model.text_iou_thresh = 0.6 + config.model.object_feat_res = 7 + + config.model.num_text_proposals = 32 + config.model.roi_post_nms_num_detections = 16 + config.model.roi_samples_per_image = 128 + + config.model.with_tracking = True + config.model.tracking_loss_weight = 1.0 + + config.model.caption_with_track = False + config.model.roi_append_gt_boxes = True # False + config.model.trunc_track_score = 0.0 + config.model.asso_windows = -1 + + config.model.hard_tracking = False + config.model.frame_fuse_fn = 'concat' + + config.model.use_roi_box_in_training = False + + config.model.with_global_video_caption = True + config.model.num_frames = config.dataset_configs.max_frames_train + config.model.skip_global_caption_test = True + + config.model.use_loss_masks = True + + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.05 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.7 + config.optimizer.num_layers = 12 + config.optimizer.decay_layer_prefix = 'backbone/net/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + + # learning rate and training schedule + config.num_training_steps = 90000 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = (80000, 87500) + config.lr_configs.decay_factors = [0.1, 0.01] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 2e-4 + + # Pretrained_backbone. + config.weights = common.CLIP_WEIGHT_PATH + config.load_prefix = 'backbone/net/' + config.skip_wrong_shape = True + config.checkpoint_steps = 500 + config.log_eval_steps = 5000000 + + # Training. + config.batch_size = 32 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 20 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.inference_on_video = config.dataset_configs.is_video_dataset_test + config.video_eval_task = 'densecap' + + return config + + diff --git a/scenic/projects/densevoc/configs/densevoc_vidstg.py b/scenic/projects/densevoc/configs/densevoc_vidstg.py new file mode 100644 index 0000000000000000000000000000000000000000..f051ed8923c5098845915b8a0b9984ad7a03df05 --- /dev/null +++ b/scenic/projects/densevoc/configs/densevoc_vidstg.py @@ -0,0 +1,154 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""DenseVOC config. + +""" + +import ml_collections +from scenic.projects.densevoc.configs import common + + +def get_config(): + """Returns the config.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'densevoc_vidstg' + config.model = ml_collections.ConfigDict() + + # Dataset. + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.is_video_dataset_train = True + config.dataset_configs.is_video_dataset_test = False + config.model.flatten_video_input = True + config.dataset_configs.max_frames_train = 16 + config.dataset_configs.max_frames_test = 200 + config.dataset_configs.train_data_path = common.VIDSTG_TRAIN_VIDEO_TFRECORD_PATH + config.dataset_configs.test_data_path = common.VIDSTG_VAL_IMAGE_TFRECORD_PATH + config.dataset_configs.test_annotation_path = common.VIDSTG_VAL_IMAGE_ANN_PATH + config.dataset_configs.tokenizer_weight_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.num_train_examples = common.NUM_VIDSTG_TRAIN_VIDEOS + config.dataset_configs.num_eval_examples = common.NUM_VIDSTG_VAL_FPS1_MAX40F_IMAGES + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 1000 + config.dataset_configs.max_boxes = 8 + config.dataset_configs.max_text_tokens = 40 + config.dataset_configs.scale_range = (0.1, 2.0) + config.dataset_configs.crop_size = 384 + config.dataset_configs.size_divisibility = 32 + config.dataset_configs.ensure_sample_has_objects = False + config.data_dtype_str = 'float32' + + config.rng_seed = 0 + + # Model. + config.model.model_dtype_str = 'float32' + config.model.model_name = 'densevoc' + config.model.backbone_name = 'vitdet' + config.model.num_classes = -1 + config.model.strides = (8, 16, 32, 64, 128) + config.model.pixel_mean = (103.530, 116.280, 123.675) + config.model.pixel_std = (57.375, 57.120, 58.395) # For most other models + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.drop_path_rate = 0.1 + config.model.backbone_args.img_size = config.dataset_configs.crop_size + config.model.freeze_model_state = False + config.model.backbone_args.use_ln_pre = True + + s = 2 + config.model.fpn_range = ( + (0, 80 / s), (64 / s, 160 / s), (128 / s, 320 / s), + (256 / s, 640 / s), (512 / s, 100000 / s)) + + # CenterNet2 parameters + config.model.roi_num_classes = 1 + config.model.hm_weight = 0.5 + config.model.reg_weight = 1.0 + config.model.score_thresh = 0.0001 + config.model.pre_nms_topk_train = 2000 + config.model.post_nms_topk_train = 1000 + config.model.pre_nms_topk_test = 1000 + config.model.post_nms_topk_test = 256 + config.model.iou_thresh = 0.9 + config.model.roi_matching_threshold = (0.6,) + config.model.roi_nms_threshold = 0.5 + + config.model.mult_caption_score = False + config.model.text_iou_thresh = 0.6 + config.model.object_feat_res = 7 + config.model.with_temporal_localization = False + config.model.temporal_localization_loss_weight = 1.0 + config.model.with_tracking = True + config.model.tracking_loss_weight = 1.0 + config.model.num_text_proposals = 8 + config.model.roi_post_nms_num_detections = 16 + config.model.roi_samples_per_image = 32 + config.model.caption_with_track = True + config.model.roi_append_gt_boxes = False + config.model.trunc_track_score = 0.0 + config.model.asso_windows = 8 + config.model.use_roi_box_in_training = True + config.model.use_tracked_object_features = True + + config.model.hard_tracking = True + config.model.tracking_score_thresh = 0.7 + config.model.max_num_tracks = 32 + config.model.hard_tracking_frames = 6 + config.model.remove_bg_proposal_for_tracking = True + + config.model.hard_tracking_test = False + + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.05 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.7 + config.optimizer.num_layers = 12 + config.optimizer.decay_layer_prefix = 'backbone/net/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + + # learning rate and training schedule + config.num_training_steps = 45000 // 4 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = (40000 // 4, 43750 // 4) + config.lr_configs.decay_factors = [0.1, 0.01] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 1e-5 + + config.weights = '/path/to/densevoc_multidataset_pretraining' + config.skip_wrong_shape = True + config.checkpoint_steps = 500 + config.log_eval_steps = 5000000 + + # Training. + config.batch_size = 16 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 20 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.inference_on_video = config.dataset_configs.is_video_dataset_test + config.video_eval_task = 'densecap' + config.eval_chota = False + config.eval_only = False + + return config + + diff --git a/scenic/projects/densevoc/configs/densevoc_vidstg_ftgrit_hard_aggregation.py b/scenic/projects/densevoc/configs/densevoc_vidstg_ftgrit_hard_aggregation.py new file mode 100644 index 0000000000000000000000000000000000000000..2c58cbb1443c3317b4f70333d60a92491b06eae3 --- /dev/null +++ b/scenic/projects/densevoc/configs/densevoc_vidstg_ftgrit_hard_aggregation.py @@ -0,0 +1,154 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""DenseVOC config. + +""" + +import ml_collections +from scenic.projects.densevoc.configs import common + + +def get_config(): + """Returns the config.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'densevoc_vidstg_ftgrit_hard_aggregation' + config.model = ml_collections.ConfigDict() + + # Dataset. + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.is_video_dataset_train = True + config.dataset_configs.is_video_dataset_test = False + config.model.flatten_video_input = True + config.dataset_configs.max_frames_train = 16 + config.dataset_configs.max_frames_test = 200 + config.dataset_configs.train_data_path = common.VIDSTG_TRAIN_VIDEO_TFRECORD_PATH + config.dataset_configs.test_data_path = common.VIDSTG_VAL_IMAGE_TFRECORD_PATH + config.dataset_configs.test_annotation_path = common.VIDSTG_VAL_IMAGE_ANN_PATH + config.dataset_configs.tokenizer_weight_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.num_train_examples = common.NUM_VIDSTG_TRAIN_VIDEOS + config.dataset_configs.num_eval_examples = common.NUM_VIDSTG_VAL_FPS1_MAX40F_IMAGES + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 1000 + config.dataset_configs.max_boxes = 8 + config.dataset_configs.max_text_tokens = 40 + config.dataset_configs.scale_range = (0.1, 2.0) + config.dataset_configs.crop_size = 384 + config.dataset_configs.size_divisibility = 32 + config.dataset_configs.ensure_sample_has_objects = False + config.data_dtype_str = 'float32' + + config.rng_seed = 0 + + # Model. + config.model.model_dtype_str = 'float32' + config.model.model_name = 'densevoc' + config.model.backbone_name = 'vitdet' + config.model.num_classes = -1 + config.model.strides = (8, 16, 32, 64, 128) + config.model.pixel_mean = (103.530, 116.280, 123.675) + config.model.pixel_std = (57.375, 57.120, 58.395) + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.drop_path_rate = 0.1 + config.model.backbone_args.img_size = config.dataset_configs.crop_size + config.model.freeze_model_state = False + config.model.backbone_args.use_ln_pre = True + + s = 2 + config.model.fpn_range = ( + (0, 80 / s), (64 / s, 160 / s), (128 / s, 320 / s), + (256 / s, 640 / s), (512 / s, 100000 / s)) + + # CenterNet2 parameters + config.model.roi_num_classes = 1 + config.model.hm_weight = 0.5 + config.model.reg_weight = 1.0 + config.model.score_thresh = 0.0001 + config.model.pre_nms_topk_train = 2000 + config.model.post_nms_topk_train = 1000 + config.model.pre_nms_topk_test = 1000 + config.model.post_nms_topk_test = 256 + config.model.iou_thresh = 0.9 + config.model.roi_matching_threshold = (0.6,) + config.model.roi_nms_threshold = 0.5 + + config.model.mult_caption_score = False + config.model.text_iou_thresh = 0.6 + config.model.object_feat_res = 7 + config.model.with_temporal_localization = False + config.model.temporal_localization_loss_weight = 1.0 + config.model.with_tracking = True + config.model.tracking_loss_weight = 1.0 + config.model.num_text_proposals = 8 + config.model.roi_post_nms_num_detections = 16 + config.model.roi_samples_per_image = 32 + config.model.caption_with_track = True + config.model.roi_append_gt_boxes = False + config.model.trunc_track_score = 0.0 + config.model.asso_windows = 8 + config.model.use_roi_box_in_training = True + config.model.use_tracked_object_features = True + + config.model.hard_tracking = True + config.model.tracking_score_thresh = 0.7 + config.model.max_num_tracks = 32 + config.model.hard_tracking_frames = 6 + config.model.remove_bg_proposal_for_tracking = True + + config.model.hard_tracking_test = False + + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.05 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.7 + config.optimizer.num_layers = 12 + config.optimizer.decay_layer_prefix = 'backbone/net/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + + # learning rate and training schedule + config.num_training_steps = 45000 // 4 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = (40000 // 4, 43750 // 4) + config.lr_configs.decay_factors = [0.1, 0.01] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 1e-5 + + config.weights = '/path/to/grit_vg_384' + + config.skip_wrong_shape = True + config.checkpoint_steps = 500 + config.log_eval_steps = 5000000 + + # Training. + config.batch_size = 16 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 20 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.inference_on_video = config.dataset_configs.is_video_dataset_test + config.video_eval_task = 'densecap' + config.eval_chota = False + + return config + + diff --git a/scenic/projects/densevoc/configs/densevoc_vidstg_ftgrit_soft_aggregation.py b/scenic/projects/densevoc/configs/densevoc_vidstg_ftgrit_soft_aggregation.py new file mode 100644 index 0000000000000000000000000000000000000000..3bdada5b567d540b42462754a80f4726b3035307 --- /dev/null +++ b/scenic/projects/densevoc/configs/densevoc_vidstg_ftgrit_soft_aggregation.py @@ -0,0 +1,147 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""DenseVOC config. + +""" + +import ml_collections +from scenic.projects.densevoc.configs import common + + +def get_config(): + """Returns the config.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'densevoc_vidstg_ftgrit_soft_aggregation' + config.model = ml_collections.ConfigDict() + + # Dataset. + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.is_video_dataset_train = True + config.dataset_configs.is_video_dataset_test = False + config.model.flatten_video_input = True + config.dataset_configs.max_frames_train = 16 + config.dataset_configs.max_frames_test = 200 + config.dataset_configs.train_data_path = common.VIDSTG_TRAIN_VIDEO_TFRECORD_PATH + config.dataset_configs.test_data_path = common.VIDSTG_VAL_IMAGE_TFRECORD_PATH + config.dataset_configs.test_annotation_path = common.VIDSTG_VAL_IMAGE_ANN_PATH + config.dataset_configs.tokenizer_weight_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.num_train_examples = common.NUM_VIDSTG_TRAIN_VIDEOS + config.dataset_configs.num_eval_examples = common.NUM_VIDSTG_VAL_FPS1_MAX40F_IMAGES + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 1000 + config.dataset_configs.max_boxes = 8 + config.dataset_configs.max_text_tokens = 40 + config.dataset_configs.scale_range = (0.1, 2.0) + config.dataset_configs.crop_size = 384 + config.dataset_configs.size_divisibility = 32 + config.dataset_configs.ensure_sample_has_objects = False + config.data_dtype_str = 'float32' + + config.rng_seed = 0 + + # Model. + config.model.model_dtype_str = 'float32' + config.model.model_name = 'densevoc' + config.model.backbone_name = 'vitdet' + config.model.num_classes = -1 + config.model.strides = (8, 16, 32, 64, 128) + config.model.pixel_mean = (103.530, 116.280, 123.675) + config.model.pixel_std = (57.375, 57.120, 58.395) + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.drop_path_rate = 0.1 + config.model.backbone_args.img_size = config.dataset_configs.crop_size + config.model.freeze_model_state = False + config.model.backbone_args.use_ln_pre = True + + s = 2 + config.model.fpn_range = ( + (0, 80 / s), (64 / s, 160 / s), (128 / s, 320 / s), + (256 / s, 640 / s), (512 / s, 100000 / s)) + + # CenterNet2 parameters + config.model.roi_num_classes = 1 + config.model.hm_weight = 0.5 + config.model.reg_weight = 1.0 + config.model.score_thresh = 0.0001 + config.model.pre_nms_topk_train = 2000 + config.model.post_nms_topk_train = 1000 + config.model.pre_nms_topk_test = 1000 + config.model.post_nms_topk_test = 256 + config.model.iou_thresh = 0.9 + config.model.roi_matching_threshold = (0.6,) + config.model.roi_nms_threshold = 0.5 + + config.model.mult_caption_score = False + config.model.text_iou_thresh = 0.6 + config.model.object_feat_res = 7 + config.model.with_temporal_localization = False + config.model.temporal_localization_loss_weight = 1.0 + config.model.with_tracking = True + config.model.tracking_loss_weight = 1.0 + config.model.num_text_proposals = 8 + config.model.roi_post_nms_num_detections = 16 + config.model.roi_samples_per_image = 32 + config.model.caption_with_track = True + config.model.roi_append_gt_boxes = False + config.model.trunc_track_score = 0.0 + config.model.asso_windows = -1 + config.model.consistent_soft_track = True + + config.model.use_roi_box_in_training = True + config.model.use_tracked_object_features = True + + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.05 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.7 + config.optimizer.num_layers = 12 + config.optimizer.decay_layer_prefix = 'backbone/net/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + + # learning rate and training schedule + config.num_training_steps = 45000 // 4 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = (40000 // 4, 43750 // 4) + config.lr_configs.decay_factors = [0.1, 0.01] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 1e-5 + + config.weights = '/path/to/grit_vg_384' + config.skip_wrong_shape = True + config.checkpoint_steps = 500 + config.log_eval_steps = 5000000 + + # Training. + config.batch_size = 16 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 20 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.inference_on_video = config.dataset_configs.is_video_dataset_test + config.video_eval_task = 'densecap' + config.eval_chota = False + + return config + + diff --git a/scenic/projects/densevoc/configs/densevoc_vidstg_videoeval.py b/scenic/projects/densevoc/configs/densevoc_vidstg_videoeval.py new file mode 100644 index 0000000000000000000000000000000000000000..d111bc750dce10021799d07ccc3f3baa22679044 --- /dev/null +++ b/scenic/projects/densevoc/configs/densevoc_vidstg_videoeval.py @@ -0,0 +1,131 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""DenseVOC config. + +""" +import ml_collections +from scenic.projects.densevoc.configs import common + + +def get_config(): + """Returns the config.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'densevoc_vidstg_videoeval' + + # Dataset. + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.is_video_dataset_train = True + config.dataset_configs.is_video_dataset_test = True + config.dataset_configs.max_frames_train = 16 + config.dataset_configs.max_frames_test = 200 + config.dataset_configs.train_data_path = common.VIDSTG_TRAIN_VIDEO_TFRECORD_PATH + config.dataset_configs.test_data_path = common.VIDSTG_VAL_VIDEO_TFRECORD_PATH + config.dataset_configs.test_annotation_path = common.VIDSTG_VAL_VIDEO_ANN_PATH + config.dataset_configs.tokenizer_weight_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.num_train_examples = common.NUM_VIDSTG_TRAIN_VIDEOS + config.dataset_configs.num_eval_examples = common.NUM_VIDSTG_VAL_VIDEOS + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 1 + config.dataset_configs.max_boxes = 100 + config.dataset_configs.max_text_tokens = 40 + config.dataset_configs.scale_range = (0.1, 2.0) + config.dataset_configs.crop_size = 384 + config.dataset_configs.size_divisibility = 32 + config.data_dtype_str = 'float32' + config.rng_seed = 0 + + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'densevoc' + config.model.backbone_name = 'vitdet' + config.model.num_classes = -1 + config.model.strides = (8, 16, 32, 64, 128) + config.model.pixel_mean = (103.530, 116.280, 123.675) + config.model.pixel_std = (57.375, 57.120, 58.395) # For most other models + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.drop_path_rate = 0.1 + config.model.backbone_args.img_size = config.dataset_configs.crop_size + config.model.freeze_model_state = False + config.model.backbone_args.use_ln_pre = True + + s = 2 + config.model.fpn_range = ( + (0, 80 / s), (64 / s, 160 / s), (128 / s, 320 / s), + (256 / s, 640 / s), (512 / s, 100000 / s)) + + # CenterNet2 parameters + config.model.roi_num_classes = 1 + config.model.hm_weight = 0.5 + config.model.reg_weight = 1.0 + config.model.score_thresh = 0.0001 + config.model.pre_nms_topk_train = 2000 + config.model.post_nms_topk_train = 1000 + config.model.pre_nms_topk_test = 1000 + config.model.post_nms_topk_test = 256 + config.model.iou_thresh = 0.9 + config.model.roi_matching_threshold = (0.6,) + config.model.roi_nms_threshold = 0.5 + config.model.roi_score_threshold = 0.5 + + config.model.mult_caption_score = False + config.model.text_iou_thresh = 0.6 + config.model.object_feat_res = 7 + config.model.with_temporal_localization = False + config.model.temporal_localization_loss_weight = 1.0 + config.model.with_tracking = True + config.model.tracking_loss_weight = 1.0 + config.model.num_text_proposals = 128 # 8 + config.model.roi_post_nms_num_detections = 16 + config.model.roi_samples_per_image = 32 + config.model.caption_with_track = True + config.model.roi_append_gt_boxes = False + config.model.trunc_track_score = 0.0 + config.model.asso_windows = 8 + config.model.use_roi_box_in_training = True + config.model.use_tracked_object_features = False + + config.model.hard_tracking = True + config.model.tracking_score_thresh = 0.7 + config.model.max_num_tracks = 32 + config.model.hard_tracking_frames = 6 + config.model.remove_bg_proposal_for_tracking = True + + config.model.hard_tracking_test = True + config.model.tracking_iou_thresh = 0.4 + + config.weights = '/path/to/densevoc_vidstg' + + config.rng_seed = 0 + config.in_model_postprocess = True + config.batch_size = 8 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.eval_only = True + config.inference_on_video = True + config.video_eval_task = 'densecap' + config.eval_cap_switch = False + config.eval_chota = True + config.chota_caption_metric = ('cider', 'meteor', 'spice') + + return config + + diff --git a/scenic/projects/densevoc/configs/densevoc_vln.py b/scenic/projects/densevoc/configs/densevoc_vln.py new file mode 100644 index 0000000000000000000000000000000000000000..dd7c26dd9d21e5ee51fae0e21d40ca17df51b96c --- /dev/null +++ b/scenic/projects/densevoc/configs/densevoc_vln.py @@ -0,0 +1,158 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""DenseVOC config. + +""" +import ml_collections +from scenic.projects.densevoc.configs import common + + +def get_config(): + """Returns the config.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'densevoc_vln' + config.model = ml_collections.ConfigDict() + + # Dataset. + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.is_video_dataset_train = True + config.dataset_configs.is_video_dataset_test = True + config.model.flatten_video_input = True + config.dataset_configs.max_frames_train = 3 + config.dataset_configs.max_frames_test = 3 + config.dataset_configs.train_data_path = common.VLN_UVO_TRAIN_PATH + config.dataset_configs.test_data_path = common.VLN_UVO_VAL_PATH + config.dataset_configs.test_annotation_path = common.VLN_UVO_VAL_ANN_PATH + config.dataset_configs.tokenizer_weight_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.num_train_examples = common.NUM_VLN_TRAIN_VIDEOS + config.dataset_configs.num_eval_examples = common.NUM_VLN_VAL_SEGMENTS + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 1 + config.dataset_configs.max_boxes = 8 + config.dataset_configs.max_text_tokens = 40 + config.dataset_configs.scale_range = (0.1, 2.0) + config.dataset_configs.crop_size = 384 + config.dataset_configs.size_divisibility = 32 + config.data_dtype_str = 'float32' + config.rng_seed = 0 + + config.model.model_dtype_str = 'float32' + config.model.model_name = 'densevoc' + config.model.backbone_name = 'vitdet' + config.model.num_classes = -1 + config.model.strides = (8, 16, 32, 64, 128) + config.model.pixel_mean = (103.530, 116.280, 123.675) + config.model.pixel_std = (57.375, 57.120, 58.395) # For most other models + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.drop_path_rate = 0.1 + config.model.backbone_args.img_size = config.dataset_configs.crop_size + config.model.freeze_model_state = False + config.model.backbone_args.use_ln_pre = True + + s = 2 + config.model.fpn_range = ( + (0, 80 / s), (64 / s, 160 / s), (128 / s, 320 / s), + (256 / s, 640 / s), (512 / s, 100000 / s)) + + # CenterNet2 parameters + config.model.roi_num_classes = 1 + config.model.hm_weight = 0.5 + config.model.reg_weight = 1.0 + config.model.score_thresh = 0.0001 + config.model.pre_nms_topk_train = 2000 + config.model.post_nms_topk_train = 1000 + config.model.pre_nms_topk_test = 1000 + config.model.post_nms_topk_test = 256 + config.model.iou_thresh = 0.9 + config.model.roi_matching_threshold = (0.6,) + config.model.roi_nms_threshold = 0.5 + config.model.roi_score_threshold = 0.5 + + config.model.mult_caption_score = False + config.model.text_iou_thresh = 0.6 + config.model.object_feat_res = 7 + config.model.with_temporal_localization = False + config.model.temporal_localization_loss_weight = 1.0 + config.model.with_tracking = True + config.model.tracking_loss_weight = 1.0 + config.model.num_text_proposals = 128 # 8 + config.model.roi_post_nms_num_detections = 16 + config.model.roi_samples_per_image = 32 + config.model.caption_with_track = True + config.model.roi_append_gt_boxes = False + config.model.trunc_track_score = 0.0 + config.model.asso_windows = 8 + config.model.use_roi_box_in_training = True + config.model.use_tracked_object_features = False + + config.model.hard_tracking = True + config.model.tracking_score_thresh = 0.7 + config.model.max_num_tracks = 16 + config.model.hard_tracking_frames = 3 + config.model.remove_bg_proposal_for_tracking = True + + config.model.hard_tracking_test = True + config.model.tracking_iou_thresh = 0.4 + + config.weights = '' + + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.05 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.7 + config.optimizer.num_layers = 12 + config.optimizer.decay_layer_prefix = 'backbone/net/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + + # learning rate and training schedule + config.num_training_steps = 45000 // 4 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = (40000 // 4, 43750 // 4) + config.lr_configs.decay_factors = [0.1, 0.01] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 1e-5 + + config.weights = '/path/to/densevoc_multidataset_pretraining' + + config.skip_wrong_shape = True + config.checkpoint_steps = 500 + config.log_eval_steps = 5000000 + + # Training. + config.batch_size = 16 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.eval_only = False + config.inference_on_video = True + config.video_eval_task = 'densecap' + config.eval_cap_switch = False + config.eval_chota = True + config.chota_caption_metric = ('cider', 'meteor', 'spice') + # config.chota_caption_metric = 'cider' + + return config + + diff --git a/scenic/projects/densevoc/configs/grit_vg_384.py b/scenic/projects/densevoc/configs/grit_vg_384.py new file mode 100644 index 0000000000000000000000000000000000000000..3468a60b155a5632e712ffeecdb4e26d07aeda57 --- /dev/null +++ b/scenic/projects/densevoc/configs/grit_vg_384.py @@ -0,0 +1,128 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""DenseVOC config. + +""" + +import ml_collections +from scenic.projects.densevoc.configs import common + + +def get_config(): + """Returns the config.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'grit_vg_384' + + # Dataset. + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.train_data_path = common.VG_TRAIN_PATH + config.dataset_configs.test_data_path = common.VG_TEST_PATH + config.dataset_configs.test_annotation_path = common.VG_TEST_ANN_PATH + config.dataset_configs.tokenizer_weight_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.num_train_examples = common.NUM_VG_TRAIN_EXAMPLES + config.dataset_configs.num_eval_examples = common.NUM_VG_VAL_EXAMPLES + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 10_000 + config.dataset_configs.max_boxes = 100 + config.dataset_configs.max_text_tokens = 40 + config.dataset_configs.scale_range = (0.1, 2.0) + config.dataset_configs.crop_size = 384 + config.dataset_configs.size_divisibility = 32 + config.data_dtype_str = 'float32' + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'grit' + config.model.backbone_name = 'vitdet' + config.model.num_classes = -1 + config.model.strides = (8, 16, 32, 64, 128) + config.model.pixel_mean = (103.530, 116.280, 123.675) + config.model.pixel_std = (57.375, 57.120, 58.395) # For most other models + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.drop_path_rate = 0.1 + config.model.backbone_args.img_size = config.dataset_configs.crop_size + config.model.freeze_model_state = False + config.model.backbone_args.use_ln_pre = True + + s = 2 + config.model.fpn_range = ( + (0, 80 / s), (64 / s, 160 / s), (128 / s, 320 / s), + (256 / s, 640 / s), (512 / s, 100000 / s)) + + # CenterNet2 parameters + config.model.roi_num_classes = 1 + config.model.hm_weight = 0.5 + config.model.reg_weight = 1.0 + config.model.score_thresh = 0.0001 + config.model.pre_nms_topk_train = 2000 + config.model.post_nms_topk_train = 1000 + config.model.pre_nms_topk_test = 1000 + config.model.post_nms_topk_test = 256 + config.model.iou_thresh = 0.9 + config.model.roi_matching_threshold = (0.6,) + config.model.roi_nms_threshold = 0.5 + config.model.mult_caption_score = False + config.model.text_iou_thresh = 0.6 + config.model.object_feat_res = 7 + config.model.roi_samples_per_image = 512 + + # text + config.model.num_text_proposals = 64 + + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.05 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.7 + config.optimizer.num_layers = 12 + config.optimizer.decay_layer_prefix = 'backbone/net/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + + # learning rate and training schedule + config.num_training_steps = 45000 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = (40000, 43750) + config.lr_configs.decay_factors = [0.1, 0.01] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 1e-4 + + # Pretrained_backbone. + config.weights = common.CLIP_WEIGHT_PATH + config.load_prefix = 'backbone/net/' + config.skip_wrong_shape = True + config.checkpoint_steps = 500 + config.log_eval_steps = 5000000 + + # Training. + config.batch_size = 64 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 20 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/densevoc/densevoc_evaluator.py b/scenic/projects/densevoc/densevoc_evaluator.py new file mode 100644 index 0000000000000000000000000000000000000000..f319dc02a0cfa05e9b7878a45f9f27b2c66283b5 --- /dev/null +++ b/scenic/projects/densevoc/densevoc_evaluator.py @@ -0,0 +1,448 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Evaluator for dense video object captioning. + +Modified from scenic.projects.baseline.detr.train_utils.DetrGlobalEvaluator, +but with a different underlying evaluator. +""" +import copy +import json +import logging +import os +from typing import Any, Dict, Optional + +from absl import logging +import numpy as np + +from scenic.projects.densevoc import chota +from pycocoevalcap import meteor + +import tensorflow as tf + + +def box_iou(boxes1, boxes2): + """Compute box IoU. Boxes in format [l, t, w, h]. + + Args: + boxes1: array in shape n x 4 + boxes2: array in shape m x 4 + Returns: + iou: array in shape n x m + union: array in shape n x m + """ + wh1 = boxes1[:, 2:] + wh2 = boxes2[:, 2:] + area1 = wh1[:, 0] * wh1[:, 1] # [n] + area2 = wh2[:, 0] * wh2[:, 1] # [m] + lt = np.maximum(boxes1[:, None, :2], boxes2[None, :, :2]) # [n, m, 2] + rb = np.minimum( + boxes1[:, None, 2:] + boxes1[:, None, :2], + boxes2[None, :, 2:] + boxes2[None, :, :2]) # [n, m, 2] + wh = (rb - lt).clip(0.0) # [n, m, 2] + intersection = wh[:, :, 0] * wh[:, :, 1] # [n, m] + union = area1[:, None] + area2[None, :] - intersection # [n, m] + iou = np.where(union > 0, intersection / union, 0) + return iou + + +class DensecapEval(object): + """Evaluator for dense caption. + + This class reproduce the official evaluation for dense caption: + https://github.com/jcjohnson/densecap/blob/maste*/eval/eval_utils.lua + """ + merge_gt_boxes_iou = 0.7 + iou_threshs = (0.3, 0.4, 0.5, 0.6, 0.7) + meteor_threshs = (-1, 0, 0.05, 0.1, 0.15, 0.2, 0.25) + meteor_jar_path = None + java_jre_path = None + + def __init__( + self, + annotations_loc, + merge_gt_boxes=True, + eval_meteor=True, + ignore_empty_string=True, + eval_cap_switch=False, + eval_chota=False, + chota_caption_metric='cider', + cap_switch_thresh=0.5, + score_key='score', + meteor_jar_path=None, + java_jre_path=None, + ): + self.ignore_empty_string = ignore_empty_string + self.eval_meteor = eval_meteor + self.score_key = score_key + if isinstance(annotations_loc, str): + self.dataset = json.load(tf.io.gfile.GFile(annotations_loc, 'r')) + else: + self.dataset = annotations_loc + self.image_ids = set([x['id'] for x in self.dataset['images']]) + self.gts = {x: [] for x in self.image_ids} + self.eval_cap_switch = eval_cap_switch + self.cap_switch_thresh = cap_switch_thresh + self.meteor_jar_path = meteor_jar_path + self.java_jre_path = java_jre_path + self.eval_chota = eval_chota + self.chota_caption_metric = chota_caption_metric + + for x in self.dataset['annotations']: + self.gts[x['image_id']].append(x) + if merge_gt_boxes: + logging.info('Merging ground truth boxes...') + num_boxes = sum(len(x) for x in self.gts.values()) + logging.info('Num boxes before merging: %d', num_boxes) + for image_id in self.image_ids: + self.gts[image_id] = self.merge_gt_boxes( + self.gts[image_id], self.merge_gt_boxes_iou) + num_boxes = sum(len(x) for x in self.gts.values()) + self.num_boxes_after_merging = num_boxes + logging.info('Num boxes after merging: %d', num_boxes) + + self.dts = {x: [] for x in self.image_ids} + if self.eval_cap_switch: + self.videos = {} + for x in self.dataset['images']: + video_id = x['video_id'] + if video_id not in self.videos: + self.videos[video_id] = [] + self.videos[video_id].append(x['id']) + for k, v in self.videos.items(): + self.videos[k] = sorted(v) + + def compute_metrics(self, predictions): + """Evaluate metrics. + + Args: + predictions: list of dict. Each dict is a prediction of an *instance*, + with keys 'image_id', 'bbox', 'caption', 'score'. + + Returns: + results: a dict of string (metric name) to float. + """ + ori_predictions = copy.deepcopy(predictions) + predictions = copy.deepcopy(predictions) + all_dts = {x['id']: [] for x in self.dataset['images']} + for x in predictions: + all_dts[x['image_id']].append(x) + records = [] + logging.info('Computing metrics...') + logging.info('ignore_empty_string %s', self.ignore_empty_string) + for image_id in self.image_ids: + dts = sorted(all_dts[image_id], key=lambda x: -x[self.score_key]) + gts = self.gts[image_id] + dt_boxes = np.asarray([x['bbox'] for x in dts]).reshape(-1, 4) + gt_boxes = np.asarray([x['bbox'] for x in gts]).reshape(-1, 4) + ious = box_iou(dt_boxes, gt_boxes) + gt_used = np.zeros(len(gts), dtype=bool) + for i, dt in enumerate(dts): + # Unlike COCO mAP evaluation, the official densecap evaluation does not + # find the best "available" gt, but directly returns the best IoU gt. + if len(ious[i]) > 0: # pylint: disable=g-explicit-length-test + max_iou = np.max(ious[i]) + matched_gt_ind = np.argmax(ious[i]) + matched_caps = gts[matched_gt_ind]['captions'] + else: + max_iou = -1 + matched_gt_ind = -1 + matched_caps = [''] + matched = max_iou > 0 and not gt_used[matched_gt_ind] + if matched: + gt_used[matched_gt_ind] = True + if self.ignore_empty_string and '' in matched_caps: + dt['caption'] = 'EMPTY' + matched_caps = ['EMPTY'] + record = { + 'matched': matched, + 'iou': max_iou, + 'candidate': [dt['caption']], + 'references': matched_caps, + 'image_id': image_id, + 'score': dt[self.score_key], + } + records.append(record) + + if not self.ignore_empty_string: + records = [x for x in records if x['candidate'][0] != 'EMPTY'] + num_pos = sum(len( + [xx for xx in x if '' not in xx['captions']] + ) for x in self.gts.values()) + else: + num_pos = sum(len(x) for x in self.gts.values()) + records = sorted(records, key=lambda x: -x['score']) + references = {i: x['references'] for i, x in enumerate(records)} + candidate = {i: x['candidate'] for i, x in enumerate(records)} + num_preds = len(records) + + if self.eval_meteor: + logging.info('Computing METEOR...') + meteor_evaluator = meteor.Meteor( + meteor_jar_path=self.meteor_jar_path, java_jre_path=self.java_jre_path + ) + _, meteor_scores = meteor_evaluator.compute_score(references, candidate) + meteor_threshs = self.meteor_threshs + else: + meteor_scores = np.ones(num_preds, dtype=np.float32) + meteor_threshs = (-1,) + + detection_results, results = {}, {} + logging.info('Accumulating results...') + for iou_thresh in self.iou_threshs: + for meteor_thresh in meteor_threshs: + tp = np.zeros(num_preds, dtype=np.float32) + fp = np.zeros(num_preds, dtype=np.float32) + for i, record in enumerate(records): + if not record['references']: + fp[i] = 1 + else: + if record['matched'] and (record['iou'] >= iou_thresh) and ( + meteor_scores[i] > meteor_thresh): + tp[i] = 1 + else: + fp[i] = 1 + tp = np.cumsum(tp) + fp = np.cumsum(fp) + rec = tp / num_pos + prec = tp / (tp + fp) + ap = 0 + for t in range(100): + mask = rec >= t / 100. + prec_masked = prec * mask + if len(prec_masked) > 0: # pylint: disable=g-explicit-length-test + p = prec_masked.max() + else: + p = 0. + ap += p + ap = ap / 100. + if meteor_thresh < 0: + detection_results[f'mAP_detection_iou{iou_thresh:.1f}'] = ap + else: + results[f'mAP_iou{iou_thresh:.1f}_meteor{meteor_thresh:.2f}'] = ap + if self.eval_meteor: + results['mAP'] = sum(results.values()) / len(results) + print('mAP', results['mAP']) + results['mAP_detection'] = sum( + detection_results.values()) / len(detection_results) + results.update(detection_results) + print('mAP_detection', results['mAP_detection']) + + if self.eval_cap_switch: + results = self.eval_caption_switch(results, all_dts) + if self.eval_chota: + chota_evaluator = chota.CHOTA(caption_metric=self.chota_caption_metric) + results.update( + chota_evaluator.compute_metrics( + self.dataset, copy.deepcopy(ori_predictions))) + return results + + def eval_caption_switch(self, results, all_dts): + """Evaluate caption switch.""" + matched_caps_gt = {} + for image_id in self.image_ids: + matched_caps_gt[image_id] = {} + dts = sorted(all_dts[image_id], key=lambda x: -x[self.score_key]) + gts = self.gts[image_id] + dt_boxes = np.asarray([x['bbox'] for x in dts]).reshape(-1, 4) + gt_boxes = np.asarray([x['bbox'] for x in gts]).reshape(-1, 4) + ious = box_iou(dt_boxes, gt_boxes) + gt_used = np.zeros(len(gts), dtype=bool) + for i, dt in enumerate(dts): + if dts[i]['score'] < self.cap_switch_thresh: + break + if len(ious[i]) > 0: # pylint: disable=g-explicit-length-test + max_iou = np.max(ious[i]) + matched_gt_ind = np.argmax(ious[i]) + # matched_caps = gts[matched_gt_ind]['captions'] + else: + max_iou = -1 + matched_gt_ind = -1 + # matched_caps = [''] + matched = max_iou > 0. and not gt_used[matched_gt_ind] + if matched: + gt_used[matched_gt_ind] = True + matched_track_id = gts[matched_gt_ind]['track_id'] + matched_caps_gt[image_id][matched_track_id] = dt['caption'] + + cap_switch = 0 + for _, image_ids in self.videos.items(): + prev_caption = {} + for image_id in image_ids: + for track_id in matched_caps_gt[image_id]: + if track_id in prev_caption: + cap_switch += prev_caption[track_id] != matched_caps_gt[ + image_id][track_id] + prev_caption[track_id] = matched_caps_gt[image_id][track_id] + if cap_switch > 0: + cap_switch = cap_switch / sum(len( + [x for x in v if x['captions'][0]]) for v in self.gts.values()) + results['cap_switch'] = cap_switch + return results + + @staticmethod + def merge_gt_boxes(gts, iou_thresh): + """Ground truth may be overlapping (as in Visual Genome dataset). + + We need to merge them before evaluating. + + Original code: + github.com/jcjohnson/densecap/blob/maste*/densecap/box_utils.lua#L590 + github.com/jcjohnson/densecap/blob/maste*/eval/eval_utils.lua#L105 + + Args: + gts: gts of a single image. list of dicts, each with the following keys: + 'bbox': list of 4 floats in order (l, t, w, h) + 'caption': a string. + ... + iou_thresh: float + Returns: + new_gts: list of dicts. Might have different length from the input. + 'bbox': list of 4 floats in order (l, t, w, h) + 'captions': list of strings. + """ + new_gts = [] + if not gts: + return new_gts + gt_boxes = np.asarray([x['bbox'] for x in gts], dtype=np.float32) + ious = box_iou(gt_boxes, gt_boxes) # N x N + + while True: + can_merge = ious >= iou_thresh + # Find the largest cluster and merge it. + num_merges = can_merge.sum(axis=1) # N + ind = np.argmax(num_merges) # int + if num_merges[ind] == 0: + break + merge_inds = np.nonzero(can_merge[ind])[0] + new_box = gt_boxes[merge_inds].mean(axis=0) + all_captions = [gts[x]['caption'].replace('\n', '') for x in merge_inds] + new_gt = {'bbox': new_box, 'captions': all_captions} + if 'track_id' in gts[merge_inds[0]]: + new_gt['track_id'] = gts[merge_inds[0]]['track_id'] + new_gts.append(new_gt) + ious[merge_inds, :] = 0. + ious[:, merge_inds] = 0. + return new_gts + + +class DensecapGlobalEvaluator(object): + """Evaluator for dense caption.""" + + def __init__( + self, annotations_loc, eval_meteor=True, + ignore_empty_string=True, + eval_cap_switch=False, + cap_switch_thresh=0.5, + eval_chota=False, + chota_caption_metric='cider'): + self.evaluator = DensecapEval( + annotations_loc, eval_meteor=eval_meteor, + ignore_empty_string=ignore_empty_string, + eval_cap_switch=eval_cap_switch, + cap_switch_thresh=cap_switch_thresh, + eval_chota=eval_chota, + chota_caption_metric=chota_caption_metric, + ) + self.predictions = [] + self._num_examples_added = 0 + + def add_example(self, prediction: Any, target: Dict[str, np.ndarray]): + """Add prediction of a single image to the evaluator. + + Args: + prediction: Model prediction tuple of 4 arrays: boxes, scores, classes, + captions. 'boxes' is in shape of `[num_objects, 4]` and 'pred_boxes', + 'classes' are botoh in shape of `[num_objects, num_classes]`. 'captions' + is a list of strings. Box coordinates are absolute values in the input + image coordinates. We need to scale them back to the original image + coordinates using information in target. + target: Target dictionary with keys 'orig_size', 'size', and 'image/id'. + """ + if len(prediction) == 5: + boxes, scores, _, captions, track_ids = prediction + else: + boxes, scores, _, captions = prediction + track_ids = [-1 for _ in range(len(boxes))] + h, w = np.asarray(target['orig_size']) + input_h, input_w = np.asarray(target['size']) + scale_factor = np.array([w, h, w, h]) / np.array( + [input_w, input_h, input_w, input_h]) + boxes = boxes * scale_factor[np.newaxis, :] + boxes = np.maximum(boxes, 0) + boxes[:, [0, 2]] = np.minimum(boxes[:, [0, 2]], w) + boxes[:, [1, 3]] = np.minimum(boxes[:, [1, 3]], h) + boxes[:, 2] -= boxes[:, 0] + boxes[:, 3] -= boxes[:, 1] + boxes = np.asarray(boxes).tolist() + img_id = int(target['image/id']) + + for bbox, score, caption, track_id in zip( + boxes, scores, captions, track_ids): + single_classification = { + 'image_id': img_id, + 'category_id': 0, + 'bbox': bbox, + 'score': score, + 'caption': caption, + } + if track_id >= 0: + single_classification['track_id'] = int(track_id) + self.predictions.append(single_classification) + self._num_examples_added += 1 + + def compute_metrics( + self, + clear_annotations: Optional[bool] = False): + """Computes the metrics for all added predictions.""" + results = self.evaluator.compute_metrics(self.predictions) + if clear_annotations: + self.clear() + return results + + def clear(self): + self.predictions = [] + self._num_examples_added = 0 + + def __len__(self): + return self._num_examples_added + + def write_pred_annotations_to_file(self, + path: str, + fname_app: Optional[str] = None): + """Writes predictions to file in JSON format. + + Args: + path: Path to write the prediction annotation JSON file. + fname_app: Optional string to append to the file name. + """ + if not tf.io.gfile.exists(path): + tf.io.gfile.makedirs(path) + json_file_name = f"predictions{fname_app if fname_app else ''}.json" + json_file_path = os.path.join(path, json_file_name) + + def _convert_to_serializable(obj): + if isinstance(obj, np.ndarray): + return obj.tolist() + elif isinstance(obj, np.float32): + return float(obj) + else: + raise TypeError(f'Unserializable object {obj} of type {type(obj)}') + + with tf.io.gfile.GFile(json_file_path, 'w') as f: + f.write( + json.dumps( + self.predictions, + default=_convert_to_serializable)) + logging.info('Predicted annotations are stored in %s.', json_file_path) diff --git a/scenic/projects/densevoc/densevoc_framework.png b/scenic/projects/densevoc/densevoc_framework.png new file mode 100644 index 0000000000000000000000000000000000000000..b9ab35e06349d414b03082c47189b46f857a5d2d --- /dev/null +++ b/scenic/projects/densevoc/densevoc_framework.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdb9c3e020fb6ec70df3d47e47892b38c8ca2cb99e8ff8e47653ae5f4d62917b +size 137966 diff --git a/scenic/projects/densevoc/densevoc_teaser.png b/scenic/projects/densevoc/densevoc_teaser.png new file mode 100644 index 0000000000000000000000000000000000000000..72a7613c818aa9d5a2fa6ab7f1a22ce3b43a2266 --- /dev/null +++ b/scenic/projects/densevoc/densevoc_teaser.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0a6826ac9d3625a574a2e75630a7194340ac87f5b6e2e7abfa2479c5fe13c5c +size 402378 diff --git a/scenic/projects/densevoc/evaluate.py b/scenic/projects/densevoc/evaluate.py new file mode 100644 index 0000000000000000000000000000000000000000..0cb26e559076dc5bcaa1e2587911a20c5cd8010b --- /dev/null +++ b/scenic/projects/densevoc/evaluate.py @@ -0,0 +1,121 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Evaluation script for Dense VOC.""" + +import time +from typing import Any + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +import flax +from flax import jax_utils +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.projects.densevoc import evaluation_utils +from scenic.train_lib import train_utils + + +def evaluate( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +): + """Prepares the items needed to run the evaluation. + + Args: + rng: JAX PRNGKey. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + """ + is_host = jax.process_index() == 0 + + if config.get('xid') and config.get('wid'): + train_config, checkpoint_path = xm_utils.get_info_from_xmanager( + config.xid, config.wid) + train_config = evaluation_utils.override_train_model_config( + train_config, config) + model = model_cls(train_config, dataset.meta_data) + else: + model = model_cls(config, dataset.meta_data) + checkpoint_path = config.weights + + inference_on_video = config.get('inference_on_video', False) + checkpoint_data = checkpoints.restore_checkpoint(checkpoint_path, None) + params = checkpoint_data['params'] + train_state = train_utils.TrainState( + global_step=0, + params=flax.core.FrozenDict(params), + model_state=flax.core.FrozenDict({}), + rng=rng) + train_state = jax_utils.replicate(train_state) + del checkpoint_data, params + + eval_batch_size = config.get('eval_batch_size', config.batch_size) + report_progress = periodic_actions.ReportProgress( + num_train_steps=0, writer=writer) + + hooks = [] + if is_host: + hooks.append(report_progress) + if config.get('xprof', True) and is_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + start_time = time.time() + with report_progress.timed('eval'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + if inference_on_video: + eval_results, eval_metrics = evaluation_utils.inference_on_video_dataset( + model, + train_state, + dataset, + config=config, + eval_batch_size=eval_batch_size, + is_host=is_host, + save_dir=workdir, + ) + else: + eval_results, eval_metrics = evaluation_utils.inference_on_image_dataset( + model, + train_state, + dataset, + config=config, + eval_batch_size=eval_batch_size, + is_host=is_host, + save_dir=workdir, + ) + train_utils.log_eval_summary( + step=0, + eval_metrics=eval_metrics, + extra_eval_summary=eval_results, + writer=writer, + ) + duration = time.time() - start_time + logging.info('Done with evaluation: %.4f sec.', duration) + writer.flush() + train_utils.barrier() diff --git a/scenic/projects/densevoc/evaluation_utils.py b/scenic/projects/densevoc/evaluation_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..86056f2f2f5907d46680ffdcef24107a735bced4 --- /dev/null +++ b/scenic/projects/densevoc/evaluation_utils.py @@ -0,0 +1,431 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for evaluation.""" + +import functools +from typing import Any + +from absl import logging + +from dmvr import tokenizers +from flax import jax_utils +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.projects.baselines.centernet import train_utils as centernet_train_utils +from scenic.projects.densevoc import densevoc_evaluator +from scenic.projects.densevoc import vidstg_evaluator +from scenic.train_lib import train_utils + + +def eval_step( + train_state, batch, *, + model, debug=False): + """Runs a single step of inference.""" + variables = { + 'params': train_state.params, + **train_state.model_state, + } + # get detection outputs and features for text decoder. + predictions = model.flax_model.apply( + variables, + batch['inputs'], + preprocess=True, + # padding_mask=batch['padding_mask'], + padding_mask=jnp.ones((1, 1, 1), dtype=jnp.float32), + train=False, + mutable=False, + debug=debug) + # Run text decoder and get text outputs. + predictions = model.autoregressive_predict( + variables['params'], predictions) + metrics = {} + targets = {'label': batch['label'], 'batch_mask': batch['batch_mask']} + predictions = jax.lax.all_gather(predictions, 'batch') + targets = jax.lax.all_gather(targets, 'batch') + return targets, predictions, metrics + + +def inference_on_image_dataset( + model: Any, + train_state: train_utils.TrainState, + dataset: dataset_utils.Dataset, + config: ml_collections.ConfigDict, + eval_batch_size: int = 1, + is_host: bool = False, + save_dir: str = '') -> Any: + """The main evaluation loop. Run evaluation on the whole validation set. + + Args: + model: Scenic basemodel (an instance of nn.Module). + train_state: train_state that contains the model parameters. + dataset: The dataset that has valid_iter and meta_data. + config: config dict. + eval_batch_size: integer. Batch size per-device in evaluation. + is_host: bool: whether its the host machine. During multi-machine training, + we only hold the evaluating data in one of the machines. The machine with + `jax.process_index() == 0` sets `is_host` to True and will gather data + from other machines and do the evaluation. Other machines set `is_host` + as False. + save_dir: string: where to save the json prediction + Returns: + evaluation results. + """ + eval_meteor = config.get('eval_meteor', True) + annotations_loc = config.get('dataset_configs', {}).get( + 'test_annotation_path', None) + debug = config.get('debug_eval', False) + eval_cap_switch = config.get('eval_cap_switch', False) + eval_chota = config.get('eval_chota', False) + chota_caption_metric = config.get( + 'chota_caption_metric', 'cider') + tokenizer_weight_path = config.get('dataset_configs', {}).get( + 'tokenizer_weight_path') + + global_metrics_evaluator = None # Only run eval on the is_host node. + tokenizer = None + if is_host: + global_metrics_evaluator = densevoc_evaluator.DensecapGlobalEvaluator( + annotations_loc=annotations_loc, + ignore_empty_string=True, + eval_cap_switch=eval_cap_switch, + eval_meteor=eval_meteor, + eval_chota=eval_chota, + chota_caption_metric=chota_caption_metric) + global_metrics_evaluator.clear() + tokenizer = tokenizers.BertTokenizer(tokenizer_weight_path) + tokenizer.initialize() + + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + model=model, + debug=debug, + ), + axis_name='batch', donate_argnums=(1,), + ) + + eval_metrics = [] + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + for eval_step_i in range(total_eval_steps): + if eval_step_i % 100 == 0: + logging.info('Running eval step %d', eval_step_i) + if is_host: + xm_utils.get_xm_note_writer()( + f'Running eval step {eval_step_i} / {total_eval_steps}') + eval_batch = next(dataset.valid_iter) + + eval_batch_all_hosts, predictions_all_hosts, metrics = eval_step_pmapped( + train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(metrics)) + + if global_metrics_evaluator is not None: + eval_batch_all_hosts = jax_utils.unreplicate(eval_batch_all_hosts) + predictions_all_hosts = jax_utils.unreplicate(predictions_all_hosts) + + # Collect preds and labels to be sent for computing global metrics. + labels = centernet_train_utils.split_batch_and_fetch_to_host( + eval_batch_all_hosts['label'], eval_batch_all_hosts['batch_mask']) + labels = jax.tree_util.tree_map(np.asarray, labels) + results = centernet_train_utils.split_batch_and_fetch_to_host( + predictions_all_hosts, eval_batch_all_hosts['batch_mask']) + + for pred, label in zip(results, labels): + texts = [tokenizer.indices_to_string( + x[1:].tolist()) for x in pred['text_tokens']] + detection_pred = ( + pred['detection_boxes'], pred['detection_scores'], + pred['detection_classes'], texts) + global_metrics_evaluator.add_example( + prediction=detection_pred, target=label) + + results = None + if global_metrics_evaluator is not None: + logging.info('Number of eval examples: %d', len(global_metrics_evaluator)) + if save_dir: + global_metrics_evaluator.write_pred_annotations_to_file(save_dir) + results = global_metrics_evaluator.compute_metrics() + return results, eval_metrics + + +def grounding_step( + train_state, batch, model, debug=False): + """Runs a single step of inference.""" + del debug + variables = { + 'params': train_state.params, + **train_state.model_state, + } + # Get detection outputs and features for text decoder. + inputs = batch['inputs'] # (B, T, H, W, 3) + caption_tokens = batch['caption_tokens'] # (B, max_size) + b, t, h, w, _ = inputs.shape + inputs = inputs.reshape(b * t, h, w, 3) # (B, T, H, W, 3) -> (BT, H, W, 3) + predictions = model.flax_model.apply( + variables, + inputs, + preprocess=True, + padding_mask=jnp.ones((1, 1, 1), dtype=jnp.float32), + train=False, + mutable=False, + ) + caption_tokens = jnp.broadcast_to( + caption_tokens, (b * t, caption_tokens.shape[1])) + predictions = model.compute_sentence_likelihood( + variables['params'], predictions, caption_tokens) + del predictions['begin_tokens'] + del predictions['object_features'] + predictions = jax.tree_util.tree_map( + lambda x: x.reshape((b, t) + x.shape[1:]), predictions) + targets = {'label': batch['label'], 'batch_mask': batch['batch_mask']} + predictions = jax.lax.all_gather(predictions, 'batch') + targets = jax.lax.all_gather(targets, 'batch') + return targets, predictions + + +def densecap_step(train_state, batch, model, debug=False): + """Runs a single step of dense caption.""" + del debug + variables = { + 'params': train_state.params, + **train_state.model_state, + } + # Get detection outputs and features for text decoder. + inputs = batch['inputs'] # (B, T, H, W, 3) + b, t, h, w, _ = inputs.shape + inputs = inputs.reshape(b * t, h, w, 3) # (B, T, H, W, 3) -> (BT, H, W, 3) + kwargs = {} + + predictions = model.flax_model.apply( + variables, + inputs, + preprocess=True, + padding_mask=jnp.ones((1, 1, 1), dtype=jnp.float32), + train=False, + mutable=False, + **kwargs, + ) + + predictions['object_features'], mask = ( + model.flax_model.update_object_feature_with_track(predictions, t)) + + # Run text decoder and get text outputs. + predictions = model.autoregressive_predict( + variables['params'], predictions, mask=mask) + keys_to_delete = [ + 'begin_tokens', 'object_features', 'tracked_object_features', + 'asso_scores', 'track_features', 'track_feature_mask'] + for key in keys_to_delete: + if key in predictions: + del predictions[key] + predictions = jax.tree_util.tree_map( + lambda x: x.reshape((b, t) + x.shape[1:]), predictions) + targets = {'label': batch['label'], 'batch_mask': batch['batch_mask']} + predictions = jax.lax.all_gather(predictions, 'batch') + targets = jax.lax.all_gather(targets, 'batch') + return targets, predictions + + +def convert_to_vidstg_grounding_format(video_id, pred, label): + """Convert outputs to VidSTG evaluator's format.""" + # Predictions are assumed to be sorted by score. + ret = {} + num_frames = len(label['frame_ids']) + for i in range(num_frames): + frame_id = label['frame_ids'][i] + image_id = f'{video_id}_{frame_id}' + boxes, scores = pred['detection_boxes'][i], pred['detection_scores'][i] + num_valid_objs = (scores >= 0).sum() + if num_valid_objs > 0: + boxes = boxes[:num_valid_objs] + unused_scores = scores[:num_valid_objs] + likelihood = pred['likelihood'][i, :num_valid_objs] + box_idx = likelihood.argmax() + ret[image_id] = {'boxes': [boxes[box_idx].tolist()]} + return ret + + +def greedy_start_end_times(scores, p=1.0): + l, r = 0, len(scores) - 1 + while scores[l] < p and l + 1 <= r and sum( + scores[l + 1:]) / (r - l) > sum(scores[l:]) / (r - l + 1): + l = l + 1 + while scores[r] < p and l <= r - 1 and sum( + scores[:r]) / (r) > sum(scores[:r + 1]) / (r + 1): + r = r - 1 + return (l, r) + + +def temporal_grounding(label, pred, model_config): + """Run temporal grounding.""" + simple_temporal_localization = model_config.get( + 'simple_temporal_localization', -1.0) + valid_frame_inds = label['frame_ids'][label['frame_ids'] >= 0] + sted = [int(valid_frame_inds.min()), int(valid_frame_inds.max())] + if simple_temporal_localization >= 0: + tl_scores = [] + num_frames = len(label['frame_ids']) + for i in range(num_frames): + num_valid_objs = (pred['detection_scores'][i] >= 0).sum() + if num_valid_objs > 0: + tl_scores.append(pred['likelihood'][i, :num_valid_objs].max()) + else: + tl_scores.append(-1.) + st, ed = greedy_start_end_times(tl_scores, p=simple_temporal_localization) + sted = [ + int(label['frame_ids'][st: ed + 1].min()), + int(label['frame_ids'][st: ed + 1].max())] + return sted + + +def inference_on_video_dataset( + model: Any, + train_state: train_utils.TrainState, + dataset: dataset_utils.Dataset, + config: ml_collections.ConfigDict, + eval_batch_size: int = 1, + is_host: bool = False, + save_dir: str = '', + ): + """The main evaluation loop. Run evaluation on the whole validation set. + + Args: + model: Scenic basemodel (an instance of nn.Module). + train_state: train_state that contains the model parameters. + dataset: The dataset that has valid_iter and meta_data. + config: config dict. + eval_batch_size: integer. Batch size per-device in evaluation. + is_host: bool: whether its the host machine. During multi-machine training, + we only hold the evaluating data in one of the machines. The machine with + `jax.process_index() == 0` sets `is_host` to True and will gather data + from other machines and do the evaluation. Other machines set `is_host` + as False. + save_dir: string: where to save the json prediction + Returns: + evaluation results. + """ + annotations_loc = config.get('dataset_configs', {}).get( + 'test_annotation_path', None) + debug = config.get('debug_eval', False) + eval_cap_switch = config.get('eval_cap_switch', False) + eval_chota = config.get('eval_chota', False) + chota_caption_metric = config.get( + 'chota_caption_metric', 'cider') + tokenizer_weight_path = config.get('dataset_configs', {}).get( + 'tokenizer_weight_path') + task = config.get('video_eval_task', 'detection') + + evaluator = None + tokenizer = None + if is_host: + if task == 'grounding': + evaluator = vidstg_evaluator.VidSTGEvaluator(annotations_loc) + elif task == 'densecap': + evaluator = densevoc_evaluator.DensecapGlobalEvaluator( + annotations_loc=annotations_loc, + ignore_empty_string=True, + eval_cap_switch=eval_cap_switch, + eval_meteor=True, + eval_chota=eval_chota, + chota_caption_metric=chota_caption_metric, + ) + tokenizer = tokenizers.BertTokenizer(tokenizer_weight_path) + tokenizer.initialize() + else: + raise NotImplementedError(task) + kwargs = {} + if task == 'grounding': + step_fn = grounding_step + elif task == 'densecap': + step_fn = densecap_step + else: + raise NotImplementedError(task) + inference_step_pmapped = jax.pmap( + functools.partial( + step_fn, + model=model, + debug=debug, + **kwargs, + ), + axis_name='batch', donate_argnums=(1,), + ) + + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + for eval_step_i in range(total_eval_steps): + if eval_step_i % 100 == 0: + logging.info('Running eval step %d', eval_step_i) + if is_host: + xm_utils.get_xm_note_writer()( + f'Running eval step {eval_step_i} / {total_eval_steps}') + eval_batch = next(dataset.valid_iter) + + eval_batch_all_hosts, predictions_all_hosts = ( + inference_step_pmapped(train_state, eval_batch)) + + if is_host: + eval_batch_all_hosts = jax_utils.unreplicate(eval_batch_all_hosts) + predictions_all_hosts = jax_utils.unreplicate(predictions_all_hosts) + labels = centernet_train_utils.split_batch_and_fetch_to_host( + eval_batch_all_hosts['label'], eval_batch_all_hosts['batch_mask']) + results = centernet_train_utils.split_batch_and_fetch_to_host( + predictions_all_hosts, eval_batch_all_hosts['batch_mask']) + for pred, label in zip(results, labels): + h, w = np.asarray(label['orig_size']) + input_h, input_w = np.asarray(label['size']) + scale_factor = np.array([w, h, w, h]) / np.array( + [input_w, input_h, input_w, input_h]) + if task == 'grounding': + pred['detection_boxes'] *= scale_factor[None, None] + video_id = int(label['video_id']) + evaluator.update( # pytype: disable=attribute-error + convert_to_vidstg_grounding_format(video_id, pred, label)) + sted = temporal_grounding( + label, pred, model_config=model.config.model) + evaluator.video_update( # pytype: disable=attribute-error + {video_id: {'qtype': 'declarative', 'sted': sted}}) + elif task == 'densecap': + for i in range(len(label['image_ids'])): + if label['image_ids'][i] <= 0: # padded frames in a video. + break + label['image/id'] = label['image_ids'][i] + texts = [tokenizer.indices_to_string( # pytype: disable=attribute-error + x[1:]) for x in pred['text_tokens'][i]] + detection_pred = ( + pred['detection_boxes'][i], pred['detection_scores'][i], + pred['detection_classes'][i], texts) + if 'track_ids' in pred: + detection_pred = detection_pred + (pred['track_ids'][i],) + evaluator.add_example( # pytype: disable=attribute-error + prediction=detection_pred, target=label) + + results = None + if is_host: + if task in ['grounding', 'densecap']: + results = evaluator.compute_metrics() # pytype: disable=attribute-error + evaluator.write_pred_annotations_to_file( # pytype: disable=attribute-error + save_dir) + return results, [] + + +def override_train_model_config(train_config, config): + """Override test-time configs.""" + for k, v in config.model.items(): + train_config.model[k] = v + return train_config diff --git a/scenic/projects/densevoc/input_pipeline.py b/scenic/projects/densevoc/input_pipeline.py new file mode 100644 index 0000000000000000000000000000000000000000..fc1666e22fe4ad0c481548f0a0b1d9fa95a7b0f7 --- /dev/null +++ b/scenic/projects/densevoc/input_pipeline.py @@ -0,0 +1,445 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the Dense VOC tasks.""" + +import functools +from typing import Optional + +from absl import logging +from dmvr import tokenizers +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.projects.baselines.centernet import input_pipeline as centernet_input_pipeline +from scenic.projects.densevoc import input_utils +import tensorflow as tf + + +PRNGKey = jnp.ndarray + + +VG_NUM_TRAIN_IMAGES = 77396 +VG_NUM_TEST_IMAGES = 5000 + + +def vg_decode_example(data): + """Convert custom tfrecord into tfds builder format.""" + example = {} + example['image'] = tf.io.decode_jpeg(data['image']) + example['image/id'] = data['img_id'] + example['objects'] = {} + example['objects']['bbox'] = tf.reshape( + tf.sparse.to_dense(data['regions/bbox']), [-1, 4]) + example['objects']['phrase'] = tf.sparse.to_dense(data['regions/phrase']) + example['objects']['id'] = tf.sparse.to_dense(data['regions/id']) + return example + + +def decode_dense_caption_example( + example, + tokenizer, + max_boxes=100, + max_text_tokens=40, + ): + """Given an instance and raw labels, creates pair. + + Args: + example: dict; Input image and raw labels. + tokenizer: tokenizer that convert string tensor to int tensors. + max_boxes: int; max number of objects to load. + max_text_tokens: int; max number of tokens per text. + Returns: + A dictionary of {'inputs': input image, 'labels': task label}. + """ + image = tf.cast(example['image'], tf.float32) + boxes = centernet_input_pipeline.decode_boxes( + example['objects']['bbox'], tf.shape(image)[0:2]) + target = { + 'boxes': boxes, + 'text_tokens': tokenizer.string_tensor_to_indices( + example['objects']['phrase'], + prepend_bos=True, append_eos=True, max_num_tokens=max_text_tokens), + 'labels': tf.zeros((tf.shape(boxes)[0],), dtype=tf.int32), + } + keep = tf.where(tf.logical_and( + boxes[:, 2] > boxes[:, 0], boxes[:, 3] > boxes[:, 1]))[:, 0] + target_kept = {k: tf.gather(v, keep)[:max_boxes] for k, v in target.items()} + + target_kept['orig_size'] = tf.cast(tf.shape(image)[0:2], dtype=tf.int32) + target_kept['size'] = tf.identity(target_kept['orig_size']) + target_kept['image/id'] = example['image/id'] + + return { + 'inputs': image, + 'label': target_kept, + } + + +def load_split_from_tfds( + batch_size, + *, + train, + preprocess_fn, + decode_fn, + dataset_path, + cache=False, + max_size=1024, + max_boxes=100, + max_text_tokens=40, + shuffle_buffer_size=1000, + shuffle_seed=0): + """Loads a split from the COCO dataset using TensorFlow Datasets. + + Args: + batch_size: int; The batch size returned by the data pipeline. + train: bool; Whether to load the train or evaluation split. + preprocess_fn: function; A function that given an example, train flag, + and dtype returns the preprocessed the example. Note that the + preprocessing is done BEFORE caching to re-use them. + decode_fn: A function that given an example decodes the image, converts + it to float32, mean-subtracts it, and pulls out the relevant parts from + the tfds features. + dataset_path: string; path of the dataset; by default load from tfds + cache: bool; whether to use the ds.cache or nor. + max_size: int; Maximum image size. + max_boxes: int; Maximum number of boxes. + max_text_tokens: int; max number of text tokens. + shuffle_buffer_size: int; Size of the shuffle buffer. + shuffle_seed: int; Seed for shuffling the training data. + + Returns: + A `tf.data.Dataset`, and dataset info. + """ + ds = tf.data.TFRecordDataset( + centernet_input_pipeline.decode_sharded_names(dataset_path)) + # Split datasets into machines. Otherwise multi-machine evaluation takes the + # same images. + ds = ds.shard(jax.process_count(), jax.process_index()) + ds = ds.map( + lambda x: tf.io.parse_single_example( + x, input_utils.vg_feature_description)) + ds = ds.map(vg_decode_example) + ds_info = {} + + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + ds = ds.with_options(options) + ds = ds.map( + decode_fn, num_parallel_calls=tf.data.experimental.AUTOTUNE) + if cache: + ds = ds.cache() + + padded_shapes = { + 'inputs': [max_size, max_size, 3], + 'padding_mask': [max_size, max_size], + 'label': { + 'boxes': [max_boxes, 4], + 'text_tokens': [max_boxes, max_text_tokens], + 'labels': [max_boxes], + 'image/id': [], + 'orig_size': [2,], + 'size': [2,] + }, + } + + if train: + # First repeat then batch. + ds = ds.shuffle(shuffle_buffer_size, seed=shuffle_seed) + ds = ds.repeat() + # Augmentation should be done after repeat for true randomness. + ds = ds.map(preprocess_fn, num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.padded_batch( + batch_size, padded_shapes=padded_shapes, drop_remainder=True) + + else: + ds = ds.map(preprocess_fn, num_parallel_calls=tf.data.experimental.AUTOTUNE) + # First batch then repeat. + ds = ds.padded_batch( + batch_size, padded_shapes=padded_shapes, drop_remainder=False) + ds = ds.repeat() + + ds = ds.prefetch(tf.data.experimental.AUTOTUNE) + return ds, ds_info + + +def dataset_builder(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for COCO object detection 2017 train & validation set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image. Only 'float32' is currently supported. + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. Must be empty. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + assert dtype_str == 'float32', ( + f'coco_detr_dataset invoked with unsupported dtype_str: {dtype_str}') + del dtype_str + + dataset_configs = dataset_configs or {} + + multi_dataset_training = dataset_configs.get('multi_dataset_training', False) + is_video_dataset = dataset_configs.get('is_video_dataset', False) + is_video_dataset_train = dataset_configs.get( + 'is_video_dataset_train', is_video_dataset) + is_video_dataset_test = dataset_configs.get( + 'is_video_dataset_test', is_video_dataset) + + scale_range = dataset_configs.get('scale_range', (0.1, 2.0)) + crop_size = dataset_configs.get('crop_size', 1024) + max_boxes = dataset_configs.get('max_boxes', 100) + max_text_tokens = dataset_configs.get('max_text_tokens', 40) + size_divisibility = dataset_configs.get('size_divisibility', 1) + train_data_path = dataset_configs['train_data_path'] + test_data_path = dataset_configs['test_data_path'] + tokenizer_weight_path = dataset_configs['tokenizer_weight_path'] + crop_size = ((crop_size - 1) // size_divisibility + 1) * size_divisibility + + if multi_dataset_training: + assert is_video_dataset_train, 'multidataset training only supported video.' + assert isinstance(train_data_path, tuple), train_data_path + + train_preprocess_fn = input_utils.make_resize_crop_transforms( + 'train', scale_range=scale_range, crop_size=crop_size) + eval_preprocess_fn = input_utils.make_resize_crop_transforms( + 'validation', scale_range=(1.0, 1.0), crop_size=crop_size) + + tokenizer = tokenizers.BertTokenizer(tokenizer_weight_path) + tokenizer.initialize() + decode_fn = functools.partial( + decode_dense_caption_example, + tokenizer=tokenizer, + max_boxes=max_boxes, + max_text_tokens=max_text_tokens) + + if is_video_dataset_train: + if multi_dataset_training: + train_ds = [] + dataset_format = dataset_configs['dataset_format'] + assert len(dataset_format) == len(train_data_path) + for i, train_data_path_i in enumerate(train_data_path): + train_ds_i, _ = input_utils.load_video_train_tfds( + batch_size, + dataset_path=train_data_path_i, + shuffle_buffer_size=dataset_configs.get( + 'shuffle_buffer_size', 1000), + max_size=crop_size, + max_boxes=max_boxes, + max_text_tokens=max_text_tokens, + shuffle_seed=shuffle_seed, + tokenizer=tokenizer, + max_frames=dataset_configs.get( + 'max_frames_train', dataset_configs.get('max_frames', 8)), + temporal_stride=dataset_configs.get('temporal_stride', 1), + ensure_sample_has_objects=dataset_configs.get( + 'ensure_sample_has_objects', True), + max_video_captions=dataset_configs.get( + 'max_video_captions', max_boxes), + scale_range=scale_range, + dataset_format=dataset_format[i], + track_id_key=dataset_configs.get( + 'track_id_key', 'objects/track_id'), + ) + train_ds.append(train_ds_i) + train_ds = tf.data.Dataset.sample_from_datasets( + train_ds, dataset_configs['dataset_sample_weights']) + else: + train_ds, _ = input_utils.load_video_train_tfds( + batch_size, + dataset_path=train_data_path, + shuffle_buffer_size=dataset_configs.get('shuffle_buffer_size', 1000), + max_size=crop_size, + max_boxes=max_boxes, + max_text_tokens=max_text_tokens, + shuffle_seed=shuffle_seed, + tokenizer=tokenizer, + max_frames=dataset_configs.get( + 'max_frames_train', dataset_configs.get('max_frames', 8)), + temporal_stride=dataset_configs.get('temporal_stride', 1), + ensure_sample_has_objects=dataset_configs.get( + 'ensure_sample_has_objects', True), + max_video_captions=dataset_configs.get( + 'max_video_captions', max_boxes), + dataset_format=dataset_configs.get('dataset_format', 'full'), + track_id_key=dataset_configs.get('track_id_key', 'objects/track_id'), + ) + else: + train_ds, _ = load_split_from_tfds( + batch_size, train=True, + preprocess_fn=train_preprocess_fn, + decode_fn=decode_fn, + dataset_path=train_data_path, + shuffle_buffer_size=dataset_configs.get('shuffle_buffer_size', 1000), + max_size=crop_size, + max_boxes=max_boxes, + max_text_tokens=max_text_tokens, + shuffle_seed=shuffle_seed) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + if is_video_dataset_test: + eval_ds, _ = input_utils.load_video_val_tfds( + eval_batch_size, + max_size=crop_size, + max_boxes=max_boxes, + dataset_path=test_data_path, + tokenizer=tokenizer, + max_frames=dataset_configs.get( + 'max_frames_test', dataset_configs.get('max_frames', 200)), + with_objects=dataset_configs.get('with_objects', True), + temporal_stride=dataset_configs.get('test_temporal_stride', 1), + dataset_format=dataset_configs.get('eval_dataset_format', 'full'), + ) + else: + eval_ds, _ = load_split_from_tfds( + eval_batch_size, + train=False, + preprocess_fn=eval_preprocess_fn, + max_size=crop_size, + max_boxes=max_boxes, + decode_fn=decode_fn, + dataset_path=test_data_path, + ) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + if dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + train_iter = jax_utils.prefetch_to_device( + train_iter, dataset_configs.get('prefetch_to_device')) + + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + eval_iter = map(shard_batches, eval_iter) + + num_classes = dataset_configs.get('num_classes', 1) + num_train_examples = dataset_configs.get( + 'num_train_examples', VG_NUM_TRAIN_IMAGES) + num_eval_examples = dataset_configs.get( + 'num_eval_examples', VG_NUM_TEST_IMAGES) + + meta_data = { + 'num_classes': num_classes, + 'input_shape': [-1, crop_size, crop_size, 3], + 'num_train_examples': num_train_examples, + 'num_eval_examples': num_eval_examples, + 'input_dtype': jnp.float32, + 'target_is_onehot': False, + } + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) + + +def get_dataset( + config: ml_collections.ConfigDict, + data_rng: PRNGKey, + *, + dataset_service_address: Optional[str] = None, + dataset_name: Optional[str] = None, + dataset_configs: Optional[ml_collections.ConfigDict] = None +) -> dataset_utils.Dataset: + """Creates dataset. + + By default, the values in the config file are used. + However, if the optional `dataset_name` and `dataset_configs` are passed, + those are used instead. + + Args: + config: The configuration of the experiment. + data_rng: Random number generator key to use for the dataset. + dataset_service_address: Used when using the tf.data.experimental.service + dataset_name: Name of dataset to load, if not reading from the config. + dataset_configs: Configuration of the dataset, if not reading directly from + the config. + + Returns: + A dataset_utils.Dataset object. + """ + device_count = jax.device_count() + logging.info('device_count: %d', device_count) + logging.info('num_hosts : %d', jax.process_count()) + logging.info('host_id : %d', jax.process_index()) + + del dataset_name + + batch_size = config.batch_size + if batch_size % device_count > 0: + raise ValueError(f'Batch size ({batch_size}) must be divisible by the ' + f'number of devices ({device_count})') + + eval_batch_size = config.get('eval_batch_size', batch_size) + if eval_batch_size % device_count > 0: + raise ValueError(f'Eval batch size ({eval_batch_size}) must be divisible ' + f'by the number of devices ({device_count})') + + local_batch_size = batch_size // jax.process_count() + eval_local_batch_size = eval_batch_size // jax.process_count() + device_batch_size = batch_size // device_count + logging.info('local_batch_size : %d', local_batch_size) + logging.info('device_batch_size : %d', device_batch_size) + + shuffle_seed = config.get('shuffle_seed', None) + if dataset_service_address and shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you want ' + 'to run with dataset service.') + + dataset_configs = dataset_configs or config.get('dataset_configs') + dataset = dataset_builder( + batch_size=local_batch_size, + eval_batch_size=eval_local_batch_size, + num_shards=jax.local_device_count(), + dtype_str=config.data_dtype_str, + rng=data_rng, + shuffle_seed=shuffle_seed, + dataset_configs=dataset_configs, + dataset_service_address=dataset_service_address) + + return dataset diff --git a/scenic/projects/densevoc/input_utils.py b/scenic/projects/densevoc/input_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..58202a5e0b6aeec129ad5d9a4b6eaa0f115734c8 --- /dev/null +++ b/scenic/projects/densevoc/input_utils.py @@ -0,0 +1,857 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Input pipeline for videos.""" + +import jax +import jax.numpy as jnp +from scenic.projects.baselines.centernet import input_pipeline as centernet_input_pipeline +from scenic.projects.baselines.centernet import transforms +from scenic.projects.densevoc import transforms as custom_transforms +import tensorflow as tf +import tensorflow_datasets as tfds + + +PRNGKey = jnp.ndarray +ALL_LOSSES = ['det', 'objcap', 'track', 'trackcap', 'vidcap', 'imagecap'] +# pylint: disable=g-long-lambda + + +def make_resize_crop_transforms( + image_set, + scale_range=(0.1, 2.0), + crop_size=1024): + """EfficientNet style resize and crop augmentation. + + Different from the default detection augmentation, this function in addition + processes text tokens using 'FixedSizeCropWithAdditionalKeys'. + + Args: + image_set: 'train' or 'validation' + scale_range: list of integers. Sizes of the shorter edge. + crop_size: integer. Size of the longer edge. + Returns: + The data-augmentation functions. + """ + init_padding_mask = transforms.InitPaddingMask() + if image_set == 'train': + return transforms.Compose( + [transforms.RandomHorizontalFlip(), + transforms.RandomRatioResize(scale_range, crop_size), + custom_transforms.FixedSizeCropWithAdditionalKeys( + crop_size, additional_keys=('text_tokens',)), + init_padding_mask]) + elif image_set == 'validation': + return transforms.Compose( + [transforms.Resize(crop_size, max_size=crop_size), + init_padding_mask]) + else: + raise ValueError(f'Unknown image_set: {image_set}') + +vg_feature_description = { + 'image': tf.io.FixedLenFeature([], tf.string), + 'img_id': tf.io.FixedLenFeature([], tf.int64), + 'regions/bbox': tf.io.VarLenFeature(dtype=tf.float32), + 'regions/id': tf.io.VarLenFeature(dtype=tf.int64), + 'regions/phrase': tf.io.VarLenFeature(dtype=tf.string), +} + +# We use different eval and train pipeline as eval sometimes contain additional +# information, e.g., grounding sentence. +eval_sequence_feature_description = { + 'image/encoded': tf.io.FixedLenSequenceFeature([], tf.string), + 'objects/bbox': tf.io.VarLenFeature(tf.float32), + 'objects/track_id': tf.io.VarLenFeature(tf.int64), + 'objects/caption': tf.io.VarLenFeature(tf.string), +} + +eval_context_feature_description = { + 'bbox': tf.io.VarLenFeature(dtype=tf.float32), + 'caption': tf.io.VarLenFeature(dtype=tf.string), + 'video_id': tf.io.VarLenFeature(dtype=tf.int64), + 'frame_ids': tf.io.VarLenFeature(dtype=tf.int64), + 'image_ids': tf.io.VarLenFeature(dtype=tf.int64), +} + + +def decode_eval_video_example( + context_feature, seq_feature, _, with_objects=True): + """Convert custom tfrecord into tfds builder format.""" + images = tf.map_fn( + lambda x: tf.image.decode_jpeg(x, channels=3), + seq_feature['image/encoded'], back_prop=False, dtype=tf.uint8) + ret = { + 'images': images, + 'caption': tf.sparse.to_dense(context_feature['caption']), # video cap. + 'video_id': tf.sparse.to_dense(context_feature['video_id']), + 'image_ids': tf.sparse.to_dense(context_feature['image_ids']), + 'frame_ids': tf.sparse.to_dense(context_feature['frame_ids']), + } + if with_objects: + bbox = tf.map_fn( + tf.sparse.to_dense, + seq_feature['objects/bbox'], back_prop=False, dtype=tf.float32) + bbox = tf.reshape(bbox, [tf.shape(seq_feature['image/encoded'])[0], -1, 4]) + track_id = tf.map_fn( + tf.sparse.to_dense, + seq_feature['objects/track_id'], back_prop=False, dtype=tf.int64) + object_caption = tf.map_fn( + tf.sparse.to_dense, + seq_feature['objects/caption'], back_prop=False, dtype=tf.string) + ret.update({ + 'boxes': bbox, + 'track_ids': track_id, + 'captions': object_caption, # object caption. + }) + return ret + + +def decode_eval_annotations( + example, + tokenizer, + max_boxes=100, + max_text_tokens=40, + max_frames=200, + with_caption_tokens=True, + with_objects=True, + temporal_stride=1, + ): + """Convert custom tfrecord into training pipeline builder format.""" + images = example['images'][::temporal_stride][:max_frames] + size = tf.cast(tf.shape(images)[1:3], dtype=tf.int32) + annotations = { + 'inputs': images, + 'label': { + 'video_id': example['video_id'][0], + 'orig_size': size, + 'size': tf.identity(size), + 'frame_ids': example['frame_ids'][::temporal_stride][:max_frames], + 'image_ids': example['image_ids'][::temporal_stride][:max_frames], + }, + } + if with_objects: + boxes = tf.map_fn( + lambda x: centernet_input_pipeline.decode_boxes( + x, tf.shape(images)[1:3]), + example['boxes'], back_prop=False, dtype=tf.float32) + boxes = boxes[::temporal_stride][:max_frames, :max_boxes] + annotations['label'].update({ + 'boxes': boxes, + 'track_ids': example['track_ids'][ + ::temporal_stride][:max_frames, :max_boxes], + 'text_tokens': tf.map_fn( + lambda x: tokenizer.string_tensor_to_indices( + x, prepend_bos=True, append_eos=True, + max_num_tokens=max_text_tokens), + example['captions'][::temporal_stride][:max_frames, :max_boxes], + back_prop=False, fn_output_signature=tf.int32), + }) + if with_caption_tokens: + annotations['caption_tokens'] = tokenizer.string_tensor_to_indices( + example['caption'], + prepend_bos=True, append_eos=True, + max_num_tokens=max_text_tokens)[0] + else: + annotations['caption_tokens'] = tf.zeros( + (max_text_tokens), dtype=tf.int64) + return annotations + + +def video_resize_max_size(features, size=256): + """Resize video to a fixed max-size.""" + image = features['inputs'] + original_size = tf.shape(image)[1:3] + new_size = transforms.get_size_with_aspect_ratio( + original_size, size, max_size=size) + rescaled_image = tf.image.resize(image, new_size) + features['inputs'] = rescaled_image + features['label']['size'] = tf.stack(new_size) + if 'boxes' in features['label']: + r_height = tf.cast((new_size[0] / original_size[0]), tf.float32) + r_width = tf.cast((new_size[1] / original_size[1]), tf.float32) + x0, y0, x1, y1 = tf.split(features['label']['boxes'], 4, axis=-1) + features['label']['boxes'] = tf.concat( + [x0 * r_width, y0 * r_height, + x1 * r_width, y1 * r_height], axis=-1) + return features + + +def load_video_val_tfds( + batch_size, + *, + dataset_path, + tokenizer, + max_size=256, + max_text_tokens=40, + max_boxes=100, + max_frames=200, + temporal_stride=1, + with_objects=True, + dataset_format='full', + ): + """Loads a split of a video dataset using TensorFlow Datasets. + + Args: + batch_size: int; The batch size returned by the data pipeline. + dataset_path: string; path of the dataset; by default load from tfds + tokenizer: tokenizer + max_size: int; Maximum image size. + max_text_tokens: int; max number of text tokens. + max_boxes: int; used in padding bounding box shape + max_frames: int max number of frames. + temporal_stride: int; + with_objects: bool; for compatibility with some datasets + dataset_format: str. Currently support 'full' or 'videocap' + + Returns: + A `tf.data.Dataset`, and dataset info. + """ + assert dataset_format == 'full' + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + + if 'tfrecord' in dataset_path: + ds = tf.data.TFRecordDataset( + centernet_input_pipeline.decode_sharded_names(dataset_path)) + ds = ds.shard(jax.process_count(), jax.process_index()) + ds = ds.map( + lambda x: tf.io.parse_sequence_example( + x, + sequence_features=eval_sequence_feature_description, + context_features=eval_context_feature_description)) + else: + raise ValueError('Unsupported dataset format: %s' % dataset_path) + with_caption_tokens = 'tubedetr' in dataset_path # For grounding + + ds = ds.with_options(options) + ds = ds.map( + lambda x, y, _: decode_eval_video_example( + x, y, _, with_objects=with_objects), + num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.map( + lambda x: decode_eval_annotations( # pylint: disable=g-long-lambda + x, tokenizer, max_frames=max_frames, max_boxes=max_boxes, + with_caption_tokens=with_caption_tokens, + with_objects=with_objects, + temporal_stride=temporal_stride)) + + padded_shapes = { + 'inputs': [max_frames, max_size, max_size, 3], + 'label': { + 'video_id': [], + 'orig_size': [2,], + 'size': [2,], + 'frame_ids': [max_frames,], + 'image_ids': [max_frames,], + }, + 'caption_tokens': [max_text_tokens,], + } + if with_objects: + padded_shapes['label'].update({ + 'boxes': [max_frames, max_boxes, 4], + 'text_tokens': [max_frames, max_boxes, max_text_tokens], + 'track_ids': [max_frames, max_boxes], + }) + preprocess_fn = lambda x: video_resize_max_size(x, max_size) + ds = ds.map(preprocess_fn, num_parallel_calls=tf.data.experimental.AUTOTUNE) + # First batch then repeat. + ds = ds.padded_batch( + batch_size, padded_shapes=padded_shapes, drop_remainder=False) + ds = ds.repeat() + + ds = ds.prefetch(tf.data.experimental.AUTOTUNE) + return ds, {} + + +densecap_sequence_feature_description = { + 'image/encoded': tf.io.FixedLenSequenceFeature([], tf.string), + 'objects/bbox': tf.io.VarLenFeature(tf.float32), + 'objects/track_id': tf.io.VarLenFeature(tf.int64), + 'objects/segment_id': tf.io.VarLenFeature(tf.int64), + 'objects/caption': tf.io.VarLenFeature(tf.string), +} + +densecap_context_feature_description = { + 'video_id': tf.io.VarLenFeature(dtype=tf.int64), + 'video/captions': tf.io.VarLenFeature(dtype=tf.string), + 'image_ids': tf.io.VarLenFeature(dtype=tf.int64), +} + + +def decode_and_sample_video_example( + context_feature, seq_feature, _, + num_frames=4, temporal_stride=1, + ensure_sample_has_objects=True, + track_id_key='objects/track_id'): + """Convert custom tfrecord into tfds builder format.""" + images = seq_feature['image/encoded'] + bbox = tf.map_fn( + tf.sparse.to_dense, + seq_feature['objects/bbox'], back_prop=False, dtype=tf.float32) + bbox = tf.reshape(bbox, [tf.shape(bbox)[0], -1, 4]) + track_id = tf.map_fn( + tf.sparse.to_dense, + seq_feature[track_id_key], back_prop=False, dtype=tf.int64) + caption = tf.map_fn( + tf.sparse.to_dense, + seq_feature['objects/caption'], back_prop=False, dtype=tf.string) + + if num_frames > 0: + max_frames = tf.shape(bbox)[0] + sample_stride = tf.maximum( + tf.minimum(temporal_stride, max_frames // num_frames), 1) + max_offset = tf.maximum(max_frames - num_frames * sample_stride, 1) + def local_get_inds(_): + if temporal_stride > 0: # sample a window with fixed stride + offset = tf.random.uniform( + (), maxval=max_offset, dtype=tf.int32) + return tf.minimum(tf.range( + offset, offset + num_frames * sample_stride, + delta=temporal_stride), max_frames - 1) + else: # global uniform sample + return tf.sort(tf.random.shuffle(tf.range(max_frames))[:num_frames]) + inds = local_get_inds(()) + if ensure_sample_has_objects: + # Make sure the sampled video has at least one annotated object. + inds = tf.while_loop( + lambda x: tf.equal(tf.reduce_max(tf.gather(track_id, x)), 0), + local_get_inds, [inds])[0] + bbox = tf.gather(bbox, inds) + track_id = tf.gather(track_id, inds) + caption = tf.gather(caption, inds) + images = tf.gather(images, inds) + else: + inds = tf.range(tf.shape(bbox)[0]) + images = tf.map_fn( + lambda x: tf.image.decode_jpeg(x, channels=3), + images, back_prop=False, dtype=tf.uint8) + bbox = tf.map_fn( + lambda x: centernet_input_pipeline.decode_boxes(x, tf.shape(images)[1:3]), + bbox, back_prop=False, dtype=tf.float32) + return { + 'images': images, + 'boxes': bbox, + 'track_ids': tf.cast(track_id, tf.int32), + 'captions': caption, + 'video_id': tf.sparse.to_dense(context_feature['video_id']), + 'video_captions': tf.sparse.to_dense(context_feature['video/captions']), + 'frame_inds': inds, + 'image_ids': tf.sparse.to_dense(context_feature['image_ids']), + } + + +def decode_densecap_annotations( + example, + tokenizer, + max_boxes=100, + max_video_captions=100, + max_image_captions=1, + max_text_tokens=40, + ): + """Convert custom tfrecord into training pipeline builder format.""" + images = tf.cast(example['images'], tf.float32) + boxes = example['boxes'] + boxes = boxes[:, :max_boxes] + size = tf.cast(tf.shape(images)[1:3], dtype=tf.int32) + video_caption_tokens = tokenizer.string_tensor_to_indices( + example['video_captions'], + prepend_bos=True, append_eos=True, + max_num_tokens=max_text_tokens) + video_caption_inds = tf.random.shuffle( + tf.range(tf.shape(video_caption_tokens)[0]))[:max_video_captions] + video_caption_tokens = tf.gather(video_caption_tokens, video_caption_inds) + if 'image_captions' in example: + image_captions_tokens = tf.map_fn( + # pylint:disable=g-long-lambda + lambda x: tokenizer.string_tensor_to_indices( + x, prepend_bos=True, append_eos=True, + max_num_tokens=max_text_tokens), + # pylint:enable=g-long-lambda + example['image_captions'][:, :max_image_captions], + back_prop=False, fn_output_signature=tf.int32) + else: + image_captions_tokens = tf.zeros( + (tf.shape(images)[0], max_image_captions, max_text_tokens), tf.int32) + target = { + 'boxes': boxes, + 'text_tokens': tf.map_fn( + # pylint:disable=g-long-lambda + lambda x: tokenizer.string_tensor_to_indices( + x, prepend_bos=True, append_eos=True, + max_num_tokens=max_text_tokens), + # pylint:enable=g-long-lambda + example['captions'][:, :max_boxes], + back_prop=False, fn_output_signature=tf.int32), + 'orig_size': size, + 'track_ids': tf.cast(example['track_ids'][:, :max_boxes], tf.int32), + 'size': tf.identity(size), + 'labels': tf.zeros(tf.shape(boxes)[:-1], dtype=tf.int32), + 'video_caption_tokens': video_caption_tokens, + 'frame_inds': example['frame_inds'], + 'image_caption_tokens': image_captions_tokens, + } + return { + 'inputs': images, + 'label': target, + 'loss_masks': { + f'{k}_loss_mask': example[f'{k}_loss_mask'] for k in ALL_LOSSES} + } + +videocap_sequence_feature_description = { + 'image/encoded': tf.io.FixedLenSequenceFeature([], tf.string), +} + +videocap_context_feature_description = { + 'caption/string': tf.io.VarLenFeature(tf.string), + 'video_id': tf.io.VarLenFeature(tf.string), + 'clip/data_path': tf.io.VarLenFeature(tf.string), +} + + +def get_inds(num_frames, max_frames, temporal_stride): + sample_stride = tf.maximum( + tf.minimum(temporal_stride, max_frames // num_frames), 1) + max_offset = tf.maximum(max_frames - num_frames * sample_stride, 1) + if temporal_stride > 0: # sample a window with fixed stride + offset = tf.random.uniform( + (), maxval=max_offset, dtype=tf.int32) + return tf.minimum(tf.range( + offset, offset + num_frames * sample_stride, + delta=temporal_stride), max_frames - 1) + else: # global uniform sample + return tf.sort(tf.random.shuffle(tf.range(max_frames))[:num_frames]) + + +def decode_videocap( + context_feature, seq_feature, _, + num_frames=6, temporal_stride=1, train=False): + """Convert custom tfrecord into tfds builder format.""" + images = seq_feature['image/encoded'] + if num_frames > 0: + max_frames = tf.shape(images)[0] + if train: + inds = get_inds(num_frames, max_frames, temporal_stride) + else: + stride = max_frames // num_frames + inds = tf.range(num_frames) * stride + else: + inds = tf.range(tf.shape(images)[0]) + images = tf.gather(images, inds) + images = tf.map_fn( + lambda x: tf.image.decode_jpeg(x, channels=3), + images, back_prop=False, dtype=tf.uint8) + video_captions = tf.sparse.to_dense(context_feature['caption/string']) + return { + 'images': images, + 'boxes': tf.zeros((num_frames, 0, 4), dtype=tf.float32), + 'captions': tf.constant([[] for _ in range(num_frames)], dtype=tf.string), + 'track_ids': tf.zeros((num_frames, 0), dtype=tf.int32), + 'video_id': tf.zeros([], dtype=tf.int32), + 'video_captions': video_captions, + 'image_ids': tf.zeros((num_frames,), dtype=tf.int32), + 'frame_inds': inds, + } + + +def tf_float(t): + return tf.cast(t, tf.float32) + + +def tf_int32(t): + return tf.cast(t, tf.int32) + + +def get_aug_param(aug_ratio, h, w, size): + ratio = tf.random.uniform( + [], aug_ratio[0], aug_ratio[1], dtype=tf.float32) + h = tf.cast(tf.cast(h, tf.float32) * ratio, tf.int32) + w = tf.cast(tf.cast(w, tf.float32) * ratio, tf.int32) + i = tf.random.uniform([], 0, h - tf.minimum(h, size) + 1, dtype=tf.int32) + j = tf.random.uniform([], 0, w - tf.minimum(w, size) + 1, dtype=tf.int32) + return tf.stack([h, w, i, j], axis=0) + + +def augment_image_annotation(image, bbox, h, w, size, param): + """Apply data augmentation.""" + # resize + new_size = tf_int32(param[:2]) + new_image = tf.image.resize(image, new_size) + r_height = tf_float(new_size[0]) / tf_float(h) + r_width = tf_float(new_size[1]) / tf_float(w) + new_boxes = tf.stack( + [bbox[:, 0] * r_width, bbox[:, 1] * r_height, + bbox[:, 2] * r_width, bbox[:, 3] * r_height], axis=-1) + # crop + i, j = tf_int32(param[2]), tf_int32(param[3]) + hcrop = tf.minimum(new_size[0], size) + wcrop = tf.minimum(new_size[1], size) + new_image = new_image[i: i + hcrop, j: j + wcrop] + new_image = tf.image.pad_to_bounding_box( + new_image, 0, 0, size, size) + new_boxes = new_boxes - tf_float(tf.expand_dims( + tf.stack([j, i, j, i]), axis=0)) + new_boxes = tf.minimum( + tf.reshape(new_boxes, [-1, 2, 2]), + tf.reshape(tf_float(tf.stack([wcrop, hcrop])), [1, 1, 2])) + new_boxes = tf.clip_by_value(new_boxes, 0, 1000000) + new_boxes = tf.reshape(new_boxes, [-1, 4]) + area = tf.reduce_prod(new_boxes[:, 2:] - new_boxes[:, :2], axis=-1) + # Mark invalid boxes as all zero. Otherwise training goes NaN. + new_boxes = new_boxes * tf_float(area[:, None] > 0) + return new_image, new_boxes + + +def pad_to(image, size): + input_shape = tf.shape(image) + padding = tf.math.maximum(size - input_shape, 0) + paddings = tf.stack([[0, padding[i]] for i in range(len(padding))], axis=0) + return tf.pad(image, paddings) + + +def pad_string_tensor(tensor, target_shape): + input_shape = tf.shape(tensor) + padding = tf.math.maximum(target_shape - input_shape, 0) + paddings = tf.stack([[0, padding[i]] for i in range(len(padding))], axis=0) + return tf.pad(tensor, paddings, constant_values='') + + +def decode_and_pad_vg_image(data, max_size, max_boxes, scale_range): + """Augment an image into a video.""" + image = tf.io.decode_jpeg(data['image']) + h, w = tf.shape(image)[0], tf.shape(image)[1] + bbox = tf.reshape( + tf.sparse.to_dense(data['regions/bbox']), [-1, 4]) + num_boxes = tf.shape(bbox)[0] + bbox = centernet_input_pipeline.decode_boxes(bbox, (h, w)) + caption = tf.sparse.to_dense(data['regions/phrase']) + param = get_aug_param(scale_range, h, w, max_size) + image, bbox = augment_image_annotation(image, bbox, h, w, max_size, param) + inds = tf.random.shuffle(tf.range(num_boxes))[:max_boxes] + bbox = tf.gather(bbox, inds) + caption = tf.gather(caption, inds) + return { + 'images': pad_to(image, [max_size, max_size, 3]), + 'boxes': pad_to(bbox, [max_boxes, 4]), + 'captions': pad_string_tensor(caption, [max_boxes]), + 'track_ids': pad_to( + tf.zeros((num_boxes,), tf.int32)[:max_boxes], [max_boxes]), + 'frame_inds': tf.zeros((), dtype=tf.int32), + 'image_ids': tf.zeros((), dtype=tf.int32), + } + + +def add_zero_video_keys(data): + data['video_id'] = tf.zeros((), dtype=tf.int32) + data['video_captions'] = tf.constant([''], dtype=tf.string) + return data + + +def convert_coco_format(data, max_size, max_boxes, scale_range): + """Augment an image into a video.""" + image = data['image'] + h, w = tf.shape(image)[0], tf.shape(image)[1] + bbox = tf.reshape(data['objects']['bbox'], [-1, 4]) + bbox = centernet_input_pipeline.decode_boxes(bbox, (h, w)) + param = get_aug_param(scale_range, h, w, max_size) + image, bbox = augment_image_annotation(image, bbox, h, w, max_size, param) + keep = tf.where( + tf.logical_and( + tf.logical_not(data['objects']['is_crowd']), + tf.logical_and( + bbox[:, 2] > bbox[:, 0], bbox[:, 3] > bbox[:, 1]) + ) + )[:, 0] + bbox = tf.gather(bbox, keep) + num_boxes = tf.shape(bbox)[0] + inds = tf.random.shuffle(tf.range(num_boxes))[:max_boxes] + bbox = tf.gather(bbox, inds) + caption = tf.zeros((max_boxes,), dtype=tf.string) + return { + 'images': pad_to(image, [max_size, max_size, 3]), + 'boxes': pad_to(bbox, [max_boxes, 4]), + 'captions': pad_string_tensor(caption, [max_boxes]), + 'track_ids': pad_to( + tf.zeros((num_boxes,), tf.int32)[:max_boxes], [max_boxes]), + 'frame_inds': tf.zeros((), dtype=tf.int32), + 'image_ids': tf.zeros((), dtype=tf.int32), + } + + +def convert_coco_as_video( + data, num_frames=6, size=384, aug_ratio=(0.1, 2.0)): + """Augment an image into a video.""" + image_id = tf.zeros((), dtype=tf.int32) + image = data['image'] + h, w = tf.shape(image)[0], tf.shape(image)[1] + bbox = tf.reshape(data['objects']['bbox'], [-1, 4]) + num_boxes = tf.shape(bbox)[0] + bbox = centernet_input_pipeline.decode_boxes(bbox, (h, w)) + + caption = tf.zeros((num_boxes,), dtype=tf.string) + param1 = get_aug_param(aug_ratio, h, w, size) + param2 = get_aug_param(aug_ratio, h, w, size) + + images, bboxes = [], [] + params = tf.linspace(tf_float(param1), tf_float(param2), num_frames) + for t in range(num_frames): + new_image, new_boxes = augment_image_annotation( + image, bbox, h, w, size, params[t]) + new_boxes = new_boxes * tf_float( + tf.logical_not(data['objects']['is_crowd']))[:, None] + images.append(new_image) + bboxes.append(new_boxes) + images = tf.stack(images, axis=0) # (T, H, W, 3) + bboxes = tf.stack(bboxes, axis=0) # (T, N, 4) + track_ids = tf.broadcast_to( + tf.range(num_boxes)[None], (num_frames, num_boxes)) + 1 + track_ids = track_ids * tf_int32(tf.reduce_max(bboxes, axis=-1) > 0) + captions = tf.stack([caption for _ in range(num_frames)], axis=0) + return { + 'images': images, + 'boxes': bboxes, + 'captions': captions, + 'track_ids': track_ids, + 'video_id': image_id, + 'video_captions': tf.constant([''], dtype=tf.string), + 'frame_inds': tf.zeros((num_frames), dtype=tf.int32), + 'image_ids': tf.stack([image_id for _ in range(num_frames)], axis=0), + } + + +def convert_cococaption_format(data, max_size, max_boxes, max_image_captions): + """Convert COCO captioning format to detection by adding zero objects.""" + image = data['image'] + h, w = tf.shape(image)[0], tf.shape(image)[1] + bbox = tf.zeros((0, 4), tf.float32) + param = get_aug_param((1.0, 1.0), h, w, max_size) + image, _ = augment_image_annotation(image, bbox, h, w, max_size, param) + caption = tf.zeros((max_boxes,), dtype=tf.string) + return { + 'images': pad_to(image, [max_size, max_size, 3]), + 'boxes': tf.zeros((max_boxes, 4), dtype=tf.float32), + 'captions': pad_string_tensor(caption, [max_boxes]), + 'track_ids': tf.zeros((max_boxes,), dtype=tf.float32), + 'frame_inds': tf.zeros((), dtype=tf.int32), + 'image_ids': tf.zeros((), dtype=tf.int32), + 'image_captions': data['captions']['text'][:max_image_captions], + } + + +def add_loss_mask(data, losses): + assert set(losses).issubset(ALL_LOSSES), losses + for loss in ALL_LOSSES: + data[f'{loss}_loss_mask'] = tf.ones( + (1,), dtype=tf.float32) * float(loss in losses) + return data + + +def build_detection_ds(dataset_path): + """Build a detection dataset.""" + if dataset_path == 'coco/2017': + builder = tfds.builder('coco/2017') + data_range = tfds.even_splits( + 'train', jax.process_count())[jax.process_index()] + ds = builder.as_dataset(split=data_range) + else: + ds = tf.data.TFRecordDataset( + centernet_input_pipeline.decode_sharded_names(dataset_path)) + ds = ds.shard(jax.process_count(), jax.process_index()) + ds = ds.map( + lambda x: tf.io.parse_single_example( + x, centernet_input_pipeline.coco_feature_description)) + ds = ds.map(centernet_input_pipeline.coco_decode_example) + return ds + + +def load_video_train_tfds( + batch_size, + *, + dataset_path, + tokenizer, + max_size=256, + max_boxes=100, + max_text_tokens=40, + shuffle_buffer_size=1000, + shuffle_seed=0, + max_frames=200, + max_video_captions=100, + temporal_stride=1, + scale_range=(0.5, 1.5), # pylint: disable=unused-argument + ensure_sample_has_objects=True, + dataset_format='full', + track_id_key='objects/track_id', + max_image_captions=1): + """Loads a split of a video dataset using TensorFlow Datasets. + + Args: + batch_size: int; The batch size returned by the data pipeline. + dataset_path: string; path of the dataset; by default load from tfds + tokenizer: tokenizer + max_size: int; Maximum image size. + max_boxes: int; Maximum number of boxes. + max_text_tokens: int; max number of text tokens. + shuffle_buffer_size: int; Size of the shuffle buffer. + shuffle_seed: int; Seed for shuffling the training data. + max_frames: int max number of frames. + max_video_captions: int. + temporal_stride: stride to downsample frames. + scale_range: spatial data augmentation for image datasets. + ensure_sample_has_objects: bool. + dataset_format: str + track_id_key: str + max_image_captions: int + + Returns: + A `tf.data.Dataset`, and dataset info. + """ + ds_info = {} + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + + if dataset_format in ['full', 'videotracking']: + ds = tf.data.TFRecordDataset( + centernet_input_pipeline.decode_sharded_names(dataset_path)) + ds = ds.shard(jax.process_count(), jax.process_index()) + ds = ds.map( + lambda x: tf.io.parse_sequence_example( + x, + sequence_features=densecap_sequence_feature_description, + context_features=densecap_context_feature_description)) + ds = ds.with_options(options) + ds = ds.repeat() + ds = ds.shuffle(shuffle_buffer_size, seed=shuffle_seed) + ds = ds.map( + lambda x, y, _: + decode_and_sample_video_example( + x, y, _, max_frames, temporal_stride, ensure_sample_has_objects, + track_id_key=track_id_key), + num_parallel_calls=tf.data.experimental.AUTOTUNE) + losses = ['det', 'track'] + if dataset_format == 'full': + losses.extend(['objcap', 'trackcap']) + ds = ds.map(lambda x: add_loss_mask(x, losses)) + elif dataset_format == 'videocap': + if 'tfrecord' in dataset_path: + ds = tf.data.TFRecordDataset( + centernet_input_pipeline.decode_sharded_names(dataset_path)) + ds = ds.shard(jax.process_count(), jax.process_index()) + ds = ds.map( + lambda x: tf.io.parse_sequence_example( + x, + sequence_features=videocap_sequence_feature_description, + context_features=videocap_context_feature_description)) + else: + raise ValueError('Unsupported dataset format: %s' % dataset_path) + ds = ds.with_options(options) + ds = ds.repeat() + ds = ds.shuffle(shuffle_buffer_size, seed=shuffle_seed) + ds = ds.map( + lambda x, y, _: + decode_videocap( + x, y, _, max_frames, temporal_stride), + num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.map(lambda x: add_loss_mask(x, ['vidcap'])) + elif dataset_format in ['imagedensecap', 'imagedensecap-nodet']: + ds = tf.data.TFRecordDataset( + centernet_input_pipeline.decode_sharded_names(dataset_path)) + ds = ds.shard(jax.process_count(), jax.process_index()) + ds = ds.map( + lambda x: tf.io.parse_single_example(x, vg_feature_description)) + ds = ds.with_options(options) + ds = ds.repeat() + ds = ds.shuffle(shuffle_buffer_size, seed=shuffle_seed) + ds = ds.map( + lambda x: decode_and_pad_vg_image(x, max_size, max_boxes, scale_range), + num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.batch(max_frames, drop_remainder=True) + ds = ds.map(add_zero_video_keys) + losses = ['objcap'] if dataset_format == 'imagedensecap-nodet' else [ + 'det', 'objcap'] + ds = ds.map(lambda x: add_loss_mask(x, losses)) + elif dataset_format == 'imagedetection': + ds = build_detection_ds(dataset_path) + ds = ds.with_options(options) + ds = ds.repeat() + ds = ds.shuffle(shuffle_buffer_size, seed=shuffle_seed) + ds = ds.map( + lambda x: convert_coco_format(x, max_size, max_boxes, scale_range), + num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.batch(max_frames, drop_remainder=True) + ds = ds.map(add_zero_video_keys) + ds = ds.map(lambda x: add_loss_mask(x, ['det'])) + elif dataset_format == 'imagedetection-augment': + ds = build_detection_ds(dataset_path) + ds = ds.with_options(options) + ds = ds.repeat() + ds = ds.shuffle(shuffle_buffer_size, seed=shuffle_seed) + ds = ds.map( + lambda x: convert_coco_as_video( + x, num_frames=max_frames, size=max_size), + num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.map(lambda x: add_loss_mask(x, ['det', 'track'])) + elif dataset_format == 'imagecap': + assert dataset_path == 'coco_captions' + builder = tfds.builder('coco_captions') + split = 'train+restval' + data_range = tfds.even_splits( + split, jax.process_count())[jax.process_index()] + ds = builder.as_dataset(split=data_range) + ds = ds.with_options(options) + ds = ds.repeat() + ds = ds.shuffle(shuffle_buffer_size, seed=shuffle_seed) + ds = ds.map( + lambda x: convert_cococaption_format( + x, max_size, max_boxes, max_image_captions), + num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.batch(max_frames, drop_remainder=True) + ds = ds.map(add_zero_video_keys) + ds = ds.map(lambda x: add_loss_mask(x, ['imagecap'])) + else: + raise NotImplementedError(dataset_format) + ds = ds.map( + lambda x: decode_densecap_annotations + (x, tokenizer, max_boxes=max_boxes, + max_video_captions=max_video_captions, + max_image_captions=max_image_captions)) + + padded_shapes = { + 'inputs': [max_frames, max_size, max_size, 3], + 'label': { + 'boxes': [max_frames, max_boxes, 4], + 'text_tokens': [max_frames, max_boxes, max_text_tokens], + 'labels': [max_frames, max_boxes], + 'track_ids': [max_frames, max_boxes], + 'orig_size': [2,], + 'size': [2,], + 'video_caption_tokens': [max_video_captions, max_text_tokens], + 'frame_inds': [max_frames,], + 'image_caption_tokens': [ + max_frames, max_image_captions, max_text_tokens], + }, + 'loss_masks': { + 'det_loss_mask': [1,], + 'objcap_loss_mask': [1,], + 'track_loss_mask': [1,], + 'trackcap_loss_mask': [1,], + 'vidcap_loss_mask': [1,], + 'imagecap_loss_mask': [1,], + } + } + preprocess_fn = lambda x: video_resize_max_size(x, max_size) + ds = ds.map(preprocess_fn, num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.padded_batch( + batch_size, padded_shapes=padded_shapes, drop_remainder=True) + + ds = ds.prefetch(tf.data.experimental.AUTOTUNE) + return ds, ds_info diff --git a/scenic/projects/densevoc/main.py b/scenic/projects/densevoc/main.py new file mode 100644 index 0000000000000000000000000000000000000000..d44a5d595a46514447a09649aaa9b78537da646f --- /dev/null +++ b/scenic/projects/densevoc/main.py @@ -0,0 +1,75 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for DenseVOC.""" +import os +from typing import Any + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.densevoc import evaluate +from scenic.projects.densevoc import input_pipeline +from scenic.projects.densevoc import trainer +from scenic.projects.densevoc.modeling import densevoc_model +from scenic.projects.densevoc.modeling import grit +# replace with the path to your JAVA bin location +JRE_BIN_JAVA = path_to_jre_bin_java + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name: str) -> Any: + """Returns model class given its name.""" + if model_name == 'grit': + return grit.GRiTModel + elif model_name == 'densevoc': + return densevoc_model.DenseVOCModel + else: + raise ValueError(f'Unrecognized model: {model_name}.') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the CenterNet project.""" + jave_jre = JRE_BIN_JAVA + os.environ['JRE_BIN_JAVA'] = java_jre + model_cls = get_model_cls(config.model.model_name) + data_rng, rng = jax.random.split(rng) + dataset = input_pipeline.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + eval_only = config.get('eval_only', False) + if eval_only: + evaluate.evaluate( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + else: + trainer.train_and_evaluate( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/densevoc/modeling/__init__.py b/scenic/projects/densevoc/modeling/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/densevoc/modeling/auto_regressive_decode.py b/scenic/projects/densevoc/modeling/auto_regressive_decode.py new file mode 100644 index 0000000000000000000000000000000000000000..dc723900ac6000610560d3ae11c29deea1d13470 --- /dev/null +++ b/scenic/projects/densevoc/modeling/auto_regressive_decode.py @@ -0,0 +1,107 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Auto-regressive generate caption. + +This is simplified from t5 decoding +https://github.com/google-research/t5x/blob/main/t5x/decoding.py. +We don't use beam search (always take the top-1) and don't use model cache. +""" +import functools + +import flax +import jax +import jax.numpy as jnp + + +@flax.struct.dataclass +class State: + """Holds beam search state data.""" + cur_index: jax.Array # int + predictions: jax.Array # int array of (batch_size, max_steps) + sum_log_prob: jax.Array # float array of (batch_size,) + + +def scatter_min(inp, index, src): + """Jax implementation of torch.scatter(inp, 1, index, src).""" + # from https://github.com/jax-ml/jax/issues/8487 + dnums = jax.lax.ScatterDimensionNumbers( + update_window_dims=(), inserted_window_dims=(0,), + scatter_dims_to_operand_dims=(0,)) + scatter = functools.partial(jax.lax.scatter_min, dimension_numbers=dnums) + scatter = jax.vmap(scatter, in_axes=(0, 0, 0), out_axes=0) + return scatter(inp, jnp.expand_dims(index, axis=-1), src) + + +def auto_regressive_decode( + begin_token, tokens_to_logits, + max_steps=40, eos_index=102, vocab_size=30522): + """Autoregressively generate a single caption. + + Args: + begin_token: int array (batch_size, max_steps) + tokens_to_logits: a function that converts input + (batch_size, max_steps) to (batch_size, max_steps, vocab_size) + max_steps: int + eos_index: int. Default from bert tokenizer. + vocab_size: int. Default from bert tokenizer. + + Returns: + predictions: (batch_size, max_steps) + log_prob: (batch_size,) + """ + batch_size = begin_token.shape[0] + logits_after_end = jnp.full( + (batch_size, vocab_size), float("-inf"), dtype=jnp.float32) + logits_after_end = logits_after_end.at[:, eos_index].set(0) + + def cond_fn(state: State) -> bool: + return state.cur_index < max_steps - 1 # pytype: disable=bad-return-type # jax-devicearray + + def body_fn(state: State) -> State: + logits = tokens_to_logits( + state.predictions)[:, state.cur_index - 1] # (batch_size, vocab_size) + # Avoid predicting repeating words following: + # https://github.com/JialianW/GRiT/blob/master/grit/modeling/text/ + # text_decoder.py#L450 + last_prediction = state.predictions[:, state.cur_index - 1] # (batch_size,) + logits = scatter_min( + logits, last_prediction, + jnp.full((logits.shape[0],), -10000., dtype=jnp.float32)) + logits = jnp.where( + jnp.broadcast_to( + last_prediction[:, None], (batch_size, vocab_size)) == eos_index, + logits_after_end, logits) # (batch_size, vocab_size) + log_prob = jax.nn.log_softmax(logits) # (batch_size, vocab_size) + inds = jnp.argmax(log_prob, axis=-1) # (batch_size,) + predictions = state.predictions.at[:, state.cur_index].set( + inds) # (batch_size, max_steps) + max_log_prob = jnp.max(log_prob, axis=-1) # (batch_size,) + new_log_prob = state.sum_log_prob + max_log_prob # (batch_size,) + return State( + cur_index=state.cur_index + 1, + predictions=predictions, + sum_log_prob=new_log_prob) + + init_state = State( # pytype: disable=wrong-arg-types # jax-devicearray + cur_index=1, + predictions=begin_token, + sum_log_prob=jnp.zeros((begin_token.shape[0],), dtype=jnp.float32)) + final_state = jax.lax.while_loop(cond_fn, body_fn, init_state) + predictions = final_state.predictions # (batch_size, max_steps) + sum_log_prob = final_state.sum_log_prob + num_valid = (predictions != eos_index).sum(axis=-1) - 1 # (batch_size,) + num_valid = jnp.maximum(num_valid, 1) + log_probs = sum_log_prob / num_valid + return predictions, log_probs diff --git a/scenic/projects/densevoc/modeling/densevoc_model.py b/scenic/projects/densevoc/modeling/densevoc_model.py new file mode 100644 index 0000000000000000000000000000000000000000..d15925ad7763cec51ffcf06b3ed5b6ffff7ed3c1 --- /dev/null +++ b/scenic/projects/densevoc/modeling/densevoc_model.py @@ -0,0 +1,585 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of Dense Video Object Captioning (https://arxiv.org/pdf/2306.11729.pdf).""" + +import dataclasses +from typing import Any, Dict, Optional, Tuple + +import flax.linen as nn +import jax +import jax.numpy as jnp +import optax + +from scenic.projects.baselines.centernet.modeling import iou_assignment +from scenic.projects.baselines.centernet.modeling import roi_head_utils +from scenic.projects.densevoc.modeling import grit +from scenic.projects.densevoc.modeling import tracking_layers +from scenic.projects.densevoc.modeling import tracking_utils + +Assignment = iou_assignment.Assignment +ArrayDict = Dict[str, jnp.ndarray] +MetricsDict = Dict[str, Tuple[jnp.ndarray, jnp.ndarray]] + +DETECTION_LOSS_KEYS = [ + 'pos_loss', 'neg_loss', 'reg_loss', + 'stage0_roi_cls_loss', 'stage0_roi_reg_loss'] + + +class DenseVOCDetector(grit.GRiTDetector): + """Video-based detector.""" + bg_proposal_thresh: float = 0.1 + track_loss_score_thresh: float = 0.0 + + with_tracking: bool = False + tracking_loss_weight: float = 1.0 + tracking_iou_thresh: float = 0.6 + propagate_asso_scores: float = -1. + + caption_with_track: bool = False + use_tracked_object_features: bool = False + asso_windows: int = -1 + + hard_tracking: bool = False + hard_tracking_test: bool = False + tracking_score_thresh: float = 0.3 + max_num_tracks: int = 4 + hard_tracking_frames: int = 6 + + flatten_video_input: bool = False + with_global_video_caption: bool = False + global_text_loss_weight: float = 1.0 + num_frames: int = -1 + skip_global_caption_test: bool = False + frame_fuse_fn: str = 'concat' + + use_loss_masks: bool = False + consistent_soft_track: bool = False + + def setup(self): + super().setup() + if self.with_tracking: + self.tracking_layers = tracking_layers.GTRAssoHead() + self.tracking_transformer = tracking_layers.GTRTransformer() + + def flatten_time_to_batch( + self, inputs, gt_boxes, gt_classes, gt_text_tokens, gt_track_ids, + image_caption_tokens): + b, t = inputs.shape[0], inputs.shape[1] + inputs = inputs.reshape( + (b * t,) + inputs.shape[2:]) + if gt_boxes is not None: + gt_boxes = gt_boxes.reshape((b * t,) + gt_boxes.shape[2:]) + if gt_classes is not None: + gt_classes = gt_classes.reshape((b * t,) + gt_classes.shape[2:]) + if gt_text_tokens is not None: + gt_text_tokens = gt_text_tokens.reshape( + (b * t,) + gt_text_tokens.shape[2:]) + if gt_track_ids is not None: + gt_track_ids = gt_track_ids.reshape((b * t,) + gt_track_ids.shape[2:]) + if image_caption_tokens is not None: + image_caption_tokens = image_caption_tokens.reshape( + (b * t,) + image_caption_tokens.shape[2:]) + return (inputs, gt_boxes, gt_classes, gt_text_tokens, + gt_track_ids, image_caption_tokens) + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + gt_boxes: Optional[jnp.ndarray] = None, + gt_classes: Optional[jnp.ndarray] = None, + gt_text_tokens: Optional[jnp.ndarray] = None, + gt_track_ids: Optional[jnp.ndarray] = None, + video_caption_tokens: Optional[jnp.ndarray] = None, + image_caption_tokens: Optional[jnp.ndarray] = None, + train: bool = False, + preprocess: bool = False, + *, + padding_mask: Optional[jnp.ndarray] = None, + debug: bool = False) -> Any: + """Applies DenseVOC model on the input. + + Args: + inputs: array of the preprocessed input images, in shape B x H x W x 3. + gt_boxes: B x N x 4. Only used in training. + gt_classes: B x N. Only used in training. + gt_text_tokens: B x N x max_caption_length. Only used in training. + gt_track_ids: B x N. int; Only used in training. + video_caption_tokens: 1 x N x max_caption_length + image_caption_tokens: B x max_num_captions x max_caption_length + train: Whether it is training. + preprocess: If using the build-in preprocessing functions on inputs. + padding_mask: Binary matrix with 0 at padded image regions. + debug: Whether the debug mode is enabled. debug=True enables model + specific logging/storing some values using jax.host_callback. + + Returns: + if train == False: + detections: a dict with the following keys: + 'detection_boxes': batch_size x max_detections x 4 + 'detection_scores': batch_size x max_detections + 'detection_classes': batch_size x max_detections, 0-based int. + 'object_features': batch_size x max_detections x 196 x 256 + 'begin_tokens': batch_size x max_detections x max_caption_length + if train == True: + TODO(zhouxy): complete after implementing training. + """ + # the input is a video, reshape it. + if self.flatten_video_input and inputs.ndim == 5: + # assert inputs.ndim == 5 + (inputs, gt_boxes, gt_classes, gt_text_tokens, + gt_track_ids, unused_image_caption_tokens) = self.flatten_time_to_batch( + inputs, gt_boxes, gt_classes, gt_text_tokens, gt_track_ids, + image_caption_tokens) + if preprocess: + inputs = self.preprocess(inputs, padding_mask) + backbone_features = self.backbone(inputs, train=train) + outputs = self.proposal_generator( + backbone_features, train=train) + + detections, metrics, rpn_features, gt_classes, image_shape = ( + self.forward_detection( + inputs, outputs, backbone_features, gt_classes, gt_boxes, + train=train, debug=debug)) + + strides = sorted(self.roi_heads.input_strides.items(), key=lambda x: x[1]) + features = [rpn_features[s[0]] for s in strides] # Sorted features + outputs, aux = self.forward_object_caption( + detections, metrics, outputs, features, + gt_classes, gt_boxes, gt_text_tokens, train=train) + (metrics, object_features, last_proposals, unused_text_tokens, + matched_text, matched) = aux + + # The proposals have both positive and negative boxes. + # The following losses are only applied on positive objects. + # Marking the background objects by setting their features to 0. + # The followup process will ignore them. + if train: + object_features = object_features * matched[:, :, None, None, None] + else: + object_features = object_features * (detections[ + 'detection_scores'][:, :, None, None] >= self.bg_proposal_thresh) + detections['object_features'] = object_features + res = self.object_feat_res + + # Forward the tracking head and get the "asso_score" outputs. + if self.with_tracking: + outputs = self.forward_tracking( + last_proposals, + object_features.reshape( + object_features.shape[:2] + (res, res, -1)), + gt_boxes, gt_track_ids, + outputs, metrics, debug=debug) + + # use the "asso_score" outputs to produce new captions. + if self.caption_with_track: + assert self.with_tracking + outputs = self.forward_caption_with_track( + object_features.reshape( + object_features.shape[:2] + (res, res, -1)), + matched_text, matched, + outputs, metrics, train=train, debug=debug) + + if self.with_global_video_caption and not ( + self.skip_global_caption_test and not train): + outputs = self.forward_global_video_caption( + features, video_caption_tokens, + image_shape, outputs, metrics, train=train, debug=debug, + ) + + return outputs + + def forward_global_video_caption( + self, features, video_caption_tokens, + image_shape, outputs, metrics, + train=False, debug=False): + """Forward global video captioning. + + Args: + features: list of arrays: FPN features. + video_caption_tokens: 1 x N x max_caption_length. Only used in training. + image_shape: B x 2, in order (height, width). + outputs: dict of arrays. + metrics: dict of floats. + train: bool. + debug: bool. + Returns: + updated outputs with additional keys: + when train==False: + 'global_begin_tokens': (video_batch_size, max_cap_len) + 'global_features': (video_batch_size, num_tokens, C) + when train==True: + 'global_text_loss': float + 'global_num_valid_tokens': float + """ + del debug + batch_size = image_shape.shape[0] + assert self.num_frames > 0, self.num_frames + assert batch_size % self.num_frames == 0, batch_size + video_batch_size = batch_size // self.num_frames + # assert video_batch_size == 1 + feat_res = self.object_feat_res + image_box = jnp.concatenate( + [jnp.zeros((batch_size, 2), jnp.float32), + image_shape[:, 1:2], image_shape[:, 0:1]], + axis=1)[:, None] # (batch_size, 1, 4) + global_features = self.roi_heads.roi_align( + features, image_box, feat_res, + ) # (batch_size, 1, feat_res, feat_res, C) + if self.frame_fuse_fn == 'concat': + global_features = global_features.reshape( + video_batch_size, self.num_frames * feat_res ** 2, -1, + ) # (video_batch_size, self.num_frames * feat_res ** 2, C) + else: + assert self.frame_fuse_fn == 'mean', self.frame_fuse_fn + global_features = global_features.reshape( + video_batch_size, self.num_frames, feat_res ** 2, -1, + ).mean(axis=1) # (video_batch_size, feat_res ** 2, C) + if video_caption_tokens is None: # evaluation + assert not train + global_text_tokens = jnp.full( + (video_batch_size, self.max_caption_length), + self.end_token_id, + dtype=jnp.int32) # (video_batch_size, max_cap_len) + global_text_tokens = global_text_tokens.at[:, 0].set( + self.begin_token_id) # (video_batch_size, max_cap_len) + global_text_feature = self.text_decoder( + global_text_tokens, + global_features, + train=train, + ) # (video_batch_size, max_caption_length, vocab_size) + del global_text_feature + outputs['global_begin_tokens'] = global_text_tokens + outputs['global_features'] = global_features + else: # training + assert train + # video_caption_tokens: 1 x N x max_caption_length + # Expand feature (batch_size, 1, object_feat_res, object_feat_res, C) + num_caption_per_video = video_caption_tokens.shape[1] + text_batch_size = video_batch_size * num_caption_per_video + video_caption_tokens = video_caption_tokens.reshape( + text_batch_size, self.max_caption_length) + global_features = jnp.broadcast_to( + global_features[:, None], + (video_batch_size, num_caption_per_video) + global_features.shape[1:]) + global_features = global_features.reshape( + (text_batch_size,) + global_features.shape[2:]) + text_outputs = self.text_decoder( + video_caption_tokens, global_features, train=train, + ) # (text_batch_size, max_caption_length, vocab_size) + mask = (video_caption_tokens[:, 0] != self.end_token_id) & ( + video_caption_tokens[:, 0] > 0) + text_loss, num_valid_tokens = self.text_loss( + text_outputs, + video_caption_tokens, + mask=mask) + metrics['global_text_loss'] = text_loss + metrics['global_num_valid_tokens'] = num_valid_tokens + outputs['metrics'] = metrics + return outputs + + def forward_caption_with_track( + self, object_features, matched_text, matched, + outputs, metrics, train=False, debug=False): + """Generate captions using augmented features from tracking. + + Args: + object_features: (batch_size, num_objs, res, res, D) + matched_text: (batch_size, num_objs, max_cap_len) + matched: (batch_size, num_objs): 1: matched; 0: not matched. + outputs: dict of arrays. + metrics: dict of floats. + train: bool. + debug: bool. + Returns: + updated outputs + """ + + batch_size, num_objs = object_features.shape[:2] + num_tot_objs = batch_size * num_objs + asso_scores = jax.lax.stop_gradient( + outputs['asso_scores'][0]) # (num_tot_objs, num_tot_objs) + track_ids = tracking_utils.greedy_extract_trajectories( + asso_scores, + num_frames=batch_size, + thresh=self.tracking_score_thresh, + ) # (num_tot_objs,) + outputs['track_ids'] = track_ids.reshape(batch_size, num_objs) + if self.asso_windows >= 0: + # Do not associate with too faraway frames. + windows_mask = jnp.abs((jnp.arange(num_tot_objs)[:, None] // num_objs - ( + jnp.arange(num_tot_objs)[None] // num_objs))) <= self.asso_windows + # Do not associate with other objects in the same frame. + # With this and asso_windows == 0, there should be no association at all. + frame_mask = (jnp.arange(num_tot_objs)[:, None] // num_objs != ( + jnp.arange(num_tot_objs)[None] // num_objs)) | jnp.eye( + num_tot_objs, dtype=bool) + asso_scores = asso_scores * (windows_mask & frame_mask) + + if self.hard_tracking: # "hard" tracking + track_feats, track_feature_mask, track_matrix = ( + tracking_utils.get_track_features( + object_features, track_ids, + max_num_tracks=self.max_num_tracks, + hard_tracking_frames=self.hard_tracking_frames)) + if not train: + if self.hard_tracking_test: + outputs['track_features'] = track_feats + outputs['track_feature_mask'] = track_feature_mask + else: + gt_track_texts = tracking_utils.get_track_texts( + matched_text, track_matrix, + hard_tracking_frames=self.hard_tracking_frames) + text_outputs = self.text_decoder( + gt_track_texts, track_feats, + feature_valid_mask=track_feature_mask, + train=train, + ) # (max_num_tracks, max_caption_length, vocab_size) + text_loss, _ = self.text_loss( + text_outputs, + gt_track_texts, + track_feature_mask.any(axis=1)) + metrics['tracked_text_loss'] = text_loss + outputs['metrics'] = metrics + else: # "soft" tracking + if self.consistent_soft_track: + asso_scores = (track_ids[None, :] == track_ids[:, None]).astype( + jnp.float32) + normalized_asso_scores = asso_scores / ( + asso_scores.sum(axis=1)[:, None] + 1e-6) + if debug: + outputs['normalized_asso_scores'] = normalized_asso_scores + tracked_object_features = jnp.matmul( + normalized_asso_scores, + object_features.reshape(batch_size * num_objs, -1), + ) # (num_tot_objs, res * res * D) + if not train: + outputs['tracked_object_features'] = tracked_object_features.reshape( + batch_size, num_objs, -1, object_features.shape[-1], + ) + else: + text_batch_size = batch_size * num_objs + text_outputs = self.text_decoder( + matched_text.reshape(text_batch_size, self.max_caption_length), + tracked_object_features.reshape( + text_batch_size, -1, object_features.shape[-1]), + train=train, + ) # (text_batch_size, max_caption_length, vocab_size) + text_loss, _ = self.text_loss( + text_outputs, + matched_text.reshape(text_batch_size, self.max_caption_length), + matched.reshape(text_batch_size,)) + metrics['tracked_text_loss'] = text_loss + outputs['metrics'] = metrics + return outputs + + def forward_tracking( + self, last_proposals, object_features, gt_boxes, gt_track_ids, + outputs, metrics, debug=False): + """Forward tracking head. + + The images from the batch are from the same video. + + Args: + last_proposals: (batch_size, num_objs, 4) + object_features: (batch_size, num_objs, res, res, D) + gt_boxes: (batch_size, num_gt_objs, 4) + gt_track_ids: (batch_size, num_gt_objs) + outputs: dict of arrays. + metrics: dict of floats. + debug: bool. + Returns: + outputs + """ + asso_features = self.tracking_layers( + object_features) # (batch_size, num_objs, D) + num_frames, num_objs = asso_features.shape[:2] + num_tot_objs = num_frames * num_objs + asso_features = asso_features.reshape( + 1, num_tot_objs, -1) # (1, num_tot_objs, D) + asso_scores = self.tracking_transformer( + asso_features) # (1, num_tot_objs, num_tot_objs) + outputs['asso_scores'] = nn.sigmoid(asso_scores) + # TODO(zhouxy): check if we can merge with valid_mask below. + valid_object_mask = (( + object_features ** 2).sum(axis=(2, 3, 4)) > 0).reshape(num_tot_objs) + outputs['asso_scores'] = outputs['asso_scores'] * ( + valid_object_mask[None, None, :] * valid_object_mask[None, :, None]) + if gt_track_ids is not None: # training + matched_ids = self.match_tracking_ids( + last_proposals, gt_boxes, gt_track_ids, + self.tracking_iou_thresh, + ) # (batch_size, num_objs) + matched_ids = matched_ids.reshape(num_tot_objs) + tracking_gt = (matched_ids[None, :] == matched_ids[ + :, None])[None] # (1, num_tot_objs, num_tot_objs) + valid_mask = (matched_ids[None, :] > 0) & ( + matched_ids[:, None] > 0)[None] # (1, num_tot_objs, num_tot_objs) + tracking_loss = optax.sigmoid_binary_cross_entropy( + asso_scores, tracking_gt.astype(jnp.float32), + ) * valid_mask.astype(jnp.float32) # (1, num_tot_objs, num_tot_objs) + tracking_loss = tracking_loss.sum() / (valid_mask.sum() + 1e-6) + metrics['tracking_loss'] = tracking_loss + outputs['metrics'] = metrics + if debug: + metrics['tracking_gt'] = tracking_gt + metrics['tracking_mask'] = valid_mask + return outputs + + def match_tracking_ids( + self, proposals, gt_boxes, gt_track_ids, thresh): + """Match proposals and their texts based on bounding box IoU. + + Args: + proposals: Boxes with array (B, num_objs, 4). + gt_boxes: Boxes with array (B, max_gt_boxes, 4). + gt_track_ids: (B, max_gt_boxes). 0 for padded objects. + thresh: float. + Returns: + matched_ids: shape (B, num_objs). + """ + def _impl(proposals, gt_boxes, gt_track_ids): + iou = roi_head_utils.pairwise_iou(gt_boxes, proposals) + matched_idxs, assignments = iou_assignment.label_assignment( + iou, [thresh], [Assignment.NEGATIVE, Assignment.POSITIVE]) + matched_classes = gt_track_ids[matched_idxs] + matched_classes = jnp.where( + assignments != Assignment.POSITIVE, 0, matched_classes) + return matched_classes + matched_ids = jax.vmap(_impl, in_axes=0)(proposals, gt_boxes, gt_track_ids) + return matched_ids + + def update_object_feature_with_track(self, predictions, t): + mask = None + tracked_features = predictions['object_features'] + assert not (self.use_tracked_object_features and self.hard_tracking_test), ( + 'Soft and hard tracking can not be used together.') + if self.use_tracked_object_features: + tracked_features = predictions['tracked_object_features'] + elif self.hard_tracking_test: + num_objs = predictions['object_features'].shape[1] + num_tracks = predictions['track_features'].shape[0] + predictions['track_ids'] = predictions['track_ids'].reshape(t, num_objs) + track_ids = jnp.maximum(jnp.minimum( + predictions['track_ids'] - 1, num_tracks - 1), 0) # (t, num_objs) + object_track_feature = jnp.take_along_axis( + predictions['track_features'][None], + track_ids[:, :, None, None], axis=1) # (t, num_objs, t * res**2, D) + mask = jnp.take_along_axis( + predictions['track_feature_mask'][None], + track_ids[:, :, None], axis=1) # (t, num_objs, t * res**2) + res2 = predictions['object_features'].shape[2] + feature_dim = predictions['object_features'].shape[3] + hard_tracking_frames = object_track_feature.shape[2] // res2 + tracked_features = jnp.where( + predictions['track_ids'][:, :, None, None] > 0, + object_track_feature, + jnp.broadcast_to( + predictions['object_features'][:, :, None], + (t, num_objs, hard_tracking_frames, res2, feature_dim), + ).reshape(t, num_objs, hard_tracking_frames * res2, feature_dim), + ) + single_mask = jnp.concatenate([ + jnp.ones((t, num_objs, res2), dtype=bool), + jnp.zeros( + (t, num_objs, (hard_tracking_frames - 1) * res2), dtype=bool), + ], axis=2) + mask = jnp.where( + predictions['track_ids'][:, :, None] > 0, mask, single_mask) + return tracked_features, mask + + def loss_function( + self, + outputs: Any, + batch: Any, + ): + """Loss functions. + + Args: + outputs: dict of arrays. + batch: dict that has 'inputs' and 'label' (ground truth). + + Returns: + total_loss: Total loss weighted appropriately. + metrics: auxiliary metrics for debugging and visualization. + """ + if self.flatten_video_input: + (_, batch['label']['boxes'], batch['label']['labels'], + batch['label']['text_tokens'], batch['label']['track_ids'], + batch['label']['image_caption_tokens']) = self.flatten_time_to_batch( + batch['inputs'], batch['label']['boxes'], batch['label']['labels'], + batch['label']['text_tokens'], batch['label']['track_ids'], + batch['label']['image_caption_tokens']) + + detection_loss, metrics = super( + DenseVOCDetector, self).loss_function(outputs, batch) + del metrics['total_loss'] + if self.use_loss_masks: + det_loss_mask = (batch['loss_masks']['det_loss_mask'] > 0).any( + ).astype(jnp.float32) + objcap_loss_mask = (batch['loss_masks']['objcap_loss_mask']).any( + ).astype(jnp.float32) + vidcap_loss_mask = (batch['loss_masks']['vidcap_loss_mask'] > 0).any( + ).astype(jnp.float32) + track_loss_mask = (batch['loss_masks']['track_loss_mask'] > 0).any( + ).astype(jnp.float32) + trackcap_loss_mask = (batch['loss_masks']['trackcap_loss_mask'] > 0).any( + ).astype(jnp.float32) + else: + det_loss_mask = (batch['label']['boxes'] > 0).any().astype(jnp.float32) + objcap_loss_mask = ( + (batch['label']['text_tokens'] > 0) + & (batch['label']['text_tokens'] != self.end_token_id) + & (batch['label']['text_tokens'] != self.begin_token_id) + ).any().astype(jnp.float32) + vidcap_loss_mask = ( + (batch['label']['video_caption_tokens'] > 0) + & (batch['label']['video_caption_tokens'] != self.end_token_id) + & (batch['label']['video_caption_tokens'] != self.begin_token_id) + ).any().astype(jnp.float32) + track_loss_mask = (batch['label']['track_ids'] > 0).any().astype( + jnp.float32) + trackcap_loss_mask = track_loss_mask * objcap_loss_mask + for key in DETECTION_LOSS_KEYS: + if key in metrics: + metrics[key] = metrics[key] * det_loss_mask + total_loss = detection_loss * det_loss_mask + + metrics['text_loss'] *= objcap_loss_mask + total_loss += self.text_loss_weight * metrics['text_loss'] + + if self.with_global_video_caption: + metrics['global_text_loss'] *= vidcap_loss_mask + total_loss += self.global_text_loss_weight * metrics['global_text_loss'] + + if self.with_tracking: + metrics['tracking_loss'] *= track_loss_mask + total_loss += self.tracking_loss_weight * (metrics['tracking_loss']) + + if self.caption_with_track: + metrics['tracked_text_loss'] *= trackcap_loss_mask + total_loss += self.text_loss_weight * (metrics['tracked_text_loss']) + + metrics['total_loss'] = total_loss + return total_loss, metrics + + +class DenseVOCModel(grit.GRiTModel): + """Scenic Model Wrapper.""" + + def build_flax_model(self): + fields = set(x.name for x in dataclasses.fields(DenseVOCDetector)) + config_dict = { + k: v for k, v in self.config.model.items() if k in fields} + return DenseVOCDetector(**config_dict) diff --git a/scenic/projects/densevoc/modeling/grit.py b/scenic/projects/densevoc/modeling/grit.py new file mode 100644 index 0000000000000000000000000000000000000000..719709624b1751700b43023ea94d85a014f19f52 --- /dev/null +++ b/scenic/projects/densevoc/modeling/grit.py @@ -0,0 +1,474 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of dense object captioning in the GRiT model. + +Reference: https://arxiv.org/pdf/2212.00280.pdf +""" + +import dataclasses +import math +from typing import Any, Dict, Optional, Tuple + +import flax.linen as nn +import jax +import jax.numpy as jnp +import optax + +from scenic.projects.baselines.centernet.modeling import centernet2 +from scenic.projects.baselines.centernet.modeling import centernet_head +from scenic.projects.baselines.centernet.modeling import iou_assignment +from scenic.projects.baselines.centernet.modeling import roi_head_utils +from scenic.projects.baselines.centernet.modeling import roi_heads +from scenic.projects.baselines.centernet.modeling import vitdet +from scenic.projects.densevoc.modeling import auto_regressive_decode +from scenic.projects.densevoc.modeling import text_decoder + + +Assignment = iou_assignment.Assignment +ArrayDict = Dict[str, jnp.ndarray] +MetricsDict = Dict[str, Tuple[jnp.ndarray, jnp.ndarray]] + + +class GRiTDetector(centernet2.CenterNet2Detector): + """GRiT detector.""" + begin_token_id: int = 101 # tokenizer.cls_token_id == 101 + end_token_id: int = 102 # tokenizer.sep_token_id == 102 + vocab_size: int = 30522 # size of BertTokenizer + max_caption_length: int = 40 + object_feat_res: int = 14 + text_iou_thresh: float = 0.8 + label_smooth: float = 0.1 + text_loss_weight: float = 1.0 + num_text_proposals: int = 128 + mult_caption_score: bool = False + num_decoder_layers: int = 6 + use_roi_box_in_training: bool = False + grounding_method: str = 'sumlogprob' + + def setup(self): + self.backbone = vitdet.SimpleFeaturePyramid( + backbone_args=self.backbone_args, + scale_factors=self.vitdet_scale_factors, + num_top_blocks=self.vitdet_num_top_blocks, + dtype=self.dtype, + name='backbone') + + self.proposal_generator = centernet_head.CenterNetHead( + num_classes=self.num_classes, dtype=self.dtype, + num_levels=len(self.strides), + name='proposal_generator') + + self.roi_heads = roi_heads.CascadeROIHeads( + input_strides={str(int(math.log2(s))): s for s in self.strides}, + num_classes=self.roi_num_classes, + conv_dims=self.roi_conv_dims, + conv_norm=self.roi_conv_norm, + fc_dims=self.roi_fc_dims, + samples_per_image=self.roi_samples_per_image, + positive_fraction=self.roi_positive_fraction, + matching_threshold=self.roi_matching_threshold, + nms_threshold=self.roi_nms_threshold, + class_box_regression=self.roi_class_box_regression, + mult_proposal_score=self.roi_mult_proposal_score, + scale_cascade_gradient=self.roi_scale_cascade_gradient, + use_sigmoid_ce=self.roi_use_sigmoid_ce, + add_box_pred_layers=self.roi_add_box_pred_layers, + return_last_proposal=True, + return_detection_in_training=self.use_roi_box_in_training, + score_threshold=self.roi_score_threshold, + post_nms_num_detections=self.roi_post_nms_num_detections, + ) + self.text_decoder = text_decoder.TransformerDecoderTextualHead( + num_layers=self.num_decoder_layers, + name='roi_heads.text_decoder.textual') + + def decode_text( + self, text_tokens, object_features, + feature_valid_mask=None, return_feat=False): + """Generate logits of a single word. + + Args: + text_tokens: (batch_size, caption_length). + object_features: (batch_size, feature_length, object_feat_size). + feature_valid_mask: bool (batch_size, feature_length); False if padded. + return_feat: bool; if True, return shape will be ( + batch_size, caption_length, hidden_size). + Returns: + output_logits: (batch_size, caption_length, vocab_size). + """ + return self.text_decoder( + text_tokens, object_features, + feature_valid_mask=feature_valid_mask, + return_feat=return_feat, train=False) + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + gt_boxes: Optional[jnp.ndarray] = None, + gt_classes: Optional[jnp.ndarray] = None, + gt_text_tokens: Optional[jnp.ndarray] = None, + train: bool = False, + preprocess: bool = False, + *, + padding_mask: Optional[jnp.ndarray] = None, + debug: bool = False) -> Any: + """Applies GRiT model on the input. + + Args: + inputs: array of the preprocessed input images, in shape B x H x W x 3. + gt_boxes: B x N x 4. Only used in training. + gt_classes: B x N. Only used in training. + gt_text_tokens: B x N x max_caption_length. Only used in training. + train: Whether it is training. + preprocess: If using the build-in preprocessing functions on inputs. + padding_mask: Binary matrix with 0 at padded image regions. + debug: Whether the debug mode is enabled. debug=True enables model + specific logging/storing some values using jax.host_callback. + + Returns: + outputs: a dict with the following keys: + 'detection_boxes' or 'last_proposals': batch_size x max_detections x 4 + 'object_features': batch_size x max_detections x 196 x 256 + 'begin_tokens': batch_size x max_detections x max_caption_length + if train == False: + 'detection_scores': batch_size x max_detections + 'detection_classes': batch_size x max_detections, 0-based int. + if train == True: + 'metrics': dict of losses. + """ + if preprocess: + inputs = self.preprocess(inputs, padding_mask) + backbone_features = self.backbone(inputs, train=train) + outputs = self.proposal_generator( + backbone_features, train=train) + + detections, metrics, rpn_features, gt_classes, _ = self.forward_detection( + inputs, outputs, backbone_features, gt_classes, gt_boxes, + train=train, debug=debug) + strides = sorted(self.roi_heads.input_strides.items(), key=lambda x: x[1]) + features = [rpn_features[s[0]] for s in strides] # Sorted features + outputs, _ = self.forward_object_caption( + detections, metrics, outputs, features, + gt_classes, gt_boxes, gt_text_tokens, train=train) + return outputs + + def forward_object_caption( + self, detections, metrics, outputs, features, + gt_classes, gt_boxes, gt_text_tokens, train=False): + if self.use_roi_box_in_training or not train: + # Apply the text loss to the second stage outputs (vs. to the proposal). + # This needs the second stage to be pretrained. + # Otherwise the training easily goes NaN. + last_proposals = detections['detection_boxes'][ + :, :self.num_text_proposals] # (batch, num_text_proposals, 4) + else: + last_proposals = detections['last_proposals'][ + :, :self.num_text_proposals] # (batch, num_text_proposals, 4) + + object_feat_res = self.object_feat_res + if gt_text_tokens is None: # evaluation + detection_boxes = detections['detection_boxes'] + object_features = self.roi_heads.roi_align( + features, detection_boxes, object_feat_res) + object_features = object_features.reshape( + object_features.shape[0], object_features.shape[1], + object_feat_res ** 2, -1, + ) # (batch_size, post_nms_num_detections, object_feat_res ** 2, C) + text_tokens = jnp.full( + (object_features.shape[0], object_features.shape[1], + self.max_caption_length), + self.end_token_id, dtype=jnp.int32) + text_tokens = text_tokens.at[:, :, 0].set(self.begin_token_id) + text_batch_size = object_features.shape[0] * object_features.shape[1] + text_outputs = self.text_decoder( + text_tokens.reshape(text_batch_size, self.max_caption_length), + object_features.reshape(text_batch_size, object_feat_res ** 2, -1,), + train=train, + ) # (text_batch_size, max_caption_length, vocab_size) + detections['detection_classes'] = ( + detections['detection_classes'] - 1).astype(jnp.int32) + detections['object_features'] = object_features + del text_outputs + detections['begin_tokens'] = text_tokens + outputs = detections + matched_text, matched = None, None + else: # training + # matched_text: (batch_size, num_text_proposals, max_caption_length) + # matched: (batch_size, num_text_proposals): 1: matched; 0: not matched. + matched_text, matched = self.match_texts( + last_proposals, gt_boxes, gt_classes, gt_text_tokens, + self.text_iou_thresh) + object_features = self.roi_heads.roi_align( + features, last_proposals, object_feat_res) + # (batch_size, num_text_proposals, object_feat_res, object_feat_res, C) + # The text losses are only applied to foreground objects. + text_batch_size = object_features.shape[0] * object_features.shape[1] + text_outputs = self.text_decoder( + matched_text.reshape(text_batch_size, self.max_caption_length), + object_features.reshape(text_batch_size, object_feat_res ** 2, -1,), + train=train, + ) # (text_batch_size, max_caption_length, vocab_size) + text_loss, num_valid_tokens = self.text_loss( + text_outputs, + matched_text.reshape(text_batch_size, self.max_caption_length), + matched.reshape(text_batch_size,)) + metrics['text_loss'] = text_loss + metrics['num_valid_tokens'] = num_valid_tokens + outputs['metrics'] = metrics + text_tokens = None + return outputs, (metrics, object_features, last_proposals, + text_tokens, matched_text, matched) + + def forward_detection( + self, inputs, outputs, backbone_features, gt_classes, gt_boxes, + train=False, debug=False): + """Forward second stage detection and get object features.""" + pre_nms_topk = self.pre_nms_topk_train if train else self.pre_nms_topk_test + post_nms_topk = ( + self.post_nms_topk_train if train else self.post_nms_topk_test) + boxes, scores, classes = self.extract_peaks( + outputs, pre_nms_topk=pre_nms_topk) + proposals = self.nms( + boxes, scores, classes, post_nms_topk=post_nms_topk) + proposal_boxes = jnp.stack( + [x[0] for x in proposals], axis=0) # B x num_prop x 4 + proposal_boxes = jnp.maximum(proposal_boxes, 0) + proposal_boxes = jnp.minimum( + proposal_boxes, max(inputs.shape[1], inputs.shape[2])) + proposal_scores = jnp.stack( + [x[1] for x in proposals], axis=0) # B x num_propq + rpn_features = {str(int(math.log2(s))): v for s, v in zip( + self.strides, backbone_features)} + # TODO(zhouxy): modify class format in the dataloader. + # scenic dataloader loads classes in range [0, num_class - 1], and + # dpax RoI heads assume gt_classes in range [1, num_class]. Add 1 to valid + # gt objects (indicated by any box axis > 0). + if gt_classes is not None and gt_boxes is not None: + gt_classes = gt_classes + (gt_boxes.max(axis=2) > 0) + image_shape = jnp.concatenate([ + jnp.ones((inputs.shape[0], 1), jnp.float32) * inputs.shape[1], + jnp.ones((inputs.shape[0], 1), jnp.float32) * inputs.shape[2], + ], axis=1) # B x 2, in order (height, width) + detections, metrics = self.roi_heads( + rpn_features, image_shape, + gt_boxes, gt_classes, + proposal_boxes, proposal_scores, + training=train, postprocess=True, debug=debug) + return detections, metrics, rpn_features, gt_classes, image_shape + + def match_texts( + self, proposals, gt_boxes, gt_classes, gt_text_tokens, thresh): + """Match proposals and their texts based on bounding box IoU. + + Args: + proposals: Boxes with array (B, samples_per_image, 4). + gt_boxes: Boxes with array (B, max_gt_boxes, 4). + gt_classes: (B, max_gt_boxes). This is needed for background padding. + gt_text_tokens: (B, max_gt_boxes, max_caption_length) + thresh: float. + Returns: + matched_text: shape (B, samples_per_image, max_caption_length). + matched: shape (B, samples_per_image): 0 or 1. + """ + def _impl(proposals, gt_boxes, gt_classes): + iou = roi_head_utils.pairwise_iou(gt_boxes, proposals) + matched_idxs, assignments = iou_assignment.label_assignment( + iou, [thresh], [Assignment.NEGATIVE, Assignment.POSITIVE]) + matched_classes = gt_classes[matched_idxs] + matched_classes = jnp.where( + assignments != Assignment.POSITIVE, 0, matched_classes) + return matched_idxs, matched_classes + matched_idxs, matched_classes = jax.vmap(_impl, in_axes=0)( + proposals, gt_boxes, gt_classes) + matched_texts = jnp.take_along_axis( + gt_text_tokens, + matched_idxs[..., None], + axis=1, + mode='promise_in_bounds') + return matched_texts, matched_classes + + def text_loss(self, text_outputs, matched_text, mask): + """Text loss with label smoothing. + + Args: + text_outputs: (text_batch_size, max_caption_length, vocab_size) + matched_text: (text_batch_size, max_caption_length) + mask: (text_batch_size,) + + Returns: + loss: float + num_valid_tokens: float + """ + text_outputs = text_outputs[:, :-1] # Move gt 1 word to the right. + matched_text = matched_text[:, 1:] # No need to predict BOS + # valid: (text_batch_size, max_caption_length - 1) + valid = ((matched_text > 0) & (mask[:, None] > 0)) + # Ignore samples with empty ground truth (from padding). + valid = valid & (matched_text[:, 0] != self.end_token_id)[:, None] + valid = valid.astype(jnp.float32) + # gt: (text_batch_size, max_caption_length - 1, vocab_size) + gt = jax.nn.one_hot(matched_text, self.vocab_size) + # customized label smoothing following GRiT + # https://github.com/JialianW/GRiT/blob/master/grit/modeling/text/ + # text_decoder.py#L668 + gt = gt * (1. - self.label_smooth) + ( + 1. - gt) * self.label_smooth / (self.vocab_size - 1) + # loss: (text_batch_size, max_caption_length - 1) + gt = jax.lax.stop_gradient(gt) + loss = optax.softmax_cross_entropy(text_outputs, gt) + loss = (loss * valid[:, :]).sum() / (valid.sum() + 1e-8) + num_valid_tokens = valid.sum() / (mask.sum() + 1e-8) + return loss, num_valid_tokens + + def loss_function( + self, + outputs: Any, + batch: Any, + ): + """Loss function of GRiT. + + Args: + outputs: dict of 'heatmaps' and `box_regs`. Both are list of arrays from + different FPN levels, in shape L x [B, hl, wl, C']. L is the number + of FPN levels, hl, wl are the shape in FPN level l. + batch: dict that has 'inputs', 'batch_mask' and, 'label' (ground truth). + batch['label'] is a dict with the following keys and shape: + 'boxes': B x max_boxes x 4 + 'labels': B x max_boxes + Returns: + total_loss: Total loss weighted appropriately. + metrics: auxiliary metrics for debugging and visualization. + """ + detection_loss, metrics = super().loss_function(outputs, batch) + total_loss = detection_loss + self.text_loss_weight * metrics['text_loss'] + metrics['total_loss'] = total_loss + return total_loss, metrics + + +class GRiTModel(centernet2.CenterNet2Model): + """Scenic Model Wrapper.""" + + def build_flax_model(self): + fields = set(x.name for x in dataclasses.fields(GRiTDetector)) + config_dict = { + k: v for k, v in self.config.model.items() if k in fields} + return GRiTDetector(**config_dict) + + def autoregressive_predict( + self, params, detections, mask=None, + feature_key='object_features', + begin_token_key='begin_tokens', + output_key='text_tokens'): + """Generate caption from object features in an auto-agressive way. + + Args: + params: pytree of network parameters. + detections: dict with keys: + 'object_features': (batch_size, n, feature_length, object_feat_size) + 'begin_tokens': (batch_size, n, max_caption_length) + mask: (batch_size, n, feature_length) + feature_key: str + begin_token_key: str + output_key: str + Returns: + Updated detections with updated keys: + 'detections': int array (batch_size, n, max_caption_length), + whose values are in range vocab_size + 'detection_scores': (batch_size, n) + """ + batch_size, num_objects = detections[feature_key].shape[:2] + text_batch_size = batch_size * num_objects + object_features = detections[feature_key].reshape( + text_batch_size, detections[feature_key].shape[2], -1) + begin_tokens = detections[begin_token_key].reshape( + text_batch_size, self.flax_model.max_caption_length) + if mask is not None: + mask = mask.reshape( + text_batch_size, object_features.shape[1]) + # pylint: disable=g-long-lambda + # (text_batch_size, max_caption_length) -> + # (text_batch_size, max_caption_length, vocab_size) + tokens_to_logits = lambda x: self.flax_model.apply( + variables={'params': params}, + text_tokens=x, + object_features=object_features, + feature_valid_mask=mask, + method=self.flax_model.decode_text, + ) + text_tokens, log_probs = auto_regressive_decode.auto_regressive_decode( + begin_tokens, tokens_to_logits, + max_steps=self.flax_model.max_caption_length, + eos_index=self.flax_model.end_token_id) + detections[output_key] = text_tokens.reshape( + batch_size, num_objects, self.flax_model.max_caption_length) + if self.flax_model.mult_caption_score: + detections['detection_scores'] = (detections['detection_scores'].reshape( + batch_size, num_objects) * jnp.exp(log_probs)) ** 0.5 + return detections + + def compute_sentence_likelihood(self, params, detections, sentence_tokens): + """Compute likelihood of a given tokenized sentence. + + This implements section 3.5 in the Dense VOC paper + https://arxiv.org/pdf/2306.11729.pdf + + Args: + params: pytree of network parameters. + detections: dict with keys: + 'object_features': (batch_size, n, feature_length, object_feat_size) + sentence_tokens: (batch_size, max_caption_length), the first token should + be BOS. Last valid token should be EOS. Padding tokens should be 0. + Returns: + Updated detections with updated keys: + 'likelihood': (batch_size, n) + """ + object_features = detections['object_features'] + batch_size, num_objects = object_features.shape[:2] + text_batch_size = batch_size * num_objects + cap_len = self.flax_model.max_caption_length + text_tokens = jnp.broadcast_to( + sentence_tokens.reshape(batch_size, 1, cap_len), + (batch_size, num_objects, cap_len)).reshape(text_batch_size, cap_len) + object_features = object_features.reshape( + text_batch_size, object_features.shape[2], object_features.shape[3]) + + text_outputs = self.flax_model.apply( + variables={'params': params}, + text_tokens=text_tokens, + object_features=object_features, + method=self.flax_model.decode_text, + ) # (text_batch_size, max_caption_length, vocab_size) + + text_tokens = text_tokens[:, 1:] # Shift GT sentence 1 word to right. + text_outputs = text_outputs[:, :-1] # Shift predicted sentence to align GT. + mask = text_tokens > 0 # (text_batch_size, cap_len - 1) + prob = jax.nn.softmax(text_outputs) # (text_batch_size, cap_len - 1, vocab) + prob = jnp.take_along_axis( + prob, text_tokens[:, :, None], + axis=2)[..., 0] # (text_batch_size, cap_len - 1) + if self.flax_model.grounding_method == 'sumprob': + likelihood = (prob * mask).sum(axis=1) / (mask.sum(axis=1) + 1e-8) + elif self.flax_model.grounding_method == 'sumlogprob': + likelihood = jnp.exp( + (jnp.log(prob) * mask).sum(axis=1) / (mask.sum(axis=1) + 1e-8)) + else: + raise ValueError( + f'Unknown grounding method: {self.flax_model.grounding_method}') + likelihood = likelihood.reshape( + batch_size, num_objects) + likelihood = jnp.maximum( + likelihood * detections['detection_scores'], 0) ** 0.5 + detections['likelihood'] = likelihood # (batch_size, num_objects) + return detections diff --git a/scenic/projects/densevoc/modeling/text_decoder.py b/scenic/projects/densevoc/modeling/text_decoder.py new file mode 100644 index 0000000000000000000000000000000000000000..60630d0722ac12e3d9d7e80dcb5f3bcf3b79e0c0 --- /dev/null +++ b/scenic/projects/densevoc/modeling/text_decoder.py @@ -0,0 +1,364 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Auto-regressive text decoder in GRiT paper. + +GRiT: A Generative Region-to-text Transformer for Object Understanding +Wu et al. + +arXiv: https://arxiv.org/abs/2212.00280 + +reference torch implementation: +https://github.com/JialianW/GRiT/blob/master/grit/modeling/text/text_decoder.py +https://github.com/JialianW/GRiT/blob/master/grit/modeling/text/modeling_bert.py + +""" + +from flax import linen as nn +import jax +import jax.numpy as jnp + +NEG_INF = -1e18 + + +class BertSelfAttention(nn.Module): + """Bert layer self attention.""" + + num_heads: int = 12 + hidden_size: int = 768 + attention_dropout: float = 0.1 + + @nn.compact + def __call__( + self, input_tensor, attention_mask, train=False): + # input_tensor: (batch_size, tot_len, hidden_size) + # attention_mask: (1, 1, tot_len, tot_len): NEG_INF to mask entry out. + q = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='query')(input_tensor) + k = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='key')(input_tensor) + v = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='value')(input_tensor) + # TODO(zhouxy): implement decoding cache here. + + head_dim = self.hidden_size // self.num_heads + transpose = lambda x: x.reshape( # pylint: disable=g-long-lambda + x.shape[0], x.shape[1], self.num_heads, head_dim).transpose(0, 2, 1, 3) + q = transpose(q) + k = transpose(k) + v = transpose(v) # (batch_size, num_heads, tot_len, head_dim) + attention_scores = (q * (head_dim ** -0.5)) @ k.transpose( + 0, 1, 3, 2) # (batch_size, num_heads, tot_len, tot_len) + attention_scores = attention_scores + attention_mask + attention_scores = jax.nn.softmax(attention_scores, axis=-1) + attention_scores = nn.Dropout(self.attention_dropout)( + attention_scores, deterministic=not train) + out = (attention_scores @ v).transpose(0, 2, 1, 3).reshape( + v.shape[0], v.shape[2], self.hidden_size) + return out + + +class BertSelfOutput(nn.Module): + """Bert layer self output.""" + + hidden_size: int = 768 + hidden_dropout: float = 0.1 + + @nn.compact + def __call__(self, hidden_states, input_tensor, train=False): + hidden_states = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='dense')(hidden_states) + hidden_states = nn.Dropout(self.hidden_dropout)( + hidden_states, deterministic=not train) + hidden_states = hidden_states + input_tensor + hidden_states = nn.LayerNorm( + epsilon=1e-5, name='LayerNorm')(hidden_states) + return hidden_states + + +class BertAttention(nn.Module): + """Bert layer attention.""" + + @nn.compact + def __call__( + self, input_tensor, attention_mask, train=False): + self_outputs = BertSelfAttention(name='self')( + input_tensor, attention_mask, train=train, + ) # (batch_size, tot_len, hidden_size) + attention_output = BertSelfOutput(name='output')( + self_outputs, input_tensor, train=train, + ) # (batch_size, tot_len, hidden_size) + return attention_output + + +class BertIntermediate(nn.Module): + """Bert layer intermediate.""" + + intermediate_size: int = 768 * 4 + + @nn.compact + def __call__( + self, hidden_states, train=False): + hidden_states = nn.Dense( + self.intermediate_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='dense')(hidden_states) + hidden_states = nn.gelu(hidden_states, approximate=False) + return hidden_states + + +class BertOutput(nn.Module): + """Bert layer output.""" + + hidden_size: int = 768 + hidden_dropout: float = 0.1 + + @nn.compact + def __call__( + self, hidden_states, input_tensor, train=False): + hidden_states = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='dense')(hidden_states) + hidden_states = nn.Dropout(self.hidden_dropout)( + hidden_states, deterministic=not train) + hidden_states = hidden_states + input_tensor + hidden_states = nn.LayerNorm( + epsilon=1e-12, name='LayerNorm')( + hidden_states) # eps following official implementation. + return hidden_states + + +class BertLayer(nn.Module): + """GRiT encoder Layer.""" + + @nn.compact + def __call__( + self, hidden_states, attention_mask, train=False): + """Forward layer. + + Args: + hidden_states: (batch_size, tot_len, hidden_size). + attention_mask: (1, 1, tot_len, tot_len). + train: bool. + Returns: + hidden_states: (batch_size, tot_len, hidden_size). + """ + attention_outputs = BertAttention(name='attention')( + hidden_states, attention_mask, train=train, + ) # (batch_size, tot_len, hidden_size) + intermediate_output = BertIntermediate(name='intermediate')( + attention_outputs, train=train, + ) # (batch_size, tot_len, intermediate_size) + layer_output = BertOutput(name='output')( + intermediate_output, attention_outputs, train=train, + ) # (batch_size, tot_len, hidden_size) + return layer_output + + +class BertEncoder(nn.Module): + """GRiT Encoder.""" + num_hidden_layers: int = 6 + + @nn.compact + def __call__( + self, hidden_states, attention_mask, train=False): + """forward encoder. + + Args: + hidden_states: (batch_size, tot_len, hidden_size). + attention_mask: (1, 1, tot_len, tot_len). + train: bool. + Returns: + hidden_states: (batch_size, tot_len, hidden_size). + """ + for i in range(self.num_hidden_layers): + hidden_states = BertLayer(name=f'layer.{i}')( + hidden_states, attention_mask, train=train) + return hidden_states + + +class BertEncoderAsDecoder(nn.Module): + """GRiT Decoder.""" + num_layers: int = 6 + + @nn.compact + def __call__( + self, tgt, memory, + tgt_mask=None, memory_key_padding_mask=None, train=False): + """forward transformer. + + Args: + tgt: (batch_size, cap_len, hidden_size) + memory: (batch_size, feat_len, hidden_size) + tgt_mask: (cap_len, cap_len) + memory_key_padding_mask: (batch_size, feat_len) + train: bool + Returns: + result: (batch_size, cap_len, hidden_size) + """ + cap_len = tgt.shape[1] + feat_len = memory.shape[1] + hidden_states = jnp.concatenate( + [memory, tgt], axis=1 + ) # (batch_size, feat_len + cap_len, hidden_size) + top_left = jnp.zeros((feat_len, feat_len), dtype=jnp.float32) + top_right = jnp.full((feat_len, cap_len), NEG_INF, dtype=jnp.float32) + bottom_left = jnp.zeros((cap_len, feat_len), dtype=jnp.float32) + left = jnp.concatenate([top_left, bottom_left], axis=0) + right = jnp.concatenate([top_right, tgt_mask], axis=0) + + full_attention_mask = jnp.concatenate( + [left, right], + axis=1)[None] # (1, feat_len + cap_len, feat_len + cap_len) + if memory_key_padding_mask is None: + memory_key_padding_mask = jnp.full( + (1, memory.shape[1]), False, dtype=bool, + ) # (1, feat_len) + else: + full_attention_mask = jnp.broadcast_to( + full_attention_mask, + (memory.shape[0], feat_len + cap_len, feat_len + cap_len)) + zero_negative_infinity = jnp.zeros_like( + memory_key_padding_mask, dtype=tgt.dtype) # (1, feat_len) + zero_negative_infinity = jnp.where( + memory_key_padding_mask, NEG_INF, zero_negative_infinity) + origin_left = full_attention_mask[:, :, :feat_len] + update = zero_negative_infinity[:, None, :] # (1, 1, feat_len) + full_attention_mask = jnp.concatenate( + [origin_left + update, full_attention_mask[:, :, feat_len:]], + axis=2) + full_attention_mask = full_attention_mask[ + :, None, :, :] # (1, 1, feat_len + cap_len, feat_len + cap_len) + + result = BertEncoder( + num_hidden_layers=self.num_layers, + name='encoder')( + hidden_states=hidden_states, + attention_mask=full_attention_mask, + train=train, + ) # (batch_size, feat_len + cap_len, hidden_size) + result = result[:, feat_len:] # (batch_size, cap_len, hidden_size) + return result + + +class WordAndPositionalEmbedding(nn.Module): + """GRiT embedding layer.""" + vocab_size: int = 30522 + hidden_size: int = 768 + max_caption_length: int = 1024 + dropout_prob: float = 0.1 + + @nn.compact + def __call__(self, x, train=False): + """forward embedding. + + Args: + x: (batch_size, caption_length). + train: bool. + Returns: + embeddings: (batch_size, max_caption_length, hidden_size). + """ + position_indices = jnp.arange( + self.max_caption_length)[None] # 1 x max_caption_length + word_embeddings = nn.Embed( + self.vocab_size, self.hidden_size, + embedding_init=nn.initializers.normal(stddev=0.02), + name='words')(x) + position_embeddings = nn.Embed( + self.max_caption_length, self.hidden_size, + embedding_init=nn.initializers.normal(stddev=0.02), + name='positions')(position_indices) + embeddings = nn.LayerNorm(epsilon=1e-8, name='layer_norm')( + word_embeddings + position_embeddings[:, :x.shape[1]] + ) # eps checked. + embeddings = nn.Dropout(self.dropout_prob, name='dropout')( + embeddings, deterministic=not train) + return embeddings + + +class TransformerDecoderTextualHead(nn.Module): + """TransformerDecoderTextualHead of GRiT.""" + vocab_size: int = 30522 + hidden_size: int = 768 + max_caption_length: int = 1024 + num_layers: int = 6 + + @nn.compact + def __call__( + self, text_tokens, object_features, feature_valid_mask=None, + train=False, return_feat=False): + """Generate logits of a single word. + + Args: + text_tokens: (batch_size, caption_length). + object_features: (batch_size, feature_length, object_feat_size). + feature_valid_mask: bool (batch_size, feature_length); False if padded. + train: bool. + return_feat: bool. If true, return the feature before vocabulary. + Returns: + output_logits: (batch_size, caption_length, vocab_size). + trans_out: (batch_size, caption_length, hidden_size) + """ + x = nn.Dense( + self.hidden_size, name='object_feature_projection.0', + kernel_init=nn.initializers.normal(stddev=0.02))( + object_features) # (batch_size, feature_length, hidden_size) + x = nn.LayerNorm(epsilon=1e-5, name='object_feature_projection.1')(x) + + text_embeddings = WordAndPositionalEmbedding( + vocab_size=self.vocab_size, + hidden_size=self.hidden_size, + max_caption_length=self.max_caption_length, + name='embedding')( + text_tokens, train=train, + ) # (batch_size, max_caption_length, hidden_size) + + caption_length = text_tokens.shape[1] + uni_mask_zero_neg = self._generate_future_mask( + caption_length) # (caption_length, caption_length) + trans_out = BertEncoderAsDecoder( + num_layers=self.num_layers, + name='transformer')( + text_embeddings, x, + tgt_mask=uni_mask_zero_neg, + memory_key_padding_mask=( + ~feature_valid_mask # pylint: disable=invalid-unary-operand-type + ) if feature_valid_mask is not None else None, + train=train, + ) # (batch_size, caption_length, hidden_size) + if return_feat: + return trans_out + + output_logits = nn.Dense( + self.vocab_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='output')( + trans_out) # (batch_size, caption_length, vocab_size) + # TODO(zhouxy): tie weight output and embedding.words + return output_logits + + def _generate_future_mask(self, size): + """Generate attention mask.""" + mask = jnp.triu(jnp.ones((size, size), jnp.float32), k=1) + mask = jnp.where(mask > 0, NEG_INF, 0) + return mask diff --git a/scenic/projects/densevoc/modeling/tracking_layers.py b/scenic/projects/densevoc/modeling/tracking_layers.py new file mode 100644 index 0000000000000000000000000000000000000000..987710a99d7788ae4b65bfb41c7d3a22a48e7c90 --- /dev/null +++ b/scenic/projects/densevoc/modeling/tracking_layers.py @@ -0,0 +1,466 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""GTR Transformer. + + +Implementation of transformer from Global Tracking Transformers (GTR). +Mostly the same as DETRTransformer, except that: +* no layer normalization. +* no position encoding. +* typically a single layer for encoder and decoder. + +Pytorch reference: +https://github.com/xingyizhou/GTR/blob/master/gtr/modeling/roi_heads/ +transformer.py +Reference: https://arxiv.org/pdf/2203.13250.pdf +""" + +import functools +from typing import Any, Callable, Optional + +import einops +import flax.linen as nn +import jax +from jax.nn import initializers +import jax.numpy as jnp +from scenic.model_lib.layers import attention_layers +from scenic.projects.baselines.detr import model as detr_model + +Array = jnp.ndarray +PyTree = Any + +# Match PyTorch LayerNorm. +LayerNorm = functools.partial(nn.LayerNorm, epsilon=1e-5) + + +class GTRAssoHead(nn.Module): + """Association head for Global Tracking Transformer.""" + + dim: int = 512 + num_layers: int = 2 + + @nn.compact + def __call__(self, x: PyTree) -> PyTree: + x = einops.rearrange(x, '... h w c -> ... (h w c)') + for i in range(self.num_layers): + x = nn.Dense( + features=self.dim, + kernel_init=initializers.variance_scaling( + 1, mode='fan_in', distribution='uniform' + ), + bias_init=initializers.zeros, + name=f'fc{i+1}', + )(x) + x = jax.nn.relu(x) + return x + + +class GTREncoderLayer(nn.Module): + """GTR Encoder Layer. + + Assumes post-normalization and defaults to disabling layer norm. + + Attributes: + num_heads: Number of heads. + num_features: Feature dimension. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout rate for attention weights. + dtype: Data type of the computation (default: float32). + """ + + num_heads: int + num_features: int + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + norm: bool = False + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__( + self, + inputs: jnp.ndarray, + *, + pos_embedding: Optional[jnp.ndarray] = None, + padding_mask: Optional[jnp.ndarray] = None, + train: bool = False, + ) -> jnp.ndarray: + """Applies GTREncoderLayer module. + + Args: + inputs: Input data of shape (batch_size, len, features). + pos_embedding: Positional Embedding to be added to the queries and keys in + the self-attention operation. + padding_mask: Binary mask containing 0 for padding tokens. + train: Train or not (to apply dropout). + + Returns: + Output: (batch_size, len, features). + """ + self_attn = detr_model.MultiHeadDotProductAttention( + name='self_attn', + num_heads=self.num_heads, + qkv_features=self.num_features, + dropout_rate=self.attention_dropout_rate, + broadcast_dropout=False, + kernel_init=initializers.xavier_uniform(), + bias_init=initializers.zeros, + use_bias=True, + dtype=self.dtype, + ) + + mlp = attention_layers.MlpBlock( # pytype: disable=wrong-arg-types # jnp-type + name='mlp', + mlp_dim=self.num_features, + activation_fn=nn.relu, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + ) + + assert inputs.ndim == 3 + x = self_attn( + inputs_q=inputs, + pos_emb_q=pos_embedding, + pos_emb_k=pos_embedding, + pos_emb_v=None, + key_padding_mask=padding_mask, + train=train, + ) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + x = x + inputs + if self.norm: + x = LayerNorm(dtype=self.dtype)(x) + y = mlp(x, deterministic=not train) + y = x + y + out = y + if self.norm: + out = LayerNorm(dtype=self.dtype)(out) + + return out + + +class GTRDecoderLayer(nn.Module): + """GTRTransformer decoder layer. + + Attributes: + num_heads: Number of heads. + num_features: Dimension of the query/key/value. + dropout_rate:Dropout rate. + attention_dropout_rate:Dropout rate for attention weights. + dtype: Data type of the computation (default: float32). + """ + + num_heads: int + num_features: int + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + use_self_attn: bool = False + norm: bool = False + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__( + self, + obj_queries: jnp.ndarray, + encoder_output: jnp.ndarray, + *, + pos_embedding: Optional[jnp.ndarray] = None, + query_pos_emb: Optional[jnp.ndarray] = None, + key_padding_mask: Optional[jnp.ndarray] = None, + train: bool = False, + ): + """Applies DecoderBlock module. + + Args: + obj_queries: Input data for decoder. + encoder_output: Output of encoder, which are encoded inputs. + pos_embedding: Positional Embedding to be added to the keys in + cross-attention. + query_pos_emb: Positional Embedding to be added to the queries. + key_padding_mask: Binary mask containing 0 for pad tokens in key. + train: Train or not (to apply dropout) + + Returns: + Output after transformer decoder block. + """ + + # Seems in DETR the self-attention in the first layer basically does + # nothing, as the value vector is a zero vector and we add no learnable + # positional embedding to it! + self_attn = detr_model.MultiHeadDotProductAttention( + num_heads=self.num_heads, + qkv_features=self.num_features, + broadcast_dropout=False, + dropout_rate=self.attention_dropout_rate, + kernel_init=initializers.xavier_uniform(), + bias_init=initializers.zeros, + use_bias=True, + dtype=self.dtype, + ) + + cross_attn = detr_model.MultiHeadDotProductAttention( + name='cross_attn', + num_heads=self.num_heads, + qkv_features=self.num_features, + broadcast_dropout=False, + dropout_rate=self.attention_dropout_rate, + kernel_init=initializers.xavier_uniform(), + bias_init=initializers.zeros, + use_bias=True, + dtype=self.dtype, + ) + + mlp = attention_layers.MlpBlock( # pytype: disable=wrong-arg-types # jnp-type + name='mlp', + mlp_dim=self.num_features, + activation_fn=nn.relu, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + ) + + assert obj_queries.ndim == 3 + + # Optional self attention block. + if self.use_self_attn: + x = self_attn( + inputs_q=obj_queries, + pos_emb_q=query_pos_emb, + pos_emb_k=query_pos_emb, + pos_emb_v=None, + train=train, + ) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + x = x + obj_queries + if self.norm: + x = LayerNorm(dtype=self.dtype)(x) + else: + x = obj_queries + + # cross attention block + y = cross_attn( + inputs_q=x, + inputs_kv=encoder_output, + pos_emb_q=query_pos_emb, + pos_emb_k=pos_embedding, + pos_emb_v=None, + key_padding_mask=key_padding_mask, + train=train, + ) + + y = nn.Dropout(rate=self.dropout_rate)(y, deterministic=not train) + y = y + x + if self.norm: + y = LayerNorm(dtype=self.dtype)(y) + + # mlp block + z = mlp(y, deterministic=not train) + z = y + z + if self.norm: + z = LayerNorm(dtype=self.dtype)(z) + + return z + + +class GTREncoder(nn.Module): + """GTRTransformer Encoder. + + Attributes: + num_heads: Number of heads. + num_layers: Number of layers. + num_features: Dimension of the query/key/value. + norm: normalization layer to be applied on the output. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout rate for attention weights. + dtype: Data type of the computation (default: float32). + """ + + num_heads: int + num_layers: int + num_features: int + norm: Callable[..., Any] = lambda x: x + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__( + self, + inputs: jnp.ndarray, + *, + pos_embedding: Optional[jnp.ndarray] = None, + padding_mask: Optional[jnp.ndarray] = None, + train: bool = False, + ) -> jnp.ndarray: + """Applies Encoder on the inputs. + + Args: + inputs: (batch_size, num_objs, D) + pos_embedding: Positional Embedding to be added to the queries and keys in + the self-attention operation. + padding_mask: Binary mask containing 0 for padding tokens, and 1 + otherwise. + train: Whether it is training. + + Returns: + Output of the transformer encoder. + """ + assert inputs.ndim == 3 + x = inputs + + # Input encoder + for lyr in range(self.num_layers): + x = GTREncoderLayer( + num_heads=self.num_heads, + num_features=self.num_features, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name=f'encoderblock_{lyr}', + dtype=self.dtype, + )(x, pos_embedding=pos_embedding, padding_mask=padding_mask, train=train) + + x = self.norm(x) + return x + + +class GTRDecoder(nn.Module): + """GTR Transformer Decoder. + + Attributes: + num_heads: Number of heads. + num_layers: Number of layers. + num_features: Dimension of the query/key/value. + return_intermediate: If return the outputs from intermediate layers. + padding_mask: Binary mask containing 0 for padding tokens. + dropout_rate:Dropout rate. + attention_dropout_rate:Dropout rate for attention weights. + dtype: Data type of the computation (default: float32). + """ + + num_heads: int + num_layers: int + num_features: int + norm: Callable[..., Any] = lambda x: x + return_intermediate: bool = False + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__( + self, + obj_queries: jnp.ndarray, + encoder_output: jnp.ndarray, + *, + key_padding_mask: Optional[jnp.ndarray] = None, + pos_embedding: Optional[jnp.ndarray] = None, + query_pos_emb: Optional[jnp.ndarray] = None, + train: bool = False, + ) -> jnp.ndarray: + """Applies Decoder on the inputs. + + Args: + obj_queries: Input data for decoder. + encoder_output: Output of encoder, which are encoded inputs. + key_padding_mask: Binary mask containing 0 for padding tokens in the keys. + pos_embedding: Positional Embedding to be added to the keys. + query_pos_emb: Positional Embedding to be added to the queries. + train: Whether it is training. + + Returns: + Output of a transformer decoder. + """ + assert encoder_output.ndim == 3 # `[batch, len, features]` + assert obj_queries.ndim == 3 # `[batch, num queries, embedding size]` + y = obj_queries + outputs = [] + for lyr in range(self.num_layers): + y = GTRDecoderLayer( + num_features=self.num_features, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + dtype=self.dtype, + name=f'decoderblock_{lyr}', + )( + y, + encoder_output, + pos_embedding=pos_embedding, + query_pos_emb=query_pos_emb, + key_padding_mask=key_padding_mask, + train=train, + ) + if self.return_intermediate: + outputs.append(y) + + if self.return_intermediate: + y = jnp.stack(outputs, axis=0) + return self.norm(y) + + +class GTRTransformer(nn.Module): + """GTR Transformer. + + Attributes: + num_heads: Number of heads. + num_encoder_layers: Number of encoder layers. + num_decoder_layers: Number of decoder layers. + num_features: Dimension of the query/key/value. + dropout_rate: Dropout rate. + attention_dropout_rate:Dropout rate for attention weights. + dtype: Data type of the computation (default: float32). + """ + + num_heads: int = 8 + num_encoder_layers: int = 1 + num_decoder_layers: int = 1 + num_features: int = 512 + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, inputs: Array, train: bool = False) -> Array: + """Applies GTRTransformer on the inputs. + + Args: + inputs: batch_size x num_tot_objects x D. make sure batch_size = 1. + train: Whether it is training. + + Returns: + Output: association matrix: batch_size x num_tot_objects x num_tot_objects + """ + queries = inputs + + encoded = GTREncoder( + num_heads=self.num_heads, + num_layers=self.num_encoder_layers, + num_features=self.num_features, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + dtype=self.dtype, + name='encoder', + )(inputs, train=train) # (batch_size, num_tot_objects, D) + + output = GTRDecoder( + num_heads=self.num_heads, + num_layers=self.num_decoder_layers, + num_features=self.num_features, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + dtype=self.dtype, + name='decoder', + )(queries, encoded, train=train) # (batch_size, num_tot_objects, D) + # pred_asso: (batch_size, num_tot_objects, num_tot_objects) + pred_asso = jnp.einsum('bnc,bmc->bnm', output, encoded) + return pred_asso diff --git a/scenic/projects/densevoc/modeling/tracking_utils.py b/scenic/projects/densevoc/modeling/tracking_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..02bf7614cd9663cb05f629a739a387c73713afbb --- /dev/null +++ b/scenic/projects/densevoc/modeling/tracking_utils.py @@ -0,0 +1,170 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tracking utils.""" + +import jax +import jax.numpy as jnp + + +def greedy_extract_trajectories( + asso_scores, num_frames, thresh=0.3): + """Greedily convert an association matrics to discrete tracking IDs. + + Decribed in Algorithm 1 of https://arxiv.org/pdf/2306.11729.pdf. + + Args: + asso_scores: (num_tot_objs, num_tot_objs) + num_frames: int + thresh: float + Returns: + ids: (num_tot_objs,) + """ + num_tot_objs = asso_scores.shape[0] + assert num_frames > 0 and num_tot_objs % num_frames == 0 + num_objs = num_tot_objs // num_frames + # Don't merge objects in the same frame. + mask = (jnp.arange(num_tot_objs)[:, None] // num_objs != ( + jnp.arange(num_tot_objs)[None] // num_objs)) + mask = mask | jnp.eye(num_tot_objs, dtype=bool) + asso_scores = asso_scores * mask + ids = jnp.zeros(num_tot_objs, dtype=jnp.int32) + def body_fn(state): + asso_scores, ids = state + can_merge = asso_scores >= thresh # (num_tot_objs, num_tot_objs) + num_merges = can_merge.sum(axis=1) # num_tot_objs + ind = num_merges.argmax() # int + id_count = ids.max() + 1 # int + merge_inds = can_merge[ind] # num_tot_objs + # Don't merge with two objects in the same frame. + max_ind_in_frame = asso_scores[ind].reshape( + num_frames, num_objs).argmax(axis=1) # num_frames + is_max_score = jax.nn.one_hot(max_ind_in_frame, num_objs).astype(bool) + merge_inds = merge_inds & is_max_score.reshape(num_tot_objs) + ids = ids + merge_inds * id_count # num_tot_objs + asso_scores = asso_scores * (1. - merge_inds[None]) * ( + 1. - merge_inds[:, None]) + return (asso_scores, ids) + _, ids = jax.lax.while_loop( + lambda s: s[0].max() >= thresh, + body_fn, + (asso_scores, ids)) + ids = jax.lax.stop_gradient(ids) + return ids + + +def get_track_features( + object_features, track_ids, max_num_tracks, hard_tracking_frames): + """Features for each track. + + Args: + object_features: (batch_size, num_objs, res, res, D). Note we assume all + images in the batch are from the same video. + track_ids: (num_tot_objs,). num_tot_objs = batch_size * num_objs. + max_num_tracks: int + hard_tracking_frames: int + Returns: + track_feats: (max_num_tracks, num_frames * res * res, D) + track_feature_mask: (max_num_tracks, num_frames * res * res) + track_matrix: (max_num_tracks, num_tot_objs) + """ + batch_size, num_objs, res = object_features.shape[:3] + num_tot_objs = batch_size * num_objs + num_input_frames = batch_size + + padded_object_features = object_features.reshape( + num_tot_objs, res ** 2, -1) + padded_object_features = jnp.concatenate( + [padded_object_features, + jnp.zeros((num_tot_objs, res ** 2, object_features.shape[-1]))], + axis=0) # (num_tot_objs + 1, res * res, D) + track_matrix = (jnp.arange(max_num_tracks) + 1)[ + :, None] == track_ids[None, :] # (max_num_tracks, num_tot_objs) + track_feats = [] + for i in range(max_num_tracks): + track_ind = jnp.nonzero( + track_matrix[i], size=num_input_frames, fill_value=-1, + )[0] # (num_input_frames,) + + num_valid_frames = (track_ind >= 0).sum() + track_ind = jnp.where( + num_valid_frames > hard_tracking_frames, + track_ind[jnp.linspace( + 0, num_valid_frames, hard_tracking_frames, + endpoint=False, dtype=jnp.int32)], + track_ind[:hard_tracking_frames], + ) # (hard_tracking_frames,) + + track_feat = jnp.take_along_axis( + padded_object_features, track_ind[:, None, None], axis=0, + ) # (num_frames, res * res, D) + track_feats.append(track_feat) + track_feats = jnp.stack( + track_feats, axis=0) # (max_num_tracks, num_frames, res ** 2, D) + track_feats = track_feats.reshape( + max_num_tracks, hard_tracking_frames * res ** 2, -1, + ) # (max_num_tracks, hard_tracking_frames * res * res, D) + track_feature_mask = jax.lax.stop_gradient( + (track_feats ** 2).max(axis=-1) > 0 + ) # (max_num_tracks, tracking_frames * res * res) + return track_feats, track_feature_mask, track_matrix + + +def get_track_texts(matched_text, track_matrix, hard_tracking_frames): + """Texts for each track. + + Args: + matched_text: (batch_size, num_objs, max_cap_len) + track_matrix: (max_num_tracks, num_tot_objs) + hard_tracking_frames: int + Returns: + track_texts: (max_num_tracks, max_cap_len) + """ + + batch_size, num_objs = matched_text.shape[:2] + max_num_tracks, num_tot_objs = track_matrix.shape + assert num_tot_objs == batch_size * num_objs + + padded_matched_text = jnp.concatenate( + [matched_text.reshape(num_tot_objs, -1), + jnp.zeros((num_tot_objs, matched_text.shape[-1]), jnp.int32)], + axis=0) # (num_tot_objs + 1, max_cap_len) + track_texts = [] + for i in range(max_num_tracks): + track_ind = jnp.nonzero( + track_matrix[i], size=batch_size, fill_value=-1, + )[0] # (num_frames,) + num_valid_frames = (track_ind >= 0).sum() + track_ind = jnp.where( + num_valid_frames > hard_tracking_frames, + track_ind[jnp.linspace( + 0, num_valid_frames, hard_tracking_frames, + endpoint=False, dtype=jnp.int32)], + track_ind[:hard_tracking_frames], + ) # (hard_tracking_frames,) + + track_text = jnp.take_along_axis( + padded_matched_text, track_ind[:, None], axis=0, + ) # (num_frames, max_cap_len) + # track_text_count: how many objects in the track have the same text. + track_text_count = (( + (track_text[None, :] - track_text[:, None]) ** 2).sum( + axis=-1) == 0).sum(axis=1) # (num_frames,) + track_text_count = track_text_count * ( + track_ind >= 0) # remove padding + track_text = track_text[track_text_count.argmax()] + track_texts.append(track_text) + track_texts = jnp.stack( + track_texts, axis=0) # (max_num_tracks, max_cap_len) + return track_texts diff --git a/scenic/projects/densevoc/requirements.txt b/scenic/projects/densevoc/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..a96669816839aaed09050d5e7a6dc621319bbc75 --- /dev/null +++ b/scenic/projects/densevoc/requirements.txt @@ -0,0 +1,2 @@ +pycocotools +pycocoevalcap diff --git a/scenic/projects/densevoc/tools/build_smit_tfrecord.py b/scenic/projects/densevoc/tools/build_smit_tfrecord.py new file mode 100644 index 0000000000000000000000000000000000000000..858b4ea340272403ef6b3a593402e20c07b47fe5 --- /dev/null +++ b/scenic/projects/densevoc/tools/build_smit_tfrecord.py @@ -0,0 +1,153 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Creates TFRecord Spoken moments-in-time dataset. + +Download the Spoken moments-in-time videos and annotations from the website: +http://moments.csail.mit.edu/#download + +Run the following commands with the path to the downloaded split file, caption +files, and the video paths: + +``` +mkdir ~/Datasets/S-MiT/tfrecords/ + +python build_smit_tfrecord.py -- \ +--video_dir ~/Datasets/S-MiT/videos \ +--transcription_dir ~/Datasets/S-MiT/transcriptions \ +--split_file ~/Datasets/S-MiT/train_set.txt \ +--output_path ~/Datasets/S-MiT/tfrecords/smit_train.tfrecord@1024 +``` + + +NOTE(zhouxy): this script is for external reproducibility only, and is NOT the +exact script we run during the training. Our original script uses internal +tools which run faster but can't be released. Users may integrate +this script with multi-threaded tools for speedup. + +""" +import io +import os + +from absl import app +from absl import flags + +import cv2 +import numpy as np +from PIL import Image +import tensorflow as tf + +from tensorflow.io import gfile + +flags.DEFINE_string('split_file', '', 'Path to split file.') +flags.DEFINE_string('video_dir', '', 'Path to videos.') +flags.DEFINE_string('transcription_dir', '', 'Path to transcriptions.') +flags.DEFINE_string('output_path', '', '') +flags.DEFINE_integer('max_frames', -1, '') + +FLAGS = flags.FLAGS + + +def numpy_to_encoded(image_np): + image_pil = Image.fromarray(image_np) + buffer = io.BytesIO() + image_pil.save(buffer, format='jpeg') + buffer.seek(0) + image_bytes = buffer.getvalue() + return tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_bytes])) + + +def read_video(path, max_frames=-1): + """Read a video numpy array from a path.""" + cap = cv2.VideoCapture(path) + num_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) + if max_frames > 0 and num_frames > max_frames: + inds = set(np.linspace(0, num_frames - 1, max_frames).astype( + np.int32).tolist()) + else: + inds = set(np.arange(num_frames).tolist()) + frames = [] + frame_idx = 0 + while True: + ret, frame = cap.read() + if not ret: + break + if frame_idx in inds: + frames.append(frame[..., ::-1]) # OpenCV loads video in BGR order + frame_idx += 1 + frames = np.asarray(frames) + return frames + + +def construct_example(video_path, caption): + """Creates a single tf.SequenceExample proto.""" + example = tf.train.SequenceExample() + feature = example.context.feature + feature['clip/data_path'].bytes_list.value.append( + bytes(video_path, 'utf-8')) + feature['video_id'].bytes_list.value.append( + bytes(video_path, 'utf-8')) + feature['caption/string'].bytes_list.value.append( + bytes(caption, 'utf-8')) + video = read_video(video_path, FLAGS.max_frames) + image_encodeds = [] + for frame in video: + image_encoded = numpy_to_encoded(frame) + image_encodeds.append(image_encoded) + example.feature_lists.feature_list['image/encoded'].feature.extend( + image_encodeds) + return example + + +def main(unused_argv): + """Creates a tf.SequenceExample TFRecord.""" + print('reading split file.') + split_file = gfile.GFile(FLAGS.split_file, 'r') + videos = [] + for line in split_file: + videos.append(line.strip()) + num_examples = len(videos) + print('num_videos', num_examples) + + output_path = FLAGS.output_path + assert '@' in output_path + output_path_base, num_shards = output_path.split('@') + num_shards = int(num_shards) + shard_id = 0 + output_path_pattern = output_path_base + '-{:05d}-of-{:05d}' + output_path = output_path_pattern.format(shard_id, num_shards) + num_examples_per_shard = (num_examples - 1) // num_shards + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + + count = 0 + for video_name in videos: + count += 1 + video_path = os.path.join(FLAGS.video_dir, f'{video_name}.mp4') + caption_path = os.path.join(FLAGS.transcription_dir, f'{video_name}.txt') + caption = gfile.GFile(caption_path, 'r').readline().strip() + example = construct_example(video_path, caption) + writer.write(example.SerializeToString()) + if count % num_examples_per_shard == 0 and shard_id < num_shards - 1: + writer.close() + shard_id += 1 + output_path = output_path_pattern.format(shard_id, num_shards) + print('Num processed examples', count) + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + writer.close() + print('Num processed examples', count) + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/densevoc/tools/build_vg_tfrecord.py b/scenic/projects/densevoc/tools/build_vg_tfrecord.py new file mode 100644 index 0000000000000000000000000000000000000000..56dcf875535aecab5b0c41595e6223b8bc398a58 --- /dev/null +++ b/scenic/projects/densevoc/tools/build_vg_tfrecord.py @@ -0,0 +1,148 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Build Visual Genome tfrecord from GRiT preprocessed json and raw images. + +Downloaded GRiT preprocessed annotations `train.json` and `test.json` from: +https://github.com/JialianW/GRiT/blob/master/datasets/DATASETS.md#vg-dataset + +Download Visual Genome 1.0 images from +https://homes.cs.washington.edu/~ranjay/visualgenome/api.html and put them in +the same folder `VG_100K` + +Run with the corresponding path to the image folder and json file on both splits + +``` +mkdir ~/Datasets/VisualGenome/tfrecords/ + +python build_vg_tfrecord.py -- \ +--input_json ~/Datasets/VisualGenome/annotations/test.json \ +--image_path ~/Datasets/VisualGenome/VG_100K/ \ +--output_path ~/Datasets/VisualGenome/tfrecords/test.tfrecord + +python build_vg_tfrecord -- \ +--input_json ~/Datasets/VisualGenome/annotations/train.json \ +--image_path ~/Datasets/VisualGenome/VG_100K/ \ +--output_path ~/Datasets/VisualGenome/tfrecords/train.tfrecord \ +--num_shards 128 +``` + + +""" + +import json + +from absl import app +from absl import flags +from absl import logging +import numpy as np +import tensorflow as tf +from tensorflow.io import gfile + + +FLAGS = flags.FLAGS + +flags.DEFINE_string('input_json', '', 'path to the json annotations.') +flags.DEFINE_string( + 'image_path', '', 'path to images, should have 108249 images.') +flags.DEFINE_string('output_path', '', 'Output path.') +flags.DEFINE_integer('num_samples', -1, '') +flags.DEFINE_integer('num_shards', -1, '') + + +def str_to_bytes(string): + return string.encode('utf-8') + + +def _bytes_feature(value): + return tf.train.Feature(bytes_list=tf.train.BytesList(value=value)) + + +def _float_feature(value): + return tf.train.Feature(float_list=tf.train.FloatList(value=value)) + + +def _int64_feature(value): + return tf.train.Feature(int64_list=tf.train.Int64List(value=value)) + + +def process_record(image_info, anns, image_path): + """Creates a sequence example from a list of dict.""" + file_name = image_info['file_name'] + img_path = image_path + file_name + img_string = gfile.GFile(img_path, 'rb').read() + width, height = image_info['width'], image_info['height'] + bbox = np.asarray( + [x['bbox'] for x in anns], dtype=np.float32).reshape(-1, 4) + bbox[:, 2:] = bbox[:, 2:] + bbox[:, :2] # [x0, y0, w, h] -> [x0, y0, x1, y1] + bbox[:, [0, 2]] /= width + bbox[:, [1, 3]] /= height + # tfds builder use format [y0, x0, y1, x1] + bbox[:, [0, 1]], bbox[:, [2, 3]] = bbox[:, [1, 0]], bbox[:, [3, 2]] + + feature = { + 'image': _bytes_feature([img_string]), + 'img_id': _int64_feature([image_info['id']]), + 'regions/bbox': _float_feature(bbox.flatten()), + 'regions/id': _int64_feature(np.asarray( + [x['id'] for x in anns], dtype=np.int64)), + 'regions/phrase': _bytes_feature( + [str_to_bytes(x['caption']) for x in anns]), + } + example = tf.train.Example(features=tf.train.Features(feature=feature)) + example = example.SerializeToString() + return example + + +def main(unused_argv): + logging.info('Loading %s', FLAGS.input_json) + data = json.load(gfile.GFile(FLAGS.input_json, 'r')) + images = data['images'] + annotations = {x['id']: [] for x in images} + for x in data['annotations']: + annotations[x['image_id']].append(x) + + if FLAGS.num_samples > 0: + images = images[:FLAGS.num_samples] + + output_path = FLAGS.output_path + num_examples_per_shard = 0 + shard_id = 0 + output_path_pattern = output_path + if FLAGS.num_shards > 0: + output_path_pattern = output_path + '-{:05d}-of-{:05d}' + output_path = output_path_pattern.format(shard_id, FLAGS.num_shards) + num_examples_per_shard = (len(images) - 1) // FLAGS.num_shards + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + num_exampels = 0 + for i, image_info in enumerate(images): + if i % 1000 == 0: + print(i) + anns = annotations[image_info['id']] + record = process_record(image_info, anns, FLAGS.image_path) + writer.write(record) + num_exampels += 1 + if FLAGS.num_shards > 0 and ( + num_exampels % num_examples_per_shard == 0) and ( + shard_id < FLAGS.num_shards - 1): + writer.close() + shard_id += 1 + output_path = output_path_pattern.format(shard_id, FLAGS.num_shards) + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + writer.close() + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/densevoc/tools/build_vidor_tfrecord.py b/scenic/projects/densevoc/tools/build_vidor_tfrecord.py new file mode 100644 index 0000000000000000000000000000000000000000..9a0c3b5474a280c2be9f954c694c1d7c9e7b99de --- /dev/null +++ b/scenic/projects/densevoc/tools/build_vidor_tfrecord.py @@ -0,0 +1,161 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Creates TFRecord VidOR dataset. Required for the VidSTG dataset. + +Download the VidOR videos and annotations from the website: +https://xdshang.github.io/docs/vidor.html + +Run the following commands with the path to the downloaded annotation json +files and the video paths: + +``` +mkdir ~/Datasets/VidOR/tfrecords/ + +python build_vidor_tfrecord.py -- \ +--ann_path ~/Datasets/VidOR/annotations/validation.json \ +--video_dir ~/Datasets/VidOR/videos/validation/ \ +--output_path ~/Datasets/VidOR/tfrecords/vidor.validation.tfrecord@32 + +python build_vidor_tfrecord.py -- \ +--ann_path ~/Datasets/VidOR/annotations/training.json \ +--video_dir ~/Datasets/VidOR/videos/training/ \ +--output_path ~/Datasets/VidOR/tfrecords/vidor.training.tfrecord@256 +``` + +NOTE(zhouxy): this script is for external reproducibility only, and is NOT the +exact script we run for the paper. Our original script uses internal +tools which run faster but can't be released. Users may integrate +this script with multi-threaded tools for speedup. + +""" +import io +import json +import os + +from absl import app +from absl import flags + +import cv2 +import numpy as np +from PIL import Image +import tensorflow as tf + +# from tensorflow.core.example import example_pb2 +from tensorflow.io import gfile + +flags.DEFINE_string('ann_path', '', 'Path to input json directory.') +flags.DEFINE_string('video_dir', '', 'Path to videos.') +flags.DEFINE_string('output_path', '', '') + +FLAGS = flags.FLAGS + + +def numpy_to_encoded(image_np): + image_pil = Image.fromarray(image_np) + buffer = io.BytesIO() + image_pil.save(buffer, format='jpeg') + buffer.seek(0) + image_bytes = buffer.getvalue() + return tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_bytes])) + + +def read_video(path, max_frames=-1): + """Read a video numpy array from a path.""" + cap = cv2.VideoCapture(path) + num_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) + print(path, num_frames) + if max_frames > 0 and num_frames > max_frames: + inds = set(np.linspace(0, num_frames - 1, max_frames).astype( + np.int32).tolist()) + else: + inds = set(np.arange(num_frames).tolist()) + frames = [] + frame_idx = 0 + while True: + ret, frame = cap.read() + if not ret: + break + if frame_idx in inds: + frames.append(frame[..., ::-1]) # OpenCV loads video in BGR order + frame_idx += 1 + frames = np.asarray(frames) + return frames + + +def construct_example(feat): + """Creates a single tf.SequenceExample proto.""" + example = tf.train.SequenceExample() + feature = example.context.feature + feature['data_path'].bytes_list.value.append( + bytes(feat['video_path'], 'utf-8')) + feature['video_id'].bytes_list.value.append( + bytes(feat['video_id'], 'utf-8')) + feature['dataset_name'].bytes_list.value.append( + bytes(feat['dataset_name'], 'utf-8')) + feature['fps'].float_list.value.append(feat['fps']) + feature['frame_count'].int64_list.value.append(feat['frame_count']) + feature['width'].int64_list.value.append(feat['width']) + feature['height'].int64_list.value.append(feat['height']) + video = read_video(feat['video_path']) + image_encodeds = [] + for frame in video: + image_encoded = numpy_to_encoded(frame) + image_encodeds.append(image_encoded) + example.feature_lists.feature_list['image/encoded'].feature.extend( + image_encodeds) + return example + + +def create_dataset(ann_path, video_dir, output_path): + """Creates a tf.SequenceExample TFRecord.""" + print('reading inputs.') + anns = json.load(gfile.GFile(ann_path, 'r')) + num_examples = len(anns) + print(f'constructing {num_examples} examples.') + + assert '@' in output_path + output_path_base, num_shards = output_path.split('@') + num_shards = int(num_shards) + shard_id = 0 + output_path_pattern = output_path_base + '-{:05d}-of-{:05d}' + output_path = output_path_pattern.format(shard_id, num_shards) + num_examples_per_shard = (num_examples - 1) // num_shards + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + + count = 0 + for _, feat in anns.items(): + count += 1 + video_path = os.path.join(video_dir, feat['video_path']) + feat['video_path'] = video_path + feat['dataset_name'] = 'vidor' + example = construct_example(feat) + writer.write(example.SerializeToString()) + if (count % num_examples_per_shard == 0) and shard_id < num_shards - 1: + writer.close() + shard_id += 1 + output_path = output_path_pattern.format(shard_id, num_shards) + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + writer.close() + print('Num processed examples', count) + + +def main(unused_argv): + create_dataset(FLAGS.ann_path, FLAGS.video_dir, FLAGS.output_path) + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/densevoc/tools/build_vidstg_tfrecord.py b/scenic/projects/densevoc/tools/build_vidstg_tfrecord.py new file mode 100644 index 0000000000000000000000000000000000000000..ad0fa09c234241f176ab4bdd698a4817b2721471 --- /dev/null +++ b/scenic/projects/densevoc/tools/build_vidstg_tfrecord.py @@ -0,0 +1,323 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Build VidSTG tfrecord. + +VidSTG dataset (https://github.com/Guaranteer/VidSTG-Dataset) is built on top +of VidOR dataset (https://xdshang.github.io/docs/vidor.html). Before running +this script to process VidSTG datasets, please follow the instruction in +'./build_vidor_tfrecord.py' to process VidOR. This script will use the resulting +tfrecord files of VidOR datasets. + +Download the VidSTG annotation jsons from +`https://github.com/Guaranteer/VidSTG-Dataset/tree/master/annotations`. +Note both VidSTG train and val are from VidOR training set. + +Run the following command with path to the downloaded VidSTG json, the VidOR +json folder path from VidOR, and the VidOR tfrecord created in +'./build_vidor_tfrecord.py'. + +``` +mkdir ~/Datasets/VidSTG/tfrecords/ + +python build_vidstg_tfrecord.py \ +--vidstg_json ~/Datasets/VidSTG/annotations/val_annotations.json \ +--vidor_json_path ~/Datasets/VidOR/annotations/training/ \ +--vidor_tfrecord_path ~/Datasets/VidOR/tfrecords/vidor.training.tfrecord@256 \ +--output_path ~/Datasets/VidSTG/tfrecords/vidstg.video.max200f.caption.val.tfrecord@32 \ +--video_max_len 200 + +python build_vidstg_tfrecord.py \ +--vidstg_json ~/Datasets/VidSTG/annotations/train_annotations.json \ +--vidor_json_path ~/Datasets/VidOR/annotations/training/ \ +--vidor_tfrecord_path ~/Datasets/VidOR/tfrecords/vidor.training.tfrecord@256 \ +--output_path ~/Datasets/VidSTG/tfrecords/vidstg.video.caption.train.tfrecord@256 +``` + + +NOTE(zhouxy): this script is for external reproducibility only, and is NOT the +exact script we run for the paper. Our original script uses internal +tools which run faster but can't be released. Users may integrate +this script with multi-threaded tools for speedup. +""" + +import json +import os + +from absl import app +from absl import flags +import numpy as np +import tensorflow as tf +from tensorflow.io import gfile + +FLAGS = flags.FLAGS + +flags.DEFINE_string('vidstg_json', '', 'path to the VidSTG which has captions.') +flags.DEFINE_string( + 'vidor_json_path', '', + 'path to the VidOR annotations which has boxes.') +flags.DEFINE_string( + 'vidor_tfrecord_path', '', 'path to vidor tfrecords.') +flags.DEFINE_string( + 'output_path', '', 'Output path.') +flags.DEFINE_float('output_fps', 5, '') +flags.DEFINE_integer('video_max_len', -1, '') + +MAX_FRAMES_PER_VIDEO = 6000 +MAX_TRACKS_PER_VIDEO = 100 + + +def decode_sharded_names(path): + """Convert sharded file names into a list.""" + ret = [] + path = path.split(',') + for name in path: + if '@' in name: + num_shards = int(name.split('@')[1].split('.')[0]) + suffix = name.split(f'@{num_shards}')[-1] + prefix = name.split('@')[0] + names = [ + f'{prefix}-{i:05d}-of-{num_shards:05d}{suffix}' + for i in range(num_shards) + ] + ret.extend(names) + else: + ret.append(name) + return ret + + +def str_to_bytes(string): + return string.encode('utf-8') + + +def _bytes_feature(value): + return tf.train.Feature(bytes_list=tf.train.BytesList(value=value)) + + +def _float_feature(value): + return tf.train.Feature(float_list=tf.train.FloatList(value=value)) + + +def _int64_feature(value): + return tf.train.Feature(int64_list=tf.train.Int64List(value=value)) + + +def process_video_record( + all_images, width, height, video_id, all_objects, + video_captions, video_questions, all_ids): + """Creates a sequence example from a list of dict.""" + boxes = [] + track_ids, caption_ids, captions, questions = [], [], [], [] + for anns in all_objects: + bbox = np.asarray( + [x['bbox'] for x in anns], dtype=np.float32).reshape(-1, 4) + # [x0, y0, w, h] -> [x0, y0, x1, y1] + bbox[:, 2:] = bbox[:, 2:] + bbox[:, :2] + bbox[:, [0, 2]] /= width + bbox[:, [1, 3]] /= height + # tfds builder uses format [y0, x0, y1, x1] + bbox[:, [0, 1]], bbox[:, [2, 3]] = bbox[:, [1, 0]], bbox[:, [3, 2]] + boxes.append(_float_feature(bbox.flatten())) + track_ids.append(_int64_feature( + np.asarray([x['track_id'] for x in anns], dtype=np.int64))) + caption_ids.append(_int64_feature( + np.asarray([x['caption_id'] for x in anns], dtype=np.int64))) + captions.append(_bytes_feature( + [str_to_bytes(x['caption']) for x in anns])) + questions.append(_bytes_feature( + [str_to_bytes(x['question']) for x in anns])) + + feature = { + 'video_id': _int64_feature([video_id]), + 'video/captions': _bytes_feature( + [str_to_bytes(x) for x in video_captions]), + 'video/questions': _bytes_feature( + [str_to_bytes(x) for x in video_questions]), + 'image_ids': _int64_feature(all_ids), + } + seq_feature = { + 'image/encoded': tf.train.FeatureList(feature=all_images), + 'objects/bbox': tf.train.FeatureList(feature=boxes), + 'objects/track_id': tf.train.FeatureList(feature=track_ids), + 'objects/caption_id': tf.train.FeatureList(feature=caption_ids), + 'objects/caption': tf.train.FeatureList(feature=captions), + 'objects/question': tf.train.FeatureList(feature=questions), + } + example = tf.train.SequenceExample( + context=tf.train.Features(feature=feature), + feature_lists=tf.train.FeatureLists(feature_list=seq_feature)) + return example + + +class ConvertSeqExamples(object): + """Read images in tfrecord and add annotations from json files.""" + + def __init__( + self, vidor_json_path, vid2stg_anns, output_fps, video_id_to_cont_id, + video_max_len): + self.vidor_json_path = vidor_json_path + self.vid2stg_anns = vid2stg_anns + self.output_fps = output_fps + self.video_id_to_cont_id = video_id_to_cont_id + self.video_max_len = video_max_len + + def process(self, example): + """Process a single example.""" + vid = str(int(example.context.feature[ + 'video_id'].bytes_list.value[0].decode('utf-8'))) + if vid not in self.vid2stg_anns: + return [] + + full_data_path = example.context.feature[ + 'data_path'].bytes_list.value[0].decode('utf-8') + height = example.context.feature['height'].int64_list.value[0] + width = example.context.feature['width'].int64_list.value[0] + # FPS of the annotation + fps = example.context.feature['fps'].float_list.value[0] + # FPS of the decoded images + decode_fps = example.context.feature['image/frame_rate'].float_list.value[0] + assert abs(fps - decode_fps) < 1, f'{fps}, {decode_fps}' + + frame_count = example.context.feature['frame_count'].int64_list.value[0] + num_frames = example.context.feature['clip/frames'].int64_list.value[0] + assert frame_count == num_frames, f'{frame_count}, {num_frames}' + feature_list = example.feature_lists.feature_list + assert len(feature_list['image/encoded'].feature) == num_frames, ( + '{} {}'.format(len(feature_list['image/encoded'].feature), num_frames)) + + data_path = full_data_path[full_data_path[ + :full_data_path.rfind('/')].rfind('/') + 1:].replace('mp4', 'json') + vidor_path = os.path.join(self.vidor_json_path, data_path) + vidor_anns = json.load(gfile.GFile(vidor_path, 'r')) + vidstg_anns = self.vid2stg_anns[vid] + video_captions = set() + video_questions = set() + for (_, traj) in vidstg_anns: + for cap in traj['captions']: + video_captions.add(cap['description']) + for q in traj['questions']: + video_questions.add(q['description']) + + sampling_rate = self.output_fps / fps + assert sampling_rate <= 1, f'{sampling_rate}' + frame_ids = [0] + for frame_id in range(num_frames): + # Filtering rule following TubeDETR: + # https://github.com/antoyang/TubeDETR/blob/main/datasets/ + # vidstg_eval.py#L62 + if int(frame_ids[-1] * sampling_rate) < int(frame_id * sampling_rate): + frame_ids.append(frame_id) + if len(frame_ids) > self.video_max_len: # subsample at video_max_len + frame_ids = [ + frame_ids[(j * len(frame_ids)) // self.video_max_len] + for j in range(self.video_max_len)] + video_id = self.video_id_to_cont_id[int(vid)] + all_images, all_objects, all_ids = [], [], [] + for frame_id in frame_ids: + image_encoded = feature_list['image/encoded'].feature[frame_id] + image_id = video_id * MAX_FRAMES_PER_VIDEO + frame_id + vidor_anns_frame = vidor_anns['trajectories'][frame_id] + objs = {} + for x in vidor_anns_frame: + b = x['bbox'] + bbox = [ + b['xmin'], b['ymin'], + b['xmax'] - b['xmin'], b['ymax'] - b['ymin']] # (x0, y0, w, h) + objs[x['tid']] = { + 'caption': '', 'question': '', 'bbox': bbox, + 'track_id': video_id * MAX_TRACKS_PER_VIDEO + int(x['tid']), + 'caption_id': 0, + 'question_id': 0, + } + for (traj_id, traj) in vidstg_anns: + if frame_id >= traj['temporal_gt']['begin_fid'] and frame_id < traj[ + 'temporal_gt']['end_fid']: + for cap in traj['captions']: + cap_tid = cap['target_id'] + assert cap_tid in objs + objs[cap_tid]['caption'] = cap['description'] + objs[cap_tid]['caption_id'] = traj_id + for q in traj['questions']: + q_tid = q['target_id'] + assert q_tid in objs + objs[q_tid]['question'] = q['description'] + objs[q_tid]['question_id'] = traj_id + objs = list(objs.values()) + all_images.append(image_encoded) + all_objects.append(objs) + all_ids.append(image_id) + out_example = process_video_record( + all_images, width, height, video_id, all_objects, + video_captions, video_questions, all_ids) + return [out_example] + + +def main(unused_argv): + vidstg_data = json.load(gfile.GFile(FLAGS.vidstg_json, 'r')) + video_ids = set(x['vid'] for x in vidstg_data) + video_id_to_cont_id = {int(x): i + 1 for i, x in enumerate(sorted(video_ids))} + print('num vidstg videos', len(video_ids)) + vid2stg_anns = {x: [] for x in video_ids} + for i, x in enumerate(vidstg_data): + vid2stg_anns[x['vid']].append((i + 1, x)) + + convertor = ConvertSeqExamples( + vidor_json_path=FLAGS.vidor_json_path, + vid2stg_anns=vid2stg_anns, + output_fps=FLAGS.output_fps, + video_id_to_cont_id=video_id_to_cont_id, + video_max_len=FLAGS.video_max_len) + + # init output files + assert '@' in FLAGS.output_path + output_path_base, num_shards = FLAGS.output_path.split('@') + num_shards = int(num_shards) + shard_id = 0 + output_path_pattern = output_path_base + '-{:05d}-of-{:05d}' + output_path = output_path_pattern.format(shard_id, num_shards) + num_examples_per_shard = (len(video_ids) - 1) // num_shards + print('num_examples_per_shard', num_examples_per_shard) + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + + raw_ds = tf.data.TFRecordDataset( + decode_sharded_names(FLAGS.vidor_tfrecord_path)) + raw_data_iter = iter(raw_ds) + count = 0 + count_in_shard = 0 + while True: + try: + raw_data = next(raw_data_iter) + except StopIteration: + break + data = tf.train.SequenceExample.FromString(raw_data.numpy()) + new_data_list = convertor.process(data) + for new_data in new_data_list: + writer.write(new_data.SerializeToString()) + count += len(new_data_list) + count_in_shard += len(new_data_list) + if count_in_shard >= num_examples_per_shard and (shard_id < num_shards - 1): + writer.close() + shard_id += 1 + output_path = output_path_pattern.format(shard_id, num_shards) + print(f'Shard {shard_id - 1} done. Processed examples', count_in_shard) + print('Writing to', output_path) + count_in_shard = 0 + writer = tf.io.TFRecordWriter(output_path) + writer.close() + print('Num processed examples', count) + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/densevoc/tools/build_vln_tfrecord.py b/scenic/projects/densevoc/tools/build_vln_tfrecord.py new file mode 100644 index 0000000000000000000000000000000000000000..1b249e46f190047d404f4ae027385ea1e43c987c --- /dev/null +++ b/scenic/projects/densevoc/tools/build_vln_tfrecord.py @@ -0,0 +1,202 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Creates TFRecord files for Video Localized Narratives. + +Download the "Video Narrative Grounding" annotation from the Video Localized +Narrative homepage: https://google.github.io/video-localized-narratives/ + +Download the UVO videos and annotations from its homepage: +https://sites.google.com/corp/view/unidentified-video-object/dataset#h.kpl7yyecv660 + +Follow the UVO instruction to run the `video2frame.py` tool to extract frames. +Assuming the frames are extracted in +~/Datasets/UVO/uvo_videos_sparse_frames_annotated_*/ + +Run the follow command with the corresponding paths to create UVO TFRecords: + +``` +mkdir ~/Datasets/VLN/tfrecords +python build_vln_tfrecord.py -- \ +--ann_path ~/Datasets/VLN/vng/UVO_VNG/meta_expressions/sparse_val/meta_expressions.json \ +--uvo_extra_ann_path ~/Datasets/VLN/vng/UVO_VNG/extra_masks/sparse_val/extra_masks.json \ +--uvo_ann_path ~/Datasets/UVO/UVOv1.0/VideoSparseSet/UVO_sparse_val_video.json \ +--image_dir ~/Datasets/UVO/uvo_videos_sparse_frames_annotated_val/ \ +--output_path ~/Datasets/VLN/tfrecords/vng_uvo_sparse_val.tfrecord@32 + +python build_vln_tfrecord.py -- \ +--ann_path ~/Datasets/VLN/vng/UVO_VNG/meta_expressions/sparse_train/meta_expressions.json \ +--uvo_extra_ann_path ~/Datasets/VLN/vng/UVO_VNG/extra_masks/sparse_train/extra_masks.json \ +--uvo_ann_path ~/Datasets/UVO/UVOv1.0/VideoSparseSet/UVO_sparse_train_video.json \ +--image_dir ~/Datasets/UVO/uvo_videos_sparse_frames_annotated_train/ \ +--output_path ~/Datasets/VLN/tfrecords/vng_uvo_sparse_train.tfrecord@32 +``` + +""" + +import json + +from absl import app +from absl import flags +import numpy as np +from pycocotools import mask as mask_utils +import tensorflow as tf +from tensorflow.io import gfile + + +FLAGS = flags.FLAGS + +flags.DEFINE_string('ann_path', '', 'Path to input json.') +flags.DEFINE_string('uvo_ann_path', '', 'Path to uvo json.') +flags.DEFINE_string('uvo_extra_ann_path', '', 'Path to uvo json.') +flags.DEFINE_string('image_dir', '', 'Path to images.') +flags.DEFINE_string('output_path', '', 'output sstable') + +NUM_IMAGES = 3 + + +def str_to_bytes(string): + return string.encode('utf-8') + + +def _bytes_feature(value): + return tf.train.Feature(bytes_list=tf.train.BytesList(value=value)) + + +def _float_feature(value): + return tf.train.Feature(float_list=tf.train.FloatList(value=value)) + + +def _int64_feature(value): + return tf.train.Feature(int64_list=tf.train.Int64List(value=value)) + + +def process_video_record( + video_info, video_key, annotations, objid2ann, id2contid, image_dir): + """Creates a sequence example from a list of dict.""" + expressions = annotations['expressions'] + actor_narratives = annotations['actor_narratives'] + actorid2caption = {x['actor_idx']: x['description'] for x in actor_narratives} + actorid2name = {x['actor_idx']: x['actor_name'] for x in actor_narratives} + isbackground = { + x['actor_idx']: x['actor_name'] == 'background' for x in actor_narratives} + video_id = video_info['id'] + file_names = video_info['file_names'] + height, width = video_info['height'], video_info['width'] + + images = [] + boxes, track_ids, captions = [], [], [] + for i in range(NUM_IMAGES): + file_name = image_dir + '/' + file_names[i] + img_string = gfile.GFile(file_name, 'rb').read() + images.append(_bytes_feature([img_string])) + boxes_frame, ids_frame, caption_frame = [], [], [] + used_caption = {x: False for x in actorid2caption} + appeared = set() + for k in sorted(expressions): + ann = expressions[k] + obj_id = ann['obj_id'] + obj_ann = objid2ann[obj_id] + actor_id = ann['narrative_actor_idx'] + if not used_caption[actor_id] and not isbackground[actor_id] and ( + ann['noun_phrase_end_idx'] <= len(actorid2name[actor_id]) + 5 + ): + caption = actorid2caption[actor_id] + used_caption[actor_id] = True + else: + caption = '' + if actor_id in appeared: + continue + appeared.add(actor_id) + if 'bboxes' in obj_ann: + bbox = obj_ann['bboxes'][i] + if bbox is None: + continue + else: + mask = obj_ann['segmentations'][i] + if mask is None: + continue + bbox = mask_utils.toBbox(mask) + boxes_frame.append(bbox) + ids_frame.append(id2contid[obj_id]) + caption_frame.append(caption) + bbox = np.asarray(boxes_frame).reshape(-1, 4) + # [x0, y0, w, h] -> [x0, y0, x1, y1] + bbox[:, 2:] = bbox[:, 2:] + bbox[:, :2] + bbox[:, [0, 2]] /= width + bbox[:, [1, 3]] /= height + # tfds builder use format [y0, x0, y1, x1] + bbox[:, [0, 1]], bbox[:, [2, 3]] = bbox[:, [1, 0]], bbox[:, [3, 2]] + boxes.append(_float_feature(bbox.flatten())) + track_ids.append(_int64_feature(np.asarray(ids_frame, dtype=np.int64))) + captions.append(_bytes_feature([str_to_bytes(x) for x in caption_frame])) + + feature = { + 'video_id': _int64_feature([video_id]), + 'ytid': _bytes_feature([str_to_bytes(video_key)]), + 'image_ids': _int64_feature( + [video_id * NUM_IMAGES + i for i in range(NUM_IMAGES)]), + } + seq_feature = { + 'image/encoded': tf.train.FeatureList(feature=images), + 'objects/bbox': tf.train.FeatureList(feature=boxes), + 'objects/track_id': tf.train.FeatureList(feature=track_ids), + 'objects/caption': tf.train.FeatureList(feature=captions), + } + example = tf.train.SequenceExample( + context=tf.train.Features(feature=feature), + feature_lists=tf.train.FeatureLists(feature_list=seq_feature)) + return example + + +def main(unused_argv): + print('read inputs.') + anns = json.load(gfile.GFile(FLAGS.ann_path, 'r')) + uvo_anns = json.load(gfile.GFile(FLAGS.uvo_ann_path, 'r')) + uvo_extra_anns = json.load(gfile.GFile(FLAGS.uvo_extra_ann_path, 'r')) + print('original annotations', len(uvo_anns['annotations'])) + uvo_anns['annotations'].extend(uvo_extra_anns['annotations']) + print('with extra annotations', len(uvo_anns['annotations'])) + objid2ann = {x['id']: x for x in uvo_anns['annotations']} + id2contid = {x['id']: i + 1 for i, x in enumerate( + sorted(uvo_anns['annotations'], key=lambda x: x['id']))} + ytid2videoid = {x['ytid']: x['id'] for x in uvo_anns['videos']} + videoid2ann = {x['id']: x for x in uvo_anns['videos']} + num_shards = int(FLAGS.output_path[FLAGS.output_path.find('@') + 1:]) + output_path = FLAGS.output_path[:FLAGS.output_path.find('@')] + num_examples = 0 + shard_id = 0 + output_path_pattern = output_path + '-{:05d}-of-{:05d}' + output_path = output_path_pattern.format(shard_id, num_shards) + num_examples_per_shard = (len(anns['videos']) - 1) // num_shards + 1 + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + for k in sorted(anns['videos']): + ann = anns['videos'][k] + num_examples += 1 + video_id = ytid2videoid[k] + video_info = videoid2ann[video_id] + record = process_video_record( + video_info, k, ann, objid2ann, id2contid, FLAGS.image_dir) + writer.write(record.SerializeToString()) + if num_examples % num_examples_per_shard == 0: + writer.close() + shard_id += 1 + output_path = output_path_pattern.format(shard_id, num_shards) + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + writer.close() + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/densevoc/tools/convert_video_tfrecord_to_image_tfrecord.py b/scenic/projects/densevoc/tools/convert_video_tfrecord_to_image_tfrecord.py new file mode 100644 index 0000000000000000000000000000000000000000..5d0cb825a84aaa2b705317d987f36003ec91d622 --- /dev/null +++ b/scenic/projects/densevoc/tools/convert_video_tfrecord_to_image_tfrecord.py @@ -0,0 +1,198 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Create json file for evaluation from tfrecord. + +This scripts create Visual-Genome format dense object captioning (in images) +TFRecord from a TFrecord for videos. This is used for mAP evaluation or +training the per-frame captioning + tracker baseline. + +Before running this script, please follow the instructions in +`tools/build_vidstg_tfrecord.py` to build the video TFrecord. + +Run: + +``` +python convert_video_tfrecord_to_image_tfrecord.py \ +--input_tfrecord ~/Datasets/VidSTG/tfrecords/vidstg.video.max200f.caption.val.tfrecord@32 \ +--output_tfrecord ~/Datasets/VidSTG/tfrecords/vidstg.image.max200f.caption.val.tfrecord@32 \ +--total_videos 603 +``` + +""" + +import io + +from absl import app +from absl import flags +import numpy as np +from PIL import Image +from scenic.projects.densevoc import input_utils +import tensorflow as tf + +FLAGS = flags.FLAGS + +flags.DEFINE_string('input_tfrecord', '', 'path to the tfrecord data.') +flags.DEFINE_string('output_tfrecord', '', 'Output path of tfrecord data') +flags.DEFINE_integer('total_videos', -1, 'total videos') + + +def decode_sharded_names(path): + """Convert sharded file names into a list.""" + ret = [] + path = path.split(',') + for name in path: + if '@' in name: + num_shards = int(name.split('@')[1].split('.')[0]) + suffix = name.split(f'@{num_shards}')[-1] + prefix = name.split('@')[0] + names = [ + f'{prefix}-{i:05d}-of-{num_shards:05d}{suffix}' + for i in range(num_shards) + ] + ret.extend(names) + else: + ret.append(name) + return ret + + +def str_to_bytes(string): + return string.encode('utf-8') + + +def _bytes_feature(value): + return tf.train.Feature(bytes_list=tf.train.BytesList(value=value)) + + +def _float_feature(value): + return tf.train.Feature(float_list=tf.train.FloatList(value=value)) + + +def _int64_feature(value): + return tf.train.Feature(int64_list=tf.train.Int64List(value=value)) + + +def process_record(image_encoded, width, height, image_id, anns): + """Creates a sequence example from a list of dict.""" + bbox = np.asarray( + [x['bbox'] for x in anns], dtype=np.float32).reshape(-1, 4) + bbox[:, 2:] = bbox[:, 2:] + bbox[:, :2] # [x0, y0, w, h] -> [x0, y0, x1, y1] + bbox[:, [0, 2]] /= width + bbox[:, [1, 3]] /= height + # tfds builder use format [y0, x0, y1, x1] + bbox[:, [0, 1]], bbox[:, [2, 3]] = bbox[:, [1, 0]], bbox[:, [3, 2]] + + feature = { + 'image': image_encoded, + 'img_id': _int64_feature([image_id]), + 'regions/bbox': _float_feature(bbox.flatten()), + 'regions/id': _int64_feature(np.asarray( + [0 for _ in anns], dtype=np.int64)), + 'regions/track_id': _int64_feature(np.asarray( + [x['track_id'] for x in anns], dtype=np.int64)), + 'regions/phrase': _bytes_feature( + [str_to_bytes(x['caption']) for x in anns]), + } + example = tf.train.Example(features=tf.train.Features(feature=feature)) + return example + + +def numpy_to_encoded(image_np): + # Convert the NumPy array image to a PIL.Image object + image_pil = Image.fromarray(image_np) + + # Save the PIL.Image object to a BytesIO buffer in PNG format + buffer = io.BytesIO() + image_pil.save(buffer, format='PNG') + buffer.seek(0) + + # Convert the image buffer to a byte string + image_bytes = buffer.getvalue() + return tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_bytes])) + + +def main(unused_argv): + ds = tf.data.TFRecordDataset(decode_sharded_names(FLAGS.input_tfrecord)) + ds = ds.map( + lambda x: tf.io.parse_sequence_example( # pylint: disable=g-long-lambda + x, + sequence_features=input_utils.densecap_sequence_feature_description, + context_features=input_utils.densecap_context_feature_description)) + ds = ds.map( + lambda x, y, _: # pylint: disable=g-long-lambda + input_utils.decode_and_sample_video_example( + x, y, _, num_frames=-1, temporal_stride=1)) + data_iter = iter(ds) + ann_count = 0 + num_videos = 0 + + num_shards = int(FLAGS.output_tfrecord[FLAGS.output_tfrecord.find('@') + 1:]) + output_path = FLAGS.output_tfrecord[:FLAGS.output_tfrecord.find('@')] + shard_id = 0 + output_path_pattern = output_path + '-{:05d}-of-{:05d}' + output_path = output_path_pattern.format(shard_id, num_shards) + num_examples_per_shard = (FLAGS.total_videos - 1) // num_shards + 1 + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + + while True: + try: + num_videos += 1 + if num_videos % 100 == 0: + print(num_videos) + data = next(data_iter) + except: # pylint: disable=bare-except + break + images = data['images'].numpy() + image_ids = data['image_ids'].numpy() + num_frames, height, width = images.shape[:3] + video_boxes = data['boxes'].numpy() + video_track_ids = data['track_ids'].numpy() + video_captions = data['captions'].numpy() + for i in range(num_frames): + image_id = image_ids[i] + image = images[i] + boxes = video_boxes[i] + phrases = video_captions[i] + track_ids = video_track_ids[i] + objs = [] + for box, phrase, track_id in zip(boxes, phrases, track_ids): + if box.max() == 0: + break + y0, x0, y1, x1 = box + bbox = [x0 * width, y0 * height, (x1 - x0) * width, (y1 - y0) * height] + ann_count += 1 + ann = { + 'id': ann_count, + 'image_id': int(image_id), + 'bbox': bbox, + 'caption': phrase.decode('utf-8'), + 'track_id': int(track_id), + } + objs.append(ann) + image_encoded = numpy_to_encoded(image) + record = process_record( + image_encoded, width, height, image_id, objs) + writer.write(record.SerializeToString()) + if num_videos % num_examples_per_shard == 0: + writer.close() + shard_id += 1 + output_path = output_path_pattern.format(shard_id, num_shards) + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + writer.close() + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/densevoc/tools/create_coco_json_from_tfrecord.py b/scenic/projects/densevoc/tools/create_coco_json_from_tfrecord.py new file mode 100644 index 0000000000000000000000000000000000000000..c1dea9aaae394eca35d635f60378a6f638e5434b --- /dev/null +++ b/scenic/projects/densevoc/tools/create_coco_json_from_tfrecord.py @@ -0,0 +1,158 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Create coco format json files for evaluation from tfrecords. + +This scripts create COCO-format annotation jsons from a TFrecord. +The json is used for mAP and CHOTA evaluation. + +Before running this script, please follow the instructions in +`tools/build_vidstg_tfrecord.py` and `tools/build_vln_tfrecord.py` to build +the video TFrecord. + +``` +mkdir ~/Datasets/VidSTG/annotations + +python create_coco_json_from_tfrecord.py -- \ +--input_tfrecord ~/Datasets/VidSTG/tfrecords/vidstg.video.max200f.caption.val.tfrecord@32 \ +--output_json ~/Datasets/VidSTG/annotations/vidstg_max200f_val_coco_format.json + +mkdir ~/Datasets/VLN/annotations + +python create_coco_json_from_tfrecord.py -- \ +--input_tfrecord ~/Datasets/VLN/tfrecords/vng_uvo_sparse_val.tfrecord@32 \ +--output_json ~/Datasets/VLN/annotations/vng_uvo_sparse_val_coco_format.json +``` + +""" + +import json + +from absl import app +from absl import flags +import numpy as np +from PIL import Image +from scenic.projects.densevoc import input_utils +import tensorflow as tf +from tensorflow.io import gfile + +FLAGS = flags.FLAGS + +flags.DEFINE_string('input_tfrecord', '', 'path to the tfrecord data.') +flags.DEFINE_string('output_json', '', '') +flags.DEFINE_string('output_image_path', '', '') + + +def decode_sharded_names(path): + """Convert sharded file names into a list.""" + ret = [] + path = path.split(',') + for name in path: + if '@' in name: + num_shards = int(name.split('@')[1].split('.')[0]) + suffix = name.split(f'@{num_shards}')[-1] + prefix = name.split('@')[0] + names = [ + f'{prefix}-{i:05d}-of-{num_shards:05d}{suffix}' + for i in range(num_shards) + ] + ret.extend(names) + else: + ret.append(name) + return ret + + +def main(unused_argv): + ds = tf.data.TFRecordDataset(decode_sharded_names(FLAGS.input_tfrecord)) + ds = ds.map( + lambda x: tf.io.parse_sequence_example( # pylint: disable=g-long-lambda + x, + sequence_features=input_utils.densecap_sequence_feature_description, + context_features=input_utils.densecap_context_feature_description)) + ds = ds.map( + lambda x, y, _: # pylint: disable=g-long-lambda + input_utils.decode_and_sample_video_example( + x, y, _, num_frames=-1, temporal_stride=1)) + data_iter = iter(ds) + image_infos = [] + categories = [{'id': 1, 'name': 'object'}] + annotations = [] + ann_count = 0 + num_videos = 0 + while True: + try: + num_videos += 1 + if num_videos % 100 == 0: + print(num_videos) + data = next(data_iter) + except StopIteration: + break + if len(image_infos) % 1000 == 0: + print(f'processed {len(image_infos)} images.') + images = data['images'].numpy() + image_ids = data['image_ids'].numpy() + num_frames, height, width = images.shape[:3] + video_boxes = data['boxes'].numpy() + video_track_ids = data['track_ids'].numpy() + video_captions = data['captions'].numpy() + try: + video_id = int(data['video_id']) + except ValueError: + video_id = int(num_videos) + for i in range(num_frames): + image_id = image_ids[i] + image = images[i] + if FLAGS.output_image_path: + file_name = f'{FLAGS.output_image_path}/{image_id}.jpg' + image_pil = Image.fromarray(image.astype(np.uint8)).convert('RGB') + image_pil.save(file_name) + image_info = { + 'file_name': f'{image_id}.jpg', + 'id': int(image_id), + 'height': height, + 'width': width, + 'video_id': video_id, + } + image_infos.append(image_info) + boxes = video_boxes[i] + phrases = video_captions[i] + track_ids = video_track_ids[i] + for box, phrase, track_id in zip(boxes, phrases, track_ids): + if box.max() == 0: + break + bbox = [ + float(box[0]), float(box[1]), + float(box[2] - box[0]), float(box[3] - box[1])] + ann_count += 1 + ann = { + 'id': ann_count, + 'iscrowd': 0, + 'area': bbox[2] * bbox[3], + 'image_id': int(image_id), + 'category_id': 1, + 'bbox': bbox, + 'caption': phrase.decode('utf-8'), + 'track_id': int(track_id), + } + annotations.append(ann) + ret = { + 'images': image_infos, + 'categories': categories, + 'annotations': annotations} + for k, v in ret.items(): + print(k, len(v)) + json.dump(ret, gfile.GFile(FLAGS.output_json, 'w')) + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/densevoc/tools/densevoc_convert_clip_b16_weights_to_jax.ipynb b/scenic/projects/densevoc/tools/densevoc_convert_clip_b16_weights_to_jax.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..c89949ac2401a8c027a717ce1b3e39134a01d996 --- /dev/null +++ b/scenic/projects/densevoc/tools/densevoc_convert_clip_b16_weights_to_jax.ipynb @@ -0,0 +1,1269 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "gpuClass": "standard" + }, + "cells": [ + { + "cell_type": "code", + "source": [ + "!pip install ftfy regex tqdm\n", + "!pip install git+https://github.com/openai/CLIP.git" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "S7AqdgbEG-6e", + "outputId": "27cadeab-5201-4f78-8b96-01641dc6690e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", + "Collecting ftfy\n", + " Downloading ftfy-6.1.1-py3-none-any.whl (53 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m53.1/53.1 KB\u001b[0m \u001b[31m1.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: regex in /usr/local/lib/python3.8/dist-packages (2022.6.2)\n", + "Requirement already satisfied: tqdm in /usr/local/lib/python3.8/dist-packages (4.64.1)\n", + "Requirement already satisfied: wcwidth>=0.2.5 in /usr/local/lib/python3.8/dist-packages (from ftfy) (0.2.5)\n", + "Installing collected packages: ftfy\n", + "Successfully installed ftfy-6.1.1\n", + "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", + "Collecting git+https://github.com/openai/CLIP.git\n", + " Cloning https://github.com/openai/CLIP.git to /tmp/pip-req-build-7vth7faz\n", + " Running command git clone --filter=blob:none --quiet https://github.com/openai/CLIP.git /tmp/pip-req-build-7vth7faz\n", + " Resolved https://github.com/openai/CLIP.git to commit d50d76daa670286dd6cacf3bcd80b5e4823fc8e1\n", + " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Requirement already satisfied: ftfy in /usr/local/lib/python3.8/dist-packages (from clip==1.0) (6.1.1)\n", + "Requirement already satisfied: regex in /usr/local/lib/python3.8/dist-packages (from clip==1.0) (2022.6.2)\n", + "Requirement already satisfied: tqdm in /usr/local/lib/python3.8/dist-packages (from clip==1.0) (4.64.1)\n", + "Requirement already satisfied: torch in /usr/local/lib/python3.8/dist-packages (from clip==1.0) (1.13.1+cu116)\n", + "Requirement already satisfied: torchvision in /usr/local/lib/python3.8/dist-packages (from clip==1.0) (0.14.1+cu116)\n", + "Requirement already satisfied: wcwidth>=0.2.5 in /usr/local/lib/python3.8/dist-packages (from ftfy->clip==1.0) (0.2.5)\n", + "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.8/dist-packages (from torch->clip==1.0) (4.4.0)\n", + "Requirement already satisfied: numpy in /usr/local/lib/python3.8/dist-packages (from torchvision->clip==1.0) (1.21.6)\n", + "Requirement already satisfied: requests in /usr/local/lib/python3.8/dist-packages (from torchvision->clip==1.0) (2.25.1)\n", + "Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /usr/local/lib/python3.8/dist-packages (from torchvision->clip==1.0) (7.1.2)\n", + "Requirement already satisfied: chardet<5,>=3.0.2 in /usr/local/lib/python3.8/dist-packages (from requests->torchvision->clip==1.0) (4.0.0)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.8/dist-packages (from requests->torchvision->clip==1.0) (2022.12.7)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.8/dist-packages (from requests->torchvision->clip==1.0) (1.24.3)\n", + "Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.8/dist-packages (from requests->torchvision->clip==1.0) (2.10)\n", + "Building wheels for collected packages: clip\n", + " Building wheel for clip (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for clip: filename=clip-1.0-py3-none-any.whl size=1369408 sha256=fa189eb58de02a82e89d3ce61276e5c0c3874de88b0d0e3ee7efdae5ae2d743c\n", + " Stored in directory: /tmp/pip-ephem-wheel-cache-rvfc_cq7/wheels/ab/4f/3a/5e51521b55997aa6f0690e095c08824219753128ce8d9969a3\n", + "Successfully built clip\n", + "Installing collected packages: clip\n", + "Successfully installed clip-1.0\n" + ] + } + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "9Uaoeb0TF8Gz", + "outputId": "67e3daf8-6116-4468-c9ff-6e4964e2ea3e" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "torch: 1.13 ; cuda: cu116\n", + "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", + "Collecting flax\n", + " Downloading flax-0.6.3-py3-none-any.whl (197 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m197.4/197.4 KB\u001b[0m \u001b[31m2.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: numpy>=1.12 in /usr/local/lib/python3.8/dist-packages (from flax) (1.21.6)\n", + "Collecting rich>=11.1\n", + " Downloading rich-13.1.0-py3-none-any.whl (238 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m238.4/238.4 KB\u001b[0m \u001b[31m10.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: msgpack in /usr/local/lib/python3.8/dist-packages (from flax) (1.0.4)\n", + "Requirement already satisfied: typing-extensions>=4.1.1 in /usr/local/lib/python3.8/dist-packages (from flax) (4.4.0)\n", + "Collecting tensorstore\n", + " Downloading tensorstore-0.1.30-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8.3/8.3 MB\u001b[0m \u001b[31m49.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: PyYAML>=5.4.1 in /usr/local/lib/python3.8/dist-packages (from flax) (6.0)\n", + "Requirement already satisfied: matplotlib in /usr/local/lib/python3.8/dist-packages (from flax) (3.2.2)\n", + "Collecting orbax\n", + " Downloading orbax-0.1.0-py3-none-any.whl (66 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m67.0/67.0 KB\u001b[0m \u001b[31m7.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting optax\n", + " Downloading optax-0.1.4-py3-none-any.whl (154 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m154.9/154.9 KB\u001b[0m \u001b[31m11.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: jax>=0.3.16 in /usr/local/lib/python3.8/dist-packages (from flax) (0.3.25)\n", + "Requirement already satisfied: opt-einsum in /usr/local/lib/python3.8/dist-packages (from jax>=0.3.16->flax) (3.3.0)\n", + "Requirement already satisfied: scipy>=1.5 in /usr/local/lib/python3.8/dist-packages (from jax>=0.3.16->flax) (1.7.3)\n", + "Collecting commonmark<0.10.0,>=0.9.0\n", + " Downloading commonmark-0.9.1-py2.py3-none-any.whl (51 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m51.1/51.1 KB\u001b[0m \u001b[31m5.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: pygments<3.0.0,>=2.6.0 in /usr/local/lib/python3.8/dist-packages (from rich>=11.1->flax) (2.6.1)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.8/dist-packages (from matplotlib->flax) (1.4.4)\n", + "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.8/dist-packages (from matplotlib->flax) (0.11.0)\n", + "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.8/dist-packages (from matplotlib->flax) (2.8.2)\n", + "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.8/dist-packages (from matplotlib->flax) (3.0.9)\n", + "Requirement already satisfied: jaxlib>=0.1.37 in /usr/local/lib/python3.8/dist-packages (from optax->flax) (0.3.25+cuda11.cudnn805)\n", + "Collecting chex>=0.1.5\n", + " Downloading chex-0.1.5-py3-none-any.whl (85 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m85.3/85.3 KB\u001b[0m \u001b[31m8.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: absl-py>=0.7.1 in /usr/local/lib/python3.8/dist-packages (from optax->flax) (1.3.0)\n", + "Collecting cached_property\n", + " Downloading cached_property-1.5.2-py2.py3-none-any.whl (7.6 kB)\n", + "Requirement already satisfied: pytest in /usr/local/lib/python3.8/dist-packages (from orbax->flax) (3.6.4)\n", + "Requirement already satisfied: etils in /usr/local/lib/python3.8/dist-packages (from orbax->flax) (1.0.0)\n", + "Requirement already satisfied: importlib_resources in /usr/local/lib/python3.8/dist-packages (from orbax->flax) (5.10.2)\n", + "Requirement already satisfied: toolz>=0.9.0 in /usr/local/lib/python3.8/dist-packages (from chex>=0.1.5->optax->flax) (0.12.0)\n", + "Requirement already satisfied: dm-tree>=0.1.5 in /usr/local/lib/python3.8/dist-packages (from chex>=0.1.5->optax->flax) (0.1.8)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.8/dist-packages (from python-dateutil>=2.1->matplotlib->flax) (1.15.0)\n", + "Requirement already satisfied: zipp>=3.1.0 in /usr/local/lib/python3.8/dist-packages (from importlib_resources->orbax->flax) (3.11.0)\n", + "Requirement already satisfied: more-itertools>=4.0.0 in /usr/local/lib/python3.8/dist-packages (from pytest->orbax->flax) (9.0.0)\n", + "Requirement already satisfied: pluggy<0.8,>=0.5 in /usr/local/lib/python3.8/dist-packages (from pytest->orbax->flax) (0.7.1)\n", + "Requirement already satisfied: py>=1.5.0 in /usr/local/lib/python3.8/dist-packages (from pytest->orbax->flax) (1.11.0)\n", + "Requirement already satisfied: setuptools in /usr/local/lib/python3.8/dist-packages (from pytest->orbax->flax) (57.4.0)\n", + "Requirement already satisfied: attrs>=17.4.0 in /usr/local/lib/python3.8/dist-packages (from pytest->orbax->flax) (22.2.0)\n", + "Requirement already satisfied: atomicwrites>=1.0 in /usr/local/lib/python3.8/dist-packages (from pytest->orbax->flax) (1.4.1)\n", + "Installing collected packages: commonmark, cached_property, tensorstore, rich, chex, optax, orbax, flax\n", + "Successfully installed cached_property-1.5.2 chex-0.1.5 commonmark-0.9.1 flax-0.6.3 optax-0.1.4 orbax-0.1.0 rich-13.1.0 tensorstore-0.1.30\n", + "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", + "Collecting ml_collections\n", + " Downloading ml_collections-0.1.1.tar.gz (77 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m77.9/77.9 KB\u001b[0m \u001b[31m2.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Requirement already satisfied: absl-py in /usr/local/lib/python3.8/dist-packages (from ml_collections) (1.3.0)\n", + "Requirement already satisfied: PyYAML in /usr/local/lib/python3.8/dist-packages (from ml_collections) (6.0)\n", + "Requirement already satisfied: six in /usr/local/lib/python3.8/dist-packages (from ml_collections) (1.15.0)\n", + "Requirement already satisfied: contextlib2 in /usr/local/lib/python3.8/dist-packages (from ml_collections) (0.5.5)\n", + "Building wheels for collected packages: ml_collections\n", + " Building wheel for ml_collections (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for ml_collections: filename=ml_collections-0.1.1-py3-none-any.whl size=94524 sha256=dc8d66ebc2f71bd1d0f9d62e94515e232c54616ab1f0f52d8db8aac04a9bf6fd\n", + " Stored in directory: /root/.cache/pip/wheels/6d/9f/a9/9e8309035a5bf09ed9086bbca8c9b74cb6413d3eb203e2bc8c\n", + "Successfully built ml_collections\n", + "Installing collected packages: ml_collections\n", + "Successfully installed ml_collections-0.1.1\n" + ] + } + ], + "source": [ + "import torch\n", + "TORCH_VERSION = \".\".join(torch.__version__.split(\".\")[:2])\n", + "CUDA_VERSION = torch.__version__.split(\"+\")[-1]\n", + "print(\"torch: \", TORCH_VERSION, \"; cuda: \", CUDA_VERSION)\n", + "!pip install flax\n", + "import jax\n", + "import jax.numpy as jnp\n", + "import numpy as np\n", + "import torch\n", + "!pip install ml_collections\n", + "import ml_collections\n", + "import flax" + ] + }, + { + "cell_type": "code", + "source": [ + "import clip\n", + "clip_model, preprocess = clip.load(\"ViT-B/16\", device='cpu')" + ], + "metadata": { + "id": "7dsgOh72IKIC" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "torch_weights = {k: v for k, v in clip_model.visual.state_dict().items()}" + ], + "metadata": { + "id": "8voRTMbyEJU3" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from tabulate import tabulate\n", + "table = []\n", + "for k in sorted(torch_weights):\n", + " v = torch_weights[k]\n", + " table.append((k, f'{v.shape}', f'{v.mean():.3f}', f'{v.std():.3f}'))\n", + "table_str = tabulate(\n", + " table, tablefmt=\"pipe\", headers=[\"Names\", \"shape\", \"mean\", \"std\"])\n", + "print(table_str)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hbCu9fmlD745", + "outputId": "8abddecc-ac0d-4428-a6a1-ab9bfc062899" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "| Names | shape | mean | std |\n", + "|:----------------------------------------------|:-----------------------------|-------:|------:|\n", + "| class_embedding | torch.Size([768]) | 0.003 | 0.234 |\n", + "| conv1.weight | torch.Size([768, 3, 16, 16]) | 0 | 0.019 |\n", + "| ln_post.bias | torch.Size([768]) | 0.192 | 0.31 |\n", + "| ln_post.weight | torch.Size([768]) | 0.951 | 0.102 |\n", + "| ln_pre.bias | torch.Size([768]) | -0.001 | 0.073 |\n", + "| ln_pre.weight | torch.Size([768]) | 0.393 | 0.455 |\n", + "| positional_embedding | torch.Size([197, 768]) | -0.007 | 0.028 |\n", + "| proj | torch.Size([768, 512]) | 0 | 0.013 |\n", + "| transformer.resblocks.0.attn.in_proj_bias | torch.Size([2304]) | 0.008 | 0.538 |\n", + "| transformer.resblocks.0.attn.in_proj_weight | torch.Size([2304, 768]) | -0 | 0.014 |\n", + "| transformer.resblocks.0.attn.out_proj.bias | torch.Size([768]) | 0.001 | 0.043 |\n", + "| transformer.resblocks.0.attn.out_proj.weight | torch.Size([768, 768]) | -0 | 0.011 |\n", + "| transformer.resblocks.0.ln_1.bias | torch.Size([768]) | -0.014 | 0.181 |\n", + "| transformer.resblocks.0.ln_1.weight | torch.Size([768]) | 0.493 | 0.335 |\n", + "| transformer.resblocks.0.ln_2.bias | torch.Size([768]) | 0.023 | 0.223 |\n", + "| transformer.resblocks.0.ln_2.weight | torch.Size([768]) | 0.919 | 0.401 |\n", + "| transformer.resblocks.0.mlp.c_fc.bias | torch.Size([3072]) | -0.455 | 0.336 |\n", + "| transformer.resblocks.0.mlp.c_fc.weight | torch.Size([3072, 768]) | -0 | 0.015 |\n", + "| transformer.resblocks.0.mlp.c_proj.bias | torch.Size([768]) | -0.004 | 0.074 |\n", + "| transformer.resblocks.0.mlp.c_proj.weight | torch.Size([768, 3072]) | 0 | 0.009 |\n", + "| transformer.resblocks.1.attn.in_proj_bias | torch.Size([2304]) | 0.005 | 0.474 |\n", + "| transformer.resblocks.1.attn.in_proj_weight | torch.Size([2304, 768]) | 0 | 0.018 |\n", + "| transformer.resblocks.1.attn.out_proj.bias | torch.Size([768]) | -0.001 | 0.081 |\n", + "| transformer.resblocks.1.attn.out_proj.weight | torch.Size([768, 768]) | 0 | 0.011 |\n", + "| transformer.resblocks.1.ln_1.bias | torch.Size([768]) | 0.001 | 0.159 |\n", + "| transformer.resblocks.1.ln_1.weight | torch.Size([768]) | 0.824 | 0.243 |\n", + "| transformer.resblocks.1.ln_2.bias | torch.Size([768]) | 0.009 | 0.171 |\n", + "| transformer.resblocks.1.ln_2.weight | torch.Size([768]) | 1.172 | 0.474 |\n", + "| transformer.resblocks.1.mlp.c_fc.bias | torch.Size([3072]) | -0.392 | 0.221 |\n", + "| transformer.resblocks.1.mlp.c_fc.weight | torch.Size([3072, 768]) | -0 | 0.014 |\n", + "| transformer.resblocks.1.mlp.c_proj.bias | torch.Size([768]) | -0.005 | 0.102 |\n", + "| transformer.resblocks.1.mlp.c_proj.weight | torch.Size([768, 3072]) | -0 | 0.01 |\n", + "| transformer.resblocks.10.attn.in_proj_bias | torch.Size([2304]) | 0.008 | 0.395 |\n", + "| transformer.resblocks.10.attn.in_proj_weight | torch.Size([2304, 768]) | -0 | 0.016 |\n", + "| transformer.resblocks.10.attn.out_proj.bias | torch.Size([768]) | 0 | 0.088 |\n", + "| transformer.resblocks.10.attn.out_proj.weight | torch.Size([768, 768]) | -0 | 0.015 |\n", + "| transformer.resblocks.10.ln_1.bias | torch.Size([768]) | 0.049 | 0.21 |\n", + "| transformer.resblocks.10.ln_1.weight | torch.Size([768]) | 2.018 | 0.146 |\n", + "| transformer.resblocks.10.ln_2.bias | torch.Size([768]) | 0.011 | 0.587 |\n", + "| transformer.resblocks.10.ln_2.weight | torch.Size([768]) | 4.746 | 0.409 |\n", + "| transformer.resblocks.10.mlp.c_fc.bias | torch.Size([3072]) | -0.4 | 0.178 |\n", + "| transformer.resblocks.10.mlp.c_fc.weight | torch.Size([3072, 768]) | 0 | 0.015 |\n", + "| transformer.resblocks.10.mlp.c_proj.bias | torch.Size([768]) | -0.002 | 0.1 |\n", + "| transformer.resblocks.10.mlp.c_proj.weight | torch.Size([768, 3072]) | -0 | 0.017 |\n", + "| transformer.resblocks.11.attn.in_proj_bias | torch.Size([2304]) | 0.002 | 0.179 |\n", + "| transformer.resblocks.11.attn.in_proj_weight | torch.Size([2304, 768]) | -0 | 0.015 |\n", + "| transformer.resblocks.11.attn.out_proj.bias | torch.Size([768]) | -0.003 | 0.302 |\n", + "| transformer.resblocks.11.attn.out_proj.weight | torch.Size([768, 768]) | 0 | 0.018 |\n", + "| transformer.resblocks.11.ln_1.bias | torch.Size([768]) | 0.024 | 0.202 |\n", + "| transformer.resblocks.11.ln_1.weight | torch.Size([768]) | 2.028 | 0.159 |\n", + "| transformer.resblocks.11.ln_2.bias | torch.Size([768]) | 0.044 | 0.523 |\n", + "| transformer.resblocks.11.ln_2.weight | torch.Size([768]) | 1.79 | 0.137 |\n", + "| transformer.resblocks.11.mlp.c_fc.bias | torch.Size([3072]) | -0.386 | 0.215 |\n", + "| transformer.resblocks.11.mlp.c_fc.weight | torch.Size([3072, 768]) | -0 | 0.014 |\n", + "| transformer.resblocks.11.mlp.c_proj.bias | torch.Size([768]) | -0.006 | 0.164 |\n", + "| transformer.resblocks.11.mlp.c_proj.weight | torch.Size([768, 3072]) | -0 | 0.014 |\n", + "| transformer.resblocks.2.attn.in_proj_bias | torch.Size([2304]) | -0.005 | 0.458 |\n", + "| transformer.resblocks.2.attn.in_proj_weight | torch.Size([2304, 768]) | 0 | 0.017 |\n", + "| transformer.resblocks.2.attn.out_proj.bias | torch.Size([768]) | -0.006 | 0.091 |\n", + "| transformer.resblocks.2.attn.out_proj.weight | torch.Size([768, 768]) | -0 | 0.012 |\n", + "| transformer.resblocks.2.ln_1.bias | torch.Size([768]) | -0.005 | 0.194 |\n", + "| transformer.resblocks.2.ln_1.weight | torch.Size([768]) | 0.922 | 0.189 |\n", + "| transformer.resblocks.2.ln_2.bias | torch.Size([768]) | 0.008 | 0.146 |\n", + "| transformer.resblocks.2.ln_2.weight | torch.Size([768]) | 1.21 | 0.157 |\n", + "| transformer.resblocks.2.mlp.c_fc.bias | torch.Size([3072]) | -0.331 | 0.162 |\n", + "| transformer.resblocks.2.mlp.c_fc.weight | torch.Size([3072, 768]) | -0 | 0.014 |\n", + "| transformer.resblocks.2.mlp.c_proj.bias | torch.Size([768]) | -0 | 0.071 |\n", + "| transformer.resblocks.2.mlp.c_proj.weight | torch.Size([768, 3072]) | 0 | 0.011 |\n", + "| transformer.resblocks.3.attn.in_proj_bias | torch.Size([2304]) | -0 | 0.405 |\n", + "| transformer.resblocks.3.attn.in_proj_weight | torch.Size([2304, 768]) | 0 | 0.017 |\n", + "| transformer.resblocks.3.attn.out_proj.bias | torch.Size([768]) | -0.001 | 0.06 |\n", + "| transformer.resblocks.3.attn.out_proj.weight | torch.Size([768, 768]) | 0 | 0.012 |\n", + "| transformer.resblocks.3.ln_1.bias | torch.Size([768]) | -0.009 | 0.192 |\n", + "| transformer.resblocks.3.ln_1.weight | torch.Size([768]) | 1.186 | 0.132 |\n", + "| transformer.resblocks.3.ln_2.bias | torch.Size([768]) | 0.01 | 0.145 |\n", + "| transformer.resblocks.3.ln_2.weight | torch.Size([768]) | 1.333 | 0.134 |\n", + "| transformer.resblocks.3.mlp.c_fc.bias | torch.Size([3072]) | -0.309 | 0.178 |\n", + "| transformer.resblocks.3.mlp.c_fc.weight | torch.Size([3072, 768]) | -0 | 0.014 |\n", + "| transformer.resblocks.3.mlp.c_proj.bias | torch.Size([768]) | 0.001 | 0.055 |\n", + "| transformer.resblocks.3.mlp.c_proj.weight | torch.Size([768, 3072]) | 0 | 0.01 |\n", + "| transformer.resblocks.4.attn.in_proj_bias | torch.Size([2304]) | -0.008 | 0.322 |\n", + "| transformer.resblocks.4.attn.in_proj_weight | torch.Size([2304, 768]) | 0 | 0.016 |\n", + "| transformer.resblocks.4.attn.out_proj.bias | torch.Size([768]) | -0 | 0.057 |\n", + "| transformer.resblocks.4.attn.out_proj.weight | torch.Size([768, 768]) | 0 | 0.012 |\n", + "| transformer.resblocks.4.ln_1.bias | torch.Size([768]) | 0.002 | 0.255 |\n", + "| transformer.resblocks.4.ln_1.weight | torch.Size([768]) | 1.29 | 0.122 |\n", + "| transformer.resblocks.4.ln_2.bias | torch.Size([768]) | -0.008 | 0.212 |\n", + "| transformer.resblocks.4.ln_2.weight | torch.Size([768]) | 1.444 | 0.105 |\n", + "| transformer.resblocks.4.mlp.c_fc.bias | torch.Size([3072]) | -0.316 | 0.177 |\n", + "| transformer.resblocks.4.mlp.c_fc.weight | torch.Size([3072, 768]) | -0 | 0.014 |\n", + "| transformer.resblocks.4.mlp.c_proj.bias | torch.Size([768]) | 0.001 | 0.057 |\n", + "| transformer.resblocks.4.mlp.c_proj.weight | torch.Size([768, 3072]) | -0 | 0.011 |\n", + "| transformer.resblocks.5.attn.in_proj_bias | torch.Size([2304]) | 0.005 | 0.316 |\n", + "| transformer.resblocks.5.attn.in_proj_weight | torch.Size([2304, 768]) | 0 | 0.016 |\n", + "| transformer.resblocks.5.attn.out_proj.bias | torch.Size([768]) | 0 | 0.069 |\n", + "| transformer.resblocks.5.attn.out_proj.weight | torch.Size([768, 768]) | 0 | 0.012 |\n", + "| transformer.resblocks.5.ln_1.bias | torch.Size([768]) | 0.002 | 0.22 |\n", + "| transformer.resblocks.5.ln_1.weight | torch.Size([768]) | 1.286 | 0.146 |\n", + "| transformer.resblocks.5.ln_2.bias | torch.Size([768]) | -0.052 | 0.306 |\n", + "| transformer.resblocks.5.ln_2.weight | torch.Size([768]) | 1.492 | 0.112 |\n", + "| transformer.resblocks.5.mlp.c_fc.bias | torch.Size([3072]) | -0.331 | 0.181 |\n", + "| transformer.resblocks.5.mlp.c_fc.weight | torch.Size([3072, 768]) | 0 | 0.014 |\n", + "| transformer.resblocks.5.mlp.c_proj.bias | torch.Size([768]) | 0 | 0.053 |\n", + "| transformer.resblocks.5.mlp.c_proj.weight | torch.Size([768, 3072]) | -0 | 0.011 |\n", + "| transformer.resblocks.6.attn.in_proj_bias | torch.Size([2304]) | -0.006 | 0.303 |\n", + "| transformer.resblocks.6.attn.in_proj_weight | torch.Size([2304, 768]) | 0 | 0.016 |\n", + "| transformer.resblocks.6.attn.out_proj.bias | torch.Size([768]) | 0.001 | 0.085 |\n", + "| transformer.resblocks.6.attn.out_proj.weight | torch.Size([768, 768]) | 0 | 0.012 |\n", + "| transformer.resblocks.6.ln_1.bias | torch.Size([768]) | 0.006 | 0.21 |\n", + "| transformer.resblocks.6.ln_1.weight | torch.Size([768]) | 1.369 | 0.117 |\n", + "| transformer.resblocks.6.ln_2.bias | torch.Size([768]) | -0.051 | 0.462 |\n", + "| transformer.resblocks.6.ln_2.weight | torch.Size([768]) | 1.649 | 0.141 |\n", + "| transformer.resblocks.6.mlp.c_fc.bias | torch.Size([3072]) | -0.359 | 0.192 |\n", + "| transformer.resblocks.6.mlp.c_fc.weight | torch.Size([3072, 768]) | 0 | 0.015 |\n", + "| transformer.resblocks.6.mlp.c_proj.bias | torch.Size([768]) | -0 | 0.062 |\n", + "| transformer.resblocks.6.mlp.c_proj.weight | torch.Size([768, 3072]) | 0 | 0.012 |\n", + "| transformer.resblocks.7.attn.in_proj_bias | torch.Size([2304]) | 0.015 | 0.308 |\n", + "| transformer.resblocks.7.attn.in_proj_weight | torch.Size([2304, 768]) | 0 | 0.016 |\n", + "| transformer.resblocks.7.attn.out_proj.bias | torch.Size([768]) | 0 | 0.113 |\n", + "| transformer.resblocks.7.attn.out_proj.weight | torch.Size([768, 768]) | 0 | 0.012 |\n", + "| transformer.resblocks.7.ln_1.bias | torch.Size([768]) | 0.016 | 0.16 |\n", + "| transformer.resblocks.7.ln_1.weight | torch.Size([768]) | 1.471 | 0.105 |\n", + "| transformer.resblocks.7.ln_2.bias | torch.Size([768]) | -0.095 | 0.464 |\n", + "| transformer.resblocks.7.ln_2.weight | torch.Size([768]) | 1.945 | 0.172 |\n", + "| transformer.resblocks.7.mlp.c_fc.bias | torch.Size([3072]) | -0.368 | 0.188 |\n", + "| transformer.resblocks.7.mlp.c_fc.weight | torch.Size([3072, 768]) | 0 | 0.015 |\n", + "| transformer.resblocks.7.mlp.c_proj.bias | torch.Size([768]) | -0 | 0.087 |\n", + "| transformer.resblocks.7.mlp.c_proj.weight | torch.Size([768, 3072]) | 0 | 0.013 |\n", + "| transformer.resblocks.8.attn.in_proj_bias | torch.Size([2304]) | 0.009 | 0.334 |\n", + "| transformer.resblocks.8.attn.in_proj_weight | torch.Size([2304, 768]) | 0 | 0.016 |\n", + "| transformer.resblocks.8.attn.out_proj.bias | torch.Size([768]) | 0 | 0.046 |\n", + "| transformer.resblocks.8.attn.out_proj.weight | torch.Size([768, 768]) | 0 | 0.013 |\n", + "| transformer.resblocks.8.ln_1.bias | torch.Size([768]) | 0.021 | 0.163 |\n", + "| transformer.resblocks.8.ln_1.weight | torch.Size([768]) | 1.598 | 0.115 |\n", + "| transformer.resblocks.8.ln_2.bias | torch.Size([768]) | -0.038 | 0.509 |\n", + "| transformer.resblocks.8.ln_2.weight | torch.Size([768]) | 2.693 | 0.259 |\n", + "| transformer.resblocks.8.mlp.c_fc.bias | torch.Size([3072]) | -0.379 | 0.216 |\n", + "| transformer.resblocks.8.mlp.c_fc.weight | torch.Size([3072, 768]) | -0 | 0.014 |\n", + "| transformer.resblocks.8.mlp.c_proj.bias | torch.Size([768]) | 0 | 0.125 |\n", + "| transformer.resblocks.8.mlp.c_proj.weight | torch.Size([768, 3072]) | 0 | 0.014 |\n", + "| transformer.resblocks.9.attn.in_proj_bias | torch.Size([2304]) | 0.011 | 0.331 |\n", + "| transformer.resblocks.9.attn.in_proj_weight | torch.Size([2304, 768]) | 0 | 0.016 |\n", + "| transformer.resblocks.9.attn.out_proj.bias | torch.Size([768]) | 0.002 | 0.106 |\n", + "| transformer.resblocks.9.attn.out_proj.weight | torch.Size([768, 768]) | -0 | 0.014 |\n", + "| transformer.resblocks.9.ln_1.bias | torch.Size([768]) | 0.031 | 0.159 |\n", + "| transformer.resblocks.9.ln_1.weight | torch.Size([768]) | 1.801 | 0.114 |\n", + "| transformer.resblocks.9.ln_2.bias | torch.Size([768]) | 0.057 | 0.665 |\n", + "| transformer.resblocks.9.ln_2.weight | torch.Size([768]) | 4.431 | 0.438 |\n", + "| transformer.resblocks.9.mlp.c_fc.bias | torch.Size([3072]) | -0.382 | 0.241 |\n", + "| transformer.resblocks.9.mlp.c_fc.weight | torch.Size([3072, 768]) | -0 | 0.014 |\n", + "| transformer.resblocks.9.mlp.c_proj.bias | torch.Size([768]) | 0.001 | 0.113 |\n", + "| transformer.resblocks.9.mlp.c_proj.weight | torch.Size([768, 3072]) | -0 | 0.015 |\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "#@title Map layer names\n", + "\n", + "def dfs(k, v, converted_torch_weight):\n", + " \"\"\"Recursively match weights.\"\"\"\n", + " if isinstance(v, jnp.ndarray):\n", + " if k in converted_torch_weight:\n", + " torch_data = converted_torch_weight[k]\n", + " if len(v.shape) == 2 and 'embedding' not in k and 'rel_pos' not in k:\n", + " torch_data = np.transpose(torch_data, (1, 0))\n", + " if len(v.shape) == 4:\n", + " if 'fpn_stride_16_8' in k:\n", + " torch_data = np.transpose(torch_data, (2, 3, 0, 1))\n", + " else:\n", + " torch_data = np.transpose(torch_data, (2, 3, 1, 0))\n", + " if torch_data.shape != v.shape:\n", + " print('Wrong shape! {} {} {}'.format(\n", + " k, torch_data.shape, v.shape))\n", + " else:\n", + " print(f'{k} not in checkpoint')\n", + " torch_data = v\n", + " return [(k, torch_data.shape)], torch_data\n", + " lst, tree = [], {}\n", + " for kk, vv in v.items():\n", + " if isinstance(vv, jnp.ndarray) and (\n", + " kk == 'kernel' or kk == 'scale' or kk == 'embedding'):\n", + " if 'proposal_generator.scales' not in k:\n", + " new_kk = 'weight'\n", + " else:\n", + " new_kk = kk\n", + " else:\n", + " new_kk = kk\n", + " sub_lst, sub_tree = dfs(\n", + " '{}.{}'.format(k, new_kk) if k else new_kk,\n", + " vv,\n", + " converted_torch_weight)\n", + " lst.extend(sub_lst)\n", + " tree[kk] = sub_tree\n", + " return lst, tree\n", + "\n", + "COMMEN_NAME_MAP = [\n", + " ('transformer.', ''),\n", + " ('resblocks', 'blocks'),\n", + " ('in_proj_bias', 'qkv.bias'),\n", + " ('in_proj_weight', 'qkv.weight'),\n", + " ('out_proj', 'proj'),\n", + " ('ln_1', 'norm1'),\n", + " ('ln_2', 'norm2'),\n", + " ('c_fc', 'fc1'),\n", + " ('c_proj', 'fc2'),\n", + " ('conv1', 'patch_embed.proj'),\n", + " ('positional_embedding', 'pos_embed'),\n", + "]\n", + "\n", + "def map_names(state_dict, name_map):\n", + " \"\"\"Change names according to a pre-defined map.\"\"\"\n", + " ret = {}\n", + " for k, v in state_dict.items():\n", + " new_k = k\n", + " for ori_name, new_name in name_map:\n", + " new_k = new_k.replace(ori_name, new_name)\n", + " ret[new_k] = v\n", + " return ret\n", + "\n", + "converted_torch_weight = map_names(torch_weights, COMMEN_NAME_MAP)\n", + "remove_keys = ['class_embedding', 'ln_post.bias', 'ln_post.weight', 'proj']\n", + "for k in remove_keys:\n", + " del converted_torch_weight[k]\n", + "converted_torch_weight['pos_embed'] = converted_torch_weight['pos_embed'][None]\n", + "converted_torch_weight = {k: v.numpy() for k, v in converted_torch_weight.items()}\n", + "# for k, v in converted_torch_weight.items():\n", + "# print(k, v.shape)" + ], + "metadata": { + "id": "Lovw3WQKIOjC", + "cellView": "form" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#@title JAX ViT implementation\n", + "\"\"\"ViTDet with simple FPN.\"\"\"\n", + "\n", + "import functools\n", + "from typing import Any, Optional\n", + "\n", + "import flax.linen as nn\n", + "import jax\n", + "import jax.numpy as jnp\n", + "import ml_collections\n", + "\n", + "KERNEL_INIT = {\n", + " 'normal': nn.initializers.normal(stddev=0.02),\n", + "}\n", + "\n", + "__all__ = ['ViT', 'SimpleFeaturePyramid']\n", + "\n", + "\n", + "class Attention(nn.Module):\n", + " \"\"\"Multi-head Attention block with relative position embeddings.\n", + "\n", + " Attributes:\n", + " dim (int): Number of input channels.\n", + " num_heads (int): Number of attention heads.\n", + " qkv_bias (bool: If True, add a learnable bias to query, key, value.\n", + " use_rel_pos (bool): If True, add relative positional embeddings to the\n", + " attention map.\n", + " rel_pos_zero_init (bool): If True, zero initialize relative positional\n", + " parameters.\n", + " input_size (int or None): Input resolution for calculating the relative\n", + " positional parameter size.\n", + " \"\"\"\n", + " dim: int\n", + " num_heads: int = 8\n", + " qkv_bias: bool = True\n", + " use_rel_pos: bool = False\n", + " rel_pos_zero_init: bool = True\n", + " input_size: Optional[Any] = None\n", + " kernel_init: str = 'normal'\n", + " dtype: jnp.dtype = jnp.float32\n", + "\n", + " def get_rel_pos(self, q_size, k_size, rel_pos):\n", + " \"\"\"Get relative positional embeddings.\n", + "\n", + " Args:\n", + " q_size (int): size of query q.\n", + " k_size (int): size of key k.\n", + " rel_pos (Tensor): relative position embeddings (L, C).\n", + " Returns:\n", + " Extracted positional embeddings according to relative positions.\n", + " \"\"\"\n", + " max_rel_dist = int(2 * max(q_size, k_size) - 1)\n", + " # Interpolate rel pos if needed.\n", + " if rel_pos.shape[0] != max_rel_dist:\n", + " # Interpolate rel pos.\n", + " rel_pos_resized = jax.image.resize(\n", + " rel_pos,\n", + " shape=(max_rel_dist, rel_pos.shape[1]),\n", + " method='linear',\n", + " )\n", + " else:\n", + " rel_pos_resized = rel_pos\n", + "\n", + " # Scale the coords with short length if shapes for q and k are different.\n", + " q_coords = jnp.arange(q_size)[:, None] * max(k_size / q_size, 1.0)\n", + " k_coords = jnp.arange(k_size)[None, :] * max(q_size / k_size, 1.0)\n", + " relative_coords = (q_coords - k_coords) + (k_size - 1) * max(\n", + " q_size / k_size, 1.0)\n", + " relative_coords = relative_coords.astype(jnp.int32).reshape(-1)\n", + " return rel_pos_resized[relative_coords].reshape(q_size, k_size, -1)\n", + "\n", + " def add_decomposed_rel_pos(\n", + " self, attn, q, rel_pos_h, rel_pos_w, q_size, k_size):\n", + " \"\"\"Calculate decomposed Relative Positional Embeddings from paper:`mvitv2`.\n", + "\n", + " Args:\n", + " attn (Tensor): attention map.\n", + " q (Tensor): query q in the attention layer with shape (B, q_h * q_w, C).\n", + " rel_pos_h (Tensor): relative position embeddings (Lh, C) for height axis.\n", + " rel_pos_w (Tensor): relative position embeddings (Lw, C) for width axis.\n", + " q_size (Tuple): spatial sequence size of query q with (q_h, q_w).\n", + " k_size (Tuple): spatial sequence size of key k with (k_h, k_w).\n", + " Returns:\n", + " attn (Tensor): attention map with added relative positional embeddings.\n", + " \"\"\"\n", + " q_h, q_w = q_size\n", + " k_h, k_w = k_size\n", + " rh = self.get_rel_pos(q_h, k_h, rel_pos_h)\n", + " rw = self.get_rel_pos(q_w, k_w, rel_pos_w)\n", + "\n", + " batch, _, dim = q.shape\n", + " r_q = q.reshape(batch, q_h, q_w, dim)\n", + " rel_h = jnp.einsum('bhwc,hkc->bhwk', r_q, rh)\n", + " rel_w = jnp.einsum('bhwc,wkc->bhwk', r_q, rw)\n", + "\n", + " attn = (\n", + " attn.reshape(batch, q_h, q_w, k_h, k_w) + rel_h[\n", + " :, :, :, :, None] + rel_w[:, :, :, None, :]\n", + " ).reshape(batch, q_h * q_w, k_h * k_w)\n", + "\n", + " return attn\n", + "\n", + " @nn.compact\n", + " def __call__(self, x):\n", + " batch, height, width, _ = x.shape\n", + " head_dim = self.dim // self.num_heads\n", + " qkv = nn.Dense(self.dim * 3, use_bias=self.qkv_bias, name='qkv')(\n", + " x) # batch x height x width x 3dim\n", + " qkv = qkv.reshape(batch, height * width, 3, self.num_heads, -1).transpose(\n", + " 2, 0, 3, 1, 4) # 3 x batch x num_heads x num_tokens x D\n", + " qkv = qkv.reshape(3, batch * self.num_heads, height * width, -1)\n", + " q, k, v = qkv[0], qkv[1], qkv[2] # [batch * num_heads, num_tokens, D]\n", + " attn = (q * (head_dim ** -0.5)) @ k.transpose(\n", + " 0, 2, 1) # [batch * num_heads, num_tokens, num_tokens]\n", + " if self.use_rel_pos:\n", + " rel_pos_h = self.param(\n", + " 'rel_pos_h', nn.initializers.zeros,\n", + " (2 * self.input_size[0] - 1, head_dim))\n", + " rel_pos_w = self.param(\n", + " 'rel_pos_w', nn.initializers.zeros,\n", + " (2 * self.input_size[0] - 1, head_dim))\n", + " attn = self.add_decomposed_rel_pos(\n", + " attn, q, rel_pos_h, rel_pos_w,\n", + " (height, width), (height, width))\n", + " attn = jax.nn.softmax(attn)\n", + " x = (attn @ v).reshape(batch, self.num_heads, height, width, -1).transpose(\n", + " 0, 2, 3, 1, 4).reshape(batch, height, width, -1)\n", + " x = nn.Dense(self.dim, name='proj')(x)\n", + " return x\n", + "\n", + "def quick_gelu(x: jnp.ndarray) -> jnp.ndarray:\n", + " return x * jax.nn.sigmoid(1.702 * x)\n", + "\n", + "\n", + "class Mlp(nn.Module):\n", + " \"\"\"Multilayer perceptron.\"\"\"\n", + "\n", + " hidden_features: int\n", + " out_features: int\n", + " kernel_init: str = 'normal'\n", + " dtype: jnp.dtype = jnp.float32\n", + "\n", + " @nn.compact\n", + " def __call__(self, x):\n", + " x = nn.Dense(\n", + " self.hidden_features, dtype=self.dtype,\n", + " kernel_init=KERNEL_INIT[self.kernel_init], name='fc1')(x)\n", + " # x = nn.gelu(x, approximate=False)\n", + " x = quick_gelu(x)\n", + " x = nn.Dense(\n", + " self.out_features, dtype=self.dtype,\n", + " kernel_init=KERNEL_INIT[self.kernel_init], name='fc2')(x)\n", + " return x\n", + "\n", + "\n", + "class Block(nn.Module):\n", + " \"\"\"Transformer blocks with support of window attention and residual blocks.\n", + "\n", + " Attributes:\n", + " dim (int): Number of input channels.\n", + " num_heads (int): Number of attention heads in each ViT block.\n", + " mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.\n", + " qkv_bias (bool): If True, add a learnable bias to query, key, value.\n", + " drop_path (float): Stochastic depth rate.\n", + " use_rel_pos (bool): If True, add relative positional embeddings to the\n", + " attention map.\n", + " rel_pos_zero_init (bool): If True, zero initialize relative positional\n", + " parameters.\n", + " window_size (int): Window size for window attention blocks. If it equals 0,\n", + " then not use window attention.\n", + " input_size (int or None): Input resolution for calculating the relative\n", + " positional parameter size.\n", + " \"\"\"\n", + " dim: int\n", + " num_heads: int\n", + " mlp_ratio: float = 4.0\n", + " qkv_bias: bool = True\n", + " drop_path: float = 0.0\n", + " use_rel_pos: bool = False\n", + " rel_pos_zero_init: bool = True\n", + " window_size: int = 0\n", + " input_size: Optional[int] = None\n", + " layer_scale_init_value: float = -1.0\n", + " kernel_init: str = 'normal'\n", + " dtype: jnp.dtype = jnp.float32\n", + "\n", + " def window_partition(self, x):\n", + " \"\"\"Partition into non-overlapping windows with padding if needed.\n", + "\n", + " Args:\n", + " x (array): input tokens with [B, H, W, C].\n", + " Returns:\n", + " windows: windows after partition with [B * num_windows, window_size,\n", + " window_size, C].\n", + " (Hp, Wp): padded height and width before partition\n", + " \"\"\"\n", + " batch, h, w, c = x.shape\n", + "\n", + " pad_h = (self.window_size - h % self.window_size) % self.window_size\n", + " pad_w = (self.window_size - w % self.window_size) % self.window_size\n", + " if pad_h > 0 or pad_w > 0:\n", + " x = jnp.pad(\n", + " x, ((0, 0), (0, pad_w), (0, pad_h), (0, 0)),\n", + " 'constant', constant_values=0)\n", + " hp, wp = h + pad_h, w + pad_w\n", + "\n", + " x = x.reshape(\n", + " batch, hp // self.window_size, self.window_size,\n", + " wp // self.window_size, self.window_size, c)\n", + " windows = x.transpose(0, 1, 3, 2, 4, 5).reshape(\n", + " -1, self.window_size, self.window_size, c)\n", + " return windows, (hp, wp)\n", + "\n", + " def window_unpartition(self, windows, pad_hw, hw):\n", + " \"\"\"Window unpartition into original sequences and removing padding.\n", + "\n", + " Args:\n", + " windows (array): inputs: [B * num_windows, window_size, window_size, C].\n", + " pad_hw (Tuple): padded height and width (Hp, Wp).\n", + " hw (Tuple): original height and width (H, W) before padding.\n", + "\n", + " Returns:\n", + " x: unpartitioned sequences with [B, H, W, C].\n", + " \"\"\"\n", + " hp, wp = pad_hw\n", + " h, w = hw\n", + " batch = windows.shape[0] // (\n", + " hp * wp // self.window_size // self.window_size)\n", + " x = windows.reshape(\n", + " batch,\n", + " hp // self.window_size, wp // self.window_size,\n", + " self.window_size, self.window_size, -1)\n", + " x = x.transpose(0, 1, 3, 2, 4, 5).reshape(batch, hp, wp, -1)\n", + " if hp > h or wp > w:\n", + " x = x[:, :h, :w, :]\n", + " return x\n", + "\n", + " def get_keep_pattern(self,\n", + " x: jnp.ndarray,\n", + " deterministic: bool) -> jnp.ndarray:\n", + " \"\"\"DropPath Layer.\"\"\"\n", + " if not deterministic and self.drop_path:\n", + " shape = (x.shape[0],) + (1,) * (x.ndim - 1)\n", + " drop_pattern = jax.random.bernoulli(\n", + " self.make_rng('dropout'), self.drop_path, shape).astype(self.dtype)\n", + " keep_pattern = (1. - drop_pattern)\n", + " if self.drop_path < 1.:\n", + " keep_pattern = keep_pattern / (1. - self.drop_path)\n", + " return keep_pattern\n", + " else:\n", + " return 1.0\n", + "\n", + " @nn.compact\n", + " def __call__(self, x, train = False):\n", + " shortcut = x\n", + " ln = functools.partial(nn.LayerNorm, epsilon=1e-6)\n", + " x = ln(name='norm1')(x)\n", + " # Window partition\n", + " if self.window_size > 0:\n", + " h, w = x.shape[1], x.shape[2]\n", + " x, pad_hw = self.window_partition(x)\n", + "\n", + " x = Attention(\n", + " self.dim,\n", + " num_heads=self.num_heads,\n", + " qkv_bias=self.qkv_bias,\n", + " use_rel_pos=self.use_rel_pos,\n", + " rel_pos_zero_init=self.rel_pos_zero_init,\n", + " input_size=self.input_size if self.window_size == 0 else (\n", + " self.window_size, self.window_size),\n", + " name='attn')(x)\n", + " # Reverse window partition\n", + " if self.window_size > 0:\n", + " x = self.window_unpartition(x, pad_hw, (h, w))\n", + "\n", + " if self.layer_scale_init_value > 0:\n", + " gamma_1 = self.param(\n", + " 'gamma_1',\n", + " nn.initializers.constant(self.layer_scale_init_value),\n", + " (self.dim))\n", + " x = x * gamma_1[..., :]\n", + " x = shortcut + self.get_keep_pattern(x, not train) * x\n", + "\n", + " y = ln(name='norm2')(x)\n", + " y = Mlp(\n", + " int(self.dim * self.mlp_ratio),\n", + " self.dim,\n", + " kernel_init=self.kernel_init,\n", + " dtype=self.dtype,\n", + " name='mlp')(y)\n", + " if self.layer_scale_init_value > 0:\n", + " gamma_2 = self.param(\n", + " 'gamma_2',\n", + " nn.initializers.constant(self.layer_scale_init_value),\n", + " (self.dim))\n", + " y = y * gamma_2[..., :]\n", + " x = x + self.get_keep_pattern(y, not train) * y\n", + " return x\n", + "\n", + "\n", + "class ViT(nn.Module):\n", + " \"\"\"This module implements Vision Transformer (ViT) backbone in paper:`vitdet`.\n", + "\n", + " \"Exploring Plain Vision Transformer Backbones for Object Detection\",\n", + " https://arxiv.org/abs/2203.16527\n", + "\n", + " Attributes:\n", + " img_size (int): Input image size.\n", + " patch_size (int): Patch size.\n", + " in_chans (int): Number of input image channels.\n", + " embed_dim (int): Patch embedding dimension.\n", + " depth (int): Depth of ViT.\n", + " num_heads (int): Number of attention heads in each ViT block.\n", + " mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.\n", + " qkv_bias (bool): If True, add a learnable bias to query, key, value.\n", + " drop_path_rate (float): Stochastic depth rate.\n", + " use_abs_pos (bool): If True, use absolute positional embeddings.\n", + " use_rel_pos (bool): If True, add relative positional embeddings to the\n", + " attention map.\n", + " rel_pos_zero_init (bool): If True, zero initialize relative positional\n", + " parameters.\n", + " window_size (int): Window size for window attention blocks.\n", + " window_block_indexes (list): Indexes for blocks using window attention.\n", + " pretrain_img_size (int): input image size for pretraining models.\n", + " pretrain_use_cls_token (bool): If True, pretrainig models use class token.\n", + " \"\"\"\n", + " img_size: int = 1024\n", + " patch_size: int = 16\n", + " in_chans: int = 3\n", + " embed_dim: int = 768\n", + " depth: int = 12\n", + " num_heads: int = 12\n", + " mlp_ratio: float = 4.0\n", + " qkv_bias: bool = True\n", + " drop_path_rate: float = 0.1\n", + " use_abs_pos: bool = True\n", + " use_rel_pos: bool = True\n", + " rel_pos_zero_init: bool = True\n", + " window_size: int = 14\n", + " window_block_indexes: Any = (0, 1, 3, 4, 6, 7, 9, 10)\n", + " pretrain_img_size: int = 224\n", + " pretrain_use_cls_token: bool = True\n", + " layer_scale_init_value: float = -1.0\n", + " kernel_init: str = 'normal'\n", + " with_cls_token: bool = False\n", + " use_ln_pre: bool = False\n", + " dtype: jnp.dtype = jnp.float32\n", + "\n", + " def _get_abs_pos(self, abs_pos, hw):\n", + " \"\"\"Calculate absolute positional embeddings.\n", + "\n", + " If needed, resize embeddings and remove cls_token dimension for the original\n", + " embeddings.\n", + " Args:\n", + " abs_pos (array): absolute positional embeddings with (1, num_position, C).\n", + " hw (Tuple): size of input image tokens.\n", + " Returns:\n", + " Absolute positional embeddings after processing with shape (1, H, W, C)\n", + " \"\"\"\n", + " h, w = hw\n", + " if self.pretrain_use_cls_token:\n", + " abs_pos = abs_pos[:, 1:]\n", + " xy_num = abs_pos.shape[1]\n", + " size = int(xy_num ** 0.5)\n", + " assert size * size == xy_num\n", + " abs_pos = abs_pos.reshape(abs_pos.shape[0], size, size, -1)\n", + " if size != h or size != w:\n", + " new_abs_pos = jax.image.resize(\n", + " abs_pos,\n", + " (abs_pos.shape[0], h, w, abs_pos.shape[3]),\n", + " method='bicubic',\n", + " )\n", + " else:\n", + " new_abs_pos = abs_pos\n", + " return new_abs_pos\n", + "\n", + " @nn.compact\n", + " def __call__(self, x: jnp.ndarray, train: bool = False):\n", + " print('input', x.shape)\n", + " x = nn.Conv(\n", + " self.embed_dim, (self.patch_size, self.patch_size),\n", + " strides=(self.patch_size, self.patch_size),\n", + " padding='VALID',\n", + " name='patch_embed.proj')(x)\n", + " print('after conv', x.shape, x[0, 0, 0, :10])\n", + " if self.use_abs_pos:\n", + " num_patches = (self.pretrain_img_size // self.patch_size) ** 2\n", + " num_positions = (\n", + " num_patches + 1) if self.pretrain_use_cls_token else num_patches\n", + " pos_embed = self.param(\n", + " 'pos_embed', nn.initializers.zeros,\n", + " (1, num_positions, self.embed_dim))\n", + " x = x + self._get_abs_pos(pos_embed, (x.shape[1], x.shape[2]))\n", + " print('after pos emb', x.shape, x[0, 0, 0, :10])\n", + " if self.with_cls_token:\n", + " cls_token = self.param(\n", + " 'cls_token', nn.initializers.zeros, (1, 1, self.embed_dim))\n", + " dp_rates = [\n", + " self.drop_path_rate * i / (self.depth - 1) for i in range(self.depth)]\n", + " if self.use_ln_pre:\n", + " x = nn.LayerNorm(name='ln_pre')(x)\n", + " print('after ln pre', x.shape, x[0, 0, 0, :10])\n", + " for i in range(self.depth):\n", + " x = Block(\n", + " dim=self.embed_dim,\n", + " num_heads=self.num_heads,\n", + " mlp_ratio=self.mlp_ratio,\n", + " qkv_bias=self.qkv_bias,\n", + " drop_path=dp_rates[i],\n", + " use_rel_pos=self.use_rel_pos,\n", + " rel_pos_zero_init=self.rel_pos_zero_init,\n", + " window_size=self.window_size if i in self.window_block_indexes else 0,\n", + " input_size=(\n", + " self.img_size // self.patch_size,\n", + " self.img_size // self.patch_size),\n", + " layer_scale_init_value=self.layer_scale_init_value,\n", + " name=f'blocks.{i}',\n", + " )(x, train=train)\n", + " print(f'after block {i}', x.shape, x[0, 0, 0, :10])\n", + " return x\n", + "\n", + "\n", + "SIZE_CONFIGS = {\n", + " 'B': (768, 12, 12, 0.1, (0, 1, 3, 4, 6, 7, 9, 10)),\n", + " 'L': (1024, 24, 16, 0.4, (\n", + " 0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22)),\n", + " 'H': (1280, 32, 16, 0.5, (\n", + " 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21,\n", + " 22, 24, 25, 26, 27, 28, 29, 30)),\n", + "}\n" + ], + "metadata": { + "id": "vQqESU6MILoT", + "cellView": "form" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#@title\n", + "import ml_collections\n", + "backbone_args = ml_collections.ConfigDict()\n", + "sz = 'B' # backbone_args.pop('size', 'B')\n", + "dim, depth, num_heads, dp, window_block_indexes = SIZE_CONFIGS[sz]\n", + "backbone_args['embed_dim'] = backbone_args.get(\n", + " 'embed_dim', dim)\n", + "backbone_args['depth'] = backbone_args.get('depth', depth)\n", + "backbone_args['num_heads'] = backbone_args.get(\n", + " 'num_heads', num_heads)\n", + "backbone_args['drop_path_rate'] = backbone_args.get(\n", + " 'drop_path_rate', dp)\n", + "backbone_args['window_block_indexes'] = backbone_args.get(\n", + " 'window_block_indexes', window_block_indexes)\n", + "backbone_args['use_rel_pos'] = True\n", + "backbone_args['use_ln_pre'] = True\n", + "vit_model = ViT(**backbone_args)\n", + "\n", + "rng = {'dropout': jax.random.PRNGKey(0), 'params': jax.random.PRNGKey(0)}\n", + "input = jax.random.normal(jax.random.PRNGKey(0), (1, 1024, 1024, 3))\n", + "vit_vars = vit_model.init(rng, input)" + ], + "metadata": { + "id": "CR7nggeHSBKx", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "4cb81388-ae68-447a-84e0-78166dad9b5d" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "input (1, 1024, 1024, 3)\n", + "after conv (1, 64, 64, 768) [ 0.47106028 1.3287854 0.83192176 -0.83944285 1.0247202 -0.48860377\n", + " -0.12125206 0.8328862 1.0072198 -0.8418225 ]\n", + "after pos emb (1, 64, 64, 768) [ 0.47106028 1.3287854 0.83192176 -0.83944285 1.0247202 -0.48860377\n", + " -0.12125206 0.8328862 1.0072198 -0.8418225 ]\n", + "after ln pre (1, 64, 64, 768) [ 0.43739814 1.274982 0.7897858 -0.84233147 0.97805685 -0.49973089\n", + " -0.1410054 0.7907276 0.9609675 -0.8446553 ]\n", + "after block 0 (1, 64, 64, 768) [ 0.9527342 1.6842506 1.1183987 -0.620758 1.0156078 -0.43444997\n", + " 0.40971595 0.77097815 1.5544728 -1.0375676 ]\n", + "after block 1 (1, 64, 64, 768) [ 0.9354738 1.1514326 1.3138807 -0.7885489 0.6950543 -0.48360264\n", + " -0.47691417 1.2413012 1.6396505 -0.9739183 ]\n", + "after block 2 (1, 64, 64, 768) [ 0.54650915 0.7949942 1.1095765 -0.34691972 0.42791653 -0.5394424\n", + " -0.71003187 1.6934314 1.8298969 -0.83660793]\n", + "after block 3 (1, 64, 64, 768) [ 0.40429586 0.07155712 0.8348436 -0.06377494 -0.03645796 0.24721247\n", + " -0.7760283 1.8129752 1.9634175 -1.528043 ]\n", + "after block 4 (1, 64, 64, 768) [ 0.8157657 0.75672746 1.0047448 -0.47795695 -0.69131 0.7423003\n", + " -1.9451964 2.0043 1.9063951 -2.893767 ]\n", + "after block 5 (1, 64, 64, 768) [ 0.9916612 1.1453046 0.5037965 -0.45060664 -0.27026373 0.37618995\n", + " -2.0273547 2.4010115 1.6583372 -2.2781038 ]\n", + "after block 6 (1, 64, 64, 768) [ 2.605226 0.87504095 0.3976016 -0.68965334 -0.12614334 -0.8499212\n", + " -1.5159993 3.1885996 1.333512 -1.5837252 ]\n", + "after block 7 (1, 64, 64, 768) [ 3.7126975 1.8546289 1.0695984 0.18318185 -1.2842928 -0.8293556\n", + " -1.4501106 3.8846254 1.3534719 -1.876102 ]\n", + "after block 8 (1, 64, 64, 768) [ 4.4966407 0.15326953 1.3065652 0.17217928 -1.8763049 0.23148686\n", + " -1.7842715 3.866251 0.7179457 -2.4412112 ]\n", + "after block 9 (1, 64, 64, 768) [ 4.938929 -0.18077338 2.8346472 0.6425916 -3.0323238 0.76069295\n", + " -1.1072111 4.440237 0.65689665 -4.698646 ]\n", + "after block 10 (1, 64, 64, 768) [ 5.62897 -0.08148676 3.078935 1.9535469 -3.6440432 2.1288352\n", + " -0.86140555 3.0621972 -0.1735726 -4.5019507 ]\n", + "after block 11 (1, 64, 64, 768) [ 4.354451 0.6402224 2.5300777 1.9537549 -3.751364 0.54613084\n", + " -1.0776676 2.833622 0.11561376 -3.6275783 ]\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "ret, tree = dfs('', vit_vars['params'], converted_torch_weight)\n", + "num_params = 0\n", + "for k, v in converted_torch_weight.items():\n", + " num_params += np.prod(v.shape)\n", + "print('#params in loaded model:', num_params)\n", + "num_params = 0\n", + "for k, v in ret:\n", + " if 'rel_pos' not in k:\n", + " num_params += np.prod(v)\n", + "print('#params in converted model:', num_params)\n", + "print('#params in converted model w.o proj bias:', num_params - 768)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XrgNQVbYSYzG", + "outputId": "aea64b0f-f8e5-4076-d761-1a652f754c77" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "patch_embed.proj.bias not in checkpoint\n", + "blocks.0.attn.rel_pos_h not in checkpoint\n", + "blocks.0.attn.rel_pos_w not in checkpoint\n", + "blocks.1.attn.rel_pos_h not in checkpoint\n", + "blocks.1.attn.rel_pos_w not in checkpoint\n", + "blocks.2.attn.rel_pos_h not in checkpoint\n", + "blocks.2.attn.rel_pos_w not in checkpoint\n", + "blocks.3.attn.rel_pos_h not in checkpoint\n", + "blocks.3.attn.rel_pos_w not in checkpoint\n", + "blocks.4.attn.rel_pos_h not in checkpoint\n", + "blocks.4.attn.rel_pos_w not in checkpoint\n", + "blocks.5.attn.rel_pos_h not in checkpoint\n", + "blocks.5.attn.rel_pos_w not in checkpoint\n", + "blocks.6.attn.rel_pos_h not in checkpoint\n", + "blocks.6.attn.rel_pos_w not in checkpoint\n", + "blocks.7.attn.rel_pos_h not in checkpoint\n", + "blocks.7.attn.rel_pos_w not in checkpoint\n", + "blocks.8.attn.rel_pos_h not in checkpoint\n", + "blocks.8.attn.rel_pos_w not in checkpoint\n", + "blocks.9.attn.rel_pos_h not in checkpoint\n", + "blocks.9.attn.rel_pos_w not in checkpoint\n", + "blocks.10.attn.rel_pos_h not in checkpoint\n", + "blocks.10.attn.rel_pos_w not in checkpoint\n", + "blocks.11.attn.rel_pos_h not in checkpoint\n", + "blocks.11.attn.rel_pos_w not in checkpoint\n", + "#params in loaded model: 85797120\n", + "#params in converted model: 85797888\n", + "#params in converted model w.o proj bias: 85797120\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "flattened_tree = flax.traverse_util.flatten_dict(tree)\n", + "table = []\n", + "for k in sorted(flattened_tree):\n", + " if 'rel_pos_h' in k or 'rel_pos_w' in k:\n", + " continue\n", + " v = flattened_tree[k]\n", + " table.append((k, f'{v.shape}', f'{v.mean():.3f}', f'{v.std():.3f}'))\n", + "table_str = tabulate(\n", + " table, tablefmt=\"pipe\", headers=[\"Names\", \"shape\", \"mean\", \"std\"])\n", + "print(table_str)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dHeZV8xs57eA", + "outputId": "4fcd65fa-1053-4fc4-9736-25d8119e10b9" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "| Names | shape | mean | std |\n", + "|:----------------------------------------|:-----------------------------|-------:|------:|\n", + "| ('blocks.0', 'attn', 'proj', 'bias') | torch.Size([768]) | 0.001 | 0.043 |\n", + "| ('blocks.0', 'attn', 'proj', 'kernel') | torch.Size([768, 768]) | -0 | 0.011 |\n", + "| ('blocks.0', 'attn', 'qkv', 'bias') | torch.Size([2304]) | 0.008 | 0.538 |\n", + "| ('blocks.0', 'attn', 'qkv', 'kernel') | torch.Size([768, 2304]) | -0 | 0.014 |\n", + "| ('blocks.0', 'mlp', 'fc1', 'bias') | torch.Size([3072]) | -0.455 | 0.336 |\n", + "| ('blocks.0', 'mlp', 'fc1', 'kernel') | torch.Size([768, 3072]) | -0 | 0.015 |\n", + "| ('blocks.0', 'mlp', 'fc2', 'bias') | torch.Size([768]) | -0.004 | 0.074 |\n", + "| ('blocks.0', 'mlp', 'fc2', 'kernel') | torch.Size([3072, 768]) | 0 | 0.009 |\n", + "| ('blocks.0', 'norm1', 'bias') | torch.Size([768]) | -0.014 | 0.181 |\n", + "| ('blocks.0', 'norm1', 'scale') | torch.Size([768]) | 0.493 | 0.335 |\n", + "| ('blocks.0', 'norm2', 'bias') | torch.Size([768]) | 0.023 | 0.223 |\n", + "| ('blocks.0', 'norm2', 'scale') | torch.Size([768]) | 0.919 | 0.401 |\n", + "| ('blocks.1', 'attn', 'proj', 'bias') | torch.Size([768]) | -0.001 | 0.081 |\n", + "| ('blocks.1', 'attn', 'proj', 'kernel') | torch.Size([768, 768]) | 0 | 0.011 |\n", + "| ('blocks.1', 'attn', 'qkv', 'bias') | torch.Size([2304]) | 0.005 | 0.474 |\n", + "| ('blocks.1', 'attn', 'qkv', 'kernel') | torch.Size([768, 2304]) | 0 | 0.018 |\n", + "| ('blocks.1', 'mlp', 'fc1', 'bias') | torch.Size([3072]) | -0.392 | 0.221 |\n", + "| ('blocks.1', 'mlp', 'fc1', 'kernel') | torch.Size([768, 3072]) | -0 | 0.014 |\n", + "| ('blocks.1', 'mlp', 'fc2', 'bias') | torch.Size([768]) | -0.005 | 0.102 |\n", + "| ('blocks.1', 'mlp', 'fc2', 'kernel') | torch.Size([3072, 768]) | -0 | 0.01 |\n", + "| ('blocks.1', 'norm1', 'bias') | torch.Size([768]) | 0.001 | 0.159 |\n", + "| ('blocks.1', 'norm1', 'scale') | torch.Size([768]) | 0.824 | 0.243 |\n", + "| ('blocks.1', 'norm2', 'bias') | torch.Size([768]) | 0.009 | 0.171 |\n", + "| ('blocks.1', 'norm2', 'scale') | torch.Size([768]) | 1.172 | 0.474 |\n", + "| ('blocks.10', 'attn', 'proj', 'bias') | torch.Size([768]) | 0 | 0.088 |\n", + "| ('blocks.10', 'attn', 'proj', 'kernel') | torch.Size([768, 768]) | -0 | 0.015 |\n", + "| ('blocks.10', 'attn', 'qkv', 'bias') | torch.Size([2304]) | 0.008 | 0.395 |\n", + "| ('blocks.10', 'attn', 'qkv', 'kernel') | torch.Size([768, 2304]) | -0 | 0.016 |\n", + "| ('blocks.10', 'mlp', 'fc1', 'bias') | torch.Size([3072]) | -0.4 | 0.178 |\n", + "| ('blocks.10', 'mlp', 'fc1', 'kernel') | torch.Size([768, 3072]) | 0 | 0.015 |\n", + "| ('blocks.10', 'mlp', 'fc2', 'bias') | torch.Size([768]) | -0.002 | 0.1 |\n", + "| ('blocks.10', 'mlp', 'fc2', 'kernel') | torch.Size([3072, 768]) | -0 | 0.017 |\n", + "| ('blocks.10', 'norm1', 'bias') | torch.Size([768]) | 0.049 | 0.21 |\n", + "| ('blocks.10', 'norm1', 'scale') | torch.Size([768]) | 2.018 | 0.146 |\n", + "| ('blocks.10', 'norm2', 'bias') | torch.Size([768]) | 0.011 | 0.587 |\n", + "| ('blocks.10', 'norm2', 'scale') | torch.Size([768]) | 4.746 | 0.409 |\n", + "| ('blocks.11', 'attn', 'proj', 'bias') | torch.Size([768]) | -0.003 | 0.302 |\n", + "| ('blocks.11', 'attn', 'proj', 'kernel') | torch.Size([768, 768]) | 0 | 0.018 |\n", + "| ('blocks.11', 'attn', 'qkv', 'bias') | torch.Size([2304]) | 0.002 | 0.179 |\n", + "| ('blocks.11', 'attn', 'qkv', 'kernel') | torch.Size([768, 2304]) | -0 | 0.015 |\n", + "| ('blocks.11', 'mlp', 'fc1', 'bias') | torch.Size([3072]) | -0.386 | 0.215 |\n", + "| ('blocks.11', 'mlp', 'fc1', 'kernel') | torch.Size([768, 3072]) | -0 | 0.014 |\n", + "| ('blocks.11', 'mlp', 'fc2', 'bias') | torch.Size([768]) | -0.006 | 0.164 |\n", + "| ('blocks.11', 'mlp', 'fc2', 'kernel') | torch.Size([3072, 768]) | -0 | 0.014 |\n", + "| ('blocks.11', 'norm1', 'bias') | torch.Size([768]) | 0.024 | 0.202 |\n", + "| ('blocks.11', 'norm1', 'scale') | torch.Size([768]) | 2.028 | 0.159 |\n", + "| ('blocks.11', 'norm2', 'bias') | torch.Size([768]) | 0.044 | 0.523 |\n", + "| ('blocks.11', 'norm2', 'scale') | torch.Size([768]) | 1.79 | 0.137 |\n", + "| ('blocks.2', 'attn', 'proj', 'bias') | torch.Size([768]) | -0.006 | 0.091 |\n", + "| ('blocks.2', 'attn', 'proj', 'kernel') | torch.Size([768, 768]) | -0 | 0.012 |\n", + "| ('blocks.2', 'attn', 'qkv', 'bias') | torch.Size([2304]) | -0.005 | 0.458 |\n", + "| ('blocks.2', 'attn', 'qkv', 'kernel') | torch.Size([768, 2304]) | 0 | 0.017 |\n", + "| ('blocks.2', 'mlp', 'fc1', 'bias') | torch.Size([3072]) | -0.331 | 0.162 |\n", + "| ('blocks.2', 'mlp', 'fc1', 'kernel') | torch.Size([768, 3072]) | -0 | 0.014 |\n", + "| ('blocks.2', 'mlp', 'fc2', 'bias') | torch.Size([768]) | -0 | 0.071 |\n", + "| ('blocks.2', 'mlp', 'fc2', 'kernel') | torch.Size([3072, 768]) | 0 | 0.011 |\n", + "| ('blocks.2', 'norm1', 'bias') | torch.Size([768]) | -0.005 | 0.194 |\n", + "| ('blocks.2', 'norm1', 'scale') | torch.Size([768]) | 0.922 | 0.189 |\n", + "| ('blocks.2', 'norm2', 'bias') | torch.Size([768]) | 0.008 | 0.146 |\n", + "| ('blocks.2', 'norm2', 'scale') | torch.Size([768]) | 1.21 | 0.157 |\n", + "| ('blocks.3', 'attn', 'proj', 'bias') | torch.Size([768]) | -0.001 | 0.06 |\n", + "| ('blocks.3', 'attn', 'proj', 'kernel') | torch.Size([768, 768]) | 0 | 0.012 |\n", + "| ('blocks.3', 'attn', 'qkv', 'bias') | torch.Size([2304]) | -0 | 0.405 |\n", + "| ('blocks.3', 'attn', 'qkv', 'kernel') | torch.Size([768, 2304]) | 0 | 0.017 |\n", + "| ('blocks.3', 'mlp', 'fc1', 'bias') | torch.Size([3072]) | -0.309 | 0.178 |\n", + "| ('blocks.3', 'mlp', 'fc1', 'kernel') | torch.Size([768, 3072]) | -0 | 0.014 |\n", + "| ('blocks.3', 'mlp', 'fc2', 'bias') | torch.Size([768]) | 0.001 | 0.055 |\n", + "| ('blocks.3', 'mlp', 'fc2', 'kernel') | torch.Size([3072, 768]) | 0 | 0.01 |\n", + "| ('blocks.3', 'norm1', 'bias') | torch.Size([768]) | -0.009 | 0.192 |\n", + "| ('blocks.3', 'norm1', 'scale') | torch.Size([768]) | 1.186 | 0.132 |\n", + "| ('blocks.3', 'norm2', 'bias') | torch.Size([768]) | 0.01 | 0.145 |\n", + "| ('blocks.3', 'norm2', 'scale') | torch.Size([768]) | 1.333 | 0.134 |\n", + "| ('blocks.4', 'attn', 'proj', 'bias') | torch.Size([768]) | -0 | 0.057 |\n", + "| ('blocks.4', 'attn', 'proj', 'kernel') | torch.Size([768, 768]) | 0 | 0.012 |\n", + "| ('blocks.4', 'attn', 'qkv', 'bias') | torch.Size([2304]) | -0.008 | 0.322 |\n", + "| ('blocks.4', 'attn', 'qkv', 'kernel') | torch.Size([768, 2304]) | 0 | 0.016 |\n", + "| ('blocks.4', 'mlp', 'fc1', 'bias') | torch.Size([3072]) | -0.316 | 0.177 |\n", + "| ('blocks.4', 'mlp', 'fc1', 'kernel') | torch.Size([768, 3072]) | -0 | 0.014 |\n", + "| ('blocks.4', 'mlp', 'fc2', 'bias') | torch.Size([768]) | 0.001 | 0.057 |\n", + "| ('blocks.4', 'mlp', 'fc2', 'kernel') | torch.Size([3072, 768]) | -0 | 0.011 |\n", + "| ('blocks.4', 'norm1', 'bias') | torch.Size([768]) | 0.002 | 0.255 |\n", + "| ('blocks.4', 'norm1', 'scale') | torch.Size([768]) | 1.29 | 0.122 |\n", + "| ('blocks.4', 'norm2', 'bias') | torch.Size([768]) | -0.008 | 0.212 |\n", + "| ('blocks.4', 'norm2', 'scale') | torch.Size([768]) | 1.444 | 0.105 |\n", + "| ('blocks.5', 'attn', 'proj', 'bias') | torch.Size([768]) | 0 | 0.069 |\n", + "| ('blocks.5', 'attn', 'proj', 'kernel') | torch.Size([768, 768]) | 0 | 0.012 |\n", + "| ('blocks.5', 'attn', 'qkv', 'bias') | torch.Size([2304]) | 0.005 | 0.316 |\n", + "| ('blocks.5', 'attn', 'qkv', 'kernel') | torch.Size([768, 2304]) | 0 | 0.016 |\n", + "| ('blocks.5', 'mlp', 'fc1', 'bias') | torch.Size([3072]) | -0.331 | 0.181 |\n", + "| ('blocks.5', 'mlp', 'fc1', 'kernel') | torch.Size([768, 3072]) | 0 | 0.014 |\n", + "| ('blocks.5', 'mlp', 'fc2', 'bias') | torch.Size([768]) | 0 | 0.053 |\n", + "| ('blocks.5', 'mlp', 'fc2', 'kernel') | torch.Size([3072, 768]) | -0 | 0.011 |\n", + "| ('blocks.5', 'norm1', 'bias') | torch.Size([768]) | 0.002 | 0.22 |\n", + "| ('blocks.5', 'norm1', 'scale') | torch.Size([768]) | 1.286 | 0.146 |\n", + "| ('blocks.5', 'norm2', 'bias') | torch.Size([768]) | -0.052 | 0.306 |\n", + "| ('blocks.5', 'norm2', 'scale') | torch.Size([768]) | 1.492 | 0.112 |\n", + "| ('blocks.6', 'attn', 'proj', 'bias') | torch.Size([768]) | 0.001 | 0.085 |\n", + "| ('blocks.6', 'attn', 'proj', 'kernel') | torch.Size([768, 768]) | 0 | 0.012 |\n", + "| ('blocks.6', 'attn', 'qkv', 'bias') | torch.Size([2304]) | -0.006 | 0.303 |\n", + "| ('blocks.6', 'attn', 'qkv', 'kernel') | torch.Size([768, 2304]) | 0 | 0.016 |\n", + "| ('blocks.6', 'mlp', 'fc1', 'bias') | torch.Size([3072]) | -0.359 | 0.192 |\n", + "| ('blocks.6', 'mlp', 'fc1', 'kernel') | torch.Size([768, 3072]) | 0 | 0.015 |\n", + "| ('blocks.6', 'mlp', 'fc2', 'bias') | torch.Size([768]) | -0 | 0.062 |\n", + "| ('blocks.6', 'mlp', 'fc2', 'kernel') | torch.Size([3072, 768]) | 0 | 0.012 |\n", + "| ('blocks.6', 'norm1', 'bias') | torch.Size([768]) | 0.006 | 0.21 |\n", + "| ('blocks.6', 'norm1', 'scale') | torch.Size([768]) | 1.369 | 0.117 |\n", + "| ('blocks.6', 'norm2', 'bias') | torch.Size([768]) | -0.051 | 0.462 |\n", + "| ('blocks.6', 'norm2', 'scale') | torch.Size([768]) | 1.649 | 0.141 |\n", + "| ('blocks.7', 'attn', 'proj', 'bias') | torch.Size([768]) | 0 | 0.113 |\n", + "| ('blocks.7', 'attn', 'proj', 'kernel') | torch.Size([768, 768]) | 0 | 0.012 |\n", + "| ('blocks.7', 'attn', 'qkv', 'bias') | torch.Size([2304]) | 0.015 | 0.308 |\n", + "| ('blocks.7', 'attn', 'qkv', 'kernel') | torch.Size([768, 2304]) | 0 | 0.016 |\n", + "| ('blocks.7', 'mlp', 'fc1', 'bias') | torch.Size([3072]) | -0.368 | 0.188 |\n", + "| ('blocks.7', 'mlp', 'fc1', 'kernel') | torch.Size([768, 3072]) | 0 | 0.015 |\n", + "| ('blocks.7', 'mlp', 'fc2', 'bias') | torch.Size([768]) | -0 | 0.087 |\n", + "| ('blocks.7', 'mlp', 'fc2', 'kernel') | torch.Size([3072, 768]) | 0 | 0.013 |\n", + "| ('blocks.7', 'norm1', 'bias') | torch.Size([768]) | 0.016 | 0.16 |\n", + "| ('blocks.7', 'norm1', 'scale') | torch.Size([768]) | 1.471 | 0.105 |\n", + "| ('blocks.7', 'norm2', 'bias') | torch.Size([768]) | -0.095 | 0.464 |\n", + "| ('blocks.7', 'norm2', 'scale') | torch.Size([768]) | 1.945 | 0.172 |\n", + "| ('blocks.8', 'attn', 'proj', 'bias') | torch.Size([768]) | 0 | 0.046 |\n", + "| ('blocks.8', 'attn', 'proj', 'kernel') | torch.Size([768, 768]) | 0 | 0.013 |\n", + "| ('blocks.8', 'attn', 'qkv', 'bias') | torch.Size([2304]) | 0.009 | 0.334 |\n", + "| ('blocks.8', 'attn', 'qkv', 'kernel') | torch.Size([768, 2304]) | 0 | 0.016 |\n", + "| ('blocks.8', 'mlp', 'fc1', 'bias') | torch.Size([3072]) | -0.379 | 0.216 |\n", + "| ('blocks.8', 'mlp', 'fc1', 'kernel') | torch.Size([768, 3072]) | -0 | 0.014 |\n", + "| ('blocks.8', 'mlp', 'fc2', 'bias') | torch.Size([768]) | 0 | 0.125 |\n", + "| ('blocks.8', 'mlp', 'fc2', 'kernel') | torch.Size([3072, 768]) | 0 | 0.014 |\n", + "| ('blocks.8', 'norm1', 'bias') | torch.Size([768]) | 0.021 | 0.163 |\n", + "| ('blocks.8', 'norm1', 'scale') | torch.Size([768]) | 1.598 | 0.115 |\n", + "| ('blocks.8', 'norm2', 'bias') | torch.Size([768]) | -0.038 | 0.509 |\n", + "| ('blocks.8', 'norm2', 'scale') | torch.Size([768]) | 2.693 | 0.259 |\n", + "| ('blocks.9', 'attn', 'proj', 'bias') | torch.Size([768]) | 0.002 | 0.106 |\n", + "| ('blocks.9', 'attn', 'proj', 'kernel') | torch.Size([768, 768]) | -0 | 0.014 |\n", + "| ('blocks.9', 'attn', 'qkv', 'bias') | torch.Size([2304]) | 0.011 | 0.331 |\n", + "| ('blocks.9', 'attn', 'qkv', 'kernel') | torch.Size([768, 2304]) | 0 | 0.016 |\n", + "| ('blocks.9', 'mlp', 'fc1', 'bias') | torch.Size([3072]) | -0.382 | 0.241 |\n", + "| ('blocks.9', 'mlp', 'fc1', 'kernel') | torch.Size([768, 3072]) | -0 | 0.014 |\n", + "| ('blocks.9', 'mlp', 'fc2', 'bias') | torch.Size([768]) | 0.001 | 0.113 |\n", + "| ('blocks.9', 'mlp', 'fc2', 'kernel') | torch.Size([3072, 768]) | -0 | 0.015 |\n", + "| ('blocks.9', 'norm1', 'bias') | torch.Size([768]) | 0.031 | 0.159 |\n", + "| ('blocks.9', 'norm1', 'scale') | torch.Size([768]) | 1.801 | 0.114 |\n", + "| ('blocks.9', 'norm2', 'bias') | torch.Size([768]) | 0.057 | 0.665 |\n", + "| ('blocks.9', 'norm2', 'scale') | torch.Size([768]) | 4.431 | 0.438 |\n", + "| ('ln_pre', 'bias') | torch.Size([768]) | -0.001 | 0.073 |\n", + "| ('ln_pre', 'scale') | torch.Size([768]) | 0.393 | 0.455 |\n", + "| ('patch_embed.proj', 'bias') | (768,) | 0 | 0 |\n", + "| ('patch_embed.proj', 'kernel') | torch.Size([16, 16, 3, 768]) | 0 | 0.019 |\n", + "| ('pos_embed',) | torch.Size([1, 197, 768]) | -0.007 | 0.028 |\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from flax.training import checkpoints\n", + "out_path = 'clip_b_16'\n", + "checkpoints.save_checkpoint(out_path, {'params': tree}, 0)\n", + "# from google.colab import files\n", + "# files.download(f'{out_path}/checkpoint_0')" + ], + "metadata": { + "id": "LqSx_9EUBI2-", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + }, + "outputId": "56c85acc-436c-42bf-8320-b76cea8ed72d" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "'clip_b_16/checkpoint_0'" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + } + }, + "metadata": {}, + "execution_count": 43 + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "CtZAVRIbNGHF" + }, + "execution_count": null, + "outputs": [] + } + ] +} diff --git a/scenic/projects/densevoc/tools/eval_chota.py b/scenic/projects/densevoc/tools/eval_chota.py new file mode 100644 index 0000000000000000000000000000000000000000..0b4015cb3f2fd1ae34d4b75fe0af1ff5324cde99 --- /dev/null +++ b/scenic/projects/densevoc/tools/eval_chota.py @@ -0,0 +1,66 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Re-evaluate tracking metrics given ground truth json and predictions. + + +python eval_chota.py --gt_json /path/to/vidstg_max200f_val_coco_format.json \ +--pred_json /path/to/predictions.json + +""" +import json +import os +import tempfile + +from absl import app +from absl import flags +from absl import logging +from clu import metric_writers + +from scenic.projects.densevoc import chota +from tensorflow.io import gfile + +# replace with the path to your JAVA bin location +JRE_BIN_JAVA = path_to_jre_bin_java + +FLAGS = flags.FLAGS + +flags.DEFINE_string('workdir', '/tmp/', '') +flags.DEFINE_string( + 'gt_json', '', 'path to the json annotations.') +flags.DEFINE_string( + 'pred_json', '', 'path to the prediction json.') +flags.DEFINE_string( + 'caption_metric', 'cider,meteor,spice', '') + + +def main(unused_argv): + java_jre = get_java_bin_path() + os.environ['JRE_BIN_JAVA'] = JRE_BIN_JAVA + logging.set_verbosity(logging.INFO) + logging.info('Loading %s', FLAGS.gt_json) + gt_data = json.load(gfile.GFile(FLAGS.gt_json, 'r')) + pred_data = json.load(gfile.GFile(FLAGS.pred_json, 'r')) + + chota_evaluator = chota.CHOTA(caption_metric=FLAGS.caption_metric.split(',')) + results = chota_evaluator.compute_metrics(gt_data, pred_data) + writer = metric_writers.create_default_writer(FLAGS.workdir) + for k, v in results.items(): + logging.info('%s: %f', k, v) + writer.write_scalars(0, {k: v}) + json.dump(results, gfile.GFile(FLAGS.workdir + '/results.json', 'w')) + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/densevoc/tools/eval_densecap.py b/scenic/projects/densevoc/tools/eval_densecap.py new file mode 100644 index 0000000000000000000000000000000000000000..b1b4626959f9e14297b6a07ec41b268eb4c16249 --- /dev/null +++ b/scenic/projects/densevoc/tools/eval_densecap.py @@ -0,0 +1,56 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Re-evaluate dense-caption mAP given ground truth json and predictions. + +The evaluation follows the official lua script: +https://github.com/jcjohnson/densecap/blob/maste*/eval/eval_utils.lua + + +python eval_densecap.py --gt_json /path/to/vg/annotations/test.json \ +--pred_json /path/to/predictions.json +""" + +import json + +from absl import app +from absl import flags +from absl import logging + +from scenic.projects.densevoc import densevoc_evaluator +from tensorflow.io import gfile + +FLAGS = flags.FLAGS + +flags.DEFINE_string( + 'gt_json', '', 'path to the json annotations.') +flags.DEFINE_string( + 'pred_json', '', 'path to the prediction json.') +flags.DEFINE_string( + 'score_key', + 'score', + 'score key.') + + +def main(unused_argv): + logging.set_verbosity(logging.INFO) + logging.info('Loading %s', FLAGS.gt_json) + densecap_eval = densevoc_evaluator.DensecapEval( + FLAGS.gt_json, score_key=FLAGS.score_key) + preds = json.load(gfile.GFile(FLAGS.pred_json, 'r')) + results = densecap_eval.compute_metrics(preds) + print(results) + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/densevoc/trainer.py b/scenic/projects/densevoc/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..9848a664587610c0d183140a4ca15a506cd5aa13 --- /dev/null +++ b/scenic/projects/densevoc/trainer.py @@ -0,0 +1,279 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training script for Dense VOC.""" + +import functools +import time +from typing import Any + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import optax + +from scenic.dataset_lib import dataset_utils +from scenic.projects.baselines.centernet import optimizer_utils +from scenic.projects.baselines.centernet import train_utils as centernet_train_utils +from scenic.projects.densevoc import evaluation_utils +from scenic.projects.densevoc.modeling import densevoc_model +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils + + +def train_step( + train_state, + batch, + *, + flax_model: nn.Module, + loss_and_metrics_fn: Any, + learning_rate_fn: Any, + debug: bool = False): + """Run a single step of training. + + Args: + train_state: learnable parameters and optimizer states. + batch: a batch of data containing images ("inputs") and annotations. + flax_model: the model definition. + loss_and_metrics_fn: loss function. + learning_rate_fn: Learning rate scheduler which given the global_step + generates the learning rate. + debug: enable debug mode or not. + Returns: + new_train_state: updated network parameters and optimizer states. + lr: the learning rate of the current step (for visualization). + predictions: the output of the network. + metrics: losses and other metrics for visualization. + """ + def loss_fn(params): + new_rng, rng = jax.random.split(train_state.rng) + model_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + variables = {'params': params, **train_state.model_state} + kwargs = {} + if isinstance(flax_model, densevoc_model.DenseVOCDetector) and ( + flax_model.with_tracking): + kwargs['gt_track_ids'] = batch['label']['track_ids'] + if isinstance(flax_model, densevoc_model.DenseVOCDetector) and ( + flax_model.with_global_video_caption): + kwargs['video_caption_tokens'] = batch['label']['video_caption_tokens'] + predictions, new_model_state = flax_model.apply( + variables, + batch['inputs'], + gt_boxes=batch['label']['boxes'], + gt_classes=batch['label']['labels'], + gt_text_tokens=batch['label']['text_tokens'], + preprocess=True, + # padding_mask=batch['padding_mask'], + padding_mask=jnp.ones((1, 1, 1), dtype=jnp.float32), + mutable=['batch_stats'], + train=True, + rngs={'dropout': model_rng}, + debug=debug, + **kwargs, + ) + loss, metrics = loss_and_metrics_fn(predictions, batch) + # adapt to normalization API in log_train_summary + metrics = {k: (v, 1.) for k, v in metrics.items()} + return loss, (new_model_state, new_rng, metrics, predictions) + compute_gradient_fn = jax.value_and_grad(loss_fn, has_aux=True) + (_, aux), grad = compute_gradient_fn(train_state.params) + new_model_state, new_rng, metrics, predictions = aux + step = train_state.global_step + lr = learning_rate_fn(step) + grad = jax.lax.pmean(grad, axis_name='batch') + updates, new_opt_state = train_state.tx.update( + grad, train_state.opt_state, train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + new_train_state = train_state.replace( + global_step=step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + return new_train_state, lr, predictions, metrics + + +def train_and_evaluate( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +): + """Main training loop lives in this function. + + Args: + rng: JAX PRNGKey. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + is_host = jax.process_index() == 0 + + model = model_cls(config, dataset.meta_data) + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + lr_fn = lr_schedules.get_learning_rate_fn(config) + if config.optimizer.get('layerwise_decay', 0.0) > 0: + tx = optimizer_utils.optimizer_with_layerwise_decay( + config, params=params) + else: + tx = optimizers.get_optimizer(config.optimizer, lr_fn, params=params) + opt_state = jax.jit(tx.init, backend='cpu')(params) + + _, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng) + + train_state = checkpoints.restore_checkpoint(workdir, train_state) + start_step = int(train_state.global_step) + if start_step == 0: + train_state, start_step = centernet_train_utils.load_weights( + train_state, config) + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_and_metrics_fn=model.loss_function, + learning_rate_fn=lr_fn, + debug=config.debug_train, + ), + axis_name='batch', donate_argnums=(0,), + ) + + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + log_eval_steps = config.get('log_eval_steps', steps_per_epoch) + log_summary_steps = config.get('log_summary_steps', 20) + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + eval_batch_size = config.get('eval_batch_size', config.batch_size) + chrono = train_utils.Chrono() + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + def write_note(note): + if is_host: + platform.work_unit().set_notes(note) + + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + hooks = [] + if is_host: + hooks.append(report_progress) + if config.get('xprof', True) and is_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, lr, train_predictions, metrics = train_step_pmapped( + train_state, train_batch) + train_metrics.append(metrics) + extra_training_logs.append({'learning_rate': lr}) + for h in hooks: + h(step) + chrono.pause() + del train_predictions + + if (step % log_summary_steps == 0) or (step == total_steps - 1): + if is_host: + chrono.tick(step, writer, write_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, train_metrics), + extra_training_logs=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, extra_training_logs), + writer=writer) + train_metrics, extra_training_logs = [], [] + + if (step % log_eval_steps == 0) or (step == total_steps): + start_time = time.time() + with report_progress.timed('eval'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_fn = evaluation_utils.inference_on_image_dataset if not config.get( + 'inference_on_video', False, + ) else evaluation_utils.inference_on_video_dataset + last_eval_results, last_eval_metrics = ( + eval_fn( + model, + train_state, dataset, + config=config, + eval_batch_size=eval_batch_size, + is_host=is_host, + save_dir=workdir + )) + last_eval_step = step + train_utils.log_eval_summary( + step=last_eval_step, eval_metrics=last_eval_metrics, + extra_eval_summary=last_eval_results, writer=writer) + duration = time.time() - start_time + logging.info('Done with evaluation: %.4f sec.', duration) + writer.flush() + + if ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)): + with report_progress.timed('checkpoint'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + if is_host: + unrep_train_state = jax_utils.unreplicate(train_state) + train_utils.save_checkpoint(workdir, unrep_train_state, max_to_keep=1) + del unrep_train_state + chrono.resume() # Un-pause now. + + train_utils.barrier() + return train_state, train_summary, eval_summary diff --git a/scenic/projects/densevoc/transforms.py b/scenic/projects/densevoc/transforms.py new file mode 100644 index 0000000000000000000000000000000000000000..4cfb433ce303a5c354bd68d6d384d9b5a88e9e9b --- /dev/null +++ b/scenic/projects/densevoc/transforms.py @@ -0,0 +1,88 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data augmentation transforms for data loading. + +This is modified from scenic.projects.baseline.detr.transforms. +The original crop transform filtered out empty objects and have fixed keys. +This version adds customized keys in the filtering. +""" +from scenic.projects.baselines.centernet import transforms as centernet_transforms +import tensorflow as tf +INF = 1000000 + + +def tf_float(t): + return tf.cast(t, tf.float32) + + +def crop(features, region, additional_keys=()): + """The same as detr crop, with additional keys (e.g., object captioning.).""" + image = features['inputs'] + target = features['label'] + i, j, h, w = region + + cropped_image = image[i:i+h, j:j+w, :] + features['inputs'] = cropped_image + + target['size'] = tf.stack([h, w]) + + fields = ['labels', 'area', 'is_crowd', 'objects/id'] + list(additional_keys) + + boxes = target['boxes'] + cropped_boxes = boxes - tf_float(tf.expand_dims( + tf.stack([j, i, j, i]), axis=0)) + cropped_boxes = tf.minimum( + tf.reshape(cropped_boxes, [-1, 2, 2]), + tf.reshape(tf_float(tf.stack([w, h])), [1, 1, 2])) + + cropped_boxes = tf.clip_by_value(cropped_boxes, 0, INF) + target['boxes'] = tf.reshape(cropped_boxes, [-1, 4]) + fields.append('boxes') + + if 'area' in target: + area = tf.reduce_prod(cropped_boxes[:, 1, :] - cropped_boxes[:, 0, :], + axis=1) + target['area'] = area + + # Removes elements for which the boxes or masks that have zero area. + cropped_boxes = tf.reshape(target['boxes'], [-1, 2, 2]) + keep = tf.logical_and(cropped_boxes[:, 1, 0] > cropped_boxes[:, 0, 0], + cropped_boxes[:, 1, 1] > cropped_boxes[:, 0, 1]) + + for field in fields: + if field in target: + target[field] = target[field][keep] + + features['label'] = target + return features + + +class FixedSizeCropWithAdditionalKeys: + """Crop a random sized region from the image.""" + + def __init__(self, crop_size, additional_keys=('text_tokens',)): + self.crop_size = crop_size + self.additional_keys = additional_keys + + def __call__(self, features): + h, w = centernet_transforms.get_hw(features, dtype=tf.int32) + wcrop = tf.cast(tf.minimum(w, self.crop_size), tf.int32) + hcrop = tf.cast(tf.minimum(h, self.crop_size), tf.int32) + i = tf.random.uniform([], 0, h - hcrop + 1, dtype=tf.int32) + j = tf.random.uniform([], 0, w - wcrop + 1, dtype=tf.int32) + region = (i, j, hcrop, wcrop) + return crop( + features, region, additional_keys=self.additional_keys) + diff --git a/scenic/projects/densevoc/vidstg_evaluator.py b/scenic/projects/densevoc/vidstg_evaluator.py new file mode 100644 index 0000000000000000000000000000000000000000..1b88cce2cbda8e92fa0632256c4f763803257912 --- /dev/null +++ b/scenic/projects/densevoc/vidstg_evaluator.py @@ -0,0 +1,344 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Evaluation of spatial-temporal grounding of VidSTG dataset. + +The main body of the code is from TubeDETR +https://github.com/antoyang/TubeDETR/blob/main/datasets/vidstg_eval.py +""" +import json +import logging +import os +import numpy as np + +from scenic.projects.densevoc import densevoc_evaluator +import tensorflow as tf + +# pylint: disable=logging-fstring-interpolation + + +class VidSTGiouEvaluator: + """VidSTG evaluator.""" + + def __init__( + self, + annotations, + subset="val", + iou_thresholds=(0.3, 0.5), + fps=5, + video_max_len=200, + tmp_loc=True, + ): + """Initialize. + + Args: + annotations: VidSTG annotations + subset: train, val or test + iou_thresholds: IoU thresholds for the vIoU metrics + fps: number of frames per second + video_max_len: maximum number of frames to be extracted from a video + tmp_loc: whether to evaluate temporal localization + """ + + assert subset in ["train", "test", "val"], f"Wrong VidSTG subset {subset}" + + self.iou_thresholds = iou_thresholds + self.tmp_loc = tmp_loc + self.anns = annotations + # Map video_id to list of corresponding frames to forward and list of + # corresponding frames in the GT tube. + self.vid2imgids = {} + self.vid2steds = {} # map video_id to [start, end] of the GT tube + self.img2box = {} # map video_id + frame_id to bbox + for video in self.anns["videos"]: # + video_id = int(video["video_id"]) + video_fps = video["fps"] # used for extraction + sampling_rate = fps / video_fps + assert sampling_rate <= 1 # downsampling at fps + start_frame = ( + video["start_frame"] if self.tmp_loc else video["tube_start_frame"]) + end_frame = ( + video["end_frame"] if self.tmp_loc else video["tube_start_frame"]) + frame_ids = [start_frame] + for frame_id in range(start_frame, end_frame): + if int(frame_ids[-1] * sampling_rate) < int(frame_id * sampling_rate): + frame_ids.append(frame_id) + # Temporal downsampling if there are too many frames. + if len(frame_ids) > video_max_len: + frame_ids = [ + frame_ids[(j * len(frame_ids)) // video_max_len] + for j in range(video_max_len) + ] + inter_frames = [] + self.vid2steds[video_id] = [ + video["tube_start_frame"], video["tube_end_frame"]] + for frame_id in frame_ids: + if video["tube_start_frame"] <= frame_id < video["tube_end_frame"]: + x1, y1, w, h = self.anns["trajectories"][video["original_video_id"]][ + str(video["target_id"])][str(frame_id)]["bbox"] + x2 = x1 + w + y2 = y1 + h + self.img2box[f"{video_id}_{frame_id}"] = [[x1, y1, x2, y2]] + inter_frames.append(f"{video_id}_{frame_id}") + self.vid2imgids[video_id] = [frame_ids, inter_frames] + + logging.info(f"VidSTG subset contains {len(self.vid2imgids)} videos") + + def evaluate(self, predictions, video_predictions): + """Evaluate on given predictions.""" + if len(video_predictions) < len(self.vid2imgids): + num_miss = len(self.vid2imgids) - len(video_predictions) + logging.info(f"{num_miss} video predictions missing") + if len(predictions) < len(self.img2box): + num_miss = len(self.img2box) - len(predictions) + logging.info(f"{num_miss} box predictions missing") + vid_metrics = {} + for video_id, video_pred in video_predictions.items(): + if video_id in vid_metrics: + logging.info( + f"Warning, multiple predictions found for video {video_id}") + continue + if video_id not in self.vid2imgids: + logging.info( + f"Warning, no image predictions found for video {video_id}") + continue + if self.tmp_loc: + gt_sted = self.vid2steds[video_id] + pred_sted = video_pred["sted"] + qtype = video_pred["qtype"] + frame_ids, inter_frames = self.vid2imgids[video_id] + + # compute temporal iou + if self.tmp_loc: + max_start = max(gt_sted[0], pred_sted[0]) + min_end = min(gt_sted[1], pred_sted[1]) + min_start = min(gt_sted[0], pred_sted[0]) + max_end = max(gt_sted[1], pred_sted[1]) + if min_end <= max_start: + tiou = 0 + else: + intersection = min_end - max_start + gt_span = gt_sted[1] - gt_sted[0] + pred_span = pred_sted[1] - pred_sted[0] + union = gt_span + pred_span - intersection + tiou = intersection / union + + # compute viou and gt_viou + vid_metrics[video_id] = { + "gt_sted": gt_sted, + "pred_sted": pred_sted, + "tiou": tiou, + "qtype": qtype, + "img_metrics": {}, + } + union_predgt = [ + frame_id + for frame_id in frame_ids + if min_start <= frame_id < max_end + ] + inter_predgt = set([ + frame_id + for frame_id in frame_ids + if max_start <= frame_id < min_end + ]) + viou = 0 + else: + vid_metrics[video_id] = { + "qtype": qtype, + "img_metrics": {}, + } + union_predgt = frame_ids + inter_predgt = frame_ids + gt_viou = 0 + + # Iterate on all frames of the annotated moment to update GT metrics + for image_id in inter_frames: + if image_id not in predictions: + logging.info(f"No prediction for frame {image_id}") + continue + else: + pred_boxes = predictions[image_id]["boxes"] + gt_boxes = self.img2box[image_id] + pred_boxes_np = np.array(pred_boxes) + gt_boxes_np = np.array(gt_boxes) + pred_boxes_np[:, 2:] -= pred_boxes_np[:, :2] + gt_boxes_np[:, 2:] -= gt_boxes_np[:, :2] + iou = densevoc_evaluator.box_iou(pred_boxes_np, gt_boxes_np)[0][0] + frame_id = int(image_id.split("_")[1]) + vid_metrics[video_id]["img_metrics"][image_id] = { + "iou": iou, + "pred_box": pred_boxes[0], + "gt_box": gt_boxes[0], + } + # Update viou if this frame is in the intersection between the + # annotated moment and the predicted moment + if (frame_id in inter_predgt and self.tmp_loc): + viou += iou + gt_viou += iou + + if self.tmp_loc: # compute viou@R + viou = viou / max(len(union_predgt), 1) + vid_metrics[video_id]["viou"] = viou + recalls = {thresh: 0 for thresh in self.iou_thresholds} + for thresh in self.iou_thresholds: + if viou > thresh: + recalls[thresh] += 1 + vid_metrics[video_id].update({ + f"viou@{thresh}": recalls[thresh] + for thresh in self.iou_thresholds + }) + + # compute gt_viou@R + gt_viou = gt_viou / max(len(inter_frames), 1) + vid_metrics[video_id]["gt_viou"] = gt_viou + gt_recalls = {thresh: 0 for thresh in self.iou_thresholds} + for thresh in self.iou_thresholds: + if gt_viou > thresh: + gt_recalls[thresh] += 1 + vid_metrics[video_id].update({ + f"gt_viou@{thresh}": gt_recalls[thresh] + for thresh in self.iou_thresholds + }) + + return vid_metrics + + +class VidSTGEvaluator(object): + """VidSTG evaluator.""" + + def __init__( + self, + annotations_loc, + iou_thresholds=(0.3, 0.5), + fps=5, + video_max_len=200, + tmp_loc=True, + ): + """Init evaluator. + + Args: + annotations_loc: path to VidSTG annotations + iou_thresholds: IoU thresholds for the vIoU metrics + fps: number of frames per second + video_max_len: maximum number of frames to be extracted from a video + tmp_loc: temporal localization + """ + subset = annotations_loc[ + annotations_loc.rfind("/") + 1: annotations_loc.rfind("_")] + annotations = json.load(tf.io.gfile.GFile(annotations_loc, "r")) + annotations["videos"] = [ + x for x in annotations["videos"] if x["qtype"] == "declarative"] + self.evaluator = VidSTGiouEvaluator( + annotations, + subset=subset, + iou_thresholds=iou_thresholds, + fps=fps, + video_max_len=video_max_len, + tmp_loc=tmp_loc, + ) + self.predictions = {} + self.video_predictions = {} + self.results = None + self.iou_thresholds = iou_thresholds + self.tmp_loc = tmp_loc + self.tsa_weights = {} + self.text_weights = {} + self.spatial_weights = {} + self.pred_sted = {} + + def accumulate(self): + pass + + def update(self, predictions): + """Update per-frame localization predictions. + + Args: + predictions: dict of image_id ('{video_id}_{frame_id}') to dict + {'boxes': [[l, t, r, b]]} + """ + self.predictions.update(predictions) + + def video_update(self, video_predictions): + """Update per-video temporal localization predictions. + + Args: + video_predictions: dict of video_id to dict {'sted': [st, ed]} + """ + self.video_predictions.update(video_predictions) + + def compute_metrics(self): + """Summarize results.""" + self.results = self.evaluator.evaluate( + self.predictions, self.video_predictions) + categories = set(x["qtype"] for x in self.results.values()) + metrics = {} + counter = {} + for category in categories: # init metrics + metrics[category] = {"gt_viou": 0} + if self.tmp_loc: + metrics[category].update({"tiou": 0, "viou": 0}) + for thresh in self.iou_thresholds: + if self.tmp_loc: + metrics[category][f"viou@{thresh}"] = 0 + metrics[category][f"gt_viou@{thresh}"] = 0 + counter[category] = 0 + for x in self.results.values(): # sum results + qtype = x["qtype"] + if self.tmp_loc: + metrics[qtype]["tiou"] += x["tiou"] + metrics[qtype]["viou"] += x["viou"] + metrics[qtype]["gt_viou"] += x["gt_viou"] + for thresh in self.iou_thresholds: + if self.tmp_loc: + metrics[qtype][f"viou@{thresh}"] += x[f"viou@{thresh}"] + metrics[qtype][f"gt_viou@{thresh}"] += x[f"gt_viou@{thresh}"] + counter[qtype] += 1 + for category in categories: # average results per category + for key in metrics[qtype]: + metrics[category][key] = metrics[category][key] / counter[category] + logging.info(f"{category} {key}: {metrics[category][key]:.4f}") + out = { # pylint: disable=g-complex-comprehension + f"{qtype}_{name}": metrics[qtype][name] + for qtype in metrics + for name in metrics[qtype] + } + return out + + def write_pred_annotations_to_file(self, path): + """Writes predictions to file in JSON format.""" + out = {} + out["predictions"] = self.predictions + out["video_predictions"] = self.video_predictions + out["vid_metrics"] = self.results + if not tf.io.gfile.exists(path): + tf.io.gfile.makedirs(path) + json_file_name = "vidstg_predictions.json" + json_file_path = os.path.join(path, json_file_name) + + def _convert_to_serializable(obj): + if isinstance(obj, np.ndarray): + return obj.tolist() + elif isinstance(obj, np.float32): + return float(obj) + else: + raise TypeError(f"Unserializable object {obj} of type {type(obj)}") + + with tf.io.gfile.GFile(json_file_path, "w") as f: + f.write(json.dumps(out, default=_convert_to_serializable)) + logging.info("Predicted annotations are stored in %s.", json_file_path) + + def clear(self): + self.predictions = {} + self.video_predictions = {} + self.results = None diff --git a/scenic/projects/fast_vit/README.md b/scenic/projects/fast_vit/README.md new file mode 100644 index 0000000000000000000000000000000000000000..9e3109faa891b184a9ccbc9c931ee4507ecfc3e6 --- /dev/null +++ b/scenic/projects/fast_vit/README.md @@ -0,0 +1,24 @@ +## FastViT +FastViT is a project that explores ideas around making ViT model fast and +scalable when applied on high-resolution images. + +Given that the tokenizer in the vanilla ViT is simply extracting patches +and embedding them, the number of input tokens to the Transformer encoder (which +is in fact number of patches) depends on the input resolution. So, the +computational cost of ViT is directly tied to the input resolution and given +the quadratic complexity of the self-attention mechanism, applying ViT on +mega-pixel images or any input that requires encoding a long sequence of +patches, e.g., videos, becomes extremely expensive. + +To tackle this issue we can use [efficient Transformers]( +https://arxiv.org/abs/2009.06732), instead of dot-product attention or we can +reduce the spatial dimensions using pooling mechanisms to reduce the number of +tokens, e.g. having an encoder with a pyramid scheme. + +This project is about exploring these ideas and compare different variants in +terms of performance-compute trade-off. + +For any question, feel free to reach out to +[Mostaf Dehghani](mailto:dehghani@google.com), +[Yi Tay](mailto:yitay@google.com), or +[Alexey Gritsenko](mailto:agritsenko@google.com). diff --git a/scenic/projects/fast_vit/__init__.py b/scenic/projects/fast_vit/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/fast_vit/main.py b/scenic/projects/fast_vit/main.py new file mode 100644 index 0000000000000000000000000000000000000000..2572d96583520a2994cb8125310a491e7d10bd71 --- /dev/null +++ b/scenic/projects/fast_vit/main.py @@ -0,0 +1,58 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for FastViT.""" + +from typing import Any + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.fast_vit import xvit +from scenic.train_lib import train_utils +from scenic.train_lib import trainers + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name: str) -> Any: + """Returns model class given its name.""" + if model_name == 'xvit_multilabel_classification': + return xvit.XViTMultiLabelClassificationModel + else: + raise ValueError(f'Unrecognized model: {model_name}.') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the FastViT.""" + model_cls = get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + + trainers.get_trainer(config.trainer_name)( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/fast_vit/model_utils.py b/scenic/projects/fast_vit/model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..91c70ce66562d5ee0a63bc16a84fcaf8a530aedb --- /dev/null +++ b/scenic/projects/fast_vit/model_utils.py @@ -0,0 +1,1414 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Fast Attention Models utilities.""" + +import abc +import enum +import functools +from typing import Any, Callable, Dict, Optional, Sequence, Tuple, Iterable + +from absl import logging +from flax import linen as nn +import jax +from jax import lax +from jax import random +import jax.numpy as jnp +import numpy as np +from scenic.model_lib.layers import attention_layers + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +class LinformerEncoderAttention(nn.Module): + """Linformer Encoder only multi-head dot-product self-attention. + + Attributes: + num_heads: Number of attention heads. Features (i.e. inputs_q.shape[-1]) + should be divisible by the number of heads. + qkv_features: Dimension of the key, query, and value. + out_features: Dimension of the last projection. + broadcast_dropout: Use a broadcasted dropout along batch dims. + dropout_rate: Dropout rate. + kernel_init: Initializer for the kernel of the Dense layers. + bias_init: Initializer for the bias of the Dense layers. + bias: Whether pointwise QKVO dense transforms use bias. + dtype: The dtype of the computation. + precision: Numerical precision of the computation see `jax.lax.Precision` + for details. + low_rank_features: Low rank features. + proj_mode: Supports "linear", "mlp", or "cnn" projections. + downsample: Supports downsampling query too. + proj_configs: Configurations used in the low-rank projection. + qk_attention_fn: A function that given multi-headed key, query, and value + computes the attention and generates the new values. + """ + num_heads: int + qkv_features: Optional[int] = None + out_features: Optional[int] = None + broadcast_dropout: bool = True + dropout_rate: float = 0.1 + kernel_init: Initializer = nn.linear.default_kernel_init + bias_init: Initializer = nn.initializers.zeros + use_bias: bool = True + dtype: jnp.dtype = jnp.float32 + precision: Optional[jax.lax.Precision] = None + low_rank_features: int = 8 + proj_mode: str = 'linear' + downsample: bool = False + proj_configs: Optional[Dict[Any, Any]] = None + print('attnbro', dir(attention_layers)) + qk_attention_fn: Callable[ + ..., jnp.ndarray] = attention_layers.dot_product_attention + + @nn.compact + def __call__(self, # pytype: disable=annotation-type-mismatch # jax-ndarray + inputs_q: jnp.ndarray, + inputs_kv: jnp.ndarray = None, + *, + deterministic: bool) -> jnp.ndarray: + """Applies Linformer multi-head dot product self-attention. + + Projects the inputs into multi-headed query, key, and value vectors, + applies dot-product attention and project the results to an output vector. + + Args: + inputs_q: Input query of shape `[batch_sizes..., length, features]`. + inputs_kv: Input key-vale, which is ignored in linformer. + deterministic: Whether the model is run in deterministic mode (if so, do + not apply dropout). + + Returns: + Output of shape `[batch_sizes..., length features]`. + """ + if inputs_kv is not None: + logging.warning( + 'Ignoring inputs_kv as Linformer only supports self-attention.') + x = inputs_q + features = self.out_features or x.shape[-1] + qkv_features = self.qkv_features or x.shape[-1] + + assert qkv_features % self.num_heads == 0, ( + 'Memory dimension must be divisible by number of heads.') + head_dim = qkv_features // self.num_heads + + # Project inputs_q to multi-headed q/k/v. + # Dimensions are then [bs, dims..., n_heads, n_features_per_head]. + dense = functools.partial( + nn.DenseGeneral, + features=(self.num_heads, head_dim), + axis=-1, + kernel_init=self.kernel_init, + bias_init=self.bias_init, + use_bias=self.use_bias, + precision=self.precision) + + query, key, value = (dense(dtype=self.dtype, name='query')(x), + dense(dtype=self.dtype, name='key')(x), + dense(dtype=self.dtype, name='value')(x)) + + def _linear_low_rank_projection(key, + value, + features, + activation=None, + transpose=True, + query=None): + # By default, shared projections. + if transpose: + # Transpose if input is already transposed. + key = key.transpose((0, 3, 2, 1)) + value = value.transpose((0, 3, 2, 1)) + if query is not None: + query = query.transpose((0, 3, 2, 1)) + dense_proj = functools.partial( + nn.DenseGeneral, + features=features, + axis=-1, + kernel_init=self.kernel_init, + bias_init=self.bias_init, + use_bias=None, + precision=self.precision, + dtype=self.dtype) + shared_dense_proj = dense_proj() # pytype: disable=wrong-arg-types + key = shared_dense_proj(key) + value = shared_dense_proj(value) + if query is not None: + query = shared_dense_proj(query) + if activation is not None: + key = activation(key) + value = activation(value) + if query is not None: + query = activation(query) + if transpose: + key = key.transpose((0, 3, 2, 1)) + value = value.transpose((0, 3, 2, 1)) + if query is not None: + query = query.transpose((0, 3, 2, 1)) + return key, value, query + + def _mlp_low_rank_projection(key, value, features): + """MLP-based low rank projection function.""" + # Handle transpose outside (before and after linear low rank projections). + key = key.transpose((0, 3, 2, 1)) + value = value.transpose((0, 3, 2, 1)) + for f in features[:-1]: + key, value, _ = _linear_low_rank_projection( + key, value, features=f, activation=nn.relu, transpose=False) + # Don't apply activation on the last layer. + key, value, _ = _linear_low_rank_projection( + key, value, features=features[-1], activation=None, transpose=False) + key = key.transpose((0, 3, 2, 1)) + value = value.transpose((0, 3, 2, 1)) + return key, value + + if self.proj_mode == 'linear': + logging.info('Using linear low-rank projectors') + if self.downsample: + key, value, query = _linear_low_rank_projection( + key, + value, + features=self.low_rank_features, + transpose=True, + query=query) + else: + key, value, _ = _linear_low_rank_projection( + key, value, features=self.low_rank_features, transpose=True) + elif self.proj_mode == 'mlp': + # Note: do not support downsampling. + logging.info('Using MLP low-rank projectors') + key, value = _mlp_low_rank_projection( + key, value, features=[self.low_rank_features, self.low_rank_features]) + else: + raise NotImplementedError('This low-rank projection is not supported.') + + attention_bias = None + dropout_rng = None + if not deterministic and self.dropout_rate > 0.: + dropout_rng = self.make_rng('dropout') + + # Apply attention. + x = self.qk_attention_fn( + query, + key, + value, + bias=attention_bias, + broadcast_dropout=self.broadcast_dropout, + dropout_rng=dropout_rng, + dropout_rate=self.dropout_rate, + deterministic=deterministic, + dtype=self.dtype, + precision=self.precision) + + # Project back to the original inputs dimensions. + out = nn.DenseGeneral( + features=features, + axis=(-2, -1), + kernel_init=self.kernel_init, + bias_init=self.bias_init, + use_bias=self.use_bias, + dtype=self.dtype, + precision=self.precision, + name='out')( + x) + return out + + +class PerformerEncoderAttention(nn.Module): + """Encoder only multi-head dot-product self-attention based on Performer. + + based on: https://arxiv.org/abs/2009.14794 + + Attributes: + num_heads: Number of attention heads. Features (i.e. inputs_q.shape[-1]) + should be divisible by the number of heads. + qkv_features: Dimension of the key, query, and value. + out_features: Dimension of the last projection. + broadcast_dropout: Use a broadcasted dropout along batch dims. + dropout_rate: Dropout rate. + kernel_init: Initializer for the kernel of the Dense layers. + bias_init: Initializer for the bias of the Dense layers. + use_bias: Whether pointwise QKVO dense transforms use bias. + dtype: The dtype of the computation. + precision: Numerical precision of the computation see `jax.lax.Precision` + for details. + attention_fn_cls: Name of the attention function that is used by performer, + which can be 'softmax' or 'generalized'. + num_kernel_features: Number of kernel features. + redraw: Whether to redraw (valid only if random featurees are used). + attention_fn_configs: Configurations that is passed to the performer + attention function. + """ + num_heads: int + qkv_features: Optional[int] = None + out_features: Optional[int] = None + broadcast_dropout: bool = True + dropout_rate: float = 0.1 + kernel_init: Initializer = nn.linear.default_kernel_init + bias_init: Initializer = nn.initializers.zeros + use_bias: bool = True + dtype: jnp.dtype = jnp.float32 + precision: Optional[jax.lax.Precision] = None + attention_fn_cls: str = 'generalized' + num_kernel_features: int = 256 + redraw: bool = True + attention_fn_configs: Optional[Dict[Any, Any]] = None + + @nn.compact + def __call__(self, inputs_q: jnp.ndarray, inputs_kv: Optional[jnp.ndarray], *, + deterministic: bool) -> jnp.ndarray: + """Applies multi-head dot product self-attention on the input data. + + Projects the inputs into multi-headed query, key, and value vectors, + applies dot-product attention and project the results to an output vector. + + Args: + inputs_q: Input of shape `[batch_sizes..., length, features]`. + inputs_kv: Memory input of shape `[batch_sizes..., kv length, features]`. + deterministic: Whether the model is running in deterministic mode (if so, + do not apply dropout). + + Returns: + Output of shape `[batch_sizes..., length features]`. + """ + qkv_features = self.qkv_features or inputs_q.shape[-1] + assert qkv_features % self.num_heads == 0, ( + 'Memory dimension must be divisible by number of heads.') + if self.attention_fn_cls == 'softmax': + qk_attention_fn = functools.partial( + make_fast_softmax_attention, + nb_features=self.num_kernel_features, + redraw_features=self.redraw) + elif self.attention_fn_cls == 'generalized': + qk_attention_fn = make_fast_generalized_attention + else: + raise ValueError(f'Unknown attention_fn_cls: {self.attention_fn_cls}.') + + qk_attention_fn = ( + qk_attention_fn if self.attention_fn_configs is None else + functools.partial(qk_attention_fn, **self.attention_fn_configs)) # pylint: disable=not-a-mapping + + return attention_layers.MultiHeadAttention( + num_heads=self.num_heads, + qkv_features=qkv_features, + out_features=self.out_features, + broadcast_dropout=self.broadcast_dropout, + dropout_rate=self.dropout_rate, + kernel_init=self.kernel_init, + bias_init=self.bias_init, + use_bias=self.use_bias, + dtype=self.dtype, + precision=self.precision, + attention_fn=qk_attention_fn( + qkv_features // self.num_heads, unidirectional=False), + )(inputs_q=inputs_q, inputs_kv=inputs_kv, deterministic=deterministic) + + +class AttentionFunctionName(enum.Enum): + """Defines name assigned to self attention modules.""" + STANDARD = 'standard' + LINFORMER = 'linformer' + PERFORMER = 'performer' + + +def _get_attention_module(name: str, is_self_attention=True) -> Any: + """Returns an attention module.""" + function_name = AttentionFunctionName(name) + if function_name == AttentionFunctionName.STANDARD: + return attention_layers.MultiHeadAttention + elif function_name == AttentionFunctionName.LINFORMER: + if not is_self_attention: + raise NotImplementedError + else: + return LinformerEncoderAttention + elif function_name == AttentionFunctionName.PERFORMER: + return PerformerEncoderAttention + + +def _get_variant_args(name: str) -> Any: + """Return self-attention variant specific list of attn args.""" + + standard_args = [ + 'num_heads', 'x', 'qkv_features', 'out_features', 'broadcast_dropout', + 'dropout_rate', 'deterministic', 'kernel_init', 'bias_init', 'bias', + 'dtype', 'precision', 'qkv_attention_fn' + ] + + if name == 'performer': + return ['attention_fn_cls'] + ['num_kernel_features'] + ['redraw' + ] + standard_args + elif name == 'linformer': + return ['low_rank_features', 'downsample', 'proj_mode', 'proj_configs' + ] + standard_args + elif name == 'standard': + return standard_args + + +def get_axial_1d_input(x: jnp.ndarray, axis: int): + """Converts 2d inputs to 1d for axial attention.""" + + assert x.ndim == 4, ('The input dimention should be ' + '[batch_size, height, width, channel]') + batch_size, height, width, channel = x.shape + if axis == 1: + return x.transpose((0, 2, 1, 3)).reshape(batch_size * width, height, + channel) + elif axis == 2: + return x.reshape(batch_size * height, width, channel) + + +def get_axial_2d_input(x: jnp.ndarray, axis: int, two_d_shape: Tuple[int, int, + int, int]): + """Converts 1d inputs back to 2d after axial attention.""" + assert x.ndim == 3, ('The input dimention should be ' + '[batch_size, height*width, channel]') + batch_size, height, width, channel = two_d_shape + if axis == 1: + assert x.shape[0] == batch_size * width + return x.reshape((batch_size, width, height, channel)).transpose( + (0, 2, 1, 3)) + elif axis == 2: + assert x.shape[0] == batch_size * height + return x.reshape(two_d_shape) + + +class Encoder1DBlock(nn.Module): + """1-Dimensional Transformer encoder block. + + Attributes: + mlp_dim: dimension of the MLP on top of attention block. + attention_configs: Configs pass to the self-attention func. + attention_fn: Type of the self-attention function. + dropout_rate: Dropout used in the MLP block. + attention_dropout_rate: Dropout for attention heads. + num_kernel_features: Number of kernel features used. + redraw: Whether to redraw (valid only if random faturees are used). + post_sa_fn: Function to be applied on the output of self-attention block. + dtype: The dtype of the computation. + """ + mlp_dim: int + attention_configs: Dict[Any, Any] + attention_fn: str + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + num_kernel_features: int = 256 + redraw: bool = True + post_sa_fn: Optional[Callable[[jnp.ndarray], jnp.ndarray]] = None + droplayer_p: float = 0.0 + dtype: jnp.ndarray = jnp.float32 + + def get_drop_pattern(self, x, deterministic): + if not deterministic and self.droplayer_p: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + return jax.random.bernoulli( + self.make_rng('dropout'), self.droplayer_p, shape).astype('float32') + else: + return 0.0 + + @nn.compact + def __call__(self, inputs_q: jnp.ndarray, inputs_kv: jnp.ndarray, *, + deterministic: bool) -> jnp.ndarray: + """Applies Encoder1DBlock module. + + Args: + inputs_q: Input data in shape of `[bs, len, c]`. + inputs_kv: Memory data in shape of `[bs, memory len, c]`. + deterministic: Whether the model is in deterministic mode (if so, do not + apply dropout). + + Returns: + Output after 1-d transformer encoder block. + """ + assert inputs_q.ndim == 3 + if self.attention_fn: + is_self_attention = inputs_kv is None + + # Attention block. + valid_args = _get_variant_args(self.attention_fn) + # Remove args that are potentially not needed for variant. + attention_configs = { + x: self.attention_configs[x] + for x in valid_args + if x in self.attention_configs + } + x = nn.LayerNorm(dtype=self.dtype)(inputs_q) + if not is_self_attention: + assert inputs_kv.ndim == 3 + inputs_kv = nn.LayerNorm(dtype=self.dtype)(inputs_kv) + + # Prepare the input for the attention modole. + # We shouldn't pass memory if it is self-attention. + init_arg_to_attention_module = { + 'kernel_init': nn.initializers.xavier_uniform(), + 'broadcast_dropout': False, + 'dtype': self.dtype, + 'dropout_rate': self.attention_dropout_rate, + } + inputs_to_attention_module = { + 'inputs_q': x, + 'deterministic': deterministic, + } + if is_self_attention: + inputs_to_attention_module['inputs_kv'] = x + else: + inputs_to_attention_module['inputs_kv'] = inputs_kv + + x = _get_attention_module( + self.attention_fn, + is_self_attention)(**init_arg_to_attention_module, + **attention_configs)(**inputs_to_attention_module) + + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=deterministic) + + if x.shape[-2] != inputs_q.shape[-2]: + # TODO(yitay): Support case where we downsample. How do we handle res? + # Currently bypassing this causes training problems... + raise ValueError('Shape not identical. Cannot add residual connection.') + + drop_pattern = self.get_drop_pattern(x, deterministic) + x = x * (1.0 - drop_pattern) + inputs_q + if self.post_sa_fn is not None: + x = self.post_sa_fn(x) # pylint: disable=not-callable + else: + x = inputs_q + + if self.mlp_dim is None: + # Skip the MLP block. + return x + + # MLP block. + y = nn.LayerNorm(dtype=self.dtype)(x) + mlp_dim = self.mlp_dim + if isinstance(self.mlp_dim, int): + mlp_dim = (mlp_dim,) + for mlp_d in mlp_dim: + y = attention_layers.MlpBlock( + mlp_dim=mlp_d, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6))( + y, deterministic=deterministic) + + drop_pattern = self.get_drop_pattern(x, deterministic) + return x + y * (1.0 - drop_pattern) + + +class EncoderAxialBlock(nn.Module): + """2-Dimensional Transformer encoder block with Axial attention. + + This block is similar to Encoder1DBlock, where instead of `self-attention+MLP` + we have `row-self-attention + col-self-attention + MLP`. + + Attributes: + mlp_dim: dimension of the mlp on top of attention block. + attention_configs: Configs pass to the self-attention func. + attention_fn: Type of the sel-attention function. + dropout_rate: Dropout used in the mlp block. + attention_dropout_rate: Dropout for attention heads. + factorization_axis: Axis over which we run attention. + post_sa_fn: Function to be applied on the output of self-attention block. + dtype: The dtype of the computation. + """ + mlp_dim: int + attention_configs: Dict[Any, Any] + attention_fn: str + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + factorization_axis: Tuple[int, ...] = (1, 2) + post_sa_fn: Optional[Callable[[jnp.ndarray], jnp.ndarray]] = None + droplayer_p: float = 0.0 + dtype: jnp.ndarray = jnp.float32 + + def get_drop_pattern(self, x, deterministic): + if not deterministic and self.droplayer_p: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + return jax.random.bernoulli( + self.make_rng('dropout'), self.droplayer_p, shape).astype('float32') + else: + return 0.0 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, + deterministic: bool) -> jnp.ndarray: + """Applies Encoder1DBlock module. + + Args: + inputs: Input data in shape of `[bs, len, c]`. + deterministic: Whether the model is in deterministic mode (if so, do not + apply dropout). + + Returns: + Output after axial attention encoder block. + """ + + def _run_attention_on_axis(inputs, axis, two_d_shape): + inputs = get_axial_1d_input(inputs, axis=axis) + x = nn.LayerNorm(dtype=self.dtype)(inputs) + init_arg_to_attention_module = { + 'kernel_init': nn.initializers.xavier_uniform(), + 'broadcast_dropout': False, + 'dtype': self.dtype, + 'dropout_rate': self.attention_dropout_rate, + } + # Attention block. + valid_args = _get_variant_args(self.attention_fn) + # Remove args that are potentially not needed for variant. + attention_configs = { + x: self.attention_configs[x] + for x in valid_args + if x in self.attention_configs + } + x = _get_attention_module( + self.attention_fn, + is_self_attention=True)(**init_arg_to_attention_module, + **attention_configs)( + x, deterministic=deterministic) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=deterministic) + drop_pattern = self.get_drop_pattern(x, deterministic) + x = x * (1.0 - drop_pattern) + inputs + return get_axial_2d_input(x, axis=axis, two_d_shape=two_d_shape) + + x = inputs + if self.attention_fn: + # Row attention block. + two_d_shape = inputs.shape + + for ax in self.factorization_axis: + x = _run_attention_on_axis(x, ax, two_d_shape) + + if self.post_sa_fn is not None: + x = self.post_sa_fn(x) # pylint: disable=not-callable + + if self.mlp_dim is None: + # Skip the MLP block. + return x + + # MLP block. + y = nn.LayerNorm(dtype=self.dtype)(x) + mlp_dim = self.mlp_dim + if isinstance(self.mlp_dim, int): + mlp_dim = (mlp_dim,) + for mlp_d in mlp_dim: + y = attention_layers.MlpBlock( + mlp_dim=mlp_d, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6))( + y, deterministic=deterministic) + + drop_pattern = self.get_drop_pattern(x, deterministic) + return x + y * (1.0 - drop_pattern) + + +def sample_categorical(rng: jnp.ndarray, + logits: jnp.ndarray, + num_samples: int, + *, + replacement: bool = True): + """Sample catogorical with or without replacement for the top-k selector. + + Args: + rng: JAX PRNG key. + logits: Categorical distribution logits of shape [batch_dims, num_classes]. + num_samples: Number of samples to produce. + replacement: If True, sampling is done with replacement. + + Returns: + Categorial samples of shape [batch_dims, num_samples]. + """ + rng = jax.random.split(rng, num_samples) + if replacement: + samples = jax.vmap(jax.random.categorical, in_axes=(0, None))(rng, logits) + else: + num_categories = logits.shape[-1] + if num_categories < num_samples: + raise ValueError(f'Number of samples ({num_samples}) must be <= number of' + f' categories ({num_categories}) when sampling without' + f' replacement.') + + def sample_one(logits, scan_rng): + samples = jax.random.categorical(scan_rng, logits, axis=-1) + mask = jax.nn.one_hot(samples, num_categories, dtype=jnp.bool_) + logits = jnp.where(mask, -1e10, logits) + return logits, samples + + _, samples = jax.lax.scan(sample_one, logits, rng) + + # Restore original shape. + ndim = samples.ndim + if ndim > 1: + samples = jnp.transpose(samples, axes=tuple(range(1, ndim)) + (0,)) + return samples + + +class TopKTokenSelector(nn.Module): + """A layer that selects top-k tokens. + + Note that if `pool_unselected_tokens` is set to True, it pools all the + unselected tokens and appends it as an extra tokens and returns k+1 tokens. + + Attributes: + top_k: Number of tokens we select. + sample_tokens: Whether sample the top-k tokens given their scores or just + take the top-k. + pool_unselected_tokens: Whether we pool the unselected tokens and attach the + pooled version as an extra token to the selected tokens. + exclude_cls: If set to True, it assumes the token at position 0 is CLS token + and should be excluded from the selection process and be attached back at + the end. + score_net_kernel_init: Kernel initialization for the score net. + dtype: Jax dtype. + """ + top_k: int + sample_tokens: bool + pool_unselected_tokens: bool + exclude_cls: bool = False + score_net_kernel_init: Initializer = nn.linear.default_kernel_init + dtype: jnp.ndarray = jnp.float32 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, train: bool) -> jnp.ndarray: + if self.exclude_cls: + cls, inputs = jnp.split(inputs, (1,), axis=1) + input_len = inputs.shape[1] + if self.top_k > input_len: + raise ValueError(f'The value of top_{self.top_k} should be less than' + f'input length:{input_len}.') + logging.info('Selecting %d tokens out of %d tokens.', self.top_k, input_len) + # TODO(dehghani): Explore if adding a non-linearity to the score_net helps. + score_logits = jnp.squeeze( + nn.Dense( + features=1, + dtype=self.dtype, + kernel_init=self.score_net_kernel_init, + # No bias is needed since it gets removed during normalization. + use_bias=False, + name='score_net')(inputs), + axis=-1) + + if train and self.sample_tokens and self.top_k < input_len: + # We use dropout rng for sampling, which is always provided. + rng = self.make_rng('dropout') + selected_index = sample_categorical( + rng, score_logits, self.top_k, replacement=False) + selected_logits = jax.vmap(jnp.take, (0, 0, None))(score_logits, + selected_index, 0) + else: + selected_logits, selected_index = jax.lax.top_k(score_logits, self.top_k) + + # Take selected tokens: + selected_tokens = jax.vmap(jnp.take, (0, 0, None))(inputs, selected_index, + 0) + # Normalize "selected logits" and used as weights for selected tokens: + selected_tokens = selected_tokens * jax.nn.softmax(selected_logits)[ + ..., jnp.newaxis] + + if self.pool_unselected_tokens and self.top_k < input_len: + # Extract index of unselected tokens: + selected_index_one_hot = jax.nn.one_hot( + selected_index, num_classes=input_len, dtype=jnp.bool_) + unselected_index_one_hot = jnp.any( + jnp.logical_not(selected_index_one_hot), axis=1) + _, unselected_index = jax.lax.top_k(unselected_index_one_hot, + input_len - self.top_k) + + # Take unselected tokens: + unselected_tokens = jax.vmap(jnp.take, (0, 0, None))(inputs, + unselected_index, 0) + unselected_logits = jax.vmap(jnp.take, (0, 0, None))(score_logits, + unselected_index, 0) + # Normalize "unselected logits" and used as weights for unselected tokens: + weighted_unselected_tokens = ( + unselected_tokens * + jax.nn.softmax(unselected_logits)[..., jnp.newaxis]) + unselected_tokens_rep = jnp.sum( + weighted_unselected_tokens, axis=1, keepdims=True) + + selected_tokens = jnp.concatenate( + [selected_tokens, unselected_tokens_rep], axis=1) + + if self.exclude_cls: + selected_tokens = jnp.concatenate([cls, selected_tokens], axis=1) + return selected_tokens + + +###### PERFORMER FUNCTIONS: +def nonnegative_softmax_kernel_feature_creator(data, + projection_matrix, + attention_dims_t, + batch_dims_t, + precision, + is_query, + normalize_data=True, + eps=0.0001): + """Constructs nonnegative kernel features for fast softmax attention. + + Args: + data: input for which features are computes + projection_matrix: random matrix used to compute features + attention_dims_t: tuple of attention dimensions + batch_dims_t: tuple of batch dimensions + precision: precision parameter + is_query: predicate indicating whether input data corresponds to queries or + keys + normalize_data: predicate indicating whether data should be normalized, + eps: numerical stabilizer. + + Returns: + Random features for fast softmax attention. + """ + + if normalize_data: + # We have e^{qk^T/sqrt{d}} = e^{q_norm k_norm^T}, where + # w_norm = w * data_normalizer for w in {q,k}. + data_normalizer = 1.0 / (jnp.sqrt(jnp.sqrt(data.shape[-1]))) + else: + data_normalizer = 1.0 + ratio = 1.0 / jnp.sqrt(projection_matrix.shape[0]) + data_mod_shape = data.shape[0:len(batch_dims_t)] + projection_matrix.shape + data_thick_random_matrix = jnp.zeros(data_mod_shape) + projection_matrix + + data_dash = lax.dot_general( + data_normalizer * data, + data_thick_random_matrix, + (((data.ndim - 1,), (data_thick_random_matrix.ndim - 1,)), + (batch_dims_t, batch_dims_t)), + precision=precision) + + diag_data = jnp.square(data) + diag_data = jnp.sum(diag_data, axis=data.ndim - 1) + diag_data = (diag_data / 2.0) * data_normalizer * data_normalizer + diag_data = jnp.expand_dims(diag_data, axis=data.ndim - 1) + + last_dims_t = (len(data_dash.shape) - 1,) + if is_query: + data_dash = ratio * ( + jnp.exp(data_dash - diag_data - + jnp.max(data_dash, axis=last_dims_t, keepdims=True)) + eps) + else: + data_dash = ratio * ( + jnp.exp(data_dash - diag_data - jnp.max( + data_dash, axis=last_dims_t + attention_dims_t, keepdims=True)) + + eps) + + return data_dash + + +def sincos_softmax_kernel_feature_creator(data, + projection_matrix, + attention_dims_t, + batch_dims_t, + precision, + normalize_data=True): + """Constructs kernel sin-cos features for fast softmax attention. + + Args: + data: input for which features are computes + projection_matrix: random matrix used to compute features + attention_dims_t: tuple of attention dimensions + batch_dims_t: tuple of batch dimensions + precision: precision parameter + normalize_data: predicate indicating whether data should be normalized. + + Returns: + Random features for fast softmax attention. + """ + if normalize_data: + # We have: exp(qk^T/sqrt{d}) = exp(|q|^2/2sqrt{d}) * exp(|k|^2/2sqrt{d}) * + # exp(-(|q*c-k*c|^2)/2), where c = 1.0 / sqrt{sqrt{d}}. + data_normalizer = 1.0 / (jnp.sqrt(jnp.sqrt(data.shape[-1]))) + else: + data_normalizer = 1.0 + ratio = 1.0 / jnp.sqrt(projection_matrix.shape[0]) + data_mod_shape = data.shape[0:len(batch_dims_t)] + projection_matrix.shape + data_thick_random_matrix = jnp.zeros(data_mod_shape) + projection_matrix + + data_dash = lax.dot_general( + data_normalizer * data, + data_thick_random_matrix, + (((data.ndim - 1,), (data_thick_random_matrix.ndim - 1,)), + (batch_dims_t, batch_dims_t)), + precision=precision) + data_dash_cos = ratio * jnp.cos(data_dash) + data_dash_sin = ratio * jnp.sin(data_dash) + data_dash = jnp.concatenate((data_dash_cos, data_dash_sin), axis=-1) + + # Constructing D_data and data^{'} + diag_data = jnp.square(data) + diag_data = jnp.sum(diag_data, axis=data.ndim - 1) + diag_data = (diag_data / 2.0) * data_normalizer * data_normalizer + diag_data = jnp.expand_dims(diag_data, axis=data.ndim - 1) + # Additional renormalization for numerical stability + data_renormalizer = jnp.max(diag_data, attention_dims_t, keepdims=True) + diag_data -= data_renormalizer + diag_data = jnp.exp(diag_data) + data_prime = data_dash * diag_data + return data_prime + + +def generalized_kernel_feature_creator(data, projection_matrix, batch_dims_t, + precision, kernel_fn, kernel_epsilon, + normalize_data): + """Constructs kernel features for fast generalized attention. + + Args: + data: input for which features are computes + projection_matrix: matrix used to compute features + batch_dims_t: tuple of batch dimensions + precision: precision parameter + kernel_fn: kernel function used + kernel_epsilon: additive positive term added to every feature for numerical + stability + normalize_data: predicate indicating whether data should be normalized. + + Returns: + Random features for fast generalized attention. + """ + if normalize_data: + data_normalizer = 1.0 / (jnp.sqrt(jnp.sqrt(data.shape[-1]))) + else: + data_normalizer = 1.0 + if projection_matrix is None: + return kernel_fn(data_normalizer * data) + kernel_epsilon + else: + data_mod_shape = data.shape[0:len(batch_dims_t)] + projection_matrix.shape + data_thick_random_matrix = jnp.zeros(data_mod_shape) + projection_matrix + data_dash = lax.dot_general( + data_normalizer * data, + data_thick_random_matrix, + (((data.ndim - 1,), (data_thick_random_matrix.ndim - 1,)), + (batch_dims_t, batch_dims_t)), + precision=precision) + data_prime = kernel_fn(data_dash) + kernel_epsilon + return data_prime + + +def make_fast_softmax_attention(qkv_dim, + renormalize_attention=True, + numerical_stabilizer=0.000001, + nb_features=256, + ortho_features=True, + ortho_scaling=0.0, + redraw_features=True, + unidirectional=False, + nonnegative_features=True, + lax_scan_unroll=1): + """Construct a fast softmax attention method.""" + ''' + logging.info( + 'Fast softmax attention: %s features and orthogonal=%s, renormalize=%s', + nb_features, ortho_features, renormalize_attention) + ''' + if ortho_features: + matrix_creator = functools.partial( + GaussianOrthogonalRandomMatrix, + nb_features, + qkv_dim, + scaling=ortho_scaling) + else: + matrix_creator = functools.partial(GaussianUnstructuredRandomMatrix, + nb_features, qkv_dim) + if nonnegative_features: + + def kernel_feature_creator(data, + projection_matrix, + attention_dims_t, + batch_dims_t, + precision, + is_query, + normalize_data=True): + return nonnegative_softmax_kernel_feature_creator( + data, projection_matrix, attention_dims_t, batch_dims_t, precision, + is_query, normalize_data, numerical_stabilizer) + else: + + def kernel_feature_creator(data, + projection_matrix, + attention_dims_t, + batch_dims_t, + precision, + is_query, + normalize_data=True): + del is_query + return sincos_softmax_kernel_feature_creator(data, projection_matrix, + attention_dims_t, + batch_dims_t, precision, + normalize_data) + + attention_fn = FastAttentionviaLowRankDecomposition( + matrix_creator, + kernel_feature_creator, + renormalize_attention=renormalize_attention, + numerical_stabilizer=numerical_stabilizer, + redraw_features=redraw_features, + unidirectional=unidirectional, + lax_scan_unroll=lax_scan_unroll).dot_product_attention + return attention_fn + + +def make_fast_generalized_attention(qkv_dim, + renormalize_attention=True, + numerical_stabilizer=0.0, + nb_features=256, + features_type='deterministic', + kernel_fn=jax.nn.relu, + kernel_epsilon=0.001, + redraw_features=False, + unidirectional=False, + lax_scan_unroll=1): + """Construct a fast generalized attention menthod.""" + ''' + logging.info('Fast generalized attention.: %s features and renormalize=%s', + nb_features, renormalize_attention) + ''' + if features_type == 'ortho': + matrix_creator = functools.partial( + GaussianOrthogonalRandomMatrix, nb_features, qkv_dim, scaling=False) + elif features_type == 'iid': + matrix_creator = functools.partial(GaussianUnstructuredRandomMatrix, + nb_features, qkv_dim) + elif features_type == 'deterministic': + matrix_creator = None + else: + raise ValueError('Unknown feature value type') + + def kernel_feature_creator(data, + projection_matrix, + attention_dims_t, + batch_dims_t, + precision, + is_query, + normalize_data=False): + del attention_dims_t + del is_query + return generalized_kernel_feature_creator(data, projection_matrix, + batch_dims_t, precision, + kernel_fn, kernel_epsilon, + normalize_data) + + attention_fn = FastAttentionviaLowRankDecomposition( + matrix_creator, + kernel_feature_creator, + renormalize_attention=renormalize_attention, + numerical_stabilizer=numerical_stabilizer, + redraw_features=redraw_features, + unidirectional=unidirectional, + lax_scan_unroll=lax_scan_unroll).dot_product_attention + return attention_fn + + +class RandomMatrix(metaclass=abc.ABCMeta): + """Abstract class providing a method for constructing 2D random arrays. + + Class is responsible for constructing 2D random arrays. + """ + + @abc.abstractmethod + def get_2d_array(self): + raise NotImplementedError('Abstract method') + + +class GaussianUnstructuredRandomMatrix(RandomMatrix): + + def __init__(self, nb_rows, nb_columns, key): + self.nb_rows = nb_rows + self.nb_columns = nb_columns + self.key = key + + def get_2d_array(self): + return random.normal(self.key, (self.nb_rows, self.nb_columns)) + + +class GaussianOrthogonalRandomMatrix(RandomMatrix): + r"""Class providing a method to create Gaussian orthogonal matrix. + + Class is responsible for constructing 2D Gaussian orthogonal arrays. + """ + + def __init__(self, nb_rows, nb_columns, key, scaling=0): + self.nb_rows = nb_rows + self.nb_columns = nb_columns + self.key = key + self.scaling = scaling + + def get_2d_array(self): + nb_full_blocks = int(self.nb_rows / self.nb_columns) + block_list = [] + rng = self.key + for _ in range(nb_full_blocks): + rng, rng_input = jax.random.split(rng) + unstructured_block = random.normal(rng_input, + (self.nb_columns, self.nb_columns)) + q, _ = jnp.linalg.qr(unstructured_block) + q = jnp.transpose(q) + block_list.append(q) + remaining_rows = self.nb_rows - nb_full_blocks * self.nb_columns + if remaining_rows > 0: + rng, rng_input = jax.random.split(rng) + unstructured_block = random.normal(rng_input, + (self.nb_columns, self.nb_columns)) + q, _ = jnp.linalg.qr(unstructured_block) + q = jnp.transpose(q) + block_list.append(q[0:remaining_rows]) + final_matrix = jnp.vstack(block_list) + + if self.scaling == 0: + multiplier = jnp.linalg.norm( + random.normal(self.key, (self.nb_rows, self.nb_columns)), axis=1) + elif self.scaling == 1: + multiplier = jnp.sqrt(float(self.nb_columns)) * jnp.ones((self.nb_rows)) + else: + raise ValueError('Scaling must be one of {0, 1}. Was %s' % self.scaling) + + return jnp.matmul(jnp.diag(multiplier), final_matrix) + + +class FastAttention(metaclass=abc.ABCMeta): + """Abstract class providing a method for fast attention. + + Class is responsible for providing a method for fast + approximate attention. + """ + + @abc.abstractmethod + def dot_product_attention(self, + query, + key, + value, + dtype=jnp.float32, + bias=None, + axis=None, + broadcast_dropout=True, + dropout_rng=None, + dropout_rate=0., + deterministic=False, + precision=None): + """Computes dot-product attention given query, key, and value. + + This is the core function for applying fast approximate dot-product + attention. It calculates the attention weights given query and key and + combines the values using the attention weights. This function supports + multi-dimensional inputs. + Args: + query: queries for calculating attention with shape of [batch_size, dim1, + dim2, ..., dimN, num_heads, mem_channels]. + key: keys for calculating attention with shape of [batch_size, dim1, dim2, + ..., dimN, num_heads, mem_channels]. + value: values to be used in attention with shape of [batch_size, dim1, + dim2,..., dimN, num_heads, value_channels]. + dtype: the dtype of the computation (default: float32) + bias: bias for the attention weights. This can be used for incorporating + autoregressive mask, padding mask, proximity bias. + axis: axises over which the attention is applied. + broadcast_dropout: bool: use a broadcasted dropout along batch dims. + dropout_rng: JAX PRNGKey: to be used for dropout. + dropout_rate: dropout rate. + deterministic: bool, deterministic or not (to apply dropout). + precision: numerical precision of the computation see `jax.lax.Precision` + for details. + + Returns: + Output of shape [bs, dim1, dim2, ..., dimN,, num_heads, value_channels]. + """ + raise NotImplementedError('Abstract method') + + +def _numerator(z_slice_shape, precision, unroll=1): + """Computes the numartor.""" + + def fwd(qs, ks, vs): + + def body(p, qkv): + (q, k, v) = qkv + p += jnp.einsum('...m,...d->...md', k, v, precision=precision) + x_slice = jnp.einsum('...m,...md->...d', q, p, precision=precision) + return p, x_slice + + init_value = jnp.zeros(z_slice_shape) + p, w = lax.scan(body, init_value, (qs, ks, vs), unroll=unroll) + return w, (p, qs, ks, vs) + + def bwd(pqkv, w_ct): + + def body(carry, qkv_xct): + p, p_ct = carry + q, k, v, x_ct = qkv_xct + q_ct = jnp.einsum('...d,...md->...m', x_ct, p, precision=precision) + p_ct += jnp.einsum('...d,...m->...md', x_ct, q, precision=precision) + k_ct = jnp.einsum('...md,...d->...m', p_ct, v, precision=precision) + v_ct = jnp.einsum('...md,...m->...d', p_ct, k, precision=precision) + p -= jnp.einsum('...m,...d->...md', k, v, precision=precision) + return (p, p_ct), (q_ct, k_ct, v_ct) + + p, qs, ks, vs = pqkv + _, (qs_ct, ks_ct, vs_ct) = lax.scan( + body, (p, jnp.zeros_like(p)), (qs, ks, vs, w_ct), + reverse=True, + unroll=unroll) + return qs_ct, ks_ct, vs_ct + + @jax.custom_vjp + def _numerator_impl(qs, ks, vs): + w, _ = fwd(qs, ks, vs) + return w + + _numerator_impl.defvjp(fwd, bwd) + + return _numerator_impl + + +def _denominator(t_slice_shape, precision, unroll=1): + """Computes the denominator.""" + + def fwd(qs, ks): + + def body(p, qk): + q, k = qk + p += k + x = jnp.einsum('...m,...m->...', q, p, precision=precision) + return p, x + + p = jnp.zeros(t_slice_shape) + p, r = lax.scan(body, p, (qs, ks), unroll=unroll) + return r, (qs, ks, p) + + def bwd(qkp, r_ct): + + def body(carry, qkx): + p, p_ct = carry + q, k, x_ct = qkx + q_ct = jnp.einsum('...,...m->...m', x_ct, p, precision=precision) + p_ct += jnp.einsum('...,...m->...m', x_ct, q, precision=precision) + k_ct = p_ct + p -= k + return (p, p_ct), (q_ct, k_ct) + + qs, ks, p = qkp + _, (qs_ct, ks_ct) = lax.scan( + body, (p, jnp.zeros_like(p)), (qs, ks, r_ct), + reverse=True, + unroll=unroll) + return (qs_ct, ks_ct) + + @jax.custom_vjp + def _denominator_impl(qs, ks): + r, _ = fwd(qs, ks) + return r + + _denominator_impl.defvjp(fwd, bwd) + + return _denominator_impl + + +class FastAttentionviaLowRankDecomposition(FastAttention): + """Class providing a method for fast attention via low rank decomposition. + + Class is responsible for providing a method for fast + dot-product attention with the use of low rank decomposition (e.g. with + random feature maps). + """ + + def __init__(self, + matrix_creator, + kernel_feature_creator, + renormalize_attention, + numerical_stabilizer, + redraw_features, + unidirectional, + lax_scan_unroll=1): # For optimal GPU performance, set to 16. + rng = random.PRNGKey(0) + self.matrix_creator = matrix_creator + self.projection_matrix = self.draw_weights(rng) + self.kernel_feature_creator = kernel_feature_creator + self.renormalize_attention = renormalize_attention + self.numerical_stabilizer = numerical_stabilizer + self.redraw_features = redraw_features + self.unidirectional = unidirectional + self.lax_scan_unroll = lax_scan_unroll + + def draw_weights(self, key): + if self.matrix_creator is None: + return None + matrixrng, _ = random.split(key) + projection_matrix = self.matrix_creator(key=matrixrng).get_2d_array() + return projection_matrix + + def dot_product_attention(self, + query, + key, + value, + dtype=jnp.float32, + bias=None, + axis=None, + broadcast_dropout=True, + dropout_rng=None, + dropout_rate=0., + deterministic=False, + precision=None): + + assert key.shape[:-1] == value.shape[:-1] + assert (query.shape[0:1] == key.shape[0:1] and + query.shape[-1] == key.shape[-1]) + if axis is None: + axis = tuple(range(1, key.ndim - 2)) + if not isinstance(axis, Iterable): + axis = (axis,) + assert key.ndim == query.ndim + assert key.ndim == value.ndim + for ax in axis: + if not (query.ndim >= 3 and 1 <= ax < query.ndim - 2): + raise ValueError('Attention axis must be between the batch ' + 'axis and the last-two axes.') + n = key.ndim + + # Constructing projection tensor. + if self.redraw_features: + query_seed = lax.convert_element_type( + jnp.ceil(jnp.sum(query) * 10000000.0), jnp.int32) + rng = random.PRNGKey(query_seed) + self.projection_matrix = self.draw_weights(rng) + + # batch_dims is , num_heads> + batch_dims = tuple(np.delete(range(n), axis + (n - 1,))) + # q & k -> (bs, , num_heads, , channels) + qk_perm = batch_dims + axis + (n - 1,) + k_extra_perm = axis + batch_dims + (n - 1,) + key_extra = key.transpose(k_extra_perm) + key = key.transpose(qk_perm) + query = query.transpose(qk_perm) + # v -> (bs, , num_heads, , channels) + v_perm = batch_dims + axis + (n - 1,) + value = value.transpose(v_perm) + batch_dims_t = tuple(range(len(batch_dims))) + attention_dims_t = tuple( + range(len(batch_dims), + len(batch_dims) + len(axis))) + + # Constructing tensors Q^{'} and K^{'}. + query_prime = self.kernel_feature_creator(query, self.projection_matrix, + attention_dims_t, batch_dims_t, + precision, True) + query_prime = query_prime.astype(dtype) + key_prime = self.kernel_feature_creator(key, self.projection_matrix, + attention_dims_t, batch_dims_t, + precision, False) + key_prime = key_prime.astype(dtype) + + if self.unidirectional: + index = attention_dims_t[0] + z_slice_shape = key_prime.shape[0:len(batch_dims_t)] + ( + key_prime.shape[-1],) + (value.shape[-1],) + + numerator_fn = _numerator(z_slice_shape, precision, self.lax_scan_unroll) + w = numerator_fn( + jnp.moveaxis(query_prime, index, 0), + jnp.moveaxis(key_prime, index, 0), jnp.moveaxis(value, index, 0)) + + # Constructing w = (Q^{'}(K^{'})^{T})_{masked}V + w = jnp.moveaxis(w, 0, index) + + if not self.renormalize_attention: + # Unidirectional, not-normalized attention. + perm_inv = _invert_perm(qk_perm) + result = w.transpose(perm_inv) + return result + else: + # Unidirectional, normalized attention. + thick_all_ones = jnp.zeros(key.shape[0:-1]) + jnp.ones( + key_extra.shape[0:len(axis)]) + + index = attention_dims_t[0] + t_slice_shape = key_prime.shape[0:len(batch_dims_t)] + ( + key_prime.shape[-1],) + denominator_fn = _denominator(t_slice_shape, precision, + self.lax_scan_unroll) + r = denominator_fn( + jnp.moveaxis(query_prime, index, 0), + jnp.moveaxis(key_prime, index, 0)) + + r = jnp.moveaxis(r, 0, index) + else: + contract_query = tuple( + range(len(batch_dims) + len(axis), + len(batch_dims) + len(axis) + 1)) + contract_z = tuple(range(len(batch_dims), len(batch_dims) + 1)) + # Constructing z = (K^{'})^{T}V + # z (bs, , num_heads, channels_m, channels_v) + z = lax.dot_general( + key_prime, + value, + ((attention_dims_t, attention_dims_t), (batch_dims_t, batch_dims_t)), + precision=precision) + # Constructing w = Q^{'} z = Q^{'}(K^{'})^{T}V + # q (bs, , num_heads, , channels_m) + # z (bs, , num_heads, channels_m, channels_v) + # w (bs, , num_heads, , channels_v) + w = lax.dot_general( + query_prime, + z, ((contract_query, contract_z), (batch_dims_t, batch_dims_t)), + precision=precision) + if not self.renormalize_attention: + # Bidirectional, not-normalized attention. + perm_inv = _invert_perm(qk_perm) + result = w.transpose(perm_inv) + return result + else: + # Bidirectional, normalized attention. + thick_all_ones = jnp.zeros(key.shape[0:-1]) + jnp.ones( + key_extra.shape[0:len(axis)]) + thick_all_ones = thick_all_ones.astype(dtype) + contract_key = tuple( + range(len(batch_dims), + len(batch_dims) + len(axis))) + contract_thick_all_ones = tuple( + range(thick_all_ones.ndim - len(axis), thick_all_ones.ndim)) + # Construct t = (K^{'})^{T} 1_L + # k (bs, , num_heads, , channels) + t = lax.dot_general( + key_prime, + thick_all_ones, ((contract_key, contract_thick_all_ones), + (batch_dims_t, batch_dims_t)), + precision=precision) + + # Construct partition function: r = Q^{'} t = Q^{'}(K^{'})^{T} 1_L + # q_p (bs, , num_heads, , channs_m) + # t (bs, , num_heads, channels_m) + r = lax.dot_general( + query_prime, + t, (((query_prime.ndim - 1,), (t.ndim - 1,)), + (batch_dims_t, range(0, + len(t.shape) - 1))), + precision=precision) + + r = r + 2 * self.numerical_stabilizer * ( + jnp.abs(r) <= self.numerical_stabilizer) + r = jnp.reciprocal(r) + r = jnp.expand_dims(r, len(r.shape)) + # w (bs, , num_heads, , channels_v) + # r (bs, , num_heads, , extra_channel) + result = w * r + # back to (bs, dim1, dim2, ..., dimN, num_heads, channels) + perm_inv = _invert_perm(qk_perm) + result = result.transpose(perm_inv) + return result + + +def _invert_perm(perm): + perm_inv = [0] * len(perm) + for i, j in enumerate(perm): + perm_inv[j] = i + return tuple(perm_inv) diff --git a/scenic/projects/fast_vit/tests/__init__.py b/scenic/projects/fast_vit/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/fast_vit/tests/test_model_utils.py b/scenic/projects/fast_vit/tests/test_model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..2746469723244ffffb774dad0b1d1ebd37ce82fb --- /dev/null +++ b/scenic/projects/fast_vit/tests/test_model_utils.py @@ -0,0 +1,192 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for model_utils.py.""" + +import functools +from absl.testing import absltest +from absl.testing import parameterized +import jax +from jax import random +import jax.numpy as jnp +import numpy as np +from scenic.projects.fast_vit import model_utils + + +class AttentionLayersTest(parameterized.TestCase): + """Tests for modules in model_utils.py.""" + + def test_linformer_encoder_self_attention(self): + """Tests EncoderSelfAttention.""" + rng = random.PRNGKey(0) + x = jnp.ones((4, 16, 32)) + n_heads = 2 + encoder_self_attention_def = functools.partial( + model_utils.LinformerEncoderAttention, num_heads=n_heads) + encoder_vars = encoder_self_attention_def().init(rng, x, deterministic=True) + y = encoder_self_attention_def().apply(encoder_vars, x, deterministic=True) + # Test outputs shape. + self.assertEqual(y.shape, x.shape) + + def test_linformer_encoder_self_attention_w_dropout(self): + """Tests EncoderSelfAttention with dropout.""" + rng = random.PRNGKey(0) + rng, dropout_rng = random.split(rng) + x = jnp.ones((4, 16, 32)) + n_heads = 2 + encoder_self_attention_def = functools.partial( + model_utils.LinformerEncoderAttention, + num_heads=n_heads, + dropout_rate=0.1) + encoder_vars = encoder_self_attention_def().init(rng, x, deterministic=True) + y = encoder_self_attention_def().apply( + encoder_vars, x, deterministic=False, rngs={'dropout': dropout_rng}) + # Test outputs shape. + self.assertEqual(y.shape, x.shape) + + @parameterized.named_parameters([ + ('test_softmax', 'softmax'), + ('test_generalized', 'generalized'), + ]) + def test_performer_encoder_self_attention(self, attention_fn_cls): + """Tests PerformerEncoderAttention.""" + rng = random.PRNGKey(0) + x = jnp.ones((4, 16, 32)) + n_heads = 2 + encoder_self_attention_def = functools.partial( + model_utils.PerformerEncoderAttention, + num_heads=n_heads, + attention_fn_cls=attention_fn_cls) + encoder_vars = encoder_self_attention_def().init( + rng, x, x, deterministic=True) + y = encoder_self_attention_def().apply( + encoder_vars, x, x, deterministic=True) + # Test outputs shape. + self.assertEqual(y.shape, x.shape) + + @parameterized.named_parameters([ + ('test_softmax', 'softmax'), + ('test_generalized', 'generalized'), + ]) + def test_performer_encoder_self_attention_w_dropout(self, attention_fn_cls): + """Tests PerformerEncoderAttention with dropout.""" + rng = random.PRNGKey(0) + rng, dropout_rng = random.split(rng) + x = jnp.ones((4, 16, 32)) + n_heads = 2 + encoder_self_attention_def = functools.partial( + model_utils.PerformerEncoderAttention, + num_heads=n_heads, + attention_fn_cls=attention_fn_cls) + encoder_vars = encoder_self_attention_def().init( + rng, x, x, deterministic=True) + y = encoder_self_attention_def().apply( + encoder_vars, x, x, deterministic=False, rngs={'dropout': dropout_rng}) + # Test outputs shape. + self.assertEqual(y.shape, x.shape) + + @parameterized.named_parameters([('test_axi1', 1), ('test_axi2', 2)]) + def test_axial_reshaping_utils(self, axis): + """Tests fo get_axial_1d_input and get_axial_2d_input.""" + input_shape = (4, 8, 16, 32) # Shape = `[bs, h, w, c]` + inputs_2d = jnp.array(np.random.normal(size=input_shape)) + inputs_1d = model_utils.get_axial_1d_input(inputs_2d, axis=axis) + inputs_back_to_2d = model_utils.get_axial_2d_input( + inputs_1d, axis=axis, two_d_shape=input_shape) + self.assertTrue(jnp.array_equal(inputs_2d, inputs_back_to_2d)) + + +class TopKTokenSelectorTest(parameterized.TestCase): + """Tests for token selector module.""" + + @parameterized.named_parameters([ + ('pool_unselected', True, False, False, 6), + ('only_selected', False, False, False, 5), + ('pool_unselected_exclude_cls', True, True, False, 7), + ('only_selected_exclude_cls', False, True, False, 6), + ('pool_unselected_sample', True, False, True, 6), + ('only_selected_sample', False, False, True, 5), + ('pool_unselected_exclude_cls_sample', True, True, True, 7), + ('only_selected_exclude_cls_sample', False, True, True, 6), + ]) + def test_top_k_selector(self, + pool_unselected_tokens, + exclude_cls, + sample_tokens, + expected_output_len): + """Tests Top-K selector.""" + rng, sample_rng = random.split(random.PRNGKey(0)) + x = jnp.ones((4, 16, 32)) + top_k = 5 + top_selector = functools.partial( + model_utils.TopKTokenSelector, + top_k=top_k, + sample_tokens=sample_tokens, + pool_unselected_tokens=pool_unselected_tokens, + exclude_cls=exclude_cls, + ) + variable = top_selector().init(rng, x, train=False) + y = top_selector().apply( + variable, x, train=True, rngs={'dropout': sample_rng}) + # Test outputs shape. + expected_shape = (4, expected_output_len, 32) + self.assertEqual(y.shape, expected_shape) + + @parameterized.named_parameters([ + ('replacement', + (32, 6, 10), 7, True, (32, 6, 7), False, False, False), + ('replacement_nonunique', + (32, 6, 10), 11, None, (32, 6, 11), False, False, True), + ('no_replacement', + (32, 6, 10), 10, False, (32, 6, 10), False, True, False), + ('no_replacement_raises', + (32, 6, 10), 11, False, None, True, None, None), + ]) + def test_sample_categorial(self, + logit_shape, + num_samples, + replacement, + expected_shape, + expected_raise, + expected_unique, + expeted_nonunique): + """Test categorial sampler.""" + rng, sample_rng = random.split(random.PRNGKey(0)) + logits = random.normal(rng, logit_shape) + + kwargs = {} + if replacement is not None: + kwargs['replacement'] = replacement + + if expected_raise: + with self.assertRaises(ValueError): + samples = model_utils.sample_categorical( + sample_rng, logits, num_samples, **kwargs) + else: + samples = model_utils.sample_categorical( + sample_rng, logits, num_samples, **kwargs) + self.assertEqual(samples.shape, expected_shape) + + if expected_unique or expeted_nonunique: + samples = jnp.reshape(samples, (-1, expected_shape[-1])) + samples = jax.device_get(samples) + for sample in samples: + if expected_unique: + self.assertEqual(len(set(sample.tolist())), len(sample)) + if expeted_nonunique: + self.assertLess(len(set(sample.tolist())), len(sample)) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/fast_vit/xvit.py b/scenic/projects/fast_vit/xvit.py new file mode 100644 index 0000000000000000000000000000000000000000..cc4b146b248f3ff238240d33241898ed65e6e82f --- /dev/null +++ b/scenic/projects/fast_vit/xvit.py @@ -0,0 +1,551 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""X-ViT model. + +Todo(dehghani, yitay): Write a paper on the results of XViT. +""" + +from typing import Any, Optional + +import flax.linen as nn +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models.multilabel_classification_model import MultiLabelClassificationModel +from scenic.model_lib.layers import attention_layers +from scenic.model_lib.layers import nn_layers +from scenic.model_lib.layers import nn_ops +from scenic.projects.baselines import vit +from scenic.projects.fast_vit import model_utils + + +class Encoder1D(nn.Module): + """XViT 1D Encoder. + + Attributes: + mlp_dim: Dimension of the MLP on top of attention block. + num_layers: Number of layers. + attention_configs: Configurations passed to the self-attention. + attention_fn: Self-attention function used in the model. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + num_kernel_features: Number of kernel features used. + redraw: Whether to redraw (applicabl only if random features are used). + """ + mlp_dim: int + num_layers: int + attention_configs: ml_collections.ConfigDict + attention_fn: str + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + num_kernel_features: int = 256 + redraw: bool = True + + @nn.compact + def __call__( + self, + inputs: jnp.ndarray, + train: bool, + ) -> jnp.ndarray: + """Applies Transformer model on the inputs. + + Args: + inputs: Input data. + train: If it is training. + + Returns: + """ + assert inputs.ndim == 3 # Shape is `[batch, len, emb]`. + x = attention_layers.Add1DPositionEmbedding( + posemb_init=nn.initializers.normal(stddev=0.02), # From BERT. + name='posembed_input')( + inputs) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + # Input encoder. + for lyr in range(self.num_layers): + x = model_utils.Encoder1DBlock( # pytype: disable=wrong-arg-types # jax-ndarray + mlp_dim=self.mlp_dim, + attention_fn=self.attention_fn, + attention_configs=self.attention_configs, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + num_kernel_features=self.num_kernel_features, + redraw=self.redraw, + name=f'encoder_block_{lyr}')( + x, inputs_kv=None, deterministic=not train) + + return nn.LayerNorm(name='encoder_norm')(x) + + +class Encoder1DPyramid(nn.Module): + """Pyramid Transformer Encoder. + + Attributes: + mlp_dim: Dimension of the MLP on top of attention block. + num_layers: Number of layers. + attention_configs: Configurations passed to the self-attention. + attention_fn: Self-attention function used in the model. + transformer_encoder_configs: Transformer encoder configurations. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + classifier: Type of classifier used. + """ + mlp_dim: int + num_layers: int + attention_configs: ml_collections.ConfigDict + attention_fn: str + transformer_encoder_configs: ml_collections.ConfigDict + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + classifier: str = 'gap' + + @nn.compact + def __call__( + self, + inputs: jnp.ndarray, + train: bool, + ) -> jnp.ndarray: + """Applies Transformer model on the inputs in Pyramid style. + + Args: + inputs: Input data. + train: If it is training. + + Returns: + Output of a transformer encoder. + """ + assert inputs.ndim == 3 # Shape is `[batch, len, emb]`. + x = attention_layers.Add1DPositionEmbedding( + posemb_init=nn.initializers.normal(stddev=0.02), # From BERT. + name='posembed_input')( + inputs) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + pyramid_lens = self.transformer_encoder_configs['pyramid_lens'] + pyramid_mode = self.transformer_encoder_configs['pyramid_mode'] + pyramid_attn_func = self.transformer_encoder_configs.get( + 'pyramid_attn_func', []) + + if len(pyramid_lens) != self.num_layers: + raise ValueError('Does not support pyramid lens!=num_layers!') + + # Input encoder. + for lyr in range(self.num_layers): + if not pyramid_attn_func: + layer_attn_func = self.attention_fn + else: + assert len(pyramid_attn_func) == self.num_layers + layer_attn_func = pyramid_attn_func[lyr] + + # TODO(yitay) Support upsampling. + target_down_scale = abs(pyramid_lens[lyr]) + if target_down_scale != 1: # Only scale if scaling is more than 1. + + if pyramid_mode == 'pool': + length = x.shape[1] + assert length % target_down_scale == 0, ( + f'Current length ({length}) must be divisible by scale ' + f'({target_down_scale})') + x = nn.max_pool( + x, (target_down_scale,), + strides=(target_down_scale,), + padding='VALID') + + elif pyramid_mode == '2d_pool': + # Here `-n` means we down-sample by (n, n) on the grid. + if self.classifier == 'token': + x_cls_token, x = x[:, :1, :], x[:, 1:, :] + else: + x_cls_token, x = x[:, :0, :], x[:, 0:, :] + + bs, l, d = x.shape + window_size = int(np.sqrt(l)) + assert window_size * window_size == l + x = x.reshape(bs, window_size, window_size, d) + assert window_size % target_down_scale == 0, ( + f'Current window size ({window_size}) must be divisible by scale ' + f'({target_down_scale})') + + x = nn.max_pool( + x, (target_down_scale, target_down_scale), + strides=(target_down_scale, target_down_scale), + padding='VALID') + x = x.reshape(bs, -1, d) + x = jnp.concatenate([x_cls_token, x], axis=1) + + elif pyramid_mode == 'cnn': + # Here `-n` means we down-sample by (n, n) on the grid + if self.classifier == 'token': + x_cls_token, x = x[:, :1, :], x[:, 1:, :] + else: + x_cls_token, x = x[:, :0, :], x[:, 0:, :] + + bs, l, d = x.shape + window_size = int(np.sqrt(l)) + assert window_size * window_size == l + x = x.reshape(bs, window_size, window_size, d) + assert window_size % target_down_scale == 0, ( + f'Current window size ({window_size}) must be divisible by scale ' + f'({target_down_scale})') + x = nn.Conv( + x.shape[-1], # TODO(dehghani): make this configurable + (target_down_scale, target_down_scale), + strides=(target_down_scale, target_down_scale), + padding='VALID')( + x) + x = x.reshape(bs, -1, d) + x = jnp.concatenate([x_cls_token, x], axis=1) + + elif pyramid_mode == 'memory': + # TODO(yitay) Inducing set point method in Set Transformer. + raise NotImplementedError + + elif pyramid_mode == 'linformer': + # Linformer based downsampling. + cur_length = x.shape[-2] + assert cur_length % target_down_scale == 0, ( + f'Current length ({cur_length}) must be divisible by scale ' + f'({target_down_scale})') + new_length = cur_length // target_down_scale + x = nn.LayerNorm(name=f'pool_norm_{lyr}')(x) + x = model_utils.LinformerEncoderAttention( + num_heads=self.attention_configs['num_heads'], + kernel_init=nn.initializers.xavier_uniform(), + broadcast_dropout=False, + proj_mode='linear', + low_rank_features=new_length, + downsample=True, + dropout_rate=self.attention_dropout_rate)( + x, deterministic=not train) + + # Input encoder. + x = model_utils.Encoder1DBlock( # pytype: disable=wrong-arg-types # jax-ndarray + mlp_dim=self.mlp_dim, + attention_fn=layer_attn_func, + attention_configs=self.attention_configs, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name=f'encoder_block_{lyr}')( + x, inputs_kv=None, deterministic=not train) + + return nn.LayerNorm(name='encoder_norm')(x) + + +class EncoderAxial(nn.Module): + """Transformer Axial Encoder. + + EncoderAxial replaces each Transformer block, i.e. `self-attention + MLP` with + two axial attention block: `[self-row-attention + MLP] + [self-col-attention + + MLP]`. + Attributes: + mlp_dim: Dimension of the MLP on top of attention block. + num_layers: Number of layers. + transformer_encoder_type: Type of the transformer encoder, one of + ['axial', 'axial_attention']. + attention_configs: Configurations passed to the self-attention. + attention_fn: Self-attention function used in the model. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + """ + mlp_dim: int + num_layers: int + transformer_encoder_type: ml_collections.ConfigDict + attention_configs: ml_collections.ConfigDict + attention_fn: str + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, train: bool = False) -> jnp.ndarray: + """Applies Axial Transformer model on the inputs. + + Args: + inputs: Input data. + train: If it is training. + + Returns: + Output of a transformer encoder. + """ + assert inputs.ndim == 4 # Shape is `[batch, h, w, emb]`. + x = attention_layers.Add2DPositionEmbedding( + posemb_init=nn.initializers.normal(stddev=0.02), # From BERT. + name='posembed_input')( + inputs) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + # Input Encoder + for lyr in range(self.num_layers): + if self.transformer_encoder_type == 'axial': + two_d_shape = x.shape + # Row attention. + x = model_utils.get_axial_1d_input(x, axis=1) + x = model_utils.Encoder1DBlock( # pytype: disable=wrong-arg-types # jax-ndarray + mlp_dim=self.mlp_dim, + attention_fn=self.attention_fn, + attention_configs=self.attention_configs, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name=f'encoder_block_row_{lyr}')( + x, inputs_kv=None, deterministic=not train) + x = model_utils.get_axial_2d_input(x, axis=1, two_d_shape=two_d_shape) + + # Column attention. + x = model_utils.get_axial_1d_input(x, axis=2) + x = model_utils.Encoder1DBlock( # pytype: disable=wrong-arg-types # jax-ndarray + mlp_dim=self.mlp_dim, + attention_fn=self.attention_fn, + attention_configs=self.attention_configs, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name=f'encoder_block_col_{lyr}')( + x, inputs_kv=None, deterministic=not train) + x = model_utils.get_axial_2d_input(x, axis=2, two_d_shape=two_d_shape) + + elif self.transformer_encoder_type == 'axial_attention': + x = model_utils.EncoderAxialBlock( + mlp_dim=self.mlp_dim, + attention_fn=self.attention_fn, + attention_configs=self.attention_configs, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name=f'axial_encoder_fblock_{lyr}')( + x, deterministic=not train) + + else: + raise ValueError('Undefined transformer encoder type: ' + f'{self.transformer_encoder_type}.') + + return nn.LayerNorm(x, name='encoder_norm') # type: ignore # jnp-type + + +class XViT(nn.Module): + """XViT model. + + Attributes: + num_outputs: number of classes. + mlp_dim: Dimension of the MLP on top of attention block. + num_layers: Number of layers. + attention_configs: Configurations passed to the self-attention. + attention_fn: Self-attention function used in the model. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden dimension on the stem of the model. + fast_vit: Configurations of the fast_vit (omnidirectional attention). + representation_size: Size of the final representation. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout rate for attention heads. + classifier: Type of the classifier. + """ + num_outputs: int + mlp_dim: int + num_layers: int + attention_configs: ml_collections.ConfigDict + attention_fn: ml_collections.ConfigDict + patches: ml_collections.ConfigDict + hidden_size: int + transformer_encoder_configs: ml_collections.ConfigDict + representation_size: Optional[int] = None + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + classifier: str = 'gap' + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + *, + train: bool, + debug: Optional[bool] = False) -> jnp.ndarray: + """X-ViT model. + + Args: + inputs: Input data. + train: If it is training. + debug: If we are running the model in the debug mode. + + Returns: + Output of the model. + """ + _, height, width, _ = inputs.shape + patch_height, patch_width = self.patches.size + grid_height, grid_width = height // patch_height, width // patch_width + patch_stride_height, patch_stride_width = self.patches.get( + 'strides', self.patches.size) + x = nn.Conv( + self.hidden_size, (patch_height, patch_width), + strides=(patch_stride_height, patch_stride_width), + padding='VALID', + name='embedding')( + inputs) + + transformer_encoder_type = self.transformer_encoder_configs.type + if transformer_encoder_type in ['global', 'pyramid']: + bs, h, w, c = x.shape + x = jnp.reshape(x, [bs, h * w, c]) + if self.classifier == 'token': + # Only when we do flattening here, we can add the extra CLS token, in + # other cases, we use the first token as CLS token. + cls = self.param('cls', nn.initializers.zeros, (1, 1, c), x.dtype) + cls = jnp.tile(cls, [bs, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + + if transformer_encoder_type == 'global': + x = Encoder1D( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + attention_configs=self.attention_configs, + attention_fn=self.attention_fn, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name='Transformer')( + x, train=train) + cls_token = x[:, 0] + + elif transformer_encoder_type == 'pyramid': + if self.transformer_encoder_configs['pyramid_mode'] in ['2d_pool', 'cnn']: + assert grid_height == grid_width, ( + 'For now, only square grid is supported for pyramid with 2d ' + 'pooling or cnn pooling.') + x = Encoder1DPyramid( + mlp_dim=self.mlp_dim, + num_layers=self.fnum_layers, + attention_configs=self.attention_configs, + attention_fn=self.attention_fn, + transformer_encoder_configs=self.transformer_encoder_configs, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + classifier=self.classifier, + name='Transformer')( + x, train=train) + cls_token = x[:, 0] + + elif transformer_encoder_type in [ + 'axial', 'axial_attention', 'grid', 'grid_attention' + ]: + if transformer_encoder_type in ['grid', 'grid_attention']: + # First put patches of patches in rows. (we already projected pixels to + # patches in the stem and at this level, the input tokens are patches). + # TODO(dehghani): Check if nn_ops.extract_image_patches is faster. + pp_size = self.transformer_encoder_configs.patches_of_patches_size + x = nn_ops.extract_patches(lhs=x, rhs_shape=pp_size, strides=pp_size) + # TODO(dehghani): Check if we can output a 4D tensor directly and get + # rid of this reshape. + bs, ph, pw, h, w, c = x.shape + x = x.reshape(bs, ph * pw, h * w, c) + # Now, we simply need to run axial/axial_attention to get + # inter-patch and intra-patch attention. + if transformer_encoder_type == 'grid': + transformer_encoder_type = 'axial' + elif transformer_encoder_type == 'grid_attention': + transformer_encoder_type = 'axial_attention' + + x = EncoderAxial( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + transformer_encoder_type=transformer_encoder_type, + attention_configs=self.attention_configs, + attention_fn=self.attention_fn, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name='Transformer')( + x, train=train) + cls_token = x[:, 0, 0] + + else: + raise ValueError( + f'Transformer encoder type {transformer_encoder_type} is not defined!' + ) + + if self.classifier in ('token', '0'): + x = cls_token + + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=1) + + x = jnp.mean(x, axis=list(range(1, x.ndim - 1))) + + if self.representation_size is not None: + x = nn.Dense(self.representation_size, name='pre_logits')(x) + x = nn.tanh(x) + else: + x = nn_layers.IdentityLayer(name='pre_logits')(x) + x = nn.Dense( + self.num_outputs, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x) + return x + + +class XViTMultiLabelClassificationModel(MultiLabelClassificationModel): + """X-ViT model for multi-label classification task.""" + + def build_flax_model(self): + return XViT( + num_outputs=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + attention_configs=self.config.model.attention_configs, + attention_fn=self.config.model.attention_fn, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + transformer_encoder_configs=self.config.model + .transformer_encoder_configs, + representation_size=self.config.model.representation_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.), + ) + + def default_flax_model_config(self): + return ml_collections.ConfigDict( + dict( + model=dict( + attention_fn='standard', + attention_configs={'num_heads': 2}, + transformer_encoder_configs={'type': 'global'}, + num_layers=1, + representation_size=16, + mlp_dim=32, + dropout_rate=0., + attention_dropout_rate=0., + hidden_size=16, + patches={'size': (4, 4)}, + classifier='gap', + ), + data_dtype_str='float32')) + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is written to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return vit.init_vit_from_train_state(train_state, restored_train_state, + self.config, restored_model_cfg) diff --git a/scenic/projects/gerald/README.md b/scenic/projects/gerald/README.md new file mode 100644 index 0000000000000000000000000000000000000000..46b80c1ac5dfb108039cbfaf5480bb608f99e391 --- /dev/null +++ b/scenic/projects/gerald/README.md @@ -0,0 +1,45 @@ +# GER-ALD: A Generative Approach for Wikipedia-Scale Visual Entity Recognition + +JAX implementation for visual Generative Entity Recognition (GER) with unAmbiguous Language-based Discriminative (ALD) codes. +For details, see [`arXiv`](https://arxiv.org/abs/2403.02041). + + + +## GER training +Like other projects in Scenic, all model parameters, training sets and datasets are specified using [configuration files](configs). + +An example command-line to train our GER-ALD pre-training using this [config file](configs/gerald_pretraining_config.py) is: + +```shell +$ python -m scenic.projects.gerald.main \ + --config=scenic/projects/gerald/configs/gerald_pretraining_config.py \ + --workdir=gerald_pretraining/ +``` + +Once the pretraining has finished, you can finetune the resulting checkpoint with the following config. +Note that in the config you should populate the field `config.weights` to point to your pretrained model. +We run this [config file](configs/gerald_finetuning_config.py) in the following way: + +```shell +$ python -m scenic.projects.gerald.main \ + --config=scenic/projects/gerald/configs/gerald_finetuning_config.py \ + --workdir=gerald_finetuning/ +``` + + +## ALD codes creation +You can create ALD codes by using this [script](prepare_ald_codes.py). +Note that it assumes that you have pre-tokenized the entity names. + +## Citation + +If you use our `GER-ALD` project, please cite the following BibTeX entry: + +``` +@inproceedings{caron2024generative, + title={A generative approach for Wikipedia-scale visual entity recognition}, + author={Caron, Mathilde and Iscen, Ahmet and Fathi, Alireza and Schmid, Cordelia}, + booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition}, + year={2024} +} +``` diff --git a/scenic/projects/gerald/__init__.py b/scenic/projects/gerald/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/gerald/configs/__init__.py b/scenic/projects/gerald/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/gerald/configs/gerald_finetuning_config.py b/scenic/projects/gerald/configs/gerald_finetuning_config.py new file mode 100644 index 0000000000000000000000000000000000000000..7ca0309dbf00648182aff8f21c6a7de04947d608 --- /dev/null +++ b/scenic/projects/gerald/configs/gerald_finetuning_config.py @@ -0,0 +1,89 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +"""Default config for launching a GER-ALD finetuning.""" + +import ml_collections + + +def get_config(): + """Returns the configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'gerald_training' + + # Dataset. + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 1000 + config.dataset_configs.tokenizer_type = 'bert' + config.dataset_configs.max_context_tokens = 20 + config.data_dtype_str = 'float32' + config.dataset_configs.data_dir = 'where_your_data_is' + config.dataset_configs.train_datasets = ('dataset1-split1', 'dataset2-split2') + config.dataset_configs.eval_datasets = ('name_of_seen_split', 'name_of_unseen_split') + config.dataset_configs.wikid2id_path = 'file_mapping_each_entity_identifier_to_an_unique_int_id' + + config.rng_seed = 0 + + # GER codes. + config.vocab_size = 30522 - 2 + config.code_length = 4 + config.ger_bos = 101 + config.ger_eos = 102 + config.load_codes_from = path_to_codes + + # Model. + config.model = ml_collections.ConfigDict() + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.use_ln_pre = True + config.model.backbone_args.use_ln_post = True + config.model.backbone_args.pe_bias = False + config.model.backbone_args.use_class_embedding = True + config.model.backbone_args.embed_dim = 1024 + config.model.backbone_args.depth = 24 + config.model.backbone_args.num_heads = 16 + config.model.backbone_args.patch_size = 14 + config.model.label_smooth = 0.1 + config.model.dropout_prob = 0.1 + config.model.decode_beam_size = 4 + config.weights = path_to_pretrained_gerald_model_weights + + # Training. + config.batch_size = 256 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + + # learning rate and training schedule + config.num_training_steps = 30000 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 3e-7 + config.early_stopping = 8500 + config.log_eval_steps = 500 + + # Logging. + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.checkpoint = True + + return config + + diff --git a/scenic/projects/gerald/configs/gerald_pretraining_config.py b/scenic/projects/gerald/configs/gerald_pretraining_config.py new file mode 100644 index 0000000000000000000000000000000000000000..eee0fe32d393d9e93ad2b5c110faadda6ddee847 --- /dev/null +++ b/scenic/projects/gerald/configs/gerald_pretraining_config.py @@ -0,0 +1,90 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +"""Default config for launching a GER-ALD pretraining.""" + +import ml_collections + + +def get_config(): + """Returns the configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'gerald_training' + + # Dataset. + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 1000 + config.dataset_configs.tokenizer_type = 'bert' + config.dataset_configs.max_context_tokens = 20 + config.data_dtype_str = 'float32' + config.dataset_configs.data_dir = 'where_your_data_is' + config.dataset_configs.train_datasets = ('dataset1-split1', 'dataset2-split2') + config.dataset_configs.eval_datasets = ('name_of_seen_split', 'name_of_unseen_split') + config.dataset_configs.wikid2id_path = 'file_mapping_each_entity_identifier_to_an_unique_int_id' + + config.rng_seed = 0 + + # GER codes. + config.vocab_size = 30522 - 2 + config.code_length = 4 + config.ger_bos = 101 + config.ger_eos = 102 + config.load_codes_from = path_to_codes + + # Model. + config.model = ml_collections.ConfigDict() + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.use_ln_pre = True + config.model.backbone_args.use_ln_post = True + config.model.backbone_args.pe_bias = False + config.model.backbone_args.use_class_embedding = True + config.model.backbone_args.embed_dim = 1024 + config.model.backbone_args.depth = 24 + config.model.backbone_args.num_heads = 16 + config.model.backbone_args.patch_size = 14 + config.model.label_smooth = 0.3 + config.model.dropout_prob = 0.1 + config.model.decode_beam_size = 4 + config.weights = path_to_pretrained_weights + + # Training. + config.batch_size = 4096 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.decoder_multiplier = 10.0 + config.optimizer.decoder_layer_prefix = 'textual' + + # learning rate and training schedule + config.num_training_steps = 600000 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 1e-5 + config.log_eval_steps = 13000 + + # Logging. + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.checkpoint = True + + return config + + diff --git a/scenic/projects/gerald/ger_eval.py b/scenic/projects/gerald/ger_eval.py new file mode 100644 index 0000000000000000000000000000000000000000..3bb5fe6a11a9a2a1652ee3d8aa862da728c7bc4e --- /dev/null +++ b/scenic/projects/gerald/ger_eval.py @@ -0,0 +1,469 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for evaluating GER model on the OVEN benchmark.""" + +from typing import Any, Dict, Optional + +from absl import logging +import flax +import flax.linen as nn +import jax +from jax import lax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.projects.gerald import utils +from scenic.train_lib import train_utils + + +NEG_INF = -1.0e7 +PyTreeDef = Any +Array = jax.Array + + +def get_predicted_labels(seqs, code2id): + out = - np.ones((seqs.shape[0], seqs.shape[1])).astype(np.int32) + for bs in range(seqs.shape[0]): + for be in range(seqs.shape[1]): + code_str = '-'.join([str(int(c))for c in seqs[bs, be]]) + if code_str in code2id: + out[bs, be] = code2id[code_str] + return out + + +def get_first_valid_label(predicted_labels): + out = - np.ones(predicted_labels.shape[0]).astype(np.int32) + for b in range(predicted_labels.shape[0]): + valid_indexes = np.where(predicted_labels[b] != -1)[0] + if len(valid_indexes): # pylint: disable=g-explicit-length-test + out[b] = predicted_labels[b, valid_indexes[0]] + return out[:, None] + + +def eval_loss_and_accuracy_step( + train_state, + batch, + *, + flax_model: nn.Module, + loss_and_metrics_fn: Any, + entity2code: Any = None,): + """Runs a single step of evaluation.""" + code_tokens = entity2code(batch['label']['entity/id'][..., 0, 0]) + variables = {'params': train_state.params, **train_state.model_state} + predictions = flax_model.apply( + variables, + batch['inputs'], + code_tokens=code_tokens, + context_text_tokens=batch.get('context', None), + preprocess=True, + train=False + ) + _, metrics = loss_and_metrics_fn( + predictions, + {**{k: v for k, v in batch.items()}, 'code_tokens': code_tokens}) + # adapt to normalization API in log_train_summary + metrics = {k: (v, 1.) for k, v in metrics.items()} + return metrics + + +def evaluate_oven_ger(train_state, dataset_iter, eval_step_pmapped, + code2id, total_eval_steps, save_predictions=''): + """Evaluates a Generative Entity Recognition model on OVEN.""" + eval_metrics = {} + all_seqs = [] + all_masks = [] + all_labels = [] + all_ids = [] + for eval_step_i in range(total_eval_steps): + if eval_step_i % 100 == 0: + logging.info('eval step [%d/%d]', eval_step_i, total_eval_steps) + eval_batch = next(dataset_iter) + seqs, batch_mask, labels, ids = eval_step_pmapped(train_state, eval_batch) + all_seqs.append(utils.to_cpu(seqs)) + all_masks.append(utils.to_cpu(batch_mask)) + all_labels.append(utils.to_cpu(labels)) + all_ids.append(utils.to_cpu(ids)) + seqs = np.concatenate(all_seqs, axis=0) + masks = np.concatenate(all_masks, axis=0) + labels = np.concatenate(all_labels, axis=0) + ids = np.concatenate(all_ids, axis=0) + idx = masks == 1 + seqs = seqs[idx] + labels = labels[idx] + ids = ids[idx] + predicted_labels = get_predicted_labels(seqs, code2id) + logging.info('predicted labels shape: %s', predicted_labels.shape) + logging.info('gt labels shape: %s', labels.shape) + non_valid = np.sum(predicted_labels[:, 0] == -1) + lab = predicted_labels[:, 0].reshape((-1,)) + eval_metrics.update({'existing_entities_prop': ( + 100. * (lab.shape[0] - non_valid) / lab.shape[0], 1)}) + prec_dict = compute_precision(predicted_labels, labels, (1,)) + # cheap constrained beam search + predicted_labels = get_first_valid_label(predicted_labels) + eval_metrics.update({ + 'cheaply_constrained_' + k: v for ( + k, v) in compute_precision(predicted_labels, labels, (1,)).items()}) + eval_metrics.update(prec_dict) + eval_metrics = {k: v[0] for k, v in eval_metrics.items()} + return eval_metrics + + +def compute_precision(pred, gt, ks=(1, 2, 4, 8)): + """Computes precision.""" + assert pred.shape[0] == gt.shape[0] + res = {} + for k in ks: + topk_preds = pred[:, :k] + true_positive = 1.0 * np.sum(topk_preds == gt[:, None], axis=-1) + precision = np.mean(true_positive / k) + res['prec@' + str(k)] = (precision, 1) + return res + + +def eval_step( + train_state: train_utils.TrainState, + batch: Dict[str, jnp.ndarray], + *, + flax_model: nn.Module, + config: ml_collections.ConfigDict, + gather_to_host: Optional[bool] = True, + ) -> Any: + """Runs a single step of test.""" + variables = {'params': train_state.params, **train_state.model_state} + predictions = flax_model.apply( + variables, + batch['inputs'], + context_text_tokens=batch.get('context', None), + preprocess=True, + train=False, + mutable=False, + debug=False) + + batch_size = predictions['visual_features'].shape[0] + visual_features = predictions['visual_features'] + begin_tokens = predictions['begin_tokens'] + context_tokens = predictions['context_tokens'] if ( + 'context_tokens' in predictions) else None + beam_size = config.model.decode_beam_size + visual_features = jnp.broadcast_to( + visual_features[:, None], + (batch_size, beam_size,) + visual_features.shape[1:]).reshape( + (batch_size * beam_size,) + visual_features.shape[1:] + ) + if context_tokens is not None: + context_tokens = jnp.broadcast_to( + context_tokens[:, None], + (batch_size, beam_size, context_tokens.shape[1])).reshape( + batch_size * beam_size, context_tokens.shape[1]) + tokens_to_logits_kwargs = {} + if context_tokens is not None: + tokens_to_logits_kwargs['context_tokens'] = context_tokens + # pylint: disable=g-long-lambda + tokens_to_logits = lambda x: flax_model.apply( + variables={'params': train_state.params}, + code_tokens=x, + visual_features=visual_features, + method=flax_model.decode_text, + **tokens_to_logits_kwargs, + ) + # live_seqs + live_seqs, _ = beam_search_routine_with_different_code_lengths( + begin_tokens, tokens_to_logits, + max_steps=config.code_length + 1, eos_index=config.get('ger_eos', 102), + beam_size=beam_size) + live_seqs = live_seqs.reshape( + batch_size, beam_size, config.code_length + 1) + live_seqs = live_seqs[:, -config.get('topk', beam_size):, 1:] + # The output of beam search scores are in increasing order. + live_seqs = live_seqs[:, ::-1] + + batch_mask = batch['batch_mask'] + labels = batch['label']['entity/id'][..., 0, 0] + question_id = batch['label']['image/id'] + + if gather_to_host: + live_seqs = jax.lax.all_gather(live_seqs, 'batch') + batch_mask = jax.lax.all_gather(batch_mask, 'batch') + labels = jax.lax.all_gather(labels, 'batch') + question_id = jax.lax.all_gather(question_id, 'batch') + return live_seqs, batch_mask, labels, question_id + + +@flax.struct.dataclass +class BeamState: + """Holds beam search state data.""" + # The position of the decoding loop in the length dimension. + cur_index: Array # scalar int32: current decoded length index + # The active sequence log probabilities and finished sequence scores. + live_logprobs: Array # float32: [batch_size, beam_size] + finished_scores: Array # float32: [batch_size, beam_size] + # The current active-beam-searching and finished sequences. + live_seqs: Array # int32: [batch_size, beam_size, max_decode_len] + finished_seqs: Array # int32: [batch_size, beam_size, + # max_decode_len] + # Records which of the 'finished_seqs' is occupied and not a filler slot. + finished_flags: Array # bool: [batch_size, beam_size] + # The current state of the autoregressive decoding caches. + + +def beam_search_routine_with_different_code_lengths( + inputs, tokens_to_logits, eos_index=1, beam_size=4, max_steps=5): + """Beam search for transformer machine translation. + + If `inputs` has non-zero entries, those values are not modified, i.e., + the sampled values for those positions are discarded. This simulates the + teacher forcing on the prefix positions. + + Args: + inputs: array: (batch_size, max_steps) + tokens_to_logits: a function that converts input + (batch_size, max_steps) to (batch_size, max_steps, vocab_size) + eos_index: int: id of end-of-sentence token for target vocabulary. + beam_size: number of decoded sequences to be returned. This is equivalent + to the number of beams used in the beam search. + max_steps: int: an optional maximum length of decoded sequence. If + None, it uses `inputs.shape[1]` as `max_decode_len`. + + Returns: + Tuple of: + [batch_size, beam_size, max_decode_len] top-scoring sequences + [batch_size, beam_size] beam-search scores. + """ + batch_size = inputs.shape[0] + end_marker = jnp.array(eos_index) + + # initialize beam search state + beam_search_init_state = beam_init(batch_size, beam_size, max_steps, inputs) + + def beam_search_loop_cond_fn(state: BeamState): + """Beam search loop termination condition.""" + not_at_end = (state.cur_index < max_steps) + # Is no further progress in the beam search possible? + # Get the best possible scores from alive sequences. + best_live_scores = state.live_logprobs[:, -1:] + # Get the worst scores from finished sequences. + worst_finished_scores = jnp.min( + state.finished_scores, axis=1, keepdims=True) + # Mask out scores from slots without any actual finished sequences. + worst_finished_scores = jnp.where(state.finished_flags, + worst_finished_scores, NEG_INF) + # If no best possible live score is better than current worst finished + # scores, the search cannot improve the finished set further. + search_terminated = jnp.all(worst_finished_scores > best_live_scores) + + # If we're not at the max decode length, and the search hasn't terminated, + # continue looping. + return not_at_end & (~search_terminated) + + def beam_search_loop_body_fn(state: BeamState) -> BeamState: + """Beam search loop state update function.""" + # Flatten beam dimension into batch to be compatible with model. + test_input = flatten_beam_dim(state.live_seqs) + flat_logits = tokens_to_logits(test_input)[:, state.cur_index - 1] + # [batch * beam, vocab] --> [batch, beam, vocab] + logits = unflatten_beam_dim(flat_logits, batch_size, beam_size) + candidate_log_probs = jax.nn.log_softmax(logits) # [batch, beam, vocab] + log_probs = ( + candidate_log_probs + jnp.expand_dims( + state.live_logprobs, axis=2)) # [batch, beam, vocab] + vocab_size = log_probs.shape[-1] + + beams_to_keep = 2 * beam_size + flat_log_probs = log_probs.reshape( + (batch_size, beam_size * vocab_size)) # [batch, beams * vocab] + topk_log_probs, topk_indices = lax.top_k( + flat_log_probs, k=beams_to_keep) # [batch, 2*beams] + + topk_ids = topk_indices % vocab_size + topk_ids = jnp.expand_dims(topk_ids, axis=2) + + # Recover the beam index by floor division. + topk_beam_indices = topk_indices // vocab_size + # Gather 2*k top beams. + # --> [batch, 2*beams, length] + topk_seq = gather_beams( + state.live_seqs, topk_beam_indices, batch_size, beam_size, + beams_to_keep) + # Update sequences for the 2*K top-k new sequences. + # --> [batch, 2*beams, length] + topk_seq = lax.dynamic_update_slice( + topk_seq, topk_ids, (0, 0, state.cur_index)) + + # Update LIVE (in-progress) sequences: + # Did any of these sequences reach an end marker? + # --> [batch, 2*beams] + newly_finished = (topk_seq[:, :, state.cur_index] == end_marker) + # If we're at the final step, then all seqs are considered finished. + final_decoding_step = state.cur_index == max_steps - 1 + newly_finished = final_decoding_step | newly_finished + # To prevent these newly finished sequences from being added to the LIVE + # set of active beam search sequences, set their log probs to a very large + # negative value. + new_log_probs = topk_log_probs + newly_finished * NEG_INF + # Determine the top k beam indices (from top 2*k beams) from log probs. + # --> [batch, beams] + _, new_topk_indices = lax.top_k(new_log_probs, k=beam_size) + new_topk_indices = jnp.flip(new_topk_indices, axis=1) + # Gather the top k beams (from top 2*k beams). + # --> [batch, beams, length], [batch, beams] + top_alive_seq, top_alive_log_probs = gather_beams( + [topk_seq, new_log_probs], new_topk_indices, batch_size, 2 * beam_size, + beam_size) + + # Update FINISHED (reached end of sentence) sequences: + # Calculate new seq scores from log probabilities. + new_scores = topk_log_probs + # Mask out the still unfinished sequences by adding large negative value. + # --> [batch, 2*beams] + new_scores += (~newly_finished) * NEG_INF + + # Combine sequences, scores, and flags along the beam dimension and compare + # new finished sequence scores to existing finished scores and select the + # best from the new set of beams. + finished_seqs = jnp.concatenate( # --> [batch, 3*beams, length] + [state.finished_seqs, topk_seq], + axis=1) + finished_scores = jnp.concatenate( # --> [batch, 3*beams] + [state.finished_scores, new_scores], axis=1) + finished_flags = jnp.concatenate( # --> [batch, 3*beams] + [state.finished_flags, newly_finished], axis=1) + # --> [batch, beams, length], [batch, beams], [batch, beams] + top_finished_seq, top_finished_scores, top_finished_flags = ( + gather_topk_beams( + [finished_seqs, finished_scores, finished_flags], + finished_scores, batch_size, beam_size)) + + return BeamState( + cur_index=state.cur_index + 1, + live_logprobs=top_alive_log_probs, + finished_scores=top_finished_scores, + live_seqs=top_alive_seq, + finished_seqs=top_finished_seq, + finished_flags=top_finished_flags, + ) + + # Run while loop and get final beam search state. + final_state = lax.while_loop(beam_search_loop_cond_fn, + beam_search_loop_body_fn, beam_search_init_state) + + # Account for the edge-case where there are no finished sequences for a + # particular batch item. If so, return live sequences for that batch item. + # --> [batch] + none_finished = jnp.any(final_state.finished_flags, axis=1) + # --> [batch, beams, length] + finished_seqs = jnp.where( + none_finished[:, None, None], + final_state.finished_seqs, final_state.live_seqs) + # --> [batch, beams] + finished_scores = jnp.where( + none_finished[:, None], + final_state.finished_scores, final_state.live_logprobs) + return finished_seqs, finished_scores + + +def flatten_beam_dim(x: jnp.ndarray, offset: int = 0) -> jnp.ndarray: + """Flattens the first two dimensions of a non-scalar array.""" + xshape = list(x.shape) + b_sz = xshape.pop(offset) + xshape[offset] *= b_sz + return x.reshape(xshape) + + +def unflatten_beam_dim(x: jnp.ndarray, + batch_size: int, + beam_size: int, + offset: int = 0) -> jnp.ndarray: + """Unflattens the first, flat batch*beam dimension of a non-scalar array.""" + assert batch_size * beam_size == x.shape[offset] + xshape = list(x.shape) + newshape = xshape[:offset] + [batch_size, beam_size] + xshape[offset + 1:] + return x.reshape(newshape) + + +def beam_init(batch_size: int, + beam_size: int, + max_decode_len: int, + inputs: jnp.ndarray) -> BeamState: + """Initializes the beam search state data structure.""" + cur_index0 = jnp.array(1) + live_logprobs0 = jnp.tile( + jnp.array([0.0] + [NEG_INF] * (beam_size - 1)), [batch_size, 1]) + finished_scores0 = jnp.ones((batch_size, beam_size)) * NEG_INF + live_seqs0 = jnp.broadcast_to( + inputs[:, None], (batch_size, beam_size, inputs.shape[-1])) + finished_seqs0 = jnp.zeros((batch_size, beam_size, max_decode_len), jnp.int32) + finished_flags0 = jnp.zeros((batch_size, beam_size), jnp.bool_) + # add beam dimension to attention cache pytree elements + return BeamState( + cur_index=cur_index0, + live_logprobs=live_logprobs0, + finished_scores=finished_scores0, + live_seqs=live_seqs0, + finished_seqs=finished_seqs0, + finished_flags=finished_flags0, + ) + + +def gather_beams(nested: PyTreeDef, + beam_indices: jnp.ndarray, + batch_size: int, + old_beam_size: int, + new_beam_size: int) -> jnp.ndarray: + """Gathers the beam slices indexed by beam_indices into new beam array. + + Args: + nested: pytree of arrays or scalars (the latter ignored). + beam_indices: array of beam_indices + batch_size: size of batch. + old_beam_size: size of _old_ beam dimension. + new_beam_size: size of _new_ beam dimension. + + Returns: + New pytree with new beam arrays. + [batch_size, old_beam_size, ...] --> [batch_size, new_beam_size, ...] + """ + del batch_size + del new_beam_size + # Gather via one-hot contraction, needed for SPMD partitioning. + oh_beam_indices = jax.nn.one_hot( + beam_indices, old_beam_size, dtype=jnp.int32) + + def gather_fn(x): + return jnp.einsum('beo,bo...->be...', oh_beam_indices, x).astype(x.dtype) + + return jax.tree_util.tree_map(gather_fn, nested) + + +def gather_topk_beams(nested: PyTreeDef, score_or_log_prob: jnp.ndarray, + batch_size: int, new_beam_size: int) -> jnp.ndarray: + """Gathers the top-k beam slices given by score_or_log_prob array. + + Args: + nested: pytree of arrays or scalars (the latter ignored). + score_or_log_prob: [batch_size, old_beam_size] array of values to sort by + for top-k selection of beam slices. + batch_size: int: size of batch. + new_beam_size: int: size of _new_ top-k selected beam dimension + + Returns: + New pytree with new beam arrays containing top k new_beam_size slices. + [batch_size, old_beam_size, ...] --> [batch_size, new_beam_size, ...] + """ + _, topk_indices = lax.top_k(score_or_log_prob, k=new_beam_size) + topk_indices = jnp.flip(topk_indices, axis=1) + return gather_beams(nested, topk_indices, batch_size, + score_or_log_prob.shape[1], new_beam_size) diff --git a/scenic/projects/gerald/ger_trainer.py b/scenic/projects/gerald/ger_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..3e12e1c1a613970c56c0c37c7cc77268ef242242 --- /dev/null +++ b/scenic/projects/gerald/ger_trainer.py @@ -0,0 +1,295 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training script for GER models.""" + +import functools +import time +from typing import Any, Dict, Tuple + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.projects.gerald import ger_eval +from scenic.projects.gerald import utils +from scenic.projects.gerald.models import ger_model +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils + + +def train_step( + train_state, + batch, + *, + flax_model: nn.Module, + loss_and_metrics_fn: Any, + learning_rate_fn: Any, + entity2code: Any = None,): + """Run a single step of training. + + Args: + train_state: learnable parameters and optimizer states. + batch: a batch of data containing images ("inputs") and annotations. + flax_model: the model definition. + loss_and_metrics_fn: loss function. + learning_rate_fn: Learning rate scheduler which given the global_step + generates the learning rate. + entity2code: Entity id to its code. + Returns: + new_train_state: updated network parameters and optimizer states. + lr: the learning rate of the current step (for visualization). + predictions: the output of the network. + metrics: losses and other metrics for visualization. + """ + code_tokens = entity2code(batch['label']['entity/id'][..., 0, 0]) + def loss_fn(params): + new_rng, rng = jax.random.split(train_state.rng) + model_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + variables = {'params': params, **train_state.model_state} + predictions, new_model_state = flax_model.apply( + variables, + batch['inputs'], + code_tokens=code_tokens, + context_text_tokens=batch.get('context', None), + preprocess=True, + mutable=['batch_stats'], + train=True, + rngs={'dropout': model_rng}, + ) + loss, metrics = loss_and_metrics_fn( + predictions, + {**{k: v for k, v in batch.items()}, 'code_tokens': code_tokens}) + # adapt to normalization API in log_train_summary + metrics = {k: (v, 1.) for k, v in metrics.items()} + return loss, (new_model_state, new_rng, metrics, predictions) + compute_gradient_fn = jax.value_and_grad(loss_fn, has_aux=True) + (_, aux), grad = compute_gradient_fn(train_state.params) + new_model_state, new_rng, metrics, predictions = aux + step = train_state.global_step + lr = learning_rate_fn(step) + grad = jax.lax.pmean(grad, axis_name='batch') + updates, new_opt_state = train_state.tx.update( + grad, train_state.opt_state, train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + new_train_state = train_state.replace( + global_step=step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + return new_train_state, lr, predictions, metrics + + +def train_and_evaluate( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Args: + rng: JAX PRNGKey. + config: Configurations of the experiment. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. + """ + is_host = jax.process_index() == 0 + + model = ger_model.GERModel(config, dataset.meta_data) + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + lr_fn = lr_schedules.get_learning_rate_fn(config) + if config.optimizer.get('decoder_multiplier', -1.) >= 0.0: + tx = utils.optimizer_with_decoder_multiplier(config, params=params) + else: + tx = optimizers.get_optimizer(config.optimizer, lr_fn, params=params) + opt_state = jax.jit(tx.init, backend='cpu')(params) + + _, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng) + + if config.checkpoint: + train_state = checkpoints.restore_checkpoint(workdir, train_state) + start_step = int(train_state.global_step) + if start_step == 0: + train_state, start_step = utils.load_weights(train_state, config) + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Mapping from an entity id to its corresponding code. + entity2code = utils.EntityIds2Code(config) + code2entity = utils.get_code2id(np.array(entity2code.codes)) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_and_metrics_fn=model.loss_function, + learning_rate_fn=lr_fn, + entity2code=entity2code, + ), + axis_name='batch', donate_argnums=(0, 1), + ) + + eval_loss_and_accuracy_step_pmapped = jax.pmap( + functools.partial( + ger_eval.eval_loss_and_accuracy_step, + flax_model=model.flax_model, + loss_and_metrics_fn=model.loss_function, + entity2code=entity2code,), + axis_name='batch', + donate_argnums=(1,), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + ger_eval.eval_step, + flax_model=model.flax_model, config=config, + ), + axis_name='batch', donate_argnums=(1,), + ) + + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + if config.get('early_stopping'): + total_steps = config.early_stopping + log_eval_steps = config.get('log_eval_steps', steps_per_epoch) + log_summary_steps = config.get('log_summary_steps', 20) + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + chrono = train_utils.Chrono() + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + def write_note(note): + if is_host: + platform.work_unit().set_notes(note) + + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + hooks = [] + if is_host: + hooks.append(report_progress) + if config.get('xprof', True) and is_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, lr, train_predictions, metrics = train_step_pmapped( + train_state, train_batch) + train_metrics.append(metrics) + extra_training_logs.append({'learning_rate': lr}) + for h in hooks: + h(step) + chrono.pause() + del train_predictions + + if (step % log_summary_steps == 0) or (step == total_steps - 1): + if is_host: + chrono.tick(step, writer, write_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, train_metrics), + extra_training_logs=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, extra_training_logs), + writer=writer) + train_metrics, extra_training_logs = [], [] + + if (step % log_eval_steps == 0) or (step == 1) or (step == total_steps): + start_time = time.time() + with report_progress.timed('eval'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_bs = config.get('eval_batch_size', config.batch_size) + total_eval_seen_steps = int(np.ceil( + dataset.meta_data['num_eval_seen_examples'] / eval_bs)) + eval_results = ger_eval.evaluate_oven_ger( + train_state, dataset.valid_iter, eval_step_pmapped, code2entity, + total_eval_seen_steps, + save_predictions=config.get('save_predictions', '')) + unseen_results = ger_eval.evaluate_oven_ger( + train_state, dataset.test_iter, eval_step_pmapped, code2entity, + int(np.ceil( + dataset.meta_data['num_eval_unseen_examples'] / eval_bs))) + for k, v in unseen_results.items(): + eval_results['unseen_' + k] = v + eval_results['hm_' + k] = 2. / (1. / eval_results[k] + 1. / v) + + last_eval_metrics = [] + for _ in range(total_eval_seen_steps): + eval_batch = next(dataset.valid_iter) + e_metrics = eval_loss_and_accuracy_step_pmapped(train_state, + eval_batch) + last_eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + last_eval_step = step + train_utils.log_eval_summary( + step=last_eval_step, eval_metrics=last_eval_metrics, + extra_eval_summary=eval_results, writer=writer) + duration = time.time() - start_time + logging.info('Done with evaluation: %.4f sec.', duration) + writer.flush() + + if config.checkpoint and ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)): + with report_progress.timed('checkpoint'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + if is_host: + unrep_train_state = jax_utils.unreplicate(train_state) + train_utils.save_checkpoint(workdir, unrep_train_state, max_to_keep=1) + del unrep_train_state + chrono.resume() # Un-pause now. + + train_utils.barrier() + return train_state, train_summary, eval_summary # pytype: disable=bad-return-type diff --git a/scenic/projects/gerald/gerald_method.png b/scenic/projects/gerald/gerald_method.png new file mode 100644 index 0000000000000000000000000000000000000000..d5ff323ca53d18daf0796bdbe2fb9272c6a26544 --- /dev/null +++ b/scenic/projects/gerald/gerald_method.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8368d12d2a27a01fbd201742ecde63406d43715dd1a7654ce637998a4c7cb121 +size 871406 diff --git a/scenic/projects/gerald/input_pipeline.py b/scenic/projects/gerald/input_pipeline.py new file mode 100644 index 0000000000000000000000000000000000000000..f3fbae980b53e9f063da7b921e57e7b7276deb4e --- /dev/null +++ b/scenic/projects/gerald/input_pipeline.py @@ -0,0 +1,521 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators used for the GER input pipeline.""" + +import functools +from typing import Optional, Sequence, Union +from absl import logging + +from dmvr import tokenizers +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib.big_transfer.preprocessing import ops as pp_ops +from scenic.projects.t5 import tokenizer as t5_tokenizer +import tensorflow as tf +import tensorflow_datasets as tfds +import tensorflow_text + +PRNGKey = jnp.ndarray + + +def make_inception_crop(features, crop_size, range_low=8): + rescaled_image = pp_ops.get_inception_crop( + crop_size, range_low)({'image': features['inputs']})['image'] + features['inputs'] = rescaled_image + return features + + +def make_central_crop(features, crop_size): + """Preprocessing and data-augmentation functions for eval.""" + resized_image = pp_ops.get_resize_small( + crop_size)({'image': features['inputs']})['image'] + resized_image = pp_ops.get_central_crop(crop_size)( + {'image': resized_image})['image'] + features['inputs'] = resized_image + return features + + +def decode_annotations( + example, tokenizer, max_context_tokens=0, + questionid2id=None, question_key='question/id', + wikipedia_entity_id2id=None, entity_key='entity/id'): + """Given an instance and raw labels, creates pair.""" + image = tf.cast(example['image'], tf.float32) + + assert entity_key in example + assert wikipedia_entity_id2id is not None + entity_token = tf.cast(wikipedia_entity_id2id.string_tensor_to_indices( + example[entity_key]), dtype=tf.int32) + target = {'entity/id': entity_token} + + if question_key in example and questionid2id is not None: + target['image/id'] = tf.cast(questionid2id.string_tensor_to_indices( + example['question/id']), dtype=tf.int32)[0][0] + else: + target['image/id'] = tf.cast( + example['image/id'], dtype=tf.int32) if ( + 'image/id' in example) else tf.constant(0, dtype=tf.int32) + output = { + 'inputs': image, + 'label': target, + } + context_field = None + if 'context' in example: + context_field = example['context'] + if context_field is not None and max_context_tokens > 0: + context_tokens = tokenizer.string_tensor_to_indices( + tf.strings.lower(context_field), prepend_bos=False, + append_eos=False, max_num_tokens=max_context_tokens, + )[0, :max_context_tokens] + output['context'] = context_tokens + return output + + +def convert_oven_format(x, question_key='question/id', entity_key='entity/id'): + """Converting OVEN format.""" + out = { + 'image': tf.io.decode_image(x['image']['encoded'], channels=3, + expand_animations=False), + 'context': tf.reshape(tf.convert_to_tensor( + x['question']['raw'], dtype=tf.string), (-1,)), + question_key: tf.reshape(tf.convert_to_tensor( + x['question']['id'], dtype=tf.string), (-1,)), + } + out[entity_key] = tf.reshape(tf.convert_to_tensor(x['answer']['id'], + dtype=tf.string), (-1,)) + return out + + +def convert_oven_entities_format(x, entity_key='entity/id'): + """Converting OVEN entities format.""" + out = { + 'image': tf.image.decode_jpeg(x['wikipedia_image'], channels=3), + } + out[entity_key] = tf.reshape(tf.convert_to_tensor(x['wikidata_id'], + dtype=tf.string), (-1,)) + return out + + +def load_split( + batch_size, + *, + train, + dataset, + preprocess_fn, + decode_fn, + tokenizer, + split, + data_dir, + cache=False, + max_size=224, + max_context_tokens=40, + shuffle_buffer_size=1000, + shuffle_seed=0, + private_threadpool_size=48, + ): + """Loads OVEN or entity-based pretraining dataset using TensorFlow Datasets. + + Args: + batch_size: int; The batch size returned by the data pipeline. + train: bool; Whether to load the train or evaluation split. + dataset: str + preprocess_fn: function; A function that given an example, train flag, + and dtype returns the preprocessed the example. Note that the + preprocessing is done BEFORE caching to re-use them. + decode_fn: A function that given an example decodes the image, converts + it to float32, mean-subtracts it, and pulls out the relevant parts from + the tfds features. + tokenizer: The text tokenizer (used to tokenize the input question). + split: str. + data_dir: str. + cache: bool; whether to use the ds.cache or nor. + max_size: int; Maximum image size. + max_context_tokens: int; + shuffle_buffer_size: int; Size of the shuffle buffer. + shuffle_seed: int; Seed for shuffling the training data. + private_threadpool_size: for dataloading. + + Returns: + A `tf.data.Dataset`, and dataset info. + """ + options = tf.data.Options() + if private_threadpool_size > 0: + options.threading.private_threadpool_size = private_threadpool_size + # Loads OVEN dataset. + if dataset == 'oven': + ds = dataset_utils.get_dataset_tfds( + dataset='oven', + split=split, + shuffle_files=False, + data_dir=data_dir, + skip_decode={'image': {'encoded': tfds.decode.SkipDecoding()}},) + num_example = dataset_utils.get_num_examples('oven', split, data_dir) + logging.info('%d files in %s oven', num_example, split) + ds = ds.map( + functools.partial(convert_oven_format), + num_parallel_calls=tf.data.AUTOTUNE) + ds = ds.with_options(options) + if train: + ds = ds.repeat() + ds = ds.shuffle(shuffle_buffer_size, seed=shuffle_seed) + + # Loads entity-based pretraining dataset. + else: + assert dataset.startswith('oven_entities') + ds = dataset_utils.get_dataset_tfds( + dataset=dataset, + split=split, + shuffle_files=False, + data_dir=data_dir, + skip_decode={'wikipedia_image': tfds.decode.SkipDecoding()}) + num_example = dataset_utils.get_num_examples(dataset, split, data_dir) + logging.info('%d files in %s %s', num_example, split, dataset) + ds = ds.map(functools.partial(convert_oven_entities_format,), + num_parallel_calls=tf.data.AUTOTUNE) + ds = ds.with_options(options) + if train: + ds = ds.repeat() + ds = ds.shuffle(shuffle_buffer_size, seed=shuffle_seed) + + ds = ds.map( + functools.partial(decode_fn, tokenizer=tokenizer), + num_parallel_calls=tf.data.experimental.AUTOTUNE) + if cache: + ds = ds.cache() + + padded_shapes = { + 'inputs': [max_size, max_size, 3], + 'label': { + 'image/id': [], + 'entity/id': [1, 1], + }, + } + if max_context_tokens: + padded_shapes['context'] = max_context_tokens + + ds = ds.map(preprocess_fn, num_parallel_calls=tf.data.experimental.AUTOTUNE) + if dataset.startswith('oven_entities') and max_context_tokens > 0: + ds = ds.map(AddContextFn(tokenizer, max_context_tokens), + num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.padded_batch(batch_size, padded_shapes=padded_shapes, + drop_remainder=train) + if not train: + ds = ds.repeat() + + ds = ds.prefetch(tf.data.experimental.AUTOTUNE) + return ds, num_example + + +class AddContextFn(): + """Add a random question prompt.""" + + def __init__(self, tokenizer, max_context_tokens): + self.prompts = [ + 'what is the main object?', + 'what is shown in the photo?', + 'which category of item is shown in the image?', + 'what item is presented in the image?', + 'what object is presented in the image?', + 'what is the main content of this image?', + ] + self.tokenized_prompts = None + self.tokenizer = tokenizer + self.max_context_tokens = max_context_tokens + + def __call__(self, features): + ind = tf.random.uniform([], 0, len(self.prompts), dtype=tf.int32) + context = tf.reshape(tf.convert_to_tensor( + tf.convert_to_tensor(self.prompts)[ind], dtype=tf.string), (-1,)) + + context_tokens = self.tokenizer.string_tensor_to_indices( + tf.strings.lower(context), prepend_bos=False, + append_eos=False, max_num_tokens=self.max_context_tokens, + )[0, :self.max_context_tokens] + + features['context'] = context_tokens + return features + + +def dataset_builder(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + dataset_configs=None,): + """Returns generators for pretraining dataset or OVEN sets. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image. Only 'float32' is currently supported. + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. Must be empty. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + del dtype_str + + dataset_configs = dataset_configs or {} + data_dir = dataset_configs.get('data_dir') + + train_datasets = dataset_configs.get('train_datasets', '') + if not isinstance(train_datasets, tuple): + train_datasets = (train_datasets,) + eval_datasets = dataset_configs.get('eval_datasets') + assert len(eval_datasets) == 2 # seen and unseen + crop_size = dataset_configs.get('crop_size', 224) + max_context_tokens = dataset_configs.get('max_context_tokens', 0) + tokenizer_type = dataset_configs.get('tokenizer_type', 'bert') + + train_preprocess_fn = functools.partial( + make_inception_crop, crop_size=crop_size) + eval_preprocess_fn = functools.partial(make_central_crop, crop_size=crop_size) + + # Tokenizer init + if tokenizer_type == 'clip': + tokenizer = tokenizers.ClipTokenizer() + elif tokenizer_type == 't5': + tokenizer = t5_tokenizer.build_dmvr_sp_model() + else: + assert tokenizer_type == 'bert' + tokenizer = tokenizers.BertTokenizer() + tokenizer.initialize() + + ##################################### + # We load the training set mixture. # + ##################################### + + # Entity id (str) to id (int) + wikid2id_path = dataset_configs.get('wikid2id_path', None) + wikid2id = None + if wikid2id_path: + wikid2id = Stringid2IntIdClass(wikid2id_path) + train_ds, num_train_examples = [], 0 + dataset_sample_weights = dataset_configs.get('dataset_sample_weights', None) + decode_fn = functools.partial( + decode_annotations, + max_context_tokens=max_context_tokens, + wikipedia_entity_id2id=wikid2id, + ) + for train_dataset_i in train_datasets: + train_dataset_i, split_i = train_dataset_i.split('-') + train_ds_i, num_train_examples_i = load_split( + batch_size, train=True, + dataset=train_dataset_i, + preprocess_fn=train_preprocess_fn, + split=split_i, + decode_fn=decode_fn, + tokenizer=tokenizer, + max_context_tokens=max_context_tokens, + shuffle_buffer_size=dataset_configs.get('shuffle_buffer_size', 1000), + max_size=crop_size, + shuffle_seed=shuffle_seed, + data_dir=data_dir, + private_threadpool_size=dataset_configs.get( + 'private_threadpool_size', 48), + ) + num_train_examples += num_train_examples_i + train_ds.append(train_ds_i) + train_ds = tf.data.Dataset.sample_from_datasets(train_ds, + dataset_sample_weights) + + ########################################### + # We load the eval sets(seen and unseen). # + ########################################### + + wikid2id_path_eval = dataset_configs.get('wikid2id_path_eval', wikid2id_path) + if wikid2id_path_eval != wikid2id_path: + wikid2id = Stringid2IntIdClass(wikid2id_path) + # Question id (str) to id (int) (used to get val/test data id) + questionid2id_path = dataset_configs.get('questionid2id_path', None) + questionid2id = None + if questionid2id_path: + questionid2id = Stringid2IntIdClass(questionid2id_path) + eval_decode_fn = functools.partial( + decode_annotations, + max_context_tokens=max_context_tokens, + questionid2id=questionid2id, + wikipedia_entity_id2id=wikid2id, + ) + # OVEN seen entities + eval_seen_ds, num_eval_seen_examples = load_split( + eval_batch_size, train=False, + dataset='oven', + preprocess_fn=eval_preprocess_fn, + split=eval_datasets[0], + decode_fn=eval_decode_fn, + tokenizer=tokenizer, + max_context_tokens=max_context_tokens, + max_size=crop_size, + data_dir=dataset_configs.get('oven_data_dir', data_dir), + ) + # OVEN unseen entities + eval_unseen_ds, num_eval_unseen_examples = load_split( + eval_batch_size, + dataset='oven', + split=eval_datasets[1], + train=False, + preprocess_fn=eval_preprocess_fn, + max_size=crop_size, + decode_fn=eval_decode_fn, + max_context_tokens=max_context_tokens, + tokenizer=tokenizer, + data_dir=dataset_configs.get('oven_data_dir', data_dir), + ) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + if dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + train_iter = jax_utils.prefetch_to_device( + train_iter, dataset_configs.get('prefetch_to_device')) + + eval_seen_iter = iter(eval_seen_ds) + eval_seen_iter = map(dataset_utils.tf_to_numpy, eval_seen_iter) + eval_seen_iter = map(maybe_pad_batches_eval, eval_seen_iter) + eval_seen_iter = map(shard_batches, eval_seen_iter) + + eval_unseen_iter = iter(eval_unseen_ds) + eval_unseen_iter = map(dataset_utils.tf_to_numpy, eval_unseen_iter) + eval_unseen_iter = map(maybe_pad_batches_eval, eval_unseen_iter) + eval_unseen_iter = map(shard_batches, eval_unseen_iter) + + meta_data = { + 'num_train_examples': num_train_examples, + 'num_eval_seen_examples': num_eval_seen_examples, + 'num_eval_unseen_examples': num_eval_unseen_examples, + 'input_dtype': jnp.float32, + 'input_shape': [-1, crop_size, crop_size, 3], + } + return dataset_utils.Dataset(train_iter, eval_seen_iter, eval_unseen_iter, + meta_data) + + +def get_dataset( + config: ml_collections.ConfigDict, + data_rng: PRNGKey, + *, + dataset_name: Optional[str] = None, + dataset_configs: Optional[ml_collections.ConfigDict] = None +) -> dataset_utils.Dataset: + """Creates dataset. + + Args: + config: The configuration of the experiment. + data_rng: Random number generator key to use for the dataset. + dataset_name: Name of dataset to load, if not reading from the config. + dataset_configs: Configuration of the dataset, if not reading directly from + the config. + + Returns: + A dataset_utils.Dataset object. + """ + device_count = jax.device_count() + logging.info('device_count: %d', device_count) + logging.info('num_hosts : %d', jax.process_count()) + logging.info('host_id : %d', jax.process_index()) + del dataset_name # We get dataset name from dataset_configs.data_path + + batch_size = config.batch_size + if batch_size % device_count > 0: + raise ValueError(f'Batch size ({batch_size}) must be divisible by the ' + f'number of devices ({device_count})') + + eval_batch_size = config.get('eval_batch_size', batch_size) + if eval_batch_size % device_count > 0: + raise ValueError(f'Eval batch size ({eval_batch_size}) must be divisible ' + f'by the number of devices ({device_count})') + + local_batch_size = batch_size // jax.process_count() + eval_local_batch_size = eval_batch_size // jax.process_count() + device_batch_size = batch_size // device_count + logging.info('local_batch_size : %d', local_batch_size) + logging.info('device_batch_size : %d', device_batch_size) + + shuffle_seed = config.get('shuffle_seed', None) + + dataset_configs = dataset_configs or config.get('dataset_configs') + dataset = dataset_builder( + batch_size=local_batch_size, + eval_batch_size=eval_local_batch_size, + num_shards=jax.local_device_count(), + dtype_str=config.data_dtype_str, + rng=data_rng, + shuffle_seed=shuffle_seed, + dataset_configs=dataset_configs,) + + return dataset + + +class Stringid2IntIdClass(): + """Helper to go from question id (str) to id (int).""" + + def __init__(self, vocabulary_path: str): + """Initializes the `Questionid2IdClass`.""" + # Parse the vocabulary. + idx2word = {} + self._vocabulary_path = vocabulary_path + with tf.io.gfile.GFile(vocabulary_path) as f: + for idx, line in enumerate(f): + word = line.strip().replace('"', '') + idx2word[idx] = word + + # Validate. + if len(idx2word) != len(set(idx2word.values())): + raise ValueError('Words in vocabulary are not unique.') + + self._idx2word = idx2word + self._word2idx = {v: k for k, v in idx2word.items()} + + self._vocab_size = len(idx2word) + ids_tensor = tf.constant([i for _, i in self._word2idx.items()], + dtype=tf.int32) + words_tensor = tf.constant([w for w, _ in self._word2idx.items()], + dtype=tf.string) + self._tf_word2idx = tf.lookup.StaticHashTable( + tf.lookup.KeyValueTensorInitializer(words_tensor, ids_tensor), -1) + self._tf_whitespace_tokenizer = tensorflow_text.WhitespaceTokenizer() + logging.info('String ID --> Int ID initialized from file %s with %d items.', + vocabulary_path, self._vocab_size) + + def string_tensor_to_indices( + self, string_tensor: Union[tf.Tensor, Sequence[str]],) -> tf.Tensor: + tokenized = self._tf_whitespace_tokenizer.tokenize(string_tensor) + tokenized = self._tf_word2idx.lookup(tokenized) + max_num_tokens = 1 + shape = None if max_num_tokens is None else [None, max_num_tokens] + tokenized = tokenized.to_tensor(default_value=-1, shape=shape) + return tokenized + + def indices_to_string(self, idx: int) -> str: + return self._idx2word[idx] diff --git a/scenic/projects/gerald/main.py b/scenic/projects/gerald/main.py new file mode 100644 index 0000000000000000000000000000000000000000..f958bd86d9193f46091377ae6f9f17e5f7042a96 --- /dev/null +++ b/scenic/projects/gerald/main.py @@ -0,0 +1,48 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for GER experiments.""" + +from absl import flags +from absl import logging +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.gerald import ger_trainer +from scenic.projects.gerald import input_pipeline + +FLAGS = flags.FLAGS + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main entry point for GER training.""" + data_rng, rng = jax.random.split(rng) + workdir_config = config.get('workdir') + if workdir_config: + workdir = workdir_config + logging.info('Workdir is %s', workdir) + + return ger_trainer.train_and_evaluate( + rng=rng, + config=config, + dataset=input_pipeline.get_dataset(config, data_rng), + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/gerald/models/__init__.py b/scenic/projects/gerald/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/gerald/models/ger_model.py b/scenic/projects/gerald/models/ger_model.py new file mode 100644 index 0000000000000000000000000000000000000000..6918f3d407bbe3337d4692edcb3bf49312d11c4f --- /dev/null +++ b/scenic/projects/gerald/models/ger_model.py @@ -0,0 +1,339 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""GIT caption model.""" + +import dataclasses +from typing import Any + +# from absl import logging +from flax import linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import optax +from scenic.model_lib.base_models import base_model +from scenic.projects.gerald.models import git_vit +from scenic.projects.gerald.models import text_decoder + +GIT_PIXEL_MEAN = (0.48145466 * 255, 0.4578275 * 255, 0.40821073 * 255) +GIT_PIXEL_STD = (0.26862954 * 255, 0.26130258 * 255, 0.27577711 * 255) +NEG_INF = float('-inf') + + +class WordAndPositionalEmbedding(nn.Module): + """GRiT embedding layer.""" + vocab_size: int = 30522 + hidden_size: int = 768 + max_caption_length: int = 1024 + dropout_prob: float = 0.1 + + def setup(self): + self.words = nn.Embed( + self.vocab_size, self.hidden_size, + embedding_init=nn.initializers.normal(stddev=0.02), + name='words') + + @nn.compact + def __call__(self, x, train=False): + """forward embedding. + + Args: + x: (batch_size, caption_length). + train: bool. + Returns: + embeddings: (batch_size, max_caption_length, hidden_size). + """ + bs = x.shape[0] + position_indices = jnp.tile(jnp.arange(self.max_caption_length)[None], + [bs, 1]) + word_embeddings = self.words(x) + position_embeddings = nn.Embed( + self.max_caption_length, self.hidden_size, + embedding_init=nn.initializers.normal(stddev=0.02), + name='positions')(position_indices) + embeddings = nn.LayerNorm(epsilon=1e-8, name='layer_norm')( + word_embeddings + position_embeddings[:, :x.shape[1]] + ) # eps checked. + embeddings = nn.Dropout(self.dropout_prob, name='dropout')( + embeddings, deterministic=not train) + return embeddings + + +class TransformerDecoder(nn.Module): + """Transformer Decoder Textual Head of GIT.""" + ger_vocab_size: int = 30522 + ger_max_code_length: int = 5 + text_vocab_size: int = 30522 + max_context_length: int = 1024 + dropout_prob: float = 0.1 + hidden_size: int = 768 + num_heads: int = 12 + num_hidden_layers: int = 6 + stochastic_depth: float = 0.0 + attention_dropout: float = 0.1 + + def setup(self): + self.embedding = WordAndPositionalEmbedding( + vocab_size=self.text_vocab_size, + hidden_size=self.hidden_size, + max_caption_length=self.max_context_length, + dropout_prob=self.dropout_prob, + name='embedding') + if self.ger_vocab_size != self.text_vocab_size: + # If text and GER code vocabulary sizes do not match, we use separate + # embedding layers for them. + self.separate_ger_embedding = WordAndPositionalEmbedding( + vocab_size=self.ger_vocab_size, + hidden_size=self.hidden_size, + max_caption_length=self.ger_max_caption_length, + dropout_prob=self.dropout_prob, + name='separate_ger_embedding') + + def concate_context_tokens_to_visual( + self, visual_features, context_tokens, train=False): + """Concatenate context tokens (e.g., input question) to visual tokens. + + Args: + visual_features: (batch_size, feature_length, object_feat_size). + context_tokens: (batch_size, context_length) + train: bool + Returns: + visual_features: (batch_size, feature_length+context_length, hidden_size) + feat_valid_mask: (batch_size, feature_length+context_length): bool array. + if the visual_features is padded (to handle different context_lengths). + """ + feat_valid_mask = jnp.ones( + (visual_features.shape[:2]), + dtype=bool) # (text_bs, num_tokens) + context_tokens = context_tokens.reshape( + -1, context_tokens.shape[-1]) # (text_bs, num_context_tokens) + context_features = self.embedding(context_tokens, train=train) + + # Note context_tokens do not have BOS or EOS. All padded tokens are 0. + context_valid_mask = context_tokens > 0 # (text_bs, num_context_tokens) + feat_valid_mask = jnp.concatenate( + [feat_valid_mask, context_valid_mask], + axis=1) # (text_bs, num_tot_tokens) + visual_features = jnp.concatenate( + [visual_features, context_features], + axis=1) # (text_bs, num_tot_tokens, dim) + return visual_features, feat_valid_mask + + @nn.compact + def __call__( + self, ger_tokens, visual_features, + context_tokens=None, train=False,): + """Generate logits of a single word. + + Args: + ger_tokens: (batch_size, code_length). + visual_features: (batch_size, feature_length, feat_size). + context_tokens: (batch_size, context_length). + train: bool. + Returns: + #output_logits: (batch_size, caption_length, vocab_size). + #trans_out: (batch_size, caption_length, hidden_size) or + # (batch_size, feature_length + caption_length, hidden_size) when + # return_visual_feature is True. + """ + x = nn.Dense( + self.hidden_size, name='visual_projection.0', + kernel_init=nn.initializers.normal(stddev=0.02))( + visual_features) # (batch_size, feature_length, hidden_size) + x = nn.LayerNorm(epsilon=1e-5, name='visual_projection.1')(x) + + memory_key_padding_mask = None + if context_tokens is not None: + x, hidden_valid_mask = self.concate_context_tokens_to_visual( + x, context_tokens, train=train) + memory_key_padding_mask = ~hidden_valid_mask + embedding_fn = self.embedding + if self.ger_vocab_size != self.text_vocab_size: + embedding_fn = self.separate_ger_embedding + code_embeddings = embedding_fn(ger_tokens, train=train) + uni_mask_zero_neg = text_decoder.generate_future_mask(ger_tokens.shape[1]) + trans_out = text_decoder.BertEncoderAsDecoder( + num_hidden_layers=self.num_hidden_layers, + hidden_size=self.hidden_size, + num_heads=self.num_heads, + name='transformer')( + code_embeddings, x, + memory_key_padding_mask=memory_key_padding_mask, + tgt_mask=uni_mask_zero_neg, train=train, + ) + + # Decoded Logits + output_logits = nn.Dense( + self.ger_vocab_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='output')( + trans_out) # (batch_size, code_length, vocab_size) + return output_logits + + +class GERFlaxModel(nn.Module): + """Inspired from GIT captioning model.""" + ger_vocab_size: int = 30522 # size of BertTokenizer + ger_max_code_length: int = 5 + ger_begin_token_id: int = 101 # tokenizer.cls_token_id == 101 + ger_end_token_id: int = 102 # tokenizer.sep_token_id == 102 + max_context_length: int = 40 # the context is the input question + text_vocab_size: int = 30522 # size of BertTokenizer + text_begin_token_id: int = 101 # tokenizer.cls_token_id == 101 + text_end_token_id: int = 102 # tokenizer.sep_token_id == 102 + label_smooth: float = 0.1 + backbone_args: ml_collections.ConfigDict = dataclasses.field( + default_factory=ml_collections.ConfigDict) + pixel_mean: Any = GIT_PIXEL_MEAN + pixel_std: Any = GIT_PIXEL_STD + dropout_prob: float = 0.1 + + def setup(self): + self.image_encoder = git_vit.ViT(**self.backbone_args, name='image_encoder') + self.decoder = TransformerDecoder( + ger_vocab_size=self.ger_vocab_size, + ger_max_code_length=self.ger_max_code_length, + text_vocab_size=self.text_vocab_size, + dropout_prob=self.dropout_prob, + name='textual') + + @nn.compact + def __call__( + self, images, context_text_tokens=None, code_tokens=None, + preprocess=True, train=False, debug=False): + """Forward GIT model used for GER.""" + del debug + if preprocess: + images = self.preprocess(images) + visual_features = self.image_encoder(images, train=train) # (B, hw, D) + visual_features = visual_features.reshape( + visual_features.shape[0], -1, visual_features.shape[-1], + ) # (B, hw, D) + if code_tokens is None: + code_tokens = jnp.full( + (visual_features.shape[0], + self.ger_max_code_length), self.ger_end_token_id, dtype=jnp.int32) + code_tokens = code_tokens.at[:, 0].set(self.ger_begin_token_id) + if context_text_tokens is None and self.max_context_length: + context_text_tokens = jnp.full( + (visual_features.shape[0], self.max_context_length), + self.text_end_token_id, dtype=jnp.int32) # (B, max_cap_len) + else: + batch_size = code_tokens.shape[0] + visual_features = jnp.broadcast_to( + visual_features[:, None], + (batch_size, 1,) + visual_features.shape[1:], + ).reshape((batch_size,) + visual_features.shape[1:]) + if context_text_tokens is not None: + context_text_tokens = jnp.broadcast_to( + context_text_tokens[:, None], + (batch_size, 1,) + context_text_tokens.shape[1:], + ).reshape((batch_size,) + context_text_tokens.shape[1:]) + outputs = self.decoder( + code_tokens, + visual_features, + context_tokens=context_text_tokens, + train=train, + ) # (text_batch_size, max_code_len, vocab_size) + if train: + res = {'outputs': outputs} + else: + res = {'visual_features': visual_features, 'outputs': outputs, + 'begin_tokens': code_tokens} + if context_text_tokens is not None: + res['context_tokens'] = context_text_tokens + return res + + def decode_text(self, code_tokens, visual_features, context_tokens=None): + """Generate logits of a single token. + + Args: + code_tokens: (batch_size, caption_length). + visual_features: (batch_size, feature_length, feat_size). + context_tokens: (batch_size, context_length). + Returns: + output_logits: (batch_size, caption_length, vocab_size). + """ + return self.decoder( + code_tokens, visual_features, + context_tokens=context_tokens, train=False) + + def preprocess(self, inputs): + """Proprocess images. Normalize pixels for non-padded pixels.""" + mean = jnp.asarray(self.pixel_mean, dtype=jnp.float32).reshape(1, 1, 1, 3) + std = jnp.asarray(self.pixel_std, dtype=jnp.float32).reshape(1, 1, 1, 3) + inputs = (inputs - mean) / std + return inputs + + def loss_function(self, outputs, batch): + """Next code token prediction loss with label smoothing.""" + outputs = outputs['outputs'] + vocab_size = outputs.shape[-1] + gt_code = batch['code_tokens'] + outputs = outputs[:, :-1] # Move GT one token to the right. + # We don't want to predict a EOS from a EOS. + valid = (gt_code != self.ger_end_token_id).astype( + jnp.float32)[:, :-1] + gt_code = gt_code[:, 1:] # No need to predict BOS + gt = jax.nn.one_hot(gt_code, vocab_size) + # customized label smoothing following GRiT + # https://github.com/JialianW/GRiT/blob/master/grit/modeling/text/ + # text_decoder.py#L668 + gt = gt * (1. - self.label_smooth) + ( + 1. - gt) * self.label_smooth / (vocab_size - 1) + gt = jax.lax.stop_gradient(gt) + loss = optax.softmax_cross_entropy(outputs, gt) + loss = (loss * valid[:, :]).sum() / (valid.sum() + 1e-8) + + preds = jnp.argmax(outputs, axis=-1) + targets = jnp.argmax(gt, axis=-1) + correct = jnp.equal(preds, targets) + correct = (correct * valid[:, :]).sum() / (valid.sum() + 1e-8) + return loss, {'total_loss': loss, 'accuracy': correct} + + +class GERModel(base_model.BaseModel): + """Scenic Model Wrapper.""" + + def get_dict_from_config(self): + return dict( + ger_vocab_size=self.config.get('vocab_size', 30520) + 2, + ger_max_code_length=self.config.get('code_length', 4) + 1, + ger_end_token_id=self.config.get('ger_eos', 102), + ger_begin_token_id=self.config.get('ger_bos', 101), + max_context_length=self.config.dataset_configs.get( + 'max_context_tokens', 40), + text_begin_token_id={ + 'bert': 101, 't5': 0 + }[self.config.dataset_configs.get('tokenizer_type', 'bert')], + text_end_token_id={ + 'bert': 102, 't5': 1 + }[self.config.dataset_configs.get('tokenizer_type', 'bert')], + text_vocab_size={ + 'bert': 30522, 't5': 32100 + }[self.config.dataset_configs.get('tokenizer_type', 'bert')], + backbone_args=self.config.model.get( + 'backbone_args', ml_collections.ConfigDict()), + label_smooth=self.config.model.get('label_smooth', 0.1), + pixel_mean=self.config.model.get('pixel_mean', GIT_PIXEL_MEAN), + pixel_std=self.config.model.get('pixel_std', GIT_PIXEL_STD), + dropout_prob=self.config.model.get('dropout_prob', 0.1), + ) + + def build_flax_model(self): + return GERFlaxModel(**self.get_dict_from_config()) + + def loss_function(self, outputs, batch): + return self.flax_model.loss_function(outputs, batch) diff --git a/scenic/projects/gerald/models/git_vit.py b/scenic/projects/gerald/models/git_vit.py new file mode 100644 index 0000000000000000000000000000000000000000..fd0e49e43c0b1252451b3968fcbc9977190e9622 --- /dev/null +++ b/scenic/projects/gerald/models/git_vit.py @@ -0,0 +1,396 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""ViT implementation. + +Pytorch reference: https://github.com/microsoft/GenerativeImage2Text/blob/\ +main/generativeimage2text/layers/CLIP/model.py + +Compare to a plain ViT, this implementation uses quick_gelu, supports +configurable normalizations before/ after the transformer blocks. + +Currently the code also supports windows attention and relative positional +embedding. These are not used in the original GIT, but can be used for larger +input size in future developed. + +""" + +import functools +from typing import Any + +import flax.linen as nn +import jax +import jax.numpy as jnp + +KERNEL_INIT = { + 'normal': nn.initializers.normal(stddev=0.02), +} + + +class Attention(nn.Module): + """Multi-head Attention block with relative position embeddings. + + Attributes: + dim (int): Number of input channels. + num_heads (int): Number of attention heads. + qkv_bias (bool: If True, add a learnable bias to query, key, value. + beit_like_qkv_bias (bool): no bias for k. + """ + dim: int + num_heads: int = 8 + qkv_bias: bool = True + beit_like_qkv_bias: bool = False + kernel_init: str = 'normal' + with_grid_tokens: bool = False + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x): + """Forward a block. + + Args: + x: if self.with_grid_tokens == False (default), x should be in shape + (batch_size, num_tokens, dim); + if self.with_grid_tokens == True, x should be in shape + (batch_size, height, width, dim); + Returns: + x: the same shape as the input. + """ + + batch, num_tokens, _ = x.shape + head_dim = self.dim // self.num_heads + if self.beit_like_qkv_bias: + q_bias = self.param( + 'q_bias', nn.initializers.zeros, (self.dim,)) + v_bias = self.param( + 'v_bias', nn.initializers.zeros, (self.dim,)) + k_bias = jnp.zeros((self.dim,), dtype=jnp.float32) + qkv_bias = jnp.concatenate([q_bias, k_bias, v_bias], axis=0) + qkv = nn.Dense( + self.dim * 3, use_bias=False, dtype=self.dtype, + kernel_init=KERNEL_INIT[self.kernel_init], name='qkv')( + x) # batch x height x width x 3dim + qkv = qkv + qkv_bias[None, None, :] + else: + qkv = nn.Dense(self.dim * 3, use_bias=self.qkv_bias, name='qkv')( + x) # batch x num_tokens x 3dim + qkv = qkv.reshape(batch, num_tokens, 3, self.num_heads, -1).transpose( + 2, 0, 3, 1, 4) # 3 x batch x num_heads x num_tokens x D + + qkv = qkv.reshape(3, batch * self.num_heads, num_tokens, -1) + q, k, v = qkv[0], qkv[1], qkv[2] # [batch * num_heads, num_tokens, D] + attn = (q * (head_dim ** -0.5)) @ k.transpose( + 0, 2, 1) # [batch * num_heads, num_tokens, num_tokens] + + attn = jax.nn.softmax(attn) + x = (attn @ v).reshape( + batch, self.num_heads, num_tokens, -1).transpose( + 0, 2, 1, 3).reshape(batch, num_tokens, -1) + + x = nn.Dense(self.dim, name='proj')(x) + return x + + +def quick_gelu(x: jnp.ndarray) -> jnp.ndarray: + return x * jax.nn.sigmoid(1.702 * x) + + +class Mlp(nn.Module): + """Multilayer perceptron.""" + + hidden_features: int + out_features: int + kernel_init: str = 'normal' + dtype: jnp.dtype = jnp.float32 + activation: str = 'quick_gelu' + + @nn.compact + def __call__(self, x): + x = nn.Dense( + self.hidden_features, dtype=self.dtype, + kernel_init=KERNEL_INIT[self.kernel_init], name='fc1')(x) + if self.activation == 'quick_gelu': + x = quick_gelu(x) + elif self.activation == 'gelu': + x = nn.gelu(x, approximate=False) + else: + raise NotImplementedError(self.activation) + x = nn.Dense( + self.out_features, dtype=self.dtype, + kernel_init=KERNEL_INIT[self.kernel_init], name='fc2')(x) + return x + + +class Block(nn.Module): + """Transformer blocks with support of window attention and residual blocks. + + Attributes: + dim (int): Number of input channels. + num_heads (int): Number of attention heads in each ViT block. + mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. + qkv_bias (bool): If True, add a learnable bias to query, key, value. + beit_like_qkv_bias (bool): no bias for k. + drop_path (float): Stochastic depth rate. + """ + dim: int + num_heads: int + mlp_ratio: float = 4.0 + qkv_bias: bool = True + beit_like_qkv_bias: bool = False + mlp_activation: str = 'quick_gelu' + drop_path: float = 0.0 + layer_scale_init_value: float = -1.0 + kernel_init: str = 'normal' + with_grid_tokens: bool = False + dtype: jnp.dtype = jnp.float32 + + def get_keep_pattern(self, + x: jnp.ndarray, + deterministic: bool): + """DropPath Layer.""" + if not deterministic and self.drop_path: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + drop_pattern = jax.random.bernoulli( + self.make_rng('dropout'), self.drop_path, shape).astype(self.dtype) + keep_pattern = (1. - drop_pattern) + if self.drop_path < 1.: + keep_pattern = keep_pattern / (1. - self.drop_path) + return keep_pattern + else: + return 1.0 + + @nn.compact + def __call__(self, x, train: bool = False): + shortcut = x + ln = functools.partial(nn.LayerNorm, epsilon=1e-6) + x = ln(name='norm1')(x) + + x = Attention( + self.dim, + num_heads=self.num_heads, + qkv_bias=self.qkv_bias, + beit_like_qkv_bias=self.beit_like_qkv_bias, + with_grid_tokens=self.with_grid_tokens, + name='attn')(x) + + if self.layer_scale_init_value > 0: + gamma_1 = self.param( + 'gamma_1', + nn.initializers.constant(self.layer_scale_init_value), + (self.dim)) + x = x * gamma_1[..., :] + x = shortcut + self.get_keep_pattern(x, not train) * x + + y = ln(name='norm2')(x) + y = Mlp( + int(self.dim * self.mlp_ratio), + self.dim, + kernel_init=self.kernel_init, + activation=self.mlp_activation, + dtype=self.dtype, + name='mlp')(y) + if self.layer_scale_init_value > 0: + gamma_2 = self.param( + 'gamma_2', + nn.initializers.constant(self.layer_scale_init_value), + (self.dim)) + y = y * gamma_2[..., :] + x = x + self.get_keep_pattern(y, not train) * y + return x + + +class ViT(nn.Module): + """This module implements Vision Transformer (ViT) backbone. + + Attributes: + patch_size (int): Patch size. + in_chans (int): Number of input image channels. + embed_dim (int): Patch embedding dimension. + depth (int): Depth of ViT. + num_heads (int): Number of attention heads in each ViT block. + mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. + qkv_bias (bool): If True, add a learnable bias to query, key, value. + beit_like_qkv_bias (bool): no bias for k. + drop_path_rate (float): Stochastic depth rate. + use_abs_pos (bool): If True, use absolute positional embeddings. + pretrain_img_size (int): input image size for pretraining models. + pretrain_use_cls_token (bool): If True, pretrainig models use class token. + layer_scale_init_value (float): if add a scaling layer with the initialized + value. Negative means not add such layers. + kernel_init (str): functions to initialize layers. Currently only supports + 'normal'. + freeze_vit_layer: (int). Freeze early layers. + use_ln_pre (bool): if use a layer norm before transformer blocks. Used in + CLIP/ GIT. Not used in MAE/ ViTDet. + use_ln_post (bool): if use a layer norm after transformer blocks. Used in + CLIP/ GIT. Not used in MAE/ ViTDet. + pe_bias (bool): if the patch-embedding layer has bias. Not used in + CLIP/ GIT. Used in MAE/ ViTDet. + use_class_embedding (bool): if use the cls_token in the attention. If True, + the attention block takes flattened tokens as input. If False, the + attention block takes grid feature as input. + dtype: jnp.dtype. + window_block_indexes: Never used. Keep to make legacy configs runable. + use_rel_pos: Never used. Keep to make lagacy configs runable. + """ + patch_size: int = 16 + in_chans: int = 3 + embed_dim: int = 768 + depth: int = 12 + num_heads: int = 12 + mlp_ratio: float = 4.0 + qkv_bias: bool = True + beit_like_qkv_bias: bool = False + mlp_activation: str = 'quick_gelu' + drop_path_rate: float = 0.1 + use_abs_pos: bool = True + pretrain_img_size: int = 224 + pretrain_use_cls_token: bool = True + layer_scale_init_value: float = -1.0 + kernel_init: str = 'normal' + freeze_vit_layer: int = -1 + use_ln_pre: bool = False + use_ln_post: bool = False + pe_bias: bool = True + use_class_embedding: bool = True + dtype: jnp.dtype = jnp.float32 + token_mask_probability: float = -1.0 + token_mask_test: bool = False + window_block_indexes: Any = None + use_rel_pos: Any = None + + def _get_abs_pos(self, abs_pos, hw): + """Calculate absolute positional embeddings. + + If needed, resize embeddings and remove cls_token dimension for the original + embeddings. + Args: + abs_pos (array): absolute positional embeddings with (1, num_position, C). + hw (Tuple): size of input image tokens. + Returns: + Absolute positional embeddings after processing with shape (1, H, W, C) + """ + h, w = hw + if self.pretrain_use_cls_token: + abs_pos_no_cls = abs_pos[:, 1:] + else: + abs_pos_no_cls = abs_pos + xy_num = abs_pos_no_cls.shape[1] + size = int(xy_num ** 0.5) + assert size * size == xy_num + abs_pos_no_cls = abs_pos_no_cls.reshape( + abs_pos_no_cls.shape[0], size, size, -1) + if size != h or size != w: + abs_pos_no_cls = jax.image.resize( + abs_pos_no_cls, + (abs_pos_no_cls.shape[0], h, w, abs_pos_no_cls.shape[3]), + method='bicubic', + ) + if self.use_class_embedding: + abs_pos_no_cls = abs_pos_no_cls.reshape( + abs_pos_no_cls.shape[0], h * w, -1) + new_abs_pos = jnp.concatenate([abs_pos[:, :1], abs_pos_no_cls], axis=1) + else: + new_abs_pos = abs_pos_no_cls + else: + if self.use_class_embedding: + new_abs_pos = abs_pos + else: + new_abs_pos = abs_pos_no_cls + return new_abs_pos + + @nn.compact + def __call__(self, x: jnp.ndarray, train: bool = False): + """Forward ViT backbone. + + Args: + x: (batch_size, height, width, 3) the input image + train: bool; + Returns: + x: the features after the backbone. (batch_size, seq_length, embed_dim). + """ + x = nn.Conv( + self.embed_dim, (self.patch_size, self.patch_size), + strides=(self.patch_size, self.patch_size), + padding='VALID', + use_bias=self.pe_bias, + name='patch_embed.proj')(x) + + if self.use_class_embedding: + class_embedding = self.param( + 'class_embedding', nn.initializers.zeros, (1, 1, self.embed_dim)) + class_embedding = jnp.broadcast_to( + class_embedding, (x.shape[0], 1, self.embed_dim)) + x = x.reshape(x.shape[0], -1, x.shape[-1]) # (B, hw, C) + x = jnp.concatenate([class_embedding, x], axis=1) + + if self.use_abs_pos: + num_patches = (self.pretrain_img_size // self.patch_size) ** 2 + num_positions = ( + num_patches + 1) if self.pretrain_use_cls_token else num_patches + pos_embed = self.param( + 'pos_embed', nn.initializers.zeros, + (1, num_positions, self.embed_dim)) + if self.use_class_embedding: + input_size = int((x.shape[1] - 1) ** 0.5) + x = x + self._get_abs_pos(pos_embed, (input_size, input_size)) + else: + x = x + self._get_abs_pos(pos_embed, (x.shape[1], x.shape[2])) + + # TODO(zhouxy): The current MAE is not optimal. We sample a single index + # for all images in the batch. We should use different indexes each image. + if self.token_mask_probability > 0: + assert self.use_class_embedding + num_pixel_tokens = x.shape[1] - 1 + num_remaining_tokens = int( + (1.0 - self.token_mask_probability) * num_pixel_tokens) + if train: + inds = jax.random.permutation( + self.make_rng('dropout'), + jnp.arange(num_pixel_tokens, dtype=jnp.int32), + independent=True, + )[:num_remaining_tokens] + else: + if self.token_mask_test: + inds = jnp.linspace( + 0, num_pixel_tokens, num_remaining_tokens, + endpoint=False, dtype=jnp.int32) + else: + inds = jnp.arange(num_pixel_tokens, dtype=jnp.int32) + unmasked_pixel_tokens = jnp.take_along_axis( + x[:, 1:], inds[None, :, None], axis=1) + x = jnp.concatenate([x[:, :1], unmasked_pixel_tokens], axis=1) + + dp_rates = [ + self.drop_path_rate * i / (self.depth - 1) for i in range(self.depth)] + if self.use_ln_pre: + x = nn.LayerNorm(name='ln_pre')(x) + for i in range(self.depth): + x = Block( + dim=self.embed_dim, + num_heads=self.num_heads, + mlp_ratio=self.mlp_ratio, + qkv_bias=self.qkv_bias, + beit_like_qkv_bias=self.beit_like_qkv_bias, + mlp_activation=self.mlp_activation, + drop_path=dp_rates[i], + with_grid_tokens=not self.use_class_embedding, + layer_scale_init_value=self.layer_scale_init_value, + name=f'blocks.{i}', + )(x, train=train) + if i + 1 == self.freeze_vit_layer: + x = jax.lax.stop_gradient(x) + if self.use_ln_post: + x = nn.LayerNorm(name='ln_post')(x) + return x diff --git a/scenic/projects/gerald/models/text_decoder.py b/scenic/projects/gerald/models/text_decoder.py new file mode 100644 index 0000000000000000000000000000000000000000..37873e14618c483c3b110b5b5e7347ed641b761b --- /dev/null +++ b/scenic/projects/gerald/models/text_decoder.py @@ -0,0 +1,328 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Auto-regressive text decoder in GIT paper. + +GIT: A Generative Image-to-text Transformer for Vision and Language. Wang et al. + +arXiv: https://arxiv.org/abs/2205.14100 + +reference torch implementation: +https://github.com/microsoft/GenerativeImage2Text/blob/main/ +generativeimage2text/layers/decoder.py + +""" + +from flax import linen as nn +import jax +import jax.numpy as jnp + +from scenic.model_lib.layers import nn_layers + +NEG_INF = float('-inf') + + +class BertSelfAttention(nn.Module): + """Bert layer self attention.""" + + num_heads: int = 12 + hidden_size: int = 768 + attention_dropout: float = 0.1 + + @nn.compact + def __call__( + self, input_tensor, attention_mask, train=False): + # input_tensor: (batch_size, tot_len, hidden_size) + # attention_mask: (1, 1, tot_len, tot_len): NEG_INF to mask entry out. + q = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='query')(input_tensor) + k = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='key')(input_tensor) + v = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='value')(input_tensor) + # TODO(zhouxy): implement decoding cache here. + + head_dim = self.hidden_size // self.num_heads + transpose = lambda x: x.reshape( # pylint: disable=g-long-lambda + x.shape[0], x.shape[1], self.num_heads, head_dim).transpose(0, 2, 1, 3) + q = transpose(q) + k = transpose(k) + v = transpose(v) # (batch_size, num_heads, tot_len, head_dim) + attention_scores = (q * (head_dim ** -0.5)) @ k.transpose( + 0, 1, 3, 2) # (batch_size, num_heads, tot_len, tot_len) + attention_scores = attention_scores + attention_mask + attention_scores = jax.nn.softmax(attention_scores, axis=-1) + attention_scores = nn.Dropout(self.attention_dropout)( + attention_scores, deterministic=not train) + out = (attention_scores @ v).transpose(0, 2, 1, 3).reshape( + v.shape[0], v.shape[2], self.hidden_size) + return out + + +class BertSelfOutput(nn.Module): + """Bert layer self output.""" + + hidden_size: int = 768 + hidden_dropout: float = 0.1 + stochastic_depth: float = 0.0 + + @nn.compact + def __call__(self, hidden_states, input_tensor, train=False): + hidden_states = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='dense')(hidden_states) + hidden_states = nn.Dropout(self.hidden_dropout)( + hidden_states, deterministic=not train) + hidden_states = nn_layers.StochasticDepth(self.stochastic_depth)( + hidden_states, deterministic=not train) + hidden_states = hidden_states + input_tensor + hidden_states = nn.LayerNorm( + epsilon=1e-5, name='LayerNorm')(hidden_states) + return hidden_states + + +class BertAttention(nn.Module): + """Bert layer attention.""" + hidden_size: int = 768 + num_heads: int = 12 + dropout: float = 0.1 + attention_dropout: float = 0.1 + stochastic_depth: float = 0.0 + + @nn.compact + def __call__( + self, input_tensor, attention_mask, train=False): + self_outputs = BertSelfAttention( + num_heads=self.num_heads, + hidden_size=self.hidden_size, + attention_dropout=self.attention_dropout, + name='self')( + input_tensor, attention_mask, train=train, + ) # (batch_size, tot_len, hidden_size) + attention_output = BertSelfOutput( + hidden_size=self.hidden_size, + hidden_dropout=self.dropout, + stochastic_depth=self.stochastic_depth, + name='output')( + self_outputs, input_tensor, train=train, + ) # (batch_size, tot_len, hidden_size) + return attention_output + + +class BertIntermediate(nn.Module): + """Bert layer intermediate.""" + + intermediate_size: int = 768 * 4 + + @nn.compact + def __call__( + self, hidden_states, train=False): + hidden_states = nn.Dense( + self.intermediate_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='dense')(hidden_states) + hidden_states = nn.gelu(hidden_states, approximate=False) + return hidden_states + + +class BertOutput(nn.Module): + """Bert layer output.""" + + hidden_size: int = 768 + hidden_dropout: float = 0.1 + stochastic_depth: float = 0.0 + + @nn.compact + def __call__( + self, hidden_states, input_tensor, train=False): + hidden_states = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='dense')(hidden_states) + hidden_states = nn.Dropout(self.hidden_dropout)( + hidden_states, deterministic=not train) + hidden_states = nn_layers.StochasticDepth(self.stochastic_depth)( + hidden_states, deterministic=not train) + hidden_states = hidden_states + input_tensor + hidden_states = nn.LayerNorm( + epsilon=1e-12, name='LayerNorm')( + hidden_states) # eps following official implementation. + return hidden_states + + +class BertLayer(nn.Module): + """GIT encoder Layer.""" + hidden_size: int = 768 + num_heads: int = 12 + dropout: float = 0.1 + attention_dropout: float = 0.1 + stochastic_depth: float = 0.0 + + @nn.compact + def __call__( + self, hidden_states, attention_mask, train=False): + """Forward layer. + + Args: + hidden_states: (batch_size, tot_len, hidden_size). + attention_mask: (1, 1, tot_len, tot_len). + train: bool. + Returns: + hidden_states: (batch_size, tot_len, hidden_size). + """ + attention_outputs = BertAttention( + num_heads=self.num_heads, + hidden_size=self.hidden_size, + dropout=self.dropout, + attention_dropout=self.attention_dropout, + stochastic_depth=self.stochastic_depth, + name='attention')( + hidden_states, attention_mask, train=train, + ) # (batch_size, tot_len, hidden_size) + intermediate_output = BertIntermediate( + intermediate_size=self.hidden_size * 4, name='intermediate')( + attention_outputs, train=train, + ) # (batch_size, tot_len, intermediate_size) + layer_output = BertOutput( + hidden_size=self.hidden_size, + hidden_dropout=self.dropout, + stochastic_depth=self.stochastic_depth, + name='output')( + intermediate_output, attention_outputs, train=train, + ) # (batch_size, tot_len, hidden_size) + return layer_output + + +class BertEncoder(nn.Module): + """GIT Encoder.""" + num_hidden_layers: int = 6 + hidden_size: int = 768 + num_heads: int = 12 + stochastic_depth: float = 0.0 + dropout: float = 0.1 + attention_dropout: float = 0.1 + + @nn.compact + def __call__( + self, hidden_states, attention_mask, train=False): + """forward encoder. + + Args: + hidden_states: (batch_size, tot_len, hidden_size). + attention_mask: (1, 1, tot_len, tot_len). + train: bool. + Returns: + hidden_states: (batch_size, tot_len, hidden_size). + """ + assert self.stochastic_depth >= 0.0 and self.stochastic_depth < 1.0 + assert self.dropout >= 0.0 and self.dropout < 1.0 + assert self.attention_dropout >= 0.0 and self.attention_dropout < 1.0 + + for i in range(self.num_hidden_layers): + stochastic_depth_layer = ( + i / max(self.num_hidden_layers - 1, 1)) * self.stochastic_depth + hidden_states = BertLayer( + hidden_size=self.hidden_size, + num_heads=self.num_heads, + stochastic_depth=stochastic_depth_layer, + dropout=self.dropout, + attention_dropout=self.attention_dropout, + name=f'layer.{i}', + )(hidden_states, attention_mask, train=train) + return hidden_states + + +class BertEncoderAsDecoder(nn.Module): + """GIT Decoder.""" + num_hidden_layers: int = 6 + hidden_size: int = 768 + num_heads: int = 12 + + @nn.compact + def __call__( + self, tgt, memory, tgt_mask=None, + memory_key_padding_mask=None, train=False, return_visual_feature=False,): + """forward transformer. + + Args: + tgt: (batch_size, cap_len, hidden_size) + memory: (batch_size, feat_len, hidden_size) + tgt_mask: (cap_len, cap_len) + memory_key_padding_mask: (batch_size, feat_len). Padded is 1, valid is 0. + train: bool + return_visual_feature: bool + Returns: + result: (batch_size, cap_len, hidden_size) + """ + cap_len = tgt.shape[1] + feat_len = memory.shape[1] + hidden_states = jnp.concatenate( + [memory, tgt], axis=1 + ) # (batch_size, feat_len + cap_len, hidden_size) + top_left = jnp.zeros((feat_len, feat_len), dtype=jnp.float32) + top_right = jnp.full((feat_len, cap_len), NEG_INF, dtype=jnp.float32) + bottom_left = jnp.zeros((cap_len, feat_len), dtype=jnp.float32) + left = jnp.concatenate([top_left, bottom_left], axis=0) + right = jnp.concatenate([top_right, tgt_mask], axis=0) + + full_attention_mask = jnp.concatenate( + [left, right], + axis=1)[None] # (1, feat_len + cap_len, feat_len + cap_len) + if memory_key_padding_mask is None: + memory_key_padding_mask = jnp.full( + (1, memory.shape[1]), False, dtype=bool, + ) # (1, feat_len) + else: + full_attention_mask = jnp.broadcast_to( + full_attention_mask, + (memory_key_padding_mask.shape[0], + full_attention_mask.shape[1], full_attention_mask.shape[2])) + zero_negative_infinity = jnp.zeros_like( + memory_key_padding_mask, dtype=tgt.dtype) # (1, feat_len) + zero_negative_infinity = jnp.where( + memory_key_padding_mask, NEG_INF, zero_negative_infinity) + origin_left = full_attention_mask[:, :, :feat_len] + update = zero_negative_infinity[:, None, :] # (1, 1, feat_len) + full_attention_mask = jnp.concatenate( + [origin_left + update, full_attention_mask[:, :, feat_len:]], + axis=2) + full_attention_mask = full_attention_mask[ + :, None, :, :] # (1, 1, feat_len + cap_len, feat_len + cap_len) + + result = BertEncoder( + num_hidden_layers=self.num_hidden_layers, + hidden_size=self.hidden_size, + num_heads=self.num_heads, + name='encoder')( + hidden_states=hidden_states, + attention_mask=full_attention_mask, + train=train, + ) # (batch_size, feat_len + cap_len, hidden_size) + if not return_visual_feature: + result = result[:, feat_len:] # (batch_size, cap_len, hidden_size) + return result + + +def generate_future_mask(size): + """Generate attention mask.""" + mask = jnp.triu(jnp.ones((size, size), jnp.float32), k=1) + mask = jnp.where(mask > 0, NEG_INF, 0) + return mask diff --git a/scenic/projects/gerald/prepare_ald_codes.py b/scenic/projects/gerald/prepare_ald_codes.py new file mode 100644 index 0000000000000000000000000000000000000000..a7797b8e8007ec37350d5e197b204bda10b2d7a3 --- /dev/null +++ b/scenic/projects/gerald/prepare_ald_codes.py @@ -0,0 +1,110 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Prepare the ALD codes for all the entity names.""" +from absl import app +from absl import flags +import numpy as np + +from tensorflow.io import gfile + +FLAGS = flags.FLAGS +flags.DEFINE_integer('max_code_length', 4, 'Number of ALD code tokens.') +flags.DEFINE_string('entity_name_tokens', + 'path_to_file_with_pretokenized_names', + 'File containing pre-tokenized entity names.') +flags.DEFINE_string('save_output_path', + 'path_fo_save_the_ald_codes', + 'Where to save the tokenized entity names.') + + +def main(_): + # From BERT tokenizer. + eos_token = 102 + vocab_size = 30522 + + with gfile.Open(FLAGS.entity_name_tokens, 'rb') as f: + entity_name_tokens = np.load(f) + + uniques, counts = np.unique(entity_name_tokens, return_counts=True) + tok2count = np.ones(vocab_size) * (max(counts) + 1) + # Token value to how many times this token is used in the tokenized entity + # names. + tok2count[uniques + 2] = counts + + n_ent = 6084491 + clen = FLAGS.max_code_length + codes = np.ones((n_ent, clen - 1), dtype=np.int32) * (eos_token - 2) + extra_token_next = (eos_token - 2) * np.ones(( + n_ent, entity_name_tokens.shape[-1] - clen + 1), dtype=np.int32) + + # Rarest tokens appear first. + for i in range(n_ent): + tokens_ids_to_keep = np.argsort(tok2count[entity_name_tokens[i] + 2]) + codes[i] = entity_name_tokens[i][tokens_ids_to_keep[:clen - 1]] + extra_token_next[i] = entity_name_tokens[i][tokens_ids_to_keep[clen - 1:]] + + ald_codes = np.concatenate( + [codes, np.ones((n_ent, 1), dtype=np.int32) * (eos_token - 2)], axis=-1) + + set_of_codes = {} + w_random_token = 0 + indexes = np.arange(n_ent) + np.random.shuffle(indexes) + + for j, i in enumerate(indexes): + code = ald_codes[i] + if j % 1000000 == 0: + print('Processing ' + str(j) + '/' + str(n_ent)) + code_str = '-'.join([str(int(c))for c in code]) + if code_str not in set_of_codes: + # This is a new code, we leave it as is. + set_of_codes[code_str] = i + else: + # This code already exists. + # last valid index for the extra tokens + last_valid_extra_token = np.where( + extra_token_next[i] != (eos_token - 2))[0] + if len(last_valid_extra_token): # pylint: disable=g-explicit-length-test + last_valid_extra_token = last_valid_extra_token[-1] + else: + last_valid_extra_token = -1 + # position + last_valid_code = np.where(ald_codes[i] != (eos_token - 2))[0][-1] + if last_valid_code + 1 >= ald_codes.shape[1]: # the sequence is full! + last_valid_code = -2 # we use the last position + nki = 0 + while code_str in set_of_codes and nki <= last_valid_extra_token: + ald_codes[i, last_valid_code + 1] = extra_token_next[i, nki] + code_str = '-'.join([str(int(c))for c in ald_codes[i]]) + nki += 1 + + n_trials = 0 + if code_str in set_of_codes: + w_random_token += 1 + while code_str in set_of_codes and n_trials < 3: + random_token = ((eos_token - 2) + np.random.choice( + vocab_size - 2 - (eos_token - 2), size=1))[0] + ald_codes[i, last_valid_code + 1] = random_token + code_str = '-'.join([str(int(c)) for c in ald_codes[i]]) + n_trials += 1 + set_of_codes[code_str] = i + + print(w_random_token / n_ent * 100.) + with gfile.Open(FLAGS.save_output_path, 'wb') as f: + np.save(f, ald_codes) + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/gerald/utils.py b/scenic/projects/gerald/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..f266d30212def297b1872092907a93a0c97c1659 --- /dev/null +++ b/scenic/projects/gerald/utils.py @@ -0,0 +1,221 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for GER training.""" + +import copy +from typing import Any + +from absl import logging +import flax +from flax import jax_utils +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers as optimizer_lib + +from tensorflow.io import gfile + +PyTree = Any # JAX team is working on type annotation for pytree: + + +class EntityIds2Code(): + """Quantization with given token ids at initialization.""" + + def __init__(self, config: ml_collections.ConfigDict): + """Entity id to code.""" + self.config = config + self.bos = config.get('ger_bos', 101) + if self.config.get('load_codes_from'): + logging.info('Loading all codes from: %s', config.load_codes_from) + with gfile.Open(config.load_codes_from, 'rb') as f: + codes = np.load(f) + else: + # If we don't find a code file to start from we simply use random codes. + logging.info('Codes not found --> we use from randomly atomic ids.') + np.random.seed(config.get('seed', 0)) + ne = config.get('n_entities', 6084491) + nq = config.code_length + codes = np.random.choice(config.vocab_size, ne * nq,).reshape((ne, nq)) + self.codes = jnp.array(codes.astype(np.int32)) + + def __call__( + self, inputs: jax.Array, train: bool = False, + debug: bool = False) -> jax.Array: + del debug, train + tokens = self.encode_to_indices(inputs) + # We add two to the vocabulary: sos and eos + tokens = tokens + 2 + # We shift right. is 0. + b = tokens.shape[0] + tokens = jnp.concatenate( + [self.bos * jnp.ones((b, 1)), tokens], axis=-1).astype('int32') + return jax.lax.stop_gradient(tokens) + + def encode_to_indices(self, inputs: jax.Array) -> jax.Array: + return self.codes[inputs] + + +def get_code2id(entity_codes): + """Gets a code to entity id mapping.""" + code2id = {} + entity_codes += 2 + for i, code in enumerate(entity_codes): + code_str = '-'.join([str(int(c))for c in code]) + code2id[code_str] = i + return code2id + + +def load_weights(train_state, config): + """Load pretrained weights or checkpoint. + + Args: + train_state: the parameters that need to be restored. + config: config dict that should contain "weights": the path of the + checkpoint. + Returns: + train_state: restored train_state. + start_step: step number of the checkpoint. + """ + start_step = 0 + weight_path = config.get('weights', '') + skip_wrong_shape = config.get('skip_wrong_shape', False) + load_prefix = config.get('load_prefix', '') + ignored_keys = config.get('ignored_keys', '') + if weight_path: + logging.info('Loading weights from %s', weight_path) + weight_data = checkpoints.restore_checkpoint(weight_path, None) + if 'params' in weight_data: + restored_params = weight_data['params'] + else: + # Old Scenic train state format. + restored_params = weight_data['optimizer']['target'] + if 'params' in restored_params: # Backward compatibility. + restored_params = restored_params['params'] + + expected_params = train_state.params.unfreeze() + flattened_restored_params = flax.traverse_util.flatten_dict( + restored_params, sep='/') + if load_prefix: + flattened_restored_params = { + load_prefix + k: v for k, v in flattened_restored_params.items()} + flattened_expected_params = flax.traverse_util.flatten_dict( + expected_params, sep='/') + extra_keys = flattened_restored_params.keys( + ) - flattened_expected_params.keys() + missing_keys = flattened_expected_params.keys( + ) - flattened_restored_params.keys() + logging.info('Inspect extra keys:%s', extra_keys) + logging.info('Inspect missing keys:%s', missing_keys) + for k, v in flattened_restored_params.items(): + if ignored_keys and k.startswith(ignored_keys): + logging.info('Skipping parameter %s because it starts with %s.', k, + ignored_keys) + continue + if k not in flattened_expected_params: + logging.info( + 'Skipping parameter %s in restored model, but not in target.', k) + continue + if flattened_expected_params[k].shape != v.shape: + logging.info( + 'Key: %s. Expected shape: %s. Restored shape: %s', k, + flattened_expected_params[k].shape, v.shape) + if not skip_wrong_shape: + assert ValueError( + 'Shape mismatch between restored and target model' + 'Set config.skip_wrong_shape = True if this is expected.') + else: + flattened_expected_params[k] = v + new_params = flax.traverse_util.unflatten_dict( + flattened_expected_params, sep='/') + train_state = train_state.replace(params=flax.core.FrozenDict(new_params)) + return train_state, start_step + + +def optimizer_with_decoder_multiplier( + config: ml_collections.ConfigDict, + params: PyTree, + use_frozen_params: bool = True): + """Returns an optimizer with decoder learning rate multiplier. + + + Args: + config: The training config. + params: The parameters of the model being trained. + use_frozen_params: If True, the optimizer will always expect to receive + a FrozenDict of parameters and gradients. + + Returns: + An Optax optimizer. + """ + optimizer_config = config.optimizer + # Avoid modifying original config and allow alteration. + optimizer_config = copy.deepcopy(optimizer_config).unlock() + base_learning_rate = config.lr_configs.base_learning_rate + + decoder_layer_prefix = optimizer_config.decoder_layer_prefix + decoder_multiplier = optimizer_config.decoder_multiplier + decoder_learning_rate = base_learning_rate * decoder_multiplier + del optimizer_config.decoder_layer_prefix + del optimizer_config.decoder_multiplier + logging.info('Learning rate scales: %s', decoder_learning_rate) + + decoder_config = copy.deepcopy(config) + decoder_config.lr_configs.base_learning_rate = decoder_learning_rate + + learning_rate_fns = lr_schedules.get_learning_rate_fn(config) + decoder_learning_rate_fns = lr_schedules.get_learning_rate_fn( + decoder_config) + + optimizers = { + False: optimizer_lib.get_optimizer( # not decoder + optimizer_config, learning_rate_fns, params), + True: optimizer_lib.get_optimizer( # is decoder + optimizer_config, decoder_learning_rate_fns, params), + } + + def is_decoder(name: str) -> bool: + return name.startswith(decoder_layer_prefix) + + flat_params = flax.traverse_util.flatten_dict( + flax.core.unfreeze(params), keep_empty_nodes=True, sep='/') + flat_layer_map = {k: is_decoder(k) for k in flat_params} + layer_map = flax.traverse_util.unflatten_dict(flat_layer_map, sep='/') + if use_frozen_params: + layer_map = flax.core.freeze(layer_map) + + logging.info( + 'Layer assignments:\n%s', + flax.traverse_util.flatten_dict(layer_map, sep='/')) + tx = optax.multi_transform(optimizers, layer_map) + return tx + + +def to_cpu(array: jnp.ndarray): + """Transfers array (replicated on multiple hosts) to a single host. + + Args: + array: Replicated array of shape + [num_hosts, num_devices, local_batch_size, ...]. + + Returns: + array of shape [global_batch_size, ...] where + global_batch_size = num_devices * local_batch_size + """ + return jax.device_get(dataset_utils.unshard(jax_utils.unreplicate(array))) diff --git a/scenic/projects/knowledge_visual_language/README.md b/scenic/projects/knowledge_visual_language/README.md new file mode 100644 index 0000000000000000000000000000000000000000..901fe13e95fda8afc6b9b68e3dda1791e662ddd6 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/README.md @@ -0,0 +1,59 @@ +# Repository for REVEAL: Retrieval-Augmented Visual-Language Pre-Training with Multi-Source Multimodal Knowledge Memory +![REVEAL is an End-to-End Retrieval-Augmented VLM](data/vqa.png) + + +### [Project Page](https://reveal-cvpr.github.io/) | [arXiv](https://arxiv.org/abs/2212.05221) + +## What is REVEAL? + +We propose an end-to-end Retrieval-Augmented Visual Language Model (REVEAL) that +learns to encode world knowledge into a large-scale memory, and to retrieve from +it to answer knowledge-intensive queries + +REVEAL consists of four key components: the memory, the encoder, the retriever +and the generator. The large-scale memory encodes various sources of multimodal +world knowledge (e.g. image-text pairs, question answering pairs, knowledge +graph triplets, etc) via a unified encoder. The retriever finds the most +relevant knowledge entries in the memory, and the generator fuses the retrieved +knowledge with the input query to produce the output. A key novelty in our +approach is that the memory, encoder, retriever and generator are all +pre-trained end-to-end on a massive amount of data. Furthermore, our approach +can use a diverse set of multimodal knowledge sources, which is shown to result +in significant gains. We show that REVEAL achieves state-of-the-art results on +visual question answering (e.g., OKVQA) and image captioning. + +More details can be found in the [paper](https://arxiv.org/abs/2212.05221) +published at CVPR 2023 (Highlight). + +## Model + +The most important model files in this projects are as follow: +- `fusion_in_decoder_soft.py` is our base VL model +- `knowledge_fid.py` is our retrieval-augmented VL (main model), in which: + - "_dist_mips_across" function is the distributed retrieval operator + - "fuse_topk_knowledge" function is the attentive-fusion operator +- `local_memory.py` defines the basic data structure of in-memory KB +- `layers.py` defines most neural layers. + + +## Citation + +If you use REVEAL, please use the following BibTeX entry. + +``` +@inproceedings{reveal, + title={{REVEAL:} Retrieval-Augmented Visual-Language Pre-Training with Multi-Source Multimodal Knowledge Memory}, + author={Ziniu Hu and + Ahmet Iscen and + Chen Sun and + Zirui Wang and + Kai{-}Wei Chang and + Yizhou Sun and + Cordelia Schmid and + David A. Ross and + Alireza Fathi}, + booktitle={CVPR}, + year={2023} +} +``` + diff --git a/scenic/projects/knowledge_visual_language/__init__.py b/scenic/projects/knowledge_visual_language/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/knowledge_visual_language/configs/__init__.py b/scenic/projects/knowledge_visual_language/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/knowledge_visual_language/configs/finetune_okvqa_base.py b/scenic/projects/knowledge_visual_language/configs/finetune_okvqa_base.py new file mode 100644 index 0000000000000000000000000000000000000000..5516b342f418ef95d0d6eabaa0809e7a29c5c80e --- /dev/null +++ b/scenic/projects/knowledge_visual_language/configs/finetune_okvqa_base.py @@ -0,0 +1,135 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""WIT Retrieval + Captioning Pre-Training.""" + +import ml_collections + +TRAIN_DATA_SIZE = 10000 + + +def get_config() -> ml_collections.ConfigDict: + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'image_caption_debug' + + config.optimizer = 'adafactor' + n_device = 128 + batch_size = 6 * 2 * n_device + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = None + # config.optimizer_configs.momentum = 0.9 + # config.optimizer_configs.dtype_momentum = 'bfloat16' + config.optimizer_configs.weight_decay_rate = 0 + config.optimizer_configs.clipping_threshold = 10.0 + config.optimizer_configs.skip_scale_and_bias_regularization = False + + config.frozen_patterns = [] + config.not_frozen_patterns = [ + ('value_perceiver/.*', 0.1), + # ('text_encoder/.*', 0.05), + # ('img_encoder/.*', 0.05), + # ('shared_token_embedder/.*', 0.02), + ('query_head/.*', 0.3), + ('out_decoder/.*', 1.0), + ('key_head/.*', 0.3), + ('head_out/.*', 0.2), + ('fusion_encoder/.*', 0.5), + ('att_transform/.*', 0.3), + ('dataset_gate/.*', 0.5), + ] + + config.grad_clip_configs = ml_collections.ConfigDict() + config.grad_clip_configs.clip_method = 'clip_by_global_norm' + config.grad_clip_configs.clip_value = 1.0 + + config.kb_dataset_names = ['wit_table', 'cc12m_table', 'vqa_table'] + config.kb_dataset_configs = [{}, {}, {}] + + config.batch_size = batch_size + config.eval_batch_size = batch_size + config.rng_seed = 0 + config.update_num = True + config.num_training_epochs = 1000 + config.data_dtype_str = 'bfloat16' + # Model + config.model_name = 'knowledge_fid' + config.model = ml_collections.ConfigDict() + config.model.image_model = 'vit' + config.model.t5_name = 't5_1_1_base' + # ['t5_1_1_small', 't5_1_1_base', 't5_1_1_large', 't5_1_1_xl', 't5_1_1_xxl'] + config.model.num_fusion_layers = 6 + config.model.n_compressed_tokens = 32 + config.model.key_dim = 512 + config.model.dropout_rate = 0.1 + config.model.temperature = 0.2 + config.model.retr_k = 50 + config.model.retr_data_ratio = 0.1 + config.model.label_smoothing = 1e-2 + config.model.vit_name = 'B/16' + config.model.vit_model_path = 'JFT3b-B/16' + # [JFT3b-B/32, JFT3b-B/16, JFT3b-L/16, JFT3b-g/14, JFT3b-G/14] + config.model.t5_frozen_base = True + config.model.vit_num_frozen_layers = 1 / 2 + config.model.retrieve_local = False + config.model.use_psudo_retr = True + config.model.disentangle = False + config.model.gap = False + config.model.retrieval_ratio = 0.2 + config.model.n_knowledge_source = len(config.kb_dataset_names) + config.model.qa = True + config.frozen_memory = False + + config.vocab_size = 32120 + config.autoregressive_decoding = ml_collections.ConfigDict() + config.autoregressive_decoding.num_decodes = 1 + config.autoregressive_decoding.beam_search = False + + # Dataset. + config.dataset_name = 'okvqa' + config.dataset_configs = ml_collections.ConfigDict() + + # Learning rate. + config.num_train_examples = TRAIN_DATA_SIZE + steps_per_epoch = TRAIN_DATA_SIZE // config.batch_size + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.total_steps = int( + config.num_training_epochs * steps_per_epoch + ) + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * rsqrt_decay * linear_warmup' + config.lr_configs.warmup_steps = 2000 + config.lr_configs.timescale = 5000 + # config.lr_configs.steps_per_cycle = config.lr_configs.total_steps + config.lr_configs.base_learning_rate = 1e-5 + config.lr_configs.end_learning_rate = 1e-6 + + # Logging. + config.log_summary_steps = 100 + config.log_eval_steps = 500 + config.checkpoint_steps = 1000 + config.write_summary = True + config.xprof = True # Profile using xprof + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Initalisation configs + config.init_from = ml_collections.ConfigDict() + # Initializing from a vidcap model. + config.init_from.load_key_encoder = False + config.init_from.encoder = ml_collections.ConfigDict() + config.init_from.encoder.init_from_vit = False + config.init_from.encoder.checkpoint_path = None + return config diff --git a/scenic/projects/knowledge_visual_language/configs/wit_memory_G.py b/scenic/projects/knowledge_visual_language/configs/wit_memory_G.py new file mode 100644 index 0000000000000000000000000000000000000000..d81a509518b7e96b1da73b3d1eaf458c35b7fa09 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/configs/wit_memory_G.py @@ -0,0 +1,133 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""WIT Retrieval + Captioning Pre-Training.""" + +import ml_collections + +TRAIN_DATA_SIZE = 1_000_000_000 + + +def get_config() -> ml_collections.ConfigDict: + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'image_caption_debug' + + config.optimizer = 'adafactor' + n_device = 256 + batch_size = 4 * 2 * n_device + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = None + # config.optimizer_configs.momentum = 0.9 + # config.optimizer_configs.dtype_momentum = 'bfloat16' + config.optimizer_configs.weight_decay_rate = 2e-3 + config.optimizer_configs.clipping_threshold = 5.0 + config.optimizer_configs.skip_scale_and_bias_regularization = True + + config.frozen_patterns = [] + config.not_frozen_patterns = [('value_perceiver/.*', 0.3), + ('text_encoder/.*', 0.1), + ('img_encoder/.*', 0.1), + ('shared_token_embedder/.*', 0.1), + ('query_head/.*', 0.2), ('out_decoder/.*', 1), + ('key_head/.*', 0.2), ('head_out/.*', 0.2), + ('fusion_encoder/.*', 0.5), + ('att_transform/.*', 0.3), + ('dataset_gate/.*', 0.5)] + + config.grad_clip_configs = ml_collections.ConfigDict() + config.grad_clip_configs.clip_method = 'clip_by_global_norm' + config.grad_clip_configs.clip_value = 1.0 + + config.kb_dataset_names = ['wit_table', 'cc12m_table', 'vqa_table'] + # config.kb_dataset_configs = [{ + # 'train_split': 'train' + # }, { + # 'train_split': 'full[:%d]' % (25000 * n_device) + # }, {}] + config.kb_dataset_configs = [{}, {}, {}] + + config.batch_size = batch_size + config.eval_batch_size = batch_size + config.rng_seed = 0 + config.update_num = False + config.num_training_epochs = 2 + config.data_dtype_str = 'bfloat16' + # Model + config.model_name = 'knowledge_fid' + config.model = ml_collections.ConfigDict() + config.model.image_model = 'vit' + config.model.t5_name = 't5_1_1_large' + # ['t5_1_1_small', 't5_1_1_base', 't5_1_1_large', 't5_1_1_xl', 't5_1_1_xxl'] + config.model.num_fusion_layers = 8 + config.model.n_compressed_tokens = 32 + config.model.key_dim = 512 + config.model.dropout_rate = 0.0 + config.model.temperature = 0.2 + config.model.retr_k = 10 + config.model.retr_data_ratio = 0.2 + config.model.label_smoothing = 1e-2 + config.model.vit_name = 'g/14' + config.model.vit_model_path = 'JFT3b-g/14' + # [JFT3b-B/32, JFT3b-B/16, JFT3b-L/16, JFT3b-g/14, JFT3b-G/14] + config.model.t5_frozen_base = False + config.model.vit_num_frozen_layers = 4 / 5 + config.model.retrieve_local = False + config.model.use_psudo_retr = True + config.model.disentangle = True + config.model.gap = True + config.model.retrieval_ratio = 1e-2 + config.model.n_knowledge_source = len(config.kb_dataset_names) + config.model.qa = False + config.frozen_memory = False + + config.vocab_size = 32120 + config.autoregressive_decoding = ml_collections.ConfigDict() + config.autoregressive_decoding.num_decodes = 1 + config.autoregressive_decoding.beam_search = False + # Dataset. + config.dataset_name = 'web_image_text_generation' + config.dataset_configs = ml_collections.ConfigDict() + + # Learning rate. + config.num_train_examples = TRAIN_DATA_SIZE + steps_per_epoch = TRAIN_DATA_SIZE // config.batch_size + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.total_steps = int(config.num_training_epochs * + steps_per_epoch) + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * rsqrt_decay * linear_warmup' + config.lr_configs.warmup_steps = 20000 + config.lr_configs.timescale = 10000 + # config.lr_configs.steps_per_cycle = config.lr_configs.total_steps + config.lr_configs.base_learning_rate = 1e-3 + config.lr_configs.end_learning_rate = 1e-6 + + # Logging. + config.log_summary_steps = 100 + config.log_eval_steps = 1000 + config.checkpoint_steps = 5000 + config.write_summary = True + config.xprof = True # Profile using xprof + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + # Initalisation configs + config.init_from = ml_collections.ConfigDict() + # Initializing from a vidcap model. + config.init_from.load_key_encoder = False + config.init_from.encoder = ml_collections.ConfigDict() + config.init_from.encoder.init_from_vit = False + config.init_from.encoder.checkpoint_path = None + return config diff --git a/scenic/projects/knowledge_visual_language/configs/wit_memory_base.py b/scenic/projects/knowledge_visual_language/configs/wit_memory_base.py new file mode 100644 index 0000000000000000000000000000000000000000..71baa8dddb5e5373ffe92171e4d5a2b4587f114e --- /dev/null +++ b/scenic/projects/knowledge_visual_language/configs/wit_memory_base.py @@ -0,0 +1,129 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""WIT Retrieval + Captioning Pre-Training.""" + +import ml_collections + +TRAIN_DATA_SIZE = 1_000_000_000 + + +def get_config() -> ml_collections.ConfigDict: + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'image_caption_debug' + + config.optimizer = 'adafactor' + n_device = 128 + batch_size = 12 * 2 * n_device + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = None + # config.optimizer_configs.momentum = 0.9 + # config.optimizer_configs.dtype_momentum = 'bfloat16' + config.optimizer_configs.weight_decay_rate = 2e-3 + config.optimizer_configs.clipping_threshold = 5.0 + config.optimizer_configs.skip_scale_and_bias_regularization = True + + config.frozen_patterns = [] + config.not_frozen_patterns = [('value_perceiver/.*', 0.3), + # ('text_encoder/.*', 0.1), + # ('img_encoder/.*', 0.1), + ('shared_token_embedder/.*', 0.1), + ('query_head/.*', 0.2), ('out_decoder/.*', 1), + ('key_head/.*', 0.2), ('head_out/.*', 0.2), + ('fusion_encoder/.*', 0.5), + ('att_transform/.*', 0.3), + ('dataset_gate/.*', 0.5)] + + config.grad_clip_configs = ml_collections.ConfigDict() + config.grad_clip_configs.clip_method = 'clip_by_global_norm' + config.grad_clip_configs.clip_value = 1.0 + + config.kb_dataset_names = ['wit_table', 'cc12m_table', 'vqa_table'] + config.kb_dataset_configs = [{}, {}, {}] + + config.batch_size = batch_size + config.eval_batch_size = batch_size + config.rng_seed = 0 + config.update_num = False + config.num_training_epochs = 1 + config.data_dtype_str = 'bfloat16' + # Model + config.model_name = 'knowledge_fid' + config.model = ml_collections.ConfigDict() + config.model.image_model = 'vit' + config.model.t5_name = 't5_1_1_base' + # ['t5_1_1_small', 't5_1_1_base', 't5_1_1_large', 't5_1_1_xl', 't5_1_1_xxl'] + config.model.num_fusion_layers = 6 + config.model.n_compressed_tokens = 32 + config.model.key_dim = 512 + config.model.dropout_rate = 0.0 + config.model.temperature = 0.2 + config.model.retr_k = 10 + config.model.retr_data_ratio = 0.2 + config.model.label_smoothing = 1e-2 + config.model.vit_name = 'B/16' + config.model.vit_model_path = 'JFT3b-B/16' + # [JFT3b-B/32, JFT3b-B/16, JFT3b-L/16, JFT3b-g/14, JFT3b-G/14] + config.model.t5_frozen_base = False + config.model.vit_num_frozen_layers = 1 / 2 + config.model.retrieve_local = False + config.model.use_psudo_retr = True + config.model.disentangle = True + config.model.gap = True + config.model.retrieval_ratio = 1e-2 + config.model.n_knowledge_source = len(config.kb_dataset_names) + config.model.qa = False + config.frozen_memory = False + + config.vocab_size = 32120 + config.autoregressive_decoding = ml_collections.ConfigDict() + config.autoregressive_decoding.num_decodes = 1 + config.autoregressive_decoding.beam_search = False + # Dataset. + config.dataset_name = 'web_image_text_generation' + config.dataset_configs = ml_collections.ConfigDict() + + # Learning rate. + config.num_train_examples = TRAIN_DATA_SIZE + steps_per_epoch = TRAIN_DATA_SIZE // config.batch_size + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.total_steps = int(config.num_training_epochs * + steps_per_epoch) + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * rsqrt_decay * linear_warmup' + config.lr_configs.warmup_steps = 10000 + config.lr_configs.timescale = 10000 + # config.lr_configs.steps_per_cycle = config.lr_configs.total_steps + config.lr_configs.base_learning_rate = 1e-4 + config.lr_configs.end_learning_rate = 1e-6 + + # Logging. + config.log_summary_steps = 100 + config.log_eval_steps = 1000 + config.checkpoint_steps = 5000 + config.write_summary = True + config.xprof = True # Profile using xprof + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Initalisation configs + config.init_from = ml_collections.ConfigDict() + # Initializing from a vidcap model. + config.init_from.load_key_encoder = False + config.init_from.encoder = ml_collections.ConfigDict() + config.init_from.encoder.init_from_vit = False + config.init_from.encoder.checkpoint_path = None + return config diff --git a/scenic/projects/knowledge_visual_language/configs/wit_memory_large.py b/scenic/projects/knowledge_visual_language/configs/wit_memory_large.py new file mode 100644 index 0000000000000000000000000000000000000000..d18c8a2208c99744a56fd4805174b2c0f0a6f636 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/configs/wit_memory_large.py @@ -0,0 +1,125 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""WIT Retrieval + Captioning Pre-Training.""" + +import ml_collections + +TRAIN_DATA_SIZE = 1_000_000_000 + + +def get_config() -> ml_collections.ConfigDict: + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'image_caption_debug' + + config.optimizer = 'adafactor' + n_device = 128 + batch_size = 12 * 2 * n_device + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = None + # config.optimizer_configs.momentum = 0.9 + # config.optimizer_configs.dtype_momentum = 'bfloat16' + config.optimizer_configs.weight_decay_rate = 1e-3 + config.optimizer_configs.clipping_threshold = 5.0 + config.optimizer_configs.skip_scale_and_bias_regularization = False + + config.not_frozen_patterns = [('value_perceiver/.*', 0.3), + ('text_encoder/.*', 0.1), + ('img_encoder/.*', 0.1), + ('shared_token_embedder/.*', 0.1), + ('query_head/.*', 0.2), ('out_decoder/.*', 1), + ('key_head/.*', 0.2), ('head_out/.*', 0.2), + ('fusion_encoder/.*', 0.5), + ('att_transform/.*', 0.3), + ('dataset_gate/.*', 0.5)] + + config.grad_clip_configs = ml_collections.ConfigDict() + config.grad_clip_configs.clip_method = 'clip_by_global_norm' + config.grad_clip_configs.clip_value = 1.0 + + config.kb_dataset_names = ['wit_table', 'cc12m_table', 'vqa_table'] + config.kb_dataset_configs = [{ + 'train_split': 'train' + }, { + 'train_split': 'full[:%d]' % (50000 * n_device) + }, {}] + + config.batch_size = batch_size + config.eval_batch_size = batch_size + config.rng_seed = 0 + config.update_num = False + config.num_training_epochs = 5 + config.data_dtype_str = 'bfloat16' + # Model + config.model_name = 'knowledge_fid' + config.model = ml_collections.ConfigDict() + config.model.image_model = 'vit' + config.model.t5_name = 't5_1_1_large' + # ['t5_1_1_small', 't5_1_1_base', 't5_1_1_large', 't5_1_1_xl', 't5_1_1_xxl'] + config.model.num_fusion_layers = 8 + config.model.n_compressed_tokens = 64 + config.model.key_dim = 512 + config.model.dropout_rate = 0.0 + config.model.temperature = 0.2 + config.model.retr_k = 10 + config.model.retr_data_ratio = 0.2 + config.model.label_smoothing = 1e-2 + config.model.vit_name = 'L/16' + config.model.vit_model_path = 'JFT3b-L/16' + # [JFT3b-B/32, JFT3b-B/16, JFT3b-L/16, JFT3b-g/14, JFT3b-G/14] + config.model.t5_frozen_base = True + config.model.vit_num_frozen_layers = 5 / 6 + config.model.retrieve_local = True + config.model.disentangle = True + config.model.gap = True + config.model.retrieval_ratio = 1e-2 + config.model.n_knowledge_source = len(config.kb_dataset_names) + + # Dataset. + config.dataset_name = 'web_image_text_generation' + config.dataset_configs = ml_collections.ConfigDict() + + # Learning rate. + config.num_train_examples = TRAIN_DATA_SIZE + steps_per_epoch = TRAIN_DATA_SIZE // config.batch_size + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.total_steps = int(config.num_training_epochs * + steps_per_epoch) + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * rsqrt_decay * linear_warmup' + config.lr_configs.warmup_steps = 20000 + config.lr_configs.timescale = 10000 + # config.lr_configs.steps_per_cycle = config.lr_configs.total_steps + config.lr_configs.base_learning_rate = 1e-3 + config.lr_configs.end_learning_rate = 1e-3 + + # Logging. + config.log_summary_steps = 100 + config.log_eval_steps = 1000 + config.checkpoint_steps = 5000 + config.write_summary = True + config.xprof = True # Profile using xprof + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Initalisation configs + config.init_from = ml_collections.ConfigDict() + # Initializing from a vidcap model. + config.init_from.load_key_encoder = False + config.init_from.encoder = ml_collections.ConfigDict() + config.init_from.encoder.init_from_vit = False + config.init_from.encoder.checkpoint_path = None + return config diff --git a/scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_G_froze_config.py b/scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_G_froze_config.py new file mode 100644 index 0000000000000000000000000000000000000000..85dc4953a823479a360daed05004de88a02c6051 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_G_froze_config.py @@ -0,0 +1,112 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""WIT Retrieval + Captioning Pre-Training.""" + +import ml_collections + +TRAIN_DATA_SIZE = 5000000 + + +def get_config() -> ml_collections.ConfigDict: + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'image_caption_debug' + + config.optimizer = 'adafactor' + batch_size = 8 * 2 * 128 + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = None + config.optimizer_configs.weight_decay_rate = 1e-2 + config.optimizer_configs.clipping_threshold = 1.0 + config.optimizer_configs.skip_scale_and_bias_regularization = False + + config.frozen_patterns = [] + config.not_frozen_patterns = [('value_perceiver/.*', 1.5), + ('text_encoder/.*', 1), + ('shared_token_embedder/.*', 0.5), + ('query_head/.*', 1.2), ('out_decoder/.*', 1), + ('key_head/.*', 1.2), ('img_encoder/.*', 1), + ('head_out/.*', 1.2), ('fusion_encoder/.*', 1), + ('att_transform/.*', 1)] + + config.grad_clip_configs = ml_collections.ConfigDict() + config.grad_clip_configs.clip_method = 'clip_by_global_norm' + config.grad_clip_configs.clip_value = 1.0 + + config.batch_size = batch_size + config.eval_batch_size = batch_size + config.rng_seed = 0 + config.update_num = True + config.num_training_epochs = 50 + config.data_dtype_str = 'float32' + + # Model + config.model_name = 'retrieval_image_captioner_soft' + config.model = ml_collections.ConfigDict() + config.model.image_model = 'vit' + config.model.t5_name = 't5_1_1_large' + # ['t5_1_1_small', 't5_1_1_base', 't5_1_1_large', 't5_1_1_xl', 't5_1_1_xxl'] + config.model.num_fusion_layers = 8 + config.model.n_compressed_tokens = 64 + config.model.key_dim = 512 + config.model.dropout_rate = 0.0 + config.model.temperature = 0.2 + config.model.fuse_retrieval = True + config.model.supervised_retrieval = True + config.model.in_batch_neg = True + config.model.retrieval_ratio = 1 / 2 + config.model.label_smoothing = 1e-2 + config.model.vit_name = 'g/14' + config.model.vit_model_path = 'JFT3b-g/14' + config.model.vit_num_frozen_layers = 0.5 + # [JFT3b-B/32, JFT3b-B/16, JFT3b-L/16, JFT3b-g/14, JFT3b-G/14] + + # Dataset. + config.dataset_name = 'wiki_image_text_generation' + config.dataset_configs = ml_collections.ConfigDict() + + # Learning rate. + config.num_train_examples = TRAIN_DATA_SIZE + steps_per_epoch = TRAIN_DATA_SIZE // config.batch_size + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.total_steps = int(config.num_training_epochs * + steps_per_epoch) + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * rsqrt_decay * linear_warmup' + config.lr_configs.warmup_steps = int(0.1 * config.lr_configs.total_steps) + config.lr_configs.timescale = 5000 + # config.lr_configs.steps_per_cycle = config.lr_configs.total_steps + config.lr_configs.base_learning_rate = 4e-4 + config.lr_configs.end_learning_rate = 1e-6 + + # Logging. + config.log_summary_steps = 100 + config.log_eval_steps = 1000 + config.checkpoint_steps = 5000 + config.write_summary = True + config.xprof = True # Profile using xprof + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Initalisation configs + config.init_from = ml_collections.ConfigDict() + # Initializing from a vidcap model. + config.init_from.only_params = False + config.init_from.load_key_encoder = False + config.init_from.encoder = ml_collections.ConfigDict() + config.init_from.encoder.init_from_vit = False + config.init_from.encoder.checkpoint_path = None + return config diff --git a/scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_base_config.py b/scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_base_config.py new file mode 100644 index 0000000000000000000000000000000000000000..c3b37ec635beb2f7a103b0ae92521284091b1ac3 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_base_config.py @@ -0,0 +1,111 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""WIT Retrieval + Captioning Pre-Training.""" + +import ml_collections + +TRAIN_DATA_SIZE = 5000000 + + +def get_config() -> ml_collections.ConfigDict: + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'image_caption_debug' + + # config.optimizer = 'adam' + # batch_size = 30 * 2 * 64 + # config.optimizer_configs = ml_collections.ConfigDict() + # config.optimizer_configs.beta1 = 0.9 + # config.optimizer_configs.beta2 = 0.999 + # config.optimizer_configs.epsilon = 1e-6 + # config.optimizer_configs.weight_decay = 1e-2 + # config.optimizer_configs.mu_dtype = 'bfloat16' + + config.optimizer = 'adafactor' + batch_size = 48 * 2 * 64 + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = None + config.optimizer_configs.dtype_momentum = 'bfloat16' + config.optimizer_configs.weight_decay_rate = 1e-2 + config.optimizer_configs.clipping_threshold = 1.0 + config.optimizer_configs.skip_scale_and_bias_regularization = True + + config.grad_clip_configs = ml_collections.ConfigDict() + config.grad_clip_configs.clip_method = 'clip_by_global_norm' + config.grad_clip_configs.clip_value = 1.0 + + config.batch_size = batch_size + config.eval_batch_size = batch_size + config.rng_seed = 0 + config.update_num = True + config.num_training_epochs = 100 + config.data_dtype_str = 'bfloat16' + + # Model + config.model_name = 'retrieval_image_captioner_soft' + config.model = ml_collections.ConfigDict() + config.model.image_model = 'vit' + config.model.t5_name = 't5_1_1_base' + # ['t5_1_1_small', 't5_1_1_base', 't5_1_1_large', 't5_1_1_xl', 't5_1_1_xxl'] + config.model.num_fusion_layers = 6 + config.model.key_dim = 512 + config.model.dropout_rate = 0.0 + config.model.temperature = 0.2 + config.model.fuse_retrieval = True + config.model.supervised_retrieval = True + config.model.in_batch_neg = True + config.model.retrieval_ratio = 1 / 2 + config.model.label_smoothing = 1e-2 + config.model.vit_name = 'B/16' + config.model.vit_model_path = 'JFT3b-B/16' + # [JFT3b-B/32, JFT3b-B/16, JFT3b-L/16, JFT3b-g/14, JFT3b-G/14] + + # Dataset. + config.dataset_name = 'wiki_image_text_generation' + config.dataset_configs = ml_collections.ConfigDict() + + # Learning rate. + config.num_train_examples = TRAIN_DATA_SIZE + steps_per_epoch = TRAIN_DATA_SIZE // config.batch_size + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.total_steps = int(config.num_training_epochs * + steps_per_epoch) + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * rsqrt_decay * linear_warmup' + config.lr_configs.warmup_steps = int(0.1 * config.lr_configs.total_steps) + config.lr_configs.timescale = 5000 + # config.lr_configs.steps_per_cycle = config.lr_configs.total_steps + config.lr_configs.base_learning_rate = 6e-4 + config.lr_configs.end_learning_rate = 1e-6 + + # Logging. + config.log_summary_steps = 100 + config.log_eval_steps = 1000 + config.checkpoint_steps = 5000 + config.write_summary = True + config.xprof = True # Profile using xprof + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Initalisation configs + config.init_from = ml_collections.ConfigDict() + # Initializing from a vidcap model. + config.init_from.only_params = False + config.init_from.load_key_encoder = False + config.init_from.encoder = ml_collections.ConfigDict() + config.init_from.encoder.init_from_vit = False + config.init_from.encoder.checkpoint_path = None + return config diff --git a/scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_base_froze_config.py b/scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_base_froze_config.py new file mode 100644 index 0000000000000000000000000000000000000000..2f132c5baf32e0c49241b910cf901287cace2196 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_base_froze_config.py @@ -0,0 +1,112 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""WIT Retrieval + Captioning Pre-Training.""" + +import ml_collections + +TRAIN_DATA_SIZE = 5000000 + + +def get_config() -> ml_collections.ConfigDict: + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'image_caption_debug' + + config.optimizer = 'adafactor' + batch_size = 36 * 2 * 64 + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = None + config.optimizer_configs.weight_decay_rate = 1e-2 + config.optimizer_configs.clipping_threshold = 1.0 + config.optimizer_configs.skip_scale_and_bias_regularization = False + + config.frozen_patterns = [] + config.not_frozen_patterns = [('value_perceiver/.*', 2), + ('text_encoder/.*', 1), + ('shared_token_embedder/.*', 0.5), + ('query_head/.*', 1.5), ('out_decoder/.*', 1), + ('key_head/.*', 1.5), ('img_encoder/.*', 1), + ('head_out/.*', 1.5), ('fusion_encoder/.*', 1), + ('att_transform/.*', 1)] + + config.grad_clip_configs = ml_collections.ConfigDict() + config.grad_clip_configs.clip_method = 'clip_by_global_norm' + config.grad_clip_configs.clip_value = 1.0 + + config.batch_size = batch_size + config.eval_batch_size = batch_size + config.rng_seed = 0 + config.update_num = True + config.num_training_epochs = 100 + config.data_dtype_str = 'float32' + + # Model + config.model_name = 'retrieval_image_captioner_soft' + config.model = ml_collections.ConfigDict() + config.model.image_model = 'vit' + config.model.t5_name = 't5_1_1_base' + # ['t5_1_1_small', 't5_1_1_base', 't5_1_1_large', 't5_1_1_xl', 't5_1_1_xxl'] + config.model.num_fusion_layers = 6 + config.model.n_compressed_tokens = 64 + config.model.key_dim = 512 + config.model.dropout_rate = 0.0 + config.model.temperature = 0.2 + config.model.fuse_retrieval = True + config.model.supervised_retrieval = True + config.model.in_batch_neg = True + config.model.retrieval_ratio = 1 / 2 + config.model.label_smoothing = 1e-2 + config.model.vit_name = 'B/16' + config.model.vit_model_path = 'JFT3b-B/16' + config.model.vit_num_frozen_layers = -1 + # [JFT3b-B/32, JFT3b-B/16, JFT3b-L/16, JFT3b-g/14, JFT3b-G/14] + + # Dataset. + config.dataset_name = 'wiki_image_text_generation' + config.dataset_configs = ml_collections.ConfigDict() + + # Learning rate. + config.num_train_examples = TRAIN_DATA_SIZE + steps_per_epoch = TRAIN_DATA_SIZE // config.batch_size + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.total_steps = int(config.num_training_epochs * + steps_per_epoch) + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * rsqrt_decay * linear_warmup' + config.lr_configs.warmup_steps = int(0.1 * config.lr_configs.total_steps) + config.lr_configs.timescale = 5000 + # config.lr_configs.steps_per_cycle = config.lr_configs.total_steps + config.lr_configs.base_learning_rate = 6e-4 + config.lr_configs.end_learning_rate = 1e-6 + + # Logging. + config.log_summary_steps = 100 + config.log_eval_steps = 1000 + config.checkpoint_steps = 5000 + config.write_summary = True + config.xprof = True # Profile using xprof + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Initalisation configs + config.init_from = ml_collections.ConfigDict() + # Initializing from a vidcap model. + config.init_from.only_params = False + config.init_from.load_key_encoder = False + config.init_from.encoder = ml_collections.ConfigDict() + config.init_from.encoder.init_from_vit = False + config.init_from.encoder.checkpoint_path = None + return config diff --git a/scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_large_config.py b/scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_large_config.py new file mode 100644 index 0000000000000000000000000000000000000000..76ca81558585a18bc03473cfdfb30fbd3f78fea9 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_large_config.py @@ -0,0 +1,110 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""WIT Retrieval + Captioning Pre-Training.""" + +import ml_collections + +TRAIN_DATA_SIZE = 5000000 + + +def get_config() -> ml_collections.ConfigDict: + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'image_caption_debug' + + # config.optimizer = 'adam' + # batch_size = 30 * 2 * 64 + # config.optimizer_configs = ml_collections.ConfigDict() + # config.optimizer_configs.beta1 = 0.9 + # config.optimizer_configs.beta2 = 0.999 + # config.optimizer_configs.epsilon = 1e-6 + # config.optimizer_configs.weight_decay = 1e-2 + # config.optimizer_configs.mu_dtype = 'bfloat16' + + config.optimizer = 'adafactor' + batch_size = 12 * 2 * 128 + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = 0.9 + config.dtype_momentum = 'bfloat16' + config.optimizer_configs.weight_decay_rate = 1e-2 + config.optimizer_configs.skip_scale_and_bias_regularization = True + + config.grad_clip_configs = ml_collections.ConfigDict() + config.grad_clip_configs.clip_method = 'clip_by_global_norm' + config.grad_clip_configs.clip_value = 1.0 + + config.batch_size = batch_size + config.eval_batch_size = batch_size + config.rng_seed = 0 + config.update_num = True + config.num_training_epochs = 100 + config.data_dtype_str = 'bfloat16' + + # Model + config.model_name = 'retrieval_image_captioner_soft' + config.model = ml_collections.ConfigDict() + config.model.image_model = 'vit' + config.model.t5_name = 't5_1_1_large' + # ['t5_1_1_small', 't5_1_1_base', 't5_1_1_large', 't5_1_1_xl', 't5_1_1_xxl'] + config.model.num_fusion_layers = 8 + config.model.key_dim = 512 + config.model.dropout_rate = 0.0 + config.model.temperature = 0.2 + config.model.fuse_retrieval = True + config.model.supervised_retrieval = True + config.model.in_batch_neg = True + config.model.retrieval_ratio = 1 / 3 + config.model.label_smoothing = 1e-2 + config.model.vit_name = 'B/16' + config.model.vit_model_path = 'JFT3b-L/16' + # [JFT3b-B/32, JFT3b-B/16, JFT3b-L/16, JFT3b-g/14, JFT3b-G/14] + + # Dataset. + config.dataset_name = 'wiki_image_text_generation' + config.dataset_configs = ml_collections.ConfigDict() + + # Learning rate. + config.num_train_examples = TRAIN_DATA_SIZE + steps_per_epoch = TRAIN_DATA_SIZE // config.batch_size + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.total_steps = int(config.num_training_epochs * + steps_per_epoch) + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * rsqrt_decay * linear_warmup' + config.lr_configs.warmup_steps = 10000 + config.lr_configs.timescale = 5000 + # config.lr_configs.steps_per_cycle = config.lr_configs.total_steps + config.lr_configs.base_learning_rate = 4e-4 + config.lr_configs.end_learning_rate = 1e-6 + + # Logging. + config.log_summary_steps = 100 + config.log_eval_steps = 1000 + config.checkpoint_steps = 5000 + config.write_summary = True + config.xprof = True # Profile using xprof + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Initalisation configs + config.init_from = ml_collections.ConfigDict() + # Initializing from a vidcap model. + config.init_from.only_params = False + config.init_from.load_key_encoder = False + config.init_from.encoder = ml_collections.ConfigDict() + config.init_from.encoder.init_from_vit = False + config.init_from.encoder.checkpoint_path = None + return config diff --git a/scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_large_froze_config.py b/scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_large_froze_config.py new file mode 100644 index 0000000000000000000000000000000000000000..583be5f0ea1c570ea176a38a70f10e96d859a70c --- /dev/null +++ b/scenic/projects/knowledge_visual_language/configs/wit_retrieval_soft_large_froze_config.py @@ -0,0 +1,111 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""WIT Retrieval + Captioning Pre-Training.""" + +import ml_collections + +TRAIN_DATA_SIZE = 5000000 + + +def get_config() -> ml_collections.ConfigDict: + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'image_caption_debug' + + config.optimizer = 'adafactor' + batch_size = 12 * 2 * 128 + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = None + config.optimizer_configs.weight_decay_rate = 1e-2 + config.optimizer_configs.clipping_threshold = 1.0 + config.optimizer_configs.skip_scale_and_bias_regularization = False + + config.frozen_patterns = [] + config.not_frozen_patterns = [('value_perceiver/.*', 2), + ('text_encoder/.*', 1), + ('shared_token_embedder/.*', 0.5), + ('query_head/.*', 1.5), ('out_decoder/.*', 1), + ('key_head/.*', 1.5), ('img_encoder/.*', 1), + ('head_out/.*', 1.5), ('fusion_encoder/.*', 1), + ('att_transform/.*', 1)] + + config.grad_clip_configs = ml_collections.ConfigDict() + config.grad_clip_configs.clip_method = 'clip_by_global_norm' + config.grad_clip_configs.clip_value = 1.0 + + config.batch_size = batch_size + config.eval_batch_size = batch_size + config.rng_seed = 0 + config.update_num = True + config.num_training_epochs = 100 + config.data_dtype_str = 'float32' + + # Model + config.model_name = 'retrieval_image_captioner_soft' + config.model = ml_collections.ConfigDict() + config.model.image_model = 'vit' + config.model.t5_name = 't5_1_1_large' + # ['t5_1_1_small', 't5_1_1_base', 't5_1_1_large', 't5_1_1_xl', 't5_1_1_xxl'] + config.model.num_fusion_layers = 8 + config.model.key_dim = 512 + config.model.dropout_rate = 0.0 + config.model.temperature = 0.2 + config.model.fuse_retrieval = True + config.model.supervised_retrieval = True + config.model.in_batch_neg = True + config.model.retrieval_ratio = 1 / 2 + config.model.label_smoothing = 1e-2 + config.model.vit_name = 'L/16' + config.model.vit_model_path = 'JFT3b-L/16' + config.model.vit_num_frozen_layers = 1 / 2 + # [JFT3b-B/32, JFT3b-B/16, JFT3b-L/16, JFT3b-g/14, JFT3b-G/14] + + # Dataset. + config.dataset_name = 'wiki_image_text_generation' + config.dataset_configs = ml_collections.ConfigDict() + + # Learning rate. + config.num_train_examples = TRAIN_DATA_SIZE + steps_per_epoch = TRAIN_DATA_SIZE // config.batch_size + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.total_steps = int(config.num_training_epochs * + steps_per_epoch) + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * rsqrt_decay * linear_warmup' + config.lr_configs.warmup_steps = int(0.1 * config.lr_configs.total_steps) + config.lr_configs.timescale = 5000 + # config.lr_configs.steps_per_cycle = config.lr_configs.total_steps + config.lr_configs.base_learning_rate = 8e-4 + config.lr_configs.end_learning_rate = 1e-6 + + # Logging. + config.log_summary_steps = 100 + config.log_eval_steps = 1000 + config.checkpoint_steps = 5000 + config.write_summary = True + config.xprof = True # Profile using xprof + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Initalisation configs + config.init_from = ml_collections.ConfigDict() + # Initializing from a vidcap model. + config.init_from.only_params = False + config.init_from.load_key_encoder = False + config.init_from.encoder = ml_collections.ConfigDict() + config.init_from.encoder.init_from_vit = False + config.init_from.encoder.checkpoint_path = None + return config diff --git a/scenic/projects/knowledge_visual_language/data/__init__.py b/scenic/projects/knowledge_visual_language/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/knowledge_visual_language/data/cc12m_generation_dataset.py b/scenic/projects/knowledge_visual_language/data/cc12m_generation_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..79a4243678679301752e0606d58fb6e0ee01ac74 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/data/cc12m_generation_dataset.py @@ -0,0 +1,276 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset and Loader for CC12M dataset for caption generation pre-training. + +Key Changes: 1) use T5 tokenizer; 2) Use text prefix as enoder input; +3) add autoregressive output. + +TODO(ziniu): probably consider image masking? +""" +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +# import jax +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib.big_transfer import bit +from scenic.dataset_lib.big_transfer import builder +from scenic.dataset_lib import web_image_text_dataset +from scenic.projects.knowledge_visual_language.data import data_utils + +FILTER_LENGTH = 16 +PREFIX_MAX_LENGTH = 12 +OUTPUT_MAX_LENGTH = 48 +IMAGE_SIZE = 224 + + +def get_default_dataset_config(runlocal=False, additional_valid_dataset=True): + """Gets default configs for CC12M dataset.""" + dataset_configs = ml_collections.ConfigDict() + # Add path to your data here: + dataset_configs.dataset_dir = '' + dataset_configs.train_split = 'full[10000:]' + MAX_LENGTH = OUTPUT_MAX_LENGTH # pylint: disable=invalid-name + pp_common = ( + f'|t5_tokenize(max_num_tokens={MAX_LENGTH}, inkey="texts",' + f' prompt="{data_utils.CAPTION_PREFIX}")|keep("image", "tokens")' + ) + dataset_configs.max_num_tokens = MAX_LENGTH + dataset_configs.image_size = IMAGE_SIZE + dataset_configs.pp_train = ( + f'decode|resize(resize_size={IMAGE_SIZE})|value_range(-1,1)' + pp_common + ) + dataset_configs.shuffle_buffer_size = 250000 if not runlocal else 50 + pp_common_eval = f'decode|resize(resize_size={IMAGE_SIZE})|value_range(-1,1)' + pp_argus_eval = pp_common_eval + pp_common + sub = '[:4]' if runlocal else '' + if additional_valid_dataset: + pp_coco_eval = ( + pp_common_eval + + '|coco_captions(inkey="captions", outkey="texts")' + + pp_common + ) + # pp_imagenet_eval = pp_common_eval + ( + # '|clip_i1k_label_names(inkey="label", outkey="texts")') + pp_common + dataset_configs.val_split = [ + ( + 'val', + dataset_configs.dataset, + ['full[:10000]', f'full{sub}'][runlocal], + pp_argus_eval, + ), + ('coco', 'coco_captions', f'val{sub}', pp_coco_eval), + # ('imagenet', 'imagenet2012', f'validation{sub}', pp_imagenet_eval), + ] + else: + dataset_configs.val_split = f'full{sub}' if runlocal else 'full[:50000]' + dataset_configs.pp_eval = pp_argus_eval + + dataset_configs.val_cache = 'loaded' # Unfortunately, "batched" gets us OOM. + dataset_configs.vocab_size = data_utils.VOCAB_SIZE_T5 + dataset_configs.prefetch_to_device = 2 + return dataset_configs + + +@datasets.add_dataset('cc12m_generation') +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None, +): + """Returns generators for the CC12M train, validation and test sets. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. Not used. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + default_dataset_config = get_default_dataset_config( + runlocal=False, additional_valid_dataset=True + ) + if dataset_configs: + default_dataset_config.update(dataset_configs) + + dataset_configs = default_dataset_config + + del rng + assert dataset_configs is not None + logging.info( + 'Loading train split of the %sfrom cc12m dataset.', + dataset_configs.dataset, + ) + + def pp_fn(x, how): + pp = builder.get_preprocess_fn(how) + example = pp(x) + return {'image': example['image'], 'tokens': example['tokens']} + + # E.g. for testing with TAP. + shuffle_buffer_size = ( + 1000 if num_shards == 1 else dataset_configs.shuffle_buffer_size + ) + + train_ds = data_utils.get_data( + dataset=dataset_configs.dataset, + split=dataset_configs.train_split, + data_dir=dataset_configs.get('dataset_dir'), + batch_size=batch_size, + filter_fn=functools.partial( + data_utils.filter_text_length, filter_len=FILTER_LENGTH + ), + preprocess_fn=functools.partial(pp_fn, how=dataset_configs.pp_train), + shuffle_buffer_size=shuffle_buffer_size, + prefetch=dataset_configs.get('prefetch_to_host', 2), + cache='loaded', + ignore_errors=True, + ) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError( + 'Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.' + ) + logging.info('Using the tf.data service at %s', dataset_service_address) + assert shuffle_buffer_size is not None + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + n_train_ex = dataset_utils.get_num_examples( + dataset_configs.dataset, + dataset_configs.train_split, + data_dir=dataset_configs.get('dataset_dir'), + ) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, + inputs_key='encoder_input_image', + train=True, + batch_size=batch_size, + ) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + map_generation_split_batches = functools.partial( + data_utils.map_generation_split, prefix_h=PREFIX_MAX_LENGTH + ) + + train_iter = iter(train_ds) + train_iter = map(map_generation_split_batches, train_iter) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + if num_shards > 0: + train_iter = map(shard_batches, train_iter) + if dataset_configs.prefetch_to_device: + train_iter = jax_utils.prefetch_to_device( + train_iter, dataset_configs.prefetch_to_device + ) + + logging.info( + 'Loading validation split of the %sfrom cc12m dataset.', + dataset_configs.dataset, + ) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, + inputs_key='encoder_input_image', + train=False, + batch_size=eval_batch_size, + ) + + def _get_eval_iter(dataset, split, pp_eval): + val_ds = data_utils.get_data( + dataset=dataset, + split=split, + data_dir=dataset_configs.get('dataset_dir'), + batch_size=eval_batch_size, + filter_fn=functools.partial( + data_utils.filter_text_length, filter_len=FILTER_LENGTH + ), + preprocess_fn=functools.partial(pp_fn, how=pp_eval), + cache='batched', + repeat_after_batching=True, + drop_remainder=False, + ) + + valid_iter = iter(val_ds) + valid_iter = map(map_generation_split_batches, valid_iter) + valid_iter = map(bit.tf_to_numpy, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + if num_shards > 0: + valid_iter = map(shard_batches, valid_iter) + if dataset_configs.prefetch_to_device: + valid_iter = jax_utils.prefetch_to_device( + valid_iter, dataset_configs.prefetch_to_device + ) + + return valid_iter + + def _get_num_eval_examples(dataset, split, data_dir): + return dataset_utils.get_num_examples(dataset, split, data_dir) + + if isinstance(dataset_configs.val_split, str): + valid_iter = _get_eval_iter( + dataset_configs.dataset, + dataset_configs.val_split, + dataset_configs.pp_eval, + ) + n_eval_ex = _get_num_eval_examples( + dataset_configs.dataset, + dataset_configs.val_split, + data_dir=dataset_configs.get('dataset_dir'), + ) + else: + valid_iter, n_eval_ex = {}, {} + for eval_spec in dataset_configs.val_split: + name, dataset, split, pp_eval = eval_spec + valid_iter[name] = _get_eval_iter(dataset, split, pp_eval) + n_eval_ex[name] = _get_num_eval_examples( + dataset, split, data_dir=dataset_configs.get('dataset_dir') + ) + + meta_data = {'num_train_examples': n_train_ex, 'num_eval_examples': n_eval_ex} + + if dataset_configs.get('extra_meta_data'): + for k, v in dataset_configs.extra_meta_data.items(): + meta_data[k] = v + + image_shape = (-1, dataset_configs.image_size, dataset_configs.image_size, 3) + predix_shape = (-1, PREFIX_MAX_LENGTH) + input_shape = (-1, OUTPUT_MAX_LENGTH) + + meta_data['encoder_input_image_spec'] = (image_shape, getattr(jnp, dtype_str)) + meta_data['encoder_input_tokens_spec'] = (predix_shape, jnp.int16) + meta_data['decoder_input_tokens_spec'] = (input_shape, jnp.int16) + meta_data['decoder_target_tokens_spec'] = (input_shape, jnp.int16) + return dataset_utils.Dataset(train_iter, valid_iter, None, meta_data) diff --git a/scenic/projects/knowledge_visual_language/data/cc12m_table_dataset.py b/scenic/projects/knowledge_visual_language/data/cc12m_table_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..eb8696537ca28658cea128ffa70a6d6dd370c274 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/data/cc12m_table_dataset.py @@ -0,0 +1,163 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset and Loader for cc12m dataset for retrieval training. + +Only prepare paired with knowledge (contextualalized passages) +""" +import functools +from typing import Optional + +from absl import logging +import jax +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib.big_transfer import builder +from scenic.projects.knowledge_visual_language.data import data_utils +import tensorflow as tf + +SPAN_MAX_LENGTH = 5 +OUTPUT_MAX_LENGTH = 36 +KNOWLEDGE_MAX_LENGTH = 320 +IMAGE_SIZE = 224 + + +def get_default_dataset_config(): + """Gets default configs for wit_internal (en) dataset.""" + dataset_configs = ml_collections.ConfigDict() + # Add path to your data here: + dataset_configs.dataset_dir = '' + dataset_configs.train_split = 'full' + dataset_configs.output_max_num_tokens = OUTPUT_MAX_LENGTH + dataset_configs.knowledge_max_num_tokens = OUTPUT_MAX_LENGTH + dataset_configs.image_size = IMAGE_SIZE + dataset_configs.pp_train = ( + f'decode|resize(resize_size={IMAGE_SIZE})|value_range(-1,1)|t5_tokenize(max_num_tokens={KNOWLEDGE_MAX_LENGTH},' + ' inkey="texts", outkey="knowledge_tokens",' + f' prompt="{data_utils.KNOWLEDGE_PREFIX}")|keep("image",' + ' "knowledge_tokens", "canonical_doc_id")' + ) + dataset_configs.vocab_size = data_utils.VOCAB_SIZE_T5 + dataset_configs.prefetch_to_device = 2 + return dataset_configs + + +@datasets.add_dataset('cc12m_table') +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=None, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None, +): + """Returns generators for the CC12M train, validation and test sets. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. Not used. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del batch_size + default_dataset_config = get_default_dataset_config() + if dataset_configs: + default_dataset_config.update(dataset_configs) + + dataset_configs = default_dataset_config + + del rng + assert dataset_configs is not None + logging.info('Loading train split of the %s', dataset_configs.dataset) + + def pp_fn(x, how): + pp = builder.get_preprocess_fn(how, remove_tpu_dtypes=False) + example = pp(x) + example['image'] = tf.cast(example['image'], dtype=dtype_str) + return example + + # E.g. for testing with TAP. + shuffle_buffer_size = None + + train_ds = data_utils.get_data( + dataset=dataset_configs.dataset, + split=dataset_configs.train_split, + batch_size=eval_batch_size, + preprocess_fn=functools.partial(pp_fn, how=dataset_configs.pp_train), + shuffle_buffer_size=None, + shuffle_files=False, + prefetch=dataset_configs.get('prefetch_to_host', 2), + cache='loaded', + ignore_errors=False, + drop_remainder=True, + ) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError( + 'Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.' + ) + logging.info('Using the tf.data service at %s', dataset_service_address) + assert shuffle_buffer_size is not None + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + n_train_ex = dataset_utils.get_num_examples( + dataset_configs.dataset, + dataset_configs.train_split, + data_dir=dataset_configs.get('dataset_dir'), + ) + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, + inputs_key='image', + train=True, + batch_size=eval_batch_size, + ) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + if num_shards > 0: + train_iter = map(shard_batches, train_iter) + + meta_data = { + 'num_train_examples': n_train_ex, + 'example_per_shard': int(n_train_ex // jax.process_count()), + 'batch_size': eval_batch_size, + } + + image_shape = (dataset_configs.image_size, dataset_configs.image_size, 3) + knowledge_shape = (KNOWLEDGE_MAX_LENGTH + data_utils.PROMPT_LENGTH,) + + meta_data['image_spec'] = (image_shape, getattr(jnp, dtype_str)) + meta_data['knowledge_spec'] = (knowledge_shape, jnp.int16) + return dataset_utils.Dataset(train_iter, None, None, meta_data) diff --git a/scenic/projects/knowledge_visual_language/data/data_utils.py b/scenic/projects/knowledge_visual_language/data/data_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..15c2ebd9a424f325496535992af6c2060b4ddf22 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/data/data_utils.py @@ -0,0 +1,289 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Util functions for preparing dataset wrapper in scenic.""" +import functools +from big_vision.datasets.imagenet import class_names as imagenet_class_names +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib.big_transfer import registry +from scenic.dataset_lib.big_transfer.preprocessing import utils +from scenic.projects.t5 import tokenizer as t5_tokenizer +import tensorflow as tf + + +# import numpy as np + +CAPTION_PREFIX = 'Please describe this image:' +VQA_PREFIX = 'Please based on this image to answer the question:' +KNOWLEDGE_PREFIX = 'Please summarize this knowledge:' + +PROMPT_LENGTH = 6 +VOCAB_SIZE_T5 = 32128 +MASK_TOKEN_ID = 32099 +BOS_ID = 32001 +EOS_ID = 1 +SEP_ID = 32000 + + +@registry.Registry.register('preprocess_ops.clip_i1k_label_names', 'function') +@utils.InKeyOutKey(indefault='label', outdefault='texts') +def get_pp_clip_i1k_label_names(): + """Convert i1k label numbers to strings, using CLIP's class names.""" + + def _pp_imagenet_labels(label): + return tf.reshape( + tf.gather(imagenet_class_names.CLIP_IMAGENET_CLASS_NAMES, label), (-1,) + ) + + return _pp_imagenet_labels + + +@registry.Registry.register('preprocess_ops.coco_captions', 'function') +@utils.InKeyOutKey(indefault='captions', outdefault='texts') +def get_coco_captions(): + """Extracts coco's captions from nested dict.""" + + def _pp_coco_captions(captions, sample=False): + t = captions['text'] + if sample: + ts = tf.concat([t, ['']], axis=0) + num_texts = tf.reduce_max([tf.shape(ts)[0] - 1, 1]) + idx = tf.random.uniform([], 0, num_texts, dtype=tf.int16) + else: + idx = tf.argmax(tf.strings.length(t)) + return tf.reshape(tf.strings.lower(t[idx]), (-1,)) + + return _pp_coco_captions + + +@registry.Registry.register('preprocess_ops.t5_tokenize', 'function') +@utils.InKeyOutKey(indefault='texts', outdefault='tokens') +def get_t5_tokenize(max_num_tokens, append_eos=True, prompt=None): + """Tokenizes a text using T5 Tokenizer.""" + + tokenizer = t5_tokenizer.build_dmvr_sp_model() + tokenizer.initialize() + if prompt is None: + prompt = [BOS_ID] + else: + prompt = tokenizer.string_to_indices(prompt, max_num_tokens=None) + prompt = tf.concat([[BOS_ID], prompt], axis=-1) + + def _t5_tokenize(texts): + if texts.shape.ndims == 0: + texts = tf.reshape(texts, (-1,)) + tokens = tokenizer.string_tensor_to_indices( + string_tensor=texts, + max_num_tokens=max_num_tokens, + append_eos=append_eos, + )[0] + return tf.cast(tf.concat([prompt, tokens], axis=-1), tf.int16) + + return _t5_tokenize + + +@registry.Registry.register('preprocess_ops.list_t5_tokenize', 'function') +@utils.InKeyOutKey(indefault='texts', outdefault='tokens') +def get_list_t5_tokenize(max_num_tokens, prompt=None): + """Tokenizes a text using T5 Tokenizer.""" + + tokenizer = t5_tokenizer.build_dmvr_sp_model() + tokenizer.initialize() + if prompt is None: + prompt = [BOS_ID] + else: + prompt = tokenizer.string_to_indices(prompt, max_num_tokens=None) + prompt = tf.concat([[BOS_ID], prompt], axis=-1) + + def add_prompt(tokens): + return tf.concat([prompt, tokens], axis=-1) + + def _list_t5_tokenize(texts): + if texts.shape.ndims == 0: + texts = tf.reshape(texts, (-1,)) + token_list = tokenizer.string_tensor_to_indices( + string_tensor=texts, + max_num_tokens=max_num_tokens, + append_eos=True, + ) + token_list = tf.stack(tf.map_fn(add_prompt, token_list), axis=0) + return tf.cast(token_list, tf.int16) + + return _list_t5_tokenize + + +@registry.Registry.register('preprocess_ops.multi_t5_tokenize', 'function') +@utils.InKeyOutKey(indefault='texts', outdefault='tokens') +def get_multi_t5_tokenize(max_num_tokens, append_eos=True): + """Tokenizes a text using T5 Tokenizer.""" + + tokenizer = t5_tokenizer.build_dmvr_sp_model() + tokenizer.initialize() + max_answers = 10 + + def _multi_t5_tokenize(texts): + parse = functools.partial( + tokenizer.string_tensor_to_indices, + max_num_tokens=max_num_tokens, + append_eos=append_eos, + ) + # if texts.shape.ndims == 1: + # tokens = parse(string_tensor=texts) + # else: + # tokens = tf.map_fn(parse, texts) + tokens = parse(string_tensor=texts)[:max_answers] + return tf.cast(tokens, tf.int16) + + return _multi_t5_tokenize + + +def inception_crop(image, resize_size=224, area_min=20, area_max=80): + """Random crop input image.""" + begin, size, _ = tf.image.sample_distorted_bounding_box( + tf.shape(image), + tf.zeros([0, 0, 4], tf.float32), + area_range=(area_min / 100, area_max / 100), + min_object_covered=0, # Don't enforce a minimum area. + use_image_if_no_bounding_boxes=True, + ) + crop = tf.slice(image, begin, size) + # Unfortunately, the above operation loses the depth-dimension. So we need + # to restore it the manual way. + crop.set_shape([None, None, image.shape[-1]]) + if resize_size: + crop = tf.cast( + tf.image.resize(crop, [resize_size, resize_size]), image.dtype + ) + return crop + + +def sample_retr_image(batch): + """Sample image from similar sample by tfidf.""" + + crops = [] + for img in batch['encoder_input_image']: + crops += [inception_crop(img, area_min=10, area_max=80)] + batch['retr_images'] = np.stack(crops, axis=0) + return batch + + +def map_generation_split( + batch, span_len, output_max_len, split_key='tokens', add_retr=False +): + """Split tokens into prefix, decoder_input and decoder_output.""" + full_tokens = batch.pop(split_key) + full_masks = tf.greater(full_tokens, 0) + min_length = tf.reduce_max([ + tf.reduce_min(tf.reduce_sum(tf.cast(full_masks, tf.int16), axis=1)), + PROMPT_LENGTH + 4, + ]).numpy() + max_length = PROMPT_LENGTH + span_len + 1 + bsz = full_tokens.shape[0] + idx = tf.experimental.numpy.random.randint( + low=PROMPT_LENGTH, high=tf.reduce_min([min_length, max_length]).numpy() + ).numpy() + input_tokens = [ + full_tokens[..., :idx], + tf.ones([bsz, 1], dtype=tf.int16) * MASK_TOKEN_ID, + tf.zeros([bsz, max_length - idx - 1], dtype=tf.int16), + ] + output_tokens = [ + tf.ones([bsz, 1], dtype=tf.int16) * BOS_ID, + full_tokens[..., idx : idx + output_max_len], + ] + batch['encoder_input_tokens'] = tf.concat(input_tokens, axis=1) + batch['encoder_input_image'] = batch.pop('image') + output_tokens = tf.concat(output_tokens, axis=1) + batch['decoder_input_tokens'] = output_tokens[..., :-1] + batch['decoder_target_tokens'] = output_tokens[..., 1:] + if add_retr: + if 'retr_texts' in batch: + batch['retr_texts'] = tf.expand_dims(batch['retr_texts'], axis=1) + else: + batch['retr_texts'] = tf.expand_dims( + batch['decoder_input_tokens'], axis=1 + ) + return batch + + +def get_data( + dataset, + split, + batch_size, + filter_fn=None, + preprocess_fn=lambda x: x, + repeats=None, + shuffle_buffer_size=None, + prefetch=2, + cache='loaded', + repeat_after_batching=False, + drop_remainder=True, + data_dir=None, + ignore_errors=False, + shuffle_files=True, + dataset_service_address=None, +): + """API kept for backwards compatibility.""" + dataset = dataset_utils.get_dataset_tfds( + dataset=dataset, + split=split, + shuffle_files=shuffle_files, + data_dir=data_dir, + ) + if 'train' not in split: + dataset_service_address = None + if filter_fn: + dataset = dataset.filter(filter_fn) + return dataset_utils.make_pipeline( + data=dataset, + preprocess_fn=preprocess_fn, + batch_size=batch_size, + drop_remainder=drop_remainder, + cache=cache, + repeats=repeats, + prefetch=prefetch, + shuffle_buffer_size=shuffle_buffer_size, + repeat_after_batching=repeat_after_batching, + ignore_errors=ignore_errors, + dataset_service_address=dataset_service_address, + ) + + +def filter_text_length(d, filter_len): + if 'texts' in d: + return tf.strings.length(d['texts'][0]) > filter_len + elif 'caption' in d: + return tf.strings.length(d['caption']) > filter_len + elif 'alt_texts' in d: + return tf.strings.length(d['alt_texts'][0]) > filter_len + return True + + +def _get_bytes_feature(example, name): + return example.features.feature[name].bytes_list.value[0] + + +def _get_integer_list_feature(example, name): + return list(example.features.feature[name].int64_list.value) + + +def _extract_wit_features(example): + return [ + _get_integer_list_feature(example, 'knowledge'), + _get_integer_list_feature(example, 'caption'), + _get_bytes_feature(example, 'image'), + ] + + diff --git a/scenic/projects/knowledge_visual_language/data/okvqa_dataset.py b/scenic/projects/knowledge_visual_language/data/okvqa_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..3870ac38a6d45b5a20bf70b8ff7ffee41b806381 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/data/okvqa_dataset.py @@ -0,0 +1,285 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset and Loader for OK-VQA dataset.""" + +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib.big_transfer import bit +from scenic.dataset_lib.big_transfer import builder +from scenic.dataset_lib.big_transfer import registry +from scenic.dataset_lib import web_image_text_dataset +from scenic.projects.knowledge_visual_language.data import data_utils +import tensorflow as tf + +# import jax +OUTPUT_MAX_LENGTH = 64 +IMAGE_SIZE = 224 +QUESTION_LENGTH = 64 +ANSWER_LENGTH = 32 +KNOWLEDGE_MAX_LENGTH = 320 + + +@registry.Registry.register('preprocess_ops.get_qa_pair', 'function') +def get_qa_pair(): + """Concat title passage and document together to form knowledge.""" + + def get_qa_pair_fn(data): + """Prepare Knowledge by concating hierarchy, passage and first-paragraph.""" + data['question'] = data['question/answers']['question_text'] + data['answers'] = tf.reshape(data['question/answers']['answers'], (-1,)) + data['answer'] = data['answers'][0] + data['top_answers'] = tf.strings.reduce_join( + data['answers'], separator=', ' + ) + return data + + return get_qa_pair_fn + + +def map_vqa_split(batch): + """Split answer into decoder_input and decoder_output.""" + + full_tokens = batch.pop('answer') + batch['decoder_input_tokens'] = full_tokens[..., :-1] + batch['decoder_target_tokens'] = full_tokens[..., 1:] + return batch + + +def get_default_dataset_config(runlocal=False): + """Gets default configs for CC12M dataset.""" + dataset_configs = ml_collections.ConfigDict() + dataset_configs.dataset = 'okvqa' + # Add path to your data here: + dataset_configs.dataset_dir = '' + dataset_configs.train_split = 'train' + dataset_configs.question_max_num_tokens = QUESTION_LENGTH + dataset_configs.answer_max_num_tokens = ANSWER_LENGTH + dataset_configs.image_size = IMAGE_SIZE + dataset_configs.pp_train = ( + f'decode|resize(resize_size={IMAGE_SIZE})|value_range(-1,1)|get_qa_pair|t5_tokenize(max_num_tokens={KNOWLEDGE_MAX_LENGTH},inkey="top_answers",' + ' outkey="retr_texts",' + f' prompt="{data_utils.KNOWLEDGE_PREFIX}")|t5_tokenize(max_num_tokens={ANSWER_LENGTH},' + f' inkey="answer",outkey="answer")|multi_t5_tokenize(max_num_tokens={ANSWER_LENGTH},inkey="answers",outkey="answers")|t5_tokenize(max_num_tokens={QUESTION_LENGTH},' + ' inkey="question", outkey="question",' + f' prompt="{data_utils.VQA_PREFIX}")|keep("image", "question", "answer",' + ' "retr_texts", "answers")' + ) + + dataset_configs.val_split = [( + 'val', + dataset_configs.dataset, + 'validation', + dataset_configs.pp_train, + )] + + dataset_configs.shuffle_buffer_size = 10000 if not runlocal else 50 + dataset_configs.val_cache = 'loaded' # Unfortunately, "batched" gets us OOM. + dataset_configs.vocab_size = data_utils.VOCAB_SIZE_T5 + dataset_configs.prefetch_to_device = 2 + return dataset_configs + + +@datasets.add_dataset('okvqa') +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=None, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None, +): + """Returns generators for the OKVQA train and validation sets. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. Not used. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + default_dataset_config = get_default_dataset_config(runlocal=False) + if dataset_configs: + default_dataset_config.update(dataset_configs) + + dataset_configs = default_dataset_config + + del rng + assert dataset_configs is not None + logging.info('Loading train split of the %s', dataset_configs.dataset) + + def pp_fn(x, how): + pp = builder.get_preprocess_fn(how, remove_tpu_dtypes=False) + example = pp(x) + return { + 'encoder_input_image': example['image'], + 'encoder_input_tokens': example['question'], + 'answer': example['answer'], + 'answers': example['answers'], + 'retr_texts': example['retr_texts'], + } + + # E.g. for testing with TAP. + shuffle_buffer_size = ( + 1000 if num_shards == 1 else dataset_configs.shuffle_buffer_size + ) + + train_ds = data_utils.get_data( + dataset=dataset_configs.dataset, + split=dataset_configs.train_split, + data_dir=dataset_configs.get('dataset_dir'), + batch_size=batch_size, + preprocess_fn=functools.partial(pp_fn, how=dataset_configs.pp_train), + shuffle_buffer_size=shuffle_buffer_size, + prefetch=dataset_configs.get('prefetch_to_host', 2), + cache=dataset_configs.val_cache, + ignore_errors=True, + ) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError( + 'Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.' + ) + logging.info('Using the tf.data service at %s', dataset_service_address) + assert shuffle_buffer_size is not None + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + n_train_ex = dataset_utils.get_num_examples( + dataset_configs.dataset, + dataset_configs.train_split, + data_dir=dataset_configs.get('dataset_dir'), + ) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, + inputs_key='encoder_input_image', + train=True, + batch_size=batch_size, + ) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(map_vqa_split, train_iter) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(data_utils.sample_retr_image, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + if num_shards > 0: + train_iter = map(shard_batches, train_iter) + if dataset_configs.prefetch_to_device: + train_iter = jax_utils.prefetch_to_device( + train_iter, dataset_configs.prefetch_to_device + ) + + logging.info('Loading validation split of the %s', dataset_configs.dataset) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, + inputs_key='encoder_input_image', + train=False, + batch_size=eval_batch_size, + ) + + def _get_eval_iter(dataset, split, pp_eval): + val_ds = data_utils.get_data( + dataset=dataset, + split=split, + data_dir=dataset_configs.get('dataset_dir'), + batch_size=eval_batch_size, + preprocess_fn=functools.partial(pp_fn, how=pp_eval), + cache='batched', + repeat_after_batching=True, + drop_remainder=False, + ) + + valid_iter = iter(val_ds) + valid_iter = map(map_vqa_split, valid_iter) + valid_iter = map(bit.tf_to_numpy, valid_iter) + valid_iter = map(data_utils.sample_retr_image, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + if num_shards > 0: + valid_iter = map(shard_batches, valid_iter) + if dataset_configs.prefetch_to_device: + valid_iter = jax_utils.prefetch_to_device( + valid_iter, dataset_configs.prefetch_to_device + ) + + return valid_iter + + def _get_num_eval_examples(dataset, split, data_dir): + return dataset_utils.get_num_examples(dataset, split, data_dir) + + if isinstance(dataset_configs.val_split, str): + valid_iter = _get_eval_iter( + dataset_configs.dataset, + dataset_configs.val_split, + dataset_configs.pp_eval, + ) + n_eval_ex = _get_num_eval_examples( + dataset_configs.dataset, + dataset_configs.val_split, + data_dir=dataset_configs.get('dataset_dir'), + ) + else: + valid_iter, n_eval_ex = {}, {} + for eval_spec in dataset_configs.val_split: + name, dataset, split, pp_eval = eval_spec + valid_iter[name] = _get_eval_iter(dataset, split, pp_eval) + n_eval_ex[name] = _get_num_eval_examples( + dataset, split, data_dir=dataset_configs.get('dataset_dir') + ) + + meta_data = {'num_train_examples': n_train_ex, 'num_eval_examples': n_eval_ex} + + if dataset_configs.get('extra_meta_data'): + for k, v in dataset_configs.extra_meta_data.items(): + meta_data[k] = v + + image_shape = (-1, dataset_configs.image_size, dataset_configs.image_size, 3) + predix_shape = (-1, QUESTION_LENGTH) + input_shape = (-1, ANSWER_LENGTH) + retr_texts_shape = (-1, KNOWLEDGE_MAX_LENGTH + data_utils.PROMPT_LENGTH) + retr_image_shape = ( + -1, + dataset_configs.image_size, + dataset_configs.image_size, + 3, + ) + meta_data['encoder_input_image_spec'] = (image_shape, getattr(jnp, dtype_str)) + meta_data['encoder_input_tokens_spec'] = (predix_shape, jnp.int16) + meta_data['decoder_input_tokens_spec'] = (input_shape, jnp.int16) + meta_data['decoder_target_tokens_spec'] = (input_shape, jnp.int16) + meta_data['retr_texts_spec'] = (retr_texts_shape, jnp.int16) + meta_data['retr_images_spec'] = (retr_image_shape, getattr(jnp, dtype_str)) + return dataset_utils.Dataset(train_iter, valid_iter, None, meta_data) diff --git a/scenic/projects/knowledge_visual_language/data/vqa.png b/scenic/projects/knowledge_visual_language/data/vqa.png new file mode 100644 index 0000000000000000000000000000000000000000..763c7fefda0022ad2851a8526bb8c43c70ac5bd9 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/data/vqa.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff898d5e1bc07971407a9d5fbf8f1af59e440485474edbbf714c80c5e39ea5fa +size 3054689 diff --git a/scenic/projects/knowledge_visual_language/data/vqa_dataset.py b/scenic/projects/knowledge_visual_language/data/vqa_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..55fba22613714ccab71886be2a230f68808af59d --- /dev/null +++ b/scenic/projects/knowledge_visual_language/data/vqa_dataset.py @@ -0,0 +1,287 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset and Loader for VQA dataset.""" + +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib.big_transfer import bit +from scenic.dataset_lib.big_transfer import builder +from scenic.dataset_lib.big_transfer import registry +from scenic.dataset_lib import web_image_text_dataset +from scenic.projects.knowledge_visual_language.data import data_utils + +import tensorflow as tf + +# import jax +OUTPUT_MAX_LENGTH = 64 +IMAGE_SIZE = 224 +QUESTION_LENGTH = 64 +ANSWER_LENGTH = 32 +KNOWLEDGE_MAX_LENGTH = 320 +n_qa = 5 + + +@registry.Registry.register('preprocess_ops.get_vqa_pair', 'function') +def get_vqa_pair(): + """Concat title passage and document together to form knowledge.""" + + def get_vqa_pair_fn(data): + """Prepare Knowledge by concating hierarchy, passage and first-paragraph.""" + data['question'] = data['question/answers']['question_text'] + data['answers'] = tf.reshape(data['question/answers']['answers'], [5, -1]) + data['answer'] = data['answers'][:, 0] + data['top_answers'] = tf.strings.reduce_join( + data['answers'], separator=', ', axis=-1 + ) + return data + + return get_vqa_pair_fn + + +def map_vqa_split(batch): + """Split answer into decoder_input and decoder_output.""" + + full_tokens = batch.pop('answer') + batch['decoder_input_tokens'] = full_tokens[..., :-1] + batch['decoder_target_tokens'] = full_tokens[..., 1:] + return batch + + +def get_default_dataset_config(runlocal=False): + """Gets default configs for CC12M dataset.""" + dataset_configs = ml_collections.ConfigDict() + dataset_configs.dataset = 'vqa' + # Add path to your data here: + dataset_configs.dataset_dir = '' + dataset_configs.train_split = 'train+validation[5000:]' + dataset_configs.question_max_num_tokens = QUESTION_LENGTH + dataset_configs.answer_max_num_tokens = ANSWER_LENGTH + dataset_configs.image_size = IMAGE_SIZE + dataset_configs.pp_train = ( + f'decode|resize(resize_size={IMAGE_SIZE})|value_range(-1,1)|get_vqa_pair|list_t5_tokenize(max_num_tokens={KNOWLEDGE_MAX_LENGTH},inkey="top_answers",' + ' outkey="retr_texts",' + f' prompt="{data_utils.KNOWLEDGE_PREFIX}")|list_t5_tokenize(max_num_tokens={ANSWER_LENGTH},' + f' inkey="answer",outkey="answer")|multi_t5_tokenize(max_num_tokens={ANSWER_LENGTH},inkey="answers",outkey="answers")|list_t5_tokenize(max_num_tokens={QUESTION_LENGTH},' + ' inkey="question", outkey="question",' + f' prompt="{data_utils.VQA_PREFIX}")|keep("image", "question", "answer",' + ' "retr_texts", "answers")' + ) + + dataset_configs.val_split = [( + 'val', + dataset_configs.dataset, + 'validation[:5000]', + dataset_configs.pp_train, + )] + + dataset_configs.shuffle_buffer_size = 10000 if not runlocal else 50 + dataset_configs.val_cache = 'loaded' # Unfortunately, "batched" gets us OOM. + dataset_configs.vocab_size = data_utils.VOCAB_SIZE_T5 + dataset_configs.prefetch_to_device = 2 + return dataset_configs + + +@datasets.add_dataset('vqa') +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=None, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None, +): + """Returns generators for the VQA train and validation sets. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. Not used. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + default_dataset_config = get_default_dataset_config(runlocal=False) + if dataset_configs: + default_dataset_config.update(dataset_configs) + + dataset_configs = default_dataset_config + + del rng + assert dataset_configs is not None + logging.info('Loading train split of the %s', dataset_configs.dataset) + + def pp_fn(x, how): + pp = builder.get_preprocess_fn(how, remove_tpu_dtypes=False) + example = pp(x) + return { + 'encoder_input_image': example['image'], + 'encoder_input_tokens': example['question'], + 'answer': example['answer'], + 'answers': example['answers'], + 'retr_texts': example['retr_texts'], + } + + # E.g. for testing with TAP. + shuffle_buffer_size = ( + 1000 if num_shards == 1 else dataset_configs.shuffle_buffer_size + ) + + train_ds = data_utils.get_data( + dataset=dataset_configs.dataset, + split=dataset_configs.train_split, + data_dir=dataset_configs.get('dataset_dir'), + batch_size=batch_size, + preprocess_fn=functools.partial(pp_fn, how=dataset_configs.pp_train), + shuffle_buffer_size=shuffle_buffer_size, + prefetch=dataset_configs.get('prefetch_to_host', 2), + cache=dataset_configs.val_cache, + ignore_errors=True, + ) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError( + 'Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.' + ) + logging.info('Using the tf.data service at %s', dataset_service_address) + assert shuffle_buffer_size is not None + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + n_train_ex = dataset_utils.get_num_examples( + dataset_configs.dataset, + dataset_configs.train_split, + data_dir=dataset_configs.get('dataset_dir'), + ) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, + inputs_key='encoder_input_image', + train=True, + batch_size=batch_size, + ) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(map_vqa_split, train_iter) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(data_utils.sample_retr_image, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + if num_shards > 0: + train_iter = map(shard_batches, train_iter) + if dataset_configs.prefetch_to_device: + train_iter = jax_utils.prefetch_to_device( + train_iter, dataset_configs.prefetch_to_device + ) + + logging.info('Loading validation split of the %s', dataset_configs.dataset) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, + inputs_key='encoder_input_image', + train=False, + batch_size=eval_batch_size, + ) + + def _get_eval_iter(dataset, split, pp_eval): + val_ds = data_utils.get_data( + dataset=dataset, + split=split, + data_dir=dataset_configs.get('dataset_dir'), + batch_size=eval_batch_size, + preprocess_fn=functools.partial(pp_fn, how=pp_eval), + cache='batched', + repeat_after_batching=True, + drop_remainder=False, + ) + + valid_iter = iter(val_ds) + valid_iter = map(map_vqa_split, valid_iter) + valid_iter = map(bit.tf_to_numpy, valid_iter) + valid_iter = map(data_utils.sample_retr_image, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + if num_shards > 0: + valid_iter = map(shard_batches, valid_iter) + if dataset_configs.prefetch_to_device: + valid_iter = jax_utils.prefetch_to_device( + valid_iter, dataset_configs.prefetch_to_device + ) + + return valid_iter + + def _get_num_eval_examples(dataset, split, data_dir): + return dataset_utils.get_num_examples(dataset, split, data_dir) + + if isinstance(dataset_configs.val_split, str): + valid_iter = _get_eval_iter( + dataset_configs.dataset, + dataset_configs.val_split, + dataset_configs.pp_eval, + ) + n_eval_ex = _get_num_eval_examples( + dataset_configs.dataset, + dataset_configs.val_split, + data_dir=dataset_configs.get('dataset_dir'), + ) + else: + valid_iter, n_eval_ex = {}, {} + for eval_spec in dataset_configs.val_split: + name, dataset, split, pp_eval = eval_spec + valid_iter[name] = _get_eval_iter(dataset, split, pp_eval) + n_eval_ex[name] = _get_num_eval_examples( + dataset, split, data_dir=dataset_configs.get('dataset_dir') + ) + + meta_data = {'num_train_examples': n_train_ex, 'num_eval_examples': n_eval_ex} + + if dataset_configs.get('extra_meta_data'): + for k, v in dataset_configs.extra_meta_data.items(): + meta_data[k] = v + + image_shape = (-1, dataset_configs.image_size, dataset_configs.image_size, 3) + predix_shape = (-1, QUESTION_LENGTH) + input_shape = (-1, ANSWER_LENGTH) + retr_texts_shape = (-1, KNOWLEDGE_MAX_LENGTH + data_utils.PROMPT_LENGTH) + retr_image_shape = ( + -1, + dataset_configs.image_size, + dataset_configs.image_size, + 3, + ) + meta_data['encoder_input_image_spec'] = (image_shape, getattr(jnp, dtype_str)) + meta_data['encoder_input_tokens_spec'] = (predix_shape, jnp.int16) + meta_data['decoder_input_tokens_spec'] = (input_shape, jnp.int16) + meta_data['decoder_target_tokens_spec'] = (input_shape, jnp.int16) + meta_data['retr_texts_spec'] = (retr_texts_shape, jnp.int16) + meta_data['retr_images_spec'] = (retr_image_shape, getattr(jnp, dtype_str)) + return dataset_utils.Dataset(train_iter, valid_iter, None, meta_data) diff --git a/scenic/projects/knowledge_visual_language/data/vqa_table_dataset.py b/scenic/projects/knowledge_visual_language/data/vqa_table_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..2dba63b972102b8221c2745a81a9f2d926be8fbf --- /dev/null +++ b/scenic/projects/knowledge_visual_language/data/vqa_table_dataset.py @@ -0,0 +1,196 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset and Loader for Wikipedia Image-Text (WIT) dataset for retrieval training. + +Only prepare paired with knowledge (contextualalized passages) +""" + +import functools +from typing import Optional + +from absl import logging +import jax +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib.big_transfer import builder +from scenic.dataset_lib.big_transfer import registry + +from scenic.dataset_lib import web_image_text_dataset + + +from scenic.projects.knowledge_visual_language.data import data_utils + +import tensorflow as tf + +SPAN_MAX_LENGTH = 5 +OUTPUT_MAX_LENGTH = 36 +KNOWLEDGE_MAX_LENGTH = 320 +IMAGE_SIZE = 224 + + +@registry.Registry.register('preprocess_ops.get_vqa_knowledge', 'function') +def get_vqa_knowledge(): + """Concat title passage and document together to form knowledge.""" + + def get_vqa_knowledge_fn(data): + """Prepare Knowledge by concating hierarchy, passage and first-paragraph.""" + + questions = data['question/answers']['question_text'] + answers = tf.strings.reduce_join( + data['question/answers']['top_answers'] + ', ', axis=1 + ) + q_prefix = tf.repeat(['Question: '], repeats=tf.shape(questions)[0]) + a_prefix = tf.repeat([' Answer: '], repeats=tf.shape(questions)[0]) + sep_token = tf.repeat([' '], repeats=tf.shape(questions)[0]) + knowledges = tf.strings.join( + [q_prefix, questions, a_prefix, answers, sep_token] + ) + # data['knowledge'] = tf.strings.reduce_join(knowledges, axis=0) + data['knowledge'] = tf.strings.reduce_join(knowledges, axis=0) + return data + + return get_vqa_knowledge_fn + + +def get_default_dataset_config(): + """Gets default configs for wit_internal (en) dataset.""" + dataset_configs = ml_collections.ConfigDict() + dataset_configs.dataset = 'vqa' + # Add path to your data here: + dataset_configs.dataset_dir = '' + dataset_configs.train_split = 'train+validation' + dataset_configs.output_max_num_tokens = OUTPUT_MAX_LENGTH + dataset_configs.knowledge_max_num_tokens = OUTPUT_MAX_LENGTH + dataset_configs.image_size = IMAGE_SIZE + dataset_configs.pp_train = ( + f'get_vqa_knowledge|decode|resize(resize_size={IMAGE_SIZE})|value_range(-1,1)|t5_tokenize(max_num_tokens={KNOWLEDGE_MAX_LENGTH},' + ' inkey="knowledge", outkey="knowledge_tokens",' + f' prompt="{data_utils.KNOWLEDGE_PREFIX}")|keep("image",' + ' "knowledge_tokens")' + ) + dataset_configs.vocab_size = data_utils.VOCAB_SIZE_T5 + dataset_configs.prefetch_to_device = 2 + return dataset_configs + + +@datasets.add_dataset('vqa_table') +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=None, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None, +): + """Returns generators for the CC12M train, validation and test sets. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. Not used. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del batch_size + default_dataset_config = get_default_dataset_config() + if dataset_configs: + default_dataset_config.update(dataset_configs) + + dataset_configs = default_dataset_config + + del rng + assert dataset_configs is not None + logging.info('Loading train split of the %s', dataset_configs.dataset) + + def pp_fn(x, how): + pp = builder.get_preprocess_fn(how, remove_tpu_dtypes=False) + example = pp(x) + example['image'] = tf.cast(example['image'], dtype=dtype_str) + return example + + # E.g. for testing with TAP. + shuffle_buffer_size = None + + train_ds = data_utils.get_data( + dataset=dataset_configs.dataset, + split=dataset_configs.train_split, + data_dir=dataset_configs.get('dataset_dir'), + batch_size=eval_batch_size, + preprocess_fn=functools.partial(pp_fn, how=dataset_configs.pp_train), + shuffle_buffer_size=None, + shuffle_files=False, + prefetch=dataset_configs.get('prefetch_to_host', 2), + cache='loaded', + ignore_errors=False, + drop_remainder=True, + ) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError( + 'Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.' + ) + logging.info('Using the tf.data service at %s', dataset_service_address) + assert shuffle_buffer_size is not None + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + n_train_ex = dataset_utils.get_num_examples( + dataset_configs.dataset, + dataset_configs.train_split, + data_dir=dataset_configs.get('dataset_dir'), + ) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, + inputs_key='image', + train=True, + batch_size=eval_batch_size, + ) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + if num_shards > 0: + train_iter = map(shard_batches, train_iter) + + meta_data = { + 'num_train_examples': n_train_ex, + 'example_per_shard': int(n_train_ex // jax.process_count()), + 'batch_size': eval_batch_size, + } + + image_shape = (dataset_configs.image_size, dataset_configs.image_size, 3) + knowledge_shape = (KNOWLEDGE_MAX_LENGTH + data_utils.PROMPT_LENGTH,) + + meta_data['image_spec'] = (image_shape, getattr(jnp, dtype_str)) + meta_data['knowledge_spec'] = (knowledge_shape, jnp.int16) + return dataset_utils.Dataset(train_iter, None, None, meta_data) diff --git a/scenic/projects/knowledge_visual_language/data/web_image_text_generation_dataset.py b/scenic/projects/knowledge_visual_language/data/web_image_text_generation_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..790522050b11a9479d156575868bec070d09b949 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/data/web_image_text_generation_dataset.py @@ -0,0 +1,304 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset and Loader for Argus Web-Image-Text dataset for caption generation pre-training.""" +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +# import jax +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib.big_transfer import builder +from scenic.dataset_lib import web_image_text_dataset +from scenic.projects.knowledge_visual_language.data import data_utils +import tensorflow as tf + +SPAN_MAX_LENGTH = 5 +FILTER_LENGTH = 32 +OUTPUT_MAX_LENGTH = 32 +KNOWLEDGE_MAX_LENGTH = 320 +IMAGE_SIZE = 224 + + +def get_default_dataset_config(runlocal=False, additional_valid_dataset=True): + """Gets default configs for argus dataset.""" + dataset_configs = ml_collections.ConfigDict() + # Add path to your data here: + dataset_configs.dataset = '' + dataset_configs.train_split = 'full[50000:]' + MAX_LENGTH = OUTPUT_MAX_LENGTH # pylint: disable=invalid-name + pp_common = f'decode|resize(resize_size={IMAGE_SIZE})|value_range(-1,1)' + pp_argus = ( + f'|t5_tokenize(max_num_tokens={KNOWLEDGE_MAX_LENGTH}, inkey="alt_texts",' + ' outkey="retr_texts",' + f' prompt="{data_utils.KNOWLEDGE_PREFIX}")|t5_tokenize(max_num_tokens={OUTPUT_MAX_LENGTH * 3},' + ' inkey="alt_texts", outkey="caption_tokens",' + f' prompt="{data_utils.CAPTION_PREFIX}")|keep("image", "caption_tokens",' + ' "retr_texts")' + ) + pp_cc = ( + f'|t5_tokenize(max_num_tokens={OUTPUT_MAX_LENGTH * 3}, inkey="texts",' + ' outkey="caption_tokens",' + f' prompt="{data_utils.CAPTION_PREFIX}")|t5_tokenize(max_num_tokens={KNOWLEDGE_MAX_LENGTH},' + ' inkey="texts", outkey="retr_texts",' + f' prompt="{data_utils.KNOWLEDGE_PREFIX}")|keep("image",' + ' "caption_tokens", "retr_texts")' + ) + pp_coco_eval = ( + pp_common + + f'|coco_captions|t5_tokenize(max_num_tokens={OUTPUT_MAX_LENGTH * 3},' + ' inkey="texts", outkey="caption_tokens",' + f' prompt="{data_utils.CAPTION_PREFIX}")|t5_tokenize(max_num_tokens={KNOWLEDGE_MAX_LENGTH},' + ' inkey="texts", outkey="retr_texts",' + f' prompt="{data_utils.KNOWLEDGE_PREFIX}")|keep("image",' + ' "caption_tokens", "retr_texts")' + ) + dataset_configs.max_num_tokens = MAX_LENGTH + dataset_configs.image_size = IMAGE_SIZE + dataset_configs.pp_train = pp_common + pp_argus + dataset_configs.shuffle_buffer_size = 250000 if not runlocal else 50 + + pp_argus_eval = pp_common + pp_argus + pp_cc_eval = pp_common + pp_cc + sub = '[:4]' if runlocal else '' + if additional_valid_dataset: + dataset_configs.val_split = [ + ( + 'val_argus', + dataset_configs.dataset, + ['full[:50000]', f'full{sub}'][runlocal], + pp_argus_eval, + ), + ( + 'val_cc', + 'argus:cc12m/cc12m', + ['full[:50000]', f'full{sub}'][runlocal], + pp_cc_eval, + ), + ('coco', 'coco_captions', 'val', pp_coco_eval), + ] + else: + dataset_configs.val_split = f'full{sub}' if runlocal else 'full[:50000]' + dataset_configs.pp_eval = pp_argus_eval + + dataset_configs.val_cache = 'loaded' # Unfortunately, "batched" gets us OOM. + dataset_configs.vocab_size = data_utils.VOCAB_SIZE_T5 + dataset_configs.prefetch_to_device = 2 + return dataset_configs + + +@datasets.add_dataset('web_image_text_generation') +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None, +): + """Returns generators for the argus train, validation and test sets. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. Not used. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del eval_batch_size + default_dataset_config = get_default_dataset_config( + runlocal=False, additional_valid_dataset=True + ) + if dataset_configs: + default_dataset_config.update(dataset_configs) + + dataset_configs = default_dataset_config + + del rng + assert dataset_configs is not None + logging.info( + 'Loading train split of the %sfrom argus dataset.', + dataset_configs.dataset, + ) + + def pp_fn(x, how): + pp = builder.get_preprocess_fn(how, remove_tpu_dtypes=False) + example = pp(x) + example['image'] = tf.cast(example['image'], dtype=dtype_str) + return example + + # E.g. for testing with TAP. + shuffle_buffer_size = ( + 1000 if num_shards == 1 else dataset_configs.shuffle_buffer_size + ) + + train_ds = data_utils.get_data( + dataset=dataset_configs.dataset, + split=dataset_configs.train_split, + data_dir=dataset_configs.get('dataset_dir'), + batch_size=batch_size, + filter_fn=functools.partial( + data_utils.filter_text_length, filter_len=FILTER_LENGTH + ), + preprocess_fn=functools.partial(pp_fn, how=dataset_configs.pp_train), + shuffle_buffer_size=shuffle_buffer_size, + prefetch=dataset_configs.get('prefetch_to_host', 2), + cache='loaded', + ignore_errors=True, + ) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError( + 'Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.' + ) + logging.info('Using the tf.data service at %s', dataset_service_address) + assert shuffle_buffer_size is not None + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + n_train_ex = dataset_utils.get_num_examples( + dataset_configs.dataset, + dataset_configs.train_split, + data_dir=dataset_configs.get('dataset_dir'), + ) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, + inputs_key='encoder_input_image', + train=True, + batch_size=batch_size, + ) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + map_generation_split_batches = functools.partial( + data_utils.map_generation_split, + span_len=SPAN_MAX_LENGTH, + output_max_len=OUTPUT_MAX_LENGTH, + split_key='caption_tokens', + add_retr=False, + ) + + train_iter = iter(train_ds) + train_iter = map(map_generation_split_batches, train_iter) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(data_utils.sample_retr_image, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + if num_shards > 0: + train_iter = map(shard_batches, train_iter) + if dataset_configs.prefetch_to_device: + train_iter = jax_utils.prefetch_to_device( + train_iter, dataset_configs.prefetch_to_device + ) + + logging.info( + 'Loading validation split of the %sfrom argus dataset.', + dataset_configs.dataset, + ) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, + inputs_key='encoder_input_image', + train=False, + batch_size=batch_size, + ) + + def _get_eval_iter(dataset, split, pp_eval): + val_ds = data_utils.get_data( + dataset=dataset, + split=split, + data_dir=dataset_configs.get('dataset_dir'), + batch_size=batch_size, + preprocess_fn=functools.partial(pp_fn, how=pp_eval), + cache=dataset_configs.val_cache, + repeat_after_batching=True, + drop_remainder=False, + ) + + valid_iter = iter(val_ds) + valid_iter = map(map_generation_split_batches, valid_iter) + valid_iter = map(dataset_utils.tf_to_numpy, valid_iter) + valid_iter = map(data_utils.sample_retr_image, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + if num_shards > 0: + valid_iter = map(shard_batches, valid_iter) + if dataset_configs.prefetch_to_device: + valid_iter = jax_utils.prefetch_to_device( + valid_iter, dataset_configs.prefetch_to_device + ) + + return valid_iter + + def _get_num_eval_examples(dataset, split, data_dir): + return dataset_utils.get_num_examples(dataset, split, data_dir) + + if isinstance(dataset_configs.val_split, str): + valid_iter = _get_eval_iter( + dataset_configs.dataset, + dataset_configs.val_split, + dataset_configs.pp_eval, + ) + n_eval_ex = _get_num_eval_examples( + dataset_configs.dataset, + dataset_configs.val_split, + data_dir=dataset_configs.get('dataset_dir'), + ) + else: + valid_iter, n_eval_ex = {}, {} + for eval_spec in dataset_configs.val_split: + name, dataset, split, pp_eval = eval_spec + valid_iter[name] = _get_eval_iter(dataset, split, pp_eval) + n_eval_ex[name] = _get_num_eval_examples( + dataset, split, data_dir=dataset_configs.get('dataset_dir') + ) + + meta_data = {'num_train_examples': n_train_ex, 'num_eval_examples': n_eval_ex} + + if dataset_configs.get('extra_meta_data'): + for k, v in dataset_configs.extra_meta_data.items(): + meta_data[k] = v + + image_shape = (-1, dataset_configs.image_size, dataset_configs.image_size, 3) + predix_shape = (-1, data_utils.PROMPT_LENGTH + SPAN_MAX_LENGTH + 1) + input_shape = (-1, OUTPUT_MAX_LENGTH) + retr_texts_shape = (-1, KNOWLEDGE_MAX_LENGTH + data_utils.PROMPT_LENGTH) + retr_image_shape = ( + -1, + dataset_configs.image_size, + dataset_configs.image_size, + 3, + ) + + meta_data['encoder_input_image_spec'] = (image_shape, getattr(jnp, dtype_str)) + meta_data['encoder_input_tokens_spec'] = (predix_shape, jnp.int16) + meta_data['decoder_input_tokens_spec'] = (input_shape, jnp.int16) + meta_data['decoder_target_tokens_spec'] = (input_shape, jnp.int16) + meta_data['retr_texts_spec'] = (retr_texts_shape, jnp.int16) + meta_data['retr_images_spec'] = (retr_image_shape, getattr(jnp, dtype_str)) + return dataset_utils.Dataset(train_iter, valid_iter, None, meta_data) diff --git a/scenic/projects/knowledge_visual_language/data/wiki_image_text_generation_dataset.py b/scenic/projects/knowledge_visual_language/data/wiki_image_text_generation_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..a987a2ecc48e5e48dad97f7d608d29eca70c2d62 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/data/wiki_image_text_generation_dataset.py @@ -0,0 +1,359 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset and Loader for Wikipedia Image-Text (WIT) dataset for retrieval training. + +Only prepare paired with knowledge (contextualalized passages) +""" +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib.big_transfer import builder +from scenic.dataset_lib.big_transfer import registry +from scenic.dataset_lib import web_image_text_dataset +from scenic.projects.knowledge_visual_language.data import data_utils +import tensorflow as tf + +SPAN_MAX_LENGTH = 5 +OUTPUT_MAX_LENGTH = 36 +KNOWLEDGE_MAX_LENGTH = 320 +IMAGE_SIZE = 224 + + +@registry.Registry.register('preprocess_ops.get_wit_knowledge', 'function') +def get_wit_knowledge(): + """Concat title passage and document together to form knowledge.""" + + def get_wit_knowledge_fn(data): + """Prepare Knowledge by concating hierarchy, passage and first-paragraph.""" + + knowledges = [ + data['hierarchical_section_title'], + data['context_section_description'], + data['context_page_description'], + ] + data['knowledge'] = tf.strings.join(knowledges, separator=' ') + + caption = data['caption_reference_description_canonicalized'] + if tf.strings.length(caption) < 1: + caption = data['caption_alt_text_description_canonicalized'] + if tf.strings.length(caption) < 1: + caption = tf.strings.regex_replace( + data['caption_attribution_description_canonicalized'], '^english ', '' + ) + data['caption'] = caption + return data + + return get_wit_knowledge_fn + + +def get_default_dataset_config(runlocal=False): + """Gets default configs for wit_internal (en) dataset.""" + dataset_configs = ml_collections.ConfigDict() + # Add path to your data here: + dataset_configs.dataset = '' + dataset_configs.train_split = 'train[1000:]' + dataset_configs.output_max_num_tokens = OUTPUT_MAX_LENGTH + dataset_configs.knowledge_max_num_tokens = OUTPUT_MAX_LENGTH + dataset_configs.image_size = IMAGE_SIZE + dataset_configs.pp_train = ( + f'decode|resize(resize_size={IMAGE_SIZE})|value_range(-1,1)|get_wit_knowledge|t5_tokenize(max_num_tokens={KNOWLEDGE_MAX_LENGTH},' + ' inkey="knowledge", outkey="retr_texts",' + f' prompt="{data_utils.KNOWLEDGE_PREFIX}")|t5_tokenize(max_num_tokens={OUTPUT_MAX_LENGTH * 3},' + ' inkey="caption", outkey="caption_tokens",' + f' prompt="{data_utils.CAPTION_PREFIX}")|keep("image", "caption_tokens",' + ' "retr_texts")' + ) + + dataset_configs.val_split = [( + 'val', + dataset_configs.dataset, + 'train[:1000]', + dataset_configs.pp_train, + )] + + dataset_configs.shuffle_buffer_size = 250000 if not runlocal else 50 + dataset_configs.val_cache = 'loaded' # Unfortunately, "batched" gets us OOM. + dataset_configs.vocab_size = data_utils.VOCAB_SIZE_T5 + dataset_configs.prefetch_to_device = 2 + return dataset_configs + + +def inception_crop(image, resize_size=224, area_min=20, area_max=80): + """Random crop input image.""" + begin, size, _ = tf.image.sample_distorted_bounding_box( + tf.shape(image), + tf.zeros([0, 0, 4], tf.float32), + area_range=(area_min / 100, area_max / 100), + min_object_covered=0, # Don't enforce a minimum area. + use_image_if_no_bounding_boxes=True, + ) + crop = tf.slice(image, begin, size) + # Unfortunately, the above operation loses the depth-dimension. So we need + # to restore it the manual way. + crop.set_shape([None, None, image.shape[-1]]) + if resize_size: + crop = tf.cast( + tf.image.resize(crop, [resize_size, resize_size]), image.dtype + ) + return crop + + +# def sample_retr_image(batch, random_ratio=0.): +# """Sample image from similar sample by tfidf.""" + +# rds = np.random.random(size=len(batch['encoder_input_image'])) +# passages = [p.decode('utf-8')[:256] for p in batch.pop('knowledge')] +# passages_tfidf = TfidfVectorizer().fit_transform(passages) +# sim = cosine_similarity(passages_tfidf) +# np.fill_diagonal(sim, 0) +# rd_imgs = batch['encoder_input_image'][np.argmax(sim, axis=1)] +# del passages_tfidf, passages + +# batch['retr_images'] = [] +# for rd_img, rd, img in zip(rd_imgs, rds, batch['encoder_input_image']): +# if rd < random_ratio: +# batch['retr_images'] += [rd_img] +# else: +# batch['retr_images'] += [inception_crop(img, area_min=5, area_max=60)] +# batch['retr_images'] = np.expand_dims(batch['retr_images'], axis=1) + +# crops = [] +# for img in batch['encoder_input_image']: +# crop = inception_crop(img, area_min=40, area_max=100) +# crops += [crop] +# batch['encoder_input_image'] = np.stack(crops, axis=0) +# return batch + + +def sample_retr_image(batch): + """Sample image from similar sample by tfidf.""" + + crops = [] + for img in batch['encoder_input_image']: + crops += [inception_crop(img, area_min=5, area_max=60)] + batch['retr_images'] = np.stack(crops, axis=0) + return batch + + +@datasets.add_dataset('wiki_image_text_generation') +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=None, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None, +): + """Returns generators for the CC12M train, validation and test sets. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. Not used. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + default_dataset_config = get_default_dataset_config(runlocal=False) + if dataset_configs: + default_dataset_config.update(dataset_configs) + + dataset_configs = default_dataset_config + + del rng + assert dataset_configs is not None + logging.info('Loading train split of the %s', dataset_configs.dataset) + + def pp_fn(x, how): + pp = builder.get_preprocess_fn(how, remove_tpu_dtypes=False) + example = pp(x) + example['image'] = tf.cast(example['image'], dtype=dtype_str) + return example + + # E.g. for testing with TAP. + shuffle_buffer_size = ( + 1000 if num_shards == 1 else dataset_configs.shuffle_buffer_size + ) + + train_ds = data_utils.get_data( + dataset=dataset_configs.dataset, + split=dataset_configs.train_split, + batch_size=batch_size, + preprocess_fn=functools.partial(pp_fn, how=dataset_configs.pp_train), + filter_fn=functools.partial(data_utils.filter_text_length, filter_len=4), + shuffle_buffer_size=shuffle_buffer_size, + prefetch=dataset_configs.get('prefetch_to_host', 2), + cache='loaded', + ignore_errors=True, + ) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError( + 'Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.' + ) + logging.info('Using the tf.data service at %s', dataset_service_address) + assert shuffle_buffer_size is not None + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + n_train_ex = dataset_utils.get_num_examples( + dataset_configs.dataset, + dataset_configs.train_split, + data_dir=dataset_configs.get('dataset_dir'), + ) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, + inputs_key='encoder_input_image', + train=True, + batch_size=batch_size, + ) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + map_generation_split_batches = functools.partial( + data_utils.map_generation_split, + span_len=SPAN_MAX_LENGTH, + output_max_len=OUTPUT_MAX_LENGTH, + split_key='caption_tokens', + add_retr=False, + ) + + train_iter = iter(train_ds) + train_iter = map(map_generation_split_batches, train_iter) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(sample_retr_image, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + if num_shards > 0: + train_iter = map(shard_batches, train_iter) + if dataset_configs.prefetch_to_device: + train_iter = jax_utils.prefetch_to_device( + train_iter, dataset_configs.prefetch_to_device + ) + + logging.info('Loading validation split of the %s', dataset_configs.dataset) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, + inputs_key='encoder_input_image', + train=False, + batch_size=eval_batch_size, + ) + + def _get_eval_iter(dataset, split, pp_eval): + val_ds = data_utils.get_data( + dataset=dataset, + split=split, + data_dir=dataset_configs.get('dataset_dir'), + batch_size=eval_batch_size, + preprocess_fn=functools.partial(pp_fn, how=pp_eval), + filter_fn=functools.partial( + data_utils.filter_text_length, filter_len=4 + ), + cache=dataset_configs.val_cache, + repeat_after_batching=True, + drop_remainder=False, + ) + + valid_iter = iter(val_ds) + valid_iter = map(map_generation_split_batches, valid_iter) + valid_iter = map(dataset_utils.tf_to_numpy, valid_iter) + valid_iter = map(sample_retr_image, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + if num_shards > 0: + valid_iter = map(shard_batches, valid_iter) + if dataset_configs.prefetch_to_device: + valid_iter = jax_utils.prefetch_to_device( + valid_iter, dataset_configs.prefetch_to_device + ) + + return valid_iter + + def _get_num_eval_examples(dataset, split, data_dir): + return dataset_utils.get_num_examples(dataset, split, data_dir) + + if isinstance(dataset_configs.val_split, str): + valid_iter = _get_eval_iter( + dataset_configs.dataset, + dataset_configs.val_split, + dataset_configs.pp_eval, + ) + n_eval_ex = _get_num_eval_examples( + dataset_configs.dataset, + dataset_configs.val_split, + data_dir=dataset_configs.get('dataset_dir'), + ) + else: + valid_iter, n_eval_ex = {}, {} + for eval_spec in dataset_configs.val_split: + name, dataset, split, pp_eval = eval_spec + valid_iter[name] = _get_eval_iter(dataset, split, pp_eval) + n_eval_ex[name] = _get_num_eval_examples( + dataset, split, data_dir=dataset_configs.get('dataset_dir') + ) + + # builder, split, host_id, host_count + + # splitname, host_start, host_end = dataset_utils._get_data_range( + # dataset_configs.dataset, + # dataset_configs.train_split, + # data_dir=dataset_configs.get('dataset_dir')) + + meta_data = { + 'num_train_examples': n_train_ex, + 'example_per_shard': int(n_train_ex // jax.process_count()), + 'num_eval_examples': n_eval_ex, + } + + if dataset_configs.get('extra_meta_data'): + for k, v in dataset_configs.extra_meta_data.items(): + meta_data[k] = v + + image_shape = (-1, dataset_configs.image_size, dataset_configs.image_size, 3) + predix_shape = (-1, data_utils.PROMPT_LENGTH + SPAN_MAX_LENGTH + 1) + input_shape = (-1, OUTPUT_MAX_LENGTH) + retr_texts_shape = (-1, KNOWLEDGE_MAX_LENGTH + data_utils.PROMPT_LENGTH) + retr_image_shape = ( + -1, + dataset_configs.image_size, + dataset_configs.image_size, + 3, + ) + + meta_data['encoder_input_image_spec'] = (image_shape, getattr(jnp, dtype_str)) + meta_data['encoder_input_tokens_spec'] = (predix_shape, jnp.int16) + meta_data['decoder_input_tokens_spec'] = (input_shape, jnp.int16) + meta_data['retr_texts_spec'] = (retr_texts_shape, jnp.int16) + meta_data['retr_images_spec'] = (retr_image_shape, getattr(jnp, dtype_str)) + meta_data['decoder_target_tokens_spec'] = (input_shape, jnp.int16) + return dataset_utils.Dataset(train_iter, valid_iter, None, meta_data) diff --git a/scenic/projects/knowledge_visual_language/data/wikidata/data_util.py b/scenic/projects/knowledge_visual_language/data/wikidata/data_util.py new file mode 100644 index 0000000000000000000000000000000000000000..ac971e86742ffa2fd543fae3b3c5a7a86e41fd7f --- /dev/null +++ b/scenic/projects/knowledge_visual_language/data/wikidata/data_util.py @@ -0,0 +1,177 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Functions for processing the data.""" + +import json +from typing import Any, Dict, List + +import matplotlib.pyplot as plt +import networkx as nx +import numpy as np +import tqdm + +import tensorflow as tf +from tf.io import gfile + +MAX_REL_PER_ENTITY = 10000 +# Add path to your data here: +WIKIPEDIA_LINK_PATH = '' +WIKIPEDIA_GRAPH_PATH = '' +WIKIDATA_EDGE_PATH = '' +WIKIDATA_ENTITY_PATH = '' + +NUM_SPLIT = 1024 + + +def construct_kg_graph(rel_list) -> Dict[str, Dict[str, List[str]]]: + """construct a kg graph with reverse link. + + Args: + rel_list: KG edge list, in the format of triplets. + + Returns: + + """ + kg_graph = {} + kg_rel = {} + for se, r, te in tqdm.tqdm(rel_list): + if se == te: + continue + if se not in kg_graph: + kg_graph[se] = {} + if te not in kg_graph[se]: + kg_graph[se][te] = [] + if r not in kg_graph[se][te]: + kg_graph[se][te].append(r) + + if r not in kg_rel: + kg_rel[r] = {} + if te not in kg_rel[r]: + kg_rel[r][te] = 0 + kg_rel[r][te] += 1 + + for se, r, te in tqdm.tqdm(rel_list): + if se == te or kg_rel[r][te] >= MAX_REL_PER_ENTITY: + continue + if te not in kg_graph: + kg_graph[te] = {} + if se not in kg_graph[te]: + kg_graph[te][se] = [] + if r + '_R' not in kg_graph[te][se]: + kg_graph[te][se].append(r + '_R') + + return kg_graph + + +def load_wiki_from_file(file_path) -> List[Dict[str, None]]: + data_list = [] + with gfile.Open(file_path, 'r') as fopen: + lines = fopen.readlines() + for line in lines: + data = json.loads(line) + data_list += [data] + del lines + return data_list + + +def extract_2hop_graph(in_context_ents, kg_graph) -> Dict[Any, Dict[Any, bool]]: + """For each wikipedia page with N in-context entities, extract a subgraph that contains only 2hop paths between any pair of nodes. + + Args: + in_context_ents: all entities within each wiki-page, stored as dict. + kg_graph: the global KG (i.e. WikiData Knowledge Graph), stored as dict. + + Returns: + Extracted 2-hop subgraph for each page. + """ + all_nodes = {se: [se] for se in in_context_ents} + for se in in_context_ents: + if se in kg_graph: + for te in kg_graph[se]: + if te not in in_context_ents: + if te not in all_nodes: + all_nodes[te] = [se] + else: + all_nodes[te] += [se] + remain_nodes = {e: True for e in all_nodes if len(all_nodes[e]) > 1} + for e in in_context_ents: + remain_nodes[e] = True + + two_graph = {} + for se in remain_nodes: + if se in kg_graph: + for te in kg_graph[se]: + if te in remain_nodes: + if se not in two_graph: + two_graph[se] = {} + two_graph[se][te] = kg_graph[se][te] + if te in kg_graph and se in kg_graph[te]: + if te not in two_graph: + two_graph[te] = {} + two_graph[te][se] = kg_graph[te][se] + return two_graph + + +def plot_graph(in_graph_ents, graph, entity_dict, print_out_label=True) -> None: + """Function to plot each wikipedia's subgraph. + + Args: + in_graph_ents: all in-context entities + graph: subgraph of each wikipage. + entity_dict: entityID to name + print_out_label: whether to print the intermediate label. + """ + if not graph: + return + g = nx.Graph() + all_label = {} + in_label = {} + for se in graph: + all_label[entity_dict[se]] = entity_dict[se] + if se in in_graph_ents: + g.add_node(entity_dict[se], color='red', size=2000) + in_label[entity_dict[se]] = entity_dict[se] + if se not in in_graph_ents: + g.add_node(entity_dict[se], color='blue', size=100) + for te in graph[se]: + all_label[entity_dict[te]] = entity_dict[te] + if te in in_graph_ents: + g.add_node(entity_dict[te], color='red', size=2000) + in_label[entity_dict[te]] = entity_dict[te] + if te not in in_graph_ents: + g.add_node(entity_dict[te], color='blue', size=100) + g.add_edge(entity_dict[se], entity_dict[te]) + plt.figure(figsize=(10, 10)) + layout = nx.kamada_kawai_layout(g) + if print_out_label: + nx.draw_networkx_nodes( + g, + pos=layout, + node_color=nx.get_node_attributes(g, 'color').values(), + node_size=list(nx.get_node_attributes(g, 'size').values())) + nx.draw_networkx_labels(g, pos=layout, labels=all_label) + nx.draw_networkx_edges(g, pos=layout, alpha=0.3, arrows=False) + else: + nx.draw_networkx_nodes( + g, + pos=layout, + node_color=nx.get_node_attributes(g, 'color').values(), + node_size=list(nx.get_node_attributes(g, 'size').values())) + nx.draw_networkx_labels(g, pos=layout, labels=in_label) + nx.draw_networkx_edges(g, pos=layout, alpha=0.3, arrows=False) + xs = np.array(list(layout.values()))[:, 0] + xmin, xmax = np.min(xs), np.max(xs) + plt.xlim(xmin - (xmax - xmin) * 0.2, xmax + (xmax - xmin) * 0.2) + plt.show() diff --git a/scenic/projects/knowledge_visual_language/data/wikidata/data_util_test.py b/scenic/projects/knowledge_visual_language/data/wikidata/data_util_test.py new file mode 100644 index 0000000000000000000000000000000000000000..1fb76b1f4e2107f85b3c36f2c2079f1f29e2e0eb --- /dev/null +++ b/scenic/projects/knowledge_visual_language/data/wikidata/data_util_test.py @@ -0,0 +1,117 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for Extract WikiGraph.""" +from absl import logging +from absl.testing import absltest +from scenic.projects.knowledge_visual_language.data.wikidata import data_util + + +class ClipModelsTest(absltest.TestCase): + """Single Test based on a dummy input.""" + + def test_graph_extraction(self): + """Tests whether it could correctly extract 2-hop graph.""" + rel_list = [ + ["Q1066517", "r1", "Qdummy"], + ["Q35581", "r2", "Qdummy"], + ["Q2339039", "r2", "Qdummy"], + ["Q753878", "r2", "Qdummy"], + ] + logging.info("Construct KG Graph from edge list.") + kg_graph = data_util.construct_kg_graph(rel_list) + logging.info("Extract 2-hop subgraphs within wiki-pages.") + demo_data = self.demo_input() + for d in demo_data: + in_context_ents = {ent: True for ent in d["link"] if ent != "UNK"} + graph = data_util.extract_2hop_graph(in_context_ents, kg_graph) + print(graph) + logging.info(len(graph)) + + def demo_input(self): + d_list = [{ + "txt": "yukigassen\n is a snowball fighting-competition from " + "japan. today there are annual tournaments in " + "s\u014dbetsu, hokkaid\u014d in japan, kemij\u00e4rvi in" + " finland, vard\u00f8 in norway, murmansk in russia, " + "mount buller, victoria in australia, lule\u00e5 in " + "sweden, anchorage in alaska, aparan in armenia, jasper," + " alberta and saskatoon, saskatchewan in canada.\nthe " + "word consists of the japanese words yuki (snow) and " + "kassen (battle) with rendaku. hence \"yukigassen\" " + "means snow battle, but is a common term for 'snowball " + "fight' in japanese.\n......", + "link": { + "Q1066517": [[17, 46], [483, 497]], + "Q35581": [[106, 114]], + "Q744704": [[125, 134]], + "Q33": [[138, 145]], + "Q108983": [[147, 152], [1720, 1725], [1907, 1912], [2089, 2094]], + "Q1763": [[164, 172]], + "Q984117": [[184, 206]], + "Q26268": [[221, 226], [1534, 1539], [1015, 1020], [1175, 1180], + [1363, 1368]], + "Q39450": [[238, 247]], + "Q797": [[251, 257]], + "Q39618": [[259, 265]], + "Q399": [[269, 276]], + "Q999429": [[278, 293]], + "Q10566": [[298, 321]], + "Q5287": [[358, 366]], + "Q3943791": [[379, 383], [444, 448], [1627, 1631]], + "Q178561": [[397, 403]], + "Q1192464": [[410, 417]], + "Q1035213": [[744, 760]], + "Q131647": [[964, 969], [1118, 1123], [1305, 1310], [1477, 1482], + [1669, 1674], [1865, 1870], [2047, 2052], [925, 930]], + "Q406039": [[1029, 1039], [1189, 1199], [1377, 1387], [1548, 1558], + [1734, 1744], [1922, 1926], [2104, 2108]], + "Q847956": [[1052, 1064], [1211, 1223], [1404, 1416], [1584, 1596], + [1766, 1778], [1951, 1957], [2146, 2152]], + "Q873364": [[1073, 1085], [1243, 1255], [1429, 1441], [1608, 1620], + [1808, 1820], [1975, 1981], [2175, 2181]], + "Q44853": [[1745, 1753]], + "Q218082": [[0, 10], [426, 436], [522, 532], [704, 714], [831, + 841]], + "UNK": [[97, 104], [698, 725], [1040, 1051], [1200, 1210], + [1442, 1452], [1597, 1607], [1224, 1242], [1256, 1280], + [1559, 1583], [1388, 1403], [1621, 1640], [1779, 1795], + [1821, 1826], [1959, 1964], [1928, 1940], [1983, 2006]] + }, + "entity": "Yukigassen" + }, { + "txt": + "harry hyams\nharry john hyams (2 january 1928 \u2013 19 december " + "2015) was a british millionaire who initially made his money as a" + " speculative property (real estate) developer. he was best known " + "as the developer of the centre point office building in " + "london.\n......", + "link": { + "Q2339039": [[213, 225], [961, 973]], + "Q149787": [[283, 289]], + "Q19186": [[291, 300]], + "Q753878": [[633, 642]], + "Q743535": [[1139, 1146]], + "Q43747844": [[1301, 1310]], + "Q7290153": [[1388, 1402], [1566, 1580]], + "Q7743416": [[1584, 1600]], + "Q5669913": [[0, 11], [12, 28]] + }, + "entity": "Harry Hyams" + }] + return d_list + + +if __name__ == "__main__": + absltest.main() diff --git a/scenic/projects/knowledge_visual_language/data/wikidata/extract_wikigraph.py b/scenic/projects/knowledge_visual_language/data/wikidata/extract_wikigraph.py new file mode 100644 index 0000000000000000000000000000000000000000..2c182e1930b455daf3a888fd4cfdf05bb5771c30 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/data/wikidata/extract_wikigraph.py @@ -0,0 +1,88 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Extract 2-hop subgraph from each wikipedia page.""" + +import json +import multiprocessing as mp +import os + +from absl import app +from absl import logging +from scenic.projects.knowledge_visual_language.data.wikidata import data_util +import tqdm + +import tensorflow as tf +from tf.io import gfile + + +def extract_graph_from_file(kg_graph, i) -> None: + """Extract 2hop graphs for all pages in each file. + + Args: + kg_graph: the global KG (i.e. WikiData Knowledge Graph), stored as dict. + i: index of wiki file. + + Returns: + A list of wikipedia pages with extracted graph. + """ + d_list = data_util.load_wiki_from_file( + os.path.join(data_util.WIKIPEDIA_LINK_PATH, 'wiki_%d.txt' % i)) + with gfile.Open( + os.path.join(data_util.WIKIPEDIA_GRAPH_PATH, 'wiki_graph_%d.txt' % i), + 'w') as fopen: + for d in d_list: + if 'link' in d and isinstance(d['link'], dict): + in_context_ents = {ent: True for ent in d['link'] if ent != 'UNK'} + d['graph'] = data_util.extract_2hop_graph(in_context_ents, kg_graph) + fopen.write(json.dumps(d) + '\n') + del d_list + + +def extract_graph_mp(kg_graph, n_pool=1) -> None: + """Use multiprocessing to parallize graph extraction. + + Args: + kg_graph: the global KG (i.e. WikiData Knowledge Graph), stored as dict. + n_pool: number of process (worker) + """ + jobs = [] + if not gfile.Exists(data_util.WIKIPEDIA_GRAPH_PATH): + gfile.MakeDirs( + data_util.WIKIPEDIA_GRAPH_PATH, + mode=gfile.LEGACY_GROUP_WRITABLE_WORLD_READABLE, + ) + if n_pool == 1: + for i in range(data_util.NUM_SPLIT): + extract_graph_from_file(kg_graph, i) + else: + with mp.Pool(n_pool) as pool: + for i in range(data_util.NUM_SPLIT): + jobs += [pool.apply_async(extract_graph_from_file, args=(kg_graph, i))] + for job in tqdm.tqdm(jobs): + job.get() + + +def main(_) -> None: + logging.info('Load WikiData relational edges.') + with gfile.Open(data_util.WIKIDATA_EDGE_PATH) as f: + rel_list = json.load(f) + logging.info('Construct KG Graph from edge list.') + kg_graph = data_util.construct_kg_graph(rel_list) + logging.info('Extract 2-hop subgraphs within wiki-pages.') + extract_graph_mp(kg_graph, n_pool=64) + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/knowledge_visual_language/data/wit_table_dataset.py b/scenic/projects/knowledge_visual_language/data/wit_table_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..be9cfb8e13b9621b0b5994d1df98f21c2b37104d --- /dev/null +++ b/scenic/projects/knowledge_visual_language/data/wit_table_dataset.py @@ -0,0 +1,191 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset and Loader for Wikipedia Image-Text (WIT) dataset for retrieval training. + +Only prepare paired with knowledge (contextualalized passages) +""" +import functools +from typing import Optional + +from absl import logging +import jax +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib.big_transfer import builder +from scenic.dataset_lib.big_transfer import registry +from scenic.dataset_lib import web_image_text_dataset +from scenic.projects.knowledge_visual_language.data import data_utils +import tensorflow as tf + +SPAN_MAX_LENGTH = 5 +OUTPUT_MAX_LENGTH = 36 +KNOWLEDGE_MAX_LENGTH = 320 +IMAGE_SIZE = 224 + + +@registry.Registry.register('preprocess_ops.get_table_knowledge', 'function') +def get_table_knowledge(): + """Concat title passage and document together to form knowledge.""" + + def get_table_knowledge_fn(data): + """Prepare Knowledge by concating hierarchy, passage and first-paragraph.""" + + knowledges = [ + data['hierarchical_section_title'], + data['context_section_description'], + data['context_page_description'], + data['caption_reference_description_canonicalized'], + data['caption_alt_text_description_canonicalized'], + tf.strings.regex_replace( + data['caption_attribution_description_canonicalized'], + '^english ', + '', + ), + ] + data['knowledge'] = tf.strings.join(knowledges, separator=' ') + # data['raw_image'] = data['image'] + return data + + return get_table_knowledge_fn + + +def get_default_dataset_config(): + """Gets default configs for wit_internal (en) dataset.""" + dataset_configs = ml_collections.ConfigDict() + # Add path to your data here: + dataset_configs.dataset = '' + dataset_configs.train_split = 'train' + dataset_configs.output_max_num_tokens = OUTPUT_MAX_LENGTH + dataset_configs.knowledge_max_num_tokens = OUTPUT_MAX_LENGTH + dataset_configs.image_size = IMAGE_SIZE + dataset_configs.pp_train = ( + f'get_table_knowledge|decode|resize(resize_size={IMAGE_SIZE})|value_range(-1,1)|t5_tokenize(max_num_tokens={KNOWLEDGE_MAX_LENGTH},' + ' inkey="knowledge", outkey="knowledge_tokens",' + f' prompt="{data_utils.KNOWLEDGE_PREFIX}")|keep("image",' + ' "knowledge_tokens", "canonical_doc_id")' + ) + dataset_configs.vocab_size = data_utils.VOCAB_SIZE_T5 + dataset_configs.prefetch_to_device = 2 + return dataset_configs + + +@datasets.add_dataset('wit_table') +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=None, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None, +): + """Returns generators for the CC12M train, validation and test sets. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. Not used. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del batch_size + default_dataset_config = get_default_dataset_config() + if dataset_configs: + default_dataset_config.update(dataset_configs) + + dataset_configs = default_dataset_config + + del rng + assert dataset_configs is not None + logging.info('Loading train split of the %s', dataset_configs.dataset) + + def pp_fn(x, how): + pp = builder.get_preprocess_fn(how, remove_tpu_dtypes=False) + example = pp(x) + example['image'] = tf.cast(example['image'], dtype=dtype_str) + return example + + # E.g. for testing with TAP. + shuffle_buffer_size = None + + train_ds = data_utils.get_data( + dataset=dataset_configs.dataset, + split=dataset_configs.train_split, + batch_size=eval_batch_size, + preprocess_fn=functools.partial(pp_fn, how=dataset_configs.pp_train), + shuffle_buffer_size=None, + shuffle_files=False, + prefetch=dataset_configs.get('prefetch_to_host', 2), + cache='loaded', + ignore_errors=True, + drop_remainder=True, + ) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError( + 'Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.' + ) + logging.info('Using the tf.data service at %s', dataset_service_address) + assert shuffle_buffer_size is not None + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + n_train_ex = dataset_utils.get_num_examples( + dataset_configs.dataset, + dataset_configs.train_split, + data_dir=dataset_configs.get('dataset_dir'), + ) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, + inputs_key='image', + train=True, + batch_size=eval_batch_size, + ) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + if num_shards > 0: + train_iter = map(shard_batches, train_iter) + + meta_data = { + 'num_train_examples': n_train_ex, + 'example_per_shard': int(n_train_ex // jax.process_count()), + 'batch_size': eval_batch_size, + } + + image_shape = (dataset_configs.image_size, dataset_configs.image_size, 3) + knowledge_shape = (KNOWLEDGE_MAX_LENGTH + data_utils.PROMPT_LENGTH,) + + meta_data['image_spec'] = (image_shape, getattr(jnp, dtype_str)) + meta_data['knowledge_spec'] = (knowledge_shape, jnp.int16) + return dataset_utils.Dataset(train_iter, None, None, meta_data) diff --git a/scenic/projects/knowledge_visual_language/main.py b/scenic/projects/knowledge_visual_language/main.py new file mode 100644 index 0000000000000000000000000000000000000000..ddf19a38070ccdf28480f0f2bb92af3799c5ece0 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/main.py @@ -0,0 +1,105 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for start training.""" + +from absl import flags +from absl import logging +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.knowledge_visual_language import trainer +from scenic.projects.knowledge_visual_language import trainer_memory +from scenic.projects.knowledge_visual_language import trainer_utils +from scenic.projects.knowledge_visual_language.data import cc12m_table_dataset # pylint: disable=unused-import +from scenic.projects.knowledge_visual_language.data import vqa_dataset # pylint: disable=unused-import +from scenic.projects.knowledge_visual_language.data import vqa_table_dataset # pylint: disable=unused-import +from scenic.projects.knowledge_visual_language.data import web_image_text_generation_dataset # pylint: disable=unused-import +from scenic.projects.knowledge_visual_language.data import wiki_image_text_generation_dataset # pylint: disable=unused-import +from scenic.projects.knowledge_visual_language.data import wit_table_dataset # pylint: disable=unused-import +from scenic.projects.knowledge_visual_language.models import fusion_in_decoder_soft +from scenic.projects.knowledge_visual_language.models import knowledge_fid +from scenic.train_lib import train_utils + +FLAGS = flags.FLAGS + + +def main( + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + workdir: str, + writer: metric_writers.MetricWriter, +) -> None: + """Main function for the knowledge project.""" + data_rng, rng = jax.random.split(rng) + + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address + ) + + logging.info(FLAGS.dataset_service_address) + logging.info('workdir= %s', workdir) + logging.info('global_num_shards= %d', jax.device_count()) + logging.info('num_shards= %d', jax.local_device_count()) + logging.info('cpu info') + logging.info(jax.local_devices(backend='cpu')) + logging.info(jax.local_devices(backend='cpu')) + logging.info('****************** Dataset metadata *****************') + logging.info(dataset.meta_data) + + if config.update_num: + trainer_utils.update_config(config, dataset.meta_data) + if config.model_name == 'retrieval_image_captioner_soft': + model_cls = fusion_in_decoder_soft.FIDSoftModel + trainer.train_and_eval( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer, + ) + elif config.model_name == 'knowledge_fid': + model_cls = knowledge_fid.KnowledgeFIDModel + kb_datasets = {} + for kb_dataset_name, kb_dataset_config in zip( + config.kb_dataset_names, config.kb_dataset_configs + ): + kb_datasets[kb_dataset_name] = train_utils.get_dataset( + config, + data_rng, + dataset_service_address=FLAGS.dataset_service_address, + dataset_name=kb_dataset_name, + dataset_configs=kb_dataset_config, + ) + + trainer_memory.train_and_eval( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer, + kb_datasets=kb_datasets, + ) + else: + raise ValueError(('Unknown model name %s' % config.model_name)) + + return None + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/knowledge_visual_language/models/constants.py b/scenic/projects/knowledge_visual_language/models/constants.py new file mode 100644 index 0000000000000000000000000000000000000000..38c0be399b4cd7bc883f70036708ac3e629a8521 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/models/constants.py @@ -0,0 +1,30 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Constant value and types' definitions.""" + +from typing import Dict, Callable, Any, Tuple, Iterable + +import jax.numpy as jnp + +PyTree = Any +DType = jnp.dtype +JTensor = jnp.ndarray +JTensorDict = Dict[str, JTensor] +Batch = Dict[str, JTensor] +Shape = Iterable[int] +MetricFn = Callable[[JTensor, Batch], Dict[str, Tuple[float, int]]] +LossFn = Callable[[JTensorDict, Batch], Dict[str, float]] +Initializer = Callable[[JTensor, Shape, DType], JTensor] + diff --git a/scenic/projects/knowledge_visual_language/models/fusion_in_decoder_soft.py b/scenic/projects/knowledge_visual_language/models/fusion_in_decoder_soft.py new file mode 100644 index 0000000000000000000000000000000000000000..abe0532432e767509180552324662cb5a26ba4a8 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/models/fusion_in_decoder_soft.py @@ -0,0 +1,518 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Baseline for Image to Text Models. + +B = batch size +H = height +W = width +N = number of image tokens +I = Input sequence length +O = Ouput sequence length +d = hidden dims +C = number of vocabulary +K = number of candidate +L = sequence length of retrieved document +M = sequence length of compressed tokens +""" +from typing import Any, Dict, Optional + +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models import base_model +from scenic.projects.knowledge_visual_language.models import constants +from scenic.projects.knowledge_visual_language.models import layers +from scenic.projects.knowledge_visual_language.models import losses +from scenic.projects.knowledge_visual_language.models import metrics +from scenic.projects.knowledge_visual_language.models import vit as vit_model +from scenic.projects.t5 import layers as t5_model +from scenic.projects.t5 import model as t5_pretrained + + +class VisionLanguageModule(nn.Module): + """Basic ViT + T5 vision language model.""" + + config: ml_collections.ConfigDict + + def setup(self): + t5_config = t5_pretrained.CONFIGS[self.config.t5_name] + self.t5_config = t5_config + t5_config['dropout_rate'] = self.config.dropout_rate + self.ndim = t5_config['emb_dim'] + self.dropout_rate = t5_config['dropout_rate'] + self.key_dim = self.config.key_dim + self.dtype = t5_config['dtype'] + # Shared token embedding for T5 encoder & Decoder + self.shared_token_embedder = t5_model.t5_layers.Embed( + num_embeddings=t5_config['vocab_size'], + features=self.ndim, + dtype=self.dtype, + attend_dtype=self.dtype, # For logit training stability. + embedding_init=nn.initializers.normal(stddev=1.0), + one_hot=True, + name='shared_token_embedder', + ) + # Pre-Trained Lower T5 Decoder + self.out_decoder = t5_model.T5Decoder( + **t5_config, + shared_embedding=self.shared_token_embedder, + name='out_decoder' + ) + # Uni-Modal Text Encoding (Pre-Trained Lower T5 Encoder) + self.text_encoder = layers.LowerT5Encoder( + **t5_config, + num_fusion_layers=self.config.num_fusion_layers, + shared_embedding=self.shared_token_embedder, + name='text_encoder' + ) + # Multi-Modal Fusion Encoder (Pre-Trained Upper T5 Encoder) + self.fusion_encoder = layers.FusedT5Encoder( + **t5_config, + num_fusion_layers=self.config.num_fusion_layers, + name='fusion_encoder' + ) + # Visual Encoding (Pre-Trained ViT) + self.img_encoder = vit_model.Model( + num_classes=self.ndim, + dropout=self.dropout_rate, + name='img_encoder', + variant=self.config.vit_name, + head_zeroinit=False, + dtype=jnp.bfloat16, + num_frozen_layers=self.config.get('vit_num_frozen_layers', -1), + pool_type='gap', + ) + self.dropout = nn.Dropout(rate=0.2) + + def get_base_encoded( + self, + image=None, + text_tokens=None, + train=False, + random_drop_image=False, + bsz=None, + frozen_base=True, + ): + if bsz is None: + if text_tokens is not None: + bsz = len(text_tokens) + elif image is not None: + bsz = len(image) + if text_tokens is not None: + text_query, text_mask = self.text_encoder( + encoder_input_tokens=text_tokens, + use_dropout=train, + frozen_base=frozen_base, + ) # B×I×d + else: + text_query = jnp.zeros([bsz, 1, self.ndim], dtype=self.dtype) + text_mask = jnp.zeros([bsz, 1], dtype=self.dtype) + if image is not None: + img_query, img_emb = self.encode_image(image, train=train) + n_img_tokens = img_query.shape[1] + else: + n_img_tokens = 1 + img_query = jnp.zeros([bsz, n_img_tokens, self.ndim], dtype=self.dtype) + img_emb = jnp.zeros([bsz, self.ndim], dtype=self.dtype) + if train and random_drop_image: + image_mask = jax.random.bernoulli( + self.make_rng('dropout'), p=1 - 0.2, shape=(bsz, 1) + ).astype(self.dtype) + img_emb = img_emb * image_mask + image_mask = jnp.repeat(image_mask, repeats=n_img_tokens, axis=1) + else: + image_mask = jnp.ones([bsz, n_img_tokens], dtype=self.dtype) + base_masks = jnp.concatenate([text_mask, image_mask], axis=1) + return [text_query, img_query], base_masks, img_emb + + +class FusionInDecoderSoftModule(VisionLanguageModule): + """Modification of FID (https://arxiv.org/pdf/2007.01282.pdf) model. + + Take continous embedding of retrieved document at middle fusion layer + instead of whole sequence at input. + """ + + config: ml_collections.ConfigDict + + def setup(self): + super().setup() + self.n_compressed_tokens = self.config.n_compressed_tokens + # Project retrieved knowledge into encoder space + self.value_perceiver = layers.PerceiverEncoder( + **self.t5_config, + num_fusion_layers=self.config.num_fusion_layers, + perceiver_output_dim=self.n_compressed_tokens, + name='value_perceiver' + ) + # Query & Key Head for Retrieval + self.compress_head = nn.Dense( + features=self.key_dim, dtype=self.dtype, name='head_out', use_bias=False + ) + self.query_head = layers.TransformerHead( + **self.t5_config, + num_head_layers=self.config.num_fusion_layers, + out_head=self.compress_head, + key_dim=self.key_dim, + name='query_head' + ) + self.key_head = layers.TransformerHead( + **self.t5_config, + num_head_layers=self.config.num_fusion_layers, + out_head=self.compress_head, + key_dim=self.key_dim, + name='key_head' + ) + self.att_transform = layers.AffineTransform() + + def compress_and_pool_key(self, h, mask): + window_size = self.n_stride + pooled_tokens = nn.avg_pool( + h[:, self.n_compressed_tokens :, :], + window_shape=(window_size,), + strides=(self.n_stride,), + ) + pooled_tokens = jnp.concatenate( + (h[:, : self.n_compressed_tokens, :], pooled_tokens), axis=1 + ) + pooled_mask = jnp.squeeze( + -nn.max_pool( + jnp.expand_dims(-mask[:, self.n_compressed_tokens :], axis=-1), + window_shape=(window_size,), + strides=(self.n_stride,), + ) + ) + pooled_mask = jnp.concatenate( + (mask[:, : self.n_compressed_tokens], pooled_mask), axis=1 + ) + # Total: 10 + 512 / n_stride = 42 tokens + return pooled_tokens, pooled_mask + + def compress_key(self, h, mask): + pooled_tokens = h[:, : self.n_compressed_tokens, :] + pooled_mask = mask[:, : self.n_compressed_tokens] + return pooled_tokens, pooled_mask + + def encode_knowledge( + self, + retr_texts, + retr_images=None, + bsz=None, + train=False, + random_drop_image=False, + frozen_base=True, + ): + retr_tokens, retr_masks, retr_img_emb = self.get_base_encoded( + bsz=bsz, + image=retr_images, + text_tokens=retr_texts, + train=train, + random_drop_image=random_drop_image, + frozen_base=frozen_base, + ) + retr_tokens = jnp.concatenate(retr_tokens, axis=1) # B×(I+N)×d + retr_keys = self.key_head( + encoded_emb=retr_tokens, encoder_mask=retr_masks, use_dropout=train + ) # B×(I+N)×d -> B×d + compressed_val, compressed_mask, disentangle_reg = self.value_perceiver( + encoded=retr_tokens, encoded_mask=retr_masks, use_dropout=train + ) + + return ( + retr_keys, + compressed_val, + compressed_mask, + retr_img_emb, + disentangle_reg, + ) + + def encode_query( + self, + encoder_input_image, + encoder_input_tokens, + train=False, + frozen_base=True, + ): + bsz = encoder_input_image.shape[0] + base_vals, base_masks, _ = self.get_base_encoded( + bsz=bsz, + image=encoder_input_image, + text_tokens=encoder_input_tokens, + train=train, + frozen_base=frozen_base, + ) + base_vals = self.dropout( + jnp.concatenate(base_vals, axis=1), deterministic=not train + ) # B×(I+N)×d + base_query = self.query_head( + encoded_emb=base_vals, encoder_mask=base_masks, use_dropout=train + ) + return base_vals, base_masks, base_query + + def encode_topk_knowledge( + self, + bsz, + retr_texts, + retr_images=None, + train=False, + random_drop_image=False, + frozen_base=True, + ): + k, l = retr_texts.shape[1], retr_texts.shape[2] + retr_texts = jnp.reshape(retr_texts, (bsz * k, l)) + if retr_images is not None: + image_shape = (bsz * k,) + retr_images.shape[2:] + retr_images = jnp.reshape(retr_images, image_shape) + ( + retr_keys, + compressed_val, + compressed_mask, + retr_img_emb, + disentangle_reg, + ) = self.encode_knowledge( + retr_texts, + retr_images, + bsz=bsz * k, + train=train, + random_drop_image=random_drop_image, + frozen_base=frozen_base, + ) + n_tokens = compressed_val.shape[1] + retr_keys = jnp.reshape(retr_keys, (bsz, k, self.key_dim)) + compressed_val = jnp.reshape( + compressed_val, (bsz, k, n_tokens, self.ndim) + ) # B×K×M×d + compressed_mask = jnp.reshape(compressed_mask, (bsz, k, n_tokens)) + return ( + retr_keys, + compressed_val, + compressed_mask, + retr_img_emb, + disentangle_reg, + ) + + def encode_image(self, image, train=False): + _, out = self.img_encoder(image, train=train) # B×W×H×3 -> B×N×d + img_query = jnp.asarray(out['logits_2d'] * 4, self.dtype) + n_img_tokens = img_query.shape[1] * img_query.shape[2] + img_query = jnp.reshape(img_query, [-1, n_img_tokens, self.ndim]) + img_emb = jnp.asarray(out['head_input'], self.dtype) + return img_query, img_emb + + def fuse_topk_knowledge( + self, + base_query, + base_vals, + base_masks, + retr_keys, + retr_vals, + retr_masks, + train=False, + ): + (bsz, k, n_tokens) = retr_vals.shape[:3] + retr_vals = jnp.reshape( + retr_vals, (bsz, k * n_tokens, self.ndim) + ) # B×(M*K)×d + retr_scores = jnp.einsum('bd,bkd->bk', base_query, retr_keys) + retr_scores = jax.nn.softmax(self.att_transform(retr_scores), axis=-1) * k + retr_masks = jnp.reshape(retr_masks, (bsz, k * n_tokens)) + att_mask = [ + jnp.ones([bsz, base_vals.shape[1]]), + jnp.repeat(retr_scores, repeats=n_tokens, axis=-1), + ] + att_mask = jnp.expand_dims(jnp.concatenate(att_mask, axis=-1), axis=-1) + fused_query, fused_mask, attn_weights_all_layers = self.fusion_encoder( + encoder_input_embs=base_vals, + fused_input_embs=retr_vals, + encoder_mask=base_masks, + fused_mask=retr_masks, + att_mask=att_mask, + use_dropout=train, + output=True, + ) # B×(I+N+M*K)×d + return fused_query, fused_mask, retr_scores, attn_weights_all_layers + + def __call__( + self, + decoder_input_tokens, # B×O + decoder_target_tokens, # B×O + encoder_input_image=None, # B×W×H×3 + encoder_input_tokens=None, # B×I + retr_texts=None, # B×K×L + retr_images=None, # B×K×W×H×3 + train=False, + decode=False, + fuse_retrieval=True, + max_decode_length=None, + debug: bool = False, + in_batch_neg: bool = False, + frozen_base=True, + **args + ): + """Conduct supervised retrieval-augmented training with given retrieved documents. + + Args: + decoder_input_tokens: # B×O. + decoder_target_tokens: # B×O. + encoder_input_image: # B×W×H×3. + encoder_input_tokens: # B×I. + retr_texts: # B×K×L. + retr_images: # B×K×W×H×3. + train: whether using train mode. + decode: whether in decode mode. + fuse_retrieval: whether use input retrieval docs. + max_decode_length: maximum decode token length. + debug: whether use debug mode. + in_batch_neg: whether use in-batch contastive learning. + frozen_base: whether froze the whole encoder. + **args: other possible arguments. + + Returns: + output dictionary containing final and intermediate results. + """ + bsz = decoder_input_tokens.shape[0] + base_vals, base_masks, query_img_emb = self.get_base_encoded( + bsz=bsz, + image=encoder_input_image, + text_tokens=encoder_input_tokens, + train=train, + frozen_base=frozen_base, + ) # B×N×d, B×I×d + out_dict = { + 'query_img_emb': query_img_emb, + 'text_query': base_vals[0], + 'image_query': base_vals[1], + } + base_vals = jnp.concatenate(base_vals, axis=1) # B×(I+N)×d + if retr_texts is not None: + retr_keys, retr_vals, retr_masks, retr_img_emb, disentangle_reg = ( + self.encode_topk_knowledge( + bsz=bsz, + retr_images=retr_images, + retr_texts=retr_texts, + train=train, + random_drop_image=True, + ) + ) + base_query = self.query_head( + encoded_emb=base_vals, encoder_mask=base_masks, use_dropout=train + ) # B×(I+N)×d -> B×d + out_dict['disentangle_reg'] = disentangle_reg + out_dict['retr_img_emb'] = retr_img_emb + out_dict['base_query'] = base_query + out_dict['retr_keys'] = retr_keys + out_dict['retr_vals'] = retr_vals + + if fuse_retrieval and retr_texts is not None: + # fuse top-k retrieved knowledge (or no fusion) + if in_batch_neg and retr_vals.shape[1] == 1: + # retr_vals: B×1×M×d -> B×2×M×d, retr_keys: B×1×d -> B×2×M×d + retr_vals = jnp.concatenate( + (retr_vals, jnp.roll(retr_vals, shift=1, axis=0)), axis=1 + ) + retr_keys = jnp.concatenate( + (retr_keys, jnp.roll(retr_keys, shift=1, axis=0)), axis=1 + ) + retr_masks = jnp.concatenate( + (retr_masks, jnp.roll(retr_masks, shift=1, axis=0)), axis=1 + ) + + fused_emb, fused_mask, retr_scores, attn_weights_all_layers = ( + self.fuse_topk_knowledge( + base_query=base_query, + base_vals=base_vals, + base_masks=base_masks, + retr_keys=retr_keys, + retr_vals=retr_vals, + retr_masks=retr_masks, + train=train, + ) + ) # B×(I+N+M*K)×d + out_dict['retr_scores'] = retr_scores + else: + # only fuse input image and text + fused_emb, fused_mask, attn_weights_all_layers = self.fusion_encoder( + fused_input_embs=base_vals, fused_mask=base_masks, use_dropout=train + ) # B×(I+N)×d + # generate decoding results. + out_dict['attn_weights_all_layers'] = attn_weights_all_layers + out_dict['predicted_logits'] = self.out_decoder( + encoded=fused_emb, + decoder_input_tokens=decoder_input_tokens, + encoder_input_tokens=fused_mask, + decoder_target_tokens=decoder_target_tokens, + enable_dropout=train, + decode=decode, + max_decode_length=max_decode_length, + encoder_segment_ids=None, + decoder_segment_ids=None, + ) + return out_dict + + +class FIDSoftModel(base_model.BaseModel): + """FID model.""" + + def build_flax_model(self) -> nn.Module: + return FusionInDecoderSoftModule(self.config.model) + + def loss_function_dict( + self, output: constants.JTensorDict, batch: constants.JTensorDict + ) -> Dict[str, Any]: + """Returns negative loglikelihood (NLL) of the target sentence. + + Args: + output: Output of model in OrderedDict. + batch: Batch of data that has 'decoder_target' as ground-truth. + + Returns: + Total loss. + """ + gen_loss = losses.nll_loss( + targets=batch['decoder_target_tokens'], + pred=output['predicted_logits'], + target_masks=batch['decoder_target_tokens'] > 0, + label_smoothing=self.config.model.get('label_smoothing'), + ) + loss_dict = {'gen_loss': gen_loss} + if output['supervised_retrieval']: + retr_loss, (retr_acc, s0, s1) = losses.contrastive_loss( + query_emb=output['base_query'], + key_emb=output['retr_keys'], + temperature=self.config.model.get('temperature'), + ) + loss_dict['retr_loss'] = retr_loss + loss_dict['retr_acc'] = retr_acc + loss_dict['s0'] = s0 + loss_dict['s1'] = s1 + else: + loss_dict['retr_loss'] = -1 + loss_dict['retr_acc'] = -1 + loss_dict['s0'] = -1 + loss_dict['s1'] = -1 + return loss_dict + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(outputs, + batch)``` + """ + + return metrics.token_accuracy diff --git a/scenic/projects/knowledge_visual_language/models/knowledge_fid.py b/scenic/projects/knowledge_visual_language/models/knowledge_fid.py new file mode 100644 index 0000000000000000000000000000000000000000..98811cc07caed580ea68094ae13faf79107e074e --- /dev/null +++ b/scenic/projects/knowledge_visual_language/models/knowledge_fid.py @@ -0,0 +1,809 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Baseline for Image to Text Models. + +B = batch size +H = height +W = width +N = number of image tokens +I = Input sequence length +O = Ouput sequence length +d = hidden dims +C = number of vocabulary +K = number of candidate +L = sequence length of retrieved document +M = sequence length of compressed tokens +""" +import functools +from typing import Any, Dict, Mapping, Optional, Tuple, List + +from absl import logging +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.knowledge_visual_language.data import data_utils +from scenic.projects.knowledge_visual_language.models import constants +from scenic.projects.knowledge_visual_language.models import fusion_in_decoder_soft +from scenic.projects.knowledge_visual_language.models import layers +from scenic.projects.knowledge_visual_language.models import local_memory +from scenic.projects.knowledge_visual_language.models import losses +from scenic.projects.knowledge_visual_language.models import metrics +from t5x import decoding + +local_kb = local_memory.kb + + +class KnowledgeFIDModule(fusion_in_decoder_soft.FusionInDecoderSoftModule): + """FID model (https://arxiv.org/pdf/2007.01282.pdf) with a retrieval module over a knowledge memory.""" + + retr_k: int + data_k: int + axis_index_groups: Optional[List[List[int]]] = None + across_index_groups: Optional[List[List[int]]] = None + + def setup(self): + super().setup() + self.local_keys = self.variable( + 'memory', + 'keys', + functools.partial(jnp.zeros, dtype=jnp.bfloat16), + (local_kb.n_data_per_shard, self.key_dim), + ) + self.local_dataset_idxs = self.variable( + 'memory', + 'idxs', + functools.partial(jnp.zeros, dtype=jnp.int16), + (local_kb.n_data_per_shard * local_kb.n_local_device), + ) + self.dataset_gate = nn.Dense( + features=local_kb.n_kb_dataset, dtype=self.dtype, name='dataset_gate' + ) + + def _get_corpus_scores(self, corpus_scores, topk_ids): + corpus_ids = jnp.take(self.local_dataset_idxs.value, topk_ids, axis=0) + return layers.batch_index_select(corpus_scores, corpus_ids), corpus_ids + + def _dist_mips_local( + self, + query, + corpus_scores, + local_device_id, + recall_target=0.99, + exact=False, + ): + raise NotImplementedError( + 'jax.experimental.host_callback has been removed.' + ) + + def _dist_mips_across( + self, + query, + corpus_scores, + local_device_id, + recall_target=0.99, + exact=False, + ): + # must have n_host > retr_k + logging.info('mips global!!!') + logging.info(self.local_keys.value.shape) + logging.info(local_kb.n_data) + n_local_device = len(self.across_index_groups) + logging.info(n_local_device) + global_query = jax.lax.all_gather( + x=query, axis_name='batch', axis=0, tiled=True + ) + logging.info(global_query.shape) + # global_query: (per_bsz * n_local_device * n_hosts) * d + global_corpus_scores = jax.lax.all_gather( + x=corpus_scores, axis_name='batch', axis=0, tiled=True + ) + logging.info(global_corpus_scores.shape) + # global_corpus_scores: (per_bsz * n_local_device * n_hosts) * n_kb + + local_scores = jax.lax.dot(global_query, self.local_keys.value.transpose()) + local_k = local_kb.k + if exact: + local_topk_scores, local_topk_ids = jax.lax.top_k(local_scores, k=local_k) + else: + local_topk_scores, local_topk_ids = jax.lax.approx_max_k( + local_scores, + k=local_k, + recall_target=recall_target, + reduction_input_size_override=local_kb.n_data, + aggregate_to_topk=True, + ) + + local_topk_ids_offset = ( + local_topk_ids + local_device_id * local_kb.n_data_per_shard + ) + logging.info(local_topk_ids.shape) + # local_topk_ids: (per_bsz * n_local_device * n_hosts) * K + host_topk_scores = jax.lax.all_gather( + x=local_topk_scores, + axis_name='batch', + axis=1, + axis_index_groups=self.axis_index_groups, + tiled=True, + ) + logging.info(host_topk_scores.shape) + # host_topk_scores: (per_bsz * n_local_device * n_hosts) * (n_hosts * K) + host_topk_ids = jax.lax.all_gather( + x=local_topk_ids_offset, + axis_name='batch', + axis=1, + axis_index_groups=self.axis_index_groups, + tiled=True, + ) + # host_topk_ids: (per_bsz * n_local_device * n_hosts) * (n_hosts * K) + + host_corpus_scores, host_corpus_ids = self._get_corpus_scores( + global_corpus_scores, host_topk_ids + ) + # host_corpus_scores: (per_bsz * n_local_device * n_hosts) * (n_hosts * K) + host_topk_scores, host_rank_ids = jax.lax.top_k( + host_topk_scores * host_corpus_scores, k=local_k + ) + # host_topk_scores: (per_bsz * n_local_device * n_hosts) * K + host_topk_ids = layers.batch_index_select(host_topk_ids, host_rank_ids) + logging.info(host_topk_ids.shape) + # host_topk_ids: (per_bsz * n_local_device * n_hosts) * K + host_topk_ids = jnp.reshape(host_topk_ids, (-1, n_local_device, local_k)) + host_topk_ids = host_topk_ids[:, local_device_id] + logging.info(host_topk_ids.shape) + # host_topk_ids: (per_bsz * n_hosts) + host_topk_scores = jnp.reshape( + host_topk_scores, (-1, n_local_device, local_k) + ) + host_topk_scores = host_topk_scores[:, local_device_id] + logging.info('host_topk_scores') + logging.info(host_topk_scores.shape) + + ret_memory, ret_data = host_callback.call( + local_memory.retrieve_top_memory, + (host_topk_ids), + result_shape=local_kb.ret_top_specs, + ) + + global_topk_scores = jax.lax.all_to_all( + x=host_topk_scores, + axis_name='batch', + split_axis=0, + concat_axis=1, + axis_index_groups=self.across_index_groups, + tiled=True, + ) + logging.info('global_topk_scores') + logging.info(global_topk_scores.shape) + # global_topk_scores: per_bsz * (n_device * k) + global_topk_scores, global_rank_ids = jax.lax.top_k( + global_topk_scores, k=self.retr_k + ) + logging.info(global_topk_scores.shape) + # global_topk_scores: per_bsz * retr_k + global_data_ids = global_rank_ids[:, : int(self.data_k)] + global_memory_ids = global_rank_ids[:, int(self.data_k) :] + + def _gather_val(local_ret_vals, top_ids): + logging.info(local_ret_vals.shape) + global_ret_vals = jax.lax.all_to_all( + x=local_ret_vals, + axis_name='batch', + split_axis=0, + concat_axis=1, + axis_index_groups=self.across_index_groups, + tiled=True, + ) + logging.info(global_ret_vals.shape) + # global_ret_vals: per_bsz * (n_device * k) * dshape + global_ret_vals = layers.batch_index_select(global_ret_vals, top_ids) + logging.info(global_ret_vals.shape) + # global_ret_vals: per_bsz * retr_k * dshape + return global_ret_vals + + logging.info('_gather_val!!!') + + ret_memory = jax.tree_util.tree_map( + lambda local_val: _gather_val(local_val, global_memory_ids), ret_memory + ) + + ret_data = jax.tree_util.tree_map( + lambda local_val: _gather_val(local_val, global_data_ids), ret_data + ) + + ret_memory['masks'] = jnp.ones(ret_memory['values'].shape[:3]).astype(bool) + + for k in ret_memory: + logging.info(k) + logging.info(ret_memory[k].shape) + logging.info(ret_memory[k].dtype) + + host_corpus_ids = layers.batch_index_select(host_corpus_ids, host_rank_ids) + host_corpus_ids = jnp.reshape( + host_corpus_ids, (-1, n_local_device, local_k) + )[:, local_device_id] + logging.info('corpus_ids') + logging.info(host_corpus_ids.shape) + # host_corpus_ids: (per_bsz * n_local_device, k) + + global_corpus_ids = jax.lax.all_to_all( + x=host_corpus_ids, + axis_name='batch', + split_axis=0, + concat_axis=1, + axis_index_groups=self.across_index_groups, + tiled=True, + ) + logging.info(global_corpus_ids.shape) + # global_corpus_ids: (per_bsz, n_local_device) + global_corpus_ids = layers.batch_index_select( + global_corpus_ids, global_rank_ids + ) + logging.info(global_corpus_ids.shape) + # global_corpus_ids: (per_bsz, 10) + return ( + global_topk_scores, + ret_memory, + ret_data, + local_topk_ids, + global_rank_ids, + global_corpus_ids, + ) + + def t5_decode( + self, + encoded, + encoder_input_tokens: jnp.ndarray, # Only needed for masks. + decoder_input_tokens: jnp.ndarray, + decoder_target_tokens: jnp.ndarray, + enable_dropout: bool = True, + decode: bool = False, + max_decode_length: Optional[int] = None, + ): + """wraps _t5_decoder call (no packing) to enable autoregressive decoding.""" + # Without this wrapper flax.model.apply does not know self._t5_decoder yet + # when doing a single (autoregressive) decode step. + return self.out_decoder( + encoded=encoded, + encoder_input_tokens=encoder_input_tokens, + decoder_input_tokens=decoder_input_tokens, + decoder_target_tokens=decoder_target_tokens, + enable_dropout=enable_dropout, + decode=decode, + max_decode_length=max_decode_length, + ) + + def __call__( + self, + decoder_input_tokens, + decoder_target_tokens, + encoder_input_image=None, + encoder_input_tokens=None, + retr_texts=None, + retr_images=None, + device_id=0, + train=False, + decode=False, + max_decode_length=None, + use_memory=False, + use_psudo_retr=False, + retrieve_local=False, + no_memory=False, + debug=False, + frozen_base=True, + only_encode=False, + **args + ): + """Conduct online retrieval and retrieval-augmented generataion. + + Args: + decoder_input_tokens: # B×O. + decoder_target_tokens: # B×O. + encoder_input_image: # B×W×H×3. + encoder_input_tokens: # B×I. + retr_texts: # B×K×L. + retr_images: # B×K×W×H×3. + device_id: index of TPU device. + train: whether using train mode. + decode: whether in decode mode. + max_decode_length: maximum decode token length. + use_memory: whether use on-device memory. + use_psudo_retr: whether to use psudo retrieved groundtruth for guidance. + retrieve_local: whether only retrieve in local host or across hosts. + no_memory: whether not using any retrieval. + debug: whether use debug mode. + frozen_base: whether froze the whole encoder. + only_encode: skip decoding and only return encoded tokens. + **args: other possible arguments. + + Returns: + output dictionary containing final and intermediate results. + """ + bsz = decoder_input_tokens.shape[0] + + out_dict = {} + base_vals, base_masks, base_query = self.encode_query( + encoder_input_image=encoder_input_image, + encoder_input_tokens=encoder_input_tokens, + frozen_base=frozen_base, + ) + base_query = self.dropout(base_query, deterministic=not train) + base_vals = self.dropout(base_vals, deterministic=not train) + if debug: + out_dict['base_query'] = base_query + out_dict['base_masks'] = base_masks + corpus_scores = jax.nn.softmax(self.dataset_gate(base_query), axis=-1) + out_dict['corpus_scores'] = corpus_scores + if no_memory: + fused_emb, fused_mask, attn_weights_all_layers = self.fusion_encoder( + fused_input_embs=base_vals, fused_mask=base_masks, use_dropout=train + ) # B×(I+N)×d + else: + if use_memory: + detached_query = jax.lax.stop_gradient(base_query) + if retrieve_local: + ( + topk_scores, + ret_memory, + ret_data, + local_topk_ids, + global_topk_ids, + global_corpus_ids, + ) = self._dist_mips_local( + query=detached_query, + corpus_scores=corpus_scores, + local_device_id=device_id, + ) + else: + ( + topk_scores, + ret_memory, + ret_data, + local_topk_ids, + global_topk_ids, + global_corpus_ids, + ) = self._dist_mips_across( + query=detached_query, + corpus_scores=corpus_scores, + local_device_id=device_id, + ) + out_dict['topk_scores'] = topk_scores + + # encode the retrieved data + retr_keys, retr_vals, retr_masks, _, disentangle_reg = ( + self.encode_topk_knowledge( + bsz=bsz, + retr_images=ret_data['image'], + retr_texts=ret_data['text_tokens'], + train=train, + random_drop_image=False, + frozen_base=frozen_base, + ) + ) + + global_corpus_scores = layers.batch_index_select( + corpus_scores, global_corpus_ids + ) + + if debug: + out_dict['detached_query'] = detached_query + out_dict['global_corpus_scores'] = global_corpus_scores + out_dict['global_corpus_ids'] = global_corpus_ids + out_dict['local_topk_ids'] = local_topk_ids + out_dict['global_topk_ids'] = global_topk_ids + out_dict['retr_keys'] = retr_keys + out_dict['retr_masks'] = retr_masks + out_dict['base_vals'] = base_vals + out_dict['retr_vals'] = retr_vals + + out_dict['retr_data'] = ret_data + out_dict['base_norm'] = layers.l2_norm(base_vals).mean() + out_dict['data_norm'] = layers.l2_norm(retr_vals).mean() + out_dict['vals_norm'] = layers.l2_norm(ret_memory['values'][0]).mean() + out_dict['gap'] = jnp.abs( + 1 - jnp.divide(out_dict['data_norm'], out_dict['base_norm']) + ) + + if train and retr_texts is not None and use_psudo_retr: + logging.info('global keys!!!') + ground_truth_keys, ground_truth_vals, _, _, _ = self.encode_knowledge( + retr_texts=retr_texts, + retr_images=retr_images, + bsz=bsz, + train=train, + random_drop_image=True, + frozen_base=frozen_base, + ) + global_keys = jnp.concatenate( + jax.lax.all_gather( + x=ground_truth_keys, axis_name='batch', axis=0 + ), + axis=0, + ) + logging.info(global_keys.shape) + inbatch_sim = jax.lax.dot(base_query, global_keys.transpose()) + out_dict['inbatch_sim'] = inbatch_sim + if debug: + out_dict['global_keys'] = global_keys + out_dict['ground_truth_keys'] = ground_truth_keys + out_dict['ground_truth_vals'] = ground_truth_vals + # replace retrieved knowledge as ground-truth ones for stablization. + k = retr_keys.shape[1] + ground_truth_keys = jnp.repeat( + jnp.expand_dims(ground_truth_keys, axis=1), axis=1, repeats=k + ) + ground_truth_vals = jnp.repeat( + jnp.expand_dims(ground_truth_vals, axis=1), axis=1, repeats=k + ) + replace_mask = jax.random.bernoulli( + self.make_rng('dropout'), p=0.02, shape=(bsz, 1, 1) + ) + keys_mask = jnp.broadcast_to(replace_mask, retr_keys.shape) + retr_keys = jax.lax.select(keys_mask, ground_truth_keys, retr_keys) + vals_mask = jnp.broadcast_to( + jnp.expand_dims(replace_mask, axis=-1), retr_vals.shape + ) + retr_vals = jax.lax.select(vals_mask, ground_truth_vals, retr_vals) + + logging.info('Concat memory and data!!!') + logging.info(retr_keys.shape) + logging.info(ret_memory['keys'].shape) + logging.info(global_corpus_scores.shape) + # concat retrieved memory (90%) with re-encoded ones (10%) + + retr_keys = jnp.concatenate([retr_keys, ret_memory['keys']], axis=1) + retr_keys = retr_keys * jnp.expand_dims(global_corpus_scores, axis=-1) + retr_vals = jnp.concatenate([retr_vals, ret_memory['values']], axis=1) + retr_masks = jnp.concatenate([retr_masks, ret_memory['masks']], axis=1) + elif retr_texts is not None: + retr_keys, retr_vals, retr_masks, _, disentangle_reg = ( + self.encode_topk_knowledge( + bsz=bsz, + retr_images=jnp.expand_dims(retr_images, axis=1), + retr_texts=jnp.expand_dims(retr_texts, axis=1), + train=train, + random_drop_image=False, + ) + ) + else: + retr_keys, retr_vals, retr_masks, _, disentangle_reg = ( + self.encode_topk_knowledge( + bsz=bsz, + retr_images=jnp.expand_dims(encoder_input_image, axis=1), + retr_texts=jnp.expand_dims(encoder_input_tokens, axis=1), + train=train, + random_drop_image=False, + ) + ) + + fused_emb, fused_mask, retr_scores, attn_weights_all_layers = ( + self.fuse_topk_knowledge( + base_query=base_query, + base_vals=base_vals, + base_masks=base_masks, + retr_keys=retr_keys, + retr_vals=retr_vals, + retr_masks=retr_masks, + train=train, + ) + ) # B×(I+N+M*K)×d + out_dict['disentangle_reg'] = jnp.mean(disentangle_reg) + out_dict['retr_scores'] = retr_scores + + out_dict['fused_emb'] = fused_emb + out_dict['fused_mask'] = fused_mask + logging.info('fused_emb.shape') + logging.info(fused_emb.shape) + out_dict['attn_weights_all_layers'] = attn_weights_all_layers + + if not only_encode: + # decode: generate decoding results. + out_dict['predicted_logits'] = self.t5_decode( + encoded=fused_emb, + encoder_input_tokens=fused_mask, + decoder_input_tokens=decoder_input_tokens, + decoder_target_tokens=decoder_target_tokens, + enable_dropout=train, + decode=decode, + max_decode_length=max_decode_length, + ) + return out_dict + + +class KnowledgeFIDModel(base_model.BaseModel): + """FID model with a retrieval module over a knowledge memory.""" + + def __init__( + self, + config: Optional[ml_collections.ConfigDict], + dataset_meta_data: Dict[str, Any], + kb_datasets: Dict[str, dataset_utils.Dataset], + ) -> None: + self.config = config + self.dataset_meta_data = dataset_meta_data + self.retr_k = self.config.model.retr_k + self.retr_data_ratio = self.config.model.retr_data_ratio + n_device = jax.device_count() + self.data_k = int(np.ceil(self.retr_k * self.retr_data_ratio)) + device_per_axis = jax.local_device_count() + if n_device < device_per_axis: + self.axis_index_groups = None + self.across_index_groups = None + else: + self.axis_index_groups = np.arange(n_device).reshape( + [n_device // device_per_axis, device_per_axis] + ) + self.across_index_groups = self.axis_index_groups.T.tolist() + self.axis_index_groups = self.axis_index_groups.tolist() + logging.info('axis_index_groups') + logging.info(self.axis_index_groups) + logging.info(self.across_index_groups) + local_kb.initialize(kb_datasets=kb_datasets) + self.flax_model = self.build_flax_model() + + def build_flax_model(self) -> nn.Module: + return KnowledgeFIDModule( + self.config.model, + retr_k=self.retr_k, + data_k=self.data_k, + axis_index_groups=self.axis_index_groups, + across_index_groups=self.across_index_groups, + ) + + def loss_function_dict( + self, output: constants.JTensorDict, batch: constants.JTensorDict + ) -> Dict[str, Any]: + """Returns negative loglikelihood (NLL) of the target sentence. + + Args: + output: Output of model in OrderedDict. + batch: Batch of data that has 'decoder_target' as ground-truth. + + Returns: + Total loss. + """ + model_config = self.config.model + gen_loss = losses.nll_loss( + targets=batch['decoder_target_tokens'], + pred=output['predicted_logits'], + target_masks=batch['decoder_target_tokens'] > 0, + label_smoothing=self.config.model.get('label_smoothing'), + ) + loss_dict = {'gen_loss': gen_loss} + + if 'inbatch_sim' in output: + score_matrix = output['inbatch_sim'] + bsz = score_matrix.shape[0] + labels = jnp.arange(bsz) + bsz * jax.lax.axis_index(axis_name='batch') + contra_loss = losses.nll_loss( + pred=score_matrix / self.config.model.get('temperature'), + targets=labels, + ) + loss_dict['contra_loss'] = contra_loss + r = model_config.retrieval_ratio + loss = gen_loss * (1 - r) + contra_loss * r + accs = jnp.equal(jnp.argmax(score_matrix, axis=1), labels) + loss_dict['contra_accs'] = accs + else: + loss_dict['contra_loss'] = 0.0 + loss_dict['contra_accs'] = 0.0 + loss = gen_loss + + if 'disentangle' in model_config and 'disentangle_reg' in output: + loss += output['disentangle_reg'] * 1e-2 + if 'gap' in model_config and 'gap' in output: + loss += output['gap'] * 1e-4 + loss_dict['total_loss'] = loss + return loss_dict + + def get_metrics_fn(self, split: Optional[str] = None) -> Any: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(outputs, + batch)``` + """ + return metrics.token_accuracy + + def get_vqa_metrics( + self, + logits: jnp.ndarray, + batch: constants.JTensorDict, + split: Optional[str] = None, + ) -> dict[str, float]: + """Returns the VQA Accuracy for the validation / test set. + + Args: + logits: Output of model in shape [B, L, C]. + batch: Batch of data that has 'decoder_target' as ground-truth. + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: VQA accuracy``` + """ + + return metrics.vqa_accuracy(logits, batch) + + def single_decode_step( + self, + decoding_state: decoding.DecodingState, + variables: constants.PyTree, + encoded_inputs: jnp.ndarray, + input_masks: jnp.ndarray, + max_decode_length: int, + ) -> Tuple[jnp.ndarray, Mapping[str, jnp.ndarray]]: + """Single autoregressive decode step with caching.""" + flat_ids = decoding_state.cur_token + flat_cache = decoding_state.cache + # flat_ids: [batch * beam, seq_len=1] + # cache is expanded inside beam_search to become flat_cache + # flat_cache: [batch * beam, num_heads, depth_per_head, max_decode_len] + # flat_logits: [batch * beam, seq_len=1, vocab] + flat_logits, new_vars = self.flax_model.apply( + {'cache': flat_cache, **variables}, + encoded=encoded_inputs, + encoder_input_tokens=input_masks, + decoder_input_tokens=flat_ids, + decoder_target_tokens=flat_ids, + decode=True, + enable_dropout=False, + max_decode_length=max_decode_length, + mutable=['cache'], + method=self.flax_model.t5_decode, + ) + # Remove sequence length dimension since it's always 1 during decoding. + flat_logits = jnp.squeeze(flat_logits, axis=1) + new_flat_cache = new_vars['cache'] + return flat_logits, new_flat_cache + + def apply_with_autoregressive_decoding( + self, + variables: constants.PyTree, + decoder_input_tokens: jnp.ndarray, + decoder_target_tokens: jnp.ndarray, + encoder_input_image: Optional[jnp.ndarray] = None, + encoder_input_tokens: Optional[jnp.ndarray] = None, + num_decodes: int = 1, + debug: bool = False, + beam_search: bool = True, + decoder_params: Optional[dict[str, Any]] = None, + return_all_decodes: bool = False, + use_memory=False, + retrieve_local=False, + **args + ): + """Apply inference with autoregressive decoding. + + Apply t5x autoregressive decoding with cache using either their + beam_search or temperature_sample decoding technique. + + Args: + variables: variables of the models. + decoder_input_tokens: # B×O. + decoder_target_tokens: # B×O. + encoder_input_image: # B×W×H×3. + encoder_input_tokens: # B×I. + num_decodes: number of outputs generated per input for the decode search. + debug: Whether in debug mode or not. + beam_search: If True, do beam search. If False, do temperature sampling. + decoder_params: Additional decoding parameters. These provide additional + parameters to beam_search or temperature_sample (see decoder module). + return_all_decodes: If True, return all decodes. Otherwise only return the + top scored decoding. + use_memory: whether use on-device memory. + retrieve_local: whether only retrieve in local host or across hosts. + **args: other possible arguments. + + Returns: + logits array from the final decoder. + """ + # Prepare zeroed-out autoregressive cache. + _, model_state_with_cache = self.flax_model.apply( + variables=variables, + encoder_input_image=encoder_input_image, + encoder_input_tokens=encoder_input_tokens, + decoder_input_tokens=decoder_input_tokens, + decoder_target_tokens=decoder_target_tokens, + train=False, + only_encode=False, + decode=True, + mutable=['cache'], + debug=debug, + use_memory=use_memory, + retrieve_local=retrieve_local, + ) + + # Call model to get the features consumed by the decoder. Skip the + # the decoding part itself. + out_dict = self.flax_model.apply( + variables=variables, + encoder_input_image=encoder_input_image, + encoder_input_tokens=encoder_input_tokens, + decoder_input_tokens=decoder_input_tokens, + decoder_target_tokens=decoder_target_tokens, + train=False, + only_encode=True, + debug=debug, + use_memory=use_memory, + retrieve_local=retrieve_local, + ) + retr_top_image = out_dict['retr_data']['image'][:, 0] + + # Prepare transformer fast-decoder call for beam search: for beam search, we + # need to set up our decoder model to handle a batch size equal to + # batch_size * num_decodes, where each batch item's data is expanded + # in-place rather than tiled. + # i.e. if we denote each batch element subtensor as el[n]: + # [el0, el1, el2] --> beamsize=2 --> [el0,el0,el1,el1,el2,el2] + # [batch * num_decodes, input_len, emb_dim] + beam_expand_fn = functools.partial( + decoding.flat_batch_beam_expand, beam_size=num_decodes + ) + encoded_inputs = jax.tree_util.tree_map( + beam_expand_fn, out_dict['fused_emb'] + ) + encoded_masks = jax.tree_util.tree_map( + beam_expand_fn, out_dict['fused_mask'] + ) + bsz = decoder_input_tokens.shape[0] + max_decode_length = decoder_input_tokens.shape[-1] + # Define the token2logit function for a single decoding step. + tokens_ids_to_logits = functools.partial( + self.single_decode_step, + variables=variables, + encoded_inputs=encoded_inputs, + input_masks=encoded_masks, + max_decode_length=decoder_input_tokens.shape[-1], + ) + + if decoder_params is None: + decoder_params = {} + # For beam search, `decoder_prompt_inputs` is only used to obtain batch size + # and max decode length information. For temperature sampling, + # `decod_prompt_inputs` will be filled with the sampled ids. + decoder_prompt_inputs = jnp.zeros([bsz, max_decode_length - 1]) + bos_inputs = jnp.ones([bsz, 1]) * data_utils.BOS_ID + decoder_prompt_inputs = jnp.concatenate( + (bos_inputs, decoder_prompt_inputs), axis=-1, dtype=jnp.int32 + ) + if beam_search: + decodes, scores = decoding.beam_search( + inputs=decoder_prompt_inputs, + cache=model_state_with_cache['cache'], + tokens_to_logits=tokens_ids_to_logits, + eos_id=data_utils.EOS_ID, + num_decodes=num_decodes, + cache_offset=0, + **decoder_params + ) + else: + decodes, scores = decoding.temperature_sample( + inputs=decoder_prompt_inputs, + cache=model_state_with_cache['cache'], + tokens_to_logits=tokens_ids_to_logits, + eos_id=data_utils.EOS_ID, + num_decodes=num_decodes, + cache_offset=0, + initial_index=jnp.zeros([bsz], dtype=jnp.int32), + **decoder_params + ) + if return_all_decodes: + return decodes, scores, retr_top_image + else: + return decodes[:, -1, :], scores[:, -1], retr_top_image diff --git a/scenic/projects/knowledge_visual_language/models/layers.py b/scenic/projects/knowledge_visual_language/models/layers.py new file mode 100644 index 0000000000000000000000000000000000000000..8d4db104b4df721c22c7dade8a47e9e6e3cc936f --- /dev/null +++ b/scenic/projects/knowledge_visual_language/models/layers.py @@ -0,0 +1,841 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Layers and Modules for Knowledge-FID.""" + +import functools +from typing import Optional, Sequence + +from flax import linen as nn +import jax +import jax.numpy as jnp +from scenic.projects.knowledge_visual_language.models import constants +from t5x.examples.t5 import layers as t5_layers +from t5x.examples.t5 import network as t5_network + + +@jax.vmap +def batch_index_select(data, idx): + return jnp.take(data, idx, axis=0) + + +def _mask_select(data, mask): + return jax.lax.select( + mask > 0, data, jnp.full(data.shape, 0).astype(data.dtype) + ) + + +def l2_norm(x): + """Compute the l2 norm of a vector.""" + return jnp.sqrt((x * x).sum(axis=-1)) + + +def l2_normalize(x, axis=-1, eps=1e-10): + """Normalizes along dimension `axis` using an L2 norm. + + This specialized function exists for numerical stability reasons. + Args: + x: An input ndarray. + axis: Dimension along which to normalize, e.g. `1` to separately normalize + vectors in a batch. Passing `None` views `t` as a flattened vector when + calculating the norm (equivalent to Frobenius norm). + eps: Epsilon to avoid dividing by zero. + + Returns: + An array of the same shape as 'x' L2-normalized along 'axis'. + """ + denorm = (x * x).sum(axis=axis, keepdims=True) + eps + return (x * jax.lax.rsqrt(denorm)).astype(x.dtype) + + +class AffineTransform(nn.Module): + """Do affine Transform for modulating attention score.""" + + @nn.compact + def __call__(self, x): + scale = self.param('scale', nn.initializers.ones, (1,), jnp.float32) + bias = self.param('bias', nn.initializers.zeros, (1,), jnp.float32) + return x * nn.sigmoid(scale) * 5 + bias + + +class TransformerHead(nn.Module): + """A stack of encoder layers.""" + + num_head_layers: int + key_dim: int + vocab_size: int + emb_dim: int + num_heads: int + num_encoder_layers: int + num_decoder_layers: int + head_dim: int + mlp_dim: int + dropout_rate: float + out_head: nn.Module + dtype: str = 'bfloat16' + mlp_activations: Sequence[str] = ('gelu', 'linear') + logits_via_embedding: bool = False + + def setup(self): + self.t5_config = t5_network.T5Config( + vocab_size=self.vocab_size, + emb_dim=self.emb_dim, + num_heads=self.num_heads, + num_encoder_layers=self.num_encoder_layers, + num_decoder_layers=self.num_decoder_layers, + head_dim=self.head_dim, + mlp_dim=self.mlp_dim, + dropout_rate=self.dropout_rate, + dtype=self.dtype, + mlp_activations=self.mlp_activations, + logits_via_embedding=self.logits_via_embedding, + ) + + @nn.compact + def __call__(self, encoded_emb, encoder_mask=None, use_dropout=True): + """transform the encoded representation.""" + cfg = self.t5_config + assert encoded_emb.ndim == 3 # [batch, length, emb_dim] + x = encoded_emb + if encoder_mask is not None: + encoder_mask = t5_layers.make_attention_mask( + encoder_mask, encoder_mask, dtype=cfg.dtype + ) + + rel_emb = t5_layers.RelativePositionBiases( + num_buckets=32, + max_distance=128, + num_heads=self.num_heads, + dtype=self.dtype, + embedding_init=nn.initializers.variance_scaling( + 1.0, 'fan_avg', 'uniform' + ), + ) + for _ in range( + cfg.num_encoder_layers - self.num_head_layers, cfg.num_encoder_layers + ): + # [batch, length, emb_dim] -> [batch, length, emb_dim] + x = t5_network.EncoderLayer(config=cfg, relative_embedding=rel_emb)( + x, encoder_mask, deterministic=not use_dropout + ) + x = t5_layers.LayerNorm(dtype=cfg.dtype)(x[:, 0, :]) + return l2_normalize(self.out_head(x), axis=-1) + + +class LowerT5Encoder(nn.Module): + """T5 encoder as a separate model which fuse multi-modal input. + + This module contains the encoder part of a pretrained T5. It is useful when + adopting the pretrained T5 encoder as a part of a larger network. Note that + the embedding layer should be created outside the module and provided as a + parameter `shared_embedding` to share it in other parts of the network (e.g., + text encoder). If `shared_embedding` is not provided, the embedding layer is + created within the module. + + Attributes: + vocab_size: Size of the vocabulary. + emb_dim: Size of the embeddings. + num_heads: Number of attention heads. + num_encoder_layers: Number of encoder layers. + num_decoder_layers: Number of decoder layers. + head_dim: Size of the embeddings in each head. + mlp_dim: Size of the MLP output embeddings. + dropout_rate: Dropout rate. + dtype: Data type. + mlp_activations: Sequence of activations in MLP. + logits_via_embedding: Use the embedding weights for computing logits. + shared_embedding: Optional. Embedding layer that is shared outside this + module. If not given, a non-shared embedding layer will be created within + the module. + """ + + vocab_size: int + emb_dim: int + num_heads: int + num_encoder_layers: int + num_decoder_layers: int + num_fusion_layers: int + head_dim: int + mlp_dim: int + dropout_rate: float + dtype: str = 'bfloat16' + mlp_activations: Sequence[str] = ('gelu', 'linear') + logits_via_embedding: bool = False + shared_embedding: Optional[nn.Module] = None + + def setup(self): + self.t5_config = t5_network.T5Config( + vocab_size=self.vocab_size, + emb_dim=self.emb_dim, + num_heads=self.num_heads, + num_encoder_layers=self.num_encoder_layers, + num_decoder_layers=self.num_decoder_layers, + head_dim=self.head_dim, + mlp_dim=self.mlp_dim, + dropout_rate=self.dropout_rate, + dtype=self.dtype, + mlp_activations=self.mlp_activations, + logits_via_embedding=self.logits_via_embedding, + ) + if self.shared_embedding is None: + self.shared_embedding = t5_layers.Embed( + num_embeddings=self.vocab_size, + features=self.emb_dim, + dtype=self.dtype, + attend_dtype=jnp.float32, # For logit training stability. + embedding_init=nn.initializers.normal(stddev=1.0), + one_hot=True, + ) + + @nn.compact + def __call__( + self, + encoder_input_tokens, + encoder_segment_ids=None, + use_dropout=True, + frozen_base=True, + ): + """encode the text sentence only. + + Args: + encoder_input_tokens: input text tokens + encoder_segment_ids: segmend ID in packing mode + use_dropout: whether to use dropout during Training + frozen_base: whether froze the text encoder + + Returns: + Sequence of token embedding with or without fusion + """ + cfg = self.t5_config + assert encoder_input_tokens.ndim == 2 # (batch, len) + # Make padding attention mask. + encoder_mask = encoder_input_tokens > 0 + mask_matrix = t5_layers.make_attention_mask( + encoder_input_tokens > 0, encoder_input_tokens > 0, dtype=cfg.dtype + ) + # Add segmentation block-diagonal attention mask if using segmented data. + if encoder_segment_ids is not None: + mask_matrix = t5_layers.combine_masks( + mask_matrix, + t5_layers.make_attention_mask( + encoder_segment_ids, + encoder_segment_ids, + jnp.equal, + dtype=cfg.dtype, + ), + ) + + rel_emb = t5_layers.RelativePositionBiases( + num_buckets=32, + max_distance=128, + num_heads=self.t5_config.num_heads, + dtype=self.t5_config.dtype, + embedding_init=nn.initializers.variance_scaling( + 1.0, 'fan_avg', 'uniform' + ), + ) + + # [batch, length] -> [batch, length, emb_dim] + x = self.shared_embedding(encoder_input_tokens.astype('int32')) + x = nn.Dropout(rate=cfg.dropout_rate, broadcast_dims=(-2,))( + x, deterministic=not use_dropout + ) + x = x.astype(cfg.dtype) + n_layer = cfg.num_encoder_layers - self.num_fusion_layers + frozen_layer_id = int(n_layer * 0.8) - 1 + for lyr in range(n_layer): + # [batch, length, emb_dim] -> [batch, length, emb_dim] + x = t5_network.EncoderLayer(config=cfg, relative_embedding=rel_emb)( + x, mask_matrix, deterministic=not use_dropout + ) + if frozen_base and lyr == frozen_layer_id: + x = jax.lax.stop_gradient(x) + return x, encoder_mask + + +class FusedT5Encoder(nn.Module): + """T5 encoder as a separate model which fuse multi-modal input. + + This module contains the encoder part of a pretrained T5. It is useful when + adopting the pretrained T5 encoder as a part of a larger network. Note that + the embedding layer should be created outside the module and provided as a + parameter `shared_embedding` to share it in other parts of the network (e.g., + text encoder). If `shared_embedding` is not provided, the embedding layer is + created within the module. + + Attributes: + vocab_size: Size of the vocabulary. + emb_dim: Size of the embeddings. + num_heads: Number of attention heads. + num_encoder_layers: Number of encoder layers. + num_decoder_layers: Number of decoder layers. + head_dim: Size of the embeddings in each head. + mlp_dim: Size of the MLP output embeddings. + dropout_rate: Dropout rate. + dtype: Data type. + mlp_activations: Sequence of activations in MLP. + logits_via_embedding: Use the embedding weights for computing logits. + """ + + vocab_size: int + emb_dim: int + num_heads: int + num_encoder_layers: int + num_decoder_layers: int + num_fusion_layers: int + head_dim: int + mlp_dim: int + dropout_rate: float + dtype: str = 'bfloat16' + mlp_activations: Sequence[str] = ('gelu', 'linear') + logits_via_embedding: bool = False + + def setup(self): + self.t5_config = t5_network.T5Config( + vocab_size=self.vocab_size, + emb_dim=self.emb_dim, + num_heads=self.num_heads, + num_encoder_layers=self.num_encoder_layers, + num_decoder_layers=self.num_decoder_layers, + head_dim=self.head_dim, + mlp_dim=self.mlp_dim, + dropout_rate=self.dropout_rate, + dtype=self.dtype, + mlp_activations=self.mlp_activations, + logits_via_embedding=self.logits_via_embedding, + ) + + @nn.compact + def __call__( + self, + fused_input_embs, + encoder_input_embs=None, + encoder_mask=None, + fused_mask=None, + att_mask=None, + use_dropout=True, + output=False, + ): + """Function to fuse text and imaget embedding. + + encode both the encoded text embedding (encoder_input_embs) and + encoded image embedding (fused_input_embs) together using + self-attentive Transformer. + + Args: + fused_input_embs: pre-encoded embeddings of other modalities + encoder_input_embs: encoded text embedding sequence + encoder_mask: mask for encoding part + fused_mask: mask for fusion part + att_mask: pre-computed attention product to each layer's output + use_dropout: whether to use dropout. + output: whether it's output layer. + + Returns: + Sequence of token embedding after fusion + """ + cfg = self.t5_config + if encoder_input_embs is not None: + x = jnp.concatenate([encoder_input_embs, fused_input_embs], axis=1) + else: + x = fused_input_embs + rel_emb = t5_layers.RelativePositionBiases( + num_buckets=32, + max_distance=128, + num_heads=self.t5_config.num_heads, + dtype=self.t5_config.dtype, + embedding_init=nn.initializers.variance_scaling( + 1.0, 'fan_avg', 'uniform' + ), + ) + + if encoder_mask is not None: + if fused_mask is None: + pad_width = fused_input_embs.shape[1] + fused_mask = jnp.pad( + array=encoder_mask, + pad_width=((0, 0), (0, pad_width)), + mode='constant', + constant_values=1.0, + ) + else: + fused_mask = jnp.concatenate([encoder_mask, fused_mask], axis=1) + + mask_matrix = t5_layers.make_attention_mask( + fused_mask, fused_mask, dtype=cfg.dtype + ) + attn_weights_all_layers = [] + for _ in range( + cfg.num_encoder_layers - self.num_fusion_layers, cfg.num_encoder_layers + ): + # [batch, length, emb_dim] -> [batch, length, emb_dim] + x, attn_weights = FusionEncoderLayer( + config=cfg, relative_embedding=rel_emb + )( + x, + encoder_mask=mask_matrix, + att_mask=att_mask, + deterministic=not use_dropout, + ) + attn_weights_all_layers += [attn_weights] + if output: + x = t5_layers.LayerNorm(dtype=cfg.dtype)(x) + if att_mask is not None: + x = x * att_mask + x = nn.Dropout(rate=cfg.dropout_rate)(x, deterministic=not use_dropout) + return x, fused_mask, attn_weights_all_layers + + +class FusionEncoderLayer(nn.Module): + """Transformer encoder layer.""" + + config: t5_network.T5Config + relative_embedding: nn.Module + + @nn.compact + def __call__( + self, inputs, att_mask=None, encoder_mask=None, deterministic=False + ): + cfg = self.config + + # Relative position embedding as attention biases. + encoder_bias = self.relative_embedding( + inputs.shape[-2], inputs.shape[-2], True + ) + + # Attention block. + assert inputs.ndim == 3 + x = t5_layers.LayerNorm(dtype=cfg.dtype)(inputs) + if att_mask is not None: + x = x * att_mask + # [batch, length, emb_dim] -> [batch, length, emb_dim] + x, attn_weights = MultiHeadDotProductAttention( + num_heads=cfg.num_heads, + dtype=cfg.dtype, + head_dim=cfg.head_dim, + dropout_rate=cfg.dropout_rate, + float32_logits=cfg.float32_attention_logits, + )(x, x, encoder_mask, encoder_bias, deterministic=deterministic) + x = nn.Dropout(rate=cfg.dropout_rate, broadcast_dims=(-2,))( + x, deterministic=deterministic + ) + x = x + inputs + + # MLP block. + y = t5_layers.LayerNorm(dtype=cfg.dtype)(x) + # [batch, length, emb_dim] -> [batch, length, emb_dim] + y = t5_layers.MlpBlock( + intermediate_dim=cfg.mlp_dim, + activations=cfg.mlp_activations, + intermediate_dropout_rate=cfg.dropout_rate, + dtype=cfg.dtype, + )(y, deterministic=deterministic) + y = nn.Dropout(rate=cfg.dropout_rate, broadcast_dims=(-2,))( + y, deterministic=deterministic + ) + y = y + x + + return y, attn_weights + + +class PerceiverEncoder(nn.Module): + """Reimplementation of Perceiver. + + Perceiver: General Perception with Iterative Attention + (https://arxiv.org/abs/2103.03206) + """ + + perceiver_output_dim: int + vocab_size: int + emb_dim: int + num_heads: int + num_encoder_layers: int + num_decoder_layers: int + num_fusion_layers: int + head_dim: int + mlp_dim: int + dropout_rate: float + dtype: str = 'bfloat16' + mlp_activations: Sequence[str] = ('gelu', 'linear') + logits_via_embedding: bool = False + + def setup(self): + self.t5_config = t5_network.T5Config( + vocab_size=self.vocab_size, + emb_dim=self.emb_dim, + num_heads=self.num_heads, + num_encoder_layers=self.num_encoder_layers, + num_decoder_layers=self.num_decoder_layers, + head_dim=self.head_dim, + mlp_dim=self.mlp_dim, + dropout_rate=self.dropout_rate, + dtype=self.dtype, + mlp_activations=self.mlp_activations, + logits_via_embedding=self.logits_via_embedding, + ) + + self.perceive_embedding = self.param( + 'perceive_embedding', + nn.initializers.normal(stddev=1.0), + (1, self.perceiver_output_dim, self.emb_dim), + jnp.float32, + ) + v = jnp.arange(self.perceiver_output_dim) + self.batch_triangle_select = jax.vmap( + functools.partial(_mask_select, mask=v < v.reshape([-1, 1])) + ) + + def linear_disentangle(self, y): + mean = y.mean(axis=-2, keepdims=True) + norm_y = l2_normalize(y - mean) + pairwise_mat = jnp.square(jnp.einsum('bqd,btd->bqt', norm_y, norm_y)) + masked_mat = self.batch_triangle_select(pairwise_mat) + return jnp.mean(masked_mat) + + @nn.compact + def __call__(self, encoded, encoded_mask, use_dropout=False): + cfg = self.t5_config + rel_emb = t5_layers.RelativePositionBiases( + num_buckets=32, + max_distance=128, + num_heads=cfg.num_heads, + dtype=cfg.dtype, + embedding_init=nn.initializers.variance_scaling( + 1.0, 'fan_avg', 'uniform' + ), + ) + + # [batch, length] -> [batch, length, emb_dim] + encoded = t5_layers.LayerNorm(dtype=cfg.dtype)(encoded) + bsz = encoded.shape[0] + y = jnp.asarray(self.perceive_embedding, dtype=cfg.dtype) + y = jnp.repeat(y, bsz, axis=0) + y = nn.Dropout(rate=cfg.dropout_rate, broadcast_dims=(-2,))( + y, deterministic=not use_dropout + ) + y = y.astype(cfg.dtype) + + mask = jnp.ones([bsz, self.perceiver_output_dim]).astype(bool) + encoder_decoder_mask = t5_layers.make_attention_mask( + mask, encoded_mask, dtype=self.dtype + ) + + for _ in range(self.num_fusion_layers): + # [batch, length, emb_dim] -> [batch, length, emb_dim] + y = t5_network.DecoderLayer(config=cfg, relative_embedding=rel_emb)( + y, + encoded, + deterministic=not use_dropout, + encoder_decoder_mask=encoder_decoder_mask, + decode=False, + ) + + return y * 4, mask, self.linear_disentangle(y) + + +def dot_product_attention( + query: constants.JTensor, + key: constants.JTensor, + value: constants.JTensor, + bias: Optional[constants.JTensor] = None, + dropout_rng: Optional[constants.JTensor] = None, + dropout_rate: float = 0.0, + deterministic: bool = False, + dtype: constants.DType = jnp.float32, + float32_logits: bool = False, +): + """Computes dot-product attention given query, key, and value. + + This is the core function for applying attention based on + https://arxiv.org/abs/1706.03762. It calculates the attention weights given + query and key and combines the values using the attention weights. + + Args: + query: queries for calculating attention with shape of `[batch, q_length, + num_heads, qk_depth_per_head]`. + key: keys for calculating attention with shape of `[batch, kv_length, + num_heads, qk_depth_per_head]`. + value: values to be used in attention with shape of `[batch, kv_length, + num_heads, v_depth_per_head]`. + bias: bias for the attention weights. This should be broadcastable to the + shape `[batch, num_heads, q_length, kv_length]` This can be used for + incorporating causal masks, padding masks, proximity bias, etc. + dropout_rng: JAX PRNGKey: to be used for dropout + dropout_rate: dropout rate + deterministic: bool, deterministic or not (to apply dropout) + dtype: the dtype of the computation (default: float32) + float32_logits: bool, if True then compute logits in float32 to avoid + numerical issues with bfloat16. + + Returns: + Output of shape `[batch, length, num_heads, v_depth_per_head]`. + """ + assert key.ndim == query.ndim == value.ndim, 'q, k, v must have same rank.' + assert ( + query.shape[:-3] == key.shape[:-3] == value.shape[:-3] + ), 'q, k, v batch dims must match.' + assert ( + query.shape[-2] == key.shape[-2] == value.shape[-2] + ), 'q, k, v num_heads must match.' + assert key.shape[-3] == value.shape[-3], 'k, v lengths must match.' + assert query.shape[-1] == key.shape[-1], 'q, k depths must match.' + + # Casting logits and softmax computation for float32 for model stability. + if float32_logits: + query = query.astype(jnp.float32) + key = key.astype(jnp.float32) + + # `attn_weights`: [batch, num_heads, q_length, kv_length] + attn_weights = jnp.einsum('bqhd,bkhd->bhqk', query, key) + + # Apply attention bias: masking, dropout, proximity bias, etc. + if bias is not None: + attn_weights = attn_weights + bias.astype(attn_weights.dtype) + + # Normalize the attention weights across `kv_length` dimension. + attn_weights = jax.nn.softmax(attn_weights).astype(dtype) + + # Apply attention dropout. + if not deterministic and dropout_rate > 0.0: + keep_prob = 1.0 - dropout_rate + # T5 broadcasts along the "length" dim, but unclear which one that + # corresponds to in positional dimensions here, assuming query dim. + dropout_shape = list(attn_weights.shape) + dropout_shape[-2] = 1 + keep = jax.random.bernoulli(dropout_rng, keep_prob, dropout_shape) + keep = jnp.broadcast_to(keep, attn_weights.shape) + multiplier = keep.astype(attn_weights.dtype) / jnp.asarray( + keep_prob, dtype=dtype + ) + attn_weights = attn_weights * multiplier + + # Take the linear combination of `value`. + return jnp.einsum('bhqk,bkhd->bqhd', attn_weights, value), attn_weights + + +class MultiHeadDotProductAttention(nn.Module): + """Multi-head dot-product attention. + + Attributes: + num_heads: number of attention heads. Features (i.e. inputs_q.shape[-1]) + should be divisible by the number of heads. + head_dim: dimension of each head. + dtype: the dtype of the computation. + dropout_rate: dropout rate + kernel_init: initializer for the kernel of the Dense layers. + float32_logits: bool, if True then compute logits in float32 to avoid + numerical issues with bfloat16. + """ + + num_heads: int + head_dim: int + dtype: constants.DType = jnp.float32 + dropout_rate: float = 0.0 + kernel_init: constants.Initializer = nn.initializers.variance_scaling( + 1.0, 'fan_in', 'normal' + ) + float32_logits: bool = False # computes logits in float32 for stability. + + @nn.compact + def __call__( + self, + inputs_q: constants.JTensor, + inputs_kv: constants.JTensor, + mask: Optional[constants.JTensor] = None, + bias: Optional[constants.JTensor] = None, + *, + decode: bool = False, + deterministic: bool = False, + ) -> constants.JTensor: + """Applies multi-head dot product attention on the input data. + + Projects the inputs into multi-headed query, key, and value vectors, + applies dot-product attention and project the results to an output vector. + + There are two modes: decoding and non-decoding (e.g., training). The mode is + determined by `decode` argument. For decoding, this method is called twice, + first to initialize the cache and then for an actual decoding process. The + two calls are differentiated by the presence of 'cached_key' in the variable + dict. In the cache initialization stage, the cache variables are initialized + as zeros and will be filled in the subsequent decoding process. + + In the cache initialization call, `inputs_q` has a shape [batch, length, + q_features] and `inputs_kv`: [batch, length, kv_features]. During the + incremental decoding stage, query, key and value all have the shape [batch, + 1, qkv_features] corresponding to a single step. + + Args: + inputs_q: input queries of shape `[batch, q_length, q_features]`. + inputs_kv: key/values of shape `[batch, kv_length, kv_features]`. + mask: attention mask of shape `[batch, num_heads, q_length, kv_length]`. + bias: attention bias of shape `[batch, num_heads, q_length, kv_length]`. + decode: Whether to prepare and use an autoregressive cache. + deterministic: Disables dropout if set to True. + + Returns: + output of shape `[batch, length, q_features]`. + """ + projection = functools.partial( + t5_layers.DenseGeneral, + axis=-1, + features=(self.num_heads, self.head_dim), + kernel_axes=('embed', 'joined_kv'), + dtype=self.dtype, + ) + + # NOTE: T5 does not explicitly rescale the attention logits by + # 1/sqrt(depth_kq)! This is folded into the initializers of the + # linear transformations, which is equivalent under Adafactor. + depth_scaling = jnp.sqrt(self.head_dim).astype(self.dtype) + query_init = lambda *args: self.kernel_init(*args) / depth_scaling + + # Project inputs_q to multi-headed q/k/v + # dimensions are then [batch, length, num_heads, head_dim] + query = projection(kernel_init=query_init)(inputs_q) + key = projection(kernel_init=self.kernel_init)(inputs_kv) + value = projection(kernel_init=self.kernel_init)(inputs_kv) + + query = t5_layers.with_sharding_constraint( + query, ('batch', 'length', 'heads', 'kv') + ) + key = t5_layers.with_sharding_constraint( + key, ('batch', 'length', 'heads', 'kv') + ) + value = t5_layers.with_sharding_constraint( + value, ('batch', 'length', 'heads', 'kv') + ) + + if decode: + # Detect if we're initializing by absence of existing cache data. + is_initialized = self.has_variable('cache', 'cached_key') + # The key and value have dimension [batch, length, num_heads, head_dim], + # but we cache them as [batch, num_heads, head_dim, length] as a TPU + # fusion optimization. This also enables the "scatter via one-hot + # broadcast" trick, which means we do a one-hot broadcast instead of a + # scatter/gather operations, resulting in a 3-4x speedup in practice. + swap_dims = lambda x: x[:-3] + tuple(x[i] for i in [-2, -1, -3]) + cached_key = self.variable( + 'cache', 'cached_key', jnp.zeros, swap_dims(key.shape), key.dtype + ) + cached_value = self.variable( + 'cache', + 'cached_value', + jnp.zeros, + swap_dims(value.shape), + value.dtype, + ) + cache_index = self.variable( + 'cache', 'cache_index', lambda: jnp.array(0, dtype=jnp.int32) + ) + if is_initialized: + batch, num_heads, head_dim, length = cached_key.value.shape + # During fast autoregressive decoding, we feed one position at a time, + # and cache the keys and values step by step. + # Sanity shape check of cached key against input query. + expected_shape = (batch, 1, num_heads, head_dim) + if expected_shape != query.shape: + raise ValueError( + 'Autoregressive cache shape error, ' + 'expected query shape %s instead got %s.' + % (expected_shape, query.shape) + ) + + # Create a OHE of the current index. NOTE: the index is increased below. + cur_index = cache_index.value + one_hot_indices = jax.nn.one_hot(cur_index, length, dtype=key.dtype) + # In order to update the key, value caches with the current key and + # value, we move the length axis to the back, similar to what we did for + # the cached ones above. + # Note these are currently the key and value of a single position, since + # we feed one position at a time. + one_token_key = jnp.moveaxis(key, -3, -1) + one_token_value = jnp.moveaxis(value, -3, -1) + # Update key, value caches with our new 1d spatial slices. + # We implement an efficient scatter into the cache via one-hot + # broadcast and addition. + key = cached_key.value + one_token_key * one_hot_indices + value = cached_value.value + one_token_value * one_hot_indices + cached_key.value = key + cached_value.value = value + cache_index.value = cache_index.value + 1 + # Move the keys and values back to their original shapes. + key = jnp.moveaxis(key, -1, -3) + value = jnp.moveaxis(value, -1, -3) + + # Causal mask for cached decoder self-attention: our single query + # position should only attend to those key positions that have already + # been generated and cached, not the remaining zero elements. + mask = t5_layers.combine_masks( + mask, + jnp.broadcast_to( + jnp.arange(length) <= cur_index, + # (1, 1, length) represent (head dim, query length, key length) + # query length is 1 because during decoding we deal with one + # index. + # The same mask is applied to all batch elements and heads. + (batch, 1, 1, length), + ), + ) + + # Grab the correct relative attention bias during decoding. This is + # only required during single step decoding. + if bias is not None: + # The bias is a full attention matrix, but during decoding we only + # have to take a slice of it. + # This is equivalent to bias[..., cur_index:cur_index+1, :]. + bias = t5_layers.dynamic_vector_slice_in_dim( + jnp.squeeze(bias, axis=0), jnp.reshape(cur_index, (-1)), 1, -2 + ) + + # Convert the boolean attention mask to an attention bias. + if mask is not None: + # attention mask in the form of attention bias + attention_bias = jax.lax.select( + mask > 0, + jnp.full(mask.shape, 0.0).astype(self.dtype), + jnp.full(mask.shape, -1e10).astype(self.dtype), + ) + else: + attention_bias = None + + # Add provided bias term (e.g. relative position embedding). + if bias is not None: + attention_bias = t5_layers.combine_biases(attention_bias, bias) + + dropout_rng = None + if not deterministic and self.dropout_rate > 0.0: + dropout_rng = self.make_rng('dropout') + + # Apply attention. + x, attn_weights = dot_product_attention( + query, + key, + value, + bias=attention_bias, + dropout_rng=dropout_rng, + dropout_rate=self.dropout_rate, + deterministic=deterministic, + dtype=self.dtype, + float32_logits=self.float32_logits, + ) + + # Back to the original inputs dimensions. + out = t5_layers.DenseGeneral( + features=inputs_q.shape[-1], # output dim is set to the input dim. + axis=(-2, -1), + kernel_init=self.kernel_init, + kernel_axes=('joined_kv', 'embed'), + dtype=self.dtype, + )(x) + return out, attn_weights diff --git a/scenic/projects/knowledge_visual_language/models/local_memory.py b/scenic/projects/knowledge_visual_language/models/local_memory.py new file mode 100644 index 0000000000000000000000000000000000000000..ddf0a2d36e5952aee5fae2fe7f651382d2baa55f --- /dev/null +++ b/scenic/projects/knowledge_visual_language/models/local_memory.py @@ -0,0 +1,272 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Global file to store local knowledge base.""" + +import functools + +from absl import logging +from flax.core.frozen_dict import FrozenDict +import jax +import numpy as np +import tqdm + + +def static_encode_knowledge(knowledge_batch, train_state, *, flax_model): + """Function to encode KB knowledge. + + Args: + knowledge_batch: A single batch of data. The buffer of this argument can be + donated to the computation. + train_state: The state of training including the current global_step, + model_state, rng, and optimizer. The buffer of this argument can be + donated to the computation. + flax_model: A Flax model. + + Returns: + Key (single embedding), Val (compressed list of embedding) and Mask. + """ + variables = {'params': train_state.params, **train_state.model_state} + retr_tokens, retr_images = knowledge_batch[ + 'knowledge_tokens'], knowledge_batch['image'] + batch_size = retr_images.shape[0] + keys_head, compressed_val, compressed_mask, _, _ = flax_model.apply( + variables, + retr_texts=retr_tokens, + retr_images=retr_images, + bsz=batch_size, + train=False, + random_drop_image=False, + method=flax_model.encode_knowledge) + return keys_head, compressed_val, compressed_mask + + +class KnowledgeBase: + """Local Knowledge Base stored in CPU.""" + + def __init__(self): + self.memory = {} + self.memory_flatten = {} + self.specs = {} + self.n_data_per_shard = -1 + self.n_data = -1 + self.ret_specs = None + self.n_kb_dataset = 1 + self.n_local_device = 1 + self.k = 1 + + def set_encode_fn(self, flax_model): + encode_fn = functools.partial( + static_encode_knowledge, flax_model=flax_model) + self.encode_knowledge_pmap = jax.pmap( + encode_fn, + axis_name='batch', + donate_argnums=(0, 1), + ) + + def initialize(self, kb_datasets): + """Load sharded dataset into CPU.""" + memory_image = [] + memory_text = [] + memory_idxs = [] + self.n_kb_dataset = len(kb_datasets) + logging.info('Start Loading sharded dataset into CPU.') + for idx, dataset_name in enumerate(kb_datasets): + logging.info(dataset_name) + dataset = kb_datasets[dataset_name] + n_iter = int(dataset.meta_data['example_per_shard'] // + dataset.meta_data['batch_size']) + for _ in tqdm.tqdm(range(n_iter)): + kb_batch = next(dataset.train_iter) + memory_image += [np.asarray(kb_batch['image'])] + memory_text += [np.asarray(kb_batch['knowledge_tokens'])] + memory_idxs += [ + idx * np.ones(shape=kb_batch['image'].shape[:2]).astype('int16') + ] + del kb_batch + self.memory['image'] = np.concatenate(memory_image, axis=1) + self.memory['text'] = np.concatenate(memory_text, axis=1) + self.n_local_device = self.memory['image'].shape[0] + self.memory_flatten['idxs'] = np.repeat( + np.reshape(np.concatenate(memory_idxs, axis=1), (1, -1)), + self.n_local_device, + axis=0) + self.n_data_per_shard = self.memory['image'].shape[1] + self.n_data = self.n_data_per_shard * self.n_local_device + + self.specs = { + 'image': dataset.meta_data['image_spec'], + 'text': dataset.meta_data['knowledge_spec'] + } + + def update_memory(self, pmap_train_state, bsz, retr_k, data_k, + axis_index_groups): + """Function to update stale embedding as memory. + + Args: + pmap_train_state: pmaped train state. + bsz: Global batch size. + retr_k: number of returned data for retrieval. + data_k: number of returned data for ranking. + axis_index_groups: axis groups to gather data. + + Returns: + updated train_state + """ + per_bsz = bsz // jax.device_count() + if axis_index_groups is None: + per_shard_bsz = bsz + else: + per_shard_bsz = bsz // len(axis_index_groups[0]) + logging.info('update memory!!!') + logging.info(per_bsz) + memory_key = [] + memory_val = [] + # memory_mask = [] + eval_per_bsz = per_bsz * 4 + for idx in range(int(np.ceil(self.n_data_per_shard / eval_per_bsz))): + kb_batch = { + 'knowledge_tokens': + self.memory['text'][:, + idx * eval_per_bsz:(idx + 1) * eval_per_bsz], + 'image': + self.memory['image'][:, + idx * eval_per_bsz:(idx + 1) * eval_per_bsz], + } + keys_head, compressed_val, _ = self.encode_knowledge_pmap( + kb_batch, pmap_train_state) + memory_key += [np.asarray(keys_head)] + memory_val += [np.asarray(compressed_val)] + # memory_mask += [np.asarray(mask)] + del kb_batch + + for kw in ['keys', 'values']: + if kw in self.memory: + del self.memory[kw] + if kw in self.memory_flatten: + del self.memory_flatten[kw] + + self.memory['keys'] = np.concatenate(memory_key, axis=1) + self.memory['values'] = np.concatenate(memory_val, axis=1) + # self.memory['masks'] = np.concatenate(memory_mask, axis=1) + + for kw in ['keys', 'values', 'image', 'text']: + mem = self.memory[kw] + self.memory_flatten[kw] = mem.reshape((mem.shape[0] * mem.shape[1],) + + mem.shape[2:]) + + self.specs['keys'] = (keys_head.shape[2:], keys_head.dtype.name) + self.specs['values'] = (compressed_val.shape[2:], compressed_val.dtype.name) + # self.specs['masks'] = (mask.shape[2:], mask.dtype.name) + + self.local_ret_specs = [{ + 'keys': + jax.ShapeDtypeStruct( + shape=(per_bsz, retr_k - data_k) + self.specs['keys'][0], + dtype=self.specs['values'][1]), + 'values': + jax.ShapeDtypeStruct( + shape=(per_bsz, retr_k - data_k) + self.specs['values'][0], + dtype=self.specs['values'][1]) + }, { + 'image': + jax.ShapeDtypeStruct( + shape=(per_bsz, data_k) + self.specs['image'][0], + dtype=self.specs['image'][1]), + 'text_tokens': + jax.ShapeDtypeStruct( + shape=(per_bsz, data_k) + self.specs['text'][0], + dtype=self.specs['text'][1]) + }] + self.k = int(np.ceil(retr_k / len(axis_index_groups)) + 1) + self.ret_top_specs = [{ + 'keys': + jax.ShapeDtypeStruct( + shape=(per_shard_bsz, self.k) + self.specs['keys'][0], + dtype=self.specs['values'][1]), + 'values': + jax.ShapeDtypeStruct( + shape=(per_shard_bsz, self.k) + self.specs['values'][0], + dtype=self.specs['values'][1]) + }, { + 'image': + jax.ShapeDtypeStruct( + shape=(per_shard_bsz, self.k) + self.specs['image'][0], + dtype=self.specs['image'][1]), + 'text_tokens': + jax.ShapeDtypeStruct( + shape=(per_shard_bsz, self.k) + self.specs['text'][0], + dtype=self.specs['text'][1]) + }] + + logging.info(self.local_ret_specs) + logging.info(self.ret_specs) + logging.info(self.memory['keys'].shape) + new_model_state = pmap_train_state.model_state.unfreeze() + if 'keys' in new_model_state['memory']: + del new_model_state['memory']['keys'] + del new_model_state['memory']['idxs'] + new_model_state['memory']['keys'] = self.memory['keys'] + new_model_state['memory']['idxs'] = self.memory_flatten['idxs'] + pmap_train_state = pmap_train_state.replace( + model_state=FrozenDict(new_model_state)) + logging.info('finish update memory!!!') + return pmap_train_state + + +def retrieve_memory(args): + device_id, indexs = args + return [ + { + 'values': kb.memory['values'][device_id][indexs], + # 'masks': kb.memory['masks'][device_id][indexs] + }, + { + 'image': kb.memory['image'][device_id][indexs], + 'text_tokens': kb.memory['text'][device_id][indexs] + } + ] + + +def local_retrieve_memory(args): + global_data_ids, global_memory_ids = args + return [ + { + 'keys': kb.memory_flatten['keys'][global_memory_ids], + 'values': kb.memory_flatten['values'][global_memory_ids], + # 'masks': kb.memory['masks'][device_id][indexs] + }, + { + 'image': kb.memory_flatten['image'][global_data_ids], + 'text_tokens': kb.memory_flatten['text'][global_data_ids] + } + ] + + +def retrieve_top_memory(args): + top1_ids = args + return [ + { + 'keys': kb.memory_flatten['keys'][top1_ids], + 'values': kb.memory_flatten['values'][top1_ids], + # 'masks': kb.memory['masks'][device_id][indexs] + }, + { + 'image': kb.memory_flatten['image'][top1_ids], + 'text_tokens': kb.memory_flatten['text'][top1_ids] + } + ] + + +kb = KnowledgeBase() diff --git a/scenic/projects/knowledge_visual_language/models/losses.py b/scenic/projects/knowledge_visual_language/models/losses.py new file mode 100644 index 0000000000000000000000000000000000000000..2f10139647cd51a6cacb49b6f30d80153bd29d6e --- /dev/null +++ b/scenic/projects/knowledge_visual_language/models/losses.py @@ -0,0 +1,79 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Loss functions.""" + +from absl import logging +from flax.training import common_utils +import jax +import jax.numpy as jnp +from scenic.model_lib.base_models import model_utils as base_model_utils + + +def nll_loss(targets, pred, target_masks=None, label_smoothing=0): + """Negative Log-loglikelihood loss (perplexity). + + Args: + targets: ground-truth labels + pred: predicted logits + target_masks: mask that don't count + label_smoothing: factor to smooth label. + + Returns: + loss value + """ + + vocab_size = pred.shape[-1] + onehot_targets = common_utils.onehot(targets, vocab_size) + + return base_model_utils.weighted_softmax_cross_entropy( + pred, onehot_targets, target_masks, label_smoothing=label_smoothing) + + +def contrastive_loss(query_emb: jnp.ndarray, + key_emb: jnp.ndarray, + temperature: float = 1.0): + """Contrastive loss with hard negative samples & other in-batch negatives. + + Args: + query_emb: An array of shape [bsz, n_dim]. + key_emb: An array of shape [bsz, n_knowledge, n_dim]. Only the first one is + true positive sample, and the others are hard negatives. + temperature: A scalar that the temprature is divided by it. + + Returns: + Computed loss value. + """ + if query_emb.shape[0] != key_emb.shape[0]: + raise ValueError('query_emb and key_emb should have the same batch size.') + if query_emb.shape[-1] != key_emb.shape[-1]: + raise ValueError( + 'query_emb and key_emb should have the same embedding size.') + per_device_bsz, k = query_emb.shape[0], key_emb.shape[1] + global_key_emb = jnp.concatenate(jax.lax.all_gather(key_emb, 'batch'), 0) + labels = jax.lax.axis_index( + axis_name='batch') * per_device_bsz * k + jnp.arange(per_device_bsz) + + # bsz×d @ (bsz*n_device)×K×d -> bsz×(bsz * k * n_device) + # positive pairs are on first diagonal. + score_matrix = jnp.reshape( + jnp.einsum('bd,nkd->bkn', query_emb, global_key_emb), + [per_device_bsz, -1]) + + loss = nll_loss(pred=score_matrix / temperature, targets=labels) + accs = jnp.equal(jnp.argmax(score_matrix, axis=1), labels) + s0, s1 = score_matrix[0][0], score_matrix[0][1] # debug purpose + logging.info('backward host_id : %d', jax.process_index()) + logging.info(jax.lax.axis_index(axis_name='batch')) + return loss, (jnp.mean(accs), s0, s1) diff --git a/scenic/projects/knowledge_visual_language/models/metrics.py b/scenic/projects/knowledge_visual_language/models/metrics.py new file mode 100644 index 0000000000000000000000000000000000000000..29b930a97e3730513b7d2a7ac8a007ed975fa676 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/models/metrics.py @@ -0,0 +1,47 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Metric functions.""" + +from typing import Dict, Tuple +from flax.training import common_utils +from scenic.model_lib.base_models import model_utils as base_model_utils +from scenic.projects.knowledge_visual_language.models import constants + +JTensor = constants.JTensor +JTensorDict = constants.JTensorDict + + +def token_accuracy(logits, batch: JTensorDict) -> Dict[str, Tuple[float, int]]: + """Return the accuracy for LM prediction. + + Args: + logits: Output of model in shape [B, L, C]. + batch: Batch of data that has 'decoder_outputs' as ground-truth. + + Returns: + Accuracy stored as Dict. + """ + targets = batch['decoder_target_tokens'] + vocab_size = logits.shape[-1] + onehot_targets = common_utils.onehot(targets, vocab_size) + masks = targets > 0 + n_corrects = base_model_utils.weighted_correctly_classified( + logits, onehot_targets, masks) + n_valids = base_model_utils.num_examples(logits, onehot_targets, masks) + return { # pytype: disable=bad-return-type # jax-ndarray + 'token_accuracy': + base_model_utils.psum_metric_normalizer((n_corrects, n_valids)) + } + diff --git a/scenic/projects/knowledge_visual_language/models/metrics_vqa.py b/scenic/projects/knowledge_visual_language/models/metrics_vqa.py new file mode 100644 index 0000000000000000000000000000000000000000..bef07b75e2acaa7caf49107f4c943011b8dc5718 --- /dev/null +++ b/scenic/projects/knowledge_visual_language/models/metrics_vqa.py @@ -0,0 +1,108 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Metric functions for VQA.""" +import string +from typing import Any + +from clu import metrics +import clu.values as clu_values +import flax +import jax.numpy as jnp +import numpy as np +from scenic.projects.knowledge_visual_language.data import data_utils +from scenic.projects.t5 import tokenizer as t5_tokenizer +from scenic.projects.vit_vqa.models import qa_utils + + +_PUNCTUATION = string.punctuation + '‘’´`_' +# Recheck the total number of ground truth answers +# received from the data loader. +MAX_GT_ANSWERS = 10 + + +def normalize_answer(prediction: str) -> str: + answer = qa_utils.normalize_answer( + prediction, punc_chars=_PUNCTUATION, punc_repl='' + ) + return answer.strip() + + +@flax.struct.dataclass +class VQAMetrics( + metrics.CollectingMetric.from_outputs(('predictions', 'targets')) +): + """Computes VQA accuracy and F1 metrics. + + Since jax does not support strings, during the compute phase, which is done + outside of pmap and other jax functions, converts the integer word/text + predictions into words/strings which are used to compute the scores. + + Attributes: + predictions: jnp.ndarray of integers representing word/text predictions. + targets: jnp.ndarray of integers representing ground truth words/text. + """ + + def compute(self) -> dict[str, Any]: + values = super().compute() + tokenizer = t5_tokenizer.build_dmvr_sp_model() + tokenizer.initialize() + # Moves all values into the batch dimension when run with pmap. + predictions = jnp.reshape( + values['predictions'], (-1, values['predictions'].shape[-1]) + ) + # Targets has multiple answers per-question, so we keep that structure when + # reshaping. + targets = values['targets'] + targets = jnp.reshape(targets, (-1, targets.shape[-2], targets.shape[-1])) + assert len(targets.shape) == 3 + assert len(predictions.shape) == 2 + + # Convert the values into text. + prediction_tokens = [] + for p in predictions.tolist(): + if data_utils.EOS_ID in p: + p = p[: p.index(data_utils.EOS_ID)] + prediction_tokens += [tokenizer.indices_to_string(p)] + # Each question has multiple answers, so we need to decode a list-of-list. + + target_tokens = [] + for target_answers in targets.tolist(): + tokens = [] + for answer in target_answers: + if data_utils.EOS_ID in answer: + answer = answer[: answer.index(data_utils.EOS_ID)] + tokens += [tokenizer.indices_to_string(answer)] + target_tokens += [tokens] + # Normalize answers, which expects a string. + predictions = [normalize_answer(p) for p in prediction_tokens] + targets = [[normalize_answer(a) for a in t] for t in target_tokens] + + if len(targets[0]) > 1: + # VizWiz and VQA2.0 style metric with multiple GT answers. + qa = qa_utils.vqa_metrics(targets, predictions) + else: + # SNLI-VE, GQA, NLVR single GT answer metric. + qa = qa_utils.qa_metrics(targets, predictions) + qa['acc'] = 100 * np.average( + [p in ans for p, ans in zip(predictions, targets)] + ) + return qa + + def compute_value(self) -> dict[str, clu_values.Value]: + metric_values = self.compute() + metric_results = { + key: clu_values.Scalar(value) for key, value in metric_values.items() + } + return metric_results diff --git a/scenic/projects/knowledge_visual_language/models/vit.py b/scenic/projects/knowledge_visual_language/models/vit.py new file mode 100644 index 0000000000000000000000000000000000000000..0e5674b6a689b25e8512827970be282a03a49a0e --- /dev/null +++ b/scenic/projects/knowledge_visual_language/models/vit.py @@ -0,0 +1,214 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""A refactored and simplified ViT. + +However, the names of modules are made to match the old ones for easy loading. +""" + +from typing import Optional, Sequence, Union + +from big_vision.models import vit as bv_vit +import flax.linen as nn +import jax +import jax.numpy as jnp + + +class MlpBlock(nn.Module): + """Transformer MLP / feed-forward block.""" + mlp_dim: Optional[int] = None # Defaults to 4x input dim + dropout: float = 0.0 + dtype: str = jnp.bfloat16 + + @nn.compact + def __call__(self, x, deterministic=True): + """Applies Transformer MlpBlock module.""" + inits = dict( + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6), + ) + + n, l, d = x.shape # pylint: disable=unused-variable + x = jnp.array(x, dtype=self.dtype) + x = nn.Dense(self.mlp_dim or 4 * d, **inits, dtype=self.dtype)(x) + x = nn.gelu(x) + x = nn.Dropout(rate=self.dropout)(x, deterministic) + x = nn.Dense(d, **inits, dtype=self.dtype)(x) + return x + + +class Encoder1DBlock(nn.Module): + """Single transformer encoder block (MHSA + MLP).""" + mlp_dim: Optional[int] = None # Defaults to 4x input dim + num_heads: int = 12 + dropout: float = 0.0 + dtype: str = jnp.bfloat16 + + @nn.compact + def __call__(self, x, deterministic=True): + out = {} + y = nn.LayerNorm()(x) + y = out["sa"] = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + kernel_init=nn.initializers.xavier_uniform(), + deterministic=deterministic, + dtype=self.dtype)(y, y) + y = nn.Dropout(rate=self.dropout)(y, deterministic) + x = out["+sa"] = x + y + + y = nn.LayerNorm()(x) + y = out["mlp"] = MlpBlock( + mlp_dim=self.mlp_dim, dropout=self.dropout, + dtype=self.dtype)(y, deterministic) + y = nn.Dropout(rate=self.dropout)(y, deterministic) + x = out["+mlp"] = x + y + return x, out + + +class Encoder(nn.Module): + """Transformer Model Encoder for sequence to sequence translation.""" + depth: int + mlp_dim: Optional[int] = None # Defaults to 4x input dim + num_heads: int = 12 + dropout: float = 0.0 + dtype: str = jnp.bfloat16 + num_frozen_layers: int = -1 + + @nn.compact + def __call__(self, x, deterministic=True): + out = {} + + # Input Encoder + for lyr in range(self.depth): + block = Encoder1DBlock( + name=f"encoderblock_{lyr}", + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout=self.dropout, + dtype=self.dtype) + x, out[f"block{lyr:02d}"] = block(x, deterministic) + if self.num_frozen_layers > 0 and lyr == self.num_frozen_layers - 1: + x = jax.lax.stop_gradient(x) + out["pre_ln"] = x # Alias for last block, but without the number in it. + + return nn.LayerNorm(name="encoder_norm")(x), out + + +class _Model(nn.Module): + """ViT model.""" + + num_classes: int + patch_size: Sequence[int] = (16, 16) + width: int = 768 + depth: int = 12 + mlp_dim: Optional[int] = None # Defaults to 4x input dim + num_heads: int = 12 + posemb: str = "learn" # Can also be "sincos2d" + rep_size: Union[int, bool] = False + dropout: float = 0.0 + pool_type: str = "gap" # Can also be "map" or "tok" + head_zeroinit: bool = True + dtype: str = jnp.bfloat16 + num_frozen_layers: int = -1 + + @nn.compact + def __call__(self, image, *, train=False): + out = {} + + # Patch extraction + x = out["stem"] = nn.Conv( + self.width, + self.patch_size, + strides=self.patch_size, + padding="VALID", + name="embedding")( + image) + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + + # Add posemb before adding extra token. + x = out["with_posemb"] = x + bv_vit.get_posemb(self, self.posemb, (h, w), c, + "pos_embedding", x.dtype) + + if self.pool_type == "tok": + cls = self.param("cls", nn.initializers.zeros, (1, 1, c), x.dtype) + x = jnp.concatenate([jnp.tile(cls, [n, 1, 1]), x], axis=1) + + n, l, c = x.shape # pylint: disable=unused-variable + x = nn.Dropout(rate=self.dropout)(x, not train) + x, out["encoder"] = Encoder( + depth=self.depth, + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout=self.dropout, + dtype=self.dtype, + num_frozen_layers=self.num_frozen_layers, + name="Transformer")( + x, deterministic=not train) + + encoded = out["encoded"] = x + + if self.pool_type == "map": + x = out["head_input"] = bv_vit.MAPHead( + num_heads=self.num_heads, mlp_dim=self.mlp_dim)( + x) + elif self.pool_type == "gap": + x = out["head_input"] = jnp.mean(x, axis=1) + elif self.pool_type == "0": + x = out["head_input"] = x[:, 0] + elif self.pool_type == "tok": + x = out["head_input"] = x[:, 0] + encoded = encoded[:, 1:] + else: + raise ValueError(f"Unknown pool type: '{self.pool_type}'") + + x_2d = jnp.reshape(encoded, [n, h, w, -1]) + + if self.rep_size: + rep_size = self.width if self.rep_size is True else self.rep_size # pylint: disable=g-bool-id-comparison + hid = nn.Dense(rep_size, name="pre_logits", dtype=self.dtype) + # NOTE: In the past we did not include tanh in pre_logits. + # For few-shot, it should not matter much, as it whitens anyways. + x_2d = nn.tanh(hid(x_2d)) + x = nn.tanh(hid(x)) + + out["pre_logits_2d"] = x_2d + out["pre_logits"] = x + + if self.num_classes: + kw = {"kernel_init": nn.initializers.zeros} if self.head_zeroinit else {} + head = nn.Dense(self.num_classes, name="head", dtype=self.dtype, **kw) + x_2d = out["logits_2d"] = head(x_2d) + x = out["logits"] = head(x) + x = jnp.array(x, dtype=self.dtype) + return x, out + + +def Model(num_classes, + num_frozen_layers=-1, + dtype=jnp.bfloat16, + variant=None, + **kw): # pylint: disable=invalid-name + """Factory function, because linen really don't like what I'm doing!""" + vit_config = bv_vit.decode_variant(variant) + if isinstance(num_frozen_layers, float): + num_frozen_layers = int(num_frozen_layers * vit_config["depth"]) + return _Model( + num_classes=num_classes, + num_frozen_layers=num_frozen_layers, + dtype=dtype, + **{ + **vit_config, + **kw + }) diff --git a/scenic/projects/knowledge_visual_language/trainer.py b/scenic/projects/knowledge_visual_language/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..6c37a6a7f84c78c5178097838e852d5b9a170a3d --- /dev/null +++ b/scenic/projects/knowledge_visual_language/trainer.py @@ -0,0 +1,508 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script for knowledge-based models.""" + +import functools +from typing import Any, Dict, Optional, Tuple + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +import jax.example_libraries.optimizers as jax_optimizers +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.xm import xm_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.knowledge_visual_language import trainer_utils +from scenic.projects.knowledge_visual_language.models import constants +from scenic.projects.knowledge_visual_language.models import losses +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils + + +def init_state( + model: base_model.BaseModel, + dataset: dataset_utils.Dataset, + config: ml_collections.ConfigDict, + workdir: str, + rng: jnp.ndarray, + writer: metric_writers.MetricWriter, +): + """Initialize the train state.""" + + input_spec = { + key[:-5]: dataset.meta_data[key] + for key in dataset.meta_data + if key[-5:] == '_spec' + } + # Initialize model. + rng, init_rng = jax.random.split(rng) + params, model_state, num_params, gflops = ( + train_utils.initialize_model_with_pytree( + model_def=model.flax_model, + input_spec=input_spec, + config=config, + rngs=init_rng, + ) + ) + logging.info('The model has %d params', num_params) + + if gflops: + logging.info('uses %d gflops', gflops or -1) + lr_fn = lr_schedules.get_learning_rate_fn(config) + # Create the optimizer. + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + tx = optimizers.get_optimizer( + optimizer_config=optimizers.get_optax_optimizer_config(config), + learning_rate_fn=lr_fn, + ) + tx = trainer_utils.froze_param_optax( + params=params, + tx=tx, + frozen_patterns=config.get('frozen_patterns', None), + not_frozen_patterns=config.get('not_frozen_patterns', None), + ) + opt_state = jax.jit(tx.init, backend='cpu')(params) + # del params # Do not keep a copy of the initial params. + + _, train_rng = jax.random.split(rng) + chrono = train_utils.Chrono() + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}, + ) + if config.checkpoint: + logging.info('Continuing training from the checkpoint') + logging.info('workdir= %s', workdir) + train_state, params_axes = trainer_utils.pop_axes_names( + train_state, axes_name='params_axes' + ) + train_state, _ = train_utils.restore_checkpoint(workdir, train_state) + train_state = trainer_utils.re_add_axis_names( + train_state, params_axes, axes_name='params_axes' + ) + + start_step = int(train_state.global_step) + chrono.load(train_state.metadata['chrono']) + + if start_step == 0: + if config.get('init_from', False): + if config.init_from.get('resume', False): + workdir = config.init_from.get('resume') + logging.info('Resuming training from the checkpoint') + logging.info('workdir= %s', workdir) + train_state, params_axes = trainer_utils.pop_axes_names( + train_state, axes_name='params_axes' + ) + train_state, _ = train_utils.restore_checkpoint(workdir, train_state) + train_state = trainer_utils.re_add_axis_names( + train_state, params_axes, axes_name='params_axes' + ) + start_step = int(train_state.global_step) + chrono.load(train_state.metadata['chrono']) + + elif config.init_from.get('xm', False): + if config.init_from.load_key_encoder: + params = trainer_utils.load_key_params(params, config) + train_state = train_state.replace( # pytype: disable=attribute-error + params=params + ) + else: + logging.info('Loading T5 & ViT Parameter from Pre-Trained Model') + params = trainer_utils.load_visual_params(params, config) + params = trainer_utils.load_text_params(params, config) + train_state = train_state.replace( # pytype: disable=attribute-error + params=params + ) + step0_log = {'num_trainable_params': num_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + return train_state, start_step, chrono, lr_fn + + +def train_step( + train_state: train_utils.TrainState, + batch: constants.Batch, + *, + flax_model: nn.Module, + loss_fn: constants.LossFn, + metrics_fn: constants.MetricFn, + model_config: ml_collections.ConfigDict, + debug: Optional[bool] = False, +) -> Tuple[ + train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, float] +]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, and optimizer. The buffer of this argument can be + donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits and batch of data, calculates the + training loss. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + model_config: Config for model architecture. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, loss, computed metrics, and learning rate for + logging. + """ + new_rng, rng = jax.random.split(train_state.rng) + + # Bind the rng to the host/device we are on for dropout. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device' + ) + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + output_dict, new_model_state = flax_model.apply( + variables, + **batch, + mutable=['batch_stats'], + train=True, + fuse_retrieval=model_config.fuse_retrieval, + in_batch_neg=model_config.in_batch_neg, + rngs={'dropout': dropout_rng}, + debug=debug, + ) + if debug: + logging.info( + 'Shape of token_logits in train step is: %s', + output_dict['predicted_logits'].shape, + ) + r = model_config.retrieval_ratio + output_dict['supervised_retrieval'] = model_config.supervised_retrieval + loss_dict = loss_fn(output_dict, batch) + train_loss = loss_dict['gen_loss'] * (1 - r) + loss_dict['retr_loss'] * r + return train_loss, (new_model_state, output_dict, loss_dict) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + + (train_loss, (new_model_state, output_dict, loss_dict)), grad = ( + compute_gradient_fn(train_state.params) + ) + grad = jax.lax.pmean(grad, axis_name='batch') + grad_norm = jax_optimizers.l2_norm(grad).astype(float) + updates, new_opt_state = train_state.tx.update( + grad, train_state.opt_state, train_state.params + ) + update_norm = jax_optimizers.l2_norm(updates).astype(float) + new_params = optax.apply_updates(train_state.params, updates) + param_norm = jax_optimizers.l2_norm(train_state.params).astype(float) + + metrics = metrics_fn(output_dict['predicted_logits'], batch) + + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng, + ) + + logs = { + 'train/train_loss': train_loss, + 'train/gen_loss': loss_dict['gen_loss'], + 'train/retr_loss': loss_dict['retr_loss'], + 'train/retr_acc': loss_dict['retr_acc'], + 'train/s0': loss_dict['s0'], + 'train/s1': loss_dict['s1'], + 'grad_norm': grad_norm, + 'update_norm': update_norm, + 'param_norm': param_norm, + 'bias': train_state.params['att_transform']['bias'][0], + 'scale': train_state.params['att_transform']['scale'][0], + } + + if 'retr_scores' in output_dict: + logs['train/a0'] = output_dict['retr_scores'][0][0] + logs['train/a1'] = output_dict['retr_scores'][0][1] + + return new_train_state, metrics, logs # pytype: disable=bad-return-type # jax-types + + +def eval_step( + train_state: train_utils.TrainState, + batch: constants.Batch, + *, + flax_model: nn.Module, + metrics_fn: constants.MetricFn, + model_config: ml_collections.ConfigDict, + debug: Optional[bool] = False, +) -> Tuple[Dict[str, Tuple[float, int]], Dict[str, float]]: + """Runs a single step of evaluation, TODO(ziniu): Add beam search decoding. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, and optimizer. The buffer of this argument can be + donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + model_config: Config for model architecture. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, loss, computed metrics, and learning rate for + logging. + """ + variables = {'params': train_state.params, **train_state.model_state} + output_dict = flax_model.apply( + variables, + **batch, + train=False, + fuse_retrieval=model_config.fuse_retrieval, + in_batch_neg=model_config.in_batch_neg, + debug=debug, + ) + metrics = metrics_fn(output_dict['predicted_logits'], batch) + + retr_loss, (retr_acc, _, _) = losses.contrastive_loss( + query_emb=output_dict['base_query'], + key_emb=output_dict['retr_keys'], + temperature=model_config.get('temperature'), + ) + logs = {'eval/retr_loss': retr_loss, 'eval/retr_acc': retr_acc} + + return metrics, logs # pytype: disable=bad-return-type # jnp-type + + +def train_and_eval( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + A tuple with: + * the state that has the state of training (including current + global_step, model_state, rng, and the optimizer) + * a dictionary with the train_summary + * a dictionary with the evaluation summary + """ + host_id = jax.process_index() + lead_host = host_id == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + train_state, start_step, chrono, lr_fn = init_state( + model, dataset, config, workdir, rng, writer + ) + + logging.info('Complete initialization. Start Training.') + train_state = jax_utils.replicate(train_state) + logging.info('Number of processes is %s', jax.process_count()) + + # Get the pmapped train and eval steps. + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + debug=config.debug_train, + model_config=config.model, + ), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + debug=config.debug_eval, + model_config=config.model, + ), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + train_summary, eval_summary, e_metrics = {}, {}, {} + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data + ) + log_eval_steps = config.get('log_eval_steps', steps_per_epoch) + checkpoint_steps = config.get('checkpoint_steps', steps_per_epoch) + log_summary_steps = config.get('log_summary_steps', log_eval_steps) + + logging.info('Start training from step %d', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer + ) + hooks = [] + if lead_host: + hooks.append(report_progress) + + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + chrono.inform( + int(start_step), + int(total_steps), + int(config.batch_size), + int(steps_per_epoch), + ) + + summary_builder = trainer_utils.SummaryBuilder([], []) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + for step in range(start_step + 1, total_steps + 1): + if lead_host: + logging.info('training for step %d', step) + ###################### Training ######################## + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, logs = train_step_pmapped( + train_state=train_state, batch=train_batch + ) + for hook in hooks: + hook(step) + logs['learning_rate'] = lr_fn(step).reshape([-1, 1]) + summary_builder.update(metrics_update=t_metrics, extra_logs_update=logs) + if lead_host: + logging.info('finish training for step %d', step) + ###################### LOG TRAIN SUMMARY ######################## + if (step % log_summary_steps == 10) or (step == total_steps): + chrono.pause() + if lead_host: + logging.info('log training summary') + chrono.tick(step, writer, write_note) + train_summary = summary_builder.write(writer, step) + chrono.resume() + ################### EVALUATION ################################ + should_eval = (step % log_eval_steps == 10) or (step == total_steps) + if should_eval: + logging.info('Start validation!') + chrono.pause(wait_for=(train_state.params)) + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + for ds_name in dataset.valid_iter: + logging.info('Validate on %s', ds_name) + # Compute the number of evaluation steps per dataset. + num_eval_examples = dataset.meta_data['num_eval_examples'][ds_name] + total_eval_steps = int( + np.ceil(num_eval_examples / (config.get('eval_batch_size'))) + ) + steps_per_eval = config.get('steps_per_eval', total_eval_steps) + eval_metrics_all = [] + for _ in range(steps_per_eval): + eval_batch = next(dataset.valid_iter[ds_name]) + e_metrics, logs = eval_step_pmapped( + train_state=train_state, batch=eval_batch + ) + eval_metrics_all.append(train_utils.unreplicate_and_get(e_metrics)) + logging.info(e_metrics) + logging.info(logs) + eval_summary = train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics_all, + writer=writer, + prefix=ds_name, + extra_eval_summary=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, logs + ), + ) + chrono.resume() + + ##################### CHECKPOINTING ########################### + if not config.checkpoint: + continue + elif step % checkpoint_steps == 0 and step > 0 or (step == total_steps): + logging.info('Save checkpoint!') + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + logging.info('checkpointing (training step: %d)', step) + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + train_utils.save_checkpoint(workdir, unrep_train_state) + del unrep_train_state + chrono.resume() + logging.info('Checkpoint saved!') + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/knowledge_visual_language/trainer_memory.py b/scenic/projects/knowledge_visual_language/trainer_memory.py new file mode 100644 index 0000000000000000000000000000000000000000..7d7a363c004389b0832c82644bb42f9fd607d95a --- /dev/null +++ b/scenic/projects/knowledge_visual_language/trainer_memory.py @@ -0,0 +1,733 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script for knowledge-based models.""" + +import functools +import gc +from typing import Any, Dict, Optional, Tuple + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +from flax.training import common_utils +import jax +import jax.example_libraries.optimizers as jax_optimizers +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.xm import xm_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.knowledge_visual_language import trainer_utils +from scenic.projects.knowledge_visual_language.models import constants +from scenic.projects.knowledge_visual_language.models import local_memory +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils + +local_kb = local_memory.kb + + +def init_state( + model: base_model.BaseModel, + dataset: dataset_utils.Dataset, + config: ml_collections.ConfigDict, + workdir: str, + rng: jnp.ndarray, + writer: metric_writers.MetricWriter, +): + """Initialize the train state.""" + + input_spec = { + key[:-5]: dataset.meta_data[key] + for key in dataset.meta_data + if key[-5:] == '_spec' + } + # Initialize model. + rng, init_rng = jax.random.split(rng) + params, model_state, num_params, gflops = ( + train_utils.initialize_model_with_pytree( + model_def=model.flax_model, + input_spec=input_spec, + config=config, + rngs=init_rng, + ) + ) + logging.info('The model has %d params', num_params) + + if gflops: + logging.info('uses %d gflops', gflops or -1) + lr_fn = lr_schedules.get_learning_rate_fn(config) + # Create the optimizer. + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + tx = optimizers.get_optimizer( + optimizer_config=optimizers.get_optax_optimizer_config(config), + learning_rate_fn=lr_fn, + ) + tx = trainer_utils.froze_param_optax( + params=params, + tx=tx, + frozen_patterns=config.get('frozen_patterns', None), + not_frozen_patterns=config.get('not_frozen_patterns', None), + ) + opt_state = jax.jit(tx.init, backend='cpu')(params) + + _, train_rng = jax.random.split(rng) + chrono = train_utils.Chrono() + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}, + ) + if config.checkpoint: + logging.info('Continuing training from the checkpoint') + logging.info('workdir= %s', workdir) + train_state, params_axes = trainer_utils.pop_axes_names( + train_state, axes_name='params_axes' + ) + train_state, memory_axes = trainer_utils.pop_axes_names( + train_state, axes_name='memory' + ) + train_state, _ = train_utils.restore_checkpoint(workdir, train_state) + train_state = trainer_utils.re_add_axis_names( + train_state, memory_axes, axes_name='memory' + ) + train_state = trainer_utils.re_add_axis_names( + train_state, params_axes, axes_name='params_axes' + ) + + start_step = int(train_state.global_step) + chrono.load(train_state.metadata['chrono']) + + if start_step == 0: + if config.get('init_from', False): + if config.init_from.get('resume', False): + xid, wid = config.init_from.get('resume') + (_, workdir) = xm_utils.get_info_from_xmanager(xid, wid) + logging.info('Resuming training from the checkpoint') + logging.info('workdir= %s', workdir) + train_state, params_axes = trainer_utils.pop_axes_names( + train_state, axes_name='params_axes' + ) + train_state, memory_axes = trainer_utils.pop_axes_names( + train_state, axes_name='memory' + ) + train_state, _ = train_utils.restore_checkpoint(workdir, train_state) + train_state = trainer_utils.re_add_axis_names( + train_state, memory_axes, axes_name='memory' + ) + train_state = trainer_utils.re_add_axis_names( + train_state, params_axes, axes_name='params_axes' + ) + start_step = int(train_state.global_step) + chrono.load(train_state.metadata['chrono']) + + elif config.init_from.get('xm', False): + if config.init_from.load_key_encoder: + params = trainer_utils.load_key_params(params, config) + train_state = train_state.replace( # pytype: disable=attribute-error + params=params + ) + else: + logging.info('Loading T5 & ViT Parameter from Pre-Trained Model') + params = trainer_utils.load_visual_params(params, config) + params = trainer_utils.load_text_params(params, config) + train_state = train_state.replace( # pytype: disable=attribute-error + params=params + ) + step0_log = {'num_trainable_params': num_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + train_state, _ = trainer_utils.pop_axes_names( + train_state, axes_name='params_axes' + ) + return train_state, start_step, chrono, lr_fn + + +def train_step( + train_state: train_utils.TrainState, + batch: constants.Batch, + *, + flax_model: nn.Module, + loss_fn: constants.LossFn, + metrics_fn: constants.MetricFn, + model_config: ml_collections.ConfigDict, + debug: Optional[bool] = False, +) -> Tuple[ + train_utils.TrainState, + Dict[str, Tuple[float, int]], + Dict[str, float], + constants.JTensor, +]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, and optimizer. The buffer of this argument can be + donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits and batch of data, calculates the + training loss. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + model_config: Config for model architecture. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, loss, computed metrics, and learning rate for + logging. + """ + new_rng, rng = jax.random.split(train_state.rng) + + # Bind the rng to the host/device we are on for dropout. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device' + ) + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + logging.info(variables.keys()) + output_dict = flax_model.apply( + variables, + **batch, + train=True, + rngs={'dropout': dropout_rng}, + debug=debug, + use_memory=True, + use_psudo_retr=model_config.use_psudo_retr, + retrieve_local=model_config.retrieve_local, + frozen_base=model_config.t5_frozen_base, + ) + if debug: + logging.info( + 'Shape of token_logits in train step is: %s', + output_dict['predicted_logits'].shape, + ) + loss_dict = loss_fn(output_dict, batch) + return loss_dict['total_loss'], (output_dict, loss_dict) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + + (train_loss, (output_dict, loss_dict)), grad = compute_gradient_fn( + train_state.params + ) + grad = jax.lax.pmean(grad, axis_name='batch') + grad_norm = jax_optimizers.l2_norm(grad).astype(float) + updates, new_opt_state = train_state.tx.update( + grad, train_state.opt_state, train_state.params + ) + update_norm = jax_optimizers.l2_norm(updates).astype(float) + new_params = optax.apply_updates(train_state.params, updates) + param_norm = jax_optimizers.l2_norm(train_state.params).astype(float) + + logging.info(output_dict['predicted_logits'].shape) + logging.info(batch) + metrics = metrics_fn(output_dict['predicted_logits'], batch) + + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + rng=new_rng, + ) + + logs = { + 'train/train_loss': train_loss, + 'train/gen_loss': loss_dict['gen_loss'], + 'train/contra_loss': loss_dict['contra_loss'], + 'train/contra_accs': loss_dict['contra_accs'], + 'grad_norm': grad_norm, + 'update_norm': update_norm, + 'param_norm': param_norm, + 'bias': train_state.params['att_transform']['bias'][0], + 'scale': train_state.params['att_transform']['scale'][0], + } + + if 'retr_scores' in output_dict: + logs['train/a0'] = output_dict['retr_scores'][0][0] + logs['train/a1'] = output_dict['retr_scores'][0][1] + logs['train/a2'] = output_dict['retr_scores'][0][2] + logs['train/a3'] = output_dict['retr_scores'][0][3] + + if 'topk_scores' in output_dict: + logs['train/s0'] = output_dict['topk_scores'][0][0] + logs['train/s1'] = output_dict['topk_scores'][0][1] + + if 'inbatch_sim' in output_dict: + logs['train/i0'] = output_dict['inbatch_sim'][0][0] + logs['train/i1'] = output_dict['inbatch_sim'][0][1] + + if 'base_norm' in output_dict: + logs['train/base_norm'] = output_dict['base_norm'] + if 'data_norm' in output_dict: + logs['train/data_norm'] = output_dict['data_norm'] + if 'vals_norm' in output_dict: + logs['train/memory_norm'] = output_dict['vals_norm'] + if 'disentangle_reg' in output_dict: + logs['train/disentangle'] = output_dict['disentangle_reg'] + if 'gap' in output_dict: + logs['train/gap'] = output_dict['gap'] + retr_top_image = output_dict['retr_data']['image'][:, 0] + return new_train_state, metrics, logs, retr_top_image # pytype: disable=bad-return-type # jax-types + + +def eval_step( + train_state: train_utils.TrainState, + batch: constants.Batch, + *, + flax_model: nn.Module, + metrics_fn: constants.MetricFn, + model_config: ml_collections.ConfigDict, + debug: Optional[bool] = False, +) -> Tuple[Dict[str, Tuple[float, int]], constants.JTensor, Any]: + """Runs a single step of evaluation. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, and optimizer. The buffer of this argument can be + donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + model_config: Config for model architecture. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, loss, computed metrics, and learning rate for + logging. + """ + variables = {'params': train_state.params, **train_state.model_state} + output_dict = flax_model.apply( + variables, + **batch, + train=False, + debug=debug, + use_memory=True, + retrieve_local=model_config.retrieve_local, + ) + retr_top_image = output_dict['retr_data']['image'][:, 0] + metrics = metrics_fn(output_dict['predicted_logits'], batch) + return metrics, retr_top_image, output_dict['predicted_logits'] + + +def eval_step_autoregressive_decoding( + train_state: train_utils.TrainState, + batch: constants.Batch, + *, + model: Any, + metrics_fn: Any, + model_config: ml_collections.ConfigDict, + vocab_size: int, + num_decodes: int, + beam_search: bool = True, + debug: Optional[bool] = False, +) -> Tuple[Dict[str, Tuple[float, int]], constants.JTensor, Any]: + """Evaluate autoregressive generation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, and optimizer. The buffer of this argument are donated + to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + model: The scenic model. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + model_config: Config for model architecture. + vocab_size: size of the vocabulary. + num_decodes: number of decoding attempts. A larger number means longer + inference time but better performance. + beam_search: if True, perform beam search. If False, perform temperature + sampling. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + metrics: dictionary mapping metrics to values. + logits: predicted logits of the model. + """ + variables = {'params': train_state.params, **train_state.model_state} + + # Loop per example since decoding only works for single examples. + predicted_tokens, _, retr_top_image = ( + model.apply_with_autoregressive_decoding( + variables, + **batch, + num_decodes=num_decodes, + beam_search=beam_search, + debug=debug, + use_memory=True, + retrieve_local=model_config.retrieve_local, + ) + ) + + # The autoregressive decoder yields tokens. However, the metrics want + # logits. So make the predictions into one-hot predictions. + logits = common_utils.onehot(predicted_tokens, vocab_size) + metrics = metrics_fn(logits, batch) + + return metrics, retr_top_image, logits + + +def train_and_eval( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, + kb_datasets: Dict[str, dataset_utils.Dataset], +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + kb_datasets: dictionary of datasets served as knowledge base. + + Returns: + A tuple with: + * the state that has the state of training (including current + global_step, model_state, rng, and the optimizer) + * a dictionary with the train_summary + * a dictionary with the evaluation summary + """ + host_id = jax.process_index() + lead_host = host_id == 0 + # Build the loss_fn, metrics, and flax_model. + + model = model_cls(config, dataset.meta_data, kb_datasets=kb_datasets) + train_state, start_step, chrono, lr_fn = init_state( + model, dataset, config, workdir, rng, writer + ) + + logging.info('Complete initialization for %s. Start Training.', host_id) + train_state = jax_utils.replicate(train_state) + local_kb.set_encode_fn(flax_model=model.flax_model) + train_state = local_kb.update_memory( + train_state, + bsz=config.batch_size, + data_k=model.data_k, + retr_k=model.retr_k, + axis_index_groups=model.axis_index_groups, + ) + logging.info('Number of processes is %s', jax.process_count()) + + # Get the pmapped train and eval steps. + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function_dict, + metrics_fn=model.get_metrics_fn('train'), + debug=config.debug_train, + model_config=config.model, + ), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + debug=config.debug_eval, + model_config=config.model, + ), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1), + ) + train_summary, eval_summary, e_metrics = {}, {}, {} + eval_step_autoregressive_decoding_pmapped = jax.pmap( + functools.partial( + eval_step_autoregressive_decoding, + model=model, + metrics_fn=model.get_metrics_fn('validation'), + model_config=config.model, + vocab_size=config.vocab_size, + num_decodes=config.autoregressive_decoding.num_decodes, + beam_search=config.autoregressive_decoding.beam_search, + debug=config.debug_eval, + ), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1), + ) + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data + ) + log_eval_steps = config.get('log_eval_steps', steps_per_epoch) + checkpoint_steps = config.get('checkpoint_steps', steps_per_epoch) + log_summary_steps = config.get('log_summary_steps', log_eval_steps) + frozen_memory = config.get('frozen_memory', False) + + logging.info('Start training from step %d', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer + ) + hooks = [report_progress] + + # if config.get('xprof', True) and lead_host: + # hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + chrono.inform( + int(start_step), + int(total_steps), + int(config.batch_size), + int(steps_per_epoch), + ) + + summary_builder = trainer_utils.SummaryBuilder([], []) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + for step in range(start_step + 1, total_steps + 1): + if lead_host: + logging.info('training for step %d', step) + ###################### Training ######################## + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + inp_image_sample = np.asarray(train_batch['encoder_input_image'][0][0]) + train_batch['device_id'] = jnp.arange( + train_batch['encoder_input_image'].shape[0] + ) + train_state, t_metrics, logs, retr_top_image = train_step_pmapped( + train_state, train_batch + ) + retr_top_image = np.asarray(retr_top_image[0][0]) + for hook in hooks: + hook(step) + logs['learning_rate'] = lr_fn(step).reshape([-1, 1]) + summary_builder.update(metrics_update=t_metrics, extra_logs_update=logs) + jax.tree_util.tree_map(lambda h: h.delete(), train_batch) + if lead_host: + logging.info('finish training for step %d', step) + ###################### LOG TRAIN SUMMARY ######################## + if (step % log_summary_steps == 2) or (step == total_steps): + chrono.pause() + if lead_host: + logging.info('log training summary for step %d', step) + chrono.tick(step, writer, write_note) + writer.write_images( + step, + { + 'train/retr_image': np.expand_dims(retr_top_image, axis=0), + 'train/query_image': np.expand_dims(inp_image_sample, axis=0), + }, + ) + writer.flush() + train_summary = summary_builder.write(writer, step) + chrono.resume() + del inp_image_sample, retr_top_image + ################### EVALUATION ################################ + should_eval = (step % log_eval_steps == 2) or (step == total_steps) + if should_eval: + # update the KB memory + if not frozen_memory: + train_state = local_kb.update_memory( + train_state, + bsz=config.batch_size, + data_k=model.data_k, + retr_k=model.retr_k, + axis_index_groups=model.axis_index_groups, + ) + logging.info('Start validation!') + chrono.pause(wait_for=(train_state.params)) + # Sync model state across replicas. + for ds_name in dataset.valid_iter: + logging.info('Validate on %s', ds_name) + # Compute the number of evaluation steps per dataset. + num_eval_examples = dataset.meta_data['num_eval_examples'][ds_name] + total_eval_steps = int( + np.ceil(num_eval_examples / (config.get('eval_batch_size'))) + ) + steps_per_eval = config.get('steps_per_eval', total_eval_steps) + for test_mode in range(2): + eval_metrics_all = [] + eval_vqa_metrics_all = {} + for step_id in range(steps_per_eval): + eval_batch = next(dataset.valid_iter[ds_name]) + inp_image_sample = np.asarray( + eval_batch['encoder_input_image'][0][0] + ) + if test_mode == 0: + eval_batch['device_id'] = jnp.arange( + eval_batch['encoder_input_image'].shape[0] + ) + e_metrics, retr_top_image, predicted_logits = eval_step_pmapped( + train_state=train_state, batch=eval_batch + ) + eval_metrics_all.append(train_utils.unreplicate_and_get(e_metrics)) + # add vqa accuracy metric if it's a vqa dataset + if config.model.get('qa', False): + eval_vqa_metric_fn = model.get_vqa_metrics( + predicted_logits, eval_batch + ) + eval_vqa_metrics = eval_vqa_metric_fn.compute() + for key in eval_vqa_metrics: + eval_vqa_metrics_all.setdefault(key, 0.0) + eval_vqa_metrics_all[key] += eval_vqa_metrics[key] + + if test_mode == 0 and step_id == 0 and lead_host: + logging.info(e_metrics) + if ds_name == 'val_cc': + retr_top_image = np.asarray(retr_top_image[0][0]) + writer.write_images( + step, + { + 'eval/retr_image': np.expand_dims( + retr_top_image, axis=0 + ), + 'eval/query_image': np.expand_dims( + inp_image_sample, axis=0 + ), + }, + ) + writer.flush() + del retr_top_image + jax.tree_util.tree_map(lambda h: h.delete(), eval_batch) + del inp_image_sample + for key in eval_vqa_metrics_all: + eval_vqa_metrics_all[key] /= float(steps_per_eval) + if test_mode == 0: + eval_summary = train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics_all, + extra_eval_summary=eval_vqa_metrics_all, + writer=writer, + prefix=ds_name, + ) + else: + eval_summary = train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics_all, + extra_eval_summary=eval_vqa_metrics_all, + writer=writer, + prefix='random_retrieve_' + ds_name, + ) + # autoregressive eval + eval_metrics_all = [] + eval_vqa_metrics_all = {} + for step_id in range(steps_per_eval): + eval_batch = next(dataset.valid_iter[ds_name]) + eval_batch['device_id'] = jnp.arange( + eval_batch['encoder_input_image'].shape[0] + ) + logging.log_first_n( + logging.INFO, 'Peforming eval with autoregressive decode', 3 + ) + e_metrics, retr_top_image, predicted_logits = ( + eval_step_autoregressive_decoding_pmapped( + train_state=train_state, batch=eval_batch + ) + ) + eval_metrics_all.append(train_utils.unreplicate_and_get(e_metrics)) + # add vqa accuracy metric if it's a vqa dataset + if config.model.get('qa', False): + eval_vqa_metric_fn = model.get_vqa_metrics( + predicted_logits, eval_batch + ) + eval_vqa_metrics = eval_vqa_metric_fn.compute() + for key in eval_vqa_metrics: + eval_vqa_metrics_all.setdefault(key, 0.0) + eval_vqa_metrics_all[key] += eval_vqa_metrics[key] + for key in eval_vqa_metrics_all: + eval_vqa_metrics_all[key] /= float(steps_per_eval) + eval_summary = train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics_all, + extra_eval_summary=eval_vqa_metrics_all, + writer=writer, + prefix=ds_name + '_autoregressive', + ) + + chrono.resume() + gc.collect() + ##################### CHECKPOINTING ########################### + if not config.checkpoint: + continue + elif step % checkpoint_steps == 0 and step > 0 or (step == total_steps): + logging.info('Save checkpoint!') + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + if lead_host: + logging.info('checkpointing (training step: %d)', step) + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + unrep_train_state, mem = trainer_utils.pop_axes_names( + unrep_train_state, axes_name='memory' + ) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + train_utils.save_checkpoint(workdir, unrep_train_state) + del unrep_train_state, mem + chrono.resume() + logging.info('Checkpoint saved!') + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + + # Return the train and eval summary after last step. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/knowledge_visual_language/trainer_utils.py b/scenic/projects/knowledge_visual_language/trainer_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..3ef1906b470f2624a439cdec25b718fc6a3180ca --- /dev/null +++ b/scenic/projects/knowledge_visual_language/trainer_utils.py @@ -0,0 +1,397 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Train/eval/model utility functions.""" + +import dataclasses +import operator +import re +from typing import Any, Dict, List, Mapping, Optional, Tuple, Union + +from absl import logging +from big_vision import utils as bv_utils +from big_vision.models import vit as vit_model +from clu import metric_writers +import flax +from flax import jax_utils +from flax.core import frozen_dict +import jax +import jax.numpy as jnp +import ml_collections +import optax +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.projects.knowledge_visual_language.models import constants +from scenic.projects.t5 import model as t5_model +from scenic.train_lib import train_utils +from scenic.train_lib.train_utils import TrainState + +# Note this list must be in the exact order of the inputs required by the model. +PyTree = Union[Mapping[str, Mapping], Any] + + +def froze_param_optax( + params: optax.Params, + tx: optax.GradientTransformation, + frozen_patterns: Optional[List[str]] = None, + not_frozen_patterns: Optional[List[str]] = None, +) -> optax.GradientTransformation: + r"""change optax optimizer to not optimize frozen parameter. + + Args: + params: model parameter in FrozenDict (Tree) + tx: optax GradientTransform function + frozen_patterns: a list of re patterns for frozen parameter + not_frozen_patterns: a tupe of re patterns for trainable parameter with + scale + + Returns: + optax GradientTransform function that mask out frozen parameters. + + Example: + class Encoder(nn.Module): + @nn.compact + def __call__(self, x, train=True): + h = nn.Dense(8, name='dense_init')(x) + return nn.Dense(1, name='dense_output')(h) + + ......(after model initialization) + tx = optax.adamw(learning_rate=1e-3, weight_decay=1e-2) + tx = froze_param_optax(params=params, tx = tx,\ + frozen_patterns=["params/dense_init/.*"]) + opt_state = tx.init(params) + ...... + """ + if frozen_patterns and not_frozen_patterns is None: + frozen_masks = bv_utils.make_mask_trees(params, frozen_patterns) + frozen_mask = jax.tree_util.tree_map( + lambda *bools: any(bools), *frozen_masks + ) + not_frozen_mask = jax.tree_util.tree_map(operator.not_, frozen_mask) + tx = optax.chain( + optax.masked(tx, not_frozen_mask), + optax.masked(optax.set_to_zero(), frozen_mask)) + elif not_frozen_patterns: + not_frozen_keys = [] + scale_vals = [] + for pattern, val in not_frozen_patterns: + if frozen_patterns is not None and pattern in frozen_patterns: + continue + not_frozen_keys += [pattern] + scale_vals += [val] + not_frozen_masks = bv_utils.make_mask_trees(params, not_frozen_keys) + not_frozen_mask = jax.tree_util.tree_map( + lambda *bools: any(bools), *not_frozen_masks + ) + frozen_mask = jax.tree_util.tree_map(operator.not_, not_frozen_mask) + scale_txs = [ + optax.masked(optax.scale(scale_val), mask) # pytype: disable=wrong-arg-types + for scale_val, mask in zip(scale_vals, not_frozen_masks) + ] + tx = optax.chain( + optax.masked(tx, not_frozen_mask), + optax.masked(optax.set_to_zero(), frozen_mask), *scale_txs) + return tx + + +def update_config(config: ml_collections.ConfigDict, meta_data: Dict[str, Any]): + config.num_train_examples = meta_data['num_train_examples'] + steps_per_epoch = config.num_train_examples // config.batch_size + config.lr_configs.total_steps = int(config.num_training_epochs * + steps_per_epoch) + + +def get_dataset( + config: ml_collections.ConfigDict, + data_rng: jnp.ndarray, + *, + dataset_service_address: Optional[str] = None, + dataset_name: Optional[str] = None, + dataset_configs: Optional[ml_collections.ConfigDict] = None +) -> dataset_utils.Dataset: + """Creates dataset. + + Copy from scenic.train_lib.train_utils.get_dataset. Only use` + this alternative function when your dataset is not registered in + secnic library, and you need to add dependency into BUILD. + + By default, the values in the config file are used. + However, if the optional `dataset_name` and `dataset_configs` are passed, + those are used instead. + + Args: + config: The configuration of the experiment. + data_rng: Random number generator key to use for the dataset. + dataset_service_address: Used when using the tf.data.experimental.service + dataset_name: Name of dataset to load, if not reading from the config. + dataset_configs: Configuration of the dataset, if not reading directly from + the config. + + Returns: + A dataset_utils.Dataset object. + """ + device_count = jax.device_count() + logging.info('device_count: %d', device_count) + logging.info('num_hosts : %d', jax.process_count()) + logging.info('host_id : %d', jax.process_index()) + + dataset_name = dataset_name or config.dataset_name + dataset_builder = datasets.get_dataset(dataset_name) + + batch_size = config.batch_size + if batch_size % device_count > 0: + raise ValueError(f'Batch size ({batch_size}) must be divisible by the ' + f'number of devices ({device_count})') + + eval_batch_size = config.get('eval_batch_size', batch_size) + if eval_batch_size % device_count > 0: + raise ValueError(f'Eval batch size ({eval_batch_size}) must be divisible ' + f'by the number of devices ({device_count})') + + local_batch_size = batch_size // jax.process_count() + eval_local_batch_size = eval_batch_size // jax.process_count() + device_batch_size = batch_size // device_count + logging.info('local_batch_size : %d', local_batch_size) + logging.info('device_batch_size : %d', device_batch_size) + + shuffle_seed = config.get('shuffle_seed', None) + if dataset_service_address and shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you want ' + 'to run with dataset service.') + + dataset_configs = dataset_configs or config.get('dataset_configs') + dataset = dataset_builder( + batch_size=local_batch_size, + eval_batch_size=eval_local_batch_size, + num_shards=jax.local_device_count(), + dtype_str=config.data_dtype_str, + rng=data_rng, + shuffle_seed=shuffle_seed, + dataset_configs=dataset_configs, + dataset_service_address=dataset_service_address) + return dataset + + +@dataclasses.dataclass +class SummaryBuilder: + """A helper class to build the summary over the training iterations.""" + metrics: List[Dict[str, Tuple[float, int]]] + extra_logs: List[Dict[str, Any]] + + def update(self, metrics_update, extra_logs_update): + """Update with the given per-step metrics.""" + self.metrics.append(metrics_update) + self.extra_logs.append(extra_logs_update) + + def write(self, writer: metric_writers.MetricWriter, step: int): + """Write to the given writer and training step. + + After writing, the state gets reset. + + Args: + writer: The summary will be written with this writer. + step: The current training step. + + Returns: + The summary since the last write. + """ + summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + self.metrics), + extra_training_logs=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, self.extra_logs), + writer=writer, + key_separator='/') + self.metrics = [] + self.extra_logs = [] + return summary + + +def all_gather_and_unreplicate(tensor): + return jax_utils.unreplicate( + jax.pmap(lambda x: jax.lax.all_gather(x, 'batch'), 'batch')(tensor)) + + +def replace_dict(model: PyTree, + restored: PyTree, + ckpt_prefix_path: Optional[List[str]] = None, + model_prefix_path: Optional[List[str]] = None, + name_mapping: Optional[Mapping[str, str]] = None, + skip_regex: Optional[str] = None) -> PyTree: + """Replaces values in model dictionary with restored ones from checkpoint.""" + model = flax.core.unfreeze(model) # pytype: disable=wrong-arg-types + restored = flax.core.unfreeze(restored) # pytype: disable=wrong-arg-types + + if ckpt_prefix_path: + for p in ckpt_prefix_path: + restored = restored[p] + + if model_prefix_path: + for p in reversed(model_prefix_path): + restored = {p: restored} + + # Flatten nested parameters to a dict of str -> tensor. Keys are tuples + # from the path in the nested dictionary to the specific tensor. E.g., + # {'a1': {'b1': t1, 'b2': t2}, 'a2': t3} + # -> {('a1', 'b1'): t1, ('a1', 'b2'): t2, ('a2',): t3}. + restored_flat = flax.traverse_util.flatten_dict( + dict(restored), keep_empty_nodes=True) + model_flat = flax.traverse_util.flatten_dict( + dict(model), keep_empty_nodes=True) + + for m_key, m_params in restored_flat.items(): + # pytype: disable=attribute-error + for name, to_replace in name_mapping.items(): + m_key = tuple(to_replace if k == name else k for k in m_key) + # pytype: enable=attribute-error + m_key_str = '/'.join(m_key) + if m_key not in model_flat: + logging.warning('%s in checkpoint doesn\'t exist in model. Skip.', + m_key_str) + continue + if skip_regex and re.findall(skip_regex, m_key_str): + logging.info('Skip loading parameter %s.', m_key_str) + continue + logging.info('Loading %s from checkpoint into model', m_key_str) + model_flat[m_key] = m_params + + return flax.core.freeze(flax.traverse_util.unflatten_dict(model_flat)) + + +def pop_axes_names( + train_state: TrainState, + axes_name: str = 'params_axes') -> Tuple[TrainState, Optional[Any]]: + """Removes axes_names from model_state for a train state. + + Args: + train_state: Training state. + axes_name: the string specifying the name in the model_state + + Returns: + New train state without axes_names in model_state, axes_names metadata if it + was removed (so it can be re-added). + """ + model_state = train_state.model_state + if axes_name in train_state.model_state: + model_state, params_axes = frozen_dict.freeze(model_state).pop(axes_name) + return train_state.replace(model_state=model_state), params_axes + else: + return train_state, None + + +def re_add_axis_names(train_state: TrainState, + params_axes: Any, + axes_name: str = 'params_axes') -> TrainState: + """Adds axes_names to model_state for a train state. + + Args: + train_state: Training state. + params_axes: Model axes metadata to re-add. + axes_name: the string specifying the name in the model_state + + Returns: + New train state without axes_names in model_state, axes_names metadata if it + was removed (so it can be re-added). + """ + if params_axes: + model_state = frozen_dict.unfreeze(train_state.model_state) + model_state[axes_name] = params_axes + return train_state.replace(model_state=frozen_dict.freeze(model_state)) + else: + return train_state + + +def load_key_params(params: constants.PyTree, + config: ml_collections.ConfigDict): + """Load T5 & ViT for Key Encoders.""" + t5_params = t5_model.load_pretrained_weights(config.model.t5_name) + if 'key_text_encoder' in params: + params = replace_dict( + params, + t5_params, + ckpt_prefix_path=['params', 't5_module', 'encoder'], + model_prefix_path=['key_text_encoder'], + name_mapping={}) + return params + + +def load_text_params(params: constants.PyTree, + config: ml_collections.ConfigDict): + """Load T5 params from a checkpoint.""" + t5_params = t5_model.load_pretrained_weights(config.model.t5_name) + logging.info('T5 params are:') + logging.info(jax.tree_util.tree_map(lambda x: x.shape, t5_params)) + # first load the shared token embeddings + + params = replace_dict( + params, + t5_params, + ckpt_prefix_path=['params', 't5_module', 'token_embedder'], + model_prefix_path=['shared_token_embedder'], + name_mapping={}) + + # then load the encoder and decoder weights + params = replace_dict( + params, + t5_params, + ckpt_prefix_path=['params', 't5_module', 'encoder'], + model_prefix_path=['text_encoder'], + name_mapping={}) + + params = replace_dict( + params, + t5_params, + ckpt_prefix_path=['params', 't5_module', 'encoder'], + model_prefix_path=['fusion_encoder'], + name_mapping={}) + + params = replace_dict( + params, + t5_params, + ckpt_prefix_path=['params', 't5_module', 'encoder'], + model_prefix_path=['query_head'], + name_mapping={}) + + params = replace_dict( + params, + t5_params, + ckpt_prefix_path=['params', 't5_module', 'encoder'], + model_prefix_path=['key_head'], + name_mapping={}) + + params = replace_dict( + params, + t5_params, + ckpt_prefix_path=['params', 't5_module', 'decoder'], + model_prefix_path=['out_decoder', 'decoder_module'], + name_mapping={}) + + return params + + +def load_visual_params(params: constants.PyTree, + config: ml_collections.ConfigDict): + """Load encoder parameters.""" + load_params = vit_model.load( + init_params=params.get('img_encoder'), + init_file=config.model.vit_model_path, + model_cfg='', + dont_load='MAPHead(.+)|head(.+)') + + params = replace_dict( + params, load_params, model_prefix_path=['img_encoder'], name_mapping={}) + return params diff --git a/scenic/projects/lang4video/__init__.py b/scenic/projects/lang4video/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/lang4video/configs/__init__.py b/scenic/projects/lang4video/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/lang4video/configs/datasets/__init__.py b/scenic/projects/lang4video/configs/datasets/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/lang4video/configs/train/__init__.py b/scenic/projects/lang4video/configs/train/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/lang4video/configs/zero_shot/__init__.py b/scenic/projects/lang4video/configs/zero_shot/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/lang4video/model/__init__.py b/scenic/projects/lang4video/model/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/lang4video/trainer/__init__.py b/scenic/projects/lang4video/trainer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/layout_denoise/README.md b/scenic/projects/layout_denoise/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e1a0c6c056702d2f4adbc4ca4c896062368d52ca --- /dev/null +++ b/scenic/projects/layout_denoise/README.md @@ -0,0 +1,43 @@ +CLAY: Learning to Denoise Raw Mobile UI Layouts for Improving Datasets at Scale +== + +The CLAY pipeline is used to denoise raw mobile UI layouts by removing invalid +objects and assigning semantically meaningful types to the valid objects. This +repo hosts the codes for the Transformer-based object typing model. The CLAY +dataset used to train and evaluate the models can be downloaded +[here](https://github.com/google-research-datasets/clay). +Details can be found in the [paper](https://arxiv.org/abs/2201.04100). + +## Getting Started + +CLAY object typing model and training jobs are defined by [configuration files](configs). + +To start, generate the training dataset according to [here](https://github.com/google-research/google-research/tree/master/clay). + +An example command-line to train the object typing model using this [config file](configs/detr.py) +is + +``` +python scenic/projects/layout_denoise/main.py -- \ + --config=scenic/projects/layout_denoise/configs/detr.py \ + --workdir=clay_object_typing_model/ +``` + +## Reference + +If you use CLAY, please cite our paper: + +``` +@InProceedings{clay, + title = "Learning to Denoise Raw Mobile UI Layouts for Improving Datasets at Scale", + booktitle = "Proceedings of the 2022 {CHI} Conference on Human Factors in + Computing Systems", + author = "Li, Gang and Baechler, Gilles and Tragut, Manuel and Li, Yang", + publisher = "Association for Computing Machinery", + pages = "1--13", + month = may, + year = 2022, + address = "New Orleans, LA, USA", + url = {https://doi.org/10.1145/3491102.3502042} +} +``` diff --git a/scenic/projects/layout_denoise/__init__.py b/scenic/projects/layout_denoise/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/layout_denoise/base_model.py b/scenic/projects/layout_denoise/base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..5d8d996ed7154f2e3ce0bc15538c3fd4555fa20b --- /dev/null +++ b/scenic/projects/layout_denoise/base_model.py @@ -0,0 +1,191 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class for layout denoise model.""" + +from typing import Any, Dict, Optional, Tuple + +from absl import logging +import jax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils + +ArrayDict = Dict[str, jnp.ndarray] +MetricsDict = Dict[str, Tuple[jnp.ndarray, jnp.ndarray]] + + +class LayoutDenoiseBaseModel(base_model.BaseModel): + """Base model for object detection with matching.""" + + def __init__(self, config: ml_collections.ConfigDict, + dataset_meta_data: Dict[str, Dict[str, Any]]): + """Initialize Detection model. + + Args: + config: Configurations of the model. + dataset_meta_data: Dataset meta data specifies `target_is_onehot`, which + is False by default, and a required `num_classes`, which is the number + of object classes including background/unlabeled/padding. The padded + objects have label 0. The first legitimate object has label 1, and so + on. + """ + del dataset_meta_data + if config is not None: + self.loss_terms_weights = { + 'loss_ce': config.class_loss_coef, + } + + if config is None: + logging.warning('You are creating the model with default config.') + config = self.default_flax_model_config() + self.config = config + self.target_is_onehot = False + self.flax_model = self.build_flax_model() + + def label_losses_and_metrics(self, + outputs: ArrayDict, + batch: ArrayDict, + log: bool = True) -> Tuple[Any, MetricsDict]: + """Classification softmax cross entropy loss. + + Args: + outputs: Model predictions. For the purpose of this loss, outputs must + have key 'pred_logits'. outputs['pred_logits'] is a nd-array of the + predicted pre-softmax logits of shape [batch-size, num-objects, + num-classes]. + batch: Dict that has 'inputs', 'batch_mask' and, 'label' (ground truth). + batch['label'] is a dict. For the purpose of this loss, label dict must + have key 'labels', which the value is an int nd-array of labels. It may + be one-hot if dataset_meta_data.target_is_onehot was set to True. If + batch['batch_mask'] is provided it is used to weight the loss for + different images in the current batch of examples. + log: If true, return class_error as well. + + Returns: + loss: Dict with keys 'loss_ce'. + metrics: Dict with keys 'loss_ce' and 'class_error`. + """ + assert 'pred_logits' in outputs + assert 'label' in batch + + metrics = {} + batch_weights = batch.get('batch_mask') + targets = batch['label']['labels'] + + # Shape: [batch, 101, 101] + src_logits = jax.nn.log_softmax(outputs['pred_logits']) + + tgt_labels_weights = targets != 0 + tgt_labels_onehot = jax.nn.one_hot(targets, + self.config.get('num_classes', 25)) + tgt_labels_onehot *= tgt_labels_weights[..., None] + + # For predicted bbox that don't have a matched parent id, the weight is 0. + # Shape: [batch, num_matched] + weights = tgt_labels_weights + if batch_weights is not None: + weights *= batch_weights[..., None] + + label_weights = [0.0] + [1.0] * (self.config.get('num_classes') - 1) + label_weights = jnp.array(label_weights) + + unnormalized_loss_ce = model_utils.weighted_unnormalized_softmax_cross_entropy( + src_logits, + tgt_labels_onehot, + weights=weights, + logits_normalized=True, + label_smoothing=self.config.label_smoothing) + + denom = tgt_labels_onehot.sum(axis=[1, 2]) + if batch_weights is not None: + denom *= batch_weights + + norm_type = self.config.get('normalization', 'detr') + if norm_type == 'detr': + denom = denom.sum() + normalized_loss_ce = unnormalized_loss_ce.sum() / jnp.maximum(denom, 1.) + elif norm_type == 'global': + denom = jax.lax.pmean(denom.sum(), axis_name='batch') + normalized_loss_ce = unnormalized_loss_ce.sum() / jnp.maximum(denom, 1.) + elif norm_type == 'per_example': + normalized_loss_ce = unnormalized_loss_ce.sum(axis=1) + normalized_loss_ce = (normalized_loss_ce / jnp.maximum(denom, 1.)).mean() + else: + raise ValueError(f'Unknown normalization {norm_type}.') + + metrics['loss_ce'] = (unnormalized_loss_ce.sum(), denom.sum()) + + if log: + # For normalization, we need to have number of inputs that we do + # prediction for, which is number of predicted boxes that have a matched + # parent id. + batch_num_inputs = weights.sum() + # We are not using the eos_coef for accuracy computation + num_correct = model_utils.weighted_correctly_classified( + src_logits, tgt_labels_onehot, weights=weights) + # For the evaluation, we will globally (across replicas) normalize the + # num_correct to get the accuracy. The caller will do the normalization, + # so we dont normalize and simply collect the sums here. + metrics['label_accuracy'] = (num_correct, batch_num_inputs) + + # Sum metrics and normalizers over all replicas. + for k, v in metrics.items(): + metrics[k] = model_utils.psum_metric_normalizer(v) + return normalized_loss_ce, metrics + + def loss_function( # pytype: disable=signature-mismatch # overriding-parameter-count-checks + self, + outputs: ArrayDict, + batch: ArrayDict, + task: str, + model_params: Optional[jnp.ndarray] = None + ) -> Tuple[jnp.ndarray, MetricsDict]: + """Loss and metrics function.""" + if task == 'layout_denoise': + total_loss, metrics = self.label_losses_and_metrics( + outputs=outputs, batch=batch) + + aux_outputs = outputs.get('aux_outputs', []) + for i, aux_outputs in enumerate(aux_outputs): + aux_loss_ce, aux_metrics = self.label_losses_and_metrics( + outputs=aux_outputs, batch=batch) + # add metrics for aux outputs + metrics.update({k + f'_aux_{i}': v for k, v in aux_metrics.items()}) + total_loss += aux_loss_ce + + if self.config.get('l2_decay_factor') is not None: + l2_loss = model_utils.l2_regularization(model_params) + metrics['l2_loss'] = (l2_loss, 1) + total_loss = total_loss + 0.5 * self.config.l2_decay_factor * l2_loss + + # Process metrics dictionary to generate final unnormalized metrics + metrics['minibatch_object_detection_loss'] = (total_loss, 1) + return total_loss, metrics # pytype: disable=bad-return-type # jax-ndarray + else: + raise ValueError('Unsupported task %s' % task) + + def build_flax_model(self): + raise NotImplementedError('Subclasses must implement build_flax_module().') + + def default_flax_model_config(self): + """Default config for the flax model that is built in `build_flax_model`. + + This function in particular serves the testing functions and supposed to + provide config tha are passed to the flax_model when it's build in + `build_flax_model` function, e.g., `model_dtype_str`. + """ + raise NotImplementedError( + 'Subclasses must implement default_flax_model_config().') diff --git a/scenic/projects/layout_denoise/configs/__init__.py b/scenic/projects/layout_denoise/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/layout_denoise/configs/dataset_config.py b/scenic/projects/layout_denoise/configs/dataset_config.py new file mode 100644 index 0000000000000000000000000000000000000000..37480ed9e250c288ba0a2ca6cff8bee9d2a1efc4 --- /dev/null +++ b/scenic/projects/layout_denoise/configs/dataset_config.py @@ -0,0 +1,46 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implements common configs for layout denoise datasets.""" + +import ml_collections + +TRAIN_SIZE = { + 'rico': 44629, +} + +EVAL_SIZE = { + 'rico': 6207, +} + + +def get_config(data_name='rico', shuffle_buffer_size=10_000, use_inner=True): + """Returns configs for a datset given its name.""" + dataset_configs = ml_collections.ConfigDict() + dataset_configs.shuffle_buffer_size = shuffle_buffer_size + dataset_configs.prefetch_to_device = 5 + dataset_configs.use_inner = use_inner + + if data_name == 'rico': + # Add path to training files containing tf.Example. + dataset_configs.train_files = ['/path/to/train_tfexample'] + # Add path to eval (validation) files containing tf.Example. + dataset_configs.eval_files = ['/path/to/eval_tfexample'] + + dataset_configs.dataset_name = data_name + dataset_configs.task_name = 'layout_denoise' + dataset_configs.num_train_examples = TRAIN_SIZE[data_name] + dataset_configs.num_eval_examples = EVAL_SIZE[data_name] + dataset_configs.data_dtype_str = 'float32' + return dataset_configs diff --git a/scenic/projects/layout_denoise/configs/detr.py b/scenic/projects/layout_denoise/configs/detr.py new file mode 100644 index 0000000000000000000000000000000000000000..ea2d2d65e9009e61b038500b9fa5c38e979fd549 --- /dev/null +++ b/scenic/projects/layout_denoise/configs/detr.py @@ -0,0 +1,143 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""A config for training layout_ denoise model. + +""" +import copy +import ml_collections +from scenic.projects.layout_denoise.configs import dataset_config + + +def get_config(): + """Config for training on ui_layout with layout_vit.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'LayoutDenoise' + shuffle_buffer_size = 5_000 + config.datasets = {} + config.dataset_names = [ + 'rico', + ] + config.total_steps = 15_000 + config.dataset_weight_stages = [config.total_steps] + config.dataset_weights = [[ + 1, + ] * len(config.dataset_names)] + config.use_inner = True + # PADDING + BACKGROUND + 24 layout classes. + config.num_classes = 26 + for d_name in config.dataset_names: + config.datasets[d_name] = dataset_config.get_config( + d_name, + shuffle_buffer_size=shuffle_buffer_size // len(config.dataset_names), + use_inner=config.use_inner) + + # Model. + config.model_name = 'layout_denoise' + # model_type can be `full`, `vh_only` or `mlp`. + config.model_type = 'full' + config.binary_task = False + config.binary_label_weight = 5.0 + config.model_dtype_str = 'float32' + config.hidden_dim = 256 + config.vocab_size = 28_536 + # Add path to the vocab here: + config.vocab_path = ('') + config.grid_size = 32 + config.grid_rows = 34 + config.grid_cols = 34 + config.num_masks = 10 + config.image_range = config.grid_rows * config.grid_cols + config.max_num_boxes = 128 + config.max_image_size = 1080 + config.modal_ranges = [ + config.image_range, config.image_range + config.max_num_boxes + ] + config.query_emb_size = None # Same as hidden_size. + config.transformer_num_heads = 8 + config.transformer_num_encoder_layers = 6 + config.transformer_num_decoder_layers = 6 + config.transformer_qkv_dim = 256 + config.transformer_mlp_dim = 2048 + config.transformer_normalize_before = False + config.backbone_num_filters = 64 + config.backbone_num_layers = 50 + config.class_dropout_rate = .0 + config.dropout_rate = 0.2 + config.attention_dropout_rate = 0.2 + config.pos_pattern = '1/4' + + # Loss. + config.aux_loss = True + config.class_loss_coef = 1.0 + # Training. + config.trainer_name = 'layout_denoise_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.weight_decay = 1e-4 + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.max_grad_norm = 0.1 + config.label_smoothing = 0.1 + config.num_training_epochs = 200 + config.batch_size = 128 + config.eval_batch_size = 32 + config.rng_seed = 0 + # Learning rate. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*piecewise_constant' + config.lr_configs.decay_events = [ + 5_000, + ] + # note: this is absolute (not relative): + config.lr_configs.decay_factors = [.1] + config.lr_configs.base_learning_rate = 1e-4 + + # backbone traiing configs: optimizer and learning rate + config.backbone_training = ml_collections.ConfigDict() + config.backbone_training.optimizer = copy.deepcopy(config.optimizer) + config.backbone_training.optimizer_configs = copy.deepcopy( + config.optimizer_configs) + config.backbone_training.lr_configs = copy.deepcopy(config.lr_configs) + config.backbone_training.lr_configs.base_learning_rate = 6e-5 + config.l2_decay_factor = .000001 + + # pretrained_backbone + # TODO(dehghani): use pretrain_utils and clean up this part + config.load_pretrained_backbone = True + config.freeze_backbone_batch_stats = True + config.pretrained_backbone_configs = ml_collections.ConfigDict() + config.pretrained_backbone_configs.xm = (18140063, 1) + config.pretrained_backbone_configs.checkpoint_path = None + # Logging. + config.eval_ngram_list = [1] + config.run_coco_evaluation = True # Run evaluation using. + config.write_summary = True + config.xprof = False # Profile using xprof. + config.log_summary_steps = 100 # train summary steps + config.log_large_summary_steps = 1000 + config.log_eval_steps = 1000 + config.checkpoint_steps = 1000 + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.eval_synchronously = False + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/layout_denoise/datasets/__init__.py b/scenic/projects/layout_denoise/datasets/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/layout_denoise/datasets/dataset.py b/scenic/projects/layout_denoise/datasets/dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..99fbce5e5703b98008f9f1f0ea43981792f0d746 --- /dev/null +++ b/scenic/projects/layout_denoise/datasets/dataset.py @@ -0,0 +1,369 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the uicomplete dataset.""" + +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.projects.baselines.detr import transforms +from scenic.projects.layout_denoise.datasets import parsers +import tensorflow as tf + +# Computed from the coco training set by taking the per-channel mean/std-dev +# over sample, height and width axes of all training samples. +MEAN_RGB = [0.48, 0.456, 0.406] +STDDEV_RGB = [0.229, 0.224, 0.225] + +LAYOUT_LABEL_MAP = { + 0: 'INVALID', + 1: 'IMAGE', + 2: 'PICTOGRAM', + 3: 'BUTTON', + 4: 'TEXT', + 5: 'LABEL', + 6: 'TEXT_INPUT', + 7: 'MAP', + 8: 'CHECK_BOX', + 9: 'SWITCH', + 10: 'PAGER_INDICATOR', + 11: 'SLIDER', + 12: 'RADIO_BUTTON', + 13: 'SPINNER', + 14: 'PROGRESS_BAR', + 15: 'ADVERTISEMENT', + 16: 'DRAWER', + 17: 'NAVIGATION_BAR', + 18: 'TOOLBAR', + 19: 'LIST_ITEM', + 20: 'CARD_VIEW', + 21: 'CONTAINER', + 22: 'DATE_PICKER', + 23: 'NUMBER_STEPPER', +} + + +def preprocess_fn(max_size=1333, train=True): + """Returns a preprocessing function that operates on inputs and labels.""" + scales = [480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800] + if not train: + scales = [800] + ratio = max_size / 1333. + + scales = [int(s * ratio) for s in scales] + + normalize_boxes = transforms.NormalizeBoxes() + init_padding_mask = transforms.InitPaddingMask() + + return transforms.Compose([ + transforms.RandomResize(scales, max_size=max_size), normalize_boxes, + init_padding_mask + ]) + + +def decode_layout_example(example, input_range=None, add_node_id=False): + """Given an instance and raw labels, creates pair. + + Decoding includes. + 1. Converting images from uint8 [0, 255] to [0, 1.] float32. + 2. Mean subtraction and standardization using hard-coded mean and std. + 3. Convert boxes from yxyx [0-1] to xyxy un-normalized. + 4. Add 1 to all labels to account for background/padding object at label 0. + 5. Shuffling dictionary keys to be consistent with the rest of the code. + + Args: + example: dict; Input image and raw labels. + input_range: tuple; Range of input. By default we use Mean and StdDev + normalization. + add_node_id: bool; Whether to add the node id feature. + + Returns: + A dictionary of {'inputs': input image, 'labels': task label}. + """ + image = tf.image.convert_image_dtype(example['image'], dtype=tf.float32) + + # Normalize. + if input_range: + image = image * (input_range[1] - input_range[0]) + input_range[0] + else: + mean_rgb = tf.constant(MEAN_RGB, shape=[1, 1, 3], dtype=tf.float32) + std_rgb = tf.constant(STDDEV_RGB, shape=[1, 1, 3], dtype=tf.float32) + image = (image - mean_rgb) / std_rgb + + boxes = example['objects']['boxes'] + + target = { + 'boxes': boxes, + 'labels': example['objects']['label'] + 1, # 0'th class is padding. + 'binary_labels': example['objects']['binary_label'] + 1, + 'desc_id': example['objects']['desc_id'], + 'resource_id': example['objects']['resource_id'], + 'name_id': example['objects']['name_id'], + 'obj_mask': example['objects']['obj_mask'], + } + if add_node_id: + target.update({ + 'node_id': example['objects']['node_id'], + }) + + # Filters objects to exclude degenerate boxes. + valid_bbx = tf.logical_and(boxes[:, 2] > boxes[:, 0], + boxes[:, 3] > boxes[:, 1]) + # -1 is ROOT node, remove it for training & eval. + valid_node = tf.greater(example['objects']['label'], -1) + keep = tf.where(tf.logical_and(valid_bbx, valid_node))[:, 0] + target_kept = {k: tf.gather(v, keep) for k, v in target.items()} + + target_kept['orig_size'] = tf.cast(tf.shape(image)[0:2], dtype=tf.int32) + target_kept['size'] = tf.identity(target_kept['orig_size']) + return { + 'inputs': image, + 'label': target_kept, + } + + +def _filter_tree_size(example, max_num_boxes): + """The dataset filter fn.""" + return tf.less_equal(tf.size(example['objects']['label']), max_num_boxes) + + +def _filter_invalid_bbx(example): + valid_box = tf.reduce_all(tf.greater(example['label']['boxes'][:, 2:], 0)) + least_num_boxes = tf.greater(tf.size(example['label']['boxes']), 3) + return tf.logical_and(valid_box, least_num_boxes) + + +def get_data_split(ds, host_id, host_count, data_length): + """Return a (sub)split adapted to a given host.""" + full_start = 0 + full_end = data_length + examples_per_host = (full_end - full_start) // host_count + host_start = full_start + examples_per_host * host_id + host_end = full_start + examples_per_host * (host_id + 1) + ds = ds.skip(host_start) + ds = ds.take(host_end - host_start) + return ds + + +def load_dataset(file_patterns, + dataset_configs, + max_num_boxes, + num_examples, + cache=False): + """Loads a split from the COCO dataset using TensorFlow Datasets. + + Args: + file_patterns: the data file patterns. + dataset_configs: the dataset_configs dict. + max_num_boxes: the maximum number of boxes allowed. + num_examples: the number of examples in the data. + cache: bool; whether to use the ds.cache or nor. + + Returns: + A `tf.data.Dataset`, and dataset info. + """ + del num_examples + + if not isinstance(file_patterns, (list,)): + file_patterns = [file_patterns] + data_files = [tf.io.matching_files(f) for f in file_patterns] + logging.info('File patterns: %s', file_patterns) + logging.info('Data files: %s', data_files) + ds = tf.data.Dataset.from_tensor_slices(data_files) + ds = ds.interleave( + tf.data.Dataset.from_tensor_slices, + num_parallel_calls=tf.data.AUTOTUNE, + deterministic=True) + + # Each host is responsible for a fixed subset of data. We shard based on the + # input files. + num_data_files = sum([int(files.shape[0]) for files in data_files]) + logging.info('Number of data files: %d (before split)', num_data_files) + assert num_data_files > jax.process_count(), ( + 'Number of files must be larger ' + 'than the number of hosts.') + ds = get_data_split(ds, jax.process_index(), jax.process_count(), + num_data_files) + + ds = ds.interleave( + tf.data.TFRecordDataset, + num_parallel_calls=tf.data.AUTOTUNE, + deterministic=False) + + def parse_fn(v): + return parsers.parse(v) + + ds = ds.map(parse_fn, num_parallel_calls=tf.data.AUTOTUNE) + filter_fn = functools.partial( + _filter_tree_size, max_num_boxes=max_num_boxes - 1) + ds = ds.filter(filter_fn) + options = tf.data.Options() + options.experimental_threading.private_threadpool_size = 48 + ds = ds.with_options(options) + decode_fn = functools.partial( + decode_layout_example, input_range=dataset_configs.get('input_range')) + ds = ds.map(decode_fn, num_parallel_calls=tf.data.AUTOTUNE) + if cache: + ds = ds.cache() + return ds + + +@datasets.add_dataset('layout_denoise') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + config=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for UIcomplete train, validation and test set. + + Args: + batch_size: the train batch size. + eval_batch_size: the eval batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image. Only 'float32' is currently supported. + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + config: the overall config. + dataset_configs: the dataset config. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + if dataset_service_address: + raise ValueError('Dataset service is not supported for this dataset yet.') + + assert dtype_str == 'float32', ( + f'coco_detr_dataset invoked with unsupported dtype_str: {dtype_str}') + del dtype_str + + config = config or ml_collections.ConfigDict({ + # These can be used for testing the dataset: + 'max_num_boxes': 50, + 'max_image_size': 1333, + }) + + max_size = config.max_image_size + max_num_boxes = config.max_num_boxes + train_ds = load_dataset( + dataset_configs['train_files'], + dataset_configs, + max_num_boxes=max_num_boxes, + num_examples=dataset_configs['num_train_examples'], + cache=False) + eval_ds = load_dataset( + dataset_configs['eval_files'], + dataset_configs, + max_num_boxes=max_num_boxes, + num_examples=dataset_configs['num_eval_examples'], + cache=False) + + padded_shapes = { + 'inputs': [max_size, max_size, 3], + 'padding_mask': [max_size, max_size], + 'label': { + 'boxes': [max_num_boxes, 4], + 'labels': [max_num_boxes,], + 'binary_labels': [max_num_boxes,], + 'orig_size': [2,], + 'size': [2,], + 'desc_id': [max_num_boxes, 10], + 'resource_id': [max_num_boxes, 10], + 'name_id': [max_num_boxes, 10], + 'obj_mask': [max_num_boxes,], + } + } + + def _shuffle_batch(ds, bs, train): + if train: + # First repeat then batch. + ds = ds.shuffle( + dataset_configs.get('shuffle_buffer_size', 1000), seed=shuffle_seed) + ds = ds.repeat() + # Augmentation should be done after repeat for true randomness. + ds = ds.map( + preprocess_fn(max_size=max_size, train=True), + num_parallel_calls=tf.data.AUTOTUNE) + ds = ds.filter(_filter_invalid_bbx) + ds = ds.padded_batch(bs, padded_shapes=padded_shapes, drop_remainder=True) + + else: + ds = ds.map( + preprocess_fn(max_size=max_size, train=False), + num_parallel_calls=tf.data.AUTOTUNE) + ds = ds.filter(_filter_invalid_bbx) + # First batch then repeat. + ds = ds.padded_batch( + bs, padded_shapes=padded_shapes, drop_remainder=False) + ds = ds.repeat() + + ds = ds.prefetch(tf.data.AUTOTUNE) + return ds + + eval_ds = _shuffle_batch(eval_ds, eval_batch_size, train=False) + train_ds = _shuffle_batch(train_ds, batch_size, train=True) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + if dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + train_iter = jax_utils.prefetch_to_device( + train_iter, dataset_configs.get('prefetch_to_device')) + + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + eval_iter = map(shard_batches, eval_iter) + + meta_data = { + 'task_name': dataset_configs['task_name'], + 'input_shape': (-1, max_size, max_size, 3), + 'input_dtype': jnp.float32, + 'obj_bbx_shape': (-1, max_num_boxes, 4), + 'obj_bbx_dtype': jnp.float32, + 'obj_desc_id_shape': (-1, max_num_boxes, parsers.MAX_WORD_NUM), + 'obj_desc_id_dtype': jnp.int32, + 'obj_resource_id_shape': (-1, max_num_boxes, parsers.MAX_WORD_NUM), + 'obj_resource_id_dtype': jnp.int32, + 'obj_name_id_shape': (-1, max_num_boxes, parsers.MAX_WORD_NUM), + 'obj_name_id_dtype': jnp.int32, + 'obj_mask_shape': (-1, max_num_boxes), + 'obj_mask_dtype': jnp.int32, + 'num_train_examples': dataset_configs.num_train_examples, + 'num_eval_examples': dataset_configs.num_eval_examples, + } + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) diff --git a/scenic/projects/layout_denoise/datasets/parsers.py b/scenic/projects/layout_denoise/datasets/parsers.py new file mode 100644 index 0000000000000000000000000000000000000000..428ab5b4a7ea316149639a24497f70633487c6df --- /dev/null +++ b/scenic/projects/layout_denoise/datasets/parsers.py @@ -0,0 +1,91 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Input functions for loading dataset.""" +import tensorflow.compat.v2 as tf + +# Constants for embeddings. +PADDING = 0 +EOS = 1 +UKN = 2 +START = 3 + +MAX_WORD_NUM = 10 + + +def parse(example_proto, add_node_id=False): + """Parses the rico dataset.""" + feature_description = { + 'image/view_hierarchy/description/word_id': + tf.io.FixedLenSequenceFeature([], tf.int64, allow_missing=True), + 'image/view_hierarchy/attributes/id/word_id': + tf.io.FixedLenSequenceFeature([], tf.int64, allow_missing=True), + 'image/view_hierarchy/class/name/word_id': + tf.io.FixedLenSequenceFeature([], tf.int64, allow_missing=True), + 'image/object/class/label': + tf.io.FixedLenSequenceFeature([], tf.int64, allow_missing=True), + 'image/object/bbox/xmin': + tf.io.FixedLenSequenceFeature([], tf.float32, allow_missing=True), + 'image/object/bbox/xmax': + tf.io.FixedLenSequenceFeature([], tf.float32, allow_missing=True), + 'image/object/bbox/ymin': + tf.io.FixedLenSequenceFeature([], tf.float32, allow_missing=True), + 'image/object/bbox/ymax': + tf.io.FixedLenSequenceFeature([], tf.float32, allow_missing=True), + 'image/encoded': + tf.io.FixedLenFeature([], tf.string), + } + if add_node_id: + feature_description.update({ + 'image/view_hierarchy/node_id': + tf.io.FixedLenSequenceFeature([], tf.string, allow_missing=True), + }) + example = tf.io.parse_single_example(example_proto, feature_description) + + # Map to DETR features + coco_features = {} + coco_features['image'] = tf.io.decode_png( + example['image/encoded'], channels=3) + h = tf.cast(tf.shape(coco_features['image'])[0], tf.float32) + w = tf.cast(tf.shape(coco_features['image'])[1], tf.float32) + + obj_dict = {} + coco_features['objects'] = obj_dict + # x0, y0, x1, y1 + obj_dict['boxes'] = tf.stack([ + example['image/object/bbox/xmin'] * w, + example['image/object/bbox/ymin'] * h, + example['image/object/bbox/xmax'] * w, + example['image/object/bbox/ymax'] * h, + ], + axis=-1) + + obj_dict['desc_id'] = example['image/view_hierarchy/description/word_id'] + obj_dict['desc_id'] = tf.reshape(obj_dict['desc_id'], [-1, 10]) + obj_dict['resource_id'] = example[ + 'image/view_hierarchy/attributes/id/word_id'] + obj_dict['resource_id'] = tf.reshape(obj_dict['resource_id'], [-1, 10]) + obj_dict['name_id'] = example['image/view_hierarchy/class/name/word_id'] + obj_dict['name_id'] = tf.reshape(obj_dict['name_id'], [-1, 10]) + + obj_dict['label'] = example['image/object/class/label'] + # -1 is ROOT, valid label starts from 0. + obj_dict['label'] = tf.maximum(obj_dict['label'], -1) + # 1: invalid, 0: valid objects. + obj_dict['binary_label'] = tf.cast(tf.equal(obj_dict['label'], 0), tf.int32) + obj_dict['obj_mask'] = tf.ones_like(obj_dict['label'], dtype=tf.int32) + if add_node_id: + obj_dict['node_id'] = example['image/view_hierarchy/node_id'] + + return coco_features diff --git a/scenic/projects/layout_denoise/layers/__init__.py b/scenic/projects/layout_denoise/layers/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/layout_denoise/layers/common.py b/scenic/projects/layout_denoise/layers/common.py new file mode 100644 index 0000000000000000000000000000000000000000..4e6fca482f634344debfd121ee7d166fa3c1ba46 --- /dev/null +++ b/scenic/projects/layout_denoise/layers/common.py @@ -0,0 +1,70 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Common utils.""" +import functools +import flax.linen as nn +import jax +from jax.nn import initializers +import jax.numpy as jnp +import numpy as np + +pytorch_kernel_init = functools.partial(initializers.variance_scaling, + 1. / 3., 'fan_in', 'uniform') + + +def uniform_initializer(minval, maxval, dtype=jnp.float32): + def init(key, shape, dtype=dtype): + return jax.random.uniform(key, shape, dtype, minval=minval, maxval=maxval) + return init + + +def dense(inputs, output_dim, dtype, kernel_init=None): + bias_range = 1. / np.sqrt(inputs.shape[-1]) + if kernel_init is None: + kernel_init = pytorch_kernel_init(dtype=dtype) + return nn.Dense( + output_dim, + kernel_init=kernel_init, + bias_init=uniform_initializer( + -bias_range, bias_range, dtype), + dtype=dtype)(inputs) + + +def create_output(output_model, params, aux_loss=False, layout_model_pamp=None): + """Creates the output dict.""" + output = {} + multimodal_outputs = params['multimodal_outputs'] + + if not aux_loss: + output.update(output_model(params)) + return output + + # Currently only layout has intermediate losses + layout_model_pamp_partial = functools.partial( + layout_model_pamp, train=params['train']) + pred_dict = jax.vmap(layout_model_pamp_partial)(multimodal_outputs) + for key in pred_dict: + output[key] = pred_dict[key][-1] + + # Append intermediate layer logits. + output['aux_outputs'] = [] + num_layers = multimodal_outputs.shape[0] + for layer in range(num_layers - 1): + lgt_dict = {} + for key in pred_dict: + logts = pred_dict[key][layer] + lgt_dict.update({key: logts}) + output['aux_outputs'].append(lgt_dict) + return output diff --git a/scenic/projects/layout_denoise/layers/embedding.py b/scenic/projects/layout_denoise/layers/embedding.py new file mode 100644 index 0000000000000000000000000000000000000000..9ddca37ae00b79de52586f21c0dc22119c6e11cc --- /dev/null +++ b/scenic/projects/layout_denoise/layers/embedding.py @@ -0,0 +1,379 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Embedding utils.""" +from typing import Any, Callable, Dict, Optional + +import flax.linen as nn +import jax +from jax.nn import initializers +import jax.numpy as jnp +from scenic.projects.layout_denoise.layers import common + + +class TokenEmbedding(nn.Module): + """Creates learned embeddings for text. + + Attributes: + hidden_dim: Hidden dimension for the pos embeddings. + vocab_size: Number of unique tokens. + token_emb_init: Positional embeddings initializer. + dtype: Jax dtype; The dtype of the computation (default: float32). + """ + hidden_dim: int + vocab_size: int + token_emb_init: Callable[..., Any] = initializers.normal(stddev=1.0) + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, tokens) -> jnp.ndarray: + """Creates the token embeddings. + + Args: + tokens: the tokens to be embeded. + + Returns: + Embedding for tokens with rank=token_rank + 1. + """ + embs = self.param('token_emb', self.token_emb_init, + (self.vocab_size, self.hidden_dim)) + embds = jnp.take(embs, tokens, axis=0) + return jnp.asarray(embds, self.dtype) + + +class InputPosEmbeddingSine(nn.Module): + """Creates sinusoidal positional embeddings for inputs.""" + + hidden_dim: int + dtype: jnp.dtype = jnp.float32 + scale: Optional[float] = None + temperature: float = 10000 + normalize: bool = True + + @nn.compact + def __call__(self, padding_mask: jnp.ndarray) -> jnp.ndarray: + """Creates the positional embeddings for transformer inputs. + + Args: + padding_mask: Binary matrix with 0 at padded image regions. Shape is + [batch, height, width] + + Returns: + Positional embedding for inputs. + + Raises: + ValueError if `hidden_dim` is not an even number. + """ + if self.hidden_dim % 2: + raise ValueError('`hidden_dim` must be an even number.') + + mask = padding_mask.astype(jnp.float32) + y_embed = jnp.cumsum(mask, axis=1) + x_embed = jnp.cumsum(mask, axis=2) + + if self.normalize: + eps = 1e-6 + scale = self.scale if self.scale is not None else 2 * jnp.pi + y_embed = y_embed / (y_embed[:, -1:, :] + eps) * scale + x_embed = x_embed / (x_embed[:, :, -1:] + eps) * scale + + num_pos_feats = self.hidden_dim // 2 + dim_t = jnp.arange(num_pos_feats, dtype=jnp.float32) + dim_t = self.temperature**(2 * (dim_t // 2) / num_pos_feats) + + pos_x = x_embed[:, :, :, jnp.newaxis] / dim_t + pos_y = y_embed[:, :, :, jnp.newaxis] / dim_t + pos_x = jnp.stack([ + jnp.sin(pos_x[:, :, :, 0::2]), + jnp.cos(pos_x[:, :, :, 1::2]), + ], + axis=4).reshape(padding_mask.shape + (-1,)) + pos_y = jnp.stack([ + jnp.sin(pos_y[:, :, :, 0::2]), + jnp.cos(pos_y[:, :, :, 1::2]), + ], + axis=4).reshape(padding_mask.shape + (-1,)) + + pos = jnp.concatenate([pos_y, pos_x], axis=3) + b, h, w = padding_mask.shape + pos = jnp.reshape(pos, [b, h * w, self.hidden_dim]) + return jnp.asarray(pos, self.dtype) + + +class ImageEmbedding(nn.Module): + """Creates learned embeddings for images. + + Attributes: + hidden_dim: Hidden dimension for the pos embeddings. + backbone_num_filters: Num filters in the ResNet backbone. + backbone_num_layers: Num layers in the ResNet backbone. + dtype: Jax dtype; The dtype of the computation (default: float32). + """ + hidden_dim: int + backbone_num_filters: int + backbone_num_layers: int + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + cnn, + images: jnp.ndarray, + train: bool, + *, + padding_mask: Optional[jnp.ndarray] = None, + update_batch_stats: bool = False) -> Dict[str, Any]: + """Creates the image embeddings. + + Args: + cnn: Conv Net for processing the image. + images: The images to be embedded. + train: Whether it is training. + padding_mask: Binary matrix with 0 at padded image regions. + update_batch_stats: Whether update the batch statistics for the BatchNorms + in the backbone. if None, the value of `train` flag will be used, i.e. + we update the batch stat if we are in the train mode. + + Returns: + Output: dict; that has 'content_emb' and 'pos_emb'. + """ + if update_batch_stats is None: + update_batch_stats = train + + backbone_features = cnn(images, train=update_batch_stats) + x = backbone_features['stage_4'] + + bs, h, w, _ = x.shape + + if padding_mask is None: + padding_mask_downsampled = jnp.ones((bs, h, w), dtype=jnp.bool_) + else: + padding_mask_downsampled = jax.image.resize( + padding_mask.astype(jnp.float32), shape=[bs, h, w], + method='nearest').astype(jnp.bool_) + pos_emb = InputPosEmbeddingSine(hidden_dim=self.hidden_dim)( + padding_mask_downsampled) + + # Project and reshape to 3 dimensions and project. + x = nn.Conv(features=self.hidden_dim, kernel_size=(1, 1), strides=(1, 1))(x) + x = x.reshape(bs, h * w, self.hidden_dim) + mask = jnp.reshape(padding_mask_downsampled, [bs, h * w]) + output = {} + output['content_emb'] = x + output['pos_emb'] = pos_emb + output['mask'] = mask + output['backbone_features'] = backbone_features + output['shapes'] = (bs, h, w) + return output + + +class QueryPosEmbedding(nn.Module): + """Creates learned positional embeddings for object queries. + + Attributes: + hidden_dim: Hidden dimension for the pos embeddings. + num_queries: Number of object queries. + posemb_init: Positional embeddings initializer. + dtype: Jax dtype; The dtype of the computation (default: float32). + """ + hidden_dim: int + num_queries: int + posemb_init: Callable[..., Any] = initializers.normal(stddev=1.0) + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self) -> jnp.ndarray: + """Creates the positional embeddings for queries. + + Returns: + Positional embedding for object queries. + """ + query_pos = self.param('query_emb', self.posemb_init, + (self.num_queries, self.hidden_dim)) + query_pos = jnp.expand_dims(query_pos, 0) + return jnp.asarray(query_pos, self.dtype) + + +class StructureEmbedding(nn.Module): + """Creates learned embeddings for structures. + + Attributes: + hidden_dim: Hidden dimension for the pos embeddings. + num_queries: The number of queries. + dtype: Jax dtype; The dtype of the computation (default: float32). + """ + hidden_dim: int + num_queries: int + txt_pool_method: str = 'max' + num_types: int = 30 + coordinate_emb_depth: int = 256 + dtype: jnp.dtype = jnp.float32 + aggregation: str = 'concat' + dropout_rate: float = 0.2 + + @nn.compact + def __call__( + self, + obj_mask: jnp.ndarray, + desc_id: jnp.ndarray, + resource_id: jnp.ndarray, + name_id: jnp.ndarray, + boxes: jnp.ndarray, + task: str, + token_embder, + pos_pattern, + train) -> Dict[str, Any]: + """Creates the structure embeddings.""" + # Recover coordinates in absolute values. + # h = jnp.sum(padding_mask, axis=1)[:, 0] + # w = jnp.sum(padding_mask, axis=2)[:, 0] + # [bs, 1, 4] + # sizes = jnp.expand_dims(jnp.stack([w, h, w, h], axis=1), axis=1) + # [bs, num_objs, 1] + bcx, bcy, bw, bh = jnp.split(boxes, 4, axis=2) + # x1, y1, x2, y2. + boxes = jnp.concatenate( + [bcx - bw / 2, bcy - bh / 2, bcx + bw / 2, bcy + bh / 2], axis=2) + + pos_embs = self.embed_pos( + obj_mask=obj_mask, obj_boxes=boxes, pos_pattern=pos_pattern) + + obj_embds = self.embed_layout( + obj_mask=obj_mask, + obj_desc_id=desc_id, + obj_resource_id=resource_id, + obj_name_id=name_id, + token_embder=token_embder) + + obj_embds = nn.Dropout(rate=self.dropout_rate)( + obj_embds, deterministic=not train) + pos_embs = nn.Dropout(rate=self.dropout_rate)( + pos_embs, deterministic=not train) + + output = {} + output['content_emb'] = obj_embds + output['mask'] = jnp.asarray(jnp.minimum(obj_mask, 1), self.dtype) + output['pos_emb'] = pos_embs + return output + + def embed_layout(self, obj_mask, obj_desc_id, obj_resource_id, obj_name_id, + token_embder): + """Prepares the input for the screen encoder.""" + # [bs, num_objs, tokens] -> [bs, num_objs, depth] + # jax.experimental.host_callback.id_print( + # (obj_txt, obj_type, obj_boxes, obj_targets), what='input') + # Embed types. + # [bs, num_objs, tokens] -> [bs, num_objs, depth] + + obj_desc_embs = pool_txt_embs( + obj_desc_id, + token_embder(obj_desc_id), + method=self.txt_pool_method, + valid_token_start=4, + dtype=self.dtype) + obj_resource_id_embs = pool_txt_embs( + obj_resource_id, + token_embder(obj_resource_id), + method=self.txt_pool_method, + valid_token_start=4, + dtype=self.dtype) + obj_name_embs = pool_txt_embs( + obj_name_id, + token_embder(obj_name_id), + method=self.txt_pool_method, + valid_token_start=4, + dtype=self.dtype) + + if self.aggregation == 'concat': + obj_embds = jnp.concatenate( + [obj_desc_embs, obj_resource_id_embs, obj_name_embs], axis=-1) + obj_embds = common.dense(obj_embds, self.hidden_dim, self.dtype) + elif self.aggregation == 'sum': + obj_embds = (obj_desc_embs + obj_resource_id_embs + obj_name_embs) + else: + raise ValueError('Unrecognized aggregation method: %s' % self.aggregation) + obj_non_paddings = jnp.asarray(jnp.minimum(obj_mask, 1), self.dtype) + obj_embds *= jnp.expand_dims(obj_non_paddings, 2) + return obj_embds + + def embed_pos(self, obj_mask, obj_boxes, pos_pattern='1/4'): + """Prepares the input for the screen encoder.""" + # Embed positions. + # [bs, num_objs, 4] -> [bs, num_objs, depth] + if self.aggregation == 'sum': + coordinate_emb_depth = self.hidden_dim + else: + coordinate_emb_depth = self.coordinate_emb_depth + + pos_embds = encode_coordinate( + obj_boxes, coordinate_emb_depth, self.dtype, pattern=pos_pattern) + obj_non_paddings = jnp.asarray(jnp.minimum(obj_mask, 1), self.dtype) + pos_embds *= jnp.expand_dims(obj_non_paddings, 2) + return pos_embds + + +def encode_coordinate(obj_boxes, depth, dtype, freq_depth=64, pattern='1/4'): + """Encodes positions using random features-based encoder.""" + # positions: [batch, length, group, dim] + if pattern == '4/1': + obj_boxes = jnp.expand_dims(obj_boxes, 3) + num_groups = 4 + elif pattern == '1/4': + obj_boxes = jnp.expand_dims(obj_boxes, 2) + num_groups = 1 + elif pattern == '2/2': + obj_boxes = jnp.reshape(obj_boxes, obj_boxes.shape[:2] + (2, 2)) + num_groups = 2 + else: + raise ValueError('Unrecognized coord encoding pattern: %s' % pattern) + kernel_init = nn.initializers.normal(stddev=1e-6) + # [batch, length, group, freq_depth] + freqs = common.dense(obj_boxes, freq_depth, dtype, kernel_init=kernel_init) + # [batch, length, group, freq_depth * 2] + features = jnp.concatenate([jnp.cos(freqs), jnp.sin(freqs)], axis=-1) + coord_embds = common.dense(features, depth // num_groups, dtype) + coord_embds = nn.relu(coord_embds) + coord_embds = common.dense(coord_embds, depth // num_groups, dtype) + coord_embds = jnp.reshape(coord_embds, features.shape[:2] + (-1,)) + return coord_embds + + +def pool_txt_embs(token_ids, + text_embeddings, + method, + valid_token_start=4, + dtype=jnp.float32): + """Aggregate text embedding for a UI element.""" + # [batch, #nodes, #tokens] + non_tokens = jnp.asarray(jnp.less(token_ids, valid_token_start), dtype) + if method == 'max': + assert len(token_ids.shape) == 3 + embed_bias = non_tokens * -1e7 + # Max value for each dimension + text_embeddings = jnp.max( + text_embeddings + jnp.expand_dims(embed_bias, 3), axis=-2) + # Find locations still with very large negative values. + non_paddings = jnp.asarray(jnp.greater(text_embeddings, -1e6), dtype) + # For padded location, use 0. + embeddings = text_embeddings * non_paddings + elif method == 'sum': + embeddings = jnp.sum( + text_embeddings * jnp.expand_dims(1 - non_tokens, 4), axis=-2) + elif method == 'mean': + sum_embeddings = jnp.sum( + text_embeddings * jnp.expand_dims(1 - non_tokens, 4), axis=-2) + token_counts = jnp.maximum(jnp.sum(1 - non_tokens, axis=-1), 1) + embeddings = sum_embeddings / token_counts + else: + raise ValueError('Unrecognized token aggregation %s' % method) + return embeddings diff --git a/scenic/projects/layout_denoise/layers/predictor.py b/scenic/projects/layout_denoise/layers/predictor.py new file mode 100644 index 0000000000000000000000000000000000000000..c21c3bcff5f65c62e29ee2348c10b815e32a43a7 --- /dev/null +++ b/scenic/projects/layout_denoise/layers/predictor.py @@ -0,0 +1,49 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Output layers.""" +import flax.linen as nn +import jax.numpy as jnp +import numpy as np +from scenic.projects.layout_denoise.layers import common + + +class ObjectClassPredictor(nn.Module): + """Linear Projection block for predicting classification.""" + num_classes: int + dtype: jnp.dtype = jnp.float32 + dropout_rate: jnp.float32 = .0 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, + deterministic: bool = True) -> jnp.ndarray: + """Applies Linear Projection to inputs. + + Args: + inputs: Input data. + deterministic: Whether to use dropout. + Returns: + Output of Linear Projection block. + """ + inputs = nn.Dropout(rate=self.dropout_rate)( + inputs, deterministic=deterministic) + bias_range = 1. / np.sqrt(inputs.shape[-1]) + return nn.Dense( + self.num_classes, + kernel_init=common.pytorch_kernel_init(dtype=self.dtype), + bias_init=common.uniform_initializer( + -bias_range, bias_range, self.dtype), + dtype=self.dtype)( + inputs) + diff --git a/scenic/projects/layout_denoise/layers/transformer.py b/scenic/projects/layout_denoise/layers/transformer.py new file mode 100644 index 0000000000000000000000000000000000000000..5227e610d9f18793b1919ab724bec815337ea631 --- /dev/null +++ b/scenic/projects/layout_denoise/layers/transformer.py @@ -0,0 +1,576 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of Transformer architecture. + +Implementation is based on DETR. +""" + +# pylint: disable=not-callable + +import functools +from typing import Any, Callable, Optional + +import flax.linen as nn +from jax.nn import initializers +import jax.numpy as jnp + + +class MlpBlock(nn.Module): + """Transformer MLP / feed-forward block.""" + + mlp_dim: int + out_dim: Optional[int] = None + dropout_rate: float = 0.1 + kernel_init: Callable[..., Any] = nn.initializers.xavier_uniform() + bias_init: Callable[..., Any] = nn.initializers.normal(stddev=1e-6) + activation_fn: Callable[[jnp.ndarray], jnp.ndarray] = nn.gelu + dtype: jnp.ndarray = jnp.float32 + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + *, + deterministic: bool = True) -> jnp.ndarray: + """Applies Transformer MlpBlock model.""" + actual_out_dim = inputs.shape[-1] if self.out_dim is None else self.out_dim + x = nn.Dense( + self.mlp_dim, + dtype=self.dtype, + kernel_init=self.kernel_init, + bias_init=self.bias_init)( + inputs) + x = self.activation_fn(x) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=deterministic) + output = nn.Dense( + actual_out_dim, + dtype=self.dtype, + kernel_init=self.kernel_init, + bias_init=self.bias_init)( + x) + output = nn.Dropout(rate=self.dropout_rate)( + output, deterministic=deterministic) + return output + + +class MultiHeadDotProductAttention(nn.Module): + """LayoutViT Customized Multi-head dot-product attention. + + Attributes: + num_heads: Number of attention heads. Features (i.e. inputs_q.shape[-1]) + should be divisible by the number of heads. + pos_emb_q: Positional embedding to be added to the query. + pos_emb_k: Positional embedding to be added to the key. + pos_emb_v: Positional embedding to be added to the value. + qkv_features: dimension of the key, query, and value. + out_features: dimension of the last projection + dropout_rate: dropout rate + broadcast_dropout: use a broadcasted dropout along batch dims. + kernel_init: initializer for the kernel of the Dense layers. + bias_init: initializer for the bias of the Dense layers. + use_bias: bool: whether pointwise QKV dense transforms use bias. In DETR + they always have a bias on the output. + dtype: the dtype of the computation (default: float32) + """ + + num_heads: int + qkv_features: Optional[int] = None + out_features: Optional[int] = None + dropout_rate: float = 0. + broadcast_dropout: bool = False + kernel_init: Callable[..., Any] = initializers.xavier_uniform() + bias_init: Callable[..., Any] = initializers.zeros + use_bias: bool = True + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + inputs_q: jnp.ndarray, + inputs_kv: Optional[jnp.ndarray] = None, + *, + pos_emb_q: Optional[jnp.ndarray] = None, + pos_emb_k: Optional[jnp.ndarray] = None, + pos_emb_v: Optional[jnp.ndarray] = None, + key_padding_mask: Optional[jnp.ndarray] = None, + train: bool = False) -> jnp.ndarray: + """Applies multi-head dot product attention on the input data. + + Projects the inputs into multi-headed query, key, and value vectors, + applies dot-product attention and project the results to an output vector. + + This can be used for encoder-decoder attention by specifying both `inputs_q` + and `inputs_kv` or for self-attention by only specifying `inputs_q` and + setting `inputs_kv` to None. + + Args: + inputs_q: Input queries of shape `[bs, len, features]`. + inputs_kv: Key/values of shape `[bs, len, features]` or None for + self-attention, in which case key/values will be derived from inputs_q. + pos_emb_q: Positional embedding to be added to the query. + pos_emb_k: Positional embedding to be added to the key. + pos_emb_v: Positional embedding to be added to the value. + key_padding_mask: Binary array. Key-value tokens that are padded are 0, + and 1 otherwise. + train: Train or not (to apply dropout) + + Returns: + output of shape `[bs, len, features]`. + """ + if inputs_kv is None: + inputs_kv = inputs_q + + assert inputs_kv.ndim == inputs_q.ndim == 3 + features = self.out_features or inputs_q.shape[-1] + qkv_features = self.qkv_features or inputs_q.shape[-1] + + assert qkv_features % self.num_heads == 0, ( + 'Memory dimension must be divisible by number of heads.') + head_dim = qkv_features // self.num_heads + + def add_positional_emb(x, pos_emb_x): + return x if pos_emb_x is None else x + pos_emb_x + + query, key, value = (add_positional_emb(inputs_q, pos_emb_q), + add_positional_emb(inputs_kv, pos_emb_k), + add_positional_emb(inputs_kv, pos_emb_v)) + + dense = functools.partial( + nn.DenseGeneral, + axis=-1, + features=(self.num_heads, head_dim), + kernel_init=self.kernel_init, + bias_init=self.bias_init, + use_bias=self.use_bias, + dtype=self.dtype) + # project inputs_q to multi-headed q/k/v + # dimensions are then [bs, l, n_heads, n_features_per_head] + query, key, value = (dense(name='query')(query), dense(name='key')(key), + dense(name='value')(value)) + + # create attention masks + if key_padding_mask is not None: + attention_bias = (1 - key_padding_mask) * -1e10 + # add head and query dimension. + attention_bias = jnp.expand_dims(attention_bias, -2) + attention_bias = jnp.expand_dims(attention_bias, -2) + else: + attention_bias = None + + # apply attention + dropout_rng = self.make_rng('dropout') if train else None + x = nn.attention.dot_product_attention( + query, + key, + value, + dtype=self.dtype, + bias=attention_bias, + dropout_rng=dropout_rng, + dropout_rate=self.dropout_rate, + broadcast_dropout=self.broadcast_dropout, + deterministic=not train) + + # back to the original inputs dimensions + out = nn.DenseGeneral( + features=features, + axis=(-2, -1), + kernel_init=self.kernel_init, + bias_init=self.bias_init, + use_bias=True, + dtype=self.dtype, + name='out')( + x) + + return out + + +class EncoderBlock(nn.Module): + """LayoutViT Transformer encoder block. + + Attributes: + num_heads: Number of heads. + qkv_dim: Dimension of the query/key/value. + mlp_dim: Dimension of the mlp on top of attention block. + pre_norm: If use LayerNorm before attention/mlp blocks. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout rate for attention weights. + dtype: Data type of the computation (default: float32). + """ + + num_heads: int + qkv_dim: int + mlp_dim: int + pre_norm: bool = False + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + *, + pos_embedding: Optional[jnp.ndarray] = None, + padding_mask: Optional[jnp.ndarray] = None, + train: bool = False) -> jnp.ndarray: + """Applies EncoderBlock module. + + Args: + inputs: Input data of shape [batch_size, len, features]. + pos_embedding: Positional Embedding to be added to the queries and keys in + the self-attention operation. + padding_mask: Binary mask containing 0 for padding tokens. + train: Train or not (to apply dropout). + + Returns: + Output after transformer encoder block. + """ + self_attn = MultiHeadDotProductAttention( + num_heads=self.num_heads, + qkv_features=self.qkv_dim, + dropout_rate=self.attention_dropout_rate, + broadcast_dropout=False, + kernel_init=initializers.xavier_uniform(), + bias_init=initializers.zeros, + use_bias=True, + dtype=self.dtype) + + mlp = MlpBlock( + mlp_dim=self.mlp_dim, + activation_fn=nn.relu, + dtype=self.dtype, + dropout_rate=self.dropout_rate) + + assert inputs.ndim == 3 + + if self.pre_norm: + x = nn.LayerNorm(dtype=self.dtype)(inputs) + x = self_attn( + inputs_q=x, + pos_emb_q=pos_embedding, + pos_emb_k=pos_embedding, + pos_emb_v=None, + key_padding_mask=padding_mask, + train=train) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + x = x + inputs + y = nn.LayerNorm(dtype=self.dtype)(x) + y = mlp(y, deterministic=not train) + out = x + y + + else: + x = self_attn( + inputs_q=inputs, + pos_emb_q=pos_embedding, + pos_emb_k=pos_embedding, + pos_emb_v=None, + key_padding_mask=padding_mask, + train=train) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + x = x + inputs + x = nn.LayerNorm(dtype=self.dtype)(x) + y = mlp(x, deterministic=not train) + y = x + y + out = nn.LayerNorm(dtype=self.dtype)(y) + + return out + + +class DecoderBlock(nn.Module): + """LayoutViT Transformer decoder block. + + Attributes: + num_heads: Number of heads. + qkv_dim: Dimension of the query/key/value. + mlp_dim: Dimension of the mlp on top of attention block. + pre_norm: If use LayerNorm before attention/mlp blocks. + dropout_rate:Dropout rate. + attention_dropout_rate:Dropout rate for attention weights. + dtype: Data type of the computation (default: float32). + """ + + num_heads: int + qkv_dim: int + mlp_dim: int + pre_norm: bool = False + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + obj_queries: jnp.ndarray, + encoder_output: jnp.ndarray, + *, + pos_embedding: Optional[jnp.ndarray] = None, + query_pos_emb: Optional[jnp.ndarray] = None, + key_padding_mask: Optional[jnp.ndarray] = None, + query_padding_mask: Optional[jnp.ndarray] = None, + train: bool = False): + """Applies DecoderBlock module. + + Args: + obj_queries: Input data for decoder. + encoder_output: Output of encoder, which are encoded inputs. + pos_embedding: Positional Embedding to be added to the keys in + cross-attention. + query_pos_emb: Positional Embedding to be added to the queries. + key_padding_mask: Binary mask containing 0 for pad tokens in key. + query_padding_mask: Binary mask containing 0 for pad tokens in queries. + train: Train or not (to apply dropout) + + Returns: + Output after transformer decoder block. + """ + + assert query_pos_emb is not None, ('Given that object_queries are zeros ' + 'and not learnable, we should add ' + 'learnable query_pos_emb to them.') + # Seems in DETR the self-attention in the first layer basically does + # nothing, as the value vector is a zero vector and we add no learnable + # positional embedding to it! + self_attn = MultiHeadDotProductAttention( + num_heads=self.num_heads, + qkv_features=self.qkv_dim, + broadcast_dropout=False, + dropout_rate=self.attention_dropout_rate, + kernel_init=initializers.xavier_uniform(), + bias_init=initializers.zeros, + use_bias=True, + dtype=self.dtype) + + cross_attn = MultiHeadDotProductAttention( + num_heads=self.num_heads, + qkv_features=self.qkv_dim, + broadcast_dropout=False, + dropout_rate=self.attention_dropout_rate, + kernel_init=initializers.xavier_uniform(), + bias_init=initializers.zeros, + use_bias=True, + dtype=self.dtype) + + mlp = MlpBlock( + mlp_dim=self.mlp_dim, + activation_fn=nn.relu, + dtype=self.dtype, + dropout_rate=self.dropout_rate) + + assert obj_queries.ndim == 3 + if self.pre_norm: + # self attention block + x = nn.LayerNorm(dtype=self.dtype)(obj_queries) + x = self_attn( + inputs_q=x, + pos_emb_q=query_pos_emb, + pos_emb_k=query_pos_emb, + pos_emb_v=None, + key_padding_mask=query_padding_mask, + train=train) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + x = x + obj_queries + # cross attention block + y = nn.LayerNorm(dtype=self.dtype)(x) + y = cross_attn( + inputs_q=y, + inputs_kv=encoder_output, + pos_emb_q=query_pos_emb, + pos_emb_k=pos_embedding, + pos_emb_v=None, + key_padding_mask=key_padding_mask, + train=train) + y = nn.Dropout(rate=self.dropout_rate)(y, deterministic=not train) + y = y + x + # mlp block + z = nn.LayerNorm(dtype=self.dtype)(y) + z = mlp(z, deterministic=not train) + out = y + z + + else: + # self attention block + x = self_attn( + inputs_q=obj_queries, + pos_emb_q=query_pos_emb, + pos_emb_k=query_pos_emb, + key_padding_mask=query_padding_mask, + pos_emb_v=None, + train=train) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + x = x + obj_queries + x = nn.LayerNorm(dtype=self.dtype)(x) + # cross attention block + y = cross_attn( + inputs_q=x, + inputs_kv=encoder_output, + pos_emb_q=query_pos_emb, + pos_emb_k=pos_embedding, + pos_emb_v=None, + key_padding_mask=key_padding_mask, + train=train) + y = nn.Dropout(rate=self.dropout_rate)(y, deterministic=not train) + y = y + x + y = nn.LayerNorm(dtype=self.dtype)(y) + # mlp block + z = mlp(y, deterministic=not train) + z = y + z + out = nn.LayerNorm(dtype=self.dtype)(z) + + return out + + +class Encoder(nn.Module): + """LayoutViT Transformer Encoder. + + Attributes: + num_heads: Number of heads. + num_layers: Number of layers. + qkv_dim: Dimension of the query/key/value. + mlp_dim: Dimension of the mlp on top of attention block. + normalize_before: If use LayerNorm before attention/mlp blocks. + norm: normalization layer to be applied on the output. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout rate for attention weights. + dtype: Data type of the computation (default: float32). + """ + + num_heads: int + num_layers: int + qkv_dim: int + mlp_dim: int + normalize_before: bool = False + norm: Optional[Callable[..., Any]] = None + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + *, + pos_embedding: Optional[jnp.ndarray] = None, + padding_mask: Optional[jnp.ndarray] = None, + train: bool = False) -> jnp.ndarray: + """Applies Encoder on the inputs. + + Args: + inputs: Input data. + pos_embedding: Positional Embedding to be added to the queries and keys in + the self-attention operation. + padding_mask: Binary mask containing 0 for padding tokens, and 1 + otherwise. + train: Whether it is training. + + Returns: + Output of the transformer encoder. + """ + assert inputs.ndim == 3 # `[batch, height*width, features]` + x = inputs + + # input Encoder + for lyr in range(self.num_layers): + x = EncoderBlock( + qkv_dim=self.qkv_dim, + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + pre_norm=self.normalize_before, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name=f'encoderblock_{lyr}', + dtype=self.dtype)( + x, + pos_embedding=pos_embedding, + padding_mask=padding_mask, + train=train) + + if self.norm is not None: + x = self.norm(x) + return x + + +class Decoder(nn.Module): + """LayoutViT Transformer Decoder. + + Attributes: + num_heads: Number of heads. + num_layers: Number of layers. + qkv_dim: Dimension of the query/key/value. + mlp_dim: Dimension of the mlp on top of attention block. + normalize_before: If use LayerNorm before attention/mlp blocks. + return_intermediate: If return the outputs from intermediate layers. + padding_mask: Binary mask containing 0 for padding tokens. + dropout_rate:Dropout rate. + attention_dropout_rate:Dropout rate for attention weights. + dtype: Data type of the computation (default: float32). + """ + + num_heads: int + num_layers: int + qkv_dim: int + mlp_dim: int + normalize_before: bool = False + norm: Optional[Callable[..., Any]] = None + return_intermediate: bool = False + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + obj_queries: jnp.ndarray, + encoder_output: jnp.ndarray, + *, + key_padding_mask: Optional[jnp.ndarray] = None, + query_padding_mask: Optional[jnp.ndarray] = None, + pos_embedding: Optional[jnp.ndarray] = None, + query_pos_emb: Optional[jnp.ndarray] = None, + train: bool = False) -> jnp.ndarray: + """Applies Decoder on the inputs. + + Args: + obj_queries: Input data for decoder. + encoder_output: Output of encoder, which are encoded inputs. + key_padding_mask: Binary mask containing 0 for padding tokens in the keys. + query_padding_mask: Binary mask containing 0 for padding tokens in the + queries. + pos_embedding: Positional Embedding to be added to the keys. + query_pos_emb: Positional Embedding to be added to the queries. + train: Whether it is training. + + Returns: + Output of a transformer decoder. + """ + assert encoder_output.ndim == 3 # `[batch, len, features]` + assert obj_queries.ndim == 3 # `[batch, num queries, embedding size]` + y = obj_queries + outputs = [] + for lyr in range(self.num_layers): + y = DecoderBlock( + qkv_dim=self.qkv_dim, + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + pre_norm=self.normalize_before, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + dtype=self.dtype, + name=f'decoderblock_{lyr}')( + y, + encoder_output, + pos_embedding=pos_embedding, + query_pos_emb=query_pos_emb, + key_padding_mask=key_padding_mask, + query_padding_mask=query_padding_mask, + train=train) + if self.return_intermediate: + outputs.append(y) + + if self.return_intermediate: + y = jnp.stack(outputs, axis=0) + return y if self.norm is None else self.norm(y) diff --git a/scenic/projects/layout_denoise/main.py b/scenic/projects/layout_denoise/main.py new file mode 100644 index 0000000000000000000000000000000000000000..89c5cf915a5f1623559c2ef832ccb3d58fa2a5e4 --- /dev/null +++ b/scenic/projects/layout_denoise/main.py @@ -0,0 +1,82 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Main script for the Layout Denoise project.""" + +from absl import flags +from absl import logging +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.layout_denoise import model +from scenic.projects.layout_denoise import trainer +from scenic.projects.layout_denoise.datasets import dataset + +FLAGS = flags.FLAGS + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the LayoutDenoise project.""" + model_cls = model.LayoutModel + + device_count = jax.device_count() + logging.info('device_count: %d', device_count) + logging.info('num_hosts : %d', jax.process_count()) + logging.info('host_id : %d', jax.process_index()) + + rng = jax.random.PRNGKey(config.rng_seed) + logging.info('rng: %s', rng) + batch_size = config.batch_size + if batch_size % device_count > 0: + raise ValueError(f'Batch size ({batch_size}) must be divisible by the ' + f'number of devices ({device_count})') + + eval_batch_size = config.get('eval_batch_size', batch_size) + if eval_batch_size % device_count > 0: + raise ValueError(f'Eval batch size ({eval_batch_size}) must be divisible ' + f'by the number of devices ({device_count})') + + local_batch_size = batch_size // jax.process_count() + eval_local_batch_size = eval_batch_size // jax.process_count() + device_batch_size = batch_size // device_count + logging.info('local_batch_size : %d', local_batch_size) + logging.info('device_batch_size : %d', device_batch_size) + + dataset_dict = {} + for name, cfg in config.datasets.items(): + data_rng, rng = jax.random.split(rng) + ds = dataset.get_dataset( + batch_size=local_batch_size, + eval_batch_size=eval_local_batch_size, + num_shards=jax.local_device_count(), + dtype_str=cfg.data_dtype_str, + rng=data_rng, + config=config, + dataset_configs=cfg) + dataset_dict[name] = ds + + trainer.train( + rng=rng, + config=config, + model_cls=model_cls, + dataset_dict=dataset_dict, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/layout_denoise/model.py b/scenic/projects/layout_denoise/model.py new file mode 100644 index 0000000000000000000000000000000000000000..a94df706b4d6ecd0af1649785edf0bf62b176759 --- /dev/null +++ b/scenic/projects/layout_denoise/model.py @@ -0,0 +1,468 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of Layout Denoise model.""" + +# pylint: disable=not-callable + +from typing import Any, Dict, List, Tuple, Optional + +import flax.linen as nn +import jax.numpy as jnp +import ml_collections +from scenic.projects.baselines import resnet +from scenic.projects.layout_denoise import base_model +from scenic.projects.layout_denoise.layers import common +from scenic.projects.layout_denoise.layers import embedding +from scenic.projects.layout_denoise.layers import predictor +from scenic.projects.layout_denoise.layers import transformer + + +class DeTRTransformer(nn.Module): + """Layout Denoise DETR Transformer. + + Attributes: + num_queries: Number of object queries. query_emb_size; Size of the embedding + learned for object queries. + query_emb_size: Size of the embedding learned for object queries. + num_heads: Number of heads. + num_encoder_layers: Number of encoder layers. + num_decoder_layers: Number of decoder layers. + qkv_dim: Dimension of the query/key/value. + mlp_dim: Dimension of the mlp on top of attention block. + return_intermediate_dec: If return the outputs from intermediate layers of + the decoder. + normalize_before: If use LayerNorm before attention/mlp blocks. + dropout_rate: Dropout rate. + attention_dropout_rate:Dropout rate for attention weights. + dtype: Data type of the computation (default: float32). + """ + + num_queries: int = 100 + query_emb_size: Optional[int] = None + num_heads: int = 8 + num_encoder_layers: int = 6 + num_decoder_layers: int = 6 + qkv_dim: int = 512 + mlp_dim: int = 2048 + return_intermediate_dec: bool = False + normalize_before: bool = False + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + image_inputs: jnp.ndarray, + vh_inputs: jnp.ndarray, + *, + padding_mask: Optional[jnp.ndarray] = None, + pos_embedding: Optional[jnp.ndarray] = None, + query_pos_emb: Optional[jnp.ndarray] = None, + train: bool = False) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Applies DeTRTransformer on the inputs. + + Args: + image_inputs: Input data. + vh_inputs: vh inputs. + padding_mask: Binary mask containing 0 for padding tokens. + pos_embedding: Positional Embedding to be added to the inputs. + query_pos_emb: Positional Embedding to be added to the queries. + train: Whether it is training. + + Returns: + Output of the LayoutDETR transformer and output of the encoder. + """ + encoder_norm = nn.LayerNorm() if self.normalize_before else None + encoded = transformer.Encoder( + num_heads=self.num_heads, + num_layers=self.num_encoder_layers, + qkv_dim=self.qkv_dim, + mlp_dim=self.mlp_dim, + normalize_before=self.normalize_before, + norm=encoder_norm, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + dtype=self.dtype, + name='encoder')( + image_inputs, + padding_mask=padding_mask, + pos_embedding=pos_embedding, + train=train) + + decoder_norm = nn.LayerNorm() + output = transformer.Decoder( + num_heads=self.num_heads, + num_layers=self.num_decoder_layers, + qkv_dim=self.qkv_dim, + mlp_dim=self.mlp_dim, + normalize_before=self.normalize_before, + return_intermediate=self.return_intermediate_dec, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + norm=decoder_norm, + dtype=self.dtype, + name='decoder')( + vh_inputs, + encoded, + key_padding_mask=padding_mask, + pos_embedding=pos_embedding, + query_pos_emb=query_pos_emb, + train=train) + return output # pytype: disable=bad-return-type # jax-ndarray + + +class VHOnlyModel(nn.Module): + """Layout Denoise VH-only Transformer. + + Attributes: + num_heads: Number of heads. + num_encoder_layers: Number of encoder layers. + qkv_dim: Dimension of the query/key/value. + mlp_dim: Dimension of the mlp on top of attention block. + return_intermediate_dec: If return the outputs from intermediate layers of + the decoder. + normalize_before: If use LayerNorm before attention/mlp blocks. + dropout_rate: Dropout rate. + attention_dropout_rate:Dropout rate for attention weights. + dtype: Data type of the computation (default: float32). + """ + num_heads: int = 8 + num_encoder_layers: int = 6 + qkv_dim: int = 512 + mlp_dim: int = 2048 + normalize_before: bool = False + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + vh_inputs: jnp.ndarray, + *, + padding_mask: Optional[jnp.ndarray] = None, + pos_embedding: Optional[jnp.ndarray] = None, + train: bool = False) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Applies DeTRTransformer on the inputs. + + Args: + vh_inputs: vh inputs. + padding_mask: Binary mask containing 0 for padding tokens. + pos_embedding: Positional Embedding to be added to the inputs. + train: Whether it is training. + + Returns: + Output of the encoding of view hierarchy nodes. + """ + encoder_norm = nn.LayerNorm() if self.normalize_before else None + encoded = transformer.Encoder( + num_heads=self.num_heads, + num_layers=self.num_encoder_layers, + qkv_dim=self.qkv_dim, + mlp_dim=self.mlp_dim, + normalize_before=self.normalize_before, + norm=encoder_norm, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + dtype=self.dtype, + name='encoder')( + vh_inputs, + padding_mask=padding_mask, + pos_embedding=pos_embedding, + train=train) + + return encoded # pytype: disable=bad-return-type # jax-ndarray + + +class MLPModel(nn.Module): + """Layout Denoise MLP model for a single node. + + Attributes: + num_encoder_layers: Number of encoder layers. + qkv_dim: Dimension of the query/key/value. + dropout_rate: Dropout rate. + dtype: Data type of the computation (default: float32). + """ + num_encoder_layers: int = 6 + hidden_dim: int = 512 + dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + vh_inputs: jnp.ndarray, + *, + pos_embedding: Optional[jnp.ndarray] = None, + padding_mask: Optional[jnp.ndarray] = None, + train: bool = False) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Applies DeTRTransformer on the inputs. + + Args: + vh_inputs: vh inputs. + pos_embedding: Positional Embedding to be added to the inputs. + padding_mask: Binary mask containing 0 for padding tokens. + train: Whether it is training. + + Returns: + Output of the MLP layers. + """ + x = vh_inputs + pos_embedding + for _ in range(self.num_encoder_layers): + x = common.dense(x, self.hidden_dim, jnp.float32) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + return x # pytype: disable=bad-return-type # jax-ndarray + + +class LayoutDenoiseModel(nn.Module): + """Layout denoise model. + + Attributes: + modal_ranges: Modal ranges. + num_classes: Number of classes. + num_classes: Number of object classes. + vocab_size: Vocabulary size. + hidden_dim: Hidden dimension of the inputs to the model. + num_queries: Number of object queries, ie detection slot. This is the + maximal number of objects LayoutDETR can detect in a single image. For + COCO, DETR paper recommends 100 queries. + query_emb_size: Size of the embedding learned for object queries. + transformer_num_heads: Number of transformer heads. + transformer_num_encoder_layers: Number of transformer encoder layers. + transformer_num_decoder_layers: Number of transformer decoder layers. + transformer_qkv_dim: Dimension of the transformer query/key/value. + transformer_mlp_dim: Dimension of the mlp on top of attention block. + transformer_normalize_before: If use LayerNorm before attention/mlp blocks. + backbone_num_filters: Num filters in the ResNet backbone. + backbone_num_layers: Num layers in the ResNet backbone. + aux_loss: If train with auxiliary loss. + dropout_rate:Dropout rate. + attention_dropout_rate:Attention dropout rate. + dtype: Data type of the computation (default: float32). + """ + modal_ranges: List[int] + num_classes: int + vocab_size: int + hidden_dim: int = 512 + query_emb_size: Optional[int] = None + transformer_num_heads: int = 8 + transformer_num_encoder_layers: int = 6 + transformer_num_decoder_layers: int = 6 + transformer_qkv_dim: int = 512 + transformer_mlp_dim: int = 2048 + transformer_normalize_before: bool = False + backbone_num_filters: int = 64 + backbone_num_layers: int = 50 + aux_loss: bool = False + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + class_dropout_rate: float = 0.0 + model_type: str = 'full' + pos_pattern: str = '1/4' + + @nn.compact + def __call__( + self, + image: jnp.ndarray, + obj_mask: jnp.ndarray, + desc_id: jnp.ndarray, + resource_id: jnp.ndarray, + name_id: jnp.ndarray, + boxes: jnp.ndarray, + train: bool, + *, + task: str, + padding_mask: Optional[jnp.ndarray] = None, + update_batch_stats: bool = False, + debug: bool = False) -> Dict[str, Any]: + """Applies LayoutDETR model on the input. + + Args: + image: Image data. + obj_mask: A binary mask where valid is 1 and padding is 0. + desc_id: description token ids. + resource_id: resource-id token ids. + name_id: android class name token ids. + boxes: Object boxes. + train: Whether it is training. + task: task name. + padding_mask: Binary matrix with 0 at padded image regions. + update_batch_stats: Whether update the batch statistics for the BatchNorms + in the backbone. if None, the value of `train` flag will be used, i.e. + we update the batch stat if we are in the train mode. + debug: Whether the debug mode is enabled. debug=True enables model + specific logging/storing some values using jax.host_callback. + + Returns: + Output: dit; that has 'pred_logits' and 'pred_boxes', and potentially + 'aux_outputs'. + """ + assert self.hidden_dim == self.transformer_qkv_dim + + num_queries = self.modal_ranges[1] - self.modal_ranges[0] + token_embder = embedding.TokenEmbedding( + hidden_dim=self.hidden_dim, vocab_size=self.vocab_size) + + structure_dict = embedding.StructureEmbedding( + hidden_dim=self.hidden_dim, + num_queries=num_queries, + dropout_rate=self.dropout_rate)( + obj_mask, + desc_id, + resource_id, + name_id, + boxes, + # clickable, + task=task, + token_embder=token_embder, + pos_pattern=self.pos_pattern, + train=train) + + if self.model_type == 'full': + # Full model using both image and view hierarchy structure. + cnn = resnet.ResNet( + num_outputs=None, + num_filters=self.backbone_num_filters, + num_layers=self.backbone_num_layers, + dtype=self.dtype, + name='backbone') + image_dict = embedding.ImageEmbedding( + hidden_dim=self.hidden_dim, + backbone_num_filters=self.backbone_num_filters, + backbone_num_layers=self.backbone_num_layers, + name='image_embedding')( + cnn=cnn, + images=image, + train=train, + padding_mask=padding_mask, + update_batch_stats=update_batch_stats) + layout_detr = DeTRTransformer( + num_queries=num_queries, + query_emb_size=self.query_emb_size, + num_heads=self.transformer_num_heads, + num_encoder_layers=self.transformer_num_encoder_layers, + num_decoder_layers=self.transformer_num_decoder_layers, + qkv_dim=self.transformer_qkv_dim, + mlp_dim=self.transformer_mlp_dim, + normalize_before=self.transformer_normalize_before, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + return_intermediate_dec=self.aux_loss) + decoder_output = layout_detr( + image_dict['content_emb'], + structure_dict['content_emb'], + padding_mask=image_dict['mask'], + pos_embedding=image_dict['pos_emb'], + query_pos_emb=structure_dict['pos_emb'], + train=train) + elif self.model_type == 'vh_only': + # Model only using view hierarchy structure. + layout_vh_only = VHOnlyModel( + num_heads=self.transformer_num_heads, + num_encoder_layers=self.transformer_num_encoder_layers, + qkv_dim=self.transformer_qkv_dim, + mlp_dim=self.transformer_mlp_dim, + normalize_before=self.transformer_normalize_before, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate) + decoder_output = layout_vh_only( + vh_inputs=structure_dict['content_emb'], + pos_embedding=structure_dict['pos_emb'], + padding_mask=structure_dict['mask'], + train=train) + elif self.model_type == 'mlp': + # Model only using individual nodes in view hiearchy without structure. + layout_mlp = MLPModel( + num_encoder_layers=self.transformer_num_encoder_layers, + hidden_dim=self.hidden_dim, + dropout_rate=self.dropout_rate) + decoder_output = layout_mlp( + vh_inputs=structure_dict['content_emb'], + pos_embedding=structure_dict['pos_emb'], + padding_mask=structure_dict['mask'], + train=train) + + def output_projection(params): + model_output = params['multimodal_outputs'] + return output_projection_pamp(model_output, train) + + def output_projection_pamp(model_output, train): + pred_logits = predictor.ObjectClassPredictor( + num_classes=self.num_classes, dropout_rate=self.class_dropout_rate)( + model_output, deterministic=not train) + return { + 'pred_logits': pred_logits, + } + + params = { + 'multimodal_outputs': decoder_output, + 'train': train, + } + + return common.create_output( + output_projection, + params=params, + aux_loss=self.aux_loss, + layout_model_pamp=output_projection_pamp) + + +class LayoutModel(base_model.LayoutDenoiseBaseModel): + """Layout model.""" + + def build_flax_model(self): + return LayoutDenoiseModel( + modal_ranges=self.config['modal_ranges'], + num_classes=self.config['num_classes'], + vocab_size=self.config['vocab_size'], + hidden_dim=self.config.get('hidden_dim', 512), + query_emb_size=self.config.get('query_emb_size', None), + transformer_num_heads=self.config.get('transformer_num_heads', 8), + transformer_num_encoder_layers=self.config.get( + 'transformer_num_encoder_layers', 6), + transformer_num_decoder_layers=self.config.get( + 'transformer_num_decoder_layers', 6), + transformer_qkv_dim=self.config.get('transformer_qkv_dim', 512), + transformer_mlp_dim=self.config.get('transformer_mlp_dim', 2048), + transformer_normalize_before=self.config.get( + 'transformer_normalize_before', False), + backbone_num_filters=self.config.get('backbone_num_filters', 64), + backbone_num_layers=self.config.get('backbone_num_layers', 50), + aux_loss=self.config.get('aux_loss', False), + dropout_rate=self.config.get('dropout_rate', 0.0), + attention_dropout_rate=self.config.get('attention_dropout_rate', 0.0), + dtype=jnp.float32, + class_dropout_rate=self.config.get('class_dropout_rate', 0.0), + model_type=self.config.get('model_type', 'full'), + pos_pattern=self.config.get('pos_pattern', '1/4')) + + def default_flax_model_config(self): + return ml_collections.ConfigDict( + dict( + modal_ranges=[42 * 42, 42 * 42 + 101], + num_classes=30, + vocab_size=30_000, + hidden_dim=32, + query_emb_size=None, + transformer_num_heads=2, + transformer_num_encoder_layers=1, + transformer_num_decoder_layers=1, + transformer_qkv_dim=32, + transformer_mlp_dim=32, + transformer_normalize_before=False, + backbone_num_filters=32, + backbone_num_layers=1, + aux_loss=False, + panoptic=False, + dropout_rate=0.0, + attention_dropout_rate=0.0)) diff --git a/scenic/projects/layout_denoise/train_utils.py b/scenic/projects/layout_denoise/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..041441acba06c936481b584fc7f0e69800f4a20a --- /dev/null +++ b/scenic/projects/layout_denoise/train_utils.py @@ -0,0 +1,349 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for Layout Denoise trainer.""" + +import collections +import copy +import functools +from typing import Any, Dict, Mapping, Optional, Sequence, Tuple, Union + +from absl import logging +import flax +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections + +import numpy as np +from scenic.common_lib import debug_utils +from scenic.train_lib_deprecated import optimizers +from scenic.train_lib_deprecated import train_utils + +# JAX team is working on type annotation for pytree: +# https://github.com/google/jax/issues/1555 +PyTree = Union[Mapping[str, Mapping], Any] + + +def initialize_multitask_model( + *, + model_def: nn.Module, + input_spec: Dict[str, Sequence[Union[Tuple[Tuple[int, ...], jnp.dtype], + Tuple[int, ...]]]], + config: ml_collections.ConfigDict, + rngs: Union[jnp.ndarray, Mapping[str, jnp.ndarray]], +) -> Tuple[PyTree, PyTree, int, Optional[float]]: + """Initializes parameters and model state. + + Args: + model_def: Definition of a model. + input_spec: A dictionary from task names to an iterable of (shape, dtype) + pairs specifying the shape and dtype of the inputs. If unspecified the + dtype is float32. + config: Configurations of the initialization. + rngs: Jax rng keys. + + Returns: + Initial params, Init model_state, and number of trainable_params. + """ + batch_size = (config.batch_size // + jax.device_count()) if config.get('batch_size') else None + + def init_fn(model_def): + for task, in_spec in input_spec.items(): + input_shapetype = [ + debug_utils.input_spec_to_jax_shape_dtype_struct( + spec, batch_size=batch_size) for spec in in_spec + ] + dummy_input = [] + for in_st in input_shapetype: + dummy_input.append(jnp.zeros(in_st.shape, in_st.dtype)) + model_def(*dummy_input, task=task, train=False, debug=False) + + # We want all parameters to be created in host RAM, not on any device, they'll + # be sent there later as needed, otherwise we already encountered two + # situations where we allocate them twice. + @functools.partial(jax.jit, backend='cpu') + def _initialize_model(rngs): + """Initialization function to be jitted.""" + init_model_state, init_params = nn.init( + fn=init_fn, module=model_def)(rngs).pop('params') + # Set bias in the head to low value, such that loss is small initially. + if (config.get('init_head_bias', None) is not None and + 'output_projection' in init_params): + init_params = flax.core.unfreeze(init_params) + init_params['output_projection'] = optimizers.tree_map_with_names( + lambda p: jnp.full_like(p, config.init_head_bias), + init_params['output_projection'], + match_name_fn=lambda name: 'bias' in name) + init_params = flax.core.freeze(init_params) + return init_params, init_model_state + + if not isinstance(rngs, dict): + rngs = {'params': rngs} + init_params, init_model_state = _initialize_model(rngs) + # Pop out params rng: + rngs.pop('params') + + # Count number of trainable parameters: + num_trainable_params = debug_utils.log_param_shapes(init_params) + + # Count gflops: + count_flops = config.get('count_flops', + ml_collections.ConfigDict({'count_flops': True})) + if count_flops: + variables = {'params': init_params, **init_model_state} + flops = 0 + for task, in_spec in input_spec.items(): + flops += debug_utils.compute_flops( + flax_model_apply_fn=functools.partial( + model_def.apply, + variables, + train=False, + debug=False, + rngs=rngs, + task=task), + input_spec=count_flops.get('input_spec', in_spec), + fuse_multiply_add=count_flops.get('fuse_multiply_add', True)) + gflops = flops / (10**9) + else: + gflops = None + + return init_params, init_model_state, num_trainable_params, gflops + + +def multi_class_scores(y_true, y_pred, mask): + """Computes precision/recall/f1 scores using one-hot labels.""" + tp = np.count_nonzero(y_pred * y_true * mask) + fp = np.count_nonzero(y_pred * (y_true - 1) * mask) + fn = np.count_nonzero((y_pred - 1) * y_true * mask) + precision = 0 + recall = 0 + f1 = 0 + if tp + fp: + precision = np.divide(tp, tp + fp) + if tp + fn: + recall = np.divide(tp, tp + fn) + if precision + recall: + f1 = np.divide(2 * precision * recall, precision + recall) + return precision, recall, f1 + + +class LayoutDenoiseGlobalEvaluator(): + """An interface between the Scenic DETR implementation and COCO evaluators.""" + + def __init__(self, num_classes): + self._num_classes = num_classes + self._num_examples_added = collections.defaultdict(int) + + # Maps from (task, dataset) to results. + self._preds = {} + self._labels = {} + + def _get_result_lists(self, task_name, ds_name): + """Gets result lists for the task and dataset.""" + key = (task_name, ds_name) + if key not in self._preds: + self._preds[key] = [] + if key not in self._labels: + self._labels[key] = [] + return self._labels[key], self._preds[key] + + def add_example(self, task_name: str, ds_name: str, + prediction: Dict[str, np.ndarray], target: Dict[str, + np.ndarray]): + """Add a single example to the evaluator. + + Args: + task_name: Name of the task, e.g., layout. + ds_name: Name of the dataset, e.g., rico. + prediction: Model prediction dictionary with key 'pred_logits', in shape + of `[num_objects, num_classes]`. + target: Target dictionary with key 'labels'. + """ + # Get result lists for the (task, dataset) pair. + labels, preds = self._get_result_lists(task_name, ds_name) + + # Get valid (non-padding) target size. + valid_index = [i for i, l in enumerate(target['labels']) if l > 0] + + target_size = len(valid_index) + if target_size == 0: + # Ignore empty examples. + return + + target_labels = target['labels'][valid_index] + labels += target_labels.tolist() + + pred_labels = np.argmax(prediction['pred_logits'], axis=-1) + preds += pred_labels[valid_index].tolist() + self._num_examples_added[(task_name, ds_name)] += 1 + + if 'binary_pred_logits' in prediction: + labels, preds = self._get_result_lists(f'binary_{task_name}', ds_name) + target_labels = target['binary_labels'][valid_index] + labels += target_labels.tolist() + pred_labels = np.argmax(prediction['binary_pred_logits'], axis=-1) + preds += pred_labels[valid_index].tolist() + self._num_examples_added[(f'binary_{task_name}', ds_name)] += 1 + + def compute_metrics(self) -> Dict[str, Any]: + """Computes the metrics for all added predictions.""" + results = {} + + keys = list(self._labels.keys()) + for key in keys: + labels = np.array(self._labels[key]) + preds = np.array(self._preds[key]) + + correct = np.sum(labels == preds) + accuracy = 0.0 + if self._labels[key]: + accuracy = correct / len(labels) + + labels_onehot = np.zeros((len(labels), self._num_classes)) + labels_onehot[np.arange(labels.size), labels] = 1 + # Remove padding/non-target as we only compute P/R/F for target classes. + labels_onehot = labels_onehot[:, 2:] + + preds_onehot = np.zeros((len(preds), self._num_classes)) + preds_onehot[np.arange(preds.size), preds] = 1 + preds_onehot = preds_onehot[:, 2:] + + # We calculate P/R/F for target classes. + mask = labels > 1 + mask = np.expand_dims(mask, axis=-1) + p, r, f = multi_class_scores(labels_onehot, preds_onehot, mask) + + task, ds = key + results.update({ + f'{task}-{ds}/accuracy': accuracy, + f'{task}-{ds}/precision': p, + f'{task}-{ds}/recall': r, + f'{task}-{ds}/f1': f, + f'{task}-{ds}/num_instances': len(labels), + }) + return results + + def clear(self): + """Clears predictions/labels for previous run.""" + self._num_examples_added = collections.defaultdict(int) + self._preds.clear() + self._labels.clear() + + def get_num_examples_added(self): + return self._num_examples_added + + +def set_lr_configs( + config: ml_collections.ConfigDict, + datasets_metadata: Dict[str, Dict[str, Any]]) -> ml_collections.ConfigDict: + """Sets learning rate configurations.""" + + num_total_train_examples = 0 + for ds_metadata in datasets_metadata.values(): + num_total_train_examples += ds_metadata.get('num_train_examples', 0) + + with config.unlocked(): + decay_events = {500: 400} + steps_per_epoch = num_total_train_examples // config.batch_size + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*piecewise_constant' + config.lr_configs.decay_events = [ + decay_events.get(config.num_training_epochs, + config.num_training_epochs * 2 // 3) * steps_per_epoch, + ] + # Note: this is absolute (not relative): + config.lr_configs.decay_factors = [.1] + config.lr_configs.base_learning_rate = 1e-4 + + # Also set backbone lr configs + config.backbone_training.lr_configs = copy.deepcopy(config.lr_configs) + config.backbone_training.lr_configs.base_learning_rate = 1e-5 + return config + + +def get_num_training_steps( + config: ml_collections.ConfigDict, + datasets_metadata: Dict[str, Dict[str, Any]]) -> Tuple[int, Optional[int]]: + """Calculates the total number of training step and possibly steps_per_epoch. + + The main training loop is based on number of training steps. Thus, for + datasets + that we want to train based on number of epochs, we need to calculate the + total number of training steps. This function looks for `num_training_steps` + in config, if it exists it returns that as the total step and `None` as + `steps_per_epoch`. If num_training_steps doesn't exist, then it looks for + `num_training_epochs` and given the size of training data calculates the total + steps and steps_per_epoch. In this computation, we assume that + drop_remainder=True. + + Args: + config: Configuration of the experiment. + datasets_metadata: Meta-data that is generated by the dataset_builder. + + Returns: + total_steps: Total number of training steps. + steps_per_epoch: Number of steps in every epoch. + """ + num_total_train_examples = 0 + for ds_metadata in datasets_metadata.values(): + num_total_train_examples += ds_metadata.get('num_train_examples', 0) + + # We either use num_training_epochs or num_training_steps. + steps_per_epoch = num_total_train_examples // config.batch_size + if config.get('num_training_steps'): + assert not config.get('num_training_epochs') + return config.num_training_steps, steps_per_epoch or None + else: + assert config.num_training_epochs and not config.get('num_training_steps') + return (steps_per_epoch * config.num_training_epochs), steps_per_epoch + + +def normalize_metrics_summary(metrics_summary, split, + object_detection_loss_keys): + """Normalizes the metrics in the given metrics summary. + + Note that currently we only support metrics of the form 1/N sum f(x_i). + + Args: + metrics_summary: dict; Each value is a sum of a calculated metric over all + examples. + split: str; Split for which we normalize the metrics. Used for logging. + object_detection_loss_keys: list; A loss key used for computing the object + detection loss. + + Returns: + Normalized metrics summary. + + Raises: + TrainingDivergedError: Due to observing a NaN in the metrics. + """ + for key, val in metrics_summary.items(): + metrics_summary[key] = val[0] / val[1] + if np.isnan(metrics_summary[key]): + logging.error('%s metrics %s is NaN', split, key) + raise train_utils.TrainingDivergedError( + 'NaN detected in {}'.format(f'{split}_{key}')) + + # compute and add object_detection_loss using globally normalize terms + object_detection_losses = [] + for loss_term_key in object_detection_loss_keys: + if loss_term_key in metrics_summary: + object_detection_losses.append(metrics_summary[loss_term_key]) + if object_detection_losses: + # Object detection loss is present only for layout task. + metrics_summary['object_detection_loss'] = sum(object_detection_losses) + + return metrics_summary diff --git a/scenic/projects/layout_denoise/trainer.py b/scenic/projects/layout_denoise/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..c218eafbe7c50755ee2729d30a4bc8ea334efc51 --- /dev/null +++ b/scenic/projects/layout_denoise/trainer.py @@ -0,0 +1,776 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training script for Layout Denoise model.""" + +import collections +from concurrent import futures +import functools +import random +import time +from typing import Any, Dict, Tuple, Optional + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from flax import jax_utils +import flax.linen as nn +from flax.training.checkpoints import restore_checkpoint as flax_restore_checkpoint +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.projects.baselines.detr import train_utils as detr_train_utils +from scenic.projects.layout_denoise import train_utils as layout_train_utils +from scenic.projects.layout_denoise.datasets import dataset +from scenic.train_lib_deprecated import lr_schedules +from scenic.train_lib_deprecated import pretrain_utils +from scenic.train_lib_deprecated import train_utils + + +def _pred_probs(predictions): + """Adds the predicted probabilities to prediction dict.""" + # Compute class probabilities on device, needed for Hungarian matching. + # Does not remove class logits as they are needed for stable loss computation + # with cross entropy losses. + predictions['pred_probs'] = nn.softmax(predictions['pred_logits'], axis=-1) + for aux_preds in predictions.get('aux_outputs', []): + aux_preds['pred_probs'] = nn.softmax(aux_preds['pred_logits'], axis=-1) + + +def get_train_step(flax_model, + loss_and_metrics_fn, + learning_rate_fn, + backbone_learning_rate_fn, + max_grad_norm=None, + update_model_state=False, + debug=False): + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + flax_model: Flax model (an instance of nn.Module). + loss_and_metrics_fn: A function that given model predictions, a batch, and + parameters of the model calculates the loss as well as metrics. + learning_rate_fn: Learning rate scheduler which given the global_step + generates the learning rate. + backbone_learning_rate_fn: Learning rate scheduler which given the + global_step generates the learning rate used for updating the parameters + of the backbone in the model. + max_grad_norm: float; Maximum gradient norm used for gradient clipping. If + set to None, no gradient clipping happens. + update_model_state: bool; whether to update the model_state (e.g. batch + stats in BatchNorm) during training or freeze it. + debug: bool; Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Train step function that takes a train_state and batch and returns + new_train_state, metrics, lr, predictions. + + """ + backbone_learning_rate_fn = backbone_learning_rate_fn or learning_rate_fn + + def update_fn(train_state, new_model_state, grad, new_rng): + step = train_state.global_step + backbone_lr = backbone_learning_rate_fn(step) + lr = learning_rate_fn(step) + + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if max_grad_norm is not None: + grad = detr_train_utils.clip_grads(grad, max_grad_norm) + + (backbone_opt_hps, + opt_hps) = train_state.optimizer.optimizer_def.hyper_params + new_optimizer = train_state.optimizer.apply_gradient( + grad, + hyper_params=[ + backbone_opt_hps.replace(learning_rate=backbone_lr), + opt_hps.replace(learning_rate=lr) + ]) + new_train_state = train_state.replace( + global_step=step + 1, + optimizer=new_optimizer, + model_state=new_model_state, + rng=new_rng) + return new_train_state, lr, backbone_lr + + def train_step(train_state, batch, task): + + def loss_fn(params): + new_rng, rng = jax.random.split(train_state.rng) + # Bind the rng to the host/device we are on. + model_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + variables = {'params': params, **train_state.model_state} + predictions, new_model_state = flax_model.apply( + variables, + image=batch['inputs'], + obj_mask=batch['label']['obj_mask'], + desc_id=batch['label']['desc_id'], + resource_id=batch['label']['resource_id'], + name_id=batch['label']['name_id'], + boxes=batch['label']['boxes'], + task=task, + padding_mask=batch['padding_mask'], + update_batch_stats=update_model_state, + mutable=['batch_stats'], + train=True, + rngs={'dropout': model_rng}, + debug=debug) + if task == 'layout_denoise': + _pred_probs(predictions) + + loss, metrics = loss_and_metrics_fn( + predictions, batch, task=task, model_params=variables['params']) + return loss, (new_model_state, metrics, predictions, new_rng) + + compute_gradient_fn = jax.value_and_grad(loss_fn, has_aux=True) + (_, aux), grad = compute_gradient_fn(train_state.optimizer.target) + new_model_state, metrics, predictions, new_rng = aux + new_train_state, lr, backbone_lr = update_fn(train_state, new_model_state, + grad, new_rng) + return new_train_state, metrics, lr, backbone_lr, predictions + + return train_step + + +def get_eval_step(flax_model, + loss_and_metrics_fn, + metrics_only=False, + debug=False): + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Args: + flax_model: Flax model (an instance of nn.Module). + loss_and_metrics_fn: A function that given model predictions, a batch, and + parameters of the model calculates the loss as well as metrics. + metrics_only: bool; Only return metrics. + debug: bool; Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Eval step function which returns predictions and calculated metrics. + """ + + def metrics_fn(train_state, batch, predictions, task): + _, metrics = loss_and_metrics_fn( + predictions, + batch, + task=task, + model_params=train_state.optimizer.target) + + if metrics_only: + return None, None, metrics + + # Collect necessary predictions and target information from all hosts. + if task == 'layout_denoise': + predictions_out = { + 'pred_logits': predictions['pred_logits'], + } + if 'binary_pred_logits' in predictions: + predictions_out['binary_pred_logits'] = predictions[ + 'binary_pred_logits'] + + targets = { + 'label': { + 'size': batch['label']['size'], + 'orig_size': batch['label']['orig_size'], + 'labels': batch['label']['labels'], + 'binary_labels': batch['label']['binary_labels'], + }, + 'batch_mask': batch['batch_mask'] + } + + predictions_out = jax.lax.all_gather(predictions_out, 'batch') + targets = jax.lax.all_gather(targets, 'batch') + return targets, predictions_out, metrics + + def eval_step(train_state, batch, task): + variables = { + 'params': train_state.optimizer.target, + **train_state.model_state + } + predictions = flax_model.apply( + variables, + image=batch['inputs'], + obj_mask=batch['label']['obj_mask'], + desc_id=batch['label']['desc_id'], + resource_id=batch['label']['resource_id'], + name_id=batch['label']['name_id'], + boxes=batch['label']['boxes'], + # clickable=batch['label']['clickable'], + task=task, + padding_mask=batch['padding_mask'], + train=False, + mutable=False, + debug=debug) + if task == 'layout_denoise': + _pred_probs(predictions) + + return metrics_fn(train_state, batch, predictions, task=task) + + return eval_step + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset_dict: Dict[str, dataset_utils.Dataset], + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: JAX PRNGKey. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset_dict: A dict of datasets that each has train_iter, eval_iter, + meta_data, and optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current + global_step, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + lead_host = jax.process_index() == 0 + datasets_metadata = {name: ds.meta_data for name, ds in dataset_dict.items()} + # The pool is used to perform misc operations such as logging in async way. + pool = futures.ThreadPoolExecutor(max_workers=2) + + # Set up lr configs based on the tasks/datasets: + # config = layout_train_utils.set_lr_configs(config, datasets_metadata) + + # Build the loss_and_metrics_fn, metrics, and flax_model. + model = model_cls(config, datasets_metadata) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + input_spec = {} + for ds_name, metadata in datasets_metadata.items(): + input_spec[metadata['task_name']] = [ + (metadata['input_shape'], metadata.get('input_dtype', jnp.float32)), + (metadata['obj_mask_shape'], metadata.get('obj_mask_dtype', jnp.int32)), + (metadata['obj_desc_id_shape'], + metadata.get('obj_desc_id_dtype', jnp.int32)), + (metadata['obj_resource_id_shape'], + metadata.get('obj_resource_id_dtype', jnp.int32)), + (metadata['obj_name_id_shape'], + metadata.get('obj_name_id_dtype', jnp.int32)), + (metadata['obj_bbx_shape'], metadata.get('obj_bbx_dtype', jnp.float32)), + # (metadata['obj_clickable_shape'], + # metadata.get('obj_clickable_dtype', jnp.int32)), + ] + + (params, model_state, num_trainable_params, + gflops) = layout_train_utils.initialize_multitask_model( + model_def=model.flax_model, + input_spec=input_spec, + config=config, + rngs=init_rng) + + # Create optimizer. + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0] + optimizer = jax.jit( + detr_train_utils.get_detr_optimizer(config).create, backend='cpu')( + params) + + rng, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + optimizer=optimizer, + model_state=model_state, + rng=train_rng, + accum_train_time=0) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + init_checkpoint_path = config.init_from.get('checkpoint_path') + restored_train_state = flax_restore_checkpoint( + init_checkpoint_path, target=None) + train_state = pretrain_utils.init_from_pretrain_state( + train_state, + restored_train_state, + ckpt_prefix_path=config.init_from.get('ckpt_prefix_path'), + model_prefix_path=config.init_from.get('model_prefix_path'), + name_mapping=config.init_from.get('name_mapping'), + skip_regex=config.init_from.get('skip_regex')) + # Free unecessary memory. + del restored_train_state + elif start_step == 0 and config.get('load_pretrained_backbone', False): + # only load pretrained backbone if we are at the beginning of training + bb_checkpoint_path = config.pretrained_backbone_configs.get( + 'checkpoint_path') + bb_train_state = flax_restore_checkpoint(bb_checkpoint_path, target=None) + + if config.get('load_pretrained_vut', False): + model_prefix_path = None + skip_regex = config.get('param_skip_regex', None) + else: + model_prefix_path = ['backbone'] + skip_regex = None + train_state = pretrain_utils.init_from_pretrain_state( + train_state, + bb_train_state, + model_prefix_path=model_prefix_path, + skip_regex=skip_regex) + + update_model_state = not config.get('freeze_backbone_batch_stats', False) + if not update_model_state: + if not config.load_pretrained_backbone: + raise ValueError('Freezing the batch statistics of the resnet backbone ' + 'is only possible when loading a pretrained resnet ' + 'backbone is enabled.') + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = layout_train_utils.get_num_training_steps( + config, datasets_metadata) + total_steps = config.get('total_steps') + + # Get learning rate scheduler. + learning_rate_fn = lr_schedules.get_learning_rate_fn(config) + backbone_learning_rate_fn = None + if config.get('backbone_training'): + backbone_learning_rate_fn = lr_schedules.get_learning_rate_fn( + config.backbone_training) + + train_step = get_train_step( + flax_model=model.flax_model, + loss_and_metrics_fn=model.loss_function, + learning_rate_fn=learning_rate_fn, + backbone_learning_rate_fn=backbone_learning_rate_fn, + max_grad_norm=config.get('max_grad_norm', None), + update_model_state=update_model_state, + debug=config.debug_train) + train_step_pmapped = jax.pmap( + train_step, + axis_name='batch', + static_broadcasted_argnums=(2,), + donate_argnums=(0, 1), + ) + + ############### EVALUATION CODE ################# + eval_step = get_eval_step( + flax_model=model.flax_model, + loss_and_metrics_fn=model.loss_function, + debug=config.debug_eval) + eval_step_pmapped = jax.pmap( + eval_step, + axis_name='batch', + static_broadcasted_argnums=(2,), + donate_argnums=(1,)) + + steps_per_eval = {} + for ds_name in datasets_metadata.keys(): + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(datasets_metadata[ds_name]['num_eval_examples'] / + eval_batch_size)) + steps_per_eval[ds_name] = config.get('steps_per_eval') or total_eval_steps + + metrics_normalizer_fn = functools.partial( + layout_train_utils.normalize_metrics_summary, + object_detection_loss_keys=model.loss_terms_weights.keys()) + + def evaluate(global_evaluator, + train_state, + ds_name, + ds_task, + step, + eval_synchronously=False): + """Runs evaluation code.""" + future = None + + def _wait(future: Optional[futures.Future]) -> Any: # pylint: disable=g-bare-generic + if future is None: + return None + return future.result() + + def _add_examples(predictions, labels, task): + for pred, label in zip(predictions, labels): + if task == 'layout_denoise': + global_evaluator.add_example( + prediction=pred, target=label, task_name=task, ds_name=ds_name) + + eval_metrics = [] + if global_evaluator is not None: + global_evaluator.clear() + + for eval_step in range(steps_per_eval[ds_name]): + task = dataset_dict[ds_name].meta_data['task_name'] + + logging.info('Running eval step %d on %s-%s batch', eval_step, task, + ds_name) + eval_batch = next(dataset_dict[ds_name].valid_iter) + + # Do the eval step given the matches. + (eval_batch_all_hosts, eval_predictions_all_hosts, + e_metrics) = eval_step_pmapped(train_state, eval_batch, task) + + # Add task/dataset name prefix to eval metrics. + e_metrics = {f'{task}-{ds_name}/{k}': m for k, m in e_metrics.items()} + + # Variable aux_outputs is not needed anymore. + eval_predictions_all_hosts.pop('aux_outputs', None) + eval_batch_all_hosts['label'].pop('masks', None) + + # Collect local metrics (returned by the loss function). + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + + if global_evaluator is not None: + # Unreplicate the output of eval_step_pmapped (used `lax.all_gather`). + eval_batch_all_hosts = jax_utils.unreplicate(eval_batch_all_hosts) + eval_predictions_all_hosts = jax_utils.unreplicate( + eval_predictions_all_hosts) + + # Collect preds and labels to be sent for computing global metrics. + predictions = detr_train_utils.process_and_fetch_to_host( + eval_predictions_all_hosts, eval_batch_all_hosts['batch_mask']) + predictions = jax.tree_util.tree_map(np.asarray, predictions) + + labels = detr_train_utils.process_and_fetch_to_host( + eval_batch_all_hosts['label'], eval_batch_all_hosts['batch_mask']) + labels = jax.tree_util.tree_map(np.asarray, labels) + + if eval_step == 0: + logging.info('Pred keys: %s', list(predictions[0].keys())) + logging.info('Labels keys: %s', list(labels[0].keys())) + + # Decompress masks. + for pred in predictions: + if 'pred_masks_compressed' in pred: + pred['pred_masks'] = model.decompress_masks( + [x[np.newaxis, ...] for x in pred['pred_masks_compressed']], + config.num_queries)[0] + for label in labels: + if 'padding_mask_compressed' in label: + label['padding_mask'] = np.logical_and( + *label['padding_mask_compressed']) + + # Add to evaluator. + _wait(future) + if eval_synchronously: + _add_examples(predictions, labels, task) + else: + future = pool.submit(_add_examples, predictions, labels, task) + + del predictions, labels + + del eval_batch, eval_batch_all_hosts, eval_predictions_all_hosts + + eval_summary_future = None + eval_summary = None + if global_evaluator is not None: + _wait(future) + if ds_task == 'layout': + num_eval_examples = global_evaluator.get_num_examples_added() + for (eval_task, eval_ds), cnt in num_eval_examples.items(): + logging.info('Number of %s-%s eval examples: %d', eval_task, eval_ds, + cnt) + if lead_host: + if eval_synchronously: + eval_summary = global_evaluator.compute_metrics() + else: + eval_summary_future = pool.submit(global_evaluator.compute_metrics) + + ############### LOG EVAL SUMMARY ############### + def log_fn_async(step, eval_metrics, future_eval_summary, writer, + metrics_normalizer_fn): + eval_summary = _wait(future_eval_summary) + + # Merge dicts. + all_scores = {} + if eval_summary: + all_scores.update(eval_summary) + + return train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + extra_eval_summary=all_scores, + writer=writer, + prefix='valid', + metrics_normalizer_fn=metrics_normalizer_fn) + + def log_fn_sync(step, eval_metrics, eval_summary, writer, + metrics_normalizer_fn): + + # Merge dicts. + all_scores = {} + if eval_summary: + all_scores.update(eval_summary) + + return train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + extra_eval_summary=all_scores, + writer=writer, + prefix='valid', + metrics_normalizer_fn=metrics_normalizer_fn) + + # Note that we return a Future on a summary instead of the summary itself! + if eval_synchronously: + log_fn_sync( + step=step, + eval_metrics=eval_metrics, + eval_summary=eval_summary, + writer=writer, + metrics_normalizer_fn=metrics_normalizer_fn) + else: + return pool.submit( + log_fn_async, + step=step, + eval_metrics=eval_metrics, + future_eval_summary=eval_summary_future, + writer=writer, + metrics_normalizer_fn=metrics_normalizer_fn) + + ################################################### + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + log_summary_steps = config.get('log_summary_steps', 25) + log_large_summary_steps = config.get('log_large_summary_steps', 0) + checkpoint_steps = config.get('checkpoint_steps') or steps_per_epoch + + # These evaluators only run on the lead_host node. + clean_metrics_evaluator = None + + if lead_host: + metadata = list(datasets_metadata.values()) + tasks = set() + for meta in metadata: + tasks.add(meta['task_name']) + + if 'layout_denoise' in tasks: + clean_metrics_evaluator = layout_train_utils.LayoutDenoiseGlobalEvaluator( + config.get('num_classes', 26)) + + train_metrics = collections.defaultdict(list) + extra_training_logs = collections.defaultdict(list) + train_summary, eval_summaries = None, None + + chrono = train_utils.Chrono( + first_step=start_step, + total_steps=total_steps, + steps_per_epoch=steps_per_epoch, + global_bs=config.batch_size, + accum_train_time=int(jax_utils.unreplicate(train_state.accum_train_time))) + + all_datasets = config.get('dataset_names') + + def get_dataset_weights(crt_step): + stages = config.get('dataset_weight_stages') + stage_idx = 0 + for idx, stage_end in enumerate(stages): + if stage_end > crt_step: + stage_idx = idx + break + return config.get('dataset_weights')[stage_idx] + + def get_next_train_batch(step): + strategy = config.get('multi_task_training_strategy', 'sampling') + if strategy == 'sampling': + dataset_name = random.Random(step).choices(all_datasets, + get_dataset_weights(step))[0] + elif strategy == 'sequential': + idx = step % len(all_datasets) + dataset_name = all_datasets[idx] + else: + raise ValueError('Sampling strategy: %s' % strategy) + ds = dataset_dict[dataset_name] + return next(ds.train_iter), ds.meta_data['task_name'], dataset_name + + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + if writer: + writer.write_scalars(1, step0_log) + + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch, train_task, train_ds = get_next_train_batch(step) + (train_state, t_metrics, lr, backbone_lr, + train_predictions) = train_step_pmapped(train_state, train_batch, + train_task) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics[(train_task, train_ds)].append(t_metrics) + + # Additional training logs: learning rate, learning_rate_backbone: + extra_training_logs[(train_task, train_ds)].append({ + 'learning_rate': lr, + 'learning_rate_backbone': backbone_lr, + }) + + for h in hooks: + h(step) + + chrono.pause() + if (log_large_summary_steps and step % log_large_summary_steps == 0 and + lead_host): + ############### LOG EXPENSIVE TRAIN SUMMARY ############### + # Visualizes detections using side-by-side gt-pred images. + # TODO(mjlm): Investigate this error when including `batch_mask`: + # RuntimeError: Invalid argument: from_python argument must be an array. + to_cpu = lambda x: jax.device_get(dataset_utils.unshard(x)) + del train_batch['batch_mask'] + if ('pred_logits' in train_predictions and + 'pred_boxes' in train_predictions): + # Only draw side-by-side when bbox/type predictions are present. + train_pred_cpu = to_cpu(train_predictions) + train_batch_cpu = to_cpu(train_batch) + viz = detr_train_utils.draw_boxes_side_by_side( + train_pred_cpu, + train_batch_cpu, + label_map=dataset.get_ui_label_map(config.num_classes)) + + viz_detections = { + f'sidebyside_{i}/detection': viz_[None, ...] + for i, viz_ in enumerate(viz) + } + writer.write_images(step, viz_detections) + + del train_predictions + + if (step % log_summary_steps == 0) or (step == total_steps): + ############### LOG TRAIN SUMMARY ############### + if lead_host: + chrono.tick(step, writer) + train_summary = {} + for train_task, train_ds in train_metrics.keys(): + train_metrics_cpu = jax.tree_util.tree_map( + train_utils.unreplicate_and_get, + train_metrics[(train_task, train_ds)]) + extra_training_logs_cpu = jax.tree_util.tree_map( + train_utils.unreplicate_and_get, + extra_training_logs[(train_task, train_ds)]) + train_summary.update( + train_utils.log_train_summary( + step=step, + train_metrics=train_metrics_cpu, + extra_training_logs=extra_training_logs_cpu, + writer=writer, + metrics_normalizer_fn=metrics_normalizer_fn, + prefix=f'train-{train_task}-{train_ds}', + key_separator='/')) + # Reset metric accumulation for next evaluation cycle. + train_metrics = collections.defaultdict(list) + extra_training_logs = collections.defaultdict(list) + ################################################# + + if (step % log_eval_steps == 0) or (step == total_steps): + # Sync model state across replicas (in case of having model state, e.g. + # batch statistic when using batch norm). + with report_progress.timed('eval'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summaries = [] + for ds_name in config.get('eval_dataset_names', all_datasets): + ds_task = dataset_dict[ds_name].meta_data['task_name'] + start_time = time.time() + if ds_task == 'layout_denoise': + global_evaluator = clean_metrics_evaluator + else: + global_evaluator = None + eval_summary = evaluate(global_evaluator, train_state, ds_name, + ds_task, step, + config.get('eval_synchronously', False)) + eval_summaries.append(eval_summary) + duration = time.time() - start_time + try: + ex = eval_summary.exception(1) if eval_summary else None + if ex is not None: + logging.error('Failed with %s evaluation: %.4f sec.', ds_name, + duration) + raise ex # pylint: disable=raising-bad-type + logging.info('Done with %s evaluation: %.4f sec.', ds_name, + duration) + except futures.TimeoutError: + pass + + if writer: + writer.flush() + if step != total_steps: + del eval_summaries # Free up space. + + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)) and config.checkpoint: + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + train_state.replace(accum_train_time=chrono.accum_train_time) + train_utils.save_checkpoint(workdir, train_state) + + chrono.resume() # Un-pause now. + + # Aggregate eval summaries. + eval_dict = {} + if eval_summaries: + for eval_summary in eval_summaries: + eval_dict.update(eval_summary.result()) + + pool.shutdown() + # Wait until computations are done before exiting. + jax.random.normal(jax.random.PRNGKey(0), ()).block_until_ready() + return train_state, train_summary, eval_dict diff --git a/scenic/projects/loca/README.md b/scenic/projects/loca/README.md new file mode 100644 index 0000000000000000000000000000000000000000..72f7ec8dadb48ec1d76d4de72b5d5a12c9f9d563 --- /dev/null +++ b/scenic/projects/loca/README.md @@ -0,0 +1,72 @@ +# LOCA: Location-Aware Self-Supervised Vision Transformers for Semantic Segmentation + +JAX implementation and pretrained models for LOCA. For details, see [`arXiv`](https://arxiv.org/abs/2212.02400). + + + +## Training +Like other projects in Scenic, all model parameters, training sets and datasets are specified using [configuration files](configs). + +An example command-line to train ViT-Base/16 on the ImageNet-1k dataset during 100 epochs using this [config file](configs/loca_imnet1k_base16.py) is: + +```shell +$ python -m scenic.projects.loca.main \ + --config=scenic/projects/loca/configs/loca_imnet1k_base16.py \ + --workdir=loca_base/ +``` + +The resulting checkpoint should reach 46.2 mIoU after finetuning on ADE20k dataset with the linear decoder from [Segmenter](https://arxiv.org/abs/2105.05633). + +## Model Zoo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
archdatamIoU ADE20kdownload
ViT-S/16ImageNet-1k44.8checkpoint
ViT-B/16ImageNet-1k48.0checkpoint
ViT-B/16ImageNet-21k48.5checkpoint
ViT-L/16ImageNet-21k52.3checkpoint
ViT-H/16ImageNet-21k54.3checkpoint
+ +## Citation + +If you use LOCA, please use the following BibTeX entry. + +``` +@article{caron2022location, + title={Location-Aware Self-Supervised Vision Transformers for Semantic Segmentation}, + author={Caron, Mathilde and Houlsby, Neil and Schmid, Cordelia}, + journal={arXiv:2212.02400}, + year={2022} +} +``` diff --git a/scenic/projects/loca/__init__.py b/scenic/projects/loca/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/loca/configs/__init__.py b/scenic/projects/loca/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/loca/configs/loca_imnet1k_base16.py b/scenic/projects/loca/configs/loca_imnet1k_base16.py new file mode 100644 index 0000000000000000000000000000000000000000..d3425e0a90f6b5f89586117b26527634a0d4a9ae --- /dev/null +++ b/scenic/projects/loca/configs/loca_imnet1k_base16.py @@ -0,0 +1,139 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +"""Default config for LOCA training on ImageNet2012 for 100 epochs.""" + +import ml_collections + +VARIANT = 'B/16' +_IMAGENET_TRAIN_SIZE = 1281167 +MEAN_RGB = [0.485, 0.456, 0.406] +STDDEV_RGB = [0.229, 0.224, 0.225] + + +def get_config(): + """Returns the default config for a 100 epoch LOCA training on ImageNet2012.""" + + config = ml_collections.ConfigDict() + config.experiment_name = '100ep_run' + # Dataset. + config.dataset_name = 'loca_dataset' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.shuffle_buffer_size = 250_000 + reference_resolution = 224 + n_queries = 10 + config.dataset_configs.number_of_focal_queries = n_queries - 1 + config.dataset_configs.pp_train = ( + 'decode' + + '|copy("image", "reference")' + + '|init_patch_matching_tracker(14, "target_mask")' + + '|init_box_tracker("target_box")' + + f'|cropflip_generatemask({reference_resolution}, 32, flip=False, inkey=("reference", "target_mask", "target_box"), outkey=("reference", "target_mask", "target_box"))' + + '|value_range(0, 1, data_key="reference")' + + '|random_color_jitter(0.8, 0.4, 0.4, 0.2, 0.1, data_key="reference")' + + '|random_grayscale(0.2, data_key="reference")' + + '|random_blur(1.0, data_key="reference")' + + f'|standardize({MEAN_RGB}, {STDDEV_RGB}, data_key="reference")' + + ''.join([f'|copy("image", "query{i}")' for i in range(n_queries)]) + + '|inception_crop_with_mask((224, 224), 32, 100, (14, 14), inkey=("query0", "target_mask", "target_box"), outkey=("query0", "query0_mask", "query0_box"))' + + ''.join([f'|inception_crop_with_mask((96, 96), 5, 32, (6, 6), inkey=("query{i}", "target_mask", "target_box"), outkey=("query{i}", "query{i}_mask", "query{i}_box"))' for i in range(1, n_queries)]) + + ''.join([f'|flip_with_mask(inkey=("query{i}", "query{i}_mask"), outkey=("query{i}", "query{i}_mask"))' for i in range(n_queries)]) + + ''.join([f'|value_range(0, 1, data_key="query{i}")' for i in range(n_queries)]) + + ''.join([f'|random_color_jitter(0.8, 0.4, 0.4, 0.2, 0.1, data_key="query{i}")' for i in range(n_queries)]) + + ''.join([f'|random_grayscale(0.2, data_key="query{i}")' for i in range(n_queries)]) + + ''.join([f'|random_blur(0.5, data_key="query{i}")' for i in range(1, n_queries)]) + + '|random_blur(0.1, data_key="query0")|random_solarize(0.2, data_key="query0")' + + ''.join([f'|standardize({MEAN_RGB}, {STDDEV_RGB}, data_key="query{i}")' for i in range(n_queries)]) + + '|keep("reference"' + ''.join([f', "query{i}", "query{i}_box", "query{i}_mask"' for i in range(n_queries)]) + ')') + # For IMAGENET-1K + config.dataset_configs.dataset = 'imagenet2012' + config.dataset_configs.train_split = 'train' + + # Model. + version, patch = VARIANT.split('/') + patch = int(patch) + config.model = ml_collections.ConfigDict() + config.model.hidden_size = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [patch, patch] + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = {'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config.model.num_layers = {'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + config.model.head_output_dim = 4096 + config.model.attention_dropout_rate = 0.0 + config.model.dropout_rate = 0.0 + config.model.stochastic_depth = 0.1 + config.model_dtype_str = 'float32' + config.model.temperature = 0.1 + config.sharpening = 0.05 + + # LOCA specific parameters. + config.n_ref_positions = int((reference_resolution // patch)**2) + config.apply_cluster_loss = True + config.reference_seqlen = int(0.2 * config.n_ref_positions) # 20% of 196 is 39 + config.reference_seqlen_selection = 'consecutive' # or 'unstructured' or 'first' + config.query_max_seqlen = 70 + + # Training. + config.max_grad_norm = 1 + config.num_training_epochs = 100 + config.batch_size = 1024 + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + config.rng_seed = 42 + total_steps = config.num_training_epochs * steps_per_epoch + + # Learning rate. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = steps_per_epoch * 15 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.001 * config.batch_size / 1024 + config.lr_configs.alpha = 0.01 + + # Weight decay. + config.weight_decay = 0.1 + + # Momentum rate scheduler. + config.momentum_rate = ml_collections.ConfigDict() + config.momentum_rate.factors = 'constant*cosine_decay' + config.momentum_rate.steps_per_cycle = total_steps + config.momentum_rate.base_learning_rate = 0.996 + config.momentum_rate.alpha = 1. / 0.996 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.log_summary_steps = 1000 + + return config + + diff --git a/scenic/projects/loca/loca.png b/scenic/projects/loca/loca.png new file mode 100644 index 0000000000000000000000000000000000000000..93a3978dab6ef536cf274390f75f3527d5a6fc97 --- /dev/null +++ b/scenic/projects/loca/loca.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aaeb8314496356ac8bf87debd3a0bdfd913e91d56f535b9fea12f08f27ce17f9 +size 252494 diff --git a/scenic/projects/loca/loca_dataset.py b/scenic/projects/loca/loca_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..16ed47379487892aa3dc2ac576568e1fe83c27fc --- /dev/null +++ b/scenic/projects/loca/loca_dataset.py @@ -0,0 +1,95 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for a LOCA dataset.""" + +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib.big_transfer import builder + + +@datasets.add_dataset('loca_dataset') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns a generator for training LOCA on a specified dataset. + + Args: + batch_size: int; Determines the training batch size. + eval_batch_size: int; Not used. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: Not used. + prefetch_buffer_size: int; Buffer size for the device prefetch. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes train_iter and dict of meta_data. + """ + del eval_batch_size, rng + logging.info('Loading train split of the %s for LOCA training.', + dataset_configs.dataset) + + train_ds = dataset_utils.get_data( + dataset=dataset_configs.dataset, + split=dataset_configs.train_split, + data_dir=dataset_configs.get('dataset_dir'), + batch_size=batch_size, + preprocess_fn=builder.get_preprocess_fn(dataset_configs.pp_train), + shuffle_buffer_size=dataset_configs.shuffle_buffer_size, + prefetch=dataset_configs.get('prefetch_to_host', 2), + drop_remainder=True, + cache=False, + ignore_errors=True) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + assert dataset_configs.shuffle_buffer_size is not None + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + n_train_ex = dataset_utils.get_num_examples(dataset_configs.dataset, + dataset_configs.train_split) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(shard_batches, train_iter) + train_iter = jax_utils.prefetch_to_device(train_iter, prefetch_buffer_size) + input_shape = (-1,) + tuple(train_ds.element_spec['reference'].shape[1:]) + meta_data = { + 'input_shape': input_shape, + 'num_train_examples': n_train_ex, + 'input_dtype': getattr(jnp, dtype_str), + } + return dataset_utils.Dataset(train_iter, None, None, meta_data) diff --git a/scenic/projects/loca/main.py b/scenic/projects/loca/main.py new file mode 100644 index 0000000000000000000000000000000000000000..fc4ca9f7a257f42fda60a6b0be606cd59767c7e7 --- /dev/null +++ b/scenic/projects/loca/main.py @@ -0,0 +1,46 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for launching LOCA trainings.""" + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.loca import loca_dataset # pylint: disable=unused-import +from scenic.projects.loca import ops # pylint: disable=unused-import +from scenic.projects.loca import trainer +from scenic.train_lib import train_utils + +FLAGS = flags.FLAGS + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main entry point for loca training.""" + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + trainer.train( + rng=rng, + config=config, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/loca/ops.py b/scenic/projects/loca/ops.py new file mode 100644 index 0000000000000000000000000000000000000000..2125eb66bb8c96f5f137d2c86112137b92febf01 --- /dev/null +++ b/scenic/projects/loca/ops.py @@ -0,0 +1,450 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of data preprocessing ops useful for LOCA training.""" +import functools + +from scenic.dataset_lib.big_transfer import registry +from scenic.dataset_lib.big_transfer.preprocessing import utils +import tensorflow as tf + + +# The two following decorators mimic the support for single-input +# single-output ops already in scenic.dataset_lib.big_transfer.preprocessing and +# adapt them to the preprocessing of ops with two `inkey`` and two `outkey` +# arguments. +class TwoInKeysTwoOutKeys(object): + """Decorator for preprocessing ops with two inkey and two outkey arguments. + + Note: Support for single-input single-output ops is in already in + scenic.dataset_lib.big_transfer.preprocessing.InKeyOutKey. + """ + + def __init__(self, indefault=("inputs", "label"), + outdefault=("inputs", "label")): + self.indefault = indefault + self.outdefault = outdefault + + def __call__(self, orig_get_pp_fn): + + def get_ikok_pp_fn(*args, + inkey=self.indefault, + outkey=self.outdefault, + **kw): + orig_pp_fn = orig_get_pp_fn(*args, **kw) + def _ikok_pp_fn(data): + data[outkey[0]], data[outkey[1]] = orig_pp_fn( + data[inkey[0]], data[inkey[1]]) + return data + + return _ikok_pp_fn + + return get_ikok_pp_fn + + +class BatchedImagePreprocessingWithMask(object): + """Decorator for preprocessing ops which adds support for image batches. + + Note: Doesn't support decorating ops which add new fields in data. + """ + + def __call__(self, get_pp_fn): + def tf_apply_to_image_or_images(fn, image_or_images, mask_or_masks): + """Applies a function to a single element or each element in a batch.""" + static_rank = len(image_or_images.get_shape().as_list()) + if static_rank == 3: # A single image: HWC + return fn(image_or_images, mask_or_masks) + elif static_rank == 4: # A batch of images: BHWC + aux = [fn(x, y) for x, y in zip(tf.unstack(image_or_images), + tf.unstack(mask_or_masks))] + return tf.stack([x for (x, _) in aux]), tf.stack([y for (_, y) in aux]) + else: + raise ValueError("Unsupported image rank: %d" % static_rank) + + def get_batch_pp_fn(*args, **kwargs): + """Preprocessing function that supports batched images.""" + + def _batch_pp_fn(image, mask, *a, **kw): + orig_image_pp_fn = get_pp_fn(*args, **kwargs) + orig_image_pp_fn = functools.partial(orig_image_pp_fn, *a, **kw) + return tf_apply_to_image_or_images(orig_image_pp_fn, image, mask) + + return _batch_pp_fn + + return get_batch_pp_fn + + +# The three following functions and decorators mimic the support for +# single-input single-output ops already present in: +# scenic.dataset_lib.big_transfer.preprocessing and adapt them to the +# preprocessing of ops with two `inkey`` and two `outkey` arguments. +def tf_apply_to_image_mask_box(fn, image_or_images, mask_or_masks, + box_or_boxes): + """Applies a function to a single element or each element in a batch.""" + static_rank = len(image_or_images.get_shape().as_list()) + if static_rank == 3: # A single image: HWC + return fn(image_or_images, mask_or_masks, box_or_boxes) + elif static_rank == 4: # A batch of images: BHWC + aux = [fn(x, y, z) for x, y, z in zip(tf.unstack(image_or_images), + tf.unstack(mask_or_masks), + tf.unstack(box_or_boxes))] + return (tf.stack([x for (x, _, _) in aux]), + tf.stack([y for (_, y, _) in aux]), + tf.stack([z for (_, _, z) in aux])) + else: + raise ValueError("Unsupported image rank: %d" % static_rank) + + +class BatchedImagePreprocessingWithMaskAndBox(object): + """Decorator for preprocessing ops, which adds support for image batches. + + Note: Doesn't support decorating ops which add new fields in data. + """ + + def __call__(self, get_pp_fn): + def get_batch_pp_fn(*args, **kwargs): + """Preprocessing function that supports batched images.""" + + def _batch_pp_fn(image, mask, box, *a, **kw): + orig_image_pp_fn = get_pp_fn(*args, **kwargs) + orig_image_pp_fn = functools.partial(orig_image_pp_fn, *a, **kw) + return tf_apply_to_image_mask_box(orig_image_pp_fn, image, mask, box) + + return _batch_pp_fn + + return get_batch_pp_fn + + +class ThreeInKeysThreeOutKeys(object): + """Decorator for preprocessing ops, which adds `inkey` and `outkey` arguments. + + Note: Support for single-input single-output ops is in already in + scenic.dataset_lib.big_transfer.preprocessing.InKeyOutKey. + """ + + def __init__(self, indefault=("inputs", "label", "box"), + outdefault=("inputs", "label", "box")): + self.indefault = indefault + self.outdefault = outdefault + + def __call__(self, orig_get_pp_fn): + + def get_ikok_pp_fn(*args, + inkey=self.indefault, + outkey=self.outdefault, + **kw): + + orig_pp_fn = orig_get_pp_fn(*args, **kw) + + def _ikok_pp_fn(data): + data[outkey[0]], data[outkey[1]], data[outkey[2]] = orig_pp_fn( + data[inkey[0]], data[inkey[1]], data[inkey[2]]) + return data + + return _ikok_pp_fn + + return get_ikok_pp_fn + + +@registry.Registry.register("preprocess_ops.init_patch_matching_tracker", + "function") +def init_patch_matching_tracker(size, outkey="mask"): + """Initialize square grid to track patches correspondances in a mask.""" + + def _init_patch_matching_tracker(data): + data[outkey] = tf.reshape(tf.range(size**2), [size, size, 1]) + return data + + return _init_patch_matching_tracker + + +@registry.Registry.register("preprocess_ops.init_box_tracker", "function") +def init_box_tracker(outkey="box"): + """Initialize box coordinates that will track the view intersections.""" + + def _init_box_tracker(data): + # First dim is for unvalid/valid box. Format is y,x,h,w. + data[outkey] = tf.zeros((5), tf.float32) + return data + + return _init_box_tracker + + +@registry.Registry.register("preprocess_ops.cropflip_generatemask", "function") +@ThreeInKeysThreeOutKeys() +@BatchedImagePreprocessingWithMaskAndBox() +def cropflip_generatemask(resize_size=224, area_min=5, area_max=100, flip=True, + resize_method=tf.image.ResizeMethod.BILINEAR): + """Crop and flip an image and keep track of these operations with a mask.""" + def _cropflip_generatemask(image, mask, box): + orig_shape = tf.shape(image) + begin, size, _ = tf.image.sample_distorted_bounding_box( + orig_shape, + tf.zeros([0, 0, 4], tf.float32), + area_range=(area_min / 100, area_max / 100), + min_object_covered=0, # Don't enforce a minimum area. + use_image_if_no_bounding_boxes=True) + crop = tf.slice(image, begin, size) + box = tf.concat((box[:1], + tf.cast(begin[:2], tf.float32), + tf.cast(size[:2], tf.float32)), axis=-1) + # Unfortunately, the above operation loses the depth-dimension. So we need + # to restore it the manual way. + crop.set_shape([None, None, image.shape[-1]]) + crop = tf.image.resize(crop, [resize_size, resize_size], resize_method) + + # flip + if flip: + seed = tf.random.uniform(shape=[2], maxval=2**31 - 1, dtype=tf.int32) + crop = tf.image.stateless_random_flip_left_right(crop, seed) + mask = tf.image.stateless_random_flip_left_right(mask, seed) + + resized_mask = tf.image.resize(mask, size[:2], "nearest") + paddings = [[begin[0], orig_shape[0] - size[0] - begin[0]], + [begin[1], orig_shape[1] - size[1] - begin[1]], [0, 0]] + full_mask = tf.pad(resized_mask, paddings, "CONSTANT", constant_values=-1) + + return crop, full_mask, box + + return _cropflip_generatemask + + +@registry.Registry.register("preprocess_ops.flip_with_mask", "function") +@TwoInKeysTwoOutKeys() +@BatchedImagePreprocessingWithMask() +def flip_with_mask(): + def _flip_with_mask(image, mask): + seed = tf.random.uniform(shape=[2], maxval=2**31 - 1, dtype=tf.int32) + image = tf.image.stateless_random_flip_left_right(image, seed) + mask = tf.image.stateless_random_flip_left_right(mask, seed) + return image, mask + return _flip_with_mask + + +@registry.Registry.register("preprocess_ops.inception_crop_with_mask", + "function") +@ThreeInKeysThreeOutKeys() +@BatchedImagePreprocessingWithMaskAndBox() +def inception_crop_with_mask(resize_size=None, area_min=5, area_max=100, + resize_mask=None, + resize_method=tf.image.ResizeMethod.BILINEAR): + """Applies the same inception-style crop to an image and a mask tensor. + + Inception-style crop is a random image crop (its size and aspect ratio are + random) that was used for training Inception models, see + https://www.cs.unc.edu/~wliu/papers/GoogLeNet.pdf. + + Args: + resize_size: Sequence of 2 ints; Resize image to [height, width] after crop. + area_min: minimal crop area. + area_max: maximal crop area. + resize_mask: Whether we should resize the mask. + resize_method: Resize method. + + Returns: + Function to crop image and mask tensors. + """ + def _inception_crop_with_mask(image, mask, box): + begin, size, _ = tf.image.sample_distorted_bounding_box( + tf.shape(image), tf.zeros([0, 0, 4], tf.float32), + area_range=(area_min / 100, area_max / 100), + min_object_covered=0, # Don't enforce a minimum area. + use_image_if_no_bounding_boxes=True) + # Process image: + image_cropped = tf.slice(image, begin, size) + image_cropped.set_shape([None, None, image.shape[-1]]) + if resize_size: + image_cropped = tf.image.resize(image_cropped, resize_size, resize_method) + + # Process box: + # max(xB - xA, 0) / wA + box = box[1:] + relative_begin = tf.stack(( + tf.divide(tf.maximum(tf.cast(begin[0], tf.float32) - box[0], 0.), + box[2]), + tf.divide(tf.maximum(tf.cast(begin[1], tf.float32) - box[1], 0.), + box[3])), axis=-1) + # (min(xA + wA, xB + wB) - (begin * WA + xA)) / wA + relative_size = tf.stack(( + tf.maximum(0., tf.divide(tf.minimum( + tf.cast(begin[0], tf.float32) + tf.cast(size[0], tf.float32), + box[0] + box[2] + ), box[2]) - relative_begin[0] - tf.divide(box[0], box[2])), + tf.maximum(0., tf.divide(tf.minimum( + tf.cast(begin[1], tf.float32) + tf.cast(size[1], tf.float32), + box[1] + box[3] + ), box[3]) - relative_begin[1] - tf.divide(box[1], box[3]))), + axis=-1) + # We filter out small boxes. + valid_box = tf.cast(tf.greater(relative_size[0], 0.1), tf.float32) + valid_box *= tf.cast(tf.greater(relative_size[1], 0.1), tf.float32) + valid_box = tf.convert_to_tensor([valid_box]) + box = tf.concat((valid_box, relative_begin, relative_size), axis=-1) + + # Process mask: + mask_cropped = tf.slice(mask, begin, size) + mask_cropped.set_shape([None, None, mask.shape[-1]]) + if resize_size: + mask_cropped = tf.image.resize( + mask_cropped, resize_size, tf.image.ResizeMethod.NEAREST_NEIGHBOR) + if resize_mask: + mask_cropped = tf.image.resize( + mask_cropped, resize_mask, tf.image.ResizeMethod.NEAREST_NEIGHBOR) + return image_cropped, mask_cropped, box + return _inception_crop_with_mask + + +@registry.Registry.register("preprocess_ops.random_color_jitter", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def random_color_jitter(proba, brightness=0, contrast=0, saturation=0, hue=0): + """Distorts the color of the image (jittering order is random). + + Args: + proba: Probability of applying color jittering. + brightness: A float, specifying the brightness for color jitter. + contrast: A float, specifying the contrast for color jitter. + saturation: A float, specifying the saturation for color jitter. + hue: A float, specifying the hue for color jitter. + + Returns: + Function that distort image color. + """ + def _apply_transform(i, x): + """Apply the i-th transformation.""" + def brightness_foo(): + if brightness == 0: + return x + else: + return tf.image.random_brightness(x, max_delta=brightness) + def contrast_foo(): + if contrast == 0: + return x + else: + return tf.image.random_contrast(x, lower=1-contrast, upper=1+contrast) + def saturation_foo(): + if saturation == 0: + return x + else: + return tf.image.random_saturation( + x, lower=1-saturation, upper=1+saturation) + def hue_foo(): + if hue == 0: + return x + else: + return tf.image.random_hue(x, max_delta=hue) + x = tf.cond(tf.less(i, 2), + lambda: tf.cond(tf.less(i, 1), brightness_foo, contrast_foo), + lambda: tf.cond(tf.less(i, 3), saturation_foo, hue_foo)) + return x + + @tf.function + def _random_color_jitter(image): + do_it = tf.random.uniform([], minval=0, maxval=1, dtype=tf.float32) + if do_it < proba: + perm = tf.random.shuffle(tf.range(4)) + for i in range(4): + image = _apply_transform(perm[i], image) + image = tf.clip_by_value(image, 0., 1.) + return image + return _random_color_jitter + + +@registry.Registry.register("preprocess_ops.random_grayscale", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def random_grayscale(p): + """Randomly converts imageto gray.""" + def _to_grayscale(image): + return tf.cond( + tf.less(tf.random.uniform([], minval=0, maxval=1, dtype=tf.float32), + tf.cast(p, tf.float32)), + lambda: tf.tile(tf.image.rgb_to_grayscale(image), [1, 1, 3]), + lambda: image) + return _to_grayscale + + +def gaussian_blur(image, kernel_size, sigma, padding="SAME"): + """Blurs the given image with separable convolution. + + + Args: + image: Tensor of shape [height, width, channels] and dtype float to blur. + kernel_size: Integer Tensor for the size of the blur kernel. This is should + be an odd number. If it is an even number, the actual kernel size will be + size + 1. + sigma: Sigma value for gaussian operator. + padding: Padding to use for the convolution. Typically 'SAME' or 'VALID'. + + Returns: + A Tensor representing the blurred image. + """ + radius = tf.cast(kernel_size / 2, tf.int32) + kernel_size = radius * 2 + 1 + x = tf.cast(tf.range(-radius, radius + 1), tf.float32) + blur_filter = tf.exp( + -tf.pow(x, 2.0) / (2.0 * tf.pow(tf.cast(sigma, tf.float32), 2.0))) + blur_filter /= tf.reduce_sum(blur_filter) + # One vertical and one horizontal filter. + blur_v = tf.reshape(blur_filter, [kernel_size, 1, 1, 1]) + blur_h = tf.reshape(blur_filter, [1, kernel_size, 1, 1]) + num_channels = tf.shape(image)[-1] + blur_h = tf.tile(blur_h, [1, 1, num_channels, 1]) + blur_v = tf.tile(blur_v, [1, 1, num_channels, 1]) + expand_batch_dim = image.shape.ndims == 3 + if expand_batch_dim: + # Tensorflow requires batched input to convolutions, which we can fake with + # an extra dimension. + image = tf.expand_dims(image, axis=0) + blurred = tf.nn.depthwise_conv2d( + image, blur_h, strides=[1, 1, 1, 1], padding=padding) + blurred = tf.nn.depthwise_conv2d( + blurred, blur_v, strides=[1, 1, 1, 1], padding=padding) + if expand_batch_dim: + blurred = tf.squeeze(blurred, axis=0) + return blurred + + +@registry.Registry.register("preprocess_ops.random_blur", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def random_blur(height=224, p=1.0): + """Randomly blurs the image.""" + def _random_blur(image): + sig = tf.random.uniform([], 0.1, 2.0, dtype=tf.float32) + ks = height // 10 + return tf.cond( + tf.less(tf.random.uniform([], minval=0, maxval=1, dtype=tf.float32), + tf.cast(p, tf.float32)), + lambda: gaussian_blur(image, kernel_size=ks, sigma=sig, padding="SAME"), + lambda: image) + return _random_blur + + +@registry.Registry.register("preprocess_ops.random_solarize", "function") +@utils.InKeyOutKey() +@utils.BatchedImagePreprocessing() +def random_solarization(p=0.1): + """Randomly solarizes the images.""" + def _solarize(image): + image = image * tf.cast(tf.less(image, 0.5), tf.float32) + ( + 1.0 - image) * tf.cast(tf.greater_equal(image, 0.5), tf.float32) + return image + def _random_solarize(image): + return tf.cond( + tf.less(tf.random.uniform([], minval=0, maxval=1, dtype=tf.float32), + tf.cast(p, tf.float32)), + lambda: _solarize(image), + lambda: image) + return _random_solarize diff --git a/scenic/projects/loca/trainer.py b/scenic/projects/loca/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..1a982117d639a114155802800790aa84100f2af6 --- /dev/null +++ b/scenic/projects/loca/trainer.py @@ -0,0 +1,349 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""LOCA Training Script.""" + +import copy +import functools +from typing import Any, Callable, Dict, Tuple + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries import optimizers +import jax.numpy as jnp +import jax.profiler +import ml_collections +import optax +from scenic.dataset_lib import dataset_utils +from scenic.projects.loca import utils +from scenic.projects.loca import vit +from scenic.train_lib import lr_schedules +from scenic.train_lib import train_utils + + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] + + +def loca_train_step( + train_state: utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + momentum_parameter_scheduler: Callable[[int], float], + loss_fn: Any, + metrics_fn: Any, + config: ml_collections.ConfigDict, +) -> Tuple[utils.TrainState, Dict[str, Tuple[float, int]]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Args: + train_state: The state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + momentum_parameter_scheduler: Momentum parameter scheduler for EMA update. + loss_fn: The cross-entropy loss function. + metrics_fn: Reports relative position loss and accuracy. + config: Configurations of the experiment. + + Returns: + The updated state of training. + """ + # Some preparations. + new_rng, dropout_rng, droptok_rng = jax.random.split(train_state.rng, num=3) + dropout_rng = train_utils.bind_rng_to_host_device( + dropout_rng, axis_name='batch', bind_to='device') + droptok_rng = train_utils.bind_rng_to_host_device( + droptok_rng, axis_name='batch', bind_to='device') + step = train_state.global_step + momentum_parameter = momentum_parameter_scheduler(step) + n_pos = config.n_ref_positions # Number of reference positions. + bs = batch['reference'].shape[0] # Per-device batch size. + n_q_foc = config.dataset_configs.number_of_focal_queries + batch = utils.prepare_input(batch, config) + + def training_loss_fn(params): + # Step 1): Forward pass on the REFERENCE view. + use_ema = config.apply_cluster_loss + drop_moment = 'late' if config.apply_cluster_loss else 'early' + _, r_feat_targets, r_patch_features, _ = flax_model.apply( + {'params': train_state.ema_params if use_ema else params}, + batch['reference'], + seqlen=config.reference_seqlen, + seqlen_selection=config.reference_seqlen_selection, + drop_moment=drop_moment, + train=True, + rngs={'dropout': dropout_rng, 'droptok': droptok_rng}) + + # Step 2): Forward pass on the QUERY views. + use_pe = True if config.apply_cluster_loss else False + # 2) a) Query with `random`-style. + q_rand_loc_pred, q_rand_feat_pred, _, q_rand_idx_kept = flax_model.apply( + {'params': params}, + batch['query0'], + inputs_kv=r_patch_features, + seqlen=config.query_max_seqlen, + use_pe=use_pe, + train=True, + rngs={'dropout': dropout_rng, 'droptok': droptok_rng}) + # 2) b) Queries with `focal`-style. + q_foc_loc_pred, q_foc_feat_pred, _, _ = flax_model.apply( + {'params': params}, + batch['queries'], + inputs_kv=jnp.tile(r_patch_features, (n_q_foc, 1, 1)), + use_pe=use_pe, + train=True, + rngs={'dropout': dropout_rng}) + # 2) c) Batch the `random` and `focal` queries together: for both + # predictions (`q_loc_pred`) and targets (`q_loc_targets`). + # + # q_loc_pred is position logits for all the patches of the queries. + q_loc_pred = jnp.concatenate([ + q_rand_loc_pred.reshape(-1, n_pos), + q_foc_loc_pred.reshape(-1, n_pos)], axis=0) + q_rand_loc_targets = batch['query0_target_position'].reshape(bs, -1) + # If tokens were dropped in the query0 (i.e. `random`-style query): + if len(q_rand_idx_kept) < q_rand_loc_targets.shape[1]: + # then drop the corresponding target positions. + q_rand_loc_targets = jnp.take(q_rand_loc_targets, q_rand_idx_kept, axis=1) + q_foc_loc_targets = batch['target_positions'] + q_loc_targets = jnp.concatenate([q_rand_loc_targets.reshape(-1), + q_foc_loc_targets.reshape(-1)], + axis=0) + q_r_intersect = q_loc_targets != -1 # intersection of reference and queries + # q_loc_targets are the position to predict for all the patches of the + # queries. + q_loc_targets = jax.nn.one_hot(q_loc_targets, n_pos) + + # Step 3): Position prediction loss. + localization_loss = loss_fn(q_loc_pred, q_loc_targets, q_r_intersect) + + # Step 4): Patch cluster prediction loss. + feature_loss = 0 + if config.apply_cluster_loss: + k = r_feat_targets.shape[-1] # Output dimension for feature pred loss. + q_feat_pred = jnp.concatenate([ + q_rand_feat_pred, q_foc_feat_pred], axis=0) / config.model.temperature + # Feature targets. + r_feat_targets = nn.softmax(r_feat_targets / config.sharpening, axis=-1) + # We adjust the targets with Optimal Transport to prevent collapse. + r_feat_targets = utils.sinkhorn(r_feat_targets, distributed=True) + # (bs*N) x k -> bs x N x k + r_feat_targets = r_feat_targets.reshape(bs, -1, k) + # Feature targets for the random query. + q_rand_feat_targets = jnp.take_along_axis( + r_feat_targets, jnp.expand_dims(q_rand_loc_targets, axis=-1), axis=1) + q_rand_feat_targets = q_rand_feat_targets.reshape(-1, k) + # Feature targets for the focal queries. + r_feat_targets = jnp.tile(r_feat_targets, (n_q_foc, 1, 1)) + q_foc_feat_targets = jnp.take_along_axis( + r_feat_targets, jnp.expand_dims(q_foc_loc_targets, axis=-1), axis=1) + q_foc_feat_targets = q_foc_feat_targets.reshape(-1, k) + # Concatenate the targets for the random and focal queries. + q_feat_targets = jnp.concatenate([ + q_rand_feat_targets, q_foc_feat_targets], axis=0) + feature_loss = loss_fn(q_feat_pred, q_feat_targets, q_r_intersect) + # `me-max` regularization. + avg_prediction = jnp.mean(nn.softmax(q_feat_pred, axis=-1), axis=0) + avg_prediction = jax.lax.pmean(avg_prediction, axis_name='batch') + feature_loss += jnp.sum(avg_prediction * jnp.log(avg_prediction)) + + total_loss = localization_loss + feature_loss + return total_loss, ( + {'label': q_loc_targets, 'batch_mask': q_r_intersect}, + q_loc_pred, feature_loss) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (total_loss, (batch, logits, feature_loss)), grad = compute_gradient_fn( + train_state.params) + metrics = metrics_fn(logits, batch) + metrics.update( + dict(total_loss=(total_loss, 1), feature_loss=(feature_loss, 1))) + + # Update the network parameters. + grad = jax.lax.pmean(grad, axis_name='batch') + if config.get('max_grad_norm', None) is not None: + grad = optimizers.clip_grads(grad, config.max_grad_norm) + new_train_state = train_state + if train_state.tx is not None: + updates, new_opt_state = train_state.tx.update( + grad, train_state.opt_state, train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + # update the teacher weights + new_ema_params = jax.tree_util.tree_map( + lambda s, t: momentum_parameter * t + (1 - momentum_parameter) * s, + new_params, + train_state.ema_params, + ) + + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=step + 1, + opt_state=new_opt_state, + params=new_params, + ema_params=new_ema_params, + rng=new_rng) + return new_train_state, metrics + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[Any, Any]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the utils.TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + dataset: The dataset that has train_iter and meta_data. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_state that has the state of training. + """ + lead_host = jax.process_index() == 0 + + # Build the loss_fn, metrics, and flax_model. + model = vit.ViTLOCAModel(config, dataset.meta_data) + + # Randomly initialize model parameters. + rng, init_rng = jax.random.split(rng) + (params, _, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, rngs=init_rng) + # Only one model function but two sets of parameters. + ema_params = copy.deepcopy(params) + + # Get learning rate and ema temperature schedulers. + learning_rate_fn = lr_schedules.get_learning_rate_fn(config) + momentum_parameter_scheduler = lr_schedules.compound_lr_scheduler( + config.momentum_rate) + + # Create optimizer. + weight_decay_mask = jax.tree_util.tree_map(lambda x: x.ndim != 1, params) + tx = optax.inject_hyperparams(optax.adamw)( + learning_rate=learning_rate_fn, weight_decay=config.weight_decay, + mask=weight_decay_mask,) + opt_state = jax.jit(tx.init, backend='cpu')(params) + + # Create chrono class to track and store training statistics and metadata. + chrono = train_utils.Chrono() + + # Create the TrainState to track training state (i.e. params and optimizer). + train_state = utils.TrainState( + global_step=0, opt_state=opt_state, tx=tx, params=params, + ema_params=ema_params, rng=rng, metadata={'chrono': chrono.save()}) + + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = utils.restore_checkpoint(workdir, train_state) + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + # Replicate the training state: optimizer, params and rng. + train_state = jax_utils.replicate(train_state) + del params, ema_params + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + # The function that performs one step of loca training. + loca_train_step_pmapped = jax.pmap( + functools.partial( + loca_train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn(), + momentum_parameter_scheduler=momentum_parameter_scheduler, + config=config), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + + train_metrics, train_summary = [], None + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + report_progress = periodic_actions.ReportProgress(num_train_steps=total_steps, + writer=writer) + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + logging.info('Starting training loop at step %d.', start_step + 1) + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, tm = loca_train_step_pmapped(train_state, train_batch) + train_metrics.append(tm) + for h in hooks: + h(step) + ###################### LOG TRAIN SUMMARY ######################## + if (step % config.get('log_summary_steps') == 1) or (step == total_steps): + chrono.pause() + if lead_host: + chrono.tick(step, writer, write_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + writer=writer) + chrono.resume() + train_metrics = [] + ##################### CHECKPOINTING ################### + if ((step % config.get('checkpoint_steps') == 1 and step > 1) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + if lead_host: + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + utils.save_checkpoint(workdir, unrep_train_state) + del unrep_train_state + chrono.resume() # Un-pause now. + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train summary after last step. + return train_state, train_summary diff --git a/scenic/projects/loca/utils.py b/scenic/projects/loca/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..1e4092e68b133d3e0ef52a4bb3b37ec92b371180 --- /dev/null +++ b/scenic/projects/loca/utils.py @@ -0,0 +1,175 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training utilities.""" +import os +from typing import Any, Dict, Tuple, Optional + +import flax +from flax import jax_utils +from flax import struct +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import optax +from scenic.dataset_lib import dataset_utils +from tensorflow.io import gfile + + +@flax.struct.dataclass +class TrainState: + """Dataclass to keep track of state of training. + + The state of training is structured as a flax.struct.dataclass, which enables + instances of this class to be passed into jax transformations like tree_map + and pmap. + """ + + tx: Optional[optax.GradientTransformation] = struct.field(pytree_node=False) + opt_state: Optional[optax.OptState] = None + ema_params: Optional[Any] = None + params: Optional[Any] = None + state: Optional[Any] = None + ema_state: Optional[Any] = None + global_step: Optional[int] = 0 + rng: Optional[jnp.ndarray] = None + metadata: Optional[Dict[str, Any]] = None + + def __getitem__(self, item): + """Make TrainState a subscriptable object.""" + return getattr(self, item) + + def get(self, keyname: str, default: Optional[Any] = None) -> Any: + """Return the value for key if it exists otherwise the default.""" + try: + return self[keyname] + except KeyError: + return default + + +def save_checkpoint(workdir: str, + train_state: TrainState, + max_to_keep: int = 3, + overwrite: bool = False, + keep_every_n_steps: int = 50000): + """Saves a checkpoint. + + First syncs the model state across replicas, then it unreplicates it by taking + the train state of the first replica and saves it as a checkpoint. + + Args: + workdir: Experiment directory for saving the checkpoint. + train_state: An instance of TrainState that holds the state of training. + max_to_keep: The number of checkpoints to keep. + overwrite: Overwrite existing checkpoint if a checkpoint + at the current or a later step already exits (default: False). + keep_every_n_steps: Keep every checkpoints every n steps. + """ + if jax.process_index() == 0: + checkpoint_state = jax.device_get(train_state) + checkpoints.save_checkpoint( + workdir, + checkpoint_state, + int(checkpoint_state.global_step), + overwrite=overwrite, + keep=max_to_keep, + keep_every_n_steps=keep_every_n_steps) + + +def restore_checkpoint(checkpoint_path: str, + train_state: Optional[TrainState] = None, + assert_exist: bool = False, + step: Optional[int] = None) -> Tuple[ + TrainState, int]: + """Restores the last checkpoint. + + First restores the checkpoint, which is an instance of TrainState that holds + the state of training. + + Args: + checkpoint_path: Directory to restore the checkpoint. + train_state: An instance of TrainState that holds the state of + training. + assert_exist: Assert that there is at least one checkpoint exists in + the given path. + step: Step number to load or None to load latest. If specified, + checkpoint_path must be a directory. + + Returns: + training state and an int which is the current step. + """ + if assert_exist: + glob_path = os.path.join(checkpoint_path, 'checkpoint_*') + if not gfile.glob(glob_path): + raise ValueError('No checkpoint for the pretrained model is found in: ' + f'{checkpoint_path}') + if train_state is None: + raise ValueError('Please use `restore_pretrained_checkpoint` for loading' + 'a checkpoint without providing a Scenic TrainState.') + train_state = checkpoints.restore_checkpoint(checkpoint_path, train_state, + step) + return train_state, int(train_state.global_step) + + +def to_cpu(array: jnp.ndarray): + """Transfers array (replicated on multiple hosts) to a single host. + + Args: + array: Replicated array of shape + [num_hosts, num_devices, local_batch_size, ...]. + + Returns: + array of shape [global_batch_size, ...] where + global_batch_size = num_devices * local_batch_size + """ + return jax.device_get(dataset_utils.unshard(jax_utils.unreplicate(array))) + + +def prepare_input(inputs: Dict[str, jnp.ndarray], + config: ml_collections.ConfigDict) -> Dict[str, jnp.ndarray]: + """Prepare the different views for LOCA training.""" + # Reference view. + batch = dict(reference=inputs['reference']) + + # A bunch of queries. + n_focal_queries = config.dataset_configs.number_of_focal_queries + # This one will have "random" dropping. + batch['query0'] = inputs['query0'] + batch['query0_target_position'] = inputs['query0_mask'] + # Those ones have had "focal" dropping during data processing (i.e. cropping). + batch['queries'] = jnp.concatenate( + [inputs['query' + str(i)] for i in range(1, 1 + n_focal_queries)]) + target_pos = jnp.concatenate([inputs[ + 'query' + str(i) + '_mask'] for i in range(1, 1 + n_focal_queries)]) + batch['target_positions'] = target_pos.reshape(target_pos.shape[0], -1) + return batch + + +def sinkhorn(x, num_itr=3, distributed=True): + """Sinkhorn-Knopp algorithm.""" + for _ in range(num_itr): + # Total weight per prototype per device. + weight_per_proto = jnp.sum(x, axis=0, keepdims=True) + if distributed: + # Globally. + weight_per_proto = jax.lax.psum(weight_per_proto, axis_name='batch') + x /= weight_per_proto + + # Total weight per sample. + weight_per_sample = jnp.sum(x, axis=-1, keepdims=True) + # x sums to 1 for each sample (it is an assignment). + x /= weight_per_sample + return x diff --git a/scenic/projects/loca/vit.py b/scenic/projects/loca/vit.py new file mode 100644 index 0000000000000000000000000000000000000000..bde77306872687be5ebea917b6c03ef043e637de --- /dev/null +++ b/scenic/projects/loca/vit.py @@ -0,0 +1,348 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Vision Transformer used in DINO.""" + +import copy +import functools +from typing import Any, Optional, Tuple + +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import classification_model +from scenic.model_lib.base_models import model_utils +from scenic.model_lib.layers import attention_layers +from scenic.model_lib.layers import nn_layers +from scenic.projects.baselines import vit + + +class ToTokenSequence(nn.Module): + """Transform a batch of views into a sequence of tokens.""" + + patches: ml_collections.ConfigDict + hidden_size: int + posembs: Tuple[int, int] = (14, 14) + positional_embedding: str = 'learned' + + def add_positional_encodings(self, x: jnp.ndarray, + positional_embedding: str = '') -> jnp.ndarray: + """Add positional encodings to the input patch sequence.""" + _, h, w, c = x.shape + positional_embedding = positional_embedding or self.positional_embedding + if positional_embedding == 'learned': + posemb = self.param( + 'posembed_input', + nn.initializers.normal(stddev=1/np.sqrt(c)), + (1, self.posembs[0], self.posembs[1], c), x.dtype) + # Optionally resize the positional encodings. + if (h, w) != self.posembs: + posemb = jax.image.resize(posemb, (1, h, w, c), 'bilinear') + x = x + posemb + elif positional_embedding == 'sinusoidal_2d': + x = attention_layers.AddFixedSinCosPositionEmbedding()(x) + x = jnp.reshape(x, (-1, h * w, c)) + return x + + @nn.compact + def __call__(self, x: jnp.ndarray, positional_embedding: str = '', + seqlen: int = -1, seqlen_selection: str = 'unstructured'): + # Extracting patches and then embedding is in fact a single convolution. + fh, fw = self.patches.size + x = nn.Conv(self.hidden_size, (fh, fw), strides=(fh, fw), padding='VALID', + name='embedding')(x) + + # Adding positional encodings. + x = self.add_positional_encodings(x, positional_embedding) + + # Possibly dropping some tokens. + idx_kept_tokens = None + n_tokens = self.posembs[0] * self.posembs[1] + if seqlen > 0: + rng = self.make_rng('droptok') + idx_kept_tokens = token_indexes_not_to_drop( + seqlen, n_tokens, seqlen_selection, rng) + if len(idx_kept_tokens) < n_tokens: + x = jnp.take(x, idx_kept_tokens, axis=1) + + return x, idx_kept_tokens + + +def token_indexes_not_to_drop(seqlen, n_tokens, seqlen_selection, rng): + """Returns only the token indexes to keep in a sequence of tokens.""" + idx_kept_tokens = jnp.arange(n_tokens) + if seqlen > 0 and seqlen <= n_tokens: + if seqlen_selection in ['consecutive', 'first']: + if seqlen_selection == 'first': + offset = 0 + else: + offset = jax.random.randint(rng, (1,), 0, n_tokens - seqlen + 1)[0] + # Workaround because jnp.arange(offset, offset + seqlen) causes + # a ConcretizationError (even though shape is known to be seqlen...) + idx_kept_tokens = jnp.ones(seqlen) * offset + jnp.arange(seqlen) + elif seqlen_selection == 'unstructured': + idx_kept_tokens = jax.random.permutation(rng, n_tokens)[:seqlen] + idx_kept_tokens = jnp.asarray(idx_kept_tokens, dtype=jnp.int32) + return idx_kept_tokens + + +class ViT4LOCA(nn.Module): + """Vision Transformer model for LOCA training. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + n_ref_positions: Number of position in the reference view. + apply_cluster_loss: Whether to apply the clustering loss. + head_hidden_dim: Dimension of the hidden layer in the projection mlp. + head_bottleneck_dim: Dimension of the bottleneck. + head_output_dim: Dimension of the output ("number of prototypes"). + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_depth: Stochastic depth. + posembs: Positional embedding size. + dtype: JAX data type for activations. + """ + + mlp_dim: int + num_layers: int + num_heads: int + patches: ml_collections.ConfigDict + hidden_size: int + n_ref_positions: int + apply_cluster_loss: bool + head_hidden_dim: int + head_bottleneck_dim: int + head_output_dim: int + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + stochastic_depth: float = 0.1 + posembs: Tuple[int, int] = (14, 14) + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, inputs_kv: Optional[jnp.ndarray] = None, + train: bool, seqlen: int = -1, use_pe: bool = True, + drop_moment: str = 'early', + seqlen_selection: str = 'unstructured', debug: bool = False): + del debug + # Input image -> sequence of patch tokens. + to_token_fn = ToTokenSequence( + patches=self.patches, + hidden_size=self.hidden_size, + posembs=self.posembs) + x, idx_kept_tokens = to_token_fn( + x, seqlen=seqlen if drop_moment == 'early' else -1, + positional_embedding=None if use_pe else 'pe_not_in_use', + seqlen_selection=seqlen_selection) + + # ViT Encoder. + for lyr in range(self.num_layers): + x = vit.Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=(lyr / max(self.num_layers - 1, 1)) * + self.stochastic_depth, + name=f'encoderblock_{lyr}', + dtype=jax.dtypes.canonicalize_dtype(self.dtype))( + x, deterministic=not train) + x = nn.LayerNorm(name='encoder_norm')(x) + + # Optionally apply a clustering prediction loss. + cluster_pred_outputs = None + if self.apply_cluster_loss: + cluster_pred_outputs = ProjectionHead( + hidden_dim=self.head_hidden_dim, + bottleneck_dim=self.head_bottleneck_dim, + output_dim=self.head_output_dim, + name='projection_head_for_clustering_prediction')( + x, train).reshape((-1, self.head_output_dim)) + + patches_repr = x + # Drop some tokens (in the reference view). + if drop_moment == 'late': + rng = self.make_rng('droptok') + idx_kept_tokens = token_indexes_not_to_drop( + seqlen, self.n_ref_positions, seqlen_selection, rng) + if len(idx_kept_tokens) < self.n_ref_positions: + patches_repr = jnp.take(patches_repr, idx_kept_tokens, axis=1) + + # Query patches look at those of the reference through cross attention. + if inputs_kv is None: + inputs_kv = copy.deepcopy(patches_repr) + x = CrossAttentionEncoderBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name='cross_attention_block', + dtype=jax.dtypes.canonicalize_dtype(self.dtype))( + x, inputs_kv=inputs_kv, deterministic=not train) + x = nn.LayerNorm(name='final_norm')(x) + x = nn.Dense(self.n_ref_positions, name='position_predictor')(x) + return x, cluster_pred_outputs, patches_repr, idx_kept_tokens + + +def norm_kernel_init_fn(rng, shape, dtype): + """Initialize kernel with l2 normalized columns.""" + param = nn.linear.default_kernel_init(rng, shape, dtype) + param /= (jnp.linalg.norm(param, axis=0, keepdims=True) + 1e-10) + return param + + +class ProjectionHead(nn.Module): + """Projection head. + + Attributes: + hidden_dim: Dimension of the hidden layer in the projection mlp. + bottleneck_dim: Dimension of the bottleneck. + output_dim: Dimension of the output ("number of prototypes"). + normalize_last_layer: Normalize the last layer of prototypes. + use_bn: Use batch normalizations. + n_layers: Depth of the projection head. + """ + hidden_dim: int = 2048 + bottleneck_dim: int = 256 + output_dim: int = 4096 + n_layers: int = 2 + + @nn.compact + def __call__(self, x: jnp.ndarray, train: bool) -> jnp.ndarray: + for i in range(self.n_layers): + x = nn.Dense(self.hidden_dim)(x) + x = nn.gelu(x) + x = nn_layers.IdentityLayer(name=f'mlp_{i}')(x) + x = nn.Dense(self.bottleneck_dim)(x) + # Normalize. + x /= jnp.linalg.norm(x, axis=-1, keepdims=True) + x = WeightNormDense(self.output_dim, use_bias=False, name='prototypes', + kernel_init=norm_kernel_init_fn)(x) + return x + + +class WeightNormDense(nn.Dense): + """Linear layer with weight normalized kernel.""" + + def param(self, name: str, *args, **kwargs): + param = super().param(name, *args, **kwargs) + if name == 'kernel': + param /= (jnp.linalg.norm(param, axis=0, keepdims=True) + 1e-10) + return param + + +class CrossAttentionEncoderBlock(vit.Encoder1DBlock): + """Transformer layer with cross-attention.""" + + @nn.compact + def __call__(self, inputs: jnp.ndarray, inputs_kv: jnp.ndarray, + deterministic: bool) -> jnp.ndarray: + # Attention block. + assert inputs.ndim == 3 + x = nn.LayerNorm(dtype=self.dtype)(inputs) + inputs_kv = nn.LayerNorm(dtype=self.dtype)(inputs_kv) + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + dtype=self.dtype, + kernel_init=nn.initializers.xavier_uniform(), + broadcast_dropout=False, + deterministic=deterministic, + dropout_rate=self.attention_dropout_rate)(x, inputs_kv) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic) + x = nn_layers.StochasticDepth(rate=self.stochastic_depth)(x, deterministic) + x = x + inputs + + # MLP block. + y = nn.LayerNorm(dtype=self.dtype)(x) + y = attention_layers.MlpBlock( + mlp_dim=self.mlp_dim, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6))( + y, deterministic=deterministic) + y = nn_layers.StochasticDepth(rate=self.stochastic_depth)(y, deterministic) + return y + x + + +class ViTLOCAModel(base_model.BaseModel): + """Vision Transformer model for LOCA training.""" + + def build_flax_model(self)-> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return ViT4LOCA( + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + n_ref_positions=self.config.n_ref_positions, + apply_cluster_loss=self.config.apply_cluster_loss, + head_hidden_dim=self.config.model.get('head_hidden_dim', 2048), + head_bottleneck_dim=self.config.model.get('head_bottleneck_dim', 256), + head_output_dim=self.config.model.get('head_output_dim', 1024), + dropout_rate=self.config.model.get('dropout_rate', 0.0), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.0), + stochastic_depth=self.config.model.get('stochastic_depth', 0.0), + posembs=self.config.model.get('posembs', (14, 14)), + dtype=model_dtype, + ) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return ml_collections.ConfigDict({ + 'model': + dict( + num_heads=2, + num_layers=1, + mlp_dim=32, + dropout_rate=0., + attention_dropout_rate=0., + hidden_size=16, + head_hidden_dim=32, + head_bottleneck_dim=16, + head_output_dim=64, + patches={'size': (4, 4)}, + data_dtype_str='float32') + }) + + def get_metrics_fn(self, split: Optional[str] = None): + del split + return functools.partial( + classification_model.classification_metrics_function, + target_is_onehot=True, + metrics=dict( + {'accuracy': ( + model_utils.weighted_correctly_classified, + model_utils.num_examples), + 'loss': ( + model_utils.weighted_unnormalized_softmax_cross_entropy, + model_utils.num_examples)})) + + def loss_function(self, + predictions: jnp.ndarray, + targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None) -> float: + """Returns the cross-entropy loss.""" + loss = model_utils.weighted_softmax_cross_entropy(predictions, targets, + weights) + return loss # pytype: disable=bad-return-type diff --git a/scenic/projects/matvit/README.md b/scenic/projects/matvit/README.md new file mode 100644 index 0000000000000000000000000000000000000000..6be37cb22189813342946717af3a12b8b1458524 --- /dev/null +++ b/scenic/projects/matvit/README.md @@ -0,0 +1,38 @@ +## Matryoshka Vision Transformers (MatViT) + +This project implements MatViT in Scenic. + +This is implemented according to the MatViT adaptation in the MatFormer paper, for details see +Devvrit et al., "[MatFormer: Nested Transformer for Elastic Inference](https://arxiv.org/abs/2310.07707)". This implementation provides the basic proof of concept and further optimizations can be applied to speed up the training. + +### Training MatViT +The following command trains the MatViT-B/16 model + + +```python +$ python -m scenic.projects.matvit.main \ + --config=scenic/projects/matvit/configs/imagenet_augreg_matvit_config.py \ + --workdir=matvit_b_16/ +``` + +### Evaluation Mix'n'match ImageNet-1k Validation Accuracy +The following command evaluates the MatViT-B/16 model on full MLP dimension (3072d) + + +```python +$ python -m scenic.projects.matvit.classification_eval_main \ + --model_path=${PATH_TO_MODEL} \ + --matvit_dims="3072,3072,3072,3072,3072,3072,3072,3072,3072,3072,3072,3072" +``` + +### Checkpoints + +We made MatViT-B/16 and MatViT-L/16 models available in the following links + +| Model Size | Download Link | Training Details | +|:----------:|:------------:|:------------------------:| +| MatViT-B/16 | https://storage.googleapis.com/scenic-bucket/matvit/MatViT-B16-IN1K | ImageNet-1k | +| MatViT-L/16 | https://storage.googleapis.com/scenic-bucket/matvit/MatViT-L16-IN21K%2BIN1K | ImageNet-21k pre-training + ImageNet-1k finetuning | + + +If you are interested in using the code, please contact [Kaifeng Chen](mailto:francischen@google.com) and [Aditya Kusupati](mailto:kusupati@google.com). diff --git a/scenic/projects/matvit/__init__.py b/scenic/projects/matvit/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/matvit/classification_eval_main.py b/scenic/projects/matvit/classification_eval_main.py new file mode 100644 index 0000000000000000000000000000000000000000..b266d8f91ef64229af038a849df5700a90abeec6 --- /dev/null +++ b/scenic/projects/matvit/classification_eval_main.py @@ -0,0 +1,289 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for running classification eval.""" + +import functools +from typing import Callable, Dict, List, Optional, Tuple + +from absl import app +from absl import flags +from absl import logging +from flax import jax_utils +import flax.linen as nn +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.projects.matvit import matvit +from scenic.train_lib import train_utils + +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[ + [jnp.ndarray, Dict[str, jnp.ndarray]], Dict[str, Tuple[float, int]] +] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] +LrFn = Callable[[jnp.ndarray], jnp.ndarray] + +_MODEL_PATH = flags.DEFINE_string( + 'model_path', None, 'The path to the model.', required=True +) +_MATVIT_DIMS = flags.DEFINE_string( + 'matvit_dims', None, 'The MatViT dims.', required=True +) + +_IMAGENET_TRAIN_SIZE = 1281167 +VARIANT = 'B/16' +NUM_CLASSES = 1000 + + +def get_config(): + """Returns the ViT experiment configuration for ImageNet. + + This file is a copy of config/imagenet_augreg_matvit_config.py. + """ + version, patch = VARIANT.split('/') + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet-regularized_vit' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'imagenet2012' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train' + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = { + 'L': ( + 'decode|resize(384)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")' + ), + 'B': ( + 'decode|resize_small(256)|central_crop(224)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")' + ), + }[version] + config.dataset_configs.pp_eval = { + 'L': ( + 'decode|resize(384)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")' + ), + 'B': ( + 'decode|resize_small(256)|central_crop(224)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")' + ), + }[version] + + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 250_000 + # Model. + config.model_name = 'vit_multilabel_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = { + 'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280, + }[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = { + 'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120, + }[version] + config.model.num_layers = {'Ti': 12, 'S': 12, 'B': 12, 'L': 24, 'H': 32}[ + version + ] + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0.0 + config.model.dropout_rate = 0.1 + config.model.stochastic_depth = 0.1 + config.model_dtype_str = 'float32' + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 300 + config.log_eval_steps = 1000 + config.batch_size = 2048 + config.rng_seed = 42 + config.init_head_bias = -6.9 # -log(1000) + + # Learning rate. + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 0.001 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = base_lr + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.5 + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.m = None # Placeholder for randaug strength. + config.l = None # Placeholder for randaug layers. + return config + + +def get_logits_fn( + train_state: train_utils.TrainState, + batch: Batch, + dims: Optional[List[int]], + *, + flax_model: nn.Module, + gather_to_host: bool = True, +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Gets the logits from an input abtch. + + Args: + train_state: Loaded train state from the ckpt. + batch: Input batch. + dims: Matvit nesting dimensions, a list of size num_layers. + flax_model: The trained mode. + gather_to_host: Whether to gather all outputs to host device. + + Returns: + Logits for this batch. + """ + variables = {'params': train_state.params, **train_state.model_state} + logits = flax_model.apply( + variables, + batch['inputs'], + train=False, + debug=False, + matvit_mask_dims=dims, + ) + if gather_to_host: + logits = jax.lax.all_gather(logits, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return logits, batch['label'], batch['batch_mask'] + + +def create_train_state(ckpt_path, config): + """Gets the train state from the input ckpt. + + Args: + ckpt_path: Path to the ckpt to be loaded.. + config: The configuration used to train the model. + + Returns: + Loaded train state and a function to return the logits. + """ + ckpt_info = ckpt_path.split('/') + ckpt_dir = '/'.join(ckpt_info[:-1]) + ckpt_num = ckpt_info[-1].split('_')[-1] + + rng = jax.random.PRNGKey(config.rng_seed) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=None + ) + model = matvit.MatViTMultiLabelClassificationModel(config, dataset.meta_data) + + init_rng, _ = jax.random.split(rng) + (params, model_state, _, _) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[( + dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32), + )], + config=config, + rngs=init_rng, + ) + train_state = train_utils.TrainState(params=params, model_state=model_state) + train_state, _ = train_utils.restore_checkpoint( + ckpt_dir, + train_state, + assert_exist=True, + step=int(ckpt_num), + ) + if not _MATVIT_DIMS.value: + matvit_dims = None + else: + matvit_dims = [int(val) for val in _MATVIT_DIMS.value.split(',')] + assert ( + len(matvit_dims) == config.model.num_layers + ), 'Number of matvit dimensions needs to match the number of layers.' + + logits_fn = functools.partial( + get_logits_fn, flax_model=model.flax_model, dims=matvit_dims + ) + return train_state, logits_fn + + +def main(_): + config = get_config() + train_state, logits_fn = create_train_state(_MODEL_PATH.value, config) + train_state = jax_utils.replicate(train_state) + p_logits_fn = jax.pmap(logits_fn, donate_argnums=(1,), axis_name='batch') + rng = jax.random.PRNGKey(config.rng_seed) + data_rng, _ = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=None + ) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / config.batch_size) + ) + top1_correct_list = [] + for step in range(total_eval_steps): + logging.info('Eval inference step: %d', step) + batch = next(dataset.valid_iter) + logits, labels, mask = p_logits_fn(train_state, batch) + mask = np.array(jax_utils.unreplicate(mask)).astype(bool) + logits = np.array(jax_utils.unreplicate(logits))[mask] + labels = np.array(jax_utils.unreplicate(labels))[mask] + top1_idx = jnp.argmax(logits, axis=-1)[..., None] + top1_correct = jnp.take_along_axis(labels, top1_idx, axis=-1) + top1_correct_list.append(top1_correct) + + top1_correct = np.concatenate(top1_correct_list, axis=0) + acc = jnp.mean(top1_correct) + logging.info('Classification acc: %f', acc) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/matvit/configs/imagenet_augreg_matvit_config.py b/scenic/projects/matvit/configs/imagenet_augreg_matvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..3d8f006482bfaaaa34e8f6b5ce6f91ef8770d832 --- /dev/null +++ b/scenic/projects/matvit/configs/imagenet_augreg_matvit_config.py @@ -0,0 +1,134 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for Regularized MatViT on ImageNet2012. + +Based on: https://arxiv.org/pdf/2310.07707.pdf + +""" +# pylint: disable=line-too-long + +import ml_collections +_IMAGENET_TRAIN_SIZE = 1281167 +NUM_CLASSES = 1000 +VARIANT = 'B/16' + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for ImageNet.""" + runlocal = bool(runlocal) + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet-regularized_vit' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'imagenet2012' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train' + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)|flip_lr' + '|randaug(2, 15)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|resize_small(256)|central_crop(224)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 250_000 + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'vit_multilabel_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = {'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config.model.num_layers = {'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0.0 + config.model.dropout_rate = 0.1 + config.model.stochastic_depth = 0.1 + config.model_dtype_str = 'float32' + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 300 + config.log_eval_steps = 1000 + config.batch_size = 8 if runlocal else 2048 + config.rng_seed = 42 + config.init_head_bias = -6.9 # -log(1000) + config.matvit_dims = { + 'Ti': [96, 192, 384, 768], + 'S': [192, 384, 768, 1536], + 'B': [384, 768, 1536, 3072], + 'L': [512, 1024, 2048, 4096], + 'H': [640, 1280, 2560, 5120], + }[version] + + # Learning rate. + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 0.001 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = base_lr + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.5 + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.m = None # Placeholder for randaug strength. + config.l = None # Placeholder for randaug layers. + return config + + diff --git a/scenic/projects/matvit/layers.py b/scenic/projects/matvit/layers.py new file mode 100644 index 0000000000000000000000000000000000000000..3304c298b7fe1469b5d232e47aae6a41edc092f1 --- /dev/null +++ b/scenic/projects/matvit/layers.py @@ -0,0 +1,79 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Customized Mlp block for MatViT. +""" +from typing import Any, Callable, Optional, Sequence + +import flax.linen as nn +import jax +import jax.numpy as jnp +from scenic.model_lib.layers import nn_layers + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +class MlpBlock(nn.Module): + """Transformer MLP / feed-forward block.""" + + mlp_dim: int + out_dim: Optional[int] = None + dropout_rate: float = 0.1 + use_bias: bool = True + kernel_init: Initializer = nn.initializers.xavier_uniform() + bias_init: Initializer = nn.initializers.normal(stddev=1e-6) + activation_fn: Callable[[jnp.ndarray], jnp.ndarray] = nn.gelu + precision: Optional[jax.lax.Precision] = None + dtype: jnp.ndarray = jnp.float32 + + @nn.compact + def __call__( + self, + inputs: jnp.ndarray, + *, + deterministic: bool, + matvit_mask: Optional[Any] = None, + ): + """Applies Transformer MlpBlock module.""" + actual_out_dim = inputs.shape[-1] if self.out_dim is None else self.out_dim + x = nn.Dense( + self.mlp_dim, + dtype=self.dtype, + use_bias=self.use_bias, + kernel_init=self.kernel_init, + bias_init=self.bias_init, + precision=self.precision, + )(inputs) + + if matvit_mask is not None: + x = nn_layers.IdentityLayer(name='mlp1')( + self.activation_fn(x * matvit_mask) + ) + else: + x = nn_layers.IdentityLayer(name='mlp1')(self.activation_fn(x)) + + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=deterministic) + output = nn.Dense( + actual_out_dim, + dtype=self.dtype, + use_bias=self.use_bias, + kernel_init=self.kernel_init, + bias_init=self.bias_init, + precision=self.precision, + )(x) + output = nn_layers.IdentityLayer(name='mlp2')(output) + output = nn.Dropout(rate=self.dropout_rate)( + output, deterministic=deterministic + ) + return output diff --git a/scenic/projects/matvit/main.py b/scenic/projects/matvit/main.py new file mode 100644 index 0000000000000000000000000000000000000000..237b42792ddd1dd168c134f895861ef3faed0689 --- /dev/null +++ b/scenic/projects/matvit/main.py @@ -0,0 +1,57 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for MatViT.""" + +from typing import Any + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.matvit import matvit +from scenic.projects.matvit import trainer +from scenic.train_lib import train_utils + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name: str) -> Any: + """Returns model class given its name.""" + if model_name == 'matvit_multilabel_classification': + return matvit.MatViTMultiLabelClassificationModel + else: + raise ValueError(f'Unrecognized model: {model_name}.') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the MatViT.""" + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + + trainer.train( + rng=rng, + config=config, + model_cls=matvit.MatViTMultiLabelClassificationModel, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/matvit/matvit.py b/scenic/projects/matvit/matvit.py new file mode 100644 index 0000000000000000000000000000000000000000..b72dc8288d4df53c43c00e1621bf04495167c646 --- /dev/null +++ b/scenic/projects/matvit/matvit.py @@ -0,0 +1,322 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Matryoshka Vision Transformer.""" + +from typing import Any, Callable, List, Optional, Sequence + +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.layers import attention_layers +from scenic.model_lib.layers import nn_layers +from scenic.projects.baselines import vit +from scenic.projects.matvit import layers + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +class Encoder1DBlock(nn.Module): + """Transformer encoder layer. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: Number of self-attention heads. + dtype: The dtype of the computation (default: float32). + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_depth: probability of dropping a layer linearly grows + from 0 to the provided value. + + Returns: + output after transformer encoder block. + """ + mlp_dim: int + num_heads: int + dtype: Any = jnp.float32 + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + + @nn.compact + def __call__( + self, + inputs: jnp.ndarray, + deterministic: bool, + matvit_mask: Optional[Any] = None, + ) -> jnp.ndarray: + """Applies Encoder1DBlock module. + + Args: + inputs: Input data. + deterministic: Deterministic or not (to apply dropout). + matvit_mask: matvit masks for this block. + + Returns: + Output after transformer encoder block. + """ + # Attention block. + assert inputs.ndim == 3 + x = nn.LayerNorm(dtype=self.dtype)(inputs) + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + dtype=self.dtype, + kernel_init=nn.initializers.xavier_uniform(), + broadcast_dropout=False, + deterministic=deterministic, + dropout_rate=self.attention_dropout_rate)(x, x) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic) + x = nn_layers.StochasticDepth(rate=self.stochastic_depth)(x, deterministic) + x = x + inputs + + # MLP block. + y = nn.LayerNorm(dtype=self.dtype)(x) + y = layers.MlpBlock( + mlp_dim=self.mlp_dim, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6), + )(y, deterministic=deterministic, matvit_mask=matvit_mask) + y = nn_layers.StochasticDepth(rate=self.stochastic_depth)(y, deterministic) + return y + x + + +class Encoder(nn.Module): + """Transformer Encoder. + + Attributes: + num_layers: Number of layers. + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: The number of heads for multi-head self-attention. + positional_embedding: The type of positional embeddings to add to the + input tokens. Options are {learned_1d, sinusoidal_2d, none}. + dropout_rate: Dropout rate. + stochastic_depth: probability of dropping a layer linearly grows + from 0 to the provided value. Our implementation of stochastic depth + follows timm library, which does per-example layer dropping and uses + independent dropping patterns for each skip-connection. + dtype: Dtype of activations. + """ + num_layers: int + mlp_dim: int + num_heads: int + positional_embedding: str = 'learned_1d' + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + dtype: Any = jnp.float32 + + @nn.compact + def __call__( + self, + inputs: jnp.ndarray, + *, + matvit_mask_dims: List[float], + train: bool = False, + ): + """Applies Transformer model on the inputs. + + Args: + inputs: Input tokens of shape [batch, num_tokens, channels]. + matvit_mask_dims: matvit nesting dimensions, a list of size num_layers. + train: If in training mode, dropout and stochastic depth is applied. + + Returns: + Encoded tokens. + """ + + assert inputs.ndim == 3 # Shape is `[batch, len, emb]`. + dtype = jax.dtypes.canonicalize_dtype(self.dtype) + + # Add positional embeddings to tokens. + if self.positional_embedding == 'learned_1d': + x = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name='posembed_input')( + inputs) + elif self.positional_embedding == 'sinusoidal_1d': + x = attention_layers.Add1DPositionEmbedding(posemb_init=None)(inputs) + elif self.positional_embedding == 'sinusoidal_2d': + batch, num_tokens, hidden_dim = inputs.shape + height = width = int(np.sqrt(num_tokens)) + if height * width != num_tokens: + raise ValueError('Input is assumed to be square for sinusoidal init.') + inputs_reshape = inputs.reshape([batch, height, width, hidden_dim]) + x = attention_layers.AddFixedSinCosPositionEmbedding()(inputs_reshape) + x = x.reshape([batch, num_tokens, hidden_dim]) + elif self.positional_embedding == 'none': + x = inputs + else: + raise ValueError('Unknown positional embedding: ' + f'{self.positional_embedding}') + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + # Input Encoder. + for lyr in range(self.num_layers): + nesting_mask = jnp.ones(matvit_mask_dims[lyr], dtype=jnp.int32) + ffn_mask = jnp.zeros(self.mlp_dim, dtype=jnp.int32) + ffn_mask = jax.lax.dynamic_update_slice(ffn_mask, nesting_mask, (0,)) + x = Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=(lyr / max(self.num_layers - 1, 1)) + * self.stochastic_depth, + name=f'encoderblock_{lyr}', + dtype=dtype, + )(x, deterministic=not train, matvit_mask=ffn_mask) + encoded = nn.LayerNorm(name='encoder_norm')(x) + return encoded + + +class MatViT(nn.Module): + """Vision Transformer model. + + Attributes: + num_classes: Number of output classes. + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + positional_embedding: The type of positional embeddings to add to the + tokens at the beginning of the transformer encoder. Options are + {learned_1d, sinusoidal_2d, none}. + representation_size: Size of the representation layer in the model's head. + if None, we skip the extra projection + tanh activation at the end. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token', 'none'. + dtype: JAX data type for activations. + """ + + num_classes: int + mlp_dim: int + num_layers: int + num_heads: int + patches: ml_collections.ConfigDict + hidden_size: int + positional_embedding: str = 'learned_1d' + representation_size: Optional[int] = None + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + classifier: str = 'gap' + dtype: Any = jnp.float32 + + @nn.compact + def __call__( + self, + x: jnp.ndarray, + *, + train: bool, + matvit_mask_dims: Optional[List[int]] = None, + debug: bool = False, + return_feat: bool = False, + ): + if matvit_mask_dims is None: + matvit_mask_dims = [self.mlp_dim] * self.num_layers + fh, fw = self.patches.size + # Extracting patches and then embedding is in fact a single convolution. + x = nn.Conv( + self.hidden_size, + (fh, fw), + strides=(fh, fw), + padding='VALID', + name='embedding', + )(x) + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + + # If we want to add a class token, add it here. + if self.classifier == 'token': + cls = self.param('cls', nn.initializers.zeros, (1, 1, c), x.dtype) + cls = jnp.tile(cls, [n, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + + x = Encoder( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + positional_embedding=self.positional_embedding, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=self.stochastic_depth, + dtype=self.dtype, + name='Transformer')( + x, train=train, matvit_mask_dims=matvit_mask_dims) + + if self.classifier in ('token', '0'): + x = x[:, 0] + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=1) + elif self.classifier == 'map': + x = vit.MAPHead( + num_heads=self.num_heads, mlp_dim=self.mlp_dim, dtype=self.dtype)(x) + elif self.classifier == 'none': + pass + else: + raise ValueError(f'Unknown classifier {self.classifier}') + + if self.representation_size is not None: + x = nn.Dense(self.representation_size, name='pre_logits')(x) + x = nn.tanh(x) + else: + x = nn_layers.IdentityLayer(name='pre_logits')(x) + + if return_feat: + return x + + if self.num_classes > 0: + # If self.num_classes <= 0, we just return the backbone features. + x = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x) + return x + + +class MatViTMultiLabelClassificationModel(vit.ViTMultiLabelClassificationModel): + """Matryoshka Vision Transformer model for multi-label classification task.""" + + def build_flax_model(self)-> nn.Module: + dtype_str = self.config.get('model_dtype_str', 'float32') + if dtype_str != 'float32': + raise ValueError('`dtype` argument is not propagated properly ' + 'in the current implmentation, so only ' + '`float32` is supported for now.') + return MatViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + positional_embedding=self.config.model.get('positional_embedding', + 'learned_1d'), + representation_size=self.config.model.representation_size, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate'), + attention_dropout_rate=self.config.model.get('attention_dropout_rate'), + stochastic_depth=self.config.model.get('stochastic_depth', 0.0), + dtype=getattr(jnp, dtype_str), + ) diff --git a/scenic/projects/matvit/trainer.py b/scenic/projects/matvit/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..28b363912f07606908570661875fe9f814a0ec4c --- /dev/null +++ b/scenic/projects/matvit/trainer.py @@ -0,0 +1,441 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script.""" + +import functools +from typing import Any, Callable, Dict, Tuple, Optional, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +import flax +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] +LrFn = Callable[[jnp.ndarray], jnp.ndarray] + +flax.config.update('flax_use_orbax_checkpointing', False) + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + lr_fn: LrFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, + Any]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, params, and optimizer. The buffer of this argument can + be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + lr_fn: The learning rate fn used for the logging the learning rate. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training and computed metrics and some training logs. + """ + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + rng=mixup_rng) + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + loss, all_logits, new_model_state = 0, {}, None + for dim in config.matvit_dims: + logits, new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + matvit_mask_dims=[dim] * config.model.num_layers, + debug=debug, + ) + all_logits[dim] = logits + loss += loss_fn(logits, batch, variables['params']) + + return loss, (new_model_state, all_logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + + ( + train_cost, + (new_model_state, all_logits), + ), grad = compute_gradient_fn(train_state.params) + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm') is not None: + grad = clip_grads(grad, config.max_grad_norm) + + updates, new_opt_state = train_state.tx.update(grad, train_state.opt_state, # pytype: disable=attribute-error + train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)])) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + training_logs['learning_rate'] = lr_fn(train_state.global_step) # pytype: disable=wrong-arg-types + + all_metrics = {} + for dim, logits in all_logits.items(): + metrics = metrics_fn(logits, batch) + all_metrics[f'pred_{dim}d@1'] = metrics['prec@1'] + all_metrics[f'loss_{dim}d'] = metrics['loss'] + + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + + return new_train_state, all_metrics, training_logs + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], jnp.ndarray]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, params and optimizer state. The buffer of + this argument can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and logits. + """ + variables = {'params': train_state.params, **train_state.model_state} + all_metrics, logits = {}, None + for dim in config.matvit_dims: + logits = flax_model.apply( + variables, + batch['inputs'], + train=False, + mutable=False, + debug=debug, + matvit_mask_dims=[dim] * config.model.num_layers, + ) + metrics = metrics_fn(logits, batch) + all_metrics[f'pred_{dim}d@1'] = metrics['prec@1'] + all_metrics[f'loss_{dim}d'] = metrics['loss'] + return all_metrics, logits + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_state that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params=params) + # We jit this, such that the arrays that are created on the same device as the + # input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + rng, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + # Replicate the optimizer, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + lr_fn=lr_fn, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + config=config, + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + max_checkpoint_keep = config.get('max_checkpoint_keep', 3) + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, + writer=writer, + every_secs=None, + every_steps=config.get('report_progress_step', log_summary_steps), + ) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + extra_training_logs.append(t_logs) + for h in hooks: + h(step) + # Below are once-in-a-while ops -> pause. + ###################### LOG TRAIN SUMMARY ######################## + if ((step % log_summary_steps == 1) or (step == total_steps) or + (lead_host and chrono.warmup)): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + # train_metrics is list of a dictionaries of metrics, where the shape of + # the metrics[key] is [n_local_devices]. However, because metric functions + # have a psum, we have already summed across the whole sharded batch, and + # what's returned is n_local_devices copies of the same summed metric. + # So we do unreplicate and fetch them to host using `unreplicate_and_get`. + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_training_logs), + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + eval_metrics = [] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + for _ in range(steps_per_eval): + eval_batch = next(dataset.valid_iter) + e_metrics, _ = eval_step_pmapped(train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + eval_summary = train_utils.log_eval_summary( + step=step, eval_metrics=eval_metrics, writer=writer) + writer.flush() + del eval_metrics + chrono.resume() + ##################### CHECKPOINTING ################### + if ((step % checkpoint_steps == 1 and step > 1) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + train_utils.handle_checkpointing( + train_state, chrono, workdir, max_checkpoint_keep) + chrono.resume() + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary # pytype: disable=bad-return-type diff --git a/scenic/projects/mbt/README.md b/scenic/projects/mbt/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d0a8a3eccdff3b2c8ce23ed138e24a793a2da462 --- /dev/null +++ b/scenic/projects/mbt/README.md @@ -0,0 +1,80 @@ +# MBT: Multimodal Bottleneck Transformers + +### [Project Page](https://a-nagrani.github.io/mbt.html) | [arXiv](https://arxiv.org/pdf/2107.00135.pdf) + + + +## What is MBT? + +MBT is a transformer based model for multimodal fusion in video introduced in ["Attention Bottlenecks for Multimodal Fusion"](https://proceedings.neurips.cc/paper/2021/file/76ba9f564ebbc35b1014ac498fafadd0-Paper.pdf) at NeurIPS 2021. The model +restricts the flow of cross-modal information between latent units through tight +fusion ‘bottlenecks’, that force the model to collect and ‘condense’ the most +relevant inputs in each modality. Here the model is applied to RGB and +spectrogram patches directly. More details can be found in the [paper](https://proceedings.neurips.cc/paper/2021/file/76ba9f564ebbc35b1014ac498fafadd0-Paper.pdf). + +## Datasets + +MBT achivies state-of-the-art results for video classification across a number +of popular audio-visual benchmarks, including AudioSet, Epic-Kitchens100, and +VGGSound. + +## Training + +The following command will install the required packages for MBT: +```shell +$ pip install -r scenic/projects/mbt/requirements.txt +``` + +Like other projects in Scenic, all model parameters, training sets and datasets are specified using [configuration files](configs). +Which modalities to train on (RGB only, spectrogram only, or RGB+spectrogram) is also specified in the config file. + +To train a model, please download a pretrained ViT image model trained using +[Scenic](https://github.com/google-research/scenic/tree/main/scenic/projects/baselines) +or the [original implementation](https://github.com/google-research/vision_transformer). + +Additionally, pre-process the training dataset in the same way as done by the ViViT project [here](https://github.com/google-research/scenic/tree/main/scenic/projects/vivit/data/data.md). Spectrograms must be +extracted following the details in Sec. 4.2 of the [paper](https://proceedings.neurips.cc/paper/2021/file/76ba9f564ebbc35b1014ac498fafadd0-Paper.pdf). + +An example command-line to train MBT-B/16x2 on the balanced AudioSet dataset (AS-mini in the paper) +using this [config file](configs/audioset/balanced_audioset_base.py) +is + +```shell +$ python -m scenic.projects.mbt.main \ + --config=scenic/projects/mbt/configs/audioset/balanced_audioset_base.py \ + --workdir=mbt_base/ +``` + + +## Model Zoo + +We release some pretrained MBT models trained under different settings. Checkpoints are provided as Scenic checkpoints compatible with +[Flax](https://github.com/google/flax). AS-mini and AS-500K refer to different AudioSet training splits as described in the [paper](https://proceedings.neurips.cc/paper/2021/file/76ba9f564ebbc35b1014ac498fafadd0-Paper.pdf). +Note that the numbers are likely to fluctuate slightly as the test set for this dataset varies when videos are taken down. + + +| Model | Modalities | Dataset | mAP | Checkpoint | +|:------------:|:-----------:|:------------:|:---:|:----------------------------------------------------------------------------------------------------------------:| +| MBT-B | Spec | AS-mini | 30.9 | [Checkpoint](https://storage.googleapis.com/scenic-bucket/mbt/mbtb32_as-mini_spec) | +| MBT-B | RGB | AS-mini | 27.0 | [Checkpoint](https://storage.googleapis.com/scenic-bucket/mbt/mbtb32_as-mini_rgb) | +| MBT-B | RGB+Spec | AS-mini | 43.9 | [Checkpoint](https://storage.googleapis.com/scenic-bucket/mbt/mbtb32_as-mini_rgb-spec) | +| MBT-B | Spec | AS-500k | 44.0 | [Checkpoint](https://storage.googleapis.com/scenic-bucket/mbt/mbtb32_as-500k_spec) | +| MBT-B | RGB | AS-500K | 33.9 | [Checkpoint](https://storage.googleapis.com/scenic-bucket/mbt/mbtb32_as-500k_rgb) | +| MBT-B | RGB+Spec | AS-500K | 52.3 | [Checkpoint](https://storage.googleapis.com/scenic-bucket/mbt/mbtb32_as-500k_rgb-spec) | + + +## Citation + +If you use MBT, please use the following BibTeX entry. + +``` +@InProceedings{nagrani2021mbt, + title={Attention Bottlenecks for Multimodal Fusion}, + author={Nagrani, Arsha and Yang, Shan and Arnab, Anurag and Jansen, Aren and Schmid, Cordelia and Sun, Chen}, + booktitle={Advances in Neural Information Processing Systems (NeurIPS)}, + year={2021} +} +``` + + + diff --git a/scenic/projects/mbt/__init__.py b/scenic/projects/mbt/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/mbt/bottlenecks.png b/scenic/projects/mbt/bottlenecks.png new file mode 100644 index 0000000000000000000000000000000000000000..05d7ccd6de48873e11e1d43028df223744c8172e --- /dev/null +++ b/scenic/projects/mbt/bottlenecks.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:043e8de9cb1baf41973adfad2bdf184235a6157799e2bc39d51bfcf055423499 +size 405529 diff --git a/scenic/projects/mbt/configs/__init__.py b/scenic/projects/mbt/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/mbt/configs/audioset/__init__.py b/scenic/projects/mbt/configs/audioset/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/mbt/configs/audioset/balanced_audioset_base.py b/scenic/projects/mbt/configs/audioset/balanced_audioset_base.py new file mode 100644 index 0000000000000000000000000000000000000000..3035e43dfb1ae255de01cf73e749cc448709d6f1 --- /dev/null +++ b/scenic/projects/mbt/configs/audioset/balanced_audioset_base.py @@ -0,0 +1,190 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Multimodal sound classification on the balanced (mini) AudioSet. + +""" +# pylint: disable=line-too-long + +import ml_collections + +# The size of the AudioSet dataset changes as videos are removed from YouTube. +# Update this accordingly. +AUDIOSET_TRAIN_SIZE = 20361 + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'mbt_balanced_audioset_classification' + + # Dataset. + config.dataset_configs.base_dir = '/path/to/dataset' + config.dataset_configs.tables = { + 'train': 'balanced_train.se.melspec.tfrecord.sst@1024', + 'validation': 'eval.se.melspec.tfrecord.sst@1024', + 'test': 'eval.se.melspec.tfrecord.sst@1024', + } + config.dataset_configs.examples_per_subset = { + 'train': 20361, + 'validation': 18589, + 'test': 18589 + } + config.dataset_configs.num_classes = 527 + config.data_dtype_str = 'float32' + # List of modalities to load, supports `rgb` and `spectrogram'. + # Note that this only specifies which modalities to load, not which to use, + # which is controlled by config.model.modality_fusion + config.dataset_configs.modalities = ('spectrogram', 'rgb') + config.dataset_configs.return_as_dict = True + # This is going to sample 32 frames, sampled at a stride of 2 from the video. + # AudioSet videos are extracted at 25fps. + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 2 + config.dataset_configs.num_spec_frames = 8 + config.dataset_configs.spec_stride = 1 + + # These statistics were calculated over the entire unbalanced train set. + config.dataset_configs.spec_mean = 1.102 + config.dataset_configs.spec_stddev = 2.762 + + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.spec_shape = (100, 128) + + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + # Multicrop eval settings + config.dataset_configs.do_multicrop_test = True + config.dataset_configs.log_test_epochs = 4 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size + config.dataset_configs.num_test_clips = 4 + config.dataset_configs.test_batch_size = 8 # Needs to be num_local_devices + config.multicrop_clips_per_device = 2 + # Leaving this empty means that a full test is done each time. + # About 4200 / 4 = 1050 steps on a 4-host setting (ie 4x4 TPU) + # config.steps_per_test = 1000 # Number of test steps taken by each host. + + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = True + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + + config.dataset_configs.prefetch_to_device = 2 + + # SpecAugment hyperparameters + config.dataset_configs.spec_augment = True + config.dataset_configs.spec_augment_params = ml_collections.ConfigDict() + config.dataset_configs.spec_augment_params.freq_mask_max_bins = 48 + config.dataset_configs.spec_augment_params.freq_mask_count = 1 + config.dataset_configs.spec_augment_params.time_mask_max_frames = 48 + config.dataset_configs.spec_augment_params.time_mask_count = 4 + config.dataset_configs.spec_augment_params.time_warp_max_frames = 1.0 + config.dataset_configs.spec_augment_params.time_warp_max_ratio = 0 + config.dataset_configs.spec_augment_params.time_mask_max_ratio = 0 + + # Model: MBT-base + config.model_name = 'mbt_multilabel_classification' + config.model = ml_collections.ConfigDict() + # Supports 'rgb' and 'spectrogram' + config.model.modality_fusion = ('spectrogram', 'rgb') + config.model.use_bottleneck = True + config.model.test_with_bottlenecks = True + config.model.share_encoder = False + config.model.n_bottlenecks = 4 + # Layer at which to fuse. '0' refers to early fusion, if fusion_layer is equal + # to model.num_layers, then there is no cross-modal attention in the transformer + # and CLS tokens for each modality are averaged right at the end. + config.model.fusion_layer = 8 + config.model.hidden_size = 768 + config.model.patches = ml_collections.ConfigDict() + config.model.attention_config = ml_collections.ConfigDict() + config.model.attention_config.type = 'spacetime' + config.model.num_heads = 12 + config.model.mlp_dim = 3072 + config.model.num_layers = 12 + config.model.representation_size = None + config.model.classifier = 'gap' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model_dtype_str = 'float32' + + config.model.temporal_encoding_config = ml_collections.ConfigDict() + # 3d_conv is only used for RGB inputs. + config.model.temporal_encoding_config.method = '3d_conv' + # 32 frames for RGB. Conv filter is 8. So total of 4 frames at input + config.model.patches.size = [16, 16, 2] + config.model.temporal_encoding_config.kernel_init_method = 'central_frame_initializer' + config.model.temporal_encoding_config.n_sampled_frames = 4 # Unused here. + + # Training. + config.trainer_name = 'mbt_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.label_smoothing = 0.3 + config.num_training_epochs = 50 + config.batch_size = 64 + config.rng_seed = 0 + # This does Mixup in the train loop. This is fast. But make sure that device + # batch size is more than 1. On a 4x4 TPU, this means that your batch size + # needs to be at least 64. + config.mixup = ml_collections.ConfigDict() + config.mixup.alpha = 0.5 + config.mixmod = False + # Additional regularization + config.model.stochastic_droplayer_rate = 0.3 + + # Use ImageNet-21k-initialised model from big_vision checkpoint + config.init_from = ml_collections.ConfigDict() + config.init_from.model_config = None + # Download pretrained ImageNet checkpoints from here: + # https://github.com/google-research/scenic/tree/main/scenic/projects/baselines (checkpoint_format = 'scenic') pylint: disable=line-too-long + # https://github.com/google-research/vision_transformer (checkpoint_format = 'big_vision') pylint: disable=line-too-long + config.init_from.checkpoint_path = 'path_to_checkpoint_of_vit_b_16' + config.init_from.checkpoint_format = 'scenic' + config.init_from.model_config = ml_collections.ConfigDict() + config.init_from.model_config.model = ml_collections.ConfigDict() + config.init_from.model_config.model.classifier = 'token' # Specify if this is 'token' or 'gap'. pylint: disable=line-too-long + config.init_from.restore_positional_embedding = True + config.init_from.restore_input_embedding = True + config.init_from.positional_embed_size_change = 'resize_tile' + + # Learning rate. + steps_per_epoch = AUDIOSET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 2.5 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 5e-1 + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.checkpoint_steps = 500 # Checkpoint more frequently than a val epoch. + return config + + diff --git a/scenic/projects/mbt/datasets/__init__.py b/scenic/projects/mbt/datasets/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/mbt/datasets/audiovisual_tfrecord_dataset.py b/scenic/projects/mbt/datasets/audiovisual_tfrecord_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..597fe7320cb8b073eb8998e78ad9e1b34222c18c --- /dev/null +++ b/scenic/projects/mbt/datasets/audiovisual_tfrecord_dataset.py @@ -0,0 +1,556 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""TFRecords data-loader for audiovisual datasets.""" +import functools +from typing import Dict, Iterator, List, Optional, Text, Tuple, Union + +from absl import logging +from dmvr import modalities as load_modalities +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib import video_ops +from scenic.projects.mbt.datasets.dataset_utils import add_spectrogram +from scenic.projects.vivit.data import video_tfrecord_dataset +import tensorflow as tf + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] + + +def maybe_pad_batch(batch, train, batch_size, return_as_dict): + """Zero pad the batch on the right to the batch_size.""" + if not return_as_dict: + return dataset_utils.maybe_pad_batch(batch, train, batch_size) + + assert 'batch_mask' not in batch + if 'rgb' in batch['inputs']: + unpadded_mask_shape = batch['inputs']['rgb'].shape[0] + batch_pad = batch_size - unpadded_mask_shape + elif 'spectrogram' in batch['inputs']: + unpadded_mask_shape = batch['inputs']['spectrogram'].shape[0] + batch_pad = batch_size - unpadded_mask_shape + else: + raise ValueError('invalid input batch') + + if train and batch_pad != 0: + raise ValueError('In this codebase, we assumed that we always drop the ' + 'last partial batch of the train set. Please use ' + '` drop_remainder=True` for the training set.') + + # Most batches will not need padding so we quickly return to avoid slowdown. + if train or batch_pad == 0: + if 'batch_mask' not in batch: + batch['batch_mask'] = np.ones(unpadded_mask_shape, dtype=np.float32) + return batch + + def zero_pad(array): + pad_with = [(0, batch_pad)] + [(0, 0)] * (array.ndim - 1) + return np.pad(array, pad_with, mode='constant') + + padded_batch = jax.tree_util.tree_map(zero_pad, batch) + padded_batch_mask = zero_pad(np.ones(unpadded_mask_shape, dtype=np.float32)) + padded_batch['batch_mask'] = padded_batch_mask + return padded_batch + + +class AVTFRecordDatasetFactory(video_tfrecord_dataset.TFRecordDatasetFactory): + """Reader for TFRecords using the MediaSequence format. + + The TFrecords already contain images and spectrograms. Spectrograms are + extracted per second and stored with size 128x100 for each second of audio. + """ + + _MODALITIES = ('rgb', 'spectrogram') + + def __init__(self, + base_dir: str, + tables: Dict[str, Union[str, List[str]]], + num_classes: int, + examples_per_subset: Dict[str, int], + subset: str = 'train', + modalities: Tuple[str] = ('rgb',), + prop_data: float = 1.0, + num_groups: Optional[int] = None, + group_index: Optional[int] = None): + """Initializes the instance of TFRecordDatasetFactory. + + Initializes a data-loader using DeepMind Video Reader (DMVR) pre-processing + (https://github.com/deepmind/dmvr). + TFRecords are assumed to consist of tf.SequenceExample protocol buffers in + the MediaSequence + (https://github.com/google/mediapipe/tree/master/mediapipe/util/sequence) + format. + + Args: + base_dir: The base directory of the TFRecords. + tables: A dictionary mapping the subset name (train, val or test) to the + relative path of the SSTable containing them. Follows DMVR convention. + The values of the dictionary can either be a string or a list. If it is + a string, it specifies all the shards in the SSTable. Example - + "/path/to/sstable@10". If passing a list, each entry is a shard of the + SSTable. Example - "[/path/to/sstable_shard_1_of_10, ..., + /path/to/sstabble_shard_10_of_10]." The latter scenario is useful for + debugging. + num_classes: The number of classes in the dataset. + examples_per_subset: A dictionary mapping the subset name (train, val or + test) to the number of examples in the dataset for that subset. + subset: The subset of the dataset to load. Must be a key of "tables" + modalities: Which modality to load. Currently supports 'rgb' and + 'spectrogram' + prop_data: The proportion of the data to load. If less than 1.0, this + proportion of the total TFRecord shards are read. + num_groups: If specified will reshard the data according to `num_groups`. + A `group_index` should be specified if using `num_groups`. + group_index: Index of the shard to return after resharding. `num_groups` + should be specified if using `group_index`. This is useful in + distributed setting where one wants to ensure that different data is + read by different workers. + """ + + for modality in modalities: + if modality not in AVTFRecordDatasetFactory._MODALITIES: + raise ValueError('Invalid modality %s.' % modality) + self._modalities = modalities + + super().__init__( + base_dir=base_dir, + tables=tables, + examples_per_subset=examples_per_subset, + subset=subset, + num_classes=num_classes, + fraction_data=prop_data, + num_groups=num_groups, + group_index=group_index) + + def _build( + self, + is_training: bool = True, + # Video related parameters. + num_frames: int = 32, + stride: int = 1, + num_spec_frames: int = 5, + spec_stride: int = 1, + dataset_spec_mean: float = 0., + dataset_spec_stddev: float = 1., + num_test_clips: int = 1, + min_resize: int = 256, + crop_size: int = 224, + # Audio related parameters. + spec_shape: Tuple[int, int] = (100, 128), + spec_augment: bool = False, + spec_augment_params=None, + zero_centering_image: bool = False, + # Label related parameters. + one_hot_label: bool = True, + get_label_str: bool = False): + """Adds DMVR pre-processors to the dataset. + + Args: + is_training: whether or not in training mode. + num_frames: number of frames per subclip. + stride: temporal stride to sample frames. + num_spec_frames: number of spectrogram frames. + spec_stride: stride to sample spectrogram. + dataset_spec_mean: Mean of spectrograms in the dataset. + dataset_spec_stddev: Std dev of spectrograms in the dataset. + num_test_clips: number of test clip (1 by default). If more than one, this + will sample multiple linearly spaced clips within each video at test + time. If 1, then a single clip in the middle of the video is sampled. + min_resize: frames are resized so that min width/height is min_resize. + crop_size: final size of the frame after cropping the resized frames. + spec_shape: input size of spectrogram per frame. + spec_augment: whether to apply augmentation using SpecAugment. + spec_augment_params: parameters for SpecAugment. + zero_centering_image: whether to have images between [-1, 1] or [0, 1]. + one_hot_label: whether or not to return one hot version of labels. + get_label_str: whether or not to return label as text. + """ + # We set sync_random_state to True so that sample_offset_proportion is + # the same for all modalities. + if 'rgb' in self._modalities: + load_modalities.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + is_training=is_training, + num_frames=num_frames, + stride=stride, + num_test_clips=num_test_clips, + min_resize=min_resize, + crop_size=crop_size, + zero_centering_image=zero_centering_image, + sync_random_state=True) + if 'spectrogram' in self._modalities: + add_spectrogram( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_shape=spec_shape, + is_training=is_training, + num_frames=num_spec_frames, + stride=spec_stride, + num_test_clips=num_test_clips, + spec_augment=spec_augment, + spec_augment_params=spec_augment_params, + zero_centering_image=zero_centering_image, + dataset_mean=dataset_spec_mean, + dataset_stddev=dataset_spec_stddev, + sync_random_state=True) + + load_modalities.add_label( + parser_builder=self.parser_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + is_multi_label=False, + one_hot_label=True, + num_classes=self.num_classes, + add_label_name=False) + + +def load_split_from_dmvr(ds_factory, + batch_size, + subset='train', + modalities=('rgb'), + num_frames=32, + stride=2, + num_spec_frames=5, + spec_stride=1, + num_test_clips=1, + min_resize=256, + crop_size=224, + spec_shape=(100, 128), + dataset_spec_mean=0., + dataset_spec_stddev=1., + spec_augment=False, + spec_augment_params=None, + one_hot_label=True, + zero_centering=True, + get_label_str=False, + augmentation_params=None, + keep_key=False): + """Loads dataset using DMVR for pre-processing. + + DMVR dataset loader already does basic augmentation (random crop and flip in + train mode. It also already shuffles and batches the data. + + Args: + ds_factory: A DMVR factory to instantiate with the subset. + batch_size: The batch_size to use. + subset: train, validation or test. + modalities: list of input modalities. + num_frames: Number of RGB frames per subclip. + stride: Temporal stride to sample RGB frames. + num_spec_frames: Number of spectrogram frames per subclip. + spec_stride: Temporal stride to sample spectrogram. + num_test_clips: Number of test clips (1 by default). If more than 1, this + will sample multiple linearly spaced clips within each video at test time. + If 1, then a single clip in the middle of the video is sampled. The clips + are aggreagated in the batch dimension. + min_resize: Frames are resized so that min(height, width) is min_resize. + crop_size: Final size of the frame after cropping the resized frames. Both + height and width are the same. + spec_shape: Input size of spectrogram per frame. + dataset_spec_mean: Mean of spectrograms in the dataset. + dataset_spec_stddev: Std dev of spectrograms in the dataset. + spec_augment: whether to apply augmentation using SpecAugment. + spec_augment_params: dict; augmentation configurations for SpecAugment + one_hot_label: If True, return one-hot version of the labels (ie [N, C]) + array. Otherwise, return [N]-dimensional array of labels. + zero_centering: If True, frames are normalized to values in [-1, 1]. If + False, values in [0, 1]. + get_label_str: whether or not to return label as text. This does not work on + TPU!. + augmentation_params: dict; augmentation configurations in train mode. + keep_key: bool; If true, also return the key for each example. + + Returns: + A pair `(ds, num_examples)` with + ds: A `tf.data.Dataset` object + num_examples: Number of examples in the dataset. + """ + is_training = (subset == 'train') + + ds_factory = ds_factory( + subset=subset, modalities=modalities).configure( + is_training=is_training, + num_frames=num_frames, + stride=stride, + num_spec_frames=num_spec_frames, + spec_stride=spec_stride, + num_test_clips=num_test_clips, + min_resize=min_resize, + crop_size=crop_size, + spec_shape=spec_shape, + dataset_spec_mean=dataset_spec_mean, + dataset_spec_stddev=dataset_spec_stddev, + spec_augment=spec_augment, + spec_augment_params=spec_augment_params, + zero_centering_image=zero_centering, + one_hot_label=one_hot_label, + get_label_str=get_label_str) + + if 'rgb' in modalities and is_training and augmentation_params: + # additional augmentation for the RGB features. + ds_factory = video_ops.additional_augmentations(ds_factory, + augmentation_params, + crop_size, num_frames, + zero_centering) + + logging.info('Preprocessing graph: %s', + ds_factory.preprocessor_builder.get_summary()) + logging.info('Postprocessing graph: %s', + ds_factory.postprocessor_builder.get_summary()) + + num_examples = ds_factory.num_examples + + ds = ds_factory.make_dataset( + batch_size=batch_size, + shuffle=is_training, + num_epochs=None if is_training else 1, + drop_remainder=is_training, + keep_key=(not is_training and keep_key)) + + if not is_training: + ds = ds.repeat(None) + + options = tf.data.Options() + options.experimental_threading.private_threadpool_size = 48 + ds = ds.with_options(options) + + return ds, num_examples + + +def map_keys(batch, modalities=('rgb'), return_as_dict=False): + """DMVR dataset returns 'image' and 'label'. We want 'inputs' and 'label'.""" + if not return_as_dict: + if len(modalities) == 1 and modalities[0] == 'rgb': + batch['inputs'] = batch['image'] + elif len(modalities) == 1 and modalities[0] == 'spectrogram': + batch['inputs'] = batch['spectrogram'] + else: + raise NotImplementedError('modality not supported by map_keys.') + else: + batch['inputs'] = {} + if 'rgb' in modalities: + batch['inputs']['rgb'] = batch['image'] + if 'spectrogram' in modalities: + batch['inputs']['spectrogram'] = batch['spectrogram'] + return batch + + +def tile_label_key(batch, return_as_dict=False): + """Tile labels and keys to match input videos when num_test_clips > 1. + + When multiple test crops are used (ie num_test_clips > 1), the batch dimension + of batch['inputs'] = test_batch_size * num_test_clips. + However, labels and keys remain of size [test_batch_size]. + This function repeats label and key to match the inputs. + + Args: + batch: Batch from iterator + return_as_dict: Whether to return multimodal inputs as a dictionary. + + Returns: + batch: Batch with 'label' and 'key' tiled to match 'inputs'. + """ + if not return_as_dict: + n_repeats = batch['inputs'].shape[0] // batch['label'].shape[0] + elif 'rgb' in batch['inputs']: + n_repeats = batch['inputs']['rgb'].shape[0] // batch['label'].shape[0] + elif 'spectrogram' in batch['inputs']: + n_repeats = ( + batch['inputs']['spectrogram'].shape[0] // batch['label'].shape[0]) + batch['label'] = np.repeat(batch['label'], n_repeats, axis=0) + if 'key' in batch: + batch['key'] = np.repeat(batch['key'], n_repeats, axis=0) + return batch + + +@datasets.add_dataset('audiovisual_tfrecord_dataset') +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, # pylint:disable=unused-argument + rng=None, + dataset_configs: ml_collections.ConfigDict, + dataset_service_address: Optional[str] = None): + """Returns a generator for the audiovisual dataset.""" + del rng + modalities = dataset_configs.get('modalities', ['rgb']) + return_as_dict = dataset_configs.get('return_as_dict', False) + # RGB related configs. + num_frames = dataset_configs.get('num_frames', 32) + stride = dataset_configs.get('stride', 2) + min_resize = dataset_configs.get('min_resize', 256) + crop_size = dataset_configs.get('crop_size', 224) + # Spectrogram related configs. + num_spec_frames = dataset_configs.get('num_spec_frames', 5) + spec_stride = dataset_configs.get('spec_stride', 1) + spec_shape = dataset_configs.get('spec_shape', (100, 128)) + spec_augment = dataset_configs.get('spec_augment', False) + spec_augment_params = dataset_configs.get('spec_augment_params', None) + dataset_spec_mean = dataset_configs.get('spec_mean', 0.) + dataset_spec_stddev = dataset_configs.get('spec_stddev', 1.) + # General configs. + num_test_clips = dataset_configs.get('num_test_clips', 1) + one_hot_label = dataset_configs.get('one_hot_label', True) + zero_centre_data = dataset_configs.get('zero_centering', True) + augmentation_params = dataset_configs.get('augmentation_params', None) + num_train_val_clips = dataset_configs.get('num_train_val_clips', 1) + do_three_spatial_crops = dataset_configs.get('do_three_spatial_crops', False) + num_spatial_crops = 3 if do_three_spatial_crops else 1 + keep_test_key = dataset_configs.get('keep_test_key', False) + test_split = dataset_configs.get('test_split', 'test') + # For the test set, the actual batch size is + # test_batch_size * num_test_clips + test_batch_size = dataset_configs.get('test_batch_size', eval_batch_size) + + def validate_config(field): + if dataset_configs.get(field) is None: + raise ValueError(f'{field} must be specified for TFRecord dataset.') + validate_config('base_dir') + validate_config('tables') + validate_config('examples_per_subset') + validate_config('num_classes') + + ds_factory = functools.partial( + AVTFRecordDatasetFactory, + base_dir=dataset_configs.base_dir, + tables=dataset_configs.tables, + examples_per_subset=dataset_configs.examples_per_subset, + num_classes=dataset_configs.num_classes, + num_groups=jax.process_count(), + group_index=jax.process_index()) + + def create_dataset_iterator( + subset: Text, + batch_size_local: int, + num_clips: int, + keep_key_local: bool = False) -> Tuple[Iterator[Batch], int]: + + is_training = subset == 'train' + is_test = subset == 'test' + logging.info('Loading split %s', subset) + + dataset, num_examples = load_split_from_dmvr( + ds_factory, + batch_size=batch_size_local, + subset=subset, + modalities=modalities, + num_frames=num_frames, + stride=stride, + num_spec_frames=num_spec_frames, + spec_stride=spec_stride, + num_test_clips=num_clips, + min_resize=min_resize, + crop_size=crop_size, + spec_shape=spec_shape, + dataset_spec_mean=dataset_spec_mean, + dataset_spec_stddev=dataset_spec_stddev, + spec_augment=spec_augment, + spec_augment_params=spec_augment_params, + one_hot_label=one_hot_label, + zero_centering=zero_centre_data, + augmentation_params=augmentation_params, + keep_key=keep_key_local) + if dataset_service_address and is_training: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + dataset = dataset_utils.distribute(dataset, dataset_service_address) + + pad_batch_size = batch_size_local + if is_test: + pad_batch_size = batch_size_local * num_clips * num_spatial_crops + maybe_pad_batches = functools.partial( + maybe_pad_batch, + train=is_training, + batch_size=pad_batch_size, + return_as_dict=return_as_dict) + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + current_iter = iter(dataset) + current_iter = map(dataset_utils.tf_to_numpy, current_iter) + current_iter = map( + functools.partial( + map_keys, modalities=modalities, return_as_dict=return_as_dict), + current_iter) + current_iter = map( + functools.partial( + tile_label_key, return_as_dict=return_as_dict), + current_iter) + current_iter = map(maybe_pad_batches, current_iter) + + if augmentation_params and augmentation_params.get('do_mixup', False): + raise ValueError('mixup should be done in the trainer.') + + current_iter = map(shard_batches, current_iter) + + if is_training and dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + current_iter = jax_utils.prefetch_to_device( + current_iter, dataset_configs.get('prefetch_to_device')) + + return current_iter, num_examples + + train_iter, n_train_examples = create_dataset_iterator( + 'train', batch_size, num_train_val_clips) + eval_iter, n_eval_examples = create_dataset_iterator('validation', + eval_batch_size, + num_train_val_clips) + test_iter, n_test_examples = create_dataset_iterator(test_split, + test_batch_size, + num_test_clips, + keep_test_key) + + meta_data = { + 'num_classes': dataset_configs.num_classes, # pylint:disable=protected-access + 'num_train_examples': (n_train_examples * num_train_val_clips), + 'num_eval_examples': (n_eval_examples * num_train_val_clips), + 'num_test_examples': + (n_test_examples * num_test_clips * num_spatial_crops), + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': True, + } + if return_as_dict: + meta_data['input_shape'] = { + 'rgb': (-1, num_frames, crop_size, crop_size, 3), + 'spectrogram': (-1, num_spec_frames * spec_shape[0], spec_shape[1], 3) + } + elif len(modalities) == 1 and modalities[0] == 'rgb': + meta_data['input_shape'] = (-1, num_frames, crop_size, crop_size, 3) + elif len(modalities) == 1 and modalities[0] == 'spectrogram': + meta_data['input_shape'] = (-1, num_spec_frames * spec_shape[0], + spec_shape[1], 3) + else: + raise NotImplementedError('modality not supported') + logging.info('Dataset metadata:\n%s', meta_data) + + return dataset_utils.Dataset(train_iter, eval_iter, test_iter, meta_data) diff --git a/scenic/projects/mbt/datasets/dataset_utils.py b/scenic/projects/mbt/datasets/dataset_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..339c79b3edb99d24ae117bde9ecd7ace162c1dba --- /dev/null +++ b/scenic/projects/mbt/datasets/dataset_utils.py @@ -0,0 +1,236 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utility functions for datasets that process audio spectrogram.""" + +from absl import logging +from dmvr import builders +from dmvr import processors +from lingvo.core import spectrum_augmenter +import tensorflow as tf + + +def apply_specaugment(spec: tf.Tensor, spec_augment_params=None): + """Performs SpecAugment on the inputs. + + SpecAugment is a data augmentation technique from arXiv:1904.08779, + that combines three transformations: + - a time warping of up to max(time_warp_max_frames, + time_warp_max_ratio*input_length) frames. + - a masking of sampled frequencies with zeros along the entire time axis + (freq_mask) + - a masking of sampled timesteps with zeros along the entire frequency axis + (time_mask) + + Args: + spec: input mel spectrogram of shape [num_clips, time, freq, num_channels] + or [time, freq, num_channels]. + spec_augment_params: dictionary containing the following - + freq_mask_max_bins (int), max number of consecutive mel bins to mask in a + band. - freq_mask_count (int), number of frequency bands to mask. - + time_mask_max_frames (int), max number of consecutive time frames to mask. + - time_mask_count (int), number of time bands to mask. - + time_mask_max_ratio (float), max time mask ratio. - time_warp_max_frames + (int), max numer of time frames to warp. - time_warp_max_ratio (int), max + ratio of the time warp. + + Returns: + Augmented mel spectrogram of shape (num_time_bins, num_freq_bins, channels) + or + (num_clips, num_time_bins, num_freq_bins, channels). + """ + spec_augment_params_obj = spectrum_augmenter.SpectrumAugmenter.Params() + spec_augment_params_obj.freq_mask_max_bins = spec_augment_params.freq_mask_max_bins + spec_augment_params_obj.freq_mask_count = spec_augment_params.freq_mask_count + spec_augment_params_obj.time_mask_max_frames = spec_augment_params.time_mask_max_frames + spec_augment_params_obj.time_mask_count = spec_augment_params.time_mask_count + spec_augment_params_obj.time_warp_max_frames = spec_augment_params.time_warp_max_frames + spec_augment_params_obj.time_warp_max_ratio = spec_augment_params.time_warp_max_ratio + spec_augment_params_obj.time_mask_max_ratio = spec_augment_params.time_mask_max_ratio + spec_augment_params_obj.name = 'specaugment' + spec_augment_layer = spec_augment_params_obj.Instantiate() + + squeeze_axis = [] + if spec.shape.ndims == 3: + spec = spec[None, :, :, :] + squeeze_axis = [0] + elif spec.shape.ndims != 4: + raise ValueError('Spectrogram shape must have 3 or 4 dimensions') + + outputs, _ = spec_augment_layer.FPropDefaultTheta( + spec, tf.zeros(tf.shape(spec)[:2])) + if squeeze_axis: + outputs = tf.squeeze(outputs, axis=squeeze_axis) + return outputs + + +def _decode_spectrogram(spectrogram, + inflate=True, + zero_centering=True, + dataset_mean=0, + dataset_stddev=1): + + """Decodes audio spectrogram. + + Args: + spectrogram: input mel spectrogram + inflate: if True, adds a channel dimension + zero_centering: if True, zero centers the spectrogram + dataset_mean: mean over the dataset. + dataset_stddev: standard deviation over the dataset. + + Returns: + spectrogram: decoded spectrogram. + + """ + if inflate: + spectrogram = tf.expand_dims(spectrogram, -1) + spectrogram = tf.tile(spectrogram, [1, 1, 3]) + + # normalize spectrogram by mean and std deviation + spectrogram = spectrogram - dataset_mean + spectrogram = spectrogram / dataset_stddev + if not zero_centering: + spectrogram = spectrogram + 1.0 + spectrogram = spectrogram / 2 + return spectrogram + + +def add_spectrogram(parser_builder, + sampler_builder, + decoder_builder, + preprocessor_builder, + postprocessor_builder, + input_feature_name='melspec/feature/floats', + input_shape=(100, 128), # (frames, num_mel_bins) + output_feature_name='spectrogram', + is_training=True, + num_frames=5, + stride=1, + num_test_clips=1, + spec_augment=True, + spec_augment_params=None, + zero_centering_image=False, + dataset_mean=0.0, + dataset_stddev=1.0, + sync_random_state=True): + """Add audio spectrogram. + + Args: + parser_builder: An instance of a builders.BaseParserBuilder. + sampler_builder: An instance of a builders.SamplerBuilder. + decoder_builder: An instance of a builders.DecoderBuilder. + preprocessor_builder: An instance of a builders.PreprocessorBuilder. + postprocessor_builder: An instance of a builders.PostprocessorBuilder. + input_feature_name: Name of the feature in the input SequenceExample. + Exposing this as an argument allows using this function for different + image features. + input_shape: Shape of the input spectrogram. + output_feature_name: Name of the feature in the output features dictionary. + is_training: Whether or not in training mode. If True, random sample, and + crop are used. + num_frames: Number of seconds to sample per subclip. + stride: Temporal stride to sample frames. + num_test_clips: Number of test clips (1 by default). If more than 1, this + will sample multiple linearly spaced clips within each video at test time. + If 1, then a single clip in the middle of the video is sampled. The clips + are aggreagated in the batch dimension. + spec_augment: Whether to apply augmentation using SpecAugment. + spec_augment_params: Dict of parameters for SpecAugment. + zero_centering_image: If `True`, frames are normalized to values in [-1, 1]. + If `False`, values in [0, 1]. + dataset_mean: Mean of values over the dataset. + dataset_stddev: Standard deviation of values of the dataset. + sync_random_state: Whether to use stateful option to keep random operations + in sync between different modalities. All modalities having this option + True will use the same outcome in random operations such as sampling and + cropping. + """ + if is_training and num_test_clips != 1: + logging.info('`num_test_clips` %d is ignored since `is_training` is true.', + num_test_clips) + if isinstance(parser_builder, builders.SequenceExampleParserBuilder): + parser_builder.parse_feature( + feature_name=input_feature_name, + feature_type=tf.io.FixedLenSequenceFeature( + shape=input_shape, dtype=tf.float32), + output_name=output_feature_name) + else: + raise ValueError('`parser_builder` has an unexpected type.') + + # Temporal sampler. + num_time_bins = num_frames * input_shape[0] + sampler_builder.add_fn( + fn=lambda x: tf.reshape(x, (-1, input_shape[1])), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_sampler_reshape') + if is_training: + # Sample random clip. + sampler_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x, s=None: processors.sample_sequence( + x, num_time_bins, True, stride, state=s), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_random_sample', + # Use state to keep coherence between modalities if requested. + stateful=sync_random_state) + else: + if num_test_clips > 1: + # Sample linspace clips. + sampler_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x: processors.sample_linspace_sequence( + x, num_test_clips, num_time_bins, stride), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_linspace_sample') + else: + # Sample middle clip. + sampler_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x: processors.sample_sequence( + x, num_time_bins, False, stride), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_middle_sample') + # pylint: disable=g-long-lambda + decoder_builder.add_fn( + fn=lambda x: _decode_spectrogram(x, True, zero_centering_image, + dataset_mean, dataset_stddev), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_decode_spectrogram') + # pylint: enable=g-long-lambda + + if is_training and spec_augment: + # Apply specaugment + preprocessor_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x, s=None: apply_specaugment( + x, spec_augment_params), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_specaugment') + + if num_test_clips > 1 and not is_training: + # In this case, multiple clips are merged together in batch dimenstion which + # will be `B * num_test_clips`. + postprocessor_builder.add_fn( + fn=lambda x: tf.reshape( # pylint: disable=g-long-lambda + x, (-1, num_time_bins, x.shape[2], x.shape[3])), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_reshape') + + + diff --git a/scenic/projects/mbt/main.py b/scenic/projects/mbt/main.py new file mode 100644 index 0000000000000000000000000000000000000000..b1a12aad0514e7b641698be5f942bfaeb01629c9 --- /dev/null +++ b/scenic/projects/mbt/main.py @@ -0,0 +1,61 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Main script for training MBT models.""" + +from typing import Any, Callable + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.mbt import model +from scenic.projects.mbt import trainer +from scenic.train_lib_deprecated import train_utils + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name: str) -> Callable[..., Any]: + """Returns model class given its name.""" + if model_name == 'mbt_multilabel_classification': + return model.MBTMultilabelClassificationModel + elif model_name == 'mbt_classification': + return model.MBTClassificationModel + elif model_name == 'mbt_multihead_classification': + return model.MBTMultiHeadClassificationModel + raise ValueError(f'Unrecognized model: {model_name}.') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the MBT project.""" + model_cls = get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + + trainer.train( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/mbt/model.py b/scenic/projects/mbt/model.py new file mode 100644 index 0000000000000000000000000000000000000000..605475867175f50cb6c72a102beb1d3cb2f3fd69 --- /dev/null +++ b/scenic/projects/mbt/model.py @@ -0,0 +1,868 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""MBT: Multimodal Bottleneck Transformers.""" + +import functools +from typing import Any, Callable, Dict, Optional, Sequence, Tuple + +from absl import logging +import flax.linen as nn +from flax.linen.linear import default_kernel_init +from immutabledict import immutabledict +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import classification_model +from scenic.model_lib.base_models import model_utils as base_model_utils +from scenic.model_lib.base_models.classification_model import ClassificationModel +from scenic.model_lib.layers import attention_layers +from scenic.model_lib.layers import nn_layers +from scenic.projects.baselines import vit +from scenic.projects.mbt import model_utils + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + +_MBT_CLASSIFICATION_METRICS = immutabledict({ + 'accuracy': (base_model_utils.weighted_correctly_classified, + base_model_utils.num_examples), + 'accuracy_top_5': (functools.partial( + base_model_utils.weighted_topk_correctly_classified, + k=5), base_model_utils.num_examples), + 'loss': (base_model_utils.weighted_unnormalized_softmax_cross_entropy, + base_model_utils.num_examples) +}) + +_MODALITIES = ['rgb', 'spectrogram'] + + +def _reshape_to_time_space(x, temporal_dims): + if x.ndim == 3: + b, thw, d = x.shape + assert thw % temporal_dims == 0 + hw = thw // temporal_dims + x = jnp.reshape(x, [b, temporal_dims, hw, d]) + assert x.ndim == 4 + return x + + +def embed_2d_patch(x, patches, embedding_dim, name='embedding'): + """Embedding input patches with 2D conv.""" + + assert patches.get('size') is not None, ('patches.size is now the only way' + 'to define the patches') + assert embedding_dim, 'embedding_dim must be specified' + fh = patches.size[0] + fw = patches.size[1] + x = nn.Conv( + embedding_dim, (fh, fw), + strides=(fh, fw), + padding='VALID', + name=name)(x) + + return x + + +def embed_3d_patch(x, + patches, + embedding_dim, + kernel_init_method, + name='embedding'): + """Embed 3D input patches into tokens.""" + + assert patches.get('size') is not None, 'patches.size must be defined' + assert len(patches.size) == 3, 'patches.size must have 3 elements' + assert embedding_dim, 'embedding_dim must be specified' + + fh, fw, ft = patches.size + + if kernel_init_method == 'central_frame_initializer': + kernel_initializer = model_utils.central_frame_initializer() + logging.info('Using central frame initializer for input embedding') + elif kernel_init_method == 'average_frame_initializer': + kernel_initializer = model_utils.average_frame_initializer() + logging.info('Using average frame initializer for input embedding') + else: + kernel_initializer = default_kernel_init + logging.info('Using default initializer for input embedding') + + x = nn.Conv( + embedding_dim, (ft, fh, fw), + strides=(ft, fh, fw), + padding='VALID', + name=name, + kernel_init=kernel_initializer)(x) + + return x + + +def temporal_encode(x, + modality, + temporal_encoding_config, + patches, + hidden_size, + return_1d=True): + """Encode video for feeding into ViT.""" + if modality == 'spectrogram': + # Spectrogram is treated as a big num_time_bins by num_mel_bins image. + x = embed_2d_patch(x, patches, hidden_size, 'embedding_spectrogram') + temporal_dims = 1 + if return_1d: + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + elif modality == 'rgb': + if temporal_encoding_config.method == 'temporal_sampling': + n, num_frames, in_h, in_w, c = x.shape + n_sampled_frames = temporal_encoding_config.n_sampled_frames + if n_sampled_frames < num_frames: + t_start_idx = num_frames / (n_sampled_frames + 1) + t_step = t_start_idx + else: + t_start_idx = 0 + t_step = 1 + t_end_idx = num_frames + temporal_indices = jnp.arange(t_start_idx, t_end_idx, t_step) + temporal_indices = jnp.round(temporal_indices).astype(jnp.int32) + temporal_indices = jnp.minimum(temporal_indices, num_frames - 1) + + x = x[:, temporal_indices] # [n, t_s, in_h, in_w, c] + t_s = x.shape[1] + x = jnp.reshape(x, [n, t_s * in_h, in_w, c]) + x = embed_2d_patch(x, patches, hidden_size) + temporal_dims = t_s + if return_1d: + n, th, w, c = x.shape + x = jnp.reshape(x, [n, th * w, c]) + else: + n, th, w, c = x.shape + x = jnp.reshape(x, [n, t_s, -1, w, c]) + if temporal_encoding_config.method == '3d_conv': + kernel_init_method = temporal_encoding_config.get('kernel_init_method', + None) + + x = embed_3d_patch(x, patches, hidden_size, kernel_init_method) + temporal_dims = x.shape[1] + if return_1d: + n, t, h, w, c = x.shape + x = jnp.reshape(x, [n, t * h * w, c]) + else: + raise AssertionError('Unknown temporal encoding method.') + return x, temporal_dims + + +def add_positional_embed(x, feat_name): + """Adds positional embedding.""" + assert x.ndim == 3 # (batch, len, emb) + x = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name=feat_name)(x) + return x + + +class EncoderBlock(nn.Module): + """Transformer encoder block. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: Number of heads. + dtype: The dtype of the computation (default: float32). + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + attention_kernel_initializer: Initializer to use for attention + layers. + droplayer_p: Probability of dropping a layer. + + + + Returns: + Output after transformer encoder block. + """ + mlp_dim: int + num_heads: int + dtype: Any = jnp.float32 + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + attention_kernel_initializer: Initializer = nn.initializers.xavier_uniform() + droplayer_p: float = 0.0 + + def get_drop_pattern(self, x, deterministic): + if not deterministic and self.droplayer_p: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + return jax.random.bernoulli( + self.make_rng('dropout'), self.droplayer_p, shape).astype('float32') + else: + return 0.0 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, deterministic: bool) -> jnp.ndarray: + """Applies Encoder1DBlock module.""" + + # Attention block. + x = nn.LayerNorm(dtype=self.dtype)(inputs) + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + kernel_init=self.attention_kernel_initializer, + broadcast_dropout=False, + dropout_rate=self.attention_dropout_rate, + dtype=self.dtype)(x, x, deterministic=deterministic) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic) + + drop_pattern = self.get_drop_pattern(x, deterministic) + x = x * (1.0 - drop_pattern) + inputs + + # MLP block. + y = nn.LayerNorm(dtype=self.dtype)(x) + y = attention_layers.MlpBlock( + mlp_dim=self.mlp_dim, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6))( + y, deterministic=deterministic) + + drop_pattern = self.get_drop_pattern(x, deterministic) + return y * (1.0 - drop_pattern) + x + + +class Encoder(nn.Module): + """Transformer Encoder. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of attention heads. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_droplayer_rate: Probability of dropping a layer linearly + grows from 0 to the provided value. Our implementation of stochastic + depth follows timm library, which does per-example layer dropping and + uses independent dropping patterns for each skip-connection. + modality_fusion: Tuple with modalities to combine. + fusion_layer: Which layer to fuse modalities. fusion_layer == 0 provides + early fusion. + use_bottleneck: If True, adds self-attention bottleneck. + test_with_bottlenecks: Whether to use bottlenecks at test time. + share_encoder: If True, different modalities share the same encoder weights + for the layers before fusion. + dtype: The dtype of the computation (default: float32). + """ + mlp_dim: int + num_layers: int + num_heads: int + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_droplayer_rate: float = 0.0 + modality_fusion: Tuple[str] = ('spectrogram',) + fusion_layer: int = 0 + use_bottleneck: bool = False + test_with_bottlenecks: bool = True + share_encoder: bool = False + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: Dict[str, Any], + bottleneck: jnp.ndarray, *, + train: bool): + """Applies Transformer model on the inputs.""" + + def get_encoder_block(encoder_block, droplayer_p, name): + """Returns the encoder block for a single layer.""" + dtype = jax.dtypes.canonicalize_dtype(self.dtype) + return encoder_block( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + droplayer_p=droplayer_p, + name=name, + dtype=dtype) + + def get_context(target_modality, modality_fusion, x): + """Returns list of context modalities.""" + context = [] + for modality in _MODALITIES: + if modality != target_modality and modality in modality_fusion: + context.append(x[modality]) + return context + + def combine_context(x, other_modalities): + """Combine x with a list of other modalities.""" + num_tokens = x.shape[1] + # Append x to the end of the list + other_modalities.append(x) + x_combined = jnp.concatenate(other_modalities, axis=1) + return x_combined, num_tokens + + assert self.modality_fusion + + # Add positional embeddings + for modality in self.modality_fusion: + if modality == 'rgb': + name = '' + else: + name = '_' + modality + x[modality] = add_positional_embed(x[modality], 'posembed_input' + name) + + use_bottlenecks = train or self.test_with_bottlenecks + x_combined = None + # Input Encoder + for lyr in range(self.num_layers): + droplayer_p = ( + lyr / max(self.num_layers - 1, 1)) * self.stochastic_droplayer_rate + encoders = {} + encoders['rgb'] = get_encoder_block(EncoderBlock, droplayer_p, + f'encoderblock_{lyr}') + + for modality in self.modality_fusion: + if modality != 'rgb': + if self.share_encoder: + encoders[modality] = encoders['rgb'] + else: + encoders[modality] = get_encoder_block( + EncoderBlock, droplayer_p, + f'encoderblock_{lyr}_' + modality) + + if (lyr < self.fusion_layer or len(self.modality_fusion) == 1 or + (self.use_bottleneck and not use_bottlenecks)): + for modality in self.modality_fusion: + x[modality] = encoders[modality](x[modality], deterministic=not train) + else: + if self.use_bottleneck: + bottle = [] + for modality in self.modality_fusion: + t_mod = x[modality].shape[1] + in_mod = jnp.concatenate([x[modality], bottleneck], axis=1) + out_mod = encoders[modality](in_mod, deterministic=not train) + x[modality] = out_mod[:, :t_mod] + bottle.append(out_mod[:, t_mod:]) + bottleneck = jnp.mean(jnp.stack(bottle, axis=-1), axis=-1) + else: + if not self.share_encoder and len(self.modality_fusion) > 1: + x_new = {} + for modality in self.modality_fusion: + other_modalities = get_context(modality, self.modality_fusion, x) + combined_mods, t = combine_context(x[modality], other_modalities) + combined_mods = encoders[modality]( + combined_mods, deterministic=not train) + x_new[modality] = combined_mods[:, -t:] + x = x_new + + elif self.share_encoder and len(self.modality_fusion) > 1: + if x_combined is None: + x_combined = [] + for modality in self.modality_fusion: + x_combined.append(x[modality]) + x_combined = jnp.concatenate(x_combined, axis=1) + x_combined = encoders['rgb'](x_combined, deterministic=not train) + if x_combined is not None: + x_out = x_combined + else: + x_out = [] + for modality in self.modality_fusion: + x_out.append(x[modality]) + x_out = jnp.concatenate(x_out, axis=1) + encoded = nn.LayerNorm(name='encoder_norm')(x_out) + + return encoded + + +class MBT(nn.Module): + """Audio-Visual Fusion Transformer model for Video. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + num_classes: Number of output classes. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + if None, we skip the extra projection + tanh activation at the end. + temporal_encoding_config: ConfigDict which defines the type of input + encoding when tokenising the video. + attention_config: ConfigDict which defines the type of spatio-temporal + attention applied in the model. + representation_size: Size of the representation layer in the model's head. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_droplayer_rate: Probability of dropping a layer. Linearly + increases from 0 to the provided value.. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + modality_fusion: Tuple with modalities to combine. + fusion_layer: Which layer to fuse modalities. + return_prelogits: If true, return the final representation of the network + before the classification head. Useful when using features for a + downstream task. + return_preclassifier: If true, return a dict of all token embeddings. + Useful when using token embeddings for a downstream task. + use_bottleneck: If True, adds self-attention bottleneck. + n_bottlenecks: Number of bottleneck tokens. + test_with_bottlenecks: Whether to use bottlenecks at test time. + share_encoder: If True, different modalities share the same encoder weights + for the layers before fusion. + dtype: JAX data type for activations. + """ + + mlp_dim: int + num_layers: int + num_heads: int + num_classes: int + patches: ml_collections.ConfigDict + hidden_size: int + temporal_encoding_config: ml_collections.ConfigDict + attention_config: ml_collections.ConfigDict + representation_size: Optional[int] = None + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_droplayer_rate: float = 0. + classifier: str = 'gap' + modality_fusion: Tuple[str] = ('spectrogram',) + fusion_layer: int = 0 + return_prelogits: bool = False + return_preclassifier: bool = False + use_bottleneck: bool = False + n_bottlenecks: int = 4 + test_with_bottlenecks: bool = True + share_encoder: bool = False + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, + x, + *, + train: bool, + debug: bool = False): + assert self.fusion_layer <= self.num_layers and self.fusion_layer >= 0 + assert self.classifier in ['token', '0', 'gap', 'gmp', 'gsp'] + + temporal_dims = {} + for modality in self.modality_fusion: + x[modality], _ = temporal_encode( + x[modality], modality, self.temporal_encoding_config, self.patches, + self.hidden_size) + # If we want to add a class token, add it here. + if self.classifier in ['token']: + if modality == 'rgb' or len(self.modality_fusion) == 1: + name = '' + else: + name = modality + n, temporal_dims[modality], c = x[modality].shape + cls = self.param('cls'+name, nn.initializers.zeros, (1, 1, c), + x[modality].dtype) + cls = jnp.tile(cls, [n, 1, 1]) + x[modality] = jnp.concatenate([cls, x[modality]], axis=1) + bottleneck_dtype = x[modality].dtype + + bottleneck = None + if self.use_bottleneck: + n_bottlenecks = self.n_bottlenecks + if self.classifier in ['token']: + n_bottlenecks += 1 + bottleneck = self.param('bottleneck', + nn.initializers.normal(stddev=0.02), # From BERT. + (1, n_bottlenecks, c), bottleneck_dtype) + bottleneck = jnp.tile(bottleneck, [n, 1, 1]) + + x = Encoder( + modality_fusion=self.modality_fusion, + fusion_layer=self.fusion_layer, + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_droplayer_rate=self.stochastic_droplayer_rate, + use_bottleneck=self.use_bottleneck, + test_with_bottlenecks=self.test_with_bottlenecks, + share_encoder=self.share_encoder, + dtype=self.dtype, + name='Transformer')(x, bottleneck, train=train) + + if self.return_preclassifier: + return x + + if self.classifier in ['token', '0']: + # Obtaining the CLS tokens for each modality. + x_out = {} + counter = 0 + for modality in self.modality_fusion: + x_out[modality] = x[:, counter] + counter += temporal_dims[modality] + 1 + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x_out = fn(x, axis=list(range(1, x.ndim - 1))) + + if self.representation_size is not None: + pre_logits_fc = nn.Dense(self.representation_size, name='pre_logits') + if isinstance(x_out, dict): + for modality in x_out: + x_out[modality] = pre_logits_fc(x_out[modality]) + x_out[modality] = nn.tanh(x_out[modality]) + else: + x_out = nn.Dense(self.representation_size, name='pre_logits')(x_out) + x_out = nn.tanh(x_out) + else: + if not isinstance(x_out, dict): + x_out = nn_layers.IdentityLayer(name='pre_logits')(x_out) + + if self.return_prelogits: + return x_out + if isinstance(x_out, dict): + output_projection_fc = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection') + x_pool = 0 + for modality in x_out: + x_out[modality] = output_projection_fc(x_out[modality]) + x_pool += x_out[modality] + x_pool /= len(x_out) + if not train: + return x_pool + else: + x_out = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x_out) + return x_out + + +class MBTMultilabelClassificationModel(vit.ViTMultiLabelClassificationModel): + """Video Transformer model for multi-class classification.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return MBT( + num_classes=self.dataset_meta_data['num_classes'], + modality_fusion=self.config.model.modality_fusion, + fusion_layer=self.config.model.fusion_layer, + use_bottleneck=self.config.model.get('use_bottleneck', False), + test_with_bottlenecks=self.config.model.get( + 'test_with_bottlenecks', True), + n_bottlenecks=self.config.model.get('n_bottlenecks', 4), + share_encoder=self.config.model.get('share_encoder', False), + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + representation_size=self.config.model.representation_size, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + temporal_encoding_config=self.config.model.temporal_encoding_config, + attention_config=self.config.model.attention_config, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + stochastic_droplayer_rate=self.config.model.get( + 'stochastic_droplayer_rate', 0), + return_prelogits=self.config.model.get('return_prelogits', False), + dtype=model_dtype) + + def init_from_train_state(self, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_proj: bool = False) -> Any: + """Updates the train_state with data from restored_train_state.""" + return model_utils.initialise_from_train_state(self.config, train_state, + restored_train_state, + restored_model_cfg, + restore_output_proj) + + def loss_function( + self, + logits: jnp.ndarray, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None, + ) -> float: + """Returns sigmoid cross entropy loss with an L2 penalty on the weights. + + Args: + logits: Output of model in shape [batch, length, num_classes]. Optionally, + this can also be a dictionary with logits for individual modalities. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + weights = batch.get('batch_mask') + labels = batch['label'] + + assert self.dataset_meta_data.get('target_is_onehot', False) + + label_weights = self.dataset_meta_data.get('class_weights', None) + + if isinstance(logits, dict): + sig_ce_loss = [] + for modality in logits: + sig_ce_loss.append(base_model_utils.weighted_sigmoid_cross_entropy( + logits[modality], + labels[modality], + weights, + label_weights=label_weights, + label_smoothing=self.config.get('label_smoothing'))) + sig_ce_loss = jnp.mean(jnp.array(sig_ce_loss)) + else: + if isinstance(labels, dict): + assert 'all' in labels, 'mixmod must be turned off.' + labels = labels['all'] + sig_ce_loss = base_model_utils.weighted_sigmoid_cross_entropy( + logits, + labels, + weights, + label_weights=label_weights, + label_smoothing=self.config.get('label_smoothing')) + if self.config.get('l2_decay_factor') is None: + total_loss = sig_ce_loss + else: + l2_loss = base_model_utils.l2_regularization(model_params) + total_loss = sig_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss + + +class MBTClassificationModel(ClassificationModel): + """Audio Video Transformer model for n-way classification.""" + + def build_flax_model(self) -> nn.Module: + assert (self.config.model.attention_config.get('type', 'spacetime') != + 'factorized_encoder'), ( + 'Other attention types not supported.') + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return MBT( + num_classes=self.dataset_meta_data['num_classes'], + modality_fusion=self.config.model.modality_fusion, + fusion_layer=self.config.model.fusion_layer, + use_bottleneck=self.config.model.get('use_bottleneck', False), + test_with_bottlenecks=self.config.model.get( + 'test_with_bottlenecks', True), + n_bottlenecks=self.config.model.get('n_bottlenecks', 4), + share_encoder=self.config.model.get('share_encoder', False), + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + representation_size=self.config.model.representation_size, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + temporal_encoding_config=self.config.model.temporal_encoding_config, + attention_config=self.config.model.attention_config, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + stochastic_droplayer_rate=self.config.model.get( + 'stochastic_droplayer_rate', 0), + return_prelogits=self.config.model.get('return_prelogits', False), + dtype=model_dtype) + + def loss_function(self, + logits: jnp.ndarray, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Returns softmax cross entropy loss with an L2 penalty on the weights. + + Args: + logits: Output of model in shape [batch, length, num_classes]. Optionally, + this can also be a dictionary with logits for individual modalities. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + weights = batch.get('batch_mask') + labels = batch['label'] + + assert self.dataset_meta_data.get('target_is_onehot', False) + + if isinstance(logits, dict): + sof_ce_loss = [] + for modality in logits: + sof_ce_loss.append(base_model_utils.weighted_softmax_cross_entropy( + logits[modality], + labels[modality], + weights, + label_smoothing=self.config.get('label_smoothing'))) + sof_ce_loss = jnp.mean(jnp.array(sof_ce_loss)) + else: + sof_ce_loss = base_model_utils.weighted_softmax_cross_entropy( + logits, + labels, + weights, + label_smoothing=self.config.get('label_smoothing')) + if self.config.get('l2_decay_factor') is None: + total_loss = sof_ce_loss + else: + l2_loss = base_model_utils.l2_regularization(model_params) + total_loss = sof_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one + of the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + label, weights)``` + """ + del split # for all splits, we return the same metric functions + + return functools.partial( + classification_model.classification_metrics_function, + target_is_onehot=self.dataset_meta_data.get('target_is_onehot', False), + metrics=_MBT_CLASSIFICATION_METRICS) + + def init_from_train_state(self, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_proj: bool = False) -> Any: + """Updates the train_state with data from restored_train_state.""" + return model_utils.initialise_from_train_state(self.config, train_state, + restored_train_state, + restored_model_cfg, + restore_output_proj) + + +class MBTMultiHeadClassificationModel(MBTClassificationModel): + """Audio Visual Transformer model for multiple n-way classification.""" + + def __init__(self, config, dataset_meta_data): + super().__init__(config, dataset_meta_data) + + assert self.config.dataset_configs.get('class_splits'), ( + 'dataset_configs.class_splits must be specified') + self.class_splits = np.cumsum(self.config.dataset_configs.class_splits) + if self.config.dataset_configs.get('split_names'): + self.split_names = self.config.dataset_configs.split_names + else: + self.split_names = [str(x + 1) for x in range(len(self.class_splits))] + + assert not config.get('multicrop_softmax_logits', False), ( + 'Returning softmaxed logits during multicrop evaluation is not ' + 'supported for this model.') + + def loss_function(self, + logits: jnp.ndarray, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Return softmax cross entropy loss with an L2 penalty on the weights.""" + weights = batch.get('batch_mask') + labels = batch['label'] + + assert self.dataset_meta_data.get('target_is_onehot', False) + if not isinstance(logits, dict): + all_logits = logits + logits = {} + logits['all'] = all_logits + if isinstance(labels, dict): + assert 'all' in labels, 'mixmod must be turned off.' + labels = labels['all'] + else: + all_labels = labels + labels = {} + labels['all'] = all_labels + + sof_ce_loss = [] + for modality in logits: + if logits[modality].shape[-1] != self.class_splits[-1]: + raise AssertionError( + 'Logit dimension must be equal to number of classes') + + logit_splits = jnp.split(logits[modality], + self.class_splits, axis=-1)[:-1] + assert not isinstance(labels[modality], dict), labels.keys() + labels_splits = jnp.split( + labels[modality], self.class_splits, axis=-1)[:-1] + label_smoothing = self.config.get('label_smoothing') + + sof_ce_losses = [ + base_model_utils.weighted_softmax_cross_entropy( + logit_split, labels_split, weights, label_smoothing) + for logit_split, labels_split in zip(logit_splits, labels_splits) + ] + sof_ce_loss.append(jnp.mean(jnp.array(sof_ce_losses))) + sof_ce_loss = jnp.mean(jnp.array(sof_ce_loss)) + + if self.config.get('l2_decay_factor') is None: + total_loss = sof_ce_loss + else: + l2_loss = base_model_utils.l2_regularization(model_params) + total_loss = sof_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one + of the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + label, weights)``` + """ + del split # for all splits, we return the same metric functions + + def classification_metrics_function(logits, batch, metrics, class_splits, + split_names): + + one_hot_targets = batch['label'] + weights = batch.get('batch_mask') # batch_mask might not be defined + + logit_splits = jnp.split(logits, class_splits, axis=-1)[:-1] + one_hot_target_splits = jnp.split( + one_hot_targets, class_splits, axis=-1)[:-1] + + evaluated_metrics = {} + total_loss = [0.0, 0.0] + for logits_i, one_hot_targets_i, name in zip(logit_splits, + one_hot_target_splits, + split_names): + for key, val in metrics.items(): + evaluated_metrics[ + f'{name}_{key}'] = base_model_utils.psum_metric_normalizer( + (val[0](logits_i, one_hot_targets_i, + weights), val[1](logits_i, one_hot_targets_i, + weights))) + if key == 'loss': + total_loss[0] += evaluated_metrics[f'{name}_{key}'][0] + total_loss[1] += evaluated_metrics[f'{name}_{key}'][1] + evaluated_metrics['total_loss'] = total_loss + + if len(class_splits) == 2: + pairwise_acc = base_model_utils.psum_metric_normalizer( + (model_utils.joint_accuracy(logits, one_hot_targets, class_splits, + weights), + base_model_utils.num_examples(logits, one_hot_targets, weights))) + pairwise_top_five = base_model_utils.psum_metric_normalizer( + (model_utils.joint_top_k( + logits, one_hot_targets, class_splits, k=5, weights=weights), + base_model_utils.num_examples(logits, one_hot_targets, weights))) + eval_name = f'{split_names[0]}-{split_names[1]}' + evaluated_metrics[f'{eval_name}_accuracy'] = pairwise_acc + evaluated_metrics[f'{eval_name}_accuracy_top_5'] = pairwise_top_five + + return evaluated_metrics + + return functools.partial( + classification_metrics_function, + metrics=_MBT_CLASSIFICATION_METRICS, + class_splits=self.class_splits, + split_names=self.split_names) diff --git a/scenic/projects/mbt/model_utils.py b/scenic/projects/mbt/model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..16386574b0c7408ce8f840edd48820157757581d --- /dev/null +++ b/scenic/projects/mbt/model_utils.py @@ -0,0 +1,400 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Model utils for MBT.""" + +from typing import Any + +from absl import logging +import flax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.common_lib import debug_utils +from scenic.projects.vivit import model_utils as vivit_utils +import scipy + + +# Shared utils with ViViT +central_frame_initializer = vivit_utils.central_frame_initializer +average_frame_initializer = vivit_utils.average_frame_initializer +tile_positional_embeddings = vivit_utils.tile_positional_embeddings + + +def interpolate_positional_embeddings(restored_posemb_grid, n_tokens): + """Interpolate positional embeddings from one size to another. + + Args: + restored_posemb_grid: Positional embeddings from restored model. Shape is + [n_restored_tokens, d]. It is assumed that the restored model used square + image patches. + n_tokens: Number of tokens in the target model. Can be a scalar if the + target image is square, otherwise should be a tuple of 2. + + Returns: + positional embedding resized to match n_tokens. Shape is [1, n_tokens, d] + """ + + restored_gs = int(np.sqrt(len(restored_posemb_grid))) + if isinstance(n_tokens, tuple): + gh, gw = n_tokens + else: + if n_tokens == len(restored_posemb_grid): + # No need to interpolate + return np.expand_dims(restored_posemb_grid, axis=0) + gh = int(np.sqrt(n_tokens)) + gw = n_tokens // gh + assert gh * gw == n_tokens + logging.info('Resizing grid-size from (%s, %s) to (%s, %s).', + restored_gs, restored_gs, gh, gw) + restored_posemb_grid = restored_posemb_grid.reshape(restored_gs, restored_gs, + -1) + zoom = (gh / restored_gs, gw / restored_gs, 1) + restored_posemb_grid = scipy.ndimage.zoom(restored_posemb_grid, zoom, order=1) + restored_posemb_grid = restored_posemb_grid.reshape(1, gh * gw, -1) + return restored_posemb_grid + + +def initialise_from_train_state( + config, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_proj: bool, + mbt_transformer_key: str = 'Transformer', + log_initialised_param_shapes: bool = True, + one_config: bool = True, + prefix_path: Any = None) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is written to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + config: Configurations for the model being updated, or tuple of configs. + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of a + pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + restore_output_proj: If true, load the final output projection. Set + to False if finetuning to a new dataset. + mbt_transformer_key: The key used for storing the subtree in the + parameters that keeps Transformer weights, that are supposed to be + initialized from the given pre-trained model. + log_initialised_param_shapes: If true, print tabular summary of all the + variables in the model once they have been initialised. + one_config: If true, we have only a single config. If false, we get a tuple + of configs in the order [init_config, model_config, dataset_config]. This + is useful for works that build upon MBT and have different models in their + config. + prefix_path: If parameters are in a subtree. + + Returns: + Updated train_state. + """ + # Split up configs + if one_config: + init_config = config.init_from + model_config = config.model + dataset_config = config.dataset_configs + else: + init_config, model_config, dataset_config = config + + # Inspect and compare the parameters of the model with the init-model + params = flax.core.unfreeze(train_state.optimizer.target) + logging.info('Parameters in the target model are: %s', params) + + if init_config.get('checkpoint_format', 'scenic') == 'big_vision': + restored_params = restored_train_state.optimizer['target'] + else: + restored_params = restored_train_state.optimizer.target + restored_params = flax.core.unfreeze(restored_params) + if init_config.get('init_from_vit', True): + if prefix_path: + video_params = params[prefix_path] + else: + video_params = params + # Start moving parameters, one-by-one and apply changes if needed + for m_key, m_params in restored_params.items(): + if m_key == 'output_projection': + if restore_output_proj: + video_params[m_key] = m_params + else: + pass + elif m_key == 'pre_logits': + if model_config.representation_size is None: + # We don't have representation_size in the new model, so let's ignore + # if from the pretained model, in case it has it. + # Note, removing the key from the dictionary is necessary to prevent + # obscure errors from the Flax optimizer. + video_params.pop(m_key, None) + else: + assert restored_model_cfg.model.representation_size + video_params[m_key] = m_params + + elif m_key in ['Transformer']: + for tm_key, tm_params in m_params.items(): + if tm_key == 'posembed_input': # Might need resolution change + init_posemb( + video_params[mbt_transformer_key], + m_params, + init_config, + model_config, + dataset_config, + restored_model_cfg, + 'posembed_input', + prefix_path=prefix_path) + init_posemb( + video_params[mbt_transformer_key], + m_params, + init_config, + model_config, + dataset_config, + restored_model_cfg, + 'posembed_input_spectrogram', + prefix_path=prefix_path) + init_posemb( + video_params, + m_params, + init_config, + model_config, + dataset_config, + restored_model_cfg, + 'bottleneck', + prefix_path=prefix_path) + elif 'encoderblock' in tm_key: + logging.info('Loading encoder parameters.') + init_encoderblock(video_params[mbt_transformer_key], m_params, + tm_key) + else: # Other parameters of the Transformer encoder + video_params[mbt_transformer_key][tm_key] = tm_params + elif m_key == 'embedding': + init_embedding(video_params, m_params, init_config, model_config, + 'embedding') + init_embedding(video_params, m_params, init_config, model_config, + 'embedding_spectrogram') + else: + if m_key in train_state.optimizer.target: + video_params[m_key] = m_params + if '%s_spectrogram' % m_key in train_state.optimizer.target: + video_params['%s_spectrogram' % m_key] = m_params + else: + logging.info('Skipping %s. In restored model but not in target', + m_key) + else: + for m_key, m_params in restored_params.items(): + if m_key == 'output_projection': + if restore_output_proj: + params[m_key] = m_params + else: + pass + elif m_key == 'pre_logits': + if model_config.representation_size is None: + # We don't have representation_size in the new model, so let's ignore + # if from the pretained model, in case it has it. + # Note, removing the key from the dictionary is necessary to prevent + # obscure errors from the Flax optimizer. + params.pop(m_key, None) + else: + assert restored_model_cfg.model.representation_size + params[m_key] = m_params + else: + if m_key in train_state.optimizer.target: + params[m_key] = m_params + else: + logging.info('Skipping %s. In restored model but not in target', + m_key) + + if log_initialised_param_shapes: + logging.info('Parameter summary after initialising from train state') + debug_utils.log_param_shapes(params) + return train_state.replace( + optimizer=train_state.optimizer.replace(target=flax.core.freeze(params))) + + +def init_posemb(to_params, from_params, init_config, model_config, + dataset_config, restored_model_cfg, name, prefix_path=None): + """Initialize the positional embeddings.""" + if name not in to_params: + logging.info('No %s in target model', name) + elif init_config.restore_positional_embedding: + if name == 'bottleneck': + posemb = to_params[name] + else: + posemb = to_params[name]['pos_embedding'] + restored_posemb = from_params['posembed_input']['pos_embedding'] + if restored_posemb.shape != posemb.shape: + # Rescale the grid of pos, embeddings. + # Default parameter shape is (1, N, 768) + logging.info('Adapting positional embeddings %s from %s to %s', + name, restored_posemb.shape, posemb.shape) + ntok = posemb.shape[1] + if prefix_path: + # MBT is part of a larger model + classifier = restored_model_cfg.mbt.model.classifier + else: + classifier = restored_model_cfg.model.classifier + if classifier == 'token': + # the first token is the CLS token + cls_tok = restored_posemb[:, :1] + restored_posemb_grid = restored_posemb[0, 1:] + else: + cls_tok = restored_posemb[:, :0] + restored_posemb_grid = restored_posemb[0] + if model_config.classifier == 'token': + ntok -= 1 + + size_change = init_config.positional_embed_size_change + if name == 'bottleneck': + restored_posemb_grid = interpolate_positional_embeddings( + restored_posemb_grid, ntok) + elif size_change == 'tile': + restored_posemb_grid = tile_positional_embeddings( + restored_posemb_grid, ntok) + elif size_change in ['resize_tile', 'resize']: + temp_encoding = model_config.temporal_encoding_config + if name.find('spectrogram') > -1: + gh = ((dataset_config.spec_shape[0] * + dataset_config.num_spec_frames) // + model_config.patches.size[0]) + gw = (dataset_config.spec_shape[1] // + model_config.patches.size[1]) + tokens_per_frame = (gh, gw) + elif temp_encoding.method == 'temporal_sampling': + tokens_per_frame = int(ntok / temp_encoding.n_sampled_frames) + elif temp_encoding.method == '3d_conv': + # This is for RGB only. + n_frames = ( + dataset_config.num_frames // + model_config.patches.size[2]) + tokens_per_frame = ntok // n_frames + else: + raise AssertionError( + f'Unknown temporal encoding {temp_encoding.method}') + + restored_posemb_grid = interpolate_positional_embeddings( + restored_posemb_grid, tokens_per_frame) + if size_change == 'resize_tile' and ntok != tokens_per_frame: + restored_posemb_grid = restored_posemb_grid[0] + restored_posemb_grid = tile_positional_embeddings( + restored_posemb_grid, ntok) + else: + raise AssertionError( + 'Unknown positional embedding size changing method') + # attach the CLS token again + if model_config.classifier == 'token': + restored_posemb = jnp.array( + np.concatenate([cls_tok, restored_posemb_grid], axis=1)) + else: + restored_posemb = restored_posemb_grid + + if name == 'bottleneck': + to_params[name] = restored_posemb + else: + to_params[name]['pos_embedding'] = restored_posemb + else: + logging.info('Not restoring positional encodings from pretrained model') + + +def init_embedding(to_params, from_params, init_config, model_config, name): + """Initialize input embedding.""" + if name not in to_params: + logging.info('No %s in target model', name) + elif init_config.get('restore_input_embedding', True): + input_kernel = to_params[name]['kernel'] + restored_kernel = from_params['kernel'] + restored_bias = from_params['bias'] + + if input_kernel.shape != restored_kernel.shape: + kernel_init_method = model_config.temporal_encoding_config.kernel_init_method + if input_kernel.shape == restored_kernel.shape[1:]: + # Deflates a ViViT 3D embedder to work with 2D spectrogram inputs. + restored_kernel = np.mean(restored_kernel, axis=0) + elif input_kernel.shape[1:] != restored_kernel.shape: + # Kernel dimensions are [t, c_in, c_out] + restored_kernel = np.reshape(restored_kernel, input_kernel.shape) + elif input_kernel.shape[0] == 1: + # Kernel dimensions are [t, h, w, c_in, c_out] + restored_kernel = np.expand_dims(restored_kernel, axis=0) + elif kernel_init_method == 'average_frame_initializer': + # This corresponds to "filter inflation" in + # J Carreira and A Zisserman. Quo vadis, action recognition? + # A new model and the kinetics dataset. CVPR 2017" + logging.info('Initializing input kernel with filter inflation.') + t = input_kernel.shape[0] + restored_kernel = np.expand_dims(restored_kernel, axis=0) + restored_kernel = np.tile(restored_kernel, [t, 1, 1, 1, 1]) / t + elif kernel_init_method == 'average_arp_frame_initializer': + # This corresponds to a combination of filter inflation and + # the approximate rank pooling described in + # H Bilen et al. Action Recognition with Dynamic Image Networks. + # PAMI 2017. + logging.info('Initialzing input kernel with ARP inflation') + t = input_kernel.shape[0] + restored_kernel = np.expand_dims(restored_kernel, axis=0) + restored_kernel = np.tile(restored_kernel, [t, 1, 1, 1, 1]) + + def average_arp(length): + # Implements Equation 3 of Bilen et al. PAMI 2017 + array = np.arange(1, length + 1) + + harmonic = np.zeros((length + 1)) + harmonic[1:] = np.cumsum(1.0 / array) + + array = 2 * (length - array + 1) - (length + 1) * ( + harmonic[-1] - harmonic[:-1]) + return array + + normalizer = average_arp(t) / t + normalizer = np.reshape(normalizer, [t, 1, 1, 1, 1]) + restored_kernel = restored_kernel * normalizer + elif kernel_init_method == 'central_frame_initializer': + logging.info('Initializing input kernel to select centre frame.') + central_time_index = input_kernel.shape[0] // 2 + temp = np.zeros(input_kernel.shape) + temp[central_time_index] = restored_kernel.copy() + restored_kernel = temp + else: + raise AssertionError( + 'Unknown input kernel initialization {}'.format(kernel_init_method)) + + to_params[name]['kernel'] = restored_kernel + to_params[name]['bias'] = restored_bias + else: + logging.info('Not restoring input embedding parameters') + + +def init_encoderblock(to_params, from_params, tm_key): + """Initialize encoder_block_parameters.""" + # Explicitly enumerate over the keys in the encoder-block. Don't just + # assign the dictionary. It is possible for the target model to + # contain keys that are not in the restored model. + for enc_key in from_params[tm_key].keys(): + restoring_params = False + if tm_key in to_params: + assert enc_key in to_params[tm_key], '%s not in to_params[%s]' % ( + enc_key, tm_key) + to_params[tm_key][enc_key] = from_params[tm_key][enc_key] + restoring_params = True + if '%s_spectrogram' % tm_key in to_params: + assert enc_key in to_params['%s_spectrogram' % + tm_key], '%s not in to_params[%s]' % ( + enc_key, '%s_spectrogram' % tm_key) + to_params['%s_spectrogram' % + tm_key][enc_key] = from_params[tm_key][enc_key] + restoring_params = True + if not restoring_params: + logging.info('Warning: Not restoring encoder parameters.') diff --git a/scenic/projects/mbt/requirements.txt b/scenic/projects/mbt/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..b1f517f0d0f2b2a103c114af45db69c9a3614b4a --- /dev/null +++ b/scenic/projects/mbt/requirements.txt @@ -0,0 +1,2 @@ +dmvr @ git+https://github.com/deepmind/dmvr.git +lingvo==0.11.0 diff --git a/scenic/projects/mbt/train_utils.py b/scenic/projects/mbt/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..4b1abaa0a4826b8cadd3fab41e6815a5f451cf2d --- /dev/null +++ b/scenic/projects/mbt/train_utils.py @@ -0,0 +1,143 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utility functions for training.""" + +import functools +from typing import Any, Callable, Tuple, Optional, Mapping, Union +from absl import logging + +import flax +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.common_lib import debug_utils +from scenic.train_lib_deprecated import optimizers + +PyTree = Union[Mapping[str, Mapping], Any] +PRNGKey = jnp.ndarray + + +def compute_flops(flax_model_apply_fn: Callable[[jnp.ndarray], Any], + input_spec: Mapping[str, Tuple[Tuple[int, ...], jnp.dtype]], + fuse_multiply_add: bool) -> float: + """Performs static analysis of the graph to compute theoretical FLOPs. + + This function is branched from scenic/common_lib/debug_utils.py. + The difference is that here the input_spec is a dictionary while it is a + sequence in the original implementation. + + Args: + flax_model_apply_fn: Apply function of the flax model to be analysed. + input_spec: An mapping of modality names to (shape, dtype) pairs specifying + the shape and dtype of the inputs. + fuse_multiply_add: Bool; If true, count a multiply and add (also known as + "multiply-accumulate" or "MAC") as 1 FLOP rather than 2 (as done by the + HLO analysis). This is commonly used in literature. + + Returns: + flops: The total number of flops. + """ + input_placeholder = {} + for modality, spec in input_spec.items(): + in_st = debug_utils.input_spec_to_jax_shape_dtype_struct(spec, batch_size=1) + input_placeholder[modality] = jnp.zeros(in_st.shape, in_st.dtype) + + analysis = ( + jax.jit(flax_model_apply_fn).lower(input_placeholder).cost_analysis() + ) + + flops = analysis['flops'] + if fuse_multiply_add: + flops = flops / 2 + logging.info('GFLOPs %0.3f for input spec: %s', flops / 10**9, input_spec) + return flops + + +def initialize_model( + *, + model_def: nn.Module, + input_spec: Mapping[str, Tuple[Tuple[int, ...], jnp.dtype]], + config: ml_collections.ConfigDict, + rngs: Union[jnp.ndarray, Mapping[str, jnp.ndarray]], +) -> Tuple[PyTree, PyTree, int, Optional[float]]: + """Initializes parameters and model state. + + This function is branched from scenic/train_lib_deprecated/train_utils.py. + The difference is that here the input_spec is a dictionary while it is a + sequence in the original implementation. + + Args: + model_def: Definition of a model. + input_spec: An mapping of modality name to (shape, dtype) pairs specifying + the shape and dtype of the inputs. + config: Configurations of the initialization. + rngs: Jax rng keys. + + Returns: + Initial params, initial model_state, and number of trainable_params. + """ + batch_size = (config.batch_size // + jax.device_count()) if config.get('batch_size') else None + input_placeholder = {} + for modality_name, spec in input_spec.items(): + in_st = debug_utils.input_spec_to_jax_shape_dtype_struct( + spec, batch_size=batch_size) + input_placeholder[modality_name] = jnp.zeros(in_st.shape, in_st.dtype) + + # We want all parameters to be created in host RAM, not on any device, they'll + # be sent there later as needed, otherwise we already encountered two + # situations where we allocate them twice. + @functools.partial(jax.jit, backend='cpu') + def _initialize_model(rngs): + """Initialization function to be jitted.""" + init_model_state, init_params = flax.core.pop( + model_def.init(rngs, input_placeholder, train=False, debug=False), + 'params', + ) + # Set bias in the head to low value, such that loss is small initially. + if config.get('init_head_bias', None) is not None: + init_params = flax.core.unfreeze(init_params) + init_params['output_projection'] = optimizers.tree_map_with_names( + lambda p: jnp.full_like(p, config.init_head_bias), + init_params['output_projection'], + match_name_fn=lambda name: 'bias' in name) + init_params = flax.core.freeze(init_params) + return init_params, init_model_state + + if not isinstance(rngs, dict): + rngs = {'params': rngs} + init_params, init_model_state = _initialize_model(rngs) + # Pop out params rng: + rngs.pop('params') + + # Count number of trainable parameters: + num_trainable_params = debug_utils.log_param_shapes(init_params) + + # Count gflops: + count_flops = config.get('count_flops', + ml_collections.ConfigDict({'count_flops': True})) + if count_flops: + variables = {'params': init_params, **init_model_state} + flops = compute_flops( + flax_model_apply_fn=functools.partial( + model_def.apply, variables, train=False, debug=False, rngs=rngs), + input_spec=count_flops.get('input_spec', input_spec), + fuse_multiply_add=count_flops.get('fuse_multiply_add', True)) + gflops = flops / (10**9) + else: + gflops = None + + return init_params, init_model_state, num_trainable_params, gflops diff --git a/scenic/projects/mbt/trainer.py b/scenic/projects/mbt/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..5ddd75890f79ba36223a4c0d95af5e384cacf0e9 --- /dev/null +++ b/scenic/projects/mbt/trainer.py @@ -0,0 +1,725 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script for MBT.""" + +import copy +import functools +from typing import Any, Callable, Dict, Optional, Tuple, Union + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.projects.mbt import train_utils as mbt_train_utils +from scenic.projects.vivit import evaluation_lib +from scenic.projects.vivit import train_utils as vivit_train_utils +from scenic.train_lib_deprecated import lr_schedules +from scenic.train_lib_deprecated import optimizers +from scenic.train_lib_deprecated import pretrain_utils +from scenic.train_lib_deprecated import train_utils + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] + + +def mixup_modalities(batch: Dict['str', Any], + alpha: float = 1.0, + batch_first: bool = True, + mixmod: bool = False, + rng: Optional[Any] = None) -> Dict['str', jnp.ndarray]: + """Mixes multimodal inputs and labels within a single batch. + + For more details, please see https://arxiv.org/abs/1710.09412. + + This function supports both using `numpy` to do mixup in the input-pipeline + and `jax.numpy` to do mixup within a jitted/pmapped function (e.g. within + a pmapped train step to apply mixup on device patch). + + Results in a batch with: + mixed_inputs[idx] = weight * inputs[idx] + (1-weight) * inputs[-(idx+1)], + where weight is sampled from a beta distribution with parameter alpha. + + Args: + batch: dict; A batch of data with 'inputs' and 'label'. batch['inputs'] has + field like 'rgb' or 'spectrogram'. + alpha: float; Used to control the beta distribution that weight is sampled + from. + batch_first: bool; Batch is the first dimension or the last dimension. + mixmod: bool; If True, applies mixup to each modality separately. + rng: JAX rng key. If given, JAX numpy will be used as the backend, and if + None (default value), normal numpy will be used. + + Returns: + Tuple (mixed_images, mixed_labels). + """ + inputs, labels = batch['inputs'], batch['label'] + batch['label'] = {} + num_modalities = len(inputs) + + if labels.shape[-1] == 1: + raise ValueError('Mixup requires one-hot targets.') + + batch_size = labels.shape[0] + + # Setup the the numpy backend and prepare mixup weights. + if rng is None: + np_backend = np # Ordinary numpy + if mixmod: + weights = list(np_backend.random.beta(alpha, alpha, size=num_modalities)) + else: + weights = [np_backend.random.beta(alpha, alpha)] * num_modalities + else: + np_backend = jnp # JAX numpy + if mixmod: + weights = list(jax.random.beta(rng, alpha, alpha, shape=[num_modalities])) + else: + weights = [jax.random.beta(rng, alpha, alpha)] * num_modalities + for i in range(num_modalities): + weights[i] *= np_backend.ones((batch_size, 1)) + + # Mixup inputs. + # Shape calculations use np to avoid device memory fragmentation: + for modality, values in inputs.items(): + weight = weights[len(batch['label'])] + # Mixup labels. + batch['label'][modality] = weight * labels + (1.0 - weight) * labels[::-1] + weight_shape = np.ones((values.ndim)) + if batch_first: + weight_shape[0] = batch_size + else: + weight_shape[-1] = batch_size + weight = np_backend.reshape(weight, + weight_shape.astype(np_backend.int32)) + reverse = [] + for i in range(values.ndim): + if (i == 0 and batch_first) or (i == values.ndim - 1 and not batch_first): + reverse.append(slice(-1, None, -1)) + else: + reverse.append(slice(values.shape[i])) + batch['inputs'][modality] = (weight * values + + (1.0 - weight) * values[tuple(reverse)]) + if num_modalities == 1 or not mixmod: + batch['label']['all'] = weights[0] * labels + (1.0 - + weights[0]) * labels[::-1] + + return batch + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + learning_rate_fn: Callable[[int], float], + loss_fn: LossFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], float]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + learning_rate_fn: learning rate scheduler which give the global_step + generates the learning rate. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configuration of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, computed metrics, and learning rate for logging. + """ + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + image_format = config.mixup.get('image_format', 'NTHWC') + batch_first = True + if image_format.index('N') > 0: + batch_first = False + batch = mixup_modalities( + batch, + config.mixup.alpha, + batch_first, + mixmod=config.get('mixmod', False), + rng=mixup_rng) + else: + # No mixup is applied, all modalities share the same labels. + labels = batch['label'] + batch['label'] = {} # pytype: disable=container-type-mismatch # jax-ndarray + for modality in batch['inputs']: + batch['label'][modality] = labels + batch['label']['all'] = labels + + # Bind the rng to the host/device we are on for dropout. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + logits, new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params']) + return loss, (new_model_state, logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + step = train_state.global_step + lr = learning_rate_fn(step) + (train_cost, + (new_model_state, + logits)), grad = compute_gradient_fn(train_state.optimizer.target) + + if config.get('max_grad_norm', None) is not None: + grad = clip_grads(grad, config.max_grad_norm) + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + new_optimizer = train_state.optimizer.apply_gradient(grad, learning_rate=lr) + + # Explicit weight decay, if necessary. + if config.get('explicit_weight_decay', None) is not None: + new_optimizer = new_optimizer.replace( + target=optimizers.tree_map_with_names( + functools.partial( + optimizers.decay_weight_fn, + lr=lr, + decay=config.explicit_weight_decay), + new_optimizer.target, + match_name_fn=lambda name: 'kernel' in name)) + + if isinstance(logits, dict): + # We use the first retrieved logits to report training metrics. + modality = list(logits.keys())[0] + batch['label'] = batch['label'][modality] + metrics = metrics_fn(logits[modality], batch) + else: + metrics = metrics_fn(logits, batch) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=step + 1, + optimizer=new_optimizer, + model_state=new_model_state, + rng=new_rng) + return new_train_state, metrics, lr + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + return_logits_and_labels: bool = False, + debug: Optional[bool] = False +) -> Union[Tuple[Dict[str, Tuple[float, int]], jnp.ndarray, jnp.ndarray], Dict[ + str, Tuple[float, int]]]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + return_logits_and_labels: Whether to return logits and labels or not. + debug: Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics [and optionally logits]. + """ + variables = { + 'params': train_state.optimizer.target, + **train_state.model_state + } + logits = flax_model.apply( + variables, + batch['inputs'], + train=False, mutable=False, debug=debug) + + metrics = metrics_fn(logits, batch) + if return_logits_and_labels: + logits = jax.lax.all_gather(logits, 'batch') + labels = jax.lax.all_gather(batch['label'], 'batch') + return metrics, logits, labels + return metrics + + +def test_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + n_clips: int = 2, + return_logits_and_labels: bool = False, + softmax_logits: bool = False, + debug: bool = False, +) -> Union[ + Dict[str, Tuple[float, int]], + Tuple[Dict[str, Tuple[float, int]], jnp.ndarray, jnp.ndarray], +]: + """Runs a single step of testing. + + For multi-crop testing, we assume that num_crops consecutive entries in the + batch are from the same example. And we average the logits over these examples + + We assume that the batch contains different crops of the same original + example. Therefore, we can average all the logits of it. + This assumption is true when local_batch_size = num_local_devices + + Args: + train_state: The state of training including the current + global_step, model_state, rng, and optimizer, and other metadata. + batch: Dictionary with keys 'inputs', 'labels', 'batch_mask'. We assume that + all the inputs correspond to the same original example in the test set. + The input shapes to this function are batch['inputs'] = [num_crops, t, h, + w, c] batch['labels'] = [num_crops, num_classes] However, for + classification, the labels for all the crops are the same. + batch['batch_mask'] = [num_crops] + flax_model: A Flax model. + metrics_fn: Metrics function for the model. + n_clips: The number of clips to process at a time by each device. Set + due to memory constraints. + return_logits_and_labels: Whether return logits of the model or not. + softmax_logits: Whether to softmax-normalise the logits before + averaging + debug: Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics [and optionally averaged logits that are of + shape `[1, num_classes]`]. + """ + + all_logits = jnp.zeros(batch['label'].shape[1]) + assert len(batch['batch_mask'].shape) == 1, ( + 'Spatial padding is not supported in multi-crop evaluation.') + + variables = { + 'params': train_state.optimizer.target, + **train_state.model_state + } + for modality in batch['inputs']: + num_crops = batch['inputs'][modality].shape[0] + for idx in range(0, num_crops, n_clips): + current_input = {} + for modality in batch['inputs']: + current_input[modality] = batch['inputs'][modality][idx:idx + n_clips] + logits = flax_model.apply( + variables, current_input, train=False, mutable=False, debug=debug) + + if softmax_logits: + logits = nn.softmax(logits, axis=-1) + logits = jnp.sum(logits, axis=0) + all_logits = all_logits + logits + + all_logits = all_logits / num_crops + all_logits = jnp.expand_dims(all_logits, axis=0) + batch['label'] = jnp.expand_dims(batch['label'][0], axis=0) + batch['batch_mask'] = jnp.expand_dims(batch['batch_mask'][0], axis=0) + metrics = metrics_fn(all_logits, batch) + if return_logits_and_labels: + all_logits = jax.lax.all_gather(all_logits, 'batch') + labels = jax.lax.all_gather(batch['label'], 'batch') + return metrics, all_logits, labels + return metrics + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_state that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + is_multilabel_model = (config.model_name == 'mbt_multilabel_classification') + + # Initialize model. + rng, init_rng = jax.random.split(rng) + input_shapes = dataset.meta_data['input_shape'] + input_dtype = dataset.meta_data.get('input_dtype', jnp.float32) + if isinstance(input_shapes, dict): + input_spec = { + modality: (input_shapes[modality], input_dtype) + for modality in input_shapes + } + else: + input_spec = [(input_shapes, input_dtype)] + (params, model_state, num_trainable_params, + gflops) = mbt_train_utils.initialize_model( + model_def=model.flax_model, + input_spec=input_spec, + config=config, + rngs=init_rng) + + # Create optimizer. + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + optimizer = jax.jit( + optimizers.get_optimizer(config).create, backend='cpu')( + params) + rng, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + optimizer=optimizer, + model_state=model_state, + rng=train_rng, + accum_train_time=0) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + checkpoint_format = config.init_from.get('checkpoint_format', 'scenic') + if checkpoint_format == 'scenic': + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + elif checkpoint_format == 'big_vision': + restored_train_state = pretrain_utils.convert_big_vision_to_scenic_checkpoint( + init_checkpoint_path, train_state) + # Config dict in big_vision is not the same format as scenic. + # Therefore, make sure config match the config of the loaded model! + restored_model_cfg = copy.deepcopy(config) + # The following is needed when the restored and target models used a + # different classifier. As big_vision uses a different config dict, we + # have to specify this manually. + restored_model_cfg.model.classifier = config.init_from.get( + 'classifier_type', 'token') + + train_state = model.init_from_train_state( + train_state, restored_train_state, restored_model_cfg, + restore_output_proj=config.init_from.get('restore_output_proj', False)) + # Free unnecessary memory. + del restored_train_state + elif start_step == 0: + logging.info('Training completely from scratch.' + 'Not restoring from any checkpoint.') + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + # Get learning rate scheduler. + learning_rate_fn = lr_schedules.get_learning_rate_fn(config) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + learning_rate_fn=learning_rate_fn, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + return_logits_and_labels=is_multilabel_model, + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + log_test_steps = 0 + if config.dataset_configs.get('do_multicrop_test'): + log_test_steps = int(steps_per_epoch * + config.dataset_configs.log_test_epochs) + + test_step_pmapped = jax.pmap( + functools.partial( + test_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('test'), + n_clips=config.get('multicrop_clips_per_device', 2), + return_logits_and_labels=is_multilabel_model, + debug=config.debug_eval), + axis_name='batch', + # We can donate the test_batch's buffer. + donate_argnums=(1,), + ) + + assert config.dataset_configs.test_batch_size == jax.local_device_count(), ( + 'The per-host batch size must be equal to the number of local devices.' + 'This ensures that each TPU device is processing different views of' + 'the same original video.') + + total_test_steps = int( + np.ceil(dataset.meta_data['num_test_examples'] / + (config.get('dataset_configs.test_batch_size') * + config.get('dataset_configs.num_test_clips') * + jax.process_count()))) + steps_per_test = config.get('steps_per_test') or total_test_steps + + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono = train_utils.Chrono( + first_step=start_step, + total_steps=total_steps, + steps_per_epoch=steps_per_epoch, + global_bs=config.batch_size, + accum_train_time=int(jax_utils.unreplicate(train_state.accum_train_time))) + + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, lr = train_step_pmapped(train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + extra_training_logs.append({'learning_rate': lr}) + + for h in hooks: + h(step) + + chrono.pause() # Below are once-in-a-while ops -> pause. + ###################### LOG TRAIN SUMMARY ######################## + if (step % log_summary_steps == 1) or (step == total_steps): + if lead_host: + chrono.tick(step, writer=writer) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, extra_training_logs), + writer=writer, + key_separator='/') + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + + ################### EVALUATION ################################ + if (step % log_eval_steps == 1) or (step == total_steps): + with report_progress.timed('eval'): + eval_metrics = [] + additional_summary = None + if is_multilabel_model: + eval_logits = [] + eval_labels = [] + n_classes = dataset.meta_data['num_classes'] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + for _ in range(steps_per_eval): + eval_batch = next(dataset.valid_iter) + e_metrics = eval_step_pmapped(train_state, eval_batch) + if is_multilabel_model: + e_metrics, logits_batch, labels_batch = e_metrics + eval_logits.append(vivit_train_utils.to_cpu(logits_batch)) + eval_labels.append(vivit_train_utils.to_cpu(labels_batch)) + # Fetch e_metrics to host and store. + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + if is_multilabel_model: + additional_summary = evaluation_lib.compute_mean_average_precision( + np.concatenate(eval_logits, axis=0), + np.concatenate(eval_labels, axis=0), + return_per_class_ap=n_classes < 10) + # Log eval summary. + eval_summary = train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + extra_eval_summary=additional_summary, + writer=writer, + key_separator='/') + writer.flush() + del eval_metrics + ##################### CHECKPOINTING ########################### + if ((step % checkpoint_steps == 0 and step > 0) or (step == total_steps) or + (step % log_eval_steps == 1)) and config.checkpoint: + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + train_state.replace( # pytype: disable=attribute-error + accum_train_time=chrono.accum_train_time) + train_utils.save_checkpoint(workdir, train_state) + + ############# MULTICROP TESTING ############################ + if (config.dataset_configs.get('do_multicrop_test') and + ((step % log_test_steps == 1 and step > 1) or step == total_steps)): + with report_progress.timed('test'): + test_metrics = [] + additional_summary = None + if is_multilabel_model: + test_logits = [] + test_labels = [] + n_classes = dataset.meta_data['num_classes'] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + + # At the end of training, evaluate on the whole test set. + if step == total_steps: + steps_per_test = total_test_steps + + logging.info('Starting multicrop test') + for _ in range(steps_per_test): + test_batch = next(dataset.test_iter) + t_metrics = test_step_pmapped(train_state, test_batch) + if is_multilabel_model: + t_metrics, logits_batch, labels_batch = t_metrics + test_logits.append(vivit_train_utils.to_cpu(logits_batch)) + test_labels.append(vivit_train_utils.to_cpu(labels_batch)) + # Fetch t_metrics to host and store. + test_metrics.append(train_utils.unreplicate_and_get(t_metrics)) + if is_multilabel_model: + # Note that this is the Mean AP computed from the examples processed + # by a single host. + additional_summary = evaluation_lib.compute_mean_average_precision( + np.concatenate(test_logits, axis=0), + np.concatenate(test_labels, axis=0), + return_per_class_ap=n_classes < 10) + # Log eval summary. + train_utils.log_eval_summary( + step=step, + eval_metrics=test_metrics, + writer=writer, + extra_eval_summary=additional_summary, + prefix='test', + key_separator='/') + logging.info('Completed multicrop test') + writer.flush() + # Free up some space. + del test_metrics + + chrono.resume() # un-pause now + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/mtv/README.md b/scenic/projects/mtv/README.md new file mode 100644 index 0000000000000000000000000000000000000000..86ef852a4a6e3e2fdcdfa792f2a9ce03d0488f94 --- /dev/null +++ b/scenic/projects/mtv/README.md @@ -0,0 +1,65 @@ +# Multiview Transformers for Video Recognition (MTV) + + + +MTV consists of separate encoders to represent different views of the input +video with lateral connections and a global encoder to fuse information +across views. Details can be found in the [paper](https://arxiv.org/abs/2201.04288). + +## Getting Started +The following command will install the required packages for MTV: +```shell +$ pip install -r scenic/projects/mtv/requirements.txt +``` + +## Training a MTV Model + +#### Datasets + +Data-loaders for popular academic datasets including Kinetics, Moments in Time, +Epic Kitchens and Something-Something v2 are included in Scenic. +To pre-process these datasets, follow the same steps as ViViT outlined [here](https://github.com/google-research/scenic/blob/main/scenic/projects/vivit/data/data.md). + +#### Training +MTV models and training jobs are defined by [configuration files](configs). + +To train a model, please download a pretrained ViT image model trained using +[Scenic](https://github.com/google-research/scenic/tree/main/scenic/projects/baselines) +or the [original implementation](https://github.com/google-research/vision_transformer). + +An example command-line to train a MTV-B model with cross view attention on +Kinetics using this [config file](configs/kinetics/k400_mtv_b2_cva.py) +is + +```shell +$ python -m scenic.projects.mtv.main \ + --config=scenic/projects/mtv/configs/kinetics/k400_mtv_b2_cva.py \ + --workdir=mtv_base_cva/ +``` + +## Model Zoo + +The following table contains pretrained MTV models trained on various datasets. +Checkpoints are provided as Scenic checkpoints compatible with +[Flax](https://github.com/google/flax). + +Accuracy is reported from "multi-view evaluation", as common in the literature. +In the table below, `x * y` denotes `x` temporal views, and `y` spatial views. +All the models below take in 32 frames as input. + + +| Model | Dataset | Top 1 Accuracy | Views | Config | Checkpoint | +|:------------:|:-----------:|:------------:|:---:|:----------------------------------------------------------------------------------------------------------------:|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| MTV-B | Kinetics 400 | 81.8 | 4x3 | [config](configs/kinetics/k400_mtv_b2_cva.py) | [Checkpoint](https://storage.googleapis.com/scenic-bucket/mtv/mtv_b_k400) | +| MTV-B | Kinetics 600 | 83.8 | 4x3 | [config](configs/kinetics/k600_mtv_b2_cva.py) | [Checkpoint](https://storage.googleapis.com/scenic-bucket/mtv/mtv_b_k600) | +| MTV-B | Kinetics 700 | 73.5 | 4x3 | [config](configs/kinetics/k700_mtv_b2_cva.py) | [Checkpoint](https://storage.googleapis.com/scenic-bucket/mtv/mtv_b_k700) | +| MTV-B | Epic-Kitchens 100 (finetuned from Kinetics 400) | 46.7 (Action) | 4x1 | [config](configs/epic_kitchens/epic_mtv_b2_cva.py) | [Checkpoint](https://storage.googleapis.com/scenic-bucket/mtv/mtv_b_ek_k400) | +| MTV-B | Epic-Kitchens 100 (finetuned from Kinetics 700) | 48.0 (Action) | 4x1 | [config](configs/epic_kitchens/epic_mtv_b2_cva.py) | [Checkpoint](https://storage.googleapis.com/scenic-bucket/mtv/mtv_b_ek_k700) | +| MTV-L | Kinetics 600 | 84.4 | 4x3 | [config](configs/kinetics/k600_mtv_l2_cva.py) | [Checkpoint](https://storage.googleapis.com/scenic-bucket/mtv/mtv_l_k600) | +| MTV-L | Kinetics 700 | 75.2 | 4x3 | [config](configs/kinetics/k700_mtv_l2_cva.py) | [Checkpoint](https://storage.googleapis.com/scenic-bucket/mtv/mtv_l_k700) | +| MTV-L | Moments in Time | 42.5 | 1x3 | [config](configs/mit/mit_mtv_l2_cva.py) | [Checkpoint](https://storage.googleapis.com/scenic-bucket/mtv/mtv_l_mit) | + + +## Questions + +For any questions, contact xxman@google.com or shawnyanyuv@gmail.com. diff --git a/scenic/projects/mtv/__init__.py b/scenic/projects/mtv/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/mtv/config_utils.py b/scenic/projects/mtv/config_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..0fa9b11da73944086bc5955651fdf4ea3c7508d9 --- /dev/null +++ b/scenic/projects/mtv/config_utils.py @@ -0,0 +1,76 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Contains config utility functions.""" + +from typing import List + +import ml_collections + +MODEL_SIZE_ORDER = ['Ti', 'S', 'B', 'L', 'H'] +HIDDEN_SIZES = {'Ti': 192, 'S': 384, 'B': 768, 'L': 1024, 'H': 1280} +MLP_DIMS = {'Ti': 768, 'S': 1536, 'B': 3072, 'L': 4096, 'H': 5120} +NUM_HEADS = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16} +NUM_LAYERS = {'Ti': 12, 'S': 12, 'B': 12, 'L': 24, 'H': 32} +# Default patch sizes and they can be overridden by the config. +PATCH_SIZES = { + 'Ti': (16, 16), + 'S': (16, 16), + 'B': (16, 16), + 'L': (16, 16), + 'H': (14, 14), +} + + +def parse_view_configs(variant: str) -> List[ml_collections.ConfigDict]: + """Parse per-view model configs from an encoded text. + + Each view is encoded in the format of 'vit_version/HxWxT' where H, W, and T + are the height, width, and temporal dimension of the tubelets, respectively. + H and W are optional and they are set to 16 for Tiny, Small, Base, and + Large models and 14 to Huge model by default. + + We use '+' to put views together. For example, 'S/8+B/4+L/2' is a three-view + model composed of a Vit-S (tubelet size=[16, 16, 8]), a ViT-B (tubelet + size=[16, 16, 4]), and a ViT-L (tubelet size=[16, 16, 2]). + + Args: + variant: a str encoding the model structure. + + Returns: + a list of per-view model configs. + """ + view_configs = [] + views = variant.split('+') + for view_variant in views: + version, tubelet_size = view_variant.split('/') + shape = tubelet_size.split('x') + view_config = ml_collections.ConfigDict() + view_config.hidden_size = HIDDEN_SIZES[version] + view_config.patches = ml_collections.ConfigDict() + view_config.num_heads = NUM_HEADS[version] + view_config.mlp_dim = MLP_DIMS[version] + view_config.num_layers = NUM_LAYERS[version] + if len(shape) == 1: + num_frames = int(shape[0]) + view_config.patches.size = PATCH_SIZES[version] + (num_frames,) + elif len(shape) == 2: + view_config.patches.size = (int(shape[0]), int(shape[0]), int(shape[1])) + elif len(shape) == 3: + view_config.patches.size = (int(shape[0]), int(shape[1]), int(shape[2])) + else: + raise ValueError(f'Model variant {variant} is invalid.') + + view_configs.append(view_config) + return view_configs diff --git a/scenic/projects/mtv/config_utils_test.py b/scenic/projects/mtv/config_utils_test.py new file mode 100644 index 0000000000000000000000000000000000000000..4e061999049b87a1ab328b21d19869c830ed8eed --- /dev/null +++ b/scenic/projects/mtv/config_utils_test.py @@ -0,0 +1,88 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for config_utils.""" +from absl.testing import parameterized + + +from scenic.projects.mtv import config_utils +import tensorflow as tf + + +class ConfigUtilsTest(tf.test.TestCase, parameterized.TestCase): + + @parameterized.parameters( + ('B/2', (16, 16, 2)), + ('B/18x2', (18, 18, 2)), + ('B/18x18x2', (18, 18, 2)), + ) + def test_parse_view_configs_one_view(self, variant, expected_patch_size): + view_configs = config_utils.parse_view_configs(variant) + self.assertLen(view_configs, 1) + self.assertDictEqual( + view_configs[0].to_dict(), { + 'hidden_size': 768, + 'num_heads': 12, + 'mlp_dim': 3072, + 'num_layers': 12, + 'patches': { + 'size': expected_patch_size + }, + }) + + @parameterized.parameters( + ('S/8+B/4+H/2', (16, 16, 8), (16, 16, 4), (14, 14, 2)), + ('S/14x8+B/12x4+H/18x2', (14, 14, 8), (12, 12, 4), (18, 18, 2)), + ('S/14x14x8+B/12x12x4+H/18x18x2', (14, 14, 8), (12, 12, 4), (18, 18, 2)), + ) + def test_parse_view_configs_threeview(self, variant, + expected_patch_size_view0, + expected_patch_size_view1, + expected_patch_size_view2): + view_configs = config_utils.parse_view_configs(variant) + self.assertLen(view_configs, 3) + self.assertDictEqual( + view_configs[0].to_dict(), { + 'hidden_size': 384, + 'num_heads': 6, + 'mlp_dim': 1536, + 'num_layers': 12, + 'patches': { + 'size': expected_patch_size_view0 + }, + }) + self.assertDictEqual( + view_configs[1].to_dict(), { + 'hidden_size': 768, + 'num_heads': 12, + 'mlp_dim': 3072, + 'num_layers': 12, + 'patches': { + 'size': expected_patch_size_view1 + }, + }) + self.assertDictEqual( + view_configs[2].to_dict(), { + 'hidden_size': 1280, + 'num_heads': 16, + 'mlp_dim': 5120, + 'num_layers': 32, + 'patches': { + 'size': expected_patch_size_view2 + }, + }) + + +if __name__ == '__main__': + tf.test.main() diff --git a/scenic/projects/mtv/configs/__init__.py b/scenic/projects/mtv/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/mtv/configs/epic_kitchens/__init__.py b/scenic/projects/mtv/configs/epic_kitchens/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/mtv/configs/epic_kitchens/epic_mtv_b2_cva.py b/scenic/projects/mtv/configs/epic_kitchens/epic_mtv_b2_cva.py new file mode 100644 index 0000000000000000000000000000000000000000..6ed937e7a9ad817d0796e93f238dfbe248617aa2 --- /dev/null +++ b/scenic/projects/mtv/configs/epic_kitchens/epic_mtv_b2_cva.py @@ -0,0 +1,145 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Configs for finetuning a MTV B/2 model on Epic-Kitchens. + +""" + +import ml_collections +from scenic.projects.mtv import config_utils + +EPIC_TRAIN_SIZE = 67217 +EPIC_VALID_SIZE = 9668 +MODEL_VARIANT = 'Ti/8+S/4+B/2' + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = f'epic_mtv_{MODEL_VARIANT}' + + # Dataset. + config.dataset_name = 'video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.base_dir = ( + '/path/to/dataset') + config.dataset_configs.tables = { + 'train': 'train.tfrecord@1024', + 'validation': 'validation.tfrecord@1024', + 'test': 'test.tfrecord@1024' + } + config.dataset_configs.examples_per_subset = { + 'train': EPIC_TRAIN_SIZE, + 'validation': EPIC_VALID_SIZE, + 'test': EPIC_VALID_SIZE + } + config.dataset_configs.num_frames = 64 + config.dataset_configs.stride = 1 + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.class_splits = [300, 97] + config.dataset_configs.split_names = ['noun', 'verb'] + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + config.data_dtype_str = 'float32' + + # Multicrop eval settings + config.dataset_configs.test_on_val = True + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.do_three_spatial_crops = False # Do during training. + config.dataset_configs.log_test_epochs = 10 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size + config.dataset_configs.num_test_clips = 4 + config.dataset_configs.test_batch_size = 8 # Needs to be num_local_devices + config.multicrop_clips_per_device = 2 + + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = True + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + config.dataset_configs.augmentation_params.do_rand_augment = True + config.dataset_configs.augmentation_params.rand_augment_num_layers = 3 + config.dataset_configs.augmentation_params.rand_augment_magnitude = 10 + config.dataset_configs.prefetch_to_device = 2 + + # Model. + config.model_name = 'mtv_multihead_classification' + config.model = ml_collections.ConfigDict() + config.model.classifier = 'token' + config.model.dropout_rate = 0.0 + config.model.attention_dropout_rate = 0.0 + config.model.stochastic_depth = 0.1 + config.model.view_configs = config_utils.parse_view_configs(MODEL_VARIANT) + # config.model.cross_view_fusion = None + config.model.cross_view_fusion = ml_collections.ConfigDict({ + 'type': 'cross_view_attention', + 'fuse_in_descending_order': True, + 'use_query_config': True, + 'fusion_layers': (5, 11), + }) + config.model.global_encoder_config = ml_collections.ConfigDict({ + 'num_heads': 8, + 'mlp_dim': 3072, + 'num_layers': 12, + 'hidden_size': 768, + 'merge_axis': 'channel', + }) + config.model.temporal_encoding_config = ml_collections.ConfigDict({ + 'kernel_init_method': 'central_frame_initializer', + 'method': '3d_conv', + }) + + # Training + config.trainer_name = 'mtv_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.label_smoothing = 0.2 + config.num_training_epochs = 80 + config.batch_size = 128 + config.rng_seed = 0 + + config.init_from = ml_collections.ConfigDict() + # Use a pretrained MTV-B checkpoint + config.init_from.checkpoint_path = 'path_to_checkpoint' + config.init_from.model_type = 'mtv' + config.init_from.restore_positional_embedding = True + config.init_from.positional_embed_size_change = 'resize' + + # Learning rate + steps_per_epoch = EPIC_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 2.5 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 2e-1 + + # Logging + config.log_eval_steps = 3000 + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.checkpoint = True # do checkpointing + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + return config + + diff --git a/scenic/projects/mtv/configs/kinetics/__init__.py b/scenic/projects/mtv/configs/kinetics/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/mtv/configs/kinetics/k400_mtv_b2_cva.py b/scenic/projects/mtv/configs/kinetics/k400_mtv_b2_cva.py new file mode 100644 index 0000000000000000000000000000000000000000..d314a2d44e86049cdf3a1a195d8b60380936fdb6 --- /dev/null +++ b/scenic/projects/mtv/configs/kinetics/k400_mtv_b2_cva.py @@ -0,0 +1,162 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Configs for training a MTV(B/2) with CVA on Kinetics-400. + +""" + +import ml_collections +from scenic.projects.mtv import config_utils + +# Replace with the actual dataset size. +KINETICS_400_TRAIN_SIZE = 0 +KINETICS_400_VAL_SIZE = 0 +KINETICS_400_TEST_SIZE = 0 +MODEL_VARIANT = 'Ti/8+S/4+B/2' + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = f'k400_mtv_{MODEL_VARIANT}' + + # Dataset. + config.dataset_name = 'video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.base_dir = ( + '/path/to/dataset') + config.dataset_configs.tables = { + 'train': 'train.tfrecord@1024', + 'validation': 'validation.tfrecord@1024', + 'test': 'test.tfrecord@1024' + } + config.dataset_configs.examples_per_subset = { + 'train': KINETICS_400_TRAIN_SIZE, + 'validation': KINETICS_400_VAL_SIZE, + 'test': KINETICS_400_TEST_SIZE + } + config.dataset_configs.num_classes = 400 + config.data_dtype_str = 'float32' + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 2 + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + # Multicrop eval settings + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.do_three_spatial_crops = True # Do during training. + config.dataset_configs.log_test_epochs = 10 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size + config.dataset_configs.num_test_clips = 4 + config.dataset_configs.test_batch_size = 4 # Needs to be num_local_devices + config.multicrop_clips_per_device = 2 + + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = True + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + config.dataset_configs.prefetch_to_device = 2 + + # Model. + config.model_name = 'mtv_multiclass_classification' + config.model = ml_collections.ConfigDict() + config.model.classifier = 'token' + config.model.dropout_rate = 0.0 + config.model.attention_dropout_rate = 0.0 + config.model.stochastic_depth = 0.1 + config.model.view_configs = config_utils.parse_view_configs(MODEL_VARIANT) + config.model.cross_view_fusion = ml_collections.ConfigDict({ + 'type': 'cross_view_attention', + 'fuse_in_descending_order': True, + 'use_query_config': True, + 'fusion_layers': (5, 11), + }) + config.model.global_encoder_config = ml_collections.ConfigDict({ + 'num_heads': 8, + 'mlp_dim': 3072, + 'num_layers': 12, + 'hidden_size': 768, + 'merge_axis': 'channel', + }) + config.model.temporal_encoding_config = ml_collections.ConfigDict({ + 'kernel_init_method': 'central_frame_initializer', + 'method': '3d_conv', + }) + + # Training. + config.trainer_name = 'mtv_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.label_smoothing = None + config.num_training_epochs = 30 + config.batch_size = 64 + config.rng_seed = 0 + + config.init_from = ml_collections.ConfigDict() + config.init_from.model_cfg = [ + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ] + config.init_from.model_type = 'vit' + # Download pretrained ImageNet checkpoints from here: + # https://github.com/google-research/scenic/tree/main/scenic/projects/baselines (checkpoint_format = 'scenic') pylint: disable=line-too-long + # https://github.com/google-research/vision_transformer (checkpoint_format = 'big_vision') pylint: disable=line-too-long + config.init_from.checkpoint_path = [ + '/path/to/vit-tiny', + '/path/to/vit-small', + '/path/to/vit-base', + ] + config.init_from.checkpoint_formats = [ + 'big_vision', + 'big_vision', + 'big_vision', + ] + config.init_from.restore_positional_embedding = True + config.init_from.restore_input_embedding = True + config.init_from.positional_embed_size_change = 'tile' + + # Learning rate. + steps_per_epoch = KINETICS_400_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 2.5 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 1e-1 + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + diff --git a/scenic/projects/mtv/configs/kinetics/k600_mtv_b2_cva.py b/scenic/projects/mtv/configs/kinetics/k600_mtv_b2_cva.py new file mode 100644 index 0000000000000000000000000000000000000000..d4e5ffc39d6b4224b81424818144fecac65c3453 --- /dev/null +++ b/scenic/projects/mtv/configs/kinetics/k600_mtv_b2_cva.py @@ -0,0 +1,163 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Configs for training a MTV(B/2) with CVA on Kinetics-600. + +""" + +import ml_collections +from scenic.projects.mtv import config_utils + +# Replace with the actual dataset size. +KINETICS_600_TRAIN_SIZE = 0 +KINETICS_600_VAL_SIZE = 0 +KINETICS_600_TEST_SIZE = 0 +MODEL_VARIANT = 'Ti/8+S/4+B/2' + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = f'k600_mtv_{MODEL_VARIANT}' + + # Dataset. + config.dataset_name = 'video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.base_dir = ( + '/path/to/dataset') + config.dataset_configs.tables = { + 'train': 'train.tfrecord@1024', + 'validation': 'validation.tfrecord@1024', + 'test': 'test.tfrecord@1024' + } + config.dataset_configs.examples_per_subset = { + 'train': KINETICS_600_TRAIN_SIZE, + 'validation': KINETICS_600_VAL_SIZE, + 'test': KINETICS_600_TEST_SIZE + } + config.dataset_configs.num_classes = 600 + config.data_dtype_str = 'float32' + + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 2 + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + # Multicrop eval settings + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.do_three_spatial_crops = True # Do during training. + config.dataset_configs.log_test_epochs = 10 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size + config.dataset_configs.num_test_clips = 4 + config.dataset_configs.test_batch_size = 4 # Needs to be num_local_devices + config.multicrop_clips_per_device = 2 + + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = True + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + config.dataset_configs.prefetch_to_device = 2 + + # Model. + config.model_name = 'mtv_multiclass_classification' + config.model = ml_collections.ConfigDict() + config.model.classifier = 'token' + config.model.dropout_rate = 0.0 + config.model.attention_dropout_rate = 0.0 + config.model.stochastic_depth = 0.1 + config.model.view_configs = config_utils.parse_view_configs(MODEL_VARIANT) + config.model.cross_view_fusion = ml_collections.ConfigDict({ + 'type': 'cross_view_attention', + 'fuse_in_descending_order': True, + 'use_query_config': True, + 'fusion_layers': (5, 11), + }) + config.model.global_encoder_config = ml_collections.ConfigDict({ + 'num_heads': 8, + 'mlp_dim': 3072, + 'num_layers': 12, + 'hidden_size': 768, + 'merge_axis': 'channel', + }) + config.model.temporal_encoding_config = ml_collections.ConfigDict({ + 'kernel_init_method': 'central_frame_initializer', + 'method': '3d_conv', + }) + + # Training. + config.trainer_name = 'mtv_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.label_smoothing = None + config.num_training_epochs = 30 + config.batch_size = 64 + config.rng_seed = 0 + + config.init_from = ml_collections.ConfigDict() + config.init_from.model_cfg = [ + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ] + config.init_from.model_type = 'vit' + # Download pretrained ImageNet checkpoints from here: + # https://github.com/google-research/scenic/tree/main/scenic/projects/baselines (checkpoint_format = 'scenic') pylint: disable=line-too-long + # https://github.com/google-research/vision_transformer (checkpoint_format = 'big_vision') pylint: disable=line-too-long + config.init_from.checkpoint_path = [ + '/path/to/vit-tiny', + '/path/to/vit-small', + '/path/to/vit-base', + ] + config.init_from.checkpoint_formats = [ + 'big_vision', + 'big_vision', + 'big_vision', + ] + config.init_from.restore_positional_embedding = True + config.init_from.restore_input_embedding = True + config.init_from.positional_embed_size_change = 'tile' + + # Learning rate. + steps_per_epoch = KINETICS_600_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 2.5 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 2e-1 + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + diff --git a/scenic/projects/mtv/configs/kinetics/k600_mtv_l2_cva.py b/scenic/projects/mtv/configs/kinetics/k600_mtv_l2_cva.py new file mode 100644 index 0000000000000000000000000000000000000000..bfd72fcf6aaffab1e7b22551bdaf12cf5c9c5bcc --- /dev/null +++ b/scenic/projects/mtv/configs/kinetics/k600_mtv_l2_cva.py @@ -0,0 +1,172 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Configs for training a MTV(L/2) with CVA on Kinetics-600. + +""" + +import ml_collections +from scenic.projects.mtv import config_utils + +# Replace with the actual dataset size. +KINETICS_600_TRAIN_SIZE = 0 +KINETICS_600_VAL_SIZE = 0 +KINETICS_600_TEST_SIZE = 0 +MODEL_VARIANT = 'Ti/16+S/8+B/4+L/2' + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = f'k600_mtv_{MODEL_VARIANT}' + + # Dataset. + config.dataset_name = 'video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.base_dir = ( + '/path/to/dataset') + config.dataset_configs.tables = { + 'train': 'train.tfrecord@1024', + 'validation': 'validation.tfrecord@1024', + 'test': 'test.tfrecord@1024' + } + config.dataset_configs.examples_per_subset = { + 'train': KINETICS_600_TRAIN_SIZE, + 'validation': KINETICS_600_VAL_SIZE, + 'test': KINETICS_600_TEST_SIZE + } + config.dataset_configs.num_classes = 600 + + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 2 + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + # Multicrop eval settings + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.do_three_spatial_crops = True # Do during training. + config.dataset_configs.log_test_epochs = 10 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size + config.dataset_configs.num_test_clips = 4 + config.dataset_configs.test_batch_size = 4 # Needs to be num_local_devices + config.multicrop_clips_per_device = 2 + # Leaving this empty means that a full test is done each time. + # About 4200 / 4 = 1050 steps on a 4-host setting (ie 4x4 TPU) + # config.steps_per_test = 1000 # Number of test steps taken by each host. + + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = True + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + config.dataset_configs.prefetch_to_device = 2 + + # Model. + config.model_name = 'mtv_multiclass_classification' + config.model = ml_collections.ConfigDict() + config.model.classifier = 'token' + config.model.dropout_rate = 0.0 + config.model.attention_dropout_rate = 0.0 + config.model.stochastic_depth = 0.1 + config.model.view_configs = config_utils.parse_view_configs(MODEL_VARIANT) + config.model.cross_view_fusion = ml_collections.ConfigDict({ + 'type': 'cross_view_attention', + 'fuse_in_descending_order': True, + 'use_query_config': True, + 'fusion_layers': (11, 23), + }) + config.model.global_encoder_config = ml_collections.ConfigDict({ + 'num_heads': 8, + 'mlp_dim': 3072, + 'num_layers': 12, + 'hidden_size': 768, + 'merge_axis': 'channel', + }) + config.model.temporal_encoding_config = ml_collections.ConfigDict({ + 'kernel_init_method': 'central_frame_initializer', + 'method': '3d_conv', + }) + + # Training. + config.trainer_name = 'mtv_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.label_smoothing = None + config.num_training_epochs = 30 + config.batch_size = 64 + config.rng_seed = 0 + + config.init_from = ml_collections.ConfigDict() + config.init_from.model_cfg = [ + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ] + config.init_from.model_type = 'vit' + # Download pretrained ImageNet checkpoints from here: + # https://github.com/google-research/scenic/tree/main/scenic/projects/baselines (checkpoint_format = 'scenic') pylint: disable=line-too-long + # https://github.com/google-research/vision_transformer (checkpoint_format = 'big_vision') pylint: disable=line-too-long + config.init_from.checkpoint_path = [ + '/path/to/vit-tiny', + '/path/to/vit-small', + '/path/to/vit-base', + '/path/to/vit-large', + ] + config.init_from.checkpoint_formats = [ + 'big_vision', + 'big_vision', + 'big_vision', + 'big_vision', + ] + config.init_from.restore_positional_embedding = True + config.init_from.restore_input_embedding = True + config.init_from.positional_embed_size_change = 'tile' + + # Learning rate. + steps_per_epoch = KINETICS_600_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 2.5 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 1e-1 + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + diff --git a/scenic/projects/mtv/configs/kinetics/k700_mtv_b2_cva.py b/scenic/projects/mtv/configs/kinetics/k700_mtv_b2_cva.py new file mode 100644 index 0000000000000000000000000000000000000000..23d824c9d384700ce5c243f13271f24d9fc130c3 --- /dev/null +++ b/scenic/projects/mtv/configs/kinetics/k700_mtv_b2_cva.py @@ -0,0 +1,166 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Configs for training a MTV(L/2) with CVA on Kinetics-700. + +""" + +import ml_collections +from scenic.projects.mtv import config_utils + +# Replace with the actual dataset size. +KINETICS_700_TRAIN_SIZE = 0 +KINETICS_700_VAL_SIZE = 0 +KINETICS_700_TEST_SIZE = 0 +MODEL_VARIANT = 'Ti/8+S/4+B/2' + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = f'k700_mtv_{MODEL_VARIANT}' + + # Dataset. + config.dataset_name = 'video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.base_dir = ( + '/path/to/dataset') + config.dataset_configs.tables = { + 'train': 'train.tfrecord@1024', + 'validation': 'validation.tfrecord@1024', + 'test': 'test.tfrecord@1024' + } + config.dataset_configs.examples_per_subset = { + 'train': KINETICS_700_TRAIN_SIZE, + 'validation': KINETICS_700_VAL_SIZE, + 'test': KINETICS_700_TEST_SIZE + } + config.dataset_configs.num_classes = 700 + + config.data_dtype_str = 'float32' + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 2 + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + # Multicrop eval settings + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.do_three_spatial_crops = True # Do during training. + config.dataset_configs.log_test_epochs = 10 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size + config.dataset_configs.num_test_clips = 4 + config.dataset_configs.test_batch_size = 4 # Needs to be num_local_devices + config.multicrop_clips_per_device = 2 + # Leaving this empty means that a full test is done each time. + # About 4200 / 4 = 1050 steps on a 4-host setting (ie 4x4 TPU) + # config.steps_per_test = 1000 # Number of test steps taken by each host. + + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = True + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + config.dataset_configs.prefetch_to_device = 2 + + # Model. + config.model_name = 'mtv_multiclass_classification' + config.model = ml_collections.ConfigDict() + config.model.classifier = 'token' + config.model.dropout_rate = 0.0 + config.model.attention_dropout_rate = 0.0 + config.model.stochastic_depth = 0.0 + config.model.view_configs = config_utils.parse_view_configs(MODEL_VARIANT) + config.model.cross_view_fusion = ml_collections.ConfigDict({ + 'type': 'cross_view_attention', + 'fuse_in_descending_order': True, + 'use_query_config': True, + 'fusion_layers': (5, 11), + }) + config.model.global_encoder_config = ml_collections.ConfigDict({ + 'num_heads': 8, + 'mlp_dim': 3072, + 'num_layers': 12, + 'hidden_size': 768, + 'merge_axis': 'channel', + }) + config.model.temporal_encoding_config = ml_collections.ConfigDict({ + 'kernel_init_method': 'central_frame_initializer', + 'method': '3d_conv', + }) + + # Training. + config.trainer_name = 'mtv_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.label_smoothing = None + config.num_training_epochs = 30 + config.batch_size = 64 + config.rng_seed = 0 + + config.init_from = ml_collections.ConfigDict() + config.init_from.model_cfg = [ + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ] + config.init_from.model_type = 'vit' + # Download pretrained ImageNet checkpoints from here: + # https://github.com/google-research/scenic/tree/main/scenic/projects/baselines (checkpoint_format = 'scenic') pylint: disable=line-too-long + # https://github.com/google-research/vision_transformer (checkpoint_format = 'big_vision') pylint: disable=line-too-long + config.init_from.checkpoint_path = [ + '/path/to/vit-tiny', + '/path/to/vit-small', + '/path/to/vit-base', + ] + config.init_from.checkpoint_formats = [ + 'big_vision', + 'big_vision', + 'big_vision', + ] + config.init_from.restore_positional_embedding = True + config.init_from.restore_input_embedding = True + config.init_from.positional_embed_size_change = 'tile' + + # Learning rate. + steps_per_epoch = KINETICS_700_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 2.5 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 1e-1 + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + diff --git a/scenic/projects/mtv/configs/kinetics/k700_mtv_l2_cva.py b/scenic/projects/mtv/configs/kinetics/k700_mtv_l2_cva.py new file mode 100644 index 0000000000000000000000000000000000000000..a4b045d3361f1ea43538b4e437aecf7d1b0804d3 --- /dev/null +++ b/scenic/projects/mtv/configs/kinetics/k700_mtv_l2_cva.py @@ -0,0 +1,168 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Configs for training a MTV(L/2) with CVA on Kinetics-700. + +""" + +import ml_collections +from scenic.projects.mtv import config_utils + +# Replace with the actual dataset size. +KINETICS_700_TRAIN_SIZE = 0 +KINETICS_700_VAL_SIZE = 0 +KINETICS_700_TEST_SIZE = 0 +MODEL_VARIANT = 'Ti/16+S/8+B/4+L/2' + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = f'k700_mtv_{MODEL_VARIANT}' + + # Dataset. + config.dataset_name = 'video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.base_dir = ( + '/path/to/dataset') + config.dataset_configs.tables = { + 'train': 'train.tfrecord@1024', + 'validation': 'validation.tfrecord@1024', + 'test': 'test.tfrecord@1024' + } + config.dataset_configs.examples_per_subset = { + 'train': KINETICS_700_TRAIN_SIZE, + 'validation': KINETICS_700_VAL_SIZE, + 'test': KINETICS_700_TEST_SIZE + } + config.dataset_configs.num_classes = 700 + + config.data_dtype_str = 'float32' + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 2 + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + # Multicrop eval settings + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.do_three_spatial_crops = True # Do during training. + config.dataset_configs.log_test_epochs = 10 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size + config.dataset_configs.num_test_clips = 4 + config.dataset_configs.test_batch_size = 4 # Needs to be num_local_devices + config.multicrop_clips_per_device = 2 + + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = True + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + config.dataset_configs.prefetch_to_device = 2 + + # Model. + config.model_name = 'mtv_multiclass_classification' + config.model = ml_collections.ConfigDict() + config.model.classifier = 'token' + config.model.dropout_rate = 0.0 + config.model.attention_dropout_rate = 0.0 + config.model.stochastic_depth = 0.1 + config.model.view_configs = config_utils.parse_view_configs(MODEL_VARIANT) + config.model.cross_view_fusion = ml_collections.ConfigDict({ + 'type': 'cross_view_attention', + 'fuse_in_descending_order': True, + 'use_query_config': True, + 'fusion_layers': (11, 23), + }) + config.model.global_encoder_config = ml_collections.ConfigDict({ + 'num_heads': 8, + 'mlp_dim': 3072, + 'num_layers': 12, + 'hidden_size': 768, + 'merge_axis': 'channel', + }) + config.model.temporal_encoding_config = ml_collections.ConfigDict({ + 'kernel_init_method': 'central_frame_initializer', + 'method': '3d_conv', + }) + + # Training. + config.trainer_name = 'mtv_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.label_smoothing = None + config.num_training_epochs = 30 + config.batch_size = 64 + config.rng_seed = 0 + + config.init_from = ml_collections.ConfigDict() + config.init_from.model_cfg = [ + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ml_collections.ConfigDict({'model': { + 'classifier': 'token' + }}), + ] + config.init_from.model_type = 'vit' + # Download pretrained ImageNet checkpoints from here: + # https://github.com/google-research/scenic/tree/main/scenic/projects/baselines (checkpoint_format = 'scenic') pylint: disable=line-too-long + # https://github.com/google-research/vision_transformer (checkpoint_format = 'big_vision') pylint: disable=line-too-long + config.init_from.checkpoint_path = [ + '/path/to/vit-tiny', + '/path/to/vit-small', + '/path/to/vit-base', + '/path/to/vit-large', + ] + config.init_from.checkpoint_formats = [ + 'big_vision', + 'big_vision', + 'big_vision', + 'big_vision', + ] + config.init_from.restore_positional_embedding = True + config.init_from.restore_input_embedding = True + config.init_from.positional_embed_size_change = 'tile' + + # Learning rate. + steps_per_epoch = KINETICS_700_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 2.5 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 1e-1 + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + diff --git a/scenic/projects/mtv/configs/mit/__init__.py b/scenic/projects/mtv/configs/mit/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/mtv/configs/mit/mit_mtv_l2_cva.py b/scenic/projects/mtv/configs/mit/mit_mtv_l2_cva.py new file mode 100644 index 0000000000000000000000000000000000000000..9598318acf9fc99a58589a4147d2915a80a722aa --- /dev/null +++ b/scenic/projects/mtv/configs/mit/mit_mtv_l2_cva.py @@ -0,0 +1,145 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Configs for finetuning a MTV B/2 model on Something Something V2. + +""" + +import ml_collections +from scenic.projects.mtv import config_utils + +MIT_TRAIN_SIZE = 791297 +MIT_VAL_SIZE = 33900 +MODEL_VARIANT = 'Ti/16+S/8+B/4+L/2' + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = f'mit_mtv_{MODEL_VARIANT}' + + # Dataset. + config.dataset_name = 'video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.base_dir = ( + '/path/to/dataset') + config.dataset_configs.tables = { + 'train': 'train.tfrecord@1024', + 'validation': 'validation.tfrecord@1024', + 'test': 'validation.tfrecord@1024' + } + config.dataset_configs.examples_per_subset = { + 'train': MIT_TRAIN_SIZE, + 'validation': MIT_VAL_SIZE, + 'test': MIT_VAL_SIZE + } + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 3 + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + config.data_dtype_str = 'float32' + + # Multicrop eval settings + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.do_three_spatial_crops = True # Do during training. + config.dataset_configs.log_test_epochs = 10 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size + config.dataset_configs.num_test_clips = 1 + config.dataset_configs.test_batch_size = 4 # Needs to be num_local_devices + config.multicrop_clips_per_device = 2 + + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = True + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + config.dataset_configs.augmentation_params.do_rand_augment = False + config.dataset_configs.prefetch_to_device = 2 + + # This does Mixup in the train loop. This is fast. But make sure that device + # batch size is more than 1. + config.mixup = ml_collections.ConfigDict() + config.mixup.alpha = 0.2 + + # Model. + config.model_name = 'mtv_multiclass_classification' + config.model = ml_collections.ConfigDict() + config.model.classifier = 'token' + config.model.dropout_rate = 0.0 + config.model.attention_dropout_rate = 0.0 + config.model.stochastic_depth = 0.1 + config.model.view_configs = config_utils.parse_view_configs(MODEL_VARIANT) + # config.model.cross_view_fusion = None + config.model.cross_view_fusion = ml_collections.ConfigDict({ + 'type': 'cross_view_attention', + 'fuse_in_descending_order': True, + 'use_query_config': True, + 'fusion_layers': (11, 23), + }) + config.model.global_encoder_config = ml_collections.ConfigDict({ + 'num_heads': 8, + 'mlp_dim': 3072, + 'num_layers': 12, + 'hidden_size': 768, + 'merge_axis': 'channel', + }) + config.model.temporal_encoding_config = ml_collections.ConfigDict({ + 'kernel_init_method': 'central_frame_initializer', + 'method': '3d_conv', + }) + + # Training + config.trainer_name = 'mtv_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.label_smoothing = None + config.num_training_epochs = 20 + config.batch_size = 256 + config.rng_seed = 0 + + config.init_from = ml_collections.ConfigDict() + # Use a pretrained MTV-L checkpoint + config.init_from.checkpoint_path = 'path_to_checkpoint' + config.init_from.model_type = 'mtv' + config.init_from.restore_positional_embedding = True + config.init_from.positional_embed_size_change = 'resize' + + # Learning rate + steps_per_epoch = MIT_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 2.5 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 2e-1 + + # Logging + config.log_eval_steps = 3000 + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.checkpoint = True # do checkpointing + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + return config + + diff --git a/scenic/projects/mtv/configs/ssv2/__init__.py b/scenic/projects/mtv/configs/ssv2/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/mtv/configs/ssv2/ssv2_mtv_b2_cva.py b/scenic/projects/mtv/configs/ssv2/ssv2_mtv_b2_cva.py new file mode 100644 index 0000000000000000000000000000000000000000..0771a1b5be76735cbe0814c56d84047df8cf81c9 --- /dev/null +++ b/scenic/projects/mtv/configs/ssv2/ssv2_mtv_b2_cva.py @@ -0,0 +1,146 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Configs for finetuning a MTV B/2 model on Something Something V2. + +""" + +import ml_collections +from scenic.projects.mtv import config_utils + +SSV2_TRAIN_SIZE = 168913 +SSV2_VAL_SIZE = 24777 +MODEL_VARIANT = 'Ti/8+S/4+B/2' + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = f'ssv2_mtv_{MODEL_VARIANT}' + + # Dataset. + config.dataset_name = 'video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.base_dir = ( + '/path/to/dataset') + config.dataset_configs.tables = { + 'train': 'something-something-v2-train.rgb.tfrecord@128', + 'validation': 'something-something-v2-validation.rgb.tfrecord@128', + 'test': 'something-something-v2-validation.rgb.tfrecord@128' + } + config.dataset_configs.examples_per_subset = { + 'train': SSV2_TRAIN_SIZE, + 'validation': SSV2_VAL_SIZE, + 'test': SSV2_VAL_SIZE + } + config.data_dtype_str = 'float32' + config.dataset_configs.num_frames = 48 + config.dataset_configs.stride = 1 + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + # Multicrop eval settings + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.do_three_spatial_crops = True # Do during training. + config.dataset_configs.log_test_epochs = 10 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size + config.dataset_configs.num_test_clips = 4 + config.dataset_configs.test_batch_size = 8 # Needs to be num_local_devices + config.multicrop_clips_per_device = 2 + + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = True + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + config.dataset_configs.augmentation_params.do_rand_augment = True + config.dataset_configs.augmentation_params.rand_augment_num_layers = 1 + config.dataset_configs.augmentation_params.rand_augment_magnitude = 15 + config.dataset_configs.prefetch_to_device = 2 + + # This does Mixup in the train loop. This is fast. But make sure that device + # batch size is more than 1. + config.mixup = ml_collections.ConfigDict() + config.mixup.alpha = 0.3 + + # Model. + config.model_name = 'mtv_multiclass_classification' + config.model = ml_collections.ConfigDict() + config.model.classifier = 'token' + config.model.dropout_rate = 0.0 + config.model.attention_dropout_rate = 0.0 + config.model.stochastic_depth = 0.1 + config.model.view_configs = config_utils.parse_view_configs(MODEL_VARIANT) + config.model.cross_view_fusion = ml_collections.ConfigDict({ + 'type': 'cross_view_attention', + 'fuse_in_descending_order': True, + 'use_query_config': True, + 'fusion_layers': (5, 11), + }) + config.model.global_encoder_config = ml_collections.ConfigDict({ + 'num_heads': 8, + 'mlp_dim': 3072, + 'num_layers': 12, + 'hidden_size': 768, + 'merge_axis': 'channel', + }) + config.model.temporal_encoding_config = ml_collections.ConfigDict({ + 'kernel_init_method': 'central_frame_initializer', + 'method': '3d_conv', + }) + + # Training + config.trainer_name = 'mtv_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.label_smoothing = 0.2 + config.num_training_epochs = 60 + config.batch_size = 256 + config.rng_seed = 0 + + config.init_from = ml_collections.ConfigDict() + # Use a pretrained MTV-B checkpoint + config.init_from.checkpoint_path = 'path_to_checkpoint' + config.init_from.model_type = 'mtv' + config.init_from.restore_positional_embedding = True + config.init_from.positional_embed_size_change = 'resize' + + # Learning rate + steps_per_epoch = SSV2_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 2.5 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 2e-1 + + # Logging + config.log_eval_steps = 3000 + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.checkpoint = True # do checkpointing + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + return config + + diff --git a/scenic/projects/mtv/main.py b/scenic/projects/mtv/main.py new file mode 100644 index 0000000000000000000000000000000000000000..6347191f6d01520e0790498c3f806919bdf51154 --- /dev/null +++ b/scenic/projects/mtv/main.py @@ -0,0 +1,58 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for MTV.""" + +from typing import Any, Callable + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.mtv import model as mtv_model +from scenic.projects.mtv import trainer as mtv_trainer +from scenic.train_lib import train_utils + +FLAGS = flags.FLAGS + + +def get_trainer(trainer_name: str) -> Callable[..., Any]: + """Returns trainer given its name.""" + if trainer_name == 'mtv_trainer': + return mtv_trainer.train + raise ValueError(f'Unsupported trainer: {trainer_name}.') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the ViViT project.""" + model_cls = mtv_model.get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + trainer = get_trainer(config.trainer_name) + + trainer( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/mtv/model.py b/scenic/projects/mtv/model.py new file mode 100644 index 0000000000000000000000000000000000000000..973772537f4d252f7a1170d6b68b82b23d20882c --- /dev/null +++ b/scenic/projects/mtv/model.py @@ -0,0 +1,794 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implements the MTV model.""" +import functools +from typing import Any, List, Sequence, Tuple, Union + +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.layers import attention_layers +from scenic.model_lib.layers import nn_layers +from scenic.projects.baselines import vit +from scenic.projects.mtv import model_utils +from scenic.projects.vivit import model as vivit_model +from scenic.train_lib import train_utils + +_DEFAULT_MTV_CONFIG = ml_collections.ConfigDict({ + 'dataset_configs': { + 'num_frames': 8, + }, + 'model': + dict( + view_configs=[ + ml_collections.ConfigDict({ + 'hidden_size': 16, + 'patches': { + 'size': (4, 4, 2) + }, + 'num_heads': 2, + 'mlp_dim': 32, + 'num_layers': 1, + }) + ], + cross_view_fusion=None, + temporal_encoding_config=ml_collections.ConfigDict({ + 'method': '3d_conv', + 'kernel_init_method': 'central_frame_initializer', + }), + global_encoder_config=ml_collections.ConfigDict({ + 'num_layers': 2, + 'mlp_dim': 8, + 'num_heads': 2, + 'hidden_size': 8, + }), + dropout_rate=0., + attention_dropout_rate=0., + classifier='token', + data_dtype_str='float32') +}) + + +def get_model_cls(model_name): + """"Selects MTV model type.""" + if model_name == 'mtv_multiclass_classification': + return MTVClassificationModel + elif model_name == 'mtv_multihead_classification': + return MTVMultiheadClassificationModel + else: + raise ValueError('Unrecognized model: {}'.format(model_name)) + + +class CrossViewAttentionEncoderBlock(nn.Module): + """Crossview Transformer encoder layer. + + The encoder architecture for each view is as follows: + Layer norm + cross attention (out projection weights are initialized with zeros) + residual connection + Layer norm + self attention (initialized with pretrained ViT weights) + residual connection + Layer norm + MLP (initialized with pretrained ViT weights) + residual connection + + We apply cross attention in a sequential fashion and limit it to only take + place in neighboring views. For example, view[i-1] is used as the query and + view[i] is used as key and value. This design is based on the assumption + that the tubelet sizes grow from 0th view to the nth view. We initialize cross + attention's weights with zeros and self attention and MLP weights are + initialized with pretrained ViTs. + + Attributes: + view_configs: Model configs for each view (e.g., num_heads, mlp_dim, etc). + cross_view_fusion: Cross view fusion config. + dtype: The dtype of the computation (default: float32). + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_depth: probability of dropping a layer linearly grows from 0 to + the provided value. + + Returns: + output after transformer encoder block. + """ + view_configs: Sequence[ml_collections.ConfigDict] + cross_view_fusion: ml_collections.ConfigDict + dtype: Any = jnp.float32 + dropout_rate: float = 0.0 + attention_dropout_rate: float = 0.0 + stochastic_depth: float = 0.0 + + def _get_stochastic_depth_rate(self, cur_layer, view_idx): + """Returns the stochastic depth rate for the current layer and view.""" + max_layer = max(self.view_configs[view_idx]['num_layers'] - 1, 1) + return (cur_layer / max_layer) * self.stochastic_depth + + def _apply_self_attentions(self, tokens: List[jnp.ndarray], cur_layer: int, + deterministic: bool) -> List[jnp.ndarray]: + """Applies self attentions for each view.""" + for view_idx, x in enumerate(tokens): + if cur_layer >= self.view_configs[view_idx]['num_layers']: + continue + y = nn.LayerNorm(dtype=self.dtype, name=f'msa_ln_view{view_idx}')(x) + config = self.view_configs[view_idx] + y = nn.MultiHeadDotProductAttention( + num_heads=config['num_heads'], + dtype=self.dtype, + broadcast_dropout=False, + deterministic=deterministic, + dropout_rate=self.attention_dropout_rate, + name=f'msa_view{view_idx}')(y, y) + y = nn.Dropout(rate=self.dropout_rate)(y, deterministic) + r = self._get_stochastic_depth_rate(cur_layer, view_idx) + tokens[view_idx] += nn_layers.StochasticDepth(r)(y, deterministic) + return tokens + + def _apply_cross_attention( + self, + tokens: List[jnp.ndarray], + cur_layer: int, + deterministic: bool, + fuse_in_descending_order: bool, + ) -> List[jnp.ndarray]: + """Applies cross view attention.""" + xs = [ + nn.LayerNorm(dtype=self.dtype, name=f'cross_attention_ln_view{idx}')(x) + for idx, x in enumerate(tokens) + ] + view_indices = ( + range(len(xs) - + 1, 0, -1) if fuse_in_descending_order else range(len(xs) - 1)) + for view_index in view_indices: + query_view_index = ( + view_index - 1 if fuse_in_descending_order else view_index + 1) + key_value_view_index = view_index + query = xs[query_view_index] + key_value = xs[key_value_view_index] + num_heads = ( + self.view_configs[query_view_index]['num_heads'] + if self.cross_view_fusion.use_query_config else + self.view_configs[key_value_view_index]['num_heads']) + qkv_features = ( + query.shape[-1] + if self.cross_view_fusion.use_query_config else key_value.shape[-1]) + + y = attention_layers.MultiHeadAttention( + num_heads=num_heads, + dtype=self.dtype, + qkv_features=qkv_features, + out_kernel_init=nn.initializers.zeros, + dropout_rate=self.attention_dropout_rate, + name=f'cross_attention_view{query_view_index}_{key_value_view_index}' + )(query, key_value, deterministic=deterministic) + y = nn.Dropout(rate=self.dropout_rate)(y, deterministic) + r = self._get_stochastic_depth_rate(cur_layer, view_index) + tokens[query_view_index] += nn_layers.StochasticDepth(r)(y, deterministic) + + return tokens + + def _apply_mlp(self, tokens: List[jnp.ndarray], cur_layer: int, + deterministic: bool) ->List[jnp.ndarray]: + """Applies MLP block.""" + for view_idx, x in enumerate(tokens): + if cur_layer >= self.view_configs[view_idx]['num_layers']: + continue + y = nn.LayerNorm(dtype=self.dtype, name=f'mlp_ln_view{view_idx}')(x) + y = attention_layers.MlpBlock( + mlp_dim=self.view_configs[view_idx]['mlp_dim'], + dtype=self.dtype, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6), + name=f'mlp_view{view_idx}')( + y, deterministic=deterministic) + r = self._get_stochastic_depth_rate(cur_layer, view_idx) + tokens[view_idx] += nn_layers.StochasticDepth(r)(y, deterministic) + return tokens + + @nn.compact + def __call__(self, tokens: List[jnp.ndarray], cur_layer: int, + deterministic: bool) -> List[jnp.ndarray]: + """Applies CrossViewAttentionEncoderBlock module. + + Args: + tokens: Input tokens from each view. + cur_layer: Which layer we apply cross attention. + deterministic: Deterministic or not (to apply dropout). + + Returns: + Output tokens for each view. + """ + tokens = self._apply_cross_attention( + tokens, cur_layer, deterministic, + self.cross_view_fusion.get('fuse_in_descending_order', True)) + tokens = self._apply_self_attentions(tokens, cur_layer, deterministic) + tokens = self._apply_mlp(tokens, cur_layer, deterministic) + return tokens + + +class MultiviewEncoder(nn.Module): + """Multiview Transformer Encoder. + + Attributes: + view_configs: Model configs for each view (e.g., num_heads, mlp_dim, etc). + cross_view_fusion: Cross view fusion config. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_depth: probability of dropping a layer linearly grows from 0 to + the provided value. Our implementation of stochastic depth follows the + timm library, which does per-example layer dropping and uses independent + dropping patterns for each skip-connection. + dtype: Any of activations. + """ + view_configs: Sequence[ml_collections.ConfigDict] + cross_view_fusion: ml_collections.ConfigDict + input_token_temporal_dims: Sequence[int] + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + dtype: Any = jnp.float32 + + def _split_tokens_and_bottleneck( + self, tokens: jnp.ndarray) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Removes bottleneck tokens from input.""" + return (tokens[:, :-self.cross_view_fusion.bottleneck_tokens], + tokens[:, -self.cross_view_fusion.bottleneck_tokens:]) + + def _add_posembed(self, tokens: Sequence[jnp.ndarray]) -> List[jnp.ndarray]: + """Adds positional embeddings.""" + temporal_dims_after_alignment = [ + t // min(self.input_token_temporal_dims) + for t in self.input_token_temporal_dims + ] + xs = [] + for idx, t in enumerate(tokens): + bs, spacetime, channels = t.shape + reshaped_t = t.reshape( + (bs, temporal_dims_after_alignment[idx], -1, channels)) + add_posembed_fn = vit.AddPositionEmbs(name=f'posembed_input_view{idx}') + x = jax.vmap(add_posembed_fn, in_axes=1, out_axes=1)(reshaped_t) + xs.append(x.reshape(bs, spacetime, channels)) + return xs + + def _build_with_bottleneck( + self, + xs: List[jnp.ndarray], + bottleneck: jnp.ndarray, + fusion_layers: Sequence[int], + max_num_layers: int, + train: bool, + dtype: Any, + ) -> List[jnp.ndarray]: + """Builds the encoder with bottlenecks.""" + view_indices = list(range(len(self.view_configs))) + if self.cross_view_fusion.get('fuse_in_descending_order', True): + view_indices.reverse() + for lyr in range(max_num_layers): + for view_idx in view_indices: + view_config = self.view_configs[view_idx] + if lyr >= view_config['num_layers']: + continue + if lyr in fusion_layers: + if xs[view_idx].shape[-1] != bottleneck.shape[-1]: + bottleneck = nn.Dense( + xs[view_idx].shape[-1], + kernel_init=nn.initializers.xavier_uniform(), + name=f'bottleneck_linear_{lyr}_view{view_idx}')( + bottleneck) + xs[view_idx] = jnp.concatenate([xs[view_idx], bottleneck], axis=1) + + xs[view_idx] = vit.Encoder1DBlock( + mlp_dim=view_config['mlp_dim'], + num_heads=view_config['num_heads'], + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=(lyr / max(view_config['num_layers'] - 1, 1)) * + self.stochastic_depth, + name=f'encoderblock_{lyr}_view{view_idx}', + dtype=self.dtype)( + xs[view_idx], deterministic=not train) + if lyr in fusion_layers: + xs[view_idx], bottleneck = self._split_tokens_and_bottleneck( + xs[view_idx]) + return xs + + def _build_with_cross_view_attention( + self, + xs: List[jnp.ndarray], + fusion_layers: Sequence[int], + max_num_layers: int, + train: bool, + dtype: Any, + ) -> List[jnp.ndarray]: + """Builds the encoder with bottlenecks.""" + for lyr in range(max_num_layers): + if lyr in fusion_layers: + xs = CrossViewAttentionEncoderBlock( + view_configs=self.view_configs, + cross_view_fusion=self.cross_view_fusion, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=self.stochastic_depth, + name=f'cross_view_encoderblock_{lyr}')( + xs, lyr, deterministic=not train) + else: + for view_idx, view_config in enumerate(self.view_configs): + if lyr >= view_config['num_layers']: + continue + xs[view_idx] = vit.Encoder1DBlock( + mlp_dim=view_config['mlp_dim'], + num_heads=view_config['num_heads'], + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=(lyr / max(view_config['num_layers'] - 1, 1)) * + self.stochastic_depth, + name=f'encoderblock_{lyr}_view{view_idx}', + dtype=self.dtype)( + xs[view_idx], deterministic=not train) + return xs + + @nn.compact + def __call__(self, + tokens: Sequence[jnp.ndarray], + bottleneck: Union[jnp.ndarray, None], + train: bool = False) -> List[jnp.ndarray]: + """Applies Transformer model on the tokens. + + This function will be called within a vmap along the time axis. Before + calling this function, we need to make sure all elements in the list have + the same temporal dimension. + + Args: + tokens: A sequence of input tubelet tokens. Each one is a 3D float tensor + of shape (batch, sequence_len, channels). We assume that tokens[0] + contains tokens from the largest view while tokens[-1] are from the + smallest view. We define a view as a representation of the input video + composed of tubelets. A larger view corresponds to larger tubelets. + bottleneck: A 3D float tensor of shape (batch, num_tokens, channels) + representing a set of tokens used for fusing information among views. + train: Whether or not it is in training. + + Returns: + A list of activations after encoding for each view. They have the same + shapes as their input counterparts. + """ + + for t in tokens: + assert t.ndim == 3 # Shape is `[batch, len, emb]`. + dtype = jax.dtypes.canonicalize_dtype(self.dtype) + xs = self._add_posembed(tokens) + max_num_layers = max([config['num_layers'] for config in self.view_configs]) + fusion_layers = ([] if self.cross_view_fusion is None else + self.cross_view_fusion.fusion_layers) + + if (self.cross_view_fusion is None or + self.cross_view_fusion.type == 'cross_view_attention'): + return self._build_with_cross_view_attention(xs, fusion_layers, + max_num_layers, train, dtype) + if self.cross_view_fusion.type == 'bottleneck': + return self._build_with_bottleneck(xs, bottleneck, fusion_layers, + max_num_layers, train, dtype) + raise ValueError( + f'Invalid cross view fusion type: {self.cross_view_fusion.type}.') + + +class MTV(nn.Module): + """MTV model.""" + view_configs: Sequence[ml_collections.ConfigDict] + cross_view_fusion: ml_collections.ConfigDict + temporal_encoding_config: ml_collections.ConfigDict + global_encoder_config: ml_collections.ConfigDict + input_token_temporal_dims: Sequence[int] + num_classes: int + classifier: str + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + keep_spatiotemporal_features: bool = False + final_endpoint: str = 'logits' + dtype: Any = jnp.float32 + + def _add_cls_token(self, x: jnp.ndarray, name: str) -> jnp.ndarray: + """Prepends CLS token. + + Args: + x: A 3D float tensor of shape (batch, sequence_len, channels) representing + the tokens. + name: Parameter name of the added CLS token. + + Returns: + A 3D float tensor with prepended CLS token. Its new shape is (batch, + sequence_len+1, channels). + """ + if self.classifier == 'token': + bs, _, c = x.shape + cls = self.param(name, nn.initializers.zeros, (1, 1, c), x.dtype) + cls = jnp.tile(cls, [bs, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + return x + + def _add_cls_tokens_all_frames(self, x: jnp.ndarray, + name: str) -> jnp.ndarray: + """Prepends CLS token for all frames. + + Args: + x: A 4D float tensor of shape (batch, time, sequence_len, channels) + representing the tokens. + name: Parameter name of the added CLS token. + + Returns: + A 4D float tensor with prepended CLS token. Its new shape is (batch, time, + sequence_len+1, channels). + """ + if self.classifier == 'token': + bs, time, _, c = x.shape + cls = self.param(name, nn.initializers.zeros, (1, time, 1, c), x.dtype) + cls = jnp.tile(cls, [bs, 1, 1, 1]) + x = jnp.concatenate([cls, x], axis=2) + return x + + def _add_cls_tokens_for_all_views( + self, tokens: Sequence[jnp.ndarray]) -> List[jnp.ndarray]: + """Prepends CLS tokens for all views. + + Args: + tokens: Tokens from all views. Each one has a shape of (batch, time, + sequence_len, channels) + + Returns: + A list of tokens with CLS tokens added. Each one has a new shape of + (batch, time, sequence_len+1, channels). + """ + outputs = [] + for idx, x in enumerate(tokens): + outputs.append(self._add_cls_tokens_all_frames(x, name=f'cls_view{idx}')) + return outputs + + def _extract_encoder_output(self, + x: jnp.ndarray, + axis: int = 1) -> jnp.ndarray: + """Extracts encoder output.""" + if self.classifier in ['token', '0']: + x = x.take(indices=0, axis=axis) + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=list(range(axis, x.ndim - 1))) + return x + + def _tokenize(self, x: jnp.ndarray) -> List[jnp.ndarray]: + """Creates tokens for each view. + + Args: + x: A 5D float tensor of shape (batch, time, height, width, channels) + representing the input video. + + Returns: + Tokens for each view and each one has a shape of (batch, time, + sequence_len, channels). + """ + tokens = [] + for idx, config in enumerate(self.view_configs): + view_tokens, _ = vivit_model.temporal_encode( + x, + self.temporal_encoding_config, + ml_collections.ConfigDict(config['patches']), + config['hidden_size'], + return_1d=False, + name=f'embedding_view{idx}') + bs, t, h, w, c = view_tokens.shape + view_tokens = view_tokens.reshape(bs, t, h * w, c) + tokens.append(view_tokens) + return tokens + + def _align_temporal_dimension_across_views( + self, tokens: Sequence[jnp.ndarray]) -> List[jnp.ndarray]: + """Reshapes tokens from each view so they have the same temporal dim.""" + min_temporal_dim = min(self.input_token_temporal_dims) + outputs = [] + for t in tokens: + bs, time, n, c = t.shape + outputs.append( + t.reshape(bs, min_temporal_dim, (n * time) // min_temporal_dim, c)) + return outputs + + def _merge_views_along_time_axis(self, tokens: Sequence[jnp.ndarray], + hidden_size: int) -> jnp.ndarray: + """Merges tokens from each view along the time axis.""" + projected_tokens = [] + for view_idx, x in enumerate(tokens): + bs, time, n, c = x.shape + x = x.reshape(bs, self.input_token_temporal_dims[view_idx], + (time * n) // self.input_token_temporal_dims[view_idx], c) + if not self.keep_spatiotemporal_features: + x = self._extract_encoder_output(x, axis=2) + projected_tokens.append( + nn.Dense( + hidden_size, + kernel_init=nn.initializers.xavier_uniform(), + name=f'global_encoder_linear_view{view_idx}')(x)) + return jnp.concatenate(projected_tokens, axis=1) + + def _merge_views_along_channel_axis( + self, tokens: Sequence[jnp.ndarray]) -> jnp.ndarray: + """Merges tokens from each view along the channel axis.""" + max_temporal_dim = max(self.input_token_temporal_dims) + xs = [] + for idx, x in enumerate(tokens): + bs, time, n, c = x.shape + x = x.reshape(bs, self.input_token_temporal_dims[idx], + (time * n) // self.input_token_temporal_dims[idx], c) + if self.keep_spatiotemporal_features: + xs.append(jnp.tile(x, (1, max_temporal_dim // x.shape[1], 1, 1))) + else: + x = self._extract_encoder_output(x, axis=2) + xs.append(jnp.tile(x, (1, max_temporal_dim // x.shape[1], 1))) + return jnp.concatenate(xs, axis=-1) + + def _global_encode(self, tokens: Sequence[jnp.ndarray], + is_train: bool) -> jnp.ndarray: + """Applies the global encoder. + + We support two strategies to merge encoded tokens from each view: + + In the first strategy, we extract the CLS tokens from each view (we apply + pooling when other classifiers are used), apply tiling to match the temporal + dimension, and concatenate them in the channel dimension. + + In the second strategy, after we extract the CLS tokens we linear project + them into the same dimension and concatenate them along the temporal + dimension. + + The global encoder is implemented as a ViT encoder. + + Args: + tokens: A list of tokens from each view. Each one has a shape of (batch, + time, sequence_len, channels). + is_train: Whether or not it is in training. + + Returns: + A 2D float tensor representing the embedding from the global encoder. + """ + encoder_config = self.global_encoder_config.to_dict() + encoder_config.update( + dict( + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=self.stochastic_depth, + dtype=self.dtype, + name='global_encoder')) + merge_axis = encoder_config.pop('merge_axis', 'channel') + hidden_size = encoder_config.pop('hidden_size') + if merge_axis == 'time': + x = self._merge_views_along_time_axis(tokens, hidden_size) + elif merge_axis == 'channel': + x = self._merge_views_along_channel_axis(tokens) + else: + raise ValueError(f'Invalid merge_axis: {merge_axis}.') + x = self._add_cls_token(x, name='cls_global') + encoder = vit.Encoder(**encoder_config) + if self.keep_spatiotemporal_features: + x = jax.vmap( + functools.partial(encoder, train=is_train), in_axes=2, out_axes=2)( + x) + else: + x = encoder(x, train=is_train) + return (x if self.keep_spatiotemporal_features else + self._extract_encoder_output(x)) + + def _encode_per_time( + self, + tokens: Sequence[jnp.ndarray], + bottleneck: Union[jnp.ndarray, None], + is_train: bool, + ) -> List[jnp.ndarray]: + """Encodes input tokens on a per-time basis.""" + + tokens = MultiviewEncoder( + view_configs=self.view_configs, + cross_view_fusion=self.cross_view_fusion, + input_token_temporal_dims=self.input_token_temporal_dims, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=self.stochastic_depth, + dtype=self.dtype, + name='MultiviewEncoder')( + tokens, bottleneck=bottleneck, train=is_train) + return tokens + + def _check_config(self, x: jnp.ndarray): + """Checks configuration errors.""" + if self.keep_spatiotemporal_features and self.classifier == 'token': + raise ValueError('Classifier cannot be `token` when ' + '`keep_spatiotemporal_features` is True.') + heights = [config['patches']['size'][0] for config in self.view_configs] + widths = [config['patches']['size'][1] for config in self.view_configs] + if self.keep_spatiotemporal_features and (len(set(heights)) > 1 or + len(set(widths)) > 1): + raise ValueError('Patches from different views must have the same height ' + 'and width when `keep_spatiotemporal_features` is True.') + + @nn.compact + def __call__(self, + x: jnp.ndarray, + *, + train: bool = True, + debug: bool = False): + """Executes MTV model. + + Args: + x: A 5D float tensor of shape (batch, time, height, width, channels) + representing the input video. + train: Whether or not it is in training. + debug: Whether or not it is in debug mogde. Not used here. + + Returns: + The logits produced by the MTV model. + """ + del debug + self._check_config(x) + tokens = self._tokenize(x) + tokens = self._add_cls_tokens_for_all_views(tokens) + tokens = self._align_temporal_dimension_across_views(tokens) + if (self.cross_view_fusion is not None and + self.cross_view_fusion.type == 'bottleneck'): + if self.cross_view_fusion.get('fuse_in_descending_order', True): + channels = tokens[-1].shape[-1] + else: + channels = tokens[0].shape[-1] + bottleneck = self.param( + 'bottleneck', nn.initializers.normal(stddev=0.02), + (1, tokens[0].shape[1], self.cross_view_fusion.bottleneck_tokens, + channels), self.dtype) + bottleneck = jnp.tile(bottleneck, [x.shape[0], 1, 1, 1]) + tokens = jax.vmap( + functools.partial(self._encode_per_time, is_train=train), + in_axes=(1, 1), + out_axes=1)(tokens, bottleneck) + else: + tokens = jax.vmap( + functools.partial( + self._encode_per_time, bottleneck=None, is_train=train), + in_axes=1, + out_axes=1)( + tokens) + tokens = self._global_encode(tokens, train) + if self.keep_spatiotemporal_features: + bs, _, h, w, _ = x.shape + tokens = tokens.reshape( + (bs, tokens.shape[1], h // self.view_configs[0].patches.size[0], + w // self.view_configs[0].patches.size[1], -1)) + pre_logits = nn_layers.IdentityLayer(name='pre_logits')(tokens) + if self.final_endpoint == 'pre_logits': + return pre_logits + if self.keep_spatiotemporal_features: + pre_logits = self._extract_encoder_output(pre_logits, axis=1) + logits = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + pre_logits) + if self.final_endpoint == 'logits': + return logits + raise ValueError(f'Final endpoint `{self.final_endpoint}` not recognized.') + + +class MTVClassificationModel(vivit_model.ViViTClassificationModel): + """MTV model for multiclass classification task.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return MTV( + view_configs=self.config.model.view_configs, + cross_view_fusion=self.config.model.cross_view_fusion, + temporal_encoding_config=self.config.model.temporal_encoding_config, + global_encoder_config=self.config.model.global_encoder_config, + input_token_temporal_dims=model_utils.get_input_token_temporal_dims( + self.config.dataset_configs.num_frames, + self.config.model.view_configs), + num_classes=self.dataset_meta_data['num_classes'], + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.0), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + stochastic_depth=self.config.model.get('stochastic_depth', 0.0), + keep_spatiotemporal_features=self.config.model.get( + 'keep_spatiotemporal_features', False), + final_endpoint=self.config.model.get('final_endpoint', 'logits'), + dtype=model_dtype) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return _DEFAULT_MTV_CONFIG + + def init_from_train_state( + self, + train_state: train_utils.TrainState, + restored_train_state: train_utils.TrainState, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_proj: bool = False) -> train_utils.TrainState: + """Updates the train_state with data from restored_train_state. + + This function is writen to be used for 'fine-tuning' experiments. The input + embeddings and positional embeddings are resized if the current model uses + a different size of tubelets than the pretrained model. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + restore_output_proj: Whether or not to restore output projection weights. + + Returns: + Updated train_state. + """ + return model_utils.initialize_from_mtv_train_state( + self.config, + train_state, + restored_train_state, + restored_model_cfg, + restore_output_projection=restore_output_proj) + + def init_from_vit_train_states( + self, + train_state: train_utils.TrainState, + restored_train_states: Sequence[train_utils.TrainState], + restored_model_cfgs: Sequence[ml_collections.ConfigDict], + restored_model_formats: Sequence[str], + ) -> train_utils.TrainState: + """Updates the train_state with data from restored_train_states. + + This function is used to initialize a MTV model from a list of ViT + checkpoints. We assume that the number of restored_train_states is equal to + the number of views. + + Args: + train_state: A raw TrainState for the model. + restored_train_states: A sequence of TrainStates that is loaded with + parameters/state of a pretrained ViT model. + restored_model_cfgs: A sequence of model configuration of the pretrained + ViT models. Usually used for some asserts. + restored_model_formats: The checkpoint format of each model. The format + can be 'scenic' or 'big_vision'. + + Returns: + Updated train_state. + """ + return model_utils.initialize_from_vit_train_states(self.config, + train_state, + restored_train_states, + restored_model_cfgs, + restored_model_formats) + + +class MTVMultiheadClassificationModel( + vivit_model.ViViTMultiHeadClassificationModel, MTVClassificationModel): + """MTV model for multi-classification tasks. + + When methods are overriden by both parents, the implementation follows the + first parent, which is ViViTMultiHeadClassificationModel in this case. For + build_flax_model() and default_flax_model_config(), we explicitly call the + methods from MTVClassificationModel. + """ + + def build_flax_model(self) -> nn.Module: + return MTVClassificationModel.build_flax_model(self) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return MTVClassificationModel.default_flax_model_config(self) diff --git a/scenic/projects/mtv/model_test.py b/scenic/projects/mtv/model_test.py new file mode 100644 index 0000000000000000000000000000000000000000..eba7c7735c3927421b93ae37cf6f91c74df80213 --- /dev/null +++ b/scenic/projects/mtv/model_test.py @@ -0,0 +1,381 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for model.""" + +from absl.testing import parameterized + +import flax +from jax import random +import jax.numpy as jnp +import ml_collections +from scenic.projects.mtv import model +import tensorflow as tf + + +class ModelTest(tf.test.TestCase, parameterized.TestCase): + + def setUp(self): + super().setUp() + self.view_configs = [ + ml_collections.ConfigDict({ + 'hidden_size': 8, + 'patches': { + 'size': (4, 4, 4) + }, + 'num_heads': 2, + 'mlp_dim': 16, + 'num_layers': 1, + }), + ml_collections.ConfigDict({ + 'hidden_size': 16, + 'patches': { + 'size': (4, 4, 2) + }, + 'num_heads': 2, + 'mlp_dim': 32, + 'num_layers': 1, + }), + ] + self.cross_view_fusion = None + self.temporal_encoding_config = ml_collections.ConfigDict({ + 'method': '3d_conv', + 'kernel_init_method': 'central_frame_initializer', + }) + self.global_encoder_config = ml_collections.ConfigDict({ + 'num_heads': 2, + 'mlp_dim': 32, + 'num_layers': 1, + 'hidden_size': 16, + 'merge_axis': 'channel', + }) + + def test_cross_view_attention_encoder_block_same_layers(self): + self.cross_view_fusion = ml_collections.ConfigDict({ + 'use_query_config': True, + 'fusion_layers': (0,), + }) + rngs = {'params': random.PRNGKey(0), 'dropout': random.PRNGKey(1)} + tokens = [jnp.ones((2, 8, 8)), jnp.ones((2, 16, 16))] + outputs, vars_dict = model.CrossViewAttentionEncoderBlock( + view_configs=self.view_configs, + cross_view_fusion=self.cross_view_fusion).init_with_output( + rngs, tokens, 0, deterministic=True) + self.assertEqual(outputs[0].shape, (2, 8, 8)) + self.assertEqual(outputs[1].shape, (2, 16, 16)) + expected_keys = { + 'msa_ln_view0', + 'msa_ln_view1', + 'msa_view0', + 'msa_view1', + 'cross_attention_ln_view0', + 'cross_attention_ln_view1', + 'cross_attention_view0_1', + 'mlp_ln_view0', + 'mlp_ln_view1', + 'mlp_view0', + 'mlp_view1', + } + self.assertSetEqual(set(vars_dict['params'].keys()), expected_keys) + + def test_cross_view_attention_encoder_block_different_layers(self): + self.view_configs[1].num_layers = 2 + self.cross_view_fusion = ml_collections.ConfigDict({ + 'use_query_config': True, + 'fusion_layers': (0, 1), + }) + rngs = {'params': random.PRNGKey(0), 'dropout': random.PRNGKey(1)} + tokens = [jnp.ones((2, 8, 8)), jnp.ones((2, 16, 16))] + outputs, vars_dict = model.CrossViewAttentionEncoderBlock( + view_configs=self.view_configs, + cross_view_fusion=self.cross_view_fusion).init_with_output( + rngs, tokens, 1, deterministic=True) + self.assertEqual(outputs[0].shape, (2, 8, 8)) + self.assertEqual(outputs[1].shape, (2, 16, 16)) + expected_keys = { + 'msa_ln_view1', + 'msa_view1', + 'cross_attention_ln_view0', + 'cross_attention_ln_view1', + 'cross_attention_view0_1', + 'mlp_ln_view1', + 'mlp_view1', + } + self.assertSetEqual(set(vars_dict['params'].keys()), expected_keys) + + def test_multiview_encoder_wo_cross_view_fusion(self): + rng = random.PRNGKey(0) + inputs = [jnp.ones((2, 4, 8)), jnp.ones((2, 8, 16))] + temporal_dims = [2, 4] + outputs, vars_dict = model.MultiviewEncoder( + self.view_configs, self.cross_view_fusion, + temporal_dims).init_with_output(rng, inputs, temporal_dims, None) + self.assertEqual(outputs[0].shape, (2, 4, 8)) + self.assertEqual(outputs[1].shape, (2, 8, 16)) + self.assertSetEqual( + set(vars_dict['params'].keys()), { + 'posembed_input_view0', + 'posembed_input_view1', + 'encoderblock_0_view0', + 'encoderblock_0_view1', + }) + + @parameterized.parameters(True, False) + def test_multiview_encoder_w_cross_view_attention(self, + fuse_in_descending_order): + self.cross_view_fusion = ml_collections.ConfigDict({ + 'type': 'cross_view_attention', + 'use_query_config': True, + 'fusion_layers': (0,), + 'fuse_in_descending_order': fuse_in_descending_order, + }) + rngs = {'params': random.PRNGKey(0), 'dropout': random.PRNGKey(1)} + inputs = [jnp.ones((2, 4, 8)), jnp.ones((2, 8, 16))] + temporal_dims = [2, 4] + outputs, vars_dict = model.MultiviewEncoder(self.view_configs, + self.cross_view_fusion, + temporal_dims).init_with_output( + rngs, inputs, None) + self.assertEqual(outputs[0].shape, (2, 4, 8)) + self.assertEqual(outputs[1].shape, (2, 8, 16)) + self.assertSetEqual( + set(vars_dict['params'].keys()), { + 'posembed_input_view0', + 'posembed_input_view1', + 'cross_view_encoderblock_0', + }) + + @parameterized.parameters( + (True, 16, {'bottleneck_linear_0_view0'}), + (False, 8, {'bottleneck_linear_0_view1'}), + ) + def test_multiview_encoder_w_bottleneck(self, fuse_in_descending_order, + bottleneck_channels, + expected_bottleneck_key): + self.cross_view_fusion = ml_collections.ConfigDict({ + 'type': 'bottleneck', + 'bottleneck_tokens': 4, + 'fusion_layers': (0,), + 'fuse_in_descending_order': fuse_in_descending_order, + }) + rngs = {'params': random.PRNGKey(0), 'dropout': random.PRNGKey(1)} + inputs = [jnp.ones((2, 4, 8)), jnp.ones((2, 8, 16))] + bottleneck = jnp.ones((2, 4, bottleneck_channels)) + temporal_dims = [2, 4] + outputs, vars_dict = model.MultiviewEncoder(self.view_configs, + self.cross_view_fusion, + temporal_dims).init_with_output( + rngs, inputs, bottleneck) + self.assertEqual(outputs[0].shape, (2, 4, 8)) + self.assertEqual(outputs[1].shape, (2, 8, 16)) + self.assertSetEqual( + set(vars_dict['params'].keys()), { + 'posembed_input_view0', + 'posembed_input_view1', + 'encoderblock_0_view0', + 'encoderblock_0_view1', + }.union(expected_bottleneck_key)) + + @parameterized.parameters( + ('time', 'token'), + ('time', 'gap'), + ('channel', 'gap'), + ('channel', 'gap'), + ) + def test_mtv_without_cross_fusion(self, merge_axis, classifier): + rngs = {'params': random.PRNGKey(0), 'dropout': random.PRNGKey(1)} + images = jnp.ones((2, 4, 8, 8, 3)) + self.global_encoder_config.merge_axis = merge_axis + self.global_encoder_config.hidden_size = 16 + outputs, vars_dict = model.MTV( + view_configs=self.view_configs, + cross_view_fusion=self.cross_view_fusion, + temporal_encoding_config=self.temporal_encoding_config, + global_encoder_config=self.global_encoder_config, + input_token_temporal_dims=[1, 2], + num_classes=10, + classifier=classifier, + ).init_with_output(rngs, images) + self.assertEqual(outputs.shape, (2, 10)) + actual_var_keys = set(vars_dict['params'].keys()) + expected_keys = { + 'embedding_view0', + 'embedding_view1', + 'MultiviewEncoder', + 'global_encoder', + 'output_projection', + } + if classifier == 'token': + expected_keys.update({ + 'cls_view0', + 'cls_view1', + 'cls_global', + }) + if merge_axis == 'time': + expected_keys.update({ + 'global_encoder_linear_view0', + 'global_encoder_linear_view1', + }) + self.assertSetEqual(actual_var_keys, expected_keys) + + @parameterized.parameters( + ('pre_logits', (2, 2, 2, 2, 24)), + ('logits', (2, 10)), + ) + def test_mtv_keep_spatiotemporal_features(self, final_endpoint, + expected_output_shape): + rngs = {'params': random.PRNGKey(0), 'dropout': random.PRNGKey(1)} + images = jnp.ones((2, 4, 8, 8, 3)) + outputs, _ = model.MTV( + view_configs=self.view_configs, + cross_view_fusion=self.cross_view_fusion, + temporal_encoding_config=self.temporal_encoding_config, + global_encoder_config=self.global_encoder_config, + input_token_temporal_dims=[1, 2], + num_classes=10, + classifier='gap', + keep_spatiotemporal_features=True, + final_endpoint=final_endpoint, + ).init_with_output(rngs, images) + self.assertEqual(outputs.shape, expected_output_shape) + + @parameterized.parameters( + (True, 'bottleneck_linear_0_view0'), + (False, 'bottleneck_linear_0_view1'), + ) + def test_mtv_with_bottleneck(self, fuse_in_descending_order, + expected_bottleneck_key): + rngs = {'params': random.PRNGKey(0), 'dropout': random.PRNGKey(1)} + images = jnp.ones((2, 4, 8, 8, 3)) + self.cross_view_fusion = ml_collections.ConfigDict({ + 'type': 'bottleneck', + 'bottleneck_tokens': 4, + 'fusion_layers': (0,), + 'fuse_in_descending_order': fuse_in_descending_order, + }) + outputs, vars_dict = model.MTV( + view_configs=self.view_configs, + cross_view_fusion=self.cross_view_fusion, + temporal_encoding_config=self.temporal_encoding_config, + global_encoder_config=self.global_encoder_config, + input_token_temporal_dims=[1, 2], + num_classes=10, + classifier='token', + ).init_with_output(rngs, images) + self.assertEqual(outputs.shape, (2, 10)) + actual_var_keys = set(vars_dict['params'].keys()) + self.assertIn(expected_bottleneck_key, + vars_dict['params']['MultiviewEncoder'].keys()) + expected_keys = { + 'cls_view0', + 'cls_view1', + 'cls_global', + 'embedding_view0', + 'embedding_view1', + 'MultiviewEncoder', + 'bottleneck', + 'global_encoder', + 'output_projection', + } + self.assertSetEqual(actual_var_keys, expected_keys) + + @parameterized.parameters(True, False) + def test_mtv_with_cross_view_attention(self, fuse_in_descending_order): + rngs = {'params': random.PRNGKey(0), 'dropout': random.PRNGKey(1)} + images = jnp.ones((2, 4, 8, 8, 3)) + self.cross_view_fusion = ml_collections.ConfigDict({ + 'type': 'cross_view_attention', + 'use_query_config': True, + 'add_mlp': True, + 'fusion_layers': (0,), + 'fuse_in_descending_order': fuse_in_descending_order, + }) + outputs, vars_dict = model.MTV( + view_configs=self.view_configs, + cross_view_fusion=self.cross_view_fusion, + temporal_encoding_config=self.temporal_encoding_config, + global_encoder_config=self.global_encoder_config, + input_token_temporal_dims=[1, 2], + num_classes=10, + classifier='token', + ).init_with_output(rngs, images) + self.assertEqual(outputs.shape, (2, 10)) + actual_var_keys = set(vars_dict['params'].keys()) + self.assertIn('cross_view_encoderblock_0', + vars_dict['params']['MultiviewEncoder'].keys()) + expected_keys = { + 'cls_view0', + 'cls_view1', + 'cls_global', + 'embedding_view0', + 'embedding_view1', + 'MultiviewEncoder', + 'global_encoder', + 'output_projection', + } + self.assertSetEqual(actual_var_keys, expected_keys) + + def test_mtv_classification_model(self): + rng = random.PRNGKey(0) + mtv = model.MTVClassificationModel( + config=None, + dataset_meta_data={ + 'num_classes': 10, + 'target_is_onehot': False, + }) + num_frames = 8 # matches with the default config. + inputs = jnp.ones((2, num_frames, 8, 8, 3)) + rng, init_rng = random.split(rng) + init_model_state, init_params = flax.core.pop(mtv.flax_model.init( + init_rng, inputs, train=False), 'params') + + # Check that the forward pass works with mutated model_state. + rng, dropout_rng = random.split(rng) + variables = {'params': init_params, **init_model_state} + outputs = mtv.flax_model.apply( + variables, + inputs, + train=True, + rngs={'dropout': dropout_rng}) + self.assertEqual(outputs.shape, (2, 10)) + + def test_mtv_multihead_classification_model(self): + rng = random.PRNGKey(0) + config = model._DEFAULT_MTV_CONFIG + config.dataset_configs.class_splits = [7, 3] + mtv = model.MTVMultiheadClassificationModel( + config=config, + dataset_meta_data={ + 'num_classes': 10, + 'target_is_onehot': False, + }) + num_frames = 8 # matches with the default config. + inputs = jnp.ones((2, num_frames, 8, 8, 3)) + rng, init_rng = random.split(rng) + init_model_state, init_params = flax.core.pop(mtv.flax_model.init( + init_rng, inputs, train=False), 'params') + + # Check that the forward pass works with mutated model_state. + rng, dropout_rng = random.split(rng) + variables = {'params': init_params, **init_model_state} + outputs = mtv.flax_model.apply( + variables, + inputs, + train=True, + rngs={'dropout': dropout_rng}) + self.assertEqual(outputs.shape, (2, 10)) + + +if __name__ == '__main__': + tf.test.main() diff --git a/scenic/projects/mtv/model_utils.py b/scenic/projects/mtv/model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..c84b8e11a249dcde1cfd4d480b5675fe02b7b12e --- /dev/null +++ b/scenic/projects/mtv/model_utils.py @@ -0,0 +1,408 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Contains model utility functions.""" + +from typing import Any, Dict, List, Optional, Sequence + +from absl import logging +import flax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.projects.vivit import model_utils as vivit_utils +from scenic.train_lib import train_utils +import scipy.ndimage + +_POSITIONAL_EMBEDDING_KEY = 'posembed_input_view' +_BOTTLENECK_KEY = 'bottleneck' + + +def get_input_token_temporal_dims( + num_frames: int, + view_configs: Sequence[ml_collections.ConfigDict]) -> List[int]: + """Returns temporal dims of input tokens for each view. + + Args: + num_frames: Number of frames in the input video. + view_configs: Configurations of each view in the MTV model. + + Returns: + Temporal dimensions of input tokens from each view. + """ + return [num_frames // view['patches']['size'][2] for view in view_configs] + + +def get_temporal_dims_merged_into_space( + num_frames: int, + view_configs: Sequence[ml_collections.ConfigDict]) -> List[int]: + """Returns temporal dims merged into spatial dim for each view. + + In MTV, different views have different temporal dimensions. Before feeding + tokens from different views into the multiview encoder, we reshape the tokens + so that they have the same temporal dimension, part of the temporal dimensions + are folded into the spatial dimesion. + + Args: + num_frames: Number of frames in the input video. + view_configs: Configurations of each view in the MTV model. + + Returns: + Temporal dimensions that were merged into the spatial dimensions. + """ + dims = get_input_token_temporal_dims(num_frames, view_configs) + return [d // min(dims) for d in dims] + + +def interpolate_input_embedding( + embedding_params: Dict[str, jnp.ndarray], + restored_embedding_params: Dict[str, jnp.ndarray], +): + """Interpolates input embedding. + + This function is used to initialize input embeddings for MTV models when the + current model uses a different size of tubelets than the pretrained one. + + Args: + embedding_params: A dict of embedding parameters to be updated containing a + kernel, which is a 5D float tensor of shape (new_kernel_t, new_kernel_h, + new_kernel_w, in_channels, out_channels). + restored_embedding_params: A dict of embedding parameters from which we load + the weights. It has a `kernel` parameter, which is a 5D float tensor of + shape (kernel_t, kernel_h, kernel_w, in_channels, out_channels). + + Returns: + A dict of updated parameters. Only `kernel` is updated. + """ + kernel = embedding_params['kernel'] + restored_kernel = restored_embedding_params['kernel'] + logging.info('Resizing input embedding kernel from %s to %s.', + restored_kernel.shape, kernel.shape) + zoom = ( + kernel.shape[0] / restored_kernel.shape[0], + kernel.shape[1] / restored_kernel.shape[1], + kernel.shape[2] / restored_kernel.shape[2], + 1, + 1, + ) + embedding_params['kernel'] = scipy.ndimage.zoom( + restored_kernel, zoom, order=1) + embedding_params['bias'] = restored_embedding_params['bias'] + + +def interpolate_cls_tokens(cls: jnp.ndarray, + restored_cls: jnp.ndarray) -> jnp.ndarray: + """Interpolates CLS tokens. + + This function is used to initialize CLS tokens for MTV models when the current + CLS tokens have a different shape than the pretrained ones. + + Args: + cls: A 4D float tensor of shape (1, new_time, 1, channels) representing the + CLS tokens to be updated. + restored_cls: A 4D float tensor of shape (1, old_time, 1, channels) + representing the CLS tokens from which we load the weights. + + Returns: + A 4D float tensor of shape (1, new_time, 1, channels) representing the + resized CLS tokens. + """ + logging.info('Resizing CLS tokens from %s to %s.', restored_cls.shape, + cls.shape) + zoom = (1, cls.shape[1] / restored_cls.shape[1], 1, 1) + return scipy.ndimage.zoom(restored_cls, zoom, order=1) + + +def _get_view_index(key: str) -> int: + return int(key[len(_POSITIONAL_EMBEDDING_KEY):]) + + +def init_bottleneck(params: Dict[str, Any], restored_bottleneck: jnp.ndarray): + """Initialize bottleneck tokens from a pretrained model.""" + bottleneck = params[_BOTTLENECK_KEY] + if bottleneck.shape != restored_bottleneck.shape: + logging.info('Resizing bottleneck tokens from %s to %s.', + restored_bottleneck.shape, bottleneck.shape) + zoom = (1, bottleneck.shape[1] / restored_bottleneck.shape[1], 1, 1) + params[_BOTTLENECK_KEY] = scipy.ndimage.zoom( + restored_bottleneck, zoom, order=1) + else: + params[_BOTTLENECK_KEY] = restored_bottleneck + + +def central_frame_init_embedding( + to_params: Dict[str, Any], + from_params: Dict[str, Any], + view_idx: int, + config: ml_collections.ConfigDict, +): + """Initialize input embedding from a ViT model. + + This function is adapted from scenic.projects.vivit.google.model_utils. Here, + we add support to interpolate the input embeddings if the current model has + different spatial patch sizes than the pretrained model. + + Args: + to_params: Parameters of the current model. + from_params: Model parameters where we load the weights from. + view_idx: View index. + config: Current model config. + """ + if config.init_from.get('restore_input_embedding', True): + name = f'embedding_view{view_idx}' + input_kernel = to_params[name]['kernel'] + restored_kernel = from_params['kernel'] + restored_bias = from_params['bias'] + logging.info('Initializing input kernel to select centre frame.') + if input_kernel.shape[1:] != restored_kernel.shape: + logging.info('Kernel sizes do not match. Interpolation is performed.') + (restored_kernel_h, restored_kernel_w, in_depth, out_depth) = ( + restored_kernel.shape + ) + reshaped_kernel = restored_kernel.reshape(restored_kernel_h, + restored_kernel_w, -1) + patch_size = config.model.view_configs[view_idx].patches.size + zoom = (patch_size[0] / restored_kernel_h, + patch_size[1] / restored_kernel_w, 1) + resized_kernel = scipy.ndimage.zoom(reshaped_kernel, zoom, order=1) + resized_kernel = resized_kernel.reshape( + (patch_size[0], patch_size[1], in_depth, out_depth)) + else: + resized_kernel = restored_kernel + central_time_index = input_kernel.shape[0] // 2 + temp = np.zeros(input_kernel.shape) + temp[central_time_index] = resized_kernel.copy() + to_params[name]['kernel'] = temp + to_params[name]['bias'] = restored_bias + + +def initialize_from_mtv_parameters( + config: ml_collections.ConfigDict, + params: Dict[str, Any], + restored_model_cfg: ml_collections.ConfigDict, + restored_params: Dict[str, Any], + restore_output_projection: bool, + model_prefix_path: Optional[List[str]] = None, +): + """Initialize MTV parameters from a MTV model. + + Args: + config: Configuration for the model being updated. + params: The parameters of the model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + restored_params: Restored parameters from the given pretrained checkpoint. + restore_output_projection: Whether or not to restore the weights from output + projection. + model_prefix_path: The parent keys in the model dict where the restored + model should reside. + """ + if model_prefix_path: + to_params = params[model_prefix_path[0]] + for prefix in model_prefix_path[1:]: + to_params = to_params[prefix] + else: + to_params = params + for m_key, m_params in restored_params.items(): + if m_key == 'output_projection': + if restore_output_projection: + to_params[m_key] = m_params + elif m_key == _BOTTLENECK_KEY: + init_bottleneck(to_params, m_params) + elif 'cls' in m_key: + if config.model.classifier != 'token': + logging.info('Skipping %s since classifier != `token`.', m_key) + continue + if to_params[m_key].shape[1] != m_params.shape[1]: + to_params[m_key] = interpolate_cls_tokens(to_params[m_key], m_params) + else: + to_params[m_key] = m_params + elif 'embedding' in m_key: + if to_params[m_key]['kernel'].shape != m_params['kernel'].shape: + interpolate_input_embedding(to_params[m_key], m_params) + else: + to_params[m_key] = m_params + elif m_key == 'global_encoder': + for ge_key, ge_params in m_params.items(): + if 'posembed_input' in ge_key: # Might need resolution change + vivit_utils.init_posemb( + to_params[m_key], + m_params, + config, + restored_model_cfg, + is_temporal=True) + else: + to_params[m_key][ge_key] = ge_params + elif m_key == 'MultiviewEncoder': + for tm_key, tm_params in m_params.items(): + if 'posembed_input' in tm_key: # Might need resolution change + vivit_utils.init_posemb( + to_params['MultiviewEncoder'], + m_params, + config, + restored_model_cfg, + is_temporal=False, + posemb_name=tm_key, + restored_posemb_name=tm_key) + else: + to_params[m_key][tm_key] = tm_params + else: + to_params[m_key] = m_params + + +def initialize_from_mtv_train_state( + config: ml_collections.ConfigDict, + train_state: train_utils.TrainState, + restored_train_state: train_utils.TrainState, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_projection: bool, + model_prefix_path: Optional[List[str]] = None, +) -> train_utils.TrainState: + """Updates MTV's train_state with a pretrained MTV weights. + + Args: + config: Configurations for the model being updated. + train_state: A raw TrainState for the model. + restored_train_state: A dict. Each key is a Ti/S/B/L ViT model and the + corresponding value is a TrainState that is loaded with parameters/state + of pretrained models. + restored_model_cfg: Configurations of models from which the + restored_train_states come from. Often only the classifier information is + used for interpolating the positional embeddings. + restore_output_projection: Whether or not to restore the weights from output + projection. + model_prefix_path: The parent keys in the model dict where the restored + model should reside. + + Returns: + Updated train_state. + """ + + params = flax.core.unfreeze(train_state.params) + restored_params = flax.core.unfreeze(restored_train_state.params) + initialize_from_mtv_parameters(config, params, restored_model_cfg, + restored_params, restore_output_projection, + model_prefix_path) + return train_state.replace(params=flax.core.freeze(params)) + + +def initialize_one_view_from_vit_parameters( + config: ml_collections.ConfigDict, + params: Dict[str, Any], + restored_model_cfg: ml_collections.ConfigDict, + restored_params: Dict[str, Any], + view_idx: int, + transformer_key: str = 'MultiviewEncoder'): + """Initialize one view of MTV from a ViT model. + + Args: + config: Configuration for the model being updated. + params: The parameters of the model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + restored_params: Restored parameters from the given pretrained checkpoint. + view_idx: The index of the view for which we restore the model. + transformer_key: The key of transformer whose weights are being updated. + """ + + for m_key, m_params in restored_params.items(): + if m_key == 'output_projection': + pass + elif m_key == 'pre_logits': + # We don't do a linear projection in this model. pre_logits is generated + # as an identity transformation. + pass + elif m_key == 'cls': + if config.model.classifier == 'token': + # The CLS token from a ViT model has a shape of (1, 1, channels) while + # the CLS token from the MTV model has a shape of (1, temporal_dims, 1, + # channels). + cls_key = f'cls_view{view_idx}' + temporal_dims = params[cls_key].shape[1] + params[cls_key] = jnp.tile(m_params[jnp.newaxis, ...], + [1, temporal_dims, 1, 1]) + elif m_key == 'Transformer': + for tm_key, tm_params in m_params.items(): + if 'posembed_input' == tm_key: # Might need resolution change + vivit_utils.init_posemb( + params[transformer_key], + m_params, + config, + restored_model_cfg, + is_temporal=False, + posemb_name=f'posembed_input_view{view_idx}') + elif 'encoderblock' in tm_key: + msa_encoderblock_name = f'{tm_key}_view{view_idx}' + cross_view_encoderblock_name = f'cross_view_{tm_key}' + if msa_encoderblock_name in params[transformer_key]: + params[transformer_key][msa_encoderblock_name] = tm_params + elif cross_view_encoderblock_name in params[transformer_key]: + cross_view_encoderblock_params = params[transformer_key][ + cross_view_encoderblock_name] + # In vit.Encoder1DBlock(), default names are used. For example, + # `LayerNorm_0` stores the params for the layer norm before MSA and + # `LayerNorm_1` stores the params for the layer norm before MLP. + cross_view_encoderblock_params[ + f'msa_ln_view{view_idx}'] = tm_params['LayerNorm_0'] + cross_view_encoderblock_params[f'msa_view{view_idx}'] = tm_params[ + 'MultiHeadDotProductAttention_0'] + cross_view_encoderblock_params[ + f'mlp_ln_view{view_idx}'] = tm_params['LayerNorm_1'] + cross_view_encoderblock_params[f'mlp_view{view_idx}'] = tm_params[ + 'MlpBlock_0'] + else: + logging.info( + 'Skipping restoring `%s`, in restored model but not in the' + ' target.', tm_key) + elif m_key == 'embedding': + central_frame_init_embedding(params, m_params, view_idx, config) + else: + logging.info('Skipping `%s`, in restored model but not in target', m_key) + + +def initialize_from_vit_train_states( + config: ml_collections.ConfigDict, + train_state: train_utils.TrainState, + restored_train_states: Sequence[train_utils.TrainState], + restored_model_cfgs: Sequence[ml_collections.ConfigDict], + restored_model_formats: Sequence[str], +) -> train_utils.TrainState: + """Updates MTV's train_state with pretrained ViT weights. + + Args: + config: Configurations for the model being updated. + train_state: A raw TrainState for the model. + restored_train_states: A dict. Each key is a Ti/S/B/L ViT model and the + corresponding value is a TrainState that is loaded with parameters/state + of pretrained models. + restored_model_cfgs: Configurations of models from which the + restored_train_states come from. Often only the classifier information is + used for interpolating the positional embeddings. + restored_model_formats: A list of pretrained model formats. The format can + only be `big_vision` or 'scenic'. + + Returns: + Updated train_state. + """ + assert len(restored_train_states) == len(restored_model_formats), ( + 'restored_train_states must have the same dimension as ' + 'restored_model_formats.') + params = flax.core.unfreeze(train_state.params) + for view_idx, restored_state in enumerate(restored_train_states): + restored_model_params = flax.core.unfreeze(restored_state.params) + initialize_one_view_from_vit_parameters(config, params, + restored_model_cfgs[view_idx], + restored_model_params, view_idx) + + return train_state.replace(params=flax.core.freeze(params)) diff --git a/scenic/projects/mtv/model_utils_test.py b/scenic/projects/mtv/model_utils_test.py new file mode 100644 index 0000000000000000000000000000000000000000..b270085f23dc3e2396623727083d642ed356dcaf --- /dev/null +++ b/scenic/projects/mtv/model_utils_test.py @@ -0,0 +1,424 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for model_utils.""" + +from absl.testing import parameterized + +import jax.numpy as jnp +import ml_collections +import numpy as np + +from scenic.projects.mtv import model_utils +import tensorflow as tf + + +class ModelUtilsTest(tf.test.TestCase, parameterized.TestCase): + + def setUp(self): + super().setUp() + self.mtv_cfg = ml_collections.ConfigDict({ + 'init_from': { + 'restore_input_embedding': True, + 'restore_positional_embedding': True, + 'positional_embed_size_change': 'tile', + }, + 'dataset_configs': { + 'num_frames': 4, + }, + 'model': + ml_collections.ConfigDict({ + 'view_configs': [ + ml_collections.ConfigDict({'patches': { + 'size': (4, 4, 2), + }}), + ml_collections.ConfigDict({'patches': { + 'size': (4, 4, 1), + }}) + ], + 'classifier': 'gap', + 'temporal_encoding_config': { + 'kernel_init_method': 'central_frame_initializer', + 'method': '3d_conv', + } + }) + }) + self.mtv_params = { + 'embedding_view0': { + 'kernel': np.zeros((2, 4, 4, 3, 8)), + 'bias': np.zeros((8)), + }, + 'embedding_view1': { + 'kernel': np.zeros((1, 4, 4, 3, 16)), + 'bias': np.zeros((16)), + }, + 'MultiviewEncoder': { + 'posembed_input_view0': { + 'pos_embedding': np.zeros((1, 6 * 6, 8)), + }, + 'encoderblock_0_view0': jnp.zeros((10)), + 'encoderblock_1_view0': jnp.zeros((10)), + 'posembed_input_view1': { + 'pos_embedding': np.zeros((1, 6 * 6, 16)), + }, + 'encoderblock_0_view1': jnp.zeros((10)), + 'encoderblock_1_view1': jnp.zeros((10)), + 'encoderblock_2_view1': jnp.zeros((10)), + }, + 'output_projection': jnp.zeros((10)), + } + + self.expected_updated_mtv_params = { + 'embedding_view0': { + 'kernel': np.ones((2, 4, 4, 3, 8)), + 'bias': np.ones((8)), + }, + 'embedding_view1': { + 'kernel': np.ones((1, 4, 4, 3, 16)), + 'bias': np.ones((16)), + }, + 'MultiviewEncoder': { + 'posembed_input_view0': { + 'pos_embedding': np.ones((1, 6 * 6, 8)), + }, + 'encoderblock_0_view0': jnp.ones((10)), + 'encoderblock_1_view0': jnp.ones((10)), + 'posembed_input_view1': { + 'pos_embedding': np.ones((1, 6 * 6, 16)), + }, + 'encoderblock_0_view1': jnp.ones((10)), + 'encoderblock_1_view1': jnp.ones((10)), + 'encoderblock_2_view1': jnp.ones((10)), + }, + 'output_projection': jnp.zeros((10)), + } + self.restored_mtv_cfg = ml_collections.ConfigDict({ + 'dataset_configs': { + 'num_frames': 4, + }, + 'model': + ml_collections.ConfigDict({ + 'view_configs': [ + ml_collections.ConfigDict({'patches': { + 'size': (6, 6, 4), + }}), + ml_collections.ConfigDict({'patches': { + 'size': (6, 6, 2), + }}) + ], + 'classifier': 'gap', + 'temporal_encoding_config': { + 'kernel_init_method': 'central_frame_initializer', + 'method': '3d_conv', + } + }) + }) + self.restored_mtv_params = { + 'embedding_view0': { + 'kernel': np.ones((4, 6, 6, 3, 8)), + 'bias': np.ones((8)), + }, + 'embedding_view1': { + 'kernel': np.ones((2, 6, 6, 3, 16)), + 'bias': np.ones((16)), + }, + 'MultiviewEncoder': { + 'posembed_input_view0': { + 'pos_embedding': np.ones((1, 4 * 4, 8)), + }, + 'encoderblock_0_view0': jnp.ones((10)), + 'encoderblock_1_view0': jnp.ones((10)), + 'posembed_input_view1': { + 'pos_embedding': np.ones((1, 4 * 4, 16)), + }, + 'encoderblock_0_view1': jnp.ones((10)), + 'encoderblock_1_view1': jnp.ones((10)), + 'encoderblock_2_view1': jnp.ones((10)), + }, + 'output_projection': jnp.ones((10)), + } + self.restored_vit_params = { + 'embedding': { + 'kernel': np.ones((4, 4, 3, 8)), + 'bias': np.ones((8)), + }, + 'Transformer': { + 'posembed_input': { + 'pos_embedding': jnp.ones((1, 6 * 6, 8)), + }, + 'encoderblock_0': jnp.ones((10)), + 'encoderblock_1': jnp.ones((10)), + 'encoder_norm': jnp.ones((10)), + }, + 'output_projection': jnp.ones((10)), + } + self.restored_vit_cfg = ml_collections.ConfigDict( + {'model': { + 'classifier': 'gap' + }}) + self.expected_updated_mtv_params_from_vit = { + 'embedding_view0': { + # Center frame initialization is used. + 'kernel': + np.concatenate( + [np.zeros((1, 4, 4, 3, 8)), + np.ones((1, 4, 4, 3, 8))], + axis=0), + 'bias': + np.ones((8)), + }, + 'embedding_view1': { + 'kernel': np.zeros((1, 4, 4, 3, 16)), + 'bias': np.zeros((16)), + }, + 'MultiviewEncoder': { + 'posembed_input_view0': { + 'pos_embedding': jnp.ones((1, 6 * 6, 8)), + }, + 'encoderblock_0_view0': jnp.ones((10)), + 'encoderblock_1_view0': jnp.ones((10)), + 'posembed_input_view1': { + 'pos_embedding': np.zeros((1, 6 * 6, 16)), + }, + 'encoderblock_0_view1': jnp.zeros((10)), + 'encoderblock_1_view1': jnp.zeros((10)), + 'encoderblock_2_view1': jnp.zeros((10)), + }, + 'output_projection': jnp.zeros((10)), + } + + def assertDictEqualRecursive(self, actual, expected): + self.assertEqual(type(actual), type(expected)) + if isinstance(actual, dict): + self.assertSameElements(actual.keys(), expected.keys()) + for key, _ in expected.items(): + self.assertDictEqualRecursive(actual[key], expected[key]) + elif isinstance(actual, jnp.ndarray): + self.assertTrue(jnp.array_equal(actual, expected)) + elif isinstance(actual, np.ndarray): + self.assertTrue(np.allclose(actual, expected)) + else: + self.assertEqual(actual, expected) + + def test_interpolate_cls_tokens(self): + cls = np.zeros((1, 4, 1, 4)) + restored_cls = np.ones((1, 8, 1, 4)) + actual = model_utils.interpolate_cls_tokens(cls, restored_cls) + self.assertAllClose(actual, np.ones((1, 4, 1, 4))) + + def test_init_bottleneck_same_dim(self): + params = { + 'bottleneck': np.zeros((1, 4, 4, 8)) + } + restored_bottleneck = np.ones((1, 4, 4, 8)) + model_utils.init_bottleneck(params, restored_bottleneck) + self.assertAllClose(params['bottleneck'], restored_bottleneck) + + def test_init_bottleneck_diff_dim(self): + params = { + 'bottleneck': np.zeros((1, 4, 4, 8)) + } + restored_bottleneck = np.ones((1, 6, 4, 8)) + model_utils.init_bottleneck(params, restored_bottleneck) + self.assertAllClose(params['bottleneck'], np.ones((1, 4, 4, 8))) + + def test_interpolate_input_embedding(self): + embedding_params = { + 'kernel': np.zeros((4, 6, 6, 3, 8)), + 'bias': np.zeros((8)) + } + restored_embedding_params = { + 'kernel': np.ones((2, 4, 4, 3, 8)), + 'bias': np.ones((8)), + } + model_utils.interpolate_input_embedding(embedding_params, + restored_embedding_params) + self.assertAllClose(embedding_params['kernel'], np.ones((4, 6, 6, 3, 8))) + self.assertAllClose(embedding_params['bias'], np.ones((8))) + + def test_initialize_from_mtv_parameters_restore_output_projection(self): + self.mtv_cfg.init_from.positional_embed_size_change = 'resize' + model_utils.initialize_from_mtv_parameters( + self.mtv_cfg, + self.mtv_params, + self.restored_mtv_cfg, + self.restored_mtv_params, + restore_output_projection=True) + self.expected_updated_mtv_params['output_projection'] = jnp.ones((10)) + self.assertDictEqualRecursive(self.mtv_params, + self.expected_updated_mtv_params) + + def test_initialize_from_mtv_parameters_classifier_gap(self): + self.mtv_cfg.init_from.positional_embed_size_change = 'resize' + model_utils.initialize_from_mtv_parameters( + self.mtv_cfg, + self.mtv_params, + self.restored_mtv_cfg, + self.restored_mtv_params, + restore_output_projection=False) + self.assertDictEqualRecursive(self.mtv_params, + self.expected_updated_mtv_params) + + def test_initialize_from_mtv_parameters_classifier_token(self): + self.mtv_cfg.init_from.positional_embed_size_change = 'resize' + self.mtv_params.update({ + 'cls_view0': np.zeros((1, 2, 1, 8)), + 'cls_view1': np.zeros((1, 1, 1, 16)), + }) + self.mtv_params['MultiviewEncoder']['posembed_input_view0'][ + 'pos_embedding'] = np.zeros((1, 1 + 6 * 6, 8)) + self.mtv_params['MultiviewEncoder']['posembed_input_view1'][ + 'pos_embedding'] = np.zeros((1, 1 + 6 * 6, 16)) + self.restored_mtv_params.update({ + 'cls_view0': np.ones((1, 4, 1, 8)), + 'cls_view1': np.ones((1, 2, 1, 16)), + }) + self.restored_mtv_params['MultiviewEncoder']['posembed_input_view0'][ + 'pos_embedding'] = np.ones((1, 1 + 4 * 4, 8)) + self.restored_mtv_params['MultiviewEncoder']['posembed_input_view1'][ + 'pos_embedding'] = np.ones((1, 1 + 4 * 4, 16)) + self.mtv_cfg.model.classifier = 'token' + self.restored_mtv_cfg.model.classifier = 'token' + model_utils.initialize_from_mtv_parameters( + self.mtv_cfg, + self.mtv_params, + self.restored_mtv_cfg, + self.restored_mtv_params, + restore_output_projection=False) + self.expected_updated_mtv_params.update({ + 'cls_view0': np.ones((1, 2, 1, 8)), + 'cls_view1': np.ones((1, 1, 1, 16)), + }) + self.expected_updated_mtv_params['MultiviewEncoder'][ + 'posembed_input_view0']['pos_embedding'] = jnp.ones((1, 1 + 6 * 6, 8)) + self.expected_updated_mtv_params['MultiviewEncoder'][ + 'posembed_input_view1']['pos_embedding'] = jnp.ones((1, 1 + 6 * 6, 16)) + self.assertDictEqualRecursive(self.mtv_params, + self.expected_updated_mtv_params) + + @parameterized.parameters('gap', 'token') + def test_initialize_one_view_from_vit_parameters_classifier_gap( + self, restored_model_classifier): + self.restored_vit_cfg.model.classifier = restored_model_classifier + if restored_model_classifier == 'token': + self.restored_vit_params['Transformer']['posembed_input'][ + 'pos_embedding'] = jnp.ones((1, 6 * 6 + 1, 8)) + model_utils.initialize_one_view_from_vit_parameters( + self.mtv_cfg, + self.mtv_params, + self.restored_vit_cfg, + self.restored_vit_params, + view_idx=0) + self.assertDictEqualRecursive(self.mtv_params, + self.expected_updated_mtv_params_from_vit) + + def test_initialize_one_view_from_vit_parameters_cross_attention(self): + self.mtv_params['MultiviewEncoder'].pop('encoderblock_1_view0') + self.mtv_params['MultiviewEncoder'].pop('encoderblock_1_view1') + self.mtv_params['MultiviewEncoder']['cross_view_encoderblock_1'] = { + 'msa_ln_view0': jnp.zeros((10)), + 'msa_ln_view1': jnp.zeros((10)), + 'msa_view0': jnp.zeros((10)), + 'msa_view1': jnp.zeros((10)), + 'cross_attention_ln_view0': jnp.zeros((10)), + 'cross_attention_ln_view1': jnp.zeros((10)), + 'cross_attention_view0_1': jnp.zeros((10)), + 'mlp_ln_view0': jnp.zeros((10)), + 'mlp_ln_view1': jnp.zeros((10)), + 'mlp_view0': jnp.zeros((10)), + 'mlp_view1': jnp.zeros((10)), + } + self.restored_vit_params['Transformer']['encoderblock_1'] = { + 'LayerNorm_0': jnp.ones((10)), + 'LayerNorm_1': jnp.ones((10)), + 'MultiHeadDotProductAttention_0': jnp.ones((10)), + 'MlpBlock_0': jnp.ones((10)), + } + self.expected_updated_mtv_params_from_vit['MultiviewEncoder'].pop( + 'encoderblock_1_view0') + self.expected_updated_mtv_params_from_vit['MultiviewEncoder'].pop( + 'encoderblock_1_view1') + self.expected_updated_mtv_params_from_vit['MultiviewEncoder'][ + 'cross_view_encoderblock_1'] = { + 'msa_ln_view0': jnp.ones((10)), + 'msa_ln_view1': jnp.zeros((10)), + 'msa_view0': jnp.ones((10)), + 'msa_view1': jnp.zeros((10)), + 'cross_attention_ln_view0': jnp.zeros((10)), + 'cross_attention_ln_view1': jnp.zeros((10)), + 'cross_attention_view0_1': jnp.zeros((10)), + 'mlp_ln_view0': jnp.ones((10)), + 'mlp_ln_view1': jnp.zeros((10)), + 'mlp_view0': jnp.ones((10)), + 'mlp_view1': jnp.zeros((10)), + } + model_utils.initialize_one_view_from_vit_parameters( + self.mtv_cfg, + self.mtv_params, + self.restored_vit_cfg, + self.restored_vit_params, + view_idx=0) + self.assertDictEqualRecursive(self.mtv_params, + self.expected_updated_mtv_params_from_vit) + + @parameterized.parameters('gap', 'token') + def test_initialize_one_view_from_vit_parameters_classifier_token( + self, restored_model_classifier): + self.mtv_cfg.model.classifier = 'token' + self.mtv_params.update({ + 'cls_view0': np.zeros((1, 2, 1, 8)), + 'cls_view1': np.zeros((1, 1, 1, 16)), + }) + self.mtv_params['MultiviewEncoder']['posembed_input_view0'][ + 'pos_embedding'] = np.zeros((1, 1 + 6 * 6, 8)) + self.mtv_params['MultiviewEncoder']['posembed_input_view1'][ + 'pos_embedding'] = np.zeros((1, 1 + 6 * 6, 8)) + self.restored_vit_cfg.model.classifier = restored_model_classifier + if restored_model_classifier == 'token': + self.restored_vit_params.update({'cls': np.ones((1, 1, 8))}) + self.restored_vit_params['Transformer']['posembed_input'][ + 'pos_embedding'] = jnp.ones((1, 1 + 6 * 6, 8)) + self.expected_updated_mtv_params_from_vit['MultiviewEncoder'][ + 'posembed_input_view0']['pos_embedding'] = jnp.ones((1, 1 + 6 * 6, 8)) + else: + self.expected_updated_mtv_params_from_vit['MultiviewEncoder'][ + 'posembed_input_view0']['pos_embedding'] = jnp.concatenate([ + jnp.zeros((1, 1, 8)), + jnp.ones((1, 6 * 6, 8)), + ], + axis=1) + self.expected_updated_mtv_params_from_vit['MultiviewEncoder'][ + 'posembed_input_view1']['pos_embedding'] = np.zeros((1, 1 + 6 * 6, 8)) + if restored_model_classifier == 'token': + self.expected_updated_mtv_params_from_vit.update({ + 'cls_view0': jnp.ones((1, 2, 1, 8)), + 'cls_view1': np.zeros((1, 1, 1, 16)), + }) + else: + self.expected_updated_mtv_params_from_vit.update({ + 'cls_view0': np.zeros((1, 2, 1, 8)), + 'cls_view1': np.zeros((1, 1, 1, 16)), + }) + model_utils.initialize_one_view_from_vit_parameters( + self.mtv_cfg, + self.mtv_params, + self.restored_vit_cfg, + self.restored_vit_params, + view_idx=0) + self.assertDictEqualRecursive(self.mtv_params, + self.expected_updated_mtv_params_from_vit) + + +if __name__ == '__main__': + tf.test.main() diff --git a/scenic/projects/mtv/mtv.png b/scenic/projects/mtv/mtv.png new file mode 100644 index 0000000000000000000000000000000000000000..f956e238310039e817edc8c0cd584017c0e1e2c8 --- /dev/null +++ b/scenic/projects/mtv/mtv.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d412910a80cf75274a287a06df0ec6cd81565c95731b3a2abe5af14940c6fde4 +size 505477 diff --git a/scenic/projects/mtv/requirements.txt b/scenic/projects/mtv/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..a8b80d2eae33eb559e6dcbff243d5f4667c34756 --- /dev/null +++ b/scenic/projects/mtv/requirements.txt @@ -0,0 +1,2 @@ +dmvr @ git+https://github.com/deepmind/dmvr.git +seaborn>=0.11.2 diff --git a/scenic/projects/mtv/train_utils.py b/scenic/projects/mtv/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..1df5c5780de8e264212879fd9a871f494a98eca9 --- /dev/null +++ b/scenic/projects/mtv/train_utils.py @@ -0,0 +1,294 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Utilities for MTV.""" + +from typing import Any, Callable, Dict, Optional, Tuple, Union + +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.projects.vivit import train_utils as vivit_train_utils +from scenic.train_lib import train_utils + +# Aliases for custom types: +Array = Union[jnp.ndarray, np.ndarray] +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] +LrFn = Callable[[int], jnp.ndarray] + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + lr_fn: LrFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[ + train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, Any] +]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, params, and optimizer. The buffer of this argument can + be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + lr_fn: The learning rate fn used for the logging the learning rate. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training and computed metrics and some training logs. + """ + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + rng=mixup_rng, + ) + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + logits, new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params']) + return loss, (new_model_state, logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (train_cost, (new_model_state, logits)), grad = compute_gradient_fn( + train_state.params + ) + + del train_cost + if config.get('max_grad_norm') is not None: + grad = clip_grads(grad, config.max_grad_norm) + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + assert train_state.tx is not None + updates, new_opt_state = train_state.tx.update( + grad, train_state.opt_state, train_state.params + ) + new_params = optax.apply_updates(train_state.params, updates) + + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)]) + ) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + # TODO(dehghani): Can we get this from the optimizer instead? + training_logs['learning_rate'] = lr_fn(train_state.global_step) + + metrics = metrics_fn(logits, batch) + + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng, + ) + + return new_train_state, metrics, training_logs + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + return_logits_and_labels: bool = False, + return_confusion_matrix: bool = False, + debug: Optional[bool] = False +) -> Union[ + Tuple[Dict[str, Tuple[float, int]], jnp.ndarray, jnp.ndarray], + Tuple[Dict[str, Tuple[float, int]], jnp.ndarray], + Dict[str, Tuple[float, int]], +]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + return_logits_and_labels: If true, returns logits and labels. Can be used + for calculating the Mean Average Precision for multi-label problems. + Only one of "return_logits_and_labels" and "return_confusion_matrix" + should be true, with the latter taking precedence if both are set as true. + return_confusion_matrix: If true, returns confusion matrix. Can be used + to calculate additional metrics for k-way classification problems. + debug: Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics [and optionally logits or confusion matrix]. + """ + variables = {'params': train_state.params, **train_state.model_state} + logits = flax_model.apply( + variables, batch['inputs'], train=False, mutable=False, debug=debug) + metrics = metrics_fn(logits, batch) + + if return_confusion_matrix: + confusion_matrix = vivit_train_utils.get_confusion_matrix( + labels=batch['label'], logits=logits, batch_mask=batch['batch_mask'] + ) + confusion_matrix = jax.lax.all_gather(confusion_matrix, 'batch') + return metrics, confusion_matrix + + if return_logits_and_labels: + logits = jax.lax.all_gather(logits, 'batch') + labels = jax.lax.all_gather(batch['label'], 'batch') + return metrics, logits, labels + + return metrics + + +def test_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + n_clips: int = 2, + return_logits_and_labels: bool = False, + softmax_logits: bool = False, + debug: bool = False +) -> Union[ + Dict[str, Tuple[float, int]], + Tuple[Dict[str, Tuple[float, int]], jnp.ndarray, jnp.ndarray], +]: + """Runs a single step of testing. + + For multi-crop testing, we assume that num_crops consecutive entries in the + batch are from the same example. And we average the logits over these examples + + We assume that the batch contains different crops of the same original + example. Therefore, we can average all the logits of it. + This assumption is true when local_batch_size = num_local_devices + + Args: + train_state: The state of training including the current + global_step, model_state, rng, and optimizer, and other metadata. + batch: Dictionary with keys 'inputs', 'labels', 'batch_mask'. We assume that + all the inputs correspond to the same original example in the test set. + The input shapes to this function are batch['inputs'] = [num_crops, t, h, + w, c] batch['labels'] = [num_crops, num_classes] However, for + classification, the labels for all the crops are the same. + batch['batch_mask'] = [num_crops] + flax_model: A Flax model. + metrics_fn: Metrics function for the model. + n_clips: The number of clips to process at a time by each device. Set + due to memory constraints. + return_logits_and_labels: Whether return logits of the model or not. + softmax_logits: Whether to softmax-normalise the logits before + averaging + debug: Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics [and optionally averaged logits that are of + shape `[1, num_classes]`]. + """ + + all_logits = jnp.zeros(batch['label'].shape[1]) + assert len(batch['batch_mask'].shape) == 1, ( + 'Spatial padding is not supported in multi-crop evaluation.') + + num_crops = batch['inputs'].shape[0] + + variables = {'params': train_state.params, **train_state.model_state} + for idx in range(0, num_crops, n_clips): + temp_input = batch['inputs'][idx:idx + n_clips] + logits = flax_model.apply( + variables, temp_input, train=False, mutable=False, debug=debug) + if softmax_logits: + logits = nn.softmax(logits, axis=-1) + logits = jnp.sum(logits, axis=0) + all_logits = all_logits + logits + + all_logits = all_logits / num_crops + all_logits = jnp.expand_dims(all_logits, axis=0) + batch['label'] = jnp.expand_dims(batch['label'][0], axis=0) + batch['batch_mask'] = jnp.expand_dims(batch['batch_mask'][0], axis=0) + metrics = metrics_fn(all_logits, batch) + if return_logits_and_labels: + return metrics, all_logits, batch['label'] + return metrics diff --git a/scenic/projects/mtv/trainer.py b/scenic/projects/mtv/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..f5b946a97e4847deebe3295fb44bf53e6f0efb7c --- /dev/null +++ b/scenic/projects/mtv/trainer.py @@ -0,0 +1,477 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script for MTV.""" + +import copy +import functools +import os +from typing import Any, Dict, Tuple + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.projects.mtv import model as model_lib +from scenic.projects.mtv import train_utils as mtv_train_utils +from scenic.projects.vivit import evaluation_lib +from scenic.projects.vivit import train_utils as vivit_train_utils +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils +import tensorflow as tf + + +def init_from_mtv_checkpoint( + config: ml_collections.ConfigDict, + model: model_lib.MTVClassificationModel, + train_state: train_utils.TrainState, +) -> train_utils.TrainState: + """Initialize train state from a MTV checkpoint.""" + if config.init_from.get('model_cfg') is None: + logging.info('model_cfg is empty. Using current model_cfg.') + restored_model_cfg = copy.deepcopy(config) + else: + restored_model_cfg = config.init_from.model_cfg + init_checkpoint_path = config.init_from.get('checkpoint_path') + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + return model.init_from_train_state( + train_state, + restored_train_state, + restored_model_cfg, + restore_output_proj=config.init_from.get('restore_output_projection', + False)) + + +def init_from_vit_checkpoints( + config: ml_collections.ConfigDict, + model: model_lib.MTVClassificationModel, + train_state: train_utils.TrainState, +) -> train_utils.TrainState: + """Initialize train state from ViT checkpoints.""" + if config.init_from.get('model_cfg') is None: + logging.info('model_cfg is empty. Use current model\'s classifier.') + restored_model_cfgs = [] + for _ in range(len(config.model.view_configs)): + restored_model_cfgs.append( + ml_collections.ConfigDict( + {'model': { + 'classifier': config.model.classifier + }})) + else: + restored_model_cfgs = config.init_from.model_cfg + init_checkpoint_paths = config.init_from.get('checkpoint_path') + assert len(init_checkpoint_paths) == len( + config.model.view_configs + ), ('Number of initial checkpoint paths must match with the number of view ' + 'configs.') + checkpoint_formats = config.init_from.get('checkpoint_formats') + checkpoint_formats = (['scenic'] * len(init_checkpoint_paths) + if checkpoint_formats is None else checkpoint_formats) + assert len(checkpoint_formats) == len( + init_checkpoint_paths + ), 'The lengths of checkpoint_formats and init_checkpoint_paths must match.' + assert set(checkpoint_formats).issubset( + {'scenic', + 'big_vision'}), 'Only scenic and big_vision formats are supported.' + restored_train_states = [] + for path, checkpoint_format in zip(init_checkpoint_paths, checkpoint_formats): + if checkpoint_format == 'big_vision': + restored_train_states.append( + pretrain_utils.convert_big_vision_to_scenic_checkpoint( + path, train_state)) + else: + restored_train_states.append( + pretrain_utils.restore_pretrained_checkpoint( + path, train_state, assert_exist=True)) + return model.init_from_vit_train_states(train_state, restored_train_states, + restored_model_cfgs, + checkpoint_formats) + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_state that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + is_multilabel_model = 'multilabel_classification' in config.model_name + compute_map = is_multilabel_model and config.get('compute_map', False) + get_confusion_matrix = (config.get('confusion_matrix_metrics', False) + and not is_multilabel_model) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params=params) + # We jit this, such that the arrays that are created on the same device as the + # input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + rng, train_rng = jax.random.split(rng) + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}, + ) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + del train_state.metadata['chrono'] + if (start_step == 0 and config.get('init_from') is not None): + model_type = config.init_from.get('model_type', 'mtv') + if model_type == 'mtv': + train_state = init_from_mtv_checkpoint(config, model, train_state) + elif model_type == 'vit': + train_state = init_from_vit_checkpoints(config, model, train_state) + else: + raise ValueError(f'Unknown model type: {model_type}.') + elif start_step == 0: + logging.info('Training completely from scratch.' + 'Not restoring from any checkpoint.') + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + # Get learning rate scheduler. + learning_rate_fn = lr_schedules.get_learning_rate_fn(config) + + train_step_pmapped = jax.pmap( + functools.partial( + mtv_train_utils.train_step, + flax_model=model.flax_model, + lr_fn=learning_rate_fn, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train, + ), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + mtv_train_utils.eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + return_logits_and_labels=compute_map, + return_confusion_matrix=get_confusion_matrix, + debug=config.debug_eval, + ), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + log_test_steps = 0 + if config.dataset_configs.get('do_multicrop_test'): + log_test_steps = int(steps_per_epoch * + config.dataset_configs.log_test_epochs) + + test_step_pmapped = jax.pmap( + functools.partial( + mtv_train_utils.test_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('test'), + n_clips=config.get('multicrop_clips_per_device', 2), + debug=config.debug_eval, + ), + axis_name='batch', + # We can donate the test_batch's buffer. + donate_argnums=(1,), + ) + + assert config.dataset_configs.test_batch_size == jax.local_device_count(), ( + 'The per-host batch size must be equal to the number of local devices.' + 'This ensures that each TPU device is processing different views of' + 'the same original video.') + + total_test_steps = int( + np.ceil(dataset.meta_data['num_test_examples'] / + (config.get('dataset_configs.test_batch_size') * + config.get('dataset_configs.num_test_clips') * + jax.process_count()))) + steps_per_test = config.get('steps_per_test') or total_test_steps + + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + max_checkpoint_keep = config.get('max_checkpoint_keep', 3) + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, + writer=writer, + every_secs=None, + every_steps=config.get('report_progress_step', log_summary_steps), + ) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs = train_step_pmapped( + train_state, train_batch + ) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate, l2 grads, etc. + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + extra_training_logs.append(t_logs) + + for h in hooks: + # Catch exception in case XProf fails. + try: + h(step) + except ValueError as error: + logging.exception('Hook failed: %r', error) + + # Save a pprof after the first step. + if step == start_step + 1 and lead_host: + profile = jax.profiler.device_memory_profile() + with tf.io.gfile.GFile(os.path.join(workdir, 'memory.pprof'), 'wb') as fp: + fp.write(profile) + ###################### LOG TRAIN SUMMARY ######################## + if ( + (step % log_summary_steps == 1) + or (step == total_steps) + or (lead_host and chrono.warmup) + ): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, train_metrics + ), + extra_training_logs=jax.tree_util.tree_map( + jax.device_get, extra_training_logs + ), + writer=writer, + key_separator='/', + ) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + + chrono.resume() + + ################### EVALUATION ################################ + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + + eval_metrics = [] + additional_summary = None + if compute_map: + eval_logits = [] + eval_labels = [] + n_classes = dataset.meta_data['num_classes'] + if get_confusion_matrix: + confusion_matrices = [] + n_classes = dataset.meta_data['num_classes'] + + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + for _ in range(steps_per_eval): + eval_batch = next(dataset.valid_iter) + e_metrics = eval_step_pmapped(train_state, eval_batch) + if compute_map: + e_metrics, logits_batch, labels_batch = e_metrics + # TODO(dehghani, lucic): Fetching from the device in each step might + # be an unnecessary penalty. Consider updating to async fetching + # as in CL/378384754. + eval_logits.append(vivit_train_utils.to_cpu(logits_batch)) + eval_labels.append(vivit_train_utils.to_cpu(labels_batch)) + if get_confusion_matrix: + e_metrics, conf_matrix = e_metrics + confusion_matrices.append(vivit_train_utils.to_cpu(conf_matrix)) + # Fetch e_metrics to host and store. + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + + # Compute global metrics if applicable from all the batches. + if compute_map: + additional_summary = evaluation_lib.compute_mean_average_precision( + np.concatenate(eval_logits, axis=0), + np.concatenate(eval_labels, axis=0), + return_per_class_ap=n_classes < 10) + if get_confusion_matrix: + additional_summary = evaluation_lib.compute_confusion_matrix_metrics( + confusion_matrices, return_per_class_metrics=n_classes < 10) + if lead_host: + conf_matrix_image = vivit_train_utils.render_confusion_matrices( + confusion_matrices, normalization_method='rows') + conf_matrix_unnorm = vivit_train_utils.render_confusion_matrices( + confusion_matrices, normalization_method='none') + + writer.write_images( + step, {'valid/conf_matrix': conf_matrix_image, + 'valid/conf_matrix_unnormalized': conf_matrix_unnorm}) + + # Log eval summary. + eval_summary = train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + extra_eval_summary=additional_summary, + writer=writer, + key_separator='/') + writer.flush() + del eval_metrics + + chrono.resume() + + ##################### CHECKPOINTING ########################### + if ((step % checkpoint_steps == 1 and step > 1) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + train_utils.handle_checkpointing( + train_state, chrono, workdir, max_checkpoint_keep + ) + chrono.resume() + + ############# MULTICROP TESTING ############################ + if (config.dataset_configs.get('do_multicrop_test') and + ((step % log_test_steps == 1 and step > 1) or step == total_steps)): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('test'): + + test_metrics = [] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + + # At the end of training, evaluate on the whole test set. + if step == total_steps: + steps_per_test = total_test_steps + + logging.info('Starting multicrop test') + for _ in range(steps_per_test): + test_batch = next(dataset.test_iter) + t_metrics = test_step_pmapped(train_state, test_batch) + # Fetch t_metrics to host and store. + test_metrics.append(train_utils.unreplicate_and_get(t_metrics)) + # Log eval summary. + train_utils.log_eval_summary( + step=step, + eval_metrics=test_metrics, + writer=writer, + prefix='test', + key_separator='/') + logging.info('Completed multicrop test') + writer.flush() + # Free up some space. + del test_metrics + + chrono.resume() + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/ncr/README.md b/scenic/projects/ncr/README.md new file mode 100644 index 0000000000000000000000000000000000000000..93c256f79829bbabd8f50f950bb57275c7983a0e --- /dev/null +++ b/scenic/projects/ncr/README.md @@ -0,0 +1,82 @@ +NCR: Learning with Neighbor Consistency for Noisy Labels +== +![NCR: Learning with Neighbor Consistency for Noisy Labels](data/overview.png) + +NCR is a regularization method which encourages the network to make similar +predictions for similar vectors in the feature space. +Details can be found in the [paper](https://arxiv.org/abs/2202.02200), where we +used this method to learn with noisy labels. + + +## Getting Started +The following command will install the required packages for NCR: +```shell +$ pip install -r scenic/projects/ncr/requirements.txt +``` + +## Experiments in Controlled Noisy Labels Dataset +We added [Controlled Noisy Web Labels](https://google.github.io/controlled-noisy-web-labels/index.html) to [TFDS](https://www.tensorflow.org/datasets/catalog/controlled_noisy_web_labels) +as a part of this release. We recommend using `tfds-nightly` and `tf-nightly-gpu` libraries for this code. Please follow the manual download [instructions](https://www.tensorflow.org/datasets/catalog/controlled_noisy_web_labels) to set up the dataset. + +Training configurations for different noise ratios are defined in [configuration files](configs). +An example command-line to train a ResNet18 with NCR in mini-ImageNet-Red with 20% noise +using this [config file](configs/mini_imagenet_blue_ncr_train20.py) +is + +```shell +$ python -m scenic.projects.ncr.main \ + --config=scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train20.py \ + --workdir=mini_imagenet_red_ncr_20/ +``` + +Note that the original code for the [paper](https://arxiv.org/abs/2202.02200) was written in TensorFlow, and this repository contains its re-implementation in JAX. +The original Tensorflow version contained a bug when resizing +the images for mini-ImageNet-Red and mini-ImageNet-Blue datasets. This bug has +been fixed in this version. The following results should be obtained by running the code. +These results have been updated in the latest Arxiv version of the +[paper](https://arxiv.org/abs/2202.02200). + +## mini-ImageNet-Red Results + + +| Method | 0% Noise | 20% Noise | 40% Noise | 80% Noise | +|-------------------------|----------|-----------|-----------|-----------| +| Standard | 70.9 | 66.9 | 63.0 | 49.3 | +| Mixup | 70.5 | 67.6 | 63.8 | 48.7 | +| Bootstrap | 71.1 | 67.4 | 63.4 | 48.8 | +| Bootstrap + Mixup | 69.9 | 66.7 | 62.0 | 42.2 | +| Label Smoothing | 71.2 | 68.2 | 64.2 | 50.2 | +| Label Smoothing + Mixup | 71.1 | 68.3 | 63.8 | 47.3 | +| **Ours: NCR** | **72.1** | **69.0** | **64.6** | **51.2** | +| **Ours: NCR + Mixup** | 71.7 | 68.6 | 64.5 | 48.9 | + +## mini-ImageNet-Blue Results + +| Method | 0% Noise | 20% Noise | 40% Noise | 80% Noise | +|-------------------------|----------|-----------|-----------|-----------| +| Standard | 72.7 | 63.4 | 55.9 | **13.4** | +| Mixup | 72.6 | 66.5 | 59.4 | 7.8 | +| Bootstrap | 72.8 | 66.5 | 57.4 | **13.4** | +| Bootstrap + Mixup | 71.7 | 64.6 | 53.2 | 7.6 | +| Label Smoothing | 73.0 | 67.7 | 60.6 | 9.1 | +| Label Smoothing + Mixup | 72.5 | 67.9 | 60.9 | 6.8 | +| **Ours: NCR** | **73.4** | 67.8 | 60.6 | 11.5 | +| **Ours: NCR + Mixup** | 73.1 | **68.3** | **61.4** | 7.1 | + + +## Reference + +Please use the following BibTeX entry for citing our paper: + +``` +@inproceedings{iscen2022ncr, + title={Learning with Neighbor Consistency for Noisy Labels}, + author={Iscen, Ahmet and Valmadre, Jack and Arnab, Anurag and Schmid, Cordelia}, + booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition}, + year={2022} +} +``` + +## Questions + +For any questions, contact iscen@google.com. diff --git a/scenic/projects/ncr/__init__.py b/scenic/projects/ncr/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/ncr/base_model.py b/scenic/projects/ncr/base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..b077dae058f4cb4317d3036cb8697c346330eeef --- /dev/null +++ b/scenic/projects/ncr/base_model.py @@ -0,0 +1,197 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base model with NCR regularisation losses.""" + +import functools +from typing import Dict, Optional, Tuple, Union + +from flax.training import common_utils +from immutabledict import immutabledict +import jax +import jax.numpy as jnp +import numpy as np +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import classification_model +from scenic.model_lib.base_models import model_utils +from scenic.projects.ncr import loss + +Array = Union[jnp.ndarray, np.ndarray] + +_CLASSIFICATION_METRICS = immutabledict({ + 'accuracy': + (model_utils.weighted_correctly_classified, model_utils.num_examples), + 'loss_xentropy': (model_utils.weighted_unnormalized_softmax_cross_entropy, + model_utils.num_examples), +}) + + +class NCRModel(base_model.BaseModel): + """Abstract class for model with NCR losses. + + Supports both softmax-classification and multi-label classification models. + """ + + def loss_function( # pytype: disable=signature-mismatch # overriding-return-type-checks + self, + logits: Array, + batch: base_model.Batch, + use_ncr: bool = False, + use_bootstrap: bool = False, + features: Optional[Array] = None, + memory_logits: Optional[Array] = None, + memory_features: Optional[Array] = None, + loss_weight: Optional[float] = 0.0, + model_params: Optional[Array] = None) -> Tuple[float, Dict[str, Array]]: + + if use_ncr: + return self.ncr_loss(logits, batch, features, memory_logits, + memory_features, loss_weight, model_params) + else: + return self.ce_loss(logits, batch, model_params, use_bootstrap, + loss_weight) + + def ce_loss( + self, + logits: Array, + batch: base_model.Batch, + model_params: Optional[Array] = None, + use_bootstrap: bool = False, + loss_weight: Optional[float] = 1.0) -> Tuple[float, Dict[str, Array]]: + """Returns softmax cross entropy loss with an L2 penalty on the weights. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + use_bootstrap: Enable the bootstrap loss term + loss_weight: Weight for the bootstrap loss term + + Returns: + Total loss. + """ + weights = batch.get('batch_mask') + loss_metrics = {} + + if self.dataset_meta_data.get('target_is_onehot', False): + one_hot_targets = batch['label'] + else: + one_hot_targets = common_utils.onehot(batch['label'], logits.shape[-1]) + + softmax_ce_loss = model_utils.weighted_softmax_cross_entropy( + logits, + one_hot_targets, + weights, + label_smoothing=self.config.get('label_smoothing')) + loss_metrics['softmax_cross_entropy'] = softmax_ce_loss + + if self.config.get('l2_decay_factor') is None: + total_loss = softmax_ce_loss + else: + l2_loss = model_utils.l2_regularization(model_params) + total_loss = softmax_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + + if use_bootstrap: + bootstrap_labels = jax.nn.softmax(logits) + bootstrap_loss = model_utils.weighted_softmax_cross_entropy( + logits, + bootstrap_labels, + weights, + label_smoothing=self.config.get('label_smoothing')) + total_loss = (1.0 - loss_weight) * total_loss + ( + loss_weight * bootstrap_loss) + + # Add the dummy entry for the NCR loss + loss_metrics['ncr_loss'] = 0.0 + loss_metrics['total_loss'] = total_loss + + return total_loss, loss_metrics # pytype: disable=bad-return-type # jax-ndarray + + def ncr_loss( + self, + logits: Array, + batch: base_model.Batch, + features: Array, + batch_logits: Array, + batch_features: Array, + ncr_loss_weight: float, + model_params: Optional[Array] = None) -> Tuple[float, Dict[str, Array]]: + """Returns softmax cross entropy loss with an L2 penalty on the weights. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + features: Feature embeddings of batch inputs, + batch_logits: Logits corresponding to the batch items to be queried from + batch_features: Features corresponding to the batch items to be queried + from + ncr_loss_weight: The weight of the NCR loss term + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + weights = batch.get('batch_mask') + loss_metrics = {} + + if self.dataset_meta_data.get('target_is_onehot', False): + one_hot_targets = batch['label'] + else: + one_hot_targets = common_utils.onehot(batch['label'], logits.shape[-1]) + + softmax_ce_loss = model_utils.weighted_softmax_cross_entropy( + logits, + one_hot_targets, + weights, + label_smoothing=self.config.get('label_smoothing')) + + softmax_ce_loss = (1.0 - ncr_loss_weight) * softmax_ce_loss + loss_metrics['softmax_cross_entropy'] = softmax_ce_loss + if self.config.get('l2_decay_factor') is None: + total_loss = softmax_ce_loss + else: + l2_loss = model_utils.l2_regularization(model_params) + total_loss = softmax_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + + # Add NCR loss + ncr_loss = loss.ncr_loss( + logits, features, batch_logits, batch_features, + number_neighbours=self.config.ncr.number_neighbours, + smoothing_gamma=self.config.ncr.smoothing_gamma, + temperature=self.config.ncr.temperature, + example_weights=weights) + total_loss += ncr_loss_weight * ncr_loss + loss_metrics['ncr_loss'] = ncr_loss + loss_metrics['total_loss'] = total_loss + + return total_loss, loss_metrics # pytype: disable=bad-return-type # jax-ndarray + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + batch)``` + """ + del split # For all splits, we return the same metric functions. + + return functools.partial( + classification_model.classification_metrics_function, + target_is_onehot=self.dataset_meta_data.get('target_is_onehot', + False), + metrics=_CLASSIFICATION_METRICS) diff --git a/scenic/projects/ncr/classification_trainer.py b/scenic/projects/ncr/classification_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..2ea7b2f13a2009d484724c456876b4730b670fef --- /dev/null +++ b/scenic/projects/ncr/classification_trainer.py @@ -0,0 +1,477 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training loop.""" + +import functools +import math +import pdb # pylint: disable=unused-import + +from typing import Any, Callable, Dict, Optional, Tuple, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.ncr import utils +from scenic.train_lib import train_utils + + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Any +PyTree = Any + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + use_ncr: bool, + *, + use_bootstrap: bool, + flax_model: nn.Module, + loss_fn: LossFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + use_ncr: Whether the NCR loss is used or not. + use_bootstrap: Whether the bootstrap loss is used or not. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, computed metrics, and learning rate for logging. + """ + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + rng, mixup_rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + rng=mixup_rng) + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + model_outputs, new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + + logits = model_outputs['logits'] + + # For NCR models. + if use_ncr: + ncr_loss_weight = config.ncr.loss_weight + features = model_outputs[config.ncr.ncr_feature] + logits_all, features_all = utils.all_gather((logits, features)) + logging.info('logits.shape: %s. logits_all.shape %s', logits.shape, + logits_all.shape) + + loss, loss_metrics = loss_fn(logits, batch, use_ncr, use_bootstrap, + features, logits_all, + features_all, ncr_loss_weight, + variables['params']) + else: + # For classification baseline model. + bootstrap_loss_weight = config.get('bootstrap_weight', 0.0) + + loss, loss_metrics = loss_fn( + logits=logits, batch=batch, use_ncr=use_ncr, + use_bootstrap=use_bootstrap, + loss_weight=bootstrap_loss_weight, + model_params=variables['params']) + + return loss, (new_model_state, logits, loss_metrics) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + step = train_state.global_step + + (train_cost, + (new_model_state, logits, loss_metrics) + ), grad = compute_gradient_fn(train_state.params) + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm', None) is not None: + grad = clip_grads(grad, config.max_grad_norm) + + updates, new_opt_state = train_state.tx.update( + grad, + train_state.opt_state, + train_state.params) + + new_params = optax.apply_updates(train_state.params, updates) + + metrics = metrics_fn(logits, batch) + for metric_name, metric_value in loss_metrics.items(): + metrics[metric_name] = (metric_value, 1) # Normalizer here is 1. + + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=step + 1, + opt_state=new_opt_state, + model_state=new_model_state, + params=new_params, + rng=new_rng) + return new_train_state, metrics + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], jnp.ndarray]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + debug: Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and Logits. + """ + variables = { + 'params': train_state.params, + **train_state.model_state + } + model_outputs = flax_model.apply( + variables, batch['inputs'], train=False, mutable=False, debug=debug) + if isinstance(model_outputs, dict): + # For NCR models. + logits = model_outputs['logits'] + else: + # For baseline models. + logits = model_outputs + metrics = metrics_fn(logits, batch) + return metrics, logits + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_state that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create optimizer. + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + + lr_fn = optax.warmup_cosine_decay_schedule( + init_value=0.0, + peak_value=config.lr_configs.base_learning_rate, + warmup_steps=config.lr_configs.warmup_steps, + decay_steps=config.lr_configs.steps_per_cycle, + end_value=0.0) + + tx = optax.chain( + optax.add_decayed_weights( + weight_decay=config.optimizer_configs.weight_decay), + optax.sgd(lr_fn, momentum=config.optimizer_configs.momentum) + ) + + opt_state = jax.jit(tx.init, backend='cpu')(params) + + _, train_rng = jax.random.split(rng) + + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + model_state=model_state, + params=params, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = utils.restore_checkpoint(workdir, train_state) + # Replicate the optimzier, state, and rng. + + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + # Initial value for use_ncr + use_bootstrap = False + if config.loss_type == 'cross_entropy': + use_ncr = False + if config.get('use_bootstrap'): + use_bootstrap = True + elif config.loss_type == 'ncr' and config.ncr.starting_epoch > 0: + use_ncr = False + elif config.loss_type == 'ncr': + use_ncr = True + else: + raise ValueError(f'Unknown loss type {config.loss_type}.') + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + use_bootstrap=use_bootstrap, + flax_model=model.flax_model, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + static_broadcasted_argnums=(2), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + max_checkpoint_keep = config.get('max_checkpoint_keep', 3) + + # Ceil rounding such that we include the last incomplete batch. + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / config.batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, + writer=writer, + every_secs=None, + every_steps=config.get('report_progress_step', log_summary_steps), + ) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + + for step in range(start_step + 1, total_steps + 1): + + if (not use_ncr) and config.loss_type == 'ncr' and ( + math.floor(step/steps_per_epoch) >= config.ncr.starting_epoch): + use_ncr = True + + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics = train_step_pmapped( + train_state, train_batch, use_ncr) + lr = lr_fn(step) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + extra_training_logs.append({'learning_rate': lr}) + for h in hooks: + h(step) + + ###################### LOG TRAIN SUMMARY ######################## + if (step % log_summary_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + # train_metrics is list of a dictionaries of metrics, where the shape of + # the metrics[key] is [n_local_devices]. However, because metric functions + # have a psum, we have already summed across the whole sharded batch, and + # what's returned is n_local_devices copies of the same summed metric. + # So we do unreplicate and fetch them to host using `unreplicate_and_get`. + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_training_logs), + key_separator='/', + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + eval_metrics = [] + # Sync model state across replicas. + train_state = utils.sync_model_state_across_replicas(train_state) + for _ in range(steps_per_eval): + eval_batch = next(dataset.valid_iter) + e_metrics, _ = eval_step_pmapped(train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + eval_summary = train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + key_separator='/', + writer=writer) + writer.flush() + chrono.resume() + del eval_metrics + ##################### CHECKPOINTING ################### + if ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + train_utils.handle_checkpointing( + train_state, chrono, workdir, max_checkpoint_keep) + chrono.resume() + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regresesion testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/ncr/configs/__init__.py b/scenic/projects/ncr/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/ncr/configs/mini_imagenet_blue_baseline.py b/scenic/projects/ncr/configs/mini_imagenet_blue_baseline.py new file mode 100644 index 0000000000000000000000000000000000000000..f318440172a21a9ca346663f2dba6d78d59f4ab6 --- /dev/null +++ b/scenic/projects/ncr/configs/mini_imagenet_blue_baseline.py @@ -0,0 +1,115 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Baseline config on mini-ImageNet-Blue. + +Based on: https://arxiv.org/abs/2202.02200. + +Change config.dataset_configs.train_split for different noise ratios. + +""" +# pylint: disable=line-too-long + +import ml_collections + +MINI_IMAGENET_BLUE_TRAIN_SIZE = 60000 +NUM_CLASSES = 100 + + +def get_config(runlocal=''): + """Returns the experiment configuration.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'ncr' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'controlled_noisy_web_labels/mini_imagenet_blue' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train_20' # Choose between train_00, train_20, train_40, train_80 + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)|flip_lr' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|resize_small(256)|central_crop(224)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 1000 + + # Model. + config.model_name = 'resnet' + config.num_filters = 64 + config.num_layers = 18 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.weight_decay = 0.0005 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None # Set to 0.5 to enable label smoothing + config.num_training_epochs = 130 + config.log_eval_steps = 5000 + config.batch_size = 8 if runlocal else 128 + config.rng_seed = 1 + + # Learning rate. + steps_per_epoch = MINI_IMAGENET_BLUE_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.warmup_steps = steps_per_epoch * 5 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.1 + + # NCR specific flags + config.loss_type = 'cross_entropy' # Options: cross_entropy or ncr + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.0 # Set to 0.5 to enable mixup + + # Bootstrap + config.use_bootstrap = False + config.bootstrap_weight = 0.5 + + # Logging. + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.xprof = True # Profile using xprof + config.checkpoint = True # do checkpointing + config.checkpoint_steps = 1000 + config.log_summary_steps = 500 + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + + + return config + + diff --git a/scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train00.py b/scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train00.py new file mode 100644 index 0000000000000000000000000000000000000000..526181ec8cfd991b085295f06a66fb43d118079f --- /dev/null +++ b/scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train00.py @@ -0,0 +1,117 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""NCR config on mini-ImageNet-Blue with 0% noise ratio. + +Based on: https://arxiv.org/abs/2202.02200 + +""" +# pylint: disable=line-too-long + +import ml_collections + +MINI_IMAGENET_BLUE_TRAIN_SIZE = 60000 +NUM_CLASSES = 100 + + +def get_config(runlocal=''): + """Returns the experiment configuration.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'ncr' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'controlled_noisy_web_labels/mini_imagenet_blue' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train_00' # Choose between train_00, train_20, train_40, train_80 + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)' + '|value_range(-1, 1)' + '|flip_lr' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|value_range(-1, 1)' + '|resize_small(256)|central_crop(224)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 1000 + + # Model. + config.model_name = 'resnet' + config.num_filters = 64 + config.num_layers = 18 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.weight_decay = 0.0005 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 130 + config.log_eval_steps = 5000 + config.batch_size = 8 if runlocal else 128 + config.rng_seed = 1 + + # Learning rate. + steps_per_epoch = MINI_IMAGENET_BLUE_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.warmup_steps = steps_per_epoch * 5 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.1 + + # NCR specific flags + config.loss_type = 'ncr' # Options: cross_entropy or ncr + config.ncr = ml_collections.ConfigDict() + config.ncr.ncr_feature = 'pre_logits' + config.ncr.number_neighbours = 10 + config.ncr.smoothing_gamma = 1 + config.ncr.temperature = 2.0 + config.ncr.loss_weight = 0.3 + config.ncr.starting_epoch = 10 + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.0 # Set to 0.5 to enable mixup + + # Logging. + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.xprof = True # Profile using xprof + config.checkpoint = True # do checkpointing + config.checkpoint_steps = 1000 + config.log_summary_steps = 500 + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + + + return config + + diff --git a/scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train20.py b/scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train20.py new file mode 100644 index 0000000000000000000000000000000000000000..d1e8d5a8ee4df4bb716f52b4050af6aee86451de --- /dev/null +++ b/scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train20.py @@ -0,0 +1,117 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""NCR config on mini-ImageNet-Blue with 20% noise ratio. + +Based on: https://arxiv.org/abs/2202.02200 + +""" +# pylint: disable=line-too-long + +import ml_collections + +MINI_IMAGENET_BLUE_TRAIN_SIZE = 60000 +NUM_CLASSES = 100 + + +def get_config(runlocal=''): + """Returns the experiment configuration.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'ncr' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'controlled_noisy_web_labels/mini_imagenet_blue' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train_20' # Choose between train_00, train_20, train_40, train_80 + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)' + '|value_range(-1, 1)' + '|flip_lr' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|value_range(-1, 1)' + '|resize_small(256)|central_crop(224)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 1000 + + # Model. + config.model_name = 'resnet' + config.num_filters = 64 + config.num_layers = 18 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.weight_decay = 0.0005 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 130 + config.log_eval_steps = 5000 + config.batch_size = 8 if runlocal else 128 + config.rng_seed = 1 + + # Learning rate. + steps_per_epoch = MINI_IMAGENET_BLUE_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.warmup_steps = steps_per_epoch * 5 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.1 + + # NCR specific flags + config.loss_type = 'ncr' # Options: cross_entropy or ncr + config.ncr = ml_collections.ConfigDict() + config.ncr.ncr_feature = 'pre_logits' + config.ncr.number_neighbours = 10 + config.ncr.smoothing_gamma = 1 + config.ncr.temperature = 2.0 + config.ncr.loss_weight = 0.3 + config.ncr.starting_epoch = 10 + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.0 # Set to 0.5 to enable mixup + + # Logging. + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.xprof = True # Profile using xprof + config.checkpoint = True # do checkpointing + config.checkpoint_steps = 1000 + config.log_summary_steps = 500 + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + + + return config + + diff --git a/scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train40.py b/scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train40.py new file mode 100644 index 0000000000000000000000000000000000000000..1014971ca8ad724a7cc611f8d1c79141338b99a9 --- /dev/null +++ b/scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train40.py @@ -0,0 +1,117 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""NCR config on mini-ImageNet-Blue with 40% noise ratio. + +Based on: https://arxiv.org/abs/2202.02200 + +""" +# pylint: disable=line-too-long + +import ml_collections + +MINI_IMAGENET_BLUE_TRAIN_SIZE = 60000 +NUM_CLASSES = 100 + + +def get_config(runlocal=''): + """Returns the experiment configuration.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'ncr' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'controlled_noisy_web_labels/mini_imagenet_blue' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train_40' # Choose between train_00, train_20, train_40, train_80 + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)' + '|value_range(-1, 1)' + '|flip_lr' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|value_range(-1, 1)' + '|resize_small(256)|central_crop(224)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 1000 + + # Model. + config.model_name = 'resnet' + config.num_filters = 64 + config.num_layers = 18 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.weight_decay = 0.0005 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 130 + config.log_eval_steps = 5000 + config.batch_size = 8 if runlocal else 128 + config.rng_seed = 1 + + # Learning rate. + steps_per_epoch = MINI_IMAGENET_BLUE_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.warmup_steps = steps_per_epoch * 5 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.1 + + # NCR specific flags + config.loss_type = 'ncr' # Options: cross_entropy or ncr + config.ncr = ml_collections.ConfigDict() + config.ncr.ncr_feature = 'pre_logits' + config.ncr.number_neighbours = 100 + config.ncr.smoothing_gamma = 1 + config.ncr.temperature = 2.0 + config.ncr.loss_weight = 0.3 + config.ncr.starting_epoch = 10 + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.0 # Set to 0.5 to enable mixup + + # Logging. + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.xprof = True # Profile using xprof + config.checkpoint = True # do checkpointing + config.checkpoint_steps = 1000 + config.log_summary_steps = 500 + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + + + return config + + diff --git a/scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train80.py b/scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train80.py new file mode 100644 index 0000000000000000000000000000000000000000..2bcc9061633a46b1d756088254338536b5b81617 --- /dev/null +++ b/scenic/projects/ncr/configs/mini_imagenet_blue_ncr_train80.py @@ -0,0 +1,117 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""NCR config on mini-ImageNet-Blue with 80% noise ratio. + +Based on: https://arxiv.org/abs/2202.02200 + +""" +# pylint: disable=line-too-long + +import ml_collections + +MINI_IMAGENET_BLUE_TRAIN_SIZE = 60000 +NUM_CLASSES = 100 + + +def get_config(runlocal=''): + """Returns the experiment configuration.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'ncr' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'controlled_noisy_web_labels/mini_imagenet_blue' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train_80' # Choose between train_00, train_20, train_40, train_80 + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)' + '|value_range(-1, 1)' + '|flip_lr' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|value_range(-1, 1)' + '|resize_small(256)|central_crop(224)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 1000 + + # Model. + config.model_name = 'resnet' + config.num_filters = 64 + config.num_layers = 18 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.weight_decay = 0.0005 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 130 + config.log_eval_steps = 5000 + config.batch_size = 8 if runlocal else 128 + config.rng_seed = 1 + + # Learning rate. + steps_per_epoch = MINI_IMAGENET_BLUE_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.warmup_steps = steps_per_epoch * 5 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.1 + + # NCR specific flags + config.loss_type = 'ncr' # Options: cross_entropy or ncr + config.ncr = ml_collections.ConfigDict() + config.ncr.ncr_feature = 'pre_logits' + config.ncr.number_neighbours = 5 + config.ncr.smoothing_gamma = 1 + config.ncr.temperature = 2.0 + config.ncr.loss_weight = 0.3 + config.ncr.starting_epoch = 10 + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.0 # Set to 0.5 to enable mixup + + # Logging. + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.xprof = True # Profile using xprof + config.checkpoint = True # do checkpointing + config.checkpoint_steps = 1000 + config.log_summary_steps = 500 + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + + + return config + + diff --git a/scenic/projects/ncr/configs/mini_imagenet_red_baseline.py b/scenic/projects/ncr/configs/mini_imagenet_red_baseline.py new file mode 100644 index 0000000000000000000000000000000000000000..0c8b62039f81af4aa0cca5ed501e984aadc88e4d --- /dev/null +++ b/scenic/projects/ncr/configs/mini_imagenet_red_baseline.py @@ -0,0 +1,115 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Baseline config on mini-ImageNet-Red. + +Based on: https://arxiv.org/abs/2202.02200. + +Change config.dataset_configs.train_split for different noise ratios. + +""" +# pylint: disable=line-too-long + +import ml_collections + +MINI_IMAGENET_RED_TRAIN_SIZE = 50000 +NUM_CLASSES = 100 + + +def get_config(runlocal=''): + """Returns the experiment configuration.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'ncr' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'controlled_noisy_web_labels/mini_imagenet_red' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train_00' # Choose between train_00, train_20, train_40, train_80 + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)|flip_lr' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|resize_small(256)|central_crop(224)' + '|value_range(-1, 1)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 1000 + + # Model. + config.model_name = 'resnet' + config.num_filters = 64 + config.num_layers = 18 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.weight_decay = 0.0005 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None # Set to 0.5 to enable label smoothing + config.num_training_epochs = 130 + config.log_eval_steps = 5000 + config.batch_size = 32 if runlocal else 128 + config.rng_seed = 1 + + # Learning rate. + steps_per_epoch = MINI_IMAGENET_RED_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.warmup_steps = steps_per_epoch * 5 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.1 + + # NCR specific flags + config.loss_type = 'cross_entropy' # Options: cross_entropy or ncr + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.0 # Set to 0.5 to enable mixup + + # Bootstrap + config.use_bootstrap = False + config.bootstrap_weight = 0.5 + + # Logging. + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.xprof = True # Profile using xprof + config.checkpoint = True # do checkpointing + config.checkpoint_steps = 1000 + config.log_summary_steps = 500 + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + + + return config + + diff --git a/scenic/projects/ncr/configs/mini_imagenet_red_ncr_train00.py b/scenic/projects/ncr/configs/mini_imagenet_red_ncr_train00.py new file mode 100644 index 0000000000000000000000000000000000000000..b51b9c2301d3b9bb256052bb0c59a789a232d4f9 --- /dev/null +++ b/scenic/projects/ncr/configs/mini_imagenet_red_ncr_train00.py @@ -0,0 +1,117 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""NCR config on mini-ImageNet-Red with 0% noise ratio. + +Based on: https://arxiv.org/abs/2202.02200 + +""" +# pylint: disable=line-too-long + +import ml_collections + +MINI_IMAGENET_RED_TRAIN_SIZE = 50000 +NUM_CLASSES = 100 + + +def get_config(runlocal=''): + """Returns the experiment configuration.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'ncr' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'controlled_noisy_web_labels/mini_imagenet_red' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train_00' # Choose between train_00, train_20, train_40, train_80 + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)' + '|value_range(-1, 1)' + '|flip_lr' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|value_range(-1, 1)' + '|resize_small(256)|central_crop(224)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 1000 + + # Model. + config.model_name = 'resnet' + config.num_filters = 64 + config.num_layers = 18 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.weight_decay = 0.0005 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 130 + config.log_eval_steps = 5000 + config.batch_size = 8 if runlocal else 128 + config.rng_seed = 1 + + # Learning rate. + steps_per_epoch = MINI_IMAGENET_RED_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.warmup_steps = steps_per_epoch * 5 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.1 + + # NCR specific flags + config.loss_type = 'ncr' # Options: cross_entropy or ncr + config.ncr = ml_collections.ConfigDict() + config.ncr.ncr_feature = 'pre_logits' + config.ncr.number_neighbours = 10 + config.ncr.smoothing_gamma = 1 + config.ncr.temperature = 2.0 + config.ncr.loss_weight = 0.3 + config.ncr.starting_epoch = 10 + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.0 # Set to 0.5 to enable mixup + + # Logging. + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.xprof = True # Profile using xprof + config.checkpoint = True # do checkpointing + config.checkpoint_steps = 1000 + config.log_summary_steps = 500 + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + + + return config + + diff --git a/scenic/projects/ncr/configs/mini_imagenet_red_ncr_train20.py b/scenic/projects/ncr/configs/mini_imagenet_red_ncr_train20.py new file mode 100644 index 0000000000000000000000000000000000000000..142a5f6299c771777c6af138b2d4656b8d445966 --- /dev/null +++ b/scenic/projects/ncr/configs/mini_imagenet_red_ncr_train20.py @@ -0,0 +1,117 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""NCR config on mini-ImageNet-Red with 20% noise ratio. + +Based on: https://arxiv.org/abs/2202.02200 + +""" +# pylint: disable=line-too-long + +import ml_collections + +MINI_IMAGENET_RED_TRAIN_SIZE = 50000 +NUM_CLASSES = 100 + + +def get_config(runlocal=''): + """Returns the experiment configuration.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'ncr' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'controlled_noisy_web_labels/mini_imagenet_red' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train_20' # Choose between train_00, train_20, train_40, train_80 + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)' + '|value_range(-1, 1)' + '|flip_lr' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|value_range(-1, 1)' + '|resize_small(256)|central_crop(224)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 1000 + + # Model. + config.model_name = 'resnet' + config.num_filters = 64 + config.num_layers = 18 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.weight_decay = 0.0005 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 130 + config.log_eval_steps = 5000 + config.batch_size = 8 if runlocal else 128 + config.rng_seed = 1 + + # Learning rate. + steps_per_epoch = MINI_IMAGENET_RED_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.warmup_steps = steps_per_epoch * 5 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.1 + + # NCR specific flags + config.loss_type = 'ncr' # Options: cross_entropy or ncr + config.ncr = ml_collections.ConfigDict() + config.ncr.ncr_feature = 'pre_logits' + config.ncr.number_neighbours = 10 + config.ncr.smoothing_gamma = 1 + config.ncr.temperature = 2.0 + config.ncr.loss_weight = 0.3 + config.ncr.starting_epoch = 10 + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.0 # Set to 0.5 to enable mixup + + # Logging. + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.xprof = True # Profile using xprof + config.checkpoint = True # do checkpointing + config.checkpoint_steps = 1000 + config.log_summary_steps = 500 + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + + + return config + + diff --git a/scenic/projects/ncr/configs/mini_imagenet_red_ncr_train40.py b/scenic/projects/ncr/configs/mini_imagenet_red_ncr_train40.py new file mode 100644 index 0000000000000000000000000000000000000000..18a031633cdf00296abbdf10290f26c39f3b2a17 --- /dev/null +++ b/scenic/projects/ncr/configs/mini_imagenet_red_ncr_train40.py @@ -0,0 +1,117 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""NCR config on mini-ImageNet-Red with 40% noise ratio. + +Based on: https://arxiv.org/abs/2202.02200 + +""" +# pylint: disable=line-too-long + +import ml_collections + +MINI_IMAGENET_RED_TRAIN_SIZE = 50000 +NUM_CLASSES = 100 + + +def get_config(runlocal=''): + """Returns the experiment configuration.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'ncr' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'controlled_noisy_web_labels/mini_imagenet_red' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train_40' # Choose between train_00, train_20, train_40, train_80 + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)' + '|value_range(-1, 1)' + '|flip_lr' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|value_range(-1, 1)' + '|resize_small(256)|central_crop(224)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 1000 + + # Model. + config.model_name = 'resnet' + config.num_filters = 64 + config.num_layers = 18 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.weight_decay = 0.0005 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 130 + config.log_eval_steps = 5000 + config.batch_size = 8 if runlocal else 128 + config.rng_seed = 1 + + # Learning rate. + steps_per_epoch = MINI_IMAGENET_RED_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.warmup_steps = steps_per_epoch * 5 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.1 + + # NCR specific flags + config.loss_type = 'ncr' # Options: cross_entropy or ncr + config.ncr = ml_collections.ConfigDict() + config.ncr.ncr_feature = 'pre_logits' + config.ncr.number_neighbours = 100 + config.ncr.smoothing_gamma = 1 + config.ncr.temperature = 2.0 + config.ncr.loss_weight = 0.3 + config.ncr.starting_epoch = 10 + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.0 # Set to 0.5 to enable mixup + + # Logging. + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.xprof = True # Profile using xprof + config.checkpoint = True # do checkpointing + config.checkpoint_steps = 1000 + config.log_summary_steps = 500 + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + + + return config + + diff --git a/scenic/projects/ncr/configs/mini_imagenet_red_ncr_train80.py b/scenic/projects/ncr/configs/mini_imagenet_red_ncr_train80.py new file mode 100644 index 0000000000000000000000000000000000000000..8746633bfb688984454010821df9b77b3e166ac5 --- /dev/null +++ b/scenic/projects/ncr/configs/mini_imagenet_red_ncr_train80.py @@ -0,0 +1,117 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""NCR config on mini-ImageNet-Red with 80% noise ratio. + +Based on: https://arxiv.org/abs/2202.02200 + +""" +# pylint: disable=line-too-long + +import ml_collections + +MINI_IMAGENET_RED_TRAIN_SIZE = 50000 +NUM_CLASSES = 100 + + +def get_config(runlocal=''): + """Returns the experiment configuration.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'ncr' + # Dataset. + config.dataset_name = 'bit' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'controlled_noisy_web_labels/mini_imagenet_red' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train_80' # Choose between train_00, train_20, train_40, train_80 + config.dataset_configs.val_split = 'validation' + config.dataset_configs.pp_train = ( + 'decode_jpeg_and_inception_crop(224)' + '|value_range(-1, 1)' + '|flip_lr' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.pp_eval = ( + 'decode' + '|value_range(-1, 1)' + '|resize_small(256)|central_crop(224)' + f'|onehot({NUM_CLASSES}, key="label", key_result="labels")' + '|keep("image", "labels")') + config.dataset_configs.prefetch_to_device = 2 + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 1000 + + # Model. + config.model_name = 'resnet' + config.num_filters = 64 + config.num_layers = 18 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.weight_decay = 0.0005 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 130 + config.log_eval_steps = 5000 + config.batch_size = 8 if runlocal else 128 + config.rng_seed = 1 + + # Learning rate. + steps_per_epoch = MINI_IMAGENET_RED_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.warmup_steps = steps_per_epoch * 5 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.1 + + # NCR specific flags + config.loss_type = 'ncr' # Options: cross_entropy or ncr + config.ncr = ml_collections.ConfigDict() + config.ncr.ncr_feature = 'pre_logits' + config.ncr.number_neighbours = 5 + config.ncr.smoothing_gamma = 1 + config.ncr.temperature = 2.0 + config.ncr.loss_weight = 0.3 + config.ncr.starting_epoch = 10 + + # Mixup. + config.mixup = ml_collections.ConfigDict() + config.mixup.bind_to = None + config.mixup.alpha = 0.0 # Set to 0.5 to enable mixup + + # Logging. + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.xprof = True # Profile using xprof + config.checkpoint = True # do checkpointing + config.checkpoint_steps = 1000 + config.log_summary_steps = 500 + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + + + return config + + diff --git a/scenic/projects/ncr/data/__init__.py b/scenic/projects/ncr/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/ncr/data/overview.png b/scenic/projects/ncr/data/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..a312710b72fe5518f6e42c90abeab10ea0355c51 --- /dev/null +++ b/scenic/projects/ncr/data/overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83d625000c36b0988110b11095f014250fc3ab35025cb5ba4a5538bdca7ad336 +size 982023 diff --git a/scenic/projects/ncr/loss.py b/scenic/projects/ncr/loss.py new file mode 100644 index 0000000000000000000000000000000000000000..41c7bff5ab6b25dca391113b699dac334e26f7ca --- /dev/null +++ b/scenic/projects/ncr/loss.py @@ -0,0 +1,159 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Loss functions.""" + +from typing import Optional, Tuple, Union + +import jax +import jax.numpy as jnp +import numpy as np + +Array = Union[jnp.ndarray, np.ndarray] + + +def pairwise_kl_loss(logits: Array, + neighbourhood_logits: Array, + knn_indices: Array, + knn_similarities: Array, + temperature: float, + epsilon: float = 1e-16, + example_weights: Optional[Array] = None) -> float: + """KL Divergence loss weighted by similarity within a neighbourhood. + + Args: + logits: [n, d] array. + neighbourhood_logits: [m, d] array. + knn_indices: [n, k] array of nearest neighbours for each logit. Indexes + into "neighbourhood_logits". Therefore, in each row, each of the k values + are integers in the interval [0, m). + knn_similarities: [n, k] array of each of the similarity scores + corresponding to the knn_indices. + temperature: A float. + epsilon: Small constant for numerical stability. + example_weights: The weight for each example in the batch. Can be used + to account for TPU padding. + + Returns: + The KL divergence of each logit to its neighbourhood, weighted by the + similarity. + """ + n, d = logits.shape + k = knn_indices.shape[1] + + knn_logits = neighbourhood_logits[knn_indices.reshape(-1)].reshape([n, k, d]) + + t_softmax_temp = jax.nn.softmax(knn_logits / temperature) + epsilon + s_softmax_temp = jax.nn.log_softmax(logits / temperature) # [n, d] + + # Normalize the sum of similarities by their sum, so that the new labels + # will sum up to 1. + normalized_sim = knn_similarities / jnp.reshape( + jnp.sum(knn_similarities, axis=-1), (-1, 1)) # [n, k] + + # Multiply the labels by their corresponding similarity value. + weighted_t_softmax = jnp.squeeze( + jnp.matmul(jnp.expand_dims(normalized_sim, 1), t_softmax_temp)) # [n, d] + + kldiv_loss_per_pair = weighted_t_softmax * ( + jnp.log(weighted_t_softmax) - s_softmax_temp) # [n, m] + kldiv_loss_per_example = ( + jnp.power(temperature, 2) * jnp.sum(kldiv_loss_per_pair, 1)) # [n, 1] + + if example_weights is not None: + normalization = example_weights.sum() + else: + normalization = n + return jnp.sum(kldiv_loss_per_example) / (normalization + epsilon) # pytype: disable=bad-return-type # dataclasses-replace + + +def l2_normalize(tensor: Array, axis: int = -1, epsilon: float = 1e-6): + """L2 normalize an input tensor.""" + + return tensor / jnp.linalg.norm(tensor, axis=axis, keepdims=True + epsilon) + + +def get_knn(queries: Array, dataset: Array, k: int, + zero_negative_similarities: bool = True) -> Tuple[Array, Array]: + """Return k nearest neighbours from dataset given queries. + + Args: + queries: An [q, d] array where q is the number of queries, and d the + dimensionality of each query-vector. + dataset: An [n, d] array where n is the number of examples. + k: The number of nearest neighbours to retrieve. + zero_negative_similarities: If true, negative similarities are set to 0. + + Returns: + indices: A [q, k] dimensional array. For each query, the k indices of the + nearest neighbours are returned. + similarities: A [q, k] dimensional array with the similarities to each + query. Similarities and corresponding indices are sorted, in descending + order. + """ + if k <= 0: + k = dataset.shape[0] + if k > dataset.shape[0]: + k = dataset.shape[0] + + queries = l2_normalize(queries, axis=-1) + dataset = l2_normalize(dataset, axis=-1) + + all_similarities = jnp.matmul(queries, jnp.transpose(dataset)) # [q, n] + similarities, indices = jax.lax.top_k(all_similarities, k) + if zero_negative_similarities: + similarities = jax.nn.relu(similarities) + + return indices, similarities + + +def ncr_loss(logits: Array, + features: Array, + batch_logits: Array, + batch_features: Array, + number_neighbours: int, + smoothing_gamma: float, + temperature: float = 1.0, + example_weights: Optional[Array] = None) -> float: + """Computes the Neighbourhood Consistency Regularisation loss. + + Details are in: https://arxiv.org/pdf/2202.02200.pdf + + Args: + logits: An [n_batch, n_classes] array. + features: An [n_batch, d] array. + batch_logits: An [m, n_classes] array. + batch_features: An [m, d] array. + number_neighbours: The number of neighbours to use. Must be an integer in + the interval [1, m] + smoothing_gamma: A value in (0, infinity) + temperature: Temperature for the KL-Divergence. A value in (0, infinity). + example_weights: If not None, the weight to apply to the loss of each + example in the batch. Useful for dealing with TPU padding. If None, the + mean over the batch is computed. + + Returns: + The weighted NCR loss computed over the batch. + """ + + indices, similarities = get_knn(features, batch_features, + number_neighbours + 1) + # Remove the example itself from the list of nearest neighbours. + indices = indices[:, 1:] + similarities = similarities[:, 1:] + + similarities = jnp.power(similarities, smoothing_gamma) + loss = pairwise_kl_loss(logits, batch_logits, indices, similarities, + temperature, example_weights=example_weights) + return loss diff --git a/scenic/projects/ncr/main.py b/scenic/projects/ncr/main.py new file mode 100644 index 0000000000000000000000000000000000000000..a95c877e1bbc57d68cdc3752d149f761ad18f3bd --- /dev/null +++ b/scenic/projects/ncr/main.py @@ -0,0 +1,68 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for launching experiments.""" + +import pdb # pylint: disable=unused-import + +from absl import flags +import chex +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.ncr import classification_trainer +from scenic.projects.ncr import resnet as ncr_resnet +from scenic.train_lib import train_utils + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name): + if model_name == 'resnet': + return ncr_resnet.ResNetNCRModel + else: + raise ValueError(f'Unknown model {model_name}') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the Scenic.""" + + # Disable pmap if debugging + if config.get('fake_pmap', False): + fake_pmap = chex.fake_pmap() + fake_pmap.start() + else: + fake_pmap = None + + model_cls = get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + + classification_trainer.train( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + if fake_pmap is not None: + fake_pmap.stop() + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/ncr/requirements.txt b/scenic/projects/ncr/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..daf33134b380520b329061ad90ed3ca8bab252ee --- /dev/null +++ b/scenic/projects/ncr/requirements.txt @@ -0,0 +1,5 @@ +absl==0.0 +chex==0.1.3 +optax==0.1.2 +Pillow==9.1.1 +tensorflow_datasets==4.6.0 diff --git a/scenic/projects/ncr/resnet.py b/scenic/projects/ncr/resnet.py new file mode 100644 index 0000000000000000000000000000000000000000..c250caee1f99e72490b00e7fbee80ffe1a8a1c07 --- /dev/null +++ b/scenic/projects/ncr/resnet.py @@ -0,0 +1,190 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of ResNet.""" + +import functools +from typing import Callable, Any, Union, Dict + +from absl import logging +import flax +import flax.linen as nn +from jax.nn import initializers +import jax.numpy as jnp +import ml_collections +from scenic.common_lib import debug_utils +from scenic.model_lib.layers import nn_layers +from scenic.projects.baselines import resnet +from scenic.projects.ncr.base_model import NCRModel + + +class ResNet(nn.Module): + """ResNet architecture. + + Attributes: + num_outputs: Num output classes. + num_filters: Num filters. + num_layers: Num layers. + kernel_init: Kernel initialization. + bias_init: Bias initialization. + dtype: Data type, e.g. jnp.float32. + """ + num_outputs: int + num_filters: int = 64 + num_layers: int = 50 + kernel_init: Callable[..., Any] = initializers.lecun_normal() + bias_init: Callable[..., Any] = initializers.zeros + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__( + self, + x: jnp.ndarray, + train: bool = False, + debug: bool = False) -> Union[jnp.ndarray, Dict[str, jnp.ndarray]]: + """Applies ResNet model to the inputs. + + Args: + x: Inputs to the model. + train: Whether it is training or not. + debug: Whether the debug mode is enabled. debug=True enables model + specific logging/storing some values using jax.host_callback. + + Returns: + Un-normalized logits. + """ + if self.num_layers not in BLOCK_SIZE_OPTIONS: + raise ValueError('Please provide a valid number of layers') + block_sizes, bottleneck = BLOCK_SIZE_OPTIONS[self.num_layers] + x = nn.Conv( + self.num_filters, + kernel_size=(7, 7), + strides=(2, 2), + padding=[(3, 3), (3, 3)], + use_bias=False, + dtype=self.dtype, + name='stem_conv')( + x) + x = nn.BatchNorm( + use_running_average=not train, + momentum=0.9, + epsilon=1e-5, + dtype=self.dtype, + name='init_bn')( + x) + x = nn.relu(x) + x = nn.max_pool(x, (3, 3), strides=(2, 2), padding=[(1, 1), (1, 1)]) + + residual_block = functools.partial( + resnet.ResidualBlock, dtype=self.dtype, bottleneck=bottleneck) + representations = {'stem': x} + for i, block_size in enumerate(block_sizes): + for j in range(block_size): + strides = (2, 2) if i > 0 and j == 0 else (1, 1) + filters = self.num_filters * 2**i + x = residual_block(filters=filters, strides=strides)(x, train) + representations[f'stage_{i + 1}'] = x + + # Head. + x = jnp.mean(x, axis=(1, 2)) + x = nn_layers.IdentityLayer(name='pre_logits')(x) + representations['pre_logits'] = x + x = nn.Dense( + self.num_outputs, + kernel_init=self.kernel_init, + bias_init=self.bias_init, + dtype=self.dtype, + name='output_projection')( + x) + representations['logits'] = x + + return representations + + +# A dictionary mapping the number of layers in a resnet to the number of +# blocks in each stage of the model. The second argument indicates whether we +# use bottleneck layers or not. +BLOCK_SIZE_OPTIONS = { + 5: ([1], True), # Only strided blocks. Total stride 4. + 8: ([1, 1], True), # Only strided blocks. Total stride 8. + 11: ([1, 1, 1], True), # Only strided blocks. Total stride 16. + 14: ([1, 1, 1, 1], True), # Only strided blocks. Total stride 32. + 9: ([1, 1, 1, 1], False), # Only strided blocks. Total stride 32. + 18: ([2, 2, 2, 2], False), + 26: ([2, 2, 2, 2], True), + 34: ([3, 4, 6, 3], False), + 50: ([3, 4, 6, 3], True), + 101: ([3, 4, 23, 3], True), + 152: ([3, 8, 36, 3], True), + 200: ([3, 24, 36, 3], True) +} + + +class ResNetNCRModel(NCRModel): + """Implements the NCR ResNet model for classification.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return ResNet( + num_outputs=self.dataset_meta_data['num_classes'], + num_filters=self.config.num_filters, + num_layers=self.config.num_layers, + dtype=model_dtype) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return _get_default_configs_for_testing() + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from `restored_train_state`. + + This function is writen to be used for 'finetuning' experiments. + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + `restored_train_state` come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + del restored_model_cfg + params = flax.core.unfreeze(train_state.optimizer.target) + restored_params = flax.core.unfreeze(restored_train_state.optimizer.target) + for pname, pvalue in restored_params.items(): + if pname == 'output_projection': + # The `output_projection` is used as the name of the linear layer at the + # head of the model that maps the representation to the label space. + # By default, for finetuning to another dataset, we drop this layer as + # the label space is different. + continue + else: + params[pname] = pvalue + logging.info('Parameter summary after initialising from train state:') + debug_utils.log_param_shapes(params) + return train_state.replace( + optimizer=train_state.optimizer.replace( + target=flax.core.freeze(params)), + model_state=restored_train_state.model_state) + + +def _get_default_configs_for_testing() -> ml_collections.ConfigDict: + return ml_collections.ConfigDict( + dict( + num_filters=16, + num_layers=5, + data_dtype_str='float32', + )) diff --git a/scenic/projects/ncr/utils.py b/scenic/projects/ncr/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..7c6b00c930b6170c060efc7f1f0f4e06eaef11dc --- /dev/null +++ b/scenic/projects/ncr/utils.py @@ -0,0 +1,174 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utility functions.""" + +import os + +from typing import Any, Dict, Optional, Tuple + +from flax import jax_utils +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import numpy as np +from scenic.train_lib import train_utils +from tensorflow.io import gfile + + +def save_checkpoint(workdir: str, + train_state: train_utils.TrainState, + max_to_keep: int = 3, + overwrite: bool = False): + """Saves a checkpoint. + + First syncs the model state across replicas, then it unreplicates it by taking + the train state of the first replica and saves it as a checkpoint. + + Args: + workdir: Experiment directory for saving the checkpoint. + train_state: An instance of TrainState that holds the state of training. + max_to_keep: The number of checkpoints to keep. + overwrite: Overwrite existing checkpoint if a checkpoint + at the current or a later step already exits (default: False). + """ + if jax.process_index() == 0: + # Get train state from the first replica. + checkpoint_state = jax.device_get(jax_utils.unreplicate(train_state)) + checkpoints.save_checkpoint( + workdir, + checkpoint_state, + int(checkpoint_state.global_step), + overwrite=overwrite, + keep=max_to_keep) + + +def sync_model_state_across_replicas( + train_state: train_utils.TrainState) -> train_utils.TrainState: + """Sync the model_state (like batch statistics) across replicas. + + Args: + train_state: TrainState; Current state of training. + + Returns: + Updated state of training in which model_state is synced across replicas. + """ + # We simply do "mean" here and this doesn't work with + # statistics like variance. (check the discussion in Flax for fixing this). + if jax.tree_util.tree_leaves(train_state.model_state): + # If the model_state is not empty. + new_model_state = train_state.model_state.copy( + {'batch_stats': train_utils.pmap_mean( + train_state.model_state['batch_stats'])}) + return train_state.replace( # pytype: disable=attribute-error + model_state=new_model_state) + else: + return train_state + + +def restore_checkpoint(checkpoint_path: str, + train_state: Optional[train_utils.TrainState] = None, + assert_exist: bool = False, + step: Optional[int] = None) -> Tuple[ + train_utils.TrainState, int]: + """Restores the last checkpoint. + + First restores the checkpoint, which is an instance of TrainState that holds + the state of training. + + Args: + checkpoint_path: Directory to restore the checkpoint. + train_state: An instance of TrainState that holds the state of + training. + assert_exist: Assert that there is at least one checkpoint exists in + the given path. + step: Step number to load or None to load latest. If specified, + checkpoint_path must be a directory. + + Returns: + training state and an int which is the current step. + """ + if assert_exist: + glob_path = os.path.join(checkpoint_path, 'checkpoint_*') + if not gfile.glob(glob_path): + raise ValueError('No checkpoint for the pretrained model is found in: ' + f'{checkpoint_path}') + if train_state is None: + raise ValueError('Please use `restore_pretrained_checkpoint` for loading' + 'a checkpoint without providing a Scenic TrainState.') + train_state = checkpoints.restore_checkpoint(checkpoint_path, train_state, + step) + return train_state, int(train_state.global_step) + + +def all_gather(tree: Any): + """Gather across different hosts and flatten the first two dimensions.""" + gather_flat = lambda x: jnp.concatenate(jax.lax.all_gather(x, 'batch'), 0) + return jax.tree_util.tree_map(gather_flat, tree) + + +def mixup(batch: Dict['str', jnp.ndarray], + alpha: float = 1.0, + image_format: str = 'NHWC', + rng: Optional[Any] = None) -> Dict['str', jnp.ndarray]: + """Mixes images and labels within a single batch. + + Unlike dataset_utils.mixup, this implementation samples a different weight + for each instance in the mini-batch. + + Args: + batch: dict; A batch of data with 'inputs' and 'label'. + alpha: float; Used to control the beta distribution that weight is sampled + from. + image_format: string; The format of the input images. + rng: JAX rng key. If given, JAX numpy will be used as the backend, and if + None (default value), normal numpy will be used. + + Returns: + Tuple (mixed_images, mixed_labels). + """ + images, labels = batch['inputs'], batch['label'] + if labels.shape[-1] == 1: + raise ValueError('Mixup requires one-hot targets.') + if 'N' not in image_format: + raise ValueError('Mixup requires "N" to be in "image_format".') + + batch_size = labels.shape[0] + + # Setup the the numpy backend and prepare mixup weights. + if rng is None: + np_backend = np # Ordinary numpy + weight = np_backend.random.beta(alpha, alpha, size=(batch_size, 1)) + else: + np_backend = jnp # JAX numpy + weight = jax.random.beta(rng, alpha, alpha, shape=(batch_size, 1)) + + # Make sure that the original image has the higher weight during mixup + weight = np_backend.maximum(weight, 1.0 - weight) + + # Mixup labels. + batch['label'] = weight * labels + (1.0 - weight) * labels[::-1] + + # Mixup inputs. + # Shape calculations use np to avoid device memory fragmentation: + image_weight_shape = np.ones((images.ndim)) + image_weight_shape[image_format.index('N')] = batch_size + weight = np_backend.reshape(weight, + image_weight_shape.astype(np_backend.int32)) + reverse = tuple( + slice(images.shape[i]) if d != 'N' else slice(-1, None, -1) + for i, d in enumerate(image_format)) + batch['inputs'] = weight * images + (1.0 - weight) * images[reverse] + + return batch diff --git a/scenic/projects/objectvivit/DATA.md b/scenic/projects/objectvivit/DATA.md new file mode 100644 index 0000000000000000000000000000000000000000..8a4a0f1fc27acd58fe65df4f7a0d893a0f681e8e --- /dev/null +++ b/scenic/projects/objectvivit/DATA.md @@ -0,0 +1,21 @@ +# Setting up datasets for ObjectViViT + +Our dataloader is based on +[DeepMind Video Reader](https://github.com/deepmind/dmvr) which uses +[TFRecords](https://www.tensorflow.org/tutorials/load_data/tfrecord). + +First, follow the [data instruction in ViViT](https://github.com/google-research/scenic/tree/main/scenic/projects/vivit/data) +to create the TFRecords for the [SomethingSomethingV2](https://developer.qualcomm.com/software/ai-datasets/something-something) dataset. +Then we'll add bounding box data to the TFRecords. +We use bounding boxes from [ORViT](https://github.com/eladb3/ORViT). +Download the ORViT bounding boxes [here](https://github.com/eladb3/ORViT/blob/master/slowfast/datasets/DATASET.md#something-something-v2) +and unzip it, then run the following script to add them to TFRecords: + +``` +python scenic/projects/objectvivit/tools/add_orvit_bbox_to_tfrecord.py \ +--input_tfrecord /path/to/ssv2/tfrecord@xxx \ +--bbox_folder /path/to/orvid/box/folder/ \ +--output_tfrecord /path/to/ssv2.orvit_box/tfrecord +``` + +Finally, update the data path `/path/to/ssv2.orvit_box/tfrecord` in the [config files](scenic/projects/objectvivit/configs). diff --git a/scenic/projects/objectvivit/README.md b/scenic/projects/objectvivit/README.md new file mode 100644 index 0000000000000000000000000000000000000000..846aa3ecffe0b9be81a1a0d70308e66b82f88e21 --- /dev/null +++ b/scenic/projects/objectvivit/README.md @@ -0,0 +1,54 @@ +# How can objects help action recognition? + +This project implements ObjectViViT, which uses object detection results from +off-the-shelf object detectors to help action recognition. + +- First, we propose an object-guided token sampling strategy that enables us to drop certain input tokens with minimal impact on accuracy. +- Second, we propose an object-aware attention module that enriches the feature with object information to improve recognition accuracy. + +> [**How can objects help action recognition?**](http://arxiv.org/abs/xxxx.xxxxx), +> Xingyi Zhou, Anurag Arnab, Chen Sun, Cordelia Schmid, +> *CVPR 2023* + +## Getting Started + +First install scenic following +[here](https://github.com/google-research/scenic#quickstart). +Then install additional dependency: + +``` +pip install -r scenic/projects/objectvivit/requirements.txt +``` + +Setup datasets following [DATA.md](DATA.md). + +To train and evaluate a model, first download [VideoMAE](https://arxiv.org/abs/2203.12602) +pretrained checkpoints from +their [model zoo](https://github.com/MCG-NJU/VideoMAE/blob/main/MODEL_ZOO.md#something-something-v2), +and then convert them to JAX following `tools/convert_videomae_checkpoint.py`. +After replacing the checkpoint path in the config files, run + +``` +python -m scenic.projects.objectvivit.main \ + --config=scenic/projects/objectvivit/configs/ssv2_B16_object.py \ + --workdir=ssv2_B16_object/ +``` + +We provide reference results on SSv2 dataset below: + +| config | Accuracy | +|-------------------------------|-----------| +|ssv2_B16_baseline | 66.1 | +|ssv2_B16_sampling (40% tokens) | 66.2 | +|ssv2_B16_object | 67.4 | + +## Citation + +If you find this project useful for your research, please use the following BibTeX entry. + + @inproceedings{zhou2023objects, + title={How can objects help action recognition?}, + author={Zhou, Xingyi and Arnab, Anurag and Sun, Chen and Schmid, Cordelia}, + booktitle={CVPR}, + year={2023} + } diff --git a/scenic/projects/objectvivit/__init__.py b/scenic/projects/objectvivit/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/objectvivit/configs/__init__.py b/scenic/projects/objectvivit/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/objectvivit/configs/ssv2_B16_baseline.py b/scenic/projects/objectvivit/configs/ssv2_B16_baseline.py new file mode 100644 index 0000000000000000000000000000000000000000..db3e3e19a8e0aa3e40ed55d9bdc4e96d60db30cd --- /dev/null +++ b/scenic/projects/objectvivit/configs/ssv2_B16_baseline.py @@ -0,0 +1,177 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Baseline experiments on Something-Something v2. + + +""" +# pylint: disable=line-too-long + +import ml_collections + +SSV2_TRAIN_SIZE = 168913 +SSV2_VAL_SIZE = 24777 +VARIANT = 'B/16x2' + + +def get_config(runlocal=''): + """Return the config of baseline experiment on Something-Something v2.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'ssv2_B16_baseline' + + # Dataset. + config.dataset_name = 'objects_video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + + # This is going to sample 16 frames, sampled at a stride of 2 from the video. + config.dataset_configs.num_frames = 16 + config.dataset_configs.stride = 2 + config.dataset_configs.min_resize_train = 256 + config.dataset_configs.min_resize_test = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + config.dataset_configs.base_dir = 'path/to/dataset/root' + config.dataset_configs.tables = { + 'train': 'something-v2-train.rgb.ori.gt_bbox_track.orvit_bbox.tfrecord@1024', + 'validation': + 'something-v2-validation.rgb.ori.gt_bbox_track.orvit_bbox.tfrecord@128', + 'test': + 'something-v2-validation.rgb.ori.gt_bbox_track.orvit_bbox.tfrecord@128', + } + config.dataset_configs.examples_per_subset = { + 'train': SSV2_TRAIN_SIZE, + 'validation': SSV2_VAL_SIZE, + 'test': SSV2_VAL_SIZE + } + config.dataset_configs.num_classes = 174 + config.dataset_configs.test_split = 'validation' + + config.dataset_configs.random_flip = False + + # Sampling + config.dataset_configs.train_frame_sampling_mode = 'segment_sampling' + + # This does Mixup in the train loop. This is fast. But make sure that device + # batch size is more than 1. On a 4x4 TPU, this means that your batch size + # needs to be at least 64. + config.mixup = ml_collections.ConfigDict() + config.mixup.alpha = 0.8 + config.mixup.cutmix_alpha = 1.0 + config.mixup.mixup_to_cutmix_switch_prob = 0.5 + + config.dataset_configs.prefetch_to_device = 2 + + # Multicrop eval settings + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.do_three_spatial_crops = True # Do during training. + config.dataset_configs.log_test_epochs = 5 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size + config.dataset_configs.num_test_clips = 2 + config.dataset_configs.test_batch_size = 8 # Needs to be num_local_devices + config.multicrop_clips_per_device = 2 + + # Model. + version, tubelet = VARIANT.split('/') + spatial_dim, temporal_dim = tubelet.split('x') + spatial_dim, temporal_dim = int(spatial_dim), int(temporal_dim) + + config.model_name = 'vivit_classification' + config.model = ml_collections.ConfigDict() + config.model.attention_config = ml_collections.ConfigDict() + config.model.attention_config.type = 'spacetime' + + config.model.hidden_size = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = (spatial_dim, spatial_dim, temporal_dim) + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = {'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config.model.num_layers = {'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + config.model.representation_size = None + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0.0 + config.model_dtype_str = 'float32' + + config.model.temporal_encoding_config = ml_collections.ConfigDict() + config.model.temporal_encoding_config.method = '3d_conv' + config.model.temporal_encoding_config.kernel_init_method = 'central_frame_initializer' + + config.model.positional_embedding = 'sinusoidal_1d' + config.model.classifier = 'gap' + config.model.stochastic_droplayer_rate = 0.1 + + # Training. + # Hyperparameters follow VideoMAE: https://github.com/MCG-NJU/VideoMAE + config.optimizer = 'adamw' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.weight_decay = 0.05 + config.optimizer_configs.layerwise_decay = 0.65 + config.optimizer_configs.b1 = 0.9 + config.optimizer_configs.b2 = 0.999 + config.l2_decay_factor = None + config.label_smoothing = 0.1 + config.num_training_epochs = 30 + config.batch_size = 256 + config.rng_seed = 0 + config.init_head_bias = -6.9 # -log(1000) + + # Learning rate. + steps_per_epoch = SSV2_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 1e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.warmup_steps = 5 * steps_per_epoch + config.lr_configs.base_learning_rate = base_lr * config.batch_size / 256 + end_lr = 1e-6 * config.batch_size / 256 + config.lr_configs.alpha = end_lr / config.lr_configs.base_learning_rate + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 1000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.log_summary_steps = steps_per_epoch + config.log_eval_steps = steps_per_epoch + + # Initialisation from checkpoint + config.init_from = ml_collections.ConfigDict() + config.init_from.xm = () + config.dataset_configs.base_dir = 'path/to/mae/checkpoint' + config.init_from.checkpoint_format = 'scenic' + config.init_from.restore_from_non_mae_checkpoint = False + + return config diff --git a/scenic/projects/objectvivit/configs/ssv2_B16_object.py b/scenic/projects/objectvivit/configs/ssv2_B16_object.py new file mode 100644 index 0000000000000000000000000000000000000000..d4e736da11b139caa121ecb82e87492d70b041fa --- /dev/null +++ b/scenic/projects/objectvivit/configs/ssv2_B16_object.py @@ -0,0 +1,195 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""ObjectViViT finetuning experiments on Something-Something v2. + + +""" +# pylint: disable=line-too-long + +import ml_collections + +SSV2_TRAIN_SIZE = 168913 +SSV2_VAL_SIZE = 24777 +VARIANT = 'B/16x2' + + +def get_config(runlocal=''): + """Return the config of ObjectViViT experiment on Something-Something v2.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'ssv2_B16_object' + + # Dataset. + config.dataset_name = 'objects_video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + + # This is going to sample 16 frames, sampled at a stride of 2 from the video. + config.dataset_configs.num_frames = 16 + config.dataset_configs.stride = 2 + config.dataset_configs.min_resize_train = 256 + config.dataset_configs.min_resize_test = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + config.dataset_configs.base_dir = 'path/to/dataset/root' + config.dataset_configs.tables = { + 'train': 'something-v2-train.rgb.ori.gt_bbox_track.orvit_bbox.tfrecord@1024', + 'validation': + 'something-v2-validation.rgb.ori.gt_bbox_track.orvit_bbox.tfrecord@128', + 'test': + 'something-v2-validation.rgb.ori.gt_bbox_track.orvit_bbox.tfrecord@128', + } + config.dataset_configs.examples_per_subset = { + 'train': SSV2_TRAIN_SIZE, + 'validation': SSV2_VAL_SIZE, + 'test': SSV2_VAL_SIZE + } + ############################# Object configs ################################ + config.dataset_configs.object_configs = ml_collections.ConfigDict() + config.dataset_configs.object_configs.with_boxes = True + config.dataset_configs.object_configs.bbox_key = 'orvit' # gt + config.dataset_configs.object_configs.keep_full_frames = 0 + config.dataset_configs.object_configs.mask_radius = 0.7 + config.dataset_configs.object_configs.concat_mask = True + config.dataset_configs.object_configs.tracked_objects = True + num_boxes = 4 + config.dataset_configs.object_configs.bbox_num = num_boxes + ############################################################################## + + ####################### Attach Object configs ################################ + config.attach_configs = ml_collections.ConfigDict() + config.attach_configs.object_block_idx = (1, 6, 10) + config.attach_configs.token_score_from_dataloader = True + ############################################################################## + + config.dataset_configs.num_classes = 174 + config.dataset_configs.test_split = 'validation' + + config.dataset_configs.random_flip = False + + # Sampling + config.dataset_configs.train_frame_sampling_mode = 'segment_sampling' + + # This does Mixup in the train loop. This is fast. But make sure that device + # batch size is more than 1. On a 4x4 TPU, this means that your batch size + # needs to be at least 64. + config.mixup = ml_collections.ConfigDict() + config.mixup.alpha = 0.8 + config.mixup.cutmix_alpha = 1.0 + config.mixup.mixup_to_cutmix_switch_prob = 0.5 + + config.dataset_configs.prefetch_to_device = 2 + + # Multicrop eval settings + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.do_three_spatial_crops = True # Do during training. + config.dataset_configs.log_test_epochs = 5 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size + config.dataset_configs.num_test_clips = 2 + config.dataset_configs.test_batch_size = 8 # Needs to be num_local_devices + config.multicrop_clips_per_device = 2 + + # Model. + version, tubelet = VARIANT.split('/') + spatial_dim, temporal_dim = tubelet.split('x') + spatial_dim, temporal_dim = int(spatial_dim), int(temporal_dim) + + config.model_name = 'vivit_classification' + config.model = ml_collections.ConfigDict() + config.model.attention_config = ml_collections.ConfigDict() + config.model.attention_config.type = 'spacetime' + + config.model.hidden_size = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = (spatial_dim, spatial_dim, temporal_dim) + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = {'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config.model.num_layers = {'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + config.model.representation_size = None + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0.0 + config.model_dtype_str = 'float32' + + config.model.temporal_encoding_config = ml_collections.ConfigDict() + config.model.temporal_encoding_config.method = '3d_conv' + config.model.temporal_encoding_config.kernel_init_method = 'central_frame_initializer' + + config.model.positional_embedding = 'sinusoidal_1d' + config.model.classifier = 'gap' + config.model.stochastic_droplayer_rate = 0.1 + + # Training. + # Hyperparameters follow VideoMAE: https://github.com/MCG-NJU/VideoMAE + config.optimizer = 'adamw' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.weight_decay = 0.05 + config.optimizer_configs.layerwise_decay = 0.65 + config.optimizer_configs.b1 = 0.9 + config.optimizer_configs.b2 = 0.999 + config.l2_decay_factor = None + config.label_smoothing = 0.1 + config.num_training_epochs = 30 + config.batch_size = 256 + config.rng_seed = 0 + config.init_head_bias = -6.9 # -log(1000) + + # Learning rate. + steps_per_epoch = SSV2_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 1e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.warmup_steps = 5 * steps_per_epoch + config.lr_configs.base_learning_rate = base_lr * config.batch_size / 256 + end_lr = 1e-6 * config.batch_size / 256 + config.lr_configs.alpha = end_lr / config.lr_configs.base_learning_rate + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 1000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.log_summary_steps = steps_per_epoch + config.log_eval_steps = steps_per_epoch + + # Initialisation from checkpoint + config.init_from = ml_collections.ConfigDict() + config.init_from.xm = () + config.dataset_configs.base_dir = 'path/to/mae/checkpoint' + config.init_from.checkpoint_format = 'scenic' + config.init_from.restore_from_non_mae_checkpoint = False + + return config diff --git a/scenic/projects/objectvivit/configs/ssv2_B16_sampling.py b/scenic/projects/objectvivit/configs/ssv2_B16_sampling.py new file mode 100644 index 0000000000000000000000000000000000000000..b168f00c0d2de2e92328bce25835f6ea2d8729a7 --- /dev/null +++ b/scenic/projects/objectvivit/configs/ssv2_B16_sampling.py @@ -0,0 +1,200 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""ObjectViViT finetuning experiments on Something-Something v2. + + +""" +# pylint: disable=line-too-long + +import ml_collections + +SSV2_TRAIN_SIZE = 168913 +SSV2_VAL_SIZE = 24777 +VARIANT = 'B/16x2' + + +def get_config(runlocal=''): + """Return the config of ObjectViViT experiment on Something-Something v2.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'ssv2_B16_sampling' + + # Dataset. + config.dataset_name = 'objects_video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + + # This is going to sample 16 frames, sampled at a stride of 2 from the video. + config.dataset_configs.num_frames = 16 + config.dataset_configs.stride = 2 + config.dataset_configs.min_resize_train = 256 + config.dataset_configs.min_resize_test = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + config.dataset_configs.base_dir = 'path/to/dataset/root' + config.dataset_configs.tables = { + 'train': 'something-v2-train.rgb.ori.gt_bbox_track.orvit_bbox.tfrecord@1024', + 'validation': + 'something-v2-validation.rgb.ori.gt_bbox_track.orvit_bbox.tfrecord@128', + 'test': + 'something-v2-validation.rgb.ori.gt_bbox_track.orvit_bbox.tfrecord@128', + } + config.dataset_configs.examples_per_subset = { + 'train': SSV2_TRAIN_SIZE, + 'validation': SSV2_VAL_SIZE, + 'test': SSV2_VAL_SIZE + } + ############################# Object configs ################################ + config.dataset_configs.object_configs = ml_collections.ConfigDict() + config.dataset_configs.object_configs.with_boxes = True + config.dataset_configs.object_configs.bbox_key = 'orvit' # gt + config.dataset_configs.object_configs.keep_full_frames = 0 + config.dataset_configs.object_configs.mask_radius = 0.7 + config.dataset_configs.object_configs.concat_mask = True + config.dataset_configs.object_configs.tracked_objects = True + num_boxes = 4 + config.dataset_configs.object_configs.bbox_num = num_boxes + ############################################################################## + + ####################### Attach Object configs ################################ + config.attach_configs = ml_collections.ConfigDict() + config.attach_configs.object_block_idx = (1, 6, 10) + config.attach_configs.token_score_from_dataloader = True + config.attach_configs.drop_pixel_tokens = True + config.attach_configs.add_context_tokens = int(8 * 14 * 14 * 0.1) + config.attach_configs.num_total_attach_tokens = int(8 * 14 * 14 * 0.3) + ############################################################################## + + config.dataset_configs.num_classes = 174 + config.dataset_configs.test_split = 'validation' + + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + + config.dataset_configs.random_flip = False + + # Sampling + config.dataset_configs.train_frame_sampling_mode = 'segment_sampling' + + # This does Mixup in the train loop. This is fast. But make sure that device + # batch size is more than 1. On a 4x4 TPU, this means that your batch size + # needs to be at least 64. + config.mixup = ml_collections.ConfigDict() + config.mixup.alpha = 0.8 + config.mixup.cutmix_alpha = 1.0 + config.mixup.mixup_to_cutmix_switch_prob = 0.5 + + config.dataset_configs.prefetch_to_device = 2 + + # Multicrop eval settings + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.do_three_spatial_crops = True # Do during training. + config.dataset_configs.log_test_epochs = 5 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size + config.dataset_configs.num_test_clips = 2 + config.dataset_configs.test_batch_size = 8 + config.multicrop_clips_per_device = 2 + + # Model. + version, tubelet = VARIANT.split('/') + spatial_dim, temporal_dim = tubelet.split('x') + spatial_dim, temporal_dim = int(spatial_dim), int(temporal_dim) + + config.model_name = 'vivit_classification' + config.model = ml_collections.ConfigDict() + config.model.attention_config = ml_collections.ConfigDict() + config.model.attention_config.type = 'spacetime' + + config.model.hidden_size = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = (spatial_dim, spatial_dim, temporal_dim) + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = {'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config.model.num_layers = {'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + config.model.representation_size = None + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0.0 + config.model_dtype_str = 'float32' + + config.model.temporal_encoding_config = ml_collections.ConfigDict() + config.model.temporal_encoding_config.method = '3d_conv' + config.model.temporal_encoding_config.kernel_init_method = 'central_frame_initializer' + + config.model.positional_embedding = 'sinusoidal_1d' + config.model.classifier = 'gap' + config.model.stochastic_droplayer_rate = 0.1 + + # Training. + # Hyperparameters follow VideoMAE: https://github.com/MCG-NJU/VideoMAE + config.optimizer = 'adamw' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.weight_decay = 0.05 + config.optimizer_configs.layerwise_decay = 0.65 + config.optimizer_configs.b1 = 0.9 + config.optimizer_configs.b2 = 0.999 + config.l2_decay_factor = None + config.label_smoothing = 0.1 + config.num_training_epochs = 30 + config.batch_size = 256 + config.rng_seed = 0 + config.init_head_bias = -6.9 # -log(1000) + + # Learning rate. + steps_per_epoch = SSV2_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 1e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.warmup_steps = 5 * steps_per_epoch + config.lr_configs.base_learning_rate = base_lr * config.batch_size / 256 + end_lr = 1e-6 * config.batch_size / 256 + config.lr_configs.alpha = end_lr / config.lr_configs.base_learning_rate + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 1000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.log_summary_steps = steps_per_epoch + config.log_eval_steps = steps_per_epoch + + # Initialisation from checkpoint + config.init_from = ml_collections.ConfigDict() + config.init_from.xm = () + config.dataset_configs.base_dir = 'path/to/mae/checkpoint' + config.init_from.checkpoint_format = 'scenic' + config.init_from.restore_from_non_mae_checkpoint = False + + return config diff --git a/scenic/projects/objectvivit/dataset_utils.py b/scenic/projects/objectvivit/dataset_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..08c2705b9ba65712ccc72357d95a43c429693431 --- /dev/null +++ b/scenic/projects/objectvivit/dataset_utils.py @@ -0,0 +1,988 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utils for adding modalities with bounding boxes. + +Forked from https://github.com/deepmind/dmvr/blob/master/dmvr/modalities.py + +""" + + +from typing import Optional, Union + +from absl import logging +from dmvr import builders +from dmvr import processors +import ml_collections +import tensorflow as tf + + +def add_image_and_boxes( + parser_builder: builders.BaseParserBuilder, + sampler_builder: builders.SamplerBuilder, + decoder_builder: builders.DecoderBuilder, + preprocessor_builder: builders.PreprocessorBuilder, + postprocessor_builder: builders.PostprocessorBuilder, + input_feature_name: str = 'image/encoded', + output_feature_name: str = builders.IMAGE_FEATURE_NAME, + is_training: bool = True, + # Video related parameters. + num_frames: int = 32, + stride: int = 1, + num_test_clips: int = 1, + min_resize: int = 224, + resize_method: str = tf.image.ResizeMethod.BILINEAR, + crop_size: int = 200, + use_crop_and_resize_video_mae: bool = False, + train_frame_sampling_mode: Optional[str] = None, + zero_centering_image: bool = False, + random_flip: bool = True, + normalization_mean: Union[tf.Tensor, float] = 0, + normalization_std: Union[tf.Tensor, float] = 1, + object_configs: ml_collections.ConfigDict = ml_collections.ConfigDict(), +) -> None: + """Same as add_image with additional support boxes.""" + with_boxes = object_configs.get('with_boxes', False) + keep_full_frames = object_configs.get('keep_full_frames', 0) + bbox_key = object_configs.get('bbox_key', 'gt') + bbox_num = object_configs.get('bbox_num', 100) + return_boxes = object_configs.get('return_boxes', -1) + mask_radius = object_configs.get('mask_radius', -1.) + min_box_size = object_configs.get('min_box_size', 0) + concat_mask = object_configs.get('concat_mask', False) + add_detections = object_configs.get('add_detections', False) + detection_stride_spatial = object_configs.get('detection_stride_spatial', 1) + detection_stride_temporal = object_configs.get('detection_stride_temporal', 1) + tracked_objects = object_configs.get('tracked_objects', False) + add_global_box = object_configs.get('add_global_box', False) + + if is_training and num_test_clips != 1: + logging.info('`num_test_clips` %d is ignored since `is_training` is true.', + num_test_clips) + # Parse frames or single image. + assert isinstance(parser_builder, builders.SequenceExampleParserBuilder) + parser_builder.parse_feature( + feature_name=input_feature_name, + feature_type=tf.io.FixedLenSequenceFeature((), dtype=tf.string), + output_name=output_feature_name) + + if with_boxes: + for coord in ['xmax', 'xmin', 'ymax', 'ymin', 'score']: + parser_builder.parse_feature( + feature_name=f'{bbox_key}/bbox/{coord}', + feature_type=tf.io.VarLenFeature(dtype=tf.float32), + output_name=coord) + sampler_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name=coord, + fn_name='{}_sparse_to_dense'.format(coord)) + preprocessor_builder.add_fn( + fn=aggregate_bbox_coords, + feature_name=None, + fn_name='aggregate_bbox_coords') + + # pylint: disable=g-long-lambda + # Temporal sampler. + if is_training: + if train_frame_sampling_mode == 'segment_sampling': + # Sample random clip. + sampler_builder.add_fn( + fn=lambda x, s: sample_sequence_uniformly_with_state( + x, num_frames, True, s), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_random_sample', + stateful=True) + if with_boxes: + for coord in ['xmax', 'xmin', 'ymax', 'ymin', 'score']: + sampler_builder.add_fn( + fn=lambda x, s: sample_sequence_uniformly_with_state( + x, num_frames, True, s), + feature_name=coord, + fn_name=f'{coord}_random_sample', + stateful=True) + else: + # Sample random clip. + sampler_builder.add_fn( + fn=lambda x, s=None: processors.sample_sequence( + x, num_frames, True, stride, state=s), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_random_sample', + stateful=True) + if with_boxes: + for coord in ['xmax', 'xmin', 'ymax', 'ymin', 'score']: + sampler_builder.add_fn( + fn=lambda x, s=None: processors.sample_sequence( + x, num_frames, True, stride, state=s), + feature_name=coord, + fn_name=f'{coord}_random_sample', + stateful=True) + else: + if num_test_clips > 1: + if train_frame_sampling_mode == 'segment_sampling': + if num_test_clips != 2: + raise ValueError( + 'For segment_sampling only 2 video clips are allowed.') + sampler_builder.add_fn( + fn=lambda x: sample_two_sequences_uniformly( + x, num_frames), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_segment_sampling_test') + if with_boxes: + for coord in ['xmax', 'xmin', 'ymax', 'ymin', 'score']: + sampler_builder.add_fn( + fn=lambda x: sample_two_sequences_uniformly( + x, num_frames), + feature_name=coord, + fn_name=f'{coord}_segment_sampling_test') + else: + # Sample linspace clips. + sampler_builder.add_fn( + fn=lambda x: processors.sample_linspace_sequence( + x, num_test_clips, num_frames, stride), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_linspace_sample') + if with_boxes: + for coord in ['xmax', 'xmin', 'ymax', 'ymin', 'score']: + sampler_builder.add_fn( + fn=lambda x: processors.sample_linspace_sequence( + x, num_test_clips, num_frames, stride), + feature_name=coord, + fn_name=f'{coord}_linspace_sample') + else: + if train_frame_sampling_mode == 'segment_sampling': + sampler_builder.add_fn( + fn=lambda x: sample_sequence_uniformly( + x, num_frames, is_training=False), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_segment_sampling_train') + if with_boxes: + for coord in ['xmax', 'xmin', 'ymax', 'ymin', 'score']: + sampler_builder.add_fn( + fn=lambda x: sample_sequence_uniformly( + x, num_frames, is_training=False), + feature_name=coord, + fn_name=f'{coord}_segment_sampling_train') + else: + # Sample middle clip. + sampler_builder.add_fn( + fn=lambda x: processors.sample_sequence( + x, num_frames, False, stride), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_middle_sample') + if with_boxes: + for coord in ['xmax', 'xmin', 'ymax', 'ymin', 'score']: + sampler_builder.add_fn( + fn=lambda x: processors.sample_sequence( + x, num_frames, False, stride), + feature_name=coord, + fn_name=f'{coord}_middle_sample') + + decoder_builder.add_fn( + fn=lambda x: processors.decode_jpeg(x, channels=3), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_decode_jpeg') + + # Resize images (resize happens only if necessary to save compute). + preprocessor_builder.add_fn( + fn=lambda x: processors.resize_smallest( + x, min_resize, is_flow=False, method=resize_method), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_resize_smallest') + # We don't need to do this for boxes as boxes are relative coordinates + + if is_training: + # Standard image data augmentation: random crop and random flip. + if use_crop_and_resize_video_mae: + preprocessor_builder.add_fn( + fn=lambda x, s=None: crop_and_resize_image_tong(x), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_crop_and_resize', + stateful=True) + assert not with_boxes + else: + preprocessor_builder.add_fn( + fn=lambda x, s=None: custom_crop_image( + x, crop_size, crop_size, True, state=s), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_random_crop', + stateful=True) + if with_boxes: + preprocessor_builder.add_fn( + fn=lambda x, s: transform_box(x, crop_size, crop_size, state=s), + feature_name='bboxes', + fn_name='bboxes_random_crop', + stateful=True) + if random_flip: + preprocessor_builder.add_fn( + fn=lambda x, s=None: processors.random_flip_left_right( + x, state=s, is_flow=False), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_random_flip', + stateful=True) + if with_boxes: + preprocessor_builder.add_fn( + fn=lambda x, s: random_flip_boxes_left_right(x, state=s), + feature_name='bboxes', + fn_name='bboxes_random_flip', + stateful=True) + else: + if with_boxes: + # Central crop of the frames. + preprocessor_builder.add_fn( + fn=lambda x, s: custom_crop_image(x, crop_size, crop_size, False, s), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_central_crop', + stateful=True) + preprocessor_builder.add_fn( + fn=lambda x, s: transform_box(x, crop_size, crop_size, state=s), + feature_name='bboxes', + fn_name='bboxes_central_crop', + stateful=True) + else: + preprocessor_builder.add_fn( + fn=lambda x: processors.crop_image(x, crop_size, crop_size, False), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_central_crop') + + # Cast the frames to `tf.float32`, normalizing according to + # `zero_centering_image`. + preprocessor_builder.add_fn( + fn=lambda x: processors.normalize_image(x, zero_centering_image), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_normalize') + + preprocessor_builder.add_fn( + fn=lambda x: x - normalization_mean, + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_subtract_given_mean') + + preprocessor_builder.add_fn( + fn=lambda x: x / normalization_std, + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_divide_by_given_std') + + if with_boxes: + preprocessor_builder.add_fn( + fn=lambda x: append_or_add_object_mask( + x, num_frames, keep_full_frames, bbox_num, mask_radius, + concat_mask, + min_box_size=min_box_size, + add_detections=add_detections, + detection_stride_spatial=detection_stride_spatial, + detection_stride_temporal=detection_stride_temporal, + tracked_objects=tracked_objects, + add_global_box=add_global_box), + feature_name=None, + fn_name='mask_bbox_region_fn') + if return_boxes > 0: + preprocessor_builder.add_fn( + fn=lambda x: pad_bboxes(x, return_boxes), + feature_name=None, + fn_name='pad_bboxes') + else: + preprocessor_builder.add_fn( + fn=remove_bboxes, + feature_name=None, + fn_name='remove_bboxes') + + if num_test_clips > 1 and not is_training: + # In this case, multiple clips are merged together in batch dimension which + # will be `B * num_test_clips`. + postprocessor_builder.add_fn( + fn=lambda x: tf.reshape( + x, (-1, num_frames, x.shape[2], x.shape[3], x.shape[4])), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_reshape') + if add_detections: + postprocessor_builder.add_fn( + fn=lambda x: tf.reshape( + x, + (-1, num_frames // detection_stride_temporal * ( + crop_size // detection_stride_spatial) ** 2)), + feature_name='detections', + fn_name='detections_reshape') + if return_boxes > 0: + postprocessor_builder.add_fn( + fn=lambda x: tf.reshape( + x, (-1, num_frames, return_boxes, 4)), + feature_name='bboxes', + fn_name='bboxes_reshape') + # pylint: enable=g-long-lambda + + +def append_or_add_object_mask( + feature_dict, + num_frames, + keep_full_frames, + bbox_num=100, + mask_radius=-1., + concat_mask=False, + min_box_size=0, + add_detections=False, + detection_stride_spatial=1, + detection_stride_temporal=1, + tracked_objects=False, + add_global_box=False): + """Generate object heatmaps. + + Args: + feature_dict: dict of tensors from the dataloader + num_frames: int; frames of a single model. + keep_full_frames: number of paired frames that will allways have full masks. + We use this to provide global features. Note the actual number of full + frames will be 2 * keep_full_frames, where 2 is the temporal token size + in ViViT. + bbox_num: int; the max number of boxes in one frame. + mask_radius: hyperparameter that controls the size of the heatmap peaks. + concat_mask: bool: if True, it concatenane the heatmap to RPB pixels so + that the output channels will be 4. If False, it multiplied the heatmap + values to the pixels. + min_box_size: threshold to filter out small boxes. + add_detections: bool: if True, add mask as an additional key "detections". + detection_stride_spatial: int: spatial stride of the mask + detection_stride_temporal: int: temporal stride of the mask + tracked_objects: bool; if True, return object-specific heatmaps + add_global_box: if True, add a box for the whole image. + Returns: + the updated feature_dict. + """ + assert not tracked_objects or bbox_num < 100 + bboxes = feature_dict['bboxes'] # T x N x 4 + images = feature_dict['image'] # T x H x W x 3 + scores = feature_dict['score'] # T x N + + if add_global_box: + t = bboxes.shape[0] + new_box = tf.constant([0, 0, 1., 1.], dtype=tf.float32, shape=[1, 1, 4]) + new_box = tf.broadcast_to(new_box, (t, 1, 4)) + bboxes = tf.concat([new_box, bboxes], axis=1) + new_score = tf.constant([1.], dtype=tf.float32, shape=[1, 1]) + new_score = tf.broadcast_to(new_score, (scores.shape[0], 1)) + scores = tf.concat([new_score, scores], axis=1) + + if bbox_num < 100: + n = tf.shape(bboxes)[0] + scores = scores[:, :bbox_num] + bboxes = bboxes[:, :bbox_num] + input_length = tf.shape(bboxes)[1] + input_length = tf.clip_by_value(input_length, 0, bbox_num) + padding_length = tf.maximum(0, bbox_num - input_length) + paddings_boxes = tf.zeros((n, padding_length, 4), tf.float32) + bboxes = tf.concat([bboxes, paddings_boxes], axis=1) + + t, h, w = images.shape[0], images.shape[1], images.shape[2] + + if keep_full_frames == 0: # skip every frame-group + skip = tf.convert_to_tensor(value=[False] * t, dtype=tf.bool) + skip = tf.reshape(skip, (t, 1)) + skip = tf.broadcast_to(skip, [t, h * w]) + elif keep_full_frames == 1: # keep middle frame + value = ([False, False] * (num_frames // 4) + [True, True] + [ + False, False] * (num_frames // 4 - 1)) * (t // num_frames) + skip = tf.convert_to_tensor(value=value, dtype=tf.bool) + skip = tf.reshape(skip, (t, 1)) + skip = tf.broadcast_to(skip, [t, h * w]) + elif keep_full_frames == 2: # keep first and last + value = ([True, True] + [False, False] * ( + (num_frames - 4) // 2) + [True, True]) * (t // num_frames) + skip = tf.convert_to_tensor(value=value, dtype=tf.bool) + skip = tf.reshape(skip, (t, 1)) + skip = tf.broadcast_to(skip, [t, h * w]) + else: + assert False, keep_full_frames + # skip: t x h x w + + dw, dh = w // detection_stride_spatial, h // detection_stride_spatial + xs = tf.range(0, dw) * detection_stride_spatial + ( + detection_stride_spatial // 2) + ys = tf.range(0, dh) * detection_stride_spatial + ( + detection_stride_spatial // 2) + grid_x, grid_y = tf.meshgrid(xs, ys) + grid_x = tf.cast(tf.reshape(grid_x, (dh * dw,)) / w, tf.float32) + grid_y = tf.cast(tf.reshape(grid_y, (dh * dw,)) / h, tf.float32) + grid = tf.stack([grid_x, grid_y], axis=1) # HW x 2 + grid = tf.broadcast_to(grid, [images.shape[0], dh * dw, 2]) + # grid: T x HW x 2 + + bboxes = tf.clip_by_value(bboxes, 0.0, 1.0) + x1y1 = tf.minimum(bboxes[:, :, :2], bboxes[:, :, 2:]) + x2y2 = tf.maximum(bboxes[:, :, :2], bboxes[:, :, 2:]) + bboxes = tf.concat([x1y1, x2y2], axis=2) # fix bugs in Epic box format + + if mask_radius <= 0.0: + inside_box = grid[:, None, :, 0] >= bboxes[:, :, None, 0] # T x N x HW + inside_box = tf.logical_and( + inside_box, grid[:, None, :, 0] <= bboxes[:, :, None, 2]) + inside_box = tf.logical_and( + inside_box, grid[:, None, :, 1] >= bboxes[:, :, None, 1]) + inside_box = tf.logical_and( + inside_box, grid[:, None, :, 1] <= bboxes[:, :, None, 3]) # T x N x HW + if tracked_objects: + mask = tf.cast( + tf.transpose(inside_box, (0, 2, 1)), tf.float32) # T x HW x N + mask_channels = bbox_num + else: + mask = tf.cast( + tf.reduce_any(inside_box, 1), tf.float32) # T x HW + mask_channels = 1 + else: + centers = tf.stack( + [(bboxes[:, :, 0] + bboxes[:, :, 2]) / 2, + (bboxes[:, :, 1] + bboxes[:, :, 3]) / 2], axis=2) # T x N x 2 + dist2 = tf.reduce_sum( + (grid[:, None, :] - centers[:, :, None])**2, axis=3) # T x N x HW + area = (bboxes[:, :, 2] - bboxes[:, :, 0]) * ( + bboxes[:, :, 3] - bboxes[:, :, 1]) # T x N + filtered = tf.cast(area * h * w <= min_box_size ** 2, tf.float32) # T x N + dist2 = dist2 * ( + 1. - filtered[:, :, None]) + filtered[:, :, None] * 10000000. + delta = (1. - mask_radius) / (1. + mask_radius) # scalar + radius2 = delta ** 2 * 2 * area + 1e-6 # T x N + if tracked_objects: + weighted_dist = dist2 / radius2[:, :, None] # T x N x HW + gaussian_mask = tf.exp(-weighted_dist) # T x N x HW + gaussian_mask = tf.transpose(gaussian_mask, (0, 2, 1)) # T x HW x N + mask_channels = bbox_num + else: + weighted_dist = tf.reduce_min( + dist2 / radius2[:, :, None], axis=1) # T x HW + gaussian_mask = tf.exp(-weighted_dist) # T x HW + mask_channels = 1 + mask = gaussian_mask + + if concat_mask: + mask = tf.reshape(mask, (t, h, w, mask_channels)) + mask = tf.maximum( + tf.cast( + tf.broadcast_to( + tf.reshape(skip, (t, h, w, 1)), (t, h, w, mask_channels)), + tf.float32), + mask) + images = tf.concat([images, tf.cast(mask, tf.float32)], axis=3) + elif add_detections: + mask = tf.reshape( + mask, + (t // detection_stride_temporal, detection_stride_temporal, dh, dw)) + mask = tf.reduce_max(mask, axis=1) # t' x h x w + mask = tf.reshape( + mask, + (t // detection_stride_temporal * dh * dw,)) + feature_dict['detections'] = tf.cast(mask, tf.float32) + feature_dict['image'] = images + feature_dict['bboxes'] = bboxes + return feature_dict + + +def aggregate_bbox_coords(feature_dict): + """"Aggregate coordinates into boxes.""" + feature_dict['bboxes'] = tf.stack([ + feature_dict['xmin'], + feature_dict['ymin'], + feature_dict['xmax'], + feature_dict['ymax'] + ], axis=2) + # Remove these temporary fields. + for coord_name in {'xmax', 'xmin', 'ymax', 'ymin'}: + feature_dict.pop(coord_name) + return feature_dict + + +def remove_bboxes(feature_dict): + feature_dict.pop('bboxes', None) + feature_dict.pop('score', None) + return feature_dict + + +def pad_bboxes(feature_dict, num_pad_boxes): + """Pad boxes to the same size.""" + bboxes = feature_dict['bboxes'] # T x N x 4 + + num_frames = tf.shape(bboxes)[0] + input_length = tf.shape(bboxes)[1] + input_length = tf.clip_by_value(input_length, 0, num_pad_boxes) + bboxes = bboxes[:, :input_length] + + padding_length = tf.maximum(0, num_pad_boxes - input_length) + + paddings_boxes = tf.cast( + tf.zeros((num_frames, padding_length, 4)), tf.float32) + padded_bboxes = tf.concat([bboxes, paddings_boxes], axis=1) + feature_dict['bboxes'] = padded_bboxes + feature_dict.pop('score', None) + return feature_dict + + +def custom_crop_image( + frames: tf.Tensor, + height: int, + width: int, + random: bool, + state: Optional[builders.ProcessorState] = None, + ) -> tf.Tensor: + """Add more metadata to processors.crop_image.""" + if random: + # Random spatial crop. tf.image.random_crop is not used since the offset is + # needed to ensure consistency between crops on different modalities. + shape = tf.shape(input=frames) + # If a static_shape is available (e.g. when using this method from add_image + # method), it will be used to have an output tensor with static shape. + static_shape = frames.shape.as_list() + seq_len = shape[0] if static_shape[0] is None else static_shape[0] + channels = shape[3] if static_shape[3] is None else static_shape[3] + size = tf.convert_to_tensor(value=(seq_len, height, width, channels)) + + if state and 'crop_offset_proportion' in state: + # Use offset set by a previous cropping: [0, offset_h, offset_w, 0]. + offset = state['crop_offset_proportion'] * tf.cast(shape, tf.float32) + offset = tf.cast(tf.math.round(offset), tf.int32) + else: + # Limit of possible offset in order to fit the entire crop: + # [1, input_h - target_h + 1, input_w - target_w + 1, 1]. + limit = shape - size + 1 + offset = tf.random.uniform( + shape=(4,), + dtype=tf.int32, + maxval=tf.int32.max, + ) % limit # [0, offset_h, offset_w, 0] + + if state is not None: + # Update state. + offset_proportion = tf.cast(offset, tf.float32) / tf.cast( + shape, tf.float32) + state['crop_offset_proportion'] = offset_proportion # 4 + state['crop_ori_shape'] = shape # 4 + state['crop_offset_abs'] = offset # 4 + + frames = tf.slice(frames, offset, size) + else: + # Central crop or pad. + shape = tf.shape(input=frames) + static_shape = frames.shape.as_list() + seq_len = shape[0] if static_shape[0] is None else static_shape[0] + channels = shape[3] if static_shape[3] is None else static_shape[3] + size = tf.convert_to_tensor(value=(seq_len, height, width, channels)) + offset = tf.convert_to_tensor( + value=(0, (shape[1] - height) // 2, (shape[2] - width) // 2, 0)) + frames = tf.slice(frames, offset, size) + if state is not None: + state['crop_ori_shape'] = shape + state['crop_offset_abs'] = offset + return frames + + +def transform_box(boxes: tf.Tensor, + height: int, + width: int, + state: builders.ProcessorState) -> tf.Tensor: + """Transform boxes given the state of image crop.""" + assert (state and 'crop_offset_abs' in state and + 'crop_ori_shape' in state) + offset = state['crop_offset_abs'] + ori_shape = tf.cast(state['crop_ori_shape'], tf.float32) + pixel_offset = tf.reshape(tf.stack( + [offset[2], offset[1], offset[2], offset[1]]), (1, 1, 4)) + ori_size = tf.stack([ori_shape[2], ori_shape[1], ori_shape[2], ori_shape[1]]) + ori_size = tf.reshape(ori_size, (1, 1, 4)) + ori_boxes = boxes * tf.cast(ori_size, tf.float32) + crop_boxes = ori_boxes - tf.cast(pixel_offset, tf.float32) + new_shape = tf.constant([width, height, width, height], + dtype=tf.float32, shape=[1, 1, 4]) + out_boxes = crop_boxes / new_shape + return out_boxes + + +def three_spatial_crops_with_state(images, state, crop_size): + """Returns three spatial crops of the same frame, as done by SlowFast.""" + height, width = tf.shape(images)[1], tf.shape(images)[2] + + result = [] + for spatial_idx in range(3): + y_offset = tf.cast(tf.math.ceil((height - crop_size) / 2), tf.int32) + x_offset = tf.cast(tf.math.ceil((width - crop_size) / 2), tf.int32) + if height > width: + if spatial_idx == 0: + y_offset = 0 + elif spatial_idx == 2: + y_offset = height - crop_size + else: + if spatial_idx == 0: + x_offset = 0 + elif spatial_idx == 2: + x_offset = width - crop_size + images_cropped = tf.slice( + images, [0, y_offset, x_offset, 0], [-1, crop_size, crop_size, -1]) + if state is not None: + offset = tf.convert_to_tensor(value=(0, y_offset, x_offset, 0)) + shape = tf.convert_to_tensor(value=(-1, height, width, -1)) + offset_proportion = tf.cast(offset, tf.float32) / tf.cast( + shape, tf.float32) + state[f'crop_offset_proportion_{spatial_idx}'] = offset_proportion # 4 + state[f'crop_ori_shape_{spatial_idx}'] = shape # 4 + state[f'crop_offset_abs_{spatial_idx}'] = offset # 4 + result.append(images_cropped) + + return tf.concat(result, axis=0) + + +def three_spatial_transform_box(boxes, state, crop_size): + """Transform boxes given the state of image crop.""" + result = [] + for spatial_idx in range(3): + assert (state and f'crop_offset_abs_{spatial_idx}' in state and + f'crop_ori_shape_{spatial_idx}' in state) + offset = state[f'crop_offset_abs_{spatial_idx}'] + ori_shape = tf.cast(state[f'crop_ori_shape_{spatial_idx}'], tf.float32) + pixel_offset = tf.reshape(tf.stack( + [offset[2], offset[1], offset[2], offset[1]]), (1, 1, 4)) + ori_size = tf.stack( + [ori_shape[2], ori_shape[1], ori_shape[2], ori_shape[1]]) + ori_size = tf.reshape(ori_size, (1, 1, 4)) + ori_boxes = boxes * tf.cast(ori_size, tf.float32) + crop_boxes = ori_boxes - tf.cast(pixel_offset, tf.float32) + new_shape = tf.constant([crop_size, crop_size, crop_size, crop_size], + dtype=tf.float32, shape=[1, 1, 4]) + out_boxes = crop_boxes / new_shape + result.append(out_boxes) + return tf.concat(result, axis=0) + + +def random_flip_boxes_left_right(boxes: tf.Tensor, + state: Optional[ + builders.ProcessorState] = None, + ) -> tf.Tensor: + """Flip boxes given the state of image flip.""" + assert state and 'flip_left_right_is_flipped' in state + is_flipped = state['flip_left_right_is_flipped'] + boxes = tf.cond( + pred=tf.equal(is_flipped, 1), + # pylint: disable=g-long-lambda + true_fn=lambda: tf.constant([1, 0, 1, 0], dtype=tf.float32) + tf.constant( + [-1, 1, -1, 1], dtype=tf.float32) * boxes, + # pylint: enable=g-long-lambda + false_fn=lambda: boxes) + return boxes + + +def sample_sequence_uniformly_with_state( + sequence: tf.Tensor, + num_steps: int, + is_training: bool = True, + state: Optional[builders.ProcessorState] = None) -> tf.Tensor: + """mfp sample_sequence_uniformly with state.""" + + sequence_length = tf.shape(input=sequence)[0] + sequence_length = tf.cast(sequence_length, tf.int32) + stride = tf.cast(sequence_length // num_steps, tf.int32) + + if state and 'sample_sequence_uniformly_indices' in state: + indices = state['sample_sequence_uniformly_indices'] + else: + if stride > 0: + indices = tf.math.multiply(tf.range(num_steps), stride) + if is_training: + indices = indices + tf.random.uniform(shape=(1, num_steps), minval=0, + maxval=stride, dtype=tf.int32) + else: + if is_training: + indices = tf.sort(tf.random.uniform(shape=(1, num_steps), + minval=0, maxval=sequence_length, + dtype=tf.int32)) + else: + stride_float = tf.cast(sequence_length / num_steps, tf.float32) + indices = tf.cast(tf.range(num_steps, dtype=tf.float32) * stride_float, + tf.int32) + if state is not None: + state['sample_sequence_uniformly_indices'] = indices + + if is_training: + indices = indices[0] + + indices.set_shape((num_steps,)) + output = tf.gather(sequence, indices) + return output + + +def sample_fixed_offset(image_w: int, image_h: int, crop_w: int, crop_h: int, + more_fix_crop: bool = True) -> tf.Tensor: + """Sample offset of the crop out of 13 fixed offsets. + + The sampling strategy is taken from: https://arxiv.org/abs/2203.12602, Github: + https://github.com/MCG-NJU/VideoMAE. + + Args: + image_w: The width of the image. + image_h: The height of the image. + crop_w: The width of the crop. + crop_h: The height of the crop. + more_fix_crop: Add another 8 fixed crops to the sampling. + + Returns: + A tensor of shape [1, 2] with the corresponding offset + [[offset_w, offset_h]]. + """ + w_step = (image_w - crop_w) // 4 + h_step = (image_h - crop_h) // 4 + + ret = list() + ret.append((tf.constant(0), tf.constant(0))) # upper left + ret.append((4 * w_step, 0)) # upper right + ret.append((0, 4 * h_step)) # lower left + ret.append((4 * w_step, 4 * h_step)) # lower right + ret.append((2 * w_step, 2 * h_step)) # center + + if more_fix_crop: + ret.append((0, 2 * h_step)) # center left + ret.append((4 * w_step, 2 * h_step)) # center right + ret.append((2 * w_step, 4 * h_step)) # lower center + ret.append((2 * w_step, 0 * h_step)) # upper center + + ret.append((1 * w_step, 1 * h_step)) # upper left quarter + ret.append((3 * w_step, 1 * h_step)) # upper right quarter + ret.append((1 * w_step, 3 * h_step)) # lower left quarter + ret.append((3 * w_step, 3 * h_step)) # lower right quarter + + ret_index = tf.random.uniform((1, 1), minval=0, maxval=len(ret), + dtype=tf.int32)[0, 0] + ret = tf.stack(ret) + + ret_pair = tf.slice(ret, [ret_index, 0], [1, 2]) + return ret_pair + + +def sample_crop_size(image_h: int, image_w: int, + resized_size: tuple[int, int], scales: tf.Tensor, + max_distort: int = 1) -> tuple[int, int, int, int]: + """Sample a crop size and the offset out of fixed choices. + + Args: + image_h: The height of the image. + image_w: The width of the image. + resized_size: The size of the resized image. + scales: The scales for the resize operation. + max_distort: How many adjact possitions in the scales array to combine in + order to get the pairs for the resize options. + + Returns: + A tuple of 4 elements -> [crop_h, crop_w, offset_h, offset_w]. + + """ + + if len(scales) != 4: + raise NotImplementedError('Only 4 values are supported for the scale.') + + base_size = tf.cast(tf.minimum(image_w, image_h), tf.float32) + + crop_sizes = [tf.cast(base_size * scales[0], tf.int32), + tf.cast(base_size * scales[1], tf.int32), + tf.cast(base_size * scales[2], tf.int32), + tf.cast(base_size * scales[3], tf.int32)] + rsize_h, rsize_w = resized_size + + crop_h = [ + rsize_h if abs(crop_sizes[0] - rsize_h) < 3 else crop_sizes[0], + rsize_h if abs(crop_sizes[1] - rsize_h) < 3 else crop_sizes[1], + rsize_h if abs(crop_sizes[2] - rsize_h) < 3 else crop_sizes[2], + rsize_h if abs(crop_sizes[3] - rsize_h) < 3 else crop_sizes[3]] + + crop_w = [ + rsize_w if abs(crop_sizes[0] - rsize_w) < 3 else crop_sizes[0], + rsize_w if abs(crop_sizes[1] - rsize_w) < 3 else crop_sizes[1], + rsize_w if abs(crop_sizes[2] - rsize_w) < 3 else crop_sizes[2], + rsize_w if abs(crop_sizes[3] - rsize_w) < 3 else crop_sizes[3]] + + # Get the resized pairs. + pairs = [] + for i, h in enumerate(crop_h): + for j, w in enumerate(crop_w): + if abs(i - j) <= max_distort: + pairs.append((w, h)) + + # Implement random.choice. + crop_pair_index = tf.random.uniform((1, 1), minval=0, maxval=len(pairs), + dtype=tf.int32)[0, 0] + pairs = tf.stack(pairs) + crop_pair = tf.slice(pairs, [crop_pair_index, 0], [1, 2]) + + offset = sample_fixed_offset(image_w=image_w, image_h=image_h, + crop_w=crop_pair[0][0], crop_h=crop_pair[0][1]) + return crop_pair[0][1], crop_pair[0][0], offset[0][1], offset[0][0] + + +def crop_and_resize_image_tong(frames: tf.Tensor, + resized_size: tuple[int, int] = (224, 224), + scales: tf.Tensor = tf.constant( + [1, .875, .75, .66])) -> tf.Tensor: + """Crops and resizes the images in the given sequence of images. + + Args: + frames: A tensor of dimension [timesteps, input_h, input_w, channels]. + resized_size: The size for the resize operation. + scales: The scales for the resize operation. Must be a tensor with 4 values. + Returns: + A tensor of shape [timesteps, output_h, output_w, channels] of same type as + input with the cropped and resized images. + """ + + shape = tf.shape(input=frames) + timesteps = shape[0] + image_h = shape[1] + image_w = shape[2] + channels = shape[3] + + crop_h, crop_w, offset_h, offset_w = sample_crop_size( + image_h=image_h, image_w=image_w, resized_size=resized_size, + scales=scales) + + offset = tf.convert_to_tensor(value=(0, offset_h, offset_w, 0)) + size = tf.convert_to_tensor(value=(timesteps, crop_h, crop_w, channels)) + frames = tf.slice(frames, offset, size) + frames = tf.image.resize(frames, resized_size) + + return frames + + +def sample_sequence_uniformly( + sequence: tf.Tensor, + num_steps: int, + is_training: bool = True) -> tf.Tensor: + """Uniform frame sampling. + + Sample frames based on uniform sampling following TSN (Wang et al., 2019) + used by Tong et al. in VideoMAE. The stride is automatically computed based on + the length of the sequence and the number of frames to take (`num_steps`). If + `is_training` is set to False, a deterministic sequence will be returned. + + Args: + sequence: Any tensor where the first dimension is timesteps. + num_steps: Number of steps (e.g. frames) to take. + is_training: If is called during training or not. + Returns: + A single tensor with first dimension `num_steps` with the sampled segment. + """ + + sequence_length = tf.shape(input=sequence)[0] + sequence_length = tf.cast(sequence_length, tf.int32) + stride = tf.cast(sequence_length // num_steps, tf.int32) + + if stride > 0: + indices = tf.math.multiply(tf.range(num_steps), stride) + if is_training: + indices = indices + tf.random.uniform(shape=(1, num_steps), minval=0, + maxval=stride, dtype=tf.int32) + else: + if is_training: + indices = tf.sort(tf.random.uniform(shape=(1, num_steps), + minval=0, maxval=sequence_length, + dtype=tf.int32)) + else: + stride_float = tf.cast(sequence_length / num_steps, tf.float32) + indices = tf.cast(tf.range(num_steps, dtype=tf.float32) * stride_float, + tf.int32) + if is_training: + indices = indices[0] + + indices.set_shape((num_steps,)) + output = tf.gather(sequence, indices) + return output + + +def sample_two_sequences_uniformly(sequence: tf.Tensor, num_steps: int): + """Uniform sampling two non-overlapping sequences. + + Sample frames based on uniform sampling following TSN (Wang et al., 2019) + used by Tong et al. in VideoMAE. The stride is automatically computed based on + the length of the sequence and the number of frames to take (`num_steps`) + + Args: + sequence: Any tensor where the first dimension is timesteps. + num_steps: Number of steps (e.g. frames) to take. + Returns: + A single tensor with first dimension `2 * num_steps` with the sampled + segment. + """ + + sequence_length = tf.shape(input=sequence)[0] + sequence_length = tf.cast(sequence_length, tf.int32) + average_duration = tf.cast(sequence_length / num_steps, tf.float32) + + index_1 = tf.cast(tf.range(num_steps, dtype=tf.float32) + * average_duration + average_duration / 2.0, tf.int32) + + index_2 = tf.cast(tf.range(num_steps, dtype=tf.float32) + * average_duration, tf.int32) + indices = tf.concat((index_1, index_2), axis=0) + + indices.set_shape((2 * num_steps,)) + output = tf.gather(sequence, indices) + return output + + +def deterministic_crop(images, size, spatial_idx): + """Takes a deterministic crop of input images. + + Args: + images: `Tensor` of shape shape [t, h, w, c] + size: Integer ; size of height and width to crop the images. + spatial_idx: 0, 1, or 2 for left, center, and right crop if width is larger + than height. Or 0, 1, or 2 for top, center, and bottom crop if height is + larger than width. + + Returns: + cropped: `Tensor` of shape [t, crop_size, crop_size, c] + """ + assert spatial_idx in [0, 1, 2] + height, width = tf.shape(images)[1], tf.shape(images)[2] + + y_offset = tf.cast(tf.math.ceil((height - size) / 2), tf.int32) + x_offset = tf.cast(tf.math.ceil((width - size) / 2), tf.int32) + + if height > width: + if spatial_idx == 0: + y_offset = 0 + elif spatial_idx == 2: + y_offset = height - size + else: + if spatial_idx == 0: + x_offset = 0 + elif spatial_idx == 2: + x_offset = width - size + + cropped = tf.slice(images, [0, y_offset, x_offset, 0], [-1, size, size, -1]) + + return cropped + + +def three_spatial_crops(images, crop_size): + """Returns three spatial crops of the same frame, as done by SlowFast. + + This enables testing using the same protocol as prior works. ie + (https://arxiv.org/abs/1812.03982, https://arxiv.org/abs/1904.02811, + https://arxiv.org/abs/2004.04730) + If width > height, takes left, centre and right crop. + If height > width, takes top, middle and bottom crop. + + Args: + images: `Tensor` of shape [t, h, w, c] + crop_size: The size to crop from the images + + Returns: + `Tensor` of shape [3 * t, h, w, c] + """ + + result = [] + for spatial_index in range(3): + images_cropped = deterministic_crop(images, crop_size, spatial_index) + result.append(images_cropped) + + return tf.concat(result, axis=0) diff --git a/scenic/projects/objectvivit/datasets.py b/scenic/projects/objectvivit/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..b0050d68ecc81189515c41efde8c3a64b153915e --- /dev/null +++ b/scenic/projects/objectvivit/datasets.py @@ -0,0 +1,425 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data-loader to read from TFRecord using the MediaSequence format.""" + +import functools +from typing import Dict, Iterator, Optional, Text, Tuple, Union + +from absl import logging +from dmvr import builders +from dmvr import modalities + +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import scenic.projects.objectvivit.dataset_utils as objects_dataset_utils +from scenic.projects.vivit.data.video_tfrecord_dataset import TFRecordDatasetFactory +import tensorflow as tf + + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +PRNGKey = jnp.ndarray +Rng = Union[jnp.ndarray, Dict[str, jnp.ndarray]] + + +class ObjectsTFRecordDatasetFactory(TFRecordDatasetFactory): + """Support bounding boxes.""" + + def _build( + self, + is_training: bool = True, + # Video related parameters. + num_frames: int = 32, + stride: int = 1, + num_test_clips: int = 1, + min_resize: int = 256, + crop_size: int = 224, + resize_keep_aspect_ratio: bool = True, + zero_centering_image: bool = False, + random_flip: bool = True, + normalization_mean: Union[tf.Tensor, float] = 0, + normalization_std: Union[tf.Tensor, float] = 1, + train_frame_sampling_mode: str = 'random', + use_crop_and_resize_video_mae: bool = False, + # Label related parameters. + one_hot_label: bool = True, + get_label_str: bool = False, + label_offset: int = 0, + object_configs: ml_collections.ConfigDict = ml_collections.ConfigDict(), + ): + """Adds DMVR pre-processors to the dataset.""" + + objects_dataset_utils.add_image_and_boxes( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_feature_name='image/encoded', + output_feature_name=builders.IMAGE_FEATURE_NAME, + is_training=is_training, + random_flip=random_flip, + num_frames=num_frames, + stride=stride, + num_test_clips=num_test_clips, + min_resize=min_resize, + crop_size=crop_size, + use_crop_and_resize_video_mae=use_crop_and_resize_video_mae, + train_frame_sampling_mode=train_frame_sampling_mode, + zero_centering_image=zero_centering_image, + normalization_mean=normalization_mean, + normalization_std=normalization_std, + object_configs=object_configs + ) + + modalities.add_label( + parser_builder=self.parser_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + one_hot_label=one_hot_label, + num_classes=self.num_classes, + add_label_name=get_label_str) + + if label_offset: + self.preprocessor_builder.add_fn( + fn=lambda x: x - label_offset, + feature_name=builders.LABEL_INDEX_FEATURE_NAME, + fn_name=f'label_offset_{label_offset}', + add_before_fn_name=(f'{builders.LABEL_INDEX_FEATURE_NAME}_one_hot')) + + +def load_split( + ds_factory, + batch_size: int, + shuffle_buffer_size: int, + subset: Text = 'train', + num_frames: int = 32, + stride: int = 2, + num_test_clips: int = 1, + min_resize: int = 256, + crop_size: int = 224, + resize_keep_aspect_ratio: bool = True, + one_hot_label: bool = True, + zero_centering: bool = True, + random_flip: bool = True, + normalization_mean: Union[tf.Tensor, float] = 0.0, + normalization_std: Union[tf.Tensor, float] = 1.0, + get_label_str: bool = False, + augmentation_params: Optional[ml_collections.ConfigDict] = None, + keep_key: bool = False, + do_three_spatial_crops: bool = False, + label_offset: int = 0, + train_frame_sampling_mode: str = 'random', + use_crop_and_resize_video_mae: bool = False, + object_configs: ml_collections.ConfigDict = ml_collections.ConfigDict(), + num_channels: int = 3, + ) -> Tuple[tf.data.Dataset, int]: + """Additionally support loading object boxes.""" + dataset = ds_factory(subset=subset).configure( + is_training=(subset == 'train'), + num_frames=num_frames, + stride=stride, + num_test_clips=num_test_clips, + min_resize=min_resize, + crop_size=crop_size, + resize_keep_aspect_ratio=resize_keep_aspect_ratio, + zero_centering_image=zero_centering, + random_flip=random_flip, + train_frame_sampling_mode=train_frame_sampling_mode, + one_hot_label=one_hot_label, + get_label_str=get_label_str, + label_offset=label_offset, + use_crop_and_resize_video_mae=use_crop_and_resize_video_mae, + normalization_mean=normalization_mean, + normalization_std=normalization_std, + object_configs=object_configs, + ) + del augmentation_params + + if subset != 'train' and do_three_spatial_crops and resize_keep_aspect_ratio: + with_boxes = object_configs.get('with_boxes', False) + if with_boxes: + dataset.preprocessor_builder.replace_fn( + f'{builders.IMAGE_FEATURE_NAME}_central_crop', + functools.partial( + objects_dataset_utils.three_spatial_crops_with_state, + crop_size=crop_size)) + dataset.preprocessor_builder.replace_fn( + 'bboxes_central_crop', + functools.partial( + objects_dataset_utils.three_spatial_transform_box, + crop_size=crop_size)) + else: + dataset.preprocessor_builder.replace_fn( + f'{builders.IMAGE_FEATURE_NAME}_central_crop', + functools.partial( + objects_dataset_utils.three_spatial_crops, crop_size=crop_size)) + + if num_test_clips == 1: + # This means that reshaping is not part of the post-processing graph. + dataset.postprocessor_builder.add_fn( + fn=lambda x: tf.reshape( # pylint: disable=g-long-lambda + x, (-1, num_frames, crop_size, crop_size, num_channels)), + feature_name=builders.IMAGE_FEATURE_NAME, + fn_name=f'{builders.IMAGE_FEATURE_NAME}_reshape') + if object_configs.get('return_boxes', -1) > 0: + dataset.postprocessor_builder.add_fn( + fn=lambda x: tf.reshape( # pylint: disable=g-long-lambda + x, + (-1, num_frames, object_configs.get('return_boxes'), 4)), + feature_name='bboxes', + fn_name='bboxes_reshape') + + logging.info('Frame sampling graph: %s', + dataset.sampler_builder.get_summary()) + logging.info('Preprocessing graph: %s', + dataset.preprocessor_builder.get_summary()) + logging.info('Postprocessing graph: %s', + dataset.postprocessor_builder.get_summary()) + num_examples = dataset.num_examples + + if subset == 'train': + dataset.tune(shuffle_buffer=shuffle_buffer_size) + + # Validation and test splits are a single epoch, so that the last batch + # is padded with zeroes. This is then repeated. + ds = dataset.make_dataset( + batch_size=batch_size, + shuffle=(subset == 'train'), + num_epochs=None if (subset == 'train') else 1, + drop_remainder=(subset == 'train'), + keep_key=(subset != 'train' and keep_key)) + + if subset != 'train': + ds = ds.repeat(None) + + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + ds = ds.with_options(options) + + return ds, num_examples + + +@datasets.add_dataset('objects_video_tfrecord_dataset') +def objects_video_tfrecord_dataset( + *, + batch_size: int, + eval_batch_size: int, + num_shards: int, + dtype_str: Text = 'float32', + shuffle_seed: Optional[int] = 0, + rng: Optional[Rng] = None, + dataset_configs: ml_collections.ConfigDict, + dataset_service_address: Optional[str] = None) -> dataset_utils.Dataset: + """Returns a generator for dataset.""" + del rng # Parameter was required by caller API, but is unused. + + shuffle_buffer_size = dataset_configs.get('shuffle_buffer_size', 256) + num_frames = dataset_configs.get('num_frames', 32) + num_test_clips = dataset_configs.get('num_test_clips', 1) + stride = dataset_configs.get('stride', 2) + min_resize = dataset_configs.get('min_resize', 256) + min_resize_train = dataset_configs.get('min_resize_train', min_resize) + min_resize_test = dataset_configs.get('min_resize_test', min_resize) + crop_size = dataset_configs.get('crop_size', 224) + resize_keep_aspect_ratio = dataset_configs.get('resize_keep_aspect_ratio', + True) + one_hot_label = dataset_configs.get('one_hot_label', True) + zero_centre_data = dataset_configs.get('zero_centering', True) + random_flip = dataset_configs.get('random_flip', True) + augmentation_params = dataset_configs.get('augmentation_params', None) + num_train_val_clips = dataset_configs.get('num_train_val_clips', 1) + keep_test_key = dataset_configs.get('keep_test_key', False) + # For the test set, the actual batch size is test_batch_size*num_test_clips. + test_batch_size = dataset_configs.get('test_batch_size', eval_batch_size) + do_three_spatial_crops = dataset_configs.get('do_three_spatial_crops', False) + num_spatial_crops = 3 if do_three_spatial_crops else 1 + test_split = dataset_configs.get('test_split', 'test') + label_offset = dataset_configs.get('label_offset', 0) + train_frame_sampling_mode = dataset_configs.get('train_frame_sampling_mode', + 'random') + examples_per_subset = dataset_configs.get('examples_per_subset', None) + use_crop_and_resize_video_mae = augmentation_params.get( + 'crop_and_resize_video_mae', False) if (augmentation_params + is not None) else False + normalization_mean = dataset_configs.get('normalization_mean', 0) + normalization_std = dataset_configs.get('normalization_std', 1) + object_configs = dataset_configs.get( + 'object_configs', ml_collections.ConfigDict()) + num_channels = 3 + if object_configs.get('with_boxes', False) and object_configs.get( + 'concat_mask', False): + num_channels += 1 if not object_configs.get( + 'tracked_objects', False) else object_configs['bbox_num'] + + if isinstance(normalization_mean, (list, tuple)): + normalization_mean = tf.constant(normalization_mean, tf.float32) + if isinstance(normalization_std, (list, tuple)): + normalization_std = tf.constant(normalization_std, tf.float32) + + if dataset_configs.get('base_dir') is None: + raise ValueError('base_dir must be specified for TFRecord dataset') + if not dataset_configs.get('tables'): + raise ValueError('tables mapping must be specified for TFRecord dataset') + if not dataset_configs.get('num_classes'): + raise ValueError('num_classes must be specified for TFRecord dataset') + + ds_factory = functools.partial( + ObjectsTFRecordDatasetFactory, + base_dir=dataset_configs.base_dir, + tables=dataset_configs.tables, + num_classes=dataset_configs.num_classes, + num_groups=jax.process_count(), + group_index=jax.process_index(), + examples_per_subset=examples_per_subset) + + def create_dataset_iterator( + subset: str, + batch_size_local: int, + num_clips: int, + keep_key_local: bool = False, + is_test: bool = False) -> Tuple[Iterator[Batch], int]: + is_training = subset == 'train' + is_test = (subset == 'test' or is_test) + logging.info('Loading split %s', subset) + + dataset, num_examples = load_split( + ds_factory, + batch_size=batch_size_local, + shuffle_buffer_size=shuffle_buffer_size, + subset=subset, + num_frames=num_frames, + stride=stride, + num_test_clips=num_clips, + min_resize=min_resize_train if is_training else min_resize_test, + crop_size=crop_size, + resize_keep_aspect_ratio=resize_keep_aspect_ratio, + one_hot_label=one_hot_label, + zero_centering=zero_centre_data, + random_flip=random_flip, + augmentation_params=augmentation_params, + keep_key=keep_key_local, + do_three_spatial_crops=do_three_spatial_crops and is_test, + label_offset=label_offset, + train_frame_sampling_mode=train_frame_sampling_mode, + use_crop_and_resize_video_mae=use_crop_and_resize_video_mae, + normalization_mean=normalization_mean, + normalization_std=normalization_std, + object_configs=object_configs, + num_channels=num_channels, + ) + + if dataset_service_address and is_training: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + dataset = dataset_utils.distribute(dataset, dataset_service_address) + + pad_batch_size = batch_size_local + if is_test: + pad_batch_size = batch_size_local * num_clips * num_spatial_crops + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + current_ds_iterator = iter(dataset) + current_ds_iterator = map(dataset_utils.tf_to_numpy, current_ds_iterator) + current_ds_iterator = map(map_keys, current_ds_iterator) + + if is_test and num_clips * num_spatial_crops > 1: + current_ds_iterator = map(custom_tile_label_key, current_ds_iterator) + + current_ds_iterator = map( + functools.partial( + dataset_utils.maybe_pad_batch, + train=is_training, + batch_size=pad_batch_size), current_ds_iterator) + + if is_training and augmentation_params and augmentation_params.get( + 'do_mixup', False): + mixup_alpha = augmentation_params.get('mixup_alpha', 1.0) + mixup_batches = functools.partial( + dataset_utils.mixup, alpha=mixup_alpha, image_format='NTHWC') + logging.info('Doing mixup with alpha %f', mixup_alpha) + current_ds_iterator = map(mixup_batches, current_ds_iterator) + current_ds_iterator = map(shard_batches, current_ds_iterator) + if is_training and dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + current_ds_iterator = jax_utils.prefetch_to_device( + current_ds_iterator, dataset_configs.get('prefetch_to_device')) + + return current_ds_iterator, num_examples + + train_iter, n_train_examples = create_dataset_iterator( + 'train', batch_size, num_train_val_clips) + eval_iter, n_eval_examples = create_dataset_iterator('validation', + eval_batch_size, + num_train_val_clips) + test_iter, n_test_examples = create_dataset_iterator(test_split, + test_batch_size, + num_test_clips, + keep_test_key, + is_test=True) + + meta_data = { + 'num_classes': dataset_configs.num_classes, + 'num_train_examples': n_train_examples * num_train_val_clips, + 'num_eval_examples': n_eval_examples * num_train_val_clips, + 'num_test_examples': + (n_test_examples * num_test_clips * num_spatial_crops), + 'target_is_onehot': one_hot_label, + } + + meta_data['input_shape'] = ( + -1, num_frames, crop_size, crop_size, num_channels) + meta_data['input_dtype'] = getattr(jnp, dtype_str) + logging.info('Dataset metadata:\n%s', meta_data) + + return dataset_utils.Dataset(train_iter, eval_iter, test_iter, meta_data) + + +def map_keys(batch: Batch) -> Batch: + """DMVR dataset returns 'image' and 'label'. We want 'inputs' and 'label'.""" + batch['inputs'] = batch.pop(builders.IMAGE_FEATURE_NAME) + return batch # pytype: disable=bad-return-type # jax-ndarray + + +def custom_tile_label_key( + batch: Batch) -> Batch: + """Tile labels and keys to match input videos when num_test_clips > 1. + + When multiple test crops are used (ie num_test_clips > 1), the batch dimension + of batch['inputs'] = test_batch_size * num_test_clips. + However, labels and keys remain of size [test_batch_size]. + This function repeats label and key to match the inputs. + + Args: + batch: Batch from iterator + + Returns: + Batch with 'label' and 'key' tiled to match 'inputs'. The input batch is + mutated by the function. + """ + n_repeats = batch['inputs'].shape[0] // batch['label'].shape[0] + batch['label'] = np.repeat(batch['label'], n_repeats, axis=0) + if 'key' in batch: + batch['key'] = np.repeat(batch['key'], n_repeats, axis=0) + return batch diff --git a/scenic/projects/objectvivit/main.py b/scenic/projects/objectvivit/main.py new file mode 100644 index 0000000000000000000000000000000000000000..096b28d8bb0ca85a69da9e88f045a9693db910b1 --- /dev/null +++ b/scenic/projects/objectvivit/main.py @@ -0,0 +1,58 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for ObjectViViT.""" + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app + +from scenic.projects.objectvivit import model +from scenic.projects.objectvivit import trainer +# pylint: disable=unused-import +import scenic.projects.objectvivit.datasets +from scenic.train_lib import train_utils + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name): + """"Selects Vivit model type.""" + if model_name == 'vivit_classification': + return model.ViViTModelWithObjects + else: + raise ValueError('Unrecognized model: {}'.format(model_name)) + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the ViViT project.""" + model_cls = get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + trainer.train( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/objectvivit/model.py b/scenic/projects/objectvivit/model.py new file mode 100644 index 0000000000000000000000000000000000000000..8d22c8dd33986fa7bfc63db51e26e666ab5f7a73 --- /dev/null +++ b/scenic/projects/objectvivit/model.py @@ -0,0 +1,286 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""ViViT model with object-guided training. +""" +from typing import Any, Optional + +from absl import logging +import flax +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import classification_model +from scenic.model_lib.layers import nn_layers +from scenic.projects.objectvivit import model_utils +from scenic.projects.vivit import model as vivit_model +from scenic.projects.vivit import model_utils as vivit_model_utils + + +class ObjectViViT(nn.Module): + """ViViT model with object information.""" + + mlp_dim: int + num_layers: int + num_heads: int + num_classes: int + patches: ml_collections.ConfigDict + hidden_size: int + temporal_encoding_config: ml_collections.ConfigDict + attention_config: ml_collections.ConfigDict + dropout_rate: float = 0. + attention_dropout_rate: float = 0. + stochastic_droplayer_rate: float = 0. + representation_size: Optional[int] = None + classifier: str = 'gap' + use_batch_norm_after_encoder: bool = True + positional_embedding: str = 'sinusoidal_1d' + normalise_encoder_output: bool = True + use_approximate_gelu: bool = True + dtype: jnp.dtype = jnp.float32 + object_config: ml_collections.ConfigDict = ml_collections.ConfigDict() + detector_configs: ml_collections.ConfigDict = ml_collections.ConfigDict() + attach_configs: ml_collections.ConfigDict = ml_collections.ConfigDict() + + @nn.compact + def __call__( + self, inputs: jnp.ndarray, boxes: Optional[jnp.ndarray] = None, + detections: Optional[jnp.ndarray] = None, *, + train: bool = False, debug: bool = False): + token_score_from_dataloader = self.attach_configs.get( + 'token_score_from_dataloader', False) + data_has_detection = self.detector_configs.get('use_detector', False) or ( + self.attach_configs.get('enabled', False) + ) or token_score_from_dataloader + run_cross_frame_attention = self.attach_configs.get( + 'run_cross_frame_attention', False) + random_object_baseline = self.attach_configs.get( + 'random_object_baseline', False) + + if data_has_detection: + assert not random_object_baseline + if token_score_from_dataloader: + inputs, token_scores = inputs[..., :3], inputs[..., 3:] + token_scores = model_utils.resize_token_score( + token_scores, self.patches.size) # batch x num_tokens x num_objs + token_scores = token_scores.transpose( + 0, 2, 1) # batch x num_objs x num_tokens + else: + assert 0 + elif random_object_baseline: + n_batch = inputs.shape[0] + sp = inputs.shape + sz = self.patches.size + n_tokens = (sp[1] * sp[2] * sp[3]) // (sz[0] * sz[1] * sz[2]) + token_scores = jax.random.uniform( + self.make_rng('dropout'), (n_batch, 1, n_tokens)) + else: + token_scores = None + + # Shape is [batch, num_tokens, hidden_size] + x_tokens, temporal_dims = vivit_model.temporal_encode( + inputs, self.temporal_encoding_config, self.patches, self.hidden_size) + + n_batch, n_tokens, hidden_dim = x_tokens.shape + height = width = int(np.sqrt(n_tokens // temporal_dims)) + if height * width * temporal_dims != n_tokens: + raise ValueError('Input is assumed to be square.') + num_tokens_per_frame = n_tokens // (inputs.shape[1] // self.patches.size[2]) + + # fg_inds is used to drop background tokens or attach more tokens. + # We need to process fg_inds (index of foreground tokens) outside of + # CustomEncoder to handle self.classifier == 'token'. + fg_inds = None + if self.attach_configs.get('enabled', False) or self.attach_configs.get( + 'drop_pixel_tokens', False): + fg_inds = model_utils.get_object_inds( + token_scores, num_tokens_per_frame, self.attach_configs + ) # batch x num_attach_tokens + + # Add positional encodings. + input_shape = None + if self.positional_embedding not in ['learned_1d']: + x_tokens = model_utils.add_positional_embeddings( + x_tokens, self.positional_embedding, input_shape=input_shape) + + # If we want to add a class token, add it here. + if self.classifier == 'token': + cls = self.param('cls', nn.initializers.zeros, (1, 1, hidden_dim), + x_tokens.dtype) + cls = jnp.tile(cls, [n_batch, 1, 1]) + x_tokens = jnp.concatenate([cls, x_tokens], axis=1) + if fg_inds is not None: + cls_inds = jnp.zeros((n_batch, 1), dtype=fg_inds.dtype) + fg_inds = jnp.concatenate([cls_inds, fg_inds + 1], axis=-1) + + x_tokens_encoded, _, aux = model_utils.CustomEncoder( + temporal_dims=temporal_dims, + hidden_size=self.hidden_size, + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + attention_config=self.attention_config, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_droplayer_rate=self.stochastic_droplayer_rate, + dtype=self.dtype, + positional_embedding='none' if self.positional_embedding not in [ + 'learned_1d'] else self.positional_embedding, + normalise_output=self.normalise_encoder_output, + use_approximate_gelu=self.use_approximate_gelu, + num_tokens_per_frame=num_tokens_per_frame, + object_config=self.object_config, + attach_configs=self.attach_configs, + run_cross_frame_attention=run_cross_frame_attention, + video_batch=n_batch, + name='Transformer')( + x_tokens, fg_inds=fg_inds, + token_scores=token_scores, boxes=boxes, + train=train, debug=debug) + + if self.classifier in ('token', '0'): + x_tokens_encoded = x_tokens_encoded[:, 0] + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x_tokens_encoded = fn(x_tokens_encoded, axis=1) + x_tokens_encoded = nn.LayerNorm(name='encoder_norm')(x_tokens_encoded) + else: + raise ValueError(f'Unknown classifier {self.classifier}') + + if self.representation_size is not None: + x_tokens_encoded = nn.Dense(self.representation_size, + name='pre_logits')(x_tokens_encoded) + x_tokens_encoded = nn.tanh(x_tokens_encoded) + else: + x_tokens_encoded = nn_layers.IdentityLayer(name='pre_logits')( + x_tokens_encoded) + + x_tokens_encoded = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x_tokens_encoded) + if debug: + return x_tokens_encoded, aux + return x_tokens_encoded + + +class ViViTModelWithObjects(classification_model.ClassificationModel): + """Vision Video Transformer model for MAE finetuning.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + attention_type = self.config.model.attention_config.get( + 'type', 'spacetime') + assert attention_type in ['spacetime'] + num_classes = self.dataset_meta_data['num_classes'] + + return ObjectViViT( + num_classes=num_classes, + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + temporal_encoding_config=self.config.model.temporal_encoding_config, + attention_config=self.config.model.attention_config, + representation_size=self.config.model.representation_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.0), + attention_dropout_rate=self.config.model.get( + 'attention_dropout_rate', 0.0), + stochastic_droplayer_rate=self.config.model.get( + 'stochastic_droplayer_rate', 0), + dtype=model_dtype, + normalise_encoder_output=self.config.model.get( + 'normalise_encoder_output', + self.config.model.classifier == 'token'), + use_approximate_gelu=self.config.model.get( + 'use_approximate_gelu', True), + positional_embedding=self.config.model.get( + 'positional_embedding', 'sinusoidal_1d'), + use_batch_norm_after_encoder=self.config.model.get( + 'use_batch_norm_after_encoder', True), + object_config=self.config.model.get( + 'object_config', ml_collections.ConfigDict()), + detector_configs=self.config.get( + 'detector_configs', ml_collections.ConfigDict()), + attach_configs=self.config.get( + 'attach_configs', ml_collections.ConfigDict()), + ) + + def init_from_train_state(self, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_proj: bool = False) -> Any: + """Updates the train_state with data from restored_train_state.""" + attention_type = self.config.model.attention_config.get( + 'type', 'spacetime') + if attention_type in ['spacetime']: + vivit_transformer_key = 'Transformer' + else: + raise ValueError(f'Attention type {attention_type} does not exist.') + + vivit_transformer_key = self.config.init_from.get( + 'vivit_transformer_key', vivit_transformer_key) + + logging.info('vivit_transformer_key: %s.', vivit_transformer_key) + if vivit_transformer_key in restored_train_state.params and ( + 'encoder_norm' in restored_train_state.params[vivit_transformer_key]): + logging.info('fixing loading encoder_norm') + restored_parameters = flax.core.unfreeze(restored_train_state.params) + norm_parameters = restored_parameters[vivit_transformer_key].pop( + 'encoder_norm') + restored_parameters['encoder_norm'] = norm_parameters + restored_train_state = restored_train_state.replace( + params=flax.core.freeze(restored_parameters)) + + # If we restore from a non-MAE checkpoint and the positional embedding is + # 'learned_1d', we have to move the positional embedding outside + # the 'Transformer' block and also to drop the value of cls positional + # embedding from the positonal embedding and add it to cls token. + + if (self.config.init_from.get('restore_from_non_mae_checkpoint', False) + and self.config.model.get('positional_embedding', + 'sinusoidal_1d') == 'learned_1d'): + # Move the positional embedding outside the 'Transformer' block. + restored_parameters = flax.core.unfreeze(restored_train_state.params) + restored_parameters['posembed_input'] = restored_parameters[ + vivit_transformer_key].pop('posembed_input') + + if restored_model_cfg.model.classifier == 'token': + pos_embedding_params = restored_parameters[ + 'posembed_input']['pos_embedding'] + # Drop the value of cls positional embedding. + cls_pos_embedding = pos_embedding_params[:, 0] + restored_parameters['posembed_input'][ + 'pos_embedding'] = pos_embedding_params[:, 1:] + # Add the value of cls positional embedding to cls token. + if 'cls' in restored_parameters: + restored_parameters['cls'] = restored_parameters[ + 'cls'] + cls_pos_embedding + + restored_train_state = restored_train_state.replace( + params=flax.core.freeze(restored_parameters)) + + return vivit_model_utils.initialise_from_train_state( + self.config, + train_state, + restored_train_state, + restored_model_cfg, + restore_output_proj, + vivit_transformer_key=vivit_transformer_key) diff --git a/scenic/projects/objectvivit/model_utils.py b/scenic/projects/objectvivit/model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..4756f7d87b5efaaaec3089c32d5a74409846dda1 --- /dev/null +++ b/scenic/projects/objectvivit/model_utils.py @@ -0,0 +1,391 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Util functions for ViViT models.""" + +import functools +from typing import Any, Callable, Iterable, Optional, Sequence + +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.layers import attention_layers +from scenic.projects.objectvivit.object_attention import ObjectBlock + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +def get_object_inds( + scores, num_tokens_per_frame, configs, factorized_encoder=False): + """Generate inds from scores. + + Args: + scores: batch x num_objs x num_tokens + num_tokens_per_frame: int + configs: config dict + factorized_encoder: bool; if it is used in the factorized_encoder model. + Get index for each frame if so. + Returns: + inds: batch x num_attach_tokens if factorized_encoder==False else + batch x num_frames x num_frame_attach_tokens + """ + num_total_attach_tokens = configs.get('num_total_attach_tokens', -1) + num_frame_attach_tokens = configs.get('num_frame_attach_tokens', -1) + assert num_total_attach_tokens == -1 or num_frame_attach_tokens == -1 + assert (not factorized_encoder) or num_frame_attach_tokens > 0 + batch = scores.shape[0] + # combine heatmaps from different objects + pooled_scores = scores.max(axis=1) # batch x num_tokens + if num_total_attach_tokens > 0: + pooled_scores = pooled_scores.reshape(batch, -1) + _, inds = jax.lax.top_k(pooled_scores, k=num_total_attach_tokens) + else: + pooled_scores = pooled_scores.reshape( + batch, -1, num_tokens_per_frame) # B x T x HW + num_frames = pooled_scores.shape[1] + _, inds = jax.lax.top_k( + pooled_scores, k=num_frame_attach_tokens) # B x T x k + if not factorized_encoder: + inds = inds.reshape(batch, -1) # [B * num_objs, Tk] + base = jnp.arange( + num_frames * num_frame_attach_tokens + ) // num_frame_attach_tokens * num_tokens_per_frame + inds = inds + base[None] # [B * num_objs, Tk] + inds = inds.reshape(batch, -1) + return inds + + +def resize_token_score(scores, patch_size): + batch, in_t, in_h, in_w, n_obj = scores.shape + fh, fw, ft = patch_size + gt, gh, gw = in_t // ft, in_h // fh, in_w // fw + scores = scores.reshape(batch, gt, ft, gh, fh, gw, fw, n_obj).mean( + axis=6).mean(axis=4).mean(axis=2).reshape(batch, gt * gh * gw, n_obj) + return scores + + +def add_positional_embeddings( + inputs: jnp.ndarray, + posemb_type: str, + input_shape: Optional[Iterable[int]] = None, + layer_name: str = 'posembed_input') -> jnp.ndarray: + """Adds positional embeddings to an input sequence. + + Args: + inputs: Tokens of shape [batch, num_tokens, hidden_size]. + posemb_type: The type of positional encoding. Must be one of + {sinusoidal_1d, sinusoidal_2d, sinusoidal_3d, learned_1d}. + input_shape: Used for "sinusoidal_2d" and "sinusoidal_3d". In this case, + the input is reshaped to this size ie [batch, height, width, hidden_size], + before applying the positional encodings and then reshaping back. + layer_name: The layer name for learned embedddings. + + Returns: + The input tokens with the positional encodings added. The shape is + [batch, num_tokens, hidden_size]. + """ + del layer_name + del input_shape + if posemb_type == 'sinusoidal_1d': + x_posemb = attention_layers.Add1DPositionEmbedding( + posemb_init=None)(inputs) + elif posemb_type == 'none': + x_posemb = inputs + else: + raise ValueError(f'Unknown positional embedding {posemb_type}') + + return x_posemb + + +class MLP(nn.Module): + """Simple MLP.""" + num_layers: int + hidden_dim: int + + @nn.compact + def __call__(self, x): + """Forward module. + + Args: + x: array in shape batch_size x num_tokens x hidden_dim + Returns: + batch_size x num_tokens x out_dim: 2 for softmax + """ + x = nn.LayerNorm()(x) + for i in range(self.num_layers): + x = nn.Dense(self.hidden_dim, name=f'linear.{i}')(x) + x = nn.gelu(x) + return x + + +class CustomEncoderBlock(nn.Module): + """The same as ViViT Transformer encoder block. Supports masked tokens.""" + mlp_dim: Optional[int] + num_heads: int + dtype: jnp.dtype = jnp.float32 + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + attention_kernel_initializer: Initializer = nn.initializers.xavier_uniform() + mlp_kernel_initializer: Initializer = nn.initializers.xavier_uniform() + mlp_bias_initializer: Initializer = nn.initializers.normal(stddev=1e-6) + attention_fn: Any = nn.dot_product_attention + droplayer_p: float = 0.0 + use_approximate_gelu: bool = True + + def get_drop_pattern(self, x, deterministic): + if not deterministic and self.droplayer_p: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + return jax.random.bernoulli( + self.make_rng('dropout'), self.droplayer_p, shape).astype('float32') + else: + return 0.0 + + @nn.compact + def __call__( + self, inputs: jnp.ndarray, deterministic: bool, + empty_mask: Optional[jnp.ndarray] = None) -> jnp.ndarray: + """Applies Encoder1DBlock module.""" + + # Expanding object mask to pairwise attention masks. This is used in + # factorized-encoder models where removing tokens are hard. + # empty_mask: B x L --> mask: B x 1 x L x L. + # The second dimention 1 will be broadcasted to num_heads + mask = None if empty_mask is None else empty_mask[ + ..., None, None, :] * empty_mask[..., None, :, None] + # Attention block. + x = nn.LayerNorm(dtype=self.dtype)(inputs) + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + kernel_init=self.attention_kernel_initializer, + broadcast_dropout=False, + dropout_rate=self.attention_dropout_rate, + attention_fn=self.attention_fn, + dtype=self.dtype)( + x, x, mask=mask, deterministic=deterministic) # added mask here. + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic) + + drop_pattern = self.get_drop_pattern(x, deterministic) + x = x * (1.0 - drop_pattern) + inputs + + # MLP block. + y = nn.LayerNorm(dtype=self.dtype)(x) + y = attention_layers.MlpBlock( # pytype: disable=wrong-arg-types # jnp-type + mlp_dim=self.mlp_dim, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + activation_fn=functools.partial( + nn.gelu, approximate=self.use_approximate_gelu), + kernel_init=self.mlp_kernel_initializer, + bias_init=self.mlp_bias_initializer)( + y, deterministic=deterministic) + + drop_pattern = self.get_drop_pattern(x, deterministic) + return y * (1.0 - drop_pattern) + x + + +class CustomEncoder(nn.Module): + """Encoder that supports dropped tokens and object-aware attention.""" + + temporal_dims: Optional[int] + hidden_size: int + mlp_dim: int + num_layers: int + num_heads: int + attention_config: Optional[ml_collections.ConfigDict] = None + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_droplayer_rate: float = 0.0 + fold_first_token: bool = False + dtype: jnp.dtype = jnp.float32 + n_posembed: Optional[int] = None + positional_embedding: str = 'learned_1d' + normalise_output: bool = True + use_approximate_gelu: bool = True + num_tokens_per_frame: int = -1 + run_cross_frame_attention: bool = False + video_batch: int = -1 + object_config: ml_collections.ConfigDict = ml_collections.ConfigDict() + learn_token_configs: ml_collections.ConfigDict = ml_collections.ConfigDict() + attach_configs: ml_collections.ConfigDict = ml_collections.ConfigDict() + + @nn.compact + def __call__(self, inputs: jnp.ndarray, empty_mask=None, fg_inds=None, + token_scores=None, boxes=None, *, + train: bool = False, debug: bool = False): + """Applies Transformer model on the inputs. + + Args: + inputs: array in shape batch x len x emb + empty_mask: bool array in shape batch x len: whether to keep a token + fg_inds: int array in shape batch x K, K is smaller then + len, the index of kept tokens. One of empty_mask and fg_inds + should be None. + token_scores: float: batch x num_objects x num_tokens + boxes: float: batch x T x num_objs x 4 in range 0 - 1 + train: in training or evaluation. + debug: print debug information + Returns: + an array: the updated feature. + """ + assert inputs.ndim == 3 # (batch, len, emb) + dtype = jax.dtypes.canonicalize_dtype(self.dtype) + learn_token = self.learn_token_configs.get('enabled', False) + learn_token_idx = self.learn_token_configs.get('layer_index', 0) + assert not learn_token + assert not learn_token_idx + attach_tokens = self.attach_configs.get('enabled', False) + drop_pixel_tokens = self.attach_configs.get('drop_pixel_tokens', False) + assert not (attach_tokens and drop_pixel_tokens) + add_context_tokens = self.attach_configs.get('add_context_tokens', -1) + object_block_idx = self.attach_configs.get('object_block_idx', []) + drop_block_idx = self.attach_configs.get('drop_block_idx', 0) + + n_posembed = self.n_posembed or inputs.shape[1] + assert n_posembed <= inputs.shape[1], f'{n_posembed} > {inputs.shape[1]}' + + if self.positional_embedding == 'sinusoidal_1d': + x = attention_layers.Add1DPositionEmbedding( + posemb_init=None)(inputs) + elif self.positional_embedding == 'none': + x = inputs + else: + raise ValueError( + f'Unknown positional embedding {self.positional_embedding}') + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + learned_token_scores = None + aux = {} + + # Input Encoder + for lyr in range(self.num_layers): + droplayer_p = ( + lyr / max(self.num_layers - 1, 1)) * self.stochastic_droplayer_rate + + if lyr in object_block_idx and self.name != 'TemporalTransformer': + assert lyr > 0, lyr + x = ObjectBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + droplayer_p=droplayer_p, + name=f'encoderblock_{lyr}', + use_approximate_gelu=self.use_approximate_gelu, + configs=self.attach_configs, + dtype=dtype)( + x, token_scores=token_scores, deterministic=not train) + continue + + block = CustomEncoderBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + droplayer_p=droplayer_p, + name=f'encoderblock_{lyr}', + use_approximate_gelu=self.use_approximate_gelu, + dtype=dtype) + + if drop_pixel_tokens and lyr == drop_block_idx and fg_inds is not None: + if add_context_tokens > 0: + context_tokens = self._add_context_tokens( + x, add_context_tokens, fg_inds + ) # batch x num_context_token x hidden_dim + x, token_scores = self._drop_tokens( + x, fg_inds, token_scores, + drop_scores=object_block_idx) + # x: batch x num_fg_tokens x hidden_dim + # token_scores: batch x num_objects x num_fg_tokens + if add_context_tokens > 0: + x = jnp.concatenate([x, context_tokens], axis=1) + if object_block_idx and token_scores is not None: + num_objs = token_scores.shape[1] + num_bg_tokens = context_tokens.shape[1] + token_scores = jnp.concatenate( + [token_scores, + jnp.zeros((x.shape[0], num_objs, num_bg_tokens), jnp.float32)], + axis=2) + + x = block( + x, empty_mask=empty_mask, + deterministic=not train) # empty_mask is used here + + if self.normalise_output: + encoded = nn.LayerNorm(name='encoder_norm')(x) + else: + encoded = x + + return encoded, learned_token_scores, aux + + def _add_context_tokens( + self, full_x, num_context_tokens, fg_inds=None): + """Append random/uniformly sampled token from full_x to x. + + Args: + full_x: batch x num_tokens x hidden_dim + num_context_tokens: number of context tokens to add + fg_inds: batch x num_fg_tokens + Returns: + context_tokens: batch x num_context_token x hidden_dim + """ + batch, num_total_tokens, hidden_dim = full_x.shape + k = fg_inds.shape[1] + random_score = jax.random.uniform( + self.make_rng('dropout'), (batch, num_total_tokens)) + + obj_inds = jnp.arange(batch * k).reshape( + batch, k) // k * num_total_tokens + fg_inds + random_score = random_score.reshape(-1) + random_score = random_score.at[obj_inds].set(0) + random_score = random_score.reshape(batch, num_total_tokens) + + _, random_inds = jax.lax.top_k(random_score, k=num_context_tokens) + base = jnp.arange(batch * num_context_tokens).reshape( + batch, num_context_tokens) // num_context_tokens * num_total_tokens + inds = base + random_inds + full_x = full_x.reshape(batch * num_total_tokens, hidden_dim) + context_tokens = full_x[inds.reshape(-1)] + context_tokens = context_tokens.reshape( + batch, num_context_tokens, hidden_dim) + return context_tokens + + def _drop_tokens(self, x, fg_inds, token_scores=None, drop_scores=False): + """Subsample token x according to the keeped index in fg_inds. + + Args: + x: batch x num_tokens x hidden_dim + fg_inds: batch x num_fg_tokens + token_scores: batch x num_objects x num_tokens + drop_scores: bool + Returns: + x: batch x num_fg_tokens x hidden_dim + sampled_token_scores: batch x num_objects x num_fg_tokens + """ + batch, num_tokens, hidden_dim = x.shape + k = fg_inds.shape[1] + # This is identical to torch.gather(x, 1, fg_inds) + inds = jnp.arange(batch * k).reshape( + batch, k) // k * num_tokens + fg_inds + x = x.reshape(batch * num_tokens, hidden_dim) + x = x[inds.reshape(-1)].reshape(batch, k, hidden_dim) + sampled_token_scores = None + if drop_scores: + num_objs = token_scores.shape[1] + token_scores = token_scores.reshape(-1) + expand_fg_inds = jnp.broadcast_to(fg_inds[:, None], (batch, num_objs, k)) + inds = jnp.arange( + batch * num_objs * k) // k * num_tokens + expand_fg_inds.reshape(-1) + sampled_token_scores = token_scores[inds].reshape(batch, num_objs, k) + return x, sampled_token_scores diff --git a/scenic/projects/objectvivit/object_attention.py b/scenic/projects/objectvivit/object_attention.py new file mode 100644 index 0000000000000000000000000000000000000000..3925ceb7c01c7993c8f4248d2dc89f6cc0962355 --- /dev/null +++ b/scenic/projects/objectvivit/object_attention.py @@ -0,0 +1,141 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implement Object-aware attention block.""" + +import functools +from typing import Any, Callable, Optional, Sequence + +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.layers import attention_layers + + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +class ObjectBlock(nn.Module): + """The same as vivit block. Supports object attention and masked tokens.""" + mlp_dim: Optional[int] + num_heads: int + dtype: jnp.dtype = jnp.float32 + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + attention_kernel_initializer: Initializer = nn.initializers.xavier_uniform() + mlp_kernel_initializer: Initializer = nn.initializers.xavier_uniform() + mlp_bias_initializer: Initializer = nn.initializers.normal(stddev=1e-6) + attention_fn: Any = nn.dot_product_attention + droplayer_p: float = 0.0 + use_approximate_gelu: bool = True + configs: ml_collections.ConfigDict = ml_collections.ConfigDict() + + def get_drop_pattern(self, x, deterministic): + if not deterministic and self.droplayer_p: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + return jax.random.bernoulli( + self.make_rng('dropout'), self.droplayer_p, shape).astype('float32') + else: + return 0.0 + + @nn.compact + def __call__( + self, inputs: jnp.ndarray, deterministic: bool, + token_scores: jnp.ndarray, + ) -> jnp.ndarray: + """Applies Encoder1DBlock module. + + Args: + inputs: batch x num_fg_tokens x hidden_dim; + deterministic: bool + token_scores: optional: batch x num_objs x num_fg_tokens + Returns: + x: batch x num_fg_tokens x hidden_dim + """ + num_tokens_per_object = self.configs.get('num_tokens_per_object', 8) + norm_objects = self.configs.get('norm_objects', False) + with_objects_linear = self.configs.get('with_objects_linear', True) + with_traj_emb = self.configs.get('with_traj_emb', True) + + batch, num_fg_tokens, hidden_dim = inputs.shape + num_objs = token_scores.shape[1] + + patch_tokens = inputs + object_tokens = patch_tokens[:, None] * token_scores[..., None] + # batch x num_objs x N x D + + if norm_objects: + object_tokens = object_tokens.sum(axis=2) / ( + token_scores[..., None].sum(axis=2) + 1e-4) + object_tokens = object_tokens[:, :, None, :] + # batch x num_objs x 1 x D + + if with_objects_linear: + object_tokens = nn.Dense(hidden_dim // 2, use_bias=False)(object_tokens) + object_tokens = nn.relu(object_tokens) + object_tokens = nn.Dense(hidden_dim, use_bias=False)(object_tokens) + object_tokens = nn.relu(object_tokens) # batch x num_objs x N x D + + if not norm_objects: + object_tokens = object_tokens.transpose( + 0, 1, 3, 2) # batch x num_objs x D x N + object_tokens, _ = jax.lax.top_k( + object_tokens, k=num_tokens_per_object) # batch x num_objs x D x k + object_tokens = object_tokens.transpose( + 0, 1, 3, 2) # batch x num_objs x k x D + + if with_traj_emb: + box_categories = self.param( + 'box_categories', nn.initializers.zeros, + (1, num_objs, 1, hidden_dim), jnp.float32) + object_tokens = object_tokens + box_categories + + object_tokens = object_tokens.reshape(batch, -1, hidden_dim) + all_tokens = jnp.concatenate( + [patch_tokens, object_tokens], axis=1, + ) # batch x (num_fg_tokens + num_objs * k) x D + + # Attention block. + x = nn.LayerNorm(dtype=self.dtype)(all_tokens) + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + kernel_init=self.attention_kernel_initializer, + broadcast_dropout=False, + dropout_rate=self.attention_dropout_rate, + attention_fn=self.attention_fn, + dtype=self.dtype)( + x, x, deterministic=deterministic) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic) + + x = x[:, :num_fg_tokens, :] + + drop_pattern = self.get_drop_pattern(x, deterministic) + x = x * (1.0 - drop_pattern) + inputs + + # MLP block. + y = nn.LayerNorm(dtype=self.dtype)(x) + y = attention_layers.MlpBlock( # pytype: disable=wrong-arg-types # jnp-type + mlp_dim=self.mlp_dim, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + activation_fn=functools.partial( + nn.gelu, approximate=self.use_approximate_gelu), + kernel_init=self.mlp_kernel_initializer, + bias_init=self.mlp_bias_initializer)( + y, deterministic=deterministic) + + drop_pattern = self.get_drop_pattern(x, deterministic) + ret = y * (1.0 - drop_pattern) + x + return ret diff --git a/scenic/projects/objectvivit/optimizer_utils.py b/scenic/projects/objectvivit/optimizer_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..2af0d15b1d13afcecf38e83b8c181447bd2babe5 --- /dev/null +++ b/scenic/projects/objectvivit/optimizer_utils.py @@ -0,0 +1,121 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for optimizers.""" +import copy +import re +from typing import Any, Callable, Optional, Union + +from absl import logging +import flax +import ml_collections +import optax +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers as optimizer_lib + +ScalarOrSchedule = Union[float, optax.Schedule] +MaskOrFn = Optional[Union[Any, Callable[[optax.Params], Any]]] +PyTree = Any # JAX team is working on type annotation for pytree: + + +def optimizer_with_layerwise_decay( + config: ml_collections.ConfigDict, + params: PyTree, + use_frozen_params: bool = True): + """Returns an optimizer with layerwise decay. + + Implementation of layerwise decay follows BEIT and MAE. + Reference: https://github.com/facebookresearch/mae/blob/main/util/lr_decay.py + + This function can apply layerwise decay to any optimizer, although this is + typically done with Adam. + + Args: + config: The training config. + params: The parameters of the model being trained. + use_frozen_params: If True, the optimizer will always expect to receive + a FrozenDict of parameters and gradients. + + Returns: + An Optax optimizer. + """ + if config.model_name not in {'vivit_classification'}: + raise ValueError(f'Unsupported model: {config.model_name}.') + + optimizer_config = optimizer_lib.get_optax_optimizer_config(config) + # Avoid modifying original config and allow alteration. + optimizer_config = copy.deepcopy(optimizer_config).unlock() + base_learning_rate = config.lr_configs.base_learning_rate + + layerwise_decay_key = config.get( + 'layerwise_decay_key', 'Transformer/encoderblock_') + logging.info('layerwise_decay_key: %s', layerwise_decay_key) + + if optimizer_config.get('layerwise_decay', 0) <= 0: + logging.info('Not performing any layerwise decay.') + if 'layerwise_decay' in optimizer_config: + del optimizer_config.layerwise_decay + lr_fn = lr_schedules.get_learning_rate_fn(config) + return optimizer_lib.get_optimizer(optimizer_config, lr_fn, params) + + num_transformer_layers = config.model.num_layers + num_layers = num_transformer_layers + 1 + layer_decay = optimizer_config.layerwise_decay + learning_rate_scales = [ + layer_decay**(num_layers - i) for i in range(num_layers + 1) + ] + logging.info('Learning rate scales: %s', learning_rate_scales) + + layer_configs = [copy.deepcopy(config) for _ in range(num_layers + 1)] + for index in range(len(layer_configs)): + learning_rate = base_learning_rate * learning_rate_scales[index] + layer_configs[index].lr_configs.base_learning_rate = learning_rate + + learning_rate_fns = [ + lr_schedules.get_learning_rate_fn(layer_config) + for layer_config in layer_configs + ] + + # Weight decay mask is applied within optimizer_lib.get_optimizer. + # Note that we need to delete the layerwise_decay attribute, as Optax + # optimizers do not accept this argument. + del optimizer_config.layerwise_decay + optimizers = { + i: optimizer_lib.get_optimizer( + optimizer_config, learning_rate_fns[i], params) + for i in range(num_layers + 1) + } + + def _get_layer_id(name: str, num_layers: int) -> int: + if name == 'cls' or 'posembed_input' in name or 'embedding' in name: + return 0 + elif layerwise_decay_key in name: + substring = re.findall(r'encoderblock_\d+', name)[0] + layer_id = int(substring.replace('encoderblock_', '')) + return layer_id + 1 + else: + return num_layers + + flat_params = flax.traverse_util.flatten_dict( + flax.core.unfreeze(params), keep_empty_nodes=True, sep='/') + flat_layer_map = {k: _get_layer_id(k, num_layers) for k in flat_params} + layer_map = flax.traverse_util.unflatten_dict(flat_layer_map, sep='/') + if use_frozen_params: + layer_map = flax.core.freeze(layer_map) + + logging.info( + 'Layer assignments:\n%s', + flax.traverse_util.flatten_dict(layer_map, sep='/')) + tx = optax.multi_transform(optimizers, layer_map) + return tx diff --git a/scenic/projects/objectvivit/requirements.txt b/scenic/projects/objectvivit/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..fee3d76cd4e41bd25a5e12f4c9d6e0b87c85b75d --- /dev/null +++ b/scenic/projects/objectvivit/requirements.txt @@ -0,0 +1 @@ +dmvr @ git+https://github.com/deepmind/dmvr.git diff --git a/scenic/projects/objectvivit/tools/add_orvit_bbox_to_tfrecord.py b/scenic/projects/objectvivit/tools/add_orvit_bbox_to_tfrecord.py new file mode 100644 index 0000000000000000000000000000000000000000..327fd66e8867f8485b1595e7d744754f2046c6d6 --- /dev/null +++ b/scenic/projects/objectvivit/tools/add_orvit_bbox_to_tfrecord.py @@ -0,0 +1,152 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Add bounding box predictions from ORViT paper to TFRecords.""" +import os + +from absl import app +from absl import flags +import numpy as np +import tensorflow as tf + +FILE_SUFFIX_PATTERN = '-{:05d}-of-{:05d}' +FLAGS = flags.FLAGS + +flags.DEFINE_string( + 'input_tfrecord', + '/path/to/ssv2/tfrecord@xxx', + 'Input path') +flags.DEFINE_string( + 'bbox_folder', + '/path/to/orvid/box/folder/', + 'path to the json annotations.') +flags.DEFINE_string( + 'output_tfrecord', + '/path/to/ssv2.orvit_box/tfrecord', + 'Output path') + + +def process(example, ann=None, box_key='orvit'): + """Add bounding boxes as additional fields to TFRecord.""" + height = example.context.feature['image/height'].int64_list.value[0] + width = example.context.feature['image/width'].int64_list.value[0] + num_frames = example.context.feature['clip/frames'].int64_list.value[0] + feature_list = example.feature_lists.feature_list + + if ann is None: + annotated_frames = 0 + else: + xmin = ann[..., 0] / width # T x O + ymin = ann[..., 1] / height # T x O + xmax = ann[..., 2] / width # T x O + ymax = ann[..., 3] / height # T x O + boxes = np.stack([xmin, ymin, xmax, ymax], axis=2) # T x O x 4 + scores = ann[..., 4] + annotated_frames = ann.shape[0] + + feature_list[f'{box_key}/bbox/xmin'].Clear() + feature_list[f'{box_key}/bbox/xmax'].Clear() + feature_list[f'{box_key}/bbox/ymin'].Clear() + feature_list[f'{box_key}/bbox/ymax'].Clear() + feature_list[f'{box_key}/bbox/score'].Clear() + + for frame_idx in range(num_frames): + j = frame_idx - num_frames + annotated_frames + if j < 0 or j >= annotated_frames: + boxes_t = np.zeros((0, 4), dtype=np.float32) + scores_t = np.zeros((0), dtype=np.float32) + else: + boxes_t = boxes[j] + scores_t = scores[j] + feature_list[f'{box_key}/bbox/score'].feature.add().float_list.value.extend( + scores_t.tolist()) + feature_list[f'{box_key}/bbox/xmin'].feature.add().float_list.value.extend( + boxes_t[:, 0].tolist()) + feature_list[f'{box_key}/bbox/ymin'].feature.add().float_list.value.extend( + boxes_t[:, 1].tolist()) + feature_list[f'{box_key}/bbox/xmax'].feature.add().float_list.value.extend( + boxes_t[:, 2].tolist()) + feature_list[f'{box_key}/bbox/ymax'].feature.add().float_list.value.extend( + boxes_t[:, 3].tolist()) + return example + + +def read_and_convert_boxes(video_box_path, num_boxes=4): + """Convert annotation in tracking orders.""" + if not os.path.exists(video_box_path): + return None + num_frames = len(os.listdir(video_box_path)) + box_tensors = np.zeros((num_frames, num_boxes, 5), dtype=np.float32) + for i in range(num_frames): + frame_name = f'{video_box_path}/{i + 1:04d}.npz' + frame_data = dict(np.load(open(frame_name, 'rb'))) + hand_idx, obj_idx = 0, 2 + for ibox in range(len(frame_data['boxes'])): + standard_category = frame_data['pred_classes'][ibox] + assert standard_category in [0, 1] + global_box_id = standard_category + if global_box_id == 0: + global_box_id = hand_idx + hand_idx += 1 + elif global_box_id == 1: + global_box_id = obj_idx + obj_idx += 1 + if global_box_id < num_boxes: + box_tensors[i, global_box_id, :4] = frame_data['boxes'][ibox] + box_tensors[i, global_box_id, 4] = frame_data['scores'][ibox] + return box_tensors + + +def decode_sharded_names(paths): + """Convert sharded file names into a list.""" + ret = [] + paths = paths.split(',') + for name in paths: + if '@' in name: + idx = name.find('@') + num_shards = int(name[idx + 1:]) + names = [('{}' + FILE_SUFFIX_PATTERN).format( + name[:idx], i, num_shards) for i in range(num_shards)] + ret.extend(names) + else: + ret.append(name) + return ret + + +def main(unused_argv): + shard_names = decode_sharded_names(FLAGS.input_tfrecord) + for shard_name in shard_names: + print('Processing', shard_name) + raw_ds = tf.data.TFRecordDataset(shard_name) + raw_data_iter = iter(raw_ds) + shard_appendix = shard_name[-len(FILE_SUFFIX_PATTERN.format(0, 0)):] + writer = tf.io.TFRecordWriter( + f'{FLAGS.output_tfrecord}{shard_appendix}') + while True: + try: + raw_data = next(raw_data_iter) + example = tf.train.SequenceExample.FromString(raw_data.numpy()) + except: # pylint: disable=bare-except + break + video_data_path = ( + example.context.feature['data_path'].bytes_list.value[0] + ).decode('utf-8') + key = int(video_data_path[video_data_path.rfind('/') + 1:-len('.webm')]) + video_box_path = f'{FLAGS.bbox_folder}/{key}/' + box_tensors = read_and_convert_boxes(video_box_path) + example = process(example, ann=box_tensors) + writer.write(example.SerializeToString()) + writer.close() +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/objectvivit/tools/convert_videomae_checkpoint.py b/scenic/projects/objectvivit/tools/convert_videomae_checkpoint.py new file mode 100644 index 0000000000000000000000000000000000000000..97f8f585e24d41f9f2a8571ab844ba45eb0f1fb6 --- /dev/null +++ b/scenic/projects/objectvivit/tools/convert_videomae_checkpoint.py @@ -0,0 +1,393 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Convert VideoMAE checkpoint (by Tong et al) to a Scenic Train-state. + +The model details are in https://arxiv.org/abs/2203.12602 + +To run this conversion script, we first need to save PyTorch model weights as +Numpy arrays. + +``` +import torch +import pickle +weights = torch.load('videomae_vitb_ssv2_2400e.pth', map_location='cpu') +weights_np = {k: v.numpy() for k, v in weights['model'].items()} +out = {'params': weights_np} +pickle.dump(out, open('videomae_vitb_ssv2_2400e.pkl', 'wb')) +``` + +Example command + +python convert_videomae_checkpoint -- \ +--model_version=B/16x2 \ +--pytorch_data_path=videomae_vitb_ssv2_2400e.pkl \ +--output_dir=videomae_vitb_ssv2_2400e/ \ +""" + +import pickle +from typing import Any, Dict, Union + +from absl import app +from absl import flags +from absl import logging + +import flax +import jax +from jax import random +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.projects.objectvivit import model +from scenic.train_lib import train_utils + +PyTree = Any +Array = Union[np.ndarray, jnp.ndarray] + +flags.DEFINE_string( + 'model_version', 'B/16x2', 'ViT variant to load.') +flags.DEFINE_string( + 'pytorch_data_path', + '', + 'Path containing PyTorch checkpoint data.') +flags.DEFINE_string( + 'output_dir', + '', + 'Directory to write the Flax checkpoint to.') + +FLAGS = flags.FLAGS + +TRANSPOSE_PREFIXES = ('mlp.fc1.weight', 'mlp.fc2.weight', + 'encoder_to_decoder.weight', 'decoder.head.weight', + 'head.weight') + + +def get_vivit_config(variant: str) -> Dict[str, Any]: + """Returns config for ViViT.""" + # Note that this config is used for testing that model outputs match. If using + # the converted checkpoints, the same config settings should also be used. + + version, tubelet = variant.split('/') + patch_s, patch_t = tubelet.split('x') + + config = {} + config['temporal_encoding_config'] = ml_collections.ConfigDict() + config['temporal_encoding_config'].method = '3d_conv' + + config['hidden_size'] = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config['patches'] = ml_collections.ConfigDict() + config['patches'].size = [int(patch_s), int(patch_s), int(patch_t)] + config['num_heads'] = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config['mlp_dim'] = {'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config['num_layers'] = {'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + config['attention_config'] = ml_collections.ConfigDict() + config['attention_config'].type = 'spacetime' + config['classifier'] = 'gap' + config['attention_dropout_rate'] = 0.0 + config['dropout_rate'] = 0.0 + config['stochastic_droplayer_rate'] = 0.0 + config['positional_embedding'] = 'sinusoidal_1d' + config['normalise_encoder_output'] = True + config['use_approximate_gelu'] = False + # Depends on the tubelet size, and if we are only reconstructing the central + # frame. + config['num_classes'] = 1 + return config + + +def maybe_transpose_weights(name: str, value: Array) -> Array: + """Transposes PyTorch weight matrix if necessary for Jax.""" + + for prefix in TRANSPOSE_PREFIXES: + if prefix in name: + return value.transpose() + return value + + +def adapt_attention_weights(params: Dict[str, Array], + encoder_num_heads: int) -> Array: + """Adapts PyTorch attention layers to Flax.""" + + new_params = {} + for name, parameter in params.items(): + + if 'qkv.weight' in name or 'proj.weight' in name: + if 'encoder' in name: + num_heads = encoder_num_heads + elif 'decoder' in name: + continue + else: + raise ValueError(f'Unsupported parameter {name}.') + + if 'attn.qkv.weight' in name: + # Un-merge the query-, key- and value-projections. + query, key, value = np.split(parameter, 3, axis=0) + query, key, value = query.transpose(), key.transpose(), value.transpose() + d, _ = query.shape + query = query.reshape(d, num_heads, -1) + key = key.reshape(d, num_heads, -1) + value = value.reshape(d, num_heads, -1) + + prefix = name.replace('qkv.weight', '') + new_params[prefix + 'q_weight'] = query + new_params[prefix + 'k_weight'] = key + new_params[prefix + 'v_weight'] = value + + # We also need to reshape the bias parameters. + q_bias = params[prefix + 'q_bias'] + q_bias = np.reshape(q_bias, (num_heads, -1)) + + v_bias = params[prefix + 'v_bias'] + v_bias = np.reshape(v_bias, (num_heads, -1)) + + if prefix + 'k_bias' in params: + k_bias = params[prefix + 'v_bias'] + k_bias = np.reshape(k_bias, (num_heads, -1)) + else: + logging.log_first_n( + logging.INFO, 'No key bias. Initialising with zeros', 1) + k_bias = np.zeros(q_bias.shape) + + new_params[prefix + 'q_bias'] = q_bias + new_params[prefix + 'v_bias'] = v_bias + new_params[prefix + 'k_bias'] = k_bias + + elif 'attn.proj.weight' in name: + # Reshape the output projection with the number of heads. + d, _ = parameter.shape + output_proj = parameter.transpose().reshape((num_heads, -1, d)) + new_params[name] = output_proj + + else: + new_params[name] = parameter + + return new_params # pytype: disable=bad-return-type # jax-ndarray + + +def rename_encoder_params(params: PyTree) -> PyTree: + """Adds an encoder. prefix for finetuned models.""" + + new_params = {} + for name, value in params.items(): + if name.startswith('patch_embed') or name.startswith('blocks'): + new_name = 'encoder.' + name + new_params[new_name] = value + else: + new_params[name] = value + + return new_params + + +def convert_pytorch_parameters( + params: Dict[str, Array], + num_heads_encoder: int, + num_encoder_layers: int) -> PyTree: + """Adapt PyTorch model parameters to Jax ones. + + The steps are as follows. + 1. PyTorch models have query-, key- and value-projections fused, whereas in + Flax, there are separate variables. Moreover, Flax has a separate axis + for the number of heads. Whereas it is all fused in PyTorch. + 2. Transpose weights as necessary. As linear layer weights in PyTorch are + transposed compared to nn.Dense layers in Flax. + 3. Rename model parameters according to our Scenic model. + + Args: + params: A dictionary of PyTorch parameters. + num_heads_encoder: The number of attention heads used in the transformer + encoder. + num_encoder_layers: The number of transformer layers in the encoder. + + Returns: + A PyTree of Flax parameters, that can be used in a model.apply() call. + """ + + adapted_params = adapt_attention_weights(params, num_heads_encoder) + + for name, value in adapted_params.items(): # pytype: disable=attribute-error # jax-ndarray + adapted_params[name] = maybe_transpose_weights(name, value) + + # Rename parameters and move to final dictionary. + unflattened_params = {} + for name, value in adapted_params.items(): # pytype: disable=attribute-error # jax-ndarray + new_name = name + # Rename specific parameters before renaming operations that affect multiple + # parameters. + + # Input projection. + # For convolution kernels, the PyTorch order is [c_out, c_in, t, h, w]. And + # for Jax, it is [t, h, w, c_in, c_out]. + if new_name == 'encoder.patch_embed.proj.weight': + new_name = 'embedding/kernel' + value = value.transpose(2, 3, 4, 1, 0) + + if new_name == 'encoder.patch_embed.proj.bias': + new_name = 'embedding/bias' + + # fc_norm only appears in finetuned models + new_name = new_name.replace('fc_norm.weight', + 'encoder_norm/scale') + new_name = new_name.replace('fc_norm.bias', + 'encoder_norm/bias') + + new_name = new_name.replace('encoder.norm.weight', + 'Transformer/encoder_norm/scale') + new_name = new_name.replace('encoder.norm.bias', + 'Transformer/encoder_norm/bias') + + # The following appears only in pretrained models + new_name = new_name.replace('decoder.head.weight', + 'output_projection/kernel') + new_name = new_name.replace('decoder.head.bias', 'output_projection/bias') + # Whereas finetuned models have the following + new_name = new_name.replace('head.weight', 'output_projection/kernel') + new_name = new_name.replace('head.bias', 'output_projection/bias') + + # Rename "blocks.i to encoderblock_i" + for i in range(num_encoder_layers): + new_name = new_name.replace(f'blocks.{i}', f'encoderblock_{i}') + + # Rename transformer layer parameters. + new_name = new_name.replace('encoder.', 'Transformer/') + new_name = new_name.replace('decoder.', 'Decoder/') + new_name = new_name.replace('attn', 'MultiHeadDotProductAttention_0') + + new_name = new_name.replace('q_weight', 'query/kernel') + new_name = new_name.replace('q_bias', 'query/bias') + + new_name = new_name.replace('k_weight', 'key/kernel') + new_name = new_name.replace('k_bias', 'key/bias') + + new_name = new_name.replace('v_weight', 'value/kernel') + new_name = new_name.replace('v_bias', 'value/bias') + + new_name = new_name.replace('proj.weight', 'out/kernel') + new_name = new_name.replace('proj.bias', 'out/bias') + + new_name = new_name.replace('norm1.weight', 'LayerNorm_0/scale') + new_name = new_name.replace('norm1.bias', 'LayerNorm_0/bias') + new_name = new_name.replace('norm2.weight', 'LayerNorm_1/scale') + new_name = new_name.replace('norm2.bias', 'LayerNorm_1/bias') + + new_name = new_name.replace('mlp.fc1.weight', 'MlpBlock_0/Dense_0/kernel') + new_name = new_name.replace('mlp.fc1.bias', 'MlpBlock_0/Dense_0/bias') + new_name = new_name.replace('mlp.fc2.weight', 'MlpBlock_0/Dense_1/kernel') + new_name = new_name.replace('mlp.fc2.bias', 'MlpBlock_0/Dense_1/bias') + + new_name = new_name.replace('.', '/') + unflattened_params[new_name] = value + + params_tree = flax.traverse_util.unflatten_dict(unflattened_params, sep='/') + return params_tree + + +def check_weights_different(initialisation: PyTree, loaded: PyTree, + ignore_key_bias: bool) -> bool: + """Check all leaves are different in two PyTrees.""" + init_flat = flax.traverse_util.flatten_dict(initialisation, sep='/') + loaded_flat = flax.traverse_util.flatten_dict(loaded, sep='/') + + for name in init_flat: + if name not in loaded_flat: + print(f'Variable {name} not in loaded model parameters.') + continue + if init_flat[name].shape != loaded_flat[name].shape: + print(f'Variable {name} has incorrect shapes.') + continue + if np.allclose(init_flat[name], loaded_flat[name]): + if ('MultiHeadDotProductAttention' in name and 'key/bias' in name and + ignore_key_bias): + # Include this special case, as the biases for the key projections are + # often not used in PyTorch self-attention implementations. + logging.info('Parameter %s did not change for initialisation', name) + continue + print(f'Variable {name} unchanged from initialisation.') + + return True + + +def load_pytorch_data(path: str): + """Load checkpoint data from PyTorch.""" + + with open(path, 'rb') as fp: + data = pickle.load(fp) + return data + + +def run(model_version: str, pytorch_data_path: str, output_dir: str): + """Converts VideoMAE checkpoints to Jax, and checks for correctness.""" + + # First initialise a ViT model and load weights. + logging.info('Initialising ViT model') + model_config = get_vivit_config(model_version) + logging.info(model_config) + vivit_model = model.ObjectViViT(**model_config) + init_rngs = {'params': random.PRNGKey(0), 'dropout': random.PRNGKey(1)} + + rng = random.PRNGKey(0) + batch, time, height, width, channels = 1, 16, 224, 224, 3 + input_shape = (batch, time, height, width, channels) + inputs = random.normal(rng, shape=input_shape) + + _, params_jax = vivit_model.init_with_output(init_rngs, inputs, train=True) + params_jax = flax.core.unfreeze(params_jax['params']) + params_jax_init = jax.tree_util.tree_map(lambda x: x.copy(), params_jax) + # Load VideoMAE model weights. + logging.info('Loading VideoMAE ViViT weights') + pretrained_pytorch_data = load_pytorch_data(pytorch_data_path) + params_pytorch = pretrained_pytorch_data['params'] + + # Transfer weights. + logging.info('Transferring weights') + params_jax = convert_pytorch_parameters( + params_pytorch, + model_config['num_heads'], + model_config['num_layers'], + ) + logging.info('Parameter summary:') + params_jax = flax.core.freeze(params_jax) + # Check weight transfer was correct. + if check_weights_different(params_jax_init, params_jax, ignore_key_bias=True): + logging.info('All model weights changed from initialisation.') + + # Save Scenic train state. + logging.info('Saving converted checkpoint to %s', output_dir) + train_state = train_utils.TrainState( + global_step=0, + params=params_jax, + model_state={}) + train_utils.save_checkpoint(output_dir, train_state, overwrite=True) + + +def main(argv): + if len(argv) > 1: + raise app.UsageError('Too many command-line arguments.') + + run(FLAGS.model_version, FLAGS.pytorch_data_path, FLAGS.output_dir) + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/objectvivit/train_utils.py b/scenic/projects/objectvivit/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..d1e450a91f1b3b4bfc28819733909660a9ee793f --- /dev/null +++ b/scenic/projects/objectvivit/train_utils.py @@ -0,0 +1,206 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utility functions for mixup-cutmix augmentation.""" +from typing import Any, Dict, Tuple + +from absl import logging + +import jax +import jax.numpy as jnp +import numpy as np +from scenic.model_lib.base_models import model_utils + +PyTree = Any + + +def get_random_bounding_box( + image_shape: Tuple[int, int], + ratio: jnp.ndarray, + rng: Any, + margin: float = 0.) -> Tuple[int, int, int, int]: + """Returns a random bounding box for Cutmix. + + Based on the implementation in timm: + https://github.com/rwightman/pytorch-image-models/blob/master/timm/data/mixup.py + + Args: + image_shape: The shape of the image, specified as [height, width]. + ratio: Ratio of the input height/width to use as the maximum dimensions of + the randomly sampled bounding box. + rng: JAX rng key. + margin: Percentage of bounding box dimension to enforce as the margin. + This reduces the amount of the bounding box outside the image. + + Returns: + The bounding box parameterised as y_min, y_max, x_min, x_max. + """ + img_h, img_w = image_shape + cut_h, cut_w = (img_h * ratio).astype(int), (img_w * ratio).astype(int) + margin_y, margin_x = (margin * cut_h).astype(int), (margin * + cut_w).astype(int) + rngx, rngy = jax.random.split(rng) + cy = jax.random.randint(rngy, [1], 0 + margin_y, img_h - margin_y) + cx = jax.random.randint(rngx, [1], 0 + margin_x, img_w - margin_x) + + y_min = jnp.clip(cy - cut_h // 2, 0, img_h)[0] + y_max = jnp.clip(cy + cut_h // 2, 0, img_h)[0] + x_min = jnp.clip(cx - cut_w // 2, 0, img_w)[0] + x_max = jnp.clip(cx + cut_w // 2, 0, img_w)[0] + return y_min, y_max, x_min, x_max # pytype: disable=bad-return-type # jnp-type + + +def _do_mixup(inputs: jnp.ndarray, rng: Any, + alpha: float) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Performs Mixup. + + Args: + inputs: The input images of shape NHWC or NTHWC. Mixup is always performed + along the leading axis of the array, i.e., along the "N" dimension. + rng: A PRNGKey. Will be consumed by this function. + alpha: The alpha value for mixup. + + Returns: + The modified images and label weights. + """ + batch_size = inputs.shape[0] + weight = jax.random.beta(rng, alpha, alpha) + weight *= jnp.ones((batch_size, 1)) + + # Mixup inputs. + # Shape calculations use np to avoid device memory fragmentation: + image_weight_shape = np.ones(inputs.ndim, np.int32) + image_weight_shape[0] = batch_size + image_weight = weight.reshape(image_weight_shape) + reverse = tuple( + slice(inputs.shape[i]) if i > 0 else slice(-1, None, -1) + for i in range(inputs.ndim)) + result_img = (image_weight * inputs + (1.0 - image_weight) * inputs[reverse]) + return result_img, weight + + +def _do_cutmix(inputs: jnp.ndarray, rng: Any, + alpha: float) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Performs Cutmix. + + Args: + inputs: The input images of shape NHWC or NTHWC. + rng: A PRNGKey. Will be consumed by this function. + alpha: The alpha value for cutmix. + + Returns: + The modified images and label weights. + """ + rng, beta_key = jax.random.split(rng) + cutmix_lambda = jax.random.beta(beta_key, alpha, alpha) + ratio = jnp.sqrt(1 - cutmix_lambda) + + # TODO(unterthiner): we are using the same bounding box for the whole batch + y_min, y_max, x_min, x_max = get_random_bounding_box( + inputs.shape[-3:-1], ratio, rng) + + height, width = inputs.shape[-3], inputs.shape[-2] + y_idx = jnp.arange(height) + x_idx = jnp.arange(width) + mask0 = (y_min <= y_idx) & (y_idx < y_max) + mask1 = (x_min <= x_idx) & (x_idx < x_max) + mask = (~jnp.outer(mask0, mask1)).astype(int) + if inputs.ndim == 4: # image format NWHC + mask = jnp.expand_dims(mask, axis=(0, -1)) + elif inputs.ndim == 5: # image format NTWHC + mask = jnp.expand_dims(mask, axis=(0, 1, -1)) + else: + raise ValueError('Invalid image format') + + result_img = (inputs * mask + jnp.flip(inputs, axis=0) * (1.0 - mask)) + box_area = (y_max - y_min) * (x_max - x_min) + weight = 1.0 - box_area / float(height * width) + weight *= jnp.ones((inputs.shape[0], 1)) + return result_img, weight + + +def mixup_cutmix(batch: Dict['str', jnp.ndarray], + rng: Any, + mixup_alpha: float = 1.0, + cutmix_alpha: float = 0., + switch_prob: float = 0.5, + label_smoothing: float = 0.0) -> Dict['str', jnp.ndarray]: + """Performs Mixup or Cutmix within a single batch. + + For more details on Mixup, please see https://arxiv.org/abs/1710.09412. + And for details on Cutmix, refer to https://arxiv.org/abs/1905.04899. + + Based on the implementation from: + https://github.com/rwightman/pytorch-image-models/blob/master/timm/data/mixup.py + + This function supports `jax.numpy` to do mixup within a jitted/pmapped + function (e.g. within a pmapped train step to apply mixup on device patch). + + Results in a batch with: + mixed_images[idx] = weight * images[idx] + (1-weight) * images[-(idx+1)], + where weight is sampled from a beta distribution with parameter alpha. + + Args: + batch: dict; A batch of data with 'inputs' and 'label'. 'inputs' is expected + to have shape [batch, height, width, channels] or NTWHC. + rng: JAX rng key. This key will be consumed by the function call. + mixup_alpha: The alpha parameter of the beta distribution that the weight is + sampled from. + cutmix_alpha: The alpha parameter of the beta distribution that the cutmix + weight is sampled from. + switch_prob: The probability of switching to cutmix when both mixup and + cutmix are enabled. + label_smoothing: The co-efficient for label-smoothing. If using mixup or + cutmix, this is done before mixing the labels. + + Returns: + Tuple (mixed_images, mixed_labels). + """ + + if cutmix_alpha <= 0 and mixup_alpha <= 0: + return batch + + images, labels = batch['inputs'], batch['label'] + if labels.shape[-1] == 1: + raise ValueError('Mixup requires one-hot targets.') + if images.ndim not in (4, 5): + raise ValueError(f'Unexpected shape: {images.shape}, wanted 4 or 5 dims.') + + rng, rng_coinflip = jax.random.split(rng) + coin_flip = jax.random.bernoulli(rng_coinflip, p=switch_prob) + pick_cutmix = cutmix_alpha > 0 and (mixup_alpha <= 0 or coin_flip) + + alpha = jax.lax.cond(pick_cutmix, lambda: cutmix_alpha, lambda: mixup_alpha) + batch['inputs'], label_weight = jax.lax.cond(pick_cutmix, _do_cutmix, + _do_mixup, images, rng, alpha) + + if label_smoothing > 0: + labels = model_utils.apply_label_smoothing(labels, label_smoothing) + + batch['label'] = label_weight * labels + (1.0 - label_weight) * labels[::-1] + return batch + + +def log_note(note: str): + """Write note to XManager and also log to the console.""" + if jax.process_index() == 0: # Only perform on the lead_host + logging.info(note) + + +def compute_max_norm(tensors: PyTree) -> float: + """Compute the maximum norm in a pytree of tensors.""" + leaves, _ = jax.tree_util.tree_flatten(tensors) + norms = jnp.sqrt(sum(jnp.vdot(x, x) for x in leaves)) + max_norm = jnp.max(norms) + return max_norm # pytype: disable=bad-return-type # jnp-type diff --git a/scenic/projects/objectvivit/trainer.py b/scenic/projects/objectvivit/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..634c7b38cbe53705875c7046c3fa2062f1d3bf90 --- /dev/null +++ b/scenic/projects/objectvivit/trainer.py @@ -0,0 +1,685 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script.""" + +import functools +from typing import Any, Callable, Dict, Iterator, Optional, Tuple, Type, Union + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.common_lib import debug_utils +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.objectvivit import optimizer_utils +from scenic.projects.objectvivit import train_utils as custom_train_utils +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils + + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +MetricFnEval = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: Any, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False, + learn_token_score: bool = False, + add_boxes: bool = False, +) -> Tuple[train_utils.TrainState, Dict[str, Any]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, and optimizer. The buffer of this argument can be + donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + learn_token_score: if enable learning token score. The network will have + additional outputs of each scores for each token. + add_boxes: if add boxes in shape batch x time x num_objs x 4 + + Returns: + Updated state of training, computed metrics, and learning rate for logging. + """ + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = custom_train_utils.mixup_cutmix( + batch, + mixup_rng, + config.mixup.alpha, + cutmix_alpha=config.mixup.get('cutmix_alpha', 0.), + switch_prob=config.mixup.get('cutmix_switch_prob', 0.5), + label_smoothing=config.mixup.get('label_smoothing', 0.0)) + + # Bind the dropout rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + outputs, new_model_state = flax_model.apply( + variables, + batch['inputs'], + boxes=batch['bboxes'] if add_boxes else None, + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + if learn_token_score: + logits = outputs['logits'] + cls_loss, token_loss = loss_fn( + logits, batch, variables['params'], aux_outputs=outputs) + loss = cls_loss + token_loss + return loss, (new_model_state, outputs, cls_loss, token_loss) + else: + loss = loss_fn(outputs, batch, variables['params']) + return loss, (new_model_state, outputs, None, None) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (_, (new_model_state, outputs, cls_loss, token_loss + )), grad = compute_gradient_fn(train_state.params) + + if learn_token_score: + logits = outputs['logits'] + metrics = metrics_fn(logits, batch) + metrics['cls_loss'] = (cls_loss, 1.) + metrics['token_loss'] = (token_loss, 1.) + token_scores = outputs['token_scores'] + gt_scores = outputs['gt_scores'] + n_tokens = token_scores.shape[-1] + k = int(config.model.object_config.get('keep_token_ratio', 0.5) * n_tokens) + topk_val, _ = jax.lax.top_k(token_scores, k) + pred_mask = token_scores > topk_val[:, -1:] + gt_topk_val, _ = jax.lax.top_k(gt_scores, k) + gt_mask = gt_scores > gt_topk_val[:, -1:] + acc = (pred_mask == gt_mask).sum() / pred_mask.size + metrics['token_acc'] = (acc, 1.) + else: + metrics = metrics_fn(outputs, batch) + + if add_boxes: + metrics['boxes_num'] = ((batch['bboxes'] > 0).any(axis=3).sum() / ( + batch['bboxes'].shape[0] * batch['bboxes'].shape[1]), 1.) + + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + metrics['max_grad_norm_preclip'] = ( + custom_train_utils.compute_max_norm(grad), 1) + if config.get('max_grad_norm', None) is not None: + grad = clip_grads(grad, config.max_grad_norm) + metrics['max_grad_norm_postclip'] = ( + custom_train_utils.compute_max_norm(grad), 1) + + # We no longer perform explicit weight decay here. This can be added + # as an Optax gradient transformation if necessary. Or one can also use + # AdamW instead of Adam. + updates, new_opt_state = train_state.tx.update( + grad, train_state.opt_state, train_state.params + ) # pytype: disable=attribute-error + new_params = optax.apply_updates(train_state.params, updates) + + # Log additional statistics. These are the L2 norms of the entire flattened + # vector. + metrics['l2_grads'] = ( + jnp.sqrt(sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)])), + 1, + ) + metrics['l2_params'] = ( + jnp.sqrt( + sum([jnp.vdot(p, p) for p in jax.tree_util.tree_leaves(new_params)]) + ), + 1, + ) + metrics['l2_updates'] = ( + jnp.sqrt( + sum([jnp.vdot(u, u) for u in jax.tree_util.tree_leaves(updates)]) + ), + 1, + ) + + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + return new_train_state, metrics + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + debug: Optional[bool] = False, + learn_token_score: bool = False, + add_boxes: bool = False, +): + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + learn_token_score: if enable learning token score. The network will have + additional outputs of each scores for each token. + add_boxes: if add boxes in shape batch x time x num_objs x 4 + + Returns: + Calculated metrics and logits. + """ + variables = { + 'params': train_state.params, + **train_state.model_state + } + outputs = flax_model.apply( + variables, batch['inputs'], + boxes=batch['bboxes'] if add_boxes else None, + rngs={'dropout': train_state.rng}, + train=False, mutable=False, debug=debug) + if learn_token_score: + logits = outputs['logits'] + else: + logits = outputs + metrics = metrics_fn(logits, batch) + return metrics, logits + + +def test_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFnEval, + n_clips: int = 2, + return_logits_and_labels: bool = False, + softmax_logits: bool = False, + debug: bool = False, + learn_token_score: bool = False, + add_boxes: bool = False, +) -> Union[ + Dict[str, Tuple[float, int]], + Tuple[Dict[str, Tuple[float, int]], jnp.ndarray, jnp.ndarray], +]: + """Runs a single step of testing. + + For multi-crop testing, we assume that num_crops consecutive entries in the + batch are from the same example. And we average the logits over these examples + + We assume that the batch contains different crops of the same original + example. Therefore, we can average all the logits of it. + This assumption is true when local_batch_size = num_local_devices + + Args: + train_state: The state of training including the current + global_step, model_state, rng, and optimizer, and other metadata. + batch: Dictionary with keys 'inputs', 'labels', 'batch_mask'. We assume that + all the inputs correspond to the same original example in the test set. + The input shapes to this function are batch['inputs'] = [num_crops, t, h, + w, c] batch['labels'] = [num_crops, num_classes] However, for + classification, the labels for all the crops are the same. + batch['batch_mask'] = [num_crops] + flax_model: A Flax model. + metrics_fn: Metrics function for the model. + n_clips: The number of clips to process at a time by each device. Set + due to memory constraints. + return_logits_and_labels: Whether return logits of the model or not. + softmax_logits: Whether to softmax-normalise the logits before + averaging + debug: Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + learn_token_score: if enable learning token score. The network will have + additional outputs of each scores for each token. + add_boxes: if add boxes in shape batch x time x num_objs x 4 + + Returns: + Calculated metrics [and optionally averaged logits that are of + shape `[1, num_classes]`]. + """ + all_logits = jnp.zeros(batch['label'].shape[1]) + num_crops = batch['inputs'].shape[0] + variables = { + 'params': train_state.params, + **train_state.model_state + } + + for idx in range(0, num_crops, n_clips): + temp_input = batch['inputs'][idx:idx + n_clips] + outputs = flax_model.apply( + variables, temp_input, + boxes=batch['bboxes'][idx:idx + n_clips] if add_boxes else None, + rngs={'dropout': train_state.rng}, + train=False, mutable=False, debug=debug) + if learn_token_score: + logits = outputs['logits'] + else: + logits = outputs + if softmax_logits: + logits = nn.softmax(logits, axis=-1) + logits = jnp.sum(logits, axis=0) + all_logits = all_logits + logits + + all_logits = all_logits / num_crops + all_logits = jnp.expand_dims(all_logits, axis=0) + batch['label'] = jnp.expand_dims(batch['label'][0], axis=0) + batch['batch_mask'] = jnp.expand_dims(batch['batch_mask'][0], axis=0) + metrics = metrics_fn(all_logits, batch) + if return_logits_and_labels: + return metrics, all_logits, batch['label'] + return metrics + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter): + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current global_step, + model_state, rng, and the optimizer), train_summary and eval_summary which + are dict of metrics (from the last evaluation and train metric logging + respectively). These outputs are used for regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + learn_token_score = config.get( + 'learn_token_configs', {}).get('enabled', False) + + attach_objects = config.get('attach_configs', {}).get('enabled', False) + token_score_from_dataloader = config.get('attach_configs', {}).get( + 'token_score_from_dataloader', False) + add_boxes = config.dataset_configs.get('object_configs', {}).get( + 'return_boxes', -1) > 0 + + # Initialize model. + rng, init_rng = jax.random.split(rng) + init_rng = {'params': init_rng, 'dropout': init_rng} + input_spec = [ + (dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))] + if add_boxes: + input_spec.append( + (config.dataset_configs.object_configs.boxes_shape, jnp.float32)) + + if attach_objects and not token_score_from_dataloader: + input_spec.append((config.attach_configs.out_shape, jnp.float32)) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=input_spec, + config=config, + rngs=init_rng) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + if 'layerwise_decay' in config.optimizer_configs: + logging.info('Using layerwise decay optimizer.') + tx = optimizer_utils.optimizer_with_layerwise_decay(config, params) + else: + optimizer_config = optimizers.get_optax_optimizer_config(config) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params) + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + # Create Chrono ojbect to track and store training statistics and metadata. + chrono = train_utils.Chrono() + + rng, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + logging.info('Parameter summary after restoring checkpoint') + debug_utils.log_param_shapes(train_state.params) + + chrono.load(train_state.metadata['chrono']) + del train_state.metadata['chrono'] # pytype: disable=unsupported-operands + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + + if init_checkpoint_path is not None: + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + logging.info( + 'restored_train_state.params.keys %s', + restored_train_state.params.keys()) + train_state = model.init_from_train_state(train_state, # pytype: disable=attribute-error + restored_train_state, + restored_model_cfg) + # Free unnecessary memory. + del restored_train_state + logging.info('Parameters after initialising weights from checkpoint.') + debug_utils.log_param_shapes(train_state.params) + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train, + learn_token_score=learn_token_score, + add_boxes=add_boxes), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + debug=config.debug_eval, + learn_token_score=learn_token_score, + add_boxes=add_boxes, + ), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + + if config.dataset_configs.get('do_multicrop_test'): + log_test_steps = int( + steps_per_epoch * config.dataset_configs.log_test_epochs) + + test_step_pmapped = jax.pmap( + functools.partial( + test_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('test'), + n_clips=config.get('multicrop_clips_per_device', 2), + debug=config.debug_eval, + learn_token_score=learn_token_score, + add_boxes=add_boxes), + axis_name='batch', + # We can donate the test_batch's buffer. + donate_argnums=(1,), + ) + + if config.dataset_configs.test_batch_size != jax.local_device_count(): + raise ValueError( + 'The per-host batch size must be equal to the number of local devices' + 'This ensures that each TPU device is processing different views of' + 'the same original video. Got ' + f'{config.dataset_configs.test_batch_size} vs' + f'{jax.local_device_count()}.') + + total_test_steps = int( + np.ceil(dataset.meta_data['num_test_examples'] / + (config.get('dataset_configs.test_batch_size') * + config.get('dataset_configs.num_test_clips') * + jax.process_count()))) + steps_per_test = config.get('steps_per_test') or total_test_steps + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + def evaluate(train_state: train_utils.TrainState, step: int, + valid_iter: Iterator[Batch], + num_valid_ex: int) -> Dict[str, Any]: + eval_summary = {} + additional_summary = None + if not isinstance(valid_iter, dict): # Only on validation set. + valid_iter, num_valid_ex = {'valid': valid_iter}, {'valid': num_valid_ex} + for val_name, val_iter in valid_iter.items(): + num_ex = num_valid_ex[val_name] + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int(np.ceil(num_ex / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + eval_metrics = [] + for _ in range(steps_per_eval): + eval_batch = next(val_iter) + if dataset.meta_data['target_is_onehot']: # Which includes multi-hot. + # Ignore the entries with all zero label for evaluation. + eval_batch['batch_mask'] *= eval_batch['label'].max(axis=-1) + e_metrics, _ = eval_step_pmapped(train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + eval_summary.update( + train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + extra_eval_summary=additional_summary, + writer=writer, + prefix=val_name)) + del eval_metrics + writer.flush() + return eval_summary + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step) + + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + hooks = [report_progress] + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics = train_step_pmapped(train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + extra_training_logs.append({'learning_rate': lr_fn(step)}) + + # Quick indication that training is happening. + logging.log_first_n(logging.INFO, 'Finished training step %d.', 5, step) + for h in hooks: + h(step) + + ############### LOG TRAIN SUMMARY ############### + if ((step % log_summary_steps == 1) or (step == total_steps) or + (chrono.warmup and lead_host)): + chrono.pause() + if lead_host: + chrono.tick(step, writer, custom_train_utils.log_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, train_metrics + ), + extra_training_logs=extra_training_logs, + writer=writer, + ) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + + ################### EVALUATION ####################### + if (step % log_eval_steps == 0) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summary = evaluate(train_state, step, dataset.valid_iter, + dataset.meta_data['num_eval_examples']) + chrono.resume() + + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 1 and step > 1) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) + train_utils.save_checkpoint(workdir, unrep_train_state, max_to_keep=1) + del unrep_train_state + chrono.resume() + + ############# MULTICROP TESTING ############################ + if (config.dataset_configs.get('do_multicrop_test') and + ((step % log_test_steps == 0) or step == total_steps)): + + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('checkpoint'): + test_metrics = [] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + + # At the end of training, evaluate on the whole test set. + if step == total_steps: + steps_per_test = total_test_steps + + logging.info('Starting multicrop test') + for _ in range(steps_per_test): + test_batch = next(dataset.test_iter) + t_metrics = test_step_pmapped(train_state, test_batch) + # Fetch t_metrics to host and store. + test_metrics.append(train_utils.unreplicate_and_get(t_metrics)) + # Log eval summary. + train_utils.log_eval_summary( + step=step, + eval_metrics=test_metrics, + writer=writer, + prefix='test') + logging.info('Completed multicrop test') + del test_metrics + writer.flush() + chrono.resume() + + # Wait until computations are done before exiting. + jax.random.normal(jax.random.PRNGKey(0), ()).block_until_ready() + logging.info('Parameter summary after completing training.') + debug_utils.log_param_shapes(train_state.params) + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/omninet/__init__.py b/scenic/projects/omninet/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/omninet/main.py b/scenic/projects/omninet/main.py new file mode 100644 index 0000000000000000000000000000000000000000..fae0a5dead4e695afa82cce8020b27453ef9c9b5 --- /dev/null +++ b/scenic/projects/omninet/main.py @@ -0,0 +1,60 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for OmniNet.""" + +from typing import Any + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.omninet import model +from scenic.train_lib import train_utils +from scenic.train_lib import trainers + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name: str) -> Any: + """Returns model class given its name.""" + if model_name == 'omninet_multilabel_classification': + return model.OmniNetMultiLabelClassificationModel + elif model_name == 'omnimixer_multilabel_classification': + return model.OmniMixerMultiLabelClassificationModel + else: + raise ValueError(f'Unrecognized model: {model_name}.') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the OmniNet.""" + model_cls = get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + + trainers.get_trainer(config.trainer_name)( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/omninet/model.py b/scenic/projects/omninet/model.py new file mode 100644 index 0000000000000000000000000000000000000000..2a5b226b1526499827bd2744da7d9e8353a55ae9 --- /dev/null +++ b/scenic/projects/omninet/model.py @@ -0,0 +1,487 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""OmniNet model.""" + +from typing import Any, Optional, Sequence + +from absl import logging +import flax.linen as nn +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models.multilabel_classification_model import MultiLabelClassificationModel +from scenic.model_lib.layers import attention_layers +from scenic.model_lib.layers import nn_layers +from scenic.projects.baselines import mixer +from scenic.projects.baselines import vit +from scenic.projects.fast_vit import model_utils as fast_vit_model_utils +from scenic.projects.omninet import model_utils + + +class OmnidirectionalEncoder1D(nn.Module): + """Omnidirectional Encoder. + + Attributes: + mlp_dim: Dimension of the MLP on top of attention block. + num_layers: Number of layers. + attention_configs: Configurations passed to the self-attention. + attention_fn: Self-attention function used in the model. + omninet: Configurations of the omninet (omnidirectional attention). + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + """ + mlp_dim: int + num_layers: int + attention_configs: ml_collections.ConfigDict + attention_fn: str + omninet: ml_collections.ConfigDict + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_droplayer_rate: float = 0.0 + + @nn.compact + def __call__( + self, + inputs: jnp.ndarray, + train: bool, + ) -> jnp.ndarray: + """Applies Transformer model on the inputs.""" + assert inputs.ndim == 3 # Shape is `[batch, len, emb]`. + x = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name='posembed_input')( + inputs) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + # Input encoder. + partition_layers = [] + skip = False + for lyr in range(self.num_layers): + droplayer_p = ( + lyr / max(self.num_layers - 1, 1)) * self.stochastic_droplayer_rate + if skip and self.omninet.skip_standard: + logging.info('Skipping vanilla transformer at layer %d', lyr) + skip = False + else: + x = fast_vit_model_utils.Encoder1DBlock( # pytype: disable=wrong-arg-types # jax-ndarray + mlp_dim=self.mlp_dim, + attention_fn=self.attention_fn, + attention_configs=self.attention_configs, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + droplayer_p=droplayer_p, + name=f'encoder_block_{lyr}')( + x, inputs_kv=None, deterministic=not train) + partition_layers.append(x) + + if len(partition_layers) == (self.omninet.partition - 1): + # Every N-1th layer. + #################### OmniNet ######################## + if self.omninet.query_type == 'full': + if self.omninet.integrate == 'concat': + xp = jnp.concatenate(partition_layers, 1) + elif self.omninet.integrate == 'grid_stack': + xp = model_utils.grid_restack(partition_layers) + elif self.omninet.integrate == 'factorized': + xp = jnp.stack(partition_layers, 1) # Shape: (bs, L, N, d). + else: + raise ValueError( + f'The integrate type {self.omninet.integrate} is not defined.') + + def _pool(xp): + if self.omninet.pool == 'last': + assert self.omninet.integrate == 'concat' + return xp[:, -inputs.shape[1]:, :] + elif self.omninet.pool == 'max': + assert self.omninet.integrate in ['grid_stack', 'factorized'] + if self.omninet.integrate == 'grid_stack': + return nn.max_pool( + xp, (len(partition_layers),), + strides=(len(partition_layers),), + padding='VALID') + else: + return jnp.max(xp, axis=1) + else: + raise ValueError( + f'The pool type {self.omninet.pool} is not defined.') + + if self.omninet.pool_after_sa: + post_sa_fn = _pool + else: + post_sa_fn = None + + if self.omninet.encoder.type == '1d': + xp = fast_vit_model_utils.Encoder1DBlock( # pytype: disable=wrong-arg-types # jax-ndarray + mlp_dim=self.omninet.get('mlp_dim', self.mlp_dim), + attention_fn=self.omninet.attention_fn, + attention_configs=self.omninet.attention_configs, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + droplayer_p=droplayer_p, + post_sa_fn=post_sa_fn, + name=f'omni_encoder_block_{lyr}')( + xp, inputs_kv=None, deterministic=not train) + elif self.omninet.encoder.type == 'factorized': + if self.omninet.integrate != 'factorized': + raise ValueError( + "omninet.encoder.type is 'factorized', " + f'but omninet.integrate is {self.omninet.integrate}.') + xp = fast_vit_model_utils.EncoderAxialBlock( + mlp_dim=self.omninet.get('mlp_dim', self.mlp_dim), + attention_configs=self.omninet.attention_configs, + attention_fn=self.omninet.attention_fn, + factorization_axis=self.omninet.encoder.get( + 'factorization_axis', + (1,)), # Apply attention only in depth. + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + droplayer_p=droplayer_p, + post_sa_fn=post_sa_fn, + name=f'omni_encoder_block_{lyr}')( + xp, deterministic=not train) + else: + raise ValueError( + f'Unknown omninet.encoder.type: {self.omninet.encoder.type}') + + if not self.omninet.pool_after_sa: + xp = _pool(xp) + #################### TopQuery ######################## + elif self.omninet.query_type == 'top': + if self.omninet.integrate == 'concat': + xp = jnp.concatenate(partition_layers, 1) + else: + raise ValueError + + xp = fast_vit_model_utils.Encoder1DBlock( + mlp_dim=self.omninet.get('mlp_dim', self.mlp_dim), + attention_fn=self.omninet.attention_fn, + attention_configs=self.omninet.attention_configs, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + droplayer_p=droplayer_p, + name=f'omni_encoder_block_{lyr}')( + x, xp, deterministic=not train) + ######################################################## + x = x + xp + partition_layers = [] + skip = True + + encoded = nn.LayerNorm(name='encoder_norm')(x) + return encoded + + +class OmniNet(nn.Module): + """OmniNet model. + + Attributes: + num_classes: number of classes. + mlp_dim: Dimension of the MLP on top of attention block. + num_layers: Number of layers. + attention_configs: Configurations passed to the self-attention. + attention_fn: Self-attention function used in the model. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden dimension on the stem of the model. + omninet: Configurations of the omninet (omnidirectional attention). + representation_size: Size of the final representation. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout rate for attention heads. + classifier: Type of the classifier. + """ + num_classes: int + mlp_dim: int + num_layers: int + attention_configs: ml_collections.ConfigDict + attention_fn: ml_collections.ConfigDict + patches: ml_collections.ConfigDict + hidden_size: int + omninet: ml_collections.ConfigDict + representation_size: Optional[int] = None + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_droplayer_rate: float = 0.0 + classifier: str = 'gap' + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + *, + train: bool, + debug: Optional[bool] = False) -> jnp.ndarray: + """OmniNet model.""" + patch_height, patch_width = self.patches.size + patch_stride_height, patch_stride_width = self.patches.get( + 'strides', self.patches.size) + x = nn.Conv( + self.hidden_size, (patch_height, patch_width), + strides=(patch_stride_height, patch_stride_width), + padding='VALID', + name='embedding')( + inputs) + + # Flatten the input. + bs, h, w, c = x.shape + x = jnp.reshape(x, [bs, h * w, c]) + + # If we want to add a class token, add it here. + if self.classifier == 'token': + cls = self.param('cls', nn.initializers.zeros, (1, 1, c), x.dtype) + cls = jnp.tile(cls, [bs, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + + x = OmnidirectionalEncoder1D( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + attention_configs=self.attention_configs, + attention_fn=self.attention_fn, + omninet=self.omninet, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_droplayer_rate=self.stochastic_droplayer_rate, + name='Transformer')( + x, train=train) + + if self.classifier in ('token', '0'): + x = x[:, 0] + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=1) + + x = jnp.mean(x, axis=list(range(1, x.ndim - 1))) + + if self.representation_size is not None: + x = nn.Dense(self.representation_size, name='pre_logits')(x) + x = nn.tanh(x) + else: + x = nn_layers.IdentityLayer(name='pre_logits')(x) + x = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x) + return x + + +class OmniNetMultiLabelClassificationModel(MultiLabelClassificationModel): + """OmniNet model for multi-label classification task.""" + + def build_flax_model(self): + return OmniNet( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + attention_configs=self.config.model.attention_configs, + attention_fn=self.config.model.attention_fn, + hidden_size=self.config.model.hidden_size, + patches=self.config.model.patches, + representation_size=self.config.model.representation_size, + classifier=self.config.model.classifier, + omninet=self.config.model.omninet, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + ) + + def default_flax_model_config(self): + return ml_collections.ConfigDict( + dict( + model=dict( + attention_fn='standard', + attention_configs={'num_heads': 2}, + num_layers=1, + representation_size=16, + mlp_dim=32, + dropout_rate=0., + attention_dropout_rate=0., + hidden_size=16, + patches={'size': (4, 4)}, + classifier='gap', + omninet={ + 'skip_standard': True, + 'partition': 1, + 'integrate': 'concat', + 'layer_type': 'self-attention', + 'pool': 'last', + }, + ), + data_dtype_str='float32')) + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is written to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return vit.init_vit_from_train_state(train_state, restored_train_state, + self.config, restored_model_cfg) + + +class OmniMixerEncoder(nn.Module): + """Omnidirectional Mixer Encoder. + + Attributes: + num_layers: Number of layers. + channels_mlp_dim: Hidden dimension of the channel mixing MLP. + sequence_mlp_dim: Hidden dimension of the token (sequence) mixing MLP. + omnimixer: Configurations of the omnimixer (omnidirectional mixer). + dropout_rate: Dropout rate. + stochastic_depth: The layer dropout rate (= stochastic depth). + + Returns: + Output after OmniMixer block. + """ + num_layers: int + channels_mlp_dim: int + sequence_mlp_dim: int + omnimixer: ml_collections.ConfigDict + dropout_rate: float = 0.0 + stochastic_depth: float = 0.0 + + @nn.compact + def __call__( + self, + x: jnp.ndarray, + *, + train: bool, + ) -> jnp.ndarray: + """Applies OmniMixer encoder model on the inputs.""" + partition_layers = [] + skip = False # First layer should be always a standard mixer layer. + for lyr in range(self.num_layers): + if skip and self.omnimixer.skip_standard: + logging.info('Skipping vanilla mixer at layer %d', lyr) + skip = False + else: + p = (lyr / max(self.num_layers - 1, 1)) * self.stochastic_depth + x = mixer.MixerBlock( + channels_mlp_dim=self.channels_mlp_dim, + sequence_mlp_dim=self.sequence_mlp_dim, + dropout_rate=self.dropout_rate, + stochastic_depth=p, + name=f'mixerblock_{lyr}')( + x, deterministic=not train) + partition_layers.append(x) + if len(partition_layers) == self.omnimixer.partition - 1: + # Mixing in depth every N-1th layers. + xp = jnp.stack(partition_layers, 3) # Shape: (bs, N, d, L). + xp = attention_layers.MlpBlock( + mlp_dim=self.omnimixer.depth_mlp_dim, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + name=f'depth_mixing_{lyr}')( + xp, deterministic=not train) + if self.omnimixer.pool == 'last': + xp = xp[:, :, :, -1] # Shape: (bs, N, d). + elif self.omnimixer.pool == 'max': + xp = jnp.max(xp, axis=3) # Shape: (bs, N, d). + else: + raise ValueError( + f'The pool type {self.omnimixer.pool} is not defined.') + x += xp + partition_layers = [] + skip = True + return nn.LayerNorm(name='encoder_norm')(x) + + +# TODO(dehghani, yitay): Tune the LR a bit and write a paper for the OmniMixer. +class OmniMixer(nn.Module): + """OmniMixer model. + + Attributes: + num_classes: Number of output classes. + patch_size: Patch size of the stem. + hidden_size: Size of the hidden state of the output of model's stem. + num_layers: Number of layers. + channels_mlp_dim: hidden dimension of the channel mixing MLP. + sequence_mlp_dim: hidden dimension of the token (sequence) mixing MLP. + omnimixer: Configurations of the omnimixer (omnidirectional mixer). + dropout_rate: Dropout rate. + stochastic_depth: overall stochastic depth rate. + """ + num_classes: int + patch_size: Sequence[int] + hidden_size: int + num_layers: int + channels_mlp_dim: int + sequence_mlp_dim: int + omnimixer: ml_collections.ConfigDict + dropout_rate: float = 0.0 + stochastic_depth: float = 0.0 + + @nn.compact + def __call__(self, + x: jnp.ndarray, + *, + train: bool, + debug: Optional[bool] = False) -> jnp.ndarray: + """OmniMixer model.""" + x = nn.Conv( + self.hidden_size, + self.patch_size, + strides=self.patch_size, + padding='VALID', + name='embedding')( + x) + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + + x = OmniMixerEncoder( + num_layers=self.num_layers, + channels_mlp_dim=self.channels_mlp_dim, + sequence_mlp_dim=self.sequence_mlp_dim, + omnimixer=self.omnimixer, + dropout_rate=self.dropout_rate, + stochastic_depth=self.stochastic_depth, + name='omnimixer_encoder')( + x, train=train) + + # Use global average pooling for our classifier, dim (1,) or (1,2). + x = jnp.mean(x, axis=list(range(1, x.ndim - 1))) + + x = nn_layers.IdentityLayer(name='pre_logits')(x) + x = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x) + return x + + +class OmniMixerMultiLabelClassificationModel(MultiLabelClassificationModel): + """OmniMixer model for multi-label classification task.""" + + def build_flax_model(self): + return OmniMixer( + num_classes=self.dataset_meta_data['num_classes'], + patch_size=self.config.model.patch_size, + hidden_size=self.config.model.hidden_size, + num_layers=self.config.model.num_layers, + channels_mlp_dim=self.config.model.channels_mlp_dim, + sequence_mlp_dim=self.config.model.sequence_mlp_dim, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + stochastic_depth=self.config.model.get('stochastic_depth', 0.0), + omnimixer=self.config.model.omnimixer, + ) diff --git a/scenic/projects/omninet/model_utils.py b/scenic/projects/omninet/model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..3513e31105958b706bd39a660fcb72dd94c96426 --- /dev/null +++ b/scenic/projects/omninet/model_utils.py @@ -0,0 +1,42 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""OmniNet models utilities.""" + +import jax.numpy as jnp + + +def grid_restack(all_vecs): + """Stack layers with respect to the grid shape of positions. + + Given multiple sequences (lists) of batch x len x dim reshape this such + that all positions are side by side. + + for example (for illustrative purposes): + + inputs: [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] + outputs: [1, 5, 9, 2, 6, 10, 3, 7, 11, 4, 8, 12] + + Args: + all_vecs: list of sequences of batch x len x dim + + Returns: + Array of batch x (length x num_items) x dim. + """ + cat_output = [] + for pos in range(all_vecs[0].shape[1]): + pos_vecs = [x[:, None, pos, :] for x in all_vecs] + cat_output += pos_vecs + x2 = jnp.concatenate(cat_output, 1) + return x2 diff --git a/scenic/projects/omninet/tests/__init__.py b/scenic/projects/omninet/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/omninet/tests/test_model.py b/scenic/projects/omninet/tests/test_model.py new file mode 100644 index 0000000000000000000000000000000000000000..ea5e0a8de768fe2d2a52fe124926e6c4a54c240c --- /dev/null +++ b/scenic/projects/omninet/tests/test_model.py @@ -0,0 +1,57 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for OmniNet model.py.""" + +import functools +import itertools + +from absl.testing import absltest +from absl.testing import parameterized +from jax import random +import jax.numpy as jnp +import ml_collections +from scenic.projects.omninet import model + + +class OmniNetModelTest(parameterized.TestCase): + """Tests for modules in omninet model.py.""" + + @parameterized.parameters( + itertools.product([True, False], [1, 2, 4], ['max', 'last'])) + def test_omnimixer_output_shape(self, skip_standard, partition, pool): + """Tests validity of output's shape of OmniMixerEncoder module.""" + rng = random.PRNGKey(0) + x = jnp.ones((4, 16, 32)) + omnimixer_configs = ml_collections.ConfigDict({ + 'skip_standard': skip_standard, + 'partition': partition, + 'pool': pool, + 'depth_mlp_dim': 16, + }) + + omnimixer_encoder_def = functools.partial( + model.OmniMixerEncoder, + num_layers=4, + channels_mlp_dim=32, + sequence_mlp_dim=8, + omnimixer=omnimixer_configs) + omnimixer_encoder_vars = omnimixer_encoder_def().init(rng, x, train=False) + y = omnimixer_encoder_def().apply(omnimixer_encoder_vars, x, train=False) + # Test outputs shape. + self.assertEqual(y.shape, x.shape) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/owl_vit/.ipynb_checkpoints/models-checkpoint.py b/scenic/projects/owl_vit/.ipynb_checkpoints/models-checkpoint.py new file mode 100644 index 0000000000000000000000000000000000000000..7ebccaabf4957cc49028d5be6e2f3579caebf761 --- /dev/null +++ b/scenic/projects/owl_vit/.ipynb_checkpoints/models-checkpoint.py @@ -0,0 +1,423 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of the OWL-ViT detection model.""" + +import copy +from typing import Any, Dict, List, Mapping, Optional + +import flax.linen as nn +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import ml_collections +from scenic.projects.owl_vit import layers +from scenic.projects.owl_vit import matching_base_models +from scenic.projects.owl_vit import utils +from scenic.projects.owl_vit.clip import model as clip_model +from scenic.projects.owl_vit.clip import tokenizer as clip_tokenizer + + +Params = layers.Params + + +def _fix_old_layernorm(transformer_params): + """Fix layer norm numbering of old checkpoints.""" + if ( + 'resblocks.0' in transformer_params + and 'ln_0' in transformer_params['resblocks.0'] + ): + # This checkpoint has the new format. + return transformer_params + + fixed_params = copy.deepcopy(transformer_params) + for resblock in fixed_params.values(): + resblock['ln_0'] = resblock.pop('ln_1') + resblock['ln_1'] = resblock.pop('ln_2') + + return fixed_params + + +def _fix_resblock_naming(transformer_params): + """Fix resblock naming of old checkpoints.""" + if 'resblocks_0' in transformer_params: + # This checkpoint is already converted. + return transformer_params + + fixed_params = copy.deepcopy(transformer_params) + old_keys = list(fixed_params.keys()) + for old_key in old_keys: + new_key = old_key.replace('.', '_') + fixed_params[new_key] = fixed_params.pop(old_key) + + return fixed_params + + +def _fix_old_checkpoints(params): + """Makes old checkpoints forward-compatible.""" + if 'clip' in params['backbone']: + # Fix the layer norm indexing. + params['backbone']['clip']['visual']['transformer'] = _fix_old_layernorm( + params['backbone']['clip']['visual']['transformer'] + ) + params['backbone']['clip']['text']['transformer'] = _fix_old_layernorm( + params['backbone']['clip']['text']['transformer'] + ) + + # Fix the resblock naming. + params['backbone']['clip']['visual']['transformer'] = _fix_resblock_naming( + params['backbone']['clip']['visual']['transformer'] + ) + params['backbone']['clip']['text']['transformer'] = _fix_resblock_naming( + params['backbone']['clip']['text']['transformer'] + ) + return params + + +class TextZeroShotDetectionModule(nn.Module): + """Text-query-based OWL-ViT model. + + This module computes joint text and image embeddings which are then + used for localized prediction of bounding boxes and classes. + + Attributes: + body_configs: Configurations of the image-text module. + objectness_head_configs: Configurations for the (optional) objectness head. + mask_head_configs: Configurations for the (optional) mask head. + normalize: Whether to normalize the output of the model and the + label_embeddings before computing the class logits. + box_bias: Type of box bias - one of 'location', 'size' or 'both'. + """ + + body_configs: ml_collections.ConfigDict + objectness_head_configs: Optional[ml_collections.ConfigDict] = None + mask_head_configs: Optional[ml_collections.ConfigDict] = None + normalize: bool = False + box_bias: str = 'both' + + def tokenize(self, text: str, max_token_len: int = 16) -> List[int]: + return clip_tokenizer.tokenize(text, max_token_len) + + @nn.nowrap + def load_variables(self, checkpoint_path: str) -> Mapping[str, Any]: + restored = checkpoints.restore_checkpoint(checkpoint_path, target=None) + if 'optimizer' in restored: + # Pre-Optax checkpoint: + params = restored['optimizer']['target'] + else: + params = restored['params'] + params = _fix_old_checkpoints(params) + return {'params': params} + + def setup(self): + + self._embedder = layers.ClipImageTextEmbedder( + self.body_configs, name='backbone') + + if self.objectness_head_configs is not None: + self._objectness_head = layers.PredictorMLP( + mlp_dim=None, out_dim=1, num_layers=3, + out_activation=None, name='objectness_head') + + self._class_head = layers.ClassPredictor( + out_dim=clip_model.CONFIGS[self.body_configs.variant]['embed_dim'], + normalize=self.normalize, name='class_head') + + self._box_head = layers.PredictorMLP( + mlp_dim=None, out_dim=4, num_layers=3, + out_activation=None, name='obj_box_head') + + if self.mask_head_configs is not None: + self._mask_head = layers.BoxMaskHead( + **self.mask_head_configs, # pylint: disable=not-a-mapping + name='obj_mask_head') + + def objectness_predictor( + self, image_features: jnp.ndarray, train: bool = False + ) -> Dict[str, jnp.ndarray]: + """Predicts the probability that each image feature token is an object. + + Args: + image_features: Features extracted from the image. + train: Whether or not we are in training mode. + + Returns: + Objectness scores, in a dictionary. + """ + del train + # TODO(b/215588365): Need local variable to work around pytype bug. + objectness_head_configs = self.objectness_head_configs + if objectness_head_configs is None: + raise ValueError('Must pass objectness_configs to use objectness head.') + if objectness_head_configs.stop_gradient: + image_features = jax.lax.stop_gradient(image_features) + objectness_logits = self._objectness_head(image_features) + return {'objectness_logits': objectness_logits[..., 0]} + + def box_predictor( + self, + *, + image_features: jnp.ndarray, + feature_map: jnp.ndarray, + keep_image_tokens: Optional[jnp.ndarray] = None, + ) -> Dict[str, jnp.ndarray]: + """Predicts bounding boxes from image features. + + Args: + image_features: Features extracted from the image, flattened into a 1d + sequence of tokens. + feature_map: A 2d spatial re-arrangement of image_features. + keep_image_tokens: If keep_image_tokens is not None, this indicates that + image_features is a subset of tokens of the full grid. keep_image_tokens + then contains the 1d indices of the kept tokens within the full token + sequence. In that case, feature_map will contain dummy values at the + dropped locations. + + Returns: + List of predicted boxes (cxcywh normalized to 0, 1) nested within + a dictionary. + """ + # Bounding box detection head [b, num_patches, 4]. + pred_boxes = self._box_head(image_features) + + # We compute the location of each token on the grid and use it to compute + # a bias for the bbox prediction, i.e., each token is biased towards + # predicting its location on the grid as the center. + box_bias = utils.compute_box_bias( + feature_map=feature_map, kind=self.box_bias + ) + + if keep_image_tokens is not None: + box_bias = jnp.take_along_axis( + box_bias[None, ...], keep_image_tokens[..., None], axis=-2 + ) + + pred_boxes += box_bias + pred_boxes = nn.sigmoid(pred_boxes) + return {'pred_boxes': pred_boxes} + + def class_predictor( + self, + image_features: jnp.ndarray, + query_embeddings: Optional[jnp.ndarray] = None, + query_mask: Optional[jnp.ndarray] = None) -> Dict[str, jnp.ndarray]: + """Applies the class head to the image features. + + Args: + image_features: Feature tokens extracted by the image embedder. + query_embeddings: Optional list of text (or image) embeddings. If no + embeddings are provided, no logits will be computed and only the class + embeddings for the image will be returned. + query_mask: Must be provided with query_embeddings. A mask indicating + which query embeddings are valid. + + Returns: + A dictionary containing the class_embeddings and the pred_logits if + query_embeddings and query_mask are provided. + """ + return self._class_head(image_features, query_embeddings, query_mask) + + def mask_predictor(self, + image, + image_tokens, + boxes, + *, + true_boxes=None) -> Dict[str, jnp.ndarray]: + """Predicts (cropped) segmentation masks from the image features. + + Args: + image: Input image, for extracting low-level image features. + image_tokens: High-level features from the image embedder. + boxes: Predicted bounding boxes corresponding to the image tokens. + true_boxes: For filtering mask head predictions during training. + + Returns: + A dictionary containing the predicted segmentation masks. The mask at + index i corresponds to the predicted box in `pred_boxes` at index i. + """ + # TODO(b/215588365): Need local variable to work around pytype bug. + mask_head_configs = self.mask_head_configs + if mask_head_configs is None: + raise ValueError('Must pass mask_head_configs to use mask head.') + pred_masks = self._mask_head( + image, image_tokens, boxes, true_boxes=true_boxes) + batch_size = image_tokens.shape[0] + mask_size = mask_head_configs.mask_size + return { + 'pred_masks': + jnp.reshape(pred_masks, (batch_size, -1, mask_size, mask_size)) + } + + def image_embedder(self, images: jnp.ndarray, train: bool) -> jnp.ndarray: + """Embeds images into feature maps. + + Args: + images: images of shape (batch, input_size, input_size, 3), scaled to the + input range defined in the config. Padding should be at the bottom right + of the image. + train: Whether or not we are in training mode. + + Returns: + A 2D map of image features. + """ + image_features, _ = self._embedder(images=images, train=train) + return utils.seq2img(images, image_features) + + def text_embedder(self, text_queries: jnp.ndarray, + train: bool) -> jnp.ndarray: + """Embeds text into features. + + Args: + text_queries: jnp.int32 tokenized text queries of shape [..., num_tokens]. + train: Whether or not we are in training mode. + + Returns: + An array of the same shape as text_queries, except for the last dimension, + which is num_dimensions instead of num_tokens. + """ + _, text_features = self._embedder(texts=text_queries, train=train) + return text_features # pytype: disable=bad-return-type # jax-ndarray + + def __call__(self, + inputs: jnp.ndarray, + text_queries: jnp.ndarray, + train: bool, + *, + true_boxes: Optional[jnp.ndarray] = None, + debug: bool = False) -> Mapping[str, Any]: + """Applies TextZeroShotDetectionModule on the input. + + Args: + inputs: Images [batch_size, height, width, 3]. + text_queries: Queries to score boxes on. Queries starting with 0 stand for + padding [batch_size=b, num_queries=q, max_query_length=l]. + train: Whether it is training. + true_boxes: For filtering mask head predictions during training. + debug: Unused. + + Returns: + Outputs dict with items: + pred_logits: Class logits [b, num_patches, num_queries]. + pred_boxes: Predicted bounding boxes [b, num_patches, 4]. + feature_map: Image embeddings 2d feature map [b, sp, sp, img_emb_dim]. + """ + del debug + if not train and true_boxes is not None: + raise ValueError('True boxes should only be supplied during training.') + + keep_tokens = None + + # Embed images: + feature_map = self.image_embedder(inputs, train) + b, h, w, d = feature_map.shape + image_features = jnp.reshape(feature_map, (b, h * w, d)) + + # Embed queries: + query_embeddings = self.text_embedder(text_queries, train) + # If first token is 0, then this is a padding query [b, q]. + query_mask = (text_queries[..., 0] > 0).astype(jnp.float32) + + outputs = { + 'feature_map': feature_map, + 'query_embeddings': query_embeddings, + } + + # Get objectness scores: + if self.objectness_head_configs is not None: + outputs.update(self.objectness_predictor(image_features)) + + # During training, sample top tokens by objectness: + num_instances = image_features.shape[-2] + top_k = self.body_configs.get('objectness_top_k', num_instances) + if train and (0 < top_k < num_instances): + if 'objectness_logits' not in outputs: + raise ValueError('Need objectness head to sample by objectness.') + outputs['objectness_logits'], keep_tokens = jax.lax.top_k( + outputs['objectness_logits'], k=self.body_configs.objectness_top_k + ) + image_features = jnp.take_along_axis( + image_features, keep_tokens[..., None], axis=-2 + ) + + # Classification [b, num_patches, num_queries]: + outputs.update( + self.class_predictor(image_features, query_embeddings, query_mask)) + + # Predict boxes: + outputs.update( + self.box_predictor( + image_features=image_features, + feature_map=feature_map, + keep_image_tokens=keep_tokens, + ) + ) + + # Predict masks: + if self.mask_head_configs is not None: + outputs.update( + self.mask_predictor( + inputs, + image_features, + outputs['pred_boxes'], + true_boxes=true_boxes)) + + return outputs + + def load( + self, params: Params, + init_config: ml_collections.ConfigDict) -> Params: + """Loads backbone parameters for this model from a backbone checkpoint.""" + if init_config.get('codebase') == 'clip': + # Initialize backbone parameters from an external codebase. + params['backbone'] = self._embedder.load_backbone( + params['backbone'], init_config.get('checkpoint_path')) + else: + # Initialize all parameters from a Scenic checkpoint. + restored_train_state = checkpoints.restore_checkpoint( + init_config.checkpoint_path, target=None) + if 'optimizer' in restored_train_state: + # Pre-Optax checkpoint: + params = restored_train_state['optimizer']['target'] + else: + params = restored_train_state['params'] + + # Explicitly removing unused parameters after loading: + params['class_head'].pop('padding', None) + params['class_head'].pop('padding_bias', None) + + params = _fix_old_checkpoints(params) + + return params + + +class TextZeroShotDetectionModel(matching_base_models.ObjectDetectionModel): + """OWL-ViT model for detection.""" + + def build_flax_model(self) -> nn.Module: + return TextZeroShotDetectionModule( + body_configs=self.config.model.body, + normalize=self.config.model.normalize, + box_bias=self.config.model.box_bias) + + +class TextZeroShotDetectionModelWithMasks( + matching_base_models.ObjectDetectionModelWithMasks): + """ViT+ model for detection that also predicts masks.""" + + def build_flax_model(self) -> nn.Module: + return TextZeroShotDetectionModule( + body_configs=self.config.model.body, + mask_head_configs=self.config.model.mask_head, + normalize=self.config.model.normalize, + box_bias=self.config.model.box_bias) diff --git a/scenic/projects/owl_vit/README.md b/scenic/projects/owl_vit/README.md new file mode 100644 index 0000000000000000000000000000000000000000..35431543eb8d4d205d896ff2baf0e1691ef92805 --- /dev/null +++ b/scenic/projects/owl_vit/README.md @@ -0,0 +1,234 @@ +OWL-ViT: Open-World Object Detection with Vision Transformers +== +OWL-ViT text inference demo + +OWL-ViT model schematic + +OWL-ViT is an **open-vocabulary object detector**. Given an image and a free-text query, it finds objects matching that query in the image. It can also do **one-shot object detection**, i.e. detect objects based on a single example image. OWL-ViT reaches state-of-the-art performance on both tasks, e.g. **44.6% zero-shot LVIS APr** with a OWLv2 ViT-L/14 backbone. + + +[Minimal Colab]: https://colab.research.google.com/github/google-research/scenic/blob/main/scenic/projects/owl_vit/notebooks/OWL_ViT_minimal_example.ipynb +[Playground Colab]: https://colab.research.google.com/github/google-research/scenic/blob/main/scenic/projects/owl_vit/notebooks/OWL_ViT_inference_playground.ipynb + +[[OWL-ViT v1 Paper]](https://arxiv.org/abs/2205.06230) +[[OWL-ViT v2 Paper]](https://arxiv.org/abs/2306.09683) +[[Minimal Colab]] +[[Playground Colab]] + +**Update (2024-02-13):** Added support for changing image size at inference. Also added [information about speed benchmarking](#inference-speed) to the README and the [Minimal Colab]. +
+**Update (2023-09-25):** Added image-conditioned detection example to the [Minimal Colab] +
+**Update (2023-09-22):** Added code and checkpoints for OWL-ViT v2. +
+**Update (2023-03-21):** Added a new checkpoint with a segmentation mask head. See the [Minimal Colab] for a usage example. +
+**Update (2022-10-14):** Added [training](#training) and [evaluation](#evaluation) code. +
+**Update (2022-07-06):** Extended TensorFlow-conversion [Colab](https://colab.research.google.com/github/google-research/scenic/blob/main/scenic/projects/owl_vit/notebooks/OWL_ViT_Export_JAX_model_to_TensorFlow_SavedModel.ipynb) with examples for conversion to TFLite. +
+**Update (2022-06-22):** Added [Playground Colab] for interactive exploration of the model, including image-conditioned detection. +
+**Update (2022-05-31):** Added [Colab](https://colab.research.google.com/github/google-research/scenic/blob/main/scenic/projects/owl_vit/notebooks/OWL_ViT_Export_JAX_model_to_TensorFlow_SavedModel.ipynb) showing how to export models to TensorFlow. + +## Contents +Below, we provide pretrained checkpoints, example Colabs, training code and evaluation code. + +To get started, check out the [Minimal Colab], which shows all steps necessary for running inference, including installing Scenic, instantiating a model, loading a checkpoint, preprocessing input images, getting predictions, and visualizing them. + +Table of contents: + +* [Model versions](#model-versions) +* [Pretrained checkpoints](#pretrained-checkpoints) +* [Colabs](#colabs) + * [Minimal example](#minimal-example) + * [Inference playground](#inference-playground) + * [Conversion to TensorFlow](#conversion-to-tensorflow) +* [Installation](#installation) +* [Training](#training) +* [Evaluation](#evaluation) +* [Inference speed](#inference-speed) +* [License](#license) +* [References](#references) + +## Model versions + +### OWL-ViT v1 +The original OWL-ViT model was introduced in May 2022 and is described in [Simple Open-Vocabulary Object Detection with Vision Transformers](https://arxiv.org/abs/2205.06230). + +### OWL-ViT v2 +In June 2023, we introduced an improved architecture and training recipe that uses self-training on Web image-text data as described in [Scaling Open-Vocabulary Object Detection](https://arxiv.org/abs/2306.09683). **OWL-ViT v2 checkpoints are drop-in replacements for v1.** The core inference architecture of v2 is identical to v1, except that v2 adds an **objectness prediction head** which predicts the (query-agnostic) likelihood that a predicted box contains an object (as opposed to background). The objectness score can be used to rank or filter predictions independently of text queries. + +OWL-ViT v2 performs significantly better than OWL-ViT v1: + +OWLv2 comparison plot + + +## Pretrained checkpoints + +OWL-ViT models and their pre-trained checkpoints are specified in [configuration files](https://github.com/google-research/scenic/blob/main/scenic/projects/owl_vit/configs). Checkpoint files are compatible with [Flax](https://github.com/google/flax). We provide the following variants, both as JAX/Flax checkpoints and as `tf.SavedModel`s: + + +[v1_b32_config]: https://github.com/google-research/scenic/blob/main/scenic/projects/owl_vit/configs/clip_b32.py +[v1_b16_config]: https://github.com/google-research/scenic/blob/main/scenic/projects/owl_vit/configs/clip_b16.py +[v1_l14_config]: https://github.com/google-research/scenic/blob/main/scenic/projects/owl_vit/configs/clip_l14.py +[v1_l14m_config]: https://github.com/google-research/scenic/blob/main/scenic/projects/owl_vit/configs/clip_l14_with_masks.py +[v2_b16_config]: https://github.com/google-research/scenic/blob/main/scenic/projects/owl_vit/configs/owl_v2_clip_b16.py +[v2_l14_config]: https://github.com/google-research/scenic/blob/main/scenic/projects/owl_vit/configs/owl_v2_clip_l14.py + + +[v1_b32_jax]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/clip_vit_b32_b0203fc +[v1_b16_jax]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/clip_vit_b16_6171dab +[v1_l14_jax]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/clip_vit_l14_d83d374 +[v1_l14m_jax]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/clip_vit_l14_with_masks_6c17944 +[v2_b16_st_jax]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/owl2-b16-960-st-ngrams_c7e1b9a +[v2_b16_st_ft_jax]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/owl2-b16-960-st-ngrams-ft-lvisbase_d368398 +[v2_b16_ens_jax]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b +[v2_l14_st_jax]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/owl2-l14-1008-st-ngrams_0881fd6 +[v2_l14_st_ft_jax]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/owl2-l14-1008-st-ngrams-ft-lvisbase_8ca674c +[v2_l14_ens_jax]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/owl2-l14-1008-st-ngrams-ft-lvisbase-ens-cold-weight-04_8ca674c + + +[v1_b32_tf]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/clip_vit_b32_b0203fc_tf_model +[v1_b16_tf]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/clip_vit_b16_6171dab_tf_model +[v1_l14_tf]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/clip_vit_l14_d83d374_tf_model +[v2_b16_st_tf]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/owl2-b16-960-st-ngrams_tf_model +[v2_b16_st_ft_tf]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/owl2-b16-960-st-ngrams-ft-lvisbase_tf_model +[v2_b16_ens_tf]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_tf_model +[v2_l14_st_tf]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/owl2-l14-1008-st-ngrams_tf_model +[v2_l14_st_ft_tf]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/owl2-l14-1008-st-ngrams-ft-lvisbase_tf_model +[v2_l14_ens_tf]: https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/owl2-l14-1008-st-ngrams-ft-lvisbase-ens-cold-weight-04_tf_model + +| Model | LVIS AP | LVIS APr | Config | Size | JAX Checkpoint | tf.SavedModel | +|:---|:---:|:---:|:---:|:---:|:---:|:---:| +| OWLv1 CLIP ViT-B/32 | 19.3 | 16.9 | [clip_b32][v1_b32_config] | 583 MiB | [download][v1_b32_jax] | [downolad][v1_b32_tf] | +| OWLv1 CLIP ViT-B/16 | 20.8 | 17.1 | [clip_b16][v1_b16_config] | 581 MiB | [download][v1_b16_jax] | [downolad][v1_b16_tf] | +| OWLv1 CLIP ViT-L/14 | 34.6 | 31.2 | [clip_l14][v1_l14_config] | 1652 MiB | [download][v1_l14_jax] | [downolad][v1_l14_tf] | +| OWLv1 CLIP ViT-L/14 (+masks) | 34.6 | 31.2 | [clip_l14_with_masks][v1_l14m_config] | 1844 MiB | [download][v1_l14m_jax] | | +| OWLv2 CLIP B/16 ST | 26.5 | 29.5 | [owl_v2_clip_b16][v2_b16_config] | 590 MiB | [download][v2_b16_st_jax] | [download][v2_b16_st_tf] | +| OWLv2 CLIP B/16 ST+FT | 41.4 | 36.2 | [owl_v2_clip_b16][v2_b16_config] | 590 MiB | [download][v2_b16_st_ft_jax] | [download][v2_b16_st_ft_tf] | +| OWLv2 CLIP B/16 ST/FT ens | 43.9 | 40.5 | [owl_v2_clip_b16][v2_b16_config] | 590 MiB | [download][v2_b16_ens_jax] | [download][v2_b16_ens_tf] | +| OWLv2 CLIP L/14 ST | 32.8 | 34.6 | [owl_v2_clip_l14][v2_l14_config] | 1666 MiB | [download][v2_l14_st_jax] | [download][v2_l14_st_tf] | +| OWLv2 CLIP L/14 ST+FT | 48.8 | 44.0 | [owl_v2_clip_l14][v2_l14_config] | 1666 MiB | [download][v2_l14_st_ft_jax] | [download][v2_l14_st_ft_tf] | +| OWLv2 CLIP L/14 ST/FT ens | 44.6 | 42.6 | [owl_v2_clip_l14][v2_l14_config] | 1666 MiB | [download][v2_l14_ens_jax] | [download][v2_l14_ens_tf] | + +The LVIS metrics were obtained with the [evaluator script](https://github.com/google-research/scenic/blob/main/scenic/projects/owl_vit/evaluator.py) and may differ slightly from the paper values. + +## Colabs + +### Minimal example +The [Minimal Colab] shows all steps necessary for running inference, including installing Scenic, instantiating a model, loading a checkpoint, preprocessing input images, getting predictions, and visualizing them. + +### Inference Playground +The [Playground Colab] allows interactive exploration of the model. It supports both text-conditioned (open-vocabulary) and image-conditioned (one-shot) prediction: + +OWL-ViT text inference demo +OWL-ViT image inference demo + +### Conversion to TensorFlow +OWL-ViT models can be converted to TensorFlow using the [`tf.saved_model`](https://www.tensorflow.org/guide/saved_model) API. The [Export Colab](https://colab.research.google.com/github/google-research/scenic/blob/main/scenic/projects/owl_vit/notebooks/OWL_ViT_Export_JAX_model_to_TensorFlow_SavedModel.ipynb) shows how to do this. For the public checkpoints, we provide `tf.SavedModel`s above (see [Pretrained checkpoints](#pretrained-checkpoints)). + +## Installation + +The code has been tested on Debian 4.19 and Python 3.7. For information on how to install JAX with GPU support, see [here](https://github.com/jax-ml/jax#installation). + +```shell +git clone https://github.com/google-research/scenic.git +cd ~/scenic +python -m pip install -vq . +python -m pip install -r scenic/projects/owl_vit/requirements.txt + +# For GPU support: +pip install --upgrade "jax[cuda]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html +``` + +## Training + +### Detection training +To train an OWL-ViT model with a CLIP-initialized backbone on detection, use: + +```shell +python -m scenic.projects.owl_vit.main \ + --alsologtostderr=true \ + --workdir=/tmp/training \ + --config=scenic/projects/owl_vit/configs/clip_b32.py +``` + +Local TFDS data dirs can be specified like this: + +```shell +python -m scenic.projects.owl_vit.main \ + --alsologtostderr=true \ + --workdir=/tmp/training \ + --config=scenic/projects/owl_vit/configs/clip_b32.py \ + --config.dataset_configs.train.decoder_kwarg_list='({"tfds_data_dir": "//your/data/dir"},)' \ + --config.dataset_configs.eval.decoder_kwarg_list='({"tfds_data_dir": "//your/data/dir"},)' +``` + +### Fine-tuning +To fine-tune a previously trained OWL-ViT model on your dataset of interest, use: + +```shell +python -m scenic.projects.owl_vit.main \ + --alsologtostderr=true \ + --workdir=/tmp/training \ + --config=scenic/projects/owl_vit/configs/clip_b32_finetune.py +``` + +> NOTE: This config is just a starting point. Hyperparameters (especially learning rate and number of training steps, but also preprocessing, mosaics, and others) need to be tuned for each target dataset. + +Adjust `config.dataset_configs.train.tfds_names` and related settings to your dataset of interest. You may have to write decoding ops similar to [`DecodeLvis`](https://github.com/google-research/scenic/blob/93fd069d969b3a3820b3b0b63f73fcff32dda093/scenic/projects/owl_vit/preprocessing/label_ops.py#L453) for your dataset. [`DecodeCocoExample`](https://github.com/google-research/scenic/blob/93fd069d969b3a3820b3b0b63f73fcff32dda093/scenic/projects/owl_vit/preprocessing/image_ops.py#L647) may be a good starting point. Make sure to handle negative examples correctly, e.g. by adding all classes that have no boxes in an image to the `MODALITIES.negative_text_labels` key of the feature dict for that image. (for non-federated datasets such as COCO). + +## Evaluation +Since LVIS evaluation is slow, it is not included in the training loop. Model checkpoints can be evaluated as needed using a separate command. + +For example, to evaluate the public B/32 checkpoint on LVIS, run: + +``` +python -m scenic.projects.owl_vit.evaluator \ + --alsologtostderr=true \ + --platform=gpu \ + --config=scenic/projects/owl_vit/configs/clip_b32.py \ + --checkpoint_path=gs://scenic-bucket/owl_vit/checkpoints/clip_vit_b32_b0203fc \ + --annotations_path=${HOME}/annotations/lvis_v1_val.json \ + --tfds_data_dir=//your/data/dir \ + --output_dir=/tmp/evaluator +``` + +## Inference speed + +OWL-ViT is highly efficient and can be used for **real-time detection** (depending on image resolution and accelerator hardware). + +Inference speed is dominated by the image and text encoders. The detection heads only add a small overhead. If text embeddings can be pre-computed, inference speed is therefore nearly equivalent to standard Vision Transformers. + +To trade off accuracy and speed, the image size can be changed at inference time to match your latency requirements. The only resolution-specific parameters in the model are the position embeddings. To support variable inference resolution, we simply truncate the position embedding grid at the bottom/right (only resolutions equal to or less than the training resolution are supported). Detection accuracy is robust to image size because OWL-ViT v2 is trained with heavy size augmentation. + +The plot below shows inference speed vs. accuracy for OWLv2 CLIP models fine-tuned on Objects365 and Visual Genome. For comparability to the literature, these checkpoints were not fine-tuned on LVIS. Also, these checkpoints were trained without random prompting and evaluated without prompt ensembling (the models are queried only with the class name, without `'a photo of a {}'`). Model checkpoints used for this plot: [OWLv2-ST+FT(O365+VG) CLIP B/16](https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/owl2-b16-960-st-ngrams-ft-o365vg_925e87d) and [OWLv2-ST+FT(O365+VG) CLIP L/14](https://storage.googleapis.com/scenic-bucket/owl_vit/checkpoints/owl2-l14-1008-st-ngrams-ft-o365vg_ea5f719). Speed benchmarking code is provided in the [Minimal Colab]. For these tests, text embeddings are pre-computed. + +OWLv2 inference speed + +## License +Both the code and the model checkpoints are licensed under the [Apache 2.0 license](https://github.com/google-research/scenic/blob/main/LICENSE). + +## References +If you use OWL-ViT, please cite the papers as appropriate: + +### OWL-ViT v1 +``` +@article{minderer2022simple, + title={Simple Open-Vocabulary Object Detection with Vision Transformers}, + author={Matthias Minderer, Alexey Gritsenko, Austin Stone, Maxim Neumann, Dirk Weissenborn, Alexey Dosovitskiy, Aravindh Mahendran, Anurag Arnab, Mostafa Dehghani, Zhuoran Shen, Xiao Wang, Xiaohua Zhai, Thomas Kipf, Neil Houlsby}, + journal={ECCV}, + year={2022}, +} +``` + +### OWL-ViT v2 +``` +@article{minderer2023scaling, + title={Scaling Open-Vocabulary Object Detection}, + author={Matthias Minderer, Alexey Gritsenko, Neil Houlsby}, + journal={NeurIPS}, + year={2023}, +} +``` diff --git a/scenic/projects/owl_vit/__init__.py b/scenic/projects/owl_vit/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/owl_vit/__pycache__/__init__.cpython-310.pyc b/scenic/projects/owl_vit/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c2db909cce392c8fe97a63523af11c30a3f19b6 Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/__init__.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/__pycache__/__init__.cpython-311.pyc b/scenic/projects/owl_vit/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3b3ba1129a961c708060e5efeea407fe950853a Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/__init__.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/__pycache__/__init__.cpython-312.pyc b/scenic/projects/owl_vit/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0186eb6dfe116b2005c9abd50699957795aa02be Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/__init__.cpython-312.pyc differ diff --git a/scenic/projects/owl_vit/__pycache__/layers.cpython-310.pyc b/scenic/projects/owl_vit/__pycache__/layers.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..77fe39b6b9e51760b1c9a30789db57d2aae26de3 Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/layers.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/__pycache__/layers.cpython-311.pyc b/scenic/projects/owl_vit/__pycache__/layers.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e79883e0e1e8a6ed6bd2044195a2b7e9033caee1 Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/layers.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/__pycache__/layers.cpython-312.pyc b/scenic/projects/owl_vit/__pycache__/layers.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d9515dacd00bdf984c81146ba229fae186a05178 Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/layers.cpython-312.pyc differ diff --git a/scenic/projects/owl_vit/__pycache__/losses.cpython-310.pyc b/scenic/projects/owl_vit/__pycache__/losses.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9264cc26640a32b9c9a54bd26523e2def233f89 Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/losses.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/__pycache__/losses.cpython-311.pyc b/scenic/projects/owl_vit/__pycache__/losses.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d755477f75d2d2b5d833c90a407d271bad297ef5 Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/losses.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/__pycache__/matching_base_models.cpython-310.pyc b/scenic/projects/owl_vit/__pycache__/matching_base_models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..55d4bf5b4890d42890dea6b8e4562ffb4ac9cdf8 Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/matching_base_models.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/__pycache__/matching_base_models.cpython-311.pyc b/scenic/projects/owl_vit/__pycache__/matching_base_models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..65d4d0b073ef0b13cb9453eb08655de3fad8f41c Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/matching_base_models.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/__pycache__/matching_base_models.cpython-312.pyc b/scenic/projects/owl_vit/__pycache__/matching_base_models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..87b97d79865230b7e18bfaa1dc6a037c8d4bc7ee Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/matching_base_models.cpython-312.pyc differ diff --git a/scenic/projects/owl_vit/__pycache__/models.cpython-310.pyc b/scenic/projects/owl_vit/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7f5ca985de201bc13271d30815908d3b10eedfd9 Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/models.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/__pycache__/models.cpython-311.pyc b/scenic/projects/owl_vit/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a14784e25f56a45a4078a4547bee4c00c45a8c26 Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/models.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/__pycache__/models.cpython-312.pyc b/scenic/projects/owl_vit/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ffb2443b71368ed5428789bfd26ec7a1995972e Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/models.cpython-312.pyc differ diff --git a/scenic/projects/owl_vit/__pycache__/utils.cpython-310.pyc b/scenic/projects/owl_vit/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a015c336939a8b65d3ca60ddc830bf19b80c5bfe Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/utils.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/__pycache__/utils.cpython-311.pyc b/scenic/projects/owl_vit/__pycache__/utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..65de35b69d4edeecb0631bfd5429b9dbc3146bf7 Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/utils.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/__pycache__/utils.cpython-312.pyc b/scenic/projects/owl_vit/__pycache__/utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..39aa3da9ca2134734528545152d087e00b307239 Binary files /dev/null and b/scenic/projects/owl_vit/__pycache__/utils.cpython-312.pyc differ diff --git a/scenic/projects/owl_vit/clip/__init__.py b/scenic/projects/owl_vit/clip/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/owl_vit/clip/__pycache__/__init__.cpython-310.pyc b/scenic/projects/owl_vit/clip/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ceb2b84014c836fe06e4b935b36f9ee1d3de04a5 Binary files /dev/null and b/scenic/projects/owl_vit/clip/__pycache__/__init__.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/clip/__pycache__/__init__.cpython-311.pyc b/scenic/projects/owl_vit/clip/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ca825fc1d3518c6094fbb3ba78cd9a71076fa5af Binary files /dev/null and b/scenic/projects/owl_vit/clip/__pycache__/__init__.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/clip/__pycache__/__init__.cpython-312.pyc b/scenic/projects/owl_vit/clip/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6b2ee1bb807239b61b387051720007c3f61c1b1a Binary files /dev/null and b/scenic/projects/owl_vit/clip/__pycache__/__init__.cpython-312.pyc differ diff --git a/scenic/projects/owl_vit/clip/__pycache__/layers.cpython-310.pyc b/scenic/projects/owl_vit/clip/__pycache__/layers.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ece1702c530da665880ec998f25f2459d667438 Binary files /dev/null and b/scenic/projects/owl_vit/clip/__pycache__/layers.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/clip/__pycache__/layers.cpython-311.pyc b/scenic/projects/owl_vit/clip/__pycache__/layers.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb550e53b46af7241d85c2db1ed302dc419464e1 Binary files /dev/null and b/scenic/projects/owl_vit/clip/__pycache__/layers.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/clip/__pycache__/layers.cpython-312.pyc b/scenic/projects/owl_vit/clip/__pycache__/layers.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9493e6a7a3b1e08fe001e8cba7917c1e3ecb0634 Binary files /dev/null and b/scenic/projects/owl_vit/clip/__pycache__/layers.cpython-312.pyc differ diff --git a/scenic/projects/owl_vit/clip/__pycache__/model.cpython-310.pyc b/scenic/projects/owl_vit/clip/__pycache__/model.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a5b2c85e6ed854c1b175d5c4a4ceb80abef8f2d Binary files /dev/null and b/scenic/projects/owl_vit/clip/__pycache__/model.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/clip/__pycache__/model.cpython-311.pyc b/scenic/projects/owl_vit/clip/__pycache__/model.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e7f8881aa6a1ff27156a0b3facd5e0646c21b82 Binary files /dev/null and b/scenic/projects/owl_vit/clip/__pycache__/model.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/clip/__pycache__/model.cpython-312.pyc b/scenic/projects/owl_vit/clip/__pycache__/model.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..695359201030c0b4393369b718932defe715c2d3 Binary files /dev/null and b/scenic/projects/owl_vit/clip/__pycache__/model.cpython-312.pyc differ diff --git a/scenic/projects/owl_vit/clip/__pycache__/tokenizer.cpython-310.pyc b/scenic/projects/owl_vit/clip/__pycache__/tokenizer.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6de773e64bf5d7c19466e45186b63555e876c0a3 Binary files /dev/null and b/scenic/projects/owl_vit/clip/__pycache__/tokenizer.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/clip/__pycache__/tokenizer.cpython-311.pyc b/scenic/projects/owl_vit/clip/__pycache__/tokenizer.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bdcd6c06049303f732f0340af38e610ef53fc23d Binary files /dev/null and b/scenic/projects/owl_vit/clip/__pycache__/tokenizer.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/clip/layers.py b/scenic/projects/owl_vit/clip/layers.py new file mode 100644 index 0000000000000000000000000000000000000000..1e510e9500d206f06b1ea730c0f0a8609b9b2472 --- /dev/null +++ b/scenic/projects/owl_vit/clip/layers.py @@ -0,0 +1,549 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""OpenAI's CLIP models in Flax. + +The implementation is based on an initial port of code in +https://github.com/openai/CLIP to JAX, by pooleb@google.com. + +Forked for from projects/baselines/clip into ViT+ to add stochastic depth +support. +""" + +import functools +from typing import Optional, Sequence, Tuple, Union + +from absl import logging +import flax.linen as nn +import jax +import jax.numpy as jnp + +# TODO(scenic): Make initialization of all layers identical to official one. +# Note: this doesn't matter for loading pretrained models. + +# Match PyTorch default LayerNorm epsilon of 1e-5 (FLAX defaults to 1e-6). +LayerNorm = functools.partial(nn.LayerNorm, epsilon=1e-5) + + +def quick_gelu(x: jnp.ndarray) -> jnp.ndarray: + return x * jax.nn.sigmoid(1.702 * x) + + +class Shortcut(nn.Module): + """Shortcut in ResNet. + + Attributes: + features: Number of features. + stride: Stride of the down-sampled output. + """ + features: int + stride: int + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + x = nn.avg_pool(x, (self.stride, self.stride), (self.stride, self.stride)) + x = nn.Conv( + self.features, (1, 1), strides=(1, 1), use_bias=False, name='0')(x) + x = nn.BatchNorm(use_running_average=True, name='1')(x) + return x + + +class Bottleneck(nn.Module): + """Bottleneck layer of ResNet. + + Attributes: + features: Number of features. + stride: Stride of the down-sampled output. + expansion: Expansion of feature dimension. + """ + features: int + stride: int = 1 + expansion: int = 4 + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + conv1 = nn.Conv(self.features, (1, 1), use_bias=False, name='conv1') + bn1 = nn.BatchNorm(use_running_average=True, name='bn1') + + conv2 = nn.Conv(self.features, (3, 3), padding=[(1, 1), (1, 1)], + use_bias=False, name='conv2') + bn2 = nn.BatchNorm(use_running_average=True, name='bn2') + + conv3 = nn.Conv( + self.features * self.expansion, (1, 1), use_bias=False, name='conv3') + bn3 = nn.BatchNorm(use_running_average=True, name='bn3') + + out = nn.relu(bn1(conv1(x))) + out = nn.relu(bn2(conv2(out))) + out = nn.avg_pool(out, (self.stride, self.stride), + (self.stride, self.stride)) + out = bn3(conv3(out)) + + downsample = ( + self.stride > 1 or x.shape[-1] != self.features * self.expansion + ) + if downsample: + x = Shortcut(features=self.features * self.expansion, + stride=self.stride, name='downsample')(x) + + out += x + out = nn.relu(out) + return out + + +class AttentionPool(nn.Module): + """Attention pooling layer. + + Attributes: + num_heads: Number of heads. + features: Number of features. + """ + num_heads: int + features: Optional[int] = None + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + x = x.reshape(x.shape[0], -1, x.shape[3]) + + x = jnp.concatenate([x.mean(axis=1, keepdims=True), x], axis=1) + + positional_embedding = self.param( + 'positional_embedding', + jax.nn.initializers.normal(1. / x.shape[-1]**0.5), + (x.shape[1], x.shape[2])) + attn = nn.MultiHeadDotProductAttention( + self.num_heads, + qkv_features=x.shape[-1], + use_bias=True, + out_features=self.features, + name='attn') + + x = x + positional_embedding[jnp.newaxis].astype(x.dtype) + x = attn(x[:, :1], x) + return x[:, 0] + + +class ResNetStage(nn.Module): + """Attention pooling layer. + + Attributes: + features: Number of features. + num_layers: Number of bottleneck blocks. + stride: Stride in the Bottleneck module. + """ + features: int + num_layers: int + stride: int = 1 + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + x = Bottleneck(self.features, self.stride, name='0')(x) + for i in range(1, self.num_layers): + x = Bottleneck(self.features, name=str(i))(x) + return x + + +class ModifiedResNet(nn.Module): + """A ResNet class that is similar to torchvision's with changes. + + - There are now 3 "stem" convolutions as opposed to 1, with an average pool + instead of a max pool. + - Performs anti-aliasing strided convolutions, where an avgpool is + prepended to convolutions with stride > 1 - The final pooling layer is a + QKV attention instead of an average pool. + + Attributes: + features: Number of features. + out_features: Number of output features. If None, return resnet feature-map. + num_layers: Number of layers for each block. + num_heads: Number of heads. + """ + features: int + out_features: Optional[int] + num_layers: Sequence[int] + num_heads: Optional[int] + + def setup(self): + # The 3-layer stem. + self.conv1 = nn.Conv( + self.features // 2, + kernel_size=(3, 3), + strides=(2, 2), + padding=[(1, 1), (1, 1)], + use_bias=False, + name='conv1') + self.bn1 = nn.BatchNorm(use_running_average=True, name='bn1') + self.conv2 = nn.Conv( + self.features // 2, + kernel_size=(3, 3), + padding=[(1, 1), (1, 1)], + use_bias=False, + name='conv2') + self.bn2 = nn.BatchNorm(use_running_average=True, name='bn2') + self.conv3 = nn.Conv( + self.features, + kernel_size=(3, 3), + padding=[(1, 1), (1, 1)], + use_bias=False, + name='conv3') + self.bn3 = nn.BatchNorm(use_running_average=True, name='bn3') + + # Residual layers. + self.layer1 = ResNetStage(self.features, self.num_layers[0], name='layer1') + self.layer2 = ResNetStage( + self.features * 2, self.num_layers[1], stride=2, name='layer2') + self.layer3 = ResNetStage( + self.features * 4, self.num_layers[2], stride=2, name='layer3') + self.layer4 = ResNetStage( + self.features * 8, self.num_layers[3], stride=2, name='layer4') + if self.out_features is not None: + self.attnpool = AttentionPool( + self.num_heads, self.out_features, name='attnpool') + + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + + def stem(x): + for conv, bn in [(self.conv1, self.bn1), (self.conv2, self.bn2), + (self.conv3, self.bn3)]: + x = nn.relu(bn(conv(x))) + x = nn.avg_pool(x, (2, 2), (2, 2)) + return x + + x = stem(x) + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = feature_map = self.layer4(x) + + if self.out_features is not None: + x = self.attnpool(x) + + return x, feature_map # pytype: disable=bad-return-type # jax-ndarray + + +class MLP(nn.Module): + """Simple MLP for Transformer.""" + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + ch = x.shape[-1] + x = nn.Dense(4 * ch, name='c_fc')(x) + x = quick_gelu(x) + x = nn.Dense(ch, name='c_proj')(x) + return x + + +class ResidualAttentionBlock(nn.Module): + """Self-attention block of Transformer. + + Attributes: + num_heads: Number of heads. + droplayer_p: Layer drop probability. + """ + num_heads: int + droplayer_p: float = 0.0 + + def get_drop_pattern(self, x, deterministic): + """Get drop pattern for drop layer.""" + if not deterministic and self.droplayer_p: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + return jax.random.bernoulli( + self.make_rng('dropout'), self.droplayer_p, shape).astype('float32') + else: + return 0.0 + + @nn.compact + def __call__( + self, + x: jnp.ndarray, + attn_mask: Optional[jnp.ndarray] = None, + *, + deterministic: bool = True) -> jnp.ndarray: + xn = LayerNorm(name='ln_0')(x) + y = nn.SelfAttention( + self.num_heads, name='attn', deterministic=deterministic)(xn, attn_mask) + + # Droplayer. + drop_pattern = self.get_drop_pattern(y, deterministic) + x = y * (1.0 - drop_pattern) + x + + xn = LayerNorm(name='ln_1')(x) + y = MLP(name='mlp')(xn) + + # Droplayer. + drop_pattern = self.get_drop_pattern(x, deterministic) + x = y * (1.0 - drop_pattern) + x + return x + + +class Transformer(nn.Module): + """Transformer module. + + Attributes: + features: Number of features. + num_layers: Number of layers for each block. + num_heads: Number of heads. + stochastic_droplayer_rate: Stochastic depth droplayer rate. + """ + features: int + num_layers: int + num_heads: int + stochastic_droplayer_rate: float = 0.0 + + @nn.compact + def __call__(self, + x: jnp.ndarray, + attn_mask: Optional[jnp.ndarray] = None, + *, + deterministic: bool = True) -> jnp.ndarray: + for i in range(self.num_layers): + droplayer_p = ( + i / max(self.num_layers - 1, 1)) * self.stochastic_droplayer_rate + x = ResidualAttentionBlock( + num_heads=self.num_heads, + droplayer_p=droplayer_p, + name=f'resblocks_{i}', + )(x, attn_mask, deterministic=deterministic) + return x + + +class VisionTransformer(nn.Module): + """Vision Transformer. + + Attributes: + patch_size: The size of the patches to embed. + features: Number of features. + num_layers: Number of transformer blocks (self-attn + MLP). + num_heads: Number of attention heads. + out_features: Number of output features. If None, return transformer output. + stochastic_droplayer_rate: Stochastic depth rate. + posemb_grid_size: If unset (the default), the size of the position + embeddings is chosen based on the size of the input image. If set, + posemb_grid_size specifies the width of the 2D grid of patches + corresponding to the "native" posemb size of the model. If the input image + grid is smaller than posemb_grid_size, the posemb grid will be truncated + at the bottom right. This allows running inference at smaller resolutions + than the training resolution. + """ + patch_size: int + features: int + num_layers: int + num_heads: int + out_features: Optional[int] + stochastic_droplayer_rate: float = 0.0 + posemb_grid_size: Optional[int] = None + + @nn.compact + def __call__(self, + x: jnp.ndarray, + attn_mask: Optional[jnp.ndarray] = None, + *, + deterministic: bool = True) -> jnp.ndarray: + x = nn.Conv(self.features, + kernel_size=(self.patch_size, self.patch_size), + strides=(self.patch_size, self.patch_size), + use_bias=False, name='conv1')(x) + x = x.reshape(x.shape[0], -1, x.shape[-1]) + scale = 1.0 / jnp.sqrt(self.features) + class_embedding = self.param('class_embedding', + jax.nn.initializers.normal(stddev=scale), + (self.features,)) + x = jnp.concatenate((jnp.tile(class_embedding[None, None, :], + (x.shape[0], 1, 1)), x), + axis=1) + + posemb_size = ( + self.posemb_grid_size**2 + 1 if self.posemb_grid_size else x.shape[1] + ) + + posemb = self.param( + 'positional_embedding', + jax.nn.initializers.normal(stddev=scale), + (posemb_size, self.features), + ) + + # If posemb_grid_size differs from the image grid size, we truncate the + # position embeddings to match the input image. We use the top left area, + # which matches how we pad images. + if self.posemb_grid_size: + native_size = self.posemb_grid_size + img_size = int((x.shape[1] - 1) ** 0.5) + if img_size != native_size: + assert img_size**2 == (x.shape[1] - 1), f'Not square: {x.shape}.' + logging.info('Truncating posemb from %s to %s.', native_size, img_size) + posemb2d = posemb[1:, :].reshape(native_size, native_size, -1) + posemb2d_trunc = posemb2d[:img_size, :img_size, :] + posemb_trunc = posemb2d_trunc.reshape(-1, self.features) + posemb = jnp.concatenate((posemb[:1, :], posemb_trunc), axis=0) + + x = x + posemb[None] + + x = LayerNorm(name='ln_pre')(x) + x = feature_map = Transformer( + features=self.features, + num_layers=self.num_layers, + num_heads=self.num_heads, + stochastic_droplayer_rate=self.stochastic_droplayer_rate, + name='transformer')( + x, + deterministic=deterministic) + + if self.out_features is not None: + x = LayerNorm(name='ln_post')(x[:, 0]) + x = nn.Dense(self.out_features, use_bias=False, name='proj')(x) + else: + x = LayerNorm(name='ln_post')(x) + + return x, feature_map # pytype: disable=bad-return-type # jax-ndarray + + +class TextEncoder(nn.Module): + """Text Transformer. + + Attributes: + vocab_size: Size of the vocabulary. + features: Number of features. + num_layers: Number of transformer blocks (self-attn + MLP). + num_heads: Number of attention heads. + out_features: Size of the final text embedding. + """ + vocab_size: int + features: int + num_layers: int + num_heads: int + out_features: int + stochastic_droplayer_rate: float = 0.0 + + @nn.compact + def __call__( + self, text: jnp.ndarray, *, deterministic: bool = True) -> jnp.ndarray: + positional_embedding = self.param('positional_embedding', + jax.nn.initializers.zeros, + (text.shape[1], self.features)) + mask = nn.combine_masks( + nn.make_attention_mask(text > 0, text > 0), nn.make_causal_mask(text)) + x = nn.Embed(self.vocab_size, self.features, name='token_embedding')(text) + x = x + positional_embedding[None] + x = Transformer( + self.features, + self.num_layers, + self.num_heads, + stochastic_droplayer_rate=self.stochastic_droplayer_rate, + name='transformer')( + x, + attn_mask=mask, + deterministic=deterministic) + x = LayerNorm(name='ln_final')(x) + x = x[jnp.arange(x.shape[0]), text.argmax(-1)] + x = nn.Dense(self.out_features, use_bias=False, name='text_projection')(x) + return x + + +class CLIP(nn.Module): + """Clip model consisting of a vision and text transformer. + + Attributes: + vocab_size: Size of the vocabulary. + embed_dim: Size of the text and vision embeddings. + text_features: Number of features in text transformer. + text_num_layers: Number of text transformer blocks (self-attn + MLP). + text_num_heads: Number of heads in text transformer. + vision_features: Number of features in vision transformer. + vision_num_layers: Number of vision transformer blocks (self-attn + MLP). + vision_patch_size: Size of patches to embed in vision transformer. + vision_native_grid_size: If unset (the default), the size of the position + embeddings is chosen based on the size of the input image. If set, + posemb_grid_size specifies the width of the 2D grid of patches + corresponding to the "native" posemb size of the model. If the input image + grid is smaller than posemb_grid_size, the posemb grid will be truncated + at the bottom right. This allows running inference at smaller resolutions + than the training resolution. + """ + vocab_size: int + embed_dim: int + # Text. + text_features: int + text_num_layers: int + text_num_heads: int + # Vision. + vision_features: int + vision_num_layers: Union[int, Sequence[int]] + vision_patch_size: Optional[int] = None + vision_return_map: bool = False + # Stochastic depth. + text_stochastic_droplayer_rate: float = 0.0 + vision_stochastic_droplayer_rate: float = 0.0 + vision_native_grid_size: Optional[int] = None + + def setup(self): + if isinstance(self.vision_num_layers, (tuple, list)): + self.vision_num_heads = self.vision_features * 32 // 64 + if self.vision_stochastic_droplayer_rate > 0.0: + raise ValueError('ResNet backbone does not support stochastic depth.') + self.visual = ModifiedResNet( + num_layers=self.vision_num_layers, + features=self.vision_features, + num_heads=self.vision_num_heads, + out_features=None if self.vision_return_map else self.embed_dim) + else: + self.vision_num_heads = self.vision_features // 64 + self.visual = VisionTransformer( + patch_size=self.vision_patch_size, + features=self.vision_features, + num_layers=self.vision_num_layers, + num_heads=self.vision_num_heads, + out_features=None if self.vision_return_map else self.embed_dim, + stochastic_droplayer_rate=self.vision_stochastic_droplayer_rate, + posemb_grid_size=self.vision_native_grid_size) + self.text = TextEncoder( + out_features=self.embed_dim, + vocab_size=self.vocab_size, + features=self.text_features, + num_layers=self.text_num_layers, + num_heads=self.text_num_heads, + stochastic_droplayer_rate=self.text_stochastic_droplayer_rate) + self.logit_scale = self.param('logit_scale', jax.nn.initializers.zeros, ()) + + def encode_image(self, + image: jnp.ndarray, + normalize: bool = True, + *, + deterministic: bool = True) -> jnp.ndarray: + x = self.visual(image, deterministic=deterministic)[0] + if normalize: + x /= jnp.linalg.norm(x, axis=-1, keepdims=True) + return x + + def encode_text(self, + text: jnp.ndarray, + normalize: bool = True, + *, + deterministic: bool = True) -> jnp.ndarray: + x = self.text(text, deterministic=deterministic) + if normalize: + x /= jnp.linalg.norm(x, axis=-1, keepdims=True) + return x + + def __call__(self, + image: jnp.ndarray, + text: jnp.ndarray, + normalize: bool = True, + *, + deterministic: bool = True) -> Tuple[jnp.ndarray, jnp.ndarray]: + x = y = None + if image is not None: + x = self.encode_image(image, normalize, deterministic=deterministic) + if text is not None: + y = self.encode_text(text, normalize, deterministic=deterministic) + return x, y diff --git a/scenic/projects/owl_vit/clip/model.py b/scenic/projects/owl_vit/clip/model.py new file mode 100644 index 0000000000000000000000000000000000000000..2a5dfcabbda52194fd702831dc9a876d2b1a55f4 --- /dev/null +++ b/scenic/projects/owl_vit/clip/model.py @@ -0,0 +1,403 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Provides builders and loaders of CLIP checkpoints.""" + +import os +from typing import Any, Mapping, Optional + +from absl import logging +import flax +import jax +import jax.numpy as jnp +import numpy as np +from scenic.projects.owl_vit.clip import layers +from scenic.projects.baselines.clip import download + +from tensorflow.io import gfile + +# JAX team is working type checking for pytrees: +# https://github.com/jax-ml/jax/issues/3340 +PyTree = Any + +# pylint: disable=line-too-long +# Checkpoint paths from https://github.com/openai/CLIP/blob/main/clip/clip.py#L30 +CHECKPOINTS_TORCH = { + 'resnet_50': 'https://openaipublic.azureedge.net/clip/models/afeb0e10f9e5a86da6080e35cf09123aca3b358a0c3e3b6c78a7b63bc04b6762/RN50.pt', + 'resnet_101': 'https://openaipublic.azureedge.net/clip/models/8fa8567bab74a42d41c5915025a8e4538c3bdbe8804a470a72f30b0d94fab599/RN101.pt', + 'resnet_50x4': 'https://openaipublic.azureedge.net/clip/models/7e526bd135e493cef0776de27d5f42653e6b4c8bf9e0f653bb11773263205fdd/RN50x4.pt', + 'resnet_50x16': 'https://openaipublic.azureedge.net/clip/models/52378b407f34354e150460fe41077663dd5b39c54cd0bfd2b27167a4a06ec9aa/RN50x16.pt', + 'resnet_50x64': 'https://openaipublic.azureedge.net/clip/models/be1cfb55d75a9666199fb2206c106743da0f6468c9d327f3e0d0a543a9919d9c/RN50x64.pt', + 'vit_b32': 'https://openaipublic.azureedge.net/clip/models/40d365715913c9da98579312b702a82c18be219cc2a73407c4526f58eba950af/ViT-B-32.pt', + 'vit_b16': 'https://openaipublic.azureedge.net/clip/models/5806e77cd80f8b59890b7e101eabd078d9fb84e6937f9e85e4ecb61988df416f/ViT-B-16.pt', + 'vit_l14': 'https://openaipublic.azureedge.net/clip/models/b8cca3fd41ae0c99ba7e8951adf17d267cdb84cd88be6f7c2e0eca1737a03836/ViT-L-14.pt', +} + +CHECKPOINTS = { + 'resnet_50': None, + 'resnet_101': None, + 'resnet_50x4': None, + 'resnet_50x16': None, + 'resnet_50x64': None, + 'vit_b32': None, + 'vit_b16': None, + 'vit_l14': None, +} +# pylint: enable=line-too-long + + +MAX_TEXT_LENGTH = 77 +IMAGE_RESOLUTION = { + 'resnet_50': 224, + 'resnet_101': 224, + 'resnet_50x4': 288, + 'resnet_50x16': 384, + 'resnet_50x64': 448, + 'vit_b32': 224, + 'vit_b16': 224, + 'vit_l14': 224 +} +IMAGE_MEAN = np.array([0.48145466, 0.4578275, 0.40821073]) +IMAGE_STD = np.array([0.26862954, 0.26130258, 0.27577711]) + +CONFIGS = { + 'vit_b32': dict(embed_dim=512, + vocab_size=49408, + vision_num_layers=12, + vision_features=768, + vision_patch_size=32, + text_features=512, + text_num_heads=8, + text_num_layers=12), + 'vit_b16': dict(embed_dim=512, + vocab_size=49408, + vision_num_layers=12, + vision_features=768, + vision_patch_size=16, + text_features=512, + text_num_heads=8, + text_num_layers=12), + 'vit_l14': dict(embed_dim=768, + vocab_size=49408, + vision_num_layers=24, + vision_features=1024, + vision_patch_size=14, + text_features=768, + text_num_heads=12, + text_num_layers=12), + 'resnet_50': dict(embed_dim=1024, + vocab_size=49408, + vision_num_layers=(3, 4, 6, 3), + vision_features=64, + text_features=512, + text_num_heads=8, + text_num_layers=12), + 'resnet_50x4': dict(embed_dim=640, + vocab_size=49408, + vision_num_layers=(4, 6, 10, 6), + vision_features=80, + text_features=640, + text_num_heads=10, + text_num_layers=12), + 'resnet_50x16': dict(embed_dim=768, + vocab_size=49408, + vision_num_layers=(6, 8, 18, 8), + vision_features=96, + text_features=768, + text_num_heads=12, + text_num_layers=12), + 'resnet_50x64': dict(embed_dim=1024, + vocab_size=49408, + vision_num_layers=(3, 15, 36, 10), + vision_features=128, + text_features=1024, + text_num_heads=16, + text_num_layers=12), + 'resnet_101': dict(embed_dim=512, + vocab_size=49408, + vision_num_layers=(3, 4, 23, 3), + vision_features=64, + text_features=512, + text_num_heads=8, + text_num_layers=12) +} + + +def load_model_vars( + model_name: str, + checkpoint_path: Optional[str] = None, + download_dir: str = download.DEFAULT_DOWNLOAD_DIR, +) -> PyTree: + """Load model variables from a checkpoint, downloading if necessary.""" + checkpoint_path = checkpoint_path or CHECKPOINTS.get(model_name) + if checkpoint_path is None: + checkpoint_path = os.path.join(download_dir, model_name + '.npy') + + if not gfile.exists(checkpoint_path): + # Download PyTorch checkpoint + url = CHECKPOINTS_TORCH.get(model_name) + logging.info('Downloading checkpoint from %s to %s', url, download_dir) + checkpoint_path_torch = download.download( + url, download_dir, expected_sha256=url.split('/')[-2]) + + # Load and convert checkpoint to numpy + logging.info('Converting checkpoint %s to numpy', checkpoint_path_torch) + try: + import torch + except ImportError as e: + logging.error('Could not import torch for CLIP checkpoint conversion') + params = torch.jit.load( + checkpoint_path_torch, map_location='cpu').state_dict() + params = jax.tree_util.tree_map(lambda p: p.cpu().numpy(), params) + + # Save converted checkpoint + with gfile.GFile(checkpoint_path, 'wb') as f: + np.save(f, params) + del params + gfile.remove(checkpoint_path_torch) + + with gfile.GFile(checkpoint_path, 'rb') as f: + np_params = np.load(f, allow_pickle=True).tolist() + return _convert_vars(np_params) + + +def vit_b32(): + return layers.CLIP(**CONFIGS['vit_b32']) + + +def vit_b16(): + return layers.CLIP(**CONFIGS['vit_b16']) + + +def vit_l14(): + return layers.CLIP(**CONFIGS['vit_l14']) + + +def resnet_50(): + return layers.CLIP(**CONFIGS['resnet_50']) + + +def resnet_50x4(): + return layers.CLIP(**CONFIGS['resnet_50x4']) + + +def resnet_50x16(): + return layers.CLIP(**CONFIGS['resnet_50x16']) + + +def resnet_50x64(): + return layers.CLIP(**CONFIGS['resnet_50x64']) + + +def resnet_101(): + return layers.CLIP(**CONFIGS['resnet_101']) + + +MODELS = { + 'resnet_50': resnet_50, + 'resnet_101': resnet_101, + 'resnet_50x4': resnet_50x4, + 'resnet_50x16': resnet_50x16, + 'resnet_50x64': resnet_50x64, + 'vit_b32': vit_b32, + 'vit_b16': vit_b16, + 'vit_l14': vit_l14, +} + + +def _convert_attn_layers(params: Mapping[str, np.ndarray], + dim_head: int = 64) -> PyTree: + """Convert attention parameters.""" + new_params = {} + processed_attn_layers = [] + for k, v in params.items(): + if 'attn.' in k: + base = k[:k.rindex('attn.')+5] + if base in processed_attn_layers: + continue + processed_attn_layers.append(base) + dim = params[base + 'out_proj.bias'].shape[-1] + heads = dim // dim_head + new_params[base + 'out.weight'] = params[ + base + 'out_proj.weight'].T.reshape(heads, dim_head, dim) + new_params[base + 'out.bias'] = params[base + 'out_proj.bias'] + qkv_bias = params[base + 'in_proj_bias'].reshape(3, heads, dim_head) + qkv_kernel = np.transpose(params[base + 'in_proj_weight'].reshape( + 3, heads, dim_head, dim), (0, 3, 1, 2)) + for i, kk in enumerate(('query', 'key', 'value')): + new_params[base + f'{kk}.bias'] = qkv_bias[i] + new_params[base + f'{kk}.weight'] = qkv_kernel[i] + else: + new_params[k] = v + return new_params + + +def _convert_vars(torch_vars: Mapping[str, np.ndarray], + dim_head: int = 64) -> PyTree: + """Convert torch parameters to flax parameters.""" + # Expand QKV dense input projection to separate Q, K, V projections + # and fix shape/transposing of attention layers. + torch_vars = _convert_attn_layers(torch_vars, dim_head) + flax_vars = {} + torch_vars.pop('context_length', None) + torch_vars.pop('input_resolution', None) + torch_vars.pop('vocab_size', None) + for torch_key, v in torch_vars.items(): + if 'num_batches_tracked' in torch_key: + continue + + if 'conv' in torch_key or 'downsample.0.weight' in torch_key: + v = v.transpose(2, 3, 1, 0) + elif 'weight' in torch_key and v.ndim == 2 and 'embedding' not in torch_key: + # Fully connected layers are transposed, embeddings are not + v = v.T + + jax_key = torch_key.replace('visual.proj', 'visual.proj.kernel') + jax_key = jax_key.replace('text_projection', 'text_projection.kernel') + if 'bn' in jax_key or 'ln' in jax_key or 'downsample.1' in jax_key: + jax_key = jax_key.replace('.weight', '.scale') + else: + jax_key = jax_key.replace('.weight', '.kernel') + if (jax_key.startswith('transformer') or + jax_key.startswith('text_projection') or + jax_key.startswith('ln_final') or + jax_key.startswith('positional_embedding')): + jax_key = 'text.' + jax_key + + jax_key = jax_key.replace( + 'token_embedding.kernel', 'text.token_embedding.embedding') + + jax_key = jax_key.replace('attnpool.k_proj', 'attnpool.attn.key') + jax_key = jax_key.replace('attnpool.q_proj', 'attnpool.attn.query') + jax_key = jax_key.replace('attnpool.v_proj', 'attnpool.attn.value') + jax_key = jax_key.replace('attnpool.c_proj', 'attnpool.attn.out') + if 'attnpool.attn.out' in jax_key: + if jax_key.endswith('kernel'): + v = v.reshape(-1, dim_head, v.shape[-1]) + elif 'attnpool.attn' in jax_key: + if jax_key.endswith('bias'): + v = v.reshape(-1, dim_head) + else: + v = v.reshape(v.shape[0], -1, dim_head) + + if jax_key.endswith('running_mean'): + jax_key = 'batch_stats.' + jax_key.replace('.running_mean', '.mean') + elif jax_key.endswith('running_var'): + jax_key = 'batch_stats.' + jax_key.replace('.running_var', '.var') + else: + jax_key = 'params.' + jax_key + + jax_key = jax_key.replace('.', '/') + jax_key = jax_key.replace('resblocks/', 'resblocks.') + jax_key = jax_key.replace('resblocks/', 'resblocks.') + + flax_vars[tuple(jax_key.split('/'))] = jnp.asarray(v) + + # Transform the flattened param dict to the original nested structure. + new_vars = flax.core.freeze(flax.traverse_util.unflatten_dict(flax_vars)) + return new_vars + + +def normalize_image(img: jnp.ndarray) -> jnp.ndarray: + return (img - IMAGE_MEAN) / IMAGE_STD + + +def unnormalize_image(x: jnp.ndarray) -> jnp.ndarray: + return x * IMAGE_STD + IMAGE_MEAN + + +# Class names and templates copied from: +# https://github.com/openai/CLIP/blob/main/notebooks/Prompt_Engineering_for_ImageNet.ipynb +PROMPTS = [ + 'a bad photo of a {}.', + 'a photo of many {}.', + 'a sculpture of a {}.', + 'a photo of the hard to see {}.', + 'a low resolution photo of the {}.', + 'a rendering of a {}.', + 'graffiti of a {}.', + 'a bad photo of the {}.', + 'a cropped photo of the {}.', + 'a tattoo of a {}.', + 'the embroidered {}.', + 'a photo of a hard to see {}.', + 'a bright photo of a {}.', + 'a photo of a clean {}.', + 'a photo of a dirty {}.', + 'a dark photo of the {}.', + 'a drawing of a {}.', + 'a photo of my {}.', + 'the plastic {}.', + 'a photo of the cool {}.', + 'a close-up photo of a {}.', + 'a black and white photo of the {}.', + 'a painting of the {}.', + 'a painting of a {}.', + 'a pixelated photo of the {}.', + 'a sculpture of the {}.', + 'a bright photo of the {}.', + 'a cropped photo of a {}.', + 'a plastic {}.', + 'a photo of the dirty {}.', + 'a jpeg corrupted photo of a {}.', + 'a blurry photo of the {}.', + 'a photo of the {}.', + 'a good photo of the {}.', + 'a rendering of the {}.', + 'a {} in a video game.', + 'a photo of one {}.', + 'a doodle of a {}.', + 'a close-up photo of the {}.', + 'a photo of a {}.', + 'the origami {}.', + 'the {} in a video game.', + 'a sketch of a {}.', + 'a doodle of the {}.', + 'a origami {}.', + 'a low resolution photo of a {}.', + 'the toy {}.', + 'a rendition of the {}.', + 'a photo of the clean {}.', + 'a photo of a large {}.', + 'a rendition of a {}.', + 'a photo of a nice {}.', + 'a photo of a weird {}.', + 'a blurry photo of a {}.', + 'a cartoon {}.', + 'art of a {}.', + 'a sketch of the {}.', + 'a embroidered {}.', + 'a pixelated photo of a {}.', + 'itap of the {}.', + 'a jpeg corrupted photo of the {}.', + 'a good photo of a {}.', + 'a plushie {}.', + 'a photo of the nice {}.', + 'a photo of the small {}.', + 'a photo of the weird {}.', + 'the cartoon {}.', + 'art of the {}.', + 'a drawing of the {}.', + 'a photo of the large {}.', + 'a black and white photo of a {}.', + 'the plushie {}.', + 'a dark photo of a {}.', + 'itap of a {}.', + 'graffiti of the {}.', + 'a toy {}.', + 'itap of my {}.', + 'a photo of a cool {}.', + 'a photo of a small {}.', + 'a tattoo of the {}.', +] diff --git a/scenic/projects/owl_vit/clip/tokenizer.py b/scenic/projects/owl_vit/clip/tokenizer.py new file mode 100644 index 0000000000000000000000000000000000000000..0bf8cf52b09a7e5b22bbaa380212dd4db70865e9 --- /dev/null +++ b/scenic/projects/owl_vit/clip/tokenizer.py @@ -0,0 +1,52 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Simple CLIP tokenizer wrapper.""" + +from absl import logging +import functools +from typing import List, Optional + +from clip import simple_tokenizer +from scenic.projects.baselines.clip import download + + +# pylint: disable=line-too-long +DEFAULT_BPE_PATH = None +DEFAULT_BPE_URL = 'https://github.com/openai/CLIP/blob/main/clip/bpe_simple_vocab_16e6.txt.gz?raw=true' +# pylint: enable=line-too-long + + +def tokenize(text: str, max_token_len: int = 77) -> List[int]: + tokenizer = build_tokenizer() + sot_token = tokenizer.encoder['<|startoftext|>'] + eot_token = tokenizer.encoder['<|endoftext|>'] + tokens = [sot_token] + tokenizer.encode(text) + [eot_token] + output = [0] * max_token_len + output[:min(max_token_len, len(tokens))] = tokens[:max_token_len] + return output + + +@functools.lru_cache(maxsize=1) +def build_tokenizer( + bpe_path: Optional[str] = DEFAULT_BPE_PATH, + bpe_url: str = DEFAULT_BPE_URL, + download_dir: str = download.DEFAULT_DOWNLOAD_DIR +) -> simple_tokenizer.SimpleTokenizer: + """Returns CLIP's tokenizer.""" + if bpe_path is None: + bpe_path = download.download(bpe_url, download_dir) + logging.info('Downloaded vocabulary from %s to %s', bpe_url, download_dir) + + return simple_tokenizer.SimpleTokenizer(bpe_path) diff --git a/scenic/projects/owl_vit/configs/__init__.py b/scenic/projects/owl_vit/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9dee80a8236f37291b9a79b36efa3b51dec4c5a7 --- /dev/null +++ b/scenic/projects/owl_vit/configs/__init__.py @@ -0,0 +1,26 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Module providing OWL-ViT configs.""" + +# OWL-ViT v1: +from scenic.projects.owl_vit.configs import clip_b16 +from scenic.projects.owl_vit.configs import clip_b32 +from scenic.projects.owl_vit.configs import clip_b32_finetune +from scenic.projects.owl_vit.configs import clip_l14 +from scenic.projects.owl_vit.configs import clip_l14_with_masks + +# OWL-ViT v2: +from scenic.projects.owl_vit.configs import owl_v2_clip_b16 +from scenic.projects.owl_vit.configs import owl_v2_clip_l14 diff --git a/scenic/projects/owl_vit/configs/__pycache__/__init__.cpython-310.pyc b/scenic/projects/owl_vit/configs/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e04cef9c3db70d3fb167b66c4b4952d26470df76 Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/__init__.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/__init__.cpython-311.pyc b/scenic/projects/owl_vit/configs/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..93452bd81f95e2de908f8b983c4afdee2b8efa7f Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/__init__.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/__init__.cpython-312.pyc b/scenic/projects/owl_vit/configs/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5d07093a796f94cbaec886bc046c7d7b44de6664 Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/__init__.cpython-312.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/clip_b16.cpython-310.pyc b/scenic/projects/owl_vit/configs/__pycache__/clip_b16.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a61035f760403a584a1b7827091369cc4d354c9 Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/clip_b16.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/clip_b16.cpython-311.pyc b/scenic/projects/owl_vit/configs/__pycache__/clip_b16.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..27f02adc0a08bfc91d60d9d72f64ee969649a28e Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/clip_b16.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/clip_b16.cpython-312.pyc b/scenic/projects/owl_vit/configs/__pycache__/clip_b16.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..64d09d625875eea25c41d9b7a0ebc009b736107e Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/clip_b16.cpython-312.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/clip_b32.cpython-310.pyc b/scenic/projects/owl_vit/configs/__pycache__/clip_b32.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..55070a699e9de49c25431894382f62a6052c1004 Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/clip_b32.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/clip_b32.cpython-311.pyc b/scenic/projects/owl_vit/configs/__pycache__/clip_b32.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..73bbf8b1a8500010b608cce4bfb4a28f12e05fa2 Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/clip_b32.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/clip_b32.cpython-312.pyc b/scenic/projects/owl_vit/configs/__pycache__/clip_b32.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c07b985f1fff468649fd3efbcd10ccbcea2eb99 Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/clip_b32.cpython-312.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/clip_b32_finetune.cpython-310.pyc b/scenic/projects/owl_vit/configs/__pycache__/clip_b32_finetune.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7cc0c7959e6e120b84f2899c26f719197df9f544 Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/clip_b32_finetune.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/clip_b32_finetune.cpython-311.pyc b/scenic/projects/owl_vit/configs/__pycache__/clip_b32_finetune.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6df52236e37f008ca539bde88098759480a35c02 Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/clip_b32_finetune.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/clip_b32_finetune.cpython-312.pyc b/scenic/projects/owl_vit/configs/__pycache__/clip_b32_finetune.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d2ee03eea51f0e3f60c4e7b14d809fdb72657fe5 Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/clip_b32_finetune.cpython-312.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/clip_l14.cpython-310.pyc b/scenic/projects/owl_vit/configs/__pycache__/clip_l14.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0bb8145f4a479558169921dfbb9cd1114eda51ad Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/clip_l14.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/clip_l14.cpython-311.pyc b/scenic/projects/owl_vit/configs/__pycache__/clip_l14.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..af4b419a7145d4dd324909f54666055ad4591724 Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/clip_l14.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/clip_l14.cpython-312.pyc b/scenic/projects/owl_vit/configs/__pycache__/clip_l14.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7546e68a9b268ae8e0d58b43c0951970fa8a192 Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/clip_l14.cpython-312.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/clip_l14_with_masks.cpython-310.pyc b/scenic/projects/owl_vit/configs/__pycache__/clip_l14_with_masks.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5bd72103dbe198515976933f59ae46ab1e108025 Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/clip_l14_with_masks.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/clip_l14_with_masks.cpython-311.pyc b/scenic/projects/owl_vit/configs/__pycache__/clip_l14_with_masks.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1fbc37cf04eb3fb89e43ee11bbc9ea588433757b Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/clip_l14_with_masks.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/clip_l14_with_masks.cpython-312.pyc b/scenic/projects/owl_vit/configs/__pycache__/clip_l14_with_masks.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7576483e77223e6ac176bc821e90d0eb94865bf2 Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/clip_l14_with_masks.cpython-312.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_b16.cpython-310.pyc b/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_b16.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8bbc3b4f9cd0ecc2eb40240bd4df10aeed04330f Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_b16.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_b16.cpython-311.pyc b/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_b16.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7646bf9ca75603b5bb5a26d4c010e7a95f12e444 Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_b16.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_b16.cpython-312.pyc b/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_b16.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0755e98134494f4b77fa36df88de80523d7a361 Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_b16.cpython-312.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_l14.cpython-310.pyc b/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_l14.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a6e5b3eb66fb1651eb8f139a005ce49a8e834d92 Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_l14.cpython-310.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_l14.cpython-311.pyc b/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_l14.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b80cf3cfea32e46a6b42d270ea1c7d4c41f0e4c Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_l14.cpython-311.pyc differ diff --git a/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_l14.cpython-312.pyc b/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_l14.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5fe62b4bc844adb4150ae6d1e920a33c54d9f3c Binary files /dev/null and b/scenic/projects/owl_vit/configs/__pycache__/owl_v2_clip_l14.cpython-312.pyc differ diff --git a/scenic/projects/owl_vit/configs/clip_b16.py b/scenic/projects/owl_vit/configs/clip_b16.py new file mode 100644 index 0000000000000000000000000000000000000000..736c19885160b6b611a91ed2611f31a3d3c04ef2 --- /dev/null +++ b/scenic/projects/owl_vit/configs/clip_b16.py @@ -0,0 +1,238 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""OWL v1 CLIP zero-shot text conditional detection training config. + +Run training: +python -m scenic.projects.owl_vit.main \ + --alsologtostderr=true \ + --workdir=/tmp/training \ + --config=scenic/projects/owl_vit/configs/clip_l14.py + +""" +import ml_collections + +CANONICAL_CHECKPOINT = 'gs://scenic-bucket/owl_vit/checkpoints/clip_vit_b16_6171dab' + +DETECTION_FEATURES = ('boxes', 'crowd', 'image', 'instance_labels', + 'instance_text_labels', 'negative_labels', + 'negative_text_labels', '_seed', 'seed') + + +def get_train_preproc_spec( + *, + input_size: int, + num_instances: int, + max_queries: int, + max_query_length: int = 16, + min_area_fraction: float = 0.0, + iou_threshold: float = 0.9): + """Constructs training preprocess string.""" + ops = ( + f'keep({DETECTION_FEATURES})' + f'|random_flip_left_right' + f'|random_crop(min_area_fraction={min_area_fraction})' + f'|resize_with_pad(size={input_size})' + f'|add_random_negative_labels(total_num_negatives=50)' + f'|canonicalize_text_labels' + f'|remove_forbidden_labels' + f'|crop_or_pad({input_size}, {num_instances})' + f'|crop_or_pad_meta_data({num_instances}, {num_instances})' + f'|add_random_prompts' + f'|remove_promptability_marker' + f'|single_to_multi_label(max_num_labels={num_instances})' + f'|merge_overlapping_instances(iou_threshold={iou_threshold})' + f'|add_query_set(lower=True, max_queries={max_queries},' + f' include_negatives=True)' + f'|clip_tokenize_queries(max_token_len={max_query_length})') + return ops + + +def get_eval_preproc_spec( + *, + input_size: int, + num_instances: int, + max_queries: int, + max_query_length: int = 16, + ): + """Constructs training preprocess string.""" + return ( + f'resize_with_pad(size={input_size})' + f'|canonicalize_text_labels' + f'|crop_or_pad({input_size}, {num_instances})' + f'|crop_or_pad_meta_data({num_instances}, {num_instances})' + f'|single_to_multi_label(max_num_labels={num_instances})' + f'|add_query_set(lower=True, max_queries={max_queries},' + f' include_negatives=True)' + f'|clip_tokenize_queries(max_token_len={max_query_length})') + + +def get_config(init_mode='train'): + """Returns the configuration for text-query-based detection using OWL-ViT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'owl_vit_detection' + + # Dataset. + config.dataset_name = 'owl_vit' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.input_size = 768 + config.dataset_configs.input_range = None + config.dataset_configs.num_instances = 100 + config.dataset_configs.max_queries = 100 + config.dataset_configs.max_query_length = 16 + config.dataset_configs.min_area_fraction = 0.6 + config.dataset_configs.iou_threshold = 0.9 + config.dataset_configs.add_random_negatives = True + config.dataset_configs.total_num_negatives = 50 + config.dataset_configs.prefetch_to_device = 2 + + # For best performance, the shuffle buffer should be large, e.g. 10_000, but + # this will require >50GB RAM. + config.dataset_configs.shuffle_buffer_size = 1_000 + + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.tfds_names = ['lvis'] + config.dataset_configs.train.splits = ['train'] + config.dataset_configs.train.dataset_probs = [1.0] + config.dataset_configs.train.decoder_kwarg_list = ({},) + config.dataset_configs.train.preproc_spec = get_train_preproc_spec( + input_size=config.dataset_configs.input_size, + num_instances=config.dataset_configs.num_instances, + max_queries=config.dataset_configs.num_instances, + max_query_length=config.dataset_configs.max_query_length, + min_area_fraction=config.dataset_configs.min_area_fraction) + # When using mosaics, use an input_size that is divisible by all mosaic_sizes. + config.dataset_configs.train.mosaic_sizes = (1, 2, 3) + config.dataset_configs.train.mosaic_probs = (.4, .3, .3) + + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.tfds_names = ['lvis'] + config.dataset_configs.eval.splits = ['validation'] + config.dataset_configs.eval.dataset_probs = [1.0] + config.dataset_configs.eval.decoder_kwarg_list = ({},) + config.dataset_configs.eval.preproc_spec = get_eval_preproc_spec( + input_size=config.dataset_configs.input_size, + num_instances=config.dataset_configs.num_instances, + max_queries=config.dataset_configs.num_instances, + max_query_length=config.dataset_configs.max_query_length) + + config.eval_top_k_preds = 300 # Only return the top-k predictions. + config.data_dtype_str = 'float32' + + # Model. + config.matcher = 'hungarian_cover_tpu' + + config.model = ml_collections.ConfigDict() + config.model.normalize = True + + config.model.body = ml_collections.ConfigDict() + config.model.body.type = 'clip' + config.model.body.variant = 'vit_b16' + config.model.body.merge_class_token = 'mul-ln' + config.model.box_bias = 'both' + + # CLIP stochastic depth. + config.model.body.text_stochastic_droplayer_rate = 0.1 + config.model.body.vision_stochastic_droplayer_rate = 0.2 + + # Loss. + config.bbox_loss_coef = 1.0 + config.giou_loss_coef = 1.0 + config.class_loss_coef = 1.0 + config.focal_loss = True + config.focal_gamma = 2.0 + config.focal_alpha = 0.3 + config.prior_prob = 0.01 # Prior prob of predicting not padding. + config.normalization = 'per_example' # 'per_example' or 'global'. + + # Training. + config.trainer_name = 'text_zero_shot_detection' + config.num_training_steps = 140_000 + config.batch_size = 256 + config.rng_seed = 0 + + # Image backbone + head training configuration. + sched = ml_collections.ConfigDict() + sched.re = '(?!backbone/clip/text/.*)(.*)' # Negative lookahead. + sched.lr_configs = ml_collections.ConfigDict({ # Learning rate. + 'learning_rate_schedule': 'compound', + 'factors': 'constant*linear_warmup*cosine_decay', + 'steps_per_cycle': config.num_training_steps, + 'total_steps': config.num_training_steps, + 'warmup_steps': 1000, # Necessary for higher LR and large batch size. + 'base_learning_rate': 5e-5, + }) + + # Text backbone training configuration. + sched_txt = ml_collections.ConfigDict() + sched_txt.re = '(backbone/clip/text/.*)' + sched_txt.lr_configs = ml_collections.ConfigDict({ + 'learning_rate_schedule': 'compound', + 'factors': 'constant*linear_warmup*cosine_decay', + 'steps_per_cycle': config.get_ref('num_training_steps'), + 'total_steps': config.get_ref('num_training_steps'), + 'warmup_steps': 1000, # Necessary for higher LR and large batch size. + 'base_learning_rate': 2e-6, + }) + + # Configure both learning rate schedules. + config.schedule = ml_collections.ConfigDict({ + 'img_heads': sched, + 'txt': sched_txt, + }) + + # *Single* optimizer. + optim = ml_collections.ConfigDict() + optim.optax_name = 'scale_by_adam' + optim.optax_configs = ml_collections.ConfigDict({ # Optimizer settings. + 'b1': 0.9, + 'b2': 0.999, + }) + + # Gradient clipping. + optim.max_grad_norm = 1.0 + optim.per_example_clipping = True + optim.optax_grad_pmean = True # For per-example gradients Optax calls pmean. + + # Explicit WD (not via an optimizer). + optim.weight_decay = 0.0 + optim.weight_decay_decouple = True + + config.optimizer = optim + + assert (optim.per_example_clipping or config.normalization != 'per_example' + 'Per example clipping only makes sense with local normalization') + + # Init. + config.init_from = ml_collections.ConfigDict() + if init_mode == 'train': + config.init_from.codebase = 'clip' + elif init_mode == 'canonical_checkpoint': + config.init_from.checkpoint_path = CANONICAL_CHECKPOINT + else: + raise ValueError('Unknown init_mode: {}'.format(init_mode)) + + # Logging. + config.xprof = True # Profile using xprof. + config.log_summary_steps = 100 # Train summary steps. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 2000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.log_eval_steps = 4000 + + return config + + diff --git a/scenic/projects/owl_vit/configs/clip_b32.py b/scenic/projects/owl_vit/configs/clip_b32.py new file mode 100644 index 0000000000000000000000000000000000000000..b696dd14f8fc26c869b996d77986c6357fa4400b --- /dev/null +++ b/scenic/projects/owl_vit/configs/clip_b32.py @@ -0,0 +1,241 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""OWL v1 CLIP zero-shot text conditional detection training config. + +Run training: +python -m scenic.projects.owl_vit.main \ + --alsologtostderr=true \ + --workdir=/tmp/training \ + --config=scenic/projects/owl_vit/configs/clip_b32.py + + +Expected performance: +LVIS AP: 20.9% +LVIS APr: 16.9% +""" +import ml_collections + +CANONICAL_CHECKPOINT = 'gs://scenic-bucket/owl_vit/checkpoints/clip_vit_b32_b0203fc' + +DETECTION_FEATURES = ('boxes', 'crowd', 'image', 'instance_labels', + 'instance_text_labels', 'negative_labels', + 'negative_text_labels', '_seed', 'seed') + + +def get_train_preproc_spec( + *, + input_size: int, + num_instances: int, + max_queries: int, + max_query_length: int = 16, + min_area_fraction: float = 0.0, + iou_threshold: float = 0.9): + """Constructs training preprocess string.""" + ops = ( + f'keep({DETECTION_FEATURES})' + f'|random_flip_left_right' + f'|random_crop(min_area_fraction={min_area_fraction})' + f'|resize_with_pad(size={input_size})' + f'|add_random_negative_labels(total_num_negatives=50)' + f'|canonicalize_text_labels' + f'|remove_forbidden_labels' + f'|crop_or_pad({input_size}, {num_instances})' + f'|crop_or_pad_meta_data({num_instances}, {num_instances})' + f'|add_random_prompts' + f'|remove_promptability_marker' + f'|single_to_multi_label(max_num_labels={num_instances})' + f'|merge_overlapping_instances(iou_threshold={iou_threshold})' + f'|add_query_set(lower=True, max_queries={max_queries},' + f' include_negatives=True)' + f'|clip_tokenize_queries(max_token_len={max_query_length})') + return ops + + +def get_eval_preproc_spec( + *, + input_size: int, + num_instances: int, + max_queries: int, + max_query_length: int = 16, + ): + """Constructs training preprocess string.""" + return ( + f'resize_with_pad(size={input_size})' + f'|canonicalize_text_labels' + f'|crop_or_pad({input_size}, {num_instances})' + f'|crop_or_pad_meta_data({num_instances}, {num_instances})' + f'|single_to_multi_label(max_num_labels={num_instances})' + f'|add_query_set(lower=True, max_queries={max_queries},' + f' include_negatives=True)' + f'|clip_tokenize_queries(max_token_len={max_query_length})') + + +def get_config(init_mode='train'): + """Returns the configuration for text-query-based detection using OWL-ViT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'owl_vit_detection' + + # Dataset. + config.dataset_name = 'owl_vit' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.input_size = 768 + config.dataset_configs.input_range = None + config.dataset_configs.num_instances = 100 + config.dataset_configs.max_queries = 100 + config.dataset_configs.max_query_length = 16 + config.dataset_configs.min_area_fraction = 0.6 + config.dataset_configs.iou_threshold = 0.9 + config.dataset_configs.add_random_negatives = True + config.dataset_configs.total_num_negatives = 50 + config.dataset_configs.prefetch_to_device = 2 + + # For best performance, the shuffle buffer should be large, e.g. 10_000, but + # this will require >50GB RAM. + config.dataset_configs.shuffle_buffer_size = 1_000 + + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.tfds_names = ['lvis'] + config.dataset_configs.train.splits = ['train'] + config.dataset_configs.train.dataset_probs = [1.0] + config.dataset_configs.train.decoder_kwarg_list = ({},) + config.dataset_configs.train.preproc_spec = get_train_preproc_spec( + input_size=config.dataset_configs.input_size, + num_instances=config.dataset_configs.num_instances, + max_queries=config.dataset_configs.num_instances, + max_query_length=config.dataset_configs.max_query_length, + min_area_fraction=config.dataset_configs.min_area_fraction) + # When using mosaics, use an input_size that is divisible by all mosaic_sizes. + config.dataset_configs.train.mosaic_sizes = (1, 2, 3) + config.dataset_configs.train.mosaic_probs = (.4, .3, .3) + + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.tfds_names = ['lvis'] + config.dataset_configs.eval.splits = ['validation'] + config.dataset_configs.eval.dataset_probs = [1.0] + config.dataset_configs.eval.decoder_kwarg_list = ({},) + config.dataset_configs.eval.preproc_spec = get_eval_preproc_spec( + input_size=config.dataset_configs.input_size, + num_instances=config.dataset_configs.num_instances, + max_queries=config.dataset_configs.num_instances, + max_query_length=config.dataset_configs.max_query_length) + + config.eval_top_k_preds = 300 # Only return the top-k predictions. + config.data_dtype_str = 'float32' + + # Model. + config.matcher = 'hungarian_cover_tpu' + + config.model = ml_collections.ConfigDict() + config.model.normalize = True + + config.model.body = ml_collections.ConfigDict() + config.model.body.type = 'clip' + config.model.body.variant = 'vit_b32' + config.model.body.merge_class_token = 'mul-ln' + config.model.box_bias = 'both' + + # CLIP stochastic depth. + config.model.body.text_stochastic_droplayer_rate = 0.1 + config.model.body.vision_stochastic_droplayer_rate = 0.2 + + # Loss. + config.bbox_loss_coef = 1.0 + config.giou_loss_coef = 1.0 + config.class_loss_coef = 1.0 + config.focal_loss = True + config.focal_gamma = 2.0 + config.focal_alpha = 0.3 + config.prior_prob = 0.01 # Prior prob of predicting not padding. + config.normalization = 'per_example' # 'per_example' or 'global'. + + # Training. + config.num_training_steps = 140_000 + config.batch_size = 256 + config.rng_seed = 0 + + # Image backbone + head training configuration. + sched = ml_collections.ConfigDict() + sched.re = '(?!backbone/clip/text/.*)(.*)' # Negative lookahead. + sched.lr_configs = ml_collections.ConfigDict({ # Learning rate. + 'learning_rate_schedule': 'compound', + 'factors': 'constant*linear_warmup*cosine_decay', + 'steps_per_cycle': config.num_training_steps, + 'total_steps': config.num_training_steps, + 'warmup_steps': 1000, # Necessary for higher LR and large batch size. + 'base_learning_rate': 5e-5, + }) + + # Text backbone training configuration. + sched_txt = ml_collections.ConfigDict() + sched_txt.re = '(backbone/clip/text/.*)' + sched_txt.lr_configs = ml_collections.ConfigDict({ + 'learning_rate_schedule': 'compound', + 'factors': 'constant*linear_warmup*cosine_decay', + 'steps_per_cycle': config.get_ref('num_training_steps'), + 'total_steps': config.get_ref('num_training_steps'), + 'warmup_steps': 1000, # Necessary for higher LR and large batch size. + 'base_learning_rate': 2e-6, + }) + + # Configure both learning rate schedules. + config.schedule = ml_collections.ConfigDict({ + 'img_heads': sched, + 'txt': sched_txt, + }) + + # *Single* optimizer. + optim = ml_collections.ConfigDict() + optim.optax_name = 'scale_by_adam' + optim.optax_configs = ml_collections.ConfigDict({ # Optimizer settings. + 'b1': 0.9, + 'b2': 0.999, + }) + + # Gradient clipping. + optim.max_grad_norm = 1.0 + optim.per_example_clipping = True + optim.optax_grad_pmean = True # For per-example gradients Optax calls pmean. + + # Explicit WD (not via an optimizer). + optim.weight_decay = 0.0 + optim.weight_decay_decouple = True + + config.optimizer = optim + + assert (optim.per_example_clipping or config.normalization != 'per_example' + 'Per example clipping only makes sense with local normalization') + + # Init. + config.init_from = ml_collections.ConfigDict() + if init_mode == 'train': + config.init_from.codebase = 'clip' + elif init_mode == 'canonical_checkpoint': + config.init_from.checkpoint_path = CANONICAL_CHECKPOINT + else: + raise ValueError('Unknown init_mode: {}'.format(init_mode)) + + # Logging. + config.xprof = True # Profile using xprof. + config.log_summary_steps = 100 # Train summary steps. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 2000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.log_eval_steps = 4000 + + return config + + diff --git a/scenic/projects/owl_vit/configs/clip_b32_finetune.py b/scenic/projects/owl_vit/configs/clip_b32_finetune.py new file mode 100644 index 0000000000000000000000000000000000000000..4fecbf8e6d4c149ad0510dc65ac1a407b9a568da --- /dev/null +++ b/scenic/projects/owl_vit/configs/clip_b32_finetune.py @@ -0,0 +1,242 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""OWL v1 CLIP zero-shot text conditional detection fine-tuning config. + +This config fine-tunes an existing OWL-ViT checkpoint to a new datasets. The +main difference to the training config (clip_b32.py) is that +config.init_from.checkpoint_path is set to a previously trained OWL-ViT +checkpoint. In addition, the preprocessing here does not include the +`remove_forbidden_labels` op, which is only needed when measuring zero-shot +performance on LVIS. + +NOTE: +This config is just a starting point. Hyperparameters (especially learning rate +and number of training steps) need to be tuned for each target dataset. + +Run training: +python -m scenic.projects.owl_vit.main \ + --alsologtostderr=true \ + --workdir=/tmp/training \ + --config=scenic/projects/owl_vit/configs/clip_b32_finetune.py + +""" +import ml_collections + +CANONICAL_CHECKPOINT = 'gs://scenic-bucket/owl_vit/checkpoints/clip_vit_b32_b0203fc' + +DETECTION_FEATURES = ('boxes', 'crowd', 'image', 'instance_labels', + 'instance_text_labels', 'negative_labels', + 'negative_text_labels', '_seed', 'seed') + + +def get_train_preproc_spec( + *, + input_size: int, + num_instances: int, + max_queries: int, + max_query_length: int = 16, + min_area_fraction: float = 0.0, + iou_threshold: float = 0.9): + """Constructs training preprocess string.""" + ops = ( + f'keep({DETECTION_FEATURES})' + f'|random_flip_left_right' + f'|random_crop(min_area_fraction={min_area_fraction})' + f'|resize_with_pad(size={input_size})' + f'|add_random_negative_labels(total_num_negatives=50)' + f'|canonicalize_text_labels' + f'|crop_or_pad({input_size}, {num_instances})' + f'|crop_or_pad_meta_data({num_instances}, {num_instances})' + f'|add_random_prompts' + f'|remove_promptability_marker' + f'|single_to_multi_label(max_num_labels={num_instances})' + f'|merge_overlapping_instances(iou_threshold={iou_threshold})' + f'|add_query_set(lower=True, max_queries={max_queries},' + f' include_negatives=True)' + f'|clip_tokenize_queries(max_token_len={max_query_length})') + return ops + + +def get_eval_preproc_spec( + *, + input_size: int, + num_instances: int, + max_queries: int, + max_query_length: int = 16, + ): + """Constructs training preprocess string.""" + return ( + f'resize_with_pad(size={input_size})' + f'|canonicalize_text_labels' + f'|crop_or_pad({input_size}, {num_instances})' + f'|crop_or_pad_meta_data({num_instances}, {num_instances})' + f'|single_to_multi_label(max_num_labels={num_instances})' + f'|add_query_set(lower=True, max_queries={max_queries},' + f' include_negatives=True)' + f'|clip_tokenize_queries(max_token_len={max_query_length})') + + +def get_config(): + """Returns the configuration for text-query-based detection using OWL-ViT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'owl_vit_detection' + + # Dataset. + config.dataset_name = 'owl_vit' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.input_size = 768 + config.dataset_configs.input_range = None + config.dataset_configs.num_instances = 100 + config.dataset_configs.max_queries = 100 + config.dataset_configs.max_query_length = 16 + config.dataset_configs.min_area_fraction = 0.6 + config.dataset_configs.iou_threshold = 0.9 + config.dataset_configs.add_random_negatives = True + config.dataset_configs.total_num_negatives = 50 + config.dataset_configs.prefetch_to_device = 2 + + # For best performance, the shuffle buffer should be large, e.g. 10_000, but + # this will require >50GB RAM. + config.dataset_configs.shuffle_buffer_size = 1_000 + + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.tfds_names = ['lvis'] + config.dataset_configs.train.splits = ['train'] + config.dataset_configs.train.dataset_probs = [1.0] + config.dataset_configs.train.decoder_kwarg_list = ({},) + config.dataset_configs.train.preproc_spec = get_train_preproc_spec( + input_size=config.dataset_configs.input_size, + num_instances=config.dataset_configs.num_instances, + max_queries=config.dataset_configs.num_instances, + max_query_length=config.dataset_configs.max_query_length, + min_area_fraction=config.dataset_configs.min_area_fraction) + # When using mosaics, use an input_size that is divisible by all mosaic_sizes. + config.dataset_configs.train.mosaic_sizes = (1, 2, 3) + config.dataset_configs.train.mosaic_probs = (.4, .3, .3) + + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.tfds_names = ['lvis'] + config.dataset_configs.eval.splits = ['validation'] + config.dataset_configs.eval.dataset_probs = [1.0] + config.dataset_configs.eval.decoder_kwarg_list = ({},) + config.dataset_configs.eval.preproc_spec = get_eval_preproc_spec( + input_size=config.dataset_configs.input_size, + num_instances=config.dataset_configs.num_instances, + max_queries=config.dataset_configs.num_instances, + max_query_length=config.dataset_configs.max_query_length) + + config.eval_top_k_preds = 300 # Only return the top-k predictions. + config.data_dtype_str = 'float32' + + # Model. + config.matcher = 'hungarian_cover_tpu' + + config.model = ml_collections.ConfigDict() + config.model.normalize = True + + config.model.body = ml_collections.ConfigDict() + config.model.body.type = 'clip' + config.model.body.variant = 'vit_b32' + config.model.body.merge_class_token = 'mul-ln' + config.model.box_bias = 'both' + + # CLIP stochastic depth. + config.model.body.text_stochastic_droplayer_rate = 0.1 + config.model.body.vision_stochastic_droplayer_rate = 0.2 + + # Loss. + config.bbox_loss_coef = 1.0 + config.giou_loss_coef = 1.0 + config.class_loss_coef = 1.0 + config.focal_loss = True + config.focal_gamma = 2.0 + config.focal_alpha = 0.3 + config.prior_prob = 0.01 # Prior prob of predicting not padding. + config.normalization = 'per_example' # 'per_example' or 'global'. + + # Training. + config.num_training_steps = 16_000 + config.batch_size = 256 + config.rng_seed = 0 + + # Image backbone + head training configuration. + sched = ml_collections.ConfigDict() + sched.re = '(?!backbone/clip/text/.*)(.*)' # Negative lookahead. + sched.lr_configs = ml_collections.ConfigDict({ # Learning rate. + 'learning_rate_schedule': 'compound', + 'factors': 'constant*linear_warmup*cosine_decay', + 'steps_per_cycle': config.num_training_steps, + 'total_steps': config.num_training_steps, + 'warmup_steps': 1000, # Necessary for higher LR and large batch size. + 'base_learning_rate': 5e-5, + }) + + # Text backbone training configuration. + sched_txt = ml_collections.ConfigDict() + sched_txt.re = '(backbone/clip/text/.*)' + sched_txt.lr_configs = ml_collections.ConfigDict({ + 'learning_rate_schedule': 'compound', + 'factors': 'constant*linear_warmup*cosine_decay', + 'steps_per_cycle': config.get_ref('num_training_steps'), + 'total_steps': config.get_ref('num_training_steps'), + 'warmup_steps': 1000, # Necessary for higher LR and large batch size. + 'base_learning_rate': 2e-6, + }) + + # Configure both learning rate schedules. + config.schedule = ml_collections.ConfigDict({ + 'img_heads': sched, + 'txt': sched_txt, + }) + + # *Single* optimizer. + optim = ml_collections.ConfigDict() + optim.optax_name = 'scale_by_adam' + optim.optax_configs = ml_collections.ConfigDict({ # Optimizer settings. + 'b1': 0.9, + 'b2': 0.999, + }) + + # Gradient clipping. + optim.max_grad_norm = 1.0 + optim.per_example_clipping = True + optim.optax_grad_pmean = True # For per-example gradients Optax calls pmean. + + # Explicit WD (not via an optimizer). + optim.weight_decay = 0.0 + optim.weight_decay_decouple = True + + config.optimizer = optim + + assert (optim.per_example_clipping or config.normalization != 'per_example' + 'Per example clipping only makes sense with local normalization') + + # Init. + config.init_from = ml_collections.ConfigDict() + config.init_from.checkpoint_path = CANONICAL_CHECKPOINT + + # Logging. + config.xprof = True # Profile using xprof. + config.log_summary_steps = 100 # Train summary steps. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 2000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.log_eval_steps = 4000 + + return config + + diff --git a/scenic/projects/owl_vit/configs/clip_l14.py b/scenic/projects/owl_vit/configs/clip_l14.py new file mode 100644 index 0000000000000000000000000000000000000000..331b475f040f29e427852dd56d04a70523fa8979 --- /dev/null +++ b/scenic/projects/owl_vit/configs/clip_l14.py @@ -0,0 +1,238 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""OWL v1 CLIP zero-shot text conditional detection training config. + +Run training: +python -m scenic.projects.owl_vit.main \ + --alsologtostderr=true \ + --workdir=/tmp/training \ + --config=scenic/projects/owl_vit/configs/clip_l14.py + +""" +import ml_collections + +CANONICAL_CHECKPOINT = 'gs://scenic-bucket/owl_vit/checkpoints/clip_vit_l14_d83d374' + +DETECTION_FEATURES = ('boxes', 'crowd', 'image', 'instance_labels', + 'instance_text_labels', 'negative_labels', + 'negative_text_labels', '_seed', 'seed') + + +def get_train_preproc_spec( + *, + input_size: int, + num_instances: int, + max_queries: int, + max_query_length: int = 16, + min_area_fraction: float = 0.0, + iou_threshold: float = 0.9): + """Constructs training preprocess string.""" + ops = ( + f'keep({DETECTION_FEATURES})' + f'|random_flip_left_right' + f'|random_crop(min_area_fraction={min_area_fraction})' + f'|resize_with_pad(size={input_size})' + f'|add_random_negative_labels(total_num_negatives=50)' + f'|canonicalize_text_labels' + f'|remove_forbidden_labels' + f'|crop_or_pad({input_size}, {num_instances})' + f'|crop_or_pad_meta_data({num_instances}, {num_instances})' + f'|add_random_prompts' + f'|remove_promptability_marker' + f'|single_to_multi_label(max_num_labels={num_instances})' + f'|merge_overlapping_instances(iou_threshold={iou_threshold})' + f'|add_query_set(lower=True, max_queries={max_queries},' + f' include_negatives=True)' + f'|clip_tokenize_queries(max_token_len={max_query_length})') + return ops + + +def get_eval_preproc_spec( + *, + input_size: int, + num_instances: int, + max_queries: int, + max_query_length: int = 16, + ): + """Constructs training preprocess string.""" + return ( + f'resize_with_pad(size={input_size})' + f'|canonicalize_text_labels' + f'|crop_or_pad({input_size}, {num_instances})' + f'|crop_or_pad_meta_data({num_instances}, {num_instances})' + f'|single_to_multi_label(max_num_labels={num_instances})' + f'|add_query_set(lower=True, max_queries={max_queries},' + f' include_negatives=True)' + f'|clip_tokenize_queries(max_token_len={max_query_length})') + + +def get_config(init_mode='train'): + """Returns the configuration for text-query-based detection using OWL-ViT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'owl_vit_detection' + + # Dataset. + config.dataset_name = 'owl_vit' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.input_size = 840 + config.dataset_configs.input_range = None + config.dataset_configs.num_instances = 100 + config.dataset_configs.max_queries = 100 + config.dataset_configs.max_query_length = 16 + config.dataset_configs.min_area_fraction = 0.6 + config.dataset_configs.iou_threshold = 0.9 + config.dataset_configs.add_random_negatives = True + config.dataset_configs.total_num_negatives = 50 + config.dataset_configs.prefetch_to_device = 2 + + # For best performance, the shuffle buffer should be large, e.g. 10_000, but + # this will require >50GB RAM. + config.dataset_configs.shuffle_buffer_size = 1_000 + + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.tfds_names = ['lvis'] + config.dataset_configs.train.splits = ['train'] + config.dataset_configs.train.dataset_probs = [1.0] + config.dataset_configs.train.decoder_kwarg_list = ({},) + config.dataset_configs.train.preproc_spec = get_train_preproc_spec( + input_size=config.dataset_configs.input_size, + num_instances=config.dataset_configs.num_instances, + max_queries=config.dataset_configs.num_instances, + max_query_length=config.dataset_configs.max_query_length, + min_area_fraction=config.dataset_configs.min_area_fraction) + # When using mosaics, use an input_size that is divisible by all mosaic_sizes. + config.dataset_configs.train.mosaic_sizes = (1, 2, 3) + config.dataset_configs.train.mosaic_probs = (.4, .3, .3) + + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.tfds_names = ['lvis'] + config.dataset_configs.eval.splits = ['validation'] + config.dataset_configs.eval.dataset_probs = [1.0] + config.dataset_configs.eval.decoder_kwarg_list = ({},) + config.dataset_configs.eval.preproc_spec = get_eval_preproc_spec( + input_size=config.dataset_configs.input_size, + num_instances=config.dataset_configs.num_instances, + max_queries=config.dataset_configs.num_instances, + max_query_length=config.dataset_configs.max_query_length) + + config.eval_top_k_preds = 300 # Only return the top-k predictions. + config.data_dtype_str = 'float32' + + # Model. + config.matcher = 'hungarian_cover_tpu' + + config.model = ml_collections.ConfigDict() + config.model.normalize = True + + config.model.body = ml_collections.ConfigDict() + config.model.body.type = 'clip' + config.model.body.variant = 'vit_l14' + config.model.body.merge_class_token = 'mul-ln' + config.model.box_bias = 'both' + + # CLIP stochastic depth. + config.model.body.text_stochastic_droplayer_rate = 0.1 + config.model.body.vision_stochastic_droplayer_rate = 0.2 + + # Loss. + config.bbox_loss_coef = 1.0 + config.giou_loss_coef = 1.0 + config.class_loss_coef = 1.0 + config.focal_loss = True + config.focal_gamma = 2.0 + config.focal_alpha = 0.3 + config.prior_prob = 0.01 # Prior prob of predicting not padding. + config.normalization = 'per_example' # 'per_example' or 'global'. + + # Training. + config.trainer_name = 'text_zero_shot_detection' + config.num_training_steps = 70_000 + config.batch_size = 256 + config.rng_seed = 0 + + # Image backbone + head training configuration. + sched = ml_collections.ConfigDict() + sched.re = '(?!backbone/clip/text/.*)(.*)' # Negative lookahead. + sched.lr_configs = ml_collections.ConfigDict({ # Learning rate. + 'learning_rate_schedule': 'compound', + 'factors': 'constant*linear_warmup*cosine_decay', + 'steps_per_cycle': config.num_training_steps, + 'total_steps': config.num_training_steps, + 'warmup_steps': 1000, # Necessary for higher LR and large batch size. + 'base_learning_rate': 2e-5, + }) + + # Text backbone training configuration. + sched_txt = ml_collections.ConfigDict() + sched_txt.re = '(backbone/clip/text/.*)' + sched_txt.lr_configs = ml_collections.ConfigDict({ + 'learning_rate_schedule': 'compound', + 'factors': 'constant*linear_warmup*cosine_decay', + 'steps_per_cycle': config.get_ref('num_training_steps'), + 'total_steps': config.get_ref('num_training_steps'), + 'warmup_steps': 1000, # Necessary for higher LR and large batch size. + 'base_learning_rate': 2e-6, + }) + + # Configure both learning rate schedules. + config.schedule = ml_collections.ConfigDict({ + 'img_heads': sched, + 'txt': sched_txt, + }) + + # *Single* optimizer. + optim = ml_collections.ConfigDict() + optim.optax_name = 'scale_by_adam' + optim.optax_configs = ml_collections.ConfigDict({ # Optimizer settings. + 'b1': 0.9, + 'b2': 0.999, + }) + + # Gradient clipping. + optim.max_grad_norm = 1.0 + optim.per_example_clipping = True + optim.optax_grad_pmean = True # For per-example gradients Optax calls pmean. + + # Explicit WD (not via an optimizer). + optim.weight_decay = 0.0 + optim.weight_decay_decouple = True + + config.optimizer = optim + + assert (optim.per_example_clipping or config.normalization != 'per_example' + 'Per example clipping only makes sense with local normalization') + + # Init. + config.init_from = ml_collections.ConfigDict() + if init_mode == 'train': + config.init_from.codebase = 'clip' + elif init_mode == 'canonical_checkpoint': + config.init_from.checkpoint_path = CANONICAL_CHECKPOINT + else: + raise ValueError('Unknown init_mode: {}'.format(init_mode)) + + # Logging. + config.xprof = True # Profile using xprof. + config.log_summary_steps = 100 # Train summary steps. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 2000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.log_eval_steps = 4000 + + return config + + diff --git a/scenic/projects/owl_vit/configs/clip_l14_with_masks.py b/scenic/projects/owl_vit/configs/clip_l14_with_masks.py new file mode 100644 index 0000000000000000000000000000000000000000..e566845880d8c03feb9aa8ed48f2e37fd06287f8 --- /dev/null +++ b/scenic/projects/owl_vit/configs/clip_l14_with_masks.py @@ -0,0 +1,256 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""OWL v1 CLIP zero-shot text conditional detection training config. + +Run training: +python -m scenic.projects.owl_vit.main \ + --alsologtostderr=true \ + --workdir=/tmp/training \ + --config=scenic/projects/owl_vit/configs/clip_l14_with_masks.py + +""" +import ml_collections + +CANONICAL_CHECKPOINT = 'gs://scenic-bucket/owl_vit/checkpoints/clip_vit_l14_with_masks_6c17944' + +DETECTION_FEATURES = ('boxes', 'crowd', 'image', 'instance_labels', + 'instance_text_labels', 'negative_labels', + 'negative_text_labels', '_seed', 'seed') + + +def get_train_preproc_spec( + *, + input_size: int, + num_instances: int, + max_queries: int, + max_query_length: int = 16, + min_area_fraction: float = 0.0, + iou_threshold: float = 0.9): + """Constructs training preprocess string.""" + ops = ( + f'keep({DETECTION_FEATURES})' + f'|random_flip_left_right' + f'|random_crop(min_area_fraction={min_area_fraction})' + f'|resize_with_pad(size={input_size})' + f'|add_random_negative_labels(total_num_negatives=50)' + f'|canonicalize_text_labels' + f'|remove_forbidden_labels' + f'|crop_or_pad({input_size}, {num_instances})' + f'|crop_or_pad_meta_data({num_instances}, {num_instances})' + f'|add_random_prompts' + f'|remove_promptability_marker' + f'|single_to_multi_label(max_num_labels={num_instances})' + f'|merge_overlapping_instances(iou_threshold={iou_threshold})' + f'|add_query_set(lower=True, max_queries={max_queries},' + f' include_negatives=True)' + f'|clip_tokenize_queries(max_token_len={max_query_length})') + return ops + + +def get_eval_preproc_spec( + *, + input_size: int, + num_instances: int, + max_queries: int, + max_query_length: int = 16, + ): + """Constructs training preprocess string.""" + return ( + f'resize_with_pad(size={input_size})' + f'|canonicalize_text_labels' + f'|crop_or_pad({input_size}, {num_instances})' + f'|crop_or_pad_meta_data({num_instances}, {num_instances})' + f'|single_to_multi_label(max_num_labels={num_instances})' + f'|add_query_set(lower=True, max_queries={max_queries},' + f' include_negatives=True)' + f'|clip_tokenize_queries(max_token_len={max_query_length})') + + +def get_config(init_mode='train'): + """Returns the configuration for text-query-based detection using OWL-ViT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'owl_vit_detection' + + # Dataset. + config.dataset_name = 'owl_vit' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.input_size = 672 + config.dataset_configs.input_range = None + config.dataset_configs.num_instances = 100 + config.dataset_configs.max_queries = 100 + config.dataset_configs.mask_size = 32 + config.dataset_configs.max_query_length = 16 + config.dataset_configs.min_area_fraction = 0.6 + config.dataset_configs.iou_threshold = 0.9 + config.dataset_configs.add_random_negatives = True + config.dataset_configs.total_num_negatives = 50 + config.dataset_configs.prefetch_to_device = 2 + + # For best performance, the shuffle buffer should be large, e.g. 10_000, but + # this will require >50GB RAM. + config.dataset_configs.shuffle_buffer_size = 1_000 + + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.tfds_names = ['lvis'] + config.dataset_configs.train.splits = ['train'] + config.dataset_configs.train.dataset_probs = [1.0] + config.dataset_configs.train.decoder_kwarg_list = ({},) + config.dataset_configs.train.preproc_spec = get_train_preproc_spec( + input_size=config.dataset_configs.input_size, + num_instances=config.dataset_configs.num_instances, + max_queries=config.dataset_configs.num_instances, + max_query_length=config.dataset_configs.max_query_length, + min_area_fraction=config.dataset_configs.min_area_fraction) + # When using mosaics, use an input_size that is divisible by all mosaic_sizes. + config.dataset_configs.train.mosaic_sizes = (1, 2, 3) + config.dataset_configs.train.mosaic_probs = (.4, .3, .3) + + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.tfds_names = ['lvis'] + config.dataset_configs.eval.splits = ['validation'] + config.dataset_configs.eval.dataset_probs = [1.0] + config.dataset_configs.eval.decoder_kwarg_list = ({},) + config.dataset_configs.eval.preproc_spec = get_eval_preproc_spec( + input_size=config.dataset_configs.input_size, + num_instances=config.dataset_configs.num_instances, + max_queries=config.dataset_configs.num_instances, + max_query_length=config.dataset_configs.max_query_length) + + config.eval_top_k_preds = 300 # Only return the top-k predictions. + config.data_dtype_str = 'float32' + + # Model. + config.matcher = 'hungarian_cover_tpu' + + config.model = ml_collections.ConfigDict() + config.model.normalize = True + + config.model.body = ml_collections.ConfigDict() + config.model.body.type = 'clip' + config.model.body.variant = 'vit_l14' + config.model.body.merge_class_token = 'mul-ln' + config.model.box_bias = 'both' + + # CLIP stochastic depth. + config.model.body.text_stochastic_droplayer_rate = 0.1 + config.model.body.vision_stochastic_droplayer_rate = 0.2 + + # Mask head. + config.model.mask_head = ml_collections.ConfigDict() + config.model.mask_head.mask_size = config.dataset_configs.get_ref('mask_size') + config.model.mask_head.roi_align_num_parallel = 8 + config.model.mask_head.num_training_boxes = 64 + config.model.mask_head.stop_box_gradients = True + config.model.mask_head.stop_image_gradients = True + config.model.mask_head.num_mlp_layers_backbone_features = 1 + config.model.mask_head.image_resnet_width = 1.0 + config.model.mask_head.image_resnet_depth = (2, 2, 2, 2) + config.model.mask_head.mask_resnet_width = 1.0 + config.model.mask_head.mask_resnet_depth = (2, 2, 2, 2) + config.model.mask_head.add_image_coords = True + config.model.mask_head.add_mask_coords = True + config.model.mask_head.resnet_out_width_mult = 1 + config.model.mask_head.backbone_out_width_mult = 1 + + # Loss. + config.bbox_loss_coef = 1.0 + config.giou_loss_coef = 1.0 + config.class_loss_coef = 1.0 + config.focal_loss = True + config.focal_gamma = 2.0 + config.focal_alpha = 0.3 + config.prior_prob = 0.01 # Prior prob of predicting not padding. + config.normalization = 'per_example' # 'per_example' or 'global'. + + # Training. + config.trainer_name = 'text_zero_shot_detection' + config.num_training_steps = 70_000 + config.batch_size = 256 + config.rng_seed = 0 + + # Image backbone + head training configuration. + sched = ml_collections.ConfigDict() + sched.re = '(?!backbone/clip/text/.*)(.*)' # Negative lookahead. + sched.lr_configs = ml_collections.ConfigDict({ # Learning rate. + 'learning_rate_schedule': 'compound', + 'factors': 'constant*linear_warmup*cosine_decay', + 'steps_per_cycle': config.num_training_steps, + 'total_steps': config.num_training_steps, + 'warmup_steps': 1000, # Necessary for higher LR and large batch size. + 'base_learning_rate': 2e-5, + }) + + # Text backbone training configuration. + sched_txt = ml_collections.ConfigDict() + sched_txt.re = '(backbone/clip/text/.*)' + sched_txt.lr_configs = ml_collections.ConfigDict({ + 'learning_rate_schedule': 'compound', + 'factors': 'constant*linear_warmup*cosine_decay', + 'steps_per_cycle': config.get_ref('num_training_steps'), + 'total_steps': config.get_ref('num_training_steps'), + 'warmup_steps': 1000, # Necessary for higher LR and large batch size. + 'base_learning_rate': 2e-6, + }) + + # Configure both learning rate schedules. + config.schedule = ml_collections.ConfigDict({ + 'img_heads': sched, + 'txt': sched_txt, + }) + + # *Single* optimizer. + optim = ml_collections.ConfigDict() + optim.optax_name = 'scale_by_adam' + optim.optax_configs = ml_collections.ConfigDict({ # Optimizer settings. + 'b1': 0.9, + 'b2': 0.999, + }) + + # Gradient clipping. + optim.max_grad_norm = 1.0 + optim.per_example_clipping = True + optim.optax_grad_pmean = True # For per-example gradients Optax calls pmean. + + # Explicit WD (not via an optimizer). + optim.weight_decay = 0.0 + optim.weight_decay_decouple = True + + config.optimizer = optim + + assert (optim.per_example_clipping or config.normalization != 'per_example' + 'Per example clipping only makes sense with local normalization') + + # Init. + config.init_from = ml_collections.ConfigDict() + if init_mode == 'train': + config.init_from.codebase = 'clip' + elif init_mode == 'canonical_checkpoint': + config.init_from.checkpoint_path = CANONICAL_CHECKPOINT + else: + raise ValueError('Unknown init_mode: {}'.format(init_mode)) + + # Logging. + config.xprof = True # Profile using xprof. + config.log_summary_steps = 100 # Train summary steps. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 2000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.log_eval_steps = 4000 + + return config + + diff --git a/scenic/projects/owl_vit/configs/owl_v2_clip_b16.py b/scenic/projects/owl_vit/configs/owl_v2_clip_b16.py new file mode 100644 index 0000000000000000000000000000000000000000..2c88207a73f753dc37cf901d08e31b66e7133d0c --- /dev/null +++ b/scenic/projects/owl_vit/configs/owl_v2_clip_b16.py @@ -0,0 +1,69 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""OWL v2 CLIP B/16 config.""" +import ml_collections + + +CHECKPOINTS = { + # https://arxiv.org/abs/2306.09683 Table 1 row 11: + 'owl2-b16-960-st-ngrams': 'gs://scenic-bucket/owl_vit/checkpoints/owl2-b16-960-st-ngrams_c7e1b9a', + # https://arxiv.org/abs/2306.09683 Table 1 row 14: + 'owl2-b16-960-st-ngrams-ft-lvisbase': 'gs://scenic-bucket/owl_vit/checkpoints/owl2-b16-960-st-ngrams-ft-lvisbase_d368398', + # https://arxiv.org/abs/2306.09683 Figure 5 weight ensemble: + 'owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05': 'gs://scenic-bucket/owl_vit/checkpoints/owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05_209b65b', +} + +CHECKPOINTS['canonical_checkpoint'] = CHECKPOINTS[ + 'owl2-b16-960-st-ngrams-curated-ft-lvisbase-ens-cold-weight-05' +] + + +def get_config(init_mode='canonical_checkpoint'): + """Returns the configuration for text-query-based detection using OWL-ViT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'owl_vit_detection' + + # Dataset. + config.dataset_name = 'owl_vit' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.input_size = 960 + config.dataset_configs.input_range = None + config.dataset_configs.max_query_length = 16 + + # Model. + config.model_name = 'text_zero_shot_detection' + + config.model = ml_collections.ConfigDict() + config.model.normalize = True + + config.model.body = ml_collections.ConfigDict() + config.model.body.type = 'clip' + config.model.body.variant = 'vit_b16' + config.model.body.merge_class_token = 'mul-ln' + config.model.box_bias = 'both' + + # Objectness head. + config.model.objectness_head = ml_collections.ConfigDict() + config.model.objectness_head.stop_gradient = True + + # Init. + config.init_from = ml_collections.ConfigDict() + checkpoint_path = CHECKPOINTS.get(init_mode, None) + if checkpoint_path is None: + raise ValueError('Unknown init_mode: {}'.format(init_mode)) + config.init_from.checkpoint_path = checkpoint_path + + return config diff --git a/scenic/projects/owl_vit/configs/owl_v2_clip_l14.py b/scenic/projects/owl_vit/configs/owl_v2_clip_l14.py new file mode 100644 index 0000000000000000000000000000000000000000..0d0597549fb751a7d5bae13d9561c91caafedac3 --- /dev/null +++ b/scenic/projects/owl_vit/configs/owl_v2_clip_l14.py @@ -0,0 +1,68 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""OWL v2 CLIP L/14 config.""" +import ml_collections + +CHECKPOINTS = { + # https://arxiv.org/abs/2306.09683 Table 1 row 12: + 'owl2-l14-1008-st-ngrams': 'gs://scenic-bucket/owl_vit/checkpoints/owl2-l14-1008-st-ngrams_0881fd6', + # https://arxiv.org/abs/2306.09683 Table 1 row 15: + 'owl2-l14-1008-st-ngrams-ft-lvisbase': 'gs://scenic-bucket/owl_vit/checkpoints/owl2-l14-1008-st-ngrams-ft-lvisbase_8ca674c', + # https://arxiv.org/abs/2306.09683 Figure A1 weight ensemble: + 'owl2-l14-1008-st-ngrams-ft-lvisbase-ens-cold-weight-04': 'gs://scenic-bucket/owl_vit/checkpoints/owl2-l14-1008-st-ngrams-ft-lvisbase-ens-cold-weight-04_8ca674c', +} + +CHECKPOINTS['canonical_checkpoint'] = CHECKPOINTS[ + 'owl2-l14-1008-st-ngrams-ft-lvisbase-ens-cold-weight-04' +] + + +def get_config(init_mode='canonical_checkpoint'): + """Returns the configuration for text-query-based detection using OWL-ViT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'owl_vit_detection' + + # Dataset. + config.dataset_name = 'owl_vit' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.input_size = 1008 + config.dataset_configs.input_range = None + config.dataset_configs.max_query_length = 16 + + # Model. + config.model_name = 'text_zero_shot_detection' + + config.model = ml_collections.ConfigDict() + config.model.normalize = True + + config.model.body = ml_collections.ConfigDict() + config.model.body.type = 'clip' + config.model.body.variant = 'vit_l14' + config.model.body.merge_class_token = 'mul-ln' + config.model.box_bias = 'both' + + # Objectness head. + config.model.objectness_head = ml_collections.ConfigDict() + config.model.objectness_head.stop_gradient = True + + # Init. + config.init_from = ml_collections.ConfigDict() + checkpoint_path = CHECKPOINTS.get(init_mode, None) + if checkpoint_path is None: + raise ValueError('Unknown init_mode: {}'.format(init_mode)) + config.init_from.checkpoint_path = checkpoint_path + + return config diff --git a/scenic/projects/owl_vit/data/__init__.py b/scenic/projects/owl_vit/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/owl_vit/data/image_cond_wiki_circuits_1.gif b/scenic/projects/owl_vit/data/image_cond_wiki_circuits_1.gif new file mode 100644 index 0000000000000000000000000000000000000000..093a57400d337ce63f9592ad8165a5d638967c40 --- /dev/null +++ b/scenic/projects/owl_vit/data/image_cond_wiki_circuits_1.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b93781af544da2248602ab0094955627e5e246d67501e501432e6801992d5e8 +size 1050570 diff --git a/scenic/projects/owl_vit/data/owl_v2_speed.png b/scenic/projects/owl_vit/data/owl_v2_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..81a93fd0a5294b0c46685205c3fe84e16dc75dc1 Binary files /dev/null and b/scenic/projects/owl_vit/data/owl_v2_speed.png differ diff --git a/scenic/projects/owl_vit/data/owl_vit_schematic.png b/scenic/projects/owl_vit/data/owl_vit_schematic.png new file mode 100644 index 0000000000000000000000000000000000000000..1fc5ed353eba9d3469495a1560f728ae42189de6 --- /dev/null +++ b/scenic/projects/owl_vit/data/owl_vit_schematic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d42a13bce5ec3b34ea73ff7a159e08386f4cb9dc34e303e7d0bbc35884365ea2 +size 256430 diff --git a/scenic/projects/owl_vit/data/scaling_owl_figure_1.png b/scenic/projects/owl_vit/data/scaling_owl_figure_1.png new file mode 100644 index 0000000000000000000000000000000000000000..7784cee588ab54510d5c9f91a0b958601b844bb2 --- /dev/null +++ b/scenic/projects/owl_vit/data/scaling_owl_figure_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35c359cfa8094497f8d57f148f669bf8074ba2ac74e687f84c2e951ea3e6fbed +size 351653 diff --git a/scenic/projects/owl_vit/data/text_cond_wiki_stillife_1.gif b/scenic/projects/owl_vit/data/text_cond_wiki_stillife_1.gif new file mode 100644 index 0000000000000000000000000000000000000000..1c587ea0141cc39fb67418bf3db917edfbfd853c --- /dev/null +++ b/scenic/projects/owl_vit/data/text_cond_wiki_stillife_1.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:117312d9bd915e255b1b0410c31c5548e0ff8de05b32f93ec8d62a5d5b32e73d +size 9185142 diff --git a/scenic/projects/owl_vit/evaluator.py b/scenic/projects/owl_vit/evaluator.py new file mode 100644 index 0000000000000000000000000000000000000000..e97c76d5666f8aca1a796165dec5cdc42234d242 --- /dev/null +++ b/scenic/projects/owl_vit/evaluator.py @@ -0,0 +1,741 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Run LVIS evaluation. + +This script runs inference on a TFDS dataset (by default, the LVIS validation +set), writes the predictions to disk in the LVIS JSON format, and runs the LVIS +API evaluation on the files. + +The ground-truth annotations must be supplied in the LVIS JSON format in the +local directory or at --annotations_path. The official annotations can be +obtained at https://www.lvisdataset.org/dataset. + +The model is specified via --checkpoint_path and a --config matching the model. + +See flag definitions in code for advanced settings. + +Example command: +python evaluator.py \ + --alsologtostderr=true \ + --config=clip_b32 \ + --output_dir=/tmp/evaluator + +""" +# GOOGLE INTERNAL pylint: disable=g-importing-member +import collections +import datetime +import functools +import json +import multiprocessing +import os +import re +import tempfile +from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple +import urllib +import zipfile + +from absl import app +from absl import flags +from absl import logging +from clu import preprocess_spec +from flax import linen as nn +import jax +from jax.experimental.compilation_cache import compilation_cache +import jax.numpy as jnp +from lvis.eval import LVISEval +from lvis.lvis import LVIS +from lvis.results import LVISResults +from matplotlib import pyplot as plt +import ml_collections +import numpy as np +from pycocotools.coco import COCO +from pycocotools.cocoeval import COCOeval +from scenic.projects.owl_vit import configs +from scenic.projects.owl_vit import models +from scenic.projects.owl_vit.preprocessing import image_ops +from scenic.projects.owl_vit.preprocessing import label_ops +from scenic.projects.owl_vit.preprocessing import modalities +import tensorflow as tf +import tensorflow_datasets as tfds +import tqdm + +LVIS_VAL_URL = 'https://s3-us-west-2.amazonaws.com/dl.fbaipublicfiles.com/LVIS/lvis_v1_val.json.zip' + +COCO_METRIC_NAMES = [ + 'Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ]', + 'Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ]', + 'Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ]', + 'Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ]', + 'Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ]', + 'Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ]', + 'Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ]', + 'Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ]', + 'Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ]', + 'Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ]', + 'Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ]', + 'Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ]', +] + +_DEFAULT_ANNOTATIONS_PATH = '~/annotations/lvis_v1_val.json' + +flags.DEFINE_string( + 'config', + None, + 'Name of the config of the model to use for inference.', + required=True) +flags.DEFINE_string( + 'checkpoint_path', + None, + 'Checkpoint path to use. Must match the model in the config.', + required=True) +flags.DEFINE_string( + 'output_dir', None, 'Directory to write predictions to.', required=True) +flags.DEFINE_string( + 'tfds_name', + 'lvis', + 'TFDS name of the dataset to run inference on.') +flags.DEFINE_string('split', 'validation', 'Dataset split to run inference on.') +flags.DEFINE_string( + 'annotations_path', + _DEFAULT_ANNOTATIONS_PATH, + 'Path to JSON file with ground-truth annotations in COCO/LVIS format. ' + 'If it does not exist, the script will try to download it.') +flags.DEFINE_enum('data_format', 'lvis', ('lvis', 'coco'), + 'Whether to use the LVIS or COCO API.') +flags.DEFINE_enum('platform', 'cpu', ('cpu', 'gpu', 'tpu'), 'JAX platform.') +flags.DEFINE_string( + 'tfds_data_dir', None, + 'TFDS data directory. If the dataset is not available in the directory, it ' + 'will be downloaded.' + ) +flags.DEFINE_string( + 'tfds_download_dir', None, + 'TFDS download directory. Defaults to ~/tensorflow-datasets/downloads.') +flags.DEFINE_integer( + 'num_example_images_to_save', 10, + 'Number of example images with predictions to save.') +flags.DEFINE_integer( + 'label_shift', 1, + 'Value that will be added to the model output labels in the prediction ' + 'JSON files. The model predictions are zero-indexed. COCO or LVIS use ' + 'one-indexed labels, so label_shift should be 1 for these datasets. Set ' + 'it to 0 for zero-indexed datasets.' +) + +FLAGS = flags.FLAGS + +_MIN_BOXES_TO_PLOT = 5 +_PRED_BOX_PLOT_FACTOR = 3 +_PLOTTING_SCORE_THRESHOLD = 0.01 + + +Variables = nn.module.VariableDict +ModelInputs = Any +Predictions = Any + + +def _timestamp() -> str: + return datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S_%f') + + +def get_dataset(tfds_name: str, + split: str, + input_size: int, + tfds_data_dir: Optional[str] = None, + tfds_download_dir: Optional[str] = None, + data_format: str = 'lvis') -> Tuple[tf.data.Dataset, List[str]]: + """Returns a tf.data.Dataset and class names.""" + builder = tfds.builder(tfds_name, data_dir=tfds_data_dir) + builder.download_and_prepare(download_dir=tfds_download_dir) + class_names = builder.info.features['objects']['label'].names + ds = builder.as_dataset(split=split) + if data_format == 'lvis': + decoder = image_ops.DecodeLvisExample() + elif data_format == 'coco': + decoder = image_ops.DecodeCocoExample() + else: + raise ValueError(f'Unknown data format: {data_format}.') + pp_fn = preprocess_spec.PreprocessFn([ + decoder, + image_ops.ResizeWithPad(input_size, pad_value=0.0), + image_ops.Keep( + [modalities.IMAGE, modalities.IMAGE_ID, modalities.ORIGINAL_SIZE]) + ], only_jax_types=True) + ds = ( + ds.map(pp_fn, num_parallel_calls=tf.data.AUTOTUNE) + .batch(1) + .batch(jax.device_count()) + .prefetch(tf.data.AUTOTUNE) + ) + return ds, class_names + + +def tokenize_queries(tokenize: Callable[[str, int], List[int]], + queries: List[str], + prompt_template: str = '{}', + max_token_len: int = 16) -> List[List[int]]: + """Tokenizes a sequence of query strings. + + Args: + tokenize: Tokenization function. + queries: List of strings to embed. + prompt_template: String with '{}' placeholder to use as prompt template. + max_token_len: If the query+prompt has more tokens than this, it will be + truncated. + + Returns: + A list of lists of tokens. + """ + return [ + tokenize( + label_ops._canonicalize_string_py(prompt_template.format(q)), # pylint: disable=protected-access + max_token_len) for q in queries + ] + + +def get_embed_queries_fn( + module: nn.Module, + variables: Variables) -> Callable[[jnp.ndarray], jnp.ndarray]: + """Get query embedding function. + + Args: + module: OWL-ViT Flax module. + variables: OWL-ViT variables. + + Returns: + Jitted query embedding function. + """ + + @jax.jit + def embed(queries): + return module.apply( + variables, + text_queries=queries, + train=False, + method=module.text_embedder) + + return embed + + +def get_predict_fn( + module: nn.Module, + variables) -> Callable[[jnp.ndarray, jnp.ndarray], Dict[str, jnp.ndarray]]: + """Get prediction function. + + Args: + module: OWL-ViT Flax module. + variables: OWL-ViT variables. + + Returns: + Jitted predict function. + """ + + def apply(method, **kwargs): + return module.apply(variables, **kwargs, method=method) + + @functools.partial(jax.pmap, in_axes=(0, None)) + def predict(images, query_embeddings): + + # Embed images: + feature_map = apply(module.image_embedder, images=images, train=False) + b, h, w, d = feature_map.shape + image_features = jnp.reshape(feature_map, (b, h * w, d)) + + # Class predictions are ensembled over query embeddings: + class_predictor = functools.partial( + apply, module.class_predictor, image_features=image_features) + query_embeddings_ensemble = jnp.stack(query_embeddings, axis=0) + outputs_ensemble = jax.vmap(class_predictor)( + query_embeddings=query_embeddings_ensemble[:, jnp.newaxis, ...]) + outputs = jax.tree_util.tree_map(lambda x: jnp.mean(x, axis=0), + outputs_ensemble) + + # Add box predictions: + outputs.update( + apply( + module.box_predictor, + image_features=image_features, + feature_map=feature_map)) + + outputs[modalities.SCORES] = jax.nn.sigmoid(outputs[modalities.LOGITS]) + return outputs + + return predict + + +@functools.partial(jax.vmap, in_axes=[0, 0, None, None]) # Map over images. +def get_top_k( + scores: jnp.ndarray, boxes: jnp.ndarray, k: int, + exclusive_classes: bool) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Finds the top k scores and corresponding boxes within an image. + + The code applies on the image level; vmap is used for batching. + + Args: + scores: [num_instances, num_classes] array of scores (i.e. logits or + probabilities) to sort by. + boxes: [num_instances, 4] Optional array of bounding boxes. + k: Number of instances to return. + exclusive_classes: If True, the top class for each box is returned. If + False, classes are considered to be non-exclusive (multi-label setting), + and the top-k computations happens globally across all scores, not just + the maximum logit for each output token. + + Returns: + Score, label, and box arrays of shape [top_k, ...] for the selected + instances. + """ + if scores.ndim != 2: + raise ValueError('Expected scores to have shape [num_instances, ' + f'num_classes], got {scores.shape}') + + if exclusive_classes: + k = min(k, scores.shape[0]) + instance_top_scores = jnp.max(scores, axis=1) + instance_class_ind = jnp.argmax(scores, axis=1) + top_scores, instance_ind = jax.lax.top_k(instance_top_scores, k) + class_ind = instance_class_ind[instance_ind] + else: + k = min(k, scores.size) + top_scores, top_indices = jax.lax.top_k(scores.ravel(), k) + instance_ind, class_ind = jnp.unravel_index(top_indices, scores.shape) + + return top_scores, class_ind, boxes[instance_ind] + + +def unpad_box(box_cxcywh: np.ndarray, *, image_w: int, + image_h: int) -> np.ndarray: + """Removes effect of ResizeWithPad-style padding from bounding boxes. + + Args: + box_cxcywh: Bounding box in COCO format (cx, cy, w, h). + image_w: Width of the original unpadded image in pixels. + image_h: Height of the original unpadded image in pixels. + + Returns: + Unpadded box. + """ + padded_size = np.maximum(image_w, image_h) + w_frac = image_w / padded_size + h_frac = image_h / padded_size + image_frac = np.array([w_frac, h_frac, w_frac, h_frac]) + 1e-6 + return np.clip(box_cxcywh / image_frac, 0.0, 1.0) + + +def format_predictions(*, + scores: np.ndarray, + labels: np.ndarray, + boxes: np.ndarray, + image_sizes: np.ndarray, + image_ids: np.ndarray, + label_shift: int = 0) -> List[Dict[str, Any]]: + """Formats predictions to COCO annotation format. + + Args: + scores: [num_images, num_instances] array of confidence scores. + labels: [num_images, num_instances] array of label ids. + boxes: [num_images, num_instances, 4] array of bounding boxes in relative + COCO format (cx, cy, w, h). + image_sizes: [num_images, 2] array of original unpadded image height and + width in pixels. + image_ids: COCO/LVIS image IDs. + label_shift: Value that will be added to the model output labels in the + prediction JSON files. The model predictions are zero-indexed. COCO or + LVIS use one-indexed labels, so label_shift should be 1 for these + datasets. Set it to 0 for zero-indexed datasets. + + Returns: + List of dicts that can be saved as COCO/LVIS prediction JSON for evaluation. + """ + predictions = [] + num_batches, num_instances = scores.shape + for batch in range(num_batches): + h, w = image_sizes[batch] + for instance in range(num_instances): + label = int(labels[batch, instance]) + if not label: + continue + score = float(scores[batch, instance]) + # Internally, we use center coordinates, but COCO uses corner coordinates: + bcx, bcy, bw, bh = unpad_box(boxes[batch, instance], image_w=w, image_h=h) + bx = bcx - bw / 2 + by = bcy - bh / 2 + predictions.append({ + 'image_id': int(image_ids[batch]), + 'category_id': label + label_shift, + 'bbox': [float(bx * w), float(by * h), float(bw * w), float(bh * h)], + 'score': score + }) + return predictions + + +def get_predictions(config: ml_collections.ConfigDict, + checkpoint_path: Optional[str], + tfds_name: str, + split: str, + top_k: int = 300, + exclusive_classes: bool = False, + label_shift: int = 0) -> List[Dict[str, Any]]: + """Gets predictions from an OWL-ViT model for a whole TFDS dataset. + + These predictions can then be evaluated using the COCO/LVIS APIs. + + Args: + config: Model config. + checkpoint_path: Checkpoint path (overwrites the path in the model config). + tfds_name: TFDS dataset to get predictions for. + split: Dataset split to get predictions for. + top_k: Number of predictions to retain per image. + exclusive_classes: If True, the top class for each box is returned. If + False, classes are considered to be non-exclusive (multi-label setting), + and the top-k computations happens globally across all scores, not just + the maximum logit for each output token. + label_shift: Value that will be added to the model output labels in the + prediction JSON files. The model predictions are zero-indexed. COCO or + LVIS use one-indexed labels, so label_shift should be 1 for these + datasets. Set it to 0 for zero-indexed datasets. + + Returns: + Dictionary of predictions. + """ + + # Load model and variables: + module = models.TextZeroShotDetectionModule( + body_configs=config.model.body, + normalize=config.model.normalize, + box_bias=config.model.box_bias) + module.tokenize('') # Warm up the tokenizer. + variables = module.load_variables(checkpoint_path=checkpoint_path) + embed_queries = get_embed_queries_fn(module, variables) + predict = get_predict_fn(module, variables) + pmapped_top_k = jax.pmap(get_top_k, static_broadcasted_argnums=(2, 3)) + + # Create dataset: + dataset, class_names = get_dataset( + tfds_name=tfds_name, + split=split, + input_size=config.dataset_configs.input_size, + tfds_data_dir=FLAGS.tfds_data_dir, + tfds_download_dir=FLAGS.tfds_download_dir, + data_format=FLAGS.data_format) + + # Embed queries: + query_embeddings = [] + for template in label_ops.CLIP_BEST_PROMPT_TEMPLATES: + tokenized_queries = tokenize_queries( + module.tokenize, + class_names, + template, + max_token_len=config.dataset_configs.max_query_length) + query_embeddings.append(embed_queries(np.array(tokenized_queries))) # pytype: disable=wrong-arg-types # jax-ndarray + + # Prediction loop: + predictions = [] + for batch in tqdm.tqdm( + dataset.as_numpy_iterator(), + desc='Inference progress', + total=int(dataset.cardinality().numpy())): + + outputs = predict(batch[modalities.IMAGE], query_embeddings) # pytype: disable=wrong-arg-types # jax-ndarray + + # Selec top k predictions: + scores, labels, boxes = pmapped_top_k( + outputs[modalities.SCORES], + outputs[modalities.PREDICTED_BOXES], + top_k, + exclusive_classes, + ) + + # Move to CPU: + scores, labels, boxes, image_sizes, image_ids = _unshard_and_get([ + scores, labels, boxes, batch[modalities.ORIGINAL_SIZE], + batch[modalities.IMAGE_ID] + ]) + + # Append predictions: + predictions.extend( + format_predictions( + scores=scores, + labels=labels, + boxes=boxes, + image_sizes=image_sizes, + image_ids=image_ids, + label_shift=label_shift)) + + return predictions + + +def _unshard_and_get(tree): + tree_cpu = jax.device_get(tree) + return jax.tree_util.tree_map(lambda x: x.reshape(-1, *x.shape[2:]), tree_cpu) + + +def write_predictions(predictions: List[Dict[str, Any]], + output_dir: str, split: str) -> str: + filepath = os.path.join(output_dir, f'predictions_{split}.json') + if tf.io.gfile.exists(filepath): + raise ValueError(f'Output file already exists: {filepath}') + with tf.io.gfile.GFile(filepath, 'w') as f: + json.dump(predictions, f, indent=4) + return filepath + + +def _download_file(url: str, path: str) -> None: + """Downloads a file from a URL to a path.""" + logging.info('Downloading %s to %s', url, path) + with tf.io.gfile.GFile(path, 'wb') as output: + with urllib.request.urlopen(url) as source: + loop = tqdm.tqdm(total=int(source.info().get('Content-Length')), + ncols=80, unit='iB', unit_scale=True, unit_divisor=1024) + while True: + buffer = source.read(8192) + if not buffer: + break + output.write(buffer) + loop.update(len(buffer)) + + +def _download_annotations(annotations_path: str) -> str: + """Downloads the appropriate annotations file.""" + filename = os.path.basename(annotations_path) + if filename == 'lvis_v1_val.json': + tf.io.gfile.makedirs(os.path.dirname(annotations_path)) + zip_path = annotations_path.replace('.json', '.zip') + _download_file(url=LVIS_VAL_URL, path=zip_path) + with zipfile.ZipFile(zip_path, 'r') as f: + f.extractall(os.path.dirname(annotations_path)) + tf.io.gfile.remove(zip_path) + else: + raise ValueError(f'Unknown annotations file: {filename}') + + return annotations_path + + +def run_evaluation(annotations_path: str, + predictions_path: str, + data_format: str = 'lvis') -> Dict[str, float]: + """Runs evaluation and prints metric results.""" + + # Copy annotations file in case it's not local: + with tempfile.TemporaryDirectory() as temp_dir: + annotations_path_local = os.path.join( + temp_dir, os.path.basename(annotations_path)) + tf.io.gfile.copy(annotations_path, annotations_path_local) + + if data_format == 'lvis': + lvis_gt = LVIS(annotations_path_local) + lvis_dt = LVISResults(lvis_gt, predictions_path) + lvis_eval = LVISEval(lvis_gt, lvis_dt, iou_type='bbox') + lvis_eval.evaluate() + lvis_eval.accumulate() + lvis_eval.summarize() + lvis_eval.print_results() + return lvis_eval.results + elif data_format == 'coco': + coco_gt = COCO(annotations_path_local) + coco_dt = coco_gt.loadRes(predictions_path) + coco_eval = COCOeval(coco_gt, coco_dt, iouType='bbox') + coco_eval.evaluate() + coco_eval.accumulate() + coco_eval.summarize() + return {k: v for k, v in zip(COCO_METRIC_NAMES, coco_eval.stats)} + else: + raise ValueError(f'Unknown data format: {data_format}') + + +def _set_host_device_count(n): + xla_flags = os.getenv('XLA_FLAGS', '') + xla_flags = re.sub(r'--xla_force_host_platform_device_count=\S+', '', + xla_flags).split() + os.environ['XLA_FLAGS'] = ' '.join( + ['--xla_force_host_platform_device_count={}'.format(n)] + xla_flags) + + +def plot_box(ax, + ann, + color, + label=True, + alpha=1.0, + pad=3, + labels=None, + score=None): + """Plots a single bounding box into axes.""" + x, y, w, h = ann['bbox'] + ax.plot([x, x + w, x + w, x, x], [y, y, y + h, y + h, y], + color=color, + alpha=alpha) + if label: + s = str(ann['category_id']) + if labels is not None and ann['category_id'] in labels: + s = f"{ann['category_id']}: {labels[ann['category_id']]}" + if score is not None: + s = s + ' ' + f'{score:1.2f}'[1:] + ax.text( + x + pad, + y + pad, + s, + ha='left', + va='top', + color=color, + fontsize=10, + fontweight='bold', + alpha=alpha) + + +def plot_image(pixels, image_id, gt_by_image, pred_by_image, labels): + """Plots an image with annotations.""" + fig, axs = plt.subplots(1, 2, figsize=(12, 6)) + + # Plot ground-truth: + ax = axs[0] + ax.imshow(pixels) + for ann in gt_by_image[image_id]: + plot_box(ax, ann, color='g', labels=labels) + ax.set_title(f'Ground truth (Image ID: {image_id})') + + # Plot prediction: + ax = axs[1] + ax.imshow(pixels) + anns = pred_by_image[image_id] + if anns: + n = _MIN_BOXES_TO_PLOT + len(gt_by_image[image_id]) * _PRED_BOX_PLOT_FACTOR + n = min(n, len(anns)) + threshold = np.partition(np.array([a['score'] for a in anns]), -n)[-n] + threshold = max(threshold, _PLOTTING_SCORE_THRESHOLD) + for ann in gt_by_image[image_id]: + plot_box(ax, ann, color='g', label=False) + for ann in anns: + if ann['score'] <= threshold: + continue + plot_box(ax, ann, color='r', labels=labels, score=ann['score']) + ax.set_title('Predictions') + + fig.tight_layout() + return fig + + +def save_examples_images(*, ground_truth_path, pred_path, tfds_name, split, + output_dir, num_images, tfds_data_dir): + """Saves example images to disk.""" + # Prepare annotations: + with tf.io.gfile.GFile(ground_truth_path, 'r') as f: + ground_truth = json.load(f) + + with tf.io.gfile.GFile(pred_path, 'r') as f: + preds = json.load(f) + + gt_by_image = collections.defaultdict(list) + for gt in ground_truth['annotations']: + gt_by_image[gt['image_id']].append(gt) + + pred_by_image = collections.defaultdict(list) + for pred in preds: + pred_by_image[pred['image_id']].append(pred) + + labels = {cat['id']: cat['name'] for cat in ground_truth['categories']} + + images = list( + tfds.load( + tfds_name, split=split, + data_dir=tfds_data_dir).take(num_images).as_numpy_iterator()) + + # Plot and save images: + file_names = [] + for image in images: + image_id = image['image/id'] + fig = plot_image(image['image'], image_id, gt_by_image, pred_by_image, + labels) + file_name = f'{image_id}.png' + file_path = os.path.join(output_dir, file_name) + with tf.io.gfile.GFile(file_path, 'wb') as f: + fig.savefig(f, bbox_inches='tight') + file_names.append(file_name) + + # Save index.html: + with tf.io.gfile.GFile(os.path.join(output_dir, 'index.html'), 'w') as f: + f.write('\n'.join([f'{n}' for n in file_names])) + + +def main(argv: Sequence[str]) -> None: + if len(argv) > 1: + raise app.UsageError('Too many command-line arguments.') + logging.info('Starting evaluation.') + + # Make CPU cores visible as JAX devices: + jax.config.update('jax_platform_name', FLAGS.platform) + if FLAGS.platform == 'cpu': + _set_host_device_count(max(1, multiprocessing.cpu_count() - 2)) + + # Provide access to --jax_backend_target and --jax_xla_backend flags. + jax.config.config_with_absl() + logging.info('JAX devices: %s', jax.device_count()) + + # Hide any GPUs form TensorFlow. Otherwise, TF might reserve memory and make + # it unavailable to JAX. + tf.config.experimental.set_visible_devices([], 'GPU') + + compilation_cache.set_cache_dir('/tmp/jax_compilation_cache') + + config_name = os.path.splitext(os.path.basename(FLAGS.config))[0] + + if tf.io.gfile.exists(FLAGS.annotations_path): + annotations_path = FLAGS.annotations_path + else: + annotations_path = _download_annotations(FLAGS.annotations_path) + + predictions = get_predictions( + config=getattr(configs, FLAGS.config).get_config(), + checkpoint_path=FLAGS.checkpoint_path, + tfds_name=FLAGS.tfds_name, + split=FLAGS.split, + label_shift=FLAGS.label_shift) + + output_dir = os.path.join( + FLAGS.output_dir, config_name, FLAGS.tfds_name, _timestamp() + ) + logging.info('Writing predictions to %s', output_dir) + tf.io.gfile.makedirs(output_dir) + predictions_path = write_predictions(predictions, output_dir, FLAGS.split) + + logging.info('Running evaluation...') + try: + results = run_evaluation(annotations_path, predictions_path, + FLAGS.data_format) + except IndexError as e: + logging.exception('IndexError while computing metric.') + results = {'ERROR': str(e)} + + with tf.io.gfile.GFile( + os.path.join(output_dir, f'results_{FLAGS.split}.json'), 'w') as f: + json.dump(results, f, indent=4) + + if FLAGS.num_example_images_to_save: + logging.info('Saving example images...') + examples_dir = os.path.join(output_dir, 'examples') + tf.io.gfile.makedirs(examples_dir) + save_examples_images( + ground_truth_path=annotations_path, + pred_path=predictions_path, + tfds_name=FLAGS.tfds_name, + split=FLAGS.split, + output_dir=examples_dir, + num_images=FLAGS.num_example_images_to_save, + tfds_data_dir=FLAGS.tfds_data_dir) + + logging.info('Done.') + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/owl_vit/layers.py b/scenic/projects/owl_vit/layers.py new file mode 100644 index 0000000000000000000000000000000000000000..558ea2a62062c4859410acbc9b860c356ffea7f1 --- /dev/null +++ b/scenic/projects/owl_vit/layers.py @@ -0,0 +1,646 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Layers / Flax modules for OWL-ViT.""" + +import abc +import functools +from typing import Any, Callable, Dict, Optional, Tuple, Union, Sequence + +from absl import logging +from big_vision.models import bit +from big_vision.models import vit +import flax +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import box_utils +from scenic.projects.owl_vit import utils +from scenic.projects.owl_vit.clip import layers as clip_layers +from scenic.projects.owl_vit.clip import model as clip_model + +Params = Dict[Any, Any] + + +class ResNet(nn.Module): + """ResNetV1 based on big_vision/models/bit.py. + + This variant makes the root_block optional. + + Attributes: + num_classes: Number of output channels for final projection. If set to zero, + no final projection will be done. + width: Width multiplier for the ResNet. + depth: Sequence of ints specifying depth of each stage, or int specifying + one of the standard ResNet depths. + root_block: Whether to apply the root block or not. + """ + num_classes: int + width: float = 1 + depth: Union[int, Sequence[int]] = 50 + root_block: bool = True + + @nn.compact + def __call__(self, inputs, *, train=False): + del train # Unused + blocks = bit.get_block_desc(self.depth) + width = int(64 * self.width) + + outs = {} + + # Root block. + if self.root_block: + convolved = bit.StdConv( + width, (7, 7), (2, 2), use_bias=False, name='conv_root')(inputs) + normed = nn.GroupNorm(name='gn_root')(convolved) + rectified = nn.relu(normed) + pooled = nn.max_pool(rectified, (3, 3), strides=(2, 2), padding='SAME') + body_in = outs['stem'] = pooled + else: + body_in = inputs + + # Stages. + activation = bit.ResNetStage(blocks[0], nmid=width, name='block1')(body_in) + outs['stage1'] = activation + for i, block_size in enumerate(blocks[1:], 1): + activation = bit.ResNetStage( + block_size, nmid=width * 2**i, + first_stride=(2, 2), + name=f'block{i + 1}')(activation) + outs[f'stage{i + 1}'] = activation + outs['pre_logits_2d'] = activation + + # Head. + main_out = outs['pre_logits'] = jnp.mean(outs['pre_logits_2d'], axis=(1, 2)) + + if self.num_classes: + head = nn.Dense( + self.num_classes, name='head', kernel_init=nn.initializers.zeros) + outs['logits_2d'] = head(outs['pre_logits_2d']) + main_out = outs['logits'] = head(outs['pre_logits']) + + return main_out, outs + + +class HourglassNetwork(nn.Module): + """Hourglass-like network. + + Similar to https://arxiv.org/pdf/2104.00613.pdf, but based on the BiT ResNet + instead of the standard ResNet. + + Attributes: + num_classes: Number of output channels for final projection. If set to zero, + no final projection will be done. + width: Width multiplier for the ResNet. + depth: Sequence of ints specifying depth of each stage, or int specifying + one of the standard ResNet depths. + """ + num_classes: int + width: float = 1 + depth: Union[int, Sequence[int]] = 50 + + @nn.compact + def __call__(self, inputs, *, train=False): + del train # Unused + blocks = list(bit.get_block_desc(self.depth)) + resnet_stage = functools.partial(bit.ResNetStage, first_stride=(1, 1)) + + # Encoder: + _, outs = ResNet( + num_classes=0, width=self.width, depth=blocks, root_block=False, + name='encoder')(inputs) + encoded = [v for k, v in outs.items() if k.startswith('stage')] + + # Bottleneck: + activation = resnet_stage( + blocks.pop(), name='bottleneck_block')(encoded.pop()) + bottleneck_width = activation.shape[-1] + + # Decoder: + for skip, block_size in reversed(list(zip(encoded, blocks))): + b, h, w, c = skip.shape + i = bottleneck_width // c + activation = resnet_stage( + block_size, nmid=c // 4, name=f'decoder_block{i}')(activation) + activation = jax.image.resize( + activation, (b, h, w, activation.shape[-1]), method='bilinear') + activation = activation + skip + outs[f'decoder_stage{i}'] = activation + outs['pre_logits'] = activation + + # Head: + if self.num_classes: + main_out = nn.Dense( + self.num_classes, name='head', kernel_init=nn.initializers.zeros)( + activation) + else: + main_out = outs['pre_logits'] + + return main_out, outs + + +class PredictorMLP(nn.Module): + """FFN block for predicting continuous outputs, e.g. bounding box coordinates. + + Attributes: + out_dim: Size of output of this mlp. + num_layers: Number of layers. + mlp_dim: Size of hidden dimension of dense layers. + hidden_activation: Activation function of hidden layers. + out_activation: Activation of the output. + dtype: Data type, e.g. jnp.float32. + """ + out_dim: int + num_layers: int = 1 + mlp_dim: Optional[int] = None + hidden_activation: Optional[Callable[[jnp.ndarray], jnp.ndarray]] = nn.gelu + out_activation: Optional[Callable[[jnp.ndarray], jnp.ndarray]] = None + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, inputs: jnp.ndarray) -> jnp.ndarray: + """Applies FFN MLP block to inputs for prediction.""" + x = inputs + mlp_dim = self.mlp_dim or x.shape[-1] + for _ in range(self.num_layers-1): + x = nn.Dense(mlp_dim, dtype=self.dtype)(x) + if self.hidden_activation is not None: + x = self.hidden_activation(x) + + x = nn.Dense(self.out_dim, kernel_init=nn.zeros)(x) + if self.out_activation is not None: + x = self.out_activation(x) # pylint: disable=not-callable + return x + + +class ClassPredictor(nn.Module): + """Open-vocabulary instance class predictor.""" + normalize: bool = False + out_dim: Optional[int] = None + + @nn.compact + def __call__( + self, + x: jnp.ndarray, + query_embeddings: Optional[jnp.ndarray] = None, + query_mask: Optional[jnp.ndarray] = None, + ) -> Dict[str, jnp.ndarray]: + """Computes class prediction logits. + + Query embeddings from a text encoder define the classification label space. + + Args: + x: Image features [batch_size, num_patches, emb_dim]. + query_embeddings: The embeddings to classify against of shape [batch_size, + num_queries, out_dim]. If not specified, only the image class embeddings + will be returned. + query_mask: Mask indicating whether query is real (1) or padding (0), of + shape [batch_size, num_queries]. + Returns: + Dict with keys 'class_embeddings' and, if query embeddings were provided, + 'pred_logits'. + """ + if self.out_dim is not None: + out_dim = self.out_dim + elif query_embeddings is not None: + out_dim = query_embeddings.shape[-1] + else: + raise ValueError('Unable to infer class head shape. Please pass out_dim.') + + image_class_emb = nn.Dense( + out_dim, kernel_init=nn.initializers.normal(1e-6))(x) + if query_embeddings is None: + return {'class_embeddings': image_class_emb} + assert out_dim == query_embeddings.shape[-1] + + if self.normalize: + image_class_emb /= jnp.linalg.norm( + image_class_emb, axis=-1, keepdims=True) + 1e-6 + query_embeddings /= jnp.linalg.norm( + query_embeddings, axis=-1, keepdims=True) + 1e-6 + + assert query_embeddings.ndim > 2, ('Expects shape (batch, query, out_dim). ' + f'Got {query_embeddings.shape}') + pred_logits = jnp.einsum( + '...pd,...qd->...pq', image_class_emb, query_embeddings) + + # Apply a learnable shift and scale to logits: + logit_shift = nn.Dense(1, name='logit_shift')(x) + logit_scale = nn.Dense(1, use_bias=True, name='logit_scale')(x) + logit_scale = nn.elu(logit_scale) + 1 + pred_logits = (pred_logits + logit_shift) * logit_scale + + if query_mask is not None: + if query_mask.ndim > 1: + query_mask = jnp.expand_dims(query_mask, axis=-2) + pred_logits = jnp.where(query_mask == 0, -1e6, pred_logits) + + return {'pred_logits': pred_logits, 'class_embeddings': image_class_emb} + + +class ImageTextEmbedderBase(nn.Module, metaclass=abc.ABCMeta): + """Embeds images and texts into a shared space.""" + embed_configs: ml_collections.ConfigDict + + @nn.compact + @abc.abstractmethod + def __call__( + self, + *, + images: Optional[jnp.ndarray] = None, + texts: Optional[jnp.ndarray] = None, + train: bool = False + ) -> Tuple[Optional[jnp.ndarray], Optional[jnp.ndarray]]: + pass + + @abc.abstractmethod + def load_backbone(self, params: Params, + backbone_checkpoint_path: Optional[str]) -> Params: + """Loads backbone parameters for this model from a checkpoint.""" + pass + + +class ClipImageTextEmbedder(ImageTextEmbedderBase): + """Embeds images and texts using the CLIP image-text model.""" + embed_configs: ml_collections.ConfigDict + + @nn.compact + def __call__( + self, + *, + images: Optional[jnp.ndarray] = None, + texts: Optional[jnp.ndarray] = None, + train: bool = False + ) -> Tuple[Optional[jnp.ndarray], Optional[jnp.ndarray]]: + """Embeds images and texts using the CLIP image-text model.""" + texts_shape = None + if texts is not None: + texts_shape = texts.shape + if len(texts_shape) > 2: + texts = texts.reshape(-1, texts_shape[-1]) + + model_config = clip_model.CONFIGS[self.embed_configs['variant']] + model_config['vision_return_map'] = True + # Copy over required CLIP config settings: + for name in [ + 'text_stochastic_droplayer_rate', + 'vision_stochastic_droplayer_rate', + ]: + if self.embed_configs.get(name) is not None: + model_config[name] = self.embed_configs[name] + # Copy over optional CLIP config settings: + model_config['vision_native_grid_size'] = self.embed_configs.get( + 'native_image_grid_size' + ) + model = clip_layers.CLIP(**model_config, name='clip') + # Input images should have range (0.0, 1.0). Shift them to CLIP range: + if images is not None: + images = clip_model.normalize_image(images) + # Don't normalize image and text embeddings. + img_emb, txt_emb = model( + images, texts, normalize=False, deterministic=not train) + # Drop or merge class embedding token. + if img_emb is not None: + merge_class_token = self.embed_configs.get('merge_class_token', 'drop') + if merge_class_token == 'drop': + img_emb = img_emb[:, 1:, :] # [B, P, emb_dim] + elif merge_class_token == 'mul-ln': + class_token_out = jnp.broadcast_to( + img_emb[:, :1, :], + np.array(img_emb.shape) - (0, 1, 0)) + img_emb = img_emb[:, 1:, :] * class_token_out # [B, P, emb_dim] + img_emb = nn.LayerNorm(name='merged_class_token')(img_emb) + else: + raise ValueError(f'Unknown merge_class_token: {merge_class_token}') + + if txt_emb is not None and len(texts_shape) > 2: + txt_emb = txt_emb.reshape(texts_shape[:-1] + (-1,)) + return img_emb, txt_emb + + def load_backbone(self, params: Params, + backbone_checkpoint_path: Optional[str]) -> Params: + """Loads backbone parameters for this model from a checkpoint.""" + del backbone_checkpoint_path # Redundant since we use the model variant. + + # This loads only the CLIP-backbone parameters, not the additional + # parameters added by the LayerNorm above. This function is only intended + # for initialization from pretrained CLIP checkpoints, not for loading the + # whole model, which can be done easily in the trainer. + loaded = clip_model.load_model_vars(self.embed_configs.variant)['params'] + loaded = flax.core.unfreeze(loaded) + + # Remove unused parameters: + del loaded['visual']['proj'] + + # Resize positional embeddings if necessary for visual tower. + target_size = params['clip']['visual']['positional_embedding'].shape[0] + loaded_size = loaded['visual']['positional_embedding'].shape[0] + if target_size != loaded_size: + loaded['visual']['positional_embedding'] = utils.resize_posemb( + loaded['visual']['positional_embedding'], target_size) + + # Truncate positional embeddings if necessary for text tower. + target_size = params['clip']['text']['positional_embedding'].shape[0] + loaded_size = loaded['text']['positional_embedding'].shape[0] + if target_size != loaded_size: + logging.info('Truncating text positional embeddigns from %s to %s', + loaded_size, target_size) + loaded['text']['positional_embedding'] = ( + loaded['text']['positional_embedding'][:target_size]) + + # Cast to float32: + loaded = jax.tree_util.tree_map( + lambda x: x.astype(jnp.float32) if x.dtype == jnp.float16 else x, + loaded) + + params['clip'] = loaded + return params + + +class BoxMaskHead(nn.Module): + """Head for predicting masks inside bounding boxes. + + The architecture is informed by https://arxiv.org/abs/2104.00613. + + The head takes the following inputs: + * Predicted boxes and image features (output tokens of the image backbone) + for each box as inputs. + * The input image, for extracting additional low-level image features. + * During training, the ground-truth boxes, to select which predicted boxes + to predict masks for. + + The head performs the following steps: + 1. Apply a small ResNet to the input image to extract low-level features. + 2. Apply ROIAlign to the ResNet features to get per-box low-level features. + 3. Merge per-box low-level features with the image features coming from the + main image backbone. + 4. Apply an Hourglass network to the per-box features, to merge low- and + high-level features. Applying a relatively large/deep per-box network was + found to be useful especially for novel classes in + https://arxiv.org/abs/2104.00613. The outputs of the Hourglass network + are the final segmentation masks. + + Attributes: + mask_size: Integer specifying the width and height of the predicted masks. + roi_align_num_parallel: Number of boxes to call roi_align on in parallel. + Larger values are faster but consume more memory. + stop_box_gradients: Whether to stop the box gradients from flowing back to + the main model. + stop_image_gradients: Whether to stop the image feature gradients from + flowing back to the main model. + num_training_boxes: If set, only the top predicted boxes by IoU with ground- + truth boxes will be used during training. This speeds up training because + most predicted boxes will not be matched to true boxes during training, + and predicting masks for these unmatched boxes takes time but provides no + training signal. + num_mlp_layers_backbone_features: How many MLP layers to apply to the + backbone image features before merging them with the low-level image + features. + image_resnet_width: Width multiplier of the low-level image ResNet. + image_resnet_depth: Depth spec of the low-level image ResNet. + mask_resnet_width: Width multiplier of the per-box Hourglass network. + mask_resnet_depth: Depth spec of the per-box Hourglass network. + add_image_coords: Whether to add image-centric x/y-coordinate maps to the + low-level features. + add_mask_coords: Whether to add mask-centric x/y-coordinate maps to the + per-box features. + resnet_out_width_mult: Width multiplier for the low-level features. + backbone_out_width_mult: Width multiplier for the image backbone features. + """ + mask_size: int + roi_align_num_parallel: int + stop_box_gradients: bool + stop_image_gradients: bool + num_training_boxes: Optional[int] = None + num_mlp_layers_backbone_features: int = 0 + image_resnet_width: float = 0.5 + image_resnet_depth: Union[int, Tuple[int, ...]] = (1, 1, 1, 1) + mask_resnet_width: float = 1.0 + mask_resnet_depth: Union[int, Tuple[int, ...]] = (1, 1, 1, 1) + add_image_coords: bool = False + add_mask_coords: bool = False + resnet_out_width_mult: int = 1 + backbone_out_width_mult: int = 1 + + def _gather_top_boxes(self, boxes, image_backbone_features, true_boxes): + """Gathers the top instances based on IoU with ground-truth boxes.""" + top_k_indices = None + if self.num_training_boxes is not None and true_boxes is not None: + iou_mat, _ = box_utils.box_iou( + boxes1=box_utils.box_cxcywh_to_xyxy(boxes), + boxes2=box_utils.box_cxcywh_to_xyxy(true_boxes), + all_pairs=True) + max_iou = jnp.max(iou_mat, axis=-1) + _, top_k_indices = jax.lax.top_k( + max_iou, self.num_training_boxes or true_boxes.shape[-2]) + gather = jax.vmap(lambda arr, idx: arr[idx]) + boxes = gather(boxes, top_k_indices) + image_backbone_features = gather(image_backbone_features, top_k_indices) + return boxes, image_backbone_features, top_k_indices + + def _scatter_top_masks(self, top_pred_masks, top_k_indices, orig_num_boxes): + """Scatters the top masks back to a full-sized array of all-zero masks.""" + b, _, h, w = top_pred_masks.shape + pred_masks = jnp.zeros_like( + top_pred_masks, shape=(b, orig_num_boxes, h, w)) + scatter = lambda arr, idx, update: arr.at[idx].set(update) + return jax.vmap(scatter)(pred_masks, top_k_indices, top_pred_masks) + + def _roi_align_image_features(self, image_features, boxes): + # To reduce peak memory consumption, some boxes are processed serially. + b, num_instances, _ = boxes.shape + if num_instances % self.roi_align_num_parallel: + raise ValueError('roi_align_num_parallel must evenly divide ' + f'num_instances ({num_instances}).') + serial_batch_size = num_instances // self.roi_align_num_parallel + boxes = jnp.reshape( + boxes, (b, self.roi_align_num_parallel, serial_batch_size, 4)) + roi_align_image = jax.vmap(roi_align_batch_serial, in_axes=[None, 0, None]) + roi_align_batch = jax.vmap(roi_align_image, in_axes=[0, 0, None]) + roi_features = roi_align_batch(image_features, boxes, self.mask_size) + return jnp.reshape( + roi_features, (b, num_instances, self.mask_size, self.mask_size, -1)) + + def _add_coord_channels(self, features): + b, h, w, _ = features.shape + xg, yg = jnp.meshgrid(jnp.linspace(0, 1, w), jnp.linspace(0, 1, h)) + xg = jnp.broadcast_to(xg[None, :, :, None], (b, h, w, 1)) + yg = jnp.broadcast_to(yg[None, :, :, None], (b, h, w, 1)) + return jnp.concatenate([features, xg, yg], axis=-1) + + @nn.compact + def __call__(self, + image: jnp.ndarray, + image_backbone_features: jnp.ndarray, + boxes: jnp.ndarray, + *, + true_boxes: Optional[jnp.ndarray] = None) -> jnp.ndarray: + """Forward pass of the mask head. + + Args: + image: [B, H, W, C] input image. + image_backbone_features: [B, num_boxes, D] image backbone output tokens. + boxes: [B, num_boxes, 4] predicted boxes. + true_boxes: [B, num_true_boxes, 4] ground-truth bounding boxes. Only used + during training. + + Returns: + [B, num_masks, mask_width, mask_width] array of segmentation masks. + + Raises: + ValueError if true boxes are provided but gradients are not stopped. + ValueError if roi_align_num_parallel does not evenly divide the number of + boxes. + """ + if not self.stop_box_gradients and true_boxes is not None: + raise ValueError('stop_box_gradients must be true when using true boxes.') + + if self.stop_box_gradients: + boxes = jax.lax.stop_gradient(boxes) + if self.stop_image_gradients: + image_backbone_features = jax.lax.stop_gradient(image_backbone_features) + + # If true boxes are available, only compute masks for the predictions that + # overlap most with the true boxes (the others won't get matched anyway). + orig_num_boxes = boxes.shape[-2] + top_k_indices = None + if true_boxes is not None: + boxes, image_backbone_features, top_k_indices = self._gather_top_boxes( + boxes, image_backbone_features, true_boxes) + + # Apply a ResNet to get low-level image features: + _, out = ResNet( + num_classes=0, + width=self.image_resnet_width, + depth=self.image_resnet_depth, + name='image_resnet')( + image) + resnet_features = { + k: v for k, v in out.items() if k == 'stem' or k.startswith('stage') + } + + # Reduce number of channels for each stage and resize: + b, h, w, c = resnet_features['stem'].shape + for name, feature in resnet_features.items(): + if name.startswith('stage'): + feature = nn.Dense(c)(feature) + resnet_features[name] = jax.image.resize( + feature, (b, h, w, c), method='linear') + + # Concatenate and project to manageable size: + resnet_features = jnp.concatenate(list(resnet_features.values()), axis=-1) + resnet_features = nn.Dense(c * self.resnet_out_width_mult)(resnet_features) + + if self.add_image_coords: + resnet_features = self._add_coord_channels(resnet_features) + + # Get feature map for each box using RoIAlign: + roi_resnet_features = self._roi_align_image_features(resnet_features, boxes) + + # Process and project backbone features: + for _ in range(self.num_mlp_layers_backbone_features): + image_backbone_features = vit.MlpBlock()(image_backbone_features) + image_backbone_features = nn.Dense(c * self.backbone_out_width_mult)( + image_backbone_features) + + # Concatenate image features with maps created by replicating the + # backbone output features in space: + b, num_instances, h, w, _ = roi_resnet_features.shape + backbone_feature_map = jnp.broadcast_to( + image_backbone_features[:, :, None, None, :], + (b, num_instances, self.mask_size, self.mask_size, + c * self.backbone_out_width_mult)) + roi_features = jnp.concatenate( + [roi_resnet_features, backbone_feature_map], axis=-1) + + # Apply per-mask Hourglass network: + roi_features = jnp.reshape( + roi_features, (b * num_instances, h, w, roi_features.shape[-1])) + if self.add_mask_coords: + roi_features = self._add_coord_channels(roi_features) + pred_masks_batch, _ = HourglassNetwork( + num_classes=1, + width=self.mask_resnet_width, + depth=self.mask_resnet_depth, + name='mask_hourglass')(roi_features) + pred_masks = jnp.reshape(pred_masks_batch, (b, num_instances, h, w)) + + # If we're only predicting masks for the best boxes, scatter them back to + # full size to align with the predicted boxes: + if top_k_indices is not None: + pred_masks = self._scatter_top_masks(pred_masks, top_k_indices, + orig_num_boxes) + + return pred_masks + + def load( + self, params: Params, init_config: ml_collections.ConfigDict + ) -> Params: + """Loads backbone parameters for this model from a checkpoint.""" + params = params.copy() + params['image_resnet'] = bit.load( + params['image_resnet'], + init_config.image_resnet, + None, + dont_load=('head/.*',), + ) + return params + + +def roi_align_batch_serial(feature_map: jnp.ndarray, boxes: jnp.ndarray, + output_width: int) -> jnp.ndarray: + """Applies RoIAlign serially to a batch of boxes.""" + roi_align_single = functools.partial( + roi_align, feature_map, output_width=output_width) + return jax.lax.map(roi_align_single, boxes) + + +def roi_align(feature_map: jnp.ndarray, box: jnp.ndarray, + output_width: int) -> jnp.ndarray: + """Extracts a fixed-size feature map for an ROI from a larger feature map. + + See the Mask-RCNN paper (https://arxiv.org/abs/1703.06870) for details on + ROIAlign. + + Args: + feature_map: [H, W, C] map of features from which to crop a region of + interest. + box: [cx, cy, w, h] bounding box defining the region of interest. + output_width: The output region will be resized to [width, width]. + + Returns: + Crop of size [width, width] taken from feature_map. + """ + input_height, input_width, c = feature_map.shape + output_height = output_width + + cx, cy, w, h = jnp.split(box, 4, axis=-1) + x0 = cx - w / 2 + y0 = cy - h / 2 + w = jnp.maximum(w, 1e-6) + h = jnp.maximum(h, 1e-6) + x_scale = output_width / (w * input_width) + y_scale = output_height / (h * input_height) + + return jax.image.scale_and_translate( + feature_map, + shape=(output_height, output_width, c), + spatial_dims=(0, 1), + scale=jnp.concatenate((y_scale, x_scale)), + translation=jnp.concatenate( + (-y0 * output_height / h, -x0 * output_width / w)), + method='linear', + precision=jax.lax.Precision('fastest')) diff --git a/scenic/projects/owl_vit/losses.py b/scenic/projects/owl_vit/losses.py new file mode 100644 index 0000000000000000000000000000000000000000..2cccbdb85172dbd3cdb762f16e4a910bfbe7211b --- /dev/null +++ b/scenic/projects/owl_vit/losses.py @@ -0,0 +1,148 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Losses.""" +from typing import Optional, Union + +import jax +import jax.numpy as jnp +from scenic.model_lib.base_models import box_utils + +EPS = 1e-6 + + +def sigmoid_cost( + logit: Union[jnp.ndarray, float], + *, + focal_loss: bool = False, + focal_alpha: Optional[float] = None, + focal_gamma: Optional[float] = None +) -> Union[jnp.ndarray, float]: + """Computes the classification cost. + + Relevant code: + https://github.com/fundamentalvision/Deformable-DETR/blob/main/models/matcher.py#L76 + + Args: + logit: Sigmoid classification logit(s). + focal_loss: Whether to apply focal loss for classification cost. + focal_alpha: Alpha scaling factor for focal loss. + focal_gamma: Gamma scaling factor for focal loss. + + Returns: + Classification cost. + """ + neg_cost_class = -jax.nn.log_sigmoid(-logit) + pos_cost_class = -jax.nn.log_sigmoid(logit) + if focal_loss: + neg_cost_class *= (1 - focal_alpha) * jax.nn.sigmoid(logit)**focal_gamma + pos_cost_class *= focal_alpha * jax.nn.sigmoid(-logit)**focal_gamma + return pos_cost_class - neg_cost_class # [B, N, C] + + +def compute_cost( + *, + tgt_labels: jnp.ndarray, + out_logits: jnp.ndarray, + tgt_bbox: jnp.ndarray, + out_bbox: jnp.ndarray, + class_loss_coef: float, + bbox_loss_coef: jnp.ndarray, + giou_loss_coef: jnp.ndarray, + focal_loss: bool = False, + focal_alpha: Optional[float] = None, + focal_gamma: Optional[float] = None, +) -> jnp.ndarray: + """Computes cost matrices for a batch of predictions. + + Relevant code: + https://github.com/facebookresearch/detr/blob/647917626d5017e63c1217b99537deb2dcb370d6/models/matcher.py#L35 + + Args: + tgt_labels: Class labels of shape [B, M, C] (one/multi-hot). Note that the + labels corresponding to empty bounding boxes are not yet supposed to be + filtered out. + out_logits: Classification sigmoid logits of shape [B, N, C]. + tgt_bbox: Target box coordinates of shape [B, M, 4]. Note that the empty + bounding boxes are not yet supposed to be filtered out. + out_bbox: Predicted box coordinates of shape [B, N, 4] + class_loss_coef: Relative weight of classification loss. + bbox_loss_coef: Relative weight of bbox loss. + giou_loss_coef: Relative weight of giou loss. + focal_loss: Whether to apply focal loss for classification cost. + focal_alpha: Alpha scaling factor for focal loss. + focal_gamma: Gamma scaling factor for focal loss. + + Returns: + A cost matrix [B, N, M]. + Number of unpadded columns per batch element [B]. + """ + if focal_loss and (focal_alpha is None or focal_gamma is None): + raise ValueError('For focal loss, focal_alpha and focal_gamma must be set.') + + # Number of non-padding labels for each of the target instances. + n_labels_per_instance = jnp.sum(tgt_labels[..., 1:], axis=-1) + mask = n_labels_per_instance > 0 # [B, M] + + # Make sure padding target is 0 for instances with other labels. + tgt_labels = jnp.concatenate( + [jnp.expand_dims(~mask, -1), tgt_labels[..., 1:]], axis=-1) + + cost_class = sigmoid_cost( # [B, N, C] + out_logits, + focal_loss=focal_loss, + focal_alpha=focal_alpha, + focal_gamma=focal_gamma) + + # Resulting shape is [B, N, M]. + # Note that we do *not* normalize by the number of per-target instances. + cost_class = jnp.einsum('bnl,bml->bnm', cost_class, tgt_labels) + + cost = class_loss_coef * cost_class + + diff = jnp.abs(out_bbox[:, :, None] - tgt_bbox[:, None, :]) # [B, N, M, 4] + cost_bbox = jnp.sum(diff, axis=-1) # [B, N, M] + cost = cost + bbox_loss_coef * cost_bbox + + cost_giou = -box_utils.generalized_box_iou( + box_utils.box_cxcywh_to_xyxy(out_bbox), + box_utils.box_cxcywh_to_xyxy(tgt_bbox), + all_pairs=True) + cost = cost + giou_loss_coef * cost_giou + + mask = mask[:, None] + + # Determine mask value dynamically. + cost_mask_value = jnp.max(jnp.where(mask, cost, -1e10), axis=(1, 2)) + # Special case. + all_masked = jnp.all(~mask, axis=(1, 2)) + cost_mask_value = jnp.where(~all_masked, cost_mask_value, 1.0) + cost_mask_value = cost_mask_value[:, None, None] * 1.1 + 10.0 + + cost = cost * mask + (1.0 - mask) * cost_mask_value + # Guard against NaNs and Infs. + cost = jnp.nan_to_num( + cost, + nan=cost_mask_value, + posinf=cost_mask_value, + neginf=cost_mask_value) + + # Compute the number of unpadded columns for each batch element. It is assumed + # that all padding is trailing padding. + max_num_boxes = tgt_labels.shape[1] + n_cols = jnp.where( + jnp.max(mask, axis=1), + jnp.expand_dims(jnp.arange(1, max_num_boxes + 1), axis=0), 0) + n_cols = jnp.max(n_cols, axis=1) + return cost, n_cols # pytype: disable=bad-return-type # jax-ndarray diff --git a/scenic/projects/owl_vit/main.py b/scenic/projects/owl_vit/main.py new file mode 100644 index 0000000000000000000000000000000000000000..bfe926d9690b4d3d014a7bc5d7d291202ad2089e --- /dev/null +++ b/scenic/projects/owl_vit/main.py @@ -0,0 +1,61 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for OWL-ViT training.""" + +from absl import flags +from absl import logging +from clu import metric_writers +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.owl_vit import models +from scenic.projects.owl_vit import trainer +from scenic.projects.owl_vit.preprocessing import input_pipeline # pylint: disable=unused-import. +from scenic.train_lib import train_utils + +FLAGS = flags.FLAGS + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main funtion for OWL-ViT training.""" + + data_rng, rng = jax.random.split(rng) + + if config.checkpoint: + # When restoring from a checkpoint, change the dataset seed to ensure that + # the example order is new: + train_state = checkpoints.restore_checkpoint(workdir, target=None) + if train_state is not None: + global_step = train_state.get('global_step', 0) + logging.info('Folding global_step %s into dataset seed.', global_step) + data_rng = jax.random.fold_in(data_rng, global_step) + + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + + trainer.train( + rng=rng, + config=config, + model_cls=models.TextZeroShotDetectionModel, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/owl_vit/matching_base_models.py b/scenic/projects/owl_vit/matching_base_models.py new file mode 100644 index 0000000000000000000000000000000000000000..f60520ee0e215e341674ef971b3b2baf10583ced --- /dev/null +++ b/scenic/projects/owl_vit/matching_base_models.py @@ -0,0 +1,692 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base classes for object detection with matching.""" +import abc +import functools +from typing import Any, Callable, Dict, Optional, Tuple + +import jax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib import matchers +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import box_utils +from scenic.model_lib.base_models import model_utils +from scenic.projects.owl_vit import losses as losses_lib + +ArrayDict = Dict[str, jnp.ndarray] +MetricsDict = Dict[str, Tuple[jnp.ndarray, jnp.ndarray]] +PyTree = Any + + +class BaseModelWithMatching(base_model.BaseModel, metaclass=abc.ABCMeta): + """Base model for object detection with matching.""" + + def __init__(self, config: Optional[ml_collections.ConfigDict], + dataset_meta_data: Dict[str, Any]): + """Initialize model. + + Args: + config: Configurations of the model. + dataset_meta_data: Dataset meta data specifies `target_is_onehot`, which + must be True. The padding-objects have label 0. The first legitimate + object has label 1, and so on. + """ + if not dataset_meta_data.get('target_is_onehot', True): + raise ValueError('Targets must be in one-hot/multi-hot format.') + self.losses_and_metrics = ['labels'] + if config is not None: + self.loss_terms_weights = {'loss_class': config.class_loss_coef} + super().__init__(config, dataset_meta_data) + + @property + @abc.abstractmethod + def loss_and_metrics_map( + self) -> Dict[str, Callable[..., Tuple[ArrayDict, MetricsDict]]]: + """Returns a dict that lists all losses for this model.""" + return {'labels': self.labels_losses_and_metrics} + + @abc.abstractmethod + def compute_cost_matrix(self, predictions: ArrayDict, + targets: ArrayDict) -> jnp.ndarray: + """Computes the matching cost matrix. + + Args: + predictions: Dictionary of outputs from a model. + targets: Dictionary of ground truth targets. + Returns: + The matching cost matrix of shape [B, N, M]. + Number of unpadded columns per batch element [B]. + """ + ... + + def matcher( + self, cost: jnp.ndarray, n_cols: Optional[jnp.ndarray] = None + ) -> jnp.ndarray: + """Implements a matching function. + + Matching functions match predicted detections against ground truth + detections and return match indices. + + Args: + cost: Matching cost matrix [B, N, M]. + n_cols: Number of non-padded columns in each cost matrix. + + Returns: + Matched indices in the form of a list of tuples (src, dst), where + `src` and `dst` are indices of corresponding predicted and ground truth + detections. [B, 2, min(N, M)]. + """ + if self.config.matcher == 'hungarian': + matcher_fn = functools.partial(matchers.hungarian_matcher, n_cols=n_cols) + elif self.config.matcher == 'hungarian_cover_tpu': + matcher_fn = matchers.hungarian_cover_tpu_matcher + else: + raise ValueError('Unknown matcher (%s).' % self.config.matcher) + + return jax.lax.stop_gradient(matcher_fn(cost)) + + def labels_losses_and_metrics( + self, + outputs: ArrayDict, + batch: ArrayDict, + indices: jnp.ndarray, + log: bool = True) -> Tuple[ArrayDict, MetricsDict]: + """Classification loss. + + Args: + outputs: Model predictions. For the purpose of this loss, outputs must + have key 'pred_logits'. outputs['pred_logits'] is a nd-array of the + predicted logits of shape [batch-size, num-objects, num-classes]. + batch: Dict that has 'inputs', 'batch_mask' and, 'label' (ground truth). + batch['label'] is a dict. For the purpose of this loss, label dict must + have key 'labels', which the value is an int nd-array of labels with + shape [batch_size, num_boxes, num_classes + 1]. Since the number of + boxes (objects) in each example in the batch could be different, the + input pipeline might add padding boxes to some examples. These padding + boxes are identified based on their class labels. So if the class label + is `0`, i.e., a one-hot vector of [1, 0, 0, ..., 0], the box/object is a + padding object and the loss computation will take that into account. The + input pipeline also pads the partial batches (last batch of eval/test + set with num_example < batch_size). batch['batch_mask'] is used to + identify padding examples which is incorporated to set the weight of + these examples to zero in the loss computations. + indices: Matcher output of shape [batch-size, 2, num-objects] which + conveys source to target pairing of objects. + log: If true, return classification accuracy as well. + + Returns: + loss: Dict with 'loss_class' and other model specific losses. + metrics: Dict with 'loss_class' and other model specific metrics. + """ + assert 'pred_logits' in outputs + assert 'label' in batch + + batch_weights = batch.get('batch_mask') + losses, metrics = {}, {} + targets = batch['label'] + if isinstance(targets, dict): + targets = targets['labels'] + + src_logits = outputs['pred_logits'] + + # Apply the permutation communicated by indices. + src_logits = model_utils.simple_gather(src_logits, indices[:, 0]) + tgt_labels = model_utils.simple_gather(targets, indices[:, 1]) + + unnormalized_loss_class, denom = self._compute_per_example_class_loss( + tgt_labels=tgt_labels, + src_logits=src_logits, + batch_weights=batch_weights, + ) + + metrics['loss_class'] = (unnormalized_loss_class.sum(), denom.sum()) + + if self.config.normalization == 'global': + denom = jax.lax.pmean(denom.sum(), axis_name='batch') + denom = jnp.maximum(denom, 1.) + normalized_loss_class = unnormalized_loss_class.sum() / denom + elif self.config.normalization == 'per_example': + normalized_loss_class = unnormalized_loss_class.sum(axis=1) + denom = jnp.maximum(denom, 1.) + normalized_loss_class = (normalized_loss_class / denom).mean() + else: + raise ValueError(f'Unknown normalization {self.config.normalization}.') + + losses['loss_class'] = normalized_loss_class + + if log: + # Class accuracy for non-padded (label != 0) labels + not_padded = tgt_labels[:, :, 0] == 0 + if batch_weights is not None: + not_padded = not_padded * jnp.expand_dims(batch_weights, axis=1) + num_correct_no_pad = model_utils.weighted_correctly_classified( + src_logits[..., 1:], tgt_labels[..., 1:], weights=not_padded) + metrics['class_accuracy_not_pad'] = (num_correct_no_pad, not_padded.sum()) + + # Sum metrics and normalizers over all replicas. + for k, v in metrics.items(): + metrics[k] = model_utils.psum_metric_normalizer(v) + return losses, metrics + + def _compute_per_example_class_loss( + self, + *, + tgt_labels: jnp.ndarray, + src_logits: jnp.ndarray, + batch_weights: Optional[jnp.ndarray], + ) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Computes the unnormalized per-example classification loss and denom.""" + loss_kwargs = { + 'weights': batch_weights, + } + if self.config.focal_loss: + loss_kwargs['gamma'] = self.config.focal_gamma + loss_kwargs['alpha'] = self.config.focal_alpha + loss_fn = model_utils.focal_sigmoid_cross_entropy + else: + loss_fn = model_utils.weighted_unnormalized_sigmoid_cross_entropy + + # Don't compute loss for the padding index. + unnormalized_loss_class = loss_fn( + src_logits[..., 1:], tgt_labels[..., 1:], **loss_kwargs) + # Sum losses over all classes. The unnormalized_loss_class is of shape + # [bs, 1 + max_num_boxes, num_classes], and after the next line, it becomes + # [bs, 1 + max_num_boxes]. + unnormalized_loss_class = jnp.sum(unnormalized_loss_class, axis=-1) + # Normalize by number of "true" labels after removing padding label. + denom = tgt_labels[..., 1:].sum(axis=[1, 2]) # pytype: disable=wrong-arg-types # jax-ndarray + + if batch_weights is not None: + denom *= batch_weights + + return unnormalized_loss_class, denom + + def get_losses_and_metrics( + self, loss: str, outputs: ArrayDict, + batch: ArrayDict, indices: jnp.ndarray, + **kwargs: Any) -> Tuple[ArrayDict, MetricsDict]: + """A convenience wrapper to all the loss_* functions in this class.""" + assert loss in self.loss_and_metrics_map, f'Unknown loss {loss}.' + return self.loss_and_metrics_map[loss](outputs, batch, indices, **kwargs) + + def loss_function( # pytype: disable=signature-mismatch + self, + outputs: ArrayDict, + batch: ArrayDict, + matches: Optional[jnp.ndarray] = None, + model_params: Optional[PyTree] = None + ) -> Tuple[jnp.ndarray, MetricsDict]: + """Loss and metrics function for matching models. + + Args: + outputs: Model prediction. The exact fields depend on the losses used. + Please see labels_losses_and_metrics and boxes_losses_and_metrics for + details. + batch: Dict that has 'inputs', 'batch_mask' and, 'label' (ground truth). + batch['label'] is a dict where the keys and values depend on the losses + used. Please see labels_losses_and_metrics and boxes_losses_and_metrics + member methods. + matches: Output of a matcher [B, 2, M]. If not provided, will be computed. + model_params: pytree (optional); Parameters of the model. + + Returns: + total_loss: Total loss weighted appropriately using + self.loss_terms_weights. + metrics_dict: Individual loss terms with and without weighting for + logging purposes. + """ + batch = batch.copy() + batch['label'] = batch['label'].copy() + + # Append an instance with "padding" label (i.e., "0" as the class label). + # Shape is [batch, num_instances, num_classes]. This is necessary because + # the matching code requires at least one padding instance, to which + # unmatched instances will be assigned. + label_shape = batch['label']['labels'].shape + num_classes = label_shape[-1] + instance = jax.nn.one_hot(0, num_classes) + reshape_shape = (1,) * (len(label_shape) - 1) + (num_classes,) + broadcast_shape = label_shape[:-2] + (1, num_classes) + instance = jnp.broadcast_to( + jnp.reshape(instance, reshape_shape), broadcast_shape) + batch['label']['labels'] = jnp.concatenate( + [batch['label']['labels'], instance], axis=-2) + if 'boxes' in batch['label']: + instance = jnp.zeros_like(batch['label']['boxes'][..., :1, :]) + batch['label']['boxes'] = jnp.concatenate( + [batch['label']['boxes'], instance], axis=-2) + + # Compute matches if not provided. + if matches is None: + if 'cost' not in outputs: + cost, n_cols = self.compute_cost_matrix(outputs, batch['label']) # pytype: disable=wrong-arg-types # jax-ndarray + else: + cost, n_cols = outputs['cost'], outputs.get('cost_n_cols') + matches = self.matcher(cost, n_cols) + + if not isinstance(matches, (list, tuple)): + # Ensure matches come as a sequence. + matches = [matches] + + # Pad matches if the matching is not complete (i.e. the number of + # predicted instances is larger than the number of gt instances). + num_pred = outputs['pred_logits'].shape[-2] + + def pad_matches(match): + batch_size, _, num_matched = match.shape # [B, 2, M] + if num_pred > num_matched: + + def get_unmatched_indices(row, ind): + return jax.lax.top_k(jnp.logical_not(row.at[ind].set(1)), + k=num_pred - num_matched) + + get_unmatched_indices = jax.vmap(get_unmatched_indices) + + indices = jnp.zeros((batch_size, num_pred), dtype=jnp.bool_) + _, indices = get_unmatched_indices(indices, match[:, 0, :]) + indices = jnp.expand_dims(indices, axis=1) + + padding = jnp.concatenate( + [indices, jnp.full(indices.shape, fill_value=num_matched - 1)], + axis=1) + return jnp.concatenate([match, padding], axis=-1) + return match + + matches = [pad_matches(match) for match in matches] + + indices = matches[0] + + # Compute all the requested losses and metrics. + loss_dict = {} + metrics_dict = {} + for loss_name in self.losses_and_metrics: + loss, metrics = self.get_losses_and_metrics(loss_name, outputs, batch, + indices) + loss_dict.update(loss) + metrics_dict.update(metrics) + + # Compute the total loss by combining loss_dict with loss_terms_weights. + total_loss = [] + for k, v in loss_dict.items(): + if k in self.loss_terms_weights: + total_loss.append(self.loss_terms_weights[k] * v) + total_loss = sum(total_loss) + + if self.config.get('l2_decay_factor') is not None: + l2_loss = model_utils.l2_regularization(model_params) + metrics_dict['l2_loss'] = (l2_loss, 1) + total_loss = total_loss + 0.5 * self.config.l2_decay_factor * l2_loss + + # Process metrics dictionary to generate final unnormalized metrics. + metrics = self.get_metrics(metrics_dict) + metrics['total_loss'] = (total_loss, 1) + return total_loss, metrics # pytype: disable=bad-return-type # jax-ndarray + + def get_metrics(self, metrics_dict: MetricsDict) -> MetricsDict: + """Arrange loss dictionary into a metrics dictionary.""" + metrics = {} + # Some metrics don't get scaled, so no need to keep their unscaled version, + # i.e. those that are not in self.loss_terms_weights.keys() + for k, v in metrics_dict.items(): + loss_term = self.loss_terms_weights.get(k) + if loss_term is not None: + metrics[f'{k}_unscaled'] = v + metrics[k] = (loss_term * v[0], v[1]) + else: + metrics[k] = v + + return metrics + + +class ObjectDetectionModel(BaseModelWithMatching): + """Base model for object detection with matching.""" + + def __init__(self, config: Optional[ml_collections.ConfigDict], + dataset_meta_data: Dict[str, Any]): + """Initializes detection model. + + Args: + config: Hyper-parameter dictionary. + dataset_meta_data: Dataset meta data specifies `target_is_onehot`, which + must be True. The padding-objects have label 0. The first legitimate + object has label 1, and so on. + """ + super().__init__(config, dataset_meta_data) + self.losses_and_metrics.append('boxes') + if config is not None: + self.loss_terms_weights['loss_bbox'] = config.bbox_loss_coef + self.loss_terms_weights['loss_giou'] = config.giou_loss_coef + + @property + def loss_and_metrics_map( + self) -> Dict[str, Callable[..., Tuple[ArrayDict, MetricsDict]]]: + """Returns a dict that lists all losses for this model.""" + return { + **super().loss_and_metrics_map, + 'boxes': self.boxes_losses_and_metrics, + } + + def compute_cost_matrix(self, predictions: ArrayDict, + targets: ArrayDict) -> jnp.ndarray: + """Implements the matching cost matrix computations. + + Args: + predictions: Dictionary of outputs from a model. Must contain 'pred_boxes' + and 'pred_probs' keys with shapes [B, N, 4] and [B, N, L] respectively. + targets: Dictionary of ground truth targets. Must contain 'boxes' and + 'labels' keys of shapes [B, M, 4] and [B, M, L] respectively. + + Returns: + The matching cost matrix of shape [B, N, M]. + Number of unpadded columns per batch element [B]. + """ + return losses_lib.compute_cost( + tgt_labels=targets['labels'], + out_logits=predictions['pred_logits'], + tgt_bbox=targets['boxes'], + out_bbox=predictions['pred_boxes'], + class_loss_coef=self.config.class_loss_coef, + bbox_loss_coef=self.config.bbox_loss_coef, + giou_loss_coef=self.config.giou_loss_coef, + focal_loss=self.config.focal_loss, + focal_alpha=self.config.get('focal_alpha'), + focal_gamma=self.config.get('focal_gamma'), + ) + + def boxes_losses_and_metrics( + self, + outputs: ArrayDict, + batch: ArrayDict, + indices: jnp.ndarray) -> Tuple[ArrayDict, MetricsDict]: + """Bounding box losses: L1 regression loss and GIoU loss. + + Args: + outputs: dict; Model predictions. For the purpose of this loss, outputs + must have key 'pred_boxes'. outputs['pred_boxes'] is a nd-array of the + predicted box coordinates in (cx, cy, w, h) format. This nd-array has + shape [batch-size, num-boxes, 4]. + batch: dict; that has 'inputs', 'batch_mask' and, 'label' (ground truth). + batch['label'] is a dict. For the purpose of this loss, batch['label'] + must have key 'boxes', which the value has the same format as + outputs['pred_boxes']. Additionally in batch['label'], key 'labels' is + required that should match the specs defined in the member function + `labels_losses_and_metrics`. This is to decide which boxes are invalid + and need to be ignored. Invalid boxes have class label 0. If + batch['batch_mask'] is provided it is used to weight the loss for + different images in the current batch of examples. + indices: list[tuple[nd-array, nd-array]]; Matcher output which conveys + source to target pairing of objects. + + Returns: + loss: dict with keys 'loss_bbox', 'loss_giou'. These are + losses averaged over the batch. Therefore they have shape []. + metrics: dict with keys 'loss_bbox' and 'loss_giou`. + These are metrics psumed over the batch. Therefore they have shape []. + """ + assert 'pred_boxes' in outputs + assert 'label' in batch + + targets = batch['label'] + assert 'boxes' in targets + assert 'labels' in targets + losses, metrics = {}, {} + batch_weights = batch.get('batch_mask') + + src_boxes = model_utils.simple_gather(outputs['pred_boxes'], indices[:, 0]) + tgt_boxes = model_utils.simple_gather(targets['boxes'], indices[:, 1]) + tgt_labels = targets['labels'] + + # Some of the boxes are padding. We want to discount them from the loss. + n_labels_per_instance = jnp.sum(tgt_labels[..., 1:], axis=-1) + tgt_not_padding = n_labels_per_instance > 0 # [B, M] + + # tgt_is_padding has shape [batch-size, num-boxes]. + # Align this with the model predictions using simple_gather. + tgt_not_padding = model_utils.simple_gather(tgt_not_padding, indices[:, 1]) + + src_boxes_xyxy = box_utils.box_cxcywh_to_xyxy(src_boxes) + tgt_boxes_xyxy = box_utils.box_cxcywh_to_xyxy(tgt_boxes) + unnormalized_loss_giou = 1 - box_utils.generalized_box_iou( + src_boxes_xyxy, tgt_boxes_xyxy, all_pairs=False) + + unnormalized_loss_bbox = model_utils.weighted_box_l1_loss( + src_boxes_xyxy, + tgt_boxes_xyxy, + weights=batch_weights, + ).sum(axis=2) + + denom = tgt_not_padding.sum(axis=1) + if batch_weights is not None: + denom *= batch_weights + unnormalized_loss_giou = model_utils.apply_weights( + unnormalized_loss_giou, batch_weights) + + unnormalized_loss_bbox *= tgt_not_padding + unnormalized_loss_giou *= tgt_not_padding + + if self.config.normalization != 'per_example': + # Normalize by number of boxes in batch. + denom = jnp.maximum(jax.lax.pmean(denom.sum(), axis_name='batch'), 1) + normalized_loss_bbox = unnormalized_loss_bbox.sum() / denom + normalized_loss_giou = unnormalized_loss_giou.sum() / denom + else: # Normalize by number of boxes in image. + denom = jnp.maximum(denom, 1.) + normalized_loss_bbox = (unnormalized_loss_bbox.sum(axis=1) / denom).mean() + normalized_loss_giou = (unnormalized_loss_giou.sum(axis=1) / denom).mean() + + losses['loss_bbox'] = normalized_loss_bbox + metrics['loss_bbox'] = (normalized_loss_bbox, 1.) + losses['loss_giou'] = normalized_loss_giou + metrics['loss_giou'] = (normalized_loss_giou, 1.) + + # Sum metrics and normalizers over all replicas. + for k, v in metrics.items(): + metrics[k] = model_utils.psum_metric_normalizer(v) # pytype: disable=wrong-arg-types # jax-ndarray + return losses, metrics # pytype: disable=bad-return-type # jax-ndarray + + +class ObjectDetectionModelWithMasks(ObjectDetectionModel): + """Base model for object detection with matching including a mask loss. + + The masks are predicted one for each instance and must be in direct + correspondence with the bounding boxes (both predicted and ground truth). + + In practice this is typically used to predict cropped masks within the + predicted bounding boxes, similar to what has been done with, for example, + mask RCNN. Right now the cropping must occur outside this class. + """ + + def __init__(self, config: Optional[ml_collections.ConfigDict], + dataset_meta_data: Dict[str, Any]): + """Initializes detection model. + + Args: + config: Hyper-parameter dictionary. + dataset_meta_data: Dataset meta data specifies `target_is_onehot`, which + must be True. The padded objects have label 0. The first + legitimate object has label 1, and so on. + """ + super().__init__(config, dataset_meta_data) + self.losses_and_metrics.append('masks') + if config is not None: + self.loss_terms_weights['loss_mask'] = config.mask_loss_coef + + @property + def loss_and_metrics_map( + self) -> Dict[str, Callable[..., Tuple[ArrayDict, MetricsDict]]]: + """Returns a dict that lists all losses for this model.""" + return { + **super().loss_and_metrics_map, + 'boxes': self.boxes_losses_and_metrics, + 'masks': self.masks_losses_and_metrics, + } + + def masks_losses_and_metrics( + self, + outputs: ArrayDict, + batch: ArrayDict, + indices: jnp.ndarray) -> Tuple[ArrayDict, MetricsDict]: + """Mask losses - pixelwise cross entropy a la mask-RCNN. + + Note that it is assumed all masks, both predicted and ground truth, have + been resized to a fixed height and width (i.e., allowing distortion of the + aspect ratio). + + Args: + outputs: Model predictions. For the purpose of this loss, outputs + must have key 'pred_masks'. outputs['pred_masks'] is a nd-array of the + predicted masks with (batch, num-instances, h, w) shape, type float32 + in range [0, 1]. + batch: Has keys 'inputs', 'batch_mask' and, 'label' (ground truth). + batch['label'] is a dict. For the purpose of this loss, batch['label'] + must have key 'masks', which the value has the same format + as outputs['pred_masks']. Additionally in batch['label'], key + 'valid_masks'. This is to decide which masks are invalid + and need to be ignored. Invalid masks have label 0. If + batch['batch_mask'] is provided it is used to weight the loss for + different images in the current batch of examples. + indices: Matcher output which conveys source to target pairing of objects. + + Returns: + loss: Has keys 'loss_mask'. This is mask losses averaged over the batch. + Therefore it has shape []. + metrics: Has keys 'loss_mask'. This is the metrics psumed over the batch. + Therefore it has shape []. + """ + assert 'pred_masks' in outputs + assert 'label' in batch + + targets = batch['label'] + assert 'masks' in targets + assert 'valid_masks' in targets + assert targets['valid_masks'].shape[1] == targets['masks'].shape[1] + assert targets['valid_masks'].shape[1] == targets['boxes'].shape[1] + losses, metrics = {}, {} + batch_weights = batch.get('batch_mask') + + pred_masks = model_utils.simple_gather(outputs['pred_masks'], indices[:, 0]) + tgt_masks = model_utils.simple_gather(targets['masks'], indices[:, 1]) + tgt_not_padding = model_utils.simple_gather(targets['valid_masks'], + indices[:, 1]) + + src_boxes = model_utils.simple_gather(outputs['pred_boxes'], indices[:, 0]) + tgt_boxes = model_utils.simple_gather(targets['boxes'], indices[:, 1]) + + if self.config.weight_mask_loss_by_iou: + src_boxes_xyxy = box_utils.box_cxcywh_to_xyxy(src_boxes) + tgt_boxes_xyxy = box_utils.box_cxcywh_to_xyxy(tgt_boxes) + box_iou, _ = box_utils.box_iou( + src_boxes_xyxy, tgt_boxes_xyxy, all_pairs=False) + loss_weight = jax.lax.stop_gradient(box_iou) + else: + loss_weight = 1.0 + + if self.config.move_true_to_pred_mask: + tgt_masks = jax.vmap(jax.vmap(move_true_to_pred_mask))( + true_mask=tgt_masks, + true_box=tgt_boxes, + pred_box=jax.lax.stop_gradient(src_boxes)) + + unnormalized_ce_loss_mask = ( + model_utils.weighted_unnormalized_sigmoid_cross_entropy( + logits=pred_masks, multi_hot_targets=tgt_masks + ) + ) + # Take the mean across the spatial height, width of the masks. + unnormalized_ce_loss_mask = jnp.mean( + unnormalized_ce_loss_mask, axis=(-1, -2)) + unnormalized_ce_loss_mask *= loss_weight # Weigh loss by box overlap. + denom = tgt_not_padding.sum(axis=1) + if batch_weights is not None: + denom *= batch_weights + unnormalized_ce_loss_mask = model_utils.apply_weights( + unnormalized_ce_loss_mask, batch_weights) + unnormalized_ce_loss_mask *= tgt_not_padding + norm_type = self.config.get('normalization') + + if norm_type != 'per_example': + denom = jnp.maximum(jax.lax.pmean(denom.sum(), axis_name='batch'), 1) + normalized_ce_loss_mask = unnormalized_ce_loss_mask.sum() / denom + else: + denom = jnp.maximum(denom, 1.) + normalized_ce_loss_mask = (unnormalized_ce_loss_mask.sum(axis=1) / + denom).mean() + + losses['loss_mask'] = normalized_ce_loss_mask.sum() + metrics['loss_mask'] = (normalized_ce_loss_mask.sum(), 1.) + + # Sum metrics and normalizers over all replicas. + for k, v in metrics.items(): + metrics[k] = model_utils.psum_metric_normalizer(v) # pytype: disable=wrong-arg-types # jax-ndarray + return losses, metrics # pytype: disable=bad-return-type # jax-ndarray + + +def move_true_to_pred_mask(*, true_mask, true_box, pred_box): + """Scales and translates the true mask into the pred box reference frame. + + If predicted and true boxes are not identical, then the segmentation masks + within the boxes will be misaligned. This function scales and translates the + true mask so that it aligns with the predicted mask, based on the positions + of the true and predicted bounding boxes. + + This decouples the mask loss from the bounding box locations. In other words, + the mask loss will be exactly as if we were using full-image masks, rather + than within-box masks. + + Args: + true_mask: Array of shape (n, n) containing the true mask for the area + inside the true bounding box. + true_box: True (cx, cy, w, h) bounding box. + pred_box: Predicted (cx, cy, w, h) bounding box. + + Returns: + New array of shape (n, n) containing the true mask for the area inside the + predicted box. + + Raises: + ValueError if true_mask is not a single square 2D mask. + """ + if true_mask.ndim != 2: + raise ValueError(f'Expected a single 2D masks, got shape {true_mask.shape}') + if true_mask.shape[0] != true_mask.shape[1]: + raise ValueError(f'Expected mask to be square, got shape {true_mask.shape}') + + cx_true, cy_true, w_true, h_true = jnp.split(true_box, 4, axis=-1) + cx_pred, cy_pred, w_pred, h_pred = jnp.split(pred_box, 4, axis=-1) + w_pred = jnp.maximum(w_pred, 1e-6) + h_pred = jnp.maximum(h_pred, 1e-6) + + # Get top-left corner coordinates: + x0_true = cx_true - w_true / 2 + y0_true = cy_true - h_true / 2 + x0_pred = cx_pred - w_pred / 2 + y0_pred = cy_pred - h_pred / 2 + + # Get coordinates of the true box in the reference frame of the pred box: + x0_true_wrt_pred = (x0_true - x0_pred) / w_pred + y0_true_wrt_pred = (y0_true - y0_pred) / h_pred + w_true_wrt_pred = w_true / w_pred + h_true_wrt_pred = h_true / h_pred + + # Scale and translate true masks: + width = true_mask.shape[0] + return jax.image.scale_and_translate( + true_mask, + shape=true_mask.shape, + spatial_dims=(0, 1), + scale=jnp.concatenate((h_true_wrt_pred, w_true_wrt_pred)), + translation=width * jnp.concatenate((y0_true_wrt_pred, x0_true_wrt_pred)), + method='linear') diff --git a/scenic/projects/owl_vit/models.py b/scenic/projects/owl_vit/models.py new file mode 100644 index 0000000000000000000000000000000000000000..7ebccaabf4957cc49028d5be6e2f3579caebf761 --- /dev/null +++ b/scenic/projects/owl_vit/models.py @@ -0,0 +1,423 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of the OWL-ViT detection model.""" + +import copy +from typing import Any, Dict, List, Mapping, Optional + +import flax.linen as nn +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import ml_collections +from scenic.projects.owl_vit import layers +from scenic.projects.owl_vit import matching_base_models +from scenic.projects.owl_vit import utils +from scenic.projects.owl_vit.clip import model as clip_model +from scenic.projects.owl_vit.clip import tokenizer as clip_tokenizer + + +Params = layers.Params + + +def _fix_old_layernorm(transformer_params): + """Fix layer norm numbering of old checkpoints.""" + if ( + 'resblocks.0' in transformer_params + and 'ln_0' in transformer_params['resblocks.0'] + ): + # This checkpoint has the new format. + return transformer_params + + fixed_params = copy.deepcopy(transformer_params) + for resblock in fixed_params.values(): + resblock['ln_0'] = resblock.pop('ln_1') + resblock['ln_1'] = resblock.pop('ln_2') + + return fixed_params + + +def _fix_resblock_naming(transformer_params): + """Fix resblock naming of old checkpoints.""" + if 'resblocks_0' in transformer_params: + # This checkpoint is already converted. + return transformer_params + + fixed_params = copy.deepcopy(transformer_params) + old_keys = list(fixed_params.keys()) + for old_key in old_keys: + new_key = old_key.replace('.', '_') + fixed_params[new_key] = fixed_params.pop(old_key) + + return fixed_params + + +def _fix_old_checkpoints(params): + """Makes old checkpoints forward-compatible.""" + if 'clip' in params['backbone']: + # Fix the layer norm indexing. + params['backbone']['clip']['visual']['transformer'] = _fix_old_layernorm( + params['backbone']['clip']['visual']['transformer'] + ) + params['backbone']['clip']['text']['transformer'] = _fix_old_layernorm( + params['backbone']['clip']['text']['transformer'] + ) + + # Fix the resblock naming. + params['backbone']['clip']['visual']['transformer'] = _fix_resblock_naming( + params['backbone']['clip']['visual']['transformer'] + ) + params['backbone']['clip']['text']['transformer'] = _fix_resblock_naming( + params['backbone']['clip']['text']['transformer'] + ) + return params + + +class TextZeroShotDetectionModule(nn.Module): + """Text-query-based OWL-ViT model. + + This module computes joint text and image embeddings which are then + used for localized prediction of bounding boxes and classes. + + Attributes: + body_configs: Configurations of the image-text module. + objectness_head_configs: Configurations for the (optional) objectness head. + mask_head_configs: Configurations for the (optional) mask head. + normalize: Whether to normalize the output of the model and the + label_embeddings before computing the class logits. + box_bias: Type of box bias - one of 'location', 'size' or 'both'. + """ + + body_configs: ml_collections.ConfigDict + objectness_head_configs: Optional[ml_collections.ConfigDict] = None + mask_head_configs: Optional[ml_collections.ConfigDict] = None + normalize: bool = False + box_bias: str = 'both' + + def tokenize(self, text: str, max_token_len: int = 16) -> List[int]: + return clip_tokenizer.tokenize(text, max_token_len) + + @nn.nowrap + def load_variables(self, checkpoint_path: str) -> Mapping[str, Any]: + restored = checkpoints.restore_checkpoint(checkpoint_path, target=None) + if 'optimizer' in restored: + # Pre-Optax checkpoint: + params = restored['optimizer']['target'] + else: + params = restored['params'] + params = _fix_old_checkpoints(params) + return {'params': params} + + def setup(self): + + self._embedder = layers.ClipImageTextEmbedder( + self.body_configs, name='backbone') + + if self.objectness_head_configs is not None: + self._objectness_head = layers.PredictorMLP( + mlp_dim=None, out_dim=1, num_layers=3, + out_activation=None, name='objectness_head') + + self._class_head = layers.ClassPredictor( + out_dim=clip_model.CONFIGS[self.body_configs.variant]['embed_dim'], + normalize=self.normalize, name='class_head') + + self._box_head = layers.PredictorMLP( + mlp_dim=None, out_dim=4, num_layers=3, + out_activation=None, name='obj_box_head') + + if self.mask_head_configs is not None: + self._mask_head = layers.BoxMaskHead( + **self.mask_head_configs, # pylint: disable=not-a-mapping + name='obj_mask_head') + + def objectness_predictor( + self, image_features: jnp.ndarray, train: bool = False + ) -> Dict[str, jnp.ndarray]: + """Predicts the probability that each image feature token is an object. + + Args: + image_features: Features extracted from the image. + train: Whether or not we are in training mode. + + Returns: + Objectness scores, in a dictionary. + """ + del train + # TODO(b/215588365): Need local variable to work around pytype bug. + objectness_head_configs = self.objectness_head_configs + if objectness_head_configs is None: + raise ValueError('Must pass objectness_configs to use objectness head.') + if objectness_head_configs.stop_gradient: + image_features = jax.lax.stop_gradient(image_features) + objectness_logits = self._objectness_head(image_features) + return {'objectness_logits': objectness_logits[..., 0]} + + def box_predictor( + self, + *, + image_features: jnp.ndarray, + feature_map: jnp.ndarray, + keep_image_tokens: Optional[jnp.ndarray] = None, + ) -> Dict[str, jnp.ndarray]: + """Predicts bounding boxes from image features. + + Args: + image_features: Features extracted from the image, flattened into a 1d + sequence of tokens. + feature_map: A 2d spatial re-arrangement of image_features. + keep_image_tokens: If keep_image_tokens is not None, this indicates that + image_features is a subset of tokens of the full grid. keep_image_tokens + then contains the 1d indices of the kept tokens within the full token + sequence. In that case, feature_map will contain dummy values at the + dropped locations. + + Returns: + List of predicted boxes (cxcywh normalized to 0, 1) nested within + a dictionary. + """ + # Bounding box detection head [b, num_patches, 4]. + pred_boxes = self._box_head(image_features) + + # We compute the location of each token on the grid and use it to compute + # a bias for the bbox prediction, i.e., each token is biased towards + # predicting its location on the grid as the center. + box_bias = utils.compute_box_bias( + feature_map=feature_map, kind=self.box_bias + ) + + if keep_image_tokens is not None: + box_bias = jnp.take_along_axis( + box_bias[None, ...], keep_image_tokens[..., None], axis=-2 + ) + + pred_boxes += box_bias + pred_boxes = nn.sigmoid(pred_boxes) + return {'pred_boxes': pred_boxes} + + def class_predictor( + self, + image_features: jnp.ndarray, + query_embeddings: Optional[jnp.ndarray] = None, + query_mask: Optional[jnp.ndarray] = None) -> Dict[str, jnp.ndarray]: + """Applies the class head to the image features. + + Args: + image_features: Feature tokens extracted by the image embedder. + query_embeddings: Optional list of text (or image) embeddings. If no + embeddings are provided, no logits will be computed and only the class + embeddings for the image will be returned. + query_mask: Must be provided with query_embeddings. A mask indicating + which query embeddings are valid. + + Returns: + A dictionary containing the class_embeddings and the pred_logits if + query_embeddings and query_mask are provided. + """ + return self._class_head(image_features, query_embeddings, query_mask) + + def mask_predictor(self, + image, + image_tokens, + boxes, + *, + true_boxes=None) -> Dict[str, jnp.ndarray]: + """Predicts (cropped) segmentation masks from the image features. + + Args: + image: Input image, for extracting low-level image features. + image_tokens: High-level features from the image embedder. + boxes: Predicted bounding boxes corresponding to the image tokens. + true_boxes: For filtering mask head predictions during training. + + Returns: + A dictionary containing the predicted segmentation masks. The mask at + index i corresponds to the predicted box in `pred_boxes` at index i. + """ + # TODO(b/215588365): Need local variable to work around pytype bug. + mask_head_configs = self.mask_head_configs + if mask_head_configs is None: + raise ValueError('Must pass mask_head_configs to use mask head.') + pred_masks = self._mask_head( + image, image_tokens, boxes, true_boxes=true_boxes) + batch_size = image_tokens.shape[0] + mask_size = mask_head_configs.mask_size + return { + 'pred_masks': + jnp.reshape(pred_masks, (batch_size, -1, mask_size, mask_size)) + } + + def image_embedder(self, images: jnp.ndarray, train: bool) -> jnp.ndarray: + """Embeds images into feature maps. + + Args: + images: images of shape (batch, input_size, input_size, 3), scaled to the + input range defined in the config. Padding should be at the bottom right + of the image. + train: Whether or not we are in training mode. + + Returns: + A 2D map of image features. + """ + image_features, _ = self._embedder(images=images, train=train) + return utils.seq2img(images, image_features) + + def text_embedder(self, text_queries: jnp.ndarray, + train: bool) -> jnp.ndarray: + """Embeds text into features. + + Args: + text_queries: jnp.int32 tokenized text queries of shape [..., num_tokens]. + train: Whether or not we are in training mode. + + Returns: + An array of the same shape as text_queries, except for the last dimension, + which is num_dimensions instead of num_tokens. + """ + _, text_features = self._embedder(texts=text_queries, train=train) + return text_features # pytype: disable=bad-return-type # jax-ndarray + + def __call__(self, + inputs: jnp.ndarray, + text_queries: jnp.ndarray, + train: bool, + *, + true_boxes: Optional[jnp.ndarray] = None, + debug: bool = False) -> Mapping[str, Any]: + """Applies TextZeroShotDetectionModule on the input. + + Args: + inputs: Images [batch_size, height, width, 3]. + text_queries: Queries to score boxes on. Queries starting with 0 stand for + padding [batch_size=b, num_queries=q, max_query_length=l]. + train: Whether it is training. + true_boxes: For filtering mask head predictions during training. + debug: Unused. + + Returns: + Outputs dict with items: + pred_logits: Class logits [b, num_patches, num_queries]. + pred_boxes: Predicted bounding boxes [b, num_patches, 4]. + feature_map: Image embeddings 2d feature map [b, sp, sp, img_emb_dim]. + """ + del debug + if not train and true_boxes is not None: + raise ValueError('True boxes should only be supplied during training.') + + keep_tokens = None + + # Embed images: + feature_map = self.image_embedder(inputs, train) + b, h, w, d = feature_map.shape + image_features = jnp.reshape(feature_map, (b, h * w, d)) + + # Embed queries: + query_embeddings = self.text_embedder(text_queries, train) + # If first token is 0, then this is a padding query [b, q]. + query_mask = (text_queries[..., 0] > 0).astype(jnp.float32) + + outputs = { + 'feature_map': feature_map, + 'query_embeddings': query_embeddings, + } + + # Get objectness scores: + if self.objectness_head_configs is not None: + outputs.update(self.objectness_predictor(image_features)) + + # During training, sample top tokens by objectness: + num_instances = image_features.shape[-2] + top_k = self.body_configs.get('objectness_top_k', num_instances) + if train and (0 < top_k < num_instances): + if 'objectness_logits' not in outputs: + raise ValueError('Need objectness head to sample by objectness.') + outputs['objectness_logits'], keep_tokens = jax.lax.top_k( + outputs['objectness_logits'], k=self.body_configs.objectness_top_k + ) + image_features = jnp.take_along_axis( + image_features, keep_tokens[..., None], axis=-2 + ) + + # Classification [b, num_patches, num_queries]: + outputs.update( + self.class_predictor(image_features, query_embeddings, query_mask)) + + # Predict boxes: + outputs.update( + self.box_predictor( + image_features=image_features, + feature_map=feature_map, + keep_image_tokens=keep_tokens, + ) + ) + + # Predict masks: + if self.mask_head_configs is not None: + outputs.update( + self.mask_predictor( + inputs, + image_features, + outputs['pred_boxes'], + true_boxes=true_boxes)) + + return outputs + + def load( + self, params: Params, + init_config: ml_collections.ConfigDict) -> Params: + """Loads backbone parameters for this model from a backbone checkpoint.""" + if init_config.get('codebase') == 'clip': + # Initialize backbone parameters from an external codebase. + params['backbone'] = self._embedder.load_backbone( + params['backbone'], init_config.get('checkpoint_path')) + else: + # Initialize all parameters from a Scenic checkpoint. + restored_train_state = checkpoints.restore_checkpoint( + init_config.checkpoint_path, target=None) + if 'optimizer' in restored_train_state: + # Pre-Optax checkpoint: + params = restored_train_state['optimizer']['target'] + else: + params = restored_train_state['params'] + + # Explicitly removing unused parameters after loading: + params['class_head'].pop('padding', None) + params['class_head'].pop('padding_bias', None) + + params = _fix_old_checkpoints(params) + + return params + + +class TextZeroShotDetectionModel(matching_base_models.ObjectDetectionModel): + """OWL-ViT model for detection.""" + + def build_flax_model(self) -> nn.Module: + return TextZeroShotDetectionModule( + body_configs=self.config.model.body, + normalize=self.config.model.normalize, + box_bias=self.config.model.box_bias) + + +class TextZeroShotDetectionModelWithMasks( + matching_base_models.ObjectDetectionModelWithMasks): + """ViT+ model for detection that also predicts masks.""" + + def build_flax_model(self) -> nn.Module: + return TextZeroShotDetectionModule( + body_configs=self.config.model.body, + mask_head_configs=self.config.model.mask_head, + normalize=self.config.model.normalize, + box_bias=self.config.model.box_bias) diff --git a/scenic/projects/owl_vit/notebooks/OWL_ViT_Export_JAX_model_to_TensorFlow_SavedModel.ipynb b/scenic/projects/owl_vit/notebooks/OWL_ViT_Export_JAX_model_to_TensorFlow_SavedModel.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..a4708e6f46dcfc135682c7c62dce333339134cce --- /dev/null +++ b/scenic/projects/owl_vit/notebooks/OWL_ViT_Export_JAX_model_to_TensorFlow_SavedModel.ipynb @@ -0,0 +1,924 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "PaiG8Ulc75xc" + }, + "source": [ + "# OWL-ViT: Export JAX model to TensorFlow SavedModel" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5-Yta1B7rtWu" + }, + "source": [ + "# Download and install OWL-ViT\n", + "\n", + "OWL-ViT is implemented in [Scenic](https://github.com/google-research/scenic). The cell below installs the Scenic codebase from GitHub and imports it." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 14247, + "status": "ok", + "timestamp": 1657115718294, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -120 + }, + "id": "zWF7RkeZ4B_N", + "outputId": "df4db955-9599-479d-b76b-8aee36ec53b8" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Done.\n" + ] + } + ], + "source": [ + "!rm -rf *\n", + "!rm -rf .config\n", + "!rm -rf .git\n", + "!git clone https://github.com/google-research/scenic.git .\n", + "!python -m pip install -q .\n", + "!python -m pip install -r ./scenic/projects/owl_vit/requirements.txt\n", + "\n", + "# Also install big_vision, which is needed for the mask head:\n", + "!mkdir /big_vision\n", + "!git clone https://github.com/google-research/big_vision.git /big_vision\n", + "!python -m pip install -r /big_vision/big_vision/requirements.txt\n", + "import sys\n", + "sys.path.append('/big_vision/')\n", + "!echo \"Done.\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Un01v3C1D9z1" + }, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "tf.compat.v1.enable_eager_execution()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9MKZb6G3-H92" + }, + "outputs": [], + "source": [ + "import functools\n", + "import os\n", + "\n", + "import jax\n", + "import jax.numpy as jnp\n", + "from matplotlib import pyplot as plt\n", + "import numpy as np\n", + "from scenic.common_lib import export_utils\n", + "from scenic.projects.owl_vit import models\n", + "from scenic.projects.owl_vit.clip import model as clip_model\n", + "from scenic.projects.owl_vit.configs import clip_b32\n", + "from scipy.special import expit as sigmoid\n", + "import skimage\n", + "from skimage import io as skimage_io\n", + "from skimage import transform as skimage_transform" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3WatINO87evx" + }, + "source": [ + "# Choose config" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "k4RKu3Vv5k_3" + }, + "outputs": [], + "source": [ + "config = clip_b32.get_config(init_mode='canonical_checkpoint')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6c12cyRK7oOD" + }, + "source": [ + "# Load the model and variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "s421Kpp7sXjD" + }, + "outputs": [], + "source": [ + "module = models.TextZeroShotDetectionModule(\n", + " body_configs=config.model.body,\n", + " normalize=config.model.normalize,\n", + " box_bias=config.model.box_bias)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "WmaY8tQ23nJ3" + }, + "outputs": [], + "source": [ + "variables = module.load_variables(config.init_from.checkpoint_path)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FxntxHogUQWk" + }, + "source": [ + "# Export to tf.SavedModel\n", + "This takes about 5 minutes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "cwMTs9sGf73R" + }, + "outputs": [], + "source": [ + "# @title `convert_and_save_model` code\n", + "\n", + "# The code is identical to scenic/common_lib/export_utils.py, except that\n", + "# the error for polymorphic shapes with multiple signatures is removed.\n", + "\n", + "from typing import Callable, Sequence, Optional, Union\n", + "PyTree = export_utils.PyTree\n", + "jax2tf = export_utils.jax2tf\n", + "dm_tree = export_utils.dm_tree\n", + "_ReusableSavedModelWrapper = export_utils._ReusableSavedModelWrapper\n", + "\n", + "def convert_and_save_model(\n", + " jax_fn: Callable[[PyTree, PyTree], PyTree],\n", + " params: PyTree,\n", + " model_dir: str,\n", + " *,\n", + " input_signatures: Union[Sequence[tf.TensorSpec],\n", + " Sequence[Sequence[tf.TensorSpec]]],\n", + " polymorphic_shapes: Optional[str] = None,\n", + " with_gradient: bool = False,\n", + " enable_xla: bool = True,\n", + " compile_model: bool = True,\n", + " saved_model_options: Optional[tf.saved_model.SaveOptions] = None):\n", + " \"\"\"Converts a JAX function and saves a SavedModel.\n", + "\n", + " We assume that the JAX model consists of a prediction function and trained\n", + " parameters, and the computation graph of the function is saved separately from\n", + " the parameters. Saving the graph separately from the parameters reduces\n", + " the size of the Tensorflow `GraphDef`, and enables finetuning of model\n", + " parameters too.\n", + "\n", + " To use this function, a JAX model must be converted to a function of two\n", + " arguments, the model parameters and the input.\n", + " For a Scenic model, this corresponds to:\n", + " ```\n", + " params = train_state.optimizer.target\n", + " flax_model = model.flax_model\n", + " def _predict_fn(params, input_data):\n", + " return flax_model.apply({'params': params}, input_data, train=False)\n", + " ```\n", + "\n", + " Args:\n", + " jax_fn: A JAX function taking two arguments, the parameters and the inputs.\n", + " Both arguments may be (nested) tuples/lists/dictionaries of `np.ndarray`.\n", + " It is necessary to be able to JIT-compile this function (ie run\n", + " `jax.jit` on it).\n", + " params: The parameters, to be used as first argument for `jax_fn`. These\n", + " must be (nested) tuples/lists/dictionaries of `np.ndarray`, and will be\n", + " saved as the variables of the SavedModel.\n", + " model_dir: The directory where the model should be saved.\n", + " input_signatures: The input signatures for the second argument of `jax_fn`\n", + " (the input). A signature must be a `tensorflow.TensorSpec` instance, or a\n", + " (nested) tuple/list/dictionary thereof with a structure matching the\n", + " second argument of `jax_fn`. The first input_signature will be saved as\n", + " the default serving signature. The additional signatures will be used\n", + " only to ensure that the `jax_fn` is traced and converted to TF for the\n", + " corresponding input shapes.\n", + " polymorphic_shapes: If given then it will be used as the\n", + " `polymorphic_shapes` argument to `jax2tf.convert` for the second parameter\n", + " of `jax_fn`. In this case, a single `input_signatures` is supported, and\n", + " should have `None` in the polymorphic dimensions. This is required, for\n", + " example, to have models with dynamic batch sizes.\n", + " with_gradient: Whether the SavedModel should support gradients. If `True`,\n", + " then a custom gradient is saved. If `False`, then a\n", + " `tf.raw_ops.PreventGradient` is saved to error if a gradient is attempted.\n", + " (At the moment due to a bug in SavedModel, custom gradients are not\n", + " supported.)\n", + " enable_xla: Whether the jax2tf converter is allowed to use TF XLA ops. If\n", + " `False`, the conversion tries harder to use purely TF ops and raises an\n", + " exception if it is not possible.\n", + " compile_model: Use TensorFlow jit_compiler on the SavedModel. This\n", + " is needed if the SavedModel will be used for TensorFlow serving.\n", + " saved_model_options: Options to pass to `savedmodel.save`.\n", + "\n", + " Raises:\n", + " ValueError: If at least one input signature is not defined. However, if\n", + " `polymorphic_shapes` is given, then only one input signature is supported.\n", + " \"\"\"\n", + " if not input_signatures:\n", + " raise ValueError(\"At least one input_signature must be given.\")\n", + " # if polymorphic_shapes is not None and len(input_signatures) \u003e 1:\n", + " # raise ValueError(\"For shape-polymorphic conversion a single \"\n", + " # \"input_signature is supported.\")\n", + " tf_fn = jax2tf.convert(\n", + " jax_fn,\n", + " with_gradient=with_gradient,\n", + " polymorphic_shapes=[None, polymorphic_shapes],\n", + " enable_xla=enable_xla)\n", + "\n", + " def get_tf_variable(path, param):\n", + " return tf.Variable(param, trainable=with_gradient, name=\"/\".join(path))\n", + "\n", + " param_vars = dm_tree.map_structure_with_path(\n", + " # Due to a bug in SavedModel it is not possible to use `tf.GradientTape`\n", + " # on a function converted with jax2tf and loaded from SavedModel. Thus, we\n", + " # mark the variables as non-trainable to ensure that users of the\n", + " # SavedModel will not try to fine tune them.\n", + " get_tf_variable, params)\n", + " tf_graph = tf.function(\n", + " lambda inputs: tf_fn(param_vars, inputs),\n", + " autograph=False,\n", + " jit_compile=compile_model)\n", + "\n", + " # This signature is needed for TensorFlow Serving use.\n", + " signatures = {\n", + " tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY:\n", + " tf_graph.get_concrete_function(input_signatures[0])\n", + " }\n", + "\n", + " for input_signature in input_signatures[1:]:\n", + " # If there are more signatures, trace and cache a TF function for each one.\n", + " tf_graph.get_concrete_function(input_signature)\n", + " wrapper = _ReusableSavedModelWrapper(tf_graph, param_vars)\n", + " if with_gradient:\n", + " if not saved_model_options:\n", + " saved_model_options = tf.saved_model.SaveOptions(\n", + " experimental_custom_gradients=True)\n", + " else:\n", + " saved_model_options.experimental_custom_gradients = True\n", + " tf.saved_model.save(wrapper, model_dir, signatures=signatures,\n", + " options=saved_model_options)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qWlspHqZUTzf" + }, + "outputs": [], + "source": [ + "# Due to limitations in the conversion of shape-polymorphic functions, the\n", + "# number of queries that the model takes must be fixed here. Inputs must then\n", + "# be cropped or padded to this size.\n", + "MAX_NUM_QUERIES = 100\n", + "EXPORT_DIR = '/tmp/exported_model'\n", + "\n", + "if tf.io.gfile.exists(EXPORT_DIR):\n", + " tf.io.gfile.rmtree(EXPORT_DIR)\n", + "else:\n", + " tf.io.gfile.makedirs(EXPORT_DIR)\n", + "\n", + "image_shape = (None, config.dataset_configs.input_size,\n", + " config.dataset_configs.input_size, 3)\n", + "\n", + "query_shape = (None, MAX_NUM_QUERIES, config.dataset_configs.max_query_length)\n", + "\n", + "vision_dim = clip_model.CONFIGS[config.model.body.variant]['vision_features']\n", + "embed_dim = clip_model.CONFIGS[config.model.body.variant]['embed_dim']\n", + "grid_size = (\n", + " config.dataset_configs.input_size //\n", + " clip_model.CONFIGS[config.model.body.variant]['vision_patch_size'])\n", + "\n", + "polymorphic_shapes = '(batch, ...)'\n", + "\n", + "input_signatures = [\n", + " # End-to-end prediction:\n", + " {\n", + " 'images': tf.TensorSpec(image_shape, tf.float32),\n", + " 'tokenized_queries': tf.TensorSpec(query_shape, tf.int32),\n", + " },\n", + " # Embed images:\n", + " {\n", + " 'images': tf.TensorSpec(image_shape, tf.float32),\n", + " },\n", + " # Embed queries:\n", + " {\n", + " 'tokenized_queries': tf.TensorSpec(query_shape, tf.int32),\n", + " },\n", + " # Get boxes from image features:\n", + " {\n", + " 'feature_map':\n", + " tf.TensorSpec((None, grid_size, grid_size, vision_dim), tf.float32),\n", + " },\n", + " # Get classification scores from image and query embeddings:\n", + " {\n", + " 'feature_map':\n", + " tf.TensorSpec((None, grid_size, grid_size, vision_dim), tf.float32),\n", + " 'query_embeddings':\n", + " tf.TensorSpec((None, MAX_NUM_QUERIES, embed_dim), tf.float32),\n", + " },\n", + "]\n", + "\n", + "\n", + "def predict_fn(variables, inputs):\n", + " \"\"\"Calls the model. The keys of `inputs` determine the call signature.\"\"\"\n", + "\n", + " # Default signature: End-to-end prediction:\n", + " if set(inputs.keys()) == {'images', 'tokenized_queries'}:\n", + " return module.apply(\n", + " variables, inputs['images'], inputs['tokenized_queries'], train=False)\n", + "\n", + " # Only images are provided: Get image embeddings:\n", + " elif set(inputs.keys()) == {'images'}:\n", + " return module.apply(\n", + " variables, inputs['images'], train=False, method=module.image_embedder)\n", + "\n", + " # Only queries are provided: Get query embeddings:\n", + " elif set(inputs.keys()) == {'tokenized_queries'}:\n", + " return module.apply(\n", + " variables,\n", + " text_queries=inputs['tokenized_queries'],\n", + " train=False,\n", + " method=module.text_embedder)\n", + "\n", + " # Image features are provided: Get bounding boxes:\n", + " elif set(inputs.keys()) == {'feature_map'}:\n", + " shape = inputs['feature_map'].shape\n", + " return module.apply(\n", + " variables,\n", + " jnp.reshape(inputs['feature_map'], (shape[0], -1, shape[-1])),\n", + " inputs['feature_map'],\n", + " method=module.box_predictor)\n", + "\n", + " # Image and query embeddings are provided: Get classification scores:\n", + " elif set(inputs.keys()) == {'feature_map', 'query_embeddings'}:\n", + " shape = inputs['feature_map'].shape\n", + " return module.apply(\n", + " variables,\n", + " jnp.reshape(inputs['feature_map'], (shape[0], -1, shape[-1])),\n", + " inputs['query_embeddings'],\n", + " method=module.class_predictor)\n", + "\n", + " else:\n", + " raise ValueError(f'Unknown input signature with keys {inputs.keys()}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "sKkdB18poNmh" + }, + "outputs": [], + "source": [ + "assert tf.executing_eagerly(\n", + "), 'Use eager execution to avoid FailedPreconditionError.'\n", + "convert_and_save_model(\n", + " predict_fn,\n", + " variables,\n", + " input_signatures=input_signatures,\n", + " polymorphic_shapes=polymorphic_shapes,\n", + " model_dir=EXPORT_DIR,\n", + " with_gradient=True,\n", + " enable_xla=True,\n", + " compile_model=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7ArNULA5gWeM" + }, + "source": [ + "# Load exported model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "p4r_vMw9FWsY" + }, + "outputs": [], + "source": [ + "tf_model = tf.saved_model.load(EXPORT_DIR)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f3Knbjoxy2zW" + }, + "source": [ + "# Prepare image" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "99ilV_T2RyNT" + }, + "outputs": [], + "source": [ + "# Load example image:\n", + "filename = os.path.join(skimage.data_dir, 'astronaut.png')\n", + "image_uint8 = skimage_io.imread(filename)\n", + "image = image_uint8.astype(np.float32) / 255.0\n", + "\n", + "# Pad to square with gray pixels on bottom and right:\n", + "h, w, _ = image.shape\n", + "size = max(h, w)\n", + "image_padded = np.pad(\n", + " image, ((0, size - h), (0, size - w), (0, 0)), constant_values=0.5)\n", + "\n", + "# Resize to model input size:\n", + "input_image = skimage.transform.resize(\n", + " image_padded,\n", + " (config.dataset_configs.input_size, config.dataset_configs.input_size),\n", + " anti_aliasing=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "eJvG0eaYyplV" + }, + "source": [ + "# Prepare text queries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "kSDsqV0UxbtL" + }, + "outputs": [], + "source": [ + "text_queries = ['human face', 'rocket', 'nasa badge', 'star-spangled banner']\n", + "tokenized_queries = np.array([\n", + " module.tokenize(q, config.dataset_configs.max_query_length)\n", + " for q in text_queries\n", + "], dtype=np.int32)\n", + "\n", + "# Pad tokenized queries to avoid recompilation if number of queries changes:\n", + "tokenized_queries = np.pad(\n", + " tokenized_queries,\n", + " pad_width=((0, 100 - len(text_queries)), (0, 0)),\n", + " constant_values=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "rdR3OpAIzAA0" + }, + "source": [ + "# Get predictions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "M16amaHdzGdK" + }, + "outputs": [], + "source": [ + "# Note: The model expects a batch dimension.\n", + "predictions = tf_model({\n", + " 'images': input_image[None, ...],\n", + " 'tokenized_queries': tokenized_queries[None, ...]\n", + "})\n", + "\n", + "# Remove batch dimension and convert to numpy:\n", + "predictions = tf.nest.map_structure(lambda x: x[0].numpy(), predictions)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "G_hzCvxC1sKw" + }, + "source": [ + "# Plot predictions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fl6Lg0jc5cKY" + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "def plot_predictions(logits, boxes, score_threshold=0.1):\n", + " logits = logits[..., :len(text_queries)] # Remove padding.\n", + " scores = sigmoid(np.max(logits, axis=-1))\n", + " labels = np.argmax(logits, axis=-1)\n", + "\n", + " fig, ax = plt.subplots(1, 1, figsize=(8, 8))\n", + " ax.imshow(input_image, extent=(0, 1, 1, 0))\n", + " ax.set_axis_off()\n", + "\n", + " for score, box, label in zip(scores, boxes, labels):\n", + " if score \u003c score_threshold:\n", + " continue\n", + " cx, cy, w, h = box\n", + " ax.plot([cx - w / 2, cx + w / 2, cx + w / 2, cx - w / 2, cx - w / 2],\n", + " [cy - h / 2, cy - h / 2, cy + h / 2, cy + h / 2, cy - h / 2], 'r')\n", + " ax.text(\n", + " cx - w / 2,\n", + " cy + h / 2 + 0.015,\n", + " f'{text_queries[label]}: {score:1.2f}',\n", + " ha='left',\n", + " va='top',\n", + " color='red',\n", + " bbox={\n", + " 'facecolor': 'white',\n", + " 'edgecolor': 'red',\n", + " 'boxstyle': 'square,pad=.3'\n", + " })" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "height": 480 + }, + "executionInfo": { + "elapsed": 1005, + "status": "ok", + "timestamp": 1657116150900, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -120 + }, + "id": "ZZPdauOR2ZJ-", + "outputId": "2db71949-d5cc-4f34-cc62-61e707a8f9b8" + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "\u003cFigure size 800x800 with 1 Axes\u003e" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_predictions(\n", + " logits=predictions['pred_logits'], boxes=predictions['pred_boxes'])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Ym1kbeV_904f" + }, + "source": [ + "# Embed and classify in separate calls\n", + "The image embedding, query embedding, and classification steps can be performed separately. This allows pre-computing part of the inference step (e.g. image embedding) and then re-running only the steps for which inputs have changed.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "height": 480 + }, + "executionInfo": { + "elapsed": 20599, + "status": "ok", + "timestamp": 1657116172413, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -120 + }, + "id": "SGpp5KYB98wx", + "outputId": "57014109-4df3-4ae2-bcb3-dfabaaf03747" + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "\u003cFigure size 800x800 with 1 Axes\u003e" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Embed image:\n", + "feature_map = tf_model({'images': input_image[None, ...]})\n", + "\n", + "# Embed queries:\n", + "query_embeddings = tf_model({'tokenized_queries': tokenized_queries[None, ...]})\n", + "\n", + "# Predict boxes:\n", + "pred_boxes = tf_model({'feature_map': feature_map})['pred_boxes']\n", + "\n", + "# Classify boxes against queries:\n", + "pred_logits = tf_model({\n", + " 'feature_map': feature_map,\n", + " 'query_embeddings': query_embeddings\n", + "})['pred_logits']\n", + "\n", + "plot_predictions(logits=pred_logits[0].numpy(), boxes=pred_boxes[0].numpy())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gRHfE1DvCKlH" + }, + "source": [ + "# Convert to TFLite model\n", + "\n", + "[TensorFlow Lite](https://www.tensorflow.org/lite/guide) is a set of tools that enables on-device machine learning by helping developers run their models on mobile, embedded, and edge devices." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 404089, + "status": "ok", + "timestamp": 1657116576645, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -120 + }, + "id": "VVcp0LTClqiL", + "outputId": "943baca1-29b5-4706-ee66-2b14bdea0dda" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Converting signature 'end_to_end'...\n", + "Converting signature 'embed_images'...\n", + "Converting signature 'embed_texts'...\n", + "Converting signature 'predict_boxes'...\n", + "Converting signature 'predict_logits'...\n", + "Done.\n" + ] + } + ], + "source": [ + "input_signatures = {\n", + " 'end_to_end': {\n", + " 'images': tf.TensorSpec(image_shape, tf.float32),\n", + " 'tokenized_queries': tf.TensorSpec(query_shape, tf.int64),\n", + " },\n", + " 'embed_images': {\n", + " 'images': tf.TensorSpec(image_shape, tf.float32),\n", + " },\n", + " 'embed_texts': {\n", + " 'tokenized_queries': tf.TensorSpec(query_shape, tf.int64),\n", + " },\n", + " 'predict_boxes': {\n", + " 'feature_map':\n", + " tf.TensorSpec((None, grid_size, grid_size, vision_dim), tf.float32),\n", + " },\n", + " 'predict_logits': {\n", + " 'feature_map':\n", + " tf.TensorSpec((None, grid_size, grid_size, vision_dim), tf.float32),\n", + " 'query_embeddings':\n", + " tf.TensorSpec((None, MAX_NUM_QUERIES, embed_dim), tf.float32),\n", + " },\n", + "}\n", + "\n", + "\n", + "def spec_to_array(spec, batch_size=1):\n", + " shape = spec.shape.as_list()\n", + " shape[0] = batch_size\n", + " return tf.zeros(shape, dtype=spec.dtype).numpy()\n", + "\n", + "\n", + "tflite_models = {}\n", + "\n", + "for name, signature in input_signatures.items():\n", + " print(f'Converting signature {name!r}...', flush=True)\n", + " inputs = tf.nest.map_structure(spec_to_array, signature)\n", + " serving_func = functools.partial(predict_fn, variables)\n", + " converter = tf.lite.TFLiteConverter.experimental_from_jax(\n", + " [serving_func], [[('input1', inputs)]])\n", + " tflite_models[name] = converter.convert()\n", + "\n", + "print('Done.')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "FT5scbUgqxOp" + }, + "outputs": [], + "source": [ + "# Save the models:\n", + "for name, model in tflite_models.items():\n", + " tflite_path = os.path.join(EXPORT_DIR, f'{name}.tflite')\n", + " with tf.io.gfile.GFile(tflite_path, 'wb') as f:\n", + " f.write(model)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 438, + "status": "ok", + "timestamp": 1657116590313, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -120 + }, + "id": "yPb8Or5_vywO", + "outputId": "92e71418-5b5f-4746-8a35-a4977815174b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "total 3.0G\n", + "drwxrwsr-x 2 mjlm 53410755 4.0K Jul 6 07:00 assets\n", + "-rw-rw-r-- 1 mjlm 53410755 657M Jul 6 07:09 embed_images.tflite\n", + "-rw-rw-r-- 1 mjlm 53410755 808M Jul 6 07:09 embed_texts.tflite\n", + "-rw-rw-r-- 1 mjlm 53410755 1.5G Jul 6 07:09 end_to_end.tflite\n", + "-rw-rw-r-- 1 mjlm 53410755 15M Jul 6 07:09 predict_boxes.tflite\n", + "-rw-rw-r-- 1 mjlm 53410755 4.2M Jul 6 07:09 predict_logits.tflite\n", + "-rw-rw-r-- 1 mjlm 53410755 60M Jul 6 07:00 saved_model.pb\n", + "drwxrwsr-x 2 mjlm 53410755 4.0K Jul 6 07:00 variables\n" + ] + } + ], + "source": [ + "!ls -lh /tmp/exported_model/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "54OkpbxGJM2b" + }, + "source": [ + "## Test TFLite model\n", + "\n", + "Only the `\"end_to_end\"` signature is tested here. The other signatures can be called analogously to the TensorFlow code above (see [Embed and classify in separate calls](#scrollTo=Ym1kbeV_904f\u0026line=2\u0026uniqifier=1))." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "height": 480 + }, + "executionInfo": { + "elapsed": 38905, + "status": "ok", + "timestamp": 1657116629319, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -120 + }, + "id": "YMvEsGb_g1-6", + "outputId": "801d45f1-08d3-4987-d751-fcaa5e658480" + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "\u003cFigure size 800x800 with 1 Axes\u003e" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Run the model with TensorFlow Lite\n", + "interpreter = tf.lite.Interpreter(model_content=tflite_models['end_to_end'])\n", + "interpreter.allocate_tensors()\n", + "input_details = interpreter.get_input_details()\n", + "output_details = interpreter.get_output_details()\n", + "interpreter.set_tensor(input_details[0][\"index\"], input_image[None, ...])\n", + "interpreter.set_tensor(input_details[1][\"index\"], tokenized_queries[None, ...])\n", + "\n", + "interpreter.invoke()\n", + "\n", + "pred_boxes = interpreter.get_tensor(output_details[2][\"index\"])\n", + "pred_logits = interpreter.get_tensor(output_details[3][\"index\"])\n", + "\n", + "plot_predictions(logits=pred_logits[0], boxes=pred_boxes[0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "N80T96lyschc" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "last_runtime": { + "build_target": "//learning/deepmind/public/tools/ml_python:ml_notebook", + "kind": "private" + }, + "name": "OWL-ViT: Export JAX model to TensorFlow SavedModel.ipynb", + "provenance": [ + { + "file_id": "1ag8tBSFhhCbPNLZZt8N30-ElWdGh97lb", + "timestamp": 1654000894386 + }, + { + "file_id": "1kBebGRuMcABXiprw6IEAxpbKAXNO4EOQ", + "timestamp": 1651575080312 + }, + { + "file_id": "https://github.com/google-research/scenic/blob/main/scenic/common_lib/colabs/scenic_playground.ipynb", + "timestamp": 1650960476931 + } + ] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/scenic/projects/owl_vit/notebooks/OWL_ViT_inference_playground.ipynb b/scenic/projects/owl_vit/notebooks/OWL_ViT_inference_playground.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..cae892da1bb1cbbdec547eb6e1300ccd1a81f5a0 --- /dev/null +++ b/scenic/projects/owl_vit/notebooks/OWL_ViT_inference_playground.ipynb @@ -0,0 +1,282 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "PaiG8Ulc75xc" + }, + "source": [ + "# 🦉 OWL-ViT inference playground\n", + "\n", + "OWL-ViT is an **open-vocabulary object detector**. Given a free-text query, it will find objects matching that query. It can also do **one-shot object detection**, i.e. detect objects based on a single example image.\n", + "\n", + "This Colab allows you to query the model interactively, to get a feeling for its capabilities. For details on the model, check out the [paper](https://arxiv.org/abs/2205.06230) or the [code](https://github.com/google-research/scenic/tree/main/scenic/projects/owl_vit).\n", + "\n", + "\u003e ❗ Note: The free public Colab runtime has enough memory for the ViT-B/16 model. For optimal results, use a Pro or local runtime and the ViT-L/14 model.\n", + "\n", + "\u003e ❗ Note: This Colab is optimized for fast interactive exploration. It does not apply some of the optimizations and augmentations that would be used in a rigorous evaluation settings, so results from this Colab may not match the paper.\n", + "\n", + "## How to use this Colab\n", + "1. Use a GPU or TPU Colab runtime.\n", + "2. Run all cells in the Colab from top to bottom.\n", + "3. Go to the cells for [Text-conditioned object detection](#scrollTo=aNzcyP1sbJ9w\u0026uniqifier=1) or [Image-conditioned object detection](#scrollTo=TFlZhrDTQbiY\u0026uniqifier=1) and have fun!\n", + "\n", + "**If you run into any problems, please [file an issue](https://github.com/google-research/scenic/issues/new?title=OWL-ViT+inference+playround:+[add+title]) on GitHub.**\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5-Yta1B7rtWu" + }, + "source": [ + "# Download and install OWL-ViT\n", + "\n", + "OWL-ViT is implemented in [Scenic](https://github.com/google-research/scenic). The cell below installs the Scenic codebase from GitHub and imports it." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zWF7RkeZ4B_N" + }, + "outputs": [], + "source": [ + "!rm -rf *\n", + "!rm -rf .config\n", + "!rm -rf .git\n", + "!git clone https://github.com/google-research/scenic.git .\n", + "!python -m pip install -q .\n", + "!python -m pip install -r ./scenic/projects/owl_vit/requirements.txt\n", + "\n", + "# Also install big_vision, which is needed for the mask head:\n", + "!mkdir /big_vision\n", + "!git clone https://github.com/google-research/big_vision.git /big_vision\n", + "!python -m pip install -r /big_vision/big_vision/requirements.txt\n", + "import sys\n", + "sys.path.append('/big_vision/')\n", + "!echo \"Done.\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9MKZb6G3-H92" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from bokeh import io as bokeh_io\n", + "import jax\n", + "from google.colab import output as colab_output\n", + "import matplotlib as mpl\n", + "from matplotlib import pyplot as plt\n", + "import numpy as np\n", + "from scenic.projects.owl_vit import configs\n", + "from scenic.projects.owl_vit import models\n", + "\n", + "from scenic.projects.owl_vit.notebooks import inference\n", + "from scenic.projects.owl_vit.notebooks import interactive\n", + "from scenic.projects.owl_vit.notebooks import plotting\n", + "from scipy.special import expit as sigmoid\n", + "import skimage\n", + "from skimage import io as skimage_io\n", + "from skimage import transform as skimage_transform\n", + "import tensorflow as tf\n", + "\n", + "tf.config.experimental.set_visible_devices([], 'GPU')\n", + "bokeh_io.output_notebook(hide_banner=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EnD94y6ia6Mn" + }, + "source": [ + "# Set up the model\n", + "This takes a minute or two." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1UiX2Nx8auW4" + }, + "outputs": [], + "source": [ + "config = configs.owl_v2_clip_b16.get_config(init_mode='canonical_checkpoint')\n", + "module = models.TextZeroShotDetectionModule(\n", + " body_configs=config.model.body,\n", + " normalize=config.model.normalize,\n", + " box_bias=config.model.box_bias)\n", + "variables = module.load_variables(config.init_from.checkpoint_path)\n", + "model = inference.Model(config, module, variables)\n", + "model.warm_up()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b0Kckjo-Z7nr" + }, + "source": [ + "# Load example images\n", + "\n", + "Please provide a path to a directory containing example images. Google Cloud Storage and local storage are supported." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "PmdvY7AEZ9dK" + }, + "outputs": [], + "source": [ + "IMAGE_DIR = 'gs://scenic-bucket/owl_vit/example_images' # @param {\"type\": \"string\"}\n", + "%matplotlib inline\n", + "\n", + "images = {}\n", + "\n", + "for i, filename in enumerate(tf.io.gfile.listdir(IMAGE_DIR)):\n", + " with tf.io.gfile.GFile(os.path.join(IMAGE_DIR, filename), 'rb') as f:\n", + " image = mpl.image.imread(\n", + " f, format=os.path.splitext(filename)[-1])[..., :3]\n", + " if np.max(image) \u003c= 1.:\n", + " image *= 255\n", + " images[i] = image\n", + "\n", + "cols = 5\n", + "rows = max(len(images) // 5, 1)\n", + "fig, axs = plt.subplots(rows, cols, figsize=(16, 8 * rows))\n", + "\n", + "for ax in axs.ravel():\n", + " ax.set_visible(False)\n", + "\n", + "for ax, (ind, image) in zip(axs.ravel(), images.items()):\n", + " ax.set_visible(True)\n", + " ax.imshow(image)\n", + " ax.set_xticks([])\n", + " ax.set_yticks([])\n", + " ax.set_title(f'Image ID: {ind}')\n", + "\n", + "fig.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aNzcyP1sbJ9w" + }, + "source": [ + "# Text-conditioned detection\n", + "Enter comma-separated queries int the text box above the image to detect stuff. If nothing happens, try running the cell first (\u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eEnter\u003c/kbd\u003e)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "8teG83eKbNKl" + }, + "outputs": [], + "source": [ + "#@title { run: \"auto\" }\n", + "IMAGE_ID = 2# @param {\"type\": \"number\"}\n", + "image = images[IMAGE_ID]\n", + "_, _, boxes = model.embed_image(image)\n", + "plotting.create_text_conditional_figure(\n", + " image=model.preprocess_image(image), boxes=boxes, fig_size=900)\n", + "interactive.register_text_input_callback(model, image, colab_output)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TFlZhrDTQbiY" + }, + "source": [ + "# Image-conditioned detection\n", + "\n", + "In image-conditioned detection, the model is tasked to detect objects that match a given example image. In the cell below, the example image is chosen by drawing a bounding box around an object in the left image. The model will then detect similar objects in the right image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "AQGAM16fReow" + }, + "outputs": [], + "source": [ + "#@title { run: \"auto\" }\n", + "\n", + "#@markdown The *query image* is used to select example objects:\n", + "QUERY_IMAGE_ID = 1 # @param {\"type\": \"number\"}\n", + "\n", + "#@markdown Objects will be detected in the *target image* :\n", + "TARGET_IMAGE_ID = 0 # @param {\"type\": \"number\"}\n", + "\n", + "#@markdown Threshold for the minimum confidence that a detection must have to\n", + "#@markdown be displayed (higher values mean fewer boxes will be shown):\n", + "MIN_CONFIDENCE = 0.9994 #@param { type: \"slider\", min: 0.9, max: 1.0, step: 0.0001}\n", + "\n", + "\n", + "#@markdown Threshold for non-maximum suppression of overlapping boxes (higher\n", + "#@markdown values mean more boxes will be shown):\n", + "NMS_THRESHOLD = 0.3 #@param { type: \"slider\", min: 0.05, max: 1.0, step: 0.01}\n", + "\n", + "interactive.IMAGE_COND_MIN_CONF = MIN_CONFIDENCE\n", + "interactive.IMAGE_COND_NMS_IOU_THRESHOLD = NMS_THRESHOLD\n", + "\n", + "query_image = images[QUERY_IMAGE_ID]\n", + "target_image = images[TARGET_IMAGE_ID]\n", + "_, _, boxes = model.embed_image(target_image)\n", + "plotting.create_image_conditional_figure(\n", + " query_image=model.preprocess_image(query_image),\n", + " target_image=model.preprocess_image(target_image),\n", + " target_boxes=boxes, fig_size=600)\n", + "interactive.register_box_selection_callback(model, query_image, target_image, colab_output)" + ] + } + ], + "metadata": { + "colab": { + "last_runtime": { + "build_target": "//learning/grp/tools/ml_python:ml_notebook", + "kind": "private" + }, + "name": "OWL-ViT inference playground.ipynb", + "private_outputs": true, + "provenance": [ + { + "file_id": "1kBebGRuMcABXiprw6IEAxpbKAXNO4EOQ", + "timestamp": 1651575080312 + }, + { + "file_id": "https://github.com/google-research/scenic/blob/main/scenic/common_lib/colabs/scenic_playground.ipynb", + "timestamp": 1650960476931 + } + ] + }, + "gpuClass": "standard", + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/scenic/projects/owl_vit/notebooks/OWL_ViT_minimal_example.ipynb b/scenic/projects/owl_vit/notebooks/OWL_ViT_minimal_example.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..b256f4bcc72fef5347a062b2d6621e3afa4e400d --- /dev/null +++ b/scenic/projects/owl_vit/notebooks/OWL_ViT_minimal_example.ipynb @@ -0,0 +1,1367 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "PaiG8Ulc75xc" + }, + "source": [ + "# OWL-ViT minimal example\n", + "\n", + "This Colab shows how to **load a pre-trained OWL-ViT checkpoint** and use it to\n", + "**get object detection predictions** for an image." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5-Yta1B7rtWu" + }, + "source": [ + "# Download and install OWL-ViT\n", + "\n", + "OWL-ViT is implemented in [Scenic](https://github.com/google-research/scenic). The cell below installs the Scenic codebase from GitHub and imports it." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "executionInfo": { + "elapsed": 11822, + "status": "ok", + "timestamp": 1707756306865, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "zWF7RkeZ4B_N", + "outputId": "505674d7-7c5f-4145-fa81-6f59eb8c60b6" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Done.\n" + ] + } + ], + "source": [ + "!rm -rf *\n", + "!rm -rf .config\n", + "!rm -rf .git\n", + "!git clone https://github.com/google-research/scenic.git .\n", + "!python -m pip install -q .\n", + "!python -m pip install -r ./scenic/projects/owl_vit/requirements.txt\n", + "\n", + "# Also install big_vision, which is needed for the mask head:\n", + "!mkdir /big_vision\n", + "!git clone https://github.com/google-research/big_vision.git /big_vision\n", + "!python -m pip install -r /big_vision/big_vision/requirements.txt\n", + "import sys\n", + "sys.path.append('/big_vision/')\n", + "!echo \"Done.\"" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "executionInfo": { + "elapsed": 154, + "status": "ok", + "timestamp": 1707756307263, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "9MKZb6G3-H92" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "import jax\n", + "from matplotlib import pyplot as plt\n", + "import numpy as np\n", + "from scenic.projects.owl_vit import configs\n", + "from scenic.projects.owl_vit import models\n", + "from scipy.special import expit as sigmoid\n", + "import skimage\n", + "from skimage import io as skimage_io\n", + "from skimage import transform as skimage_transform" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3WatINO87evx" + }, + "source": [ + "# Choose config" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "executionInfo": { + "elapsed": 3, + "status": "ok", + "timestamp": 1707756307491, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "k4RKu3Vv5k_3" + }, + "outputs": [], + "source": [ + "config = configs.owl_v2_clip_b16.get_config(init_mode='canonical_checkpoint')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6c12cyRK7oOD" + }, + "source": [ + "# Load the model and variables" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "executionInfo": { + "elapsed": 3, + "status": "ok", + "timestamp": 1707756307719, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "s421Kpp7sXjD" + }, + "outputs": [], + "source": [ + "module = models.TextZeroShotDetectionModule(\n", + " body_configs=config.model.body,\n", + " objectness_head_configs=config.model.objectness_head,\n", + " normalize=config.model.normalize,\n", + " box_bias=config.model.box_bias)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "executionInfo": { + "elapsed": 86442, + "status": "ok", + "timestamp": 1707756394418, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "WmaY8tQ23nJ3" + }, + "outputs": [], + "source": [ + "variables = module.load_variables(config.init_from.checkpoint_path)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f3Knbjoxy2zW" + }, + "source": [ + "# Prepare image" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "executionInfo": { + "elapsed": 591, + "status": "ok", + "timestamp": 1707756395237, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "99ilV_T2RyNT" + }, + "outputs": [], + "source": [ + "# Load example image:\n", + "filename = os.path.join(skimage.data_dir, 'astronaut.png')\n", + "image_uint8 = skimage_io.imread(filename)\n", + "image = image_uint8.astype(np.float32) / 255.0\n", + "\n", + "# Pad to square with gray pixels on bottom and right:\n", + "h, w, _ = image.shape\n", + "size = max(h, w)\n", + "image_padded = np.pad(\n", + " image, ((0, size - h), (0, size - w), (0, 0)), constant_values=0.5)\n", + "\n", + "# Resize to model input size:\n", + "input_image = skimage.transform.resize(\n", + " image_padded,\n", + " (config.dataset_configs.input_size, config.dataset_configs.input_size),\n", + " anti_aliasing=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "eJvG0eaYyplV" + }, + "source": [ + "# Prepare text queries" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "executionInfo": { + "elapsed": 1363, + "status": "ok", + "timestamp": 1707756396829, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "kSDsqV0UxbtL" + }, + "outputs": [], + "source": [ + "text_queries = ['face', 'rocket', 'nasa badge', 'star-spangled banner']\n", + "tokenized_queries = np.array([\n", + " module.tokenize(q, config.dataset_configs.max_query_length)\n", + " for q in text_queries\n", + "])\n", + "\n", + "# Pad tokenized queries to avoid recompilation if number of queries changes:\n", + "tokenized_queries = np.pad(\n", + " tokenized_queries,\n", + " pad_width=((0, 100 - len(text_queries)), (0, 0)),\n", + " constant_values=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "rdR3OpAIzAA0" + }, + "source": [ + "# Get predictions\n", + "This will take a minute on the first execution due to model compilation. Subsequent executions will be faster." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "executionInfo": { + "elapsed": 4, + "status": "ok", + "timestamp": 1707756397057, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "tkU2rMjTrjtK" + }, + "outputs": [], + "source": [ + "jitted = jax.jit(module.apply, static_argnames=('train',))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "executionInfo": { + "elapsed": 9397, + "status": "ok", + "timestamp": 1707756406681, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "M16amaHdzGdK" + }, + "outputs": [], + "source": [ + "# Note: The model expects a batch dimension.\n", + "predictions = jitted(\n", + " variables,\n", + " input_image[None, ...],\n", + " tokenized_queries[None, ...],\n", + " train=False)\n", + "\n", + "# Remove batch dimension and convert to numpy:\n", + "predictions = jax.tree_util.tree_map(lambda x: np.array(x[0]), predictions )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "G_hzCvxC1sKw" + }, + "source": [ + "# Plot predictions" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "executionInfo": { + "elapsed": 52, + "status": "ok", + "timestamp": 1707756406951, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "fl6Lg0jc5cKY" + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": { + "height": 478 + }, + "executionInfo": { + "elapsed": 716, + "status": "ok", + "timestamp": 1707756407894, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "ZZPdauOR2ZJ-", + "outputId": "33579013-283b-4141-9bec-5b5eeac61e4f" + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "\u003cFigure size 800x800 with 1 Axes\u003e" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "score_threshold = 0.2\n", + "\n", + "logits = predictions['pred_logits'][..., :len(text_queries)] # Remove padding.\n", + "scores = sigmoid(np.max(logits, axis=-1))\n", + "labels = np.argmax(predictions['pred_logits'], axis=-1)\n", + "boxes = predictions['pred_boxes']\n", + "\n", + "fig, ax = plt.subplots(1, 1, figsize=(8, 8))\n", + "ax.imshow(input_image, extent=(0, 1, 1, 0))\n", + "ax.set_axis_off()\n", + "\n", + "for score, box, label in zip(scores, boxes, labels):\n", + " if score \u003c score_threshold:\n", + " continue\n", + " cx, cy, w, h = box\n", + " ax.plot([cx - w / 2, cx + w / 2, cx + w / 2, cx - w / 2, cx - w / 2],\n", + " [cy - h / 2, cy - h / 2, cy + h / 2, cy + h / 2, cy - h / 2], 'r')\n", + " ax.text(\n", + " cx - w / 2,\n", + " cy + h / 2 + 0.015,\n", + " f'{text_queries[label]}: {score:1.2f}',\n", + " ha='left',\n", + " va='top',\n", + " color='red',\n", + " bbox={\n", + " 'facecolor': 'white',\n", + " 'edgecolor': 'red',\n", + " 'boxstyle': 'square,pad=.3'\n", + " })" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "71-JnmJDGrMw" + }, + "source": [ + "## Plot objectness" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "colab": { + "height": 499 + }, + "executionInfo": { + "elapsed": 583, + "status": "ok", + "timestamp": 1707756408734, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "nZ8uGL9OGtyV", + "outputId": "e38cbc87-0c6c-42f7-b831-5bffcb2a80d7" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Top 20 objects by objectness')" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcQAAAHRCAYAAAD0RMk3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAAsT\nAAALEwEAmpwYAAEAAElEQVR4nOz9d7B3zZbfhX1W996/dMKT3njznaBhNIojS0hYEmOhhEwwxhhj\nEAgbAy67MDkMkhiRHKAsIaBKgLGREAacCmxsQVGmhiRElJA1o9HM3Hzf+IRzzu/80g7d7T/WWr33\ned44NVeMBGffe97nnF/YoXv1Wt/1XaGllML9cX/cH/fH/XF//Df9CD/XN3B/3B/3x/1xf9wffyYc\n9wbx/rg/7o/74/64P7g3iPfH/XF/3B/3x/0B3BvE++P+uD/uj/vj/gDuDeL9cX/cH/fH/XF/APcG\n8f64P+6P++P+uD+Ae4N4f/w38BCR3yYi/8HHvP+HROSv+6/ynl66/o+IyB/8r+A6/4KI/MMf8/5O\nRL7rT/d93B/3x58px71BvD8+1WHK0X+yiBxnf//V36Fr/OMi8lMicisiPyEif+1L7/8SEfnPReRg\n//6S78R1Xz5KKX9hKeX3/2zO8V+VUfvTeZRSzkspX/3ZnENEflRE/obv1D3dH/fHn87j3iDeH5/q\nMOV4Xko5B74J/MWz1/6l79Bl9sBfDDwA/jrgnxCRPw9ARBbAvw78QeAR8PuBf91evz/uj/vj/vhZ\nH/cG8f74WR0ishSR3yMib9vP7xGRpb33QyLybRH5YRF5JiJf/zhvspTyD5RSfqKUkksp/zHw7wO/\nyt7+IaABfk8ppSul/F5AgF/3Eff1QET+gIg8FZFviMhvF5Fw9yPyT4rIjXmjf8HsjTtejYj8T0Tk\nT4rIlYj8WyLyxdl7PyAi/7aIvBCR9+xZfzPww8BfaR70f2mf/W0i8lXzgL/2CZ71SkT+VfvsfyEi\nv9jO8XeJyP/9pWf9J0Xk93zEOHy/Pc+1iPyYiPwlL33kFbv/WxH5d196tiIi32O/L82D/6Y95+8T\nkfXss3+piPwxEdmKyFdE5DeLyD8C/Brgn7Jx+Kdm5/2bjQ24EpF/WkTkk8Zb9PjdIvK+zdsfF5Ff\nYO/9FhH5cXuOt0Tk7/yYsb0/7o8PP0op9z/3Pz+jH+DrwK+33/9B4I8ArwGvAn8Y+IfsvR8CRuB/\nDyyBPx/1Ar/vU1xjDbwD/Gb7+28D/tBLn/k3gL/jI77/B1CP8gL4EvCTwP/U3vttdl9/G9ACfyVw\nAzy2938U+Bvs9/8e8NPA96MG+bcDf9jeu7B7/DuAlf3959p7PwL8wdn9nAFbf3bgTeAHPuLefwQY\ngP+B3d/fCXzNfn/TxvChfbYB3gd+2Yecp7V7/2FggYKH29k9/Av296+1+fkngP9g9v0CfI/9/nuA\n/yfw2J7z/wX8r+29X2Hj9xtQkP1Z4M95eSxfOu+/ATwEvgA8nc3zx433bwL+c/ue2GfetPfeAX6N\n/f4I+MGf63Vy//Nn38/P+Q3c//zZ98Ndg/gV4LfM3vtNwNft9x9CDc/Z7P3/C/A7PsU1fj/wbwJi\nf/8O4F956TP/EvAjH/LdCHTAz5+99jcBP2q//zbgbT+3vfafAL/Vfq9KHPhDmCG1vwNwAL4I/FXA\nH/2I+/8RPmgQr4G/HFh/wrP/CPBHXrrmXOH/IeB/Zr//RcCPf8R5fg3wLhBmr/3LPmaoQfxXZu+d\nAwn4vP1dgO8x47MHvnv22V8FfM1+/2eA3/0R91DHcvZaAX71SzLx936K8f51KLD5lfNnss990+b4\n8ud6fdz//Nn7c0+Z3h8/2+MzwDdmf3/DXvPjqpSy/5j3P3CIyD8G/ALgf1hK8e7zO+DypY9eoh7O\ny8crqEf08n19dvb3W7Nzf9x9fRGNZV6LyDXwAjUQnwU+jwKCTzxsDP5K4G8G3hGR/7eI/Dkf85Vv\nzb6bgW/P7u/3A3+N/f7XAP/iR5zjM8C37Pt+vDwO8+vs0Od7eRxeBTbAfz4bh3/TXoefwTjMjndn\nvx9QYwwfM96llH8H+KeAfxp4T0T+WRFxmfjLgd8CfMOo31/F/XF//AyPe4N4f/xsj7dRJebHF+w1\nPx6JyNnHvH/nEJHfBfyFwG8spWxnb/0Y8IvmsSbgF9nrLx/PUMrx5ft6a/b3Z18610fd17eAv6mU\n8nD2sy6l/GF777s/4lE+sI1MKeXfKqX8BpT2/Angn/uI74IaGQAs9vm52f39a+hY/ALUQ/yopKa3\ngc+/FDt9eRzm1zlHKdGXx+EZcEQpXh+DB0UTrOBnOA6fcHzceFNK+b2llF8G/ADw84C/y17/T0sp\nfylK3f9rqNd5f9wfP6Pj3iDeHz/b418GfruIvCoirwC/E80EnR+/S0QWIvJrUAX+f/2wE4nI3wf8\nj4HfUEp5/tLbP4rSeX+LJXj8L+31f+fl85RSEqoQ/xERubCkjL/9pft6zc7Vishfgcaj/j8fclu/\nD/j7ROQH7B4f2OdB42BviMjfavd0ISJ/rr33HvAlN0Yi8rqI/CUGDjrU400fNg52/DIR+e+LSAP8\nrfadP2LPdwL+b8D/GfhPSinf/Ihz/Mco1fl323P+EJrF+6/MPvNbRORXi2br/kPAf1xK+db8JOZh\n/nPA7xaR1+x5Pisiv8k+8s8Df72I/AUiEuw9937fA34mtYwfOd4i8stF5M8Vkdae6wQkk62/WkQe\nlFIGNFb7cWN7f9wfH378XHO29z9/9v1wN4a4An4vGuN6x35f2Xs/hFJ9fz/qZXwTi9N9xHkLk7Hw\nnx+evf9L0aSKI/BfAL/0Y871CDWAT1Gv43dicSc0hvgfovTbDRqX+o2z7/4os7gX8FuB/x+qaL8F\n/B9n7/0C4P8LXKE0oMfCngD/gb3+X6Be4b9r17u2a/z8j7j3H0EN3r+KUsJ/lJeSRIBfbeP113/C\nXP3A7Lo/Dvxls/f+BdQA/ds21v8e8OWX5sOTalbAPwp81cbhTwJ/y+yzfxnwx+1+fxr4Tfb6r7Lx\nvQJ+78vnnd3HP/xJ4w38BXaNncnTv4RSrQuUwr2y7/ynzGKU9z/3P5/2xxMW7o/74zt+mEfyB0sp\nn/s5vpWf0SEi/x7wfyil/IGf63v5qENEvoDSrm+Uu9Tyd+r8AfWyvlg+2gO9P+6P/1od95Tp/XF/\nzA4R2aAU39d+ru/low4zVn87miH6HTeGdvwClJJ895M+eH/cH/91OZqf6xu4P+6PP1MOi4/9NFpj\n95G9Tn8uD4tBvodmi/7mP03X+MuBfxb4e0op/Z+Oa9wf98eficc9ZXp/3B/3x/1xf9wf3FOm98f9\ncX/cH/fH/QHcG8T74/64P+6P++P+AD4hhvi93/recjwO/ODf/hez2gQ+8+aSN1675O/7+38HAF/+\n+hfoTj37Q8fh0DGOA4Wxfl+IiDQEiR88uVG1IoHYRNo2EKMAma4fGPpEKdAuGs42K9brJcvFgtgE\nRAJaUi32f7lb/StoYve87npODYt/wD+u55m+rO/Xa/h3pf6nnubOW34pe1Omv/jag68D8F03X777\n4XoHgpZ7zZ+k6F+l6G/Fn7W89G3/pN33/AJSnxDsuyJ6vbtjOD2F2IMVP02x12ZX8vusQ138vspL\nn9Nrl+J3WOq8TPch9dp3pgIBKfX32e3MhqjceU38JZm9Wuw85c4d6z2W+bfvDOiHHDajpdyRhbvy\nQx3XWvd/5x+xz0/34A+gc1xeHoQP3tLL9zaT3elrhfJhD1IK8xH1T9Wx/sBzz+fSb/SD53059FIo\niH9OXnqYOzc9u5v5514asw8MST21vVHma9bO+iFz6PdZ79fH3WWh3J2Xu/Ix/4y//tKz2fh+5aE2\nSfruqy/O1sX01VwyeRwYx45xODKOR7R8dn4vep+5FHLmzo/EhuXyjNVqw2KxpGkaJISZLPp6m+7v\na481WfhLzz8/G/n5M8zk7+4o3B2zO9+ayYfpKZmGtj5LIdtY352L+XnKnQ/4t+UlCRRXONO1y4dI\nqclGsYH8xne/9WFC+IHjYw3ictmCwC/5pZ9hsQi8+mTDw8vz+n6QQCmQUuFOc6jptqiD7EoQmQbW\nhV4KTSM0TaAAuURSyqRRz5tyJudMuTN5d/+tk1eV/CSE0zjNF/JLxuNDZHt2g/aZcleRFalnLC+d\nem4MP+TEHzJSd5XsHQM+M/lzwzcXmvknP/Qp7BnCnfdnRnF+6Q8xENWYcXcU71zRh2X+/VJm9zfd\n/fStO1b3pTu/O1flw8bRFaNe6u4iv7P6mD505yk/TJHP7+uDIGA+XB9qNz+gJHlJ2d9duB/53bkO\n+AgN77rhjhqX+bt+kZdVhr4/rZ4Pnn4+5/WVD/lMPUV5+XMKquQDn56Dko8YxTvrsdhye0m65e5n\n775b7r7/MbP1gaepBlZ1Ux17lzMH1OWl6yHwYfc4HyRRfVhyJudETiM5D2oMKyD+cH0xfzWnxDD2\nNGNLjC0hFKL4eE+6dnZnL51IkLo2X9aTPvMzqX9pDF++w/mM1qVX3BjePd8H7J7wkjGcrvCyKE96\nwp7tA7d+17h/mlmfH59gEJc0bcuv+GXfD8Bm07BoI7/4xQ8wDCO/9f/0P+I/+09/ij/6R7/Oi2fP\nOeUtQ95SGIBCYMkiPGQRz4lhqYhRoORMkUKUBhF49NqK7/u+V3nztTNCU3j6YstP/qmnvPvWjtg0\nfOFLr/ADP/+LfPlLn+O1V19luVwgjRBiRCSCFEQaimREAhQ3utkmRhDUs9ShL1XJxNAAIwUIoVGB\nFvXWgkQkCiUXMySFQq4eFCKEEM1j0NckRCTY2250Q+R3/JrfTimFf/Q//EcJFcFlhAjFzimiY1Nc\ngEZyGqEkfa0kUkpAMMEvCIFcEqEAQdR79v+J3pcEIYZYPXUhEEJDbBqCUMdFREesmk6ZCaArXRGk\nBBBHQKbxMhQyCKSUyWWELOQyIUNHciHquMUYiDESRAghEGKjzy0QbB6CjYsKf7GxF0pJ5JzJJeuz\nFjElU8gy2jMJEKBku7eAlEIm63slQQmkklRG3PDYfIpFFLLJkhBAQh0P905EAhIiDjBC0GeS6M8Q\nCCHYaGVEYgUpOSdqq1HHOHf0rMpQyrqm6oIvxW/D7jlP9yyFEKOdSteCoF5JkazfLT6/Kg8qjal6\n7aXoWLk6ySRK0bGXoLKn966yUkqi5FHnr5Q672LPXUomEJDQaKCmiK4vCaQyECTYWhYggQTM30Gi\njiECElQmAkDQZ7BPEYLDPVt3QEZlhKTKP+VEyYVCIhuQzzlBKeRhoKCyrc+aKSWT0mjyDGQ3MrnK\nJNVLBSmRkjL/q1/z24HCP/ajf7/KaIZShLGM9Kcju+0zXjz/FlfPfprd9Z9i7K8pJAKQS6trv8A4\nZPo+03eFU1c4doXjEbo+EFctn/vid/Pd3/ULeeMzn+fR4ycsVysIYrpFqsGTAr/zL/zfAfC7/s2/\ni1QKkkPVkaVkWyeYrOtYQdH5ykLJ9SGtkF3Xj+uykovKoc1/yTDmZOsLUi6MKVFSJlPIWT/rUlbw\n8Z3pHNfjJVOyGtXsIKsUkFCNqepIuzam801O+cf5VMfHGsRF25JL4Utf+Jw+JwPJhD6lxNOnW957\nd89xPyBEAg2BhsRoZieTGWxBihmrTBYbTNFFm7NAEFZnS1YrVeDb64HdTWa3O7LbH9jvO7quZ0wj\ny7g0pWPKCVVIYkugoAuxZFssQQ2aSKCgBsU9oyDBVJ0qL1VyurByHonSmPEsBBFdKAASgWxGMdjc\n6Hd1MSrak0rPFlOWE4WojkKa6UBRBZJtseViC8+MVUEVSgEpydBmprFxKPa5YspSJFAkq6IQAwSi\niiiEWMejoM+mo6UGOQQQiXpOxIy8K91iildIZVB1JI0i56LPWHKAIAQCOWeEQiDac2dXYTo/IhAM\n3GB/uqF2xF2Nj+j4OMjRVaSGsGSjYRy4RKRkRaniajMSbD5Ut2VTQgVKsOfS1+shqugmQxjqvGP0\nvQQxo2hLMYbpfn3tzrkkUaAFEwCz0SfauphT5RV2FxQQmMTkMhoSVgBQFWFWo18q+JoM/pyEElR2\nsynDEGVSRlJMEdmF3eCWUV+fXtZ7En/+ab2LKGDTdRjqOcRkA8HWmFHJtrZEAkGmu9Qh8HM3el4b\no0q7z7wRdyKUthVT6qW+XrJBXMkVzGKGvphMOdYLISJFjauCKgAF4rmMpk8UKBYCuYaNhNC0SJqB\nngTD0HHq9pwOLzgevsU4XoN9pxAoOantza6rAhIyMWQkQIh6n6fjkffff4uLy1fYnF2yXm9o2pYg\nkYwDkGh6eLonkUgo6pRIEdURIq52XK3p2pVUjRYVIGczNYFcx0vvkdzYcOsz6LBncyqCXickJBei\nBIooJYyYPoxismXeawXeAfUdMuQJuIutpbrIioFjjFEU+RllynysQVTEVbi8PCcNhW44crs7ktLI\nMIx8+60rnj87UJIuRvXCGkVJigHs4XJVXAVsIUzIMeWRVAqxaVluAqERXn3tgucvOo6njuO+Z7c/\n0nU9KZkyFb0/QtAzxkjJhWzCWYqiZIoo3SoFCeZBZnNVqrEMpqSKKjZR5BiC1EUBhWRCHWShKBL1\nCkouaiALIJO3N1EX3EH+BQUEHsOJZnhyTtXryIbOnCx1NBVDQy4FyYUiZeahMlNEflWjhM37cfRf\nvd2ZUc1EU0DY3Hh8yQ14Mq8rqjcgmUCk9o0OEMQNnhjqLKZwEwo+/L6EGIUQpBrmAJSczGCHScgp\nEKLecwByJpnHrJ6uGly9hgqGFDEF7x5lqHOodxCrp4SLggEl7FnrMPgI2HMGN2TBkWxCV6qNtbh3\nG+qki42mSDDFmKtRmq81gJClGkyXF70LA5OG5HVOVAFTRpNHO08pZDO2OpbFAJMp/lIwiGiKJ1cQ\nVUoxA8hM/szbM5kpZPXozNMuJIpANMBTJBBKqsBCvfxIEVN8wUZVoik8qd6uPluY1sx8AZmSzHa/\nRYoCWjOUeo9R1695xYFAMGMmBvyS2PyVMnnBAqFtyUOajGbJQCQE9XYmT7CiAJUl/AvVV1UdBEQJ\npFBcvZD7RN8dOO6vOR7eZ+iuKXmYHtRkL5dMLqWuJ4erAYgCTQPjkLi9fcH773+Dy8tHbM7OaRdL\nluslElSXlTLafc6tgs91VqAodn9BquHSKyaiNNQYq8t+pYUNeNvcGAIkFyDpeYMEYlHDmaQoGBWh\nRKCobggUlWVRRaJq1nWTviYoS4E7LSYrhazqfOYQ+Jp1luhnUlr48YX5pkCbpiXnE+k0ctjtGYZE\n3428886BrhOj4qaEkFJ/d7SeyEW9xiCNKkkzlgjkpAtYgrBarVgulzx5ZeTV147cbg+Mqacb9/TD\nkZx6oJgida8BREYkBkIpZBvHYArIbZV6eYroi7iacs/JZb1U5S9BKTw3DuZyUowTFZtAMahyhweX\n+a+TAfZgL1XJZkWexamLMKFUEwY9SaketqJZQYjT8+uomJBGf2ESiqqARamx4rSrojap8zbNmhT1\n2DJu3JIafPS+3BtxfYApSqRR79IWNNKQ82gAS5VjkGjeSDFlrkLvwp6L4s8gjY6NARmllHUOSslG\nd9m8GN3sQXynOOe2NdszKuCgghKfkymmPIu3FfVoXC0RjRa1sVL5c/mYG0NT1EQ7ZULISGjqNX2u\n1fMV3CtUIFHM0ytKWblsMMmv3m1Egl6/5FwBjT94MYVV5dtBSnGFgdGciRLmoCro+ONIXWz+w3QN\ncl0LpUzvlTDzKg2A6rjYmhRRMCGRKTZtIQAKUhLFx7w4XtV1msVocvM4PfEEM3h+Z8VWlwQhZJX3\nUpIaaGOqsLmr0e0KgoKyHBiYc/BdfI0ISEMgKWzQRaKf9ed2oBr0GdM4Mownum7Lcf+Ubv+cMg51\nFgVR0C0FstKsOdnaCAWJEGJBGogJmlE49h3Pnr7L5eVbnJ8/YLXe0C5amtAYRe5jGxxxqMHy8Sti\nOWc6AoFMFkEkQzCD7OGAkilhFsuPQihi4pkIZWaUSjCAayBNUBCqi49U16iQizg2pQJHHLCajvC1\n52JtLImIqM63dVIQY37ESJ7ynTOIfqKcEmMaGMaBrh9JKdEPie1NRmiJcVE9hbkx1BscSWUglZEm\nLNWdLx7DUSFKKTMOmZQLTbNg0TY8fJR5882eU9+xOxxYrkGixqacvoxG9/gAibqNkC1mRFb6DqpC\n1cWrC1ONSplQRzGl5Yu0uIGHiUJxFOeKLFO3lZQw827MM5ZYF5F+ZzQlbQizBu+FUKhozIlXoUzI\nqXqo7m1gaFVF2Q2mAmqPHZmY6RojOEoXQ9OEaiyjNHimmyrRZM9odLQUt+smvZPXVJWj0WEFQ5Ml\nIKVVX8KpWyAavWbQpSpvyMowlEQJrrCTKXBsjiyGkVOlDMt8UZlX6PSsGmCpXgUWQyvkukgV6bvn\nHirKUOzhih+QSIxK2fk6DUFp/qpknBo1I+BjFixGVvG1y6LNnxoQQ/NG/Qhi7ICvSQcg+sw69GKi\nOvfM7TMS7XMZheUq537eO8rC1od6chZ/KYNeL/j8mAeecgUvQeIEIKp82TNQXEwg2JwYs+B0rdEx\ndcyCy4Y/sxsro8Gqv1RmIQzMkJj8KNPjDzbFWyvjga99l0lXJNktqTIeRrUWIBQQGkDZosBEXRdx\nxV2MOrZniVEBAYExZfruSHe8pTs+YxheUEpHBTbGarjqyVUFlToF0Wx20OEkpsJhd8vT99/i0aPX\nOL+4ZL1ZEpozkyWTfR8KgVgHJqjXZzSv6i4D+5SJQsVBwzSGxeXe5sCHTkpSe+5xD0Z9hlxsPat8\nxDyqV1iUjRM3vsXDBo2BaXUUEhZyoUzsjlhIwPCa6hwHp2Yei/vVn+74VAYxpYFkyifl0e1ETXwo\naEKKpEggkk3JundYVLo0rlc82KtDm+gZEgxjZkwZCYHlasnlg8Ibny2EBWy3W1arlsXSEap6eiEG\n9XZm1KbaDlWkOZvYl0yUiERfUi5kZgg9KaKMmmyAofdiJK+hT4+J+Bkm/O1KbHpqFWCPR7kCtP9U\nJeRxLp9fRZWlejLZv6oT62DC4zB+9Yry8iQIiFKaPpcuysbbT8S6WzeLF01LhwmzuRcmVaEXUcMh\nMwUv0kz3XYGGU+RRDWJxlGem2hZWMQ9ZvXf7XBFKNvnxESvJDC3TvyUYSJkoQMqk+kpJJEfF7j/U\nTE/3Yn3+/H3sHpxumwyaKygCxBBmTEWo3qI+i/uQFqO1hZpJE00/mUcDbhZLcQrqzlwUPFFq8v6Y\nPat7porGlQ50Y2V0pz2TyqO/Ng1J8chPYQJAYB6qqUSfv2L34ysvqPyqxDit6nJqtKydV2l6qJ5L\nmWSm5ESx8IF6Ys6sFCb6PxnYmu6xktPihm8yUogQioKDnEaLYQopqy4ppnhj8GefGSWL+9fs42KA\nzuYpWxzel1KdumIyEDKShZQG+n7H8XjF6ficcTyAJJsnNU5SCjkLldF3XWFTHkX5htEc1iDQDQPP\nX7zP0+fv8ODRY84vzlkuVzSxNQNr42DjEo2+zg6epRCKMk45ZwKjjl7QkFMxuZWgQFIBrOuLZLkD\nRl/bfIeQKCUQiFACyFgZEKQQQ9ASEhIxOs2viTNiA1hmRtj/U4FLVVvFAnHKJAmYTDttPmOIPsXx\nKXqZelaeKvhF29A0kcWi4ZXXVxyPHXJyZRCmAZspI8QXnlF1Vem6AioQCjFq9uNisSDESAiBdiE8\neLAk55HFSpNAPNamrrgiVV88giI5V8aT0imqlGdLRz0KVbzkUg2tGzZdT0UNuX3fx0HjollpLAvG\nY2idYsHv0MAs8Ky2N84/poLqwMkNrXk4+j0LtpuBdmU8Zbua4QU8C7OOr6OnoBl8EibUNClbXxSe\nkGFf9HGLft6ohtFQJzPlORnbMsNigme8Zkk0sdXXnFaBidqdpMXmY4ruJ79fW9cla2xFWWYzZqVY\nzMVixYTJsM3GDKl5Z0ax+TvmiVXK0YSjkqLZxkcmb9hiL/ocwQyVjbWNo8y9KlMaHqszDWPXSHgS\nT3Cq1BTNRJ3XfybZdXqNaf79XtXQpMnwZ/ScZneKAYFsiSYlW5pCQRkWycQYJ/BUtZLeW7D4uc4/\nGGeIU8Ye01PZvfsAlVBwFsWfh1LtlxojDV24B4qFVdRYeczdgJmDHffsXXFWAKlrPuMeoeUTiBq8\n7LrA5kPcm7XX1SPW0XdqOJs3GbLGpD2hq+prESRKzbbuhgPH0w3Hwwv67oaSR81TwObSjHsuU9jH\n3qzz7rfowCtYzsPhsOfp07d58sqbPHr4hPPzRNMu7Pyhyhco5VyTD8USXdDkMoJSmBp3Vx2TbdLK\nzCApwzDNZ5Zi39FzEQIhF3IQ1fk5U4JoMg+JlkiSQhqTsRjGTFhCXsDn2Z4/WB4F0zWxOOscxCre\n0hDeJGef3iJ+gkHUiYihIYZE2zacnW1o24bVquG7v+cBx8OR06FAZ8ZEYqUBbfjJZTAhiig1NSoq\nCUK7WHH5aMmDhxs2ZyvaRUOzaGilJYRAE2GzEo6nkwphSozDQEmJ0kRibHET4DGqVAdOJi+2uFkM\nlODxramEwrNCFYUrxtWkjVgXl1KWnmU2xZVqJqmYEsxUD8hsc6WXVOCzkpWWTFNHahbXqtMopZY0\n6H2UiVZn8nI9kxc38MHR+4xmyqJgTdqqrAVmpQ3qVRZR4xJwOkQVYjCRKDKqwJcJLkWJk9dXx0Tv\nJYqNqXmHwRSkexylGk/Mg8xMQjx5WTknyzCFbMZQ10uePB0qSYynhwcrOZmyUCflhqFw9TZlJvZS\nQYeXemgWrHseBm5MMc0NriPoUEGaPU+wmEsFmNP1PRGkEC1D2mRBzKCUydOqcWujjX3RZ6MNY40b\nmyLy1exGtNTwClMc2JQxTsMWi+WJyZAyMzUz2O4tl9GlTu8tBAMOUOONTk8zItLoOswGCNzDcpAj\nYpnYgZpyn33tqqUMpXGYQsgzlsfmyudkMtAOEDzBJ5hXk9DlqvNSRKohhGBiGEglE6NSpW7ABVX0\nnvwiQb06Txt0ufVSkpQSXXekO+44nZ6R04FGQgVmFAeXOpP26JQCqaZnGOMSNAs8BL1KI8KYEtdX\nT3nx/D1ee/wZHlwOLJcrYuPAZWJyVHwjkQmsRFHAGiUh2ZgeD/94aZMBo2xsjMRgGezRAEpWetgA\ntwNfnb9IyNlCCsqKBSlQGl3LoVCyZaqTCJbxncpgxjUhIVo2uOmNGAhJ1wboPAVjZVzruZH8tMen\n2u0iSEOURBMXrDcb8xBbvutLT9jfHtjd7uj7E8N4MmvtnWkmehJU2QXrNNOuhNVmyeWjFZ/5zAM+\n/7knPHp0ycX5GYulxiQDSomU3NN3PadugHykXRxZr3va5YIYQk0f9kB/iMGoIR08KS6czvmrhCl4\nUmUXZEKg+r9YF5IrD00hH029qeKb0D6Tca3ZUUa1VU/BDVC4o6TcNLkX6XED9QA8wKwfVg8l4DRt\nqckcuvikiCJAlxvzLEMwCtU9ebH6OBGL+fkXDDkSTFFlQtaOQ6483f4X+24wRYIZNk+nL7aw3Ux4\nnE3LJCzLtnoRk1ItueCZp3NvxhIs60jWWigDF7k4RV7ugBTsvEix2io3KtFkdMTNRjAWYWIsJ+9e\nX7D38wCyUERNMTAW6tip7MVKKYo/B053+0q1Zyt+bvcGVIEXslJXLoR4HA6dbwN7tTFEUYgiLicl\nTXVZYvDIQwB1Tbhn7obEvWsDUh6Ps7gmYN6ZrgkmGKTnCE6lF1OgFqe1pJhURjOIjX0349mlpRQN\nnRDcxNv3xOZHvTn3IOzSOBis/7PXQi0tyvXzEgIxF03OCRhQM69IhCCt4q6goDha/D4XA2xWYkZJ\nNfzpWeOUKcHQweZQMsNwout2dIcr+tMzSjmqXkiuvqXKgstuKfXxqk7QEIT96NRUj3S/O/L+03d5\n/dVnPHj8iPXZisWitQSnUNeCHmHK+hWx51HZCSFUJq/gwC1b6CBYWCxVHZSLetsxxMlYEiwpR9dd\nCI3Np+umQkmjjZ3eT5CC46ScRkAZimj/4pnutiDFPEcpQZk6S/qj6o2sTkANj3zy8bEG0RdbSolx\n1MSXklWhNk3k9Tces9sd2O12HA97jiespGFCCTq1St3EVWR9tuD8cs2DJ0seP7rg8eMNj5+c8cqT\nSx4/Ome9XhOiKyEzbgRSKux2e2JINHHD2aZjfbaxRdIw0VrcWRipWJ1fXfjZBN/GzZIuVFqSnQ+c\n+lEbYQYp2AKrrcDc06FOgoKqeEd4pw9gSNZijTlXhallBWGaSKaFEJyuLPP3i3lmnsxk8EMcfRcm\nOtkTSIIhZIsT2UWm7NJcx8eVrMyMm49u8TRwwWKbpkCNHtHPuBXJd8ajBr4dPfsc4HEu93RTVVRa\nj2nGrxpInwLLMqwevs77NIaO+N1waRypIBqPLBPtqq85hWfGx57TtZAmbolmS8s8qUsNqxuTCWRM\n96z3ZqZ3nl1ZcYJ+prYXc9AFFrP1ZAJ7UokUM5wUn9Hp+xRPmlHFpF510qQlH63qyWvagheo+Hzl\nMtb49USF+vn9/g3FmXJV+TYvD4+ri4KqPJiXKpQyVIhQwZDJt2dAKg6xa4rP5UgWjQnWdVcBC/UZ\n/NkK2gDB6foyheZNbMNEx9n4hlBqOr/kYpmXGMixMc7qzSpMtHBKNvMm0/nT2NN1B06HLcf9M1K/\ns1q60daET78xFdlITtej9mxuoPzmzYG1ZB/IeeTm+jkvbp7yyu51Li8uWK1WWn5WjYLgDS8UPymd\nOl+DLpBCqK9LjIixFjolvs5KpTVVu8541OBAT6rKEfLM8bBypYB53h6yCuSQKWWcxdrt3hHLFi64\nKKoRdsAj1LKpomssz/XvJxyfmFSTc2G3O7Lf7zgdDvrIWRf5+fqMV1+55ItffMzNzZH9bsewPZJK\nQ/bBNKXaLgIPX1nxxpuXvPraGY+frHn48IzLyzPOz9ecnW3YbFaERuOC875+iDCMI/vDjpxPtM0Z\nDy4fkpO5DIbsxAK1lcf2bE5x/CW2KCpUpMYCZwjTJS7npOUB4ijDEzBsfChMKfkuqWIlTsXij9b1\nwqfUwahr2hofkEqb+XVqb1NDjF7ASpk+P5/sTEIMDQf30mf3qkXIVrLiVKRgwXNTUmSkUopUTxLs\nI0WzaqN5nmLBdUpGSmPXstEwQ6XPavVFkijiKNLHUwyBJ0twKNXITqUUmtQlEix26B5CxuNXHkTH\nWIMwSygJFVm6cbVnMXTq9V9qvGSWlCKM4whdoqdHQqCNLW27gMYWtjVkCMHKYJT789NVYDNJgYKV\nSnLPvNkpicLiNWXSB7Uxgj+LawTVhhUsqcIwWXdXt2YoRwM7WrhdSEZ5qQQVysyTR38vajDnVHb1\nDMVn0mnVoBmFhtSLewNFwUEuw+T1+QfwGjSXB1WG89ioJpyZ52gdqQqpxsO185WOm1YIO9U+Ke86\nXq7Ep+VXAbPPh8bsrT42aAa4jsfdeK02oLC/g4GeNI1TKZkxdXTdLd1xS3+6Jo8dQkIko2yagSRj\nteZGz2uifbrNqVOjbbIUgtBkSAUOux3Pn73PzevXPHr8mLN8zuJOBx8MtJdJ1qx8y/xB9ZBTMkAv\nCt7cCNcM6kkuXN+VGdJwveQldjXPowQLmRjVHTKjOS0hRpLVwHotswI8W5vRa47NQWHSj8UA5eQY\nTLqpfv9THB9rEHPOpJR45533eO+9Fxz3PSGOdL9wACns9gegcL5Z8uqTDU8fn3M4HRi6g7ncZvlj\nYbWOPLxsef3JGa+/dsHjVy44v9hwdrZkvV6zWC5o24UKVbYFGdVDjG2kaVW5dV3H/rDndDwyDgNh\nvbSHn6F1ozJzzrW4ekKz/nQz6okCxbPidEirZyFOYUzpxWKdRDRhaE7HAiRDi6rIU3LlMT8stuWu\nR9VtUutpctbWZMG0qZeqeCKNXs+yvCZQZ/8ppjgtxmVdVGKIGrTGaVxD58VdIDcopjjKLDkqm7IO\nljRglr3IlNQjRWps0j32WBqqvyOzhB+oAq/zYlRiLUOQSfix589GB7uye6mAvJ6LYnNV/Q5SGTVZ\nwRo7FKqNqPRPyZiXBiVnDrsDL569y/XVU47HLYHCYrHm7GzJg4cPuLh8wObsksX6HAmRNCZis6Bd\nrIjNghIaPI6pFI9U2qkmk/nomBZ0AEeZYnpQTEHYc8/HRDVZ/X6xkxWKJkfYaIll7qpxSWowannD\nZAhUEsJ0z8YQBAO4xa8perVgiH3KNp5bGssYtVZdGmNz4NNUGa4mv5SqN3DDWEXE5arCLZjLGgpK\nxFgJV+41kc8AkIKGu2OOTL6xZpvqvSt1OK07qXdq+iHolWKJ5Kx5EVkgz0IklEIae/puz+l4Rd9f\ng9Vk+71KtlivFb3rGOH+UAXRlSr121YnbKJOgXEYuLp+n5ubZ+z3r3Lx4JJ2pSGoOcj1ZOPq5WHg\nXn1TK1uZgRpg6uHqgBWVyQrOvA5VqN229ILVo9P6brtyhhyKgg2PH6NrMFfApRA/FAvYVK/fGCBR\ncFVjhgWEBu1I5kb/Zf370cfHG8RUGIbEV77ybf7kj7/NzbZjsUjsfv2REIVvfv09Skmc9qqs2qal\njUuCtGhyRlU9aCL2aMhRs/nSmBj6RAxTW6HYqlA3UWvfSh5ZLVacbdas1wu6/sQ4Dhy7I93Qkcsl\ni9CohyGG/NB2Q/M+mNo+DJwGc9ozhMa8EM/I0+94dpZ4lpbRm66UtFRD4xyeti+mCLI1I1d2TUxY\nfZm5lEzQv5BJjqJNYbjAV5VZH0XsM47Ups+pQQoIltFJqtRe9BpJ+74+m/+tNUHevQPx/qr6dvJE\nAjeignp5tScniLTM7pZKHYp7svqkHp+d4iYGLNy7QMzDSLMRM69ImKgdj0thi1KUF1Bvx7PjvCOM\nluBMlKwRedZ7cRxHutORkrMqlOfPePH8XW6un3N7+4xTdyClI5tVy+X5BWO/pPQb8vGS8uARzePP\n0K7OGIdEP0ROh4iwILYr2uWGEFtCs4AYrTGEghUHTQGs/d8kExIiJWsSSEmj9m90OrxQgRh5ijW5\nQDjdjVGX2t0mmvHK9pmpfZ5nqmq9qSsaYQJybhw9Puaew9wgqbILVn/oZTQlUxNP9HYN7Mg4xfYN\nCCXzQj07eTJcGpdXQKF9Z0OOVl1lytW94fLSfdXgKtUjyk7PmWeEATVtVTZ5NhqXdsrYgAfOpKjc\nFetiE0JreidDbE1WVReM3UB32nM6vWAYtmqkRYH/ZIg0jyEL1J7Pszn1v+e6QLDEmqBeYkT13P52\ny4urp9zuPsuj0xM2Z2eE1puMFAvBmCYMGnbR/tKTodE5n/UqLRa/RZsuBLyHqBsc0/Oeu2Fgv5SR\nKXFLw0Xas0E9asnFdG3U+TegIJaAVrInp+lUhxJAAjloSCWXRCYpM+h6OxdK8ZyCXHPlPs3xsQYx\n5cQ4jnzja+/xEz/+Ptc3PSKJ7W1PDPBH/9g7bNbCOA68uD5yPPaaEIEw5Fs9yY8KHVvejweu2nf5\niUVD20aaJlr7rmBNnrXRc4zRXHpXliZU40jfDwzDgBBo2wXLxVJLNILTI9NklJcfpnzcn3f/koqA\np1cmz2a+wOZfEu5c1W2r/fnVB18D4O/+VT/8wZupSGYCEHOU/aGfv3u3k7G1e/nAcziCd5Q4+9zd\nU9/14GT69Ow+pCrb6RwyO2f5kO984BEq2v74Y/b8L8UCJsrnw8bopct9SBzBGZBx6EnjYHVQiTEP\n1VMPQRN2tM3cJK8C1SgHo0tjbAhRW+uNKVlyUCTERjNd7X2pnsxcxj7+nssMQNX5n/7z0vdmr/v8\nzEWpJn29NEfVA+Al+f+oQwyMOfq/6xlVBV7B3uyb80vf/aOe+45JePk57NoOuqa/X7qPO/dT+Ite\n/Cb+iud/6WzsaoSzJtRV4Oiskbfpc8bEYo45Z6IlbRS0rECK5tJ7ECWlkaHvGLqj0qX5iIR54gdo\nsog/8uQRSsDTGgzEU8sxrEKBENVLjFOyMV1/4ur6Bbe3t3SnE+M40rTtNJa17lfvI1segNypQy4G\norRGs5aZ4I6F+eBet1mEErLNNdVgqllsCUEYs3nGQTyp9k5tLwXEnIOmaPgrMRo7gdammmyIN95I\n6pQok22dnILdj/U8Dt8pD3EcE0M/8ta3r7h+3tGdlHoahsxQCj/xY89olyCh0J0O7G9HNAv87mkL\nGoscBu0wP/SZEEZC1J6WTRNp28hi2bAQIc7ce3v86jWWPLVpqunyYgi2YF7pS0u9Lrpi//8Q63hn\nEU0LxRem3BGDCQRNNO1Lh3zUHx9m5OSl3z9cwZd6H95ZY/rYy2e480tVboamefl57b2XLvnxClE+\n4q/ZgvrAXZX61h3vb/bZD8wNHi/44BO6Z3znsrO/VYnMEK9foxRTVD1935HGXikvqBnUIhCjNxvX\n3UJiDDWDUuOY2dihYtvxDDDajg/2JCWNlKED0USc2LS07dJqxMJH2/JPwgkf8v4k6+WD03DHzswF\n564B9KH+VKB6/t25N3nnpqa4+ISnZFpz9Voyu7fZrc8Nod//dAMvPf1H3bXOxU+sfwoeowbRE6bu\nnFgsvm4xbZL9XWyda42exvEsm9zjraaL1LA5UCzkNNL3e07HG8buWAvgzVyilOisSbbj4NlQCVCd\nXZukeSTIDaFTqOOY2G1v2N5cs9/tefBwYLlaVwCh0x+m5kN1+wilS+toeBMNP7nFVHEQZC0g9f7N\nszfj6IAouC0oWRvemydfrKFKzA1IUpCQBbHffWeNYu0zS8naHzVkSnJJDWb8gpWoKDXv8h691+/P\n4Ph4gzgMdP3AW29fc+wGNXSzhXM8DRz2o25yOZ4Yc6eJKETk320pJRF+nT5QIxsW4SHLeK5bLgWh\nCUK7DGzOl7z65gU/7895le/93s/xxhtPOL9YATCcBk7HE9vbW/b7A8f9gW4YWS3PePLwdV5/9TUe\nPLgkNG2lyrT3n7rMTpXhMRDj5zX+EmfctscHnR7U7D03xmIp4okCRazxLkCpguZxBorTPkURXwj8\nPX/eDwPwv/2P/uE7FAy2EDIFcsIL8cUMQc5TrZcKhi5a7V7v0XavfgtaCGxZkDEInkQTQksRbc/U\nxAVazqFCnXNWemJuY0Xw7i/Rsng9A00TbZRu8tpPsU40NeVc9F69fZ0nADnZVFPxzUAXiwN4ypPG\nHRLz+sIpIcrGHV9cBUomZxjGjqE7cdgeePHsfbKMnF1csFi0pDRwOJy4fv6M95++w3b7Dt3hmpwG\nlsslDx485snjx7z+5pusVi2rZUtsG9arDW27olm0iBTGsWfsEt3pqFsIERjHREoDp9OR/e2OMamc\nDd2Rrhvohp5T1xObBQ8evM6bn/k+vvBd38/Fw8csWp8P9VB16j2DL1NSsT1Bh+p1euJASYN1L7Iy\nAMvQVKbGE6cm+ffOHSWPtpaDKVNV0tkKp6d2fHqd4N8zmlfsu5V1sKQpsfhnSnqvKY265VIpSLbk\niRA18xHRdHyRmkjlMcTaoFu8nEWBb03msYbvQtRuQRHd4iyqgg4z5Z4NgP213/s3qswV89zx61KT\nOT0WGqTRWjiT6Vx0g4LgxjGIFYAX8LhjKPX7njCWUk/X7+lO14zDjVGPlqxjJVOeBOWWsPgahLt9\nPvUS+hn96oRrQkGyZ44qbXp1/Zzb/Z5Td2Kd1jNsZKAOqaUwxbbAuwNOmGJwGsPUzj6VkreQUi3j\nUV7f1vOUlZCLdbMxQ+pZ416epbWgCjCKZ59GPU9jeiNliEETq7QDmd5iNrpbEwYhZA9fuqeSq675\nNMfHGsSuHzmdBp6/OJBLQyvReH/RiUyJNI7klOw1qzGqWUDgWWO5jFagb90xCvTDyNDD6ZAYk/Do\n8YY3Xtvz6PE5Z3mFZOgOHdfXO65vdhyPR9IwkEtitVCjkdNISYXQaOJI9qB6GScUZPEn3226YgZx\nNW81fLU+z9C/KV2lL2whuABW9zDUf90Y6sNPWa7z1mPOyatdncYplKL3bwZQ9VDQZr7Feon6Tg9+\nXyXaIgxmZKFE97lGivUqrUi8Nv22ELQEzyGp9+g+pIY4QnUCCmLKoVB35tYlU+keNWRTdp8vjppN\nWs2tGlDdOcHPY0X3wXYPKJi3b0F+U0JOz3mMyk+ZS+Gwv+Hm6gW77S1X18/o+wPkgauriNBwuN2y\nP10phTUcWS2F89UZy8WChw8e8vDBYx4+eczlw0cs2gXtoiHGSNMuTAc3VnwMYZGRGK2UAY7HE7nL\nSNPSrpeUvmfsOzKFMWsv3xAKadyz3b7N8fCCqxff4I3PfA+vvPJ52uWS2Oj+oIvVmqZZ+gLSOElO\n1C2dKEbpTokYMHXpqdq0zoFLss6zIIRoIMfkjFJ014ignsBc2yoQNpQuUuOgmhlsGZ9lNMnRWl29\nd6Mjjb2pbdBsrfm5KnVWLEHH5cUK9DVLtEzzbU+EJWCJK2/LIYiIZXyiKf7FkoOqujdw7H1nq5cK\n3rlFsztDvU+StzycZawLNRtS0PiWlwH5GdM4MvRH+v6aUk7qOdX10mAzZ9sxUTviSGCKF7txmZyf\nO4euEo0hRlEY0HUdN9fP2N/eaHw8PaprVunPsc4PpguCaKaqpWwiQfc2tVVeHQqxmGftTRqyqrso\nuo59FxzLo6jXqYrCdKw1VZCgOQ/B9GuxMao8S4076zhh2b3emjPkRNYtTXR2RGrLRy3l4FMfH28Q\nu4GuGznsj7TtuaGC+dknVCNBjaXkl67ucMFe1gFrZsgkkXOhPyVOx0Tf9QzDQE6ZNIxstwfeffcF\n77x7Rd8NLNpA02SEhouzc4axRzcfndBvDt45AXPdvQZr4ud9j7dAmSX/zJ9uQjQqqRnHxL7XmBc5\n64Kc9g0LuNL4II3kO3B7sXqxTVkdUOhvdz0h8EWWZwrAknV8L0YJ3lmOmjVnsa1QtGWSNy7IL3mW\nrm48HqSJJ82sVilp0odM96Io3r5di7OLKTVTaF6vKUyenI8nUFPOC4DtyVZ7kpqnQsN8uzADplZp\noUXBp/2eq2dPeevbX+N2v6VZLOhPHXkcGLot25v32O+uyYxszpacrc958Pici7Mzzs43XFycc35x\nwXp1xnK1ZNEu9UrJA/cjpSRya2AhCFFa2vWGptGC5s3QMw4jQz9we3vNfndLc2w5cYJcWC/XDGlQ\nYzwm9rfP2W2f8/Tdr/PgwWuszx5wfvmE1974PA+fvFmRuXoGZszEvIU01npJ701bZcAQuWvp4lSW\njV7djk2ieUnVxVCgZGi61IxrK2txADhPmMA9GlXcvpOMy60EzcDU7bq0HVwIjZWpCN7bONTm8fbN\nqi9KLdGxxXNnPQVjdWo82+tWKXijDi/KvhPDtBjT/JyhNp5gUmuiXXSCZ2tjHo/rihJqu7GJGjTd\nYiplHE703Z5xOOm6slZruluLt53TI89lO7va9Pv2teiQdQLnZgOm14rmf2y3N2xvrzgcDwzjWGXC\nvW73+N3Jye6tUmrczXVNLp4kaJsBlHn4hmqxc9VVPm3Z6g8VwBcJlJjJyeSoqOx5UllB6ykF3Zw9\no3snCglthKDrL3miTik1jpnM+XJWTnffuNsL+ZOOTzCImgU69gMh9MTQzqFU5fcdLTryn6yOKVuj\ngzIjuvOeTTyhot40Jvp+pB9Gcs4M40h/Gthuj7z91jV/6iffoe8K5xctDy4jJQUuz470Fz15HCks\niNH4cTRjyne7924KKZm02P073qt5h3K3/q7af3+OGYUz0ZgWyMW9JaMQXTCsxmZ+qCJzoxKqIXTj\nqLKlL2b0HIrINEAcPChtSjNEqrelSQBx6kLjKFyKdbVwI+X1VF4T6Ek3CtNyKZPC0RtV5SlY3MAp\nvXktpJereO2gJa5Knnl00/ho/M2Ns9PYfg+26wVOr5TJ40CzRlN/4vb2hre+8dO8862f4vrmGe1y\nRbNYsr3acuoOBEaGcU+RQTPxJLBeLXn04JKLywvOzzes1xvaxZJ20VJSoksHRLTRcQFiu2CxXLGK\nDSGKUade86r3voiBlgVtiJR8ruOahdPxqCBJhNVyyWq1pOs6xrGjO5047K85Hrc07YqHD9+gO+y5\nvbnm/PIB680li+VaEyJq84ixNjgX8UxulXmznnpPtlmxZ/BqcgSm6ByYzNZDnduJAnPD50Bv+p4X\n0DOVKtl9KFUWjQbUJIggUGKA4glFkzET6/BjyKxW/BDj7L5MAU9WqRqSmpGonB5T9Fb1j3sM84S3\nWiYyP5/pq+JNBXx9yNTaTkGq9cn08xU3T7NShEoCFYax49TdMHQ3SB7rPYjpoKn1kulL0wUBDe3l\n2RMxu2bVI0xGcP53SYX97Y6b7RXH44Gh631UkFAIXrHjpzTvzzsAeT1p9NaVdWcUfVZtHlRm0mTe\nGmbYxRtcWJmF08HFtnQLMjEfKHjBnRYLVHo8Mlv9tBpeA+TiOrFANh0q2oBgrrvLpF4+1fGxBrHv\n1DjlNCg1Ga2NlONNsVR964SvutSjQvNDkWYxpE2Y4j9O8Yxjou8zY4JxyPSnjuPuxM31jnff3fLu\nWzvGXrheB7aXDeMIlw8e8uRxx5AG1rVLhl7R93DNQQ2DxgNyVdbBqA7dYsURti0IR1JVxDJWGGQp\n7GZKK3U41UZNMTF7Zq+R0gGztPRcr0H9p0yL0VKbFekamPWxciBtSM9honfXCSHUnaglxJoUYFrI\nxse4/9oZZZolsTZJtVREinXDmMFQPyoyLxVgYAX2rlQmygMcfqii1u9NXVVKpd+8JjFG9/R194OS\nYcyZ0/HE/vaGF++/zfXz99hu30M4UfItu5tnrJZrFhFkpVtDXT645PzinLZpWC2XnJ+fc3n5kLZt\nFZxlISfoTj3j0CMSWK42NIslMUJsA00biI2usDxmUk70/cDYadx8TBo77/qe/WFP359IfSKEzGLZ\nMA4K8ppmwXKx5tEj4XTqGIeRU3fkeLrm+PaWm+v3uXz+mPPLJ7zy+hd58vizrM7OaRcrECuhEIza\n1OQEV6a4YjEB0Sm3BI5scixSYzfqcZgcuUGtTIQJhMmACkesQC6XZGsiEud5CxUA6ecJo51O5VK8\ny0+QuzE3W2q6g7vod2vowtoXYu3RPEvXtb+4cYbJbZp7q3PGRWXcaVY3XMoyzcDCbEWbXq5eu1sk\nX38yj/1JmXmIhaE/MZx25OGowM7XVSnmlYppiX669zqXzGhsZvfkhq2yldWQzkO/3bHn5uaK42FP\n13dqHSToM1hmrF4uV6qY7BpMdB6ziQ5MTJZ5ufVCbtSDGEM4cyxMP+RZIwAvvSkiUPv2zr26gAd1\nnXH0UpEpvGXjkmxenKlEqKUWZiSjfKoOpcCnyDL1TVid8nCEV4rG7JQ6nHkaobGYl9+e98Qz6rKM\n6hJHa9vjtGIudKdBSytOPafQst3uef78lmfvH+n2+tCnXBi6gSLw5MmWN147MgwDmt5qgVVLWimi\nnLrDp1hmacvoPIYSrIXXlCZcu1G4+BWxoK3TnBaHqXV9hprcZTdUrXppire5AfBkB09zVtrLJt8p\nEffuCORsgWkSMTQVgauAWms6gu1LaYIoM3qYfMdjLDW2A1IiuSq0bGySWAakKgpE+xf6LDpinoy6\nKQFfuKUwlmSCqJR07blp59M4sylzp+ByqbXi3h7LUemYMmM/cHN9xbtvfYv33/smL56/y9Bvefzo\nguViwaJtaZtM08JqvWG5WCOSaJrIerlmtTmjCa2yBeNIHlW2F8s1TZ8IMdK0Davlis1mTdO0EPWZ\n0zjQHQ/6DHmkjKMmupRBx99sUbtqWOaGw+7I4XiiO/WUojxYCHA6HQkitG1kvTnndDqCFNomMvQj\n/bDl5rrndDpwPO148f7bXD56nVde+yyb8wc0bUuNh5mS8Q2tbSaoDRmKAZxSyIaoq8clkakxuBnB\nKstQKcVi74gyKKUup2i1qJrQ4+sCk0XfdDcE61SCUm0+TiKCRFXOE8dCTb6weMek/E1uxb1PB4KW\n9fkLfsWfB8Av3/3gzGwU05P65D+x/kkAfuv3/E1Vx83NpNx94aVjtobdRbvzbdcXOic/sf4pSin8\nzv/u79MM035fDYd/tiY9VYdhuprLvjvrjlUcj9/5u34eSxjEcgN63l/+FH/i8n0263PeevQOgvB3\n/+rf6Ve5c+fTtV96dKewy+yTMolOAX7tN34lv/ErP4THjP3s03eDNT2YbILKp5et+BxINWZ5FhPU\ncEpB8tRrWYjmgI0gbgpNtmyTgrqP1qc8PsV+iPrkJavyCJYGKyLEpmXoqN5LNRSEO+eZvCaNC+kD\natcU7S2ZoWTN3DuO7Hcn8ggvrna8996Om6uObJZMxkJKie1Vz3vPtnx+e8Ph+AqPxgtkgRqg4GnT\nTu14nDDXJBvVy9aXNMO8iBvcK7Okg0o7Riu4t+crrpTqiE1n8NhElQw9PInAW6VJVkHJRi/p+Swd\n2wUnCNE6umuTXC0g1uRB2z2g5LlzgITG6uMEmSGk7HFUqz3KQTvU+04OiBbqaswQI1GmcLw3ENet\nhEpVkAXj/ovFNm3ckUJJRZFJpdWmlmlSs5SwtOxCLqO2QTMDmsZEdzxwc3PD29/6Jj/5p/4Ex8MV\nbegZ8p4xr2lSYH2+IYYN55tz3Sh1vVKaNLZKsY4jQiFZw4kg0B0O3G63BAksFi2PHj8iN5DHhjFk\n67pf8GSrlBJ56IjSEBYLQhb60wCx0CwCYQycENp2yVlY0C5GTqcjfa8xRleox2OqnkkkUoJeP6Md\ndY6HG/aHG2L8Fu17G957+zO8+eaXeeWNz7M5f6TzE5yk8nqwMmMNtHetTo8p4grgMK/NykdqwGpK\nxfdYrqseVb6+HmL9XJV9EY3bVSZjgk/FYkghaHKOGJhz5ekMiPpf+kw5DNOKcuMeIrUhAWagxdbw\ntASrnNUvMukx++rMe5x9cabIJ6M6X8Cu3D9oNcudz/mLxZiNSSl7rNR7n6qQ+1jPvNsgqiPyBEJe\nvqB7rvX3D9wV5JxUZt1yzjCPToy9OL9IvZWZ/ocaPvG4on628PWH3wTgN37lv2OF8cE6Sml2qesE\n0PwFz1QOIpTQEnKoPacrRV9MLq2sotQdjCZK3OODtbuQxzXFM5VFW+t9pwziNHKCd5OQubELQmwb\nnfRQzNOyAPyE7XDvUBjxTYYDGpP05q+FwqkrbG87XjzdsVp0PH+x5713D5z2vdIL1uO0lMzpdGR7\nfeB2d2R32NENj1iSrI1RVPNWtJi6UEi5pxCMQvJWP1Pqv06Y0rdTvF2qe2+owCXFBt7jphPmA2oG\nl5cmOJ+ub45TEkRR0JHGsVIQvmWTZ7e5R+Yek3t9UTy7TWo3HW01hSmNPIFaDI2KR17sfhxuOq2K\nWGafe6hGo8CkbOvzB214jF8jT71WRQgxVlnQcgKv6zNvyRUf3ulH72tMCgw0vKK1gvvbPdvrF3zj\nmz/FO299lefPv0UjQlxoc4e+O3G+XnP58CGr1YbVZqXnF6E/nRhOI03TkoaBYegZkmZGK1hKhEZr\nYM/P1qzXSyQI/elISAPNYmXF+NCEwGLdwmZFQTd8lRHIwvG442a3ZbRk2fXmEgmBlBND17Hf77m5\nuSYNR7JoEsfheKDvO9rFkqZpyQJpzBx2W6V6mpZ+0E1lT/trnj/9Jm88+17e+NyXubh8zGp9Qdsu\ndVd2glFZU0KSo2Zfu5W1cPdC0gwI6dxl64lav1NlaYbMi/enVAOrnn9Sv9XiddnoNg0DRNv2SoVX\ne+6C78gxNSmQSv3F0Nb48tRGTtQo4/14zQiHwi/f/iAI/Is/9c9QO5aId0jSs//W7/4bKcAf+Mrv\nq5myvhZqK8ICdQ9GCnj2sycv5WyF7K4TFDxMbfSUTfhrv+dvpu9P/C/+4K/n21/5wxy330bIBCmE\nuCGGC5BAKifyeCTnAymPSFix2rzBYv2A0+mG2+3bdPtbxpMmoowjDIP9jMI4QkrCMEI/Qpf13z4V\nxgTrizW/8Jf+Qn7JL/6V/IH/+f+D2Eb+sf/wH9R5d9BqxsQbwGf7m4KyCJ7iaoZXt1OTytX+PT/0\nD+HlXR520nZ2lhGN68mpW5hm7dtk1/pFJofJvGcNoxRNmEFp1mJ6UfcuzfY904GeFWw0rUjiZ5Jm\n+vEG0YXpTkPV6eTBF0wUGB2jTLTa3UxJDBkkShmgLNSozAahP41cvb8nDIUmRp5fHXjx/GANX4sh\nAnWP81jY3R7Ybg+cTj29dRppmlaHxgRWRT4TJU6kkA2yo3WpWW5eX+gZqw0EM/JO6dnCERFrB6e4\nVmlAT8nWOi4xCcqzDhBF3VHzp5Wy8kbZyJSs4z+hgpBstJXHYQTfZitYENpr0MRS2GsbLZklJMxS\n86WocPu33ZBNBn4qUSnicacZFp6nuRVPTXJA5p8rSNQ4QS6aHCPmgergYAFy816KVSOWxJhGjt2B\nd977Jj/1J/8E3/rWT3DcX0MYWTctY1yyahdsFg3n65Z1G1m2LYvY4opujJFTt2O7u2HsR7rTjnEc\nyUmNxmq15PLiIaXLbPstu+0NbdOyWK1Zrde0yyXNomW5WDD2IxIC4zBwOuh5iJGSYRh154Zg7EOR\nQtusCCkyFG0Ufna+puSB/fFEEyJt0zCMA6fuiPQ9TRCG4UTOgyY+jNBEnbdx2BNEuLr+Kqf+OZvN\nIy7OX+Hy4atcPHjCcn1GXCzw2kCxXqGqRGYejK3hEhT5+Q4dHutxqs4Vpm+n4/tk+nk8GabKqlh6\npFBjRVSRsxCB6NqY5NvkPhcLGZmMZc18DBJtKzO7qtOoAkox6nmD84po2ZeWcDgdaY9dJgWsujwR\nssUAJdR7dkVbJBO9taHvpmPeBxbXngCnrXu7Rja9Ukqh74+k3IPtryphTYwbmnCOxJaYl/Q5k3KH\nhIazizd58sbP5+LhaxyPW959e8Xz9JOkfl9Lq6qT5/gTMyxMtK9r3r4ftH67P9W16zFY1WFjdWB0\nDrLVOpr+FmxNuu4Qc+Immr7qimJJgOTaLcYNqcKZOOUQYXof0I2OvX5QWRmNR0arbUQNaKayEClr\n/a02sddsadVz7l3O8hOqnvrk4+Mp0xly8CLpWmNkhiFY5w6K1If2QLQe876EnmmajDcuaP2Sosju\nNPD02ZHjQYtEt9sTh92pdgVxX8eF9nTo2d4c2O8PdN2JUi5BpkVQd6koigBDXSRWv8VELymU9P2+\nzDtzBAOGqGcGvhg6lWkh4caxvm5U5mxMtXEB1N0arF5K7KZFyqxkw2tobCH7Ho3WdFizCb21lCfq\neJymqTSFWdZKY06traZYJeha9/6v87otVyKgQfMy+7wrK61ZnGUbW3KEd+uvVIjForCYkDonE3gJ\nITCMPeNpJMRIdzry3rtv8bWv/yTbm6e0EULI7E4dfX8gj2tagbE7cH52xubsjM35uSbMhIBEjS3m\nXGhjw3IZOfYnDvsD46nndOqIzYHFMrNYrmhKpAkNoV2qtKaeGBYQlaIcx0Q/9FrGHLUZQbNoWMQV\npMzpsFc2IraM45G+G+n6I113ZBg6pBTWiwVDTkgUYgikBOPYM5RCd9jSj0cWizOkVc9PSiIGpaS7\n/Q25PzKcdlw/f5vy9QWPX/0Mn//S9/PwyWu0iyUxttSEXVFZ0ynTOc1MPSPVAiWDsHFiNVx2VdNr\no3D3KARbL8Yu1IwOamlWzcguCtT00p6AotQ74npiUrgz6sT0w2yngurF2fu2y0mtcytabiAIKbjx\nt+vNVmHx+jhxr0ema9fVrAbXlaoOg9OXU3wviFA3Cs7KOuRUrDF9Yuj35NQpGAxCjEsWyydszj9D\naBacDs/IpSelExJaHj75El/+7l/CxePX2R9vkTZy2D+j2x+0SNByYhyputZClzgeoQtu+MeR0/HA\n0HXVqakjIbl6T57tX+VjFi7ztVl/ChRCnes6rgZetG/tzAYYwNbwT8E7y9Tvmn4QScbZWR6GuN4T\nC6GU2ho0SjSmTWWgUqxi81lU1tyV+rTHx++HaAOua8HiXGbAVC6KlcYF3brDCjqDJ58Y6nO/ybnj\nUjKpDAQaiyHq9dKQuL46sN8Z6u4G8ui8sFDM2OYyAEJnFOtuf+R4PDKMA21ZoENS6lJwgytE/W6x\n2AVi6NUaEZvAizTGdU+omTIZjskXzng2W0WIHqes73sTZV+0yRTHtIhh6m7v7ynG0BQvMRpyyq4T\nXLkhVaIsxuIo0gTaA3pmUGsGmEhVNr59kU60ggExA1pbIeFrw55GrPSj0r9GiwvollhRn3WW0SiG\n4CjutbhHqVRYEyOxWdKnnq7vadsFu9tbnj97ytOnz7ndbjk7axDJDN3I5eWG9UZ4fnVN6gfWq8h6\nveLBw8c0bbA6/wVNs6RpIstFy2K55OzskrOzC/I40C4XtO2SGGCxWLE5uyC2kdi2LNqGs/MHbM7P\niSEQG42fu7Ibh57T8UApmXFIbF+8II2jxvdyZkyF4XRiHHubh4iEkTYGGlpkLbRN4HQKHI4nhqGj\nWTSUsKCQGLo9OS1QijlRypFTGWjbls34hCwbTn3m2B+IzYKmbXn4+FVtTlGKyrbvRVmNme5Q4fS2\nAhwPFZSZrOqMK4Bq6vzqutfG7g4mc9FkLAlTXMyBscqbs0WWgGOGatrc2XcFsf1IrdNOrrkJds4a\nitHaZRAkFBKpfiZb8wp8yZjlKDN856p9ioaoMZQKkHUMMtMO7MUMp69xNxE5F7yXKSbHKQ32nUwa\nOnQzaRCJNO2GR699mc9/7y9ndXbBW1//cd77RiYNR6RpePjKZ/jsF34eFw9f4XDa0w8H3v32H2P7\n7G1Sn6Z16Ph8jrYtOzyihJ0UyFnbanano1Hbni8xJf3louVedb1XfBMYGY1JCtSYoD+9UOlQKBY3\nVN3kmrIUH03/23636gQpWA9YzfOQ7M1DHNhjej8jOXsdF4GGiFUNyNxkg29u7HI/8VyffHyCh+hP\nbUISbM83E+4YG3LTEgukYbDPNMQScVSmfU17Hw6KxREnj1PpGB+E1BXGXjcRLVl3a6jQs3jmmeKg\ncUjc3OzZbQ8c9j39aWC1TIToPLN7fJaIQpn+V9GjxhxTGGvrKfGEFfSedAsjXbDBYi6KqCaYVlsc\noYbGKUixAtw6QaFYIoAtQjcOln3jZS3Fro15i2LJOMEyOSU4tamfngyl/juVXEt9DjFeQpWcUqvB\nlKdey9qxueH1hWHGyxeQ/1ssW7QmDYgK4/QMfq9TskTdN6044FBqtwSDIBo8pB86hlPPi+fPef78\nGTfbW66uDxxOwqMHLY+fXHJ5fsZisWQIA6GNrNZLQtDav3zsOR479scBSuTh5QVnZ1qAvzm/YLle\n0rZrIg39caBdBKJ0lGFB066Vit2csdmcs2xXpDQiuRAXS2JoSOOJse+03mu347DbauP5EGjalr7r\n6XYnDqcDEoX1aslyuWDsW/vMmiLa3aXrjpR0ohRo2hWL5YambRj7jqHvIEYt6O9PrBYNXXckpSva\nRWKxuqRtAu+//3WapiGGwNnlBU27VMq/UA1QZQaCINm9MVMlRg+WalxmxmRWKxfE3UA3m5bK70ZY\npAJhLR8yRZvHSQY9cUyCQUbfmzFUj8330KubCbv8zWRaUN1UqkcDJWVG0U2QQ3DPSabSMJNL3/UE\nW68eK3f6NANaHiVV4Uqx4nW7i2ydekrOhKIx88lTVG9mHAZKSppLG1vOHr7B9/3gD/GLfsWvZ7U+\n5xtf/S7+s3+/53S4IsaWiwev8PDJGzx69DqH044XV2+zWj/QpvBtxneokGkw3AGr41I7yhUoudCd\njnTdoXpTSqkH01e2y4dONE5xFpmadszH/U4Ojr8mCmoDTZ03x+PMwXlNL1E2ohFtBSdZwb/ifnN+\nCkaba6cnvZQ7GD5/kSiBEbcX4GE5e6BayvZpj4/3EKs3ECa3CKpnIxKITUtOwzSQdQ87myAfHBdY\nGeui85hbDoa4sjD1M9QH1rie1/MpivMElHEc2e2OXF/v2e12nE4nzs8viI1uxVLKdA1Hj3USEW28\njBqXSEvtSegTw/S8xTav1ResvAOvjzIv1CihiloMlrpCoji20EkL1q3Hg9NqjFwYUGQe6kjiNGbd\nkLgKl5dURKYuNNHAS8Y3a2UWaxHxsZz3iXTQkXVVedaqIz5ToI7gqe95SYrLivcPnOYKT56xRVry\niEhj229pO76SMkM/cjju2V5dc3t9w0//5I/z7W9/lePpQBoTx73ex3rR8+hsw8V6zWrzWMFZyZQ0\nEoMQG7h8OIIEFssVl5cPacKS1WajiiqNtrALYSEsVytWqxVjydzudnT9wO72mvDsbZatxhKXZ2tW\ny3PdHSPpIs2lsFiviU3DmBL9qeO0PzGOhbAMnG8ekIfM0A+kYdRdXpoFMbRcv7hhf3uLEDQRqB9J\nY2boe0pOLNrIenVOKYFDaBBpWSxa2mZhgKLnyYMzlmeXnPqO7fYt3vp24o3XP8ejJ29CI0ho8a2z\n1Cv0jFPfmPYupX833FGlf2ZMygSi3JgK1O2iRLScSLIZFM/4szjiZKErKA225qWkei2tazblZozI\nFMGwxCGxDYIrIEUTnUIkSCGX4NJZn7FQSDnV/Af1UCxYYjRo1VeChgeMnrUrTArZE4UKpDKYXDtd\nauOWOvN8A0Eanrz2Bb7vF/9KXvvslxARvmf1g1xdfZN3v/FjlCGxWJyzWm7YrLUz2Gp9RmiWhNgQ\no8bhJSXKQCWJPAxSiaSJ1IEC/TBw6vuqD0spmtls8616B4imv9EEHjEd5/rGGTOKF8o4Y6CDVtwz\nd063pGlD4VIsCz6obrGGDiFqvLoQNBs9TN6+3ltAxHfJCEQLVXkLS3ImBFG9KjJR9GDe5CyW+CmO\nT12xWKCmEKszN48z+Y8+RBbf7V69v0wwwcKG0YPjoXpROmCeCWf7XUuxNj7VSZ+uWTJC5HQYuL7d\nsz8eOJ5ODKknFi8VcNrGe6yapBi3rA2CZ4amIhvLjKxGHKbyijIV53vxPDMUIsV6GqZKz1IVihlo\nAxM1jOhaxVC6mHEtlgWoreBsfMus5ZI0ptj8PqauNAXvPDF1AvF4niowrePxhuheEK9dhVwtqjfg\nw+LT7L8HgmWB+Q4BqWYCY/eiaf2Ovu3fGDQVPI2QRt28NyXGfuR42HN184x33voG773zFt9+6yvc\n3l4z9CNjD2PWDkpjtyWdMm0InJ0tWS2XTnyzbFpWZxtiVOXcNpGzzRmL5Zq2WTCkXtmCIpYhDW1s\nCNabNOdECYEStZv+KJDTyLA7cH11S8kjq+Wa5WbDcrnm7PyCdrFkTIluOHE6HDjt95wOe477PbeH\nG8ZTh4RIHhOH3QuOh4HTcU9YRDabFe3yHAkNu90th8OB03FH353IqSGGlrPVmuWiYRhOpPFETom2\nWTJ2exZNJOSENJCGa54/HRm6I+cP3+DswSs0YWHrFUpdGx4D8gVuoQPz7spM4Tkqd02bXWZw18Rk\npTIWYVaSakyITIpTL2x9eLPv1wge09PzuAGKBlCVaigEsDiS1/3eVXh67zkrS1MsKS2a9wlo4po0\nFN+9IevnMsFinGZgbM3omn9ppbshslq5qehcPURXxIlBvyMgYUHbbFgs1kZBwmK54vziMc1ixTge\naZol7WJFiL6dmG4bFmVJihAZCGOuBdVenJ98fXpyueGOIMre9d2pdl6iMng2y9ZCzkFPlKY2MTEI\nZDPsGcfWiL5QwbbnXqhxNp1kIqPYyXW65g549r7mRJidjQ1SGpJl4pOsP695q1kKIei2Wz4JyuhF\nZQUpyiqCNTYxYFIdoU8+PkXZhdIc2k3g7ju+HiQo6i0k0tjXDiiTYz0ZC30tT6jTDJTX5ei68Bif\nG05PEc71x2mCvh/Z3h7Y7Y6cTj3DOLDMC0s0MSTpNYkzwZ1gsF3HA7SitJEnlzixkj12UIL18/PD\nnqkuZqbel55Qcycb0+/EPK3ZmDq1qnU7c1a8ToX9Kog1wXaYgGDB8BnlSSEzEqTVz5SCNxTW8XSq\nydozAbUlG+BNfO8OWKlF0963UAFSqTcoFhfWeIVmkPluIVDIoy6mMQ2kcSDlROp7jscj25trnr7/\nFi+evc/29obdfs/+ONCdEqPhrJJhu0/kdEuImVJ63nj9TR48foXFakEbF4wl0w8DkjUOlBKkEZoY\nVCFF9bRjq1nJTbNgsVpRSqFpLas0jYhEUoKrq2uevfc2x8MeAiyaBVIKm82Gh48fsVxqecbQnzge\nDxwOe/pjx2G/5XDYk1IihCXHw47DYaeNKRAuN48IUcx7hIuLNQ8enrO7XbK/PSAhsF5tGFNmGISc\nBna7W/a7PRS4unpG267ZnF/wyqtvMMQAqefm+gXnV8945Y0v8+DRGyxWZwY+XZ6SEmbFYvw6icYQ\nhJkBc3rNwG5xGZzHsJ3i5668iK+eqUxD3FP1c4gBzJli9biT1ydi648y4o0GXJf4zgkun8U2EBY0\nxl17kcY4faZQk0iyuHHNxOBlFwa8S7FNa6V6YHpOP48a3gwGrkb9O091cTllG58IOXK83XLYbrWJ\ndwyMQ8/u+orUDcqYiBp811tFu/3r+gmZkAshJKRJdT9iV2mOqbWHiMZXSVo7O/QdzuKJ0bkSdHz0\nObJpwvl+h6ZhitdzKxGeLZvY6ef5pxUX2WbfZdIHyv5hrJMY1S1ka/CtY+h17LqbjxvUIG4btPVn\nMVfYtZ83O1Hm0eSiym+ojVY+zfGpPMRg3ctzduoSfKFIkLqXHOKZhZ5Z6kbMkaF7iB1jPtLIglga\nXHH7tkjeqb6Ye25XqyhFd4Y38R8K25sTN7cH9ocTQz+S19nqFt2bS/gWOJoJOXkr2eKCFc3g780y\nVO0OSpmeDZm8vlpUXwpkixkWD7xn2wNtJjjuNbqQiNMW5uJbVCXWJJ6M7+ul7HXBaVL1PrPy98HO\n64jenbxKO5miqHNoSS4+rvVJfbpyvVaNOxpKnAq350kP1A70jpDd04UASRMOhmG0fzuGQT2l037P\n9uYF2+01x+OOxSqyXDZ0XcfpMDAOUwzJk5iOfeH5Tc/DhwdifI80djx68oR4dqk7oJRMaCLEBVka\nctGON4tFY2UVS5bLFbk2Pi4QAmVI7A43DGOm6weOx47r2xtubm5YrVecbc7UA8qZfux5+v575Jx4\n8f5Ttjc3ZBGapqFpFohk3QJpHAhhYCwji82ZejABmjayWq2JQUhppB8O7Hc3dMeBy8snrM/O2G/3\nHG9viO2S1eKc8LClXZ5x6k+cTjtgJIfAaeg5PXtPN1ZNheXzF1xdXfHmZ7+H1z/3ZVYbDyfY/Hiy\nlVhM3LwwtUPeNMO9P8NkFv9VAQl4EpbTp1M3JAdK2QDkBP1sh0GcudB16IZt2l1dF6p7I4XK7FAm\n+rR6lHaerDS5109qqaQbfv9MAilEsX38DNTnkogSjWWh0qeTYaAqiewGyw2f7fJTSoaZh5it8UGw\ncoH97Q3vfuMbvPr6d7FYrXj23ju88/Wfpj8eaBdL0jgyjiNp1KStvj/pZtMh0MQVYymIjIikilHF\ns05nmwR7qLeA1S+O0xgapS1BiDQk2wKuGDApiOW86EnUExSjU4HksTkfe9dDJlpYXFdKbbmmDnqo\nnjGYbsbcXANQtdtXBTpTHNn1VPAs9RBI2Xrp1kQhMV2Zq14vn95B/CSD6P5umaVjz98tNeCs+7ZN\nguCHq+DJR9LBKiWRSqLBB62KOh5j89RtfIFJ0M4hUUhlMHSW2e1OXN/sOByPdKeOdKEeQMAKbCVS\n90IMQihOM9riC2ZkkWognB7V361kw+kT76lYqM/qQ+MdbwStKXTjNo2HjV2ZjBxi1RdFvWGtJUTR\nr2hhrC/WyrPaaAkoLCxeduGGP9SAsgMS5erdzXIDackURgH7oq87J1jagz6bxkgnY+cKzYFLYpaz\ni9cE5ZR0q7Ah0fUn+qFD0CD4Yb/n+dN3ud0+Zxy1BrNdNixkSROu6bqBcUwujaQEoVX0v1gEYrvg\n+qbw8MGCoSRutleUAu1iRcqZRjLH6yu2cs16sebB44fExQVCYOxGDjfv0h07uq4nNoFmuaJpWhab\nJXG5ZLNecPHkIa+VN7S0J2vH/RgDOY8c93sO+xuevvUW3/zmN3jv2Q3DCOdnl1ycnRHiyKJdECQR\no3B+cUmIS2hUllM/ckxblqulgqC4ZLN5yGqTefjoVYbTyNfe/QrPnj7lwaNHXFxcsGxbzjevkch0\nw5GAsN6c07Zn3G53bG9vaJrAYX/i2fNnPH/2jCKRz3/552lyBhOoqsIurmw0vT17j1RxNWA1X0yU\nfdW8lApma+xdVB4mENNQyqiZv56YBSq34mVErkucbZg0u+YTeNjCb+rldmf6E9x7EJN+8xTrGixB\nQyjYTgli3Xj8f66AZWKiph7G/rkJ8Ge9AI4VlEAxwG31crpMRk67W772J/4YYxdZLNc8f/pV3vvG\nT5LHjhwDw3Ci64/0nVLv3fFIGqw1WdBuP8G8VYrSpb4DmKkBYpkqM8TGOI19fb6Mtgps2hYJkWHo\nyGUgDba1k63/6hkWNzk65gqYHDxV31CnK8gsbmxsA6pbck1y9ITABCFQ90aVgATUeBtQ0WHMddxd\nN03gSUUtG6tYWd0cprmcgbFPOj6ZMnXFHPxGXjpKVp57DBZLmrZQ0aDzbGoqZWrDWHpSWdTBCKFR\nY5lzzS7VYnPtChLQbjXZ6A5PB+9OidvbI7e7W3aHPQ+Gc9101SgZbBHV9FzPiGPyAvUeHJX40ztS\nzPiT5JLNIFo6Nu69+orwc00xyTIXGjDD50YYzfjzrv8YoDAEnCUTssZbckm1ybbeu2fsOZ3bWP1R\nsaQG6xnqpQ4hm3JhQubM4ju+7YoI3rfWYUpFxxaKydm3zvKUhWSJMm6wi2UXJvrTkb7TRtbqWeoG\nsvvdLdc31xyOW5o2sFyua9u9YUiEGGhb7X7RtKLAMSsFO44FiYEvfPZVnr9/y+kEb37mMatFS9su\nWC51P0NEiE1DSoVxUE9tv90xHFUh9sPeOm8EFu2SxdmatolszjSDNYjFFUsh0DD0MOaR/rCn7zr2\n+x0vnr3Lzc01WRpKCByHjrTbcjztaReR5bKlbQKrNrJcrlivFzQS6LqONPaECIfdjiElFouG9XrB\n5mzD8eaKZ8+vePbiBe+8f81phNXmnPXFmdZWFmgWK9LQaUp+6ogB1qsVIQpdN1LKwLMX3+arP/XH\nuXzwkEevvEFsrNzJAJPq/KleeKoNbowic2MyAaFq6Gw9OQjyLY3wEptclx9g8fIykf3ZErlCpc3A\nMyDVM8yTgbQscBBLXrP1WjlDz/tWD+bO9mW1hZcZ8FmSuAA597oHpQipZIs6mv5wz8WMdc7ZlHs0\nhmxgTD1Yz+fsISEKvgmrtmccGMYjz9//JuOQkdBw2D/jcHNFti29+r5jd3tDE1p2+2t22xvGvlPa\n39ejYDvflGrmRQr/3td1HC7+I31U72kq4cTTzY+xe7MnhMDf+2v/AZMB1cs5Z1LWZhXu9RkOqP9x\nrfhrv/Hf5jd89c+vmMSBdXULimhtKqprAhqHJwRlBrLFBa2BcgxQ8gjOqiWfN9tay0N1HkcsmZQn\nQ21WmIiQbIsoUPDgtPh3nDLVRBrrbjAr6NE4WENpCmFskaE3YZ8+o5+zFOxKn6bZ7+4y+2cj3hKt\ntkDDEaJMn8mFRhaMFMZu5GZ74nZ3oDt1jIN1RZFZyrZlOHmng8qQW1xFHWFFM4rognWtSVNMVCbV\nUYtcXWCsjMQsKFOiyoSAdDDdhKrx85RzKTWy6NjY+pZCRctFUREeABcTCgn1jL5zQQ2VuuepkWY8\nEO67WxuUo17GTWCZDG3wDV1NKWF3WhWKSB2jQkEsMWUYR7rTgaHvlAoaBrrTkdPpwKk7MAw9IQiX\n5+d2fu27OAwDfekpZWDZBpZtQzHYewjqaaWoAp/TwJufecTT5zsuLrTR99jrtTabJZuLC87OL1is\nN4zDSHfqOR2PnLqedtGQU6KJBULDOGbk0HEaB077o27aGxuSUVhDPzB0PbmMdMNJE2ROR47HXj27\ns4ZX45I32wWlCPvdjtN+x/XNnhgLDx9esOx7CCfOGsjlyJAG0mkgNktijPRjx7DtOez2dP2Rfd+z\nuThncb3j/WcvaNs1y/U5sWk1/toPEITRAEYIwmqtbcEogfV6QUEYxz3vv/ctVmdnbM4vMfVkc153\nv7MJ9ZihS57BQQ+izTrBuGLUDZ/LFAKg4PUBysyqnFKpNzPGUmZXmsIxk5eY6xrwgvF5nLsaV/OS\nZqiTuuuKrVe/ksbLrFm06QIRbbPnDfV1aZg/5TjeVmwxQByi9VE1mjEl7Qtc0swblQkEaAH+gdPp\nBeFaS1K60y1pPJHKiZgi3WHHzdUzxmFkf7jh5sX7dIcDZN21IVk8LUy3ZMkq3LnmxMj5fZc7H5hK\n6PRItqvEBBns32oZ4WsPvwEIv+Erv848L5cF/WYqXhJhOltiBe3yErtVxMs95mMlTLNkcyuNGld/\nMGbyZN8JxfZHDFOFAkVjj3m29dSnOT5FYb73pUzkPNI0q9kDBEJsKaALuhnIuYfi3WpcTXtmqCO5\nQmZQtFUywQcyF0vxldkdcKexKybc1YspQkmB7fWB7XbP4XCi77WNW6zIwEO1+nsyKtM9oJIc0Uld\nXHeMg3k71Qu0kSlZVUkqI9NiVro3McvunD0RxSlVn3Qdj1JH27xLW5STMaQqmmLXFhPIYAKgvVeV\nIghVYSmt7UkJoMZOnPIk2HiWKrAVeVmykVKlXmB911so9p5rpJyUyk5DZn+8pT8dkAJ917G9ec7t\n7oo0DjRRi+SbRVRQZ0W3EoQQhbaJrDcb1psVm/OWcciklLg4V49r0bYcTz3SZL7/+7/Et7/9Htc3\n10hIrBaRblgyjj2lFBZNy3qzQdoIpaGNF0q7jwP9abSYkiVxIDTLFQU49T0x6ryG2NCuG5plQxo7\n8mEkSUGOyljkXHj85AmfPb8gFGEYRo6nE/vdLbf7LePYQU5st7c0suT8omHMI92wN5pvicSWRlqO\npxv2p4EYlizbDcjA2XnDi6uOr37tLfo+8cUvf5bLiw2hsTraNJIYyQOkvCWNPad+RMKCpl3SdyNv\nffMnOb94SBuXxM2C2LYmr7NSCwHvauTAiyp6lkQxuQ6q7FDw52EOmNWigRlnKL4htLiM69oolp+g\nRtNEyWVc3JhlCyNIBZjqJbiBpL4mqCxLvc7dkExJY72HItGeSSCpDGZjsqRMIFiv5SUBovLQLCwu\nDb2ctJRnVDmty70UA7tabpbzyNgf6GSrdGW3Y0wnSu4Z+sDt9jlXz97jsLtld7jh6tlbdMcr9XLD\nktpmkuLOWVUND/8Tff5f9FcFugSnEU4DSGz5ru/7bn7sn3/Ger3hd/+X/xuevPIGm80ZUNgdDjx7\n9i7b2xeUVFi2K5oYTFcqVVyK8MN//u/CPUiyApy57GRsW72E7n9poCKYc1GdH/fsZ8ZWwzOasFOS\nhVrKpBVrfLaiNNdtlmiZLR1IHFjpPXuy06c9Pr4w3244hJZ5IoYfXhPoWUOaQtvoTuMfwCgz4UKt\ndpaBlAdiWCCywLM4QapRKDnVmJ2XZ2iMY0KTlMJx13Nzc9CuNaeOi2GkjQ0eg/BEGo/xKe2X7D1H\ntvp42WkaN4I5UZh3XAeK1kBlq7eq1CLFjBRTYHhGxU79Tke0p4QnNJjxDxmyomH1Bb1mR5VBBfFu\nNEuZPNCJObLsOQ3qT1mu+q56wQUhVQrKTy3WtYIwo5uzbTEVnCYu9drYTJSSySmTUyLlke54YOxO\npHFkf3vD86fv6q71JbFoWuJayFmbfYc2sIhLYhNtc+hBk2IyrBZrHj24YLs7cDiqN902kS98/jWO\nx47Hjx7wxuuv8ejRE9565y1ePH/BomS222tOx8jpdFJPte91N40MMS6JrcpS2y5YrhvdLqo9R4I2\nIZegNHhsW2KjNPJisaakzOmwI0rLcbfjGDo260sev7LmlTdeZ7lYs99uOXUd60XL+XrBg8sz9vs9\np1NHdzqwPtsQwoLzi9doF+cg2tQbAmnsads1fZ/JWcGBSOD8/II33gy88+6Wr3z125yOO7785c/y\n5NXH5rEUFosV3enI8fACkcCxG+j6G9I4sGgv2N5ec/ngVR49fp3V5gxv3l3y5HmpFQlmlKyRgqf4\n18SrCYAZJwe4MTSFZOESsRKgae17YtoEuKda4cnNyWRb2h71Ery+1QMVup5mO9hjGYmeFFfMm5t5\nkaoofVNsU85SkBztOi7n/hzTuql9jiUSQ0vbrigFUs50fcuYNFaXra+t3h+2zjUUVNKJlA6MwwIk\nkNKBnI4aXx2P7LdPefH+N4ntkv1hy82Ldxn7IyU3SNSmF0WEZEPgyYDTaFKbCFVHPeu6xPRc0yxZ\nLNa0iwU5F2Lo8O3ZUkrkOEJcArG2g8tVc5hezFi4yWN0ogmFoiV2uWA9Zt3H19+1K5EoQMhZE8BG\nTdLTkhpqHScFksWuvY+t140FEW/lzJhUBqWYpBjD4Xhm2kT7k49PQZlqgF07mU+I0f2e6ulYsDPG\nllLGanSCRI392b5xfs65gS0lkRmNIrQtQmz35CnFOqDQw+KKTsPae32XuLnZsdup4hnGRJszEj3A\nPnPPjcLABEmC0ShFY4oFLPVZry1GSyKlZtoWT2LBJHJWjOu7TBfzoqJz8qXCAaaejqo43D/VSxd0\nx3inmaceq7lkxLa7njj0YvMk2oqLYllzxbIhXaWogqoI2xa5KjaMAjWKyIx0BSIU6wE5JSxoWvho\nIEIfsORMfzxy2O/ouyO32+dcX73g5vp9xrFjsViRoyAh0S5a1suN7kIflxSKxhr7Qcsvnr7L4XDD\nerXgNJw49UrtxSCcrTZ89xc/B2SWy5aLy0suLs94+vQpz957hyiR9dmK03HHN7/xnOXTc5bLM7xB\n8mqz4eLBBQLErXC+OePyQWJ1tqJt1yxWS1WMQcfvuN+xu7piHDNDypwOHV03sDjbsDq7YHO2oYlC\nGU/aBq4JxE3LcpyUytnFBW2jGx+PqZCOA8t2xepszdXz5xyOe4ZhYLHYsFxdcDqeOJ62FNHCmAcP\ntIPNi6s9qYF9d+JyhPPNkpQGYgxIaBAr/8h5ZLlaMo6Bw+6Kw+nAV7/647z+mS+xubgklIZAY/G7\nMlvTk/c/9WUxc2aov2Z/i8use0Nopq5gjSws3lbE0uenbaWYzIZmhVNMMeZqqDUBzyKUOU+Zjhhb\nUbO53ULY+vLsaVvnFUCLWCclX5+oEkazUz0b1HfkcPDnmeHaiamhaZaE2AKFJjX6HQNzafD6Yywh\nzuKIQZMAS8mMaaCQyONATomcByCx373gxbO3kdBw7G45bN9jHHaEeEYqvXnh9rizZF83hgiEBmR0\n9WYMkW1aLBJYLFY0iwUhNhR6dK/O4OFOUirkoBnaUrCWbA6QJ+9O5C7lWYFIVbFebuPOk9mTkki2\nq0q2LeR8P9pi3igzO6PWWPB9dgOF0dp3igRCE9Ew5IhUNqJUbDcT4U88Pt1uFx5PSpkS72btFBuI\nEFtCSozDcWY060hxx1OkAKPVH5X6AKWoXzQjGK2e0JBimbCGN8D2JZfGxIvrI9fbHbv9gb4fWK4W\n1RjpXORKKQIqrFbnU3zRFJ0wCuoB2gKW7J5R8TQyao9Tv9diwLhObLbFNEcoTjV4upG/54jSa3y8\ncH6wXoORYhu/xtJMBknAu3UgXhYjSDJKxa9QiiXaSP2MjaQ9D+QkSDAPtkx7Xypqtt6ks8QEpTXQ\nhAAK5MTxuOOwu+Ww37K9fsbV8/cZhw5kZLlsWKxalssVMTSUYaTjqO295IiI1uMN44gzChndYeLs\nfK2Ai8JqtWSxjHzmc5+hlMIwZM4vFhTgjdff4OHDS253N+QxMZ6f0XU7JEfa9ZLYRtpmSZCWUrRD\nxjCMHA7PuL7dsVotNEsvNqwuz1muziipcDzuaup6u9DShRgD682KdqE7t4xDT9epJ3p5seZw2LMf\ne1arhvPLDYiWfeQS2W23DOPIxcMHXD64pDse6YdEP3Zc3zynjUvGPLDbbRESTbuGNLJZRc6/8IhF\nXNOEJSllQtPy8PFr3N5e0/c9y3ZjAYKOs7NzhlG4frEl5yPvvP01fuon/jiXj17lldfXtRY2VCor\n31n3Lp2+NupGxF6yYdFHbaTvNYRqRDzmp/+7m3VKKNW7EctW1Lh2tBR/Rf3J+pt6vWFxWVae/Q5d\nqvdFBdDVoFVa10yweBZpMTm25LVSyEU71miZ2QT23QgVMo0IEqPtDBOI1r82l8SYem3XVnciN8Mt\nfv+ZnHskdGq/LZ9CrzcydDt2ty8IIdKdtgz9Tp+1ZGIJ5GKbP89tRvDmHvanEzz2r2dsOABfLJc0\nQQhBNHYo3h5SSDkxjiNNbNHoXaCUcXYxG19vITnL/0AUYEeU+VFvzXa6L1p+k4HsWas1YUrnJaUp\nYVIBVmLa9m+CZjqHYjrWAFTQoJgU28IqZdyulu/U9k++S7UCAqMxFe6qpY6+1U0giS2SECB5iF60\nKLyc/C9qu596DS8iN2NQvSYqkrPAgBq2SsV4pqVnHBX2tyeub/a2+0XHWd7QBKkdb2b+GZMz716W\nTMjCN6R0uhWnH0yozZZ4S7lArMpEtyMBLw521OaKAjw7U2x5TDuZF0tu8Hilml9VEnO6SrtwRG17\nxF0qwwUTlDvPs3qhYjsB6JcsR9vu2cdbPQP9vtYUJovd6F5upUIuUyQpkZLWTg39kcPhlt32mmfv\nfZvt9TPS2OkmxTGQc2HsegKRcRiJoadtl0iE0DQ0sSUNI8fTga47IkFYxCXD2HO5uWARWsg96/WC\nNgrrxZrFesk73/omZ5sVZxdnbG/35JR5ePmQ0ASGMXE6HjjtdVuliHaLCU1gsznn4uElQRaUAofj\nLfvrLfvbW8Y08nDoOX+g49t3A2kcyUn/3azXxEWkpJHxlIHRNukdKAn6LtENqvTIiePulmFM2oQg\nFxbLJV/48uc526xJObNYrVgcj4x5yZgy3WHPOHZaLC5RlWhBN4ouMAwH7eF4pd7o8vEjHl5eEiVw\nfX1L3yfIJ25vrigEVsvIqc+cTrf89E/8MV55/XM8ePSEZtNO6N3WkRsNKe75WbagGUHVR7MYsmc/\nOlayFV4701RjZB5lLUXz5DNbIDEgVo/su0OU3JAYgWlDZU/KicYomdDP/lt8Rcz0x0S1TkBVDZJ7\nLt64WjOuzTOswHfSV9o9JhCjzoXul9mqM1MSw9hNzQdkYlPcrdNSjYFAS5aRQk/OA6UkUuroTrfE\nuNKm8EWTRYgtSIsE71BVl7nqjCnnkBhVDeue3KaPrDZDgpZbxKYhxIaQs2ZZh6jgqMCYtCRODZoa\nmjqWgEg0j9LKHuxGFBS4jix4Xat+TQxgTMxf9fw91lclZ3KUPLvDSzySgYcQAin3WktZWiiFFAbz\nIsskYpId73+q41NlmXpJRFhEzs4b2jZAEZarSHdCUYsnsIh5dTZIkYaBSYnWBUIkiLalirGpvTGD\nB42rcrdaN/OSpgnKUx4LQslCd8zcbA/s95r5l4ZMjsVHuXZTkWluLcaBoWGL6Zmg6aeDZS/ZBJaJ\noKnKYzqZybwH35X6kTJftLMUZazrgrWY80QCzKvNDPV5fdPSYj1axegpT17SR3IYO6MxisUTq7Iy\nQyfePNnvRgyJysS7uzdYslHJAnXrHP3uMGrpQOpHTsc9u+0VL56+xX73wmjygTEF3aS3bShtYUy6\nqBeLZW0DVgq07cLid1pasVotefDgkq47sV4vSWMPWdisG4ah4+Z6y+ubN+j6E++8/Raf/+LnePT4\nAYu2YegHCIGmiTRxhbAl5Y7N+pwYojXcXrOILalkxmHU+sJ2yfmjBWMeyQj72z05JS2Az1q3dpQD\nT997j6E7UHJPjLr3YIhazrBcrVmu1orKizCMI6kUQoy0yyWPLi44uzhjvd4wHAe22xtOh47N5pzN\nxSW321uuyjPyIVkMUZTGyr1tIRQYcqLvD6RROJ7WGg9PieG44/rqGTe3W+sxnAmNJr+t1w39kLje\nvs/XfuqP84UvfS+r1YbQtCoqDnQNFNWm7cU9rox3lClW8VyYyQ8GWN0TKyYrswQzZzQcpHk/YIep\nXuogIdquFU65iRlo8yrEFCdiWdB2F1VfWFE+tiF4LYkqFhos9X7sgXR9a97PFB/zXAbXBmI0nbhn\npd61boMXSEkb09dyEQ9J+C4yKPDPeTRyZkCT3bQMKJcjKZ2ULUua0VxSosSpB7R7aBKK7UF495Ag\nSCxTfwLPRDfw0TaLKrO6mXLUdWceIlg+QB6sTnOCG4J1ntJppToTKKCORln7ZsqYDq1xYP/vzDMs\n7kxZBxzXk3XbIHuGAtY1zdI1RTcpBwghU7KQisqO7+mYJRHCzLv9hOPTdapZRFYXC159/YzXXt3w\nzWUkZ3j4uOHqWSYdPdakgpUrteZCS314eyqCtMQYWawiq+VK09o7S6oxD6l6gRXleYFowvvm4d4r\nkbFPbG+O3N4etEi/H2jbRpWKbf9UnPopQiGaQrZSBnyxTR5pqQrBFoZnmhmC1P6r1AWgJRkAU4eO\nOzRt8Ql3CyUzFFWqwExxC5m+a0ISxPl4mDriuJIwoxXUKNadvLFnNkm+01eyKjBVUHoqo4XN4Op3\n3SNWAKKdNI6kNNLt91y9eJvbm+fst1cM/ZGx7xmGgTElJOqWSqkIre2sPQxapJ+GRIwtl48ecbZa\nEfrMsYHL8w2LAF3fsVktefzwIcPQcXa2pj+eeHH1lM3FmssHj3jx3nss2qc8fpJ58sZrIIHDoQOT\nn83mjNBG2iaoJ5pGQ8+F7rSn73skRB688pgmtLpt09Ax9IM2cwgbhr7jdBzpuj1Pn77N7c0ViwWc\nb85Ynz2hbSOLZYSwItFWyur87Ix2qfsyLhYLVpsNFGG/37O72bE/HLR3ZRuVfi1wff0eOfWWTVwI\noSEH3WKtkYaLszPKptA0S1arBbvbPaf9lv3uija25CQm/xGRqKUYCHl/4Hg48s1v/Em++dWf5NHj\n1zm7aL0OnZqNYQpI68ikeotukEKZthpDLIvQPUaTnFLQLk2VXvN6XQVcGpJwKtYYKI/jh0LIkRBK\npQzV/mlZlhJVXnXoa4rZOvD1JoB3qvIjI8XZEFtZZkg9lwDxxJtYjbt6WKFSpfWejX6MoaEUBS81\n/yEHyBr+8DLsYp2tch7JuTP2yvqGpoEiPSnDmDqjEBsDH5lSxpkndWcJ+4MQghCkTPn9omyeG+7Y\nLmqCnCF7NYpBjWTOWUuNkpVbiUzAwZm0D+lA5MDJx9j1Uy2xc/WPe8wKlGTWtk+mCI5+ToAc7+hh\nB/7qKZdqK4IUSrCOPEFwEFfyd7AOMTaB1z5/yWc+e8Fn33zAw4sFf2QZSWPh8rzl5sVomaGGGs1y\nTyS3eTh142BDTQHWqyWXlxvOzpfkDDdXPd3eMkptcrzcg4LuhyVON4Y6qdXLSHB7e+Jmu9P9EfuB\nslmZ4Jigz4LrukinvbN0LU3lCpMNmwl4yRYfKEhQ3l/LEnQKJ3rE43thBkMNIGgdhOsdXWhFuQ9t\nN1fqUldKKpqNzrVPodIutn9c5bvM8FWUZf91cFK9ZD13TS3NRsvgnWw0jpLBKOmiDX+L+72KIE/d\nkZwSu5srXrz/FtvtU7puz+m053Q80g8deVQI0zRLupx0t4gg9ENHNx7JORNiw8OHr9E2LTHAatHy\n+NED2qiz0TaRceh58vARuQRef/1Vnj19m2fPn3NzdcOybVmsVlxf3dL1A/0w8PjVVwiie2rG0LCI\nKrNj1zPSmcwElqsFZ2cXnJ9HmkVL27bsrm/oUseYOlLqWa7PWLVr0jiyPBu4uSk8KI+5fPKYJkYk\nFZq4YrFcVM8552x7eWaWi5YmQ8jC6XAkjZlxzBxPByQIDx4+5nTcI6EwjInudFSjljPH3Y2WEMWG\nZqG1it0RKEJsIqk/0u135DKw3+2IYcHjJ6/xqETefb9nzNolKKeeEJdG6fVst0/58R/7j/js57+L\n9fnP00SwGTp3cDglUWmMTxVYqLLgClUTcSzZy4TNu95oSvwUp5x9iiBeeVsdDZNbiwsV63AimmEZ\nyMpeWLOEGO7uxOJ0p//ta6hmKaJGL3jnm5RnGdVanyviO7uLlVt6R5Sg8xBbYmzxfsEKfBpri1e0\nyD1rvkJS0oViPVWzdXPyJh4hB5KFaDxIMqYOkaTlPZbpImVKOPJEITcwTplOg6fJdGGy4zRNq4mR\nIc5YuHkSkw+XMhpBetrFgibqOIRZkDJY+IMgVa8DSnGbc1CVjwbxTFZmJWfFE53MgZgVPE7qTGOC\nnm+RqiF1sfMYpFK0ysY3lijoJWxhstGf4vhYg7hYRZpG+G/98s/z5hsPeHC+JEihaXQC05C1kUAw\nStV+8thPLnYId6hNpU6UdlitFjx+fM7lgzWBSJADT/tbUmcZn+bRhBImwxEC0hgAyJk8WiNZXSMc\nDidubne2HdSBlNaEZjFDFTO+us5BsEXtvVltVw+v5bPuE9m/IzYh2Rt4O4IqtROL/q6dXywyqCNQ\nTBl4rVfRF7M3xGXi1n0Mc07WIUbRtAf9vTu90wzVM5emKjOPXaq9VZqrUljM4zzgGYBCNP/Qk60x\nz1jvKKVR+5COA7ubF7z/1le5uX6f4XSg7090Q69ZpwRSPhGDgCiyPXVHxuGWU7cnlZGmXXB+8Yj1\nesVmvaJtAsvlkjQsON7esl4u2KyXnE5HHj15wu31Le1ixYPHr3LqE8fDicXDls3ZOcfdLbvdLWMa\nuL255ezsjNXZhlyO9Cc1DmN/MuQ90jQtF+cPuXj4kOVipTV8CKvNmmbVcOrUYC1bTehJg24t9NnP\nfY6cR/q+Y3+753Z7zXF3ZLFcslxvWCyXpCGRx0TOHd3pRN8drZC7EJslvttJs1jRhMhi2XLY77l6\n8YLd/obQRFbrM/a3W7phZClC6U+MkhnHG/K2IafCqdPGgG0LXVdYr9Y8ePCQhw8v6PNrXF09JWel\nfCV29INuAzQMI+++8zW+9c2f4LXPfoGz80tCVBkqZuRiCJMsimZuaIcRz/AsVekV9/rAPELLBndw\nLPlOXM2WMxpWiBVo1sif3YNS+BGwPfGKm2uLM82TOgxsF9sNweP73kTDXSlRdI3HpTyGqOvcKVIQ\nyz2QGT3qBe2etOIxdwmBNraVepxIG73/TNHE7ej41IFHpEhDodFM3NCq5yUAA8JAZqTkkaYMkAZq\nJ6GgRm+ii3XsonWxCdq1khgbzi4uCM2tApDgJSmT1wbF4oqB0msccRhH3XlDpvieUsSN9oeTWfqj\nQGha7SSVXD6mLwlTjbTTz065696Ymmlc6xUtxSFXXRmQrE5IGa2uU+QDjosAMUx1j0Eaprv/5ONj\nDeLl5ZImBn7wF38PDy43hJDY3e4oReNANzcDebAWZCUQQ8NoSS91LIq2dHPvq4i2PIJACYXNecvj\nh2vaRvf+O516bp6dLKHD3WQqz92eBVbrSJSW/tjTdZlxyGTboHg4Ddzedpy6nr7vGdNAWxpgqk9S\nbmgaJG0oTi21MBHHDUaNBWDlBaBxhln8TT/tNIEvfIVtk5Gkxj/UiNZRshkVKwuwTZjF7i2rx6kt\nkUL1MKeU6qnRNuLXKPW1Wr9ZFyEoOHBhsuxA8d6EqX5cvc9g1wBKYUw9w9Bx/fQ93nvnq9zcPGXo\nDhz2W8YxadHyYknfdbp4RSmagqgH2R9IKdE0Czbrcx5ePubi/IIm6jM3sUUKPH70iNNpRbtYcjqd\nePjoFY7HE4f9juVqzcXZBVfXV5y6nkVsadqWlEeGYWCX93TDCbm5Yuh7pbmCIngJiUAhLoUYhWHo\ngEIcArvtlpRH7YUbAqvNOTG0lKRlIhgCliJ6zctLVsslx4sTQYQYG4Z+pCCEtiXlwjgOFg7RxKju\n2Okij8IwDIRwYLfXHSxSKTx68jrDMEJpOB1PpJtb+jFzdqYF04uVUpc311u6wwkJgZRaYrug3TSk\nMnC5WvP6a58l5cz2+hl9n5CgHpFYzP6w3/KNr/4pvut7fhGb9RmhaY1k0kQLCtYs20IBvutAmRJO\nFPgVU04K3iR7LFA9I6XIZPIA3bucUh/wBhBAZZhK8qzUbLoA85CyfTvUmKWfxjPEVc496U/uluIS\njIXxbHFdF1oaYjEzA5J3qEiL42tG6LTGPJ4VgmUwx0mtFuJsvSY1YAQktLpDUF+QfLRWlWqoJaph\nzLSMyT2zbABLM1idDvXGYdE9RJnKDULU1xfnK5688joxvq/jSmZMyXSF1mmqoQxmLDXjcxyTdt8J\nugWdA2/dlcNyDmxs3LJO5JRgHcJ1LsrUcahQNM5ZN212GfC2714D5lyCgyvTVyIIzQyQWSOI2m/b\nyHTLWP2O1SFeXGwIInz3d32BGAr7/Zar51eMY6LvErc3I3k0yBPMezO3vMqReYja2kkNgyOTNCZC\nLJydLzjfLFguI+NQSGNhvx0oo2GJKLTryINHSx6/uuJs0TKeAtvbjqvrjv32VAdi6BLbmwPb273G\nEbtB624avbLzlFKKoT5bEEINBKuxstpA29vQF2MNvptxqaawFGoJaqVrfHLmu3+EmiRQzDhP8Q5v\nqOwxRV2w0wbN5uUW8Sk3rOWLeNrHzhG2+O8ohyImUJOBNONdUasqMb9zPY8n6WRS1hZmT997m/ff\n/hqHwzUlnxBJhBBoF5FFuzSEqAotjYNugyORMWktVbNoWbVr1qs1bRM0ezNFYmzpTgdKKVw+eoXz\noSOlkbbRZgdn52f0nRa4j+NAlMDtzRWr9ZogsFyfkdNINxw5nBKr5YKUEoftjpxgudiwOlvpXonH\nkSgHNljSlPU0TWRSKgwDSOzUiJ16gxeZ2OqyyWlQD3K1pG1bayWXKGMmyUB3VEAmIsQ2aEu6YWRM\nymOlUXtLNk0gNIFHTx5q56cMx3KibRaslhv6dWJ7e8tufyKK0nZtC00jNG1D0645Oz8j5cxmc0m7\nugS0HeBmfc7t1TXH44nQBtrFGcv1ihBgv93y9Om3+PY3f5pXX/8M67ZRZV0VjCq/Gr8puhmrJtwE\npKSpjtXECis/KF6/O5NVL3XQXEFdQUFaS/IyEZ1RoA7cjL/EE1iKhVyq/BZma8jWQynmSQVVvLNQ\ngYfVtZwJC+koYyLIDPVCzaAUsaxWLx3w/7gnopmm7UJlocYYgwIBkaLrTyJNu2bz4HXWmwcc98+5\nve7IeUdOHVFWLBYXNMtL2uGMnDJpfG4s0aC1meZ5xqBeZzHb4yqnCdA0EAZoY+Dho4e89vpnaOKf\nNICL0Y2efOoxUM02Legu9WNS6te9VgfT2owkMm3pZnPhNxBCddzUwJpBtHOIfXZKCgpVX3lYSlCA\noSWcntxlnnrEwJJnoJqnWu2O555YO83vlEFcLZcg8OjRA7rTkaurkevrPX2fGIZM3yuiKVKQEUs0\neen6xW/QjIIp+py13ixlrLB6w/oskUqmG0feTnu6fUYaWD8MvPb6OW++ds6jByukFHa3I0US29vT\nxCsbd7/d7nhxvWW329OdOs42G3LwBW4mzA3gdJPmUGkNlNKdFq+UVN8u5lH5w/n/KIa4CJOnZaUb\npaYtowF4idP5ZgbJF58rmKnD5CRsHj90I47VSnqSkf/PE41UsVj2VvFdOkqlkcTQ1zQOwZCaPZ8J\nosZhCkM/8uLpe7z/7jfpux3kwUoyIqvNOTlpB59x7JQu7I5m4HVfwWE4UUJitdrQbi5ANHngdLql\njZBHLRSmGAIm0x2P5JTpDzea+pQSu5sbTqcj26sXHA63PHzykMVyRRMji3YFIhxOB7q+p21bLh88\nqPTxYhmVoo8tJQin/sjptKNpA6vlhhgXxMbaUg2JUzrRD1pfGAXGrPJbUmK5WtW2cv1wpD919P1A\nP3QMfbIY9chhNxCaQLta0kpDKpmBzDB0dKdE2y5hE5Axa0ebY8d+t+d46um7HimZ7jSwux04Hgsx\nCouFIuJmTHTdgd0xMeZz3njjnKZt2d4+I6eB5WrN9uaWPCSCZAKJQ3ckjYnb2yve+vZX+OJ3fz+f\nWZ8pJSjRSop0MUdLtHA+hBkDoaylZyhj66sxoFZszXss3JG+TLJuGZ1elqC13wZQqyx7r98888pM\nXsukW1Rek1FwBnJQRqqaONdHteuVsybJuorp/QZPlsNi/dnZpaBMUvZuWQaog/Y2bWKkbVfWjHtK\nOgqiDRMkLjh/8Caf+fwvYrN5xO7wlPdaePbuLSkNNO05Dx5+hs2DV+m6PSVmhrQlHY/kcrSY4lQX\nWDdidv1ixjtErdRYtpEnT17j9dc+q5mlIRjenhgjdQx0Q+IYDWinzDiOjGmklJUa9tk1NC6aaxzV\nx7RU8BLNFni82dmFbNVeVl86o9Gn382zL+btYpS8eZrYOq511W58pcFrU7PtKYm4Gf90x8caxKZp\nKCUTo9D3PdubPe+/f0vXKYJWfj/YTbmghsn4mTBHWpJna4nLpTdMzkgMLM+WXLYtoYmMWUijcHXT\ncXbe8MZnzvjsGxc8fnjGsm04HjvGdIsXZeu+bCO5aLH/Ydezvd6zuz1wOnaMYyZGW7gW4Hd3uzbf\nrgWh2sxbihse85Qo6um6kQC0hk8z1upkS7btWQK1aNglVqhFq1M9ppjnEQg0k3cnGd3dHDWq3ruv\nyISIzKBRLAZpsikurHj2H0ZVU7uH+AlqKyxxn9Uzbt1rNPoiF4a+5+rZe7zz1tfYXr9HGo5QErFp\niE0kZDj2Azn19N2e02lH1+uWTikV+k5LIS4uH7BZnSvaz7otFE1i6Hq600i7CGoAjx0xCqfDnjwW\nxjSyWC7p+p7dbsfxeMuLF+8yDh1NGzg7S6SuY3N2yWK1Zr08YxgGZSMGLe4/u9jo1k0pI2FBTiOn\nwxFSx2KpNEyIPU2jtVopo8k4eSAGYbVY0zSKWvth4Hg40p9GpVkXDYumZbkS2rYlLbXI+dQljn1P\nWxasNgoy99sb+v6EiHbpSVnYbW+R0nC733Hseva3O66urjkcjuz3PQUhZS25OHaZdgiEtqG76Ri6\ng+ZINS/48uFNnjx6yHKxZHu7Y7nekCTy4vktp27k/HxFSiM5Cdc31zx7/g7vvfNtHj9+jfVmjcfl\nxAyCR34c6OnhcmSGzNa3x+Rqg0QRYynssyUhaGODyb9iYk0spV5jS+bKGYUaxNqnSdHsTex3B6VQ\nvVldd5Ysw2hKc6YY3VjWfVMTsXgzfQ1DqHes3p1ENRohags1DEzX5CLRln8xLomhqWtUEGNuAsKS\nNm64fPBZXnn8XayaMzbLBwzjDdurrzP2Heuzxzx+7UucnT2hGw6M5cRu/xb96WjGwJJqxEC9J5HP\nDi23EJqmsFqd8frrn+PJk9f0/kKkbZd4cqNnYBYJYElDIQSGouxGGsyAxVlZnUSjmVN1ENT4RYLv\nj+vMQW0a4jJTQDkYfW9eM6JxK2rXGlPTQYTkzRQKBngsA9iSfiqAqyamOGXxgfH5uOMTCvP19sdB\njcyL5zvefXvPOJqyFttlweoUJY6aHTrHEkYdhOJlD1ONXMqFvsuMSY3vxeUZ7bIFCcRFYH8YuDxf\n8eTJhscPz1mvW9L/n7U/+7Eky9J7sd8ebDiTu8eQGVlZOVSPty9J8YG4kABBfBEovepZ/6X0D+hR\ngEBeEZeXItHsrrkqxxjc/Uxmtic9rLW3nWheVCUBnkZUZ3gcP8ds295r+Na3vhUSMSSma+TxaWae\nom7udQGWOfH8NPF8El3TGBJ9L1FI1ujWqIPDV6KPRoM1yjXr1HeJROp3CN+pGQKjvVQtk9Io09TP\ngXWCvVxiVupXq8voIa+wTqvymaJEJQM3WZzR3xEZKcAKnLhqLSoSf6PuIE7RNMNgbzJDg1UoqrKA\nK3Sra1OESPP89J7f/fbveXz/LTGcBZLbH+j7nrwEzstEyipgnCMpirZjioWUE8523N2/ZLe7k5qw\nMfTOY5XAMc8XUbXJMig1hIQhs8wTMYqEl58cIUTm65FlfiKXM7kkzsdnTBGHmUthj6XrOjKGsCws\nIXI5P3N63rDdjOQU6YeR3g86KLYjRrBLpu/BDyPjZqDrpdYzXS6cjmcVjo9459huB0LwGBvIucN6\nmXjuOxGUCEEQkIfxFfeXK88fjoSYGXeecbdjmieupyOyFROn4xFrehX9jqQE292ehOPHd++Zptgy\nGO8MKUOY0XqUoesKfZc4n0/knBnGDZTMMi0M/UjKJ55PkZhmnCvEpTBuLefjE+9//I7j8xPjZoOh\nErxqDUcCKKsBcLGlopg3fXyowRYjaUHKJxpmWTV2FEfT02pRV0VJbINqG1WfG4jNiOEVRZnK5FaC\niNaiTLbqKDLFpHY2W2BqxKBKuaICL0YyOGP199Q5F9EtlT/SyO69w/uuBZDyvcqoxel7vGaGq2Mv\nxWHygKGnBGEgixCBpyRDSRJI9P2WYdjRdQOZwtAdcG6D8R0yNCFinAMT1WbpY6qMPyPO0DmDz4b9\n3Qs+efMFdw8vsU5Ig/4G3k+aFNRg2VnfVHdSSoQUiDHg/dr5b62lqH5orc/JU9R+TJSYqEFQaUo/\nNcDxq1MzNdk1qw2vKkLNw4n8YdFrjbmWfqxaL9OQgioFB0bVtWrK8dNef74PsUAIC5fLlXfvj3zz\n7ZGUlJBRs71b4VVNb+vLWofJuqmKkkV0s+dUB8aKIx22G4btiO86Dg87whLou579bmS7HSgl8+H9\nE8fLlbfvJh7fT6SlZjgooywRQuLp6crz6cL5emVaZvpNh6uQLjViQ7BoU8ko4KxvbE3xcSus0joy\ntI7hrEgMaVmdbKrsEw3SEHghr2vV4CMpi1vrNVpKdVe3QENPOI0YI8KCNxslqdOuBkOFBVpUpq0m\nLTquA39p5qbVN3PNIvVeqZtc/ndZZn787hve//gNOV0wJrM93LPbH+Q5Xq7EeSLMV0paKEn6FY2B\nbBa6bod3nr7v8F4OLCVzPj6yv7snF4EcS8rMM0yXE8s8U/UeUsxYZ1nmRaYJ5CgOtfOQpJd0nk9c\npwuHO4/vLgzjC4axxyyFYhPLNfL49JanR1kJ74zS0S3Oe7pu5HC4x9geM88yF+86MXQdzjru7/ek\nLHVUax3OW/qxsBlVKsqBwQnTdOyVB+UYd3swlndv3/Ljt99jbeRweMV2d8ePP/yB4/M7wiUQcmRZ\nruQUwTmc35Cz1Jx3h45YCtOlcD4rFd0mrAv0g8F7w367YbMduVzOHJ+flVQhrUFdZ9hsOqZZAo15\nzoSQcd7x3Tff8NsXf89Xf/k3vHj1UpmS9RCvkJap6iMatWOqPJeBpO0QKi0mbS0VMqVBXtThsVQF\nJXG08iVqEGXTUGuPVVdU/i23oL+eZqHcywFOJomd0ett6lc1F1WIzWgOm3PSNgSad69ZnzjbgMFh\nnDhCr4pKRoNUciEU0dA0Skpx3rczZKxomMo6zqQ0cT5+z/v3v2Pav2Kejzy9/05KCSWyzBfm6wXn\nB2KYmKYjcZ5xZsC6PclEUnxGxMKr02hJvdhcZ3AFetvz4tXPeP36Sw6HFyoeYHDWkigiR1lARLxt\nk3xzTqanlGJZwkRMGwrrlCN5nlFX/3ZwvITa1YQI8caCzTitI+aqmKPqWzLhOK1oF1TSP5VDgRHR\ni1wK5IwztT6oz9aAM0515oWeuhILW3r6k15/etqFGt6YF5Y8MYWZeVmooUlOEYunQYq1iKw9KyuE\nZ9eFqxizqq8UmzEyLh7vPMPgGYeRh4cDIS6i/DH0lJQ4Pp04Pp358cczP/w4ixpNyargIp9p8YS0\n8HQ88fh04ni+cJmubHYDxsnC1Lg1K8xrS2mZvcAItY/GrHqrVmCagihguCpurBuhwUl6+p2t2Zas\nS8PDtd2iAsuF0gZ1aqVefa84wFyigJZ27UyUTFeBiloH1cGb1crISCNw9DfZs0JKGp1LfVSv/+b/\nyYWqUciJmBOn4zPvfvyGFK84b+g3ezb7AylmlulCTIklTcQ0EZYJ53qM99jksTkgmqwF1xmK6pOe\nj49439N1r8FI5JoRBuuSAnOc2IyDbJuScF5GRdXRXtnJwF3vOgyeVBYux2diSCzLRIwLh8MB6xx9\n8fS7PQmZVSjDUA3WJlKaACsjoRClkQoBFWe45qs4iWjIIZJiFIWX0hHjTAxBHbbDWE+4Tuzu9hwe\nHvDdwGYc8b5nHDfsDwd+/OFb0hJ5+fI1BUsqDmufwVjO5kgIkIoc+pgWjMkMvePhYcMzC9cpMS+F\nkmA3WO7uRRBg7DseXjwwjD3n8wXvIOXEPJ0oOdN5GawcQiXDCKv7xx9/5OHbP3I8fmAJM72R9iqj\nKEfN5IxuUQnWhBbTmtOd1umKkB1MsRqQVaafxnK5IipQmYMFWmaYi7QVWWR4cFZiltD2U7sO0wT0\nxbnVw1htljW1dqnfc8toJYvhzqohapOonuh4NEw1zvWcyPmzzmgTvvw3GKUH6Xfq0blt3EfrasWI\njGLOJ47n74i///e4rifFK+fTt8Qg6Mrl/MS7t7/nfH1kWa58eP97wnSlWQzbY2yPZWoHVtHOlpWK\nFiIM/Z5Xr7/g1es37Ha7FaVqoW5pK1Ioq22oakQ5EeNCiFEcWbVAVT3Irkzjdb1URAEpZa3klkKV\na5MAX4c4tGBJGyZLtapFM1V1RLXma2oypt9YZE/d7gNpgxG0UIYu3Ch3/ZnXn5mHWBq0YH3h7n7g\ns8/3OAc5m9bkWTCYOtU914G69UPM+v+1JcNg6DrP3f3Iixcju91A13ust/R9p9HFQC4bjTot19OV\n82nmw4eZ77+98PjuQkm24enWdZQYJfIrHdNl4cOHI8fjkcvlwt1+J1CGRfDym6zpIzjFZCWuGNH+\nrDVGo4ypvApoyyDR0lQvhIRTarxALlVRY635kauShNP6XhUMqBmlyEKtoJFtkABoEI0YG5kigDJ7\nTdMqzVRKNaouUxT9MjeHQJi2VRzXuL4dDqPXJELEiRIjj48/8P79t5SyYOhaa8Qyz0zzmWm6qC92\ndP1WmuJjwXnHxu0FnbaiOWiNY5mElXp/90DnhcXmvOhWhiC9i7v9lt12TwqBziWcQ5igNtH3e0IY\n6JzUgMI8Mc8Ga47M12dyFmRjmc/sdnd03UDKC+TMbnfPZi/jj6wpOC/EnvP5xDKdBD+wUPQau8Fj\n3QjJSk+rscScuZ7OXM4nUgpErZvcHe7w/ZYffviRJSY+++ILYoqEObA7PPDFl3/B3cMDf/ztbzg+\nHem7ga7fcDmdcL7DGodzW5wxhLhIr+NlEuLOnHA+8fDSMs2Fkh37/UjfZTZ9YbMz2JwYuoHz+VkE\nnLUHLgUZtlxKzzQv+E7qqLlkEgvv3n3Hh3dvZVJDJ6PYZIjrqlZijMCVUsvW7lpT0Yvc4Po6MLpG\n/LXlJpdEtgozKkRPKdIOUopkj1rTtkaYirY225WoLUa1/xCFyVb4FlZRkKLZycd4xw2pPxftm9SG\nN63PF5OxSIbXaqBGpO+s66Q0ZJ3a50LVQrWmOkuHt6ssmrEVwhVEJ5dADCcuZzDWk8NETEesyWRT\niOHE0/vfc3wWDd/z5UdymrGu02rNTStBqQ4YddCy5t7KjNrt/gUvX37B4fDAOI4NojRWUgc5SwXD\n3IIM4zptceuYrhPWOlGTSnE1kjWT1+dPTVTVQxlF66qAh4ZOUl5qeqdG59BK0NBEwuUhU0lPtlRC\nlNWEL7fSsNR4s3QE5EQxlpSlRUecvyNp681Pff1pyFQN8zhseHH/wOefXzgdZ9EwnYsq5esWEw8A\n0CSApCAqmqWSSQq7r+s8L16M/PzLA59/dsdhP9J12kBrCn3nVSxXBq1O05XrVYgF795d+fH7M/Nl\nhujU8OcWxWLAmZ64TDw9nXh+vnA5XwhLZBgTTid7t9/LGrmWojWPGsVoO0leo0V5oL4dyoKlQp2y\nPzWibJGQXpapMJFRRp44sxoZm1JjtBqRG2ljQQg69TPR4K8g/Uwtu8uZoobPlFrXqFBpJckklQGT\naJ5qUygaeK1TRuQpphaYLSHw9OEtl/MHDvs9JQbmyxlvPCnLEF7nHTkGIWLlTJivUhPRSfDGdVig\nUyp13w8Mwx139y/0HBV8J/BliBlrE7vDjqHriGGW/jkEmgx5oORCionJOlznKdvI5SIjp5YwKePT\nM/eGlAKb4Y5hGDFYrtcrKSXGsacft1Ac3sJhK/WtcTzQDx3OS/+lfLdl3Gwx1hHjQooJXyzDuGWe\nLrhOoMKYM/tx5O7FS45PR959+z2ffP45rht5fvrAJgjr9cUnnzJPC9P5wnYcOfcd82TIGYXcCvM1\ncD1fuVxm0gKYLHBzZ3BeSSZx5nJKeNvR+Yl3P3zLfD2z2w/sxpHt5sBuu2WeI5v9gS5npngECtYb\nOm/ZbDqsDYQwNRF8jKHKKGIrsmAaUlF3j5qJ9ve6725r59KDJqQImy2ZTCqpwa7CFYlgMrUT7Vbu\na41Yq6HTwNoAJULjLaijJTX0R3qeaxCogXpekZFiquNe2YqNqq/sS2NFmUYcopWWHT3vzlhlsNPg\nSNPEPqU26UxHNDO1/7EQKDloACC5pTAoCyVNTNN7jB1IGXKMWn8TA29r3a3ZaBTpcDW0hxKxxrHb\nvuLu7iXb7R39sG1OxxpR/5bMMotwxk0GbZVTkFKS+n+UMkFLGlrgI9ddbX3t3ZRZqwLBqh5g+2OM\nEZH8XIU+KvFJn1ElO7W70Weq83ZxHqfkoqxtGBQUKi3UAQR1zYwpN3v2z79+gpapYRhH7u7uePNJ\nYLkGNmMHJbHZGK5XUaAQj+2w1suQW2gOxOTKLgJrOzZjx4sXWz779MCrlxu2G4s1iRivLAs4O4o0\nktb5UgyEEDlfF969O3M+RmGZafIpMmi2RRrGiILO6bjw/HTlfL4yLwubJDPuSkm4ClOW9WE0mEwj\n1RWqkSJ+NhmMVyaVOjPjRDGnTdOmMd+E9KIPrR5Hg16nUQHaGnVppFoNQtH3lfoUlDygNc3aRNxc\naY7NsVR1j1z00JlKcVanV5ll1HXjxkFmUKdVGXLz9cK7H76h5IS1hmVecH6UDFilrHKIONfhSJwv\nz0IZLwHre8Zho4eoEMIEJtB1Pf0wYIEYEjlD1zshCJkO03m22x2970mu041tWOaZrTXEmGVCeSn4\nbhAJNdsxTReu0xFzuYBJShTIpOXIdT5RjMH3A2H2nI+GoR/Y3R0YNhuqCMLldGY6G7q+5/BwYNhu\nda/IhnPWMy0T0zIxjD3W7TkdHyUwIfIhveXN51+y3W85Xo7Mv/kVn3z2c/yw4Xh8xlBkRNTDHZfL\nE3bO3L94IIbM+XLlejmS0sLleuVyngiTGK26Vf3gWIJQ/7veQvHU5m/rC0u4sGPAKku89x1d32GM\nZ3CeaRc4ns54Z+i853C4Y7M/cLi/o/O99OJaRSYqDJdpe1gmzd+MadPMwFrTkIX1MKx2xBqj0b3B\nZamhC2R2YzQ1QGwQWsvgxOg5KlSquEvu5KrquagGW8lHNZNbB4p/dFF6/m+m29y8o+QsjrCp06ws\nTOoZFWtM1TMVn3P7XeK9LMLWLFalH6uz0AA4q7B+NmBypODJWQhcEpdbdSBe7Uhp9q/Ur6zOUUtI\nopy0UQm27ub2VuZvgxMrpJnrBAph2sYYyEka9dtvm4p5VZi0fkR9Mus/yfNkdfhqB5rWnKJjq7JW\nZe+2L1vX00Atzxm8bruMkByrQ9TRUQr7CnHxJ0l2A3+uhliVWxJ0fuD+bs/y6QvGUX7t0585vvlj\nJk9yodJn4yDWDyhqaO26kAaV53JsB8cwWLCBmCbmpab/VicHyALWSNM5i/NCFDCwimabyigSgVfI\npGI4XycejyculyvzvJBSxnlN4FNpG6vCPrnUDFL6zEQ1RvoQc1rHPIlt1AdfKhTT8i1WqKVunvUA\n5pzUKdeHblW2zWltMOtDza0PsX7NOqFcNkdSAN5okRmlK1vsKoNl6oZTiLWpjaiR0XpAyYlkjLC5\nqlPVJqfz8ZG3P/5BAo2SxQF5MUQmJznXvmMcOqbTO0KYhdHGgPU9/SDMxRwjIQYwWRr4vSfGhet1\n0sj5gPeeZQ6MmwHnOrzzGJextuA6oY37rmeZAkuYyJtAyTLjbVgW9vuXrYcsJRi6QSbU44hh4nx6\nIudEPwx6SCPxw8w+7nn58lPuXr3GWMvx+Zmn9x+4Xp755M2XbPd3OC8C3FghjnMtOG+gs4xxR5gX\nad3AcT6d2ey3WOt5Ph4Jy294/eZzNocdzx8eCdOC6xx3d3fCoOXIdr/j6Uma6KdpJuVEN3gdOlta\n37G3sN86zpdEWAzOGpJNWNcxjh3eO0rOnE8nwvKWZREkxPeObtzQD1fK8QRFYPYwSa02h6U5wFKy\nzqm8lTczzXCpfVqNkpJtBGqtAVxRe1eDPtnnFkPS7xBeiKAskhHWnsJqvYuiKRq82dyM/21GqNZS\n3KRq/1L1SavzvPnUhoZk5LpMy2+pTVC14aQGxpLRohlQaVcpNVOxO1XHeE1tpaUjl4R1EgQY04Eq\n2BjNIo3Cx/KdMu5KPiepPUnyp2a8FTEqUj/EVo8oz8xZg+96uq4Te3krTEBu7VgUVPq1Zl25wdYp\nJ0JaiGlhjeY1w2x2Ys286z7IWWvDJWtfqX6RWRn2ppELb9Zdg6qsBBz5LpmJ2apK+plyAap+UxE4\nA0X7Hk2udtr8E5WiP/36kw4xJtH0fHo8YYzUBrebCm8WfvHVnhCOfP9NYEkGmUVl2oGRDV43Sd06\npWnvTvPE5XphO434TmqIzovSSc4RVxtdvaPvHIdDz89/fs/5lPj9rxLX00TR7ZvTAtoiUNsXljny\ndDxzvFy5TBdivKPvBy2gSy+MrdRRfbCmqU8YbdxPkMGZjjoSpmVliJOqqhupys1pnfTWiNTNKMVm\ncVu53ESado1Q5eFareGoPWnruZKVQKJYgVd1mGpBRqJo/YeyZqbrvaaPlGlacI5ATEWbZmXsUOJ4\nes9l+sBm3BBCYDvuZCRNCZBldtowjpiycEowbA44zSBiykKccYbj9J6YFrabO7wx5BgoJbMs0ncX\nwsJms2EJV8ZtR1oWQswYhbCM6ek70csNJkIxDMOOFAJFh5rudg/YThqTr9cZYz3eDXS+Z7fb0w0D\n56dHTCkM25Fh2DJs9uQUOJ/ObA/3vPz0DXcvXrHdH/j+D7/i+z/8mvsXn9BvRvrNls32wO7wgnHc\nEeNEIeC7gfPTGWNgdxAnd7mc8f0W6xOn84nzr/4LP/viK1JJHM+PLNNEPw5s9yPFGM7HK9vNBu89\nl/ORUjLOS3ayIMzQ3hlIia4rdK7wfAosAV688ORimKYFQ+F0usr5MYWEYwngfE9Os+i5LgXbGby3\nhBS4zhd++O63TJPI4onCims6lrdOUHaRBosUqV03+1rPT62F1+SyrHsNQZTE8KW2AVuQpvP+iiIv\nup1bZoBRNAQDVuucaltqGxROPrvkjDHdjVGs122QzMLI+bHSFlaD2vpZDc4zwt4upTrXohlW1nur\n026EafpPnXpleLYf1WsBFWDpMSm00s3q3KGYJOSkbJT4UyHLWj8tmnSs+rItq62wNVCJfSnJTM6k\nmV9MiVwg5Tqgl2aza9ZXMy65bNsc6MfZtiYAKm5S5eiMBuM5VzHuFREr1Sbq814Z9oZbs1nTjboL\naM60xvz6jBRatU5QExln9d+JVDNNorb+21/9UcbIuIWiIrvWGl697DmfNkzXwru3CROMNK22CcUC\nmbrSYZNs2pQLl+vCh/cX9uNR6jjdiHM9Q5/bzRtjNd0F33u2u4HD3cDPfnYgLIllSXzzu8R8DVoL\n1M1rDKZIvTKHyPk4czpeuV4UNh1GfcCJejAF5o5SkC912oZcf8lJYB7qxpOH4fRB/FOtU2mhMWvk\n1JAN+b2co2yUopF0pR8XHRzcggclB+gHlFzhBmmRaENVb2qMLSpXsk2xknWucm3y80TC1V6wVt+0\nevg0Y0aj/ZKZLieck2dRirAw+75n7Aeu5yPZZJnPPi2M2wN7K4K6MlkhMHQ6Xbxz7MYDm2Ev95MD\n8xS4XCau84kwP7FcNmA9u3HDlQzjiJCDOwwLxXjmHJiXhWWeca7HO08Ik0bGns14EE6em8S5J3ne\nxTjuDp+w2dwznR51zWHsBvrdA5jCdJ14/923bHd79tsD9su/lh690xNjDlznmecPz3g/sLvbs91t\n8P2OYgre9zy+f8f5dGS7PzBPV9L1SqEwL5GcFn79j/+FN198RYiJJUxcpzOH+xdsN1v2hwPn04n7\nFy95ej7z/HTBhIJ1hr4XiTdnJchIKbPtLPbek+j48ot7nM1cphPX04QtReZLjiIpZoIw/eblyjRP\neFcoDh5e31FyYFkufPvtrzk+f+DFy89Ey7SaO1ODukqPqHCXthNZbajOAoVJVpBkCj2uGbAWHBZa\nhiKOsWZi6+SElPR8VmNUz5UiQQKWpOYQWoDa/qc2nFe4NLfPqs691kZNlW4zNw6gtIOr5zC3b6kZ\nj2S3lZ2qBB2tOzZHoQx7GbLssKZXMlyQ/mK9d2s6snVKiKs9yqrBrCUbdCBvQYhIqH+1/8Rxa2e+\nICWtvtmiaiFSpazDqhMlR2oWbTE4I6OgNMWS76wZqTE430OJUse/ZXDaimzRtHBRIk1rg9CEw5hS\nexP0mgxYaYerfdBi4pKuoRK3cpZ6c5G1rfdk9DkJqlUawdBau3YN/ITXn3SIp+OVGBP/9t/9it3W\nM24Mmy2EINliWjKd8Yy9yDuxJoKyF/R/W/SmKi3zEnn77ihps+lxbkfXjWw2e1LUSXxZop+kCzJu\nRu5fHEgxsYTEPEfCsvDDN2finEhGe4FKrc95Uo6cdRzU5bqwhIWQF3rfawOpk34nYf8AtX9KnEF1\nSq7cHk0xCVnTtGxuJK1MbWaWul0pWVlS64PLCsOu4gC6ibHNGX1UyzBGKc+VpKOOrwl6y0Y0N4ah\nGgWBkvS7c4VjjBop+S5rLLcSVKZaKfkAYlg4Pj+Si6xXjFL/GzYD8/VCjIW+GwVuHnoG56WwnSGG\nKAxSpOa0GUYZM5QCxTrmObGEzNPzE8YkfO8I+YxxPfP1zOAy9FIbTCEynSdc35PSwjItQt7xCz5r\n4JI0+06FbhjokkxkkbMs9dgUItvtHlMiy3zVGulECIm+9yzLxPVcOJ2O7PZ37A73fPr5V1xOZy7H\nEykUKFH34cT51LG/O4jwd850fcfldNLaT2KZLxTrmWOU3kzrePf9W/qh53qeKRRifM9uu2MYBoZh\noO8d9w9bliUQF4nOh77Dd46UCtdzwlnD4W7HZ3c7Xn3yhhd3ex7fv+XDo9TnlvlKIRESmDyD68m5\nsCwL85zoOs/9iwP73Zbnp3eEsPD44S3f/vaXfPnl34D1NGtl1BVoDbX2BTbkkpvaojo70QAuxBsp\nNYpTNqAa2LLu9Tp4W5zFqu9b608U1UJukK0yaE1qiIb8gkCGgBhFW88dN+eqZnySiVoNHOs5kMzM\n1oh3LVdoFpsKSudvncMNFS56L9Wg18HBWbPLRuwxhjpwwJqebIQcJAxLpyIb9SxbvUYw2VKn5wir\nXRPUlqhphmS0txC7Bu3tbeok27WgsK6A03UqiWSZFpQb0uxN03auvIe69jXzL01STldEgk/joNbC\nES5HDdaN2sGP2y+KBEB5nSJUFHIVL32DPBoJ6G1pnFawt4HFT3v9aYd4mgkh8z//22/Zbi3j1rLd\nWc7/twVrDG/fX3k+Z5ZZzbChAtJ1hW6iBAepbv7MNEe+f5uI2eL8yGa7Y3+YuLs/UFIRRZBoKKp6\ngpHa4/1hS4yqVjMvLHPiww8TOVSHsSpclFKYrjPPxxOn85npOpHv9tQsXTpRtT2iRr3qTSzIpHlj\ntC2iZn2xZWOyB6waiLVKkbWIqok9txFsVsckEZJRhle5WSqZ07ayuGqvlpEGZs3S5CWaphUmaFdg\nrLR3GIGAs9GZkfqMhP3l2gZrfZDqEKt+jQFiCkzzBe+8iBZoRDmdnjk+f6Afd2y2e3b7PV3XC35v\njahbdOIkrLGEMLHdHsgpkEOklIXL+UymoxRVs3FSrx3cACVptGohRWKIXK4X3NyRcyAGyQ6yNXgn\nBKWYJA/IMeK7kaGHpQTVcJRsIS2BKZ+wrsN3EiW7HCEZSurww4D1hhQC18sJ4wy+29B3HeZwx+Vy\nISyTSNdmL+LK+Yz3mWHTy/E0hcvpCT/0hJwhFjo7kggs04VzkbbwJWTOpw84D8cnw/7wkr53pHDF\nkNhsO65kgg5Q7jpP13n6wXDY7/nk1UsOh5HD7o6cE4fDg8B15geengLznDAJxk2HM56cIqaA99Lb\n+3C/oRiZ7OGM4fT0gV/+4//K//Av/vc8vPwE45S4kKucoNGtatSgZz0TSvAqFXIT51nKmj3J9k+t\nlSnplIUCzQBLgNj8bkNGZO/a9g91Gss6xeWWRVhu2r4sJcuk+UbrxzSD2dxjNb71MxU1oUSs7Zoz\nlDfrBda6RSnNKTRB75uraQN2UQeieVgdlSfQozBsBaLuIFemqsEYr9mWUWKNOu3brwduGqkpZREH\njCrsUNWB2lWx8jqoXlzWv9prY+m8Bw0WVscG5NQy5cqTuHW6NQHS1FJ1Tay2iOnPFOWqtto4q59r\n1K6tE3yaTi6V0wE56Xe1a1u1dNEh6vJsb5/Gn3/9SYe4LImc4P37iQ8fpDfL+czpLLqO//DrZ1Lw\nnM6i2ViH3xp98KgcWe07qhkcyCafl8Dbd8+M4wdevnrJ/cuJlyESQyIuV2I6E4OQJrwD62VRN+PA\nw8OOzz6buJwCy5w5fkAmDSDYtrEGskwYOB0nLmeZfJGUQi/7uKj6e2WkScm/ubK6qKxJU4ur6pmr\nheVaS1AWcdbNs0rVmfWXtO4n7Lck9ZpKvUaK1jX1FwNb4U2otYoVZ28Xonwb8fbGeKk5mNL6flqN\nEKCqf7AepJpZ2huqukGgGqvN7P1gyXHm+XjmPB3plguQGccN23Et4He9x2JZrhdpu7Cyl2LMxJxF\ntmy+kJJjngPX64x3WzoLfit9jg6HQ/oqRcHjJMQEOTsYLDlC9hJImKzGrBRKSvT9lpKvUudU5X6y\nlf3kO5awsISJFBc6P+Jdj00JP/RY0zPNF/IR+j4qnd4h80AdISxMkwyh9taz348Yf6CQmedZ7idG\nvE7+WGaRYsvJME0zYZlJKfD8/EQpAmGeT0/046ExIw2GeQ7ModD1WYTL+xFrHfvDgaHfkELk/bu3\nOFcncGQ679hsRhEYsJauG1hSxHmL73peu3spUYwbILLZ7KR9ICTevv2WH3/4lv3hBZ2tg0crDFX3\niLYotENhWkZTs8WsLU2pEh+USk8RdRs5NkXP4vo51TjXPd0coqmOr1R/20LN9rstYyr67zXoC7fu\nT3sGvWSjVDZ5DYg1hK02izqtJmNIYjLLxwhPg1l1bdbREys6Rs3ItG8OxCGmHJWrkCklUkdMFZUr\nMw1G1HUxtGeiidaaHLYlrLZLUB1rHPbmLWiJ56PE0mhGa6R1pB96hjCCsTi3yrZRr6lmZ9UJKsyL\nVYdYys19q9mjioFLJ8D6gUYSKStBfy527U2tT/YGHq0BQSl19mRNwm6uxVmRp/74Lv/s6086xKoL\nV+ftpQjzkmREkyl8882EM50UZLVwegtZADjXS+RIhzcjxQRyWVomF2PmfFo4HUWXNCyR+ToLIeZ0\n4fnpSgowDp5x7BhGhQFSYXAdh23P/jAwXQvzOWmGZRRvt+RkOJ8Cp9PEdJ0IcySNhb7rWCfO18jN\naAugVQdVRYktOqdEmvB1ijyNKVWxcGFIWWMwOeu6JW7HYdXoU4xLbQKWl8ArVdGnbqQK2VToUyKo\neoCtKzdiuhbpbdJNotCCQ+cZGulXrGIAglhVmrw60VIj/9qrZfF+IMVCLle8dRyvJ0KcyRT6fiDr\nMNwqZ0cuOOuUbNOrviek4FjmwjJNnE9HrvOFZbZcrwuny8x249k+7OmGnmHocc7Q+Y6UJPKOcSKH\ngnc9cqikrpBSEdFlK5q4OSUIIucmLTKFKhxsrNWsztIPe5nfqf1UYZnBGJ1O3wGW62ninGe8d/Sb\ngRwXUgyiHdoXUooCkbLHjgKfOtuxTE/M18K4MXSbkWwiz8ezNG73lvPpCDmSUub58YjvMs68x7uR\npAOVLQnnC/Ga+PBu4nKK7HaB/W7EkLAlCowaI8t1Yl5E6q6QmGchg9leUKfBdhTj8X7g7m4g5Mhu\nf888HZkuC9OcWKaF4/GZH7/9Az/74i+xnRfjnNGsS0L8lHNDTsToVeZiVmb2qvpSe8iaTTK1Fqd8\nAWuU2Y1CkHFNEUtqEb4Yx5o13BQwCtwqkeQqR1YKIjphMeXjDEmcTD3n5ibjpZ3phjJhGjS6upDS\nvruxY1sGKU6/JlMpo+S5OtxgHTVVcnUQ+j2I/qoxEWN7hWUrjJvJBARmdTWRa6XDdUUM2I5sKoEx\n39zPzatE/cP6e8ZJa4sqQNW1dJ2n8gpA4Um9o3TzsUaJMlVFSFigar/qoHi9YKtBrRaAwIgjFH7H\nTYDTGIWlJQtFM5S19CR2qpKybPNBRYmOP/31k6TbxCAXEfUt62YIIZE1pW56nQaqtmCtozrTkW2P\nyVd9ADcxQ0lMy8LlMhPmQlwyV7twep744zfv+M1vPnA9Z3a7nsPdwGHfMQ7SknE9BUJAU7jUAkhx\nJhZbHCkbLpeZ43nicp0JQZpCc7EYp71WeqglrTdKEqh9hHKQchZKsEA9RloldFcWvaf6EMR2KPnA\nVgdX100hAiokWjH/dYiNLJwWk43XzaUnzCJZjn4KlRTgxFmDZJ2VAFGjaRRqqDVCeWY6W04NXZWf\nyzXi0n7GcdwS48JyPZKiIYVFZNicJ6ZIykEG6roicOYiD8V0js1mAznTW0/sPMty5XJ55jJfoHim\ny8T3PxwpwKuHDd719N3AYX/AFRmP5LuOcbOlPw/M8yQ6iwn63pNiIKWZbtfjug6cwIGmOIpLMhkl\nRDorLGZrBVK9XGZ832OKx/ueuxf3UAwxRK6nM37sMM6SYhAHHgLOO3zn6XpPijKWCmcYNgNxmXh8\n+56+2zNs7vDdE/NV5LhYZrzvsRau54khyxSFWfVSYzZ8+P7C4WBwbiYVyMGQksHhGPrCPBeOl4U5\nJp5PF4becn93Yru7Y5kvTNOFJUQVYYahg240WJ8J88Ld/Uupe1uDtwZHT9BzdzpfuE4zYU6cTmee\nju+FsFIyKSPwsMKEQtgyH2UjaNBoiogySDymxtEIUSSb6lLkXFm8ZphOsoGsYs9FlaEqNFluYcJC\nbbq3RQSu61y/ljnq/NJSpBVCzqSTOLKFmDe1qvZSJnPNFImr+ytJA1EPNeCuTrEG0kWCo3meOJ1P\nxCTDdc9zJESHzR21jlodWBUFMNX5pgwmkn1C1EZrXq3Zpu2ozFY90vIyar9uDXdOFCKZIM/sxiHK\n3F791NrPaFgzYmcZ7EgpIgFZxcqr2xdHritgzc3niti3MWhOreKUVX5PFbrXRKNer96MMRgSptaE\nlSBk0KEMRTPQomTIBrkW3ZMa7Nd82CBteP8NHvHPVBvrQ8/tMNy+6nTpOjhXGpOrykPNZCWDkVqY\n1UhNokv5tEyMUu+Yp8j1MpFT5vHxxDffPPKbf/zA6XnGesNmO3DYD+z2HePGYpLheA5cz4GoEXFN\nyeX7RFB8mSLPz0fmWeDXqn1n0febKvGkEYcWbmupoD68nOuRlnVJJevDMW2dWvTnCibLfaYc25qV\nYhqkKkuxbvgWNUPLJFGcvooOlCoCrtAQlZFWv78efGPUoGSqcMFa3xBlD2uMkpZM6y1CnXlRs+Gc\nZRg3MpF7XghzUYSjYBV27Tc9EJjOz02FwnvPwBa37ehGGQtjl0kcQZDAJEyR02nh+Tmy3Ys4b8mG\n3g/s9gccmTBdcd5zuLsnLDOn4zPLPIOXXsb5eCUuE4sbGK3DVco+kc52eDLTcqHYARehH4dm0Obp\ngi2eYqXPdNhs8Z0wZ6fTGT/2QCKFmel8ophC1w24XpiUMS643hPDQlyu+H7PMO443L+gH/dcrxMl\nw/l4ZtxCzoFpPpGSJ6eJkC5czidxwlNiGAe2neV6ujAHz+WSuJwj1sFmLAxYUpFsdomFdx/OPJ9E\n6zTGRDGJ0WS2uz27fU/OkZykP9H6Dmsy1+tMcoLcnC/vmK6L1ORjJsXCNC9cp4kcs2Q6uVqC0lCR\n2oqx7lUUkTHUWZbSogCGSrW35FZ/F2k2q5maQKLKjEx1J9uKTFLlEtVmirM1QlLJJQtRp8G1qV1r\nJchJW8bNy1ghAVIdufx3LmmdGKXnsmqxylGsa7Bax9pKkVLiepn48OGR777/gWVeWJaF775/Tzyf\nGezEZugl8FVoUMazSU+gTImxiv0EiouaO1iM6bUPT+2sBgF1bm5do3Z7aO3RCFwq17iyhivBqA4p\nkKVb2yikvikEupRQh2/aOtR7NsaKlN+NvxDWfGX15jU7LOBuEwkrTHuTRHHG6A5JSOnKFNPUhgo6\nmFq/ytquWbyiSIB6XPU7RVirrALzP/X1Zxxi3QgSIVUDvTpKaPPANEoqOQtjSPeNzBHz2BCpOZCh\n9gHJK8XC9bJwvUqT9jLPPD+e+PDuwvk4sUwClcynzNPbK64zdL1TOC0Q5kReNJNTqKbi6AYvdcTT\nxPlyZQkLMUd8Fow+26q4YVurBfWhcIuVi3OprTcVBpLlsApNVM6Z0fdldVi3Be2MjMiiRUXohqvS\nR9LmUfPFIgxSV+nPVtXeV7RDnoNpj6zKZUlUaVpUWpv6K/3IFpqqBXV+o0lYdEBsKRhr2Ww3cplZ\nYFbrwGWJ//peDvl0OTIjnzH0IyWj4gqOYdxhbaakSIryvKfLVXufpOF8GDzW9RQcznv6fmQ3DMyd\naKyO4wano3hOz4/EOGFRNlvJhGXCd6PU0krWz/DsN1tyjBgcy3LlerriFQ7KOTL0IwZ4/PFb+nHD\ndv8ghtpY4jSRcgCb8YPVrD8TpkDJMM2S2cYYKHHG2DPGb6Qf12SWSSDekBPTtJBy5HJ5R+dGQjpT\ncuZ6mrhcZWjy82lms7vD2EwmEVNmSRkSjL1lO3qK6+i7gZKjtJ7ERAxSHx1HS9/33B32DL1nXmZC\nvgCSuXtV/JGarhGm7LJQAOc6olkoJnA+H1muM+be6WDgqmqicdZNVkNFIWrJRA++1Oo/3ouNeFfK\nuucoa5O4/Rh+rJKG6zBfDQIta2aY1xaOgmn6rPL3dNNXbFuKU3IhW4VMi1MnvqJC7WAbPlagak3r\nFYrKmhkWpmnh8fGZb/74Df/p7/8zx399IoaF//Kbb+jzhfshcL8zcIgC5btCToWYM2ERxvMyXSgY\nvM9YL434JeemiiVrV7Osei/oAJzVDqNThQxGtVTtTX6oNkbLO6UG4wXtE6xvMVSlMFp+qQuoY5Uq\nzN1eVjRFq02zpg59sM2hS+mwWTYJrjS7bSO86udn2StYq2IlilIUDf71cmQQes2ClTVvRCS+As4/\n9fUTHOKKp9cN2Q5GSdL+hw7Wrab2ZpVyZZ1qXU4YkEBLmxMpRqbLxPUyc36eMCbx9HTm6fFKDJoq\no4XnCClklilgjTDIKEXFxblJj1UgGBkCezrOPD+Jas1LffCF1ck5Ww98PRCauRWjB0AjzypifFtj\nrNFKCx2VfixUVm1QrStas6/61kw2aNStkwBAmvKtoTVBFhpcC0aTnKw+rtLXb+CBws1uLWtZRlJL\nJdqsDrHJzYHWVoUZnHNm2Oxx3UjX9zgH1heckUZv7zzLdCF7R+9GrDPEoJMBjLDFjLHkKAN/r+cT\nl9PE8ZQYNl6m1I9GFVZ6QpAD1XWe7W7HdrshxgUydIc7Ie2UwOkozN7tuJdiBJmYZmwQDcW+7+hd\nh9veSbbjDMPScb0+44zFb7bkvGBIOBVKv5w+sFwv9ONW5KpKFNkrb+n6HSZDWgLzHElkcrxyPp3J\nxtM5yHHi3Xe/x5TC9rAhzBfO8xN+3HG5TGz2OzCJ6/VRphskWMLEPC/McyFnabAfdweWdGwTDFIs\nhKUwjrDbSi/i83Pkco4sUZRMOm8osZBjJi1XLsEwzQsxTmw20m7S2R5vOrmH5cx0kd5NrEzBKEgA\nNF/PnC9PvEifUOP22qcqe6xGuxqUKfGlUuIlMJY5EKqopupB1YIaCbKrj2oMmSL7vdbNtBRTkjie\nVhovymso2guYV4eQU2kGk4aiFHWMqCGvHADZo6asAWaFbitrVs5NlWas56mlzTIoeok8PR/54zd/\n4H/5//17/u2/+/9w/L/LTMpf/i6yc5mXu8IcFrI5Y9yI9+JmljBzvZ64Xk6EMAMG31tc1gA1LcQ8\nC9PUCGO3kcz1uK9qMPW1SjpW7Ok2g2xay6VQ1ciqbc+VKWyiTrkAX1Gz9gG5ReMfuZpaflmtjr5J\nrF7Kq41NObbkog4myAqx122yWlTT/k6rCRa1ppla4a0bsrrbXKOG/14OUZxevSDR2rvFfmUhRWW8\nYdhJvaVei9GIjIbl1ohE0fFiyCUwzVfO54nHpwlrEo/PE6fTlZiklpZvmkeL1rgkUtWDVtlNbbFK\ne/C5CFT0dDpzOl2YpkUHyYaWJWn/hZBnVDJOzqlVergstjWWRGWzqiB5rUdkXbDWb7QSdVrUW+nO\nVg2MKS06ZV2eVoOFKhmnTpCkm2bNPk27Y7T/SyCkjzJTdYB13etGo84P08ieotJLVn7bGkPfDYzj\nSGdfsMxnYhQIWwT2Z0zpiMtEJmg2mDDOkVRMYJkuhEUYlafTe46nE5cp0A+eYfTc3fVsN55lOREG\nh/VWmsq9xzvLxu0Fig0LQzfQec+7dz9wPJ4kGy2JZbloOSNj8NT5br7r2W1GinNsHnaE+SUhzJhO\nYKiwnCEX+h5CjEzTmfnyhPNbSknYLD2NxursPN3U83zRQauRsMx02wFD4fT4PZ0zGN4wnY5c54UN\njmU6Qym40vHh+R0pynmKaeF6jswBYi48PZ558cke78RbeOvAJZyFHBOWgnfQDw4/IQQHC5SMdx2H\nuzuwsudjDiyh0PeFGBaCTga5zhNv3z7iO8N2f6DMkRDPQqgwPZfzkefHd8Sff4V1lcBRGcpqRI3m\nDRXSv4He6sSbSlqTne90SLCeB/FqjUAhEoKaATTnaFidkKHKINbJC0VhtZxrX1zNciT7N9Y3j2HN\nal5LSavmNAU0YJWzKmchKzoihlUdQJYAtTbeZ8RkTNOV9+9+5Ne/+Qf+w3/49/yXf/gVIYgG6dMx\ncLEQgrClnZvpu4B3EesiYTlxPR+5nK8sSWZ0FpNJOWBIlLIQS8Q7ME7UuErJjdFZ0yRTIWC1ebao\nfJ1CrLVApatdjQISBBcNHiTQSCmQimFZZlJKGhzcODq1S7W9pTogq7Bl0TUWQ6ajnkrhoxaIIu+p\nDNq6x6jJViut1Vmx4kjrQOLK2JWPWuvM1Az+tmx346T/3OvPZoiNfAXaykBNoJBNiVxESXIQ/itn\nLGm7zU57EWkRprw1k0tkmmeenqTfjZJ5//7E5ToRk6g4VHaRQKGuGf3KWjKlahpqCo1BisqyMcOU\npEn/eOJ8ObPdCs2+ajU25Zj6u6Wm5DVvM1Kg1nqI5Iy1BWLtlZFsrEJJK1etrYatcIKwVVtdROGQ\n2laK1itqC8ZNrocxtdaoBX7F0Nv5BupYFFOMihVof6FmwJXUs16aZMMyS23RbxLj0HU9282B43Ji\nsx3J0Utmcz1RygiDIcwLnc8MZcC5narxyKDf6SzjmI7n9zyfnrlOE12nsIYz7Pej6HHGzNhv2Aw7\nfNcJicWPdJ3HbiXwyXNgs9txeHjJd9/8gRQXNtuBy/mI6zbSc2hkyKlzlt53jJvXgEzc6B9eEJdA\nJIPJTNeReToLZG094XAgxkjnN3ryhcSRYlQFKMM4jFgDyywKPiYHDCI/eL4cuRw/sNlsxLjExHx5\nJoSJ58cPbPZ3hDkxXYPujMy8FKYAMSbOpyvbnafEjO8c5SotA66zWOdIAXbbgdevDtzfp6Z4A5kX\n9694uL9nWc5M85VlWaAT7V/fjUJyMFmmhMwRHwyWK1Fo4iwh8/juyG78lqf3P5CWBb/bKpogTEfZ\npzVbrAiJGkWFoUuJEkBWVqEGxRJofTx9wlVjpr22GJ2PWoyUX4rBGBn8i0J8SiJHxpPlhnaAQpw1\nC0wBYz3Fmo/tkhJ/srU6CzUhvYq+QXg1C5HJD+qMjdFSip4XhIR1Op/58d2P/PLXv+S3v/s918vU\nwJmcIWQ4zYXuXBi6yGYIOHsFM5PCM/P1xBKSMEONJWVDlRvLuYidyRFjI87KtPmYZIBBQnvX6/gb\n5QmI3ZDWEpkpuTZeyDBjh7F1PF3NIA3OOpYyC4y7TJRSiHFpiRGw1vPWXjSq85NlKwibtmafck3O\nOlUXqtlmhUKrP2iGkIrLYWvGKD+7ybWqU1qTioIkNEWRyf+GzLC+/iypRqKtIDfl0Ju5WXyFJUw2\nAsXXdLxesC6kwSnJROp6FQsWYFHYWe/fnYgLQOJ0vDBPC7lI1Cqv+rn1QOlh1DpFIUtjq3J6rem0\n4G6J0XA8TZxOZ66Xq/ZNDhQrHUbeerClbXaD1UxRv9cYFaLRjMysP28q7npfudGZC9xEpu0ZqhN3\njcwj+6BJHCkmLTTsm2jOCKOUklVhBprUmlGDpA7aulV6CaBo3bESc4xGlZXMt2aoMnDZkKnDjPve\n8fDyFdfrOwyZzbglfLiyxEw4X9hksL6jGze4bsBYiOEqcI91asgj5+ORy2ki50zfWayTaD8sWUhT\nw5bd9o7Ddq9qQjJhoO97Oj9IEX9rWJYrd9az2e55fPs9cQ7M8wXXSw2xICLieQ70XU/XjQzjHjeO\nTJczjEHu2cLQn4mj1i77DdlCCoEUIqWIoHzKC/N8JYZIXET933ng8IISI888Ya1n229Iu0BIhus0\naYSauJ6fSGSu5ytxtnTOcUkzlyljHcRQsxupRZ1OF6R0KmQfZz3DIKLdS4g8Pz9zf3jAWxmwPWwl\ng7077Oh9R84D5XKhJEgxEyOEBN5K4JryQtdbTk+By+VE10vQZR2EOHM+P/Pdd7/jeHpm2G5bMNoM\nlsA+in8IWUNq6ElhN81WqhEuEpjJ1o60KTFGglaB2uoMwhUeywhs2tj62lObS626KKGtoXnagiTm\n99YAUQkxKyFMshGcbehOJam1ociltH7h1aatZzmXzHVe+PD4yLff/pHf/eG3PB9P/xtWFJYEl7lw\nvCY+PB8pOeFdJMxH4iLi2c5DtAXrAsYI5yLlQswFZws5iVxaVmdYR0M21BC1NUah3pt+yBW+RJWt\nbu1CDcBTgyuXMDPNF8DR9/8EltRAoTbcrz5R0S+Fq2vmp+mgugKFo03WWrC2T1ijZCnb4HCsOHZx\nOVWX1ra9V2zdMbSgqJbBMJWxvCrv/JTXn267qPephcp8g0ODPKCa2bSNIlZ3XXttkCzULEaaRQ2S\nIdWUPsTA8+OZ5RrJJTMtE0vMOAZdWPl86dvTB6+1RTmkSiLBaJ1NNrq1HblEUpKo/DotLEEa9IWa\nbda+pGLbGZYoymhAkHU/KGRTcfaKvZN1CVILFNpnUB2/bKYaba6esG4k29aoMkolyFYB8sreskCR\ng1I3Yqn3bGrHiEALxShJINfP1HprrTFoH1SL9jSwsEUiVREqLnSD5+7hwPPTHfP1xLDZsg17chZB\n7hgT2/HA0G1lr6RMyAHTyzSIVOB8fuR4emSJM9YawgzbvSfGxHRdMN4wuB5rJWssFBlUqkNurXNQ\nEt2wpRsHDJZu6BnHHfN05Xp6xLiOrh9kb1jH/PxEjgHnejbbA/uHV+SSWZaLZJslMJ1OGmTIE4ok\nYhLHJ/bQYrwlhkCOkevlxDJNTNcLnbf01jH4DZfLic12x7i543g9E0LEOUfnZepGynJwn58fGUaZ\nqRkDeKSvL5dCmOHqM+5p4v5hUAirSIm0DuTtvBCLTmfJ/HrPZZrx3vPj8j1hieSSCCHIgFdvMMuC\nn4P0xKUJZ+Gw27LMZ+YpsMxR1tuJYbpeZ75/+w3H0yMvXr+h87WHbg3Pb+Pvqp9b80iwJC1HGK2B\nV5i0lgoqKSeTscbrUapiEbc1SWVtm38C7edE48usfo868UWCESWLNMJFfa9ppiPnIqCI9QIF6w1W\nNmt1jqX9X9Z2AkuKkev1wocP7/nx7Q9Ml5ndfoexlmDP3OYFqcAcCpc58eE0sYQFbzMmB1wudF6r\nFyVTkoT6TktDOSvkq6WnmKT/L6tNsgZtC5GFyDlQsk65b7ddA4MaHERl6ErdNeeVmVsUhk456rpV\n1uitYxC06ZawYo3Coo3PIApSFSo1yqIvNdtuXoLVjhbWZwVC0imloWEGBMUqle9Qmg9pdUatU+e8\nIgg/9fWna4jUja8XUmpfjzjAHEVlBVvhBK1a1QK20XmIZI0MrWYf0g5hyI1hlEtimmeWEKjzB8Hg\nTNGMxgnMoVBCMdrgUNmUGnnQDp7qEyb93ZyZpyQGYJGCsaybW+Ea1oI+2jNTI8XMTcFZ10JINrpR\nWZlcUivRjWeEsbo+TDmMVuuAsjH+CZxRHalB+umqw1K4VXzmDZ1YYSUobcMb1jaLYrNCEIZ0Ay99\nxBXUek1BasK2oFPglfY/dOw2G9IyMV3PGAzDsMX7Xp6T9aSUBOJJC8YavNsRg+U6HTmeHok54Kwl\nzRCTISdHXCQq7W3POA5stxs2uy2+6+SJWIdxQiF3XYf3nQ6gtqJm40Y2u8Bmuwcc3llyAT9smKuI\nN0b6GPuOftjj+s8wBmKYmeczKURSDNJTqVF4Sgnne+qw2JLQny+kELgcH5muZ0JYeLp/4unpPc44\nfDdwCDPvP7xjCVf68cDQJc7TwsUKVLwE2W0pSvSfC4RFnl2OhfMp4r3BD8I+nq6BFDMPL7a8fCX1\n1BgTS4ik61WctRo1jMGPAh9lZG+GEAnLBMbTdz3WZFJKHPYbShYINUSIqWBs0mHBdRZgnT+oBI3K\nWNRMSyj/Wq9X41mhzqIUe+nHXY1gJauhn9e4CazlBikX1HqUfGGpfAFy+51cZ+HVPW1kkg01o6Wi\nXFpfM9JqZLNpehsmSyRpbK2NakBar1VtXjXYJRtyjixL4Hw+cTx+ICyRV6/e0PVbHh/fcfa/IsXU\nELRSZM9f54I1geskZJXewq4zIrauSJv0clqSESaqDDSW52tsWRNCGnFcHYpmSwgJJpbaS9kASFmP\nLJKP1IChJhga6aytGGjGbJXUU+HYajduuA+6WmuLqj5jFeoQ+yh2qfoRW5ImtkXsMKpXyvrsNIvS\npEzvpqKSxmIqC9hYySJL9ScrD+SjS/wzr5+kerr23pT2hfIPla4sDq32B60U4er15YBY04mDTBVS\nqQRuidYDEy5LhF+ZnNnImCaH/Riy1lqekF5aWte+07BGQ7UhNixwuS5M00xcJILKJJy2NWSEjVZZ\nT2tPlf4xGt0Uiy2ZSGnsM8nQFE7NILWQChmt0ZBpDlh6GEsuyqnRf1NBAVPhUaMVy+abayZ8c2CV\nBdjyd1O06inCArmobBkOdFiw9IxKlFfHtLSMUpuhLaL2Yoqow3Sdk+byaSGFDLZXVmwhRqlvGBaM\niQzDnlLgcn7k8fEHzU4sMRSuc8b3HTk5np8XUklsNo6+H9hvd2zGEe9lQLR1DqkzZwYrU1GcUXjN\nyRQBMphxL8OKfQfF4DoZFTUMvThcPzJstjjf0Q9b/Lgj54VlPhJnIQ+EOJNjlKAhF5xmrEWfqdQ/\nEiYbwsvXLPOFZZl4OD1zfH7mermIwgeWFy8/5fHpHTEszGFiPF9k+kU4SY3T9lgfOV+TMg5FezZn\nyAEux8CYLTFCSoXjHLlOZ5YFdlthdc8hME8yyieGjHew3Tl6P9APAyFcyFlqiKVEDL2O/CngYH/Y\ngSmcL1fCOZDmwrgREelpmglh0Si8NkrfZGlU4eQ1PTPVU2oWZwztDNQaXR0+XDM/QTNqEFcDM3W8\nRTKENjZI37MaQHXAtxkFypYptKbxtV1Cs4q8tj5VyFESG52lV9QGqB1qPXp6DVLDSyzLzLxcJLjY\n3fFXf/k3zPPC8/E93+5/IIbA61/c8/j4xDLNlCQqx9elcI2F3sDYgTeGTTZaZ63hhxowtWm1/YUC\nJkugkRVh+tjmG0qSumEjAbX2iWrDa29oXrN26z7+N83Kqqi4vS3e1fFWH/lCOY9GgyNTsgQZWLBR\ngg4jSEwjWzkHKWnmuwb3zQkamVQhDj9rBr0GU9LfXjPQj0k1tS/1vzOpxqphV0ipZHIMLTvKSp01\nyWKcwpXGUoyjPiZTBC8utogYRHt81RkKXUUuu8YAt3/XZs/WWKp1w9YoqpBnSdCEsx04o4dSyvap\nBMI0cTlduU5X5jCRU4TiJCpVxps1RhexNgvXy9WgoAjjViIPo5+vq2W9PGyr0EH9nZs+mxpYUK9T\na4AWR8kF4+tZL3oeqtHRXkW0btvWUJxCKjJYWP5Rv1sNTV0jMk1QWDRmxdlhBAhqvUe1tSM7jJNa\nojD7nAwLRcaqpLTgVPRblnCRz8sLuYssYeFyOrJMC7bbEOaF8yWQKAyd4XK6aiZmSGHGYOjHUQ+h\nHCZbPE51HWWiRSE7SyGSY2w1besk+3G+x7lBD3lRBwne9HT9iO0sfthifY81Hus68rCQcyYsF3JI\npCJ9i855/DAgzEmFy6Io9OcURRAgXNjPE7vnD0zns3yH87xJmafjI5fnZ6Z55nQ94QfP2++/5Xi5\n8v4x4JxhHAxdb+i7Ij2aGZZYZFg2GaLCdxbmJfLtD8/sdpZeh1HkpM+ZIv1azlGSwOyd3xKXWRmW\nC/OSdFqHYdzdsdns1DkYjLkyu8TQe4wzvH//lh+//45f/OX/0HRSzc3/VbIZJUsLSontqLSsqtZ1\njGZimglIzaju8dwMoJyRpHUtMcpZJ1yUXNsejDrIGiHW0UD6+5Sbcyt2ytY+OGr2KfXOnOX8WWux\ndXC3eBzhAVgDGpRmJQ2mmhUre91ay3a357PPf964DClF/u39/5eUIv/Xf/Nv+O77b/n+++94++4H\nlsuJZZ6lxq1IwbwU5k7Kmb6rmXeVdRNJ7zbJp64vEtsWiSlo0nrFkJKsW45Za6qqWkVdA8nGbqhI\nVPJTzQbFxuQVxfpIkUY/xxiVp2x+UnoRk6jEijOrgYg+z4wKLdBKNlhDzpqx1iyzFMiJ1qR2o54l\ne6A0p1eyCBtUUZY1eatqXbelvj/9+rNtFxRZjCYGUPHhuvkwLVujzvxo+ba+P0NOMjW6ypHJnK/E\nSjoRqSEx8jI+CY1WGmEGS62vpbwITKrGs4IIkhEqi9Jq1pSVZ5Mzl8uZ6ToTlkBKuimsOFxDDcgq\nVCPfnZPSultLA5S2NSuMrA9aqeHooRYEqGawEtWI36pGRR23lQZhq79XIeGqNVob9esWbk2vCPRj\nPoqyamReQRSNxnX+mjFWZfhqdq5Zp5IIqCOtjAU6wGNcLxF+MUzTmc6PdP2A9wO2GEK6AhDiCact\nCssyUTB0/Y6QCufziRgS4yBz707XSYhMxpEydM6z3+7wzrUIE1PwbsB3gxycAikuLPOZFAPWeZzv\n6cct3jtt3vcYY+jNHjPofs0F3/Xy/q7Xzdzheo/NndbDLckFbFiwrsf3PX4YKGk1yCVnCZ5SInqP\nC45xc8c47rlepG7kuo4MbPcPnA9PhDAzzTP3D685ffnE+w8/8s233/Pju/ccn48sy8x1ikRbOF1l\nZ8UMc5AzZp0cVGNFyGCe5aB7b/GDo7cGbG6DaYu2c1Q4jBTUMWVSFJbgfL1AMYQYsRj22wFnI/OS\nKEvkdDrx/Pwo0KW1H9VhKgpSyKLCpCSHjEJtjWxX966hqNjDOqxWM67qYDFqA9C60U1gbCqaVCUL\n1fGaOspsvTKnZDJzUw8TqK8G1EUD/NoCktVcS2tTa4nUUF2YrCsEaxtDM+G8Z7s98ObTn3F39woo\nOG9x1rHb7SkU/vX/6f/M9999wx+//QO/+/1v+Oab3/Pj99/wlB5ZUsBGIdyELMFQSEJONFYzRQ1s\ncxFHqXG+/p31em0lBRVCyGSXRUmrEu5ucsTbYc+mlGZZqhCCBCkakFqdmGF8+wTbnmHR6So1YxOy\nXi0j1jJMFW+pbTNYiysi3lBRVblpSaTyjfJMrk6x/ncN8m8C/xr0C5diTSZK1S++gdT/3OsnNeY7\n65WtebuYpqXZwvQSKKFt9rptrcEkzaSsxWSLQwf41sVv0WGmELFGJLMk9lwoqjIv07Or1mDFiCsm\n7W6uukKMeqBswCojLcYkChFRhMWr7xbFeb2ULGw89GcCy+lnaT0i5/qd6gw1C2zhgkZRldFZwZ5s\noGrQ5JJbY7y8XSPr6m6NOLYiYRW3ogE1qK7RuGkRsP5i/b5SnSk3UEl1lXq1t7+LFqqNxpAhMV0T\nMQCmA9tRimEJgW440PWjZHfFCdyYM9YNgCXGIDXFYpmuV+alUHRO2+UixKa+93hncM6w3chQXmed\nMOp02HTBsMSFlCIpZK7nI9fLkZIz/WbDfv+KrfFQenAWYzPOeaz3Ute2npyCQDheRLsF4vG0JnAK\n3oisW8niXKzvsd2WYgMlLoIoaC03R3ke3g+y5FYGp6ZUxY0N/bCnGwbm6cwuZg73r5mmiU9PRz79\n7C1v333P2++/5927t/z47h3v3h1xDpYAMcrpNBa6DqLR+FEfbckyDs05S8iZzqzqTb63+K5rez0n\ncMXhegcdqiIkRKdpCXS+Y7fbMWwM57P0A4/DQN/33OpFkktjK4sxym0PtnYhg54JbaW4IVlURmHt\nPWuCEqU0B1p76Sp0ipZKWn1SjaDAtYZinDhd/Q5rHXVSiDNVS1Mdr37XeoTWwB5MJWqKnbPKDTD1\n3FSrV6AkYT97IXXt99D7mWJEzH6z2TCOIwX4y7/8W+7v7tlut/Sdx1khaE3TxDRFQiwsEZbFEH2h\nVxKVsYZacRFCaGUIm1VFqh7fUtsMxBEkVYtZmb2GVVFM7WJ9TkbKKrV0VVdE4ugsdVZnbmL6+vwr\nPb0a0BvTVPMTTezQ/VFRq7ruUpqSn1tbp1OkBo3W/VRK1HNaCYo0PdZSy2XURKXe5O1eW+/9z73+\ntENsG0mMSmrQhd5UKk3wu84TNE6K5Ld5pHHSh1hQ9Xz12rXRd+UN1+K9Tmy4MerruZKVt9UBlqLF\ne53+oFGGQLVRoAf9v34wbLcj3dDpDEDkgbjStoPULWDNOJHIEVtLCBptrz0xFNZILBeVUtJXaybV\nXzRCMVcyOZV+nk2izhVrmaNRw62GQ1bGI1DGbaxMg6AE+9caTU5q/Ux7JqbVL9XQGaiTyouOZClm\njU5zSixL5MPjIx/ev+V6OrJMZ0KSuYhpOzaCUA4LpnhKscSE1Fli5DqLrNU0y7UkrQk5ZxgGJXqU\nyH63o+s6wBBTwqdCCAthfs90nbhejlyvZ5ZlhgzOe9zR8vjuA10/sNvtGYYt/bBl3GzoNyP9sKHr\nBqyzUrMwaiBTUjhoJUMZK6Lx1lf5v7xmhJrRGCDlSCoBYwzODfIMrMPanpik5oV1uJQwZo/zHTEs\n+BDp+oFxs2PYbenHke32nrsXn7DZ/YGh+wMfns88nhLzLH1/m52j7wvnS+LpaIihYJ3svbBk7Mbi\nrKXr5Y8thRQScw6EJRFSwJpM8QbXS8W3G7cMg/RpOiuZ8zh2igI45mnBesd2t1dWdGn7vJ3qG/1Q\nip4jdZC3+9PomklLkxAjbKm6pzWSzx/XejSjKxVVgtUx6YUIjKgQW6uRGWEoZ/2FLBYmt+tZg9bq\nPGrTeU6xlX0KYLO9iU/VMN8ExKVep9qzJc4YCpvNyDhscSozdH93oGRpK7tcTjw9PfH27Q+8H0ec\nuxBDEoeYIGbTyFE21ftbHXhRCDq3eY9rGFvqlA/Q3u3S7Ol/xbJU6LFN7Em5Bf7NKdZeTM3gTCnt\ny6StQpOOFv2XNcDINZi4sU/auW1a0lSNaW5RnrWFXER4oGbpayBitIQtyUH92spwRjNSjCQhUNOK\nG1v8E14/gVRTPcAtwVYvRKEETKUvWxli+1+9alqtPT3cPlBD63WozpDb99RwQ7/ICNO0QbWmfobm\nPFkNezHUmX/OeLoRXn26482bV+z3G4axxzvVzKv3WK+pjgyq99naOCSqNcZog2wdLJx1mLAcIle8\nsN+KLPFHD6ToXrKdQqfCHGvRXl2+Gzzc6IDQuibG6GgYU3u/arZ4+z2V1Sejbyq8bZCozFhpnM25\nNlvLAay1uwoRGiub83q+8Pbdd1zPH5inCdcZTqdHUvACndqBUgLWdmA6mXsYAzFGpvnCZZrAe0bv\nmK8LxhnpRbQFpwopd3cPOO9JWZ7fMi1cnp84n54peIyzOOc5PLxkd3jJuN1hDEzXmfly4nh84vHd\nW1IMQGKzOzButuwO9zy8+ozt4Z7OD/heM+oQyFYcpXGdPq+Fpp2ZCyVGMQaNCSm7tg4gNcYppG6V\nHJXVOGWyyULusR6cJ3HBlEznejZly2F/TynClrUWdpuB0/XM8XLldDqTc2a7G4jhwvc/HHk6RpYI\nJsE1FM5L5hCj1CG7Duc6TM5czxMxzYgYg+y3mCNdZ/C9wzsxvH1n6PwgTNhhh7FOhhF7xzhu2Gy3\nFCMN1SUXkq0Ma9l3cp7TapRoueRNKmuaCWnRpDXtLNUsslRyWkN3VMSem0zEWGnkr9C/rRZEv8uI\n8HjW5mzkeLMqNsn3Vhm5YkqDcTFiyMUJ1DBd4ctGqlmTjZSKiiLM4uymM84aNmlbWQ4AeOfp+4HN\nuGEYR7peJAqd6zFeZPFCgiUiTN8MXiPqyhrOio1mDLhcwaqWStCCdrnAEDPeZA08TavZNvtmVHYS\naa+qTsdar21t1R1p2xFavUAcjnOdfKUiBgZYzX4N/gV2rTZPL1KRgLUfZR2EDiUbtX8Kwbe6rqNO\nuKAmDVhABivLZ2kJSQUg1v1XGqr5U15/1iHKdlOBbmvItjqn9szV4KoagmK6DZrLEoHIK+v7qpJM\ni831BiuZAlatUB2gWSIGX2MeWcwb2m91avVnucxUZY1+sLz87I4vv37Nz372ipcPL9hudlIALkp1\nbnV57bmsY55KZehJuwil1v2kh8rhBaargQEFW3TIZ6mbSiMeY3Cm04eq2YnRB1bWQECeX2nrkNs6\nFW030oNbs8QGiSiTlDXSlbqXRtlWsnJLJdeAsakFBatjFeeeyRjnca4DEnOYWJZMzhaPw5hICIkU\nLzgXsd4y9KMIRueFTNb5lhGn8Kdzlq5zFGfovJe+wPnKw909d/f3WONE1sx5IJJyod9s2d29Zn/3\ngs24Y7u/Y9wdlMAijbthvnI9Hbk8P3K9PHJ8fs/leOTd93/ElMTDwye8+tlXPHzyhv3dS7puoBIH\nrLMYr4FDVnJWTmCF8plLIadFa0l5zYiMwFcpJRlDBYQwcZ2OlOxa4T+mmWW+Mk0X5imyxIXz6cT5\ndGGaJkIMeN9x9/CK+xdvmOaJp+N7qhE5nT5wPM04JzB+KmJA5znzPBW2PdxPInO4GVwz9M4a0Myj\nE80IjHUsi8DV4+DoOulPdd6TgiGGzDgOfPrpG+7uXnI7W078TNbQ1NTL04NTWseSKbVFQQkoxrTW\npDp7tKCsXTXmzaTU2pCaBdN+vrKfDWIyc6myYusbW+uVElAqQar1FFaL06ZA1O8U+5SL9mKUJNKE\nxrZ+tkJt38jMc+B8OnM+nXh+euL5+QlrpYbZdb6RPKZ5apMvcloDKpQHjpH64RIKSzTSjpSlVpz1\nvrKe95hya8yPi8DqRQNsqr4sUKIhmUKMlfByyzIVBym1P32/Oo86jk6CQS3tlBsHVl/1QX8Ugqvl\nyFW/+BaAlW4EaeaXz5YSmthQ2TuVXay95saK0k7OUj5pn6WWUdvfqtJYbjVplM+letOqVftTXz8h\nQzRY40lGCSgtHJAblgGiknFIxPBxtiXPXp2VleKsNQ5nenJZECKySCcVaWRgrebJxsklkumpg3ul\nZpG4bbZt7NIaNynGPm4Mrz/b8+Uv3vDzn7/izZuX3N3d0Q1eD7Uj50qO0cdXksIutkViKQeMEfae\nsUbVLlzrlRI/JVJUKLyCMRoM23UpDNS+R2ONrocYCWvtzUbVQ16S/l0NiUZbpq5z0fdrpGeNZJM5\nJzUCNMNfM8SEba2iKNwpm1ifaynqPDWj151qstMm80ycE8Ym5lTofM8wZkz2nI5PpJzxncjizZM4\nxmHc0PU9pMwyFXoHvvNazw3sDjs221FkofQ6u26Uye1Dz2Z/YLO5p/NCovHWizyb9eCkdjYOW+4O\nL8hxYQlXrpczx6d3nB7fMp+f+eG7XzEvR8L8BePmQNc5IQV5MYLWDzjXg1mznmIgx0WUd+rWz7If\nchaW5+X4yNOHtyzzJFT86arMuUIIQfRKLxeN2D2X5crldOJ8PnJdJjVc8v1d12OsYxxE+CCnmaEb\n2O039MNEOWt5xshemmMhZnC20F8DKQb2e0dvpXTRd44QE64D1xliXISUkws5DgxbR8ozy/SBaY48\nPZ/o+pHD3QP7/Y7WVaH9CaYFvKIwJcbTUnt4K52/5m0fZYrVahS07Uf7YzV4XOuVCVPcx+1GQCur\nmAq5Vv7AGgAaDfmqDRS3U/kFsr9lEPdNyqRnSPrYU2NzCtksg3NU6bkUE4nMHCZCFMm8cRww5p6C\njEuLUYRAjIHj8yPH45Hn4xOn44npMjPPQuizOis1ZlESCqkQsxGhdWNwWsoRf1KIOlovaVzWOg0M\nqwhAoe3LGBfpm82h9U/XVSpFSgGtxFKM3m9pbPWWrd/Ira20PqN1v9VZmqYxLfbIYijrg6BU7kW1\nZdZgi4qiVJWw+iDUMRuTtdZY+RjiEMXPmOZvLIZiK+lxdfA1oPqpr580/klEfztKZWXWKKLlNAId\nCoHB3ujI6dNCDLO1Omsre0SAuYdS1LkBJFKexRibWkyP5OLIJgJiLNDRQ2a19vI5JWCMQJH4zGbn\n+eyze774+hO++OINn376gvsXdwybXnuhhKJsTNTeNr0nJemsYrRKdKlsKt1Erf5Uxbmr8o5ZI8Ci\nbLF2nVYiUltkE1aVGhEat5SytqzcPgPQHxlRf2iGxqBOrYBReFaz6lpjabui9XhJBC+fruK71tSL\nEyKUbraiz9930hs4bg5Mk2SLJki/lomJcIwUJql/OOhjwlhHThbvPb7fMvQdl+MRaaqXKBUsrsvc\n3d0z9IOsrfZG9cNIN4z0mw2d75UkK1TynBM5JrIOcgXIIZDjQkmSfY+bPdZ7toc9OUbmMBPnmcvl\nREiRYRgYh4jPA85Lj2WxArcYL/shTGfSchYY11g5dDEzLSeZQnGdeH78gaf3PxIXYfbhLN71jIc7\ndl1PSonNfJb1dj3zsjBPE+fTM09PH3j68Jbj03uOT89CkOlGOu9wToho43Bgt5nZbE44l8hBd6Vu\njZzhMiV2GzE1OUHfWZYQBdKysnlSMEyLaLN6awhhIV8tl7RwvjxRyxVDv+Ply88Yho2gHilqrU85\nBPUZVGLFDYa3IjhqUCs0B83xSfvVqotahwfXMoeoMynkVtbgsmg6JIazGtBKUdOTosFjDVBtq78r\nXKeBdlabJZl+EtdcTGs5qsN7sw6sTZolppIFBbKWcRzp+4H7+wdkmHJqZ1SgwdLEHmIKTMvEZboy\nzxMlGy23SHAdikKmEaIHmwu5MjgrX0F1VK0xMjdQb7dxhWqMnOT9KSYVy0gfmZCa8RVTA5RI67dE\n5ryWXCfpgLOd2ktZ4NsWjPWDi/y+qRarlhQqCWdFDSXY1kQhJ0UR1O6ZTFZCUym51YOLRkY1W9YP\nV66IQKvqiaWDxKojL7T98VNeP6kxvy081XtrHparOHVNwyuxxtSUiVZbyFmYfqWm8PXA3KwpmUKg\nlKFlWaoRI4tjskIi0rAvzEuBMW0z8gnjItu95bOfP/D1L97w+eev+PTNa+7v9owb0X0UXkWUzCD7\nte+lOhGUbUl1aPXBSBSpLBatLStmXWnG1UTXBtb6QG7+09rKGNVICCOOtWj9qpKjSsbaTldCjERW\nyLh+qDZPyGG+hZ6oKvDVTpRmqDQZbv9eBwQXkOGltScISzds2O7vcV1Hl+F6dcI8nXM7/DkXnAPv\nhJUWZ+nj8t0GYz2DGvmcwJRCP2wJuVCIOO/Z7w50XUchNS1VdE9V45ZLAK2fLmFimidSXMgpEZaF\nGBdyWig54IzH+l4BPumRc64DX0hxIcSlZVnWOZGry5GSRQjdGKdkGgn3Uk6kHKhTHMK8EKaFNM10\n3Yb7Tz7X/eyxnVMBgBHX91JvRiYYSB+elcka1wtPj+95+8M3fP/t7/n2D7/k7bu3nC5HunFgM+4Z\nuhFjnQwP3vY4O5NsodNMoHHsspApUjIsM/QdOG9JKRNChgjzdZZaN4Wul97hfC7MU2ZaEpuuwzjD\nZrPl9atPhWWqtdOU80poyFnnDioZre05q4Y0UssimLwa6rY51TGWIiSxIoxUTGmZSNG/y180KzVV\nhKMqmhSVfat5z4rGrCiq0PWtrb2UNKhQhCsKQtGpMmWGysYW1SajQ3ArRCcC2NZ2jAOabcrVZB2O\nHXPCORmd1vUDXT+zGTdstzuZGtPLFA41ZZITZ4hJMsVW/2/xvkDPzlqc14Asp5rgtXuvhlnOi0yt\nyCkpjHkDe5p67zVgye0DSpFgJ5XqSCUTdM0JFn3OdU3y+pkNoVv3hBiZdLNHKgogZZ6itlBIiysc\n39pM9e/WGGGdq9MrMbZAqdlYLSFV0yqGDUqDw/786087xLZIt0xPWy/5Zr+qwp+tCdItzQXVAtUB\nogas6XCmJxH099evqw6lGuTm3dXt5xxvdkDtcalFfhFL3t/1fP7lC776xSf8/Oef8Ombl9zf39H1\nnWpiChySstDobTaQwNqsYI9dfRUrHl50UxbNSIuVC6/tJwIfG70eveaPVsLQ2U7XqGqXVrapEgxu\nHnJVgZHsV6FTPQDOSM1L6jAVYxc4t07fMKZoNmlbFl2M4is3PVfyoTUa1/qsMciEiMKw2cgU+M4x\nXT6QwpUUshBnNLh3zpBioXQGmwpzLrjOMZqEHzq6biCnREqibxpzJmYJsDabnsPdnRiRkvFW5ilS\npH6Qk5PgJRiVTkssS+D9u7dcTk+EJNFsKYmwzHgKve/oh55hGBjGkWHopY6p4YNJhZBl3I40XUOK\nYoiKKTjbaSYaZBxOTizLlRADBkdcFubzmbjMZGsoqqhjSgLRMCAXjysdlajkuloDB2e9hIVZalVd\nP+B8j+l+xbsfv5Etbo3sLefouw3D4HE3YkMugzdaNTYQQ8HtDLFkMvLeZYlMcyYlIUY4D94bQgSS\nEDDmSeXkSmQzdmz3O/Z3BzVURcQQVDGGCpc25i0IwiFTKuq/WVuNlPy7bGOjNZ2EqfNFNRur6iZG\nM5CKRJl2HkqzK6syZJ2UseYAEuyquokxKgpQyxDVYK49a9XyVMdfySb1/NfsOmvrhTVWZmQ6rxl8\ntXW5Zc4pa9uPydwfXmCNJaXA8Xji4f6O3XaP89UpWrCJVMQhxqxzLqwENGI/5UKdt1J3NxGXMnFu\nkcbq5BXowWRiuhLCTE5VfUYfidpzGpJXLe/q4CRIye1Dm+pWS36QfhCt2Zpi2hSMUtZnWh1aLQ23\nLFGhbgHNaxuJfHYFHITF7TTAhVQHK4i4741d1bKVlgkqelmTMux/J4dYcw+qY4o1rb6NSYpuHjkg\n1vo1EkQXQEMda6oyRBIVlGLa97TP0p/IA0pq2PUh6SgeMfkdxgjZA80MnSvs7zd88fUrfvGLT/ni\n55/yyZsX3D8cRMLLFJJuDNkG4sCiEWkho8ICtR5hTXPPWuytu61GNSrmzRrNoRPqxUit69duC91Q\nlVzQmuC5Ef6W30la12uTyDUKqkbV6jUJ4SCthsFUN1dunCytHlTUuNRSe/t3jAp7Z63TiIKOdx1D\nv8V3G67XifNp4TJlvQbTIvgYoTL9ChbbOSFp7DrAcTweiSmyGQemkBiGnrAUDvs77u4edLqFE7UZ\n68m5EFPG5ky6Xpku7/nx+294+8NbjteFaYk8Pj2xpAWj42ZSnNkNPXf3dxw2O8a+o/cdd3d33N3f\nM+wGiepToTiZbBGWGeO2eGvb+steScQ4i8hAmJkWmXhRMlzPR6bnC2FZSCTJemTD41wnDdq+x6sA\nuet6YWE7KStgLTkGgeRsYRwHXr76lJwyvd9wvp6lp1EtibMdQ9/hOoNZZF86WxiMQG0WWBaBsMeN\nw3WWzhtSkvFStY6fMtIFbK2oG6mDsFbW2ljPmzdf8PDiJQZk7FVZHWJlH6eSINURadK4LwxvkBr2\n2hpRI95MJdlUY2kk4GS1EaWZlKwlhNyCPKoDLNUYKlqy5kesc/hW9qPUBFd4RuqPULRWLAS5osdL\nDHRt2BCUQILYnBKmCCvaeyetFdViGSc8iuKwOcoZsJbNdkMuMrzg4eHI/d0Du+2OvhtwvsP7iRjE\nGS43bNNcMzCJS2kLYxDY3iAyzKnFunr/1YoWcgrkvCjyscKm7R1V+7NIFme0FOSsjNurQYT56PdM\nKx3dcJmoDlUcqaOGCRQwzlNFulHVs+qYrfIZGsFHIVGrsGpSwfXq0BvJytb2Gtl/1ggJSazaKvxu\nzK1/+fOvPz8PEaTZVVUIbh1hyTXVloJ6SlLPuVVGcK7XeoPUDymS/a2f9XFTqJj/IA4Ps/bw1cUy\nVjaf1hsKkVISzll2+4GfffHA11+/5oufv+bNpy+5f7hn3Pa0GkRRQeC8QrY1+pOzpfCj0dqGOkjL\nSlAxeCkg1+uvT5OqZGFYIy3THF6FRleVmnKT6ZrWQwncLrPmm64dCtmsEjDIitkWXYmEXVoPverL\n0tb3402NYvTVcFWI2+imzilijWUcd1jnuVwWzpdMSKXBRRTpj8tJINNMwXayYW1v8B5Oz488ffiA\n84UQC12/pfeWnBL3dw/c7bc4wLtORj9hSGkW6bKlcD4e+d0vf8mvfv1LHs9Xnq+RrM/v/fsfZR6i\nFXr2Ydzw6pPXfP75z/nk1QuM9Tw9fmC6Xnnx+jW7vTioGnTkFFeCgbVY1yvbNFNSIeZAiBNzmJmv\nF8IUuRyPXE9XYSSTiUtimq4s1wnvR3zvmZeC7zqGUeY0us7hh45hGGRSx9CL+kyMkIWiv93siQ8R\n1/WczyeSzqKz1rLpN3TSjEUlgVndhkK/LyxToXvocBasTWxGJUaYQs5SM/dWa2TZSlvAWFhCICyF\ncbvniy/+ksPunpKyDMPOaCBcYTp1aJWNW9t6TDVIYrAztd9Y/lsxDD1zpYW9t6GZaT2zalQbaxSF\nbCspQ7PKFrSvx6bU6zDIvEMKtQWrhvfVmhqsimyYVeSj0KLHnCuDEcmY9FdTzESS1g0L3nm8c9pM\nvxpg4U6Ad6LV2w8j/eDpvGlZJiYSiyrWRJmOUs+++Pa1nl+KTNupN9vC7RozV5uTIIbAPM/EGCsp\ns75B/2O1NyWbpoZTW+NuYc+PHIuOt6sBd72YypqvF1In8LRh6xWpas+9Pu/SHHMb95Xrk4q3Hkeu\nwzpMFui87gAKFU+Tp2qN7tWbhfkJrz8v3YZhs+sxGK6XKKSX+o9WaLaty6cWuGX1xOXVvraVP92c\nmnQVeRKh3YjceKK09gF5pRLxpmaHpjnCWgfabD2fffHA119/whc//4RPPn3J3Ysd/WgxrgBehWfR\nKEsiy3ZcSsIWlScyWR2oBgPNAMkhtU5FZ03XDjusrRT1cyv7zbZ1of0RiDTf3KHRz2ihUvscmhqD\nRsatd6isB9hKNJ1v16hJw0mYWai9XtCGKVuncFF11q7VauV+wLqOYTxgGDmfItY6xk6uKYaEsxV+\nXV1ujAXfQdcNxAAf3n0gp4BxHZcp8HLbEeNC3214uHtgUBKL91InyUnqtCUFLqczf/jVP/DLX/6a\nP/zwltN1Znz5KW8+/wWj6/jw/jtKnrHDA2/fPfP0+IRxlhevf84cC2PM9J3hcnwihkB8+UKyxe2I\nMb20BZBJJeDtFue6pkSUqaw9SHNivsxcjkfOx5OM4CEznc88f3gkpIR3A9vDSIyFP/7wHfN1ap9l\nrRDPtrsNm6Hj1auXvHj1gmEYCSEQwqJ1156uG+j8TEpzy4qGrqPr7bo9igQgxkOKooUpT0Dq6jEs\ndM4ydo5k5VlW254peNsxDBsKhXmeWRbHl199zZdf/xV9P0iwUIz2Wa71wqphXFrQV9oFCXtazdSN\nBFc1bxXREuHomrHR9nWNM0s7Q3XaRp2arsdAbQzwkQpLRQqa67MWUz4eIlz+SSBrbFa41qpNsxo4\nm2bEcxYdzpgLhESaA9M8MS9XDIVh2LDbbBj6TseX1euR65SWjI7Od3Rdj/OChPhug/PCSo0FQiyE\nbEjJkItRDdi6JqJCk5OQTSrq+RE6Xc0Chhy1tp4CMVVBlXXF1zheyi/NOCksjhEkwVVUY13ktoql\nxvSmlpNyc6Q1uAGwqjTTHHyRGytl1WDWVATTEi3lNlhDThmjRMHGBjYViq9Bfr33altr9vzfyyGq\npNZf/M2BEmbevV3IP5gWsVnj142qc/cEFvK0PamLZZHRQ9bIdAVpWegwRRin5jbE+chJVAezKtbX\nf6m0j35j+fTzO776+hO++PJTPnnzirv7A13ftWy1jqcqNbKhKs8I7JmV3eRq1iNes2HbmirKQzPp\nJpEzeLxE0qa0B2tux5mUNZKrm3fdUnVD6WZpkkg3ke8tNlFqpqw/R8k2GuUKLK0tMDftJ0ZPjGSr\nNbNb4RCjTlormrRapuswRtRMXHfgMosKxsY7+s4SnPZMpZWEBAKlOmOIqXB8+8wyTYwb6TG0XQcE\nconcHe55uL+n70ZhM3uL7zzFGcKSSHHm/PzI5XwV4xxnvvziC/7H/8O/4a//9l/y67//j/z9f/h/\n8fD55/z1v/jX/L//7b/j+uFbfvb1X/PZ13/Fl7/4ig9/+CXn03s2vaHkC6dniUBj2GK8Z9ClLAZK\nimQjtcOwXIS0kxNhnpnPF65PR07PT0zLRMgwXc/M1wvjds/r+1dcp4Uff/iRb7/9lm9/+IG3758p\npbDZDez3d3jvcb5j8D2vXt7x8sUDP/vsZ/RjR5gnSpR+XmctXTcQQiDnCRC2bj84sV0q42YsbLwh\nOdmb1msjs4O+37PpDdOUWEomhkA9miYbfOf0OWS63nI4vOBf/sv/iTdvPgdTkMHgTjKCLM0UYpWV\not+Qh6p8ZMBqM3ir4xU9B3Wagm7iCvsZo2Qw0xAnUx2Ruu6PDlA7/DU9KioGUc+onoF6to1lDRH1\nV6xZHW3Reqee9YLYsJKLlA/0sOYkI7emKZAJnC8z7959z4enD1jX8erFKz55+YrDfstmrDNb5UxZ\nTQDEuTi6rqfvtwxDBjwhBFK4EFMhRAhBHGNXs+Gilc0MzljqlPtmk5SQW181c0s5ERcZHbYq9axO\nz9SzXpR/YYRAUyFqW26c5K1F1v7tkov2pa8va0xTxml9nhhKluefc2ksU3Ii16KnRkqmJOocTGtM\nJa6KfFyR5MSS11ZVJfiUokifMpsprKIB/4S8+adef9Ihykgexz/7u9dcTyc2YyKEWbKiUiRDc/bG\n2ydK8XpYZPmaI8viNKVmUhmhNapc4QvJkiJF5ybWz5CbXGtpVgvm3Wj59M09X331CV9+/oY3n7zk\n7rBjHHoRekagXVcNhpUsrGSJkp1Oi6BCMnXuVwFvbx+upar129r/gmbDpWat9QFI1iZ1hbVPEcCo\nwk1Wg1Ghzqbk09akUMkwuSQacUqzmUpstfURFq1jZajMsQbPlmqU1NgUWevSwjt1mNTydB38uYqN\nO2f55M3PePOzzzg+fc/YO7ajJ/WGOQbCkgnmBtenME2B8yWyNEFvR4yZ7U6UWYw17DcH7ncHOYxu\nXUU/brEuMZ+OWOc5vHzF/XXGd45P33zNFy9e8rDdsBsGNsPAMh/5x//133P58B1vPnnN3/6zf8Xn\nX/6Cr/7yL/El8e1/fkuaYbPdst1v8b0nx0ycJ+JmoYsDeKO1jiyK/SkSw5UYEvMk0nGX85nz5czp\nfGKeF4bNhs+/+AVjPzKFSCiB98cr3719x5Iz744nXEkYO/LlX/wdX/zFX/Huh+95++O3fPv2Hd//\n+A3vvv+Wr37xV/RjR0wzMQQslr4fWJaFOEesSXSdY+g6jL2SkwRXKYFz6CBiwzwlnk9Xxv0B33mG\noQOOhEn0gI1F2L7ZSLbSd1LOcB0v7j/nqy/+grEb5VzorEbpUdOcLVcIP7Vss7ZWVEdkTM0GqsnV\nc2iM7Fsrz1lK8OIUBDmSzxLHqcWxSvevCWExTVdznaGodqHUwK+eWX1PRUqoQUQ19pBNpfaY9h6w\nonZTg2YMKUem6UpeEpc588OP7/jNb3/Jdz+8o+t2/PxnZ778YuLNq3se7vekT+XsSDN+rdOKMIX3\nnq4f6dxM8Zm+80zWisBDFnQlBUOJpvHhsj7nFlBojCxVHfMR+7+lbECIMow4pwr7rvY9q12TfsEK\nk656x7lEUo6sJCX5Y00Ve8+3H4dk+YbWI32TRTbbY6omtmTjtpL5tIdxJYiKHbS2ZoFZHZ6WdG5E\nHW41nm/LdZXFeoP9/tnXn3SI+/2A95avv3rJ84eeZZr5w++f2s3nFDDWa+ZViS8ZW1YBblPncVmr\nUwOySiQ5+blxGgWtKhRt8VoclCjFkW3ilkQzDI5Xn+z4+qvXfPXzT/j0zSseHu7Zbke0i0AWvR42\nXXiLpTipI+ZktNk4I3U6kUZaSTRIfa9CLDeRiRBj5Fpq+i4OR51WhWRuF7XJeVQnpNGxOv2q0C7P\nse7gdSeXysRr4gi14FCND+vf6+HRd1ZFHLUs1Ii99hwqFUaj57r2sjbOeb76xV/zd//jv+A//8cz\nJc64ztGPG/wMVyOz82KAnAwxi3h6LoWuE9boHCMWzzgMxCVSUmYcRmlsdpahF0aotZYctJ/QWrpu\n5P6usBn/muk6Q3Fc3v6RR2vZdx2f/+wr/vjHv+f8/GteDJGt3/Ph+z/w13/7d+y2W3a7LbvDHV2S\nKLXf9Oz2WxxO5y0aTBbafFQYp0RhDaZ5Zp5n5suZ+bowh8i0BJYl8/DiU168fCDPE9P5wu7NL3j9\nF5/w/vnK6XLkzS/+Ob/9f/w/6V3k1Wcv8N7w1Rd/wd/+s3/JP/z9f+If/9O/5/jhifPpt5yvF774\n6mt2+41AYhSpA7qiY7XAe8e46fGdNG8bwFsIQZ6js1BiJi6ZEgt+2+HcwLhJzOlCmGbCAt539L0j\nxcDx6UKKhn4Y+fqLew6HO4GwtA8M3R9re0VBpq0nRRMqOzl9dGbXQeJ1OyomYqFG8Ov7C8bU1oBa\nfkCzhthq+9XBioFkhdpWi8va+7iei9rmtQZ/4klWiFaefw1QM7kRTOSXHCVbpsvCeZn4/v0jv/nD\nH/nNb37N6Tix270ip55pnric7vjs05fEX0Sss8zTpEOnwRgJLEVQQrJpa0QG0jojPYhZm/RLTYzL\niuTkrKQ9JGvMctaMo9UQW/zrJNFYwsQ8nwhhohJTKnGF5mTUtmSZ7NGQuJrBU7NJNWFaqtJydjNR\n1grM6zCskn6aKepnrkSdpH2OjdWAjJlb6841YJcRd6VdS84ZmeEqWWCbfahJWbVtt60yP/X1pzPE\n7YA18OrFA8sUiQnO58iaRothFukzhdhYC6eSyYnsmxBVsjR5YulcJjFjU4elJ6ljEafo6+7WjdlJ\nE2tJFCNjn3xfePHJHV/94jVfffUpn332mhcvDmy20kCea2RotZfNSLRltBE4l9pvlgQVKiKRVDSw\nXV1Loc5Ja84UFTOvBXuFMGq9tO1MKnyxPhBR+NAapbpcqdsZcomS6Um83dia1MhId3udwyZLXKiy\nVhKOlPWQ3xgcdIuITamVRIE1kypAoJCpNSvMmgGbHV0/cv/iE372+V/w+9/9I+9/+D3naxTHMgy4\nWGCR71lyIQSpu/jOyMiiSVpiNluppV0vZ3zf45zBO2lCd52j70e6fiSGhZAXOr/B7zbs7x6gGObr\nRFi0zy2cGTD87/7uX/HV13/F5Xrh9PQj1jjefPKCkcDzN7+mXI/stgO9HbE24vuefjPI3rUqbJ6R\ntU0J4zI5B42QZYzV9XplXhaWGCjFcP/iNS9evGB6fmK7v+fFz3/OZ3/1z8BYNrsBa2Yef/wGbzOf\n/uxnfP3Xf4s1lqFzPNxt+fzzz5mefuS7HHl8fsfz5QOn0x2bTa8KRg7rPGMamZcrYZ5w3rDZdHSd\nYZ5KO2fWQM4Gb6WlwlJIQcQmfL8lhESJF0LIGAfn80xKhRgiYYk4DLs7x93DJ4zbreyPml1hWZvg\nq07kTTYmcIPCi8LOlN5RHeGmod76fppRpGaNSnZrM/oqVGeqE85r3bGeJVPRjVvHVT+7OmNFrtoZ\nVBREUaIalNa9Xz/aGQmiK/0fRDbtMs28fT7x7Xd/5Ifv/sD1/IgFHZs18f2PiWm+cL5emP/VgveO\nx6cnnCukVHv6HM7WodeJYqJkVHpKF8QZxlxIRepltCqKEleoNb4C9uMsTJbGNKQ5hsCyzMS4VAsA\n1cWVarfUUqntsQo7txmLVRhAX/ZWqL3CkmpXVhaothhVko4VCFq8qNgkWzPJmn7W/ssaqOsDlTKQ\nBKglVSUdhy2VuVxuFHDUTma0Vsl/0+tPOsSh7ySbcx3nc+C7H64cTzIJoF5s0QsFg+1WeAP991ZT\nq1JgGVGrKV4GCzd8t8UJ8nCoY4t0xBTCqLNWmopfvBr4+uvXfP3Vp/zs89e8fPXAbrfH+TUVFzRT\nHIa1VmCDdghEVq3U7LYRAyTKbAV/fVgVVrld36L/Vm+5BrXKLdc3/ROHqB9a4cw2ALiATOwoNHJO\naeaEtrAt0JWsdX0YUNm+aETWeodKad9ZXWONhitUVeWbxEjVSLtg0AHRBsZhx5df/S3ffvs7zscT\nITwTFuk7u14z16mIJuMi9+OdyEyFWBi6TK9rfb1eKLngrKHT51UoUh9BG5+HEe9G6ggb0YZ0DJst\nFCGv5ALTFHDDl7zJn1OAsFyxgHcWNz0xXz/glpnDdi8sz3HLZneg3+x0mkKFWZCA0iLZEYWQhYww\nzzI9PmaBpbe7PQ8PL/DOMlO4f/iEh4dXmHAF2/H61af8bvD88bf/M6/uLmz7K3G58OaTrxm7jnR8\nxk0nXu33mE9eMfaebhBVmhAWvPMM40i/6XFWyDHHECg5sx16xs5xsTLb0FjJDOsM0IKcyRAmQDIS\ngdsc1zmSkuxmYUcKAaYYSNFx2D4wjFta+G9B6PjV4dT+QnV4Rcav3e4lagmA2mfbjIHu/kbBoxgr\n8/2q9VNyVzGCzmQldUHNlCLlRqy+fuR6/krLVNtX2hWGr1diaxkjyzWIjcjtgFYIzhgldmVpucjy\ncey2PZ+/ecnrhwFjHX64I9NxvQYen45cLxOX60zfO969f8dht2n9jBKgC9qUUpaxZqUGyLR+xJAE\nDi96JmvFSPqn10BcfV8zN9XGCAkokZM4xCWIJq9r61TtRuN7yp/VDKI+U3gf9obkWKUm0exUd541\nOme12iIqHJ1FCawon6JB2FZtZVl5EXUvqT8o2k1QM0ZjqqOr6TBt34k7tK1kJza2prA/7fUnHaKz\nlpgTz8eJb7975vvvLixLbAlpG5abaRlTLYg3zN6puoQK01LJHm2Ttm3aFsEYL8tdxCFmFmpPnPOO\nuxc9CVPvGQABAABJREFUX379KV9++SlvPnvJi5f3bLcbvBe4D1OkHmVuI5HSHFWFCVFh2BbF1EW/\ncYZVhuo247M6RbtFvAWanqIW6FvU9k/DN6vw6806y1RrZJ30YFQ1mkpKb6w7aq1FlfqpNUHTrqGG\n4WJE6o3c3EOpWeUte8+2hmhTalRoQCXtbBao5/DwwF/99T/n3du3fPO7/8L1cmVZROQ7xMJ1LpQE\nnZfvCnMBa+i9wXlh4s7ztdVTdru9kA2s1Fas93JgiqVzvjn1FINsetvL+xTqPDx0pGxURSZLW8R8\nwaQo0m4p4k1P7r1Meug6+r7DOU/M0kdndfpCqWzcgrD+QiBRCDEyTxdSChhnGLoNu/2B3WHP/csX\ndMaT5memD1eKMXzxyWu2/8f/C7/9zT/w7v03pGy5O9zz+d2Bbp6Jl0AXFgabcSaz34z0Y8/Ye4yx\n9JuO7W5kHEaMSVzOHZMTMfZtv2UceryLMr3dgFfhboqo1cSY5ZnEIHC37xjHHkfhNCVSVEC8KLJT\nYNxYNtsdne9uzo3RbE0C3VQKNAEJIT442yGM78popkFuxa7QvrnJMuq+VL6sfF9WXkKN+Kki3hqk\nCpX6JqDTM3aTlUANONegkWKr5Onqk41+stWzWdApPbVoswbMGEMsiARg19FvNrx6eQc5UXLSa7ac\nrhM/vv3At98n3j2emeaFnB0/vn+Pc68Yh06UvUA1ix2pBGJeyEYE5pE4VnoRgwgt5E5gczRjrSLj\nFKkrlohk2U4dkTrOomc5l0iMEzHM+myU36D2LpfSFGlygZyyDO7VMomznsYSriUjQ1MUqstMYe3j\n1sxMRoLVYc+sgXltRass5OYHyioGkTUwz5VMWZ+bkzFRIETCktffVyGSUiQgkHVaRwP+lNefdIhi\nGDIf3l/49psLp1OGfAOJFktOMrXcasU3pdB07+TCKmsIrTWmf6KQAMIyDdw6Sd2SmgWJ0K9zsN97\nfv7zV3z1+Us++/SeVy9fsNtu6JzDGmFhFdUUNUg01irTRts0spVBvQVKrQUaaTrO2WrLn2LeesL+\nK8HgUgXGQViq6hSzOpmbFpRb2m8pEYxM7DbKBKNGV/XwV+dnakRG21hiQKzohOZqQFTwPEeBEFrW\nV9lucq02a4TaRAEkQGnO09T6j8Z/rddTJLKcc7Dd8+XXf8Pbtz/w4f33vH0rqjUliApN3RsFbRg3\nhq5Tdm2BkiTL8M6yGTYMfY+1ntbYnDPEiO82WN81AeTebiSe0bqi7we8dxIAFSEB5ZSZvOVqE3ER\n8eliLcWtkycEFbIis5UCaFsNWeCrUmR+ZY2wS5ZQPacotQsnjMZcDN0wsjscsEijdoqimPPpp5/y\n8sVL7sc9MfwLzucTYZ7xDlI8s6SIN0b+WMc4GvqhExJYKfS+p/MdxSTpX+sGnPeYFBg3HdtNR9dp\n66QMwMA52Zy2ZoyIkHeh0Pcj3gsZzhVpzp8XyElqettdz1dffcmrT141KN6oATDWIT34iSqjWAXu\nW16mwaEtdo3+rWlkjZpxlVxkWDdOMpsi5RcpESqBrdWJNChjnRwjWUAtXMlzpBSdP7qmNespUud9\nmz4ZdbKaCjVDamRKiL05q5LlWrxz+GGDH3b4bpAZnr1A7UsIxJg4no5sho4lBJ7OF3LJWmK6sNzf\nMfSeynTvOhkivN2MeGelL9WfKOXIdI2EUmQkVIAxauZfCqavWVPNCGsAgjJPbxOm0pxNipEQFkXC\ndNRSIykaqpReUeixdoxK4i6BjNU1NvqzKsCwZl9GzjB1aVcSX62DVkgdDepzSTR4nFqzLu3f63OT\nvvPYsLJaU21JogaGosgjJTpjdKbpjV39Ka8/6RCTRgs/fPfIux8vhElS+zWjLTJLzkjkn5QWnKMY\nbwNY34kg7hLkRnSgZskRW0cqNcapRpbFt81vAI/H2cx+P/Czz1/yxc8fePPZS169esHdYU+nEb+x\nZmWcUV2ujIcxVjK7iou3/llbMNm036FKUrUMcC3IW92MrS6hzrJGrSs0WceS/m+NHjGKEqwPXwys\nPuFcP4cVBslZDY2tZ+DjjFdNVbtmCnX48m1RvJikTrJqnGaKtdoKUzN0OQw1Cyj1cJAx3tC5kYeH\n1/zzf/k/Yb3nP/4v/5bv/vBrzuFEyBGQOXU5FayFoTM4R1Mu8d7Sd57OGjrX0XW1dUfrZtbJyCnv\ndfKDxbkO60UCLYeg59ioAl2gxEQulhgW4nyGpAQPpZCX4qVuYxK+c7gOSo4YLA7pPTUi+yOZeYri\nAIPMQuy8Zxi2xDQRkojRp7wQ04yPMiRY+gxl2omwGOH+MJJzx/4wKFxv28SE5+MTfvIc7l+IQ7DQ\nOcdmHDk8HOjHjlREFGG7veN0mgjxSN91bMYO7wzRyYSEW1TeWnluMWZiyOSU6Dc7hkFm8VmTcM7g\nfCFGgalfvrrn7/7uX/D65Zu6Q2nwFgouWIOn07Nb2hiyGsQWNfamnmHq3nZawpDfacad9cyVFsWr\nsccgUydM24vVQRcjDrkGbx+XFNSJloqm1DNR1vcV5LxXeK+U9XzAivRgVK3JYUxHP27Y7u7Y7bfs\n95LRA8zzQpgXdtuRnBMfHh/59nvVdDZGJdygkkxEfGHDy1cPlJzExubE0+N7nP0j794+UuZEDFKL\nj9ngZOso7GraWlATeG6OLpqZGUPJRWDZZWZZJhqTFNlwIqgdtAZXJ1rU7E6irdq6tRIeDd52mllm\nbocPm3YZqSUlKPGwOrhye/2NGFhtqVW94pVZCpWsuDbeF6t0WyNqSbRaoWT+svbVHK8cip/y+jMO\nMRFj4rvvjjw/TTfRXsU+iqbU9Tp0Q/pa25IictLH2EaFGIM1Mn7J6biiZnT11iszzCJ1hs1oef1m\nzxdfvuazz17z6vULDncHur4XZ2jqhAw9TEZ6C41GLrlCocZi9OeVUt6+s92W1k2MbZZG5hzKotco\n2LawzNVg7KYeIm0a4tRuN43cU64RkRb7xbaoFJxCE3UOYz382NX4ULJGte2DqT1La9RWM93K3Fon\neqBG5eZpshKCigYW0lNWoaMauXnf8ebTL9juDhhkvl4x3xEfnylWSAIhJhwCR1q9pb7TNcsG1xk6\nL+odtyww5zx9N+JdLwQsJSpZpMZmvTjblAIhBVKYSSHqaCU51NZ5nB9h0JvTg2mdaHmWOBNSkD1W\nxIAaI1JrxjmFX8WgWOsYxi3bfWaeEyFcKdaSQqTEhB+7tm+6bpSMJS9AYrsfiDGwsRuKEqdKKlwv\nZxKRbBJ+s2GJAUrGO89ut+Nwf8B3jut8JsxBNCx7j5uEkNF5j7MG7wpJN55zNNUP5w0pJa7TzLIs\nYKS23nWekDIx6X6z0PWeN28+54sv/4Zhs2edMgN1moute04Nl7TFlrZPyeq0TD27t/maRHBVtrnt\nNq3/ZPW6pcQ1k9RAzxrfvqLoZ0vmUoPUsm5ePXd1NnibRNN60tZj2PR6bwxym7hh/BpIFpkeY72j\nHwaGsWezGWRMmZPP984SFGW42+94uDtw2I2t53AcetUtlZqrs5btdscnrz5lPx6kVzAEPmx3pLhw\nOp6ZFmnST6pak52iWRmKIgGlrmlVg6m314JoowmH0SBMYG3U2YkDESJNvlGeEQDYUIk7dVzf+txq\n5lZRqHzz83LjmGjvkYxxff4FYbdWGc7atiNbRFs6SpHrxKgjvQmy9EFaYymurKOtPkIgdcFYn/tP\nef1pyBRpun4+TiwBuHGG9TuK4s9gWu2tuXSQrLBYldupIq6qVGM7TLY4Oq0TrvMMJWvwArl5y/3d\nhs8/e8Vnb17z6uULDoe9qPHrilur16KDP9tnldKIANmkdo0lS5rtrEeIAxUSkkW3yoayNVrVe7/t\nGZSNJJlNLjorTuuSLapt9cJqJFxj1smGTi06bkXmusCtFmslGkLWrtKmK4wkDjq3TVff46wUmG0l\nQcidYTTwqL677rGaV39c47XqbE37XozDuY797sDXv/grTucn/vDbHb//7a+4PD+yRJXwU+Hjzusz\nMgVnnchcWei8SIc1mS0j09m996Jrqo7U1mZkY3FdR/EZlzw+DUQ/EHuJcq3r5A6k0k/RmXRyfxLx\nhuXMkjI5ik6o6UpTFsk6aK6UTIqz3K/15HKl5IR1BmuyyErpn1rPlN4sQT2c9RQrdTPrO4z1YJ2E\nJllYzXiLGzzdcGEJMkrJGhiHDX034DupOc0+YMwVZ62uT2HsZbBvjNJfi65T56Agkwm8NUjPV5Ix\nTzkydNJbe70W0v+fuH+L1S1L7nrB3xhjzvl937rtvXPnPXdmVZZdZZerXGWM61Bd2HCARhhz4AGk\nbs456hdsIQvU/QgteOOJR1CDhIT90EIgnkC8YCQeEALBscFu2dgURflSrszK2859W2t9tznnGNEP\nETHGXDvTlRtUR8yqzNx7re8y5xgxIv4R8Y+IojnC5+6c80Nf/BL37r1J1zkA8TMoVjRvISlpTZib\n2ERTC6asTEfHitr9snCaS2LwUi3PVYNHOzBkb66E/bkNFXfPrw4id9ApLT3hHo2UXMN7Yp6gp0G8\nzZjLvRpvm+Bj+kwMKPXdoK3ZPD9mnyMGYGNMrNdrbt+64LWXn2e96kkpcnZ2wtDr6DLAxnmtuHVx\nh5P1mTarnydijDx68oBh6NiKll/M5gBpNxo3LpVJYKBkeXbrMlBb3JhB8uJ8QSeVYMD0ZkW/rp/P\nRfQ2buDgwdatvsb0Pm6M7cvwaJa0JvAuG0g1zMsWfGINSWoZhelHMeTmrPgaGZLmCQbjZRTvlxrs\nuFcj/j3yEH2y8vmtNatN4nBs+Se9PUuLe2LT4sGOwAhqtbX9WQdRyJaLad3XjQhT49GOeLzUYOZ0\ns+Hlu7d55YXneOG529y6OGNYrVRJWHJKvBTBEYkN86WdNWrhf4g6X1HUAyhF0aYmby2nFJLlFv2+\nCrUxbc1bWIMASj2gkWQ1WjPeDNzVh4uPC1Qw1aOsUqdCOzmGWui8pIT73K8is3q6wb1TN9SNASa2\nh3W3/EAFuysvuDShCe4PeKNquzRHkYAZn1UpJdP1K1546RW+EH6UzfqEQOTb3/oG7HYgI11XOFlH\nKEKehFi0gHy96uiT0A0DiMcDDNW5px8gLMpmdLX1eVNKFPOa+zSorEjW8H2M+lxYCM9eV6Yj027L\nOGZk1lrWQNS8nYX8CZBnHSOlnqCWYZRcmPNIiEKyEVba/xTzfHtiCEz5aDLV0aeEyMA863DWMh/B\ncqV9vyHQEZKWs4zHkWmaCOiwZZHANE6IaH9TDUUmum5Nksx6tWLoEocwk7qgLFKSzZjUshlSICb1\nFMfjyGis076LaiiLtmT8/Bd+mC//yFe5uH3HDGLVJs3O+PkODjZ0QkgDTaaoqja2lEMwo1I0TdAQ\nmJ7vgrYTi557CljNIzRw6D5LMCMnYHXJzlUo0tqSFdtXPzc1OFsNpdYZtlo8QxOL860RA7//jr7X\n0H7qEkVgnosqTtFyimnWfFXfddw6P+P1V19kvR4IwK3zM4bVgJTZ9JquQW9GMpfAPEdW64FhNRA7\nbRfYhgVD7oUkVoYY66ZUQ+Q53JvlMH529bm9wN49y0hBazENuFZjZvrNvDPVZdaFy7+aZmwqiQ8s\nD7wgwCyaj5hDitdh+y575MDDtJ6/9J95ntNlDAMHxGAzKsXkquA9fk3L2stDtVPPcn0CyzTQ94k3\nv+8ujx/t2O0PjKMhlRAqHV8WiV+Dd4agjA2WorWaspCeOFuyGVZtAzdXy49kAjN9iNzedLxwa8Od\nWxtOT3uGdVI6OUIoxUKh2OEyjy2ox+f1iyHEWmwc8NoWzAuAKNbuTLRrunYYiosQsR8oD3UmKw7V\nsEOwIL+iV+3vGkUVrTPlXKBcwDzi0/ItLmw2McJIB6GiZgcO+v1qy7w8paeUqXpllWEVm+BquFWq\nEglJQUztGmQtQEJU9OkCpSAnK2vQ9sbP3OnpBcPrK2LqWK3WSJnYba/YX18z7j5gSJnpGIhdYNUn\nOpuZuN6cstmcE2KntJ0gCp4IyDwT+uTHQPcn9VZP6tGFDMnkDqPGk63u1TxFa+4pOZNnb8V2pOTZ\nwuwaap/nkZCUjSlz1llr1nC7zEYSKyBF6FJPpjCNB+bxSJ4mGAYIiaE/qfItFIidlQEpqSdn89bM\nE00xEodBQ5nTxHwcgcIssxrdOevYK/Hcic50DEExc6wBG5WPYdBZeaVAHjN5jhyOR9brnpK1kDvb\ny7sUuHfvVX78J/4Yr736KYZh0BZookpGZw8aQWwZ+QEDbUpE05aBZrAEzbsFDfMrezq2sFlQr1NV\nnNbRKdvbWc+lAjjN/Xu/3abYa39M8yCDBKtttr8HTzFoyL8q68UBbPV1zetx1b74F2D9R/u1jiEC\nxknzx04KkVIq4aTrOs7OzhARhr4HEU5PNsSUmEZNP7SwpTFU3VsVU942QmkWHdE1ZyNPUe1BHQeF\nYRdgSdLXp7THd77CPB+qJzbPR1KysplSWrorhtoFSD9EYWqRxT3gHnVU/bRwTYVSu9jUgQl209V4\nY3A9Bhs87SAqqP6UQkhK8olSkJrm0UhRWVQpKEPOMovF2fLuRChb2T3PZ72+u0HsIj2JT7/5EteX\nOy6vrhn3xyosrnRVEG0lbfXca6kElRCUUWmhxGKjjVLoK1rQtzRkETlyEntO+5HzNZwNiVUfjQ7e\nhF3DlYqINTyyIMVg3exjDYYqurXDIJL10NPCkMXqAKMjG1toDTZq2NVnO+JoU4RAVxFVIDica0AB\nLYLH7kMcffs911KQgA5OFSR6GNcOjymjYIpQAyjqFbXaRUNRQeozlOLjoWINF6sB9lCrh1Sl5pAo\nGH1NarzfR1dJ0KbPsQucri+498abDP2K7dUl77/zFtvhAeN65rh7TMiF1dDp7LikrMHz87ucn1/o\n55HoYq/rUzIxB3qblhHQjkhqDHvLK/WQCsJMmQ4KzMyYujIt80SZJlI/UPLIPB3I896QuiHNroOk\nQ4m7NNhkj1CLjZ2cUXImTxOSBWKki7GSx+bjkbkfSJ1oo+0QjTWLzduM5hUGyjDQ9Z0WxZfC7I2X\nx5EyzoSu0/pBEwmnxBeZlDErmS5YHs2hSlE5z6VACXQpMGYh26zDMgvzNHHYXTGOB1LSHOOtW7f4\ng3/oJ/iBz3+JYTXYZue68UGUTQ1Ye7NiESBMcJpijJWRaKAuqHynpEahGNEqWk6umCLTqJ3xBmRh\nkFxvOOoyPaO6M1VQpgGONkYOzACUgo8BCURyGRfa2G4QUZZtsLOChQFDItp5iSEyxGTzExPjJGQ5\namlL1ihDFzT0P3TqOa+GNeVU1ICK0A9DjYiJgQ2NtuukDLGxWsV0EAZCs0ibjzgHZFDom0Rt3xz0\n70tKEbZU2Q1jNZClsaxLYZ5GAlpjLgbomyNiRqRQPcWcfRamLrDn9jDnzMPc1euuTkOo/7052Fl9\n1DYJBdurUp2K4jrJ58DSes22PYwNOAVNtLqTG4JAEpJE72r3TNd3NYgxRroOXn7xNtvve57HV1fs\nro40Wr/R02VSix6T1tSUlkLXm4stnGWeopgAiiM1g8Ce/esIrMPMRjLr3LOa98RpJOSiuSFpbrcz\niQQrPA22sQRClBuHwGSmeXV4aDGaZ2cFnmXWCc14YNOLkO1zRNCiz1g/V0XPvRYbgSpG9nBhMo/O\n567dnEih36OhHm9g2zw+Ndx9zeso0SBZ7aN9LqJawTzWOmvMtWcVWs2RVgPB4j5EyTDerzXcUFb6\ngR6eDiRS6FmvIs/ffYl7b3yGnCfOzk/ZPUrcf/fIqhfONgNzniglM/QDm5Mzzs9v0fU9SKwlBxSp\nJTzKdIs6pBdVfLG35tZGetL+mMWK7M3zLlHZCG64y6yhz1IoedLSj9UKYqe1YVF7bcbiMyAVYEhR\nZnSZj+QyM+cRJLFarVh3g7JnbTJ5NMDnw2djSiZjHdFq/Tykkyy6ErteFbuHOQPqpeaZaZoQma0z\njCLqlDpmmbUwWwyrmKOWszBOhfOznnlUOZ6nkRhhttFV06T5/ItbA1/92v+FH/+JP8HZ2YWdg2wg\nyp5dDBjZtIhQbAiwxhLJooBBMZi0Mowqm55rtGhDtNIJ64oULEcfat47EIIyoJUbNtNaCi5qZG3K\ne3CvQvxEY2fblKYEU5QVTpo+FwXjeOhQ606XJCGpgSw9XwpOdNjycR7ZjzPHUUPcmyFxsu51X6Pm\nybsu1fFDIQYbsKzEFk0ZzXiYv2UwozakMDClkzVUjLW/KaQeQheqh1jDgtLytb4cGhrN5q21MLGI\nkiW7brDHrZAfD2D6P6B1jzoLc7ZVDBRrkuHr2j4iVYDtOnCpF6k/CdbCU50ZpP1GqmEV8w+0N1g2\nD7CVh2hDEO/yE8y79F6sNVwaEqHO0/rk6xMHBMcYuX37gldfe4Gr6z2Xj3b8YvLNjkRJ5DxCyFY7\nBKU4LTZUryUGnYJR5ql6YN6FhJqI1WVJJNYETgOcMNHvrilXD5i2zzPtzimnJ0heIclo06J5ymCF\nxv5JGsZRN76VLLgwgcezu6iKxkObYnZJF9xNEjQWbKALXRMcM8CEJuAKat2NDxWxuTJogmTf6Z9h\n36OGLDaE5fnaIhaWwjw2fUfQlh9V6Hx+mttBb3+kr5b6XwnRhAqEbDVfpmii5e1iWz//x0GE68EU\nE8Nq4KWXX2NYrdldPeatb87srj/k+dt3SBG21485HPZ0ESKF09Mz7YySkpJNcoaiLNV5OtDFgRAL\nOY8qR6lbfH/LKZV5RvJMlpkis0Ud1HDWMhyLWoQYtXdkpyUdeZ6QPDHljKSOmDS3l/qOnGc11NHm\n3Fk4MMWoBexSKNNIKStKCdqBCSsCnpS91/WdFQ9HI5Mokp2nye5V84Sp03o/De8qU06KeqbzOFPn\ndwrkPJGz7mKMqsBL0QHBs6UAkqjiPB4PBCLzURiPymT9vs//ED/xR36S555/qaJ0j2a4pQ3+54Xn\nFzxGG0Jtyqy43rq4uPdmIDGYHOmcPMdSyX4dzDBZWsI/WlR2Y4hEi7j4GXKxXKgMx3I39VZ0D9Oj\nHj4Sys9raKUJznBElW3Eo1cmZ2IklDwy58BxmrXh+piJEaYYmbNFUMSPcKwAN9sIpmk8Mk0z8zxp\nXjlLBZ/1WWJXO8IUhFy0Y81sBfiIEV0AcoBF6NRtT8D5+tZ72X6odsdINZXDUapxjVaf7KVuhaIR\nDrEaTRoJz/kP/om+/G3gsKvE0vSGgJdXqR7TEHKwPdCSaN13Z88qHaCVfTRCkeu+6nKZgS20GLIB\nM8kK+p/x+sSyC4LOxLo4PePl52/x6U/fZVh12oQVbOp2h48bKmRKmPCdrkbEQpC6ObmWHhbxgnwt\nso6ivWnWQdiEmY0UuuPE+Oghh8f3Ody54OTsAhkGE6jeQntaRKuDdr1oPpkBwpCizQMUI44E62KD\n2ooggYwW6CdRIWizDJ04ZP6iVyg4gQjzUi2nIgRlI4ZQwzot9Dm3nIh7JJjHZ55CI0ZpyUGwPIsj\nPbd2rZE4tn71VyBoWYu7d35+LJTRip5LDcOGm5pJuQ32dxVCHwZrOVa1jMqeOznjxZde5ezsFh++\n/x2e3H+Oge/nYnMKEa42t9jvt+R5Yp6P9J3WZM3zsSbti2iIUvMymoeLqavPQzb5MnJH7FaQNQyV\nSvNKdLr5jMhkIZ+RGCL9sKkU/jlbbWzBvFIglzreK6QOplFDusOaIXsiPzPPRzqg9DNlmsANreWA\nQox0BEIompdEPy/FTmdvRq3ncgU49z15HGHOlGkmz7Mx+bA0BJAh29DXPBdsMAeg/9VmzyYAVmB9\nfXVgnoLWJErHpz7zGb7243+U1954k64fVNzMsImHeNUsVKSvBhMQK1+CG9EVM396H7XDketpn8CS\n1akvWnfc0L9HSiwy4iVNxEoWcc3iylTtabMCGsl1z9RBpxru5v1Vvaz6IShVp0hufTAD5JrXjEiZ\nmfNMEqGzvGMChhRIg4KkroskjdO21mqWG5NS1BhOI+N0ZJqnGrr0KRieh9Tn0rUuBmYn0eYWc4FZ\nF9f0h1CCeFRT/0kNABOohfoFNRQlZ3ywQi7FWvfZvoWWCglGJBT3toA271IPYRsMTzVQqvuyqRgH\nBC6bjS0a7NmIocld6KzbmdUx04iZ3gLQnQPNeyrRSlzw/fsxXQS1K1CLKjzb9V0N4vE4EULg4cMr\npsORIDryp+siKZl1LxmnYjvdGhYEGzcK9rO6CFBblnl8PdgNrZhZh8yGmTWRMMP05MjhwRPmO9dM\nZ9fM64GQArGPhC6ZcjejixkUsc4iKJpKduBK8Hh088i03rEDC1N5wruhEC/ybnBUQ4wJr2sUIsXz\ndDJT3CNc4Ch1+KqaUeGOYu5+so41HlW3NRQLxQZnlvkzthS3yk/RUhYTAikWNvK7lWD1VormIjqF\nguJoq9V3FTDlSAuBxBYqVwMVKroPMZIksj45J3Y9hcJ8+BzX7yWYJ/r1iufuPs/2+hGXjx6Ri4b1\nhr4nlKyEDo2VKVGhG4gkUhqInd2XAayYOmJ/guQZySPMo68ISTLESC4HENHcn4hqTVGvUfNKRXNI\nlhuRedJ+qd0KQiHRISkyJc3d9alnSjPjeCRPI9JN0MPm5NQc0KJlFyXoujDY3LjMnLWFWjSPVqYD\nEiJYI4IYVPZi7IhhRsrMNB2Vcj+bmrOw8HEcOe6PFv41JC015UPW5BLTjA7G3mWkRHKGF195jR/9\nyo/z+R/6UU43p3jTBkdf3mQeKUR6CrMaouh7HYi1gwzmZWluUSxML09Xitd8vRk6d2yslVuQbMaN\nFjZdMhHtPNTSJLH8vDFBPcRWz6S4MQ71PirrHTOKptDFQq9SBKJYqZWud+vNqjnbELBuWJGh97Km\nYGVCkT5pfbOESJiLW+UK0MD6gVqOOaXEPM8aCcA8UWk5MMF7mgpjDqwtfJr89Yt/ML3q7ysWis6l\n1JZ0y//laSJ3g4JAa+JdLM0lwSdeSHMoDDjXy3OwIvr+6iO6VzbhRBm/Pxb3CsHIN8b8sZaVMXbq\nLPl7TUc7qx27l9qrNBih3PYr0HgSmlbxge3fI4N4db0nxsjX/8u36ZJw2O3YXh3MQhvCix25TPVQ\nFYrms+0c+1IEYwgqYgskOtyRNXEhEBmYOQmZs5A5CTrnAiLjPrP/8BH75z7k7NYdyskG+jWSFBqH\nKJaPsHwdYeHBOMJ0w+mbafYaRXs5CZJDve+aR7CwZSx6CLMfSgv3OO0FJxAYomrEl3a1WWKi9WlY\nXi/GhbAk8/puBibc/Ok3JzNGttg1LOG5QN0NVV7JDhz1c7B1UeVdfVRTQA0l16iLsfdCZY2ZWYxQ\np3wEDb0Mqw237ryAHPf0xytCObA6OWN1MnB9ecpmdcL+ektE24yVTqfWlnmijBHpV3Y4tbehot6i\nypVA6FbE4UTRYp4IqaNMR8p4pIwHJGdD4ZO2cwqFXEZybmUxWqhsJRg2UiAtS1gErL6Cvt+wmiPH\n/VS9t9AHUigc9iPdMJJSoHQ66zIlHXgdikYH+rSi5EmL+aUYIWlW1qVkyqzhYimzeRfahm6cZw3p\nWnlMQTgcrpjnA10S5rkpRWuFae3jhGlWz7ffRHIO3HruZf7A1/4oX/7RH+f27Zc0V4X3jlyU6Xgu\nDd3XWOsQLYenCEllpTNF7J65s00p7TUWVhec/VcsJ61lFT4CyEls6tXQwJi1G6xeCzRj6GEDdwsx\nUO5kC7KmJI0tqR+oLeK0JMvKeXRqQPUmvINWlzYM/ZrU9cpyTomh056uyplAaxOjhveCPV/pG/Gt\nH9bMWUFc1w+shhWH7gDhaPlEFEQE7+Hp51jXobjnLzaI2zRmkOBVKQt6hOlgcUAQLRzrTQoUPMyz\nRk2WrdaKA4v6wrC4HyPJ+DeEBpJZgA1vxefP4iCKUCzcWuo+1YYCC6/XAbk6VxqNkDwtah5pOldy\ndTg8QlXdA6GWANa3PeP1XQ3i5ZMDMQZ+8d//NicnHTFmLi+vlb2WhTxrjDlFb8gsJnCNsaSHKeIJ\n6yKzhjOD1lZRQxE66vYM4SLAeQickugtNDbNgd3DLdv33+Hs4harzZpupZRmCR0SjQVXvR1DoJ6H\nw/fA0EdQJeMB/Bsoh0QsXqaRa1uzQrY8SLSQlOYRqLFtq4MRDy3a7ogZjyoHbuK8rAJDSWrAKsIN\niojcuAVp4Q1XDhFnw+qhNr+z5UgCiBlwFVJLQFevvViOxxPzuRrC6t1WRG9xYq9bsvUKjuKD1Tpm\no6DfuUvYvUxXdsRhzfpkpd1p0prx9p7V6Ym+xyaRSM4VXNTmA/NM6Cz/GY2ab3mUsFoTyoD0HWFc\nQbmkHI+Mxy3TdGDcXzOPI9GbhhdTlLmQ54lStFY0hkhHp/vsbN2sFL9YoAsqh7GAzMJhf2QeZ8os\nVvwf6JMO3JVknl7qvJyPWFQ+QHOQMfSAhuMkZ8p8RIrOhyzzrDnRojW7Gt6aFdmXzDhOUAp9DBxD\n3Q7zfIUpZ+ZZOI5wetJzfuuCi1sXfOWrf5Tf/5Wf4MUXX9Em+CYpqlRsPRe5bpctwZRhoMlM1cS2\nVql5Y8GIXkr8CbVutt4o0cmGUM2wyxr1e9zbCJ6CqrHBhZEUDZ01y2AYzz0G8/iWbccIop6zUGXW\n9cCN4bL2/pR6upTou6QdZwgkEWOhWmu2FHUkkijRTiTWnrDDam2KPVNK5jgc6JLmRucyVwOoBi4o\nsDf9laURa2bj7+mZtbIbWmVm1ftCBeT+yGJ7ZQeLUnTwbxIfyKDrWyRXQ+fMWyGTGWtKw9exgqOq\nN9uZbSTHYrrQvt9fE0TPAWKsfNsPsTNugF7yRG2+4NpUNLSO5RsVKGlUST1GqShR1VauS/Es13c1\niONRv+S/fv0BQ98Ru8zxuGeaSg1VlJytsFNRDoBk2+WlebY4vbvFYh0MfGMDhQ0zp2HmIgjnoWPA\ni4ChhMB4EK4/eMTZ7Q/YnN2iW6+JnbH16GlFtrYZIdTaJwRtvB1LRcLeUT+YwUr2DDmWtqG4l9QS\n8JFIiZrA9RxpNTIlaHQOo/YYm86XQiOTXuOlxi+Frnq1LZyqqCh6XkVSRfN2IpCQLS/v8fSW3xHP\ncUqy8K2XYARjVUbq/EVXBEFrJrXszHtLitUBJgM1Fjatf27lGiLBCD/KpFyfniN3nqebnpD6jtRp\nndtmdYqQ2e23IFk99pIhDZq3w1iaoTDNOxJDDXUKKPlmPmhB4zwh08i8u+R4eZ/D9SXT8ZrjYctx\ne0XJwnB6zmp9RohihjBX5RpiINFrHrJMWhoiCcmaz0gxaNRg1kOn+cORlNYUJnbbifWwYr0ZiL12\n0ine5EAKMXYQe+iUhU3sUP+kR8aDPtfxYP1/g/VQ1bFTJev35ZLJUsilME6znpnQmHoqf6itycI8\n6V6cX5zx2uuf4od++Ef4A1/9Y9y9+6K1+zPgVW6CHTfb6oGATyj3861dYUo1Y2IA6SNpEtH8svZH\n8HsN2vUHPfehqAyHBVjE84/mQYbQvJJAQbKxGJN5DGIArB4uVPkarNJjq+cs1k45VAJeEddR5o8F\nJwMaiQMFlalT7y5ZS8qStWWeHmXPvek9htBGVoWgJRm5C0xdWESM3IyBWETLGx1U/SVCCYGp6GzE\nkgOlWH10qBpOQ+V263UN6no4TdD1sf4752I6ONc99Rwo4q6BxYCiPmMIS52eK9BpjoSvtyMqc5DM\n08M0p1/Ovg9BOSoSqC3Y6vQhVUnVjqgR1r0KxoAXcaAZLFxvo6KqEZa61s9yfcK0C2UCHXaZo02D\nGMeRkj1kGoyNN6nBi94HsO5MNUaOAYO2eKHkI0EmNURAz8xJmNmEmdPQsWEgoiQXi0VQSmB8ktm/\n9wG78wvSuietV8TVQNf3iPjkA1OexRhMFo4RwRhHTTghap7RhsuVEC23GawIVDM/ml9I1LZFASCa\n3VKUqqUUER2MGqqhLEav1o0yrw9lvzqFuHq1uEH0xLR1w/E5Y0GRbTTD6SHh1kCgYmFdZwv3VnS8\ncIQDzjA1gQ2e6I5oY99kIVFtU6fIMVmol6oInBqvH60lNkghhcDm9svIk8zQq7c69GvCIJqDlszx\ncNQ1M9BTiQK4kghEMtpXMqgSn456gKeRMh0o44Hj7gn7yw/ZX11y3O847K6Zx4nV5pwQBuZxput9\nQgaqVbKNFIs9UsYKYEREyx+SKvkySfUYYjfQr9asNies+oFpu2d3dU3fJwI2MqfrDc0LIWsYLsRE\n6gcH6ZSA/j1nQmeeqysEy6/MkxIy5jlbR5SRadwrmJuhzHrGypIHZR7S2emGNz/zGX7/V77GD37h\nR3nuuRdIMakqNo9NzJh5DbHn9t3AhuDlDanKhwJEY29bWYR7lzXAb39OtcMQ4G0ExcL8JpMe6HJA\nWW0jOlGkeiD6JXrWvOyghvQXhm3JKJcZQmcJAQfnmqvS6J16MGLnzUGq1zXTe5TJzo5aXISJWmeH\n6xU1MHmetPGCf1sFC8qZKMWL0c3zFtCwYzEjXFUnIlpTWGZz8EzHK8HU2qg3h4jFaqmx9DcUWztV\n6pQ8k+dMTgtdvdT5PjrJnt3nIdaWfe74PGVnVE8YkLeuPyJuyJon7kAjlNZJStWX9bs2FmuMHWDl\nVNL4Kq1ftO89Cj6Dl6Ap2HN2d2sp+snXJxjEJoyCuaM3ulaocYve6suSu95TUj2UUFk+MSZiSigJ\nVYBMZGZgZhNGzsPMWQis6Uio4sqeWEWPVp4S2/uX9CdvEVcr0npDN6zouxUlJgI9sevs3GRtAZqs\nCXaIynLzIn1JlkSe8FBkKFpCgBm+nBv8qkjcBQBvh1a0aBsrb6AD83paYWl9h3lydrjxcK0ZJVmG\nIzw8VdqXFl9PRV9ej6mEH/PoXPZDQAemWrsuIJD0XlNDY9EYuFhIUeXVQh21dRpNqEGJLcEp0y2M\ne6NNUoh0q3Pm1R1CuaaLkAYIQcNNZ+d3SN2Oq+2OWXR8VMmZKR8Jkw0QToMe0KieRZlHXdNJmXpl\nnpnHiXF/zXG7Z7+95nB1zW5/RRo2nGw29MOKPGtUIsVB86Vl0pCexeRSWpG6U7rVyrg9hTgdialH\n0pGUA1zpHqeU6EJHnwbGdODJ5UMKk3pPQ0e3PoFO6ILui3cf0XrFjtSvlPXa6QwnzXNquz8Jmoef\n5yNTHrXON+tUhCIaik59T5FcQ6UZrVXzFM352Qlf+pEv8z//X/8Un/nsD3Lr9vOk5CUMsaq/CqJE\nzLBpkDQED7mDWfZa/lDLSvQDqGPLXA6Dy2zXQq2eczOAGOz7GlZOrizsrEeaV2Ov8/whWE1ihZx4\nOE6NsI880/OxNPBYjtKJYNFSPGIlJHg7uuA+VjM1wZfDdB5mjBCb7lK8+H3hsVbrrpEdnQ9oDoF5\npwqCpJ7F+rw4KGw9TfMslEztJlMItfKipv+kRaSLaMBTaRALD3HO2kM1K8u52MQUr1MsMmuDe9sD\nb4G42HbDJx5O1+cKWC0gCx3EwmNGk0oOBkL1Zt3PzDinWEFEA+o6ZMA65yzylh7Jiwu9I66/ojU3\nWRj8T7q+q0FcfkEM0RKVzROJMTJ7PsceJbpw4wvs+URok+kzhJlYJgZGNkychMJ5gPPQ04euCmUM\nkSxCFmVwCYFxB9v3HjGcvcdwcspqdULfrYhdRwpdzTHFqF5Wyw0Ed7rAPrsUsc4LjlI1CV/IVXgV\nPxrTMizqp8A8wInGQs2WDW0x7torEA0Niziw0PCkmIS1BuK26L6OXpy88CJZvic00fCAjIdddbKG\nKYWqUcTQbeun6uuUoucdDemhk67dQ/J78BBTG2rcFKIrAETbvcXTO8zXRwIj3WqgT1oXtjoRNmfn\nSHzEk0cfaA/R0aa8R52GkplN1CPMs7Wn0xxYyZnpeGA+Thx21+y3l1w/ecLuekuJhYuTDd1qUMJJ\nza8GYhoqichlI6aO1a3nWF3cpYx75uOukjsk9KTxQA46FzFKUhJMVur6JJkn20vtfQrEbtAuPP1g\ngq/RlSxC1yeCWHuzPFOmkZyPunNipJg8W3QiYUFsJGgYeVgNDF3iZJVYD8JRhKttZsrQDZGLsxO+\n+IXP88f+5J/mB774Y6yGtaJ8ItWkGBCrQMqYtsGiD60Zsxk4U4zaOWnhbRmzNC6BontSBAKdfUw2\nGrzKbRQjeRkrMFYvRYu+Xe6Dy6F75/YVrfxOZbxegWpU/Qcezr2p0O0chVRTFZKzyazLsrGSK9HD\nI0/OUJV25moUxtNGfk9SSw6Cf0/N1dkNh2DlGihAMyOqJ0yYRZsgTLPolJJy0yfx07iwpf4rPDqX\nJbcolQhznlXOukmNmkWJrGiu7q8sjKHXKjuOl6It/VqrEgMzGs+tMqT6ZWH4Q7s7jOznXqTvje67\nnhsFD40/IRJqC8dSMkksYhDiDe+yNj6BCpie5Xomg1hyVvUfAiF7eAW0F+SkHpY3vmaBdBRaak5R\nQiWpCDNRJvqQWXPkPIycBWFNTx/6amz8kPi2FxFyELJEjleF7Tsf0J+cMqw3dKsV3TAYEhy0xZfl\noYIkfPK7x569k7sLqocptZ3UXIVCF7kZVa+F0fCaIhCv3VMFU4NADZnWJ7DvsTCke/4EFge2hTU1\n9BNoQ8+oQl3RuL1eSgu2OmXaUbdiemOxhlaI72jdpdzZfHpPVpNUD66vk4WpxFFnaIg6aH0nvvu2\n1qFfMa0uKLsPQAr9umM1bIh9AiKH/czl44f4jLU8zZSkZKZcJlvXgowHXHM7W24eD+Qpc9hfs7++\n5vrqmsNh5OzObTYn5/RdZ2SVSRV0CcSuJ3VBi/lzRmQmJe2dmqcjZVJGaMmBQK8F/BIZRyVBdHEA\niRz2e2Zrwj3NM9v9Hnis95tnzi/uQNdRoq47sdem4KYkypwp80wIHUUOzNNMMcKallSIPW4gSKDv\nBk5PbiG3J07WR/bjkQeXBw6TsOnXvPzCbT712mt85Wv/M5/7wR9hszmzCeKqWDRc6SxQ966WHpDU\n4vvlpAOVQQ0Ji4X3tb7Vcm0ihLjIOYewCMWq4iNSiV6uG7QXMPa+ltfVBgjRgCk3wqKeWxTc0/LQ\nvX1u0JmsCBa6NR1WTQULrxZ9BmleiQuvWGlJsVyXLoOvlxtjaCFXl/dIPfRYCsVyz37mcA/Teivn\nIjUS4FFU/4gCmkc0L1HsrEsW77PRlpSFxjTM2grW6+PryKk8k3LW8Hz2XBtmmRuAjgZYUmhELOWC\nNMO3sO1VV0gNawe8z6j9YgGY7FtdH4nnsY3rYA+WaPz6GFo5hoeeY3B5LTUdYG4itX/2M17PYBCl\n3oA+oCtnRaxEiwUDrajXtwZl9IkWN8s0Q56IMlrOcGTNgYuQOQs9HQlpoqa0fCwkZLHmYtZ/mmD3\nYEe3eYdhc0a/PqUf1oSk+RpSxOaA4obZGj9Wz689m5If7HzgqF4Ldk2oonpK3hwcn6xRu9nYE8dI\nIlpHCRtUuwhDutsfgif1qylt622/1zV1NOts2ag1hrXmJhBElXktbK5oX4UsWtOCFoYKRqyBBZG7\nKjGfvuFolaCK0n8fF3tsMAGMkViBUN1BVZbd5g7TPLK7fkDIB5JEelYavpZZySpTIEft9ZktBpjw\ng6fTMqKVf+Q8kaeJcTwyHQ/st1c8efSQ6+2W01t3ufPiy5ycnqm3aeOP8jgiUUh5hYRALhPTNLXN\nu35E2D2pinY6aoeR/XHHhx+8y9Wjx4gkukEV+GxF18riTeRSOMwjT548pota97o+OaXvtGCfTr1E\nL7rXPpUFDWObxztrzlCKKsyStRSDGOm6ntPNGZthxeGw4613vkMuiU+9/iJvvHaPl5+/w0uvvcFn\nf/grnJ/fXSh5qV5HtHIaNwTRCqglONks4Q29tdOMES+ahFtU4mb0xz2uaOrLO55km2gRQiIau9Pr\ngAPR+nh6EXUzotFIXdpgX+XUz5EVtdDaHjbA2VoKWicsSxl0oR4lfP6lRoE0lEvsqldTDPB6MwAv\nOXKtHyVQliBYGld2mVKpx5f2w7qW9kI3inUtF8bNT5bmH0MdBZXi4jUf6xma4ZT2vEuDqNNXZuvd\na6Ph6usXRj9Eq5FNNRKlYCjg7eCa80LVbQqKooEFfS5v+6czC91gVXqW/d/lbME+Dh6yt041wXKn\nJdN8diMChgZOSsgV8PDUnny36xMMors3gndIKWVqv65x3WCGQQXHc04QKPNs7XgyMh9JZbQwqXqG\np8BJGBisFdokGiRKtCJed7wFjHGqzzkdArv3H7M6eYv1ZmPjU6KSPmLQQnvz4jTHo6N51IIJzkr1\nmpVghzpFsTod6zmaS6v3E2rIDlECzdKYUcKiW0esqLepFO/W4KGXZviSeY36W2uAjHbVCJbjaUZS\nPbgUu8aWCzQjJipMHqYyzGUUZzX4GEGmqTpHir7vYREhb3R7w2qL8LhrJKnhZD+BmgAXQtfRnd3l\nkDNPrh5w2G85seLwq8ePmGftXTnHRBc7psnq8WzPs+WDY0EL7+eZeTxy3G/ZX1/y6OFDLi+vOH3+\nRV544w3OTk/o0ALd4pGsPnB19Zjt4ydcPr5EpHBydsbJrQumszPyqRCSIfpcGA9HttdXPHx8n0eP\nHrC/3lJKYepX9H2noacymzxmRHQQ7DRPPH78iH7oFYStzohBiUEhJvKcrdNIoMwTeZzUWxQlZpWc\n9XOtjVux/PSQeuJGSVrjeOT09IwvvvQpPvXGp7hzfovh5JQ3Pv9j3H35dR2RVVxpVbVTvT6x/cLV\nitW+lkW4r73OZdRkKqgUeGjRdeiN4FmQGzLvXo+TcTQPpHKjPIO+KVARK8XJOKGulVFgpTF6l9EY\n0x7ZiLW2F40qOMvb9Vmglg2podDyr1CUM1CYvSkVOnosWo1by8+78asfafnzG9ZooUIrkC9izdpz\nBaDZIjelKIv4hmVDmaZZlEtRSlC2aUclrgc7tcT21lIxqaa4lo0L9Eza6C07r8Vm2vpZ9XNb3PUj\nLNYQNWRSqkws1wJR0OoDFNx5UL/EQIBNy9HPt8YOXn9CI+9oildBme22gjX7LNdn2s5S974Uz0+6\nHpQbt/5J1ycYRF2cQtbyNBP++tucqeE8o1ETSvV8ECFPo9XHFaTs6GXPSdhxO+w5ZWYTumoM57oo\ndqzEt6O6O4rcRNDWnYFpW9i++x7D6YY4DIS+I/SJIV2gfSM16B5ruNDQWdFTXHskCjX+HWIkZksA\nA3OZ6aRrh7ei6gWVOKpy8TBUkWJeVaIYFVi9JVcU2uGmrh2FsghTBsGUmZhDW+GtAhE05KQ0+sUY\nlhrW8VyjfW+wcJMZtBg6zR8FsVBFttdmAzY+VQC1JnZvrYMHVdm6JmjhIDOs3hdVt47UrdnceYWp\nP+Hqw9/lyQfvUaaR3fFADhCjMEtmnA6IZHLf0SUNm8YpEkqgTDMULUk4HvdcXz7hyYP3eXJ9ya0X\n7/HKm9/Hxa0LYskalbAcHCmSukAKK/YfHHjw8AGBwGF/5HCYOdmNHE8PpEFLYKZxZL/dcnV1yeXV\nY3bXW/bXe8Z8IKaOzekZadAQZEoaqtc5iB390HGc9jx8+CFd35OiFnXHORATzFkLo3PWBgHzJLXP\npba1G62Z+MSUrYNOiAx9YtWviURW/YaXX7rH+a3bDKsVISSev/cmL977foZ+bcotGvABb70QTBZK\nkEXtKXiZQbBzG0LUrka1lIm6x6VORxCc2q+M0Lkaj6rsMD/Htbd9oaZgor6/CISEyGTYyyrsokUE\nxPWBsqulM2KOWGbfnYCgpVPihftPNa3wK9R7WZpw769ssh4X8m5Mdx9RpWFim+XohBwaWGxJvsXX\nS2nAVTDD6OfEmarF9EIDtQUYxZp8Zy3OT/kpL7A5de3SkRqmPZcsW72p1iS7MTer97po1N662FiU\nsAJ2AzPLz16CgYDlDfX7o03/cOPL4t+1LZ8Bd7Fwp+o6LRlrE00cROnfonucOHAyR6OYgZf2Tc9y\nfWLI1GO1gkAs7aMD0AWtzxIh50mzVlHnzFUByRNZMp0UhrznRK65zZ47YeI0qBcnBEa52bCsiBJY\nFL+VOhBW/Uel/0dAcuT4eOL6O+/SrU9Jmw3deqU9LlMi+XQNP9fiT2UhooXn490zap1NKWSZQZIq\npdhCm40iHiDkZgycKRc8fKJjYhYQexFmNaPvJAfPVUYMaBQr4dAepjowt427EdSANMwa7MCaV+YH\nv+Y1rGIx+qzBRVh0ITTB88EWe/UZhHUNjUzhElIVnXuyjvxBvV7LxwQioevpbj3P6vSM4+GK6biH\n6yfsPnwL4QgpIB2a3J+OiLGCo2jXlLw/kKeZec5cXj7g0f332B633Hn5Hq9/9rPcunOLKDapHijj\nrE3lzfMY1j0vvvEa5y+8oHlX0ZzdeJx49OiBPpEI4zix32/ZHfbayD4NdOtCiL3KTlRvzoHL0K3o\nVh1d3zOsVqzWA+N+x9XjK7rQsTo7BSk2bPiIlvBALoXjdORw2HE8HjnmI2OZkCLmnegepS6x3qzZ\nDBtS7Dg/71AWsIaUTu++zMuf+gHWJydNnut5jVYHXG6cgxRSzdF5u69gJ6EU986g9rp9yttQEfFc\njxpVj+jUounKGKT1lwwNSAW/ASd6uewsct2ucKKfu9hynJXQ48DPCdhgpI9YQ3j+3Bqx0u5WyjJF\nQ/d5rmVM0dIbeqWm+O3ctyYfDozNEwmyeJ/bB6mg4AazV9QoarcaIy4VnaKxtOEFK7+QJV2HShB8\nKiJag18i2ld1lkn1mOmMYo21keZgtBIW08J1/cNiz93wiQGtaOPszKBZD0HxjlIR5Y34c9g9uB6V\n4l6o6jU1li3sWj/Hn888dAQDa7bXXmohytJWrnTRs00L2z7L9YkG0ZOrrvyrR2SCX9mHNt5FtFuS\nbbiAjIR8pJeJE9lxzhW3wsRFTKxtWvmxyO/53YpulZlWzNcqCNmSqZFAnnr2H+7oTt+mP9nQr1bE\nbtDOEjGZe6KhUSeieBGwHtBgyCc3Y+bPDcYCEzpDjF6o3PKpeug0x2ahTYW61RtrBsdRtSmEEOr3\nmSoy+2TNyi38UJlsJuwRN8i6UhULRu8tKBUBe4hVv9072tvBNmPtuQ6vQYreVYRQn3PZfKF9bmu/\n5Y9X/+vQPdipjdYyKwopbTgZNmo0u/cZH79PQuv4YqcKfB6zdQQBiYlCZJbCcRy5fvyIBx++S0mF\n1z/3JV5+41Ocnp7RpeZhhxC0yw1BBwoLyDSyOhkYTtfKNo09eZo5HkeuHzxif3XNfnfNfn/gcNyr\np993pCGyGnSeZS7KAi2h0EX1Yrsu0Q8npH5F1w0Mfc8wrBgPBy6vrzlf9ayS7UFGx6F1HWUaOY5H\n9vtrxunIPE8V+BUDZiFBih1DWtH3q6pw56zh6Yu7L/H6536E23dftf1v+SjPHxVfFArFUgTuEXou\n0dT6zSgQTeE42xSpNBIDTCZ/VS4tL4/n6axsp+aWFmfclLB6VhYuNQvnpR8hujGM9Z6UQZ7rWaGe\np3auPbWRa9NpN7yee3QvUHPWmuEwBW6AMjrL0j7bjW1NCgQn6iX73FLX5wZ0qAZUrGzEw9hSdaWy\nSsWzLPZWbQIwlaA5ZzPgXiKRRXcyPZW8lIDVe7oLGdyJqoYyz7nm9JZ7C56zK3a+W7TOn0eN1jK/\nrF8aDIBXsBB9GIFUIAJSI0f+pKU2CXAnzMKeizI0qQLZgI6XfQQHRqa3l2z4myvz3a9nK7uwG9It\nbR0fdLKDGjVte4U2S2YyGRA6RoZy5Ex2nLHlPEycx8hpTHRBc0STyWlbxrZUXtrbcoiFYsi26d7A\nfIjs3nnIsHmLfr0hDStSP0CK9DForqwWv8aKShfeNs5w0k1Y5ErtZrzgd3mXkYBEbS3mQMWkBUDX\nZ5F41rWMBDo8Hh7qZxo7rj5VbIc7dNWI6ZvUgAfvaYrXFdIMrI1tEjNMbeiq5TwW3+P5m2ADges0\nAQ95Ws6wlnmE5hmEWktlBtlqjCpSdoNYPWVdOS1PNe8xeCGu/SxB6G1GXFJvXbLODpzyke3+MeuL\nc158/VPcfekeq5UzjNHwJN4RJoBkYlojxdYvBuuyAqnrNG8YMmcXpwwh0Ef1yLohMonmCHPJSJ8Y\np5EwQRgSXdL7S6mn6wa61NN1NsEiBFarDcMwMB0O7C6vCCJ0wwpCUqM6C8fDgcNhxyxFu9NIMYq8\n7pcqCpAZ5nFm7kY7e4E0rHj+3vfx+me/xMWdF6sxrCCpmOJAHUmnr3v+0CNT1ZqJA173JlwqjQPg\nubn6FpNrYxoKiWVbt+xtD2vNYVmUbrkcR6850L1zAytO+RcDqnZv5l14n9VAoA4NBrroxLxm2Fwx\n+sny81asbWSoxFArHRNv2NCIZ4rvHEgvvVe9L3FjbCRDO6K6rG7wfG+r4tLv95ZpxaZQFKm3avsA\ns2jItGSY84KJHiya1l5evX5CPe4svST1EidymYnFHJnSGK7NxmkT/CXpp9Er7dmXXrwJhnbB8igA\nFXTpWrUwPVB1l+cDSym1AF8Zz3r220159EGNq0Y2StVXEZdv5bQE64bzrNczkGqqe6hfFxcLYgvp\nfUmLTORyNOWnGGgl+2oMz8LIeQychMgQnTXm5sIj+ZbjckVpv3MMWMMHNNATCYgkpi3s3nlAt/kO\nabWmG1bEXmnzKQToA5DMkOiGq4lUtlnw0gOBmKK1+KK2mXMBqwDBZi0F+1kunqNRQ+gCL4uBydG7\nw0vL8cWa+A9GRlgIgIWrY91UM3aW/wyuaGLzBJyjpWdc6ve5igtQlaJ3g681ojaAVZxwZMgrxKC5\nhRoKDobU3Cs21RCT7RatcH/5fDjwgGb6C7PMxJLViNlQ0DgMxJDoUjL5E1I/Mu52nJzf4s4rr7I5\nPSNIIc8jMNR7d6c8pGSHTHVvTD0pdXTrU3RIb8c8jtpEeOiQkzUnXaSbNmwsl1eKWPs00daF45HQ\n6VQR7/2YQiLa7DXtwiaE2DGsV0SBcbcnSGZ9dq6NIgSmKTOOB+Y8MU9H/ey5TS/X86FdQobNCZNM\nyDHTrU44v/sSL3/qs7zyxg9ycnZh53EZUDPlY+vvrM4mF2rqgrc2XBz3FgUyz6qCIjVEathw9NUI\nOrbIqmCF4P2C0ZFPXs8mRU9yM6xLabBbsdBkCtY8X2CZ83NSh1iKw2U1LdrDqdx7swlpS+Og0eWT\noAN9c1mwwO09NfXgz+4h2tJkWqQ2GlgsIr7MCibNMxYr3TIwXLKXCoQbQNovN+VZhFyUYIMvt3/d\nU2+omFzL8hqnoz6/hpw1XKsdXjyS4MQfDDzr93veVKqBB4yZPzcz4UJkz+w5vACEGI2170Ba9YzP\nd5T6pE3nY/LbmkRYXWLV39Q9UTukcqU1vKU6Ai2S98nXM5BqRCnZogehOMunKjOqgtYplpmAddJH\nuCV7ztmyCUdOYmQd1DPUJlKuvtVMxXqIpRkelG0aXGBoitVWBJcCyR2HR0fSd75DWm9IqxVpGDRi\nEzVRHrsFhdo+M3gIJcRal5hiYmaum1Fzl4TGvPTiUyOPaMhokWurILKFsNRIRGrRqP0ihqRxfjMy\nxV5fh5Wi3ngzRPZHN4528D3nqy8ruI+tCskOiaG/GiI2qy4SazoAU16mPa3Uw8tHohl9Q8LJd47q\nnVZvVqxOLDY6uxWl0QJPKtAlzMS0Niq4TghIBPphTep0jcpqZj6M9MOak5NTxuNRvaU5kvpA3wdi\nyjZzMIEdeKIQYm8je3r6bqW1q6sTpBRWw5r5bLZQ0sQ0HillZp70z3OeGaeJ3f6acR6RbF5jnus0\nb4oOM84ywRTY7zKrQ8/p+pzYdUzTRJcnLdkVYSpHxqxh0nE8Ms2jzjh0LRI1ZD6sT/nsl/8Ap2dn\n5JxZbc64declzi+eq4QesT3U1IrXgpqSqWEzMcCC5aGz5cJaqYMEJ6tI3R9NAjytVFTm/ExGy79n\nKYbgc9UP0V6jIEvD8V43K/qYCpHM4EWTTw9vRivHitHOlmt9qDLqCrLQwITfcf4I9d5Ap9ck17yZ\n6gAFhtTUiE/hwD1itC1kMGMsdO2sP2V8QrBIiFkoZ3KqR9gAqnvGKcQbtxrQ29RG3zo0WHPfzcC7\nNvM3aLDOwt+iw6WlNhxY6Eubj+gNJTzF0VrLZbvnFj7FAIH48/gm2/o58cbXysFxLe6vBl0BvUbJ\nXc4sOqHdSnDmrgcRfOcQz0w3cB+tt2oRjyWoW1BujKf65OsZSDXY4iiRoMUEdfWDqNJGJmAmyEQn\nWfNBZJ4PR07CbBMDoubhcIFV+nEKUQWh0mvtwRa7rH6M0fDtkPo4I0eHIOSp4/BgTzp9l35zQlqv\n2fRRu9ikDjod7eI0cyU+ex2OdpiPEULQsS5hCbrNg9K5i4DdP8Ho3+JhTgsKJa8jckQTWn5GzEM2\n5FMitfxDFZehLA/RKGyt7/VcnpJtNL9aDxaWoxAl4kTPsZi20ee2WWg4hT1YdMKEMHh+pjMloZ/t\nCq2Gye252r9loTicJajIDajRBF9YpWA7w02siLcjdQNd6jSH02kIM8VE6NecXEw6UWPdk/oJKYHD\n9RU5b+nXG/rNiqEfiEn3ou86QhpIsYfU0XWD5vrSmm440zrJtELmSZHzNDIdtrWAeZqOHMaRcH1J\njIGpzMzjzGR5mHE8qtIKwpwngmiT7jlPbLeXpOcTpydnTLstUCzfrlGJaToyTRM5F2v+HYy93Zic\n65MzXn3jczz/0r2K0o1nbDKh7MtcgoLX0sKh3uQ9kiimXX3XioO40GrD3IgqcEvUEiE/9sEYnl5M\nbZ5ACfr+BZ0E72MiQTTstQC2Dt58qkKgFdS30o5mGoIZR3AwhipNry2ur4s1IoPlxpQ4cjNk6PXE\n3pFGRElzSvyJN3RPs3UWBjQiiZaHacpIRdwWyc9TBadh8Y8bFecgePkDNaxav6/eQaj6TtmmQtci\n0Wam2iXColzGdWfLvzpPwlG75gIX3XMIVfaCQHIP98Z+qJGLsvxm3deyXF/jXejnWWmeSp8+n9W7\numGNRrIUsq1FMG+98Tt0EPwyaebEWFHVGETFrRrW76FBxNfIDULdbHN9BSSPiMyEMpOYGEomyUwf\nhIswsvLwjH2YJ0jdo/Dwtj9irnUki1h8vQ0l1MwIfVjUV+FINDLvCof3HrM9eZduc0rse1Lfk+Kg\nxrOHkFQ41bvLddFc+NQzTVh7cYuvixkoDE2lmqMxkhw1lhHq07I4XfXzXbZaxxrP9/jvHE1ZHtGQ\nqysAz3UI3Kj50m1qOd8bCI2lonGPzokyfpjbutfFdwMb1MAFG2qrn2AhUTwUJJZ7kQqWvRdhM5mW\nS4q6z5p36yjlSM6TMktDD0GL0ftOJw2EoKOYTk7PKEWIXccwQJlmxusr3vnW7/DggwekYc3zL7zA\n+Z1bnJxeMAxrumGgTytihGENuYc5TaymSLc+MSMdFCBFSF1B5gmmQhkDciwwQqQj5oDMmTzqzMLp\nqDMVPedXKfUx0g0rNhdnnKzPeLK/1udNkcnaaSEaji1ASMqcLkHAJ8qEwMnpBav1SfVWmoejykQJ\nWFY2Iw4bHRe3Na+eQQ2J+95KlS8v01DCidjvi8loqrIQ3AtdGiNTqLWWMfqMP5s16XCexVmTxnxt\n0RX3HdVrqEatZDOM+oZlU3K/NKdvtaT2zCEGUmmqzssn9PtFBw4QUa1iXtsyxGpnWI+l3Xvws9nh\nBI5lAxNf+uU58B961xpwI2g9j6sBsfc2hwqR0HKIHsWx+5OgVWSLr217IVJbt7miUuzppBQnuDSd\nhOkTZEksWqqxstijxReb3qtrV5//6VCo/dKsYLDXaeTAUkyi4Mff0ngSwTBFS31F8zYB7cts4L0U\nzUzWhOszXM/Wuo2iSKgKhi2FBLMUmSiFyMyKA2eMpFBIwHnUg5RpufOWH40L5pmTZly5x3poF3tv\n/9Uo8iyWFnRT67mIkjg+yaR3PqDbnNJt1gyrDXO3UrJGzIQw2Ebbc5VMcSMowTwrJZEEa72UcybZ\nJIdi4adgfTm1fk8FupTZwIP9LrSH8IS85lmCoXdH+573aGvsg31jtVGK1hxJ+qGOC8MbrI4oplSF\n1PN2Ehb5KdraeQ4kJh8qKqZ0gpZ62J9j8o41mKA2YVR6unkTxs6TomSMEKJ1uNDEhrbUs7BJ7DTH\nMOfaAF6HijajQAikFBn6E/purcNVrYwh9Gsu7j7P8PY7vPWt3+Lttz7g1Xuv8dqrr3L74g7nt+5w\ndnGH1ckJfegZuj39ekNMMAzXdEMHQb3m2HeErmfa7TjudkzjkWmaOY4j0zwyzhP7w47d7prjfsc4\na1h1f7jk+vqK42EmBeH23Vu8+uabvPDK89y6cxumQt8NbE4vSKuOsi+k1NOvNqT9oXqG7jWF6Epa\n2JzdYhg2Nj2C2mhbOy+Z0cmG9B2oItVTbDnbJQW9EeLcQ3D9dsMgFZOxmmYoTaliofogiwiGpx88\nfOYkFHuvYKQmH71mOs/Ph31vpQaFBvQUUvv8z0AdRdWwlr24qOfhocKFwvRjEiVpA+sY63tDCXbO\nvH8shOSy7odQqDEq8+o03Cv12Vu+X3/ijFA3DDF6Td5i8o7QQKavCQ6fdT1mgVms947b6/ZY9n3U\nvfFoD0Go46Xs85VQo12XfX3rGfetDFJLSW6A+tA+KiyNVn0BeMhbqj7X90mtQ1S58z87QStXa246\ncDEpyPvJ6vM1sowD87bPtobO8fhIuP/3vp6xubehX/IiHWZBm2hIlYkhjJyx53YY6dBMxmBenOdF\nPR/obrH+adGyLVBdaA266MIWdHRMsUMvBEowr1KcyuwHKiA5cXhwIG3eZnVyxrDaEFc9cehIyfKS\nMS6EGjV0BDpxdqcurBRV4JI9WW+KBGXuKdfEEDBCCj0syEc3C2Pd4MUWavFaKBwANHZmxfeSrS6z\nU+ah7riCieJGw77NBVia8QX1dcNinTGvyGey1d6TVkajwqXs1kpjloUHGuzQ+uEw8ONI+Wkg46H3\n6o0aCgyxI6U1syQlY8RE3w32ddrqrIsDqR/Uw1qt6URnG07TSCiBs4vbfPoHPs/14yfsD7/ELgjd\n7edZnZzq828CY95x3Gb6YUM/7ulC4hh3StqhUMZRlUiM5LkwZaEkGMvI4XjksLvmsN+y3+84Hg/k\neeKw27M9XPPeg3f4zW+9x/W+8H2vPMcffO2rvHLvFe688Bxdl9jtn7A5v+D04jZFNB8Zk3auwWSJ\nECAXQtShs8KelDrOLm7TDT3NLGjemhq6FCQEQkX96lFopFLPjveiFImeovENpIUoS2vt5mg8QrYa\n0Lbp5j2abGmdr08cuOkRxJispi9Rp8tUxSxIHUhtZ07cIwzNjC9CqEqg87Bi8xL9+zxqZRbG7LfL\no3vD4G0cLXil/TyjE/wUpCVvCmDAD5wkJIszVIy93EB5qyJzLWkABayvqN6X11KqF6cMU3Gy0OIz\n/L1ZbOpFhs51hhgYifUNiJjH6B6/+Kl3baLGOeeJUnpLAS3KtYILiJaROKGmGTbXZ4ucYV1MJ0/d\nJA+pN52abBkAcNkXD6lLIxB64wK9paTjszzsKqF61YgRh9Ti6v1WAx5uhMs/6fpElqmJx+InTrVW\nRJWAFDJdOHLGnlscuQhapB+CymS2xXXibkMqzkZU4xnt04u5uKr0q+jrQllyuCDGlIISF0gttDvP\nY+Rw/4rrs++QTjbE9Yo0rCF2wAQhYT2Kq6InOMp2A6eCV0TRslp2ISQLE5ZiNT+xyhJRzNtvCLWh\nRx/m6y5/siSyKjG8AbK48CWvxlBhQQNiPqCzzlI0pYORf5agrqImaP0GgQrPXdHUPW6C78Kt8u45\nqwCkKrjBFEUMDkcaZKyeqZRa4+j35d5QN6zpN6fkw2NC6EhpIKWBYlPtU+x0Hf39yXIaMSAF5vlI\nSolbzz/P53/kR4kBvvXwEc9/9rO89uLLsN/y3KdfIoyFx7/5FsNztyEm9u/cJ+cjOa2RKZPHA3mc\nCF0ih8iYZw7bHdM0UqQwzRN5GkkIq9OO/fbA4XjN/Qcf8O137jMX4bOffpmv/NiX+MEf+SK3nr9D\nP6xAMmkYOLtzh5Nbt9lfPzbP2DwFAiF12j6MDEHrxEoudKuBs4vbpJi0Vi7YfnqoxT15PDzeuooI\nCi4o/lJXeNHkURbHUQ2h8woJTW493CmhqCI3IYlL5S/YCZZmHE0MCoDkqkj19s24V7kyo4iAeH7R\nPTJ/TPMmvLGELUPwelt7GEmac1fmoZ0rz4mhERkJ0EWviwOSAwbXN1juTf/sFDBdq86ezckmHuEK\nVc7bVQ+ygWvrZVsKLEZ71SUMsaaOquG1vxfUIM4FUrT+nXX9l39ppi848FjEbUuZNVcn2h5PjDvg\nQKP2Gl0YXa31s33XCQj4XNhg59z9eg2vG1harOmyG1KM8UZHs+YZ92g7TGXOR0lKUvM99nsxJKNB\n0WXUw0GapWn8/p/xeiYPMSz+l2ap656CDqjp5chadlxw4CIUzmJXQx1K97iZC3SkEU1IIs7ol6aj\nffNEKsaK9p4sQjYaifbmDJSFR+dGVEsxhO27D+k279GvTkgrrVEMSYk2MTlpxJGbhXjswBlWQUqw\nOPyqKvoo3knEPCeP/2Nerx3Wp0MDWOePXPM6+noXe53OYQfIw0zYmbbi9iWlWQXA0GDTIc14VU+T\n1mEjhIqi9LwGX/Cq7LznIzY6KQYdD6Xes5NvOiuAXhZ7qFH2BtXeymqZa9HP03KMlFYM6zOm1IPA\nPB3oe2MEG8vWDYGGqrKWT4SEmOMUEGIo3Hr5eT7Hl7n4zjskCjJ09Ce3Gc7OOVmfEUU4felVUr/i\nUfotutNT1i++yLQ/8ORbv8nuvffpzlZsbl8gQ8/Vhw84fHjF+rnbhFXH9r0PCUNkGmbe/e3f5vDo\nQx7utvSbc/6nH3qDH/7C53jljVc4u3VK7AZTkoHTW3c5Pb+Ddy6SWT2CaZyVABAiIXWkpDWK03gk\nS+H87BZn53epDaaDk6IULHnoDqTpRNdnJjShomRXFCxaXpm1NAMmiKUMqIg7LGRIKLRGyg5s1Xhp\n9Ehq27PK6DGPJZihNE2Ct3QMlgLARTdoPrFaPANRPhvUva42qPumAfIZpf45ylL0HKv+Tr3aYDdm\nwWkjoXlaAhafvQQgbm7EShZqntNfvdBgfn9LMFKjLSrL6mz7O2+SV2TxEbno1Is5C0M0/WRrW/X+\nQsk2GcAMtupKBdIQspDjrImOPKso1DZtob2fxgBp9+W/WUQDDCDVOZgm+z7eq/EjTBditbFEYlhU\nStpa6eeV6r02o+4t7lL1qO0LcbfKZduB/bNez2YQ7T5iKQRveRmE0xVsVj3rY2J1LKymzIbIygpl\nXdH6woo9rMeLNb8miLTk+NK1B8NIwe+h4UDHwi0AJ/V3SH0DJXeMjw/s3nmX4eSUuFnTrdasukTx\nyeZJ22B5g3IBfHq5h04FocisCoFB79Zl2ySwelMiFvqhGpcWglepdaPgKFzs+WvYwj7ThYKw2Njw\n1MGkaL4kCkE63Nfzg09bOggeCl3ck7RxO07aCUq1NTRuHkWIhv4sq+8n0s65ojipitUL9F0JNU/Z\nXV79ZYqR1fqUQ9czl4npuGcYOtKwAbxERf8dZKKUjuSLG5RcI6VAnkmp59aLL9KlnquHj9m/8x0O\nZxvObm84u/U8m1depNuckNLA+RuvsLnzIusX7iHA+nTN5ekJpy+9ql5kijx5/x2evPs+p3dfYmLS\nfPTZGR+8/7sc5ky/WfHZN9/k1Zdf496rr3B+94K0thpUC6/36w2bswtiF5kPR7wxRJ4z0zgyT6MZ\nfg2xzWXE6wZPL+5wcn5hRsYLxc00iYDofMXaWWSx1iJYqawaoHZ6jM0onptpgCVEM2wOtnxfg4Zb\nCQ4UQ91jDbGjJ9L2xaS8gqCaFa+579RAkT23h9Mqwse7lbgIx6poq25tpx5ML6iMRivYXrzX32HE\nuGKplury2hmPMXj7Xpx75LpJ/66MydpEoB4wy4UtSRxS76qeF/382M6Y/U71wXKg+PJjlPziPIys\nqnM5rrkZZLN7OlHFuipJ+6QYk80U9D30MDs1hOtAK5rhadEg2p4TWI6mWxSM2Q9cH5b6Ck2vxEoY\najrI/lXZ5807VXa7EhzDosYdBz5ehyr6TJVMhaDExyVg+u7XdzWIvsCBaPkzjJSiSuz1T59z0a1Y\njwl5uKd8cIDjTTQhi43wT3W16EYsLoRuWYtYPEdSs+aGcoLzzoJ79lVRBEOI/j0AeUrsH1zTnX6H\ncLKmW69IQ0fqOiSmmwKMWPOBdn/Bwp5SRCnxnaOfOiBGF4YWQmqopWEsAAltwrjmz/QTpD5IS6Mj\nmVBS2whRReboXlj0cnQE5cOLvXn34km0vZx5oh7OMEMXaeFQD0nWtBHewFkqEcYjYsEMXMt9eCLf\ngZPOWyumHFPo9bOyjTgypdetT6BfkccjBa3rLEU0H4oi6VJmYk6UVMhl1DU3haZKVIeFhRBZn58i\nJdM93rL/8D67TeK4eY5+c0qKa0Lq6G7dIq3XKnepY33neYTM6d1X6YYVIsK0PzBNI+uLC+R4RTrt\nGac9j997h7zd8v0vf4o7F7c5u3ULBpAk0PXEfgUEUurYnF6wXp9S8mQdapRMUfJccx9Cm7ies65h\n16+4decl1pszfY0RDLyrkJezaE9MJ9CERacTsR72pYEaE0v19HyQNSyJN26M9N6oITE9p8nykgtB\nDw7jpI1rMhDnEQkHqslTBrRzUYKGHT2cHi0/6hEasTPh+UOw8HxI1ag3/YBFfPU+CgWsJMov7eFq\nIVfvtelqxs5pMeIcPgnHw7oCtSRJHx1PGTh4q/eNy29ZvHbx6Iu9aEa1PPWC9jfBcogWNnUbH83W\nLgk2zTtsOrNqSBG0fjJSSgDmdgdmmIMZb3c5lp1uvATj5j6aMRMnS6mCKAvd6lyDUkrVY1omg0Wr\nzKmIoh/lz4AgVqNd7afoAPdItHypyZs5Clo2FxdF/c92PdP4JymanYgR+g5SCgzrxGd/8B5nXSaN\nTxg/KFzLjt3718jsnp7jRGOY+unyzyVURNECMv6bWNGXG51lS+qWJWkipMawqvm6USKJeS/sP3hM\nd/YBw8kJ/Xqt3Wz6XpmTUjQNGJSd5TnC6NRx0Xh/mTM5FVIIxBSqomkrFpviCl6S0XCco3yi+7eB\nGhaKkZC9GF+N/R/6k/8LAD/y8Is8vbNOFHgaUlYv+ylBaN7sx+xz8J362DfZ9yx/G25+rbhiacbX\nl6V4ONpEYrk7NZ94rzB/bgdlJsVISi1/2frl6oubV2EAoiy8I8ALoEvOyJxrXjakpC39hpURqrKR\nhwwt383IHSW1uGebNzPzK6M2CC8Tx/2eMk3IF22Ej9N/Q6glOTEpUzaEQEq99tRFjUSx3OA8T8zz\nrO3aihHF3LOzUUAxdZzf+nVW6/9vfV5ZyNpCEHByw8f/3vdVqgxU2fEP+DiZeOrnf+bRT/K/Pvyz\n5naad+nzB2X56obJ/VSrRBp5zrwobcNotWcCSu6y024gzZ/Le4oq+MlkZtUIEhfPYbmpYiQ0V6d5\nbvdmRq8y0oO2qfPQnXZx0UkpqlgUzOkRLRUcLIfRthYAFYnU7yuVpNTSRvVfwYknornZksmyJOXc\nvJxUUzLkaJ8YP7p76vA2oFDMS6wQVsTApnbAoQjzPBtz2zxGB1qol93ygEYkxL0x/ameeU1iuUZ3\ni61TTFrvUUEdnSJCtLIVBQsOsix/SKBIQsqsz2PrnaWAWIkSLSriQMA3usiEEBc/++TrmUOmMcDQ\nB87vDqw2Pat1x6e+/x4nvSD7J1xtMuF4STl8i+nRzMK23wht6q26PweVShNas27q0pshrv41RFH6\nMajfkoPWJS6nYzviU4HT78m543A5E99/h/50Q3dyQtqcEHojDESj9cQFewvtMhFT0JmIksmVOZWo\n/UCT5UxCUDZqUIJDY20uF5OboUSo91hkXjyHLHp72hsrjly04HrKgLUD95Rxu/Eyd+HCU79+2lje\nsHj2f8O+dnA8GV98oK3VEJVSKu273AjltY9WJKp/CUFIUehT++wWjmqKpsEd+2+F909JfTBlnSys\nVwQpE3nOyDRruYwZSf+zH9iYzNsqQs6zdtEphTzPyDgRsk1/CDZ1wVVAcCadreYihC6oodN+lXP1\nQFpexJ7UQlaAGdO+LX+1Oktzs9yr73by/fOpIc/lz2++/+nPha9vvgEE/tdHf7aC04be25QLj4hE\nvK7RYa5onl8s3VGNtBp/D2nWSSsSWm2deVGIt/BzAlsrz/F7d6/W80dVzmvbN8xzFPPIzaMg1M+p\nReshWn4cgucuHYhZc4kWKjadJrGCBQFr8mHCHq1VZPEetZ4+MA15I7Xy0Z0QNPc3Z0id0IkSFpMD\n1YUoRTO2RXQ0nOtVW9p6RiNo3aYbvJKtg40TbBT8JyuoV25FS+209Wt6CaRGl1RKGpu/7YXtl/fq\nFQdoYhOQhGJ7GyyqlSUvjK1UkOhgRoc+z7aXaj1S7FrE9hmuZ5h2AUmgT4GL2z2vv3mX3zhZMQwd\nr957hT4VjpcrSt4z7bbk7Z7t+F7bQD4ujKgBT28QpfOnFWepp17JvrpAVrDrgkbbjgp+iyuMpWDA\nDaWfp8jhwx3bzXv0J+d0qw2xHwipR5IgMShiobOuMf5xPpVZ7ziTScHp5kvvSeP8fqCUSOCUejA6\nqid27Clsor0VadewlBQIxTxD+Dv/4W9q3se8pepxAYSoDbBRofRDTDDST2wUdg/7xNgRkiaro92f\nGxpXSt70txTtjjEdZw77I/vtju1uy+F4YL/bsd8fGI+TsTAzs019VzbdRC6iYdMym1Fo7f/UUGje\n5oU7J3zu9XPu3hm4uH3CyeZUp18Ebd/WdUrqGYZT+n4FCDH15JyZ9ls76YGcM0WUyTePI+PVnrI9\nEg6FlBPD5oLN83fpNye2bjpBfNrvkAipH8jTxHi15bi9IpsXethtmcYDx+nImEdyzMwhIwnSesX6\nZM3p6TnDZs16c8rp+W1OTy+UKGNlG9e7K66vHnN1ecnj6yccxpFcdG2Ox4nDfs/+cITQ8wO/7yf4\n/Je/xrDamCIPFsZTmTRbS2MFetjU684MfNkhUc/aQZPKUSmTEmLsw8wJU1ERN+qR/+0zP6MnwUPu\nVfxaW0dXlKV4/kYVV5RYz3JhBunqGVlOiq+K1hKBwc50Ja1RqsEtQJBZ9cWCNOH0/ZrjsvhxCTc7\nwFTGrf85YF1OHMiacV+wK9XbsTiKx//q+6U+S3BFtsCkNTC28LZ8v+yPev6Ctzd8+tLPy0V7mpYM\nxcH7x3BGigE6iufklp/poWUvYbMWbUjdb3c9tWNMm2Goz9LIUjdiAW7swmI/BQgJ3MvDp7F4Bxur\nU8ZrbOf6QL58rue9O5YTfzy861+49ExrJasIucwfs54ffz2Th9ilyMl54KV7Z3zqzedZrQb6vuP2\n3TuUeY+UIyd3nmPebSn7HXKYCPH+DfpxW04B8frFjEis6M3V9hKr+k8CYiUeajpnbzxMQ3juKYh5\nHM3XcmQdmA+J/QeP6U+/Q3dyou3dhp50cqqhM8uTGYEcp/ZGQ/+1FbLn2/wAuZcaPLlmiBcbUuxG\nMyWiRHKe1ANcIFfHPwK1psyvYqgLj+0botKYuz6ndpFpCfxgr6+F0W6Z7T0xBrwHa8372HrP88x4\nnNlt9+y3RzWEuwO77ZbDfss4jcx5ZByPzKOGp7LVaeZ5JM9ZFX2e1auuHqNQyrToqeq3Kzx6vOPB\nWeJkLazWSVuuiRBSZ+uVtJ8pxcZCBUO0M05IwcPsc7bQd2I4PyGsN6QpEqbA6vQOF6+9QXd+gcwj\n89U1x4cP6cKAlML05Ip8nJDjRMqBkHqm8YBMME6ZYxmZmDjOByQFun5tYd5ESkpC6ro1ndVNSi7M\nx8y4PzIeD1rob6Oe6v7mwpQnJgupXtx9nhde/TSx7xQBh9aA3UfnFFPqxfLPwZRQya1VYPCcNYv1\nphFcPLIRnBgjUoGpJwO88w1mLEON5DTvwPuUOuM5VOPhSB6LEATE5+FZ274YWhcrtU1S71m/YuHB\n4Ex0U5qe07b7Ucaq2GeJKfqnvWfBc1CLaDLOjq4dlt1guYFwT5WlMcU6OLkSL4uvsqcy0Bwsh19z\ncBaRwNMCgk3KsGfh5qUOhpWAuamwEGtNPdz4Zv9ZsTCjhcxFavOOel6ecqM8nxvMu2ulDVDZ4jx9\nKYh3mfDURbBcv3ju2+9UqpQaILFI2WIKkFTg4W3zmmcqDsycAVWmCmbc9uRFV6BnuT6xuXcA1qvI\niy+f8cabr/Da66/QDz1digyrniMH4tDTnZywee55ZJyQ8Ugcvkk+mjI0xe1i3DqbiLr7+ryADpSt\nedjK6rDQKW76apbM+F43zeLyT3pF/FiEkhivRrbvvkd/dkq/XhH6xCpC2pxC6lVpk9GRNzMp6YF3\nco2HWoRsCXw95K2SUncz0hmiXgqbMtVi7AwBayJa10ZJDkUKP/GTfxqA0+kUgP/XV/7f9f03rppL\na59fEa1C2adevvx7uPlx5m0U8+jmXMiz9tmsdUruiYApjFa0uwz/VRLS4nctr+j+PYv90r+sho6T\nTWLodcqF5+L83rV+zzv7LJ7DQY84oiwt9B00ye6/jyHqAOGk9WQyZ8o8OUzX+secqUjBPMScZ3Ix\nmXYGo91PHeYbdDp46jptYWeh2DI7OJjJOdfcoStGnzyg6wyb0wtOzn5JPVh5apMquPFHX3grT6v/\nut7LvZanzoftgSsf38fFS/7z+hsA/O9v/gx/5slP8r8/+r8tQKsh9loAXqjtAIuzRaUaZ5Gs5DJZ\nykFAQm73YmbRvVr/eSJayI+qEP1TQn1eNERu3gdLWbFQYfU8/L4tulBLBqL21NSfeerFQ30Wqi0z\nbbCu70EEcr0PHdu2AGqlQurFmbCImeZnePoy844TpnIJGKma2KERn8WWtVX1nU5VY4qLi/+92PB1\nvQ0DW7GyQSN6/63bEIvwpzODodaLW2i17a2RchaAu54Jq01NMdaymDqb1mdhBpVLKcGpfcamDxUM\n+dADrV4oFqGwlEYti3i26xNZpgE4u9Px0r1bvHLvJV544Q5dp3m3miILkbQaWF3cQuaZPO6Iw6Ao\nPQqSVZDCjYPYMhEJ7ZCfDB02g7d4dQhE69MY7OEdLbVS5Ja8hnZI/Lt9M8scGR8d2L37PmlzRlyt\nid2KkNbEriBdqTVyGBr16eTBp2cLhORTBVQQtNWbhgSiFa7rCJJG+a6qKyyIDfWwLnpSLvbAFsBe\n89E8w0eMof8wtLW7SaJoK+TK1o1grv/MSiIqTumXqijFDZ6druIeoFiezJV7buUASnRo1DFHoH7X\nzdNdsV5tKCVQQtT2SyxQqR+W2J6nehfVf28eQ1uzth4ShJInJJsRLHIDPFRSsxtDO9hSW1kFvMbO\nZXHZ79HBn9oia0ggvi4tz7o0YrVNnUDqBob1SW2+UJW9y48bA//BR3f1pmx85DUfR59yb0jamn70\nRfznjRrG/+3Rn2srH2JdH5+AjnmDHkYrktU70sGM5KLKLVrdn9SQphkoU5r628aQFZwlabMdrVlD\nxUMur5gH6Nvle2yPVb1XsYHJNnrM96PlpUC72vhECzN4Hs0JS63m+/lR8pOWrFgebgmUiv6jUZtW\nf/yxe6lPrePvZqs/FDUWS8wUMDIP2hfavcOKCDHDb4ujTS98VqMOwBaCNTe4abwboI60XJgjFC8R\n89y5AphipRFeTI/neUXBVDa94TpGm8fTdIwBlCDZ6hKjDk7IUvWtR/GUNSvqMBrgrMS3Z7g+0SDG\nFHjhpQ2vvPocd1+4zdnFGY2Sa0ouCl3XE042UG4j05G0WlHyTLcJlG1buxjUXwsh12JM3RdNDsca\nPlVxqCjUFlFrb8JiIpaFEIIGdtKCXbU0QY7t9G8d5QiH+w/pTlf0G2WchtVA6Kyvpu25b36ItENm\nRiBKhyODamyC4ligTQdZSLUX5ttfqkHU/Ei2e+34fY++dGMv/j+//DcrUlPZExtEG/G2NMkZWyEQ\nonqbirIcdQZ8iHFBkAzTVDhsJy6vrrm6vObq6pr99ZZx0tZk0zypdyNqRLII0zSyP2zZXm3Zbi+5\n3F5yvd1xvb1mu71ku7vieDwyzbPNJmte4g3FTmvKkAKcrDp+/5df50//8R/n7q2Bi9MTbt+5w7Ba\n0fU9ySbTp5RYrTZ0acCnG8SQyHlEsqrQIlkJMTNIhq5fE6TQhY7Y9ZScmcY982FHHidi6In9CeTC\nPB417Bg7SgzM076GM/fjnv184Hg8MOWRYbXm7OSM1SqRer234fRUm4qv1szTgTxmDlfXbLdXXO2u\nOEx79vsDIok5j+z3O/a7PYfjRI4dn/vi1/iBL3+VYbVRJ8vHBEWd/l5zKSaHBG9ErzM8nXzTgvEt\nR+MnLnqzBKJb2ApQlMZv5yZEQij83z/9MzeVg0BjU5vhw/0uj5JQc5kBDWU6NI7Rd79iskrLV4Wt\n58q9AlWeflbsJNt/SmgRmI8EyEypem1dgEXdoWtlI2/YmfRzDO7F6wF2j6alYLBOVREx70AWPUOD\nsY71DFoIMlgvVhEbCJ0rizVG66XqwK0+RGPbF/PkctH0oJQATwURnIwk/rDW3LtGD6TgbU6TOSYO\nvEqxHsP+86DP1MhEEGNinidErJ8zDleKpWHAd6mmagTjYKgxTkRKxNIopYawMf3kzSEyhVZmJEbw\nNNmIUn/uc2TFahKlhBrVWojHJ17f1SDGCF0XeO3eXV566S63b52zOdlQiSKWLwBFPXHo6E83yHSX\n2A+kVebk+QvyeEmYVPiX+QlPljsfTP0vPYA1bLMwaF5WYXpeF8rX2w5MQTTsWgWp/cn+oJ8kkel6\nZP/+B/QnpzoVY7MirVeELhDiBge7AR9xqn/RiQaKArs41Bxe/QIsn/hUOyVcQBaKSiRY7lE75mjn\nio9+3pJxqkbUPR7r9BB7i6ULHvqJyYp/sTUL7g0WphGO+4nrqx2XT7ZcXT1mv98xHg7kOWsO0fJc\nOvcvsN9f8eTyMQ8fP+L+g/d59Pgxl9eXXO/VAGYPAX3M5U8c7P4Xuq/mYbLoPMGuD3T9wP4wsj5q\nyUNAoOh0kRg05+bNfYoNqe7SQIlCziMUSKlTtDtP5FkP7yyZ6EN4I8jQ6cGSQEFnGeZwgN46nJTC\nFLPtfSKWnjAfIUSGYcNqvcJxSYwaivWZg1IgT0WbgR+u2O6vOI4H5jnrYNggzPOReZqZJ/XM77z4\nKq9+6geUNOSKhObpxNho5C305mkJtAeqtROsXot4f8KWbqhnK7iXa4AlmscnOllCZEZYyiOL7xSo\nMxE9z7QM2fuZ0xBWbYtm99bIG6qwNRTu6vWmxCyFRc+vG8ilEcI8Pg/hWkQBn3zht+Teq/7ZAWUL\nwUXjDNgaWSuYEBvLVL8t1u8MdKqMcebzQoUZcc4bdFQm5+I8++cuIxnLc1ONMgr8syjbtEuQyo1t\nMLHRQ+Wh50pHFJXplCy/XHWoLJBJ0LIkzy2HtAAUbZ30/hZm28KnIQolN6nRvVbT68RA7RIkBqza\nSui9l6ong+2zko2ilroF50pp9EVNQq73rlsqNvTZjO4zXt/VIHZdZFglXn71eZ67e4ez81OGocei\nVyY8HSl0lJgpEol9T392Suo7pAyc3HuZ8XrL+LBQdOhf8xLkZhlqQK1/tHBGcSTm+l98cy1MBxZ0\n1a1aquLFUbK/L30TECJ5Hjg8nEmbd0ibU9JqTRoGMyLqlkcLY6hnZ58jTVDwkA8LG7W8i6od7BkN\n0fvn2A/thpfk6OVl4ZSFwPqauK5oBylQQxaLFXC/e54L8xjZ72YePXjCo0cPOOwPygydtBZJCTOZ\nKU+Mxz3XV5d88P77fOeD73D/4X0eX12yO+yYpukjd/p7XU8fVld7BWyoEMaI1VmQ5+dnbK+3HA9H\nVsNg7LKsxrEEcinW27MQrI5NPXkznI7Iu8BcsC77neXwJgUgMRC6RExRmczzzOxMXkRzWgFCCZTj\nxJQnjvsDeR5JKdGvOst1tqbQDuVLzoxlz3g4ctjt2O33HI6j5X4KlEAuE9NsMxfzzPrsFp/+7O/j\n9p0X8GkvwZR+QGotmSslRcxN6CrhxAYsuwILBCUqGImmGqfl1Hen/Rsyb0XegRvYlPZdVUWLVp+V\nBehyj8N7SoosiTiuBC1vKSa3lhzUdJ6TJiwgJpZLClhfbkVDTjRq9tDKMCwvVkqpRt9fk4sb7ogO\nH7Zge9Dewo3VGupxq2eohl7FIn8LgCsBQqr1qBqWdTZly6GL2l9S0ImwRTwEaymehRIRbhod0Jmt\nWYJ5iDceX+/TtlW72kT7bxv/5Hbe87M3w6Eefl0QojwdYJ8f0efU9zZuZyUUVoPm4WzN40qd8bn8\nswO7RpLyxgymEiuwgWwMeot0aRGrfYfmm2vHphAqS/p7FjLtByXOvPDy89y6fcF609N1/uFi4hSZ\nKrqJyiAbEiF1xK5w9uo9pqsn5MMH5K2zGF0EbcRTFcCmwh2FVU6ShVJj3ZCGwES0l2kNzdVv8Q2k\nKjm//Pd5CuzvX9Nt3iFtTmAVCX3HKiRYaW2iCrh+f5aMt8f2sUVulZZCsBye64y4G4cHIKgXEor+\nxqk1haV4Ly9rLWcGGf+eGs6wXGG9l0YGEBGmcWSaE/vriQ/vP+TRow/Zba903qkoPXmaM/OcOR4P\nPH70gG+9/Vt8663f5cHDD7nebzUM+nt4gf8tVz3oVm8WBJ0uIYEYezanGwqZ3fWB1bgmxRWShHnW\n2Zu+FjEGtHJCvZnU9XRdT5lnlKgwgAglozlfYykXKczTkUCiTz1lHsnzWGWsTBMiWrhcZnRo8HSk\n5ImUIqtVR9dH+j7RpV5DRUTrZqTlHtN4YDwc2e2vOVpv0uJAPGjIK0+FeSrErue1z/wQr37qs1p7\nKLonxcNuomxS3VabQGIEk+jNt035FC+BMKPjoVVBR7LxMTKD5b3N9FJHLPk+8ZTo1nxbUWIYrrRu\n8gQ8dVW9nGKsQ5PyuHiO4AbGI1BEA8HGTrZoiHt9zWi1XH7x5xNpqWFKVb5+7xoeXIwQCkKkc5Ok\nPyt+Zp3CvwTWAdyAhtY5anl0AwaAnahj9+hn1l+17FObvAHBR65QDXUJobK0cxZKF+hugBX3BKWN\ngFpcxVtU2poUy+eKEVt8rF/Ac9tuxe3zxWv9/LTYcsRggMQfR78juxfOIrVUZ7nmKoEBq3eUgJbn\nGPkpZGLsWfbVBWx+ohplL4lz2+CGMVh49Vmv72oQV+ueYei589wFZ+cnDMNADcjaGhXneS42HOvT\nF7uO0xdfZt5dMV3tKW8/QaZUa6mwlk3tUOoHe48KzZXYetuHO+LVw5utybc3+q640fbI/a3WT8aO\nLhbNJoqQd4X9e4+I63fBemiG2NPFMwgTMQ3EmMhZ3fJiXkYpMzH1hGiHGkNJjrarYLs6MP9I3ORb\nuYbFvSNBcxFWN+OGHcz4G6vL6UPenqh6sLpAemiDZ2uSMtMmQeaB3ZMt77/zPo+vnqiHV7TgNU9q\nMI/HA0+ePOJb3/4m3/it/8L7D++zP+wNVX9vr+otGpKrhf5kYhc5v3WLecrsdju6LtKFRJgmCD1h\nnklpr4W3zjoLGlJMUfOErqS71UCegxrHAOSs3mYXUds6I1mTjZUiUWZt02ejfUKX6EJPWvcWitbw\nZIpRowiiRfxBAtMckPnI0cZEHQ57cslkycy5MI1H5jwz2npPpfDCa5/l+z7/Y2w251SCzULBtnCe\nKWtRkBdpQhLqvwztez4hmBEqgSIuF625gHozi561FZJCK9p4eu+aV1FBaHQQVvCm2aCeip9j8ZNi\n96ldYYIZfpOFyop0T06sHlF9zMzMsmVbnbgOjc0oSsYp7p2V5jETonY/wc6VaGcUZSLn+nwlzLQY\nlin0EFqaSELtZ+whXtUB3DBCLT8JUKqXI0yEUBpvwv61DGr7OfFnrXWYQcOm7iU+famD4k1EwCNo\nfmtFxMqhxcBwXnjXCnJ8qHCoAF9lJVghv4OE9p3NGIfgOTxMZy0n/bQxdMlqnmuDC0GjPgbgajg5\naBrKw93RmsMXydqtKCzGPNkGxJgqoe1Zr+9qEIfVwDAM3DJiww3kovAHN9ghhFoz4gctpsT6uReZ\nD3umyy3T1Z7x4bEiQm9dpkjOwqmGMt2EOIZd/sxXXl9quZMFcmsYz//rBlOv5WuFSCjCeHmA9z4g\nnqzpNuek9Zq4GggxIbHVJ+WicwlLyb7ztFouV0rpxh3UsEIAryfzvI1+RuJGFwf/IGkPIUTqXLcQ\nVPkEAyQlWRs5Y8ZFpyEbG60AJXF9ueXdt9/h4cOHzHm2NfXQ0szl1WN+99u/xde/+Ru89e5bbA/7\n/6b4+3/LtdytZvSDAa1Cih2rYYPcER7df8Buu2dztkF6NOmfdSKExEJKUkPbJWdS6Imx09ZN5gUk\nK6cJQXPdqfTMeaZErZtMdIQI83QECulkTZSgTNmclbkv0aakWBEx2UI3MFvoU9V2YZ5mjseRw3HP\nPI96PorlDOeZcTyy3+8Zx5kwnHLvMz/M2fmdKr1a8qPrVGoJiXoQvm/LGZwVlqsZqArYGdiqaxWs\nOYFDW3DBcrwbQVTmKZZ2fIoxaTIrSA2rellC9frBCGV+rh2y1jtvnp8+Ft5LV5zEIWIs7UKtC/RD\nb4pc7795sqBnu6CsVwJESUq6CQ0e1xijGShCtE47XhTvOb2Eg3WpofRo4D9Uw6L3SotCicNuM5yV\nSKd7VKxTkXouuXpXMXp7wo+HIK5sJcAsaKeaqH+OH3dMhdo9qmIQLDWx+BbtWztbzZ7mQaNFIfT/\nN1uI1+L9Yo3aggMvM9hWi+hT7ZddaFynL9nMHvVXe1dw7B/N0EmQRdjUjKM5YimqkcxeSrNU/MUj\nkd8zg9jTdYn1ZmMFx9z4cI3PqnKWWGroryZJQ2R1dk557gXmV7ccHj+i7L8D+1kVf4oOyKoRC4gZ\nOOqW+ciYGIRouYiWbas9CXjaMb6hbOtP9bDEioStNmqG8eE1u9P36U/P6E+UeSox0XmyX/RAOB25\nKSUTHAv/hqfuY1lLVUOYjvaDG7pMrWOpHiQN9gcWSfrmMbjxVVlJ7eDHQJ5mQulJ0vHgwSO+8523\nefz4EdOUrW/hjAhM88z777/Nr3/9V/nGb32Dh08eW3/N/3Mufzq3+34YNE9WmKdJQ55rOL91wTRO\nXD58QkiRdVgRw6xsYLKWhJHoO+1c4wN+tTYr1i8ISUM8qRvohg0EtJNOnpiPeyVK5YnUwTxb/Wjo\ndJ0oxOOBMquSpUt6cIOGSMdxZJomsngbqqI/O46Mh4OeDSKlQMlixnLmOM5kCZyd3eHi1l1i6PE+\nkq503FtU8ORS2zysm9NMgpnjYGFlizq4HRGXKpPd2BRZBDxEhWDEoIUyW7oXuOF1U2v3a6+7EQ+R\nYmExQCxUag8kdv8ODH3smuau1Az6U0mRyqzFz2LoWkjPzbGFOWvJSnAD2ECq2HchCmpaI1axNVme\nP03SqIcDDjGqYLkXXvu7+ll0ry/UqRY/+1P/T95bv/ffdWbcJSiA9125vvHbdv2nd1VHn90vvP7/\nWOZPm5ZtIVtbYdNdHploINVYoB/RBn43buCsXVwINhlD91o1WmrGjIDP7dRmBAppiuc2nadkJRx1\n7quInnfTuSIaefCG+DefzgwoTzkWz3B9AqlG57P1nXcuDEhtVB2s3lU5v9Fa8hRT9nrOAv16Q751\ni/VzL3D2yj3mx0+Y3n+CFuzG5dLX/KD/dIHp2gOb4VED2Ug2s2gYISFozY/ceOeN+H6wbQxO6zBU\nfiwc7z9hf/YBw+kF3fpEZ9p1vRbMWlIiS2EONrVAlBYSal6v+bLu7leGF6EqolAFFDOsy8Nqh7fK\nrFTjCei9BNSYhqaW6hUj81yQEjhfn/L+O/d569vf5snlY+ZpQiRZOURgv73iN3/7v/L/+41f5u13\n3+IwjovV/t6ZRD00zXv3f1LQdmwxBPpOZSnPs4ZC0PzY7efucjyOXF9fq7e0Flj5yhTNL0okpQ4p\nM2XOpK6j63rm+ah5Kyv/0EbuulohdOo9JCVCzEUgKsmmdQDpIAUSiSmNajiZIWqpw3Q8Mo+jRSAi\nWTLT4cjusNd2cPNEP6yQol7jdDwyjhPHcSIXCH3i4s5d1pvTFoqrrQoDmbJAyqqggk2hb1vUIgf6\nfguKLrwCzd25jKoRid7VaJlrCZiX1mCmOGpdioN5hF6XqTM6W1iyNWEI1t/TlKfl93T9/U5brtE9\nkMpircpcai7U3my774rZVsHyXa3vq53H5QFZxnDtuWpoTqiGuX53cc/GQ8q+ELE9h0V3JOi5Mwu2\nCEtH3lu/9zGG5f+8K7wQ6jp5k4wgWm+cUle9NKABDduLXIFYbICp2gB/V6n1gg5kVByMByHe76t5\nx/q20lq0GRCOBrLsbiw3Hs342dQQe38tfxQLcYven5ffBNEzXhAr0/tos4Pf6/quBjF17v1oHVrE\nqch+Eg39xEAo7u2E6vVJAHro1huGi1tsXniZ8cljdvsj8nhkzt7ntEW4Q/BaRAuUCppbsHuKhkgb\nSrP4s7HR6idZKHVxKmwV9V/t3fZLiYgk5qtJC/ZPNoTNijhs1BtJaq5LniklEFNmnidKFpuSYR8f\nFuGIEOozhcUxkuK5Fzs8euqaQirNoNYwdGW7LnIdpsRStM8y5DvNmfkw8/KLL/Pg/Ye89dZbPLl8\nxDRPhqzU4Oy21/z6b/wyv/yffpn7jz7UGjc0dJM9/v89unRPbpKe/OelWH1qFiYriVC9po0BhmHg\nhZdf4O23jzx6/Jjp9ITTfMJ6WNEPHV3KzFZ6QYYSC9JLxRRFtFdpyRBDR4m9FUdrwDDRaSvAgiVn\nZmOwaV2nk45qjSc6LqpkmOastZoxkUU4jhOHw55xGhXVWoOcacocj3sOhyPjUadchJRIXc/FxV2G\n9RotITAlJoKX0CigdznRkKL41BQ/N668F0DQPckgqiwcaEWiKrxMzc20HryCMJu3o8XobXTSItNv\npR5OaNCf2WtqFMS8JvNCxVikuidOPmtAMNoRyF56ZI8c7K6LGUAvvcqe83rKzBRrCuANriW0uaDV\nTqPm1I2nGjQdZh6hhnSdcKRqYwmqG2CsLQ89dOiXKfuaSvkfcJXiY7yaV+g9n/3fRTQsXSzCgZ29\nJkcuYQuJE7EpJQ2MKKjQEHXwfnLirQxaRA6LJrpnXzxXSCCkNr5MXJsH6rmTWrOYtPwqQijevlDP\ngqYbPG9cmiF+huu70m881lwzx06gqbteaFOrbelCdJ4MjlzpIt3phtVztzl59VWGV15ANgmt7lqy\n2Sw4UVlrxQ5oVQXGTWu5xaW34UyvGmFeCGcI3hQAO5TtcxyVAuS54/Boz/69d9l/8D6Hh4+Yt1vm\n6Uhhxkf45HlinkdKmezQCjrmxBSUNQcvC/SKNAao3p8pPW5OPvD84MLPbAbRZogFb2tmBKYQU23K\nPR33vPDCc5Qp8zu//TtcXj82IdPi6JxnLq8e8Su/+n/w73/l3/H+g/vM2XJWFRR/75GsLP5xScoi\nzCLMUpjmrL1R55E8HxARUlKjdHJ6yksvvcSwGnhyecWTqyuu9zv2hyOHw45pOjKNBxuvlJmnkWk6\n4ASLIpnQg0RT+EEgiTX3VnSvpqInphWpWxvjDWtwrqG1EAMpDgiBaZ44jEcmmZnyyOG4Y28lFsdp\nrAf0eNyzP27ZHXfsj0eO06hKowNi5OT0nNR1lvvV7/Nm7ylqQABnOhvdHVMi4iE/kxU/J0vcKl5n\nV/9nfD8vHUJwIgVFc4dBYmWmfhxLTyeE6H0UClkmhLl6Ax5qUyOT0XrDUjuSSMmthMHWXsTAoIMC\n/3Sx8wEgEQq0vHyi5rhEjalPjMmINmC0bjDixik6PV/wWj31fFyh2jrZPvia4vpI7M+ua6QYscWf\nW6r+K1Yrx8ccp3/xL/4FP/ADP8D3f//38zf/5t/8yO//4T/8h3zpS1/iS1/6El/72tf41V/91fq7\nv/23/zZf/OIX+cIXvsDf+lt/6/c8c4Ul27TFrrB8c/ESMqJ5dK0pepMm3WN/hBSCEnlDvuGsaA1o\nq7EU8cYDperXqp/Fxp5ZvrjYa/OycbfJp5LXlPFfizyChlmXht4Ndn2Gqi9/z+X5yPXde5ma26Op\nhljRWvMQ0UNgCMkp2BJzfZUmoXUOXX9+weaFF5HjHtnt2L/9kDKZr2f5wfY/R8XmNVYM0mjdNVxK\nYBahq6QUR2ZPe4J6uRenysKdfUd7gfkQOdy/oj97n+H0Fv3ZhniyUjJNFmVchhHZeLLaUTrKXrOO\nMbou3jrJv915e4tmta0HHt4dQhF2u+eYBrt3oUEBvVrzZ2E8Hrh9+zZdGvj1X/svfHj/gVL+a0sr\nYbu95D/9xi/zH371l3h8ddlQs6iBqkWu38PLGzh7eEsBSiCFQBdtikWfWK+t+8wslDyD9JQgdAQu\nzi6Q117h/Q8+5PrJtTYQ32TIokNfh54+9cSSCDOkdGLnRY0fMRFjr00Mkg3HTT3SF6IUUileJ26O\n4kwej1BQOnwMtdXWeNyxu75mypNOApkntocdh/3INI1KviESS2I8Hjkcdxz2R8ZJw63DsEaAod8w\nrM9wxnGKyQyDQwa7LCyphsEUmMutODoXcy6DzrkTP6P2c1M27sFlbLpKVGjoDpDXDGpXo2X+qMU5\nNAKjMwPrGQvhxjgfTFK9u5N/jKfdwAxeKXSht+41Jt+FWs4RiLXLSc1B4twCrE2ZW381SqUhSvWQ\nHZiKIDJXD0YL0DUPlULCI08aEQP3aJV41rBBbVQteifVSDqIWHg5gtiztCvnzF/+y3+Zf/kv/yX3\n7t3jK1/5Cn/mz/wZfuiHfqi+5s033+Rf/+t/zZ07d/iFX/gF/uJf/Iv84i/+Ir/+67/O3//7f59f\n+qVfYhgGfvInf5I/9af+FJ/97Gc/evBEKEVZ8dXjEipYC4L11TWgIhqlaDrhpiXXVJW/Jljo085z\nVKOqYC5auUUxMVa9ol+taxGDO92LMHuQmnNVtSi+rfV1kcXUFykKksRlrzkVtU30RyzA7319d4No\nn6MFj6EKaF2YmEhWmC+M1vJH51m1RK5JUIr0Z2c6S26cma+vmbcHDh/uiVkNrgQ76qLEa313yyc6\n8vWQyXKrrEfE4rYDlYxQTWl7sJY5jATmmr8plhPN28zhg/usLm5po4H1WtsNBWVWhS5RcibPE6Xv\nSalHQ0x+6n0cjoeibOmCT+92hWaI3FHNR5bfkE5KVs3R/CxXQqAHu0wT63XPxdk53/7ND3jn3fc4\nTsc6qzCXzHF/5Bvf+HV++dd+hUdXl1WA/Prv9QtD3SH9WwyQOg3nxhjpk8pELrMxV4U+QZ8ineXj\n+j7R9609na4htS3ZMPScn90i9j0Phgc8/vAh8/GKPBdSp4CBTujiSkk2AsRI7BOpG2z2YU9MPbHr\nkDxTptmi1ZHUr+zgFesqYqHjSfenlFGjA1nLWMbjSM6F4zRzPOpEkMN4RKQwpA2lZMZ5Yrc7cDgc\nOI4zIWntYogRyZnNyTmb0wsrn1GhTtEbWHsYruXJHMhp2Y3KuJYxiEUVxNY/kmVuxkxo+bvQPEQQ\nghhhxL6zMkXFQdpCfn1/fU6giJEbrNZM3ONuhosKDl0XWzmF+CMvGJsBy0Hl+hwhRHzOoH6WnZ2y\niBfZdxXzOO0B7JCH5o1iSnLhXbjBU5jqtWzBiCZeqrIwEJaaCFai4F9B8AntjUTXzvRNL/uXfumX\n+P7v/34+85nPAPDn//yf55/9s392wyB+7Wtfq3/+6le/yttvvw3A17/+db761a9ycnICwB/+w3+Y\nf/pP/yl/5a/8lY+cy6Yn25qodxYtGpSbIaw7pGHwSmIy8BPq700zhUgKCxm1RXR2rjsxxXSUlEAw\nmQw3BEpuGDy9TbGwuXVecpKf2KqGBDLXHKf2NJ2rnLl9utn17JOvT+xl6h/uJzH4wbMFDLGrLquf\nmht/ReP8EiH2A8PZBWHKzPtr5utr8uEt5ssZ756RgnukvjXtkKuTH6pR9M41TRm3PKIqjKVA3jjR\nVYg96+g9UyLWaHgOTE92HO6/Rzo7I21OGboeWXVIUgZVKbM1wnWETquDAoIkalIdg0MqMZaCiHgR\ncc1PLeoY672GQIpJ8VVQc+4eRX2dlUdcnN/i6vGed979gGnyCdiqBEoW3vr2b/HLv/pLPHjy6CPG\n8FmvCkoWKxqAvu90ICqJvousVj1dF/BG2NpDMZJLJlKM16DKstgEBNUlYmhPvZMUNLeQkjKeQwqs\nXl3Tdz0ffnCfJ1dXGjIGwmbDMBTyXIhpJoQOuuYVxq7HyUgI5LLXMCtPhf6L7l8XB21Un0dND4iW\nacxToUhinEaOh4nd4chxHJnnmRAjOc/M48x2d2B32GmOMwY6HyYtKjXr03M2J2c21UIVbYRGTBPv\n8m/yq+4OTuIIEvH5oqYrzLyYIUFLajB5qTGT4HZDP0OqtlFwQhFLX0otmK/G1c41Dvas36eH2Vvq\nwrzLYpDUGKUtorTAj7SJ5zos3I2KeQJmPZuRTtWzW2YQ6zPpmyqwupll9GhXqEDDdY3DZAfUNzyT\n4AxYfYdPVPC3BduvxUPhyvvpYvvvfOc7vP766/Xv9+7d4xd/8RefPmr1+vmf/3n+5J/8kwB88Ytf\n5K//9b/OgwcP2Gw2/PN//s/5sR/7sY99XzauQdPJfn/eB9eBlRNifKdzK7mqerRCJVdg3GhPaWCy\ndp7wpTTd7vyTYKSjYk36XQdUM5mtYYKgKQ5raGGaB+cYaBS4Kl3VwdFZwRYFsO1+1uuTPUSxnIsJ\nhIczGwhzV7jF5OugXn2XorqgbbXiemC4OGdzfIGy3TNf7dkdP6AcixIFLFTReK2tSqqldQ2VVSPX\njHA1oH5/LEKwLINQQT3aEFpuMTjitXs+COPDJ3QX90mnFzAMRM5hgJIbYvFaH21aY7jIhSxUqbA1\nXOCihWF0FLdESQsNDRRiFAiJSK+xd4LpuZl5molRSGHg7d/9HR49+pB5mqAYcCiZBw/e41d+7Rd5\n98MP/rvqC1NUjy8E6IdE13Ws12v6ftD+p/moOShiHUeTcyZK0RylH057LilKe5es3nSPTqXP5olp\n4wzNH6TUQ4CuG5jnjAyBuy/eJSb48P5DHj5+QgiBrl8x5AzsKVE/N6ZMCYk4F0QmQtfrkZ+P2uU/\nZ0pWQxZSQkJmOh6ASOh6lcTQwdRR8shhHLneX3KcJvaHA9v9lv3hwDzPxkzNzIeRw+7A9rhHotCv\nVnRdVyeoi2he+PTsDuv1Ccm67qhyUDDgORxt2NCQs8RFhyKx8LkbmeKh+GKejkCMUDSEpYqvVCAm\nfp4kGPkFtP1YMeDTurAEO/huPBUQ2znM2kRZ9VYA8YkOxZ5h6Rl62qBNxwgxQPRGjO3kuhIO9uzu\nw3nOXYSa3areZ1We0pzExVkSZjNS3jFHP1c9VG8J17xyFt9VIzL+TjGuRbUJ7vY27xgc6Lbr48Do\nx3eogX/1r/4VP//zP8+//bf/FoDPf/7z/NW/+lf543/8j3N2dsaXv/xluu7jVXmxBZBwU6coi7sR\njTxaUEqLnVkc1KCNNwcP9V59RFO9f2tQUnLLozYCTzHvtI2SKyI6w6ruujWsp3WhIovpibamaggd\nMOszltpcQY1jzrpnsXq2z3Z9Qg5RF1Ar/l2BhvpvDWeY2QqRlHrzAtqEYqkJZxWW2CXYrFnduk1+\n4cDJ9ROm7RXH+1tkTtSxLPYdaWFQPCSquYNiiERzbdljx6FGyitTzT1M/0yphlS3InmvSEPQtatG\nEebLA8f7HxBPzgibNUOX6LpT48IUIwfYJ7sBNAELi3v2yxsg12dySpV1oQnVO3TB841oE6A9H6Gc\nOP2MPE1c3Drj6vGO99+7z36rno+SGJTY8Rtf/1V+661vMeVnnyCtIctIF62ptsDzL97hc5/7Pk5P\nTgloTvXBh4949513OB72FCna1SeLeV6CSCSKe8fKri05Mxm9f90lmxlo3WK8+NYUXEqd1rtKoOsn\nZMoMw8Cdu3dBCu+99yH3Hz3QtZgzm82KWTZInpECaYAUCkk6ZDpqcXSe1LkpqpiDBCjaYLxgxq1I\nHXA8TSOHw4Ht9RN2uyv2xwPX11ccxklrO0umFJ0GcjyMHOcDqR9YDxv61GlRfbJaOxFSP3B2/hxD\np4OEteZKUKK4G5xQc3/Vc0Fqv0w3HOqBmUQLeL6GoikMqd6NVERdyQt+Vg0AFwspaseZUmV4qcPD\ngvgSDfDmUKjjmELzwvysLcsygufrBFOO1n0kuF7RZ6l9QIuTMZQljXhcJyOlpUN0coOeKalnWsPu\nfpJ8NmYtB7BV1Y5Dzgg0YyvN3C6bUIeoIVMV6QpxcY/WPaQlO3h53bt3j7feeqv+/e233+bVV1/9\nyPn7tV/7NX7mZ36GX/iFX+Du3bv15z/90z/NT//0TwPw1/7aX+PevXsfea/eRUSyhpd9rX1fQrTo\ngQQCxYgtc/PGFukZ3/wAxNjr2gXzMsXBCGio3MGZy4pWDpRi8iSlDkhwOFN7yoZiRnFGS/yaF54l\nV4KS1lA3sqfW7ra9CyY7MXY1HfYs1ycMCPZF1csF2pdGR7o4GdoSqOp31/dmC4dpOzIV4jQk4skJ\n/e07rF98mcOTh4zXR8q19R8UZZq2ZsB+rOxAQ3VRa2BGFI0sD2/7WzOoSkloT6Ho1dAwFgpYzF3M\nR+H46ArO3ofTU8JqTVqvIGcbGDuaUPX6idXdN0Uinom/6e8uiQrONK3eZDWCDR0Ha3skxdfFDKdA\nnicOh2tefuUVvv7N3+bxk0vGaUKn1yuSeuut3+Tr3/zP7A77Z9lyE/xAZw0ZcinMWVhtBt544zXu\nvfYaKUZ2ux3zXCj5vnZ5scOnraCM3ReW3TL0ecVm4jk7u0+uNJ1Y1JLsRPWmYkoUmel77ToTLUxy\ndn7O83PmwYMnvP/oQw7Tgefv3OWsCDkcyWOmGwZil5TMkrUtm66PaAgnBYRRpUNmPZhFmPejtl3L\nmf31juv9Fdvtlv1h5HJ3zW671QL7oq8f88hhPJAFhmHN0CdSFDSsacYnRiTP9P3Ayfm5jo2K1l0F\nzc9JUbI6wf7uZy9YDbhLSHAJT61GD2pvR8EICHZ2fHJGDZE1rGhAzvqiis/l/Hh87XknnwGqt1H5\nmeBlLEg9C+JkMcDLjFy2U2WtqqEKNiwbM0geiXT1KTYbr3lyblztOwr6+casKGWRT8UJa/bw1fu2\nbxcHxcu8mEd3ghnasggRW0mJh5GXxq/m1m6u41e+8hW++c1v8ju/8zu89tpr/ON//I/5R//oH914\nzbe//W3+7J/9s/yDf/AP+NznPnfjdx988AEvvvgi3/72t/kn/+Sf8O///b//2H0qRdsUumwEA+6t\n0Xhsz2Lr56UaUsyQloDPlBL/TBYkHH/UGtwPlV1b3HGRNp9SX9tAB2Lt+ExuqKF11Ye1SYh9n/60\njeEKRFIwYx8i2h1Jz05mWpQNffL1TAbRvtKot+XGz4NNhRdyZTFGuflezIPTnLtAl0jrNd35Kas7\nz3PyyhtM13vm6QF5b5a9Msd8ARtC8eWMQYdluqIoKD+yo5EO/B7K4v2tWMPCSyQgV3PlPqaeicS8\nzZQHj5HzD0ln5/QnJ8zrwSj+WmRayqxJXGMjNtR98znw3BAttKqhL6i5raqlBCffqB2R+lG6x0o6\n2V495uTshN31gfffu884jsqENaWwvb7iG7/zDT58/IBnEY0uJm2YjSAlM5UGMJ5//g6vvPwiIQSm\naWaaMuM4stvtzTBmLaXIYt6GBccsJ4UoiagItnf6uNq9X5hnfX8ISlCS3Iqx+26gWJ9LkQCzhj83\n6xPKhSqjh4+ecHm15bAbuXV+ycXpGSfDgVW/pl/1HPsBD1DXhL0EQtbcWQnB0GdmnrRJ9zwf9Rm3\ne673W662W7bbHVeHa46HQ605nOaZuWRIkdVqzdCvdOpGijqlIza2pBQ4joUP7z/h9nNX3L51gY8R\nU7Z2oA4hjhEkWZgcy0G6AuaGt+Mty9RTMkVixjgtDIbKn59l9QajoWotaG6Z+WW4z6WyOODzfHYI\nVZG5EWtybHlxNGcXQ1fDla3DTUGKGUX7mQNd1eFuvNSLdvVep0jgXopFYDxc6/cQ6tGxd3okqnl0\n6iXZfYaA8tcF1z7ViHpy0QFOxeihelKOWX1MUX2Rn7Gu4+/8nb/Dn/gTf4KcM3/hL/wFvvCFL/D3\n/t7fA+Bnf/Zn+Rt/42/w4MED/tJf+kv1Pf/xP/5HAP7cn/tzPHjwgL7v+bt/9+9y586djx5kzMCZ\ncVveQymZFDpiUMBU+44K5p3lahxz0ZIIv+rAYffi6yc7w9QBU6mRxWaA3QiGtpaVPQ06wFTlKYt3\nFLO9ttcL7vEvhpez2A9E2w+6R/qxK/Px17N5iEFRffCiVRyhLigsYkygRSsdUI/G2+tURFoCqYt0\nJxtWd54jHw/k/Z5pu2U+7iG3xmxtuZs4B/GONpFgsW1Fdm40bjJKbxYpWA6kdgUxk2gIN4oxTf0b\ng1AmmB7v4NFDhos7rM5u0Z1u1Bss0UgJfhDM5FpIKIbYCBKLe1jmFlr7rdAU3kLY8BWwkKraB1Uy\n8zTx6MF97r3xY7z/uw+5urxmzgWRpAY7zHz46B3eff8t5vm7h0oDMHQdfUrMJTNlR3l6rVYDr7zy\nEpvNRnNn22t2uy15Eg67PXkW8ySpMXzfF30IqfpH4/76YyfolFI4HCeOo+aUJGj7diX+Kvrr0nBD\ngeUSGdY2ic7qlh6Fx1w+fsLV1RNON2ecrVacDRs25xs2mxMNXUYzUkRi7DQPFPRgzvNMKRN51kbc\nx+nA7nrL1fU128Oe6+0Vu/2O43RgnCaO86hGJCRSv6Lve/q+p4sdBIgpGSEDRckFchGmI/z2b7/H\ndt/xmc+8zssvv8hqNeA1hyIN0QM2E1MqiAg2k7NYuCgizKITGNpl+UYxw2YGr3oMoudXgkNOR/IL\nT8eNY2hnW70B74YjFQyLE19cdgM0lWbGcZlOCE1NB0TBicSa2dOcZTEW68I8hWas20l2AGnU/HAT\nvDc43RisTZXaZ3iek2j9PFvXjZtnePGeGuL1XyxCd5aHIyz3RK+f+qmf4qd+6qdu/Oxnf/Zn659/\n7ud+jp/7uZ/7yPsA/s2/+Tcf+/OnLzGDExoMREdSuV230DgNTDjjPYau5eCWJD8nHtqrPVLlpSee\n39UKVGfRqz6sfW8FnO1SagPuYOtk0aSilQ2aHvCG79S916VegDAH31XizOg85Z1/t+sTSDWBKjH2\nBe1ALF7mi2IyV+P1Ys2w/fA5I1sEiZBWA8PFGWV6jjzuOV495Hj1u8RL/bgoTYSXgYg6GQHPgQS8\no4d/bwnBQmp2T/YpNRcjWD2UkW7MGGlNvBnRGkpJTHvgw0uOF48Yz+8wnJ1SziejBC8ZWq6/PE/i\nn9c2M5hA+oBU39Q62LQ+SvNwdTSN5Y1Cphgo+PC9dyra++D9DzmMR83fmTDN45EHD98lhD1DH9kf\nP77GMMXEpu/pkjBOmXFuNT0xwtAnfuDzb/LVr/5+jocd771/n8NhqwzKMTNOozIrs07j9txCceDh\n4RLRgmmRJkNi604I7A8T19u9PbUiQgddRbKWZwxrNQOSkDnT90MN1tXmy6nw+METHlw+4v6cWcee\ns9MTLi7OWK1WpE7r3rpoJTPmUWiefybnYoOUR7b7LVeXl2wPO3aHHfv91mZGzvosSegH9QiTlXX0\nSaMOMSUj0tgTFWGeJ+ZSiP2GOSfe+c4Dnlxe8ulPPebTb97j7OKEPg2GlO0YineEia0ZRgxKYgou\nsR3ByRLuGFkbsmIREIjm/bksST0/HtJUULnsZbrsa2v7aYqylExW16w5Qq6EogLliHNIG5T2s1iT\nIbU1l32bNNYpOHUfU7zeTs5TEQ1QLvWLy1xrrt2uOq6JBvij5fG989VNz2JJy3HVaKx732Bxz3Sx\nTot1/h9xSS62Rwteh4OeEGhhzmhra6S4kAhhonrxptNdz4GG/aUiGsvZ1i9xeQh1bVqIW+r+OclG\nw9QtGqbAOeDksiIaWXCPsgIOgvWfVf3gaQe9WT1v5am9/27XM3iILjgCobXzckPjyXO/HG22dVks\nAoGQLDAZRDt1bHpWt28j88Tx+pL9w8cc9o+Joy6kV7TU78SEzJYlV7isC7kMTuhhaH9eyGn7e1XY\njpbFsJTdtz9oDoxPjuw/vM/q1i368zOG8zPGswNrceNhIRdJZGvo7CuIoWEEQpR6Y6rX9FljXdSn\nsShVWYekaxeB3dWOb/zar/PZH/4807Hw6PE1ORckW4gjCNvdJe+99w7jOP0e+xsY+o6zzYYkmf14\nYMwqQDEEYhLWq8Sn3rzHn/5ffpI37r3Of/iPv0jOGiIveWa323I4HA3FN96e6UkTbqmI9Gnx1OJw\nVV6748Rb793n+nDk7OJck+1ZG2+XOVGisltT19thKZT5QBcjfdchq8J5vEU3DKQ0UD68z+WTLQ+3\nW95/8pD+vcBqWDP0PV1MdF2i69QgkhsLoAjMs9YXXl1fcjwemYowzSM5HyhA7HrS0LNeDdoQIEVC\n6uhiUrGKGgmpeyytCDpLpEjSTJnA1eWB//L1b/Hw0WM++9k3eenFFxiGldmW/BRAWhqBxub06II3\nwzdVortRS5Q8NWD5mBrRWHpQ4KzVejgWhJJ6erzEqxoBfa2OB2ry6+HNWMOdqkvMD1GZkYIT78WU\ncAuLAlYT6gCplOYlfoxI23+MlKNS1s4f0YhArsf01FPMC/duRhXIx6dOo2qfaKQTB39uwFu/VZqh\n/G9Qyt/LK7sXWEk1lvuNnd8guKNgnqyQFRD4rT/lYPm0Hsxg+WnPeTYGaCPzVTa7ZJu7qGBHDWS2\nkKo7EkbICZ68MgKORSe1y5S2hQshWhQJlvpS91yjTTkXbaQiz04i/IQ6RBM339hiSWpfGKRFB3Ck\n5YFzfUUJfiDVC4khWi4lgAixi8STSLidOb7wEvt7D9ld7znePxDmVEsi3Cz7FkYrYq7Im0rtWSzO\njTuloTZfOl9AK7/A7arVdRnS9YDndBAOHz7hcPsDhotbrO/cIU+TdVSxsHAwxGLoWJGNtceqNTuL\nHJC3a2DxPKEdXr/hWtxv9WXznHn7d97n2996h9//E3+Q3fWR3U69Q80baMeQx08e8fY77/Dhwx3j\nvCw60Wu1Grh7+zahTDy52nGc1BvoYqDrYLVOvPb6K/zkT/4JvvY/fY3/+pv/lQ8fPOZwGNntL9nv\nt0xjYZp01p+iMj94C1Gw6+PUgs/kKyIcjhPf/Na7vP3eh7z0wguqIDPKQI0zMs+UGEldb02urRhX\nwGvtYuqIXWdzC4W+77nq91xdzVzvtzy4vmQelRQVSiFZ6UDrXqKGRedEaq9SiUVzxEmbiK+GNavN\nhm7o6FKnyj0asEnKQPT2Zp6by05AC8LV5TUfvPVNnn8JXnj+Vfp+xTgJ3/7d97m63PF93/dpPv3p\n1zk73+CU+DqDzjSvmBZWry6YFxkcGzYAGRyktnO5gGOL02CG74bc3cC7C+mxwdnehcZk1AkVobp3\niwhMtMkuNmA2xmQhV1eI7XkIPiHBvMdqrB3xy4L5vryzlkciumLN+KxGX5w66QNVrslJXF7SIprz\nFWdfmleluqBFwPQjS23V6MCkrplQ9cf/iKtIizwtL5ePln/1SIH/TGWhtZT01/mr7W/LHrGOk7Ln\nCYt6qBZ50Jpt6xZr+yssfEvjHGClXTVUL2Kp47nKkacV9Fka81qk3cyNBvHPeH1Xg9hygRqGWSaw\nQcsf9GD6YFX1stxLE32rjfyybhMErS+xMEZAiKsV5fSU9XPPc/Lya5w+vmK8/g7jtbLNgh384mG3\ngIV9GjaoYYrFAfb8i4F1lh6jM8SWvKcYCilU/1ANcQBthQVCZLqeOXz4iNWdR8zPv0A5jto4uhSS\nFThbBEa/tzaRrqtqiqtTtqFgE6ytr2RwBOUP4WhDEakzNx8/3vLb3/wmU86cnJ5z9eGW4/GgnXOK\nMqxKLjx+8pDHl084jHP9SM/Z9X3Pi8/fZUhBjdyk7xsiDH3g5Gzg5Xsv8RM//kf4Q3/wj7C93vKN\nb3yD7XZLAJ1HWDLkoPm2rN61J8ilLe3HI/nFmhRT5nkuvP3OA37117/J93/qDTabE5NFo2rPMyl2\nhNhrN5q8I8WOHIWuC8jcEwxoxHiGz0Jc9Vecnm243l2z3e3ZXm/Z76z36GGv8yHnYoXMWPhsItIR\nk059Sd3AsFqxWZ+yGlZ0q84mnBtbMibzuqwlWvBB19ES/IKEwJwLDx8+4pd+5bdZn/0WP/LDP8b3\nffoLrE9OEOl4+OCK7fa/8vDRY37wBz/D83efI6VYjWGUqKFoD7EbPV3/HO0MuLHSvU5BS5q0SXZZ\nhFClHiIvO6pC7MrxKRSuG9LyisFep5/mBtWQ/yJXHi1Ep1PmG7nM0xMLjqo+m/g92Fda/rVIex8L\nZb2UJwu62DzzuEhD6L35uoQQSNYQIougnqvefRH/x/SegJN6WDyrQWkDKEuyElTW43/DxIXv5VVy\nsaiEcy0AtJ2bUwjxPLKVRLihFHEK202DIpVwFRbjl2yvSkGy/RyLanndqZWnVefEompLY9o8avve\n4Ppd9yxFB6zJailD2wcJaEOBbPXXeha7p2pAv9v1CSFTXcCK4sJiLAqiuQaPE4sjCiXRuFL3vEIw\nYoQz5Pxw638j3eqE9cVtTp57ieMr14xPrmF8TJlcyOqKEfGcE9YpATNi7j1yYxNjqziuzwOtoBeh\nEg46Sxa3Flai9WskCtpjc3qyZXr4gPl6Rxkne8bY7sUZslHvtgVcpN6XIESshVclBnlJhRvBm3vh\nIcf9buTdb7/DW7/5W/QXHSl1PH70gMPhQMlCCTokNs8HHj95yGFaGMMY6I1U8spLL3Cy7nn3vffY\nHUZduwjrdeT2nVPe+NTr/OiP/QH+4Ff/MFHg3/0f/463v/MuXeoo88yqXxFKZHe5Zcpza+PlkuO6\n8RPMYUTzxbGob361PfIffuUbnG7W/NE//DXefOMNUq9AoCRhlplu1j3uuhUiOiC05ExMPUkmQuiJ\nZOI6kJ7T1nHHsXA+3eJw2LE/HNjv9myvLrnebTkcjxwPR/V4p6OF03r61YZh2NB3iWFYsVptWK/X\nysTtDK2aQElUkBixWY0x6X8LRl3Xlck5c3m954NHl+zef8L9h4/44IP7fPmLP8btO3dJXcdhP/Jb\nv/U2V5fX/NDnP8u9119mGPra6swnh/jQ6IrAaMxLbz0msijpAQNk1pVp4T0EU0gNaRfr1b8ceG2X\nxoTR8ohiaQbVCzFYZCR2JgPG9nTWLH4+qwm9cT6d1OM9UL1vqILxZCDXiSBtOkrNy7uHQKiNA8Li\n81Ps+f/z9l+/tmVZmh/2m3OZbY+/Pu4Nl5EZkZmRtlxWV6PaUCSbbJEE1RQfGiQkkKIIUdCLBP0D\ngh6kNz0KhAgJkAABAiFRECCCEkSyu6qLxS6mq4zMDO+vPXb7vdaaRg9jzLn2icyMiKwucEVcd87Z\ne68155jDfuMbqWZaGAE8hezUS2o2UGCCyehnOdPKIWt6l98gdapo+7aGFKFnp1AzIHe2dzDD//Yi\nxfHToZRQIrpPurzaZpSI72Ls0ZqpNprSoqltJ/rr0XhCnaboUWrvXoMWk7lRoV8LsEKYDzpgvW+f\nEdkQp0lYqhw+albRxj6DHxSBbUSOuba3SfkoPV2MEGWE2pe9vsAgali10/ja1wf1JqJAwo0pwXgt\nvmrPofYgBuvFq1d+vBTqykETSbbGUo+njA6PaW+taJZXuNWK5qKTBs4d5ZoSITvJkXxcg3p/PWCm\n/zOLohrM1FckKRPEuzCiZAqd1C19OqUq+IgJlrDyuPmKbrWk2zREp3dmkgEsFYIdNLTf8Q6NzCFL\n/VP9HLCekUf0mtkRpB6C4Hzk/GrDs4cPefr4Ma/c+RpFUbJeb3K6VHLoQji9WMxzHt+QuEMtR8c3\nuHV0xCcPP2K9bjAI0nY4Kji5tc9LX3mJ733vd/nut3+Po4MT/us//xN++ctf4INM/F6uZkJavXUs\nV1u8V+fpmvzEnd9//WUNlKUV6jIt1nfe8+RiwX/2j3/Eo6cX/Hf+1g/4zre+yY3jGxSlwQbpW5Kp\nHyVFVVNFj3ONGMQEHKlLCltSVgNZo80W103w0z18iGzbDdv1VozjtmW7WbFYzFnMZ2w2KyKe0WiP\nyXhKXVeUdUVVlVS2pLCVNjYHUn0uEjQLrmCY5MOpIxOigMxc17Fcbdl2gc4Fnp2f80/+mz/j7OKU\n3/nuD3ju3gOKsiYEz+PHF6yWf8liueCVr7zEaDIkozGT4tEIK6eQUr1NIyUB7aW2h0hCEeZ9SdEg\nMbf/5DYMNbCfvYzRGlQyxEljRXUmTQ+cQKPBNOYngWeEI1mMrigvmx0p8S7EECblm5R1OmxiuE1O\nV8pn960kVuujyZFMkijPLvcm/ZHqWGtrkI8RF4IAlIKn1CgoOeUJYZsiT0FGirEPsQcR7q6LMZb/\n6P/7H3F5ccZsPmO5XNJsNzjf4LqWsig5ODrk9o27HBwcUQ9qIlKXi0HWrixKxqMx+4cnDMd7bLZr\nzi8v+OSjD/jFL/6S/+P/4P/EZrNi/+8F4tYzGHq6F8QBSyPl5D07rK2JGf9hM2tX2mprSiJdPrwS\nhcVrSjSG2KdH0WDISe0uvSaEnUyElgsS0pS4M4Aa2Tsf0/5IdJewB8HI+MEIEKTGmbJ/UcFmQjYu\n5yygMx1DJPx11RD7g5AgsWSRgChQeOvBCLonodh2U6s+OmKIlIUOJNWamXimVo1hgSkCYCn3xoxO\nTjjYvoBbLvDbR7RLiaeydgE91uo0xD5/3P8Eu0deDaKoAwX27nynf0d5T61RRDH4YjxjjgDpPN1y\nRre4ol2vaLcbvN+jym+p3rvtYe45HLYaTSejaGJOtaVKpy5+Ntz9hgRWK8flxYynn3zEYr1lNBlj\nkZ5AdYhIgKAQPOv1Mu9FUVjqyjIYjHjhubtcXZ4xW671ezCdVty6e8wrX/0qr7/+bb71ze9z9/Zz\nfPjBe/z4pz9lvtxSFOBDx3K1oGu2bDeebdP2TcpJ+D+zF7/uskBVGAor5PGpfy0EaFrPct3y3/zl\nuzw7veTRkzP+8Pe+z/0HzzGdTikL+ZxSb74sB9RD4Q8FiM7r2BhLWUgquqpHtM4JIKjzjMMYN3Vs\nmxbnPc45los5i9kVs8WMtm2p6iGDwYCqFtBMYcBaq5ISdSafJQYnSEo1EJIqR+qf0euoM4g+stm0\nnM1WMpAYiXyXmzV/+dbPuZxf8v1v/x5fe+UbjMcjwHB1teBHP/4Zi+WCV199haOjQwqrLQ8qT8lw\nJS7JZHgy92dOsEhdNdWY5eW7aM/ElhRAJ53vMn1IwCMRT4yul3NNi9lYqAO9A3gxWl7R1DIpk2Ag\nWgVmGH3fSDY38nkpjWfYJbhINSdiwknKp/no9LPSO5isWPtniDoqzWPwWc+n+qQLkv43FNjUTpJe\nacK1Myklrx4YIo1gfYZHVHPIkxjSRBJ0Ha0pMbaTMVXO6Rg27fDU82B1SG7UqLdznqJrSSO26rri\n5o1bDAZDQvBMDi2L0wVd8LSuVVpFt2PcBNkp9lCf71q9MOXG5JfFCotPfuaghlCMXBIMnVjGtab9\noHYi9x2G/utpVqOuV0rrphYlw46RtBrFayYgmrCTFEksNVEzBipjuxRxX/L6ko35aOo8Kqy7X6xM\nzaVGQBgKdpS47xWkNK3rC4l9yKu8dTYaquGQ4eEBvtkyXT6gvZrRbZf47nqUl4RUFiTq+5gUpskC\nIwIqhiJt9M7BiGr6FOyQ/GabjauRgrAqDKPP6ILBLde0s0u69ZK2lRpUCBEZSdij9uRRd+ImRVFJ\nFFEk0SeJQAZO7FzJw22awOnFlqeffswnnzwilpbhsBbPVuuzab6YIFctTdsQ9d/jQU1RGO7euUNV\nWJ6cnuNcoChgb7/m/vO3efXrr/H1V1/nK195lbt37hG948233uCTR09pupaiDMqMs8F3Ae8MrlMh\nNGlnuLbOv+6yRsY+iWEjowbR9e98IPpIFzwffnrGf/Kf/gnvffAJ3/vua7xw/wGHBwcc7u9zcHDA\naDKlKEuqaohSoEsW02qqr4gMrKFwjhop7vvO4Z2ncy31SJlmfGAyGbC/P+FgdcRmvSGEiFHaOCuJ\nNKLxmXAAb4kuECkIxisiURhheg6nSJoo1znH5WLF47O5zn7rN7ntOj789BNW6zVXs3Ne/+b3ODm+\nTVVVbLcNb775Aev1ltdefYU7d25RlpU8XwoD05mKnzkpybFXNHbUPi+bqOLUGZN6oHjfCQKfEOGa\ngNxR5mmWQXLcEgeOpOVjYs7RNGYquYiYSL+vqAWfTqncbe8RknEJarSTMiWd+6zo+hMT5dDTQ/WT\nMd51ji2pvSCnX6PoCecjXYgEU1CWQ8k4FKU4OEmX7Lh6kfyB2SFPa/SL+uf8Ww/+oTAdORko7lyH\n98J81I9cEv1QFAV1VVNVlZJUk/WBGFOrbTypBis9s10n73txcinoyv+4otlCDIF5/YxPxv8Vw+FP\nOLt9wf3T57LzlPSaGDCfnfKoxBTSQ77rbuieqd5OpYr03ZSmNEhkq8UQWetIjgyTkyNOex91pkyA\njynbkZyHlKmMkpCMGlSlRL0i6hM7Tl6vtF+fSfd+3vWlDGIA6ekzCU7d+w9RP9wiM9iEtstlDyFE\nYXAhpy+iUk9Foklpy6Cea4GtSqrRkMHeHqOTG4zv3KJZbPAXknPuhTp9fgrP8zdIfks6Zvmw9cd6\n9xWkWY8i16lvKhESgzEyoZn0bwrCxtMt5vjNCt80BJ+83BS3pl+RNPA3fRoYmRKiXzSgiDjUoGsu\nPyKk0wZ81zJbBOaLBcv5Oa3vmOzVFEVEZjDCteKFClNqxh8OBoyGNWVV8tzdu3z80ccs11uMgcmk\n5N79W3z9G6/z9dde58UXX+bOzXuMhhMefvIhs/mS8WSPsJwDnk27luZ1b+hcxHmfFcLuuv6myxrD\noLA6GUOlKHv0UQBMTlhrylKI9c6v5vzpP/1L3vjlexwf7rM3nXJ4sM/NG0fcvn2bW7ducLQ/ZX9/\nwnA4xGrUWJQlRSFw+qIQuERRFJjBIDPjNN1WCYkto/GQyXSP8XrLarkU1p8YSQNtjR7ooPMlOy/f\nFwLt1OMpI8K8ptrSeKSmcVzOl7z94WMu5tten+9cIQSenZ/xT3/8F8wWM37vuz/g7p3nqeshIQQ+\n+fgZq9WGb3zjqzz//H3qqmI3/ZkbsFPKXs+tUQFPUUbvkMbsXMrLpIxhVBTtjjzH3YyFtnckJWpT\nejMERY9K3d3YNMpLzoDNIBM1XsEqm1OarpD6zRDghyV7/2T5Ctk5jVyzdf0ZojeKmOvAkN6YRpXb\nCNHiYqT1Hh8Ntq6o6pq6qinLKqdfc2pYaeEyXiATlsu///X1PyCOeuqyfG8792F27yffcdIx/c/k\n/dyJLI2mtdFUuYzjkgEMw8FIe2ibbHRCiNx5fIvvvfMdro+zktq79FOLY2ApSW0SIQRcEIN7fZU1\nNbkDAMxsSb2XR6J2iyFFbrYH25MifdTZ2V0No61YQSNkdR58Svqro2Ykm2GJIu7Kddo7UGF3gb/w\n+vyUaTIk0edDlMi8k0FMLQuJd3K3DSN5nwb1Rk0Sy6AeZdELbTZuEVOWlKMx9d4Bo1t32M4WuPUp\nbhOwFPRqZ/dO+pgxCWb+vkkVFEO/5OnvhhAFeWdN3DlQvZJIMIC467H4ArdY0y1XuO2G0KnAJF7H\njH0v5NnTpc2/IvRamM6eqk4EQTZ2u93gnWM4GlLQ4doNA3vJ3eeGzM6PWMxWuKbB+6DIRqMDZkUR\npoK6tYbD/T2qAo5uHDCqK56dnQKB8ajg7r1bfPOb3+K1V1/nueee5+jwiOFwyHI+4/0PPsD7krKo\nqcqK1nW07Zq2bYmhYtv2xevdNftNlzGG0lrKwqgilWWyalQy4ClEWuehABs8Fmh94OnFjNPLGdYa\nisJSlpZhPWI0GjKoKobDislwxGQyZDrdYzwasrc/4ejgkIODKfuHB0wmY8ajMVVVy8zGYoi1kgor\ng6UoO6SuAtuywYUO71vN8QEBnHe0bYPwrgZxiIJXJ09rUzHSdg2bdcPVbMazsyve/+SUtz6+vNYC\nc/3MyblZrFa88cufs1ou+YPf/SOef+EViqLCtR1PHwuAqm1bXn75eUbDEakBOjUgGTVCAtpKiO7k\njiWHW7z4HiyXpF0cRKMRZWobuX6fIQPR0oxOg6UoLInjNEWOiZzBUmReVh+lLmTS2CvUKCZkKfLZ\nQZG5SY8kw0yIO/eczlGvB3LgYaTOaov+DEY1tNlQI2nOxnnaECiqMcPhlPFoyKCuKUsZ+I2x2fga\ndeJMvqv0VfnvHy7/bf7Nq39I225zbXo+u+Ty6orZ1SXr9ZJNs8Z7T9e1ECOj0Yjjw2NOTm4wne4L\nd2/w+NARfKQoS/b2Djk4OKEejGldy9VsxtXsnKvZJf/rv/u/wjvPv/4f/Su89/5bvP/hm7TNlju3\n7/PyS69w9/YdDg+OCeNIUSQjFUUfmV3CDlkzg/xM8CEDtMT4J37RQG/9xPglTt+g/zZSIO73Rkto\n2VCCjHvSvUo9n0nPil42+WwlrmuRtz4kD8kgxtCTgJMGTXw25/abry8x7QJ2my93LxMThlIWyegv\ny47wkfgByShEm2bXxescoxipM3prMHVFPZ0yPL7J+M4Cv16xergAt2tx+wPef3XXA0vvnYxj//uu\nsRP/op80YS0UqcgeBcqeXhmzVxNxy5bt/IJus8I1HcEFKB2xTLMKpOcmhP5GoyKpkodldIpEz4oj\nhsE5x3q1xFjDcDTkYH+Mjw37wyFvzj3RtNjCsZxf4bwTA2FKgY/jFMUVKErD3njI/rTGuZYXX3iB\n08dP2W63jAeWO3dP+Obr3+K1117nuececHJ0wmS8h/eODz9+nw8+fkigwgcpxrftlmbb4lyksiVt\ns8lppC8SO2OgLgxlgdIxyYxDQQ1La4sydBFiYOs8RSn7QJGg3tB5UfhWjeZ267laLHPPZ1EUki2V\n1db1hcJYhvWA/YMxR4cHHOzvc3x8xNHJEUeHR+zv7TGdjhmNS5EnY6iqiiIWOC8OXPAB126JnTgc\nPgg7j3OJQNmydQ1d27DZbrm4mvHJp6e8//EpZ1db1q2j9eL0/HrOIFUSMbJuGt758H3WmzV/1LS8\n/JVvUBiLi4bz8zk//OEbtG3DV7/6EuPxSJysaPqozqTTJcIntXaywchgM5Po4iXDk6jIUs/wb9pL\nYtDsj9aXojqMplTFpawnmOzoifNcag1LHTaN0qwtMVHWNHX9i25JZqaXMmNKjRqUaFof81r1MYaM\npA1Oa14GggnYoFGqEZL51nV0wWLLIfVoj9Foj2FdU9e1RF8G6TdM0arWp2RtE3NO3j0NBkKmkkyR\nQiJD6Jv9E5I2qHHsdFSaZCV8cH2Um1uzDGVZYIsh04nUB30IFLaAAo5v3BJeXe95+vQRwQc2K2nL\n6rqOquukfSHtowY0IaTmepe2M6/nbk04E82nMm76YQUZRZMMbY+4ddpeEVL7VPTajmHwocMARVmQ\nqFjk3bTFyNM7OJp29QjgyViTG/5NFB5in/pCYxajL319YYRo0rMmiqdk7KKmZ0L/05JDZudrBkOV\nrJ382+iLI5JuUCEz1giCUyHAwUbK8YTR0RF+e4+w3eCWH9JcOkyw+f3ToByzc1/5jlIeOmqagT5+\nvG5U+8NiScGdJJ9yP5NuiGL6iNHi1g3t4oputcRtN/iuwdcFRZAo0H62J0kPd8IoWU0HSXYrRdvi\nRTnX0rUNZSX8lcPxhMF6ybzd8P477/L02WNu3rrNptnggmcwqAg4KXYDqMKZDmvq40MOpnts2jU3\nDo75xU9/TlVFbt875tvf+w7f+vZ3eHD/BY4Ojtmb7jEajpnNLnn05DHnVzPKYoTzLU27Zr2as11v\nc79b5xIe+oujw8IaqlJB8KojklIIMSjtW8QHAUo5L5GXtRZP1GkXqugSNB/wJmLUC3VeyIiN0z2P\nqhC1Z2lmtjy7vAKe6KH2GBsZVDWH+3vcvHmLmzePOdwbs7c34mB/j/29KYO6YFjVmMLg2g7XeVzr\naZTcvG1b1tsts6slp+dXXM7mzOYbTq/mnF1t2bR9KikFW2mc1uddrXN8/PgR3Z/952yahq+98ip1\nPSA4w2K+4qc//jld2/Laq68w3ZtkT1tkOiE/U41IwSYpXZgdvJjvKxPTJ8FXqd8VYfnDpGRH9vbl\niEvEKUCTkoR63jVsAdmbQlGmMeQXa+0nqnDofUXJKfXwllRS0PFn9NPcYwh4Qx7hlqO2ZLCinI2k\nA2IUInoXwRQlg9GEyXjMeFQzrAYyH3NHPyRZz910UTNQue6VDIa2mqTsGemEaHkBQ0LkiwMoEXFR\nqUOXhOQaVUwySHIbg1qQqE7TkTITMbK3v48Pgc45rK1Yreds2obVas1otKFUgFhVKoF+jPk5yCvc\n05wQjaZTY97/Xj5UlsyOdTBGkZ87zkxMVfR+EgYx5wTF+cqOhbTmRUU/+9gg+bOCjOhORPeeXJsO\nGVADaZj3NeDPl7i+sIaYPcxotMZm+n2KEdJcMySfK/yHfW1CHzcrpRANRbRqE3YgygHVDoE89LQq\nqPf2mbSB0Gxpr67o1md0m0BqvegHNUES1n7XUsUwCfAu7jR54pDIt4MP2ILMAB+JEBOprMnPk5qu\nCQG3kOjVNVuC6/LBRL0+Y9I0cvkwE6NyRtq8ueLNp/sFjDCxVFWFLaQOIwiyyDvvvc/b770NVIzH\nIy4vZqw3a6pKvO5O7yHGQGEMJ8fHeFqsMewfT2kbaTO4c/uY737ve3zr29/nufv3OT46YjycMBiO\nGA5GLIslxtasV2vK0hFDR9c2LBdbNtvI/t6A1XLbr9NvuARJJw21daE1452IOaWdfEiRvqb9ohCE\nuyAgG5HpJNiGfm6m/GxCfYboMUH6l1IqJTlxse9Dzv1OIYinu9luuJpteO+jpxgLdVkwGo7Y3xtz\ndLTPjaMDjo/2ODyYMqxKfAhsty2bpmW9WbNYbHh8esGTZ1fMFmvWjaNzPUlFXg+SQjNZNr/IkfAh\n8OjZE/7kz/8LNus53/j6txmP94jAYtnwlz95k2bb8vrrr3FwuCcxmQGfV8UQTUma/dpHWYZ+4rk6\njHoWeqUtxinbAr0kajI50u/Tl+m90zQXSO4liiiV78vHWgyxKHTgdjJ2ypOq7x00ZR4xEJ0qxGSf\njPrXyXlNDfvalpJ2IIWQIOdOW2ZciDhvoBgwGE0ZDceMhwNGgwFlUSj1WW/opDczoVj1IaL0xvW2\nQubEah5IBD76rKBF6YccmYu+kfsU0onE9rNrzC2JBUvWvsCakmFtiFMxrkUhDsh0OhXgzq3bGCJn\nZ6d0rmG12TBaragHQ0qdz5nqvcmSRKJGcH3rRNz5M62DOC4yvLsfhp5i+KgtNf2rU/06jYGLQDBq\nwBTpG4LNqtBElJxdm1yUlMXvDAbuafmitlfo36O2Q6WxUV94wvrrC1KmvYdmEyws+1b0UGlT6uZa\nba1Illk8NgqzszDCVCEUVim9k9Cq6e219mEihRkyONwntLdp7l2xvVrQtluiSwr0+p9mR1DV19Qz\nY5Jp3tloox7LZw1gqhr2/WTGoGCg3tjaEAnLjfYjLnFtK4c3qHcbCzJFW/rc2AmziEnm3MhhyTUa\nEe6yrBiMxlJDcI73332Ls9NnPHtyyuXFFQcHN/DO0263zGaXDIfHGBO0x6jAmEhR1Ny+dZetW3A1\nO+PO7edZXF5SVp4HL73My1/5Kjdv3mQ6HjMY1BSlcHsKKAqqesi22VL7QNtsWSyWzOdbqqoiRst6\n22bvN12SapNUqKRlIoWx2GIn/VVouiVIxJ0yC8ljT8ouROiczKu0akkTBZeAKRMCzmAK8aSNWpzg\n03pqBBJ2mZUg2ICx2kCvhftgxCEiQtN5ts2Cy9mSDx+eSmN+VTEcDhgOSo2OPV0X6LqObeNYN52S\non/+ERRHLPZRwJe4QoycX17wT3/8T2m6lu9863eYTPYglqw2Hb/85Xs45/jOd7/J8dERPR1Z0BYD\nSOygyUwS6VOAsvxIbZ/r8nitjaH/WbJJD4oe74sT0kOYZN5ovVHaM0xWqEnFxD4gzMaHXA9PvWuW\nQDApdyO6pHe6U+ia8ms9gMgYjS6SiYoRgqFThwtTUQ2GDIdjJuMxw8GQqqwkcgtpM0PypPL7pF+R\n1HqRAEM6+1J7rvuJNuleVV8ZHUpMp06H0ZSivKtN5RVb5jYFIiK3ajWsNYwGQwwyuxQie9Mp3nUC\nBEPaNq6uLvDesVqvGQyHVGWp8061dxty1BYTOhijvMgdiU83OUY2IfQ/6+4lsA8ha0qfSLfTQdT3\nDt6rrZTaID5k+sMU4UkLhtkp2ykqNkDU0tsu5V9IwJpdw/vl7eGXRZlGgolywDR0FryMLGBKIoDs\nudnlGNz1Kk1BYSo1MhpyB/EERJzSwQtaiywwlaWYToldx/jWHTaXp2yXj2jniiM1n/0ok5zG614N\nMYux1CyS0UxmOtGuWdBwXLP++veoRrH/wAj4dUszv6Rbrei2G3zXYm0l4IIgYXxCxGWDnXSKMZB6\nmPRBjK0kbWWE69F1Dc12zfvvv8nl+SVXl5c0m4YlKxbzBZvthsePHvHNV+9T12NWq5XsQQwUtuTg\n4IRiE1muZhxMD3nyyceM9wbcvXuX/f196qqksAVlUVEUBTE6ri4vmc2XDOoBg0HFdrOSwv3lgrYL\n7O+NWG+2mi6VNbcGysJSlQKsqKzWeHYYK1LaPauRaOi8z9ITNFXqUwouRpwLlOqRR6LKlpUxXemE\nGhT+3c/R9MFrpKTysIMI9LHD+CQnPfTbWiuwdbJfJgAaF2idZ7VpibMNGFXFGm2mGurulX27z1y7\nXwsxJvPzK6//7FUYQ2Fgtpzz0zd+RCTynW/9DtPRHrEoaZrAW299SAyR7//Otzk6Puq99GhUscqd\nJRablFLNxA0Z4VyQQvmIx3zGGCZUYw/Tl69bk9Dk6oSqY5hmfkp5JGVcVGkapG6JGlDJH5KTAioH\n6XNNjvT6E37tRCqjTK8k88uvbYIPyJgyU1ANhgxGY0YjNYaVkL2HiMqsmtxk2DTNmHRfHhGV0h+K\nzswMX9bm/bWmr4XnNUN6sSPkgb4pkpS2hx6sI7Rkrge5GDA2UtfSHhKB/f0T0mC+gOhsa2CxWtA5\nx2q1yoO/48Aro1B/mCJGekm1LihOZH/W87AFk0+KfkdAciEK3kAcqUKyAEn+guz39b0WZzYn1FVv\nYCBiSRMrUjhjNJBKDEUxR9M79VhFl/46HtfPu76ghqhGJnluyYvfXRr12AwRq4XMf/Dv/PsAjJoh\n/9t/43+fD1D2mHbeYVdziJJUD27XaBCJPuDbBrfd0K1XuG2iCbp+r5lcTj2Ga95jep5r25heJ6m5\nVHtIaZnkYaROwSzI6V0slJM/p5r+gmo0phoI5H/XUhvgncm7APz7X/8PsjeTb2Y3/aJffGv0FmHg\npe3CWv43/+p/SKPRYPPvN4T4mB+ZN/He8WeTN7h58w6L11a0bdM/swHnWzq3xbmOXw4fsVwuwMJ8\n/4f8k8EblGVJWVaURZnTXF3bastAZPYvzAURt9nSdR5rDaf2ShGsMQUDJC7KRlmKMF3WRAlXEPvH\ny2i9QLy2GZHrCqwl4GyCzu/u9M5+JtGM/Z7nn7qmzJtre58cqHyf+tvuAYqfubdEHvDXdX3Zd4sm\nElTZnMc5/9j+KT+a/pTpZE+Mk54dYwzj0YDp3h5VVfY3bviVaL7/52++h2QMfzF489rX/8Fz//bO\ne//qOes/tt+1X/tcsTdqKVrc/d7ujeZ9ufZzYgTf0vP1P/7W/+L6DaS/GHhr8h4A/7fb/2/+lYf/\nEj4aimrAcDhhPN5nPBypg2izs56mLvSf1d9X7qs0pnd0oyEYi7GBNFuRmFC7kuo0tsQaIYkPsZP2\nAjWiomL7aRKYQOjInMrp51JEmdbeWjG8BQUHB0dIUKHvkxC51rJeLdhsNqK3jSEypiwVFawGLIMP\n88gniwk9fZ+cdY8Pnt2zGDW9je67MUKzF+SbWFOB8ZhC2Ye8YEWS7gtAEfph8wSrst33NyYnKNIh\nQ7DVIGKUJCM54RLBCmfrl7++OGWavCKFYJuo1GtRILVRD4w1A0kBmM9g53LxVQVKl6unfPrMR157\nLaRaCzZiihJb1ti6wzpB+iUDnUzKr7yR+dVD+tmP+PVXb6l7c/VrzGmE6LzMBtNmW2N7erpf90z9\n98xnbuD63ezeelCoalkW1Af7eBfYbDYYSpqmIUavfXafNfban6RIuaK01IOaqiqzk2JtIYcyCs2T\n854Y0F6+Mn8NxMNNQAmbItkMJoi53rJ7E6mOdE1FqqdlMwXXrxrD9DZidz+zy/lj1MHadap2130n\nUvg1i8Nnv/wr8qH28jd9/7+ta/eoxChjpJbLBYbIZLKnqTeJBtbrLRjD3t5UgBbJYCWlrcYx4zZ2\nz4oaG/MZ2bzuhvSGbncfdr+bf/91Hmh+jnS+zK9uPJ89gfFXbyJ97zcd4t7K5s/fFBv+05v/P/6l\nT/4+xWDIcDxhNBoxGowEUVqkyTTpJtOzmGy40dqrUVuZIv2d5eOanFpB1ltbKBm8UaS9DE0obEGw\nAh5LkV+a/5e4U0NwhFBknZgBUxiMCXkkY2EL9icH2VGJRoctGyUvj7DZSGbJFoUAiWLE2tSI77OB\nT+Agr3yjkYTkFF2Uh17nO+nXzJiKFNykftbgo+rzRBV3XTwMRpjNQEGG4EIC9/Tp+DQwWoYXi85J\nfcEh1Q2jZoSipOm/7PWl5iH2D3/dgiVaInF/pEEyxMg3Hr/Kh8cf8eD0Of6X//G/R2ELBvVQeCCr\nGmMS2MWIRxWD0vtEvHN0SjVkgbquKYuSttmyXSxYn54x//RjLt/7JZfvP2OzMoQo6YYKGRdVGpmR\nYZA0U4J72yzYevf6KKWJDGxgaFsGZRTy6hBpXCfNuqGgjSVtMMhIzEgBlNYTjac8GXH03de5+a3v\nc+Olr7J/+y71cJLHlFhb8j/51v8UjOE/fPM/VMaeEqO1vqyAFAhisPw7L/1bBO9ZL2c02y3/8P/8\n36VpNxg69g+OcY3hJz/+KZtmw+npBf/uv/cfMB3e4cc//AlNu8Yagy0NwXRcXn7M5eIZD+49x9Xi\nGc+/8AK37tzm6OgGN27e5ejwBjEaVssFT5484uOPPiGakuneAe+88w7/yf/z/86HHz2hLi1HB3sC\nZIqBopDJJUlAXef7iCGm/lLtaYpG2iUsOUsQgpI0xEhHwLmIUwXTe+FQl1Yp3tDaoVFjLAciEUcL\nsEKBS9pugSLb8mE1RjMQgloVQgmfARbaeaOHUv7uQzL2KMp1x0j+GiV9Xbf/NgmbL7i0DGWiOCbW\nBOr9yOvf+Srfev13GQwmdF2DDx3DquL1b32V73//O+wfHMh9xP6XZEljr0D0vMhzeU2xChI0msi/\n+dz/8Nqt/D8e/1/EPKTIJaNcotyoOtI9h6Yh6oSNoD+fCaK9cvmEKIo/Ro1uyIjEhEkQw+AkG2Uk\nOiAa/p1v/M+IEf4Pv/jf9b527BmgIPI/ev1/zluTd4kxUtQDhuMJ4/GU8WjMKLVXQP4skJRzVtcp\nu2VQLk1Ztxi1pJTlbGdFs/6BNPNTosVk5MVIFFaMn0Rdeh/Enag5ZgMjyt8RYqlI9v7zIpHBsGbK\nVMaXBWkrCT4QnMuGaLNZsdlspUwwGlLVtexNIlUhtbRoXLYj1BkKuGMQ5bGj7lXPZZ2+TnYYHBru\nklLOeYRUiHk/YzDSvqFEeNaUIi8p5RwjPnTZQQ/pfO405icGomvMDV9wfakaokkej4anqMeRT35u\nQo8YrcD0tyAHIxduE3rJyAb2PBipRUEiygT/luKr5IqLakA9nTI+uUW3XdIsNrhmjuuKndZcowJ3\nHXqdvtv7ssJPmmC/aeMhRTQhG22Z3Sg1hEJDd6PUQSYG3KpjfXbOdnZFu9niWwcDVfw5wt6JClNt\na2eN0BlgqVgOEqHVwxHbzYaiMkzritMn54yGe1g7YLlacnZ+ztnpGT/76U/45/+Ff53hcEjTbLSx\ntqCsa60PVgwGE/btCWU9pCwG7E0PuX3jDtPpAU3T0TYNs6tL3n7zlxyd3GaxWPLRxx+yXGyoqoKb\nJ4fcunXCerlkvdpooV8JiNFDHqXoba0hhjTeCkV0JgSx7kSUVgyh7ROo/m60lzYtBGUANHlzslEz\nWoeyRIxNOyxSJWmWFNEaJW43GJ2uLUOODcEkYxhVmapBV+OcZlFmLzj2keNugHJNfq4HJl/q2nnZ\nr1yRfn6x/Fug/rPFgr/8+U8Y1AO+/tp3KYoCYsl263jjjXeoqorvfu/bTCapJUNeX1hZpwTkyJSB\nRg2aRgMimr/qYSePPqpuyAreJAWa0n7xmkLtB8CSFzDG9P1UyxSGF5Nz7MkoSV3JKvlFQmImhSoR\nkiAtE8LQ6ABlH0NWV1jLcDxlMpowGo4Y1AMll0+AooIYPYIM7Y19dqYjQAna62swWgfb2cl0y8m5\nMymAiAoMA1tYbLCYoMIUovQeeqeJDZONjjySE8OmpNrJK5NAVT/QyJkaDYf5fKZDKE32+v7Bs9mu\nWS2XBB8YjoOAcqInoV/FmZUm93xmiSTgUE8mSt5bcUo1lWliBvYkqUn1xEhUp6LPDmT9EZPxTEAc\nm9GlhjTKS8Y/ea0vZhIAeueVmNKrX/76clymKpPWapE2r72yzWg6TpgoimtKwqhwQqn1RnmxMNQn\nBJw8sNGlthYRTvWeEpuCrSrq8YR42BGae2xuXbG92BLmOkpEF333ppPv9Os8eXYiB0GapkKt0Z4c\nMdDJ07TJO0yv0vYQ1wS2ZzPWZ2ds78xoj04YTiakJtqd8ETTk4VGOLanx9pJa6WXRMB76c87OLjL\nzZMBH73/EcPNmvGoYDQa4XzHar3m7bfe5I//eMnh4RHz+Ux6clBoucwvltYMRlhTUw0mTKeHjIZj\nyqIi1obJZMp07wAXPOfnp5R1zbNnjzi5ccTXv/kqd+7chOh58vgpT5+cspov5YApKCMGMMFIeoaA\nC16mYER649nvCD0ieHd6yfVGBTEEMUdtZZEyC6hjouuoxs+ivax6FNJahiA1uEItWgKDmCiG5lqb\nlSoa0SWqGmJSOuJxpp/tn+Yzx87sSOGXPJG/zcGNUdoSXDBczWb87Oc/YjKe8tJXvibMKtHSbDx/\n+dM3GQ6HvP761xkMBrCT4u4nZejaG0jRicmApN2Dc/3vu2pSWqt26m2qENlx0CPklroEOBEYvrqz\nQT/fqGOi+yCGQbJPhSmIVqegx4gwBeWVll9GjE4RC231gARoBElfjkZjRsMJo+EuiMYRkHpfsmfy\nXlZFQuk7dgOD3XSeDl01qSdR11n6bW1uRIc0hNjmZ5SftXivzfEp/Rd7CfMx4F3bzzzd2ZX0S86V\nILwn40m+B7G3wj26+6trGzabNTF2VFUtzqkxmmU0fXS++wEaZaZsQ3Z6THIUk3NvtY6qRBQxGT0x\naIXVQCQk9hrp3Q5WDT5GEflJl4vhK5TsnAg+eK0Tys8I2C3syA78tU27SOF88o6u46PIXo9sgrJa\n7HgXyasLWN3cADqHLWmUmFNaO97mrlDlXLlsQjEcMPD7hLZheusOm2cXuM0VXZfiAt1IyKIaVJAT\n8Hm30hZSDUtfl1hlClsRCkEY5odl56Coc2MA6wNutmBz9pTV1RnT1S3C/hHUNbYwKG2KrJOV6Nca\nq32dNtPaRUXhpX/7rmUxv2KzbZgtO772tfuMxmOZPWhgPKypjQUf+OTjT/j0ow85Or7Lw4cFzrdY\nTT9MhodsuznWWup6QFFU1NWQejDEx4DzHWCo6xEvvfQq3/jmM/7yjZ8Suo4Xnn+RF1+EohJnJ3jH\nvfv3CAHWi4UIqPYyCQou5PX0LuB9YicCrFXEW0o/6fYWhtJYQik1RZ9c4iSGeQcMmesVPYbRYJOy\niwEXsynMkYGNkjonRm2ilgNnDLlJXL6dVHy/10H0a1ZqRHRoWexxZknN7TjM/Z+fF/f96vXZaPM3\nXbsy6L20ZPzkZ3/BeDLm7p3noRIawM2644c//BmDesCrr71CPagkajCSfzZ2J9KLSX+mrEb6pOze\nfuYGtM9WvxU1ukwlEZldGHJLkzghcgqz0kLxCco2EnVkgtEpMwFlNdE0bAja50b/uX32BY1OtPld\nn8V7pyOJ1NRby2gwZDioqctK0o7GKEA09UkmmVBW4yh7GRRPYVRBi9Og9VvNWkjfYFR9mCbZyM1a\njVjlBvvPCiEQTCK8VpJqY8CkHkFZJu877ROUn0tRkTU2y2DSldYWDAc1YbqX10cIL3xGsy5DoG0b\nwiYwcEFGsVn55XwnSGEF8/TaM8077KM7WWndMz1ju05vVCfCIMbWGBQmrpGdETq/qDzOJgTxk2yP\nsJV1ijJIQXVlRqum1rmohyIk23JdPr7o+lIRohSM487GyqLH6CVGNCU+N1f6vCnyY4VG13roVAFG\nk8izoxZy+w1L/UziZRTqQGmTtTUUgxGDySHj41uMb53SXK3oZh0+SN+O0nDLRuq6myySO+OYgNQS\nETB47W9KwphrAMbk9I1N96jvhpFeQ7d2rE/P2F6eslnOaJubVKMR4sCa3gNXrRl10GnWOZr6SxFK\njJHNes1yPidiWa1WjPeOuHHjmPl8S1lUlMqMXxQF5xenvPXOm/zx33ye6d4Udym1FuMNg3rIoBzJ\nbMCyoNAepBAcm02DdwjizUtP3dn5JVdXaybTKVU1IsSGtu0gtgwGQw7291ifHPL0yZB2ttBUT8Q7\niQgTMbq0pqV8vzzjrkMsKS4Z/wRB50qmSkh/SY1Au8+0htjH/xIN2iw/ygCkBzA5Py4V9KPWAE3/\nOQm5F1JRuXfuswNkP2Ogk3oFcn09mw19sQ+/Fob1uVdEWyyKUr3430TwthvFQPCR02dP+MlP/5xh\nPeDGjft0FEQcq0XDD3/4UwbDipdefpFKuPPE087voU3jqtjT2RRF9Nl7SAUGmyME4Ry1OaKMpLSX\nyamzdAJTPx2p9cMkw6f1o5wOTxGn7lREja3Wmgw73sqON6IKkgguSjo8mCI31FtbMByOqetBNugx\npPpUWtjYOx0xiBLRvlrBO5AlQJYgpRBTW1rcsRUppWxz+h7tf0Vtiih4qZES+uhb1sDlGpn3QSJI\nJ/2KxvaI1HRLKUrDBExRMBhOCNHiIzJto+ukbptQmYvAtlnTuYa6LLNO8cHhgrRPpbWVkob2+O08\nX3KcUnuG0SyKTT2UKOl7kBFO6WAkA4oxFMbgQ3LOrEbtu+0eqr2DomJ9YrfR58D096lMYf3rv9z1\n+QbRJEXem5NrXmLyztIv+6vH3kdPgUQGiU0gp0KhNwppU23Qorq8p7FGGjajTMMAMFWkGA0Z7O8z\nunGD9ekztqsrmtZjKfPmGHpYvxDDmqzobN5EuaSElBK6kreO6fnpq4wp8lDxJvUn0Xnaixnri1M2\n8yu2myWj6T62Kq99jjyW1L5IRrI/yeSYIgTWqwXeddiiJnQrNqsZ3bZhu9ngoqOoJf1aFJbVYsmb\nv3yD73/39zk8OGA+X+CcwwcobUFdjfAhYEKgbTe0nUyMJxY0Vae1F/CuYzQc0LYty6dPKMua4bBi\nNJLajPdrYMB0MuT4xhHL5YLOeanzBWl09tlRMrgYCUEOikSTNnuLGEthS5ntlzzF6HKaKK8ZKW1q\nlBNTjSyRUtP1QhkY82QRo4chwxNSD2RMxM9KBRajAg/0PeBXEXBR1HIaWpLKZclRw6CptNjfcNrN\ndPi/rEVEPmBP2yku55cZ4fvrLhk6bOhMxDrPo8eP+ctf/ITf/919ptNjQhOJIXBxseDHP/o5o+GY\n+/fv6ZqbTDqRCOZ7mczx1GduvpfVSB9RqctPnv6wY7RkrdOiJcMrrwnRS8/bZ50gdhWZ2Ukd2p2f\n3J2QYPrXaYFX+rNjbq9IoBlrLXU10N6/dE9pmk6PogR2DJsSXJv+a9mZ0F7NpCuNtdJenLJieUEj\nyj4gEV4Sop1n9MpfGlXx9zpXFL9zwncq46McNkpfd54aQUqF91q1KgvMaESMnuC77NAJX6rMYey8\no222ONdQ+0BdVUS88vV6gu6H+gpZuHfTuolbNn9+Pg55Gmj+L6WYY17EVGv2hCgk/8kpy6+LKDbC\nakkocb5GXYNU39ToPcJndckXXV8cIapySfD2a2gj9baC9diipDBFX9jUn7ExIa16CI3B5jaCbHKi\nbKrFEk0hXpgKUDSxb+qMAtioh0OG0z1Gh8cMbx6zvpzhu9SOavI9RLKJwSCk3WIUU0KVvNV50SMU\nCN2YMzG/m9j8mP1jUZ4SPVtj6JYNm/MrtrM5zXqFd44yDncidpOpmfpLPG2BOStyDoP3nma7ESNS\nGNazZzx7+ojjkxOePjvHu4bpZIQPjroqiSHw0cfv88mn7/PS89/k6dOKrttCDHgMdTWlbT3DQgiq\nm23Ler0hBostWuRABrwL3Lv7HC8+/4xfvvUG89kVe3t7lMU+Pra0bcN6KW0bB4dT9vbGXLYLiWSi\nGLRUb3NempN3QRniNapDkThsVQeXRUlnw3X0yM4qpdSeeNM2V7vk+4ngWdYzxIjxEW80YlVl1rfp\npkyAlWg59qmprF53DFnUZ0r3nqaLZ38mO439IUx1z9/KGOrrnes4OT6iLAtOL85lwOtvuITtRyS/\ndY5PHn7E4eEbfPdbv09dlbRRmHsePTzlpz95g8l4zPHJca69kgyXNZkUedcgXesH1DVJKbEUvUka\n02RFLPelJMtIWjEGn+njiDuGRZGNpLc3oiNS2lU8fZ91hLQmFBi7A3rSKzX+exMyyrIoK+rhOM8R\ntEampKRnuj4iSM1FTMo1yVeqY/fG1yiALOl+MYryGSZRjPVWU8o2RnRf8AHvpM9YCLwdJlp8CLig\nQ6wLZAKPlo4MgRA7vOvE2fWeoizVEO843STcgw6yNmIUx8MhwU/FKfQSiYrBE+fSuY6m6ZRaUdbF\nD1uC67SZHtWXAnaRtSz6ZUukCGqcIyk1niLKkPESKapO5pGEozCSZicKK5EIRaJ8k/cPKrMZ5WpU\nbklZzBQEqf3gr6ntIuV/DSjM2QDXD6a0DhSAKNUcMMp3tR4WxPmygs6UCccSIaC9IiYaDJ5oI9aU\nxFwoNSrkwoCf6I4iUAxq6r19hse3GR4/w69m+LZQxOauoVUofhLcbCCzr5LvV8Uup8h216AAPH2s\nmCRd0oOWrnFsLi7YXl3QrtZ0bUsVwvV0WxQggLFlViSJwaUoUM8v7vQ1CjOFXzVcXW45uX2X7qc/\nwzvHZDqhLCvqeoC1hmenZ/ziF2/wyle+yd50ynq9JDWqlrbGNQ31/ghvHJvNhsVyQQwS4YYUIUUo\nioq7d+5gLFxeXXB6/ozVco0tDOvtFkNLVVZgDdODCbOrhWx/hrIoiEUdYDFgXMsKCKhIPWZTQEgr\n+xuuKFFitDFTwhkM12sViYVIXpDT7BhlC1G0cgLhJIOVZVbThaaXCWNSRNnfx2eDJpuMo1rRpDh/\nG8qoa48aI6vtinJuuHFyQiRwdn5+faDwzhUiuCBDlQvvWW/XvPfB2xwdHvPyS69RVhVt9Lg28O57\nn3JwdMjvfP/bTKYTSOeQnhE4jQ9DU8EphZkWQUpHquyNIbOSmdSAvuMcyB2q4UherS46kbhDrkFC\nHSanOXpdT5uNQu9hBLAGG5LxTPdSCNtQCOJX2YpqMGY4HOcxbEYjqlQXi4pkJNfx+8HhIptyvynq\nSancYERxR8U7BGW4kggwkInLlV81ZncsaiTlcK6TVH0wwqYUZBp9mkjfQ3c8uU/YddqesuPwZ/9F\noyXt3xOaPqHKrMqCyXhC1PYO7wOuawm+I/gO33ZCB+kaQuOwJtK5Id4HwUWqysstM8HofvURmkSy\naY/UECQApUnFLAUqqfAmDtTkhIl4KNLZFPjYZochgSel91NLXNrdIE522jvt3f4tWi7gS0SIssGB\ngEKQdwyBVEej5tY/870kGKkNI6VKtNWB1C+mAiZ9gpYYXUanyVsoTU8hsxDBYwrlG60rqumE4eEh\nk9u38auW5tT1nmb6FaN6G7sRhTxd2ruIwSscPyNjTcxRg0wm6OPP5HP0bSMRGyzN+RXry1O2yzlt\ns2IU94Bk/HqlKd6SeEZG+zBjiNh2hVmcY4/XFNFDCDRNw1tvfoCrJ3zvd19jPN3n0aPH7B3sM5mM\nhD+1sLSbljd+/gY/+MM/4vjmCRcXZzSNkL6aYDChFENmIp3zbJstRVFhbCEIcwVTFEVBWZWcHN/k\nwYOXKMqSs7MnfPDu+2zWWzydtEkEi7U11aggGNiuHdGlNZfn3K3dZgULklYqNH1qxXg4r3Wkncis\nl6QemBCjNBkbE9W4abRv+poWRAVAmN4/DKmWIy0a/TBd+TNNDUj3b2IfJyU5SdFmkcfOJDHVu4vJ\nQ093/SuP8qWuECILHf918/iE4D0XM2UI+nU/H8Uglh6sc8znM956++ccHR5zfHwH5yyxqGhbz89+\n9iYHR3u89urLVGWJUTUQYwKCoLOpQnYIr3kqure5bhqFTSRx/2ZlqD+cazw7+kP6HxPHZ4+2DFpL\nV/yrSJDWocX+yvzJRDMnpfjrZzugvaNAXQ8YDkeMhsOduaTp/XSzUy017MheonZMzahaF5RsmdvZ\ng4SqTSm/lCZWsFkZKbLc5cXTVVBqvZDkVyOuWCi6MqE5QzY+0quZSOmT47JbrxS5FRpCcTZjLgVB\nWdVMRlbAOc4RQkfwDuccrutou5Zu0dC2LeBxbqTtSf1JSPcbcPS9hhCjx2kfJah+zytlf0WMxBlO\nCON+LBS6/DFtoknZxYiEJGU2wEbPewDSBB4TxbnQbYF87198fYlpF5EYjHqSijZSO5GExap3Lfr9\ns+FpTO+SvXCrNUVRHX3hPLOeRIg2zVW02WsrbAnosE4bsWVJNRpQ708Z37iDX23xy6f4dejrgbEX\nwZTq3H223V1Sv5NUJ4ygnKrp+EvEIAZXQvGYN0nSrG4V2FycsV3MaDcy4Ldi+CtxqB4ZvRP9jO2C\n6uEvCB+/gbk3Z2wiW2toQuCDTz7i0fkZPm7Zn0557403mR7sU9XSjxO9pzSGp4+f8LOf/IR/8e/9\na+wfHHL67BmoU2KxuMZQDHRcTjB4HzFBQBHGROqqYDwZcnJywnKxYjzZ4+7d+3zrW9/mxs2/5J/8\n6T/i9Owp4CispSoH7O3tg1ngWi+zy8R3Ivn6KtOA8OEqGFmyC9EqDqFvrv2NFmTHT0ogyGyytH9J\ndsXkz4shkseAWZs5EH1MPr+mwk3yLkXxJRaeNFYq3VLaxQQY8nHnO6qc0Of5tZb9t7i8j8znCypb\ncOvkGAycX810MkR/pU+RuX6Bqgx413F29oy33/kFv/e7x4xHI5ZhizGG+XzNj370Uw4Pxtx/7jn6\nCt9O+lDfNNVndj8wmR3JBvU9xiFF3UkRZiOgkYRGmX39LGj0UGCsptU0NZbGomm4I+TrO5HH9SDk\nuqMrmB1LUSlP6WDIoB7k25HoPekcIKa2kZAVaMz3TU7tinFOn55StcXOGsWdfS+wNlIUYhhtUZJm\nIqIRb986EXNmTQBIQXv0IhiLpcCagCcSgwwUdq6VVGtw9H2DcmVu2h3C8Ax2QeYOjkcTzUZJDdF5\nj3ddJkVZLmZ0XUPXdXQakWYdGnx2Jq4ZYmMB6d/MdBjxWlyR/5Hqf1aDg+RIZPc5EToYre+GnbNp\npEfVIJylUe1ID8JJHMEFPl7nW/2i60uhTH30mFjk1MiuijBq4ozdSW3sXhFSPOWDowwlUZGZaRyM\niTaDTaK+pzWlLKY0JeIdYgSjEQaD1GtUDRhM9vD7x7iTNe35jE2zkRBfxUAKtMlDiTm9lZRAOlLJ\nggYlm5UWiYjRBt00aCpN8CbHGJIWtgDO0F5csp1d0q6WuKYlTnpNnvCX4kDoRhkDbUP59F2Kj37C\n6tOPcW3DsDCMC0vTdSzmzzi/tPzsJ2P+9t/529y8dYfHjx5y795t9vf2mF3Mca6l6Tb8xV/8Bd/5\n7u9w5+5Nrq4ucJ2XtocI68WGYVkwKupcSzVYgndC1VYVVEVNODxgOBxTVQPKqmBvesAf/MHfBCL/\n6B/9l8xmF3gt0E/GB+LthkswAb8JxCDpcmvAEzFB2VWsNiQbQ4HF6oT1noHjN8thjtwsveOkykS+\nEShtgninaNQIcl032Mc0OizJqR4gI1GfD6QfVgctvS7dhcmKWeQUUg9kthxG3iNHIH/FKxm5i9mM\nsiy4c+MmxhjOLy9/JVJM/nPnZULIoBRO2g8/fpeTGyd847XvUw1KYtMRi5LHj8/44Q9/xt7eHocH\nh+q4KAIwphrU7hp95t6yhlM3M0ai9RKtRV0dq/WbSJ9GTaWI7HRKlBk022SsgNDymiajiNYh6VmF\nY45g+6UP2rZjipJqMGAwGDCoB5IZyc8Tdxh0ItGLU9u33fRGNpm3Xd226zzkTIDWOBNKHpXnXALJ\ntc60qnZnfXWIndb2fOhwvsX7ghSgR1Ka1dO5ThiJnJPy7zUtntLc8rdEu9YDqKXxfjAYyjkJgeBb\nydA4r06pNO9385auk9Ypr+CZBFQJxJxKzusYY6Z2S7KfMCWk9bomsdqSY7SUFoIy70C01x1LARKb\nvPaiv9O6KZI5yamuVz6K19yFz7++OEKMkeC9jsXZnQwtsi3evsUUahBj4k402eJbNTCpzydNjgBy\nmkvKB0Y+wySLr/RP0fW8eUZpfIwX1FhZUg6GDKZTwtExzckh7eUWt4kJ2EwS/STOu55iSvaKHpSs\nuyCd0rQE9HmiGsQi3Tj2WkIt1VoNbr6lXcxo12t822bBES9QXMHs1SmE2y6vKB79gu78CZfn57Rt\ni4mRcWlZW0GxBu/49MOPefb0Kbdv3+Hi7BSKghs3Tjh7dklZDTCF4fzylD/5R/8l/8Z//x9ydHTE\n2ekTESwjSrLcDmAclPnCgZXaZWq0rQcj9m1JWW0oywF1VeG9Z29/nz/8wd+kaVr+7M/+hPniStO1\nNePRAc45CDIItG2QPqLYl7Sl/mszKUGCcPeMJP1q/kZ5RNoSEpDAXHuBgkuiOCkxefExKVBIqbCU\n4o+YNLOVFHUkkJRsvcZD8fpd7QaA6e878VDOJMTPfZovviLSC3t2cUldlTx3+xY+eC6vZnJfIclx\nf69N56lLT1lF2q3jnXfe5ujoBnduv4DrOqItiKHi/fcfcuv22/zO977NYDgg1e9S+jelxtLXe/eR\nrOATPVZMRkZBLf2/IcbUh2vUoKWaW2+UclossTTp90IuzkYleu6NsdnZxbRWwlxiKKqKuh7Kr6rO\nPL/9/kkWyTlH23YCsIqWogh5YIF4XomQ2+Q9Tso47kRekcSB2lf9ojbXO+8kqtcIWmqd4gwaL/og\naaegMhO8tIEIXsLldQEIWkfsnPuMsU07JOuYeij7yr5R/SXZknowZBJkmHCgUB0gFG9d19F2jcpY\nULawnXMUNLLbcQSDvq8hasmpj9qTjow7P52NlZaO0gQVggQjgYiJZa7HphJbnodIzJkEMeSaeUuR\neoqQP6d16bPX5xvEIMIYNLdurXZ97XiHoAZRB1YKJ182PWALQnD4aCiNMEIUxhApdXm0PolFGEiT\nJyDTJ5I3EK3p6ZEsFJR46ymKjqIqKUYjqumUwdEh9d45oWmFDJfkncoWlPnedtCjO3ccsNpTaXLq\nWSKBXcWw+3tWpfJeMRLWgXZ2Sbda4ptW++vkxyQ1lwRYDL91DfXlR1RrQRO22xWuk6L3cFCwPyg5\nrCKPnWOxWPDmL9/kB3/4Aw4O9rk8v+Dm3Zs8/PQJm41jOB6wXM55861f8Ms33uDlV15luZjRNoJY\nxUe6VcuyVDaMGBkMJ4ChbVuapuVg3zIeSTNv64TzsygLnPec3LjF3/27/zyL5RV//ud/Tte2GBso\nbMF4uE90kRBm1BV0XcA1AhLAJpdBo7HCyhrv1CeuT0L51SthO0KIFDb1HKqjpR5hSncVxlOokyY1\nSlUVBtJQ3N67R8kS0sYaLdprJIqkgnb9zDwQdhfskWzvjkRcl48vefWBjChhK6nZ08sLxqMR9+/c\nwTnHdrMhGGg1hZqMoguRTeuoq0hVWebzBe+88xYnx7cYjWuWiw3GFrRtxy9//h63b57w4osvUBTa\nIhRkrzIGMK3Tzq0J8bQqJ2VdUQ+o99QR5HQ2WQkpGvszaQstnyTgVUwns2/ZkL33suaJsIMdR8T0\n59B7AeKURSnkE9VAjOFu5ipCDIauc6y3DYvlkm7rKExkOCgZFELCjZWe3aKuKQqNMG3qsJXG9+ts\nLSYbb7JCvj6+nF2lHvt16WXEilEP8ize2lxXlaDA4lxH225xXUvXOawtc6Ylrctu24NF3yM5Mbqf\n1hoGgyF78YgYDd4LyMd1LT54nGtwfqMMNz47I9I+p7VEkxxQo46tfqYOC4hBjaDOtiRng5w6jIac\najaFYFRNAthJndIYi40F0ViiDWpsdUXTsxiDMZW0IUUnEpg+47dAt30+HlXhr9H3QBUTS5IVDtFp\nM66lUAh9ZMcaR7BBFIr05WSx0NA6IRG1ShclAktw/ETDkxv11bNMnlaiQTNlQTEYUI4m1AdH1Md7\nFEN2DqYemgiJZUJuT0eEoHotJlh/8lpjvtf+P+iVtiGhmwzSRmANxM7RXFzQrOZ027V4e+kVMZEV\nS67dBsdg+Yzx7GNqoC6HDAdD8XY9uM5RmMDtkwP2pyMKAk8ePuLZs2eMRhM2yy2b9Za7t2/g3Zb5\nbIaJJcv5jP/mL37Idrvk5smJNGGHSDSSclnPG+bzBYvlkrZpsVZaPTbrDW3bUdU1o9EIgygO5xI0\nPnL3znP8vX/x7/P1175OVU4ITg6jDw5jKvamN9g/OOTo5ICDG3sMxzW2kDmJhS10nQogoQG91kN2\ni/C/ViBzPSfhCUAcMoHUy0G0Nh1IFcJEAiHUk2o4xCOVzIDJKboUcyi1KcZYmceInr2k89gxsMnh\niv39kcT9tzWGO8+arE9d1xweHtC5wNPTZwzKkgd371FVFUkZyPmRny+soXWeTdPhvMe5wOmzMz75\n6EMGZSWTTkyBjZazZ1f84ufvMp8tVIGleXzaehCdpsDyXYkbGxPXqyocrduJMk6N0qkNSk7abj7F\np0gqb0ih0YzqFuQ8JqWXgSGp2GaMjFGydcYtRCS1Z6zVkWYFpbZamATJTM8QoXNCe3h+cc6njz7l\n0eNPOXvyiKvzMxaXF6yvrtgul7TbLS7owN2EHo1BdVjSU/qmyTELJrcqJHnKxjPomsWws6YhG9MQ\nokRt3uNDp3qvIgTonKNVurXNeslmvWa7adisN/KaEGm7Vloouo6ucz19ojEa0ASlSxNClLquGI+G\nTCd7HBwccXh0zHRvn/29AyaTfYwthJ5RBcx7LW8QtLa4I7WSh82BTdrjEBw9YbvvdW1q5zBGUrUJ\ngBCl6b53ouVERTTLpLo2UwvGfqgw0UpWMqQ5qV/++hLUbfRopkivZFS6CluglAk9lH7n+ISgiKxi\ndxRqIs5GUhIhFVgl/JUgUPPC+TDK+1pbUFBKTcoidYUodU7qgmq6x/DmTbrlirZdQ6eHB5G3QDKI\nufqpAm3VL7WEWCjlVzpEvZJj5/USoFvS7GhhdpUxJ262oVvOcNsNoduK96SRtHi+kYLAYPaY0aO/\npFqdSXtEFZmOxKvdxkAXoBzW/Av/vX+Fdz5+yF/8xQ9ZNw1nT59w77n7xBh45513eeH5BwyGJfPZ\nGjOwYCMfffouv/z5L3n9m68zuxyxWrcZtBADtEXHtloJXVMh67RttsxmV0zGIwaDAXa5YbVaSXNz\nOSDEQGEtr7z8Gv/av/oPWK/+r/z852/QrLbSE1nXVPWAQvwmwNHsd5w+vaDddjoGx+R6SFDlR1YY\nnyOOoFGYVrENhNAfmBTV9AGWKMgUuUkKRtLihS1Blb2JEO1OYz197O+Vai6x6u/at5SSVe6IHS7H\n68r3t70MO5ER4L2jsIbp3pjlcsXTsye8+PxLNO1tPvr0Uwqkxpn6x1J5YdNsqStLVRYslzM++uh9\n7t27x2S8z9xtiL6icY733v+E5+/fYzqZUpQaEQdPSmv92k0JUajGAmC8GLR87KNGc1ZrO/INASJd\nW8CdP72qm5Tq1m+l1ghdl2tRPfLe15GO5FKLVUeJbI53n0Pe0XtHu9kwvzilDGDHQ+KgYjioKeuK\nEA4whUSKMUWEatpDdiBi72nt3K1QBO7yjiagnxjW9LyFLfV+kSHdQcoZEiBUpAPig6drG4nifDIq\nlm2zxZQF3gml42q50OBE6vh1OaQsKznj2QnpU4u2EF5k4T12dG1Ds9nQbDeUbUFZlFnlS8DglaM0\nbUhyAuidpx2yBZMYw3RahdWKt49O6/uafYshYz3yKupMRUyQ+w+QeixD6lc2mtZFIe4pwDLp27u5\nnc+/Pn9AsE4nNzkVAiF2+ftW+RB3veadvJMsukkbUKowRHJaxEgQlkulJqH+UhtGEj4t4ipfqjQQ\niyHuaXsitqqpp3uMjm8R1hvc8hO2M/UY+GwZOx2P66nTLLQ7X0uE2+k8ZeQk6VCmd5GG8SIGwmZN\nO5/RbTf4rhUjH5MhtBjfUS2fMXz4U6rZQ0zXEqMATiZ7E6qyoCgU6DKa8NLr36W+cUzr1pxezNks\nL3j3zRlPzy64nM2o64q7z91hvfoY7z3GGrbNinfee5MXXnyRk5s3aB9u8E4OZIyeuIVm0FJUGwHP\nlCO8TtS+uLzi5o0b7O1N2bZXNM2WZrulbUe4oWM4GPLaa6/zL//Lf5/las77731At+5og6Ma1AyH\nEwbDEYWFbk9k5uzJBb7zWhdOLgnEkHgIs3z/RkOi5UFpeYuSPrUJIYV45djd9zOJ8kJm0QHCnAEg\nxj2E3VjGZfnNjpjuf0y1cHPtuzn9nfRC+vO3Zcnor90chNR3t9stN24eEr3j8mrOwf4Fzz94jk27\n4ezZGZU1tF3Y6SWVJu/1tmM4EETw+eUzHj76iK+9+jplKUC1whYslkt+/su3uH33Jjdunuin62nJ\nPL+7d8ROvGf750WdhF1cdnLg0TUMn51okk5QodPWe6Moaysn1ZqkN7zoAUNO0SVAh2y3xRQlRVFS\nFFYnoKjC3X0CrRPXRcG4qtkfDIhNhw0enCWYTgjq21Zqa6prBHDnNUMWCC70DElxxxhmOsAUTGgm\nxDudZtEbFIP0xhZGwGa2kJ7ZkFKp2t9J9Joubdk0W5yTtRgMp5RljVfyhtVySaIgKmyFHzhG4wmV\nqXLWqy//BIgeY0vqwYjhYMtwPGU0njAcjrBWMhTG9HM1CTGnr3cZckDaRiQq069rXS+fz1zrU2Qp\nZWbkSeAY2dNEZZlClrTnnoC0yQhJhu1tYCjUUqjBzzf219SYH3yHNRUmeEzwujEpRNb0pQkUFFhb\nanykbRHJJloDwZJHdESrSiUg3YSp/qKbblITd2rWlwnKVlk0rNEit3LV2dzLJJ9ZDYaE6QHcvEs7\nn+M2F/imJ4I1+UDLsqeDleJWm918MfaprmWIohxiz8eRvi7v2zM5FMbDthGDuBakaYq2y66lWp9R\nr04pzj6mnD+C2ArSTbkvh6OhcI4aGY1ECJy9+zYX509pFivaxZrHj09Zrbd0IeJiJAbHvQf3uLpY\ncnG+wHUdPnY8e/qIDz/4gNe/+S0ODo+4uHgm42aMIXYRv/J0VYsfOYYDC2WJ6xzz+ZzhcMjhwQHT\nyZDFckvTblmvtwwGA8qyZDAc8/3f+T3myxn/2X/2/+Hjjz5kubgieKjKiuFAADnOe7rDhs1qw2ax\nJSDpWUlVi1lMNT7Zlc+/jCJCMwFycq7QmYkgkZJN4A16ZhXTe8l9WkdlgcS2knYyfWcncsyi3adJ\njXqEMX8Gvz6q+hJXfqna8XSWtk1LYUvu3b3Nx5885NmzM/b3D3jtla/yRtvSNFus9WwaRyBSAnVZ\n0PmO9XZNXddsty0ffPgBD55/mdF4LPMrQ0WwQz59dMr7733I4eEBZVntWPYEgNIIeScKSvSKab2j\nPoHRiTe90tdabiL/JqUSla0oqsubBr6m9Y6RnviyT58ZXaTc2pMGwOrPW2t0rFiRgg2uEQDo1woD\n47ri6OCA2kTcZoMNXl5rLKa0mLJQ5G0yrKIpvIPOC9CNKJGdGHS5e+9ltqtXpGnXbXGulf7LlEUA\notGWKFtRlRW2VA5O5QeOwWgtHG1mj3S+o20bXOeoB2NCKKgqr+0Whs16Q+c6PJ66rJlO9nIt1ZBq\noAmNLQh5YqCwJYOBjMOq6gFlNSB4L2C9nR5O9Tx2AoG8zbL/BmKU2bSScQs5Gu1HSRnpMgixN5Ia\npSiFBhSFBhEmo1wFtIXYIdPXTSVwKTSRKV6hxarr++XTpp9vEDspaMamJefA0kFJhkAVkjWSnrBF\n/5ZGTaSLCdKMRIxG4utIahrVtBVRapKyKiKEXgQ+GbMMcNE0QkT76HwgBi9tA3tjTDxiur6DW67Z\nPGvAFwTxLxWlqPeTz7hRfynFpEZpxwIoCMZGs2NIowpTXziXtJwY09BEmqsZ3WKG26zFuIbI6PRN\nqtN3KVYXsFmTWXx8IDrJs5e1kOtGYwg+YrsG/7M/4eH7T3jv2YLZxtG4yK37txiNR1xeXvLSSw+4\ncXLM3Xu3Wcy3xAjObbmanfHOO29ycnKTW7dustmu2CwWvVe9ATcIuD2pG5VlQdc5mrbh6uqKwlqG\ng5rlcsl6vaAsijzo2dqKvekBf/iDv0nbNPzpPym4ujxnMBgyHAykPUYbsEejPSbTBc2mxXedRPd6\n6IP3WgxPUcHn25N0BAuTDJHuCWSC6d4B1wOTc3BJt0WwiWZK5Fl6MSGRwqd7iFr7FgOoKMRePyIR\nTH4beqaW394oXjPFydYbg3Oe5WLJ1159CR8cDz95xsPHD/n6q9/klVde4b333sbaDucjzglYqjQF\npYX1dstwsKYoRlxdXfHRxx/wrW/9Dtt1KwoXR9M0/OKt93j+hee5c/uWGvnUm5eir7SAIuPR6vkP\nMZ/PmOng1FlIdfjsIRuE8X4nKaz0Wj2pgRYjTFSkqp7NmM6Z3oPqiTxqKXsjZAcpaCpuJ0DMhrss\nLfWgZm9/Ql2VuKZRvERM1ppiMMDWhVjP7LFJqnW72dA5J07sYMRgUOuM1YDVc209JLYoMAKAsUaA\nXhlvoWh6I38PwecZsCF60S5GjbS2MXjvcJ2j2W4YDqaYutJnkxpio6nVrnKU5ZBR11FWlabEyVk1\nQ0HK2FkLZVlSFXK+i6KQtK+JuW4aSRgORZnuRIfkvZNozudBD+pI5CJyQgsbzValoEj2Sn6sICHx\nI9J7mKwGMWqGolA9nRiAQt7/jJBmN5vxxdcXGMRWDuNyiS0Tm0U6+RKu2lhgTElOZaRTnNbIGoHR\nAhhJA0QFzqRelGTYFBokCxPUA8USbGr8DYJui8nHlEX06nmEEAmloRgNKQ3g7uFXa/zqY7pF2qjr\nqir5rLvp0kDARSiVMScdXWt0wruiDjVHImAOECUbPQELDtxsTjO7wK1XRO8xsWXw+C8xixnGdcQY\nZF1T3l2RdoURwu5BLSw2ZXTcWj/lZrukbltiF4nRcHB0xPd+99s8/uRT7t66zXSyx/379zl/tuBq\ntqTtIq3b8vGnH2D+6wE/+Bt/yPHRCc+2W7ZtK1BwF2Ae2Y42DAcj6sFQGDZ8ZLttmM3nTMZjiIFm\n07AuKspyIAfGltR1zdHhDX7/9/+QZ8+e8Ytf/ByipWlanG8ZDAYUBVqzEwLxoEz7ROE79VFpzpJ3\n9zlXiqDSQYupAEkUMg8SvS/ZslqEUT/pREsC31iB3kePS71aGnZIBKTnIKdf+8hFR5X+SlpUfszs\nSNhf7do5RWroYbFc4x08uP8cF+czrmYznjx9xMsvvMxqOePxk8eMR7BetUJzFyKDqqTxHevNhmFd\n47zngw/e5Wtfe5XxdEjbrTC+oDAlT59c8Mu3fsnh4QHDwRBIqbGdZ89rmKbJp9VP6a3kVqoLEQVf\nIK5iQYqq04NFjNTWNa1IRGekqrHIgCGlbdQ4Pia2mhRvqk4Sg2yukT0Y3bPdTRL5sJSVoEeNtcTh\nSNN3ibHIYCyUdU1RFspuZPA+sNmsmV3NWW2WlGXB/v4xxhjquqSwlsKo6gtSviiKkrqqqMqSspBf\n1iZSigTmC5jQYUypKNNkhEg4In2dUWS/1B/Lqqauh73TV1gGwwGlk9pkWZZKZxexigwVvZXmiPbn\nqSgqykrbVeqatbVS0tixKekMo9NNkxQktpncQqJAuWTUUl4t9Wdm2U7gG52CkmQHZT8KQUaCSYlE\n+zo1OIta6w4x6qBlKZtkmYjhV87o512faxB924KxbK4usPWAMg28VbFPHoswZGnUeI07zuTfc/E7\nmhy2JyRbbm9XDy9E6UNKvSeGdCg1zE/UbokDT/Ke6v1HimpAWY0w0dIuljQXl4TtnNDpgmV7LTAM\nMXo9sCYqLVQIKbmQDGYSplQDNRo+9NJik6cSA2G1oplf0a7m4FqM3xDnl9A2ktopy6zt0uRvYw2U\nUgOpSzFMFsvBeMxLx1vevOo433q6EDh7esZoPOEP/ugHnD16Sknk5q1j7jx3QlGO6Lp9zi+fsFpd\n8s67PyVax9/+W3+Hw+MTzk5bXJRD5zaO1fmawXCEQQEEIQhSrW2I0dN2jvVqhTElw8GY1XJB2zZY\nUzKZTNnbO+GP//jvcufuAy4vLvjgg7f5+Rs/ZTgacXx8SNe0bJcbgkuEz0Eb8QUQEpQRJiur33CF\nqLRtCqoSZWHy4Y5IL1Qpk4A16pR3FCqrqLJb0PfCmWz8kjHM95GRcn2vn0qdRB98Jqrjs61Jf7XL\naGRoU/0ScM5xfn7J17/+CrdunfDxRw95+vQZt05u8fyDF1hvVmw3HaVtmC/XuBAoKRmUFZ2TUV+D\nesRyvuatN3/JD37wN1kuNgRnsbbCOcdb77zPK698lfv3nmMnffKZh4w9slJPt5as5Nykv2MgJrCN\nOIvJcEpWyGCKUkkPtPUq1SxNv7a9A76TbsPIRKZ8NuXsd21H9A0lFYWRbEaqhSYGlxijtCvo2bNF\nSTVICdlChCyjPsEUlqIs8tzPrnMsVyvOL55xNbtgMBhgsFQFVNWUuqgJGvX5EKjKjrIqKUtxIAeD\nAW03kExMaBWk4rW0ZDBG0KLeBYJDA2px4MrSUlcVIQwxSNliNBoznkwoSgG/7O8dirYKjhAC9aCm\nLIusjZO7JkY49UZq/daW1OWQqhpRDkbYotDG/J6oPCrvqjggPaDJa900Reox7EaRAgCSM9ufj7S/\nUfV3IPWkqy7XlKvR/uJkXqUPUs97lPObEKoZ1JbYq34LpOnnGkS33QKwevaYohowNBYGg/4Hcpqi\nT59Kp19/ikT4HWn8U+9OqiFTAU0Pm2e0xf7g+KAIVCuhmLzuOgJOIshIaSxFVVGWJcQxoxvHtPdu\n0a3WNOeBGMrkHkqhfufqPV3hNU25bWugEAwTBRZv0k9JOnXHtIIJWE0DhE1LO7/CL88xriX6lnY2\npywsRSUpaBlppQo3SOHa2EKFv6QLQkCwN97j5v6al/YbPlkGVj5ydX7B+2+/wwsv/3PcCoar80uG\nwzEvvfw8zfpDCnMD13WcXzym2c55+82fMp3u8Uc/+BtM9w6YXV2ACfjQsV4ssWcWWxSMJxOi0cnd\nPuALMZzrzZLVaokhcPr0GY+fXLDdNHzlqy/xwosvMBpNeeXlr7G+s+bO7dss5zN+/vOfUdgS13na\nZkv0qTaikbbRyACT93L3+tVYq19vSyEEyyZFmH2fVSR5lBrB74C9TJa55IgAWM2KpVYguXbnqe3e\nS/Jie9rmf9aYsP+MjNHRYySIa4l6rq5m+BB48Px9Tp+ds15v+PjhJ3zrW9/m/nPP8+jRE0bjCWBZ\nLtd47xkOamKUVFrXdVR1x8cffcTr3/w2BwcTTptLWSNTMLta8/bb73Drxg3qShGOaRIBssYRaZvQ\nbrxrz51piJOxNAmFrRGQUUQUCT+gjrQ6mCICqYQi75/+SHup7rgYEXXIIxBDYDGf4bpLFvWYyWRM\nNai1nmjpTjpCGelcx9XV1c7kEpF7AfMFhfTLDpdlpcaskIk2rsF5x2q95OLylMePP6WuSsqiYDQa\nSDbFGEpriVZItBMZRVFYqrKUkkNZUVc1ndOmd9CUfQAPrmtwvlZgjtOI0FCWJcN6iAwWrxiNhvlX\nURQQYTrdR8CJKuPa8mRtD3aKKR2NGDJMQIYBSztbVQ0oa6kdOh2wnPW0SXsjDk8SgMQ01ROkB8Vc\nRoQvWDNCO8OaU0o+pcPTnyn6d8kYktpdlE0n9RZqH7L30redM30aTUZ2nLovcX1+yrRtcMDs0ScU\ngxHGFlQHB1nxCGek2ckvx36KB+LVFGWB9yaHuH3wrB5f7Kdfi5lLLRkl1hjtVwrK9FZqVAoEK6la\nkxQcBBzRlFAYbFlSDkdUBwcMbt5mvFwSNs9wKyEZVr9WmuSz3ylpVYHIpGYKrVmaAEGMl83mL0Nx\nEPRoiliR6SAuMOyW3IpXlFGYZ3zXSO9UMNhQ5sNO0ERfEIAMVoRfoNSW6WTKse/4xq2G9Sbws5ll\nVk9wa8d2vub+iy8T/LssFmv2phNu3z3k8Uczjg9uMptd0IYt22bNz3/2Y04Ob/LKKy/SbBvW6yVY\nYadYXcyxhZXaSVUBgaJtVVkYqqriw/c/5O03P6KsDnj27BTnNpS14fD4gMlkKvPaQmQ8PeYb3/gu\nv3jzDT765ENOjo6xtcVvHU77pQJBKch6p+azRuXX/Tvo1ItE4ZbreIoiNUrBZg25nSQdtvSGMUYo\nIkWhUxUSWYLeRKEec/J2d14ISSbUeKLe7G++67/ClfNYJv0PRJarFY8fP+OVr77MjVsnfPzBQy7O\nzzk/veD2nfvM5kvadsvx8SEheJqmIUQYVDWu62i6htqXLNcL3nr75/zu7/4NrmZrYmgJxuKd5aMP\nPuW1rz7j7r07yCQUf83xFPCS7W8vIqlK+ixQUgJG3f2Q63jaHKNOkJIrZq7SXNKI9NFA+iMlZdIZ\nVOc5OS0hRmazKy4vLnFdZDQaUNVSCyuKgs0LK8LAs9msef/9dwUIU1gxmEVFUdSUpRi/sigYDCTy\nOhhU1JUYTO8dXSdI7NnsktV8RluXLOaXbI5v0jrHCCi1/lYURa5LA7lnttCUaU6774CyTBQF7zpH\n6zpMISOsEisNxlCUFVVZY42lMEb/LmCm0XCgwYntGVzy2gWt2ffZutwnqETgxhoKY6mUZKXrHG3X\nZRn3O72Hu13dubYb+yxLOiOJ/zQHRkb2PtXls9zkGYmic9NA4YBX5K5GoUrkHbwnal9kT0wQs/GM\nvxxDMlcAAQAASURBVHI2P//6/LYLH/Btw/kH72LqGmzJ1KqrVhRZKRB9PiRl0adVdTlk2XYOdUpT\nXp8WoMYw6oEzRW607JGEWly2kJKZKaWUbyVCGvRZ1AOGe4eEk5aw3eAXK1bNgtAlvho0RRF3PNId\n5RyTvyFcD4WRGDEo0lSOYT+y1JoEkwZbwtHdMd948ZAXpg2FCZiyYHJ8KBvqfV6b4DoZgkyqpcrn\nFmWhLBtQD8dMg+fu4YJvbBrhoxy/zKC+w+J8Tf3ykFt3n2OzfgfnWu7cu8Xl+SUPP72kqgc6qNmw\nXl7w4x/9V0z3Jty4cYgLLe02EK0MHp2fXWCtYXp8gLGWlXcUxjAYjhiPJ0z3D7i4OOPZ6SMefvox\n070hy8Ul69Uca2C9XdM0Le22YTisMFgW8znTyYDBqGa9LnFuq+i7lHrsUb9f5ko/lRh/IlZZtmxu\nhrYJlKXeZYyquC3Cyxs1Ag5pyob0KKasRboS7D+lfYzZvYMUiWZ/OemAv/KVXp/tcPpsI3LadR1P\nHj/lwfMPeOHFF3jy+Clt0/DxJx9x6/Ztbt+6yYcffMBwMOTG8TFn5+cEH7DFEFt6Grdl2NXELvD0\n8VNW6xnj8QDfCCsKwXJxvuCTTx5zcuOEqqrYnWeZsj9yf5EYHak2tPND+WH69YmqcHvibHlWrf+Y\nQD91QifOGCFOMBo1Wj3//Xv32SX075v1gvOLp8xmc3zwFGkGojUs/miO33cslnN+9OM/oyxrjdoq\nCltRlCVVLUZ0Mp5y88Zdbt66yWQ8YEiFBbquY7maM5tfsN2sGdQD6lpaHrbbDV3XSpRlSjCR0nZY\nW+60Avlrhj0oTWQM2rJVSK+jC562azGbBc7V2KJEiL0b2k7AUC0t1pQM6hFFMZThuQa227Vuwg76\nlhTdGYIXh5SUgtQ9iKpAnfOs1mu264Zmu6FrN3TjYb+Xn0l3Zp2pwYukPY0aR8n8JIMV9SfSNFMh\n6zZEo85/SAZV+woxmCi2IAThSI46cNwHJ/ceYs4oJp0MaBllF/jzxdcX9CFKtDL74H0YVJhawmi0\n1wvvwCrUNSIFeFvkQ3Pt+AQw0Wq9J93wTv5f2y8SQk/y6lpPtBau1S8NQes/MkW9/7xIxIeWEAuK\n0lKMhgwPjzDeEVZruvm7tBdBQn1SwieqF55SvFLjDCqwZkeIiamCpDGm1k5t7J/aFoaTexO++Xsv\n8+ILtxiqocdAOZlAUeB9A84Tuo7QNCSnQVJBIkTJmwwJ3h08tS24uTfgxa4FE2jckIuLho/efZuT\nO7cZ7x+wPT9jWNW88MoDzi9mLNeGuqyEIZ/A2enH/ORH/5Qf/NEfs7d/xMKd0bgOE4SYe/HsSsAE\noxpMgTWF0OOVBcfHJ8wu13zw/vus1nMm0wHNtmG5XOIDrBZzuk5SxvPZFc4F9vcPmexNGE8HlEXB\n40dPaDufz2o6WL+dHVElnF6kmYNoTEaLJidL2hdsPtApmxG1hplUR8TktL6xhoKUBk/RIVluc10s\nG4Pdu//sv3/7K2JIMzxTLJWcyvliwcNPnvDyV17g9p3bfPLBJ8zmVzx89Alf/eornJ6dsllvOTg4\noHMd89mSGASQEaLHd0JttVguefb0CbdvvcTiaiXyaw3bzvHpp0/46tdeZv9gL5/J3UXIUQ1x5+wW\neT2yMkq1J22vkBdLKlXGotDPxstRRd9DJmTPEhGIASTvrTFW0Nl5XyzjyR5HRzeo6xHOSd+eDw7v\n+tFe3nnOLs6yMXWuw3uhHyxLKbccHZ0QQmS8N82coS50LFcLZvML5kpuPx5PKasC51q2myXbjTA9\nSe9eCpQjhMThmgYhpD46kWHvvIB2FL0eI6z8gtVa9Y1GRk55RmVeomc4mjCbLzk+ntN8cwvG8PDT\nhzsReFSD5LNe85lb1SFYDln71LbhfWA2u+Ds4hmXF88wePbGw+uGxaDoYq6di6AGzav+jto6ZwwE\nuhwFp89KKFETE1Cr38/g0xDglLnpeaZTOSRjUiK5pSPqeqP9zn9tNcQkoNuzC+IH71ENJwxHE4Jz\nUpNxHddm1Cc33PQL1HvUhmAUEYRMrte4SpQ/Jueme3SfhNI+CB1VMlJWComZhDeCBoyJHFZCbVHk\nNUyn2BjoVs+xvbjEr5/it2mjYlJ7pORtSuXu/icyYPSnkkGUDceEfNNFYTi8PeHrv/dVnn/5OUb1\nYGcOm0TTYCnqEZSBwJrYRmLXamSYiHl7EEcInvVyQdtt8L5jUFhujmG+eMiT5V2ePgYb55RFZHqw\nx+XlOdE3HB7s8cLLd1gu12zXkarQNGXs+OTjtxlP9vju977HZG+frttinSD2us2W+bMrRsdTbF0B\nBcORFO+LsmT/YMzBwYjZrML7js1mxWqxomka1ssl1WDIZDrFFhUHB0eUdcFkUnF4uE97s2N2MWez\nbnJ/YDaKv9UlSLsQJZ1nkaZgYw3RyDTwwsrkA0lHgy0gOLI3fG1SApoJiDGDYpIDJB5/n9/49b/v\nplj/2a7sIKTzsCOBEdhuWz766BH37t3nxRdf5PTpGe225fGjT3n+ufu8+OAlfvHmLyiKklu37uDa\nh7SbltIMcGZL4xt8CLSu4/T0lDt3nqesLK0DizRWP3lyytnZOdO9seSPe88DQFhGohJaEzEmUToq\nSYa2VKVIRJCk8g5C2K2tWAHNGAkjSYpAhCs2ojBM0L7jFGOgQIw0BQGkof3mzbsc7B9rxGCU0QW6\nruU/2ft/cV5cMJ3u8c1vfgfXeZpmy2q1ZLVeCoBNa/plKbIkaUfhi222Wy6vLjg/f8Z6taQsSkbj\noRJFGJzb0rWN9AD6QFEYNeA7kS1otJRkPyjqUp4pRJ8bzptmy2q9ZL1esV6vcV6MofdehghHR1VW\nHOyfcHx8m8UfzzDW8MMf/lc5nZ16dUOUVg4fo5D657SnOhpeOwAUnbtaL7manbPZrNjfG3O4N9Ls\nS8xRV0y96Un+fcwBYzL0mcAAqS9KL7kgu8kAHKRFS4JVsRDJB43gYpeNX0g1RDWQBE3FRyPP1KO7\n1BmLmJ0MxxddX0DdJr/5rWf18JRy+A6DyRTvWvHqtlsYGJ1dKYrc7kR9BoQxwjp9diNRIhYs2Fj0\nYAjSINc+vJeorSCRx6aUqfxIUFo4TbMaretFlAPQUcYSW5QUwxEhGkYnN5jcu4dbLNg+WRGdejA7\nabC4c/ei5Aw2hvwVQ2rLTwpCPFhLpBoYTp474ivfep4HD+5SKxlALHfSPK6TZwgBgqxBrGrxYIMj\nAQqSm2QVMdBsGyneW4uNjvEwcqOdM1t+zHx0wLNna27fmXP78Iijo2OuTs/BOO7cu8nl+ZwP3nlM\nAMqqousizjV89O7PGQwGfP211xgOh/huS+gkV9+s1kQC1VQ87dFozHg0Fd7D6ZivvvoVfAhcXV3S\ntltJ07TCUTrd3+PWrdu4bsO9e/fZbJdMJ0OODg6ZmyvG0xGXlzOiTkT/rWPDhLxM/Wq2IIObTPKN\nknec6tw7Vlf/tFZQjU49Uf3x/p5iAs2kmE/mOSZkbB/ykOU9XvvLX/XaMT6a1iqQuo5BmpTnyxWX\nFxteeOk2t+/e5qP3P2KxWPHw8UO+9tVXGY0GzBdXPLj7PO5Wy+OHjwBpIAfoug3e1VzNrmi7DdWg\nwGyEA8QbmM+XPHz4iPv37zEwpcr97rOmyI2sFJU7Ts5gmnaPUbaqNBoq5p8RaxbyeSajtjVTk8oZ\nNi1p0CVRXUAaoiuhszWW/YMjClNQV9rLq6jD4APj8URI6McTvv369wkhsN1uWa9XbLZbGYGmqc6q\nrjk+usl4PMEaS9t2zBcLLi4umF1d4bqO0XBMVcqcw6KQs+59J8N2syHqdZfoNXKkmHmTfIdzrWSQ\nylLRpp71esXTZ094+OghZ2endG2nLDBak9U066AeMJlOuPx3z7Gm4E//7L9QZ1pdd22Sda5FGzdF\ntjNZgun7PXWTnWvZbDdIa/0JzWadnZXcNpPZbkRmpcVCW+li+lP2TQIVMU4myYoVA5lnjkbAGMFf\noH3JUXouU2+wV4Mo0aLiD4ICaFL6dWeN9Z2/9Mn7/JSpCq6PBWHjWX7yKVf7e/i2xdqCZn5BtXdE\nLIbEQlM6WthNx6YwpfYVdTuhr8q9FlVTPj0BVAIRox5kooGSKRlFVlD5HlP6BOUsDFHnLiZ2egHY\nGAzVdMrwxg26+RVh8xHtpYNY5LjP5KdOVF5kZZ2nKyTPK99FoKoN+8cj7r54g5dff5mbt48oi8Tk\nb/Bd8mIi0Tn0XItOMAVFNQQMzm5koF2O8CO2EM+39R2T8R7j4ZhNs4KuZW8YOLz8mO3qLgzvcfbh\nQyY2cP/Vb3Fy6y4fffgOIxxVadg0C4yVepBAqT1Ns+CDd96gGta8eP8ug+EQ75c4PNFbmuUG5zxm\n3FBVQ8ajMWVZMRrU3Lxxgn3d8vbbb2MMbLZLqqri8PgWJye3uH37LoXx3LhxyJOnKwaDirZt2XYN\nRzeOePbsnE3rRLn9Fteu45R7qIzIjU8HUAtPUQ1kCIpAK5Js6foHwBoqqyNyohAhGI0erUkDRzUO\nNCYfUtUp149a1g3/TNYwX+ko59Yfm5K7Aec7Li5nvPTyHR48f48nj5/QdS1Pnz3hwf373Ll9h5++\n8VMa13D//gM26w2L+VwiORtk6KvzrNcblqsFVT2ViQRB+DC3refh46esVxvqqtpxStNq6OlIkbMi\nq/NZ1NYlSS+bPO0g7p6ylNaL9O1aWrNlx/ElmoShEG/fQmqHkX44fVdjGAxqBvWQYV1TVqVkk9TB\nqapKDUjN3Tt3CSEIDdp2K3W5KD3AZVXIeKRqyGg8wlpD07TM5zOuri5YrhZIFCk9gNaWFKUgUsET\nYkcMjlhUGiF5UtuELWwGqYmNkFqY137FBAQJPuCcZ71ZM5tfsVqthBi/tJrOr4jayxdwbDYrQgjY\nsmA62WcwkAkdIjMxU8aVhfQQ2wIl2E8lqUTxZDLXsHeBpt1QlVDWA90zcUQTGYIPXdaFISpvtYSm\n0gegDqY1ZT574gtpkUJRyNErSYC4FUSssthoaQxB7PrYdytIlJtqCiKfuX1LU9UCyPny1+caRIO+\nWYQQLc2iY/7RR7jtBmst6/NzxhTYaSSaSmdh7aShNGIsTEGwgpaUuc9eIqMUa5kofSUYTYEgxiOl\nX5QHNbkvQsnjMuNNru+plfEhZKCENdLC4AtDMR4zPj4hbjeYzrFwn9ItPD6IJ5oaupMRDmkFjKQI\n8jSLnHILjMYFz331hK997xXuPLgrCK8gwmFK6XGK3pKKy945oWIqBpjSQlEQ2xYToKgrUcxbR5ol\nJ1DrSgQDy97+IZ13rK8cmMCNQcP88h3m4wOedVtu3dpQ1jUnJzdw0fPBu29Jz+B2hTUVg9EeVT0g\n2MB4b8qNmyfMFuecX+1x83BfDudmpQwyAb/eEjqhWyvLguPjA+qBhVhx4+SQ8MrLrNdb2qZlOBwx\nHg+ZTseMhkMODw8ZDEqquqSqK5rO0bUeYoex/SSAL3Ol9LH8Ka8MUdhqQgiCGN2BjXtlHAkhYmwk\nZa1ztSqK2xMDynEqwlNagw8myy9Z/vVwaa3T2j4LoomUX7nffxaz2Eelin2OOleyDFRlSbONzBcL\nWldw+/YdDo8PmJ1dsVouubi45OTGDfYmExbLBS8+eInnHzzg7XfexsdIWUqtxkVP025ZzGbcunko\nSE88xkQKDM+enPHk6WP2D6b9Q+kV1FlOHnhSPpl/S+PahOyNWtMxif84r1uqbaU+Q0jzMTMbEGQn\nJJMeaB3pegN/2hcdiqtGxlrdY5Nqd5bRaELEU9fSo+fjCLBUtqKoSnWapKGeGNhu1yyWCxbLBU2z\npS5KpMtBxtdVtlYHKipoRaOiiERLGpENqgGN3aizkNZL63hBWiCshsRivEccH51wvH+T/f096mEt\nyOloZECwrmRd1iwnP6SqKv7oD/824+keRSEj9kL0ONeKc2tKBvWQsiqEltMIIFKJDElZlhAcwcNs\nccl6ccGw1EgSSJNhBOQSshxEo5FhilKSho9es3hREcsGGUZtwGirhEUpNOW1Mc1TjF6p7GTvTbD9\numL1NTIzN7taMcmSBjNphu2XuL5EylQ+OGIJvqM5X+C3W1xRsnr6GKxhCNjxBGppUM2uLckLkeW2\nSs59vd1dp5ibQvvZkypAG7itRgWaZrDCduJDYoNPdTdVciEQrKRlLRqtKpeiHQwpJ/uMb9zD+ohf\nL1m1F4Tt9WSQbLtCukkAihSdCOVSWUX2joa8+Np9vvqdl7lx94SyqjGFIbQe41SBa73EWEP0EBoP\nA6Aqsd5D14H32KrE2gEuGFxoSawdGENRlozGE7aN4/j4kMMDw7rpmG3OKU3HDZ6xOPsA9+CbnK1K\njk6fcXM85s5zz4OBi/MrLs6u+PThE/w6sl8fc+f2bR585QFHh8dcnF9wfnkqEd7kAIDVaqm1AkNo\nIpurOadEjPUcHhwxHA0oqpLbxS1mV3O8ExahqhpqK4Pj/PKCs9NzbBR+26bZsFotOT29YLvtsgLp\nV/4zYrfztWQMC4PG8uIZ2iKl3eRrFqNjcORrIQZNNZJHzWTOUaKOshGMmC63tBQg6ZmorBji6ffB\nX/BJoUFq1ofUMwj/zI35eSXkuYrSMJyWjKcD6mrMxflaGqFdxXTvgPv37rGZLyDA5eUFd+4+x81b\nt7k4v8QHx/0HD3h2+oyLy0tiCFRVRegivpUWgvKupP2cE67goqxYzjc8fXzGV77yim7Mzl5pH6kl\nqmOaY4O8xjE6nTYibVQCtPGqQLVUYVJLTMwpsxgN1vamNhNW0DtQKU8gc+V27ksxBN51YjStEFdL\n0JL2H9Kgc4OMkCsoFCUvnKLGWm0yj3StY73ZslwtWa3mwu85kF5A7z2lRmFB+2u9T43/BT4mB8yo\njup3N0XbQZ3PZJI8EoEVtmQ4HHPz5BbT0ZTjo2NGkzG2QNljvMp0pCwqfjj6BVVV88pXvsb04EAi\nQSP32HZbIf1HeiDLutCBy0KUESggU7NBDBJRzhczLs+f4Jo5adh2SM4kUYFUKh4aitkdjtFU74Wk\nD4WirjBF5sLtG+r7dLBP+i8ivctRx0IFBR4BOwwrpI4AUkrWREzoW0K+7PUFKVNUMchIpIJAbB2h\nc/jthvnDD4mFMBAM1auMachoulNtii1i4pQQQyWmpdshaA4ZQJJSpBbJcecp86jK08gzgWoSGtMa\n2+eY6Tcn30pRUI3HUo8h4LZL/GbL9smS6IpeKYpLq4cdKDW894GiiFQDy8mDI1765vO88NXnmU7H\nECLBN1hbiadUihfk2wYcgjKzlmp/T+jklktipfPcSqlbRNdiQ8SWux6NKI6Dw0NOnzxl3WyZjEfc\nOL7F0nmehiumwXG0/ZTTizs8K48YvvcBk5Njjm/d5e79B/ze3yjYbDtm//mfMrucMxzVvPzqV9jb\nG7NcLGlb4WV8+90Zr7z8NY73jwDDZr3CK0Q7bDvWlzMuCqnZTaZTClsyHg8xMTCbrfCuI7iGrm35\n5JOP+Cf/5B/TtIGjgyNibMXLXi1YLDa03fXsvrn2xFz7lzW7KUrTKzUTVXmoG2PkmHrncT7VoUVB\nSool5jcPyatF3iygDDjpDswOii0FJSmCQRV17O8rzenMjEk7z/JXM419HbOoLKNJxWR/xNHhMfvT\nGwT3BOfAOVmP+8/d49EnH9M2nsViQdM03Di5wXw2Z7a64ut3X+fBgwesN1ucaxgMR4I0DNA1rZw/\nC6kn0BgBs83nS1zb5XuSS/uIc7o07aQ6DhJSy2nPTf3yLJHUlL2DDtVdDcliJHSgxOJyBtId7ABU\nUuOTKEP9DCO9y9E7QjA447BGwBYhJuBKoG0b7fcLeCcAE2OtcB1rajpiIBg225b5Ys7V5TnLxUyi\nPWtxMVB4dNi1RITeB5yXsWIuOAHAqNEKARnd5ISVRprrRT91ncd1DcZahgPPoK4pC8ugqims5WB/\nn+OTE/b29+TzgkRx3stMUVsU2kNZcnR8xP7+AfVgiFEaxqbZ4HyLoaSshBwgI6/TtBc16EH5hX1o\nMQR8u6Up487aC0rfxB1Shh1DL6lT1ePJy8x7m8OdXCpLAROagUnObao7yngoZTbLcqbAKuQ9hBpS\nniXFpulw+jx+64uvz2/M1493Ufo7CgpMDKL8u475xx8QioJgCmJpGBqLqQdZAyRLjXqCEosLOiqB\nUfoQV74nFZLYCzioUVS6rSLB6pP1T4S5Zc/Inho99X1i9DpyxVMMSgblAaWx+LbBrzfE7btSTwwp\n9tjtd5JDbAcVRWUZTgruvnyP5197npObh9SDUhWXpN/wkh6JrSNs1hKZlnVe02IwxpgCv1gQNg2M\nwFCC63JqpUdFxaRtGR/sMZ5dMru8YHzvHvvHRzwXA60PPNzMmLolF+cfshiOWc4HrC5mTMYH2Kog\neEddwcHekG3b8ODFB+xNJqyWK7bNlrZZ8uzZEzonIKjBq99kun+CibBer/KQTd84lucLUETd/vSI\nwWjEZDLAdR0hOrp2y8XZOT/7+Y/4yU9+wmSyRz0sefL4lPlszuLqks2mySmwTIpt9JCkx04iA7nX\n9Jql1FQJJmU2YzZ4mY5K3yf1u/Y9bSmKSUenN4wJLBND7O8rasTzmfORDHNGo2aJ3U0A/tUuMQWG\nw8N9XvnKiwQ2RCzHR7eYTvZYLNfMrjqhZNtGTm6ccHTjkNOn0g6wXMw5Oj5gMByz3bYYW/D8g5c4\nPT3j6mqGxVLWRV7LwkJVGDZeQFWpTeDi8oLVavHr71CBMGmcVzoru4jKKJlS3bug8k1e7/ReEU+a\nSLMrAMamF8esQ3rDJhEeKUI1SCYmSNapr1h2ei9qQIOnaTbyrhppSfrcauTaYaylKGq6VlqKZldn\nXF2d4lzLeDQCE/GuhaKg6wxVVSpbiiONfUoNPZmWOgYdJeWzPBskq7VttswXcyKeg+k+Zm9P1io9\nlxGmm8FgqNykHcELKNGnRntVsUUBZVlQ1ZUO/g6CA+lKiFrL1MhO2i96Yx09Gc3atVvW6yWua6Ut\nIgEmY3JGrL5eZV5LSSlzl92fjBhO+jzkCD9z0xKhiOCcGmbtjdTMQQpyjPan9yVtNa/G4LwMMZcZ\nvWj63/LXhzJFlEYeb2kCRRI+H1g/foovS2JRY4qKaAvq6f5OuGwwRiZgBDVQ6SF9Gnui/UkGAwUI\nn2hQfzGxxKD0R5XUE6OAMVJPj7yBV8Npe2/eROmHCUEmXkdhfKgGY8qyIPqW0GxxmwWhfYxfJhRY\n7P+L0i5VFnDy/BHPv/ocd5+/y3g0EpPuUi+PhyZiq0DsOsympRiOKeoaEoM+kdhuMVVFcbBPWCwI\n642MmLEyVR6lWUKbzBPGsaxK9o+OWS8WzC+vuHH3FifHJ3jvWSw7Vss1o+VDLs4O6G4OWT56LNRv\n3ZbTs8ccnRzx0isvYMvHnBwd02jdb7Ne8fjTT9l6x97ePp8+fA/vPN/97u8xPbgJGOJySec7YgS3\naZk/uyQ4Wc/j6hZlUTKeDmm2nu1mjfcwm82Zz+acPnvCB+8JDyomMJvNCc5R2sRFanbR10lsei9y\nx6hkBJkRBV5YQ6nE8lLo7yNIC9JqGm3eyzTkd0dfZ9LiHfdLU2o94fivnAnI+5Ju/LqnnKX/17/B\nl7iMiUwnY/7W3/qb/MEf/D5v/PynnJ1fMRgMCTHiOoHc++BZbxpu3Djk5u1b0k8YLfP5jNt3bjGd\njHHOsdmuuXXrFndu36XZStvFcDyUQbQhUJRQDypVVFrnN5bZ5YzF1dW1vcl+miVzUKaeScng6LSD\n6EEb7pPyMobeY1fPPxP1kyLsQJpakhDgec1TG0ZaYWPkgNI7TyE7WVqL2tkxOdMR17WA4A1S/1pK\nlRsjo5CCD6zXG2W/OZfBuxjJAtG3TxgkUks9gs55OtdRVnU2ZqklTAyXGDlx9ApiiGy3Wy4vL2m6\nFd45qrKkVsq9rpPxXk27IQYvLS3qHETvENUpznQIQSj6nKP0HqIYQe+9oFSdpzEbqmKQ39t7T+c9\n22ZN17a4tmPbrNhut7RNg6VjVPXpSRMLIctPGZEUmpiks4wyD8V8TtJsR6HmNHlijHYlkpwg2Vr9\nd0ilkDSDKKtR6VnciUITmEayqkG/runf3wK496VSpiH1/MUCi1cvPuKurnBG0FRFNcRUJYn5IL2D\niZL6TIYKFUiCwt4LaUSXrJZ4gcJMkA5lSZGLzAGZB5VmJsbc5JrSsTFFo1GRS3n4rHpaRYmtCmw5\nZnR0RGg7wnaD2XSsPnmK2yQdJ6CZcmA5PBnz4Gu3eeG1BxweHwjzvQ8QnahskyjCInGxwVBQjvew\ndYpadcBygLBdY3yBqWvsdEycOWJw2Fq+RgwEt+l3Xi9bVgwmI/anU5aLBe74gNFkj9vcxQVw7iHz\nR0vOLz7k6dND9kcwn58z2y75+u//IfdHEwaDCXHlKELAhMB2teTjD97HB89wOGSznDMYDLmaPeXt\nt9/k9W9+l4Pju0T7iPVqQWyDsBetOhZ+AQjl1dHBMXVdU9gO51ZE4OaNGxwdTDk/39J56Jxnu1mx\nXjdgDaORwRYG00DT9F5muozp4RnJgPVE1ylaSD5oSrtbZdEXbW2NoSwsPgZc8Dn6j/mImazQpf9J\nU4EJ1PEbYjyjN5juL8s0Jqfdewtv1HP+7a6qrHjttVf5O3/rbzMejzk6PGG7FUj/1WzBfL7ixskL\nOBfYrBvAcvPGLR59/Jh2K0NkrbHsTaecXZyxWMx46fkXuXP7Nuenz9g2DcPBgHa7wRjDYDig3kKa\nTBFVu6zma2Yff0D0HaYoSSxQ1pbigKYsj5Yw8txBLXVooYUdF2JncXoY226bxa6jkc5BInAP+v6C\nOk+AjpQ+SHKRjG8gjbD6LNZQACE6KFubu0N00tcWOoqyxjtYLBZcXp1yNTujaTYMqkqMbjbCEuNs\ntxKpFbZgst3iJhMFxmm2IUiPo7VioLLhsEKV6INjtV6wWF0xGkxo9zuJBKMQB2ybLduNGKiqKkmT\nPJIBkQBdegnbzYZ2uBVAYVEQvWMxu2SxXNG0HcF3QpodPE3XsW02NM2attmy3W5oti2b7YLtdk0I\nnsODPW7fuJHPqCRRktfRL72UvwrAE0wyVjE7BAlYWGivp/QUJqdRyQOiV0fU7mRaDQmoI33jqa1H\nR8hHjUqNtHAYA/1ord/u5H0pUI2omhT65vwHoQ10z65w8UNsPcJU0pOT4MA5U2otRRTqIaIWSINS\nbhnxbBKIJO4cG7J112GfRocPE+mNfvJOUtFecuo+OIJ3dK5D42dVdhKaFCmadYHYtIT1CrdaEZ4u\nMd5jLewdDbj/8g1eePU57jx3i6ow4CM2Ohm2aYBC0g7GQ3SOYjikHE4k9O86YilGHwXYRI8YQEox\niqMxbj7HN2qJHfhVS586VY85OIpqwPTgkG6zZLVYMNzbZzgd8Vxxj857FptPePTkgicfvkdZjBia\np7iBw6223Lh5j3E5YDtfcG6ecHRym+1mSzWoKGNFs90yne4xnuzRtS3nZ5/w7ns133jtO9y4/TwX\nTz9hGRe4YHGxw687lk8XkhKLloODA4qyxFpo2i3WGL7+2rco64rpdJ+Ly1P+9E/+EW++9SbVwDOd\nDoBAWUH0DU5rlcmY9E5JH2klp8YW6g1r+F7YNFRVlEyhBNKlleGuMQpVVND6lhHPCCNQArw6Y9YY\nraeoSP7Gg5Hq2b0EXmdf6lM8O8foS1/WGh48eI6/87f/FtPxlNOzU9rWURY1mBLXLaiqIcfHN1ku\nZwzrFu8iR0dHHN044vTxBd55fOcZD4dsN1uurmYYY7h79y6PPn3E1fwKa4SfFmOo64qiFKBaDNIT\nG0IgbBsW7/6SsFpiR2NMOYAdZqhk6Kw6JKLAtD8sSsrTRh2tpVmb3PMZQ3YksMW19xR3xGpbx64m\n1gHdypGaWj3Sa1OdWSIXZYVBGXF29ixnuaPpHwckVecMwbdsto6ry0suL05ZLmeyN2UpjeM+6Smp\nGW6aDYUtcN4znu6zt7+P864n5TAWY0vNahW9cgQwQbMcHu88XdvStR4/EMCL6zxrs2GzFYNVVYJG\nlykUHdYIdypIZqPZLtiuR1IjjY6m2XJ6fsrTp09YzOe4zhNxeN/StC1dK/X9zXbFttnQti3Ndovz\nDXVV89L9Fzne39fbTc5LKqjZvD3Gmnxu4k7WJ2oKyGgrTh4YrGlRtPaaU9pafvIhca4KpWDeoyxf\nCamu7qu+V19/TunwL38CvzBlKvuW4i8vHqF6vMFHvOtonp4Tyvcw9YBYlgTvs0Yp9VURNJUhRU4T\nC2KUadPW9klKSZeob24sRU7B2J0NkQcX70x/afRgjSEiVEveO5xr1UMPpIGwRmsTRV1R7+0RT27i\nNgua5RV+8wFu1jA5GPDV7z7HV7/5MgfH+wIYcg5rweAl3Srql+gCoW0oRmPKg6k4o8GI0e/cjuBr\nB13rCIjRsFWFrYe41ZrglwI4MhaTBFwbTkPbYosB1WRCPRzRLZdsZ3Mx0FXJc3dvs962PFs94vLi\nEx5WU45u34DNGR/98pfs7R3y9KOPOTt/RnPxlPOLc/YOD7l3+y5XVwsGtbDlN+2W6WSf4D1Pnn7A\n3nSP11//LtPRhIcfvcWCOaERSj237Zg/vSAoRdbB0QF1PWJQGwaVEJLvHR5x/8GLDIZSY7m8Ome9\nvmJ/7wBrDdtBAz6yXDa0akT6yEsPgBqrQnuXpPHe5nS60cjMR1G4hcqCibFvBYoWE0JOp2QgSARj\n+lpFOkxfdIRy/JiMd9xR3HzGWH7meb7oun37Nv/c3/073Lt3l8dPH/Hpw4csFnMOD/cxdsDsasON\nmxWDwYTT04eYqcjV3t4+d+/cZXY2k9RZ01HXQ4KPrNYLmnbLzZs3OT45pGm3uNhS1zL3sCgKQWWH\nQO79Q4zj9vKCuFkKccRoiqnEmbmWeyYZuISO1hSWEqcnqD1xp3EakyM0jMEUpb7muhNkrDiU1zhj\nY68Q+y8ikbuJxGB65zmEhKvS++z/3r/MYEJiYJFa32a1ZnZ1xWx+SbPdUBYlELSlR14YkDFpbSvM\nS8579veP6NpGuDlLcRKsImxNSqHSFwO0e0wdwiipV9/hOknBrlYrzDoyqGuGdU3XSY3Th4C1htFo\nyLBWsnBjCN7RbhcQW5qu4Wo+4+HDT/ngo/c5Pz3Ddx1daKRfMiKRtwt0XUvnWjVOEe9bmOwJAjYv\ndBRWmXRY+lTItf0xxgp61WivZIyA26k3GgXwBP1+yOWpGKIixWNGBqf+1BC8gspTmObVwd2RBwNE\no+nwNAHjy11fyiCWWPWi+uhQVkDwYa5xLB4/ww5rTFXiu1YWTtkUQnDSfxhl5xNk3aZ6hVH2FwPp\n/MhDmixAqTcHDZklFSt54lxrTMwZFJm9IHjX97toWhNlv4jGUA5r4v6U0Y0buPXzMsOQx9x8/piX\nvvqA/f0JNkRCu5WmfAQUZKzBlDXEApNYHkyUgrmtpOhoI8aRII15zQiB0LbindYVxXCA3za41YJ6\nb4+ilkZ98dT1ZSEQrcMOSurhmO1syfzRY3zTYAclkxs3eenubVbbju1bz/jw4gMW4xH7t57nk4+f\ncHDwJpfPntF0LZ0JXJw/ZbNaMJ0eMz04oh4NWa6XlHWdm51HoyGnZ5/w9jsF3/nW93n19e/xwdu/\n5PLyjM22ofUO1wbmzy5pmw7nOo5PblKUpdSjTEldlrRNw2BY893vfJ+njz/hxz/+r7GF0MHZUuDe\nzgXcuiUNFDWYTICS5DDNyywtoCN1QkRQvSpNSZVKDcPrCVMC8Rhy5Hk95YQqty9pDHPalvyZJGct\nhR67qB5rMhvHF10HB/v8jT/8A1566QGnZ094/OQp5xcXHB2ccOvkJu9+8DFd13Hz5B7rVct2vWU6\nHuQo7/DokMFogGs8nXPsTcfYwrDRmtD9557n5OYN5rMFq62nrGtKZexJkwgyulYzNFvnxUhqDYt6\niD/9FHt8G1PV5EhBrUROi5pUYxOnVZhtJG2W6j9gdiI8VaRaHxMwTgrt+kySUd0izowhtyjld0yp\ncB1Wm2tZ5N/z1Hd0v7QOLVRq0LaexWLGbHbGajEn+oCtFdBHAnoII9ZmtWK+WOZ65M0bS5qmwTmH\nMWWuSZPqlWmoQfQYnQTvgziVbdOyXM2YL/aEsnG95uLigub/z9yfxdq2pXed4G+MMbvV7+7s0997\no2/dhR12GJy2q5wQEGW5oHBZRqUCY6ySS6ZkpEKylRJSuSQekHiwwA+WSkI8gUlRgEUjZ9kYyERk\n2uE2HH3c/vS7X+1sRlcP35hr7RM3mmMqgZqhG2e3a68115xjfN//+ze2pm5r2rpjOh1v96L9vRll\nfkxuhI2qtKbIwIeatmnY1DWX5yecnT3m2bNHzC8WqelwmExJ0HcmQclGK4w2IoAPHu9SWIP+qis3\n7IqKnvQDsulpLYVI9JGgvKz7QW3vLGljZJ4qkpSddj1EnxilCUFAjDq3RWXsC6t+Pe3bUVmTJWC5\nN+JUCNfk+U37mx3fcEPsSQxG7cixPu50eTLA1Div8GvL4tETsmFF6DqpuL0ndA29i0V/5cvinnSJ\n6ULf7uLJ03A7QCfutIsJapGJQKTXKEUlxB+VRPhy7YnTgkKCQJXWGPqEDjlhRmUErTDDinJvD9/e\nIjQbhkPFy++9xd5siPGOUDtC1xKUQicXC20y0JpgHdE7lMpx64bgIB+PUGWJ9mmRcb1vYISQsiF9\n8vbTCl1WmEGJq2tc00FltoLXnjkbVUy2b4ZiOMQUOZ1tKCq5EdziinI840Mv3SFGjXnjjC9evMF6\nsk+R7/H00TNu373N7WcnvPXobQI2WVbV1PWSgxvHTKcHdF1HR6AoSqGO+45Hj97Ce8d3f+x7+NBH\nv4vXvvRZTk6f4Dcr0Vx1He3ZBbZpca1ldnSY3C8g+Ibl4gKlFHv7x/zA/+aTXF1d8NrrX0abnMyU\nDEaBqfU452na5+GtnoWqUpWdmeQ/q/q070CmC7lBjRONYvplhSBbEam+jer1hLtFu2eP9p3Ji3SG\nu4+f7zRQ16rka/vhV89Hv96R5xmvvHyfW7du8OTJYy7Ozzk9vyDPSwbVkC995TVefe1N9vaPMaZk\nvTxL5tYhdR+Kqhoynk5ZXCwI0TIYVWS5om1q2rZlUA04vnHM6dMTXGxQRghb3iFQWkyJ5slpRGlD\n5/sbPoLtiN7R/sGvY176KMW9D6AGY6JOGjZIRasW9CTNI6WZT2n2hK1QX/S+bneyFM9DioodS1Aj\nm0oqltmyF/szKB/HvlsI19Cm/r+0kO4Wy2utY1p8vXWsVkvm8zPmy3OadrNN2oghYH1ixEZJiGkb\nS9N1+OBZb1asVgvqZs3YTjEm27El6TdRmfF673Hei5GIlbSM1VJkLs4HRoMhdbPh7OKczabl/PyS\ni7MLqkGJ94GyzPjAe9/DwWRCoQ8T8VCTF7Kshxj4a/+Hn+PZ4OTFLsCve/zPz332v/vR/9PX/Kn/\n/Y/9JW7VN/l//cu/kzggbM997LXm28K07/p90nrLdin68h4tTLPjxL6Xgm1XtF43CAipOZMuMjUo\nf4yNsD++aYcoGwe4qFCEHf0VtdvgEIsyu2ipHz3Bd61Ums7SrVaEXBONSvCVSUazQqTQmcx/kk8N\nWylGWtHC9trvl0jB27XgEJIm3btQ9BZEQajN3jegPEYZjC6uITwRUtKzMqDznHw0ZrS/zzDcYf/+\ngJcPhhR4fN3IBu89USt0McAMUhyLh2gbTJ4TrSe0ltBJi5srYYyixSlF/my6AYWCR7QOrywYjR6W\nmGaA26yko1BKfj9GgvOErgVlMJmhGI8ZzCb4y8Bwuk9RZGKW0DYMqyEffeUWDsvJ63PeeOvzFO/9\ndlZNxvGtGT/0p/8Uv/Hr/wNvPXwg4tsAy9Ul62bJjeOG23fu0XSW5WaBc4GqGuCj58GT1wm/4/je\n7/w+Pvihb6coSx4+fp3FaknoIDjP8nJO21qapuXgWKKD2naB9xGtM/Ki4JVX3sef+tOfYvlP55yc\nnVJVFZkxjKYjMYy+2NA0fttnRACtyJLjSFApBijVgUaJTZicLrEH69/okP412qDwiZ4uN4zvUYjU\nQVzvH77x7XCt4uw7FK6jh6q/etNn2x/9ptBpWWTkJvLk8UOM1pyfn9PaltnsiC9++Ys8eXbCwd4R\nhwc32awtnW3JikIyR4MXF5rCMBoPWM2XoKAqh/I+dA5rW/Ii4+DwgMF4SOtWWB/Ii5zoY/LK7Ihp\nyKFUJKhImxjF2xcTPOHxA/x8Trg8Ibv/ftTeIXog9m+9eXpEzk/oiTHilJq6CkNMMz5NIp/1gtN+\ndC4PkDbZ1LEmcl7fMWz9KhNM1t9m2/Meewj4+sYpXWXsu4z+lwBioOsa5osrrhbnrDYrYozkKSxX\npBOOGGwayThMnjObHCSRPqzXa5aLBaPRJHW8/fhGjLnFLm6D7Wx6auKsVbcdq3XHet2x3NQUJsNZ\nx6axWBdYrzvmV6v0PCLjccXR/gHuvqUnMfWrpMhHFM8GJy+Aefyvd6hBYpQmvoms2ClVJuwEdT72\nsz292+i2weHqGiQaiYkgoxIcHvoZZkyP3fvsSLYbWslmLJ9/NYX9Gx/f1LoNtrUV9NuVur4AgCIx\nfLzHXVyJGD0GvLXUy0v0qIKqROmcrSHwNvAx2zomkISqMZ2svrromapCN+59CxMVN3iIfutkg1Lb\nlIAYEvVWBZlXBr+dNcpdJXZTWiuqMqea5MzyAXt4iujBG6LS8p+JwohNSfey4QdMWWHyHB/aBNM6\n7HIDEfLxWGBVnW1PmMoylJclM8ZAtC2qjujhgHxY4tuWYF3a+0UgSwhoYZ8QQ4fOK4YHhwQbcJ1Q\ntFVU4Cxus6QaTvjIS3e4bD1Xr59w/uTLjIYfYbW0fOR97+VPfeqH+ef/73/CxcU5ikiZ50Q0F2dP\nCbajHI1wMZAVFc5ZUGBizuOnb/M//sd/w3d/7BO874MfZjwe8ZVXP8/51cW2I1+vFrg3O2zTcnjr\nJkVlsPWcgMJkJYOq4r3v+zA/8P3/Lb/2P/wLFstLyqoiy3KGoyExBPSyo2t8srFS28TzLBM0YAuT\nhSQCV247X/Y+FSSDnOlogskKQlqMnA1EB03b0jQd1oc/1lLRLziwg2/7a0nW0wTdX1t41bZr/Ma6\nRIWgGmfnJ6LTUoquswyGI66ulpyfn7G3f8R73/thgi85O32CyXMqA+NxQgmcSCWGwwFZkaNNRm5E\noxuC6Lu0McxmB+xNpri2YdVsxNg9eJq23t4XAh2K8cGVs/gY0duNRmGCx6+vsK/9Pt3JW6jjVyju\nvIf88A6qGoDuX23PPo1S8JAgTdhCogKh6XSvyr2FNun7SbYfd6vQtthI18F1jRt4EXPHXgV4vTy5\nfuwgdhnnyAM7Z9nUKxbLSxbLS9pmk+wfFcF7XL+xOYezniwvmE73UapM0U9rlsslz549RmvNZNJg\njKZpNmzWklyx3izw1iXASzbsEJ08pgt4F2haj1LtdrYNgnI4lwp5JUSatm23ZLL+G89B1P81jjRP\n3xaLCSYNiQUrPyMz/95NKiYmqkrrutSdBo9LBZAiXGfTJpce+vuvLzl7EmYU6Ydwzl/8PLyQ7KJn\n7ojI8nojLNWeURDTTC92jthZGUx3HfXFGQWH5CZHZ+mpxx5NlhOyJbBvK0KVTkLySEwdotYpVRub\n6ga/w9b62SDJnWY7D4hi3RV7J4Y0ZPceY+SmyELHwF4yixdM8oa8d2DXQMzpZxQqM4TaEmqLzgt0\nbjCDISrP0UGh1zXBtWAdfr1BRUM+nQiDLkE8Oi8S4QaCl/MUrEO1HSozmLKgnl/K7LO/zDNDMRhi\nN2uCdxjjyIdDhkdHrJ+dUK83lIMKjaddr7Fdx/jwiO95/31cfMhvnZ/x5O0vUpoPcPvknJfe+y4+\n9NGP8Du/9R9Z1zVGDymLkrqreXbyGO/g+PZdhuWYLoj/qNEGGzsePHmby39zzvd89/fyLR/4KNPZ\nPp/9zO/x9PQp3q+J3lMvVzyqa5bzBUd3jhhORrj0eqqqYDga8uGPfAeXl+f823///6GtG9RQo7Oc\nwXhAnmXUG0u9sbiUm6i1eKn2Gw8q+dmGKFCfEumLLiLDUcloOmY0nJLnJd5aovIMBiMKU7JerXn2\n9JTz80vaxuLTgvpim6NiB87svrItGWPSzl2vJnkeQv1695q1nvl8SWcteV6wv3dIkY25vLxkNJ7y\nwfd9mOn4kEcPT1FohoMKFwLDUY5SAdu1BO8ps5xBUZIb2VTyvADdiHA5BEbVgNlswmo1p7ENVTVI\nbkVdwpd3szVvA4ssx6LJYi93UiidYVREeYs9f4I7OyE8fhN/7z3kd9+HObyJLgfsnBivjUXYddaQ\njBP0tTOxZZamhT3GRN/fQdJ9wdgzRbf9d/Tbj1Xsu3X1jvMuCe7JBjBCbynX2U7ioFYLNvUa7z15\nWRIjeGtp25ama7Cd6Bhn5ZDxaA9FTgywWs85Oz9nuVown1+xNztCGyMb4kZ8ULVWDKqhFC1KMhhN\nX0htUd1r8+2vdb2kGiD4BBFGvb3+hFW9Q/C++vi1X/s1fvZnfxbvPT/1Uz/Fz//8zz/3/S9+8Yv8\nlb/yV/i93/s9/tbf+lv8jb/xNwBomobv//7v385Hf/RHf5Rf+IVfeOdzU70hSiLMbN160sbWQ8jX\n8kiJPRy6e4GiCpD3ts+ulNe9Uw1s14O4bdfk93XapcI3OIlf43gByBT8tnXtYYXts5aFaPtFeTdj\nqtB827A+OSGaHJ0XmKJInJJ0anT/uKnCUbvKTh4xnTx80huKaL+HUcQ9waBVlqCX9DwS9tznKe4e\nMdnHSTMKMZLbhsn6ERN3SdmtIVhckG6GxHDTeUEMmcz1nd8hZjEQvUcVJXpQko2HBNsRujYxaTNM\nXqAH5e5k5pnMqEN6bj5t1C6gTIapSuKVQJDaiKkBShFcILQuaT0RwspoRDw8oJ6vWK8bimHJYFaw\nWS5oFpfs793gu145Ztk84N8+fJUv1DVHe5HZrQPuv/sVvvzFL7JYPWKzWdO1HV4Fus7SbTqePXyA\nbRumh4dilu081juapqWuN/xP//HfcnVxwSe+53v5k//ND/H7v/tbvP72lwgrS+ciXdNy8vgJq/mc\nwzvH7B8doJTh8qIgcoOiGPFt3/YnOL+44Hc+/b/QNS15VZDnsiEOhgO8hfWqYb2UBPA+wmnb5Qdx\npyCDvNQUhWE6mTKaTBgOJoxGEwC6riHThsFoRKY1eS7QHcpyeTFnvfHbqvabHTv4PmJiH3bTw4Nc\nR1O3dP6ebtJbk329v+J8YL2xOBfYPygpiwGr1QIfHO9+14e4eesup8+WxAjj8Yi2qzHBMB5Vwsyz\nHuc7TJ5RDQqKXIT7GkNuEpQVI0VZMhwNybIMrQ0my+g6yeTbanbT5hK8I46GtCiyCEVfyAI4IWeo\nAMZ78sUJ4bUFy8evk91/P8P3fDt6sk+41jT388A+RURFtSO3KLZrzM4ULBUf6lrX0XMMBDfdJWXQ\nFyekziNuC/DnkrpiWih3uCoKLZFHmw2L5YLFakm7aRLyJBFNbVezWq9YrhfYrqMoBuzNbpIZ8XDW\nWrNYLnj9zdcJ3jGdvsZ4NEFpQ9vWbJo1RVFy88Zt7ty8yyyvKIuKPC8pioo8y/9Y8F7cvlfvvHbl\n+n6nqbX3np/5mZ/h13/917l37x4f//jH+ZEf+RE+/OEPb3/m4OCAv/t3/y7//J//8+d+tyxLfvM3\nf5PxeIy1lu/7vu/jz/7ZP8snPvGJr3piaVUPPdLg6fWrfSu1c/OJMreOrqeMsA0FVkhEoOq176Si\nSIDYfs64hdX77UnJdRXwCb598XP6TTpEeWJCTNgGMe0eP5KqsP5rqduTvpbQdWyePkTlBVlZYMoC\nCiFAqER+2eH4ARWzpGXZGfcqpRJsGVC95U+qQEgEAJLOTLIWBVcGJXp4HVE+JNjUpwFsED9T75is\nn7DfXVAZgSVjJ+4ztl1iqgGmKjEacEE2sWzX8gfnsauazEdMnmOGFVlb0l00AoPoBt9kqEw9D+nk\nGuXF3Dum6jR4B1ajc/Fb7Su9hKXhmwaVZegsw3c1ppDVtxgP0UXG6VuPePDmFUc3jzk8OKJdL/Dr\nBceTEd91d5/HVzWfPn2b175U8p4PvZvJeMLB0REPHj9hsekw2pIZhW0dikjX1Jw+FbebG3fusNis\nadq1jD+JLDYLfv+zv8diNecHf/C/5U/+4P+W0acHfPErn+P04gLnhMq9OJ+zWq1ZXs659dLdxIRT\njMcHjMYTPvaxT/D06VPeeONVcRHKckxeUFYF4+GYqhrx7PEJTx49FLp7sgkL0aNLxSgryEpFORgy\nHs2YTPbQWlOWAwaDoSABSkvGY92x9hKV03Ut2ojbjdqOrnZcxOvVuXA70pxS9eMqteuWAC3wyc4u\nLK1TWvfMxH6BTo+5u4V291sE6yJZJoXe2cUZTdvwrlfex0v334WzHh8d1bDCWUvTLCmLyHg8AATS\n87YTAkOCI13TSeeIaGuNyVAmIy9KuW+Tvreumy1JYVuJh4BzLW0XsUGoL7nuO+Ao9xbie4qSOCTv\nO9T5I9rFBSyvGHzoe1AHN9C6uLbViauU7v9WP8+nj0WKoOXdEFH21itrWzjTO5OQHFPSo4tbik8b\nbEwBAb3TyfbdJRC2bEelhCFpnTg+XS3nrOs1PkSqsgQU1rY0Tc1iOef84hmd7TjcvwUonJNCZL68\n4umzJzx8+JDl8kpQsxRGYJ1IwQ72Z8QPGY72b5LpEpVFirwgS2zPPkXlxY5ITCEHW+bltYJsC09e\nO377t3+b9773vbz73e8G4Md//Mf51V/91ec2xOPjY46Pj/lX/+pfPfe7SinGY0k+sdaK/EO98/kq\nlMwIYyT6naH+TuebELdrnd825iiR3rZ7vDZbJyIxRNjJelQqhvrAYhV3JC7R8V+bMb/g8Y03xH6n\nR5B2s+21dh1X8manv1ivgxPBBdaPH0NRkg0rTFVhxhNiErX3wZXE5PaC6IdCIqHomBzREyszmgS1\nKugTLqC3dwrSRWqNComko9W2ao/0cKkjBkNmLfvukn13yUAFtE9i2yCPbVTayJLfo1Yab63MEEPA\nrjcE79HaEENHMDmmyDGDAXrQ4dcbgonYei1apP60pQJA5ZkYAHiLD14c3dGorKCazKTqCTFZMyny\n8QCV5fimxTYebYLoxnKRupTDAes3zrm4eMSHP3ST/b0Z3XqFto6Xj4/4gU3DRXvG6dkpq4tzquOb\n7O0JC25ZiylAaaBQCmNkhwjBcfLkMTEEhgf7VNWQ4BzGFCid47zj1bdeZ/4v/il/4ru/j2/7ru9l\nb++AP/rc7/Pg8ROW6zXBRbq649mDEzarlvaVDmsbbLOmGo7Zm+3x3d/9CZaLK84vzxmOKqpsQJEN\nmEz2mE6nZHlG6zZcnl/gbEBnkJclRZlRFAVVNWI82hODY5PR1DWua+jagNaRFEZAaxuc7yTRHAXK\nEJVBGw+6lxtIBRqRe1RryIwmz1MIbITefcskFqT3XmY/RPqC1IiaRN52Jdlu/V2yna5dr5Ng+zWF\noWkd42LABz7wbr7j2z/BdLzP6eklZTHEaM9lvUJpz+HhhLJIXrlK8vBMppNtGrStsIm9DxTlAG0M\nxhjKssTFDmNkQ1wvNzjnnyMoqKgJQa5P753Y9CYoTORMskiEIJstGrAeQyTzLeHtL7CxLeVHvxdz\ndA+2pCfRF5MYoP2aKh6YpieXyhQkpVn0ZglqtzDJfdS/IbtVK3WhfWmSFtxrJ1rGKl8FpEZF23TM\nV1cs1wvatk35gybNVxvW9YbF6orFYi6IlBIjkrZraduW8/MTLs4v6NqOzaambfy2Ge2Zj0YbmqaV\na81IYHOWSZixSTmJL3pIZyVIWO+cI0cvln/nhvjo0SPu37+//fzevXv81m/91gv/Te893/md38mr\nr77Kz/zMz/A93/M97/gZ53utWNy+VT0b1G+F8vLc+z1G6v5A7y+8Q+GcGJv4iBiKy9fk+yY9bpca\nC4c43Eh3SIzEXtz/gscLQabXj216BKTWWBFTVNI7NuKo6C46VHVCNhphyoqBztCDiqgMysgWG6JU\niwEZwOt+INxvZlHinkKQDkEMffuuVBhcop1T106k3Kgh6pTAHIjKomJB7i179opZc0LWbohKsgZV\njCiTYwwoo8QG0DlI9m+EiDZZEibLTEHCT6PMA5tkNVdVhLaFzhEUuCwTgag8sNzAOqJyjXICoYZ+\n07cWnQlU6tpOZqdZhqkGItXorDDFfURliIOPzhlOpxxOS85PFzSXVzAbUo4mbK6uyCcTPnT/Nuva\n8ruXlm5+xfDGTSaTKePhkLOrFUaJy4ZWkTz5w0YUtms5efKUqbVM9/epyiHVcJQo3tDZwOn5Kf/6\n1/4FD996wHd+/Lv4vj/xQ3z+C3/El778Bc4uznBth7OWi6fnrBcrrs6vuP3ymv39GeVwwK3jA/7k\n9/4JPv+FL7JplinDzogoebMh+Mh4OiZqeQ+yXGDksqgYDIZoleFcRJNz6/gOq3XN2fklbSM3hTay\noHd2g9IqEWxarN15oG7hFtJlpyHPFEWlyfOMoiwpyxSuqhTOOXEoQmGdpW0cNtHlFUIE6kXoLnj5\nW76HiPpr9PnbJc9zDg8OeOn+y7z7Pe/hPe96N9PJBGMmXM1XaFUwqDTL9YLV4pJBBfuzGVrnqDRW\nyIucGDVFfkmmS1brjdi0FQOqoqR3ATFkBB8p8xIVDU1dC0oRZUMmCulN68D+4aFs5METk99n13TJ\nrUluUK000VkZKXhxD8qx+Iu34fERDKfo8SFB9fCyBHrLhiedqhT+aeqXDBRIRJt+893CqteKy+te\nlSHZhwlS5YSIEXuCR/9zauuaopD4obZtWa+XLFYLNpsa7wJlURBCoO7WbOo16/WSzWZF11nKoiTL\nJBzYWUvbNiyXK9q2S4SPd76/MUbazrJar2malq5t8E7jXbpOtebFt0M5HzJDTObkW6wu7bZRf41f\neWe39MfZhI0x/MEf/AFXV1f8+T//5/nsZz/LRz/60a/6GzvHmZ0E+1qfFvsGJewgzwjEvqVSCRno\npX/9NaLBgEYybGNPkqSHj4Vg5dPcUMHzWuMXOL4pqYZURwk61F+F13tzncTxbDev/lBAdIb6ZIEq\nH2PKESovKfU+WZbvGHohEo20zF55YZT216+SeYNPUSpbSEGxdSGRuBqVYC+d2EsJ8BVkZyvgVwSG\ndsnMnZN7YYBpnZxwtHih+qaRn3QyI0RrovOYvJButdugjcaMx6i8IDortm9Ntz1xKjNE16F8wG82\nsiFu/fz64ZKW6CcvHooES3QKbSp0ZlBWvDl1lgx6W4tvu/SaITpLcA5VVJTTMXuHY9xmTU4E5wg6\nY7lqiJ3n8PgG3/Guu1SDZyzqJTjHYDhgMh6yNx5xdHSLZlNzefaMynsyoAacEnx/fnHCejWnqobk\nZUk1HDIaT8mygslwzNX8it/4n36Dtx+9zXd//Hv4yEe+k6ODm3zmM7/HG4/eZLFa4kNkuWhYrdac\nn51z/5WXuHXvNqPJkHv37jHbO2A+n0sCh21pmg2dtTjvKIqSvZl0NkVREAIc37jN4eExzgYWyw15\nlmGM5unJFVobcmPoug5rA8GDbcG6hs7W2K6lbVqsDTgn3WE/f1ek3EUNeW6oqoqqGlFVJXlRSFJA\nFNGxSjBOcIrOdjgnphTGZBRZRaYzrLcslivm84V4ufZKgGsVZJ7l3LxxzIc/+GE++KGPcv+ll6mK\nDB8UbatxncQybeUo0TGdTsTGDtK8WVGlTNJBNcaYjPOrMzrXMRlNGFVDgSRDxDqH857ZZE8gvbZL\nC1RIDiKOztZkRmZHRitM3NH6IQmxk09oDFqsCn0gOEfUBp1laNcRH34FshJe+jBqcrQbrm4Z48mr\n+NqjxzRLInqEMdkzenfkEWIixVw7j2obrSGLslZaXOH6NWr3g2lN0+A9XdOxWC9ZrTe0bSezQ62w\naa64Xi+p6w3OSshuVU2ZjPcYlBNQQpqZL+ZY22+IcdckpEWfGOnalouLE05OHlNVGXmWsVotWK1X\ndLb7Y4B7O1jUp0Di7ddjBL727OzevXs8ePBg+/nDhw+5c+fOH+OvyrG3t8cP/uAP8mu/9mvv2BBD\nmmv217hKaUn9XhJDr1ntyZWa6zm4u5/s2cWKqOQ60EqTqRy0BCZEYkpBCrggxdE24CH2oPr/ih1i\nP7gUGOP5CYhAS6L9E0MJoQ+oaz+lYoatI5unF5jBW6gqR+UanWeETPSJJPhUK4P48qQmu7c6C15E\n/toliMSjoyLGDJW6U7GFCtcgmB1DbSuWjpHSt+zpFaWvyTSYLEeb3m9UE+oGZxt0loklmwsEHdDO\nYTyQFSI6dcLkMum1mywnGoe3NtG0DaF39kkba1SyaKjUPSgMZBHtNdGJBgdnCVq2bpNn2FaYg76z\nwkY1hrwconODXS+J1mJiICty9u7cSGYHnk2zYrPpePXRkjZqvi3PmO3v8b4YeF13NLHfEEcMBxvu\n3X83Ram5eHLA+o3XGdmWpYpcKUXIU8yMtSy7SyKi7TNZQV7kjKf7ZOWAzls+/+XP8vDJW3zsW76b\n7/jox/iBH/gk+5/5HT7/pc9ydnmGdQ7vLWdPG5aLK06fPuPuyy9xeOsGg2pIWQ7QJqMsSrzveHb6\nmDfffJ1NA0VRUJYls+k+H/jAR/nYd3wPN47vAprOtayXc7785S9ivefpk8es1+uUTQdKZ8SoaeqO\n5XqFsxbvAl0XdrPs5+5JmWWrKLKFLM+pqiFFUSaURKjy1ltMUESj0LkmhEwgyWJAVQzEK5TIeLUk\nKyCeXtA0Dmu3pTNKQZkbhlWB0gbvA029oV47inJC00QhO3VN8nb03Lx5xPHxGGPEKFmgUE1eFEQi\ng+GQoAJX83PRH2YZg8FYZCmhZbG6EjJHNmC92mBt0sQFka5456g3S6pCPIE1KgXhyrnJsyI5mITt\nYhe8SJG892Teo2KQGVq7QD/4HHQb1L2PwOF9QmFSAa13hba0jmljTA4mvZ9vWlCuy+xD/zt6t5HK\nT+xSYlRCZHqh+O7d7bsYsZ/cbDZSsDQbYpB5aIyBrm3omoamrXHOorWmqgbs7x9xeHhMVVY0Tct6\nvWa9WuFcm+DLvi/aXVYRcM5zcnrCl1/9Im3XMKhKNusljx89ZH652MoqXvjYkhDVtS8lhubXiD36\n+Mc/zle+8hXeeOMN7t69y6/8yq/wD//hP3yhP3V6mkLE9/ao65rf+I3f4Od+7ue+xnNiO9cTdZRP\niJNOVWfPRkHeb0UPirMVUGxhzh0/pV/He+mdNikKKrWh8prTprvdo57faL/Z8ULCfIEx47Y13b3o\nHgfuG121vTb7jrGn/3ZLx+bJCWaUZollJQxMkxG1VDgGte3W+kWq34SDD3htd5sePYs03RRRbiKt\nDFFnqeNCHpuIiYFh6LhpG6asMcFhciPCbrU7DSozmNEQnecoF/Fdh48OPaiEjh4DvpVsxWS8kCA+\ncahxbUtou3STainUNEICcA7fNJiiSG4cEaUN2hQEbXeSECf5bTqZVrvO0m2WGJORz8YYo/G1GICH\nEIjrNXpYMdibUo7GtKsll6enPH5ywatPoQ6ag/EZg0HFbHrIfut569kTNpdL/GpDXbdczRve/Z6X\n2d/b52Iwon39VWbdmqFzXPrIRqkdkSTIsNz6Gudb2rZmMjtkMJrQ1GvO5qf8j7/1m7z+5mv8ye/5\nb/iO7/xeDo9u8Qd/+Ns8ePI2i5VkLNbLDW9v3uTs5Jxbd29x713vZu/wKA3gDIf7N7lz+x737r7E\nF7/0OZ48fcrRjWN+8Af+NN/2rd/J/v4hxgwIUWK+vLPcun2fd73ng3zlS5/j85/7I1597XXWqw1d\nV9M0NU3bSBirF8q6MSa5n8StvZrWUBSGqiooyhG5GaAoCF4TgsZkEsYaVYmyTYqv0mSxoHeMESgu\noH3EZJrhcMh4PGK1XEq3au32miPK54v5gtVqTVM3nJ2ckOcl40nFYrVhvlxiu4YQPFkON2/uMxxk\nOG+3YwajNLkxeJ2RZwVd03J5cUGwntKUFHlFcJHl5orlesnN4zvYOrKYn+OCWBz25gXee2yzIsdh\nW8v1LqyvuzXIiCHK/aaUTwWpmFFok4zYtULbNZy+RmhFmqNuvQK97VuUTq1XHmznhCQ4DVnsntMi\naoMO0inHnWZjR3SSHVOer0r2Y9eKHaXFacb5jrrbsFhfsVzOqddr0T0bg7WtOPzUNba1xKDIzYAs\n08z29pntHWCUprUbVvUK63yaQ0sR3seHaaWSX7OQu5bLmjfefJPlak6eZzRNzdXVguWqIYRIZjSZ\nVtgQ8H533r/6iCT7wSAwYb8W9iEM19m3/ZFlGb/0S7/EJz/5Sbz3/ORP/iQf+chH+OVf/mUAfvqn\nf5qnT5/yXd/1XSwWC7TW/OIv/iKf//znefLkCX/5L//lbejxj/3Yj/HDP/zD73xeKbYppuIkJnP1\nLaFDSdKFUgjpycvO2TsByduk+7c/oXT99H13DfTju6gjPjyfPgPpfFxTYrzI8UJepvInZPPj+kW7\nbXmvXajbgS7pZUUMiuAN7aXFPH5GNpyQl2OyoiLXGeJq7wnaiFk1cUud7eN5gg5YZ4km+VQGn+i8\n1ztK8dLz/aA/2XsRAzlwFBpm3RWGgMkNu1MYUcEQo0XSEzKpNsqcGIQ4owcDqTQ7cZdXMWCKLA2b\nTHrDIFOSheZiByaiXEg3ZiR6j1ttUJMMU5p0cQRUXmCiglqq0x7SV1qjM4NtLcuLc/bv3iMrMtym\nxm9q6WKNw66WaA/ZWGQepijpOsfZeWBel6ACV5c184sL9m9V3DSRR5//PdaXDfdu7HGybnj7zVeZ\nDA65cWvGwSvvoh0PaV77MjcXF4xt4HHwXCZoK8sKuSl8QDlP1JHF5Tkj59m/cUxnHW1d8+Dkbf7p\nv/rv+dYPf4zv/Nh384nv+yH2vvCHvPbGlzk9O6VpO0IXWdoF9WbN+ek59155N7fv34fZlOVaGKfv\nevn93Ll1n+Vqzd37L/HBD36E0XAsUHbQ4thvA86DMQPu3H2F/dkR733fh3nrzdf4wz/4XV79yld4\n+mxN27QED5PhRNIhDva5urzi4vKSeiPztizTjIcDyrIiT11eZnIxlogZzie2mw5ALsYI14rQ/mNj\nJMVbk6Ezw970CNfCM/eMzcY9B5k6H9i0DU1di8C7aZjtHZEXHevVmuXiCtu2RKU4OBwwGGQyPnCS\n+q4SE8UGR2c7CLBcrFgt1ygPk9EErUTsfzm/5K23H3D78GVW6xqbQllDCNt5fNussO2SWGVY63aL\nU0wONtGDT37CCrxPonsVkzNUP8ZQqJgcKYOH+RPsm78rVf6N++i8TOukECTYOg2lRb1f4nqRmu7N\nDnY5h+r6KqVVotwnZnm/OF8bVcjv92bSgfV6xdX8gvVmhXOBwuTiI1qv2dQbNk2N94FMG3Qho5Xh\ncMCwGiIelEHCgmO4tqnv5kd5bhgPJxRFQdPVrNYb5ss1q42EFAvZRGZdRaE5mE2pyoLlZsNiuaHr\nvnbiuzx/gQl1lI5aENqUAfp1hmef+tSn+NSnPvXc1376p396+/GtW7d4+PDhO37vW7/1W/n93//9\nr/mYzx9q1xL3bjUJ+hbpT0ClNBJiH/0mBYNOI7Je/qPRkJKMfOgSj0RBFLOE6AMheaUabQioNNtP\nzDet6QPCX+T4Jhvi9nKE7cbXfy78UrlT9O6iv3aTKxSZEh1jIOI7TXO2wowfUgzGmEIo4DIjI1VW\ngheHKNEnysiNEZxHZSpBX14IMCQKr/TLSZ+b/FGVONQoNDmRfTpm7RzlalRVoot8a4EklkKB4AX/\nV32sjPPE6DCmFHTIZOhBRsgMsZP5HTGgbBoKEYjeogOYvMR1VlhSpM2PiFsvJVdOD1P1nEgAeYaO\nhXijhr49VmlGpNjUG2Y+4NtAbCO6LDFFLudJZ4SmwWuFHoFtLfPzmqtVgY4Z49wyKg1ER7u8ZLJ3\nwMfuzZhlHW+Wivq99/gPv/8V3njjC8C3cPelI17+lrtc7u1x/tk/YO/iDO07OhdYQZpXqK2omRBx\nsWO5uMAFx+GNW8xuHVM3DXWz4fNv/BFvPX6TD33wW7j3rg8y2b/JG699jkcPHzBfLrDBYq3n8uyc\n1WLJk4cPuPfKK9x9+RXKMmcwqNjb2+fevfuMJxOCs1jbkRUFPSUxElLKt7j1K23Y3zti72M3eN8H\nPsqbr73KH/zeb/GHn/ldLq+u2Jsd8P73f5Dbt+/Rtg2XVxecnp5wfnGGs3abniEWg4osL8iLCq2U\nbCB9WRgDMXZieg0YIxmMxmSpKEtyjcxQFAOGwzF5cYlSm3dUrjF4rG24ujpDUzAcHrDeCJljvV7h\nXctkMmA2KcSkIESUBu+cLDg6E73buqbrPGdnJ9QbIRJNZ3soo+g6x+PHD+gay2q1oWmsdC7Rip1g\nAOc6ms0C167A7ENwqN4RJj3pzORbNqiPEunT62t7lCjEiHIOtCIGJZzAGPAXD7Ftg958GHX8Cmpy\nIPd12tdiDDsz/9gXiFFcbGK8ttn0usRrcGHSvvXSi52I+xr0mjaLGAKus6yWS5arBXVTy/aaKdpO\nrt1VvaTrWiCNCLSmrIZMJzPKSubJs+mM/f0DVus1WW7Eh8NkLBcbnPdMpmNuHt5iNJyy6dacnj7l\n/PIKa3fpDyCd3cHehHe98i4G5YCLqwvefvSIi4vl197ckkTBR0mH6BuVkEzUnbPv/J3/AsfWtkJB\nP9LqY9j6wIdeB777Zv965Ln3J0ZMXDwq9CrzNJ5T8jqV0iT6iTQXSXK0RVy1YQsVvMDxTTbEvg9M\n7TlsF4K+M9zBG/3atKvYpGNSuCiJzjEa7CpSP7kiHzzBVAN0NUQVGTrTBC15eltBvQIdU+hvEFmE\nV0lXht9qXWRBlAohajnZKoIKsmgP6ThqV6hmjssAXSakJhBdgChejeJ2IpVWcB7vrQT/RtKCJ2+A\njopYFAQV8Osa5dJMMAnVTFEmMb/D+jW4fgaiiNbhlktJ3qgKdLZ7fdpk4ONzYlKlNCbLaNY1q4tz\npvsHmEGBypOxuPWoLCe6htA2qLxgs1hwddbhXcFYK/YLz3ScMxlN8NaxuThlenjEB+7dQl9d4Qcj\n3jgc8/qDt8mNIss+SllNqG68zOB9jqsvfZZyfsrN2GFdoAm9Q1BAp5gq2fShWa942r7F3t4+e/tH\nHNy8i9KKN994kyf//jG3b7/E+9//bbz8vu9gNL3Bowdf4fT0GU0rkgjfdthnLcurK86ePGP+vvfw\nvg9+gNGgQJuxMPXaDd5b0DnGlCkKSrqTiMyLQnBgFEVeYXTBu9/7IQZVxZ179zg7OyfPKkajET1T\nb392xOH+MeVwSDUoUUQ2myUnJ084PT1jvWkALTZcbSvP13qc7YRxGqxAhUql3EKFNhlaGfLCUeSS\n5bnaNGzqdrs09/dMf1jXcXl1yaCYopSmbRtZqHXg8GjI0dGUsspS1XuNyphy5mwrZtOb9YZnp09o\nmpbDg0Om+3tENMvlgs2qZjI8oKklh5J+9IAsWk2zZr04QStPXlYYHZP+sp/1iWGFSMcCyltU9BCT\nr6xOG2ei0Gul0VpmeVprjO9wZw+gXqIvH6HvfQvceIlYVtsZojANhX2p4rUZTNoMt4jqtky/toD2\nZhz9ayJCdNtzLEuGxrqW5WrBYnHFarXCWovWOd5b6nrFerOk3myIXlPkIo/Ii4LjGze5ceMWk+mE\nPCspBgOiVuzvHTOfz7lcnHN+dsKzk0eslivGownHR3cZjyZ0vqOqSkJ0XFwu8K6XJkSyTHFweMgr\n916hzAuGwxFXiyVXV6uvC516J7yFrbQgFXES/9V+w9X9P9ehld5OlvtD5pnbKCP6RTqmjbDfymWd\nNakW2jqoEKIDkqQihX3310BIhdFOsqFSjbTtkl74uX/TDnH3YCJNuP5Ce0d7+WQLFGy/m162ED2i\n6INUMNgrz/rJU7LxGDMckZclIa8gC0QfxZIrvUitC+iVkFGYmOhMfib2fVfPwOsVkaQcRUVOYOpX\n5KtzrG0wo0qE7s6iXZpDJod1jCYace+wTUcMDooMpSwqiM5RKg4lc5Gqks2o7SBElMogN2hTEvHk\nwRE6S9uuBBtPi4hvalRdiDeqLqQLzjJ6eEF7vT1/Ssk8I/jA+uqS0WxKPhwIXNJsCK1H5zmUntB1\nBO9p6462i+QEZpljr3AMiopqMCJ6x/zylAAMZvu8azojrDd87M4ei8slpydvoKPD28hk/4DIgHj7\nHqvoKC8vOKDjNPb5BLIo9+HMt28csVguma/XnD5tmF+cM57OGIxG1G3NarOmtS2L5ZzDozvcvHWf\nl9/3bUz3H3Py+G2u5ue0Vs5l02x48vAtri6e8vjt1zj7lm/nAx/5EPdffheT6VRmNMFinVTPJiuS\nplCTkaGVLNreR1zXskyLXlWNuHN7iNI5tu1Yr5fYThaUwWjE4eEhx7fucnCwR5YbOtuyWq44OXnK\nydOnNLXE8Tw7eSbzvkbRdWK7ppTYpBlj6FrxpVTJaJi0UHddRxBncZkVGZUcPSIxip/oYr6gPJyg\nNXg8w4Hm6GDCeCyEnhj6DUw2Cp0pjEb8TG2gqx0nJ8+4urzEh8DB/iGzyR7OeTbrJYqc6C1tYixH\nPMFJ1Fjb1qyXl7T1nMnekOFozNAocsW1EGCF9w4dNAoJtRXIVCfnKIXGoGMitfROUgqUMrJBxkBY\nnaOCRbcb+fjuB2C8J1B46uykYpCiVMW4XUR3/qXX2JzsuhDNjrQTlSPG6wt03EotFqsr5usl62Yt\n87sMbGepNzVNLfPmnnRnsoz9vX3u3L7H8Y2b7O8fUhQVo9aSZRV7szXr1Zr1ZsXV1QUnJ4+5vDwh\nBNgbHzAaTehcS27EuabrOup1m7o7xWRccev4Fjdv3ECbDE+kqkoZA30N1DSmjqr/jzRq8lGyDeum\n/sbL+3+uQ5ME+CLGJ6RQ4LRJCbyvt5v4tpOPAqP264qsgX0YcRLx92Bc2m92nXMPL7CFrnvk4I9j\ndvBCOsQd0KB3uzAkLldvnysfGbWbgV17mmLSHOUxnA3UZyv09BFmNKYYjsgHJbEo0DpPbXIAk/Xn\naAuOynnqk5TFNV2qyCDuF0pjtLikKAIVLdP6CreeizUaCrxPkVFJGBoCIVp8I/NDnRls3UjVYTuC\nUvK7ZYnOMtnIghFNTJYRtQyDCQrlAtG3yKA/Q+fFbhYSI71K3K/XmFweS8eY8hMVyqS5Z6/aVqC0\nRPS0m5q2rcmrAQTwnZW0kMyALkVH5j1FlTOaanTWUWSBUgeyACpEyuEQ2wxZLC8JwTGcHfGe6RDC\nks29Cf/hS2tOT97CWc+tex+mGI6AAerwNroaMzk7ZbNesPCyAejYm2xF9idj2rpOl0egcy1nZ08x\nlxnFUATk1rZcXj1hubng2bO3OD56iYODY+6/Z8r0/AkXF09ZrBZ0tsMGR1hb3nz9VU6fPePLX/gs\nH/zwt/DuD7yP49u3xZpNiVOIUhptcnRekediFo6KONtRb1Zcnp+yXq9p205gLRVA9YuIkGvKQUFV\nFZRFRlUNqAaSS3l88y7vee8HcFbmeWdnz3j27Cknz57w7Oljnj57wmq5SG+v2MnZriV6jzYKYyAz\nirpOobFAVeSMBhUqepquw9rkpdlswEduHt9DaU9Gy2QUyDJDcI4QNXn5/G2rdLLLJWJbz9n5JW89\neJ1NXTOshty+eY9hNaGuGy4uL1kuNjRdt3X96NNnrLWs1ldcXTxG+YbB+Abj4Yj9sCJL88AdqS5t\ngmlR9j5itBgDCIlMyBQ9eWyLtsaA0YYs03SdJbY1enGC6mqC7/D3PwyTQyku+0WwX3+iZxv/1HeK\n9KkVsjXGtHMEFUTT2C+013bNCDjXstmsmS/mLJZLusYli8JAXdesNxsxO4+SqKLQjEZDjm/e5vj4\nFvt7B4yGQ8mTzAvAMKjGNJOGpmmYjsdMRiMuZnsslgvyLGM0HJK3Gm8nHB0eczV/hnIWH8FkGbeO\nD7l9fJPZ3h6gWK5XZFn2DXWCMZLIbqlQjzJDa7uWdbP+Rsv6f7Zj6zx0rZNP30gAQ5QZ31Yq0pNv\n2DKOY5A4Bx8cAQeYbSctHSM7klWEoNy189TD6YbekOVFjxcW5vcTux2hOOkDk7eoRmI3VD9V7n+m\nf3KQBqkQoqKtI/HJOcX4KdVkSjkakucDVCGifMn0DWD6uWLa9Igiwo9qO+8DZKMJij46KepAFjz7\noSZfLXBdTTUaYnSSQGRCh49e8gy9s/jagXF4JexSsgycuNLrPMM4T1ZWIkjOMlRmZGaZ5aIhDAJf\nxM6JZMOLR2Y+GG0p0CFEdKbxtsHVOSoz6FKLl2kGW30UpLBMYZtW4wnryznN1YqyGJAbkSeoQujh\ncSnwiLc1070J7/uWl2g3K7zvaFcrYrS4dk05qhhNZzTthnq1RKuM0eEB798fgbW0lyV/8GTNxfnb\nKON56ZVvIR/cwOshqlpQTvfRl2fw5DGLei2iYC2X86tvvo0LPVssQUExYjuHUg3VeEIXO5q2IYtB\ntFtXFwzKCftHtzk6OubOZMrk6pSryzNWmxXeOQiR1XLOq19e8uThYz77mT/k/iuv8NK7XuLo1i3G\nkz3KshSTArUkzwuZUWcFzWbD1eKS1WpBZ1u0zsR1yHlcEOF2nmeMJmP29g4Zj/cYDkcURUGeF9tN\nDqXJiwF7BxWz/T3uv/Qu5pdnPHnyiCePH1M3DYXJMXmGNoaua1jMr3j8+CFnZ2e0TYtWiqoaMJlM\nUETGoxHNZiXQf+r6XOcxKmCMp+su0crJfec1ucnJ83KLw0jkpPw9pcF2nvOLOa++8UUuLy/wzjMZ\nTjncP8aHwPzikovzKzZ1tw2BFjtDicbq2obl/IRmdcZoUjLdP2BU5dxoHUb1C036N/jtguedkxl/\nabZRbFs2YAjJHm73+2nEDyHlpeY5mgXh4WeFmfuuj8FokorKfuPrxwj9our6R9t2iluOQ4jEbTp7\n3C3A1+ZwtnNCVlouWG9WW1/kutuw3qzY1Euct+RGSFXj8ZgbRze4eeMGB/v7DIcDTJacdwhkuaKI\nGpNVlIVB64DSHqXl+9Z2oEV8bzLNYDBgOBzQtS3BWYqi5OjgiIPpPsPBGB+8EP/0O6UTuzVZXlLo\nO7C0bjjn6bqWuqk5XB6gJi/eIf3/etysjyGalGMqjOWo0yzRCwSqlGcX0J0gdYxsfD0k2hdfKVsz\n+t0YTl738w5EO4MbscvrO9LgA/4aXP7NjheKf+px+hBVn2aWEN9dm6q2VaDe/eL22HFR+/vCBkVc\nONanZwz39+nGY/KiJCgPxqBNLt2aEhhxK/7vn0/sKbjygCrNKaIWNxnjLTPtOdis0LYjy3PKqkr5\neamSVNcq0ADRCvwToxVHGGUkiomILjKMDcSBJ5QZOs8xoUga4540g9C7DcTOgpOZiR4OxZXHe1zb\nkmUGFSN+vZEO0uSCxJLcGPqbYNshagbTGZvFgm7dYDctZlKRDQaoTKX8ySAsSG/RruPo5g0Ch3Sr\nDcv5JZvFUob+ZUk1GjOe7NFdnLFeXGFyxWh2yIdvHVHYhj0V+N3TBufnxOYBLraY6ibe56hyw9G7\nZlTVkC98+Yss6hpj5D3fhBptJKKrF19rNCEEbF3LuSgLgT3Sgty6muVyzvnlM54+mXG4f4uDgyNu\n3dmjXl+xmJ/R1GuZi/goAuk3V5w8ecyrX/oCN27f5Pa9l7lz7z77h4dUZUme59TNWmDmTcPpyRnL\nxRUhRvLCINozh+tEulJWQ6azA/b3D5nNZkwmU6qqJMszIZl4mzRvIktwtsG2HU1t6TpHWQ6ZTo8Y\nj0eMpzMm0xlFnhFjZL1ZcnZ6wunJU+ZXl2w2NavVkqvLMy7Oz3j8+AGmbTDGA5rhsOTG8QGzWU7T\nLtNMUmKcotmZHisthJqiKNBa4WzH/HzOV77yBZ4+fUzXOjJtuHF0g7woObu4ZLFY09YNPgSImt7N\nKTpP29VcXZ2wungKMTKYzDg4PGCM51CF63dvKnI6jMmFZRrFkkz3hAet0JneSh9U2sSkQkr3k0rG\n6N7juxaTRUzrUI8+jy8GZK98KxTDLVKyhYgTGUbu+pAWwWsrTXTsRjf9300b8Ha9ihLGu16wWotl\nnYwlnMwO6yXOWTKVUWQF49GEmzducvf2PY5v3GY2mZHneSrOfWJ6OhQeY0SQXhQZeZ5Rljl5oela\nh21rImqb3DIYTNisa7zSmNxQVFVqDApwVmbj+hvbuV3vklR/Vnyg6xxt1/FXf+H/SLN9z2WWl2UF\neV4Kccx5OtdhbSsCfx9wPmxJOrZtqeuaznX8zt/5I4qi4P/2Kz/F0cExw/GIPDP8P/703wYiv/Ab\n/10is/TdnsHoHtZNBCidnIXSCI0+PB61Tb7oN8KQzFRkT1GISYNK+07/pibNZWojxLO6TzqCPmj9\nRY8X6hBTE7tFdon9BikvXlIo+rlXX9H08MR17mn/SAAa20U2p3Pqvcd0kynFcAi5EVanSi4TSLW5\nTULvW+TgJC08yEKlEEZqTISPSsORXVKtF0QieTWQbLj+GcSQYJlIVAFjxEPVWUvwFpxDZyIkdV0L\nnSUP4roQvccU/d/3mACqMLKxeS/tu47oqkAVRZovpnPmLD4GtMqJXYNdzEUTVZWYCOQ8d/76f8rB\nAKUyXOewm45s0GBGIzkdLqBNgcoV3mvsYonSC/K9GWZvJl2LytjML7k8P2MPKMoBw3LAfDVndXWJ\nUobR3iEfuH+PcVlx7/FTHsYRV7nlZP46o9BSje7ShT1Wmw11VuLyjHajwAYyBQWpUjMqyUfEyDtq\nJTfpZk2mxFMzM4q6bWiTK1DbWdbPlpw+e8r+aMaN49vcuHWHW3dm1PWczeqK9XpOcIIONO2a7lnN\n5cUZb7/2OvtHx9x56R537r/M4Y1bDAYDvO+Su8gKY1rpViKEIMkGwTsyYxgOBgwHQwaDEdVgSJbL\nTDQG8XONiRoefcB2jqbZcHFxxsmTp2w2awbDAXv7U2Z7+wwHU/KyFOcYlTEaTzk4uMG73/0+rHUE\nH6nrDQ/efp1P//Z/4OLiDG87ZpMx+wd73Dg+ZjQeUWYVfa6dSrC08x6MJScnRjBGjApC8Jw8vuJL\nX/g8Dx68yXpVE2xg7+CI/b2brDct3byWzS/JK/qONPhA2zbML09ZPnuLuFkRBjn7RwcMypzR6oyR\nfn7+Rox4J+SvDCUzeCJQgMkwucxyI56Ig5DJwqETcSItfMYI81n8hSW/0dQrutd+n1iM0PfejzZF\n2gcDMdHrRXJxbTG9JkDvN49ebrEj1uwEaTFG2qZhtRFJRfQRlMxvN+sVtmsxCHozqEYcHR5x59Zd\nbh7eYm+6R1lVoJARRSJaFUqYv6JF9OSFoAVKiYF8jBHrOjKTb3WJVVUxnkyIIVAWOePJkGqQo0wg\nOivM/a+hJdy+EzFJ+GT3IRJ5c/8B/88/+3dwLmWAOrcdL+3OUXLmUlzr1MKW4NJ3YP256pMplu9a\nc/Rgn81mTTvaUFaZcDy2M75doSIDLp0MvYPMutPILaLwKsoGpw0945cETYtzjYSEqySX6Q3MQ4Lo\nde9G08srorz3AfApwEGF5FT2NQwKvt7xghvi9V7MPNchhtQei+Yobouy/pCf0dvH6fd0OdmKbu1p\nTi6o907IxmORE+QGlRfpN7ZFnlQVEbnRQiB4m6jtJlmEihtMruDQePZWK4y36EFFPhxiYtzefPIE\nAjHY9Cz76jMSXK+lEqg2hk7IPnXa0q0hloXYuYUKIhhVimF3nqOCRxWgVB9+nDo9BXhwBDLlxdZt\nvcSajCyOoSzRqre021W1MUJeFBRlSbNYMe46gusIvkTbCNaTDSqBlYLHZwVudYXKDfl0RjEeMfER\nomV1ueDi6Smzwz0GVUXXbqi7lvXVGUYZBnt7vHzvLtPxkKfrmj+6qqGAyRQae4qJEywjtL7J4Y0F\nOnvKxXxB01mwgUJug+2NIfeqkIlC8DSrNbf2D9nfP+L0/ATbdZLF10oqeBEdG295vLnk8vQR+0f3\nOLpzl6NbB8yaKzarOcvVAus7IOC7llXXUNcrzk4f8OXP/xHHt+5z9+7LDGcT8rKUm9HkKCTpXDaE\nDhU9MWpcB21dsFkVFHkkNzHN//LEePZ4H7G2Y7WYs5hL5l293jAaD7hx4zb7R4eMRhPKokIbjXNh\nO6PTqSpXSjpO7zsGVcnh/pSXX7mH0XcZliVZXqWZm8akUNre/cGHgElwevCO4AVKDzHy7Okpn/3c\nZ3n9zde4vNpgu8jeeMLdW69QFBPWm5oQ0l0co0CKQYo521lW80sWTx8y3swJwWOLMVVREuYXqKtH\nbArxbs1M1t+JFMaIlMp1uOjESTND4FEtPpr9OhRDr1fuC1i5o41WYtkYJWFGIck0/vwJ7Wf/I7ky\nFLfeIxtLP2cKSd4Ue38cUueZ7rF4bbXqs1uvQWvy41FizJpGElSQpItNvaRpNzjnQBnKsuDgcJ87\nN29x6+Zt9vcOGFalFM8xbg2+jc6IKFzwKGVx1slaGCy2bQTC7G3tjIR6Z1qzP52xN91jNBwwHAzY\n399jNhlTlRXBx9Qh7gCjdxz9ZuUF1fq+1z8h44BkKSgkPo3po7C20ox0XnqQuZ+xftVm+NWt1fS1\nMff+l1vUzYaua/BuTJZvBUjsZr7bljy9LfL1QC+JSH95m3Iii6NKM2GttQRcxGsGB/hk1H3tsVL3\nKM/ZowKJjepFl6lkBvk8oeobHy9IqkltrkrONFuQwojn4xZI7U8s29MetlPV6yom2RRj1ESnaS47\nVs+ekU1n5MMRZTXAFGCyFBnS48mp7ZZuNDkZoJIVmhBsFIoCz7SdY+oFaMiHA5FKWI/XIMbFAknE\nZMFlTEE2KGVu5xwmZcXpTNhl0Ytllu9qCAKHkYJNVYo00iHKTDAfgBbYtTfjJr31RiuprjNPpg3R\netzyii06rpLdVdhBAhAltUEr6uWSdlwyaEf4zMoMM5FzYtREH8inY9w64BcLYf0NBxSjISO/j7eO\n1cWcxcWc6WyP4WAkdP3OsV5eYDJNMdnn8OCAwbCmjCeMmivefPtzPLv0LMyA0d5dxpN73Dz8MMPR\nAVXxJueX57SteIPmEUwuC7vMp+x2cKRi5OLZE5rFChs90cO6trROzBMKFdFB5DDrxRn16oqL07c4\nvvUSe0fHTPfvMRxvqNcLmnqN7TZYHyTFfG1p1i3Lyzlvf+UrDKdT9m4cs39wg+nePuWgkPgjDXmW\noU2qnnVgtTynWc+5Oh8wme4xHE4oqyEmKwQGRrFZrbg4P2Mxn7Neb8iLisFgxHA4ospLcpPLfFkr\nskx0kSEogrcSH9S2tE3Dej3HtlfsH4x5X/Ye6npDW3eEYMgyg8kMvc1zwG9hR5PkJXiJLvLW8/Tx\nEz73R5/jtddfY75YQ1QcH93klfvv4cbhTVSCxSRLcgch4gNNV7NeXbE4eYhenOGx3BwOyG4eoS8v\nqJ+8TsOC00I8PVXqbARg6f1hBBZT/SK8hbFimun3+590dlv4L6YlOYpWOKYCwjtPtJb2yRs4tMhq\nbtwhaKHpq8So7BPhd96l/a0SJCYo9qtO+tZ2bZdFtus6bNvhnMcHea/qpsV3ARU0eZFzuHfAnVt3\nuHl8zN5sxmg03FrlERORUMlc0HtPtD7JXlqWiznzqwvm8wvmVxdcXp3RdpYqr7Ysyb3ZIQezGfv7\nKcOzGjKZTMmynOgjuTEpleMbQKYhEY2C4oe+/AN86u1P0tqG1WbFelPTdhbvA13TslotaJta5nZa\nOkTrOqy1aaYuUGmfoRkSpbPtJAeVEBgOS9xth/dJ+xh6oFZCFiLJWzQVJlFFyUPfxjYJtBmQsIMY\nAiok1kTskzBiak68kIX6azchBGw392skL7XbFGUUFojXOtIXPV487SI5Czwv1ZeXJm40uzic3bvV\n2/dITpwUIv3o+1qXuAmsn11Q7J1STvapRjPyckBIDiBRX5vRIZqUuHW0CBIQrJRASyoyCB3lZoEO\ngWI4QgdFTOy+GARi9N6iMyUuE9ajyoiuKnSI6MZgcoE2jDd4nW9hgOjEtSP49CblGlRNJJCRjMYL\njTaF/B3bgQ3pBoKsqGQj1EhihfeEtsGzEJKM0sR891r7fxSK0WxKu24wZSnsvnoDVYHJy1QkGFQe\nyCjQ0wJ7dUnYiDbRlCXVeIR3Dus8zXxJXtfiuFE6lpsNzWYlLNxoKGYTxsMJL93MGeY5+0/P6FZr\nnl0sOFktuH204OjoXRyM7lDdHjMaPeRyfsp6tcS1NbGT2JYeng4+EpPLiGs7LjdnWB9po6IJAdfv\n/0qlIosUCeYImyvO31qwOZky3D9mNLtBUe6TlxNst6GtV7S2FkgxgPUdTdNwOb/k4dsPKAdD9g6O\nOLpxzI1bt6hGI8qiJC8Lci2RUdqoraxgtVyyWi7RWklhlN4XoeM32G6NdzXWNZyfO1R0qCgdq7UG\nHxxdu8F2Hc46nOukk3LiR9q1Nc42FFlFkTva1pHlBqNF0C+EAnH2ICpctEQlov88k8gr5zwPH7zJ\nF7/0Bd5+6y3qxjEazrh94xY3b95lNj4Qko6YSUJf1AZZRLu2Zbk8Z3n2GHV1grUdLlP46YijyYjy\nwUPK1SW2iqzGbCGrvua13mGU+JsqndFPd6JzshrkyeNYibNNDBYVsm1+HX33rGVDc1YcnqxzdNbJ\neXvwRbLJPoPxFDVM44EYdkZtPWR2bdG5bu/WdzzvsO9Ksp7Wpvens9R1LUL5oMmzgv3ZHndu3ubO\njdscH9xiOp6QF9mWMEZImkoQbkDXsVmvWCwXXM2vuLg44fzilPPzM56dPubs/Bm2c+T5AKJiMh4x\nGd1mfzrjzs07TGczyrIkywtiCKxX61RAJKLSV72E3etNM7Wok8mPpsgqhmUkz4YSD+UDTd2S5QXz\nq3PapiYEJ7N966R7DREXXIpu2p0/yblUFIVBqZzhYEiRrCf7db2vPHrzg74rJBF9wjWZ0Hbe129e\nafan4g497D1sterngj4levR7SI8EkK66IKx/0obapxv1c+c/xvHCM8S+Dvjqr2uVUqm0sIGeGwCr\n3ROSk3T9Yu1H3xHvNc3csX52QrV3wGA0pUiidYWw6rTJtzs/kORJKumexPMzeo+OgUG3Rrc1eVVQ\nlIUkzfedpRbYJSDwTvSW2FisjZhSqlPxWM2lek1uMVFpCD5ZBcmM0NOJBAONVpkkOyuPyrTINIqC\nkHf4LglkjSabTohB7LGcawlKgzL4ukZla5S5NnWNu41RAeO9GUU1wGh544LtCL5FFxl9koZOqdva\ngRmNJYGgFcasyXOqyYSxt/iuY9Os0QaKLGeQl2xaT7Op0dklykTy0ZRqWHEru80gLxkXJfuPL/nD\ni5an529j7Yqjw/uMBrfID97PeHaT5fIJzx6/TV3XuC5xknvyUkjRUjHifMQGqJHNMABNhHkUVufE\nQI4i1+J2NIyKql6j27ewFyc0wzFxvE82mjAcH1PGjrpeUtdrfNfinMP6QPCKurng8uKMkyePmT3Y\npxwOGU+mHBzdYG//gNlsn9FoSJaZ9Fyl0vUhYJtGZkVbhrSwB/McOtewXte4bs5qdcJoNJbZoZZC\nTpME7P08XBvKvJSNTxucg6y2FPlAIHSdCsp0Iwuk6XDeYnJDXmWUVUm9bnnzjTd49Stf5uziCpMN\neOnuDY4PbzGdzMT5qa+1k0uLSvNCoeTXzC+esr54QrmY41zHMkSOioJif494tSBcbAhBswmBouo7\nsASPKUWINi1eGolHS7Nzlczy9c5pRjZASY/RWip/McSQBS4QaJqW1Xq9NcEPMaKCo3v8GsX9D5BX\nr0jFj6eH5nrEaNtVbNea/uMeGpTFcTsXQzrEplkLqtFZnBXpiYRXD7l1fJM7N+9y4/CI6XhMWZYo\n1RNT0tIfxN2qdSsWqyWXl5ecXZ5zcXnOYn7JYrHk7PyEs7NnnJ09pWlafBA48OjogKODfaqyZDqZ\nsTfdJy/kfWvaVv6WEoNuo4wUyl8F/UnjHRLDdNcpZSajKEpM1MlmMaD1hrarWejLFH9mcd5KlmPT\nEULER4d1AiHnukQbRVGUDKsRk7Emy3JG1YDJZEpR5CjVC+npGzdIzzNGn4qVniksGnbZ+NJsvIfB\ntUDgKm2M/QKvdOpSPfQzyrhtsnyaRZuEXHr6DVGFHp1MxVJ88U3xhbxM0x7+3EUnukOhiItBS3IL\nudbJyeUozgOyDqprjypYs49CmGk7zer0imrvIcPJlGo0ICsq0Ll0Fr37xLWFSWyierd0IdMU0VE2\nV+QmUI0mZErhrcgghAkmQ15xMsmFhm+ELeabBlwgK4rEmhVNZVYWkrNm5eYNwQo5w3f4Vv6+hBGL\nlhAdRSyvQFcZ0ctpVlpjBgVu44k2WcOpKEkbwePrNcoEst5STvXVULpAlIhMVZ8Q4kxK5LBghG6M\n0VKNK9BlRdCA9eADKs/JyoLReIpvWuaX56xWSyaTIUVZ4aLH+o6u3WDWImwuRlOKqmT/8IiyKJkN\nSu7PLvmfH614dXHCg3rJ3vScvdlLjIYHmOkAowfM5085u7pgXde0bkdpGBjIFdgIDdDF52NMuwib\nGMmyArSiUIEJipkyVFqREVCxxq5bNt2G1WVBHI1RozF5McQUY1zb0tRLaNbY6MSUG0fTbmieNMJE\nznIG1YjpdI+92QEHhzfYO9hjsjemGlYUpcCrJhHGIgLpuZ5IkRWUadHXyqQZ6JwsKyiLiqIoKYqM\nzBhMLl2odBcKLXZJFF2gqAS2s7pLFXUKUU02bl3XorU47jjrefDkAQ8fPOT07IToDXdvvYfp9IDx\ncECe5YngplJTGNJmmDZX27Gp51ydP8VdnjBr1rTec5l0WsPpmCo3hLdPaeqA1xqdB0GqtsWwrAFG\nSSq6T7PMfnNTOmM3+IooMmIQJygxfTLP1dXCBgxs2g3L1RWlzojG4ELA5AXu6oTuyRvkB7egqpI/\nscwRVSLd+WstoDzV3Sa57WyvgVcxRoGw65pmUwts6B3OdwzKATePDrlz8zY3D24ym8woByWZEeOP\n7VxSidzBpZSVs7NTnp485fTsnNV6JbDpcslqcUW9XtPVltWqpmkD1ot37f27c1rX4IIFJYklYmCy\nO0GSO3rd+yteO3ckiNPtULMQiDpZPgYxfxASj+hNvXVSDLStSK/qNfVmg3eBpmuwzqOUxJdNxvsc\nHQ4YD0dMJxPKqqIscobDIcNqQJEXqcOXw6fNUTq59H70Zg70DFKEic/Os5RUOBIB33eD14ubtPGR\nTPhjD1s7WT/7DlRJwRSUEKoEadmOM1/oeMEZ4vWN7JpTTdoATeq+hOOzE1vKqxcst99WxbA1vXaS\nuD+CDhq99NRPLqhnzygHI7JiIBCSgaB223I/mOhfbG/oS7TkdsMwOobDgWTXocBJZhhoVEjtiM5Q\nWU5WVARaVNPSQ9kmK+TxtUfHXC4QND7LiF0ucIOTCjlYj6dFo3BOUjV6myhlRCwei0oqVOcJbbet\njrTKiNqjovyctzV25UTXGHcXw7aujYHoHc5CNhqgKyXJG53DGSiGFQoHQYPRaDxklRgFWCtyliwj\nGw4ZTGc4b9ksltSNZTQqKAcVcRPwraVVq4TJK4oJ5HnFeDojL0om4xGHg2d85tmST5/UPH78Nlfz\nS44P7lIMjjmYvpvx8Caz6VOuFic8Oj9l3bTYGFl6ef99ulKub4Z98dX5yLJ1dBnURrNR0KjArSJn\noDV5jFQoimjJ2pYyrDCNYakKmmqPYnzA4OAWY9/Rtg2r9ZxNsyS6JDMI4HyN6zraesP8/JJnD5+Q\nlwVFlTGcjNg73Gf/8AaTyZgiyxN0Kl2eNplESm2ftVhNoUGrnBAUXScp3t57iphDbhB/H3mVWktE\nWGYMeZ4RkblMdJHoI86JSbfzAeMNZ8+uOD+/oF7XoBVHB/fJ8wFlUWKMSC96Qwu5H2PSggpELoSg\nCxbnT8hWZ9zyHQvneeYDbYSDYc54NsBcnKMWrbgNBrBO4XtLzBhFBE7ikifzfJ+8gGOIkuKhAW1Q\nKshm7MXlSfaxmBbMkJ5f3EKOXdugTIHXCh8i2lqxJnvtD8gO71Lce7eEbEf6CMVkGt2vN2zF3n/6\n2/8cj/LHX3M9+8yNz/N//b//d99k1fvjH4fLA/7Pf+NHwHp0lNo4MzIXzjKNMWn9irBaNZyenXJx\ndcHxasl4NNrKl4KL27BmiZLbcRS+WmMeglgPehdx3iYHobT0xoANa7xXtM2azXpB0zY0nadpLetN\nw3K5YLm8oq431G2L7dJ6pBVHR5bpeEpucmbjGaOxGJQXRUGW63Qt9AS6vkXctorbuZ50fyZ9S/aF\nHeSZOkM0UWthgm/3i54ko9LMsPexFWg4KJUeRxollfaSVP9IsXWtiXuR4wXyENlqDPun3h/pZTzv\nNajUtS1Z+si+yZVOMV24JOYTcpPlEaLT1OcNy4dvUwwG5OUAk2VkZoTCELVKCQdepAypco/JVs3E\nlmm0TAZDBkVGVuSihalmhK5hRyrwYKRj08bAIBKsbHA4cX8R4b9NekUhBOjOEotIcB2+a5JG0Yg1\nkU0u7J1O7lYGXZWiVyyF8RWcx9VW5pO5zKYMhUCfmwYdxBDArddbq7f+PIJCGYPOM8TGs0AbcfT3\nmw6UxjuL0Urs5KICFzG5lkq+bcl8icoNOteUozHedgKbrBtU3TIsc8q8oAk1wUV84+jUCp0pcp2R\nZTl6klMMKkbDETemF9wen/Lv317xlcUlb29W7M/OmE7uUO29THnwfo5u3GE4eJXHJw+5XG/onKcP\nE7put9wfJn3dOuk+Gh2pjWauPacxcqvIuKEiEwPESKkipVcMVWBmOux6zWLzjJUZYSaHVOMJw2qE\nj57NRlxEuq7BhRYfHSHGRJVfo7satTZcXFzw+OFjTJZTlhXj8ZjZ3h6TmUDIZSlQfJ4Xck50WqGD\nxgaH9+JO433AZDJ7NFkLCJkhBk/dNixXK+q6lkXfBVw/Z2yc5PB1HV0DbdvQtQ15NqWczYR2jjAv\nTZYl/Z/cgwJ9+TTbCbhOkuA3q0vaiydM6xVTPBdd4G0XaGKkyAyTowMmRlNcbPA+bmf+Log8Qqvt\nKkOMgc425Ebim6JKuaAKgnW4BI1lebaFvrTOBOWJ3Rb6grBFP8S3VBO8SF1CdESvcW0D7ivkh59h\n//AmajxOKeqpW4rxuTWJtDg+yh/vYMT/QoeaqMQsjxgDeZ6TlzlVWVBVFa3tiNGS2YjWBtfJ+1rX\na9brlWgOTUpv6YToI8J18zX9QYkR6z11U7NZr2nrlizL0NqlbwsLtWlq5lcXrFZzmqYT/9SgcDaK\nW8/8itVyQ91IsS0hu1KY3jg8RIV7FHnJaDQmz/v5oRMZRWKuQu8x2ocBp2HfdkNKqKAK15xj4vbH\nQi+hSTF+xCDrVkwQuUqaZgJR+0T8EUh5W2ClmaXuGyYUqQp74ffwGwvze33Hc4Pr3cWnCWgVUost\nbhTvZLj2tBvoB+DyFD2OncVPUJqIJraR5mTOevyAfDAmq0p0ljIOdQ+F9BuEbNE6KgrXMvEdRyYy\nGkyS1ZRO/oeQFeLsAlF8QzVE64ghyMylUrJRpvcphIAKLlmyRaLviKZL1HlPaDf4ztKzbzGgC2Ek\nqv61hNSy5znKGFSI4m9poqRthCgbu5ZBukRedYSuZmte2JfCCEFBa41HQnZNUaDygkhDqGuZZ+Z5\nkhj0MhiDLguCt/h2JQ4aeYYpDOVwTGVbfPA0qw2aiqosKHA47/ABgs9xTYvJGlSlxKAgH5BlOVVZ\nMR0POZ6e8buP5nzpbMOTy2c8XV0xWp4xPHgJNZgym70blZcMLp6y2qxZNQ2Ntfg0SO81VPIqd7cP\nsE0D75TCBcsyeB4qzaGGmTaM0oIBYKIkuN8gcOAdl08vWeuSbO8GanrAZP+IrKpobEvbNmw2y0Qh\n94iDrhfP2qhxwWJcwDaShvDk6VN0jEJqGVQMhkPKqqQsK4pSRPxFnmOynDwvyEvpKI3pNwsZ9Cui\nxGO1LXXb4GzYOr1Yawk+4rzQ9L0NqJijdEaeD0gUDjKdS8WtFUZJDJTMxZOflI84J0HXm9Ul7eUz\nis0ld11LFuGxjTx0gXUUFvdoPGA6KtEXa+qNp0sknEJDWcFonKP0rpePRGwiX+RaJRQxkpVShGoD\nJtNJciRlcT/ziSn7Tr4qdnUxEVSUshJgrIKgO6rA2UCwLfHZq/jTD5ANP0jUJhUAPdp0DWJUyc7x\nv9JhjCYmkl9VlIwGY8LMobSmGgxwTtaMLMvY398XV6O2pd6sMUpDpreSkLbrpONDk2mDC55rdFki\nkbZtuFrMuVxcMRyPsd4lEpjIQoIP1PWK5WrBerPGWUumc2KWmNbKoKLGu0gn8mt55AirhaTArJsN\n1rayhhggpEYkst2IALxLEKiSdbnvGncyjDReiv3IbFtjbbWQfcEVvd92e8Skn1VpFpxev4+BGFr6\ndCMZZ8UenKUPiOi72Bc5vqlTze7ht6Dn7vvJO1RYUIlfvZUKkLrmXf0mmsQd6Stub+Hr7CONW1nW\nj0/JBpPkH2rQucGoCmUyfEw3mIIsagbesdcu2bcLBq5Bp0DJ6NJTSn89mJRbZ1sxf4w9/iwdVvS2\nf3fEAk5cCGQeEhXKlKAEwkUXqNKnDS8TIk2WJc1U8iVV6XzF3mtTY4qM4C26FFkCUYTN6EjQoEwp\nRJ+Qhuqabcet0FKduQ3dKpJXFUrJ34vWEup2SzTqJSGkBAZdlLh6Q6xrDBU6z8mGAyo7JASHrx2b\nTY3WhjyvQEnwrXdOQpLbBpVJGokyCp0ZyvGIg0FFNRpxPLvgAycnfPZxzZevWp7OHzJfnzEa32Q0\nu8d4cI/q9jF1fcpi+ZTVpma5XtGkCBypA5POLn7VxphuGO8i3kc6IzFUlQ6MFcxi5ChoJjoy0JpS\ng1aBMZ6qW9M+W9NePEEdHlDsH5NVIyazGRwcEZUI3terJZfzK9q2Jfp+jheIOm679RDEQKC1lvVy\nJQQbZdBaNoEsyzBakuuzosRkyVQiSQOECc02PismiCcq2Si244BEUNPKoLNeaiSdYFQRgtoydtEp\n1y9I1axQtG1Ds5kT1leUq3MO2yUD71m5yOtd5CxEllHgt0mZcTAbkjcN88sVbecxKPaNYlJGZsNI\nZlzqxHbrgooR7y070EzmlLrvWrOUgqKCMFvp80tJejMxbghRdJUqINFQrsaYHKNLiqwgy6T7HtgN\n4eGXiUd3UOOZjCv6BfPaAnVdgP/Vx6/92q/xsz/7s3jv+amf+il+/ud//mv+3Kc//Wk+8YlP8I//\n8T/mR3/0RwH4yZ/8Sf7lv/yXHB8f89nPfvbrLZkUZUYWDdGloN9MMagqZuMprkuQudZkmaEsSwbl\nQPS5TUpAUYrWdqw285TdGdE6IzMF2tnnep0YoW06zs9PeXbylMxkrOspRVGS5yVZJhZmTWNpGod3\nAsGaTDSiZVlRlQPyIifLFVkndXi/53bOc3G55PzynP29A7I8pxqk2DrYEpV8Ko5W6/UWtu9RwJ45\nTnIc6oFSmQWyRRD666eHRnuGqvNOGox+Phl7WLSH3l3qBNNJ0WpLMlLXxk4verwwqQYlAOW1vW77\nnxAP+u99dYvYg2P9x3JI19yDZkJ5N0qSv6Mr6C46ltUjzKAiKwtMkVMojc7Z3QCJiTZqVszWZ5R2\nLe4xBHlok0Hw9GQnkUwkwktMECdB2KMhgk+edz7F3KtEDtDXftS1O5zaJKNvWeVQPkKaE4gsRF5j\njDvD7myU0y0srmnIimLHfgvJ8Scrt1XSbsAmpBu0STCvFjFu8kWVDUqhnCPUjcBcydtTLiQhqcQy\nElyDbzYYPSErCqrxmOAd7aBjvr4gLlbsH0wp8yHOij9rcA2uzcFojCsI2orlnFaY3DCeTinLkul0\nyMH4lKPH53zmUcubTc3F5VsslqeMxzfZO7hPOXsPw9EN6s0JV/MTluslm3pDZ/uB/O76CFEg1J6L\n1YUEwoeIVdARWSu49JFTo6iUYkTghoajUjPINEUG2kV0bPHzE9z6kk5n2HyAGs7IZzOq6QEv3X+J\nD3zgw3Rdx8XZKecXp1KlW0vXbnbzrv5yVkKiklmdYB02BLotmaBFK5HqqIRW6AQromR+rLXB6Exe\nJGIGoXRCZdKsLvq4LYoEgYpbCD86mfHRMw29A9vA8oLZ5pxJu6KylsZ7nnTwwAbOfaSLYIEy0xwf\nTpgOCpbPLmkbxwDFTGv28shsIOoJ36V7WqntammUSjZcMkM0OqdrG4IPDBjLopnsCLdVTjp/sfcg\n7mf/QSeBu8F6K2wE14IW0obOMnKjUPOnuIsnFMMJyuSoCF71nqZprBOf76L6w3vPz/zMz/Drv/7r\n3Lt3j49//OP8yI/8CB/+8Iff8XM/93M/xyc/+cnnvv4TP/ET/LW/9tf4S3/pL73jsa8fuclFLG88\nKuYYPaDMS3w5EB9jrZOfaYbJFEVZEAnU7ZrONUSg6zoWiytxzbEuGQBI6LILz3e/nXWcX1zy+MkT\nUJr9tmU0nDAYjCjKCqUMXRcAQ55V6GRqgoM8yymKkrKoyPKMPBMDCuf75VU2uWdnT4VBrTWT6VSc\niFQitqCSrCJwOT9PhMUoukx6OFvtgC56CYl091pnafSV3rsQRAuOkAp9kJDgkDSKvXONdICic+w/\n1konz+v+Hurh1G/4lj13vECH2HeJfVW7g7M0/Y5vpStSmcAg7ODj2P/vWlq1jqC2pyVuu9BdR6Cw\nXU4825CNnlEMx+TlULwTRxqM2XYOmbOU9RVmeSGeniaT4XRiboaulb+ZaVnAlCZ0XXqT0uDXdcTO\n7lQiUQgJyhhUWcoGGRJJIUGZ0XtUXqBijmiAghiD12tiUcqsM1m74YMI+1XElAWmstirJbHtRPgd\nRbeYlbnM9YKwGLbhpkp0lGRSOZmyBCc08awsMINSYAXrJbhYa3Sh0XmFctI9BIQspADbrGG9xgwG\nmDynHI0YNB3rxYLNoqYa5MymMwplCL4V7abvCF2OCgalA9F1CarQ4oiTZ8z2j3hPUVHlOZk/YXre\n8aUm8MzWnFy8wWZzxsHeXcZHL1MdvI+smDHbu6DezLm4PKeuW6xPhsDXrrP+urBxd/2EdG0FBS4G\n2gC51lwqOA+KUQjcMIb9TJMnuzLlQOeQxQ4bV8wvz1g91kRTUo2nTKYHHByJN+oHP/R+fIgsruac\nnZ2zrjeyQa5raivBryom5mFyz4gpn1MWC8ll1CZLm5pKHq+Ia428wbIAIGiLV3JPkQTuMbl6CAwk\nP9PT12IqPHNtUN5hXINeXTJYXTB2KwovUoLTNvKGDZy4yCZE1qkbr4zm7o0Zd24e0Jxe0a06BigO\ndcaNTDHOAlmMOEcynkiryjUUKFM6dfcRCDjbYrsGBWg9xpQ5KtepUhdSjbeddNwYgfSSJMMoTZYP\niXEpiEVXY4ORAHGEoZqFBnv+kHDzJSHXXB8d9muS+lqTafjt3/5t3vve9/Lud78bgB//8R/nV3/1\nV9+xIf69v/f3+At/4S/w6U9/+rmvf//3fz9vvvnmO//gVx3B2eQFujNsz5TBSH6W+DNrg8rUVuca\nAtRdi0r6uaZtqeuGNnkUa6UlzeRr6BFDiGzqlvliyWg0J8tKiBnEnBhLhOyekWUDRoM8MWMtmeuI\nMdK0M9q2FTYzS4yxOBfwSSMYCSxXKy7nF1TDiqCgKEqyTCVIXG9f62qzFo9g5+k6u52J+xR3Jvdu\nz7iXdQ3Vb5Ey4glh11ApLeYtOho8HpJlW99BKtI9kubIUq8lz1TEZvNrXSPf6PjmLFOlyFTExUjA\nJEqwVKkqwUAy3Mxk4Bl3BZrs+qov3ug3VAlmiju4aLtpsuW9hKiwa0X95ILVKKcYDDFFIfh4VYJW\nZDEy7lZUqwviekNIcTMSyJwq5hgSa1PJZqYjgs8Yok9It5PU+Rh6VpyV56widFbgWSt5b1sXdueJ\nym87B52JfRMhyiaS3rSQIMcYgnRyeUk+ivi2o1vU5CVkRYbOxPc0kuaLfexzlE3Vt634Bm7pdSK3\niLlB6QyVZX3zQEwkDa1j6pD7N0ChdY4pSnxroWkxVUVRDhiMLKPJmHbZsFysGQxHVFWF9kZmON6B\nTcbnOKAfgMv81OQFphoxHo14+e5diJHcPGHSDHjd5by53HC1vKI+XbK3esJ4/yXGB/dR4xvUgxPG\n031WywuWywWrdUPd2dRRyJWTDChQyIIeBTkkRpkdqiiVakukVoqlUVygyF1gGCITFRnESGG9yDcU\n5FG6+k1oWC0WXJw85smDL/PlL3yashyxf3DMS6+8mw+8710MRxOcDazWa9abNZvNhrquqZuGpmlp\n247Oif6RxKwU21VNlgnK4FOVG5xFrM0UAYeOEpGkdZ7ukiCQvyLFmUk1HpUji1Hm49FjXIfZrFDL\nc4bNkmHo0N5jfeDKwoM28MAGrnykSRuhAwoF9/YGfOCV2/jlhtX5gknQHJiMqVYUWros20FZGdE2\n6rlci1HgFhckqFsYtz5pgAW5cPWSTkERBhgl/qZkhug6yV2MsVdlAKkrTteUSt2AweBdhw6gywF5\nlqG8JVw8xS+uMPlAOkytdwtOOvzXsOp69OgR9+/f335+7949fuu3fusdP/PP/tk/4zd/8zffsSG+\n6LFarul8i7vWIWmSp69SGIyQlHLZHDMjsjVlsvTaHU1T0zaOrvP4kHSUPanpq3dEkDXHBZwN2LbF\nFRafO3zeoE2JURl5psTtJ0KW52TWELxlNtlHK01RlKzWC+p6Q2cbnBfESuagE4KHzWZDnuUM/JCs\nyJJrj9pu/NZaus5irWVT16zXK1arBZtNjfdxm4dJKgyJYWsKL/ILGRMZZdjd9UZkFtu9TdAzrcT0\nPKoeeRANqVG7pAuT4p++kdPPVx/fZENUCYbQyQ1BbQmkUgVKKCm9WWx6Yrt3TLH1Pt1udH1tq679\nFflf3432/WIIhnbh2Dw6oxw+IqsGZEVBoTW6yChcy2h1hdksoGtRRXo5MSZ+TJR8tiyX9bvbbDsa\nSELP4ITc0s8+ldiv7VqUIBq+BFvG2D93Bc4lg18ImUHKMY0KMgOMPl3IWm9xdGGK5uTjIa4Vtwi0\nDNMhyCyyEg3edsUPkdDUqFyhixF/8m/+Ox5M5i/8Jv+nHefbj+5djfk3/5d30TuoBCcdrFYyN9VK\naozYdWgVGVQD7ty4wapeEZYQ1xlZtcfn2pbaOs42V1zVC0bnj5gdvsJweoQpRgxvHnJ4tOTq6ozF\n1SWbdU3dWmxKJgG5j1x6C3TczaO7KNBiDys2IdL5iDKKJYpzQIfAAJihmSpFoRQVEQt06V11rsWv\nO9r1nPn5Y9748mcwWcl0b597917i9r37HN++zyv37wKSfdh1UhF31iaphMNaS9O24n6SGHPWgu0a\ngnMp2ivBPhoUGqPypENDIEcVRNARHMo2RNtgbIuqV1AvyJsVlW8oCUQPjYJFFzjpIo+6yJkTSYVN\n9VBQkBHZL3Pu3dwn7yzt4wtmVjHRGYMEg3XB4IFpFdg/GHIw20PFqzTjiSlpQ6zURP8ri36WQm2j\ni/jOEoocbdPcniSPUBlxO65IR6Lpy+uW+z8zQ5EuaE1ZFmRayaxxeY67eIrZPwadJQhrR5qIX2eE\nGOM7v/jVKRJ//a//df723/7baaH/TztOLp7Rdo34uwY56Vop2QSNwZiMzGRkeUaZVxRFnmbPPatc\nZuXWiSFDDF58lZWW0GuuO0sLdF3kGWWRk2tZ/3ywdG6Naj0BS5GXaQOJ29ccTaSqciIjjFEMBiXO\n3cS2LZ3d4JKuscgqiqKiLCsyXRA9KR1E0yem9Kc2JFar9x5rPat1zen5OecXZ2w24gctVpwkIxfS\n+6629ps99AnJXg6FjyElH6W5VYLht9p4JcWw6C0TlKvS2GGrg3yx4xtuiFt2kErtJzuLHUgtsO4Z\ndOmsqK++HuVNDP1FDzw3oE8szeeINf3fBoLNaM8b1qNHFMMJeSmEkEJXVPWKYr1AWysvPEai7Yg6\nl7xCLV1WdFZgLK0gOdpsBbaJiBB9kBmi0SIuVhB1fwElCCy4RAgApXO5QV1yZfAhiUrlX5VLx6eU\nSCTSqZE3yYhrTD4q6FYtzgWyTEnX17mUVUdygpcBdWw7YlFAHnkwmT93U/znPtSeEksp0gWpQBlF\nVpToskpuLNdSTUKgqipuzWZ4XcPQsLnsePn4gEcXc5ablkY5ms0pi/qC0WCf6ewWo9khRXXI0fEB\n09klq8UzFvMl66ZjudnQ2UQ8Vztrtx18r3AxppQUhY/ihqOS7rHTspTUWrMIItcYGUWmNJi4vblM\nuuSF7CF6MB88y7nlidpwfvYG4zdvcnB0m+FoTF7muM6zqVtMhOFgSDWsGE0q8sOxXNFawm69B2ct\n1lkRVNsO5z0+WHzniEHR2VZQhdDimhq/WaHXS8xmibEbtGsooqdQ0hV3MXDmFVcezmzgrAvMfaQO\nonrsJ079VTwxhuODCZNMkz86Zbh2ZEqMM9roaVPM2l6pObxRcPN4n6ooiDFsMxRRmkzJjGbbuStZ\n8BWi0xV0xMu9kGAjMXlPVUwgaWXVFnIV0lhJ8C2+bWQunudkucxqjdaUeNr5U0L3fnQ2ueb5mzZ9\nAtfTL/rj3r17PHjwYPv5w4cPuXPnznM/8zu/8zv8+I//OABnZ2f863/9r8myjD/35/7cC98rT08e\nJg2pxQeZr2qlyE0hxhzakOclZVkwrMaMk4dpWVznR6Q4LSVsTpRPqe8+GZzIa9VKkWeGalBSjUph\nPufiqBNCh7WCVvk8JzMil+idfWIMmCyjqiDPFcEPpPEJUZJgkA3RqBylVJoxynPXxkA09GBnf4Vl\n2qDzCkOO60BHg+scm3XNYlHj/Ndfs67XJuq5D+QFK624vgH2RdT2lxN7cmthsDU30M8/+Dc5XkCY\n//xQsl/0FKCjgmBkuE7SFl2zydkukIqd2WvcfX2nYElPXe02xOsvwbcZzcmSzfgB+VD0iQMCg80C\nU69TVFMmc4X+byuBLPEBFT3Bd/K4eeIvhl7yobY9Kbp3mtE7kos2ECSk1ZRD6ZidsFJVl7olI78X\nvVi/KZ3Jx8FuKcFbtlW/7WeGfFDiW09bN4SQkxdyR6hrWk6FOHMEa1GtRVf/dSjlphikxScKdJ1n\nmHKAyjQxpEBkF3DRCRs3GgbVkP31hpDV2Gmk3N9DD0qenlyy3NRY7/B4Fs0Z6+aK6mLAZHRANT2i\nmu1zfPOIg8MVy8UJi5UYai8WGzonhUmXnlumJJG+82BjlFQTdkhaQDY3mWEEfFB4DXUUuD8zUuhl\naAqlybSSJJOIoBFaU+YFo2oouXW5RmlH3Sy5mG948ugZTx8/prCWaZFTlDmqKsmqEVlRkuW5LFbl\nAK3M1vFG0BQjsHtIxmTe4m1Ls1lhFwvKpmboHIVyZFpmyl1UXARYRcUiGOYusHSepZfZT1SKjh3f\nUiPuQJVRHMwGHA4zqrMFg3VDxNABbZCfz1VgUsLNGxm3b04YlBm+nicafEgFougAVdpIiZE8y4VQ\nAvhMisRgLaHL0EVM8KYU196HhLTHxBpMTlHOyrw1KKKyEAuMzkTzWVUil3Kebn1BrNfE4SQV46lY\nJ83+v8YC+PGPf5yvfOUrvPHGG9y9e5df+ZVf4R/+w3/43M+88cYb249/4id+gh/+4R/+Y22GAPP5\nFdaKBZoPAectBIVwLCLaaHJTUFYlk9EUlJy7siySMD8SjN566xqlUsSq+MY6JSYlClmq8twwrEaM\nqgmjwYhBWYjkRfVyGEkq2cWx7RoWjcD5WT6QdS3NtkIskxvXjjgjpvgqOfak49pIQ6wZe9SD1KSl\nD3oyFYrnNpNrx9cnvmzbz93H7/j3Gx0vrkGEF4FM6V/wtd2YfsNKcKlBBCyJYfT8c00bgCJ1ibtK\nrpddAPT+/nL6txav0uxGTbfyrJ+cYoYDqqpiwD5VfQVtk6rwJP9QUlUqxDxWJXLL9rV0nWycQdiB\nyuwgHXmSEH0nYuKslE0yiCWSyjKIEa3KrRBfZZm8ns7KfMiDSZRzv9mgigJdZtvqRaHEMSbkROPI\nhwXNckPoLGY22WYXqh5j1un3lAZria63Ddkd34xO/qu/+qv8zb/5N9Fak2UZv/iLv8j3fd/3AXB1\ndcVP/dRP8dnPfhalFH//7/99vvd7v/cdf8MMh4ISBA+5VPqRiGtbkWV4JxBWJt1isBJQO53uY5oV\nGSsG7pI4HVKvc1CBrjNsmk7Om/ZsworNfE25eMbkfMxgeMRgesj++D7T8QH1Zok9bpkv5lxeLWi6\nLpkRs7s5+wIyveO9PahW4rEuV21McBZ4FXEotAIXIjaKdCDThul4zJ2jO+RA0yzpWo+xkaLoWDBn\nsanpbMNiMUcpR64CpqvRbYObr1jrc9mYtJYQ4smU8WhIlpVCElDCsiOC95boPLbt6Oo1vl5RWEuh\npQu7cFCjWQfYxPSfdbQh0oWACxHfQ8hx1xlmQKkVo0wzmwy4uTekWtasFlbqxRhYhogjUCjFpID7\nNwz3bw6YlDmxq2mbVbLT2hnp95uYkNVysqxIaJHEnwXnxMDCGYwr0IXY1fXMP+9F7xmDTWk2pJm/\npaxGjAZj8iyTYO+8RJlUKIZA2Ih8SIdAStbeHvr6in/tyLKMX/qlX+KTn/wk3nt+8id/ko985CP8\n8i//MgA//dM//c5funb8xb/4F/l3/+7fcXZ2xr179/iFX/gF/upf/avv+DkfPNa1WOuTHtTivCd4\nRXLfxhhD3sjSO5lOiHFf7Nm0SCxiETBZn/Yj3Y5RO/ODfp3UCopcU1Ulg8GQqiqohsMdRJ38cwOO\ngMPExKVIa11AkL/eDUcnr9aoSCkWPUKlEhoQhWyT7PZC9FuINEZYzBc0XUNdb1iu1lxcnEpUm03y\ntPhfEtf6Tzu+yYa4mwXKZwpD2HWgKv1MEKf1nTfdcz+wfaSdn3n//+ra9wKxd9/YFhK7mWV0Oc1F\nh6meMBlOybJIFloyk2F0ekRlUNGjvEt+nyoRZWROp7wihgSnuES6KZIOxhj5/VTJKmNks3NCylE6\nS4xAwfpNnqOIeGsTCUecaKJr8QpUbxCuM7I0EO4lFrvaXZha+SCjWWzwrsUUuw6xj5hS/cbrPHTu\nuXfoRejkP/RDP8SP/MiPoJTiM5/5DD/2Yz/GF7/4RQB+9md/lj/zZ/4M/+Sf/BO6rmOz2XydS0Hm\ncWQZIThc0+CdlRtdaVReCjQcJQYmuA6tDINqIAnhOiPfXKHtFQvd8hXnCSpjPKxoO4tLHoyOwCa0\nNMuGfHnJ8PxtysGUYnzAeG+f4TBQlUOOj49ZrubM5wvaxtK0HQqfooFk8+sbbaV38waTNr8uxm1C\nd9ZvJEocjGJQkEWW6yWvr99kMp1w48YNZsMJRV6iNKybGm/BthGjSsZDQxEcyom4v/ARFT2Z9wQU\npguE+YK2rQlFIdeXyrAh0nUtruuwzoqvaWImL6LimdFYIi4aWh/Z2A7vAy6mDTBGsVlLd5NY4snr\nyoGhMQy0YTTMOJpWDDcddt6xsp5WaUqlqaMj13AwVLznyPCu45K9yqBcje8svm3pQ15JKE6mMkCY\nzkaXkIhAGoMyRa+rknvGeUjpMQrwAXzXiXRCiWRE0kA6nGvEmNpoTKbJcyO9n4tEZTFKU6iAa1eJ\n1Svv5/YyVYKqfK3jU5/6FJ/61Kee+9rX2wj/wT/4B899/o/+0T/62vfFVx1FXqCiwmhP23ZiGB7F\nm9aFiA8RozwhenFM8i5138JalvVPNKekazLgcMFLQEhC2EjXLAnOLKucojSSSoEmKpPWToUmY7vW\nblmYOq2xMjYKKuF1/ejJawJeGpyIEPuSUYmEHTtaK+YBnZWM0dfffoNNs2azXrNcLkVnXLd0rf8G\nHeD/fx3fRHahntvRlQrs0qVUmtdEiD7pQa7BpNvPdh/H7eRLbT8HtgbdX/XXnsOnAUJn6C7WqPWK\nrJ2ilZMbJ5nfapPR2w5tyShtK4PWKG4ggCxG/eNuQ4bLVDkZdCkmwsFKlqHKs36oBC5uLxyV5egY\nxCf0/8ven8TqlmX5fdhv7eac8zW3eX10GZmVxaqSSEoiRVkFygANW7KhiQcEZA/MiQXJQ5syDJsQ\nDMEDGTBnhsCZJwJkwIAGAgcGPVIHwpIgii6xVGKVi5WVTWUTEa+93fedZjfLg7XPd29kZmWkBbKK\nZL4TiIj3bvs1++y113/9m2LhvKekgTzj+gHfkrPXw4PNL9tLYywCuv2WZVoYDyMuRIJ39xvKWjhj\noOaJOs1feo9+Hjr5fr8//flwOJwgpZubG/7m3/ybp5t/9Sn8add8ONANtvHlnE0KIA71lnid50S+\nGyl5JmfrsEPXI2Lu+0O/4WmAPt4xUDkX4bdfL7wpwn6IRtUuZuVVAPXCpIW5HAl3I+HuDTfvztif\nP2V/eUG/jWyeXvDieWGeZ+5ub3h3dcVxHMkpUabltPxEhdIOWNoMgNvyIDTkYoUWqUIVxS2VopVD\nXpinI2U54sUgvjhs6fd7ht2ObdjT9zukKqE5pzjU/l4yu1qNEIEVSGmkSG3QYU6FUuEggXdlJlWl\nqFAloFpYlsWcbFoHmLWeUtLXLvBhj+Ta33vv2PjA4CK7ITBsQMeJ26uZ2tZwanDWWYSv7R3feOr4\n4NJzvnH4mqg5UaZkmzYPkAp7JamIxahJc4BauQHeW9RTSWZu0TZhUXO0wkEqM17tNVNxoN5mtrmQ\np5FZrqkxwrChG3q6YcBFjwuemAv57h1STJtb9V7qpXVNWfjjuXb9U3LIpDzR+YnJHRndBMzUpRU1\nMWi35ESeF6Z5YjNbsLSrkOZEWuZ22NZTGMHq3rK6tYia5yu6gsZ66iBXjffJM5ZV22v7tclCm1F6\nm8PW5iZUSqVm28nXfEQLyM7ktJDywjhNpLQwLTPjeKTWyu996/dMMjLNLEui5DVl5OcDN/9huH5O\nc28wmYV+mWXaOipVcE4oxZ1gq5/4fr0vg7X985BG4xArrgC6/nmduenpa3bDlg8v95xFR6iWKO07\nb8fOmk2TV5Q6Tiaiz2YFRU2NIWcLpWIQheRsM8C8Ou6E5qxRTzIMK07V6OPUZgdnqeCaJmMJxtAe\nswMfEAxilcC9QLm9GiK+0ajt+Tnx9JuB4+2BtGT80FvBVTU4qX2neJOGPLx+Hjo5wF//63+df/Pf\n/Dd5+fIlf+Nv/A0Avv3tb/Ps2TP+1X/1X+U3f/M3+XN/7s/x7/w7/w673e4nvv9w+w6Rxzbcdw51\nwt3tHYebW+bjxDxmlmxsSlwldI7Y2zytGzr6vqfvdsQwsOn3PNoeeLG94e+8mviDw4I6TyeOTe8Z\nUyFRCSYjpiKMpXCc3nJzvGLzZuDy/BFnl0/ZXFxwvjvnyZOP+DAdOBxuub664urmhiUl7u6OjPNC\nVYdqIUuha5tGJ8bSq7Rig80afZNl9LryMxSKBR0vy8LdOMLhBt87lilxPCRcUfYxcj50nA2DhbwK\ndOIJjSEnkk2L1gacNjcrjDlxmxau5iPzYrIJ4wgIWfmSIUbFRPUn2Kz9uWIdYXTC0AWG0OGq4F1l\nGJQwZ+SwMFSDg0UtdPqiVz65cHz62PPoLLKJ3hLWy2IzwFJZmhjcYLUV1TGUo2puJwnX5lSGYmp1\nqAbbkEs9kWjWORQCqbR5u1hqg90lplvMacaVTGlGF775+OZamY93LMd3+FIgrpFw697xx7z71g6P\nJXbQB1SdHWCa8Ydrjj1aIS+Fw92Bm+EaERiWAeccy5y5urnm7nDLPB2tCC2JuZTm0rU+VVtD03Tg\neHfLoe/N+s65VnjtdS85U5q+N9dif65Qq7Suz5CVohYmXAukNgKyGLVmNL8Ye3pOC2nJpJJIS2Ka\nJqoqn3/xmtJ0s/+oXj93QWx9inWDDz5XVZrZbvmJdbjK9h8ixw/BVCOzrANxE2E+aAt/okN03vH4\n+RMene2IFLy3WBNxlj9Yl4ROC1qy+ZSuc00trfaYRlEaRb/khHNi3WBdcCG2UyZmp0ajOJdyYqya\niXNtfwYJHVLbYSF4air3g+a6nqvdg2ez0oJXLNi6xhADfd+TptHscR+IOVczZAn+Jwriz0MnB/iL\nf/Ev8hf/4l/kb/7Nv8m/9W/9W/yH/+F/SM6Z3/iN3+Cv/bW/xq//+q/zl//yX+av/tW/yr/9b//b\nP/H9h9tbun6g35xBiNy9fsvnf/BDDleWe7gkTyqBRT3FQZWK8xMhjuz2sN0EdtuBzbYj9gMfXVxy\nttnwZPuG//blgd9+m3k1gwbHJgZcKRQsDHbNYi5eSE7J5cDx7ZH++jX74Yz9dsfm7IzN5SPOdpc8\nunzClGyWMY5H7saRm+s73r274rgkkq582XtC1VpgqkJQZRDYi2nHkihpnpo5tYATI020pWksvcIy\nTdzNE/n2hihiN5d4oqzr1Aqwp+lwq9HQjyjXJVOdMGdlqStRfE3/u5+rfxmBub83B4Ft8AxdD2Dw\nfcnsonB2qJwnZScedY6lQt9XPjyHjx95np4Fdp3De7s3ak7N59dgPkROlPZV9FzagdbjoRZKzpYj\n2jQ4zruV+GcxZynhvLGuQyOtpVzwQSg6G6GmZnwXGPbnDKHHlWK+sHGF/8zse7y7YT7+CJe+RYjf\nwLE/HbhNj/rHtyGntKAG3lNLy/mrNGs6Qw5KgVwrx7uZt/KGJU1c3WzpNz2umT3c3B64urrm9ubA\ncUwsqZB+LO1CFeY58e7qHV3XMS4zQzfYjLYWC5auQs1WvEqxcUYuxdZvMYmGaWaN0GUzQU7dnRGD\njARmn2tONCfnplXiBin/8XXmf7+ur5ZdaOvimpnuCptCc+colSJtUPsTt6tdsv5HH84SLaPO0eyf\ndMX/T3gia3e4FtXQBx49umAXPU4zznUtmaIVjWrMNjCpRV3Ma1HLgnmQehTX8HqbhWp0lDGZxrDv\nTwXP5k/tuFttYYmPNm+M3gpmrUh0OOlOJ0BpQ2d8sGSJISLNVLwxa2zm5jzichPdm2wkeM94e0te\nEqeQU5EHTFXHfRaPXT8Pnfzh9Rf+wl/g93//90/kgE8++YRf//VfB+Bf+Vf+Ff7qX/2rP32hDAPz\nshA2lRC85SZOEyeD5iKk4hlrZFYoAt4XYimMudKPC7s0c5Y9m35g6AND6PnV55c83g58tLvhNz+f\n+N6xsiwZ7zxdjIzzRAyQxPR0iKM2qOhQZo6HmTd3b9i+8ZwNW/o+sr98xOVHL3j60SckFW7vrpmX\nI7UoN7cHXr38gpubW0sLz+V+lthGAIMTLkXYY5KAI5CqeSZa1++oSyVPLRBaHTE4pBYKBs8OAjsc\nWxE6GpSqQsCUuQWhVou1euOUWc2nteh9Bvx6c67xrw/NsAC8wOCEXefZeE+qwjFlNBd6rTz3jo+r\n46JJphYK3iufXMBHl8rzc8fZJhC9GTxrKdTUoLlic64k2Ly8OaWc1nCDQWMc2tikQW/BtXQLQV3z\nQFVDb7Se8GLEeXKdmXPFbp2ZnGZzNakQfSB2PaFzJsifF7MiLLYBz69eEb74bfwv31L0l1n1aVrS\nTz0k/lFdXb+1OXZxpGbw4T2E4Kklm1lDsUPeNC+knLm9uyV2AR9NbwhiyMOUOM6FVNZ58Zd/lwJz\nqry7OpDTj3j77g3em0GHyYWyMaprJedmfN3kSKU2vkebpdt80uaI+mAbt4b7/z/7s3+Ur58r/qms\npy9qs2ujFUdtJC+HEkFX89nThO5U3uzvcjpVrH9fS542B3w5nYftt68/wzm4fDTw9HJL5xRPQFy9\n74ZyQpfZflnO1PkIKOoGFEt/sF9hTuo0ZwNN2IlYK148eDsxuWEwHZQ2raI4lIQWMfJI5WTj5oK3\nbriYNqdSqXnGDx0+NmeG9ZJ1Ml5PUFHOuekTPbHvSfNsAtUGManaC2CI7JdPYT8Pnfxb3/oWv/zL\nv4yI8Bu/8Rssy8KTJ08QEb72ta/xu7/7u/zar/0a/9F/9B/9hJXVel08f26ZaypIVeLQEzfB5gvJ\nqODqld1QeLQRdpeR3fmO2BlsZqHJDvGOkgvH6RqOE1234fEw8E99CI8H5e+9Snz7VrjxgetjYhN7\nUilEKr7ZmxUalOnNHHrJlaUmro83hAPsr6948/IzdpeX7B8/Y//4kotHz8B7Hp3PPH18Sc6JaTry\n8vVbDncj85ygmNHC3gsbhFgxYgxKFYWuQ4YNY8pMy8ySC9E7olM6aR0mBnNHzFu1e3AfeHvIqIqZ\nlKvyCuV1qhyy+TauiYnuAYiwkt8Ro953Thi8MDhHFwIVx82cGFPC18pjEX4pBj6Jnr0XMo7s4GJw\nfHwJL/bCWb8hBsH5YnP0ZBumUyG35AyDZj192OLc4V7oLBC6Docn9oaQ+GbFptKY3k7At1indn9L\nK6LBCz54Si1tfi/kslByAjX7wjkEnHaE0NtsET2R3boYGZbK/kbYusLoX7ffY321U8fHy4dI95NI\nyT/I6+LtObvdpc3D02iVj4T32Q5M0oBmzeQmtUm5UjIs02pcYO91KkoqRg6r3DP0f/wqCoe5MKYj\ncj0+BNhOs0YezB1Pf/8H+Dr8o3z9HLILELFTnpdCkHr6nPPOuL9I01LZzf5TX2y9v6nXKcQqtBDs\nRrKSayff9aescZExCs+en3FxPhCjb2xBO+FoMmu1moqdREu2+R7VukNdu812+qlmC1bxSG2ieteY\nsvMCMbSdK5rY2BmMYU48GSVAjHbyVWNH2uXMaaaCG3rCEMBVRML97oY0FxrWHdRObrUSO0/X95YK\n0F6jkwuVd9RSm4vDgzfw56CT/wf/wX/Av/fv/XvEGNlsNvz7//6/fzpI/LW/9tf4S3/pL7EsC9/8\n5jf5d//df/enroQ83uH6DS4IeZ6IXc/jjz/k7uqa8TrhZ+E8Oi4uHLtzI0LQ2Lm5JLuhXSADMzM5\ndBQKYy3IZEP5yz7wp5/Bo5D5zu3Em8EzesdtdtzNCylVfIMeO2+vY1YI4ihqUNRclGMpvLy9I9we\n6H70OZsYefrkkmcffsD55SWPdnvwnlwyT58+R8RxHEdub29IswnsXc5ILfhlIc4JKRUXIxo8czpa\nUVOouUXMeHPVQA1Oyk5OIcjrwivQpLGVsQpXWnklZrZd1IqhrSI7ACoNYhUhOkfwjm3v6drQMBV4\nN2Vuk+U69sBjcfxa7/jVM8eLM89uE3Ahsu09+0EZgh3ZXLVTf13UIpmqtrNWNZZ3c0pyDmLX42Q8\noTfSit6aB1mbab7WbB2cOmNJitA4/IaeaGdOLTESg8WolVwIoTf2YlW8F7puoOuajMM5XLCQbi0Z\np8q+H9i4DneTGK6ewbMtVWeE3ugCtfL/+s/+76xDGdt7Mv/6n/3f87v7b/OrN9/g//of/x+5vnnL\nu3dveffuNa9efc4Pf/QdfvD97/Hu7TWpoUveG2yuElACwQ/E2BOHLcPmjGG4YLM5J4Te4uV2kPLM\nPDuCCIsTahfJaWojJ4/DDBlyXq0fV8tL2yRPEX765RFT20Z/4lpNJNYG4n2x++9+/VwzRKBpYfRk\nH2TIn8PLetLLJ8r7w7dk/dp6ylakMc5ad9i48espWh58z32fqcToONt3dA6k5RPW1ccwm0u67TuK\nLiOrrRDSKDnOirfW0rBZZ1Coj+BAG/PKIB5vJtlFIYaToFhqs2nTyUy/WywUCBTTCIp3+NiBt47o\nxDJYl6q9AKdTtDkwVHJKuBantQZ7irOv0+Zb6pw3g4gfu76KTv5X/spf4a/8lb/yU9/XP/Nn/gx/\n+2//7a98/2Pomsn8gqjSx8jw7CmXl4+MFVcanC65yU0w6MwPlDKTskGOrlbUB+jPmd3EmqW2jDO3\nt0KaHc+iZ3teuUqFKzw3ruP14vniZuIwZyjQtTUzOCH55kzjIRRjguZip+9DyRxy4t0PR777+UvO\nho6LszMeP33Mo0ePLP9xt2ff9zy6OLeinS0At5bMMi30acGpVahcF/aPK0/mREqzZRjmbLFHapC2\n5EywpURSRV1tejLTcmVVFnHMAj4v9NNCnhNRwTdSTOd9026Zti76YMG9NXNIiWMqHEuxjlKVToTn\nTvjTG8+ffOT4xpPAk7OB3W5LDN0prinl2VirWgwdSantwHaQs/CJiqprsHWgC6F1h7YWLC1hodue\n4aK3XMu6grrt/hUsecCBVLGfXQsSWmLL6t6TKyItgQHXCmKki4HgouULlkxdFvs5QHDBMvyubymv\nb5i3B3Ie+fblD/lf/tN/mfuRS3u87f+/u/82Rz/y986/w//2f/R/trT5anmU8zIzTSPH8cA8pxZp\ndLpdgaY7liPO+fZvwHsL+nayOqK0uVpjZ66J8eZ0ZZq9sgYFaGPaN1jy4YNdocufkHV/xfXHUgz/\nDPB3/jh+8d//66tniO2E5U4F0X1pU29tXytAZQVUTz/BnX6KHWvvSQxrJpbcjyXgJKrm9D2CONid\ndZydDbhirjGaFrv9agV1SFlvKgVZPfZaf7kSYpTGEF27NBPda8n2FCqo2kZUU8bVao4NThBvYLHl\nERoUIqEVZHHmiCMO13coBT+4k+G3GQaseLx1v6vG0EWH7yLLNFGKmX8DJnr2/r6xXDts93OfYf6+\nXsPmHKJ1DiWrbaRSCNERXMeg5lGomqlqr5d115EogbiYe0fWDK7ifIeTQioLBSFuOjZnhXnJ5Fno\nRXnmlHMtjDpx0XXsLztezh0vr47kuSLOHGpUhChWTDZRKCrkWMnFk3IlFZtTJa28GUfejSM/fP2G\noYtE7xn6nt12w2a7Z9idUZ1HgiOEDTE8ot9ByQvzPOLVs99sCLGj5IxghspFawvuVbPwK5ngHF3s\nDZ6dx0ZkUKoUgvecOcEdj+zHydIBkjGbg/M4CeRUSGlhTplxSUw5s5TU5j+2HgIQRHjuhX/uzPNn\nn3o+erLhYhvYDgM+GuKQF5vR5bSYqYQatd4Ce9s4RITqlUTF4ehCx3YzmLZN1v7Q1m4MPd7L/TxD\nzQLRkj6aLy/YvFy0hV+vC9ngb+edGXEvC1UXFGPyzvNolnquUrPgnckRJArSdya1mArKQr56RXns\n+Ze+/0/wn/ofPRhPPCiKK7vnYbkQQ7hWGYlvxLkVzj7lc8vKgVDWbNF7Iqu0brlSG+dgLXBVHxQ8\nWb92/VdXVQRrlNHDHvAhOvqPRMf3d4D/x1d90T8a18+1u4pUXDMads0ZQhCcOrSl8Kqus7+Hb989\nK+5egbgmXtgAd3USOS0HtW4UToAHXQfPXpxxeb43vmbLftNSrDtEm0RCT64yJiR2Jolo8gZpf1dd\nzJjaRyPHuGgFTwC82aSJzUAkF7sXumA3o2AEnCpIcTgf7SDgBBk6KoUQvbnTNAp5A/Ht+WuDlZs+\nxxI0fNP/ZLresslOTiAt8oWczafxp7WIfxRXrWhxSOgIUVDx0JntWJ6O5l+Jko4jxvwWfD8QQiUM\nXQtEBk8gFsfiC8FByoE5T2it7M4jsQ9GcpodWozq77vA1aLsbhY6hf7Jjte3C7ejRVOVtrqKwMYL\n6oWNg+SE7SaS1RLeU67rcqFq4Xa0WCy5XedjDu8DtISKvtuy2V6yv3hCt9kD22avFfEt6T52Ae8C\nOWUzZEDwnaCaKAg6bJCi+G6z2twbpb0aStJvzlGdUB0pyx1pmblLEzmPLDmRaraZnhqTOQA9QhFl\nVhsvPA+OP//I8+sfBj55fM5+s8V7S3ApZSItE3maTZ851/u248GNJyhVzBpMnCM4x25zxnazaaHX\nnKBfEaEftngXmpdpu/+lwcaNaMVqtKy2fkxpZFFGIfbE0FPLOyiCipnshxiIscc3+0Ocs64yupb9\n6QzOFCMxTa8+Y7nw/E8Pf4L/xct/jS5e2Dx/HcWoyQBEhH/9z/0f+N2zb/Nrt9/k//Zf/V+Q9l68\nu3rH977/Xf6b3/4t/ovf+Ft8+7ufMc12rzZ/D5yY/744IQRh6Hu22x277TmbzRldvyHEHsFTSjaz\nhTyCJLxXRDMpjUzTyNjilkziICedX660+94cYYpCrvfm7Pezv5/t+PKPRBH9h/T62QVR1zlGJUrB\nO8vwuh+HOcACeFeXmqJfKm/clzV4WDD1wUceNKJU1eY8cU+s6YbI4yc7Ou+hLJR5hnlmnWfcH9nk\nVHhQsQ7Nm3G33cuCqRmb0N5j0UneUdNohaqABIfv+ka+wdipWWF1iGyCc82VUhaDYX1AkiJBcX1z\n6VWxA8OqomgzT2mNrHOO6p2xy2IkTRawGkMEMaZYbdovrc2tY+U4/xFfqpU6JdOvxc4MCNRYl35j\npsCI5dwtOVHSgpSEBqA6BIdvxCDnepwvBOeJztOFgPcJWRIiI9kHpFe23jH0A5vhjK9J5MXVLd/6\n4opvHxYiDpXI3WxdV7SX1BIunM2+7NRu7/3GQ3CC7zylmuxhSbYRVbWRTdFCWhq0m5Tb44Fy9Qb9\n4gf40ON9oI8bhmFP3/cEH+iGLT5EnARCiAgQvVCztwMMBpvlbI4suZg9W14WUlmY0sg43jCniZwt\n3UDbbHq9MTywBXYi9AgJuFUjGL3oHP/iiw1//qOeF5cbtpszxCmliaiX6Y48z+TJZA4roCFKSyyw\nJ6/eCCt9cLgA0fecn13QdbHJS9ZDnTS40JyLxAxqGhHHZm7QQmMl3+8Xpygzu59CCHTRYNmSx2ax\nU1vxqGZy4cBFR9j0hGGDiKeWAnmhJshVmKeZct7Dh5UlvSX4M2Nwr5jjOoT/sQrhEGPRppm7wx2v\n377lB1/8kM9evuM4G6tzPc2ftNfFir9LFT8f6A4zMd4QukAXB3xogc/QkioywTuiE4RCqTNLquSU\nrWsvljdZGsuz1sY+blBpe2sewKY/X5l7Xwz/u18/uyCKQYxeKtF7QmM9PsTnnQSqpHsG1QPfDIHm\nj+fstMxpjdnngDWyYP34l8gn2Bdtt4HtpkPS0txibJanJdnmtTrDlwRasLbQ4E7nOsAZDVxcg1Hv\nPZDMioiT+TcaIQztyVvelsGbhVqqudbMCzrNON+B2I0lHTgp+M7IAmQ1vrWwsoTWF7R1rzbXFOeR\n4AkxMB8yaZqMUCAWvGmvgSdsdpSynDr0P+pLa6HmxToo12y8aoPGfMQHK/Ru5+ldNa9QZwYF1EpZ\nFsspq6Y9DeJxfcS7SF+hC5nOjRwWYdKJVGEshaCC+MDQDXz9g55H5z1fu7rhW28PfGcX+O5d4c1U\nOc6ZOpujSi26ercbW1IVdbAgdN7e774ZILsoLNU2uqrSCqO5p1QgF23d22gxUUfh9sZRcFQxiNBh\n6QTivBVHmmWgmGi81mLWWy1AuLSEcWNb18ZiBpSTyZaHFk9lBdGm0EYimjEZxy9vAv/Djwb++5+e\n8/RsT/ABpZKWieU4siwjeZksTig1RELkZHRO0+M67wi+o4sDXefA2UEzeo/3rqVXAOJORDjXtImI\nUE7+PPpg7KFILdAIZcbyLkgtbYRgGkPnIJd6P++vlbQsBHXgXZvLFiPrOGvvXQgwta5XAvm14p/A\n5F4yxK+1OXy9r+GoidQfrmdMOzlOR66u3/DFq8/54Rcvub2dTz7SJ/D1wZ9PrVpRxrwg89LQhbvW\nSdrrskoagnPtUGDvtTUP2pANA7TK6XE2SPrHmob31x/d9bNniA2+jE5bpJ+cnCrs84arq7ZTtv44\nZGrXvR+NntBDefAPNIQFM7FdRckilc3G8/E3HnF+tkNKhmWmOczaomuu7Crx9LvWxyTrxuTX/qFZ\nG2mDfp1HMBNe5zuggmvpA8VMrO35Olu9TkD8qSNU55oTzlrMzVuxJn+aTUhjQ54e28ltOhiE5MxD\n1cce33XMy4j3rqVRY5uJgAtma1U088n1GXLxcFb7D/b65PqMompdcLCYHwu5Ba0eJx2u60wrUBRa\nCkIYdrbx1kryB3RZrJOsDQ0oBec8ITo6jUQveGd6vcVH5nniuCzE6Y4YAn3X8/TiMRdnFzy7uOWT\nN+948urI93TD6Dqmd0fiYaYuiVRNNlCp3FW1WZUqTu3judQG9zW7MzE4TF0T7CsGg3eusVkV8b6t\nc9N1LdUk2KvAPlcgmUYy10r0rq1DE/tX5TR3c20HDGKGFFGElCtBhV5gj0k/CspRlUNVZpSEEkX4\nJ84H/sVvXPLPfrjjYhOBSkkzy3JkmUaWcSQt984muQo12z3svRA637heYl167BiGgWHoUZSSCzg7\n7HmhMT79KdHcuXA/VlgHhNoM+xU76GpzmXKhlfV1lr8iBpEQOxYmtC6Aw4eBrh/out7SHkJndonL\nYmOLYAQWPygyHy1C6ybS5Q3FvUJ1tt+l0kYMlYcUvdNVoaTC4XDkzbt3fPbyc16+fMOSWyHlpxWk\nL+9up1mf/vSvXn/Rw9/8EM58X/D+4bt+tpeptJvZC86vjMiV9t9OXWuHpXrC7h++0WYR+9CppTUX\nduusqo37z67QIiarOH8cefLikSUUlGwhqbW2Afjq3uEaCcV+QC3ZBPTiW8dZzWIK7Egmpl8jWUyN\nCYUdijfWqzMijpZC9a4xPRuLtFp4r3hPnSa0Flw0T1M74aqRFpxHfHOTPzkNrgXDxP8qze3Gmcm3\nj4F5MvLFSlqqxTLQailoVub5lv/03/hTBPFmai6CNAaoP9sZbHh9y3TzzliyWvHe0+22dGdniIRG\nHmruO6Vg0egdSCDdHShpNJbcNFHTggs9dZut6AVnMHQyJw4frDtAMHMCtegkBUtR76IVfIlUKRaQ\n3JtIucyTvdTein+Ujr0zFuK4jHgvTNPE7XQ4MfqGIdKFnr7r2XQex1vKDyZ015F++SOkCvnzdyzv\njrCY6P6uKqMWjjUza2U022KymkK1oOahWvV07lGx7rBihbEKuLJubkLnMA2iN0ZriI6luWxrhVza\nndLuDS8GfUnV08dRCKJ4FQYHZ9Fz7uGpCFscpXreZXhVEkkKM8plcPxTT7b8D77xiD/54oxtF8jz\nyDTekcaJeRk5Hip5aY/FCbVK08wrPiqhc7hO2PSm8yNnnPP0/ZbtZm/zyzqCZkTFEIsQTtIAI06b\n0YWr+eTRStEWiv0A5VkJLevHKsYW1bUr3XBs4cMVIcSefugIzhxwTvIDb2MFnEel4jtHGHrKdE26\nu6O/2RAfH8l6i9MBpc1d21z3S5mt2MNaloWb22tev3nFZ59/xs31+KXO8P5aMa3/bvM5/UP+/P76\nh+/6mQXRwijFTnI+tA3/3inFnCadnYFOx6WHkN598CqnSaKyDrxXgo1waqK+VE5VHTULdVmYykhN\nCyFPJv6tYm4zYHM6QMUkEg7fSAit0EmTWhSjP4sTtJphsjTSSk3ZClToTGivimaLAlJdWgaiIDnb\nplDaI1/T7o3tc/IFXJ+drHTAdopcMwVZ6ejIKbjTuwh45jmf5h+1Kn/3GyP/83/jvwa1Yk97zCdT\ngvZ/8XYAsOLZnOnb6+m8t01M2my2bVTSNrmTnrS059fovrqyd8V+vh005FQAXZOV2Gtq7f/D32lE\niwa5rsSiRrmtp9/TaOgNxjsx9Nrzr7Ug8g7vjPTiWsyXAqVUpmlmXt6S+SH0Peq8PfZlMQuy5g1a\nWecy9+5H9yuVUze1ottVYbWK1rZGLSm+Cc8b9F6acPzHGdahaQj/MOzN1r0xZIPAO8d9Ea3Glk1q\nAv6MeazSOX5nyHw7vAFeWwxPsVDp2qy9LGoI8+pdl0gjW5uwviBkvC84bzPwWhXvb/EtlLpWM65w\n4vAh8DsfH/i17+8NihRnD3gtdG091Kq2JzT9oBWXlYm5mm/oAwKTCfvNN9hE/DktTNPY3sNChyJh\nj4sBvG+uiXbfhj7iQ6DOC/Ut+K8pyb0m+qewvo924rx32WlXroXjdOD65orPX3/O56/esqR66gzr\nj62PP0Rd/f76x+z62R1iywJ0UlFNoOHLR5wq0DLNbC/0VH0oHJfTTIG2IQGngrhOJNYiCfeEnZUn\nVpZEnmZSKDgxYboTsfT6JqmQqgZXFjmx8ey77YRrESy2KbMKklfJv7awHO/bQdDmD7p2j5lmB1Vx\noWt1Sq24unu4d80Ns+LhUadoyg2ijfcHBjPkaQXGGKaueFz0xD4SY2A+jqxuPv+T/3RHiAkJBt06\nDLL7csd9b3C3voZ6ooDrOtSxwnPPI28/oW33ev/xezcA1+zu7ABBLhCsO17hMPsdBoM9PD7bxuvu\nT+YirfFv2soGJckKDzScStsLqmjTuba5Vy02e6MQoElSjA263QohLMxzIi8j1XuIPbrtER2sMC6L\nedK2B/jl4mVwf1axgN32sSLWOeb26gbn2O4GYxM6I46kNHMcZ3JLkHBupdZD9J5NFy3HrqWiaDI2\n7ipjcHCKRVrHDqlapFPRevJL3QbP+RDYdYHg7PWopbT/15NzWimCquA8+CDcq6TkpGtd8wxFjNRS\nxchfpsVd33+b9Zp0xvFP/uCM//F/ds7f+Odf2ro4kedWZxpbz6sTlTTJk6zrwgGptHvVCG/OCbHf\n4LveOlqFUh1zApUMJeFDf9ILSlkPS4AziVK/Gbi+uubw5sj58pwUXpuA3wVEPGAG/Q+lDCjNFHvm\n5uaWV2/ecn0zmkHGaQn/+PHm/fWLcP3Mguj73gSx2Ib/5awxsRmamm3XCoH++LXeCwKnDU8e6JRE\nrcOsuo7X7qENh9IPwU6truC7nui9QVdtaO28iWS1WtyP1IoRa6yzcKfuQw3uq2u/asXIiAWC895Y\npqxerW28XS1MU8Vb52dYIFIUJ02ukZOdihmsGKIW5lutaNami1w7uvui73ASUV/wMVLnTDdsmI5j\n64oc/7P/+Cn/2t95zu78wowF5sR8d0OuStf1BFFLwXDgNh30Pel4ZLm+ZT7cGrFIzHOy2+3wm63l\nO67p58mcfSR2ECP5OJLv7kxH1w04H6mlkI53pLsbJEB3/oi4uziRhdYuQPUBu9BHus3OciGdGoM2\nVfww4GMkj0dyqYQQcChpPJqRtArTPHJzuKVrcOtSCikdWZoYfr8/Z7/Zsdue0XUBCUJaCm9evuRH\nP/ohVzcHjsmxnF3gXnxMfPyMNCe64xX+zffYzEeieJxfQ1LN3/EwZt7dFq6OkDIci/JqKbwulRo9\nv/SrH/Fn/8Kf5/FHn6IEjuORz3/wbX7zt/5bvvvyCh8i3/jG14idpRY4zeyc55tf+yYXmx13P/oD\nXv4Xf4t6dUNwTaOrQq6eRR3HItxm5bpmruvMIpX9EPgzn5zxL3zjKV9/fIHTzO3tW27eXTEeRsqs\n1OzIWZjnyFI8m63j+YuOs8sd6pWURpYlsdlseHT+DOccd3fvUPU8unyGauLq6g15SQxDj69KHzp2\nFxf0Z2cQO8bjgau3n/M3/nsrumMHT+c83nmyNy3wWsEN+WjdYzv+qjTj+2pjAh88wXlCjEz1AC6y\nEnBKyxBMKZPGGRc7vIvtoHiPQHT9gHM33N4cOB97ZDeR65E+PDptcXIqbacbj5wyx+OBq9tr3r69\nYlqSOQm9r3y/0NfPLIhhszVQtDMzY9MXrS0ADSax7qm5DfJllunDVIHGtFI5fc5+Uj31inZqfgBT\nONjtIzXPTNORftvjL88JQ49ToSwLBMFvOkLY2Qk8J0SxiJWckWCEA5vpedS3+V1pthxqxVLEozlT\nq8O5ZsvmrDs0RLg2qMxZioZiNzDttN00SnaCLc0wQE4n97UJu++oVigJm0EGm8lE3xFjZze+ms+k\niuKi2ccRG8ljvEMo+GFrXW4xeNtJwEJag5mK55ZIXqvNI3M5ESJEPASz3EINSnbRrL5qLc0tp+K6\nQB8f4cSx3L4jvXsDpRDPL3DDxl6TqveSgVSpy8w0zXaS73yLmfFEMU2W1lW43Q4GIZx0eh0D/mhU\n/K4PzHlGnGOzGUAMIry+ecc43rHfbtmfn9N1HU+fPgZRQvcj5sNMqTekHx1Z3nyOu3yG//gj/Mcf\n4u+u2B2u2VHpxSwES0nMZebuMPLy9Q1v380sWdlOwmaKuLM9/+Sv/im+/if+aS6ef4ziGI8Hhu05\nCz2Xb14ROs8/82f/LMusjHNimg68/N530Nhz/sGnPP7gE+TNZ1z93d+iLtUCq9V+v0XxOEwZWek8\nPNv3/Po3n/LPf/0Zj7eRebzj3dVbbt/dMh4XarZ1lJNQshACXDwSHj/dsjvfQHCknCg1I6J0oWfb\n7xBx5D5zOByYxpEuGlKT80y6Tbg40O+3dNstbuhJqTKPI2lZoN2npxlHg00FZ+hLVYiuzS6zpWE0\n7qyIb21wNTKOszNVF02uYtqDbN/XYFW0mDVjLpRkulPz/Q04Z4G8my5yfXfD9OqG+OyMordQH9l9\n0xAIPaEehpYsKXE8zlxf33BzeyCVe4D0fU38xb1+dkEcNqBK/+gJ48uXUAsiKzFc2obfYLn1Y6f/\n2iVSDTZ5AEbcgxIPvo42YpG1ozRSTb9xaJlIxxv6s8cEp4SgeFwTSZvQVyUjg2+hdmrxCIB0JpyX\nLkLfETYDIkI5juicjCATA3UamQ4H0mQ5fHHoidsd4jokBgv5rWZpVcuC1BVWbQMgVXNnKdUgKKRh\nxO5k/WZQTYNzUCyQGIMWY8QPgZg9290OK7SVms31pBSbV2myQKDSOtB+2Jp7UCmmERRn0hAXEBdw\nzkT+RQsuL/jSG5Em+DaLbIxYNXKM+Ih00RIGqqV3+OJwMRJ2O9DMcntDur0BhKCCG3p87FA8ou35\ntw5ea6UeZuuqUdI8ksSQhaJKiAMherP+awcOQS342UeGYWBKCzkVuhjRfjAI2wtjmkg3MykX9tst\nXRw4250zpYlDvMNVpfMdHseUXvHmW6+53T+FDz+BJx9Rxlue54WdLni1QODLy8x2+5Lt9g1Lypzd\nZfqbgr8c+PTr3+DZ80+5/PATKso4T/Tn52RxDF/8iMPhltu311w+esI3/8Sv8eqzH/D5d7/FmArD\n9oz9fk/603+a5fu/Sz0eoQh5EUiFWM2jdOMFPzi+frHnn/ulp/ypT57QoVy/e8ebl6+4vTlSZjv8\nqHhj5XrPZhs4u4ycX+wZtlsKhXk5kjXRhQ4fG3QravrJOHB0NxzmG5ZqxvWhVPJUOXvW02+3uK5D\n23s2TXekPDcoXDixRoFm0IphOjaWEBGoYj4S62jBgVBs5q9Nu+kDsd9YVmLR5rBYmp9nm1e2ebXO\nC6p2gMQrIgEflKHriDJyeP2Wx3VA/W1bf7Wdv/W0HlfkZ5lmjuOBq+t3HA7TSey3/vfH96Y/yktO\nRfx9af6jvn42qSZ2+FrZfvQpy92BfJhQHxrk16JqBFbagVCRUwwUIKZDPBm66WmqaJ9uHeNpxMW6\nFK1cOJ/pO6XzCXYdoevbJlvMGxVMHHyC7gr0Dq129HRFGkHGmdOFA1+xjV7EiuVKlCiZ6fUVPga2\nl3u0jtTDiOt6xEec2+H6vhU6m62WKZmP5/FIeLRtrFFFqmCq/wbVGjvJnnbBOkg8KslmMS4gIeK7\nDt0UBiwQtRYIobOOSjOOiKkfIl2/ZZmPpJRwXUuBR1GnECx+x0aIBgNrI10YaaYzCMuGMaC+dZkW\nYOtChwuFMh8oy2wvmii+i8j5BThPurthvn1LyZmw26G7M+vGPWgIZlC+EneIaJF7F6Fsz0cI5OWO\nvGrzBHCKOiNY1MZe7YJnWWg62MBdHunCgBNhTiOHwx3zNHGxPyf0Hd71DBslLxPiPOe7C57GwKMp\n8dnrL3h79Tnpg69x9fgF8/kzHrnEZVnYpIlNyTwPAR875nniyZPE7tUbDh2cP7pgd37O+eUFFaFP\nmbjZkZsX5rIkPnv5mh/88Af8wfe/xzKOLNVRvVC9o9vsuPz0V/hs0+P0QAjCPAEHICdzKumFrz8/\n55/9+jO+dr4hTwc+e/mGV18cON4lEEc/eDZ9T4yR0GWGPrDdbYl9xEVHLplpPoAKZ9tHgJBKsszG\nlAhdh3dKjJFxmZDFoUtlHjN5Eh77gOss5qzWyrJMLGnG5oUP0iycNCtEszUsJUFVs77Ltc0Lsfc9\nBqS6k6OUiB0gve+IXY9Efw+pnpLhi0knXCPTlIp4Hsw4QZzSd5EueA7HI2gk6w2lTjgX22z/fs8B\nKzTzNHJze83VzQ3jnH4sWunBMPyP4Vrt395ff/TXVxTEgGrH/tNfIh3uGH/4Q+q0nN6wZr5mMzaM\nFXcaRYt+qfitb/BKIFjfby9fRvhXgQIIwUN0lb4bEIn40OFDh+tMu+e8ww0dvnO4tSgKIB5yQZd0\nsnBzsREBqnkjhq5RuGuhLDPz3RHvPGePLuk2HXmayGVBPPg+Il0AKq5Bi3htMGfF9wPddttSMexA\nYAP99jwbrMQ63G9QrRQjuax5cXiH6yMB8ME6O8QZS7JWXCdoFkhGWsjzxHw8EoPBoyftYwOqaR2o\nVBMHOwzarKUiwcgG4qzDrW0DczFCBF8LWhJlGqmacD6CD/huwJ0H0Mp0/Zb59pq8TPhlxg873NAb\nVNt8IrVWKplaZaU5WrKJnaTaLNiMpWtZbAMui8VM5cJRrKgHH4ihp3cd0zQTCRAsqggJVIHDdGDj\nKqqZzkVcEOZxZOoKw3bPWewRqexub8k3n1PLyHL5jOuzxxw2j9j0mf0ycdZN7FG4fcuWLVozN1T2\nvbIZBrrYEYYBPxsk/OjJc/Zf/JDw+hWlVFzoubk9UBXOLx+DU+uuvGc4e4SPgRDhbB8oG4cf4M5v\nyer4eBf5Zz5+yrMhcnf1llefveHVq5l5cezPNjx+OnDxaMtm2JrTzMqHbAfFnFM7KE3s+jPOd5eU\notwerzguI3d3t8RoFoQiitNKSYU0Ze7uHDF4Qt/jYoc4R14S8zKSiwVorzNB2wMKq8bPDqVKqcmK\noTedrasKNbLe9doOzSLR0AwxzW3sB1QnNMNSE25lJQxCKRlt0pvge3vsDQIVga7r6KLjejyQDx49\nWyh6xMnlSlpoh/a2FVXlcLzl5vaam5tblpRPTOKfpqN+X5t+ca6fzTL1HhcjZ1/7OppmpGTGH33W\nVoiabZkaq83UBe7U362X4yfZWiImvlbcOj18ILs4rWFi7wnBEUJHiJ7ubE+32xL6HRIizhtbzcaW\nuTnTmHfh4eqWm5fv8FLYXO7Yn12aw75v88xVkuBA50y6meh3W4aLnQnmU4IMJWdctuR2CcE6VM3N\nW6kQN4EubIx56QSJJtaXNhGzA+oD6mJzKJHq7kX6cJonrkJ+8Q6v5hRS5kwaJxyesiTzC02ZuN1R\nSyXPC3G7sd9TK9L0cq51Jiu1tapSteJrEyyvOs2VYdugGokepx1uTlSf2/wxI0nw0uO6nv7iMagy\nH27NDaUkmG7xwx43bIjDBhe61v1KMxpQm+uqQvXtdbJCLqG2zjvjxSC4XAvHwy1OAgVlXubWDQyI\nwG7YklJiHEd22w1OlGk+mHMSwtB3TOMd1zdviTGyHzb0XcfZfoOTwKYfkJA5Tm+4mu+4ksDbuGXX\nP2YTNuAj3XzgjArTiLv+nE4qZcl0W0tlKDWz2+85v7ik7zsLgq3VWJRqZ4CcE+N4oOSFnCzqqlRB\nXaQ+uoDne3p1fOLgl84Gtiy8/uwVb17dMN4VNkPPhx/vefrijO3ZlpQqtzcHPIWzsz3iHeN4JOUJ\nVaWPW7wK0QViDIjU0+s/LwfGqbdZXckE10OvTKNyGAsffLBl2G1wXWcs2nlmWRaqKp1vnqY07+D1\nfm+6WhC0GBvYNWbAiQSz+hU2OY3Nj83oI0gkhIEklhaDFnKZqVVZ5pFpDHRdT7+J5gzUZB02yvQE\n37HtBvTuhjff+QHbbz4jbA8Et28H0Huo1G7BymE8cnN7w+3hSC5fHuG8L4C/uNdXF0Rg/+HXkFop\nxyPlcAR+aMur6eIeLqefirfridd5KpZO5IQiAvcntJaa4KSw3UZ2l084f/GCzdCxP3uE7zoc3f3v\nch76QElXgOWxpZsDn3/rh/zWb79k6JVf/eULuq8Hhu1Zy61T6yK1UNLCcnVrc5jHl7jeZmyrpk9r\npS4tY7GzmZyZEVfwuRXmps9bZ4Ut2kZVqLk06vk9CWFlsVZtkBMKYh2oOHC9fb3zgeHignycSPOE\ndxGpFe8Dst1BEJZxYjwcTQBfzaPVaptpGlfCjGKdJk2UT4O8EFqah53gBdvFzVDZ40pE02KZd21N\n+BBww4bu8rEdKO5uKGmh5IlSMr7MaEqEfovrB5NqrAbRwf5fcwZn4bAidnCQGvDFPHNLLSylsOTE\nnEdyzuTxlrrZml7QCz7s2AwD4zKjWtl2e5JWZmcb9lwXqiuMd3fUl0p88TGx7/BpNpIPhf1m4GIz\n8GhKvLp+w/c//x43uwuOTz4gPPmUsSbC4Rp5+zmHz79HuXmJnj9hPhyJmw0x9vTDlouLx/T9QN/3\njNNkI2MxaUOtyjgfmeYjb7/9LW5uCy5cki8/wj96yrYufCiJD4KjHK/44otX3L6b2AwDz5+fsTvf\n0m16Sim8fHXNqzcjQ6d8+OKCfruh1ETIAgx0oWczDNxcvQZsDfmaTRMZbHY7TSNSKsNwjo8d43jN\n7a252pxdbokbm+mVtJDyQikWvut8fMCUXg9zHiWfDlSK/Q7zu6gQoxnq22mvwZ1mmiHOWOIhRkJc\nRzHZDoMS0JLI1Xxgu2gxSxIcPnRtTm7MZh8C277HvZ347Hd+h2f7Sv/xgS403nvT0bIiW1oZx4m7\nuyPHabY4pvst7Cf3wT/8U++vf8yur/AydYgXtk+f43Il3x5I19eI/13WfBQxYVw7fdlg/fTtgKpb\nt1mAJs5u8GHLvKiN+UXbo70oMcCzDy75+Ju/xuPzp/iieATNBqo6bbCgh3o4oHpAvLaom4nlODNP\nM+dnHV2IxoAMcjpZiguUubC8fkeZJvrLM7r9xmA+p0gwskJt0gxtGjaDZkPr4iwA1zxJV6KRzQ1t\n3rEac+tpTrpqGe3mtG7RNJOm+aMlPKxi5/7sDK2QxiPBB4b9hTH/7g6kaQKUvGTSvBC2Q5uJhgZF\nBRwLtWW1SZuzqlYT3AeP+B4w6YGW9jyjIQOu79EqZjqcZqQYycd5hQB+GOjkMTjPfP2OOo0UHcl1\nJs8TYVnwaYfvO1yIuOBxob1/3ls3UJpAHUFCxWXB6WDm0a4geiSnhbzGHl3NhBCQwaQAihC6nmLc\nFELoiD4jDu6ONyyp4OPAmzd3bLu3vHjxgbmz1MKcE/Ewct5v2Q0DTvcw3TFN76ivF97iuTl7gu4e\nI197xsZVXn7xGU8vP4Rpoksz3WZHiAPb/QW77Y6+61lSap2RPbNaCofDHVdvf8h3f//3GZ99wtlH\nz0hkLsY7fnnXsRdhunnD7dvX1KR89PEHXFyeoyLcTUdeffaSt28ncgk8fXbGx588YX9h1nhhSWiG\nMh+MpRyiGcfne+PyisOHeCKq9NsNsetR5zi8hetr5XwfOX98jh96KkKeE9M4krLd667BpYgRvqTa\nwdDYxTRfYMv7k1oJItTgofb2tThEgkH1TRMrHjP+cAHvADXDDM1mt7dy9lQsjcZFj8SIhBWNCkio\nxBjpXWB5d8d0fSC/SGYc0YwkTqMKbIa4jDPH8ci85PW8fkKnHu5f8L4Y/iJdXxn/JCLE8wsoyvl0\nZLm9wsX/N6VOeDGvGl3dRQChrsgbsI7L7tWF1kTdL7Ha9o2VqGNIf+XRo55vfvNrPN49wWdpEKuu\nGKSxW52aCbObEAo1FfLdgXxzh6qy3VU+eL5lv98hwdvGHA02LePC/O4d882RuB/YPD5rWjp7HOZu\n4U8Q0WowTDRhugRBomd9Ztry0lB/6rK0NDnGqXuW++day73ri9P2c9bfVkw8LeC7wHC+Iy0T03S0\nvMSipHkhTSNh0xP3kOaRQc/bCcV8YG23VMiNHavVglrVN3OBAlLuT/f3bsgmiu8imis1RVyxA4+m\nRJURJwPiAr7v6Oseihl3kxN5LixyRylqifPbLT4O+KG312el6Ytrhs0NuSWgHiSKvd610vmI9nsq\nwjQfwVdiEHwVdFoQJ+zw5Fo5TNeEfkPWSsQTg82u+s3AsqscxluKPseFQCgWTXS8fUdwSr/fE2Pk\n8uyCNC/sLy+5vH7Lj374u4z9GcftObeXl3znh9/jX/hf/e8A+DOv/qQVeR+oH1XGf+KWcZpaMOz9\nGhcE7x3BCeVfTlAydfl76LLQO+iCwzUvUFjN6idq/T65WpoHAt45uq4jxCMiL+2QgxWif/E/2fMv\n/z97ZLOzYiVCrYm0zO0ACFE93kU2uzNwQlGYpok3b2eWRXn0yRnb/R4clHlhHkfmZaKWBQcECesp\n19bL2jtp+5MKEKh1Nn5BCDaayBkNXbtH7C4vasiJjUucEYSCEW+oyUhZLhiZhibJOhW3JmsSMzOn\nuWntNxvCeMd8d03NxzaqMB/jdWdRTOR/TEeO05GUVtuFn8S23hfCX7zrK9MuQCzP7uKcMr5g/8mn\n+GEwN4jgKalStZxII1B+bGk1FaIITq3L861bEbUZwglKbXBM7ISPPn3Os+cf4/Jpj7cbsVao5pVJ\niBAqaEKzkqeZ5fbAdHXN9bs75mQi4pqqyTHaGTAfJw4/+Ix0dyA+PmP37IkVoFYkqjb5gUtmKC4m\n4j9ZpbXapc2FY7V/W28hXW3ZQrNa0/vnJis+eDL9bhR2B1pbtVzJMY2M44eO7eMLjtc3zHcH+m5D\niAHvz/Bdz7KMpHo0fWTLrVnt4FBvM0/unXTMv7VFVJlK+h46BfOQbBIIFz2+89TqqalQ8oJ6iCWi\nTiAG3GZHhzMY7HCDTgdKyZRm2lyZ8d2GWLdoP7RusbNzh2+IgvO4qpifrL00QQuoJwalr56UAzlV\nlprpu4HQNV/ZItRlRlHSMlOrsEhGsQLShcijpxekceaYjvTRbAi99+Rl4XDzFrTi+x7vIFHwIjza\nn9OJZx4zL19/j9c/+l3u4ua0sse7ayMQYa9VKdlQBJEHFA67h2pLcZBlQnKCpUIVkoOaDSb2a2xV\nLZwS2p2njzaDdc267uTugxXD3/n4lvnPj/zLf/0D3DqZdwKuMB2v8Q66ArHf0A8bVDxjHpnmmXfv\nDrx6dSQGx+WjPWGIKJW8HJjnG1K6o5SF2J0RY39/0K0279bG2GZFIWh6VPGskh6Rhn40PMi2BUOT\nXIiEIdINAyHGlm8qFpFUhOCs+/TeLOTuLfPafYSCZpwo2ziwC5E0T+QyYsZ7jX39oP9TNR/TZVmo\npc0+H9y/769f3OtnzxDbyczHgNtt6C+fsH/+CaEfqDnjdzvyzbXZVVWjUv9EONFq8dTW2snn0j56\nf4O1zzuBx0/O+Pqf+Abb7Vkrfmo6J23Bv9Xmlq4zn1HEvBjzOLEcRm6uD7x8vVBUCDhKMi/Tmisl\nHzj86DV5ntl+/SOGJ0/sFDvbnEwxKIhoxUC12nzNm/F3rcUYcNVBg0VFfLtRTy+cucrUJkEJVpzs\nMRssivgmmDdHDrTBrs3f9PSDnKCl4p0nxo6yZJtNxQglU+bFLLHaqd3mqq3IrLo+F05zEINL7XXU\nE9dc72dCp6DlZpHVbLaqS6dCT8XkG14QFxEf8Lqh9wGJDq4zTErKuUXdJOuIGxQWBgE8LvjWjDdv\nUmeF3FVBpOB8b89/EfowUPrCCCw5MaUFH3t6NxA9eD+QNDInM4rIJaOuw/lIqQUXPNXB23cveXz2\nmNhHpnkhS8U7R6mZdMwUzZZmkSZElFIX4qbnRf+YePWGt1dv+JX/j6dUx//6//QC/+kvcfADYxGq\nVivAl4+Z23qlWaVJLZS/+19Tf+fv0GsmEuiCySd2m4HtMNAHiMFel2HTEzvz1RUX0JyJPrI9OwMR\nSjOgT4c7/tL/5r8k19QOlkLOcyOuOOqS6YaObjcQ+h2IMM+ZpVRurq/57Iczx4Py9Q8j+8sNEjwl\nV5Yls6SFkoz4FOOGEAIr9q+1sa0fQKUnyVUbA1RpnZnYmlxTJBq+au+10Ag/lVIKUorZ3Ol6MFBi\nsEOZtHQOm7dzX+QERJTBOwbnLIB3vqVoAqzAK/d7j2Jrc06JcgpL1vf18P31VWkXtjE7F6hBCGdb\n+sePcF2Pz5nh+XPSdECSdSCunY4fXvcnL1l7oVO2G3y5KKJC13lefPKMp89e4MWhmsxHa/1KVWpJ\nprdTQYt1IXmcyMcj6Xjg6u2Rw7Tw5GlH54SyzBZgXArTzQ3jzQ1nHzxl8+jChvO5BfyquYfgHa5r\n/qPioOuQ4I1Bl4t5ZbYHL8Hs1yT4taFuhJx6v2m4NRMOVmNvGtQqyIO/07DDlYSzQq/Z9lY8eRm5\nGV/h45Y+mMDfDz1SGnRLg5NXazbRpvdsUpD1oNy6Ya2rYbdbGfXGOmXde5zR5uOCFLO+q9WCkYWA\nFDNzJgih27Vi7HDhFj8dWObZNIYukXWkZm2FWkAigsNVpbpmbOBa6rq318kR8aJ0bqBQWXKhpMJc\nCl1OxNibH6hzhCpGVFWLpiq1kPKClhk3C1TPUgtTnNjtz1Amxqk085+A1soyz0iIZnbd0I15GelD\n5PH5I7ogxPAWyRX94vcYywRf/9MM+0tKTniUi/M9JURqzg37MEnL3eaMmxJwdWG7hYu95/Jsx24Y\n2PQ9++2eYbNBghGyck4saTFC0TyjLrHZbe0QpmqM4+l4imTC9aS6wGKuUc53+H5jetvQkbSSUuJw\nvOPm6prPfzTxxavAJlYeP+4ZdhvAUZaFZSlMKVFKwfsB7y326/6q3Gvd7QBlnqoFi19bqMWh0jeS\nmWtrsYn3T5tMI7rkljqjZl6RciZnYTMkquaWJWkHX+faYW0dz4icOtHeO4IrpHSwx+Jt73HyYCSh\nVhCXXMjrwe/99f7iK2eI90bRSMB1EX+2x8WI73t2n3yN6eYNyzQhWXGiOPGnAtfAO/tJsnog2gzx\noRk169eJst31fPjhUzZdD3l1LIZKbhZhhbpkGBxoRvNEWY7kw5Hl7sDh3YF3bxZE4PnTLQ7w0aCW\nPM8cX79DS8H7QB0TTp1ppkJoSeCekhOk1B6eM7mF2FylTEvL0RNCY2Iigu+GkyeqBJouq5mRlfuZ\nkq6bV3P0gGb9Rjl9Thr8hBqsbJCqwZjLtDCPR8Qn4tOndH0jxdRmJN6yINWtlPc1F675r/rOsh6L\n3sOzTWytqk0jaFCmeBPFVKd436G+Uspsp/lakBxtE+uM/afe4bc7eueR2CM3AecOTMsRzVDLBFHJ\nczNdzoEQ+5azaDl36mymujp8qRNc1xF9pFCJKZuRtmaqGCBGS0A4vbZi8pKSjR1cywxE0+3VypwX\ncoHt9ox5mZnGkV2/o+s7fOkZl5koI7vNwNANLPlArUrnAp2PBOeQoJz3UDTxdhp5OxcCCiXz9nhH\nUkjLbOb4QKwVvvsDyl2hG4TglRgc/dAhIqRpxO0u6PoBREmlIs5s9mqeTU6CI897XMtnXJaFeT7Y\nOMIH4iZQRAFH6LbtgOOZc2VMI6UsTNMdt1d3vHpZ+Ox1JBfh8rFw8WiH76yIL/PMNI8s00zNELtg\nzE7/Y/jPaU2XduA02N+ps/UtNkO/z7tqIwF1rUvMtFNPO7RlSjLy1LJUahbyksi5kFMlL5kguTnh\nGLKAd7YGnccHz9ANDC5BTbZ/ucCP4ddAO9StZKDTPvW+Mv6iX1/RIbb/Q2NfOlw/tGyyjv3XPmW6\nfcdyvGN5e4dTG419eYhoMyqt96bdwEmndN8pKp1Xnj0/4/mzZ/iUTPuGGERabFahpVj34wNVE3VZ\nyIeJdHdgvrvj6s07rg+F7XnH+d7mEv3ujLAZyNPEdHVH13vqkimj3ZBu08yKvQff2WnYRSyBziDL\nMo7kcSGNI6XMSDMldsFCc8Mm4bqADwOutJ/VIEBpne36cpy6P7FOwGZ7DW5aDxQnOcY9MzZ0gTBE\nXn8xMc4TIXp2ux0OxUcLc601o5gtGx4jvoTeXrdaG1adqWIples4hmaZRrWTeEsvNijXByQUY/dp\nRpsLsiazn7PuFLTMSAy4LtDJDueEcIxwEObJikrNFXGZQsXVjloF6cxSjNo8TiPQpCxKRdRCmGLs\nGbpEzgltM0utSjWW0omM1IKhyGmk5NmednTNUDqy5MS7q1dcPn5C7DbM8w3jPBJiIARPmRLTcmSz\n6em7DV2p5GaZ511sDN7K0EVwlZvxhpwcruu5Ot7w+nBAvUdUWe5ukHnhYlnYvk3ERdB1DCmOqkKp\nto5LagxLKjUrZakW1FuUEBzedSzTYh0Y5kE7xB7vDXPZb/dttLYyuCtLnlmWmZSONi+9mnn7qvDm\npmfMkW1XePKoZ39+Dq2Ij/OBOY2UkhDx+GAxS863ubPYQQXF2MrNok9bvTN4NNo8WLHipLMhD6sE\nQtfNxbJWT+4zoiy5kGbbI1Allcwym0m9FrURjve4GEzS5MyRKnYdu9hxKw6vpr+Vpr0Viae9Bpql\narl3vLkHVN9fv8jXV7JM10OdGbBh0KD3uNix//DrLIcj88070vG7lCn9BGQK2mJ/7Ch24luus4gG\nG4oI/RB5/vwRm64jTyNSUute7GvKNCIK/nyLdIFS7qjLRJ5m8pSZDzN3dwuzCk8uokFhwSQEICwH\n2xSC98zXN3Zz5Q0hm3WUj511g07BtblDwTamOdlpNS2k+UjNBtuGuCEOW7qcCX2HDpx+jngxc2wf\n72eozZx4NRuWVhwt6EcsLPchhiM0aYa9RpvzM3x3zc3LW/r4Gn2a2F88InYGd61msKt5t8hisJ0U\ny5FcnYWaiF+x3Dtx0TazwonwYIbmGMbde1z1qHZUcjNyLsa/qa2gOXus4oDgCNstEnsInbm1TLbJ\nlmVCq8fXRvpB8Kr22uNATMwvEvBRqXW2hPkYGbYmRJ/TglbXkun9ScBT1VJLajsAaLOLq6UQY4+P\ngZIS4/HaHG18h1Nlno6I5hZ6q6Q6My4zm23ACRQpJBcgDPdbqFTq8ZoYz7noH7PZbcE75jAQNzs2\n2w2vvvttjq9/j01eiCm0tQ7zAuOY2W0Wu8dqZSkj02QuMiXXZohe6UJH3z22BHkfDCkRbZIVgyEB\nnA+UslCAXBfmZSRNM3kxxuh0WLh5BzeHnjlbgXh0Bk9fnNHvt+YSNM/My8Q8T6Am1Qg+WHGqLWR7\nZQmrQZ+1VrIWimYEE+XDysB2bZtxOLE5rlYbsWhVW1snP2Q1mDsVlknoOyUVZZpGnLumloE+J5OV\ndBGfjOHrut7WW4gMsSNwxHLbGvtd2uz8RKqxQ8cJteF9b/j+suurC+IKKeiqC2pEAe/YPfuAfBxZ\nrq6Yr26ZX71uJr/3i0zBoBOFFt170q8/JI844OJywwfPH6PHW5ZlNgi2hc8KNkvzQ0dxFZ1vQI9m\nfJ0z0zhyvBs5TBXfBc63ZhbsCXhv7LXp9o6KwSvz9Q2aK10p1JRwMVI3TZCvSl0SZZrJ40xZks0h\nc0tzoElAqlLzQlmEjBFOtBzRLttcL1iW3JrQaPDoeqrOTczfmHKy3pzlyx22j5ArItpyQYSLR2e8\neXXHNNvjjUPPGsBq7jOwxmzYuNBO8au0RVy0Qtvg8JayaO9tVVZnm4fzTakgPuN8MBmHVKoms1zL\nCwZJhtNztJbWQmCFHdSneLkjjQdyWagVSttQUW2jVUWrdXj23mOxWtWek4uODmMpBxfJueAoVM3k\nUk7ib5XGLNQCNVPyYl1m9PjQEfoNqhmtiaIQfcBVZTmOZjMnBh1fX79mPN7ivDCnRJL5tKpVK6lk\n8pSIvKLfOl584xuENLNc31IksNnuefz4Kfzoe+h+j5x3hFdXeBEjyHQbtkPP0HWE4Oi2u7Z5q4Xn\nNos1mjuLQZBGpqnZNvw1BNjM0jNLKUx5Js0jy3ykpkyZFqa7mcMdTGMkFZuOnvWVTz7c8vjpY3wI\nLNORaZmYlomcJyPUBU9wsRVEPW0I2tyQ1hEizYy7qjZbNZvr6ckoAmptCIic3I3XHeJex9ggcFGl\nZGUeJ9MnlgR1ZxKvkInFpBzOZdMob23O2XeRriq5rMk7q1PTA9z0QYFcDUHeA6bvL/i5OkQBbHa3\n2jNJI350l5dsxhdsrz9l9/YLynhkub570OGsi13u09JtKtVgWFuGds8Lj548Yr/fsRyucSx4V1Hv\n8WK+o/iCipKPR3yXgUKZjXAw314zHUaqVC7OPNuh2YYJBoMtC8s44Xxk2OxJh1vS8QDOE3LF+UKZ\nEitZoOZKmafmwJIs5w+oak4agaG1e63c5WwQay0nWFSKNALEat2mbSMDqyQGb62+dQYP29+NfNAg\nHWczPeeV6hz7iy3PXlzw+tVbbu+OhO6aEODs8tGXw1AbS8a6CG+fE3s/9EtztzUn0ij7Kgb12nvX\nIGrnkNghtSLVG8GmNA1qKoh4gzurdbqshCEUHyPd/swSF4InHW/JaaaUyUY9rThRh9ZNt9lmNOch\nEUvugGr8DCpRo6G/rRv0soKm7dCi1Tp90VPainXZ5rQjEhr8bmL+4IId+Eq1yC+EkgtjOiIellwg\nH2E1NahKPVbSVGF+zXZaqFcf8XqBd9c3/Mo/+U9z8fQZLx2U8YY4bNl7T/jt/4ZfenzGh08ec77f\n0PcG0fvgTvZq0ghUqzG8iNyjLGLCCpsz1/s5sFbmNDGmRJoXynS0uKSlsBwT81RJSyCVQFHH4Auf\nPHV89PEjhrM9tSpzSixlNg/fxv70PuJDbOHC9/e1sUdtHZWi0CQWqtmyPFG0tkDxZkDhvDa4vT0n\naZ8WGpMWqBBDIHbF3k9RSrEOv2o9zf5cdkid7R4Hs3CMnj4ObMoFh9KZKUg7iH+JOKN2D9xnu76/\n3l92fYUO8X6IKCuba3VRQfC7Hd2jR2xePGd39Q3mm1vmw3e/9CM8NCWQbY663gWtWLoGIXW9Z3cW\nOF5/Rp9v6aLDu4C4iIuyMq1BJ3zbbPNi4aHT4YbpcCSnzNAr+6dbttsdYX28HupcKHM1u61hA8lE\nyzWNFCoaMixGvy+lWhHMi8USlUrVbN2U6zChtVhR0EzN6TTXCR7ICZaA1zX/LZ1miDVnY8ThqG3D\nprTDwcru/BKGU+00uxqnSyD0kYtnZ7y9OvLys1ukCo+enlPRNcWpdZm2ucKDhAJph5sVzmoJGOKb\nNKRlQ1qmVjv6rx2+b+khNVAbaeFEXFAxQ/WWNNK8y1CMpew3Bl2L9zjf4Y43lGWiLKad1JIptVC7\n3lxqxIEGOzv42tadntagX1m9JbUO1+ZQtVa0GjPRePore7ZZ6dWFoIp3nb1WVfEO/EqCkmhmD6p4\nH9AqpLIg4iiNObwe4npxVCeUUtlOd6Q/+A757DnTcSKEQJpvub56S3JigcCS2Pfw4YunfPzhB4QQ\nT4cNaPpaBfwaKK2tENFgyubDu64N51rxsTPYuExMxwNlWdC8UFOhTkpZoOSm46yBIPDsovL1Tx9x\n8egCUbmHStOMqLNZqTOI1juHd74dSuQ0M6TZ0lkGqLYuryC14lbrQAEj0ThEIurqvSzXmXMN+JPx\nfmmE8m4jzNk1aLOe9IfN7+Yesg8g2bJRfRgIPrLJA1MyG8OKtqJ4zyYVMfjWyb1++H13+P6CryqI\n6wrS9STKqhlvlHxP2O7oLh+xefEh26srxus3IK/sa7BEcjP+bhkW2uYe9oNZPVrKknn3+feZ94/Y\nbDpCGCzKp4/mLuOss1RtQ/1c0KWQlpnl9kidMuKU/b7n8tGWro/UaTGGaRDS1ULJhX1LY3Bdh0uT\n/RwpFDy1LOS8UIvRvEsxH0ezpnLN23X133RNa9jE7i6h1VGWdvMDaIfrAs51J8an/b72/JtRjSKN\nwWdC51orDwNNxQXEK5KLUd/Vs932PHqy44sfjMxpIuUNa8LGegIHTJ5S165CbNM96SuqdUqszUcj\n42BFxeCtNktsGkT1vsVBJZqKnJO1lsq9qB/zQ7XKbpoz6RxBtjYjdEIaHYyjdQ2uWrizc6jzZu+g\nvYm/wX5GAHCI6/ChAC28WQrRd5CSySXE41yP1tHqvoeirh1OxIq2VALNdFwLVS1Bxbt4ouKvvCKK\nohhcXHXtzhTnCz6WJjcKUCZeiFCHLb/7t/42b27eMqcZ7yobgZqP7A9H8pJOHZjNTQXNSysefKnz\nkzViqTFWTto/BIri1i5LlelwZJlvTR9bQZOSciEXpWRbq9Ep59vM1z8958mHTwl9x5IWxvmWcb5h\nmSZzZAIcZgRgZtpYt9rWpKoR3GpDGbQmExKta6uxlk8EoEbyMeJTYzbjqDVjRuMTRRNLLZQK/RCJ\nYmk0rs1YlMKasLFKLaiFmtRIWF3ABeiAMBkZSbSRzeA0ilDaQcO1x/m+HL6/2vUzC6KNgtrcS9v8\nQvP9jMsb5T7szxgeP2H74UdMN29w4Xs0axhgtbK+nxrIg8/Ynx1OKuc7YTd0Jkrue/zQm3ehb2G2\na6xTyaYJTAtpOpBGo4e74On2O87OdrjSvC23G7OpWmacQOyNlOB8u8lXGKpWS4kvpRVBg0lNv+cI\nrgPncFTMX6x5Ozpn8oBarVNEzKPROaT2J3hyfUUV80O9Dyw1gktFzdzAnY6x9sq4QBXzn7TNsDS4\nGUKArJ6r64nQ3fLkxbOWadh0hc61Jk7bJusbHNqIO6cHppx+aCPGrIUMQFwrSidnHSvSqql1MibM\ntoSnRqYQ0JwMWvPeOlUvuC60Rbc/oQU1LdQ2V6W5s6wHBXXR9KGNLCO49vqVFn/UYryaaYMWJTvT\n4CGjPRatSJsjWbdpbNTgvOkPBaqq+eOeDhXr8DxDbUL3qmZRpzaDMt2dvUd0G/x2x0c9PO0jP5o7\n8nzLF3fXTNNIViHIwgtn8LnmgvTS0M6Etjmvrpq+dcOXBqE71zpuIy+tSROtSbeZZjrYPFwFLZCT\nkrOyZMhF8K5ytk188MGe5x89pd/vmglBYlkyKSmlGqTvxUgq7uT92w6itJllNTTASEtrQTF+QHWt\nANHcklxzq6GNX8QY1brOuWs7NBelFGVeKs4r2/NzQtjgncVSOVPmU4HQihkVY1YvCy5vcF0kSsBP\nMzVNlLpvj8U9QF3uO++1wL+fIL6/4Cudau7/YJtc5Us5fwrqBBkC/mxP//QpZ+M3cf3fRmQBbK6j\n3HeFDwk1qxBDUM7OHM+e7NgMG+LQEYbWHfrmn9iEtbXNiGqppHki3R6oUwandLue/cU5XeiYjkcQ\nyzJEIc+zneqbZ6RUTPcGJizHPu6atk3V0ufxrmkrW4fV2JtOTBxt855m6F0XqA6KkR7Ez4hrIaen\nyb2aawu2UayEEmlUeVVOdmYCDzZEYc1RrFUppTBOmXdjhzsIw1Yp2eaSJ3KfczgJVNKDDX7tNtrc\nMFeQ2owOqjFGWUO7WmE0MarN8rwFN+MdtTorvuumaTszqqWRidr71uaLmhZj3zpHGIbT65jHA7kx\nUGsyMoe0fXZF7dWBFOtOtayHCU7vD7WgqaK+EjXgczKDa22ohFu7XesunHMt+cTe+6qVXBZzrFnG\nBv06qi5W2AsW35RzK94VrZ7zsz1+2DJtzglnT6kIgxS+sQ3Is0vq8ZajLvTdjm2olDzyhUbq7Hji\nFi57cNV8eNeZLM4OTN5ZuDXOoa51jeshsh1eVsjGkmeUmrSJ25WcK6mYZa0XZbtTHj+OPHl+webs\nDAmePE0syRipOdk967xpQkPoCSEYMcr50wxRVSm5WDGX1vWtI4FTlXYnaFWEpsdqbXddF6mui7wV\nNjOYt7mwkuYjzm3NfMH3+Fb9tSTTyzZoXksyCVDeIhqIzhGXiTIfYddsJb80hxBwLU9V2v37szbC\n99cvzPXVpBpg7Wx0Tbg4fbydEAX8Zkf/+AnUShg2IHc2ogLM0q2geNtY2zRkhUujhw9ebHhyvqPf\nREIf8V3EBdco5u1RVBNkl5zI02xZfNNERXG9Zzjbsb+4JEbPVCrddjDbsQJpSbjgTDi/wjku2Gb9\nYL7Q7nKsa7VDgDs5vljnsea/1bJgZcCbn2u7obUubcNSkB7v7kv/aYbn2tyk1HbCV7Muk4Bwb26w\ndm5rZ2D/KqVkro/KF2OgU+Hx1Ai+azddnMXlGLJ7Pz9Z/3PqAh9+wj4uq82W3Bfs9QAkzjXTZks0\nWCN9tJEkaO83aOso1WKAajHbO22uPk4I3tIvjBnrYDmiOVGXZBsjtRldtwId1reomQZom3mqwaAu\nBrxmXLUcyVWPKO0UZtM/f5ptFhyldY85z1DFIPOUTAPZoHmKGjllnpnX0GnnePT8ObuLC4543k2w\n7bb4yye4ZWQ53HK5P+cbX/8m18dbHr/4hJJnpndv+bsuEt4VnlyN/Kl95UWE0OZarDOvRvyw84ui\nJHvyfs0CNBMIVi/YEx6oaBFLuqh2YAsO+h3sd5EnT87YnVsxrKmQc2ZeJpZlJC8TSMBFT/DGzg7e\n4s2QJvWgIQiloSm1njS0isOMntY5dY/h3O2xOddySO93ENrhk3U1qrGLBbOQS/OMFMENkdD19h6q\nHf6cxAcdtlJTAt3iXcAvE+nuHXLxDBf7xipd16cQXEcIFmf1vhi+v9brqyHT0ypqw/9GqW4fbFBj\nxXWe/vycsJ7+nW1Qwa+BtdYjFm0FCCPUBIHNAB882bE/2xGGiOstesgG7tq6InNyqQXqlEjjxHIc\njVIfKmHTsdlu2QwbtBTSlOjOznBdR765I6cFF9WsnBoEJD40VKzBpdXgU/GxmY4D4nANkuPkMgM8\nYI7amN9mHFqySQVKNTeYbDMubbE7mrPNDtvXt2Hjg+5xfXXk9PETqUK8wZSloKVyWOAmKR7H1VTJ\ntcHZzqOutKIlcDpb24neiba5VBtiNgiMlvCxvrf20hu7WBqVqWGETbpRwVWcM80lrVDYHLJV4fUs\noJgRtlbTszlptnc9AUMa1EOZjugyU3I2XWCtyGYDDKdN2c4sK8HL3r817ooQCJqJ2hP7HaUkdFma\nj21Cc6E4Z5tuNaayqpLT0li3TWmCvReCMaRzWkjJiDqrUP3y8VP8sOHl2zteXx159kh5/MGHpLcv\nuZsXHv3qnya9vcZfX1HEUcqGHAZqScylcsyew2HmE1/5OFRe9HZI0OYLDKU9JsuPty4sGzkphAcu\nGA3+cwHUUaqSWnSSd7CNkc02cnaxY3t2RtwOqDNruGmaGZfJmKXY83UiOG+RTO6BF7GWpt1TzAO0\nDT3Fecrpr+uIpeWkiraP368raWMFY6m2dSJGl8lZEF+pFEL16FwoZSa5e8jVecW5hVoNRhXpbf2m\nAkkJzuPTDfnu+0j5Gi5sbB2fLiPFeR9ODO8/7HoPpv5iXT8XZKptY1ihM2h7dy2URgKpAt1uj+u2\n+NhbQex7/L6jXk/Yptwo/ojdy0AQ4fHFwPPHe4ZNj+86fD/YTe+CdU7LYmSIbKfAsmTSOFonoRXX\nObrNhn6zww8d8/UtaVnwXQcV8pIpudBtGq1/JQIoqDpqi5upZTGYUe2kLk1veZIdaLOOk9y6lIim\nbEQSKqJGElhhueo8yGQ6wNUlJhtBR0tu8VHG5rR6uG6C96QaK2jRoFxNVkhXT0ccQmGpMGZnkKnW\nE5SrtXV5BKipsWTNacXgQ0v28Eg7fNhzNVafsQxVw2luZpU5gN4XtFMQepX2+hh8LLUV8xWexboK\nNKHFIcFiecR5fNcDgo8dC4FUD2iaqDmRgaKKL0pQgRqNWRk8NE2kCA3ytaIbtKfL0MUtKZowXbVC\nmslMiGYr3j7gpJrdmIQW+mw/S7MaGaNUKJY4vzs/Zzi7JHTft7lyv8ENG26na95dL4TPvmAZRyR6\nDr7jV37pV7j42kz83d/h29//Ab4bGPZn1tE004C7kvhOyczzNdvjkfPthtD1+OZBq60LpqwmA8WC\npcXZvDCsob2CqIVXl1KoxdZviJ4YPbv9wO5iz7A7x8WBrJWcMtMyMs8jJWW0FkInFnrtvJn2u7Uj\nS03Ocq9tNZKWdeionsw7aq14DVasVJuZfIbSsTozWYJNPaGotO8TUQM5aAgEnqyLPfdstnBrKkku\niUhs91C2e6/ae9XVQr3+Pcr4TVzYUR/GDgiEEIghWPIOf3jRe18Mf7Gur/QyBU7EGhsnPThRnbok\nSwwI3erQbzep7we2L55zmH9EnpSijof9TxBhiMKLpwMXZz2+yQIMynRWSEpBa27diRXFkiopzyYM\ndx4fIyH2+BgRlGUcqSL4PqA1U9JMrYUQepupFRNy5zSbWbc2J56aWiRVtI4nAC42P9F2GPCrWYAD\nSqP5C2iDdmuFkqz/E6FWj/hmFN4E/663sFzzDG3P+dSOl/sZmdhc8TR8dbRZomUbVrUtaFElVdfI\nQBUa6QgvRlTRL4v9V6MA23SsUOmaOLG+37QCo2JRPicYtIEEDvNxLXLKLtQVWl559Sv6XNf5JYBv\nm1vzsfQGrbreoDnTHXrS5CnpaAkk9cg6e3WbHV6M4GRZeCblkZYZpXhzM3KF6D0xDizuaOJ9Kk4n\npPb4GqnOiDyOeC99UEtbKFSb7aoSug39WUcYNubR2sguvrMu7eo4c3135OxiJF5XNHjYnfEHv/Ob\nHA93DHmG21vu4sz27KxZxEXr+imQF97cveLz5YB3yt4LLnTcm7O7FX22tQZ2uGiSovUe9Q4WTAax\ngg7eQ7+NDPsdw9kFfrOx7jAp0zIyzgeDSlFciHg/ENyGGIPJnpCT/rjqA3eXxvZ2YvO+08ryZqTt\nNLYZotzD9A7zJ25+q4263Pin4EXonPWQToWaodI6TZfJOpKdIJJBO4J4XAfh4fy6GhoVJSI3nzPf\n/hZu+wLnL+/3Myz6K7R59vui9/5ar59zhghgxt3rLMOEtw3KROw06AIS+pb2IM3v9JfIhyPp83dG\n2GubsWI3037n+eDZlt2mwwfXaPbahPAVzYWaawuqzU0ov1Bmexxh6IjDQNd3hOiR4MhLRaIxVZVK\nmkZ7/P6eMWtaw0KpCSimm/Idzpmbibh1BmiDUKPnS6Nre9t8SyPRtI6vlGTQlnh7XdKEVI9rLFQQ\narI09yqK05UwJNSc7Kb2Rulf66PBZ9Kg3ACSwQWjwweDELM2iKw2S7VGdbeNNNjf13gpLAVDgmkN\nVe5t3ESqaeDEoTXfbx8rMaadioxY1aDzFR511tFqbaborQM0WhWs0e1rCLHl6JmZ+tohVwd+N9is\nN3YsR2GZ7tCcKIvBt65WKBs8OyR6tDFSxbfZ2yoNCJ5QIrHriJsNyzLZa+AhRAehUr11/ayOSA0N\nQBUXimlkXQehw4UGLTd2o4gV8TkXru5mrseZ53mh1ohLFb295od/6z/nfLdjc3HGpVfGnMnNo9eJ\nwczegcdz7C/4YjqwuX6HlsJ+e07sbJ7ngkOyFSEXTYqgxSBxHkCBJ6G7QqlC8IIPjmHbsd3viP0W\ncUIumZQW5jSTUrIu2As+9DY7FCOUiXPU5hBVFSuIbQK4SkSUlVENbrV3lIARs+7HAqu9HC3izAa0\n2NoTQarSx4AblLIyvpt5BEB1SnUGn7qlUFQJw76tuXYwqgktCcF0k34R7t79Fv7iU/rtn/vyXuYe\nXrNgAAEAAElEQVScPdeWZfq+KL6/4CsLovVyitGibau5nwVUbWc7EaPUu7bptk3Dxcj240+Y794x\nHY/kd/m08gQlOOHioufJ0zO6ocf1w6kAqVZqXtBsp76SEnmaSPORlBZKSjYj6QJhGPBxQPoeQqSK\no9sO+L6DtLCMRnJxLZ0ihEBPxU+d/Y5q7FkJFnEjzS5O2wBM2pxPbPjXkiQqFME5665qanrEunYu\nUE+b1mw3rFZqSUYSyIJ6QUkNeoJVu7V2Z8Zc1dZJeOuc28zDe8+mi0SXUDKlsU/BCqdTy2604m1u\nM1Z8rYC0IDrbtERWHf19sWvQ2KlrXJdD6xJZDWkaa0dKup+TimukPiMKwbrxYcLtJiMxZmRu+YtA\nCOY44hqk6qx7zONIzmaft8Jvgv0O19k8T9vhASeoc+aKUwqBgX6TmA53lCURfEcfB3NfWQlSYnKR\nE6kDJWg1tMANzTGmvS/NS9Tg9MDx5pq72yN3U2bJC7WROnrn2cXAWfDEknm66TkyMDtHTsY+DhrQ\n1uX7bsON7/jizfeoaQEV9m5H5/s2a2tMSKn3c1mcFZd2r9ZijOZcLDEtBKHvBzbbHXHY4UJsSRIT\n0zwzzjMp27jAOcG70IhndrCoNMKMWrD3iVTTXicR2np9EIfmI65lX94zO08ryMhKDU5vVk2mZ2zr\nzYUWbVUcNdU179oKaxVcsntUsZzPU9F1DZVo+Id4Bykyv3pNPfvP8d0H64tmu0/RVuDfX++v++vn\n6BDX+SG2+E6MMJuxQMU5G8K7EG2u1E7QEgK7Zy9Ih1uWuwPL+APKwfA2J0JwwuNHPbvdAKGHtSA6\nTxlHaq6QbNMsS6LMM2Uxq7aiCSKNAWEUaotichR1xG0HWsnzwrIkwmZLHHaW1BEivu+ouVjS+sqW\nFBpxyKqDthnKeqPpaqOBQAH1EUKhxAVZTLiffSDn0TIbi3Vp0maCUjFjawGvggaHk9J+T6BKO/HX\nNgBknbc03aN3p9fXe89ucPTB6m0pUPMKeWozD2gbVs32+/FGPBGDBpV7pqs67hm9LbxVGpS7Fmkl\nt9dboEjTljWLMbWOUDW1eK+VgOS4Hz9bYbf1tM4Vc4PRGnsyBKSLEAKRihPP4nrkeEtaRmpdKHUB\nVWJ7HWRtVr0ZQQiWPB9jR1Ylx0S/2THmW9BAjFuG2Ft32zxi18NIWaHGVtBNogESIuptba5hyhXl\n5vrA7d3E3ZwZp0zeYT6sOVOdZ04J8cKu3/Co3/EmZ8brtwz7M7quR8tivqBeOMZzXqWA3FwRup6u\ni4YECEZSqeBPYdRygrQBVgu9mmFJUIqRsDa7LZuzS3y/oYqQUzkVw3meKLWAjzZ28LEdaMx9x+bB\nptesuEZMWX/3elhuciFnsLXoeh81JEJsNEBzW7L5dWPwOqwwlYxqIdVCWRJewKkjOEFdIaV2XiwF\nnxM+e0ovZAqudZAnnaPBBTjfEWpgeRXI+88Iu/+EqtO6pbGkhWkZSTm/L4rvr9P11TNEWcdbavZl\nX/p8xaTqbcZB62Ta5Zxjc/mY/OITlrtbDu/eMs53zWBEGHrPZtdxMypTOrKZscF/VNywQUtE3UKd\na7NPq5SSrajkiosOCngXiN0Gf35GHQt5yfQXG2MPzgspLZxfPCb0nc3CnM0JnVdqF9qcZrWlKhYY\nLGvqBbACRdUIFoo2iYWgCXA2myx+sS4zOfI8UWhRPa2zUi3k8YBvjim0mCZzASkmu6CddNeWLJem\n9ZOWVdjgU/GEAN7VZk/lTB9XEmiLxloTzDGtoc31Vohq7QS8SQVde37NYstkB8aY0aabFLcmpjcu\nf7auT5qMwQqta89VT4bU66j51HFWaVrUlXBRzImneDTnRgQCFz3oQCfGCnSjY5lGtC7UdKTOAzUE\nK/7dgwJeoYrDBSVWR9aezfmj1pFaFyUhtM7SyBvS7NpWfcqqlLMq5AxdCJ0VxXbgm6eJ1y/fMI/J\nWL/HxHy54CTgsGiiJVdkWuhc4GwvHCUwlkpfClpniha2ux2o8tmPRuYa6JY7tuMtZ/szet1Si5rP\np9aGYrS12SBcO/QoKSVSqU2EL2z3G9PlbjZI5419WipzWpimI7kkwOFjbxFhTYJUteJFG5xOk3+0\nLq9h+UozoMCZcXqtbVTcYFXn7xEFWV/X9uZIY2Ubxo3iKGpied+IWlIcnZfTbZhrMa3uagCOycCq\ne+Ac1YwTDIJXnEK6Kkzf6VjkW+R0sDWghWk5MI4jKZefWhDlwX/fqxR/ca6fI+2iLb7VNu0k2NPT\nDEDbXMo1Fv/pco643zM8fsTm9gWbj55zvB1Zrgqijn7jWcKe7770jONIGAqPX0S2oRDLgYtd5Oxs\nIHY9daikNLKUhbTMNk+Sjq7fGHu060CEsiRyqQZ9KqRxQsn0u8Hy03AG53g1Rilx1TaznngJ953R\n2p0ZnmMkAFVFfUW9BdpKUao3RxYfeiNEuIBwZ36dJZ1gopyONPNMo827vkFAjeCiBj+v96BqNUbf\naojcXHZccHhvTMSqZoxV2gxFtbt/i2q74Venn2abpS1CSJr5gNA2E1da6Ko5u1hUjzuRD1bdqTE7\nPSesVVsn2DAuQ8QeQFLSLMhWOEvEiiF6MiioxYJdpcaTt6rvPD5sqJsev9kidwfydIumI3UeqcHb\nLNB1ZjKjCq7im3gi+miC785Rzyrp7o4lJTZDwbvYmJAmChcUV1ObkZm+EgXv7fFU0YZQ2mv+9tVr\nXr+8ISfY1IBOlVwSJXrcdo9sd+TDlb13E1xue67GkY++9gkZ5XoaOY4Hbq6uONzd8fn3v89ZVY7x\nHBnh8ZLYpWzs3WJBw1XV5l6qqG9ElzZzSxmWRcjZMew8Z2d7Nvs9PvZUlCVl5jSz1NnWymqzt76f\nVEMNsNlyVYOm13dR2vu4jhFar8jJxKF1abXaenRNbN+sgOwQJKZLVV07ymaFp8YglTbTq85gTS9m\nSlALlKxkp9RiB2MtC2bgHznZfDR0AxacFnzKjK8U9s+p+RZblpXDOHI8ziYf+Wnb3vp8WUdF78vi\nL8L1FTrEVQ7ACTpaWW4KTU5ghfFE/LivLkYs6zv8fkv/6An7D7/B+O6WZXxFnYG4gfMPybVjeLLj\n/KMPQJVv/fZvcfXd77DfeZ4+veDTT55xselxfsPwxFOWzHi9mOaxG4i9eV76oWOud1SyhY6mzHQ4\n4Puevt80dqg3ZxpZu7G1c1kf85o117qjtRitxWVlU7bu2eJ4BBeB7CDbvGmdj1ixmE6Eh1orJc+Y\nIUB7lYIZIa8aMG1emoi9xq42lxiwQuFtTmmp67ahlWpWXbUqXuup81qfk11GADKtYCv0rWM0OEvN\nVktpM8JGIFlnjY1w8qDda6+Dttmmg9BGR+Zia5CvPJw72vfUFvSs66xJpJEjarPqFjMAcGIdGkrw\ngcFHkvekO2Mf53lqhw/BBTXRf+sUBetSo/dkVUIckG0lLZl5nnEuEoJv6Eax9xEjD9keLrbZ+tU+\nUE5jg1IyLz/7EdM4MxAQ59lkpS4LenbGo1/5VUSEu793oJBJJXEpwhAjv/LP/TqqyvX1Ne/evuIH\nf/AdvvPtv8dSCleu481d4l11DLuRznl2XYf3juhi2/NXrYs91tq0wClBSkZwu7zYcf7okjhsIQRK\nmkgpM6XMnAq1mm+uC9F4UWRE+rb52x1+sr7WBn8+qAgGLwtO2nz69PGMUACPUk48A12lqevmsfoj\nt5+FmuMNGHHNhTXT0oT6eChJkWa8n5eZ7DwBh8Y2Qzy5aQnOeWLo2PRbzs8+5fGf+AvE7gvgilor\nd4cbDuO4ptX9oddDws3DP7+//vG8fi4doojeQ2HrXaGYnk5oJ7KW++d+7Gd4h+s7wtme4fFTth9+\nyHRzy/xmZrh8wsUnv4Sr4Numd/vuFeXmHZIr764SB+mRC+F6cfhD5oMP9ujmDI4jfrcl7Pa4/Q5/\nfg6pMh+OVhADlJKZp8Tm4pzQ9802rM28WgG3wmi7tbaZ0SoutgpWGqxDS7Vo8FEF1hge50wS4ECd\nzYN8F41s4j3u2LZ4MTOCkhKqd3jKCYI0142IeuU+MBVqbsXd+bYRF5YpoeoYuo5N5wjirNA2LZmI\nP4nW79/FxgJVg7lFG2xVtUG2tM7v1A6zzv9s/ng6Mdh7vfqqrZrJUzctJ9jqJHFf56HufrOVpvXE\nt59ZORXw2taXaz/jPkkB86s9u0BEWY63J1mND6F1C5bvWKppRx2KxxMpqEaSbkk6kUtFc2bVmnoX\nqKsFWbWElpMO1XsjCq2dVK2klLi5ykhVzoMdXM5cxZeBeU68/NbfI+DwaSHGQFGLLdtfPOL8/IyP\nvvFNxuPC7dUVH37yKTe3B/7Of/lfcbgb0ar8QQ387S8yjzrhBQsbP+D6iJrZLCtTOy3LybQizY4q\ncHHhefbiEbuLS1zsKQVSUo7zyHG+I6WEVpvjmVep6U5X7aFvMLRr/qnU+5k0bUZ7/97eFwmH2R46\n7xohKbQvcCcSF7VBpQ67r1ax/7qpoJY2IsX2FgXUMjAXtSCZNFeiTxSXqD6CBLvvgsd1cV22dhgK\nnv3jZ5w9/+RkOlFr5XC8Y1rmUyzdT9v75Cc+8r4c/uN+fbVTDZyYhmD6IB6s39XGzMS5rSs4tVti\ni9N73GYgnl+wefqc7fU7vLzhyS99yv7ZM8iF5foKvbshjndcBGHz5BHFi8U1HUZ+9GpkiIWzJZBS\nZC6RTno09FQfiBc7uJ2Y7iaoEJwjHReWeeZieGa6vzVKRlb7LpuNrYSAJjxj9Rk93ayCbfynnZrW\nNjfBelUjh7SCKiHav6ngfN/mb/7+pI1t/jUlROYGSSlExdHdn7jN/YCaKiKFlDJXb95xuH7D0Pc4\nD7vOEQzjs1lTwaBth8HG3plWcD0DeLOvM0awxerI+kY7WhJHC1Y9Wc7piR6//v1LlldK65r19LO0\nsWbt+TZHklVygZjjW26b5Cr9OM2CTICuVU6ykLU7d+JstrjZoU1LSlujNge1brUtPZOREOiMBdPe\nv46yzCxptLBe6cAp7oEhgqMVQR8axNyKY7YElJwyKTlicFxuzMh+Ozj8EJgkkK5vcLFDpFCM1svx\n6oqzjz/l9/7ub/LpL/8qT5+dc35xweWTJ/SbPV4i3/r//jbL8YDmylsJ/M6dpWk866wo+eBxvrn0\nFJhHC8mutRp0u/G8+OAR+8sL/DCgOFKeGdPCtEwsy0xJZlcXfGfr0ztEerzriLE5/rSK4FXM2Uia\nNrV1+CLOgpS1sX0dJqR3vVke1mpEILUCKGr3HOLBZR4WFyMMZTOhqELGCESU9h5W2sxdydkKYgqF\nLqRGyLFDrZPOTN2bEXlVod88ov/oTxCGgXVEXGrh7jAyz6XNsr9c6tY97x4du78d/35f8hWff1+C\n/2ivr5whGsy3ngrvtUgASGmRLjRySDPAPl3rdynOe+J2Q3/5iP0Hn7B/9IQXv/IrdLEjpREfI33n\nuNw49jUx3x0pTuhd5fbqljweefzikk12uO6cvHfIo2dwccGy3FA/f0NZKofjROh7vARub65AKnEw\nJxQTqDciSyPQqHhkLeToaeNeZ6OrIz9qrFlO8I7Ypl0US/Zom5RTIyiooi4hoQBb+1zFnHJyapq8\nbI4sYhuUOn0wu2pFsQCilLTw7uVrvvd736fkI0+fnRO6nj7a6Rm1YlgxsoHpEJsR+9oFqzmB0OZF\n1uyLpZb4xv5T6wFO3sstG3GdN5kJQXsdldZlNwNnpJFmavt4MzRwzfptTUZYd6ZoxBPrQIulYpy6\nTtd+vukrNTf2bQxIsPgu3w+Nzdto/rVAy0lcH4/D5qWo4P1CJOLw5FBIpRJVcLk2C1jTNeZsyR2r\nAL88cFSZxgMpL81VxTFsK8NgiSabfcfZpx/ztvTcvHrVfEY9iKcWZT6MPN+f8/u/81/yw+98iz/5\nz/4LDBtltztnuzvj0eUT/uA7v8/N65e8+e7v8f1vf5uX84F+XKDMCBB8NDSli5S8cLy5o+RKrSAx\n8OTpBY+fPqff7lAgLzNTWhiXhWVZtbLgJRDCtsHNHiG2Q0STzLSECpsutNkc98XDiE/lhAQYUmQ2\nguj9YfqUQgL2dco99N5YuxVIJZv8xHmcRKoUO5wWsbxQbQpmFbLaHLFmbe9/QsLQvHvNiF9bioaL\nkXDxyKJh2l5US+VweyAtPym7kAf/pa2j+4Jpf/rx4snp8z95/bTPy4Od8cuYrD742naI/Ynf+P76\nB3n9XML8eyixLeb2JurDld8o1vJjmKmjEVnEoNP+/AJNmbPhjIsnL/ABEhUvsIliX/34nCEGyuGO\n8v9j77+DdUuzs07w95q992ePu96m95mlcqlyssgXMiE1PQi6eyIEaqRp/iAmhgGmZ5qJiR7+mJju\nCIJmGCY6JggYUAMNQhgJSYUoVEJSeVVlVlalz5t5vTnus3vv180f693fd25mVlUKlUBuS1n33nM+\nu/e737XWs571PPOa5WLJVs9yfmfM1qBPYw2j0YDRuQtsnDqDm97Ezw9YzmZEH9g6sYVCs1zMKKqS\norAoldakkvyZO6PeRLbqjh08iFQnq5RQIEuVq0aR9O8qJqGdC0RpJDiQLZaMlWqo7K3gGluUhLSW\nX4uqITlR70iZkamwq3MeWxEQd67l5tU7XL++ZGssIx4pOozyKC0Mv9aL2ABIxZuymo0M92fSC12h\nF+isk+gq5lwNr5w1tMpjGJmtmkVGEmoNgwJoSzcg3vVYV9ZFXdMoyTmUKjJX3jHJz44QhsRbsptF\nTSTfVeGyich7i7CAKXvZZLgVn8kCIW8Yg0bYkmgt8lw6YnSJVhBUlN9rT1CaLKeAjinPi6v83JhJ\nSwGiJcXAdHJA8GLka2yiKMmMTOiPKo7f/wBhDtP9Q3z0KFuBKSCJkHa/P2S4ucWdm1eJQcZBrE0Y\noykfepjz99xDWy/Zff1lPv+vf46XXnqe/dbzyrQmBYXRSzAaAyyXMw729mREAsXOw09y5vFHGagW\n1S4JrmXpPNNlTV2LMHmM2YrJZBGNbAemTcqIgs1jxF2C2/WNVd4u1uWSlpuIkOdWRcdCZSLpCl+m\nE3FQqiClhm7sJmaSnlKWkAwuBnRhJCgGWTcioZeRj6Dzn+T1mhO0vLCVFYKYaP16VHQiy9jWMoqb\nofcQAovZIivsvDVkdUGww0dW4VHlivHNP++2wLteJQe9/MMOXEkZXVm9dnc6V6+yfj1Wt88fhcX/\nWMfXDYhC9MgVFbmXlK/Memi8q5zSXdh7N7yc6Stoayj6ffT2NtujE9hCNnWVAqUKFN4TfcDYAtuv\naOdTDhuPsSWnd4ZsbQzp9USirQyJXq+iHA8wvePEQY/24A1Onz9Jb9wj1Q1t0zDa3sZW1aoHp8gZ\nb8b2RIQ4ZjKQBPiYtcnWzvG5zs3D9WQVDmFo5kCKZLFkFRG0liqn23yM9KCKagBJ4C2S9P1WAtwB\nbKnQq2H2RAwtKhiaRc3BrqeuLeVxTVX28G2DUUE25JRwIRFcyjZCgRg8MkZhs8KOuESQhQeUyT/P\nfdOOTr+6kcmVHN3oSO4jpQ76TKvAp7CsNVizOEFeA3J+0uo90BpckMBGh7flIGsyy9CHu5Dj7vqk\nRBbzlo3c2DJXr3nhxSPVsTK5lyXjAaWRwXSVJGgGpWTGNSV0dsEQMCDjHklk6FKGYJvlnMnhbl5H\nCWsSpVWYQnp3dthjfPIsTaO58fIraKWojp+kUAZ/sEdCY4zhXU9/C6PNbdq2ptcfoazGqooeYG3B\nYDBic7wBs30m117lRluzFxLxcI4xiuNao5uGyd4tDvf3Rde2rPiRf/Ep4FN8cO8JVHBE1+KbGt82\nGVYNK4Sjm9vrrn9H6DqK8Kz/3l1/eOHiDICf/D89s7o2q01flshdPUGVBLrXWdBgtXkoxY9+8R7+\n1G9ckGCqRUQ9xCAka58gJLyL+DbifcJFtRrRjUGIY+tg1X32LCrRfZ7W42czdCdriJCQlkvHUYLp\n0SC3+k+tx267/E0diWDd95U/El3ddxcM2uUFOaCpfA+tUYwjrfV8dJ9Lau88xtl9iPUZ/KPjd+F4\nB0o1+VA6X8Sc7qR1TqMye7Mj1hx5UvYSXK8AXRT0N7YZ9IZYqwlNoiAx0AnrIz6zVmPT4usGr2E8\nrjixPaKsCpISWyOrPPgGPzskGQe2pF1OGY362H7J/HAKWtHfHGFstijq3Co0Eii0yWal4g0ofUW1\nXtEr9weZxSN2c30q3yT5NZOSjbjrs0WE9dYJdBu5kZI2mMFQxiTSguiWgGTUEhiFmKIK3UUB8tQD\nrg0sHSRlqPqawpQkFSiNsPBCBO9THqgORDyhs+vq5M20ycFR3MVV/g6SG5hMRsjBfkWaCJldGUVg\n4EjRp7KqECquMllheHbs2phzCYUS4VbpNcb8DoWV6jXGdYWJygQMmY8kz4WK60betnTmPythlRr6\nJCWWVKmzqzAZvu02LK2zOUQCqwlRkVSUBCEmfHRiv5Qrnm4WUgKqIUbHbLLPYr5YbfhlpalshS4K\nPA5VlPTGY7a3x5T9HkkpNu+5B7WsmUwP5fyExGi0xalzF+m2SaVFCLtYVdMJU25w8V0f4MHP/waH\nv/lrzPtjducTXp5Mpb3b1hzc3KeZe1CaouoBMngebCnC4ySqBGUMhKYWTV/Xikzgii0sSkFqfVE5\nWjV1idBb9gO62dOueuySuKOP50iAPIK2kHju9AEk+PF/f1Z6w1rmEGMQPdrQemKb8G3Cu0SbFD7l\ne6uTAUyepEQK0dgexlb5M4hhNZkI1dQTdBC5twT44Fk0bvWJOja9Zh3wNHkZ5oDWbR1dPtjVBR3R\n6mihoPSaodtF2i50d1tE91+33FcVZ1q3urujA6W6s9id7d+NnuYf9uO35YcYU2aZHr15lFppZyYB\nT45cS4GtOnUKEKivX/Xo9Xr0ehZXQlNPqaJaKZX4tsEv5tK7LAzHtgZsbI5RyhCc+LClGPGzBarc\npdjq0x4siX5OigNwiWa2xBhL1a8yBBiz0atsiNJT6IgjHZ6RciVsctUDRL+qNBIadDcqAOf+h38F\nwIde2slw4zpLhCOZslI8d05moH78Lz2zkh+TXt+RrSIzX5VSPH9xAcB/8VeeQSkR7p7OPd4HBgNN\nVU6IwdM0nkktN8evVIrBaIItSrkencZj95k6kkuuCuQydlqpbwaA4M2b2N2/W33JVdBZJ/8Z4unu\n2tUme+QO7tZQlzmnu17irtdfncvVkus+b1pDr0efe+T7qLv/Z3VeVu70Rz7Omz5ht9OBEheTtqnx\n3nPlYfn1//C3PVpFULXM3RXXGBz/O1CUTL75Fq6pUeozUs0im/No51Vc8gw3t8SRflU5AWX+TN2u\nOU4s/ve77P/JmzQ+kIxFp0iPXXSUHppWiiuPR7SerT72c9XzK8hdaUF4GMo5uOvqrRCPbrfNq/Ho\nOe/OTv7ropLE5fmLsyO7+NtduLtP4wpdyGd5Xno+fc9tnvjvfwHy6MjR63HXUjmyNtSR15T/DkHd\npHP8OHLzCcKSEpgXQP896qImqkTzVAuv3/0Z1/eh/G/gd3r8UbT6T3bcBK4DPwP8z7+9p76jgKg7\no1fiKttbxUTUysT1LXABkAi5CkugFdYUVLZERy+yjCkxGFUU+OwcofEhUrtAKgoqY9kcDbA2K+Ac\n6UngPWExxfQ0i5s3ifWCNCxIQeHalmo4pOz319WsUXnhqzw0nquyLk3L4xUqVwqdiLI23d3XNexz\n2bb6julNmy53p29v3syNllOfyFVnfo0EQovRdz13BT92uewqmJB7o/nx3WdQZNasWkNHRzLS7tkK\nMjv0qx1fIxC+3UNW5+Po09QKqpZzeyRzRqqLTp1ntSGlu16pW22rrDxfQboNfp2kdU/rzs2RQL9u\n4qw+uMrVS3e9EqyD+xEQTaUcRN80xL3qkypywJO/26LAVhW+bWS96mxVlQXrm3qOtoaNrZ31Z1oF\njaOwtaIcDLHVgHpxIH6RhaEOiSJGGaEvdH7O+ghBlJ3I6239X/fvrI7Eute7vrpd9Omu2dFgCUqt\nUYf1mk1H1sFXy2ze7jhyvxw93uYljoTmr7YS35qrrf6S96yv+eT/8OPIrb+Cn7u1sP4I6W3//rV/\n9g3+oH8YjlH+81T+8xsbELsrmuGju67w+iGrG013+89br2QnD9YvKka2h3Y1YV5jtKEqSkzPE43G\nOE83ievaJSPlGW4M0NZKwLQGnQzaWpHTKhM0jtnt61idMNYQlzUER29zU4K5UjLjp5SUIh30mY5Y\nFiklzLqsuEIHg+iukuw2RvK8XeJDrxwDEv/r3/rAevauIyBk+C7lzfRP/sUvgFL8k//pabFligk/\nm9NODnDNHI8wXlOSmbg/89cuo7Ti7/73D6BsQeM8z3zlgMs3Wh69Hy6e38LVC65fn/DpS5bWw7fc\nX/H4u+5luLMBAULTZi/ABFpjC4OxRix6bCnD5kZBDKsqfhUQVDdJnTKRJst1hU5EXK0cPkgJdEFC\nXDu0sbnSESUd33p00bltrMXCu9k2nRnKsRMSiDLXp2IU4lGKrCaokwzbm1LMYaPzBN/ifecjCQmD\nsQpbFuiilP6xTsToiSHh25aQx2SCd7jgCFk8O3aGtgg0b6o+wdfs3rrM7p07NK3mf/ifPUYp/u//\nh21sYYlaHEfs8TM89GP/Naff8yGe/eWP8czHfgGvFZv3PcSZh55i+vprXHz8MT756X/JyfP38/3/\n+U8x2tzGVINsntxB85lIlAL1bMLHf+7/yy/9v/4/qHZG72SPg5Do+8QjI8O9p4/x3/4/b4A2vPZg\ni9KG/+7/9pf55CdeXbGiY/SQohB3egXD0ZDBqE81KOkPCqp+wcbmiEG/otevGI8HjDYHlGVBr1/R\n61X0S4s1mj95z59FAf/slb+NTgHcEpZzomtw033CbEaol7jFhDjdh+kBZj6jMgpb5V468GM/+QkA\n/tH/+0Ps377N5Tde4XD3QPCZAKFWOA8+KerWsHQWHwyVDox6js0N2NrsM94as7lzjMHWDnY4IBmN\nrxvm0xl70wNuTw5pdu6Be9/L/+Un/jGXT9+ieBbKb03UMeJzliXJmozFGiVCUmUhsL1RXbJjqQrL\nxnjEztYO29vHOHZ8h83tLcYbY7a2jrGzc5xTp85y/NQJqn6flCLOybhLs1yyWMxo6wbXtDRtS9Ms\nmS/mzBYzZrMFi/mS+WKCbx1t41guF+wd7HHr9h129w+p6xrvRfQ8pnWCLLdbvkfv2qP/kJFxPv47\ne/o7GszvMsT1OHBXZ3XVSQ6VKWuBHn12QoJMEgp8ZUr6VV/myxqFLQ2lMhSFRZeygIJr2Wgb3HxC\n6VuGgwrl/cqk1JQldjhExZbgZiyuXcHPDxge38L0e9TzBSlBv9/LfaSsmIJsyqvAmJIwGkmIT1+C\n5FHKdg2FDJvmirRjaq7LnVWVLOzHHAQyDV1aiGrdn0kQW4cqrPS+ej2KMBTdUVcfOb/dCAiyyQcA\nTa9MoKSvEgJEDD4o2iCbeFmZrNdqSdoTO/3SlO18MqtWZahYsvx4d/BbKfUkOlp9iEJyiSEbxeYp\nfrEx6r57uxpyXs0gxvX5iD6hlIzsiM6pWcHrWun8+cAUMi+qs1wcSQQTktJ5xCXLhuk1izUFJSQc\n76QatSUxGTl/IZ+DkGReVosuqTiP+FyLyTqWIOSlRs+vHbyjrhfMF3O8D/mxkgAW1goxKZcI1lix\nFDKWrTOnKYdjYlvTGw4o+j1U1SNoKKsemkTbLIBNUgooirzEhAktmrSKcjDmnve8l+HJEzTXpmyE\nBW0y7Osel4shG+lIjzsTmqpeibGGgAhPhKAJIUETadpAXbccHkQCEyIyclKVJUp5eqXhqfc8zMX7\nTmXPTUUzn3M4meBcYPcnJhij+dSXXuP4iWNsbI7obxyj6ldYrSgJ2MKivUO5mriYEw93iXvXiHeu\nEe9chsUa3u2K+5R39dTppAYgKkJUuKBwwRCTISQl1W8KKJUwOonguToSCBDHlUgi+pZ4cB3zxrOo\ntlndV+vJavmfrnFiFVij6PVKxqMh4+GYU8dOceHiRS7ccw/nL5zlxKnTbG1tsbG5yWhjk95wQFn1\nxA+2KCiKEltm4+YO9UlRdHSDl5GRGIje49sG5z3eO5wP+Fa0l2MQRSUJiLvcvHWLF194ni984XO8\ndukyh5MZi3ohPIEkXQMf14IinWLe0TL17arQPzruPt6ZQXBmgHU+Zt1SEuglM/SyRuZaxulo0BTV\nC08QGMn2KXRJyxJcSyIQrcEOepjCgvfEekbfeiozxhSWuKgxKkrG1hsAidR63GzJ4tbN7PdWoVLE\nNx5dlBS9KidJMcevriJiFeCJUTQ5O5IBZMUS1n0tHTJc2nm75Y12Be1kGPcIHEnuKa5gyUTenJw0\n7CNSdVYVpikJvskjeiELAsjmFnxEKY/Smn4l/nnOxxx8FCEaQkqURtOrSmxZSbUV8vdVrXy2bJwL\nCWVVjoHruVEhWWQWospzXF7GNmJM+NblwClfWmS15HOIz2CRi2+H816slZIE9JjvUq1FxYSkV8tE\nWVlPzrVoJZ6T2iCkhLzpaWOyb6XPIvPyeUWdJpJSI8Ewxjy6EtA+Ebt+aermKDPSoZTox8Yk5Jts\nCqwj8l2yjFjMFW89n4o6kAJTaHGz0BpbFlnG1RBSkGBoxTFi4+QpxsdPsHjtZW689AJvvHaJka2o\nwwGkyGAwInjx9FwFs1V1nuFYLXN5J+97kDMPP8Abty9RlIEtlRiaghLF524cMHee8giLuqxKrC2J\nUeN9iwse71uUUlhl6FKOkBw+eGIo5PrGhvNPnOeD3/Y+tE28/tp1ql6fze0dbnzuyzz7+dc5+JE5\nSin+6d//NcpS0etbRhs9Rht9xhsDBqM+G5sjtra22NreYGNzxOjsw/TueZQhgfblz7P81C/R4ZeC\nAMia9jEzLqNUhi4qfA6GLmbfwiQJrdYi+G6LMnt7iipUx2WQsSaPDw2pVZTzXWxs6VQEYZXzolCU\nRjPsDzlxbIfTp05x/3338+RTT/Hw449z5sIZNre26fcqyrLEVr3M+7Koosizj0cz5e5Yw2hKGYzV\nGFtAygHRtRTW0O9eS+k8w9tZycWVN2TbOmbTQ27dusnrly7xlS9/meeee5ZLb1xid/cO09mMZe2E\naZ63ow6w6pZVfNOn+qPjrcc7JNWorqshFWB3RqOI7wqDL6veY44ECmFXrdVKEhRgBgWm9diYILS0\n9ZKldxRNw2Bnk6rXx8SECkEIAU2DUgrT6wOR1Nak5ZJkPdG3KBT9jRGmKMWBIUb6w/6K5q10Xmwg\nFYvWJH9kxcSQK8Xcd4syrgAmC32bjOdn0oNSxE5PEiSA5JaBVJm5f9PRP1fBF9G61IFkCnRRyBB/\nb0TwLcm1KL0me0hvLeWeZcmgbylNS9MkvHeY3BfRaEoDZSWqIsKohfv/1i8D8M0vbK5uWCVYZa5+\nMza8Iv+Q4Zdc6XWVbffLdCSTX91VHbO4G0/pKkbuft1VgpRJ5IqccXRD/bypl3WkN3Pk3Kv8uI4g\nJKSao8PfabVe0Yof+ew5/vQn71kTOxKIzmZmo+aA37GLNTrPhypCcPi2ZTaZ4FoHylBYI0QapLLF\n5k04Zm9nRBrM9itOP/QgB9evMt3fxdgKdeoUd+7c4Pjpk4w3dwitmPMac0RBKVf0SidJuoDxzjb3\nv/ebuPqpXyWlSL9nKFTi/nHBtC34p36POoUsv5tymyASvIzfpJS9Kk0lokpKhBBCZ8KLBwLDvuW9\nH34Xg3GPZ77wPNPDBtSMnZ1NHnrsXvb2ppK0hcjBQQNaYWhJaUqn7EJM2ELRHxYMhgUbO322t8dc\nvOcUH/r2DzI+/zjTL36GEGI23Q4QgswkKoVRiRAU3hlchCYommBoo0WrRJkdXCIJsXmq0LaS+cMs\nGBEjBN8QghfbqhixKWHz0i80VEZT9Sp2trc5f+48D9x7Hw88+CCPP/EkjzzxBCfOnabslZLgdIIj\nea0J3t8x67vmIW893hJ5OtUl8UUN0UlwNXm+czXbu7oRsRlZ6vcj49EGp06d4bHHn+SPfdf3cnh4\nyCuvvsCzX/oiLzz/FV55+VWuXrnG7v4Bs2Ujgg1pfRui8uhI+iof74+Od2YQLHuZIqV1LzGxZhdK\nayhbxXC3RZT0pSRrUyhC62nmc3RM2OzEEGIkNC3t9Vu46YSN41sMygKjNThPCNlGKbQk76BtUCpC\nUUolZDUajTaK5EQGypZCwwcl1YvOvoQ5kHXD3xC6ASPZ6Ltelc63ne9mL9eM2ZTSalF150d1bEpl\njgzuJ6keQhdgIsE1KG3l11YCtS4rTDWU8+tasSeC1XdWVCidqPqWUS+LOLcBU2qMiRTa0C8UvYGV\nKxP8Osh0n7G7zzKzZv35j3z3HMTeTB5ZBZocOFIyOUkwJAwxKWKeEYs5oMZ0ZE4xpVVv2WgwWmXm\npdDtUUGq4O5DHam0Vc40jg4555OZ1xd5jjE7QLDeAb5yYQZc40/95oWsvJITFjKRKtP4dYbbksrB\nNYmaSetrmuWS5XJBIGG1obQVSmVTZ60wqgAVRIlJV5gk5s3aFJx97DHq6Zzbb7xBUpG2ghPnL3Dh\n3vuw1rKCOjMbWD7gCo+n2xSr/oh7nvwmPre5xXJ6C2sStfbE2PLIiR22eyWz1otqS3I89+xnWLY1\nbTtAqwIoQTlZv/n0+OgJPsjS1yKkbYoetix49pmXeP65qzz5roe5ffsmn/zEMzz9LU/y+LsewBhR\nigndHIDKQgndZp8SHk07iRzcmXP1jRlK3eLlkze5974H4bjlxnSBc46yLFgTD3IgS4oQBCb1EXzQ\nuKTxaApAEdAm5tFVSYp0R2jKffvoI8472qahaWuSKVatHAWMez0+/PRT3PvYEzz1nvfwxJNPcd9D\nDzHc2UabAnX0niCtkZHci1+PY+VrdBc02f155B7qcs7cI04xoG2FKQd33WcrBfRVRdGRx5KsNWsx\nyWJjpOr1GY83OHP2LN/8zR9mcjjh0muv8JWvPMeXnvsSz3/lK1x6/Q1u3dlj2Tix10piIRDXb9j9\n/x8d+XhHWqZyQfNEbCJLgbGGnVaIfJZzOlIiqrz5CJoglUt0IgNmyaQJZWQYN3jcwSEL31BsD4VU\n4QLRCySGz+QAa9CVAa/wi4XUJ9ZgCpN7SR4z6NEZlKpuM6QbMQCjC9n4XEsnOCAtPwlm3feCrFoS\nszlqdnVYu3p0VSMymE+uopDAIhm6z6dE+phEWfsiZi03ly37EFIex/DrCxAVUYnodFFahkPN7l6k\nqVtKW4izeFJUhUCm66Iv8IEXtyDBz/yP78kkpExEMgIRa2WFcELENU1GTFNW+kh0frDJFsTQJ9ab\nNMsxhwvDrFZMljBtEsugaJRiGSLLxsmGqOJKiss3NYUGqxJVaehrKH2gMo7tUZ/jG33GfYdRt1Bm\nn8EwUpQJowU6UikKOSYErO6EpmWmVWmpFDryUmxagpch9P/yL38RiEQfxDsTQ0pOrpXR4JEZOKVQ\nyuKjW1Uq3ke8CywXc1zrxd1K6SPzZQpjSrFiUjJjWugiD3JLP3Fz5xQPf/gjnHzwIQ7v3EBVBfc9\n/l6USezfuUqMMitqEJSiM1nubjpxl/coZTh+8T5OPvggVz59k7iM1KXM7CYihdVs6oKbyhOB+cFt\nbl+/ROMKynKHohyTMChdgFJoa1HBSAWp5HzGmGiz9GFKjocevZd7HzjLzokhvoHZZMnWsSHGGrzP\n6rtR5Aa1UjIOlYLEjigISgwOayuMsSxmkRvXd9kcbDCZTfDeZea4mDqH6EkJXAtuaTJMmmiDxUVL\nzEYCggzI7G2HsIgTSe69erne3kPjAi6InJwkzAZtDMdOnuYv/Xd/lbMPPsDOqdOCPOX7U267nDTq\nDrFYa+2SEbG3BsA3H+oIMkJGo2I+/2UmDr6pWlPr9wPuHnFbBd+OCyC/0xQUZcVgMObkqTO865ve\ny3fducUbb1ziy19+ji988VmeefYZXrt0idl8QQgRH458pC7v+irf4g/b8XVINfnCrDLvjv3WVRQ5\nEGSG4krH8kj1oZQsyI5Yo9J6U1EqoVJYjYKLYUwiLud4tRQoQWmUdySXB+OzoLaQLDxxMcPohDIS\nrDqmojZ5kwy56tOpK2VzlpxtYsqeQJIxoTvWFioHp2x22lVNKkGUbDGuRlBYz/vl7x4zaxMSKiYR\nRF+XNnIeg/QQOscJtEEXJdobYlSrijuszHklQIxGhtu7nnrpGA6kKjYaBqWirIpV5nrUqmd1A2fi\niMo2TElB9B5XLwmhRWXYM/kopJ2QCGqI8udo2pPc2Y3c3mu4OVswS5HW9piFAqctQVt0VUGp8UnR\nuoBWVshTxhN9g0LgMd0GqGeo1DCczdjeX7Jp4fR4m1OjM/j6gHJwi36/obCAkl5qChGsxlpR34zB\no6JGiXuWJBvGoEI3eJ4z/RxkpFfHKmNXCIMw820kWUuJkDzeN7hmSVMvBB7XGqMSWnUC7SI6oZXJ\nTFmF1Tq7RNhM3tEMN0UpyQ4KetWAY6fPsVwcsJxv0B+MRUwgBJL2uTK5e5ynI/psnjjGxSef4Prn\nfwPvE60KNG3Dat5QSaWrreX7fvhHmC1+npdffJ3Dg0tEEtaWjDfOUPUuEoJH52QUEwlB3Cl88Czm\nDTvH+wwHI0wBx45v8dR7H+CNS9fw3mOsrCEfsqtK0oTgCDGgEcgzRrkXhHkuIumNC7zxxg0efnAb\nrF0TsJI8PoRAcBAbg3PSF3cJmqRoU3abyeiDygIQxpZoW4gvaVSQ/SHluZFoevS272V44l6OPfgE\n5dY/Q9trlONNjl24lybAjas3cN7TNi3aaMoyw6RKUfYKiqqHtYXMc2qDMTYjAG+n3fzWo4tnHWRP\n1hdeBb6viriu9aOPBteV2cBRrkZm+JukGZgR5/s9Tp8+wxNPvIvv+I7v4cWXnudzn/8Mn/zN3+SF\nF19md3+C954YFSG9+f3/kLFS33S8Iz9Esp5hXI2rpvVpy5uBQqqSt8BtMUqvIkmfRBtDURQYILWW\njiihOwg2N8ylrycejGghM6QoYVMIB0ZgEO8xZq2A4ptWgl2XkWVfwqRUZi0Kq1JYfZ3KTIaqOqHE\nFXTh1o/X3S5qIARxt5ByOTfAhQwjAtkBos/nRNPNKSq6rC8HTp9J0sZiCiuEjqZAa786zxCkB2oV\nhe4xGJRYU7NYJraDZ1BGNgrDuDRYKxUAUWVN2Q4qzQSoVQYsAdg7R2iFHZqiJjoxbk1J9MdDPI6L\n93Fn0uPynUP2loml6bMYnmOZDEFpImDLEkviwXed4eTpbS69vMtLz10npERRaU6fO8b8YMl0suTE\n2REkw+2rd2jrhimGWVhwfb7PG9MDjhVw74kTnPI7tM1tBsM7lHaJsZLQhKRQmR+jQq5QQs6YFWir\nSNFmo+J8m+ekSIv1StZa9at+akqsROtTEpNf72qaZo5zHpEm19kdojiyuBXaWGHJaoXtnF+QeyIE\ngc3LqmK0uU1wnhg95WBANRhQFJ3TRBaaz9XgGoLLzYkUqQZDTj/0MKPjY+7sT3Eh0XqXoeAu4ZL7\n9cI993H63APcuV2J00VzyKCf+OYPv4/B4Cwvv3ydg4MZo1GPrRNDdu9MiSHRH/TwbWQ4HFLXDXXT\nsDUeslxMuHN7l3vuP5f7k7KOk5J+fQjyvYwyqKDzdwmUZR9T9kBFonfcuXmAMiXVaBOpuiBEYVj6\nJtAsLKG1hKiIRNqocdHKNV+xSEXgQxudA5MhaUUbA64JzJxjz0cON87TXjhLHO5wK8LVGg7qFhcC\newf7/LNf+Cd0wv0ueLxrVoQohUIbjbWGwlhKU1JVPcajTTY3d9ja3mK0ucVoY4Nef0BRlBRlibFr\nKcS7IX7RmlV5VpuvE0RXG+uRP7rtoAvAKbcihJgQu1+Kjq+C0hhsWTIebXLmzBne/e53893f9X18\n7rOf5hO/+u947vnnub27x7J2hJDWcnF/mKMh74RUo4BOAR+DODvIrWry7NRK25MOTnzTCyipqTrY\nyfZ7FAlivQAtAUCCn1xkqzVWGwzZuSB7++myyBUbKGtJyRNTEPFmI5m1b2RT0VlKjoRoi3bGuCBM\nU0WuiMJazDoZCWjR5821LzNcyOfv0lQRKDgScKzAtypXmiLmH9HZQ3K1wSny5hczlJrQKcomkzSm\nqEi9Dj5LqwpGBAs8yViqXsGwn5gvPM0y0rOaE73IqECkx1IiaUVciWt3SYSY6HZ9kejaTLrI3ylq\nkXwLiZi2aPwpDqYnuHbguONr9tOYeX/MHItPgY3tHuN+xYWHTzDeGuCW8Mj7z0FQ2PGIvUPN7u07\nnDrX44d+4v1cf33GK8/e5r3ffi+DYclv/tLz3Lq8x/6dOSEMWc4rGr/J3M24dv0G98zGPHbyXkI4\nSX9wjcLuYguPLRI+OFSSXo/JyZhWRfa5BJ2sJDl5HXbu7Mms9idIMmcoIg0JRXedpcL3/ugMZ4Zo\nlcHoTuA6oVQmX5kqUxYlAes8Qo1VqCAQ32Awpm1qYttSjsaUtof3rdgXUeQ3DrI2U4egyPiAIAQF\nOxfuZeP0Ga7vzQgpEaJCm87JJVdcJHq9HhubY2zZI5mScTXi/IWTfOQ7v4vjp3Z4/I1dXn/tOqNh\nn/P3H+PqG7chGjZ2xgyGFaPxiPFYMej38iZvGG9usLG1kf0TIaGlPZEDsRDNIHZrThUUdoDWFu8b\nggvs3jlkvmxItjPHlj3Fx0TrwHuVCU4yJeOSwSXTGb6QVCApDzrhiUx8w2I2oW0XTJPmTupxm5KZ\nHaEGG6RFJC53wYjfahscMUbqpubSG6/kfrEi4FeszphhTaWlCrTGZtstRVn0KEyFsYbSFIwGY3a2\njrO1ucOxYyfYOnaM4XiD4XBEb9DHFFaEys1qQPt3dhx5jY6zkMgtENb96C55EJs3w6jcYDAYcOzY\nSR566BG+5Vu/nU9/9pN84lc/wTPPfonrN26xWDaCGPwhh1DfEWTaQU9KCai52hCQvpvKVj0CeKa7\nsoyub6dUAbTEFHF1S2ky5p9HGbS2KJNIvhG5NA8htWgts2kKI/5oxghEVlrizK+EtBWQXMQvG9Fm\nVKJRGepl/jJG5v+MwZRl1ufMN28nWJi/q8qGo2iNjlIRdHJx0kvIPoMr6NeIvmbux2lTrEdUMhEn\n7yIoWwjk64X8k2IXNBXGlpiiItqSlaZoDqDeCZu2LAyDQcF0GljWilGp2Kwcg15Pqp+QjVW1Xm2S\nSnc93AwrI1JZRGH+Rq8IPuJbRYqnmNUXuHFQ8MbelIkeMi02mFGhq+zCEeDd3/oQKmme/OA9VH3D\n1ddmHNxp2Dk+4PjJEePtiv09w8Pvv0DZKzl1dpPQKkKTMGPNsdObPPLes9x8/ZDJwZLXX7oGKTG9\ns8A1J3i13mN6eZd7x33Ob9/LaLBB0b9CXy8xSSBwSZbA2CPOJCFX3R2nPpEbNWnFJu1ExbUuSFFh\ntDR1Y3JAS4pCMgnBZ8hS7gVtzWpks6u6ZQkFNEXW7c3OLsoSkiOR0NpSFF3CF0WLtyjF+d01FP2B\nrKtufElunFWw6doVm2fOsXX2Av6FVzFe5+DcWXZ1N1zCGs3G1oiyLHBLqYQXS8+d3Qln7jnFw0/e\nw5PveRitFW1bc++DF9nc2CTGwBtvXOHalZvce/9FZrMZr770OlXV46FH76U3KKl6JQMXOXt2i/39\nqYgkGMXe3oyQP6dWikF/QH/UZ97Mads5sXVMJzOWy5ZyfHyVnMYQZQ6vIScxKcPWWvqG2dVC6YQu\nAqH0HKjA/kzTxCmzgyXLytL0N3H9HuXmMbQtSTGhXS05sY+EEHFeEhznW/bv3JY1k4NJB/smEiaT\n8KyxFLaisJayLIjB0eq0In8dzCZc27uGNZZ+0WNjtMnW5g5bWztsbe4wGm+wsbHJeGOTXn9AbzDA\nlO9EPvoojvlVAmk3LnX0edrK5FuKqNUoj14VFZUxFNayMR5zzz338YH3f4jf/ORv8IlP/Cq/9YUv\ncvXGLdyqwfimj/SH5HhnLFONODJI+kx3ijrn+Yj03yLxbr/E3KuLnfRYxr+1UagQsmyYIWW6vhA9\npNclr5m5LDphjGT54rokdHeBHT2xlKw9hiDeaJmwEuqWUC+JoesXVuiqIvX6Im6dnR80tpu5z5/d\nrHqAZGp/CoHQOFgNsq/PUUqKpDXJIDNRJAjZVf4o51khxAYdQTlS8PLdE6tBeWVtVldRUnAkSNER\nlUBy1hoGg4qUGuYLx8Bq+lZRlXr16VWGTe86VL4+PuUBYdmAfeuIAULo0zZn2Ts8zht3PNfbml3V\np9Yb1I1G2cTjj52kGg948ZnrRKU4e3GT2WSJskOKoeXa1QN8CNStY76YE2LkYLfhk//2Ev2hZTAo\n0KZEFYqNY31O3bPFifNb3Lp8yOmLGwwHFS8/d4OvfPEydTHgZjtjOttjEloePX6WcRrR1C8yGnpU\nT4Ka8xFtIzpF6SMDd830dVcphpW1k9YmoxbQERk6FmyKgeBbsXiKOjufKCHPIMHl7pfuEj4FyqK0\nXffcu1YCQfpPtr/6WVFVNIsZ3rXEELJYQBAjXdUlnN3+KKNCg+0TbJy7AL2Ksm4prMp+pN06k/+0\nhvHGiE/8/L/g8NjB6pP+E/7217rZ5Xj46z+EM/B3f+5/fMuPN3a3+e4/+eOcOXOS++67yHy54LOf\nfoa2bUgpMlu2HBzOOb59XHqLue8evIcoSEmMEKPCR01IGm0DgypQVIGEYy8E5gFmPlGHgAO0GVLo\nIb2iT4oOWpdbNU6SoCQJoPeeRCJ4z2w+ofNG1UDskC8jBskdGzcEIS0lZXHOAd3sqMzUFkVBsiIO\nMG1mLPZqbh7cwKqCquozGgwYDcaMR1ts7xxne2ub7Z3jDDY3cqK/WnxvfxytLr5mlbluiIgLj6Yz\nuyYhEpWKXPFrNq3lkUcf48y5c7z7Pe/hk5/8DT72K7/CF77wLIeTqSg3pXU++YclKL4z6bakiCkQ\n090jFV211G0uKskQ9NGn530mQ4R5sF4rTISkk9hDqexObi0Wg9IRTMTqbktQOVAUYhQ66EFPofQB\nnS6jNprYdD1PjatbQrMgLGeZzSkB0fR6xKbB9PuoqhT3dRMzgUegHGEuyoJKMRGdwy9rYcd2FkUK\nOl3X4Nu8Vo3Q2FcZnpybDoYR2naeXzIWFQPJB2JooCVXrwadm/pRiZqKTHOmnP2X9Mc9qt6M+TKy\nNRL4qkPaEhoVYOXsgWymIWalDB8IzpOCnPsYwPk+bXMfV28OeeNgyb7Z5E5RcegS2zsDHn38HK+9\ntEdQmosPHKfQitFQbLhe+NJNppPAdLbgzs09CltQLz0Hu1OCj3zu119BGUVRaba2Bxw7PqTslZSF\n4XAy49TZLWxhePCp05SFpbdRYCrNGy9M2Lu9y9yWvNJOCHtzHhpustl/gr32OTa3D+lVAjWr1mO0\noqgK6SEi8PWqsxZzv8tY6XdbI0maDzJyoSSwCAQl84crk+OOkGTy+o4dZCrtATn3QmpICiEREQU+\nlYibSWdkA2Ik8bMFiUjwrfTfdIUkV0fmEYGjEdjYgvH5+zDjMT13C6MFPpYAnBngUVoKm9tjDo8d\nrJPT/wiHOqb4Mz/1n7GxMaQ/LHn1ldd46fmXmR+2xBSo68iN6xNOP7hF6ggwUYhj2Y6biCIoSKWn\nLCI9G/AkZiEyjYlpqZn2FI01eKNJXlM1mo1+hU/g6yUheOlrppDZrhEXHN63uUfsmS4nWF0QUkAp\nqEqBOKUnGhE1JyAzi23UVKbPcDhiPN5iNBozGAwZjAZUvYqqqiiqgs66QqysHN61eOc4mO7x+vVX\nUTExHkoleebUBU6fO8dwa4wt8mjY1zrBR3Lrt578t/xFAmPKhQtihE6S4J2UpkKxvbnNk088xbmz\nZ3niiSf4N//m3/Cxf/NvuPT6VRrn8pzq3ajfH+TjnQ3md3BSys7m5DAVTSYmBJmdW6nYHHkqK8RK\nMi4vbhUyG2igABsjqcvuYyCFlqgcqiqkT6kF9tPGrPzpkmsxRUk5GEGYC8klK0CUvZ403PsDil5F\nbBshj/iGMG+JbUvwDuNFbimVkWQTymaoLQHJCX3ce9xijpvPJdgoDa1UIF3QCXWbNzGBWZVVAuVm\nU+IV9NxR3gVYFcJNWkKSytYv5whRY+22obUhYWW+P0SSDhRFoiw1k4lhPvfERrOtERpeiGJoi1q9\nbwwytB1dDsBR5K9USjjXY7G8h+u3Nrg0aZmMznBYbpCInB5WbBzb4JH3XqA3HHDr+iH9YcU3fdt9\nfPlzN/jSF15lf2/O3u192nzjF2VFCOt5wLgUSr02hvm05drre2ht0QUMhz3O37PNo+86z2ijx6xe\nMjlw3PfoOU6dOsHN65s891uXqWc9Xg81y4MJT7DFTv+buHPn82ztTBj3NcE3lIVsYIWWZEJ3BKNc\nwUVlpGruNp0QV24jRmtiUJCCEI2clwROhXVQixn2V+tbJimFwqJV95+wXOmKtZU1UhYqUBpiYDnZ\nxw4EJnVNTXCOqt+pPHXVXlwjDJm4pbVl4+x97GztoGe3QEdcEKZpOgKx+rZlc2PjHd3a3+jj3U8/\nimsdrm0Zbwyo+mXGh0pIils3DzFP3o8yBcm1tM2ctlkKoxlFLBLKBoyNOK+YNHDoNZMyMe9BXUTq\nBL5R4BVlb4CthsQEs9kcFxq8dwKRtjV1XeMaUeRpm5YUE6513L56BwyE0FAWluPHTlP2NzFKU/Ur\nNqoxJ4+f4czpc1y4cA8nTp1ic3ubwWhIWVVYW2ILKyNgWkhV3UiXEJzzTGQUNGYyPeQzn/11vvz8\nl2ivvEpwLaPBJlsb21w4cx8PPvQIp86dYzAeSXBcjWAcPdJdf3z9vuS6tSXzk6V8uBiBICIFGQk7\nduw4733P01y4cA/vfs/7+Pl/9S/45Kc+w63dfZwLecb3D/7xjgJiUik7sEOn+icwk87RTq8c2lMe\n2O2gntSx9yAvlogqCmwxwFQFJEVYLkntQthmzqGcvLYeb2BPnsYMByTXkiYHpP3bsJiRTEAVJbrs\nE5ZL0GJKq6yhHGXtyByJk3fExuMXS/xiQXBZ3Nk51CAII7EUXz5VWOlXIptQbB1h2RC9zFcqIxCa\nSh2RIRFcDn5kH7bcH1U6onTMupgZZiaCFWhNZyWd4Gqp2HyLZ0kxGOVza9CoPMbBiokoWoua/X3D\n/mGgVEkqk5DAp9V57ijabetRmMzVkX5piJ7oLHV9gWs3R1w6nDPZOM0uY2rX8u4PX+DJp++lmSdc\nE3jfd9zD7s05d+7UfOrXXuf1V28xPRRLq+B8Vh2R7xeyt2CKAiGn2ABGBBh8i9aJUDuWsyWzyYJb\n1yc88tQZtk4O2bu+5NF3nUFZ2H+xISRBDmo94Ir3qOmUJxjTt49xuP8MJi4oy0TRq/AuQXIUvVKS\np279IpAROpNgkvgPRpNWsmk6k2YSWuz2coVBVCgVSckRY0M6GhDz87ogKTDpOkBGWrqqr4Npo/fs\nXbnE6ce+CW0LFpN9qsWM/ngHsqA5plP/SXkd5TfUiuPHTnDf9oA7N2WrEyGkI5tVgnpyyHA4fNt7\n+Rd/8Rf5C3/hLxBC4Cd/8if5K3/lr9z1++eff56f+Imf4POf/zx/7a/9Nf7iX/yLq9/de++9jMdj\njDFYa/nsZz/7ltcPIWCtoSyHjDc2MbZPUfTR2VNzd29GEy3KFsS2oXWONnicSsRBJFhovGK20Bw2\nMDMwHUYOTGIREt5LcpyAfjmg6o+pm5b5Yk+YsXXNsq5payeB0Aexx7TgXUBmHR13rt9Bmaz/Ox5h\nouH8zj3cc/FBHnroEe574D5OnT/DYDykrHrCjLc5UX1HBJmj4UNRlCUbG1u0bcP+wR7NYsauucMV\nU/DSq8/z6c//Gveev59HHn2CcxfvZfvYcQajkUCcR/gNR15y/W/15rd7+xJSAnaSvVIho2wKbH4P\noy1VVbG1tcODD9zPuz7+b/nFX/wlvvLCSxxO5isB/D/IxztWqukMY0PK4wbIr9SqD5hhphVU18FV\n3eyiZCbKFJjCClnGFuiqh1KIGk3wMp+UEBYdiWpzjN7YJE4PYbIrDNAQUTpl+dT14L3Wmqrfp+z3\npCcThP6dvATKYmOErkra2QFhWROieA6azKJVKaJVyiRpkwN8yMPhSCXXVYmqg4alshBdylwaBC8b\nYydObfSK9NGp1igtMDChRIVIDI18t7YhFHb1GK1VFsmWoWMZpC4ZDCyexO7MMixF/T55TzA+X6t1\n/1MhKi7Rt1l8QBNjQdOe49ruBq9PGvaqbSZqTNCRY8eGnL3nONPDFluWuBh4/rlr3HjjkOefuc50\ntiDEQAgBncRw1RpDIGKUxscoPV+jCMoTk5IesxNoLKXch0HhAty6ecDkYEFZWU6d3aTX11y7NOXm\n1UOOHe9TFBssFw31rOD64YR0OOVdOyeo3CPsHT7HxmiCLrK4AxbTGnR5lNknBCuVq7bkowxyk/O5\nTLQR9ZUAmb3cqRQmkfgg6fx78npOfgX0xSTzQcoUGb6M2d4sqzqlRMz0/luvvMDx+x5G64LgPMHl\ne0ennESuPSq7NEo+paI/HjPe2mS/MEQSzvuc/KzvusNbN9m4/5G33M0hBP78n//zfOxjH+P8+fM8\n/fTT/PAP/zCPP/746jE7Ozv8jb/xN/i5n/u5t90RPv7xj3P8+PG3/R3AfD6nV5X0+30m0wXT+VJQ\nES00sdmk5nDq0LYgKjicTZgu5jgbqT0sppppo1gkmBSJSR/2U2RZ53OspT9e9XokVbC3d8h8vqBu\nAm3raV0k+CAEPECrhNXinBHCukBqa09RGopBRWEH3HPqYf63/9Wf5YFHH2a8tYmtSozt1tA7CYBv\nPu5+jrEWawsm00Om04OcRBpgwVTB/nSPG7vX+dJXfouzpy9w//0Pc/8Dj3DuwkW2jh3DFuW67XLX\nS7+5wfem6Hg0KzzyA2UsJs+NpzwepJC9RY8UDz3wMNvb2zz04IP8wr/+BT7x7z/JlWs3xVXmP+Bs\n/H45vn6FmJDNlHjkRBzlvyVM1+dDI7qI3Q18BD7IDNSoBPoLoSYsW/R8Ak1LdI0IffuAax0+NOiD\nQ8qDfahr0vXLpPkByTUyHhCjBJ3SENs8+2MNyhbongzSJgep8aQgqhkoha4qSrWDi4eEtia2tfR1\nYhTn9WwmTNGT75ADt/T6sru4vTsJE0WLDmsVKbgQGqLLVTMCnaAUznlMUWBMIYvQRnSWE4tkt/u2\n6V6Yoj8kzheEINCjSgW2sPQHFRSRwzkkE4gpi14HkUMTSDZl4oIoz3QzVjFp3vOP/y0AD3z6HN6U\nuCS2UKPNHikp/lWpsYW4JNTLlvmslf7jkYSng3W7DTwBahWEs3tj7ql0P09H1oZkrXIuq15BWdjV\na1Q9S0pQllKtBx9wraetPaFtKULkB371m/mun32Aw/QstnCUhSQ2TVREVawukjZ6NUojtMPcl8vk\nI60NSoXMbpSKboVOKdaYP52fZsxs0nXFkFCkjhCVkxGlTSaBkccVJKmZ3b7Gcvc25c42aqVVmzI8\nHrPikeleJqMt8nmL/ojBiTOYsiQmR+vrlXi6fODEbPcWp5/6prfcyp/+9Kd58MEHuf/++wH48R//\ncf75P//ndwXEkydPcvLkSX7+53/+q+8JX+MwWuN94I3L13j+K5eZz8WZPsZEiIHDyYI7uzN0UeKS\n4tWrt9nbdxwuYFlrlkEx15FplbijAodLcFEQEBeh9UKQK11DOlzS1p62DaLaE1cp/CosqCQScG2W\nFcynKKvlKVKEjf4W3/zBb+Ghxx5hY3sTU5aZoPUfEgjf/tBKE7zn8GCP5WJJSkmk62BFLnKuYbmc\ncWe2y8uXX+TEM5/i3osP8vBDT3Hf/Q9y6txZTFmsWzCrb/umv99dnH6VQ9anjPYEUIWctyD3sjGG\nEydO8sEPfITTp89yzz338S9//l/z5edfom09f1Brxa8dELuMJHX+gazKdFku3aYAkoV3zgarF5D/\nyz0OFJKpl5ZUt6T5HFIQfUurMWUfmxKLmaWZeBazJeWNawxGA1hMwDfyWbRkOMnqPFPYyTpJNp+M\nDEybfMF9hDBtSK3DxEQxGKDUJm5q8O2SWC/wnQh36qN7Jdp6gW1NJvO4FuVlHjAGmU3qDm0KlEki\n2OsjKUogjHk4PHWC3Snh2yVaQ8q9JlWIQqPu+g++Ifo2izFrdNXDtB6TWmISuyVxvigoyyXTGLEg\n5se5aR4TeNzqPWM32KwUvg04t9ZQDNrglcCZ/V5J2S+YT1q0VdRLR710tK3Hu7UoQ/e/Wgn7t0t6\nJCHirsfJaM76p0fhJpXXmFLQ6xVsbPWF+asUtjB372wxUc8dSrWkyvL6qZf5mP4cf/xf/xSHk1tY\ne5mdnT4heSwFzsVVcLWFXZnmpnyuIKC6da0UUStxNemiEF0/KEn/MGpU7JCBHM6Vyb2jREx5drWw\n69ikJXnQyq42phgDzeEes+tXOH78GCkFnBMWpqLIyUVX4UdWykmZ6m97A0bHzmDLith4XFzPT3bn\nfbF7i7Ks3nI7X716lQsXLqz+ff78eT71qU+95XFf7VBK8b3f+70opfipn/op/tyf+3NvecwXvvgC\nhwczXn7pOq+9sotrOqTI4xvP/n7Dq8++QPN9c9qm5fVrnoVP1EuNS7CsInsmctsHJqK7gYuJRUzU\n2RHDaEW5XNLLaJIIK5D1c/Ouk3OeTFKnVLBUWVgykYf9LZvD43zLR/4Y7/vwB+kPepK4yOp+x+fl\nnZ47UqRZLmiaJYqUyVgyXhVCR1jUqBjwoWUyP+Da7Wt85cUvc/HMRR555EmefPf7OHX2LDobpqtV\nQfhVIt9XiVtdQooSlE0rRdIK5SPKi+5tr6ywGwUPP/QYm5s7nDlzhn/ysz/Hb3zysyzr+ht6fn6v\nHF87IKZucWXroJTymIBa1YiiAkMerwh3Pz2JIHbIvnqEKDJr3pF8i4oRUxiqQV8qKGNEvi0FUBuE\ntiZFR3ILVKHBi3ENWnoyotKWB/Bzj0IkvoDSCqvaFFgg1Et8vSS1CkZjzHAo32PiCG5JbGs8GpNf\nC6Oz0r1FlxHjLLGVSkOlQIot3eapldhjKQS+RRtM1BgdpVfXJQkpiiVNuxQvQW0wZYUu7CqgR7Ij\nRooic2fEbiYEoZDHuEBRUJSWqp+Y0lDI4KFsmtHTOk88EoSDa1FoQvB436N153n88xdZhsgP/uR/\nw506kSw8+K4zfOcPvos7l+booea3PvMGr7x4jagCITUoDMF7jAk8+U1neffT91NYR+ta6mXk9deu\nc+WNA+ql49SpkwwHY15/7TbThVQIKkFZWorKsLk54ML5Lc7et8PxM5ucefA4O4NNvEtcfWnK62/c\nYbZocaFFEdjZ6HPi2IDl/pKwCPwff+CnqO2SKX365ePs7d/BFjO2xn0KnTr0MSMHGqMKVPJ0s6fd\nfFYiCgOVTmSbbL8FhHxBuqcojU5rqLzzAk1J4YODFNDlET3SfNlDchhl6UQf2vkhyzvXSekp2nqB\nioroHKko6PruXdXZSXQpRDjBFgX9rePoosLXU0LqZiXXUGua7uF9+9bb+W2ogu+sHybHr//6r3P2\n7Flu3brF93zP9/Doo4/ybd/2bXc95h/9g39Hs1zSNIkQChnzgzzcDv04oX7xN1ju7+Fbz25d0kSF\ni4mmjBxquNFEDhuoQ6KJ0MREm1a5OClBEcHny+MS+JwIGgXFEQBAkUObPhIyFFRVyT3nL/ID3/9D\nfN8P/jCnz57FmKM2TnwjC0QAnPcsFgvqtsZojTFi65aS7xzp5FxpnfkPihBmLOsld/av88KlL/HM\ns5/jve/6AE++771snzix6v/dBVmtIIWvdhxBFFArkwYZ15BtRHI5i1LiRnP69Gm+6zu/h+MnTrK1\ntcGv/NtPMJnOV2vqD0q9+I6UahJCjQ6ppXOLAEjJi15l6nKxRFRhNY4gD5LHyzk3orwyXxKjQ9Op\nQ3ihiyslcOp8Trt3QPSOYHokO4QQpJpSmtQuiW0j8kUalBXiBdoKo7Jt0bZElyJ5pkqLrkrSXGCL\n2HrMsI8ZDiiCh0nEx5YUHNE1pKWMfKiOpq9FSNqUFbRJyBbOr1ZwcEuSUGExOrvO61IIG9piUsgb\nj4aoia0nmUAyJSDyU6J9WYqwt27z+ZVqwVYlwRlCA94nCA6jI1URaVTNNNrMeFS0zhEMWX1G8LrQ\nio2RC4Fkz3A4O0HtPE4XHHqDCzWgePX5a5hSce+jJ9m7tuBgfpvxOYcuPdo6jEm0tUPT8sf+xJM8\n9sh9uLrBt55y0OPOjV12b++ijKW0lqQVL37Z8pVnD6iKTTY3e5y5uM3Z+45z4uI2g40eLiT29pZc\nPWy5dHCbokxURpHqGa997hLT6Zxer+BGr+D4qS22jm+gtKENEa8Vr3vHY/1TWPco+/u/RVE4jGkp\nEdGGoIRRq7VGW4FhxbSlY36SzYNXpShJyeysyJMhhCWtSIhoeMbi6FCTmKXKlLbiYNAp40SRBuxE\nEkJs8a7GL6Ysbl3GzScMRpsspoe0TU3R7yr3LJqYuvsnmzZrhS5K+ts72P6QdraLT+otgc66JZO9\n3bfcyufPn+fy5curf1+5coWzZ89+3S2gO7rHnjx5kh/90R/l05/+9FsC4rXLu9JxqCzGiGKNBgqb\n2CynnAs3iFdepKkdIcHcSOW30ImDlLixSExaqH3CJ3CsZcUANAq5a6BNEgy7XxcKKqOwqtM9XckX\n3xXctILjx7d5+ukP8uHv+GOcPn8ea0vRso2iMKViJ+ad18VvI3F4uyOlyGI2Z+/2Lk1YUvZ6ObE1\nuU8tbRXRXVbZNFsRlENraJxiVi84mEx57fIrfPG5z/L0N3+Ehx55nO0TJyjL8k2BvINP3xqq1hjf\nek5xHURD3ouEKa+UqPz0eiXW7vD0+97HYNBnMBzwsY99nNt39olZrvAPQlD8uqQaabWKFmm2aFh/\n8buEpNVKqSM/VZ4fEeWPKHqlJYiKgncQnPTMGtC6QFuNjw58kEFoLd7sBE9smiweXUjgCm0W+84e\ne0o+T4oRP5esW/cL7LAnNkvZgDN6Gb/QUXpMpuqT+pHUzIl4oq/ROpFcQWwLqJRIzhUWXZaC97e1\n9OW6Csx7lNXIeIqIHCtboHQp5yt09kcKa7QMfTsniz8AVYWpRIJL2Qod1sQNpQyq6GGqAcYHTAh5\nyNZSWZlra1MkxkgIjrlfAiWFKulGH5pmIaxJNnHNeS7dOsQpjU+aJnmpULXCqcjLr73BrcXrjE8a\nTjwK1UBjbYExfYyRgLKYz9if32I2P4GvHa13bPQsplB433D+nuO0yxbXOB5+4hz9Xsm5+x9CD0c0\nKeCt4uq0xh0uKFTC7bbcvjzj2tU9dC9x9tw2Fy9sMB4+yLVX7hCTYm93zovPXWdxeJnYJqYfEULU\npVliUHnu6T/IdHGbyfQShTGossiC7FmgXVsUWjad3NcFRKz9yI4rikSr058HtCXoxGzW2i3vEAJa\nOyDP2Bqbg272N0TlMY8k7OOkiD7ilzWHL3+FO5//FBuPPEV/tIki5D6n3E8roYBuN08rMJDeeINq\nuMly1wpqQFyLuSdIixl7V9eBrzuefvppXnrpJV577TXOnTvHP/yH/5Cf+Zmf+dpbQD7m8zkxRsbj\nMfP5nF/+5V/mr/7Vv/qWx4XgiSGhrRHinIZxXzPQh+zMXkfffJndvRk+ywi3OnGgErspcX0ZmbRd\nNyy7NN4VDKFE+tNNWvvqFApKLYGwMFlHNq4jZSvg1OoyG2N44rHH+eYPfYTjp0/na+lovcD1JmWI\nWsljVWfVBav7+B0f+boFH5geHrK7u0vjlvT6fWILg0EfYwtRW8rrJPog7hxdwp+FxbVSBD+naWsO\nZ/u8+sZLPP7Qu3jPez/Ag488JuSbsrj7/Y9+1C7orYJkLqEzCWzNWk2rmcgYJfE3WqHLgo3xJt/0\nrndTVRWD4ZBf/Ncf49q1m4ScKP5+D4rvaDA/5qZvt5lAZ+mUobrMJE2dmPbRV8hwqiTVjspWFIWF\nZgF4iEHGJkzeqFJAV5bKboDvYbQjLhdEL47l2pbo3oBYJ0KoWbmkrxJ2cWNPjRfVnLLIWqj5AbEj\nmQjjVZUlpi/QmW9nAqGFltAUqLIvzFgNaI0pixzgnMC63ZEiyUNKgUQgKYNSTjbhFUEjL75sO0TK\n4xTUKBeFmGOsuDUUPTrMTQTRS7QtsbYgpSy9phJVqbEG2pikf6sM0RgRAu9VmUwSMb0CHUuCv8jN\nWyV36hlRFWJ1hAar0GVg8yIMT3uSnTL3jv0binqa8E2SvqkpMMbQNjMuffmAww8tefDBc8QUONg7\n4Pb1a8ync1rXcPL0KcqqZDqf0rgDpvs3qK/3ePnlOxzMIoUtGG9XnLow4vTpTc7fM6CZzti/MyUO\nlvhhybGdMf4wUNeBUEf29Yw7kzm+cTnYwdQnLqnEsaKkZx9gcvAGg7KlX/bXmbJSaKtJAZRKKCcw\nY1Iqw+MpixlkCa8UVntHzLJhQuTyxOTojIpdcDkRgtY7Km1zT7gjGSVUDo7yMyPrvVmynE5YvPAV\nNu59BNMvsvi93GdKByHk5OAon6Xb2RTVaJtqtCmjI9Ef2eBk247zA2a3brz1ZreWv/k3/ybf933f\nRwiBP/Nn/gxPPPEEf/tvi4LNT//0T3Pjxg3e//73M5lM0Frz1//6X+fLX/4yd+7c4Ud/9EcB8N7z\np//0n+b7v//73/IezteoJC4gvbLk9Ok+QzXF3LxEvPEyewdTDpuUA13i2ixyI0R2fWLuwWqFVYkm\nKsKR76WQzUoDHplZBLAKelZR6fzLJESuUd/ifGDZJlJIR03p6Pf7vO/pD3PqwnkSCu8D3geMCSxD\nxGhPUjJCVpVlvpckuSHvJW8pvFLKGriB4MXWK0ZBvlJMzOdzbty4wXwyp21bolcQDlnO5xhbUlQF\nZSlCIUqnbLYuohxaW4wJGCXEPKMNITjqdsnB9IBXXn+Rxx56kqeeej/3P/wI2yeOYWy3tXfrpoM2\ncy3XBcB1E3J1frpEnyRQdyRAMlmZp2SoDY89+gT/5Z/qsbWxyc/9i3/Fa6+9gXOe3+/HO2KZxkzN\nTVnVPv941byWgBRydp3ufnI+uSolTAqURHT2LITOjNWRWoeKDqzBFgUMDIUaYJoJabqUgBghWIfp\nj6Hq5eCmRJOz6xkZIxJtKhFDS3Re+nRlKVVYEL+06FqMFm1T3SvQsUKHNsu/QXKR1DpSYXPVm5Xk\nrSjJxLhm08YUsnYgiEQaoMTWSoqEte6p1gVYTwpkCTWXZcUSRTWSTTBXsyCbNBr5/G1PBBKMJmlN\nWRiK7NaQrMEn0LHAxgqTZ+2S1gwHG9RNxXJ5hit7M2Z2SMjUAQpDMXQcf0DRO77kcLbH4ZVEM+2T\nXB/lClwrQuBKJYwt8cHS3IHPp9fZHFSoomXZNjSLmtHGmGa5xLUtMQaWs5qTZ08y7Fmq0vPIAyNu\nXl2yubPFeHNAUSoqn3j11X1uXJmws9Vna6NH9IH9mzOGox6n7+mxsV1x9t4dvvjJy7zywk3IlHEX\nPPtKc3npebg6hZ+dZLm8RTt2OaNX+NZTlEeGnZVB5aQClYMhMtMnfdp0V8JMlE21qxA76kZUipDE\nmb6tWwZKkWx2rmANI6Vs4SUu9i3JN7T1Aj/Zg+UCOzohIzUh5JlTg9JHqcwdvCUfqDfaoLexRVQq\ny//dLSeY2iWLvVtvezt/9KMf5aMf/ehdP/vpn/7p1d9Pnz7NlStX3vK8jY0NvvjFL77tax49QggY\npRn2K+6/b4fN4ZJw9TLLG68y3Z8xbRN1TCSVcMDLTeTAi9VToaE00ATpCR7dSaySu9AlVoHSKIFO\nidJrdEje2y/BRkUTpMIMSXqUWksCNB5vcvr8PXgfqZuGoiiwVmMLK7JxSpLzTkTEB4+1cu/HlFjW\nS6aTCQcH+xweHjKfz1gupdfXNC1t0+DyrHOMkfl0xnw25Qtf+C2Wi5bgI8YGamqaWvZPbQxlKa4a\nVb+QPVDnwJVNkU2WmbTG4rNalvOOZTvj9v51vvziMzz60FM8/f6P8NDjjzMY5/0E1g3V3D9frakk\n67kj/Uj7KkCUaylosRaWsHNYW2CtZdDv8+D9D/Enfux/w3A45B//r/+UF158FZ9nW36/VorvRGmW\ntdFtXLHdJLnubnm1qhhXkClk9lfOpkKgCp6e0Ug51dkndYE2CNGmLFBVj6LqUVYWwgLXYdwxiYC3\nmxBtJJUJ3yzAt+hQ5NGKFlMaWUg+j0kYje71sOOBVLNBJNFMSqhCCDQ6lpjYh6YRFRcghhYdKglQ\nFsHUrUFXpTxX5fnC/B3EQT6hdMii3aJbmtTRqlqjdJHZuQ3Be5L3qBpCMujSilJNtpuKKWB0whQF\nsajQSRwQApFSGfpGSb9EW5IxlFqG+UPTsUyhWThce4obd2C3hWbnVNaRjZTjhpOPgt2ecePaPstb\nG8TZFtpbitJS9gxmGBgP+xw/s0FvMOLyG/vsH05XZIBXX3qevYM97r34ECcGAwqj6fVFbPzYqRPU\niyWjzU0GowHj7Q3qacv8YMmd6xPaFl6/NuGLn7mKBh566BiDYUU1NEx3l5y4sInSkYhisNHjXR+4\nQNUr+Zg1uFaubYPmal1zuipR6iKT6S02NjsRenCNo+yXFFZE15WVSi1btKPI7OEY78Y3Uoec6XyT\nKzKIL5VYCJJYJNk0KQq0lTomqizBlqQno5JIAQbnhO0aE7FZkpZzjDkt76fkdVdBtOth5XXQBfNy\nOKIcbRBSEl87EvrIJ1exodcsflsbwTfq6PUsZVFx/4ObnD6lWV65zPyVLzO5tcdhK16FSUswrBM0\nPuKTBLzKiD+fO5qMAEWGQ9vYAd1KyDMIezRFea025T3fRSEbkWhCog1gNaiiwJuELQta75kvFhh7\nIGoy0eN8m6sxS103tG2NMYq2bdnbvc3Nm9e4fv0at/duMptOmc1nzGYzls2Stq3lWqRsgh6lYkwR\npoeHzGYTmroVNxBjiCHhnJMxtCQSgs2yZqFnFGVF0S/p9UvKqiApGR2z2gpRL3kIomhlQosPJU3r\nmCxn3Ny/xquXXuT97/4QT3/oWzl9/hxFVa3cMbrxJwmQ4n+qyL3u1ZqV/VGKG5MTQZF+JFv4WaPp\n9SouXLjAD//gj1CWJT/zv/xDnn/hFZxbyyb+fju+boWYEEp5TF3P7EiHWnXI+lqJ5qjk0N0KC4Ei\niRectX3ibJo3m+yaERMpSlalkqIcVuioM+6fBZSt9PzQhma5T5jWLO/sYYtI0esk4Szaip6nsgJh\nKWswqkfsD9C1w88nosxW9dBJbJG0MaSyEggWJ4vEtaSmzlWikkVjbVa0KXKmJXqusYPnOip4zKzb\nqDrKVj5LIUO4WirIKIPq0dd4rSnMeKV0g4KkNTFEccKo+qALVIw4tyQFhwX6pcUWfZQyAisZg8jC\nASniYsGi2eDmtKEZnsCPjksaYxKb97W4/j53rrekg7Ns6mMMTvUYb/Q4c26Tk6e3OH7PFpsnhvQ2\negQPu1cOef6LV7lz/TK2KBhtbDGdHFIUhrIoaOuaumkZjrc4dvoU89mcejaj6lVs7Gxw/GxJM28Z\nb+3y+gs3UCQKrdna7lH2LHXtKfuWFBXLZUtSids3p0wOFjz05CnOXtyS9aAVyWh8COy1gdsNnC3O\nMV28wHR+uGJdogtCEGNhledMY9dUymSnmBA2dO4drUg3sKo0892wvjeyClNEEhhbDfOGIomh1sJA\njcHneyUSXC0IRUyExZK4WGJ07vtkpvC6MMxQv5KxD3JLwlY9qs0dkrI0Tox+lV43i1RbU7Tzd3L/\nf8OPixdPsLFpGW949q5cpX3xOQ6v3+Cw9cIU1bCnsvxaTji0gp4WOLv2cHT02yr5TyrD9c/6Wslz\nUp58zluTVmIe4Ek0XoKrUdJvDLm1451nf2+XRKRtGxaLBYv5gKIs87yg49buTd54/TWuXbvMzRvX\n2d3fpW4WwuAOIVsuIeRAJYmvKBsh7ZAURULOR1rvCDGirThOdPtEJK56nTGRjZsTbRPRyyXL0tAb\n9Ch7BltWKKOIyuF8whiLDpGgQfuEUi3aKbxzLJZf4frtq7zw0pf5lo98J0++571s7hwT8l4ecyKf\ns9wPWlWPKiaUTuKDHoP0z9FZ71dQLRO98BqMpqoqzp05xw999IfQSvF3/3//gBdfelWqy+493uaw\nRkKPD7+3YNZ3Jt3WQXuJu3oZnT+i5M5d0DjaW0t0M4waRREcyTlUJW7TeE+nw7jSfPSOVM9JTYXq\nD1BVJbh3FDFmjEeNLFYXxOUEpQK2rEBpkvPiYm5lgaqksxB3ZoraSgKZFqZnbBpiUcicYVGggtDm\nk5LPQa5aU9ugehXaCGSijM0C4MImVDrPnqUEwcscYggkLaLhK03KnO0LXyJKj7GQXklwLaFZEkmU\nerw+h8qidInSGlMV4qpRtzjvid5RJsXWqE9RWJIPmWkbV5JkwkDc4WA6YBYdafsUddOgNNieZueC\nYtlWPPHA45wa38/WziYnL26zfWYD2yu488aUN17c4/kXdwmFQC3Htivue/wEZ84pymLJ+z7wAW6d\nv0BKgflsRtPU6KKibhpu3rpMfzhCeThenMx2QYbBuE/v4bMcu3CM81f2OXVuiK9bjDEsl0nmQnWB\nD3D6wgZ3ri/Q2nDsxCa+TvT7pcwY2kKkz6shd6LiTDVG1xfZP/w0McWV2Hy7rNGUmFKLmJLKiUN2\ntEhEiI4Y3Qp+RyVi9lUUgo26q4cuss9amMFKocveKgkBEfwm5MQmKx7FEEk+EKIntQ1pPkUh2qkK\nnT0tuQviSivJHFkSWlt6G8dBl7RNIAQ6AByAGBsOb918x5vAN/I4fWaEc4e88uVLDKe3aN94nUnj\nCMiYxH5KXMkMUuh2EUk+lj7hjpToVglhxsf14yujGZeGgUWSPQcuiOCHzs/xCRqfCBFA+pUpQfIe\nHRVNU3Pr1i1a1zAdTEWSLSYm0wm3bl7lxo1rXLt+mf2DO4SUMNqKhVdVYQstRtOJ7KQBASfEvxBl\ncidAiC0hCOzaNA2u9avEKnUEqTy3HUPWos2jI61rMUrRLFsW8xpbGfr9IYNhD1vZLJOoILZSJdps\naJwULopTi/eOz7/wGa7cvMR7X/4KH/rQd3Dvgw8xGI/WZNTVZ8mHsnnMVktgRIQqus6X1oaQixiU\neMJqpSlKy8lTp/joD/wgISb+3t//GV5++VW8PxILjhxKKaqyj1YwXUy/cYvvG3C8ox6iNPvT6kJ2\nvxAWo8BPKRNAIK0ekhBblRgD2reY1omF0rYVKBHHyrREmpGymbiatJySRgMhocTM5PROZJnSElVA\nWiwwRqFLERlPbTe4DigjDt6Z1MOqGDAoW4rgd12vRh5UYTCpWKWaMa+Czu1CFVYEEVWuJk3ObBTy\n/JzBJ2UEuk2Z/YoXggQ5E/R+DS9rhTIllPLzEBy+XgIqkyvkcwliJ0PanTODaz2u8ZQYTm70sTpi\nbYlCEXyTXRCEGdw2Iw6noLdOsHXhFEMd2Njq09uwfOf3fg/aFuxsnMQvDLeuz7lye8nlwyXKJlIb\n8b5m99WbXLu+hyoKNreGnD2/SdGbMRzUnL54gvF4g93bN+kNBmxub2PLii/81qf51Y//EidPnud7\nvvuHePDxRyiKYnXetNUMRj0uPnyKM/ceZzmZs39rwsvPXmExbWldwe5rE5q2JXjPxQd22Nzps39r\nRlHJ4H5/ULGYSV9kmgJ1YdDFFrN5RQhCSAgkMfydLBltbkAMmX9xdJ7WkJKFgLiQpCikoygzYSkj\nrGSKuUJRGHENIEa0tdiqXC/8bv10T+wSJufxPuFjIMWGMJ+AC6zdSRQxOnHVUALXSj855OaE/Hu0\ncxxdlASv6aytusMog5nt/7Y2gm/UcXBwg0svv8yWctg7V1guaiqrqGNiPyRuhMgkf1WFBLCUoMmV\n3tFDIfyzdTBUbA0s/cIQnMcH6Ue2SV4nIhVhyMpPeS9fHzmILZdLrt+8xnR+SNM23Lp9izu3bjGZ\nHLBYTkQFSwFEirIQXfIUSU3AufW9SJYklP5zJEaXzbyzjVUIorDkW6LPWRjgc0/5yOpbJTwKaTP5\nDtX0oNpAW3uW8wXVwIq3Ym8kDiuhBqcorMUbi9HS5wsp4kPkurvKv/vNX+b111/jg09/K+/74Ic5\nefaMtGVYo3gp709oC9pglYHUEJpGRrqSPMZHQa1MFKC+czCy1nDyxEn++Ed/EFTiH/wv/4gXXnhF\n9GPfBJ6mlGja5e94rf1uHO+oQlx7ismslRwryoCcGLJXYErrrEOJcVFMgcItsaGFlLCjMf5OSYy1\nvGZXQcUoG5WC2NT42QRlCigqqBcE54WsUokDhJ/PJQhFTwqW4By6J35feTcR5qbSoEP+t85C4B2p\nJaAzVIBKKKOk5xitOFYkwAdi3aB73eupI4QHWBkE5x5UJ/8WkycFjY5Z9DzPWYoDe5bpyp/JlgNo\nFnhf4xaHpOAAQ2hqiEX2j4PWNdT1gnoxpV46BhScGBRYLemHVKuB5JpcdWsWS8th21A9tMXFbz3J\n6fuO80+3BgQS08UWWAhlpLCJRrdce+EGl1+4RaBh++SAk2e2ufjocYabfSYzz3Sy5Eu/dZXg5zz5\n3hHGFhw/c5rBYEjZ61H0Km5cv84LX3qOV195ma3tM5y99zyDrWFWiUmr6yPCBoaq0pTHNxltjxnv\njLjxyjX2Jwte+/c3ufzaIYNhlcX/AmVPUxQCSZ4+tcmVRuN9y8w5brdw1m4xXx7H+xew1ogzfb0g\npUjV61FURa7sEin53P/tMiZFToAF3FACISUU6OzX2SVxCUEQvMjx2arM2bPK3n7ZVBoRxxdoNnSy\nKrLJzCaopiUFL3q+INcv+bWDVD5SymtYaQZbO5iiJwSwxF0KUaW1WNVycneAOnYkUv4uHzuTHS6/\n8TqLwwNO9z1hPmVzKCMSV+eRmz5ycCRIJbpgl+7u3ebDHQkSpRYzbBMDs7msBBcTdb5FNVmh6atA\ndEePZV3zxWefIabE/t4+y8UMhc9m5FDYtfGycz73jbMQPEf3N4VOWggoMRtYpZhZ+Vmuzksf0WhD\nUVRikL6sJYCm1Z2wctnRaZ07dUABgHeRpm6o65am72kGjl6vxNhsPRYCaIc1YEOBCZbCFMRY4qLj\n+UvPcnP3OpevvMG3fcf3cP8jD1P1szyl6pxxupOnSMZielCoRFvXrBM8iNlizigtpMbcBiqKgjMn\nT/PR7/soIQR+5h/+Y1568bWsf3r3hfm9BpV2xzuDTHMwlGPtIkAWFVapU+1IeQGvS0RpyURMWKKT\nQxmwW5vQH9HODnNmEjM9XTJdYzX4gJtMsMMRdnMTRSTMZmAkHUytVFPS+FVSRbpAsTkW+DTlC60y\nPAuidWrU6ucCYQmpJRktUKiRXmXXX8rIWR5kEjWdpDsmaK4yuhWMVKRiQ5Yr55Thsa5ijF4+X+cK\nYkRfVBcFJhbE5HHeyfmOifnhAaZXYmy1Yrw1dY1zNa0PDGxJzxrhhzi3+uxGSWIQo2bRlNS6oPYj\nnv3iFW7Nb7F8aolrIp/82WdJWtHfKNg8VrF1bMgDD24x0Ipbtw7BKW6/vmQ222d26JjNG5aLJXVT\nUxSGV1/c4/4Hr3LxvrNUwxExJprGo2zJ+fsf4p7rDqsf4guffZ3JJHDq/Am2j43oD3tUVSEehsZI\nDyyKCPKxs9uUpWLvN79IUS3Y2T7OKy9OuH5ll2M7PZ5673m0FXm3R544zd5+YjqZ4rzjdt1ycbQJ\nkx18EEGJNs0pRyV4Q+0aikqSGhmrTSvvuhhaCTr50Pmyo0HrBMkLWWq1iymSl4TOmBLTH+ZNzHSY\nqxCqEhJhY5K1lhIpSH0QFzN01rkFxJcxRmxazRHQuZZ09wpAb2ObcrS5Wn8xdnNyiqIaoDT8T//F\nMQ5nA/YOluxPIoeLRJPAYQhKo8qCsqoox0N6m0N6G2Oq3oDhcMjmznG2ThxntL1DUfWohhv0N7b5\nbz70f8YYy9/58t8ixMTB4Zxnv/gCN+5c44UXvsxnL3+O81tDyuWEfi/S6sT1eeSaTxwm6eUd3Rvf\nLhC+7R6EsE9rJ6SVpETBJqav+9S3HN4Hnn/hZVRKaJ0orKIoTBYGSfgUSQSBS5WibTMnOwdClVEa\naX1kucI8Z00SiFfgzyTValREndA287hikgoyZdSB7vp2V1xlTl2eQlUif+m9CHME1+Bqz7Ky9PoV\nVa/CFAqUI2ot21RwROvxIVDGkuSFNPRrn/0Vrl2/wrd+5Lt47we+me0Tx2VW9m3UbpSxFL0eyija\nZUtTNyiVyPayGBuyzVonbwOmMJw+dZof+N4foK5r/tE//lleu/SGJAa//Uv1H/34mgGxm0cR1wiZ\nJdTqaGTPcFIelurqxbtfI2ISFKFFoySjbRqBQpHeoohf5z6KPpKtBEdqa3RVCTFm2AfjZJZ6MZE+\nn04YLbARCsp+LxcfomeqjFpVjIqMq7Bmh8ZW/BGV7gKiQUeIhfThVIgZVsiuEyo7rlvoqmSlExlc\nF0gLhIgUA2JvCvLGmogM7q9Mi0EEDoxF94YUypDifHXulssJJhTYog8ofAgE3xCcmKuWNmK1xpo+\nWmsRBk8KY7PINIZlW+LKEfNlya3nbnNzts/ixw4wFGz2HCr1wCnm11rMLHHxvcdIZkmIitPbPY5t\nDziYLJkvIq++fIfFZAlJEXziYM/wystznNtlWdcsli23rk1YhBkLFgzGjzHZ3eHjv3iJz/7GDYbj\ngtFYc/LUBvfed5Jz955guDlkMJLKcjjuY7SidZ7G18S04IHHd2gbw2c+KcLIjzxxRtabguNnNzHl\nzZx4BKatJ2yO6RXHiFETQqQBovXoAH4Z6ZclthCIW2AtJ8LtGfGPSPYeyWBAUt0vZDOm6wPnjDnK\nCJHt9fNwvV7VPEpp0TmN0nsJ3mfNzTyr2MzBOVlLSeegmxndmRSkunsxZlJPgqLXpxhuSk8ZJFNP\niaaf+G//H1dzfygSYsCHiPdpZUTTbcYr0tCRvTCthM+73rtIGWojiko3ywUoxY+d+DFM2cOf14RH\nA03bsn+wT/SeaWl5OTliCCv5tTa+Kfi9G/jC19p9juwhiJ6pa9d7y9F65j/kiCFgtBBMYoTWRXTI\nZhoZ6SIJk17rLkmSc6OPXJOwktYjv57Apd7LfhlzshJaR9MKs156mhkyPXodyNqrJFkK+XVVfoCg\nWkjQdgFdB5raU/VaesOKoqdJpiBEjwni8WlyF4iyBOeZpglfufQMewe3uXHjKt/67d/JufvupVgp\n3XRBX/6atMVmG0XnnDiGRGELt95TljrveXksSytUWXH+3AX++A/8EMv5kn/6sz/H5as3BE7+HVyz\n/xjH1w+IQIhelAgUkL0CVzOIKeVUWm7WlJVBukMnqYZK10rzvG1pblyD6R6p63MFL3/PAULFuFKb\nVzGQXLZ8ysLe2pa09RIfQvYpK/DzOWZl2CnMKGVMzro6K6e8gQVxNpAqEaKPMs/UMbBKg9Il2nsS\nfiVx0VWd6K5PqTIsHLO0lkizdeMOoDKpI5+RJBZA0q5WMrQfFcqISo9WonBjy0o6DCmJCwie6CNJ\nWaJS0n/KEaG0ilI3FDbLxuWsUuK9aM+2rqBRPeqgBB5VS+pmiUqO67fn2BiZT1tchMfedZL5xPPF\n37zCcnqTRz6wwXlrOXV2yPDEGTY3LLt7c+ppom2X7N0p+Myv3eS5z+3StI56WRNTQW/LU56Y08SI\nTceoF5q2idy+OUER2DsX2RjtsDy4LgmRMtzem3L64ibjsabQAR8SvWpMPXccOzag3ytxvsb7uJqL\nOjiYUy8b2tqh0Cy1YhYCm4MdBPYK6LaE1KIiuffksUW5QhdUdqKIQEg5GHolPUSTcsUv8H86wuaM\nriG0jugdUWlsfyTnXwnkKbn+mnUds6hDzD0uow3aO1KzkC0lIy4xhuwpqVYQ7So5RRRwTFHSGwka\nAvL5hrus7skusdRKNHWT6X6XN9nc0loTLMhJRt6ko2T0yXcbtTjZSy8Mprd2iWWFw1D2SupG2LP9\nwlAoQTfayF2KMncdXwDemUjO2x6/0421u4whInyBkIHRIyxMSUhkk5d/ysnTOnvbqEzcybe7UWCt\nJqFxHpTKwS+u30flRGsVBddv1SHxwqYNq+3lrkPlLx99InlovadpAm3bUg0Kql6FtQpjLDG02LRu\nYcekKdFo1XLz4Dof/41fZnfvNt/x7d/Lw089Tn80WrGpj75fUhZbKvrDgG899bIhxIQPoJoWWxhs\nWWAQREYpKArLPRcu8kM/+MMcTib87M/9C/b3J7/Dq/a7f3z9sYuUCKGVeThVoDBr+EYlma/Cr1K2\nI23i/AJgQ0PfLShNgfWHxLlGuxmoGtFpzMy91BFzcsZL7gu6DDmmKMSWEAhNTfCeXjmUiqxpsJWo\nhEQfsvmGQ8eCZHLtqlIXKVit4gxfJrSMOxDFS80I3JiMwAEJI5VCpiiu9FpXcGnKu4fYqSSt0JSo\nEFYO9gAhBVGUV6VsgCqgUsSmhDYWDJhelWfXAlpp8TlMoEoZBo95HisRqEotPY8gO5dILkWiCyQU\nMWoar1kamM8nBDunt5VVUbzm9lVPPb3Jsp7SHw6xHKOc3eJEb87MBezigOmlQ2LZY1gZKlOhCDkT\nTqgQOdxfMD2EzknSFommTvRSSX+scK3c3SmJUbE1FZMDx42bSx68bwe/iNy+s+RLX7rNM5+9QW8A\n28cLThyrOHnsOCRF65qsUxvk5rOapvZ88dNXqRdLlDVYXaCs4nDRsF2WgCKGgGuWEDRVZfHK433I\n+qMpw2a575w3KxGql+vVkR9yYZbdELIoQDOXPmT0AvX3h3kT1dkgeB0UUxLvSEmKwGhLaQuU94Tp\nBJXh2q4yTDHkqfN8E5HyTG9CK1DG0NsYZ/NpecTopmJnT/F//cvbjAZ9tDa0Tc1secjMOeplwDuI\nLnsDRghByCHKdCIXspRiSjiv8EGtgmVMip/5lw0JxQ/92fv4kit4ff+Q4bjAqAEne4n7R46hari2\nv+RLNxsOE8x8Yt4eGVf5bW1RvztHTGoVXLo/OnqJyjPAUiGShfuPPK5LpFYBUXrLSXXkmrhy3ohH\ntoluDa22jLvel7ecmLtJQd17rpMakGvlfcL7QNsk2ipQDSxVXxI6EUzJSmJBkimNBlqm9SFfeOHz\nHEwP+Mjtb+P9H/kIWzs763G5fEgRYCh7A2zhUUqxmM1zlRhyOyH7v3bwqYJe1ePBBx7ih3/4h7h2\n4wb/9uP/nrpu3vpFfw8dX8ftIuUbWLRMNSrrl8pNLq4XoqSgkCCi4tGrKBlt4ZaUqcHiKOZXSOkO\nIXRSbQqlSlBFVudI2VBWvO3WpISEqjT0SuL+bSBQDUqqYV8WsLIUg568Z1fROZkRVFYqTgVZB9Wt\nCTPasM5hM2yFQLGqV2F8EEg1IRe6s2kJXUBVyM6VKwkVZNwj30RC/c8DscgNpFTCpIgY0XoUnqQ9\npuqhdU9mnLJTurU9gV+DR1geVjbMFLEmYnuaoujGX4QSHkNYiSTEKOQEVQ5ISqELQ9HrdlpNcBHv\nI8b0KbRh03qqS5/h3aND7OktBrrFE6lGPexgRKsLfJJgbLKYuQsNmBJrTIbFItEnVLLY0uOUl6Qi\n90JSgmUduH55n3vPbdMbVDz21BZFUfCFz1/mzo1DJgeJig3uu2eLlBRXL0+ZLRxlpeXaIfDRrZtz\nWucJviEmKC1MlUfpAhCFDe8dVlshOZHwLkqlE5EKXkeS0rKJhUQM0ochgx8qKDoNtRDyKIuS+4Io\nTp+mHGCHYwFT87XuSDrihiIVu180EBNlJUIBKSbC5JAij8jEXAWG4FBKGH8qPz8EYSgnrcUMe7zx\n1ts1Jrm3QpK1r2SzNjpRlAlrFVSizhPiKo8iqghBEb2o7UQFVRRD6xSlLk0xYTSkomC2c5qrL73K\nbL5LVfTZHvYJu4fcvtmyWyRerQOTmHBK06a3J838pzwyh24NFYPc/qkLeBJ0QkJmmvW6OpPHpvXf\nUXJPdOxTuoB3V7h7C8775rCQun01Pz/nOkcenB9x5HN3h3OyNp2LtC4QfaQ37BNTQmeZSMoeqCYj\n4j20hTY4rty6xK98YsFkMuXD3/ZtnDh7BmvXNmfdXpa02N6VPRnr8I0TZDB6QmhQeoDRGq0Tzkti\nOBgMefLxd/Gf/4n/jMlkymc/9wWauvk9GxK/LmQqIxcKLYAn+gierTCrZmxM4cjc1/pqaRKlq9Eh\nELNgmGqlSksxEuoWMoVXFyXK9tB2AKqSqgyZf1EkVGFJukAlhdGW4fYxin5FdLUEY0OWj5OMSGtD\n0iXJxiMkmizLFYIQgZQol0hWGHIgyoozypJMQpUF5Oqwg01E01AqhZiSeIppgWaJIfdrJCNTIa5u\nHK1KRCy9lXPgPSRF1AIbFhkOk6xM0+sPcG2T1TSCZKHeQQRbQVkFrM5KJUkCgbaG0HZjIZpYlpj+\niFSLUXKhjVSeHSajNVYVDAYlZ+89xnhxDk9JdC1eaWw1pD8aoQcj5vUS7yIqysxcDC7L4GmcFwGB\nZMA3kRQMlC3k+brgAxAJ0aFMwhYFm8eHHN8Z0baJ+x46Tl073ngdtjY2ePiR0/R7QxbTQOsEZvYu\nMps3eC83fr1sxQS2rbFFgd6EuvFEVeXVBySFNUUelBYlzEFfxMplXkzo8oFAxJG8rG5NhtZSkuQv\nZmJVPrprokxB2R9jKnE4EZWPXIGCoA85UDbLORoYDfvSt0mBMD1YzTRqxPNPoUV4gAipI+kgVWSU\nJKwabGZZQDLTVP7zzuF9B7kZjFYYNJqAMQZbgMHgg8f5LFVH7ql6kThL2adPAd6JvVlMoEuDK3tc\nmsxo6wXntkbslInDW3dYNI49nWg0zJQiGMW8CbTvhPr5H/3IWFbuD0vPNf8m/ylwYRckjz5V1seb\nsLC81t4a5tZ/W8Pn60CX3voa3f+m9fO6zyOPvzsadmE3dIzjEImhpXWR3rCk6hUoGzK7QfZObSLG\nyhcMIbE32+VTv/XrzGZTPvKt387FB+6j7JUc3ctFflBjih79YcQrSE4RdBQBkST7rNZiYuCD9FvH\n420++P6PMDk4ZD6b8dyXX8C7wO/FjuI7qhBZbfhih7QGFyKityKrRqOkOlo9H0zb0qsnWK0olMKm\nAG0tBJYgm3mMkeBa3GIGyhDKHmV/A9sbo6pKMl1jwBpUaUgZ5tFFmQdhc88kKtEqjZ7UBqICEyOo\nIVBJtesi3rkcxISBupJK65a47hiiDkBGNZIEEJnfMcIczcwEsXkq8+l0GVqzRyTbSjqikLAYO8dp\nkWEDgXej0/lxZpWVSdUc5Lx4hwsO70W/0hjo9yuKsocEHREIiKETYVeAJiRDMiWJJg/FVmgt8m8p\ny9RpazBFyd6spRidQj9wGu0cYXZIqRpM2QdtKYuC0WCAitC2IrJsUkAbI41+a/N3K1D0SGlKCA5S\nIfN1GqwpSNGzd2vC9csTNsZDmqVjNCx58KGTnD27Qb9XUfVsRiFgOmnxPhJU4M6tuZgvpw6DEKeJ\nqBJm2BJbiFHnICYEB6UKlPJYUwiJJomjQDdjG3xOOkIiBlnf2uTRCOkR5MH8DgNTQnBIisJWlP0h\nplMvSnIfhNjImuzAhxQJTUtVKMb9gWxQMRJmk7xZyeuljIwAkrQlMlRqiEnlOTlFNRgLwetNt2sT\nPD6JdrAxlsIMMAQKFfJIhkJhxZTbeBmNQkH0JB8ojIgndABbCCIXtkwlqYQ6wJ1bdzi9MWBLO6b7\nB8wbxywlJinRohkO+2I7Ftvfg9veOoiswtERGLKrFkO+1B1MufrtW6DM9b+Phqo31Ydv/QBveszR\nV3q7n63fI63IT6tdK39O0eMly/rlue2QoCetjoRDqRqlNIWp8EXAGoOOiVk945kXPs9iMeeDH/4W\nHn3ycXrDwYpU2L270hpb5oSybUXRKyH3W9ZJtUbQCR+kXXTs2Em+9SPfyfUbN9jb2+fq1Ru5VfV7\n6/j6AZGEzJlYjBENznXoyMPi+XGJRFJr0WtIFO2Cys2k/6e0+BNm1XiVs22js3A24FuPmx6QlnPS\nYIoajVG9AWowFMLKbI5v5rhljakkSEql6VA2qzi00kMjWy8lrcQzMdtDhZCywkzHLJVsHNOp7Qgk\n2RFoVlPPRmeIlQzb5cWbSRmktXhBUlFqDGXRRq0yUKWyukmGxrqNUgTUG4Gnjgg2J5AK1sucY3IB\nUhCJKm2wVq6JNkZ6p3E9NNxlwC4mYtIkH4nO5OkRQyARk+Pnnv1LAJz43AP8SyPjDFpLaNYKrFUU\npaE3qHDvg/pPO4FAY8I7j88KHc5lKDMH46KXSLolNOWKbLS+uYRa9EtVwWijR1XZTHGX2Uxjpbdb\nlAbnIoff2bBcNEAkvvK9GCMYlosO7x3Glth+i+41tB6WzXK1hNumIUYv4zxGiEzr7F6tZ8acJ7ou\niemWsMoE4Q6/OroVyqsolSgGo2wxpTKy0nUhOx1SBTHgZjMsSUTZvScaQ1rMIQiJpfNWFBeL9a2o\nlc4WbHJ9tTH0RiO0NesNO60ZkyG0kkBqjTElpbGoFLAKDOJbapXF2rwOYiRhoTQUWq6FNqLLGlJk\n4VomHKPhEOcdJ4aGwtVM9g5pU6Q3KpkuG3yCyoqSyryJ+DfNRQh8q/DhP319cHdllt7yy7vgyrvw\ny7d9xvqhR157HcTUkdf8mqHyLZ/tq70HGYpeBc/Eqv8XQ2b2xkjwDb1BZDDKM0QsZTzHlBijscZI\nAmQ8rW95+cqLLD4+YzaZ8NR738PGzlZGItbfTmkjqBugY0YtujWYwCiF6VTCSKAMZ89d4Lu/+/u5\nfPkK/+oXfonJdPY2FfV/2uPrB0QlQ6VaF1IdrilYOXPtsIT856pClLNTtIdY32Z7m/yWyqzh2NSh\ndnID2spC6mWaeoTYknyGdIIm1DV+ts9kb49qo4dRlhARyyUjAS95YaamGBH8SUSgTVFghxV2YREF\nErlg2haYskTpLLMWZNA0ZRktpbtZw/VgbjySBISo0Dpz8jkypqGMtBc7/j5gsoUT0aEQc2XJotWq\nt5ny+VIIFK2NwRaDnBU68JroHdZIL2mlL6vEZYEkMnXdreKDsFKjAecizSxRFIW4QAzW/mkxJulD\n+BwU8mfWWua0MBbv5DHbxwdYnWinM+lD2YrJHGmax0haiben1Y3TbSIqX/QEQkWfLPH9kuGoohuH\n6uAq7yPzWUvbCiN58sg1njv9mzLb1aknRWHVKSNi6YpyRUBRSPLSjdmE4HGhyfN+ieST/Mw7mlZo\n5d1oa3Ia0VGQ4I1OKLrzlUA5jLGUZYUdDHPLIOaEJ6wCo1aGpESJqJ4cyMxtJvRYYzAponybfx6y\nkHJc9+3zRhTz7+TdZcyjUxzpbteYoPUBF1pSqkCJWHVVVpiswyskeZGo06qQAKmFuWuMFe+9lBBf\n40QbEnday7XeMVzYx5LotzP2Dw5JWrNz6hitDexfdRgfMSGyP12wdG8NemVRUBWWyfw/jfj41zq+\n2tYsedA737jf/pHpTb/7nQWC9Dav1PU4j7T+8B5Ism5CEHi8T4U1JU27RGukQszjZFpHfPRc373O\nr33yExxM93n6Ax/mxJnTGR3ML5/fQxsrxgNedJtlC0wEJeQbrbUgLSR6vQEPPPAo3/f9P8DLr73K\n5z//jAzt/x4Kil+7hxgjaIXJVY0EEAkCJEghSUWmpAco2fQRJYeUMIsDVPD4GDBKRIpVTmnF8iY/\nViXpFRqFseIa0BljKm3ANSRVSGWSEi5EdFWgUpJqsKveYspqLW2muCvSIpHiDEYjyq0tbL9HWLSE\nusHYiK6yCHjGSqQ6NChVrL6rSjIUItJMMru2Gq9IIlywQpPTWvehE8eVHFHgUKmkcyVpQFFCqFFR\n1FNC5kmnFPBuiS4qTCmyYCFogl9Kx0kdpfWbvGAzdqIsK63CKDCqr2va6JntRqkui4getpz43APE\nGPnIT/7XxCCGwSJOrYl4tNKcPb/Jt3z3E7zw7C4xev6r/93TbIR9rvyDv8+tF55n+J0/wmeu38Pl\nK68w2tpjb3KZU2eO8+qV6yx278M3BcG3GFOiMWijCDFIoqUcvZ7lzPkdTp7c4NTpLVzrefnFPUIq\nuHl9wuzwAKMjn/17fwc9VEwnLW3rSUljlAQIjCe2EULAlt0cZiLGVsA/rUkUKNcKOqEiIXq899T1\nQmDTIOSSriBMCYISRiH5BpeLo7CpoNAFRVlQjIYodZSh2LUPJPjHLD/YzmdoL6MaGIUpCyE3u85W\nrYNOc69bdzVAnklUWS5r1XOvjvSa5K1dI6xDHyI2erRRVFWfIkZS1AKdRZfztIRShhgNKYas3GXR\nqiBGWDQ1u4uWS4sRB/2R6G+6lv0DTzmoOHnuJIPTW1y9dYvKKEyEJgip4s3h0GjNsD+QYP3b3al+\nnx9fr+L7Rr5HB592Ra0LEGqRL+zaAipZOsm5lDo5OZ1H1ERgfnd6h898/tMsZgs+8q3fxunzZzC2\nWL2wEMc0pqggNoKE6MzKzYkwCmxh5V4Lis3xJu/5pvfz/d/7PVx+4zI3bt6BDpX7Bp2H38nxdQKi\neLPpTCteWTvl0jgFkSpTWkReIxxRtAFixNQzgQR9VojXGmWNWB4puUlWQ0GdiW+eFFa5x5ISovAR\n1jOO1aCUyk0hfmKFyKcJFCqRqcuyo4+ZUr7EjKHoDyjGY3Ce6BsxeY2dQas4FAhTNQfahPxbS1M5\neIHXuisoBaFCmIeeFDtoNApM27EOAR+abNcEXRWpLGhVEWMrFP6VKDe45RLlA7roSbZfRpSvwcn5\nT1H6kTIPKrJtMiaSKxSQhCIoEYUuxiwOakiKsrKUGwvZbxWgGvkv2kxsEtsipRLV0NIfVNlKKasJ\nTRcsr14hNIssUnzAe7/5JIOtEU17ine977184pc/wad+4yZen8G3hRCDkvg/xtBSWEVZGgwt091b\nFCxZTqYcHMzYP1wSnKVpAkWhePSx83x5UOLbSFN7gs82SjGJAlLlMaYEp7FlJkYhTF2UzCAmpQgh\n4l3EIoPVLrX4rENJJiaoDh41+dquWIZdRQ62qKiKHv9/9v4s1pYsve/EfmuKiD2c6U55M29mVk7F\nyhpJkSyKZKlJFksUBVpNNV9kWS8C9CDR0INgQLbgF1l+aEAPgiGIMiADNuCWAEHwgyW1W242SZES\nKVLFIllVrHnOOe98z7CHiFijH74V+5ysLGUWh8ysducCbg73nrvP2bEj1vq+//cfXNNVlx7QSLqF\nVhqZsFa7vlJI40jc9qQkWi3rGmzboI2SVJX6fdX07OVyHi6Tz0k8Qt/PoKwwq3ZLCqDgwYdAyAGX\n5TBUpRF/3PoAl+KEEKaKvE4xFcTIKO3wZsmDYcaDOPLS8QvcMR1zlUh+JMTI/PAKjzxxg0uPXuOs\nXzGuRxZJno+1qskh37a01hirOF0Pb7Tt/P/tugilvlXr4kx0auN0RVxShH6TKGlbGxfRy1rdoPWI\nVlsyha5IQLkOojv89Od+Hz+O/MTHP86N9zyOtQ4msFYhZ4STjFil9M6sXUY3wtFwjQEvpJsbjzzG\nf/Wxn+Dzn/8c/+P/9OtVivG9sd7wQMwxSm8TM9ohrXc6H0WXXVBLPeGzwC5TyapyoslBDqRUNVx6\n2n/r4VYzuMqENVe4KfuKj6tJNJ3RbUNJCd9v0aYwGZ/m6iZjtJN5YcpykNWOtFQ2Zxx60QSWgp11\nEvbbLnf885KhBPE33UGGavpwExSJYpIIn3jeCe9we7HkyloE0ZUdwbmoGkK1hNKlbpiT5RYObeus\ncdd9FvwmgC2YTqGMzCZNY2mzFgd+a+S67liIFVKr9DhFwTkLGtpmQcgjw4knDIl2Ybn2WIMyme2H\nb/Pff/YfANDSMvL6m/T/AvA35L//T9Nv/uT0H7/+nW+iH32jO+x8PbS5zj/9v/9fmS9brj/xHu68\ndIdt78m546tfeIHT0zOuPhwY/cjQ1/tMUdmcSc6GWSIPljZD4+q1UHXeoSvLOGZx3MiIyF6DjyOj\n3+Kj30UMScGnyTWOSWXhPCuVa7FWcNbRtHO6dkmzOESrKnvZGXWL88wEZcVhS+wHwGBci61ICKVQ\n+q18hjtwpVSZhd0VeqXeayKer25E7vxAnDpEH8HHgo+BJllcKTS6kbm2kq6wlI6SA6H+rMZYIJNw\nbN11vrW9zHMPEunBC9y/N7KaZTbrNSEETNPwzEeeZf/aZXwcufn8Lc5eeYALidxavP7OMouYEidn\na0ky+V/gejs7oKmeUxXfnADbECFvEzlvZY6bwZm57MGlJ1WGfKlwfrFyH372i58m5cxP/tTHeezJ\nJzC2ejrXfUdrh3FJ7CN3KEcm54oKGoOpmbKNtjz77Af46Y9/gi9+6at8/RvPfc/Apm94IKYgZsNh\ns0EZI9Vu9QkFanXATlCfcxSGJ1SYMaNSIPhBupSdZx5CoikiKD8nINQDKE8ekEJYENsGJGYnRran\nq92BN5EedGtR1gmrwBhM00LOxGGoAcRBsAMyuXFkZ0E7TJVeYHQN9g1UPAApy+XNSJxSkU41Toem\nrFztKkqeRNmVLVoiJcfp6KeUjC9eOoZ4IXpFGYmtmjpKJ9dCNsVCVh6/Fasp2zmca2mWjhaFbbuK\nYBT5efXk+aQrDA17rsWWIMVDDFhm+KFgm8wjN5bYJtO77a66PPfhf/uWWiieePY6870ZVx+7QhqO\n+b5HHmV+sMcwvsjz31rzW7/9H7j9cy9D6TB6LlFJQNGF5iDi5pHVnUKXLOOwgWqebl2NVNIC8ze2\nwblG4MU44kMUGnioZgOck25KhaZFglEp68qjlKHrljS2o3Eddr7YQeiTDvQ8PxQg47cribjSDU0z\nq6xUYY3mXjr1OoLZQba6PjOleslNwbMg6Ig2bscuneZHISiRpPgtrdV0TUdWeRe9pYrk8IUqIlda\nrmHB0btrfP7kEp9+7hi9eolL/iZpGBn6DaNSuLalWy649vSTrDenPPeNb3HnxVvoIGYGA6Wm3b/+\n/iml4EN4y++ld5esyc1qUkfuNJcF/JjJua83jiGXTEpyP8iNn2kaSc2wxpJy5nNf/iwxRn76E3+e\n9zz9ZCVdyVJojO2giKdy2Y2fRK8rM0oltpilcLB/wI//2Mf4zGc/w+07dzk9Xe8SNd7J9cYHopcu\nYTw9RjuHVUacW+qSi1z/f6pu8/nTqXIkjluS9+imOXf/r3MYVXO9JHuwdnRaMXmNKiWvVwBlhYxD\nDIQhMDvch2IkqWCyelO14zRIrmHMaHPuLDPR2XOQ7DJCqqSbCtGqAtagTe08UpGuOOYq9ajwazqf\nkxZKlRNoqbKyfB1KDvmUs8gbKskjjxNxI9duTqpl2dyVyB+MrRZhiuKUbNYxko1s1UY7TANtu0Db\nBlEhRnIIFaIQWQNyJVnahqZElLY0jeHxp66wv7ck4XHW0nTnn+k7uZ549hlKKRzfvI9Wlr3DfYpJ\nLPYsR5cbbt99jr5fYUxg1rUivleZZmHoDgdyNqitYd9Z+v4ukEUTZS3S8WuUztjGoZQipUjve8Zx\nJfBrlI9OgpuFIKCMwLHaKIxpcbZBqR6lNG27oNWaxjrRedZWMGUpPiZ7QyrBxm97og/MrKGdzQXm\nL3JoJ9/Xil70fwLZZynmmGj2Aq9Mm4Z2jnaxPL+ASg7wmNhV/yknvN9AgaZpUUgsWsEjkVKiMc5F\n06t9vra9xm9/7QX64xd5xq5QPjBk0ZxdeuQhZnsbTOPwOfL8t17gxa+/TOo9BolwWoeMf405x7vr\nnV4Xm6+pj8gFQihs1iO5nJJSZrmIhNiKKURNZrEpCmnMWDY58oWvfw6lFD/Nn+exJ9+zCx2W/U5h\njFgixhgEJeN8BKV01bjmhNGGJx5/gp/5xCf4whe/wKc//UVifOcTMPQb/WEcB1LwDCf3iesNhChm\n19MXlAnqNJW6LinRu84nJ/zoZX5YsgzzEUH+RKwRr6xJv1Kz3Sa4kvrwKyOU9iRm3FCY7e3J5jG5\nsmhTIW3ptpQG7SppoXFoZzBO76qaEhM5BEIYiD6SfPUL3TnRa4oVlqgyIheRbJZUD+F4TqpB736V\nEsh5lJkahaILeZqnKEBp6aJToKRAGEZ8PzL0Pf3QM/Qb/DAwxREV58DIJuljYLMZ2JytCcOAVlms\nu5SiKCskqCIdd0oj4kGXaG3A5RFrNQ8/dsSP/+x76eYts27Oye2AtW94GwDwy7/8y7zvfe/jmWee\n4R/+w3/4uj//yle+wo/92I/Rti3/6B/9o9f82RNPPMGHP/xhfuAHfoAf/uEf/i9+j/nBAussrml5\n+s+8j70rB9im4cZ7HkO5xOi3Ao2bBj3FkJnM4lpCdWvObmcYM/vzln48Y5LOqJ1lXyGlwBiCpIbE\nkX7YMg6+Cvbz+Rg7UwXwknShjMZYi6kSG601TeOwjUO3DbprKWRiCoKsFJHHTHR7pcCv18RhxDUG\n21qUNWKAqdUOKck1uzPnJIeqrhpZVSglklKqbGDZVJpZ97qzJyZF8BBDIYaAHz3RJyZavjEOY85Z\nyKlAHxwv+Yf59Atbbt/7Jpf1MW0eOY6JlVIcXX+Ipz76EWwrs8fnvv5NXv7GS4TNiMo1lLdI0sOU\nvPHueueX3M5lh9rteIBAzorgC9vNwOnJCSen99lsN6zXG1ZnK7abLcM2MPYj3o+MYWDdr/jDL3+a\nX//1X+WVF18iRV+NUMpOOyvBAjJLV7sRhLC6tVIYY9AK5vM5P/RDH+VjP/7jHB7uwfnJ8o6tN54h\njiNJaTZ37+BmM3RrcfMDJhqTUlRShyFXu6kY/e6gKEmG8HbyDp24M0iLnSrUKsPXiX5bGQRKg8po\nLZZu2llM4xjHhHWOZt4CEhmltEZbK6JwleUAxdZuCnSQ9IFSYpVnKKYEczFCrk4VCaaswjovpmiL\nchpVoU9llMx99AV5ScnS4U6Zi8qhjcwRdb0TVWWfYjRaQyKTQz2AKZVqn4hKkawUDQKhJbAyQ0oD\nYiRNxlpNGHrMzJGqvs+pKZqr+l2iUGRcGVmgaTtLt2zYbiPbM087t6xvd4zDG1dmKSX+9t/+2/zq\nr/4qjz76KB/96Ef5+Z//eT7wgQ/svubSpUv8k3/yT/g3/+bffMfX+I3f+A2uXLnyht/n+M4xl69f\nZn60ZH12xte+/GWef+6bfP7Tf8B/+g//gdPjEef2aNw+k2fs3vXA/o2Bk9sZf9KyR8amyOBXKJVR\nWgnjVGVStQokR3IK+OirMXIke3aGDyVVqzUk0sdqaJ2ibSzdfIk2a7SSzlArie5SjeQ1ktIOLpJN\nQYqhUjLD+pQYPO2+xVmQDq3OuMeNPEs5VRPwREpZbOUQmU+uM/ppTl8okvZ+ce4JhKjwoyKEwujF\nVN+qgeQBK4J8sHLY5khIiVNzmS/d0zz/6tfZZ8XDNnG6LdxJhf2rl3nqhz7E4eOPUEphHAa+/odf\nZnu8QdyDqXNxaDjnyL27vhfWxC2oc90sDGqjVBUFFLxHRkUZQFEWAp3GFJjNErl0ZBqUAZxindZ8\n5kufxbqGn/7pj3P9EWGfqtoRKgWuaQjjIM/QZBgP6CIuWYmAUnD9oYf5yf/qJ/nkJz/F6ekf1vzJ\nd269Mcs0JrIfOXv1BUzXoFyDFnaNPO6loLKRIX+1rJK2t9YluQbVKiNsRUxlqor/HZV9R5kg0nog\n1oOSUigm1W7RQsrE0WNtizH1USwCke7E8SZX5xpdD0gNTth5OU6Sj8nNRbADpYQujBbxvna6ptyr\nc6o70nEqTa3sxbu15CzxU4WdhVtF1IWyn2XTmzhmu4FztcE3RkNN38hFyBsxn0s6gh/ksFa6uscV\nwpAY1Ah6gyuuUvc1jWkEppjkGAog4PSaQz3ndo6c3B+5f/uMpjMYo9l3VwnDG3eIn/rUp3jmmWd4\n6qmnAPirf/Wv8m//7b99zYF47do1rl27xr/7d//uj3oP7taw7Rn6HmUVv/krv8qv/tr/l2989es8\nuHNGjntcOviz3Gw+BUVitKwrHNxYsz4dGO4e0eQFl9tA8WvGeIKqgKDKihwjqURClK4t5cLgR4ax\nJ4xRHNmquFjOG9GWGgfWaRrdyLywncuMWFXtI6BMizZWDrdq5p6z3Dfil1ogZ4azFSUGlosjnG13\nnSMpUcZB2KOTdGkKowW5D6dBYYXapw3GWvs69mLOSuaIY6ZppBBQSmNtQ+dmtE3HGHpxK8qRbZrz\nfL/k6y+/yrB9hWf3IjEUXh0zs6Mjnv7BD3Lp6ceIpRC8Z9j2bI8T0+MKdfaJeJ9eDCt+d31vrQxC\nyTBlx8aHQggFrQKwrr7JVL0qTD2mawxaBYy2nG5O+L3PfoqSIz/1Ux/nxuOPiURu0nYri7WOmAJK\nia/wZEiitcFYS86RpnH8wEe+n4997Mf5+je+xb37J6/FeN/m9Sayi0IOgbOXn4euQXczTDMTyHPS\nY9VOigI5JhGXT5cxS6ejGxH16+oTiiqUFFEq7y74pMbWlRUlS+260Ql7ztFjtKpzngQpVHzrXKSt\nMDudn9KaXLQwnarXaC7i3iBpUkr0i3U2KkVOPcDqTLQgTEaUzDKtlUPTWEPJmtnePjEkoh9JKchM\nr0ybRNodgoKnS7esxY5Frg9gzzOGzi3FgODj7ucpRWj4OWW2/cgQIzYkDi5fwbkZ2jhh7xZFztPn\nkFDc50hfZS8l7o2F9VmPaywpZp587zWc6d7wJnnllVd47LHHdv//6KOP8ru/+7tvfndN71op/sJf\n+Asopfhbf+tv8Tf/5t/8jl8XS+BTv/OfeXB8h//x3/xrPvvZL9O5Gxws38fB8ims3eeL6vcwNmOa\nAjqy2Xq2dy5j/BG29FyfO8LqDB/ui1pCS0dYtBBUku9xriWlRN+vGIaeVLMCZaRbHYXqvMOYgrNG\n5BW2FccXJYWSNqLdwxqR0ZRJ61UoGnZROqXI6OFsi1WKveWeQPflPEJNIs5EC6aUqQVSRGUj2tdS\nq/wp1LoekJN1W9mRdy7MEaMiB6ARmKp1Hc5VjW8UfXFI8CDt87V7p9w6/hpPzj17WvH1TUItFzz1\n/c9y+fueJGvF2b27jNue6COqKFx99gNiIJ+VFHVOKUL5zkzTd9c7twSsqkk5SaFLucD6l9QMhkxB\nJBggsqSYAiF55vNOTCaqXfXZ5phPffZ3ybnwiU98gkcevYHRom+kPh8qR1KKWFN1waVA9emd9rmr\nV6/xiY9/nE/+7if55O9+hvgOdolveCAKH6CwfuVVcmNwiwWum4ttmVKQq6NL0cToCXEkldeyyKRi\nsOdimEnXPF2YGjA88fpkM9IVYpQOSgTIoiuzrkUvNaq1FbfWQkvXEzIuUCtAVWxDlE2iUA95Ge/I\nXFPrXYiwUhptdYVQOb9TJhkJBpRsTsq4erhnuoMFKQTiYIjjSAi5upZUM/SL9lVKS/5hMZTooYDV\nTmAyFVHOipayMj2TKqQ0YpREQ6WciVkRfSH3kbw+w86XtLNGZCpVPjIBploXlHpAWwb2kuN0vqgb\neSHFzGymdw4U/6X1nSjR3x4R80brt3/7t3nkkUe4c+cOP/MzP8Ozzz7LT/zET7zu6/75f/d/4ytf\n+grJL0n+iBvXf4rF4lGMa2k6w/4RzPcFBg4pEH1m9fIearsg9z2XHByoxP31bXI6FpcMrdFWmMe5\nOtYooxnDyHa7IYxeXDzqQViVPGgD1mZaZ+kah2stbesksunCfDsrKE1TP1dD9iO5BGJWWIrIakrB\n92v60xVdY1nM5wI/6aqU1LoytLOQx7I4FJXd7FmKO4GxhOGs6udyIZZzV1inAikrkUjVwkqcoAQ1\nUUrJBqUsIx134yVund1lobY8Oiu8cpLZupZnPvB9PPTs02AN67Njbn7jW4TB1zgkuQYZGEW+iZEn\nhEX9mTaF70kD53eXLNHNsqv9pQGq2nLWoAohRdrUSuGXIxqLa1uMlbn2arviU5/9FFobfuZn/gLX\nHrq2i0gDkcJJkThpc1XVw8p8vKSEtY4PfuBD/OR/9RN86ctf48GDs3esS3zTPERKwZ+uiS+9RLu3\nz2xxRI5RyAVJhM45FVJIpJh2bxbq8aR2IKnAfvUZnwzB5ULXuZ8Ra6lJu6dt9RqFeqhktNGIcbSB\nEqRSdw5lbO0UYWJuqmk+UySvTpiDEp9ijENbRE4y5eHp+v+17a+MH4F5lRETgEoqyuVCgoV1aMRk\nwDWOJkaiHwkh1TDbXapezU0roMQMPWuDtBdeAn7VZBMn3fcUdSRkJMk4y0rIsYPXDAkOtp6D/UK0\nERVDDaPSlZAExq3IZc1BbLifM7deFA1SN3dipdW8Mcv00Ucf5aWXXtr9/8svv8wjjzzyprfOtKav\nvXbtGr/wC7/Apz71qe94IH7pq19keXSZ5fI6rTlitmhwXcOsa2hbwxg2lOJFJuEVKreUzR55TLgU\neXjRQjhh62/i9IipsJDVlfBSCqF4dNaEGqpaYkZlKLHKfXStmk3BtdC1jqbbo5vv082WNF23OxCV\nKuL4YmQerpXIWmRHqSkoRdAMv9kybDbs789oZg60GMBXCqvYy4VIMZZcWck5RWI1i1c11iunenAq\nsXJTOlfS0DkgnwrkpMSlqcKtqpgddIUSdDimxJiXvHKSWJ/d5+kFbLaFu0Fx7alHePgDT2NmHZvN\nmvsvvci9516WuWY5Z+P5Ih2iU7KZ1OEGEdi8exh+z67JtOIiskCBpArZi+FHzms63+y+VimRdc3K\ngrbtZHShImebUz712U8ya2f89Cc+weGlQyazEq2ENR+Cx1onxhlTo8HkvJS4fHSFH/vRH+M3/9Nv\n8jv/+dNylrwD1+WNIVPkwsWkKfd6Tp97idnyCjl6sfUaR4neiZHkB6HranthuKoxyuy6RFOJOGpK\necheDiwlm4u4xdT8Q1Xkx9NIhax1dWaZ/B4rKWY6sNCVqSfQbcmldoPSpouwuYj3owFttXSQ1MPJ\nCONPG1c5PYpSqpi7QrIgB2KeDt2JCVod3VEi2UAJI9H6QAiGaMIOWtYYUpHOEo2U1vU9aF3f144k\nUSoxyAgMWkk4VKf7mBVJGbJtUJ0hlIAuEajGAPJT0bgNMd3nkrvCnX7NbRz9WrxQF5fmkubxBuuj\nH/0oX//613nuuee4ceMG/+pf/Sv+5b/87uLON5sNOWf29vbYbDb8yq/8Cn//7//97/i1e/tPc3h0\nKOSfVoKGtUmMoefevRXH987wQ6Yxc3SNm1JRU+LIQaO5YmF9eptxvMl+E3YG5VDIKZBSYugHSomM\noaffjiKBSapWxXIvGFuwDRhncG1LO2voujmNa0TAfrFDjJlia4eotDgYCfCJsmL2rUqhPzklnp1y\nuL+HdfUZKVLk5QjKB7IfyE31ui1IAacldV3VSlJPsWOp5h7mWLGAb7MLLFOckSAAxhpQdqdXzCWS\nMZywz+3NmkNzgsuZl7aZ+eVLvOdD38fsaJ8hDDy4fZPb33heZrkXdqmCHIaTtcS0egqrdyHT79lV\ndv84X7vxQv2jGDN9X0hTNmTOGGVAjezsk4oWA28Nx2cP+K3f/Q/s7e3xYx/7MRbLZTWxoN7rihCi\nkCQvCCIn4wDXNnzgAx/gRz76UT7/+a9ycnL29lyMb1vfRdpFPRhSpr/zgJMXnyN6j9IGf3aGW2py\nEQmBQDHuXHxPdcczMm+TN18zB5mua816K7WLzLk+9JOM4UL3rGunJGE19YMVfGuaFZYcpfNMVWtY\n5OeQjc4gWkdhnaqCCHMmaYWuf26mn+XCwZujnIGTLvIiybR6VuZpc9J1Nug0Fl1js+RwtcYRghei\njREzXVUUSYwrUVT7t2kSq5SoPciYVkFEvjZpMppNb7l3r+fhhw8oJmCt/HBiHydzx65NrLYv8bf+\n9f+bm5fuv+Yj/nO/8ME3v0ms5Z/+03/Kz/7sz5JS4m/8jb/BBz/4Qf7ZP/tnAPziL/4it27d4od/\n+Ic5OztDa80//sf/mC996Uvcu3ePX/iFXwAgxshf+2t/jb/4F//id/w+D164ytlNBcqjtKdpOlwz\nIyXwW4NORyy6ffb250Qvpt+LeUc/brmkFHl1j/sPvonJJ+wvJ7d9eW2lLOPmGD+IbVjvR9HqFbUz\n9NZK1XgqaK1h1nZ0syXzdo/OdVjnxH6wPhs5F2LKONPIIVUK0Q8Y19aisCbDlMT29BSdAnv7+7XA\nKTV3U50XcUmMLSRMs86b8zmBpuREjFMCuvzSurrPXDiUdmog5AC1zYxSZ/CT17BC4UvDnWFJGE44\n0oF7m0jqZjz9oe9j78ZVQoqcPbjP3ede5P4rD9j6C2YUsMtfrHjN9IgKueZN76p31zu9ppni1FKA\nNAJCNBSClB8TGiH25QKpJFIWpruiSOFfn7ObD17m13/zV9jbW/ADP/SDtG0rKgCkQfCVY6FVI89P\nqcSeuplfuXyVP/vRH+XX/8Nv8dnPfnEn43g713fRIVb4rWjSkNjefIU0Dmhj6U/ug1ZkayglYo2i\n0FTCjdoNN3TVgk1I4A6K1AZVKkFAyWxIWSEVqGrqXTtvyLl2bUoIMEYjtlYiZkdlJtFL2XV9egdV\nlkrckc5zSrHX4mNqFWhbYakg5tpZsgJ3gcOpVA9Jee2JDAFFNrML+srJOUZphXEOSbsSk2+jNdF7\nsWAzsmkWimgcc/WijEkq8QJhzBhTsFo6Wms1KSeJsFKFUBRetRAKzjjatsEZJ5dDS9+wWHaMec3N\nS/enY/Z165z4853Xz/3cz/FzP/dzr/m9X/zFX9z99/Xr13n55Zdf9/f29/f5wz/8wzd87WnNzXWc\nbtHakUuAoVBGJYYD45YrlzuskdRubaCdWfYOl7jtGQ+1ivH0NoN/lX03cnCwxGjJf1QUUk4M2zXK\nFMaY8EOhBCWa03xO6HJWkuXbxtG1C+azBV0zx1khdu2KW0TT6ONIa835HDBllC4knXaVdE6efnXG\nojUs57PK7qOiI6pGc0UhmtX5izZyX+ScyBP5BvGjpUQ5GHPE7OzY6nFYqqRnAhKUQLNKnxdIpQhB\nLCTHxrfM8yARWxkefeYJrr/3KYrSbE5Puf/Sy9x/8TbrbWSsB+1UjGYEZGlVDXUpYoSuy3e+x95d\n33vrnGgjzOvJAnIKKJBDMWNMYDI3iSkKebEo2llLsVaKRW158fZL/Npv/AqL5R7ve//7pBFC4suM\nMcToq1uSZrfJGUvOAWcdzz77fj70oQ/wta99k816+7bDpt/FDBFSkQPOlEg62wpxwFr6u7dlRrW3\nJzAkYrJ9kXBRkKpXTbZuVWwsjM8kM8XatRnnas4W1TDcAEJWwDlKEQKEtoYpYkfs0QxQSS5aDkJ0\ntbRCoFhVq+IpkFdpJVBhNRwv1cYqxygHXK3Ec5ZIJmIhq/NNsdTDS4FEDumJtAMQK+GoyjaMqaQL\nUZqcnmxwTabrmtoVnvtUxpIYR3bhs/1G03SZ7BIG0M7gGghRYOSxaL71YMNTm44bzQxTDBrLJL2A\ngtaWo/03/6jf6ZVzIcaCswW/HcVqTGuIiYev7vOJn/8Av3c4E6PgQbFZDWzunfCQ8syS59bZC5jy\ngIN9x8HhAVqfyjUomZxGfJXo+CGRAqSgmSa0piiszViXaZzEJXXdjJmb0zq3s1Cjfj0FQoyEMKLa\nFm0bxmEkhSjuSKWIBENBHEbG02OWraGdOTAKVaYDr8K5YYQo8gjUFHdfD7CacZlTIqVESrEiCnLg\nKl1QdTZ+saZWtSjUWsnoohaPWheyh7E4hrHH+HvcHSP7D1/nsQ++F9taNpszTu7c4v4Lr3B2smXI\nhXBhd5ru2lZDU0GelBVjLvTf9nO8u77310TKKmWyDZyaFJlJj2OskWpya1pVs1i1wWCElV0yKSe+\n9sI3+Pf//leZL2Y8+vhjGF2NUrQh+EgIEeem0HTZ+zWOojLXrjzED//QD/Fbv/U7bDaTtdzbt76r\nDjFTDzsKOilKSKTRc3bzJaIpdCVhFkuUM2gmhhHSJOqqZlFadCqonT9orliVVqbCiiKuF128qmQX\nJweWgewz2lqME0JOThGUwbhOIp9yEPizupiUiZFnJLWh1EHeJLwvIKG5ucpFYpS06THIULmkCmVN\nIn7JM6S+n1Lhpzj6CqFqEeyrIt1uqjnoOxE/xATrVcE1EVVKNck1AouqjPeZcahdC5CSIlahuNYF\npzI5adkYs2YshZurDXfO9nj4cEHJiTSOSKq23EwpRC5E3r5m/fIv/zJ/5+/8HfjqH+8G+tNcOSQU\nstknHzCzFlTk0lHDj338GR66fgnrLGFM9OuI94FlHHnPzDAe32azfpmDWeTypRnzxQRbFrLWDMPA\nMBS0K0RfSElRazG0BUPGOWgaQ9s6FouOxWxG0zhc06GMqnZ7E7wvB2JMGboZGI3frKvJQiRnhyqJ\nosFvt6TVKfudw1qzy4MEQwmB5CNJJ1L08t6zRDKVJB1iLAWtrBhUAKnaFeYYMIodKjFxFTQapTLG\nKqyV6lzbFm1MvRUNKWkGs4C4ZoxbmC14z4ffx+LyAT4E1idnHL98m+PbZ2xixtd9afoeRoPV57e2\n3PGFoRTG/yIO8e56q9Y0i/ujmmQLAjcFGJz/3nRCGitZiSFMeYpUcsyI6iskb5SEoGOhwDAOfO4r\nn+XSwRE/+3P/Ky5duUROYWeyPw59JdtUJLEGkCpgOV/wwfe/n6efeoJXXrmF92+v9+2bzBArmw6N\nVlGScAqQxULt9NXniUYIMp3RWL0AW0X1UIkGVuDIKliXIPi0832URALEHQSYdCrGujpGLKBq6G9R\nNF1LGDdUNY2I6Y0ClVFWobJ0laVuOroK8cHV2WPe0YtTlI4zhyQ6wnGQ34tBaO9F7OhKHOUlkshE\npISSkF5QbFcP6uxR3qfRFmNqtFMlW0yVFVj60TGEhLWZ2SxdgLkSIRRS0PXaC6EpDQqjoesyJQBF\nGKclF8YSQWW2w0BKhWQLlITSZdfB5hTJ5fUH4kUHmqd5+k9yH/2pLIWlpCIJ94jwe94YnnnvNS5f\nPWC21zFsfA0NHoiD57EmYbYnvHLn8xhzh8NDxXLZ0Tor23Lt5E5P1/g01vxMZJRdGaDasBPgt03H\nbDanbWd0TUPTWJSTJIjdDLkIXD6GLWP0qKbDtC3pOMhhmWpXV31543aDGXuWi4XoBi9Y7U2oRAqB\n5CeXJ1VhTsmNNEmca0LIpBhJNfIrpUxJfgeZMhG3lMDpSpUdjApll59ZUiFrQ2oXMH6DMcGN9z3J\nlceuSwbias3q3n0e3LzHug+M5RwenUYYranoSFbELE41oUA1DHx3vc2rfCemzIV18ekv3/YnWsvY\nWpyZdjOBOqIqO0ebnAplDOhNjzLCcpDmQmICnZv+TuSsz/zuZ36Pa9dv8KN/7keZz2eV3W/qLNFj\nbLs7T5TWuyjBJx57Dx/+4Af4g0//4ffYgViXpmBR4kOHQlITEquXXyBbDY0Fa+mUqR2ULOkphWWk\nSmVj6lJhSurGIKQd8rlptqKBEiV0V+d60RVKN5h5y7jZkGOBoik+kLuAopPRvmLHpFPKgYrkGlNV\nojixp5hIYyD4nhQjYRgJgyf6nhB6UpDZYa7GAqqIk8zkbWnqphZGj1KKB7duYZsW2zaCjxuL0aoO\nnBusawVCK0L0wBg2m4a28TS2CIRFJsVMCvK+KhsIsiIlRTGFaEHpgjGyaeasGIswau/cG+lvbGjc\nAqUt9oKNm/hqvp5J+u0ONO/0yjliqO7DRbOcOz7w4Yf4yI88Rtu0PLi9Jn0wszodCGOg1XAQtty8\n/SW8f5mre4Gjwz3m8w6rXb3mhWG7pd9Gub9iEY1ekRQL4yT1o200nW3oupZZu6BrFjjbyOelstxv\ngNBXpJCLwROKQrmWgsL3/Q66rE83JWXiZs1MJ2atpSK4QCGFkTRWeY4VaF6jq0RI7r1UyTvnxLKy\nC9XWgNVmt9lVkQUG8YrUKu+KMvmmZpeWEbNhtdqyOrvH/PJlrj/9ONoatpst65MT7r9yh5NjgUpT\nnUeaaSaJjN3jlJBeqh9qgYF32aXfy+t1R6ZiF/e0Q81q8X5uBnHuLa2A6CP91p+/gNJoLbiA1tVE\nRRVuPniF3/zt3+DK1Su8/8MfwDl5DeccPnhs08rrVj6E0hZlMkcHl/jQBz/ItatXOD1dX4hTe+vX\nm0KmIBWnVqX6ENeReoHhzilRP09xHabp0LbBNvZciK6kSzLGVEgxU7SlVA9FSRdQ7OS7wj6pcx8l\npWYR7YuaNWIfR0JbMSbOZOIYUP12Z7s2fZLC0FMCF6ZESZ4wBsLoSd4zjhvCsBVz7c1A6MXgOYVE\nCTW2JJ8bQ6eo5DBHobUc7CnKbrC+u8E2A7YxkmloFNqKh2bbzXHtrHpaKowrXHmo49ZNxbqPOJdY\ndPXHTtKBaJfRWm5QZyRpGgopgclZHOuLImUIueAz4snZD8TFAueaC5+h/N0p/eLiuuhA8x7es4O6\nW9o3Jdn8aa+De1fF9BeDtZlrjx7y9Huv88M/8TRXrs9JMfOlT7/M6qQnjEEy/lTm7p2vcLz6Bp1d\ncWnfcrA3xxkJZwapevt+JORR0h9SPQwr3GeaTNNoZk3DrO2Yz/eYdUvaphHPz2ogL+Qn6ty6kEtm\nHAeybVGtsOZSCGhqB1gE2kxxIPVnLFtF14kOsJSq84qZGBNjGslptttQYq6nDFmcQZi60mp8b2Q0\nYZTGlHNSzbSMLlidsUaeXaM1Vju02BwRU2AdDPfvvIRPcO3Jx5kfHTKOnu3qjNW9u9y/dZ/1GPEV\nSjMIeWYyArCo3feNpRCRw3B8Fyt9W9fOJOINoNLJ5EO95vfqKjsgkMnucWooiirEDLYapUgXqfA+\nk4uvBZkluUhf48ta1wjJ0RRiSXzt+a/yn37rP3Lt2jUeunEdirgr5Sw2gLqVIRulCBqiDV0349ln\n388TT7yH555/Ce+/Rw7EaQnBv7JFpylCKcSxEG+fotvncbMl1rWY1sqmATtigNaaEAI+DljnsY3B\nFtBxcvUvaGclncJJRTtBotNwt6gI2pE0hBwxcaCkRPQB1vWRtVXkXiTWpiSxzMrjSPSecfSM/cjY\nr/GbFbEPpJDIYyGMFYKayDJFznVxwJG0aVXlIkoBpuwO/jQW8SMNqULiBesUphkJzYDtHCl6UArv\n1xxddphGc/9WYtP3GJOZOY01mraDpikYKzfo4YFm8IkQ5YrkJD7ijVNkXfClYJVmzyRIg5QJqkBM\nu0mOsF9f/7lefIie53n+xb/4F3zqU5/il37pl173tf/gH/wDlsslf/fv/t3X/dnJyQm/8Au/wC/9\n0i/xoQ996DV/plD8xff/n7FGoGytDK51kPSOVGKMA52qbjDy6I0D/tyff4a2mZFDod8Ebr+05utf\nvMX44x4HzIzEk91ffYGi7rK/V7hy7YC9/SVWKXzsZeaXC9txIJVcZQJyGBqbsVrTNZZZI+zcZrag\n6Ra0TUPTdjU0t9rmkShlkjyIxjVECcRV1hFDkBw4A6qGpBpjIGZ0GGmMCJSl2DXk6ElRnGdS1c3m\nMjGxSxXtZ1KKhJRRGCHJTAcqwtLWU8rL9AuwOmJMxjpw1mKNq0QrMXTu/cD9ky13bt1hceUyB49e\nJ5EYNhuG1SnHr9zhbDUQ6mGogJmCbpoXTuSCAqGck23iu7PDt33pStxL9b789qVAmpF66k0mKVA7\nQYrI3Mq5cYgYQ0zND5hKJEw5k0uVF4XMsA1YI/Io1FgRMYNT1XqyZLbB85kv/gGPPfY4P/0X/jyz\nms6itSGEETdJmYqqgQbCq3j0xmN88IPv5/d+79M88Kdvy7WE7/ZAVAqjqInhF54GNGmA4dZ91vPn\ncI1DNW6XOF+o/t1k+m3Py7du0m+2NK3j2qU99peHNEZjrZUPNlni6CnFU3QR2zYr8Go86WHwbO4f\nc//VV7n26HWstgQfyN7LB9iI7VlKkei9HIY54ceBYbvB9wOhD4R1IPlMDkU2pKpD2xkCmN3Ar3a2\nSogXGnlfBYqaJiXSyeYsHZ4wWYUFGn0imozpBaZFwXB2SnGO/YMWZ+ec3M+MfkSQZ0VX54/GRLRS\nHBx1uO3IdgjEKGSbxhqKNXiVCCWzbxoOXUJHjwoe2jlZ1c28JJTSYjzwbetP6kAzrcPDQ37qp36K\nX/7lX37dgQjwqf/u/8lkqo46r2rZ3UWT/k9jreEPF45fnbsqx1P4ITHeiPQf6nnw3ld44ps3II2E\nsMaSuHq58MTjV3nk0Wu0zpLigO8FvEs5s1oPpFhkfl2k2LC24Fyhc22dFTpm7YJZM8NZgbxRiH6v\nKCFdlUyInlyLtZwKRbVo21bnosmU2yJRTREdI8YPNOJlJPPwSvYSYpT8koDtItKbJJZ9MrSvI4pS\npT11rh1jwA+jxJ/V51IrOUytkoQOo6qfpDVCqFGKmBKbfsvLL98lJjh66lHcwYJh2OK3A6u797l3\n+4QxTe9SOsP55GNRly/nkU8JgUxjRSPeXW/PEnKTFNK+FGIqVWZUH7XqEjaZrWslB2guFUG/6M6u\ngFwmn5B6yJY6XywVKlfVJUkY84NPlFVPUdAtWjFdUgWjZxgz8TgSD1b3+E+//Zs88sgjfOgHPoSx\nbmeQH4JHqWanpVUUUikcHlziIx/5EIdH+xyfnP2RyUJ/3PUmB6JcWsXk7Wl2B+LuUhZF2ni2r76K\naVuKc+eJyXVGqLXG6Yb18cArLx6Tk+bBQ6fceOyMyweXmHUz/DhidUMhgSko47CdHLDbW6cQI0lr\nbj9/B1dTBFIK5ORJoSeXJAxVrYgx44cNYezx40a6wnUgj4Uc5FecPnxVUDNoGjEPMM7s6P4yP5IM\nxZwl07GULHKMUjBOshnn+y05SvJ4TlI9UeHPVP+dk1zDcT2i24Augdmsw1yds7qfGL10kK22GKV3\nOYdNOyW7J3yQ7xtjZjMq7vViRnDkYG+WMUqTYyGlgkExGRgY58Sc89vWn8SB5u7duzjnODw8pO97\nfu3Xfo2/9/f+3nf82rNnb77+toL64NUHt3ptqgsH5tSJxUXeEYQMcHJ4n9OjFQ99QfPYtRmPPnKJ\nhy5fYs92EmvTuMp2FruzGHy9H0HbgjaFafTtHNimoeuWzNoZrWvRpk7jajGXq4g4x0SI52HPMUVh\n6GnxhhW/3joDRQs8OW4gjFgnYnxiIoVICIlxHBjGnjH0mG5JSVGMlKPHGi3+tUVkPTkXihKbtlxb\ntMlMYtJaTqQaFGgjDEFjHLZumoXE4AcenK25dzLSXn2Y+aPXCHFk2GzZrk658/JtVn0Qs27kLc2N\nwurz7q8gm2yaQJICHkEr3l1v41JyWCU1ySHU7vNXKEwlxVysUUr9i1OykKr/lLQhtbu3dA2qBkUq\nFdKshyJqyowt+JDotz1FRaxVuMpKbduuSpUsqSS+9erX+Y+/+R+59tBDXL/xMKWS/oIXXaKxMm/X\nVWpkTct7n34f169f44UXXiGl74kDESqyvON4qInOdn5pydEyPBiJ5iWSNTUgVT6kVAolRrrWsVgu\n0OqY7Auntz3W3JfqJnmsaWh0oMSREEewjna+pB8D6wf3MGNmdboiZcVjTz5KWK9JKRNCgN4L+09Z\nssrEGBm3a/x2wG89ccgkLx6rWYHqoO0MprWSANA02FZSAKzRaGVrBVNvjhp4mcIgLjI5gza4Vhzh\njx49IHmBb/3Wo4ZIjheIEKlUm9VCWCf0GFFjRM8ipm1YHjVsVxo/eDKBgqQdaKHxSdGRFP2giVmx\nCXBna7jlM1YZLreF5bxah/UDqhlQE7lJa4FQ8+u5f38SB5qbN2/y1//6X6+BtZm/8lf+Cn/pL/2l\n73gH7X/5etXXnd9DhYK1hr29jm7maiGi2K4DTat3PrD9ZsAPgRZYOAPZ0/cndK8YPvY/dTz+yCUu\nXT6ibRpKEmJSLJkxSOpEyuIAJKkmBWslI9MYYZS2bUfTOJq2oWmMhCVrpJSYDpgsXV1MgZzCNEIn\npYwppjKohdCSUybrLB6jOVFiQHvRVJZSSCURgqffrlltztj2G2KOLOaXmWLQYooY3aC0IodUK3TJ\nkcslkpMnhkgYB1QuFzbB+pErmR7YujmJ2bJsYMO44fa9NcG0LL/vCZS1hH7LOGx5cOcO9x9sGKeA\nXyVQaVtf+DVbkqqeqUiH+C679B1YpcKYNTvV1EJycl2a9p/p3jvfswGt0Yqqta4oklaVRa2wRsvW\nkzMx1pGLUdV8Rb6J1ZqUMuOQMMYQusQ4CPNea0PTuJ2kwxfP57/yGd776ffyk0eHzOZzlFLE6PHB\n0miDLoWiFUaLN/DjN57gAx94P5/5zBfo+3FnLPGd1mRVmf+ElK7vCjIVj5VaTVSRPgiLFDSpKJKH\n4W5Pti8T/SiklFIkBqZknNHsLxe0rSH1AZNgXCnWY8LuOWZ7+9iiUCwwcRSBfzGYIdA2C1arDYMv\nHB1awuaMEz/gZnPREcZIIZCKEihpOxK2gTiW3SDYdQ43dzTzGU3rcLOWpmklDse4HR1e1a6KnEkx\nyMGuNdo6ijPS/SrB3Y2RjXD/8JLAXzEJSWfo8UMk+iBZe6FazRXQSYFWlDGTygipYLqGvcOOYRvZ\nnJ6x7qN4CBboxxHvE8MAm6Glj5Y+F17yiVWKXLKWvTYxa4VoVOIA4wDmQipDLt+2m52vP64DzUc+\n8hE+85nPfDe3D//N//5/x+XLR7SdYViPPPbMFV55Zc164/nBH3mUZz9yg5e+dcr+5Raj4OxBz2c/\neZN7t+6jNsc81hnef2mf7YPneO6F38H3X+PhSzMee+wSB/szWifIRcqJFEd8KWz7gRCC2OW5vCvo\njAFrFG1r6doW187p2hmtdZJvqOV+ES95SZXIdZPIuZCKRNNIWoiwQidnJqUMFRqQTM5SYAyoIPdR\nThm/6Vmtzzg5fsCD4xOGsaftHN3RyGROP3nUKy3ax1hHEEZXcoSaSGrl3B/4ApwpZAeF01rgX9NS\nlBZm+HrgbJNpHnsCe+mQMXrGYUt/esrdm8f0oxjhlwIOWGixZYtZVURFrmMq4LNsviOF7bvd4du+\nLo4eFJP1oMLWpkVm0uXCQSe+yDGn3bzZGCPzR2SvnDStMdUc2qnrZOpGgcKu+xSTQYNRGj+OknVo\nNLmdTo2yO4xP1g/45O//Dk8+/TTPvO+90hWiiCHQ2IYpWVqMWTLLxZI/8/0/wL/+1/8DfT++IWz6\npwWpvumBqBDShlXTz6vPN9citlMRJZFEgyLeWpFGebhLzoTqyGGt5crlS1y9dsRL/QOGIWOCYfCG\nwSfU/VOG0y1DtngK1ijimNmc9Ywbj06Bh6+27B/MUboRWyoNMSa26y1OJ1QpxFEqmuylC+iWLe2i\npZ3PaLuOZt6JSNkqtBGh82uKijoMTJVYk3KipCCbo9JMobN6cv9TugYWF2gKXTcnhAUhBcI44Lc9\nfh3QZkPJYI2YE6ScKaGQiShdsDPDfDlD4dmu/S5X8vS0J0XNpm/oY8dZMNxOnttxoAAzpelswVqH\naNPEKMFeHPgo/V88EN+O9V//r3+Q+axjDIW2MSgD9++/xCsvnPEHv/Uci+WMYVP47O+8SDuDzWnP\n9kHPUfI8tbfgig2c3Pw8r9z8fcr4LR45Sty4cYlLh0saLTdx9p6iFD4FBu85O3tAyQmtwZmya5+M\nEaJJ5zraZk7nOmbNjLZpMVoyCnMuO1IXSuZ3qUJEaQq1VhBTwdZQYYoYt+dpA6gHoMoRnQI5jvjB\nc3ZyzL0Hd7j76gnrTaCbwd5sjkkSFQUT1F7lRgVKyeL2oUT7GgaRagTvIYqZONR/KZn1GSUh1UKm\nEZKa91tOzjbE2ZL2sUfwShPGgXGz5uTOPc5ON8QJmlZyGDoFYy4M+ZxkAewg1Yx0h2+vWux/2UsQ\nAbUbq1APOmuFcCW5s4oQ5b4ln3eMMneUQy+niXRV6jw779Ab6v2ulMJZLXrZKsGwVVOecp0aK2G5\npxLRKKwxNI2vHtaCXOWcCTnxzRe+wR/8/u9x7fo1Dg4PUFqRciLnIBmhykm3qhTaFN7/fR/kypUj\nHjw4feMD8U9pg3uTPMRSh/XVDg15sM5nCYqEIhVNKIWEIvea7MWfNMdEyIaUIlDYW8y58dgV+mHL\n/dsDp6eK8Sv3ON2/D17zYKV40RfOYmJmHLpApxSPXlI8db3jyrV99vaXaNOQYsSvzzi7e8qwGlnO\noHVC229bh1u2NMs53d6Sdt5hmwZj3C5XkVJjqopo/AiFUiJU4oII7SUANkXRsGkjdnPiUiPdIaVQ\n0ogkXdgquTC4MiO1HblbEJcR607JKdEtGukYUz0UUyKPgZh69CzTzZraqQzkWFidGmKyrHzHKlpe\nSQO345ZQEg5Ho9i5laCogcQRU85tlvJFj8J3YL33Bx7m/ssrvvbJm1y+sYdzhgd3VpQxsi2ZL/3B\ni8z3ZpzcXRO3Gw6c4v17DQ8ZRzh5lW/c+hynZ19mbk54+Krh2kNLjo6WzJoGJoehIpKeqIzMkMeA\nNrJBuEagchBm6aydMZ8vaNsZs3ZO08yqa0bezcSo8V5FawmUzoVUDeMvsixBVbanfJ0wW1S161Uk\nP6JDZOhHTo7vcevmLe7fWbE6LlgL86OG+WxW3XAcudTqPCpiEi1uCmIUIa5GYgCRg7xvdVGjtYPI\nKsvZnBvZpziy6QdOh4S+/hh5uSCnSBp6hrMVJ/dOGcbIJLfsNHRKyDOnGcaiaC98n1wmMj+M5V12\n6du1JI1e/lvXolcj95/8Obv6SDSBRvY6DQmB47WRbkJrCCkKpD6lCVXo3zqzi/oStn2dqZfKorcS\nMJ2qdKiUQoxgTKaNhTBKkLsrtiIdIjs7G0741B/8Ds8++ywf/jMfFmtBJXyHqi2CoqsPc+TGwzd4\n73uf4VvfeokQXi8d+9Neb9whquk2V2IdRalvrFayIDBlZZpllFikpSJuNlGq9dhI1eus5eqlS4TH\nAx23uXsnMQbF+kEiRMWxd2xiYsxQYuGwyTxyaPngMwfcuHoJkzLjyZp+M5B9IoZI8pn5fMbeYUM3\nm4MRo9lm1slcsG2EbDPdJYVJUMOF3W8yhkFAhlzzERVyQObKli0onSXYF71zY8/Bo4yu+XSSnq6L\nUOLVzFDmBuMs2mgOruwzrmW2OcZASIocFUlFTMqY1ok1kpWfOOSOs8FyP2leCj2305axRCymdgHI\nhl1ks08xEmKg8f0OppXt6p2TS5cM7cxhjeKFr96nWzYEH6rIPPPyN+7R6sy+1lxbaK43sOCU269+\nmZu3P0fyr3C0iDx0eca1K3sc7i9prUGrQkKS5VPK+Bjoh5Gh72ms+I9OVlMhJ1QuOG0lxaJb0DYd\nTdPtXJEK7Lq/XKjzwiIzyTiQciDlxGROr5XcDznHHVOUokj14Scl/HYD/Yb1/Xu8+vItbt1asVkJ\nOWgxh+Wyoe0czlm0hpirKUTV++aSJD9TCyyUk3SGk8xjNxu+eCJp6oGo0Vqug48jZ5sNW9eRL18h\nGkMYtgzDitWDU05Pe0KdHVoFMyVKzrMEW9WQVEdhJNPXb1ewSjrD+O5p+LYsgTN1bVI0xkxkl3ow\naoUxth6OGh3lPpQQd7AWxjGglMYaQ1KpOoAJchUQCZx1ZmJMCnyea3FYJEYvKzkUtVYoa+qMW5NK\nZhwCTTsyBSCoGlwkrG3pBl+68xK/+8lP8viTj3N0+UjIiPV7pZxBVeY0hf29JX/m+7+f3/iN//Q9\ncCBS2UpK1+Df8yVbrN4N1ScZtKk9dCmQgmez7RlbS8kF5WCxmHPj+kMcdC2PPjzS957VauT+yYjd\njLgeHowOayNPXik887DlSmeIpyuGMaK0wZmW7kpLN58Jdq7BNY1oGGsquNYOiGKfpeoPmBK5QkyK\nskuXyIj4f3I2UdbWmyijbYNOhZw8RVWXkJRIqkJqhRoKqyj4mmQgeruJw6WtUIyVMSwvH9ItRobV\ngN1u6TcjfozSLVZxN06gCNsYDq50vPJS4cXgeTVt8DlW+UtNKFeKVAoxZxrjKGPEjwNdO9bPayIz\nv3Prs7/9IpvTLbdunnDn1oYwRPqzNa0xLK3jkrM8vJhzrVOk/i537nyd54+/jt8+z9yuuHTVcvXa\nEUcHc+ZdQ+ssGjFeR0sRlhXEMLI5W6FUEgNwzqfdlILVVuaF3ZzGzWhdx67uAUqOAo1WuCgXRUny\n2eSUK6wUdjMRa4W8ouv8MEWJutHaCAM6jqxPjjl+5VXuvXKXm7d6NluDVpn9Q8PlqzP29/Zo2wWt\nazHWEHIihFBngpqSFWEMaFvAaoFvYxA/0xJRMV/oVuX92t0GpIVskDOj33I2jIS9h0nLOWMaCX7E\nn604vb9iM8QdKaZVCqtgneUwXO5fodDg+/tQeimEkes28j8PZ5pzGuB3/v/v5TXtu0qJhaNWQjzR\nWmGdxda8VKiyByOQZtTn3WQumqZpUKoX9yyr6fttvXeFdDNrmwqNVglQRZi0kWPCB0H6QPI+Jxcb\no43cbxjGELG9pPkonUHv0XYN1jS7UUJIgc99+fN8+Avfz4987Eew1pJTIWuZk+cLEYDWtXzgAx/g\n4GAhZt9v8XoTyPR8S63hga+5i3IRyHQSFE9hRrshrI9sjk/w8wNSkq5GW81i0THrrpKOAn4MbNZr\njk7W3L17F30rklJD1xTmprBcNuzt7aOzwl52NPO2dl+Ih2lBICpdwfIcZTanEjvMcMc6qCVLLhQl\nFlm5DphJYoA9VWGi3tZiXussEb/rCAtqZ/YNlXRRuwpVMxFTkdumlIiJkswxFRdmscS2M9qwYL7t\nCYNn6D0hBsH8i1SA1jbceOwKX71/m7vrnr7EXW7ZRJPWiH1WTiOKhmwgJU8MIyBVo9UtKXtunOyh\nDi+WNW/9Orp3hU//28+TkxcYpcC+bVm0mmv7c67MOzoVGbd3uPvSt7h97yv0m1fozBlXF5ErV+Zc\nvrzP3nKPxiCEgSR+nqhCVuBTxmcYtgPWKRZ7R7tsSqlsM2honGM+WzCfzenaDmd0hY/EezSnstPN\npiQE30yUw63kCmFO70ygHgu1alfVxWYKlE74bc+dV2/z6pdvcnKc8d6waCJXjgyPPnLA1StXaVuB\nyG23xLqOlIposzRV80WdqQiklaNsQikl0rYn9xt2jKG6jBENr3WtkCZiYLNZsy6adHiZYAxx2BI2\nG7bHx5ydbfBZsBGHQKNjhk3W4PZoF/tQIoTpesqvoGBbvvfYpYqJZDRdlHLhn+dfNUG+/3NYWgkE\nbo2msVYOPa1w1u3cjHIOaGWZoCGlFMZZFNQczVSzC+s9Sqneo5kQE03jMHV/JCuSytNYGhAdttzr\n7DSKsoS7gBYT8LEPNFYTXWb0A9YZoomVV1LIOnD7+BX+86d+m6ff+zQPPXKdkhU5a1TJVfZUWdLG\n8PD1R7h+/SFu3bovB/VbuN7kQLzAXmJyqZGrUIqqrgXyteJvqHD63FA4Jzi9d0x/2ZDSEkqzQ+5U\nkVtSG41pGppO4xqN05mlSZhSCF5srLq9Oa1uIIkWEAVpO+xwaVUQ+K0kVKmsP11QphHHj6kN2H3Y\n8uFNXjg1g0og0VKNtXMWo+6mlcQOpURykRJFF1D1+xRQTSeHU4XZpOsUOYIiCwyWZWbpx22FcKFp\nHW1jyVmKinEciClLxFM7Yozl0qV9rl26i70vB325UANYpWh0wZAhWyjSmZZYSFGCkhXIUDwY/j//\n2+9HlwQ5VDq+JC/kXDsb18pcKUneXkiSHdgPgeOTFQ+OC2s/o+ke4+jSMzTuMtrsEbXBRxiHIJoo\nM3nYSsHh7FZ0cXPNop3TNRatewr3OLt/h2/d+QanZy9BPmNuRh7ZTxweOg4PDlkuWlpnabVITER6\nIHmROSvGMDLEkfUwUDJcunSIaRxDn3bUy0zBIvZsXdvSukZSJyohoeQilXGuusci7jA5CxSdcyCl\nQIyRvNNDyb/VFEI8dffUdAkts/P791Z883aiJM3VeebG9ZbHHznk8pVrzNqFQErGYBdzbDcTlMAn\ncAJVeT/S9xuarpNg4Sym9CUldCnyPFw4DRVgHTRO0xgLGnwMbL2i7w5I+wcyDx0D4/qU/rRn2weB\nrJDuEArrooi6pesWxFgY+i06xR34HhGXmvEt3qD+qEvX7lZXtiSVJFIAr875DxJxVD//d/DnfbMl\nCJh0hK01OFe1pdYJXwGNs67604JzLc425JzY9j1GadqmJdoopD5n6fstCkPTtBSV2WwGrLM4Z0hJ\nnvvpqqg630u51Dm7FOMFSSmSSLtqS1nk3vc+SrKMFdh+0BLKrevfVxl8GfjKN77El774BS5duYxr\nnHBNNKAMpu65Thv29w55/PHH+dznviLOZm/h+q5kF6WqmjNx9+BQeQO5TA10xilw02mIHJqnp7Dq\nRTeVYkDremjVlluilSReiZIwKtOaROMiM5cZhy2r1Rn24EhIArbFzOfyfYOHIknj0ptqIT0kYSwZ\nnas1HJJuUEN8UUVgXSVEioL4nqI0RUvnqJWRD9AotGsoTSuanVhhg8k7tRRs28lDl85NcBNUwkMm\npZHaZzPGhE5BCgITxIykvtZs1lJqV2qUrgda4qiDK63lNAo2ppXwB11l/ypVJDYoZnSlQqccEe9L\nTdM6eZdBLMJQuUZk7fAUCsKmVapajslbFDu5xjKfWY4OPWebgePjL3PzlS+T2Ofw6Glmiys4txTq\ntFJEMgpbk+EVSq2hfkLj5nlefOkFNv0doj9Fl5FWDxy2kWUHR/sz9g4Pmc8aOtdgKhFGIbmBRUWU\ndmQlYbRRweC3jNueg6MDXGMoJTNlgE+b3azpmC8OmbV7ONNiakFTSiAXRUziyZnIxAwxJ2ISp6Oc\nI94PxBDISVc4SdIsFMJGVlqRvK/FmCACMQROz3rOYuFqF3nPIy1PPXqZw4M9rC7k2FeqtKZET9ZK\ndIYqkEojhu854oNHG4dptWQfak1OEb85JcZqsnw+7seaiXpfCL5nHDasUyZdeQhvHSH0jNsV4WzL\n9nTAp3OEx+rCUGBUjnZ2wP7hkjEmxnFkniKTzlvINO/kZPr1S6OwWtFaU+en1NQZ0bWd6oFIqfd1\nldFM4Gn53oRQlRaBfdNYrJMMQqMtbTOXor8gxiZR5D1dO6PpOmE4132inc1IKeKjJ8VEzhrXGKw1\nRB8JPgvzunEM40iypXrB19lgjcJLuVR9tjD4Y07nzjVKisnJDSdFGIYRbRTWNCRJ8dt5WucUuXf8\nKp/97O/zvvc/y0OPXJc3PEG/us5KjWI53+eJx5+Unze+gwfiVHfqytCD847w4gOoSkar6jR14bYq\nwOANqz7hQ2Aup+duQDu1oKrqvawxNG1Gm5H5PLOYGZyGB3dvQ0zsHR5K1RsCZn9Z4SrBKkuKZC/G\n3SlKQG+OGWWnNIB646vKOKwHSQ0aRDuD+LNNyRpTIGx9R8WhU5Zk8/paIjYv2Nmido+ZQiOHCeKk\nUyY9T32dpG2FKzIl5fNrp7Q4taQpAUQg2aFfM7eRpxeKB6PhJFZNmlI0SmOQFI7oI6nzO+gueTEr\n+PLja/43f/dTO0JGzmIhp6hC+XLuOjQhzDD5CrIDwCdyjswNpmy0Y2J8npjrvO182rH7JU3YlGJS\nah+eMercGX8SyssGFtBqveveZDivzglPZYK/5BqlJGQWYyzGeuDu7md87knP419TONOwWOyxmM1p\nmrl4lFbHoVSKuMOkRMyBmEZijIQoDM8QxQc3RrHfK8XU71kYtoF2jDuxfooBtMbZRmywvMePIzMD\nNy4Zbjy0x3I5R1HwfisyjpzxKaHblqVWksQSk8yqiwj9Y4rEGGmsJcaREDzkhM6eyfB7gjIBjFUU\nLT6+Pns2Q89WH+D3DxhTZOi39OsTwnrF2dpXA29Fq4QYtymg3YLFYoE2MGx6YUapiU4kBd9Q/nTn\nh3/cuV6907BGceXgiEeuPUwmsd6uCCGQlZTxKxNQKmKMYTlvCSEQUiamvJsbf68dijsXJ63rrE4Y\npYWM1QbnnITtGo2rTlspeox2zGZzcoo1zV4cqY0u5NJjjcVZR4k9TSvOTiklcslYY8g107UohY+5\nfm/5GpSWeeJuIiXMVFXnmxQljk6h0ESxGYzRC8FrSo8pUqx9+Rtf4etf+zqXrlxCtQqyxRj5LIwG\nYy3trOPhhx9muZwzDP7NL9qfYL05qUZNLgBCK8/l4gmtdnj9tOWXC6hzQeEjnK4GhmEkhyTRSVo2\nxXLhe1hjaNuOvb0tOQW6TlhU2UeGsOHO4NluNiyX+3SLBe1yhutm6EZYpORECQETImn05ODJUXK6\nVIWwppNqN19QyIZrhIwjycS6EmNk7nhBlgohAFZ0NaW290gHiTHSeE4hsih0ckQ/4qMXWYCCUCKq\nqN0BVIr0MhZQWUFKaKUra7Gw3q7QeJ7YTzwYDZ9fZWKNYzFUqUCSOK6cEjiRfuRU+Jl/P0NbS7HV\ni7AKyCfjXeqnNBn7Tp/ZTrC0O9Cmz1jV7llu2lIKzmVShRenRO1cEtPL71z2d6PcSgjSYpUnht7V\nTaX++e4nmf5imTb8WpQhbLSUxO/VuWZHO784LXrym44f/1XDrJmzXCzFsNsq0DIfjDmSUmIMkTEM\nhOAZxxV+HIg+UooihkgMMiNJvnYVAUrRnNxvyMvCOGQ6pep8Q2z6tIacEiZ4ru9pnnx4yeH+Em0N\noSSGMND3G4btyLYPtOaIx40ljb2MG3aH3DQjjrJJ1UKtpETerAWm/bbuRhkhioU4MMbIysN4dEBv\nHDFE/HpN2JzhTzZsooSjCUELQoYRQ2c7MoUxjPjQk/OIz4EJoO1L2YUG/2mtP+5hqJXCacWim/Fj\nP/zn+Mt/+b8hq8TLL73C8998kRdefp77p/e4a9YEJa4q+/v7jH7E+5FhDOKMlL63DkUplKXDnYxR\nCgVjtWR4VsN4ZQzOakqW2WLbdjKCGXqMbunaGUobxkGsAl3SWOOwxlLaloWS4jyXzBB8DXJPKN2S\nc5KvmwphUe/vnu+Lxb6xErkm1pZAUqQQCEFjvRNWLNPcXqDW2/de4Qtf+Dzv/+AHuXSlAS37ida5\nonCWtuu4eu0hjo4OuHfv5C295m8iu5B/KKb0CZhmiK/9snMvxVw316liHROcrjO970k54WoFIRte\n7d2U0IW7WcdBWpDGHtNCUZbhNFBywrYB70dWxyfMFi3z/QWL/SNmywOa+RzTOrRzojU0jhwcJQVJ\nj0KLplBLQgDVykihKXWGA9SNt+7+dc4o/AiJ6yml1KjCXN/D+c+vp8MRR0FmXNaINdE4jjt7pWHo\nK5wnpJBSlECgSlixFKEWxyTfb9OfEmJg0Wbet2+47x03h1itAeQGS0nhA8QxYI2VOaJS/OX/3vFX\nf+MqyytXsXPJScwRticbgt+i3bS5ZigZlRGNWxXcKmN2N66YEpidc0qpBUVKmZA8MSVyEt/DFHqC\nF8OBghKY0Xtc22E7hyajSmTWzWi7mVhO5VRd+XUtFqQwKFpmnCknQkpo41ive1anW2Zzx9HlS3Rt\nRyaTUcScKMXjfWC1PiX5wHzW4YxDK0cpCp/EpHvwG/w40g8D4zDgB8+4jUSfiVGRomhAfVL4bBmj\nZsyKPsqs8FtnMw5PFB8eIvtTcHAM4gqDbGSNhqMjx+VLeyjj6Mct/bBhu+nZrlb0q8S6d+xfnVGM\nkQM4RunmKxlIvCMzYZTquCghGxB7chnknr14KGpx7RnySCyZbZ7jD64w5MgwrOnXK8pmpF8HxiLE\nJFuf5IFC1o52NuPKtSNi7lmtpQsP5byIHUp5R8k0E+pjaixd6wzvefQJfvZnfo6f/fm/iLOGYTtw\n/OCUV1+9xde+8jX+2/3/ljv6Dq3r2N+7xLpfobSllJ5ShlrI/dFT59+qNbFJnbPMZh3a6MqQbnDG\nCbPeOIyWDAsxCbE454g5ChMVy2K5EOjVQCmRFKu0y2i0bjFG0297writEg5hTec8IULnyJDscRrr\nNDFOxvKSthFDEi/hLHtrSoVYvZVT9gxjoG1aGt3WcOzI1m/5yle/wEsvvMD+4T6NE8G/yYpSRFrV\nOsfloyOOjo5Q6sW39PP5LmaIRdzRK5tsB8/w2vmBRu3M0y8mb+UMm16xGQMpBkrMu9lbThGlDNY2\nNI0QMLTaJxgoOWK7jkU3hwQpjow+slmN9Oue9dmK2fKM5f4lFvsHLC8d0C33RSTdNGjXkHOEnKU7\nrHMdNZnWThtISdIRliq6L6nONaOUaKkeilMS6iQgvdA7SmMpRJnJQscgNxIDO79PgHGzkb+rZJZX\naldVioIihtA5B2KlOG9WW2KQGuyoibx/bumjw6cJylTkbCRZI50njOiSyBqC3zBuO7QTv1bTaLp5\ngy6JhOD+GEixoMkYskhXpsovS+QQU8hsDqgSKblgTCssVhy4TsgnuUC7oFBJO8ZIvl+M8rpaSXGR\nMs4ZFBHypJnTEs5MktleFsf9Yoy8fvH0254YIpcvXxKTBifmCfKQZCiBmEQ+YV2DM9A2lqIVPiVy\nDIxxZNuv2W7OGDYD/Trje4X3hhAtPhmGZNgmQyiK6tUu88UicUcKGLKixAKpOnzkKJmaxlRSTYIc\nWS4UWWVO1yesVvfptwPDuuB7xdnWsCqO+fyQosHHUWRAJVXEYfqM1K4CL0n8ehkGgTB399B5J5+B\nkAJjsMT5Adt2ToiJcbshDD3lbGQbyi7iSVc4dEBjdAsUbANkYTZmVRh3cLWQat7ppZVY1FmjWC73\n+P4P/zA/+rE/y8HhHtZY9g/3ufLINZ5+/9N89Md+iH+x+OeculMeunqdP/dnP863nvsmN2+/wom5\nDyqT8iCaOt75eaKuqFnjLF3XiY55MnJXBte0OOtw3YzFbCbetiGyXC4xVuZ3pelwtqFrOzbbU7qu\npW1bXNvSNjOUUgzDln67xShP41oh1XiBWQ2KkjU4GEPYiehDiNMWiNbsoqdSEmMKVUlAOSdSEuap\nGqIYplhNiuf4YMqRF199jq995as8/d7vozloJMAgJayVe7pxjitHl7l86Qpv5Gf6p7G+C5ap2mHJ\nwp4s3/YVALWNVvo1fzoZYA0jHK9GBj/QNC2m2owpdQ7lOWvQbUdrFV4XfD+g0MwOlrSmI3tPPw5s\n9JZhGEg+Mpz2pPEe47ChIEbZTbeEUnPDjQISaFNRwDqLmog2SklF6EX8XHKUP6sU9BJj9W6VdyOx\nJ3o3+J1YjLppqhOMbFaVXikbZblwmeAC4cNQgtDnY4ykWA+0XHYdAcA4yMZotFgZPTLP3PeOF/sa\n2gmEpAhJE3MWG6QEJURUlmsb+p5m4bHdAm0MzbzFNpah7xm3G5Sy4tWaQy1mpCOT6rn+3NV8QA5z\niaianIzEsqmaoptU0QJxui8lYXShOFO3aQXKoBqDJlGUljzEOjMVc/Ms4t+ciUDxCRiIMeK05eqN\nh7BtK0St5EnlXA4R4ogfAyHJfam0IaJJwVPGkb7v2WwCm7Mt/SYyDIret/hoGLLBZ0UomlwLwFzE\noF7VQs/WWbnWhUf3Eo8ewV4rM+fJy6ykKsNJkZwjMQ4cn9yhX3u2K0/YasbRsgmaVVLQGfavXSJT\n8N5TSiHWQGdnGrSy4r7jPc44jLW4piFlsyvsLoz0yciGEmNm8Irx+hHbkhn6Hr9dUbY9ae3ZpMw0\nEddQu0VHa2f4OHD7zi2s09UpJ+IvfJ93ujtUSvSWrTU0jeXGlUf50Y/+KO/5vvfg2nb3RaZ+Xk3X\n0OoWi+WhR67xf/g//l2+/Idf5Q9+/w/49Oc/zde++UVeeOU5YvRMhL938v2JzELjXIM1LVZbtBGZ\nhTVWDramwVkxpu9mLdv1lqZp2N/boxxmjk9OMErTzRz9aAkxMp/NcU4CwPu+x3tPDImmm2Fp6nzf\nE1LCOgm0FjtCGTFMI6FUZO4/ORnmUmF3Y8R7Vwm86itSpLTIgUIS3oU2ElxdMmz8mi98/nP86Mc+\nVrvZSTYeBTYFFosFly4d4ZxhHN86Ktd3Ef90ToWQR01fmBNOSi9dCQ9TFylr6iJjKKxWiX4YWLSL\nnX7OKAs2VesrqYiIhlY7RjsjhJFJ7tG1M9rZnL1ZRwiRfowM27Ww8mLCb3riMGKbOWJHnM4h0Anq\nKYUSxS5tInrkJB3ha3aUCgeqouukv3ZN1lWSh57otbVKUvXvK8BQknRQpSZVTObPIDeBBGKW2hUK\nlJvJQnDJlbhUoefkq7i2Zo3Nu8RTC8U2dIwJYlHE+gCnlElBHuiYImkQHZFrAqEfsM24626LqiHE\nqhD6Howw2FBabuhcUDlSiq6FQsDqFqUdpqbC5ziIG0xlhElHvaPh7HR5pjplKCUq1ZIjWssstmTJ\nrywpyvfOuQqeNCkLQcpoS9t22Pm8kmcUIYwS0FumFAqZKXq/JYyJkMcLRCJFToq+j2zWhU0Pw6gJ\nacaQDSGLH2+5cLSI1KhKNhQYVWh0Ye4SnS04Cx9+wnL5kRnLzlSKv0CVOmd0LhAysU+se0/aZMYt\npGCJ0bJNEpc06wpXHmp47KkbZBQhyPw1Z+n8Yo1+MlYqb9FoVSfdGmhNOSfUoBCrrJwJAaJZMLRH\njD4R/EAcB9K6J/m0I8WI2xH0KJKamIywXq2JxTNsR3SqJApeewC/3UsOiyqv0IrGOfaWB7z3mQ/y\nZ37kh5jvLWrh9h3+Yr0ztdE89vRjPPKeG/zgj/8gX/niV/n3v/Yr/PN/+f/A+9v4t5jJ+GZLHGcE\nKm3ahrZ11VHJ0LZzum6GtY5Z14p5uxK7yqZtpSCj7A7GECLGOI4Or+D9iFKZbYzkFDFG0zQtOWTa\n2UxShlJmpKcMI1ppBt/XmZ6GLNF65lyAWNnaipCiME61w1VtYywQU8YljaoReCkkNB4w1dc5E0vi\nWy9+i+e/8TzXrl/FtQ25VJepamS/2FtweHSIaxzj+NY5575ph3iRvSYUc32hKi319+WhnJzQLx6I\nAClpVuvEdhhJewmT7I5soQDtLAZLMYmiNUZbjLX4URFVZggjys1wbQdAMyvMi6HfdITk0c7hmg6S\nJvsEurq5l1qtV/urHCSWicmPEplPlRJQiLXalMmHquHEZOlojK3EGaEZF31hBqqtQKpF8upSFEuk\nFMTlxBiz0+C0XSdVVp0pYhTWSscVQiRF6RpBfn49kSqUVFmqFPZt5tG28GKviEWTsiF4g98WvA4Y\nC6XCElqDGwaacSB7X2HLBpWlIGmbDk2siQqQY834q4a8OcfdTKBUTV7JYRc4XHLZ+SWWYgDRgKLE\nXJo0HYQ1QqbU6i8mlDGVqCXyGG01WEPJ4PuBHBJt27B35QrtvIMYGAeZyY4pEnKoHVgkhsDQb/DD\nSPQw+kBKimHUjEEzBEvvNT4ZUjZ11l0odSZuLtzNwpjOIuTRhcYk5i6x12X29y3zTjasRx46EotA\nzo2vSxL5SlJZBP1joj/TZKWJUeDXqArKJi4tNA9d3ePhxx7m6qMPV6/UBEUKRrmmk42VzPKlE5WC\nLkW/cyHcPaP1vs8Bwgj52iUGawjJ4/ueNHrKEPGpVHapPL8RSbxHF4oKDF7IZkU5fBmwlN1m8c4e\nhqpCpVVe0lgOD6/w4Q//AI8//Xi9L1U9+y78pOXbXkkpjNVcvnrED/7ZH+B0dZ9/+z/8v7j/4B5h\nanvegaUQwlnbONqmoXGNHI6NwPBd20nX6CzdbEbJSWQZzpGLdGQhjBir6NqWWSuzR9kLVA05V6zO\nViilsM7h2shYDz7rmt38bwx95VRkxjFgrcN2QrSJMcvMUmp7KZIL2GrhFqrESylVU4BEx5hjIlYo\nxWhFqdrQ4809/vDTf8BHfuhDoknMSXxWQ6BpHF3bcenoiLZtWa+2b9n1/65miHIyqupMc96unt8z\nEyPufN74mi6xaLZDYr3dMvoBrQy25nHV6w1aXNpLkUxDiBgrMygfRwbfk7XCKhHy68pSTCiosyqF\nJvuAMtPmpikxVdZTJI6BklVNFZjgz4QyCmWFiSpVuBGXGiXzQGXcBeKNQFnqnK6KsnXWWKOoovek\nUENdU975SZYiGYRkEe4XFSvRRw5VazXBG0LoUcqDAuvKLg6IDCUrnM4c2cA944hFE4ohJMs4JJxJ\nzOYaXYT1Gn2m3460nYi7sQbltGiM0Liuw81kA4k+sD1dE/yAcQbjXGWsyuYeK5NUpeln1uSEmBCU\nKInZ2kgXbSwlKVIJu2FzqjBgRmQFJSLWetUVKGVPDoE0FqxrObh8SLe3xLSWFAJ+GOjHDdthhQ+F\nGDzBR7z3DH1iGCJ+FDLwNjj6aBmjqUXDOdIx0cQUCq2mqbhoHa3KOJVpdaSzhVmTWMxgb2lYLGbM\nFwsa14to2DmBUqv0QxlNToEUheSQxi1NiBAVowweSDoz6woHh4ZrVw556OpD7F+9Tnt4yGlI+EGC\nolVldlPOg6uNFdp9qjdEToGYgyANF3f8TJ17NoS9QwY0wQ+kcUvcjjBkxlwQK3tZEchKs5h1zJYN\nN+/cx1qD0VBKwnFucfeOrfr9NeCmCK9uxo3r7+HD3/8R9o/2d6jNa/7Ct/3ntIpSUr9pxe1br+4k\nSdOXvyNHYtUBt01Tu8NWiGfG1M7Q0HaOtmkloaUabFgrci6FEeJKaysCNY2mNKoVYo3WihgSfb+l\nbS2qzEibyBACzsn+285b8jZhcHgv6SoiDVP4PLkxiTmDs47G2ZouY8R1piJmxghpMKbC6Ecg41qx\nxkyJnX5xTBu++PXPc+vlOyz396BkCcY28m/nWi4dXWLWdW/p5X/DA3GqHpVSOxz5tdF6cttMo/Y6\nQrnwO+ec1O0ApxvPdhiwtGK63WjpgKq2jgvUdYXkDWpnMcqSvAjwy6QTtBrrup2B8+S4IvOmKixV\nQmgRkoxcWJmXCBNT6epbahWmaTCmdjKTRZG2UzEJJQpxZmKo1gG3XCOp3LMquwBhuQJyRbSuMCsF\nYzuB4pKnRIjJiwWTtiQt0K2mQSvxjGyNIalMrKL/UpPLFy5xaBMPgiUVRcgKHw3jCE0DXWMxWQTJ\ncSwMQ0/T99huSTZia4aRn3vycG9ajbnaEcaB0A8EP6K0FAZZQwweZR1ZCelIFenmSo5kJRqn6XoQ\nsxQGedhVorkWDGhJbFBZoUoWGDuLC5BxHQcP7dPtzdEoUi702w193zNs12y3G9b9Gj9G4pgZesU4\nQu8VQ2zYREvKNaOznIP6k4BGIebVF+ffmoLVgU4VWhvpmsyiLSwWisXMMp83zGdzmnYmFbS+LZD3\npBdNQuW3TpCCnDKKgt+uMNnjgVgy1mSWy8Slo4arVy5z6egqe8sF7WKO7ub4GHYbTS5CqhINWu2O\nampATgJ5xRyJZfKXrN2hEoPw4CHPl/TdnKAyfhiIvieNIzokfC517iOvHYGsDfPlAu0UKQdaHIpC\nR2EOvLUKsDde04BGU+UIRtO0DYvFkqeffIan3vskrm0uyHbe/AUV8mKD77l97xa61VIc777j238k\nKkpNKVGClDmHdQ2Ncezt7WOto21brBUNYte04l7jDEZbkUggqRaqUCH2KmWIwuDMubDcm5NywCRD\niVvm8wUhRimAR0lW0VqToielRNcIISekQPGxSjFkk1VKszdfcrY5ox8HQdm0zG6hEFOBJHaa2ijw\nQmTUWgpSikj67h7f4qtf/CpPft+T8hrV4augaJuWo6NLdLPZW3r937RD3ImhJy3YhVLrgqRbYLA6\nbC0XviJRsBRi0Ky3iX4chAJvCtrNMdT8uVQDIIVTUl0KxLRZG422mUSqBxnQ1CicXCo0KrqvnCJl\nZ34cQAlVabrNjW0qNCodkHa6doey62hrZWOpMy4Qh/dJcyhkEYEL6u9wQYgJZLSVryuxkA10ut1l\nl3VNKwMia0iuQUdPKYESk8xVW0VyDq1XovOrJr7aVCZhgmyl1zkKiXUshGIJpRAyhCizRG0186Yh\n+0Isiegj43ZN081F89e29XBP5JhqPaKwXYub7ZHmLXHwDNuBkCMqgsWhMEStSSTSEOSzLwGlLTEU\nUKNApqXUmWhGWUXOjlJAW5m3lShRSkZpmmZGs9zHzVpc19ZYmkA/BPrtGev1mvVmw3qzZr1K9IMi\neMMQnBQByTBmQSIKQqRQ5PpAXviMEDt6o87heqMTjUnMbGTuYDaDxVKzmLXMZo0kYjhH4xqKrlpV\nKi6JyGqiH2gB6xwlJQl+joq47kmp4HMhqUQ3SxweGq5cu8TR4RXm3RzrHHp5iOpmjOs1MQRMY9FW\nUYrEWmnjcJVhqnTtHisrOU3p9pzP9lISW7u8PMC7lhA8YRyIfYJBZjmec2JMoVC0lfzQmVh4zRtD\nZ+WG04ge7p1U6O2MI5W4zxhrsMZx5fA673/2g1x95OouDumPsgqFe3fucrY+wzYNO0TsHXyvk1+n\nsDrlPc8XS4yxtG1D46zI1NqW+bxDm8qzmC1wzkpQb5IuUKMxzkErr9sPkRhL1X47WqcxBlgNzLpO\n2J3GMY4DyhTRRgOogg+e3o/VWERVG8VMTIHj1bHMK7XGVcqEohL/KnJILMQoIyd8AJVorJWRSs70\nwxlf+eoX+Njpj7N/dEAuYoyhdYvRioP9PRbz2VvKNH2TA1Ee+ouHXf42HeLUOSZUzUT89lupqhSz\nph8SvR9xGvQUZNk0iPwgk6MAOEoptKnuCnGg+BGtHNo0sonr2rFGYYLmDGlMxDTKhhQ9MYuEwmix\nPNKukf9uHLpGA2lr5DC0DdNESSlxglC1AlLSstWrkdHaXoCo5N9KZelItUI3BqUdxRfyTuRfKmRa\n6JquFhcyx3TRk0vYub+UTN0EH1BKoWk6YgroIgQK+ZsZMixMYaFhk2EshqYkEc5Xal3TNbSLBu97\nxhAI/YjfrjHtDO2cwJ+lSgYUleKfUFpjGotpHG4xJ/hA2PaUVIgxoLOUOqMaZdaaxQwgek9OCWWt\naCu1wTj5txiqS39OBtM2uKal6RY085aKzRH8SD+MbDdrVmdrTk/OOD0ZOdsWNoNiO7aEZEhFE9E7\n9rBCbKMmYFSpqYAT9psioZVYA9rply3MXGLewWxWmHcNi8WcprE0jROzY91UQ2QtMpW6WZYiuYXB\n9/jNmiWKbrEns+FcyGhi3+NTZCgZYwquU8wXSxbzI2Zth7UGlEHvHRKVZhxGtLYY02DqJpFzEiG2\nVdXLtPqullits85JNdOMNngIONRsn+Ra+tVKXJzGURjVOe8CfuXdKJxtsU7TNJZ503A4b9lstpiY\naIBiBGJ8xw5FNRUwCmuVaPPaPR5+6HGefu97WezNv/vucHpBpIi+desmm+2G6M/9fydDirdzKcAZ\nGScpJVFJIUSappZvSlCCxokGcb6YCcSZ5N5vWwvoqjF0aOUxGtq2JQOb1RaNobGyl6miSAlmswXD\nNmBtgzHVnk1rNtsIStG4hhg96+22EugLwn1T9fmCkNNOMympMIAqOzmPICcQvOw3SmdSVASdcFqj\nlGEYIy+88hx3Xr3LwaV9oOxSZqy27C332NvbE2u49E4ciHXPnzbhPDlLc06qKRQCNYKIQnyN04NA\nHAqBWrcDbPuBpjJA5XWWNM5h3AytcwVLs8zstMgJQk64psXaRkgruaC8HAoxBLHW8p6SxppQII4e\njRM2lm2MEG9cJ4egUTvIc4dHKVUNgesBWA9DpWVGyaRzq+9L7ZhWU+1aySW2qbBxgqxQ2QrzssZL\nuU6YYAJdZKyGknWVOZQd6UTCbQvzS/uE0RN6TwqBRBYIMyZmJrNnMxsvczIFGAvGSQSW0opuOafJ\nDXa1YRwH+tUZpl1IRJaxYBTKWkR/KSSZoqQwAOnoWq3p2qZajSVJXIiR+V79O6WgjMy0ko/17wpp\nQQ4pJckkVUNlrJHPQStyhpAjyUfGvmezPmW1WnF8PHByFjnZFDaDYYgiicgVONMIijDNARVTMVWA\ntIvI0ipjdcYqsDrjdJEQU1eYtYVZp1nMHd28o2lbmrbFKrk2Vktxo604dRA9IfhKxCpstxsxvj47\nlc9jeSBz8Jp+EnPEl0xRCWsLbaeZzee0jZMd1xgpPvYO8aXQb7eywRhT48NEymJNxmqHMZaSM1GF\nnWMISr1mZp8L9CPkrsF0C3wtMuIwytghSAiw/7ajTRlDRLqREDz9KHmd85xJyExyeIeOw103r4RI\n46yhcY7l8pAnHnua9zz9OK5r/livPQ4jd+/eZrNeM2y3gga9Q2e+VorGOrp2VufTQt6qSQg7VEAb\ns+uGSyoYbWk6y2w+IyeFVtL7t43DGEi5EAZP51qMsgQTGf1IM2vxPjKOkVygm82I1aC+KMXZ6lgM\nNirzfDLcBiEPWmNJOclYKoOyk9vUDkCRsdluRFHIMZOq4UAxGbKWAl82RR4c3+flF17iqfc/KZpl\nAirKdVgsFvVA1KJ5fAvWmzvVFLH5mg4/4d7Jks4RQkkSFIyYTF+8o/RuY5IPcIyZfpzCViUAdW+x\nh2vnElVijDDsUhYzcAVaOVLKKCLGClVf1bylOCTC6MnJSxaYtuLk0M7E408btNOCsbdtnftVhuhE\nXlDVTJYqPmdCRC90w0rVzU462HM/nlo5S5kECHtSvFprEqGaZjwKrKMEMUmX7lrAvZSjwM05n287\nClzXoJ3GNpbQe+IgBr3FQG4zR2mgz1RdUMTaLD6FzlGURreWttnDtTPs2Qn9OOLXp/LAzRYoXfmV\n2uwihi52wKqUarVXP0scxSkoE1P4nMUg3VGVsOTXXr4CYsgAlCqRiGPEx8gwjmw2K07un3B84jnd\nJI7Xmm0wjFmTqxm8qjesSCISWhW0mibX8plYPcGisoEanXEu0jhoXaGx0DjoOsesbQWCalps02Ct\nQ5uM1U01P9coLYdXiJ7RD/hhWw2/M+v1A2KE9fFd/LDFzec1KLoq9jR080LjCm0H81lH03Yo49DG\nStFiG/TRJYqzco2tFl+oXOlrCpTRGCdm6THHutlIcZDzeSTTtIag0Ydz1N6CYRzIMRBDLyxrn6q2\n8sIjroVVGHImZ0XwgbUP6CSG/UrJ1/j02mf77VgCk6rdYWiNFmakm3F0cJmnn3qaS1ePRPr0R1yl\nFM7OTnnw4AGr9RnDuJW5mAIxPH5736tR4gDjGoOzjrbtaNu5aA6dPNONc2ht8D7S2EQ375jNOmxT\ng/dKpm0dMSeMbmmahs16LS43s5bcjyitGMOA1hatC96PO3Qol8h2s0JbYZVLdxghaxbzGSlnYpBy\nKgRhp6ealZtzZvTpggRJ8g2ncOCYCypB1AkTIVmLqYxeOWo0q37NKzdvEvpIu5CzJhcxuZ/P5ywW\nizrKemvWm+oQJ32hbNyTO7z8vnSF8nAlqn9d/XvnLzFV8YrZwqKMWH/lHBn9MSkNGKPZcy3WzWo0\nkmzCpIguIk5OOZKTByVVTyGRgifnINVKtW2zrsG2LaZx5wesq8ZURlpzVWd9oi+sdPbq4g4CS015\ng4XzNAOKqZt8TciY3mfFV8ru74fqnlJdVNLkpALBe9GDlShdWdbkVPVmqQrrS41UKTAOvophR7L1\nqK6gB2hag9YFozOJkePB0NlE1wqEkdNIsIqQEm3bMmtbbNOS798nDFvCsEY7OWzPPXdSLefEI5Xp\nyFPqnCikFSjpzqf+XwnOK9fFSLFSVP06IfJKAHIKxJjww8A49my2PaenJ6zOAqenidW2cOYtfWqI\nWe/cMMRmAYzK9TtO8KfCqoRSIv6XLrBgnZRtVimaDppO0VjFzLU0ztBYI3KJrpMwXSXwvHVO7gOh\nHopjRk7E2NP3PeO4xo+jJAaUwup4IATN3v0Tsh9p2g7XNqTo0Vozn3dcvepqbFegaQ3GNtWVR0zn\nVdeh9g4r8UDhtMM0VoyBSFCtycQcA4xzmJxlnKBzFUvXrbv+e1SaxdEBZdHS3zkj+pFx8IQx1Hj7\ncgHrgKQ0sSQZi+SCj6EyS4skSFhLd7jPdrPFc05513VjyuWtqdanNXUdYgKvsKZlPtvnoSsP88z7\nnmK5v/hjvW4phZOTB9w/vsPJ6X1i8OfvpXY5b+uRqBXUNBNnW5mtNx2uxsVJPqDGWUuDwzWOdtbg\nOrFhKzljrcW6BpNEj6xUxlkDOIYs3r9TgIFoqmWcg86sV+td8/Pg+BitHE1rGYaCawSd0Fozeo9S\n7OQf217inc5FTNI95gn1YuKbSLdaopK9y8goQdlzMt4Ytty5c5PNaku37Cg1+zNnceyZz2d1DPXW\nrDdlmaIgCwhJwVyAZxQJicx5PVRK/QpJddcorMl0M4VxkEfJX4slk0dox562GTHWiRYNEYOnEhmj\nr/ZrkmsoMz55GJW1GK1QpROygRaijGnbGt1UxPh7Ggjsuj8tTMeizgk0AFq6IzUNEahwX+3/i659\nkjISobibI57buxWEGZmjIgZPCpMEQw7F1epYoM8kwbNUIX7OaTcfohRJO0AOUKXkusegGMeASgVn\nDI3WWFdYpsTxaEla080di+WsblZKqr8cUe0MpzULnzh7UIX63YBpG1TK9dDNaNfInCCmek21iPNr\nRLquFm6lXlNFLR40gEguSqEGJitSSGKaXY2FN5uB1XrL2dmWs9MiRCtvGKIlFPleeXo8lFg+KCUd\nn1MJqxJGSScoh2DB2oKzGWfAWnCNxmpTKeqWtnE4I9RwY7V0GU2LqSneU/q4wOMOSZgsYo7tt/Tb\nM4b1lnEc8T5WqyoYe0WKiv5kTfAj2ljmewf4zQajFIvZgvbKZfrVmm3YYF2HtW01NRd4Ws33KLMF\nwxgoqmCtRSFsUqV19auUgjJGTylKdKrGgG5k7lxniNOhmJRFLRZ4ZOY79j2Dj/RDpK2bVq4Pv5YW\nlKAsGiF2jSFAyliq0UbOrLc9oz8XRFvtuHx4nZB6TlYPds5Kf5pL1eePOh/VeuoOLYvFgkcfeYxH\nHnsE231XKXavWzEEHjy4z/HpCWdnZ8QUdtcS3t7DcGoarG1wjZhxWyvEma5rabuOpnG0dbatlTj0\nTHIupSQ4WGtH0zQo3dD3PSkljBMNdSmQYmaz2eCMRTeF6EN9jjUhBozVdPM54ygyqn6zpnUd1lhO\nVieorCm1+yshYIwWm7ZSPU9B9oAcd6hSyrk2GHVfSDLyMkoYtWLSAUVlfBx5cHyP1ekZR9cOhYhX\nhKNhjegRJ7TxrVhvMkMU7DoXVXN183kNUKTYjEVgUqk7BWa4eDTKgVhwbaZtrcxWgAYRhg9+ZLVZ\nMW8XtLOOnMwOMvIxEGLGGaEfF7IECrtGSBvOMZHqUXLQaSeEGGrHp+pQbvpAtFZ1dgiqWKASZ9SF\naCsNu2O/ztJKmWaLsttPXVWhkhxi7VhDJIyeOAZ8v8H3PX70BO+hFFZ37zNFVkFlvWqF1Q7lzK6D\nte4MgIOjQ8SmRlwftps141lPyUHkIhlmXuDYTXQoq1kcXcKiCKEnBnEnsc0MtKZdLujiwLBdEccN\ntqkwct1NS0wUVbvDutkKZKZQNfh39/GWLJmSRuCO+vGTkoiDhzHQr7ecnJ5ycjpyuh5ZbRLDoBiD\nYgyGXKp7DYpSziUSmiIHn4o4lXEm0+iCswmnM9aANgVroWuFDGK0xlpN23VY63DGipbOGtkAqg2U\n0kpmqDXpXmnLZDOYs7BmQ/IM/Zqh39CvThn6QBiK+DDWvT8XhW6BcQ1J5BaLwyus7t5FqSIaz/kB\n220PyeHcYkfKKkpJBb08JHdzhtVWDkMjodnkUuUVSZ4Ja9DGihGCMUI6c3Ny0DvwfvexuBa3f8Qm\nSVrMuO1JGTZjRheBknN9NpU8OIAIuXNJ9OO4Q7sLEFLmeL1luIDLXj96ko999ON87YXPsvr6WYWJ\n34KlpHFqtMbVdAfXtCwX+zzx5BNcvnblj0imOV/jOPDg/n1Oj08ZtltSrIYdhbeMxfhfWkoJb8Aq\nW1nldYyjbN0jNEbJISlkLIWxthJoLFrJnoeCREIlQXrkoJXkkxjCznVGaQhbYZRqHVjM5/hxyWa7\nJpVI01liCMznS4wxDMMGCmzHocZD5RqRpmogtkCsWgkaFJMI71/3PutlTakQA6SQSTaLSxaQc2S1\nOWW1Pjv3la3zeOca5vP5LtnmrVhvDplWeyexflaV2i4HQSySJ3dBqn9horTjqqAUNE1Bm0jMGV3z\nsKyRCnc9bFj0K+bzOdY0tRND4Eak+ilKwn+1LjJnMapaqwlZRRkt2YeqeuAoZMPOIgIXbYwVVqmp\n4bi1Kyqmfo9SdofjtPOLo4zZoYilpG97aApx0xP8iB82DJsV29OBYTMQR19dXqQ0Ukqz3DvCtg6n\nHbppMK76UVaGaEaEqsq8AoDpZjUpQxinxnXMZqN4c5ZEiiMzPTBbFe5sDYM3WNuymC+J45Zhc4of\nepr5nmx/WjNfHhDGUeaR7SDzslpEiDM4u9mg3JBFOuoaqLz7kCefV13jYZIUA+v1Gcenp9x7MHDv\neODBWWC71YSoKNlWzGAqnaboqfNIX6MSjU4SFG0ijS00BpwpuLZgjFSWzhhcq2markJLkgLRNC3W\ngNFyCOrK9lW5cuJUwbi2ur6I52LMkpeRkgT7juOGYegZt1uG9UgIUGLNfavvf7mvabqWuY7Q90Tj\nmB8eYZqGHEZ024KzJCLaWJpWukMxt1dgGvThNXLbMD64X2ft1fg+RyhSPYvlVUTii6WwM9ZB44h1\npCFMvvrszWawXDAOI37bMwbPNiS2qdAqcHUiMTEARYkJrbMM255h02OLwKWV53VxCIJWhp/+wZ/j\nL//8f83vfPoaN++9xO17N9+SQ2SaISp9/sualksHD/GeJ55k7/Lyj/W6QoracnxywsnpCX6MO8j5\nHaEOKWTv0vKJ/P/Y+/NgW9P7rhf7PNP7vmutPZ195u7Tk1qjNViSJTwwGoLBSnCwr+HaUEkV4FA2\nhHLqlpNwocytS1EFpAi4GFIUZYeiGOxUbhJM7sXCxsjI15Yly3JLtuahu9WnT59xD2t6h2fKH7/n\nXXufPi316W6pJVL9dJ0+++y11t5rvcPzm76D1U5wEiXhzknk2FyZIbpKkMjOVVIxaqFAaK2oqwpF\nEXGIAnrRw1CwAYqqqvBhwFoxIh+CRWHZ3tkhxMhisSAMg8i65cjR8QF915MTpZsi1WRKqYwWCn9a\nj4neCTkv59H+rSCUy6FNWYKi9wlbi8iJ0hBD4Pj4kOPjY6luraDSYxDGwO7ODlXlWK2+PqfhPmgX\n8tdoAHu6MRIpFIDTShlq8xXjNAoQXpVOdGlA54jCUeWMUxafMou+Y6vrcKYRQEjO5CykcGWsID1T\nIZQryZIVsonnYk+klSFnUaUU/dJYiOXid6iNPgX0UAWNKq1YwcCoEidLbV8qX6WLX1iIpCBODWEY\nZLicEtef+gLtomO9HAh9wDlN0zTM9s9QTyfYpqaerlBKcf51D8v8dRATWkFY9vh+XWxSRPotFIuh\nw6MD+WxmBKUotI5kl0TcOgeMhfNnIgFYrzJ9N7CzY7FmC1Iix0GOkanIOWAqRz2Z0q3mhMGjqrjx\ni8wpo4IiIRqzakSiZiXD4pLi5TGb1pocM37oWMyPuHnrgGvXV9w8jByuMqsBfLRUyhRDZ3HUtOOZ\nigAAgNBJREFU0EoIwylrmf0pLy0Unah0ZFIlJpOEtQnnVGmZUugHCltVUgnqCudqqqrZVINaa9TY\nzlVj7RTJWolsnVJFeUgQzDEIyV1U9j1Dv6ZfL+j7Ht97kuQIKKewzmCsAAd2d3eophMmTsNqQZpO\nMVXDZHuH9ugQbWuCaUh6hnOGerKFrRxGSUC0s23M+Qv0WYjUuajmCJe2Exk3BBVtlJIqPERCHFBa\n45Vl1Z10asakwuxskac1w/yYvm0JMbNsI23KTLXaJKkakVuMSoYbQwy0x2tyiBiErqKVopk0mMmE\n546OGAg4U/NH//Af5tv/wDs5Hm4w/cXpZk/4WnHEnp9UF2kkjLY0VcMDlx7k4UcewVYvr12aUmJ+\ndMzhwR0WiwXDIMjdlL4BwRAwWnppZIW1taDqnZPiPWecs5tW5Rj4jDWkMtczWlreTVXjjHB+hyxj\nGRnJpELm13RdAARk0/VynY2z80k1pXcD3nf4NBC8J6WIc4Ke932QYxVPYoP0tDXGWFJKOCP2UzGl\nje4snLT2dQmOPoEJmTBIQHWV3BfLdsXR4QHRe7SpAek6WaXY292haeqv23l40RliYczJn6xLJnpC\n0pc/aawlGMv0cZ1qLJZKRxVkqsdR4dyEmAPrwbNYL6idQ5mtk4NW4O611aWKE4m0bHWpZHLRCRUq\ngiBgBBCjlCjLCNl+rHBkJpIL8ikrJXv8iKTNuijbCEgkxUgceoauY1ivxC6o7RjWHf26RwGr28fk\nBFvTKbPLe0zPzKhmU4zVm4pVGYHjrxYrFseHrI/nDG1PLAGWWBz9lBy92AcymeXNm+J5VhlxlkKJ\nVmaxXCFmVNJMVeaRnUhCsT4+ZNie0ky3qScz+mUidD2usZuq1jU13Vq4gyYmsgqolNBIe1zygQhR\nbj5ltVQtJePJMZTKKrBue27ePuCpa3OevR1ZrmGIipjFtdGQcWScQqozwKqAVgmjwelEbSOVSzQV\nNBNFXRmMESF0pUUjUSu5fpyuaaoGN51QVdOCZJNjneIgyFhlRUGnWH4pJcjOXDocKoiPo09iSxaT\nJCBDGOi6Ff26xfeBGBJKK6rKYKyWKs+I3ut0e4qrpjityYtjzKVLeN+xvX+BsFqTMoR6l8nZhguP\nvIWLFy5hu2Py4TOk9ghz5ixqf1+I1EqRrSMMgRh7ESLNoI0RkfMoggs5lLZtzKx6uDkvMm25jAe0\nxu6dISrNEHr80KFJrPtEjzhaiLOl3K0pS/YdlaJtS+JUEsFyi9BMGuzWFmaxAALOVlx5/Ar1ruH6\nrasslnPIMJtMqGrHcrXG+1dmEHUynS+tXSU8TGsqps02Dz7wEBcfuvCyf34MQQA1B7dZr5f40Jc5\nGGx6/1/nNf4WVdrC1krvJAZfRjRqg3o11hRaGJClCzRSs0CqK6MrMuJNaI3QykKxc8oKmmmDMpq+\nDwx9X7oNZjNqWCwHfPTEHOj6jpwiVVUzm21LorNa0PUdlZWCZZwNGqM3s+9YRksjs0C0UMusGjbx\nQ/4h2Is4DMKnpcZoQ9stuXN4h34YMHW1qWFSimxv79B8HeXb7iO9ko0tojdw7c2lknOZK5ZnKrWR\ngjp59VgpyoaeUk8OQcinRrQS66zpkmfRLpnVM6yusUajVSTFlj5Y0OKGYXXJg8vGLmhGyHm0Chnb\ne0XibVS+V5qNhHOBj0k2GFHRlipYJMlSGAi9BMG+bVnPl6wXK/q2J2dHszVl99x56skBCrjyhjei\njcI0NbZpyjxSkWJgGFqGdUvoBoIPfPGJz7Ga93gf0DkiDUQtvHQlfXdjKAEZVKdIKpI6qWCM0qId\nGscZJyUtUTRKzkEaehbHxygtbTq0xg89ppkJktX35CzWSF27QFcWW80wxhHxkjAoOd8qZWKp5lRR\nBwqj03jbc+towbO3B569k7m9hhAVtmxgsplBrUUb1KlMXWaBViesybgqFak5zaSxNE2FqxypoB61\ncihdjovVWF1T2YraOmzVFCRwgBTIUeYYISfpABuDRriEFIeOnEsgjx297+WmLjSKFANDv6Zbr6QT\nkBIa8Y90TipPeyq5ss5hrcYpRTo8QOVMu5wzO7PP6uAOXinOvPm9vPEN7+SBd78LN6nJQ0/7xG9z\n+JFfgrMXSM1WkS40ArQKRbC8JEsoXSpFQfpGldFOo4Mlu4pFYDO2GOejbn+XIQRpifuAzWYz8++A\nGpkjxqw21A5nDSEanMn0cRTcEMEGT+J4ucQHCXLaKG7Pj/jMJ7/Apz7zO6zWS7RWnD93nrp2+PAc\nIQReaaE4BgxJVaWKMMqxu7PHww9fYbY3fbEf8RXXMPTcvnOLw6M7rJZz4d+dAo6/GkubU3w6JcmP\ntka6OsUg21ZCv9AF0Gi0pnIWW2QmtRJ5vxE1mlBUxoDOeD+wXndopdne2kaoY5Zu0jH14o/Zdi3a\nimepMWIEP5oHp6RxtqLtOkKKrDtpv48AIF0i37Se4kNPSEHkBdPo/6o2zhhyKUjCn8amjc6ElMEr\nGtnYyUS6ruPo8Ag/+EL7kqd3XUflxPrq67VeHGUKyCxRl5bpWB1Ky/SkBjwJfmy+Vpu2qSKhkrTZ\nfMqQIk6vcabG6BoVA93Q0/Utk2aKKTSMrQaCTxCjWDVVCrEVEqsipeXfokEqbRWBzduTWVjOG9rA\n6DShEAukFCNEL21K3xO6jna9ZD1fs1x0DK1HaagnDXsXL7Kzt8tsZwtTGYz7IgrF5Ny+fOAifh19\nJAxSUa7ncxYHR3TrjhAy16+1Qi524CpwFpzR4hqvC2pWK7SR6rNuXEFsFgk5ysyn9LwEwi+u2bp8\nrZ0Cnen9CmUyOLngfeyE2N23KA2ubuj7Ft91GFOXwBc3lBFyscdSGR89fuXp/cBq2XG86Lm98jx3\noLizdvRREckbwIZF4Fe1jmzbgcpE6qIR2lQZo6GymrqpShA04rxhDT4EuraF7MUE1U1xlcinWW0K\nEECuOrn5hrL5OrAN1hiMMShli6pG2giL+xAYYk8InbhLBLGeSlla1bH3JJ8gKSpjcVuOydaOVM4p\nFg5k4URqizNlrrM6RqVIuzxmurXH1t4+vt7iytu/k7NvfhN20pTEDcx3fCdRJZbDgj6L6HE/tPS9\ngLJibIl9K8LwVu4mVYSVk/dyzZaqsD91P4pYksbt7rIcehEKJ1PliMnSju1QTICpQu6LLOILW7Nt\nfOxo10eYnCm4a2LO3F4sOQ5p44ji08C/e/+/ZWvb8aHf/JBUE2SW6xU+OJm7f43WiD9LWbpMyijO\nnDnLw489jHVmA/p6qWu9XnHjxnMcHx/TrguVJqZXMx6KIHfpTIgnbIU1tmCcyr5WdJgpSabWFqNF\nyNuMQLeCoI8x46wVepwPhCgKRJOmpqorQgxAxBrNdDZjXWhPOQqlIyUJosF7VNJonWi7Nat1S9t1\nMqpSWigVOUGOcq9pNubRo+IWCEVGjV2tU9DdsXUa49hCpczLi1pVjBweHdK2LbvsbLAKKcH29g6T\n5uunZ3ofWqajPotkHyetY6FbnJ4YSuagT11U45R/HLRGnFZ4NH2IaOVxBqZOY4j4pFgPHTPfCZKK\njDaOmiSixiO146REFYh+TqisxTVDZUFEMsI2Sos3jht9IkclrdAQ8EOHb9f06zWr+ZrlyjP0HWBp\nplvsXz7L9u6UydYEW1vZaIvCyIhuy0RSgBTEMd33A93yiOXBbRYHIj3mgzDVz+xP2dursVUiJi/H\nxAp6brzoRQx7DWS2z+9uJNtUkVQaQUHaWVxdofVJO0XayiIQkLJweMRwN9D1CwnaKaAi2AIs8UPA\nTWKxkJSNgTiQUiamgM+erl2zWq2ZLwO35pkbK8OdXtMHU1rpIzRDjrtW0OjIrBrYagJNnWlq2Goc\ndQ3EgDMV29t7NNMpKPE9DCkSuhWkRF03TKsa62oq50p1droNn8FarBEBBpRB61qqqkIgDtFvsteU\nEsPgCV6CoUKSoxD85u7MMYsZazGeracNrp6QYyQFBYUbqJTGaYd1NdZV6GGNbtfEOLBeHrJ19jxO\nb7H/htdjmop+tZLXTBrM9jaTd7yLg6c+Tde3rLuW+eKYoW/l6AWP6v2mLZUSaCXBvwiLglEka1mm\n06L6UhVTWbqjY7zvxMtxEHQpCnqgy9Cc6vSEGPBpoA8dQ/C4MvpICPgmDEFaYWV1fct/+MD/i6qy\n3LpzfcPdOzw6wllLiPEVV4fjbS4dwQJM04qqarhw7gEuPnjxZRO0M5nlfMHNW7dYLpd03bpwgCGk\n5xsYfH3W2FIE+dsZWxK9YhUnPC7Ixf2iFnRpLmOKCoe1lQBllMJVTmzQQiCEEytn5wzWifCHH4Rn\n6f2AL4mV1ZYutIRIEdIWEMxkOqX3a4Z1h48Dk3pGXRuW6xajNd3Qlw8C7dBLNw6FD4Gc2Agl5OIb\nK+htOfolJMgISBuausboTPQe62piShzPj1kX5IwYjQesM5zdP1vI+V8fPdOvXiFmeefj7HCjrjIe\n7nxSGerSJzZ3/YQSJBmFnjOVM0ysGKR2IbMOEatatBIa8KJfMW0dlSvDVD/gtBFz3ixZU8qJpBQq\n5oL8G3VIk3D2UizIpwhKSSANZVYUI6GP9J20xlaLFYtFx3IZSVEx2Zqwf3af/Qv7bO/tUTeC4JKh\ny6k6+BQdI/lICBHftfRtS7s8pj04Znm4ZLEc6L20OlxleeO3XBETU6sYul6UT2IQfl8qKg9GY8xt\nUIqdcxfkKJpRskn+yIBH5qqSdcXSaikz0pw25sdiiFC+lyLZSNAUD0eFDx3e9+RoygBehAVCjAzt\nis4PLJY9h4vIzYXj5tqxipqQ9KYDYFBYJY7ytRb/wNkksDXLzCYwKaLEVVWjyMR+hW0q6llDPZkQ\ngyfEwBClIp/NJkzqKXbjMBIIIQpXtWwcxlVCPNTjLLhIzmVNiF5oE8MSXzhRKQZ810slUEBXjJ6N\nGUgCXjGuopo0uLqmqmoJTLGQmjdJi6aqxaPTVIbk15jFEa6ecPvqk5x51xXOXnkDdtIQvWd5+464\nkjc1aEWbPM/dvIapLItlx/zwkBi9zEKDx4VUvBFPbvqcRKQ9iVwSfVLMYwmIZRhlnCWmxLpt8YMX\nZw+fy8xQuMMDIrBRChFC6JnPbxOzcGU1ig75e6KgygpL8UtErq9bB9eQztFJNTgiGr9261T3Sck0\nuq4mPPDAg2zvbctt+HJKupxLu/SQ1XKJHwIxivvH8zLur+NSGwqYoGclsdZKqBRo8RXUWlx/KAlv\nKG31GBy5rk+YYBlCiKLupZW08q0AXRQiDelcTc4J6yyrdcsQBrTVGKOKf2gSK6mqxqdA14maGBmc\nE+efyrrNfp+UZtpM6IcOH7yMYTiZE544Do0llfxPF0CXNoraGZq6IuNJPtDFDqsti8Wc5XwlikFK\nEoPB9yyW840x8uC/9kbB99UyTShORL3TXc8QdQIB0hgl1jqba1TljV2LbCUZkzyNhZxr+mGg8xEL\nTE1FVpFF11IbmE12MMbRxQGlG2pbQ3FmSDGRek/WmqxSAYOMA2axw5EZnjiuhyEwDB1dvxZQzKpn\ntfIs1onOa5Q2nNnb5tKD5zl3YYfZzGHrWiyK8qhaU3rhqgCJivpMTomhlcC2Xs5ZHR/THy4ZVp5V\n54kodvenNBNwlWP/0gXMpEEZQzN4ou/xXUuKBWZvM1pZjLsq/fn9s6gcijqDLtsUUEx3N0c2BkHY\nqvKYymgTxa9QtRIskwFlBcWYFSFmhih+gqrvRMQgQfQtIfYMIbJarVksA3eWhuuriju9YyiC0puL\nSAlgplJQ6ch23bOzE9ndM2xNKqbNDFdNShUslavbPcO0adAqs/Yr1u2KoWshJ2rrMJXDNpON/qxU\n9qC1uJUoI+1xaXvKOTLaYK24l2QiXd/Stitx8jZCaE9hkJuszKCVEZ83lCRd1hqMq8XqSRmZiZQO\ngNIGoyu0ErNWVzcYW6FQpL4n37nN1sOv47nP/S4H157mwpveKRZb2TDd2S1KOFJB+2FgdTSn2Z5x\nfHzIYn6MItNUjjy05KgJIaJDEmEHLfPhqm5AZcLQk6ylzScxUxVuWu9butWCHCMEUAnqkphGhGwf\n8whYETNkFaXCHxT0pb/SlNn0xgvx1DkfwVlfzzXuI0bpjTbmbDLjgQcvMJmNc6R86pn3t1LO3Lx+\nncXimMVyQRgCIWXGcd6rEQ6BTYdpYwlqxPtSYYuVkxPeqipc74TwrLVImsXosbWoubRti+8HoWE4\nETiJQZDoY1WmjGK1XhO88Fv7XnANVjtypYkxMvQ9nRfXlaaeiZdcMYVPMYkHZ5RhmdEWZytiDBij\n6Qo4LKlIRirCzWVz6qCmsc2dMkMILNfLYpFXoqVJHB7e4fjoiBADrnjRDkPPR3/ro/huYO/MLrdu\n3fmaV4kvykOUJbSElDMxqxd8RhFA4/kIU1VOhiDECiQ4BZSVbMhH6CLoHDFG5KkWQ8uyWzBtdkhJ\n5LNsTqDkfUQ/orBEIJqUxQMvRVLypCjtAB86uq5nvVyxXnbMl4H5EtYDRCzTyYQHLs144MFd9s/v\nMtmaijPDmPWKPMsmC80Us9xRfSZIG3Z55wbtas1qPqc/7ohdpEsBM3Hsn93l/KULVM0XRR5sNkE5\n0ce0ZrRbakhhkO1HhHoKGEhha0dOGikDTQEHlUBY9Fw3dbu2jKo6ikQ2GqUzigoVIFGCuIrEHIkp\nsB46+tUAdoGrKnIS38Ou7Vj1nuN15GBlubGqORqsKH9tEqFMpTS1lvZorQPTKrGzE9jbr9jd2aZx\nrujUVqL4lgO1a9je3qOqKqLvYXnMKg0MqYWYibElqUDKiqaJ1GpSJM8qqcy1IHKDDwy+hST0He0c\nOCst4hQIfk3ohK+pKgspYZTQGHKS6lBbhcpWQALGYZ0twufjzEajcWQTBe1aeGCqzGwhFGRyJh0f\nMNVvwE1n3H7qKfp2TcNZtDU0ezunbhhFVU/Z2TlPl1qODg9Yrec0riaojG/X4pupwFgrG2DZjLJO\nEpCtNKhDKWoy0nrTVkjUq/WcbAwhgIuZqmTlGWmbejIORY1iDwgqs8pq41ajAQ8M489/taIEpw4T\nYjulTRGOSIrt2Q4XL13EVe5lz/tySly/fp3lcsFyMacbumJ+ffK7X42PK8R72Ru1tqSc8UEkALXO\nxaZOWoPeBxpXZP+MQBcVBoVh8B0KhXUNVWM3soCp0HmMNljniDGjlGUY5N7XWjGbTVmvJJhaY0q/\nWObqCkXV1NK5GYKIoiRb9sGAdRYfPd3Qn+oOqA33MGUxRzBalSpREmlV8lEJmMJFJGeqStq7KXqO\njg44PLhN8F7uOaWp64auG/jSU08Rgv+6tE3vi8Qzmr6EnPHj7CaPN85J20yj7pHVOZHfitLWUhar\nNUZ5lAooJXYhffQ02mKUowuR49WCys2kzROzDJ+VQTAwXfHVk5OTUyQEgQwH3zK0HcMwsG4982Vk\nvoRVp1h5S0Cxt6V45PI2j1yRirCZ1GhTFFMKCV7MgRWj0NVIxYgh0q/W9Ktl4SFGDq9dx68HhnUs\nrhWa6e42+xcvcPb8OSbTCUo/KRmhUaW1oDbaqlgtSNckaifSy9Kbo68KQnezAyRBfWbpbwo4qKBG\nUUUjU4kaBVZaE7FXoAJJBSgKPUlFVGVoDzLDwYrZZChgHM9ikTlew5224k5fsQ5mk4uHkvk5rZiZ\nxMx6pi6Kse4kMdtRbE0qoUoYLdlfabpbY5lOtqgbkYgLXtQ4mnqCdTVGW3LqGPyK1WqBDz0+9Bjt\nMKbCWtFfDVGMR2P0VLq4ydvSXkUE4FNOhNBBlpau0Rlla1HVSF4g586h86j+Imo3yoiQth2twLJC\nFzNqW7sTpxN9anyAwNKrrmf3/APEdSobF5wafG5O4WRrm/OXH+KLT/4uy/kxvhuoTUUInna1YtYo\n1DjfRObGWrFpc4NFObmeN7qkRni7i/mCvos0rqGPR+iYaAAH9Fl6KH6sToAK8Ch6RJ94dAppEVy2\nLa3WV3Nt5ps5i7RgQSfubO1w7tz+iZj3Sy8QCSFw8/ZNFvMl7arDh3jXJv7qNEwps38tFAlkpCQA\nkkjOReyizL5TodqEEHApSgEQAqmSvc+5mmZSbxJiEGu3cabr/SCJVRYnoclki7qSz71crUQnVWvq\nScXxYgQYSZfCB+mwjTS7uq5RfqQoyR44zphH44TTYJpUxElGCsYGe5FlmxvxD7kgbYyxxJxZLIWb\nXZAiVK7mdY89RjNtuH77FkVX42u6XjQgyluX6H43B1E+vlbq1Pxo1Dc5ea1TZTyvy0WNpsJiVEab\nBDozaIMqLUiDAmXpYiYqUaZJusjHJbEKyqW1lpXQCXzsGfqBvg+0a89ynVj0msNOcdRrYjRMtWJW\nRy6d0Tx6ZZsHLl9ge+8M1UQ25k0wzOmEqqGLqHWUtlXoO3zXs17OaRfHxEGUaNZ31sUFQzPZnjLZ\n3Wbn3Dm2zuxS1U6q2HFDVFKhqWwKNSSXClSR9Zj5lZWFe6NyUXRRyBw1CZyIsXOZkRZxEikzZcyG\ns6dyJlsB4WQlWZWOYttsKqhnEbedOLq9ou97lIF1nzhuNQdtxXxwhKzlfDEiiwXXMTOR3aZnZxKZ\n1Im6hmmlRT9UG1wJhmPwVkpTuwpnJPiHFOmHNT55RlfsSTPF6m1i2hUlfSJx6Mh+QGPBRGJI9F5g\n/U4raldj67pk3EaMfBEBbXTRTswDRjXFdFXaTlqLLJbVI4qzBERthQqjxiow4dx05IafuvpHFxB5\nIPdr1OFNdvYvEne2MK7ZnEc2r5ANwTU1btZwPD9i3a43SMFu3dEtjklJoXISycIor8lqlLkTiasY\nT0AQWVEkvWCxWJEi2EoTQkAnqRCnJcjFDEPOG3/DhKBVI5l6c88KRUMo3Jn0qitdU9pu4pKAAmMs\n+/vn2T2ze3q6eB8/6FTpB/R9z9HREcvlkrbtCD4RorT4vr4y5c9baVR9Gj0u5ezG0JOqumAmcpHr\nU2Ql5zulSI6GEAJtKyAXXVvado0zlrqpMLYkblnRth2r5UL27ZSxxhCznON+EJyyTwHfe1brNTFB\nVTeEEFivlqxWKwbvy5WWWK1Hkr1gFqxzmNJeHwYvs9iy1KnpymlE8Hgf9EOiJ6H+s7SNlRIN4yN9\nwD87+y/4txffL2o1Rfyl/1M9B7/3iHiUSgLxvGP6zuf9+wPAv7n/U/KiSjWjPmk6dQmeLGllaK1w\nSgv4jbz50DKjKL3h8tNSacpYFEZVoAKKvrRijfi+afkZQ/CYlECl0gSEtm9J3Rraji50tOvAukus\ne8Vxp7nTwbHXLKIQlmcaLk8SD+wmLp2t2T+7w+7uFs4aUvDEvlRqorYsNI6iCZgGTxwGQj/QrRf0\nbUe/WtAuFgxrsWEaS7dqVjHZ22LrzD5buztUkwZji4/iaUusLEkExW5qFC/L6NKuiJL1jBlXuSHE\nbWMUAZcKcezrS4RMkEbuZdFE1Yx9CbQBY7KAb1wNQSrVqmqY7SQODzy3jwMxJ9bBcttbVsFiZDqL\nLUi/BNQq09jMTjVwZiuyNYNJbamspamFFmGcqPFrK9me1ppK19SuFr1Dn/DBi59lFLBMU1c0VSUm\nznoG2pJItO1cqCHJEHMUbdjgqW1NU+1QTaXVPYqr5xQFjGCdENtDT4wi4m2VFS1cKqyyog2py21Q\nCMrKWEzWjIMrlWWK/vxWmmS4qlwzEMOAv3WN7XNXcA88iisE4lyE3TcVYzmvR8eH3Lhxnb7rcU4x\nDC3t8pDV7ascr9d0XUuzVVqkWkYCo/uILhZfptxsCmmvAqwWS1KGoe0InQgVWKCRXgORzIAkablU\njAGponcUjArBiVGCS22ux1d7ZdgEKq0NO7vbmEoTfMAU4Q1Ox7v7QNkM/cDx4pj5/Ji+7yUYjoYt\nr/LSSrh6Wp1wq1OEFETIJKVMiAMxVkCFKRKTMQdUEIGBZjoRge2UpK1vDd4H+r6XHTfEQkOS9mXf\nD8JtzpmuGwBF17YMvUcrzdZ0i2EQ70+0zBbl+pN7QNyKZG5fO1diQJFHLMmUKp8r50wYnXI4qQ4r\nY0oXogBupNlVEmjZm/wwMAw9Osr5DkFUcibNjOpcU6pXLwL2Q88QXkBP950v7XzcV8t0nCGMN8nm\nAlTjUF5tgDMnAJrNuKRUMYqcMkErfA6SfWuFo0GhiE76z0YZUAmjFCF6lNL4dk2IA2AZuo62W5HX\nPeuF585ScX2tuTXAQQgsUsLnTKMsF53lsd3M6y5aLp7dZm9nh6aZoqy4CcShQ6WMqR3aSfBSiIBy\n9J5hvWRYrWiXC9rVMUMnRr1pEEUbqTI0Zx+6yGRnxmR7m2oyxVorFWwQDpEahzcKSFE4kkrIt2MP\nPMdMGvUBT7Wl0xh0NzeL3Ch55CWGPF6BReMVtE4IPT5L4FVyFrPWoixvFDoltA5oC82kZmuv4s4i\nM+8086A5jFKtTgpgRrwGg5DsbWLaJKaTyNY0M5lYaltRuwnW2cKJNBjjACs8S+MEgGLdRkA7RV9s\nrhJNNWXSTKjqumh9ig2ORrM12WGwNat2xer4mND1VFVDM2uom4m0SpXibhVBhTY11tbilxkiUXnI\ncm1ZU+FsJXM3JYa82gj5XyDkuWToRWauVFSqCGHLEU2oLKanyZT67+gOzWrOzrmz2Lomp8T68IjQ\nD2yfP4ep3Oam8t3Aar4ghB6jLavFmuWdG8yv30RvK3zKTI1slFkl8T8qziTR+80sfZwaGyN6lqvV\niqqaEfqe1Ac8UtE3SlHlzAD4EmSckmCY8sm96hFUaoUAcALfEHXPsqRyi0A7tHzhqU/zwV/9IG94\n4+s5d+ECO7s71HUjknhG6EdjUNyIfquT+ydn4X0eHR9ydHRM23tCYpP4v3qfilOVlFSIGkUkUKmG\nXGb83g/iEF8HvA9Y7UFrtAYfM1XlQGX6fo2rajFib2VMEEOgHzrISrxhlWK9XrNeL1EoQvAMfiiz\ndSlEchYkq/ADNSllmmaCUYq2b1FKk7KiHwasKYVDkqTND6Hk32qDOUk5l1xqTPBPHWUF/Gd5yP4R\nhTOaydRgTcZax+uuXOa7v+d/Adpw7doNnnzqae5cP+S973oPb3/725jWM4y2LNdz/v0v/Y/86oc/\nxOrft6/ovHzVgHg3QCYTM3eVwxqBqeuygUiNd/pVI5WfAvkPotWJIiiNUxqFFdWSghJVBdyANoKG\nNIaUE0PXMmqALrue5XFkvjY8vchc7SLzFIk5oRRUWPat5vEzmTc91PDghbNsz7apK3GWSAUPbIxB\n2XIjlA0YFKEfGLqO9fEBq/kB/WJFKPJCRjsmu1Pq2ZSquYYxhguPPVwyMERVISXyMOqHGinPyo2q\nbAVGKkMh3ErbQQJd2FSBp6+anPKmvZKS6KkWJfAifCzC5qLkUmaHOYxMbTa47FJtpiSzolxmgcYZ\n9vZrDhcDhx2sk5XZDZmoMkZnKhOYuMBsEplOYFIpMdqtHXVVy2akE8qCtk54bxkUgcoKqEZuSlPI\n9BEfEiFHjDVU1gmfUElbRwQTBBOplABfVLagLEp76kr0S8UurEDmC2xEWjkiAG4qi+mNmCqHTA4J\nM7FYZ0QNSVuUklmONqq4BiRUlk6GyNoWsEGZM8tpUZA1KW3irzA42jX+2jPoYV1a5UoSgazv8nHT\nxlDXDTkl/NATfYtfz1ncvMXB7TkxbBFCQhsrnYhyTDJl3uks2Rp6dfL7VakS+nagdlvgPSplfBb0\nd6OFf7jOEuTarJhqmStmJOgskVnjVD4OLaMA+Dd25Qzrds2HPvJrXL1xlSuXH+ahhx/h0dc9yuXL\nFzl34Rz7Z8+yvb3DbDZjMp0Wj9TC0S2XR84J73uOjg5YHM8JQyrn8NUP+eJlWYKh1UWKDdG0zZng\nI73qqaqKlLOoxGjR51U0NHW90X2OKdEYCZQxBGIQ1PXuzh4hBvpuIEZBnGqjGfqBtm1p246ubYlR\nuN4+BPq+IyWYbm/R+R6lFEMQ8QqNJPIjXUT2dbnGYumEjLnFxpqMU2O0UjCFGFGn0OrjdV25hpQ7\nUo5cvXGV337iE6AtTz75FAd3jvB+oPvNJV989nOc2TvDxfOX2JpMiSFRVxUrvo4B8XTGlDZ/n1w6\nY3Uo1aAqIs13zxDlx4izd8qZRCAkinIGaLzMclRT2krF/kYpcpAZUkgeHzw+Bvo+cnQceeZA8+U2\ncdsH+iQ+AE5pZqpi31ge2U687qLl0rk9dnf2qOsJ1grCMEXR5FSlqqIAMcASe0+3WrNa3GG9OGZY\ny3zQ1FNmk4at3T1m27u4psFWtyUAN5WgPbNsuCl6ckgoa9FVhaoLGpYxIIoe69iUyimJBF6S10fv\nN+oUuahnxCzAnhgj2cv3lNJoZwsgRBfVGkqwlAsXJSpDqRyjUMQJYkpi7FwU65vJhPPnO45WHcc+\n0ibxJdRAbT3bE09TZaaTzHSiqC1oJUAXrQWkE0XgT2aYuQgWG0EXS7VYBBqyvIdUZotOV9K2TBAG\ncfCQeUPetIdiEvGF/Z2LKMuGOhJjlGONRumiQARARJvSvtWGiCJGUSfSVjiMRlcYK44YJJm9jtcy\nKRdKD6IKZGQuOVZk5NLh1mUDSyIBqC2ktiW24kKutKbZ2QIk2RsHKdpaJtNtjDIMfUcKHe38Dke3\nD5i3A6bphXdpXKGbCIJ78IMkliHQx8Aii0m3LQlXipFhUPghoLsBkwVVOmQJdBOERtGRWefMblYF\nKEeZEctdPyn3d8zCW/zGVYiyMpkQE4vVnC9/+UvcuXPA01ef5ZOf/jTbOzN2dnfY29thf3+fs2fP\ncvbsWc7sn+XsubOc2d1lNpkS9gNJiTjD0eERq3Urvn7fgE+nlCi5eC/BTGfp/DhlS8dCl06QwQdR\n0komEXxEE7A6oqdmY9+mtSkAFOFEKwz1pMFYTbfo6LoOrTJ914l4SPCsVusyn9QMQ0/brklJ+gF+\nEIUqAfWIFFsI8rMzuSSTekPmp3AQx/8J+P8kOAInvMvS/TqNEDVa40PgeLHGGrmPu3bN1avPsWxX\n3LpxW8BBITBfLrj63HXqyrG/d5aHzl/h7Lnz7O7tcsDxKzovXz0glg+TUIW/dLfT9ihjZUqDzijx\nsBMLpfLEnMiIoa5O8vxcuAUxiaUNRLTVopxijLyrGMnJ03cDYRBi+NEKjpaKWwvD1TZyGD1D0VI1\nSrNvKi7biotN5Mo5OH92h+lkqzg7m43mnxkz/bHHW4QhQtvRr+as2wXdek6Knrqe4rYbpts7TLe3\nqLcmWFvJBVBOfo5xQ+walRl049BVja5tERcfNVWL71+52HJKpELhSCGRBs/QiZYmShHWS7StyzxB\nKmwtDBSMEcNb42ReqE5lIrkgZKV1kfAxEKInJE+IxbZLK3IWrqU2ie2dKZcuwHE70K80Pss5rUxg\nq0nUDdQVVEYX5fyJqOwUE+aUIzFK8lNVNdZajHEoYyWoiACaBGSEDmhNRV1PRLw8ixBxCIMgkxF1\nf9FZtEwnjaBTnSZ4j+8H+qFHxQJdtyLirRQoIwo2EoxryAMhJDIObWucE6cMU2YfWaUy684bjilQ\n5skFrJMzo3B8BpIxJJU3yYtGkZRG1Q2m6KyqDcL0eS05BdVEZObafolvl7SLBevOMyTo+p6+7WTO\nHQMpyqR5RNKaVNzRS9Wpy4zIh4iPYvuThyDd9DIndAomSrRMRbEm06IIgMoZV97XCYWKTYfnG70y\nEFIWI2Vacq7QZk5MkaP5MdWt29ROaDN1XTOZNEwmU7a2p+zubrO3e4bbf/Y2YS/SDz3Hh0dCPP9G\nzUZz+SylrRhjKrq6YkEWC6bBGkmigg+b69DaXEj6nr7txRLLGUIMaDSVa7CVom2XDF7ESEanDB9K\nYPOD8FqrCqUyt27d2hgGOO2Y7m0LpaJdMvRDcQYSh40YoyTSSCAbXUJUiQe5GIjnU12o8qE3wEwZ\nQ5w6HimXTlkkaAmmWgWODg5oh16OT0ySwKQMBLp2YOg9yXtWfsV8sXjF5+XFZ4hlfpSzJhb5tJPv\nF5dnRTFzTVh1OitQEgyRk6pyRGcrHDgiLpfsPJ/Mf4yxRBJpECRp2wXadmCxNHz5Djy5Siyix+dc\n2npSpe7qmgdtzZXJwIUdz5lty7SxuCLqMl6E5bxIACkCuTlIRRD6nr5bEXyPtTWTakpdbVNNp9Tb\nM9ykRptS5gcZRsuxKNSMAgDSVS2Vm7OisDOedCgC4jIbTEMgDoE0DMJvjD3RB1GvSdKWGNYtxsXN\n68kZ45w4hzcV2iq0TSXjEiSiUhq0zLZiiHjv8b1niH4ziI4pbS5gkABtXc3+fuTSKtD5zD84ugPA\no7+msTaLSbsW1wmlI1rHImF38t7kBrgj3x/rrU2XsYgK5CIKn7NAz8efMQ6rTx2xPL5OqVMBX/En\nPvoAP/ifLpAIkMWpQ2UHKYAxBTVaFQCNVNoxAlmJSLwVPzkF5CTCzpniiTfOIotIfFYlidNlrjie\nS1SZP0llrlCgDGq6hZ7ONhlKzpk0ePy6leStrnCThrpuqFxNt1qzXByhs6WZbbNuO3z09N0a73ti\nQjQuUQVheFKl2jJCtsWnLsZISFYcRaK4crRl3BHLzN8qCZIRaFNm1PsY76UaRrLRi24Pr+bKOTPE\nRFh3RB/xQ8tqJa4yzlVMJjOca3CmKvaehpyCdAqs5eYfvUHY8nQ93DnyhPiNq3xzhuCjiF9nUFnS\nEBClqBgUrpJ5ekoUVRmF+MbkTceiH3qsFa0oHZ201RNknFDP1i2729vFQ3BNU08IfsDZislUMZ8v\nUUDlKlKRT8NmhtBLMAw9PnpAADnNpGGxFFT04MMGOJNTLlZr4+fLm1t5bJluRL3HKc6po+/T6DWa\noQCcXGV4+OFHmK8P+fJT13DOUqdMjJmd7Sl3Do8IMXKwPOLO/Ijl6pW1S+FFZ4jjjV9k28pdOAJm\nNpUh0rIRkaAT9fZxaRIxKAgK0wioJhBxxgrfj0hWEVQk5TFA9HRdYL70HB0lrs8NX+oSB6eqwgxY\nFNu64kFnuTwNXNiJ7J8x7GzNMApC7PCh6H2O4IvR+mmEy+dAGCJhECX3pp5ijKNpprhmKnOoSoLP\nOJxHjwY65WgYzSjArF0lqi/GgLZc/O/+FQA7reMH/re/VCD25SLK6aTdekoG63OPilbgn//Jz52c\nj43Uk94EIln55KyMJy3nggQbQTjyLPk9Y1JTQlapeMgC/Q4+0HYnF+v1t5VqWIFSqXQAIjn78tuf\nd92MAfD0RTBeEs8vlF4MFfgCL1pXgRvbLX/qP12mdrVs6GlslhZ1niKDZ20l585o8BlrHE3ViO9J\nHGTuEQd0MQ4u5aUcG21KQJRKMZPvInAPMQohySi5Hkb9xmaGmjQnATFG2juHrG4dYKYT1u2KB970\nBurJlOl0F9HqdmzN9kiq4+jOAYkks5wYSEmXWWuxw1IanaVCPMnJJCMPMYFxUjkOg0i3laM3AmnG\nI54QakXKJyjTTAmayJ0e7zm737iVKZqYZLrgoYUQfDkumvVqhbVVaSFmtLGbFnjIgfV6LXq23UA4\nVt8w78PN5yltwxgTzgIEvO9Q1AL4MtKVGIYBlKau6w2oru88GlMs5kaxiIxxVvR7V6XlbhXGGaFb\nOFNAbILYTXkoialQJ9Z+hdaGkAJd17FcrRlCoK5qUXnKiVXbbuTctFbF3aLsicVP9vTdurm/S+w4\n4bDfe+xlfzp53ZmdXbZ2tlCVom5uY1RFXddl3hnYns1YrNfMj1d3YVteyXrxGWJWG4WaU+QBxu1O\nKbEkkiqxPCOf/kvgNjEZsS8iEZTCR41TQtjXOm2AITF6UggMIbFYe+aHiaOl47lecRgDQ06MOEyD\nZls7HnSOh2eRB85Fzu5UbE0rZrNdsjIMPqBNK3wzLKoEnZzEWNgYsYzKSWTP6mqGqSts3VDVFmUF\nLKO0Li4Z5cjkU8eozM2UEwSnONAXc91TR2wE0uRUvCHH4JRGIMhJG3YTa8vrx/bbKCp+dxwZ27Hl\nuCf5PbFomsqFJg/e9b4zpbpVxRFLgooxmsol6mP5kQ9+VsnMwEi1FBIMITGkRDxVMSnkBtGFS2QV\nxatQYbW4elhtNt5oqgCyxmir4C7gyebu2hxwef8ffeyAO9uDQLy1Q1eOHLyo/QSxlEnF3ULoH3U5\nbpnJdIarq2LvFCDFUtkBxp5QVlSZLSuhcXR+oPcDPhadXKUJyYu8n4KQU0EGwrSZoQqqDyD5wLDq\nNgTn619+lguPPcpkMmW6syuz9ZgIKVFVNdpYQk50XqZ72shxHA/FeHzHBCozbjySBKGKvmweK73N\nId7IaY2bViyPmfLTReuUItT+jQfTPH+Nl29Mma6Y19ooXYZhGArJe6QzFQEMNJG8saSKMRP9N0+g\n1wX45vtIcgpjIoPvyVphk6eyDVVV0bUtCoW1Fk2LKzZNMUSssZuDE5M4AykyRle061WhYQzSKRo8\nbd+yWq9RKLz3KK3wPoiwCApjLHXTEFcyztJahABCiHItFuGPGAo7QBtiLlQwRNwfdbIXCOKUe7Pn\nr7Aq6zh/7hzH82PqasKs2cHZCZPpBFKiqRvqpmG+Oub2wR1u3blF27avOH17Uem2sTUUx/YVebNP\njVWhUVIFjnOf00s4JUirKVtMTjgy0RiSSiiCbGrGkZUmpgEfe9ZdYL7IzNcVtwbNndjhcyxDfyHw\n72jHFVfzyCRyYWdgb1czmzjqeoIzTk5A2WC9H1CIVqAYY8pGkBSiHWqTzOOUxTiHqQSsIqrIRSic\nUsXlzMb2Q4GuHKpw3sbqczNnioHv+NI5Pnn5iLdc3eaf/+23MfQtvhf90uxFX1NAGSf8uR/9v9xA\nacW/+O/fKGr4swluMi0AGsDqQt8QHc6UgmyqPtB3HevVnHW3Jmcr8mSY0tKVrVCrDHkknsvHCTEU\nUe+OxbLl//S3bxBT4q/8RUdUNbd6y7Mrz4FXDMoxme1x4fIVLly+zJmzF5htb+MqS1aR0LX0yzXL\ng9sc33qOuLzDtum4slNzZXeb/a0JjXU447DG4FwtN7UqouOFFJ+jpD8pjXSDyLv+zn8o11ZGWVH6\nCIDvW2JxFUlZ5KudtbjKIUT9TN3UpaKowbpNmzZritJPCS5KWlVd37JYH7FohZystdnwvVKWeWOI\nkZZMsLtML1zGXHgYfcqzTTuHbmpWV9fMnzlm68wexjmUtWxt76KwtG1LSIqLZ86SraWLib4X4JBc\nxrm0oUcOT8ZoEVxASSIhoDWpcp2T45pTLPfLqCQ13pdjC18oGRMk+HkkIG7aXPe3j7zqSyqrzJCl\natd6DILlvs4FYA2Qimdk/OYJgqcaOcSY8ZS90BanlhjA96SUMNrSDx1KN4LO9h6VQKslSk+onCMn\ni7WNII1zEv6wkrly13UbXqL3EZ8GfChjmBzkPMckfpwxyuxfi2ye0YohSDIxigdItylBlMREF8Sp\nTiOwXQ68gmLTpjb2afd3bBR7e2doZg1Hx4fsbhv2zpzDmobppObhKw/z+OOPMt2eirJTu+YTv/tx\nPvhrv8ZtDl7RebkvHuIY9WORHBuXVrmQ8SnKKKcrkM1LAUhRkZIprVaKCowoUVgsSjupbGJi8J7j\npWexsMwHx83Qs0wBz4mcdaU0Z7TjUp3Zqz1WJzGINUY2ttKPntYNylbi0xVCyaAVxo2VUdlUy3DZ\nGLH+2SinZQAxlpU7rbQMDSew+slUKooSbMRnMW0uslyqwRQC7Up4Z7FvIQRUkopJaVvkyYy0+LS0\nd+tqgqk1dlKjrJYK1BixuDJ2k3CkmBkGT995VqsV7XoFSpRrrHHS/sujJB0o0tizISTRLdTGEBHe\nY9MYrFXEQfGlI/jyuuMgOqa7+7z+Ld/CO977Hbzh7W/nwsMPsbW7SzOdnajygFT5fU+3WLA4PODg\n2Wd57guf5epnfocnDp7l3OKAh3ennJttUTm9SVxG6kuOAynKuZRrTpNCIvQn1jYpp0LNUKQggIGh\n7zEqoYwQ/Z0RQe2cRIDBVsKN1KWEVQVQhTE89g/+vwB8++f3S3su4cPAEAYJgiissTz5qMxUfuz/\n/HHZaJXF1BPsdIapnsRNPoytm5N7xUK+kogXBazzw+mHeEv1XnJKNLMpzsm5jkSUdURj6HykG4aS\nZAkgTHQCTlrjEgRkAxkJ24LKjQxhwKlxzHHSUcj5JMhlhHMo6ZIQ9wOZFRIY77mZv4nWGNBzytLp\njvGuhsIoIH068HwzfhoB1ZwYNWdSkRwcBKHcTEWXNzhI4IPHBINRmiEMVL6RMYbq0baY5+ZEzAUR\nmjI+DMSY6IaB9aoVQW9nycDghWQfQ0IbhfeRmMpcX0vnI6VISAEfYlFHgrFbM9LYrBYP0hxHvEMp\nn0bcBvd//Kuq5tzZcwyhZ7FcoKk5f+ESFsebXv8G3vGud7C1O5PfbxS1s7zu8UdQCv4/5n8SsZKX\nue4jIBbB3zxKSJ/Is1klN+JGoaZ87Od/cMlE5cAplbHZlqoroFQNxgmEPkSGwbNadSxXhrV3HAZo\ncySeylUNiomy7BrF1AZRN4iKfhCwhq1EKSVrTd3MyCT6vpd5TPRkDTaLkrzTrmTeBqWiuDoV5Zqc\nEc1LpHpQWoMpei1jKqqUtEpz4cAlqRpS+RM2FAq5eVOIqEyB+2dMtihdYYzFGo1tapl72WugFNX2\nBO2MiFMbU1R1HCJdJ/TE6D2+HWi7lq7r6PtOfCTrmkprjKk2Mk5a6UITGCg+zRJcc0bnJGT/VKGr\nGmNuklTm0wuN2trj297xbv7w+/6XvOMP/D72H7hCNRFSPCOAprR45S9RxckxkLwnvv1bGNa/l/nt\nmzz1yc/wmQ//Bp955rOcH9Y8sjNhW4nihDNWugkhonRC27jJLoe2x/dr2acV0s73ET/0BF8SDyIh\nBCa2onZFDDyJAbO2BmOqAkpJKGfGfuFds8yMIiWBpvfDIDB2BbbMicdnRRRUE6rpNrpyeO/pViu2\nbMOo2ra5i5TGVoon+Dj/A/9v/jJ/hYyIJzd1IxWjUjTTbXRVk7qerl2TQ0RXFq3cpipVWmyeplsz\nnNLFLUFvpKyG9Yrb/RobEpbSPgVOCSCd3JecbFZjFanILIFBfVPHRGAMduM1dzK9Gp3ZVXn8m+1j\n5FN/K5WxRUw++EgIa1xVbdDsCS2iHTkXWs3AtJlQN2KbFLxwbtt2TbfuGA3TjbXSNQpJ2qFDpLKO\naVMTc6TtOoxxDH2LsdIGDSHS9XPadYvWGe97+r7IseXS+TqlPDNePCFGmWMqXfiy8mDa6C7f/7HZ\n3dri3Nldbt5+jsViiUqGyxcvc+XSg7z9W9/G7v42q/UKhaaZNKSs2N7d5w/8gT/IL9T/kfX65YNr\n7sv+SQ6vBEO9CYdFMBmwSvhnMpM4eXwMhFlKTLyHhMHpKYqI0oNkFUWWKhFow8DxEpZLy9ob1iky\nFJi+/E6olWGmLDMDriCbZEOnAFuErGqKb14KQdpHSkOQwXUIXi44onDSnBWbmYIqlMb3WBFnUKVa\nMSeOEpvZXZIKR2TVpDLMSZwx0hA3F41SirqpUVosg1QuQsraCjFcKWxdYYwqCEeF3Z4Id1GdtGNJ\nURKMGAllLtB3A13fEWKgso6qEjqDNYLklGZ30TalyEPlTMSjst3wIA0Wg3DbjDbUFbz5DY/wut/z\ne/lDf+L7eMO3votm7yzK1ajTs8vNRaNOvldmcVqJa4StHPXWlL0HHuT1734PX/r4J/jcRz7IZ579\nLBe7FRe3HZXv0UljlMGaIliglNyY65VwK8uPt+VmHoK0Sq2rBAAQBqpCdclKHD+0PkGsZjLJD5AN\nGmldQuTbv3AWgJ/5e+/m4OgGz91+jus3Iu1as72tOXdum8lkxn/7t2+gXMP/7d//ZeorD/Pc7Zt8\n6rc+zJOf+iQXH3wLP/Tf/CRv/s5vl8OR0kYMXCnFd/Pdm0Mlm5tH25rJZIuYogTGYgDdrXtpl47C\n5WVEoQAVFI1raJzhhCQt51ZrAfwsUmaaT8omI2/iLgHrE9n1k9NmEf/D/ps9Gp5a+dT/gbsqk2/e\nNc59wQehFCgylXObZLptO/FDdIn54hBrLVuzHVauFqUhV7G9JUj2fmhRWWG0lY5G4TLGUPARTc0w\n9MQU6QfPyBKIIYoDTEzUdY32YKaaxWpOaW6d0CpKez6nE/rRWKnnHO4KfJvHX8JJEIuzmrZdc3Q0\np20HppOMsw2vf/3rOXthn+V6wdVnnmZWb3HxyiVBupI5d+4cW1szuq572YCpF60Q5QPJZqqVzCLU\nqTaLUaPDGuRsnlcaj4FREbPCe5lTGdtL1qorMJUETu/p/Vq0SdeGzleskmIgETgp0w2amXLMtMPp\ngFIZZaCawGxaszXdw9mG4AdMzoShI6aIrSeiqac8Fivu2KGHHDF9cbtwGmVlyxmrEFVUZZTOUBzr\nx0rw9DEaKQcxiPUUKZNjLsLPpcVlDM3WlhwZLeFEZ2kTi82QkvmgKS0urVD1RFqkhesjHDnxRhO/\ns4T3kRA9kJnUjRjx1hW2sqJskQrpvwSrnMQgWBOlehqxwVlk63yMRDLGGBqt+c63vZ6tNz5G1dTE\nEDgp0eB56J4xJec0dEMpUygLQkZOFmZndnnz7/sOLjz+GJ/9yG/w3BO/zuroGpfqzKzSVCpipC8t\nxr79gDaOpt7aVHMZiqlpTTUxVI2cx+gD0bcCX8eTiCgrIJMcB7SqhWw8FOCNsWDkVkgps2yX3J4f\ncPPOkuN5JieY5MSq7wnNHnqyhZlusZhN+PAH/j2f/o2PcXjjFrapePixmnoyQSGKIYubt5mdOYOb\n1Hcfp5xZHh7RHs2lFZpFyP74+DZ+kNlR16+Lm7rDGnsKiZyx1tDMplS1JFcjsZlcgoGGTon82nhe\nFBQd07tCBxkIKAbyBl1qN72gb+6Q8l/2OgnawgFUCAtDuNsi5CD3/eCFcKGVYuh7VovVxvFj6B3R\nS3dLeLXiWNMPgwBwtMZogw8yIwwxMvhQRCtkUrxcrMROLXSs1wtCiAzlOpRJkVDuRsPilKTISFnm\ni8DzguFJUvJSljGGpqnxQTARVlfsbZ/l4vkLPPjQZZTRLBdzbl+/jjt/ha7tcK4ixYjWlqaZYK1l\nGF6eefB9KdWMlItNYTROdUqr9LREdXqeX+JJgFSEqPEp4kjorEElUIYYPINfslp1LI4V7XpCHy19\nyoRTwtgaaJRlV1fsG41F+FXKwmRnyu7Zc2xt7RQLH4VztQQmLfMmoxTZOLIyouEYAzENDEOLMppK\nFVNgpTcnNI9tUWNQeQQIcVdATEWCKQchieaywSmlMZUTsYGCEHVNXTZAET1XQQin5ISy7qSNhyoB\n2DAK4G3k3lJ5b0E2a5kRGZrK0TQ1rh6tkMr7I8oxiDIzRAuKLKnCAc0ZrQroRksSELNoGaIyuzqw\nuH2Tw9u32b/4AM3uWWzFJibes8ZYmSnVdqGoJOkhaKUZuYV7F8/x9u/+bs5eeZAnP/w/8+UvPsFD\n2rNdKZLvcNoSCyl5ujWjbqrNz89kqqbB1rUIqSPKPNoaIkHsubJ8JuMsOipxzphty7EOQUA7GRSm\nADUCB8cHXL815/adRNtqjM0cLTNDs8Xjb/396NkHaPuW//Q//izPfvopVnc6UTxqwFpX6BDSWhoW\nLdPtnXsOUfCem19+hp3tMzx+5S088/RT+NzSrZ8VrV4yXS8/11XSvUjl9Mm1ZZlMp0xmzaZlCmW0\nETNUGq8SEZmxpSxzwU4JxeLkVMm9nMgI4B9G3SbDCUfxtfV1XJnNMGoUO9FQgpeHqKhqLUApawlh\nIIQK7z1aK1ZraWc6V7G1NSWnWGYhFEGPJAwwIwjVbuhp2xZnLDmnDdk+ZVHN8UkoP34IG7qF1gqV\nRDhcAqMqHPK0GZeMrWsB6hXE80uc3TZVzWw6oWkqHrnyENuzPSbTGY88/BDTnQbve24f3OKLX/wC\nDIbtM2eYbRelKgXOSXfs6xIQR4TbOCYt9M9TM0RBK+ZRQ3LzrJNAeLrXHKMh5EzAYDQkA2RPDIKC\nWreZxcrRhZoha0IutWGWC8SV6nDbGLZdYKIjWmWq2jLbmjKZbkEBF1gr1VFMZToSk5C0tcEPslEa\nBDHo+7bssdLrNlb4S0JTlKAgCLXiPlc2JShVYT8QQyCHgOj8yVAaq4uCTEkJtHCCVDH2BSWUN+dI\nyUvQtQ4K5F+G7EXDMkZyTBtKRRq9E4tllThlG+qmQruiyVmOvypVg5wrAaGgRdQaLRU/ShfAkpIg\nWSTjFGD9mv72cxxcu8aFBx5i59wFbDMpKNcXunJOIqIarwltUCZJmzJlodooafPVTc2VN76RZnuL\nz08nfOF3fpWHk2e3coR+jcUwmW1TTSZS5pUPZusabeTmFJCWJgeR5bPW0EWIXUCrGjedkbuO4IeT\nY52tJBkxEJWQ2n3wPHfzFjdveo7mhjZBGhKzapcH3vL7MA8+wGJxRLdace3zh/ilJCgpZVIMdN0S\nXyx1jHPsXbmEre+uDjOZm89e5Td+9T8x29rhj3zff8WjD30LT33p0zzx6V+ja8EvjuhakbCzRip3\nhZzuggFisjVjd/8MqOc2M285+qIUEhHQTLmQCBp0pXEh0/el9axG3qHc60PZFAIvbSN7bb38NaJj\nKYVHSsIFFgeOTOWqjbJL8AFjRVBkGPpSJYq1WiLDKjObTrHOCl+v0K98EAm2YfCEIL6kmUTbt/jQ\n03Zrhr5n6HvIknz5EApfUapUXZLYMYlMBRuh9cgtKHvaOGXipaGUtVY0TS3JX0q8+Q1v5N3f9m18\n8fNf5IEHL2OMYWgHjo+PefbZGzx08XGq2hH9gNZijGyMwTl3gqZ6ieu+UKajEr6g2U6gzUXdUZ4D\npDwSL04BFEr2g4IQIKREIGKVBu1QORFCoPORttW0g8VnLeg98qZZqoBKGRptmWqYmsBWlXANbO3W\nVPWMdug4Xs6JITPb2mJrOhN0obai9KE0OUaqusGnCKGjThV96BmGoYBVOpIe23waYwWNJfOwiHZm\nU02NqD6/FgoFGSFpIzNESCIlMp4YBaYSgesx0wdQMYPXKKvB2s1wOhd+Wk5qg8AdFSBSMQbOxCLh\nZnGVwdTVCUK25P+KjI5BqAXjOVJGzospZUeZ8+WUUWWoNL5tmyJqMefOc89w5+bDnLl4kWq2ja7s\nVywSTy/BvyhR18hGDHlTRCeDikYKO+s4c+kyb/i9f5DfCYFPPvGrvGnactYZkYFzIrC9IYorsHWB\niiRJFlKiCKNngh8Yup4wdFhVMZnu0seE73vi0OGaWfmQEZLDD12xkfF8+VrmzrFm5WGVImbS8Pi7\n3sP+29/AZz/9Mdo/sCztJY1FpM+GmMmt59aNa9x49kkefttbcXVNNZuMN0+Z8YmtzUd+5Rf53U98\nhGYypZo4Hnz7QxyF54ifh2prgu1WDF0ngswaRF9QEkOVQCVFU0/Y2jtbZPGkg6BUSYBCZEiZIQut\nQukMxlBPK6p2QA1xQzlRShVADZt7+cTT47X1ai1poGS6GNAaKieWZaaZobUTEQLtQAmAJWeIPggQ\nrYh6Z+Po244YRekqK1W0Sj3tao1zIjiilaLrBYS3XM6JXlC6WkNja4YCuDFWE4eCDCkk/Kauafv+\nRMw7U+zpTubV4+zxpaxxX1us5xw9d0i3bJluTTi3e4Ht/W2hnMSBxXLObDbj/IP7aHsiNCLbWOFp\nlln5S10vCqqRWJg2X51AZgqYRolXYsq6BMXxlad/zqiiIbwVVCKpWsAh3jP0nq5NrNeOIbry26QF\nKzOThEVRKcNEKRodqWykmka2ZprppCLmzHq54ubtIw6OArs7DW94/CLbs13hR2oj8y8lNjlOQ9YN\nKWWqnPApEn0vAV9ZUEEI2qWgUjqTdRbwTyoAhhKgYnGNlovCgJF5nYqqFHBjVSPVnjZSNUUfSEMP\ng7QR9XYjNlRKgnDOIvFGaW0Khz8JQLdcjMporHUYK3qGyhYewRhwS3ClVIM5J1SWYHqarDVy/4TI\nn0p/vFzsMaLDiqOb17nxzFPsX7rEdPcMja1OnDxecJ1O05QkFVqRdXFsGCXbVEkMtGH7/AXe8vu+\nm4+tWz7zyQ/xznM1s8aIpFQa26/jhXUidCDwYBFbiL4j+hExC7Z2aK0JfUOM4vPmmikiHi6k7ePF\nkm7wdEPiuQPN3MM6R7yC1z/+Oh75PW/j6auf5kuf/7j4weWMj1AXxkjMGWLi9rNf5qO/+O84d/kB\nrrzpW6iaBqXkXK8XR6wnc5bHhzz56d/hda9/E0fHh/zmr3+AO7ef48kvf4lnr9/C+4DSGp/Cpu2U\nchSj4yj3hjIwmUzZ2T9T7lNpfY/3ZwqZIWX6rJgqAcC5pqHZ22YZj1GrUWVIzp0um8GIRk1A/zWa\nIZ6mfLy27l2lxhPgCogi1viYhoRQmIzVRJUw2TCEAWOcJIERKms2xPkQy4hhUhOCuGYopWmmM9mD\nUizUDnn+0AYm9YTF+pBu6GmaGc1kijGWVbckpoQxhliur94L8l7m1mUfKsB7jSrSay/9ZCslOtOD\n9yyXLV9YPYXOhv/6T/8wxlpCjMznx1y7+izP3brGpz79KfbOnuF8VWEqJ+pUFBcjNUrVv7R1fzxE\nZH9UYwaqRsjE6eqQEz7NqZVO/T1ETYhCHM3akHLAx46uDwytYvCWmGQqmQq1YbSYsgjVYqIVtQ5Y\nA65S1FOHypl2vWS57jk8DLRrgJZbB4fMJjPqpsE4g+8luMQQZO5iDDF0aGuoU2k5hUw2QoJOKqGS\nOhkQZ8gxQ0gSkGJxkyjCtKQkItHFFYHSpshRqpYUIv3RogBFA6EbSH2PdY7JmV107VBW5JlGAYCU\niztEMQyVIAwgMnGqBBZjddFNfV4ykksgMmWjjGVjSmOlLzqmxHFmCimLjawIsQsdo0kD8fiAG09/\nid0L59na3eN8M8E0Mwk8d8XEu6viF7iQZL5qHSbGsetbADKGvQsXedsf/MP81mrJ5659mmljmSlw\nWWNObRapHPeclGjMUgTQy8yxbmYY47BGEwO4uib5kWQcUcVVpQ+JZ2/cou0TQ4DbPrFIiTYn9s+f\n402/7z0c9wd86XOfYr3ukLaQFmh8iFid0VH+pNWKT//qfyS0Kx5/z3exd+Eyk+kW27M9Dq5d5eDd\n12i7FTH1vPVd72a1WnF4cIcvff7T3Do8Qt04RBuNtpp+GAQuH0IRfhbEsHQsFNPJlHNnzwn6r5xL\nZw3TacVq3tGn0eFCruft3V3qs7vcPDoRQU6IpFtVWqcKRYW0Tkezq9fi2Nd3yVhD8ArWiCoUpfuU\nUkCRcbUtYJZESp71eklOwv8TiokkwdoIqd9oQ1eQx6N0oytBpW3XYgDce0LvsVVFTJ6UZAaXsqgx\ndX0H2eAMGKM3oJyx+kybobYstfl9L+84SMvUYK1hNp0xaaZcuvgwe+f2GPqWvvcc3jqiWw6s1wOf\n+ewXuPLQZaazBqVLBxBKov3y+hv34XYhN78pGpZuBNQggt4gz5EgpjY6j3ByIyXExzZFGPwYOBMq\nJXyMDD7Rd4YQC1l+/C/LnMtmg1OaRhlqBVYlnMk4a6mqmoRo7B3NA30rahzOJrxvGfzArMmgIkob\nQookkvgGxoTByixTJ0wu2ezG0qSU3aNG5RBIOaBSoVjkXDIu4VcK4EUsnVIsNj2+L1ZFIpy7vHUT\nciIJ5JZqMsHt7+K2d9B2IjQD7zcXWh6rhDhKEggPUmnRb9SukpaosafQl5nRyFbmdCe8IFVmEVKZ\nFe5osY2R58ikWI2ZTxY90G0yO0PP0c3rPPfUk5w5f5GtM/tsuZpsXJF+y8TQM3Rr2vUapTXTyZaY\n/pYWcClvyxhTJJ+SKccwis+jMpr9Bx7gzd/13Xz8Pxzx1NE1Ht/bArwE33JhxWEoAs5ZbuKUSD6S\nSiVqihFzCvI6V9UyG0uSkGhjQWW6ruP67WN8qaqei4E2Z5RzvOsdb2X3gX0++dsfYvCRarqHtS0o\nOHP5QeydI+jn9EFEKqqc6Y/v8PEP/Ad+5yMfxs5mbG3v8tb3fBdvfufvoZ7OaPuWLz/5FN+6WnL2\n4iX2zp1nZ/cMMcPNOwcslmsiga7r8b4nhIGMkfedPKOMn60c+2d2RRkE2VBc5WjqmoPYMmQB0igN\nSWu2zuwxO7ML6plTQS6TlCpaprIhqPK3/hpFw9cqwxdfmZOWdS6glXH0YZ2hnhqcaUoHR1SzlJWB\nUtevUXqKsxWZzHRSb35aiJ7Be1BalGqGQcj92jCditJLN7S06zWVq5ltzViuF7THa4wybG1PiVGk\n5FKU333CXT1F38kvD0RzehmtaeoKtGJ3d5e9nT0euPIAxjmODg9YLZZMXc173vltnDlzhqP5IU8/\n+Qw7szM8+IjF1ROhOannJ+j3v766uLfWqFgcJUoWuvE7VIJ9lCBYXK2fdzBOD4pjzoSY6XpIyQhQ\nxA8EnwgeQlSkJFPJ8dUKhVUGhaNSmqk2AsfXCVtl6logwDFFkXo7VnTe4FzEWLEP6bxn3fdMFKAc\nOXpB3mHRWWyKlDH4MBB8hx1naQgHLgdRJZFKZByuZWL0pc2oSNGLOk6SmZSQYXuCb4l+KPNFUapZ\nHxyiyRglFIzZpYs0Z/dRrpbhdfQbiSOJt7L5ieOutDWVEkUYZYpyjWKjECPnRqgjGx5QQQipEogU\ngDVknyQAaY0aey9FumXUyVRKUTmDdplLDlJYs75xndvXnmH7zD5KG1w9wQ8Dx/MDjg4OWM2PWCyP\nIcP23j7nzl9gf/880+kMo04El5U6OX9EyexMFmK+sYlLjz3KzW/5Vq5+6Dr765azswY1nOisRO+x\ntWjNRu/FGSJEULbcmKLA0feexsgcOZm4qSozkag067bncOHpc6Ync0QmKrhy8TxvftfbuHPrOgnH\nucuP4+oJ9XQOKK68/u309gvEgxV1F7FaUWsgZtpuYDW/QdaapnYsDm/z3LWn6d61IsbInatf5s61\nq+xduIC1NXvnzvPo42/m3Md/h+XiSdbzDr8dGPqugCccpnA/x3tdKcX2zlaxM5N/ayXavM4qfCiO\n5WiS0kymE5p6RoiKUdtWIZvZsDknBe3IWDG+ViG+mkv8GcWH02iNs2Aqh7FSOSlVBN4xwhlUBjK4\nSlqkxlq2plNcVUHOtG3HYrmSgKUUWlVMJjU5Q9eJEpIxlrqaMJk2pBREm9parHUokwneF6Sqwgfp\nBo4YClVGW/A1SHyUBPDlosXZht10hu3dLVbtghs3nqVbd1zYv4TSmQcevMiQWtp5YKq3yT5x6/ga\n6/V6U8G+nPVVA6Kpa3LfY4skm0Hh1NgqHWsOEEbbqHt6Mpc4ebz43yXwobS5shjhxiETo8JHQ8hm\nPC6MtaJBSfAo88PaBLRLKJsxVsr2tvcs54quNcRkmJhEXYlIdcowhIgZBqpKk3UWc15FaTOq4lBR\nY6wiRpmtqDQa8g6lwisBSonepxzv0jJOEZWCzOZiwg8tQ9cS+p7kB1KQi4dS6dmmZrp7htnFC1T7\nO2hblwzLk9Kw4ZrJShuAz2aGu1Gs0UUcu7ixi3irnIlSFcrGNza4FVlFsgGlxNVeRMVl3qnyIOcr\nJ0LyjAofOQc0mW2reNhl7qyPee5Ln6dLgWvXvowxjsViyXw5Z71a0a1F9zOkiKssZ/fPc/nKwzz8\n8Os4e/YidbG1oQRyrYVHl8r5Uklap83WFo+89e1c/dwn+NKtzzNz9q55tjai8J8jhEGECbKyOCPB\nPxEgCcVEmzJ79GUOqTRZCQJv3ffMfcBnyb2TA2stj77hMaZ7U25eO+SBh9/A1u4Z6umUyewJAF7/\n9m/l2jBw53NPY9RAbaAyGV8U5WLIKJVIeeDWM1d59tp1jn5MjIOPb9/h2aef4pG3vhU3sWirOXfx\nIo8++jq+8MXPkaLHGiW4qxE0EzyjmbXKYoC8s72NNafmqipjKsPufkM86qEXtLBWCm0sMYOPJzbf\n47xwRKR2GWYKthAjYYu0T19br84SYElBr6uIseIP6r0kudY6HBVVVdHUDSF4/CA+p4nItBih15VD\nGy0dg6l0nrz3GwTo8fGc5bojpkTlHJV21E3DYnVMipmQIt1KUM4hiOg3QCi4CRhnfrIvxRhecUB0\nxqFNxXp5SFNrjHJUjeX2nZt84nd/ixvXrjOZ7DKpGi5cusByvWZ7cobLVy5ye3GDj/zGb9B/X1eO\n48t7M181INpGSvSqVtBlNAqnSrkOoEZpnvHGGgHEp4JlVqWKTPgEQ5S2qo+e5BPRi7VgjPquzZui\nk6qywSpNoxWVkj/OZGyjMNYSw8C6DbRri4+V+PrZHqNFtJvCg/MhYG3AakeyEWMM2ljZXlNGG4Vz\nDdq6onnqpVobBnwcTVoTWQessWhlpfUIpCCBLwdpkfphIA6+0CUox0tcrWc7Z5ic3WV6bh+zNSl6\npAU1Wgj9MgsuGXyK5ZDooi+oRcmkuDec1rdUG4BMKC8X2sdoAwVqg7qF8roC0ElRLvbBy9xqKHqI\nOWcW6wUZxPFEt1R9z9UvrvjS1edQTY2xUrHqYkeUk7RAY2k7L48WLObHrBdLHnnsDVy8+ACTyeyk\njarlXJgiPhAVxXdRcfbiJR54/dv4zDNf5NKq5fKsKeEQ+X0pEwYxTrb1BGcrqZhSLnNijY8eNQom\nKzFUVVqRsSQS3RBZ9yNtSPA5lXOcv3QBYwyXH36cnb19trZ3cK6iaSZkMmcvXeZg5xx9toRctH21\nCFBEnwgJca9LEFXGM5T5MBwfr7j65Wfww8BktoOuDNvbu1y8fJmtrQk2DzS1xseBnKP4Nqhicl1a\n3sYY9vbOCMXo9MZSO/a3aoY0Z32n3VR7XRjwvWTQz18ZGCU2YrmwJ8gM8rWA+OqslMdSQpWunMYY\nRTe0JALTZsakgRSkLaiNEbcPV+OsIxbxcm00IUZmVcXWbJvBB5aLpQj3p8B6LSLfqmAUtLHYypFV\nFOqFH8RHNXhiEGJ+TmIqvpkdju+5mGO/0mColGI2m9E0TcGkJCZTh3WG4/kxV599lmvPXAN1jSsX\nr3Dh0gVW6xWfe+aL9P2c7b0tnnzyKbnHGbt5L329eIVIZnbhDPm5OxAo9iryeMyKiCJkJTPCDM9v\nsCTEyHfMvn0whJxQKRY3dI2PCp80Eb3RUtRkKqVBRaxSTLWi1hFjpHR3tRBN+z6zXmb63hGzw5ke\no4tYQEoE35NcT9TinTZpnLRLjYERyOESZNmAjZGNZ4iRpISiQILsZaCMETTtqBKRcyb0LcN6QWg9\n0UvLlEixyCv6lypiKsvuQw9SndnZHFsy4gGZErmI8RauyuZCofy+MRgqLRzLMWjKV/kkMEoJKLPD\nJBvyCLHPWaOSBM0cxTEgxEg/DKzaOe3Q0XYtfdFMTDnzzPUbm5kBWoOraPWMp4aKPJkxmW0z29qi\naqZYY1DG4JylcjUUCbvFfMmN69cYye8PPPAIdT0hF36HyLsZjE4kbTYaiM10ykNvfAuf/PCv86nr\nT7P/yPlyZWViPxSUXcTaCjtxaOfKz9MbsEIKosmIF/UdU4QSRtDSumtpfdpofYYMdV1x8YHLXHro\nIerJjNnWGaqqQWuDdRUpJ7Z291CTCeusaSPMosJE0AmIChWR2bKWhPEUcJe+j9y8dYfVfMV0axel\nLTkljuZHbG9t8+jliyhtSSEXndxya40tdMl8mEymYmGmhNQtzQ9VyM09a91t7sHFaoXKAylFNg2F\nF1gBWGRRRXFqlPt7bb0a62TWL8msVtK+FvH+gFIDzlS0a5ErbJqJ0JJMhbWWlEChcaYiZ0Pb9XRd\nR9d1rLu1AGm8jERkRBPxw0CXe3q/ZrE4pmvXBYE6eqnmjZGBeE2qjZQbvPxq7PTSWjObTkX1pmBH\ntrZ2MMawXq8Y+siqi/jBc25X2AIpJW7evsNHVx/nW970Jt74yJv5srpRMBRfj5ZpVZOBvUcfIbYd\nw+GCn/nckjsXJQr/90e3v+oPf/b39/yT1dX7fCsdcHTPd8/cmPJnH9+h0ZHaeJyJ2CpJiy1lBh8Z\nek1I8lGMihiTxasrBbqhw9kKa+QAuaqiroSrF2OSWaBoHoFOJViUSU0MhChthso5jLFEMppIyqNo\nd6Y7ntMvW0KXBQhkROZOa0EiajNyGB312V101QgYJIaCGo0bMM4o0AwSDEVnU+ZtehMQi5kto8qK\n2nwNiH5nOX4n7Q1dqCNlPhpEBLvve1btisXyiNvHBxwtPUernuMhcdx6UoZf+cIRZEVjMju1Ynem\nabfWLIYKStDURgJFM9vi3LkH2NreYTbdwRjLfHHI8fwO3nsOj+5gioP5xYtXRBy8BHMlkitSueei\ntegcFx+6wsVHHucTT36OK9vH5XNBGDxoi3YVtjIYN4qyl8F64SWmKNWuiAFkSEH69xiGoWfVrumK\nQr5UwjCZTTl34SLnL12g71qa2QRn3QZBp5Ritr3DmYsX0bvbrA8PGZJ0UUZGy3hufBLFl5BP5iw5\nZ27eusX1565y7oHLQGK1nnPj2jUunLvMO9/1Nu7cuInJgn7WpqSKSRCj2oi9z3Q227SDtSniAt4z\n9D0pRWIuajMpsVotUVlmS0aN2qcvvAKwygiIDV5TrHnV1+gmoaXlrx1GG4yy1PWUGAdEgMQxmUxx\nlaAsK1eRUqb3PW3XsVguWc7naKuJKaGzSLmFGAtxP9O2LV2/Yrma0657QWwrUa0ZE26jR9rXSSIO\nch1/LUBTWinq2jJfzgkx4qxjtjUtmAfFztYes+kRh8NSulhBzAByzriqpqor3vDY43x462OEJMLl\nIbx0ke+vDqqxFpMzW1ceoV/MWfqOOxdbXs18UV1U1GqbWntq46lcpJ4qamMLuCWToi1UAZFD0yqj\nseSo6X1PWB/isqYxjQyqqwqrDNqKks3QDxgtskTaiFp7v1zTzeeS4ZsK4ww2J3QMDOuOMBT0aILu\noCP2cmG4ymAMuMrhJjXNzha2XoL2KGvQlSttRZndpQKv3gRCTdE/RS6Goq06cvZkpjgKpkfImjxa\n5DG2L4oQlFKii1rk3aRajMVDrGe5XHD7+Iirtw+5eqflmeOOgzax9JlFhKPSRvz1G+KZNtOKByrF\no3uJlDvaBKQW7Rr2z9Y8dOUx3v5t7+XhR99I1Uyo6wkA88PbPHf1GW7eeJa2W7BczLlx/VnqZsqZ\nvbPSwjyFitVa8pMRWDXZ2uJ1b3kLH/7gL/OZ60ebYX5SSpKd2gmOJidRf1BK5OpyIoUg89QYENun\nSuxicyJkRdstWbYdvT9JRHKGnb0dds6cYTLbZRh6jg5vMNvaQ6EFYUwmhJ6zD13m4usf5fr16/R+\noB8UIRS+LXJeBiQYjo1KBVQZDg+OuHXjJjl6wuC5+uWnOLh1m7e/7e2cu3CBrcmMrdlW6VwUm7Dx\n2iATc5DWcpHQ0toQU6LtI2fPz2gmkaSX+CiI7mG9gjyIqs593ML9qdHHa+vVWTLvFRyANYa6aahc\ng63EvaWpJ1RVJapfwdP1Lc4ZYnLU1YSUArfuHLBczjG2oq4aIedrCySCjxwvjmnXnRDd/UDvW46O\nj5kvFwU8Y4q5+MmZj6XVf/p7X4vKcPO5lYxclqs1AHVVM5tOxRTAWibTLWxB0c6XC5599hpHx0ti\nTBzO53zi059mebym/0sDW9vb7Ox42q67S2LzftaLo0yNpjm3z84jj6CiB67d87xHeZSnefol/eKX\nsv6vixv3fO/SHcU/+hOJwSd8KMhEEjorVNZisUSmDx2LIaCiojIObGI6mWKnVWkzGZSOeN8Sg8ZZ\nQ/Q93fKQoV/RTLeo6grtKgGgDJ3on656UpBN1K9lnjPZdkx3G2nf1RXVbIbbmaHsVYlvSqOK1VVO\nkXFkmotPjbQl5LOMfWltNFo7VC62UwUmOm6MuURRZXQR/s6nkKLleYiLdvRykRwtlly/fYcnrx/y\n2RstTy8GDodMGzSRCpQlaUVSC3JOdFkRUsanTAOcGRSpVaTaMGm2mdRbXLxwmdc99hamzS4XHnxI\nbtoUaVdz3MRy5dFHuHDxIteuPsWdo+vMj4+4eeM5mrpmMt0+hTyV0koZXRroCeqKBx5/HXtnzvPk\n1c8xfkSQ4JnCAEmANKLyA5A2nznnBEmCq1Fa3D+0JYbAsm1ZrhLreCrNy4q6bqgrJzJaCeaHR/gh\noVUxm1aa7EHpRL1VEbVhGRVb/Qna2hRdX5/Fx3N0qpB3DqvVioNbt/F+4Oh4wUd/4zfZmuzw+Fte\nj6s1Ws1wkzIHTwhfVI3akWJHVjUVRuvilCCJU8SxvXeGZR9AK2KAnKBvO/F3jDIP+mprnKcO+bWA\n+Got2Y/YWEEZJ2OSmBKm0Lx63xGiJ8bEer0Glblzp9i6Yei6nvV6JeIT1nHh3AXOX7gkvMKuY71q\nOT6a0/cdIQwiAt57Bi8YCRTE5DfvhxIEX6Z5xH0vraTj1/fSGWrqCc1kUu5n0bter1tpHYeeO3fu\nsFoJerbrRWnMIiIYVVWxu7PLfL6gbV9aAfciPMQMWuF2tplefBAdAT5yz9Oe5ulXtWoEUGcVKe0Q\nOgHkmKJMYFXRXFVC6DfFDyz4hFeRRbNmCJE6S3vTVhJsBnqij/T9QL+a06+XWK2pp9tMd/ZlUO0H\nuhDQlabeqoqgsmL34i7NrGYym4p4t9XousFMa5E306eEsLQRqTF1EtxGEJFUSCcuT6A2+oFKnZoN\njnIHGmFiKE1B75wouWShVKQssOmuW3P78Igv3zzmc8/N+cLtFVeXnoMhMiTIasRvJhR+M7dSaCoj\n6pZjRjgYTVCOrcmEc2fP4dyEp7/4GVROvMv8AUI74HTF4s4hT37hMzz91Bdo6prH3/RmHnz4EWIe\nODi6zeHBTfb29qnqKbm4iWhl5etUgn2Wme723hkuX3mYL33uU9KiLcFGACIZRcRWI1iIovUaiMGj\nlC7UoCSVp5HP2vme4/WK43ViOH35ZiExN9MJRmsm9TbNxW2cq6mbhroSZ/Kz5y6hVWZn5xzJWNqU\nWfpy/rKiQgx3E+AQ4WwRPC9gs5g4Pjzm9q0bfPjDv8nnPvlZ/ugf+x72z51jfnyLTEDpMg9RAvzS\n2kgJW3Qq0/PAA7Z0FFIEZ5189sJb8z7S5/SSAAfx5Mp9bX2d12iOkLLc2t5H5vM561ajjZDV61pG\nNykm+qEXDejVGj8EfIAQTjTTlIaDwzlfeOppyKJ/i1JEL+bBIcRSCd71Jk6+fBUJpFop1u2KGBPO\nGOra4pwtn0XhY6Dre8FBoEjJFxxHwVFkYTOQ5d6fTmc8cOkB5vMFve/v+328uNuFgmp7B5PNJuM9\nvd7//vfDH39Jn/1rtkZnDasSSRWEoBI/OGEqZGplqIquYzIZnyPhdKVlwFGhsfRpTdv3dMs1pEw1\n26KazERMV0PuE8kPYi01cZhK+vHnX3cZ6xwK0SNVogyAqgxUlVyZUiIix7RcaBvBv7T5vjailbp5\nf2MwLYc+byxHciHpUkA4RY5N5cJ714To6fs1tw+OePq5Az55bcFnbvdcW0aWKdNFkXFSWWx/xBWQ\nkWoprcYMQbBE1BkmlaIHQt8z7TvSsKaPnsOjI6aTXQY/QG3xIXDj2nWefPpZDg7mTCeG+upTPPjw\n69jaPcPh4kCq1aNDdnbP4CqpdATtASPqQxQ4ElVd8+BjjxCT3lQviUSMofhI1hjnRKw9BmIYRPYu\ny/mwRhOHARCwgvdeNBOXK5a9UCVGHVClwFY14gTg2N0/K3zVkqSYgqatJw3nLj3Im9/+rXzwl36V\no8MFS5UZySEOSc62jWHLaiqjcEay8Ef2JjxkNfvdAU/8zx/kYx/5HR658hAPPfYwzWTKfC6ggZQT\nKQv6OCWFNRR/y/GyKOIKBQForCYEz+07B2REeSjkAm6LkaDUS05dX6sQX6WVJSj6EDd58uBPkpf5\nUYe1mqq2GKMJMeCHxDAIQO6eKi4iNLJurPhO/apvspOqtCJ4URBzztI0DdaNKPCOxWq5QUfn4iRU\n15XMNgvKdb6coxeappnQTCfsnz3D7t4uw3D/OOmvHhBLT89UNWbbicbTqRVj5C//5b8MX7z3pe9/\n//v58R//cWKM/MiP/Aj/9K/+0695W/WHP3xcvloBd+567OKdhn/2v1ZYrZk4zZDFDiUXtJZUC6Lk\nXgiSGGRI3WzvCdVjMpOZYgokn+jnc9qjY4y1TLf20PqWzL+suFP83r/7mzyzO/+K7/fXH7nBhb/2\nLwCoqel58czl0n/3cy/38Ny19m5Oeefrz3AUoM+enCNWa5p6i6mr2TURmzyrXgbW1bbmzky0KC6e\nMQx9w7SqMKZlFXqhaLCk4xncZItJvUPEcu3mdZ67+gwXzl2g61sODw84PDykXzusBm0sk50tnJuy\nXq1YLpf0w0BVSUt6nAuPrtwjMtO4iv3LlzDGlZv5pA1prcFYme0F7wmDSLNpY9AlQVEKcR33Ij3V\nx4FVt2axDixLm5N8wn/VxvBn3/d/5LnJza94TK+8+Vvli7cBf/mlnY//x3PL8tVvlD8An+Q/rJ/g\nX/3iT2G1Ayv1mSTJAqLRelT8kfeZoxhj61LbKxTTxnDn9h1M0bUd6S/i0XkiffHa+uZd5RK/q0qT\nmV+k6/xJ2Z7vP7h9swXB08tag9WGyloqa4oNFsQQOTo4ZH54JOMAlYhBFMYmtcJajdZWaEha0YWB\nruvwg0fX0sWrqupFf//mfXzVR0sPWaFRlcJtb9318Ec+8hFe//rX8yW+dNf3x0D5S7/0S1y5coX3\nvve9PP1XX922qjqr0GoPtGHqND5n+iAk5Vw0QVFywfm+p18c0rdLTNXQTLZxVYWra0giINCv16xu\nH5CiYvfiBaZ7O2gjnztlQ/KeZ3bn9/0ZTys8vBpLXVAc5SnJDExdzf7WHvtnzjKpt1Eh4/yCOi2Y\nz484XK2Y7iimWwnXaP7I/+oy3dFj/Iv/+29zcGZ16qd6JBkZ128B/wPw38o/LwF/6OW/5yvhQX71\n8/+TgGOSUDCqqi7INiWgJutIGfq+I4dEDGIUags3ctwElLJkPVbWkRB7Vm3LcpkYolRN4x6jUeQc\neG5y89UfBUwVbd9hXY01xaPRB3E5MCfj5RHsN/ogClBXNpFJY7lx81A2zy8aji55nvtaf46v8OPq\n6zX95ftvUb22XvrKY4vk/1+Wgum0YTqtuPVbmlsX5tzit/gNfusFn75m4JN3xZxw1+PXeY7rPPe8\nX6G+4hFraG60tJfgvg2CPVmB2bo70j777LM89NBD97xqDJSve93rAPihH/ohPsEnvvqv+jqs/92/\n7fnp/2qG05qZdSikakAlYhauoO862vkxy4Nb9G2LnTbs7Wmc0yhdk3Km79a0B4f4LrBz4SyTvR1G\nqU8QN+rwAmTnb7b1xOI0TeYAnpfIPH9NfcP+5yExwbPi4MzxqxvErczZYgqk6NFOUzV20zKV7EZm\npOIXmNHWoa0uOpy5iMSPNrgFuJQ0QxhY9z2rTpIljZzPUaM3+m8cHf37/uu/8FUff9A/wC994v+J\nzJxLCzllCZjk0g4eaIdMf8m/uufs0msTx9fWS1xZqt9IYn1h/eonoaiL49dftXsyileL71UiW3Xv\n4y+wnh8or1y58ore8Mtd18+2UFwbKjOhMobKFDdqH+jblvX8kOXhLYZVh0oijYSRwbNfrgntiqFd\nMazWVE3FZHsLkhBac0F6GmeoJs0Lvof3v//9vOlNb+L1r389f+fv/J2v+n5f7Ln/+l//a97xjnfw\njne8g+/6ru/i4x//OACf/exneec737n5s7Ozw0/91E/d8/r8Ev9bu47Dg4H3//yX+dVf+d2Xevi/\nJkvUMooogtIYV21uF6UEbGBtjasbXNPgKrF6QgsdJSOUlhQjKSRSDgy+p+1a2jbQDkJm31SSgFMw\nLJcv+H5e7Bx95jOf4Tu/8zup65q/9/f+3l2PHR0d8YM/+IO8+c1v5i1veQsf+tCHXvB3vNh5edZd\nE8PqrIroQpkzljrXh8RQdExfW6+t/xJWNwwcHB5+o9/GiwTE8b8EShkJFqfWlStXeOaZZ+593X3e\niC83ANzPa8elFYyuqgaw2qKtExuU5ZzV/BDfDqgsklez6bbIimnD0K3pF0t0DEx2Juxc2MM1DSnE\nDdgj5wxWY2eTe3732Dr+hV/4BT71qU/xsz/7s3zqU596wfd5P8997LHH+M//+T/ziU98gp/8yZ/k\nL/7FvwjAm970Jp544gmeeOIJfuu3fovpdMr3f//3v/gJuI/VhcQzRx23Ft+YNljwcfMnxRNFfYCk\nFUpnbGULMd+K5GuO5JQkAIZI9EEcyHMiY/Ax0A+Bts+0QeHJRHUi3dYYg1p097yX+zlH+/v7/MN/\n+A/5iZ/4iXte/+M//uP88T/+x/nMZz7Dxz/+cd7ylre87OOyMf0o99oop6WVoqks242lem1Y+Nr6\nL2RVrhapzRdYr0YSOq6vfsuUmy0XYeDKTu96+L3vfS+f//zn73nZ8wPl1av3qtW8kgDwUgLNqI+q\ncsLpirqeok1FCFGcpbuBHBLKKFxdYW0lJyZlfNvSHswZFi3WakztpFpWd0sDqQJvf/463Tquqoof\n+qEf4ud//udf8H3ez3O/67u+izNnzgDwHd/xHS94XH/5l3+Zxx9/nEceeeQFf8+4Hn30Ud7+9rfz\nzne+k/e85z1f8XkROM6Jg69ARHolF+s/+Af/gLe+9a287W1v44d/+IfpunuDUAheROB9wPctwZ/M\nC8SJRDwQUxSZuhSKd+RG01AAOoIeFWcNH3q6vme+UqwDDDnRFa5VBibTHd76zt9zz3u5n3N04cIF\n3vve9+Lc3cnjfD7ngx/8IH/hL0g7tKoq9vb2XvCY3t9xGYgpiFh9zsIhQ1DJthJdy/gVUOFf7Xz9\nyq/8Cru7u5tuw9/8m3/zvl/72nptvdxVVxXW3BsQX+0k9EVyyIIy1eLKbm1916PWWv7xP/7H97xq\nDJRPPvkkwzDwcz93L1LylQSAlxJoYgrkKMAgYy3O1RitiGEgDmtSiKgkGqbOWaFYkIkxknxA5UxV\nT6nqrUKgjyhrwBbCdNlz4nCvuNULtY6fffbZF3yfL+W5AD/zMz/D937v997z/Z/7uZ/jh3/4h7/i\n606vD3zgAzzxxBN89KMf/arPS3A3T6+sV3KxPvvss/zDf/gP+ehHP8rv/u7vEmN8wesk+IEh9Pih\no12taNfrzTFXORO9VIAxxI1wNkWcYeToaSPyd2LkLAbB69azbIVuMRJfRlaT8Z6DG1++57281HN0\nen3pS1/i/Pnz/Lk/9+d417vexY/8yI+wWq1e8Ln3c1zIEvxTCBsxdREqUCht6EJieF4Sc7+J5O//\n/b9/03H4G3/jb7yk1762XlsvZ4Uoye3z16uVhI7rvpoq1tXYqrrLrXxc73vf++59fgmUf+yP/THe\n8pa38Kf/9J++5zmvJAC8lNfGJAFMGYcqii85eJJfkwYvJC2Vi0u5QZFJfoAYsaZiurvL9vlzTPb2\nsFWFdg47qUTpplgwZX2SoZ9eL9Q6/kqisy/luR/4wAf4mZ/5Gf7u3/27d31/GAb+3b/7d/ypP/Wn\nXvB1L3c5DNULtDNeycUKYivTtq0EqPWaBx544J7nDH3P0Pb07ZrF4RHrdjhRexFxxfL1ycy7KJtB\nElNryGSdhEWUZcY2X2tWvUWhsRgcRSUE2GpXXH3iY/e8l5dyjl7os37sYx/jx37sx/jt3/5tZrPZ\nV6yy7ue4xBShCL7LR02Fi6hpqprGap5/u76URPL565W89rX12nqxFYZIXdf3fP/VSkLH9VUD4qiQ\nYqzBGFcy7ftb73vf+/jc5z7HF7/4Rf76X//r9zz+SgLAS3mtj4GYgohA2xptDcF7/NCRhkj24vNY\nOUdVTUV2zVicc0z3z7B16QLV3gyzM6U6s4vbmmHqGlvXGxsh4yy6uXfDf6HW8Qttbi/luZ/4xCf4\nkR/5EX7+53+es2fP3vXYL/zCL/Dud7+bixcv3vO6Fzpe3/M938O3fdu38c/+2T/7ys9D0agJU7bu\neeyVXKwPPvggP/ETP8HDDz/M5cuX2d3d5Xu+53vueZ7vOnzX0a0X3HnuKl0/lPcFxjqMc1IVFVGC\nlJO4ypMkYGbE3ioFUhroY8eqXbNYQghirBvKUNKgqLXiDduGcy9AXXop5/OFXnvlyhW+/du/HYAf\n/MEf5GMfuzfoAvd1XFKKxOAJXvwzU0zF8kqxs73FbFLx/Cvyfs/Xhz70Ib71W7+V7/3e7+WTn/zk\nS3rta+u19XLW4HusvTccvVpJ6LhetGWqlMJoh1FGCOhfo/VKAsBL2Zj8IHZD5AFtAsYoUvDEdiD1\nonFprKVqJlRNg6snuOmE5swOk3O7VHvb6EkDlSU7IxJnuZglFBSGMgbzAgHxhVrH3/d93/eC7/N+\nnvvlL3+ZH/iBH+Bf/st/yRvf+MZ7fsbP/uzP3ne79Nd+7df42Mc+xi/8wi/wT/7JP+GDH/zgCz7P\nYJiqHbbMuXseeyUX6+HhIT//8z/Pk08+ybVr11itVvyrf/Wv7nleDD0p9Pi25eaz1/CFS6oUGFuJ\naHHWIkdWlPdzUkUFCOGb5pM/3vfMFwPHK8U8RuZpIKnIhcowtYqZU7zhsuHS3is7n89fly5d4qGH\nHuKzn/0sILPeb/mWb3nB597PcRlF4ce2cCpIcKUU09mE6azB6BdHhT//fL373e/m6aef5uMf/zh/\n5a/8Ff7kn/yT9/3a19Zr6+Wu3nuO5ot7vv9qJaHjepEIJzpW1jm0MZivocbFKwkAL2VjEtlH2TyM\nNmhEwisuB3KXcUYz29lisr2NqSo8kT55olVkZ0haXh/6IPOqIGoo3vcFgyvqNznc2zJ9odbxW9/6\nVv7pP/2nL+m54/P/5t/8m9y5c4e/9Jf+0j1gmPV6zS/90i/xAz/wA/d1/MeL6sKFC3z/938/H/nI\nvRq1QGkpTjDc2854JRfrf/yP/5HHHnuM8+fP45zjB37gB/j1X//1e56XgydHz/romOeu3jzlw6Yg\nhuL5mEoQzKici5qLnHulFBqpoEiZft1xeJS40QUO08CZWvEdF2r+0CMV27WirhR7O5b9vXtRw/dz\njq5fv86VK1f4+3//7/O3/tbf4sqVK8znol70j/7RP+LP/tk/yzve8Q6eeOIJ/tpf+2sveGzu77jk\nokkpTuUxpo04c93UTCcV1fN6pvdzvnZ2dtjakm7A+973Prz33L59+xWd69fWa+urLa0158/u03f3\ncn9frSR0XC+qVKNQxVRVJLMe6C6jmleeGZ7eXGKM/Pk//+fvChY/+qM/elcAGF/z0Y9+9Cu+9gVX\nTrRDhzGOiTak4OmXK3w3YK2h2XFMzsygqpmvWm7cmTNft1y6vMOli5epXC3BLmWxUqJgOnTxplMQ\nYxDC9wus973vfffMWX/0R3+UH+PH7vu54/rpn/5pfvqnf/oFf890OuXOnTsv+Njz12q1IqXE9vY2\nq9WKX/zFX9yAJ+5dikAip69+sT744IP83M/9HP/m3/yb+3oPDz/8ML/xG7/Ber1mMpnwy7/8yy+I\ndlUhkbzn9tVnuXX7iJkT0r2waRKQUMZsPCLFOBlUtqLHVnwm47AiDj3LlefGEhYhs+8s3/5gzZse\n2sLVispJkmMqi622gHtl217sHF26dOkF0b8A73znO18UwATc13EZvFzTafSsK9xYsqOuKpqmQZui\n/l7W/Zyv69evc/HiRZRSfOQjHyGlxNmzZ9nb23vZ5/q19dr6ikvBpKl573u+lc987rPMuRvMdj9x\n4vr167znPe9hPp+jteanfuqn+NSnPsXOzs4mCR2Ggde97nX883/+z7/q2/nq9k+lJTLOEkMK/Kv3\n/zP+D9/1V0kx8pP/9n/PMAz8b378v3lZx+KVBIAXeu1X+BDklAh5AK3xXUdYtSitmGw3bJ/fQ9WO\n49WSa9eXfP6pjrUPJOWZTbaYTUQ4WyXheGW0BMYCpFFa0betbMjf5OvKlSt86lOf4vbt2xueYgiB\nP/Nn/gx//I+/sEK70Ek06XnySPDKLtZv//Zv5wd/8Ad597vfjbWWd73rXRtazemVc6BvFzz5hc9z\nOF/wwNSh1VBky6piEiKG0EqVdmnxi8wqoUwW7kjK8P9r79xC7LrOO/771r6d21ylmZElWxJ23NgQ\nrDpxXJvgkBACoYZCQ5uHNqbtQ4ohKkkf8tDQF5X2qW1KoWBwX9oUig0uLYSW1imxS5LSkpI4cerG\nVj2SxoNHl9FlZs45+7YufVh7z0Uzlo6V+MxQ7x8Sw8ycWXvtvfbe37p86/+3XtuzGwkLcczRKcUD\n93Q5NNvDSUAYXsZaSy+ZwHTmuZ2Sz3vFKNcFobL0GWyKxNfOH1EUE8cB8U1LHKO01wsvvMAzzzzj\nPejabZ577jlE5N11QhsaRsSLeQsL87P002P8D7uzu8fRCa0ZLUumshwSUZUyhk9eKIqcosiZ7x9G\negdzPcHZWrQrQlmFGw5R2tGe6DC9cBjVilkf9Ll8pc8bSyVLa8KhniKJI9I89VPGQYBUZryIYLV3\nuTeV4/3Flbdw9uDvgq5vmsnJyR0iB7cikJh2OIdzmr0CxE9zs545c4YzZ87c8vhOa65fusLi4hK6\nKLn/rhleFp8p5oO12/QKdKIqQXo/atdlgWC8zZeElCojTkqO9Eo6hBw/GjMz1SMKY5zyjuOivDcb\nw9FG2+8Fo1yXMs9RQYApMpRzBFC5e0AUJnTabaIwxNsTb3G79jp9+jSnT5/e85gjd0IbGkYgDJQf\nWFhNWfQ5NDuz31W6XUAUFqfP8btPfHXTLNJay5vT5wDHH/7yX2CdZXK1w+QVn4EmIiwvXCKPC+I8\n5MgbHXSWs/zY7s3F4+CPni1BQRCuEYUpGO3Ng8McgnWM9b5gaeboFz7Y9xL4RidE5BogqEpNuUrg\nr7IWHefu0Tgcv/mVswdaSf6nQSSkFc/u2/nlwwGLZ8/y1tuXmevGfOTELH/Jqp/Kp3IisWXlaOGV\ng0T8VKkIYNl0vgBFkVuSwHHySMiRhQniJMGIq/wSfZLKtcENrg/2534dFRHBGYvJMsRaQnznwVnv\n+dhqx4TJ6FnhDQ3jJAlj5uemWI2uo7Xh8qVlZueO73e1kFvJrH35e0+7l058p1pLZFMRY3H2PFmU\nkxRbVjybBYqQxwVWHMoKcR7irCXvmfGKDFfjwvZ6Xa/KGaByCajdJnymnvPLTc4P4YNqlLCjvnVA\nrJI1HFB2/a/CSvaynObgul3cwfEEQa1FtF+dQkTof+zK2Ov8wPljXF29RjrMmO3EHOrG/PDnNhDg\nkcVDVbtUddryzKnEv2XTUqqeOs/yHMFPH/og6b0CcXD2ZIpzjuNnA7Q1/O9H3FjPtz7n2x1TEE6t\nPui3jBQZb05cwFQJNSoMmF+eoShyBoOUwWN6/M/dy2M73Lvj54Ee0Ade2deavO9pJy06vRY3Tq5j\nnaX7ekiStLn60MZ+PXMCtxkhPvnmZ3hy8TNIoHDOUuQZ2bDPP977It+9/3tYa33la4dmEZRSvLVw\nkTwuSMqE4yvz6CJn+cEbm0FqHJzgBBe4wLEfK5RyhHFAkrQIRKGUV97wwtGGNIe+9qau7dDRayuU\nEkpt0NphLBgraCdo6zDVC7d/yp/39I8CQiWsPRoi8WjnmJCM/XrcKSLKTyPuA4P+kDTLaYUBk62Y\nQAXbrprb7NyAF7kGtjpwW5/ylk6iCMMApYJqutW7njgEJcqXI/XfC90yQaLxLgWM3E7ihQlcLdlW\n/9xVHRkVEAQHfxq/4f1HFIb0JnrESYTIBlKJZTiX7nfVbj1CfPG5v3dUIsLWaPIiJe2vkw37pOmA\nsigwzvg9YSiiMCJKYv70qa+zNL/CySt38/t//QX6qxf57T/72r5E/j9f6BEnhpmFNvfdfx+TnR5l\nkXLt+mWuX7/KtWua11YS3hhCKHBywnD3giUvHVfW4OpAWC0d61ZTWksoQksUE6Hi3/8lIwqELz81\nw/x0xKGZNrNTE7R6XZxAmueUxZAvnTmPdZYzX2zR7+ekQ7+JOrXChT785w3LhdKgBOIQRGIu/qsi\nCrt8+Ncf5dBcwBOf/kV+5w+eHntvv/fdOR76lSeJ4xbf/6/nWZ8bnyL93No0HzrVYrB6g8+dOs7H\n77+LqW6HR/74mwD88CufxpS2CoQanENVbhjWGHSpMaYygw4UuTZs5H2UBMRhjKDJTIlzim7S5umv\nvkZpDF/8QkjWt3zwxDGCdodXNkpeMxHX++sY7fiPZy8ionjiS/dSmoJvfOcnY2+Xf/un5zHWsPLq\nq/zep76GLQuCACRp8dSzv8TqRp/FN1/n2/+wzHBhfNO/B9oP8SX8KPEV4JP7WpP3LVEY8tFTD/Px\nTz5OEArPfv5vSNMhhz8b46xh9QeWwdx4A+PIfojeYNUvehrtxZWLIqUsc7QusNZvkkYcDuv1s4It\nfU8EaIVEk1PMrc0gU+Ptbc9dbmGdYLWiSH1A10nMxnCDjeGQNNdc6wuXcsfQGSInXOg7lnPNQMNG\nCUNnKdG0UBwOQ+ZbAYcTYbar+O+2T7h5+IOz9Ho9klZCFMRIJJTGK6MM+zcwusQ6R39jyMY65IUi\ntYpzqeNHA8uyNptTtcYFdNt3EUUbOGdQwRr3PfAx7nvwIY6V94x1xNIq2t6DXQKw8Phjv0G73fW6\ntq2AUMUo5V3pAxXiROO0JkvXWV+7yNqN8wzSFXSxwdyRw3z2t36VX/jUYyjlk0LyYYpOU3RRoNMU\nU+Q4U2J1xsryEt988Vu8fmmJJ+6e5kMLPTpRQLjNKlzbEkT5OqhoU+jaaY013kPRGI3Foh3kpkSX\nOWHYJokTQolIN1JybenFnWpTv6U/MGRFxKqx9DPLigtJy8KLAEQAfirW6AKsZepqFzk0vnY5mh8h\nUJF3obEFgbJEMSgF1mmCPCOOEia7HY5/OMIWkzzy0Uf51rdfJi4GdCMhiATjHBbIC4fW/tF1DoYG\nbliHRUjw/pCCX1IYvlSNvN8hoOQc0GDYcCCY6HY5ee89dLodyjJDKf/8xnGLPM+ZfsgyIxNYZ3DG\nEodtJAgAfw8qURy56xhHjx6l0+6ytHKOlbdXKEtHpzPB0tffxjlDmuWU5ZZHrfvEHkr3e3DLEeI/\nP/93DieYsiTNBmTDDdJ0nTxL0WWBdc67CODXLuI4IUpi/uTX/oo3jp6nVcacuHLMiyobgy1LbJ6j\n0yG20PWMF+CnK41PGMTiFUcECJSjFVri2P/OG8FWjk7g0+2rMmqrqnrZyFUeObWZb9wKCMMQY/yG\nZqMhK4U14yh3XYfaTgfCStKrFQpJJISBIlDC4gdKspalnQVsF+2obXlc9T9rgw1AmZ3TeLek3sVh\n/JSlL1/qf37f2XuS6bLtRIKqfCPv9ImdP3Dbz2tvZZPd6iZ7nEOlS1r/pt7iWf+lqWYCJ9L6Iu0u\nc+9L4+olZJ+UQuWGgUOJYtgyWAVSP0c3FbtZ5ra2edcEvvx2JpsOKRKEOLVterOa8q3r+E4ZTV4U\nQpOFOzNJozwA8eLm1vpEoyCoTKzdttOSm87rprL3pFbw29su8mDTw7fdGs0a4j4gInTaLaanp4jj\n2M9wHLlMmZSogdxWDal+elW1NAeCtbUVX3Ufb1eYrO/RV0YPiLdOQ7MWZ/30kykLdFFQFCVa60o6\nylSb04VAIkQCBOHxnzzM0tzbZFHO+cNe77BOysH5LE0vqbV1qJsDRf3i8hfF+ZfitoUhgR0vrOrV\nsZlX4b/4gL2JsgjelaJOjrEONLtfANsHuQpHphzr4vciIn5krEPfRMOW2R4Tdp1U3RT2TrYqBuB8\n2sdO3rPloT1ehYG73SdGLHnEJJWbbt3dGkCeYbJ3RNp+hD3bhR23UoXZbCc3ajvd4dZTF8Cw69iK\nqHcSWSv2eILzjtlVpt32/c+kGzX1syhkn4jxU6cN40UcmSpYDa/5zp5zWFVJD3beqdO3e6BicFix\n1XfsvKEDEAtBGuCuOsxbFv4W+MSoVfz/ul+goaGhoaHhXdCkoTU0NDQ0NNAExIaGhoaGBqAJiA0N\nDQ0NDUATEBsaGhoaGoAmIDY0NDQ0NABNQGxoaGhoaADg/wBSaUdZdnenvwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "\u003cFigure size 800x800 with 1 Axes\u003e" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "top_k = 20\n", + "objectnesses = sigmoid(predictions['objectness_logits'])\n", + "boxes = predictions['pred_boxes']\n", + "\n", + "objectness_threshold = np.partition(objectnesses, -top_k)[-top_k]\n", + "\n", + "fig, ax = plt.subplots(1, 1, figsize=(8, 8))\n", + "ax.imshow(input_image, extent=(0, 1, 1, 0))\n", + "ax.set_axis_off()\n", + "\n", + "for box, objectness in zip(boxes, objectnesses):\n", + " if objectness \u003c objectness_threshold:\n", + " continue\n", + "\n", + " cx, cy, w, h = box\n", + " ax.plot([cx - w / 2, cx + w / 2, cx + w / 2, cx - w / 2, cx - w / 2],\n", + " [cy - h / 2, cy - h / 2, cy + h / 2, cy + h / 2, cy - h / 2],\n", + " color='lime')\n", + "\n", + " ax.text(\n", + " cx - w / 2 + 0.015,\n", + " cy + h / 2 - 0.015,\n", + " f'{objectness:1.2f}',\n", + " ha='left',\n", + " va='bottom',\n", + " color='black',\n", + " bbox={\n", + " 'facecolor': 'white',\n", + " 'edgecolor': 'lime',\n", + " 'boxstyle': 'square,pad=.3'\n", + " })\n", + "\n", + "ax.set_xlim(0, 1)\n", + "ax.set_ylim(1, 0)\n", + "ax.set_title(f'Top {top_k} objects by objectness')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8-hhGqbZzVfX" + }, + "source": [ + "# Image-conditioned detection\n", + "This section shows how to use objects detected in one image as queries on other images, instead of text strings." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oy51i-eZzfou" + }, + "source": [ + "## Prepare images\n", + "* The query object will be taken from `source_image`.\n", + "* Then, similar objects will be detected in `target_imge`." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "executionInfo": { + "elapsed": 394, + "status": "ok", + "timestamp": 1707756409383, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "EXInmLAvzhNv" + }, + "outputs": [], + "source": [ + "def prepare_image(name):\n", + " # Load example image:\n", + " filename = os.path.join(skimage.data_dir, name)\n", + " image_uint8 = skimage_io.imread(filename)\n", + " image = image_uint8.astype(np.float32) / 255.0\n", + "\n", + " # Pad to square with gray pixels on bottom and right:\n", + " h, w, _ = image.shape\n", + " size = max(h, w)\n", + " image_padded = np.pad(\n", + " image, ((0, size - h), (0, size - w), (0, 0)), constant_values=0.5\n", + " )\n", + "\n", + " # Resize to model input size:\n", + " return skimage.transform.resize(\n", + " image_padded,\n", + " (config.dataset_configs.input_size, config.dataset_configs.input_size),\n", + " anti_aliasing=True,\n", + " )\n", + "\n", + "source_image = prepare_image('rocket.jpg')\n", + "target_image = prepare_image('astronaut.png')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Xv3tBxY3_zkK" + }, + "source": [ + "## Functions to call model components separately" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "executionInfo": { + "elapsed": 55, + "status": "ok", + "timestamp": 1707756409657, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "4RjQvs1c_4j7" + }, + "outputs": [], + "source": [ + "import functools\n", + "\n", + "image_embedder = jax.jit(\n", + " functools.partial(\n", + " module.apply, variables, train=False, method=module.image_embedder\n", + " )\n", + ")\n", + "\n", + "objectness_predictor = jax.jit(\n", + " functools.partial(\n", + " module.apply, variables, method=module.objectness_predictor\n", + " )\n", + ")\n", + "\n", + "box_predictor = jax.jit(\n", + " functools.partial(module.apply, variables, method=module.box_predictor)\n", + ")\n", + "\n", + "class_predictor = jax.jit(\n", + " functools.partial(module.apply, variables, method=module.class_predictor)\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oIV_4AX_0OZm" + }, + "source": [ + "## Identify an object in the source image to use as query, and get its embedding\n", + "\n", + "Here, we show the top 3 predictions on the source image so that the user can select one to use as a query (we select the rocket here).\n", + "\n", + "To get a query embedding, it is necessary to use a box predicted by the model. We cannot directly embed a whole image." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "colab": { + "height": 499 + }, + "executionInfo": { + "elapsed": 5503, + "status": "ok", + "timestamp": 1707756415392, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "DLt-t9kl1Wg7", + "outputId": "4156c03c-ab43-400a-bf85-bbbecea2f1bf" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Top 3 objects by objectness')" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcEAAAHRCAYAAAASbQJzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAAsT\nAAALEwEAmpwYAAEAAElEQVR4nOz9e9BtzbrYBf2e7jHm7X3fdfku+3r2OScnB5IQRY2VhCgpU4ho\nRfBaqMUhJVBGglpFlUGLEqOVEFSCAlUhiECsGBPiBTShgCrRRAJJTEIMiMUlJMRzzr58e+/vttZ6\nL3POMUb34x/dPUb3uMw53/WtvXdS5+3vm+udc4zup59++unn1jdRVZ7SU3pKT+kpPaVfiMn8qBF4\nSk/pKT2lp/SUflTpSQk+paf0lJ7SU/oFm56U4FN6Sk/pKT2lX7DpSQk+paf0lJ7SU/oFm56U4FN6\nSk/pKT2lX7DpSQk+paf0lJ7SU/oFm56U4FP6BZFEREXkpxfe/YyI/Ms/bJyy+n8y4lf9gOv5dSLy\nrRPv/wkR+S0/SBye0lP6Sy09KcGn9FZJRO6yjxeRffb7Z95RHb9DRL4pIm9E5OdE5O97F3DHSVV/\nv6r+DV8Exg9Lkf0gk6r+JlX9+78IDBH520Tkj70rnJ7SU/pBpycl+JTeKqnqdfoAPw/8Tdmz3/+O\nqvndwC9V1WfAfwL4W0Tkv/KOYD+lp/SUntKTEnxK7zaJyFpE/lER+U78/KMiso7vfp2IfEtE/kci\n8omI/Owpr1FV/5yq3mePPDAb0ozwf6OI/AUR+UxE/nkR+dooy68Xkb8Y6/6HRMTEcoX3IiK/VET+\n7xHOnxOR/1r2bisi/6vomb4WkT8mIlvgX41ZXkVv+NeIyE+LyB+N+T4Rkf/jGfL9HZFmH4nIb471\nfUVEHkTk/QyH/7iIfCwi9QwNFumf5Zmlv4j8HhH57dnvv1FE/k0ReSUif0JE/urs3TdE5P8S8fhU\nRP4xEfllwD8B/JpIg1cZ3N8lIv+iiNyKyJ8SkV98Ib1/vYj8O7Hct0Xk74nPPxCRfyHi9pmI/Gup\nP5/SU3pUUtWnz9PnC32AnwX++vj9twF/EvgS8CHwJ4C/P777dUAH/MPAGvhPAffALzkB++8F7gAF\n/iLwYwv5/jrgE+BXRNi/E/hXs/cK/D+B94AfB/594L8V3/1twB+L36+AbwJ/O1BFeJ8Avzy+/13A\nvwJ8HbAED3UN/GSso8rq/APA30cwNjfAX7uAeyr7B2L9/2Hg44ym/xLwd2X5/xHgdy7Aemv6A78H\n+O3x+68Avg/86tjO/2bs53X8/f+JeFzlbctpmeH0e4DPgF8Vafr7gf/DhfT+CPi18ftL4FfE7/9z\ngsKt4+fXAvKjHgtPn7/8Pj9yBJ4+f/l/KJXgfwD8+uzdfxb42fg9CeGr7P3/CfgtZ+AL8B8Dfitw\ns5DndwO/I/t9DbTAT8bfCvznsvf/HeAPx++94Ab+68C/NoL9vwH+pwRltgf+IzP1/yRTJfh7gX+S\nBcU9U/aXZs9+B/C7M5z+ePxuge8Cv2oB1lvTn1IJ/q+JyjPL++cIivPXEJR0NVN/T8vs2e8B/uns\n968H/r1z9I7ffx74O4Fnozy/DfhDwE//qPn/6fOX9+cpfPCU3nX6GvBz2e+fi89S+lzLEOf4/SRp\nSP8GQQH91kvqVdU74FOCx5bSNy+o9yeAXx3DbK9iSO9ngK8AHxC8nv/gFL5Z+h8SFPifFpF/W0T+\njjP5l/D7Q8BfJSI/BfxngNeq+qcXYLwr+v8E8JtHdPhGzPsN4OdUtTvTnjx9N/v+QDBSUj1L9Ab4\nrxKU5s/F0PKvic//IeAvAP9yDHH/vY/A5Sk9pT49KcGn9K7TdwiCLaUfj89SeikiVyfen0oV8IsX\n3hX1xjreB76d5fnGBfV+E/ijqvoi+1yr6t9FCNMdFnCYXMeiqt9V1d+oql8jeDP/uCxs0ziFn6oe\nCB7bzwC/Afjfn4Dxruj/TeAfGNFhp6p/IL77cZlfCfvYa2lO0RtV/ddV9b9ICO/+QQIdUNVbVf3N\nqvpTwN8E/PdF5D/9yLqf0lN6UoJP6Z2nPwD8j0XkQxH5APifAL9vlOe3ishKRH4t8DcC/+cxEBEx\nIvJ3ishLCelXAf9d4A8v1PvPAH+7iPxH40KQ/xnwp1T1Z7M8/4MI7xvA3w3MLVT5F4C/UkR+g4jU\n8fMrReSXqaoH/rfAPywiXxMRGxfArAnhQQ/8VNaGv1lEfiz+/JygINwS4YDfIiI7EfnlhDmyHL/f\nSwg1/heY0jNP74T+wD8F/CYR+dWR/lci8p8XkRvgTxPm6v4X8flGRP6Tsdz3gB8TkdUJHPO0SO+I\n48+IyHNVbYE3RPrFRTs/LSKSPT9F26f0lGbTkxJ8Su86/XbgzwD/FvD/Bf5sfJbSdwkK4TuEBRK/\nSVX/vQVY/2VC6PGWIMh/Z/xMkqr+YeC3AP8cQUD/YuC/Mcr2h4D/N/BvAv8iYR5xDOcW+Bti2e9E\nfP9BwoIQgL8ntutfJyz2+AcBo6oPwD8A/PEY1vtrgF8J/CkRuQP+eeDvVtX/30JbAf4oIcT3h4H/\npar2G/hV9Y8TlOyfHSn2cXon9FfVPwP8RuAfi/n/AkEJo6qO4H39NGHO7luEuT2APwL828B3ReST\nE3imes7R+zcAPysib4DfBPyt8flfAfw/CIum/l/AP66q/8q5+p7SUxonUX26VPcp/XCSiPw64Pep\n6o+dyfpDTXGu7m9V1b/uR43LqSQifwT4Z1T1n/4Bwf+9wF9Q1d/2g4D/lJ7SX4rpyRN8Sk8Jfjlw\nykP7kScR+ZWE7QPn9hq+LfwK+CX8JU6Hp/SU3nX6y/aIp6f0lN5FEpE/SAit/c0/YlQWk4j874D/\nEiGcevsDqua7hFDxP/cDgv+UntJfkukpHPqUntJTekpP6RdsegqHPqWn9JSe0lP6BZuelOBTekpP\n6Sk9pV+w6eScYP0nn/9oYqXagTtiAI1n4qqC+g4jEnbjquLj37BVCMLhHPG3Kl7DxixjDFJtQw7f\ngBjU1Ih6UIciuPaIGENlDR4DZgUiuF92h/13r3n+M3/1GMtJGvCIzchCzSLCudDzuPwsaWJ787zj\neh6THpt/rs5Hlkw1A0JefQExwo+5LsLnVFsUEB2sPp+Az8Hpy0QcMsQUARlwTYe6ScJZQYWItQ4Z\nzfn+T+WLRwtNKvt8CibhrDLQccAtRz59HVUs0zzp+xglYYJ2hp9S9LmMGxjfxJPt4uhG4zg3EWEv\nGtrV55ERJnk9JtbvMwzzvJ48aU+wxGkyasNMezN+8/F73uae7jm7B6BFuweg0sOd1pa30WffZOA7\nPIgZ8nsfnwWKkfg6ysYBhYSnoz58zNVug9ZbBMH4A7evP0Ndy3ptWK+2fP7myM1G6PwRrwZEORyF\nuoZ1VYFzrK5v2B9gr1esK+V5faDzDbf7jk4dbXeDXr2P8Rr4MY4nVe3pdXIsP1L2qCqHT//8IsCT\nSvDmb/kPMe2EIQ2IloItIRnonb6fczpdYAS10Nxj7/88dWXw9oauPeLVUnGPd57m0HGzW3HUoLyq\nqsIawdQbjIC2BzrfoV5QLHhPZ7Y4s8Vu11hZYdTh6zXqlePDx+j+FfX1l7FXXwmK11pQ5fXv+7dm\nheU8HU4/X8o3DKjxiJmHeSncH2wa17nEmDmPxO8qUXLrbM7wI4qjC/n9IhoM4/9kn2qv1KIwXETy\nBA6SVXhp96Q2UwqopbqWFb+CGeinUxWX4TgUGYOY03Zz/TEHO+GlyUoID5EcGy0KIEnAJ30mAxqJ\nnKLCPEHnVPHcs+lzkZzeF3aWDLwx7QPJ6FRYGhn8E7zPmH46k3OMcaYA+3wyjLVxx6Xxp8OfzXqF\nrevgJEiF+Fd0reKd4r3H+wbnHV4F7wyq0HihEqGulMPRs71ecdgLVqDyR5rW8LlrUVa0XLOpD3Ru\n0A9FGyRwx6Vj/l2lM6tDL7H50nPf58+V4+UCukLVYwTE1ngVmraFds/xeMDYis3O8tA6Og9OhaZ1\nVLaiqlZ4bWm7DnUC6rCVRYzlaiM8HCsqv8c2e47dBrd9ibUGObwGAdc0rOoN1fVXcHaDOI868Iap\nmf0DSKUnO352ueXzw1SGucWc2HgsuCUZRdn3IJIl/BbPPD9llJhhuUFAXO5pJzmQwC1xct7fvRE3\npwxYFplJqA4D+zz+43dkVEspV3qnPN+xMk5QAuXDw6FmnZYpgGWGbP9PX6ygwTkVkvtZczq355JM\nOA5etzCl5AyyiW5SYnR6CM3HGpZ4Skd/z8HUPiIgpHboSDaO6ykN45yyIwOYgTKFfSdQznYty24R\nEAxiKvAOj2O3MzQOdruKpnM472nbjq517B1oJXTOY6zl+qamOTZ439E8WGy3p1sbKlPR6paD/RCj\nFjGC1mvs/hNar+icITxj4I9pc0lU7RTMcTqpBOfLLgH8IgJ4GIgOh6jDVlusXYOtqG2NtuE2HUFB\nBGst/tjRqcd3h6D46MAoYlq6/QpZGZwatO3AC6xWbL2j23+MX93A7kuodFQPb7BicXjEgzWCA0xh\nLU4Z9osqnbEwlEJ6LuedE4A/dG9QiJ7SVOkFU26QkqWIkQW+GsDm0EYPy7yPoEGPZa7AkrDNlSkM\nIUOdwhzD6Z9r5m1pNnZSvhncUth+1puYGePvhN/6cFPC+xTMGT7vJW0ITw5KiqlGXICX+jb3TwdF\nF3tHgsIWLd+P6Q46UnBLhkH+blzmVLkLpjFiW2TBhRHMJCCwxLvzsmXKG8lYGKvEIVw8qM8BQtmP\nkg1Xr0LrHGtj8cah7YH2eESkYbuqUXEIln0D3sKxcyiGrQqN9xz9FlNvaKsdbuURWsRuMO2RTgxW\nQNXTUWEtdN6h1va4zLU00eAxRu9jFSRcvE/wJGdPPJnShR/N+8yb3wRP0oK3eH9E2wbXedQo4pXK\nAOpx3iMotRVWln4uwdgKY2rqyqPqaD2odnjvqbcWbRWpBLFbNl7Yt3fo7T2N2SBVjTiw1DijeHUg\nFUb7IbnQ3rdPOYzhewppaP+Zs4Lmvp+bE8vtUmaYagJziY964Tl6phLwT3MhQi8kB8GbxMUwUHuA\neb7FVkzxfJSVmPSzlM0r6JgESBIwM1GkWXtapu2ICA71iSCJKDL0WVEkvZ70g05wTuWn7R20kQxf\nexzG7QloDt5eYdZIRmPJ32ff+tCgZh4wmRGRdayOy2VlevQj80juw450bMHvufdXtK4gyVyfD7Qb\nF54awBNjKSsVvDtPCSdqmTjkyrnlsYIq67okSdYTBSQd3umClwslPohQVSG8uVt79g976Dq8czgx\nVHZN2zUY61mvayq/petaxAhOr9DNczpTIxjQhsp1dFJRVQ7pDnT2CiuK+A5jV2F9RzWonzQXn5S1\nJm5KA+5klKeUg+N0TileEA4dS7vpwMnfDQPnNOTZujTMdxm7xq1f4toD7f4W7Ro2lcOaKkyYGzi0\nisNRGctqtUEqaA9H9geHqkFUWddg/Q7sisbe0nYdFotgqastyhHf3dN6j5d1piZM73GOBcK03eP2\n62TQTKxu8XGMX8bwc/nmnpUw80FM2Y0jOLPt6cvMFxYkKoqkLWSSV/IvGbyQPddGpZAtGzWP8yn8\nZ58lcGdI3qukzGMat2ho5bKyLeFRtrNoh/aWfZEttytP9N1iK2QQvkuYDnXO0yqrKPuhgwIY1W9y\nlTVqQzIo5mYnpYea4CqohGBeVJwiOkdCSgKNFJCWeVLQcGpM5PlyeKeF2MicKNTN2KgBUNFoBI0L\n9wLidCVFMyWjWHzcT6YODGVSpCG3Q3pKDAaYAY5Hz3Z1pNk7fNvS7h2qYGulXq8wleD3DXfdltX2\nBrEHWD3Hrj0b33DfeY66CrWIx3pHZ7aseUPjBKk2oIbK1vjmiMimb5eIFCwzNOVximRJHpxKF3qC\nCb2RkJtUeEpYD9baxGvpXQYfoNsN1VW4TqzqOlz3gOy/R6d7Ou+w3nFUH7xGU/PQCZVWqKxwlcPT\nIscD1mw4dhZacOYZ4loar0i1Du653eBXBva3oR0mMVCpSARKi3jaSgbhPrWQe9YTMz9eCzos0W+S\nOf4Z7EFZ6KOBvqlc6gsZ8sw2KxgmAWSCMTJney0R3+WaT4qMQ/HRnFX5dYSLMFi1j1AGpxYh5e/H\nvBgs0pF4k0yWadmFqoNiLTk9w19zTiqbWLBDIl/mWaWXJ2WBzFv7EhVIBrJMmVIa6bkCz9DOMePq\nNH+fQ1BJHp7O92uWu/9XBjqZnlk0w0MKnAZveGHRXWHBzCnLoe3aL7hJFcS6Z6ym+ZYIwxzcMCKH\n4kvKf/mJjp/NGkRSyJz0rAjPzypn39NHRbEo67piJXse9nssFW29RuyKtrpiz45aDlh7oKvWqPdo\ndYMRy761tJVlXe2pnOPYrVFVjDi81nT2iq2/p2ENIljrsb7tydtLydRdF+q9QbaNKRLoobkoP5Ee\nGQ5dQGQmzykFORFQEieLk1wHkDAjp+sNdr3GuFdI2+K8YqsdevMT+NvPqVdX2I3FVc8RETauwT98\nH66+gnNHqN9H1jfUxuD3n4Eeke37mcoQrPkUvf+U3JpLA2Nx6BYmdkaDfpwNymZ4l9td4/djGuYK\nLU59F8jkLC7ZtyB1C69Q8ropy2V8FNqcLSsvTeaRQMjDT6Uy1QK/EQ2zAZvPvc3XkRTgsiD/opPk\ny7+TCI/fI53yAZsiF2Q56bGNIkyTwB7q0MmXUGo2T4ZXGVnIlPhcO8dABptpZKdIIUd60Jk0GqGZ\nsJ3XzBnw0PapQTFOw+KjLGgv0RiJfNuPzGR5jAy4UyHwoSIZtTmXSX2monA5BLL8Oe7F09zcKXkJ\nwmKQpRE/VnJDuDLX/Ax9o9JvMSgU3djQnOjy0QPVsIXHe17fg9qXrFH8+gXO2t4wNH6FqoVuT1e9\nwNgaJ+G9bxVvrlhJQ23vkY6wRc1UtKaitg223ePrNavKYsXjE56xr/P1DktrMAp6J/6ascfSuAvP\nTmvCCxbGDAJ2OX6+VP6yfDA4GvmKQrxivPR9LlKBNqxEsc0dKuBqYdV1GOPpvCLNZ9jVc7rde2h7\nxO8/RYxg6mu0voL9A9o1OLvD0AXCGukZafADZhafFKutEsIjZTEqkfIGq9BF3WeyQS8UTL4Eo5dq\n+UhQyLzLfG5R8sUp/VxjVi79znVrIbQkG0iDWC/13rz4jcM9+zXOJ/SKvYBqRoJgpLQX+GmyeGXO\nuzvBi8vh7SFcNDQ3U3ZFtxXSNnoWw3yXaLY5IAGTtJCBExZtaSOU+C20a2GYLq2unFuUE8KPWcvG\nYfZcWGeKKOfQElfIXOLT9WdlJsZ+qj4aa6HszHzgyL7MFe3E4DjV/6PFLuMtC8tKeF7V5XGbhY0r\ns5jMQV/ozfk3I94xEtYKBmVhUDV0HRxYs9o8p2nv8GYF6gKm6rFGqVHUNWEbWVScimCkovMOzwZj\nKqrqFmkeQC1OKoy9pmpf0XpLZ3aIeUXY6WgH2X/B+C6MwZNEy96eUUNvdYD2OaFyKs0P2rRcNuWh\nkNPeO1AHtgZjsVcf4pp7tNqEZbf2JR5P1X0G6+d0q2d4B8ausJvndPvXqAWpd6jbIcc3yG7Xhye9\nMuyrSjggaL73RjMFKEOeqLkni4F6Eda3JeyD6v26i+yJUvAMCsWQb0mZSICRlTseADmO0yrtCA5R\neI0FzRLiOfyhE5fYZWqlJStwKmwvTV9k5ewg1AIu4VlQZwOHDCp+NunQL31LMi9u8Gsyw6SX9rnh\nAiWFRkox/jMRwIvNnY9sTOdQGLmMGSdq/Ed1yFLweOLwoVDhIy8owqWkMNAx4jlELgYezpcXLQcG\npq2fnz8KbTjtXE7LBblY5rxEOcbalpAO64RGJcaHPSwqxV4uyWze5Jl6EXyKyPkObwQ1HeCDqvIG\n9Ud8pah9SdUe8SKYeg0+jQ4F9WhnUHuFNZ9iu1twFmc3qFTY7p62CXOB3nUY8/hDyxKtJ5GkjCbJ\n5rmE1R4VDs1XpH2RNLHUSUon/BrcX8WLx+Li8wqLxW/eQ3DUrBF24BXffoxdvU+zukIJy3kVj1Y7\nZGtxD59idxWyusYc76HZ4zcbDIIlCiYxgSk02uxLoyBb8Veqzny4D70RwqoyMMoJpTCkXElNVUU6\nBSLo4Nz+nnZ9kmkZ5y/XP8dZBbhckI3M7b6y/MfkYQY3zfwoaUk8DAqn3Bm27MU89mSeORiTZxGD\nsfDJf2WZQ4moOAOtdXiXK4hyzX+RLeTJxsXYmEk5k7LsQ7GD3TMoqzSaZjEegQzMPLZxkj7IPRYj\nAzeG6LX0CjFUWPr+s/7tBeIjtFB7vAIJJYuEmp4VS6NQs4j74G2JJO/8kpRjn/fHggdYuKs6KTdA\nnI7i8DRFoHzJvzKlX8ESmuGR6tVhm0nPE1kfyghWv6pVwBuPRTHe4732B4aYhIQ/4juPqQyVtbTt\ngVZqahPpLMGrE+NZ1x7RmoYNtbVodw9mhTGGyt9y6DpUOkRWE9qeS5cafZd29yM3y88LjEvSudh9\nCqTMKUd8UISN1mAqsCvEGIxrObZ7rL/H7F7i66swAFVA/CAU6i21v8EdPke3LzHbF/j9G9jWKHUv\n6qS3bCUKZT/Bs6dLIV2SBThv+Ulhrfcj94KU8MrFSqyvf5upYhnKZMj13+ZofFmaEcRj+CKF4RAW\nK0QhttReGQ3MhL+WcJfwGLd3eaHPOQ9hDjdmDIKxeJexwzRgOQ7HFLP0mTIsJN30wIFp0shPycgK\n5QZSBGHY700rwuKj1mSkLtVpad4JpWBOSr8fX/mUQN6cfHFGKoOebt6Z1I+zVIVkRgBx7KMl/SMC\n5+aZHjV9E4DEOnPk5pTfQltG5mv/XGRQdn2fTv6U+I4NpsJ7Hvzk5CFJb3RGj16FSipaaRA8amqi\naxD6tL3DuIaqWtF4j18/w+prpL1H1teIeFSDE4FVKnEcvKD+gJcVVb1C1CFi8VSoNija4+NFMElV\nn+CPS5VlOpLjkjKPDoc+bp5vxg6cs7qXYsEqeAHaBwBaHMZY8EInBuluMX5Ptfsqvn7WexCDCSuI\nAVENnWYMeniN370HePTwQLW+odM7LC2Cw2CCZaQmDqgBx/GJHY+hTzm/Op8eq5zKRUlSytmz8HPF\nOZv7TOVzjyQ5PcBjZV2ypktPogxP5s+mym8Z0ZB/MSQ7i+gg5HX4QrL6+wVUE9t62u7Ekz5bgZSr\nmCktp30zG7KcTdJnyBWbJoNOhyqnMAb8Bj+hBJs8vfFCC5mSYdSuR/J2+ndizwzAp/5WVnpsv5yo\n/4tsVRpAD/ybq7Vze9hOqkwNrUwmb6HsZwR8b4tkdky+UjIHr5oW6ZgQeFeLsSvEHBEcyA68w1mD\nNA0rd4eYCjE2zAMK6GqHae7p3AFZ3eB8E2B1whtvqbUG42nsFZ0YnOnYieAfPqFrO9R2IIJqfwoq\npUkzQ+q3iPScS49Sgm8vpN8uhQOPFdfd4f0e3zTU9QuoFH/fYEVYVWu6+grUUS6VlowvDWgMjXql\n3X/GenODP96jqyus1tH6MpHVwrzYOAg5nqC9lAbT+cL899sPwt7Km/EUT5XL3kzyftE04KK9bDiN\nQ0yFAzuI7xJuURPzuE/DbcPy9yXD5TRaE2xyQ2gmfDyuabDcDUt9c/ZUkiLfoCTLhfCSWf4yeQfE\nVZe5kQFoOuQgKnEByELVRfsH7730VjJcp7ky6gnFvOCUfKdTEXqc0bcXipxLhOlynszQyOZxyz2H\nUwU4P35n4DIma9Jow7z0gFtJjxEY+h4c6Zi43hMR8DiMCFVlcAg4j68sYi2ma3DdPdgtTi3onrCV\nTRGp8dWOur2llR1SRZVqDI061pXFOEGkxqkL2y4caHWDyh24jp5bBfA6eMFjysx47KePSbxcVp9Z\nHfr2Smxpxd4lWryf+DQKYmjVYMwWXAO7mvZ4hxwf4NmX8a5Dm1fI9gNYOrEBj0HwpkZXV9RNR9cd\nMWJx7T21XdP6FVZtVJgC0j3KeJ3rmGLifuTRzJH2cfSeegvJQ5oOxDm4Y8vrbZShGXkrJV7TMNOy\nou77SsK7C80CljvphPA6m2bK5jQlOYWjjdYyvB+KDQI/jwYMymw5FLccSRk0h/TIjflM+zzD86i0\nox7qcRmrkmUXi7yRg5Ishfeg58b7gbNcMzZNQbcTciLNQw5lBUirpEN8LXzVk8LzUkU4xScYM7mR\nl8ZQ2Y8nCblY/yUj0asyrqmHO3qWR6vD88iT/dF3wZMXFPFHvFUknZx1vEdWO/AHOrOC+oAePKJx\nDtyuULfFtm/w5jrQIN5v4cWg6sF5TKWICk469NiwWW9ovesVn1FwM2NhWAxVUmV65N6jxHWR3mp1\n6FI6JcTTq7zjlxfZxPdIWMfrWozUqO6R9h7jWnS1Q4yF+hppPsO0e1ht6Le5xVGVwgleNZyeIIJZ\nf4Aevg96xO8fcKZGTG6hJmV6oSg+YXUkYRdClVOz+XyYdIrHUGasvJYF6qzUAU502QVpCa/0e84g\n6VUIxVU3fd6Rthk/ehTCj7Mc57YABWwTL8UwUv9ymHtLber3WfYWbVk21TUX5p3DKW/LYGTM9eWc\nh6n96/5Yqt4eiXCSsioCbdILyYRDCuVOa5YyNKoRm8kqUCm+5vORS3sdT6W0mrwwB2SghKYm9jKm\nNE5PzQMuGR86UbzZ74wHRg8BOcuD0fY7s5hjaG2u4JJ3PKtyReL5V2HBYZiDE8Rkh3iLxauh7RTV\nDifPMFh8c4uaCmu3GL2nMUqtBtEjXsBgw5Kkegfta2iO6Hobrr8yNa0q1nS0dICl82EKClGurj9E\n7l9x9B1iw/zjEMLnJK0SaQsPl4z6vdF5ftzDW16q+6h5vRyrTCiJSL88dljQMIUj3mN8g/oOXDj2\nrNregFmh1GDrsOKz+RzxcRGKCV5kGAPBQrQiMdhp8aqs1u9jqxXWHegOn/Um7PSUwoTItL25MFta\n7CIyfMJvk33GFnG0aPutGaasY4RMeBfz9nTO9wRm7xfwKuuVM58hf8B/rsWafTL4sUJJVmevMEvY\n/eaBbLXoHJeKknkzY/yZ+TvTZ9mz5TRsZ5jK9KgiJR2eHIVKNKiGtpZtHEcLJjzfZ6TwnvK8PVyZ\n0rBoe4psqPSrlAdEBrgDo47BlXwYPtPaphiYrN2SZQyN0vQ3as0Jh8/1yxKdeixDbxkEI3lbo1Et\nYRWmpnNuJ9cPnai7SArqY8vyU2JKeTaGv6RcezrNVjnl7Tl6M+btcVWDPRTHV5QNfR+F23lEDJgt\nvvOIU+xqh+DxahBWiFSIxHCo8aR1FNgNxu2ha6KBEu43VDwWDyr4/Rt81yCbF6hZUVeGsA8xrL+Y\n38Azn3I+LD+lwXFJ5PFiT3AyUC+yyMfzYctwx16DREtStcV1exqpodpgbr4cN2VaqmhtS/0c1x3R\n9jVm/SKKq7CE2oS7IfCS5j3CCqXOC6xfQHdAP/0Ef7XGxnsjkgrMUZKMSWcJ25twY7rMLciQMquk\n8mklKf33XOEt0xDmAiK5wLwszWfMmSotNU+rE8ewp6GnHHpUFEV1k+GMkbDkvZ/LUz9p/9RinuOx\nQXuOLfm5UNSsV5AQ7UNt46UwJd3zvtBieJ7rw3LhlfSW/UiQj/hJODW60ssoIDOsIHlraf5wAS8Y\n8Oi9u7LvA2lyr5O81LACNUVFCq+saN7ZFi2GvnpkYo/pMI5SAYmtlwJA8uDnFVQAOebpKJ8iYNFh\nrvdUX5z0OhNSi4tnEvax/r5NpQcoiQSZTp2sTNcAI6eBxG0SVi1HdaB7pL7BiEHiHCBSDdt/nMNX\nNux8NmBli1mBNnd0YhETNuAbDMY5mv0neH+k3n0IxtCqsrYW6Rz90Y/KcFLQDL0m4/URSvNUOjsn\neD50OVsy+6vZ33nYp2A439G0HRXhVvlKD3jvsNbGoRvuqfL1c+T4OVpfY22F8y1eKqyYcFEvwTox\nPuDSiWLshq5+TiffZW2iHRmtmHMCaw7X5TDknFmWr96DfMn85Uprph55d8xRzuWl/s+V87LgSOXm\njfmoDHUqfMtVYklAJyEzNTAGvEooS+2Z2+t1Ks85uCf5JFOC+S7IaRqF5lLINfcg5UQorZTqZ1Zl\np37TgqTLPJM9n4235fm0+JrXmL7lS9d7kCOhnSulS2WOwhDypVRc2uMiI/wH2XSq36fKMCdE+p7N\nE/b1nvdCZusj55JMLgytC08S3TSERcLCqDGkVGKAMz7rNrBPVOaVwXdHTL0NB2arwWqLiMWI52ZV\n0QrQvsa4FcgGX6/wxoDdousO2z7Qra/jDUDg2jfQNFRXL6BaBcfE1xhbQ9NBOhz9nUmux9H/rCe4\n5AGW8yfDwJK+j5LdGVNB+Wxl0/BoWG0XFZExgmiLFYOhRcwOxWDdLSI1mA3WWJw6TL1Cug00b9Dt\n+8FjwaFSBfZUjxcfJn3VYHyHv39F1XwGVdxKUQiK7LcsKb4xDU7RsScE0zDMSelS4rKQwqZdM2Gj\nc/MfXyzNK+wpb0AyLIYdS/H0nL68DOTMDzOOZSTO0wYLdvDXH9uiJRosTcBHEZl56I+qrf+U4d+8\nzhmgkgs8gGGjd47+Jdt0pkZsBmA0VsukRbbZPJEmQmbBa+kb5whL9KR7xZdVU0KfbkUq2zSiQ5Q9\nhU+e15vx2GAvZGomnU96zvOYhD2iWg8ECIDFZ/nLll28KJCx4kq0HfL0nDG4UL0YSTAGoBFXCbPw\nCv0G+PKUG0WqCjk6qHYoHm80HHbNiuu15apyvBKLr5+DsWjbYI+3Abapwa6w1R2ueUBWO5rmSNvu\nqTbvh+Ms1ZGCclJViB6yw9ajGXGhMdLT60T+dxoOzZFYeBv/DgJqNk++u1XG5aLA6K1ni3Mdq7pG\nvcObNX79HN8cwzl27WtUwFdXVHaLX11jj5/g2gbqKl4KoSgtGAtY1Lf44+dod8+6ucNunrG/AesH\nxVd4vUV8Xws8M6ndt2OZRrliSCk/6cKzNH93PqW5v4TyvOFyMbSJx0SBVym8p7DH3mAQ4hkwJczV\njmHkQlmi0CzsVWEiVN9RKoyF+KxffJGcpksMkRzX4c1CnWXeiXDviyUhPf49XsyTCHiJ0dPvIFt8\nP/8sy6/5m+HdOW7rm53aO15ZM5NyJT49fKEXnwtQ5oylUkleEg4tUxq7cfxKUlK5nDifLouILVM0\nlE+4ZEVgNHqGHYep3FjZeBGMOkTAaJhGMuKx6nG24tlqz/2+xvtolNkVGIPTdViv4VpoW1rxGL3D\n7RV8y3p1ha6vUQnh1mB0ONRYBB8WkxVGy2maLE1tXDrFMU4XnxiTGQuTN4MlNWTOD7gtV7Vlw0WX\nkEx3YDmkvcdaw9Eb1B3R4x3qj1C9wBkPrmHV3EL9HNbP8LrDNJ/RVV/CaJj4VRHoWqTd47tbKhHE\ngrl+j3bzAe71N4Nv1uu9pNCW6JHaMgjysaJYomPO1ENY5bwnmOMFS/SlhzU8v1xRjBeMXJLvfBoz\nTFJkwzzECPj06qH8dQ8jhVPHecozPgsckrLJgWVKREycHfMDfxZZz7T0tJc518djY2UMb94TCikt\nwihhD7wwWhQgGYdkextP4zxQcvR21gRKfZaGwoxamf+ZC4TswSU8OKwslQJ8flLKcs/l8OM8dPFm\noH0pXOe4IdW/bBwuKeux5z5IhHxME8ZGzKO9xZTyGMIpWcPSvgm/k0Vu5mSGWjqnVEYxegvVDqeG\nygjXO6Xpah5cRVURVnrG8WvUgjVoZbDeYb1y2H9O1zywri1qViAO9XEfoWo4q1TDIqZOww2u+bqL\nU4rwlMHyNmHoM0pwZNVkAyNWnf3VUX7NlIoZ5Z8b1IkICri+OucdlQlWy3a9pfavOcTNm2IrTLXG\nicG4A3JsMaYOrnl7gNUW7zto7pHmATE11fY5tA+IrGnWV1hMv3VCczzwC8QUphZ42bb5NBUX2hsB\n+RaKy1Lp+UWoqqg6hv17BujIlfUyvMcotnO4lYMawMRrX5I1aqIBMIeV9rhDYdYOOQZeGQ1m6Y2T\nWEgyWo+FyvjXpE+LVlEu6bg8BWX2dvRd8kYka1e5ACiJtPz9LOT4dz6DmXjGEhVboHmhBtI412Sc\nZJCzaoZrf7Ku69PYss8V+jTP+VQGlOcgFL0t+dzzcJxXjhPk/ZD+msgZMoZIQSWNfZI8sEGvla1K\nilSHNswabwmL3psARHs1nlZcolrORGleMK3g9aQQ/KEBe/Wcmj2VdRjfAg0r2fDqUCEGTBU2v9e+\no1JQDog41BtEK/CGbb2ByobLD3wL7WscFWrWiF1jVBExrGpDqx1iVmOKvZVCe5t52NMLY6IyOi3f\n09qysuPL+bV5AIWwHIqSFI33DnUtFh8G1u5D2qri6F5TicHXz/BmhdYeUYt3R2z7BnUP+OYB/EtM\n94C1FXr1XnDjD5+H/YTVC8J5dwEHI5C8kDm83zbE+Nh8bxO6HFJ2hU8axEU//PDT3NxM772omajB\n3GodAcp/ZAIh9pMOPabFhFOSNoMCLigmmaDpTxnPRU+GVzYX0z+/aNCNx8T5NB/WmXoggwE01JWP\nx3y+R/uMkpWbwizrTKXTv5m1Th5gS5oxMxVG9nIRxcxsG5kxAEUGvIq2TdhianCV7R5Uic7ky59P\nkJ1Z8Z1HEftQbq5dRneQKnNw/IwvPRgcpVIcvL9eN2ayNhlYaZGgyUtn87OSAy7aP4yVwONKoysq\nW6PNA6vtjpebjtuD5+gbag+2Ekz3QO0VLxu8WLzdYr3g2j0b22DtigNbNjicP9KaLc6BcQdce0TM\nigYToi7qkCo3Mubl7rlDDt52IdJpT7Bwt8eWY9qVkw8QsndZY2ZwmzA9qRE5czi8b6DqWFnFNm9Q\nZ1lhsO4V/uGAtddQmbCnxdZglfb+gBxvqY5vMO/9Inz1EnV79PgxsnmJVM9QPKpVYdmWuA2C9VLS\nflFv6osr1rT3MnmCqQ8e04plxpv7nac5wa0LA274W1rQS5iOcdJMmPfKPkrUxI+5gg2eY2l2py0b\nOubxR3TjKVotPbsU7lIkYj5/Tv+J+ibx8/A+fKb35Y1PeZnRXBlvSe5m9F5JVI9jOJLjlonzRfYc\nFPk0HDlqG+dPpDrvYSS6pHk+YOLBCyKeOfdqri2S7sjscUiGRDACBzGZtyUDoll4UwaoQV4S2x2/\nZ8ZED2GykjW1fyibxoA3hk4MRh2d2VErVBx4OHY8PFRc2z272uNUaN8InXmJt8GRML7Fdw8Ydays\n4a7b4uyag+5Za0PXVZj1S9At1nUY3+DdPZU24c5YtwOxhIVF707BXZIumBMUivBSfD5evZb+Drb0\nEKKZKslpGotKg8G7jhUONRuMEar1lqMTWH+Abje47hhOKF9d4RT84YDpOszuQzYv3qe5e402d+Gg\n7cZhd18Cu8OrouL7QIYnrGwy8VKlovkUPBx+jwTauUncd5Uug5UbIFm/vCUej/GA57zZXnkmodkP\nSumt3EThnoqjSe/lusrF9kHH5Xuo0qsYrhqOKImPg8Dr98kJ5baNrOrBSFtOc7hOFlpl6W3gnYIx\nH6bP4YXnp+a3JnVK3kOxzjJD/DfQsjRnCsgFnNRPOuHVeSWVBP2AX75idjDQztG5VzG5SxffJJMo\n58dgZI2NmmFnpUbkJnosZC7gF8+KRXA5DYbpGHoUx3ySlFkGrldsA9Ry7BWIMV2PECS28VHpitJJ\nzc2u5fYN3Lc1K7tiVSu1tmAa1DThSDQDrjuCc2xXwm27AXuFFaXuGpw6NrbF+QNelarywczQK7br\niofbBkyaynmUDfpO0plw6DiNPbXUGeUxY5kIHL71PLAskPPlwYigXUttwsZLZ7eweYHefZ8whK6x\n1y/Rh+/R3d5ixFDbCtl9iNQbah5orlZ0+9dUzlLVa5zeh5VU1Rbja7yEW5GH61eAfpHPeJCcE8iX\nPz+VvojSnCos+EGy1GM8niG81Q/R9GLIdArGoCGDmMgGeO7M9AIuvUseTw5EMss6uyw5kOu0QXMu\nJJPjfxlNpukxVu/pugY4qqdO+Jmas338bAEVjUTsR/04X3TRg/EA40nATHr0eJ/bizxedVzu15tt\nRdaWQbUNdoL02VM7fGob6dmcyk8NMNHw0gFIXn0WPg/RzJFSLCITwfQfXsd9h0IWss60XKH8BqVY\n9P6YJ4bOGLcmtFTCtJDD0nrlKzce30Fnd9xsDtz7jvs7w9W6YmsfsKuWfWc5Nh3GdVxtVsFzNTuE\nlo00ePfAUeGmdhzdHb5+jlPBaYUXz8YaEJfJXTORuyf3vSaHubduJlnPpjPHpuWQkxtP9jt7PpvC\n+3DKiJ5VgP0p6RJ6w9CwWgHeURmDlzWqBiMV3h/Ru8/QtsH4B0xV46+/RFdvsV3DURXvFeuO6PY5\n7vrLqN1h2ztk/yniWwwGi4B2IDZGf7M9SmP8zqRzA/iSz6VpuXw+3/N2uL5tvvN5JfvMKe0T5WMx\nMWU9/Yqy/pPDiLeCpOdFvpRnCJ8qWizeONfOpTb/IEM3S2kel9QYM6X18CatM6W/qBbySyXm6yNX\nCJKo1xeSZFxq2ueZagoVJDobSfPxgMlOMJUY6i60zhwWIZUkz7XRTCNkJMFk2OxAomPfwIhEptAG\nDRTlW0mNgjg9Bsm4KnhUM7aU+Sb22dMAGMteMn6M9YhSKNxilXCuAAdEFY03y4P3HTeVZW07Xu07\nbo8WNTUbC04saoWDV3yj7Nw9VfOaTW2pbMPBtazknhV71Aut2YAXVLYYUdQ5vFhUPKoOL4a1bVHv\nMWJPXrVaGN2Z/VBIgxmZck4uXbxFothse6HGPRemKNLgAkaDxSMueIKuMzijGHekcw9UYpDmQF1f\nYdY3ePOcY9dh959jVi9Rs6d9uA/hzpuv0HYHKn0O1RXO7hD3gHGv0LZC62u8hdqanufH+M+16Vyb\nH1PmknS5MoKkCE+fHPLuFeElZR7jHc17XVGIngiZSvbvAGeBYXvhJv3ig17eTGAsgfhLQxHCmFZQ\nKoQhz/BbhyAImTCeuSJqgCgl6P5H4jt6GHlNufHe65feQcy89MEdndg1l9NVZr4PBntpKOqoLbHm\nWFUe5wrRqhkBOEevLNswtZjg6ih/ufq458nUK5LypqtnRzfmFDSa65+5pKTVo4JQqaFTwUjDi6s9\nDw+Ca2uc1BwQNrqnpgFWGDXcHx3S7dnWgPsct1+h5hmt1MGgMFU42atLWzp2VLLn6GusCVvrvDfh\nnlft8GKGo/WysT8rs4RJFChR6LHy6tFnhya78dxi8SVhu7ztIPxNHaIohhaMwYsJVyEdPmbT7qnq\na8zuQ7rVe1TaItqx0gPtw8dY5/F6h7DBbN8HhMo9IIfXuPUOqyC2Ro2F9g2mvcUe7zH1szgos1Cb\n5oPmiyuyx6YvMo+XGx4/bNwvDWn9sOZWT4Uu5/LNbq1+BK6PqfNdl03lITciYAgD5oIzj+RIJoYH\njzCHs1hfrGM4j1KY2xKS2RdDKFQI56RKtgpyWf8u0ma+f8Y4LFnv5fNSX2XntiSDqWhb2q+Z6h0h\n3iv+GL7tA2qFtk8VFBhr3EZA339xU7xCOBg9z5yQuMBDGdkEfYk4NfBsU9F1wl6VTiBccuRxbFjL\na1ZCXNjSUl+9h3MHGlOzXRte0HFoj+x1i6oHUyFS4dXhzAYjULd3OLkC43FYrK2Q1gfdIr5vy8kR\nrz2rvVUINE8X3yc49uYkhkCm4fdS8D5uB3/oZCEMjKY9sDIeOh/2p3S3NIDaCt8dsPoJHR3GG7yE\nmyOaVz+HXdWwXVEf3uDFI0bQ/fdAX4KxGAUvFZ4KkRqVVyC2wOSLCLAcxrucL5wrv+RZXTLHcgn8\nd5EeM3d4KQ6Pxe9SxZJuNnkXntzb0vBcv12K26KH3D/O/I7sWDbNcqdn43pnzARE0rklJ4yvXGT0\ni5CiQpC0wpMo5ObbeYlBspxnPE5yhVm2LwU78+eD2ZAUTgGtbOjkTb4YiJ7YPQ4jgR5kbMI/Pc3v\nMtRe6Q7tXY4CFXSQ1IqhnAqsN5ab7ZHPD2sqWirtqLnHOVBq9uaadVRSutphRWnFonbHQwuthe36\nwMo33LeGVlYgFk+H8R2dXVPXLdp5fG3pVFhZ4LDH6AYfydo7vnlnlA3pyd2Hzd9yyL7FLRKDGSEJ\ng3eRYiNS49U7uu6Abp9x5IG1KHbzIU37GrO6Ym0NfvMybLpUMNpg/R7zwU/TugZsBZv3AmEsWPsZ\nisFvP4joJ5+2wd99H1UX2OuM9/TYebu3KfdFyqRyc4L0vEf+btNjQ8NL+H1Rz2ip7hSGE6bwHxPO\nvWSxzLtM53BbKNX/Oyi5tJI4rVT0s+UGfoJc0uShqF5haMBvTh0IcXxNHaUhQihluctHwLyS6+sp\n+qY8BGQgp2Rtodc8vao4sfI2FZwYwX3+IfyZ/0rCu1d4mXeeqjtlOPbh58LPHiE1h2ruScU/Dqit\ncHfngI5Kjjzols5s8YRTXTqUY8xfaYPzoHbX19I6ofUbVtZztelQ98BDC751UHV4rWiqK2r3gO+2\nYA2V9Yg2PV+muyiLlswaCDmHnD6i/lR6q/sE+2oymgdPfGCsYS/XOJ1ga4F0z57zLeIUZE0lnpUI\nfv8p1rQhn/dod0RMhXcdHD/BbD6gW7+H7L6CReiaz7ESJ+ZXL6G7w7tDPF2oI52momLRODsvOTJj\n9B6rlCQQZnbOiIXOGpdJlpE8bkHN3POxYlmC80UNgLm682eXhiYvrfsUHU7WcQbuxXBGtHtbfMbw\nHgtrOX/PRJRhpqQIJXudVl2m8TsI72mFmSAdtZ+lUppdMCWDAEm/JYMxDoilJTZz7R6P11k6TKTq\n2LAvf4nEbQOjWvP3034Z4zI9LSsfzxEQGj2xVDzds6hyikdl5hOel57hTHmRcbOxamkPnld7g7M7\nOmNpbI3Hh5NhjFJ5obJg6wraI54KlRBdC2ZUWGJ07OB2v8WZHVc7CAevNKGdrsLbNZXehW2B5hor\na1yiATLsP51V7IPR1S+QmQYlL05voQRz82+w6iZTupcyZnqOyZjL4H3DylicAbUr5OYb4YBXc4M1\nW7rd+2i1xR1fUR0/x2y/hNbPEBWMGMzmPYzvaA+fgVe8rTGrZ5jj52FPijEgdVippB6h6oVEIvyZ\nqPRsmgifORAF3w400fiZ8PQJPL6owD2N//T5WNjP4bL0+5J6LoF3qXK4iCZ9ZOpyRfOY9Fhv+F3X\nfVGZZMAm3hcQyRbCAWGe0AxjJH5C5CQdnJEFCce8MWrD4C2ORZdkijX+ju0wEtcOzIyRpbbqCFZ6\nmi48nmKYkaRvVY/8LN/1vzPFAwZMopcpx3WBePynuOA2wYvYZkbjslc4lrcJxzJ/T8uxwZ/CqqoI\nBisenGDURtkEPt7wszIOEYNur7EcUfW9HxY8tHBpuBfH/RFuuxsUqPRApQfojvgmHOum/sBRBYvH\n+uBtGo2KKdIg8VNvRMf/+t7Mmv02ivCicOipgZTH2kvmF04Um8KU2BHiw56arqWqK5yHFRZZPcO2\nb/BOEbGIX+G7V9TtPdx8GXQL6jHG4aJ3V22+THf4FP/wCXL1IayfYe6+iz/eI5vniHqMhI5Xk0JC\nWYgk0+uPEWaFF5cD0zHgosqTg/KS0FBi1r58ColmhUXmT2A/1Z65eua+L8GYy/MYb/BUCHKuzNyi\noKU2vk3YdVbYLoRTl+b3Lq3rkrqXUrkwpoAy4aVhGJueJfPTZAKMGS4UBik0kcujemb6IAjNIlMG\nSAqYyfovznAdzefNe6H5UW5L/JqHIFM0K69+NG7nkqRCIyXXOwoG6efi8oVKfTA5A8Tw7MR4y59p\n1sQE+zS/DP3Tn+sbowBGHE4syUFxpgUqKunQdo+iOLOmxlO39xzqa2wmeyIFAaFTgzUbRFo2lbKS\njttG8WrZyhHbtRzcAY23zI/JrDBaBZrwzoXnTJsuHF8XL4w5n2fOMrlwkCeBxXBqg+mO2HodTnex\nBldZvBOqbo/3Bzg+sEFw118DU8d9JmFNadif5EFqqt37+PuP6e4+pb7+EmxfIPs3uNUNYjzWadhy\ngSUEPnxP8WTcDfH7ZXqctEIhHi5MNLpGwkGyrptIJ+afp3e9Uh2Vz+Yn+isrR4rhFO5vkx7DL49d\ntLOE8yWLIk7hNqc0v4hyOjW3+LhFYvNlHovT4xfRJAE+Pz9YMmRvWWValEwAzuBDPldWKqowFZRk\nQTnjM8kLIyXCKPf4UaYoF+ch5uGk0CQ9bqPW6TAFNFe571syHN+QU2By8txQ8aNS7vmdzlP2QfYS\nsYFnDI6GCsSgqlQaTiXd8UDrwFiLtOBWO6y+pnb7cKluL3PoZdN25bmqHfv7ikPTISvLduWoBDxr\njD4gYui8p2K2F3uc+++5XO1NIx6ldlJ6yznBcRKKQQH0l6hOQgjjfBCw9rEZ4QQBqw8Ya1HXYcwK\nvNIZpbVb9PAxta1wuy/T9eFMxSugEm6GQPHa4tRgrr6GrS3+7mOM3aCVheMrvBhajojeU8lDwEyI\nuELO9Euhv1NhwcIh7MMlo7yUds2UMUcPExyRsMs4w7MwnDNSXxqWPBlq7IkzfL80LPlF0znj44vi\ncK5vHwP/B5XvB0nfUY3LeBB4tZybG0udgT+HkOeYhTMeJmPxZAxm/MX4k9Uz/BTSWoJBxpTZ0xjO\nh8tc28v+jsJ2RPs5GavZJ89R6sWAm44+JQrDwC3bcikP5PnLcicjOKluW8XeVRwmnKAjgBdMc4fQ\n0foVK1sj8Tq3xt6w4hhvnOjR72fLus7w0GwRE+q8d1e8cs944AXGGDqntO0R45qhqxm6qcB0iQ6z\nwvOy9KhLdSMO9HbaCY27LHT7b8XzdLuwarjIUWgQLF13oL76EPUubJXwR6qqDjiYcNqn9y6cNtDf\nbu0RqVDVsDBGHWb7Ai+vae8/w1w9p374FNdtEWPwbEDWj6DBaaGc/ZoMxBQM6b037b8VQmF8xFJZ\n5UjwjNGRHK5Os88I/WKwjsLAuUdbVDbT/+dChbnT8NhQYelVzSMw9uwuSXn+tz3P85JyCbflRWOn\n09vUndNytnyk49iPk6TMJildgFquqg39KgV7hP1/w6M5NHucUlizr3Mm8zyA9KUvJ1KuUCjbNlWQ\ni/ST5HGOqTPN1x8YPubLsY1Q/MyU0sgzFAAV8pB0Gd6WyfOy0pxcC2q7p30spR5jTFB9ooRtY3ED\nu7/Di4PVCt9ZvPEgHT72m69vqNwDXg1eqt4gEBE6p6jcsKpfgzM4YzDec2hhb3fY9ohXD+pGxk7m\nL/crdUetmcubv1Mm4nGcHu0JDqcVTN8EBsw7aayezei5iRacTQeYYeJ+UGsrvF2h6vF2hXcN2t5R\nbZ+h11/DtQ+YrokHY2n8KwU2QYCbOKlLWCxT1bjDA1JtkDacORpWJa17xuvHysRIm3pH2luLhMEw\nfjYC1f/NHxR1RbpgSUdNlcHTiF9fSXqaWbAxm0iqaJBEAf/88F5DuNIo/A0bZodJ+t4SVoPET8g3\nWghRtG6ObkObw6KEfGGCYcobkpWds/5SO+bre0ya84Z/WOltvM08XTqHeSncYIXnfRMnKDRtGy/7\nqRgOUryZiqVTKPSFxwtWynYMGEnk8XRbiPRvSJyZj6ks5vj2vTsn09KbvM45Xp1Lg6oePMnMSxzL\nnx7SkhE1DrdHzCR5ymmczbetNsLLmx3bVYf3DSo2HB7iW4w/YM0Vqp5W6kBH78EED7yTCjUbav8A\n3odDSdKFEDb2kFbhxnqBdGCf856DF2xdIb5DveA1hJAHDzbiLnHxYKJ2QaBMoErGozLfX3l6vCcY\nO2zeC8hyxYaGzhorzUHA5SmuS6JTjyUQrfJguobu+CliV0i1g2oNeoMePobrr4ULGeMJ5AmRMCQU\ncKSVp0JFvXlBd/iMVlvEdWizjbeaRAUezbCRUTvvsVw8ospM/eT4GObMtS3JlOnr0mSDT8AuDr10\nCk9IwzmSw/FKJwZpNBgLRUEUQr31Pq57boCOGXYQACUdBmNqajrkEBKMsvLHeFin5sxOKY23Pdnm\nsQuQLkmP9XinAMI/BZQ8IqH5o7m6pOfnyXFtUQYM3uVgnC4L8gytuefJ2yoHJ8kTmEAUGebjEy55\nwzjNBzPgJhiWhwhE+TGKfuT0GZkGI2jDu3Cl4WBshuhbdo3TWfyHvhlkbjbu+2dhnHcqNGbF2gjO\n14ixeI6Ie0NT7djUK3CHgImxcWuERdTj8DSs2eCp9ZaDvKSyDlGLumBAeSoMHeIEL11YyX+4R3zH\n9csvcbzfc3QOa01mtJio+OLZ0zmlci+5iEwmkyL+OnUgKW+5MGY6HsadMjxLnse5RQFh8jk2Xh0V\nitMWT4OVA77eEBi4xrLFrSu0u0Wa17B5MW53xEpIc5OWCo/ipMbuvgyHT9DmM7T9GDUOY7RvV3/j\nzljJjOlx7n3+LsMt2ykVB81gwc4O/77wQNNSJeVJJ09lBmbZHToMsl4pyVzGstbZ9l4qTC4V3ks0\nubyuL1b/ctlT55culXvsqti3Db++q3RpmHj5fdl/0+ZMy0n2bzEG89BrgtlrvtGh0SM4eU2Jd5f6\nbyqrcsUxl6bqt+zrXBZqYQxN+jhfsJJ5vkOKF1GfMPymdc+9H6gjKYSshk5rDIaDWhQLzRswa8Ts\nsNbROY+owRobwqba0ksYazjaHZu2Qbtbuvo61GHCin+HoZYqzB3Wlu7hNZXbw+6DcM5odY+oQ8QG\ncV4sz01Rrqzf+yPkMntcGfggGjvnjvi8wBMcW+mJqQetM28llvbO8hxhYoTooXhFfIN3jtY3VLaC\nq68ihzcoDWIsYkJ+3X2A3H2CrHaorGbqiWfv9VgHj1RVMJv38WI5fvbn0WNHuGB3bpDmDHyCSqcU\n4OjHEETMLbJTQiR9SyGSLOQTU7TFx7XFd4MVOI/vcNjVeCI/0W8xFR7ivCIfBuTS3NtwGPD8nCKM\n+WmJXpcqjUsF4LtO5+ZMz+XN350Wfl+s7lPptMIYePrR3tWMazT3angZxo0UymLwCNLT/NyWMa7n\n556TYZiPraVIx+n+uHQl8ziFUDQxYhzbnNW2NK+e4z+Xpq0RjBdMvUYd2OPneNmg9RXWK5V2dH6N\n9xbUISp4idshFbwT1MLRPqP2r9DuiKvWsQdqvHYYK1St4+H+FeIcsv0AZyqcwKqy7I8tVKuifdP7\nEEeIa2pv7GfNzntdjCkM6UIlOKA0VFYqwnlCXzi4JYpP71GUrnngeH+PWXusqaHzaBsO00YNKuEi\nVLE3+NU9Zv8Ktl/qcdAYSxjmJRxge7UhYvA4ZPUCZ9age8LdYMX09EnFnVo3bcqCgOhDtAO1Cu99\nYmzkzwaFJ8XNy5KZysPy6zFSvd6cDNJYrr+vbGnuLf05w1A6n0+keJnVk1vFo/p6gCCFpxzfPFJ2\nj63updDkF/G8TsF+2xDqqbLnhd/5dGnd541YmO/34fkEJxmiL5P5h4VFMFN8JArBsL1pGgchenJT\nnMffT6WQr2xPDr83Q2cNk+H7XL5zfVauQ8hvyUzDWiftON2mcsFNwkfFY61gXI0/HMOz1XthYYwI\nlo7G1yhKXRmgxbf3YFZQ1Yj1iAqtEaS6ovIPeLV0YqhRUEvnO1zzgPUddvseWtWIKJ3CzlSgLvBT\nOsMXpb9rMOKRxJ5JEcaCz8bm0tQoH6eTZn6+oGGYXM8Bpt9LCxTmYU6eZc8VxXctnfOo7/BmjZU7\nrPsMazRcwUE8pkcV2b6Puj3S3RNHQwSahoOElaMmMqQIThTXHHC336L2R0xlEJsrl6y9sYlzCxfK\npiSvKfPzpFzGPQCbpVb/ToTscI6k/pQyLDqs2ixU5izR+5fZ77BZV1OFQ0MLYyADPAU3W9FSGuAz\nosmYpiXd5tKwsCbnzdJAm4OdXaAr86RaxH62/8ffhzp/VPN+Pww4M5CZ9v00KlBY67Hflo2rIFck\n48d+TM3AHxbuLCnrob8fs18z78se5xOpz9t/RvzQw7qMT3oep7+vIrQBsqjQubRE3+F7WozjVOmO\nD2jbouuXGBFUTZgf9C0tsN10vNi0rHAYrZDOIfvXsH+Ndg9U3qF2A7Kj8vcYH7a9efUcjgfU71mv\n34d6G1aFeqXzgF1jcKFONB6mPdBNTL5IMC6QyRfBxGZpv+7vFH8N6eycYBlbnifmKUvmooEnEuV7\nWvXjqbcrKmeQ+orWvqST10FhdZ8i1uPsNYJHzApdv482n0O9wSvxAt6w38WgYQeiD/sIfXsHzWvM\n8TPWRnEvvk7z+nsINcllGtj4AtRJ23o1epNpIE69udzhGx8kPNAqKfKp1VwO/By/3tScQ3Ao1zOE\nz96NBmfRMuKk8tys4kwrc8abBAjmBFSp/MZzKEXbekNr7Evn9EhzGzKTN/+bxVEu7OcC65M8Pa6j\nLPO24dZ35eGNn1+yteMxW0guTUteFfnjJOnzk2viP4OJmx4OlyNTjK18rMytao+5LvLapcg7WQgU\n65ex6zmbd35hUIFHptaFfkli3FGd1kiGnDncBKfstxmZMjJQ1HlUDK12eNmE23c0rLxf4ehQpKp4\nset4aC0iFbJaI7LCuyPeN9Adse2eTgxar1khGP8GzzXa3LGyDqor2tUmtN+A1UCvILPD/KHPws8Z\nZXtaDPQd0Xnm1/hMonE6Ew79YgP2MXm1b56irqGqDZ13WH+P7faIKt7eYKRDDp9i5BOoPkDWV+j6\nGer36PGWav0h6j1qHIiNyqaF4wPSvqFGUO+oNzd0V19GvaB8Nyz9PyEgdITv0AAWluqm74O7Lvlv\nZV5pTYQ7kNFmzhg5HdKLoqEYA0GwJF1bhmsIDwqcp7Dn1FVhQEyaVrLiHI7Ds6DwU4htboXi/FxH\nP0RKwSl5G8MKQdUwD/lY7+iLKoF3Nf/4g5jHXFJ0j5kPPxU+PR0CnDFcJAn7KKRDgQl8mRmnAULg\nh1yFymiRWVIUY9yW9t4VTxaU4aC6pjB7JT62HucU4kQJxE9vTQ/GX6gj5Ar4jKdzpICU39SQRnRY\nHGjYXV9hDh0P7g3qb6CqkOoB39Z8uOs4tspB15gV4BSpHNbUGLtCqyvAId0BbRsa/4C6hs7dU1cO\nKzvUGtAjRizqFcWGLREGaoEH7TBSYX1Uhr1c6qVZ0ay+VZr3eaTJBUPjtBLM+nHGuInPZfb7Up6l\nQWIk3iToWtQdMQaMWOp6gz18l84fqIxiVmuMeY44h7oOffgIra8xm5eYh49wbouprsAY1Clt8wY5\nfk5VrbD1Mw7uDmNq2t37GLvGdw8hvmzCXsKc18tY/PA38lp27ZJmTsWQcaQ+sr/n6RQfjHPMljsJ\nIy/ZD9ryRTnU5uqdVzdzw3YBq4XnKY0V2kiUjQRXiaKSb8rUIttY6GZ985ahwTmBmeM6VdoRk4sW\nYFxW/7lnS0rsrSM1C/nfBl5uyAy/y2f5ysUJp40NvvhMcqLH+cV0DFseZQjQpjJLZDgARPt6dI7J\nT6a+FhnxtJZGXl9f1obQ9oUKo/xNuOWKMZ++CNNmoe7pNo0SR8kLQX/cZNcI1XbLc9eivGHfranw\n2JVlsxa+88qyqR1GDCot3q4RJ4jvEN+i4qmsYkSo3JZWHa65xcuag3ZUDlhv+5t7jBjwHZ0qVSV4\ndRipIq6hLTnbnB8qMSKnyWw4nU4rwSK8d26eJqRTiwPmfkNiTA23yDcNRrtYo0F2Xw43Fx++iWCp\nqy/hTY1WLqwU7R6wx1vYf4ZXjz98jFzV6N0b8G+obY29+Qqd1hzvvk21quHqa+AdeMVICJc6MYwx\nW1bwUjBiTxuRzEqDqXDP6DMR0GOKnE/naF3gxpzHx6zCm0I4/XysooYFAOl9GMGDvBsQCkpFsnLp\nVe71ztEn1TGm71Br+S43AOLAkhNC5wukt9Gv55THD2tLxLvaZ3lZ/rwPx2bVmLtm4GXfVcLER8Ev\n0cDzRYl58y0phn5PWaF35xX/ZMVxjwvRy8ra0OvUYRzMTTLM0VSHl+U4Gr+fNX50VmnMjSpnFC+C\ncx3H4zNe7gxd17Fdt6w5crOxfOdNTasVa6CSCtM6jBzw2oG2iCrG1HRa46XG62dcX6+w6y3N0aF2\nG+8SfEPXVlip8XaNGkunFbay2DbshdS0cOqR0xb5Qq2J5ziTzoRD385a7ks/ShoEt9e7BqMe9WEF\nKN0d6vbhkOvmu/g7qKoVBsUZwUuLxaDS0R1ucYdbutuP2T77Elx9HW9XHJsH2H9EtXuGWX2IU4eJ\nk6ydGiqpw2GuUZHNUWCIyE9pkw2RGc/gctrMWeyX0LAYOEuyZPKoPPRgsl9JRmDGQiGTFbnOG1uc\nw0bfkTCZ4FoKqIEWOUrDkOgHxix/p0EzVs/plPz82VsI3xlBJSInLdTHzsWdSufm6cbP31ZRXaLk\n3maOsUymNBxz3s/+0RnhT5FTeiWRh60KBdI/0MIQo/fcKFlm3JTsXc+L+bhRLfY1TvanpQbl9O0z\nZ/hKztdzfDavxNNc5DB3pv3zadg5jTffPzLexLtWDa2Hzx8ML69rXAPXO89RO6w+sOrAWoPqAVEH\n1CA13mxQYzDqkbZD29dc7Wr2bkUnG+zqHt88sN4ZvNuissG7Pd7dYlvBtTWmapHOIqtgTBidOV+1\naHcpmQcvPmvqGT12RgkmG+pyz2RuAJ1bfdVX5Tu8O4TQpChWDqzcA/desesrzGZHdzjgnaN+9gGo\nYI2hO77BNQ5bXbF9do0eX6OdQvsKfzCY7oFq9yHU1yiesEVC4zkyYVm1l3Jt2YDzKbutTKrL3nIx\nJ8C8iM0H1GPnYdKAkvE7tMcrX7kWC84B7gVDgcGcM1Yoxvhb6S/GHIIZ0/ZIVv2wanNsn84YA2O5\nMqcHNW5cIkNqNqX+GivMgRMetz3hcoVzStksKdm59C73BZ4zzC5ZHHOKb3OlPDcOwjMT9VnescJ4\na9AUB50ojuHnoOTU+MyYiqoiKzeVWxFXjZJCUlUzsk1yU244TzTo3dFgyS3Q9Gwg1CR6c0nSAduE\nTu8JB085q141epXZ+EhohaNq6ER486B8uAPnHvjWp0Ita3YbywfXHZ98dsCrRcwGFxWWqODbFtfe\nclVbWgdHthgjeHvDhobDsYFqh4ilshv8akPVHsA1GFXwLUY9XtKhmEOf5TQvjOEs5b8ucSIedWza\npV7JJfnH+TROykrXgRXa1mKqK7pqhz08YKobqK5Yv6w53H2CNrdItUVvX2M5st6+h1ldsbZH2vYl\n7n7P8WHPyj9g1jd4u0KIwlE0fgcvLYpHpQ6x9YIZC3JmX0fH9zDjSZ1r84X5LkkT5Za/IwuHnqhX\nRMLEbO/aLeRb/DGM7UGlnDEcFvAeBNGMUSEpfzZ8NXteOIhjBZgr2fR3vGJw2fK+TAlEKBcIr0vH\nyrmy49+P2dOY8i/hMmfIXkKHc3XPTPPSz+VN+kwJq4M9Yy8sFpyrpOTDXjuVRq2O/9V8bGcjJtWb\nToErHMesMb2nOeCZO5kDx49Go+TGwcjCnDQtKQEtsg3dEZR+3j0J5TRGSqNS+wyS7k7uBOst3gjr\n1ZH9vaX2nhbDm6OhMxtcp3iUFQ2ONajiuyP+8Jqbqy2ejgM7xBo8hp067OYKd3ePb++oq1BvOHS7\nxqzWrDdK3b6J6zM8UJEuRpjlt0Jeza/MPZcuVILnBfypdMnclYhBvYI21FZ5aGBTbdDVC8zhCO6I\nNoKvX7Cqn9O9+RaYlvXN15HtN4IbT4eqoTE7vP+IldnBi78SdQfk8Fm4OHd9hdhdGCSZ5zIMvCRF\nc4FJz5flAotpG889e1w6PRhgQUjl7wdkilV0eZmi5SeqnFeyyXqciq4ZZPt684UKczg9Ks3YKskR\n1HzA5xl1fhXfLPgZhfOuw4Rz5R+rzC6F+0VhvIs027KBmWZ+KylKMXcMVq7yxqqxCIGPPMyYIUDQ\nYZvFYGhJ5G0lGUw5SvT55hT3wHG5apVY56y3r8nbjGr5RPizt/z6cZVXH/FWP95lUiaBEDkJPOoJ\nN7tL1eIFPrzyGO34/HBDvevwXUPjNzwcWjZSYYEXdcvBO+5bj2sOXO1u2Kw9b9orrBPAIW6PoaNt\nhLp6hjRHDgiy2uHUUWmFUx9OoBGH8z5umJcTCvDcsyDgz42ji06MGUJGXyydDOmIgG8QOWKxwSWu\nwlFmDYpdraE9Ur36OUQMm2fv0zrPoTmyXrfUssJoi2uPuPvXVOv3UdchxqD2GrE7LEf88QHRB7S+\nRuqr2MLhlPLAiDG0KDKME6QcMxfS44tY6KnmS/Iv0bY3gEOmyTsdm4tyXijmdvJ5DKe4xh+FUHjM\nsvyxAp31cPu+Evo9hkUVMwt1SGNoqqzn2nLuVI4y/xT/c+kSGrzLckuwLqHBY0Klw8KFqZ8O4wBM\n6t1cMZZ15uZf6L6FbfNRe03nlgssS4gyfp7zTV5cRg3wJa5jXBL+o3nEEuigCPsmpJDyyNibOKN9\n3mxOvqh9hvJiwtFmGDrnee/GsLaOT287HGsafcbWvsbonq5eI1pxbBtetTUr9wrd37Opaza24+Fe\nqcx1MB26CmTFA2t0ZVhpy66CrnmgcVukErz3OODohXVtaX3CzzHtozKd4+hzNt6FB2ibyWBYmm94\nbMg0lQOLaMdKWjqpMP6Ia1ukuUf9HtMcqFY7qu038LbGe6XuDujxlv3n38I9/zF2/nOa+zuq3Tcw\n62vc/iPk/hPk5qtoVYUVoNU1vn3Atq+ge43pOiyKF4MVm2NV/Blw5xLn4aJ2n0qzg/gEzGFhTBmC\nPM8gvbt0WX0z33tc5yTbAhbzA/OyNAnlLGI6K3oys1hHedPCmVwInlYCeRoUaGlMDS09d1v75enU\nnPu7Xkl6Dv6psO7SNor5cGgpX8JezqE/cqNlbg/vuUjEWGVO8mahtLMGXm47Ju8teZoE1dOr4n6g\nzPTLnM0bXbcEqaBhhqNk+cuhN1XsodiIX+LcX5+HeMGRwNoIL9cNnz0I2gltvNhgL1fsVnsqt0dM\n8Nqa5oGmadmst1Rdi/MGu7K0rkZtkLvqALHgO/CCVhWryqPunsbsEAFLReccV1WNHhyGCm/Cgd3j\n3s3bm4/YQR56Lh1XZ1eH5uG/R815FVbfaas51OBx2qGuo9MNOEHaB+z9z1OpR1bvI/aK1neY7gge\nnO8w3mMPn+GOn3CoLb56iTS30LwGHBw+x/kjUIXYtChWDM4L4lto3qDeYUdHvxU4Tyw1Im9fLiAv\nSekqQ7SsMgt5j7p1VIdMx9QkQza8Nf07tqjncNcy3ymDaFK6mChLVriG6RVJw++M8D6hMZOXflYp\nzPZJ3u+5hTPQKZ8jWj6RPuxnHMKvuYmQi2mJvJVQGuo8vUE7H+5DP/4oQpmnFPDJciWQwA9jbVPw\ncE7DLATYp3E/0UdwTvJSMbZjqRGLpNcj0UsaN/mbYfHLgFaPa8+3OmqOlu3p9VKCPii7fKoh2GiC\nZIfOF7iM2ln+jGeEKoiRyYLYcCuDwRjDh9uW+3ZL0ypWwRqL0lL5jsYrz7aC75SufcCaDfX2Q3x3\nz8P6OVLtuDEea+9p3BHnd3gsXhSjFm89gsGZa3ZyhPZAV23BKM4LVbUi3E6xRrzNrkKSvhdyQ2Be\nbo3H4HI64wk++s7dGRgjBTo3liV0qWsPqA+jwLgGUz3HbF7S7O8xHlbxItnOVIiArCrwNbVvEK84\n32KqG+z2BR6PkQrZXMPd97HPvgyrVbwYNlYuir//COm+h8T1ooPVNK/UUxvOhSG/GNHoLbTC8xSy\nq0LKRSM5PoWCmnwbKYg5TyRTeFkFo58n2p3z3tiA6Md8b+dO8J6FnSm5sp6FPhrhmofgekW8ODZG\ng6n/uTRBnxuK+WONlUwl/VxIXYo2yuT9eOBIwRyXpZNTEheWf1tPc+KpyQj38Rjrc2Yhwz67QO61\na3gWcxeGRglUio4fuLBUiqmfy/bKIqmLlvSH95/KPO2Hvr250B81QgGjMBmf2ftT7NC3x2c1RiUt\nauiA924svoNP7zxre4/3LStzHy4fx+BY8eq45Vo84l9jN1dU7oFOaqS+Rn3HGw/WPGMjD1TuliMV\nLRtEVjiEFodR4SDP2JjX3HUVvgo3BKl11M0dWm0Ro7i4iLF0ApYV3HTV9WkZ/YizQ6fvlio/mQpZ\nHAWMhhPMXXtkJWta1ogNzzrfovUaY9cYUWR1hTcViIfugB4+pbp6jq7ew/qW9v57dN2a9e4FTj0q\n72GaBj3cUlVfCe41gJpg16dLG03OxmbgsSS0R57tpemSvOMNxEJgzEH25tpOM06Xk8pjEP5DY6ah\nrPCcfMDnyv8s9ifSuPAMsPL0jvBksdZCSD5OEM/NtZZKUbPPSAH1hscUVjKWVGEO71LZleXm2rqs\npFL5/HPZ2Hyb1aLjd6eePS5knJRN+iPl87L0civzsyUjbUoBmfN93q9F9XOBQwqlmNowMcBKCIWn\nRskvRZlMifcKO8ud2bt9maG3Y10yPO/nCMm4Vk7RNOEnfWWJcl4cSIU7Cp/eHRFrwXkarujMDgWs\nWhSlIejRyjr08AZXP8esn9HhwrSSWpx6Htgi1QbrD2z8LepXNKbGqUW1Q8VyqLas2je0zlJXFRvr\nEelwohhrMF56nV3sVy764XJDbpzOunqPWU0mIv1n7vnwIP4jsQ2xQ3EttqrovMFur7CrLX5/i6HC\niMVvrhEsKPjjHdx/m2rzPrr5MNzAXG2pn38Vulcc9p9iBWqv2N0HOL3Ht/dhwIqC7SsHpD//M18M\nM0J40va8vUufS1KfHwkx+b7GQRifgp3/Hr/PFeBsXwxavvh7aRtm84kM8GAKY6Rk+8+JunT0N9Xx\ntjQva4eZTh+e9YeXz+SIPJTTeR6HvKUDicLnFM4J/lK+8+19LH+emuNbyvsY2Bf1UT4MR9+HLzFU\nnd8kUPD7fN9KTnzmhOcMfhm/hUJkLBF/zDrxZb8zQq+QN6qFUptX0CV6Q1umaC/3xzDN1dcjhGPQ\n1HNsWzo2+PoqHNZt1tj4X1BGSo1SWbC2wuIwleJNCJ16wIkD7VAFh9CZG1rzEmNgzS3WP2BUcTgc\nO7R6ge1e0XaePVeoWdF5xashQEiol/R5/OEM03RRvPNtBfsYiSToRWXCokYN4g9gazp/xFY77PWP\nY6zFrNewuUGrHc563OFj7OFjzPU38PXzUN7a6NFtqJ99Hds+cLj9OFoTa8zmQ9zhU/p5qXGYSsyA\nHyXDjNs0/v4YWpwSDkYMZqLgxnUJ/UXBF+NwSiCN2pXjW+Q7L0QHZV4gX+I6/jtUmr6cbcHbB+PO\nlTTxM8Vjvu3lRzLhMkfbaWtypTjON8ZBCN5NTrqhjrc3BObTJTAeYyBNeOMSWP2e3lEgNdF2pFwG\n1uq1SvYpeXpabxhXqsmrN1P+Lr7NtEXohXTB0kFChamYPsqUFm7kt0HE7OPoed8azZvbJyNhQcsy\ndcdtDrASvKE6ARVMVdOKj/f3KZ4aF4+XDCXDCoqKDkyFWb9HTYv4Di8mvvOxnnD7vGqLx9DIc1rz\nPmJWrMwDNK+ge8B3AkaQ7pb7VsM6kLZFRMMZzSeaNp0midNrpKjvabp8oUm/U55J/rcsRNGR/U9t\ngBZki7oWWCGrNSoG9q8RKuiE7u671G4PNz8JdoOIxxvBRSY2KCIV1bNvYERp7r4P2rDaPA/bJR5u\ngXDNkhiLoBiJWySY3iQxN2jm2rXUTxI4oWDQsRAdC84hzxwGWYUTDOfgJUGZK6lxG8qQDies0XNp\nKb8WOI+g66B8E50Whfr81yItK+0RHWb7ck75LNWUCdl+IOqICEsUOQV3jGsOJwrOXuif9lC/SJoY\nsKfG9WPgFp9pn08yZgpMZn8tjMfskwAq4GeE5nishXKlIizHwzTgWejeTFEOxpBJscxQZwE5q1/y\npsvsZ94jTUhM6VFE00f1JlhBmRi8CpUaKhS6ME9nVbAKIoqhw/oDrWupjeBU6OrnbPxrjG/wYvHi\n0V7pW1TDTREOD0bY3uy42WxZWWWlbzD6gDVbrqqWTfs5Ro6oP6BUqNiTcmiRH6Nnfc5bfGsluKTg\nVAb2KHhYBrbIhT0SLIDWt9QIVBtoH6jWV6hXOupAvOPn+PtvsTYVXP9EUGAaTn5RZ4IiA1JAUcRQ\n33wZWwvNm+8hrqXefQU9foa6h9B4dZjmNRUNQhc8yYhTGpA5+XqCzi4RD1ZSOumuH9CR+6QnTqn8\ncmE1nJKSvUtFJvQcBoSOBwb5oB6JDiXSrRSiw0AtlUSfY1GxLAy49F003g1WtkFY8GgXdb70hnYP\n41HCOAqhM4phWTEaxgvFhmyaCDtTbllQz9dtB4HZlxnf3H5OsS57tPN1znv158otwRm/myzxz2mS\n8eAU9qAwZttSPF4623fcB2U/Dqe0jHkxH5Pjtpf1kiYxNHqSxEPhiwM3NPsvKf5e/fcw1YwV3gBi\njitHlM4yJhmT1z5St5pjF46KURGMtfHdnk5qEIMPh4oi3iL+gOk+pfUVGMH5DmdW+OqKtb9HfBe7\nTTJahVslVJQNnmsLd8cOUTBmTV21rOQepMJgaJ2C71Dt4gXqM23PZNb4nRUpRsGp9NYLYya1klTA\n8Gh88KlKjtCIae+/D3rA+UPYZ1pvad0RFYupt7g332T93k/ir74aWafDA7V2KBXBbolKhBgAkYrV\n9isgrzi8+Rbr629gth/QPXyOebZFtMO1e2q9p/KHcKljstCytucCd1hslCny2HpGAygSsWC4mUVh\nC0K3/DbJIRlj5FbhDIwRllkOIW/E/KLQNEyXU64sZ2Raj6OMx+iZNOG/wnpeyHMBzDwtLXQqreP+\nKSXiOQ9E71kz40WH53P1T2EP38vFTmPlJ0yJPBWJueKcXjSc8A3f3yaMeip/3i+TfKOf8+wy15YT\nc0AyqJRyhe1Qfvp8Pu5YKsL8Mmct8syjMtc3KaXIh2bL/lP1wtxdh6nYPNRe0gHKdJHZkKcvn8bg\n3DhAsF7wxoMYrFeacJAzIobOKJVrMc0eu7FQ7bDmAdd1WIVWNlSVZ9O9ppEXeDGIOlQNRgCvVKIc\nnPCtVxUbs0EttLIDqcG0rHhA/Z7Og9eOqpfr4fzQ4tTZk0fhnObPPF18duiSoNC01ydTcGfFZvYq\nqS1RZbWqOLgWRDCrHb5r8c09Ih31sx/DH1vsrsOI4dg0+O4Im2ukApV4SWomaEPM26CbD1jbim7/\nEbp9n1Vn8ftP0d2X6HSL855arnrDK2vgRB2V8w15kzLhVijBoY0FXo9Ic1ZQPgA15hmU/4KgTZbZ\nshyh6EhKesx6fecmpnM3NmE4I9ASL4U6hoPbc2WU165Z+ZOexztPpwfWlERm5tlyOZ0VUnNGUurI\nk4Eieu7LhOKw0rRUiO8yze0jfRf9cgkPLhlG5fOoHEQGw2UBFmhGs7mUt3XIt4hXGoc93BzU1ACm\neDIWBumZoV9lqqVKlJy5YvZl3DoqAaN7vNSobJB4trL1e7T9DLO+oTKWo24wxqLOgwjeV3SyY23u\nse4Nam4QIxhVwvnMFqth0YyaDWiLpaOjCufCSMWR56CGSo40XYN3R6ydi2qMpUH56zHm3Fkl+Bjr\nUGRqqV9QCFXlqJ6VrGhahxihaW7R9jU1DltfYbYvcbcf0b35iGr7ktq1OKmxZoMoeI2CcyLAw6ql\nqn5OJZZu/zHObpH2Fb69wYtSqcWZeCqBhFDF/FaC4knR7vCkuAKyFDGZ0fLoOZWZ7HOqeGlLTL/f\naTA5spIZpBmD/Vy4c5x/7NsMvjSRBkN9Y2GVBI5zHtVw0XEqmMmWrLFD+4byb0HfE+lUmHDWk+vJ\nqtH7eBdYBGU32F95FOUxFST6JNwlfp+n19sYPW+Tflj1DHUl5ZNCoOX7i1aLUtIxpPPKOEUJBoMw\neDnL9enwbyqXbzOJL/pDJ3pFJ6VveM5eAtRY6lXHzrbc6h2iVzh5Hhbr+RbZf4Jbv8BWG5w70BlL\nbW24OikudjRacbQ3bHgNekvnbzBiceLwOESqSHVHi6emA4JnLBqu1Tq2grGGqvNo58CsUPGF6VeQ\nR/IGPl4HPeoWiTwtCZoF8Zr9lh7pIGSDAlv5BrEdun+gtiCH76PqkWqFNR7p7uDqy3S3n+BXLdXm\nBpHgZjs6hPzIsyEpYFXxYjH1DdZa9P5TutZjHz5D1YEZrKhMRM+c6XeWKpP2a/l6+PoY6zgLSfa5\ns4GQ6CgjLy6vJ3dzh3aOLavybrRFdHIYc+3IlN2seMgIPfXishoyZ0f7/ZHLyXs/C/OxacmTmA+d\nzgvA9Gw5bDbGMymlKT3LZxld4z/LPJRLvrEyz71OFuucw/nSfYdjeo1DpDoyZH6QHuPUYDnB31m0\nJ5+nH0BMIxgD3Fw5kpXL6uu/lmNuUMxj/MJY6GvJFXn2fCJr+kPil9oXyyVc1dN2FXuzphMDWqHW\nIM7hj68x1Q1VdYXXe1o1IBZbV1hpMQphw0O47aOVG1b6GtUjnWxANWzyN6BqwCtqLGIs6j3pwHBz\nvKX1jmcvvoy9/T57PYBZDQecMM+vJa8Px6xdwkmPVoJp7mB6Dt2M8B/PJ+VuumiINQPqWyxNWL3p\nO6pK2N68z8P+DlGLW38puMRdi1kZ3N13sJtfimD6lV7hCrnBuiXDxStg4pS0bDE3X4Y336S5+zYc\n75H1s1COnNBTi2Kwxph4dcVgJ2OsvP0FsJnVZdAvzslnIuZ1cRxAFyjnZH2OxOCM0LlMeRSyIFNm\nmiZ9RwpxPKj7LIMkZxA4YJILKPFuuWSivIM9QWMBu6TslsqOhfWsTtSyzPDiVFp+P6ATuSkK2XF/\nZiVGf+fapNln2ohFRaQe7+LZIbYCMxif86FEzj6bS4+Z633svPASDJhTlpeW1Xl+6L1tmBPJ/YI5\nyrObkixS1Z73JY/WaBgVeZp3YEPlaZtBPrUy0sUYUbrO4YyyouXIikoVmjdgV1DfAILRA61WqBps\nvaWSBoPgsIAHb+jUIOaaSt+Arziaippwp6FHEaN4bPAM1aGscIdX4Fuqzfs4K6xWFff7BpuUy2x3\nSP/JbOaY9TL5+FZzgrNWKkyUzxy+aXVouNxWQAzedfhmj/dhpdFarmgeHnCHN9T1DebwCaxvULND\n1u/B8Rb35iOqF18H7cJGek1n6WUkiIKisgbvHV4ERFAs1fOfpG0OuFffRbcvJzSew3+AXlpwY7qc\nXWQwZ1H2Ll2CRXEqVGLoONzmcTxRZcEMo3xjj2Q6JKfVzGIgzD0d8M0U35zDOaBhKHVefs/atL5x\nOiUQL1kFubz4ohxSY8E5jIVomPWC78zYmVHMcx5nyDdWbPMe6MTkEaZCMsId4xNSOZc5bOI2Qe9p\nNGe9MsxLLbdptubCmDgtrM7BPTcv/FgPdj6NDP+iPpDZRRpJVqTvY/wWjJfkQcpI2eU8prFTJX81\nQ6e+86MWnKAZnmu8fqkSS2023JsN9vgKbwy6ukbUg1RY9bRmAygVQfaKhPNAez0t0MmaimdY/xp4\njjdrRBUTr24S7/HmiODp7g4oDrN7jtgK8R21WaHdEfzEgi/bl3sn2cNLA6MX3iIxfT4Of12agodl\nBidADN61PBw6tmvBCtjKAuHYnNVqg9Y7oKUyDkwN25d419Hu96yvn6HOIXGLRFGXCSFN5xUhTMqq\nAZWKxrdovcFgMKqIsRMpIdmXFHMfpqmmwuPiMFyvLMa2XOlNl0bF6BDdEkPSKkJVf2Le6hLUpA+t\nDsJ9KkCXWiqpQKh8Fn6ZdPQ2toOxpzOTson+x/DgubS4sOJE/unvJPwCckPocQplfm70/PtBCU5N\nONUBh/Qs2IDDeYpJaJdhybylM66FgIgdrO4FD+dcG8/lzf++LZxL6lh6t7iy9WSZseHYU+lkHXl+\nITqG6SomoLcIE62z6FtQOiNFqtlLkoNSWDR98f59X7ei0oF1cLzDG9DVM6yAo2LFEdBw00/cyF5b\npT18zqp+gZcKJG038zhqrLni2t3TYvC2Ro1BvEeNwaF0h9esxaCb9zBmTatKq8Kutlg5MjfA5/po\nmC7I/55Pb32zvIhMuneJYfqFGZqHDMKeEUGhO2JNWAprqahsg/o9a6NY9wo9KKyf463FNZ8Ha+Xm\n6zRvvk232VLbCh8t0lIBhH/CiQrgMfjugB5fw8N32WlDu6kRFQw+HL0WLbBiLi39TYIs/Tt2TLLO\nyNhv3quUIOhTdyWlM9t1Q9UTL2xsYV7i6SwlKf/pUy80MwyS5z8e8qPKezok5Rohztef0zgZuT0+\nw8q3AtkkSLKBPzc3WrblfLootBoAns6zsOjkEnzycTOXhvmmcR25F7dcf1gVWQqM0AcjoRrhaPE0\n924yvn8LBfXYhTHnvL5T5eY9pMvSeQU8qJWAYjIyTudOv1JXprCnxLJ9VIgRzyU5FYfNcIZqfg1T\nfJLzQ/IGY/t7rAUQEw647jq0OcDzrwfZmQxjOkAwallXjuc7y6eqgEO714SVpAaqFSI7VARvnmF4\nhXWv6PxL1BqMKM4d8e1rbnaw273g0zsH/iFcbqw1rqoRMXjfYKsNiZhLPVDOrc4SeTY92hPsGSF1\n0lzBQlCVll04tDoJ+7CqyHd7rAn3RznxcPUTuMMbRD2rlcXvP0Laz9Grr4VTym04SLveXeHefAfz\n/MfjSsLSOghRGguiHNs75OEWcQ9Ie8tmvYXrXwTHI76qgAqRtLBiof0pHLbQC0n5pdfKMLc3K1Sz\n8FrIG0+0SI4UeYenk+kTrEH49O8XxvS5wVsshhllS0u6TaHxhvWvszww6v/CkMuU1dTaHnkgo8f9\nbfFFRZcr+byuL+pNXFL61BTCnKex5A0Oi0xO1zFGcDDEoBTQeZmgCIt5x96BScaE9soxCXdVn3mi\nFxgMZxT6XLu+SB9dEg1Zkl+n5oTP1Vl6xkkd5TVlPL6ohJMhkk0DSDhmrWjXyOub9ERvRIa5uuKY\n7vGQS/kVxFfhHFGSSk3nd1pqGjpqrDF85foe55WqslBfo2aDV4d2DXJ4wHCPWouzG5zZsraelT/Q\n6BrThWvu1itls37G/aFCqxXOG3aVQ7jHERY+dt1xUIISttP1LRkbRJkELuXEcjrvCY6INMsIMvJ2\nFrgrWY5JkQS5qrj2AF4xKwtyRA7fQ5sjzlR4t0XWW1amwzXfQe8E8+ynUIFq+yU4fhM9vEav3gsq\nQuPJBMbGDrmFN59hbUtlb/BqsTcf4LdfDSj6cLoAmsIP8wPa5MIhy9I3NQrnnNWl/69Mmajr2bco\nqxFuEVaU3q8MQ8tkrD8Io15gpiczoaWTc16FoZwsybKxudLULN9AjPK27GLeOMJJ3lrSuzJ2d3ta\nDZQZvBQt+6poTnyvWT1ZSsNjMWoR23UuDf0+CLKxgp1TdJd65uOVk2W9JRMuh4VG9U1tnIW5Kfq+\nyftberqGzdP5nOTbKrc5o+Sxnt7bKNfxuFjqs9mw+EnvHIIxHhWXz9syMvJSgX7sjGGmMbHUtiBl\nBpUwt+8QRoO6b1evYGNGI4rzoHiq2rLxe/zxU1x9g5eayjhqbXngmg9uGh6cpWnWVHzK0XmsBUyN\nsTXUW7y2YXqm22OaO1r1iD/ivMGJY7uuuHn2gv3+yKaytF0HWmHMCvUruq5BVNCuGXDuI2hS9KFP\nLnPS5OXJLCfTaSU41mzFSo3TW76DsxKtoKwjg1DyhANlBacObY6sTbB7bL2juv4Gze3PY/wGc/VV\ndPcibKbEQPsAxzfw5lvI+grz/EO4+wR/XGHXW8RUdL5B9m/Q/ecYAbt7QecEd/gMs3uB27wMBNUu\nEDmGFATTt6oQXKnVhbwYDZJc6EpSZMMy5pDivVj4+D5ZjuGEhmBMaDEYkjJNB8EqEvbk9Af1liGo\nvE/6AGZCUVLflAI0MVcfRswEgYFFAdUPIwlzr54QeibuGZpdeRn/CXllElLtEY0El17JSGz/dEAn\nOgVK6rAXMRf6kvdhUmHBEuvbH+tKIcZkpCU6zUZGIh4FHUeCtqfRybDm8kKroS4hGZznhf6Mcpsx\nTs9HCfIf2hshSQEOIdEFLEawz63GXTIYLgsNn4adwzmVTq2FmMNruggnLtFXS2kaL1VYwp+st+gt\nURkVMxOfZ8iX15nhkPg7tSUZrUpcOAhqDG0D9e5DbHOHKjitaMwOtOLZlbCpPT//ecWzjaeqTJy6\nqEG7XrkKNtw+X9dgPEqH7jvscY/WFbW55nhQVnhaNagXKiN0rsV3LpwMbg3eKcEN6QCLiutlZz+S\nZZCV/VhPPHGG/Gdvlh86YiBosv7HXVJY7BMYUZCNlbTr8N0Ru6ppvVKZFbr9ELN/oDne0TQtZrtC\nbRDI1epFuDnCH3CH13AMp5T7u+9gzY+h3WfYZo8Vi7n+Cr7acLz/HNPcYp99BV9fxbMzB+KE/YY2\n2ReTMT1Hw17EZHQYzIPhZJa58dQzblZ/zswF/YSAr0S6zYTFhvnLrIJ8oJ4Y85PwSlZU0cCIPgzM\ntHVhImyiwjelgzIvmHpUpUez9wL7uQoG2mVtmRVoEy4st8iMDYQiArXoHefKVc63aYTTOC0pxXNp\n6r1L3445+Hn95Rz8PP3G9UyFeXoXVw5mlkQZktdFmi8p+LzeS2lxSUj/bVaFnvNMT+XPy8zVO7xK\ncIfvGcRF2BHYJF/+ajCHGdU3sgJH43uMRTLcJW5hb/WGzWaFNvf4quKZeWBTN+w2Nd96s8UjOFWs\nXcOxodL74JF5h2iYO0QsikXtDaIPXD3zHFZrKvWgNU1zpDN7tG1wB8V5w2q7hWqN6y+WO0A8eBsd\nTl7VfjBnBp/4QIlMLp8zFy8Ph4ZaGcmE+Ko3ZU7AGAaRGBNPGLB0rkG7I7I24Dq0MviHj9H2ltWq\nguZT/Ot9WCFq1qhXEIeNq0G97/DHW9rDx7T332Nz8zXsi6/jqhVtd8S9+YtUZkX1/ldwskG8j0Q0\nwbtST7AuJO4zzAi3ZJVmdJH+Qdbc/FZ4oiEX+yvNpyYJLxG2Eq3KMckjZ0v2cG516IBbJnAKib+U\nZlglExwJ1f5w8aJaiZbluTouqD+hWrDSaeE4Hu/91z5skmDlVlzufZYKA0bKRiGdtXxpyO0HMec4\n9NDIysjqO/csvph4VDIqV4YDx15Mb5XMYjeufy4cnNKpd3mesWd9ar5ubADM4XNpOPqxc5Lj/NMw\nc6DbFO4F4zMp076sTIe2jvm8tIWlwCW+zeRSMOYVsCHiJoo6x9FcsV0D3QGpr3n5zPPZ6wNuv2fF\nCozgK0WOD+BrlAova7DX4WokVXAOca/40k3H/b2hqb6ENy1rvWNTrTGVxR9e43WPU/APtyAW1u9h\nrEGaI+o6xFagvhz32ddkRydaJw4/1+VnFsaMumhkEZepFN/z9UbkNAI2BtccMeIQY/F6ZFtZnHZ0\n1KxW71Nvr/Ddnub+DebF+1SrGsWE0w2aA777Pqa64vq9m7B/0B/Rw6dAjd69Yv38Pdh8GfEdVuLK\npSjdVGP4TGyPd3nKc/m1FKUlofI9cKpBaQz7CUcDMgn4nosNElenZm5K5pGVuBSkz4/QUo1nJcgw\nnyiZh5dQLLTZaGDkeGbtQ9NhA6FMD0diiLInWxmynBMmkjdM8/aMypYYRTQuU0SDoRIFYCJHVrzg\n2IlXMgivuXmkS+apYCrsL/XGCsVMxnfJoloY2ee8q/H7ovcXlMSAcqKYUlLvdJtOwU/Kywxn5J0s\nM1bUS7y1rJTm4YzrzJ+PcZjzdMepzN8/ncBdGn8lLEO/MCaO2aHOwdsclx7GWfmmb0+0soc2CF4U\n5xx0gl+HiNmd3/F8veLF7pZPP93z6cMKW9VUpuP5ytP6B+7FoXaHaNw+I4o48J3Dt5/y4tpz3654\nbW6wRsBXrOVIe3xg7QWvlutnV1S2QmzLw2HNbeMwtKAOdR1UdfRUpadE0V5Sk2RQXhfYPGfDoaXR\nP9PZScikze/ZVUHDxZEyjJ2Que9M3zasVzXOVzStZfvsS1RqOLR71B3x+ozq+mtgVxzvvo+/+gC8\n4A7foxah3r5HtX7G1u5pmy/D/WccDvdU7sBqtUW9gD/ibB2tiLCpXtORQkLYI5ioiJB0dO715tOh\nmRrICdF3TnoVj/RGMjjRjhustNGBuSphHiF35rUnYTptJymlrLOz/kgqL7+0hR5alKGFL5TwGLyh\npTBg7mUVgnrOUshTol8ucAoF2NttfeY5MMuCT8t6U1/FV0topbBJIdJnMi55FxeMsdIzHcPJYI09\n2PzZ4nxkzNO344SAFpF+jaDoJfeoJSOubGkC2dP0ImGzYGDF5H25v3WpzWMFdUqZzaVzSnTu+SVw\nx6HnDNpiQGaoJ/WELwy98L6HkkUCevOazPqMMmpuCqJUhgnuwMHZFjbA4fDaIV7x0TipxbJeGV7p\nCq+CcxVHaoxT6I607ZGVa/BmHWSYgHdHtH3gw2c1nfPctteICad8WamQekPtP2V/8Kwqx6E1aGdx\n7HB+BasNV6stvv2Yo+uwKRKpMhyxH8fLsC3E9PzqJRju5y4sOL8wZobBQyW5TzRUXAplyXuHpBiF\nOJGK0HV3PFsbjk5BDbJ6TrfeYVY7jBH0+BlOj+EQ7WpP8+m/j12tuLr58XiKTIX4FueUVq5x7tvU\n6qje/6V4sdDcwZuPkHoDmxtE1qixqPpgBUG4w4vYplxjjWkBMSyYbi1MikRAPE6zjNm78SbaQTFp\nVpcUCixB8NkgyJ+PNFTvjeVKeNC0JU6D2E9KL9WRHSisjLy/UXkN1h7ZAC8t3kHJekDMgJdGASwj\nPAeLVobnKctYGUTLIBkseZdJogf5u0jz/OZvZKBCakPehNHgmROaWmbIiDl8v1SITlI0GpLhJHPC\nLRO8Y+U5wS/OnyRYKpmpNeuh5oogLRhK9Zn4Ot4zN+vpDt/T/Fi4ub3M/xjl9Zgw5SVe2qVlL5mP\nXCp7KgowKLrT+bWXLYO1mejZ60ERwk3usX8kcfc4VDw2MTN5pCEyZq2hVYcaZWc9X3rW8ube0NkX\nPL8+8OpQgzqOR0elgtOOq+oBzwOdv2LfOrS55cWzZ6zrjjfNGq0tpmsxvkXx7Dli9ApHx7FVDtVL\nvN2A2HBJugqtPLBaWfauxcaFWZ0YTJTfyfgzI9Jqog3ZQrmF9KgtEoN3MEivXMhMN9mOrLk4eFQM\nOI/6DsOBujIc/QqRe2y9o+la1G6w2xeoCt3xE8ztt1lbwT7/kEPbcWyObDYvCPtXHjg0He3dX2R1\n9T7GP+C6Bllfw/YFfvMcjg9wfB3CotUV3foZYi0aTzU3DKtEA96lZzGsPgrve97T2GwZGElzpjwx\neMozURYmcmfMyIRaNkQy+p4yyktLGwJoTbiOPdD0LdkGmTcIUjwfqp8f1EYyhdhnzmjcK+y8PRQw\nAi7ZgC5bFISxJs9o1OyeUUsePT08MsU814+5wpsTrAvC9pSAHfX0gN+p+kd1zim24Vmyi5YVYImf\nZH/H9S0J9cG4mhhQkz6Yq3OE+8jrmwtNnhtrl84FztU/hn+Jch1wnb4fGwpzinA+zdMtjLlsJbqQ\n8cYcnlPDUZVwaIgYPLZfFV6hfPWm5fYo3B48d27HthZutg1v2grkCuMeUCe8aWp2RvGHj/HNkeur\nG3Zy5LNbj3YddXNAqwovFqVm769Qa1jZhur4EaigsgY6rAGc0PkVq+0K3hyB4baKwWqd8fMkSq/I\nsuf6/hEnxpiepoPAZBgbxcaw9EfKBxGOqoYls13HWhxVXdMdoRJBtQN/xPgGf/8ZIh3rzXPk+S/C\nC2hzz0oP7G8/4tjes3n+VXbt99B7x/rlj6P1M7Q7UD18G1+vQVZYAbPaoWaLbw90xzfI3bdR7TBu\nD5WNB49LIVTDEULpZxyIKv2z/m9kdonM1zMmieEiyy10SC9uspBWryhGHpBcYA0PKGeezrhOHXoo\nOYtpHI7nEvp5QAFVTzotJPdOM/VW1CiQbbTX8r7zkSJUVcREjzh56XlbFjyrQVEMz0wyVHQ43aYf\nPpmATzyci/yCt/N6RCZ4zHpcuTDM8FXvBz6aMW56YyRT8uO01PeDwaKztBqPxMJGWBTwubKZKS2p\nr/wEp6mHJ7PvLpl3y9+PFcmlym3JG3vM81Me3TgtzX+WsHKDefBcxvXNlV8MC2fbpwInzzgj/dus\nV4R4CQHBmIwG8deeex6OcGw6mtYg4nk4bLje1ry0e+72DSotRsIZzYdDg/PKbgXq33C/3wJXsLoO\nWybj7fU4gzEuLk601Jsrtt3nPPgKzCYqsQbVmsrUiDsQDj5xGFW8zM0KDg3rm3tB5OACJZjNKg2Q\nSyEx1riSSMzIOwzvDIJQ0fk92j3gV1vaZo84R/P6m4i1bLpXSP0Su/sKalZo8wYvHtSDdaw3W+5v\nv017/xH3a4NZf5V2/xrZv6ZGkO5A8+rPw+o5hoqKLpxZJxrOH3UVpnmF+C7cSp9ZbYPYmIYoC67J\n/iiaueSDEiyLLHRa1EQhWlV6dYU3xPlBXwjdrPiiYJXYwuBCBTxm6hr6VnpPSxgUVoKsMeSmROWX\nKcbx9oUe45xf+qdpcJfe31x787ZEJFKVE3iT9vSdNChjkSlOY090sR/Gz0dCfqwsU4gzKcBxmzTP\nO8adZeE9/p4/W5o3XPK4yjrmYA5X12ToQlSQ6V3vhTJVEqeU26n+n4OVP5/7fmmoc5HnTiinU2lK\nz7BorjdIi33Y53GY8uLY6EhzjLMAJnUINkRr1GOoeH/TsdKOjx5qntVNuBJJWowoD7cdV+uO9zct\nh4OAHjnefYyxW1bb91F/T1c9R+oVN/aIa4/cO6HRq2D39vcqQUu4lX5TAd0td96GTfdi6RSkWmO5\nQ53H14QzCLBhff/sYOlV0kXpgkt1oVz1UBIx/aujE9QHxTkCmAa9KF135LhvWK13tMeWmo51XdGq\nwvp9tLpC6y1oQNMYwWgggLJm5w5gdoCH1XNWq2usMTjxdPIB6/tv4cwG2b2P8WEORAXwBjYG1z5H\nX3+OYMMNrvny27wNAGLiPEr0EjKaBFHvM+8t/ErWXrL4lgRA8kREhnpSyV4ZxQwSy+dC8VSa5/9h\nkj2p+mToh/BoKGWywZUL4/Q9HVmeh2RIYYikTJN3beYGtGT8McxUEj2xngZxr2Ju4uUeWF4yWWc9\njXI650ouw6H31CX+Whg9Giqe9xLG+Waepz7zydP0maEyUgiprktTwiX12UQpZBZZ7oUq80rknDLN\n6+wBz6bBmBngnW7DLJQTxt8pZXqqniVvcnnu7rRCOoXv1NjIFeGCd38C5lKfTTdZDTI8U/vZ2xyA\nYjBUWrPZCNdbz3ffGNYcse4OcUqlHo/H2RV3ztKuVlzVDxiveLZstu8h7jW+eg+lpnWez92OdeW5\nro503R0PKnjWoGFvtvoKh6dRi9Ybrrs9d1qHKajO4+qKynZ07g1aPe9lsB/RJMjlckwqp3kHLvIE\nk5cwEDqj2sy3vuZ5dRxhqRjUHQO8egPyCmsEWT3DHfewesm6OiJaB29OwpkxisHdf4y0r9i894uR\n+jnqW5rXP48zIJsXSL0O+wGvvoF583Po+llQqOJRabAS9sI47UA7MCacYBKVuZltWwqD5oM6iup0\nU0B61tNokDySeRbTcN6Qf1ZRJEIqw1zkiZRfKpVADB5bUsvpW9LMSSHluMe2KKh6jDF4NeFAXfWo\neIxUOFUE33vTA1QpqAAz8CdpUGa9Q6eDGp4VREnxZYO7aJ9OaxuUTwwZRRpRhKRmVFtUUCZZ4gut\nGD8Ngs73dWk6h1NH9MkPSE2GzgkBOZknmzP955qT0WAuzFh0U8Ql1BN5va9/XJ1mxkJ/cu4IfiaO\nZ0Kjc20cPxur32DIxZOX4rNkeCaTUnQ4qWgcNs7TJcqmoNUFaZ5vE4PnLcnrKWmbe5ALtYyZaRjX\nvQyfKsDeiIxhxqNXaoHvfdbS2AfWVjl6S2e3eDVgqqhUPQ8Hg3iL4hHTIf4NbfU87OmOXa0i7Fvl\nYNZsTM21ucO5PYfO0MoaY4TOg8Fx9M9YVXesm1cc7A1rK6zp2ONw3QOyfhHqQnCZQV5K62HAD5G8\n5XRylfQQntFlQ2/IXAymUP0UfHgWDrX2xweqqsKxwamnWu/oHr6P7w6gLU5qrFGMdHiUrvM0n/8s\nVXtPffMTsH5Oh+KMYfXiJ7Da0N5+B7oWRPB2g7l+H7n/Hp4O9Raja3y0mMKckQFbxdWKaQ4tEHKJ\neKGFaZHucJiwMizXZfYzpImVl/1LVmLQndLLxrEpfWqeMZTM+qZnnCA6Cuzi/WTJM1GRuDo19qTG\niWkJXrNXjxePqIsGho+wDWEVYFjKPJzrl/CYp+uAVUGUAZ9x3lxY5W9FwukSvXCdVWc98DHt8znd\nErPhexCwaapg3jAsKowCWeLA7EeJ5OWD0MpZIympOaIVii9VpfMLBXK0ZFQmKbgeZiKYZGaFJsUy\npzTKhorQX5AewCUExjSe5908z1JIt49SxJBghw/XoomA+rBcUD1WTFgoaUDpGEgWvhhjZutZCnsv\n4TuGsYR7WQlR9+SiPP+MbwMZaHYR/FQm8d+4+sLgEZB4rZxYjq2ybwVXvwS7pdUdrVmhNmwnU0l3\nCDqqqg7S/nhPK2uQLaIurJ4XgxeNsOHQGW7bGzpzxXZluJF7DHusNxi1iCh7nlEZQ+1e41AevMWp\n0LYeEUWwoIKJE2uDjCzlbH8Czhkynb9FIm48lMJTmFEPmUl8soMiTKOK6/Zs1zXqKzbGsn750xhp\nsA8H7OY5tr6iq7dhK/nxlvb2I9bbF5jd+yAVXsFGS8+LRa6+hj1+jLv9Fub6q2i1ResPMKt79P4T\nePZlvBMwMXTpJV5eLsOAzfc5joTRwEa9RCBJUcEsWohz8zD53wnNH5HmYJ1fpDDF61S4x6liTIUX\npXYeJ4ID/PGBut5Ek9tQmwr1Jh5AMIRHexqHmsKzQvjryMqd+len2jB9GOobew0y+pu/FDKBkE78\nyXhd56Dk5Cpe53yQ+/mJrzIzJCqJfj+TRtzHYywZQgz9Nbxbmr+jyNsvuOrrHhT94L1J9iAX6iPa\nJE9YszaM5j1Tq4Yap3sOH5PGfW0kn78O8Q/XNCge4/e45ha//RBr1xgVvLH4vm/pafK29Z+axzxX\nNpSLR1sUY2GMU1qQlsMoZcl4zjTHK1d0yQCb1jGIM0ERU2PNGi8hOlbRcGAdVE7PQ4qoAXFsVx6s\nxWzWbHRP669pbRX0gAfjDYqjNaBGwmW6LTSyo5YV69WBWvbgOozboNZysDtW+jlNe0fLBkxF13bU\nPhnz6WCQYRuZyuB29e27wH87HQ4dL4NEZpn4cbF8BXHQeVx7wG53PLQN2rZIdU1nFb3/eXxzS7V5\nHtzz208wh8/YPvsKrF5gFVycWQmDrMagONNht18G85rDq29R33yNav0M3X4N3vwc5niNr6/wErwZ\njRt0A5QURnnMAJWCsU61/VKL8pJ0atCF7skGVGazXKJEkgGTD6BwYbFifWA0Pd6zO3yL2h4Q5+iq\nFzR8FVcRvGKx0XcsFd8SO45DZIGumeC+QNEbYybCYNKurGyaF0tqalCXyajp/ZqouiSLXmmvD3or\ntKBjVA5KNEdl0CIxZNzPycU86T9Je0kmbm/2ZRwSzOo2o/48t7ox55cRJ5Sgh2pH8GYiHJNuHhp0\nqdJZXrgSDIW/+G/8IQA2f+b9LI9SibJZAepxrqNxfw7PirA1a8F4X8biIlyv/qWvc/XP/vgjw6Pp\nW6kAYcznc7hM6X7KQx3K+AhzKj+CgaQ9TxsbDqquRLHS4uWq3xcNihpBvWVtGmrxVMZzMGvW1Q2m\n+xzkJcaEhTZq4p5q73FSoWJR8XjnaVRw7opNtebF6nt096/A1XTUHPyaK3NL18HKgPgG8R3YOjBm\nZKukDJU4JvW0UT9OFx2gnVv1Q6dNB9dlSRCp8O4B6zusfU57OKDGUK1WtMc3IBtkf0uzPeLvvk2l\njur9X4Q3wf116sN9V+KDN6iKMw58Bcagm2s2tubw5tvQHFhdv4defQnz8H2ofwKiS210jzUdRlrC\nyo04m5Y3c64FafAXBsHyEv683CWT6+c68KTFGZW5xvhbyOkX88/BHbdDVfC+C/JHW8Q03Gwartcr\nfPsGcd/jY3nJg7vKtEIGV5OeCIQN4JVyW0U+IEt8k3JbWjwwxrvIF12V/Gi3Pk8u2KPXlvRZwC55\nbFFh9nliPfkybR34IbHFv/sn/wAA2z/7pQnePW1S9RNPc8YTFHj2f/sJnv/BX7wIZ0yTS8am+kjv\nZPzMwBnCduM+GCurgUZ+wkd6dozMKe3xu2VjTqhr2G1XtG2HVxAf+LfntZG3OhnjRfOmymacml/y\nBoCrf/bHZ9+f5E3KPvLeT8olHAZvcCi7NC88pVPi2XSoYtQUI3yS366awo5QG4d6cGIxQtzErhg1\n2O7I1rxm745YKrRTGnvFynds2k9oVh/iTY3xLSIWbyqMOtTHIyLDlTMYhGeblpWz7GvD1lh8u8fb\nCmvXVLKnPXrEt3h/xFQVQ0QiIa/RPpoa21/IE8y9vnxQzc2W5d7Q5O2IlxSlc28Q7lH7Ht4dqaoa\nZyuk62BzDdpw/P6/w/a9H6e+/jLhyl1BcXRV6DyjBiOGzjhEBWsFtA3EqG7YPv8G7d1HPNwe2dx8\nDVnfIw/fw1x9Jbj9fo+lxdL24m5oy5xFm7chSMp8PKbwTC7OTnkvgyVd0nhu0n54N5SbMLsm7IdD\nhNLjc7gstlMV1TZcyykGo2tkvePN59+nrg2qazo2tKvnWJ9qThNCGpmzP+So9zQHZTi2Nqb0GLe/\nzDvTHiGEtTUfEJL+70tq0cfpFCPwvfrLa5L+X0llYx8MCwuCYqRv1yxFKbSvAOqjIpJwhF/SwqN0\n/Cte8Ubh2f/1pwpeMXldvU4uhWJOien4LGMZY7prFDDSE3CmbWKGa3l6VAZBlQwIY4ayBU467AM8\nt9IShM2f+QCAr/63/9rey/c4nu92/DV/1Qccbz/j29/7iG+9XnHvrrDa4iR485P9mqN0qbEF8L3f\n/ScmeM55sYX8VC3GeN72VCafJwx3N3rSpd9zOC4b0dL/m8u4sVsfIhAmzu2nS7QNRjs6b1DCKS0q\nFVZdWNTYvcZvlL2vsMagbYd6Q2teYKrPqdtXNKsXYGw0RLo43E00RsLVdaKOpoPDEeg6DmyhXrMS\nj9EDUNEpeOdxrg1epUY4ZPTtDV6G05Vyg2chPWKzfCBgaQvmCIQB4pMw6EWhxrvwIG3kVFFc14Dv\ngvXjjqzWVxipcd2Bzns2VQ1X1/iO4P66LoTi1AzHlQmAj/VIELbxWiKlQ6o11fOvY+4+5vD626xu\nPqTWj/DHW3TznIYNx3bFFVch/p2El+kRnlIgGQFhoisO5BmhleTijEIL7zWrYmq99HSNDQ2qLc0P\nBEst3e9WzMUkIZUUgBBi9wyWZFrIMy90Alz1w3mOJjKrFQkLYRDW6w3rlWA3lrt9Dd5iVePB3eGS\nSyXeGZgi9bki74k0aTXFMXw5XvkvCXQ3WYgrCdq4fDUI96RzJCuYmymF1zTkGduSEif30cDZSRGm\nsZeOxAlohy+76AH+xH/vrx8gKYDF+Y515VhbR3t44LB/oHUOs7rBbp7jxWCV/vosh/LN3/VHQJRw\nnKNGOmX1jgf+yH3ojaGMXpLny4gwNUDyuauBXzVVm8K8DMov/eqnLSTeMatTSTLwYej/oZ5hAVpA\ns2hBHIPan3bivAcqULAKNWHlMiJhXlDD90sNwnx8XJrvMV7unKE3no4YjEUDjA8mkOzjmUZ9lnAP\nsIq+iifhqcSwfOewes+BChGDx2M9GN2j7g26vsaYPQeNZpjvEPEhclS9pPKvqNtXdNVLVCpA8FFv\nGRV88CtB4HWzZa3CutrTscFrTeOVlVlj/X247FeVzjWsIk953KDTyfg3yaHxu4V05gzdkSiQXkQF\nARQ/g4WYGYr9R3pYEhUhYtHuSF1VaHWNa/doXeOArrnHisHc/Bjr938Jrr3lcP8ZpElto/2FtEWF\nfYPpmTwI5DX19Y+xXq85vvkWnbnGdp/i3QERjdaN7RVrzr+SNSS31HoLN7U9a24BIz6cX9SRJHNe\nMpUf5e2tmSA4emGkZUXFxLkMQmZuwM97WYr32jtuqc1hItpEBgi/b56/CArSGExVxzx9LTFrpGBu\n5UYBqozpkbPMlCbjfigX2sykzLtJnsxSOu95aMHPPWUjPYjejWZ5crzS6tywrDwIq83K8PLZLhxW\nZIW6UmrTIu4N2nyOUUXFxzI2KHsZIFK0P42FBD/jhfjXMB3skvDPaTbjzeRwhjoH0vRfNSipcJ6l\nxN9ZKZNkR4KRsBorhGmfJi8mZMl9zbBoL/qZqFeMEaw1MazuM4Nl8ERPhV2LerPxspzvvNJ7TJqO\nUe1ZTcRgjM3GmzLIhdNtmbZBSlmtSqWGTa1crZVtdURcS6ebYDhjUPaoe0DlJtwj6A2wQ4yitDg0\nyGpgX99g8dj2FeAwYqi8YAkRvVy+egUfjU9Dhyp409Gx4uCfA6vQzvYY2ppiMclY0MQNTLeRnemG\n8wfJzxKPjJHjoMue56zdu+BCr51FoTvssSZsjPdtizqlff3zGGBz8yG2qsDUrF9+9f9P238+y7Ij\nB57gzwFEpDrqiqerilUU3WRPj7XN7P+/n9ZsbXb3w2yvTQ+bXWSxWHz1xFVHZmYIwPcDgAhEZOQ5\n97F78N65mRkCwuFwBYc74eF7tD0gNgJrDEJTzKBICoQ9QsAgWGMJRjDb19SXX9I8PdJ0Htm/gy4q\nDEH8RHJ4GSDTR8vjPiUBHxfuKZMTsYmxZGiVjiTTZ08vzxdm/huns+wBmSGd8NZR4swLzxiLMW7i\nOp6ZXUj6vapntdml4w8eFTeV62cNTfXMJJykv/x9XBBzOE0ZeG5HIJk8x/fyGAd+kfFNsrhSOLnk\nOs4Qt4nQU9KbDFyZja3UtiZMOvc9jVUVZwOvLmtq43EmOhVUFlZOqKRLB5P3SddLlpST84unMJ7A\nuSTysz4ulQlBWShnyX8hbMRzgZnJzJjx0KeZRl9eSTRi2JuCMcAFMmqdk7eEfB4x5BwZIjhn05ZT\n0mqS5aYUpE7G8SyjG5/La2M6iinOLMHypbrnfcl1j69lwSJqyBl/yz6cG8+S0DuXZWKSXGjCitbX\nBFE6IJgajKJ6xLW3BFnj6zWGDh86YI1KDRpSvlaPVRBjOdY3iBzB35O3PKM52iFJ9dRkGcjzbYge\n5cYYfOjxzR3B1Vzs1kjoIBjERItIHGPcFjNihlU+le2eh/uL5wSXkGX21EwmnelHg7SZkEMEfEBC\ndK/vuyNGAitnWNcXUF8STAxsLfRQX2J3X9Lf/yvSexw21l4Q/3kPSsbYJwnGYqmqG9bX3xBE6O+/\nR/c/YowgpkLCyMyWyij9j+MaBKjh3ohckjQENQUMxMQ9H2PGRV6AqXwu/+Wzh4nqL3SyYITD++PM\nyPAMkz+I5s4QwqLkmX9HRsng5GBN1EqsjZb00PfpsHw2TU1JlJ4hLKfksOjzOaSV587uLRdjDM66\nIV/dUrvPEUCZ4Nlyi1I8Kyd9zCW2bEzg5mLFq4saKx2VBOrEBK01OGtx4rH+Dqs+Wj7oT5jq2N5C\nZwbGP+3vlGg+P/7J98XxTCs+rfY0KlKGwlmaNDdDTzpfrotTBoQkDRQTLeHO4aqqaLM4uvECs1vE\n14V9vuWOPl/Pc+0vCSDncXOMwiuDhHZGgDk31lJLJ3sWK8Ernfc4CQS1UcgIHba5JZgLtLpA1WL1\nSE8dTdyWeF44OxcKxGCkNaH+ilV/D/6ezoSUID56UCuks8eSvEYFSx/73HrYf0KCx26/4XJ3iYQ+\nMsJkcRhOC5bZNGBxvZwrn6UJnsDthKKWf7kjS4bCVIdvITR0QfH7O6yAvfkN3tWIBiq7AmsQaoxA\ndfElxla09z/i075BZoTCrH3JIIhu/ZVRkIBPjEfshuryN+j2hub+B3zXg1rscwxfiIGdB4Y2DHJ8\nLkmsWlzLpp/IIqbwGhfkIB6kCyZTq+GmJAZY2r1PJb1Yx6h5m1EDGgiQomlPIZtojTHDX6wrmZCE\nad25L0qM2Ze0reD7UTMrxoWMZolwRrsotacMuxJ+J/NQvoogSeWb9nX63qDhTFfIBIa55D2yc4xu\nqkeO14FB+0xTdTLOiA+BzbrizasdTjoqE3BOqGtDVVsq53DG4IyyosHpE4F0FnboZ2kSTv3OcJPp\nSpzAJH9fGNvcNBhNt1NYTEZ+hqgOwpQBayUFbxnsIQhmAJBkKT7DtdgaiP3NIQwz8mZcjoyO2bwp\nIMbSB0/b9YQA1tohOsxIH8ppWV7v5do6sUQUGl5p9XlZWTi9Pm9n+R1JJub8zni9/PscTfY5L+tY\nZUBNTwhKr4K1xHR0vkWaO7BX+HpHUHAI0vd0bPEmYF0VfU9DiNnmM70goFSE+htsf49t93gEI2X+\nSIOYyAS9OioEmif80w+IFczFa3oM4moMLSHsiTtjpsAdyIG/zZKu8Ez5RUywoB+Ti0EmxomBSJyY\nGNPLwTfsH5/49Okjx/1HnHFYt0Z8hxoXyXAyrRiiJCI3vyb0T4T9R0RcTLQ8LAYZnD8MRG8kkgYT\nSHsGDjUhwsttCC56nBorYMA/N+j0JeOOTm+MjAodmMNsyBMNDIqAJtlElICbJaRRkp6a8nKFg8Y1\nmJi0kEfKBRIRUzWgQUdT8QnzS2YJMVHyy+5Gkj0+oxdkyKGptMdKFjWKnZ6BcRfMIgkIxQDITh1G\nigOuTLf1TwkGDA5BQ11jnQO8JGuwccH7UDoTTE1p8yv5+pyYjFaA4YnUr+QUoCBpUcb6TjUHMYbX\n1zu2qxgZwzlL5Uz6dFROqCwxWoYRatlHZyOm83ky8oxLBaINmo+Mgknu15KpbM5Yl4mzTpnPBG65\nLrASte9FtjugYJptKXFXx/kta9eSTC0Iqxk/hZhXtPPpXYOzsa3hTGcJNyQ5bmX8TzvVOvZwtMKM\nQylNnsNoPkOLe5YBLZSpZWZBUJnh/+l7nDDtSZ+GsSdGEixO6zgHRqiqGgkW2zwg7hJ166QMOIw0\neO3xKe0StiKCugfRaA5NWXiCCr2toH5D3e5RfwCpEhE0KbpPMseK0B0f6Z7eIasdbvMGVRM1P7uh\ncjW+B0mONuO4NRrDNc3fC34AZXk5Ykz5O14ckWXGCFJf4kfJGAuCpSp0vgMcIj3WK1SC6CN9v8ea\nDVZiWBxMSFqEpTIW9+pbDh//BVtf4laryOEU1BokeXMENUjSZIJaSBEK4vI3+Oae7v7PSPszq9rQ\nBYOo4CTGv3sZHvmcTRzkKKBriqozJRLTbzOCciLeZUY3LsYJ2RMzIH922S8gC4CRnOx0jOE4PFcw\nCYr3x0Uy3+tI9coYpiqgEe01REnbOlTt2JOJEFBCoFyw+dkRBjLBq7EM/SnHJMtE54TgFpdLRj/0\nKXk0TlhipJ2LZdAnJO9gxOzV2Yw0aJJGJu3ktleV5fX1DicNwRrUGtQZCBacxAhGQZLLgGCtR/XI\nk67J4sGE9GWYZbNSMfyB8b1AdE9wYdZnPcFRsrQU38qWmWGeknOVBsLCcipnKLdYmirzNWsdqj4F\nGT9lOnkyRsat6EADsgdtjItvjAwnUgVBiwTBA1/XGauZoFKidkWbE9hM1tcps3tJQ5u0NGiu+fcU\nZ8e5Gues7MNSfcMT8z3Kgorn9RskpCMISudbmsN7ZPsFVJtIl/oYks5qiAxQHCF4hAqLEtojptpg\niBG9jLoYJUYVNRv6Wln1n+iwqLUYYnqkoAYxhmb/gHSPuPVrzPo1XqNQFcTjcVhnaLsDTkOixHMx\nbOnH8+UXHZHISDJIkAUo87QkOlg4r8yKKOieqras3Y7j4xOuuompM473WFsTWoPdrCA4xDh66bAB\nqC+pLr/iePsHwtt/T20tMYbl6HQgEl35PZrsy9GZpj/8RH/4hB4+UWmD/eKv6aofkE8/I7aOC2gq\nUM3wapSaxyvlBIwMcDC+lasrVzlbHBn5pKDGuZbBJ3QIClxKe2bybKYPmjMuF23JsHDHvwiurCGV\nzC/fK1mDoIGJqTLWaRBn0c4W4oMOPRWRkwPTcZGPz2qBSwMRYVyYo2dtYvJFn55H9OVzXVkgywwQ\nBufOCXzH+Sua0UIT0sTsRPFaOClkQalQ/XP/ry9XXG1r+uOBykps2ApYwAviYg9Mr2gIWAHkiWPY\nDPuuGSuGPs2I5ryM2nh8J2iJF6NQlE2K5fgHhv/MflipcUsBs3y8pnxH0/o8nYsoHJuB4kuSog3Z\nRSZritETcMxtipZWkcQ0RLEu5r6LMSyFEEasyv1U1TzIcX5JolYWLNJ6yILvYFrXBQHiBUeYJXx8\n7vl0tWCE43ouYblc3UjMRJ7TQFP/M35A1LI68M2RjktcfY0Lls4ExMZ8fi480coaNbAynhujPEhA\n+wN0DtUu+Vuswa4IWMDh6w2maZD2I1K/Rq3Qq1Cp4h9/Qv0ntptX+OqKPq2bMAjAK6rasX9skKBk\n63rkOYUwRPot52FdlmeZ4GSxZQBRNjgF5fhjLqWUzynt4QFVqNwFj+GOuu8IXvBmja2vMH2DfPwT\n2Bo2b5F6BXZN8C3V9i3aHunvfqC6+XUMySOeoAHBgSheAhIEQsPh8BE93FEBVfDY3Rvc1bdotcXd\nv8MTTXU+h/YpR1J+lelFGUTIkhmWRxlKhlPCYsply3rjQksLM4SJwDH2YyrZTSOhKKcH0zPDnL43\nSukvSalCGZhIRLAmupr7EBdE9HxcGB6nzGzcnynvTrWxUiJfgtyA+Asodio5j4R6TrRG7XNkFHO8\nnWJEfFcTIxEEJ/GQfdYupox7LAb44vUVzipqBe8DxirWx8j9wShqQVM8Wy9gjVKblqoL+PE0bMaU\n1MGMQ6WAlMhByCJWHkh+pjwjCpMIPTLWrQXTz0wyWwQm81I8M2GoOgpgU5joHMxRcNRxdrz3ZJO6\npv+eO/asaZ3FtrIzlKDBk+NMDkT+5N2CGQ6Ip0PEOwrB4QSUCcKnGtx8zL+sTC0Xp4ywBOA5nM/v\nl0LPOQuKJNO0SSY8MZaL3RWhMfTtE96sMOKIPvcBocHbSyob+GL7RPtoEbGoW6HrN6jvCHrEaAPt\nMYa6NAZjVoi7iJrh4SOsX1NbR/PwDtM9UV19EUMghg5hRaAn+6V7NdTVCtED0WpnJyMot5G0XNIv\nlOc1wQJnB5quaR9IRolpXIMyPpafmRC/NCtNS98d6SvFWEO13hCOn9D2J+rVCrfeoWYTz0wdf0b2\nQnA1srvBmx319Td0739Pt/+J6uLrYbFqCqLbtx3d00/Y9hG32iK7V0hzi6leIbuv6UQAH6VriR57\noPns+SCIlqMZNYtI9E8BpYMr9yh/j+bSqemkkNIKpNaBWhUax2CinJ6HCfnQrE6nKXvPTQjl9InZ\nHkH+nYhQIur5/mSUhZZjjYlBtEOedzOcaxtbYrJC5+ajso3SKUUnzxb15PsTRrrUv6wVFFrKZCwF\nPEt4pNmQEvzp94gTSSBITMQgGFfhQ6Dv415UTDlVEE1VVuuam+st+GN07TYhZkixgBVULSJxe6RL\nZmIjgrPKOrS0YVv0vhAyF+TNPPapuDWH07g2TdbY9RQ2BTIkPvG85lnWP7k29EFO+itI1HpLJmJm\nz+UjF/PhpsnJohoKPoAxjqqKMabyGilqH8Y0XRqFAxXj2hi0+jlhLTpikOgbscAIP7eIyMRb+/T+\ns2/POnWujnHuyzHmOnwyJXsDzcFzc7GlPX4k2B0djqNuMeKiGdNYvlofOXRrHvsKgyX4JrVjMWaH\nyBXB9fjQE0KH+APi0163P9A+fU/wMVNQdfVr1DpUH9HQI7bHqgN6AuBRxNbAI71vcXY7WiAGAOXw\nlyNcXmKEnxU79BRvpZCqprpP+aYwRggYCXlP3z5RGYPSIaqsrr9Dtm85PN3xtG/Ybr6m2r6l5yss\nIL5H/BPh/h0i75H6mur6Ww63P2CrLWazgyD0h7voOOMbVtvXyOUX9Mc75HhPdfEtfnWJ0lOJiaGA\nUjxMyc43xRKYj6nciJ5uWI9Eh2xewhQEdpSGGaSVaQNSCBQjAGWAbmHwGVvVuAcysob4mUMeTRjg\nQM8SGSqzOmQnhGKOxjxw8/4U/dAYs6H3SUCYj23y7tjefIGPDKhoZ0ZI0oOjoPWM5LvUhuTFQbln\np8lENmWQQq48E9x5XakW1UiwkKi1Z01pYcmpKutVxWZVo00DvbByFR6PV4t6g4Y43wYHArb3qFEq\nEWrTIn5bdAKmkdGj9JZN6hOF4bQ3E7g4m3B1Mg8RxmFhHuZm08UWCsHjlEeXos60zNsQpvOaXx9k\nzWJMkoSvEAJN2+G9wxiHcxZt4wv5DKGQzfTFCs9dSsg1wafykWX562Q0S4LAs2brgmGOWnr+TRrb\nyKxKc/6Uoc3rzT0f2y+Z3rjnSww9KYISsCrsm5YP9TXXu0DXHqkry07v6TuPquHLTUtQz6fjDmcP\nSAUERdUmiSSg6gePcmMUozUiRxzRA1Ufb0EFs31DCC1WPKoer1EwjDkiHaIexGOkwhrwwUeP/oTw\nhfyW5njEofOEKZYX9wRHiT4jn0YPwWKy8sa8wmQvcFhQJGOGdvgQ8P2Ry8omjm3ArfDaUK1eYVaO\np7s/ssNitheR2COI22Evt6jf0x9v0ccDxt/SvruHy28wvsVoy3r3FWZ7g+96mtvvo8fdq7+gMxsE\njxgXQ/CgBO/jzvlUTh16n2MhxnISb2OEkIzLKe8zRI0qI93IPKfSZax31HwyMk8ZyiiUj4Q2m4pS\nxdEzUZZCZceFH9KeZ+yDGdob9+FmEnB+VUfPO00M0sYAjBBieksNCk4xahml6ZFpL1GNUqvQNIa5\nJ9vk+RljlwLm58pcY5QU9iz4NGdp2k/qGASTeF8z9ZPR83OE19hGKcyUzFAF1ivHZuVoVSAYghcO\nT088fPpEu3/C+55eoKosVbXGOkmRQcAFhW5EiEyrc0dFi0Gkvo57dOOgsnWjNKv5MFoYYMr0l/aw\ngonzbRaeWST8Y2UTOM/pUml6Heb6pLqlGc9SdhIEjND0PTFIPzgHtIAYYgKw0VQWl8C47ktBbBQY\n0/dQ7vOfsvEluOXvS+bIJYZ3bk9xviampn2QwZt2qtkVSvxJiW0W1EIz2zAJf220SgTPg79g7QL7\nY4upX3FVvaeqD6xs4PuHV3gMFRXWGqQ/YsN9hHUIkPa2gxG8Ct5WqF7juwPCI9X2is16SxcqWjV0\n/REJh5hE3Rt6qVCziQqXWtTWbCrLU9cgm7yVkRhe4oQpV8bw71n/lFQ+zxw6Q7w5si81kknrYNdX\nQbBou0e6DruzdH2IYYzaA3T3dN09u81r3GqNPv2J9rGnrl8jVRWlAwkYW2HqFUGV0HZI+wH/80+s\nX/8t61e/xdsNx8M9PP4Zd/EFsv0S1YClR8UkN3afgKYMh9K1GJdkIj0dzal5Y5S+piAZn18E63Bd\nZgg+IRNn3js1V4qMSU4ycxmkVo1nA0vHlLKfeSHEseVZmzQ69ifRoOzwokI056ljZKgljOJvOUdY\nZ1rFLzEfLT01tDpYHfLVkerFdTISvuzFPMPwk/onQg6nczvuL6ZKC+3BirBZVVSVpTlY2mPLz3/8\nF/787mc+fHzHoelRt8LZFTsaXl2t2Vzt2F5dgDXULh6pOKG8cnqp7M/kTmKAMO4hLhHecmxLxBck\nB/8/W/4t+2DLDHTeiCy0O/Ypa+giMWyamOx7pOl8capitn4iHJggwQkjywuqeHBplJ8z9rmmt5w9\n4vn38/yNczncLWiRjmM728fEQCV9T45GAVD1oIFWweslV9Udx/4OVymras2n/Zqqe0ewhtqbqM+o\nj2HPEILZEipLR2RgQQImgDSf2LpbglvxZN7SWseF3CKd0MpbJNyz5o5Dr2h/wIZ9FHXMih4PYuNZ\nQQ1kT45yIQwRvGR6/Vz5PHPoALglSWxsZXECR9oZtbD2gIQWV23xKlzuKlYmsPdQr99g1m+oN29B\nA08Pf6LplWrzhsqtsSJ07YHu6QOVb1nd/IaL1Zqn+x9QlO7+J7rmEyb0rL74a/zqDRDzDAoGo4JP\nkdhjlPGAsSmCi4COQcmLsU2Zx1yyy0i3xAx/qUnk3DMnQkfqW2m2HEwjQx3pHwUxZjJt0/5PNdxJ\nW0LKWFnMfRYWNMQzhlhUXaozTOobiYxh1FEzIS4k6pnZbVFyLussrk0gNdFGZGizNAmdmLrKukve\nvQCPl5j0qK3O5l2V2lmMGuh6bv/0Pb//wz9x1xyorMXWjkO/pT88sbVPPPWP+OaAE8PmZkeVN7ue\nk+yL8ZT9yDQ7g6Ds/i9lVuOcjZr453g6llri0vNLWqROZ2ZS56kgmk2diobo9CXGRAFbQ2SCMprs\nIyzGugbaVgh8z5kVpzfgOSJ7Tmg6d23+bmaYp+MuHaLmdPllwWa4NmGYUfxTiObIEOI6xxJCx1Fu\nuKg/cbNq+Of3HR7w1QVVZVnXezZ2S+9bOnWYaouqQelToCvFhoA277mwj2B2HHlNwNAEEPOajfmA\n7z21FdQbTL0GjefGbXNP8Pf4Q0dFGzd+U8KEDIVhGgsIKKc5NuflM1Ip5SbKzwKo6fpJM3khhnRQ\nVUCM0HdPrNcWW9cc9oJdr9GLrwgf/oRqTzjc0ro1tt6wvfkd3dNHmg//iF+/xvdPuODZbl4Rrn+L\ntRWWA9Xrt/Qf/p7m2FBfvEXshv54jzkcYH2BrC5QE6MwGlVQS1BP8DGo6ygjR5PiS6ShXBAjYSzJ\n0PMIfo6wnmV+C1JqYiWUCD9lELkfEe65/tNF+cJohzrTYpSAsdkTLyWzNSalByiY5FByRghTEJYS\nVlOGOAx3JnRM92hkmbAOmvy0H9m8POQjyPQuS9L6OXO+gPvz+Sq+T4mNwVpBjefp7hP/+tMtjz18\n8fYt1jk0OP74px+w4ZaLC8f+qUO7B5yt2FyuiYfInzm8OIxZJ5eFEScGTaYYwznm9ByjN7N2fkl5\njiHMy+iUxsnknBMux+USTcnWuXgeP8QUQKLReU5mdelElSj6qHF/DDJOkhjpnEM+M47P1uzGcZyO\na05r8p/MPk8157lF4HS+y/sZ3gZMDHON+njVGISON5dK120R29K0IOrxrSKbNZfuAOHARu/pvdLJ\nFkuF4kE7wuGWN1eett/ypG8BB9IjxtAFxckVl/KOfVdTi8V1j/iwAm3j/K2/AAtb/cDDu7vo0+Ec\nktd2IeCUEHppBn5hKqUCkAtScwlkytuJaIcQ8N2B68sVYhyh3xPsNaHa4Y2l3rylTnmpQvsjqlWM\nJ9d1aPMn7OaG6u1fE6xF1FL1H2il5vD4AVFwKHb3DbgVEJBmj7a3aHMfr60uMHYzBG1W1RR0xoyE\nc8JtpuMaEXA+1rhgRLKH5ecxwDlTOqdJxxZkJslLWtTjQydMrqjuOQI0bKxTamwFDDKRSARjjB4X\ngxWEtJcQ3dSXnNDzIl6SWMvNeUl7kLO3Z5rbfEz5mYlzisCYdmd0eRqFttJx43nJeeAfMmOGs7dL\nFlQei4lbSoFKDc3TAbm8Qh4+8emuY7WquNz1XFwoNVdUVriyga7vaPcNISjBkRw/xvZk2mCpKJaj\nGOcuqUAnGpdOKzrdd5rC2Vk7xJwdSPAzWt7YznkN8JyGfVrvcv1KGARtlehDEAScc1hjh7FHwaj0\nFh4Ft0ETGrxNY7+8TtfOIhOMN88KQfMxfR6jW5qr8+8twWdk8C/BNsFBinGaCmsMvSrRmRC+vjzS\nHFt+Pmyod1twew5hBwHa5kDrHH0wuD6wDvdYc08rl0iwdM0H3l5XUQPUXdTi9IBTj9AhvqcTA3aF\n4TF6ndsLfHWJUaUzMUqVV0WqLbg7QoinDyNdGp0EYwSzNOFLssGsfLY5dATyVDqbSlWnr+tA+AxB\nPU4P7GrHXjYYe4+rdqiCD22sa7WF+hJ/v8c//Ymq3rHdbpDqFff7B8L7P7J+9VtkZTGHPU+PH2OY\npjf/kfbwE93tn6nf/gUWQ7+5RDYXmK5Dw4Hu+Anp3mHrG0y9xphkU7Ym5hI08wEsgCBdPGEmkq8/\nD9EBkoVEN57jW0Di2SyKxFM6A1Er7s4XxS8xd8Xu64nWOfQj0xGR6BiDIibtZygMJ7Bmwxg00pMT\nWiNRHxarjofnX+zvc88V2isURGwYZ3mAJBRaUerz0P+CcS41dzpl8fIkYkwkLpGwCCvnsLc/o21L\nZ3boscX4O46HI099Q28cO2txBkxtUrQM6Cfq6nzxFQu+HOlESBi/zPcClwjzovkOYgi6fIY1Pzcw\nmBHeSzKyzNp+yby8xAzGukumkZ9RIHA8dslL3uCqcZ0IEb9kAitlcKrBpBCLSkj4ICVSaIHP877L\nWN0cjkuw/dy973PPnlpV5t/zby0+z7YyVmpAQ0iZZEDUUyF8c/nEU6hon4TAmsduzUZ61vLE3l3j\n7A3B9wRRGrmglxXS36LNj9Ae2e0cVq+4e+yxegsSCBI9eIOsCbZCEBoEY66R7s84FAnRHGtT/FSj\nFmTD2lQc+h6tY25CGXh4FmJG/vff5xizAKwTTW+iIU1j/BEgJcYgBoDucNKx2qy536/ouw78I765\nR73Q9p5w/y9o8Ky2r1l/8T+h1Sq+396yC8rx4/c87j9w8eYth8f3dOuv2Fx9TeiP2NWOcHyH//RH\n/MXrGJIuaSaigdVqh9oD4fgD/ukejvfYzQ34HqpqkPgnYyz5/mTBlTCID47S5akkXRIAVYasBpIO\ngo7wncI2liK6po7TPNzWkZl8jlQ+n7/JPJ4j9iWD0Mj4jLEEo5RJZmdsOb0/P0JRVFiMOzf/nKnu\nXJkIADPiqQvXzsEhfn+xubHdsp3BFJ3mZ6gwXuyN5+Kbr/nqw5/p1fPjXrjgET02XIuF1QYEOvG4\nquL1t19gK0cXYoi6bJMrzd65emb4MFoORiHqOTjMGdQ52GQvTinGW9LXkuwuvb9U93Nm2VMmMN96\niUxMNZ9jhN6HeJZZY/jEMT5oYnZapHwSHcYyYkv23p6w22fhsjgu9OzY5hrfc4LIkva+NF/TecrX\nRrgtaZLTCzEodUyP1hMj9ghfbY70Pdwda6xCZx0hKI/2ho19YNfesveXbGyPEwE5Ri2yi2nWNus1\noRIOxxbE0lVv6G10UuxRLDH6cA+gAa8VG7vG9Heo2dHbJEJLjEzVGqVeWR6bA06vEMleonGOh3jG\nKSJWeCFC9mcxwUWp8ETjGAmbpH+0nAWB4BsO+z0P9YrjcY8NPaFTnt7/V6Q5YHjErXZU67d4V9O3\nnzC90KtiVbBujbt+S/f+jzz+9IH15ktqWdEfPhEXh8Osv6L79EM8l7K+igtEQIiqOm6H7DbY8Jpw\n+wkVh3XVeSI5/7mAmJ9DsLMHmEj0XIvhTCNBiYxNxqDap9BmIC0ziSebcpaIWv58aS/m3JjmPZDc\nrAZ830Pr6YISUgCF3B2dCwTp2lRGm9Sa2h9an/V1Seg4JSq5jHEiXypzojS9VjKWaFo9PYCyrHmX\nHrFxgYo1GLHUleXrv/07dl9/4Jv7R1a+4dg80YeQjh4pfejpOo/drsGawV29lHI5wbf5fGVP2PHu\nL9FAPqfM65Py88x6WDLxzWH4+XuHSs4cEBeGQIgOHcGHxATzQXwY9qdLmM1V1iwHCqNJbaZJTU3i\nxWcxVC3ePFfmAsBS/S+9N3eWYRjetM+fU08CHxil6z3q4IvVEVNd8OPjjrXf44Og4nHGQ3eEoNTW\ng/8Zh8eFQNMp9A0SYL3eEewa7y4geCp5YB0+8tRXqFyAqZBkJRRivGcrIOaCTS10/S2H8AbnHCFY\nUI8Pjk1VIYcmxSQlHp8QH53PKFaKUKzF5fIiE/xc89rSRvaQ6kbjfd8e6buWYF6Deox6xPRsKkvv\nXlFfvaGuL2DzNVYNYqMZqFZADN3+FtM8sPvuP+HqG/rjDwT1VBe/TtmMhcp4zPoS/+GP6NWvoN5h\n1KMCTm1UmoInhCZJa/H8ihOXTLfzsS8v0HMwKksZP3HIZ6fpkLWOxNyYdOQAYTj0nJ9VMDm6fpra\n5PQW13BJ6WRpYTzP/D5Xy4qpS+KxSmtA+zY6GYllHr4oe2yV6BBjs86JRx7n0oItiU6ZZ2JZmj7p\n89j8lO1O3ol3InwMeU/3lDJO+5PrGe7M+yAxb7YSDwlvwntWXA4pkawYLi+uWO1WhGbPur+g6VuC\nBkLXor2naVoOTcOmXo+mvkVhdJCDUo9PhYp8dOAls9zcclGWF7WIM9dfqud5c+Hc3X+xyfTOKPgY\nMTjnqJyLyVaNBy8DnCRxOdUsrhS2mNx2eYg0c8VxFJOPeHfcd879mc7G8piX6Ou5/dP591KDzBam\naR9fXtuT+RFJMWstgmNTOy43hp/ulSo8UoUHQlAqOaBYglQ0Dhq5YF23WH1HAJrDPduLV6xWNZ41\nvb3Ai0np7F5R2Z5NOIL/SO9rWrNGbZ0SGXg80OPoxVJZxbef8LxJKZoMXRC2dU1FZLSBgBET6Xc+\ne54nQeFZxOEXZpE4+xySFlp6RyMDVElO84mZhLalEsFWlxy7nxARXLUlmBrtbex/e0DXRzA7CIqR\nFAXi/l+x3YHt9W8I6x3iwW7+Enn4ifb977HXX+PW1+DBbq7pd1/Q3P6Z9du/RE1IB7ljpINgNCX2\nVYxxMUrCCwmoljSr+e/59dI8WZ4FIsFDRApCfXrEPGvSZRqYcQEYJEm2o0IZJnUII0GbL7Dn5na+\nZxNNQ2mWDThnqIjBBLwaxGdTakzDNJzTSf9GIXy8Pl+boxOJLODrafCAlxhh/lUe2Fi2ZsT6k9hf\nGA3nemQonv2MokpNIoGqSPeI9p6cdUSBIB7jJQVHtzH1jApqDN4opnJsjY1zGHQgpwLD1u1InDXN\nzzj4EY9GvIXzwQimcFmC1Xm8p8Tj/8HaZizP9HnwiBlD9kVri8U5G49ChX7QTodA+ZnBJUDm2KQ6\njKG8zlySmkoelJaOsctxmZ8KIJ8rQJwr5wXdJcHs8+dCg6b9NQsYfBv408cWsxVEary5p6tu6N0F\nnVeMs4j2SCD6eHCJ2vcQPBunNGaNl4toCdE+LS1LK47OXFCZHS7cse7v6fsab7Z4W2MsaO8I2tOz\noqoU7T4S6jdUAkYDznXUtkXliSA7DAavimJAfdr7zYEUnh/3Z2WWTzTw7P3TGwUDLrI9h+7AqnKI\nW6N9j3XrmKhRa9z6BrP+Eq7+EpVtMqkBTcPx/e+pjVB98Vf41SaGqbIxVJK9/o765mvaT//K8ek2\n5gjEsLr6GuOE/vZPGGqCGLyJHpyWaP5Ur+ms26l0NSe8JSpNn9FBuyseGAmxBrz3SepMufpEkpt/\n/COkTXmRwTknL0YxObffmEl6PNReRFtZ6CfDIhxvfC7zK8eaDHppThUjSlVZ6sphrE3rvCQDicmT\nEbFkMp9Zhj6UL8oAC9XlORNJZuUleBS/R6IxzZ1Y9n+s5flVdLIOxNDH7GYogd3Fljdvd/HgttGY\nLUIUa4TWa4xjYixdGzMeWImCgbg4/yceiScLMv+WsbuL8zw+oxOYzmA07CM+T7iXhKvheXRYG9Pr\nZ7q1WDfF0M7NxejJmev3QWMKHmupqirOQjadSI73ozOczMQyjnsE8Sjgz1FibrKPufbimVzVeGZR\nZmvq38oAXzKZnv5m1uHn1368b5K25QnG0KrSqyG4S7CG0Du826Aq1KJI8IgK3kaa5NVhxWG7I43W\nqLkm2Oxw5gAbrYIp0U2nwlHe0FVfYCpLbT5RhffQPNAZQ0MMbXkwr2Ky6eYTjQZ6HF43hB76LkR6\nKD2CR8QPQllkPzIIR+fKs0xwajaaEprpos/rbiQ9mkyhKaclSsC3T2zWK1osGhrWl1/i1iv6w3uM\ns6jEiPrWWEJQjg/vON7/kdXlW6qb32EwOUEYGaHRgGyu2XzxW2jfcbz9E6H3GCOsrn9F6A/0+0+A\nYmMk0qQvReHRmiqm+ZAl2/wUVCUiz73cxJi0ACKzCBo9zFQVMRJdtYl/+Twi6azdFFdlmMQMV4Uo\n5SStzGQqn/500LpjJUZiDEDIzDExzpKpz/s/m9P5/Ob9MGOS56K1WEtSQ4kEIGk+Y5/iHBlhEs/0\nubWYCd5AhlVhMC6WmkhO/ltIvyholGZNHo+M8Bywc96B4ihF8Ur6G5nlsybQAo4mMf+RXnbsD0eO\nfQyyLYSIK+rp2p4P7x/4cPvEw9MxSuESSYYGz92hIR9CybgQMmwzwYbioL8MWuLyvDKMc2T8C4w8\nQ/RzNMfZ/SiImGeZ5GQ+mPZ10lYezCDljanChhqiqQExFmMsjfe0IabJts5BThI9NJoE0KKWEl/i\nWgqkoICDFjkKEFoIfbEYkaSh6wDXcme4hM0iDF9gUM+VZe37vAB31rQ90KRR8KWPTMZqzOenErc+\nog9DzH4iIbo/ruqYINpWG4QnAk2sQxxGTbQISoh7d6lfAU+HoZELWvsW43Zs3ZGtfsAFTyVAaPH1\nF4gJVO0doTe0ukOMofcBTMohOeQ1HccyWnHOlxc1waXvyw+nRgePqgKZTUC1I3RH3HqN94r4I7Ld\nYS6/xVqBfo9gMQa6/kD/8Z+hfWD1+neY3VvU96iNLCwGvLaUe0W2vmB789fU1rP/8A+07QPG1dQ3\nvyI8/CumPZIPbRog9D1BA52WGsszSLpg0hgXbXReyHRaNV0Tk+I/JmI9EShH/0FNwoogGFVMiB5O\nJqZlHhf9RNuReHaswOeo1WYzqSH/N45Liu+/cI5FBgk3R7oXE3M1xvOBJhGb89vQY/0LxG7yIBMG\nlr2LZfgrHizIad4Izx8RuDoQ6YHgnzQ4agHnYbBkfjr3qKYN+jjHXQdit/z+Dz/z8+2RCsGqQ4yw\n260IAfaPPVfXayRFN0IMjw89//j7T9zfN3HPo2B6Y+3TPo3jzPg6fo4wi5+lIDTX2saW8r0E4V9A\nrJdwa+hfoc0uBR2f1VRWuqjdj+OAru/xPu3Ha8AZBmZmBhgxFSQndZTCVmkJmwmNpQA20dQHA9iJ\nwPzsKM8JArP7n/PuOSteFKLN8txkmqPpu0SHFURxeqSXmsEwbw0EMIEY9DrsWXOHGI+6Cmtfse7e\nI32Lmh6VgEdj8lxN63mmcXs1tLrlYN+C3bHZONbSYPs7tL9HWVP3R7R9T9+3WBPDqslgdUnh3ijx\nOV89X/6H7AnGUnhIDpeis4logK6hCnts/YrWxzx0VXVF0B6t1nTHj8j6hlaV7uF7Nru3mMuvIqH1\ngkYlLnH78VB6lrqzcXD16i9x+w88fvwDevkr1hdvMJdfcfz4L6y/+mswUVpw2rBad2zXDU48PdOF\nCqXJaFqyk8swTE3HMNJkmsExZFyYOWJHjN4yysCl5JJkSLJCRZI2M6PNY5TMACVXzphHZuj3lOBL\nQTyyhvM5Tj7ZaywyEjPA3vuAJeCpCJnRZu6TOX3+yOPP9Q9SfeF/N2h/BQGK3JCpFjhK2lNLBeSj\nGPnROYPQvHk6fStDrYDdtN78yuJeaXF9gFnqSy5t02CkovEe6g2BHkwfo2p0cHOzpdkohHQ4G0VN\nzPK9skoXWrwtgx3rQIxy38d+l6M+70zyHFGejC/j4sL9/H1e33Pa4/zKc3hYMqWyT5EBjc/lMmxJ\nKHF/K62blQ1x/zWl/cqZU8rYDXEpRYjONf6SSUR2+jxRHfoNSeN/mQnm8X2+Z+z5dk/XhhQ4nK+F\nhXmMFoag0apkTaS1gsfQ4O0r0JjGTTSAFSQYqu4R/Cd81YM4fN/QVBvqPrDqPtHyCmNjEGwELJag\nPRMxTka1wAew1YrL1YF9F9jZRzptsNUOqhWmfcD1EkPhtcc0Qpv210Oxeqfa+rnyb4oYk8vyRI2L\nM8fzFiD0j6xNT2UM3fE+0u16Q981WHNJdXXD8ef/H/X2G3Zf/zXGbiNx1ZC0meiKnydvBKAMqpRY\njZLf9g1X9ZrDpz/z0BzYXn9HtX0i3P4R8+Z3SDAEIxhxVGwIxmDCqRQ4l0Az84jPwdRcNI49j//E\n6/GUAgxtLlozSmmzQGJVksv8WEe6O/ybaXDmOdnDc6jqGQZ44gBBZPSDFmoE9dENR8XFRkJYCDaQ\n+nNmPZdMaOzfIAoMgBwV4VKAWKhtlL5Ahm3xkzGVbcd68zPxzvT3OI5lAWGhPyITc2XX93hj6bc7\nvlg9YbRHaLE9CJ6qji48GrczMBhEe7ZVTRdM3DNPpvxSGBhRYHqdyfVpycLj2P845ue8Oqea93mL\nSPn7c7SfX+JAs6SllSUkgcoYk/oQrTCqmtLwZFzOElme5PzPsGrHsaYoUKlhtMSxM6g4EQSLWkVk\nckxqzmiXTJSfI6jmd5/TElVL83egzB4xETbysIlMUMRA6LHaoSjBVBh0iMhiseDvEP+IqS7owxGR\nFu07eu3BXrENQt1+oK2+xjpHwONFsGoJg4fX2HYMzG84eOX94xp8Q8sGlTUr20aT8+qS0NzT9j3a\nhxj+0rq4XrOykeai0AfOlhf3BM85H8zvj1iRJY/koKAgEs94WKsEewOtp17VmHoLfUfXHegffmZ7\n8yu8M0BFkEhTA4CLB7KNZG86w2C+zJKKVZwBZwwWoap2bN/+jrXp2X/6b5jdVygd+vABNdCZmq6H\nlgsQjfEvy5LVnwJZMrEIIUpLEE0L2bww3XlKcMp7mMIykg7MrsjavSQNpvfFRFOnipRbWYyrLgJO\ni6DZz5mlXjK/TOBBPM5hk7NGfM+C2Ej484KcyBGl+XI65izIZPPYKOVrQuTPMw8N5q2EDSrjWaGy\nTDBV5trkTAjIGrDM3365CIqE8kB2zHL+P3+54u1uTRt6+l6xtaVeO9arms2mYrWuqKoVIj2VEy4v\nK377F9dsNiuQMgD5KQU+NYEtwe48NTgLZykZwzjCeZkT8ufmLT//3O9fWjLziYwuwscYhxiDqo/M\nL2fiQBJdyn0sjcujYB1x0ZBtm6MsIKcQKEBs8hzMYFGaIfOWwpLwUcLtOfi9tKc/KAt5m6IwzU6s\ntwV+xCw7gjOWzaqiNkpFT0jr3IQIS6cW094i/QN9/RYVZe9rMBYjgaqP+4RdfYlWO0z4idAfIoC8\niQpOGQ83Wb2MxjPhvVr2ssbYHVYqGrfljtccuEbcCrGOzvcE3+BDn9ZpMrFmfBj+nj8t/8KeoBkA\nOVDcJSJaNjpQjvwO0UmiO+CMpTc7+vaIyBpratqnn5HgqS/fUn/5t6wv3nD88M/R5CAp8gM5uaKh\nVCsMYE1MDGpFosYoRJOjGIx11K9+x3p3zf7TH9D6Cn/8GWmeMIGYWskYtBdiIscoAWk++1ZMUiBu\nzwVNded9vrRAMugxkmKTZrTKa++UEQ2/yRJZ/DXZR8yMQGW6ByhTuXV4bkB+HfYaYxfjvEQ0MSn0\nWnxT8/iYLqqxrzqYeCuBykQPUWcslUg0jQx7j3HAxWgnfctFk0QZxmFOni8X7UQDlGz1Py0l08rL\nQZPAEAoUzprn4lxMhJkz2kzBoOfwGtouBJPglfZ4ZOWUoB2VM7jKxs18r+nMp0mKdMCIowvgNfD2\ndcWrK3sadC4LVXm8Qz+VOWYsjROiQPMSY5xOTmn1OB33LymfQ+yXnlmar+JHPFdrBLFC7SzbnUPi\nYidoSJaUJQacF0MhmGm0LI2+DgpSHJeZMxKRRSYzzIicjulzYfVS+dx9x6W1OL2rGCx1BVevdlRW\n2NgDQTbYGLYFoyDtO/BPhPUb1FQ4v8ebLRhHPIHWExA6Vbx9jZUVVXeLV481QnSQ0fFwezLbRP8C\njRqnmgj+pL0H9XQqHPwVe14BDq8efMOAm4OPR/b7fhl2zzNBxgqXF0u+v7RNn7qV+Jb2Da42dOrx\n7ROqnv3t9/jDHaubb7D1JSKWavctbr2me/dHjHcRIBowYlHfYxISZsZhZFyk0ezAIBEaQIynuvqa\ny1e/oj880rSe9tMfIHhM8HgBNUnSG6TC0thUDlcGD9AoeBYEeyB85eOnMBlgkxFWp7+jtJhvTIlZ\nJN5L3Rqlvhn0kzlg6kyQ0AUdmPdQ0/l+JqZgDVTWxIzkIRCzPceD5tFpSZIQkt9/xpR1wsjzvJqB\nqEy7lM0nS9pJ2edwQojGcacqn5W0T+E4zeIw79fC2AozeVUZQmgxLmGMVJAsG8YIzhC164zXCFYs\nTlYY3GDzGFqftC2DuW3c75l6zRbd+UWa4bimlxnU/PdZwvoC4T+nyTzXXi4TuCftPXjFB6icw1qD\ndYNhbKzrWcaSBCCyF26+lqwH6W4JlsEUx2jam1eZhZasFb4Eg+fK5z+/uMJOvg/WFBGEwLENHDqL\nF4NYS69V9MvA4LpHTOjp61dAhaUDCXgRQjLlB+0G7uBF6arXYDesmw+EPqW2C0IwAcleBen4WCgY\nelRUgBD3G4PUqO/o2ieMW7OyFromHrSH5CMyDr3w1TxbXt4TlOGfAqj5VrlQsqQzfV0leoZK2FPV\nW45eod+zurhkdfmKrj9g3Dp5GhqMUVavfkPz8R853H1P9eab1FHB4giZ5cpyvOuyGBMPfQa1WHvD\n7s2W4/0/0d//EdN+QAJYXCHFTXo+BcNsYBnRBzMMxcb9HITp3ckme3Et/87OL+P98Xtp959qSEWf\nZuaR8tq8jAt1NN1E3jt/T8jeVUp0iGnbFmk7jG85+m3yEC3YbkFw52N+rt/pobEKif3R4XqGz+xg\n8mRUSyHX4hji+KbizQRm6VpIe0rx7TA0lPu/xDumYyu1V8GHLqXtiplO1CpOABvobEA9eA8hCBos\nfRdomp6uCykp7PyAyLQEojfxCOfz8172dwqj5+7p8DnA4P+issQIl5xuzr1nROj6jqf9gcsLCL1E\nMUIVxHJm+k7bl2HECCa1m9/UyCxGJB2gNHb0fBvLDiz/15cRnjDOa0nPo2NJfMbS+QprFPqG1lzF\n+83PMcTZ+ivUgPFKTUvPCqQieu1rTHOU25RoQfP1FatGoX1Ha19jqRA8ais0eATPaH2LdCAkJuts\nwGMI/QH/9B6pKravv8U8fM/H7kif1pYUicHn9Ohc+benUkr1RyYg+cf0OUCoCP5A6B45+MDR/AjB\n43Zfw+oa0R8Ra1FTJTVZQQ2rm9+yf/cP+HvH6upLUI9aE/dasrltcrZPhxaH4Sf7l2ggSABx1K/+\nEqkvefzj/5PgG0w6dhFrOFWMlwh4ySBeilBePj8xmS3sn0D2ei0hyMm7z0nMS31fek4LwjZIvkPj\n0zNUg2EhTXU84hJN1V1YExdONFnLjD19jkQ/h8vUxDV5MglcWvxOo1lEdD19r2wrNn6iXg/zkRnm\nAsddItDDtXgjruNk6lxZy+UGNhj6IIg6TNjQNuB9S0hnVo2xtE1D01YcDj1N09EddIbZRdtZABuI\n8pzI5b5NgfkyIS7XFWefXRLmpgwj1SEMmtpSP5bK53gvj+1nz9AowHgfvRhVBSc2ZZ6POJqfna7t\nYqwy9lnK6/P+lUzkBTpwrpyjCS+9c+K8dlY4OEHvWZvlHY00UwJGoyFxWxuaYFEEc/w57q/uvoge\nnAEQh/FHjsm6IYmOe9+NwpjGDRjU0dY3WP8z1fETvn6NWkG1B1wMeJ3jPCV86dRgCZjg6cIj/dNH\n3HaDrV4RjGdVr9DDAUL0KtNUg0raAVJ53tzJS0wwawpzqEJKORIRYT7/wxJIRLVvO56enjh0D2j9\nEJ1J3I7QdZjKIRIPuvrcoSCIdWxf/xXN+/+Kdxvk4hL1IQbDTdrC6aQmAq6eHDQreoPFDPKdesRX\niGzivp+JkRGiDSXZ/ik3y2fgKBdNOc4zkndeSxPYnNnQXtbuoplxXskSIZq/u0TkJt8nJpH0Tvon\nMrs5kU8R+U0ymyRzkccQnWNCzBoyaEDn+7vU96Xr83fH4aXjIoPcJWnBle2WWeWzUDSrO0uJMmPd\nwztjyKyBnb5ofgIjdggIHNsNbFaeq0uldYbDk6JBcHWFhJY2RVQyBqxVeglsVoZ1VROCg4cK+27s\n2lwQWxI+S2Y5L+fw57TMGWGG8/Oa2XQ9JgFFIacseu7dpXo+hzmIpD0/YhsaDMYSCToas8vr9EjO\nfKTD3SzATIReWViLzwl0GbdOxJFZHb+sPGdSzuV0fktmNx4vG/pZPJcZUEwUo2xWNe/7CtPdxgfW\nbxG1pIRuRG/TI96+iRRBKoB4BCJ5f6pRxEcaoUZo5Q0b/x7t3tPzJYhgjCfnFMj6Nyi9WFQdvnmk\n755Y7b5Gqg0eMMHgqjVOnzChBbvOLAB0YKfFoYnl8jyTnNjJxs9sApz8MT4zXDLgxRPCAe8DisUF\nh6JU6zXoPp6LEkGMw9lIbYxER4ZQbzBv/5LD/R/xXYdJBt7sTq/J6yMbuFQDqMcmKU6J0WfExHQ0\n/cMnnn783+k+/O+s12uQFbACiV5k2SGlNGUtw2U6zmHX1IwMdCp/nEqvg0fpWW0tfZ8diM/PvbSH\nEuExZbYnDgEndS6jQz6krqpYEzAmYCSlUxIdiccZI+VzexfPueYP18gwLuck7xuOT5VwmZqEpxLv\nIIgsdxckRWWBIbpM+e/00WW4i2QTmtK1e+4fP5BC/dJ2Su8VsQHjBGMtGBdDVqnS+cDh2NG1LVUl\nuKqetzDAKsMmM+t494xWwFSQe56hx7XGyXNL+89najhhXuN7n6v1/FJz4eBhTQztZ50BSeG0srOd\nObddUDL3sb9xuOlAthbrfkIn5pKIFGeCZZyrQsAcHz3F2Xl5eb6mz55eG8cX61p4VokKRGKAQaHr\nO7qnd2AMbvMqZplI76kEJBzxwWDMCrCoiWEU6T1giaZkiblH8QTfYbAcq7cI4NofEZXkbW+Ijkc5\njGHUQA/7e3z3yGr3FbZa4wmIRCbnTYVIoO+b5Pwmg+cvJJnrBbg9qwlOtLxhBvPNDEgZDkHGj/GZ\nLHH47kAlhu3VFxz2j1RWkPYD/uipZYOIxjM9CIghGFAc2IBbXeEuv+Dw7h+ovvw7qCyiHk1mfkXj\npGlCOhO/m3TQs287Dvc/0uw/Yg4/cbHdUr35XzgePtE8/L+wVhCj4F0CfBhGf66MTI9h41VLW/Yg\n/hWfEwQ8XQQDzAuHCk3Sc9zW/zyz0Tmvx3lbqjoQjKX3ynmXQQMAZxRnhCBCVVkqLDGrs0luNtO+\nntNE532aaqjTM3CJBpHpUhJ5hudkAFZZ1yjpSoGPS+2d9JeRAQ6xH4dnx7ZzhxbHmNeLgqjn44dH\n7h5bpO952od0/Ec4HKBrYvg0rKIaOB46DvsWIfAayz/+IPR+FFCm+7UU8SlZhL2qDuvypT21oY0M\nW6bjyoQ/Z2Cf9qd4P0n0Ux4zMou5RjmB3UK/PosZpvHn7DVWBOOq9L5PbU+3HIZxj0uUAQsHRghD\nhpFB0Bj/HSWQU6af8xVGubxo63PHdG6onw2XPOalNGAjjY44axD8MO8KdKr0HqrVFV6IDEoUQjSd\nOm1pdEPO4hcExBrU75H+HjEVUAGCkWqYo2AEqrfY/h1y/AndvgG1ycM/eoCH3uOf3mHkyHpzQWPX\nqXcMa09tzcoKTd9H+hNGcTyP/SXR4fmIMUyJITBEWZA058ooVcxLdmNoj4+ggtvcoI+3OAPHUCO+\nA7+nuvszGhqo38LqAjWCS+6xEDC77zDec/z4B1Zv/wprXAx7ZgJBhZoasQbwRAuy0jUPtPcfabt7\nrO/Y4qm/+Cv04ht6s8Mf7wma/ImSmeS5OBCLmlaGB6QEvuOzUweK6R7E59ZfZlcYF+XQMvNF9+we\n4Mxcen5vZWxoMASMHDkeexTBWJPQPt4r6MVkcT03zqV9DVU9wacJT5Py4nK90wfhhBgvPj99U8oj\nQZoZ7ri85k2U/U/bKkQGLGjo6fYtf/7XnwlBeP/+E/ePDdeXFRcbi6qnafb0vmf/eOT+9gnnLKD0\nfc1DExCxk7YmsGFK1PO1E4EojeXzCOjz+DUS1+X6CrnkfAu/gME9t+819keS5URpO08IDmctLiVw\njePJpvRpXafbCRR4mBn/5IXxVirZHV/zeigEsIFePoO3paDxP8phpjRNj3We30NX1WTRiltUzjku\nV0rT3WKrG1os4qJ65Kxg+iesvaGXgCPwumr55IRw7KA7gB4QPGIcwVSoVClzjyG4imC+xvY/oE8/\n4TdfUSUF5tA/oA/vsPWaevMVBk+r0a8jwjJ5gJs1VVVx6Bvy9tFwojYpIP/dTLAEZCmr51aW5J+h\nGEvwPdo94UOPNvcE9dTrbdz7eLzHXbzCVAbp75DDB3CXdNUa3Vwh1QVS1fQhsH71K7r3f0/78U9U\nb35D9EKqsBIIeExI9ubjPc2n79HQUK2vqN0O4w5UV1/j65s0qmjHjn2sUc3ONvMoHM/AZsBunWx1\njGaHMCD0HKnnv5c8JmetzfqkJ/eWJL2ltl4qg6SvcQzZHpAxQENAQ8CZmCS2HwIRZw0qxwR8CfXm\njK/QkBPznXtujrrf8+Mq4TQ4Ry34SU+1m+J6ilSkeRzpvkkSf+wzTPSBTDWTtGILwnm9W/PXv96w\n049gDTe/Vj68eyLoKoaTUkNtayqjbK4cX11f8vbNhqCBtnG8ftPx//5vwu8R5jkjnwPznMmM2i+j\nIvtMSSMga5DDaHXa7udolyUBLhn1/Lln+/OS4JL+8yrsjy2qa0SJKZUyDmnSNF4QoiZCoYzMM8uf\np5rsrL7iU09vvzyezxQQzj13Wrch7t9NOzOnQ/n8s6L4YDjuD9TbVzh/gD7grOHYrhF7iZEWEaWT\nFRXKF5vHdGRvg9ATVq9BXDweFHpM6JD+KaZVEoMYB2aFrt5gmo+E5iNh9Zru+BG//0C9usCt3+JD\nh4YnjPOoqZLlKZbOO6x10BxRzYHm5SzMl8oL3qGD4W/4V7K0dSoUnpQQFPCE5hHBY/QRDYqrXlNf\nf0foevr2EW8uuXj1N4ir4mH05pH2eAcPn3DOxIgD1RX169/SvPtnuP+EXr+CWCtBFf/4ke7hZ6z0\nrC6/oLNrmod/ZbNaY6//JgI9avFxokPKP2YExKceT06ZMBlkyX9KYp1gMZrcSunv3L5d3K4dpeXR\nRHN+r2IkelNEnjLIJQ2wLOc0xJJIRZNFJipR29ccl1MkHSEQMAaPTWZVQ8BPMCVWF7+bIpjws30Z\nGx/HNHnodCwyu148MdFIlmjO1DR6Hk7jHt+0jFsByWxbGAAyLv3Fb77md7/Z4kzHn35+5Otvfsd3\n371ifxQe256ub9C2BVZUlWXlOvyxiweWLyyBjv/0F5b/LRHhuTn0VGOD0gFlXkrFOlcz1DRRdAsh\nN8HRlA8z1wKX+xP79MsZ3ecIbyP+MqCdGEvnPSIS/d0k4h9ZOy8Y+8ulPP4wLPLc26LjoCFNfimE\nLdY4g/8LY8vf/y1lyuTKI1gLdUqc86CasmgY2rajrXdcrCv6toHqgit/T9M3aB9og6FaCV9vnzj0\nKz6FHa56hzsqaIclauNqLJ5NhL56JPSo71B/h/Md0vfY/p7+cI/vO9bbL7GXr1ANBA82CNq3qKxS\n5LAsbwputcI83cdjGbbKJGyA/UuQe5EJZooo+edExmHw21iS/gWl73tC27BO0bWMgtlegdui7pL6\n+teE4wfu33/P5vo76u0l1aYirN8g2mLaJ0K7Jxx/RI1Qb67wT/+COIuurvBPP0Jzh1rH9uZrtN5y\nfPwR+/iB7c03mM1rehxO+yjJSzyaGUIk2EYEkjvwNMXO4G4wGa9Mhi9k+3AOkJ1Ng+VhWFUtMsvH\na0ZsYV5b2icMs8VS3l9YhEnbCWFmAhvqW152JfPULOLnxZwOfook51mJ3qGK4r2HoPiUMSMy8ZFR\nRgtiJhpTre58yah7+sx/j3FIsi3qM5+dQ3fCZAeY5LlLsVyKOIgi0CfHmqAGtzI8Ph7wIToLrNZv\n6DpPL0esCbEGE5lx0yneG1aXNZ+ejnz4+J56JUh7FVPXpIgYU/K6hBu6IKxOfYIHaGfcZRSyBvNd\n2UbeC5nN5ZQBpuuSIuGUPdPpXJR7jMuq0vTykqlwYupl1NBVIwuK6xucA23SvOn03XMMZtzSyFpk\niRnjDnHRmWQ9GMebny6fkXSzbP9zhNd/i5d18UQB+3GPcCJ0FLY+EYn5VhV6H9jLFRt3R2ieeHI3\n1E5Z+x9o8FyvPtD2K26bDao9mAqkJZi4YWLUgnocDZYO8R3qoxbpnGDcGl91HA41cnzCVBVoQ3f4\nQCUOsRVWwBKzzqtGk6dEcotdraLm6TvEVkwx6jlvilheyCIxSrOZE05kvSx5FYCDcQJVDKE7or5h\nuzNJg7Ax3tvtn+mbO4TAyhoIjxx+/N/xF28REz1JRRVrHKoeDT3++ID0T3TdE3z6HltdsLn5Evv6\n13h3Sd81+Pf/FKXpr/49amo0RTxXXAoWFl2mte8j8RYXpds0YQNCaILyAIucfDcHBU/Mw5hE8BX1\nIUkpeU9wZDBjvdOzUqcOCbnk/ixNYbk/EU1++aC9Mcvhk8pFMhKtKTETJEqz40tJMAhRgpE0VxIP\ntfrg8elcZ0xqCeol2Q0zvhTa2ISbTMcxOm+MB3ZPYXIKy1zPqTaUxzucHFomfllbLwkrWVdfKDJm\nrBfAYkqsSZ8Gk83rYvjTv37Chg5jlV//+tfU2xuO93dI8qSLUYjiOUwlEp2mhebQ8dP7QLVa8a+3\nDSH3F2KUoxRSaiBdpZBaMLElAptELwZmmfo/gW/JMEha4ESzKMecYZvuhflcwdwkPd0qKMnWVIov\nc1Hm94ZhDmstDOgV3zfYyiAmEfzQobJFYgrjVO/Y0OIqO5HFijUToTXIbLlPmmGuI/kYBEwKhrho\nIeLstX+rJjianst5y2xieh2VGMaQGB7bmxA98jWgAfbmhl11Szh+olt9ydY43l6uaPvA3f0DSI+t\n1hijWG2pmo9U1iIhRpoy1hCwdLYiSEUQSy8V+A76W0x1id3d8Mo1tN5wCKsYZKJ7og2HmE4sCNhN\nDK6SjhapXeMsdH3KNJHGZNJIXmKDL5wTLNlClKIWNOgCuKV0A4ji+wYNgbracX/wWNtBe0swlkpq\nnBNwazbbV2wNHB9+5Ljfs3n1O5yzkdi4KiZPPL6C/Z/ZGsfqUjkcOjAV/dMnQv89vm3YvPotXL5B\ng0eDJGkkalVBbMriLlFjSia96bIbhj4dpU5lilIqVY1Sr7E50asOBLhcvhMGOKPbg5Q2kaoXEHUm\n0cV3dfLcKfEZZH6mhG4qtAgyKDRiMvMK8cBp6poQM3er73AiOBzR+VzQfMj1pDzHpMrxj1L9L3GW\nyDCd7pONZjJhireTPcjEADMjPKsVzOTKGSksrpGYShKWVHnaH/n5nfLbv/wCcPRBUY3SrslOCOX4\nNaYPqzY19cby/sFw/+ijMJe88wwmhfSK+5fj/JZ9no55hPM4pun+3BRvTuA9AndBU5m+n+uYyhcj\n3i2apk8XBaV15VwRkZQ5PgXtJwmtYnFVHWMXhzZq2yG5cxUmy1JDzmNTQpYgSqgswGPaFzMw5VFQ\n/u8p5ywnLwm60+t5Dk4i0Oba0q/CJ4IkWIvg6bEi9PQ8mEs2a6Hqf+TVRcPDccVdI9Suw7QPWLPC\nEAU2DYKvr1EnNCYxsLTuvMbE0todWft3WOdo3Jd4Z3jQDa9WH6GpONgL0A1rf4v1j3xCMDSYtk30\nKvVPLU3fRB4VShpwhiQV5TPMoUtXZQBd4TIxahTZNIHQH/esV6Q0Ggc2NaxXK9rg0XDEtALrV4Td\nGzBbttuv4OFnDg8f2F19i9ld0zx+on36kRUBd/Mb6nXN2ga0aenu33NsDjgj1OsNbfse+xgwqzXG\nXBLjNPq4GQt4sWgKpospz5qdEpHFkRcS6JBcVgRjRwl80BJnBGPOfKYInphmsbKWHWYkan7F9GSG\nu9zfzMxG55Bz+4QiMuybllUG0tkqjTF1JAgmWIKNETlC3t8MqQ2BMsWFwiAWf97eUO7zy3sip3uu\nuePjmFSXgw7AyJ6zxjQhCwtmt0ggZ1J9IXxEAqjY4ZxowLLn0Bk+fnrku+9WiFQEfUqE1iRNZxRE\nIB5FdpVFQsfHnz9QhQYJHWoc0RlL05ktSXR8Ttx0woCeI6aDsDB5PtZzujddwnvpmV+qtaRth7wG\ntWjhF1QTtxfiSyEEeu8JQVEPtTNI6BD6IdRZmLVV4poUPjCLPZ5ZDiZFx6E8V84zrFGwHqr8BfBc\nWi9SdOj0ejGUuIgZV0WFiEN8T1DBSU3vPZ3d8vXVI6IVdw93YHYc7I5++xVrEV67nzhsejo6fAjg\n1jEkpiQ/jBDAOKS5ZcMnWG05cBPDW3bgBR70LVf1J3wniDistHRaIa6KfMWC9R0hHOn6jnoN++Mx\n+WhkIXSGT2fKZ4VNK+34pVIxJ0BzG7cAvnnkalfT+o6uM6yqC9zbv6M9trjQ04cjVfOB8PiOUDu0\nfsXq4jUYx8cf/jMrMawvXrG++TXV+gIVi3n6nmbzisenI+7pnnp9jfvuf0W8x4UWbe8JTx/o+x8w\n9QVSXyNuF8+mSMCooCHEw/Fmmq1hYfQThDkZY8FABnNjemHErTmBEsZzSyPZPWHDAyMoruVN2OJc\n+6gR5b4NvYj1Duau3N5pJobh3fSYkBIWa0n4hUBPF1oCPpl+wsRstlQkSdunfSv7lK4XC3aOX4va\nzAmBmEq3ZwW5BWJzKm6cyv6aNyISA5B8fdI3ZfBf04Bd/4rVytM2wmHvufQNxmYTdq4nChCSp9cI\nPii3d0KotlTmGuRjaicHrNfR0etMKRnViRfuDB5TuE3htAShzDhL4W4quI004zk6Pvofj2K7sCwE\n5ryBEyFnxrHEGI7HnkPTs288T41HqYmHucPo/lZYcyb06wQ/5zA6O5DpZ1nLC8Jcvrc0P79EG3y5\nnO7DDjCIRD2tawWiV21AY0SXENi4mq+29zhbs+9ec/PmmncPLRLA7D+CDdQ3Fe5pTdc+Ugn4foWp\nLujsOuK4KnXzjsv6SOve8uR3xNhTQAg4CXR9zzEYXrn3NIcNbQ+Glrp9pLMbxFoQh9RXiBE21nG3\nv499tQaCMCRJfgEiLxyRKBBg+GfyZQreEmkT8SQc2awrHhpHH1p6dfTmEg0/Y+orbHVFvYrmy769\np7v7M08//x8YcdysLJ3UHLqOnaywYgn+idAfuf/5X7BuRfWr/xv93fd093+muvoarbZIvUHCWyQ0\n0O7Rwzu8/xGqK9zqIuaj0rhpbsQQniEiJTTiGLObsZCtacMTM1MTwiB5TuCm5WqZktqpATUpVEVg\nAiSZXMhEaG6inu6zjddKYjZqRidSfPlNPeu6ou2j80YI0HnP4+OR5uEWtKfdvMJsN0T3ah18apgR\ntSkUs+GlTI019meJCCxrxVkqz4Q2L2oT94EWmGkJl7k0fkLqk2acf4c8XQMNSeRyMsfxt9h4rk/F\nstdLrmXP8fjEjz/9xJe//neDppyFxbynnk20zhmap8AxeGo58HS0MUI/oGrRIc2YkhnigFUzbW4C\nq4VxL8J0BqflkrWLOQTn35ffm3A8mVS0OEeaJfB51UkYg+SgZWN81k+fHvnx5x/4/vs/secGubgm\nR30xxqbg/gsalyQTddGlLLxNrV2zktf7DL5zAW4O1yU4L83RS0zvXJvlnmtmgPOqJm3nZ8kOfx0W\ngzGBLzf3BFYcveHHJ+H15Ru+uD7y4RDrbINyIGBkT+hbemuQcIs+/YzUV2h1g6Phav1Iq1cc2oDz\nt6BExzEjSOdxztF0jiBfslo9olKl+V9jZAcIPSAS6FXAWYQeDV3MpZrGPDX3L5cXHGNKCp//mRK2\nEdiagJu95QT1gXV9ZFXXPHSXGHlgtblM2R00nu9TQCqa9o724Y5aKnZv/x1muyUcHpDmDnl8z8Mf\n/x/o279jt7nn7ukBd/Ur6s1brLFw+Zbmwx9Q56DaQQBnhF56sCvs7ktMvyccb/F3fwYUbT8grpA8\npUSSUirLw88RI8b0TfPD05KZU2Zli8J1Ng+WHmeZ0poERknn9ErmV5jqZosmhzSLTHFk6BPmUUrK\ng7SpnLp/yKiNWMPbS+GHH+9pDve07T1tuKN7+MTx8Y7aGTZfXeM2XyBYoE+UN489a7Elo87Ev5C3\nM+EYqeGLhHrWZYZ1TqlTl5rFdF5L+JUafJ7D3OGS1A3MXWRwhymaLWCv4DNvNPTBcHv/kb675fXr\nS5y10ctTxgSseX1pWri1E44K+0OHVwtVTFhKer7cBcxMdKJ5vaABL40/jzILV2VZ9Mgc5moOqWx9\nWOBWklh2QTPIGuRQzVTbG8Cevsz5jyTmoyKgggl7mk/f8w9Pez5++JG2a2nae8TDt7/797y+vOH3\nf/qZAVMGQjldz6fAY7g/f0rKLzoVS5a2Hz5HM3ypfM5WwektnXxO1pmSuXj8KSbmnPQeK8qb9Z6D\nh5YVO20JUvH+oeXN5YovL4788GTIDojOKtQrzO412l9g+3v0eEdob9luDNrtOHSKOFBxYGp8DWAw\nGleXWGi1x9tLLlePtG2gEwiSHPjERX6jinOO2ght17C2GxQf989Vn5tR4LMCaC/+OAPscXEYMXT+\ngW5/x0NwNCFGCQ+h4fDhv+K7I67b0/dHevkz3j+wrS4wmxuCeOS4R7G41SXWVLR3/8rhx/8PvnaY\n7a/R3tPd/olWLMYK9fqS5sf/A3f5JdX6ml47EIfJRwKNhdUN4nagLZX7EbqOmA8kJ3E81Tjy2hgZ\n25ileb6RHxLxLmPXMampYJJ5sWSCVS7yCNTECM1insI5chtjizkYEVmQcRDMF86C/6NRJCiKo+tb\n/st//t/om3tqqxzuP7BeK7vacrg0HDvFP/0Zd/UdZv0aHyLSSaZKRV8jo5YZGpVEe0ETy099DqEo\nlIRJ7MCJcDYVcp5nBok8j/w8hoRKUBv3HubaTzSZmuLM5Lpes2HNIayoq6sUXNtjxGf3maGhzAis\nM1TVCq2uoTsgwUHSTkwRnUGI5qUBiEN1p2M63T9dItDz76f7gnPLQ569UgMd8Ho+dzr2b3TIOr0/\nzOfwTHo+j3XyiuDFYI/vqcJHVroHv+ebb37Fm8uv+MO/fqTv7vBPf0TuLKH6G1J+2Aiy8vz8jNGV\nx39iu0M8EqbRSGYSr0wFr3n5JY5fn/Pc59VbRmTKDHpyl3I2ggjWWGyAr3d7mqbiU7Plq6uW0NdI\nEITAu/sjX687vt7B+08tGizObZDDIzY0qHV4v2K13uDsltZuERe4XgWeemjE4tVik2d4XGcKAQyW\n1hvuzSXXdYc2R7y5wltFNO7x9mLozI61sbTdHtaXWTxL/z4Pw89OpbQE6DkhkcG9PXkAdXv2jw0X\n6x1eN7ig1Lu3BHG0h3to79luv8C8+guodwh19LYnYCUewg59D4ePvDJCqF4hdBh/gPVrdPcKg+Cl\nx2BZb29o7n6m3r3Fml06rtAjCD5J2UYVFY9++AOm9+lcSXI2kYXxllgixUcp+mWtZgajtNMzlfIp\niH5aKINThJiJFjKYVaRcbKn+skuSdYE0HxOxNObSQIqjG7MxjuYSUgb7mGc+CoVrdhc7nKtw7oaL\n6o7K7NnZmrsm0B8P8PAnQv067q+GDsWMYccmDCh3vDTi5b5EQWSusZ4IJc/tqeQWi0WO5n22X0ZM\n4ksjlHOm+KHfA5GTYVyDYCGSYsnGG94oUl+xoqUFMAYLBElZTpiuIRFl7RwH61mFB/zmmuPRjUR1\n0t/CIjHgWV74y0zvVECbe37PgxowjGWss9DmJLap0yYH3Fzy4C2eKL4XGknGxwXGfWIuB6wGTHii\nsjXCCqkrLt9+hzYN7z61tD10suLnn97x060g139B3NoIhdVlquVNBdUMWY2CcwGHkdzCEpqdE0jm\n9PPf6gyz1NZyHbGXz9at2RIU63HO8d0O2iZw1wpWHtm5wMfHlsofCF5ZWeH9k/Lq6oIvXzsObYcT\nCyq0ZkdoH9m6Pc5dcDBv8FS0wVOFwLbyXJgnulZ5DBXexFhLMRp2TI8UENrg6NlwuW1ojw2eKskr\nDugJpsata2g7YlSgMTDAS+UFJlgQgUxMZkRqiqQZ0BHY3fEBJ2C3N/DQxs3V9hPWOLa7LWbzlp1z\ndOtrvFtHWz0BEyxqoG3v4P4Hqtohr/6KqrqKnor+Af/wPe39E6uLr7DWogHcxTeEdk//8++xX/0d\nMO7pxMzF+QBvR+g7xNYECWhQxI5EBgoEmiy8jMzx+rhoMuJkEpml9OKA/ECYUz3lShvodd5jOu/A\nMIV1XJQyqPzZrXk6hjCg9Pz9cR7HPiVJzAJtQ7d/j9te4NZfsvnyr7g2H7DNDwRpCRJ4ZItoF9tQ\nGZIel3soES1MAYgRl0rSOjEhT/p2+vvsQk5VjNO3TDjP1TVhEjKVIUdNOxGT4d1RuIE8K3lw0bFA\ncbhqi3dXOFPFvY9k3kSGDyTFZq1rx2p9wYErMBd4acd+F0xiaKcEnJ6HzzI885yM+B3n55QRlgLT\nrGaG/J7lBMy6Ifk8ZNauOJ0r1Xnbp4ywLFFD7LHUVE7xrsJUN6w2r8Dec7FZc98KvdaI3hNt1bH+\nGD0qjVfmfS7aTeObcrpTZjxh8QVje25/70WHm9lzz5s/nyP8WVFZ7tO4bTIKREYsT/uGg3/CsGZb\nxWDYd/0F3hl6V6dktj3v9oZXF4ZvrxwfDnfxQPzhZ7bmgLFvOJgbPJDPMLRacfSGSq/Y1Z634UDb\nBh5lTWsqVKPSYoPiUfZBqKzyqr7nXXtJkBoxYIPFB09VW0zTxuMwrh4Q+SV54gWPkCylRokpBI9I\njIYy/yuZRH43NE/xHKC9oG+PGGLw07C6pHevUWqOZot4j9Eek2LCtdpyvP8eufsD28vXyKu/JLgd\nIam/wjXV1d+ytZ5w98/441OKyu+p3/w1xq0Jd9+DWIJIdHwRg4gD41BxhBCwIlgxGOqUiUInf1MM\nyWcAKYhW8qEcCFnW/WRggJAdaDQyYYqYlCP2JaY6mkLnJp95yY/kjOLD/mVazCFx/yGzRmbSMl18\nYz/iPItGxIeA73s2mxvq3be43VcEU2E2O3R1Qc+K2q0IVHTZ365QxcZUUSkH4SCKFJ9C3McxpjBa\nLBO5zzcLlXuL87/ps886OZTtsyxTjgxoqHX8t6jz1Ub4crfHWc/KbMCEmLmEPprizDifkREKq9py\ntVtzs4Zv63v+8m190s7p2BN0s2VggeGVf8M4ZtrZuJZluLZUZMD5Ie1yXJ9BmZxIKfF7zrBjD2ZC\n2bjWzs3NFOzRHOrNgVYNLRd03Rpj1/gAWBcPbZsNeEvX7BHCuB+7WHvptJVxEIaEry8t0bzehi6O\nuDYf0xJ+vyQEn232GYFhmK8Xhes4gEgRHJ8Ogndf0Lhr2NTc7QO9XaHicCiqMXEBavj00PPTk6G3\nMapUxR6z/YajvCJotHxERigIPRbFe+G2q/jot3RVzaXruJYnKpp4/ljiUY0gjsMx0OqWm1WD0zYe\nUxOo6LjcOlauS4JOtG9HuvdcaoQXmGApoRkjKd/eGQBmKXgIlRXo20c2qzVqN2jXY1cgdo1df4mp\nr5HNFebqW4JbpUViaZonug//wMrvqd/8HX71FfgKFyk6CvQ2EZ+L71hdfoHZ/xn/9BNBDUGF6u1v\nEL0nPP6ADO8FVD2qig0e1KNi40FaG1Lur6yN6YyxjwRhQkhKIjGY/07NPZMADYlJnENGETmJkLHw\nEIM9dU7oh3Yy082q8LgfOdFIi6ICahLzVBNN0fUWjKKypqqvQWrarqMSh9co1HQRq2HYlyzAkpi+\npnkYEYVT062OQsVLBGBO0CfEXUoz65Soz50SyqMD83oHuKieMrzMtE7BOOuost7s2Kwt6lteb/eA\nYHAYqoEw5UojI1RqK1zsDPXKs6qF3317ddL22aJTohs/T9+ZCkDze3NYLDUoZ7+XpttpkImS6T4v\nhJzMwRlhKLIsg2WDq1YEtfS2Zt/19N5jncVoH+9VW4xLnrtotASZMe3qYOJdlHpiS9kXoMhXMApx\nWZIZxr48nkW8/YXlc94t74WgCf6jUDKZt4Jx53tRIOmJ21yWrfY8NmYICqDJXtxLQFJG+rsjWKkw\nQejNNQe9wBtNqckMVpRgwCc6lldDp4bHfs1duMDbFVdVx5W9o5IHag0EHAR4ajqOYcdVtceZBiXQ\naQ1ug5UqJk7HMYzmBe//Z++KsRjjiBkbcnTx05L3IGIAi4gE3veELuaB8loT/BFXX1DtLuD4Z8Ra\nrDi8COosvQb2H/+ZcPfPbC6/xL7+dwS7ioKXhOQeG/e1JPofxbA51Wuqm99i5Q65/RPatfRuQ3X9\n13D8AQ6fIqKYsW8qEHyM42iMTebE6TmqnIxxgialuE40M4bEaCKuJeYijM8JSUtKCJUTrqgyQ8Ep\nbM9Ijsva4pQRCibG60sZ/iCZfFQwTBMH5xBK41HC6JATjAXfYswarBCae8QoXftIAOr1ioChWm2o\nqnViBkrc10x9R0BjUs1MDDUnq0WINte0EDSZpmTGRRdg8FKJdS29E8c7mrqnjOE5wSSHwSqZQkzq\nHIniVDhKRCQ149XiRAjNHt8fovVEFZuZdcKRqMHFhuqq4vVFxavLmpvrFZebddmhE4428fDT6UGb\nKbEbSbOm8RhT3iuPliR5a2a6i02XOMfsnaJvqsOWxHhvZMzzEol0OMtAlrWbCLM+VHRmy9o8QVDu\n7h5xVUXlanqEuj+AXcW/FD5RiIQ5Vzus+EkkdE3auibhrUyarcNfFpRKFj+BuuTpObXGnNMQl64/\nr8kvwWiEXRQksjk499CMnSQ5sqFgJEXBimOzBioT8FTkLZs4JsHnWLkiOBpWleIsaPOIdE8AKSh3\n8hoJGUejeTakcJQqSq+Bp95x213QmwsuVobL+oGNbREHJgQOfcVRLrmqnnDacuwNHTUVgO8Tk48m\nFrOEaEV5ngnOfkUtxZwgZEYkQ9qfUkPTHTFdh11d0GkPoaWq3+Be/S1WO6r2QyJUhvbwQPPTf2Uj\nnou3fwsXXxE0n4qSAhkj0puEwAgE4wl2Dbu/xW1q9PYf0YdPSHWBvf4d4eEPaHskqMOqoTKGvrun\n8g2GHt+3xPNFSfszgpiM5HNCMoVLaYaUxJzjaloCqxSrYKhgkMhO/uZvz5lh/isX0IDkiaEnwmoG\niW7Ocse/SNcMkPapNBC0R3FQv0ZNS3/4SN8f2dQVwQd6HyPNoz4eYlZNBEVmyDMKBCoSEyJnolPA\nL3YrM5fRrCwn2T2eLxMCITNNHMjGu/Ks3hKsl+ZkeFJZ6JOO/w7ykGDwXF3u8GFNF7aEEB2PNGXR\nPuyPtG03aMJWLFXtOHaGx8eWrevpfUk4l8dsCjxYKuOe5vl6nivnLdIjZPJeMDLDTQor0aLmOTLG\nzFKE6VyezFOqSjVqIGJ7Gm+wUrPSB7rjE4TooBF6j1jBGYuhQn3plMIwVwz4NsW5gXdnNJ2NZC5M\nDRd0vD8KA9O9wiWm+DmltGJ8juUk4jqU9Gl8baS1IpL03IBYg1WwwbN2Hhx4qaIWh0Y4yWgK33DP\nRj8h1uNqh6kcVj8g7SHRoaQspVivE5MxgmAjA1aPx7DvYmDup7BhXVl2qx5njtB+4Lg/0nU1l/Ye\n4zv6TkAcwR9B+wiXcG4zYyyff05w4XfpPKIANh4+tQRM8yO1faCyb+kOD1hA6hWhDzR6wyoc8McP\ndM0jerxje/MrZPOaYBw2KMEYgoAps7LndgV6EYxW8Z7EyJWsv2a72tHc/4n2dg/X31K/CoSHv6e+\n/o/01kBQjH+issrFusd4j3eGChODQSdkOAe2KW3PhpF87/lN2HJRn9vjyj3I9S+1fc6j7Lm+lv0s\nl/Ao1ecrgSDpHFzoMRKwqqhb8/Duv+JWHdb2rHcr+gDeP6DmLQZHThuQlsbMtHLqn3lu3S4yvJSh\n4jmpNxOE8dzfCM1zRGIg2pNrevI9M5ksyZ8IRcU7xsRg8Xk2ayP87d/9ji+//RpkjYhHrMF4wYhS\n146uSWOUZLCwhq+ud/wv//EtX7+54T//oSPPYumzFceb+grjfMoyHJcdW84zp9xO1hrLa9N3J60s\n1VK0P76/xOTKEADzZ1RhaY9H8rERqTkExy78SN8qDw8H+nBEUJq2QX20bIEHsZGJJoydr5KhnyWD\nS//MR6izfo7XijVfEvxztHTS9imteIl+PP9cZPLxLLlnOoqRJkQcj45sxrqURd6w2wSC2ri3ZwxG\nQzycLuDEsjaPhNDSSYVohzGOVtZIfcHq+IG+Dfh6h0m0djjKFNX/1MM4t0FcpK/agfroHWqVS7ui\nMQcuwz2drOn6Crd2XIX3SGhQOcRZDH3MVzgT/JbK54RKOQHqyR4KUXsyWBwWKyu0hZWrEVujzR5n\nDKt6h/cdwdb0qy/wt/+E23/i4sv/ALvXhCL+8nD+aYF0Rwt8zCyvEm3L3saTWUe5wV7/DXUV0E+/\nR7nEbF5x/Ph7kICzFSrXHNXRyjVhtUONxw85BcvxThfoiZR9gojL75woIkzR7+T+OYI97wucEJHy\nLxNsneUQjUPTxfOHkjXZoPTdgd4/0PWPuL7larelriyr7YrtrsJVjj4IVpKZc0DqKfNIMigM4JuS\n54ynz5mFSmZ27rn8u3QWGls7Z+o83+68XhZgfvIMkYwYKTQJEf7r73+kPbR8+cWvqMVhUuBxI4b1\nqo6Z5EWjpIziJLDZXXPbv+X//n+uELtabPNE24IJMr2sJUzNmDKoLM+b2E5qmXs/TgSgKfN8SdF5\nKdDVBHsERGJ+GBtgzSOOBo9BrOHVzZaLiyucq8CsURq8P6KhjdJGMhWc8pREe6YePidCI3DCEE9r\neZ5hLY7xM7TBqZb9TESl4fs54WWqTUaBLw7dZAFLPRvXs2+qGKovHYUzxLOEW/kEovRyQ02Hyiqe\n+wsdanbo+guc3iLtI0rAzojPMA4TO2qCYny0LKk6VIS9d7x/svjecTRXaLVlVwniA+K2WFehajD0\naOhRGCxhz5XPY4JnpI/sPGJMREwlHujtJdCGA9YpXfWK4AMWRTcXdM0jx/1Huts/Y9/8B6raENo7\njEA9JIiyqXOFqSwxW5LKTE6NlOzXRkdzUJAavfgVu8tr9PDPdHqBqwW5/YE+NIBg0x5dPD5gUcl7\nZaMZ9CweTrQASbEboym0XPSTw9gyX7gyuXdiAp0R1SWZbf59UQ0d6s4ELhPK0syX+jwE5o4aidia\nav2Kut6BBjZXv+L66i1diFnlvYLNDFckmpIZhn/alZEdxn91hME4+qUxnKlviSFmk1NqQ1iSwEsC\nd6bOyfOxBB11y+hZPJ2zKTyzNhr3QLzZcvf4xO//5Yd4tCmtG2sMwUfpN+ORiMW5iod9xz//0ycO\n+57KjRJiNiEXAvTZ8rJn7RRnf2k5Zy6emxKz4FW+c9pPhq0qkfPM5ZTYKxZAe7wGLD2m2qLugi7Y\nGEw77uCzqqrI+3yfUrtp8tSN9aTOp788e6cmNZn1I2uuJ33LaPnMsYYXha/Zc89pjacljjF/H5WY\nab/GoAQpapV6nAnsNobtzrGRA3UIPLYmMcgOQbFWuOCeQMVBd7GtoLSywtoQE90GpbFb+vVrar3F\n9nvydkKmRcMYsQh28A+IvYopk5pgaOQSU21Qs6LVS+54w0G29Kq0e6VtWkLw0ScFyjSfZ8tnZJEo\nF1GeiLkmOC75HokpX9o967oGKjr/yKqqaJuG7uFHVtWGzc2XuMvvwL+m+/D3uGDojCD1GrEXGOLx\nBhkI1kg+A6ApInmk6/nogmI0mvMQ6Fdf49wl9uF7ut6gzTvEVRhXofQYMVgjqBpUPAzBsD6jlJJ3\npowTU0/WQk7fmX0d6zlpIh18LphFbmNi1ErXh24UdQ5dERLTSbstetqHWL+Jxys0BixQqbB6xFuL\nSMt2u0K7VWSUIWCMQ60dxhzhUZw5y73IBHwY/ExzGBZl6rkQD+7LSEQHs9/M7DkxC0sOshyl+yHe\nZMbQ/JiUHTolLCWskdFAl9Td4dUB+8v3Y/bmAf6VgdeXG959bPjVVfKyNnE/dchpF6JQpiQnDGvZ\nrFf8z39Vw0bojnGvZEz8LJw7Z7c0nqW9o8ETkvJa8TNvD6Q5iSCZ2zD07M8SlqoFLp68UOJLgmlG\nGR3HpVoSdIbnYxVCL4LKFbV9ZB9qdhfX1O6IM4oxDq9bCC3W9Un4lWRazfOapzYT33H8gxubZriU\nQf4yUzwZOFqsy3k5p70twW+E43kKtXxvquXKwtqbvj/iF2Kw9Q7r1lQVHDqh04CIQ3HUpmOtTxy1\notMt3njW7GnVQagQWxG6EOkJgRAu6GrLuv+ZY9+h1SvAonQY0ZiFJvUjZGk2TbBTAaP0YvAacHh6\nHIFACDta1kjX0vcenELfwqpQQp4pn3FOcATe6DhS7JllCa5A3NAdsX2DsxUtFvENVgKm+Qiuxl19\nSzBbEAura8yrv+L46R8wfYvYOuvEMTHpVLxkMBlpmuDJIpR4CDkNOuDp7Rq9/h2rixWutpiHP2Af\nfsRag9ioucYoEPYMaozjf9a0dObluQz57IQs1F9Kl8Nh+lxP+XzWSiZa6pTwlIf5syam48pPzxsq\nNWjXEHwHKF3bENRi3DW2smxWNQ+PbfQM3b5FJMSQc0TcQCg8cbMH2QwGc00gw2ngenFPOPsJzqNr\nzOE5mZ84tKEvE/IqkdkMV4t6Rw/LJH/ONEyK50L6y4xwZNZ5sGEQ2nzosdLQHD2Ph4BJjjnWxryW\nJifXlWhdcaaispZDH/h03/A3r5VVNXojjuOXYkxTmMzx9ZypbEoU8zOF09CzGmKhvQ2Vni6FGVgX\n35n0T6fi+4nzyGQM45lCFUNNdJKpgmC059X1BQRL6AJqBG+2WDX40IGJFo0c3WjaQhQISzjktRj5\npAyS28AMNeFQ2fdifc7LOXP+ufKcVj/ZfijpxRnGmBYp2WFutAYk5iMGH4Q+1JjgWLuWfQcqDiWw\n1gMbfeQgW/Zmlfb4LPR7Gr9CVaidxajHEJWTaLbb0K6+Yy2P2P4T4COOeTseH07WFEnOcRGndIhg\nHxREA8bE9FghnQns+x5TV1TOYLQd1t8S7MvyojlUJBG2IuWQIonIyYR4ZaKgvqEySrA7Qv+EdB2V\n3VJffY3xij0+YMMjhhYTwG5eU11+RdX9hPUpZ1qcxmHS8mJcIoSp+eGZLEFqSPthCGHza+TtX2E3\nNfsP/yd91xDUEdQB4UTCfBEmC0zxnPlifv9zzB8vtZ/LBMnTAs1tLx8TKB6fP6sAPqac0h7rAqb7\nRBCDbG6i8KMBa4WNW9G0AtUueuYZYUzuymAGfK7vL8Ehr8tw5vlz72tp0s69GVSG4rmZhFwKFMPn\njMme9jX/FV7TZFgmBo7l9r7l2AZ+uvPkTN2iAcHStB0PT488Puzpmp6gPRhD13VosPzpfUXrw1D3\n2J/F4Z8t03em4tk45GIVaY77WhLJ6fdcxyAApB9qpsRnFDTmsBQkeWerjtrV1Lg6HcNc0BvHE3Am\n4MUTrOfQV2zWO1arFV4bjH/AhC6GUuwbzGB7NUNPRgaYa09bHVPWO/sbL2einYspYPq563s+3meF\n74XnPq8dGfBh/CxXjSZhD4yzOAOHPj6wlSO1ObLngi7Ucf2LUEmf4L+J71mDBA8qOG9REbx4vFq0\n+oqVHjH9XZxOI0gQNCwfbM+CdNzCSm53XkAsdB3Nw09o5bh8+y2blcOEbgiqno9fnCvPmkNNDsEl\n43QH1TFuYsF4IFpzRQTf73l8usN34OoGDT3u4oLObem7htUqqr769FOUEoKycpdwcYk+/BPi/h3Y\nNUZ9zAZfYNVzWsCJSYuUKsmEeHDTXtHv/j37439DfcBYQaXDmhQkd0nq/Uy8PWeyWERIOdPWQn3w\nvNlkiSFKcS8TFj3Xl2TeSxYlFBJx8Bh/wJkNZvcVYmpEGw6Npz92VNbjFZypkyQmKQxYOJFGnxvL\nUp+W4Cez688VERlCyUWTcjarz/sVaz4nWE207qK+sp8hmxmB6HmnhcaenjXR0w0rWCM0viX4lr7z\nePWEIIRg6LuGi22FJo+4q5Xw6+++4O9/UL6+Hk1VqTsZKs/Cb2lc5+E21ptfyXt1WWMc6yoE1AGm\nmVEr4/7ySB+W8Xhq3VjE51KzYWFJJhPl2gRqnuh7QysVHjj6QC+Oyjg6d0HoOqwNrCR6PHr1iwLF\nWUHzHOyQQYEdzKPLD561Gr3YxgtrZf67nKvnhjCYxWXsXj7zGFSonKE3NV4dm/4j1giPXKMIKoqo\nQ/CsOSCkjBDqqVO6KlB6S0pSED2nj9RU1Rdc9D9w6D1d9QoJBglj36cCfgRu0IDH4kyPCZ7+eKTZ\nf8JtbjD1DnE91eoJDg2ELp0JfR7gLxyRYGLKGsxoEa6z69HGEcTQHQ+0bYO0PWYTD7wHLxx/+gO+\nfaBjhws1yBpjd/Gw4+ET1dVfs74E/+m/4V/9T4QcgUTipJSM46wWoPl4eJwgRDHB4UXxzS3c/gt1\nrXS9R8QxLPhx9n9xeVZDycJxNgWlizqYy5bLOcL8Of2Q6cVc4enz5X2yxOpAe0JzoL3/hHn7JVUA\nr3ve3f6B2/2P9M09rqrpq0ucbzE2RuQJkiE/Sl4m5/YSSefjpgh+wiCBREMHwpsunWWmJ0Sq2JvN\n0iMafrHmVMJJJFo6WOj7SPjGf7U4TO19R9cpvu9Z2waLJe8rWWOo6woxgdVKWdcG3wXa9siXr1/x\n1DgqfcC5zXLfFoSN+Z7pAmgYsWRqCo2M8DRO8HjvtA/KVAAr8Xr5SMa0PiGeHZ2vvblgGQWahRBj\nqRfGtKhvaXkDann/7gP/3/v/xsfbW/r2iU5bbHWBdEcCzXAEy6Dp3BuJrpUijIx4NAAwM02dMLV8\nhIb83GzoQ60L3hpzK9Hy3C2s4TPznK/nfdRTMjCfExnGntCcoOADrFeG+6cDtAFvHUdznd0LMAie\nOKTKNBzCGrWgwWCswwAhtCArhLgVoEbQoLQ4qL9i273nsb3Fu2tybNMT87fERgRBTA20+OY9Te+p\nLl/h7AWqSquOdb0G2RO0iSEx527ws/JiFokJeCW7AUwnP6ONkbhvSHPEIFTrDZ0SN6bFYpqP1M5i\nRdhKwHCkr66Q6hqOj5hgOK6/YOUbzP0/0Nz8NcZU5IPfUxGrkO+VaGKa9dWIJYSesP9I//BPVMcf\n2Vx8g/vmb7n/l/8cz3NJlGBVYwDtTATm5SXJcFETHRbF/PmRoT/H5OaOH58rnWYwfRY/z4slVhoX\ni7V0/SNBDKF7xO89fejoHn7i8PgTTnpCcIis6A93eNGESEI2Xk721wrCMjY707qG8cRZzXM7DChX\nv6wLTBkAyZ92SHdEzHCh0+eHzNMzzTX3e0m4WVoP+b3scDT2NRZnBWs6Do8PmHDNrt7QrFaIdHRd\nx+XViq675OHjHa0JbNeOyq5w9Zp3T3u+ebPDmKlJJzOQf6vW91wp14AMFCh+ltVPcHuGcHMB63TO\niuhMWghAQx/Oj+PkXpqXvmlAlHr9hA0Bfbzj/f1HuqbBq8fpJ7T3tL4ldA121yNik4AdHWQ0Mago\nf43jjhgcBakxYH0eswzWgnEQZ1bgL9AE5zh5fs0svzs6PsWEw7GfWlxfbsuIDBKk94Gubbi7vaVf\nf4fbvAJvEPHEyF0BoUdsoJaeB65BFK9xB80CPrRYt0aCwee1LWDxdFT09Rds+g903S2te0W2lEVm\nnDXAZCo3hr5T+uMDfW9Y7X4VEyikjBOdF2y9wojiQ8tp0vHT8iwT1ALpTSJLOuh9ccKz+cSkhRNC\ni2/uca7i6stf8eGnH6mMRYylj3mS0LDloBtMr9in93h/QDoDziEofvcbHL/H3v8jevk3WFvF6BoY\nvIR4SFPSBmnqRNCAiqU20VzbqiIPP8H+Z/TxB1aVwX35n+i33yGPfwBsPLAcnasjcs9MZgOCzBbw\nOWRc8+Uc1AABAABJREFU3DPK/0r5mwQ7PWFu59p56ZnTc1rT75O6Fp4zQz1gNWaJr7dvkM1r5OZb\nKu8xl7+iu/sz/v5fMFdf4ron/OFnGrnBvDYJfoaQcumNmtJMc3pGU8nSteYQaqrJkSQv5jiCuEhC\nFLpm8IjC+gJjO4HbNHJH2cfBxBk0C8nF3JXjis+ZYjwxclB0BFAEUcPd3Tva9iESBwFjFSsWb3sk\nGCqxuMohNooAxkDTe+7vlasarusyyocpzLmn5SWhaYpLicAXQkieh1FQWG4jWn5kUIhKoWBeVOdM\nfEbgi5aX+j+ta9b73E8bwzx2fUWDEGRDrTuM29P6R5ytEbch9B0hPOA0EXIDojJoN0OzAyMctxQS\nap2ertHxs8STUfEa6zgRJs5Q6V+iDc7vjfATxj3NcW7PlziHQQWTTgPG4BlCEE9AcAY6iQKvAGoN\nG3OM3pq+RujpTXQ8jLCy0TIiIcKZUdQlgBdHa76gtj8S/C29vYq4lOh7ADQI1hh8f0CfPrCuKqrd\nmsZBim2DlXjcKIiltkLbe6R+2QL0gjk0uWyTEaDQYEqqnjqrEvB9S9ftEbOibS1t79lUsJJbWv8R\nrxY5eMS8oqp/h7l4S9sfCU8fQQKqQicWdn+Ne/wn9P6fCa9+F5NmEqgUQtx9JJADYQtiHAL03tPv\nf8YdP4IPdP2R1c132Ju/ItgahOj1qBK1g2zrmCHVuDhl8fr8+efun4fveY0Gzi+Oc++dYy7PyeNF\nBcNyCcGjCm5zjTYPhP1tlJVDS2XX2Muvcauv8cf/AgLGuihxFfayKQOfpm9ZgldpyhVIbtXxypCn\nUhKy6RQXPwc+85LNdJNs8AWM5gxvqLLQAs4JR4KJma/TE84GfvOrb2jCJkbaSfzcCBiJGSWMgbp2\niEmxPFVZW8d3r2ouVkrKsjYxPY6S/XkYfK5ZfYp35wWwidAgEV98tgR9Zv3z66UWWOLEEj7PHU+G\n6xpQrVMnlGBWONNTGUW7FdY+0fbgwh7EUNdXiHqCrBD64uhJ2Y/cB8imuNix4Z/ihRlzHhEm/V+s\nDU7n539EWbZGZfNi6s0ZXBnWQ76WpIEc73i3W2HaO/q9pXc7qLZIsIjtETWs6fBUBAmRH2jcWjFG\nob9HnAOpUFIsYVG8OISACYHOQOAtW25p/D2duUjbaGlNiBKOj2hzi6wuY9Jp27Krjjx2glqNyXyt\noe8s1lTQH4CXvT8/I6luudMBzIhP1jLi9qeioSP4YxTi/QGLp6p39Ovv8LePRE+hB+r9J9j/K/2n\nG8Rc4i5/i4lH6rFJew9Xf4m9/0e6u3/BXP8lqKcTQR2I7zFBEHGoMYR2j3/6gco/sbZrOmqCNKzf\n/paw/RKfJibavBNBlaQFZs2W8wztpeu/pHzuAnjOSeC5e7+0rdGxIwa5FfFo1yCbGmMr2vs/o75D\ng8esN9jqEuSI0iPqGYMORFhOYTV1snh2/zQTQ8lmdwriUngtDvdfOghetPEMjMYqRiI1vlx81UIj\nXIBrxo2QD1hrfMlay2azJfQfcNJz2D/gjKO3UEmMzlOvKryv6bsu4qP3tCZA7cBJam/OdqcM8Dnt\nad7HaR1LMPwMYYzMwLIW9XlzsbhtcEYjP1/R9KtIFBNCtWbjP9KHHZr6pxKDaIdOCMdbuiBUq1Wc\nJ2MxMaJzdPKYzGux95eujThYDFdGXM1lGONUVxh1sX/D2i+vP+cQM68nm/3Hv2cbHselkRArFs+W\n3cWKplG8NoTmgc6uULlArWVV9XxsL1JOUbhyT2zrgEhFH1oq/4hITGAsGFRcjIIkliAx/GWwlqN9\nS92/I/R3dO4GMSkPzf4DdA1m8xpxK5y9YyeeRy94LD7UrK1nJ490wSPViurY4MNA5s+W582hS2aT\nEQ0mnwMA+yPaNenYeUvAYyuHXQliK+zl14hpULuhfv0tKISnD2j3Dn/XY6pLqK4QqQFLuPgr3O0/\nEB7/Ga7/Ilqhe4+RKgLo+EB4+gEXDlTrN3TuLfv796y2W+rr34DbxHNAJkAAK9Crjz0Xm8z4pQ3k\n5fLSfsXnMsllgrzs8PGcCXapzTlBHJ4pGMzEfJK/GIs/PEC3x9sa42okeIJvsXUVz/sc3tGGT1jt\nCV6gShveSiQkA1ZkDVBYXHxJs9MwOjMNMEAQiXE+dDgXCiNVkbNEd5lQnHoAzq/rTMLX2Wd8bmx3\niRBFOCcmmOrtA3y6faRrDzTHA7vLFU93fTxy0ivBJw9FEy0vQZWA58d/ueN/+y89X72C/+W341KV\nklBxyvhCmHronoPRlNBPxzD/ntvKIBIZ68lZWE7rnrZ3DmbL75zBmVnJ2CXqseKxAXy4wHAAFTZ1\njQ33HNtb+g6OQel7j7EG0zWI9TGVkuoEVQccNgzbFrm9oV8Tk0G6MMON7GF/HleecfB6pnyOxWi8\nV2ilZyvMz+ff404pBFrv8e4LrH6kCzW4KzbdPdq+o7YbOm05aoUz8GV9QNRz8A5nlUY3SPUmeobS\nIdoj2mP6BqsepEcxeFaocbTmFbb/iLZ3dGaNPUYGGi6+xLoVr6oG6eCx7en6A5W1WNNRIzTeQacx\nnSANQY8Ylp3KcnlhTzBPdrIpZ7u+DP8UWqKACn17QLzn4tJhAeMDsnqL7H6L3XxkdfNX2HVMrfT4\ndMDe/Ir68m+Q0OHbB0J3hzs8EqyAW6H1murqN1SPv6e9W6O7L6JH0v5n2L/D0rG++Apf/4an2x+R\n9j2Xb38L61fRYh1C3K8MDhWPF0MIAR/iAe88kkVZ+Bcwu6X3/i2mjiUz1Oc4P3wO8x336EZtptyT\niX4kAYJHfId0D4R2DxwIjx8QG3DSIqqsNyu6UGFkBbZCbCIAGo9JZJOa6tjgyZ5gqX3ruD+aIwCV\n0vVE9NLoXfsc7ObXRUgmypO7uaWBr06YX8Fsy+tStjeD+zRaYdzfC8FTb9aIW+PqFSr3oAZR8F5B\no1OZTaEIFYv1AS9KoAbjyXvyuVszCnxW+IldXDAtfoawNb4TnwmJ6RrKumLYQllYRc9q/gvPTol2\nnJuXthkUwYtgQoviWVVQ+YameY8cW+7bJ0Rq1hYkBEI6EpUC2hHjTSac0nndU830/Jov8EvPw3Yu\nvJbXP5emTLTlBc15WdCIfyXenJiZYTj+FpJ2GwBnHNDRhgpTvWbbfuSpFQ7rG6rg2Vb3dN2RTf+R\nV1uhl4qfm2u+2OypMITgozBrIIa8NARdo1boaGNSdd/gaLHdPUiDqkcOR+igrbesLr/BiGUlLSG0\ntJ2i6qmc0JtoXtX2Dmc9rcQtBxEwoQP972CCKfNTkgdymqD50stX4iZpd3xApONqd8ntsY9RZpyj\nPx5pfUvdtQRTY9evqcM79j/9Z/r1N9QXr1EvGLmmqTzqH5HHj/j2U8xQXAvH/R/pV99iRbjY7tCb\nb/D1NU9Pd7Q//Bd2uzfU3/0nOqtYr6nPLjlq+NRTpWvb+D0lCU5Pvih3/pIF/bmmqfk75547ZYSc\nbE2c0yzLe4NJJy2g6V6cEvc+WrrmA33T4swKBxg5EoKnr8Cppet6UMFrh9EOCYKY6EE3MhsdcuSN\nTgeZEeuw8a15/2EYSABJzjqaF+9IGE/tEf+WksV4LX4XZ/7yXhDRIqLZvKk6OBHltyUfA4F0DEQm\n3qhOBCqHqx3aeHwfnWZsStJq0z6gNSbm18TzdDjw+uYVV6ueTW2xVlKDOmToyCH1su9KgHjoOJ3R\nKwkmPI9fJ89IJowR/lGo0cVgxKacm7OaXVGSReIcgxiFklHjLffYymozTZcgiHouwp/R4wNOhP3x\ngY9NR1UJrjIE7TGuZmdAQ0uvPTk6Vcp3PsEGAIIObaSODHgwHVPRxxmIzo1z/nkObs8LJuP6UDWz\nujKspkdeBmHzbFvRZInGs8BqBROEQI8Pjq7+gp3/wFOneLfFrSq8fcW3ruHp2HP/2KFYdCW4ak1o\ne5Aeoz1IoNIOvEe1xeDjdxOoqwpkjWeDdnu8CohnJSD9PcYKeE+DYbsx+EZ46jsMFcE7jARqMRxU\nMFWN7BW6FuOe3xV8cU9Q5JTUzAmqIjFqgAZo91SuRo2wPxwwzuEff8bfvqM73NKvv4e2xh8qrGyo\nbYXt3tP88PeIe4XsrlAsxlusddjdV2h3oH34Ie413v497uJLdPUV/rjn8O57oOfm2/9AqK/p6JEQ\nIG0IC/FQrGZGrYrvY4Z5TQ425aI7D4dziPgS/JYJw+doc8+1D4wrdnyqMO0tt1MyvTkjjC8a1Acu\nv/hP6GqNf/wJ39wSjlC7mr7bI6bFGBMdklIwaEXiYVchefKmDibCfdKXiZo3ErjEMot+ZjPu+Pxc\nmv0l+yen13LfRhVwgM0MtrlfkySdwxoo6zeo9gUTNVytK5q1xVo4HPaoB1yMpiEhRddIBM0aS71e\n0RD497+54j/9zTWP958mbUb8HVl5TmJVwvU5E/p8bM+LgNEBZ6y5HOvzmuRpTQzbLM9ZK1KPJ+/F\nL2ZiBYiPK0YV7z23dx+pa+jEcehrNMT0P2oq8I5jc6SqBFN/ycpBb3yMGiUw7p0No570rXTgYYbL\nzwm9czjNf8+Z0oua72izHPpbMrsSdgNffqbN/DsLejIoP1FzM1i6qMuhIjQepL7hpt/T6oGV31OF\nwPunDZ3fsnZ7TPsnpL1ADFS654pbKuPwJuC9o7eGXnfRo9SB4mhVQD3OPyK+wq/e4LYVN25PH5S7\ndoczLRfVLc2xwTd7VhXQfaTzysH3HBpHby+p3SaOXTuWY1eN5QXv0LTMBrXjHJKnA5mho91/4mpj\nY6bfY8/KgWxe4w8PWLvFVRe4q6+wl19ipUatgAaq9pb29nu0umB19WtEHO3xE/3jz1Ti2Hz7H1H2\nBFOj+595evwZDg+st9ewqugff0LqR8zqBmPWUTq2YZDQNKTjy6oxsjnCYOZNmsgvKb9kY/vc95fe\nO9vWIHCedyU/a0qdf5+9G0QI0lHffItWOyqpaFdvuPjqkrC6xD3+yOHxBzbbr2nu/5nNZgfGgvjE\nJNzIuFL1oWh5Yg5ChsU7PnLq9flLhZNchn2ZAWDZwDM+G/mrzsybjFsBJcwKbXVORIYXAaRPZtW0\ntxmEj+9+pNkf+PXvfsVu+/+n7T+fJMmxBE/w9wCoqjEnQZNVFmtWzebudm9PZr/sH35yIiv3YWWP\nydxO9/R2V1fXdFdVZkZmBnViRAnw7gMAVaiZuUfUtJyGeLi5qSrIw8Pj72HJfdvRqydIh5jpRJac\nD6s9DGbgz3/xGf/11QcuqszuJlwt5Vsp4JZ9v6ewOlVgjr8fCfE0m+L+pxH5R+/LpKWemGfLPtPn\n0dUym6sUT+WPAV9dw+KvaLnjYJZ47jBSM2iHa0IslyZKqBqoFzg6Qoi+Z42qLznl6tx8HpynfHxf\n5/fPwegUj85fp0LMZN6cm5FnL51992H6lUsfSmpXcGLBd3iFyhgsnq53iF3yrH6L+DvevN3jqzVV\ntcSLw7uXqKmoqvdI8Oz7ijt3GWsQa0CDEERj4rxqiv3qkP4WVOmqJyA1Jnju+wuuFvdccsu+33AY\nFli3oLu/xUvNwBOkAmfuqeyB1nsIt1TG0PueQPsoXD+iCZanyHMC5FKrUPXpCIuOpy8u2XU9tdmx\nsYblxVMOpmFZd4hYzP33DNtXqKsw1TUsL5FqyerFn3P35rfcfvt3OKNUdmC9+YKw+hk+DLhe6biE\n/j0X/obw5d/C+iXB95h+iz98IGw/xAMZG4NtnoJbgK3BVqh4Qj8AinM2hvafTms2t3JnPma+/FSp\n+FMkvQfHUrZTaK+5vXO079gnlAnQAz1hVfHtFq2fMux/QPoWqSy6/gzBYq8X1HpAxeGaZ1CvCd0u\nbhQdTuYaW+WUAifAT3wnbVYknSN5Ov7/luuYfE5kdjIjTX/HX5rHdtTWw0EdR4qBKjYnJxNYmA/s\ne8/tDj682/KzP9FYiN57rArdMNC2h5QeYdjtduz3O37y5c/4v/2vf8eHA/z3f3ZN2dmIniFphJrv\njaMofpdC2CcALcEqLtmnEs/Hr4fMslqYl0scGf1dSTAa8xWPmGa8G3+MEbCKaM3gDVJtkGod4w3Y\nQ/gBMUuMW2HDACYyRSMmpq2UlVyyIKRzJvXH7N9zAupxO/nzpzDcUlOcQDG5Nx4UQgo4Hbd//JyO\nyBTxJiixjnhQrDJWTbICV4uOqzrQhy+w6/eEELU58YqXEE3M4sH0uHBLpYEu1Axmido6Ch/qcWJo\naDH+lpaarlohUiE+pJzvwLt2wbMKnN5QKzhuuO9bKmuAe4Ia+lAxmCXBGqpKuaos3U0LwZ/Mtbw+\n4WT5RAzGul/HUpiCBIwoh27PuupYLTd8uPO0g2FdL9Bqg/U7ZP05slhgLz/DaQ/9HXp/h7/5A4Pf\n0+IwoWMztOzVoJe/RDc/R+lohu+4vTuw615z8fRn2IXF3H1Hb9eY5gKaGrd6Hs0f/Rb6Lf3uHQx7\nxFaY6gKpL3BVQ2Ut3liMsSAUEY0PUIgHJL0Hta1P0FweMpGU12P+lbw25SAn19TRxskayfFYz6kG\nGhhCIHS3mO4eYzeYZh2NgRIwCs31z2m//0eMaZDKYjpFSCalNJbTIImjeY7cTwu6k873lk+H6WPa\nh4zdxmfGOp+zIaR8sDyCh1Fg+jkxLZXvzvUXEcX3yudfPWPfv8dZgzE1gw/cvd9zuamwxqaqFyGW\noBPlMHiG9o7/4S8c+4Pn0LVj21BEY47KYakVnfp7jnHpGO/+WMHsLIyONbtHLCDHBL0c4/S5tBAA\nOgVTlfRHRKiMwbiaXjvUx7PuQn2NElBTYfCEaon1FYhnQKn8DhWPiqNAlmmMSCwM/8Bcy1F8iib3\n0PWYgPE4TCFFshDdGtN7c3lzeia/+KCvONO65GsOBDQVFQkAwVPVhhfNLbVxUD/h9V3D1dM17249\nbRBEB7TvWLhdPEvWgjBg6bnknt4L236Fry6xztKEO6y2dLrEmxqjA0Y9EjxWPSEEBm25aQ3XG4Pp\nt+yGOtHwBb66wNtLcqqWwWCtUtk3yM2WMMyF8+PrcSZ4Ei4yVSHIRGP8kYrQ73h2uWZZVXQ60PsO\nMc/o7IK+u6VZPU1Fqw0iS3S1JlRP0btXhNt71rbCX6zxnaM6bNm9+n+wu/+WJ0+eMbSvCOEF15/9\nJWqETqGu1tjbfyFc/xyMIwyxxoHRAVNVNO5zBjpMt0UPH+jvfo8Xhf0PSaCWkWhHyvsorB5leuc2\n9adc5yTD8t6DG4NzSGz4WJmg8t2jMs8o4PF02/cs+i3V+iuCOUS4mqcYBggGtStk8xTd3WGrJVLd\n0ePJh1FF83Op5eVe5mM+Byk9+n32mdKk+gkayphhWBC6ce2LSiaTEWjC7HIMo3ZS/j0bbeptrA4S\niUnnYV27mByvSlBhGDzD0CLicNbSNA2Hwx5EWa/XrBYLvn/9gdcfDvz85ZJv3vliJgWTz6uYNBdR\nQVJYP4XWksd+jhlO++B4XqdM8/j7E1h/AjM92S96vCYF5LNLZlwIIZ9WMj2lMZoxKMYf8NRIdYFo\nIOAx4vB9Ty0CzhK6twR7iemiGdpLrEAlY5dSLvqpoPjAnP49WnIJk/L7j/d7fn+ddjL7Nb2n87HP\n1j6ZRQSDkYD3ns3a8NnqntvOMEjFwsD7HXQLy/NN4Ie7np3WmKbmw7Dg0kAIO9pwiZgVra8Q3VPL\nO7R/TWgdHmWQJcEYKtPGlBtbMVhDUIeKRWXJIMIPnfB8UVO5Dut6CBXOWDyC1VxlKjAMQL2kso5d\n2D8Kw8dPkUBPzoKLcJuYn0nSiIqhb29pDwd2u4b9ocWIB6uEux8ZDrcsD+9jl2Gga+8JhzuMtRg6\nmtUFNFeoMRjbY+prGlNx//Zf+XD7e6rNU8yTJd39j1iJYbHBOJZNzfD2v+DXX6OuTjlS4HF4DnEp\njUM2L7DrzyD0uO1belpEbFJs7bwe4Eeuc1rcp/oI/xit8bjtOUE6J2Wf1yonX1ehp6UITEnnoo1v\nhIAPLdXTv8YsnxMOb7HVKhJQqRDjodtjxeC1i/A2K9REdUqDYlLIMsYwY+4ZBsyjDCPsZcSqOLCU\nWPuAcHEMk7NrcKo0pHYyRTiC1ygoF3CWIxvBiSY/HR81XVNQVggejOGH24F6saCpawCsM7z47Bky\n9PToWFxcgUMPXa/8ZGOxX3/OvmsYuCmhk8xWhU/VpKLx5ZSjpDcbezijBT6UBvAQcZyaewSns5Z8\n8hbzd86ZvtP4w/ECSiLMs6Hk0nRQhXs69wxxmxR847AIGjwQz55DDdZeIKL0mgo+pPqhynT00TjG\nR/brxwSDx+jCY8Lvp1zxvUSJNQEnw6NkpEfG0LEnQxKK4rfjPsrYkISPiF4G44TrpuPlYs+H3ZoP\n7ZKfvei4a0Gx3O0UlsqLC3h916LeYyX6ECFA2FPpAm9qgjicabDDnt4aGitYW3HQhkOowViyGGkg\nHu0GCFHDf7eruV4Kq8ua/baPBTsMeO1RdYiBEGKqRiWCdodHYfkJ5tDjTVJK8JNJIKjStff4u3ue\nPPuKwd/hxODqBaIG01wR1s8YZEAP90h3T3P5DHfxJYNtECMEBKMW1ON3b1g2BxY//49os8Z0t3gv\n2M2XmPoC6PCphp0zvyO0O+zmpxgRgo2IETAk2jyigDU9VE20cxemjklCOmIgoxbxMBHInx8j1icw\nfQD5H/IFPNb3Q32V4zr5fpbIPkmF9D2u2kTJymjxrEHxeHpkuKWqLwn8gLbbWJz42PNwxCxmBFXT\n7dmwkg+KtGDZhPNHzL/8XpM/6UzB/gevSbuKYf9lTJlyumYPEbhcVzc/E3Rg1yv90LMfBm5vbnn9\n6gc+/+wSMZMZy1qLrRxtH/jmxw98dbngcAjsB8G3bWp70lVjIFK5imf0gY8JXZp9yQ/j08fmfJYZ\nHgleD7Wd3z/xt45zkdm3qmFcp5JFqgZCCAT7BDGWoBJ9WID4fTzE2ymh9WAXqGvQ/gNBBoSmgN+n\nM/tz16cywseY46fAXbLaOrOdFO+Nps/yKZ0/PrWe3ptSmVKnqQHD5bLiannH6+0Tdt5j5Z4Fnve3\nAxdAT6C9D9wtaz6/cLz50NFRjzU9D2ppWeKsYREO+KFlcJcEu2GPYWE8S/bU3NKGho4GVRNzCyVW\nYQrYWCWMwE0LF/UV17Llto+l1zDppBe1wMAQlGZp8Pt/h09wAuIZxMjfZoHODwzdPRfLFb29wvf/\nhhPB1CsOh/fQ3mO2r1hYsNc/xb/4U4JdMiQ/U5Q6BIY94cO/YZ0iz/4Mra8IwWMuX1Lv37K//Re6\n+gWrq8+Ipz9Y+vXXSPgt8v636NNfQrCo+CTMhFQkO9Ws8wHvBwJRe52EqHOz/OOuT2WU5559TBr8\nmER+3MaDDDYzvFGwToxQindCj108g9DRHt7HZFeJEqKoIvs3SP0UwgAMqD8QxKSgy3hK+jHbmZtY\nzkE67rwylz0zyXLupdko/11qgWd9UFlt0nSsE/O25uOaf/+QP+ajpm+doitFBGcsBGF7f8Atatr2\nlqHbEfw6pppAzBH0UNUNSxHuP7wjLBvuX2350G2pXe43KXjM6Nx8XAmAj2ohhX9oDoXkHy+Y+Mm7\nZ75/6N5DhPzc96qxOhAU9Lf4fIJXs/+VQRwMN4hcY61BNZb6s+rxsgLdY+hRf6AXEwt5BI+xWRP8\niMDwwHz/W65zps+H8O7hviZRYaQP0wu54enZUU4V0DD9mbXKE8aaRC0TqKvAm9vAoLG83NUagrXc\nDIsoMIoQ6pr3g6dvHZ8/c7y6HehzfeYgLIyh8ndof0+orvFmHQ/f1YHdUOFNReM6rtyA0z23rbD1\nDUg8kgkD3sQi3OIdd95ybW+5Xhpe7xWwRK0nFkDoh4qLZoHl7tG1+OjJ8mcvmf+oCIQWf7hnuVyz\n84bQ73ASCWfdb1nXnpUzmOUGmqcYu6QSj0mSnfYD4fZ38O5fcFfPkad/iVYbCB6LYHxNV33B8tmf\ns5I7tm/+FXysoiFWGC5/jsoBvf0dYLFSxdMHtEbVxNOFU9RTjEgzGFMhYjAPMPoHp58IcUmQy++P\nn8l/l78/tY/jz+f+PvfuyXfxxkhYshCT9UBJ/7TvqeoV9foFZvcB394h4mIt1/17rNtg6gU+9IQh\noBpwpol5bqnBc/MuP48mdjk/l/FdPo2gfhQmIhNR+AjMjhmjOVrrh9akHJORlLCe7ltR9tsPvH3z\nhrZtub99Q9vdc3vzYezDREkE7z33N7dY4N3NPb/53Qf+9//acXcozFyZv0te0k8LsS9ePZn7DP9l\nfu8xeJ1r81PeOek/42aBExkLzgo3x5eC2guMDGj/IzoIBkczDIg0YE3UFMwC7e/Qfo+xV1QGxCi5\n2EehUD0+1v+W+T3y/h/DUKPwFwrXyOPX7DzBk3vF1lBSbU/GQhYgiDo6bznUG7b1kuAuWK2WHLoF\nyoJeFngchJh5fd8NvN4aXm4cS5NK34Y9VfeW0B9o3VOCrNAQ8V6sIxiP0Z62s7zeL3jXbWjqiuer\nHev6DmMUH3wsPI+CCQSjvL9XvAZeXNwhYRgZPHi8jwE9je0ehc/jTPAcAciULsMt/dn3e8T3LFYb\n2qFDh5iKIOGeQTyH6jmH6hKtnsUyW0Isl20rut0t/u0/U4WAe/kXaPNZtAYHwBpCyrsKpmcwC+Ty\nz9hcrPDv/wV//z2iBicN8uQvcWyR+39Fic5uY1IOIwngGpCgGONifhsaTUIfMZqdY3rH9899fujv\nhxjbuWfPBYKU7T74LkdEZfzMhOgyPQcwhD4WtnUOt3pJe3iD9x2mv4v1V5sn6NDh9z9QVam+q0BG\npY+NKe+6LHWGECahRKZgmnPk+qG5Pwbr4yu7eUZz6YzgnvZXwu60rQe0pEzNNZ4UsVk5moXlydMr\nKusYDi299+z29wxD9Kt2XRc1SIXDYc/ucM/v//Aj7w87Oh8m9T12MJNDH5z/yaBlencca25wTiiP\na4GOazkBsOj/PMz1zL46h6Pl5xFnZ9881MN8qspAaF4AgvQ/4PVAMB61NY4BY1KOcBYimiVCIGg0\n9+d2HupLRGZc5CFt+BwOPhSp+zG68vA159YP4fDcaJz+lnN7abLsxYOGC/Qx8SQJSyyKYg2sani3\nSxpkqhYVtTDBqvChE14fKqR2iDH44Y5dGOiqFxizYggQjZzKEDyqDtSN9PoQhLdtzU2/oTINz5qW\nZ9WBpWkJDKhWSIjFt29vWrw3PFu1OIlaoIggtsdVHZtV/SgkH2WC54SiEdQJ6EY1cuZuRy2Burlm\nv2+REHC2wi4+w5srqtUzquUzzPWX4CoEofcD7Q//irn7Pc2TL+DJLxnsMhtGU9GXQDwpQnHJfOdV\nGJovWLz4JXa4of/wXwm+RU1NuP5Lar1Btq/iApFMeQIQa1r2Q8DZBkyMepJEtI6R8o/R2ib4fPzZ\nxyTDY83nMcnxQSYzazee9ThfzfyMJuVYQHz0y4YdxllAEFdRLy/p3/4a3b3GWYvsvmPYfk8lDZYe\nGw4Y02DwiM7R6UFzHHGjgcB4sLFO646m8yst8gBzncEg/5PkyC8Y20jqE9ON75iYnM4pDEcISYTP\n6ciP1+B0PaaoW0WNg/qCq4s1u+093796xfZ+G0vRWYN1grWG4BXnapytQJXtfct2v+f5heHnn1XU\nVa5uNA1j7CszryPNIOO9pPUXydaQaTrTHOc4PMKmmG+I9umze+QYliIyHmMnoyBaMu9J+yx7juW6\nyoFELe2Y4M8+i4knWIpg1UL1EmMN6+EN1vWsqo4lCiGePG/EEOQAZhHPIc19Z2CV88vjK7ePluOY\n791zAuun0JJPcXcUYJqgOK7v8RWIURG57bjXp5J6R00m6aPUyONUA14NRiVWOcLQOI2Fsb1AiAwy\naBSQ1HiUuL+3bWC/V5rKATXqrlHr6NFUWDwLwbHIeEgyVkSzGHTZe+H9oeJtu2SQhssmcG3vaNih\nohipCUG42XoOpuHp8oA1Mdip84I3V6hUj4LzcZ+gHH+cS9+SFiEAu909K2cIixVD+x4RT9NcENpb\nbDDY6iusi0RNFfb3P2DuXrG4fIpd/xVqGoIGpIgJS6tQbOJIEA2GQaAPS6pnv8IdfqB//8/0q5/g\nLq6xV79iefMbul3FsH6JpuN+VBXf3RC6LVVlEb/HuxpT1kT8uHXhYVDJBKWHgig+5hMsNb9z9z8W\nTZbHIeXf8U1mMs/4QNoUJGLTtVh3jxwEHXaYYcA6pT+8ZVEtCP2Wenkdj67a9zizJhgTj6oyUeOe\nGMlj48xRaJkgxjGqEJPlC83nY+ajPP4MtshQpRhLCU8Z/y6JcvbfTa2GUemZugpH7ZwSk+JO6sXQ\neaHrPM4uCYNnsXCYRthsljSuignz9YGYWOy5WFkYLMF7vnvbYhYD1pT7YlqxiC8PwemcbynBiExx\npATJDM/OaS+jey5/X7apZc5nZM6mfHAcg8yljST8qJbpPZJwpPRllb+LdUxmvB6HY2DhBqrqkmb4\nntbfM4QaT8/KGC7WK/rdNp1LGs8uqOgZMGfhWAxnfunJh49eH9vjcEofzge1MZ7dmdej/O54jJPW\n/5itN8Ez7UeyOTSfKSsaA+XUc7lytL3QeZMKuwdMSDEWqqiBSgZqf4+ansZVSLjF97dYt07j8UAU\nRjWtXxxrjqyeRiUGBlVuOstOVtQ4lnXHUlt6hV4NNhhutnC9aHi56nizVXppaHVAePwspU84T3Ai\nUlkAyaCMC2AQv0PuvuFyUzG0B/zhHhWw6y9pvvprePX/QaQnaI10O7oPv6M2gv3sLwguRgGhfpLE\nHrhUp60hCNYEvApm8TmL6oLu5luG1x8YLr/GXP8Sd/MbfGsI9XOEgFiLHm5wHKhshQsHVJ8hJmCC\nRq/AA8j3KZJc+cQfYzb91PyiPyb6c0asRskx34iLOBJ+iSdJR9OQoPUl1lZ4fwB/oN58Rth9S/v+\nO5onP8Wahj7cAxucOTCoIRiDBE1CyzHVKuebI/wiU05WSUq2NWo4Csgn1FJM84uyks6I7Fx4y2M6\nJuUPr0U55vn3hYR9tNbGyHiobibYy+UFq/Udz15e89//X/6W4dDiveOwP9B1A9amFBEN/PSr56z/\n5CXbu47/129eIwfP55c6QUnyp49fc9idMsnx/0I90JP3JgEhp408puVnAJkSDaZOxjbm13xdJjGb\nzAonJqL5eUbtX9Sw0j1VvYVgMX7gYK7p+xt0+B63WmCdw/cDPgjWeGzYor6ld2akK/+t12N7+VP3\n7Tmh+UHcHyW+k4bJpRoeN0WfMtuzsoYKiAMxBA/ihIu6493WotJH60+OtUgVxippWekte29Q3eD1\nA2IMK7vHhrfs5RlBYkLPuOfJx1nJHE0lHd8gFqceDcpBHG1vqUxgs+5wfqAP95iuZ9vW6EZ5sep4\nc99x2IHaf1eyfCmlM0oJWVrPeD34jqF9z+Liku1+iz/sqQXs8pJusHh3SXP4A11oGQgsLr9A1p+h\narHBp1SF+aKOcnSqxp8XRAE1BgkQUsWXQS3eXmCe/5L13Q+0N7/hfvUFFxe/xL37NcO6wiyf0Gsg\nNFccBqGVC6r6SYxsUlCZm/L+WBv9p2pyj717LgjknOaX+ziOlizbkPLZLE2XYnvZpgiiBg0DgYBr\nrgiVQ/c72iBYrbBXv8DuX+OHLWZxjbEGpMW6BWqHiCsS0bnMI4Vzfs5pbCbbQAqNMIf+l8z7Ucn4\neCMfPSKjtvOAVK0TkZ3aOu7j+K1537Mr0fjMi2tnYtg+QtVcsFx9zc3hB3zo4qkPVhBrQC2hE+5u\n9xBqnLE4Ap0JZEuzlvPMwvsZXHksqvXY3/eggHGsWRCDeEqGVMLweB2EVO5s1NyOgJTePu3+CF9K\nVfXsMOPJ4wMVftggOsRcZHOJOEPFLYQFYTjQezj0wqKxGLcABgY8Kvaki8eY1zT/+diO4f+pgu7D\n9EHPfD5OHCnaOTOm2P/8+48K9eXnIIQBet+xWFgktNzsLQ7LEDxYh5qAUUujWxb2js6vCW7FannH\nrhVQg8o1yxrof2SvT7FYojMtmuljOtNcQM2+ewWCOgJKkGjm7QZD1yypTA12TxXiPgn7QDArXq4P\nHLb3PJ4g8RGfoEn248nXMfFuJHPsQN/3DB7EQidP8N6DGKrlBX7Ycr8LDENNs/uGzfo5uvkyBdR4\njNSAiYzVCLmodfbb5Cv7HIAY3GIToIKNPkkdkFDTrb/GvfgFy+EVd+9/xC++RG5/S+hvMAKV+nhs\nTaosoBo9T59yHTOcY9/IzB8CM9idQ7qHIhwf0yLPaZJn3z/RqkeuMnt+MvcIIQw4PGIrQr8l9HcY\nV+Eqh1t+hrv8BUNo6YaWXmpUG9RcompH4no0I/JaZo1qtB9Ivpc1m/j4ORicNeI8tImzUwGdr82M\nMU+jK9uf7pTl1Uot6hSGZ6+0N/KbzgZqZ2JghireDzHSzbhUPFvSj0MxeK8cDp77Q8dmbfiTFx2N\n0VEbG2GjU3dwig+n4CoEJIFYXejYV5ebnoilHDV0jFVj33JU8EAzEy1aTQs9jSckVI14ctLw+Kcc\nLZLMnvUGgnF4LFZ7WlnhtUUR9tUTWqnpWdAHg6k3DKwY8GBtcoXM927Zb4SBjGOY4+cDGrGcby8L\nr49FN5/ei+bIEa8Zd1bZ8tlxnMLrGK8fvkTASKCp7nBmh+MDl9Wefa90mOipjYe1UiGsuQG9Y+sv\n2YYFte2x2iIYRJUhCNvwhLqxbHgH2pGLH8Qpm0T/J1ilbxHVGCApfixsogbud8qHrqYfFrTynM5d\nYxtH28MhrLi8usSYx32CjzLBvPhK0lIFKINN0qfhsGNdW9AKH4B+S20b1Czp7r6n0gF7+QW8/D/S\n3b5Cbr8DHEYqgsSzpsaNmYByjn7LyCgF1SFGI6U8Q5vStQ1Kb1fYZ3/FalXT7++h2VDf/jN2aIEK\nD4hUYCuIMSCJKT/AhORI8n2EUZXPPEioy2eO4f0Iwzy/ccqHJqJ1wjBh2kjRiZK2RVxPIwYNPc5a\nVDt09xYNA83qBaye4VUR2bC4+Clm+x20W+zymkGEYPImPScgnM45wiaRHsmS/Dn4cALDiamdm2Nm\nuCfQIzPcktQnEjzem4jDxPjmeHgkgCRmdyII5Q2d4avKm7ff4Ycdm3UNEs07qB+jYqMZN2laCn0A\n5xwvLmu2XcNh4Czdmojt0fdMa14Gv+Q9LOml+XuF8EZck3Ids9w7wv/k1YJxjg0X7x7BN6+HyNRr\nhtm5rXOWsUjcvEYFh2B1HylqAIend2uCWYJpUFXscIc1wqAhnefoCepj2bRTZC3mfDqeGaTPMLvy\n9zR2M6MzJeOL5sA0//STQXLG6jnh3jiOU3FuWqQsGGbDy5k1TN9kM/9kNagwxmHUsK48d4fovlIJ\nWKBmYF3domagkyf02iAiXDYDXiowgjOgGhPYD/0T6tqxdB+AA0KIio3EHMRI30OKXjcJEoYgJlUC\nUiQxTC+K1huMqwj0HHzF1j+ht0t0aLm73zN8pGzaR1IkKBKrC1kiIYYm7tjvb1guFO9q+jAgoUXM\nANtvMN0t9ZMv8dUVZvMF7sWvYPt79P67eKqDeERivl7WhM8TznwvRZqJpFwsHRlYHE6sFNEHgc1P\nWT/9EmsGwtBj3/8TldlSE6sLRFTx6dDdOUJMxPpRCP1R1znN8VO1v4efn/4utTryfESiJJbiLY1M\nuW9ZqtQs7PieoJbhwx9Q36N2ibolTiyBAFYI1Qa3/gxp3+Kaa7Ag2iImVg4VkzduAdF8Fp2kUHRN\nSd9EX0DOY4r8Y27cGcf6EViJzomVjBaFkvGZxCTNtLalsKJHBGSEv8EYO+UMjqNjJo3PGeFEnFQN\n682KxWJD206nlxsbNcAoE0STnoiSpWFXWVq13OzMrKzf1I9Jw87wncad0zQmRpOPDUsjLxhcAe45\n7ujsjbHlcgxHqzDSBkahbfrJrsBjHgZZcJg/L2fGOH4+okuuEpra4nRIWkXHwHKckqeOLg+3wopF\n1KPUVOGAUz8RunI2csRWZIKL5qipaeZH756OWUrYjrCcmzZJhSlmcBtReOpl9tYolOQHiyCxYi5z\n/Di6P3t/GmVQYdtXeKmwzrJZVwyhxqZo0aXxPF9uUak5hEuCOAyKxbNpYNtXIC7C0seqR0NQbocr\narvk0m2JgYsO1XgupGAQsSCx2pJqSGyQVFjFjPAXiMfrUWE1pFKfhm4w3IVL9rpk6Hn0+miKhJCI\nJjKesBGllhjHqQK+37JeNQRZ0nf3qCrV8ormxZ+DuwK3xiRCGBYXmGd/ATffEO5+wIhFJZwa0s4S\nPD25D5nwZqllstcHhc5dwPWvcJdfoe1r9q/+Dq8xSGbE8sQg/tjrUaL8iUzuU9seGd0DGmH8PW8j\nr985yVmK3WES8fLtnmH/CkdLXS+wIRaz9RrD8+MpEhqPqDFujFzXIUlLEmv+ZVhOkuQpgTAng308\n8feYGI9mKjlduXMa6DFkVDWFi8dn88FH59dyTuyyhSSfAThNQc+/YyzL5cUEn/RePh5ovs5EOUHh\nsG351c8W/E9/XeFOLDoZxhOjhqN2KBnRxHCMGMwYD32Kn6Xml//mId1hFCCOh3bqry6Z2sm+PseU\nP+HKYzUiWGMxoY1+I7uOp0MoxBD+IR71BmjVsPT3MYfZ9/ShQ+TMwatn0DEu2SS4fYpZccKLzPRy\nysjE8EbhvqBfBWjOtXrUXoZHuX7n1jULf3O+Pz03Z48CiApGKi6XFoyhDZFtPK1arpZbtn7DfddE\n/NBYzLyuFOcCu7ZCTNQG1ffRdiiCYrkZNqhZcOVu0HAAsQgOCTHNIqRYEZujO1VnezTZd0AEFReP\n0orZ9Ghycg1DjVSLR9fnIykSheQxquo5tDiq9YqnO9xx2+8ZhlccdgcQpW6eMLgVgwYa5yJ3N1Er\n8dUT3Mu/hLf/iIaacPU8WZh5dBNMpqaj70aQTAS3ND8ENfj1zxiC4f7H/yuh7xFbkU+fR2QkJid9\nnkHBh5jep16lCeTcvU9xop+PCM1+o6LUGDMBPzUwofiITgJD11LVL7HP/gYl5lHVmys8AadRgws6\ngL9Fmivw7zG2IkR1EBuiL/hYqBZKiTRJqg9PbnqnCPKZPjFpReNylz0Uz51yR/IpG1GoU4KG0exX\nDkHHDiboFi1T3s7rMWkpc2CrKu2hYxh8PDIpDdxaSwhmJhTk9VAMt+2ev/vNAbNueLoMxbjGB5NQ\nOu9yhHHWBjTlCGJmuHM8x1O8PN1P5TWPYAzFTpmsAZ8W+TxZJh7qa+rndJ3HT3pPL9d4e0FO1gki\nmAA27KNwHvb0boMunsZgpE4x0qPGQPi0CiyRLh5zp7wQ07wlPVsKI6UiO1luiEJgMaNSuFCYnbE5\n3ngQPufnMAbSJWY1umszPRCKNFIZ70c9wXC9btjtLIP3XMgWkcDb9oK+lxi4JbGeRkC4XiqHTui9\nRaoKaw29jzZ9BVTjWYE3veNJteRZfc+73jPIEmsUo+kECVUUj2T5S/NB6XGMRqNwHoKlklhM26hD\nGJBhi1hQ9+yBhYzXR06RmIN8JLImaRMIfb/jcPeB7w7vWLoLfAgxWXG5JAwHQogEx9jI5YPGZFXq\nJbz8C/T1r3EyoBcvOXYMPcxYjqWW0+dDiHmFKgFjhGEIDO0BK7GWoxgHYuPRNqNE9xEG/JHv/5hU\nB2OOCdK8dmDZXvncw5pn8Vsj85+Z94TEHOMfOYbTkErKARo67GKB77fptPgKHUIM3xdBNOC6dwz1\nJWJ3mOGWoRvAXaCaTnCPocNJQovauJQDzIN5UJudz20WTl+8MvI+mVJmdNzVYXzqGJa5iRyYYyfB\nmELO49jHOY4nU6+RmB1HC44dkHt0xuB9T13XOGuxJh15FaIZ3hTjkVjdC6uKeuF+39MPB56uz+Df\nA4JbqflNmmImxtmiUMCQOe5OJuRzOD1noJMAcNrGObicj4Dm5Luyj3N74/Ty4Ht6F/PIemJJRaux\nSozRnmCuqGTADC1qK9Rd4vWW4DtssmyV+DIJ3QXDOLqk+D3FdBzlSzL54uZQLBsqxO1C0hEmpDza\nMWdaKRnux2lTvj2r2XtCW4WgBmMVUxve3bSswz2dOLruMp3FGLAa8Ik7OYFV5Xl3X0U9VSzOCPgw\n0ScUCULAcds5VpXj6fKeu9Zx8BbER8Vo3EdMQkZaDElMW0UJWKyACx7hgIQ7tKrxun5IJhivT6od\nOtq/kyo9OidVGPoDDlhUG7Q2xLTzirp5igw9aiowDuwStQNGXFzaYDDmGvviz5HD7wm7VyPgZ1Uw\nTlaOUZqZ/U4/uSCxSPKBDZ723e8YvvtfWBy+5frLn2NcZICJMxTvU/w8zBDHoRxJpp9iAn3IrPkp\nTHa2HiVAxmcniAmpJmVp/nhkLhGtlMXFlwztezjcYQTUxrU2QOjeE6olxsS68Ypy2B3wPkS4m4wX\n2WNx3siceNcJYXsQXoxTOHqu6GVcxxImx2uTviul8cJ5IuNz0W9IOa4Mx7L5DLeTcSsaiig+EZaL\nJVUywce1MdMaGcGmH5OETHXQ+x4fQIzDh6O5jGM9xjUtfiaGNk9EZ5L4C232sWvCrfyTzvQbj5Iq\nTXIPr2cW/o417zM9zuZ7flB5D0IIjiANdf8+CdoOSVFvwh4v6+i6sdFSEUKP9jsI8UBwnXcZQaN5\nDU/xeO4TPKd9pe+K/NJSuJj7E+f4Pd4e14YRb45N1ad9cga+p3iiImMNXwNYzf42ivcSGw6gPnD3\n4Y7d23/Dm4ZWrvAGVAaMZCueQ1VojOew3bM9CCpRRHVikxZX4GEyASuBu6Hi4C+4rA8s5ABY0HjE\nXQ7kKvFqcrXkn3iouA23SPiQDmfYMOAI+rjB81EmOGjAZ03JRnOmIkiq+waOcNghErh68oQnn/0S\n77exXFpzQT8cMKbGiiJOMN5MkzEWLwHcNfbZr3D7b2H7PVm6zOQtLm1IiBgj/5RYuFmTFBAXNT4f\nhQRDGHb0H35L97v/O/W7v2e1eYF8+T9ily9AFeccpPqiJMfrMTIfI9IcQT4mmU7PPablPMY4z/V5\nnrkW3JtMZDT6WkXjj07PGZOJcACGaKYOAdEBs1hSrZ7T7V/jw5AK1RmGwwecMeA2YHtQg4Qe60w8\n9DJrBiUcVQsUBSsxHSUGsSQh5QxRnM85ztuMQk8Bm7g/EgGZCPNciJmIdPYplEWxTQ4uSfCa2khM\nsyDspcBVQH62Vtm0WRo1vCrbrqHdt2QNPLoHMqHJp5lkRpv2mKTo1YTrZYfHhLBMiBcpTk0ZoyrK\nwBgdz5Ok4O3H13HAzbHgMsfHxC4e2CcPtZ0vY47nU67DA3tC8x4CY5TgLjC2ovLvQFuytm3CgLhl\nzC82BjFLnN8S/I5gNzRVA0FPkvCziVpJwSkZx7LlpPgp6caJ1jX7+5xGNsenCffmAtv0/qmml+89\nKC/kdQtTgMlk+kxCzCjApmcAEY1nUAL74BlQDiwQE7CJpgRCmmOs+LWxPXd7GNIJl4rgTCwHKMll\nMvWZelNlO1juworrVc/K3KEFckpSrwhZKLHJMqqYAGJ6hqHDGvD2CQMrfIj0TWeVnk6vTzpP8HiR\nYoJ5BJZvt+gwUNcbpKkRDVhj8fu3dBowJkVj2Sa9HWK9OQMQq357t8E9+xuG1/8F1CObr5OUYhBi\nybPZZQSjyTeZKgwoxENc2x3DzXfI/hW6/4HFxWfY5/9nfH2VBLMQky1N8l1lTJjh5kME+XSDP5Sg\n/Ni758wVD33/0LNnNcTjPtN30bIn5LytkHxEI/FSRf0hBinZGitCvbqmu3+NLjaYFMZMfQVq8IcP\n+OEDstjQt+9pxGPF4wkp6VjGjk1SsZKnMhWEyM7xuSCgOtVB0WJD5woYeVIZzPm+asENC0CUxHt8\nTqcWpz02Qmr0qUz+yElyjwc2P6zlj+sgZYE1gRDodu/Y7W7RdABoZMSGEEzMEbRZKIjmUgQG7xn8\nQI1FT1J+5ej3KR4+Zg4TKd+N83vs/dmM5Hy1k4fw/yENv+zrsSII5TXzE48oIYkOKIO9xoX3LPp3\ndPYCqweoFmAUp2DUM+gAIQbjyeICzy1IIKft6NhwFp4S7iqjVnZCLuQsYp7OIcNJCsw7gkG5H+bz\nnu6XlqRzFqljeE4+ytjMJLyR3ABzzbS8ggi1rTBNxaE70A1vUXuFlyruZexI2o0VVk3LTVfF/R3A\nawW1oNse6BGpQQQJiU4keKjCvheEC9bVDUbv2Q8rjIkx/AaiAU89Ygw20YtKO6y/xYjixeHVZtvV\no9avfH2UCUqWGPLGzgtO9BF1+9s4U7fgsP2AqqdpNtRXG9pX38RqF/oMZ220uZuY94F2UX2WuMF7\ns8S9/Ev8238kUCGXL5MzeCqgnEtXiWqUCJwg6hCvDP0dw+23uPY9tW/pBRZf/Ufk4gs0VCg9Yokn\neKuCOFTyWdxSVOvJHPXj1ymSPiz55mfOIfhDsP9ovzOiL9MBsjOeUZgIi80bv0t+QwnRPyUJoUPA\nW4dbrjn8+Gvq2lKvPyNs39F3t9TVGiOWumvZi0VMhYR08K5kCS8xEDkjJIwayDnGnglIUTRZJP0t\nHC/OCKeRqYZRuyv7lGnS072xt/ypJFpz8+HHmEz5dyjnihKCcrGpefnyKa5yKS0iEjEzHuUzTTVP\nUwMEbwjeomPlJ0GMyZRrmkmBU+eEsvl355nSw4T0ES3nTDsfe04eGWspWB4/9xij7MXjfExj8e4a\n8fds/Ad6MSANwW+xRtBwwA8dlViqoWdYrjDdFjGpasw00wn9pg8ZSyhuloP5KHwYmZGgIURmcCRM\nPwSPSUCbw/FTYJ0tJ+VaysgR02G05DzVsr1oCVQRhn7PF5894cdbgw87TIAuLNmZGlRxRlk6TyWK\nN6tYRjEIRh2mMoiSCpYL1sc4A1ICPEm7Mxh2neLdhovFHb4LtH6FUUcQn4RgS6UCpqPx9/HQZHtB\nMKBDByGkmiuREZ7UwT+6Pl471EzENZtyMpAGHej2N6jEivj+/kN06tcVQ99jpaUJ9+x+vMe6mmrz\nGUo8vsiYeJKEhCEdbisELnBP/xr98GvCrcFfPEvpGabwPcTQV2MjMrSHH+H+e+qhx4RYaNVffEl9\n/TXYFV4ZT4pQPCgYtRipUGwsscRU/+4csczINKLFGT/gxy5Ntrso9Jxv/1OY4zQWza2msZuxQjwi\nlCs/msTGjZUTyqcaL34IEDxsv0Wlwu7eIM0CqSqG9p666ZDQUTUbnFvTt6/x4Z5KahAlmGjUm23Q\nj5h+ys09fS+TBK3H+3ZOlDMcMpOXtKFLpFeZ9MiRdJ2FsZ78KROZQEk1QWcE6fwlqimoO43Pxj1R\n1Y7Rw5mFgBIXjrQzUbCyx9UfEHGzx7T8MMoBn4o/aYqljKHJPzMpKROOPMhM5/0+ZLb8lCjoUYAI\n4aSdcwzzuEVBEI2CnJUDWEUYqPoeL0pgRdCBqqpYuAu0e0ff3wE9UQMcUGqysBNlBWXC4rmL5iFB\neSamldrhfPKz3w8z92NGOG/uGGYPaYDnrtk+kKkcXtlfvqlqQSx9C7fWslo2vNs2GAls6o4mvOGA\nYxdWPK87DrrC+5hIPxjDYJQVDSKK0x3O1ATJ0Z8xQjoaj6JJ2uDpB7j116yqe2r/ni1PIwwUghiM\n3yP9e5SAVle0ssLpARMOGEl1SNN++ljgy0dTJDKQ4mYTjOaoQqELA8PuDjQQhi3t/gAm0CwuMXZD\nF5R6+QI33KJv/57Dh39A7DPM8glheYGpV4it4vlVxoKBoBvskz9D3v4zVgeGyy/SOOJuF2PQ4Dns\n3yG3r6nlANWaoTOoDDSf/QqzuI6ESzwmMdDIPi3qw2iOE2Ek3FrMccKSh8BypFF8AuExI1M4v8E/\n9t1JP1L+knHso3U3wWxkIpnAjqYXUHzc2moJesBWS1hcRnNDu8T4lnrznPbuwPbtP7N68guMsQQd\n8OLodYXjHYN8HqvGBMZ80Gxy0bHU0DzCL5QmoZLojSyHObQKGJwVIrL2KWYmqE2sNTO0LDhkZnte\nYxoHMHb9sCZydv0FsvQowOAX9MMtxtox8V7FoCG2MaZIZHCJEBCG4KjC6pxcNvXzyHge016njxPM\nZ9Mf55/bOyUnWRN5iOk9psk9prGeu0oNERKIU7tOFcsO1QEZKoJ2dCxiPdHDPc5s0XqJGIdVZe8t\nVSUMwzu0b8FuClCmEoBZ8zpjgTh3jQJoOf9zAE00VLI2OL6W1yFhqk64d67/DLeyvORHBzhuzzLA\nZqJMx5YCyXZOwItn6Bw+OD5f9Xx3H3g7rGmsUlc7Vv0dL1aWH25TNRcVls7zZHEPCLUVpG+p3JbA\nEKtTEYvvB3GoxAAwT4UGwSts2w1LB9VwSwhrnHU4/562e4uzC0L1jE4sqBK8JZpAB1TdCPuPrdxH\nNMGs/3GU+yUxx6pv8d2WhYGF8Qx9h0Gwq2fYukaqJfXF1zSbC+zmGrbf0739A11rqIzgb3+MhNhU\n2GoN9ZJquUHrS+TFXxPe/Rq9G5Drn2O0QlXpP3wP9z9SV2A2L+jbFt29x10+w1x8hYoj6BD9W0os\nCE3WJgc6baMUbrNzNmpFcw1wkiIy8kwbNt8vkOVTGGZOG5jpJaSjRM4Th/Gz5BT0Kex+/L8cp2qq\n/pK/Sz2aYrgJ6QlpvhoRVvWAW6yxzRX0HV5+QFaf03V7qs2XmHpDu79ntX4JEgiH96gKwVqcCC6k\nqjJATCY2CXfOk5BjUleaazIdOSdIz4jtKKNPTA5i0E8M2M4TnoIZYNr4OYtk6psE46RRkohCFjCk\nYBfCuB7l+7H9eBB07qwipuzEPlOCfbawFMyvhI4gMTVFlX5Icy0AWWpt5/19E5TnjCULQXNid3yV\nQTGqDz/3kFXjU9wD5ShLLST3f25fTL7jo/GKIciCwVygQXFhoDcbqBTpdigGVYt0NwwKisWwomEJ\ntU11KcO4PWOQiBSWm4KxHc3xo1fWXHXSMvM2nO91nejLvIERJiUsHtTyHhnXhLu5neM9NomNeaAa\nBKkNopaBnm23AHF8diX88GGgGywHueCq7pB6oPNbliGwrB1PFwfu/RorPSYIbXB48xT1gh08Ij1K\njxWPo8OJxlN9jMH4it4pAYeVFu1+wFYW6Q/Y6gp1TxgQRPvEp030rfs+lsoLATVuDJ586PooE5Ts\nLBvpbIoW1UDotqg/UC9q7AK6oaepDHb5lAEL9gqaJd4sYBDs8kuqL68wH16x2+1ZPf054gZCu6Pv\n7uD2LYc3B1BP1VyxWK3wr/+RYbvDuwVVd0PdNNjnP6XrWw4339AsVrjP/gxtNojXSOwk+qZEQ0zq\nx8RagQaGto1TsXnqZpqfzpF9hhNkbWb6PH4/E/bmfqXpuUnKi2a7ojh4YU46vwlk9ilHTZUsddSU\nSLibCXdubXQY5j5zayFWZmh77OI6so79jwTAt/eYek21eIZsnhJu/sD+9lua61/StoFm9RwnO4JE\nP6uVMDLCMbBFM0M5t2lP4S1Hf8kRbGefJbP5+VUS1MwoMh2T8v3Uviox8jkRXi1hW1pDKNZVJ91y\nvg6xbZOFFgXnLF57vCdaPHLFEc0SuYyENo41DrSyFTGHO5n6irllPJEC/0oTVp7/CMkzODrHuQLq\nM6L/UJDG//+vcm6PXVkYCjiUGscOzDIe79XvCMvPCTogtAw+0HuPLq/RfhuFEhqMBkKUSkaJP5ur\nR2GrYMBzUfbhYY57s7Qzp1GffX4mQOR1Pj7Ga97bHxOkVLJy0WQFYxI4RkFb81+kfWYSznuswn1b\nY8XzfLPlzV2MC13Xwu2dweuar5/c4n3H+72w65Rni4BaUPWJPnmCsZFOBwte6CSg2uNsRxU8NTcs\ndIgBLwTUdqA9g9RUiwXCQI/EszeNRekwwWHCgHdpdwYfD0t45PqEo5SitjQmfRrI0Tn94Q71ntVq\nQbvfo53HLeHw7g/4m+/Z3r9D/Y7KrhAXs/8xMeJTDzdst9/EsNbFJcZWkYDg0dDB4S37bUDuXsOH\n3+HVsPzyP2AWX3L//ndU/sDli1/hF9cRSXx0uOoYJWgAFxMuc6oAQrfrY+CucWl2OeCiZAyncJgj\nrXA+u6T0D07a4qgx5GdSE3P7PtN7+e/x/jS+UQcsiHo0aUqxzzTCZFRi0nYtCaFMofpGBYY7jHsK\nhxuGwx1h8NTPniDNBRoM0NBsfkl/+1v62+/xCG7zFHZ7IBYi16BYsSkItdAE0uSMzDWEcZOrRil5\nNtfHzWfHvthRjkkmJZPNwSMPi8QslP0jY6GAsqEjwX8a1fF6MK5msRiRUIx3RRmSYc5JSLVbo9nY\nSCzkLJL9jRku0Woh0vPkAlqzxw++6LkUribBqPQd5THNQXgenufgfRJ0UagMj/nHP2b+PG86PtoM\n5cQ+co3CDKmyiA4E36F2SejukGqNMcvIBIdAp9APWxq9wgMDPQ5FTRUFfoRsd4nIMMfL2dBkxLqT\neR7D5mjUnLBRhWiROWZ48bnHTM5lv6UbYCY0nXmWYmln90a6kd/NscnJoqKADNzvBLNc8dn6wKvD\nwKZR/BD4fLPnw2HJ+31FY3ouqpbaWJwY+rBjqe9wRlH1DEOPRWKxAhOrKGGEXkDlktZ3NOZAVQ24\nsKJVh5U91u8wpqGWgDQK6kAU9YHKKgfTEYJl8IKGxxHp44ExSTKV7N9QiT/G0O5ucc5x9fwJ33z7\nGg0DzjXYamDo9qyrDcuLK6rLn1A1K1Qc1jhUAh6Dk4Fw/wcO257m+mdUizVeDL7fM9y/pjm8o3n6\njGWjvPnxR7r9Hbr/33CrKypb0958Q7W7IawuULtEbD0ibxToQqxYojGcRsNA71tqm5igZPPiGapH\nJpQTHEZbQsKcY9DqMVKVDDFJmCURy8xp0moyA9cpraFkwbnr/McRoyyj2KZNe34jGjWJVXpEA0F7\ntNsy7O7Q4FhePMfWl6ADwQZCiKkv1fUv2L37Z8xwT724pNv9HiNRKBK1s7mJyBiNm5lhnF4Yh5+J\nyXEk4kORcrPvRmbI0YbWmPdFxN3of0y62cgUkyhjpiLUx6bWLBRNzHW6jtd+WipNAs40qDc/vmOo\nXvP82ZonV4s0/ehbNdYgQyGopN5tKtq9Nh397l94010f4ddEmktz5bHp7py59KHrWMP4FD/ecVDM\nfysjfMiXma+H5hD3qKJDSz/0OLuPmWHdHhbXABgdAIHqCTq8wTUNVge8Dhi5hO5HAg4WV8kYlEzy\nx3vnQTA+HNQ217iz/694TrMtIYwC3Md8pR9zn0RtdSaenVgCxr7OSBqZvIwCd2LQIqTkdYi524ab\ng0Jd8cXyA5t6z8EPvL4JBF1wNXLTgMfGE3u6gYXu8OaSQZb0KL1JaVUSaUgIHtRQcWBtD1hR9rqi\nqzf0vWNdDzzZDLy5FdquAuvBexorVKanqdqYTlFVYCwfQ/+PBMZkiCSinPwjhlgGqt/d8OLZFcvV\ngn0HGKGpn7D68r+jf/UvoILv76luv8XjCVVDMCtkscEsr8AsaZ7+NWb1its3/4bcX9AwwLClXl3h\nXv45dbjlMAy4hcf5W9zFL+HZn6KhxQ49fXeH275BfcsAiK0xboVp1phqjbdNIlAKGtJZgoCp4vFB\nJPU8E7v5xAtQREKakWhijpG5ASnU/ZwPrDCjjgRMR4yTUXul0IjilQNqShNJ3p4zPahA2tzXJMVT\nPJ0kyzxTBcPAsH1PCD31k5d4b/ChpxIBDEPwWDEEE3N86uqaNvweDYJzFV66GA6dGXihzc2siTr+\nN86V4tnp69OIxDIAY9QCNSX4pg7m0xWsCMZKNH+F2G4ssltoNRki54iYTIFGD/miJt5V3AlSHBQt\n9ANcP7Ms6hTJZ1L90KxsyBxekhYziOe2U9rdPc2Ty0L+KsaaQTjz251nPJ9CSB8jsPrA848xz4eE\nmQcjIvWE9Zx/7ugd33eo3zMEUOMw9TUBhxGDV4+ayAwdwiCCVBtq/xYf7hnaPb0K1QJINVaLUJGj\n3qdE7zMDm2m0x4LBWYEkMZacPzsu6yOU+2OapkxbMdGFpMDMBKRMLSaclqQUHLebT24QwCQB1krA\nm2hFqk3PszUMvuJDG7h+usEHT+cb9p3l0Btqc2BTNRyGAc8lfejxKkATMwAFSFGiaMeTKnAhN7RB\n2YY1O13hQzzI964zmL3hxXXH25vAtjW4qsK5jhrLcHDc9xJdXsMeK/+ek+VHyT39DaOkRBgQv+On\nP3uK146mDjRqWNQN3lb0wbN6+nOqZkl99RLvD9jhgNnf4dsP9Le/R8TSmRpTP6UZDvD+D7SuYfn5\n32KvPqfyH9j9+F/p9ZLFsz/DNgvCh3+Em2/g6mtkUWOXl8RTfjzWdzC0hP6ecHiN3n8TiWS1Qd0G\nY2oqaxOxyVOPGkpmNjMtawaMjDuZeOns3on/4kizic/pESGJElWGdfHY2KYAIWviBSPLgTL5K01m\ntTGwg0L6mxGp8csozYkQugENA/XzP6Vafs6hu4ml7nRAjcWGqFmprdH9e7AG0zj67kca2wDNyAeC\nymj2LKXNiDZZ0i3HksxPmbnrNNy8ZVUVc5YYl9CcPofkkzNGsNYwhFCszamGkWE20ggpTLUl3Sg1\n+/zrCE8Eor1zfFlovWF1+YL72zu22y6tbSCm+01RepkZR8Il+C6wkA538YRhWBwNJcF4ZIyFEHDM\nJOFE4h/NYcXXH9MYH9POyv4fZHDkZ05TY0qf1PGYThn+0bqLEARcf4dvNlA/RYzBhAD4dPCr4mSP\niMO1HwiLl4i7wuBjkeWuG8c3oYo+rP3NGN65XL0kbM7M09Nrk6CaRdpzUc8Tvs0FiCMQzLot1mQC\nz9hP6TcWmTPA8v1syJD0hxIjmdWkvRQsS+v58uqAEwhuyXbfYNjxu/cVlbFU1mOlY123NDaws4L3\nHV5aKrtgIR78e9rg2Ps1YoRKe56uPZvKc3sPe90wsKY2Hmt6jLQgfaw72sHXTw+8et2x23lkIewJ\nLIwitAxaIXbBoI9Hzz5eQFsLpNSsQYCxgWF/YL00rC8cNzdCCBbBsFw2DIctmupJ2j4SWKsW69Zw\nsYkVMYaBw/YD7ev/zIo/UC/WUMNu9543v/6fseuXvHxiCWGJ2Tyh6/eYbkflruD21wR/i108RdXj\nNcRAhJDKqxkBu0CoEL9l2L4m9L+NNQT6d9EvKZZBPTaKiBFlUtWJhzE/Jbcem+w01r+bTHKlv+qM\n9C0yQ75Ry0HSQZKTeSVowSQ1h1abk01QjuV831MZKkhTDXGH+HDALVYohkAPSDyNWWIUsBoTay+0\nt+B32MVzrFhqMWx371lfXcYao0ESo88mypEqZlkjjT3Br9DKJqIc1yJLs0o8CUBmsyl14XJTzwBC\nr8ow+PG5Eq4jw0FSUYaRUjBlT6bnzBQhndEjM/2TK81jPJpHYLu94w+vV1QKYiyCxgAZDWPlGEmF\nG8RMprh9G/j97ZrKXdLufyiY1hz/ToWLI0aYxnGszaqcMrbyOqflTf2VfaQ1e0TjjDheEv/zbZ+D\n6czPfsKXFMREQmYUFi8n3DMSY0oMGO0xYaCXJSp7VDqEBrUVoVJk/z3Rp+iQVE6xxK5xbJrujTyw\nFHZLIWlakzmDnPBUUwGImXn0ZM6Zac5dBlIg4Ajj2FrSVSeBO/NyTQsgRbtxy837zyX/xhZECRh8\nUAbtEeN5cdHzcqXc7CpuesMvntT85gfPum64ci2v9xZDRRAHKnyxfouYA0vTYvxdOlBhwEjHQm8I\n+zcYJywawe+XvL6P5RiNHdhU+1jg0cfl9CFWWtq3jg+HwLNnDncfeL1dYsyAszsG0+NtStg3lseu\njwTGnGJkDCYQDsMd25v3vPp2wLunHA6BKih7sZjtW0LfMmzfYFyFu4slivpUyqa7e03Y37Jev2Dx\n8k8JbkHAEvxAdf8j3evfw+Ed799Z7PXPaayLfkgLg7mgevE3hHe/Jhw63NOf4SRK1CQ6nM9KCyJ4\n+QzEYU2g0QPN/n8m9O9jrtYodU7ELi9/ltLGeZ/VpqY/swY50qgRSQtkzOYRpnvoEZyPJWORMWhi\n2lwj+p8Zy3midjr+gDGKisWHnnr1FHFLuvvXiCxonNArKf6ng0MHwwGzfJ6EiEgMhsOecGEwueqD\n5k2txeZWjkvfTf7WFBGJjtLnnEDKWM+wJEkZvKcE4ug6J9PIJNzNzJ0zEE6wHSEXKclsDuf6jWJA\nrnML2/v3fPuHN1yv7Syc6tgMOpGyCDvpleH+FV3/Lf5ImM0aQalVHU8yapWFia2YRunvPjbbPeTH\nm2sRpZZzjnMpqBzh3UPC5Xwck6laKS0uU0rMcTshhiKZJWF4i9RXWHXxdATjkaA0vqe3qxjJbAxO\ne1SjZjL4DkVAo9Yomk2eJ2yQcbZ6KkBMjPH8e+U8Q8oP1ELILQWG4yt/FzTvlyQkF/Sg0BvH5PNS\ncHpI3Amxg9jGGfrhsah4gg7UCF88vaM2Nb9733B3CPzsufDmTUdAueuFr1YV1uy5aS1VPit2aOn2\nHYfDwOJ6gWDw6mi9w8iSxfqOblB2XWCxgiA1d/0KI45+P8QqUJpLXRIFSISuswzvKr562uFMy/f3\nDhFhodAq9ATMR7x+Hw+MSVcGjlUIGMLhnrY94LnCL54T+A21c9TP/oIuCPVGcFdfUa0uMKsrdBjY\n3b3G3v1AU11gX/5ZdFxLhTEW6e4Z3n9D45bUf/Y/sVw+RXSL7F7RDwFz9QJqG5kdBvfFNf7b/8zQ\n73FXX2JwZJTI5d2Mxig8UYPHo8ajIRTpA1lDyduqjMw6Jtwlgzz6Nr1fEtTyibLmRBRSj32EU5/j\nO6VPpZA4TSZ+M/PosQQ6v7KJp9wugk3pLxbf9li3oWk2tKHncPsDbrHCGocPYIJnCHeY5VPENAz9\nFmMF8fdotYzVYjwIBitDGkWpnSTptNAUROREAp1AMhFPDSl6Mmltx4SiJOBjO/m7kfjrmI85MtgR\ndIpzUVLsvU8MbBIxTsc3Eeop4OH0SZNLcKlSO7i6WPH58w0XF+tR08snRuR5mzT2LIzZhWW5uKBv\noO/3s5V+yNdWfickfMnBQVkdL65zczin0c1hO1KiWb+z4CYt8fNIW023HhYyx7dGGE4PcrowqrHy\nk1lH8+bhFaH6HO8cRh1WtwxW8CZFtxuLDw78FjEaT5yoG8CPp9zEdg3lYbsP4V78PP0+ZoTH8DkH\n83NBMOeCj7IFJFszxr6PYKJw9lzPGRjzGORUrBj7zTTFV1SN5cWl5TDAm12glgNfbAyrauDt+57r\n2qJB+bA3bFaWZ9LybmsZzIK+u0DCG4ZeuW8rrFyiwKoeeHERuLlf4rf3VIsFXhqMHLiud7S9IDR4\ndYlmD+ABE4tJWFUOQfj924ovX/R8Zlu2d1BVhl0/4KqK8O+JDj230YIoamHY3mDEsFxc8ubg0aFH\nVjW22hD276K0ooIGZff6t5j7H1ksL7EvfobWVzFAIYW07t79Ad39yOLyBe7ZL6PvCU8QS1VfsDi8\nZvfhHwiLz2kuvgDxGFtjvvhr+h//CdWAPvkaNLmto0hDTh0QidGQghC8x0lMEBcigYiMRSiLFI9z\nj9gynsMdv0vu5Cyojv2dXuPtzPCUR4jMKSGPsJ+qSkQpfL4mZW9ZhqXYZGacytwUIllkGLaIKsPh\nfSxK294wbH/A2i+wIgyHd5jVC4xxcZ3v3iLicNUahlfTCQ86zBl+1uwo5lpow2cJOQIj4Uka0RlG\nc0LwjwmxMv/7+BphotE8jzJ4nckTJW05WVuRs0QK0nFBIZtc4/wvL9Z8/uIptYvHKRlrYrWQ9F48\n8iqGiFsTK2A4UV6sDW3zM968/s04koeZ02x4iQlGHWDU5E6eO08gHoJ5xqWQmVoGVhYAS8aX/8v3\njHB8tNAYRpbNquNLE56Uo3hIx1IsahVTP0O6t2j7HfACYy1WerysMDiEjt577DAg/hZljbGxjJeG\nATGLUYjL4TEn8BrNiqf7by6YnteoT9rLbz+AqzNzZ963ZVczXD1qQ5hbqYp3j5ni8VRGBki0Jjhv\neHsD71Wo6oa+DTytlcvLC379Q2BQJZ4podzeWZ6uKlaLlvd7GMSwrLL3vcca5aracXFZ8/ZO2W+3\nuGbFThf4VqHaYBlYNB3N4Q6c5eDXDKFCnI9HlalGrcxDL4ZvfjB88WzF+vqWu1ul6j0+VMi/5xSJ\nGSwlq98CvsMfdtRVhVs+Yf9mC+qpjKG/fY3vbwnS4O9ewX3PYn1F/cXfoM2aoBYjA6qG3e4D4cPv\naeol1Rd/A1WTFrlPKGjxIvjVlyxXV4QP39C+ucVe/BS7WiHVBe6zv8b/8F9AA3L9NRiDTXsqSMaA\nAaMO52PgSzz7Lpmr0iNJbmZun89E7ij3ikkWHh9LVKfcGBOjKd6XjIMPMbzjTTL91rFRGXF9Jo2W\nTI5pgDKK3YWkLqTi5QEd7rBuRb+7wTmLEUsIMLz7N4ytqRYNdHv69hYNXSSGxmDCHjEx+lYM4FNN\n0sy0RzKSTT+lFjiNo4RXOcZz2t2xFH4sTGRTU9YmZ8RhXMdijSQFzqBxEnrUt5aa4XmiNs6pZChS\n5J9iGIYBP3SR0KblMMbGFIlC+8tar2AJVhjChtpCdXTgdH72IR5PKiXldSLpI35KgSWag4ImeI7+\n6SMYR9B5xuO6mJZP05rO45YztU34WmqK48okwSHPJQl642NM1g/JWhATrCS3L0pQgxoI9VOcu6UZ\nbqlE6MwaFwZEBqx09N0tQYWF6Rn6W1xzzc4PEAYMNhHNIy4xXiUOnQf+OW3w/HOfli6Sv8u/pwMN\ndJQfoqye91MWKKfxjIxSS+EttzfVdZq/mXBfoTeR9m8PHl2uOfSg4rjcWG53QvDR9ZYcAahX3m8N\nLzcVV6Hl3SESCQHMMHBZ3eCqhm9fd+hwh1s8Ye+beMiCVcQL4Dj4GrELVrbjedPSh477ztGHGsXG\nE0EIGJRBhVdvLF88W/L8yZ77H1p6Fh8toP3xonOzelsRIDYEDod7rtYrvL1mt7tHwkBVOQID/f0r\n7M3vqPffsVlfUT37FX5xmVNBCF3H9sd/gXd/4PLJT2le/Aq1DTG8RMdSUkYMBsUEpdMN9umvWF9f\nEe7/hcP77yLjqzbYz/6G7v4H9OZbYilxl1haiOYMkRSJ5xl8TzAmHruU/CUR5eeBBafXhPRjZGba\ngJIW90QyTEh5IqUTN30S/skaj0GLZOpkymU68qiUMTMjOiXAOq6WIZ/alzWqor/0PcHjhwNoS3vz\nW7bv/40QtpjFEhkO+O0bJPTo7hUmbKlqB1UUhEL7gappIrMLue2juaaxa+o80sLkth/5TBYUJs0v\nmqJTwMgRkytNcuX9PLfxvMDpy9m7xwwrBE2na+dIzSPmK3MGOG+nwJBRC9VxwwNYE7W+1WpBs2wi\nXpvCtmAUxKe+U+1TPL6H971hGyy9L8O8ZezmaIoTYxrNXDn6Vsb7Zvx2wpP4OYxJ/OPTJadLTzMK\nMdMemATGBJP86ugfzvvGksPtBUU0RK35mBnMhJ1pgme1HY3nD2Q/pEMQ17CslVW4YdG+odIdPvR4\n31KbmvVmSV17YI84EOOQdJJKrKlrR3wqI51LIe285qZHvx8gKsJosSqmmz6XTKpsN34fJO6faRck\nGOe/RcbTIzMuTEtYCoPTYM71U7LFGGnhaNsDwQcMFucCTzfC6ztQG60aRiNuBVF8UF7dGhaN43kT\nj72zRkF37IaaH9/3WD2gi2fswyLS6bJql6R9ANz2DW/aC7xdcL2BJ5s7anuP8wEJEs+NRAn0fPsG\n9ip8/fWGxgWOJntyfYImKKNAIxKJdH9oGboDi+uG3lr69jaGyXY3DHe/pa4q7PXnaHNBWFxhpMcR\nTZH7mx8It69YPnlB9dkvosRLPCJDCkd6low1mR2MQj+AW7xgvbhmuPmGw+t/orr6OXa5YPnVf6B9\n9XdY8ZgnP48Vyk1kq8ZrrCSvnmHwrJoFVlysO5ewUcw8F+8hFB79h1n8igOfZKcj/0UhmM0lvHGt\np+iwHLL8oHRfEOnSJzCNbdoEqqdaZTmHcVxBqcRSX3yO3TwjtFu03RP6e5YXn3Fo37B/+zua1QvM\n+hJLTQj3YBd0nVCHW8TGccUcuMR2Sx9HhEwypaW8x+JeZp565EeabcgT6VhO7kcJPG/gJExp0f4D\nmlzWzEvN6lP9ZKXfeOYTKy6DUtc1i0VDXdVjX9E6WAaoMH4vKNbG01IGjcFoecbjGwlvysT8DBd5\nYCwxcCzj/cRUplWZCw8zkJdmZ9FCwp4iWsd1GfdHYoSa9804CSbiOye30xpOn4u7I03TpHmKGIwY\nFmGPDe+jthMMQS17c8XQ39Ef9pjqQF1ZhspgBXpd0Mg75P53mD4d/7NQ4tFiUB7SHPFzmu+DV8FM\nVE992bO3dQLwY1r9LGgmr5gkfjYSmcwMzwynFOpGAWqeppJhOQ1tcknEdTNUTqiMiQetY7h2FeID\nt9uovLiR7oAV8MGDMfywdXy1HqhXNW+N0B8GdL9lUVf09pI+2OQ+mJAjV7SaTt4Br/D+XqhMw8LV\nPFn36NCybWHra0JI4pwoP7xu+ew68KefrfnXN93D68VHmeCc0ERiX9FubzChY7V6Qhdq/KHDWc9y\n9ZT1Z/8H3rz7kYvNVzTrDdXmKaqWw+0b+g/fYuuKzVd/AfUKUZuAHw9M5NiklCUckfEgX+8D3lSY\n61+yad7R3v1X2u01i6dfsfzqv2N48/cMNwZ3/fOoFSZtIYjhcPOW0PfoQlF/QOwGYwCTQpULieiI\n1J1I2yWyz57MRGLUto4k9ZxwP26u+eYQMqEpXjpWMDm9Vb6Rw9GnPqe3VDPlU8SEdMZjjVs8xVU1\n/f6eXl5jVpcEL7j6Gnddc9jesXIvUNsAewgd6po0R4PBJAl1YsTlgM04r6l02THMzl3HhCFv2JI4\nZUiUQswIndkwChg80G9JcB7yOz50mXNxVOmzpnQIZ8yo6UcGLSMRl2TWMRIJu3OCcwnCWcLJ49JC\njpqDoZjLNPb4SCp7NZp9M9YcNxYbOkbxiLqaG6XUAMd3joj5CE9J1DHvpWOhRgph4AEwPuYzCyYa\n4jqWMR5Q9xxoEKkxtmLBLUEDg69onGHvG/wQaKqnSLXB9R58n8aZSnBl+X/GvedzO5mnwpjm8wC6\n5G1/KsTO8XNinufnPRncOXlGSzzmFHbHuD2/PxfkScKaT8+pialbL64NNwdDN/S4MvVJHD4MqI10\noaYj0BNstAgNwz0L9zmDeUI/xKPuYlengqqOBxonDd1Ar4GuV7aDo7I1m+XAhgNtG7jvKzpqkJq3\n71u2w5pffFmdhV++PiEwZpI84sboCO33rJaOxtbcHe7x3Z7GgA+W/e07DBWmNmAqusOBw5vfI/7A\n6vnXmNUlpJOIc9X2WMJrFNlH2OdPGThRSrZxSIOjXTynWV1Q3XzD4cdf4y6/onr+N/i3f4//oLir\nn8XNFgAJ+OGWMNwBF2l+MfIwVhk384TsAhHPwiY2UKoOs/dmDLCcWpZeC00lvz5tuHINMuMsEfWU\nSB+xTR7aOOMcsygZumgCszYmsm5fY61A7xFjcZefY4zFm9/RffiR5ZNf4cSz7fbU178kHEIyLUfT\ns2j0PU3SbjbTHI31jGZVmnRLsJbaWQHqs/MsGfBjmvDx53Na30PvzJ89HkeOPs17J8686zpCOs08\n47rMfGuSzLjMiGiMTpxOyBbKKkIywpe8R/JTmWfm3wrWGipjGFQZUq3drF9O5LJ8KRSaW0h+TDOG\n95dr81AO2zEMT+0Xp49OkJu3fWxJGfEqCc+DXaB2hdMtxht6c4nTA95ZvH2OCR2qAWccvQfbPKXv\nb7BYbLPBt+8J4lM4PmR/6Xx+5wWiGb4UizUJnafPPACNE5jld0vBOoyMQUaB6qSPAo4P+R/LfuLt\nMgiPpKRE47lxLkXTKuICLy4b/un7Nj0cRjoqeERiPdC1a1nVLR/aFXK4pbEwBItniQnR/+cFnPpY\naalY+RlOqaLpQPZYoziueTcE3vaGxm64aDqeLyIzHPoeZ4Q3Nzv2/dWjMP5I2bQCFQuqpL7jat2g\n1tIe9ojvsc2K1Zf/Jw7bb6hYYXzg8OEb6A40myc0T39BMBYbTJICBSWkI3JjQrRm6JcC/LjAOUQY\nEIsVMN4w+CXu6k9ZL95z+PAv3LXXLJ/8Jbz5p1gK6fqnYDxQoTxh2xquwmWsImOSk19d1AbPSbAj\neSjt6kUIisi4bFkymzOnJAXnyRSm05I7ZlNGyQimAQXmTHkyCR0TjPK+6nwTTQEy0Rkc1MHhDvEe\nj2Vo7/D9FtUl9cUS28Rwfryy2vyUA3+ge/9rzOopmBVu9ZRh9zvE2rhJtCKuqi8GlE1tEyM8CSIZ\n5zu/8sacIkRLgpjeOhWn59S5aGvs6QwxeJSoPfJsPiF+PpPTd5umQYwlHXk9G7xILKCdfYXWxvEb\nBMKAhj32KMJNkyaXmWjI6yvT2Gf4K7EeqTVC8KHAj3F7FYSw2HYIYkBSYM054WBiCnmMcVyx1vJH\n4DieNxkehPmxdp6Z8DhQJtwywWO1x8uCij0iSmuWiLqYPkGF7wLef0AWlzhtkKAY6bEhxECisXRa\nFi1nLPks/o5w0OmNiXIcwWx8ZhJAzqBs7i4TlcRQCzohxSNHDZyeEH/U7FnT/rkxSDpSKmBC8gUP\nBy4uatq242Yb1yJoTH4nFcZ2CE/djmCVt/sNbVAu3QJxDtn1iH+L2M/iAec6Hao7lqUbaVcu2G0Q\njThiJPp/1Sc6aKALnrdbwcmSzbLmyXLA6J67tzfc3/47yqZlEE+ENJpu9vuBlQ30esHgDRo6XHVJ\n/eRntKFFbn5P/zpQXf2ExVd/ganXqAbEg7cJWYmbPAbCTM75yeV7TGyKVRJlwGOtwSiEQQn1JcvP\n/4blzbdsX/8Gc/Eldfs94YNFrr7ACgR/D7YjH/gz6WzM8DyjfuoUIfuzZriRwTMysMzTSjZ2+k7x\n7MeBX8w/E5vY0GiNigtT9J9HM0V2jcEKWShN/hoVIWiHNxXavmG4+Y4QhNXmc1y9whOSSdkgFpaX\nv6SV37F9/89UzQZjK0wKbDASCyGUybt53LnfcqPOmVkJiSOWPrt/GrxUCMGFSepYoDjyF57b7KWM\nMXs3g7iEfdl+xqRyzJN/M6EQ6/Ua61w6T3CKCJVknZR8oteIgwEhQOgQPUCYNvK4FfJfWpghH8A/\nAXwI0aWgeS+niM5Ssx3/K+aoOuFNAZtj18UUeThF1EbmGdL93PiErwm4TP6g2TKcuXS2xyIsFGeG\nVLHogGIw6UzRg9YYH2He2TULPeCHgHNrrN8iYcC7moqBSlpUA2iDih/Pm5yS/ifcPStIjT/TZstV\neUof3Cj4qs5mLJy6CkjCTaxSYzg+c3ASwE818GMrx0MWjrxmk0++2ENEi4VzHUu350o9Wz9waT3f\nvBnog02pJ4rHYoKyMh2Na9nRsG3ryNqMcLWwtO8C4g3rxmKrO267DRIqRBzBDCgh+cknAUGT4iAq\nMXZXwIvGSk4pzchgQSwDynbfc2F7ur7lwnloHvcJfiQ6dJIiRWK0ph9awmFPVdf0dsHh8AGDsKw2\nhHDg7t1bvHuKq4RawNgFGnys6m8MOZKJYhPHtUubR3Umg+UNL0hMfgdMUFwGUtISqiD0vUMv/pzN\nZz9Huvf0ocIM3xNuvwfAuvieM+k0e5UxIhPJ88zK/xRBd7wlJT9LjN7Mcp9JkVchHd10rhxSwWJH\nGItMjCp/zs+eNxcWDDB/TkxVRvPLGP4wlQVLbYgxBARRpe0PhN2PtO9/C84hNuaxBcCIIyaaQ6wz\n2mMuv6B2C4z4ePyVxmN/8uaezzmv7QkIT7XlcaNmlJwTxXHshRQu+buiC1M8k32rAom4FSSnHOd0\n3tKs34+ZVeO9aXLT8zn+kVF7NQAhmjYlWRKMkZEpFpJXbMe4mD7h1rjqGsWOY5zPOyMNIOmcwqRs\nGjOHhSL4FN0ZI69zlwWeSRZEp71/rpSgpMlNWue4IkdaSklgj66InMQgjGkfnd83TM9kC1ViBqqB\nvvf4INjQISFWM+poYvCRCah4LMJgqrgW1QXYJRUDQocfBtp+H4ttJ3ojIUsWWozvVEA6O6809xOG\nKVIeWTjbFnn/5zWYTN1JMyooUhYqxyhQydQoMtKgU9/lGMa9o1JOiQnvC2kwyyriaQeHyJplvWG5\nWIA/8HYrGA0YBpSeynguzC0r2XPnL9m2DerjvmussLJdrOVL4L5fEVjwcnkXTxMiRFkpRXmSI/s1\nzjEL0ioKGjAh0rXoSzezIfdYvrm94H6/ptdrtsOTR5fr8dqh42KM4jFh2FG5gcoaWrvkcP+OoAOD\ndNz9+M/YYc/iy7+EWhj2d4Tv/onmiz/HGzeeIztWcovRMDMpe36dlwzHZ7NwJlEdN9bjtcW7K5bP\nL9Ddt7R3B8ztr1GJDFCESOhjCN6IeOaoD47Gc6w9iBadHw27lGqnIJf0XSEEz+Z0rE2YQoIbqwFO\nMCnk0vH5sWIN03pJ8v3JTPAghTLD0N0Cjvrl32LFcdi+AVcRJFZjsETGZognH8jhLVRLwv4twe8J\ntsaFqNOLeko/00SkSRtaiylOn3Va1HGWZvy7gOuMickx2GfK3LTpJ1HrlIyfoURJoyn7mfo+FkJO\niWIpwOTnRJS+b0H9PA0GQVPd0JyWkP2Jo7AiFqWK4XbjCEfD+6RFybF/NY8iYcqM2MUtbZLPayyw\nQEqCT0y6DKyY5l6s2wygac0LuCB5n0zYGp85jryd2j8X3FRqPpQfi6ZDGFjYFvSCzlwwGIfVkBwu\nPSoGDYaF7lErSPseqX6OVBVNf4eamkPfIt4jKScuq9sf8xHPhpW+nvGX2UMTASgrV5Wm63KnT+s4\nh0POsx0hq5C1xgj3+V45uY5wfhretG81j1cCXbAMg2PwhnoRaLserw1qKrwqjfY07BhCzQe5poWU\nthIjPa/qljZYjKkQacEPbPsLRB1PL3a83tX0fYUxLpZJNAE/Rk7n9JdzAD3eo0owPTFBLhZHaL0/\n/2K6HtcENZ+QTdTkROh296xrQbQG2RD2OyqjLK+es3zxJ0hzQe0qrFuw+OKvkdrTfvf3ON9iZUgA\n1oI4kY63yYuhR5+nn1JSmiTi4js0+grF0wUI65+yevFXNNdP0bv/RPfu1wnADsxERKPpabLnZ5zR\nJKmWxG7SQvQsDxRSfp4c5wLmBYsIlvW0UVvLcx7NSYyE0YzvzOc8+hHJxLOAS25ZIhOc8oPiTxAP\nJtDvW0z9FBVHQLFSRy0ERQ14q/F8NvWxiowKptnE0YYOP2zBpsRvaTDYeITRpAul2p8Tso5wnMEl\nayvzq2QpZf7fDOalZnj03YRLhXAwe7dcozkBLqXn0YQ5arsTTp5rdJyfKs4IV1cXrFbLWIwAmUda\nZiZQ8ORo9RCcCrWa2fPxcZ20tBPNacKhGW5l0qxTCkUephn3l8y06Qy3aBQ/A7sjmB2PASn3cOAs\nQT5Z0eJ9yjWa8Gc+Domnhw8tO3dBcDVGDSEJqpLSM4zu0CC0do2hRek4mAt6+xTvrpMmoinAI5qj\nH+rznEk0CzCFceDsWE9mKKOoEp/RCVfjM5rQQ8d1mHI5T6F3rj7tbP3zS5TJSuXzRWsJV7KmKcZw\nvQx4WaFiEa+szT1rt2WnK/ZsCMFgfSw5F9Lxctcrz11fj2e+qg6ghpvO8e7Q8HI1cNl0qHoUw5CE\nDwPJ5MlHr0x78Q5VRxcy/Xz85Y8ny48gicp2194iDHx4d8/7735Dv/uAtZbl5nPUg6kWeOewdoG1\nlvqzX2HWK/bf/Wf6wwGbkmXHA2azvdcUXO1oUY4d0XnzlRtc8agkU486nLUYolN8ePK3hM0v2b17\njQZBrSuQtNCoZhtWkfEU5bwJp3taPj8yl/iMKYNf0maRkikaCsbEyKxKZj6DvhDPKhyZ38T4Zoxh\n1CDK9sPs3rjwxuK9gHFsnn9F9+EN7f17xMZQpehsDdiUiDzs3sV7q2cQFHyHeOFwv0v5mB7Vjhxx\na8zU5/iZOREwM8aSns1akWTx4JQ8zhHh/N2SuY2SIjmoYYRsXiQmIUuKz2WL0ex2fPL31F/B4EsC\nmb4fNHpLJZ3IMZq/DVMN0RQYM8LFGrwR+hyYUoxWkoQ9D7Sa5pIVtvhTBFLp9N2UB1cIpMfwHAXD\nvD557x39yLnlKIXa89cxXp50fvw8mefP7wWEXgV6HxPKyGn5EKzBeU9Fh7cLKqkQFojfAtF9ceh6\nvAY0dOQyE2NlnAfHd27IWrgkHpoz4+LoCe4x4ca42ecmf0n9HMOlFFROTfmJyqUj18aXjvFFp32R\n8UEwEDyDHzDGs6os+35JpQMvNjesF8qNXuO1IrqDQCTnfhuuGqjqiv3QpAhTYvUkGVAj9MOSN7sV\n60a5XuzB+HSwj9LRY+WTC5sRdfgBI7GousFiQv/oO48zwSIaJCb2DnR3N3z77fd8+/Ytu8MbxHsq\nqahWl3TdAbU1xsdTyCNwDfXTv8BtnrN/9V8I+/cT0Ru1oELipiBcciaIeBTTxy/G8dnRFg6EXHE9\nEEJF268YVICAERsJc3o9+xVn3ZCkipL5jt3nqCQpmOk5g1tJOE6nMZOk879iM5TPjZ+Lf7lm57kr\nM+TZgb15nELcqKHFhA67XrN+8oJud0O732GtYFSxYhGE7v4d1oBdPEHwoDD0A76/Q6oK0ficMQby\nsUNpDEZSibWx74Jpz8xt6TqzuR/7ez6vfLcUZqa35GgtH+auJdyzHy+Mgs5D/UqxUONnVQRD1w8c\nuj6W8jNmfGb2b2Q06UBgQIcDOtzHI2Hyjsl7I0f4FZLufHwZznkcyexfMMgs5OU/RgieWQcZtfpT\nS8YpwzunJT/GTOTM/QeeLzSlKAdEE7NUT5H+LXZ/i6KEHHikYP2WgZpgHCrQuwVWHXbw0G/BD7hq\nPRb6QyZfWgjhJJqyFNJOZqCle0VPfhRGv6BGTjgpaEd9jDAYzZTMwDzD8rO04JwgUmqFJcMuFI5C\nxk8ZeqhYKgOtt3i/4+XlDWpWvNtfMGi8n33vXnKOduD5hWfXOQYP1giVlXTWY3KjMNAGeLtf0DQV\nT5a7mDWgUSD2uabzkfYtxXxy0YsghoBB1OPFxbSgjxyq+ygTtJjJX6AGVU/X3jEoqK1QrVA8rqox\n1Qb6HZVboBJwTYUXHwmpeqrnf0p99RWHH/6B4f7HkcEqBq8GTQe3liLJSHRKRiP5t06lm5L0nglL\nPGgiAqu/f8/uD/9P5P63rK4usCYWKSb6XOMRgYSElHLSVwnwTKBMImJlaaJ8X2bPHxOl3HYxF1Oa\n1woprCSkIyPJ2nPeQNOzFG+fbIZx103ETcRCiGWOnKlxtmF98YK+vaO7ewNaAw5/eIeVgWr9HAkG\nHQa67VtMU2NMg09nCEbiXGx+nRBTUxh8SeRnvq8MtxwIUKhqKjktptBYxo2q8Z2SESFnYH5GUxmF\nhNM1OmfCOmZ2j2kIImXOXsSv7ftb2vs7QhcmCdtk7T8wWQWm5TIMyLClTpHQcSYp5STVRx3N5yUO\nRYdjioIOhGP+kl/LcNAcnprGrSGto5CFxFjBI+2xEaxHjPIEHsVajHt3Es4kmR1VQyodl8aW5j/+\nPW0wIiuezHgm4x4WNQaWnyPmgOm+R3wXrUN+SzAGLw3iLSIWG1q8NUj/FjB4EUzzjBA6kuGPY8/e\naXDPqbqXcfW0NFn5RsTbMnZAc/uzPnR8dqJzqf2cz8ecGYzc68iqNRvDmXnkduKejfioQjRnyoAq\nDCp0reftux+peMft4Yq39xVd8MnCR4pBYFy32sCTleX9LQzWoMZijOCHLpHtWL7SIgze8OauprYN\nLy63WOkTwgDqEXyKqM05iSnOoBAu4hGpGnPD1eEFrH3cJ/ionqnEem+ZoeADGgYuVk9YPXnB/d0t\n6gfqZompl7T7LW55GevwSYULccEsFg0Dy2df0jU13Zt/gUFxz15gBkElamcl2Ti5Ch+eKpDrZiaJ\nwkiMUoyFAJXu7i3d619jhlvWT35C/dXfMvzuf0FffYuxDiQVeyaHnUx9F7yQc4h+stVPpLfpzXHv\nwjHNmFoqG9Q5Axw3x/hcjCoMIRPO2fkW5ENrT7SeYjyxk0CvB8TFihqqiljh8tkXdHfvOIjH2hod\nOtzmOUN/wLcf8Psb0AHrNjDsEuTsCMtscnwQVnksR2M82ZiSR3xEv2UOx2y+HFMSzDk4F8BN7zxW\neGAWzn5ubB+9ZPJDCNS14bPPLvn8iyds1g0iIZ3PHAnyzGKQ8gXHA4dxeAzOzpEkJ9qjvhCGpikl\nqIxnNM4hwMhsRm1jJLQ6gj7MXtSxgkqpteRAirLtuEbH4y3GdMI8Y/ejGJMfDhODKP6bF7XI+KaC\nV4ORBVq9wIQP2P6GwXRY7RiqC0TAsMPaQDjs8G2NcxV66JC6wdol/vAeCTES3Rs7CkrnfICzvxJ8\nyrIDca4TrPJzzPA3f31K/Y4DwfLCZjidFvRIY839SBRkSjwu8fp4l45DOzLlkwJchqDI4MEKu0ON\nF4eEkOjRgBpLEI31o1QgeC4vAwMVd22LYlDTICam1YkGROysz4Dyw53w9GLNV9cdP7wX9lpjDITg\nEWMwQUHT2RDliTOaSreJGYNjfFAuqscNnh85VDdLfooYoT+0tNs71s7x/OXPubv9O6wGjAT2Nz/A\nsKO2z3EazaFBiYdYOksIgvGBxepzwhcL2h/+GXSPe/bTVDHmlHCOBsa0KfIGNOIJ2IQ4HiEm23uF\n4f4V7ff/BN17mquvqL7+H7H1NQOeoY8HvxqxGIm+GZO41BR/WWhzMo3jIVPDpK3lb0r4pTb04Ry/\nOUEuJp820EmvwrytTECO24FCc9Rik+X/LdoesGJRPxBCR9/eUFUrqvU1dz/8A9YYFpvPGN7e03cH\nbF3RbJ7S7u8xh/fIosFWC6yGJNENU/slRT7DRMZNXcD5OAJzejhJ5gkZpIBRWeFCVc919eB1Dmbl\n2B9l0g+0F0c499P1w0BVX1BXzaj1RnO8h7S3sv8n4ppijMdVjqrxBPlAoC0IHClUfGQbEXeP8EVG\nUpzY0Gg94QifNbdQxIEl31bW/M6hf9lOJrQw7dlzck18Kb2i83uqY/ZDCJr8Qsk9XcgsE0PNXynW\nxL3tJUTBjmuMv2XtfyQEx1KVAYeGeABAT4dx4DXg9Q5bvYxnjiY4ecmFl+d5odm6cbov44hKa9Ax\nEE4Ewgfw7xRmZmrmRIA7BfQYSKkTRZsxwtzyEUOexTnMhJh4IongWC0dSE2zP6Dhno6GEKpUS9aj\namKOJUKwyudXwvt7YqALgFQYZ2PqxDgFKbA0ruGbW8OwdHz+pOX1XWDfNVgsgQFNFsqIozI1Q7Ri\nRL3IsrDK07Vh8ZHIl4+UTcsLIalw9h3qW2y9IBil3d9h1LC+fIlIS3t3y8WlYkxFsAZ8wKkFL6hJ\nZ6h5heqK1ed/yf77/50+eNyzP5klo8eqAJkFHiUPZEKAj2H74hh8h9++5/Djb+lvf8/68inNT/9H\nqs1neBTVAaOgIdUGdC4JvToi+jx8f86IS1iUYzz+PlciO8XLSWI7luikaGQiZPl3Yf4sgFBKjRnR\nR+k/mwd1LlaM0nb+bQ2+bTH09PvX4HtMewe2gaFjc/0z+v6Gvt3hHCzWl+Ac7XBA/RZshe+7mNMj\nghgd20bncBERQnFSwMRk5jAa6Wnx/0TmT2jqCRHJjLC8f3zNIz4fJkIPJxU/fM2122IcxrHb36Hh\nOpadMnlsU+J8mSIhxoDVGIjknkP9HORmXL+ZKXYkeJBNw+U4SkEqM6eRbMwAfhxgEzWuMKLrXNvI\nbc/mWgpnJ6tV0NyHGOrx52mrYCSfgF42WDyvFmN6RA+YEBAZsOqxpkY7z8HfY+orJGwxJrCsG2TZ\n0G37eLxV/wFPg8kalEYCG86cRXcsJMehnBH2Cvl43Os6weccrp7i2AT3kQRkuMzeKbROCkaY3p36\nnsZ+up+KXVc8IApWDMYI1jmeP3/KNrQcemUh9xx6S8+SDgfiMaLYQWkWsFlbfvvjEM9zVVAjOOsi\nVwyeaLqJgp+Oc3EYDdxtA71veHkx8P7+wIdDlTaAgppYAUhTfuQIJoM1ypOV8mwVwArCkseuj+QJ\nCkEUfCTw7e4Dvj9grz/H93v6fSSQdvM5ZvUCt/iWfv8t9zJwubmmrptY9gmNJXewqAFrlCBLVl/9\nB/bf/xf89x778peotdOiF+pSXMCJLWnMQCGosr9/TffmN4S7bzGu4uqn/wPNi5+BWMKQTSsWtIOQ\nUjRkyoyK9mMZcxhPr/OE75zfaCIwkDW2/MecKZRsMTH6tLYj0z3qY9wCIzfIXqeCqFMcC0U5lpIM\nTsEyfmhZXb1gcfkThqFF7SbWEnUG6is49HTb17Stp169wLhYIcbbOia3WnC6R3PxwuBINYBSv/PN\nVyZBHydEz+B54heRM5+n9x5ifI+V4Srvl38/9v5DPsDz/RRMA89qucJVjingK+4HxBfPJwIsBqMW\nawTvDxid5y5O0ukE31KYOjvO0d8a8UZmCzM2x+htGxnj5B4ohZxCCiPitzJyzNTohAeFkHcEs3MB\nOJrfmdu94z3Rkxy8HKiDaRG/w1MzEFA/0JoLTBPwu/dI+x2uXiF2he22bDtDaIWmuUAZ0h48EEKH\nxXD+QPICR8p80kITfoDHj8zqsWtmrsyfC/QPGkhZjIVgUsCxHFNmtmG+P1QVkk95PppJS5zZjUTx\n6vGq9D7QB2FhFnT03PmGy9qzli2HwbIPNV2oUTH85GpgdxD2bYwVGETxWmFFQAein8/FHM5E76O+\nGZLLC/Y7eOVrPrvucVXg7b0nHrwwPyIpcoXAohJc2GG8Z+sbfN9QPRDRna/HY081h0BHYPb7WzQE\nnFvS72+hb3G1oV6uaHe3iN2w+fxPEL+le/PP9MsXbC5fxkNaBYJ4RExy6luCaWi++A90b37N4cd/\non7xp9hqyVgvLopkUYtDUWNjiHnvaW9fcbj7Br1/i1OHe/GXrF/8HNNc4EPM+9OcVqApeDh0MfjZ\nulHzy87/DMoSWY6/O0Gk4okzNCUtaiFwn90EE4Ocm1LmpH/qJ5tAtWCUc4mwbCASlejdib7X+IgB\nxB+w1bNIGENgaG+oFiukWqGHLev1VyyvfsH25ve02zuWL35JZWCx+Y7+/o5m/ZJ2d4MIBIaUsG8m\nwjlqJXkWQqmplL8f0qLOwUq1fCZ/V0Lp07W785c+2Myxr/CcRjmZlUAwMX9SHKiNgmDOW5OQNGgz\n5YJKCvoi4EM8NUUkRtXlISmaIp8TuZI5jiCCnjujL92LYy+JaBLECjZ1rK1reikyorKpqb2slpZ7\nSgtYjkR50jfGfieirkWHhZA39jG+mOYf+woCKpcMZokYh+k/oO6SQIMPHVVzQStX+GBpwoHGVfhQ\n4es14paY0Me94O/oFdRUscA/R8x4mixSjHgyheex6ohG5TuZwZ+PchyfGF8p51yawzO3ne95mQ03\na5uZTpR+zcysZ2KLCkgsrD6NVwEPEs846XvL3a7lbb9h0wT6vedDt0SouaoHLqsDnT+w7R0vrld8\n98aCxnSJ6DOtcFaSwB9xN2SzrcZgMA2kko6K2MCh83z3Vvj82vP1E+EP7+KYAtMB7VYNC3NgUUPo\nA7Yx7PqGmzvlWdPy2PWotVRTnpxIQNVz2H3AIljdc7h9jUdxlTBs39C+/Q1Obwk3r3HVmtXTl1j/\njvff/yP73T1gU1BTPJBRRAi0IBWrl3+FrSsOP/wD2h5iwnWKcMtJ7CoQhp7d29+z/8P/l+79v+EP\nB+qLr7j45X9k9dXfINUFGnLEUJSoJVcbQBnCEPHEujgvk8N4SZU7Ho76KzU0ElJJmRE/IlLxk5Hs\nyAQXzV+xv/JgzZngnBqYCI7MN1o2o52QsrQ5J8465g1miR4F7wOEA26xQoNB2zskdLGSewi4yxf4\nugEJrK9/htss2L7+NT4oQSvUraF5gvceVYfNh9tKYurZ9pU28rngoWM4nzLDEuIZTMq8hNXROkn5\nWU76fZjxTePRo+cfwot524zwjT6YaVWsE5SA7/uoseiUf5VxJAsNmbCKKD54nI0+7Hjc17R+sYJI\nmDEnya3p1N587hPjyT5WidJpRDeREa/GpLPU5NTeeZjmtR+/12M9QyecSG1ECOTRTIRXspBWchEl\nmfinsorTFVAJeAQxFdLvEHHxVPFhhwkDvn5CMFVcB6nYHg6E7gbXrDGmRkMfi29XC8CjmsxfDwhO\nxUynNZx9PzFJKd87wb+58BZpRXGOYaYR6dlYVvJ4L817ni1FZognptqpxJqOS1PWqkml7DQSX4GI\nJ8Hjh4EhBN7tazaLioodA8K71vFju+YgK7584qik5/b2Lq6jCoSYOmFsDKBx2uKEiNsioCGdJAFo\niLRNY2yDH+DVe8eA4RcvoLEB0QHxwrpR/uJrw8USDt1As67Ztpd8uItnGu4/UjHmk3yCiqJ9S7u7\ni5pE6Gh3N1g8q3qDW17R3b3FmJrt7Sv6/hZXb6hsRXf3B7r333D57GfYzRNMVRPcCrWOyjrQQC+W\n6vmfY9/+K+2P/0j1/C9oliskeDAVfejZ336P3r3F0EUiY2qefPanVFefRQ0zn5OWqr/kIGeS+QAd\n8ENK4DQuFl99FDQFHGDKHyJuxkBkRCXnKgMiZozpLFMtrpmDenISkyXd6cHx5eMWY1WHLFEp2XyU\npcdp60YmE7SnsgPiFvSHd7T7N5ig1M0GXa2xgyWEQLCKDUJz8RPw33P/4z9jhnvqi89R43AyIDak\nYtCm0CkegOU5c89DMDqSmMvvH/vuY++VEvE5X4w8OoPpmhh2XK+JwWTcSO1pSMwMIJdNi8WQRWWM\nCE0DitgrhqYyVJVhMCmFYRxfxknhhNUc+apn2kMaawx0S8EWYVI3JA4WYDRq5/xOlAkvMyMclRA9\nWdNZAkBifJPGN+HkKOQls98M6pMSWcxpviNIzLlyijc9RgPWdPQs8d07jG3Qag0EnHmCmjuGsCX0\nB0R24DdgAmIqgh5wtsLgCWIw2SM4mR+KvXQ0iNlI8yunDFSzdU2mdzXnO4kwncShkw94bGbe3jHO\nkp4thcm4TBk306eyGZnazfB90E+eBP/lwuLuAndB+BCEZ0vh9eHAIEsGhW0rmFXHtz96Vk2gcXfc\ndTW1Ci9WHbuhxrLDyZbKwYUIqg6w9BpiQKVavBqCj8FLimHw8P0b4dlF4Isnyo+3wkWjfPGi4c2N\np/UdV5cb3t0Y9kFR9VSmoRv+HadIlCbBod8xHHZUZmBzUXN3H2IobPOE+tnXmA8/sHz6E9aba9ab\nzxBr0MGz+PzPGIZ7TPuGm2//N2BJc3mFDRZfOcRV2HqN1Avsk6+x7lv2P/wn5NlfIvWKw90r+t33\nVLUw2Iq+NSwvn7B69jVWVnjtIwEeOcMkGU0qdtyOGpI2ZFJVFMIk+WpC7wI5p/+jaldKf0YnIpjD\n8rMEX7YQ30mxTNk0mE0BufWZaZNxHsc+gbnfLP43ETid1PqE2HleJXGGqPVq3zIMhvbuB4bde4J6\nms1XyOIaQhvz1FIErUok3M3Tr8B6tt/8V5ZPf4mxhkVtY8CTyhjNB8RcSh5mSOV1lhEVkvM80OPT\nRJeHmO15bTMD5piUFTdgIkrFmKY8pXkjpWzu/cButwWexjxTyQYEg+YDdZNAlU+UQITKWipr8AWu\njPPL7evkrjh5YFQDSMwiyVtJ24im9YkB5pSI0lw5M9Erp/STzP51eohR3ILCHzMS9KKRkbUUqD9L\nCSoVJThZnAwD4weMGJzsYsxFv8NVlwTbYFXxGhDxhGqJHTzGLegWL7HGE3yHFQNqkdBhpCVUG1Rj\nfdU8+DEgbcSn47UvZ1UEip1M4AyGTdJCAa/z0c6lQJt/K8SSb8fPjVJQSHiZ/cuJphVmzwdd2zr1\nYaxhs2moPgjWK4dW+WBrni8PvL1rCVJRVYGvv7rgP/3bwIdty9PG8ssnO540lttDz72AsY42VOz7\nCwwex4Aaj0OpLRgzxAIdxmCNpVdP8BYflN0gmD7w1WbPDzeBf/zXA43zNJsrfniv0SUjAWsM3veT\nRPjA9dF6NMlCzGF/h+8PXF9ULJcN+05jR5Vje/OWoe3RbuBw9xY/RM5tRGM0qBHwF9SXX3L75g/4\n+wq3XOK3LWG4IexvwHuqesFi9ZRu94qbV/+Ara5ZX37O8slP2N59oFlaNj//FbZeowqDeERdWvwQ\nkTjljYwFmCXKzF4DfvAYYxGp4gbXEJNpSSxTClaRmd7034QXo3QVJfYCDWfEWiRWXsnkRXL7WUpM\noaQlu514efFtQuRjmpCJzzkJbu5fzIw+RCe5EYI/0N29ZbWoWD75OXRbtFmiRGKiAh6P1SgweA2Y\n4KnMEuMcdDe4xVd4dwXBxo0iYdqWpaY1pwYnDO1jWttjJszy2YfaOr53lqFOdHgmfasUEvm4yonI\nzcZQ9nHKsIyJtSyD5rRbSSccyMigMi4YiUXmI44OWD1ggmdiMFnImzOeh+FTfi7xahrf2NKZdZrP\nRUZmOM200IiLtbYIooagkeGObKCINYi2m1OhZRyLTGM9xyjyBPfe4OTA4C2dd5jlVWxdPd4YCAal\nx4qhsoJniGOwl1g+UPU3dFja9p6hWmEbi4QchPMQfEuBVx9YjzO4Xdwa97OZcH22L/R4/iXcM5zi\nf6Jxb5fRovFdHduaXtNJcoeR0Z2/Yps+CD5AZS22EmRvsEHYE7DDkifrLT/u4fPLJeIq+v09v3gy\ncLVS3tw3/MtNxWVVY+Umpr30PTilDxWqDvUHOgziBYPH4LHiMTKwdoFVE6iawLquwDm6AV6YntYf\ncM0lXh0vnga6VtgNQug9QYU+2AfmFa+P5AnGsjYA7WGLUc+TZ0959/49++2eWqBv33H/zf+b9r5l\nsbjELiqwS4w1IBXWefAGsY5gL7j++q+w2rN9/wfQK64/+yusi45tHwL7N99jTc3TF8+4ublnf/+K\nYA2Ns1RmQf/ud3hTQXWBqxdQ14hbIOKYSksUSJR8D0PX07U9tRhsro+ZiVmSlGK1wYnQPGRiywTA\npA2vnBLrmQ9gtnmPifpEOGRm+0gSvkj51Ugsj+XviVkW4znHvBM8wtDS64Bc/xnN+inD9j1axURu\nVUmE2CSXQMCpYXf4PkpmzSUaeg6Ht6jx1PnEi2grJ5+/ls1i0wjTJj9SKY6Z2Mf8dp+qDZZtnwSv\nHJuqmAQHxU+J4keS/PHISsIe+zEcD99Yw3K5wDiX6ttGP3WRwZfwVEcXszVJSFKP5YAtkoJjoyVe\nTRrBkbxxHiZ51OMUC80r3TPlV5x+Ptvukbk5Cw45pytNc/p8PJ48w8Kke0ammD9LpFOVCZhww2C+\nxDXLKKIq5DrFuUiXDQNBA54a69+j1Rpr1iA7nFX8vmfw+xhYlAeZYVEKZiXcIK3VOcDnCcwDU7Kg\nqPnd3JFOfZQwSpt6EtRjA7M2x5p4lD9nRqSPFTI/ekfzPIWcfO69UuHwDFHR0cC2tdh6yctqx/OV\nMmxb/vz5jn3n+N1rofeBpdlDD2ItTpQqtDxrbhEbUK0TRNOZihJLwEbGKxzUMhwGrtaWd7ckC0aP\naZY4SZY5GbhcWpYXDleDmAqsRf89PsGo7RgGPN3uDZvLNc9evuDv/+F3qB+wVc2zn/wtgwqeH3EL\nh5WA+HtULdY2VLLCLheYuoGqAnGIrVg9/QmHD9+xvf2R9eVn9P2OfvuGzXJNdflL2u07quvPsNpT\nbX7C6sufE4Y9DIHQb/HdLXr4EUIfqxCIRasK5zYYt0SqGoyN/RmLhp6Aj0d12JjPQq4Vo8qxz+XR\n6wyhNsYk08KZXSukfBZ98H1Gzc0QTUgyEuVzA8qoOq8XE/sev0kbJiQpUSUyKovS9S2r6y/p9ndY\nY/F0OKmJFUySYJD9Uyoctj9iXUVVX+P1n1EqRB373f+PtD/plSTJEnSx74iIqtp0Rx/DY86hMqur\nKrted3W/x4cHgnh7Lrnikiv+A274kwgQ3HBFAg02+vVYVV2ZVZkZmTGHR/h0RxtVVUQOFyI6mN3r\nHtlodZhfM1M1VZEjR848LJliB+kS05sMx3PDpM33Y+zrvuCT3gzVzfCtjDD7Rbsk8gNT6tufkxhO\n1C74ZNCuu//1kCLu362fZve5j3gTcNZyfn7E8dkRmGEdoCvekM1uoqM1I/UDtAVi56hx3QzTExQg\noL3gtq99HIJn/PGuDjnyZ3ecRzqBb4D8eH57asz4Ob0p8y3m6BGg9P5bvFPQ6SKPxyNJ/eU8UODL\neQqq02yFMULQ1HfOhghxjXcLoi1QNaA1XizRlER7DGZGKgQvIBGNQ7vv/qUdZEYD0QPs0AF7NI8x\n7encU3WPGabzXcmO9L3J33UG91QhqtPE91jwSLAYw3AsfPdC6T3Wl7ta4h2gY1ACqYl52zaErF2l\nsaUcwDYYHs8C07Dj9euGy7UHLCUupQchECuMVtiywIthHY4wYU1sG3bR0UhFygFM90459ZGKFfOy\nJfgSsQLastUjbi4cbVR+9r4wccJnzwM+BIwECmuZlIajyX9PigQ5XDsqsa75+c/ep21adpsdEgPW\nVlQn77NbrylOCxaPPmA+O8LYAu93RL9Dmw3N9g1h1eYSiQY1glqDdRN2mwsuv/s7JuUJDz78K7Sy\nLF9/gz15wvnjn6Gx5eb5P6LPA8fv/ZQwNZjpMRMRvHpUAzY0xN0G9Z6wW9P4V8SwhRCSXd/OiBKx\n6rGmwpgyE0HT6Yzsy6NyH169k5gO0vz9WLSf1TcS/kbPGzbLjx/3EYrBL/qOcWfiHnZbprMHTM+f\nsb58jmlbJo/OU6FmATWChCQmrFevKYqScnKKqmI0Eus3BGuJ0Q6Vd7D9lj187mFT2/H5P0Wz61Yo\n0eixj7A7S0+FJGcKJyaUCY6MiGd3rrtvR/e7O43WcV8ilx5fBn9td2afIPalvTT96uT4nPniuNMJ\n8vxzRPIeZihdWIpaIYqjCSW5fnb6vSTCo12S8T3gk9Hzx3MeUjfGOgpZcxoz00Phatgje8R3bKPr\nvuoBOqil9+HrfqrEPj7IeLEOjr1vMrH3UmBEKNoLojnClJPcSinkiFyFuCbYErEu4XEsMO2W1i6w\nQRBu8ThKo7TRY03Xx073Hj4SjQ5Glr2zenhtp1AcXD0S8PaFlPwbyTDaW5cOAsNDZAT8PRjLaHne\nsQ57Dz04OntFim8GxBByayOjKf1hUsD7xw3nU0sbLTe14btLz5JzBMVGT5CYi2avOS0D1hbJv1fv\nqKNhgsNJw4wGH0pqStQKJTXHRcOkgmDm3G49k4khsmBVC8YFjgrHzVr4+UeG//lE+d03nsVshjUR\n/Ibd+t0pEj+SJygoLaHZMSk8pat4+fImNVx1QllaYr1jd/Mcg6W+/YEi7jDOJf8HJJW0sBgXkmQW\nPJvNknp1AbslZQFxOmd7+5qvfvNvMFZ4+Ozn2OC5+f53WCuoge31l6wvvmNy8gCcBdFMaAxWc6FX\nBKFAKFPhZReI2tDGFTYXYEVirkKUtr90fCP/12/It6lfe3xmxADfiknDc9I9Rsg4+kUXZDFsifux\n8m2+sh8PPiFpSKppc/kNMj3FuJLp2SOWL79Eli9ZnL1PEHJfNc/u9hVlWVFMTogC3nuiplJ1hSvZ\nqUW6jr4acpTj4di1Z0ZD0Pj9npZ7mXvPcN4xx84M1JXKEBmc/vdJyplC9R7Z0Xrsm3H353E4rrvj\nSFJ7pz+IQNRAEwIhgOsIo0qfopOQIwuckrQAEUMhUFmhEU0EuYdrSFaOaJJAcjCywzD+jtGPedZ4\nSmk8ul8pawynXhAYogwHRXBfIzrE3Hdh5X+raTsNswsE2pMhAfD2CCMOaV7h9RgtFjgskYgNu4S3\nOkNbcpi+BWuS5So0BHWIm+FkiyeAdh7L7uFv4RSMWKJyB/uH82PR697ZDTiuP/Jdz/gOz91z1x8R\nPt+teYPtF1tBXM5d9ZQ28t5x5MlxycWq4Hev4FefnPPFuiE4pfA1LSeoGLyJqE1WKLEbSnNL2yql\nq6H2aBS8NhRmhwGmanFEZhOLlYr1ztGEltNjODqZU5iKk7pl5yMn0wIV4fWVp3CWX/3M8t2Lhotb\nYdsYmrZ4O3D4MSYoKaM/tBuuXr+hvlDOHj9kNj9CnLKYlYR2Q900HC8eJR9SURGMxWWHv1GDU1Bn\nqesNy8uXaLPm5OFHzB9+wHa3ov3hCxaLh0znDwj1kqgOd/SEyeIIJ4mhilWuf/gtuqk5ffqX6KTE\n4NICSUCtQdQyLvOQTAcxNYZd/YD5w2+SGcrkWnjSEQi5I7V20n5/rw4J+mixjkAMXPHeLZKvG6xE\nb2eZIpILxabP2hFz7jK9O485QOTDSFLJgT4pLygS/Y6inCK5ks/i+ClN2LK8es709AkQaZevqSbH\nuMkxUT1+fYNul5ioVPPH7Jod4tL9YzS9f+Dt49Se+ewHOexrQp22tz+/0dyGaXFYeYYDgrx3/Vt9\nNuPfvoWaSDf+7l7diXh4ESkQwfQXCuBDqmmo2qXgJaZnTFc6LQtC3QtNgogxKY1CFXIaUNIQPNJb\nMn7sGF81itbs6WgOUxkxwjGz660WiaMP5/L/+3DVg7+j+9xz5l0E+O59u9eBiKqao2ssbXGEi4LV\nG3zt0eIEE0OqBFMcp4IbCkYdXrfQzjDhBm9ntL6lnJwR6y1CRKJJ5us/ka3vYzGDdJ01ubEspqP/\n9xnaPVLK3q3GgBzgsbedDmD33yZsHMBcBowxKBoiYbflg1PL+8dw01g+ewGNRk4W8N57M55f1MRZ\ngdQNm90N5WyCKxwTq4iJFAp+Y4l1i7MGM58Rm+SyEl0wdUtKB01taT3c1g1SCfPFMRdby8slRG1S\niysskToXNjAYWl6tCn750RGr3Zo3N5bIf0dgTKoOronRrXccn09xs/fwYYm2UC6eUJ59RHl7xez0\nAYUrmZy9nzo7SMSJw8SWpqlZvvqOsLrk9Pwx0/P38aK8fv09fnnJ2cOPmJ09BTE4o2w2FyzfPCdu\nz5g/fkpRzInacvL+n7N++TnX3/ya009+hZQui7gFTqV3qCqxx6coQBuQtkZjjTVzrLjeaZ/RpP/T\nbfAh/6tDjH0iPfxuP3UC6Jlr+iaybyaVAwZw95A9ZB80lf1r7teY7rvv0LYmIXKMkRhbKKr0fQyI\nEebzp2zWr1m+/pLCKK6cEOOO3fWGtl0hYUuxOMVeF3itiUFx4rBWiDblCXbNNGFf0uyhnRXBwfQ2\npAeMX3Jwj/1j7KnKmsE9190VDO7RhHrB5j4SfXDdSJJP96b/PNyLPNeuB1oDtHzz+VfMxPPzv3yY\nhB3pcvyGvm4igukT6BMO29BQ+ec0JG1FrAFTIiGVAIwZR7qSZ3eiC9ObYYxjIsqgOHfIvy9CDHl9\nh2DZh2W6dh+2A+PbX5sDk+pbifMYH4Znpo17l+k6UWo1mBgJ5RTnHa69Qeo3oIZYzSkkItoggDEt\n9fYWJtNUWaZeYWwFtkyFJEID1oGaPb3zrvA2HsXh+DtC0ANimHtvseBgTXRAo0OYjdZx33T9px/v\nZoaH90y6ayT5K6NEPJGqKjlalHzz/YZdEKqyYaLKL96fsVopu9ojoWClU0rXsqsbfFOhKqiJPKk2\nOBcpZAsaWLVHSdGJERe3FPMjlmHCOihOPNPFlqkruL5Zso0Fxs1Tr0hxqPiuiRNRLBojL1552nrN\n3/xyzvx4y2ff7N4Jk3cHxuSqD/XyErRhOjlGJye0IWBQzPSYhprWt3gDLvtdTO7PVa9uWF58i26W\nHJ2cU/38LxG3YPn6W26vv2M2P+fpT34FRQnZhOQVJov3mM3PuH79NRdf/5aj0w+ZnT9GKDh6/Gcs\n5WuuP//PnHz819jFKTEGYg6605jMpCks26Y0CAzRZN9VLr0mDFF8KfhDe2KdGORgUlLggAelo88d\nvO9kJ90N2sH4q1EqMWNfnio9cR1L3O863krcx+/zZhSEGAM0nrC9pWm3BL/Fh5aIpxRDaG8J0SPm\nlLB+gxIxtqSalqnKRtyit9/jpo9QVyWCryFFno6cnT3b32OGh2NO22wY8z2M/XByI1/K/cddInVH\n6oYRIxs/+23E5fD32XSpQjQCmor5QqREKV2gMC1WlMqWXL9+wfeTwKd/9he57RekVkqQy7Wk8fa+\nS2FaOh5UN7xcbXOXdI/qjtJfEkNBMC4FCcRuZUew0kFjGwdkHYAgE2S558u3wTVr6j8iM9y7XfZH\ns3+DezbZHX/nPdaQviyGTRqyFYtEjzhLaeaU8YJQb2jbG5xOUS1ookdoKB1Myh0h1IT2GuOeYlVR\nHFFDHnHcn00vEcg9cx8YVGeC31faBqAN5EAH4WOP+Y0LEOx/tw+DfRH8LvYO9+gidu9L47l7dLSp\nq9SccBZnKeczZPqAb1apBrYquEI5Ojvm3/96yaulyxahCbUpOTZrdvWGYOeEoLzRCXbXstwK0jiC\nCFLfUJkdwRxxs54QVLHSsJgGVI54s3EoWyZyS2i3GJng7Sy5FLo+tNk1YA1cXzf8279X/vWvjnnv\n5L+jgHYqJeZZrW6Sj2JyjFeHbxuORCiqE/AtjoIqFpTTORoDu/Utl6++xtdrHpw/YfHsZ8SiZL16\nw/UXn1FWJU8//hWTapZZX9IGlM73oWCmnD75Je3xFctXf2S7fMnJez+lmkw5ffwpN87w8qu/48FH\nf8X0+BxIUrFB0Jiqh6OaTItW8b7BxJj9iAkJxg7l/jszJLSjchfPD/BEe42y09gG5GH0rJHo2/98\nyEm8DyXvR+n98+l++xrJvrmq+94MJQMIcQMmMpkfIbYkriOFKzEa8c01xw/eZ7tZsrl9hQ2e6ugB\nFAUxGKJ16GSKrY4Rbaljm3Kw7CD5j5nueAz3a3f3zfGQ6Q0C893v5TAG4x1a5F1TayeVy2i891tz\n3xZQkMyczqSyxg+mwj97WjMpA/+xUjQK86nwr/93f80nHzxmMZ8lAc1mBizkBPquYkwah2pqNhsc\nSOkw0WOtYqTlcfktwVtu9AE7fUiXhzrSE+jErD1yeeALGp63Bw2kL7sgPVw636CO8Dq5eYXBJC09\n81Ukp57pviCjA9HX7vPot92QOldAx95R5S7tHnBdRJjJBkKDkrqYFzYgbkEMlnZ7S9NsKMoJUydY\nU+HjBlcd4ZuCsqohbti1byi0RghoTjDnnv01wLmD7T7DTs1fxwA+3J93sT7V9c1NC0a/6NYygeR+\nBvhuOqEH7w8ECe3w5UBYGv9SUs6nkdQAvSwcaFI4FMuz84j3BVc3XbNcBQxNENZmykQuWLXgijm1\nd0zUEEKNb65ZlB51kdo+QLUADZS64vTEsGpmbLcmF+wvaeMTjLSILpmEK7y3RDsnmAkKWFokpgZ7\nuyby7/7umr/4+fFbYJOOd+cJqgcCm80Nk9JhJ2fs6i3iW8xUUWPZrZep6HJVsKlv2H75DU295vzs\nGccf/wJxM1a7Gy6f/xbbeh4++YjJySNEhCCpHVLnJ+p5koBqqpNhJ8ecf/TXbK+ec/Htr5ksnnL8\n6BPmDz/FuYrr736NvvcLFudPUyK4NRh1BI1EaRksbW0yl5ouIGGvLgaCZgY4Yi73EOg7TuU7iDgw\n1j0Wegdf5eDUAADpmfLo8ntxvJPMB5lfMkGXvR9LzzBQiE0DdoqdnAAOW3oiEW03TBcfEEJNMZlx\nvPhz4uYaUx5TThcYlLreYuLXRJTpbI7d3qRGl3TpzwMBvguXAWaJFh5oIJ3QMDIP3TGxHTDU8TnZ\nnzSdVv82C9CYkHWuXX2LinN/EEHCESMpSAVg2Xh++2JKHWFTp9JkdSPc3NyyPC45fQyqMXVENyBB\nBktALxMJ4FBjqMMR1cKy01siE6JGXoc/wxhogRgHU2gPhzyyThYZcja5Zw7dXPP8dLhH94WM1k/6\na7rV0B5UHVPs7yr7aztE045uwP4+GVZOR1bcAfb7K9O5GVJh+IaSKBPUCAUthY0sw5xQTCko0GZJ\nYZQ2GqKUYKbc1g6NQlE9pvArvJ1h3IboA1KkxIAxjBIz4GAcHU7nAQ+yLb0/UEZQHvMh5c7Nuv3b\nXTuuH/zOYhAHn0d65+iKgz3X79e7tG6M5Z2gr2oIPmJsapbuJWKAj99b8O2LHT4Yxo1ujSi1lkRz\nysxfs27BuQmdJc5KgytmbMKEQARtmMmak5OKq21BHbI5VhJuRaNEKRF9ANpg44aSWyJbGqa0sejS\ncFPueQj8/W/Xb4UZ/AgTtBpofEtcrZlVFeX0lIvbG4g1Rks2yzc0Tc16uaG+fU1hhYcf/jnzD/4c\nW5WEdseb579je3vJ+cP3ODp7CsUE0Rx7r44kL4S8WU2P6J00IWJBDbMHn1AdnXH18itefvUfOX/0\nUxZn7yPWcfvtZ+BrZk8+IWrAqsGKgqayX0GV6Nsk22VzqPZO6FxDUTKCd8T3cKt1hES76zqqlTbh\nHtrIwJiGjTA6DpjcwYl7DmXPhzBim/eh+r7bpCNVsdcYQ73DknICY2yI/pamqZkuzgjNLeKm2MV7\nGBRfLahvX6G1Uk7OcaXiTUSqM9TZFG4uASR15ujCCAY4jrbeiALs+z0PZi5DQv1diOhbiPhb4HYP\nIxwLDXfF8rvE4K2Hpv0uNpm/DAbvHVfRY9QS1OJMwBrB2jIlaxtD7INfBl/x/vzJgoCiGNb6HkHX\nWAtBK3y0ePEYij6lZU+LYlQxaTTntxPQjqpneDFoWIfwGMsZ45Jb/XmRXobZA+0Y/uMzInugPyTX\n47H3e28MKhVQweAIUhFchcVQOmXjC4JajOzATtDKsaNEiSzchmN3xEWrYKZ4U2L8CsMEWxylTukS\n7wxe6LQizVSrg8BI8OrogewLgx0e3htkKl3jYO01aN0DOO9kgHvHntl7GNd4Dvtix2iN73lEIj05\nbUdTk2hjkjUDL0zLyKOTI3792etUh7WbA9BlGNQUUJwwaS6JvsEZgxFh2zh8NSWqx8aWSbWjqua8\nXhe0PtIHiSVDJ8nq4YmiKDbldkrgdBp5NFWapubi1hHFEgNEa1Bt3gmud3eRsI56u6Rpd5RFCZNj\nmuUaUU9RltRty+3VGyw1pW05eXTO/PwRYh1Xr3/g+89/jYuRD3/6K46efASFS40QRRBJ9eJEPVGy\nFtEzh07yi4BHTQRtscUxDz/8C86ffsDtyy94+cU/4qpjHn76z1ldfMv6+y+Sem4Ucl1GYiql1qyu\nWFjLzHok1iCSO3rTB450Fe0TmuRmj2NEkfzq36dzuc7BW3lYesb+i/HrPqzrk5W7e3TjHSNFeiVz\nVK48P35mR2Bl2KSRQNtcUhQhxVI1GzbXF6kUUutx0wcUs7MUBaipdt/k5DESPGH5ihhbNDqK6hjR\n3CdSLaqBKP5exjIm80rSEDTPUdjXNPq1R9g3/TASPg7hO4qqHAkJwyDGOCV7p0yuedoLK3eiTTtJ\nfhCERk/GGJupW0Ry8XaJJreCEYI6jDEYsfl86grRJ+Ybk17Sq6LJZyuKoUTclFZLuko+UXNAjSb3\ngZhuXsO0k7Ym2dEwyFxvE7HS1Du4H67HgFf3ZqjcwWnt91PHTI3m9wecscfVkTAwum1+7X9/qLF0\n+BZN6rFngzJnCwq7YCnYISitm6HlKUhACTQcY2KDNteImYIIHgN6DeJS8YI8xtzQZtT4e4zYgyAw\n+Hfpq5Dd7XhxB3w9bPdmJjKCwQCvt8rPwEATuhHl5gH58/4a5rXV4fnjylQdiTPaFaLpCl0YYoTS\nOUQCBvjgccHtNrLcemAoOpEU/wRHY4Q6pq4TR8UrjA2YqBACEiM21BxVNc4dc7VyeM0SpiErLLan\naaIOiUVypSnYWHKzqnh5M0XcnI8ewWKywuoaAsT7/Rv98SMFtAN++4Jp4XFli4nKervBqAHfYH3N\n/OiEh89+TjE9Ynr6iM16yfW3f0vpSh5//FOqyVle4Qi4HGkEojbnEQop1LsD3JhYJWwSJUUDafL5\nTY6eUPz0nPXlN7z6/O85ffQhDz79C26+/wN8U3P8wc+TS1AgmAAmmZZahOjmYIsBk3JwS4fg0qPL\ngA/SXdd/6Ax/IwKEjIiQ9H8H+/geYP+U9J6RyDaWi/th7102vB8YQeeX7NmPJuEgemUyPWK3vWRz\n9V3a5JOjlDcIRFrECkElp1BAOX9Mu3lNvXyBOoMrp2i9RmSDkdQeC91vRDrGvU6C1oOCyvuM8v7s\nvD/12M/DkpGfZv+u4yTlUR+QvZY1/btxcILeXZJAxKig3Z3yhk0/UmL2T7QiOGeyQBIz45Bkwh/B\nIAk5JqUbEVPhZ1LBitClXYhiNfXZjKTKR4PINHAZ1Uyc+7vvz+nu5wy3PNERuvd30P0F29PSBgCn\nHw2uwv3Rje/b+xjfouXsJZ/vzWL4bASmJlLTULgSZ5SVN1Rxg5oST4XRkB7sFthmlSrHxIgVS4y3\nGDdBJPmjVMBSE7WFXA1pT3aKuj+WLEj3k9wb50jvHePP+LgjLHY4cQCXfpn2q8XcVwUG6JFb4vh7\nHeDe4YbmVdfOkiODULj3aAGxKIq1ksyheD5+Nuezb5YpiV4g9W9NzDAp6gYbVjyat7hqwWpTUDQv\nUtNov0H0gtmiog0nbLeaC0OkrvMa7aisaYc5MkgNCIpHRGlbw4sLi3GG0lY8OFMKu2O5fTdVebc5\nVAQnQlEI5WRBKBxxs8IKlJOC8w9/xuuXP2DLKY3fsnn+OW294fTxE45PnxFFBqYnAvn9QTLSHQY4\nHCPG0lXH6ORp6zh/8lOmizNuXn/L+jpy9vgT1jffc/nVP/Low19giyoVAFdLU0e2dQs6Q02J6ZzP\n2SxljWBS916i5qalIwS+o2Bk8A/i2XiRuvFyD8bvE3wdvrhHYtS7D850dmxSGVc1sdnvIhJ7hFYS\nMwuaWsS07YZ2VVOsL1O3eDehLI9JYdCZQShIrgNKZqxm8RBbL2nbGo/B2QlVmXq0IWVC3G5DS9ct\nb9hY70rIHS30XZhlB3xHG4bgDO4Qz/sqc4wZ4h7BFxjnNfbW2ZHGN6680hMMHT0/z7EzP0q3QUck\n34oS2haX1wRNPeFMxjHtJFxSZJvkDhwaUq6axJhyYBUwXRiMST7ujmhKFs06+tBp26MxdyNUMald\nDfEAHiNCPkh/jKumJMadtYLcEXwIzNqH+QDj9M1QLLu7tWJU++C+vX2U6YVmfOhM7XqgTqbvI2Id\nNiZLT10HHC3eTEmeq5S2E0nrH4s5BYo1YOQcIaLtFqOeyAIXNohR2txUt4fbgUDVj0RTS7w93OvQ\n+EDI63E4E4eEKntS0B6z648Ro8towCDodCDLyoSmaPfh5yNmph3dySJjN4m8Bn2g8uhXHXVJnn+P\n39UEv6IqYTGzTKuKb1/dQqb3NjNmEQsxsDAbTo89jc54eVvho+PYHGPckjY2TCphWy9oM7lRFJMz\nE2JftGDwzXaC9D5vTIOOElFvqH3By0Y4ORKenN+lCOPjR2qHRm5urxF1FJOntF5o6hVzB6olt2+e\nowFubq6IuxsePf2A6Yeforbqh9xt7rS/9sONDyXU/vu3mLy6w6oiWJqoFEePeDQ9ZXX9nIvvP2O6\neAC64c1Xv+b8k7/COEsMgdikiC9rCjCWcZhwl0huRfKG7Db9SHpmX4o7HOL+lfmd3r2uPzH63bvl\nFB2xYkYb5S0MxZiR9pkwPKKEmOJwNXiod4h4Tt7/FbgJcXuLsYnYqWadZsTBRcDHAH6HSKQsHUX9\nGrUFIpNkdta4Jw8MJrUx0x9/zkRgj8mPJc9BCOnXXhhF3Q0EaJCpulAb5Q5U9X5Y66HvrPs7YrId\njR/uDYNZYJ9UaP5Nl7NprPDXv/oU2jqZXsUSEDBd19qEf2RG2BMjASsOYqQqhYfPzvfoYw8/lKEf\n3Qj2HVxVR9DVYT6dkNYV+xndcwyvbt79nPdklEyM9tBx0L7HPRUHZjuiuOP7HqA4eogvYxqw/71q\nItBzWaHtlBZHkBlBDRZPivTsrD8RqyYVnYpC1B3GzDFOcHqBxhp8y049FO+NmPjAhO4/ckDSmPP1\nwsE+Q+qxtNe8MoNXGBqiKd369q2MlBw5OrYkjWjV2Beow+PlzrhH8Bsz3A4HD44uMliITApl4hqm\nxY5Jobz/eMKrNw077zGZAWfDNEZ3PFlsmE5Kvl8ds911eG3w6iiAOhoaP8NHTaUtgwVyyhudC6HN\nAVf7wmmfJjUisiZbuwAkBK6vAxfLd3r93u0TjKFls75lUglmckxdb1C/o3Qlxz/5Fe1ujayeQ3vL\n00//gvmTT7KEG+i6QO+DNCHhsAkOXyOJabzdD9YlmkAQj5gU/aMiHJ1/wnt/9q+ALc1uQ1tvuPzi\n79Fc1cSrSdJF0TmupZdIrYCTVPlyjFNyCJ1DxifDiz7YYTyHewAu0r9GtP2AiQ6vjiAMoXJjJ3z3\n+3EwSuylfjmUCAU0NsTQUC6eItUE1GOlwGAJBsRoErxQwCHicGrR3RW2XlNOHqMURDen2S6JbcCS\nox2xPQy6zuBdKbA+YIaRYLQ3i32i2MGwm5f0vlhG90m8ZOhSMEiJHdgO7935DccBFt1ZM/Ytjsa3\n975XYw7GPD7fncm0/fhohsQNMQak7x2YNUDp/E3D72KElKYWcC4RH+f2oWU6AtnBoX8d7J2BM+b7\nD0x88NuN8aWbR7p6mPeIye9NX+8hsNrj4r7fOj+ro9X5d+bgtwOuj/ijcq9PsoeBeILuWFGm6EGg\nkNRMVcUlAIhHVClYo1hUC6xuUDwqhsAZ0Z3iyxnB7xDtLCH/LYeOzMOJ3qX3CQ7afxfy59inRBhS\nibLOjzuEDGXc7oAxWotBUEhadee7fFuQXzcq0eE5HZ7uRelqt58UrxE1ihfhaqk8/+Gar795RVsH\nHj2Y8tnzW5xRTMxR4lGZyZKPHmyJ5Yyvryt29bDKMZpUrs4EYmiR9horPgvfTbaMFDnWIPm/71CL\ne4WRDkkCgUgsFOOg+JGAoncyweAbpK1TJE9VsFldY2MKid3eXCST4fSEMjSYGAbBp8/hzzL/iHDs\nM7n9wIhee9D984yQCBQTbeogreDys6IqYiwPPvxrjj78M2RSsrr6gYvf/v9gc810EnKkHn2KRDeg\nxAQTw4j9c+8CuEs27RkfBwSZTEgPfjM2Vw7Xpvr/JhOjPcY/0PueYRwMpT96aV00M6Ic5COjzcAg\nOQX1mMIyP37K6vIVcb0Gl6pB2KioekwXIqQBEzzN7g2iATs/Ixifi5MrTb3F1+s8vkgqsxd7Qtzv\nVx0YYMKHPLYRLMxoPv1eZywAHTD+A8LbSbv7lTQOGcLbX2bv874ANl5vYGCU/bkhGASUVHc5Sfwx\nKv/w93/k5HiKtWYQ1rXzYA5hIb0AIYoxkdZH2kaxItxcb/KasAfffbxIQkASBO7jGJJwv5+P0nU+\n6QUnhnZOd4SBMQzGe1UVNObXuKOPjsqsdWt7fyBUV0puvA6ptNz+/EQ1BzKN1lgUlUDT5rKJakCS\nL8+IyWa8iIkWyxZMoNaKaJJ+aGiSG0AsAUuMBU4dEv60YvbD8N5GbHV8EZ0NUxlwyXRxAlERjenV\nXd8JGqNX928M1xHZ7M3UhzmxyaRMz/3G+NRdlfAn9rC1SLJGRsUDQVPk7KNzqLdweZuaI8TsJXx6\ndM2jc8vL9YKXV5YYUk4hIhADxionE0NpDSEmF8ykuGFmajoxQDTkFD3trTU/vgBCiiGRpJWGzHB/\n5HinObTZrik0IBSUkzPWty8wEnHVlIdPf86bi1eU5QxouP72nzhuf4Z79CE2l3ySXnpJg0u+lgz8\ng2fdT+h12HkDz8rXGjQ2ye4sBmhABTWOanHObH7K9vhrVs//kdsv/i2yW+KMwZoyER1NC2wQrAg2\nr/NYgt+vCzkeq/RD662G3TRHtnsONnEndUH+nSgWJXSIO7p4uHY08cOT2o+m1wSsKGYk+ymRsdMl\ntBGjltniDBcXLF98hYvHHFVHIKkYdgSMRCR42vo2dd2ePSaaJABJhHb9EnEFWhREsXTVebrnjHst\nDox6GKdI9hCPzHV99mYmvocBG93b7n6HxEVG39ytozpol+luaf2ll/S7v/dpNt1zDzLaxuszGpNm\nwtKdcZWlcHNsUWFyZZNhqaXXDEF7KwEYvA/E6BHxuYLJWEgczakzDY1wRDtGMQKhjuczOtfhnXRR\nfT00xvDvhpvXuDPBMtoDB0cfPJbXLHZEXEbBN5kh7BWDH99k/Oj7HiQgxBQ0JAWFf4MUpzSxyhpF\n7m9JJHWUULzO0nfW4Y3DhZAC6GJqAxexVOWEnWlJqT8MbrvRHt8b5t53bwHI/i/y7xjdX/chvkdL\nDlF+X4gYQXsE00MY7schiA736dbpbW4WSL5bkTLBLnh+8qzk8x9q2mAoouekvOLsSFiHM765GOIJ\nuhZqkYCIZULN2UJYXhQYrQnRUvsTJnbNwka2bZUa4fYmgz8FnmlO3fyNgkMIgP+Rn72TTfrmFuci\nTdNw9fJr1hffYkxktjjFTc8JbYOtCuYnTzj5+J9x+fJz1s//CdFURivVpUzmOXKUGwebdX8hde81\nuGU66SQ5wWM2IRhJiZmSkrUQYyF6HMmkt3jyU5795f9KMSlobn7AWIstCqSXOJPUW5qIszlyUWPW\nUvaBnkwVAxFP5tNBIlZiCqihS5fI3/c8rLtflrKytibQh+gbOlNpur4j1EMXhBFhJwWeDEJBYn6D\nGat7fuerS8Ehsa0pXEkINaKe6XwB7Yb17cu8EdI6Fap8VF7wwbHFVScJvl5pbt9gipJyuiBiUUlV\nJKL6pNH14489fPttKl0Ubg67H2kFHdzGmsdwdDPo3/Za39hHkLSosXmxR6ARUR9rImO4RrqQcr1v\nEIe4qPvrsXcrlC5jNxF/Q1FVeZN2fjRJJb4ks7JeNe40l9SHcL1R6sYR/GggIhjJKTkdgzcRkcCA\ncx3G7QsK6ePYJZFDp2S0LzXmtdifo94REEhCxFjS2QPcXfh0gQ97Z3pmuO8qGTTag/GOmT1dkJHg\nzQJvjrHtLZXeJglfc4CYgo2blCSfQ3Q0p6wA6PaKSE0bDSpTTDlDtKXz3/X7tzMZH3Dq/ULu92Px\n3vWQW8tpKpSuo5mPmNOYDnZ3HmuEw1hkX2PqaMuB9JxgBRKlx2Xt8eK+oSafc6oelttNKxTWUE0X\nfP1qh9Ut75/f8PBBwZvtlJdXJA2vAxlKFM2FzeHRwhBsSRCHJRB9QxMNm3YB4lmUWyqTusInPTQL\niSoDynNnEXrYZtk6B47pj5TP/hEmuLq54upqy5vbLVfLG/AeEIrFKY1uaZstTi1WDNOjBzz52b9k\nt7nl6ot/wASfG4Um7c90Sa1yV7vK8sKd14AE+1JPxzi6KSTOH5GoPRLZWKAxEt0MrY5xLuJKxTmH\nMREnKTqsEJi5RLh9DDmsV/MDhrEaE7FGE/MzDKZH7TZ1Ys57CzM2daoCAZGImJFpl2SOtTLK6cqa\nQm9FPjCFDDtl5DvrmaoMWldvttNsWjKEZolaWN08h3rL7vo5bjbH2ILt9Q+JMIRIvX5NUS6IxRkY\nxa/e0Cx/wDgwbppqjdY7bI4As0ZysMeQG9Uja8esRmPfKwbMeC75m7Ft5w7CHyL/mBEKXaDT4C86\nvPbgXqNHaFq2bMnoOG63nsO6DIO9h2Xn1JKebkYFY3OEZ3buZ3Nq7m7V0bF0XhKJds5gjOJjSLmv\nebzdpu3NjsSegfR7Sccm3gNf9R4I0ufBF3iX6Mro0uFOMrqmm+voxjISBqW7d4efhzDT0XWHDPBQ\nWOmYRJ7NIGWmyGhzwtam+sYuXlMRMERcXOGlIEjZh+cJFbSeuq2xElCZImFHUaQoRw3tsP/2mPFo\nSP3bEUN5C0e5I0B0sBvdbNjv46vuAdnBGPqYz3f4v/qV09Gze5jDof9zEDBjnzMoYojB4MyM61tP\n4V/x0ydbGo74/GXJ7UaSJbpHieSmSaTU4KyymCpXy6RSpKjtFFMQsKzqOT5aTmcrZkWTFCqaBH1R\n1MSsNKRi0YPg1gkFmd7wtlW4e7zTHLpeXtE0LYhS2QINgUIc5ewM39YYVxDLAiqXcmuKCeef/CWX\nX/1XXn/2nzh/9hPc6SNEHZhAQBAcpPi4vYV526LthfL213fUqiN02QRlEoGJ2fFcX7+gvnzOVGqm\n1QIrK8qyGpz0apnYyKKwXDcBjZLNY0OUYWe26TS/tLVHYcZ7QtRhyMpoHp1pYzQXNDEnjEDU/ZD3\n0T33JZWOoY4p833O9HStkJJFRXM+m68p3Ix6fU1lKmJIGsRk/pB2dcXtd79HJTKbL/jj65boL9jt\ndmAi5dE51DUSG9rdDc5ViOaOHJoq/2R70X6ASM6x1J5557+dGe5wfnt/D8/czwA7WOTHw0irHMCt\no/OHR5b4D871kZN6NyDp/nFmfNXQCwF13bDZ1QQtk8bsCmghSsjjigNYyEKcCk5hXjqWAr4JHY/s\n2wYlLadlLO8nDBI6/+B+ysm+ANrl4A17S0fnBrM1pGCHgQXocN/x4nWMcExYu+fIPZfegeN9gk4X\nEdixrlQ0YGAaeSeKotKC7BApiRTUekupayoTaI0gZs4Ej7FJYLV4TFyDHGOMgfYKi6eQiA+K5Eoj\ng6HxHYRVx2cPAXPIAMdRzAx75Q5iDlTy3i4pkISNPQHkbRTovgHrQE4OfnfoEtCclxXV4TVyvW6Y\nhh94cOL4/vaI1TanUdmYaeIIXio4gYByVLbcrmtutlOsLdLcQ91rtCqGTTMhBMPJxFOIZdWQ1xc0\nGiIJ9wfte3/e0v/3px3v7icYW2ZHCxbzU9bbNWG3plo45vMFm12LMwWlMRTGAm2SxK0wOXkP2d2y\nfvVPTPQXFCfP0qhyd/duKx4ywLupEaPcpvx/T9jMCDGycBnVIKq0q0s2bz6nIHDy8EOmxw9oNi8o\nVmvO5gXeCruY/GcnE2VWwkWT9TgxvQmxK+0DUMiQFBzRvudfevxgihiRfrpg6K4YQFddPjFs7XNy\nEnHLZof+nvsxXXfXdGCYneQ/To5XTTb8zueABCRagt8mE0TYcP3qkrre4tYnWMqcJB+S28e3rFcv\ncdZSuikeT7t6AfUWiXViprPHxDbPpV8l6MyAh3trYEDdOHU03zTmO+RDhzfpmgP46PjCngXs3+fA\np7J//27FDs2kHHw/MI0RW72HD2R/V1d9QTtrgMNHULH9M42kt8Z0OZUjomfSDMtJgQmWpmn72aVc\n5MxYtA+wHwG8g8AhYdzHox43EtfuYdS/BA6jXffrgSq97Xjst+mEoPsepoP2owdj6ziykS6nr3vy\noWC0T/BEQYOkKFBjcKpIERGdMTMrKt3SBCWyJVDRNhEJAVsps4kwlw2h3bFrdmwjuFgjIRKjZsH3\n4OhTRcbMOAGsiwX4k4Jk3vl5FNU9Ojd8d5/AcM/TRptk/NuxxjrQ3XvGnfFdSWsaNTHENxc3nBwf\n8eJ2zroBpAXc4I/s7tiZO6JiTeR8WvN6bfERDC4pLjElu/fNICRSx4KrneFktqFwJde7Eh8FFyNe\n2pzaM+yxNMqxaPGnH+9kgu12R2Er3v/kL/n61bfZRKjsmh1NmxzLoootJiglxkRKCnw5ozh9hPqP\nuPjq75hsNpy995Nc/DQxhT+VUY9zgzpCK6Nt1NmmYow0q9esX/0RDVuOHn3A9PRDsCUqDcEZ5qVw\ntrA0BRAjpShPjxyK4n2qBaikjgCVFZxJ/sGkYUdCTNJMGPCnG+WIUMLexsia2ti/GdGcMzbMw0iX\nAxRHpPBQK+xO6DD1/BwjyaSa6EjKjOrMAlZMKuFFyuU5OX6GmZ3i/Y7t7SvK2SlOAlEbzs4/oK1v\n2dy+BLVYdw6loZTE6IMpcW1BMAarbSpGQMSaFNWl+Iyc2q9Sr8FASsHo/cKHatmIJd6HyQffjelx\nzwRkfxN0I0lh+gyESvdJ8XDDsR93/8Gmv1f+duAge2ORnIyOdpGvnpfffomrTzl62jBbTDNtFxj7\nF5Vsik06ly0sM3NLu15xy46UN2ExJmSBQSAahHAgzWec6+a2pw2OrrsjqQx+1XEN395AMZJe94OW\nxvftJpF3xaEJUOhNnfeRrPvowqH2vt+YOrsRJDI3O6xTlICqUGBx1uLDgrrVlDoVb5kXjsVsgSkd\nfn2NuFOC7iirS6RZwe5lItIySePr9ls3w9Hc+3djlXq8DnvXj4/74Jc/j6W9O78Z33ts/jx89uFz\n9j/ftYhI//n+oiUdPihGHBKUl1c1JngW9phtcLT4vK+6fS8ZrSNq4KiInJ/O+GFlUAmoyb1Ifehx\nxgiEkAtlq+VqOeXhvObRkXK5mVA3WeNUk91PHaPlLjn5E493M8GmYTKbYgpDc/Ua0UhRFKyXFywv\nLtDSsSgN7e0l1awiqBAMlLaiOD4nViUP/uxvuPz897z6/B948MkvoazyJk9EVVX7BqODFMvwXgGJ\nfQixZiTRGDHGEhGa9TWb11+j2wuOzt5j+vCvEFfmO0YigXaneG94dDTBLgw/ANMCPjhxvFxHNBoq\nIoWFWSlMnCWE2GsnrUaCkp3EIwbXjbWTAGGP4aWajxmPBipHTsbrJWaDIZrcfXwsUQ/61ejQ/o/m\nexgjWfnIQoGSTRiKREXUEEyEUGMnR5iqStKdrQj1imJ2RlE+IbTXuGrC6fu/Yre9Sb9dnKXqQdGw\nu/kS37SY8hGOLT50kaABI5b97LVhDsOmG2teGSYZaEmzIf/6vlkfaDKj94nRjpnoEDkp3XM7M3jH\nvDID2I/5zOc7Rt6hYEd/RrusM5XTrblmmTn7UFJ3g5ZJCefHhieP5pi4RuMUawGTuk/0SlPvwzWE\n4LEu9dls6lsm0iDaoGKxamhRiLk2ZJ5HT4glDFJHnmfvVugHfADADnNkJND1TJ5eoLrzs/6abg8M\nuDlo2fSCa+zvnQRXObiXDpT4HrJ+yFRGIzFCHRwxVIhJfqjCtSybOXWITGykmoL6Cd5aVt4wiYEQ\nLCtfgG+gekplXtOYp5S2wbY3bBhrX4Oucaf0XAfnTqjIRGLvut4lMsBpbM0azh3MjYNzmUneZVYH\nY/qR8/vDSmO6d16kprraa/OWNtY8e/yUz79vCbScFDsaLdkGSxszWzEKMfu4NfLkLLILc3a7mujA\n2AJrhTZGyvy8qAImu4miEhBerCecThueHW95sylYblPkqBwwvnEUbQ/hXoJ7+/Ej5tBAWU7YtpHV\n9UWSEo1ltd3SEJloy836AmunPD7/GaUxNKHBb3eIsUhocMWcxz/7Ky6++4zv//C3vPfJX+DmxznX\nJGuEOhDOvaoQUVGTt05MWUSp44RFjdBsV6xffE7cvGR2+oDF+/8KOz0hhAZDQTApMtVFiKEhKEyd\n4eOHyumk4PFCeO+B8nLZMi/hfOY4qixt8Fxu4NZDyIANcbByi0q/sQdEGmt76e8Q0r2P6GmzpAhW\npIvylBzSG/vndAx1COPvjsE8nGzjNhdpTtpODENklIGsFQTEe2IIWJNKcKn3iN9SzI5AlNhe4aZz\njJsQo2U2e0Szu6JevsLMHiKmoG1q6ts3HJ/9DHZNItxkbUQ0l49K+nocS8xpLyGkeptObdJ8ZYCi\nkLt7aByI64hx7mk0e7LSiO0qSBfh2a3XHtHoxBftf77/2zv6IXJ40UDt6MPAyXGKkszJVj2GFtFI\naBve++TP+fDDh0TriCEkCJmYV95k/BFUknzbxhQBLc5SzSuaTQMxIDSotmAKTBS8zcEAccS0RuGt\ne4JCJ9B3pssxDBWMzbi453OmdwN0GY1R75qc9uCZwSOZQRtj6Ey2HbPv5jt+xluPniGOGcS+4GKi\nIVASDRgsi6KmiY46GFRbtr7GmClF5ZJpNHhOywYNgdi0YEpUKppgsKVHZQ56g8Zcw1KToPd2gppg\nLhn+2gGhR7mO6dEj1N6c4z5Mf1x51INr767ZPgjvnrvvmvu6jXTWCRWDRgExvLi4YqsrFrMFlyvH\nKkTKynMsG9pgqeOEnaY8blWYWuXxccHvXvrUsk5TvL21QmybFE+Q4wu63Twexc2mog2eR+eeaSFc\nXBusCA2pf6TtBFZN+zBxwrQpfiw69N1MECjLOfVuTb3b4DJ5a3Y3qCqnJx9QHR9Rr27wuy3Hjz6E\ndkfjrxD1CILVQBDDow9/ydXrb/jhj//A+bOfMn30DIkBK518KL30nFckc3mPRJvNaBHU0NYbbl5/\nSXv9NUeLU04/+R+oFk8S46WlKAqcAWsiogYJykkVqcRQWuHjBw1/9gzOHgliK25qw5+/J7Te8OUF\nfL+Eq3VgRzsgSOeY78wCqgy+r0z2TTf0A+oyoFP/9zCoRkhJ0c4kyWgg1+N7jO4rZN+l4kQpiFhS\npdZUk3kwFWhMsNB6hfgtGI9S0tZXaFSMWox1mNkRRhwRj4oSxVBMzjGmwK/f0EyPaWNAxVBUc/z2\nVaoO1ActDKJBLy13E9EEo0hm0CIJSft5DYRuVGJ7n+Z0kl/3vn/a3hd04uHeVtYuyOlAUrmXqGVT\nog6f7wxEBkaZqn7EnB+bCjkcm1uQVOW+LCqknLINkWo2xRYVod2xl+YyoBYIFMbgCouWZ5iiQuTX\nyX8ihtK/IMoTrC0JIYWbiU1SdCr4EJNlYaRl9KZJZXDldY/L71NwVS7YTRZKGGtv+8JBklF0H/Sa\nca4T4myq1NRFvHaLK6MHj4WTngTeQ4xHIz74FEE8LkJQQ1U2iMK2ERxrPBHPjBAFlUDlIg0Tlh6M\nrnBsCW6RRGxfUDY1bTVFbUgRoq4iUSkyXr1tXGmvvrUV0shUvzeDdzCse5/yJ2p49137LgZ4+Ln3\nB3faVj8ng0RY7xp2FDw6DvywNCx3E6ytmErDzCwxWFqd4KPj4XGkMROuV3UWAixRHCIpvzglxhcJ\n83Qfz9L+UFa1o71QPnyQSgn+cKlIsKnRL7lmqoEYIyZKn55VusC7jnfXDtUGMY7YXiPR4wphFyK6\naylMiW897GqcE9aXX7C5fg7ljKOTZ4DFEIkxYEWJajh/8hHFZMblt3/keLvm9IOfJmm3JwW6hxAJ\npSwWQdRQ71bcvPmG5s1XlJOS84/+OcXpU4SCEFsk+pQLKIIEpRRhVliO5sLkvYbHE8PPT//Ik5Mv\nOP3l/0h49K9QHvE3D/6Bb//xmn/7+8A/vWq5qT2oEkdxmYlw9BQ9Y/FedMzo7UjK7pmY7F+o2puD\nuyARY8CpEHN+e8a7QYK+R/4WITF8m534mqJMB8KSCaNx4D1lsUC1oL55Rb16TVGcUh6dY0qHhpg1\nCiV7P8FEimqOFUvTXtI2V8wWj1JrIAMQkpSISQJHRl/N+VlJrkkrrEaRGCmJPJ4YLmrFx2Fenex3\nXzBCLwqMQNnpYEN+WXcX7bWHMZFONxqXVTvc+GMY/xhh0n5AqVh4usaoZ2Yu2eo8jUaU2axCxKBZ\ngBiXSNsXdBKpFY3YAkprsaK00SOmwzvBFsfM/WtqfYoTSyRkH6TtRYgkIMmBwJDHi7Bne84CqDBE\nhAopDSh0SNih7ahQ9B3YHsJKBUIk5LznLstjzEb2rj242f2McLyPNMM/YrQm0uKcoTLCeq04s8JT\nEZhiMgNqY6rHOi1bCjyxMYhYKvEEtbSmpYmKkzXOKsaHJOL17o53MKix4PWWMOQ9sP/Itfu3HpjX\nODd2fP7tUaa89ftDqI/vP6xNd1HSBjGWxaxgdmz4fpkiAd5fwPe3yi5GlmKxnDGVHROzISB88PCY\n7y+U6EGtIclDijFZGI4ByVrjYRRzsmMlK1dbW75+oTx77Pn5hxXfPm9YNR5jUo1k1dR/BSsE3fH4\nuOBv/sWn74Ttu7tIYFANLC9v0BBx04Lq9DHrOlDYimpxisyPmU/nnExnGI1cfvtHbi++xU5nzOed\nZpFNUlE4Ojmnqv6Kl199Rv3ZP/D40z9HqpK+MnhPuyUlk2Kp/YbbV1+ye/0VhXGcvv8LJufvI8UE\nUUXF40npDRIirSqFcUSveDxGWqwEPjmHnz/6Hac/+1/h2f8ZW36MNt+i/hveXJZcb5JpqbCG6AUZ\nhYAacuGVXiPcRyQYNqz0BI0euaUPZhmkq6ip3h+aGKDNATSatcE4ZoCjR6oOQfFGBGcSIxQEQlf6\nbfCzijXYKES/JTav2Vz8EzEaNEaKagrOQgtqDOARTeYfazoDj0JRMSkeUYTfo7YFDVhXoTb5sKSH\nkk8IPt5MgGoqsm3F8v7MsgySinKjcCBsdH5EHRG6zk6i3E1j6I4u4m2vWkz3N5tKBvG839njO7zj\nvvvXjYm3EFM3BISKC1ot2cbUPNoVBm8mKR9tvaU60eTPFsk+7QRj0/mGM0M1Eeroab3io2cxO8tM\nwRPsgoJAFd6gcp7hkhjoUeWZGMNFqmz3Y2Q7a4gZ5hkP0S44ZogilNwxooPRXhWT/FkP3ncM9adz\n+H6bBWjthJd9HBliG2Sf+HarlbdU70MeHxF8hNIoE7dluwUxijdTYrSISg43SwKbx7HcCceTlPsb\nmBLV4WiYGkuDoYiC8RajITcD6AZzP+O/Y3l4G7xH8vGYAb3rt3eDi4ZI9fuuu4/ZvfXcnuDXXzww\nZtl3UXU9LU+OSt57b8qL28hNXTI1nsdzeL40+JiUiBUFRhxPFw3zecH2mwumhaMOZY5cLxEpSMSn\nRk22CHbiWk8/sqIUFZVAq5HvXsKTs4Zf/GTCly9arm58algNxBCZ2Zr3H5VMplN+85uLd0D3R5hg\nYSwhbFjfXqaNaaCQiO5uaIsp7eo10qyo6yPwJ0gxwU6mHC9mrK6/Y3NTcvboA2xR9dzNqqGqFjz7\n+a94883veP7Hv+fxR7+kXBxnvwM9AQx+x/LiO25f/hHxLadPf8rR408wVQVqUquZLOFJzEnSAhKU\nGGs2xtIGIdYNFz9EPqwazPwEzv4novsIiStk/e9orldMZo/46KFgTOBiG1nWShPG/irJhC5h8dhP\n16G/9P9lRMo7vouS6nxTY8NPQoaYtYk0/mAklfrR2GsNY6QdS/RWoBSoMlPdacess/aFpio6YtF2\nh3MT5scfYCcn7LZLXDHJUr9JdUVTFVuk76qdCI9BCX6DsQ4bI6G5Bk2EPIU5JyKsHfKOGZEoqi1E\nQ2UMc9fypk4mjN542jMnRlSvg1L2ex3AoX97D3Hub0MneHQMslundzHB8aYfnxvr411BACEoOFXm\n5poolloXFMan6GLruNjN8fUNMpumMH7tBCXt13EQWuiZ4fJmzXrlCUHxdg5iU/5h2OHlBFdccWpu\nuaqPIKfhPDs3nDi4+FYQCXm+Q9iZjmYgmQCm2pVD7VmElIIk0JW8EnIe6wHRTEzroABGl/6Sr1+3\n3ZX0lg8y7DoNek+rHC/LsI3uLs8YZhqZmi1t7YhURFuhmjoSDB3iBcT0Y3Pi0vgloOJodIorHEVY\nYlWp/YpAhRZH7O3Cu0prP9b9U2PcHujA/QLY/cePmUbfdf27NMIOd2FQPBRSgZEY968zKR4j0dcE\nQ2Ph/GSOM4YQW96sDE9OI48WwstljqM2QtDI40cTnl8WXDUllWs5Yc1WS7wfWpB1/lY9wK80vmwh\nEZPjCEDV8sOVUrcb/uzjBS9nFd+92lLZyK9+9RCtV3z+bcPVD2umZvdOmL1bE7QKoSZ6n81uFiNQ\nuUBRBHx9Tdjdsr35juAFJxZcRfnxL1kcneE3l7z4/L+wOPuI44dPEJvySMQIzlie/OTPuX75Hd9/\n8Y88fv9T5uePUDG03rO6+prl8z+ifs3Rw084ef9nFOUJUZKGZJBsNhNQ05fjCpoc4y5LjV5hU9dM\nSsN7jxdUx78k8gQJX6Grf4P/7nOevzjj+Ru43SgYwyxXjHB+KPtVGFKTWd3T8wZ03mN4I9t/T/Ay\naz/kaZpMTl6zRicRMSngIdXqy1Uo+50k/YMFpTSGyloKE6kDtCFvOo1oluIMghglxC3T6QxjHKk5\nZurD1ukLRgQTk+dOMiFMBCMgzS3OzTFMsEVBUS5YXX9LGVNVh6TpwYj1jJA5ET6NkV1UPrvpWsEm\nyES6AJFkIh4A3DG24f0efxyg2MPy7rfp3Vjj6LSjfZY2XHdfK6/kbk8mm1TvPgwCiQgTc4XBsNUj\nokQWbHCi+ADvPX6AX77CPPoF0TfYyg2RrNJpKOzhhua1jxopJIIpUCmQuMWGNVpOCfEYNUvOZ0te\nrU+AyB9fOpxEShP58Fj48kZToJQxSBx8I+NVAk1BVWY414NfB5xOJvwxnLOlQcZrdJAOpMIPW5C+\nekzHADuo6mixdH9tO5mgO9e1yNm7SNGoVOLZacuOY9SUyS+kShCFmILG0m0SvI+mATEOkUjpN3hb\n4YmoOYYINVNKvUnBS9r/bBS4AYeD3Y867id1z/s7U9z/rtP0Ruc7GnMf/x1reXvX5990gmknnA7a\nfbfryM2dU9xFytoZqt+INRhTpGpfqig2R9sr4gR2ShDh9dLx/mnL2Uy5Wjs0Cscz5fxkwn/8bU0b\nKnwsKdRTuR3zyRZtW4wYbGw4mu/wbeoqr2IIPgWKBY25BVmb0jOiJWSGfLGB9o9b/uJnMz5475gP\nP/yA2+sN//7Xt1zdtjw5a/j5T07uhX13vJMJVhPH4kh49aoFFY5Pn/Len/8f+Pp3/5GzRx8ymy1Y\nnD+hDR4fGkwItLsNvt2xvXyFzWWiLr7/Hbev/gDqKKYTrCuo3AxbTqgmFUfnj/j+D/+JB4/eR1zF\n5cW30Gw4f/gBx+//S8qjJ0kSDRYbA2Iine8r2wZJcoRgUxZl6vhthGOnPJ3D04kymyh/+58v+YX9\nr5w8+t9YvQysN2d8dwFfvfG83ETqmCQPT9rAHaLanNlsdJBcFYaMh4x5h/tgj6COsLerHp/mQeqn\nZYRKhMIIrRVCSEgck9g2cFxJDxaSGXRSJCne+64Z8MEmECXGFm0D87P3wcLm9odU8cWYHPmVhIqu\nDitZeg6+hbDGFCdgDJEWE1tiaIkBVFwOpYhgkoQW8xh74tlNXmLu4JFMG87YlJsZwmh6dxO69yTn\n+yTF/v7d5y7waMxEx9fec/RM8v6AjKQxGIJGlIAxEYkWIszjNdYYluY0afURptUWBawr+aufFFz8\n0PD6t6/5F//qMWV5gsauZYzZe0o3QtGISEGMntIV+JAEF2uFabFhjUdRNn7GcbHifLrkcjtHQ6AR\nsDGwbZP/K2Yf+eBrOIRFwp+xid0I+DBoc93aHCapdHfMRY/2YNmnPnWEGNgry3awGPtWAXqiPQgt\nWQvY06QiKpEmBgopCKq0tEnIU4WYzPoxKqm7YOSkSFzteiOcmQKcILQYLVJVK7V5vQXRVFhbx+qS\nHGh8d3ByENgGKO2f+5OOMR6+5f19pn8kR/jeCQIbiaWq7F/SSTwyUg0znYuRqAGTNjwB2NUty+WG\nqPNc9cHQhMD3t4b3j5W29axbw7NTYbV1rLcbBChEmZYNCxeYirAuStQ0hLhhZnc4K0wKixOHK9Nw\nLC6LoJa2jYi17GqlCUobHPPK8ujZE2auZXN9xb/599+w2TT87APL6WLObz4bAhzvO97JBE9OplTV\nlGbbYq1ht73m+8/+NzbXl6iH5XTC1fUFzhbZ/yCDpKRA9CATJlNL3axQv2X54nuKyZzF0QlmO8Wu\nU8ypZcPlN/85vS+mTI4fE0rH+uaSZl1jTYEUBlNW2KJCcBhx2Z2kPf1IkXHKxBhmhePxHGZq+OwL\nwz9+N6M6f8zRxwXffL/g5SXMKsfSt6yDsmyFOmj2M+qe1BcyMRCEPsQ7Y16/IQbO1xPmPVlxxBC7\nt91vY4Q2RGYCVSEEDE2IhDaby/a0BE25UBgmBczLZLr1IY4QXvaZgCoStmg1YTo7IfqG5c1rZs5h\nJycppQdNvkujECLqNxgNxOIIh6OJgVobXA0TX1OUM0wOzRcDapToswR5h/cPIfa9b65ThvIgBy1D\nuEtY9u/W/24MxNHnTtG6IzXfc089uO6+AANVEDVYjcl8hkMVZnJJMMpKznuznTMwczsUoZpUPD2b\n8+XvtwR7jWxawqzJ0rXmEvdjYCVEVmMpqgkxQll5mnaWhDKxnJSr7F8TIpbb5oTj4orTwrNsjwia\n2tO82eaSeTmgwXAfRFOxg77wuebWOtpVCUnMMeaIjqTM7Vs7oPtdF9IwMPP+KtG9b8e/UYZUpO6a\nXgtJC9IvcVqH/ipS25xU1jgUEybFhsI7NjqhVcGSynxFknl44RTjIlfbiDMJD70XCrvDYyFajDaY\nCMHOsRoJEukaDv3Y8bbgk/79PULWn2LCvOdB++O5h0n22v7I/Dz4Ekd5ylnw0KwJis3XGUkWnl7k\nz+tpDD4IbbvD6DSXMmsRgbqFl7fK45NIsYL3Hhzz+bcbFpMtZ2XDRBrqULFsK162E4qwozA7YivY\nVqibwJtgcyX8ltIKTiJV6amcMJ04qlJ4bwGL44pqWvDgbMGjh/DixY6TKfwv/3LOclfy+OwBX367\n4+Tkbr3q8fFOJvj0g6d8/vk1MRqshenxOcFZpLAUNuDYYtVh4gRxUworFM5gbIGpZogtKNw0Ecmi\nwFrYrC5YXr5mWh2zOH3MZntFff0dp2dz7OP38FSo33Ly5GfEoiS2kRgCoV2h2xVRi7yIqUuFsSXW\nTjDW4ZyhLArKoqCaTagoWW4c//TtNd/+1vMXn1ScPXiPV7fKV5fw6qbl0SJQTSwOoTAx5RBpdtqP\npNIQh7K746PbpJ1aqIylq32j053r+7CIZH5oQqQxwtQYFpWhjcqyzUw5/1p6ZA44ERaFMC2EXas0\nIQ6Mun9exIihCWk+xhYoSlHOmC489foCgjJZHCeYUhBjC+0mmZuLOVYcdd3Q1CvYrLFHDxA3pa53\nWNticwJg1CFZojsSL0smF2NSjlkM6aqUbtHBI7U/GRt09jc57Jkxx2DVATYJ7vcwyvGle2PTt14w\n5q29D09AgkUNTFhibGCjp0RVbGY+E7Nh5jzGWARYXl2z2wXmD89ZnMxotc1M2vT1Q/tnSoLBpo14\n9SiGSeXZSpkIlRQUbKnY4OUYEBparusj5sWGSVyz8XOMCEE9qTt3QI3NflsdzSwzGknpOckSkMzi\n+0ErgzA1Th3p3u8ReR2EntHC5fsMBLe7pyH7HtMm6JaS8YruRUTSiVP5ipwWQmypoyXGKROzodI1\nGkravHKIUIintMLtpkA1ECSZ8TUK0RUUYZV88qp4Lxh3hA03AzaM/ORvOw7lsbd91x1vY4B/Sl7f\n6II/+b69ID6ohP0Y8wV71w3+9pSl7TWpLOXE8fTJjC/fGLa1pI4+MaWwbdrI7a7lo7OaKrR8+qAm\nmMDWW243EzZbQfyaoyJC2FJLxGsEaiqnTI1SVTU+BppowQmhVTa1Zbn2WAsfPJvx3vEJv/v9G/5h\n84b5xHF6VHL+eM6//KtPqesdtYcnT44Q++5MwXcywaubHTfLG4K2TArHkw9+yao1SCh5/MFPKSYF\ntpzimxYNER9qYrujbWqazZYQIrHdImGTkFUU40qiGL757gumTnAm8OlPnnG7foo7/QQnUF98z/W3\nn3H87M9ASowEmCzQUORo+AghoKHBNw2tX0NoIO6wcYchpUqIqVB7TN3csmoCqzDBlme8uG55fh25\nraEJkRNvEZRCInYs9fXUdkCWfUs9PQEfoVze5F3iLL15oaP3SYLt7jxIKRFlG2AeIqfTJOE2Lex8\nNnGOpOmIMrXK2VQorFK3keTy0THd6RE5tjVtaLGmq9jjmUwr5kenLK9esbtaMzt9jLCl3S5RW+HL\nE9QH6t0Nsd1iyxnGzYm2JDa7BDNncFaG6jrRDGAbadLjZsOSVeje1zk+x0CeDxlYZ6IZgXrvN8NV\nWYvpCOD44vHxVql7uGOnlUhWLwNJSJ3KLRPZseIxyRKcfKeIMHVbJqUhRItvPdvdDu896iY0pkSi\nxxZ5Y4rt5eyhmS1ojFhTMJsIVhUfkkQe1BCD48ituK4XQK6qL45NPWNe3oAxbP0c8F3RjtS3Mqn7\nI1ik9AKbtcSUcJxrd8ZRR4S8TKr3MYEx7kv//4Guk8G9729N+2HA7d4MyiBIxqh9oEaCTe/Fot9T\nGlNlEpIPdmOmIDUOT9CAUuIMLIrAbW3wmiKYLQ6c4oJCDDhp2coClU1K95EiYVLU/Unp/RaFQRjT\nDmwZf+6H1p/CAN91vIu5/uhve//hcIdO8OlF7pHLRvLaiUbUGCKBk5MJhVVCruhVOM9R4TktWyqj\nzB2Ycsr87D2qScn5+YKjSggxoj6yE8PXf/yOf/P//VsU4dmn7xNNxXrV0Ky32HaL33rWa4NXh2Ao\nJHJ21GKk4nefXbK8bQluwsUNyGTCmTvl//X//pLrdcM//+tnEOG//O0P/N/+72+HxTuZ4OpmQ7Or\nIbaURcnN9SWr9TL1F3z1NZPpEWImyemsLdHYtJlRrCi2gGTYTSGxwW/YXt8Q6hXHE8euqfGt5Xef\n/cDR2QdU7jZtxuoIO5ly++ozQiiZP/wAFY8CzpoUpmoMpqqwxuAsWCtYYxBxqFgiqX6jMw6tv0F3\n3/PPfz5lTcMP64Jlbag14hsh0DJ1FpW+9kmPKAPWMDBCHRhdJwkP5tGMmmPpq6+lmT9nbriXcK+p\nc1YbhbqJlDNhMoFlDW3MCCqSHC+SiMdiAmfTVAy8CSGZ6XJiMtpFXiV2ENoaY0qcLVMRAZvSIEpX\nUj54zM3NG25f/gEKRzE5grYm1C9ptsvUKml+TIwNGmsKlHZ3SVVNiLoCVawRWj9mXpkZZ7hIz0jS\n3PtoQB0ZW3T8e+5yQt3XcsfHgfGNrrD0wQLeMUf1hPkthGe4VtGYyttNzZrStqzjeerzl9tuqSoO\nYeE2iLG00bAwhg8+/TmvLlc0/obdZsN8epKq9RQCIdfRzNPq+r0Zjdwu1whK8Am2kJZ/3TgWcouT\nh0QRSgV8Kkqx8UdMizVOhWWoEBuxfdV2kDiaO502lttfZS0QybxSyOkFMPQX7MDZaRQjOOuwYMO1\nh8S96zc5aNepaEBXO3e0mqPSdSApcjkHWHX3FsmWMwWR1LXch4jXCYXUOGkp8czLlptmSoiKNamY\ns8PjrMWGDTtzhJopNtapF54raYnJLWDHFpxDn/t4xD1w6Lyn+/7L+49DfBznAXaf76uu0+PtW/zY\n/Wj29lu2LPVNmrt7jt5k+tZL7TkyKD0jggqiDoOltA0PpzUnRU1loI6Oi6bgbFJRnBb88XnNuv2O\ni9sSck3mauKYVIazowIXVrhSaFr44Nk5v/j0KYU01Jsdy/WOSemIwfDH5y/49T9+wfG85MMPHnB8\nNMNWE8Q4VsuGN5cb/tX/+CHbdc3DB49ACqyDR/OCf/HXf/NO+L87WR5LEIMVqGYLjp9+wPqrzzk7\nf8Di9Iz5yUOMqzA2ZeFETbZcYwQJKQE+moAibJdXrC++wx0HtJ3jZic8efAEV07Yrlds11eUopw8\n/CClQAg0589Yvv4CF1sW732MMSVDiSxBjEl9BCWVZkq15rp1zBvMwHYXOZ/Bh+9N+Mdby6ZNCch5\nPdm2kiMxNeuAmjopjFF7jOx7GD9oDL0jGR2KEHfU/U7E4cDMiNr/PkZl7ZVNU/DBmaGOkV0Lu9YD\nJvXmIjnvH86F85nl6ytP41MuTRfF2vlYUCBGgt8xtR6ze5GiHJstWEdkQQhCYWDnN2y3NeWmBprU\nbcKkeqCy3KJW0LDGbxyWmqI8xgJOUm5QXymnj3JRTJcGkccT89r05G5EUZQhB3DMSDXDJl2/D0ft\n5Y28btLdacww9wNl7krnh4fuf68d0RZMuKV0O9b6ICX6K8QYMCYl+k7MiolrWDXzhFPWItJytii5\nqQP1asdksqCQ1IezE7ySoGToSrmICM9f3HC7dUS3pgld+zFhGWfM9YLC1rQ6BytYaSEojcLKz5i7\nJUdY1sGSdM2ASQrTASFPkdXW5DQJk8yBITfDFgSf8dKOdDB0VE+7J8IyAOweqHY4jkimrV2oPogF\nuiIRPY/LjLfzz49Qev/GSlQPanAxNdo2WSuvnLCwa+p2x8zfMneOKIboG4xRSqA0AeE6+bbaHcE7\nMHOi2sRwTYua5H+VrqSf7o9kT1E88M8djneMz3rP+cM8wEOf3nDrP0UPHASUqKlYRapMGPvlOhxv\nt/diHGiooSvEkLpr1D7yzZev+eA48nCmrHcVtRYghocTx88/mFKWjtd2ycxZjoqWTZ3zRLUmboXb\nNqXBmQi+3vHv/8Nv+A//6QtMhMKl/PLZ1PHk1DCp4PxkwXRaspgv+OYHz5vrS+aTwKcfnRHV8f/4\nf/4xV9sS1FsQj28DH316xv/l//p2CL07T3B6RBteYY2lmMywxYSm9Zw9mGOLkqKqEFMgJhKjpBie\njKypMENgt75l+eZ7/GaZql6YCWcffMzs5EGqFmOgmh5xcv6I5dX3vPz2n1icvMf09JyymnL65Ges\n33zJ1Vd/z9mzX2ImczqTQwxtqr8ZLRK7YteKdpXMs4SoIbKYpfy7poZNbPExtX5VFdosjTubbFFd\n3+kxDknnE5QswUoygXufRHRrbe9Lyb9ISNdLYeneXXLyns1dk98uSkrQb0V5sw08OzV8emZZb2te\nBkn+SpMCGaaF4eNjx7yAza4lAg5DaSMBYedjCpQRoXTKRLZMT044OnqAsx6/vUWKihhLrpstrcLk\n7GNkfc1u+QqxlmJxTur9DJI8f9hyhszOKJxSxlucK/DBp6CajvZ1+UR0EmXHzAaPYW9iGm1C2SOi\n+yR1LETsMcXuvxGFPCRGg6Y59iZ1Y5URnRgx5+62+Q4RwforbFiy4gnR5TqhkotA+4CI4cStaJvA\nTUwdCIIPrC+vubq8ojx6xmRWJoENQ4gKEiDrWjJ6ukrBZFIRjeF0cczyNvSM3csxdf2KyfSamgkO\nS2EEjY4iBDyRdTvhvFjjbMnST5DgETGpOAP01gIQCmNxJvl1RAQfk8RvhL5jSm9a7oES+1zZzgoy\nCA0d1DrireOTPYHvg3GQbHqL+NhVGkpMOUU270ssY2tAGpNineekbCgkso0JnjtSQfwWofEFbdvS\nbK+wtqQoDGYyx7hAZSNFMWfn0z6v7I42vCYyTUJcDKhJAUYwuDI6HBkf9zGpffS8h4ntCRAZAw6M\nE/f7BXV0je5dv39tMinHXIqqqw37dr/hQJdi1hyRbuydgGk4e3TEy6sZv/ndbf6lQWJkXrWU0yn/\n4R8uuFw6nIWnR57lBjahJMbUeR6NGFNQEjA+st0ZvE4Svojy4KTi6aMJm13Lb367ZNdOEQsvLm94\n72HBpAg8erjgs6/X/OGbDSFqsnRIGksUwVjLb37/35Esr7bCxcBkVlEaoV0tMdFTVpPUjFU11dZT\ni0m1hbJJQ9ne3nDz6jtod4noF47F2WNOz58iuJ5oSpeYbYTjBx8yPVly8+p7tt++4eTBMyZHpxw9\n/QXrq2+4fP5PPHz8U9zRQ1qNGJvDoBWIgWj2iahqSm4PXpnPLDdby7r1NGhfBFhEU15KyLUXc/UT\n0a5RR7ehw/jWScILkbauiTFijcHYpAmLWHxIm9m5AmNcip5kEHMTUY4EH5ImIYItCoL37GKAWPHm\nFn76acntuXC1bggiFNGANRyX8OHDguUusvEKBIwNOew+Rb4ZFGssE2cQ0/BwNmc+c/hY0NQ7hCnr\nekfQAlNOaXa3FLMzqtMn7NZv0BCw88dUboYSCLFmsnQggrXTlEPa1qyuLqGcpFfux6g9gUxzRCRr\nSxGNiRnFrGEkX2LSGI2YFDk5ogmJ6OxLq6MPY7bW+48YCxnjdRsX2+4J2qhqyjgkmIG4m7ChqJ8T\nbUHBFRotblRZX4hMS89xuWNXB+q2BY3sdlu++OI7bpctVXjDbFb0QSHWGny4T2NKRvn33jtB/vZb\nfni1TgFpCdFxBkJrWZhLjmdTolbYQqhDTfCKDxaPMBFw5pavbx2NOmz0CYszbDozqBPFmeROCDGt\nyZ5Jesyc85eJ+cSRVrnHBuHO506ryVw1C4J2bBrNyjBKFiC7XNmsgWpnORjdt4tYVcPOF6ykYNuk\nBs+zSqmDYV1HnFXKeYutbcolVqjrgoKSRpRVOyP4GnVHVKZCQgQ5xkmDpSX2luuRIJwh0Vfduffo\ntLdRfOU9zG1gq901d5me7q3FPlwTbNljiv298h4jpujPcenAvTv1ZtLR2LIGmQLYkjAfc6/LtvU4\nDOsdYCwOUAw/eb/ieqm8vmrQaAnWcrmxnE8iuhG2RIRAkEhUT2FL1LT4doeaSFEpP3m/4KP3j/jj\nN1u+/GadaDNCaCLP37R4ifz0w4dsdjVHE+GjJxNevN5S14n2qAmEEBGt9ip/3Xe8kwnK5BhM0pjO\nHryXzCIhYK1JCY6SNSYNiEmlierVkts339M0GypraDBMT885ffgM61JOWSRXp9AUgtspC4hi7IKH\n7/+cZn3N1cuvKW/fcPLwGScPPmZVlbx68QeO6y3Vgw+hbbIdJZCalWqPcJA3lwqtrzk6KljtHDtN\nyKy5wrhqlsPTeufAmAF5BpSKjPFLgBh80kajEkLyu2ENwQd22y3BB5wrKYoJ1hkwQoyBEEOKiosR\n733KwTEG5wpizsXRdsqXrePn51P+7FT55tsrrq8jFBVFUfDodML5Mby4qWmCpqa/koiYQVlYoSwM\nlTWUBayqwGw6oQ2O2+2O1bJBaFALmBLb1EyqM4JxBFVs+YjN9Q80q98xPfmAxkyJfknbbNAwI2qu\nXlIY2rbBBygwuKpIjD0kE5YPgbZt6TpdqGpCTkmmwvSdEEKAqBhjsJq6hHSO+SSGjuB/QAgGgXrf\n5NmR4fH3qgOpGW4Q7/wm223yeUG0xrBiqkopKyZVSWlTfU2JkdVqg4lTxBxhwo6j9gtK1hAsP7z4\nnrBdYZihscFIhThH51u+s++ASSHMZhUfPoysN57SvKEyO9DIE/2KYGusW3A+XdJsX3I2TU1HvQoh\nWtZ10vxaDUyLLW07J5GorsNICnKwIpQmUpocvZvtkabXexLD6hPPe+gN+2SfUcKQ+JCv71wTHYyl\nC5RKDMx0lZ6gr1jkow6m85GGnoI0xsZcxRow1tBGQ5QE16oEEc9q5wihQUJNbSzl5JjYGrYiFMHj\n4i3ELarnCJYgBS2C0TUqJWIN4n2eQjLPmtyloMOld/n9BmtEuu5eBqjDFYxg3t/z4P2hAfXtZtEE\nuxBDMn/m3pUDjcx4IPvXH2qbZGVCSG4ilcQImyjYIvb44UWZWsOHz074r7+/oQ6plq4QWG0NlcDx\nrGWzTiZ3VcvRpODx0ZxGI5Npy6cfGc6PZnz/0vP/+XevaXNQYCSieITIx++VnCyO+PU/XrGrPcdz\nw8fvz/j42QO+e73i+xcN61XEmNSSDPYjsA+PdzLBpq5pfUNlAsXinNVuhyumBNVEzENKXFQx7DZL\nbl9+T9vukMIm7aea8fjBe1TzY6J2jT+76KlUDQAgRcilqhmFChJgMjvlySdHLK/f8OqH33E8e8T8\nwXuUzybcvPyStt5x9OgTogkY02kAPdnr31oVoOZ4Ars60vpRBNQ4/2jkvxtiW4ZIqejjED0VlRA8\nTVPTNnUq2C2GwtlUSyT65JMgENsNdbtN5lNNJbZi7JzTCY5iBGstDbsUZWgsS+9pV5G/+8zxf/qf\nHH/9UeDVZc3r6y0Tp3zyizmOmpcvWta3lklVsWsjoQkULnJ2VHE2n1A5WDY1r5oll5cFG3tBvbml\n3bzC2YJJOcVWxxTzE2oKgm9Zb27ZbVpCI6ivqC++JpqSpnHoasl8eoafSO5xtyBGoVGfWmdFlwiF\nZEnfGNS6lHaSTTIxxtQvz1qKMgU3pY2VJM4QfAoQMQLYLKwkc/d+6HYSYkIIe+dizGXojEm/hZ6Q\ndkEWQF8iqrveOjuiRbqncYhCVVTUxU+4pUB2bW4BA2KVii1l6yka5fhkRt0eU7iCxWLK3/zNL/n1\nf/l7Hp5NqUqXJdQu+nKcLD88S1RoGo+GwPuPznn5w5ts5bGspSTEgOwiYgtUz7h4VWGMY9u27IIl\nqMEZ5b3TKyox2AjRpOf1jE1SYYaqEEqbtfJs4bEm1ZYds72+xZKONKERge7MmEN9z25/k5lHZ/o0\nvcmtWxNjJO+dxIgDA/MbxJpOghmvS8oLTlWRDK2PzCqlsi03tUW0oZAaLyWtlvg6UrqIQ9lIxdUm\nUG+WsLgFmWDFEqPBRY/YGs0e1cQsOt/9vlWo19/uMLgxXPbI0h4DHFKg9OBGOvpqYFBKgtfdOIO7\nDPE+hqY5jqLXUO/hoffdR0nmxpD3VN3scMUC1STcRxWePknukxdvVkg0SYOMEQ+8WcGjY3g0DbxZ\npfzNTS2sotC0gUfzBY8fnvF3/3jJD1dtqvqliQGC4Kzy8YczNBb85vNbvPcYMbxZRS5+f8PpUcGn\nz6Z8+j8c8ebW8/nX11xe17lAx9uPdzLBze0yRaoVBbUXVhev2dU1L168prSOzbbh+PiI9c0FYb3E\nLSZIFJwUnD59TDU/ScEnvs3FmTVHkiakMjETIwl02nYq90VuKSecnD9lOj9i/eZ7Xn71mtNHH3L6\n9Bdcv/4DF9//hpOnnxLLKQYPCNI1cSQH7WlAvVI5x3rbVVTJJsmoGUDJHBcxOQS7E16HkPCosQ8b\nVx00nBBytRUD1paUZUVVVDTWUm/X+LbNwSHJFBRFaDXQaopii5EU3q2KM4aohhga6tiireXzHzxf\nvij55/9sysXlmr/9yjIrhJ/+1OGbG7brgGstzirWt3x45Hh0LJzOatpg+eG65YtXN7x43VLbhhC/\nx/kNxC2xcGgwTEQxVUBsg29qNGgy1RmhlQKvR0z8koo1O02l1korTGlZhVuud3PElpRFmaIeMwPs\nfKJFURC1c/YHYkx5WGRtWCVF9yZLTUimZUnwj7muqvchlcIyNgsPyUEfQsB7j/dZm7YuS+mKtZau\neSsiuCI18VSSNuTbtjelqgI+SY8ds9GoED0hRAyeohCWQdh6RbVAMEQNFMbhpOWymfCADVdbx7fL\nh2x8yUwKjhcLymrB6ekRZVGw8hHRgKUEss9FA5K3o0qkbpXb1Q3LdYMrp1z4p+zC1yDwIv6EE3uJ\nmBterI/46AHs/IxoDEXZUu8EQ6DxPgloGkF8zqnrClunvVBamNlECdpWScnRHmMyvkfNJu7ENOlS\nFjSkqMy8zr4XSnI0Y+aeMWQztxGikBhgDIgxuAxrIzB3ySd/U3dBaYOZ1EinReXxjcx5TpTFxHI0\nXfC8jlTWMKka1mswbZ3GwISoDiH5onY1zCbCkQs0baIREiOFbQmhoFFLMA7LDhHBsUn5nEruiNOZ\n+wcmJHlMMTMMJAsNB4wSRpaJjqdnjTgVq5DuokHnHgtjKX8mVcDp6tx1okrWpgf+OhSoiBohdhG+\ng2jTM7tscRnz1X6c+ZkJN4SgLYjh9nbH8XESnKJVHJGPns754rs1tc8Wv2xNU0kVuF6uhA+OK44n\nW643lrIQbGHQILx+s+Xf3PzAulGMOmLOIxaFRRV478mM9Vr49vUNFpcZ8oALry9rXl3XHM+W/OzD\nBf/7f/WYq9sdn3+14l3HO5ng8vpNknZnC25vt2zWN6hWtNua1tUsby65ft5iCqGqZrTLHUfnT5ge\nnWKKkvVqw263wYihnM4wRrA5+CS0nrKsUk243E3AmI4k5eRLDNEHrJ1w9uxnbFdXXF88x0rF0YNP\naNYvuPn+9yzOP8XOj1OCMCEV085RbjbU+N0tFliur4mT1Oew9xmNTZ6iybmaESCEkJBHoa53GUk6\n81wKhumq5Dhrsc7hnMNK2uDGCLvtFoLHqk++F5fzbVCaBnZeaIKhbSM++qSdGYN1hklV0JrIb74L\n/LN/afif/sWMGFqKWcnjTx5x89krionyAMPJNPCTJ3Pef1ixayxfvW74/Q8rvr3ccLXesF1vcKUD\n3dH4BmWCGgsSsG1NpRUmQuUMhZ3RtB5nlXor1G1LLccUXOJMS+lSmyqNwnbbElQx0qbQdN8mQmcM\nYlIuXIyd9JmYjTHgnEnJ5JKL7QLWdLUh0xYeBxmJoS892VkUOk1DVfHeJ5Mq9FqgtQPDLMsSay0h\na/FpXLFnluk+PUvMCJH+xGxSsqWhdFC3EUSJUbDGcmTWxCCpx7AKEl0ScPLoQ04dKV3K0bSmzHS8\nM1FlkhRTMEryrQc224aiXGCdxTjba3DqW1rxaOlY1sLVLnA2b7hdO6ZTSx1bmhaqKJTGpX5+WQAV\n7F5qzqSQRIisUNdtEkgMaDe22AOhB4hoIJkGU5NtAAmpqEUcEe+sx2MlPdOHQNMGFE1at3OUlWNW\nOJxTgirzMtWg9b6r9am9y6JjimNzoDEJb5ybYWooi5btqoVWUFugWAIpijy5QCzRGrY+4XrpAl4h\nsEjmT13jbERigUTF2AabhYckXJkRsxnRjrEZXjSlbIlAruWb4hNyqlMMRJ9TDSRH0yPpOyE3yM4C\nRbZU9CjfM04y3RwQdahTRX9Rz+PIDas7oaIb7/j9vebQzt+poB4RB9FANGyWASnaFO8QhbNTZTav\n+O63l2nMkmo5qxhoGpyzSCM8v1aenRg+emz52c8e8P23LS+/f0PwHlvmCFzNQWcK86PA4wdzLl4r\nl6smFezXhlynsceGTiZYbiJ/9/sb/vj1kk8/WvA3v3rKu453MsHddoVzEY2e68tvqXdrrFV225qJ\ntBTVKY04aLdsvcOWU1avb4mvr6jKKWVZ5BqTkaCXGIHJpESMUO9qirJEMD3xss5ijcVai3OOalIx\nm89S4EwbmFRHuPcXrG5fc/HicxbzR5TzivXVH4nt+7jZOWoTSTUxd6WrHFVVYd2OmuNUGzAOlVo6\nJgYMroykyuTq6UkUsSYlC0kOa7fWUJS2R8pOg/A+sK63eN8AihqTCL0mgizWURWOeWU4mlZMrEF9\noAmedYDVDlQtzlW4siDSsPItl9/Cz/7mJ/wv7efoZMp8UbHSmscL4ZcfH/PRBydUheGHN57PXno+\ne6F8exPYRkMQAespKgvyiNDUhMaDWLAQtSG2G8RA4UpWm5rNZpvkSLE4kzQXFUspyqL0nEwNoZnQ\nhiWmSA1gjUAIEe+bJEEXJZikxakOfQ6tM1hrcum3HF3ZEc/OFN1XLumCJIYNK5KIdvIZKt4nIUqz\nyb2zNFRVhXMJxZNfUvIGiskUWxT9tYkg9HJ5qheZtR9jUxdrrIMgOGtQo6COmakpbcvrdkFRAnaJ\nSDGE/9NpM8nEu10vCeaUwqXKPYauBF9uoZTNfbOJobCK6bqlQH+dNoqtSmCDj5HvrxwnT2umlVBE\ny2npeF2vMcZTWA/qCT7BTEeWjsIo80KZlYrkdAAxSimWJgRi61EfR1p8J8jklAWEmNeWGJKGlzU/\na0wqPo3BkmEZIjZHfEoMNDtPqIHgmM2meAzzAkoHrU+958IeywPVyCBepML2XXrHzNyy3AltKPC2\nJJoiWYYyI+1tkhHEBHZeObITCgdqU0yBZ0pp1lhuwFuC96nPpk3aT+penGrlHkZUdhHpSShOOKOE\nLGwxJKgbA5ZRgQkBI7iM050lI4QUNNcF+HXum2QPtfm65OfrhAXyHurcO9ozWtOfN11vyywYdPdI\n8R3joLaREErnkkiVuqwxBO8R8SARjYGfPDvm9cWWy9sai0E0EHMLLkeOpDeGk4Xy6UcnNE3Dr//p\ngpubGldYtnXDdOJBA0iKvj47KTg6mvHDy5a6TlY8IeV0d+bd8ZGqaKZo+9XW85s/XvC7L6/exuKA\nH2GCoW4ocSkMvq2RUIODia2wIgS/hWKGVI/xwdL6FglNloZtNqckk0qImp3hDSIpD6lZrZNabwzW\nOqQNhBAGpijC4mjO2eNzZlWFhlTmaL54zGy24PbFD7TeU85PWd08x26u0fIREcE5oSochXWUGCor\nNL5EQ/LpRfV9lGJyHntCTOYwm0PFO1NajJHLy0sQQ1VVlFVF4bLWkqW2EAK+TSa5qIDJsVLGUbiU\nv5ekG/BiUGdTQq7xTM2ODxaOBwvHpDRIWbL0BbdbYblSJCg3F2uim/Pev/4rrDmC6pbFI+F/fHbM\n/KRi9yrwhy93/P5F5Ms3ym2tlGVBUU2QWKd8z/kZZXlKsV4hC6EqCspcds2KstttqXdbmjrQNoFI\nCzElKVcu0jQWZysWx6cspoYX6yXWzJnNZiipSHfUSFM3hBAwZgsiKfgnMxoDFEWBtYaydBjnUnWf\nPqUi+4E0m6B7SbRjKdm8otA0DW3bZrO07zdtJ822bbunIXZ/QSkKR1mWWVNMjLDI5lJjTCb2XX+L\nZAZLjDARL4tQ0rKoNix3c4wolYVPnp3xxYuGkAOpFCAqlsT4jTH4psUah9OUg6mqaA5ZjJpwxuE5\nXlSgHg0V0fucs2bwmqozaQzsNjVVMePrl/Dn7zdslw2FNZQaSIpFRLVBQkuUMkXkatoDzikThIlE\nVo2nbVuMSUy7bVp8G3JkYdZksh/TyOBrDdqlO0AhQshU2nRMQgMxazfOOkQDPqaUmoihDZF27Vnt\nNhhX0JaGSSkU1tBGkJhcCN2iq3aYlLChMkphlMpE2rplHU6JpiR1K89l9dUQ6TS4xMiJwtECZsbh\nl5HS1LQ6w6inYcLUn+JNwIUtIitSSf1Ubi12zHR0JN6VOw9GCG1ykySYpWu68CsxKVYhxlHen4Kx\nmguRa8bn2OMyqn3f4dgx1M6Vo13uX/bbZSao2WKV4i+6YhVZwLeOvplttpboaG8NfzvhUgCDSsQU\nsDiacnzsePpgyqxqCArPHh3zb//udRYU8v0EjHpahJOp4YMnE05OC/7wzYbrVcujOVQiNCbxGDUK\n0VBYz/m5xRjL8+8b2qAEkqskmY4D+xWhkhArmohM0OSWsWqJ7f5aHR7vZILRbxBJgSeFFWTiKKbn\naUNSYiczjJmhEawJqDrQVErLWgihJYZEYGJ20nVW6o6mGWOylBJz5GTsF98rhNt1IminR5RlRWi2\nCbjOUJ0+xoYdt5cvaHctNnyPyBJfPkQdTMuK3VYpNitKZ7i8XbOrLwmt4kObI+GSNBViyC2aOu0w\nbbW2bVHg9naF98kn5QpH4ZLGarIJz3tP26YOx8aYlBOpaX6TsmA6KZnNKjBC3bS82XjebBo0KNLU\nzKuWpwvHpw8cnzwJ/PI9y+LxBLEF7e6GspliTY08+z+i5jHoKxb/8i/h9j+x+s2X/NffCP/hG8v3\n15GbXUNROE6PT1Fj8U1DNT1n4uY0zS1lIZTTI5wtqKxhXiq0O3A72m1LiaGVJuV+WiVSs6uTKfF0\nIjycRCqrNLs0Z6LiipKycDTBIyYFEvkmMSAfkm3fSjIRpbQa8EWKiLXWYa3D2M4vkVJNfFR8SEn4\ngwaYgiq89+x2W5rk1OmJxdhv27ZDbzQRSZJrJhx1vUtCWZaQY0x+UGsN5aRiWk2w1mQJPqa2SNs1\n69VXlNWUmeyYlS3aTijCnOMJlNLyk49+wsXNJV2BgNB6bi5f4YykKj0ySUJBveRkUtL2lTs6/4th\ncXzO7eUb5kcPqWbf4oqU3J02ZST6hsnc8ld/9pg3/+Waq9srbOu4OSp4OluyXa15Ojnlqp4gmTm5\njqn7hhhiTutRFsZRaeTlVvE+4qzDx5btzicfIdJ3BUlayUDIyabJznwtkrSZ3i8YtdfWO5NJiMmf\n3rnLlFQRKcRAERQTU8UcV5RJGM331wzLGJKW0DHeSZE02jooXqokaGiy7vjc8DjlYg6mdtXAfOaY\nlcrqJj3HscVLlbVtCESilCBNrk2a6+aoTwy1ZxTaa27jV2CwLAx1WAdBLmY6l8l3gmUXEJR9dgl2\nQ9pPX1AHRYNPGnr+JtXdzf86YTD3BelcPprTt5JGnwS9lNLlUgu1mEzzajotMDFAyZXRk5HMEoIA\nHo1QFg4DfPhkwnITeH2zw2Kz6TVF6hbG8OzU8P7jKVdLz9/+5pY6SC5o4Pjg2PBqByYqJjZYDTx8\nOGezNdysI16VQtL5VBUrCWJjX2kHxbTAgSJHyodRJPHbjnenSASPFimuSymomzXW7tDJEVKeJWnF\n+3w+YLEYa7HODNGAecBikg/H+2RiSvbshCQh5KXvpBlNUkRUpWkj19eB5WpDWRYQwTmLKRzWgnMF\nk8Uzor6kXe1w/jXGL2nLp6nyynLLQ9my84bLmx0buUoa4MgRnCT/YVMmgA4BFJ0OYzORjkGpQ0iI\nMJL0OsmnT9Q3gjOCb2u2W2G9KSmco20DbQiIepyAibBcw/VN5PuLmt8+3/LsdM1Pnzh+/onlyU8W\nTD/8C+Thv0bcTxEzQ3mAxA3Nxbf89vdb/v0flJe3glcoibTblo2d4WaGul1hbIFbnBJ3hu31D1gL\n1fwxiGHbrinaHROn6MRiWyEEA67Ft5HQOmIIOPWczuDZYsNNXaBMUdmxW6/BrDk+OaMoC0QMZVkS\nQ0wRxm1Ll3ydKlaEJNk20LQ+Sa2SUmViVFSyP08E36Yo5KhJSy+KMgXaxEjbtr25CO4SosE02uHV\nQFggEZzkkxRiiPg2+aXruqEud1RlCUREIpNJzXQeOYs7rneGySIJb9e1wVWKuJKmbvjqi+/ZtgZn\np4nJCqCBkOIS2O5SvduUF3me/CyZeMWYmvBOj0949foSYjKlu8Im4k9ngjTsdpEfXlxhYovGliY4\nvn5Rc/YTx2wCZeFB3lCYkvlEsKsJVlKP0DooxijzSnh0lCwWddNigUJSSxzvU9BWR05TpK/kPRrR\nbCEQhpJvkFN/JJu9bVeQIgkzPsZcfaa7XiFf61HwXcSqoTRQqk0FIjCpgH1oaZuQ8CVGyG13rFG2\nrUUpOHM7lsHTapUZdCbk2QYcgOPKcDyNXNwCmnJqVR2VbAiUmAhWAsSWVoXCFjlII5ulR4JWekaq\nncvYjJj4Sy+YdQn/OmZkI1zttDdGPq4k/A0m6J4uSy7AsZfCNTCu2JU264JGtIvbtT3u3zHnmhTf\nkJLjSUE02e8NozxngRiF1dYzWW5o6zMK4KOnR/z26xuiESQoxjp88Dw8Mnz0rCL6kt9+uWTZRIya\nPA7H7VZ4bQVjQ4onCDc8fPiAi2tltW27GiM0KlixqA9gFKPZ3JuhNZjpEy1pNdObDh7vON7NBFGM\nVbRtaf0KTAXlGc4UCbbZN2JjLpmGkBLAh40xVOhIzK1tY689jdlO1vh75EpfZiYZQ+4mkXoEtsFA\nXafAFNPgY4Q4Q6qCWFxj62uK+iuivofHMl8YbtqWplWwGfEEukodMXbaWzIxdAEc3fASToSeYA6H\nIr141tnN09ytkdSUtmOyRmh90opiSLCwAq1PQQYpGdfQKKy98GYXeXET+P6N51+8ecMv7Y7y4f+M\nmglKRNTizUPsw5/wwc8/43+xgec/eL58BV9dBlofuF1dETaOdrVmOpvjdzusKSinR7TNjnV8wWR2\nCuqJXplVYFySnA0t12tDI6mVTOECFYHzo4KTRcmrndD4HSb7v0LjWS9X2KLEh4C1qfed4Cmt4kyR\npPKYNnoMpCIFJFN53papYLKmxsoAMWhfeCBGZbdrKIqEf8m8uY9D9L6LEYHQURHm0ToBPaEYXAyK\nxpZd7dOm1EQ+Ftpw9LRCFo/5/T8umU8jFxczaplRzSxmVTIvLPWuod56mm1DDCFF02tIDalNCgZq\nmm/o7UgAAGETSURBVC3NekN8+AybvfmazAYQTdLSnGG1vEVj3vDdAFHENESNrHbKKh7TWKWuPbtW\n+KfvhP/5Fx9ReMPTkxXzRUOLsKuTCe1yF0goFzidFjxcKK+WkbqOyadYpPt2GpH2G2CoAoSAyUJN\nqtermTFmpmgUsdDGmMxYuc9lFM1muo7Aa06Tyr5RERofqWwyP59XSqg9N02KAlQFa7qAqZRyMSsj\n2zrhyLoxtEVJZXcUIdDEKsUsSE50UGFeKsdTuFxBIFA6i3FCHSOFM0xtQ9AIQfABPAUTN0HbhqDF\nAAMGP6OiGRcH32kSAqRngAdKS0+04yARDJGhBzg7FvKG8/tv9syCnfaTlc9Bt9y7KDHHmCsV6Tjz\nM9KVxRmUBdPTcGsEpcBgWBwVPH4g3NzueP56i6gBGynLwF98uOBkNuGr5ztevVnRRo+1mvCkG5ta\nLteRR85hEawtuLxxbJo6xV9owhUxELsuHlFHdWYHeKVvYq+IDEE+ezO/c7zbHIrBupJQzontlklx\nikrq6mty3z0xkiWY2DM+1WHhe7U731Gy/wwOF334eyj1dH+71AdCyImQAd+2XREHohrEnjKZzCm5\npAyv2WnJ2UzZ1OA1pI2YI/M6c0RyRmdiM4zorXBJw4v9NZ3tfJhPnnu6+ei6nJfmU8mpkAz5iSkY\nQdSnKMOYGt36MjCbK2e/PMV9/NdIuIC4BJkiscWEP8BswaOP4fik4mcfws+eRz57bvjitfL8quFq\nU2NiQ+srbm+uEU2+T8yEuLmh3a35/7f35uGSXPV99+csVb3cvuusmkUa7YOENoQEGJAFWCzGwZDg\nOA5eQXaSN4rAjzHgxMR6EvMAMQESnNeJsbFxnNcQg2MMtjEYIcBgkIwk0IIktIxGs965M3frrarO\n8v5xqqr7zoxG8gL2+/b56JnRnb69VHdXnd/5bd+flG0K6diUCjY1HWlWkJGy1rdoASl9lAz6fTsX\nBLMNTT4cohU0pAgj8bzEFAXDvMA6RyIFqQ7egy7fW/iwCXoRPlTlhYHCY7PlfbWDDuOrrBsNUK52\nxnmel/naypCNzhPvqdsoqkIa58Y3XhvPuw3f6+g0xQsoXGgDcAgGWYZMNHMzs+yY7SJRnBg4hBxS\nWNCqj7QSqxIKmzMcmLoqtt2epzDHcM6Eqt9Wk6y/jhSh6pRSp1NS/YHZmSl6q6vYomDQDxvA6rKo\nigK9txgTFjPlIRWwuOo4cMxw+e6E+fYUSSM0jEsB/SyEiBMBaeI5d1ayadryxHGL9Z5OIywHzlsU\nNlyrZSlCdU5rFQxdqiSpLgUGbRg660vPzzhLUdgw47JctMJa5LBCloU21QddXi+UonoSrA0bj+nU\nYzuwesKgw14RJUKhjqQcKC0KlguDcwJrPV1vaCYpLe1IRI5wQ4xPsR4aDZhtJqwPPMIZUq1QVtCQ\nCcZapEpQok/XTpEbwDuMSvBkaB+O28pxYzdaI6o1bTwkb21l6EZFRdV5OG4ERxuyjeflyRu50b9P\n51We+pgNz1Nu7CtvqZJPKx3Der2qvPjKKwlr2Og1wzHKUPUpYWG+zc4tOQ8ecGWeGc7e1ubcXVMc\nX3V848E1hkOLlxYpNdYJRDnaxAmHLsVBpEiQkjK6MwwpEariolHtRm30PTzJZVwb9dN9jqfjjEYQ\n51GqTdLZhV3+NsKuIwqJV9PhQ3Ghbt1RNitX7ujYl+u9rRcloK7qqw7uVFHY+lMPh1A2MrsyJo8Q\noeTbh7AI9abHlTqhktwnOLWFNOnhugfooMn7AmMEVoaCGMm4gfVU2cCNu67TnZSj3dn4sZ+8i/P1\nol12JfqwE3fGjnKRZd+bFLK8UCxCKBrSsWdecv2VgsuummZmpoHb91f42QdR5xRB4UKeA8kzYFhw\n7P5b+fa3BUOvaSSSXXOSLS3B0oLnwKrhxIpk2WrWioKiGGILgxUG6zQmL5jSR1G6SdFJmWtJIKWR\nwNbCstQt8IkGNJvbGRdsLUAbjvcNuQsDgAtnMb6gsArrgwRXIiBBkKBCEYC3FF5QOMqJ0JUHOIrq\njHZ+hkoqy1XKISd9tkLIMtfhy5CJqKMO5TdSPufpjd7ouxvtpKvNzLjsG1LgUaEnMTfMNQzb5zT3\n7i8QSLwNBsRrhVeCVCakMsO6on5PUjex3uBMwXOveDMH0sVTjudJ+b9OvenTn//UGR/yh0/zqX/j\n6R/FP1je+T//6El/N3Nihuf/0HNQKgx8nWkl9AdBDSeRCm8l6FB4Zose/TwJ7S0UWDxKWJzQWMJI\npaDGY4NiTGUnygV3VGkpxq5/f8q/q/UMRufg+JpzunVk/N8jRutTdd6eer+x28qNf1UaJjc8VekJ\nelf33Ymx64Kx66R63pB6Eyhn6Uy3WOseZ8u85qILZkhFi299e4UjK71wiMrVIXBZPp/3DikUzhdM\naUUiLB5HlhnaUwaNpjuQUG7GagN+yudwKpUR9E/jvvAURlALQLZwhSU3KbY9RVKskLgc25gDmeJc\nSLZWH1pl/GojSO3sVB9frQu5cXEaLVqjnc1YjB0QrlzU5Ej6KbgW5RcmTPnlSpwVQdXcCtpNQ3+Y\nI3waEsClB1sl7aufKzaeRKP3FX43Ot4Ns9HGFlVfloTXFVXeEdJgQTKsyoePj4RBhqrJrVOKa3cL\nXniZZGEBBgf6nBj0WTphOPfyPtvSP8Yefhz2vAi17R/jlu7i2NGCfcdaHF7N6Zry6YQjUYqGtiy0\nLQ1rmTdD+jqjnzt6VlBYizUehEaIE/QHCu86nL3g6fYFC62Cb3nIrUCguWCb4dyzHN86uM4wU/hS\n0DuofDiUhYbyTKWKViJD6ApDXlgKIxgUQec0L3unXLmbGz836pLu8rO1vvyuhRiL+5ceiC8DPRs2\nImJ8fai/w5MXlLFX3GBgN5yX3oeeLiwCg8kcIuvxxDHDIA89cciyyb/w2MQxzPtB6smHXJtznsWl\no3in8NZyIF0ce8XIdxKxEIZ8N6RjumHxbkjaTHBCopIgfyaEYT3XmKLAyiF4j3ShsjZH4HxBLoIg\nQ+4z8LbsY/EbbMO4RwfjOSqo1ylGnuLJm/+Kk/Pb47dtZKxz0o9HpXy9gavTOtX5b0UpgEqlT0ed\nOiiNTNmtUT5vdezlfcbGvhkkg9xx+FjOetdx/nlNdmzZxKP7ejxy4GgYWYUOrRhIZOkohffuyk1s\nEGOb70jSUqnIWMcgcyRywEJbsTZMGRah8LJM646919N9634klFJ9Hqc/PWqewgh60JqcHIsnVU2k\nbGLIEP0lZDoDehpBWdzgqw+1XPDxo0RreUClVnb4+urwgDjNjr069JOSwoQSdSA0YZYusqyKbJRD\nigJpLcp2UbLB9JTj0BGLV6FkuR5zNDo3xzyMUd9gleCuPM3aeI0Z4PFWivqYRZVzDAZfhuB37aFU\nYbrwQg4lLDPthPM3JVx5tuLsTZ4TK/Dg4xknerDY98zogoufozH7n+Dgt/voE3dx1rNWyY/cx9El\n2L/SZ30g6RUeYwiVlS5HOMtsajHCIDQgDKn2CF3gnELhMDikm8I5Q7e/zmXbNUdVEP4unOORo5BI\nwwWbPbOzCSce8rRVTtKCXm7JzBAtJZuagummpJUqnPcMC0cv9/Qzw/rQkVuHFYogZl+GjEs90fB5\nlF2DLihXVsUClRTXeP6kmjVHeY5RfichMl921lN5gmNn1Sm7aT/arI159z58jSFP6UM7iZaWQ8d6\nrOeGqbTsVxOKhJCzmG87CjPA2hAqFOWxrZ9YJhsOSsGFyHeTKTVg+7zAFRm9vg05KRzZUIXKQdVA\nSMVMKygm9azD9AscBu80ziucKLAux7oU5WUpvm/rRbgq6oNTDdZ4m0O1VjzZSKRqQ3iqB1j/NPb/\n6j7jhjJcA6NjCVGukWNRrVujMUmu9FCqQkAx5uH68ljHdonluuYxTtLr9lnrDZif06weVXzxr46x\n3itQIuTwLWXLAqKs0nT1Z+VsKNxpNjztJGeQy1BeWVh8s8la7piyGXNtT1c1GWSuNKb1pX7K+x77\n1LH10v23NIIoidLNoBrjwCOxUuKTNl72SYou0g5xyQyeUhoLi3AyJC5LIV5R9kyJerGhXplsWSQS\negVH8fKNjO2iyi8oxK9HTe+UUx+EH6LtIOw99DToJlqt0cvz0ONS5nhktfuhPFHKkm8hqOW2xj1C\nVyX+hTjN8VUn7qjIYtyb8YhSE3N8dxd2Nu1Usq2j2LOpwY4ZTW48dz/hOLrsOdEX5K4AFN97vqIt\nPPsfyfmzOxW7tx1G9taYXUiQWrI6MKz2LHk5QNUYKABhC4QX9J3CI9FCI6VDqxStLB6NtQrvLYXS\nLPbarOWW3VsUR4+nXLpTsLhiaEvH2TsENklZXk/w2pGgSdFsTQVbpj2b2xKJYD2Dpb5juV+w2jf0\n8zKsCYTxQ5RJ9nDBVv1LVbjDYatdEtVepZKDGP+cxwI2dcFCvXEpPULP+Gc+/h2NNiP1IkR1ctZn\nHCGXE87fRqJoyiGX7bC0lUcl5floHIUrmG41EUIxpbpcvt1xb8OBy1lZX8WYjMXjvTNcbJHvBLOp\nod9L6PcTjLMMCkduh6ikhUoSTObBSrq5JzNBz9IRxOCRGQKDlNDWnrVB2JBZa0q1o9G5c7InOM7J\nHl1llEYb6cpYns67GXcGqn+HLsuxIMiG5x55gNXjRscWHleuoPXzibE2jtEaV8n51Y5IPfQgXBcO\nAV4wOz3FkW8u0h8Eb855iZc53gdBCFFe57I+TlFO6XEstCWDAtayIP2YG0siQ1i5bxsUvYJOa0BD\nJ6z1QlWyr5L25TSL2sHwoVDRn7o8n5EzKotKFYpaiqLAyqC9J4UEr0G1sY0FjDf4/lHIehhflAof\ntqw6knWxw/j2ZDxGvtGNP9X9r0OM9Zfo692E9B6JBeFwokCLEzRcD0eTITNkXpfVSBm9Qej3cz5U\nHDpTFhuUzfzhT/AyK0Hm6njLUwmPqxuGvS8XdufKBn8TRGSdxXlb3s+UzagOb22YOuEczlhSBPMN\nxY5OwrbpBgI4vGq46/EBX3mkyz2LAw6u56xnHiVg55aE4Ymcux+VPH5Cc/R4k898teDEomHzvGC2\npUOEpPQCBUHaLNEeL8u5bd7g/RDvPcpbnDHYfIjwg1CZ51vkrsljR1M2bRLMddbYNm947gWai8+y\nnHX+DD3Tol+EqRXzU5JLd2q+b6/ke85LOHs2nPRLvYwDJ4YcXSvoF+EbDh4x9WdXZx3GwhWV1ybl\nyRuN8bDN2Pnjxv74qgAhPHd43upxQR0jrDJBDiyMdBorjBpjPGftCQtct3Bo5di0dY6HjzW4/VHD\n7Y9J7nq04BuPGx446FjNLDaDrMhYWcsx1pM2UjZvn6ebDWvBgHE6nc6ZLsFTuO222/iBH/iBv9Zj\nTscDDzzA8573PBqNBu95z3s2/G7Pnj1cdtllXHnllTz72aOp3D//8z/P3r17ufzyy3nNa17DysoK\nAP/rf/0vrrzyyvqPlJK77777jK+fZRk//MM/zAUXXMBznvMc9u3bd8b7v+pVr+KZz3zmX/vx2qcc\nX5UcWZMc6hpyoymYY3nYYXWYsj7MMMJinKCXK2wO2bDBStHAGEmWKwauGWT+cFhflBupUaESjNav\n8dzfyX9OXvdqY1L3RlfRpHGPb9xo+vr6GROKGV1Pvvoz2vCdsq6Oe3XVc53GeI+/Bz+25lWbSu8K\n0qSBV5rjKxkXnNPhuc/cxLb5VjAqrjS+DrwrwJVtQiI0sjthaKWSTsNyoqsxNkhFVjFP6w3GW4aF\nptsTSJezdV6gEhuKcvBByaequ/AOZNgcnO57OBNnHqqbJAg/xGUrJGomhKuEQEsHVmKRuGQLiB7a\nLdMwLTI1hRMKiSMoB46od9+MfRmMGmp9LdK68cQKj5Wjn0sFBINA4mj4LsoPKUSbIZ2qRRRrJbMz\nCUki6WfBRtiqmKI+wcrX95V49uiECFMIwvknpAgqCG5jI2z1HsKdKsMZ3qcSsgq9461FOBMGmCpP\nJ/FMNyVaONb7BSfWPWtDQz8Pxy0kSCXwzjOfGFoqZelIn28dSVgrPPtOKFaHjrkpwSW7U3Yt5Bxa\nUQwHHo8sHSeH8gVaShAaiUWg8NKgEGhhSVsNpE4xtkA6h/KC433H4SXN2ZfMcPxQl8uvbmFWJOmO\nJvkToaru8rMlF+8UzGvFIEs4uOZ4eGXIA4cNJ/qWYRGklRIkzoZy9PHv3TMmVzcWThql9CpDtDEX\nG6Q2xehxdQhofEWqktDlrrnOZVTfFVUI4JTQlJQSJWVdjSpE2BgNcs/SumR6PqhfrOQNyHUwsMCO\nWUleCDLrWesrHj7Rol8oZmXK3OwMUrZp/zUN3neShYUF/ut//a/84R/+4Wl///nPf57NmzdvuO2G\nG27gne98J1pr3vrWt/LOd76Td7/73bzuda/jda97HQD33HMPP/iDP8iVV155xtf/zd/8Tebn53n4\n4Yf5yEc+wlvf+lY++tGPnva+f/AHf3DKZuHpPv7xFcN6v0/hHU40sTpltiVJnWBtANa1mVMFspHT\ny4YUzuOEAq8QJGjlKKzAG4GqRiiVEYTxJWBjqH58M39qqG6jzRl3Bjbed2MEY9xLPDm/PR4CHb99\no8E9mdOFZKufN7aCjF1v5SVsPWitufD8LQxOFDzw6BH6w1XO3dVk9/Y2jx8RLC0PyevitXL9tAYp\nExyeTVOWwgm6Q09bKhIZjKv3FlyKFyEiNDSCbE3SyYdsnk5Z7UOvH6KAlVOE96HQCQjiCKc37qfj\njJ6g0C28nsMJjSCH4VpQrHBghcd7RRiy2MHIBXCGpllF+wJXjWzB1y66EEGhQ5Y9dCd/WZXlrrwx\nt0HfbvSzlRZBTsOt0HTH8U4w9Avkbrr0REMTO87STMLzD/JR6NUTNAktLvQyudC/F17TlR7d2O5B\nhDzyKOQWjqdukygnIVdnqhIeLUM5uZIeIRxaQSuVtBNoKdA4CutYyRxH1nMOrQ453ivoG4fxBmML\nCmMYDC2dlsBaONIVHFl15NZyaC3jaNdz+z7L4ROCzdMpraakEI7CeXLvyZzHFKUqjTRMNTzbpgu2\ntwWbGoJ22kQJTSo8Z0032XuW5qoLEq68ZAbvBJ1NKdu2NZjdPM2O665Azl3AVMPwkhd2+P6XpFx2\noafREDyyaPj8AxnfPFCwNhRoqek0U1qpBiWwyodwJ1WCLkQIROn6bTxVgxcbxtaUoZvxHa2o+prK\n0Gb9Z7RKeG9K41SJMIdfCSGCJm0jpdVq0mo10VrXcw6rC8f7kZSflEE2sPAJh9dg8egKFLaWy1My\nTGs/a1bRH3oajYSkM4sSZYVSeQJJAe3p1pNea7fddhvXX389r33ta9m7dy+ve93r6mP69Kc/zd69\ne3nBC17AH/zBH9SP6fV6vP71r+eaa67hqquu4hOf+AQAN998M//hP/wHAP7sz/6M66677pTd8Nat\nW7nmmmvqnsunw0tf+tJai/W5z30uBw4cOOU+v/d7v8eP/MiPPOVzfeITn+AnfuInAHjta1/L5z73\nudMuWt1ul/e+97384i/+4t/o8YNsgPWawrWBUMDXyxxaC+ZnFIX19AqBsQJNEeogRMj35SgahJAo\nfoDwOa5U+Bl5Z9TrXKV6Vf2p2rCq83fkFVb3MWNrXGUcqwjGaD0ceXVjHtkGzzO815M9zI2PeTp/\nxqXTytvGIm91OsE7nNd4Z8jyDItnugmZEfzlves8fqTHrs1NnnXpJnZsn0KooDErvCJ0bFpS7Zlp\nK5Z6hM+BoAaFdaWilAPrcM5gcRgBy0PF0okhM03Htk0pqhx4YMupJpQzSZ0bRYU2bh5Oz5kny+sm\nWZFjfEGjMRsaZH2XIivwqhm8MywKh5MNhmi065LYE0gxjVOtsumr3FNUf9W9KKNYMxAaLcd2+afm\n3sIC2PAZmgwnYOg7OBrhccIivMCVAqvCh6nZQaElCCG7ahRBdShVgrXeoYUbqoRydQxaBzEAQ/Am\nR03y5cVQftqyHBGTaBn6kBR4E/oTFeFksM6TIRkMLYWzZHk5eV2oWjpJSgkWGsoxPwXLg5yBgNWe\nBySZ8wyN5/ETOX/1OFywJWFLBxZXoV+Y8mMWGJOTeUEDS+6HdI2h1WqxaabNfDuIFRscmS0wTnH2\n3vPZs9WRrHwRobYyd/X3Qi5h22sQLmfTdQ02rz+CObrG/gcEn78L7jyU0x9KpNC0GqHiy3pJkYP0\nQczW4OpiobGsdm2kKkSZTBeUoev6Ih4PkZbLjh9tssYNjhAjD3GcqhCr+hO8vJN33KURLL/LCuc8\nq31B0kjQTQV9h/MFHkmn7UmU42BPcQEFhVNopcrUpEA4jTM5U9NTp7/QSu666y7uu+8+duzYwfOf\n/3y+/OUv8+xnP5uf/umf5tZbb+WCCy7gh3/4h+v7v+Md7+DFL34xH/rQh1hZWeHaa6/l+77v+3jX\nu97FNddcwwtf+EJuvvlm/uRP/mTDe3kqhBC89KUvRQjBv/gX/4Kf+ZmfOeU+H/rQhzYcS8VHP/rR\n2hgD3HjjjfzLf/kvN4RVAQ4ePMju3buB4FHMzs5y/PjxU7zPt7/97fzcz/0c7Xb7b/R445uYMiKj\nlCARCVp6egUk2rFlRiJ8Sj5cx9pZUIqmLygkYZtsQWmHdcHrd04ihRvpmTLKH4/OxdG6MaohOLl5\ne3R+nloE48bWopPbKNzY/6tjqNouRo+ri+/Y+Nzjeb9TPEFRKuwQBl0jyqVZuMr9rY2kcR7rYLA6\nQLomjz0x4Pw9s/QGXQ4ezjh0bMjmWcWebW3O3TLLE8dyjpwYUpgEZy2bZxWF86z1HVZCJiTTKKQP\n0+aFNGX+T1LPU/KegdUsLhdsnvectbXB4nLOICvb26Qv9ePGzvWn4Qw+RWFMMzRVOsi9QskmrTQh\nzXsUZogXbbxMKIQAXwSZK9kBr9F+He0G5HQIs9fAlEnaUQGCABEaw8PSTvi7LJxwZXFEKGV2aJ+j\nXYYHctoYGqW6esgNhonP4cOQQiAcNATkOTinqMou8OU4ERFeTzCmb1ifWMF4VxJoqVZhvImj3DGV\nvZGVhRdB8klLQaolrYaikWokHuctxnuscWFEjBf0C4exriz3l2CDOo+UnsJYrA3K+K0pQTNJOLZm\nEU1PZkLJ8aAI4dZu7nh40dFODZ3EM9uQrPU9xgmkN3iT47TGZn36VmFRJF3P4bUhCy3N7nnJnm2e\nXQuazibFzKYuJl9HFB5/rAvnXgxbX4CXc4Almb4es/YtHrt/lb+8q2D/8SYNrUjbYIwnd5A7ifFQ\nuFDybN2YGsXYhTTKUYwWjOrMDResqwe74v24ShQbC2B8debgfSgbGFX4ls9NUGIxpgw3CzOqBK3y\nMfWuSJRyUaO8jxSWIndIH8S/rTdBGxOYawkOrQWRYa0l2gpyp+vZmVp7wNWjop6Ma6+9ll27dgFw\n5ZVXsm/fPjqdDueeey4XXnghAD/6oz/Kr//6rwPwmc98hj/6oz+qc3rD4ZD9+/fzjGc8gw9+8INc\nd911vO997+P8888/4+uezJe//GV27NjB4uIiN9xwA3v37uW6666rf/+Od7wDrXUdAq342te+Rrvd\n3pC7+43fOH034um8tpM3vXfffTcPP/ww73vf+07J+T2dxwM4qUnKmIBSAi1ByQSkozt0SOHYNiXJ\nuwIrJAUK5RMEOYkw4AXagRcF0qdBAlKc5rVl1afqy4Wlmt5wcniz7KP2VWFLdS2MGS3hw1p1ktd3\n8vse/Xy6EOv4wZW5s5M+v5M/wnqPWhnK+r71X7XDYr3AIOnnA+am2xzrWqaWhzzzwnluv+8IWSY4\nsuJZWl5nYUazc1uL3TumWV7zHD08ZKEtOLLqw8AIJUOvLQol8jB7TCZUBTReAt7Vo5IMmqMnHHNT\nOTu3tVlaNqz1y/FeKrReIMoCHe/Qp8nFj3NmIyhTnM1AJkihEEiyQqHULElS4E23lERqgtKY8guz\npDg5j7I9UrdOrjoYHxTYRfCHcGXmLlQJ+TrfqEpNOFeOJtLeo8QQ7QcI78hFA0uDkG8cGdRqyIYU\nhDEeSJCORBb08xxbl82XcWRfzQeQo29fVGX4MpTxi0o1v1Q9QWB1WCCtE9U+jfKULcNj0EgF7aZC\nK4kpDNaHysjCuLpJvHBBS1KI0FwOntwUSC1rSTchPO1EkxvLat8xpcA4gXVQmLJGTDgWuzn7liRb\nplI6aZgRlw+CGLnwFulS8iJFSIsUniw35M6x2s85uOz55kHB9umU87fBNVd5ztqpaV12GY0tVyGm\nLsSrOaSROLGKO/FV3NoKC5s81z7DsOOYYf+S4Mi6ozdUrGcJvUFBrzDkJjS0h8lVnnp2XrlO1AYO\nObYzFaVdc/WiMKa/zChgU1/OwXaNeZeOUU6jCoOGi1uUn/l4QUx1Lmy88KkU+csFzSrBwHpW1/ok\npoP3thx95JlKBftPwNaZ0EQtlSQrSnvqLCE8G0aFnYlGo1H/rJQKo2fq4zwV7z0f//jHufjii0/5\n3T333MOmTZs4dOjQGV/zdOzYsQMIIdPXvOY13H777bUR/PCHP8ynPvUpPve5z51yXB/5yEeeVigU\nYNeuXTzxxBPs2rULYwyrq6ssLCxsuM9f/uVf8vWvf509e/ZgjGFxcZHrr7+e22677Wk9HkB5iSf0\nZQmlEEmQR/TWIPEUhUJIh1YFUoWqcS/DgoxPQQwonKEhg+SXcKMN8wY7U0YjBKJcUqqIR3kO13es\ng2GjUCMjI1hVb1ab8HozeFLIpDSJbKyvOPU8GUW6XG2cT5+rPMkF2NBXVP5VrpN19akDazydVoqS\ngieODJhuKS49byt3P3S8FB5XHF+Hxd6AuSZcsLPJFRc1GRrL4fUCL8HhSJyGVIUNgAsOQT2EOVzR\nVB4ueLyQLPdhYNbZtaXNXKfJoaVekOyUYfamRIB86sKYM25NPRpnhoAO3pKUOAmFh0GeYJhBN9pI\nNcSZQVCM0cEbdV5iZJuCJqldpSnWSUQpnCrkaNJCWYigy1E1Xkq8DAK2WhSkrKPdOsYq+m6WnFYt\nu3RyTJuxeDi4oP6vwoI8kn4aNah7fNglcXLYwNciudWZKKQnSQVpIpGy/EpEqQ8qQUqPUpBoaDYl\naSpBhOkU1nsKC0PjGdogYOx8qDS13gU5Nzy5d2TGUJlWpT1Tiaafw/rQMRiGyqggKwXWO6z1rA8N\nT5zION4NnlNLC4QvMEURFFqMQCkTxgGR0kokU4ljuiFopWFKwLH1gjv35dx2V8FXPn+C1Tsfxdvj\nkGxHORDCohjgxQz5csL60SG2yNg0Zblkh+PSnZqdc5Bqg5BhQoGSPqiDS1d7zMKVn6dzZc6vqtYc\nz2WMfafej90nlGCL6rbQcFhLQFWPEfWqQp0/ZOz8GBd0cC6IeUtCS0sY9wVg8b7AiQJPkLprqASt\nHXPtAryncJ6ZdogIZFmouJXCMsgHGBM0ab0x9Nb7wcs32RkvxtOxd+9eHnvsMR555BEg5NwqXvay\nl/GBD3yg9gjuuusuAB5//HH+83/+z9x111386Z/+KV/72tee9uv1ej3W19frnz/zmc/Unt2nP/1p\n3v3ud/NHf/RHp4QnnXP8/u//Pv/sn/2zp/U6r3rVq/jwhz8MwMc+9jFe/OIXn2JU/9W/+lccOnSI\nffv28Rd/8RdcdNFF3HbbbU/78QBKgdICJcNYtUaiSBKJVgLnLHu2N8MoLy1otw1COKQPRX2Z1zjf\nwNPBoZHCIjGlMSitQOkZVeeOFGGbHzquRvnqen1yfnS+u6fIz/myFUKU61RVe1CtV7UxDvdzJ107\np+QVq9aKer0b/3nkkVI+67gHWlnH+jMWoTgmGxrSVKJkSC08tG+dVuI4d0cnXJOiMsCW9b7gvsd6\nHDveJTOOyy+a4tpLFtjaSfAYHOG7cbYoB0A7nA8prvGwMqXz4oViWGj2Hx4g3YALzu7QbIeaEIFD\nYpB+1Hr3ZJxZQFtIvM0Qqh0+JBnGnDjCwmadwNFApCkt3cPYNQqTgmoitEJ4hSNlQJOmW6PpV8lU\nByeSELYsVTUURa0dKYUFkZP6DO0sBZrMz2J8qAQVVpUbmlHOsKpmCrv+Ub7IO4s3OWuZD0MogZHS\nwni83jO+KaoXSDuK9oMPk5ERFIUJSiuVHqAIYUwlg5FstRK01gyGeZAG84K8sOQmeEWjhDOhYqqO\nwgWPxZVbxUYCqRas55524lFDW3qQpbq796HdQ3iWe56WHDKVBh9ZS09mM5yQFEYjHaTJEOFTjJM0\nvKbR8HSannZD0k4lUxou3J5y7uYu8+cuINItYNdwahpYp1j9f6C5SnrBLFvVgLWlLquLcPwwPLHk\nONE1aOmZa0KiFf0sGGBjBUU5QSBscH29U6u9u7Eq0JAHqHa5Y6Gg+sQcu1oZhZiqO9QNvtXOleqi\nptzFV7no0dONf/dQ6dRWvYsG58BYifSShVlDU3oGRRgRc3TFhe+hLNfOclMr3XjnsSZD6eQU0d+n\nQ7PZ5Nd//dd55StfyebNm3nBC17AvffeC4R82Zve9CYuv/xyvPfs2bOHT37yk7zhDW/gPe95Dzt2\n7OA3f/M3+cmf/EnuuOMOms1m/bxHjhzh2c9+Nmtra0gpef/738/999/P0tISr3nNa4Awruqf//N/\nzstf/nIAbrrpJrIs44YbbgBCccx//+//HYAvfvGL7Nq1i/POO2/D8T9ZTvANb3gDP/ZjP8YFF1zA\nwsICH/nIR+rfXXnllU/ZYnGmx49jfNg4KilLPduweQTFOTtbDHoFi8d6TMtgsJoyiGk7H2ZGam3w\nUgIK6coKZzcyavU5V/49rlspy/O02pNVvXi+3Li5alNGsJV4X09/h9Fjx3myEGi1YfQA9UaOUx4/\nHtLc4ERCHQ3xtaGpfruxYl+IULXugCyzpKkkUYKhcazljm89vMxVF86z1m1xbHVQO5LW58x2mhjp\nue/BIQ3d55ztbZ61d57VvmXlyJCjvS44FzxBB3iJk74W3B4da4gkGTxOSZ44ZljIu5x/9gyLxwoW\nlzMQOd4rtDhz8deZh+risMaimgnBnoeJxGG3LOrcHdaTizZKN2iJHGt6WNHEy0b5kSpyOYt2QxK7\njlNNLO0QBvUOJyTVJOHUD0hsFuLNNDE+QXhZzssiNMh7v2F3MFJ5GVUDOg/SW1LpWesJEKpcYH35\nIZ4UCqi8iPIEsraS6amEmMP7TlsJ3jucNRjjSsMdnlEKaDQV7XYKwc/BS4lxnmFuyupUQLh6Ftbo\nNcqiDUIYIFGCThoCx2t9S2vOsZ5Blgdvz7nSeNjweQyc5lg3w05JcGEoqZQOU4r4GqGC8okOguPr\nQ8cgVwwyxaYpx9ZZePbZnkuflTC9YxPpVAu3/1aQ08j5VyNsjk7Ow5l7MV2FyHtgMnLTZnbKcuFW\nwcHEc3DNBZkjAQ0diggyQkhZAiZEnbGAdyHQIcsQZqUiU5tJP/pu6v+XhVblb8a+v+rTJHiKQowJ\nS402HtXFPW4ofWUo60WkfC0n0cKQyCx8P9awttqjMT3F9lnJaq9gpql5eBC2VoUDk1NOhijwXoS8\nNpI89xTDU5ekbrcLwPXXX8/1119f3/6rv/qr9c8vf/nLeeCBB055bKvV4n/8j/9xyu1//ud/Xv98\n9dVXc88995xyn+3bt5+2unNmZoZvfOMbp9wO8PDDD5/29ur4v/rVr55y+5PlBJvNJr//+79/2t+d\nzgDu2bOnNv5P9fhx5tqKXuaRWtBsK3RD4XPHji2CbuY5sjJAeoWzUFiNloZCSBqE8T44gS0kRiu0\nNNhS/L6qYB6dRH5sbamEqUdDda2nFtL2pRhuZQSr/VuoaB87p6u/xzb74/8/hXpJGz1mxMbHjF8v\nG73AMYWZDXf2VNdNdZ14L+l1M6zJUUFNBQks9Q0PPtHlkrNnuOOhnPWhRUhBAmybhsXjltxZ8kzx\nwL6Mbz/RY8+uKWY6KScSyzArgrNlBEqXG2RfzXAMR+VKD1iJIEdolObosiXLVjln9xRznTaPH3LM\nbepw7dV7nvT8gKeaImFzQjhdcPSr++ht+f+e4sX99U/HgX1/4+f588989m9/ME+T6ePTXPtPnk0z\nkRgH3cyxHcv6EIqi7HlzngJXFi6FcMe6yNFS05QagSfVBc6CoxwJVHhym6BTT6INktC60U41O6ck\nu7d4UgWPfnONpFjinMvm0a3zEHIqyNG1XoIQN6CT21h8+P189osFjxx1FDimGjnTjZTZFGTb080c\n3dzTL8KGyZjR/lL4ULRkYbRhKS+86uSuIjTVLjr8Niw2lVh2ZdjqiADV+J/KoInR4+AkD7K6oXxd\nX71+uT1yAo2lrXLayTLeFCRoHjhkmesUnLO5hZnzaAxJmtIrLFkuQhUhpj4O6zzr6116gwz0029H\niPzdcOEWyXLPkwuNbiYkqUbPwcrqkMNLvRCSlBKlEmzhEGWqwDhBZsICHNIWKkylECKES0XIB4vq\nnBKuzB8DjEKdYaZqONcrqbIqlQPURrD8B2MhjBAlGVv4R/cvje14harYeGo/qaGker7RZtJTRtD8\nxucZ9zpFFcXx1ZZRhIlCXiC1Jk019ItQ6CcsTyxnTHd67D17nnsfPk5WWDbPS5BwfN2ivCpfy2Ec\nPLivx+aGQ6JQKC46b5r1Puw/1MMYWV7nlB50ZQ9D9agXHmy4cteHngcfXuXSi2Z56ffu4ZJnXsyh\nfUfOeI6c0QjK7DiKDF+s0dvSG98bRL6DiE2ClgaLYJAb1rMC5S39QaiiwlLP4AuRDRlG8hSSvgCZ\nhjE+WlgS5XHk5EDicwwSYxq0G4Zts3DOvOD87QkXbpYsLhseOp5xx4M5ezdbNp+bkwgPtsCbJTw9\nvD4bfJeZTZLLLw4yeg8elDyyVFC4MGIoUZJEqTJkDUqCkwJNWCxkaQANod/UlsU+lTdd75JFOeSz\nvjDDxSuq6oJ6zQj3rTzIehGpFLopQ99jHuTGAoCQu8BXGkehncN5R5qmbJnpcOhYTiex+MTTaKRI\nmeKtCRPQpcQVQRVjWAickzhT9QmGIi0hocjOnKCP/O3Ywx4e5/ENt/3K733uu/LaD9z3V9+V1/mH\nQmtxis3P34ZxFt1IaTQUTlgoU/VeOh4+uM4VFyScu3OafQfWWOh4jiwX5K6cH1lGF5UPKRyDoynA\n2oy1tRXOP3s7F53dZP/hgkceX2dQ2LKorhTR9x4pym7g8vptNzXPvGw3V1y8jUcePMi937yX/QdW\nz/hezhwOtQXOgbTm7/DjizwdvLPkRWj4H2QW7xy9TJAbg6gmYTDaIwrAWxjmjkRKFB68RSvJ0Dsk\nFuVCK0kz9WyaTtm9INk9D4nvc8c+yb2HYM8e2LOl4OrLCxrNLn7tI7jkAXzvfvzwCZi9FHfiW6zv\ny+l4zUVbJa3EsX854ciy4njXsjYwFC7I1EkhUKLc1VLlbYM4thRVAz1lf4+od8alxj2iMoSVl1jP\notu4U62GstafRpmUr1Kttf0TVUC0NIQutNWEntDwmTnvyj5TgbMDUqXZsS1lzzmz3P/ogOaUZqbj\n6A0EiVDsnjVsbWvm5wQCg3R9tnYE+2QQVTi2kpMZy/LSie/sSTPhPM7jcaP+XUJsFQivsXmBkJJG\nQ2AxSCWRRoC3DDPHg4+v84xzp7hwh8I5y+pqQaIEiXI0lKWhHa3UoaWn4S0rXY/vepaX1vnyoQFb\ntrTYtmmGTdM561mOMWE4edBxVmUUSYOQ7No5xfddfwmuyLnti9/m8QNrTE15LnvGljO+lzOWzehE\noxttdNI45Xf/0DQPh8Mh1157LVdccQWXXnopv/RLv1T/7u677+a5z31urYV4++23b3jO/fv30+l0\nTtFQPB1PR7Ow3+/zyle+kr1793LppZfytre9rf7d448/zkte8hIuv/xyrr/++tPmZSCEQYyFYe4p\nDAjv6Oal7inBU7I+/HG+rDbFkTvH0FgKFxZggaKBpymGNNWQhfaQ3bN9dk33ScSQg8sDvvJwnzv3\nrdJWy+zdbtg1Y9n3WMHavmXc4W/xxG2/y5Gvfg175Fsc/9zvYPY/wpGjObc/5PjCg4ZvHvSs96Gh\nBfNTmvkpzXRDoEU5GiV3DHJLlhnywlAUZSGJs3hnyuMMWhJBY7QMnfqQMxZlC4PyVfJ+5FEJUWmN\nBo0iVSq5CCHrwpuAr6Ofo2XSIf0QvMFjQ0uM8GVIJjRYCxxr/QFaOvbv77K+vMLS4jpZf4hWDqUM\nu7c6Lt6p2NKROOtIbJfdnR5NZcmGA+687wBLx3ssrw7ZnW8pfdn439/1f5HvLtYLnJVINK0kRVoB\n1iIQNJSg05QIkbG8tMi29pCFjuO5z2xw3eWa732G4NkXNLjs/Abn7Zpm+1mzzGyZJUkbSAFTrSY7\nts8gfcHBI0dIxIALtjc4b0vChWcJdi84ts5knL254PKLE565RzOt1nngzm/wlS99jXx4jJ1bCzZ1\nLEtHl874Pp7CEzR40cJx5v6m7yZPpnnYaDS49dZb6XQ6FEXBC17wAl7xilfw3Oc+l7e85S380i/9\nEq94xSv4kz/5E97ylrfUpdYAP/uzP8srXvGKp/X6T1ez8M1vfjMvetGLyPOcl7zkJfzpn/4pr3jF\nK3jzm9/Mj//4j/MTP/ET3HrrrfzCL/wC//N//s9THi+8IC8cWebwNhiDfl72t41Xl1IW+ZQhROND\nYYpMBFqAEClStVCqYEo1aDaC0s/yAA4PHP2Bx3jFjrkmOzdJBoXivscEZ81McZVXrD1qePCBlOFA\n8DzhuPveac7fnTA7BcYpugPFwTVDnhd16bgoC3y0CganQGBNUJhwdd5DltHMKsdRCWpDaG8Zy44I\nEdTpx947hDyiVkGGr8q9jBu9UaqlCouOqogpj0D7dZxrY30CUiH9aFYhCJqpZzAc0FSOREku2q4w\nNsNYjU7aYUeKwpa9TdYHsYOBsxQ2ZC+6gyFagfOKv/jKv6XTmaGRerq9Pvff/w3uu+8JXn7D9SSN\nRjnZWzDoLbN4ZIlbv3IP9z7wKMLBF3/tOEIIbnjTFs7eknDezm1smYaFKZiaUljRop9LTqx1yYcZ\n52xK2D4POvFo3WXLteeRL+eceHiImJ1n4ZLNqBMhX+Jo88R963z16xnrhaTbdwyNoG8duQXhQul/\nIw0NyUqGnsus8AwLSWY9Q+PIjSOzYWxWbkLY3nnqikUpw5zSVAlSJZGlZrAxkl7uybzBeU8iIIiF\nSJoIts7BD1wxzaNHhtx5sOCr/+V+epnjx977PbzssmkyO+BVb/nkhmuo0+nUhUdPh9tuu433vOc9\nfOpTZx5a/FQ88MAD/NRP/RR33nkn73jHO3jzm99c/25lZYUbb7yRe++9FyEEH/rQh3je854HwAc+\n8AF+9Vd/Fa01r3zlK/lP/+k/8dnPfpa3ve1t5HlOmqb8yq/8Ci9+8YvP+PpZlvHjP/7jfP3rX2fT\npk189KMfZc+ePRvu0+/3+aEf+iEeeeQRlFL8o3/0j3jXu94FhI3661//eo4dO8bCwgK/+7u/W4s4\njFO4nMw4lo6uMZ8UnLc5I5GehgpxG+Mk3oZ86tBaCtGiKBQpCT5RNFqa6dkW8zMdpjqaVHq++Nku\nh48O2LJzE6/5ge9BK4/UIIygnxcYoNNOeOyRJ/j8bfcwP53yjPN3cvjIKovHVshNRqfVQmaO3HsK\no5iabp9y7OOc0QgaK/GqiSJ90vvcdttt3HLLLWzevJl7772Xq6++mt/93d9FCMGnP/1p3vSmN7F5\n82ae9axn1Y/p9Xr8m3/zb7jnnnswxnDLLbfwgz/4g9x8881s3ryZf//v/z1/9md/xjve8Q5uu+22\nDZJPW7duZevWrfzxH//xhuMQQtTeaVEUFEWxQbpobW0NgNXV1boZGOAP//APOe+885iaOrOkVcUn\nPvEJbrnlFiBoFt500011dWdFu93mRS96EQBpmvKsZz2r9vjuv/9+3ve+9wHwohe9iFe/+tWnfZ2i\nMHh80MGRoU/RWI/SGulG5q+qyKJcTEQ5xDcsOB6lNGkiaSgNPmFoJENXYKxiaKCVSObbitxqHlmS\nqBnF8b5i14KgN1AcPCw5st6AnuXw456lbsrqtxs8c7dnZkaijoG3nmFhGOLLtsvQ8F/NeMR7HK7M\n8YXj9vhSFqnuZAAoFTZU2cNXGkwRNgXVHEhVTplQWpMmOhSMOkduLIWpjGRVhDDuI4RqPVGGkqUM\n2qfGlnMfZZBwcICxnkRaNk016KSePVtnOLG2RpY7rPO0G4qphsRLgZAG5QSJ9FifoLfP4J3jK42g\nVXHxefNooCMKjjz8AFIntJKE3BmWDx3jwMEjPPbte2mnLZwIDd7Dfo9hNmT7tMSdM4stPHc0VsAL\nnnF2hx1znm0zniRVDAtHd0UHQQrlUMIz1ZAU+RSPHioYGMszLmxhFg/z+DfWGPa2c9YmR+/x46w/\nusK2HS1M1md+c4vOlObIERsqkY1n6MJcSFOUxVheAJZEhfYdoQSUik9aSqRWKBGUWdIgBVkPwJYi\ndCoFbz8IJBjryI0nt5ZCeAQWhQrSgbacOiAVbS3p9iT7jyuGhS1HqsHREwX3H8q59JxR+8ffN2cS\nJ3/jG9/Iy1/+cj72sY+R5zn9fh8IguWf+MQn+OY3v0mj0WBxcRGAzZs388lPfpIdO3Zw77338rKX\nvYyDBw+e8fW/Wxt15wTZsODosUWyYkBvYIIgiCMowDhNKuDcnSmHVhyttgef89CRY0gv6hm0ygvQ\nglQJ2mKVREqe2HeI3/m9L9LUTZoNTaupaDQ0abvFdDvl4P6DdNeG2NzwUHOFQeZYXLeYVYUhx1gB\nvuC8s7dx0Z4zh0OfwggG9Qvr7Rmf5B+K5qG1lquvvpqHH36Yf/2v/zXPec5zAHj/+9/Py172Mt78\n5jfjnOMrX/kKEIzxu9/9bj772c+eEgr922oeVqysrPDJT36SN77xjQBcccUVfPzjH+eNb3wj/+f/\n/B/W19c5fvw4mzZt2vjAMhfmfOg/9B6MT9Da411YKCF4gbKqqESgCLJQSmRBwkulaFUWojhD7kqv\nXnpaiUArzeowqGpI6dgy8KwNgmLJsGe5/3HoJxZlFbfva6Cc5PAaTKWCdupppAKtBEo5RCFC24P3\nmNKAyXoOoKOSJKuMd1njFirtak1PgVQghKQoHMYahJBoqUN4slSZE0IipRpNoLeh7cRaU9fMVPnA\nSv3Fe82mKXjBhQmJdjSUpKE1lO02SRJCqXnhGOQ5SsKOhSnazTkUHrejWV4LYWiulkHOzzgLPujF\nCqFwO8Nm7BPtAzy6fZ2P/8dD5dEcOqVqzzzPsdob8kfT+1BCli00Y3Wr3odwL4IT2wsuXJzmRZfv\nQorQ6+aEDN6W9XhyGg1JqjpkmcUYiZNNOqlkbnoG1+vSyxtY2aCdak4c7XH0mKQz7Ui8Q9iCXZst\njx61ZEDuDHkusYUidw5jDMaL2rBJFTR1U61CGFqWzeJa0PCKVJdlSqKcvlCN5sGjpAapcNYjpEY5\nVyqMhB5iS9mKIC2Jg3ZDsdgzrGRg6nMfejk8tthnz/aZ015/8A9no762tsYXv/hFfvu3fxsIG+Q0\nDQ7Gr/3ar/G2t72tVg3aunUrAFdddVX9+EsvvZThcEiWZRvUhU7mu7VR9wTPftc5Ozi0CEcecoAB\noUIVN4L2jEDpJgdXMlgpuGLPHLMzmoNLA0KFaeg99w6Ec2xth8k6vYFl9WgYRC0lYBzTLc+F588x\nnG7z2IEex3otZN/T2dLgqst3073QcPud+1k6vIKSjovO3cbcVJvPfeXx0x5/xZktTCmV9lRDCivN\nQyllrXn4wAMP1JqHQgh+9Ed/tL7/Zz7zGd71rndx5ZVXcv3119eah+12mw9+8IPccMMN3HTTTX9t\nzUOlFHfffTcHDhzg9ttvr/uKfu3Xfo33ve99PPHEE7zvfe/jDW94AwC/9Eu/xM/+7M+eNr/5G7/x\nG6cYQDh96fGTyVoZY/iRH/kRbr755rqJ+D3veQ9f+MIXuOqqq/jCF77Azp07a2X+cawL8mzehUkU\nvrzNu1DS4QnVi2F+YTjhtFAoIdEapCpACpwQ5E6QW4/BgvA4KRBCYkvPcGA8g1xQGM1gGNR+NJpD\nK4rHl0BYQ1Y4vnWgYN8x6A8lj50oyK1nbkqTaoFSCUmSohKJTjVpQ5MkCiFLEVxRFqCUE0Rk+aee\ntA11tq9wnsJWVV/hsUoL0lTRSBWpFiQKVDlRonq0RKBVWJArpRjhg/ycFGHyyKZpwTUXNLjm/ISr\nz0u5ZHeTvTs1z9ihuWib5oItmr07Ei47p8neXS0WOoKmDqr3De1pKWgnhHFihApQVZbLg8D7oGHo\nrOX6e7Zx3pEOozJWNva2MiqGr7JalSGp7lN9RlLChYvTvPSBs4LQutdUcgNaiDDwN5EoJN4pvGjg\nhaaRSmbaoKVi2Jsl0TNMz2rIPcWaQKRTrPeayKSJN5pOQzDbUuSZIbNhRy+1RKVNdNpCpylSa6RO\nECoIL/RyTy8Pud9h5Qkg8UJSjUBzNkxmkFqBVNhqoyQESaJpJAmNRJM2EtJE0dSaJNGkKqXZbKCS\nJif64Vx1VaGTAIdivW85uJif9hqsuOuuu2pBgEcffZQvf/nLDIdDfvqnf5pPfvKTfOlLX+LIkVEp\nfbVRv+OOO/j85z/Pz//8z9Pr9XjXu97FRz/6UT7/+c9z880381u/9VtPe6P+6KOPsmXLFn7qp36K\nq666ihtvvJFeL7SdPfTQQ3zpS1/iOc95Dt/7vd/LHXfcccrjP/7xj3PVVVfVBvDGG2/kr/7q1KrU\nJ9uoPxnVRv0lL3kJMNqoAxs26qciMVYwGDqmOg2UcGET6Dx4iRSGbVMeOyzIs4J8WPDwwRXO3tRk\neioYSu9smElrwrA1azVeSURuwmAGZ2mmkksunOZ51+xAeM1Xv7nIwRNB+nHgBXfdt8jv/+E32P/Y\nEi994WW85Hnncc3l22k3NX/xjUVO9M7sxD2FYowAYRHi/xuahxVzc3Ncf/31fPrTn+aZz3wmH/7w\nh/kv/+W/APBDP/RD3HjjjUAQ/P3Yxz7GW97yFlZWVpBS0mw2uemmm570uZ+uZiHAz/zMz3DhhRfy\npje9qb5tx44d9TicbrfLxz/+cWZnZ095rHMea4PeaDsJQz8LE4byCllmvEJDHMHjGsk2gQm7dlJ0\nopCybMoVYcKGcwm2VIWvFhTvBFInocw4hcxpHl0SLPUGnCVSjnXXWel5VoVnoSMw6ylTaYeG1ky1\nLetF0GxVyoPQUI4nsrb846qhoWV3gw8FofXbEEHJw9uqx8+Ozh/nKExZAKNKXdixXCKEStNUKxKl\nMM5RFGCsGW1avMR6QSJDH5JwZbuFoFyoRVB8caUcHZWaR/CwpVJUrRRBIaha+Mo6UxHCfVXVrpDw\nyrt28v137SzvV5el1ggPy2t9/vybT3DD1ecx3ZAgkiDPpYJ4gndh7E+iKh9alFWyox6yylN0LjR9\nex8a97ESjSVte3wBy+uWQQ7ttmKwbukOPXkBx1csaRBCpSgE2+YUB9c8i71Qhh6Ex4cYI0O/G6UI\nQHkMdTO490gP0hJaYYQP9fJUa4Erz4VQ4i5UCD27+jwOyi5Kq/IcF+A8022JaioGmUc1BYkJ4spB\nC9YgU8nSUyx0/xDEyY0x3HnnnXzgAx/gOc95Dm984xt517vexX/8j/8RYwzLy8t89atf5Y477uCf\n/tN/yqOPPlpfA/fddx9vfetb+cxnPlM/399GnHz8mE63Ub/pppv47d/+ba677ron3ag7a/BeUuSe\nVivIlOMFDaUQwrBrIWH3toSHD9lwQciC5f6AJxY1Z29u8u2sS2aq43MIJ7G+iZZrZC5Hac+F29vs\n3t2h3/fced8KK90wb1AqjUaDEHjhyJzlr+4/yIGjK1x49gy7d51Fe2qWwj3Kt/cdPeP38hQC2irs\nQv8GTb7jmofnn3/+aTUPP/CBDyCE4K677uKqq67aoHn4/d///bz61a+uQ5pPxbFjx0iShLm5OQaD\nAX/+53/OW9/6ViAYni984Qtcf/313HrrrfVJ/6Uvfal+/C233EKn0zmjAYSRZuHznve8M2oW/uIv\n/iKrq6unnKhLS0ssLCwgpeSd73wnr3/960/7OiEMBjKRNJshnBmiSiFvIpFIpUJFpAizC4F6UXc2\nFIo4nWPcEO8cUrQQOkyx9z5MqigMVB5M4nKk8DQTRXdoefy4Z6VvMM5yYhDUakgEA6dQGRzrCnQq\nmWs36BUWOQx9P9bLuscPb8sGYxVyhWWzb2jvE7Uddz54HdaVYd2ykMWVFrMogjHVhQxhy1JgXQhX\ne1EqJA1RPoRonde13XEu5FSTROBcgZAO58rRXaUxCZ9d9TmG27UK9wlTAsIoLiWq6QBiTOnG160f\ndYsGgpGdrnKTlUJIKPZRyrEw1USXeV/KWZSq7CsxzoFXeF8ZhhD6rQyvp4wO+JDHdJRjZaoKWi9Q\n0jPMLb2exaIQytPtWrIcjBD0c8/xdUunk9AdCFpasHlas9y39I3B2FCh7HyQ7bMuFADVfqwQKDX6\nLo0fSQFWeVxBeFxuQuRCSqDUwA2Dp8NnGhrMw2ecJBItJDMdjW4ohJdMzyo6yBDq94J2O8U7T784\nszf2D2GjvmvXLnbt2lWvaa997WvrYpRdu3bxj//xP0YIwbXXXouUkqWlJbZs2cKBAwd4zWtew+/8\nzu88LaP73dqoqzDDgO5alzRRtJsJwtuwBhjBjrOm2L21wTceWSJJ0yD1KDxH1gvaLcGOzU0OHhvi\nhQobKyxOClIpwEnO294mVVPc/9gqq+tlZAeHkAm4UFcgfYEv00WbpxssTAseenSNv7p/kXN2LXDl\nJbvZe97p33vFGc8cIZJwksi/vhEc1zx8wQtewDnnnFP/7u1vfztFUXD55ZfzzGc+k7e//e1470/R\nPLzxxhsZDocbnvfIkSPs2rWL9773vfzyL/8yu3btYm1tjcOHD/OiF72Iyy+/nGuuuYYbbrihbsn4\n4Ac/yM/93M9xxRVX8G//7b+td3tn4slCDW94wxs4fvw4F1xwAe9973vrkxiop2kfOHCAd7zjHdx/\n//0861nP4sorr6yN4W233cbFF1/MRRddxNGjR/l3/+7fnfb1kySh0WyQNpu0GxrQtNOU6VaTTitl\nbrrF/HSLTqtBI03QOhm7oCUWQ+4NmTMUromjiVRNEp2QqCSEDRNVehwCIUElgkYiaCQpAyNZLxS6\nmVLYBCPCRPpEJEBO7nqsDgXDIqHVSJjraKbaglTrOk8nBGgtaTQSmqmi2dDln5R2s0mzldJsaBqp\nJtWaRIU5fFoplCpzhGVITcjQE5QVlt6goD8oGAwNw8yQFZYsNwyLgsyEfxfWlTqtVTVo8Pp0IsrN\nRDAyIUpbJeGqYb5V4UwZohRBBk64IPEGlSLIxpkWIwM/JqFVeo1VMU+VpxSlMPJ0p82VF29juh3C\ngGniSbQOOTaqNKoI4vWIMMfN17rhtXE3NkQOnKs2FaFgRSmPkDAYevp5KLJy1rHa8/RM8KqtT1jP\nUroDwfHeEpk9znRjnU6rh5ZdpBwG7VQXvC/vwnM45zHGUhhDXhRkeUFWFOSFITeGrDDk1pMVjl5m\n6GdBP9c6iXUKa8vCmMKGxxS2/rkowuDZRiqZagZFklarzdz0LHPTU2itaDY1ey/ZxXkX7mR281+v\nZQu+++Lk27dvZ/fu3Tz44IMAfO5zn+OSSy4B4NWvfjW33norEEKjeZ6zefNmVlZWeOUrX8k73/lO\nnv/85z+t13m64uLVRv3973//htuXlpbqyQtn2qinSQPnDQ99+wBPPL4cKkLRWGuZakuE90w3Wsyk\nGi8gkRrhNWjFgeM5GsNMu1FO/REkQjOVCBoNRSoFR5a63Ld/nRPdsjhOKpyUOG9wwuIJuq7CWbbN\npsxMSw4cHXJitU+Rw0OPHOP//PFdfPmrj5zx8xJnktfZsfM8L6VENWbZ//CdGy74yHcOgeD7Xvhi\nrPdkxnPebM62ac/dh1soXSrUlyHOIh9pmHofFjyHww4Oo2UT1ZgPFXk+p6mnSFINiHJyRamRWu6k\nZqZaXL6nTba8jsXxxHGDVYpLz2nywP5V1leeoKmazExrHJKGhql0G8iUQZ6xmg9YH6QMiqDk7gAp\nJEmahBYH7+ucZtUEb63D2TAZw1gfQpHejzwZQrENVMZqXCy71Fwt805BOaY0cPV5XU2GEDhvuHxP\ngx+8XOCdDYZGyfKCL4s6RDl3sJw7kuikjGT6IJMvRgowELxXqjCokIwPO62XnTK/V1aHlGo4IRyq\ntCQvHApDonXIwftKRg5yU4AKG4TQBlIKDsjRW7SVcapaP6Qum1AsnZZjrhMq9ZbXBTp1TDVTVvuO\n3iD0VvpyoktLeR7dt8zcvGZYwDceHXJkzeF1Tref0h2mteat8x7jxwp4gErluJK1q5cLUcpbefC4\n8vsMmy+lfX3+hceFTYaQkKiUmbZm03RCq5ngdEraatJoKf7Xv/oTjPP89O/+ExbmEjbNS/7J6967\nYY2qWiRObn246aabePazn81P/uRPbiiMqcTJP/WpTzEYDHjTm97EV77yFcbFyW+44QZuvvlmXvWq\nV/H1r3/9aYmTdzod7r//fmZmZrj77ru58cYbyfOc8847j9/6rd9ifn6ePM95/etfz913302aprzn\nPe/hxS9+Mb/8y7/MO9/5zjp6BSFUu3Xr1ict3hsOh/zYj/0Yd911Vy0uXoU6K3HyAwcOsHv3bvbu\n3Vt7yTfddBM33ngjH/vYx/iFX/gFhBBcd911/Lf/9t9OKcQRCPacfRGbpzK2bGqQNGe589urYYMk\n4JwFSzNJedlVW/jsXx7mwVWPEwJvZagMlUF3t9NyLK1a2i3Njs0pqR+Sra9z5HiPnmog1AKZCUPH\nqwb5cABV77Bgy5xAqpTFZcOwnEAhXbhOwyxCOHjg4SetbDmjEdy5+xleYPG6zaHHvhGN4HcJgeD5\nz31hGJvk4NKtBe0GfONAAy8s0ge5MVHm9UIBSJlyEhLrM8TwKDKdRykVCmuER9JB6zBcVEoddBGd\nQyoNzjE/3eSS3Q3Wl3PWC8Pi6pBmQ3PetoRvPtbFZo8z03Q02wvkJqXREGgxg7cS744jlWepv8D6\nUOBchhWWFIFuTiG8L3vGRgul8WVVow8Vr9XUBuNcyCFWBq1qevBVApNy0fQ4oZFUQ5k9oMpSs8ow\njRlB67nyPMn3XTAk1Qqty0pEb6kE05QK1sWWuqxaJ3g8GkIPn1AIK3DSIEPqPhRoOIeSakP4tZqb\nKGQ5+1LIUKkqKm8wiAms9Q2zHU2qNJJQjS1F8DpzazA0aGiJdwZEEkKgwpVergBU6YWGwidFipeC\nVHmmG5Zm4sidZH0IzVLxf3UgGBYW5YNnbH0wTg88NmDT5g5pE+7/dpcDqwYnhmQDz0qWYD1hRisC\nW34/dQWwGJMoLyv+qH4WI0M90r4MIbVQPFUOwhb1RYBWmqmGp5VolFJkQtButujMtviTt92KUopf\n+PRPMp1aktTwA//sV+Ia9V1CIDjv3PPZOWtZmEvZvHMrX/z6IutdmG56dm6SLC5L/un3bOVr9x3h\nnqNhiozzEu3BCY9wlrPmGsxPO9JGm8WVIf1ej03JKkeXB/jWDJmbKcfLKULgUpZFbg4tLfMdTeEE\ny/0w9Uf6YGylEGMyiXDo0CNPagTPnBMUQcEjibq/33XGhXWVDI3LuS1CeA0ZpL2gzABVDwp5m9An\nqHAiCbtuZxA6p3BDhkVQQpHCUlcsSo/C4TtNCm9ZH+b0jMP4shl66CicQwmDlU0GpkFehH49qx3C\n9tBinVRNkyQKWRQ4J9DCkUiDNa1qvkfpwFU9jZTtH2H/L0WITyonMcaGfBhlgYSv1OQJLQ3VkwmL\nsy40zAvA2Tr7Vn2OwTcLo46yoUUIjUeQm4JE6+CdlgOUrQ8Gsw5qFjleCYJfJXEuQ/kgXi5lQjnK\nGe8NXjicE0hVhUUFXnqEdUGcuRwQKkJjYyh6aaQU1jPIM4Y+I5EpUkGiFJkJ7QhCFBiS0DLjcqRO\ngpEVAmcdVMOfy1yd13kQLG84cufBSPq5wTiBMQpjoT+0WOPIy3cgvCA3OSf6OX45YXpKogS0lGZ5\nYENlMaosZKok6qqcZ5ntdGXFcumpj/bXo4HJ4xIPUohaAKEKLAelnjAAO8jYKayVOD9kUAiGgzAM\nejDMUVJw9OAyC+dv5exdW/9uLrzI00ZLSSsZMDvb5nnP2smhxYw7H1xmoePoZwlrfctaDu2mBvLQ\n9OlD3rqZSrbNSRZmUoqh4fhqzqHjBamSzCZQalaEHLdIwyYag0KF2Z6pY64tWc+gm1GKSElsqbJR\ntxiLerbQk7+PM/2yoQuUK5D58Ex3i3wHUDIscMJ7GtqyPkzLCs8QgqunI/pS4b1GlBV5AoQOCzsS\n7VsoUZSDjKvQjceXBhUMWjmEhczk9IaWQQYmFThfoLyjIZp426JwksIU9ISiyAsSd5y5dpvMSgpr\nwuIsQtijsIKhzcvjKXN05WIYVPd9bfBd7UdQhv5GXlNVwOLKuWvh6YJnhZAUziEwaK/rBbp67iCe\n7etQo/Oebj/HC4WUBdaEfkYvgkcqZChISUQoMFFKk1dDlp1Hq9DoL1V4J1IKrLUo5WtDENRyZPh+\nVA5OhwHD2FDAQ2gbMP2CzFiEl2iRYFWG9wopHLm1OOdopBpPGNAshUIoi/cK7y1ahpYQlAqC5HiU\nKVBSIcvRThZJb5iHhcWEFpRe3+LKgkqDR1iw3jLMBatDgcFinCGVCUpAAaGwyTls+TVVkQRXChpX\nRUJV8c+ot6ra0PnRTWUQw5Xto66MZjjpw1iecp5HIQXeS7QqsFYDltxbjA3zTO9+4BBHFpe44InD\n8IK/o4sv8rTIMs8wryIlGavLQzrKM9WR7D8cRPwLY2k1FFoEoYU0kWybg81zCasDy4P7B+SmYNe8\nYmHKsbYeBOi9c9iiQDYcGIf3IbzpMEw1odWUrA4kg8yVeXaJFTnOK2SpBwxl+P0M0U54Kk8wWw/N\nwfrJGzMj3xmmpxIyA8YUtLRkxUmUCl+qLfNOos6NVTmZMpdkgxZnnQz3AusEUjQRwiIZhj4zUVUS\nhhCDUpLCedYzQW8IzhfgHZlNyKyg1YDcNWmoMANCeBnykc6T2xbkOc5YpAsN/Fp4BEmIKJTtB2E0\nTTlglCo85sYmUAsklah1FVwUpZJL3SBQvufgzTrnuWh7wpGuZL1rg2rNeFytvLfzBusExhtWuj16\nQ1P2TKZYG4r/nfNoJSisoqEKjNcoYTlwYshgUJAiOGf7NEILdCIoitIImtC6YqxjeS3DeMNCp4Gw\nEp06pAoFJeBJpERrhXWO/jBnaqrBWjdsZrx3WBPyZIV1FEagGylKpTgbmsfxulRe0TRbCatZwqDo\nstDSKGHwNJlqaFIGCG/K5n+D9ZJEObLCsdqFvhN0milah4pJLxscWrNs0S1kounngAgix8YGJRon\nxuaRV8awNH4jCbyx0PUYdTS7bCMZH4RcfVNVcZGU4F1V8FNAed5752sDCh6XO4b9IQcPn1kfMvJ3\nj0WwnrkQKcolWgm2zmoGfUE/K0A5rIPphqSTOKbasHVWUZiEbx8IxW1ChOv5yJpgyzQMMke/EOAE\nWWGQicM7FTaW0tFJHFIpVrohWhTSGaG9AqlRQmzw/IKDcObpLWc0gt5pbGMTXkjax9YRW540rBr5\nO2T2xDSJMlg0AkHa0HgUiRZ4Z0jwZd8a9ZRr60c9bY5SfcOHuHjIzYTSeyEa5c7dlGX8HiUVSjqU\nDCLXw3wQmtUFGCcprALTRyRQGJhqGigSZOJx/XVSFTzTVtsxJT1ZBitDj3UFuU2xJsGUx8BY7WQp\nrVkaQzcSlAk+XvljcAUlAi8JyfUxi++9wwnBjk2KbubpSTeyf2X0VJRhVnxoJ5mdSlnoJDgcjTSh\n1Zwmy0JMRXhZ9vsFXUvjw2csHzzA0rJg02yLyy7cTCNJSBUIQqFRyNeBF4pHFgfc9/gyu7Z1OHdb\nghShqdvZIniWQqCkJCsMg7xgbrqNtTkmt+CDh5YknmaqcXKajAQlQgjUi2pCuUIKj2o02HLFdQxt\nn5nGDKggnN597B6GRw+Bg9xajPdIpRFWMCwKlrqW+w8PaHVgqtFk85zAkHLvvh6DnmEq9awPLM1G\n6OdsKotpZshc4S0URtayd67cYNScRl2jul9l+OoNWvl9186+L0O7gHJBd00Ih7Ii9M46g3SSOrha\ntlNMz8SczXebkJOWFENH4TIWpjyr3vHEUlAIkl5yfJizI1Vsm02wGnp9SXdYoJ1lKpXkTgCWzBT0\n+pK5lqOddtizaYZuYSHRFKZBP8vJiyFCpgwzF649F2QYvRA4EdrGgiIRVOdUqkPY9kycWUBbNzFe\noBpTnPuya0Jvjc1CaMl7hLBhwfGu3qcLEfqdqsnLoZ2qUpEsd37O14UESEHhIStCfNe7sIh5L0Lf\nlKf0DChDaCFe7AU0vMTaE3ivUHoaIR1TsosWkp1zkrlmxl37u0y1p1jJGuD7SDWNbkwjhAqFDL6L\nUAqlWzSbCshxfoVUT7N9+27+4h23k6aaf/m/X83i0XUWNu2mPZ0w37Zcfc0VHDu2zDfvfoDnv/B7\nyPJl/uyP/5QXX/9SfMPx27/1vznw8GI5Yyt4Z9baWoSg2WyRJopEQUMrrAmjq6wD53roApQ3aJ/i\nvKElUpxyoCVS6DKPZcCXTcxGYPAYnyFkC8riDudcCP05EXKBQoVduTfAkEQIlCvzSz6joVaYn2mi\nVEq/6IE0NGWX7bOOPdtXWGgpjE+YaedonzPXgXZ6DOkHeHcY5zVWNunnsNqXrPRSFvuK4z1Jb9Dk\n0BosdyWd5sgzqEqyq7JJ66nPKV/mj6h7DymrRMPdC1vw8KEQWmvooBdaDTKtWyFwpZCzxhiBV8GT\nS5sNdCOlP8iDPikCK0MOMFSzWqxzDDPwPsF7RaI0idClB1SWn1VNfL6UGhSazCqkTEqDLtCpqgO+\nQkiEzZG6QdBKtYSqWY1OJImSNBKFlQlZVhbgUFbW+jK8KwTeCjZt2sHcti21B5nnA/ziQXr2cMi7\nqgbO2fI9hZxokkrStkQkkPlQfdqQEqEcvSJj1rYxLvSIOh+mZXgzhfeGVAmGOXWl6qgcRpQGcJQQ\ntGP20JfuYx2iLnsxq4eFz6VcJ8qtknXhszPS420Rct3O1Y9LdM5ZZ23mWc++mF3FdkQSN+rfDdqL\nU4DH2ILMSLyFzTOaw0uCbp7RUgkNFaJBaQo7Nne4dGeb+YUp1td6HF8bcmR5yErPoFTKtoUZHj+0\nTqJTts+32b2pw3DYxXpDqgXNRptelnDf46t0BxnL/YL1YSj4CptoHVIlyqMcOCVoaMWLnrmFhdaZ\n38sZjeDi7x9BSIVSmmOUYQxfZRyppw0HKvv7JIz9QlQVYqKq/QvegHGM4rej9FD5P1HeC5QWWOuo\nhHtBgzgWQmnlgrc/CW3DvcyiVB/jVZlLWkVIPfIyymZurTWNhiQvitAXppZ4KDnIse3LbD4wz7cf\nOo7SlsIusfzgMa66ZBv79z3Gw99+jPW1dVaWD9HrrZBnnr/88ld49vOfxUUXnsPSgTUG/SFaa5wL\nYUFjLMZ6ev0uzhqmWmlokKbsYRNluFN4Gg2FVAC9MhUmMKaB0PPohsZ7hbVho6C1QniPkRKBIkw4\nt3iZlYYvqIxSNZhLEBiUtGFaNk08nlQYdm/qsWl6yJFjQ7xt0J+yXHtewfdeLpGpZPFYH60FWzdN\n4fEURU6WKRqtBO8UqWqHMKzP8S6EsbLC4uSQT3x1yCdvt2yeSmgowVRT02kHrcnqnHIEUTApy9Ba\naRJBoFVCI00ROvQPWhTKF0gtcU5ROI9AsW/R8Y39smzOLnenSuHKQbcIhVAtEArnQw7TicoHLctj\nRFnJJhOkdnih8WgcutyYhRBtuCBK+TNhUToBVd13dDpXBqOcsxEMe9mr58rvBSmwUuKEwgqFQyF8\naJA3UBpBgfQCjCHrHidrN/FIlG6idAfZmibpzCKcZTg0GBsKcrxUOC+QGtLUonQwvEgVjlMqssLQ\ny2FYiFLVJfRuSp2gvQclkFmlB1q+p7r6U2y8dsXoeq6vufJyrjYo1W1CVvJxvtSJrT7P8BlLmeFR\nCN1EyJBfuvyKs3jGBVvptDv83//7ZpaWjyK14IIL9nL+M57PsSMP0Jk6h+nZGR649zbSqWmE0Nzx\nF7exfLxHolKS1ODygkRbDi336eWaQd+QDTOybEi/bxgMc3q5oqEsssg5UTTw1vHIhx4A4Oyf3Fvm\nn0ZhXl/nvCmjLqN1Esqc6Em3jfKn5eflq19Xjy7/X6UKTor0VTf7sX+HtdaNten4ajtVr8dChPXA\nWYuSiqmGopVKlrsFz790gZnE89l7ltFaMpVqltaGZNqDTDFe0O97styzPpDMJwk3PPss8rzHzHRK\nK5HMDnKaCSx0EhaPdDl7U4tDx9aQ3tJUCRefvUCvO8Cj6Q0KHjqyjhaCmZZmfkpx1pYZBnnCgaWM\nQWFxGJJEkYqEZippK4UWoFKPEhJVKjX211ZZX8k4E2fuE3xwh69yM6Mv5sxJxr8NY9/1kyOCwoSr\nZOTrvBcbDG3QlQwqFVWspT4xRlcoVZGFLFUvrCsXonqn6tl71zO46o4rEdLhy6KQTXNtklTT7w+Q\nUtCeamONod8bYq1lfmGOwTDjxNIaxtoyxAb4cv6fczhbigmXZfl1FqsKEYmQq5lpSnqFwdjyfbgg\nrxWqDKkrEatF1taFKFUzWWVUqy3H+OcQpjMLfGi6V5BlOVMNQaIFWW7xTpA7x5Zpz/x0yCX2+haJ\np9UayYfhQ9+bLyu1Rl4CpYcQdDwPL1sOL7sgQA0kOjTpJyosmtVhVj3svtwQVF+wFBKlJEJKKmeC\n0ruoPEQhBN2B53hP1J6H99BphNxDpcupylFMpjBjK0f1V5Xf8qx2c6zzaCWZmUpLz/T0p+iwcKwP\nDO00TJoYP3fHT1PnQsWqlqGYZvz1pQjVt2FzOH4sY99deZzt+c0kabP8wBRCKvLuccywh7OhCnQk\nYB6ew3roF75U5oFm6UEdXclxzpNohTEuTDAhqOEYr+ucXP1xbbheT786nHRpnp76M6d8PTY0eAfB\ncBu2RlLxsZv+gGM7ljhrcVtQ7/HltU7ZFiMlSmmsNaGYSEqMyWsP1FqLtVVRxegw3Nh6WO/H62ts\n9D6q3y3tWmLTgc286n2vYdz6bPgcTrOwPe1V9NQn+mutwPXxbjz6DT/XToagfmNKCrSSFNYx29Yk\nUnC8GybzKCnIi9BnrIUnTTwLs23Wuxnrg+D97djcpihsuV4L+v2CNBHMTLfo94doKTjRDXqvUkrm\nplusd4ej91e2OSgJTR02PNZLVnpFEMMwoZ84tOiEQ5dCIFW1RlQbgvB+3vOB//7k/tmZjOAtt9zy\nnbN4kUgk8jfk61d/nXsuu+fv+zAAuOyey7j661f/fR9G5AzccsstT2oEz1wdGolEIv8AufrrV0fD\nE/k74ekP64tEIpFI5P9nRCMYiUQikYklGsFIJBKJTCzRCEYikUhkYolGMBKJRCITSzSCkUgkEplY\nohGMRCKRyMQSjWAkEolEJpZoBCORSCQysUQjGIlEIpGJJRrBSCQSiUws0QhGIpFIZGKJRjASiUQi\nE0s0gpFIJBKZWKIRjEQikcjEEo1gJBKJRCaWaAQjkUgkMrFEIxiJRCKRiSUawUgkEolMLNEIRiKR\nSGRiiUYwEolEIhNLNIKRSCQSmViiEYxEIpHIxBKNYCQSiUQmlmgEI5FIJDKxRCMYiUQikYklGsFI\nJBKJTCzRCEYikUhkYolGMBKJRCITSzSCkUgkEplYohGMRCKRyMQSjWAkEolEJpZoBCORSCQysUQj\nGIlEIpGJJRrBSCQSiUws0QhGIpFIZGKJRjASiUQiE0s0gpFIJBKZWKIRjEQikcjEEo1gJBKJRCaW\naAQjkUgkMrFEIxiJRCKRiSUawUgkEolMLNEIRiKRSGRiiUYwEolEIhNLNIKRSCQSmViiEYxEIpHI\nxBKNYCQSiUQmlmgEI5FIJDKxRCMYiUQikYklGsFIJBKJTCzRCEYikUhkYolGMBKJRCITSzSCkUgk\nEplYohGMRCKRyMQSjWAkEolEJpZoBCORSCQysUQjGIlEIpGJJRrBSCQSiUws0QhGIpFIZGKJRjAS\niUQiE0s0gpFIJBKZWKIRjEQikcjEEo1gJBKJRCaWaAQjkUgkMrFEIxiJRCKRiSUawUgkEolMLNEI\nRiKRSGRiiUYwEolEIhNLNIKRSCQSmViiEYxEIpHIxBKNYCQSiUQmlmgEI5FIJDKxRCMYiUQikYkl\nGsFIJBKJTCzRCEYikUhkYolGMBKJRCITSzSCkUgkEplYohGMRCKRyMQSjWAkEolEJpZoBCORSCQy\nsUQjGIlEIpGJJRrBSCQSiUws0QhGIpFIZGKJRjASiUQiE0s0gpFIJBKZWKIRjEQikcjEEo1gJBKJ\nRCaWaAQjkUgkMrFEIxiJRCKRiSUawUgkEolMLNEIRiKRSGRiiUYwEolEIhNLNIKRSCQSmViiEYxE\nIpHIxBKNYCQSiUQmlmgEI5FIJDKxRCMYiUQikYklGsFIJBKJTCzRCEYikUhkYolGMBKJRCITSzSC\nkUgkEplYohGMRCKRyMQSjWAkEolEJpZoBCORSCQysUQjGIlEIpGJJRrBSCQSiUws0QhGIpFIZGKJ\nRjASiUQiE0s0gpFIJBKZWKIRjEQikcjEEo1gJBKJRCaWaAQjkUgkMrFEIxiJRCKRiSUawUgkEolM\nLNEIRiKRSGRiiUYwEolEIhNLNIKRSCQSmViiEYxEIpHIxBKNYCQSiUQmlmgEI5FIJDKxRCMYiUQi\nkYklGsFIJBKJTCzRCEYikUhkYolGMBKJRCITSzSCkUgkEplYohGMRCKRyMQSjWAkEolEJpZoBCOR\nSCQysUQjGIlEIpGJJRrBSCQSiUws0QhGIpFIZGKJRjASiUQiE0s0gpFIJBKZWKIRjEQikcjEEo1g\nJBKJRCaWaAQjkUgkMrFEIxiJRCKRiSUawUgkEolMLNEIRiKRSGRiiUYwEolEIhNLNIKRSCQSmViE\n9/7v+xgikUgkEvl7IXqCkUgkEplYohGMRCKRyMQSjWAkEolEJpZoBCORSCQysUQjGIlEIpGJJRrB\nSCQSiUws/y9RyEVX/DAF7AAAAABJRU5ErkJggg==\n", + "text/plain": [ + "\u003cFigure size 800x800 with 1 Axes\u003e" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Embedd images and get boxes, without text queries:\n", + "feature_map = image_embedder(source_image[None, ...])\n", + "\n", + "b, h, w, d = feature_map.shape\n", + "image_features = feature_map.reshape(b, h * w, d)\n", + "\n", + "objectnesses = objectness_predictor(image_features)['objectness_logits']\n", + "\n", + "source_boxes = box_predictor(\n", + " image_features=image_features, feature_map=feature_map\n", + ")['pred_boxes']\n", + "\n", + "source_class_embeddings = class_predictor(image_features=image_features)[\n", + " 'class_embeddings'\n", + "]\n", + "\n", + "# Remove batch dimension\n", + "objectnesses = np.array(objectnesses[0])\n", + "source_boxes = np.array(source_boxes[0])\n", + "source_class_embeddings = np.array(source_class_embeddings[0])\n", + "\n", + "top_k = 3\n", + "objectnesses = sigmoid(objectnesses)\n", + "objectness_threshold = np.partition(objectnesses, -top_k)[-top_k]\n", + "\n", + "fig, ax = plt.subplots(1, 1, figsize=(8, 8))\n", + "ax.imshow(source_image, extent=(0, 1, 1, 0))\n", + "ax.set_axis_off()\n", + "\n", + "for i, (box, objectness) in enumerate(zip(source_boxes, objectnesses)):\n", + " if objectness \u003c objectness_threshold:\n", + " continue\n", + "\n", + " cx, cy, w, h = box\n", + " ax.plot(\n", + " [cx - w / 2, cx + w / 2, cx + w / 2, cx - w / 2, cx - w / 2],\n", + " [cy - h / 2, cy - h / 2, cy + h / 2, cy + h / 2, cy - h / 2],\n", + " color='lime',\n", + " )\n", + "\n", + " ax.text(\n", + " cx - w / 2 + 0.015,\n", + " cy + h / 2 - 0.015,\n", + " f'Index {i}: {objectness:1.2f}',\n", + " ha='left',\n", + " va='bottom',\n", + " color='black',\n", + " bbox={\n", + " 'facecolor': 'white',\n", + " 'edgecolor': 'lime',\n", + " 'boxstyle': 'square,pad=.3',\n", + " },\n", + " )\n", + "\n", + "ax.set_xlim(0, 1)\n", + "ax.set_ylim(1, 0)\n", + "ax.set_title(f'Top {top_k} objects by objectness')" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "executionInfo": { + "elapsed": 1, + "status": "ok", + "timestamp": 1707756415649, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "gnCPvFFz1n9o" + }, + "outputs": [], + "source": [ + "# Get the query embedding with the index of the selected object.\n", + "# We're using the rocket:\n", + "query_object_index = 1527 # Index of the rocket box above.\n", + "query_embedding = source_class_embeddings[query_object_index]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-HUEJvP5304U" + }, + "source": [ + "## Get predictions for target image with the query embedding" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "colab": { + "height": 499 + }, + "executionInfo": { + "elapsed": 706, + "status": "ok", + "timestamp": 1707756416608, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "DruLkz-c37Gk", + "outputId": "6c79845e-9753-43d4-d160-0fafb7e711e8" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Closest match')" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nVWWVynSbAAAAAElFTkSuQmCC\n", + "text/plain": [ + "\u003cFigure size 800x800 with 1 Axes\u003e" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "feature_map = image_embedder(target_image[None, ...])\n", + "\n", + "b, h, w, d = feature_map.shape\n", + "target_boxes = box_predictor(\n", + " image_features=feature_map.reshape(b, h * w, d), feature_map=feature_map\n", + ")['pred_boxes']\n", + "\n", + "target_class_predictions = class_predictor(\n", + " image_features=feature_map.reshape(b, h * w, d),\n", + " query_embeddings=query_embedding[None, None, ...], # [batch, queries, d]\n", + ")\n", + "\n", + "\n", + "# Remove batch dimension and convert to numpy:\n", + "target_boxes = np.array(target_boxes[0])\n", + "target_logits = np.array(target_class_predictions['pred_logits'][0])\n", + "\n", + "top_ind = np.argmax(target_logits[:, 0], axis=0)\n", + "score = sigmoid(target_logits[top_ind, 0])\n", + "\n", + "\n", + "fig, ax = plt.subplots(1, 1, figsize=(8, 8))\n", + "ax.imshow(target_image, extent=(0, 1, 1, 0))\n", + "ax.set_axis_off()\n", + "\n", + "cx, cy, w, h = target_boxes[top_ind]\n", + "ax.plot(\n", + " [cx - w / 2, cx + w / 2, cx + w / 2, cx - w / 2, cx - w / 2],\n", + " [cy - h / 2, cy - h / 2, cy + h / 2, cy + h / 2, cy - h / 2],\n", + " color='lime',\n", + ")\n", + "\n", + "ax.text(\n", + " cx - w / 2 + 0.015,\n", + " cy + h / 2 - 0.015,\n", + " f'Score: {score:1.2f}',\n", + " ha='left',\n", + " va='bottom',\n", + " color='black',\n", + " bbox={\n", + " 'facecolor': 'white',\n", + " 'edgecolor': 'lime',\n", + " 'boxstyle': 'square,pad=.3',\n", + " },\n", + ")\n", + "\n", + "ax.set_xlim(0, 1)\n", + "ax.set_ylim(1, 0)\n", + "ax.set_title(f'Closest match')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "q0YHQWw0R5kG" + }, + "source": [ + "# Benchmark inference speed\n", + "This section shows how to benchmark the inference speed of OWL-ViT. Speed and accuracy can be traded off by reducing the input resolution. This is done by truncating the position embeddings, and it works if the model was trained with heavy size augmentation and padding at the bottom and/or right of the image. This is the case for **OWL-ViT v2**." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "executionInfo": { + "elapsed": 59, + "status": "ok", + "timestamp": 1707756416928, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "2LW8_T8lTtuM" + }, + "outputs": [], + "source": [ + "config = configs.owl_v2_clip_b16.get_config(init_mode='canonical_checkpoint')\n", + "\n", + "# Replace default checkpoint with one trained on O365+VG without prompts, for\n", + "# comparability to the literature:\n", + "config.init_from.checkpoint_path = 'gs://scenic-bucket/owl_vit/checkpoints/owl2-b16-960-st-ngrams-ft-o365vg_925e87d'\n", + "\n", + "# To use variable inference resolution, patch size and native (=training) grid\n", + "# size need to be added to the config:\n", + "config.model.body.patch_size = int(config.model.body.variant[-2:])\n", + "config.model.body.native_image_grid_size = (\n", + " config.dataset_configs.input_size // config.model.body.patch_size\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "executionInfo": { + "elapsed": 54, + "status": "ok", + "timestamp": 1707756417212, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "Ts2dTG-sbAym" + }, + "outputs": [], + "source": [ + "class PredictWithTextEmbeddings(models.TextZeroShotDetectionModule):\n", + " \"\"\"Module that performs box prediction with precomputed query embeddings.\"\"\"\n", + "\n", + " def __call__(self, image, query_embeddings):\n", + " feature_map = self.image_embedder(image[None, ...], False) # Add batch dim.\n", + " b, h, w, d = feature_map.shape\n", + " image_features = feature_map.reshape(b, h * w, d)\n", + " boxes = self.box_predictor(\n", + " image_features=image_features, feature_map=feature_map\n", + " )['pred_boxes']\n", + " logits = self.class_predictor(image_features, query_embeddings[None, ...])[\n", + " 'pred_logits'\n", + " ]\n", + " return boxes, logits\n", + "\n", + "\n", + "module = PredictWithTextEmbeddings(\n", + " body_configs=config.model.body,\n", + " objectness_head_configs=config.model.objectness_head,\n", + " normalize=config.model.normalize,\n", + " box_bias=config.model.box_bias,\n", + ")\n", + "\n", + "variables = module.load_variables(config.init_from.checkpoint_path)\n", + "\n", + "\n", + "@jax.jit\n", + "def predict(image, query_embeddings):\n", + " return module.apply(variables, image, query_embeddings)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "executionInfo": { + "elapsed": 60555, + "status": "ok", + "timestamp": 1707756478002, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "VpYCp8yFUetb", + "outputId": "8c3f2558-fb5a-48a1-ac87-5fea9ec4bfe8" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Benchmarking image size: 368\n", + "FPS at resolution=368: 85.61\n", + "\n", + "Benchmarking image size: 400\n", + "FPS at resolution=400: 76.74\n", + "\n", + "Benchmarking image size: 448\n", + "FPS at resolution=448: 60.88\n", + "\n", + "Benchmarking image size: 480\n", + "FPS at resolution=480: 49.57\n", + "\n", + "Benchmarking image size: 528\n", + "FPS at resolution=528: 40.20\n", + "\n", + "Benchmarking image size: 576\n", + "FPS at resolution=576: 32.06\n", + "\n", + "Benchmarking image size: 624\n", + "FPS at resolution=624: 26.21\n", + "\n", + "Benchmarking image size: 672\n", + "FPS at resolution=672: 21.53\n", + "\n", + "Benchmarking image size: 736\n", + "FPS at resolution=736: 16.63\n", + "\n", + "Benchmarking image size: 784\n", + "FPS at resolution=784: 14.64\n", + "\n", + "Benchmarking image size: 848\n", + "FPS at resolution=848: 11.39\n", + "\n", + "Benchmarking image size: 896\n", + "FPS at resolution=896: 9.61\n", + "\n", + "Benchmarking image size: 960\n", + "FPS at resolution=960: 7.67\n", + "\n" + ] + } + ], + "source": [ + "import time\n", + "\n", + "# Get fake query embeddings for benchmarking (1203 classes):\n", + "embed_dim = models.clip_model.CONFIGS[config.model.body.variant]['embed_dim']\n", + "query_embeddings = jax.random.normal(jax.random.PRNGKey(0), (1203, embed_dim))\n", + "\n", + "# Resolutions at which to benchmark the model:\n", + "if config.model.body.patch_size == 16:\n", + " sizes = [368, 400, 448, 480, 528, 576, 624, 672, 736, 784, 848, 896, 960]\n", + "else:\n", + " raise ValueError(\n", + " 'Please define image sizes for patch size:'\n", + " f' {config.model.body.patch_size}'\n", + " )\n", + "num_trials = 5\n", + "all_timings = {}\n", + "for image_size in sizes:\n", + " print(f'Benchmarking image size: {image_size}')\n", + "\n", + " # Get fake image for benchmarking:\n", + " image = jax.random.uniform(jax.random.PRNGKey(0), (image_size, image_size, 3))\n", + " timings = []\n", + " for i in range(num_trials + 1): # Add 1 trial to account for compilation.\n", + " start_time = time.time()\n", + " boxes, logits = predict(image, query_embeddings)\n", + " _ = jax.block_until_ready((boxes, logits))\n", + " timings.append(time.time() - start_time)\n", + "\n", + " # Store the median. Note that the first trial will always be very slow due to\n", + " # model commpilation:\n", + " all_timings[image_size] = np.median(timings)\n", + " print(f'FPS at resolution={image_size}: {1/all_timings[image_size]:.2f}\\n')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HUtgDL0erCwm" + }, + "source": [ + "# Models with segmentation mask head" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "g3ljE_-irEje" + }, + "source": [ + "## Load model with mask head" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "executionInfo": { + "elapsed": 3, + "status": "ok", + "timestamp": 1707756478228, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "bRkFxGydrCwn" + }, + "outputs": [], + "source": [ + "from scenic.projects.owl_vit.configs import clip_l14_with_masks" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "executionInfo": { + "elapsed": 53, + "status": "ok", + "timestamp": 1707756478535, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "xfVcbta9rCwn" + }, + "outputs": [], + "source": [ + "config = clip_l14_with_masks.get_config(init_mode='canonical_checkpoint')" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "executionInfo": { + "elapsed": 4, + "status": "ok", + "timestamp": 1707756478769, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "2bFVP-3KrCwn" + }, + "outputs": [], + "source": [ + "module = models.TextZeroShotDetectionModule(\n", + " body_configs=config.model.body,\n", + " mask_head_configs=config.model.mask_head,\n", + " normalize=config.model.normalize,\n", + " box_bias=config.model.box_bias)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "executionInfo": { + "elapsed": 73111, + "status": "ok", + "timestamp": 1707756552136, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "XDvwUne-rCwo" + }, + "outputs": [], + "source": [ + "variables = module.load_variables(config.init_from.checkpoint_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "executionInfo": { + "elapsed": 4, + "status": "ok", + "timestamp": 1707756552371, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "aA0qFkxPrCwo" + }, + "outputs": [], + "source": [ + "jitted = jax.jit(module.apply, static_argnames=('train',))" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "executionInfo": { + "elapsed": 84172, + "status": "ok", + "timestamp": 1707756636800, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "Eao4T1k-rCwo" + }, + "outputs": [], + "source": [ + "# Resize to model input size:\n", + "input_image = skimage.transform.resize(\n", + " image_padded,\n", + " (config.dataset_configs.input_size, config.dataset_configs.input_size),\n", + " anti_aliasing=True)\n", + "\n", + "# Note: The model expects a batch dimension.\n", + "predictions = jitted(\n", + " variables,\n", + " input_image[None, ...],\n", + " tokenized_queries[None, ...],\n", + " train=False)\n", + "\n", + "# Remove batch dimension and convert to numpy:\n", + "predictions = jax.tree_util.tree_map(lambda x: np.array(x[0]), predictions )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "v7uzmqqMrCwo" + }, + "source": [ + "## Plot predictions, including masks" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "executionInfo": { + "elapsed": 3, + "status": "ok", + "timestamp": 1707756637033, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "NS1_suIKrCwp" + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "colab": { + "height": 498 + }, + "executionInfo": { + "elapsed": 500, + "status": "ok", + "timestamp": 1707756637788, + "user": { + "displayName": "", + "userId": "" + }, + "user_tz": -60 + }, + "id": "X7onch1TrCwp", + "outputId": "b180c725-7139-4d4d-bb38-8d07f7d2ca8b" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(1.0, 0.0)" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nRU5ErkJggg==\n", + "text/plain": [ + "\u003cFigure size 800x800 with 1 Axes\u003e" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "score_threshold = 0.3\n", + "\n", + "logits = predictions['pred_logits'][..., :len(text_queries)] # Remove padding.\n", + "scores = sigmoid(np.max(logits, axis=-1))\n", + "labels = np.argmax(predictions['pred_logits'], axis=-1)\n", + "boxes = predictions['pred_boxes']\n", + "\n", + "masks = [None] * len(boxes)\n", + "if 'pred_masks' in predictions:\n", + " masks = sigmoid(predictions['pred_masks'])\n", + "\n", + "fig, ax = plt.subplots(1, 1, figsize=(8, 8))\n", + "ax.imshow(input_image, extent=(0, 1, 1, 0))\n", + "ax.set_axis_off()\n", + "\n", + "for score, box, label, mask in zip(scores, boxes, labels, masks):\n", + " if score \u003c score_threshold:\n", + " continue\n", + " cx, cy, w, h = box\n", + " ax.plot([cx - w / 2, cx + w / 2, cx + w / 2, cx - w / 2, cx - w / 2],\n", + " [cy - h / 2, cy - h / 2, cy + h / 2, cy + h / 2, cy - h / 2], 'r')\n", + "\n", + " if mask is not None:\n", + " mask_img = plt.cm.viridis(mask)\n", + " mask_img[..., -1] = (mask \u003e 0.5) * 0.8\n", + " extent = np.array((cx - w / 2, cx + w / 2, cy + h / 2, cy - h / 2))\n", + " ax.imshow(mask_img, extent=np.clip(extent, 0, 1))\n", + "\n", + " ax.text(\n", + " cx - w / 2,\n", + " cy + h / 2 + 0.015,\n", + " f'{text_queries[label]}: {score:1.2f}',\n", + " ha='left',\n", + " va='top',\n", + " color='red',\n", + " bbox={\n", + " 'facecolor': 'white',\n", + " 'edgecolor': 'red',\n", + " 'boxstyle': 'square,pad=.3'\n", + " })\n", + "\n", + "ax.set_xlim(0, 1)\n", + "ax.set_ylim(1, 0)" + ] + } + ], + "metadata": { + "colab": { + "last_runtime": { + "build_target": "//learning/grp/tools/ml_python:ml_notebook", + "kind": "private" + }, + "provenance": [ + { + "file_id": "1kBebGRuMcABXiprw6IEAxpbKAXNO4EOQ", + "timestamp": 1651575080312 + }, + { + "file_id": "https://github.com/google-research/scenic/blob/main/scenic/common_lib/colabs/scenic_playground.ipynb", + "timestamp": 1650960476931 + } + ], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/scenic/projects/owl_vit/notebooks/__init__.py b/scenic/projects/owl_vit/notebooks/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/owl_vit/notebooks/inference.py b/scenic/projects/owl_vit/notebooks/inference.py new file mode 100644 index 0000000000000000000000000000000000000000..37cc38e1dbaa89896e2e5f7da26bce54b22eb769 --- /dev/null +++ b/scenic/projects/owl_vit/notebooks/inference.py @@ -0,0 +1,240 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Code for running (interactive) inference with OWL-ViT models.""" + +import dataclasses +import functools +from typing import Any, Dict, Tuple + +from flax import linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import box_utils +from scenic.projects.owl_vit.notebooks import numpy_cache +from scipy import special as sp_special +from skimage import transform as skimage_transform +import tensorflow as tf + +sigmoid = sp_special.expit # Sigmoid is a more familiar name. +QUERY_PAD_BIN_SIZE = 50 + + +@dataclasses.dataclass +class Model: + """Wraps an OWL-ViT FLAX model for convenient inference. + + All public methods apply to a single example and take and return Numpy arrays. + + Attributes: + config: ConfigDict with model configuration. + module: OWL-ViT Flax module. + variables: Variable dict to be used with module.apply. + """ + + config: ml_collections.ConfigDict + module: nn.Module + variables: Dict[str, Any] + + def __eq__(self, other): + if isinstance(other, Model): + return (self.config.init_from.checkpoint_path == + other.config.init_from.checkpoint_path) + + def __hash__(self): + return hash(self.config.init_from.checkpoint_path) + + def warm_up(self): + """Runs the model on a dummy example to trigger compilation.""" + image = np.zeros((128, 64, 3), dtype=np.uint8) + queries = ('dummy',) + query_embeddings = self.embed_text_queries(queries) + self.get_scores(image, query_embeddings, len(queries)) + + @numpy_cache.lru_cache(maxsize=100) + def preprocess_image(self, image: np.ndarray) -> np.ndarray: + """Preprocesses a uint8 image to the format required by the model.""" + if image.dtype != np.uint8: + raise ValueError(f'Image should be uint8, got {image.dtype}') + image = image.astype(np.float32) / 255.0 + + # Pad to square with gray pixels on bottom and right: + h, w, _ = image.shape + size = max(h, w) + image_padded = np.pad( + image, ((0, size - h), (0, size - w), (0, 0)), constant_values=0.5) + + # Resize to model input size: + return skimage_transform.resize( + image_padded, (self.config.dataset_configs.input_size, + self.config.dataset_configs.input_size), + anti_aliasing=True) + + @numpy_cache.lru_cache(maxsize=100) + def embed_image( + self, image: np.ndarray) -> Tuple[np.ndarray, np.ndarray, np.ndarray]: + """Embeds image and returns image embeddings and boxes. + + Args: + image: Single uint8 Numpy image of any size. Will be converted to float + and resized before passing it to the model. + + Returns: + Numpy arrays containing image features, class embeddings, and predicted + boxes. + """ + image = self.preprocess_image(image) + out = self._embed_image_jitted(image[None, ...]) + return jax.tree_util.tree_map(lambda x: np.array(x[0]), out) + + @numpy_cache.lru_cache(maxsize=1000) + def embed_text_queries(self, queries: Tuple[str, ...]) -> np.ndarray: + """Embeds text queries. + + Args: + queries: Tuple of query strings. + + Returns: + Numpy arrays containing query embeddings. + """ + tokenized = np.array([ + self.module.apply(self.variables, q, method=self.module.tokenize) + for q in queries]) + # Pad queries to avoid re-compilation: + n = len(queries) + num_pad = int(np.ceil(n / QUERY_PAD_BIN_SIZE) * QUERY_PAD_BIN_SIZE) - n + tokenized = tf.pad(tokenized, [[0, num_pad], [0, 0]]).numpy() + return np.array(self._embed_texts_jitted(tokenized[None, ...])[0]) + + @numpy_cache.lru_cache(maxsize=100) + def embed_image_query( + self, + query_image: np.ndarray, + query_box_yxyx: Tuple[float, float, float, float], + ) -> Tuple[np.ndarray, np.ndarray]: + """Extracts image features in the region of `desired_boxes_yxyx`. + + + This works by taking the features of a bounding box with high IOU + to the desired_boxes_yxyx and returning the corresponding embedding + features. + + Args: + query_image: Image showing the example object to be used as query. + query_box_yxyx: A single bounding box around the example object, in the + TensorFlow format (y_min, x_min, y_max, x_max), normalized to [0, 1], + for which to extract a query embedding. + + Returns: + Queryable features and index of the predicted box whose features were + selected. + """ + _, class_embeddings, pred_boxes = self.embed_image(query_image) + ious = box_utils.box_iou( + np.array(query_box_yxyx)[None, ...], + box_utils.box_cxcywh_to_yxyx(pred_boxes, np), + np_backbone=np)[0][0] + # Use an adaptive threshold such that all boxes within 80% of the best IoU + # are included: + iou_thresh = np.max(ious) * 0.8 + # If there are no overlapping boxes, fall back to generalized IoU: + if np.all(ious == 0.0): + ious = box_utils.generalized_box_iou( + np.array(query_box_yxyx)[None, ...], + box_utils.box_cxcywh_to_yxyx(pred_boxes, np), + np_backbone=np)[0] + # 120% of the best IoU when gIOU is negative, clip to avoid numeric error. + iou_thresh = np.max(ious.clip(None, 0.0)) * 1.2 + # Select class_embeddings that are above the IoU threshold: + selected_inds = (ious >= iou_thresh).nonzero()[0] + assert selected_inds.size + selected_embeddings = class_embeddings[selected_inds] + # Due to the DETR style bipartite matching loss, only one embedding + # feature for each object is "good" and the rest are "background." To find + # the one "good" feature we use the heuristic that it should be dissimilar + # to the mean embedding. + mean_embedding = np.mean(class_embeddings, axis=0) + mean_sim = np.einsum('d,id->i', mean_embedding, selected_embeddings) + # Find box with lowest overall similarity: + best_box_ind = selected_inds[np.argmin(mean_sim)] + + return class_embeddings[best_box_ind], best_box_ind # pytype: disable=bad-return-type # jax-ndarray + + def get_scores( + self, + image: np.ndarray, + query_embeddings: np.ndarray, + num_queries: int, + ) -> Tuple[np.ndarray, np.ndarray]: + """Scores image features against queries. + + Args: + image: Single uint8 Numpy image of any size. Will be converted to float + and resized before passing it to the model. + query_embeddings: Text- or image-derived queries. + num_queries: Number of true queries, in case embeddings are padded. + + Returns: + Index and score of the top query for each predicted box in the image. + """ + image_features, _, _ = self.embed_image(image) + out = self._predict_classes_jitted( + image_features=image_features[None, ...], + query_embeddings=query_embeddings[None, ...]) + logits = np.array(out['pred_logits'])[0, :, :num_queries] # Remove padding. + top_query_ind = np.argmax(logits, axis=-1) + scores = sigmoid(np.max(logits, axis=-1)) + return top_query_ind, scores + + @functools.partial(jax.jit, static_argnums=(0,)) + def _embed_image_jitted( + self, image: jnp.ndarray) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Embeds image and returns image features, class embeddings, and boxes.""" + feature_map = self.module.apply( + self.variables, + images=image, + train=False, + method=self.module.image_embedder) + b, _, _, c = feature_map.shape + features = jnp.reshape(feature_map, (b, -1, c)) + pred_boxes = self.module.apply( + self.variables, image_features=features, feature_map=feature_map, + method=self.module.box_predictor)['pred_boxes'] + class_embeddings = self.module.apply( + self.variables, + image_features=features, + query_embeddings=None, + method=self.module.class_predictor)['class_embeddings'] + return features, class_embeddings, pred_boxes + + @functools.partial(jax.jit, static_argnums=(0,)) + def _predict_classes_jitted( + self, + image_features: jnp.ndarray, + query_embeddings: jnp.ndarray, + ) -> Dict[str, jnp.ndarray]: + return self.module.apply( + self.variables, + image_features=image_features, + query_embeddings=query_embeddings, + method=self.module.class_predictor) + + @functools.partial(jax.jit, static_argnums=(0,)) + def _embed_texts_jitted(self, queries: jnp.ndarray) -> jnp.ndarray: + return self.module.apply(self.variables, + text_queries=queries, + train=False, + method=self.module.text_embedder) diff --git a/scenic/projects/owl_vit/notebooks/interactive.py b/scenic/projects/owl_vit/notebooks/interactive.py new file mode 100644 index 0000000000000000000000000000000000000000..fa2f2bac2b16a0c2d0bba58a3bb3b863fa5a5211 --- /dev/null +++ b/scenic/projects/owl_vit/notebooks/interactive.py @@ -0,0 +1,337 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Functions for the interactive parts of OWL-ViT notebooks.""" + +import base64 +import functools +import json +from typing import Any, Mapping, Union + +from bokeh import models +from bokeh.models import callbacks +from bokeh.models import widgets +import matplotlib as mpl +import matplotlib.pyplot as plt +import numpy as np +from scenic.model_lib.base_models import box_utils +from scenic.projects.owl_vit.notebooks import inference + +TEXT_INPUT_PY_CALLBACK_NAME = 'text_input_py_callback' +IMAGE_CONDITIONING_PY_CALLBACK_NAME = 'image_conditioning_py_callback' + +IMAGE_COND_NMS_IOU_THRESHOLD = 0.7 +IMAGE_COND_MIN_CONF = 0.5 + + +def register_text_input_callback(model: inference.Model, image: np.ndarray, + colab_output: Any): + """Creates and registers the Python part of the text input callback. + + Args: + model: inference.Model instance. + image: Uint8 image on which detection will be performed. + colab_output: google.colab.output module which needs to be imported in the + Colab notebook with `from google.colab import output as colab_output`. + """ + callback = functools.partial( + _text_input_py_callback, model=model, image=image) + colab_output.register_callback(TEXT_INPUT_PY_CALLBACK_NAME, callback) + + +def register_box_selection_callback(model: inference.Model, + query_image: np.ndarray, + target_image: np.ndarray, + colab_output: Any) -> None: + """Creates and registers the Python part of the box selection callback. + + Args: + model: inference.Model instance. + query_image: Uint8 image containing the example object. + target_image: Uint8 image in which similar objects should be detected. + colab_output: google.colab.output module which needs to be imported in the + Colab notebook with `from google.colab import output as colab_output`. + """ + callback = functools.partial( + _image_conditioning_py_callback, model=model, query_image=query_image, + target_image=target_image) + colab_output.register_callback(IMAGE_CONDITIONING_PY_CALLBACK_NAME, callback) + + +def _text_input_py_callback(comma_separated_queries: str, *, + model: inference.Model, + image: np.ndarray) -> str: + """Gets scores for queries and returns updated box colors. + + This callback is called from JavaScript when the query string in the plot's + text input box is changed. + + All keyword-arguments must be supplied by functools.partial before using this + function as input to google.colab.kernel.invokeFunction in JavaScript. + + Args: + comma_separated_queries: Content of the text input box. Should contain + comma-separated text queries. + model: Wrapper object for an OWL-ViT model. + image: Single uint8 Numpy image to perform detection on. + + Returns: + JSON-encoded color_updates structure that will be used by the Bokeh + JavaScript to update box colors. + """ + queries = [q.strip() for q in comma_separated_queries.split(',')] + queries = tuple(q for q in queries if q) + num_queries = len(queries) + + if not num_queries: + return json.dumps({'color_updates': [], 'legend_text_b64': ''}) + + # Compute box display alphas based on prediction scores: + query_embeddings = model.embed_text_queries(queries) + top_query_ind, scores = model.get_scores(image, query_embeddings, num_queries) + alphas = np.zeros_like(scores) + for i in range(num_queries): + # Select scores for boxes matching the current query: + query_mask = top_query_ind == i + if not np.any(query_mask): + continue + query_scores = scores[query_mask] + + # Box alpha is scaled such that the best box for a query has alpha 1.0 and + # the worst box for which this query is still the top query has alpha 0.1. + # All other boxes will either belong to a different query, or will not be + # shown. + max_score = np.max(query_scores) + 1e-6 + query_alphas = (query_scores - (max_score * 0.1)) / (max_score * 0.9) + query_alphas = np.clip(query_alphas, 0.0, 1.0) + alphas[query_mask] = query_alphas + + # Construct color_updates structure for Bokeh: + color_updates = [] + for i, (query_ind, alpha) in enumerate(zip(top_query_ind, alphas)): + color_updates.append((i, _get_query_color(query_ind, float(alpha)))) + + # Construct new legend: + legend_text = _get_query_legend_html(queries) + # Base64-encode legend text so we don't have to deal with HTML/JSON escaping: + legend_text_b64 = base64.b64encode(legend_text.encode('utf8')).decode('utf8') + + return json.dumps({ + 'color_updates': color_updates, + 'legend_text_b64': legend_text_b64, + }) + + +def get_text_input_js_callback(data_source: models.ColumnDataSource, + legend: widgets.Div) -> callbacks.CustomJS: + """Creates the CustomJS callback that will be triggered upon query entry. + + The JavaScript callback in turn calls back to Python, specifically to a + function with the name specified by TEXT_INPUT_PY_CALLBACK_NAME, via + google.colab.kernel.invokeFunction. The Python callback should return a + color_updates data structure consisting of a list of (box_index, hex_color) + tuples. + + Args: + data_source: Bokeh ColumnDataSource linked to bounding boxes. Must contain a + field called "colors". + legend: Div widget that will contain the query legend. + + Returns: + Bokeh CustomJS callback object. + """ + return callbacks.CustomJS( + args=dict(data_source=data_source, legend=legend), + code=""" + (async function() { + const input = cb_obj.value_input.replace(/[^a-zA-Z0-9 ,_-]/g, ''); + const result = await google.colab.kernel.invokeFunction( + '""" + TEXT_INPUT_PY_CALLBACK_NAME + """', [input], {}); + var result_text = result['data']['text/plain'] + // Need to strip enclosing quotes since invokeFunction returns str: + result_text = result_text.substring(1, result_text.length-1); + const result_json = JSON.parse(result_text); + + const color_updates = result_json['color_updates'] + const colors = data_source.data['colors'] + for (let i = 0; i < color_updates.length; i++) { + // Element 0 is the box index, element 1 is the hex color: + colors[color_updates[i][0]] = color_updates[i][1] + } + data_source.change.emit(); + legend.text = atob(result_json['legend_text_b64']) + })(); + """) + + +def _image_conditioning_py_callback( + geometry_dict: Mapping[str, Union[float, str]], + *, + model: inference.Model, + query_image: np.ndarray, + target_image: np.ndarray, +) -> str: + """Updates image conditioning predictions when box is drawn.""" + # Note: Bokeh's y coords are swapped compared to TensorFlow: + box = (geometry_dict['y1'], geometry_dict['x0'], geometry_dict['y0'], + geometry_dict['x1']) + query_embedding, best_box_ind = model.embed_image_query(query_image, box) + _, _, query_image_boxes = model.embed_image(query_image) + + # TODO(mjlm): Implement multi-query image-conditioned detection. + num_queries = 1 + top_query_ind, scores = model.get_scores( + target_image, query_embedding[None, ...], num_queries=1) + + # Apply non-maximum suppression: + if IMAGE_COND_NMS_IOU_THRESHOLD < 1.0: + _, _, target_image_boxes = model.embed_image(target_image) + target_boxes_yxyx = box_utils.box_cxcywh_to_yxyx(target_image_boxes, np) + for i in np.argsort(-scores): + if not scores[i]: + # This box is already suppressed, continue: + continue + ious = box_utils.box_iou( + target_boxes_yxyx[None, [i], :], + target_boxes_yxyx[None, :, :], + np_backbone=np)[0][0, 0] + ious[i] = -1.0 # Mask self-IoU. + scores[ious > IMAGE_COND_NMS_IOU_THRESHOLD] = 0.0 + + # Compute box display alphas based on prediction scores: + alphas = np.zeros_like(scores) + for i in range(num_queries): + # Select scores for boxes matching the current query: + query_mask = top_query_ind == i + query_scores = scores[query_mask] + if not query_scores.size: + continue + + # Box alpha is scaled such that the best box for a query has alpha 1.0 and + # the worst box for which this query is still the top query has alpha 0.1. + # All other boxes will either belong to a different query, or will not be + # shown. + max_score = np.max(query_scores) + 1e-6 + query_alphas = (query_scores - (max_score * 0.1)) / (max_score * 0.9) + query_alphas[query_alphas < IMAGE_COND_MIN_CONF] = 0.0 + query_alphas = np.clip(query_alphas, 0.0, 1.0) + alphas[query_mask] = query_alphas + + # Construct color_updates structure for Bokeh: + color_updates = [] + for i, (query_ind, alpha) in enumerate(zip(top_query_ind, alphas)): + color_updates.append((i, _get_query_color(query_ind, float(alpha)))) + + cx, cy, w, h = (float(c) for c in query_image_boxes[best_box_ind]) + selected_box = {'x': cx, 'y': cy, 'w': w, 'h': h} + + return json.dumps({ + 'color_updates': color_updates, + 'selected_box': selected_box, + }) + + +def get_image_conditioning_js_callback( + *, + user_query_box_data_source: models.ColumnDataSource, + model_query_box_data_source: models.ColumnDataSource, + pred_box_data_source: models.ColumnDataSource, +) -> callbacks.CustomJS: + """Creates the CustomJS callback that will be triggered upon query entry. + + The JavaScript callback in turn calls back to Python, specifically to a + function with the name specified in py_callback_name, via + google.colab.kernel.invokeFunction. The Python callback should return a + color_updates data structure consisting of a list of (box_index, hex_color) + tuples. + + Args: + user_query_box_data_source: Bokeh ColumnDataSource linked to the query box + drawn by the user. + model_query_box_data_source: Bokeh ColumnDataSource linked to the query box + selected from the model predictions on the source image. + pred_box_data_source: Bokeh ColumnDataSource linked to the boxes predicted + for the target image. + + Returns: + Bokeh CustomJS callback object. + """ + return callbacks.CustomJS( + args=dict( + user_query_box_data_source=user_query_box_data_source, + model_query_box_data_source=model_query_box_data_source, + pred_box_data_source=pred_box_data_source), + code=""" + (async function() { + // Get query box coordinates: + const geometry = cb_obj['geometry']; + const width = geometry['x1'] - geometry['x0']; + const height = geometry['y0'] - geometry['y1']; + const x = geometry['x0'] + width/2; + const y = geometry['y1'] + height/2; + + // Update source image with user-drawn query box: + const data = user_query_box_data_source.data; + data['x'][0] = x; + data['y'][0] = y; + data['width'][0] = width; + data['height'][0] = height; + user_query_box_data_source.change.emit(); + + // Update target plot: + const result = await google.colab.kernel.invokeFunction( + '""" + IMAGE_CONDITIONING_PY_CALLBACK_NAME + """', [geometry], {}); + var result_text = result['data']['text/plain'] + // Need to strip enclosing quotes since invokeFunction returns str: + result_text = result_text.substring(1, result_text.length-1); + const result_json = JSON.parse(result_text); + + const color_updates = result_json['color_updates'] + const colors = pred_box_data_source.data['colors'] + for (let i = 0; i < color_updates.length; i++) { + // Element 0 is the box index, element 1 is the hex color: + colors[color_updates[i][0]] = color_updates[i][1] + } + pred_box_data_source.change.emit(); + + // Update source image with actual query box from model: + const data2 = model_query_box_data_source.data; + data2['x'][0] = result_json['selected_box']['x']; + data2['y'][0] = result_json['selected_box']['y']; + data2['width'][0] = result_json['selected_box']['w']; + data2['height'][0] = result_json['selected_box']['h']; + model_query_box_data_source.change.emit(); + + })(); + """) + + +@functools.lru_cache(maxsize=None) +def _get_query_color(query_ind, alpha=1.0): + color = plt.get_cmap('Set1')(np.linspace(0, 1, 10))[query_ind % 10, :3] + color -= np.min(color) + color /= np.max(color) + return mpl.colors.to_hex((color[0], color[1], color[2], alpha), + keep_alpha=alpha < 1.0) + + +def _get_query_legend_html(queries): + html = [] + for i, query in enumerate(queries): + color = _get_query_color(i) + html.append( + f'' + f'{query}' + '') + return 'Queries: ' + ', '.join(html) diff --git a/scenic/projects/owl_vit/notebooks/numpy_cache.py b/scenic/projects/owl_vit/notebooks/numpy_cache.py new file mode 100644 index 0000000000000000000000000000000000000000..5ccb4127392bbfe08b6282cffcc7c324fff6c18f --- /dev/null +++ b/scenic/projects/owl_vit/notebooks/numpy_cache.py @@ -0,0 +1,62 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""A functools.lru_cache that works for functions taking Numpy arguments.""" + +import functools +import numpy as np + + +def lru_cache(*args, **kwargs): + """Wraps functools.lru_cache to make it compatible with Numpy arrays.""" + + def decorator(function): + + @functools.wraps(function) + def wrapper(*args, **kwargs): + hashable_args = [_make_hashable(arg) for arg in args] + hashable_kwargs = {k: _make_hashable(v) for k, v in kwargs.items()} + return cached_wrapper(*hashable_args, **hashable_kwargs) + + @functools.lru_cache(*args, **kwargs) + def cached_wrapper(*hashable_args, **hashable_kwargs): + args = [_undo_make_hashable(arg) for arg in hashable_args] + kwargs = {k: _undo_make_hashable(v) for k, v in hashable_kwargs.items()} + return function(*args, **kwargs) + + return wrapper + + return decorator + + +class _HashableNumpyArray: + """Simple wrapper that makes Numpy arrays hashable.""" + + def __init__(self, array: np.ndarray): + self.array = array + self._bytes = array.data.tobytes() + + def __hash__(self): + return hash(self._bytes) + + def __eq__(self, other): + return isinstance(other, type(self)) and self._bytes == other._bytes + + +def _make_hashable(x): + return _HashableNumpyArray(x) if isinstance(x, np.ndarray) else x + + +def _undo_make_hashable(x): + return x.array if isinstance(x, _HashableNumpyArray) else x diff --git a/scenic/projects/owl_vit/notebooks/plotting.py b/scenic/projects/owl_vit/notebooks/plotting.py new file mode 100644 index 0000000000000000000000000000000000000000..1fb09be0c4ddc6c9f3d981217eedac69169c9c58 --- /dev/null +++ b/scenic/projects/owl_vit/notebooks/plotting.py @@ -0,0 +1,194 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""OWL-ViT notebool plotting functions.""" +import bokeh +from bokeh import events +from bokeh import layouts +from bokeh import models +from bokeh import plotting +from bokeh.models import widgets +import numpy as np +from scenic.model_lib.base_models import box_utils +from scenic.projects.owl_vit.notebooks import interactive + + +def create_text_conditional_figure(image: np.ndarray, + boxes: np.ndarray, + fig_size: int = 900) -> layouts.LayoutDOM: + """Creates a Bokeh figure for interactive text-conditional detection. + + Args: + image: Image to detect objects in. + boxes: All predicted boxes for the image, in [cx, cy, w, h] format. + fig_size: Size of the Bokeh figure in pixels. + + Returns: + The Bokeh layout of the figure. + """ + plot = _create_image_figure(image, fig_size) + box_data_source = _plot_boxes(plot, boxes) + plot_width = plot.width if bokeh.__version__ >= '3.0.3' else plot.plot_width + + # Create div that will display the query legend: + legend = widgets.Div(text='', height=30, width=plot_width - 35) + + # Create text input and register callback: + text_input = widgets.TextInput( + value='', + title='Enter comma-separated queries:', + width=plot_width - 35) + text_input.js_on_change( + 'value_input', + interactive.get_text_input_js_callback(box_data_source, legend)) + + # Assemble and show figure: + layout = layouts.column(text_input, legend, plot) + plotting.show(layout) + + return layout + + +def create_image_conditional_figure(query_image: np.ndarray, + target_image: np.ndarray, + target_boxes: np.ndarray, + fig_size: int = 600) -> layouts.LayoutDOM: + """Creates a Bokeh figure for interactive image-conditional detection. + + Args: + query_image: Image from which the query box will be selected. + target_image: Image in which to detect objects. + target_boxes: Predicted boxes for the target image ([cx, cy, w, h] format). + fig_size: Size of the Bokeh figure in pixels. + + Returns: + The Bokeh layout of the figure. + """ + source_plot = _create_image_figure( + query_image, fig_size, title='Query image', tools='box_select') + target_plot = _create_image_figure( + target_image, fig_size, title='Target image') + pred_box_data_source = _plot_boxes(target_plot, target_boxes) + + # Source selection code: + user_query_rect = models.Rect( + x='x', + y='y', + width='width', + height='height', + line_color='#00ff00', + line_width=3, + fill_alpha=0.1, + fill_color='#00ff00') + user_query_box_data_source = models.ColumnDataSource( + data=dict(x=(-1,), y=(-1,), width=(0,), height=(0,))) + source_plot.add_glyph( + user_query_box_data_source, + user_query_rect, + selection_glyph=user_query_rect, + nonselection_glyph=user_query_rect) + model_query_rect = models.Rect( + x='x', + y='y', + width='width', + height='height', + line_color='#ff0000', + line_width=3, + fill_alpha=0.1, + fill_color='#ff0000') + model_query_box_data_source = models.ColumnDataSource( + data=dict(x=(-1,), y=(-1,), width=(0,), height=(0,))) + source_plot.add_glyph( + model_query_box_data_source, + model_query_rect, + selection_glyph=model_query_rect, + nonselection_glyph=model_query_rect) + + # Register box selection callback: + callback = interactive.get_image_conditioning_js_callback( + user_query_box_data_source=user_query_box_data_source, + model_query_box_data_source=model_query_box_data_source, + pred_box_data_source=pred_box_data_source) + source_plot.js_on_event(events.SelectionGeometry, callback) + + layout = layouts.row(source_plot, target_plot) + plotting.show(layout) + + return layout + + +def _create_image_figure(image: np.ndarray, + fig_size: int = 900, + title: str = '', + tools: str = '') -> plotting.figure: + """Creates a Bokeh figure showing an image.""" + # Determine relative width and height from padding. We assume that padding is + # added on the bottom or right and has value 0.5: + width = np.mean(np.any(image[..., 0] != 0.5, axis=0)) + height = np.mean(np.any(image[..., 0] != 0.5, axis=1)) + plot_width = int(width * fig_size) + plot_height = int(height * fig_size) + if bokeh.__version__ >= '3.0.3': + plot_size_kws = {'width': plot_width, 'height': plot_height} + else: + plot_size_kws = {'plot_width': plot_width, 'plot_height': plot_height} + plot = plotting.figure( + title=title, + x_range=[0., width], + y_range=[height, 0.], + tools=tools, + **plot_size_kws) + plot.axis.visible = False + plot.toolbar.logo = None + image = _bokeh_format_image(image) + if bokeh.__version__ >= '3.0.3': + plot.image_rgba(image=[image], x=0., y=0., dw=1., dh=1.) + else: + plot.image_rgba(image=[image], x=0., y=1., dw=1., dh=1.) + return plot + + +def _plot_boxes(plot: plotting.figure, + boxes: np.ndarray, + line_width: float = 3, + initial_color: str = '#00000000') -> models.ColumnDataSource: + """Adds boxes to the provided Bokeh plot.""" + xs = [] + ys = [] + colors = [] + boxes = box_utils.box_cxcywh_to_yxyx(boxes, np) + for box in boxes: + y0, x0, y1, x1 = box + xs.append([x0, x1, x1, x0, x0]) + ys.append([y1, y1, y0, y0, y1]) + colors.append(initial_color) + box_data_source = models.ColumnDataSource( + data=dict(xs=xs, ys=ys, colors=colors)) + plot.multi_line( + source=box_data_source, + xs='xs', + ys='ys', + line_color='colors', + line_width=line_width) + return box_data_source + + +def _bokeh_format_image(image): + """Formats an RGB image (range [0.0, 1.0], shape [H, W, 3]) for bokeh.""" + # Add alpha layer: + image = np.concatenate((image, np.ones_like(image[..., :1])), axis=-1) + image = image * 255 + if bokeh.__version__ < '3.0.3': + image = np.flipud(image) + return image.astype(np.uint8).view(np.uint32).reshape(image.shape[:2]) diff --git a/scenic/projects/owl_vit/notebooks/tests/__init__.py b/scenic/projects/owl_vit/notebooks/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/owl_vit/notebooks/tests/inference_test.py b/scenic/projects/owl_vit/notebooks/tests/inference_test.py new file mode 100644 index 0000000000000000000000000000000000000000..55004b3d2633d947cd9cceecd3040e30c56c646f --- /dev/null +++ b/scenic/projects/owl_vit/notebooks/tests/inference_test.py @@ -0,0 +1,112 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for inference.""" + +from unittest import mock + +from absl.testing import absltest +import chex +import jax +import jax.numpy as jnp +import numpy as np +from scenic.projects.owl_vit import models +from scenic.projects.owl_vit.configs import clip_b32 +from scenic.projects.owl_vit.notebooks import inference + + +def _mock_tokenize(text, max_len): + del text + return np.zeros((max_len,), dtype=np.int32) + + +class InferenceTest(absltest.TestCase): + + def setUp(self): + config = clip_b32.get_config(init_mode='canonical_checkpoint') + config.dataset_configs.input_size = 128 + module = models.TextZeroShotDetectionModule( + body_configs=config.model.body, + normalize=config.model.normalize, + box_bias=config.model.box_bias) + rng = jax.random.PRNGKey(0) + image = jnp.zeros((1, 128, 128, 3), dtype=jnp.float32) + text_queries = jnp.zeros((1, 5, config.dataset_configs.max_query_length), + dtype=jnp.int32) + variables = module.init(rng, image, text_queries, train=False) + self.model = inference.Model(config, module, variables) + self.num_instances = (config.dataset_configs.input_size // 32) ** 2 + super().setUp() + + self.enter_context( + mock.patch.object( + target=models.clip_tokenizer, + attribute='tokenize', + autospec=True, + side_effect=_mock_tokenize)) + + def test_warm_up(self): + """Tests that the model can be compiled and run a forward pass.""" + self.model.warm_up() + + def test_preprocess_image(self): + image = np.zeros((100, 50, 3), dtype=np.uint8) + processed = self.model.preprocess_image(image) + self.assertEqual(processed.dtype, np.float32) + input_size = self.model.config.dataset_configs.input_size + chex.assert_shape(processed, (input_size, input_size, 3)) + + def test_embed_image(self): + image = np.zeros((100, 50, 3), dtype=np.uint8) + (image_features, image_class_embeddings, + pred_boxes) = self.model.embed_image(image) + + self.assertIsInstance(image_features, np.ndarray) + self.assertIsInstance(image_class_embeddings, np.ndarray) + self.assertIsInstance(pred_boxes, np.ndarray) + + chex.assert_shape(image_features, (self.num_instances, 768)) + chex.assert_shape(image_class_embeddings, (self.num_instances, 512)) + chex.assert_shape(pred_boxes, (self.num_instances, 4)) + + def test_embed_text_queries(self): + queries = ('query1', 'query2', '') + query_embeddings = self.model.embed_text_queries(queries) + self.assertIsInstance(query_embeddings, np.ndarray) + chex.assert_shape(query_embeddings, (inference.QUERY_PAD_BIN_SIZE, 512)) + + def test_embed_image_query(self): + image = np.zeros((100, 50, 3), dtype=np.uint8) + box = (0.4, 0.4, 0.5, 0.5) + query_embedding, box_ind = self.model.embed_image_query(image, box) + self.assertIsInstance(query_embedding, np.ndarray) + chex.assert_shape(query_embedding, (512,)) + chex.assert_shape(box_ind, ()) + + def test_get_scores(self): + image = np.zeros((100, 50, 3), dtype=np.uint8) + query_embeddings = np.zeros((inference.QUERY_PAD_BIN_SIZE, 512)) + num_queries = 3 + top_query_ind, scores = self.model.get_scores( + image, query_embeddings, num_queries) + + self.assertIsInstance(top_query_ind, np.ndarray) + self.assertIsInstance(scores, np.ndarray) + + chex.assert_shape(top_query_ind, (self.num_instances,)) + chex.assert_shape(scores, (self.num_instances,)) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/owl_vit/notebooks/tests/interactive_test.py b/scenic/projects/owl_vit/notebooks/tests/interactive_test.py new file mode 100644 index 0000000000000000000000000000000000000000..0417b82def8c760564a34fce06bd332217f6ca83 --- /dev/null +++ b/scenic/projects/owl_vit/notebooks/tests/interactive_test.py @@ -0,0 +1,95 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for interactive.""" + +from unittest import mock + +from absl.testing import absltest +from bokeh.models import callbacks as bk_callbacks +import numpy as np +from scenic.projects.owl_vit.notebooks import interactive + + +def _mock_tokenize(text, max_len): + del text + return np.zeros((max_len,), dtype=np.int32) + + +class InteractiveTest(absltest.TestCase): + + def test_register_text_input_callback(self): + model = mock.Mock() + model.embed_text_queries = mock.Mock( + return_value=np.zeros((50, 512), dtype=np.int32)) + model.get_scores = mock.Mock( + return_value=(np.array([0, 1]), np.array([0.9, 0.0]))) + + colab_output = mock.Mock() + + interactive.register_text_input_callback( + model=model, + image=np.zeros((128, 64, 3), dtype=np.uint8), + colab_output=colab_output, + ) + + name, callback = colab_output.register_callback.call_args[0] + + self.assertEqual(name, interactive.TEXT_INPUT_PY_CALLBACK_NAME) + + expected_callback_out = ( + '{"color_updates": [[0, "#ff0003ff"], [1, "#008cff00"]], ' + '"legend_text_b64": "UXVlcmllczogPHNwYW4gc3R5bGU9ImNvbG9yOiAjZmYwMDAzOy' + 'Bmb250LXNpemU6IDE0cHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyI+cXVlcnkxPC9zcGFuPiwg' + 'PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA4Y2ZmOyBmb250LXNpemU6IDE0cHQ7IGZvbnQtd2' + 'VpZ2h0OiBib2xkOyI+cXVlcnkyPC9zcGFuPg=="}') + self.assertEqual(callback('query1, query2'), expected_callback_out) + + def test_get_text_input_js_callback(self): + out = interactive.get_text_input_js_callback( + data_source=mock.Mock(), legend=mock.Mock()) + self.assertIsInstance(out, bk_callbacks.CustomJS) + + def test_image_conditioning_py_callback(self): + model = mock.Mock() + model.embed_image = mock.Mock(return_value=(None, None, np.zeros((2, 4)))) + model.embed_image_query = mock.Mock( + return_value=(np.zeros(512), np.zeros((), dtype=np.int32))) + model.get_scores = mock.Mock( + return_value=(np.array([0, 1]), np.array([0.9, 0.0]))) + + out = interactive._image_conditioning_py_callback( + {'x0': 0.1, 'x1': 0.2, 'y0': 0.3, 'y1': 0.4}, + model=model, + query_image=np.zeros((128, 64, 3), dtype=np.uint8), + target_image=np.zeros((128, 128, 3), dtype=np.uint8)) + + expected_out = ( + '{"color_updates": [[0, "#ff0003ff"], [1, "#008cff00"]], ' + '"selected_box": {"x": 0.0, "y": 0.0, "w": 0.0, "h": 0.0}}' + ) + + self.assertEqual(out, expected_out) + + def test_get_image_conditioning_js_callback(self): + out = interactive.get_image_conditioning_js_callback( + user_query_box_data_source=mock.Mock(), + model_query_box_data_source=mock.Mock(), + pred_box_data_source=mock.Mock(), + ) + self.assertIsInstance(out, bk_callbacks.CustomJS) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/owl_vit/notebooks/tests/numpy_cache_test.py b/scenic/projects/owl_vit/notebooks/tests/numpy_cache_test.py new file mode 100644 index 0000000000000000000000000000000000000000..c7884ef472ab6ded72ce84ad0237eef29792fd2f --- /dev/null +++ b/scenic/projects/owl_vit/notebooks/tests/numpy_cache_test.py @@ -0,0 +1,70 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for numpy_cache.""" + +from absl.testing import absltest +import numpy as np +from scenic.projects.owl_vit.notebooks import numpy_cache + + +class NumpyCacheTest(absltest.TestCase): + + def test_caching(self): + """Tests that the function code is called only once for the same input.""" + + side_effects = 0 + + @numpy_cache.lru_cache(maxsize=10) + def cached_function(a): + nonlocal side_effects + side_effects += 1 + return a + + self.assertEqual(side_effects, 0) + + _ = cached_function(np.zeros(1)) + self.assertEqual(side_effects, 1) + + _ = cached_function(np.ones(1)) + self.assertEqual(side_effects, 2) + + _ = cached_function(np.zeros(1)) + self.assertEqual(side_effects, 2) + + def test_non_numpy_args(self): + """Tests that non-Numpy arguments are passed through correctly.""" + + @numpy_cache.lru_cache(maxsize=1) + def cached_function(a): + return a + + arg = ('test',) + out = cached_function(arg) + self.assertEqual(out, arg) + + def test_kwargs(self): + """Tests that keyword arguments are passed through correctly.""" + + @numpy_cache.lru_cache(maxsize=1) + def cached_function(*, a, b): + return a, b + + a, b = cached_function(b='b', a='a') + self.assertEqual(a, 'a') + self.assertEqual(b, 'b') + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/owl_vit/notebooks/tests/plotting_test.py b/scenic/projects/owl_vit/notebooks/tests/plotting_test.py new file mode 100644 index 0000000000000000000000000000000000000000..3e23c030851b4199f2072170da1f93bf3c433ef1 --- /dev/null +++ b/scenic/projects/owl_vit/notebooks/tests/plotting_test.py @@ -0,0 +1,39 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for plotting.""" + +from absl.testing import absltest +from bokeh import layouts as bk_layouts +import numpy as np +from scenic.projects.owl_vit.notebooks import plotting + + +class PlottingTest(absltest.TestCase): + + def test_create_text_conditional_figure(self): + out = plotting.create_text_conditional_figure( + image=np.zeros((128, 64, 3), dtype=np.uint8), boxes=np.zeros((5, 4))) + self.assertIsInstance(out, bk_layouts.LayoutDOM) + + def test_create_image_conditional_figure(self): + out = plotting.create_image_conditional_figure( + query_image=np.zeros((128, 64, 3), dtype=np.uint8), + target_image=np.zeros((128, 128, 3), dtype=np.uint8), + target_boxes=np.zeros((5, 4))) + self.assertIsInstance(out, bk_layouts.LayoutDOM) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/owl_vit/preprocessing/__init__.py b/scenic/projects/owl_vit/preprocessing/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..753def1c08aecb50a7a36bae2058eb16f5849c25 --- /dev/null +++ b/scenic/projects/owl_vit/preprocessing/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + diff --git a/scenic/projects/owl_vit/preprocessing/image_ops.py b/scenic/projects/owl_vit/preprocessing/image_ops.py new file mode 100644 index 0000000000000000000000000000000000000000..68494c6bf44bff8a698022c2e501aebc270a4089 --- /dev/null +++ b/scenic/projects/owl_vit/preprocessing/image_ops.py @@ -0,0 +1,748 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Preprocessing ops for RGB images. + +Unless otherwise mentioned images should be [h, w, 3] with pixel values as +tf.float32 in range [0, 1]. Bounding boxes are [num_objects, 4] in tf.float32 in +range [0, 1]. +""" +import abc +import dataclasses +from typing import Optional, Sequence, Tuple, Union + +from clu import preprocess_spec +from scenic.projects.owl_vit.preprocessing import modalities +from scenic.projects.owl_vit.preprocessing import transforms +import tensorflow as tf + +Features = preprocess_spec.Features +SEED_KEY = preprocess_spec.SEED_KEY + +all_ops = lambda: preprocess_spec.get_all_ops(__name__) + +FEATURES_WITH_FIRST_INSTANCE_AXIS = [ + modalities.ANNOTATION_ID, + modalities.AREA, + modalities.BOXES, + modalities.CROWD, + modalities.INSTANCE_LABELS, + modalities.INSTANCE_MULTI_LABELS, + modalities.INSTANCE_TEXT_LABELS, + modalities.INSTANCE_TEXT_MULTI_LABELS, +] + +FEATURES_WITH_NO_INSTANCE_AXIS = [ + modalities.IMAGE_ID, + modalities.IMAGE, + modalities.NEGATIVE_LABELS, + modalities.NEGATIVE_TEXT_LABELS, + modalities.NOT_EXHAUSTIVE_LABELS, + modalities.ORIGINAL_SIZE, + modalities.TEXT_QUERIES_TOKENIZED, + modalities.TEXT_QUERIES, + SEED_KEY, +] + + +class ImagePreprocessOp(abc.ABC): + """Base class for all image preprocess ops.""" + + image_key: str = modalities.IMAGE # tf.float32 in [0, 1] + boxes_key: str = modalities.BOXES # tf.float32 in [0, 1] + + def __call__(self, features: Features) -> Features: + + # Copy input features to ensure that they are not accidentally modified in + # place: + features = dict(features) + + # Apply to images: + image_size = None + if self.image_key in features: + image_size = transforms.get_dynamic_size(features[self.image_key]) + features[self.image_key] = self.apply(features[self.image_key]) + + # Apply to boxes: + if self.boxes_key in features: + if image_size is None: + raise ValueError( + "When providing box features, image features are also required, so " + "that the image size can be computed.") + features[self.boxes_key] = self.apply_boxes(features[self.boxes_key], + image_size) + + return features + + @abc.abstractmethod + def apply(self, image: tf.Tensor) -> tf.Tensor: + """Returns transformed image.""" + pass + + def apply_boxes(self, boxes: tf.Tensor, + image_size: transforms.SizeTuple) -> tf.Tensor: + """Returns transformed boxes.""" + raise NotImplementedError( + f"{self.__class__.__name__} is not implemented for bounding boxes.") + + @staticmethod + def _get_instance_axis(feature_key): + """Looks up the axis storing object instances for a given feature.""" + if feature_key in FEATURES_WITH_FIRST_INSTANCE_AXIS: + return 0 + elif feature_key in FEATURES_WITH_NO_INSTANCE_AXIS: + return None + else: + raise ValueError( + f"Please specify instance axis for feature key {feature_key}.") + + +class RandomImagePreprocessOp(ImagePreprocessOp): + """Base class for image ops that require a random seed.""" + + def __call__(self, features: Features) -> Features: + # Copy input features to ensure that they are not accidentally modified in + # place: + features = dict(features) + + if SEED_KEY not in features: + raise ValueError( + f"Random image preprocess op {type(self)} requires a random seed.") + image_size = transforms.get_dynamic_size(features[self.image_key]) + rngs = tf.random.experimental.stateless_split(features[SEED_KEY]) + features[SEED_KEY] = rngs[0] + op_seed = rngs[1] + features[self.image_key] = self.apply(features[self.image_key], op_seed) + if self.boxes_key in features: + features[self.boxes_key] = self.apply_boxes( + features[self.boxes_key], image_size=image_size, seed=op_seed) + return features + + @abc.abstractmethod + def apply(self, image: tf.Tensor, seed: tf.Tensor) -> tf.Tensor: # pytype: disable=signature-mismatch + """Return the transformed image. The op can consume the seed.""" + pass + + def apply_boxes(self, boxes: tf.Tensor, *, image_size: transforms.SizeTuple, # pytype: disable=signature-mismatch + seed: tf.Tensor) -> tf.Tensor: + """Returns transformed boxes.""" + raise NotImplementedError( + f"{self.__class__.__name__} is not implemented for bounding boxes.") + + +def _stateless_bernoulli_trial(seed: tf.Tensor, p: float = 0.5) -> tf.Tensor: + return tf.greater(tf.random.stateless_uniform([], seed), p) + + +@dataclasses.dataclass(frozen=True) +class RandomFlipLeftRight(RandomImagePreprocessOp): + """Randomly flips an image horizontally (left to right).""" + + def apply(self, image: tf.Tensor, seed: tf.Tensor) -> tf.Tensor: + return tf.cond( + _stateless_bernoulli_trial(seed, p=0.5), + lambda: tf.identity(image), + lambda: tf.image.flip_left_right(image), + ) + + def apply_boxes(self, boxes: tf.Tensor, *, image_size: transforms.SizeTuple, + seed: tf.Tensor) -> tf.Tensor: + del image_size + y_min, x_min, y_max, x_max = tf.split(boxes, 4, axis=-1) + # To flip the boxes, swap the x coordinates and subtract them from 1: + x_min, x_max = 1.0 - x_max, 1.0 - x_min + flipped_boxes = tf.concat([y_min, x_min, y_max, x_max], axis=-1) + return tf.cond( + _stateless_bernoulli_trial(seed, p=0.5), + lambda: tf.identity(boxes), + lambda: flipped_boxes, + ) + + +class RandomCropBase(RandomImagePreprocessOp): + """Randomly crops an image based on self._sample_random_crop_region.""" + + def __call__(self, features: Features) -> Features: + new_features = super().__call__(dict(features)) + return self._drop_degenerate_features(new_features, features) + + def apply(self, image: tf.Tensor, seed: tf.Tensor) -> tf.Tensor: + image_shape = tf.shape(image) + begin, size = self._sample_random_crop_region( + image_shape=image_shape, seed=seed) + + (offset_y, offset_x, crop_height, crop_width + ) = transforms.get_padding_params_from_crop_slice(begin, size) + begin, size = transforms.get_within_bounds_crop_slice( + begin, size, image_shape) + + image = tf.slice(image, begin, size) # Slice. + image = tf.image.pad_to_bounding_box( # Maybe pad. + image, offset_height=offset_y, offset_width=offset_x, + target_height=crop_height, target_width=crop_width) + + return tf.ensure_shape(image, (None, None, 3)) + + def apply_boxes(self, boxes: tf.Tensor, *, image_size: transforms.SizeTuple, + seed: tf.Tensor) -> tf.Tensor: + image_shape = tf.concat([image_size, [1]], axis=0) + begin, size = self._sample_random_crop_region( + image_shape=image_shape, seed=seed) + top, left, _ = tf.unstack(begin) + h, w, _ = tf.unstack(size) + return transforms.crop_or_pad_boxes( + boxes, + top=top, + left=left, + height=h, + width=w, + h_orig=image_size[0], + w_orig=image_size[1]) + + def _drop_degenerate_features( + self, features: Features, orig_features: Optional[Features] = None + ) -> Features: + """Drops degenerate (e.g. cropped out) boxes.""" + # Find degenerate boxes (i.e. boxes which have been cropped out of the + # image). + keep = [] + if self.boxes_key in features: + # Keep boxes whose area is greater than 0: + rel_area = transforms.get_box_area(features[self.boxes_key]) + keep.append(rel_area > 0.0) + + if (hasattr(self, "min_area_fraction") and orig_features is not None): + area = transforms.get_box_area( + features[self.boxes_key], + transforms.get_dynamic_size(features[self.image_key])) + orig_area = transforms.get_box_area( + orig_features[self.boxes_key], + transforms.get_dynamic_size(orig_features[self.image_key])) + + area_left = area / (orig_area + 1e-8) + keep.append(area_left >= self.min_area_fraction) + + # If there are no boxes there are no degenerate objects to filter out. + if not keep: + return features + + # Keep instances for which all features are non-degenerate: + keep = tf.reduce_all(tf.stack(keep, axis=0), axis=0) + + # Only keep non-degenerate instances: + for key, feature in features.items(): + axis = self._get_instance_axis(key) + if axis is not None: + if axis == 0: + features[key] = feature[keep] + else: + raise NotImplementedError("Instances must be along leading axis.") + + return features + + def _sample_random_crop_region( + self, + *, + image_shape: tf.TensorShape, + seed: tf.Tensor, + ) -> Tuple[tf.Tensor, tf.Tensor]: + """Randomly samples a crop region (bounding box) for random cropping. + + The region is represented as two tensors, `begin` and `size`, which can be + passed directly to tf.slice to slice the sampled region from the original + image. + + Args: + image_shape: Shape of the image (height, width, channels) from which crops + will be taken. + seed: Random seed for tf.image.stateless_sample_distorted_bounding_box. + + Returns: + Two tensors, begin and size, which can be passed directly to tf.slice. + """ + raise NotImplementedError(f"{self.__class__.__name__} is not implemented.") + + +@dataclasses.dataclass(frozen=True) +class RandomCrop(RandomCropBase): + """Randomly crops an image. + + Attr: + aspect_ratio_range: An optional tuple of `floats`. The cropped area of the + image must have an aspect `ratio = width / height` within this range. + area_range: An optional tuple of `floats`. The cropped area of the image + must contain a fraction of the supplied image within this range. + min_area_fraction: Bounding boxes will be removed if their area is less than + min_area_fraction after cropping. + """ + + aspect_ratio_range: Tuple[float, float] = (0.75, 1.33) + area_range: Tuple[float, float] = (0.3, 1.0) + min_area_fraction: float = 0.0 + + def _sample_random_crop_region( + self, + *, + image_shape: tf.TensorShape, + seed: tf.Tensor, + ) -> Tuple[tf.Tensor, tf.Tensor]: + """Randomly samples a crop region (bounding box).""" + return tf.image.stateless_sample_distorted_bounding_box( + image_shape, + tf.zeros([0, 0, 4], tf.float32), + seed=seed, + area_range=self.area_range, + aspect_ratio_range=self.aspect_ratio_range, + min_object_covered=0, # Don't enforce a minimum area. + use_image_if_no_bounding_boxes=True)[:2] + + +@dataclasses.dataclass(frozen=True) +class Keep(): + """Keeps only the given keys.""" + + keys: Sequence[str] + + def __call__(self, features: Features) -> Features: + return {k: v for k, v in features.items() if k in self.keys} + + +@dataclasses.dataclass(frozen=True) +class Drop(): + """Drops the given keys.""" + + keys: Sequence[str] + ignore_missing_features: bool = False + + def __call__(self, features: Features) -> Features: + if not self.ignore_missing_features: + for k in self.keys: + if k not in features: + raise ValueError( + f"Could not drop features '{k}'. Available features:" + f" {list(features)}" + ) + return {k: v for k, v in features.items() if k not in self.keys} + + +@dataclasses.dataclass(frozen=True) +class ResizeWithPad(ImagePreprocessOp): + """Resizes image to a given size, adding padding to perserve the aspect ratio. + + Padding is added on the bottom and right. + + Attr: + size: The new size of the image: either an integer H, where H is both the + new height and width, or a tuple or list [H, W] of integers, where H and W + are new image's height and width respectively. + pad_value: Value to use for padding. + antialias: Whether to use an anti-aliasing filter when downsampling an + image. + """ + + size: Union[int, Tuple[int, int], Sequence[int]] + pad_value: float = 0.5 + antialias: bool = False + + def _resize_image(self, + image, + pad_value, + method=tf.image.ResizeMethod.BILINEAR): + """Applies the appropriate TF resizing function.""" + size = self.size + if isinstance(size, int): + size = (size, size) + dtype = image.dtype + num_channels = image.shape[-1] + + # Resize the image to fit into target size, while keeping aspect ratio: + in_height, in_width = transforms.get_dynamic_size(image, tf.float32) + ratio = tf.maximum(in_height / float(size[0]), in_width / float(size[1])) + fit_height = tf.cast(tf.minimum(in_height / ratio, size[0]), tf.int32) + fit_width = tf.cast(tf.minimum(in_width / ratio, size[1]), tf.int32) + image = tf.image.resize( + image, [fit_height, fit_width], method=method, antialias=self.antialias) + + # Pad to the same aspect ratio as the desired size: + paddings = transforms.get_paddings(tf.shape(image), size) + image = tf.pad(image, paddings, mode="CONSTANT", constant_values=pad_value) + image.set_shape(image.shape[:-3] + tuple(size) + (num_channels,)) + return tf.cast(image, dtype) + + def apply(self, image: tf.Tensor) -> tf.Tensor: + return self._resize_image(image, pad_value=self.pad_value) + + def apply_boxes(self, boxes: tf.Tensor, + image_size: transforms.SizeTuple) -> tf.Tensor: + transforms.assert_boxes_are_relative(boxes) + + # Get relative image size before padding (w.r.t. padded output image): + h_orig, w_orig = image_size + long_edge = tf.maximum(h_orig, w_orig) + h_rel = h_orig / long_edge + w_rel = w_orig / long_edge + + # Pad the boxes to the output size: + padded_size = self.size + if isinstance(padded_size, int): + padded_size = (padded_size, padded_size) + return transforms.crop_or_pad_boxes( + boxes=boxes, + top=0, + left=0, + height=padded_size[0], + width=padded_size[1], + h_orig=tf.cast(h_rel * padded_size[0], h_orig.dtype), + w_orig=tf.cast(w_rel * padded_size[1], w_orig.dtype)) + + +@dataclasses.dataclass(frozen=True) +class CropOrPad(ImagePreprocessOp): + """Crops or pads the features to have uniform shapes.""" + + # Height and width. Only does spatial cropping or padding if set. + size: Optional[int] + num_instances: int + allow_crop: bool = True + + def apply(self, image: tf.Tensor) -> tf.Tensor: + if self.size is None: + return image + + c = image.shape[-1] + paddings = transforms.get_paddings( + tf.shape(image), self.size, allow_crop=self.allow_crop) + image = tf.pad(image, paddings, constant_values=0) + if self.allow_crop: + image = image[:self.size, :self.size, :] + image.set_shape((self.size, self.size, c)) + return image + return image + + def apply_boxes(self, boxes: tf.Tensor, + image_size: transforms.SizeTuple) -> tf.Tensor: + if self.size is not None: + # Pad and crop the spatial dimensions: + if self.allow_crop: + # After cropping, the image shape is always [self.size, self.size]: + processed_image_size = [self.size, self.size] + else: + # If only padding is performed, the image size is at least self.size: + processed_image_size = tf.maximum(image_size, self.size) + boxes = transforms.crop_or_pad_boxes( + boxes, + top=0, + left=0, + height=processed_image_size[0], + width=processed_image_size[1], + h_orig=image_size[0], + w_orig=image_size[1]) + + # Pad or crop the number of instances: + paddings = [[0, self.num_instances - tf.shape(boxes)[0]], [0, 0]] + if self.allow_crop: + paddings = tf.maximum(paddings, 0) + boxes = tf.pad(boxes, tf.stack(paddings), constant_values=-1.0) + if self.allow_crop: + boxes = boxes[:self.num_instances] + boxes.set_shape((self.num_instances, 4)) + return boxes + + +@dataclasses.dataclass(frozen=True) +class CropOrPadMetaData(): + """Crops or pads all label and meta-data features to have uniform shapes.""" + + num_instances: int + image_multilabels: int + allow_crop: bool = True + + negative_labels_key: str = modalities.NEGATIVE_LABELS + negative_text_labels_key: str = modalities.NEGATIVE_TEXT_LABELS + not_exhaustive_labels_key: str = modalities.NOT_EXHAUSTIVE_LABELS + instance_labels_key: str = modalities.INSTANCE_LABELS + instance_multi_labels_key: str = modalities.INSTANCE_MULTI_LABELS + instance_text_labels_key: str = modalities.INSTANCE_TEXT_LABELS + crowds_key: str = modalities.CROWD + annotation_id_key: str = modalities.ANNOTATION_ID + area_key: str = modalities.AREA + + def __call__(self, features: Features) -> Features: + image_scalar_sequences = [ + self.negative_labels_key, self.negative_text_labels_key, + self.not_exhaustive_labels_key + ] + instance_scalar_sequences = [ + self.instance_text_labels_key, self.area_key, self.crowds_key, + self.annotation_id_key, self.instance_labels_key, + self.instance_multi_labels_key + ] + for key in image_scalar_sequences: + if key in features: + features[key] = transforms.crop_or_pad_sequence(features[key], + self.image_multilabels, + self.allow_crop) + for key in instance_scalar_sequences: + if key in features: + features[key] = transforms.crop_or_pad_sequence(features[key], + self.num_instances, + self.allow_crop) + return features + + +@dataclasses.dataclass(frozen=True) +class MergeOverlappingInstances: + """Merge labels of instances with similar bounding boxes. + + This is useful when data contains multiple non-disjoint labels per instance + (e.g. in federated datasets, when bounding boxes for specified labels are + annotated independently of each other). + + Box similarity is assessed using the IoU (Intersetion over Union) metric. See + `transforms.box_iou` for details. + + Attributes: + iou_threshold: Box IoU threshold used to determine whether two instances + should be merged. + eps: Small float number used for numerical stability when computing IoU. + label_feature_keys: Sequence of instance label modalities that should be + merged. Note that these should be multi-label modalities. + """ + iou_threshold: float = 0.95 + eps: float = 1e-6 + + label_feature_keys: Sequence[str] = ( + modalities.INSTANCE_TEXT_MULTI_LABELS, modalities.INSTANCE_MULTI_LABELS) + + def __call__(self, features: Features) -> Features: + """Iteratively merge instances with bbox IoU above a preset threshold.""" + + def _compute_masked_iou(boxes): + iou, _ = transforms.box_iou(boxes, boxes, eps=self.eps) + # Mask comparison to self. + iou = tf.where(tf.eye(tf.shape(iou)[0], dtype=tf.bool), 0., iou) + return iou + + def _has_boxes_to_merge(boxes, labels, iou, rng): + del boxes, labels, rng + max_iou = tf.reduce_max(iou) + return tf.greater_equal(max_iou, self.iou_threshold) + + def _merge_boxes(boxes, labels, iou, rng): + ind = tf.unravel_index( # Indices [i, j] of the two most similar boxes. + tf.cast(tf.argmax(tf.reshape(iou, (-1,))), tf.int32), + tf.shape(iou)) + + # Merge labels of the two boxes; do not pay attention to possible + # label collisions. + labels_merged = tf.nest.map_structure( + lambda lab: tf.gather(lab, ind).flat_values, labels) + + # Pick one box randomly. + rngs = tf.random.experimental.stateless_split(rng) + rng, new_rng = rngs[0], rngs[1] + boxes_merged = tf.gather(boxes, ind) + choice = tf.greater(tf.random.stateless_uniform([], rng), .5) + boxes_merged = tf.where(choice, boxes_merged[0], boxes_merged[1]) + + # Updated labels and boxes based on the merge. Tensors will be merged + # using a gather. Prepare gather indices below. + num_instances = tf.shape(boxes)[0] + i, j = tf.reduce_min(ind), tf.reduce_max(ind) + ind_all = tf.range(num_instances) + ind_no_j = ind_all[ind_all != j] + ind = tf.where(ind_no_j == i, num_instances, ind_no_j) + def _merge_tensors(tensor, merged_value): + tensor = tf.concat([tensor, tf.expand_dims(merged_value, 0)], axis=0) + return tf.gather(tensor, ind) + + boxes = _merge_tensors(boxes, boxes_merged) + labels = tf.nest.map_structure(_merge_tensors, labels, labels_merged) + + # Finally, update iou for the next iteration. + iou = _compute_masked_iou(boxes) + + return (boxes, labels, iou, new_rng) + + if SEED_KEY not in features: + raise ValueError("Merged box choice requires a random seed.") + + rng = features[preprocess_spec.SEED_KEY] + + boxes = features[modalities.BOXES] + max_instances = tf.shape(boxes)[0] + not_padding = tf.reduce_any(boxes != -1, axis=-1) + boxes = boxes[not_padding] + + # Prepare (ragged) label tensors. This simplifies label merging logic. + def to_ragged(x: tf.Tensor) -> tf.RaggedTensor: + x = x[not_padding] + lengths = tf.reduce_sum( + tf.cast(tf.not_equal(x, transforms.get_padding_value(x.dtype)), + tf.int32), axis=-1) + return tf.RaggedTensor.from_tensor(x, lengths) + + orig_labels = {} + for name in self.label_feature_keys: + if name in features: + orig_labels[name] = features[name] + labels = tf.nest.map_structure(to_ragged, orig_labels) + + state = (boxes, labels, _compute_masked_iou(boxes), rng) + boxes, labels, _, rng = tf.while_loop( + _has_boxes_to_merge, + _merge_boxes, + state, + parallel_iterations=1, + back_prop=False) + + features_new = dict(features) + + features_new[preprocess_spec.SEED_KEY] = rng + + # Pad boxes to original shape. + features_new[modalities.BOXES] = tf.pad( + boxes, + [(0, max_instances - tf.shape(boxes)[0]), (0, 0)], + constant_values=-1) + + # Convert ragged to normal tensor. + def to_tensor(labels, orig_labels): + return labels.to_tensor( + default_value=transforms.get_padding_value(orig_labels.dtype), + shape=tf.shape(orig_labels)) + labels = tf.nest.map_structure(to_tensor, labels, orig_labels) + features_new.update(labels) + return features_new + + +@dataclasses.dataclass(frozen=True) +class DecodeImage: + """Decodes image feature and scales to [0, 1] range.""" + + image_key: str = modalities.IMAGE + input_image_key: str = "image" + channels: Optional[int] = 3 # Set to 0 or None for adaptive. + + def __call__(self, features: Features) -> Features: + image = features[self.input_image_key] + + # Some TFDS input pipeline configurations don't decode images by default. + # pytype: disable=attribute-error # allow-recursive-types + if image.dtype == tf.string: + # Decodes common image formats into uint8. + image = tf.image.decode_image(image, channels=self.channels) + + if image.dtype == tf.uint8: + image = tf.cast(image, tf.float32) / 255.0 + elif image.dtype == tf.float32: + tf.debugging.assert_greater_equal(image, 0.) + tf.debugging.assert_less_equal(image, 1.) + else: + raise ValueError(f"Unsupported dtype for image feature: {image.dtype}") + # pytype: enable=attribute-error # allow-recursive-types + + features[self.image_key] = image + return features + + +@dataclasses.dataclass(frozen=True) +class DecodeCocoExample(DecodeImage): + """Given a COCO TFDS example, creates features with boxes. + + The processing in this class includes: + 1. Converting images from uint8 to float32 with range [0, 1.]. Note that TFDS + already parses the serialized protos and decodes jpeg images into uint8. + 2. Renaming keys to modality names. + """ + + boxes_key: str = modalities.BOXES + instance_labels_key: str = modalities.INSTANCE_LABELS + area_key: str = modalities.AREA + orig_size_key: str = modalities.ORIGINAL_SIZE + image_id_key: str = modalities.IMAGE_ID + annotation_id_key: str = modalities.ANNOTATION_ID + crowd_key: str = modalities.CROWD + instance_text_labels_key: str = modalities.INSTANCE_TEXT_LABELS + remove_crowd_annotations: bool = False + + def __call__(self, features: Features) -> Features: + features = super().__call__(features) + image_size = transforms.get_dynamic_size(features[self.image_key]) + boxes = features["objects"]["bbox"] # float32, in range [0, 1]. + instance_labels = tf.cast(features["objects"]["label"], tf.int32) + + features_new = { + self.image_key: features[self.image_key], + self.boxes_key: boxes, + self.instance_labels_key: instance_labels, + self.area_key: features["objects"]["area"], + self.orig_size_key: tf.cast(image_size, tf.int32), + self.image_id_key: features["image/id"], + self.annotation_id_key: features["objects"]["id"] + } + + # We optionally fetch `is_crowd` as it is only present in Coco, and this + # prevents breakage of inheritors e.g. LVIS, OpenImagesV5 and Coco Panoptic. + if "is_crowd" in features["objects"]: + features_new[self.crowd_key] = tf.cast(features["objects"]["is_crowd"], + tf.int32) + + if self.remove_crowd_annotations: + # Remove categories for which any instance is labeled as a crowd. These + # categories violate the assumption that every instance of the category + # is exhaustively annotated, which is made in some losses. + crowd_labels = tf.boolean_mask(instance_labels, + features_new[self.crowd_key] == 1) + not_exhaustively_annotated = tf.reduce_any( + instance_labels[..., None] == crowd_labels[..., None, :], axis=-1) + mask = tf.logical_not(not_exhaustively_annotated) + + instance_keys = [ + self.boxes_key, self.instance_labels_key, self.area_key, + self.annotation_id_key, self.crowd_key + ] + for k in instance_keys: + features_new[k] = tf.boolean_mask(features_new[k], mask) + + if "rng" in features: + features_new[SEED_KEY] = features["rng"] + + return features_new + + +@dataclasses.dataclass(frozen=True) +class DecodeLvisExample(DecodeCocoExample): + """Given an LVIS TFDS example, creates features with boxes. + + The processing in this class includes: + 1. Converting images from uint8 to float32 with range [0, 1]. Note that TFDS + already parses the serialized protos and decodes jpeg images into uint8. + 2. Renaming keys to modality names. + """ + + negative_labels_key: str = modalities.NEGATIVE_LABELS + not_exhaustive_labels_key: str = modalities.NOT_EXHAUSTIVE_LABELS + instance_text_labels_key: str = modalities.INSTANCE_TEXT_LABELS + negative_text_labels_key: str = modalities.NEGATIVE_TEXT_LABELS + + def __call__(self, features: Features) -> Features: + new_features = super().__call__(features) + new_features[self.negative_labels_key] = tf.cast( + features["neg_category_ids"], tf.int32) + # A non-standard feature representing category ids not fully covered + # by instance labels. + new_features[self.not_exhaustive_labels_key] = tf.cast( + features["not_exhaustive_category_ids"], tf.int32) + return new_features diff --git a/scenic/projects/owl_vit/preprocessing/input_pipeline.py b/scenic/projects/owl_vit/preprocessing/input_pipeline.py new file mode 100644 index 0000000000000000000000000000000000000000..9592a9b91aa77849b042b90707a708253cc3635c --- /dev/null +++ b/scenic/projects/owl_vit/preprocessing/input_pipeline.py @@ -0,0 +1,552 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data pipeline for text-conditional detection training. + +The pipeline can combine several source datasets, e.g. Objects365 and Visual +Genome. In addition, the pipeline can merge multiple images into "mosaics" to +increase size and class diversity of the training examples. + +This file deals with the high-level logistics of processing the data, e.g. +dataset merging and mosaic creation. Most image and label processing is +implemented in image_ops.py and label_ops.py, and configured in the +config.dataset_configs.train.preproc_spec config field. + +Rougly, preprocessing proceeds as follows: + + 1. Integer labels are converted to text queries by using the category + names. + + 2. For each image, the pipeline produces a set of text queries, which consist + of positive queries (categories known to be in the image, based on the + ground-truth bounding boxes) and negative queries (categories known to be + absent from the image). Optionally, random prompt templates are added to + category names. + + 3. From the queries, classification targets are constructed. In each image, the + training target for each object/box is the one-hot-encoded + index of the query corresponding to that object. + +The entry-point into the pipeline is `get_dataset`. See docstrings for details. +""" +import dataclasses +import functools +from typing import Any, Dict, Optional, Sequence + +from clu import deterministic_data +from clu import preprocess_spec +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.projects.owl_vit.preprocessing import image_ops +from scenic.projects.owl_vit.preprocessing import label_ops +from scenic.projects.owl_vit.preprocessing import mosaic +import tensorflow as tf +import tensorflow_datasets as tfds + +Features = preprocess_spec.Features + +NUM_PARALLEL_CALLS = tf.data.AUTOTUNE + +DECODERS = { + 'visual_genome:1.0.0': + label_ops.DecodeVisualGenome, + 'lvis:1.2.0': + label_ops.DecodeLvis, + 'objects365:0.0.1': + label_ops.DecodeObjects365, +} + +# All ops must be listed in either PRE_MOSAIC_OPS or POST_MOSAIC_OPS or both. +# Maintaining exhaustive lists avoids bugs where ops are incorrectly assumed to +# be pre- or post-mosaic. +PRE_MOSAIC_OPS = tuple( + dec.func if isinstance(dec, functools.partial) else dec + for dec in DECODERS.values()) + ( + image_ops.CropOrPad, + image_ops.CropOrPadMetaData, + image_ops.Drop, + image_ops.Keep, + image_ops.RandomCrop, + image_ops.RandomFlipLeftRight, + image_ops.ResizeWithPad, + label_ops.CanonicalizeTextLabels, + label_ops.RemoveForbiddenLabels, + ) + +POST_MOSAIC_OPS = ( + image_ops.CropOrPad, + image_ops.CropOrPadMetaData, + image_ops.MergeOverlappingInstances, + label_ops.AddQuerySet, + label_ops.AddRandomNegativeLabels, + label_ops.AddRandomPrompts, + label_ops.RemovePromptabilityMarker, + label_ops.SingleToMultiLabel, + label_ops.ClipTokenizeQueries, +) + + +def _get_pre_mosaic_process_fn( + builder: tfds.core.DatasetBuilder, + decoder_kwargs: Dict[str, Any], + spec: str, + mosaic_size: int = 1, +) -> preprocess_spec.PreprocessFn: + """Constructs the preprocess_fn that should be applied before mosaicing. + + Args: + builder: TFDS dataset builder. + decoder_kwargs: Decoder kwargs. + spec: Config string specifying the preprocessing. + mosaic_size: Number of tiles along each mosaic edge. For no mosaicing, set + to 1. + + Returns: + PreprocessFns for pre-mosaic processing. + """ + all_ops = preprocess_spec.get_all_ops( + 'scenic.projects.owl_vit.preprocessing.image_ops') + all_ops += preprocess_spec.get_all_ops( + 'scenic.projects.owl_vit.preprocessing.label_ops') + pre_mosaic_fn = preprocess_spec.parse(spec, all_ops, only_jax_types=False) + + # Add decoder: + tfds_name = f'{builder.name}:{builder.version}' + decoder_kwargs = decoder_kwargs.copy() + decoder_name = decoder_kwargs.pop('name', tfds_name) + if decoder_name not in DECODERS: + raise ValueError( + f'Did not find decoder for {decoder_name}. Please specify decoders for ' + 'all datasets in DECODERS.') + pre_mosaic_fn.ops = ( + DECODERS[decoder_name](**decoder_kwargs), *pre_mosaic_fn.ops) + + # Reduce the resize-size of all ops by a factor of `mosaic_size`: + resize_ops = ( + image_ops.ResizeWithPad, + image_ops.CropOrPad) + pre_mosaic_ops = [] + for op in pre_mosaic_fn.ops: + # Validate op: + if isinstance(op, PRE_MOSAIC_OPS): + pass # This is a pre-mosaic op, continue below. + elif isinstance(op, POST_MOSAIC_OPS): + continue # This is a post-mosaic-only op, skip. + else: + raise ValueError( + f'Op {op!r} not found in PRE_MOSAIC_OPS or POST_MOSAIC_OPS. ' + 'Please add op to either or both lists.') + + # Adjust resizing ops to mosaic tile size: + if isinstance(op, resize_ops): + assert op.size % mosaic_size == 0, 'Size is not evenly divisible!' + op = dataclasses.replace(op, size=op.size // mosaic_size) + pre_mosaic_ops.append(op) + pre_mosaic_fn.ops = pre_mosaic_ops + + return pre_mosaic_fn + + +def _get_post_mosaic_process_fn( + spec: str, +) -> preprocess_spec.PreprocessFn: + """Constructs the preprocess_fn that should be applied after mosaicing. + + Args: + spec: Config string specifying the preprocessing. + + Returns: + PreprocessFns for post-mosaic processing. + """ + all_ops = preprocess_spec.get_all_ops( + 'scenic.projects.owl_vit.preprocessing.image_ops') + all_ops += preprocess_spec.get_all_ops( + 'scenic.projects.owl_vit.preprocessing.label_ops') + post_mosaic_fn = preprocess_spec.parse(spec, all_ops, only_jax_types=False) + post_mosaic_fn.ops = [ + op for op in post_mosaic_fn.ops if isinstance(op, POST_MOSAIC_OPS)] + return post_mosaic_fn + + +def _get_single_tfds_dataset( + builder: tfds.core.DatasetBuilder, + split: str, + batch_size: int, + preprocess_fn: preprocess_spec.PreprocessFn, + rng: Any, + shuffle: bool = False, + shuffle_buffer_size: int = 1000, + cache: bool = False, +) -> tf.data.Dataset: + """Creates dataset from builder and applies pre-mosaic preprocessing. + + Args: + builder: TFDS dataset builder. + split: Train/test/validation split. + batch_size: Batch size. + preprocess_fn: Preprocess function with pre-mosaic ops. + rng: Random seed. + shuffle: Whether to shuffle. + shuffle_buffer_size: Shuffle buffer size. + cache: Whether to cache the dataset. + + Returns: + tf.data.Dataset with pre-mosaic preprocessing applied. + """ + + host_split = deterministic_data.get_read_instruction_for_host( + split, + dataset_info=builder.info, + remainder_options=deterministic_data.RemainderOptions.DROP, + ) + + ds = deterministic_data.create_dataset( + builder, + split=host_split, + preprocess_fn=preprocess_fn, + cache=cache, + batch_dims=[batch_size], + rng=rng, + num_epochs=None, # None = repeat forever. + shuffle=shuffle, + shuffle_buffer_size=shuffle_buffer_size) + + return ds + + +def _get_merged_dataset(builders: Sequence[tfds.core.DatasetBuilder], + splits: Sequence[str], + dataset_probs: Sequence[float], + decoder_kwarg_list: Sequence[Dict[str, Any]], + preproc_spec: str, + mosaic_size: int, + rng: Any, + shuffle: bool = False, + shuffle_buffer_size: int = 10_000, + cache: bool = False) -> tf.data.Dataset: + """Creates datasets from builders, applies preprocessing, and merges them. + + Args: + builders: List of TFDS dataset builders. + splits: List containing the split to use for each builder. + dataset_probs: Sampling probabilities for each dataset. + decoder_kwarg_list: Kwargs to pass to the decoder. + preproc_spec: Preprocessing specification string. + mosaic_size: Number of tiles along each mosaic edge. For no mosaicing, set + to 1. + rng: Random seed (JAX format). + shuffle: Whether to shuffle. + shuffle_buffer_size: Shuffle buffer size (ignored if shuffle is False). + cache: Whether to cache the datasets. + + Returns: + tf.data.Dataset with pre-mosaic preprocessing applied. + """ + + datasets_to_merge = [] + for builder, split, decoder_kwargs in zip( + builders, splits, decoder_kwarg_list): + pre_mosaic_processing = _get_pre_mosaic_process_fn( + builder, + decoder_kwargs, + preproc_spec, + mosaic_size) + rng, ds_rng = jax.random.split(rng) + datasets_to_merge.append(_get_single_tfds_dataset( + builder, + split, + batch_size=mosaic_size**2, + preprocess_fn=pre_mosaic_processing, + rng=ds_rng, + shuffle=shuffle, + shuffle_buffer_size=shuffle_buffer_size, + cache=cache)) + + try: + return tf.data.Dataset.sample_from_datasets( + datasets_to_merge, weights=dataset_probs, + seed=None if rng is None else rng[0]) + except TypeError as e: + # There is a mismatch between the datasets to be merged. If it's a simple + # difference in the feature keys, provide a nicer message than tf.data: + expected_keys = set(datasets_to_merge[0].element_spec.keys()) + for dataset in datasets_to_merge[1:]: + actual_keys = set(dataset.element_spec.keys()) + if actual_keys != expected_keys: + raise TypeError( + 'Datasets to be merged must have the same structure, but had keys ' + f'\n\n{expected_keys}\n\n and \n\n{actual_keys}\n\n' + f'Difference:\n{expected_keys.symmetric_difference(actual_keys)}' + ) from e + # If the difference is not in the feature keys, raise the original error: + raise e + + +def _build_pipeline(config: ml_collections.ConfigDict, + batch_size: int, + rng: Any, + shuffle: bool = False) -> tf.data.Dataset: + """Build a tf.data.Dataset pipeline using clu.deterministic_data. + + The pipeline has the following steps: + + 0. All used datasets should have text label fields. Convert labels to text in + their decoders. + + 1. Datasets are merged with tf.data.Dataset.sample_from_datasets. + + 2. Optionally, mosaics are created. + + 3. Prompts are added to text labels. + + 4. Per-image label spaces are generated from text labels. + + 5. Text queries are tokenized. + + 6. Features are converted to Scenic format. + + Args: + config: Dataset configurations. + batch_size: Total batch size (sum for all devices). + rng: Random seed (JAX format). + shuffle: Whether to shuffle. + + Returns: + tf.data.Dataset after preprocessing, merging, mosaicing, and batching. + """ + + builders = [ + tfds.builder(name, data_dir=config.data_dirs[0].get(name)) + for name in config.tfds_names + ] + + decoder_kwarg_list = config.get('decoder_kwarg_list', + [{}] * len(config.tfds_names)) + mosaic_sizes = config.get('mosaic_sizes', (1,)) + mosaic_probs = config.get('mosaic_probs', (1.0,)) + mosaic_datasets = [] + for mosaic_size in mosaic_sizes: + rng, ds_rng = jax.random.split(rng) + merged_dataset = _get_merged_dataset( + builders=builders, + splits=config.splits, + dataset_probs=config.dataset_probs, + decoder_kwarg_list=decoder_kwarg_list, + preproc_spec=config.preproc_spec, + mosaic_size=mosaic_size, + rng=ds_rng, + shuffle=shuffle, + shuffle_buffer_size=config.shuffle_buffer_size, + cache=config.get('cache', False)) + + # Build mosaics: + if mosaic_size == 1: # I.e. no mosaic. + merged_dataset = merged_dataset.unbatch() # Remove mosaic dimension. + else: + merged_dataset = merged_dataset.map( + mosaic.CreateMosaic(mosaic_size), + num_parallel_calls=NUM_PARALLEL_CALLS) + + mosaic_datasets.append(merged_dataset) + + # Merge mosaic sizes: + final_dataset = tf.data.Dataset.sample_from_datasets( + mosaic_datasets, weights=mosaic_probs, seed=rng[0]) + + # Apply post-mosaic processing: + post_mosaic_processing = _get_post_mosaic_process_fn(config.preproc_spec) + post_mosaic_ops = list(post_mosaic_processing.ops) + + post_mosaic_ops.append( + label_ops.ConvertToScenic( + input_range=config.input_range, + )) + + post_mosaic_processing.ops = post_mosaic_ops + final_dataset = final_dataset.map( + post_mosaic_processing, num_parallel_calls=NUM_PARALLEL_CALLS) + + # Batch to the desired output batch size: + batch_dims = [ + jax.local_device_count(), batch_size // jax.local_device_count() + ] + for batch_size in reversed(batch_dims): + final_dataset = final_dataset.batch( + batch_size, drop_remainder=True, num_parallel_calls=NUM_PARALLEL_CALLS) + + return final_dataset.prefetch(tf.data.AUTOTUNE) + + +def _validate_and_normalize_config( + dataset_configs: ml_collections.ConfigDict, + train: bool = False) -> ml_collections.ConfigDict: + """Validates dataset_configs and normalizes it to a common format. + + Common and train/eval-mode-specific configs are merged into one. + TFDS data dirs are added to the config. + + Args: + dataset_configs: Dataset configuration as specified in the config file. + train: Flag to switch between train and eval mode. + + Returns: + Normalized config with merged common and mode-specific settings. + """ + # Create a merged config for this mode (i.e. train or test): + mode_config = dataset_configs.train if train else dataset_configs.eval + config = ml_collections.ConfigDict({**dataset_configs, **mode_config}) + + # Validate config structure: + decoder_kwarg_list = config.get('decoder_kwarg_list', + [{}] * len(config.tfds_names)) + if not (len(config.tfds_names) == len(config.splits) == len( + config.dataset_probs) == len(decoder_kwarg_list)): + raise ValueError( + 'Dataset settings must have matching lengths, got ' + f'{config.tfds_names}, {config.splits}, {config.dataset_probs}, ' + f'{decoder_kwarg_list}.') + + mosaic_sizes = config.get('mosaic_sizes', (1,)) + mosaic_probs = config.get('mosaic_probs', (1.0,)) + if len(mosaic_sizes) != len(mosaic_probs): + raise ValueError( + 'mosaic_sizes and mosaic_probs must have matching lengths, got ' + f'{mosaic_sizes}, {mosaic_probs}.') + + # Determine data_dirs: + data_dirs = {} + for tfds_name, kws in zip(config.tfds_names, decoder_kwarg_list): + # First look for data dir in decoder_kwargs, otherwise use None: + data_dirs[tfds_name] = kws.get('tfds_data_dir') + config.data_dirs = (data_dirs,) # Wrap tuple avoids ConfigDict conversion. + + return config + + +@datasets.add_dataset('owl_vit') +def get_dataset( + *, + batch_size: int, + eval_batch_size: int, + num_shards: int, + rng: Any, + dataset_configs: ml_collections.ConfigDict, + dtype_str: str = 'float32', + shuffle_seed: int = 0, + dataset_service_address: Optional[str] = None) -> dataset_utils.Dataset: + """Returns generators for image-text detection datasets. + + In addition to standard detection features this loader also produces textual + queries (in features['queries']), which defines the per batch labelset. The + queries are the (argus) tokenized string queries. Text queries from detection + datasets are simply their class names. + + Args: + batch_size: Determines the train batch size. + eval_batch_size: Determines the evaluation batch size. + num_shards: Unused; determined by CLU. + rng: JAX RNG key, which can be used for augmentation, shuffling, etc. + dataset_configs: Dataset configurations. + dtype_str: Data type of the image. Only 'float32' is currently supported. + shuffle_seed: Unsupported; use rng instead. + dataset_service_address: Unsupported; must be None. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + if dataset_service_address is not None: + raise NotImplementedError('This dataset does not support the DS service.') + if rng is None: + raise NotImplementedError('This dataset requires a JAX RNG.') + if shuffle_seed: + raise NotImplementedError( + 'This dataset requires a JAX RNG, do not use shuffle_seed.') + if len(dataset_configs.eval.tfds_names) > 1: + raise NotImplementedError( + 'Evaluation with more than one datasets is not supported.') + if dtype_str != 'float32': + raise ValueError(f'Unsupported dtype_str: {dtype_str}') + + # Delete unused arguments (see docstring): + del num_shards, shuffle_seed + + # Ensure a different key on each worker: + rng = jax.random.fold_in(rng, jax.process_index()) + + rng, train_rng = jax.random.split(rng) + + # Training dataset: + train_config = _validate_and_normalize_config(dataset_configs, train=True) + train_ds = _build_pipeline( + config=train_config, + batch_size=batch_size, + rng=train_rng, + shuffle=True, + ) + + example_batch = next(iter(train_ds)) + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + + if dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + train_iter = jax_utils.prefetch_to_device( + train_iter, dataset_configs.get('prefetch_to_device')) + + rng, eval_rng = jax.random.split(rng) + # Evaluation dataset: + eval_config = _validate_and_normalize_config(dataset_configs, train=False) + eval_ds = _build_pipeline( + config=eval_config, + batch_size=eval_batch_size, + rng=eval_rng, + ) + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + + total_examples = sum( + dataset_utils.get_num_examples(name, split, train_config.data_dirs[0].get( + name)) for name, split in zip(dataset_configs.train.tfds_names, + dataset_configs.train.splits)) + eval_data_dir = eval_config.data_dirs[0].get( + dataset_configs.eval.tfds_names[0]) + total_eval_examples = dataset_utils.get_num_examples( + dataset_configs.eval.tfds_names[0], dataset_configs.eval.splits[0], + data_dir=eval_data_dir) + + eval_builder = tfds.builder(dataset_configs.eval.tfds_names[0], + data_dir=eval_data_dir) + + if 'bobjects' in eval_builder.info.features: + num_classes = eval_builder.info.features['bobjects']['label'].num_classes + else: + num_classes = eval_builder.info.features['objects']['label'].num_classes + num_classes += 1 + + meta_data = { + 'input_shape': (-1,) + tuple(example_batch['inputs'].shape[-3:]), + 'query_shape': (-1,) + tuple(example_batch['queries'].shape[-2:]), + 'num_train_examples': total_examples, + 'num_eval_examples': total_eval_examples, + 'input_dtype': jnp.float32, + 'target_is_onehot': True, # We always use the one/multi-hot format. + 'eval_num_classes': num_classes, + } + + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) diff --git a/scenic/projects/owl_vit/preprocessing/label_ops.py b/scenic/projects/owl_vit/preprocessing/label_ops.py new file mode 100644 index 0000000000000000000000000000000000000000..4586e62232c63f5e3ec86231095fc2ad64b23d7a --- /dev/null +++ b/scenic/projects/owl_vit/preprocessing/label_ops.py @@ -0,0 +1,1064 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Preprocessing ops for text labels.""" + +import abc +import dataclasses +import functools +from typing import Optional, Sequence, Tuple, Union + +from absl import logging +from clu import preprocess_spec +import numpy as np +from scenic.projects.baselines.detr import transforms as detr_transforms +from scenic.projects.owl_vit.clip import tokenizer as clip_tokenizer +from scenic.projects.owl_vit.preprocessing import image_ops +from scenic.projects.owl_vit.preprocessing import modalities +from scenic.projects.owl_vit.preprocessing import transforms + +import tensorflow as tf +import tensorflow_datasets as tfds + +Features = preprocess_spec.Features +all_ops = lambda: preprocess_spec.get_all_ops(__name__) + +# Adding NOT_PROMPTABLE_MARKER to a query will exclude it from having a prompt +# template (e.g. 'a photo of a {}') added during training: +NOT_PROMPTABLE_MARKER = '#' + +PADDING_QUERY = '' + +# From +# https://github.com/openai/CLIP/blob/main/notebooks/Prompt_Engineering_for_ImageNet.ipynb +CLIP_BEST_PROMPT_TEMPLATES = [ + 'itap of a {}.', + 'a bad photo of the {}.', + 'a origami {}.', + 'a photo of the large {}.', + 'a {} in a video game.', + 'art of the {}.', + 'a photo of the small {}.', +] + +# From +# https://github.com/openai/CLIP/blob/main/notebooks/Prompt_Engineering_for_ImageNet.ipynb +CLIP_PAPER_PROMPT_TEMPLATES = [ + 'a bad photo of a {}.', + 'a photo of many {}.', + 'a sculpture of a {}.', + 'a photo of the hard to see {}.', + 'a low resolution photo of the {}.', + 'a rendering of a {}.', + 'graffiti of a {}.', + 'a bad photo of the {}.', + 'a cropped photo of the {}.', + 'a tattoo of a {}.', + 'the embroidered {}.', + 'a photo of a hard to see {}.', + 'a bright photo of a {}.', + 'a photo of a clean {}.', + 'a photo of a dirty {}.', + 'a dark photo of the {}.', + 'a drawing of a {}.', + 'a photo of my {}.', + 'the plastic {}.', + 'a photo of the cool {}.', + 'a close-up photo of a {}.', + 'a black and white photo of the {}.', + 'a painting of the {}.', + 'a painting of a {}.', + 'a pixelated photo of the {}.', + 'a sculpture of the {}.', + 'a bright photo of the {}.', + 'a cropped photo of a {}.', + 'a plastic {}.', + 'a photo of the dirty {}.', + 'a jpeg corrupted photo of a {}.', + 'a blurry photo of the {}.', + 'a photo of the {}.', + 'a good photo of the {}.', + 'a rendering of the {}.', + 'a {} in a video game.', + 'a photo of one {}.', + 'a doodle of a {}.', + 'a close-up photo of the {}.', + 'a photo of a {}.', + 'the origami {}.', + 'the {} in a video game.', + 'a sketch of a {}.', + 'a doodle of the {}.', + 'a origami {}.', + 'a low resolution photo of a {}.', + 'the toy {}.', + 'a rendition of the {}.', + 'a photo of the clean {}.', + 'a photo of a large {}.', + 'a rendition of a {}.', + 'a photo of a nice {}.', + 'a photo of a weird {}.', + 'a blurry photo of a {}.', + 'a cartoon {}.', + 'art of a {}.', + 'a sketch of the {}.', + 'a embroidered {}.', + 'a pixelated photo of a {}.', + 'itap of the {}.', + 'a jpeg corrupted photo of the {}.', + 'a good photo of a {}.', + 'a plushie {}.', + 'a photo of the nice {}.', + 'a photo of the small {}.', + 'a photo of the weird {}.', + 'the cartoon {}.', + 'art of the {}.', + 'a drawing of the {}.', + 'a photo of the large {}.', + 'a black and white photo of a {}.', + 'the plushie {}.', + 'a dark photo of a {}.', + 'itap of a {}.', + 'graffiti of the {}.', + 'a toy {}.', + 'itap of my {}.', + 'a photo of a cool {}.', + 'a photo of a small {}.', + 'a tattoo of the {}.', +] + +TRAINING_PROMPT_TEMPLATES = ['{}'] + CLIP_PAPER_PROMPT_TEMPLATES + +# From annotation JSON files at https://www.lvisdataset.org/dataset: +LVIS_RARE_CLASSES = [ + 'applesauce', 'apricot', 'arctic_(type_of_shoe)', 'armoire', 'armor', 'ax', + 'baboon', 'bagpipe', 'baguet', 'bait', 'ballet_skirt', 'banjo', 'barbell', + 'barge', 'bass_horn', 'batter_(food)', 'beachball', 'bedpan', 'beeper', + 'beetle', 'Bible', 'birthday_card', 'pirate_flag', 'blimp', 'gameboard', + 'bob', 'bolo_tie', 'bonnet', 'bookmark', 'boom_microphone', 'bow_(weapon)', + 'pipe_bowl', 'bowling_ball', 'boxing_glove', 'brass_plaque', 'breechcloth', + 'broach', 'bubble_gum', 'horse_buggy', 'bulldozer', 'bulletproof_vest', + 'burrito', 'cabana', 'locker', 'candy_bar', 'canteen', 'elevator_car', + 'car_battery', 'cargo_ship', 'carnation', 'casserole', 'cassette', + 'chain_mail', 'chaise_longue', 'chalice', 'chap', 'checkbook', + 'checkerboard', 'chessboard', 'chime', 'chinaware', 'poker_chip', + 'chocolate_milk', 'chocolate_mousse', 'cider', 'cigar_box', 'clarinet', + 'cleat_(for_securing_rope)', 'clementine', 'clippers_(for_plants)', 'cloak', + 'clutch_bag', 'cockroach', 'cocoa_(beverage)', 'coil', 'coloring_material', + 'combination_lock', 'comic_book', 'compass', 'convertible_(automobile)', + 'sofa_bed', 'cooker', 'cooking_utensil', 'corkboard', 'cornbread', + 'cornmeal', 'cougar', 'coverall', 'crabmeat', 'crape', 'cream_pitcher', + 'crouton', 'crowbar', 'hair_curler', 'curling_iron', 'cylinder', 'cymbal', + 'dagger', 'dalmatian', 'date_(fruit)', 'detergent', 'diary', 'die', + 'dinghy', 'tux', 'dishwasher_detergent', 'diving_board', 'dollar', + 'dollhouse', 'dove', 'dragonfly', 'drone', 'dropper', 'drumstick', + 'dumbbell', 'dustpan', 'earplug', 'eclair', 'eel', 'egg_roll', + 'electric_chair', 'escargot', 'eyepatch', 'falcon', 'fedora', 'ferret', + 'fig_(fruit)', 'file_(tool)', 'first-aid_kit', 'fishbowl', 'flash', + 'fleece', 'football_helmet', 'fudge', 'funnel', 'futon', 'gag', 'garbage', + 'gargoyle', 'gasmask', 'gemstone', 'generator', 'goldfish', + 'gondola_(boat)', 'gorilla', 'gourd', 'gravy_boat', 'griddle', 'grits', + 'halter_top', 'hamper', 'hand_glass', 'handcuff', 'handsaw', + 'hardback_book', 'harmonium', 'hatbox', 'headset', 'heron', 'hippopotamus', + 'hockey_stick', 'hookah', 'hornet', 'hot-air_balloon', 'hotplate', + 'hourglass', 'houseboat', 'hummus', 'popsicle', 'ice_pack', 'ice_skate', + 'inhaler', 'jelly_bean', 'jewel', 'joystick', 'keg', 'kennel', 'keycard', + 'kitchen_table', 'knitting_needle', 'knocker_(on_a_door)', 'koala', + 'lab_coat', 'lamb-chop', 'lasagna', 'lawn_mower', 'leather', 'legume', + 'lemonade', 'lightning_rod', 'limousine', 'liquor', 'machine_gun', + 'mallard', 'mallet', 'mammoth', 'manatee', 'martini', 'mascot', 'masher', + 'matchbox', 'microscope', 'milestone', 'milk_can', 'milkshake', + 'mint_candy', 'motor_vehicle', 'music_stool', 'nailfile', 'neckerchief', + 'nosebag_(for_animals)', 'nutcracker', 'octopus_(food)', 'octopus_(animal)', + 'omelet', 'inkpad', 'pan_(metal_container)', 'pantyhose', 'papaya', + 'paperback_book', 'paperweight', 'parchment', 'passenger_ship', + 'patty_(food)', 'wooden_leg', 'pegboard', 'pencil_box', 'pencil_sharpener', + 'pendulum', 'pennant', 'penny_(coin)', 'persimmon', 'phonebook', + 'piggy_bank', 'pin_(non_jewelry)', 'ping-pong_ball', 'pinwheel', + 'tobacco_pipe', 'pistol', 'pitchfork', 'playpen', 'plow_(farm_equipment)', + 'plume', 'pocket_watch', 'poncho', 'pool_table', 'prune', 'pudding', + 'puffer_(fish)', 'puffin', 'pug-dog', 'puncher', 'puppet', 'quesadilla', + 'quiche', 'race_car', 'radar', 'rag_doll', 'rat', 'rib_(food)', + 'river_boat', 'road_map', 'rodent', 'roller_skate', 'Rollerblade', + 'root_beer', 'safety_pin', 'salad_plate', 'salmon_(food)', 'satchel', + 'saucepan', 'sawhorse', 'saxophone', 'scarecrow', 'scraper', 'seaplane', + 'sharpener', 'Sharpie', 'shaver_(electric)', 'shawl', 'shears', + 'shepherd_dog', 'sherbert', 'shot_glass', 'shower_cap', + 'shredder_(for_paper)', 'skullcap', 'sling_(bandage)', 'smoothie', 'snake', + 'softball', 'sombrero', 'soup_bowl', 'soya_milk', 'space_shuttle', + 'sparkler_(fireworks)', 'spear', 'crawfish', 'squid_(food)', 'stagecoach', + 'steak_knife', 'stepladder', 'stew', 'stirrer', 'string_cheese', 'stylus', + 'subwoofer', 'sugar_bowl', 'sugarcane_(plant)', 'syringe', 'Tabasco_sauce', + 'table-tennis_table', 'tachometer', 'taco', 'tambourine', 'army_tank', + 'telephoto_lens', 'tequila', 'thimble', 'trampoline', 'trench_coat', + 'triangle_(musical_instrument)', 'truffle_(chocolate)', 'vat', 'turnip', + 'unicycle', 'vinegar', 'violin', 'vodka', 'vulture', 'waffle_iron', + 'walrus', 'wardrobe', 'washbasin', 'water_heater', 'water_gun', 'wolf' +] + +# The list below contains labels from Object365 and Visual Genome that are close +# to LVIS "rare" labels. Annotations with these labels must be removed from the +# training data for accurate "zero-shot" evaluation. The list was created by +# finding all O365/VG labels that contain LVIS labels as a substring (after +# removing space, underscore and dash). This catches close but non-identical +# labels such as "apple sauce" vs. "applesauce", "leather" vs "brown leather", +# or singular vs. plural. False positives were manually removed from the list. +O365_AND_VG_FORBIDDEN = [ + 'apple cider', 'apple sauce', 'apricots', 'ax tool', 'axe', 'baguette', + 'baguettes', 'balsamic vinegar', 'barbell weights', 'barbells', 'barges', + 'baseball mascot', 'bbq cooker', 'beach ball', 'bean casserole', + 'bear mascot', 'bed pan', 'beef stew', 'beige fleece', 'big rat', + 'bird mascot', 'black fleece', 'black funnel', 'black garbage', + 'black leather', 'black leather corner', 'black pistol', 'black satchel', + 'blackleather', 'blue bonnet', 'blue pennant', 'blue plume', 'blue snake', + 'bobber', 'book mark', 'bookmarker', 'bookmarks', 'bottle liquor', + 'breakfast quiche', 'broken spear', 'brown gorilla', 'brown leather', + 'building gargoyle', 'burritos', 'cabana roof', 'cabanas', 'camera flash', + 'carnations', 'carrot stew', 'casserole dish', 'cassette disc', + 'cassette tape', 'cement cylinder', 'chaps', 'charcoal cooker', + 'check book', 'checker board', 'checkerboard pattern', 'chess board', + 'chime is hanging', 'chime is still', 'chimes', 'chocolate eclair', + 'clementines', 'clock pendulum', 'clothes hamper', 'coffee stirrer', + 'coil burner', 'coil heater', 'coil pipe', 'coil samples', 'coil wire', + 'coiled cable', 'coiled wire', 'coils', 'cooker plate', 'cooker unit', + 'cookers', 'cork board', 'corn bread', 'coveralls', 'crab meat', 'croutons', + 'cylinder figure', 'cylinder object', 'cylinders', 'cymbals', + 'dark leather', 'detergent bottle', 'diary cover', 'dish detergent', + 'dishwashing detergent', 'dog kennel', 'doll house', 'dollar bill', + 'dollars', 'doves', 'dragon fly', 'drum stick', 'drumsticks', 'dumb bell', + 'dust pan', 'ear plug', 'ear plugs', 'earplugs', 'egg casserole', + 'electric shears', 'electrical coil', 'exhaust funnel', 'eye patch', + 'fedora hat', 'fence kennel', 'fish bowl', 'flag pennants', + 'flash from camera', 'flashes', 'fleece jacket', 'fleece liner', + 'footlocker', 'fudge center', 'futon cushion', 'game board', 'garbage heap', + 'garbage pail', 'garbage pails', 'garbage pile', 'gargoyles', 'gas mask', + 'gemstones', 'glass cylinder', 'glass of lemonade', 'gold chime', + 'gorillas', 'gourds', 'grape popsicle', 'green fleece', 'green gourds', + 'green shawl', 'grey fleece', 'handcuffs', 'head jewels', 'head set', + 'headsets', 'heatin coil', 'hole puncher', 'hot plate', 'hot plates', + 'hour glass', 'house boat', 'iridescent shears', 'jewels', 'joysticks', + 'kegs', 'key card', 'kitchen shears', 'koala bear', 'laundry detergent', + 'laundry hamper', 'leather patch', 'leather satchel', 'leather square', + 'leather strip', 'legumes', 'liquor bottle', 'liquor bottles', + 'liquor spirit', 'liquorbottle', 'lockers', 'mascots', 'match box', + 'meat stew', 'metal shears', 'microphone headset', 'nail file', + 'nutcracker doll', 'omelet part', 'omelete', 'omelette', 'omeletter', + 'one dollar', 'paint scraper', 'panty hose', 'papayas', 'paper weight', + 'peg board', 'pencil sharpener', 'pendulums', 'pennant banner', 'pennants', + 'persimmons', 'phone book', 'pin wheel', 'pin wheels', 'pinwheels', + 'pistol in waistband', 'pitch fork', 'pitcher of lemonade', 'play snake', + 'polo mallet', 'poncho hood', 'potato masher', 'propane cylinder', 'prunes', + 'radar beacon', 'radar dish', 'radar equipment', 'red coils', 'red leather', + 'red poncho', 'red spear', 'redthimble', 'rice cooker', 'sand barge', + 'sauce pan', 'sauce pans', 'saw horse', 'saw horses', 'sawhorse bench', + 'sawhorses', 'scissors shears', 'scrape', 'sea plane', 'sheep shears', + 'silver armor', 'silver funnel', 'sketched handcuffs', 'skull cap', + 'sliced gourds', 'slow cooker', 'small baguette', 'spears', + 'spinach quiche', 'step ladder', 'stick mallet', 'stirrers', + 'storage locker', 'stuffed gorilla', 'sub woofer', 'tambourines', + 'tan leather', 'tangy lemonade', 'telephone books', 'there is an axe', + 'toy snake', 'trainstep ladder', 'turnip roots', 'turnips', 'tux jacket', + 'tuxedo', 'tuxedo jacket', 'tuxedos', 'two rats', 'vats', 'video cassettes', + 'vodka bottle', 'vodka bottles', 'vultures', 'wash basin', 'wash basins', + 'waste barge', 'white armor', 'white cylinder', 'white fleece', + 'white pegboard', 'white shears', 'wii joystick', 'wind chime', + 'wind chimes', 'windchime', 'windchimes', 'wolf head', 'wood armoire', + 'wooden axe', 'woolen fleece', 'yellow bulldozer' +] + +PER_EXAMPLE_INSTANCE_MULTI_LABELS = 'per_example_instance_multi_labels' + + +@functools.lru_cache(maxsize=10) +def get_label_map(tfds_name: str, tfds_data_dir: Optional[str] = None): + """Returns a {label: name} dict for a TFDS dataset.""" + try: + builder = tfds.builder(tfds_name, data_dir=tfds_data_dir) + label_names = ['padding'] + builder.info.features['objects']['label'].names + return {i: name for i, name in enumerate(label_names)} + except Exception: + logging.info('Builder did not specify label names for %s', tfds_name) + raise + + +def mark_not_promptable(x: tf.Tensor) -> tf.Tensor: + """Marks a tensor of strings as not-promptable by appending a marker.""" + tf.debugging.Assert( + tf.logical_not( + tf.reduce_any( + tf.strings.regex_full_match(x, f'.*{NOT_PROMPTABLE_MARKER}.*'))), + data=[x], + name='assert_promptability_marker_not_in_string') + marked = tf.strings.join([tf.fill(tf.shape(x), NOT_PROMPTABLE_MARKER), x]) + # Never mark padding. + return tf.where(tf.equal(x, PADDING_QUERY), PADDING_QUERY, marked) + + +def remove_promptability_marker(x: tf.Tensor) -> tf.Tensor: + """Removes any promptability-marker-character from a tensor of strings.""" + return tf.strings.regex_replace(x, NOT_PROMPTABLE_MARKER, '') + + +def _canonicalize_string_tf( + string: Union[str, Sequence[str], tf.Tensor]) -> tf.Tensor: + """Brings text labels into a standard form.""" + + string = tf.strings.lower(string) + + # Remove all characters that are not either alphanumeric, or dash, or space, + # or NOT_PROMPTABLE_MARKER: + string = tf.strings.regex_replace( + string, f'[^a-z0-9-{NOT_PROMPTABLE_MARKER} ]', ' ') + string = tf.strings.regex_replace(string, r'\s+', ' ') + string = tf.strings.regex_replace(string, r'-+', '-') + string = tf.strings.strip(string) + + # Remove characters that equal the promptability-maker but appear somewhere + # other than the start of the string: + string = tf.strings.regex_replace( + string, f'([^^]){NOT_PROMPTABLE_MARKER}+', r'\1') + + return string + + +def _canonicalize_string_py(string: str) -> str: + """Wraps _canonicalize_string_tf for Python strings.""" + return _canonicalize_string_tf(string).numpy().decode() + + +def _convert_tf_boxes_to_xyxy(bbox: tf.Tensor, image_size: Sequence[int]): + """Convert yxyx [0, 1] normalized boxes to xyxy unnormalized format.""" + y0, x0, y1, x1 = tf.split(bbox, 4, axis=-1) + h = tf.cast(image_size[0], tf.float32) + w = tf.cast(image_size[1], tf.float32) + + y0 = tf.clip_by_value(y0 * h, 0.0, h) + x0 = tf.clip_by_value(x0 * w, 0.0, w) + y1 = tf.clip_by_value(y1 * h, 0.0, h) + x1 = tf.clip_by_value(x1 * w, 0.0, w) + + bbox = tf.concat([x0, y0, x1, y1], axis=-1) + return bbox + + +def _add_prompt(args): + """Converts a single label name string to a prompt using a template.""" + text_label, prompt_template = args + prompted = tf.strings.regex_replace(prompt_template, r'\{\}', text_label) + # Prompts may introduce non-canonical formatting, so canonicalize again: + return _canonicalize_string_tf(prompted) + + +def _sample_random_prompt_templates(num_samples: tf.Tensor, + seed: tf.Tensor) -> tf.Tensor: + """Returns num_samples prompt templates uniformly at random.""" + prompt_templates = tf.constant(TRAINING_PROMPT_TEMPLATES) + num_prompt_templates = len(TRAINING_PROMPT_TEMPLATES) + random_inds = tf.random.stateless_categorical( + logits=tf.ones((1, num_prompt_templates)), + num_samples=num_samples, + seed=seed, + )[0] + return tf.gather(prompt_templates, random_inds) + + +class NamedPreprocessOp(abc.ABC, preprocess_spec.PreprocessOp): + """Preprocessing base class that adds a name scope for easier debugging.""" + + @abc.abstractmethod + def apply(self, features: Features) -> Features: + """Applies the op to the features.""" + pass + + def __call__(self, features: Features) -> Features: + # Copy dict to avoid confusing in-place modification of inputs: + features = dict(features) + + # Add name score so that runtime errors are easier to locate: + with tf.name_scope(type(self).__name__): + return self.apply(features) + + +@dataclasses.dataclass(frozen=True) +class DecodeVisualGenome: + """Decoder class for visual genome dataset. + + Note that based on prior experiments, by default we are only using VG objects + and not the regions. + + Attributes: + include_objects: Whether VG objects should be included. + include_regions: Whether VG regions should be included. + is_promptable: Whether text labels should be treated as promptable. + tfds_data_dir: Unused here. Used in input_pipeline.py. + """ + + include_objects: bool = True + include_regions: bool = False + is_promptable: bool = False + tfds_data_dir: Optional[str] = None + + def __call__(self, features: Features) -> Features: + image = tf.cast(features['image'], tf.float32) / 255.0 + + boxes, text_labels = [], [] + if self.include_objects: + boxes.append(features['objects']['bbox']) # float32, in range [0, 1]. + text_labels.append(features['objects']['name']) + + if self.include_regions: + boxes.append(features['regions']['bbox']) # float32, in range [0, 1]. + text_labels.append(features['regions']['phrase']) + + # Combined objects and regions. + if boxes: + boxes = tf.concat(boxes, axis=0) + text_labels = tf.concat(text_labels, axis=0) + else: + raise ValueError('Either objects or regions should be included in VG.') + + # Remove empty text labels. + # pylint: disable=g-explicit-bool-comparison + boxes = boxes[text_labels != PADDING_QUERY] + text_labels = text_labels[text_labels != PADDING_QUERY] + # pylint: enable=g-explicit-bool-comparison + + # Visual Genome performs better without prompting: + # First, remove any markers that might be present in the labels: + text_labels = remove_promptability_marker(text_labels) + if not self.is_promptable: + text_labels = mark_not_promptable(text_labels) + + features_new = { + modalities.IMAGE: + image, + modalities.BOXES: + boxes, + modalities.INSTANCE_TEXT_LABELS: + text_labels, + modalities.NEGATIVE_LABELS: + tf.fill([1], -1), # Dummy padding. + modalities.NEGATIVE_TEXT_LABELS: + tf.fill([1], PADDING_QUERY), # Dummy padding. + # There are no labels so everything just 0. Don't set to -1 as mosaic + # operation will filter padding. + modalities.INSTANCE_LABELS: + tf.zeros_like(text_labels, dtype=tf.int32), + modalities.CROWD: + tf.zeros_like(text_labels, dtype=tf.int32), + } + + if 'rng' in features: + features_new[image_ops.SEED_KEY] = features['rng'] + return features_new + + +@dataclasses.dataclass(frozen=True) +class DecodeLvis(image_ops.DecodeLvisExample): + is_promptable: bool = True + tfds_data_dir: Optional[str] = None + + def __call__(self, features: Features) -> Features: + features = super().__call__(features) + return IntegerToTextLabels( + tfds_name='lvis', is_promptable=self.is_promptable)(features) + + +@dataclasses.dataclass(frozen=True) +class DecodeObjects365(image_ops.DecodeCocoExample): + """Given an Object365 TFDS example, create features with boxes.""" + is_promptable: bool = True + tfds_data_dir: Optional[str] = None + + def get_class_name(self, label_idx: tf.Tensor) -> tf.Tensor: + """Reads and constructs a mapping from integer classes to text labels.""" + # First label is "padding" and needs to be removed: + class_labels = list(get_label_map('objects365').values())[1:] + classes = tf.convert_to_tensor(class_labels) + return tf.gather(classes, label_idx) + + def __call__(self, features: Features) -> Features: + features = features.copy() + # Add missing field. + features['objects']['id'] = tf.zeros_like(features['objects']['label']) + features = super().__call__(features) + + # Dummy negative labels: + features[modalities.NEGATIVE_LABELS] = tf.fill([1], -1) + + return IntegerToTextLabels( + tfds_name='objects365', is_promptable=self.is_promptable)(features) + + +@dataclasses.dataclass +class CanonicalizeTextLabels(NamedPreprocessOp): + """Removes non-alphanum chars (except promptability marker) from labels.""" + + text_keys: Sequence[str] = (modalities.INSTANCE_TEXT_LABELS, + modalities.NEGATIVE_TEXT_LABELS) + + def apply(self, features: Features) -> Features: + for text_key in self.text_keys: + if text_key in features: + features[text_key] = _canonicalize_string_tf(features[text_key]) + return features + + +@dataclasses.dataclass +class IntegerToTextLabels(NamedPreprocessOp): + """Looks up class names from integer labels and adds them as text features. + + Attributes: + tfds_name: The TFDS name of the dataset, used to determine the label map. + tfds_data_dir: Optional custom data dir for non-standard TFDS datasets. + is_promptable: Whether text labels should be treated as promptable. + label_text_keys: A sequence of pairs of label ids and corresponding text + labels. By default, the integer ids of INSTANCE_LABELS and NEGATIVE_LABELS + are mapped to their string text label, and stored in INSTANCE_TEXT_LABELS + and NEGATIVE_TEXT_LABELS, respectively. + """ + + tfds_name: str + tfds_data_dir: Optional[str] = None + is_promptable: bool = True + label_text_keys: Sequence[Tuple[str, str]] = ( + (modalities.INSTANCE_LABELS, modalities.INSTANCE_TEXT_LABELS), + (modalities.NEGATIVE_LABELS, modalities.NEGATIVE_TEXT_LABELS), + ) + + def _get_label_map(self): + return get_label_map(self.tfds_name, self.tfds_data_dir) + + def __post_init__(self): + self.label_map = self._get_label_map() + assert self.label_map.get(0, PADDING_QUERY) in ['', 'pad', 'padding', 'N/A'] + self.label_map[0] = PADDING_QUERY + + def apply(self, features: Features) -> Features: + for _, text_key in self.label_text_keys: + if text_key in features: + raise ValueError(f'{text_key} are already present in the features.') + + integer_labels = tf.constant(list(self.label_map.keys())) + text_labels = tf.constant(list(self.label_map.values())) + + # This avoids using tf Lookup tables which are stateful, and break some + # pipelines. It may not scale well as lookup time is linear in # elements. + table = StatelessLookupTable( + integer_labels, _canonicalize_string_tf(text_labels), + default_value=tf.constant(PADDING_QUERY, tf.string)) + + # Label maps start at 1. + for label_key, text_key in self.label_text_keys: + if label_key in features: + features[text_key] = table.lookup(features[label_key] + 1) + features[text_key] = remove_promptability_marker(features[text_key]) + if not self.is_promptable: + features[text_key] = mark_not_promptable(features[text_key]) + + return features + + +def _is_forbidden_label(labels: tf.Tensor) -> tf.Tensor: + """Checks which elements of string tensor 'labels' are forbidden.""" + forbidden_labels = LVIS_RARE_CLASSES + O365_AND_VG_FORBIDDEN + + # Canonicalize both query and forbidden labels: + forbidden_labels = _canonicalize_string_tf(forbidden_labels) + labels = _canonicalize_string_tf(labels) + + # Remove dashes, which are not removed by _canonicalize_string and may differ + # between query and forbidden labels: + forbidden_labels = tf.strings.regex_replace(forbidden_labels, '-', '') + labels = tf.strings.regex_replace(labels, '-', '') + + # Need unique set for tf.lookup.StaticHashTable: + forbidden_labels, _ = tf.unique(forbidden_labels) + + forbidden_labels_table = tf.lookup.StaticHashTable( + tf.lookup.KeyValueTensorInitializer( + forbidden_labels, tf.ones_like(forbidden_labels, dtype=tf.bool)), + default_value=False) + return forbidden_labels_table.lookup(remove_promptability_marker(labels)) + + +@dataclasses.dataclass +class RemoveForbiddenLabels(NamedPreprocessOp): + """Removes annotations for classes that we want to evaluate zero-shot on. + + Currently, this means LVIS "rare" classes. Other classes are defined to be OK + to appear in the training set and will not be considered strict "zero-shot" + classes. + + Forbidden labels are removed also if they are marked "non-promptable". + """ + + instance_text_labels_key: str = modalities.INSTANCE_TEXT_LABELS + negative_text_labels_key: str = modalities.NEGATIVE_TEXT_LABELS + negative_labels_key: str = modalities.NEGATIVE_LABELS + + def apply(self, features: Features) -> Features: + if self.instance_text_labels_key in features: + keep = tf.logical_not( + _is_forbidden_label(features[self.instance_text_labels_key])) + for feature in image_ops.FEATURES_WITH_FIRST_INSTANCE_AXIS: + if feature in features: + features[feature] = features[feature][keep] + + if self.negative_text_labels_key in features: + keep = tf.logical_not( + _is_forbidden_label(features[self.negative_text_labels_key])) + features[self.negative_text_labels_key] = features[ + self.negative_text_labels_key][keep] + if self.negative_labels_key in features: + features[self.negative_labels_key] = features[ + self.negative_labels_key][keep] + + return features + + +@dataclasses.dataclass +class AddRandomNegativeLabels(NamedPreprocessOp): + """Adds randomly sampled labels as additional negative labels. + + This is similar to the Federated Loss proposed in + https://arxiv.org/pdf/2103.07461.pdf, but samples negatives in proportion to + their appearance in the dataset, rather than in proportion to the square root + of their frequency (for simplicity). + + The op works by maintaining a queue of labels seen in the dataset. For each + dataset example, a number of candidate labels are randomly drawn from the + queue. Labels that do not appear as positives in the example are added to the + negatives, up to total_num_negatives. + + To keep the queue full, all text labels of the example, and the candidate + labels previously sampled from the queue, are enqueued back. After warmup, + sampled labels from the queue will have the same distribution as in the + dataset. + + If negative integer labels are present in the features, this op will remove + them, because they are obsolete after adding randomly sampled negatives. + + Attributes: + total_num_negatives: Random negatives will be added to the input features to + bring the total number of negatives to total_num_negatives. + queue_capacity: Maximal size of the label queue. On average, the queue size + will be maintained at half of the maximum. + queue: tf.queue.RandomShuffleQueue. Will be added automatically. + """ + + total_num_negatives: int = 50 + queue_capacity: int = 100_000 + queue: Optional[tf.queue.RandomShuffleQueue] = None + + def __post_init__(self): + self.queue = tf.queue.RandomShuffleQueue( + capacity=self.queue_capacity, + min_after_dequeue=0, + dtypes=[tf.string], + shapes=[tf.TensorShape([])], + shared_name='random_negatives_queue') + # Initialize with empty strings: + self.queue.enqueue_many(tf.constant([''] * self.queue_capacity)) + + def apply(self, features: image_ops.Features) -> image_ops.Features: + # Draw candidate negative labels: + candidate_labels = self.queue.dequeue_many(self.total_num_negatives * 2) + + # Fill queue back up: + labels_to_enqueue = tf.concat([ + features[modalities.INSTANCE_TEXT_LABELS], + features[modalities.NEGATIVE_TEXT_LABELS], + candidate_labels, + ], axis=0) + labels_to_enqueue = tf.boolean_mask( + labels_to_enqueue, tf.not_equal(labels_to_enqueue, PADDING_QUERY), + name='labels_to_enqueue') + target_size = self.queue_capacity // 2 + needed_elements = tf.clip_by_value( + target_size - self.queue.size(), 0, tf.size(labels_to_enqueue)) + enqueue_op = self.queue.enqueue_many( + tf.slice(labels_to_enqueue, begin=[0], size=[needed_elements])) + + # Get negatives that are not in positives: + with tf.control_dependencies([enqueue_op]): + candidate_negatives = tf.sparse.to_dense( + tf.sets.difference( + candidate_labels[None, ...], + features[modalities.INSTANCE_TEXT_LABELS][None, ...]))[0] + + # Set operations sort the labels alphabetically, so we shuffle again: + candidate_negatives = tf.random.shuffle(candidate_negatives) + + # New negatives contain all the old negatives, plus randomly sampled ones, + # up to total_num_negatives. In addition, we ensure that padding ('') is not + # present by including it as first element before applying tf.unique and + # then slicing it off: + new_negatives = tf.concat([ + tf.constant([PADDING_QUERY]), + features[modalities.NEGATIVE_TEXT_LABELS], + candidate_negatives, + ], axis=0) + orig_num_negatives = tf.shape(features[modalities.NEGATIVE_TEXT_LABELS])[0] + new_num_negatives = tf.maximum(self.total_num_negatives, orig_num_negatives) + features[modalities.NEGATIVE_TEXT_LABELS] = tf.unique( + new_negatives)[0][1:(new_num_negatives + 1)] + + # Negative integer labels are now obsolete: + if modalities.NEGATIVE_LABELS in features: + logging.info('Removing obsolete field %s from features.', + modalities.NEGATIVE_LABELS) + features.pop(modalities.NEGATIVE_LABELS) + + return features + + +@dataclasses.dataclass +class AddRandomPrompts(NamedPreprocessOp): + """Adds random promts to promptable text features. + + The op does the following: + + 1. Get the set of unique label strings across all promptable modalities. + 2. Add a different random prompt to each unique string. + 3. Ensure that no prompts are added to unpromptable or empty strings. + 4. For each promptable modality, index back into the prompted label set to get + final prompted label array. + + Attributes: + promptable_modalities: Tuple of modality names that should be prompted. + """ + + promptable_modalities: Tuple[str, ...] = (modalities.INSTANCE_TEXT_LABELS, + modalities.NEGATIVE_TEXT_LABELS) + + def apply(self, features: Features) -> Features: + if image_ops.SEED_KEY not in features: + raise ValueError('A random seed is required for prompt sampling.') + + rngs = tf.random.experimental.stateless_split(features[image_ops.SEED_KEY]) + features[image_ops.SEED_KEY] = rngs[0] + op_seed = rngs[1] + + # Get set of labels and inverse indices: + labels = [features[modality] for modality in self.promptable_modalities] + unprompted_set, indices = tf.unique(tf.concat(labels, axis=0)) + index_list = tf.split(indices, [tf.shape(label)[0] for label in labels]) + + # Add a random prompt to each label text in the set: + random_templates = _sample_random_prompt_templates( + num_samples=tf.shape(unprompted_set)[0], seed=op_seed) + prompted_set = tf.map_fn( + _add_prompt, (unprompted_set, random_templates), + fn_output_signature=tf.TensorSpec([], tf.string)) + + # Only apply prompts to promptable labels: + is_promptable = tf.strings.regex_full_match( + unprompted_set, f'[^{NOT_PROMPTABLE_MARKER}].*') + prompted_set = tf.where(is_promptable, prompted_set, unprompted_set) + + # Do not apply prompts to empty strings (padding): + prompted_set = tf.where( + tf.equal(unprompted_set, PADDING_QUERY), PADDING_QUERY, prompted_set) + + # Replace text features with prompted versions: + for modality, indices in zip(self.promptable_modalities, index_list): + features[modality] = tf.gather(prompted_set, indices) + + # Add indicator that labels are now prompted: + features['is_prompted'] = tf.constant(True) + + return features + + +@dataclasses.dataclass +class RemovePromptabilityMarker(NamedPreprocessOp): + """Removes any promptability markers from text labels.""" + + promptable_modalities: Tuple[str, ...] = (modalities.INSTANCE_TEXT_LABELS, + modalities.NEGATIVE_TEXT_LABELS) + + def apply(self, features: Features) -> Features: + + # Remove non-promptable marker, if present: + for key in self.promptable_modalities: + features[key] = remove_promptability_marker(features[key]) + + return features + + +@dataclasses.dataclass(frozen=True) +class SingleToMultiLabel(NamedPreprocessOp): + """Converts instance labels to multi-label representation. + + Attributes: + max_num_labels: Maximum number of per-instance labels. + single_to_multi: Sequence of (src, tgt) tuples for modalities that need to + be converted from single to multi-label representation. + """ + + max_num_labels: int = 100 + single_to_multi: Sequence[Tuple[str, str]] = ( + (modalities.INSTANCE_TEXT_LABELS, modalities.INSTANCE_TEXT_MULTI_LABELS), + (modalities.INSTANCE_LABELS, modalities.INSTANCE_MULTI_LABELS)) + + def apply(self, features: Features) -> Features: + """Convert single label instances into multi-label.""" + + features_new = dict(features) + for src_name, tgt_name in self.single_to_multi: + if src_name in features: + src = features_new.pop(src_name) + padding_value = transforms.get_padding_value(src.dtype) # pytype: disable=attribute-error # allow-recursive-types + if padding_value is None: + raise ValueError(f'Do not know how to pad {src.dtype} tensors.') # pytype: disable=attribute-error # allow-recursive-types + + tgt = tf.expand_dims(src, axis=-1) + tgt = tf.pad( + tgt, + [(0, 0), (0, self.max_num_labels - 1)], + constant_values=padding_value) + tgt = tf.ensure_shape(tgt, [None, self.max_num_labels]) + features_new[tgt_name] = tgt + + return features_new + + +@dataclasses.dataclass +class AddQuerySet(NamedPreprocessOp): + """Constructs a set of text queries from instance labels, for each example. + + This function will take positive and (optionally) negative text labels and + apply "tf.unique" to create a set of queries. An empty query will be prepended + to the query set account for padding. + + The queries define the per-example label space that is used for training. + + Attributes: + max_queries: The maximum number of queries per example. + include_negatives: Whether "negative" labels should be included in the query + set. Negative labels are defined for datasets like LVIS or OpenImages. For + referring expression datasets, no negatives exists, so nothing is added. + lower: Whether to lower-case all queries. Must be set to True. + instance_text_multi_labels_key: Key for the instance text labels. + negative_text_labels_key: Key for the negative instance text labels. + instance_multi_labels_key: For creating the label mapping. + negative_labels_key: For creating the label mapping. + text_queries_key: Key for the query set. + """ + + max_queries: int + include_negatives: bool + lower: bool = True + + instance_text_multi_labels_key: str = modalities.INSTANCE_TEXT_MULTI_LABELS + negative_text_labels_key: str = modalities.NEGATIVE_TEXT_LABELS + instance_multi_labels_key: str = modalities.INSTANCE_MULTI_LABELS + negative_labels_key: str = modalities.NEGATIVE_LABELS + text_queries_key: str = modalities.TEXT_QUERIES + + def __post_init__(self): + if not self.lower: + raise ValueError('The `lower` attribute exists only for backwards-' + 'compatibility. It must be set to True.') + + def _get_unique_labelset(self, features): + """Gets a unique set of queries and corresponding labels for one image.""" + instance_desc_orig = features[self.instance_text_multi_labels_key] + instance_desc = tf.reshape(instance_desc_orig, (-1,)) + num_positive_labels = tf.shape(instance_desc)[0] + if self.include_negatives: + neg_desc = features[self.negative_text_labels_key] + all_queries = tf.concat([instance_desc, neg_desc], axis=0) + else: + all_queries = instance_desc + all_queries = _canonicalize_string_tf(all_queries) + + # Get unique labelset for this example and make sure that pad (empty text) + # has index 0. This is done by prepending the empty string to the flattened + # instance descriptions before applying tf.unique. The unique per example + # labelset is then saved in features[modalities.TEXT_QUERIES]. + all_queries = tf.concat([tf.constant([PADDING_QUERY]), all_queries], 0) + text_label_set, instance_labels = tf.unique(all_queries) + instance_labels -= 1 # Shift labels so padding is -1. + instance_labels = instance_labels[1:] # Remove padding query label. + instance_labels = instance_labels[:num_positive_labels] # Remove negatives. + + # Crop or pad to len(max_queries): + diff = self.max_queries - tf.shape(text_label_set)[0] + queries = tf.cond( + diff < 0, lambda: text_label_set[:self.max_queries], lambda: tf.pad( # pylint: disable=g-long-lambda + text_label_set, [(0, diff)], constant_values=PADDING_QUERY)) + instance_labels = tf.where(instance_labels < self.max_queries, + instance_labels, -1) + instance_labels = tf.reshape(instance_labels, tf.shape(instance_desc_orig)) + + return queries, instance_labels + + def apply(self, features: Features) -> Features: + queries, instance_labels = self._get_unique_labelset(features) + + # Labels are now per-example indices into queries. Use -1 as padding. + features[PER_EXAMPLE_INSTANCE_MULTI_LABELS] = instance_labels + features[self.text_queries_key] = tf.ensure_shape(queries, + [self.max_queries]) + return features + + +@dataclasses.dataclass +class ClipTokenizeQueries(preprocess_spec.PreprocessOp): + """Converts text query strings to integer tokens. + + Note that the features keys `queries` is used for both, text strings and + token integers. + + Attributes: + max_token_len: The maximum length of the queries after tokenization. + """ + max_token_len: int + text_queries_key: str = modalities.TEXT_QUERIES + text_queries_tokenized_key: str = modalities.TEXT_QUERIES_TOKENIZED + + def __call__(self, features: image_ops.Features) -> image_ops.Features: + if self.text_queries_key not in features: + return features + + def _tokenize(inp): + # Adapted from https://github.com/openai/CLIP/blob/main/clip/clip.py + inp_shape = inp.shape + inp = inp.reshape(-1) + all_tokens = [ + clip_tokenizer.tokenize(text.decode('utf-8'), self.max_token_len) + for text in inp + ] + result = np.zeros((len(all_tokens), self.max_token_len), dtype=np.int64) + for i, tokens in enumerate(all_tokens): + result[i, :len(tokens)] = np.asarray(tokens[:self.max_token_len]) + result = result.reshape(*inp_shape, self.max_token_len) + return result + + tf_tokenize = functools.partial(tf.numpy_function, _tokenize, + Tout=tf.int64) + text_queries = features[self.text_queries_key] + features[self.text_queries_tokenized_key] = tf.ensure_shape( + tf_tokenize([text_queries]), + text_queries.shape + [self.max_token_len]) # pytype: disable=attribute-error + return features + + +def _multilabel_to_multihot(labels: tf.Tensor, num_classes: int) -> tf.Tensor: + """Converts labels from multi-label to multi-hot representation. + + In the multi-label representation, labels have shape [..., + max_num_labels_per_instance] and are integers in [0, num_classes], with -1 for + padding. + + In the multi-hot representation, labels have shape [..., num_classes + 1] (+1 + due to padding) and are binary vectors with a 1 for each class that applies to + that instance. + + Args: + labels: [..., max_num_labels_per_instance] multi-labels. + num_classes: Number of classes, including padding. + + Returns: + [..., num_classes + 1] multi-hot label array. + """ + + # Labels are zero-indexed, with -1 for padding (TFDS convention). Add 1 such + # that multi-hot index 0 means padding: + labels = tf.one_hot(labels + 1, num_classes) + labels = tf.reduce_max(labels, axis=-2) # Combine up multi-labels. + + # Update padding label such that it is 1 iff there are no real labels. This + # is necessary because multi-labels are padded, which means that the padding + # label is initally hot for almost all real instances: + is_padding = tf.cast( + tf.reduce_all(labels[..., 1:] == 0, axis=-1, keepdims=True), labels.dtype) + return tf.concat([is_padding, labels[..., 1:]], axis=-1) + + +@dataclasses.dataclass +class ConvertToScenic(NamedPreprocessOp): + """Image processing op that converts features to Scenic format. + + Attributes: + input_range: Tuple of minimum and maximum value to which the image will be + scaled, e.g. (-1.0, 1.0). `None` defaults to the TensorFlow standard of + (0.0, 1.0). + """ + + input_range: Optional[Tuple[float, float]] + + def apply(self, features: Features) -> Features: + image = tf.image.convert_image_dtype(features['image'], dtype=tf.float32) + + if self.input_range is not None: + image = image * (self.input_range[1] - + self.input_range[0]) + self.input_range[0] + + image_size = tf.cast(tf.shape(image)[:2], dtype=tf.int32) + + target = { + 'boxes': + _convert_tf_boxes_to_xyxy(features[modalities.BOXES], image_size), + 'labels': + _multilabel_to_multihot( + labels=features[PER_EXAMPLE_INSTANCE_MULTI_LABELS], + num_classes=tf.shape(features[modalities.TEXT_QUERIES])[0]), + } + + out_features = { + 'inputs': image, + 'label': target, + 'queries': features[modalities.TEXT_QUERIES_TOKENIZED], + 'batch_mask': tf.ones((), dtype=tf.float32), + } + + return detr_transforms.NormalizeBoxes()(out_features) + + +@dataclasses.dataclass +class StatelessLookupTable: + """Basic lookup table which doesn't use stateful ops.""" + keys: tf.Tensor + values: tf.Tensor + default_value: Optional[tf.Tensor] = None + + def lookup(self, keys: tf.Tensor) -> tf.Tensor: + shape = tf.shape(keys) + keys = tf.reshape(keys, [-1]) + values = tf.map_fn(self.lookup_single, keys, + dtype=self.values.dtype) + return tf.reshape(values, shape) + + def lookup_single(self, key: tf.Tensor) -> tf.Tensor: + """Return value corresponding to `key`.""" + key_string = tf.strings.as_string(key) + labels_string = tf.strings.reduce_join(tf.strings.as_string(self.keys), + separator=' | ') + idx_equal = tf.squeeze(tf.where(self.keys == key)) + n = tf.size(idx_equal) + if self.default_value is None: # Must exist, no backup. + msg = tf.strings.reduce_join( + ['Could not find ', key_string, ' in label space:', labels_string]) + tf.assert_greater(n, 0, msg) + msg = tf.strings.reduce_join([ + 'Found ', tf.strings.as_string(n), ' matches for ', key_string, + ' in label space:', labels_string]) + tf.assert_less(n, 2, msg) + if self.default_value is None: + return self.values[idx_equal] + else: + return tf.cond(n == 0, lambda: self.default_value, + lambda: self.values[idx_equal]) diff --git a/scenic/projects/owl_vit/preprocessing/modalities.py b/scenic/projects/owl_vit/preprocessing/modalities.py new file mode 100644 index 0000000000000000000000000000000000000000..9f1656c29851cc68c9a220dcf313d8a30f0274da --- /dev/null +++ b/scenic/projects/owl_vit/preprocessing/modalities.py @@ -0,0 +1,72 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""List of data modalities which are used as feature dict keys.""" + +# Input image: +IMAGE = 'image' + +# Image ID: +IMAGE_ID = 'image_id' + +# Original size of the image before resize/pad: +ORIGINAL_SIZE = 'original_size' + +# Bounding boxes of shape [num_instances, 4]: +BOXES = 'boxes' +PREDICTED_BOXES = 'pred_boxes' + +# ID for each ground-truth box: +ANNOTATION_ID = 'annotation_id' + +# Area of box: +AREA = 'area' + +# Indicator whether a box contains a single instance (0) or a crowd/group (1): +CROWD = 'crowd' + +# Pre-sigmoid logits of confidence values for predicted boxes. +LOGITS = 'pred_logits' + +# Scores (confidences) between 0 and 1 for predicted boxes. +SCORES = 'scores' + +# Mask indicating whether an instance is real (1) or padding (0): +INSTANCE_PADDING_MASK = 'instance_padding_mask' + +# Per-instance integer labels (one label per instance): +INSTANCE_LABELS = 'instance_labels' + +# Per-instance text labels (one label per instance): +INSTANCE_TEXT_LABELS = 'instance_text_labels' + +# Per-instance multi-labels (multiple labels per instance, padded to +# [num_instances, max_num_labels]): +INSTANCE_MULTI_LABELS = 'instance_multi_labels' +INSTANCE_TEXT_MULTI_LABELS = 'instance_text_multi_labels' + +# Per-image negative integer labels (classes that are not present in the image): +NEGATIVE_LABELS = 'negative_labels' + +# Per-image negative text labels (classes that are not present in the image): +NEGATIVE_TEXT_LABELS = 'negative_text_labels' + +# List of classes that are not exhaustively annotated in an image (e.g. LVIS): +NOT_EXHAUSTIVE_LABELS = 'not_exhaustive_labels' + +# List of text queries: +TEXT_QUERIES = 'text_queries' + +# List of tokenized text queries: +TEXT_QUERIES_TOKENIZED = 'text_queries_tokenized' diff --git a/scenic/projects/owl_vit/preprocessing/mosaic.py b/scenic/projects/owl_vit/preprocessing/mosaic.py new file mode 100644 index 0000000000000000000000000000000000000000..eea9e8ab50b8bed07b59f151bedcab94a70b8cee --- /dev/null +++ b/scenic/projects/owl_vit/preprocessing/mosaic.py @@ -0,0 +1,165 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for creating mosaic datasets.""" +import dataclasses +from typing import Tuple + +from scenic.projects.owl_vit.preprocessing import image_ops +from scenic.projects.owl_vit.preprocessing import modalities +import tensorflow as tf + + +@dataclasses.dataclass +class CreateMosaic: + """Batch processing op that assembles mosaic images. + + The op expects three batch dimensions: + [device count, local batch size, (mosaic size) ** 2]. + + The op then concatenates the examples from the third batch dim into mosaic + images and merges labels. + + Mosaic approach: + 1. Run deterministic_data.create_dataset with standard preprocessing and + batch to num_tiles. But do not apply GV-to-Scenic conversion. + 2. Convert each batch into one single image. + 3. Apply another round of pad-or-crop preprocessing. + 4. Apply GV-to-Sceinic conversion. + 5. Batch to final batch size as in deterministic_data.create_dataset. + """ + + mosaic_size: int + instance_feature_keys: Tuple[str, ...] = ( + modalities.INSTANCE_LABELS, modalities.INSTANCE_TEXT_LABELS, + modalities.ANNOTATION_ID, modalities.AREA) + + def __call__(self, features: image_ops.Features) -> image_ops.Features: + + # Merge images: + features[modalities.IMAGE] = _image_tiles_to_mosaic( + features[modalities.IMAGE], self.mosaic_size) + + # Merge scalar features: + instance_padding_mask = tf.not_equal( + features[modalities.INSTANCE_LABELS], -1) + + for k in self.instance_feature_keys: + if k in features: + features[k] = _merge_instances(features[k], instance_padding_mask) + + # Special cases: + if modalities.NEGATIVE_LABELS in features: + features[modalities.NEGATIVE_LABELS] = _merge_instances( + features[modalities.NEGATIVE_LABELS], + tf.not_equal(features[modalities.NEGATIVE_LABELS], -1)) + + # Update negative labels to account for instances in all tiles: + features[modalities.NEGATIVE_LABELS] = tf.sparse.to_dense( + tf.sets.difference( + features[modalities.NEGATIVE_LABELS][tf.newaxis, ...], + tf.cast(features[modalities.INSTANCE_LABELS][tf.newaxis, ...], + features[modalities.NEGATIVE_LABELS].dtype)))[0] # pytype: disable=attribute-error # allow-recursive-types + + if modalities.NEGATIVE_TEXT_LABELS in features: + features[modalities.NEGATIVE_TEXT_LABELS] = _merge_instances( + features[modalities.NEGATIVE_TEXT_LABELS], + tf.not_equal(features[modalities.NEGATIVE_TEXT_LABELS], '')) + + # Update negative labels to account for instances in all tiles: + features[modalities.NEGATIVE_TEXT_LABELS] = tf.sparse.to_dense( + tf.sets.difference( + features[modalities.NEGATIVE_TEXT_LABELS][tf.newaxis, ...], + features[modalities.INSTANCE_TEXT_LABELS][tf.newaxis, ...]))[0] + + if modalities.NOT_EXHAUSTIVE_LABELS in features: + features[modalities.NOT_EXHAUSTIVE_LABELS] = _merge_instances( + features[modalities.NOT_EXHAUSTIVE_LABELS], + tf.not_equal(features[modalities.NOT_EXHAUSTIVE_LABELS], -1)) + + if modalities.CROWD in features: + features[modalities.CROWD] = _merge_instances( + features[modalities.CROWD], + tf.not_equal(features[modalities.CROWD], -1)) + + # Merge boxes: + if modalities.BOXES in features: + features[modalities.BOXES] = _box_tiles_to_mosaic( + features[modalities.BOXES], self.mosaic_size, instance_padding_mask) + + if image_ops.SEED_KEY in features: + features[image_ops.SEED_KEY] = features[image_ops.SEED_KEY][0] + + return features + + +def _image_tiles_to_mosaic(image: tf.Tensor, mosaic_size: int) -> tf.Tensor: + """Reshapes a batch of image tiles into a mosaic.""" + assert len(image.shape) == 4, ( + f'Expect shape [num_tiles, h, w, c], got {image.shape}.') + + # Get dynamic image shape: + shape = tf.shape(image) + num_tiles, h, w, c = shape[0], shape[1], shape[2], shape[3] + + tf.debugging.assert_equal( + num_tiles, mosaic_size**2, + 'The first dimension must contain exactly self.mosaic_size ** 2 ' + f'elements, but got images of shape {image.shape}') + + image = tf.reshape(image, [mosaic_size, mosaic_size, h, w, c]) + image = tf.transpose(image, [0, 2, 1, 3, 4]) + image = tf.reshape(image, [h * mosaic_size, w *mosaic_size, c]) + return image + + +def _box_tiles_to_mosaic(boxes: tf.Tensor, mosaic_size: int, + padding_mask: tf.Tensor) -> tf.Tensor: + """Reshapes a batch of per-tile boxes into boxes for a mosaic.""" + assert len(boxes.shape) == 3, ( + 'Expect shape [num_tiles, n, 4], got {image.shape}.') + + num_tiles = boxes.shape[0] + assert num_tiles == mosaic_size**2, ( + 'The first dimension must contain exactly self.mosaic_size ** 2 ' + f'elements, but got boxes of shape {boxes.shape}') + + # Get offsets by which boxes must be shifted at each tile: + x_offset, y_offset = tf.meshgrid( + range(mosaic_size), range(mosaic_size), indexing='xy') + x_offset = tf.cast(tf.reshape(x_offset, [num_tiles, 1, 1]), tf.float32) + y_offset = tf.cast(tf.reshape(y_offset, [num_tiles, 1, 1]), tf.float32) + + # Shift boxes by the tile offsets: + y0, x0, y1, x1 = tf.split(boxes, 4, axis=-1) + boxes = tf.concat( + [y0 + y_offset, x0 + x_offset, y1 + y_offset, x1 + x_offset], axis=-1) + + # Reshape from [num_tiles, n, 4] to [num_tiles * n, 4]: + boxes = tf.reshape(boxes, [-1, 4]) + padding_mask = tf.reshape(padding_mask, [-1]) + + # Remove padding instances: + boxes = boxes[padding_mask] + + # Renormalize boxes: + return boxes / mosaic_size + + +def _merge_instances(labels: tf.Tensor, padding_mask: tf.Tensor) -> tf.Tensor: + """Combine a batch of padded instance labels into a single-example label.""" + tf.debugging.assert_equal(tf.shape(labels), tf.shape(padding_mask)) + labels = tf.reshape(labels, [-1]) + padding_mask = tf.reshape(padding_mask, [-1]) + return labels[padding_mask] diff --git a/scenic/projects/owl_vit/preprocessing/transforms.py b/scenic/projects/owl_vit/preprocessing/transforms.py new file mode 100644 index 0000000000000000000000000000000000000000..e57b3f5d868edd28dd2b0313b67b374ea27c377d --- /dev/null +++ b/scenic/projects/owl_vit/preprocessing/transforms.py @@ -0,0 +1,297 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Transform functions for preprocessing.""" + +from typing import Any, Optional, Sequence, Tuple, Union + +import tensorflow as tf + + +SizeTuple = Tuple[tf.Tensor, tf.Tensor] # (height, width). +Self = Any + +PADDING_VALUE = -1 +PADDING_VALUE_STR = b"" + + +def get_padding_value(dtype): + """Helper function for determing datatype-appropriate padding values.""" + if dtype in (tf.int32, tf.int64): + return PADDING_VALUE + elif dtype == tf.string: + return PADDING_VALUE_STR + return None + + +def get_box_area( + boxes: tf.Tensor, image_size: Optional[SizeTuple] = None) -> tf.Tensor: + """Calculate area using box coordinates. + + Arguments: + boxes: Relative box coordinates. + image_size: If provided, size of the image to use for calculating the + absolute box area. + + Returns: + Box area. + """ + box_height = boxes[..., 2] - boxes[..., 0] + box_width = boxes[..., 3] - boxes[..., 1] + area = box_height * box_width + + if image_size is not None: + image_height, image_width = image_size + image_height = tf.cast(image_height, area.dtype) + image_width = tf.cast(image_width, area.dtype) + area *= image_height * image_width + return area + + +def box_iou(boxes1: tf.Tensor, boxes2: tf.Tensor, eps=1e-6) -> Tuple[ + tf.Tensor, tf.Tensor]: + """Computes IoU (Intesection over Union) between two sets of boxes. + + See https://en.wikipedia.org/wiki/Jaccard_index for definition and visual + example of IoU for bounding boxes. + + Boxes are in [xmin, ymin, xmax, ymax] format. + + Args: + boxes1: Bounding-boxes in shape [bs, n, 4]. + boxes2: Bounding-boxes in shape [bs, m, 4]. + eps: Small floating point number used to avoid division by zero. + + Returns: + Pairwise IoU and union matrices of shape [bs, n, m]. + """ + + # First, compute box areas. These will be used later for computing the + # union. + width_height1 = boxes1[..., 2:] - boxes1[..., :2] + area1 = width_height1[..., 0] * width_height1[..., 1] # [bs, n] + + width_height2 = boxes2[..., 2:] - boxes2[..., :2] + area2 = width_height2[..., 0] * width_height2[..., 1] # [bs, m] + + # Compute pairwise top-left and bottom-right corners of the intersection + # of the boxes. + left_top = tf.maximum(boxes1[..., :, None, :2], + boxes2[..., None, :, :2]) # [bs, n, m, 2]. + right_bottom = tf.minimum(boxes1[..., :, None, 2:], + boxes2[..., None, :, 2:]) # [bs, n, m, 2]. + + # Intersection = area of the box defined by [left_top, right_bottom]. + width_height = tf.maximum(right_bottom - left_top, 0.0) # [bs, n, m, 2]. + intersection = width_height[..., 0] * width_height[..., 1] # [bs, n, m]. + + # Union = sum of areas - intersection. + union = area1[..., :, None] + area2[..., None, :] - intersection + + iou = intersection / (union + eps) + + return iou, union + + +def get_within_bounds_crop_slice( + begin: tf.Tensor, + size: tf.Tensor, + image_shape: Union[tf.TensorShape, tf.Tensor] +) -> Tuple[tf.Tensor, tf.Tensor]: + """Computes a within bounds crop slice from slice & image shape. + + Given a potentially outside of image bound crop slice, return a crop slice + that strictly fall within the bound of the image. + + Args: + begin: Beginning of the slice. Assumed to have 3 elements (W, H, C) with + the channel slice starting at 0. + size: Size of the slice. Assumed to have 3 elemets (W, H, C) with the + channel slice covering the entire shape (i.e. equal to -1). + image_shape: Size of the image being sliced. + + Returns: + Updated begin and size that strictly fall within the image. + """ + crop_ymin, crop_xmin, _ = tf.unstack(begin, axis=0) + crop_height, crop_width, _ = tf.unstack(size, axis=0) + crop_ymax = crop_ymin + crop_height + crop_xmax = crop_xmin + crop_width + ymax = tf.minimum(crop_ymax, image_shape[0]) + xmax = tf.minimum(crop_xmax, image_shape[1]) + ymin, xmin, _ = tf.unstack(tf.maximum(begin, 0), axis=0) + begin = tf.stack([ymin, xmin, 0], axis=0) + size = tf.stack([ymax - ymin, xmax - xmin, -1], axis=0) + return begin, size + + +def get_padding_params_from_crop_slice( + begin: tf.Tensor, size: tf.Tensor +) -> Tuple[tf.Tensor, tf.Tensor, tf.Tensor, tf.Tensor]: + """Computes padding parameters for (possibly out of bounds) crop slice. + + Given a crop slice that potentially falls outside of the image, calculates + offset and size for the two spatial dimensions. + + Args: + begin: Beginning of the slice. Assumed to have 3 elements (W, H, C) with + the channel slice starting at 0. + size: Size of the slice. Assumed to have 3 elemets (W, H, C) with the + channel slice covering the entire shape (i.e. equal to -1). + + Returns: + Offset and size for height and width. + """ + crop_ymin, crop_xmin, _ = tf.unstack(begin, axis=0) + crop_height, crop_width, _ = tf.unstack(size, axis=0) + ymin, xmin, _ = tf.unstack(tf.maximum(begin, 0), axis=0) + offset_y = tf.maximum(0, ymin - crop_ymin) + offset_x = tf.maximum(0, xmin - crop_xmin) + return offset_y, offset_x, crop_height, crop_width + + +def get_dynamic_size(feature: tf.Tensor, + dtype=tf.int32, + has_channel_dim: bool = True) -> SizeTuple: + """Returns dynamic size (height, width) of image, video, or mask.""" + if feature.dtype.name == "string": # Encoded jpeg. + shape = tf.io.extract_jpeg_shape(feature) + else: + shape = tf.shape(feature) + if has_channel_dim: + assert shape.shape[0] >= 3, "Expected: [..., height, width, channels]" + shape = shape[-3:-1] + else: + assert shape.shape[0] >= 2, "Expected: [..., height, width]" + shape = shape[-2:] + h = tf.cast(shape[0], dtype=dtype) + w = tf.cast(shape[1], dtype=dtype) + return h, w + + +def crop_or_pad_boxes(boxes: tf.Tensor, top: int, left: int, height: int, + width: int, h_orig: tf.Tensor, w_orig: tf.Tensor): + """Transforms the relative box coordinates according to the frame crop. + + Note that, if height/width are larger than h_orig/w_orig, this function + implements the equivalent of padding. + + Args: + boxes: Tensor of bounding boxes with shape (..., 4). + top: Top of crop box in absolute pixel coordinates. + left: Left of crop box in absolute pixel coordinates. + height: Height of crop box in absolute pixel coordinates. + width: Width of crop box in absolute pixel coordinates. + h_orig: Original image height in absolute pixel coordinates. + w_orig: Original image width in absolute pixel coordinates. + Returns: + Boxes tensor with same shape as input boxes but updated values. + """ + # Bounding boxes: [num_instances, 4] + assert len(boxes.shape) == 2 + assert boxes.shape[-1] == 4 + seq_len = tf.shape(boxes)[0] + not_padding = tf.reduce_any(boxes != PADDING_VALUE, axis=-1) + + # Transform the box coordinates. + a = tf.cast(tf.stack([h_orig, w_orig]), tf.float32) + b = tf.cast(tf.stack([top, left]), tf.float32) + c = tf.cast(tf.stack([height, width]), tf.float32) + boxes = tf.reshape((tf.reshape(boxes, (seq_len, 1, 2, 2)) * a - b) / c, + (seq_len, 1, 4)) + + # Filter the valid boxes. + boxes = tf.minimum(tf.maximum(boxes, 0.0), 1.0) + boxes = tf.reshape(boxes, (seq_len, 4)) + boxes = tf.where(not_padding[..., tf.newaxis], boxes, PADDING_VALUE) + + return boxes + + +def crop_or_pad_sequence(seq, length, allow_crop=True): + """Crops or pads a sequence of scalars.""" + paddings = [[0, length - tf.shape(seq)[0]]] + [(0, 0)] * (len(seq.shape) - 1) + if allow_crop: + paddings = tf.maximum(paddings, 0) + if seq.dtype == tf.string: + padded = tf.pad(seq, paddings, constant_values="") + elif seq.dtype == tf.bool: + padded = tf.pad(seq, paddings, constant_values=False) + else: + padded = tf.pad(seq, paddings, constant_values=-1) + if allow_crop: + padded = padded[:length] + padded.set_shape([length] + seq.shape[1:]) + return padded + + +def get_paddings(image_shape: tf.Tensor, + size: Union[int, Tuple[int, int], Sequence[int]], + pre_spatial_dim: Optional[int] = None, + allow_crop: bool = True, + mode: str = "bottom_right") -> tf.Tensor: + """Returns paddings tensors for tf.pad operation. + + Args: + image_shape: The shape of the Tensor to be padded. The shape can be + [..., N, H, W, C] or [..., H, W, C]. The paddings are computed for H, W + and optionally N dimensions. + size: The total size for the H and W dimensions to pad to. + pre_spatial_dim: Optional, additional padding dimension before the spatial + dimensions. It is only used if given and if len(shape) > 3. + allow_crop: If size is bigger than requested max size, padding will be + negative. If allow_crop is true, negative padding values will be set to 0. + mode: Padding mode, "bottom_right" or "central". + + Returns: + Paddings the given tensor shape. + """ + assert image_shape.shape.rank == 1 + if isinstance(size, int): + size = (size, size) + h, w = image_shape[-3], image_shape[-2] + if mode == "bottom_right": + top, left = 0, 0 + elif mode == "central": + top, left = (size[0] - h) // 2, (size[1] - w) // 2 + else: + raise ValueError(f"Unknown padding mode: {mode}") + # Spatial padding. + paddings = [ + tf.stack([top, size[0] - h - top]), + tf.stack([left, size[1] - w - left]), + tf.stack([0, 0]) + ] + ndims = image_shape.shape[0] # pytype: disable=wrong-arg-types + # Prepend padding for temporal dimension or number of instances. + if pre_spatial_dim is not None and ndims > 3: + paddings = [[0, pre_spatial_dim - image_shape[-4]]] + paddings + # Prepend with non-padded dimensions if available. + if ndims > len(paddings): + paddings = [[0, 0]] * (ndims - len(paddings)) + paddings + if allow_crop: + paddings = tf.maximum(paddings, 0) + return tf.stack(paddings) + + +def assert_boxes_are_relative(boxes: tf.Tensor): + """Checks that boxes conform to the relative (normalized) format.""" + tf.debugging.assert_type( + boxes, tf.float32, + f"Expected boxes to be relative (float dtype), got {boxes.dtype}.") + not_padding = tf.reduce_any(boxes != -1, axis=-1) + tf.debugging.assert_greater_equal( + boxes[not_padding], 0., "Relative boxes must be >= 0.") + tf.debugging.assert_less_equal( + boxes[not_padding], 1., "Relative boxes must be <= 1.") diff --git a/scenic/projects/owl_vit/requirements.txt b/scenic/projects/owl_vit/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..3dc5cd48e0f6aa1dab74eb2a97e9dbfd6c51d7a5 --- /dev/null +++ b/scenic/projects/owl_vit/requirements.txt @@ -0,0 +1,11 @@ +# For CLIP: +torch>=1.10.2 +tqdm +git+https://github.com/openai/CLIP.git + +# COCO and LVIS API for evaluation: +git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI +lvis + +# To import Sinkhorn matcher: +ott-jax<0.4.0 diff --git a/scenic/projects/owl_vit/tests/__init__.py b/scenic/projects/owl_vit/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/owl_vit/tests/checkpoint_loading_test.py b/scenic/projects/owl_vit/tests/checkpoint_loading_test.py new file mode 100644 index 0000000000000000000000000000000000000000..833184fee68ba44c0c453bc3b5d7d3b64ca426db --- /dev/null +++ b/scenic/projects/owl_vit/tests/checkpoint_loading_test.py @@ -0,0 +1,65 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests loading of OWL-ViT checkpoints for real configs..""" +import functools +import inspect +from absl.testing import absltest +from absl.testing import parameterized +import jax +import jax.numpy as jnp +from scenic.projects.owl_vit import configs +from scenic.projects.owl_vit import models + + +class CheckpointLoadingTest(parameterized.TestCase): + """Tests that checkpoints can be loaded.""" + + @parameterized.named_parameters( + *inspect.getmembers(configs, inspect.ismodule) + ) + def test_checkpoint_loading(self, config_module): + """Tests that real checkpoints can be loaded and used with the model.""" + # We test the canonical checkpoint if there is one: + try: + config = config_module.get_config(init_mode='canonical_checkpoint') + except TypeError: + config = config_module.get_config() + + module = models.TextZeroShotDetectionModule( + body_configs=config.model.body, + normalize=config.model.normalize, + box_bias=config.model.box_bias, + ) + + # Parameter initialization: + batch_size = 8 + img_size = config.dataset_configs.input_size + num_queries = 10 + seq_len = config.dataset_configs.max_query_length + images = jnp.ones((batch_size, img_size, img_size, 3)) + texts = jnp.ones((batch_size, num_queries, seq_len), dtype=jnp.int32) + init = functools.partial(module.init, train=False) + init_params = jax.eval_shape(init, jax.random.PRNGKey(0), images, texts) + params = module.bind({}).load(init_params, config.init_from) + + # Test running the model with the parameters: + fn = functools.partial(module.apply, train=False) + out = jax.eval_shape(fn, {'params': params}, images, texts) + + self.assertContainsSubset({'pred_boxes', 'pred_logits'}, out.keys()) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/owl_vit/tests/layers_test.py b/scenic/projects/owl_vit/tests/layers_test.py new file mode 100644 index 0000000000000000000000000000000000000000..7f6faeb347ebd2eade9f872e2ab61b99d1adbf8f --- /dev/null +++ b/scenic/projects/owl_vit/tests/layers_test.py @@ -0,0 +1,94 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests OWL-ViT layers.""" +from absl.testing import absltest +from absl.testing import parameterized +import jax +import jax.numpy as jnp +import ml_collections +from scenic.projects.owl_vit import layers + + +class LayersTest(parameterized.TestCase): + """Tests for ViT+ layers.""" + + @parameterized.parameters((1, 2), (2, 4), (3, 6)) + def test_mlp_block(self, num_layers, expected_num_weights): + batch_size, in_dim, out_dim = 8, 20, 30 + mlp_configs = {'out_dim': out_dim, 'num_layers': num_layers} + mlp = layers.PredictorMLP(**mlp_configs) + inputs = jnp.ones((batch_size, in_dim)) + out, variables = mlp.init_with_output(jax.random.PRNGKey(0), inputs) + self.assertEqual(out.shape, (batch_size, out_dim)) + weights, _ = jax.tree_util.tree_flatten(variables) + self.assertLen(weights, expected_num_weights) + + def test_class_predictor(self): + """Tests class predictor.""" + batch_size, num_queries, img_size, patch_size = 8, 10, 224, 32 + side_patches = img_size // patch_size + num_patches = side_patches ** 2 + img_emb_dim, out_dim = 64, 100 + img_emb = jnp.ones((batch_size, num_patches, img_emb_dim)) + txt_emb = jnp.ones((batch_size, num_queries, out_dim)) + label_mask = jnp.ones((batch_size, num_queries), dtype=jnp.int32) + + class_predictor = layers.ClassPredictor(out_dim=out_dim) + outputs, variables = class_predictor.init_with_output( + jax.random.PRNGKey(0), img_emb, txt_emb, label_mask) + self.assertEqual(outputs['pred_logits'].shape, + (batch_size, num_patches, num_queries)) + num_weights = jax.tree_util.tree_flatten(variables)[0] + self.assertLen(num_weights, 6) + + def test_clip_image_text_embedder(self): + """Tests image and text embedding with a CLIP model.""" + batch_size, num_queries, seq_len, img_size, patch_size = 8, 10, 15, 224, 32 + side_patches = img_size // patch_size + embed_configs = ml_collections.ConfigDict(dict( + type='clip', + variant='vit_b32', + merge_class_token='drop', + text_stochastic_droplayer_rate=0.1, + vision_stochastic_droplayer_rate=0.1, + )) + images = jnp.ones((batch_size, img_size, img_size, 3)) + texts = jnp.ones((batch_size, num_queries, seq_len), dtype=jnp.int32) + rng = jax.random.PRNGKey(0) + + embedder = layers.ClipImageTextEmbedder(embed_configs) + + with self.subTest(name='images_and_text'): + (img, txt), _ = embedder.init_with_output(rng, images=images, texts=texts) + self.assertEqual(img.shape, (batch_size, side_patches**2, 768)) + self.assertEqual(txt.shape, (batch_size, num_queries, 512)) + + with self.subTest(name='only_images'): + (img, _), _ = embedder.init_with_output(rng, images=images, texts=None) + self.assertEqual(img.shape, (batch_size, side_patches**2, 768)) + + with self.subTest(name='only_text'): + (_, txt), _ = embedder.init_with_output(rng, images=None, texts=texts) + self.assertEqual(txt.shape, (batch_size, num_queries, 512)) + + +def _num_layers_and_params(params): + """Returns number of weight layers and total number of params in params.""" + leaves = jax.tree_util.tree_leaves(params) + return len(leaves), sum([jnp.prod(jnp.array(v.shape)) for v in leaves]) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/owl_vit/tests/models_test.py b/scenic/projects/owl_vit/tests/models_test.py new file mode 100644 index 0000000000000000000000000000000000000000..b85b8e2166469427e3c04ed6ef49ed209cd8a485 --- /dev/null +++ b/scenic/projects/owl_vit/tests/models_test.py @@ -0,0 +1,66 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests OWL-ViT models.""" +import functools +from absl.testing import absltest +from absl.testing import parameterized +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.projects.owl_vit import models + +# Config for a tiny transformer for testing. +TINY_VIT_CONFIG = {'depth': 2, 'width': 64, 'mlp_dim': 256, 'num_heads': 2} + + +class TextZeroShotDetectionModuleTest(parameterized.TestCase): + """Tests for TextZeroShotDetectionModule.""" + + @parameterized.parameters((224, True), (224, False), (1333, True)) + def test_clip_zero_shot_detection_module(self, img_size, normalize): + """Tests CLIP detection model construction and application.""" + batch_size, num_queries, seq_len, patch_size = 8, 10, 16, 32 + side_patches = int(np.ceil(img_size / patch_size)) + body_configs = ml_collections.ConfigDict(dict( + type='clip', + variant='vit_b32', + merge_class_token='drop', + text_stochastic_droplayer_rate=0.1, + vision_stochastic_droplayer_rate=0.1, + )) + images = jnp.ones((batch_size, img_size, img_size, 3)) + texts = jnp.ones((batch_size, num_queries, seq_len), dtype=jnp.int32) + + model = models.TextZeroShotDetectionModule( + body_configs, + normalize=normalize) + + fn = functools.partial(model.init_with_output, train=False) + out, variables = jax.eval_shape(fn, jax.random.PRNGKey(0), images, texts) + + self.assertCountEqual(variables.keys(), ['params']) + expected_shapes = { + 'feature_map': (batch_size, side_patches, side_patches, 768), + 'pred_boxes': (batch_size, side_patches**2, 4), + 'pred_logits': (batch_size, side_patches**2, num_queries), + 'class_embeddings': (batch_size, side_patches**2, 512), + 'query_embeddings': (batch_size, num_queries, 512) + } + self.assertEqual(expected_shapes, jax.tree_util.tree_map(jnp.shape, out)) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/owl_vit/tests/utils_test.py b/scenic/projects/owl_vit/tests/utils_test.py new file mode 100644 index 0000000000000000000000000000000000000000..d61946e3bbc4b24fc29c9c1726e8fc94d1f75d1d --- /dev/null +++ b/scenic/projects/owl_vit/tests/utils_test.py @@ -0,0 +1,117 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests OWL-ViT utils.""" +from absl.testing import absltest +from absl.testing import parameterized +import jax +import jax.numpy as jnp +import numpy as np +from scenic.projects.owl_vit import utils + +# Config for a tiny transformer for testing. +TINY_VIT_CONFIG = {'depth': 2, 'width': 64, 'mlp_dim': 256, 'num_heads': 2} + + +class UtilsTest(parameterized.TestCase): + """Tests for ViT+ utilities.""" + + @parameterized.parameters( + ((2, 224, 224, 3), (2, 49, 50), (2, 7, 7, 50)), # patch_size: 32 + ((2, 1333, 1333, 3), (2, 7056, 50), (2, 84, 84, 50)), # patch_size: 16 + ) + def test_seq2img(self, img_shape, features_shape, expected_shape): + images = jnp.ones(img_shape) + features = jnp.ones(features_shape) + features_2d = utils.seq2img(images, features) + self.assertEqual(expected_shape, features_2d.shape) + + def test_normalized_grid_corner_coordinates(self): + feature_map = jnp.ones((2, 3, 3, 10)) + corner_coords = utils.normalized_grid_corner_coordinates(feature_map, None) + expected_coords = jnp.array( + [[0.33333334, 0.33333334], [0.6666667, 0.33333334], + [1., 0.33333334], [0.33333334, 0.6666667], + [0.6666667, 0.6666667], [1., 0.6666667], + [0.33333334, 1.], [0.6666667, 1.], + [1., 1.]]) + np.testing.assert_allclose(expected_coords, corner_coords, atol=1e-5) + + def test_compute_box_bias(self): + feature_map = jnp.ones((2, 3, 3, 10)) + box_bias = utils.compute_box_bias(feature_map) + expected_bias = jnp.array( + [[-0.69299614, -0.69299614, -0.692997, -0.692997], + [0.692996260, -0.69299614, -0.692997, -0.692997], + [9.210265000, -0.69299614, -0.692997, -0.692997], + [-0.69299614, 0.692996260, -0.692997, -0.692997], + [0.692996260, 0.692996260, -0.692997, -0.692997], + [9.210265000, 0.692996260, -0.692997, -0.692997], + [-0.69299614, 9.210265000, -0.692997, -0.692997], + [0.692996260, 9.210265000, -0.692997, -0.692997], + [9.210265000, 9.210265000, -0.692997, -0.692997]],) + np.testing.assert_allclose(expected_bias, box_bias, atol=1e-5) + + def test_compute_box_bias_location(self): + feature_map = jnp.ones((2, 3, 3, 10)) + box_bias = utils.compute_box_bias(feature_map, kind='location') + expected_bias = jnp.array( + [[-0.69299614, -0.69299614, 0.0, 0.0], + [0.692996260, -0.69299614, 0.0, 0.0], + [9.210265000, -0.69299614, 0.0, 0.0], + [-0.69299614, 0.692996260, 0.0, 0.0], + [0.692996260, 0.692996260, 0.0, 0.0], + [9.210265000, 0.692996260, 0.0, 0.0], + [-0.69299614, 9.210265000, 0.0, 0.0], + [0.692996260, 9.210265000, 0.0, 0.0], + [9.210265000, 9.210265000, 0.0, 0.0]],) + np.testing.assert_allclose(expected_bias, box_bias, atol=1e-5) + + def test_compute_box_bias_size(self): + feature_map = jnp.ones((2, 3, 3, 10)) + box_bias = utils.compute_box_bias(feature_map, kind='size') + expected_bias = jnp.array( + [[0.0, 0.0, -0.692997, -0.692997], + [0.0, 0.0, -0.692997, -0.692997], + [0.0, 0.0, -0.692997, -0.692997], + [0.0, 0.0, -0.692997, -0.692997], + [0.0, 0.0, -0.692997, -0.692997], + [0.0, 0.0, -0.692997, -0.692997], + [0.0, 0.0, -0.692997, -0.692997], + [0.0, 0.0, -0.692997, -0.692997], + [0.0, 0.0, -0.692997, -0.692997]],) + np.testing.assert_allclose(expected_bias, box_bias, atol=1e-5) + + @parameterized.parameters((0.1, -2.1972246), (0.01, -4.59512)) + def test_init_classification_bias(self, prior_prob, expected_init_bias): + bias = jnp.zeros((1)) + init_bias = utils.init_classification_bias(bias, prior_prob) + self.assertAlmostEqual(expected_init_bias, init_bias[0]) + + def test_dot_product_similarity(self): + b, n, m, d = 2, 3, 4, 5 + rng = jax.random.PRNGKey(0) + rng_x, rng_y = jax.random.split(rng) + x = jax.random.uniform(rng_x, (b, n, d)) + y = jax.random.uniform(rng_y, (b, m, d)) + + self_sim = utils.dot_product_similarity(x, x) + self.assertEqual(self_sim.shape, (b, n, n)) + + cross_sim = utils.dot_product_similarity(x, y) + self.assertEqual(cross_sim.shape, (b, n, m)) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/owl_vit/trainer.py b/scenic/projects/owl_vit/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..16ae3f98b34b46fedfc0f14b2acf69965ef01095 --- /dev/null +++ b/scenic/projects/owl_vit/trainer.py @@ -0,0 +1,484 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training script for OWL-ViT.""" + +from concurrent import futures +import functools +import time +from typing import Any + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +import flax +from flax import jax_utils +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.projects.owl_vit import utils +from scenic.train_lib import optax as scenic_optax +from scenic.train_lib import train_utils + + +def get_train_step(flax_model, + loss_and_metrics_fn, + config, + debug=False): + """Runs a single step of training. + + Given the state of the training and a batch of data, the train step computes + the loss and updates the parameters of the model. + + Args: + flax_model: Flax model (an instance of nn.Module). + loss_and_metrics_fn: A function that given model predictions, a batch, and + parameters of the model calculates the loss as well as metrics. + config: Experiment config dictionary. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Train step function that takes a train_state and batch and returns + new_train_state and metrics. + """ + # Get shorthands from the config. + optax_grad_pmean = config.optimizer.get('optax_grad_pmean', False) + per_example_clipping = config.optimizer.get('per_example_clipping', False) + max_grad_norm = config.optimizer.get('max_grad_norm') + + def update_fn(train_state, grad, new_rng): + step = train_state.global_step + + # In case of per-example gradients, we need to aggregate them after + # clipping. This is implemented as an Optax tx. + if not per_example_clipping: + assert not optax_grad_pmean, ('Optax gradient aggregation should only be' + ' used with per-example gradients.') + + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + updates, new_opt_state = train_state.tx.update( + grad, train_state.opt_state, train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + new_train_state = train_state.replace( + global_step=step + 1, + opt_state=new_opt_state, + params=new_params, + rng=new_rng) + return new_train_state, grad + + def train_step(train_state, batch): + + def grad_fn(inputs): + batch, rng = inputs['batch'], inputs['rng'] + def loss_fn(params): + # Bind the rng to the host/device we are on. + model_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + kwargs = {'text_queries': batch['queries']} + + predictions = flax_model.apply( + {'params': params, **train_state.model_state}, + batch['inputs'], + train=True, + debug=debug, + rngs={'dropout': model_rng}, + **kwargs) + + return loss_and_metrics_fn(predictions, batch, model_params=params) + + compute_gradient_fn = jax.value_and_grad(loss_fn, has_aux=True) + (_, metrics), grad = compute_gradient_fn(train_state.params) + + # Note: zero-ing out frozen gradients changes the L2 norm. Clipping is + # done inside Optax before zero-inng out frozen weights. + grad = scenic_optax.replace_frozen(config.schedule, grad, 0.) + metrics['l2_grads_orig'] = (utils.l2_norm(grad), 1) + return grad, metrics + + if per_example_clipping and max_grad_norm is not None: + # For per-example clipping we produce per-example rngs. + rngs = jax.random.split(train_state.rng, num=batch['inputs'].shape[0] + 1) + new_rng, model_rng = rngs[0], rngs[1:] + # We add an additional dimension which wil serve as the batch dimension + # for single examples when applying scan or vmap. + batch = jax.tree_util.tree_map(lambda x: x[:, jnp.newaxis], batch) + inp = {'batch': batch, 'rng': model_rng} + grad, metrics = jax.vmap(grad_fn, 0)(inp) + else: + # Without per example clipping we can just compute the gradient on the + # entire batch. + new_rng, model_rng = jax.random.split(train_state.rng) + grad, metrics = grad_fn({'batch': batch, 'rng': model_rng}) + + new_train_state, g = update_fn(train_state, grad, new_rng) + metrics['l2_grads'] = (utils.l2_norm(g), 1) + metrics['l2_params'] = (utils.l2_norm(new_train_state.params), 1) + return new_train_state, metrics + + return train_step + + +def get_eval_step(flax_model, + loss_and_metrics_fn, + debug=False): + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Args: + flax_model: Flax model (an instance of nn.Module). + loss_and_metrics_fn: A function that given model predictions, a batch, and + parameters of the model calculates the loss as well as metrics. + debug: bool; Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Eval step function which returns validation metrics. + """ + + def metrics_fn(train_state, batch, predictions): + _, metrics = loss_and_metrics_fn( + predictions, batch, model_params=train_state.params) + return metrics + + def eval_step(train_state, batch): + predictions = flax_model.apply( + {'params': train_state.params, **train_state.model_state}, + batch['inputs'], + train=False, + debug=debug, + text_queries=batch['queries']) + return metrics_fn(train_state, batch, predictions) + + return eval_step + + +def train(*, rng: jnp.ndarray, config: ml_collections.ConfigDict, + model_cls: Any, dataset: dataset_utils.Dataset, workdir: str, + writer: metric_writers.MetricWriter): + """Main training loop. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: JAX PRNGKey. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current + global_step, rng, and the optimizer), train_summary and eval_summary which + are a dict of metrics. + """ + lead_host = jax.process_index() == 0 + # The pool is used to perform async evaluation on the CPU. + pool = futures.ThreadPoolExecutor(max_workers=2) + + # Build the loss_and_metrics_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + + input_spec = [(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32)), + (dataset.meta_data['query_shape'], jnp.int32)] + + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=input_spec, + config=config, + rngs=init_rng) + + if config.prior_prob: + params = flax.core.unfreeze(params) + bias_init = utils.init_classification_bias( + params['class_head']['logit_shift']['bias'], config.prior_prob) + params['class_head']['logit_shift']['bias'] = bias_init + params = flax.core.freeze(params) + + # Create optimizer & LR schedules. + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + schedule = scenic_optax.make_schedule(config.get('schedule')) + tx, sched_fns = scenic_optax.make(config.optimizer, schedule, params) + opt_state = jax.jit(tx.init, backend='cpu')(params) + sched_fns = [jax.jit(lr_fn, backend='cpu') for lr_fn in sched_fns] + + rng, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + params=params, + tx=tx, + opt_state=opt_state, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + + # Decide how to initialize training. Four options will be tried in this order: + # 1. Continue training run from an existing checkpoint in the workdir. + # 2. Resume training from a previous checkpoint, i.e. load both params and + # optimizer state (e.g. a cooldown job). + # 3. Initialize the model parameters from a checkpoint, but not the optimizer + # state (e.g. a fine-tuning job). + # 4. Train from scratch. + + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + + if start_step != 0: + # Option 1: + logging.info('Continuing from checkpoint in workdir: step=%s, workdir=%s', + start_step, workdir) + else: + # Option 2: Resume from previous training job: + if config.get('resume_from') is not None: + logging.info('Loading params and optimizer: %s', config.init_from) + checkpoint_path = config.resume_from.get('checkpoint_path') + train_state = checkpoints.restore_checkpoint( + checkpoint_path, target=train_state) + + # Option 3: Load only the parameters, e.g. for fine-tuning: + elif config.get('init_from') is not None: + logging.info('Loading params: %s', config.init_from) + init_config = config.init_from.copy_and_resolve_references() + # Delegate the actual loading to the model. `module.bind()` is needed to + # initialize submodules, which have their own `load` functions. + params = model.flax_model.bind({}).load( + train_state.params.unfreeze(), init_config) + train_state = train_state.replace(params=flax.core.freeze(params)) + + # Option 4: Train from scratch. + else: + logging.info('Training from scratch.') + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # do not keep a copy of the initial model + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step = get_train_step( + flax_model=model.flax_model, + loss_and_metrics_fn=model.loss_function, + config=config, + debug=config.debug_train) + + train_step_pmapped = jax.pmap( + train_step, axis_name='batch', donate_argnums=(0,)) + + ############### EVALUATION CODE ################# + + eval_step = get_eval_step( + flax_model=model.flax_model, + loss_and_metrics_fn=model.loss_function, + debug=config.debug_eval) + eval_step_pmapped = jax.pmap( + eval_step, axis_name='batch', donate_argnums=(1,)) + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + metrics_normalizer_fn = functools.partial( + utils.normalize_metrics_summary, + object_detection_loss_keys=model.loss_terms_weights.keys()) + + def evaluate(train_state, step, total_steps): + """Runs evaluation code.""" + # For final evaluation, always run over the entire validation set. + num_eval_steps = ( + total_eval_steps + if step == total_steps and not config.get('light_eval', False) + else steps_per_eval + ) + eval_metrics = [] + + for eval_step in range(num_eval_steps): + logging.info('Running eval step %d', eval_step) + eval_batch = next(dataset.valid_iter) + + with jax.profiler.TraceAnnotation('eval_step', step_num=step, _r=1): + eval_metrics.append( + train_utils.unreplicate_and_get( + eval_step_pmapped(train_state, eval_batch))) + + ############### LOG EVAL SUMMARY ############### + def log_fn(step, eval_metrics, writer, + metrics_normalizer_fn): + return train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + writer=writer, + metrics_normalizer_fn=metrics_normalizer_fn) + + # Note that we return a Future on a summary instead of the summary itself! + return pool.submit( + log_fn, + step=step, + eval_metrics=eval_metrics, + writer=writer, + metrics_normalizer_fn=metrics_normalizer_fn) + + ################################################### + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + log_summary_steps = config.get('log_summary_steps', 100) + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + + train_metrics, extra_training_logs, cpu_training_logs = [], [], [] + train_summary, eval_summary = None, None + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + + logging.info('Start training from step %d to %d.', start_step + 1, + total_steps + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, + writer=writer, + every_secs=None, + every_steps=log_summary_steps, + ) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + # Do the train step. + with jax.profiler.TraceAnnotation('train_step', step_num=step, _r=1): + train_state, t_metrics = train_step_pmapped(train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large metrics. An alternative is to set `log_summary_steps` to a small + # number, or to use `train_utils.unreplicate_and_get` here instead of + # right before writing summaries, but that means in each step, we have + # data transfer between tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + + for h in hooks: + h(step) + + # Additional training logs: time, learning rate, num parameters. + cpu_training_logs.append({ + f'learning_rate_{name}': lr_fn(step) + for name, lr_fn in zip(config.schedule.keys(), sched_fns)}) + + if ((step % log_summary_steps == 0) or (step == total_steps) + or (lead_host and chrono.warmup)): + ############### LOG TRAIN SUMMARY ############### + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + # Write summary: + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=cpu_training_logs + jax.tree_util.tree_map( + train_utils.unreplicate_and_get, extra_training_logs), + writer=writer, + metrics_normalizer_fn=metrics_normalizer_fn) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs, cpu_training_logs = [], [], [] + chrono.resume() + ################################################# + + if (step % log_eval_steps == 0) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + start_time = time.time() + with report_progress.timed('eval'): + eval_summary = evaluate(train_state, step, total_steps) + duration = time.time() - start_time + try: + ex = eval_summary.exception(1) if eval_summary else None + if ex is not None: + logging.error('Failed evaluation: %.4f sec.', duration) + raise ex # pylint: disable=raising-bad-type + logging.info('Done with evaluation: %.4f sec.', duration) + except futures.TimeoutError: + pass + writer.flush() + if step != total_steps: + eval_summary = None # Free up space. + chrono.resume() + + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + if lead_host: + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state = unrep_train_state.replace(metadata=metadata) + train_utils.save_checkpoint(workdir, unrep_train_state) + del unrep_train_state + chrono.resume() + + # Wait until computations are done before exiting. + if eval_summary is not None: + eval_summary = eval_summary.result() + pool.shutdown() + train_utils.barrier() + return train_state, train_summary, eval_summary diff --git a/scenic/projects/owl_vit/utils.py b/scenic/projects/owl_vit/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..9b06a578127e3a09c5eb92fedac65546d91f5fe8 --- /dev/null +++ b/scenic/projects/owl_vit/utils.py @@ -0,0 +1,203 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Model utils functions.""" +from typing import Any, Dict, List, Optional, Sequence, Tuple, Type, Union + +from absl import logging +from clu import preprocess_spec +from flax import core as flax_core +import jax +import jax.numpy as jnp +import numpy as np +from scenic.train_lib import train_utils +import scipy + + +def resize_posemb(posemb, target_size): + """Resizes position embeddings to new resolution.""" + if target_size == posemb.shape[-2]: + return posemb + posemb = jax.device_get(posemb) + ndim = posemb.ndim + if ndim == 3: + posemb = posemb[0] + + gs_old = int(np.sqrt(posemb.shape[0])) + gs_new = int(np.sqrt(target_size)) + + posemb_tok = None + if gs_old**2 == posemb.shape[0]: # No CLS token. + posemb_grid = posemb + elif gs_old**2 == posemb.shape[0] - 1: # Prepended CLS token. + posemb_tok, posemb_grid = posemb[:1], posemb[1:] + else: + raise ValueError( + 'Posemb shape must be a perfect square (maybe with CLS token), but ' + f'got posemb of shape {posemb.shape}.') + + logging.info('Posemb: grid-size from %s to %s', gs_old, gs_new) + posemb_grid = posemb_grid.reshape(gs_old, gs_old, -1) + + zoom = (gs_new / gs_old, gs_new / gs_old, 1) + posemb_grid = scipy.ndimage.zoom(posemb_grid, zoom, order=1) + posemb = posemb_grid.reshape(gs_new * gs_new, -1) + if posemb_tok is not None: + posemb = np.concatenate([posemb_tok, posemb], axis=0) + + return jnp.array(posemb[np.newaxis] if ndim == 3 else posemb) + + +def seq2img(original_img: jnp.ndarray, features: jnp.ndarray) -> jnp.ndarray: + """Reshapes 1D sequence to 2D image features.""" + if original_img.shape[1] == original_img.shape[2]: + h = w = int(np.sqrt(features.shape[1])) + else: + stride = np.ceil(np.sqrt( + original_img.shape[1] * original_img.shape[2] / features.shape[1])) + h = np.ceil(original_img.shape[1] / stride) + w = np.ceil(original_img.shape[2] / stride) + return features.reshape(features.shape[0], int(h), int(w), -1) + + +def normalized_grid_corner_coordinates( + feature_map: jnp.ndarray, padding_mask: Optional[jnp.ndarray] + ) -> jnp.ndarray: + """Computes normalized xy corner coords from feature_map or padding_mask.""" + # Note 1: it computes not the centers of grid patches, but the patch corner + # coordinates (for a grid patch from 0 to 0.1, it returns 0.1 not 0.05). + # Note 2: behavior is quite different for feature_map and padding_mask inputs. + if padding_mask is None: + assert feature_map.ndim == 4 # [B, H, W, C] + h, w = feature_map.shape[1:3] + xy = np.stack( + np.meshgrid(np.arange(1, w + 1), np.arange(1, h + 1)), + axis=-1).astype(np.float32) + xy /= np.array([w, h], np.float32) + else: + assert padding_mask.ndim == 3 # [B, H, W] + y = jnp.cumsum(padding_mask, axis=1) + x = jnp.cumsum(padding_mask, axis=2) + xy = jnp.stack([x / (x[:, :, -1:] + 1e-6), y / (y[:, -1:] + 1e-6)], axis=-1) + # Flatten h, w dimensions. + return xy.reshape(*(xy.shape[:-3] + (-1, 2))) + + +def compute_box_bias( + feature_map: jnp.ndarray, + padding_mask: Optional[jnp.ndarray] = None, + kind: str = 'both') -> jnp.ndarray: + """Computes spatial bias for grid.""" + # The box center is biased to its position on the feature grid: + xy = normalized_grid_corner_coordinates(feature_map, padding_mask) + xy = jnp.clip(xy, 0.0, 1.0) + + if kind in ['both', 'location']: + # Unnormalize xy (i.e., apply logit function/sigmoid^-1). + xy_bias = logit(xy) + else: + xy_bias = jnp.zeros_like(xy) + + if kind in ['both', 'size']: + # The box size is biased to the patch size: + wh_bias = logit(jnp.full_like(xy_bias, 1.0 / feature_map.shape[-2])) + else: + wh_bias = jnp.zeros_like(xy_bias) + + return jnp.concatenate([xy_bias, wh_bias], axis=-1) + + +def logit(x, eps=1e-4): + """Logit (inverse sigmoid) function (https://en.wikipedia.org/wiki/Logit).""" + return jnp.log(x + eps) - jnp.log1p(-x + eps) + + +def init_classification_bias(bias: jnp.ndarray, + prior_prob: float) -> jnp.ndarray: + return jnp.full(bias.shape, np.log(prior_prob) - np.log1p(-prior_prob)) + + +def dot_product_similarity(x: jnp.ndarray, + y: Optional[jnp.ndarray] = None) -> jnp.ndarray: + return jnp.einsum('bnd,bmd->bnm', x, x if y is None else y) + + +def l2_norm(tree): + """Computes the l2 norm of a pytree of arrays.""" + leaves = jax.tree_util.tree_leaves(tree) + return jnp.sqrt(sum(jnp.vdot(x, x) for x in leaves)) + + +def _sorted_items(x): + """Returns items of a dict ordered by keys.""" + return sorted(x.items()) + + +def _get_params_dict(inputs): + if isinstance(inputs, (dict, flax_core.FrozenDict)): + return flax_core.unfreeze(inputs) + else: + raise ValueError( + 'Can only traverse a flax Model instance or a nested dict, not ' + f'{type(inputs)}') + + +def find_op( + ops: Sequence[preprocess_spec.PreprocessOp], + target_op_class: Union[Type[preprocess_spec.PreprocessOp], + Tuple[Type[preprocess_spec.PreprocessOp], ...]] +) -> preprocess_spec.PreprocessOp: + """Find an op of the target class in a sequence of op instances.""" + result = [op for op in ops if isinstance(op, target_op_class)] + if len(result) == 1: + return result[0] + elif len(result) > 1: + raise ValueError( + f'Found multiple candidate ops, please disambiguate: {result}') + else: + raise ValueError(f'Op not found: {target_op_class}') + + +def normalize_metrics_summary(metrics_summary: Dict[str, Any], split: str, + object_detection_loss_keys: List[str]): + """Normalizes the metrics in the given metrics summary. + + Note that currently we only support metrics of the form 1/N sum f(x_i). + + Args: + metrics_summary: Each value is a sum of a calculated metric over all + examples. + split: Split for which we normalize the metrics. Used for logging. + object_detection_loss_keys: A loss key used for computing the object + detection loss. + + Returns: + Normalized metrics summary. + + Raises: + TrainingDivergedError: Due to observing a NaN in the metrics. + """ + for key, val in metrics_summary.items(): + metrics_summary[key] = val[0] / val[1] + if np.isnan(metrics_summary[key]): + raise train_utils.TrainingDivergedError( + 'NaN detected in {}'.format(f'{split}_{key}')) + + # Compute and add object_detection_loss using globally normalize terms: + object_detection_loss = 0 + for loss_term_key in object_detection_loss_keys: + object_detection_loss += metrics_summary[loss_term_key] + metrics_summary['object_detection_loss'] = object_detection_loss + + return metrics_summary diff --git a/scenic/projects/performer/performer.py b/scenic/projects/performer/performer.py new file mode 100644 index 0000000000000000000000000000000000000000..9a29a80ad82ff88a6b4e07370de383b7f67c91cb --- /dev/null +++ b/scenic/projects/performer/performer.py @@ -0,0 +1,1441 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Performers' attention library.""" + +# pylint: disable=invalid-name + +import abc +import functools +import math +from typing import (Any, Dict, Optional, Sequence, Tuple, Union) + +from flax.linen.linear import PrecisionLike +import jax +from jax import random +import jax.numpy as jnp +from scenic.projects.performer import subquadratic_attention as sat +from scenic.projects.performer import utils as ut + +RANDOM_FEATURES_SEED = 873457891289 +BIG_CONSTANT = 10000000.0 +PERFORMERS_RPE_SEED = 73829861893 +MAX_NB_PACKED_SEQS = 7 + +NUM_FT_PARAMS_PER_HEAD = 25 +NUM_FT_RAND_FEATURES = 64 + +PRNGKey = Any +Shape = Tuple[int, ...] +Dtype = Any +Array = Any + + +def linear_gaussian(x): + x_norm = jnp.linalg.norm(x, axis=-1, keepdims=True) + x_sq_norm = x_norm**2 + return jnp.exp(-0.5 * x_sq_norm) * jax.nn.relu( + x + ) # instead use RF based transformation + + +class RandomMatrix(abc.ABC): + r"""Abstract class providing a method for constructing 2D random arrays. + + Class is responsible for constructing 2D random arrays. + """ + + @abc.abstractmethod + def get_2d_array(self): + raise NotImplementedError('Abstract method') + + +class GaussianUnstructuredRandomMatrix(RandomMatrix): + + def __init__(self, nb_rows, nb_columns, key): + self.nb_rows = nb_rows + self.nb_columns = nb_columns + self.key = random.PRNGKey(key) + + def get_2d_array(self): + return random.normal(self.key, (self.nb_rows, self.nb_columns)) + + +class GaussianOrthogonalRandomMatrix(RandomMatrix): + r"""Class providing a method to create Gaussian orthogonal matrix. + + Class is responsible for constructing 2D Gaussian orthogonal arrays. + """ + + def __init__(self, nb_rows, nb_columns, key, scaling=0): + self.nb_rows = nb_rows + self.nb_columns = nb_columns + + rng = random.PRNGKey(key) + matrixrng, _ = random.split(rng) + + self.key = matrixrng + self.scaling = scaling + + def get_2d_array(self): + nb_full_blocks = int(self.nb_rows / self.nb_columns) + block_list = [] + rng = self.key + for _ in range(nb_full_blocks): + rng, rng_input = jax.random.split(rng) + unstructured_block = random.normal(rng_input, + (self.nb_columns, self.nb_columns)) + q, _ = jnp.linalg.qr(unstructured_block) + q = jnp.transpose(q) + block_list.append(q) + remaining_rows = self.nb_rows - nb_full_blocks * self.nb_columns + if remaining_rows > 0: + rng, rng_input = jax.random.split(rng) + unstructured_block = random.normal(rng_input, + (self.nb_columns, self.nb_columns)) + q, _ = jnp.linalg.qr(unstructured_block) + q = jnp.transpose(q) + block_list.append(q[:remaining_rows]) + final_matrix = jnp.vstack(block_list) + + if self.scaling == 0: + rng, rng_input = jax.random.split(rng) + multiplier = jnp.linalg.norm( + random.normal(rng_input, (self.nb_rows, self.nb_columns)), axis=1) + elif self.scaling == 1: + multiplier = jnp.sqrt(float(self.nb_columns)) * jnp.ones((self.nb_rows)) + else: + raise ValueError('Scaling must be one of {0, 1}. Was %s' % self.scaling) + + return jnp.matmul(jnp.diag(multiplier), final_matrix) + + +def noncausal_numerator(qs, ks, vs): + """Computes not-normalized FAVOR+ noncausal attention AV. + + Args: + qs: query_prime tensor of the shape [B...,L,H,M], where M stands for the + number of kernel features. + ks: key_prime tensor of the shape [B...,L,H,M], where M stands for the + number of kernel features. + vs: value tensor of the shape [B...,L,H,D]. + + Returns: + Not-normalized FAVOR+ noncausal attention AV. + """ + kvs = jnp.einsum('...lhm,...lhd->...hmd', ks, vs) + return jnp.einsum('...lhm,...hmd->...lhd', qs, kvs) + + +def noncausal_denominator(qs, ks): + """Computes FAVOR+ normalizer in noncausal attention AV. + + Args: + qs: query_prime tensor of the shape [B...,L,H,M], where M stands for the + number of kernel features. + ks: key_prime tensor of the shape [B...,L,H,M], where M stands for the + number of kernel features. + + Returns: + FAVOR+ normalizer in noncausal attention. + """ + ks_sum = jnp.sum(ks, axis=-3) + return jnp.einsum('...lhm,...hm->...lh', qs, ks_sum) + + +def masked_numerator(qs, ks, vs, masker, mask): + """Computes not-normalized FAVOR+ noncausal attention AV. + + Args: + qs: query_prime tensor of the shape [B...,L,H,M], where M stands for the + number of kernel features. + ks: key_prime tensor of the shape [B...,L,H,M], where M stands for the + number of kernel features. + vs: value tensor of the shape [B...,L,H,D]. + masker: object of the type masks.Mask applying masking mechanism using given + mask. + mask: compact encoding of the masking mechanism. + + Returns: + Not-normalized masked FAVOR+ attention. + """ + # See: Alg. 1 from https://arxiv.org/pdf/2107.07999.pdf. + f1_tensor = jnp.reshape( + jnp.einsum('...m,...d->...md', ks, vs), + (ks.shape[0], ks.shape[1], ks.shape[2], ks.shape[-1] * vs.shape[-1])) + d1_tensor = masker.act(mask, f1_tensor) + d1_tensor_unflattened = jnp.reshape( + d1_tensor, (d1_tensor.shape[0], d1_tensor.shape[1], d1_tensor.shape[2], + ks.shape[-1], vs.shape[-1])) + return jnp.einsum('...m,...md->...d', qs, d1_tensor_unflattened) + + +def masked_denominator(qs, ks, masker, mask): + """Computes masked FAVOR+ normalizer. + + Args: + qs: query_prime tensor of the shape [B...,L,H,M], where M stands for the + number of kernel features. + ks: key_prime tensor of the shape [B...,L,H,M], where M stands for the + number of kernel features. + masker: object of the type masks.Mask applying masking mechanism using given + mask. + mask: compact encoding of the masking mechanism. + + Returns: + FAVOR+ normalizer in masked FAVOR+ attention. + """ + d2_tensor = masker.act(mask, ks) + return jnp.einsum('...m,...m->...', qs, d2_tensor) + + +def generic_kernel_transformation(data, + is_query, + projection_matrix=None, + numerical_stabilizer=0.001, + normalize_data=True, + numerator_denominator_stabilizer=True, + activation_fn=jax.nn.relu): + r"""Computes features based on an activation (e.g. + + ReLU-kernel by default). + + By default, computes random features for the ReLU kernel from + https://arxiv.org/pdf/2009.14794.pdf. + + Args: + data: input data tensor of the shape [B..., L, H, D], where: B - batch + dimensions, L - attention dimension, H - heads, D - features. + is_query: indicates whether input data is a query or key tensor. + projection_matrix: random Gaussian matrix of shape [M, D], where M stands + for the number of random features and each D x D sub-block has pairwise + orthogonal rows. + numerical_stabilizer: small positive constant for numerical stability. + normalize_data: whether queries/keys should \sqrt{d}-normalized. + numerator_denominator_stabilizer: whether numerator and denominator in the + normalized attention computation should be numerically stabilized. + activation_fn: activation function to use for the kernel transformation. + Defaults to relu. + + Returns: + Corresponding kernel feature map. + """ + del is_query + del normalize_data + del numerator_denominator_stabilizer + if projection_matrix is None: + return activation_fn(data) + numerical_stabilizer + else: + ratio = 1.0 / jnp.sqrt(projection_matrix.shape[0]) + data_dash = ratio * jnp.einsum('...lhd,md->...lhm', data, projection_matrix) + kernel_feature_map = activation_fn(data_dash) + numerical_stabilizer + return kernel_feature_map + + +def exp_softmax_kernel_transformation(data, + is_query, + projection_matrix=None, + numerical_stabilizer=0.000001, + normalize_data=True, + numerator_denominator_stabilizer=True): + r"""Computes random features for the softmax kernel using FAVOR+ mechanism. + + Computes random features for the softmax kernel using FAVOR+ mechanism from + https://arxiv.org/pdf/2009.14794.pdf. + + Args: + data: input data tensor of the shape [B..., L, H, D], where: B - batch + dimensions, L - attention dimension, H - heads, D - features. + is_query: indicates whether input data is a query or key tensor. + projection_matrix: random Gaussian matrix of shape [M, D], where M stands + for the number of random features and each D x D sub-block has pairwise + orthogonal rows. + numerical_stabilizer: small positive constant for numerical stability. + normalize_data: whether queries/keys should \sqrt{d}-normalized. + numerator_denominator_stabilizer: whether numerator and denominator in the + normalized attention computation should be numerically stabilized. + + Returns: + Corresponding kernel feature map. + """ + + if projection_matrix is None: + raise ValueError('projection_matrix cannot be unspecified for softmax ' + 'kernel.') + if normalize_data: + data_normalizer = 1.0 / jnp.sqrt(jnp.sqrt(data.shape[-1])) + else: + data_normalizer = 1.0 + lengths = jnp.square(data) + lengths = jnp.sum(lengths, axis=data.ndim - 1, keepdims=True) + lengths = jnp.sqrt(lengths) + data /= lengths + data *= jnp.sqrt(jnp.sqrt(data.shape[-1])) + + ratio = 1.0 / jnp.sqrt(projection_matrix.shape[0]) + data_dash = jnp.einsum('...lhd,md->...lhm', data_normalizer * data, + projection_matrix) + diag_data = jnp.square(data) + diag_data = jnp.sum(diag_data, axis=data.ndim - 1) + diag_data = (diag_data / 2.0) * data_normalizer * data_normalizer + diag_data = jnp.expand_dims(diag_data, axis=data.ndim - 1) + + if numerator_denominator_stabilizer: + if is_query: + last_dims_t = (len(data_dash.shape) - 1,) + stab = jnp.max(data_dash, axis=last_dims_t, keepdims=True) + else: + stab = jnp.max(data_dash, keepdims=True) + data_dash = ratio * ( + jnp.exp(data_dash - stab - diag_data) + numerical_stabilizer) + else: + data_dash = ratio * (jnp.exp(data_dash) + numerical_stabilizer) + + return data_dash + + +def expplus_softmax_kernel_transformation( + base_data, + extra_data, + is_query, + projection_matrix=None, + numerical_stabilizer=0.000001, + normalize_data=True, + numerator_denominator_stabilizer=True): + r"""Computes random features for the softmax kernel using FAVOR++ mechanism. + + Computes random features for the softmax kernel using FAVOR++ mechanism. + + Args: + base_data: input data tensor of the shape [B..., L, H, D], where: B - batch + dimensions, L - attention dimension, H - heads, D - features. + extra_data: auxiliary data tensor of the. same shape as for + computing additional statistics to optimize the coefficients of the random + maps. + is_query: indicates whether input data is a query or key tensor. + projection_matrix: random Gaussian matrix of shape [M, D], where M stands + for the number of random features and each D x D sub-block has pairwise + orthogonal rows. + numerical_stabilizer: small positive constant for numerical stability. + normalize_data: whether queries/keys should \sqrt{d}-normalized. + numerator_denominator_stabilizer: whether numerator and denominator in the + normalized attention computation should be numerically stabilized. + + Returns: + Corresponding kernel feature map. + """ + data = base_data + if normalize_data: + data_normalizer = 1.0 / jnp.sqrt(jnp.sqrt(data.shape[-1])) + else: + data_normalizer = 1.0 + lengths = jnp.square(data) + lengths = jnp.sum(lengths, axis=data.ndim - 1, keepdims=True) + lengths = jnp.sqrt(lengths) + data /= lengths + data *= jnp.sqrt(jnp.sqrt(data.shape[-1])) + + ratio = 1.0 / jnp.sqrt(projection_matrix.shape[0]) + data_dash = jnp.einsum('blhd,md->blhm', data_normalizer * data, + projection_matrix) + diag_data = jnp.square(data) + diag_data = jnp.sum(diag_data, axis=data.ndim - 1) + + diag_data = (diag_data / 2.0) * data_normalizer * data_normalizer + diag_data = jnp.expand_dims(diag_data, axis=data.ndim - 1) + + _, l, _, _ = base_data.shape + + first_sum_of_squares = jnp.square(data) + first_sum_of_squares = jnp.sum( + first_sum_of_squares, axis=(1, -1), keepdims=True) + first_sum_of_squares *= (data_normalizer * data_normalizer) + first_sum_of_squares /= l + second_sum_of_squares = jnp.square(extra_data) + second_sum_of_squares = jnp.sum( + second_sum_of_squares, axis=(1, -1), keepdims=True) + second_sum_of_squares *= (data_normalizer * data_normalizer) + second_sum_of_squares /= l + data_sum = jnp.sum(data, axis=(1,), keepdims=True) + extra_data_sum = jnp.sum(extra_data, axis=(1,), keepdims=True) + d_prod = jnp.einsum('blhd,blhd->blh', data_sum, extra_data_sum) + d_prod = jnp.expand_dims(d_prod, axis=-1) + d_prod *= (data_normalizer * data_normalizer) + d_prod *= (2.0 / (l * l)) + ave = first_sum_of_squares + second_sum_of_squares + d_prod + dim = projection_matrix.shape[-1] + A = (1.0 / (4.0 * ave)) * ( + jnp.sqrt((2.0 * ave + dim) * + (2.0 * ave + dim) + 8.0 * dim * ave) - 2.0 * ave - dim) + A = (1.0 - 1.0 / A) / 8.0 + B = jnp.sqrt(1.0 - 4.0 * A) + D = jnp.power(1.0 - 4.0 * A, dim / 4.0) + + diag_omega = jnp.square(projection_matrix) + diag_omega = jnp.sum(diag_omega, axis=projection_matrix.ndim - 1) + diag_omega = jnp.expand_dims(diag_omega, axis=0) + diag_omega = jnp.expand_dims(diag_omega, axis=0) + diag_omega = jnp.expand_dims(diag_omega, axis=0) + diag_omega = A * diag_omega + + if numerator_denominator_stabilizer: + if is_query: + last_dims_t = (len(data_dash.shape) - 1,) + stab = B * jnp.max(data_dash, axis=last_dims_t, keepdims=True) + else: + stab = B * jnp.max(data_dash, keepdims=True) + data_dash = ratio * D * ( + jnp.exp(B * data_dash - stab - diag_data + diag_omega) + + numerical_stabilizer) + else: + data_dash = ratio * D * ( + jnp.exp(B * data_dash - diag_data + diag_omega) + numerical_stabilizer) + + return data_dash + + +# ------------------------------------------------------------------------------ +# Performers-compatible Relative Positional Encoding mechanism. +# +# The implementation is taken from the following paper: "Relative Positional +# Encoding for Transformers with Linear Complexity" +# (github code: https://cifkao.github.io/spe/) +# ------------------------------------------------------------------------------ + + +def sinespe(rng_key, + key_shape, + num_realizations: int = 64, + num_sines: int = 10): + """Sinusoidal stochastic positional encoding. + + Args: + rng_key: A PRNGKey. + key_shape: The shape of keys and queries. + num_realizations: The number of realizations of the stochastic process (R). + num_sines: The number of sin and cos components (K). + + Returns: + sinusoidal encoding. + """ + length = key_shape[1] + in_features = key_shape[-1] + num_heads = key_shape[-2] + params_shape = (num_heads, in_features, num_sines) + functor = lambda *args: jax.random.normal(*args) - 4. + freqs = functor(rng_key, params_shape) + offsets = jax.random.normal(rng_key, params_shape) + + def init_gains(rng_key, shape): + gains = jax.random.normal(rng_key, shape) + return gains / ( + jnp.sqrt(jnp.linalg.norm(gains, axis=-1, keepdims=True)) / 2) + + gains = init_gains(rng_key, params_shape) + + # build omega_q and omega_k, + # with shape (num_heads, keys_dim, length, 2*num_sines) + indices = jnp.linspace(0, length - 1, length) + + # making sure the frequencies are in [0, 0.5] + freqs = jax.nn.sigmoid(freqs[:, :, None, :]) / 2. + + phases_q = (2 * math.pi * freqs * indices[None, None, :, None] + + offsets[:, :, None, :]) + omega_q = jnp.stack([jnp.cos(phases_q), jnp.sin(phases_q)], + axis=-1).reshape(num_heads, in_features, length, + 2 * num_sines) + + phases_k = (2 * math.pi * freqs * indices[None, None, :, None]) + omega_k = jnp.stack([jnp.cos(phases_k), jnp.sin(phases_k)], + axis=-1).reshape(num_heads, in_features, length, + 2 * num_sines) + + # gains is (num_heads, keys_dim, num_sines). Making them softplus-nonnegat. + gains = jax.nn.softplus(gains) + + # now upsample it to 2 * num_sines + gains = jnp.stack([gains, gains], axis=-1).reshape(num_heads, in_features, + 2 * num_sines) + + # draw noise of appropriate shape + z = jax.random.normal( + rng_key, + (1, num_heads, in_features, 2 * num_sines, num_realizations), + ) / jnp.sqrt(num_sines * 2) + + # scale each of the 2*num_sines by the appropriate gain + # z is still (1, num_heads, keys_dim, 2*num_sines, num_realizations) + z = z * gains[None, ..., None] + + # computing the sum over the sines. + # gets (1, num_heads, keys_dim, length, num_realizations) + qbar = jnp.matmul(omega_q[None], z) + kbar = jnp.matmul(omega_k[None], z) + + # permuting them to be (1, length, num_heads, keys_dim, num_realizations) + qbar = jnp.transpose(qbar, (0, 3, 1, 2, 4)) + kbar = jnp.transpose(kbar, (0, 3, 1, 2, 4)) + + scale = jnp.sqrt(jnp.sqrt(jnp.reciprocal(num_realizations * in_features))) + return scale * qbar, scale * kbar + + +def spegate(rng_key, spe_code): + """Stochastic Positional Encoding gating mechanism. + + Args: + rng_key: A PRNGKey. + spe_code: the code of the stochastic positional encoding mechanism. + + Returns: + qbar and kbar positional encodings. + """ + qbar, kbar = spe_code + + ### gate = self.param('gate', kbar.shape[-3:-1], jax.random.normal) + gate = jax.random.normal(rng_key, kbar.shape[-3:-1]) + + # incorporate the constant bias for Pd if required. First draw noise + # such that noise noise^T = 1, for each head, feature, realization. + in_features = kbar.shape[-2] + num_realizations = kbar.shape[-1] + noise = jax.random.normal(rng_key, kbar.shape[-3:]) + noise = noise / jnp.sqrt(jnp.sqrt(in_features * num_realizations)) + # constrain the gate parameter to be in [0 1] + gate = jax.nn.sigmoid(gate[..., None]) + # add to queries and keys. + pe_coef, noise_coef = jnp.sqrt(gate), jnp.sqrt(1. - gate) + qbar = pe_coef * qbar + noise_coef * noise + kbar = pe_coef * kbar + noise_coef * noise + + return qbar, kbar + + +def apply_spe(keys, spe): + # sum over the keys_dim after multiplying by queries and keys + # spe is (1, max_len, ...), truncating and broadcasting over the batch + return (spe[:, :keys.shape[1]] * keys[..., None]).sum(axis=-2) + + +############################# MASKED PERFORMER ################################# +class Mask(abc.ABC): + """API for the scalable attention masking mechanism. + + The API for the masking mechanism used to efficiently modulate attention with + no explicit materialization of the attention matrix. + """ + + @abc.abstractmethod + def act(self, mask: Sequence[jnp.ndarray], + input_tensor: jnp.ndarray) -> jnp.ndarray: + """Multiplies the stack of H masks M (shape [L, L] each) by the inp. + + tensor. + + We denote by L the length of the input sequence and by H the number of + heads). Each mask of the stack is element-wise multiplied with the regular + attention matrix in the brute-force masked attention model. + + The method implements the algorithm of multiplying each matrix M of the + stack by a given input tensor of the shape [B..., L,H,F]. F stands for the + feature/embedding dimension. The resulting tensor is of the shape + [B..., L,H,F]. The stack of the masks is encoded by . + The slice corresponding to fixed batch indices (B...) and a head index (H) + of the resulting tensor is obtained my multiplying corresponding mask M + with the matrix given by the corresponding slice of the input tensor + (of shape [L, H]) (standard matrix-matrix multiplication, not element-wise). + The masks M are usually not explicitly materialized to avoid quadratic in L + time complexity, but are instead encoded in a compact way. + + Args: + mask: a compact encoding of the masking mechanism. + input_tensor: [batch_dims, length, head_dims, emb_dim] array. + + Returns: + [batch_dims, length, head_dims, emb_dim] result of the + multiplication. + """ + raise NotImplementedError + + +class RPEMask(Mask): + # TODO(kchoro): support a variant with the first CLS token which is 'special' + # in a sense that its weight is always constant (e.g. 1) regardless of the + # relative position. + """Relative Positional Encoding masking mechanism. + + Relative Positional Encoding masking mechanism for which the corresponding + mask is Toeplitz (not necessarily symmetric). + + The use_fft knob chooses between two implementations that return identical + results up to numerical errors. For highest speed set use_fft to True on GPU, + and False on TPU as jax.fft() is relatively slower compared to matrix + multiplication on TPUs. + TODO(stamas, kchoro): Improve efficiency further on TPU for small batch sizes + (constructing the Toeplitz matrices is the bottleneck) and for very long + sequences with >=8K tokens. + """ + + def __init__(self, use_fft: bool = True): + self._act_method = self._act_fft if use_fft else self._act_einsum + + def _act_fft(self, exp_first_rpe_array: jnp.ndarray, + exp_second_rpe_array: jnp.ndarray, + input_tensor: jnp.ndarray) -> jnp.ndarray: + """Computes the action of the Toeplitz matrix using FFT.""" + # encodes the circulaw rows of the circulant embeddings + # of the Toeplitz matrices corresponding to the RPE mechanism. It is of the + # shape [H, 2L] (different RPE mechanisms for different heads). + exp_rpe_params = jnp.concatenate([ + exp_first_rpe_array, + jnp.zeros(shape=(exp_first_rpe_array.shape[0], 1)), exp_second_rpe_array + ], + axis=1) + # The method conducts fast Toeplitz matrix-matrix multiplication by + # (see: https://math.mit.edu/icg/resources/teaching/18.085-spring2015/ + # toeplitz.pdf): + # (1) embedding (conceptually) Toeplitz matrix in the 2x larger circulant + # matrix, + # (2) decomposing (conceptually) this larger circulant matrix C as: + # C = DFT * diag (DFT * c) * DFT^-1, where: DFT is the discrete Fourier + # transform matrix, c is the circulant row-vector defining C and DFT^-1 + # is an inverse of DFT. + # (3) left-multiplying by DFT^-1 using Fast Fourier Transform + # FFT, computing diag (DFT * c) using FFT and finally: computing the + # Hadamard product with diag (DFT * c) and applying last time FFT. + # (4) taking the part of the obtained tensor corresponding to the Toeplit + # submatrix of the circulant matrix C. + # + # The shape of the input and output tensor is [B, L, H, F], where: B - batch + # dimension, L attention dimension, H - heads dimension and F - feature/ + # embeddings dimension. + circ_vec_len = exp_rpe_params.shape[-1] + diag_array = jnp.fft.fft(exp_rpe_params) + inv_dft_trans = jnp.fft.ifft(input_tensor, n=circ_vec_len, axis=-3) + had_product = jnp.einsum('...lhf,hl->...lhf', inv_dft_trans, diag_array) + return jnp.real( + jnp.fft.fft(had_product, n=circ_vec_len, + axis=-3)[:, 0:(exp_rpe_params.shape[-1] // 2), :, :]) + + def _act_einsum(self, exp_first_rpe_array: jnp.ndarray, + exp_second_rpe_array: jnp.ndarray, + input_tensor: jnp.ndarray) -> jnp.ndarray: + """Constructs the Toeplitz matrix explicitly and uses einsum.""" + + # blakehechtman@'s recursive roll method from + # https://github.com/jax-ml/jax/issues/1646#issuecomment-1139044324 + # modified to work with multiple heads (matrices) at once. + # + # This is the fastest on TPU of all the alternatives by far. It's slightly + # slower on GPU than the best GPU friendly method based on reshaping. + # However performance on GPU is less important as FFT is even faster there. + # + # Shape of x is [H, 2*L-1] on first call, returns shape [H, L, L] + def toeplitz(x): + if len(x.shape) == 2: + x = jnp.expand_dims(x, axis=-1) # shape [H, L, 1] + # Keep appending rotated columns until we have enough. + num_rows = x.shape[-2] + num_cols = x.shape[-1] + size_needed = num_rows // 2 + 1 # (==L) + if num_cols >= size_needed: + return x[:, :size_needed, :size_needed] + r = jnp.roll(x, num_cols, axis=-2) + return toeplitz(jnp.concatenate([x, r], axis=-1)) + + rpe_matrices = toeplitz( + jnp.concatenate([exp_first_rpe_array, exp_second_rpe_array], axis=1)) + # Matrix multiplication, j is the length-index we sum over, h is head-index, + # f is embedding-index. l-th column of the RPE matrix has the dist(.,l) + # values used for computing l-th token. + return jnp.einsum('...jhf,hjl->...lhf', input_tensor, rpe_matrices) + + def act(self, mask: Sequence[jnp.ndarray], + input_tensor: jnp.ndarray) -> jnp.ndarray: + # The RPE masker is encoded with the two 2D arrays of shapes [H, L] and + # [H, L - 1] respectively, where L stands for the length of the input + # sequence and H for the number of heads. An ith row of the first array is + # of the form: c^{i}_{1} = [b^{i}_{0,0},b^{i}_{0,1},...,b^{i}_{0,L-1}], and + # the ith row of the second array is of the form: c^{i}_{2} = + # [b^{i}_{L-1,0},...,b^{i}_{1,0}] where b^{i}_{i,j} encodes the relative + # position distance between ith query and jth key in the ith head (the + # b-entries that would be added to the corresponding logits entries in the + # attention matrix in the brute-force masked attention mechanism). + # + # Note: We do not impose symmetry so the equality: b^{i}_{i,j} = b^{i}_{j,i} + # does not necessarily need to hold. + first_rpe_array, second_rpe_array = mask + return self._act_method( + jnp.exp(first_rpe_array), jnp.exp(second_rpe_array), input_tensor) + + +def favor_attention(query, + key, + value, + inputs_mask, + kernel_transformation, + num_features, + head_dim, + seed, + rpe_method=None, + num_realizations=64, + num_sines=10, + use_random_projections=True, + hybrid_global_size=0, + segment_ids: Optional[Array] = None, + data_dependent_kfs=False): + """Computes bidirectional (noncausal) normalized FAVOR+ attention. + + Computes FAVOR+ linear attention from Performers,based on: + "Rethinking Attention with Performers": https://arxiv.org/abs/2009.14794). + The current variant is bidirectional (noncausal). + + Args: + query: query tensor. + key: key tensor. + value: value tensor. + inputs_mask: [batch, length] array indicating True for non-padding + tokens and False for padding. + kernel_transformation: transformation used to get finite kernel features. + num_features: number of kernel map features to be used. + head_dim: query/key dimensionality (relevant only if RPE mechanism is turned + off). + seed: seed for constructing random features (relevant only for the + approximate softmax method) + rpe_method: relative positional encoding method to be used. If None then no + RPE mechanism is used. Active RPE options currently include: 'sine' + (trigonometric mechanism). + num_realizations: number of samples for the stochastic RPE mechanism. + num_sines: number of sin waves for the trigonometric RPE mechanism. + use_random_projections: determines whether random or deterministic + (canonical projections will be used). + hybrid_global_size: If not zero use first hybrid_global_size tokens for + global full attention. + segment_ids: packing mask. The mask is the 2-dimensional tensor of the shape + [B,L], where: B - batch didmension, L - length dimension. Each slice + corresponding to the fixed index in the batch is of the form: + [1,...1,2,...,2,...,N,...,N,0,...,0], where x...x corresponds to the + tokens of a fixed sequence within the super-sequence of packed sequences, + N is the total number of packed sequences in the slice and 0-tokens encode + padding. Even though, we enumerate different sequences from left to right + in the increasing order, the mechanism works for any enumeration. + data_dependent_kfs: indicates whether computed random features use + data-driven statistics. + + Returns: + bidirectional normalized FAVOR+ attention. + """ + projection_matrix = None + # Apply positional encoding if this option is turned on: + rng_key = jax.random.PRNGKey(PERFORMERS_RPE_SEED) + if rpe_method: + if rpe_method == 'sinespe': + qbar, kbar = sinespe( + rng_key, + query.shape, + num_sines=num_sines, + num_realizations=num_realizations) + else: + raise NotImplementedError('Variant of the RPE not supported yet.') + qbar, kbar = spegate(rng_key, (qbar, kbar)) + query = apply_spe(query, qbar) + key = apply_spe(key, kbar) + _, _, _, extended_head_dim = query.shape + if use_random_projections: + projection_matrix = GaussianOrthogonalRandomMatrix( + num_features, extended_head_dim, seed).get_2d_array() + else: + if use_random_projections: + projection_matrix = GaussianOrthogonalRandomMatrix( + num_features, head_dim, seed).get_2d_array() + if hybrid_global_size > 0: + global_full_attn_output = full_attn(query[:, :hybrid_global_size, :, :], + key, value, inputs_mask) + query = query[:, hybrid_global_size:, :, :] + if not data_dependent_kfs: + query_prime = kernel_transformation( + data=query, is_query=True, projection_matrix=projection_matrix + ) + key_prime = kernel_transformation( + data=key, is_query=False, projection_matrix=projection_matrix + ) + else: + query_prime = kernel_transformation(query, key, True, projection_matrix) + key_prime = kernel_transformation(key, query, False, projection_matrix) + + # TODO(kchoro): Compare this variant with the one where + # broadcast_to(new_shape) replaces reshaping + tiling. + if segment_ids is None: + if inputs_mask is not None: + b, length, h, m = jnp.shape(key_prime) + inputs_mask = jnp.tile( + jnp.reshape(inputs_mask, [b, length, 1, 1]), [1, 1, h, m]) + key_prime = jnp.where(inputs_mask, key_prime, 0) + else: + # TODO(wgaj): Add a test if the segments_id goes above MAX_NB_PACKED_SEQS. + b, length, h, m = jnp.shape(key_prime) + # Introducing extra dimension so that padding can be re-interpreted as + # multi-packing with different packing masks corresponding to different + # sequences in the super-sequence. + # TODO(kchoro): Compare this approach with the one not using the upper bound + # on the number of packed sequences but rather for/while looping (the latter + # will in all likelihood require custom gradient implementation for + # efficiency). + packing_mask = jnp.arange(1, MAX_NB_PACKED_SEQS + 1, 1) + packing_mask = jnp.tile( + jnp.reshape(packing_mask, [MAX_NB_PACKED_SEQS, 1, 1, 1, 1]), + [1, b, length, h, m]) + segment_ids = jnp.tile( + jnp.reshape(segment_ids, [1, b, length, 1, 1]), + [MAX_NB_PACKED_SEQS, 1, 1, h, m]) + padded_inputs_mask = (segment_ids == packing_mask) + key_prime = jnp.tile( + jnp.reshape(key_prime, [1, b, length, h, m]), + [MAX_NB_PACKED_SEQS, 1, 1, 1, 1]) + query_prime = jnp.tile( + jnp.reshape(query_prime, [1, b, length, h, m]), + [MAX_NB_PACKED_SEQS, 1, 1, 1, 1]) + key_prime = jnp.where(padded_inputs_mask, key_prime, 0) + query_prime = jnp.where(padded_inputs_mask, query_prime, 0) + + av_attention = noncausal_numerator(query_prime, key_prime, value) + attention_normalizer = noncausal_denominator(query_prime, key_prime) + if segment_ids is not None: + av_attention = jnp.sum(av_attention, axis=0, keepdims=False) + attention_normalizer = jnp.sum(attention_normalizer, axis=0, keepdims=False) + + attention_normalizer = jnp.expand_dims(attention_normalizer, + len(attention_normalizer.shape)) + attention_normalizer = jnp.where(attention_normalizer <= 0.0, + jnp.ones(attention_normalizer.shape), + attention_normalizer) + + attention_output = av_attention / attention_normalizer + # TODO(kchoro): Add support for padding + hybrid. + if hybrid_global_size > 0: + attention_output = jnp.concatenate( + [global_full_attn_output, attention_output], 1) + return attention_output + + +def masked_favor_attention(query, key, value, masker, mask, kernel_config): + """Computes masked FAVOR+ attention. + + Computes masked FAVOR+ linear attention for Performers,based on: + "Rethinking Attention with Performers": https://arxiv.org/abs/2009.14794) + and "From block-Toeplitz matrices to differential equations on graphs: towards + a general theory for scalable masked Transformers": + https://arxiv.org/abs/2107.07999. + + Args: + query: query tensor. + key: key tensor. + value: value tensor. + masker: object applying masking mechanism using given mask. + mask: compact encoding of the masking mechanism. + kernel_config: config dictionary defining kernel transformation to be used + for attention. + + Returns: + masked FAVOR+ attention. + """ + projection_matrix = None + + if kernel_config['use_random_projections']: + projection_matrix = GaussianOrthogonalRandomMatrix( + kernel_config['num_features'], query.shape[-1], + kernel_config['seed']).get_2d_array() + + if kernel_config['kernel_transformation'] == 'softmax': + kernel_transformation = exp_softmax_kernel_transformation + elif kernel_config['kernel_transformation'] == 'linear_gaussian': + kernel_transformation = sat.softmax_positive_rfs + else: + if kernel_config['kernel_transformation'] == 'relu': + activation_fn = jax.nn.relu + else: + activation_fn = (lambda x: x * x * x * x) + + def gen_transformation(a, b, c): + return generic_kernel_transformation(a, b, c, activation_fn=activation_fn) + + kernel_transformation = gen_transformation + + query_prime = kernel_transformation(query, True, projection_matrix) + key_prime = kernel_transformation(key, False, projection_matrix) + av_attention = masked_numerator(query_prime, key_prime, value, masker, mask) + attention_normalizer = masked_denominator(query_prime, key_prime, masker, + mask) + attention_normalizer = jnp.expand_dims(attention_normalizer, + len(attention_normalizer.shape)) + attention_output = av_attention / attention_normalizer + + return attention_output + + +def full_attn(query_matrix, key_matrix, value_matrix, attn_mask=None): + """Applies kernel attention with query, key, value tensors. + + This function defines the computation inside `call` with projected + multi-head Q, K, V inputs. Users can override this function for customized + attention implementation. + + Args: + query_matrix: Projected query `Tensor` of shape `[B, T, N, key_dim]`. + key_matrix: Projected key `Tensor` of shape `[B, S, N, key_dim]`. + value_matrix: Projected value `Tensor` of shape `[B, S, N, value_dim]`. + attn_mask: a boolean mask of shape `[B, S]`, that prevents attending to + masked positions. Note that the mask is only appied to the keys. User may + want to mask the output if query contains pads. + + Returns: + attention_output: Multi-headed outputs of attention computation. + """ + + full_product = jnp.einsum('BFNH,BTNH->BFTN', query_matrix, + key_matrix) # [B, F, T, N] + if attn_mask is not None: + attn_mask = attn_mask.astype(key_matrix.dtype) + attn_mask = jnp.expand_dims(jnp.expand_dims(attn_mask, axis=1), axis=3) + adder = (1.0 - attn_mask) * -10000.0 + full_product += adder + full_product = jax.nn.softmax(full_product, axis=2) + attention_output = jnp.einsum('BFTN,BTNO->BFNO', full_product, + value_matrix) # [B, F, N, O] + return attention_output + + +def compute_ft(toeplitz_params, points): + """Computes a Fourier Transform in a given set of points. + + Computes the fourier transform (FT) in a give set of points. The FT is + parameterized as a weighted sum of multi-dimensional Gaussian pdfs: + tau(x) = sum_i w_i * exp(-(x-mu_i)**2 / sigma_i**2). + + Args: + toeplitz_params: the parameters defining parameterization of the FT - + weights w_i ceners mu_i and standard deviations sigma_i. + points: points where the FT eneeds to be computed. + + Returns: + """ + d = points.shape[-1] + weights = toeplitz_params[:, :NUM_FT_PARAMS_PER_HEAD] + mus = toeplitz_params[:, NUM_FT_PARAMS_PER_HEAD:((1 + d) * + NUM_FT_PARAMS_PER_HEAD)] + mus = jnp.reshape(mus, (toeplitz_params.shape[0], NUM_FT_PARAMS_PER_HEAD, d)) + sqsigmas = toeplitz_params[:, ((1 + d) * NUM_FT_PARAMS_PER_HEAD):] + sqsigmas = jnp.exp(sqsigmas) + h = toeplitz_params.shape[0] + b_points = jnp.broadcast_to( + points, (NUM_FT_PARAMS_PER_HEAD, h, NUM_FT_RAND_FEATURES, d)) + b_points = jnp.transpose(b_points, [2, 1, 0, 3]) + b_points -= mus + b_points = -b_points**2 + b_points = jnp.sum(b_points, axis=-1) + b_points /= jnp.expand_dims(sqsigmas, axis=0) + b_points = jnp.exp(b_points) + b_points *= jnp.expand_dims(weights, axis=0) + b_points = jnp.sum(b_points, axis=-1) + return jnp.transpose(b_points, [1, 0]) + + +def create_random_points(d, nb_rows, nb_columns, seed): + return jax.random.normal( + key=random.PRNGKey(seed), shape=(nb_rows, nb_columns, d)) + + +def create_point_densities(points): + squared_points = points * points / 2.0 + point_squared_lengths = jnp.sum(squared_points, axis=-1) + return (1.0 / jnp.sqrt(2.0 * jnp.pi)) * jnp.exp(-point_squared_lengths) + + +def create_snippet(toeplitz_params, coords, coeff, length): + """Function creating FLT snippet encoding RPE. + + Computes the fourier transform (FT) in a give set of points. The FT is + parameterized as a weighted sum of multi-dimensional Gaussian pdfs: + tau(x) = sum_i w_i * exp(-(x-mu_i)**2 / sigma_i**2). + + Args: + toeplitz_params: the parameters defining parameterization of the FT - + weights w_i ceners mu_i and standard deviations sigma_i. + coords: coordinates encoding positions of the tokens. + coeff: renormaliization coefficient. + length: the number of all the tokens. + + Returns: + """ + h, _ = toeplitz_params.shape + d = coords.shape[-1] + b = coords.shape[0] + points = create_random_points(d, h, NUM_FT_RAND_FEATURES, 0) + densities = create_point_densities(points) + ft_matrix = compute_ft(toeplitz_params, points) + ratios = ft_matrix / densities + result = jnp.broadcast_to(coords, (h, b, length, d)) + result = jnp.einsum('hbld,hmd->bhlm', result, points) + result = jnp.exp(2.0 * jnp.pi * 1j * coeff * result) + result = jnp.einsum('bhlm,hm->blhm', result, ratios) + return (1.0 / jnp.sqrt(NUM_FT_RAND_FEATURES)) * result + + +def sharp_masked_favor_attention(query, + key, + value, + coords, + toeplitz_params, + inputs_mask, + kernel_transformation, + num_features, + head_dim, + seed, + rpe_method=None, + num_realizations=64, + num_sines=10, + use_random_projections=True, + hybrid_global_size=0, + segment_ids: Optional[Array] = None, + data_dependent_kfs=False): + """Computes linear attention supporting RPE masking through FLT. + + Computes linear attention supporting RPE through thr FLT mechanism, based on: + "Learning a Fourier Transform for Linear Relative Positional Encodings in + Transformers": https://arxiv.org/pdf/2302.01925.pdf. + + Args: + query: query tensor. + key: key tensor. + value: value tensor. + coords: coordinates of the tokens. + toeplitz_params: leearnable parameters defining RPE mask. + inputs_mask: [batch, length] array indicating True for non-padding + tokens and False for padding. + kernel_transformation: transformation used to get finite kernel features. + num_features: number of kernel map features to be used. + head_dim: query/key dimensionality (relevant only if RPE mechanism is turned + off). + seed: seed for constructing random features (relevant only for the + approximate softmax method) + rpe_method: relative positional encoding method to be used. If None then no + RPE mechanism is used. Active RPE options currently include: 'sine' + (trigonometric mechanism). + num_realizations: number of samples for the stochastic RPE mechanism. + num_sines: number of sin waves for the trigonometric RPE mechanism. + use_random_projections: determines whether random or deterministic + (canonical projections will be used). + hybrid_global_size: If not zero use first hybrid_global_size tokens for + global full attention. + segment_ids: packing mask. The mask is the 2-dimensional tensor of the shape + [B,L], where: B - batch didmension, L - length dimension. Each slice + corresponding to the fixed index in the batch is of the form: + [1,...1,2,...,2,...,N,...,N,0,...,0], where x...x corresponds to the + tokens of a fixed sequence within the super-sequence of packed sequences, + N is the total number of packed sequences in the slice and 0-tokens encode + padding. Even though, we enumerate different sequences from left to right + in the increasing order, the mechanism works for any enumeration. + data_dependent_kfs: indicates whether computed random features use + data-driven statistics. + + Returns: + bidirectional normalized FAVOR+ attention spporting RPE through FLT. + """ + projection_matrix = None + # Apply positional encoding if this option is turned on: + rng_key = jax.random.PRNGKey(PERFORMERS_RPE_SEED) + if rpe_method: + if rpe_method == 'sinespe': + qbar, kbar = sinespe( + rng_key, + query.shape, + num_sines=num_sines, + num_realizations=num_realizations) + else: + raise NotImplementedError('Variant of the RPE not supported yet.') + qbar, kbar = spegate(rng_key, (qbar, kbar)) + query = apply_spe(query, qbar) + key = apply_spe(key, kbar) + _, _, _, extended_head_dim = query.shape + if use_random_projections: + projection_matrix = GaussianOrthogonalRandomMatrix( + num_features, extended_head_dim + 2 * NUM_FT_RAND_FEATURES, + seed).get_2d_array() + else: + if use_random_projections: + projection_matrix = GaussianOrthogonalRandomMatrix( + num_features, head_dim + 2 * NUM_FT_RAND_FEATURES, + seed).get_2d_array() + if hybrid_global_size > 0: + global_full_attn_output = full_attn(query[:, :hybrid_global_size, :, :], + key, value, inputs_mask) + query = query[:, hybrid_global_size:, :, :] + + b, l, h, d = jnp.shape(query) + coe = jnp.sqrt(jnp.sqrt(d)) + q_snippet = create_snippet(toeplitz_params, coords, 1.0, l) + q_snippet_imag = coe * jnp.imag(q_snippet) + q_snippet_real = coe * jnp.real(q_snippet) + k_snippet = create_snippet(toeplitz_params, coords, -1.0, l) + k_snippet_imag = coe * jnp.imag(k_snippet) + k_snippet_real = coe * jnp.real(k_snippet) + + new_query = jnp.concatenate([query, q_snippet_real, q_snippet_imag], axis=-1) + new_key = jnp.concatenate([key, k_snippet_real, -k_snippet_imag], axis=-1) + + if not data_dependent_kfs: + query_prime = kernel_transformation(new_query, True, projection_matrix) + key_prime = kernel_transformation(new_key, False, projection_matrix) + else: + query_prime = kernel_transformation(new_query, key, True, projection_matrix) + key_prime = kernel_transformation(new_key, query, False, projection_matrix) + + # TODO(kchoro): Compare this variant with the one where + # broadcast_to(new_shape) replaces reshaping + tiling. + if segment_ids is None: + if inputs_mask is not None: + b, length, h, m = jnp.shape(key_prime) + inputs_mask = jnp.tile( + jnp.reshape(inputs_mask, [b, length, 1, 1]), [1, 1, h, m]) + key_prime = jnp.where(inputs_mask, key_prime, 0) + else: + # TODO(wgaj): Add a test if the segments_id goes above MAX_NB_PACKED_SEQS. + b, length, h, m = jnp.shape(key_prime) + # Introducing extra dimension so that padding can be re-interpreted as + # multi-packing with different packing masks corresponding to different + # sequences in the super-sequence. + # TODO(kchoro): Compare this approach with the one not using the upper bound + # on the number of packed sequences but rather for/while looping (the latter + # will in all likelihood require custom gradient implementation for + # efficiency). + packing_mask = jnp.arange(1, MAX_NB_PACKED_SEQS + 1, 1) + packing_mask = jnp.tile( + jnp.reshape(packing_mask, [MAX_NB_PACKED_SEQS, 1, 1, 1, 1]), + [1, b, length, h, m]) + segment_ids = jnp.tile( + jnp.reshape(segment_ids, [1, b, length, 1, 1]), + [MAX_NB_PACKED_SEQS, 1, 1, h, m]) + padded_inputs_mask = (segment_ids == packing_mask) + key_prime = jnp.tile( + jnp.reshape(key_prime, [1, b, length, h, m]), + [MAX_NB_PACKED_SEQS, 1, 1, 1, 1]) + query_prime = jnp.tile( + jnp.reshape(query_prime, [1, b, length, h, m]), + [MAX_NB_PACKED_SEQS, 1, 1, 1, 1]) + key_prime = jnp.where(padded_inputs_mask, key_prime, 0) + query_prime = jnp.where(padded_inputs_mask, query_prime, 0) + + av_attention = noncausal_numerator(query_prime, key_prime, value) + attention_normalizer = noncausal_denominator(query_prime, key_prime) + if segment_ids is not None: + av_attention = jnp.sum(av_attention, axis=0, keepdims=False) + attention_normalizer = jnp.sum(attention_normalizer, axis=0, keepdims=False) + + attention_normalizer = jnp.expand_dims(attention_normalizer, + len(attention_normalizer.shape)) + attention_normalizer = jnp.where(attention_normalizer <= 0.0, + jnp.ones(attention_normalizer.shape), + attention_normalizer) + + attention_output = av_attention / attention_normalizer + # TODO(kchoro): Add support for padding + hybrid. + if hybrid_global_size > 0: + attention_output = jnp.concatenate( + [global_full_attn_output, attention_output], 1) + return attention_output + + +def regular_performer_dot_product_attention( + query: Array, + key: Array, + value: Array, + bias: Optional[Array] = None, + mask: Optional[Array] = None, + broadcast_dropout: bool = True, + dropout_rng: Optional[PRNGKey] = None, + dropout_rate: float = 0., + deterministic: bool = False, + dtype: Optional[Dtype] = None, + precision: PrecisionLike = None, + toeplitz_params: Array = None, + kernel_config: Union[Dict[Any, Any], None] = None): + """Wrapper function for computing bidirectional normalized FAVOR+ attention. + + Wrapper function for computing FAVOR+ linear attention from Performers, based + on: "Rethinking Attention with Performers": https://arxiv.org/abs/2009.14794). + The current variant is bidirectional (noncausal). + + Args: + query: query tensor. + key: key tensor. + value: value tensor. + bias: Bias for the attention weights. This should be + broadcastable to the shape: `[batch..., num_heads, q_length, kv_length]` + This can be used for incorporating causal masks, padding masks, + proximity bias, etc. + mask: mask to be added to the attention matrix. + broadcast_dropout: broadcast dropout indicator, + dropout_rng: Optional JAX PRNGKey to be used for dropout. + dropout_rate: float = dropout rate, + deterministic: Deterministic or not (to apply dropout). + dtype: The dtype of the computation (default: float32). + precision: Numerical precision of the computation see `jax.lax.Precision` + for details. + toeplitz_params: parameters defining the RPE mechanism, + kernel_config: configuratiion of the attention kernel in Performers: + + Returns: + bidirectional normalized FAVOR+ attention. + """ + del bias + del mask + del broadcast_dropout + del dropout_rng + del dropout_rate + del deterministic + del dtype + del precision + del toeplitz_params + + if kernel_config['kernel_transformation'] == 'softmax': + kernel_transformation = exp_softmax_kernel_transformation + elif kernel_config['kernel_transformation'] == 'linear_gaussian': + kernel_transformation = sat.softmax_positive_rfs + else: + if kernel_config['kernel_transformation'] == 'relu': + activation_fn = jax.nn.relu + else: + activation_fn = (lambda x: x * x * x * x) + + kernel_transformation = functools.partial( + generic_kernel_transformation, activation_fn=activation_fn + ) + return favor_attention( + query, + key, + value, + inputs_mask=None, + kernel_transformation=kernel_transformation, + num_features=kernel_config['num_features'], + head_dim=query.shape[-1], + seed=0, + rpe_method=kernel_config['rpe_method'], + num_realizations=kernel_config['num_realizations'], + num_sines=kernel_config['num_sines'], + use_random_projections=kernel_config['use_random_projections'], + hybrid_global_size=0, + segment_ids=None, + data_dependent_kfs=False) + + +def masked_performer_dot_product_attention( + query: Array, + key: Array, + value: Array, + bias: Optional[Array] = None, + mask: Optional[Array] = None, + broadcast_dropout: bool = True, + dropout_rng: Optional[PRNGKey] = None, + dropout_rate: float = 0., + deterministic: bool = False, + dtype: Optional[Dtype] = None, + precision: PrecisionLike = None, + toeplitz_params: Array = None, + kernel_config: Union[Dict[Any, Any], None] = None): + """Wrapper function for computing linear attention supporting general RPE. + + Wrapper function for computing linear attention supporting general RPE, + based on: "Stable, Fast and Accurate: Kernelized Attention with Relative + Positional Encoding": https://arxiv.org/abs/2106.12566. + + Args: + query: query tensor. + key: key tensor. + value: value tensor. + bias: Bias for the attention weights. This should be + broadcastable to the shape: `[batch..., num_heads, q_length, kv_length]` + This can be used for incorporating causal masks, padding masks, + proximity bias, etc. + mask: mask to be added to the attention matrix. + broadcast_dropout: broadcast dropout indicator, + dropout_rng: Optional JAX PRNGKey to be used for dropout. + dropout_rate: float = dropout rate, + deterministic: Deterministic or not (to apply dropout). + dtype: The dtype of the computation (default: float32). + precision: Numerical precision of the computation see `jax.lax.Precision` + for details. + toeplitz_params: parameters defining the RPE mechanism, + kernel_config: configuratiion of the attention kernel in Performers: + + Returns: + bidirectional normalized FAVOR+ attention supporting general RPE. + """ + del bias + del mask + del broadcast_dropout + del dropout_rng + del dropout_rate + del deterministic + del dtype + del precision + + length = query.shape[-3] + mask = (toeplitz_params[:, :length], toeplitz_params[:, length:]) + masker = RPEMask() + return masked_favor_attention(query, key, value, masker, mask, kernel_config) + + +def sharp_masked_performer_dot_product_attention( + query: Array, + key: Array, + value: Array, + coords: Array, # [B, L, C] + bias: Optional[Array] = None, + mask: Optional[Array] = None, + broadcast_dropout: bool = True, + dropout_rng: Optional[PRNGKey] = None, + dropout_rate: float = 0., + deterministic: bool = False, + dtype: Optional[Dtype] = None, + precision: PrecisionLike = None, + toeplitz_params: Array = None, + kernel_config: Union[Dict[Any, Any], None] = None): + """Wrapper function for computing linear attention supporting RPE with FLT. + + Wrapper function for computing linear attention supporting RPE through FLT + the mechanism, based on: "Learning a Fourier Transform for Linear Relative + Positional Encodings in Transformers": https://arxiv.org/pdf/2302.01925.pdf. + + Args: + query: query tensor. + key: key tensor. + value: value tensor. + coords: coordinates of the tokens. + bias: Bias for the attention weights. This should be + broadcastable to the shape: `[batch..., num_heads, q_length, kv_length]` + This can be used for incorporating causal masks, padding masks, + proximity bias, etc. + mask: mask to be added to the attention matrix. + broadcast_dropout: broadcast dropout indicator, + dropout_rng: Optional JAX PRNGKey to be used for dropout. + dropout_rate: float = dropout rate, + deterministic: Deterministic or not (to apply dropout). + dtype: The dtype of the computation (default: float32). + precision: Numerical precision of the computation see `jax.lax.Precision` + for details. + toeplitz_params: parameters defining the RPE mechanism, + kernel_config: configuratiion of the attention kernel in Performers: + + Returns: + bidirectional normalized FAVOR+ attention supporting RPE through FLT. + """ + del bias + del mask + del broadcast_dropout + del dropout_rng + del dropout_rate + del deterministic + del dtype + del precision + if kernel_config['kernel_transformation'] == 'softmax': + kernel_transformation = exp_softmax_kernel_transformation + elif kernel_config['kernel_transformation'] == 'linear_gaussian': + kernel_transformation = sat.softmax_positive_rfs + else: + if kernel_config['kernel_transformation'] == 'relu': + activation_fn = jax.nn.relu + else: + activation_fn = (lambda x: x * x * x * x) + + def gen_transformation(a, b, c): + return generic_kernel_transformation(a, b, c, activation_fn=activation_fn) + + kernel_transformation = gen_transformation + return sharp_masked_favor_attention( + query, + key, + value, + coords, + toeplitz_params, + inputs_mask=None, + kernel_transformation=kernel_transformation, + num_features=kernel_config['num_features'], + head_dim=query.shape[-1], + seed=0, + rpe_method=kernel_config['rpe_method'], + num_realizations=kernel_config['num_realizations'], + num_sines=kernel_config['num_sines'], + use_random_projections=kernel_config['use_random_projections'], + hybrid_global_size=0, + segment_ids=None, + data_dependent_kfs=False) + + +def pseudolocal_subquadratic_attention( + query: Array, # shape: [...M,H,D] + key: Array, # shape: [...N,H,D] + value: Array, # shape: [...N,H,D] + coords: Array, # shape: [...M,E] E=3 + aniso_matrix: Array, # shape: [R,E] + rf_type: Any, # 'regular' | 'hyper' + nb_rfs: int, +): + """Pseudolocal Performer attention with Gaussian smoothing. + + Pseudolocal Performer attention with Gaussian smoothing + + Args: + query: query tensor. + key: key tensor. + value: value tensor. + coords: coordinates of the tokens. + aniso_matrix: matrix defining the anisotripicity of the Gaussian smoothing + rf_type: type of the random feature mechanism applied ('regular' or 'hyper') + nb_rfs: number of random features used + + Returns: + bidirectional pseudolocal Performer's attention. + """ + qk_dim = query.shape[-1] + if rf_type == 'hyper': + rfs = sat.softmax_hyper_positive_rfs + else: + rfs = sat.softmax_positive_rfs + projection_matrix = ut.get_gaussian_orth_rand_mat( + random.PRNGKey(0), nb_rfs, qk_dim + aniso_matrix.shape[0] + ) + qk_normalizer = jnp.sqrt(jnp.sqrt(qk_dim)) + n_query = query / qk_normalizer + n_key = key / qk_normalizer + coords_proj = jnp.einsum('RE,...ME->...MR', aniso_matrix, coords) + coords_proj = jnp.expand_dims(coords_proj, axis=-2) + n_query_xyz = jnp.concatenate([n_query, coords_proj], axis=-1) + n_key_xyz = jnp.concatenate([n_key, coords_proj], axis=-1) + xyz_mult = jnp.exp( + -0.5 * jnp.sum(jnp.square(coords_proj), axis=-1, keepdims=True) + ) + n_query_xyz *= xyz_mult + n_key_xyz *= xyz_mult + query_prime = rfs(n_query_xyz, projection_matrix, is_query=True) + key_prime = rfs(n_key_xyz, projection_matrix, is_query=False) + kv = jnp.einsum('...lhm,...lhd->...hmd', key_prime, value) + numerator = jnp.einsum('...lhm,...hmd->...lhd', query_prime, kv) + key_prime_sum = jnp.sum(key_prime, axis=-3) + denominator = jnp.einsum('...lhm,...hm->...lh', query_prime, key_prime_sum) + denominator = jnp.expand_dims( + denominator, len(denominator.shape) + ) + result = numerator / denominator + return result diff --git a/scenic/projects/performer/subquadratic_attention.py b/scenic/projects/performer/subquadratic_attention.py new file mode 100644 index 0000000000000000000000000000000000000000..2d85c60e2457f2da6547c14b4b58dd5f3623bbd7 --- /dev/null +++ b/scenic/projects/performer/subquadratic_attention.py @@ -0,0 +1,133 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Module introducing several linear low-rank (LLR) attention mechanisms. + +Papers: "Rethinking attention with Performers", + "Learning a Fourier Transform for Linear Relative Positional + Encodings in Transformers". +""" + +from typing import Callable +import jax +import jax.numpy as jnp + + +def general_kernel_linearization( + data: jax.Array, + projection_matrix: jax.Array | None = None, + numerical_stabilizer: float = 0.001, + activation_fn: Callable[ + [jax.Array, jax.Array], jax.Array + ] = lambda P, X: jax.nn.relu(P), +) -> jax.Array: + r"""Computes general features of kernel's linearization. + + Args: + data: input data tensor of the shape [B..., L, H, D], where: B - batch + dimensions, L - attention dimension, H - heads, D - features. + projection_matrix: projection matrix of the shape [M, D], where M stands + for the number of projections. + numerical_stabilizer: small positive constant used for numerical stability. + activation_fn: activation function taking projected data and data and + outputting features of the kernel's linearization. + + Returns: + Corresponding kernel feature map. + """ + mc_normalizer = 1.0 + if projection_matrix is not None: + mc_normalizer = 1.0 / jnp.sqrt(projection_matrix.shape[0]) + data_dash = jnp.einsum( + '...lhd,md->...lhm', data, projection_matrix + ) + else: + data_dash = data + return mc_normalizer * (activation_fn(data_dash, data) + numerical_stabilizer) + + +def softmax_positive_rfs( + data: jax.Array, + projection_matrix: jax.Array | None = None, + numerical_stabilizer: float = 0.000001, + is_query: bool = True, + temp: float = 5.0, +) -> jax.Array: + r"""Computes positive random features from https://arxiv.org/abs/2009.14794. + + Args: + data: input data tensor of the shape [B..., L, H, D], where: B - batch + dimensions, L - attention dimension, H - heads, D - features. + projection_matrix: Gaussian projection matrix of the shape [M, D], where M + stands for the number of projections. + numerical_stabilizer: small positive constant used for numerical stability. + is_query: determines whether input data tensor is a query- or key-tensor. + temp: temperature parameter of the softmax kernel. + + Returns: + Corresponding kernel feature map used to linearize softmax kernel. + """ + h = lambda X: jnp.exp( + -0.5 * temp * jnp.sum(jnp.square(X), axis=-1, keepdims=True) + ) + if is_query: + axis = (-1,) + else: + axis = None + activation_fn = lambda P, X: h(X) * jnp.exp( + temp * (P - jnp.max(P, axis=axis, keepdims=True)) + ) + return general_kernel_linearization( + data, projection_matrix, numerical_stabilizer, activation_fn + ) + + +def softmax_hyper_positive_rfs( + data: jax.Array, + projection_matrix: jax.Array | None = None, + numerical_stabilizer: float = 0.000001, + is_query: bool = True, + +) -> jax.Array: + r"""Computes hyperbolic extension of positive random features. + + Args: + data: input data tensor of the shape [B..., L, H, D], where: B - batch + dimensions, L - attention dimension, H - heads, D - features. + projection_matrix: Gaussian projection matrix of the shape [M, D], where M + stands for the number of projections. + numerical_stabilizer: small positive constant used for numerical stability. + is_query: determines whether input data tensor is a query- or key-tensor. + + Returns: + Corresponding kernel feature map used to linearize softmax kernel. + """ + h = lambda X: jnp.exp(-0.5 * jnp.sum(jnp.square(X), axis=-1, keepdims=True)) + if is_query: + axis = (-1,) + else: + axis = None + m = lambda P: jnp.maximum( + jnp.max(P, axis=axis, keepdims=True), + -jnp.min(P, axis=axis, keepdims=True), + ) + positive_activation_fn = lambda P, X: h(X) * jnp.exp(P - m(P)) + positive_exponential = jnp.sqrt(0.5) * general_kernel_linearization( + data, projection_matrix, numerical_stabilizer, positive_activation_fn + ) + negative_activation_fn = lambda P, X: h(X) * jnp.exp(-P - m(P)) + negative_exponential = jnp.sqrt(0.5) * general_kernel_linearization( + data, projection_matrix, numerical_stabilizer, negative_activation_fn + ) + return jnp.concatenate((positive_exponential, negative_exponential), axis=-1) diff --git a/scenic/projects/performer/subquadratic_attention_test.py b/scenic/projects/performer/subquadratic_attention_test.py new file mode 100644 index 0000000000000000000000000000000000000000..83e8f379dfe780e02096249d6907c844e5e1f489 --- /dev/null +++ b/scenic/projects/performer/subquadratic_attention_test.py @@ -0,0 +1,109 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for the linear low-rank (LLR) attention library.""" + +from absl.testing import absltest +from absl.testing import parameterized +import jax +from jax import random +import jax.numpy as jnp + +from scenic.projects.performer import subquadratic_attention as sat +from scenic.projects.performer import utils as ut + +QUERY_RAND_SEED = 143567883590 +KEY_RAND_SEED = 847392817892 +VALUE_RAND_SEED = 5939874023 + + +class KernelTransformationAttentionTest(parameterized.TestCase): + + @parameterized.named_parameters( + ( + 'softmax_positive_rfs', + sat.softmax_positive_rfs, + ), + ( + 'softmax_hyper_positive_rfs', + sat.softmax_hyper_positive_rfs, + ), + ) + def test_evaluate_parameter(self, sat_rfs): + + # query -> [batch_size, length, num_heads, features] + # key -> [batch_size, length, num_heads, features] + # value -> [batch_size, length, num_heads, features] + + qk_dim = 8 + v_dim = 10 + batch_size = 1 + length = 2 + num_heads = 1 + nb_random_features = 10000 + shape_query = (batch_size, length, num_heads, qk_dim) + shape_key = (batch_size, length, num_heads, qk_dim) + shape_value = (batch_size, length, num_heads, v_dim) + query = random.normal(random.PRNGKey(QUERY_RAND_SEED), shape_query) + key = random.normal(random.PRNGKey(KEY_RAND_SEED), shape_key) + value = random.normal(random.PRNGKey(VALUE_RAND_SEED), shape_value) + projection_matrix = ut.get_gaussian_orth_rand_mat( + random.PRNGKey(0), nb_random_features, qk_dim + ) + exact_attention_tensor = jnp.einsum('...LHD, ...THD->...LTH', query, key) + exact_attention_tensor /= jnp.sqrt(qk_dim) + exact_attention_tensor = jax.nn.softmax(exact_attention_tensor, axis=-2) + exact_result = jnp.einsum( + '...LTH, ...THD->...LHD', exact_attention_tensor, value + ) + query_prime = sat_rfs(query, projection_matrix, is_query=True) + key_prime = sat_rfs(key, projection_matrix, is_query=False) + kv_tensor = jnp.einsum('...LHM, ...LHD->...HMD', key_prime, value) + approx_result = jnp.einsum( + '...LHM, ...HMD->...LHD', query_prime, kv_tensor + ) + + max_error = 1.2 + error = jnp.abs((exact_result - approx_result) / exact_result) + self.assertLess(jnp.max(jnp.abs(error)), max_error) + + def test_relu(self): + query = jnp.array([[1, 2], [3, 4], [1, -1], [1, 3]]) + key = jnp.array([[-3, 1], [1, 5], [-2, -3], [4, 1]]) + value = jnp.array([[-1], [2], [3], [1]]) + query = jnp.expand_dims(query, axis=-2) + query = jnp.expand_dims(query, axis=0) + key = jnp.expand_dims(key, axis=-2) + key = jnp.expand_dims(key, axis=0) + value = jnp.expand_dims(value, axis=-2) + value = jnp.expand_dims(value, axis=0) + query_prime = sat.general_kernel_linearization(query) + key_prime = sat.general_kernel_linearization(key) + kv = jnp.einsum('...lhm,...lhd->...hmd', key_prime, value) + numerator = jnp.einsum('...lhm,...hmd->...lhd', query_prime, kv) + key_prime_sum = jnp.sum(key_prime, axis=-3) + denominator = jnp.einsum('...lhm,...hm->...lh', query_prime, key_prime_sum) + denominator = jnp.expand_dims( + denominator, len(denominator.shape) + ) + result = numerator / denominator + groundtruth = jnp.array([1.368421052, 1.34883720, 1.2, 1.3846153]) + groundtruth = jnp.expand_dims(groundtruth, axis=[0, -1, -2]) + max_error = 0.001 + error = jnp.abs(groundtruth - result) + self.assertLess(jnp.max(jnp.abs(error)), max_error) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/performer/utils.py b/scenic/projects/performer/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..14486c373c8211d13d080254e0db3155924e50f5 --- /dev/null +++ b/scenic/projects/performer/utils.py @@ -0,0 +1,126 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Library constructing random projection matrices for softmax-kernel RFs.""" + +import jax +from jax import random +import jax.numpy as jnp +Array = jax.Array +PRNGKey = jax.Array + + +def get_gaussian_orth_rand_mat( + rng: PRNGKey, nb_rows: int, nb_columns: int, scaling: bool = False +) -> Array: + """Method for constructing structured block-orthogonal Gaussian matrices. + + Args: + rng: the key used to generate randomness for the construction of the random + matrices, + nb_rows: number of rows of the Gaussian matrix to be constructed, + nb_columns: number of columns of the Gaussian matrix to be constructed, + scaling: boolean indicating whether the rows of the Gaussian matrix should + be normalized to the deterministic length sqrt(nb_rows) + Returns: + The Gaussian matrix of rows and columns. + """ + nb_full_blocks = int(nb_rows / nb_columns) + block_list = [] + for _ in range(nb_full_blocks): + rng, rng_input = jax.random.split(rng) + unstructured_block = random.normal(rng_input, (nb_columns, nb_columns)) + q, _ = jnp.linalg.qr(unstructured_block) + q = jnp.transpose(q) + block_list.append(q) + remaining_rows = nb_rows - nb_full_blocks * nb_columns + if remaining_rows > 0: + rng, rng_input = jax.random.split(rng) + unstructured_block = random.normal(rng_input, (nb_columns, nb_columns)) + q, _ = jnp.linalg.qr(unstructured_block) + q = jnp.transpose(q) + block_list.append(q[:remaining_rows]) + final_matrix = jnp.vstack(block_list) + if scaling: + multiplier = jnp.sqrt(float(nb_columns)) * jnp.ones((nb_rows)) + else: + _, rng_input = jax.random.split(rng) + multiplier = jnp.linalg.norm( + random.normal(rng_input, (nb_rows, nb_columns)), axis=1 + ) + return jnp.matmul(jnp.diag(multiplier), final_matrix) + + +def get_gaussian_simplex_rand_mat( + rng: PRNGKey, + nb_rows: int, + nb_columns: int, + scaling: bool = False, +) -> Array: + """Method for constructing 2D Gaussian simplex arrays. + + Method for constructing Gaussian matrix that is block-wise simplex, i.e. + it consists of square-blocks, where the rows within each block form a simplex. + Args: + rng: the key used to generate randomness for the construction of the random + matrices, + nb_rows: number of rows of the Gaussian matrix to be constructed, + nb_columns: number of columns of the Gaussian matrix to be constructed, + scaling: boolean indicating whether the rows of the Gaussian matrix should + be normalized to the deterministic length sqrt(nb_rows) + Returns: + The Gaussian matrix of rows and columns. + """ + sim_vectors = [] + all_ones_but_last = ( + jnp.ones(nb_columns) - jnp.identity(nb_columns)[nb_columns - 1] + ) + first_mult = (jnp.sqrt(nb_columns) + 1.0) / jnp.power(nb_columns - 1, 1.5) + second_mult = 1.0 / jnp.sqrt(nb_columns - 1) + for i in range(nb_columns - 1): + sim_vector = ( + jnp.sqrt(nb_columns / (nb_columns - 1)) * jnp.identity(nb_columns)[i] + - first_mult * all_ones_but_last + ) + sim_vectors.append(sim_vector) + sim_vectors.append(second_mult * all_ones_but_last) + sim_matrix = jnp.transpose(jnp.array(sim_vectors)) + nb_full_blocks = int(nb_rows / nb_columns) + block_list = [] + for _ in range(nb_full_blocks): + rng, rng_input = jax.random.split(rng) + unstructured_block = random.normal(rng_input, (nb_columns, nb_columns)) + q, _ = jnp.linalg.qr(unstructured_block) + q = jnp.transpose(q) + block_list.append(jnp.transpose(jnp.matmul(q, sim_matrix))) + remaining_rows = nb_rows - nb_full_blocks * nb_columns + if remaining_rows > 0: + rng, rng_input = jax.random.split(rng) + unstructured_block = random.normal(rng_input, (nb_columns, nb_columns)) + q, _ = jnp.linalg.qr(unstructured_block) + q = jnp.transpose(q) + block_list.append( + jnp.transpose(jnp.matmul(q, sim_matrix[:, :remaining_rows])) + ) + final_matrix = jnp.vstack(block_list) + if scaling: + multiplier = jnp.sqrt(float(nb_columns)) * jnp.ones((nb_rows)) + else: + _, rng_input = jax.random.split(rng) + multiplier = jnp.linalg.norm( + random.normal(rng_input, (nb_rows, nb_columns)), axis=1 + ) + return jnp.matmul(jnp.diag(multiplier), final_matrix) + + diff --git a/scenic/projects/pixel_llm/README.md b/scenic/projects/pixel_llm/README.md new file mode 100644 index 0000000000000000000000000000000000000000..bb5a33bac20c2006bb4323e9093a9b132e7e96be --- /dev/null +++ b/scenic/projects/pixel_llm/README.md @@ -0,0 +1,143 @@ +Pixel Aligned Language Models +== +**PixelLLM**: Pixel-Aligned Language Model (PixelLLM) equips large language models with localization capability. The model is pre-trained on [Localized Narratives](https://google.github.io/localized-narratives/), to learn the alignment between +words and image pixels. PixelLLM can be applied to various localization tasks, for example, location-conditioned captioning when taking +location as input, and referring localization when generating locations as outputs. + +This directory is the official implementation of PixelLLM introduced in the paper: +[**Pixel Aligned Language Models**](https://arxiv.org/abs/2312.09237) + +[*Jiarui Xu*](https://jerryxu.net), +[*Xingyi Zhou*](https://xingyizhou.github.io/), +[*Shen Yan*](https://shenyann.github.io/), +[*Xiuye Gu*](https://laoreja.github.io/), +[*Anurag Arnab*](https://anuragarnab.github.io/), +[*Chen Sun*](https://chensun.me/index.html), +[*Xiaolong Wang*](https://xiaolonw.github.io/), +[*Cordelia Schmid*](https://scholar.google.com/citations?user=IvqCXP4AAAAJ&hl=en) + +PixelLLM teaser + +## Visual Results +PixelLLM trace + +## Links +* [Project Page](https://jerryxu.net/PixelLLM/) (with additional visual results) +* [arXiv Page](https://arxiv.org/abs/2312.09237) + +## Citation + +If you find our work useful in your research, please cite: + +```BiBTeX +@inproceedings{xu2023pixel, + title={Pixel aligned language models}, + author={Xu, Jiarui and Zhou, Xingyi and Yan, Shen and Gu, Xiuye and Arnab, Anurag and Sun, Chen and Wang, Xiaolong and Schmid, Cordelia}, + booktitle={CVPR}, + year={2023} +} +``` + +## Model Zoo + +PixelLLM ref +### Referring Expression Localization and Segmentation + +| Language Model | RefCOCO val | | RefCOCO testA | | RefCOCO testB | | RefCOCO+ val | | RefCOCO+ testA | | RefCOCO+ testB | | RefCOCOg val | | RefCOCOg test | | download | +|-----------------------------------------------|-------------|-----------|---------------|-----------|---------------|-----------|--------------|-----------|----------------|-----------|----------------|-----------|--------------|-----------|---------------|-----------|----------------| +| | box P@0.5 | mask cIoU | box P@0.5 | mask cIoU | box P@0.5 | mask cIoU | box P@0.5 | mask cIoU | box P@0.5 | mask cIoU | box P@0.5 | mask cIoU | box P@0.5 | mask cIoU | box P@0.5 | mask cIoU | | +| [BERT](configs/bert/pixel_llm_bert_refseg.py) | 89.6 | 76.4 | 91.4 | 77.8 | 86.9 | 74.0 | 82.2 | 67.8 | 86.9 | 71.8 | 76.4 | 62.1 | 84.2 | 69.4 | 85.0 | 70.5 | [checkpoint]() | +| [T5-XL](configs/t5/pixel_llm_t5_refseg.py) | 90.3 | 77.2 | 92.3 | 79.2 | 86.8 | 74.0 | 83.7 | 69.2 | 87.2 | 73.0 | 78.5 | 64.4 | 84.5 | 70.1 | 85.7 | 72.0 | [checkpoint]() | + +PixelLLM densecap +### Dense Object Captioning and Location-conditioned Object Captioning + +| Language Model | Visual Genome | | | RefCOCOg | | download | +|-------------------------------------------------|---------------|--------|-------|----------|-------|----------------| +| | mAP | METEOR | CIDEr | METEOR | CIDEr | | +| [BERT](configs/bert/pixel_llm_bert_densecap.py) | 17.4 | 20.0 | 148.0 | 14.8 | 86.6 | [checkpoint]() | +| [T5-XL](configs/t5/pixel_llm_t5_densecap.py) | 17.5 | 20.1 | 149.0 | 15.3 | 92.0 | [checkpoint]() | + +## Environment Setup + +In the Scenic root folder, run + +``` +pip install -r scenic/projects/pixel_llm/requirements.txt +``` + + +For evaluation, you need to download captioning metrics files from [this repository](https://github.com/antoyang/captioning-metrics) and put them in the `metrics` folder. Note you will also need to download JAVA and specify the location to your Jre java bin in the [main](main.py) file. + +Like other projects in Scenic, all model parameters, training sets and datasets are specified using [configuration files](configs). + +To train a model with T5-XL text model, please download a pretrained T5-XL model from [T5X](https://github.com/google-research/t5x) and specify its path in [Scenic T5](https://github.com/google-research/scenic/tree/main/scenic/projects/t5). + +To train model with BERT text model, please download BERT vocabulary from [Huggingface](https://huggingface.co/google-bert/bert-base-uncased/blob/main/vocab.txt) and specific its path in [scenic/projectsj/pixel_llm/configs/common.py](configs/common.py). + +## Training + +An example command-line to train PixelLLM on LN with [config file](configs/bert/pixel_llm_bert_trace.py) is + +```shell +$ python -m scenic.projects.pixel_llm.main \ + --config=scenic/projects/vid2seq/configs/bert/pixel_llm_bert_trace.py \ + --workdir=pixel_llm_bert_trace/ +``` + +To evaluate the model only, you need to add `config.eval_only=True` in the config file. + +## Dataset setup + +NOTE: Please update the dataset path in `scenic/projectsj/pixel_llm/configs/common.py` after finishing TFRecord preparation. + +### Prepare Localized Narratives (LN) TFRecords + +You need to download [COCO Images](https://cocodataset.org/#download) and [LN Annotations](https://google.github.io/localized-narratives/) + +```shell +python scenic/projects/pixel_llm/tools/build_ln_tfrecord.py \ +--output_dir ~/Datasets/LN \ +--ln_anno_path ~/Datasets/LN/annotations \ +--coco_path ~/Datasets/coco +``` + +### Prepare Visual Genome (VG) TFRecords + +You need to download Visual Genome following [Instructions in GRIT](https://github.com/JialianW/GRiT/blob/master/datasets/DATASETS.md#vg-dataset). + +```shell +python third_party/py/scenic/projects/pixel_llm/tools/build_vg_tfrecord.py \ +--input_json ~/Datasets/VisualGenome/annotations/test.json \ +--image_path ~/Datasets/VisualGenome/VG_100K/ \ +--output_path ~/Datasets/VisualGenome/tfrecords/test.tfrecord + +python third_party/py/scenic/projects/pixel_llm/tools/build_vg_tfrecord.py \ +--input_json ~/Datasets/VisualGenome/annotations/train.json \ +--image_path ~/Datasets/VisualGenome/VG_100K/ \ +--output_path ~/Datasets/VisualGenome/tfrecords/train.tfrecord \ +--num_shards 128 +``` + +### Prepare Referring Expression Localization/Segmentation TFRecords + +You need to download [the preprocessed MDETR-style json files](https://zenodo.org/records/10795249/files/refcoco_release.zip) and [UNINEXT json files](https://github.com/MasterBin-IIAU/UNINEXT/blob/master/assets/DATA.md#rec--res). + +```shell +python scenic/projects/pixel_llm/tools/build_mdetr_ref_tfrecord.py \ +--output_dir ~/Datasets/PixelLLM/mdetr_data +--ann_output_dir ~/Datasets/PixelLLM/mdetr_data/annotations +--coco_path ~/Projects/PixelLLM/coco/ +--ref_anno_path ~/Projects/PixelLLM/MDETR/mdetr_annotations_with_mask +``` + +### Prepare LLaVA TFRecords + +You need to follow [LLaVA](https://github.com/haotian-liu/LLaVA?tab=readme-ov-file#visual-instruction-tuning) to download image and json files. + +```shell +python scenic/projects/pixel_llm/tools/build_llava_tfrecord.py \ + --output_dir ~/Datasets/PixelLLM/llava/LLaVA-Instruct-150K \ + --input_json ~/Datasets/PixelLLM/LLaVA-Instruct-150K/llava_v1_5_mix665k.json \ + --image_root ~/Datasets/PixelLLM/llava_images +``` diff --git a/scenic/projects/pixel_llm/__init__.py b/scenic/projects/pixel_llm/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/pixel_llm/auto_regressive_decode.py b/scenic/projects/pixel_llm/auto_regressive_decode.py new file mode 100644 index 0000000000000000000000000000000000000000..01faee1d99e93ea214f2a615e5f38a717fea4c34 --- /dev/null +++ b/scenic/projects/pixel_llm/auto_regressive_decode.py @@ -0,0 +1,491 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Auto-regressive generate caption. + + +""" +import functools + +from typing import Any, Callable, Tuple +import flax +import jax +from jax import lax +import jax.numpy as jnp + +NEG_INF = -1.0e7 +PyTreeDef = Any +Array = jax.Array + + +@flax.struct.dataclass +class State: + """Holds beam search state data.""" + cur_index: int + predictions: Array # int array of (batch_size, max_steps) + sum_log_prob: Array # float array of (batch_size,) + + +def scatter_min(inp, index, src): + """Jax implementation of torch.scatter(inp, 1, index, src).""" + # from https://github.com/jax-ml/jax/issues/8487 + dnums = jax.lax.ScatterDimensionNumbers( + update_window_dims=(), inserted_window_dims=(0,), + scatter_dims_to_operand_dims=(0,)) + scatter = functools.partial(jax.lax.scatter_min, dimension_numbers=dnums) + scatter = jax.vmap(scatter, in_axes=(0, 0, 0), out_axes=0) + return scatter(inp, jnp.expand_dims(index, axis=-1), src) + + +def greedy_decode( + begin_token, tokens_to_logits, + max_steps=40, eos_index=102, vocab_size=30522, **kwargs): + """Autoregressively generate a single caption. + + Args: + begin_token: int array (batch_size, max_steps) + tokens_to_logits: a function that converts input + (batch_size, max_steps) to (batch_size, max_steps, vocab_size) + max_steps: int + eos_index: int + vocab_size: int + **kwargs: args for other decoder + + Returns: + predictions: (batch_size, max_steps) + log_prob: (batch_size,) + """ + del kwargs + batch_size = begin_token.shape[0] + logits_after_end = jnp.full( + (batch_size, vocab_size), float('-inf'), dtype=jnp.float32) + logits_after_end = logits_after_end.at[:, eos_index].set(0) + + def cond_fn(state: State) -> bool: + return state.cur_index < max_steps - 1 + + def body_fn(state: State) -> State: + logits = tokens_to_logits( + state.predictions)[:, state.cur_index - 1] # (batch_size, vocab_size) + # Avoid predicting repeating words following: + # https://github.com/JialianW/GRiT/blob/master/grit/modeling/text/ + # text_decoder.py#L450 + last_prediction = state.predictions[ + :, state.cur_index - 1] # (batch_size,) + logits = scatter_min( + logits, last_prediction, + jnp.full((logits.shape[0],), -10000., dtype=jnp.float32)) + logits = jnp.where( + jnp.broadcast_to( + last_prediction[:, None], (batch_size, vocab_size)) == eos_index, + logits_after_end, logits) # (batch_size, vocab_size) + log_prob = jax.nn.log_softmax(logits) # (batch_size, vocab_size) + inds = jnp.argmax(log_prob, axis=-1) # (batch_size,) + predictions = state.predictions.at[:, state.cur_index].set( + inds) # (batch_size, max_steps) + max_log_prob = jnp.max(log_prob, axis=-1) # (batch_size,) + new_log_prob = state.sum_log_prob + max_log_prob # (batch_size,) + return State( + cur_index=state.cur_index + 1, + predictions=predictions, + sum_log_prob=new_log_prob) + + init_state = State( + cur_index=1, + predictions=begin_token, + sum_log_prob=jnp.zeros((begin_token.shape[0],), dtype=jnp.float32)) + final_state = jax.lax.while_loop(cond_fn, body_fn, init_state) + predictions = final_state.predictions # (batch_size, max_steps) + sum_log_prob = final_state.sum_log_prob + num_valid = (predictions != eos_index).sum(axis=-1) - 1 # (batch_size,) + num_valid = jnp.maximum(num_valid, 1) + log_probs = sum_log_prob / num_valid + return predictions, log_probs + + +def brevity_penalty(alpha, length): + return jnp.power(((5.0 + length) / 6.0), alpha) + + +@flax.struct.dataclass +class BeamState: + """Holds beam search state data.""" + # The position of the decoding loop in the length dimension. + cur_index: Array # scalar int32: current decoded length index + # The active sequence log probabilities and finished sequence scores. + live_logprobs: Array # float32: [batch_size, beam_size] + finished_scores: Array # float32: [batch_size, beam_size] + # The current active-beam-searching and finished sequences. + live_seqs: Array # int32: [batch_size, beam_size, max_decode_len] + finished_seqs: Array # int32: [batch_size, beam_size, + # max_decode_len] + # Records which of the 'finished_seqs' is occupied and not a filler slot. + finished_flags: Array # bool: [batch_size, beam_size] + # The current state of the autoregressive decoding caches. + + +def flatten_beam_dim(x: jnp.ndarray, offset: int = 0) -> jnp.ndarray: + """Flattens the first two dimensions of a non-scalar array.""" + xshape = list(x.shape) + b_sz = xshape.pop(offset) + xshape[offset] *= b_sz + return x.reshape(xshape) + + +def unflatten_beam_dim(x: jnp.ndarray, + batch_size: int, + beam_size: int, + offset: int = 0) -> jnp.ndarray: + """Unflattens the first, flat batch*beam dimension of a non-scalar array.""" + assert batch_size * beam_size == x.shape[offset] + xshape = list(x.shape) + newshape = xshape[:offset] + [batch_size, beam_size] + xshape[offset + 1:] + return x.reshape(newshape) + + +def beam_init(batch_size: int, + beam_size: int, + max_decode_len: int, + inputs: jnp.ndarray) -> BeamState: + """Initializes the beam search state data structure.""" + cur_index0 = jnp.array(1) + live_logprobs0 = jnp.tile( + jnp.array([0.0] + [NEG_INF] * (beam_size - 1)), [batch_size, 1]) + finished_scores0 = jnp.ones((batch_size, beam_size)) * NEG_INF + live_seqs0 = jnp.broadcast_to( + inputs[:, None], (batch_size, beam_size, inputs.shape[-1])) + finished_seqs0 = jnp.zeros((batch_size, beam_size, max_decode_len), jnp.int32) + finished_flags0 = jnp.zeros((batch_size, beam_size), jnp.bool_) + # add beam dimension to attention cache pytree elements + return BeamState( + cur_index=cur_index0, + live_logprobs=live_logprobs0, + finished_scores=finished_scores0, + live_seqs=live_seqs0, + finished_seqs=finished_seqs0, + finished_flags=finished_flags0, + ) + + +def gather_beams(nested: PyTreeDef, + beam_indices: jnp.ndarray, + batch_size: int, + old_beam_size: int, + new_beam_size: int) -> jnp.ndarray: + """Gathers the beam slices indexed by beam_indices into new beam array. + + Args: + nested: pytree of arrays or scalars (the latter ignored). + beam_indices: array of beam_indices + batch_size: size of batch. + old_beam_size: size of _old_ beam dimension. + new_beam_size: size of _new_ beam dimension. + + Returns: + New pytree with new beam arrays. + [batch_size, old_beam_size, ...] --> [batch_size, new_beam_size, ...] + """ + del batch_size + del new_beam_size + # Gather via one-hot contraction, needed for SPMD partitioning. + oh_beam_indices = jax.nn.one_hot( + beam_indices, old_beam_size, dtype=jnp.int32) + + def gather_fn(x): + return jnp.einsum('beo,bo...->be...', oh_beam_indices, x).astype(x.dtype) + + return jax.tree_util.tree_map(gather_fn, nested) + + +def gather_topk_beams(nested: PyTreeDef, score_or_log_prob: jnp.ndarray, + batch_size: int, new_beam_size: int) -> jnp.ndarray: + """Gathers the top-k beam slices given by score_or_log_prob array. + + Args: + nested: pytree of arrays or scalars (the latter ignored). + score_or_log_prob: [batch_size, old_beam_size] array of values to sort by + for top-k selection of beam slices. + batch_size: int: size of batch. + new_beam_size: int: size of _new_ top-k selected beam dimension + + Returns: + New pytree with new beam arrays containing top k new_beam_size slices. + [batch_size, old_beam_size, ...] --> [batch_size, new_beam_size, ...] + """ + _, topk_indices = lax.top_k(score_or_log_prob, k=new_beam_size) + topk_indices = jnp.flip(topk_indices, axis=1) + return gather_beams(nested, topk_indices, batch_size, + score_or_log_prob.shape[1], new_beam_size) + + +def beam_search(inputs: jnp.ndarray, + tokens_to_logits: Callable[[jnp.ndarray], jnp.ndarray], + eos_index: int, + beam_size: int = 4, + per_node_beam_size: int = 2, + alpha: float = 0.6, + max_steps: int = 40, + **kwargs) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Beam search for transformer machine translation. + + If `inputs` has non-zero entries, those values are not modified, i.e., + the sampled values for those positions are discarded. This simulates the + teacher forcing on the prefix positions. + + Args: + inputs: array: (batch_size, max_steps) + tokens_to_logits: a function that converts input + (batch_size, max_steps) to (batch_size, max_steps, vocab_size) + eos_index: int: id of end-of-sentence token for target vocabulary. + beam_size: number of decoded sequences to be returned. This is equivalent + to the number of beams used in the beam search. + per_node_beam_size: int + alpha: float: scaling factor for brevity penalty. + max_steps: int: an optional maximum length of decoded sequence. If + None, it uses `inputs.shape[1]` as `max_decode_len`. + **kwargs: args for other decoder + + Returns: + Tuple of: + [batch_size, beam_size, max_decode_len] top-scoring sequences + [batch_size, beam_size] beam-search scores. + """ + del kwargs + batch_size = inputs.shape[0] + end_marker = jnp.array(eos_index) + + # initialize beam search state + beam_search_init_state = beam_init(batch_size, beam_size, max_steps, inputs) + + def beam_search_loop_cond_fn(state: BeamState): + """Beam search loop termination condition.""" + not_at_end = (state.cur_index < max_steps - 1) + # Is no further progress in the beam search possible? + # Get the best possible scores from alive sequences. + min_brevity_penalty = brevity_penalty(alpha, max_steps) + best_live_scores = state.live_logprobs[:, -1:] / min_brevity_penalty + # Get the worst scores from finished sequences. + worst_finished_scores = jnp.min( + state.finished_scores, axis=1, keepdims=True) + # Mask out scores from slots without any actual finished sequences. + worst_finished_scores = jnp.where(state.finished_flags, + worst_finished_scores, NEG_INF) + # If no best possible live score is better than current worst finished + # scores, the search cannot improve the finished set further. + search_terminated = jnp.all(worst_finished_scores > best_live_scores) + + # If we're not at the max decode length, and the search hasn't terminated, + # continue looping. + return not_at_end & (~search_terminated) + + def beam_search_loop_body_fn(state: BeamState) -> BeamState: + """Beam search loop state update function.""" + # Flatten beam dimension into batch to be compatible with model. + test_input = flatten_beam_dim(state.live_seqs) + flat_logits = tokens_to_logits(test_input)[:, state.cur_index - 1] + # [batch * beam, vocab] --> [batch, beam, vocab] + logits = unflatten_beam_dim(flat_logits, batch_size, beam_size) + candidate_log_probs = jax.nn.log_softmax(logits) # [batch, beam, vocab] + log_probs = ( + candidate_log_probs + jnp.expand_dims( + state.live_logprobs, axis=2)) # [batch, beam, vocab] + vocab_size = log_probs.shape[-1] + + beams_to_keep = per_node_beam_size * beam_size + flat_log_probs = log_probs.reshape( + (batch_size, beam_size * vocab_size)) # [batch, beams * vocab] + topk_log_probs, topk_indices = lax.top_k( + flat_log_probs, k=beams_to_keep) # [batch, per_node_beam*beams] + + topk_ids = topk_indices % vocab_size + topk_ids = jnp.expand_dims(topk_ids, axis=2) + + # Recover the beam index by floor division. + topk_beam_indices = topk_indices // vocab_size + + # Gather per_node_beam*k top beams. + # --> [batch, per_node_beam*beams, length] + topk_seq = gather_beams(state.live_seqs, topk_beam_indices, batch_size, + beam_size, beams_to_keep) + # Update sequences for the per_node_beam*K top-k new sequences. + # --> [batch, per_node_beam*beams, length] + topk_seq = lax.dynamic_update_slice( + topk_seq, topk_ids, (0, 0, state.cur_index)) + + # Update LIVE (in-progress) sequences: + # Did any of these sequences reach an end marker? + # --> [batch, per_node_beam*beams] + newly_finished = (topk_seq[:, :, state.cur_index] == end_marker) + # To prevent these newly finished sequences from being added to the LIVE + # set of active beam search sequences, set their log probs to a very large + # negative value. + new_log_probs = topk_log_probs + newly_finished * NEG_INF + # Determine the top k beam indices (from top per_node_beam*k beams) + # from log probs. --> [batch, beams] + _, new_topk_indices = lax.top_k(new_log_probs, k=beam_size) + new_topk_indices = jnp.flip(new_topk_indices, axis=1) + # Gather the top k beams (from top per_node_beam*k beams). + # --> [batch, beams, length], [batch, beams] + top_alive_seq, top_alive_log_probs = gather_beams( + [topk_seq, new_log_probs], new_topk_indices, batch_size, + per_node_beam_size * beam_size, beam_size) + + # Update FINISHED (reached end of sentence) sequences: + # Calculate new seq scores from log probabilities. + new_scores = topk_log_probs / brevity_penalty(alpha, state.cur_index) + # Mask out the still unfinished sequences by adding large negative value. + # --> [batch, per_node_beam*beams] + new_scores += (~newly_finished) * NEG_INF + + # Combine sequences, scores, and flags along the beam dimension and compare + # new finished sequence scores to existing finished scores and select the + # best from the new set of beams. + # --> [batch, (1+per_node_beam)*beams, length] + finished_seqs = jnp.concatenate([state.finished_seqs, topk_seq], axis=1) + finished_scores = jnp.concatenate( # --> [batch, (1+per_node_beam)*beams] + [state.finished_scores, new_scores], axis=1) + finished_flags = jnp.concatenate( # --> [batch, (1+per_node_beam)*beams] + [state.finished_flags, newly_finished], axis=1) + # --> [batch, beams, length], [batch, beams], [batch, beams] + top_finished_seq, top_finished_scores, top_finished_flags = ( + gather_topk_beams([finished_seqs, finished_scores, finished_flags], + finished_scores, batch_size, beam_size)) + + return BeamState( + cur_index=state.cur_index + 1, + live_logprobs=top_alive_log_probs, + finished_scores=top_finished_scores, + live_seqs=top_alive_seq, + finished_seqs=top_finished_seq, + finished_flags=top_finished_flags, + ) + + # Run while loop and get final beam search state. + final_state = lax.while_loop(beam_search_loop_cond_fn, + beam_search_loop_body_fn, beam_search_init_state) + + # Account for the edge-case where there are no finished sequences for a + # particular batch item. If so, return live sequences for that batch item. + # --> [batch] + none_finished = jnp.any(final_state.finished_flags, axis=1) + # --> [batch, beams, length] + finished_seqs = jnp.where( + none_finished[:, None, None], + final_state.finished_seqs, final_state.live_seqs) + # --> [batch, beams] + finished_scores = jnp.where( + none_finished[:, None], + final_state.finished_scores, final_state.live_logprobs) + return finished_seqs, finished_scores + + +def autoregressive_predict( + flax_model, params, outputs, method='beam', beam_size=4, + per_node_beam_size=2, + brevity_penalty_alpha=0.6, + feature_key='visual_features'): + """Generate caption from object features in an auto-agressive way. + + Args: + flax_model: flax model. + params: pytree of network parameters. + outputs: dict with keys: + 'visual_features': (batch_size, num_tokens, hidden_size) or + (batch_size, num_caps_per_image, num_tokens, hidden_size) + 'begin_tokens': (batch_size, max_caption_length) + method: 'greedy' or 'beam' + beam_size: int + per_node_beam_size: int + brevity_penalty_alpha: float + feature_key: str + Returns: + Updated outputs with updated keys: + 'text_tokens': int array (batch_size, max_caption_length), + whose values are in range vocab_size + """ + visual_features = outputs[feature_key] + visual_feature_dim_expanded = False + if visual_features.ndim == 3: + visual_feature_dim_expanded = True + visual_features = visual_features[:, None] + batch_size, num_caps_per_image = visual_features.shape[:2] + total_batch_size = batch_size * num_caps_per_image + visual_features = visual_features.reshape( + (total_batch_size,) + visual_features.shape[2:]) + + begin_tokens = outputs['begin_tokens'] + begin_tokens = begin_tokens.reshape( + (total_batch_size,) + begin_tokens.shape[2:]) + if 'context_tokens' in outputs and outputs['context_tokens'] is not None: + context_tokens = outputs['context_tokens'] + context_tokens = context_tokens.reshape( + (total_batch_size,) + context_tokens.shape[2:]) + else: + context_tokens = None + + if beam_size > 1: + assert method == 'beam', 'Beam size must be 1 for greedy decoding' + visual_features = jnp.broadcast_to( + visual_features[:, None], + (total_batch_size, beam_size,) + visual_features.shape[1:]).reshape( + (total_batch_size * beam_size,) + visual_features.shape[1:] + ) + if context_tokens is not None: + context_tokens = jnp.broadcast_to( + context_tokens[:, None], + (total_batch_size, beam_size, context_tokens.shape[1])).reshape( + total_batch_size * beam_size, context_tokens.shape[1]) + tokens_to_logits_kwargs = {} + if context_tokens is not None: + tokens_to_logits_kwargs['context_tokens'] = context_tokens + # pylint: disable=g-long-lambda + # (text_batch_size, max_caption_length) -> + # (text_batch_size, max_caption_length, vocab_size) + tokens_to_logits = lambda x: flax_model.apply( + variables={'params': params}, + text_tokens=x, + visual_features=visual_features, + method=flax_model.decode_text, + **tokens_to_logits_kwargs, + ) + assert method in ['greedy', 'beam'] + decode_fn = greedy_decode if method == 'greedy' else beam_search + kwargs = {} + if method == 'beam': + kwargs['beam_size'] = beam_size + kwargs['per_node_beam_size'] = per_node_beam_size + kwargs['alpha'] = brevity_penalty_alpha + text_tokens, log_probs = decode_fn( + begin_tokens, tokens_to_logits, + max_steps=flax_model.max_caption_length, + eos_index=flax_model.end_token_id, + vocab_size=flax_model.vocab_size, + **kwargs) + outputs['beam_text_tokens'] = text_tokens.reshape( + total_batch_size, beam_size, flax_model.max_caption_length) + outputs['beam_log_probs'] = log_probs.reshape(total_batch_size, beam_size) + # output of beam search scores are in increasing order. + outputs['text_tokens'] = outputs['beam_text_tokens'][:, -1] + outputs['log_probs'] = outputs['beam_log_probs'][:, -1] + if not visual_feature_dim_expanded: + outputs['text_tokens'] = outputs['text_tokens'].reshape( + (batch_size, num_caps_per_image,) + outputs['text_tokens'].shape[1:]) + outputs['log_probs'] = outputs['log_probs'].reshape( + (batch_size, num_caps_per_image)) + outputs['beam_text_tokens'] = outputs['beam_text_tokens'].reshape( + (batch_size, num_caps_per_image,) + + outputs['beam_text_tokens'].shape[1:]) + outputs['beam_log_probs'] = outputs['beam_log_probs'].reshape( + (batch_size, num_caps_per_image,) + outputs['beam_log_probs'].shape[1:]) + return outputs diff --git a/scenic/projects/pixel_llm/configs/__init__.py b/scenic/projects/pixel_llm/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_densecap.py b/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_densecap.py new file mode 100644 index 0000000000000000000000000000000000000000..a778e5baa86525f2d4d62fefe72edbbaac7bcece --- /dev/null +++ b/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_densecap.py @@ -0,0 +1,415 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long,unused-variable,unused-argument +r"""Default configs for fine-tuning dense object captioning on Visual Genome wiht BERT. + +""" + +import ml_collections + +from scenic.projects.pixel_llm.configs import common + + +def get_vg_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, weight=1.0): + """Returns the visual genome train source.""" + + min_scale = 0.1 + max_scale = 2.0 + + prompt = "['an object of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_train = ( + 'parse_vg' + f"|decode_vg_annotations('{tokenizer_path}', {max_text_tokens})" + f"|random_horizontal_flip" + f"|random_ratio_resize({min_scale}, {max_scale}, {crop_size})" + f"|fixed_size_crop({crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_detection_annotations({max_boxes})" + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + ) + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'img_id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'regions/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'regions/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'regions/phrase': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'vg_densecap': { + 'tfrecords': common.VG_TRAIN.path, + 'size': common.VG_TRAIN.size, + } + } + + dataset_name = 'vg_densecap' + split = 'train' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_vg_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='vg', split='test', task='densecap'): + """Returns the visual genome train source.""" + + prompt = "['an object of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + 'parse_vg' + f"|decode_vg_annotations('{tokenizer_path}', {max_text_tokens})" + f"|resize_shorter({crop_size}, {crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_detection_annotations({max_boxes})" + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + ) + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'img_id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'regions/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'regions/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'regions/phrase': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'vg': { + 'tfrecords': common.VG_TEST.path, + 'size': common.VG_TEST.size, + } + } + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{task}_{split}', + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + return source + + +def get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, refexp_field='sent', dataset_name='refcoco_unc', split='validation'): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ train source.""" + + prompt = "['an object of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', {max_text_tokens}, refexp_field='{refexp_field}')" + f'|resize_shorter({crop_size}, {crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + f"|drop_nested('label', ['refexp_ids'])" + ) + if mask_on: + preproc_spec_eval += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + # 'objects/mask': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'refcoco_unc_validation': { + 'tfrecords': common.REFCOCO_UNC_VALIDATION.path, + 'size': common.REFCOCO_UNC_VALIDATION.size, + }, + 'refcoco_unc_testA': { + 'tfrecords': common.REFCOCO_UNC_TESTA.path, + 'size': common.REFCOCO_UNC_TESTA.size, + }, + 'refcoco_unc_testB': { + 'tfrecords': common.REFCOCO_UNC_TESTB.path, + 'size': common.REFCOCO_UNC_TESTB.size, + }, + 'refcocog_umd_validation': { + 'tfrecords': common.REFCOCOG_UMD_VALIDATION.path, + 'size': common.REFCOCOG_UMD_VALIDATION.size, + }, + 'refcocog_umd_test': { + 'tfrecords': common.REFCOCOG_UMD_TEST.path, + 'size': common.REFCOCOG_UMD_TEST.size, + }, + 'refcocoplus_unc_validation': { + 'tfrecords': common.REFCOCOPLUS_UNC_VALIDATION.path, + 'size': common.REFCOCOPLUS_UNC_VALIDATION.size, + }, + 'refcocoplus_unc_testA': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTA.path, + 'size': common.REFCOCOPLUS_UNC_TESTA.size, + }, + 'refcocoplus_unc_testB': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTB.path, + 'size': common.REFCOCOPLUS_UNC_TESTB.size, + }, + } + + dataset_name_split = f'{dataset_name}_{split}' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name_split]['tfrecords'], + 'size': tfrecord_meta[dataset_name_split]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_loca_{split}', + 'split': split, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + return source + + +def get_config(): + """Returns the configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'pixel_llm_bert_densecap' + + # Dataset. + config.dataset_name = 'custom_flexio' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = ['scenic.projects.pixel_llm.io.ops'] + + tokenizer_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.tokenizer_weight_path = tokenizer_path # Used in evaluation + max_text_tokens = 40 + max_context_tokens = 8 + max_boxes = 100 + crop_size = 384 + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.merge_sources = True + config.dataset_configs.train.batch_before_merge = True + config.dataset_configs.train.sources = [ + get_vg_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size), + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.merge_sources = False + config.dataset_configs.eval.sources = [ + get_vg_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size), + get_vg_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='vg', split='test', task='loca'), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocog_umd', split='validation'), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + config.dataset_configs.densecap_configs = ml_collections.ConfigDict() + config.dataset_configs.densecap_configs.test_annotation_path = common.VG_DENSECAP_TEST_ANNOTATION + config.dataset_configs.loca_configs = ml_collections.ConfigDict() + config.dataset_configs.loca_configs.vg_loca_test = ml_collections.ConfigDict() + config.dataset_configs.loca_configs.vg_loca_test.merge_gt_boxes = False + config.dataset_configs.loca_configs.refcocog_umd_loca_validation = ml_collections.ConfigDict() + config.dataset_configs.loca_configs.refcocog_umd_loca_validation.merge_gt_boxes = False + config.dataset_configs.extra_meta_data = { + 'input_shape': [-1, crop_size, crop_size, 3], + 'num_classes': -1, + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'pixel_llm' + + config.model.git_backbone_name = 'eva02_vit' + config.model.git_backbone_args = ml_collections.ConfigDict() + config.model.git_backbone_args.embed_dim = 1024 + config.model.git_backbone_args.depth = 24 + config.model.git_backbone_args.num_heads = 16 + config.model.git_backbone_args.patch_size = 14 + config.model.git_backbone_args.mlp_ratio = 4 * 2 / 3 + config.model.git_backbone_args.use_ln_post = True + config.model.git_backbone_args.drop_path_rate = 0.1 + config.model.git_preprocess_args = ml_collections.ConfigDict() + config.model.git_preprocess_args.image_size = (384, 384) + + config.model.det_backbone_name = 'none' + + config.model.sam_backbone_name = 'sam_vit' + config.model.sam_backbone_args = ml_collections.ConfigDict() + config.model.sam_backbone_args.embed_dim = 1280 + config.model.sam_backbone_args.depth = 32 + config.model.sam_backbone_args.num_heads = 16 + config.model.sam_backbone_args.drop_path_rate = 0.5 + config.model.sam_backbone_args.window_block_indexes = (0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30) + config.model.sam_preprocess_args = ml_collections.ConfigDict() + config.model.sam_preprocess_args.image_size = (384, 384) + + config.model.text_decoder_feature_key = 'git_visual_features+sam_visual_features' + + config.model.det_loss_weight = 1.0 + config.model.box_decoder_feature_key = 'git_visual_features+sam_visual_features' + # CenterNet2 parameters + config.model.box_decoder_name = 'centernet2_det_decoder' + config.model.box_decoder_args = ml_collections.ConfigDict() + config.model.box_decoder_args.num_classes = -1 + config.model.box_decoder_args.strides = (8, 16, 32, 64, 128) + config.model.box_decoder_args.roi_num_classes = 1 + config.model.box_decoder_args.hm_weight = 0.5 + config.model.box_decoder_args.reg_weight = 1.0 + config.model.box_decoder_args.score_thresh = 0.0001 + config.model.box_decoder_args.pre_nms_topk_train = 2000 + config.model.box_decoder_args.post_nms_topk_train = 1000 + config.model.box_decoder_args.pre_nms_topk_test = 1000 + config.model.box_decoder_args.post_nms_topk_test = 256 + config.model.box_decoder_args.iou_thresh = 0.9 + config.model.box_decoder_args.roi_matching_threshold = (0.6,) + config.model.box_decoder_args.roi_nms_threshold = 0.5 + config.model.box_decoder_args.roi_post_nms_num_detections = 100 + s = 2 + config.model.box_decoder_args.fpn_range = ( + (0, 80 / s), (64 / s, 160 / s), (128 / s, 320 / s), + (256 / s, 640 / s), (512 / s, 100000 / s)) + config.model.box_decoder_args.match_gt_thresh = 0.6 + + config.model.num_text_proposals = 64 + config.model.num_detections = config.model.box_decoder_args.roi_post_nms_num_detections + + # text + config.model.decode_per_node_beam_size = 1 + config.model.max_caption_length = max_text_tokens + + config.model.prompt_drop_rate = 0.0 + config.model.prompt_use_box_rate = 1.0 + config.model.prompt_encoder_name = 'sam_prompt_encoder' + config.model.prompt_encoder_args = ml_collections.ConfigDict() + config.model.prompt_encoder_args.embed_dim = 256 + config.model.prompt_adapter_name = 'sam_prompt_adapter' + config.model.prompt_adapter_args = ml_collections.ConfigDict() + config.model.prompt_adapter_args.depth = 6 + config.model.prompt_adapter_args.transformer_dim = 512 + config.model.prompt_adapter_args.output_dim = 1024 + + config.model.mask_decoder_name = 'none' + + config.model.prompt_fuse_fn = 'sparse' + config.model.decode_method = 'greedy' + config.model.decode_beam_size = 1 + # config.model.decode_method = 'beam' + # config.model.decode_beam_size = 4 + # config.model.decode_per_node_beam_size = 2 + config.model.mult_caption_score = False + config.model.max_caption_length = max_text_tokens + + config.model.point_predictor_name = 'none' + + config.weights='/path/to/pixel_llm_bert_trace', + config.skip_wrong_shape = False + # config.eval_only = True + + # Training. + config.batch_size = 64 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.05 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.8 + config.optimizer.num_layers = config.model.git_backbone_args.depth + config.optimizer.decay_layer_prefix = 'git_backbone/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + config.frozen_params = ( + ('.*sam_backbone.*', 'sam_backbone'), + ('.*prompt_encoder.*', 'prompt_encoder'), + # ('.*git_backbone.*', 'git_backbone'), + ) + + # learning rate and training schedule + config.num_training_steps = 40000 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = 1000 + config.lr_configs.base_learning_rate = 1e-4 + + config.checkpoint_steps = 5000 + config.log_eval_steps = 5000 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_ref.py b/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_ref.py new file mode 100644 index 0000000000000000000000000000000000000000..179c2385e6550d8c2acd31514a3477a49a5b3409 --- /dev/null +++ b/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_ref.py @@ -0,0 +1,408 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for fine-tuning referring expression localization on RefCOCO wiht BERT. + +""" + +import ml_collections + +from scenic.projects.pixel_llm.configs import common + + +def get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, use_text_as_context=True, refexp_field='sent', dataset_name='refcoco_unc', weight=1.0): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ train source.""" + + min_scale = 0.75 + max_scale = 1.25 + + context_prefix = 'where is ' + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_train = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', num_captions_per_sample={max_boxes}, max_text_tokens={max_text_tokens}, use_text_as_context={use_text_as_context}, max_context_tokens={max_context_tokens}, append_context_eos={append_eos}, context_prefix='{context_prefix}', refexp_field='{refexp_field}')" + f'|random_ratio_resize({min_scale}, {max_scale}, {crop_size})' + f'|fixed_size_crop({crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f"|add_prompt_boxes" + f"|drop_nested('label', ['refexp_ids'])" + f"|add_task_mask(['point'])" + ) + if mask_on: + preproc_spec_train += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'merge_coco_img_safe': { + 'tfrecords': common.MERGE_COCO_IMAGE_SAFE_TRAIN.path, + 'size': common.MERGE_COCO_IMAGE_SAFE_TRAIN.size, + }, + 'refcoco_unc': { + 'tfrecords': common.REFCOCO_UNC_TRAIN.path, + 'size': common.REFCOCO_UNC_TRAIN.size, + }, + 'refcocog_umd': { + 'tfrecords': common.REFCOCOG_UMD_TRAIN.path, + 'size': common.REFCOCOG_UMD_TRAIN.size, + }, + 'refcocoplus_unc': { + 'tfrecords': common.REFCOCOPLUS_UNC_TRAIN.path, + 'size': common.REFCOCOPLUS_UNC_TRAIN.size, + }, + 'uni_mixed_coco': { + 'tfrecords': common.UNI_MIXED_COCO_TRAIN.path, + 'size': common.UNI_MIXED_COCO_TRAIN.size, + }, + 'uni_mixed_vg': { + 'tfrecords': common.UNI_MIXED_VG_TRAIN.path, + 'size': common.UNI_MIXED_VG_TRAIN.size, + }, + 'uni_flickr': { + 'tfrecords': common.UNI_FLICKR_TRAIN.path, + 'size': common.UNI_FLICKR_TRAIN.size, + }, + } + + split = 'train' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, use_text_as_context=True, refexp_field='sent', dataset_name='refcoco_unc', split='validation'): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ eval source.""" + + context_prefix = 'where is ' + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', max_text_tokens={max_text_tokens}, use_text_as_context={use_text_as_context}, max_context_tokens={max_context_tokens}, append_context_eos={append_eos}, context_prefix='{context_prefix}', refexp_field='{refexp_field}')" + f'|resize_shorter({crop_size}, {crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f"|add_prompt_boxes" + ) + if mask_on: + preproc_spec_eval += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + # 'objects/mask': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'refcoco_unc_validation': { + 'tfrecords': common.REFCOCO_UNC_VALIDATION.path, + 'size': common.REFCOCO_UNC_VALIDATION.size, + }, + 'refcoco_unc_testA': { + 'tfrecords': common.REFCOCO_UNC_TESTA.path, + 'size': common.REFCOCO_UNC_TESTA.size, + }, + 'refcoco_unc_testB': { + 'tfrecords': common.REFCOCO_UNC_TESTB.path, + 'size': common.REFCOCO_UNC_TESTB.size, + }, + 'refcocog_umd_validation': { + 'tfrecords': common.REFCOCOG_UMD_VALIDATION.path, + 'size': common.REFCOCOG_UMD_VALIDATION.size, + }, + 'refcocog_umd_test': { + 'tfrecords': common.REFCOCOG_UMD_TEST.path, + 'size': common.REFCOCOG_UMD_TEST.size, + }, + 'refcocoplus_unc_validation': { + 'tfrecords': common.REFCOCOPLUS_UNC_VALIDATION.path, + 'size': common.REFCOCOPLUS_UNC_VALIDATION.size, + }, + 'refcocoplus_unc_testA': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTA.path, + 'size': common.REFCOCOPLUS_UNC_TESTA.size, + }, + 'refcocoplus_unc_testB': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTB.path, + 'size': common.REFCOCOPLUS_UNC_TESTB.size, + }, + } + + dataset_name_split = f'{dataset_name}_{split}' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name_split]['tfrecords'], + 'size': tfrecord_meta[dataset_name_split]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'split': split, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + return source + + +def get_config(): + """Returns the configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'pixel_llm_bert_ref' + + # Dataset. + config.dataset_name = 'custom_flexio' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = ['scenic.projects.pixel_llm.io.ops'] + + tokenizer_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.tokenizer_weight_path = tokenizer_path # Used in evaluation + max_text_tokens = 40 + max_context_tokens = -1 + use_text_as_context = True + max_boxes = 16 + crop_size = 384 + refexp_field = 'sent' + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.merge_sources = True + config.dataset_configs.train.batch_before_merge = True + config.dataset_configs.train.sources = [ + get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='uni_flickr', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='uni_mixed_coco', refexp_field=refexp_field, weight=5.0, use_text_as_context=use_text_as_context), + get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='uni_mixed_vg', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.merge_sources = False + config.dataset_configs.eval.sources = [ + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcoco_unc', split='validation', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + # get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcoco_unc', split='testA', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + # get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcoco_unc', split='testB', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocog_umd', split='validation', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + # get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocog_umd', split='test', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocoplus_unc', split='validation', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + # get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocoplus_unc', split='testA', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + # get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocoplus_unc', split='testB', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + config.dataset_configs.refer_configs = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.eval_step_multiplier = 1.0 + config.dataset_configs.refer_configs.refcoco_unc_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_validation.test_annotation_path = common.REFCOCO_UNC_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcoco_unc_testA = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_testA.test_annotation_path = common.REFCOCO_UNC_TESTA_ANNOTATION + config.dataset_configs.refer_configs.refcoco_unc_testB = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_testB.test_annotation_path = common.REFCOCO_UNC_TESTB_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_validation.test_annotation_path = common.REFCOCOPLUS_UNC_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_testA = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_testA.test_annotation_path = common.REFCOCOPLUS_UNC_TESTA_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_testB = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_testB.test_annotation_path = common.REFCOCOPLUS_UNC_TESTB_ANNOTATION + config.dataset_configs.refer_configs.refcocog_umd_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocog_umd_validation.test_annotation_path = common.REFCOCOG_UMD_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcocog_umd_test = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocog_umd_test.test_annotation_path = common.REFCOCOG_UMD_TEST_ANNOTATION + config.dataset_configs.extra_meta_data = { + 'input_shape': [-1, crop_size, crop_size, 3], + 'prompt_box_shape': [-1, 1, 4], + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'pixel_llm' + + config.model.git_backbone_name = 'eva02_vit' + config.model.git_backbone_args = ml_collections.ConfigDict() + config.model.git_backbone_args.embed_dim = 1024 + config.model.git_backbone_args.depth = 24 + config.model.git_backbone_args.num_heads = 16 + config.model.git_backbone_args.patch_size = 14 + config.model.git_backbone_args.mlp_ratio = 4 * 2 / 3 + config.model.git_backbone_args.use_ln_post = True + config.model.git_backbone_args.drop_path_rate = 0.1 + config.model.git_preprocess_args = ml_collections.ConfigDict() + config.model.git_preprocess_args.image_size = (384, 384) + + config.model.det_backbone_name = 'none' + + config.model.sam_backbone_name = 'sam_vit' + config.model.sam_backbone_args = ml_collections.ConfigDict() + config.model.sam_backbone_args.embed_dim = 1280 + config.model.sam_backbone_args.depth = 32 + config.model.sam_backbone_args.num_heads = 16 + config.model.sam_backbone_args.drop_path_rate = 0.5 + config.model.sam_backbone_args.window_block_indexes = (0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30) + config.model.sam_preprocess_args = ml_collections.ConfigDict() + config.model.sam_preprocess_args.image_size = (384, 384) + + config.model.text_decoder_feature_key = 'git_visual_features+sam_visual_features' + + config.model.box_decoder_name = 'none' + + config.model.prompt_drop_rate = 0.0 + config.model.prompt_use_box_rate = 1.0 + config.model.prompt_encoder_name = 'sam_prompt_encoder' + config.model.prompt_encoder_args = ml_collections.ConfigDict() + config.model.prompt_encoder_args.embed_dim = 256 + config.model.prompt_adapter_name = 'sam_prompt_adapter' + config.model.prompt_adapter_args = ml_collections.ConfigDict() + config.model.prompt_adapter_args.depth = 6 + config.model.prompt_adapter_args.transformer_dim = 512 + config.model.prompt_adapter_args.output_dim = 1024 + + config.model.mask_decoder_name = 'none' + + config.model.prompt_fuse_fn = 'sparse' + config.model.decode_method = 'beam' + config.model.decode_beam_size = 3 + config.model.decode_per_node_beam_size = 1 + config.model.mult_caption_score = True + config.model.max_caption_length = max_text_tokens + + config.model.point_predictor_name = 'mlp_point_predictor' + config.model.gt_box_points_per_side = -1 + config.model.point_loss_type = 'l1_nonzero' + config.model.use_points_as_det = True + config.model.point_output_ignore = '^end-1' + config.model.point_loss_weight = 0.1 + config.model.point_predictor_args = ml_collections.ConfigDict() + config.model.point_predictor_args.num_output_points = 2 + config.model.point_predictor_args.pre_norm = True + config.model.point_predictor_args.mlp_activation = 'gelu' + config.model.point_predictor_args.depth = 4 + + config.weights = '/path/to/pixel_llm_bert_trace', + config.skip_wrong_shape = False + + # Training. + config.batch_size = 64 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.frozen_params = ( + ('.*sam_backbone.*', 'sam_backbone'), + ('.*prompt_encoder.*', 'prompt_encoder'), + # ('.*git_backbone.*', 'git_backbone'), + ('.*mask_decoder.*', 'mask_decoder'), + ) + + iter_factor = 4 + # learning rate and training schedule + config.num_training_steps = 30_000 * iter_factor + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = 250 * iter_factor + config.lr_configs.base_learning_rate = 5e-5 + + config.checkpoint_steps = 1000 * iter_factor + config.log_eval_steps = 2500 * iter_factor + + # Logging. + config.eval_meteor_spice = False + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_refseg.py b/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_refseg.py new file mode 100644 index 0000000000000000000000000000000000000000..e872c15ad7c13ef32150c064cba9f2909b86c616 --- /dev/null +++ b/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_refseg.py @@ -0,0 +1,433 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for fine-tuning referring expression segmentation on RefCOCO wiht BERT. + +""" + +import ml_collections + +from scenic.projects.pixel_llm.configs import common + + +def get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, use_text_as_context=True, refexp_field='sent', dataset_name='refcoco_unc', weight=1.0): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ train source.""" + + min_scale = 0.75 + max_scale = 1.25 + + context_prefix = 'where is ' + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_train = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', num_captions_per_sample={max_boxes}, max_text_tokens={max_text_tokens}, use_text_as_context={use_text_as_context}, max_context_tokens={max_context_tokens}, append_context_eos={append_eos}, context_prefix='{context_prefix}', refexp_field='{refexp_field}')" + f'|random_ratio_resize({min_scale}, {max_scale}, {crop_size})' + f'|fixed_size_crop({crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f"|add_prompt_boxes" + f"|drop_nested('label', ['refexp_ids'])" + f"|add_task_mask(['point'])" + ) + if mask_on: + preproc_spec_train += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'merge_coco_img_safe': { + 'tfrecords': common.MERGE_COCO_IMAGE_SAFE_TRAIN.path, + 'size': common.MERGE_COCO_IMAGE_SAFE_TRAIN.size, + }, + 'refcoco_unc': { + 'tfrecords': common.REFCOCO_UNC_TRAIN.path, + 'size': common.REFCOCO_UNC_TRAIN.size, + }, + 'refcocog_umd': { + 'tfrecords': common.REFCOCOG_UMD_TRAIN.path, + 'size': common.REFCOCOG_UMD_TRAIN.size, + }, + 'refcocoplus_unc': { + 'tfrecords': common.REFCOCOPLUS_UNC_TRAIN.path, + 'size': common.REFCOCOPLUS_UNC_TRAIN.size, + }, + 'uni_mixed_coco': { + 'tfrecords': common.UNI_MIXED_COCO_TRAIN.path, + 'size': common.UNI_MIXED_COCO_TRAIN.size, + }, + 'uni_mixed_vg': { + 'tfrecords': common.UNI_MIXED_VG_TRAIN.path, + 'size': common.UNI_MIXED_VG_TRAIN.size, + }, + 'uni_flickr': { + 'tfrecords': common.UNI_FLICKR_TRAIN.path, + 'size': common.UNI_FLICKR_TRAIN.size, + }, + } + + split = 'train' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, use_text_as_context=True, refexp_field='sent', dataset_name='refcoco_unc', split='validation'): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ eval source.""" + + context_prefix = 'where is ' + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', max_text_tokens={max_text_tokens}, use_text_as_context={use_text_as_context}, max_context_tokens={max_context_tokens}, append_context_eos={append_eos}, context_prefix='{context_prefix}', refexp_field='{refexp_field}')" + f'|resize_shorter({crop_size}, {crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f"|add_prompt_boxes" + ) + if mask_on: + preproc_spec_eval += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + # 'objects/mask': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'refcoco_unc_validation': { + 'tfrecords': common.REFCOCO_UNC_VALIDATION.path, + 'size': common.REFCOCO_UNC_VALIDATION.size, + }, + 'refcoco_unc_testA': { + 'tfrecords': common.REFCOCO_UNC_TESTA.path, + 'size': common.REFCOCO_UNC_TESTA.size, + }, + 'refcoco_unc_testB': { + 'tfrecords': common.REFCOCO_UNC_TESTB.path, + 'size': common.REFCOCO_UNC_TESTB.size, + }, + 'refcocog_umd_validation': { + 'tfrecords': common.REFCOCOG_UMD_VALIDATION.path, + 'size': common.REFCOCOG_UMD_VALIDATION.size, + }, + 'refcocog_umd_test': { + 'tfrecords': common.REFCOCOG_UMD_TEST.path, + 'size': common.REFCOCOG_UMD_TEST.size, + }, + 'refcocoplus_unc_validation': { + 'tfrecords': common.REFCOCOPLUS_UNC_VALIDATION.path, + 'size': common.REFCOCOPLUS_UNC_VALIDATION.size, + }, + 'refcocoplus_unc_testA': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTA.path, + 'size': common.REFCOCOPLUS_UNC_TESTA.size, + }, + 'refcocoplus_unc_testB': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTB.path, + 'size': common.REFCOCOPLUS_UNC_TESTB.size, + }, + } + + dataset_name_split = f'{dataset_name}_{split}' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name_split]['tfrecords'], + 'size': tfrecord_meta[dataset_name_split]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'split': split, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + return source + + +def get_config(): + """Returns the configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'pixel_llm_bert_ref' + + # Dataset. + config.dataset_name = 'custom_flexio' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = ['scenic.projects.pixel_llm.io.ops'] + + tokenizer_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.tokenizer_weight_path = tokenizer_path # Used in evaluation + max_text_tokens = 40 + max_context_tokens = -1 + max_boxes = 16 + crop_size = 384 + refexp_field = 'sent' + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.merge_sources = True + config.dataset_configs.train.batch_before_merge = True + config.dataset_configs.train.sources = [ + # get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcoco_unc', refexp_field=refexp_field, mask_on=True), + # get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocog_umd', refexp_field=refexp_field, mask_on=True), + # get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocoplus_unc', refexp_field=refexp_field, mask_on=True), + get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='merge_coco_img_safe', refexp_field=refexp_field, mask_on=True), + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.merge_sources = False + config.dataset_configs.eval.sources = [ + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcoco_unc', split='validation', refexp_field=refexp_field, mask_on=True), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcoco_unc', split='testA', refexp_field=refexp_field, mask_on=True), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcoco_unc', split='testB', refexp_field=refexp_field, mask_on=True), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocog_umd', split='validation', refexp_field=refexp_field, mask_on=True), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocog_umd', split='test', refexp_field=refexp_field, mask_on=True), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocoplus_unc', split='validation', refexp_field=refexp_field, mask_on=True), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocoplus_unc', split='testA', refexp_field=refexp_field, mask_on=True), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocoplus_unc', split='testB', refexp_field=refexp_field, mask_on=True), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + config.dataset_configs.refer_configs = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.eval_step_multiplier = 1.0 + config.dataset_configs.refer_configs.refcoco_unc_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_validation.test_annotation_path = common.REFCOCO_UNC_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcoco_unc_testA = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_testA.test_annotation_path = common.REFCOCO_UNC_TESTA_ANNOTATION + config.dataset_configs.refer_configs.refcoco_unc_testB = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_testB.test_annotation_path = common.REFCOCO_UNC_TESTB_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_validation.test_annotation_path = common.REFCOCOPLUS_UNC_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_testA = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_testA.test_annotation_path = common.REFCOCOPLUS_UNC_TESTA_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_testB = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_testB.test_annotation_path = common.REFCOCOPLUS_UNC_TESTB_ANNOTATION + config.dataset_configs.refer_configs.refcocog_umd_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocog_umd_validation.test_annotation_path = common.REFCOCOG_UMD_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcocog_umd_test = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocog_umd_test.test_annotation_path = common.REFCOCOG_UMD_TEST_ANNOTATION + config.dataset_configs.extra_meta_data = { + 'input_shape': [-1, crop_size, crop_size, 3], + 'prompt_box_shape': [-1, 1, 4], + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'pixel_llm' + + config.model.git_backbone_name = 'eva02_vit' + config.model.git_backbone_args = ml_collections.ConfigDict() + config.model.git_backbone_args.embed_dim = 1024 + config.model.git_backbone_args.depth = 24 + config.model.git_backbone_args.num_heads = 16 + config.model.git_backbone_args.patch_size = 14 + config.model.git_backbone_args.mlp_ratio = 4 * 2 / 3 + config.model.git_backbone_args.use_ln_post = True + config.model.git_backbone_args.drop_path_rate = 0.1 + config.model.git_preprocess_args = ml_collections.ConfigDict() + config.model.git_preprocess_args.image_size = (384, 384) + + config.model.det_backbone_name = 'none' + + config.model.sam_backbone_name = 'sam_vit' + config.model.sam_backbone_args = ml_collections.ConfigDict() + config.model.sam_backbone_args.embed_dim = 1280 + config.model.sam_backbone_args.depth = 32 + config.model.sam_backbone_args.num_heads = 16 + config.model.sam_backbone_args.drop_path_rate = 0.5 + config.model.sam_backbone_args.window_block_indexes = (0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30) + config.model.sam_preprocess_args = ml_collections.ConfigDict() + config.model.sam_preprocess_args.image_size = (384, 384) + + config.model.text_decoder_feature_key = 'git_visual_features+sam_visual_features' + + config.model.box_decoder_name = 'none' + + config.model.prompt_drop_rate = 0.0 + config.model.prompt_use_box_rate = 1.0 + config.model.prompt_encoder_name = 'sam_prompt_encoder' + config.model.prompt_encoder_args = ml_collections.ConfigDict() + config.model.prompt_encoder_args.embed_dim = 256 + config.model.prompt_adapter_name = 'sam_prompt_adapter' + config.model.prompt_adapter_args = ml_collections.ConfigDict() + config.model.prompt_adapter_args.depth = 6 + config.model.prompt_adapter_args.transformer_dim = 512 + config.model.prompt_adapter_args.output_dim = 1024 + + config.model.mask_decoder_name = 'sam_mask_decoder' + + config.model.prompt_fuse_fn = 'sparse' + config.model.decode_method = 'beam' + config.model.decode_beam_size = 3 + config.model.decode_per_node_beam_size = 1 + config.model.mult_caption_score = True + config.model.max_caption_length = max_text_tokens + + config.model.point_predictor_name = 'mlp_point_predictor' + config.model.gt_box_points_per_side = -1 + config.model.point_loss_type = 'l1_nonzero' + config.model.use_points_as_det = True + config.model.point_output_ignore = '^end-1' + config.model.point_loss_weight = 0.1 + config.model.point_predictor_args = ml_collections.ConfigDict() + config.model.point_predictor_args.num_output_points = 2 + config.model.point_predictor_args.pre_norm = True + config.model.point_predictor_args.mlp_activation = 'gelu' + config.model.point_predictor_args.depth = 4 + + config.model.mask_adapter_name = 'sam_mask_adapter' + config.model.mask_adapter_args = ml_collections.ConfigDict() + config.model.mask_adapter_args.gating = True + config.model.mask_loss_weight = 1.0 + + config.weights = '' + config.load_pretrained_t5_weights = False + config.skip_wrong_shape = False + config.load_prefix = '' + + config.multi_weights_args = ml_collections.ConfigDict() + config.multi_weights_args.weights = ( + '/path/to/sam_h/', + '/path/to/pixel_llm_bert_ref', + ) + config.multi_weights_args.load_replace = ( + (('image_encoder', 'sam_backbone'),), + (), + ) + config.force_init = True # load SAM + # config.eval_load_multi_weights = True + + # Training. + config.batch_size = 64 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.backbone_multiplier = 10.0 + config.optimizer.backbone_layer_prefix = 'mask_adapter' + config.frozen_params = ( + ('.*sam_backbone.*', 'sam_backbone'), + ('.*prompt_encoder.*', 'prompt_encoder'), + ('.*git_backbone.*', 'git_backbone'), + ('.*mask_decoder.*', 'mask_decoder'), + ('.*prompt_adapter.*', 'prompt_adapter'), + # ('^(?!.*lora.*).*t5_module.*', 'T5'), + ('.*textual/.*', 'text decoder'), # shouldn't overlaping + ('.*visual_project_layers/.*', 'visual_project_layers'), + ) + + iter_factor = 2 + # learning rate and training schedule + config.num_training_steps = 30_000 * iter_factor + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = 250 * iter_factor + config.lr_configs.base_learning_rate = 5e-5 + + config.checkpoint_steps = 1000 * iter_factor + config.log_eval_steps = 2500 * iter_factor + + # Logging. + config.eval_meteor_spice = False + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_trace.py b/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_trace.py new file mode 100644 index 0000000000000000000000000000000000000000..14e7dc318e570cc3de2615d15e481df660402dfb --- /dev/null +++ b/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_trace.py @@ -0,0 +1,380 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long,unused-variable,unused-argument +r"""Default configs for pre-training on COCO caption and Localized Narratives with BERT. + +""" + +import ml_collections + +from scenic.projects.pixel_llm.configs import common + + +def get_ln_trace_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, dataset_name='coco', weight=1.0): + """Returns the localized narrative train source.""" + # min_scale = 0.75 + # max_scale = 1.25 + min_scale = 1.0 + max_scale = 1.0 + + prompt = "['A long image caption: ', 'A long image description: ', 'Write a long description for the image. ', 'Write a long description for the photo. ', 'Provide a long description of what is presented in the photo. ', 'Describe the content of the image in detail. ', 'Can you in detail explain what you see in the image? ', 'Could you use a few sentences to describe what you perceive in the photo? ', 'Please provide a long depiction of the picture. ', 'Using language, provide a long account of the image. ', 'Use a few senetences to illustrate what is happening in the picture. ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + num_points_per_token = 2 + + preproc_spec_train = ( + f"decode_localized_narratives_annotations('{tokenizer_path}', {max_boxes}, {max_text_tokens}, {num_points_per_token})" + f'|random_ratio_resize({min_scale}, {max_scale}, {crop_size})' + f'|fixed_size_crop({crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f"|pad_caption_annotations({max_boxes})" + f'|pad_loco_annotations({max_boxes}, {num_points_per_token})' + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + '|add_prompt_boxes' + "|add_task_mask(['point', 'caption'])" + ) + + sequence_features = { + 'caption/utterance': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/center': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/point': {'feature_type': 'VarLen', 'dtype': 'float32'}, + } + + context_features = { + 'image/encoded': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'coco': { + 'tfrecords': common.LN_COCO_TRAIN.path, + 'size': common.LN_COCO_TRAIN.size, + }, + } + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_ln_trace_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, dataset_name='coco'): + """Returns the localized narrative train source.""" + + prompt = "['A long image caption: ']" + # prompt = "['we can see ']" + # prompt = "['where is ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + num_points_per_token = 2 + + preproc_spec_eval = ( + f"decode_localized_narratives_annotations('{tokenizer_path}', {max_boxes}, {max_text_tokens}, {num_points_per_token}, with_image_id=True)" + f"|resize_shorter({crop_size}, {crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_caption_annotations({max_boxes})" + f'|pad_loco_annotations({max_boxes}, {num_points_per_token})' + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes" + ) + sequence_features = { + 'caption/utterance': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/center': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/point': {'feature_type': 'VarLen', 'dtype': 'float32'}, + } + + context_features = { + 'image/encoded': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'coco': { + 'tfrecords': common.LN_COCO_VAL.path, + 'size': common.LN_COCO_VAL.size, + } + } + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + 'name': f'ln_{dataset_name}_trace_val', + }) + return source + + +def get_coco_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, num_captions_per_sample, crop_size, weight=1.0): + """Returns the COCO Caption train source.""" + tfds_name = 'coco_captions' + + min_scale = 0.75 + max_scale = 1.25 + + if max_text_tokens < 32: + prompt = "['A photo of ']" + else: + prompt = "['A short image caption: ', 'A short image description: ', 'A photo of ', 'An image that shows ', 'Write a short description for the image. ', 'Write a description for the photo. ', 'Provide a description of what is presented in the photo. ', 'Briefly describe the content of the image. ', 'Can you briefly explain what you see in the image? ', 'Could you use a few words to describe what you perceive in the photo? ', 'Please provide a short depiction of the picture. ', 'Using language, provide a short account of the image. ', 'Use a few words to illustrate what is happening in the picture. ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + num_points_per_token = 2 + + preproc_spec_train = ( + f"decode_coco_caption_annotations('{tokenizer_path}', {num_captions_per_sample}, {max_text_tokens})" + f"|random_ratio_resize({min_scale}, {max_scale}, {crop_size})" + f"|fixed_size_crop({crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_caption_annotations({num_captions_per_sample})" + f'|pad_loco_annotations({num_captions_per_sample}, {num_points_per_token})' + f"|add_prompt_tokens('{tokenizer_path}', {num_captions_per_sample}, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes" + f"|add_task_mask(['caption'])" + ) + source = ml_collections.ConfigDict({ + 'source': 'tfds', # `tfds` or `dmvr` + 'tfds_name': tfds_name, + 'split': 'train+restval', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_coco_cap_eval_source( + tokenizer_path, + max_text_tokens, + max_context_tokens, + num_captions_per_sample, + crop_size, +): + """Returns the COCO Caption eval source.""" + tfds_name = 'coco_captions' + + prompt = "['A photo of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + f"decode_coco_caption_annotations('{tokenizer_path}', {num_captions_per_sample}, {max_text_tokens})" + f"|resize_shorter({crop_size})" + f"|center_crop({crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|add_prompt_tokens('{tokenizer_path}', 1, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes(num_prompts=1)" + ) + + source = ml_collections.ConfigDict({ + 'source': 'tfds', + 'tfds_name': tfds_name, + 'name': 'coco_captions_val', + 'split': 'val', + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + + return source + + +def get_config(): + """Returns the configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'pixel_llm_bert_trace' + + # Dataset. + config.dataset_name = 'custom_flexio' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = ['scenic.projects.pixel_llm.io.ops'] + + tokenizer_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.tokenizer_weight_path = tokenizer_path # Used in evaluation + max_text_tokens = 128 + max_context_tokens = 8 + max_boxes = 1 + crop_size = 384 + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.merge_sources = True + config.dataset_configs.train.batch_before_merge = True + config.dataset_configs.train.sources = [ + get_coco_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, weight=1.0), + get_ln_trace_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='coco', weight=2.0), + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.merge_sources = False + config.dataset_configs.eval.sources = [ + get_coco_cap_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size), + get_ln_trace_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 1, crop_size, dataset_name='coco'), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + # Dataset configs needed by the trainer. + config.dataset_configs.caption_configs = ml_collections.ConfigDict() + config.dataset_configs.caption_configs.test_annotation_path = common.COCO_CAP_TEST_ANNOTATION + + config.dataset_configs.extra_meta_data = { + 'input_shape': [-1, crop_size, crop_size, 3], + 'prompt_box_shape': [-1, 1, 4], + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'pixel_llm' + + config.model.git_backbone_name = 'eva02_vit' + config.model.git_backbone_args = ml_collections.ConfigDict() + config.model.git_backbone_args.embed_dim = 1024 + config.model.git_backbone_args.depth = 24 + config.model.git_backbone_args.num_heads = 16 + config.model.git_backbone_args.patch_size = 14 + config.model.git_backbone_args.mlp_ratio = 4 * 2 / 3 + config.model.git_backbone_args.use_ln_post = True + config.model.git_backbone_args.drop_path_rate = 0.1 + config.model.git_preprocess_args = ml_collections.ConfigDict() + config.model.git_preprocess_args.image_size = (crop_size, crop_size) + + config.model.det_backbone_name = 'none' + + config.model.sam_backbone_name = 'sam_vit' + config.model.sam_backbone_args = ml_collections.ConfigDict() + config.model.sam_backbone_args.embed_dim = 1280 + config.model.sam_backbone_args.depth = 32 + config.model.sam_backbone_args.num_heads = 16 + config.model.sam_backbone_args.drop_path_rate = 0.5 + config.model.sam_backbone_args.window_block_indexes = (0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30) + config.model.sam_preprocess_args = ml_collections.ConfigDict() + config.model.sam_preprocess_args.image_size = (crop_size, crop_size) + + config.model.text_decoder_feature_key = 'git_visual_features+sam_visual_features' + + config.model.box_decoder_name = 'none' + + config.model.prompt_drop_rate = 0.0 + config.model.prompt_use_box_rate = 1.0 + config.model.prompt_encoder_name = 'sam_prompt_encoder' + config.model.prompt_encoder_args = ml_collections.ConfigDict() + config.model.prompt_encoder_args.embed_dim = 256 + config.model.prompt_adapter_name = 'sam_prompt_adapter' + config.model.prompt_adapter_args = ml_collections.ConfigDict() + config.model.prompt_adapter_args.depth = 6 + config.model.prompt_adapter_args.transformer_dim = 512 + config.model.prompt_adapter_args.output_dim = 1024 + + config.model.mask_decoder_name = 'none' + + config.model.prompt_fuse_fn = 'sparse' + config.model.decode_method = 'beam' + config.model.decode_beam_size = 4 + config.model.decode_per_node_beam_size = 2 + # config.model.decode_method = 'greedy' + # config.model.decode_beam_size = 1 + config.model.max_caption_length = max_text_tokens + + config.model.point_predictor_name = 'mlp_point_predictor' + config.model.gt_box_points_per_side = -1 + config.model.point_loss_type = 'l1_nonzero' + config.model.use_points_as_det = True + config.model.point_output_ignore = 'begin,end,pad' + config.model.trace_point_output_ignore = 'begin,end,pad' + config.model.point_loss_weight = 0.1 + config.model.point_predictor_args = ml_collections.ConfigDict() + config.model.point_predictor_args.num_output_points = 2 + config.model.point_predictor_args.pre_norm = True + config.model.point_predictor_args.mlp_activation = 'gelu' + config.model.point_predictor_args.depth = 4 + + config.weights='/path/to/pixel_llm_bert_webli', + config.skip_wrong_shape = False + config.load_prefix = '' + + # Training. + config.batch_size = 256 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.frozen_params = ( + ('.*sam_backbone.*', 'sam_backbone'), + ('.*prompt_encoder.*', 'prompt_encoder'), + # ('.*git_backbone.*', 'git_backbone'), + ('.*mask_decoder.*', 'mask_decoder'), + # ('.*t5_module.*', 'T5'), + ('^(?!.*lora.*).*t5_module.*', 'T5'), + ) + + iter_factor = 1 + # learning rate and training schedule + config.num_training_steps = 10_000 * iter_factor + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = 250 * iter_factor + config.lr_configs.base_learning_rate = 5e-5 + + config.checkpoint_steps = 1000 * iter_factor + config.log_eval_steps = 2500 * iter_factor + + # Logging. + config.eval_meteor_spice = False + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_trace_ref_densecap_llava.py b/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_trace_ref_densecap_llava.py new file mode 100644 index 0000000000000000000000000000000000000000..4a81a537fab379a075696ec4e838b9ff7d465bfe --- /dev/null +++ b/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_trace_ref_densecap_llava.py @@ -0,0 +1,809 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long,unused-variable,unused-argument +r"""Default configs for joint training on COCO caption, Localized Narratives, Referring Expression Localization, Dense Object Captioning, Visual Instruct Tuning with BERT. + +""" + +import ml_collections + +from scenic.projects.pixel_llm.configs import common + + +def get_ln_trace_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, dataset_name='coco', weight=1.0): + """Returns the localized narrative train source.""" + # min_scale = 0.75 + # max_scale = 1.25 + min_scale = 1.0 + max_scale = 1.0 + + prompt = "['A long image caption: ', 'A long image description: ', 'Write a long description for the image. ', 'Write a long description for the photo. ', 'Provide a long description of what is presented in the photo. ', 'Describe the content of the image in detail. ', 'Can you in detail explain what you see in the image? ', 'Could you use a few sentences to describe what you perceive in the photo? ', 'Please provide a long depiction of the picture. ', 'Using language, provide a long account of the image. ', 'Use a few senetences to illustrate what is happening in the picture. ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + num_points_per_token = 2 + + preproc_spec_train = ( + f"decode_localized_narratives_annotations('{tokenizer_path}', {max_boxes}, {max_text_tokens}, {num_points_per_token})" + f'|random_ratio_resize({min_scale}, {max_scale}, {crop_size})' + f'|fixed_size_crop({crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f"|pad_caption_annotations({max_boxes})" + f'|pad_detection_annotations({max_boxes})' + f'|pad_loco_annotations({max_boxes}, {num_points_per_token})' + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + '|add_prompt_boxes' + "|add_task_mask(['point', 'caption'])" + ) + + sequence_features = { + 'caption/utterance': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/center': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/point': {'feature_type': 'VarLen', 'dtype': 'float32'}, + } + + context_features = { + 'image/encoded': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'coco': { + 'tfrecords': common.LN_COCO_TRAIN.path, + 'size': common.LN_COCO_TRAIN.size, + }, + } + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_ln_trace_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, dataset_name='coco'): + """Returns the localized narrative train source.""" + + prompt = "['A long image caption: ']" + # prompt = "['we can see ']" + # prompt = "['where is ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + num_points_per_token = 2 + + preproc_spec_eval = ( + f"decode_localized_narratives_annotations('{tokenizer_path}', {max_boxes}, {max_text_tokens}, {num_points_per_token}, with_image_id=True)" + f"|resize_shorter({crop_size}, {crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_caption_annotations({max_boxes})" + f'|pad_loco_annotations({max_boxes}, {num_points_per_token})' + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes" + ) + sequence_features = { + 'caption/utterance': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/center': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/point': {'feature_type': 'VarLen', 'dtype': 'float32'}, + } + + context_features = { + 'image/encoded': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'coco': { + 'tfrecords': common.LN_COCO_VAL.path, + 'size': common.LN_COCO_VAL.size, + } + } + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + 'name': f'ln_{dataset_name}_trace_val', + }) + return source + + +def get_coco_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, num_captions_per_sample, crop_size, weight=1.0): + """Returns the COCO Caption train source.""" + tfds_name = 'coco_captions' + + min_scale = 0.75 + max_scale = 1.25 + + prompt = "['A short image caption: ', 'A short image description: ', 'A photo of ', 'An image that shows ', 'Write a short description for the image. ', 'Write a description for the photo. ', 'Provide a description of what is presented in the photo. ', 'Briefly describe the content of the image. ', 'Can you briefly explain what you see in the image? ', 'Could you use a few words to describe what you perceive in the photo? ', 'Please provide a short depiction of the picture. ', 'Using language, provide a short account of the image. ', 'Use a few words to illustrate what is happening in the picture. ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + num_points_per_token = 2 + + preproc_spec_train = ( + f"decode_coco_caption_annotations('{tokenizer_path}', {num_captions_per_sample}, {max_text_tokens})" + f"|random_ratio_resize({min_scale}, {max_scale}, {crop_size})" + f"|fixed_size_crop({crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_caption_annotations({num_captions_per_sample})" + f'|pad_detection_annotations({num_captions_per_sample})' + f'|pad_loco_annotations({num_captions_per_sample}, {num_points_per_token})' + f"|add_prompt_tokens('{tokenizer_path}', {num_captions_per_sample}, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes" + f"|add_task_mask(['caption'])" + ) + source = ml_collections.ConfigDict({ + 'source': 'tfds', # `tfds` or `dmvr` + 'tfds_name': tfds_name, + 'split': 'train+restval', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_coco_cap_eval_source( + tokenizer_path, + max_text_tokens, + max_context_tokens, + num_captions_per_sample, + crop_size, +): + """Returns the COCO Caption eval source.""" + tfds_name = 'coco_captions' + + prompt = "['A photo of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + f"decode_coco_caption_annotations('{tokenizer_path}', {num_captions_per_sample}, {max_text_tokens})" + f"|resize_shorter({crop_size})" + f"|center_crop({crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|add_prompt_tokens('{tokenizer_path}', 1, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes(num_prompts=1)" + ) + + source = ml_collections.ConfigDict({ + 'source': 'tfds', + 'tfds_name': tfds_name, + 'name': 'coco_captions_val', + 'split': 'val', + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + + return source + + +def get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, use_text_as_context=True, refexp_field='sent', dataset_name='refcoco_unc', weight=1.0): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ train source.""" + + min_scale = 0.75 + max_scale = 1.25 + + context_prefix = 'where is ' + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_train = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', num_captions_per_sample={max_boxes}, max_text_tokens={max_text_tokens}, use_text_as_context={use_text_as_context}, max_context_tokens={max_context_tokens}, append_context_eos={append_eos}, context_prefix='{context_prefix}', refexp_field='{refexp_field}')" + f'|random_ratio_resize({min_scale}, {max_scale}, {crop_size})' + f'|fixed_size_crop({crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f'|pad_loco_annotations({max_boxes}, 2)' + f"|add_prompt_boxes" + f"|drop_nested('label', ['refexp_ids'])" + f"|add_task_mask(['point'])" + ) + if mask_on: + preproc_spec_train += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'merge_coco_img_safe': { + 'tfrecords': common.MERGE_COCO_IMAGE_SAFE_TRAIN.path, + 'size': common.MERGE_COCO_IMAGE_SAFE_TRAIN.size, + }, + 'refcoco_unc': { + 'tfrecords': common.REFCOCO_UNC_TRAIN.path, + 'size': common.REFCOCO_UNC_TRAIN.size, + }, + 'refcocog_umd': { + 'tfrecords': common.REFCOCOG_UMD_TRAIN.path, + 'size': common.REFCOCOG_UMD_TRAIN.size, + }, + 'refcocoplus_unc': { + 'tfrecords': common.REFCOCOPLUS_UNC_TRAIN.path, + 'size': common.REFCOCOPLUS_UNC_TRAIN.size, + }, + 'uni_mixed_coco': { + 'tfrecords': common.UNI_MIXED_COCO_TRAIN.path, + 'size': common.UNI_MIXED_COCO_TRAIN.size, + }, + 'uni_mixed_vg': { + 'tfrecords': common.UNI_MIXED_VG_TRAIN.path, + 'size': common.UNI_MIXED_VG_TRAIN.size, + }, + 'uni_flickr': { + 'tfrecords': common.UNI_FLICKR_TRAIN.path, + 'size': common.UNI_FLICKR_TRAIN.size, + }, + } + + split = 'train' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, use_text_as_context=True, refexp_field='sent', dataset_name='refcoco_unc', split='validation'): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ eval source.""" + + context_prefix = 'where is ' + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', max_text_tokens={max_text_tokens}, use_text_as_context={use_text_as_context}, max_context_tokens={max_context_tokens}, append_context_eos={append_eos}, context_prefix='{context_prefix}', refexp_field='{refexp_field}')" + f'|resize_shorter({crop_size}, {crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f"|add_prompt_boxes" + ) + if mask_on: + preproc_spec_eval += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + # 'objects/mask': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'refcoco_unc_validation': { + 'tfrecords': common.REFCOCO_UNC_VALIDATION.path, + 'size': common.REFCOCO_UNC_VALIDATION.size, + }, + 'refcoco_unc_testA': { + 'tfrecords': common.REFCOCO_UNC_TESTA.path, + 'size': common.REFCOCO_UNC_TESTA.size, + }, + 'refcoco_unc_testB': { + 'tfrecords': common.REFCOCO_UNC_TESTB.path, + 'size': common.REFCOCO_UNC_TESTB.size, + }, + 'refcocog_umd_validation': { + 'tfrecords': common.REFCOCOG_UMD_VALIDATION.path, + 'size': common.REFCOCOG_UMD_VALIDATION.size, + }, + 'refcocog_umd_test': { + 'tfrecords': common.REFCOCOG_UMD_TEST.path, + 'size': common.REFCOCOG_UMD_TEST.size, + }, + 'refcocoplus_unc_validation': { + 'tfrecords': common.REFCOCOPLUS_UNC_VALIDATION.path, + 'size': common.REFCOCOPLUS_UNC_VALIDATION.size, + }, + 'refcocoplus_unc_testA': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTA.path, + 'size': common.REFCOCOPLUS_UNC_TESTA.size, + }, + 'refcocoplus_unc_testB': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTB.path, + 'size': common.REFCOCOPLUS_UNC_TESTB.size, + }, + } + + dataset_name_split = f'{dataset_name}_{split}' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name_split]['tfrecords'], + 'size': tfrecord_meta[dataset_name_split]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'split': split, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + return source + + +def get_vg_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, weight=1.0): + """Returns the visual genome train source.""" + + min_scale = 0.1 + max_scale = 2.0 + + prompt = "['an object of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_train = ( + 'parse_vg' + f"|decode_vg_annotations('{tokenizer_path}', {max_text_tokens})" + f"|random_horizontal_flip" + f"|random_ratio_resize({min_scale}, {max_scale}, {crop_size})" + f"|fixed_size_crop({crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f'|pad_detection_annotations({max_boxes})' + f'|pad_loco_annotations({max_boxes}, 2)' + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes" + f"|add_task_mask(['detection', 'caption'])" + ) + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'img_id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'regions/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'regions/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'regions/phrase': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'vg_densecap': { + 'tfrecords': common.VG_TRAIN.path, + 'size': common.VG_TRAIN.size, + } + } + + dataset_name = 'vg_densecap' + split = 'train' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_vg_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='vg', split='test', task='densecap'): + """Returns the visual genome train source.""" + + prompt = "['an object of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + 'parse_vg' + f"|decode_vg_annotations('{tokenizer_path}', {max_text_tokens})" + f"|resize_shorter({crop_size}, {crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_detection_annotations({max_boxes})" + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + ) + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'img_id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'regions/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'regions/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'regions/phrase': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'vg': { + 'tfrecords': common.VG_TEST.path, + 'size': common.VG_TEST.size, + } + } + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{task}_{split}', + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + return source + + +def get_llava_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, num_captions_per_sample, crop_size, dataset_name='llava_v1_5_mix665k', weight=1.0): + """Returns the LLaVA train source.""" + + min_scale = 1.0 + max_scale = 1.0 + + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_train = ( + "parse_llava" + f"|decode_coco_caption_annotations('{tokenizer_path}', {num_captions_per_sample}, {max_text_tokens}, {max_context_tokens}, {append_eos}, context_prefix='Question: ', context_suffix='Answer: ')" + f"|random_ratio_resize({min_scale}, {max_scale}, {crop_size})" + f"|fixed_size_crop({crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_caption_annotations({num_captions_per_sample})" + f'|pad_detection_annotations({num_captions_per_sample})' + f'|pad_loco_annotations({num_captions_per_sample}, 2)' + f"|add_prompt_boxes" + f"|add_task_mask(['caption'])" + ) + context_features = { + 'image/encoded': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'conversations/human': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'conversations/agent': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + tfrecord_meta = { + 'llava_v1_5_mix665k': { + 'tfrecords': common.LLAVA_V1_5_MIX665K.path, + 'size': common.LLAVA_V1_5_MIX665K.size, + }, + 'sharegpt4v_mix665k_cap23k_coco-ap9k_lcs3k_sam9k_div2k': { + 'tfrecords': common.SHAREGPT4V_MIX665K.path, + 'size': common.SHAREGPT4V_MIX665K.size, + }, + } + + split = 'train' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_config(): + """Returns the configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'pixel_llm_bert_trace_ref_densecap_llava' + + # Dataset. + config.dataset_name = 'custom_flexio' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = ['scenic.projects.pixel_llm.io.ops'] + + tokenizer_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.tokenizer_weight_path = tokenizer_path # Used in evaluation + max_text_tokens = 128 + max_context_tokens = 32 + use_text_as_context = True + max_boxes = 16 + crop_size = 384 + refexp_field = 'sent' + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.merge_sources = True + config.dataset_configs.train.batch_before_merge = True + config.dataset_configs.train.sources = [ + get_coco_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, weight=3.0), + get_ln_trace_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='coco', weight=1.0), + get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='uni_flickr', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='uni_mixed_coco', refexp_field=refexp_field, weight=5.0, use_text_as_context=use_text_as_context), + get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='uni_mixed_vg', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + get_vg_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, weight=5.0), + get_llava_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='sharegpt4v_mix665k_cap23k_coco-ap9k_lcs3k_sam9k_div2k', weight=5.0), + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.merge_sources = False + config.dataset_configs.eval.sources = [ + get_coco_cap_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 1, crop_size), + get_ln_trace_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 1, crop_size, dataset_name='coco'), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 16, crop_size, dataset_name='refcoco_unc', split='validation', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + get_vg_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 100, crop_size, dataset_name='vg', split='test', task='densecap'), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + # Dataset configs needed by the trainer. + config.dataset_configs.caption_configs = ml_collections.ConfigDict() + config.dataset_configs.caption_configs.test_annotation_path = common.COCO_CAP_TEST_ANNOTATION + config.dataset_configs.refer_configs = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_validation.test_annotation_path = common.REFCOCO_UNC_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcoco_unc_testA = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_testA.test_annotation_path = common.REFCOCO_UNC_TESTA_ANNOTATION + config.dataset_configs.refer_configs.refcoco_unc_testB = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_testB.test_annotation_path = common.REFCOCO_UNC_TESTB_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_validation.test_annotation_path = common.REFCOCOPLUS_UNC_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_testA = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_testA.test_annotation_path = common.REFCOCOPLUS_UNC_TESTA_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_testB = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_testB.test_annotation_path = common.REFCOCOPLUS_UNC_TESTB_ANNOTATION + config.dataset_configs.refer_configs.refcocog_umd_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocog_umd_validation.test_annotation_path = common.REFCOCOG_UMD_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcocog_umd_test = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocog_umd_test.test_annotation_path = common.REFCOCOG_UMD_TEST_ANNOTATION + config.dataset_configs.densecap_configs = ml_collections.ConfigDict() + config.dataset_configs.densecap_configs.test_annotation_path = common.VG_DENSECAP_TEST_ANNOTATION + + config.dataset_configs.extra_meta_data = { + 'input_shape': [-1, crop_size, crop_size, 3], + 'prompt_box_shape': [-1, 1, 4], + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'pixel_llm' + + config.model.git_backbone_name = 'eva02_vit' + config.model.git_backbone_args = ml_collections.ConfigDict() + config.model.git_backbone_args.embed_dim = 1024 + config.model.git_backbone_args.depth = 24 + config.model.git_backbone_args.num_heads = 16 + config.model.git_backbone_args.patch_size = 14 + config.model.git_backbone_args.mlp_ratio = 4 * 2 / 3 + config.model.git_backbone_args.use_ln_post = True + config.model.git_backbone_args.drop_path_rate = 0.1 + config.model.git_preprocess_args = ml_collections.ConfigDict() + config.model.git_preprocess_args.image_size = (crop_size, crop_size) + + config.model.det_backbone_name = 'none' + + config.model.sam_backbone_name = 'sam_vit' + config.model.sam_backbone_args = ml_collections.ConfigDict() + config.model.sam_backbone_args.embed_dim = 1280 + config.model.sam_backbone_args.depth = 32 + config.model.sam_backbone_args.num_heads = 16 + config.model.sam_backbone_args.drop_path_rate = 0.5 + config.model.sam_backbone_args.window_block_indexes = (0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30) + config.model.sam_preprocess_args = ml_collections.ConfigDict() + config.model.sam_preprocess_args.image_size = (crop_size, crop_size) + + config.model.text_decoder_feature_key = 'git_visual_features+sam_visual_features' + + config.model.det_loss_weight = 1.0 + config.model.box_decoder_feature_key = 'git_visual_features+sam_visual_features' + # CenterNet2 parameters + config.model.box_decoder_name = 'centernet2_det_decoder' + config.model.box_decoder_args = ml_collections.ConfigDict() + config.model.box_decoder_args.num_classes = -1 + config.model.box_decoder_args.strides = (8, 16, 32, 64, 128) + config.model.box_decoder_args.roi_num_classes = 1 + config.model.box_decoder_args.hm_weight = 0.5 + config.model.box_decoder_args.reg_weight = 1.0 + config.model.box_decoder_args.score_thresh = 0.0001 + config.model.box_decoder_args.pre_nms_topk_train = 2000 + config.model.box_decoder_args.post_nms_topk_train = 1000 + config.model.box_decoder_args.pre_nms_topk_test = 1000 + config.model.box_decoder_args.post_nms_topk_test = 256 + config.model.box_decoder_args.iou_thresh = 0.9 + config.model.box_decoder_args.roi_matching_threshold = (0.6,) + config.model.box_decoder_args.roi_nms_threshold = 0.5 + config.model.box_decoder_args.roi_post_nms_num_detections = 32 + s = 2 + config.model.box_decoder_args.fpn_range = ( + (0, 80 / s), (64 / s, 160 / s), (128 / s, 320 / s), + (256 / s, 640 / s), (512 / s, 100000 / s)) + config.model.box_decoder_args.match_gt_thresh = 0.6 + + config.model.num_text_proposals = 16 + config.model.num_detections = config.model.box_decoder_args.roi_post_nms_num_detections + + config.model.prompt_drop_rate = 0.0 + config.model.prompt_use_box_rate = 1.0 + config.model.prompt_encoder_name = 'sam_prompt_encoder' + config.model.prompt_encoder_args = ml_collections.ConfigDict() + config.model.prompt_encoder_args.embed_dim = 256 + config.model.prompt_adapter_name = 'sam_prompt_adapter' + config.model.prompt_adapter_args = ml_collections.ConfigDict() + config.model.prompt_adapter_args.depth = 6 + config.model.prompt_adapter_args.transformer_dim = 512 + config.model.prompt_adapter_args.output_dim = 1024 + + config.model.mask_decoder_name = 'none' + + config.model.prompt_fuse_fn = 'sparse' + config.model.decode_method = 'beam' + config.model.decode_beam_size = 4 + config.model.decode_per_node_beam_size = 2 + # config.model.decode_method = 'greedy' + # config.model.decode_beam_size = 1 + config.model.max_caption_length = max_text_tokens + + config.model.point_predictor_name = 'mlp_point_predictor' + config.model.gt_box_points_per_side = -1 + config.model.point_loss_type = 'l1_nonzero' + config.model.use_points_as_det = True + config.model.point_output_ignore = '^end-1' + config.model.trace_point_output_ignore = 'begin,end,pad' + config.model.point_loss_weight = 0.1 + config.model.point_predictor_args = ml_collections.ConfigDict() + config.model.point_predictor_args.num_output_points = 2 + config.model.point_predictor_args.pre_norm = True + config.model.point_predictor_args.mlp_activation = 'gelu' + config.model.point_predictor_args.depth = 4 + + config.weights='/path/to/pixel_llm_bert_webli', + config.skip_wrong_shape = False + config.load_prefix = '' + + # Training. + config.batch_size = 128 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.05 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.8 + config.optimizer.num_layers = config.model.git_backbone_args.depth + config.optimizer.decay_layer_prefix = 'git_backbone/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + config.frozen_params = ( + ('.*sam_backbone.*', 'sam_backbone'), + ('.*prompt_encoder.*', 'prompt_encoder'), + # ('.*git_backbone.*', 'git_backbone'), + ('.*mask_decoder.*', 'mask_decoder'), + # ('.*t5_module.*', 'T5'), + ('^(?!.*lora.*).*t5_module.*', 'T5'), + ) + + iter_factor = 8 + # learning rate and training schedule + config.num_training_steps = 30_000 * iter_factor + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = 250 * iter_factor + config.lr_configs.base_learning_rate = 1e-4 + + config.checkpoint_steps = 1000 * iter_factor + config.log_eval_steps = 2500 * iter_factor + + # Logging. + config.eval_meteor_spice = False + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_trace_refseg_densecap_llava.py b/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_trace_refseg_densecap_llava.py new file mode 100644 index 0000000000000000000000000000000000000000..00c1551406ec3028577cdbd4e5a1b3c73105bb1a --- /dev/null +++ b/scenic/projects/pixel_llm/configs/bert/pixel_llm_bert_trace_refseg_densecap_llava.py @@ -0,0 +1,600 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long,unused-variable,unused-argument +r"""Default configs for joint training on COCO caption, Localized Narratives, Referring Expression Localization, Dense Object Captioning, Visual Instruct Tuning with BERT. + +""" + +import ml_collections + +from scenic.projects.pixel_llm.configs import common + + +def get_ln_trace_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, dataset_name='coco'): + """Returns the localized narrative train source.""" + + prompt = "['A long image caption: ']" + # prompt = "['we can see ']" + # prompt = "['where is ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + num_points_per_token = 2 + + preproc_spec_eval = ( + f"decode_localized_narratives_annotations('{tokenizer_path}', {max_boxes}, {max_text_tokens}, {num_points_per_token}, with_image_id=True)" + f"|resize_shorter({crop_size}, {crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_caption_annotations({max_boxes})" + f'|pad_loco_annotations({max_boxes}, {num_points_per_token})' + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes" + ) + sequence_features = { + 'caption/utterance': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/center': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/point': {'feature_type': 'VarLen', 'dtype': 'float32'}, + } + + context_features = { + 'image/encoded': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'coco': { + 'tfrecords': common.LN_COCO_VAL.path, + 'size': common.LN_COCO_VAL.size, + } + } + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + 'name': f'ln_{dataset_name}_trace_val', + }) + return source + + +def get_coco_cap_eval_source( + tokenizer_path, + max_text_tokens, + max_context_tokens, + num_captions_per_sample, + crop_size, +): + """Returns the COCO Caption eval source.""" + tfds_name = 'coco_captions' + + prompt = "['A photo of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + f"decode_coco_caption_annotations('{tokenizer_path}', {num_captions_per_sample}, {max_text_tokens})" + f"|resize_shorter({crop_size})" + f"|center_crop({crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|add_prompt_tokens('{tokenizer_path}', 1, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes(num_prompts=1)" + ) + + source = ml_collections.ConfigDict({ + 'source': 'tfds', + 'tfds_name': tfds_name, + 'name': 'coco_captions_val', + 'split': 'val', + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + + return source + + +def get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, use_text_as_context=True, refexp_field='sent', dataset_name='refcoco_unc', weight=1.0): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ train source.""" + + min_scale = 0.75 + max_scale = 1.25 + + context_prefix = 'where is ' + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_train = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', num_captions_per_sample={max_boxes}, max_text_tokens={max_text_tokens}, use_text_as_context={use_text_as_context}, max_context_tokens={max_context_tokens}, append_context_eos={append_eos}, context_prefix='{context_prefix}', refexp_field='{refexp_field}')" + f'|random_ratio_resize({min_scale}, {max_scale}, {crop_size})' + f'|fixed_size_crop({crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f'|pad_loco_annotations({max_boxes}, 2)' + f"|add_prompt_boxes" + f"|drop_nested('label', ['refexp_ids'])" + f"|add_task_mask(['point'])" + ) + if mask_on: + preproc_spec_train += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'merge_coco_img_safe': { + 'tfrecords': common.MERGE_COCO_IMAGE_SAFE_TRAIN.path, + 'size': common.MERGE_COCO_IMAGE_SAFE_TRAIN.size, + }, + 'refcoco_unc': { + 'tfrecords': common.REFCOCO_UNC_TRAIN.path, + 'size': common.REFCOCO_UNC_TRAIN.size, + }, + 'refcocog_umd': { + 'tfrecords': common.REFCOCOG_UMD_TRAIN.path, + 'size': common.REFCOCOG_UMD_TRAIN.size, + }, + 'refcocoplus_unc': { + 'tfrecords': common.REFCOCOPLUS_UNC_TRAIN.path, + 'size': common.REFCOCOPLUS_UNC_TRAIN.size, + }, + 'uni_mixed_coco': { + 'tfrecords': common.UNI_MIXED_COCO_TRAIN.path, + 'size': common.UNI_MIXED_COCO_TRAIN.size, + }, + 'uni_mixed_vg': { + 'tfrecords': common.UNI_MIXED_VG_TRAIN.path, + 'size': common.UNI_MIXED_VG_TRAIN.size, + }, + 'uni_flickr': { + 'tfrecords': common.UNI_FLICKR_TRAIN.path, + 'size': common.UNI_FLICKR_TRAIN.size, + }, + } + + split = 'train' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, use_text_as_context=True, refexp_field='sent', dataset_name='refcoco_unc', split='validation'): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ eval source.""" + + context_prefix = 'where is ' + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', max_text_tokens={max_text_tokens}, use_text_as_context={use_text_as_context}, max_context_tokens={max_context_tokens}, append_context_eos={append_eos}, context_prefix='{context_prefix}', refexp_field='{refexp_field}')" + f'|resize_shorter({crop_size}, {crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f"|add_prompt_boxes" + ) + if mask_on: + preproc_spec_eval += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + # 'objects/mask': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'refcoco_unc_validation': { + 'tfrecords': common.REFCOCO_UNC_VALIDATION.path, + 'size': common.REFCOCO_UNC_VALIDATION.size, + }, + 'refcoco_unc_testA': { + 'tfrecords': common.REFCOCO_UNC_TESTA.path, + 'size': common.REFCOCO_UNC_TESTA.size, + }, + 'refcoco_unc_testB': { + 'tfrecords': common.REFCOCO_UNC_TESTB.path, + 'size': common.REFCOCO_UNC_TESTB.size, + }, + 'refcocog_umd_validation': { + 'tfrecords': common.REFCOCOG_UMD_VALIDATION.path, + 'size': common.REFCOCOG_UMD_VALIDATION.size, + }, + 'refcocog_umd_test': { + 'tfrecords': common.REFCOCOG_UMD_TEST.path, + 'size': common.REFCOCOG_UMD_TEST.size, + }, + 'refcocoplus_unc_validation': { + 'tfrecords': common.REFCOCOPLUS_UNC_VALIDATION.path, + 'size': common.REFCOCOPLUS_UNC_VALIDATION.size, + }, + 'refcocoplus_unc_testA': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTA.path, + 'size': common.REFCOCOPLUS_UNC_TESTA.size, + }, + 'refcocoplus_unc_testB': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTB.path, + 'size': common.REFCOCOPLUS_UNC_TESTB.size, + }, + } + + dataset_name_split = f'{dataset_name}_{split}' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name_split]['tfrecords'], + 'size': tfrecord_meta[dataset_name_split]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'split': split, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + return source + + +def get_vg_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='vg', split='test', task='densecap'): + """Returns the visual genome train source.""" + + prompt = "['an object of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + 'parse_vg' + f"|decode_vg_annotations('{tokenizer_path}', {max_text_tokens})" + f"|resize_shorter({crop_size}, {crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_detection_annotations({max_boxes})" + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + ) + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'img_id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'regions/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'regions/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'regions/phrase': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'vg': { + 'tfrecords': common.VG_TEST.path, + 'size': common.VG_TEST.size, + } + } + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{task}_{split}', + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + return source + + +def get_config(): + """Returns the configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'pixel_llm_bert_trace_refseg_densecap_llava' + + # Dataset. + config.dataset_name = 'custom_flexio' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = ['scenic.projects.pixel_llm.io.ops'] + + tokenizer_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.tokenizer_weight_path = tokenizer_path # Used in evaluation + max_text_tokens = 128 + max_context_tokens = 32 + use_text_as_context = True + max_boxes = 16 + crop_size = 384 + refexp_field = 'sent' + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.merge_sources = True + config.dataset_configs.train.batch_before_merge = True + config.dataset_configs.train.sources = [ + get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='merge_coco_img_safe', refexp_field=refexp_field, use_text_as_context=use_text_as_context, mask_on=True), + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.merge_sources = False + config.dataset_configs.eval.sources = [ + get_coco_cap_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 1, crop_size), + get_ln_trace_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 1, crop_size, dataset_name='coco'), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 16, crop_size, dataset_name='refcoco_unc', split='validation', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + get_vg_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 100, crop_size, dataset_name='vg', split='test', task='densecap'), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + # Dataset configs needed by the trainer. + config.dataset_configs.caption_configs = ml_collections.ConfigDict() + config.dataset_configs.caption_configs.test_annotation_path = common.COCO_CAP_TEST_ANNOTATION + config.dataset_configs.refer_configs = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_validation.test_annotation_path = common.REFCOCO_UNC_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcoco_unc_testA = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_testA.test_annotation_path = common.REFCOCO_UNC_TESTA_ANNOTATION + config.dataset_configs.refer_configs.refcoco_unc_testB = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_testB.test_annotation_path = common.REFCOCO_UNC_TESTB_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_validation.test_annotation_path = common.REFCOCOPLUS_UNC_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_testA = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_testA.test_annotation_path = common.REFCOCOPLUS_UNC_TESTA_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_testB = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_testB.test_annotation_path = common.REFCOCOPLUS_UNC_TESTB_ANNOTATION + config.dataset_configs.refer_configs.refcocog_umd_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocog_umd_validation.test_annotation_path = common.REFCOCOG_UMD_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcocog_umd_test = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocog_umd_test.test_annotation_path = common.REFCOCOG_UMD_TEST_ANNOTATION + config.dataset_configs.densecap_configs = ml_collections.ConfigDict() + config.dataset_configs.densecap_configs.test_annotation_path = common.VG_DENSECAP_TEST_ANNOTATION + + config.dataset_configs.extra_meta_data = { + 'input_shape': [-1, crop_size, crop_size, 3], + 'prompt_box_shape': [-1, 1, 4], + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'pixel_llm' + + config.model.git_backbone_name = 'eva02_vit' + config.model.git_backbone_args = ml_collections.ConfigDict() + config.model.git_backbone_args.embed_dim = 1024 + config.model.git_backbone_args.depth = 24 + config.model.git_backbone_args.num_heads = 16 + config.model.git_backbone_args.patch_size = 14 + config.model.git_backbone_args.mlp_ratio = 4 * 2 / 3 + config.model.git_backbone_args.use_ln_post = True + config.model.git_backbone_args.drop_path_rate = 0.1 + config.model.git_preprocess_args = ml_collections.ConfigDict() + config.model.git_preprocess_args.image_size = (crop_size, crop_size) + + config.model.det_backbone_name = 'none' + + config.model.sam_backbone_name = 'sam_vit' + config.model.sam_backbone_args = ml_collections.ConfigDict() + config.model.sam_backbone_args.embed_dim = 1280 + config.model.sam_backbone_args.depth = 32 + config.model.sam_backbone_args.num_heads = 16 + config.model.sam_backbone_args.drop_path_rate = 0.5 + config.model.sam_backbone_args.window_block_indexes = (0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30) + config.model.sam_preprocess_args = ml_collections.ConfigDict() + config.model.sam_preprocess_args.image_size = (crop_size, crop_size) + + config.model.text_decoder_feature_key = 'git_visual_features+sam_visual_features' + + config.model.det_loss_weight = 1.0 + config.model.box_decoder_feature_key = 'git_visual_features+sam_visual_features' + # CenterNet2 parameters + config.model.box_decoder_name = 'centernet2_det_decoder' + config.model.box_decoder_args = ml_collections.ConfigDict() + config.model.box_decoder_args.num_classes = -1 + config.model.box_decoder_args.strides = (8, 16, 32, 64, 128) + config.model.box_decoder_args.roi_num_classes = 1 + config.model.box_decoder_args.hm_weight = 0.5 + config.model.box_decoder_args.reg_weight = 1.0 + config.model.box_decoder_args.score_thresh = 0.0001 + config.model.box_decoder_args.pre_nms_topk_train = 2000 + config.model.box_decoder_args.post_nms_topk_train = 1000 + config.model.box_decoder_args.pre_nms_topk_test = 1000 + config.model.box_decoder_args.post_nms_topk_test = 256 + config.model.box_decoder_args.iou_thresh = 0.9 + config.model.box_decoder_args.roi_matching_threshold = (0.6,) + config.model.box_decoder_args.roi_nms_threshold = 0.5 + config.model.box_decoder_args.roi_post_nms_num_detections = 32 + s = 2 + config.model.box_decoder_args.fpn_range = ( + (0, 80 / s), (64 / s, 160 / s), (128 / s, 320 / s), + (256 / s, 640 / s), (512 / s, 100000 / s)) + config.model.box_decoder_args.match_gt_thresh = 0.6 + + config.model.num_text_proposals = 16 + config.model.num_detections = config.model.box_decoder_args.roi_post_nms_num_detections + + config.model.prompt_drop_rate = 0.0 + config.model.prompt_use_box_rate = 1.0 + config.model.prompt_encoder_name = 'sam_prompt_encoder' + config.model.prompt_encoder_args = ml_collections.ConfigDict() + config.model.prompt_encoder_args.embed_dim = 256 + config.model.prompt_adapter_name = 'sam_prompt_adapter' + config.model.prompt_adapter_args = ml_collections.ConfigDict() + config.model.prompt_adapter_args.depth = 6 + config.model.prompt_adapter_args.transformer_dim = 512 + config.model.prompt_adapter_args.output_dim = 1024 + + config.model.mask_decoder_name = 'sam_mask_decoder' + config.model.mask_adapter_name = 'sam_mask_adapter' + + config.model.prompt_fuse_fn = 'sparse' + config.model.decode_method = 'beam' + config.model.decode_beam_size = 4 + config.model.decode_per_node_beam_size = 2 + # config.model.decode_method = 'greedy' + # config.model.decode_beam_size = 1 + config.model.max_caption_length = max_text_tokens + + config.model.point_predictor_name = 'mlp_point_predictor' + config.model.gt_box_points_per_side = -1 + config.model.point_loss_type = 'l1_nonzero' + config.model.use_points_as_det = True + config.model.point_output_ignore = '^end-1' + config.model.trace_point_output_ignore = 'begin,end,pad' + config.model.point_loss_weight = 0.1 + config.model.point_predictor_args = ml_collections.ConfigDict() + config.model.point_predictor_args.num_output_points = 2 + config.model.point_predictor_args.pre_norm = True + config.model.point_predictor_args.mlp_activation = 'gelu' + config.model.point_predictor_args.depth = 4 + + # config.eval_load_multi_weights = True + config.weights = '' + config.multi_weights_args = ml_collections.ConfigDict() + config.multi_weights_args.weights = ( + '/path/to/sam', + '/path/to/pixel_llm_bert_trace_ref_densecap_llava', + ) + config.skip_wrong_shape = False + config.load_prefix = '' + # config.eval_only = True + + config.multi_weights_args.load_replace = ( + (('image_encoder', 'det_backbone'),), + (), + ) + config.force_init = True # load SAM mask decoder + + # Training. + config.batch_size = 128 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.frozen_params = ( + ('.*sam_backbone.*', 'sam_backbone'), + ('.*prompt_encoder.*', 'prompt_encoder'), + ('.*git_backbone.*', 'git_backbone'), + ('.*mask_decoder.*', 'mask_decoder'), + # ('.*t5_module.*', 'T5'), + # ('^(?!.*lora.*).*t5_module.*', 'T5'), + ('.*prompt_adapter.*', 'prompt_adapter'), + ('.*point_predictor.*', 'point_predictor'), + ('.*box_decoder.*', 'box_decoder'), + ('.*textual/.*', 'text decoder'), # shouldn't overlaping + ('.*visual_project_layers/.*', 'visual_project_layers'), + ) + + iter_factor = 1 + # learning rate and training schedule + config.num_training_steps = 30_000 * iter_factor + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = 250 * iter_factor + config.lr_configs.base_learning_rate = 1e-4 + + config.checkpoint_steps = 1000 * iter_factor + config.log_eval_steps = 2500 * iter_factor + + # Logging. + config.eval_meteor_spice = False + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/pixel_llm/configs/common.py b/scenic/projects/pixel_llm/configs/common.py new file mode 100644 index 0000000000000000000000000000000000000000..e208315be807755223ff37abfb79d3e97fa426f5 --- /dev/null +++ b/scenic/projects/pixel_llm/configs/common.py @@ -0,0 +1,121 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +"""Common utilities for config files.""" + +import collections + +SP_VOCAB_SIZE = 32128 # sentence_piece tokenizer vocabulary used in T5 +BERT_TOKENIZER_PATH = '/path/to/bert_tokenizer/' + +TFRecordData = collections.namedtuple('TFRecordData', ['path', 'size']) + +VG_TRAIN = TFRecordData( + path='/path/to/vg_train', + size=77396 +) +VG_TEST = TFRecordData( + path='/path/to/vg_test', + size=5000 +) +LN_COCO_TRAIN = TFRecordData( + path='/path/to/ln_coco_train', + size=118287 +) +LN_COCO_VAL = TFRecordData( + path='/path/to/ln_coco_val', + size=5000 +) +UNI_FLICKR_TRAIN = TFRecordData( + path='/path/to/flickr_train', + size=29778 +) +UNI_MIXED_COCO_TRAIN = TFRecordData( + path='/path/to/mixed_coco_train', + size=28158, +) +UNI_MIXED_VG_TRAIN = TFRecordData( + path='/path/to/mixed_vg_train', + size=106635, +) +MERGE_COCO_IMAGE_SAFE_TRAIN = TFRecordData( + path='/path/to/merge_coco_image_safe', + size=24407, +) +REFCOCO_UNC_TRAIN = TFRecordData( + path='/path/to/refcoco_unc_train', + size=16994, +) +REFCOCOG_UMD_TRAIN = TFRecordData( + path='/path/to/refcocog_umd_train', + size=21899, +) +REFCOCOPLUS_UNC_TRAIN = TFRecordData( + path='/path/to/refcocoplus_unc_train', + size=16992, +) +REFCOCO_UNC_VALIDATION = TFRecordData( + path='/path/to/refcoco_unc_validation', + size=1500, +) +REFCOCO_UNC_TESTA = TFRecordData( + path='/path/to/refcoco_unc_testa', + size=750, +) +REFCOCO_UNC_TESTB = TFRecordData( + path='/path/to/refcoco_unc_testb', + size=750, +) +REFCOCOG_UMD_VALIDATION = TFRecordData( + path='/path/to/refcocog_umd_validation', + size=1300, +) +REFCOCOG_UMD_TEST = TFRecordData( + path='/path/to/refcocog_umd_test', + size=2600, +) +REFCOCOPLUS_UNC_VALIDATION = TFRecordData( + path='/path/to/refcocoplus_unc_validation', + size=1500, +) +REFCOCOPLUS_UNC_TESTA = TFRecordData( + path='/path/to/refcocoplus_unc_testa', + size=750, +) +REFCOCOPLUS_UNC_TESTB = TFRecordData( + path='/path/to/refcocoplus_testb', + size=750, +) + + +COCO_CAP_TEST_ANNOTATION='/path/to/coco_cap_test_annotation', + +VG_DENSECAP_TEST_ANNOTATION='/path/to/vg_densecap_test_annotation', + +REFCOCO_UNC_VALIDATION_ANNOTATION='/path/to/refcoco_unc_validation_annotation', + +REFCOCO_UNC_TESTA_ANNOTATION='/path/to/refcoco_unc_testa_annotation', + +REFCOCO_UNC_TESTB_ANNOTATION='/path/to/refcoco_unc_testb_annotation', + +REFCOCOG_UMD_VALIDATION_ANNOTATION='/path/to/refcocog_umd_validation_annotation', + +REFCOCOG_UMD_TEST_ANNOTATION='/path/to/refcocog_umd_test_annotation', + +REFCOCOPLUS_UNC_VALIDATION_ANNOTATION='/path/to/refcocoplus_unc_validation_annotation', + +REFCOCOPLUS_UNC_TESTA_ANNOTATION='/path/to/refcocoplus_unc_testa_annotation', + +REFCOCOPLUS_UNC_TESTB_ANNOTATION='/path/to/refcocoplus_unc_testb_annotation', diff --git a/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_densecap.py b/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_densecap.py new file mode 100644 index 0000000000000000000000000000000000000000..f8abe81e79742a0fba438df469c93fe5cc1a4140 --- /dev/null +++ b/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_densecap.py @@ -0,0 +1,435 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long,unused-variable,unused-argument +r"""Default configs for fine-tuning dense object captioning on Visual Genome wiht T5. + +""" + +import ml_collections + +from scenic.projects.pixel_llm.configs import common + + +def get_vg_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, weight=1.0): + """Returns the visual genome train source.""" + + min_scale = 0.1 + max_scale = 2.0 + + prompt = "['an object of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_train = ( + 'parse_vg' + f"|decode_vg_annotations('{tokenizer_path}', {max_text_tokens})" + f"|random_horizontal_flip" + f"|random_ratio_resize({min_scale}, {max_scale}, {crop_size})" + f"|fixed_size_crop({crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_detection_annotations({max_boxes})" + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + ) + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'img_id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'regions/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'regions/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'regions/phrase': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'vg_densecap': { + 'tfrecords': common.VG_TRAIN.path, + 'size': common.VG_TRAIN.size, + } + } + + dataset_name = 'vg_densecap' + split = 'train' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_vg_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='vg', split='test', task='densecap'): + """Returns the visual genome train source.""" + + prompt = "['an object of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + 'parse_vg' + f"|decode_vg_annotations('{tokenizer_path}', {max_text_tokens})" + f"|resize_shorter({crop_size}, {crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_detection_annotations({max_boxes})" + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + ) + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'img_id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'regions/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'regions/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'regions/phrase': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'vg': { + 'tfrecords': common.VG_TEST.path, + 'size': common.VG_TEST.size, + } + } + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{task}_{split}', + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + return source + + +def get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, refexp_field='sent', dataset_name='refcoco_unc', split='validation'): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ train source.""" + + prompt = "['an object of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', {max_text_tokens}, refexp_field='{refexp_field}')" + f'|resize_shorter({crop_size}, {crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + f"|drop_nested('label', ['refexp_ids'])" + ) + if mask_on: + preproc_spec_eval += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + # 'objects/mask': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'refcoco_unc_validation': { + 'tfrecords': common.REFCOCO_UNC_VALIDATION.path, + 'size': common.REFCOCO_UNC_VALIDATION.size, + }, + 'refcoco_unc_testA': { + 'tfrecords': common.REFCOCO_UNC_TESTA.path, + 'size': common.REFCOCO_UNC_TESTA.size, + }, + 'refcoco_unc_testB': { + 'tfrecords': common.REFCOCO_UNC_TESTB.path, + 'size': common.REFCOCO_UNC_TESTB.size, + }, + 'refcocog_umd_validation': { + 'tfrecords': common.REFCOCOG_UMD_VALIDATION.path, + 'size': common.REFCOCOG_UMD_VALIDATION.size, + }, + 'refcocog_umd_test': { + 'tfrecords': common.REFCOCOG_UMD_TEST.path, + 'size': common.REFCOCOG_UMD_TEST.size, + }, + 'refcocoplus_unc_validation': { + 'tfrecords': common.REFCOCOPLUS_UNC_VALIDATION.path, + 'size': common.REFCOCOPLUS_UNC_VALIDATION.size, + }, + 'refcocoplus_unc_testA': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTA.path, + 'size': common.REFCOCOPLUS_UNC_TESTA.size, + }, + 'refcocoplus_unc_testB': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTB.path, + 'size': common.REFCOCOPLUS_UNC_TESTB.size, + }, + } + + dataset_name_split = f'{dataset_name}_{split}' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name_split]['tfrecords'], + 'size': tfrecord_meta[dataset_name_split]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_loca_{split}', + 'split': split, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + return source + + +def get_config(): + """Returns the configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'pixel_llm_t5_densecap' + + # Dataset. + config.dataset_name = 'custom_flexio' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = ['scenic.projects.pixel_llm.io.ops'] + + tokenizer_path = 't5' + config.dataset_configs.tokenizer_weight_path = tokenizer_path # Used in evaluation + max_text_tokens = 40 + max_context_tokens = 8 + max_boxes = 100 + crop_size = 384 + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.merge_sources = True + config.dataset_configs.train.batch_before_merge = True + config.dataset_configs.train.sources = [ + get_vg_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size), + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.merge_sources = False + config.dataset_configs.eval.sources = [ + get_vg_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size), + get_vg_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='vg', split='test', task='loca'), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocog_umd', split='validation'), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + config.dataset_configs.densecap_configs = ml_collections.ConfigDict() + config.dataset_configs.densecap_configs.test_annotation_path = common.VG_DENSECAP_TEST_ANNOTATION + config.dataset_configs.loca_configs = ml_collections.ConfigDict() + config.dataset_configs.loca_configs.vg_loca_test = ml_collections.ConfigDict() + config.dataset_configs.loca_configs.vg_loca_test.merge_gt_boxes = False + config.dataset_configs.loca_configs.refcocog_umd_loca_validation = ml_collections.ConfigDict() + config.dataset_configs.loca_configs.refcocog_umd_loca_validation.merge_gt_boxes = False + config.dataset_configs.extra_meta_data = { + 'input_shape': [-1, crop_size, crop_size, 3], + 'num_classes': -1, + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'pixel_llm' + + config.model.git_backbone_name = 'eva02_vit' + config.model.git_backbone_args = ml_collections.ConfigDict() + config.model.git_backbone_args.embed_dim = 1024 + config.model.git_backbone_args.depth = 24 + config.model.git_backbone_args.num_heads = 16 + config.model.git_backbone_args.patch_size = 14 + config.model.git_backbone_args.mlp_ratio = 4 * 2 / 3 + config.model.git_backbone_args.use_ln_post = True + config.model.git_backbone_args.drop_path_rate = 0.1 + config.model.git_preprocess_args = ml_collections.ConfigDict() + config.model.git_preprocess_args.image_size = (384, 384) + + config.model.det_backbone_name = 'none' + + config.model.sam_backbone_name = 'sam_vit' + config.model.sam_backbone_args = ml_collections.ConfigDict() + config.model.sam_backbone_args.embed_dim = 1280 + config.model.sam_backbone_args.depth = 32 + config.model.sam_backbone_args.num_heads = 16 + config.model.sam_backbone_args.drop_path_rate = 0.5 + config.model.sam_backbone_args.window_block_indexes = (0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30) + config.model.sam_preprocess_args = ml_collections.ConfigDict() + config.model.sam_preprocess_args.image_size = (384, 384) + + config.model.text_decoder_feature_key = 'git_visual_features+sam_visual_features' + # T5 setting + config.model.vocab_size = common.SP_VOCAB_SIZE + config.model.begin_token_id = 0 + config.model.end_token_id = 1 + config.model.text_decoder_name = 'flan_t5_xl' + config.model.text_decoder_args = ml_collections.ConfigDict() + config.model.text_decoder_args.dtype = 'float32' # 'bfloat16' + config.model.text_decoder_args.dropout_rate = 0.1 + config.model.text_decoder_args.encoder_lora_rank = 32 + config.model.text_decoder_args.decoder_lora_rank = 32 + config.model.text_decoder_args.encoder_lora_scale = 2 + config.model.text_decoder_args.decoder_lora_scale = 2 + config.model.text_decoder_args.encoder_lora_modules = 'q,v' + config.model.text_decoder_args.decoder_lora_modules = 'q,v' + + config.model.det_loss_weight = 1.0 + config.model.box_decoder_feature_key = 'git_visual_features+sam_visual_features' + # CenterNet2 parameters + config.model.box_decoder_name = 'centernet2_det_decoder' + config.model.box_decoder_args = ml_collections.ConfigDict() + config.model.box_decoder_args.num_classes = -1 + config.model.box_decoder_args.strides = (8, 16, 32, 64, 128) + config.model.box_decoder_args.roi_num_classes = 1 + config.model.box_decoder_args.hm_weight = 0.5 + config.model.box_decoder_args.reg_weight = 1.0 + config.model.box_decoder_args.score_thresh = 0.0001 + config.model.box_decoder_args.pre_nms_topk_train = 2000 + config.model.box_decoder_args.post_nms_topk_train = 1000 + config.model.box_decoder_args.pre_nms_topk_test = 1000 + config.model.box_decoder_args.post_nms_topk_test = 256 + config.model.box_decoder_args.iou_thresh = 0.9 + config.model.box_decoder_args.roi_matching_threshold = (0.6,) + config.model.box_decoder_args.roi_nms_threshold = 0.5 + config.model.box_decoder_args.roi_post_nms_num_detections = 100 + s = 2 + config.model.box_decoder_args.fpn_range = ( + (0, 80 / s), (64 / s, 160 / s), (128 / s, 320 / s), + (256 / s, 640 / s), (512 / s, 100000 / s)) + config.model.box_decoder_args.match_gt_thresh = 0.6 + + config.model.num_text_proposals = 32 + config.model.num_detections = config.model.box_decoder_args.roi_post_nms_num_detections + + # text + config.model.decode_per_node_beam_size = 1 + config.model.max_caption_length = max_text_tokens + + config.model.prompt_drop_rate = 0.0 + config.model.prompt_use_box_rate = 1.0 + config.model.prompt_encoder_name = 'sam_prompt_encoder' + config.model.prompt_encoder_args = ml_collections.ConfigDict() + config.model.prompt_encoder_args.embed_dim = 256 + config.model.prompt_adapter_name = 'sam_prompt_adapter' + config.model.prompt_adapter_args = ml_collections.ConfigDict() + config.model.prompt_adapter_args.depth = 6 + config.model.prompt_adapter_args.transformer_dim = 512 + config.model.prompt_adapter_args.output_dim = 1024 + + config.model.visual_project_layers_name = 'linear' + config.model.visual_project_layers_args = ml_collections.ConfigDict() + config.model.visual_project_layers_args.emb_dim = 2048 + + config.model.mask_decoder_name = 'none' + + config.model.prompt_fuse_fn = 'sparse' + config.model.decode_method = 'greedy' + config.model.decode_beam_size = 1 + # config.model.decode_method = 'beam' + # config.model.decode_beam_size = 4 + # config.model.decode_per_node_beam_size = 2 + config.model.mult_caption_score = False + config.model.max_caption_length = max_text_tokens + + config.model.point_predictor_name = 'none' + + config.weights='/path/to/pixel_llm_t5_trace', + config.load_pretrained_t5_weights = False + config.skip_wrong_shape = False + # config.eval_only = True + + # Training. + config.batch_size = 64 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.05 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.8 + config.optimizer.num_layers = config.model.git_backbone_args.depth + config.optimizer.decay_layer_prefix = 'git_backbone/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + config.frozen_params = ( + ('.*sam_backbone.*', 'sam_backbone'), + ('.*prompt_encoder.*', 'prompt_encoder'), + # ('.*git_backbone.*', 'git_backbone'), + ('^(?!.*lora.*).*t5_module.*', 'T5'), + ) + + # learning rate and training schedule + config.num_training_steps = 40000 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = 1000 + config.lr_configs.base_learning_rate = 1e-4 + + config.checkpoint_steps = 5000 + config.log_eval_steps = 5000 + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_ref.py b/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_ref.py new file mode 100644 index 0000000000000000000000000000000000000000..9a4e5293368f414dec887eca39abf3e340422c2c --- /dev/null +++ b/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_ref.py @@ -0,0 +1,429 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long,unused-variable,unused-argument +r"""Default configs for fine-tuning referring expression localization on RefCOCO wiht T5. + +""" + +import ml_collections + +from scenic.projects.pixel_llm.configs import common + + +def get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, use_text_as_context=True, refexp_field='sent', dataset_name='refcoco_unc', weight=1.0): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ train source.""" + + min_scale = 0.75 + max_scale = 1.25 + + context_prefix = 'where is ' + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_train = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', num_captions_per_sample={max_boxes}, max_text_tokens={max_text_tokens}, use_text_as_context={use_text_as_context}, max_context_tokens={max_context_tokens}, append_context_eos={append_eos}, context_prefix='{context_prefix}', refexp_field='{refexp_field}')" + f'|random_ratio_resize({min_scale}, {max_scale}, {crop_size})' + f'|fixed_size_crop({crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f"|add_prompt_boxes" + f"|drop_nested('label', ['refexp_ids'])" + f"|add_task_mask(['point'])" + ) + if mask_on: + preproc_spec_train += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'merge_coco_img_safe': { + 'tfrecords': common.MERGE_COCO_IMAGE_SAFE_TRAIN.path, + 'size': common.MERGE_COCO_IMAGE_SAFE_TRAIN.size, + }, + 'refcoco_unc': { + 'tfrecords': common.REFCOCO_UNC_TRAIN.path, + 'size': common.REFCOCO_UNC_TRAIN.size, + }, + 'refcocog_umd': { + 'tfrecords': common.REFCOCOG_UMD_TRAIN.path, + 'size': common.REFCOCOG_UMD_TRAIN.size, + }, + 'refcocoplus_unc': { + 'tfrecords': common.REFCOCOPLUS_UNC_TRAIN.path, + 'size': common.REFCOCOPLUS_UNC_TRAIN.size, + }, + 'uni_mixed_coco': { + 'tfrecords': common.UNI_MIXED_COCO_TRAIN.path, + 'size': common.UNI_MIXED_COCO_TRAIN.size, + }, + 'uni_mixed_vg': { + 'tfrecords': common.UNI_MIXED_VG_TRAIN.path, + 'size': common.UNI_MIXED_VG_TRAIN.size, + }, + 'uni_flickr': { + 'tfrecords': common.UNI_FLICKR_TRAIN.path, + 'size': common.UNI_FLICKR_TRAIN.size, + }, + } + + split = 'train' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, use_text_as_context=True, refexp_field='sent', dataset_name='refcoco_unc', split='validation'): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ eval source.""" + + context_prefix = 'where is ' + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', max_text_tokens={max_text_tokens}, use_text_as_context={use_text_as_context}, max_context_tokens={max_context_tokens}, append_context_eos={append_eos}, context_prefix='{context_prefix}', refexp_field='{refexp_field}')" + f'|resize_shorter({crop_size}, {crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f"|add_prompt_boxes" + ) + if mask_on: + preproc_spec_eval += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + # 'objects/mask': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'refcoco_unc_validation': { + 'tfrecords': common.REFCOCO_UNC_VALIDATION.path, + 'size': common.REFCOCO_UNC_VALIDATION.size, + }, + 'refcoco_unc_testA': { + 'tfrecords': common.REFCOCO_UNC_TESTA.path, + 'size': common.REFCOCO_UNC_TESTA.size, + }, + 'refcoco_unc_testB': { + 'tfrecords': common.REFCOCO_UNC_TESTB.path, + 'size': common.REFCOCO_UNC_TESTB.size, + }, + 'refcocog_umd_validation': { + 'tfrecords': common.REFCOCOG_UMD_VALIDATION.path, + 'size': common.REFCOCOG_UMD_VALIDATION.size, + }, + 'refcocog_umd_test': { + 'tfrecords': common.REFCOCOG_UMD_TEST.path, + 'size': common.REFCOCOG_UMD_TEST.size, + }, + 'refcocoplus_unc_validation': { + 'tfrecords': common.REFCOCOPLUS_UNC_VALIDATION.path, + 'size': common.REFCOCOPLUS_UNC_VALIDATION.size, + }, + 'refcocoplus_unc_testA': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTA.path, + 'size': common.REFCOCOPLUS_UNC_TESTA.size, + }, + 'refcocoplus_unc_testB': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTB.path, + 'size': common.REFCOCOPLUS_UNC_TESTB.size, + }, + } + + dataset_name_split = f'{dataset_name}_{split}' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name_split]['tfrecords'], + 'size': tfrecord_meta[dataset_name_split]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'split': split, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + return source + + +def get_config(): + """Returns the configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'pixel_llm_t5_ref' + + # Dataset. + config.dataset_name = 'custom_flexio' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = ['scenic.projects.pixel_llm.io.ops'] + + tokenizer_path = 't5' + config.dataset_configs.tokenizer_weight_path = tokenizer_path # Used in evaluation + max_text_tokens = 40 + max_context_tokens = -1 + use_text_as_context = True + max_boxes = 16 + crop_size = 384 + refexp_field = 'sent' + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.merge_sources = True + config.dataset_configs.train.batch_before_merge = True + config.dataset_configs.train.sources = [ + get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='uni_flickr', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='uni_mixed_coco', refexp_field=refexp_field, weight=5.0, use_text_as_context=use_text_as_context), + get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='uni_mixed_vg', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.merge_sources = False + config.dataset_configs.eval.sources = [ + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcoco_unc', split='validation', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + # get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcoco_unc', split='testA', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + # get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcoco_unc', split='testB', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocog_umd', split='validation', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + # get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocog_umd', split='test', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocoplus_unc', split='validation', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + # get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocoplus_unc', split='testA', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + # get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocoplus_unc', split='testB', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + config.dataset_configs.refer_configs = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.eval_step_multiplier = 1.0 + config.dataset_configs.refer_configs.refcoco_unc_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_validation.test_annotation_path = common.REFCOCO_UNC_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcoco_unc_testA = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_testA.test_annotation_path = common.REFCOCO_UNC_TESTA_ANNOTATION + config.dataset_configs.refer_configs.refcoco_unc_testB = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_testB.test_annotation_path = common.REFCOCO_UNC_TESTB_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_validation.test_annotation_path = common.REFCOCOPLUS_UNC_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_testA = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_testA.test_annotation_path = common.REFCOCOPLUS_UNC_TESTA_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_testB = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_testB.test_annotation_path = common.REFCOCOPLUS_UNC_TESTB_ANNOTATION + config.dataset_configs.refer_configs.refcocog_umd_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocog_umd_validation.test_annotation_path = common.REFCOCOG_UMD_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcocog_umd_test = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocog_umd_test.test_annotation_path = common.REFCOCOG_UMD_TEST_ANNOTATION + config.dataset_configs.extra_meta_data = { + 'input_shape': [-1, crop_size, crop_size, 3], + 'prompt_box_shape': [-1, 1, 4], + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'pixel_llm' + + config.model.git_backbone_name = 'eva02_vit' + config.model.git_backbone_args = ml_collections.ConfigDict() + config.model.git_backbone_args.embed_dim = 1024 + config.model.git_backbone_args.depth = 24 + config.model.git_backbone_args.num_heads = 16 + config.model.git_backbone_args.patch_size = 14 + config.model.git_backbone_args.mlp_ratio = 4 * 2 / 3 + config.model.git_backbone_args.use_ln_post = True + config.model.git_backbone_args.drop_path_rate = 0.1 + config.model.git_preprocess_args = ml_collections.ConfigDict() + config.model.git_preprocess_args.image_size = (384, 384) + + config.model.det_backbone_name = 'none' + + config.model.sam_backbone_name = 'sam_vit' + config.model.sam_backbone_args = ml_collections.ConfigDict() + config.model.sam_backbone_args.embed_dim = 1280 + config.model.sam_backbone_args.depth = 32 + config.model.sam_backbone_args.num_heads = 16 + config.model.sam_backbone_args.drop_path_rate = 0.5 + config.model.sam_backbone_args.window_block_indexes = (0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30) + config.model.sam_preprocess_args = ml_collections.ConfigDict() + config.model.sam_preprocess_args.image_size = (384, 384) + + config.model.text_decoder_feature_key = 'git_visual_features+sam_visual_features' + # T5 setting + config.model.vocab_size = common.SP_VOCAB_SIZE + config.model.begin_token_id = 0 + config.model.end_token_id = 1 + config.model.text_decoder_name = 'flan_t5_xl' + config.model.text_decoder_args = ml_collections.ConfigDict() + config.model.text_decoder_args.dtype = 'float32' # 'bfloat16' + config.model.text_decoder_args.dropout_rate = 0.1 + config.model.text_decoder_args.encoder_lora_rank = 32 + config.model.text_decoder_args.decoder_lora_rank = 32 + config.model.text_decoder_args.encoder_lora_scale = 2 + config.model.text_decoder_args.decoder_lora_scale = 2 + config.model.text_decoder_args.encoder_lora_modules = 'q,v' + config.model.text_decoder_args.decoder_lora_modules = 'q,v' + + config.model.box_decoder_name = 'none' + + config.model.prompt_drop_rate = 0.0 + config.model.prompt_use_box_rate = 1.0 + config.model.prompt_encoder_name = 'sam_prompt_encoder' + config.model.prompt_encoder_args = ml_collections.ConfigDict() + config.model.prompt_encoder_args.embed_dim = 256 + config.model.prompt_adapter_name = 'sam_prompt_adapter' + config.model.prompt_adapter_args = ml_collections.ConfigDict() + config.model.prompt_adapter_args.depth = 6 + config.model.prompt_adapter_args.transformer_dim = 512 + config.model.prompt_adapter_args.output_dim = 1024 + + config.model.visual_project_layers_name = 'linear' + config.model.visual_project_layers_args = ml_collections.ConfigDict() + config.model.visual_project_layers_args.emb_dim = 2048 + + config.model.mask_decoder_name = 'none' + + config.model.prompt_fuse_fn = 'sparse' + config.model.decode_method = 'beam' + config.model.decode_beam_size = 3 + config.model.decode_per_node_beam_size = 1 + config.model.mult_caption_score = True + config.model.max_caption_length = max_text_tokens + + config.model.point_predictor_name = 'mlp_point_predictor' + config.model.gt_box_points_per_side = -1 + config.model.point_loss_type = 'l1_nonzero' + config.model.use_points_as_det = True + config.model.point_output_ignore = '^end-1' + config.model.point_loss_weight = 0.1 + config.model.point_predictor_args = ml_collections.ConfigDict() + config.model.point_predictor_args.num_output_points = 2 + config.model.point_predictor_args.pre_norm = True + config.model.point_predictor_args.mlp_activation = 'gelu' + config.model.point_predictor_args.depth = 4 + + config.weights = '/path/to/pixel_llm_t5_trace', + config.load_pretrained_t5_weights = False + config.skip_wrong_shape = False +# config.eval_only = True + + # Training. + config.batch_size = 64 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.frozen_params = ( + ('.*sam_backbone.*', 'sam_backbone'), + ('.*prompt_encoder.*', 'prompt_encoder'), + # ('.*git_backbone.*', 'git_backbone'), + ('.*mask_decoder.*', 'mask_decoder'), + ('^(?!.*lora.*).*t5_module.*', 'T5'), + ) + + iter_factor = 4 + # learning rate and training schedule + config.num_training_steps = 30_000 * iter_factor + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = 250 * iter_factor + config.lr_configs.base_learning_rate = 5e-5 + + config.checkpoint_steps = 1000 * iter_factor + config.log_eval_steps = 2500 * iter_factor + + # Logging. + config.eval_meteor_spice = False + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_refseg.py b/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_refseg.py new file mode 100644 index 0000000000000000000000000000000000000000..da75c17f088ae49b02f094c83719a28a527fd195 --- /dev/null +++ b/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_refseg.py @@ -0,0 +1,451 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long,unused-variable,unused-argument +r"""Default configs for fine-tuning referring expression localization on RefCOCO wiht T5. + +""" + +import ml_collections + +from scenic.projects.pixel_llm.configs import common + + +def get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, use_text_as_context=True, refexp_field='sent', dataset_name='refcoco_unc', weight=1.0): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ train source.""" + + min_scale = 0.75 + max_scale = 1.25 + + context_prefix = 'where is ' + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_train = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', num_captions_per_sample={max_boxes}, max_text_tokens={max_text_tokens}, use_text_as_context={use_text_as_context}, max_context_tokens={max_context_tokens}, append_context_eos={append_eos}, context_prefix='{context_prefix}', refexp_field='{refexp_field}')" + f'|random_ratio_resize({min_scale}, {max_scale}, {crop_size})' + f'|fixed_size_crop({crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f"|add_prompt_boxes" + f"|drop_nested('label', ['refexp_ids'])" + f"|add_task_mask(['point'])" + ) + if mask_on: + preproc_spec_train += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'merge_coco_img_safe': { + 'tfrecords': common.MERGE_COCO_IMAGE_SAFE_TRAIN.path, + 'size': common.MERGE_COCO_IMAGE_SAFE_TRAIN.size, + }, + 'refcoco_unc': { + 'tfrecords': common.REFCOCO_UNC_TRAIN.path, + 'size': common.REFCOCO_UNC_TRAIN.size, + }, + 'refcocog_umd': { + 'tfrecords': common.REFCOCOG_UMD_TRAIN.path, + 'size': common.REFCOCOG_UMD_TRAIN.size, + }, + 'refcocoplus_unc': { + 'tfrecords': common.REFCOCOPLUS_UNC_TRAIN.path, + 'size': common.REFCOCOPLUS_UNC_TRAIN.size, + }, + 'uni_mixed_coco': { + 'tfrecords': common.UNI_MIXED_COCO_TRAIN.path, + 'size': common.UNI_MIXED_COCO_TRAIN.size, + }, + 'uni_mixed_vg': { + 'tfrecords': common.UNI_MIXED_VG_TRAIN.path, + 'size': common.UNI_MIXED_VG_TRAIN.size, + }, + 'uni_flickr': { + 'tfrecords': common.UNI_FLICKR_TRAIN.path, + 'size': common.UNI_FLICKR_TRAIN.size, + }, + } + + split = 'train' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, use_text_as_context=True, refexp_field='sent', dataset_name='refcoco_unc', split='validation'): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ eval source.""" + + context_prefix = 'where is ' + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', max_text_tokens={max_text_tokens}, use_text_as_context={use_text_as_context}, max_context_tokens={max_context_tokens}, append_context_eos={append_eos}, context_prefix='{context_prefix}', refexp_field='{refexp_field}')" + f'|resize_shorter({crop_size}, {crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f"|add_prompt_boxes" + ) + if mask_on: + preproc_spec_eval += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + # 'objects/mask': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'refcoco_unc_validation': { + 'tfrecords': common.REFCOCO_UNC_VALIDATION.path, + 'size': common.REFCOCO_UNC_VALIDATION.size, + }, + 'refcoco_unc_testA': { + 'tfrecords': common.REFCOCO_UNC_TESTA.path, + 'size': common.REFCOCO_UNC_TESTA.size, + }, + 'refcoco_unc_testB': { + 'tfrecords': common.REFCOCO_UNC_TESTB.path, + 'size': common.REFCOCO_UNC_TESTB.size, + }, + 'refcocog_umd_validation': { + 'tfrecords': common.REFCOCOG_UMD_VALIDATION.path, + 'size': common.REFCOCOG_UMD_VALIDATION.size, + }, + 'refcocog_umd_test': { + 'tfrecords': common.REFCOCOG_UMD_TEST.path, + 'size': common.REFCOCOG_UMD_TEST.size, + }, + 'refcocoplus_unc_validation': { + 'tfrecords': common.REFCOCOPLUS_UNC_VALIDATION.path, + 'size': common.REFCOCOPLUS_UNC_VALIDATION.size, + }, + 'refcocoplus_unc_testA': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTA.path, + 'size': common.REFCOCOPLUS_UNC_TESTA.size, + }, + 'refcocoplus_unc_testB': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTB.path, + 'size': common.REFCOCOPLUS_UNC_TESTB.size, + }, + } + + dataset_name_split = f'{dataset_name}_{split}' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name_split]['tfrecords'], + 'size': tfrecord_meta[dataset_name_split]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'split': split, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + return source + + +def get_config(): + """Returns the configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'pixel_llm_t5_refseg' + + # Dataset. + config.dataset_name = 'custom_flexio' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = ['scenic.projects.pixel_llm.io.ops'] + + tokenizer_path = 't5' + config.dataset_configs.tokenizer_weight_path = tokenizer_path # Used in evaluation + max_text_tokens = 40 + max_context_tokens = -1 + use_text_as_context = True + max_boxes = 16 + crop_size = 384 + refexp_field = 'sent' + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.merge_sources = True + config.dataset_configs.train.batch_before_merge = True + config.dataset_configs.train.sources = [ + get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='merge_coco_img_safe', refexp_field=refexp_field, mask_on=True, use_text_as_context=use_text_as_context), + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.merge_sources = False + config.dataset_configs.eval.sources = [ + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcoco_unc', split='validation', refexp_field=refexp_field, mask_on=True, use_text_as_context=use_text_as_context), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcoco_unc', split='testA', refexp_field=refexp_field, mask_on=True, use_text_as_context=use_text_as_context), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcoco_unc', split='testB', refexp_field=refexp_field, mask_on=True, use_text_as_context=use_text_as_context), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocog_umd', split='validation', refexp_field=refexp_field, mask_on=True, use_text_as_context=use_text_as_context), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocog_umd', split='test', refexp_field=refexp_field, mask_on=True, use_text_as_context=use_text_as_context), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocoplus_unc', split='validation', refexp_field=refexp_field, mask_on=True, use_text_as_context=use_text_as_context), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocoplus_unc', split='testA', refexp_field=refexp_field, mask_on=True, use_text_as_context=use_text_as_context), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='refcocoplus_unc', split='testB', refexp_field=refexp_field, mask_on=True, use_text_as_context=use_text_as_context), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + config.dataset_configs.refer_configs = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.eval_step_multiplier = 1.0 + config.dataset_configs.refer_configs.refcoco_unc_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_validation.test_annotation_path = common.REFCOCO_UNC_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcoco_unc_testA = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_testA.test_annotation_path = common.REFCOCO_UNC_TESTA_ANNOTATION + config.dataset_configs.refer_configs.refcoco_unc_testB = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_testB.test_annotation_path = common.REFCOCO_UNC_TESTB_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_validation.test_annotation_path = common.REFCOCOPLUS_UNC_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_testA = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_testA.test_annotation_path = common.REFCOCOPLUS_UNC_TESTA_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_testB = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_testB.test_annotation_path = common.REFCOCOPLUS_UNC_TESTB_ANNOTATION + config.dataset_configs.refer_configs.refcocog_umd_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocog_umd_validation.test_annotation_path = common.REFCOCOG_UMD_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcocog_umd_test = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocog_umd_test.test_annotation_path = common.REFCOCOG_UMD_TEST_ANNOTATION + config.dataset_configs.extra_meta_data = { + 'input_shape': [-1, crop_size, crop_size, 3], + 'prompt_box_shape': [-1, 1, 4], + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'pixel_llm' + + config.model.git_backbone_name = 'eva02_vit' + config.model.git_backbone_args = ml_collections.ConfigDict() + config.model.git_backbone_args.embed_dim = 1024 + config.model.git_backbone_args.depth = 24 + config.model.git_backbone_args.num_heads = 16 + config.model.git_backbone_args.patch_size = 14 + config.model.git_backbone_args.mlp_ratio = 4 * 2 / 3 + config.model.git_backbone_args.use_ln_post = True + config.model.git_backbone_args.drop_path_rate = 0.1 + config.model.git_preprocess_args = ml_collections.ConfigDict() + config.model.git_preprocess_args.image_size = (384, 384) + + config.model.det_backbone_name = 'none' + + config.model.sam_backbone_name = 'sam_vit' + config.model.sam_backbone_args = ml_collections.ConfigDict() + config.model.sam_backbone_args.embed_dim = 1280 + config.model.sam_backbone_args.depth = 32 + config.model.sam_backbone_args.num_heads = 16 + config.model.sam_backbone_args.drop_path_rate = 0.5 + config.model.sam_backbone_args.window_block_indexes = (0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30) + config.model.sam_preprocess_args = ml_collections.ConfigDict() + config.model.sam_preprocess_args.image_size = (384, 384) + + config.model.text_decoder_feature_key = 'git_visual_features+sam_visual_features' + # T5 setting + config.model.vocab_size = common.SP_VOCAB_SIZE + config.model.begin_token_id = 0 + config.model.end_token_id = 1 + config.model.text_decoder_name = 'flan_t5_xl' + config.model.text_decoder_args = ml_collections.ConfigDict() + config.model.text_decoder_args.dtype = 'float32' # 'bfloat16' + config.model.text_decoder_args.dropout_rate = 0.1 + config.model.text_decoder_args.encoder_lora_rank = 32 + config.model.text_decoder_args.decoder_lora_rank = 32 + config.model.text_decoder_args.encoder_lora_scale = 2 + config.model.text_decoder_args.decoder_lora_scale = 2 + config.model.text_decoder_args.encoder_lora_modules = 'q,v' + config.model.text_decoder_args.decoder_lora_modules = 'q,v' + + config.model.box_decoder_name = 'none' + + config.model.prompt_drop_rate = 0.0 + config.model.prompt_use_box_rate = 1.0 + config.model.prompt_encoder_name = 'sam_prompt_encoder' + config.model.prompt_encoder_args = ml_collections.ConfigDict() + config.model.prompt_encoder_args.embed_dim = 256 + config.model.prompt_adapter_name = 'sam_prompt_adapter' + config.model.prompt_adapter_args = ml_collections.ConfigDict() + config.model.prompt_adapter_args.depth = 6 + config.model.prompt_adapter_args.transformer_dim = 512 + config.model.prompt_adapter_args.output_dim = 1024 + + config.model.visual_project_layers_name = 'linear' + config.model.visual_project_layers_args = ml_collections.ConfigDict() + config.model.visual_project_layers_args.emb_dim = 2048 + + config.model.mask_decoder_name = 'sam_mask_decoder' + + config.model.prompt_fuse_fn = 'sparse' + config.model.decode_method = 'beam' + config.model.decode_beam_size = 3 + config.model.decode_per_node_beam_size = 1 + config.model.mult_caption_score = True + config.model.max_caption_length = max_text_tokens + + config.model.point_predictor_name = 'mlp_point_predictor' + config.model.gt_box_points_per_side = -1 + config.model.point_loss_type = 'l1_nonzero' + config.model.use_points_as_det = True + config.model.point_output_ignore = '^end-1' + config.model.point_loss_weight = 0.1 + config.model.point_predictor_args = ml_collections.ConfigDict() + config.model.point_predictor_args.num_output_points = 2 + config.model.point_predictor_args.pre_norm = True + config.model.point_predictor_args.mlp_activation = 'gelu' + config.model.point_predictor_args.depth = 4 + + config.model.mask_adapter_name = 'sam_mask_adapter' + config.model.mask_adapter_args = ml_collections.ConfigDict() + config.model.mask_adapter_args.gating = True + config.model.mask_loss_weight = 1.0 + + config.weights = '' + config.load_pretrained_t5_weights = False + config.skip_wrong_shape = False + config.load_prefix = '' + + config.multi_weights_args = ml_collections.ConfigDict() + config.multi_weights_args.weights = ( + '/path/to/sam_h/', + '/path/to/pixel_llm_t5_ref', + ) + config.multi_weights_args.load_replace = ( + (('image_encoder', 'sam_backbone'),), + (), + ) + config.force_init = True # load SAM + # config.eval_load_multi_weights = True + + # Training. + config.batch_size = 64 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.backbone_multiplier = 10.0 + config.optimizer.backbone_layer_prefix = 'mask_adapter' + config.frozen_params = ( + ('.*sam_backbone.*', 'sam_backbone'), + ('.*prompt_encoder.*', 'prompt_encoder'), + ('.*git_backbone.*', 'git_backbone'), + ('.*mask_decoder.*', 'mask_decoder'), + # ('.*t5_module.*', 'T5'), + # ('^(?!.*lora.*).*t5_module.*', 'T5'), + ('.*prompt_adapter.*', 'prompt_adapter'), + # ('.*point_predictor.*', 'point_predictor'), + ('.*textual/.*', 'text decoder'), # shouldn't overlaping + ('.*visual_project_layers/.*', 'visual_project_layers'), + ) + + iter_factor = 2 + # learning rate and training schedule + config.num_training_steps = 30_000 * iter_factor + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = 250 * iter_factor + config.lr_configs.base_learning_rate = 5e-5 + + config.checkpoint_steps = 1000 * iter_factor + config.log_eval_steps = 2500 * iter_factor + + # Logging. + config.eval_meteor_spice = False + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_trace.py b/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_trace.py new file mode 100644 index 0000000000000000000000000000000000000000..4dd25e876e651e44253f2a9d45ce67496d988271 --- /dev/null +++ b/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_trace.py @@ -0,0 +1,399 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long,unused-variable,unused-argument +r"""Default configs for pre-training on COCO caption and Localized Narratives with T5. + +""" + +import ml_collections + +from scenic.projects.pixel_llm.configs import common + + +def get_ln_trace_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, dataset_name='coco', weight=1.0): + """Returns the localized narrative train source.""" + # min_scale = 0.75 + # max_scale = 1.25 + min_scale = 1.0 + max_scale = 1.0 + + prompt = "['A long image caption: ', 'A long image description: ', 'Write a long description for the image. ', 'Write a long description for the photo. ', 'Provide a long description of what is presented in the photo. ', 'Describe the content of the image in detail. ', 'Can you in detail explain what you see in the image? ', 'Could you use a few sentences to describe what you perceive in the photo? ', 'Please provide a long depiction of the picture. ', 'Using language, provide a long account of the image. ', 'Use a few senetences to illustrate what is happening in the picture. ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + num_points_per_token = 2 + + preproc_spec_train = ( + f"decode_localized_narratives_annotations('{tokenizer_path}', {max_boxes}, {max_text_tokens}, {num_points_per_token})" + f'|random_ratio_resize({min_scale}, {max_scale}, {crop_size})' + f'|fixed_size_crop({crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f"|pad_caption_annotations({max_boxes})" + f'|pad_loco_annotations({max_boxes}, {num_points_per_token})' + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + '|add_prompt_boxes' + "|add_task_mask(['point', 'caption'])" + ) + + sequence_features = { + 'caption/utterance': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/center': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/point': {'feature_type': 'VarLen', 'dtype': 'float32'}, + } + + context_features = { + 'image/encoded': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'coco': { + 'tfrecords': common.LN_COCO_TRAIN.path, + 'size': common.LN_COCO_TRAIN.size, + }, + } + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_ln_trace_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, dataset_name='coco'): + """Returns the localized narrative train source.""" + + prompt = "['A long image caption: ']" + # prompt = "['we can see ']" + # prompt = "['where is ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + num_points_per_token = 2 + + preproc_spec_eval = ( + f"decode_localized_narratives_annotations('{tokenizer_path}', {max_boxes}, {max_text_tokens}, {num_points_per_token}, with_image_id=True)" + f"|resize_shorter({crop_size}, {crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_caption_annotations({max_boxes})" + f'|pad_loco_annotations({max_boxes}, {num_points_per_token})' + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes" + ) + sequence_features = { + 'caption/utterance': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/center': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/point': {'feature_type': 'VarLen', 'dtype': 'float32'}, + } + + context_features = { + 'image/encoded': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'coco': { + 'tfrecords': common.LN_COCO_VAL.path, + 'size': common.LN_COCO_VAL.size, + } + } + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + 'name': f'ln_{dataset_name}_trace_val', + }) + return source + + +def get_coco_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, num_captions_per_sample, crop_size, weight=1.0): + """Returns the COCO Caption train source.""" + tfds_name = 'coco_captions' + + min_scale = 0.75 + max_scale = 1.25 + + if max_text_tokens < 32: + prompt = "['A photo of ']" + else: + prompt = "['A short image caption: ', 'A short image description: ', 'A photo of ', 'An image that shows ', 'Write a short description for the image. ', 'Write a description for the photo. ', 'Provide a description of what is presented in the photo. ', 'Briefly describe the content of the image. ', 'Can you briefly explain what you see in the image? ', 'Could you use a few words to describe what you perceive in the photo? ', 'Please provide a short depiction of the picture. ', 'Using language, provide a short account of the image. ', 'Use a few words to illustrate what is happening in the picture. ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + num_points_per_token = 2 + + preproc_spec_train = ( + f"decode_coco_caption_annotations('{tokenizer_path}', {num_captions_per_sample}, {max_text_tokens})" + f"|random_ratio_resize({min_scale}, {max_scale}, {crop_size})" + f"|fixed_size_crop({crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_caption_annotations({num_captions_per_sample})" + f'|pad_loco_annotations({num_captions_per_sample}, {num_points_per_token})' + f"|add_prompt_tokens('{tokenizer_path}', {num_captions_per_sample}, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes" + f"|add_task_mask(['caption'])" + ) + source = ml_collections.ConfigDict({ + 'source': 'tfds', # `tfds` or `dmvr` + 'tfds_name': tfds_name, + 'split': 'train+restval', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_coco_cap_eval_source( + tokenizer_path, + max_text_tokens, + max_context_tokens, + num_captions_per_sample, + crop_size, +): + """Returns the COCO Caption eval source.""" + tfds_name = 'coco_captions' + + prompt = "['A photo of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + f"decode_coco_caption_annotations('{tokenizer_path}', {num_captions_per_sample}, {max_text_tokens})" + f"|resize_shorter({crop_size})" + f"|center_crop({crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|add_prompt_tokens('{tokenizer_path}', 1, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes(num_prompts=1)" + ) + + source = ml_collections.ConfigDict({ + 'source': 'tfds', + 'tfds_name': tfds_name, + 'name': 'coco_captions_val', + 'split': 'val', + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + + return source + + +def get_config(): + """Returns the configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'pixel_llm_t5_trace' + + # Dataset. + config.dataset_name = 'custom_flexio' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = ['scenic.projects.pixel_llm.io.ops'] + + tokenizer_path = 't5' + config.dataset_configs.tokenizer_weight_path = tokenizer_path # Used in evaluation + max_text_tokens = 128 + max_context_tokens = 8 + max_boxes = 1 + crop_size = 384 + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.merge_sources = True + config.dataset_configs.train.batch_before_merge = True + config.dataset_configs.train.sources = [ + get_coco_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, weight=1.0), + get_ln_trace_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='coco', weight=2.0), + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.merge_sources = False + config.dataset_configs.eval.sources = [ + get_coco_cap_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size), + get_ln_trace_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 1, crop_size, dataset_name='coco'), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + # Dataset configs needed by the trainer. + config.dataset_configs.caption_configs = ml_collections.ConfigDict() + config.dataset_configs.caption_configs.test_annotation_path = common.COCO_CAP_TEST_ANNOTATION + + config.dataset_configs.extra_meta_data = { + 'input_shape': [-1, crop_size, crop_size, 3], + 'prompt_box_shape': [-1, 1, 4], + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'pixel_llm' + + config.model.git_backbone_name = 'eva02_vit' + config.model.git_backbone_args = ml_collections.ConfigDict() + config.model.git_backbone_args.embed_dim = 1024 + config.model.git_backbone_args.depth = 24 + config.model.git_backbone_args.num_heads = 16 + config.model.git_backbone_args.patch_size = 14 + config.model.git_backbone_args.mlp_ratio = 4 * 2 / 3 + config.model.git_backbone_args.use_ln_post = True + config.model.git_backbone_args.drop_path_rate = 0.1 + config.model.git_preprocess_args = ml_collections.ConfigDict() + config.model.git_preprocess_args.image_size = (crop_size, crop_size) + + config.model.det_backbone_name = 'none' + + config.model.sam_backbone_name = 'sam_vit' + config.model.sam_backbone_args = ml_collections.ConfigDict() + config.model.sam_backbone_args.embed_dim = 1280 + config.model.sam_backbone_args.depth = 32 + config.model.sam_backbone_args.num_heads = 16 + config.model.sam_backbone_args.drop_path_rate = 0.5 + config.model.sam_backbone_args.window_block_indexes = (0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30) + config.model.sam_preprocess_args = ml_collections.ConfigDict() + config.model.sam_preprocess_args.image_size = (crop_size, crop_size) + + config.model.text_decoder_feature_key = 'git_visual_features+sam_visual_features' + # T5 setting + config.model.vocab_size = common.SP_VOCAB_SIZE + config.model.begin_token_id = 0 + config.model.end_token_id = 1 + config.model.text_decoder_name = 'flan_t5_xl' + config.model.text_decoder_args = ml_collections.ConfigDict() + config.model.text_decoder_args.dtype = 'float32' # 'bfloat16' + config.model.text_decoder_args.dropout_rate = 0.1 + config.model.text_decoder_args.encoder_lora_rank = 32 + config.model.text_decoder_args.decoder_lora_rank = 32 + config.model.text_decoder_args.encoder_lora_scale = 2 + config.model.text_decoder_args.decoder_lora_scale = 2 + config.model.text_decoder_args.encoder_lora_modules = 'q,v' + config.model.text_decoder_args.decoder_lora_modules = 'q,v' + + config.model.box_decoder_name = 'none' + + config.model.prompt_drop_rate = 0.0 + config.model.prompt_use_box_rate = 1.0 + config.model.prompt_encoder_name = 'sam_prompt_encoder' + config.model.prompt_encoder_args = ml_collections.ConfigDict() + config.model.prompt_encoder_args.embed_dim = 256 + config.model.prompt_adapter_name = 'sam_prompt_adapter' + config.model.prompt_adapter_args = ml_collections.ConfigDict() + config.model.prompt_adapter_args.depth = 6 + config.model.prompt_adapter_args.transformer_dim = 512 + config.model.prompt_adapter_args.output_dim = 1024 + + config.model.visual_project_layers_name = 'linear' + config.model.visual_project_layers_args = ml_collections.ConfigDict() + config.model.visual_project_layers_args.emb_dim = 2048 + + config.model.mask_decoder_name = 'none' + + config.model.prompt_fuse_fn = 'sparse' + config.model.decode_method = 'beam' + config.model.decode_beam_size = 4 + config.model.decode_per_node_beam_size = 2 + # config.model.decode_method = 'greedy' + # config.model.decode_beam_size = 1 + config.model.max_caption_length = max_text_tokens + + config.model.point_predictor_name = 'mlp_point_predictor' + config.model.gt_box_points_per_side = -1 + config.model.point_loss_type = 'l1_nonzero' + config.model.use_points_as_det = True + config.model.point_output_ignore = 'begin,end,pad' + config.model.trace_point_output_ignore = 'begin,end,pad' + config.model.point_loss_weight = 0.1 + config.model.point_predictor_args = ml_collections.ConfigDict() + config.model.point_predictor_args.num_output_points = 2 + config.model.point_predictor_args.pre_norm = True + config.model.point_predictor_args.mlp_activation = 'gelu' + config.model.point_predictor_args.depth = 4 + + config.weights='/path/to/pixel_llm_t5_webli', + config.load_pretrained_t5_weights = False + config.skip_wrong_shape = False + config.load_prefix = '' + + # Training. + config.batch_size = 256 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.frozen_params = ( + ('.*sam_backbone.*', 'sam_backbone'), + ('.*prompt_encoder.*', 'prompt_encoder'), + # ('.*git_backbone.*', 'git_backbone'), + ('.*mask_decoder.*', 'mask_decoder'), + # ('.*t5_module.*', 'T5'), + ('^(?!.*lora.*).*t5_module.*', 'T5'), + ) + + iter_factor = 1 + # learning rate and training schedule + config.num_training_steps = 10_000 * iter_factor + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = 250 * iter_factor + config.lr_configs.base_learning_rate = 5e-5 + + config.checkpoint_steps = 1000 * iter_factor + config.log_eval_steps = 2500 * iter_factor + + # Logging. + config.eval_meteor_spice = False + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_trace_ref_densecap_llava.py b/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_trace_ref_densecap_llava.py new file mode 100644 index 0000000000000000000000000000000000000000..aaba087ef2e3017bc7b7304c4e93749eb98474d0 --- /dev/null +++ b/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_trace_ref_densecap_llava.py @@ -0,0 +1,829 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long,unused-variable,unused-argument +r"""Default configs for joint training on COCO caption, Localized Narratives, Referring Expression Localization, Dense Object Captioning, Visual Instruct Tuning with T5. + +""" + +import ml_collections + +from scenic.projects.pixel_llm.configs import common + + +def get_ln_trace_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, dataset_name='coco', weight=1.0): + """Returns the localized narrative train source.""" + # min_scale = 0.75 + # max_scale = 1.25 + min_scale = 1.0 + max_scale = 1.0 + + prompt = "['A long image caption: ', 'A long image description: ', 'Write a long description for the image. ', 'Write a long description for the photo. ', 'Provide a long description of what is presented in the photo. ', 'Describe the content of the image in detail. ', 'Can you in detail explain what you see in the image? ', 'Could you use a few sentences to describe what you perceive in the photo? ', 'Please provide a long depiction of the picture. ', 'Using language, provide a long account of the image. ', 'Use a few senetences to illustrate what is happening in the picture. ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + num_points_per_token = 2 + + preproc_spec_train = ( + f"decode_localized_narratives_annotations('{tokenizer_path}', {max_boxes}, {max_text_tokens}, {num_points_per_token})" + f'|random_ratio_resize({min_scale}, {max_scale}, {crop_size})' + f'|fixed_size_crop({crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f"|pad_caption_annotations({max_boxes})" + f'|pad_detection_annotations({max_boxes})' + f'|pad_loco_annotations({max_boxes}, {num_points_per_token})' + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + '|add_prompt_boxes' + "|add_task_mask(['point', 'caption'])" + ) + + sequence_features = { + 'caption/utterance': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/center': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/point': {'feature_type': 'VarLen', 'dtype': 'float32'}, + } + + context_features = { + 'image/encoded': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'coco': { + 'tfrecords': common.LN_COCO_TRAIN.path, + 'size': common.LN_COCO_TRAIN.size, + }, + } + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_ln_trace_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, dataset_name='coco'): + """Returns the localized narrative train source.""" + + prompt = "['A long image caption: ']" + # prompt = "['we can see ']" + # prompt = "['where is ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + num_points_per_token = 2 + + preproc_spec_eval = ( + f"decode_localized_narratives_annotations('{tokenizer_path}', {max_boxes}, {max_text_tokens}, {num_points_per_token}, with_image_id=True)" + f"|resize_shorter({crop_size}, {crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_caption_annotations({max_boxes})" + f'|pad_loco_annotations({max_boxes}, {num_points_per_token})' + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes" + ) + sequence_features = { + 'caption/utterance': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/center': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/point': {'feature_type': 'VarLen', 'dtype': 'float32'}, + } + + context_features = { + 'image/encoded': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'coco': { + 'tfrecords': common.LN_COCO_VAL.path, + 'size': common.LN_COCO_VAL.size, + } + } + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + 'name': f'ln_{dataset_name}_trace_val', + }) + return source + + +def get_coco_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, num_captions_per_sample, crop_size, weight=1.0): + """Returns the COCO Caption train source.""" + tfds_name = 'coco_captions' + + min_scale = 0.75 + max_scale = 1.25 + + prompt = "['A short image caption: ', 'A short image description: ', 'A photo of ', 'An image that shows ', 'Write a short description for the image. ', 'Write a description for the photo. ', 'Provide a description of what is presented in the photo. ', 'Briefly describe the content of the image. ', 'Can you briefly explain what you see in the image? ', 'Could you use a few words to describe what you perceive in the photo? ', 'Please provide a short depiction of the picture. ', 'Using language, provide a short account of the image. ', 'Use a few words to illustrate what is happening in the picture. ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + num_points_per_token = 2 + + preproc_spec_train = ( + f"decode_coco_caption_annotations('{tokenizer_path}', {num_captions_per_sample}, {max_text_tokens})" + f"|random_ratio_resize({min_scale}, {max_scale}, {crop_size})" + f"|fixed_size_crop({crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_caption_annotations({num_captions_per_sample})" + f'|pad_detection_annotations({num_captions_per_sample})' + f'|pad_loco_annotations({num_captions_per_sample}, {num_points_per_token})' + f"|add_prompt_tokens('{tokenizer_path}', {num_captions_per_sample}, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes" + f"|add_task_mask(['caption'])" + ) + source = ml_collections.ConfigDict({ + 'source': 'tfds', # `tfds` or `dmvr` + 'tfds_name': tfds_name, + 'split': 'train+restval', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_coco_cap_eval_source( + tokenizer_path, + max_text_tokens, + max_context_tokens, + num_captions_per_sample, + crop_size, +): + """Returns the COCO Caption eval source.""" + tfds_name = 'coco_captions' + + prompt = "['A photo of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + f"decode_coco_caption_annotations('{tokenizer_path}', {num_captions_per_sample}, {max_text_tokens})" + f"|resize_shorter({crop_size})" + f"|center_crop({crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|add_prompt_tokens('{tokenizer_path}', 1, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes(num_prompts=1)" + ) + + source = ml_collections.ConfigDict({ + 'source': 'tfds', + 'tfds_name': tfds_name, + 'name': 'coco_captions_val', + 'split': 'val', + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + + return source + + +def get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, use_text_as_context=True, refexp_field='sent', dataset_name='refcoco_unc', weight=1.0): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ train source.""" + + min_scale = 0.75 + max_scale = 1.25 + + context_prefix = 'where is ' + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_train = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', num_captions_per_sample={max_boxes}, max_text_tokens={max_text_tokens}, use_text_as_context={use_text_as_context}, max_context_tokens={max_context_tokens}, append_context_eos={append_eos}, context_prefix='{context_prefix}', refexp_field='{refexp_field}')" + f'|random_ratio_resize({min_scale}, {max_scale}, {crop_size})' + f'|fixed_size_crop({crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f'|pad_loco_annotations({max_boxes}, 2)' + f"|add_prompt_boxes" + f"|drop_nested('label', ['refexp_ids'])" + f"|add_task_mask(['point'])" + ) + if mask_on: + preproc_spec_train += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'merge_coco_img_safe': { + 'tfrecords': common.MERGE_COCO_IMAGE_SAFE_TRAIN.path, + 'size': common.MERGE_COCO_IMAGE_SAFE_TRAIN.size, + }, + 'refcoco_unc': { + 'tfrecords': common.REFCOCO_UNC_TRAIN.path, + 'size': common.REFCOCO_UNC_TRAIN.size, + }, + 'refcocog_umd': { + 'tfrecords': common.REFCOCOG_UMD_TRAIN.path, + 'size': common.REFCOCOG_UMD_TRAIN.size, + }, + 'refcocoplus_unc': { + 'tfrecords': common.REFCOCOPLUS_UNC_TRAIN.path, + 'size': common.REFCOCOPLUS_UNC_TRAIN.size, + }, + 'uni_mixed_coco': { + 'tfrecords': common.UNI_MIXED_COCO_TRAIN.path, + 'size': common.UNI_MIXED_COCO_TRAIN.size, + }, + 'uni_mixed_vg': { + 'tfrecords': common.UNI_MIXED_VG_TRAIN.path, + 'size': common.UNI_MIXED_VG_TRAIN.size, + }, + 'uni_flickr': { + 'tfrecords': common.UNI_FLICKR_TRAIN.path, + 'size': common.UNI_FLICKR_TRAIN.size, + }, + } + + split = 'train' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, use_text_as_context=True, refexp_field='sent', dataset_name='refcoco_unc', split='validation'): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ eval source.""" + + context_prefix = 'where is ' + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', max_text_tokens={max_text_tokens}, use_text_as_context={use_text_as_context}, max_context_tokens={max_context_tokens}, append_context_eos={append_eos}, context_prefix='{context_prefix}', refexp_field='{refexp_field}')" + f'|resize_shorter({crop_size}, {crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f"|add_prompt_boxes" + ) + if mask_on: + preproc_spec_eval += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + # 'objects/mask': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'refcoco_unc_validation': { + 'tfrecords': common.REFCOCO_UNC_VALIDATION.path, + 'size': common.REFCOCO_UNC_VALIDATION.size, + }, + 'refcoco_unc_testA': { + 'tfrecords': common.REFCOCO_UNC_TESTA.path, + 'size': common.REFCOCO_UNC_TESTA.size, + }, + 'refcoco_unc_testB': { + 'tfrecords': common.REFCOCO_UNC_TESTB.path, + 'size': common.REFCOCO_UNC_TESTB.size, + }, + 'refcocog_umd_validation': { + 'tfrecords': common.REFCOCOG_UMD_VALIDATION.path, + 'size': common.REFCOCOG_UMD_VALIDATION.size, + }, + 'refcocog_umd_test': { + 'tfrecords': common.REFCOCOG_UMD_TEST.path, + 'size': common.REFCOCOG_UMD_TEST.size, + }, + 'refcocoplus_unc_validation': { + 'tfrecords': common.REFCOCOPLUS_UNC_VALIDATION.path, + 'size': common.REFCOCOPLUS_UNC_VALIDATION.size, + }, + 'refcocoplus_unc_testA': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTA.path, + 'size': common.REFCOCOPLUS_UNC_TESTA.size, + }, + 'refcocoplus_unc_testB': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTB.path, + 'size': common.REFCOCOPLUS_UNC_TESTB.size, + }, + } + + dataset_name_split = f'{dataset_name}_{split}' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name_split]['tfrecords'], + 'size': tfrecord_meta[dataset_name_split]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'split': split, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + return source + + +def get_vg_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, weight=1.0): + """Returns the visual genome train source.""" + + min_scale = 0.1 + max_scale = 2.0 + + prompt = "['an object of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_train = ( + 'parse_vg' + f"|decode_vg_annotations('{tokenizer_path}', {max_text_tokens})" + f"|random_horizontal_flip" + f"|random_ratio_resize({min_scale}, {max_scale}, {crop_size})" + f"|fixed_size_crop({crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f'|pad_detection_annotations({max_boxes})' + f'|pad_loco_annotations({max_boxes}, 2)' + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes" + f"|add_task_mask(['detection', 'caption'])" + ) + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'img_id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'regions/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'regions/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'regions/phrase': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'vg_densecap': { + 'tfrecords': common.VG_TRAIN.path, + 'size': common.VG_TRAIN.size, + } + } + + dataset_name = 'vg_densecap' + split = 'train' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_vg_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='vg', split='test', task='densecap'): + """Returns the visual genome train source.""" + + prompt = "['an object of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + 'parse_vg' + f"|decode_vg_annotations('{tokenizer_path}', {max_text_tokens})" + f"|resize_shorter({crop_size}, {crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_detection_annotations({max_boxes})" + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + ) + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'img_id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'regions/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'regions/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'regions/phrase': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'vg': { + 'tfrecords': common.VG_TEST.path, + 'size': common.VG_TEST.size, + } + } + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{task}_{split}', + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + return source + + +def get_llava_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, num_captions_per_sample, crop_size, dataset_name='llava_v1_5_mix665k', weight=1.0): + """Returns the LLaVA train source.""" + + min_scale = 1.0 + max_scale = 1.0 + + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_train = ( + "parse_llava" + f"|decode_coco_caption_annotations('{tokenizer_path}', {num_captions_per_sample}, {max_text_tokens}, {max_context_tokens}, {append_eos}, context_prefix='Question: ', context_suffix='Answer: ')" + f"|random_ratio_resize({min_scale}, {max_scale}, {crop_size})" + f"|fixed_size_crop({crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_caption_annotations({num_captions_per_sample})" + f'|pad_detection_annotations({num_captions_per_sample})' + f'|pad_loco_annotations({num_captions_per_sample}, 2)' + f"|add_prompt_boxes" + f"|add_task_mask(['caption'])" + ) + context_features = { + 'image/encoded': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'conversations/human': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'conversations/agent': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + tfrecord_meta = { + 'llava_v1_5_mix665k': { + 'tfrecords': common.LLAVA_V1_5_MIX665K.path, + 'size': common.LLAVA_V1_5_MIX665K.size, + }, + 'sharegpt4v_mix665k_cap23k_coco-ap9k_lcs3k_sam9k_div2k': { + 'tfrecords': common.SHAREGPT4V_MIX665K.path, + 'size': common.SHAREGPT4V_MIX665K.size, + }, + } + + split = 'train' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_config(): + """Returns the configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'pixel_llm_t5_trace_ref_densecap_llava' + + # Dataset. + config.dataset_name = 'custom_flexio' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = ['scenic.projects.pixel_llm.io.ops'] + + tokenizer_path = 't5' + config.dataset_configs.tokenizer_weight_path = tokenizer_path # Used in evaluation + max_text_tokens = 128 + max_context_tokens = 32 + use_text_as_context = True + max_boxes = 16 + crop_size = 384 + refexp_field = 'sent' + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.merge_sources = True + config.dataset_configs.train.batch_before_merge = True + config.dataset_configs.train.sources = [ + get_coco_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, weight=3.0), + get_ln_trace_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='coco', weight=1.0), + get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='uni_flickr', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='uni_mixed_coco', refexp_field=refexp_field, weight=5.0, use_text_as_context=use_text_as_context), + get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='uni_mixed_vg', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + get_vg_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, weight=5.0), + get_llava_cap_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='sharegpt4v_mix665k_cap23k_coco-ap9k_lcs3k_sam9k_div2k', weight=5.0), + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.merge_sources = False + config.dataset_configs.eval.sources = [ + get_coco_cap_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 1, crop_size), + get_ln_trace_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 1, crop_size, dataset_name='coco'), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 16, crop_size, dataset_name='refcoco_unc', split='validation', refexp_field=refexp_field, use_text_as_context=use_text_as_context), + get_vg_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 100, crop_size, dataset_name='vg', split='test', task='densecap'), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + # Dataset configs needed by the trainer. + config.dataset_configs.caption_configs = ml_collections.ConfigDict() + config.dataset_configs.caption_configs.test_annotation_path = common.COCO_CAP_TEST_ANNOTATION + config.dataset_configs.refer_configs = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_validation.test_annotation_path = common.REFCOCO_UNC_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcoco_unc_testA = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_testA.test_annotation_path = common.REFCOCO_UNC_TESTA_ANNOTATION + config.dataset_configs.refer_configs.refcoco_unc_testB = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_testB.test_annotation_path = common.REFCOCO_UNC_TESTB_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_validation.test_annotation_path = common.REFCOCOPLUS_UNC_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_testA = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_testA.test_annotation_path = common.REFCOCOPLUS_UNC_TESTA_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_testB = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_testB.test_annotation_path = common.REFCOCOPLUS_UNC_TESTB_ANNOTATION + config.dataset_configs.refer_configs.refcocog_umd_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocog_umd_validation.test_annotation_path = common.REFCOCOG_UMD_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcocog_umd_test = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocog_umd_test.test_annotation_path = common.REFCOCOG_UMD_TEST_ANNOTATION + config.dataset_configs.densecap_configs = ml_collections.ConfigDict() + config.dataset_configs.densecap_configs.test_annotation_path = common.VG_DENSECAP_TEST_ANNOTATION + + config.dataset_configs.extra_meta_data = { + 'input_shape': [-1, crop_size, crop_size, 3], + 'prompt_box_shape': [-1, 1, 4], + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'pixel_llm' + + config.model.git_backbone_name = 'eva02_vit' + config.model.git_backbone_args = ml_collections.ConfigDict() + config.model.git_backbone_args.embed_dim = 1024 + config.model.git_backbone_args.depth = 24 + config.model.git_backbone_args.num_heads = 16 + config.model.git_backbone_args.patch_size = 14 + config.model.git_backbone_args.mlp_ratio = 4 * 2 / 3 + config.model.git_backbone_args.use_ln_post = True + config.model.git_backbone_args.drop_path_rate = 0.1 + config.model.git_preprocess_args = ml_collections.ConfigDict() + config.model.git_preprocess_args.image_size = (crop_size, crop_size) + + config.model.det_backbone_name = 'none' + + config.model.sam_backbone_name = 'sam_vit' + config.model.sam_backbone_args = ml_collections.ConfigDict() + config.model.sam_backbone_args.embed_dim = 1280 + config.model.sam_backbone_args.depth = 32 + config.model.sam_backbone_args.num_heads = 16 + config.model.sam_backbone_args.drop_path_rate = 0.5 + config.model.sam_backbone_args.window_block_indexes = (0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30) + config.model.sam_preprocess_args = ml_collections.ConfigDict() + config.model.sam_preprocess_args.image_size = (crop_size, crop_size) + + config.model.text_decoder_feature_key = 'git_visual_features+sam_visual_features' + # T5 setting + config.model.vocab_size = common.SP_VOCAB_SIZE + config.model.begin_token_id = 0 + config.model.end_token_id = 1 + config.model.text_decoder_name = 'flan_t5_xl' + config.model.text_decoder_args = ml_collections.ConfigDict() + config.model.text_decoder_args.dtype = 'float32' # 'bfloat16' + config.model.text_decoder_args.dropout_rate = 0.1 + config.model.text_decoder_args.encoder_lora_rank = 32 + config.model.text_decoder_args.decoder_lora_rank = 32 + config.model.text_decoder_args.encoder_lora_scale = 2 + config.model.text_decoder_args.decoder_lora_scale = 2 + config.model.text_decoder_args.encoder_lora_modules = 'q,v' + config.model.text_decoder_args.decoder_lora_modules = 'q,v' + + config.model.det_loss_weight = 1.0 + config.model.box_decoder_feature_key = 'git_visual_features+sam_visual_features' + # CenterNet2 parameters + config.model.box_decoder_name = 'centernet2_det_decoder' + config.model.box_decoder_args = ml_collections.ConfigDict() + config.model.box_decoder_args.num_classes = -1 + config.model.box_decoder_args.strides = (8, 16, 32, 64, 128) + config.model.box_decoder_args.roi_num_classes = 1 + config.model.box_decoder_args.hm_weight = 0.5 + config.model.box_decoder_args.reg_weight = 1.0 + config.model.box_decoder_args.score_thresh = 0.0001 + config.model.box_decoder_args.pre_nms_topk_train = 2000 + config.model.box_decoder_args.post_nms_topk_train = 1000 + config.model.box_decoder_args.pre_nms_topk_test = 1000 + config.model.box_decoder_args.post_nms_topk_test = 256 + config.model.box_decoder_args.iou_thresh = 0.9 + config.model.box_decoder_args.roi_matching_threshold = (0.6,) + config.model.box_decoder_args.roi_nms_threshold = 0.5 + config.model.box_decoder_args.roi_post_nms_num_detections = 32 + s = 2 + config.model.box_decoder_args.fpn_range = ( + (0, 80 / s), (64 / s, 160 / s), (128 / s, 320 / s), + (256 / s, 640 / s), (512 / s, 100000 / s)) + config.model.box_decoder_args.match_gt_thresh = 0.6 + + config.model.num_text_proposals = 16 + config.model.num_detections = config.model.box_decoder_args.roi_post_nms_num_detections + + config.model.prompt_drop_rate = 0.0 + config.model.prompt_use_box_rate = 1.0 + config.model.prompt_encoder_name = 'sam_prompt_encoder' + config.model.prompt_encoder_args = ml_collections.ConfigDict() + config.model.prompt_encoder_args.embed_dim = 256 + config.model.prompt_adapter_name = 'sam_prompt_adapter' + config.model.prompt_adapter_args = ml_collections.ConfigDict() + config.model.prompt_adapter_args.depth = 6 + config.model.prompt_adapter_args.transformer_dim = 512 + config.model.prompt_adapter_args.output_dim = 1024 + + config.model.visual_project_layers_name = 'linear' + config.model.visual_project_layers_args = ml_collections.ConfigDict() + config.model.visual_project_layers_args.emb_dim = 2048 + + config.model.mask_decoder_name = 'none' + + config.model.prompt_fuse_fn = 'sparse' + config.model.decode_method = 'beam' + config.model.decode_beam_size = 4 + config.model.decode_per_node_beam_size = 2 + # config.model.decode_method = 'greedy' + # config.model.decode_beam_size = 1 + config.model.max_caption_length = max_text_tokens + + config.model.point_predictor_name = 'mlp_point_predictor' + config.model.gt_box_points_per_side = -1 + config.model.point_loss_type = 'l1_nonzero' + config.model.use_points_as_det = True + config.model.point_output_ignore = '^end-1' + config.model.trace_point_output_ignore = 'begin,end,pad' + config.model.point_loss_weight = 0.1 + config.model.point_predictor_args = ml_collections.ConfigDict() + config.model.point_predictor_args.num_output_points = 2 + config.model.point_predictor_args.pre_norm = True + config.model.point_predictor_args.mlp_activation = 'gelu' + config.model.point_predictor_args.depth = 4 + + config.weights='/path/to/pixel_llm_t5_webli', + config.load_pretrained_t5_weights = False + config.skip_wrong_shape = False + config.load_prefix = '' + + # Training. + config.batch_size = 128 + config.eval_batch_size = 64 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.05 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.layerwise_decay = 0.8 + config.optimizer.num_layers = config.model.git_backbone_args.depth + config.optimizer.decay_layer_prefix = 'git_backbone/blocks.' + config.optimizer.decay_stem_layers = ['patch_embed.proj', 'pos_embed'] + config.frozen_params = ( + ('.*sam_backbone.*', 'sam_backbone'), + ('.*prompt_encoder.*', 'prompt_encoder'), + # ('.*git_backbone.*', 'git_backbone'), + ('.*mask_decoder.*', 'mask_decoder'), + # ('.*t5_module.*', 'T5'), + ('^(?!.*lora.*).*t5_module.*', 'T5'), + ) + + iter_factor = 8 + # learning rate and training schedule + config.num_training_steps = 30_000 * iter_factor + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = 250 * iter_factor + config.lr_configs.base_learning_rate = 1e-4 + + config.checkpoint_steps = 1000 * iter_factor + config.log_eval_steps = 2500 * iter_factor + + # Logging. + config.eval_meteor_spice = False + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_trace_refseg_densecap_llava.py b/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_trace_refseg_densecap_llava.py new file mode 100644 index 0000000000000000000000000000000000000000..39ca984e3875faac68003e6933bdb537b95602f4 --- /dev/null +++ b/scenic/projects/pixel_llm/configs/t5/pixel_llm_t5_trace_refseg_densecap_llava.py @@ -0,0 +1,620 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long,unused-variable,unused-argument +r"""Default configs for joint training on COCO caption, Localized Narratives, Referring Expression Localization, Dense Object Captioning, Visual Instruct Tuning with T5. + +""" + +import ml_collections + +from scenic.projects.pixel_llm.configs import common + + +def get_ln_trace_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, dataset_name='coco'): + """Returns the localized narrative train source.""" + + prompt = "['A long image caption: ']" + # prompt = "['we can see ']" + # prompt = "['where is ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + num_points_per_token = 2 + + preproc_spec_eval = ( + f"decode_localized_narratives_annotations('{tokenizer_path}', {max_boxes}, {max_text_tokens}, {num_points_per_token}, with_image_id=True)" + f"|resize_shorter({crop_size}, {crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_caption_annotations({max_boxes})" + f'|pad_loco_annotations({max_boxes}, {num_points_per_token})' + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes" + ) + sequence_features = { + 'caption/utterance': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/center': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'caption/point': {'feature_type': 'VarLen', 'dtype': 'float32'}, + } + + context_features = { + 'image/encoded': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'coco': { + 'tfrecords': common.LN_COCO_VAL.path, + 'size': common.LN_COCO_VAL.size, + } + } + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + 'name': f'ln_{dataset_name}_trace_val', + }) + return source + + +def get_coco_cap_eval_source( + tokenizer_path, + max_text_tokens, + max_context_tokens, + num_captions_per_sample, + crop_size, +): + """Returns the COCO Caption eval source.""" + tfds_name = 'coco_captions' + + prompt = "['A photo of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + f"decode_coco_caption_annotations('{tokenizer_path}', {num_captions_per_sample}, {max_text_tokens})" + f"|resize_shorter({crop_size})" + f"|center_crop({crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|add_prompt_tokens('{tokenizer_path}', 1, {prompt}, {max_context_tokens}, {append_eos})" + f"|add_prompt_boxes(num_prompts=1)" + ) + + source = ml_collections.ConfigDict({ + 'source': 'tfds', + 'tfds_name': tfds_name, + 'name': 'coco_captions_val', + 'split': 'val', + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + + return source + + +def get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, use_text_as_context=True, refexp_field='sent', dataset_name='refcoco_unc', weight=1.0): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ train source.""" + + min_scale = 0.75 + max_scale = 1.25 + + context_prefix = 'where is ' + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_train = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', num_captions_per_sample={max_boxes}, max_text_tokens={max_text_tokens}, use_text_as_context={use_text_as_context}, max_context_tokens={max_context_tokens}, append_context_eos={append_eos}, context_prefix='{context_prefix}', refexp_field='{refexp_field}')" + f'|random_ratio_resize({min_scale}, {max_scale}, {crop_size})' + f'|fixed_size_crop({crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f'|pad_loco_annotations({max_boxes}, 2)' + f"|add_prompt_boxes" + f"|drop_nested('label', ['refexp_ids'])" + f"|add_task_mask(['point'])" + ) + if mask_on: + preproc_spec_train += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'merge_coco_img_safe': { + 'tfrecords': common.MERGE_COCO_IMAGE_SAFE_TRAIN.path, + 'size': common.MERGE_COCO_IMAGE_SAFE_TRAIN.size, + }, + 'refcoco_unc': { + 'tfrecords': common.REFCOCO_UNC_TRAIN.path, + 'size': common.REFCOCO_UNC_TRAIN.size, + }, + 'refcocog_umd': { + 'tfrecords': common.REFCOCOG_UMD_TRAIN.path, + 'size': common.REFCOCOG_UMD_TRAIN.size, + }, + 'refcocoplus_unc': { + 'tfrecords': common.REFCOCOPLUS_UNC_TRAIN.path, + 'size': common.REFCOCOPLUS_UNC_TRAIN.size, + }, + 'uni_mixed_coco': { + 'tfrecords': common.UNI_MIXED_COCO_TRAIN.path, + 'size': common.UNI_MIXED_COCO_TRAIN.size, + }, + 'uni_mixed_vg': { + 'tfrecords': common.UNI_MIXED_VG_TRAIN.path, + 'size': common.UNI_MIXED_VG_TRAIN.size, + }, + 'uni_flickr': { + 'tfrecords': common.UNI_FLICKR_TRAIN.path, + 'size': common.UNI_FLICKR_TRAIN.size, + }, + } + + split = 'train' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'shuffle_buffer_size': 10_000, + 'cache': False, + 'preproc_spec': preproc_spec_train, + 'weight': weight, + }) + return source + + +def get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, *, mask_on=False, use_text_as_context=True, refexp_field='sent', dataset_name='refcoco_unc', split='validation'): + """Returns the RefCOCO/RefCOCOg/RefCOCO+/ eval source.""" + + context_prefix = 'where is ' + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + f"parse_ref_coco(refexp_field='{refexp_field}')" + f"|decode_ref_coco_annotations('{tokenizer_path}', max_text_tokens={max_text_tokens}, use_text_as_context={use_text_as_context}, max_context_tokens={max_context_tokens}, append_context_eos={append_eos}, context_prefix='{context_prefix}', refexp_field='{refexp_field}')" + f'|resize_shorter({crop_size}, {crop_size})' + '|init_padding_mask' + f'|pad_images({crop_size}, {crop_size})' + f'|pad_detection_annotations({max_boxes})' + f"|add_prompt_boxes" + ) + if mask_on: + preproc_spec_eval += f'|pad_masks({max_boxes}, {crop_size}, {crop_size})' + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'image/id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'objects/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/area': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + # 'objects/mask': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'objects/label': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/gt_box_index': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'objects/refexp/refexp_id/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + 'objects/refexp/refexp_id/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_row_lengths_0': { + 'feature_type': 'VarLen', + 'dtype': 'int64', + }, + f'objects/refexp/{refexp_field}/ragged_flat_values': { + 'feature_type': 'VarLen', + 'dtype': 'string', + }, + } + if mask_on: + context_features['objects/mask'] = {'feature_type': 'VarLen', 'dtype': 'string'} + + tfrecord_meta = { + 'refcoco_unc_validation': { + 'tfrecords': common.REFCOCO_UNC_VALIDATION.path, + 'size': common.REFCOCO_UNC_VALIDATION.size, + }, + 'refcoco_unc_testA': { + 'tfrecords': common.REFCOCO_UNC_TESTA.path, + 'size': common.REFCOCO_UNC_TESTA.size, + }, + 'refcoco_unc_testB': { + 'tfrecords': common.REFCOCO_UNC_TESTB.path, + 'size': common.REFCOCO_UNC_TESTB.size, + }, + 'refcocog_umd_validation': { + 'tfrecords': common.REFCOCOG_UMD_VALIDATION.path, + 'size': common.REFCOCOG_UMD_VALIDATION.size, + }, + 'refcocog_umd_test': { + 'tfrecords': common.REFCOCOG_UMD_TEST.path, + 'size': common.REFCOCOG_UMD_TEST.size, + }, + 'refcocoplus_unc_validation': { + 'tfrecords': common.REFCOCOPLUS_UNC_VALIDATION.path, + 'size': common.REFCOCOPLUS_UNC_VALIDATION.size, + }, + 'refcocoplus_unc_testA': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTA.path, + 'size': common.REFCOCOPLUS_UNC_TESTA.size, + }, + 'refcocoplus_unc_testB': { + 'tfrecords': common.REFCOCOPLUS_UNC_TESTB.path, + 'size': common.REFCOCOPLUS_UNC_TESTB.size, + }, + } + + dataset_name_split = f'{dataset_name}_{split}' + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', # `tfds` or `dmvr` or `grain` + 'tfrecords': tfrecord_meta[dataset_name_split]['tfrecords'], + 'size': tfrecord_meta[dataset_name_split]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{split}', + 'split': split, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + return source + + +def get_vg_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='vg', split='test', task='densecap'): + """Returns the visual genome train source.""" + + prompt = "['an object of ']" + append_eos = True # Following BLIP2 to append an eos after prompts + + preproc_spec_eval = ( + 'parse_vg' + f"|decode_vg_annotations('{tokenizer_path}', {max_text_tokens})" + f"|resize_shorter({crop_size}, {crop_size})" + f"|init_padding_mask" + f"|pad_images({crop_size}, {crop_size})" + f"|pad_detection_annotations({max_boxes})" + f"|add_prompt_tokens('{tokenizer_path}', {max_boxes}, {prompt}, {max_context_tokens}, {append_eos})" + ) + + context_features = { + 'image': { + 'feature_type': 'FixedLen', + 'shape': [], + 'dtype': 'string', + }, + 'img_id': {'feature_type': 'FixedLen', 'dtype': 'int64'}, + 'regions/id': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'regions/bbox': {'feature_type': 'VarLen', 'dtype': 'float32'}, + 'regions/phrase': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + + tfrecord_meta = { + 'vg': { + 'tfrecords': common.VG_TEST.path, + 'size': common.VG_TEST.size, + } + } + + source = ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': tfrecord_meta[dataset_name]['tfrecords'], + 'size': tfrecord_meta[dataset_name]['size'], + 'context_features': context_features, + 'name': f'{dataset_name}_{task}_{split}', + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': preproc_spec_eval, + }) + return source + + +def get_config(): + """Returns the configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'pixel_llm_t5_trace_refseg_densecap_llava' + + # Dataset. + config.dataset_name = 'custom_flexio' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = ['scenic.projects.pixel_llm.io.ops'] + + tokenizer_path = 't5' + config.dataset_configs.tokenizer_weight_path = tokenizer_path # Used in evaluation + max_text_tokens = 128 + max_context_tokens = 32 + use_text_as_context = True + max_boxes = 16 + crop_size = 384 + refexp_field = 'sent' + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.merge_sources = True + config.dataset_configs.train.batch_before_merge = True + config.dataset_configs.train.sources = [ + get_coco_ref_train_source(tokenizer_path, max_text_tokens, max_context_tokens, max_boxes, crop_size, dataset_name='merge_coco_img_safe', refexp_field=refexp_field, use_text_as_context=use_text_as_context, mask_on=True), + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.merge_sources = False + config.dataset_configs.eval.sources = [ + get_coco_cap_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 1, crop_size), + get_ln_trace_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 1, crop_size, dataset_name='coco'), + get_coco_ref_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 16, crop_size, dataset_name='refcoco_unc', split='validation', refexp_field=refexp_field, use_text_as_context=use_text_as_context, mask_on=True), + get_vg_eval_source(tokenizer_path, max_text_tokens, max_context_tokens, 100, crop_size, dataset_name='vg', split='test', task='densecap'), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + # Dataset configs needed by the trainer. + config.dataset_configs.caption_configs = ml_collections.ConfigDict() + config.dataset_configs.caption_configs.test_annotation_path = common.COCO_CAP_TEST_ANNOTATION + config.dataset_configs.refer_configs = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_validation.test_annotation_path = common.REFCOCO_UNC_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcoco_unc_testA = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_testA.test_annotation_path = common.REFCOCO_UNC_TESTA_ANNOTATION + config.dataset_configs.refer_configs.refcoco_unc_testB = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcoco_unc_testB.test_annotation_path = common.REFCOCO_UNC_TESTB_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_validation.test_annotation_path = common.REFCOCOPLUS_UNC_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_testA = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_testA.test_annotation_path = common.REFCOCOPLUS_UNC_TESTA_ANNOTATION + config.dataset_configs.refer_configs.refcocoplus_unc_testB = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocoplus_unc_testB.test_annotation_path = common.REFCOCOPLUS_UNC_TESTB_ANNOTATION + config.dataset_configs.refer_configs.refcocog_umd_validation = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocog_umd_validation.test_annotation_path = common.REFCOCOG_UMD_VALIDATION_ANNOTATION + config.dataset_configs.refer_configs.refcocog_umd_test = ml_collections.ConfigDict() + config.dataset_configs.refer_configs.refcocog_umd_test.test_annotation_path = common.REFCOCOG_UMD_TEST_ANNOTATION + config.dataset_configs.densecap_configs = ml_collections.ConfigDict() + config.dataset_configs.densecap_configs.test_annotation_path = common.VG_DENSECAP_TEST_ANNOTATION + + config.dataset_configs.extra_meta_data = { + 'input_shape': [-1, crop_size, crop_size, 3], + 'prompt_box_shape': [-1, 1, 4], + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'pixel_llm' + + config.model.git_backbone_name = 'eva02_vit' + config.model.git_backbone_args = ml_collections.ConfigDict() + config.model.git_backbone_args.embed_dim = 1024 + config.model.git_backbone_args.depth = 24 + config.model.git_backbone_args.num_heads = 16 + config.model.git_backbone_args.patch_size = 14 + config.model.git_backbone_args.mlp_ratio = 4 * 2 / 3 + config.model.git_backbone_args.use_ln_post = True + config.model.git_backbone_args.drop_path_rate = 0.1 + config.model.git_preprocess_args = ml_collections.ConfigDict() + config.model.git_preprocess_args.image_size = (crop_size, crop_size) + + config.model.det_backbone_name = 'none' + + config.model.sam_backbone_name = 'sam_vit' + config.model.sam_backbone_args = ml_collections.ConfigDict() + config.model.sam_backbone_args.embed_dim = 1280 + config.model.sam_backbone_args.depth = 32 + config.model.sam_backbone_args.num_heads = 16 + config.model.sam_backbone_args.drop_path_rate = 0.5 + config.model.sam_backbone_args.window_block_indexes = (0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30) + config.model.sam_preprocess_args = ml_collections.ConfigDict() + config.model.sam_preprocess_args.image_size = (crop_size, crop_size) + + config.model.text_decoder_feature_key = 'git_visual_features+sam_visual_features' + # T5 setting + config.model.vocab_size = common.SP_VOCAB_SIZE + config.model.begin_token_id = 0 + config.model.end_token_id = 1 + config.model.text_decoder_name = 'flan_t5_xl' + config.model.text_decoder_args = ml_collections.ConfigDict() + config.model.text_decoder_args.dtype = 'float32' # 'bfloat16' + config.model.text_decoder_args.dropout_rate = 0.1 + config.model.text_decoder_args.encoder_lora_rank = 32 + config.model.text_decoder_args.decoder_lora_rank = 32 + config.model.text_decoder_args.encoder_lora_scale = 2 + config.model.text_decoder_args.decoder_lora_scale = 2 + config.model.text_decoder_args.encoder_lora_modules = 'q,v' + config.model.text_decoder_args.decoder_lora_modules = 'q,v' + + config.model.det_loss_weight = 1.0 + config.model.box_decoder_feature_key = 'git_visual_features+sam_visual_features' + # CenterNet2 parameters + config.model.box_decoder_name = 'centernet2_det_decoder' + config.model.box_decoder_args = ml_collections.ConfigDict() + config.model.box_decoder_args.num_classes = -1 + config.model.box_decoder_args.strides = (8, 16, 32, 64, 128) + config.model.box_decoder_args.roi_num_classes = 1 + config.model.box_decoder_args.hm_weight = 0.5 + config.model.box_decoder_args.reg_weight = 1.0 + config.model.box_decoder_args.score_thresh = 0.0001 + config.model.box_decoder_args.pre_nms_topk_train = 2000 + config.model.box_decoder_args.post_nms_topk_train = 1000 + config.model.box_decoder_args.pre_nms_topk_test = 1000 + config.model.box_decoder_args.post_nms_topk_test = 256 + config.model.box_decoder_args.iou_thresh = 0.9 + config.model.box_decoder_args.roi_matching_threshold = (0.6,) + config.model.box_decoder_args.roi_nms_threshold = 0.5 + config.model.box_decoder_args.roi_post_nms_num_detections = 32 + s = 2 + config.model.box_decoder_args.fpn_range = ( + (0, 80 / s), (64 / s, 160 / s), (128 / s, 320 / s), + (256 / s, 640 / s), (512 / s, 100000 / s)) + config.model.box_decoder_args.match_gt_thresh = 0.6 + + config.model.num_text_proposals = 16 + config.model.num_detections = config.model.box_decoder_args.roi_post_nms_num_detections + + config.model.prompt_drop_rate = 0.0 + config.model.prompt_use_box_rate = 1.0 + config.model.prompt_encoder_name = 'sam_prompt_encoder' + config.model.prompt_encoder_args = ml_collections.ConfigDict() + config.model.prompt_encoder_args.embed_dim = 256 + config.model.prompt_adapter_name = 'sam_prompt_adapter' + config.model.prompt_adapter_args = ml_collections.ConfigDict() + config.model.prompt_adapter_args.depth = 6 + config.model.prompt_adapter_args.transformer_dim = 512 + config.model.prompt_adapter_args.output_dim = 1024 + + config.model.visual_project_layers_name = 'linear' + config.model.visual_project_layers_args = ml_collections.ConfigDict() + config.model.visual_project_layers_args.emb_dim = 2048 + + config.model.mask_decoder_name = 'sam_mask_decoder' + config.model.mask_adapter_name = 'sam_mask_adapter' + + config.model.prompt_fuse_fn = 'sparse' + config.model.decode_method = 'beam' + config.model.decode_beam_size = 4 + config.model.decode_per_node_beam_size = 2 + # config.model.decode_method = 'greedy' + # config.model.decode_beam_size = 1 + config.model.max_caption_length = max_text_tokens + + config.model.point_predictor_name = 'mlp_point_predictor' + config.model.gt_box_points_per_side = -1 + config.model.point_loss_type = 'l1_nonzero' + config.model.use_points_as_det = True + config.model.point_output_ignore = '^end-1' + config.model.trace_point_output_ignore = 'begin,end,pad' + config.model.point_loss_weight = 0.1 + config.model.point_predictor_args = ml_collections.ConfigDict() + config.model.point_predictor_args.num_output_points = 2 + config.model.point_predictor_args.pre_norm = True + config.model.point_predictor_args.mlp_activation = 'gelu' + config.model.point_predictor_args.depth = 4 + + # config.eval_load_multi_weights = True + config.weights = '' + config.multi_weights_args = ml_collections.ConfigDict() + config.multi_weights_args.weights = ( + '/path/to/sam', + '/path/to/pixel_llm_bert_trace_ref_densecap_llava', + ) + config.load_pretrained_t5_weights = False + config.skip_wrong_shape = False + config.load_prefix = '' + # config.eval_only = True + + config.multi_weights_args.load_replace = ( + (('image_encoder', 'det_backbone'),), + (), + ) + config.force_init = True # load SAM mask decoder + + # Training. + config.batch_size = 128 + config.eval_batch_size = 64 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.frozen_params = ( + ('.*sam_backbone.*', 'sam_backbone'), + ('.*prompt_encoder.*', 'prompt_encoder'), + ('.*git_backbone.*', 'git_backbone'), + ('.*mask_decoder.*', 'mask_decoder'), + # ('.*t5_module.*', 'T5'), + # ('^(?!.*lora.*).*t5_module.*', 'T5'), + ('.*prompt_adapter.*', 'prompt_adapter'), + ('.*point_predictor.*', 'point_predictor'), + ('.*box_decoder.*', 'box_decoder'), + ('.*textual/.*', 'text decoder'), # shouldn't overlaping + ('.*visual_project_layers/.*', 'visual_project_layers'), + ) + + iter_factor = 1 + # learning rate and training schedule + config.num_training_steps = 30_000 * iter_factor + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = 250 * iter_factor + config.lr_configs.base_learning_rate = 1e-4 + + config.checkpoint_steps = 1000 * iter_factor + config.log_eval_steps = 2500 * iter_factor + + # Logging. + config.eval_meteor_spice = False + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + diff --git a/scenic/projects/pixel_llm/densecap_evaluator.py b/scenic/projects/pixel_llm/densecap_evaluator.py new file mode 100644 index 0000000000000000000000000000000000000000..04de7182a65e4607f8f6417ca02c3741a85d30e7 --- /dev/null +++ b/scenic/projects/pixel_llm/densecap_evaluator.py @@ -0,0 +1,269 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Evaluator for dense object caption. + +Modified from scenic.projects.baseline.detr.train_utils.DetrGlobalEvaluator, +but with a different underlying evaluator. +""" +import copy +import json +import logging + +from absl import logging +import numpy as np +from coco_caption.meteor import Meteor +import tensorflow as tf + + +def box_iou(boxes1, boxes2): + """Compute box IoU. Boxes in format [l, t, w, h]. + + Args: + boxes1: array in shape n x 4 + boxes2: array in shape m x 4 + Returns: + iou: array in shape n x m + union: array in shape n x m + """ + wh1 = boxes1[:, 2:] + wh2 = boxes2[:, 2:] + area1 = wh1[:, 0] * wh1[:, 1] # [n] + area2 = wh2[:, 0] * wh2[:, 1] # [m] + lt = np.maximum(boxes1[:, None, :2], boxes2[None, :, :2]) # [n, m, 2] + rb = np.minimum( + boxes1[:, None, 2:] + boxes1[:, None, :2], + boxes2[None, :, 2:] + boxes2[None, :, :2]) # [n, m, 2] + wh = (rb - lt).clip(0.0) # [n, m, 2] + intersection = wh[:, :, 0] * wh[:, :, 1] # [n, m] + union = area1[:, None] + area2[None, :] - intersection # [n, m] + iou = np.where(union > 0, intersection / union, 0) + return iou + + +class DensecapEval(object): + """Evaluator for dense caption. + + This class reproduce the official evaluation for dense caption: + https://github.com/jcjohnson/densecap/blob/maste*/eval/eval_utils.lua + """ + merge_gt_boxes_iou = 0.7 + iou_threshs = (0.3, 0.4, 0.5, 0.6, 0.7) + meteor_threshs = (-1, 0, 0.05, 0.1, 0.15, 0.2, 0.25) + meteor_jar_path = None + java_jre_path = None + + def __init__( + self, + annotations_loc, + merge_gt_boxes=True, + eval_meteor=True, + ignore_empty_string=True, + eval_in_720=False, + score_key='score', + meteor_jar_path=None, + java_jre_path=None, + ): + self.ignore_empty_string = ignore_empty_string + self.eval_meteor = eval_meteor + self.score_key = score_key + if isinstance(annotations_loc, str): + self.dataset = json.load(tf.io.gfile.GFile(annotations_loc, 'r')) + else: + self.dataset = annotations_loc + self.image_ids = set([x['id'] for x in self.dataset['images']]) + self.gts = {x: [] for x in self.image_ids} + self.meteor_jar_path = meteor_jar_path + self.java_jre_path = java_jre_path + + for x in self.dataset['annotations']: + self.gts[x['image_id']].append(x) + if merge_gt_boxes: + logging.info('Merging ground truth boxes...') + num_boxes = sum(len(x) for x in self.gts.values()) + logging.info('Num boxes before merging: %d', num_boxes) + for image_id in self.image_ids: + self.gts[image_id] = self.merge_gt_boxes( + self.gts[image_id], self.merge_gt_boxes_iou) + num_boxes = sum(len(x) for x in self.gts.values()) + self.num_boxes_after_merging = num_boxes + logging.info('Num boxes after merging: %d', num_boxes) + if eval_in_720: + for image_info in self.dataset['images']: + image_id = image_info['id'] + height, width = image_info['height'], image_info['width'] + for x in self.gts[image_id]: + x['bbox'] = (np.asarray(x['bbox'], dtype=np.float32) * 720 / max( + height, width)).tolist() + self.dts = {x: [] for x in self.image_ids} + + def compute_metrics(self, predictions): + """Evaluate metrics. + + Args: + predictions: list of dict. Each dict is a prediction of an *instance*, + with keys 'image_id', 'bbox', 'caption', 'score'. + + Returns: + results: a dict of string (metric name) to float. + """ + predictions = copy.deepcopy(predictions) + all_dts = {x['id']: [] for x in self.dataset['images']} + for x in predictions: + all_dts[x['image_id']].append(x) + records = [] + logging.info('Computing metrics...') + logging.info('ignore_empty_string %s', self.ignore_empty_string) + for image_id in self.image_ids: + dts = sorted(all_dts[image_id], key=lambda x: -x[self.score_key]) + gts = self.gts[image_id] + dt_boxes = np.asarray([x['bbox'] for x in dts]).reshape(-1, 4) + gt_boxes = np.asarray([x['bbox'] for x in gts]).reshape(-1, 4) + ious = box_iou(dt_boxes, gt_boxes) + gt_used = np.zeros(len(gts), dtype=bool) + for i, dt in enumerate(dts): + # Unlike COCO mAP evaluation, the official densecap evaluation does not + # find the best "available" gt, but directly returns the best IoU gt. + if len(ious[i]) > 0: # pylint: disable=g-explicit-length-test + max_iou = np.max(ious[i]) + matched_gt_ind = np.argmax(ious[i]) + matched_caps = gts[matched_gt_ind]['captions'] + else: + max_iou = -1 + matched_gt_ind = -1 + matched_caps = [''] + matched = max_iou > 0 and not gt_used[matched_gt_ind] + if matched: + gt_used[matched_gt_ind] = True + if self.ignore_empty_string and '' in matched_caps: + dt['caption'] = 'EMPTY' + matched_caps = ['EMPTY'] + record = { + 'matched': matched, + 'iou': max_iou, + 'candidate': [dt['caption']], + 'references': matched_caps, + 'image_id': image_id, + 'score': dt[self.score_key], + } + records.append(record) + + if not self.ignore_empty_string: + records = [x for x in records if x['candidate'][0] != 'EMPTY'] + num_pos = sum(len( + [xx for xx in x if '' not in xx['captions']] + ) for x in self.gts.values()) + else: + num_pos = sum(len(x) for x in self.gts.values()) + records = sorted(records, key=lambda x: -x['score']) + references = {i: x['references'] for i, x in enumerate(records)} + candidate = {i: x['candidate'] for i, x in enumerate(records)} + num_preds = len(records) + + if self.eval_meteor: + logging.info('Computing METEOR...') + meteor_evaluator = Meteor( + meteor_jar_path=self.meteor_jar_path, java_jre_path=self.java_jre_path + ) + _, meteor_scores = meteor_evaluator.compute_score(references, candidate) + meteor_threshs = self.meteor_threshs + else: + meteor_scores = np.ones(num_preds, dtype=np.float32) + meteor_threshs = (-1,) + + detection_results, results = {}, {} + logging.info('Accumulating results...') + for iou_thresh in self.iou_threshs: + for meteor_thresh in meteor_threshs: + tp = np.zeros(num_preds, dtype=np.float32) + fp = np.zeros(num_preds, dtype=np.float32) + for i, record in enumerate(records): + if not record['references']: + fp[i] = 1 + else: + if record['matched'] and (record['iou'] >= iou_thresh) and ( + meteor_scores[i] > meteor_thresh): + tp[i] = 1 + else: + fp[i] = 1 + tp = np.cumsum(tp) + fp = np.cumsum(fp) + rec = tp / num_pos + prec = tp / (tp + fp) + ap = 0 + for t in range(100): + mask = rec >= t / 100. + prec_masked = prec * mask + if len(prec_masked) > 0: # pylint: disable=g-explicit-length-test + p = prec_masked.max() + else: + p = 0. + ap += p + ap = ap / 100. + if meteor_thresh < 0: + detection_results[f'mAP_detection_iou{iou_thresh:.1f}'] = ap + else: + results[f'mAP_iou{iou_thresh:.1f}_meteor{meteor_thresh:.2f}'] = ap + if self.eval_meteor: + results['mAP'] = sum(results.values()) / len(results) + print('mAP', results['mAP']) + results['mAP_detection'] = sum( + detection_results.values()) / len(detection_results) + results.update(detection_results) + print('mAP_detection', results['mAP_detection']) + + return results + + @staticmethod + def merge_gt_boxes(gts, iou_thresh): + """VG ground truth are overlaping. We need to merge them before evaluating. + + Original code: + github.com/jcjohnson/densecap/blob/maste*/densecap/box_utils.lua#L590 + github.com/jcjohnson/densecap/blob/maste*/eval/eval_utils.lua#L105 + + Args: + gts: gts of a single image. list of dicts, each with the following keys: + 'bbox': list of 4 floats in order (l, t, w, h) + 'caption': a string. + ... + iou_thresh: float + Returns: + new_gts: list of dicts. Might have different length from the input. + 'bbox': list of 4 floats in order (l, t, w, h) + 'captions': list of strings. + """ + new_gts = [] + if not gts: + return new_gts + gt_boxes = np.asarray([x['bbox'] for x in gts], dtype=np.float32) + ious = box_iou(gt_boxes, gt_boxes) # N x N + + while True: + can_merge = ious >= iou_thresh + # Find the largest cluster and merge it. + num_merges = can_merge.sum(axis=1) # N + ind = np.argmax(num_merges) # int + if num_merges[ind] == 0: + break + merge_inds = np.nonzero(can_merge[ind])[0] + new_box = gt_boxes[merge_inds].mean(axis=0) + all_captions = [gts[x]['caption'].replace('\n', '') for x in merge_inds] + new_gt = {'bbox': new_box, 'captions': all_captions} + if 'track_id' in gts[merge_inds[0]]: + new_gt['track_id'] = gts[merge_inds[0]]['track_id'] + new_gts.append(new_gt) + ious[merge_inds, :] = 0. + ious[:, merge_inds] = 0. + return new_gts diff --git a/scenic/projects/pixel_llm/evaluate.py b/scenic/projects/pixel_llm/evaluate.py new file mode 100644 index 0000000000000000000000000000000000000000..fb1b7157b1b0c7e194bad21f1e2e3d76f2e27132 --- /dev/null +++ b/scenic/projects/pixel_llm/evaluate.py @@ -0,0 +1,127 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Evaluation script for the PixelLLM. + +This file is modified from scenic CenterNet code at +https://github.com/google-research/scenic/blob/main/scenic/projects/baselines/ +centernet/evaluate.py +""" + +import functools +import time +from typing import Any, Optional + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from flax import jax_utils +from flax.core import frozen_dict +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils + + +def inference_on_all_datasets( + model: Any, + train_state: train_utils.TrainState, + dataset: dataset_utils.Dataset, + writer: metric_writers.MetricWriter, + eval_batch_size: int = 1, + is_host: bool = False, + save_dir: str = '', + step: Optional[int] = None, + config: ml_collections.ConfigDict = ml_collections.ConfigDict(), + ) -> Any: + """The main evaluation loop. Run evaluation on the whole validation set. + + Args: + model: Scenic basemodel (an instance of nn.Module). + train_state: train_state that contains the model parameters. + dataset: The dataset that has valid_iter and meta_data. + writer: metric_writers.MetricWriter + eval_batch_size: integer. Batch size per-device in evaluation. + is_host: bool: whether its the host machine. During multi-machine training, + we only hold the evaluating data in one of the machines. The machine with + `jax.process_index() == 0` sets `is_host` to True and will gather data + from other machines and do the evaluation. Other machines set `is_host` as + False. + save_dir: string: where to save the json prediction + step: Optional integer of the training step. The step is appended to the + serialised results if provided. + config: config dict + + Returns: + evaluation results. + """ + eval_summary = None + assert isinstance( + dataset.valid_iter, dict + ), 'Only dict valid_iter are supported.' + for ds_name, ds_iter in dataset.valid_iter.items(): + if ds_name in [ + 'refcoco_unc_validation', + 'refcoco_unc_testA', + 'refcoco_unc_testB', + 'refcocog_umd_validation', + 'refcocog_umd_test', + 'refcocoplus_unc_validation', + 'refcocoplus_unc_testA', + 'refcocoplus_unc_testB', + ]: + eval_func = inference_on_dataset_refer + elif ds_name in ['vg_densecap_test']: + eval_func = inference_on_dataset_densecap + elif ds_name in ['vg_loca_test', 'refcocog_umd_loca_validation']: + eval_func = inference_on_dataset_loca + elif ds_name in ['ln_coco_trace_val']: + eval_func = inference_on_dataset_trace + elif ds_name in ['coco_captions_val']: + eval_func = inference_on_dataset_caption + else: + raise ValueError('Unsupported dataset name: %s' % ds_name) + meta_data = dataset.meta_data.copy() + meta_data['num_eval_examples'] = dataset.meta_data['num_eval_examples'][ + ds_name + ] + eval_dataset = dataset_utils.Dataset( + valid_iter=ds_iter, meta_data=meta_data + ) + start_time = time.time() + eval_results, eval_metrics = eval_func( + model, + train_state, + eval_dataset, + dataset_name=ds_name, + eval_batch_size=eval_batch_size, + is_host=is_host, + save_dir=save_dir, + step=step, + config=config, + ) + eval_summary = train_utils.log_eval_summary( + step=step if step is not None else 0, + eval_metrics=eval_metrics, + extra_eval_summary=eval_results, + prefix=f'{ds_name}_valid', + writer=writer, + ) + duration = time.time() - start_time + logging.info('Done with %s evaluation: %.4f sec.', ds_name, duration) + + return eval_summary diff --git a/scenic/projects/pixel_llm/evaluators.py b/scenic/projects/pixel_llm/evaluators.py new file mode 100644 index 0000000000000000000000000000000000000000..672b8c636c00e0eebdee0f657a55d758cde6dac7 --- /dev/null +++ b/scenic/projects/pixel_llm/evaluators.py @@ -0,0 +1,999 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Evaluation utils for PixelLLM.""" +# pylint: disable=g-explicit-length-test + +import json +import os +from typing import Any, Dict, Optional, List + +from absl import logging +from coco_caption.coco import COCO as COCOCaption +import cv2 +# pylint: disable=g-import-not-at-top +try: + from coco_caption.eval import COCOEvalCap + from coco_caption.bleu import Bleu + from coco_caption.cider import Cider + from coco_caption.meteor import Meteor + from coco_caption.rouge import Rouge + from coco_caption.upp_tokenizer import tokenize +except ImportError: + COCOEvalCap = None + Bleu = None + Cider = None + Meteor = None + Rouge = None + tokenize = None +import numpy as np +from pycocotools import mask as mask_api +from scenic.model_lib.base_models import box_utils +from scenic.projects.pixel_llm import densecap_evaluator + +# Evaluator without METEOR and SPICE +# This import raises an error on colab. +# pylint: disable=g-import-not-at-top +try: + from pix2seq.metrics.coco_caption_eval import COCOEvalCap as SimpleCOCOEvalCap +except ImportError: + SimpleCOCOEvalCap = None + +import tensorflow as tf + + +class PointEvaluator(object): + """Class that evaluate the point prediction.""" + + def __init__( + self, dataset_name: Optional[str] = '', step: Optional[int] = None + ): + del dataset_name, step + self.results = [] + self._num_examples_added = 0 + + def add_example(self, prediction: Any, target: Dict[str, np.ndarray]): + """Compute MSE.""" + + self._num_examples_added += 1 + # [num_caps, max_text_tokens, num_gt_points, 2] + gt_coords = target['points'] + # [num_caps, max_text_tokens] + valid_token_mask = target.get( + 'token_padding_mask', target['text_tokens'] > 0 + ) + valid_token_mask *= gt_coords.max(axis=(-2, -1)) > 0 + + # [num_caps, max_text_tokens, 2] + # or [num_caps, max_text_tokens, num_pred_points, 2] + pred_coords = prediction['point_coords'] + if pred_coords.ndim == 3: + # [num_caps, max_text_tokens, 1, 2] + pred_coords = pred_coords.reshape(gt_coords.shape[:-2] + (1, 2)) + + # normalize coords + height, width = target['size'] + gt_coords = gt_coords / np.array([width, height]) + pred_coords = pred_coords / np.array([width, height]) + + # [num_caps, max_tokens, num_pred_points, num_gt_points] + dist = np.mean( + np.abs( + np.expand_dims(pred_coords, axis=3) + - np.expand_dims(gt_coords, axis=2) + ), + axis=-1, + ) + # only count the dist to the closest GT + # [num_caps, max_tokens, num_pred_points] + dist = np.min(dist, axis=-1).mean(axis=-1) + + # [num_caps, max_tokens] + dist *= valid_token_mask + error = dist.sum() / (valid_token_mask.sum() + 1e-8) + + self.results.append(error) + + def __len__(self): + return self._num_examples_added + + def clear(self): + self.results = [] + self._num_examples_added = 0 + + def compute_metrics( + self, + save_dir: str, + clear_annotations: Optional[bool] = True, + skip_evaluate=False, + ): + del save_dir, skip_evaluate + result = np.array(self.results).mean() + if clear_annotations: + self.clear() + return {'point_l1': result} + + +class CaptionEvaluator(object): + """Class that feeds model outputs to COCO caption evaluation api.""" + + def __init__( + self, annotations_loc, eval_meteor_spice=False, step: Optional[int] = None + ): + self.annotations_loc = annotations_loc + logging.info('Initializing evaluator.') + if self.annotations_loc: + logging.info('Loading annotations from %s.', self.annotations_loc) + self.coco = COCOCaption(self.annotations_loc) + self.annotations = { + 'images': [], + 'annotations': [], + 'type': 'captions', + 'info': {}, + 'licenses': [], + 'categories': [{'id': 1, 'name': 'object'}], + } + self.predictions = [] + self.pred_image_set = set() + self.gt_image_set = set() + self._num_examples_added = 0 + self._num_captions_added = 0 + self.eval_meteor_spice = eval_meteor_spice + self.step = step + + def add_example(self, prediction: Any, target: Dict[str, np.ndarray]): + """Add a single example to the evaluator. + + Args: + prediction: Model prediction tuple of 3 arrays: boxes, scores, classes. + 'boxes' is in shape of `[num_objects, 4]` and 'pred_boxes', 'classes' + are botoh in shape of `[num_objects, num_classes]`. Box coordinates are + absolute values in the input image coordinates. We need to scale them + back to the original image coordinates using information in target. + target: Target dictionary with keys and 'image/id'. + """ + if isinstance(prediction, dict): + pred_caption = prediction['caption'] + else: + pred_caption = prediction + self._num_examples_added += 1 + id_key = 'image_id' + empty_gt = False + if self.annotations_loc: + # we will use image_id that matches the annotation file + img_id = int(target['image/id']) + else: + # we will create image_id on the fly + img_id = self._num_examples_added + if img_id not in self.gt_image_set: + # avoid adding the same image twice due to repeated sampling. + self.annotations['images'].append({'id': img_id}) + for x in target['captions']: + # NOTE: if there is no gt but pred for some images, coco raise error + # we use `empty_gt` to mark these kind of images and ignore them + if x: # remove empty captions from padding. + self._num_captions_added += 1 + self.annotations['annotations'].append( + {'id': self._num_captions_added, id_key: img_id, 'caption': x} + ) + # NOTE: this marks even img_id will be added into gt_image_set, there + # is no gt for it, since it's filtered out above + empty_gt = sum(len(t) for t in target['captions']) == 0 + self.gt_image_set.add(img_id) + single_prediction = { + id_key: img_id, + 'caption': pred_caption, + } + if img_id not in self.pred_image_set: + if empty_gt: + logging.warn('Image %s does not have any ground truth caption', img_id) + else: + self.predictions.append(single_prediction) + else: + logging.warn('Duplicate image %s not being added again', img_id) + self.pred_image_set.add(img_id) + + def compute_metrics( + self, + save_dir: str, + clear_annotations: Optional[bool] = True, + skip_evaluate=False, + ): + """Computes the metrics for all added predictions.""" + json_file_path = self.write_pred_annotations_to_file(save_dir) + if skip_evaluate: + return {} + if not self.annotations_loc: + gt_file_path = self.write_pred_annotations_to_file( + save_dir, is_groundtruth=True + ) + self.coco = COCOCaption(gt_file_path) + coco_res = self.coco.loadRes(json_file_path) + evaluator_class = ( + COCOEvalCap if (self.eval_meteor_spice) else SimpleCOCOEvalCap + ) + coco_eval = evaluator_class(self.coco, coco_res) + coco_eval.params['image_id'] = coco_res.getImgIds() + coco_eval.evaluate() + results = coco_eval.eval + if clear_annotations: + self.clear() + return results + + def clear(self): + self.predictions = [] + self.pred_image_set = set() + self._num_examples_added = 0 + self._num_captions_added = 0 + + def __len__(self): + return self._num_examples_added + + def write_pred_annotations_to_file( + self, path: str, is_groundtruth: bool = False + ): + """Writes predictions to file in JSON format. + + Args: + path: Path to write the prediction annotation JSON file. + is_groundtruth: bool; if the file is ground truth or prediction. + + Returns: + json_file_path: path to the saved json + """ + if not tf.io.gfile.exists(path): + tf.io.gfile.makedirs(path) + fname_app = 'predictions' if not is_groundtruth else 'annotations' + if self.step: + json_file_name = f'caption_{fname_app}_{self.step}.json' + else: + json_file_name = f'caption_{fname_app}.json' + json_file_path = os.path.join(path, json_file_name) + logging.info('Saving predictions to %s.', json_file_path) + + def _convert_to_serializable(obj): + if isinstance(obj, np.ndarray): + return obj.tolist() + elif isinstance(obj, np.float32): + return float(obj) + else: + raise TypeError(f'Unserializable object {obj} of type {type(obj)}') + + with tf.io.gfile.GFile(json_file_path, 'w') as f: + f.write( + json.dumps( + self.predictions if not is_groundtruth else self.annotations, + default=_convert_to_serializable, + ) + ) + logging.info('Predicted annotations are stored in %s.', json_file_path) + return json_file_path + + +def rescale_and_convert_boxes_to_xywh(boxes, input_size, orig_size): + """Rescale boxes, and convert format to xywh.""" + h, w = orig_size + input_h, input_w = np.asarray(input_size) + scale_factor = np.array([w, h, w, h]) / np.array( + [input_w, input_h, input_w, input_h]) + boxes = boxes * scale_factor[np.newaxis, :] + boxes = np.maximum(boxes, 0) + boxes[:, [0, 2]] = np.minimum(boxes[:, [0, 2]], w) + boxes[:, [1, 3]] = np.minimum(boxes[:, [1, 3]], h) + boxes[:, 2] -= boxes[:, 0] + boxes[:, 3] -= boxes[:, 1] + + return boxes + + +def rescale_and_encode_masks( + masks, input_size, padded_size, orig_size, mask_threshold +): + """Rescale masks, and encode into COCO format.""" + input_h, input_w = input_size + padded_h, padded_w = padded_size + h, w = orig_size + out_masks = [] + for mask in masks: + mask_h, mask_w = mask.shape + mask_input_h = int(input_h * (mask_h / padded_h)) + mask_input_w = int(input_w * (mask_w / padded_w)) + + mask = ( + cv2.resize( + mask[:mask_input_h, :mask_input_w], + (w, h), + interpolation=cv2.INTER_LINEAR, + ) + > mask_threshold + ) + out_masks.append(mask_api.encode( + np.asfortranarray(mask) + )) + + return out_masks + + +def polygons_to_bitmask( + polygons: List[np.ndarray], height: int, width: int +) -> np.ndarray: + """Converts polygons to bitmask. + + Reference: + https://github.com/facebookresearch/detectron2/blob/main/detectron2/structures/masks.py#L22 + + Args: + polygons(list[ndarray]): each array has shape (Nx2,) + height(int): + width(int): + + Returns: + ndarray: a bool mask of shape (height, width) + """ + if not len(polygons): + # COCOAPI does not support empty polygons + return np.zeros((height, width)).astype(bool) + rles = mask_api.frPyObjects(polygons, height, width) + rle = mask_api.merge(rles) + return mask_api.decode(rle).astype(bool) + + +def decode_to_mask(segm, image_size): + """Converts segmentation to mask.""" + if isinstance(segm, list): + # polygon + mask = polygons_to_bitmask(segm, *image_size) + elif isinstance(segm, dict): + # COCO RLE + mask = mask_api.decode(segm) + elif isinstance(segm, np.ndarray): + assert ( + segm.ndim == 2 + ), 'Expect segmentation of 2 dimensions, got {}.'.format(segm.ndim) + # mask array + mask = segm + else: + raise ValueError( + "Cannot convert segmentation of type '{}' to BitMasks!" + 'Supported types are: polygons as list[list[float] or ndarray],' + ' COCO-style RLE as a dict, or a binary segmentation mask ' + ' in a 2D numpy array of shape HxW.'.format(type(segm)) + ) + return mask + + +def mask_to_box(mask): + """Converts mask to box.""" + boxes = np.zeros((4,), dtype=np.float32) + x_any = np.any(mask, axis=0) + y_any = np.any(mask, axis=1) + x = np.where(x_any)[0] + y = np.where(y_any)[0] + if len(x) and len(y): + boxes = np.array([x[0], y[0], x[-1] + 1, y[-1] + 1], dtype=np.float32) + + return boxes + + +class RefCocoEvaluator(object): + """Class that evaluates the RefCOCO. + + Reference: https://github.com/ashkamath/mdetr/blob/main/datasets/refexp.py + + """ + + def __init__( + self, + dataset_name: str, + annotations_loc: str, + k=(1,), + iou_threshold=0.5, + step: Optional[int] = None, + ): + self.dataset_name = dataset_name + self.annotations_loc = annotations_loc + if self.annotations_loc: + logging.info('Loading refer annotations from %s.', self.annotations_loc) + self.annotations = json.load(tf.io.gfile.GFile(self.annotations_loc)) + else: + self.annotations = { + 'images': [], + 'annotations': [], + 'type': 'refer', + 'info': {}, + 'licenses': [], + 'categories': [{'id': 1, 'name': 'object'}], + } + self.predictions = [] + self.pred_image_set = set() + self.gt_image_set = set() + + self.k = k + self.iou_threshold = iou_threshold + self.mask_threshold = 0. + # self.results = [] + self._num_examples_added = 0 + self.step = step + + def add_example(self, prediction: Any, target: Dict[str, np.ndarray]): + """Compute Precision.""" + boxes = prediction['detection_boxes'] + masks = prediction.get('detection_masks', None) + boxes = rescale_and_convert_boxes_to_xywh( + boxes, target['size'], target['orig_size'] + ) + boxes = np.asarray(boxes).tolist() + if masks is not None: + masks = rescale_and_encode_masks( + masks, + target['size'], + target['padded_size'], + target['orig_size'], + self.mask_threshold, + ) + img_id = int(target['image/id']) + + if img_id in self.pred_image_set: + logging.warn('Duplicate image %s not being added again', img_id) + return + self.pred_image_set.add(img_id) + + for i in range(len(boxes)): + refexp_id = int(target['refexp_ids'][i]) + # [4], in XYXY abs format + pred_box = boxes[i] + caption = target['captions'][i] + if not refexp_id > 0: + continue + + self._num_examples_added += 1 + + single_pred = { + 'id': refexp_id, + 'image_id': img_id, + 'bbox': pred_box, + 'refexp': caption, + } + if masks is not None: + single_pred['segmentation'] = masks[i] + self.predictions.append(single_pred) + + # create annotation json + if not self.annotations_loc and img_id not in self.gt_image_set: + # avoid adding the same image twice due to repeated sampling. + self.annotations['images'].append({'id': img_id}) + gt_boxes = target['boxes'] + gt_boxes = rescale_and_convert_boxes_to_xywh( + gt_boxes, target['size'], target['orig_size'] + ) + gt_boxes = np.asarray(gt_boxes).tolist() + for i in range(len(gt_boxes)): + gt_box = gt_boxes[i] + refexp_id = int(target['refexp_ids'][i]) + if not refexp_id > 0: + continue + + caption = target['captions'][i] + self.annotations['annotations'].append({ + 'id': refexp_id, + 'image_id': img_id, + 'bbox': gt_box, + 'refexp': caption, + }) + self.gt_image_set.add(img_id) + + def __len__(self): + return self._num_examples_added + + def clear(self): + self.predictions = [] + self._num_examples_added = 0 + self.pred_image_set = set() + self.gt_image_set = set() + + def write_pred_annotations_to_file( + self, path: str, is_groundtruth: bool = False + ): + """Writes predictions to file in JSON format. + + Args: + path: Path to write the prediction annotation JSON file. + is_groundtruth: bool; if the file is ground truth or prediction. + + Returns: + json_file_path: path to the saved json + """ + if not tf.io.gfile.exists(path): + tf.io.gfile.makedirs(path) + fname_app = 'predictions' if not is_groundtruth else 'annotations' + if self.step: + json_file_name = f'{self.dataset_name}_{fname_app}_{self.step}.json' + else: + json_file_name = f'{self.dataset_name}_{fname_app}.json' + json_file_path = os.path.join(path, json_file_name) + logging.info('Saving predictions to %s.', json_file_path) + + def _convert_to_serializable(obj): + if isinstance(obj, np.ndarray): + return obj.tolist() + elif isinstance(obj, np.float32): + return float(obj) + else: + raise TypeError(f'Unserializable object {obj} of type {type(obj)}') + + with tf.io.gfile.GFile(json_file_path, 'w') as f: + f.write( + json.dumps( + self.predictions if not is_groundtruth else self.annotations, + default=_convert_to_serializable, + ) + ) + logging.info('Predicted annotations are stored in %s.', json_file_path) + return json_file_path + + def compute_metrics( + self, + save_dir: str, + clear_annotations: Optional[bool] = True, + skip_evaluate=False, + ) -> Dict[str, Any]: + """Computes the metrics for all added predictions.""" + self.write_pred_annotations_to_file(save_dir) + if not self.annotations_loc: + self.write_pred_annotations_to_file(save_dir, is_groundtruth=True) + if skip_evaluate: + return {} + + pred_map = {d['id']: idx for idx, d in enumerate(self.predictions)} + # NOTE(jiaruixu): handle coco style annotation + if 'refexp_id' in self.annotations['annotations'][0]: + gt_anno_map = {} + for idx, d in enumerate(self.annotations['annotations']): + refexp_ids = d['refexp_id'] + for refexp_id in refexp_ids: + gt_anno_map[refexp_id] = idx + else: + gt_anno_map = { + d['id']: idx for idx, d in enumerate(self.annotations['annotations']) + } + gt_image_map = { + d['id']: idx for idx, d in enumerate(self.annotations['images']) + } + eval_seg = ( + 'segmentation' in self.predictions[0] + and 'segmentation' in self.annotations['annotations'][0] + ) + box_tp_list = [] + + seg_inter_list = [] + seg_union_list = [] + seg_box_tp_list = [] + + for refexp_id in pred_map: + pred = self.predictions[pred_map[refexp_id]] + gt_anno = self.annotations['annotations'][gt_anno_map[refexp_id]] + # single box + pred_box = np.array(pred['bbox']).reshape(-1, 4) + gt_box = np.array(gt_anno['bbox']).reshape(-1, 4) + pred_box[:, 2:4] += pred_box[:, :2] + gt_box[:, 2:4] += gt_box[:, :2] + + box_iou, _ = box_utils.box_iou(pred_box, gt_box, np_backbone=np) + for k in self.k: + box_tp_list.append(max(box_iou[:k]) > self.iou_threshold) + if eval_seg: + gt_image = self.annotations['images'][gt_image_map[gt_anno['image_id']]] + image_size = (gt_image['height'], gt_image['width']) + pred_mask = decode_to_mask(pred['segmentation'], image_size) + gt_mask = decode_to_mask(gt_anno['segmentation'], image_size) + cur_inter = (pred_mask & gt_mask).sum() + cur_union = (pred_mask | gt_mask).sum() + seg_inter_list.append(cur_inter) + seg_union_list.append(cur_union) + + pred_seg_box = mask_to_box(pred_mask).reshape(-1, 4) + + seg_box_iou, _ = box_utils.box_iou(pred_seg_box, gt_box, np_backbone=np) + for k in self.k: + seg_box_tp_list.append(max(seg_box_iou[:k]) > self.iou_threshold) + + # compute mean over all refexp + box_tp = ( + np.array(box_tp_list).reshape(len(pred_map), len(self.k)).mean(axis=0) + ) + metrics = { + f'box_Precision@{k}': result for k, result in zip(self.k, box_tp) + } + + if eval_seg: + # compute mean over all refexp + seg_box_tp = ( + np.array(seg_box_tp_list) + .reshape(len(pred_map), len(self.k)) + .mean(axis=0) + ) + + metrics.update( + { + f'seg_box_Precision@{k}': result + for k, result in zip(self.k, seg_box_tp) + } + ) + + seg_inter_list = np.array(seg_inter_list) + seg_union_list = np.array(seg_union_list) + + metrics['seg_cIoU'] = seg_inter_list.mean() / ( + seg_union_list.mean() + 1e-5 + ) + metrics['seg_gIoU'] = (seg_inter_list / (seg_union_list + 1e-5)).mean() + metrics['seg_AP'] = ( + (seg_inter_list / (seg_union_list + 1e-5)) > self.iou_threshold + ).mean() + + if clear_annotations: + self.clear() + return metrics + + +class DensecapEvaluator(object): + """DensecapEvaluator wrapper.""" + + def __init__(self, dataset_name: str, annotations_loc, eval_meteor=True, + ignore_empty_string=True, + step: Optional[int] = None): + self.dataset_name = dataset_name + self.step = step + self.evaluator = densecap_evaluator.DensecapEval( + annotations_loc, eval_meteor=eval_meteor, + ignore_empty_string=ignore_empty_string) + self.predictions = [] + self._num_examples_added = 0 + self.pred_image_set = set() + + def add_example(self, prediction: Any, target: Dict[str, np.ndarray]): + """Add prediction of a single image to the evaluator. + + Args: + prediction: Model prediction tuple of 4 arrays: boxes, scores, classes, + captions. 'boxes' is in shape of `[num_objects, 4]` and 'pred_boxes', + 'classes' are botoh in shape of `[num_objects, num_classes]`. 'captions' + is a list of strings. Box coordinates are absolute values in the input + image coordinates. We need to scale them back to the original image + coordinates using information in target. + target: Target dictionary with keys 'orig_size', 'size', and 'image/id'. + """ + boxes = prediction['detection_boxes'] + scores = prediction['detection_scores'] + captions = prediction['captions'] + + boxes = rescale_and_convert_boxes_to_xywh( + boxes, target['size'], target['orig_size'] + ) + boxes = np.asarray(boxes).tolist() + img_id = int(target['image/id']) + + if img_id in self.pred_image_set: + logging.warn('Duplicate image %s not being added again', img_id) + return + self.pred_image_set.add(img_id) + + for bbox, score, caption in zip( + boxes, scores, captions): + single_classification = { + 'image_id': img_id, + 'category_id': 0, + 'bbox': bbox, + 'score': score, + 'caption': caption, + } + self.predictions.append(single_classification) + self._num_examples_added += 1 + +# pytype: disable=signature-mismatch + def compute_metrics( + self, + save_dir: str, + clear_annotations: Optional[bool] = True, + skip_evaluate=False, + ) -> Dict[str, Any]: +# pytype: enable=signature-mismatch + """Computes the metrics for all added predictions.""" + if self.step: + fname_app = f'{self.dataset_name}_{self.step}.json' + else: + fname_app = f'{self.dataset_name}.json' + self.write_pred_annotations_to_file(save_dir, fname_app=fname_app) + if skip_evaluate: + return {} + results = self.evaluator.compute_metrics(self.predictions) + if clear_annotations: + self.clear() + return results + + def clear(self): + self.predictions = [] + self._num_examples_added = 0 + self.pred_image_set = set() + + def __len__(self): + return self._num_examples_added + + def write_pred_annotations_to_file(self, + path: str, + fname_app: Optional[str] = None): + """Writes predictions to file in JSON format. + + Args: + path: Path to write the prediction annotation JSON file. + fname_app: Optional string to append to the file name. + """ + if not tf.io.gfile.exists(path): + tf.io.gfile.makedirs(path) + json_file_name = f"predictions{fname_app if fname_app else ''}.json" + json_file_path = os.path.join(path, json_file_name) + + def _convert_to_serializable(obj): + if isinstance(obj, np.ndarray): + return obj.tolist() + elif isinstance(obj, np.float32): + return float(obj) + else: + raise TypeError(f'Unserializable object {obj} of type {type(obj)}') + + with tf.io.gfile.GFile(json_file_path, 'w') as f: + f.write( + json.dumps( + self.predictions, + default=_convert_to_serializable)) + logging.info('Predicted annotations are stored in %s.', json_file_path) + + +class LocaEvaluator(object): + """Location-conditioned Caption wrapper.""" + merge_gt_boxes_iou = 0.7 + + def __init__(self, dataset_name: str, + step: Optional[int] = None, + merge_gt_boxes: Optional[bool] = False, + meteor_jar_path: Optional[str] = None, + java_jre_path: Optional[str] = None): + self.dataset_name = dataset_name + self.merge_gt_boxes = merge_gt_boxes + self.step = step + self.predictions = [] + self._num_examples_added = 0 + self._num_captions_added = 0 + self.pred_image_set = set() + self.meteor_jar_path = meteor_jar_path + self.java_jre_path = java_jre_path + self.annotations = { + 'images': [], + 'annotations': [], + 'type': 'captions', + 'info': {}, + 'licenses': [], + 'categories': [{'id': 1, 'name': 'object'}], + } + + @staticmethod + def merge_gt_anno(gts, iou_thresh, is_gt=True): + """VG ground truth are overlaping. We need to merge them before evaluating. + + Original code: + github.com/jcjohnson/densecap/blob/maste*/densecap/box_utils.lua#L590 + github.com/jcjohnson/densecap/blob/maste*/eval/eval_utils.lua#L105 + + Args: + gts: gts of a single image. list of dicts, each with the following keys: + 'bbox': list of 4 floats in order (l, t, w, h) + 'caption': a string. + ... + iou_thresh: float + is_gt: bool + Returns: + new_gts: list of dicts. Might have different length from the input. + 'bbox': list of 4 floats in order (l, t, w, h) + 'captions': list of strings. + """ + new_gts = [] + if not gts: + return new_gts + gt_boxes = np.asarray([x['bbox'] for x in gts], dtype=np.float32) + ious, _ = box_utils.box_iou(gt_boxes, gt_boxes, np_backbone=np) # N x N + + while True: + can_merge = ious >= iou_thresh + # Find the largest cluster and merge it. + num_merges = can_merge.sum(axis=1) # N + ind = np.argmax(num_merges) # int + if num_merges[ind] == 0: + break + merge_inds = np.nonzero(can_merge[ind])[0] + new_box = gt_boxes[merge_inds].mean(axis=0) + all_captions = [gts[x]['caption'].replace('\n', '') for x in merge_inds] + for merge_ind in merge_inds: + if is_gt: + new_gt = { + 'bbox': new_box, + 'captions': all_captions, + 'id': gts[merge_ind]['id'], + } + else: + new_gt = { + 'bbox': new_box, + 'caption': gts[merge_ind]['caption'], + 'id': gts[merge_ind]['id'], + } + new_gts.append(new_gt) + ious[merge_inds, :] = 0.0 + ious[:, merge_inds] = 0.0 + return new_gts + + def add_example(self, prediction: Any, target: Dict[str, np.ndarray]): + """Add prediction of a single image to the evaluator. + + Args: + prediction: Model prediction tuple of 4 arrays: boxes, scores, classes, + captions. 'boxes' is in shape of `[num_objects, 4]` and 'pred_boxes', + 'classes' are botoh in shape of `[num_objects, num_classes]`. 'captions' + is a list of strings. Box coordinates are absolute values in the input + image coordinates. We need to scale them back to the original image + coordinates using information in target. + target: Target dictionary with keys 'orig_size', 'size', and 'image/id'. + """ + captions = prediction['captions'] + boxes = prediction['detection_boxes'] + gt_captions = target['captions'] + gt_boxes = target['boxes'] + + boxes = rescale_and_convert_boxes_to_xywh( + boxes, target['size'], target['orig_size'] + ) + boxes = np.asarray(boxes).tolist() + gt_boxes = rescale_and_convert_boxes_to_xywh( + gt_boxes, target['size'], target['orig_size'] + ) + gt_boxes = np.asarray(gt_boxes).tolist() + assert len(boxes) == len(captions) + assert len(gt_boxes) == len(boxes) + assert len(gt_captions) == len(captions) + + img_id = int(target['image/id']) + + if img_id in self.pred_image_set: + logging.warn('Duplicate image %s not being added again', img_id) + return + self.pred_image_set.add(img_id) + self.annotations['images'].append({'id': self._num_captions_added}) + + cur_preds = [] + cur_annos = [] + for caption, box, gt_caption, gt_box in zip( + captions, boxes, gt_captions, gt_boxes + ): + if max(gt_box) <= 0: + continue + single_classification = { + 'image_id': img_id, + 'id': self._num_captions_added, + 'category_id': 0, + 'bbox': box, + 'caption': caption, + } + single_annotation = { + 'image_id': img_id, + 'id': self._num_captions_added, + 'category_id': 0, + 'bbox': gt_box, + 'caption': gt_caption, + } + # self.annotations['annotations'].append(single_annotation) + # self.predictions.append(single_classification) + cur_preds.append(single_classification) + cur_annos.append(single_annotation) + self._num_captions_added += 1 + if self.merge_gt_boxes: + cur_preds = self.merge_gt_anno( + cur_preds, self.merge_gt_boxes_iou, is_gt=False + ) + cur_annos = self.merge_gt_anno(cur_annos, self.merge_gt_boxes_iou) + self.predictions.extend(cur_preds) + self.annotations['annotations'].extend(cur_annos) + self._num_examples_added += 1 + + # pytype: disable=signature-mismatch + def compute_metrics( + self, + save_dir: str, + clear_annotations: Optional[bool] = True, + skip_evaluate=False, + ) -> Dict[str, Any]: + # pytype: enable=signature-mismatch + """Computes the metrics for all added predictions.""" + if self.step: + fname_app = f'{self.dataset_name}_{self.step}.json' + else: + fname_app = f'{self.dataset_name}.json' + self.write_pred_annotations_to_file(save_dir, fname_app=fname_app) + if skip_evaluate: + return {} + res = {} + gts = {} + for pred in self.predictions: + if 'captions' in pred: + res[pred['id']] = [{'caption': c} for c in pred['captions']] + else: + res[pred['id']] = [pred] + for anno in self.annotations['annotations']: + if 'captions' in anno: + gts[anno['id']] = [{'caption': c} for c in anno['captions']] + else: + gts[anno['id']] = [anno] + + res = tokenize(res) + gts = tokenize(gts) + + scorers = [ + (Rouge(), 'ROUGE_L'), + (Cider(), 'CIDEr'), + (Bleu(), 'BLEU-4'), + (Meteor(), 'Meteor'), + ] + results = {} + for scorer, method in scorers: + logging.info('computing %s score...', scorer.method()) + score, _ = scorer.compute_score(gts, res) + results[method] = score + if clear_annotations: + self.clear() + return results + + def clear(self): + self.predictions = [] + self._num_examples_added = 0 + self._num_captions_added = 0 + self.pred_image_set = set() + + def __len__(self): + return self._num_examples_added + + def write_pred_annotations_to_file(self, + path: str, + fname_app: Optional[str] = None): + """Writes predictions to file in JSON format. + + Args: + path: Path to write the prediction annotation JSON file. + fname_app: Optional string to append to the file name. + """ + if not tf.io.gfile.exists(path): + tf.io.gfile.makedirs(path) + json_file_name = f"predictions{fname_app if fname_app else ''}.json" + json_file_path = os.path.join(path, json_file_name) + + def _convert_to_serializable(obj): + if isinstance(obj, np.ndarray): + return obj.tolist() + elif isinstance(obj, np.float32): + return float(obj) + else: + raise TypeError(f'Unserializable object {obj} of type {type(obj)}') + + with tf.io.gfile.GFile(json_file_path, 'w') as f: + f.write( + json.dumps( + self.predictions, + default=_convert_to_serializable)) + logging.info('Predicted annotations are stored in %s.', json_file_path) diff --git a/scenic/projects/pixel_llm/io/flexio.py b/scenic/projects/pixel_llm/io/flexio.py new file mode 100644 index 0000000000000000000000000000000000000000..07541cca605a076a8bc2d2997524679011e2b125 --- /dev/null +++ b/scenic/projects/pixel_llm/io/flexio.py @@ -0,0 +1,805 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""FlexIO input pipeline.""" + +import functools +from typing import Any, Callable, Dict, Iterable, Mapping, Optional, Sequence, Tuple, Union + +from absl import logging +from clu import deterministic_data +from clu import preprocess_spec +import grain.tensorflow as grain +import jax +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf +import tensorflow_datasets as tfds + + + +# Default source of pp ops. +DEFAULT_PP_LIBS = [] + +Features = preprocess_spec.Features +TfFeature = Union[tf.io.FixedLenFeature, tf.io.VarLenFeature, + tf.io.FixedLenSequenceFeature] + +# From grain/_src/core/constants.py +GRAIN_META_DATA = [ + '_index', '_record_key', '_dataset_index', '_epoch', '_record', 'mids', 'id' +] + + +def _get_feature(feature_type: str, shape=(), dtype='string') -> TfFeature: + dtype = tf.dtypes.as_dtype(dtype) + if feature_type == 'FixedLen': + return tf.io.FixedLenFeature(shape=shape, dtype=dtype) + if feature_type == 'VarLen': + return tf.io.VarLenFeature(dtype=dtype) + elif feature_type == 'FixedLenSequence': + return tf.io.FixedLenSequenceFeature(shape=shape, dtype=dtype) + raise NotImplementedError(f'Feature type {feature_type} not available yet.') + + +def tf2jax_dtype(dtype: tf.dtypes.DType) -> Union[jnp.dtype, tf.dtypes.DType]: + """Convert TF dtype to JAX.""" + conv = { + tf.int8: jnp.int8, + tf.int16: jnp.int16, + tf.int32: jnp.int32, + tf.int64: jnp.int64, + tf.uint8: jnp.uint8, + tf.uint16: jnp.uint16, + tf.uint32: jnp.uint32, + tf.uint64: jnp.uint64, + tf.float16: jnp.float16, + tf.float32: jnp.float32, + tf.float64: jnp.float64, + tf.bfloat16: jnp.bfloat16, + tf.bool: jnp.bool_ + } + return conv.get(dtype) or dtype + + + + +def apply_process_fn_with_populated_seed(ds: tf.data.Dataset, + preprocess_fn: Callable[[Features], + Features], *, + rng: jnp.ndarray) -> tf.data.Dataset: + """Maps `ds` using the preprocess_fn and a deterministic RNG per example. + + Args: + ds: Dataset containing Python dictionary with the features. The 'rng' + feature should not exist. + preprocess_fn: Preprocessing function that takes a Python dictionary of + tensors and returns a Python dictionary of tensors. The function should be + convertible into a TF graph. + rng: Base RNG to use. Per example RNGs will be derived from this by folding + in the example index. + + Returns: + The dataset mapped by the `preprocess_fn`. + """ + + def _fn(example_index: int, features: Features) -> Features: + example_index = tf.cast(example_index, tf.int64) + if preprocess_spec.SEED_KEY in features: + logging.warning(('Seed key (%s) already exists in the feature dict -> ' + '*not* overwriting'), preprocess_spec.SEED_KEY) + else: + features[ + preprocess_spec.SEED_KEY] = tf.random.experimental.stateless_fold_in( + tf.cast(rng, tf.int64), example_index) + processed = preprocess_fn(features) # Note: we keep the RNG in the dict. + return processed + + return ds.enumerate().map(_fn, num_parallel_calls=tf.data.AUTOTUNE) + + +def get_number_of_examples(config: ml_collections.ConfigDict) -> int: + """Obtain the number of examples in a thin DMVR or TFDS dataset.""" + if hasattr(config, 'num_examples'): + return config.num_examples + + + if config.source in ['tfds', 'grain']: + data_dir = config.get('data_dir', None) + return dataset_utils.get_num_examples( + config.tfds_name, config.split, data_dir=data_dir) + elif config.source == 'tfrecord': + size = config.get('size', None) + if size is None: + raise ValueError('size is required for tfrecord datasets') + return size + raise ValueError(f'Unknown data source: {config.source}') + + +def get_process_fn(spec: str, + pp_libs: Sequence[str]) -> preprocess_spec.PreprocessFn: + """Constructs the preprocess_fn that should be applied on the data. + + Args: + spec: Config string specifying the preprocessing. + pp_libs: List of libraries to collect pp ops from. + + Returns: + PreprocessFns for pre-processing. + """ + all_ops = sum(map(preprocess_spec.get_all_ops, pp_libs), []) + preprocess_fn = preprocess_spec.parse(spec, all_ops, only_jax_types=False) + return preprocess_fn + + +def _get_single_tfds_dataset( + builder: tfds.core.DatasetBuilder, + split: str, + batch_size: Optional[int], + preprocess_fn: Optional[preprocess_spec.PreprocessFn] = None, + postprocess_fn: Optional[preprocess_spec.PreprocessFn] = None, + rng: Union[None, jnp.ndarray, tf.Tensor] = None, + global_rng: Union[None, jnp.ndarray, tf.Tensor] = None, + shuffle: bool = False, + shuffle_buffer_size: int = 1000, + cache: bool = False, + skip_decoders: Sequence[str] | None = None, + repeat_dataset: bool = True, +) -> tf.data.Dataset: + """Creates dataset from builder and applies preprocessing. + + Args: + builder: TFDS dataset builder. + split: Train/test/validation split. + batch_size: Batch size. + preprocess_fn: Preprocess function with pre-caching ops. + postprocess_fn: Postprocess function executed *after* batching. + rng: Random seed. + global_rng: Global random seed (same across hosts). + shuffle: Whether to shuffle. + shuffle_buffer_size: Shuffle buffer size. + cache: Whether to cache the dataset. + skip_decoders: Pass decoders to skip to create_dataset (mainly for image). + repeat_dataset: If True, the dataset is repeated indefinitely. + + Returns: + tf.data.Dataset with preprocessing applied. + """ + + host_split = deterministic_data.get_read_instruction_for_host( + split, + dataset_info=builder.info, + remainder_options=deterministic_data.RemainderOptions.DROP, + ) + ds = deterministic_data.create_dataset( + builder, + split=host_split, + preprocess_fn=None, + cache=cache, + batch_dims=(), + rng=global_rng, + num_epochs=1, # None = repeat forever. + shuffle=False, + pad_up_to_batches=None, + decoders={d: tfds.decode.SkipDecoding() for d in skip_decoders or []}, + ) + if cache: + ds = ds.cache() + if repeat_dataset: + ds = ds.repeat() # Repeat indefinitly. + if shuffle: + ds = ds.shuffle(shuffle_buffer_size, seed=rng[0]) + if preprocess_fn is not None: + if rng is not None: + ds = apply_process_fn_with_populated_seed(ds, preprocess_fn, rng=rng) + else: + ds = ds.map(preprocess_fn, num_parallel_calls=tf.data.AUTOTUNE) + if batch_size: + ds = ds.batch( + batch_size, + drop_remainder=True, + num_parallel_calls=tf.data.AUTOTUNE, + deterministic=True) + if postprocess_fn is not None: + if rng is not None: + ds = apply_process_fn_with_populated_seed(ds, postprocess_fn, rng=rng) + else: + ds = ds.map(postprocess_fn, num_parallel_calls=tf.data.AUTOTUNE) + + return ds + + +def _get_single_grain_dataset( + builder: tfds.core.DatasetBuilder, + start_index: int, + split: str, + batch_size: Optional[int], + grain_configs: Optional[Dict[str, Any]] = None, + preprocess_fn: Optional[preprocess_spec.PreprocessFn] = None, + postprocess_fn: Optional[preprocess_spec.PreprocessFn] = None, + rng: Union[None, jnp.ndarray, tf.Tensor] = None, + global_rng: Union[None, jnp.ndarray, tf.Tensor] = None, + shuffle: bool = False, + cache: bool = False, + repeat_dataset: bool = True, +) -> tf.data.Dataset: + """Creates a Grain-backed dataset from builder and applies preprocessing. + + Args: + builder: TFDS dataset builder. + start_index: Index dataset (Grain) start index. + split: Train/test/validation split. + batch_size: Batch size. + grain_configs: To handle Grain config options. + preprocess_fn: Preprocess function with pre-caching ops. + postprocess_fn: Postprocess function executed *after* batching. + rng: Random seed. + global_rng: Global random seed (same across hosts). + shuffle: Whether to shuffle. + cache: Whether to cache the dataset. + repeat_dataset: If True, the dataset is repeated indefinitely. + + Returns: + tf.data.Dataset with preprocessing applied. + """ + + if rng is not None: + raise ValueError( + 'For Grain-backed datasets `global_rng` controls per-example seeds.') + if cache: + raise ValueError('Grain datasets are created as inifinitly repeating and ' + 'cannot be cached.') + + # TODO(dehghani): These settings are *not* per-dataset but rather global + # grain flags. This will be problematic if we have more than one Grain-backed + # source but wishing different setting for them. Find a way for setting + # these in a better way. + grain_configs = grain_configs or {} + for config_k, config_v in grain_configs.items(): + grain.config.update(config_k, config_v) + + ds = grain.load_from_tfds( + tfds_info=builder.info, + split=split, + num_epochs=None if repeat_dataset else 1, # None = repeat forever. + shuffle=shuffle, + seed=global_rng, + shard_options=grain.ShardByJaxProcess(drop_remainder=True), + transformations=preprocess_fn or (), + batch_size=batch_size).as_dataset(start_index=start_index) + + if postprocess_fn is not None: + ds = ds.map(postprocess_fn, num_parallel_calls=tf.data.AUTOTUNE) + + return ds + + + + + + +def decode_sharded_names(path): + """Convert sharded file names into a list.""" + ret = [] + path = path.split(',') + for name in path: + if '@' in name: + num_shards = int(name.split('@')[1].split('.')[0]) + suffix = name.split(f'@{num_shards}')[-1] + prefix = name.split('@')[0] + names = [ + f'{prefix}-{i:05d}-of-{num_shards:05d}{suffix}' + for i in range(num_shards) + ] + ret.extend(names) + else: + ret.append(name) + return ret + + +def _get_single_tfrecord_dataset( + tfrecords: str, + context_features: Mapping[str, TfFeature], + sequence_features: Mapping[str, TfFeature], + batch_size: Optional[int], + preprocess_fn: Optional[preprocess_spec.PreprocessFn] = None, + postprocess_fn: Optional[preprocess_spec.PreprocessFn] = None, + rng: Union[None, jnp.ndarray, tf.Tensor] = None, + global_rng: Union[None, jnp.ndarray, tf.Tensor] = None, + shuffle: bool = False, + shuffle_buffer_size: int = 1000, + cache: bool = False, + repeat_dataset: bool = True, +) -> tf.data.Dataset: + """Creates dataset using DMVR and applies preprocessing. + + Args: + tfrecords: Path to tfrecords. + context_features: Dictionary of context features to parse. + sequence_features: Dictionary of sequence features to parse. + batch_size: Batch size. + preprocess_fn: Preprocess function with pre-caching ops. + postprocess_fn: Postprocess function executed *after* batching. + rng: Random seed. + global_rng: Global random seed (same across hosts). + shuffle: Whether to shuffle. + shuffle_buffer_size: Shuffle buffer size. + cache: Whether to cache the dataset. + repeat_dataset: If True, the dataset is repeated indefinitely. + + Returns: + tf.data.Dataset with preprocessing applied. + """ + del global_rng + + if rng is None and shuffle: + raise ValueError("Please set 'rng' when shuffling.") + + ds = tf.data.TFRecordDataset(decode_sharded_names(tfrecords)) + # Split datasets into machines. Otherwise multi-machine evaluation takes the + # same images. + ds = ds.shard(jax.process_count(), jax.process_index()) + if sequence_features: + # pylint: disable=g-long-lambda + ds = ds.map( + lambda x: tf.io.parse_single_sequence_example( + x, context_features, sequence_features + ) + ) + # merge two into one + ds = ds.map(lambda x, y: {**x, **y}) + # pylint: enable=g-long-lambda + else: + ds = ds.map(lambda x: tf.io.parse_single_example(x, context_features)) + + if cache: + # Caching is done after pre-processing. This means that only deterministic + # pre-processing should be used here. This includes things like frame + # sampling, JPEG decoding, etc. + ds = ds.cache() + if repeat_dataset: + ds = ds.repeat() # Repeat indefinitly. + if shuffle: + ds = ds.shuffle(shuffle_buffer_size, seed=rng[0]) + if preprocess_fn is not None: + if rng is not None: + ds = apply_process_fn_with_populated_seed(ds, preprocess_fn, rng=rng) + else: + ds = ds.map(preprocess_fn, num_parallel_calls=tf.data.AUTOTUNE) + if batch_size: + ds = ds.batch( + batch_size, + drop_remainder=True, + num_parallel_calls=tf.data.AUTOTUNE, + deterministic=True, + ) + if postprocess_fn is not None: + if rng is not None: + ds = apply_process_fn_with_populated_seed(ds, postprocess_fn, rng=rng) + else: + ds = ds.map(postprocess_fn, num_parallel_calls=tf.data.AUTOTUNE) + return ds + + +def _build_pipeline( + split: str, + start_step: Optional[int], + dataset_configs: ml_collections.ConfigDict, + batch_size: Optional[int], + num_local_shards: int, + rng: Union[None, jnp.ndarray, tf.Tensor] = None, + global_rng: Union[None, jnp.ndarray, tf.Tensor] = None, + shuffle: bool = False +) -> Optional[Union[tf.data.Dataset, Dict[str, tf.data.Dataset]]]: + """Build a tf.data.Dataset pipeline using clu.deterministic_data or DMVR. + + Args: + split: The split to be used. + start_step: Start step for GRAIN-backed datasets. + dataset_configs: Dataset configurations. + batch_size: Total batch size (sum for all devices). + num_local_shards: Number of local shards (usually num local devices). + rng: Per-host random seed (JAX format). + global_rng: Global random seed (JAX format). + shuffle: Whether to shuffle. + + Returns: + tf.data.Dataset after preprocessing, merging, mosaicing, and batching. + """ + # Pre-processing libs: + pp_libs = dataset_configs.get('pp_libs', DEFAULT_PP_LIBS) + process_fn = functools.partial(get_process_fn, pp_libs=pp_libs) + + if split not in dataset_configs: + return None + + mode_config = dataset_configs.get(split) + config = ml_collections.ConfigDict({**dataset_configs, **mode_config}) + + merge_sources = config.get('merge_sources', True) + + any_grain = any([src.source == 'grain' for src in config.sources]) + if any_grain: + if len(config.sources) > 1 and merge_sources: + raise NotImplementedError( + 'Mixing of GRAIN-backed datasets is not yet ' + 'implemented in FlexIO, but can be accomplished ' + 'via `TfMixtureIndexSampler` and ' + '`TfMixtureDataLoader`.') + if start_step is None: + raise ValueError( + 'For GRAIN-backed datasets you need to provide a ' + '`start_step` to `get_dataset`.' + ) + elif start_step is not None: + logging.warning('Start step (%s) provided for non-GRAIN dataset.', + start_step) + + sources, weights = {}, {} + for src_id, src in enumerate(config.sources): + src_name = src.get('name', f'src_{src_id}') + if rng is not None: + rng, ds_rng = jax.random.split(rng) + else: + ds_rng = None + + if src.source == 'tfds': + builder = tfds.builder(src.tfds_name, data_dir=src.get('data_dir')) + ds = _get_single_tfds_dataset( + builder, + src.split, + batch_size=src.get('batch_size'), + preprocess_fn=process_fn(src.get('preproc_spec') or ''), + postprocess_fn=process_fn(src.get('postproc_spec') or ''), + rng=ds_rng, + global_rng=global_rng, + shuffle=shuffle, + shuffle_buffer_size=src.shuffle_buffer_size, + cache=src.get('cache', False), + skip_decoders=src.get('skip_decoders'), + repeat_dataset=src.get('repeat_dataset', True), + ) + elif src.source == 'grain': + if src.get('shuffle_buffer_size') is not None: + raise ValueError('GRAIN-backed datasets always use a global shuffle.') + if batch_size is not None: + global_batch_size = batch_size * jax.process_count() + else: + global_batch_size = jax.process_count() + # TODO(dehghani): Calculating `start_index` based on step like this + # works only if there is no filtering or example packing. Switch to + # grain checkpointing when it's mature. + start_index = int(start_step * global_batch_size + jax.process_index()) + builder = tfds.builder(src.tfds_name, data_dir=src.get('data_dir')) + ds = _get_single_grain_dataset( + builder, + start_index, + src.split, + batch_size=src.get('batch_size'), + grain_configs=src.get('grain_configs'), + preprocess_fn=process_fn(src.get('preproc_spec') or ''), + postprocess_fn=process_fn(src.get('postproc_spec') or ''), + rng=None, + global_rng=global_rng, + shuffle=shuffle, + repeat_dataset=src.get('repeat_dataset', True), + ) + if src.get('drop_grain_meta_features', True): + + def _drop_grain_meta_features( + features: Mapping[str, Any]) -> Mapping[str, Any]: + """Returns the features with any Grain meta features.""" + result = {} + for k, v in features.items(): + if k not in GRAIN_META_DATA: + result[k] = v + return result + + ds = ds.map( + _drop_grain_meta_features, num_parallel_calls=tf.data.AUTOTUNE) + elif src.source == 'tfrecord': + context_features = dict(src.get('context_features', {})) + sequence_features = dict(src.get('sequence_features', {})) + context_features = { + k: _get_feature(**f) for k, f in context_features.items() + } + sequence_features = { + k: _get_feature(**f) for k, f in sequence_features.items() + } + + ds = _get_single_tfrecord_dataset( + src.tfrecords, + context_features, + sequence_features, + batch_size=src.get('batch_size'), + preprocess_fn=process_fn(src.get('preproc_spec') or ''), + postprocess_fn=process_fn(src.get('postproc_spec') or ''), + rng=ds_rng, + global_rng=global_rng, + shuffle=shuffle, + shuffle_buffer_size=src.shuffle_buffer_size, + cache=src.get('cache', False), + repeat_dataset=src.get('repeat_dataset', True), + ) + else: + raise ValueError(f'Unknown dataset source: {src.source}') + sources[src_name] = ds + if merge_sources: + weights[src_name] = src.get('weight', 1.0) + else: + if src.get('weight'): + raise ValueError( + 'Per source `weight` should not be provided unless you are merging ' + 'datasets (i.e., merge_sources=True).') + + def _batch_and_prefetch(ds, batch_size): + if batch_size is None: + return ds + + # Batch to the desired output batch size: + if batch_size % num_local_shards != 0: + raise ValueError( + f'Local (host) batch size of {batch_size} is not divisible' + f'to num_local_shard={num_local_shards}.') + batch_dims = [num_local_shards, batch_size // num_local_shards] + for batch_size in reversed(batch_dims): + if dataset_configs.get('padded_batch'): + ds = ds.padded_batch(batch_size, drop_remainder=True) + else: + ds = ds.batch( + batch_size, + drop_remainder=True, + num_parallel_calls=tf.data.AUTOTUNE, + deterministic=True, + ) + + # Having prefetch as the last transformation will prevent automatic + # injection of prefetch(AUTOTUNE). + ds = ds.prefetch(2) + + # Configure parallelism. + # TODO(agritsenko, josipd): make these settings configurable as the defaults + # may leads to OOM. + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + options.threading.max_intra_op_parallelism = 1 + return ds.with_options(options) + + ds_already_batched = False # flag indicates whether ds is batched or not + if merge_sources: + batch_before_merge = config.get('batch_before_merge', False) + logging.warning('batch_before_merge: %s', batch_before_merge) + ds_sources = list(sources.values()) + if len(ds_sources) > 1: + ds_weights = list(weights.values()) + # Normalize sampling weights. + sum_weights = sum(ds_weights) + ds_weights = [w / sum_weights for w in ds_weights] + if batch_before_merge: + ds_sources = [_batch_and_prefetch(ds, batch_size) for ds in ds_sources] + ds_already_batched = True + ds = tf.data.Dataset.sample_from_datasets( + ds_sources, ds_weights, seed=rng[0] if rng is not None else None) + else: + ds = ds_sources[0] + + # Map with shared pp spec, only possible if we are merging the sources: + def _apply_global_processing( + ds_pp: tf.data.Dataset, pp_str: str) -> tf.data.Dataset: + if rng is not None: + return apply_process_fn_with_populated_seed( + ds_pp, process_fn(pp_str), rng=rng) + else: + return ds_pp.map( + process_fn(pp_str), + num_parallel_calls=tf.data.AUTOTUNE) + + ds = _apply_global_processing(ds, config.get('preproc_spec') or '') + if not ds_already_batched: + ds = _batch_and_prefetch(ds, batch_size) + return _apply_global_processing(ds, config.get('postproc_spec') or '') + + else: + for ds_name, ds in sources.items(): + # TODO(dehghani): Add support for have different batch_sizes for + # different sources. + sources[ds_name] = _batch_and_prefetch(ds, batch_size) + return sources + + +def get_iterator( + ds: Union[tf.data.Dataset, Dict[str, tf.data.Dataset]], + configs=ml_collections.ConfigDict, + *, + return_iterator: bool = False +) -> Tuple[Union[Iterable[Any] | None, Dict[str, Iterable[Any] | None]], Union[ + Tuple[Any, ...], Dict[str, Tuple[Any, ...]]], Union[int, Dict[str, int]]]: + """Given a (dict of) Dataset object(s), returns iterators and metadata. + + Args: + ds: A tf.data.Dataset instance or a dictionary of TFDS instances. + configs: A Config dict. + return_iterator: If False, the function returns a None instead of an + iterator. + + Returns: + Iterators, input specification and num_examples. + """ + + def _get_input_spec(ds): + return jax.tree_util.tree_map( + # Remove host dimension from the shapes. + lambda x: (tuple(x.shape.as_list()[1:]), tf2jax_dtype(x.dtype)), + ds.element_spec) + + if ds is not None: + total_examples = {} + for src_id, src in enumerate(configs.sources): + total_examples[src.get('name', + f'src_{src_id}')] = get_number_of_examples(src) + if isinstance(ds, dict): + ds_iter, input_spec = {}, {} + for dataset_name, dataset in ds.items(): + if not return_iterator: + ds_iter[dataset_name] = None + else: + ds_it = iter(dataset) + ds_iter[dataset_name] = map(dataset_utils.tf_to_numpy, ds_it) + input_spec[dataset_name] = _get_input_spec(dataset) + if configs.merge_sources: + first_input_spec = list(input_spec.values())[0] + for in_spec in input_spec.values(): + assert in_spec == first_input_spec, ( + 'For now, input specs for all sources should be the same.') + input_spec = first_input_spec + else: + # Either a single dataset, or we merged them into a single dataset. + if not return_iterator: + ds_iter = None + else: + ds_it = iter(ds) + ds_iter = map(dataset_utils.tf_to_numpy, ds_it) + total_examples = sum(list(total_examples.values())) + input_spec = _get_input_spec(ds) + else: + ds_iter = None + input_spec = None + total_examples = -1 + + return ds_iter, input_spec, total_examples + + +@datasets.add_dataset('custom_flexio') +def get_dataset( + *, + batch_size: Optional[int], + eval_batch_size: Optional[int], + num_shards: int, + rng: Union[None, jnp.ndarray, tf.Tensor], + dataset_configs: ml_collections.ConfigDict, + start_step: Optional[int] = None, + dtype_str: str = 'float32', + shuffle_seed: int = 0, + dataset_service_address: Optional[str] = None) -> dataset_utils.Dataset: + """Returns generators for video datasets. + + Args: + batch_size: Determines the train batch size. + eval_batch_size: Determines the evaluation batch size. + num_shards: Number of local shards (usually num local devices). + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: Dataset configurations. + start_step: Current step, used for deterministic input pipeline backed by + GRAIN. + dtype_str: Data type of the image. Only 'float32' is currently supported. + shuffle_seed: Unsupported; use rng instead. + dataset_service_address: Unsupported; must be None. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + + if rng is None: + raise NotImplementedError('This dataset requires a JAX RNG.') + if shuffle_seed: + raise NotImplementedError( + 'This dataset requires a JAX RNG, do not use shuffle_seed.') + if dataset_service_address: + raise ValueError('FlexIO pipeline does not support data service.') + if dtype_str != 'float32': + raise ValueError(f'Unsupported dtype_str: {dtype_str}') + + # Delete unused arguments (see docstring): + del shuffle_seed + + # Ensure a different key on each worker: + global_rng = rng + rng = jax.random.fold_in(rng, jax.process_index()) + + # Training dataset: + rng, train_rng = jax.random.split(rng) + train_ds = _build_pipeline( + split='train', + start_step=start_step, + dataset_configs=dataset_configs, + batch_size=batch_size, + num_local_shards=num_shards, + rng=train_rng, + global_rng=global_rng, + shuffle=True) + + # Evaluation dataset: + rng, eval_rng = jax.random.split(rng) + eval_ds = _build_pipeline( + split='eval', + start_step=0, + dataset_configs=dataset_configs, + batch_size=eval_batch_size, + num_local_shards=num_shards, + global_rng=global_rng, + rng=eval_rng) + + return_iterators = dataset_configs.get('return_iterators', True) + train_iter, train_input_spec, total_train_examples = get_iterator( + train_ds, + dataset_configs.get('train'), + return_iterator=return_iterators) + eval_iter, eval_input_spec, total_eval_examples = get_iterator( + eval_ds, + dataset_configs.get('eval'), + return_iterator=return_iterators) + + # Testing dataset: + rng, test_rng = jax.random.split(rng) + test_ds = _build_pipeline( + split='test', + start_step=0, + dataset_configs=dataset_configs, + batch_size=eval_batch_size, + num_local_shards=num_shards, + global_rng=global_rng, + rng=test_rng) + + test_iter, test_input_spec, total_test_examples = get_iterator( + test_ds, + dataset_configs.get('test'), + return_iterator=return_iterators) + + # Collect dataset metadata. + meta_data = { + 'num_train_examples': total_train_examples, + 'num_eval_examples': total_eval_examples, + 'num_test_examples': total_test_examples, + } + + if train_ds is not None: + meta_data['input_spec'] = train_input_spec + if eval_ds is not None: + meta_data['eval_input_spec'] = eval_input_spec + if test_ds is not None: + meta_data['test_input_spec'] = test_input_spec + + # Update metadata if any extra was provided via config. + meta_data.update(dataset_configs.get('extra_meta_data', {})) + dataset = {'train_iter': train_iter, 'valid_iter': eval_iter, + 'test_iter': test_iter, 'meta_data': meta_data} + return_datasets = dataset_configs.get('return_datasets', False) + if return_datasets: + dataset.update( + {'train_ds': train_ds, 'valid_ds': eval_ds, 'test_ds': test_ds}) + logging.info('Dataset metadata: %s', dataset['meta_data']) + return dataset_utils.Dataset(**dataset) diff --git a/scenic/projects/pixel_llm/io/ops.py b/scenic/projects/pixel_llm/io/ops.py new file mode 100644 index 0000000000000000000000000000000000000000..bd42f1fd0f8beed73b4fb268c7cc697b361b94d0 --- /dev/null +++ b/scenic/projects/pixel_llm/io/ops.py @@ -0,0 +1,1143 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Preprocessing operations.""" + +import dataclasses +from typing import Optional, Any, Sequence + +from clu import preprocess_spec +from scenic.projects.pixel_llm import tokenizers as pixel_llm_tokenizers +from scenic.projects.pixel_llm.io import transforms +import tensorflow as tf + +TOKENIZER = pixel_llm_tokenizers.TOKENIZER +get_tokenizer = pixel_llm_tokenizers.get_tokenizer +INF = 2**16 - 1 + +PADDING_QUERY = '' + + +@dataclasses.dataclass(frozen=True) +class Drop: + """Drops the given keys.""" + + keys: Sequence[str] + ignore_missing_features: bool = False + + def __call__(self, features): + if not self.ignore_missing_features: + for k in self.keys: + if k not in features: + raise ValueError( + f"Could not drop features '{k}'. Available features:" + f" {list(features)}" + ) + return {k: v for k, v in features.items() if k not in self.keys} + + +@dataclasses.dataclass(frozen=True) +class DropNested: + """Drops the nested given keys.""" + + parent_key: str + keys: Sequence[str] + ignore_missing_features: bool = False + + def __call__(self, features): + child_features = features[self.parent_key] + if not self.ignore_missing_features: + for k in self.keys: + if k not in child_features: + raise ValueError( + f"Could not drop features '{k}'. Available features:" + f' {list(child_features)}' + ) + new_child_features = { + k: v for k, v in child_features.items() if k not in self.keys + } + features[self.parent_key] = new_child_features + + return features + + +def point_to_coord(point, image_size): + """Converts normalized point coordinates to integer. + + Args: + point: Tensor of shape [..., 2] + image_size: Tensor or list/tuple of two elements representing (height, + width) + + Returns: + A tensor of the same shape as input, but in integer coordinates + """ + height, width = image_size[0], image_size[1] + point_int = tf.round(point * [width, height]) + return point_int + + +def bbox_to_coord(bbox, image_size): + """Converts normalized bounding box coordinates (xyxy) to integer. + + Args: + bbox: Tensor of shape [..., 4] + image_size: Tensor or list/tuple of two elements representing (height, + width) + + Returns: + A tensor of the same shape as input, but in integer coordinates + """ + height, width = image_size[0], image_size[1] + bbox_int = tf.round(bbox * [width, height, width, height]) + return bbox_int + + +@dataclasses.dataclass(frozen=True) +class InitPaddingMask: + """Create a `padding_mask` of `ones` to match the current unpadded image.""" + + def __call__(self, features): + with tf.name_scope(type(self).__name__): + h, w = transforms.get_hw(features, dtype=tf.int32) + # padding_mask is initialized as ones. It will later be padded with zeros. + features_new = features.copy() + features_new['padding_mask'] = tf.ones((h, w), dtype=tf.float32) + return features_new + + +@dataclasses.dataclass(frozen=True) +class FixedSizeCrop: + """Crop a random sized region from the image as done in DETR. + + Assumes the features dictionary contains "inputs", "label" and "padding_mask". + """ + crop_size: int + + def __call__(self, features): + with tf.name_scope(type(self).__name__): + h, w = transforms.get_hw(features, dtype=tf.int32) + wcrop = tf.cast(tf.minimum(w, self.crop_size), tf.int32) + hcrop = tf.cast(tf.minimum(h, self.crop_size), tf.int32) + # TODO(aarnab, zhouxy): Should use stateless rng and provide seeds + i = tf.random.uniform([], 0, h - hcrop + 1, dtype=tf.int32) + j = tf.random.uniform([], 0, w - wcrop + 1, dtype=tf.int32) + region = (i, j, hcrop, wcrop) + features_new = features.copy() + return transforms.crop(features_new, region) + + +@dataclasses.dataclass(frozen=True) +class CenterCrop: + """Crop the center region from the image as done in DETR.""" + + crop_size: int + + def __call__(self, features): + with tf.name_scope(type(self).__name__): + h, w = transforms.get_hw(features, dtype=tf.int32) + wcrop = tf.cast(tf.minimum(w, self.crop_size), tf.int32) + hcrop = tf.cast(tf.minimum(h, self.crop_size), tf.int32) + i = (h - hcrop) // 2 + j = (w - wcrop) // 2 + region = (i, j, hcrop, wcrop) + features_new = features.copy() + return transforms.crop(features_new, region) + + +@dataclasses.dataclass(frozen=True) +class RandomRatioResize: + """EfficientNet data augmentation. First resize than crop a fixed size.""" + + min_scale: float + max_scale: float + target_size: int + + def __call__(self, features): + with tf.name_scope(type(self).__name__): + # TODO(aarnab, zhouxy): Should use stateless rng and provide seeds. + ratio = tf.random.uniform( + [], self.min_scale, self.max_scale, dtype=tf.float32) + size = tf.cast(tf.cast(self.target_size, tf.float32) * ratio, tf.int32) + features_new = features.copy() + return transforms.resize(features_new, size, max_size=size) + + +@dataclasses.dataclass(frozen=True) +class ResizeShorter: + """Resize the shorter side to a fixed size.""" + + target_size: int + max_size: Optional[int] = None + + def __call__(self, features): + with tf.name_scope(type(self).__name__): + features_new = features.copy() + return transforms.resize( + features_new, self.target_size, max_size=self.max_size) + + +@dataclasses.dataclass(frozen=True) +class RandomHorizontalFlip: + """Horizontally flip image and boxes [cxcywh format] with probability `p`.""" + + p: float = 0.5 + + def __call__(self, features): + rnd = tf.random.uniform([], minval=0.0, maxval=1.0, dtype=tf.float32) + if rnd < self.p: + return transforms.hflip( + transforms.identity(features) + ) # Identity helps avoid autograph errors. + else: + return transforms.identity(features) + + +def decode_boxes(bbox, size): + """Convert yxyx [0, 1] normalized boxes to xyxy unnormalized format.""" + y0, x0, y1, x1 = tf.split(bbox, 4, axis=-1) + h = tf.cast(size[0], tf.float32) + w = tf.cast(size[1], tf.float32) + + y0 = tf.clip_by_value(y0 * h, 0.0, h) + x0 = tf.clip_by_value(x0 * w, 0.0, w) + y1 = tf.clip_by_value(y1 * h, 0.0, h) + x1 = tf.clip_by_value(x1 * w, 0.0, w) + + bbox = tf.concat([x0, y0, x1, y1], axis=-1) + return bbox + + +@dataclasses.dataclass +class DecodeCocoCaptionAnnotations: + """Decode Coco-Caption annotations.""" + + tokenizer_weight_path: str + num_captions_per_sample: int = 5 + max_text_tokens: int = 40 + max_context_tokens: int = -1 + append_context_eos: bool = False + context_prefix: str = '' + context_suffix: str = '' + class_id_offset: int = 1 + _tokenizer: TOKENIZER = dataclasses.field(init=False) + + def __post_init__(self): + self._tokenizer = get_tokenizer(self.tokenizer_weight_path) + self._tokenizer.initialize() + + def __call__( + self, features: preprocess_spec.Features + ) -> preprocess_spec.Features: + image = tf.cast(features['image'], tf.float32) + text_features = features['captions']['text'] + text_tokens = self._tokenizer.string_tensor_to_indices( + text_features, + prepend_bos=True, + append_eos=True, + max_num_tokens=self.max_text_tokens, + )[:, : self.max_text_tokens] + # Randomly select num_captions_per_sample + inds = tf.random.shuffle(tf.range(tf.shape(text_tokens)[0]))[ + : self.num_captions_per_sample + ] + text_tokens = tf.gather(text_tokens, inds) + target = { + 'text_tokens': text_tokens, + } + + if 'context' in features: + max_context_tokens = self.max_context_tokens if ( + self.max_context_tokens > 0) else self.max_text_tokens + context = features['context'] + if self.context_prefix: + context = tf.constant( + self.context_prefix, dtype=tf.string)[None] + context + if self.context_suffix: + context = context + tf.constant( + self.context_suffix, dtype=tf.string)[None] + context_tokens = self._tokenizer.string_tensor_to_indices( + context, + prepend_bos=False, + append_eos=self.append_context_eos, + max_num_tokens=max_context_tokens, + )[:, : max_context_tokens] + context_tokens = tf.gather(context_tokens, inds) + target['context_tokens'] = context_tokens + + target['orig_size'] = tf.cast(tf.shape(image)[-3:-1], dtype=tf.int32) + target['size'] = tf.identity(target['orig_size']) + target['image/id'] = ( + tf.cast(features['image/id'], dtype=tf.int64) + if 'image/id' in features + else tf.constant(0, dtype=tf.int64) + ) + target['labels'] = ( + tf.zeros(tf.shape(text_tokens)[0], dtype=tf.int64) + + self.class_id_offset + ) + + output = { + 'inputs': image, + 'label': target, + } + return output + + +@dataclasses.dataclass +class AddPromptTokens: + """Adds additional prompt tokens which can be used as context for decoding.""" + + tokenizer_weight_path: str + num_captions_per_sample: int = 5 + prompt: list[str] = dataclasses.field(default_factory=lambda: ['a photo of ']) + max_context_tokens: int = 8 + append_eos: bool = False + # randomly samples one prompt if many are given + prompt_sampling_strategy: str = 'uniform' + + _tokenizer: TOKENIZER = dataclasses.field(init=False) + _prompt_tensor: Any = dataclasses.field(init=False) + + def __post_init__(self): + self._tokenizer = get_tokenizer(self.tokenizer_weight_path) + self._tokenizer.initialize() + if len(self.prompt) > 1: + assert ( + self.prompt_sampling_strategy == 'uniform' + ), 'No other sampling strategy implemented' + self._prompt_tensor = tf.constant( + self.prompt, + dtype=tf.string, + ) + + def __call__( + self, features: preprocess_spec.Features + ) -> preprocess_spec.Features: + if self.prompt: + # uniformly sample a single caption + inds = tf.random.uniform( + shape=(self.num_captions_per_sample,), + minval=0, + maxval=tf.shape(self._prompt_tensor)[-1], + dtype=tf.int32, + ) + selected_text = tf.gather(self._prompt_tensor, inds) + text_tokens = self._tokenizer.string_tensor_to_indices( + selected_text, + prepend_bos=False, + append_eos=self.append_eos, + max_num_tokens=self.max_context_tokens, + ) + features['label']['context_tokens'] = text_tokens + return features + + +@dataclasses.dataclass(frozen=True) +class PadImages: + """Pad images and "padding_mask" to a fixed size.""" + + pad_h: int + pad_w: Optional[int] = None + pad_c: int = 3 + + def __call__( + self, features: preprocess_spec.Features) -> preprocess_spec.Features: + + features_new = features.copy() + pad_w = self.pad_w or self.pad_h + + h = tf.shape(features['inputs'])[0] + w = tf.shape(features['inputs'])[1] + c = tf.shape(features['inputs'])[2] + + features_new['inputs'] = tf.pad( + features['inputs'], + [[0, self.pad_h - h], [0, pad_w - w], [0, self.pad_c - c]], + mode='CONSTANT', + constant_values=0) + features_new['label']['padded_size'] = tf.stack([self.pad_h, self.pad_w]) + if 'padding_mask' in features: + features_new['padding_mask'] = tf.pad( + features['padding_mask'], + [[0, self.pad_h - h], [0, pad_w - w]], + mode='CONSTANT', + constant_values=0) + return features_new + + +@dataclasses.dataclass(frozen=True) +class PadMasks: + """Pad images and "padding_mask" to a fixed size.""" + + max_masks: int + pad_h: int + pad_w: Optional[int] = None + pad_c: int = 1 + + def __call__( + self, features: preprocess_spec.Features) -> preprocess_spec.Features: + + features_new = features.copy() + pad_w = self.pad_w or self.pad_h + + masks = features['label']['masks'][:self.max_masks] + num_masks = tf.shape(masks)[0] + h = tf.shape(masks)[1] + w = tf.shape(masks)[2] + c = tf.shape(masks)[3] + + features_new['label']['masks'] = tf.pad( + masks, + [ + [0, self.max_masks - num_masks], + [0, self.pad_h - h], + [0, pad_w - w], + [0, self.pad_c - c], + ], + mode='CONSTANT', + constant_values=0, + ) + return features_new + + +@dataclasses.dataclass(frozen=True) +class PadDetectionAnnotations: + """Pad detection annotations to a fixed size.""" + + max_boxes: int + + def __call__( + self, features: preprocess_spec.Features + ) -> preprocess_spec.Features: + features_new = features.copy() + # force padding boxes and labels + if 'boxes' not in features['label']: + features_new['label']['boxes'] = tf.zeros((self.max_boxes, 4)) + if 'labels' not in features['label']: + features_new['label']['labels'] = tf.zeros( + (self.max_boxes,), dtype=tf.int64 + ) + + for key in [ + 'boxes', + 'text_tokens', + 'context_tokens', + 'area', + 'objects/id', + 'is_crowd', + 'labels', + 'refexp_ids', + ]: + if key not in features['label']: + continue + item = features['label'][key][: self.max_boxes] + num_item = tf.shape(item)[0] + features_new['label'][key] = tf.pad( + item, + [[0, self.max_boxes - num_item]] + + [[0, 0]] * (len(tf.shape(item)) - 1), + mode='CONSTANT', + constant_values=0, + ) + + return features_new + + +@dataclasses.dataclass(frozen=True) +class PadLocoAnnotations: + """Pad localized narrative to a fixed size.""" + + num_prompts: int + num_points: int + + def __call__( + self, features: preprocess_spec.Features + ) -> preprocess_spec.Features: + features_new = features.copy() + max_cap_len = tf.shape(features['label']['text_tokens'])[-1] + # force padding boxes and labels + if 'points' not in features['label']: + features_new['label']['points'] = tf.zeros( + (self.num_prompts, max_cap_len, self.num_points, 2) + ) + + for key in ['points', 'prompt_points', 'token_phrase_idx']: + if key not in features['label']: + continue + item = features['label'][key][: self.num_prompts] + num_item = tf.shape(item)[0] + features_new['label'][key] = tf.pad( + item, + [[0, self.num_prompts - num_item]] + + [[0, 0]] * (len(tf.shape(item)) - 1), + mode='CONSTANT', + constant_values=0, + ) + + return features_new + + +@dataclasses.dataclass(frozen=True) +class PadCaptionAnnotations: + """Pad detection annotations to a fixed size.""" + + max_captions: int + + def __call__( + self, features: preprocess_spec.Features + ) -> preprocess_spec.Features: + features_new = features.copy() + # force padding boxes and labels + if 'labels' not in features['label']: + features_new['label']['labels'] = tf.zeros( + (self.max_captions,), dtype=tf.int64 + ) + + for key in [ + 'text_tokens', + 'context_tokens', + 'labels', + 'refexp_ids', + ]: + if key not in features['label']: + continue + item = features['label'][key][: self.max_captions] + num_item = tf.shape(item)[0] + features_new['label'][key] = tf.pad( + item, + [[0, self.max_captions - num_item]] + + [[0, 0]] * (len(tf.shape(item)) - 1), + mode='CONSTANT', + constant_values=0, + ) + + return features_new + + +def build_solid_grid(points_per_side, with_offset=True): + """Generates a 2D grid of points evenly spaced in [0, 1] x [0, 1].""" + if points_per_side < 1: + points = tf.stack( + [tf.zeros((2,), dtype=tf.float32), tf.ones((2,), dtype=tf.float32)], + axis=0, + ) + return points + if with_offset: + offset = 1.0 / (2 * points_per_side) + else: + offset = 0.0 + points_one_side = tf.linspace(offset, 1 - offset, points_per_side) + points_x = tf.tile(points_one_side[None, :], (points_per_side, 1)) + points_y = tf.tile(points_one_side[:, None], (1, points_per_side)) + points = tf.stack([points_x, points_y], axis=-1) + points = tf.reshape(points, (-1, 2)) + return points # (points_per_side ** 2, 2) + + +def boxes_to_points(boxes, grids): + """Sample points from boxes.""" + x0, y0, x1, y1 = tf.split(boxes, 4, axis=-1) + # [..., 4] + boxes_xywh = tf.concat([x0, y0, x1-x0, y1-y0], axis=-1) + # [..., 1, 4] + boxes_xywh = tf.expand_dims(boxes_xywh, axis=-2) + + # [..., num_points, 2] + points = boxes_xywh[...,:2] + grids * boxes_xywh[..., 2:] + + return points + + +@dataclasses.dataclass +class DecodeLocalizedNarrativesAnnotations: + """Given an instance and raw labels, creates pair. + + We sample the centers/traces/boxes and corresponding captions in following + steps: + 1. Compute the relative position of each utterance + 2. Compute the relative position of each token + 3. Get token to utterance mapping + """ + + tokenizer_weight_path: str + num_captions_per_sample: int = 1 + max_text_tokens: int = 128 + num_points_per_token: int = 2 + class_id_offset: int = 1 + box_points_per_side: int = 0 + with_image_id: bool = False + _tokenizer: TOKENIZER = dataclasses.field(init=False) + + def __post_init__(self): + self._tokenizer = get_tokenizer(self.tokenizer_weight_path) + self._tokenizer.initialize() + + def __call__( + self, features: preprocess_spec.Features + ) -> preprocess_spec.Features: + + image = tf.image.decode_jpeg(features['image/encoded'], channels=3) + captions = tf.sparse.to_dense(features['caption/string']) + # BC + if captions.ndim != 1: + captions = captions[:, 0] + + utterance = tf.sparse.to_dense(features['caption/utterance']) + center = tf.sparse.to_dense(features['caption/center']) + bbox = tf.sparse.to_dense(features['caption/bbox']) + + inds = tf.random.shuffle(tf.range(tf.shape(captions)[0]))[ + : self.num_captions_per_sample + ] + + captions = tf.gather(captions, inds) + utterance = tf.gather(utterance, inds) + center = tf.gather(center, inds) + bbox = tf.gather(bbox, inds) + + image = tf.cast(image, tf.float32) + + # [num_caption, num_utterance] + utterance = tf.strings.strip(utterance) + + num_caption = tf.shape(captions)[0] + num_utterance = tf.shape(utterance)[1] + + # [num_caption, num_utterance, 2] + center = tf.reshape(center, [num_caption, num_utterance, 2]) + # [num_caption, num_utterance, 4] + bbox = tf.reshape(bbox, [num_caption, num_utterance, 4]) + + text_tokens = self._tokenizer.string_tensor_to_indices( + captions, + prepend_bos=True, + append_eos=True, + max_num_tokens=self.max_text_tokens, + )[:, :self.max_text_tokens] + + # ==== Start: 1.Compute utterance pos ==== + # [num_caption, num_utterance] + valid_utt_mask = tf.cast(tf.strings.length(utterance) > 0, tf.int32) + # [num_caption, num_utterance] + vaid_center_mask = tf.cast( + tf.reduce_all(center > 1e-5, axis=-1), tf.int32) + valid_utt_mask = valid_utt_mask * vaid_center_mask + # [num_caption, num_utterance], [0-1] pos of utterance + sampled_utt_pos = tf.cumsum(valid_utt_mask, axis=-1) / tf.reduce_sum( + valid_utt_mask, axis=-1, keepdims=True) + sampled_utt_pos = tf.where( + valid_utt_mask > 0, sampled_utt_pos, -tf.ones_like(sampled_utt_pos)) + # ==== End: 1.Compute utterance pos ==== + + # ==== Start: 2.Compute token pos ==== + # [num_caption] + sampled_utt_start_pos = tf.reduce_min( + tf.where( + sampled_utt_pos > 0, + sampled_utt_pos, + tf.ones_like(sampled_utt_pos) * INF, + ), + axis=-1, + ) + sampled_utt_end_pos = tf.reduce_max( + tf.where( + sampled_utt_pos > 0, + sampled_utt_pos, + -tf.ones_like(sampled_utt_pos) * INF, + ), + axis=-1, + ) + + # [num_caption, max_token_length], [0-1] pos of token + valid_token_mask = tf.cast( + (text_tokens != self._tokenizer.pad_token) + & (text_tokens != self._tokenizer.bos_token) + & (text_tokens != self._tokenizer.eos_token), + tf.int32, + ) + token_pos = tf.cumsum(valid_token_mask, axis=-1) / tf.reduce_sum( + valid_token_mask, axis=-1, keepdims=True + ) + # rescale toekn pos + # [num_caption, max_token_length] + token_pos = sampled_utt_start_pos[:, None] + token_pos * ( + sampled_utt_end_pos[:, None] - sampled_utt_start_pos[:, None] + ) + # ==== End: 2.Compute token pos ==== + + # ==== Start: 3.Get token to utterance mapping ==== + # compute utt indices + # [num_caption, max_token_length, num_utterance] + token_utt_dist = (token_pos[:, :, None] - sampled_utt_pos[:, None, :]) ** 2 + # [num_caption, max_token_length] + token2utt = tf.argmin(token_utt_dist, axis=-1) + # ==== End: 3.Get token to utterance mapping ==== + + # ==== post processing ==== + + # [num_caption, max_text_tokens, 2] + sampled_center = tf.gather(center, token2utt, batch_dims=1) + # [num_caption, max_text_tokens, 4] + sampled_bbox = tf.gather(bbox, token2utt, batch_dims=1) + + sampled_center *= tf.cast(valid_token_mask[..., None], tf.float32) + sampled_bbox *= tf.cast(valid_token_mask[..., None], tf.float32) + + sampled_center = tf.clip_by_value(sampled_center, 0.0, 1.0) + sampled_bbox = tf.clip_by_value(sampled_bbox, 0.0, 1.0) + + sampled_center = point_to_coord( + sampled_center, tf.cast(tf.shape(image)[-3:-1], dtype=tf.int32) + ) + sampled_bbox = bbox_to_coord( + sampled_bbox, tf.cast(tf.shape(image)[-3:-1], dtype=tf.int32) + ) + + if self.box_points_per_side >= 0: + # [num_captions_per_sample, max_text_tokens, num_box_points, 2] + sampled_point = boxes_to_points( + sampled_bbox, build_solid_grid(self.box_points_per_side) + ) + else: + sampled_point = sampled_center + + target = { + 'text_tokens': text_tokens, + 'points': sampled_point, + 'labels': ( + tf.zeros(tf.shape(text_tokens)[0], dtype=tf.int64) + + self.class_id_offset + ), + } + + target['orig_size'] = tf.cast(tf.shape(image)[-3:-1], dtype=tf.int32) + target['size'] = tf.identity(target['orig_size']) + if 'image/id' in features and self.with_image_id: + target['image/id'] = tf.io.decode_raw( + tf.sparse.to_dense(features['image/id'])[0], out_type=tf.uint8, + fixed_length=32 + ) + target['image/id'] = tf.cast(target['image/id'], tf.int64) + else: + target['image/id'] = tf.constant(0, dtype=tf.int64) + # NOTE(jiaruixu): use padding int64 for compability with other datasets + # target['image/id'] = tf.constant(0, dtype=tf.int64) + + return { + 'inputs': image, + 'label': target, + } + + +@dataclasses.dataclass(frozen=True) +class ParseRefCoco: + """Converts TF RefCoco annotations into the standard format.""" + + refexp_field: str = 'raw' + + def __call__( + self, data: preprocess_spec.Features + ) -> preprocess_spec.Features: + example = {} + example['image'] = tf.io.decode_jpeg(data['image']) + example['image/id'] = data['image/id'] + + example['objects'] = {} + example['objects']['bbox'] = tf.reshape( + data['objects/bbox'].values, [-1, 4] + ) + example['objects']['id'] = data['objects/id'].values + example['objects']['area'] = data['objects/area'].values + example['objects']['label'] = data['objects/label'].values + # example['objects']['gt_box_index'] = data['objects/gt_box_index'].values + + example['objects']['refexp'] = {} + for field in ['refexp_id', self.refexp_field]: + row_lengths_name = f'objects/refexp/{field}/ragged_row_lengths_0' + flat_values_name = f'objects/refexp/{field}/ragged_flat_values' + refexp_field_row_lengths = data[row_lengths_name].values + refexp_field_flat_values = data[flat_values_name].values + example['objects']['refexp'][field] = tf.RaggedTensor.from_row_lengths( + values=refexp_field_flat_values, row_lengths=refexp_field_row_lengths + ) + + if 'objects/mask' in data: + segmentation = data['objects/mask'].values + height, width, _ = tf.unstack(tf.shape(example['image'])) + if tf.shape(segmentation)[0] > 0: + segmentation = tf.map_fn( + tf.image.decode_jpeg, segmentation, back_prop=False, dtype=tf.uint8 + ) + else: + segmentation = tf.zeros((0,), dtype=tf.uint8) + example['objects']['mask'] = tf.reshape( + segmentation, [-1, height, width, 1] + ) + return example # pytype: disable=bad-return-type + + +@dataclasses.dataclass +class DecodeRefCocoAnnotations: + """Decode RefCoco annotations.""" + + tokenizer_weight_path: str + num_captions_per_sample: int = -1 + max_text_tokens: int = 40 + caption_prefix: str = '' + caption_suffix: str = '' + use_text_as_context: bool = False + max_context_tokens: int = -1 + append_context_eos: bool = False + context_prefix: str = '' + context_suffix: str = '' + class_id_offset: int = 1 + refexp_field: str = 'raw' + _tokenizer: TOKENIZER = dataclasses.field(init=False) + + def __post_init__(self): + self._tokenizer = get_tokenizer(self.tokenizer_weight_path) + self._tokenizer.initialize() + + def __call__( + self, features: preprocess_spec.Features + ) -> preprocess_spec.Features: + image = tf.cast(features['image'], tf.float32) + # [num_boxes, 4] + boxes = decode_boxes(features['objects']['bbox'], tf.shape(image)[0:2]) + masks = None + if 'mask' in features['objects']: + masks = features['objects']['mask'] + + # [num_texts] + text_features = features['objects']['refexp'][self.refexp_field].flat_values # pytype: disable=attribute-error # allow-recursive-types + refexp_ids = features['objects']['refexp']['refexp_id'].flat_values # pytype: disable=attribute-error # allow-recursive-types + row_ids = features['objects']['refexp']['refexp_id'].value_rowids() # pytype: disable=attribute-error # allow-recursive-types + # [num_texts, 4] + boxes = tf.gather(boxes, row_ids) + if masks is not None: + masks = tf.gather(masks, row_ids) + + if self.num_captions_per_sample > 0: + inds = tf.random.shuffle(tf.range(tf.shape(text_features)[0]))[ + : self.num_captions_per_sample + ] + text_features = tf.gather(text_features, inds) + boxes = tf.gather(boxes, inds) + refexp_ids = tf.gather(refexp_ids, inds) + if masks is not None: + masks = tf.gather(masks, inds) + + if self.caption_prefix: + text_features = ( + tf.constant(self.caption_prefix, dtype=tf.string)[None] + + text_features + ) + if self.caption_suffix: + text_features = ( + text_features + + tf.constant(self.caption_suffix, dtype=tf.string)[None] + ) + + text_tokens = self._tokenizer.string_tensor_to_indices( + text_features, + prepend_bos=True, + append_eos=True, + max_num_tokens=self.max_text_tokens, + )[:, : self.max_text_tokens] + + target = { + 'boxes': boxes, + 'text_tokens': text_tokens, + 'labels': ( + tf.zeros(tf.shape(boxes)[0], dtype=tf.int64) + self.class_id_offset + ), + 'refexp_ids': refexp_ids, + } + + if self.use_text_as_context: + max_context_tokens = self.max_context_tokens if ( + self.max_context_tokens > 0) else self.max_text_tokens + context = text_features + if self.context_prefix: + context = tf.constant( + self.context_prefix, dtype=tf.string)[None] + context + if self.context_suffix: + context = context + tf.constant( + self.context_suffix, dtype=tf.string)[None] + context_tokens = self._tokenizer.string_tensor_to_indices( + context, + prepend_bos=False, + append_eos=self.append_context_eos, + max_num_tokens=max_context_tokens, + )[:, : max_context_tokens] + target['context_tokens'] = context_tokens + + if masks is not None: + target['masks'] = masks + + target['orig_size'] = tf.cast(tf.shape(image)[-3:-1], dtype=tf.int32) + target['size'] = tf.identity(target['orig_size']) + target['image/id'] = features['image/id'] + + output = { + 'inputs': image, + 'label': target, + } + + return output + + +@dataclasses.dataclass(frozen=True) +class AddPromptBoxes: + """Add prompt boxes.""" + num_prompts: int = -1 + zero_boxes: bool = False + use_gt_prompt: bool = False + + def __call__( + self, features: preprocess_spec.Features + ) -> preprocess_spec.Features: + image_size = features['label']['size'] + if self.num_prompts < 0: + num_prompts = tf.shape(features['label']['text_tokens'])[0] + else: + # use during inference + num_prompts = self.num_prompts + if self.use_gt_prompt: + # location conditioned captioning + prompt_boxes = features['label']['boxes'] + else: + h, w = tf.split(tf.cast(image_size, tf.float32), 2, axis=-1) + prompt_boxes = tf.concat( + [tf.zeros((2,), dtype=tf.float32), w, h], axis=-1 + ) + if self.zero_boxes: + prompt_boxes = tf.zeros_like(prompt_boxes) + prompt_boxes = tf.tile(prompt_boxes[None], [num_prompts, 1]) + features['label']['prompt_boxes'] = prompt_boxes + + return features + + +@dataclasses.dataclass(frozen=True) +class AddPromptPoints: + """Add prompt boxes.""" + num_prompts: int = -1 + num_points_per_prompt: int = 4 + + def __call__( + self, features: preprocess_spec.Features + ) -> preprocess_spec.Features: + if self.num_prompts < 0: + num_prompts = tf.shape(features['label']['text_tokens'])[0] + else: + # use during inference + num_prompts = self.num_prompts + + features['label']['prompt_points'] = tf.zeros( + (num_prompts, self.num_points_per_prompt, 2) + ) + + return features + + +@dataclasses.dataclass(frozen=True) +class AddTaskMask: + """Add task mask.""" + + tasks: Sequence[str] + + def __call__( + self, features: preprocess_spec.Features + ) -> preprocess_spec.Features: + cap_loss_valid_mask = 0 + proposal_loss_valid_mask = 0 + objcap_loss_valid_mask = 0 + point_loss_valid_mask = 0 + for task in self.tasks: + if task == 'caption': + cap_loss_valid_mask = 1 + elif task == 'detection': + proposal_loss_valid_mask = 1 + objcap_loss_valid_mask = 1 + elif task == 'point': + point_loss_valid_mask = 1 + elif task == 'proposal': + proposal_loss_valid_mask = 1 + elif task == 'object_caption': + objcap_loss_valid_mask = 1 + else: + raise ValueError(f'Unsupported task: {task}') + features['label']['cap_loss_valid_mask'] = cap_loss_valid_mask + features['label']['proposal_loss_valid_mask'] = proposal_loss_valid_mask + features['label']['objcap_loss_valid_mask'] = objcap_loss_valid_mask + features['label']['point_loss_valid_mask'] = point_loss_valid_mask + + return features + + +def split_string(input_str): + """Split string.""" + # Tokenize the string into words + words = tf.strings.split([input_str], sep=' ').values + + # Find the total number of words + num_words = tf.shape(words)[0] + + # Determine the split point, + # ensuring the second part's length is greater than half + split_point = tf.random.uniform( + (), minval=0, maxval=num_words // 2, dtype=tf.int32 + ) + + # Split the words into two parts based on the split point + first_part = words[:split_point] + second_part = words[split_point:] + + # Join the tokenized words back into strings + first_str = tf.strings.reduce_join(first_part, separator=' ') + second_str = tf.strings.reduce_join(second_part, separator=' ') + + return first_str, second_str + + +@dataclasses.dataclass(frozen=True) +class SplitText: + """Split context.""" + + def __call__( + self, features: preprocess_spec.Features + ) -> preprocess_spec.Features: + features_new = features.copy() + text_features = features['captions']['text'] + assert 'context' not in features + left_text, right_text = split_string(text_features[0]) + features_new['context'] = left_text[None] + features_new['captions']['text'] = right_text[None] + + return features_new + + +@dataclasses.dataclass(frozen=True) +class ParseVg: + """Parse VG annotations.""" + + def __call__( + self, data: preprocess_spec.Features + ) -> preprocess_spec.Features: + example = {} + example['image'] = tf.io.decode_jpeg(data['image']) + example['image/id'] = data['img_id'] + + example['objects'] = {} + example['objects']['bbox'] = tf.reshape( + data['regions/bbox'].values, [-1, 4] + ) + example['objects']['phrase'] = data['regions/phrase'].values + + return example + + +@dataclasses.dataclass +class DecodeVgAnnotations: + """Decode VG annotations.""" + + tokenizer_weight_path: str + max_text_tokens: int = 40 + num_captions_per_sample: int = -1 + caption_prefix: str = '' + caption_suffix: str = '' + class_id_offset: int = 1 + _tokenizer: TOKENIZER = dataclasses.field(init=False) + + def __post_init__(self): + self._tokenizer = get_tokenizer(self.tokenizer_weight_path) + self._tokenizer.initialize() + + def __call__( + self, features: preprocess_spec.Features + ) -> preprocess_spec.Features: + image = tf.cast(features['image'], tf.float32) + # [num_boxes, 4] + boxes = decode_boxes(features['objects']['bbox'], tf.shape(image)[0:2]) + + # [num_boxes] + text_features = features['objects']['phrase'] + + if self.caption_prefix: + text_features = ( + tf.constant(self.caption_prefix, dtype=tf.string)[None] + + text_features + ) + if self.caption_suffix: + text_features = ( + text_features + + tf.constant(self.caption_suffix, dtype=tf.string)[None] + ) + + text_tokens = self._tokenizer.string_tensor_to_indices( + text_features, + prepend_bos=True, + append_eos=True, + max_num_tokens=self.max_text_tokens, + )[:, : self.max_text_tokens] + + if self.num_captions_per_sample > 0: + inds = tf.random.shuffle(tf.range(tf.shape(text_tokens)[0]))[ + : self.num_captions_per_sample + ] + text_tokens = tf.gather(text_tokens, inds) + boxes = tf.gather(boxes, inds) + + target = { + 'boxes': boxes, + 'text_tokens': text_tokens, + 'labels': ( + tf.zeros(tf.shape(boxes)[0], dtype=tf.int64) + self.class_id_offset + ), + } + + target['orig_size'] = tf.cast(tf.shape(image)[-3:-1], dtype=tf.int32) + target['size'] = tf.identity(target['orig_size']) + target['image/id'] = features['image/id'] + + output = { + 'inputs': image, + 'label': target, + } + + return output + + +@dataclasses.dataclass(frozen=True) +class ParseLlava: + """Parse LLaVA annotations.""" + + def __call__(self, data: preprocess_spec.Features): + example = {} + example['image'] = tf.io.decode_jpeg(data['image/encoded'], channels=3) + # example['image/id'] = data['image/id'] + + example['context'] = data['conversations/human'].values + example['context'] = tf.strings.regex_replace( + example['context'], '\n', '' + ) + example['context'] = tf.strings.regex_replace( + example['context'], '\n', '' + ) + example['captions'] = {} + example['captions']['text'] = data['conversations/agent'].values + + return example diff --git a/scenic/projects/pixel_llm/io/transforms.py b/scenic/projects/pixel_llm/io/transforms.py new file mode 100644 index 0000000000000000000000000000000000000000..aae32a633ea3695dc3f4f7e4521a013c1209aecf --- /dev/null +++ b/scenic/projects/pixel_llm/io/transforms.py @@ -0,0 +1,201 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data augmentation transforms for data loading that support transforming points.""" + +from scenic.projects.baselines.centernet import transforms +import tensorflow as tf + +identity = transforms.identity +get_hw = transforms.get_hw +get_size_with_aspect_ratio = transforms.get_size_with_aspect_ratio +tf_float = transforms.tf_float + + +def resize(features, size, max_size=None): + """Resize the image to min-side = size and adjust target boxes, area, mask. + + Args: + features: dict; 'inputs' contains tf.Tensor image unbatched. 'label' is a + dictionary of label information such a boxes, area, etc. + size: tf.Tensor; Scalar for size of smallest sized after resize. + max_size: int[Optional]; Scalar upper bound on resized image dimensions. + + Returns: + Resized and adjusted features. Also features['size'] = (w, h) tuple. + """ + image = features['inputs'] + target = features['label'] + + # Resize the image while preserving aspect ratio. + original_size = tf.shape(image)[0:2] + new_size = get_size_with_aspect_ratio(original_size, size, max_size) + rescaled_image = tf.image.resize(image, new_size) + + # Compute resize ratios for each dimension to be used for scaling boxes, area. + r_height = tf_float(new_size[0] / original_size[0]) + r_width = tf_float(new_size[1] / original_size[1]) + + for key in ['boxes', 'prompt_boxes']: + if key in target: + x0, y0, x1, y1 = tf.split(target[key], 4, axis=-1) + target[key] = tf.concat( + [x0 * r_width, y0 * r_height, x1 * r_width, y1 * r_height], axis=-1 + ) + if 'points' in target: + x, y = tf.split(target['points'], 2, axis=-1) + target['points'] = tf.concat([x * r_width, y * r_height], axis=-1) + + if 'area' in target: + area = target['area'] + scaled_area = tf_float(area) * (r_width * r_height) + target['area'] = scaled_area + + target['size'] = tf.stack(new_size) + + if 'masks' in target: + dtype = target['masks'].dtype + rescaled_masks = tf.image.resize( + tf_float(target['masks']), + new_size, + method=tf.image.ResizeMethod.NEAREST_NEIGHBOR, + ) + # tf.debugging.assert_shapes(( + # (rescaled_image, [..., 'w', 'h', 3]), + # (rescaled_masks, [..., 'w', 'h', 1]), + # )) + target['masks'] = tf.cast(rescaled_masks, dtype) + + features['inputs'] = rescaled_image + features['label'] = target + return features + + +def crop(features, region): + """Crop the image + bbox (+ mask) to region. + + WARNING! Only use during train. In eval mode the original_size would need to + be updated somehow. + + Args: + features: DETR decoded input features. + region: (i, j, h, w) tuple of the region to be cropped. + + Returns: + Cropped features dictionary. + """ + image = features['inputs'] + target = features['label'] + i, j, h, w = region + + cropped_image = image[i : i + h, j : j + w, :] + features['inputs'] = cropped_image + + target['size'] = tf.stack([h, w]) + + fields = [ + 'labels', + 'area', + 'is_crowd', + 'objects/id', + 'text_tokens', + 'refexp_ids', + 'text_features', + ] + + for key in ['boxes', 'prompt_boxes']: + if key in target: + boxes = target[key] + cropped_boxes = boxes - tf_float( + tf.expand_dims(tf.stack([j, i, j, i]), axis=0) + ) + cropped_boxes = tf.minimum( + tf.reshape(cropped_boxes, [-1, 2, 2]), + tf.reshape(tf_float(tf.stack([w, h])), [1, 1, 2]), + ) + cropped_boxes = tf.clip_by_value(cropped_boxes, 0, 1000000) + target[key] = tf.reshape(cropped_boxes, [-1, 4]) + + if key == 'boxes': + fields.append('boxes') + + if 'area' in target: + area = tf.reduce_prod( + cropped_boxes[:, 1, :] - cropped_boxes[:, 0, :], axis=1 + ) + target['area'] = area + + if 'points' in target: + points = target['points'] + cropped_points = points - tf_float(tf.expand_dims(tf.stack([j, i]), axis=0)) + cropped_points = tf.minimum( + cropped_points, tf.reshape(tf_float(tf.stack([w, h])), [1, 2]) + ) + cropped_points = tf.clip_by_value(cropped_points, 0, 1000000) + target['points'] = cropped_points + # NOTE: we skip adding points into the filed because we don't wanto filter + # on points based on point index + # fields.append('points') + + if 'masks' in target: + # TODO(aravindhm): should we update the area here if there are no boxes? + target['masks'] = target['masks'][..., i : i + h, j : j + w, :] + fields.append('masks') + + # Removes elements for which the boxes or masks that have zero area. + if 'boxes' in target or 'masks' in target: + if 'boxes' in target: + cropped_boxes = tf.reshape(target['boxes'], [-1, 2, 2]) + keep = tf.logical_and( + cropped_boxes[:, 1, 0] > cropped_boxes[:, 0, 0], + cropped_boxes[:, 1, 1] > cropped_boxes[:, 0, 1], + ) + else: + keep = tf.reduce_any(tf.not_equal(target['masks'], 0), axis=[1, 2, 3]) + + for field in fields: + if field in target: + target[field] = target[field][keep] + + features['label'] = target + return features + + +def hflip(features): + """Flip an image, boxes [xyxy un-normalized] (, and masks) horizontally.""" + image = features['inputs'] + target = features['label'] + + flipped_image = tf.image.flip_left_right(image) + + for key in ['boxes', 'prompt_boxes']: + if key in target: + # Flips the boxes. + _, w = get_hw(image, dtype=tf.float32) + x0, y0, x1, y1 = tf.split(target[key], 4, axis=-1) + # Converts as [w - x1, y0, w - x0, y1] not [w - x1 - 1, w - x0 - 1, y1] + # because these are float coordinates not pixel indices. + target[key] = tf.concat([w - x1, y0, w - x0, y1], axis=-1) + + if 'points' in target: + _, w = get_hw(image, dtype=tf.float32) + x, y = tf.split(target['points'], 2, axis=-1) + target['points'] = tf.concat([w - x, y], axis=-1) + + if 'masks' in target: + target['masks'] = tf.image.flip_left_right(target['masks']) + + features['inputs'] = flipped_image + features['label'] = target + return features diff --git a/scenic/projects/pixel_llm/main.py b/scenic/projects/pixel_llm/main.py new file mode 100644 index 0000000000000000000000000000000000000000..d913977043c2e7863d926e4bd4fbd5b434e7b80f --- /dev/null +++ b/scenic/projects/pixel_llm/main.py @@ -0,0 +1,98 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for GIT.""" + +import os +from typing import Optional + +from absl import flags +from clu import metric_writers +import flax +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.pixel_llm import evaluate +from scenic.projects.pixel_llm import trainer +from scenic.projects.pixel_llm.io import flexio as custom_flexio # pylint: disable=unused-import +from scenic.projects.pixel_llm.io import ops as pixel_llm_ops # pylint: disable=unused-import +from scenic.projects.pixel_llm.modeling import pixel_llm as pixel_llm_model +from scenic.train_lib import train_utils + + +FLAGS = flags.FLAGS + + +def get_dataset( + config: ml_collections.ConfigDict, + data_rng: jnp.ndarray, + dataset_service_address: Optional[str], +): + """Returns dataset given config.""" + return train_utils.get_dataset( + config, + data_rng, + dataset_service_address=dataset_service_address, + ) + + +def get_trainer_fn(config: ml_collections.ConfigDict): + """Returns trainer function given config.""" + + trainer_name = config.get('trainer', '') + eval_only = config.get('eval_only', False) or trainer_name == 'evaluator' + + kwargs = {} + if eval_only: + trainer_fn = evaluate.evaluate + else: + trainer_fn = trainer.train_and_evaluate + + return trainer_fn, kwargs + + +def main( + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + workdir: str, + writer: metric_writers.MetricWriter, +): + """Main function for the PixelLLM project.""" + # Temporary fixing flax checkpoint migration issue. + flax.config.update('flax_use_orbax_checkpointing', False) + + trainer_fn, kwargs = get_trainer_fn(config) + model_cls = pixel_llm_model.PixelLlmModel + + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, + data_rng, + dataset_service_address=FLAGS.dataset_service_address, + ) + + trainer_fn( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer, + **kwargs, + ) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/pixel_llm/modeling/box_decoder.py b/scenic/projects/pixel_llm/modeling/box_decoder.py new file mode 100644 index 0000000000000000000000000000000000000000..7d9d7d12bbae02f72ba477205d7608d56e2e1ce4 --- /dev/null +++ b/scenic/projects/pixel_llm/modeling/box_decoder.py @@ -0,0 +1,288 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Box decoder based on CenterNet2.""" + +import functools +import math +from typing import Any, Dict, Optional +import flax.linen as nn +import jax +import jax.numpy as jnp +from scenic.projects.baselines.centernet.modeling import centernet2 +from scenic.projects.baselines.centernet.modeling import centernet_head +from scenic.projects.baselines.centernet.modeling import fpn +from scenic.projects.baselines.centernet.modeling import iou_assignment +from scenic.projects.baselines.centernet.modeling import roi_head_utils +from scenic.projects.baselines.centernet.modeling import roi_heads + +Assignment = iou_assignment.Assignment + + +class SimpleFeaturePyramid(nn.Module): + """This module implements SimpleFeaturePyramid in paper:`vitdet`. + + It creates pyramid features built on top of the input feature map. + + Modified: remove backbone args to take feature map as input + + Attributes: + out_channels (int): number of channels in the output feature maps. + scale_factors (list[float]): list of scaling factors to upsample or + downsample the input features for creating pyramid features. + num_top_blocks (int): top level downsample block + norm (str): the normalization to use. + """ + + in_dim: int = 768 + out_channels: int = 256 + scale_factors: Any = (2.0, 1.0, 0.5) + num_top_blocks: int = 2 + num_additional_convs: int = 0 + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, features: jnp.ndarray, train: bool = False): + results = [] + # dim = features.shape[-1] + dim = self.in_dim + conv_transpose = functools.partial( + nn.ConvTranspose, kernel_size=(2, 2), strides=(2, 2), dtype=self.dtype + ) + ln = functools.partial(nn.LayerNorm, epsilon=1e-6) + conv = functools.partial(nn.Conv, use_bias=False, dtype=self.dtype) + for scale in self.scale_factors: + x = features + if scale == 4.0: + stage, idx_base = 2, 4 + x = conv_transpose(dim // 2, name='simfp_2.0')(x) + x = ln(name='simfp_2.1')(x) + x = nn.gelu(x, approximate=False) + x = conv_transpose(dim // 4, name='simfp_2.3')(x) + elif scale == 2.0: + stage, idx_base = 3, 1 + x = conv_transpose(dim // 2, name='simfp_3.0')(x) + elif scale == 1.0: + stage, idx_base = 4, 0 + elif scale == 0.5: + stage, idx_base = 5, 1 + x = nn.max_pool(x, (2, 2), strides=(2, 2)) + else: + raise NotImplementedError(f'scale_factor={scale} is not supported yet.') + x = conv( + self.out_channels, + kernel_size=(1, 1), + name=f'simfp_{stage}.{idx_base}', + )(x) + x = ln(name=f'simfp_{stage}.{idx_base}.norm')(x) + x = conv( + self.out_channels, + kernel_size=(3, 3), + padding=[(1, 1), (1, 1)], + name=f'simfp_{stage}.{idx_base + 1}', + )(x) + x = ln(name=f'simfp_{stage}.{idx_base + 1}.norm')(x) + if self.num_additional_convs > 0: + for i in range(self.num_additional_convs): + x = conv( + self.out_channels, + kernel_size=(3, 3), + padding=[(1, 1), (1, 1)], + name=f'simfp_{stage}.{idx_base + 2 + i}', + )(x) + x = ln(name=f'simfp_{stage}.{idx_base + 2 + i}.norm')(x) + results.append(x) + + if self.num_top_blocks == 1: + x = nn.max_pool( + results[-1], (1, 1), strides=(2, 2), padding=[(0, 0), (0, 0)] + ) + results.append(x) + elif self.num_top_blocks == 2: + top_block = fpn.TwiceDownsampleBlock( + out_channels=self.out_channels, dtype=self.dtype, name='top_block' + ) + p6, p7 = top_block(results[-1]) + results.extend([p6, p7]) + else: + if self.num_top_blocks != 0: + raise NotImplementedError( + f'num_top_blocks={self.num_top_blocks} is not supported yet.' + ) + return results + + +class FpnCenterNet2(centernet2.CenterNet2Detector): + """CenterNet2 with SimpleFPN without backbone.""" + + match_gt_thresh: float = 0.8 + use_roi_box_in_training: bool = False + + def setup(self): + self.fpn = SimpleFeaturePyramid(**self.fpn_args, name='fpn') + self.proposal_generator = centernet_head.CenterNetHead( + num_classes=self.num_classes, + dtype=self.dtype, + num_levels=len(self.strides), + name='proposal_generator', + ) + + self.roi_heads = roi_heads.CascadeROIHeads( + input_strides={str(int(math.log2(s))): s for s in self.strides}, + num_classes=self.roi_num_classes, + conv_dims=self.roi_conv_dims, + conv_norm=self.roi_conv_norm, + fc_dims=self.roi_fc_dims, + samples_per_image=self.roi_samples_per_image, + positive_fraction=self.roi_positive_fraction, + matching_threshold=self.roi_matching_threshold, + nms_threshold=self.roi_nms_threshold, + class_box_regression=self.roi_class_box_regression, + mult_proposal_score=self.roi_mult_proposal_score, + scale_cascade_gradient=self.roi_scale_cascade_gradient, + use_sigmoid_ce=self.roi_use_sigmoid_ce, + add_box_pred_layers=self.roi_add_box_pred_layers, + return_last_proposal=True, + return_detection_in_training=self.use_roi_box_in_training, + score_threshold=self.roi_score_threshold, + post_nms_num_detections=self.roi_post_nms_num_detections, + ) + + @nn.compact + def __call__( # pytype: disable=signature-mismatch + self, + image_embeddings: jnp.ndarray, + image_shape: jnp.ndarray, + gt_boxes: Optional[jnp.ndarray] = None, + gt_classes: Optional[jnp.ndarray] = None, + train: bool = False, + postprocess: bool = True, + debug: bool = False, + ) -> Any: + """Applies CenterNet2 model on the image embedding. + + Args: + image_embeddings: B x H' x W' x D + image_shape: Bx2 + gt_boxes: B x N x 4. Only used in training. + gt_classes: B x N. Only used in training. + train: Whether it is training. + postprocess: If true, return post-processed boxes withe scores and + classes; If false, return raw network outputs from FPN: heatmaps, + regressions, RoI regression and classification. + debug: Whether the debug mode is enabled. debug=True enables model + specific logging/storing some values using jax.host_callback. + + Returns: + If postprocess == False, return a dict of outputs. See the output of + CenterNetDetector for details. In addition of outputs from CenterNet, + return outputs from the RoI heads. That includes losses (if train==True) + or raw outputs from the RoI heads (if train==False). + If postprocess == True, return a list of tuples. Each tuple is + three arrays (boxes, scores, classes). boxes is in shape of + n x 4, scores and classes are both in shape n. + """ + backbone_features = self.fpn( + image_embeddings, train=train + ) + outputs = self.proposal_generator(backbone_features, train=train) + + pre_nms_topk = self.pre_nms_topk_train if train else self.pre_nms_topk_test + post_nms_topk = ( + self.post_nms_topk_train if train else self.post_nms_topk_test + ) + boxes, scores, classes = self.extract_peaks( + outputs, pre_nms_topk=pre_nms_topk + ) + proposals = self.nms(boxes, scores, classes, post_nms_topk=post_nms_topk) + proposal_boxes = jnp.stack( + [x[0] for x in proposals], axis=0 + ) # B x num_prop x 4 + proposal_boxes = roi_head_utils.clip_boxes( + proposal_boxes, image_shape[:, None, [1, 0]]) + proposal_scores = jnp.stack( + [x[1] for x in proposals], axis=0 + ) # B x num_propq + rpn_features = { + str(int(math.log2(s))): v + for s, v in zip(self.strides, backbone_features) + } + # unlike project/centernet impl, we use 1-based class labels by default, so + # we commented out below conversion + # if gt_classes is not None and gt_boxes is not None: + # gt_classes = gt_classes + (gt_boxes.max(axis=2) > 0) + # NOTE: convert gt_class to class agnostic + if self.roi_num_classes == 1 and gt_classes is not None: + gt_classes = jnp.where(gt_classes > 0, 1, 0) + + detections, metrics = self.roi_heads( + rpn_features, + image_shape, + gt_boxes, + gt_classes, + proposal_boxes, + proposal_scores, + training=train, + postprocess=postprocess, + debug=debug, + ) + detections.update(outputs) + return detections, metrics + + def match_gt(self, proposals, gt_boxes, gt_classes): + """Match proposals and their texts based on bounding box IoU. + + Args: + proposals: Boxes with array (B, samples_per_image, 4). + gt_boxes: Boxes with array (B, max_gt_boxes, 4). + gt_classes: (B, max_gt_boxes). This is needed for background padding. + + Returns: + matched_idxs: shape (B, samples_per_image). + matched: shape (B, samples_per_image): 0 or 1. + """ + + def _impl(proposals, gt_boxes, gt_classes): + iou = roi_head_utils.pairwise_iou(gt_boxes, proposals) + matched_idxs, assignments = iou_assignment.label_assignment( + iou, + [self.match_gt_thresh], + [Assignment.NEGATIVE, Assignment.POSITIVE], + ) + matched_classes = gt_classes[matched_idxs] + matched_classes = jnp.where( + assignments != Assignment.POSITIVE, 0, matched_classes + ) + return matched_idxs, matched_classes + + matched_idxs, matched_classes = jax.vmap(_impl, in_axes=0)( + proposals, gt_boxes, gt_classes + ) + return matched_idxs, matched_classes + + def loss_function( + self, + detections: Dict[str, jnp.ndarray], + metrics: Dict[str, jnp.ndarray], + gt_boxes: jnp.ndarray, + gt_classes: jnp.ndarray, + ): + # NOTE: proposal_generator use 0 based gt_classes + gt_classes = jnp.maximum(gt_classes - 1, 0) + loss, metrics = super().loss_function( + {**detections, 'metrics': metrics}, + {'label': {'boxes': gt_boxes, 'labels': gt_classes}}, + ) + metrics['det_loss'] = metrics.pop('total_loss') + return loss, metrics diff --git a/scenic/projects/pixel_llm/modeling/builder.py b/scenic/projects/pixel_llm/modeling/builder.py new file mode 100644 index 0000000000000000000000000000000000000000..3323ad32dac53275f094ea41cdae8721966f841a --- /dev/null +++ b/scenic/projects/pixel_llm/modeling/builder.py @@ -0,0 +1,172 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Builder functions for PixelLLM.""" + + +import ml_collections +from scenic.projects.baselines.centernet.modeling import vitdet as centernet_vit +from scenic.projects.baselines.segment_anything.modeling import image_encoder as sam_vit +from scenic.projects.baselines.segment_anything.modeling import mask_decoder +from scenic.projects.baselines.segment_anything.modeling import prompt_encoder +from scenic.projects.pixel_llm.modeling import box_decoder +from scenic.projects.pixel_llm.modeling import eva02_vit +from scenic.projects.pixel_llm.modeling import layers +from scenic.projects.pixel_llm.modeling import mask_adapter +from scenic.projects.pixel_llm.modeling import point_predictor +from scenic.projects.pixel_llm.modeling import prompt_adapter +from scenic.projects.pixel_llm.modeling import t5_text_head +from scenic.projects.pixel_llm.modeling import text_decoder + +ConfigDict = ml_collections.ConfigDict + + +def get_image_encoder( + encoder_type: str, + encoder_args: ConfigDict, + param_name: str = 'image_encoder', +): + """Returns an image encoder.""" + if encoder_type == 'eva02_vit': + return eva02_vit.ViT(**encoder_args, name=param_name) + elif encoder_type == 'sam_vit': + return sam_vit.ImageEncoderViT(**encoder_args, name=param_name) + elif encoder_type == 'centernet_vit': + return centernet_vit.ViT(**encoder_args, name=param_name) + elif encoder_type == 'none': + return None + else: + raise ValueError(f'Unknown encoder type {encoder_type}.') + + +def get_mask_decoder( + decoder_type: str, + decoder_args: ConfigDict, + param_name: str = 'mask_decoder', +): + """Returns a mask decoder.""" + if decoder_type == 'sam_mask_decoder': + return mask_decoder.MaskDecoder(**decoder_args, name=param_name) + elif decoder_type == 'none': + return None + else: + raise ValueError(f'Unknown decoder type {decoder_type}.') + + +def get_prompt_encoder( + encoder_type: str, + encoder_args: ConfigDict, + param_name: str = 'prompt_encoder', +): + """Returns an prompt encoder.""" + if encoder_type == 'sam_prompt_encoder': + return prompt_encoder.PromptEncoder(**encoder_args, name=param_name) + elif encoder_type == 'none': + return None + else: + raise ValueError(f'Unknown encoder type {encoder_type}.') + + +def get_prompt_adapter( + adapter_type: str, + adapter_args: ConfigDict, + param_name: str = 'prompt_adapter', +): + """Returns an prompt adapter.""" + if adapter_type == 'sam_prompt_adapter': + return prompt_adapter.PromptAdaptor(**adapter_args, name=param_name) + elif adapter_type == 'none': + return None + else: + raise ValueError(f'Unknown adapter type {adapter_type}.') + + +def get_point_predictor( + predictor_type: str, + predictor_args: ConfigDict, + param_name: str = 'point_predictor', +): + """Returns an point predictor.""" + if predictor_type == 'mlp_point_predictor': + return point_predictor.MlpPointPredictor( + **predictor_args, name=param_name + ) + elif predictor_type == 'none': + return None + else: + raise ValueError(f'Unknown predictor type {predictor_type}.') + + +def get_text_decoder( + decoder_type: str, + vocab_size: int, + decoder_args: ConfigDict, + param_name: str = 'textual', +): + """Returns a text decoder.""" + if decoder_type == 'git': + return text_decoder.TransformerDecoderTextualHead( + vocab_size=vocab_size, + **decoder_args, name=param_name) + elif 't5' in decoder_type: + return t5_text_head.T5TextualHead( + t5_model=decoder_type, + **decoder_args, + name=param_name) + elif decoder_type == 'none': + return None + else: + raise ValueError(f'Unknown decoder type {decoder_type}.') + + +def get_box_decoder( + decoder_type: str, + decoder_args: ConfigDict, + param_name: str = 'box_decoder', +): + """Returns a box decoder.""" + if decoder_type == 'centernet2_det_decoder': + return box_decoder.FpnCenterNet2(**decoder_args, name=param_name) + elif decoder_type == 'none': + return None + else: + raise ValueError(f'Unknown decoder type {decoder_type}.') + + +def get_project_layers( + project_layers_type: str, + project_layers_args: ConfigDict, + param_name: str = 'project_layers', +): + """Returns a project layers.""" + if project_layers_type == 'linear': + return layers.LinearProjectLayers(**project_layers_args, name=param_name) + elif project_layers_type == 'none': + return None + else: + raise ValueError(f'Unknown project layers type {project_layers_type}.') + + +def get_mask_adapter( + mask_adapter_type: str, + mask_adapter_args: ConfigDict, + param_name: str = 'mask_adapter', +): + """Returns a mask adapter.""" + if mask_adapter_type == 'sam_mask_adapter': + return mask_adapter.SamMaskAdaptor(**mask_adapter_args, name=param_name) + elif mask_adapter_type == 'none': + return None + else: + raise ValueError(f'Unknown mask adapter type {mask_adapter_type}.') diff --git a/scenic/projects/pixel_llm/modeling/eva02_vit.py b/scenic/projects/pixel_llm/modeling/eva02_vit.py new file mode 100644 index 0000000000000000000000000000000000000000..66aedc74e8cd7bf4663a324c0b98551ccb83db28 --- /dev/null +++ b/scenic/projects/pixel_llm/modeling/eva02_vit.py @@ -0,0 +1,356 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""ViT backbone in EVA02. + +arXiv: https://arxiv.org/pdf/2303.11331.pdf + +Pytorch reference: https://github.com/baaivision/EVA/blob/HEAD/EVA-02/asuka/ +modeling_pretrain.py + +Weight converted in +https://colab.research.google.com/drive/1xlyHCUavh0OVaTUMmN-jOSRljvy5K4HI + +Verified logits error in ~1e-1 with random inputs. +""" + +import functools +from typing import Any, Callable, Optional + +import einops +import flax.linen as nn +import jax +import jax.numpy as jnp + + +class Attention(nn.Module): + """Multi-head Attention block with relative position embeddings. + + Attributes: + dim (int): Number of input channels. + num_heads (int): Number of attention heads. + """ + dim: int + rope: Callable[[jnp.ndarray, Optional[jnp.ndarray]], jnp.ndarray] + num_heads: int = 8 + kernel_init: str = 'normal' + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x, inds=None): + """Forward a block. + + Args: + x: (batch_size, num_tokens, dim); + inds: (num_mae_tokens,) + + Returns: + x: the same shape as the input. + """ + + batch, num_tokens, _ = x.shape + head_dim = self.dim // self.num_heads + + q = nn.Dense(self.dim, use_bias=False, name='q_proj')(x) + k = nn.Dense(self.dim, use_bias=False, name='k_proj')(x) + v = nn.Dense(self.dim, use_bias=False, name='v_proj')(x) + + q = q + self.param('q_bias', nn.initializers.zeros, (self.dim,))[None, None] + v = v + self.param('v_bias', nn.initializers.zeros, (self.dim,))[None, None] + + q = q.reshape(batch, num_tokens, self.num_heads, -1).transpose( + 0, 2, 1, 3).reshape(batch * self.num_heads, num_tokens, -1) + k = k.reshape(batch, num_tokens, self.num_heads, -1).transpose( + 0, 2, 1, 3).reshape(batch * self.num_heads, num_tokens, -1) + v = v.reshape(batch, num_tokens, self.num_heads, -1).transpose( + 0, 2, 1, 3).reshape(batch * self.num_heads, num_tokens, -1) + + q_t = q[:, 1:, :] + ro_q_t = self.rope(q_t, inds) + q = jnp.concatenate([q[:, :1, :], ro_q_t], axis=-2) + + k_t = k[:, 1:, :] + ro_k_t = self.rope(k_t, inds) + k = jnp.concatenate([k[:, :1, :], ro_k_t], axis=-2) + + attn = (q * (head_dim ** -0.5)) @ k.transpose( + 0, 2, 1) # [batch * num_heads, num_tokens, num_tokens] + + attn = jax.nn.softmax(attn) + x = (attn @ v).reshape( + batch, self.num_heads, num_tokens, -1).transpose( + 0, 2, 1, 3).reshape(batch, num_tokens, -1) + + x = nn.Dense(self.dim, name='proj')(x) + return x + + +class SwiGLU(nn.Module): + """SwiGLU layer.""" + + hidden_features: int + + @nn.compact + def __call__(self, x): + in_features = x.shape[-1] + x1 = nn.Dense(self.hidden_features, name='w1')(x) + x2 = nn.Dense(self.hidden_features, name='w2')(x) + hidden = jax.nn.silu(x1) * x2 + x = nn.LayerNorm(epsilon=1e-5, name='ffn_ln')(hidden) + x = nn.Dense(in_features, name='w3')(x) + return x + + +class Block(nn.Module): + """Transformer blocks with support of window attention and residual blocks. + + Attributes: + dim (int): Number of input channels. + num_heads (int): Number of attention heads in each ViT block. + mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. + drop_path (float): Stochastic depth rate. + """ + dim: int + num_heads: int + rope: Callable[[jnp.ndarray, Optional[jnp.ndarray]], jnp.ndarray] + mlp_ratio: float = 4.0 + drop_path: float = 0.0 + kernel_init: str = 'normal' + dtype: jnp.dtype = jnp.float32 + + def get_keep_pattern(self, + x: jnp.ndarray, + deterministic: bool): + """DropPath Layer.""" + if not deterministic and self.drop_path: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + drop_pattern = jax.random.bernoulli( + self.make_rng('dropout'), self.drop_path, shape).astype(self.dtype) + keep_pattern = (1. - drop_pattern) + if self.drop_path < 1.: + keep_pattern = keep_pattern / (1. - self.drop_path) + return keep_pattern + else: + return 1.0 + + @nn.compact + def __call__(self, x, inds=None, train: bool = False): + shortcut = x + ln = functools.partial(nn.LayerNorm, epsilon=1e-6) + x = ln(name='norm1')(x) + + x = Attention( + self.dim, + num_heads=self.num_heads, + rope=self.rope, + name='attn')(x, inds=inds) + + x = shortcut + self.get_keep_pattern(x, not train) * x + + y = ln(name='norm2')(x) + + y = SwiGLU( + hidden_features=int(self.dim * self.mlp_ratio), + name='mlp')(y) + x = x + self.get_keep_pattern(y, not train) * y + return x + + +def _broadcast_and_concatenate(x, y): + """Broadcast and concatenate two tensors (_broadcat in original). + + Args: + x: (b1, 1, d) + y: (1, b2, d) + Returns: + ret: (b1, b2, d * 2) + """ + b1, b2, d = x.shape[0], y.shape[1], x.shape[2] + x = jnp.broadcast_to(x, (b1, b2, d)) + y = jnp.broadcast_to(y, (b1, b2, d)) + return jnp.concatenate([x, y], axis=2) + + +def vision_rotary_embedding_fast( + x, inds, dim, pt_seq_len=16, ft_seq_len=None, theta=10000): + """Rotary positional embedding used in EVA02.""" + freqs = 1. / (theta ** (jnp.arange(0, dim, 2)[ + :(dim // 2)].astype(jnp.float32) / dim)) + ft_seq_len = ft_seq_len if ( + ft_seq_len is not None) else pt_seq_len + t = jnp.arange( + ft_seq_len).astype(jnp.float32) / ft_seq_len * pt_seq_len + + freqs = jnp.einsum('..., f -> ... f', t, freqs) + freqs = einops.repeat(freqs, '... n -> ... (n r)', r=2) + freqs = _broadcast_and_concatenate(freqs[:, None, :], freqs[None, :, :]) + freqs = freqs.reshape(-1, freqs.shape[-1]) + freqs_cos = jnp.cos(freqs) + freqs_sin = jnp.sin(freqs) + def _rotate_half(x): + x = einops.rearrange(x, '... (d r) -> ... d r', r=2) + x = jnp.stack([-x[..., 1], x[..., 0]], axis=-1) + return einops.rearrange(x, '... d r -> ... (d r)') + if inds is not None: + freqs_cos = jnp.take_along_axis(freqs_cos, inds[:, None], axis=0) + freqs_sin = jnp.take_along_axis(freqs_sin, inds[:, None], axis=0) + return x * freqs_cos[None] + _rotate_half(x) * freqs_sin[None] + + +class ViT(nn.Module): + """ViT backbone used in EVA02 paper. + + Main differences with respect to the original ViT include: + + - Use sub-LN instead of pre-LN + - Use SwiGLU as FFN instead of MLP + - Use 2D Rotary positional embedding instead of abs PE. + - Use a different initialization + """ + patch_size: int = 16 + in_chans: int = 3 + embed_dim: int = 768 + depth: int = 12 + num_heads: int = 12 + mlp_ratio: float = 4.0 + drop_path_rate: float = 0.1 + use_abs_pos: bool = True + pretrain_img_size: int = 224 + pretrain_use_cls_token: bool = True + kernel_init: str = 'normal' + freeze_vit_layer: int = -1 + use_ln_pre: bool = False + use_ln_post: bool = False + pe_bias: bool = True + dtype: jnp.dtype = jnp.float32 + token_mask_probability: float = -1.0 + window_block_indexes: Any = None + use_rel_pos: Any = None + stop_grad_conv1: bool = False + + def _get_abs_pos(self, abs_pos, hw): + """Calculate absolute positional embeddings. + + If needed, resize embeddings and remove cls_token dimension for the original + embeddings. + Args: + abs_pos (array): absolute positional embeddings with (1, num_position, C). + hw (Tuple): size of input image tokens. + Returns: + Absolute positional embeddings after processing with shape (1, H, W, C) + """ + h, w = hw + if self.pretrain_use_cls_token: + abs_pos_no_cls = abs_pos[:, 1:] + else: + abs_pos_no_cls = abs_pos + xy_num = abs_pos_no_cls.shape[1] + size = int(xy_num ** 0.5) + assert size * size == xy_num + abs_pos_no_cls = abs_pos_no_cls.reshape( + abs_pos_no_cls.shape[0], size, size, -1) + if size != h or size != w: + abs_pos_no_cls = jax.image.resize( + abs_pos_no_cls, + (abs_pos_no_cls.shape[0], h, w, abs_pos_no_cls.shape[3]), + method='bicubic', + ) + abs_pos_no_cls = abs_pos_no_cls.reshape( + abs_pos_no_cls.shape[0], h * w, -1) + new_abs_pos = jnp.concatenate([abs_pos[:, :1], abs_pos_no_cls], axis=1) + else: + new_abs_pos = abs_pos + return new_abs_pos + + @nn.compact + def __call__(self, x: jnp.ndarray, train: bool = False): + """Forward ViT backbone. + + Args: + x: (batch_size, height, width, 3) the input image + train: bool; + Returns: + x: the features after the backbone. (batch_size, seq_length, embed_dim). + """ + image_size = x.shape[1] + x = nn.Conv( + self.embed_dim, (self.patch_size, self.patch_size), + strides=(self.patch_size, self.patch_size), + padding='VALID', + use_bias=self.pe_bias, + name='patch_embed.proj')(x) + x = x.reshape(x.shape[0], -1, x.shape[-1]) # (B, hw, C) + + if self.stop_grad_conv1: + x = jax.lax.stop_gradient(x) + + cls_token = self.param( + 'cls_token', nn.initializers.zeros, (1, 1, self.embed_dim)) + cls_token = jnp.broadcast_to( + cls_token, (x.shape[0], 1, self.embed_dim)) + x = jnp.concatenate([cls_token, x], axis=1) + + if self.use_abs_pos: + num_patches = (self.pretrain_img_size // self.patch_size) ** 2 + num_positions = ( + num_patches + 1) if self.pretrain_use_cls_token else num_patches + pos_embed = self.param( + 'pos_embed', nn.initializers.zeros, + (1, num_positions, self.embed_dim)) + input_size = int((x.shape[1] - 1) ** 0.5) + x = x + self._get_abs_pos(pos_embed, (input_size, input_size)) + + rope = functools.partial( + vision_rotary_embedding_fast, + dim=self.embed_dim // self.num_heads // 2, + pt_seq_len=image_size // self.patch_size) + + inds = None + # TODO(zhouxy): The current MAE is not optimal. We sample a single index + # for all images in the batch. We should use different indexes each image. + # TODO(zhouxy): move this to a model_utils.py file and reuse in other files. + if self.token_mask_probability > 0: + num_pixel_tokens = x.shape[1] - 1 + if train: + num_remaining_tokens = int( + (1.0 - self.token_mask_probability) * num_pixel_tokens) + inds = jax.random.permutation( + self.make_rng('dropout'), + jnp.arange(num_pixel_tokens, dtype=jnp.int32), + independent=True, + )[:num_remaining_tokens] + else: + inds = jnp.arange(num_pixel_tokens, dtype=jnp.int32) + unmasked_pixel_tokens = jnp.take_along_axis( + x[:, 1:], inds[None, :, None], axis=1) + x = jnp.concatenate([x[:, :1], unmasked_pixel_tokens], axis=1) + + dp_rates = [ + self.drop_path_rate * i / (self.depth - 1) for i in range(self.depth)] + if self.use_ln_pre: + x = nn.LayerNorm(name='ln_pre')(x) + for i in range(self.depth): + x = Block( + dim=self.embed_dim, + num_heads=self.num_heads, + mlp_ratio=self.mlp_ratio, + drop_path=dp_rates[i], + rope=rope, + name=f'blocks.{i}', + )(x, inds, train=train) + if i + 1 == self.freeze_vit_layer: + x = jax.lax.stop_gradient(x) + if self.use_ln_post: + x = nn.LayerNorm(name='ln_post')(x) + return x diff --git a/scenic/projects/pixel_llm/modeling/layers.py b/scenic/projects/pixel_llm/modeling/layers.py new file mode 100644 index 0000000000000000000000000000000000000000..9d3ff8c6f83468e285921a4cbe734400301374c0 --- /dev/null +++ b/scenic/projects/pixel_llm/modeling/layers.py @@ -0,0 +1,36 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Layer utilis.""" + +import flax.linen as nn + + +class LinearProjectLayers(nn.Module): + """Linear projection layer.""" + emb_dim: int = 1024 + use_projection_ln: bool = True + + @nn.compact + def __call__(self, x, train=False): + # The name `visual_projection.x` is for a historical reason to load + # weights for other decoders. This is not meaningful here now. + x = nn.Dense( + self.emb_dim, name='visual_projection.0', + kernel_init=nn.initializers.normal(stddev=0.02))( + x) # (batch_size, feature_length, hidden_size) + if self.use_projection_ln: + x = nn.LayerNorm( + epsilon=1e-5, name='visual_projection.1')(x) + return x diff --git a/scenic/projects/pixel_llm/modeling/losses.py b/scenic/projects/pixel_llm/modeling/losses.py new file mode 100644 index 0000000000000000000000000000000000000000..3690e0884dc9e21c3a1c850e8413c8fd7bc43890 --- /dev/null +++ b/scenic/projects/pixel_llm/modeling/losses.py @@ -0,0 +1,282 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Loss functions for PixelLLM.""" + +import jax +import jax.numpy as jnp +import optax +from scenic.model_lib.base_models import model_utils + + +def text_loss( + text_outputs, + gt_text, + mask=None, + label_smooth=0.1, + end_token_id: int = 102, # tokenizer.sep_token_id == 102 + vocab_size: int = 30522, # size of BertTokenizer +): + """Text loss with label smoothing. + + Args: + text_outputs: (text_batch_size, max_caption_length, vocab_size) + gt_text: (text_batch_size, max_caption_length) + mask: (text_batch_size,) + label_smooth: float + end_token_id: int + vocab_size: int + + Returns: + loss: float + """ + if text_outputs.ndim == 4: + text_outputs = text_outputs.reshape( + (text_outputs.shape[0] * text_outputs.shape[1],) + + text_outputs.shape[2:] + ) + gt_text = gt_text.reshape( + gt_text.shape[0] * gt_text.shape[1], + gt_text.shape[2], + ) # (batch_size * num_caps_per_image, max_cap_len) + if mask is None: + mask = jnp.ones((gt_text.shape[0],)) + else: + mask = mask.reshape((gt_text.shape[0],)) + text_outputs = text_outputs[:, :-1] # Move gt 1 word to the right. + gt_text = gt_text[:, 1:] # No need to predict BOS + # valid: (text_batch_size, max_caption_length - 1) + valid = ((gt_text > 0) & (mask[:, None] > 0)) + # Ignore samples with empty ground truth (from padding). + valid = valid & (gt_text[:, 0] != end_token_id)[:, None] + valid = valid.astype(jnp.float32) + # gt: (text_batch_size, max_caption_length - 1, vocab_size) + gt = jax.nn.one_hot(gt_text, vocab_size) + # customized label smoothing following GRiT + # https://github.com/JialianW/GRiT/blob/master/grit/modeling/text/ + # text_decoder.py#L668 + gt = gt * (1. - label_smooth) + (1. - gt) * label_smooth / (vocab_size - 1) + # loss: (text_batch_size, max_caption_length - 1) + gt = jax.lax.stop_gradient(gt) + loss = optax.softmax_cross_entropy(text_outputs, gt) + loss = (loss * valid[:, :]).sum() / (valid.sum() + 1e-8) + return {'text_loss': loss} + + +def point_loss( + pred_points, + pred_valid_mask, + gt_points, + gt_valid_mask, + loss_type='l1', +): + """L1 point loss. + + Args: + pred_points: (batch_size, num_caps_per_image, max_cap_len, + num_points, 2) + pred_valid_mask: (batch_size, num_caps_per_image, max_cap_len) + gt_points: (batch_size, num_caps_per_image, max_cap_len, num_points, 2) + or (batch_size, num_caps_per_image, num_points, 2) + gt_valid_mask: (batch_size, num_caps_per_image, max_cap_len) + or (batch_size, num_caps_per_image) + loss_type: l1 or l2 + + Returns: + loss: dict[str, float] + """ + + batch_size, num_caps_per_image, max_cap_len = pred_points.shape[:3] + num_points = pred_points.shape[-2] + + if gt_points.ndim == 4: + # [batch_size, num_caps_per_image, max_cap_len, num_points, 2] + gt_points = jnp.broadcast_to( + jnp.expand_dims(gt_points, axis=2), pred_points.shape + ) + + if gt_valid_mask.ndim == 2: + # [batch_size, num_caps_per_image, max_cap_len] + gt_valid_mask = jnp.broadcast_to( + jnp.expand_dims(gt_valid_mask, axis=2), pred_points.shape[:-2] + ) + + assert pred_points.shape == gt_points.shape + assert pred_valid_mask.shape == gt_valid_mask.shape + + pred_valid_mask = pred_valid_mask.astype(jnp.int32) + gt_valid_mask = gt_valid_mask.astype(jnp.int32) + + total_batch = batch_size * num_caps_per_image * max_cap_len + + pred_points = jnp.reshape(pred_points, (total_batch, num_points, 2)) + gt_points = jnp.reshape(gt_points, (total_batch, num_points, 2)) + + pred_valid_mask = jnp.reshape(pred_valid_mask, (total_batch,)) + gt_valid_mask = jnp.reshape(gt_valid_mask, (total_batch,)) + + denom = jnp.maximum(jnp.sum(gt_valid_mask * pred_valid_mask), 1.0) + + # [total_batch, ] + if loss_type == 'l1': + loss_point = jnp.abs(pred_points - gt_points).mean(axis=(-2, -1)) + elif loss_type == 'l2': + loss_point = jnp.square(pred_points - gt_points).mean(axis=(-2, -1)) + elif loss_type == 'l1_nonzero': + loss_point = jnp.abs(pred_points - gt_points).mean(axis=(-2, -1)) + gt_valid_mask = gt_valid_mask * ( + (gt_points ** 2).sum(axis=(-2, -1)) > 0).astype(jnp.float32) + denom = jnp.maximum(jnp.sum(gt_valid_mask * pred_valid_mask), 1.0) + else: + raise ValueError(f'Unknown loss type: {loss_type}') + loss_point = loss_point * gt_valid_mask * pred_valid_mask + loss_point = loss_point.sum() / denom + + metrics = {'point_loss': loss_point} + + return metrics + + +def sam_mask_loss( + pred_masks, + pred_ious, + gt_masks, + gt_valid, + padding_mask, + focal_loss_weight: float = 20.0, + dice_loss_weight: float = 1.0, + iou_pred_loss_weight: float = 1.0, +): + """Mask loss following SAM. + + Args: + pred_masks: (batch_size, num_masks_per_image, num_masks_per_prompt, H, W) + pred_ious: (batch_size, num_masks_per_image, num_masks_per_prompt) + gt_masks: (batch_size, num_masks_per_image, H, W, 1) + gt_valid: (batch_size, num_caps_per_image) + padding_mask: (batch_size, H, W) + focal_loss_weight: + dice_loss_weight: + iou_pred_loss_weight: + + Returns: + loss: dict[str, float] + """ + gt_masks = (gt_masks > 0).astype(jnp.float32) + + metrics = {} + num_masks_per_image, num_masks_per_prompt = pred_masks.shape[1:3] + assert pred_ious.shape == pred_masks.shape[:3] + + batch_size = pred_masks.shape[0] + num_masks = num_masks_per_image * num_masks_per_prompt + + # [batch_size, num_masks_per_image, 1, 1, 1] + mask_valid = jnp.reshape( + gt_valid, (gt_valid.shape[0], gt_valid.shape[1], 1, 1, 1) + ) + # [batch_size, num_masks_per_image, num_masks_per_prompt, 1, 1] + mask_valid = jnp.tile(mask_valid, (1, 1, num_masks_per_prompt, 1, 1)) + # [batch_size, num_masks, 1, 1] + mask_valid = jnp.reshape(mask_valid, (batch_size, num_masks, 1, 1)) + # [batch_size, num_masks, H, W] + mask_valid = padding_mask[:, None] * mask_valid + + # resize all masks into the same shape + height = padding_mask.shape[1] + width = padding_mask.shape[2] + # [batch_size, num_masks, H, W] + pred_masks = jnp.reshape( + pred_masks, (batch_size, num_masks) + pred_masks.shape[3:] + ) + assert gt_masks.shape[2:] == (height, width, 1), gt_masks.shape + # [batch_size, num_masks, H, W] + pred_masks = jax.image.resize( + pred_masks, pred_masks.shape[:2] + (height, width), method='bilinear' + ) + # [batch_size, num_masks, H, W, 1] + pred_masks = jnp.expand_dims(pred_masks, axis=-1) + + # [batch_size, num_masks_per_image, 1, H, W, 1] + gt_masks = jnp.expand_dims(gt_masks, axis=2) + # [batch_size, num_masks_per_image, num_masks_per_prompt, H, W, 1] + gt_masks = jnp.tile(gt_masks, (1, 1, num_masks_per_prompt, 1, 1, 1)) + # [batch_size, num_masks, H, W, 1] + gt_masks = jnp.reshape(gt_masks, (batch_size, num_masks, height, width, 1)) + + # [batch_size, num_masks, H, W, 1] + focal_loss = model_utils.focal_sigmoid_cross_entropy( + pred_masks, gt_masks, weights=mask_valid + ) + # [batch_size, num_masks] + focal_loss = focal_loss.sum(axis=(2, 3, 4)) / jnp.maximum( + mask_valid.sum(axis=(2, 3)), 1.0 + ) + # [batch_size, num_masks_perimage, num_masks_per_prompt] + focal_loss = jnp.reshape( + focal_loss, (batch_size, num_masks_per_image, num_masks_per_prompt) + ) + # [batch_size, num_masks] + dice_loss = model_utils.dice_loss( + jnp.squeeze(pred_masks, axis=-1), + jnp.squeeze(gt_masks, axis=-1), + weights=jnp.max(mask_valid, axis=(-2, -1)) > 0, + all_pairs=False, + ) + # [batch_size, num_masks_perimage, num_masks_per_prompt] + dice_loss = jnp.reshape( + dice_loss, (batch_size, num_masks_per_image, num_masks_per_prompt) + ) + + # [batch_size, num_masks_perimage, num_masks_per_prompt] + mask_loss = focal_loss * focal_loss_weight + dice_loss * dice_loss_weight + # [batch_size, num_masks_perimage] + min_loss_ind = jnp.argmin(mask_loss, axis=-1) + # [batch_size, num_masks_perimage] + mask_loss = jnp.take_along_axis(mask_loss, min_loss_ind[..., None], axis=-1)[ + ..., 0 + ] + + mask_loss = (mask_loss * gt_valid).sum() / jnp.maximum(gt_valid.sum(), 1.0) + + focal_loss = jnp.take_along_axis( + focal_loss, min_loss_ind[..., None], axis=-1 + )[..., 0] + focal_loss = (focal_loss * gt_valid).sum() / jnp.maximum(gt_valid.sum(), 1.0) + metrics['mask_focal_loss'] = focal_loss * focal_loss_weight + dice_loss = jnp.take_along_axis(dice_loss, min_loss_ind[..., None], axis=-1)[ + ..., 0 + ] + dice_loss = (dice_loss * gt_valid).sum() / jnp.maximum(gt_valid.sum(), 1.0) + metrics['mask_dice_loss'] = dice_loss * dice_loss_weight + + # [batch_size, num_masks] + gt_inter = ((pred_masks > 0) * (gt_masks > 0)).sum(axis=(-3, -2, -1)) + gt_union = (((pred_masks > 0) + (gt_masks > 0)) > 0).sum(axis=(-3, -2, -1)) + gt_ious = gt_inter / jnp.maximum(gt_union, 1.0) + # [batch_size, num_masks_per_image, num_masks_per_prompt] + gt_ious = jnp.reshape( + gt_ious, (batch_size, num_masks_per_image, num_masks_per_prompt) + ) + + iou_pred_loss = (gt_ious - pred_ious) ** 2 + iou_pred_loss = (iou_pred_loss * gt_valid[..., None]).sum() / jnp.maximum( + jnp.broadcast_to(gt_valid[..., None], gt_ious.shape).sum(), 1.0 + ) + + metrics['mask_iou_pred_loss'] = iou_pred_loss * iou_pred_loss_weight + + metrics['mask_loss'] = mask_loss + iou_pred_loss + + return metrics diff --git a/scenic/projects/pixel_llm/modeling/mask_adapter.py b/scenic/projects/pixel_llm/modeling/mask_adapter.py new file mode 100644 index 0000000000000000000000000000000000000000..89aa238502c7c213de7124c168f6632dc430a538 --- /dev/null +++ b/scenic/projects/pixel_llm/modeling/mask_adapter.py @@ -0,0 +1,139 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Mask Adapter.""" + +import flax.linen as nn +import jax.numpy as jnp +from scenic.projects.baselines.segment_anything.modeling import transformer + + +class SamMaskAdaptor(nn.Module): + """Mask Adaptor.""" + + depth: int = 2 + input_projection: bool = True + transformer_dim: int = 256 + num_outputs: int = 2 + head_hidden_dim: int = 512 + output_dim: int = 256 + gating: bool = True + + def setup(self): + self.output_tokens = self.param( + 'output_tokens.weight', + nn.initializers.normal(stddev=1.0), + (self.num_outputs, self.transformer_dim), + ) + # NOTE(jiaruixu): borrow the arch for fast impl + self.transformer = transformer.TwoWayTransformer( + depth=self.depth, embedding_dim=self.transformer_dim, name='transformer' + ) + if self.input_projection: + self.visual_projection_mlp = MLP( + hidden_dim=self.head_hidden_dim, + output_dim=self.transformer_dim, + num_layers=1, + name='visual_projection_mlp', + ) + self.textual_projection_mlp = MLP( + hidden_dim=self.head_hidden_dim, + output_dim=self.transformer_dim, + num_layers=1, + name='textual_projection_mlp', + ) + if self.gating: + self.alpha_output = self.param( + 'alpha_output.weight', + nn.initializers.constant(0.0), + (self.num_outputs, self.output_dim), + ) + + @nn.compact + def __call__(self, sparse_embedding, visual_features, textual_features): + """Predict sam sparse embedding based on text_features. + + Args: + sparse_embedding: (B, N, O, C) + visual_features: (B, N, L1, C) + textual_features: (B, N, L2, C) + + Returns: + output_embed: (B, N, O, C) + """ + if self.input_projection: + visual_features = self.visual_projection_mlp(visual_features) + textual_features = self.textual_projection_mlp(textual_features) + + batch_size, num_prompts, max_cap_len, embed_dim = textual_features.shape + assert visual_features.shape[:2] == (batch_size, num_prompts) + assert visual_features.shape[-1] == embed_dim + + # [B*N, L2, C] + textual_features = jnp.reshape( + textual_features, (batch_size * num_prompts, max_cap_len, embed_dim) + ) + visual_features = jnp.reshape( + visual_features, (batch_size * num_prompts, -1, embed_dim) + ) + + # [B*N, O, C] + output_tokens = jnp.broadcast_to( + self.output_tokens[None], + (batch_size * num_prompts, self.num_outputs, self.transformer_dim), + ) + + # [B*N, L1+L2, C] + concat_features = jnp.concatenate( + [visual_features, textual_features], axis=1 + ) + output_embed, _ = self.transformer( + concat_features, jnp.zeros_like(concat_features), output_tokens + ) + # [B, N, O, C] + output_embed = jnp.reshape( + output_embed, + (batch_size, num_prompts, self.num_outputs, self.output_dim), + ) + + if self.gating: + output_embed = jnp.tanh(self.alpha_output) * output_embed + + output_embed += sparse_embedding + + return output_embed + + +class MLP(nn.Module): + """MLP with pre-norm.""" + hidden_dim: int + output_dim: int + num_layers: int + pre_norm: bool = True + activation: str = 'gelu' + + @nn.compact + def __call__(self, x): + if self.pre_norm: + x = nn.LayerNorm(epsilon=1e-6)(x) + for i in range(self.num_layers - 1): + x = nn.Dense(self.hidden_dim, name=f'layers.{i}')(x) + if self.activation == 'gelu': + x = nn.gelu(x, approximate=False) + elif self.activation == 'relu': + x = nn.relu(x) + else: + raise NotImplementedError(self.activation) + x = nn.Dense(self.output_dim, name=f'layers.{self.num_layers - 1}')(x) + return x diff --git a/scenic/projects/pixel_llm/modeling/pixel_llm.py b/scenic/projects/pixel_llm/modeling/pixel_llm.py new file mode 100644 index 0000000000000000000000000000000000000000..aab182300b5faa6ed45e2ebec1d37a5db2063034 --- /dev/null +++ b/scenic/projects/pixel_llm/modeling/pixel_llm.py @@ -0,0 +1,1576 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""PixelLLM model.""" + +import dataclasses +from typing import Any + +from flax import linen as nn +import jax +from jax import lax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models import base_model +from scenic.projects.pixel_llm import auto_regressive_decode +from scenic.projects.pixel_llm.modeling import builder +from scenic.projects.pixel_llm.modeling import losses as losses_lib +from scenic.projects.pixel_llm.modeling import utils + +ConfigDict = ml_collections.ConfigDict +GIT_PIXEL_MEAN = (0.48145466 * 255, 0.4578275 * 255, 0.40821073 * 255) +GIT_PIXEL_STD = (0.26862954 * 255, 0.26130258 * 255, 0.27577711 * 255) +GIT_IMAGE_SIZE = (384, 384) +DET_PIXEL_MEAN = (123.675, 116.28, 103.53) +DET_PIXEL_STD = (58.395, 57.12, 57.375) +DET_IMAGE_SIZE = (1024, 1024) +SAM_PIXEL_MEAN = (123.675, 116.28, 103.53) +SAM_PIXEL_STD = (58.395, 57.12, 57.375) +SAM_IMAGE_SIZE = (1024, 1024) + + +class PixelLlmFlaxModel(nn.Module): + """Universal Model for Det/Sam/Git training inference.""" + + git_backbone_name: str = 'git_vit' + git_backbone_args: ConfigDict = dataclasses.field(default_factory=ConfigDict) + git_backbone_param_name: str = 'git_backbone' + git_preprocess_args: ConfigDict = dataclasses.field( + default_factory=ConfigDict + ) + det_backbone_name: str = 'centernet_vit' + det_backbone_args: ConfigDict = dataclasses.field(default_factory=ConfigDict) + det_backbone_param_name: str = 'det_backbone' + det_preprocess_args: ConfigDict = dataclasses.field( + default_factory=ConfigDict + ) + sam_backbone_name: str = 'sam_vit' + sam_backbone_args: ConfigDict = dataclasses.field(default_factory=ConfigDict) + sam_backbone_param_name: str = 'sam_backbone' + sam_preprocess_args: ConfigDict = dataclasses.field( + default_factory=ConfigDict + ) + frozen_feature_keys: str = '' + text_decoder_name: str = 'git' + text_decoder_args: ConfigDict = dataclasses.field(default_factory=ConfigDict) + text_decoder_param_name: str = 'textual' + text_decoder_feature_key: str = 'git_visual_features' + box_decoder_name: str = 'centernet2_det_decoder' + box_decoder_args: ConfigDict = dataclasses.field(default_factory=ConfigDict) + box_decoder_param_name: str = 'box_decoder' + box_decoder_feature_key: str = 'det_visual_features' + mask_decoder_name: str = 'sam_mask_decoder' + mask_decoder_args: ConfigDict = dataclasses.field(default_factory=ConfigDict) + mask_decoder_param_name: str = 'mask_decoder' + mask_decoder_feature_key: str = 'sam_visual_features' + prompt_encoder_name: str = 'sam_prompt_encoder' + prompt_encoder_args: ConfigDict = dataclasses.field( + default_factory=ConfigDict + ) + prompt_encoder_param_name: str = 'prompt_encoder' + prompt_adapter_name: str = 'sam_prompt_adapter' + prompt_adapter_args: ConfigDict = dataclasses.field( + default_factory=ConfigDict + ) + prompt_adapter_param_name: str = 'prompt_adapter' + prompt_use_box_rate: float = 0.0 + point_predictor_name: str = 'mlp_point_predictor' + point_predictor_args: ConfigDict = dataclasses.field( + default_factory=ConfigDict + ) + point_predictor_param_name: str = 'point_predictor' + visual_project_layers_name: str = 'none' + visual_project_layers_args: ConfigDict = dataclasses.field( + default_factory=ConfigDict + ) + visual_project_layers_param_name: str = 'visual_project_layers' + mask_adapter_name: str = 'none' + mask_adapter_args: ConfigDict = dataclasses.field( + default_factory=ConfigDict + ) + mask_adapter_param_name: str = 'mask_adapter' + + max_caption_length: int = 40 + begin_token_id: int = 101 # tokenizer.cls_token_id == 101 + end_token_id: int = 102 # tokenizer.sep_token_id == 102 + vocab_size: int = 30522 # size of BertTokenizer + label_smooth: float = 0.1 + text_loss_weight: float = 1.0 + det_loss_weight: float = 1.0 + point_loss_weight: float = 1.0 + mask_loss_weight: float = 1.0 + prompt_fuse_fn: str = 'sparse' + point_output_ignore: str = '' + trace_point_output_ignore: str = '' + prompt_drop_rate: float = 0.0 + num_detections: int = 100 + use_roi_box_in_training: bool = False + num_text_proposals: int = 128 + box_points_per_side: int = 2 + box_point_with_offset: bool = False + gt_box_points_per_side: int = 2 + gt_box_point_with_offset: bool = False + point_loss_type: str = 'l1_nonzero' + + def setup(self): + self.git_backbone = builder.get_image_encoder( + self.git_backbone_name, + self.git_backbone_args, + self.git_backbone_param_name, + ) + self.det_backbone = builder.get_image_encoder( + self.det_backbone_name, + self.det_backbone_args, + self.det_backbone_param_name, + ) + self.sam_backbone = builder.get_image_encoder( + self.sam_backbone_name, + self.sam_backbone_args, + self.sam_backbone_param_name, + ) + + self.prompt_encoder = builder.get_prompt_encoder( + self.prompt_encoder_name, + self.prompt_encoder_args, + self.prompt_encoder_param_name, + ) + self.prompt_adapter = builder.get_prompt_adapter( + self.prompt_adapter_name, + self.prompt_adapter_args, + self.prompt_adapter_param_name, + ) + + self.point_predictor = builder.get_point_predictor( + self.point_predictor_name, + self.point_predictor_args, + self.point_predictor_param_name, + ) + self.textual = builder.get_text_decoder( + self.text_decoder_name, + self.vocab_size, + self.text_decoder_args, + self.text_decoder_param_name, + ) + + self.visual_project_layers = builder.get_project_layers( + self.visual_project_layers_name, + self.visual_project_layers_args, + self.visual_project_layers_param_name, + ) + + self.box_decoder = builder.get_box_decoder( + self.box_decoder_name, + self.box_decoder_args, + self.box_decoder_param_name, + ) + + self.mask_decoder = builder.get_mask_decoder( + self.mask_decoder_name, + self.mask_decoder_args, + self.mask_decoder_param_name, + ) + + self.mask_adapter = builder.get_mask_adapter( + self.mask_adapter_name, + self.mask_adapter_args, + self.mask_adapter_param_name, + ) + + @nn.compact + def __call__( + self, + images, + prompt_boxes=None, + prompt_point_coords=None, + gt_text_tokens=None, + context_tokens=None, + gt_point_coords=None, + gt_classes=None, + gt_boxes=None, + gt_masks=None, + padding_mask=None, + cap_loss_valid_mask=None, + proposal_loss_valid_mask=None, + objcap_loss_valid_mask=None, + point_loss_valid_mask=None, + preprocess=True, + train=False, + with_det=True, + with_point=True, + with_mask=True, + debug=False, + force_init=False, + ): + """forward caption model. + + Args: + images: (batch_size, height, width, 3) for images or (batch_size, t, + height, width, 3) for videos (when self.num_frames > 0). + prompt_boxes: (batch_size, num_caps_per_image, 4) + prompt_point_coords: (batch_size, num_caps_per_image, num_points, 2) + gt_text_tokens: (batch_size, num_caps_per_image, max_cap_len) + context_tokens: (batch_size, num_caps_per_image, max_context_len). + Optional context tokens. E.g., the question in QA, + gt_point_coords: (batch_size, num_caps_per_image, max_cap_len, + num_points_per_token) + gt_classes: (batch_size, num_caps_per_image) + gt_boxes: (batch_size, num_caps_per_image, 4). Only used in training. + gt_masks: (batch_size, num_caps_per_image, height, width, 1) + padding_mask: optional, (batch_size, height, width) + cap_loss_valid_mask: optional, (batch_size,) + proposal_loss_valid_mask: optional, (batch_size,) + objcap_loss_valid_mask: optional, (batch_size,) + point_loss_valid_mask: optional, (batch_size,) + preprocess: bool + train: bool + with_det: bool, mostly for inference only + with_point: bool, mostly for inference only + with_mask: bool, mostly for inference only + debug: bool + force_init: bool + + Returns: + ret: dict of arrays. + """ + output_dict = {} + metric_dict = {} + del debug + image_shape = utils.get_image_shape(padding_mask, images) + padded_image_shape = jnp.concatenate([ + jnp.ones((images.shape[0], 1), jnp.float32) * images.shape[1], + jnp.ones((images.shape[0], 1), jnp.float32) * images.shape[2], + ], axis=1) # B x 2, in order (height, width) + visual_features_dict = self.forward_backbones( + images, padding_mask, preprocess=preprocess, train=train + ) + batch = { + 'images': images, + 'prompt_boxes': prompt_boxes, + 'prompt_point_coords': prompt_point_coords, + 'padding_mask': padding_mask, + 'image_shape': image_shape, + 'padded_image_shape': padded_image_shape, + 'gt_text_tokens': gt_text_tokens, + 'context_tokens': context_tokens, + 'gt_point_coords': gt_point_coords, + 'gt_classes': gt_classes, + 'gt_boxes': gt_boxes, + 'gt_masks': gt_masks, + 'cap_loss_valid_mask': cap_loss_valid_mask, + 'proposal_loss_valid_mask': proposal_loss_valid_mask, + 'objcap_loss_valid_mask': objcap_loss_valid_mask, + 'point_loss_valid_mask': point_loss_valid_mask, + } + # object detection (classification) + if with_det and self.box_decoder is not None: + det_outputs, det_metrics = self.forward_detection( + visual_features_dict, batch, train=train + ) + det_outputs.update( + self.get_prompt_boxes_and_points(det_outputs, batch, train=train) + ) + # object caption (like GRiT) + if self.textual is not None: + # In multi-task training, image captioning is handled here. + if batch['gt_boxes'] is not None and train: + matched_outputs = self.get_matched_proposals_train( + det_outputs, batch, train=train + ) + det_outputs.update(matched_outputs) + if self.point_predictor is not None: + det_outputs.update( + self.get_gt_points_from_boxes(matched_outputs, batch) + ) + cap_outputs, cap_metrics = self.forward_caption( + visual_features_dict, + det_outputs, + batch, + train=train, + ) + output_dict.update(cap_outputs) + metric_dict.update(cap_metrics) + output_dict.update(det_outputs) + metric_dict.update(det_metrics) + + # image caption + # NOTE(jiaruixu): we use elif because textual is handled in the detection + # `if` already + elif self.textual is not None: + output_dict.update( + self.get_prompt_boxes_and_points(output_dict, batch, train=train) + ) + cap_outputs, cap_metrics = self.forward_caption( + visual_features_dict, + output_dict, + batch, + train=train, + ) + output_dict.update(cap_outputs) + metric_dict.update(cap_metrics) + + if with_point and self.point_predictor is not None: + if batch['gt_boxes'] is not None and train: + output_dict.update(self.get_gt_points_from_boxes(output_dict, batch)) + point_outputs, point_metrics = self.forward_point_prediction( + output_dict, + batch, + train=train, + ) + output_dict.update(point_outputs) + metric_dict.update(point_metrics) + + if with_mask and self.mask_decoder is not None: + if (batch['gt_masks'] is not None and train) or force_init: + if 'detection_boxes' not in output_dict: + # when force init, not text is decode yet, so just use ones + if 'point_valid_mask' not in output_dict: + point_valid_mask = jnp.ones(output_dict['point_coords'].shape[:-2]) # pytype: disable=attribute-error # jax-ndarray + else: + point_valid_mask = output_dict['point_valid_mask'] + + output_dict['detection_boxes'] = self.decode_boxes_from_points( + output_dict['point_coords'], + point_valid_mask, + )['point_detection_boxes'] + mask_decode_outputs, mask_decode_metrics = self.forward_mask_decode( + visual_features_dict, output_dict, batch, train=train + ) + output_dict.update(mask_decode_outputs) + metric_dict.update(mask_decode_metrics) + + if train: + output_dict['metrics'] = metric_dict + + if with_mask and self.mask_decoder is not None and not train: + sam_image_embeddings = visual_features_dict[self.mask_decoder_feature_key] + output_dict['sam_image_embeddings'] = sam_image_embeddings + # save memory + output_dict.pop('text_feats') + return output_dict + + def maybe_project_visual_feature(self, visual_features, train=False): + """Project visual features if self.project_layers_name != 'none'. + + Args: + visual_features: (batch_size, num_tokens, dim) or (batch_size, + num_prompts, num_tokens, dim) + train: bool + + Returns: + visual_features: (batch_size, new_num_tokens, new_dim) + or (batch_size, num_prompts, num_tokens, new_dim) + """ + num_prompts = 0 + if visual_features.ndim == 4: + num_prompts = visual_features.shape[1] + visual_features = jnp.reshape( + visual_features, (-1,) + visual_features.shape[2:] + ) + if self.visual_project_layers_name == 'linear': + visual_features = self.visual_project_layers(visual_features, train=train) + else: + assert self.visual_project_layers_name == 'none' + + if num_prompts > 0: + visual_features = jnp.reshape( + visual_features, (-1, num_prompts) + visual_features.shape[1:] + ) + return visual_features + + def forward_backbones(self, images, padding_mask, preprocess, train): + output_dict = {} + frozen_feature_keys = self.frozen_feature_keys.split(',') + if self.git_backbone is not None: + if preprocess: + processed_images = utils.preprocess( + images, + pixel_mean=self.git_preprocess_args.get( + 'pixel_mean', GIT_PIXEL_MEAN + ), + pixel_std=self.git_preprocess_args.get('pixel_std', GIT_PIXEL_STD), + padding_mask=padding_mask, + image_size=self.git_preprocess_args.get( + 'image_size', GIT_IMAGE_SIZE + ), + ) + else: + processed_images = images + output_dict['git_image_size'] = processed_images.shape[1:3] + frozen_git = 'git_visual_features' in frozen_feature_keys + git_visual_features = self.git_backbone( + processed_images, train=train and not frozen_git + ) + if frozen_git: + git_visual_features = jax.lax.stop_gradient(git_visual_features) + if ( + self.git_backbone_name == 'git_vit' + and self.git_backbone.use_class_embedding + ) or self.git_backbone_name == 'eva02_vit': + git_visual_features = git_visual_features[:, 1:] + git_visual_features = git_visual_features.reshape( + git_visual_features.shape[0], + processed_images.shape[1] // self.git_backbone.patch_size, + processed_images.shape[2] // self.git_backbone.patch_size, + git_visual_features.shape[-1], + ) + output_dict['git_visual_features'] = git_visual_features + + if self.sam_backbone is not None: + if preprocess: + processed_images = utils.preprocess( + images, + pixel_mean=self.sam_preprocess_args.get( + 'pixel_mean', SAM_PIXEL_MEAN + ), + pixel_std=self.sam_preprocess_args.get('pixel_std', SAM_PIXEL_STD), + padding_mask=padding_mask, + image_size=self.sam_preprocess_args.get( + 'image_size', SAM_IMAGE_SIZE + ), + ) + else: + processed_images = images + output_dict['sam_image_size'] = processed_images.shape[1:3] + frozen_sam = 'sam_visual_features' in frozen_feature_keys + sam_visual_features = self.sam_backbone( + processed_images, train=train and not frozen_sam + ) + if frozen_sam: + sam_visual_features = jax.lax.stop_gradient(sam_visual_features) + output_dict['sam_visual_features'] = sam_visual_features + + if self.det_backbone is not None: + if preprocess: + processed_images = utils.preprocess( + images, + pixel_mean=self.det_preprocess_args.get( + 'pixel_mean', DET_PIXEL_MEAN + ), + pixel_std=self.det_preprocess_args.get( + 'pixel_std', DET_PIXEL_STD + ), + padding_mask=padding_mask, + image_size=self.det_preprocess_args.get( + 'image_size', DET_IMAGE_SIZE + ), + ) + else: + processed_images = images + output_dict['det_image_size'] = processed_images.shape[1:3] + frozen_det = 'det_visual_features' in frozen_feature_keys + det_visual_features = self.det_backbone( + processed_images, train=train and not frozen_det + ) + if frozen_det: + det_visual_features = jax.lax.stop_gradient(det_visual_features) + output_dict['det_visual_features'] = det_visual_features + + return output_dict + + def forward_detection(self, visual_features_dict, batch, train=False): + assert self.box_decoder is not None + # NOTE(jiaruixu): zhouxy use padded_image_shape instead of true shape + image_shape = batch['padded_image_shape'] + gt_boxes = batch['gt_boxes'] + gt_classes = batch['gt_classes'] + proposal_loss_valid_mask = batch['proposal_loss_valid_mask'] + if proposal_loss_valid_mask is not None: + gt_classes = gt_classes * proposal_loss_valid_mask[:, None] + # NOTE: in CenterNet, valid boxes are boxes that areas>0. Here we + # replace the boxes based on gt_classes + gt_boxes = jnp.where( + proposal_loss_valid_mask[:, None, None] > 0, + gt_boxes, jnp.zeros_like(gt_boxes) + ) + output_dict = {} + metric_dict = {} + + visual_features = utils.concat_visual_features( + visual_features_dict, self.box_decoder_feature_key + ) + detections, det_metrics = self.box_decoder( + # visual_features_dict[self.box_decoder_feature_key], + visual_features, + image_shape, + gt_boxes, + gt_classes, + train=train, + ) + if gt_boxes is not None and train: + _, det_loss_dict = self.box_decoder.loss_function( + detections, det_metrics, gt_boxes, gt_classes + ) + metric_dict.update(det_loss_dict) + detections.pop('box_regs', None) + detections.pop('heatmaps', None) + output_dict.update(detections) + metric_dict.update(det_metrics) + return output_dict, metric_dict + + def forward_prompt_encoder_adapter( + self, + image_embeddings, + image_size, + outputs, + batch, + *, + train=False, + ): + assert self.prompt_encoder is not None + assert self.prompt_adapter is not None + output_dict = {} + assert self.prompt_encoder_name == 'sam_prompt_encoder' + point_coords = utils.get_first_possible_value( + 'prompt_point_coords', [outputs, batch] + ) + assert point_coords is not None + # [batch_size, num_prompts, box_points_per_side**2] + point_labels = utils.generate_point_label( + self.make_rng('dropout') if batch['gt_boxes'] is not None else None, + point_coords, + prompt_drop_rate=self.prompt_drop_rate, + train=train, + ) + + assert point_coords.shape[:2] == point_labels.shape[:2] + batch_size, num_prompts = point_coords.shape[:2] + + sparse_embeddings = jax.vmap( + self.prompt_encoder._embed_points, in_axes=(0, 0, None, None) # pylint:disable=protected-access + )(point_coords, point_labels, True, image_size) + + # NOTE(jiaruixu) when from `outputs`` the task is (jointly) object + # detection + caption; when from `batch``, the task is location caption + # or global caption + prompt_boxes = utils.get_first_possible_value( + 'prompt_boxes', [outputs, batch] + ) + + # NOTE(jiaruixu): joint training model should always have 'prompt_boxes' + if prompt_boxes is not None and self.prompt_use_box_rate > 0.0: + # [batch_size, num_promps, 2, embed_dim] + box_sparse_embeddings = jax.vmap( + self.prompt_encoder._embed_boxes, in_axes=(0, None) # pylint:disable=protected-access + )(prompt_boxes, image_size) + # [batch_size, num_promps, num_points - 2, embed_dim] + box_pad_embeddings = jnp.tile( + self.prompt_encoder.no_mask_embed[None, None], + (batch_size, num_prompts, sparse_embeddings.shape[2] - 2, 1), + ) + # [batch_size, num_promps, num_points, embed_dim] + box_sparse_embeddings = jnp.concatenate( + [box_sparse_embeddings, box_pad_embeddings], axis=-2 + ) + # [batch_size, num_prompts, 1, 1] + box_valid_mask = jnp.max(prompt_boxes, axis=-1)[..., None, None] > 0 + if train: + box_valid_mask *= jax.random.uniform( + key=self.make_rng('dropout'), + shape=box_valid_mask.shape + ) < self.prompt_use_box_rate + output_dict['box_valid_mask'] = box_valid_mask + sparse_embeddings = jnp.where( + box_valid_mask, box_sparse_embeddings, sparse_embeddings + ) + + dense_embeddings = self.prompt_encoder.no_mask_embed + # [batch_size, num_prompts, num_outputs, transformer_dim] + # [batch_size, num_prompts, H, W, transformer_dim] + sparse_prompt_features, dense_prompt_features = jax.vmap( + self.prompt_adapter, in_axes=(0, None, 0, None), out_axes=(0, 0) + )( + image_embeddings, + self.prompt_encoder.get_dense_pe(image_embeddings.shape[1:3]), + sparse_embeddings, + dense_embeddings, + ) + # [batch_size, num_prompts, H*W, transformer_dim] + dense_prompt_features = dense_prompt_features.reshape( + dense_prompt_features.shape[:2] + + (-1, dense_prompt_features.shape[-1]) + ) + if self.prompt_fuse_fn == 'dense': + visual_features = dense_prompt_features + elif self.prompt_fuse_fn == 'sparse': + visual_features = sparse_prompt_features + else: + raise ValueError(f'Unknown prompt fuse function {self.prompt_fuse_fn}.') + + output_dict['visual_features'] = visual_features + + return output_dict + + def forward_caption( + self, visual_features_dict, outputs, batch, *, train=False + ): + output_dict = {} + metric_dict = {} + + image_size = utils.get_image_size( + visual_features_dict, self.text_decoder_feature_key + ) + visual_features = utils.concat_visual_features( + visual_features_dict, self.text_decoder_feature_key + ) + + if self.prompt_encoder is not None: + prompt_outputs = self.forward_prompt_encoder_adapter( + visual_features, image_size, outputs, batch, train=train + ) + output_dict.update(prompt_outputs) + visual_features = prompt_outputs['visual_features'] + else: + # [batch_size, 1, H*W, embed_dim] + visual_features = visual_features.reshape( + (visual_features.shape[0], 1, -1, visual_features.shape[-1]) + ) + + visual_features = self.maybe_project_visual_feature( + visual_features, train=train + ) + output_dict['visual_features'] = visual_features + + batch_size = visual_features.shape[0] + num_caps_per_image = visual_features.shape[1] + total_batch_size = batch_size * num_caps_per_image + + # unravel batch and num_prompts dim + # [total_batch_size, visual_seq_len, embed_dim] + visual_features = visual_features.reshape( + (total_batch_size,) + visual_features.shape[2:] + ) + + # NOTE(jiaruixu): we get from outputs first because + # get_matched_proposals_train may update them according to proposal matching + gt_text_tokens = utils.get_first_possible_value( + 'gt_text_tokens', [outputs, batch] + ) + context_tokens = utils.get_first_possible_value( + 'context_tokens', [outputs, batch] + ) + # gt_classes indicates whehter it's a padding/background proposal or not + gt_text_valid_mask = utils.get_first_possible_value( + 'gt_classes', [outputs, batch] + ) + if gt_text_valid_mask is not None: + gt_text_valid_mask = gt_text_valid_mask > 0 + + # inference mode + if gt_text_tokens is None: + # (batch_size * num_caps_per_image, max_cap_len) + text_tokens = jnp.full( + (total_batch_size, self.max_caption_length), + self.end_token_id, + dtype=jnp.int32, + ) + # [batch_size * num_caps_per_image, max_cap_len] + text_tokens = text_tokens.at[:, 0].set(self.begin_token_id) + if context_tokens is not None: + context_tokens = context_tokens[:, :num_caps_per_image] + # [batch_size * num_caps_per_image, max_cap_len] + context_tokens = context_tokens.reshape( + total_batch_size, context_tokens.shape[-1] + ) + else: + text_tokens = gt_text_tokens.reshape( + total_batch_size, + gt_text_tokens.shape[-1], + ) # (total_batch_size, num_caps_per_image, max_cap_len) + if context_tokens is not None: + context_tokens = context_tokens.reshape( + total_batch_size, context_tokens.shape[-1] + ) + # [total_batch_size, max_cap_len, vocab_size] + text_outputs, text_feats = self.textual( + text_tokens, + visual_features, + context_tokens=context_tokens, + train=train, + return_logit_and_feat=True, + ) + + # get num_caps_per_image dim back + text_outputs = text_outputs.reshape( + (batch_size, num_caps_per_image) + text_outputs.shape[1:] + ) + text_feats = text_feats.reshape( + (batch_size, num_caps_per_image) + text_feats.shape[1:] + ) + output_dict['text_feats'] = text_feats + if not train: + # reshape back + output_dict['begin_tokens'] = text_tokens.reshape( + batch_size, num_caps_per_image, text_tokens.shape[-1] + ) + if context_tokens is not None: + output_dict['context_tokens'] = context_tokens.reshape( + batch_size, num_caps_per_image, context_tokens.shape[-1] + ) + else: + output_dict['context_tokens'] = None + + if gt_text_tokens is not None: + metric_dict.update( + losses_lib.text_loss( + text_outputs, + gt_text_tokens, + gt_text_valid_mask, + label_smooth=self.label_smooth, + end_token_id=self.end_token_id, + vocab_size=self.vocab_size, + ) + ) + + return output_dict, metric_dict + + def forward_point_prediction(self, outputs, batch, *, train=False): + """Forward point prediction.""" + output_dict = {} + metric_dict = {} + + text_feats = outputs['text_feats'] + gt_text_tokens = utils.get_first_possible_value( + 'gt_text_tokens', [outputs, batch] + ) + image_shape = batch['image_shape'] + + visual_features = outputs['visual_features'] + point_coords, point_logits = self.point_predictor( + visual_features, text_feats + ) + + point_coords = utils.points_to_absolute(point_coords, image_shape) + if train and gt_text_tokens is not None: + point_valid_mask = utils.get_token_valid_mask( + gt_text_tokens, + self.point_output_ignore, + self.begin_token_id, + self.end_token_id, + ) + trace_point_valid_mask = utils.get_token_valid_mask( + gt_text_tokens, + self.trace_point_output_ignore, + self.begin_token_id, + self.end_token_id, + ) + if batch['gt_point_coords'] is not None: + input_gt_point_coords = batch['gt_point_coords'][ + :, : gt_text_tokens.shape[1] + ] + input_gt_points_batch_mask = ( + jnp.max(input_gt_point_coords, axis=(1, 2, 3, 4)) > 0 + ) + input_gt_points_batch_mask = input_gt_points_batch_mask[:, None, None] + + point_valid_mask = jnp.where( + input_gt_points_batch_mask, trace_point_valid_mask, point_valid_mask + ) + output_dict['point_valid_mask'] = point_valid_mask + gt_point_coords = utils.get_first_possible_value( + 'gt_point_coords', [outputs, batch] + ) + # pytype: disable=unsupported-operands + gt_point_valid_mask = point_valid_mask + gt_classes = utils.get_first_possible_value( + 'gt_classes', [outputs, batch] + ) + gt_point_valid_mask *= gt_classes[..., None] > 0 + # pytype: enable=unsupported-operands + + metric_dict.update( + losses_lib.point_loss( + point_coords, + point_valid_mask, + gt_point_coords, + gt_point_valid_mask, + loss_type=self.point_loss_type + ) + ) + output_dict['point_coords'] = point_coords + output_dict['point_logits'] = point_logits + + return output_dict, metric_dict + + def forward_mask_decode( + self, visual_features_dict, outputs, batch, train=False): + assert self.prompt_encoder is not None + assert self.mask_decoder is not None + output_dict = {} + metric_dict = {} + assert self.mask_decoder_name == 'sam_mask_decoder' + + image_size = visual_features_dict[ + self.mask_decoder_feature_key.replace('visual_features', 'image_size') + ] + image_embeddings = visual_features_dict[self.mask_decoder_feature_key] + image_embedding_size = image_embeddings.shape[1:3] + + # TODO(jiaruixu): support points besides boxes + sparse_embeddings = jax.vmap( + self.prompt_encoder._embed_boxes, in_axes=(0, None) # pylint:disable=protected-access + )(outputs['detection_boxes'], image_size) + if self.mask_adapter is not None: + sparse_embeddings = self.mask_adapter( + sparse_embeddings, + outputs['visual_features'], + outputs['text_feats'], + ) + dense_embeddings = self.prompt_encoder.no_mask_embed + # [batch_size, num_prompts, num_masks, h, w] + # [batch_size, num_prompts, num_masks] + low_res_masks, iou_predictions = jax.vmap( + self.mask_decoder, in_axes=(0, None, 0, None, None), out_axes=(0, 0) + )( + image_embeddings, + self.prompt_encoder.get_dense_pe(image_embedding_size), + sparse_embeddings, + dense_embeddings, + False, + ) + gt_masks = utils.get_first_possible_value('gt_masks', [outputs, batch]) + if train and gt_masks is not None: + gt_classes = utils.get_first_possible_value( + 'gt_classes', [outputs, batch] + ) + metric_dict.update( + losses_lib.sam_mask_loss( + low_res_masks, + iou_predictions, + gt_masks, + gt_classes > 0, + batch['padding_mask'], + ) + ) + output_dict['detection_masks'] = low_res_masks + output_dict['iou_predictions'] = iou_predictions + + return output_dict, metric_dict + + def get_matched_proposals_train( + self, + detections, + batch, + train=False, + ): + assert self.box_decoder is not None + gt_boxes = batch['gt_boxes'] + gt_classes = batch['gt_classes'] + gt_text_tokens = batch['gt_text_tokens'] + context_tokens = batch['context_tokens'] + + output_dict = {} + + if self.use_roi_box_in_training or not train: + # Apply the text loss to the second stage outputs + # (vs. to the proposal). + # This needs the second stage to be pretrained. + # Otherwise the training easily goes NaN. + # (batch, num_text_proposals, 4) + last_proposals = detections['detection_boxes'][ + :, : self.num_text_proposals + ] # pytype: disable=attribute-error # jax-ndarray + else: + # (batch, num_text_proposals, 4) + last_proposals = detections['last_proposals'][ + :, : self.num_text_proposals + ] # pytype: disable=attribute-error # jax-ndarray + objcap_loss_valid_mask = batch['objcap_loss_valid_mask'] + # TODO(zhouxy): try other options: e.g., use proposals or concate prompt + # boxes and proposals. Now it's using prompt boxes for non-detection data. + if objcap_loss_valid_mask is not None and batch['prompt_boxes'] is not None: + prompt_boxes = batch['prompt_boxes'] + # NOTE: if it's not det task, don't use proposal + last_proposals = jnp.where( + objcap_loss_valid_mask[:, None, None], + last_proposals, + prompt_boxes[:, : self.num_text_proposals], + ) + output_dict['prompt_boxes'] = last_proposals + point_coords = self.get_prompt_boxes_and_points( + output_dict, {}, train=True + )['prompt_point_coords'] + if objcap_loss_valid_mask is not None and ( + batch['prompt_point_coords'] is not None): + prompt_points = batch['prompt_point_coords'] + # NOTE: if it's not det task, don't use input prompt points + point_coords = jnp.where( + objcap_loss_valid_mask[:, None, None, None], + point_coords, + prompt_points[:, : self.num_text_proposals], + ) + output_dict['prompt_point_coords'] = point_coords + + matched_idxs, matched_gt_classes = self.box_decoder.match_gt( + last_proposals, gt_boxes, gt_classes + ) + if objcap_loss_valid_mask is not None: + # NOTE(jiaruixu): if it's not det task, use all proposals + matched_idxs = jnp.where( + objcap_loss_valid_mask[:, None], + matched_idxs, + jnp.arange(last_proposals.shape[1])[None], + ) + matched_gt_classes = jnp.where( + objcap_loss_valid_mask[:, None], + matched_gt_classes, + gt_classes[:, :self.num_text_proposals], + ) + output_dict['gt_classes'] = matched_gt_classes + + # [batch_size, num_text_proposals, max_cap_len] + matched_gt_text_tokens = jnp.take_along_axis( + gt_text_tokens, + matched_idxs[..., None], + axis=1, + mode='promise_in_bounds', + ) + output_dict['gt_text_tokens'] = matched_gt_text_tokens + + # [batch_size, num_text_proposals, 4] + matched_gt_boxes = jnp.take_along_axis( + gt_boxes, + matched_idxs[..., None], + axis=1, + mode='promise_in_bounds', + ) + output_dict['gt_boxes'] = matched_gt_boxes + + if context_tokens is not None: + matched_context_tokens = jnp.take_along_axis( + context_tokens, + matched_idxs[..., None], + axis=1, + mode='promise_in_bounds', + ) + output_dict['context_tokens'] = matched_context_tokens + + return output_dict + + def get_prompt_boxes_and_points(self, outputs, batch, train=False): + output_dict = {} + if 'detection_boxes' in outputs or 'last_proposals' in outputs: + if self.use_roi_box_in_training or not train: + detection_boxes = outputs['detection_boxes'] + else: + detection_boxes = outputs['last_proposals'] + output_dict['prompt_boxes'] = detection_boxes + + prompt_boxes = utils.get_first_possible_value( + 'prompt_boxes', [outputs, output_dict, batch] + ) + # sample points inside boxes + # [batch_size, num_prompts, box_points_per_side**2, 2] + point_coords = utils.boxes_to_points( + prompt_boxes, + utils.build_solid_grid( + self.box_points_per_side, self.box_point_with_offset + ), + ) + output_dict['prompt_point_coords'] = point_coords + return output_dict + + def get_gt_points_from_boxes(self, outputs, batch): + output_dict = {} + gt_boxes = utils.get_first_possible_value( + 'gt_boxes', [outputs, batch] + ) + assert gt_boxes is not None + # [batch_size, num_text_proposals, num_points, 2] + gt_point_coords = utils.boxes_to_points( + gt_boxes, + utils.build_donut_grid( + self.gt_box_points_per_side, + with_offset=self.gt_box_point_with_offset, + ), + ) + # [batch_size, num_text_proposals, max_cap_len, num_points, 2] + gt_point_coords = jnp.tile( + jnp.expand_dims(gt_point_coords, axis=2), + [1, 1, self.max_caption_length, 1, 1], + ) + # NOTE(jiaruixu): for localized narrative trace prediction branch, we + # shouldn't set gt_point_coords with input gt_boxes, because we are using + # gt_point_coords for a sequence of points + if batch['gt_point_coords'] is not None: + input_gt_point_coords = batch['gt_point_coords'][:, : gt_boxes.shape[1]] + input_gt_points_batch_mask = ( + jnp.max(input_gt_point_coords, axis=(1, 2, 3, 4)) > 0 + ) + input_gt_points_batch_mask = jnp.reshape( + input_gt_points_batch_mask, (-1, 1, 1, 1, 1)) + gt_point_coords = jnp.where( + input_gt_points_batch_mask, input_gt_point_coords, gt_point_coords + ) + output_dict['gt_point_coords'] = gt_point_coords + return output_dict + + def decode_text( + self, text_tokens, visual_features, context_tokens=None, return_feat=False + ): + """Generate logits of a single word. + + Args: + text_tokens: (batch_size, caption_length). + visual_features: (batch_size, feature_length, feat_size). + context_tokens: (batch_size, context_length) or None + return_feat: bool; if True, return shape will be ( batch_size, + caption_length, hidden_size). + + Returns: + output_logits: (batch_size, caption_length, vocab_size). + """ + return self.textual( + text_tokens, visual_features, context_tokens=context_tokens, + return_feat=return_feat, train=False) + + def decode_point(self, visual_features, text_feats, image_shape): + """Generate point coords of a single word. + + Args: + visual_features: (batch_size, num_caps_per_image, seq_len, emebd_dim) + text_feats: (batch_size, num_caps_per_image, caption_length, embed_dim) + image_shape: (batch_size, 2) + + Returns: + point_coords: (batch_size, num_caps_per_image, caption_length, 2). + """ + point_outputs, _ = self.forward_point_prediction( + outputs={'visual_features': visual_features, 'text_feats': text_feats}, + batch={'image_shape': image_shape}, + ) + + return point_outputs + + def decode_mask( + self, image_embeddings, boxes, image_size, visual_features, text_feats): + assert self.prompt_encoder is not None + assert self.mask_decoder is not None + output_dict = {} + assert self.mask_decoder_name == 'sam_mask_decoder' + visual_features_dict = {} + visual_features_dict[self.mask_decoder_feature_key] = image_embeddings + image_size_key = self.mask_decoder_feature_key.replace( + 'visual_features', 'image_size') + visual_features_dict[image_size_key] = image_size + + mask_output, _ = self.forward_mask_decode( + visual_features_dict, + outputs={ + 'visual_features': visual_features, + 'text_feats': text_feats, + 'detection_boxes': boxes, + }, + batch={}, + train=False, + ) + + low_res_masks = mask_output['detection_masks'] + iou_predictions = mask_output['iou_predictions'] + # low_res_masks = low_res_masks.max(axis=2) + # iou_predictions = iou_predictions.mean(axis=2) + top_iou = iou_predictions.max(axis=2) + top_iou_ind = iou_predictions.argmax(axis=2, keepdims=True) + + top_masks = jnp.take_along_axis( + low_res_masks, top_iou_ind[..., None, None], axis=2 + )[:, :, 0] + output_dict['detection_masks'] = top_masks + output_dict['iou_predictions'] = top_iou + + return output_dict + + def decode_boxes_from_points(self, point_coords, valid_mask): + """Convert points to detection boxes.""" + output_dict = {} + + # [batch_size, num_boxes, max_caption_length, points_per_token] + valid_mask = jnp.broadcast_to( + valid_mask[..., None], point_coords.shape[:-1] # pytype: disable=attribute-error # jax-ndarray + ) + + # [batch_size, num_boxes, num_points, 2] + point_coords = jnp.reshape(point_coords, point_coords.shape[:2] + (-1, 2)) # pytype: disable=attribute-error # jax-ndarray + # [batch_size, num_boxes, num_points] + valid_mask = jnp.reshape(valid_mask, point_coords.shape[:2] + (-1,)) + + # [batch_size, num_boxes, 4] + point_boxes = utils.points_to_boxes( + point_coords, + self.gt_box_points_per_side + if self.gt_box_point_with_offset + else 0, + valid_mask=valid_mask, + ) + point_boxes = jax.lax.stop_gradient(point_boxes) + + output_dict['point_detection_boxes'] = point_boxes + + return output_dict + + def loss_function( + self, + outputs: Any, + batch: Any, + ): + """Loss function of PixelLLM. + + Args: + outputs: dict + batch: dict + Returns: + total_loss: Total loss weighted appropriately. + metrics: auxiliary metrics for debugging and visualization. + """ + metrics = outputs['metrics'] + total_loss = 0 + loss_weights = { + 'text_loss': self.text_loss_weight, + 'det_loss': self.det_loss_weight, + 'point_loss': self.point_loss_weight, + 'mask_loss': self.mask_loss_weight, + } + cap_loss_valid_mask = batch['label'].get('cap_loss_valid_mask', None) + objcap_loss_valid_mask = batch['label'].get('objcap_loss_valid_mask', None) + if cap_loss_valid_mask is not None and objcap_loss_valid_mask is not None: + text_loss_mask = jnp.minimum( + cap_loss_valid_mask + objcap_loss_valid_mask, 1.) + else: + text_loss_mask = cap_loss_valid_mask if ( + cap_loss_valid_mask is not None) else objcap_loss_valid_mask + loss_masks = { + 'text_loss': text_loss_mask, + 'det_loss': batch['label'].get('proposal_loss_valid_mask', None), + 'point_loss': batch['label'].get('point_loss_valid_mask', None), + 'mask_loss': batch['label'].get('mask_loss_valid_mask', None), + } + for loss_name, loss_weight in loss_weights.items(): + if loss_name in metrics: + loss = metrics[loss_name] + if loss_masks[loss_name] is not None: + # we assume loss_mask should be the same in one batch + loss_weight *= loss_masks[loss_name].mean() + metrics[loss_name + '_scaled'] = loss_weight * loss + total_loss = metrics[loss_name + '_scaled'] + total_loss + + metrics['total_loss'] = total_loss + + return total_loss, metrics + + +class PixelLlmModel(base_model.BaseModel): + """Scenic Model Wrapper.""" + + def build_flax_model(self): + fields = set(x.name for x in dataclasses.fields(PixelLlmFlaxModel)) + config_dict = { + k: v for k, v in self.config.model.items() if k in fields} + return PixelLlmFlaxModel(**config_dict) + + def prepare_input_spec(self, meta_data): + """Prepare input spec for model.""" + input_spec = [( + meta_data['input_shape'], + meta_data.get('input_dtype', jnp.float32), + )] + if ( + self.flax_model.box_decoder_name == 'none' + and self.flax_model.text_decoder_name != 'none' + ): + input_spec.append(( + meta_data['prompt_box_shape'], + meta_data.get('prompt_box_dtype', jnp.float32), + )) + + return input_spec + + def train_forward_step(self, model_rng, variables, batch, debug=False): + flax_model = self.flax_model + kwargs = {} + if 'prompt_boxes' in batch['label']: + kwargs['prompt_boxes'] = batch['label']['prompt_boxes'] + if 'prompt_points' in batch['label']: + kwargs['prompt_point_coords'] = batch['label']['prompt_points'] + if 'boxes' in batch['label']: + kwargs['gt_boxes'] = batch['label']['boxes'] + if 'labels' in batch['label']: + kwargs['gt_classes'] = batch['label']['labels'] + if 'masks' in batch['label']: + kwargs['gt_masks'] = batch['label']['masks'] + if 'text_tokens' in batch['label']: + kwargs['gt_text_tokens'] = batch['label']['text_tokens'] + if 'context_tokens' in batch['label']: + kwargs['context_tokens'] = batch['label']['context_tokens'] + if 'points' in batch['label']: + kwargs['gt_point_coords'] = batch['label']['points'] + + if 'cap_loss_valid_mask' in batch['label']: + kwargs['cap_loss_valid_mask'] = batch['label']['cap_loss_valid_mask'] + if 'proposal_loss_valid_mask' in batch['label']: + kwargs['proposal_loss_valid_mask'] = batch[ + 'label']['proposal_loss_valid_mask'] + if 'objcap_loss_valid_mask' in batch['label']: + kwargs['objcap_loss_valid_mask'] = batch[ + 'label']['objcap_loss_valid_mask'] + if 'point_loss_valid_mask' in batch['label']: + kwargs['point_loss_valid_mask'] = batch['label']['point_loss_valid_mask'] + + predictions, new_model_state = flax_model.apply( + variables, + batch['inputs'], + padding_mask=batch['padding_mask'], + preprocess=True, + mutable=['batch_stats'], + train=True, + rngs={'dropout': model_rng}, + debug=debug, + **kwargs, + ) + + return predictions, new_model_state + + def inference( + self, + variables, + batch, + with_cap=True, + with_det=True, + with_point=True, + with_mask=True, + with_gt_prompt=False, + ): + """Inference on batch. + + The inference pipeline is in following order: + 1. predict visual features for captions, prepare begin tokens. + 2. autoregressively predict text tokens. + 3. (optional) rescore and add more the boxes with beam search results. + 4. (optional) predict point location based on visual and text feature. + 5. (optional) add point box results. + 6. (optional) forward mask decoder + + NOTE: rescore (step 3) will change the order of detected visual features + and text tokens. And 3->4->5 yields similar accuracy as 4->5->3. + + Args: + variables (dict): with params + batch (dict): with input and label + with_cap (bool): with caption + with_det (bool): with detection + with_point (bool): with point prediction + with_mask (bool): with mask prediction + with_gt_prompt (bool): with gt box prompt + + Returns: + dict + """ + params = variables['params'] + predictions = self.prepare_caption_prediction( + params, + batch, + with_det=with_det, + with_point=with_point, + with_mask=with_mask, + with_gt_prompt=with_gt_prompt, + ) + if self.flax_model.text_decoder_name != 'none': + if with_cap: + predictions = self.autoregressive_predict( + params, predictions, feature_key='visual_features' + ) + + if ( + with_det + and self.flax_model.box_decoder_name != 'none' + and self.config.model.get('mult_caption_score', False) + ): + predictions = self.rescore_detections(predictions) + + if with_point and self.flax_model.point_predictor_name != 'none': + if 'text_feats' not in predictions: + predictions = self.prepare_text_features( + params, batch, predictions, with_cap=with_cap + ) + + predictions = self.predict_points( + params, batch, predictions, with_cap=with_cap + ) + if with_point and self.config.model.get('use_points_as_det', False): + predictions = self.add_point_detection(params, predictions) + if ( + self.flax_model.mask_decoder_name != 'none' + and 'detection_boxes' in predictions + ): + if ( + 'text_feats' not in predictions + and self.flax_model.mask_adapter_name != 'none' + ): + predictions = self.prepare_text_features( + params, batch, predictions, with_cap=with_cap + ) + + predictions = self.pred_mask(params, predictions, with_cap=with_cap) + + # sav memory + predictions.pop('text_feats', None) + + return predictions + + def prepare_caption_prediction( + self, + params, + batch, + with_det=True, + with_point=True, + with_mask=True, + with_gt_prompt=False, + ): + """Prepare visual feature and begin token for captioning.""" + kwargs = {} + if 'context_tokens' in batch['label']: + # Prompts or questions in QA. + kwargs['context_tokens'] = batch['label']['context_tokens'] + if 'prompt_boxes' in batch['label']: + kwargs['prompt_boxes'] = batch['label']['prompt_boxes'] + if with_gt_prompt: + kwargs['prompt_boxes'] = batch['label']['boxes'] + # get starting tokens for captioning + predictions = self.flax_model.apply( + variables={'params': params}, + images=batch['inputs'], + padding_mask=batch['padding_mask'], + preprocess=True, + train=False, + with_det=with_det, + with_point=with_point, + with_mask=with_mask, + mutable=False, + **kwargs, + ) + if with_gt_prompt: + predictions['detection_boxes'] = batch['label']['boxes'] + predictions['detection_scores'] = jnp.ones( + batch['label']['boxes'].shape[:-1]) + + return predictions + + def autoregressive_predict( + self, params, predictions, feature_key='visual_features' + ): + """Autoregressive decoding text tokens.""" + predictions = auto_regressive_decode.autoregressive_predict( + self.flax_model, + params, + predictions, + feature_key=feature_key, + method=self.config.model.get('decode_method', 'greedy'), + beam_size=self.config.model.get('decode_beam_size', 1), + per_node_beam_size=self.config.model.get( + 'decode_per_node_beam_size', 2 + ), + ) + return predictions + + def rescore_detections(self, predictions): + """Reorder detection boxes given text scores.""" + detection_scores = predictions.pop('detection_scores') + detection_scores = jnp.maximum(detection_scores, 0.0) + decode_beam_size = self.config.model.get('decode_beam_size', 1) + + if decode_beam_size == 1: + predictions['detection_scores'] = ( + detection_scores * jnp.exp(predictions['log_probs']) + ) ** 0.5 + else: + predictions.pop('log_probs') + + # [batch_size, roi_post_nms_num_detections, decode_beam_size] + beam_log_probs = predictions.pop('beam_log_probs') + # [batch_size, roi_post_nms_num_detections, decode_beam_size] + beam_scores = ( + detection_scores[..., None] * jnp.exp(beam_log_probs) + ) ** 0.5 + # [batch_size, roi_post_nms_num_detections * decode_beam_size] + beam_scores = jnp.reshape(beam_scores, (beam_scores.shape[0], -1)) + + # [batch_size, roi_post_nms_num_detections, decode_beam_size, + # max_caption_length] + beam_text_tokens = predictions.pop('beam_text_tokens') + # [batch_size, roi_post_nms_num_detections * decode_beam_size, + # max_caption_length] + beam_text_tokens = jnp.reshape( + beam_text_tokens, + (beam_text_tokens.shape[0], -1, beam_text_tokens.shape[-1]), + ) + assert beam_scores.shape[1] == beam_text_tokens.shape[1] + + topk_scores, indices = lax.top_k( + beam_scores, k=self.flax_model.num_detections + ) + # [batch_size, roi_post_nms_num_detections, max_caption_length] + text_tokens = jnp.take_along_axis( + beam_text_tokens, indices[..., None], axis=1 + ) + + predictions['detection_scores'] = topk_scores + # predictions['detection_boxes'] = detection_boxes + # predictions['detection_classes'] = detection_classes + det_indices = indices // decode_beam_size + for det_filed in [ + 'detection_boxes', + 'detection_classes', + 'point_coords', + 'point_logits', + 'point_detection_boxes', + 'inference_point_coords', + 'visual_features', + ]: + # in case that the rescore happens before point replace detection + if det_filed not in predictions: + continue + det_pred = predictions.pop(det_filed) + predictions[det_filed] = jnp.take_along_axis( + det_pred, + jnp.reshape( + det_indices, det_indices.shape + (1,) * (det_pred.ndim - 2) + ), + axis=1, + ) + + predictions['text_tokens'] = text_tokens + predictions['num_detections'] = jnp.sum( + (topk_scores > 0.0).astype(jnp.int32), axis=-1 + ) + return predictions + + def prepare_text_features(self, params, batch, predictions, with_cap=True): + """Extract text features of text token.""" + context_tokens = utils.get_first_possible_value( + 'context_tokens', [predictions, batch['label']] + ) + if with_cap: + text_tokens = predictions['text_tokens'] + else: + # in RefCOCO, use ground truth text as input text tokens + text_tokens = batch['label']['text_tokens'] + visual_features = predictions['visual_features'] + + # replace redundent eos with padding token to align with training input + eos_mask = text_tokens == self.flax_model.end_token_id + cumsum_eos_mask = jnp.cumsum(eos_mask, axis=-1) + text_tokens = jnp.where(cumsum_eos_mask <= 1, text_tokens, 0) + predictions['text_tokens'] = text_tokens + + batch_size = text_tokens.shape[0] + num_caps_per_image = text_tokens.shape[1] + total_batch_size = batch_size * num_caps_per_image + # [total_batch_size, visual_seq_len, embed_dim] + visual_features = visual_features.reshape( + (total_batch_size,) + visual_features.shape[2:] + ) + text_tokens = text_tokens.reshape( + total_batch_size, + text_tokens.shape[2], + ) # (total_batch_size, num_caps_per_image, max_cap_len) + if context_tokens is not None: + context_tokens = context_tokens.reshape( + total_batch_size, context_tokens.shape[2] + ) + text_feats = self.flax_model.apply( + variables={'params': params}, + text_tokens=text_tokens, + visual_features=visual_features, + context_tokens=context_tokens, + return_feat=True, + method=self.flax_model.decode_text, + ) + text_feats = text_feats.reshape( + ( + batch_size, + num_caps_per_image, + ) + + text_feats.shape[1:] + ) + predictions['text_feats'] = text_feats + + return predictions + + def predict_points(self, params, batch, predictions, with_cap=True): + """Predict coordinates from text, for LN trace and RefCOCO.""" + del with_cap + image_shape = utils.get_image_shape( + batch['padding_mask'], batch['inputs'] + ) + + point_predictions = self.flax_model.apply( + variables={'params': params}, + visual_features=predictions['visual_features'], + text_feats=predictions['text_feats'], + image_shape=image_shape, + method=self.flax_model.decode_point, + ) + point_predictions['point_valid_mask'] = ( + utils.get_token_valid_mask( + predictions['text_tokens'], + self.flax_model.point_output_ignore, + self.flax_model.begin_token_id, + self.flax_model.end_token_id, + ) + ) + predictions.update(point_predictions) + return predictions + + def add_point_detection(self, params, predictions): + """Predict segmentation mask from bounding boxes.""" + box_outputs = self.flax_model.apply( + variables={'params': params}, + point_coords=predictions['point_coords'], + valid_mask=predictions['point_valid_mask'], + method=self.flax_model.decode_boxes_from_points, + ) + + point_boxes = box_outputs['point_detection_boxes'] + + if 'detection_boxes' in predictions: + predictions['point_detection_boxes'] = point_boxes + else: + predictions['detection_boxes'] = point_boxes + + return predictions + + def pred_mask(self, params, predictions, with_cap=True): + """Convert point to bounding boxes (for RefCOCO).""" + del with_cap + image_embeddings = predictions['sam_image_embeddings'] + image_size = self.flax_model.sam_preprocess_args.get( + 'image_size', SAM_IMAGE_SIZE + ) + boxes = predictions['detection_boxes'] + visual_features = predictions['visual_features'] + text_feats = predictions.get('text_feats', None) + mask_outputs = self.flax_model.apply( + variables={'params': params}, + image_embeddings=image_embeddings, + visual_features=visual_features, + text_feats=text_feats, + boxes=boxes, + image_size=image_size, + method=self.flax_model.decode_mask, + ) + + predictions.update(mask_outputs) + + return predictions + + def loss_function(self, outputs, batch): + return self.flax_model.loss_function(outputs, batch) diff --git a/scenic/projects/pixel_llm/modeling/point_predictor.py b/scenic/projects/pixel_llm/modeling/point_predictor.py new file mode 100644 index 0000000000000000000000000000000000000000..851c680005b5bdcb0788c7bbdd6ec9d6949a1b01 --- /dev/null +++ b/scenic/projects/pixel_llm/modeling/point_predictor.py @@ -0,0 +1,98 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Point location prediction module.""" + +import flax.linen as nn +import jax.numpy as jnp + + +class MLP(nn.Module): + """MLP module.""" + hidden_dim: int + output_dim: int + num_layers: int + zero_out: bool = False + activation: str = 'relu' + + @nn.compact + def __call__(self, x): + for i in range(self.num_layers - 1): + x = nn.Dense(self.hidden_dim, name=f'layers.{i}')(x) + if self.activation == 'gelu': + x = nn.gelu(x, approximate=False) + elif self.activation == 'relu': + x = nn.relu(x) + else: + raise NotImplementedError(self.activation) + if self.zero_out: + x = nn.Dense( + self.output_dim, + kernel_init=nn.initializers.normal(0.0001), + bias_init=nn.initializers.zeros_init(), + name=f'layers.{self.num_layers - 1}', + )(x) + else: + x = nn.Dense(self.output_dim, name=f'layers.{self.num_layers - 1}')(x) + return x + + +class MlpPointPredictor(nn.Module): + """Predict points for each token.""" + + hidden_dim: int = 512 + depth: int = 3 + num_output_points: int = 4 + num_classes: int = 1 + zero_out: bool = False + pre_norm: bool = False + mlp_activation: str = 'relu' + + def setup(self): + self.mlp = MLP( + hidden_dim=self.hidden_dim, + # x,y + background + output_dim=self.num_output_points * (3 + self.num_classes), + num_layers=self.depth, + zero_out=self.zero_out, + activation=self.mlp_activation, + name='mlp', + ) + + @nn.compact + def __call__(self, visual_features, text_feat): + """Predicot points for each token. + + Args: + visual_features: (B, N, L1, C), not used + text_feat: (batch_size, ..., hidden_size) + + Returns: + pred_points: (batch_size, ..., num_points, 2) + """ + del visual_features + if self.pre_norm: + text_feat = nn.LayerNorm(epsilon=1e-6)(text_feat) + pred_points = self.mlp(text_feat) + pred_points = jnp.reshape( + pred_points, + pred_points.shape[:-1] + (self.num_output_points, 3 + self.num_classes), + ) + point_coords = pred_points[..., :2] + logits = pred_points[..., 2:] + # point_coords = jnp.clip(point_coords, -1, 1) + + point_coords = (point_coords + 1) * 0.5 + + return point_coords, logits diff --git a/scenic/projects/pixel_llm/modeling/prompt_adapter.py b/scenic/projects/pixel_llm/modeling/prompt_adapter.py new file mode 100644 index 0000000000000000000000000000000000000000..c4b9b5d3757a263c7157650bfd92c9920d1f0cf1 --- /dev/null +++ b/scenic/projects/pixel_llm/modeling/prompt_adapter.py @@ -0,0 +1,186 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Prompt Adapter.""" + +import flax.linen as nn +import jax.numpy as jnp +from scenic.projects.baselines.segment_anything.modeling import transformer + + +class PromptAdaptor(nn.Module): + """Prompt Adaptor to adapt visual feature with location information.""" + + depth: int = 2 + input_embedding_dim: int = 256 + transformer_dim: int = 256 + num_outputs: int = 32 + head_hidden_dim: int = 2048 + output_dim: int = 1024 + + def setup(self): + self.output_tokens = self.param( + 'output_tokens.weight', + nn.initializers.normal(stddev=1.0), + (self.num_outputs, self.transformer_dim), + ) + + self.output_hypernework_mlps = [ + MLP(hidden_dim=self.head_hidden_dim, + output_dim=self.output_dim, num_layers=1, + name=f'output_hypernetworks_mlps.{i}') + for i in range(self.num_outputs) + ] + self.image_projection_mlp = MLP( + hidden_dim=self.head_hidden_dim, + output_dim=self.transformer_dim, + num_layers=1, + name='image_projection_mlp', + ) + if self.input_embedding_dim != self.transformer_dim: + self.prompt_embedding_projection_mlp = MLP( + hidden_dim=self.head_hidden_dim, + output_dim=self.transformer_dim, + num_layers=1, + name='prompt_embedding_projection_mlp', + ) + self.image_pe_projection_mlp = MLP( + hidden_dim=self.head_hidden_dim, + output_dim=self.transformer_dim, + num_layers=1, + name='image_pe_projection_mlp', + ) + else: + self.prompt_embedding_projection_mlp = None + self.image_pe_projection_mlp = None + + self.transformer = transformer.TwoWayTransformer( + depth=self.depth, + embedding_dim=self.transformer_dim, + name='transformer' + ) + + self.dense_output_mlp = MLP( + hidden_dim=self.head_hidden_dim, + output_dim=self.output_dim, + num_layers=1, + name='dense_output_mlp', + ) + + def predict_outputs( + self, + image_embeddings, + image_pe, + sparse_prompt_embeddings, + dense_prompt_embeddings, + ): + """Predict masks for a single image. + + Args: + image_embeddings: (H, W, embed_dim) + image_pe: (H, W, embed_dim) + sparse_prompt_embeddings: (num_prompts, num_points, embed_dim) + dense_prompt_embeddings: (num_prompts, H, W, embed_dim) + + Returns: + hs: (num_prompts, num_outputs, transformer_dim) + src: (num_prompts, h, w, transformer_dim) + """ + if self.prompt_embedding_projection_mlp is not None: + sparse_prompt_embeddings = self.prompt_embedding_projection_mlp( + sparse_prompt_embeddings + ) + dense_prompt_embeddings = self.prompt_embedding_projection_mlp( + dense_prompt_embeddings + ) + if self.image_pe_projection_mlp is not None: + image_pe = self.image_pe_projection_mlp(image_pe) + + output_tokens = self.output_tokens # (num_outputs, transformer_dim) + num_prompts = sparse_prompt_embeddings.shape[0] + output_tokens = jnp.broadcast_to( + output_tokens[None], + (num_prompts, self.num_outputs, self.transformer_dim), + ) + tokens = jnp.concatenate( + [output_tokens, sparse_prompt_embeddings], + axis=1, + ) # (num_prompts, num_outputs + num_points, embed_dim) + + src = jnp.repeat( + image_embeddings[None], tokens.shape[0], axis=0 + ) # (num_prompts, H, W, D) + src = self.image_projection_mlp(src) + dense_prompt_embeddings + pos_src = jnp.repeat( + image_pe[None], tokens.shape[0], axis=0 + ) # (num_prompts, H, W, D) + num_prompts, h, w, d = src.shape + + hs, src = self.transformer(src, pos_src, tokens) + tokens_out = hs[:, : self.num_outputs, :] + + hyper_in_list = [] + for i in range(self.num_outputs): + hyper_in_list.append( + self.output_hypernework_mlps[i]( + tokens_out[:, i, :] + ) # (num_prompts, d) + ) + hyper_in = jnp.stack(hyper_in_list, axis=1) # (num_prompts, num_outputs, d) + + src = src.reshape(num_prompts, h, w, d) + + src = self.dense_output_mlp(src) + + return hyper_in, src + + @nn.compact + def __call__( + self, + image_embeddings, + image_pe, + sparse_prompt_embeddings, + dense_prompt_embeddings, + ): + """Forward model for a single image. + + Args: + image_embeddings: (H, W, 3) + image_pe: (H, W, D) + sparse_prompt_embeddings: (num_prompts, num_points, embed_dim) + dense_prompt_embeddings: (num_prompts, H, W, embed_dim) + + Returns: + """ + hs, src = self.predict_outputs( + image_embeddings=image_embeddings, + image_pe=image_pe, + sparse_prompt_embeddings=sparse_prompt_embeddings, + dense_prompt_embeddings=dense_prompt_embeddings, + ) + return hs, src + + +class MLP(nn.Module): + hidden_dim: int + output_dim: int + num_layers: int + + @nn.compact + def __call__(self, x): + for i in range(self.num_layers - 1): + x = nn.Dense(self.hidden_dim, name=f'layers.{i}')(x) + x = nn.relu(x) + x = nn.Dense(self.output_dim, name=f'layers.{self.num_layers - 1}')(x) + return x diff --git a/scenic/projects/pixel_llm/modeling/t5_text_head.py b/scenic/projects/pixel_llm/modeling/t5_text_head.py new file mode 100644 index 0000000000000000000000000000000000000000..55bbbcc48a3d42380e3835f7e123bd628c05e0a3 --- /dev/null +++ b/scenic/projects/pixel_llm/modeling/t5_text_head.py @@ -0,0 +1,831 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Wrapper of T5 text decoder.""" + +import functools +from typing import Optional + +from flax import struct +import flax.linen as nn +from flax.linen import partitioning as nn_partitioning +import jax +from jax import lax +import jax.numpy as jnp +import numpy as np +from scenic.projects.t5 import model as t5_pretrained +from scenic.projects.t5.layers import t5 +from scenic.projects.t5.layers import t5_layers + +param_with_axes = nn_partitioning.param_with_axes +with_sharding_constraint = nn_partitioning.with_sharding_constraint + +# Type annotations +Array = jnp.ndarray + + +@struct.dataclass +class CustomT5Config(t5.T5Config): + encoder_lora_rank: int = 0 + decoder_lora_rank: int = 0 + encoder_lora_scale: float = 1.0 + decoder_lora_scale: float = 1.0 + encoder_lora_modules: str = 'q,v' + decoder_lora_modules: str = 'q,v' + + +class LoRADenseGeneral(t5_layers.DenseGeneral): + """A linear transformation (without bias) with flexible axes. + + + Attributes: + features: tuple with numbers of output features. + axis: tuple with axes to apply the transformation on. + dtype: the dtype of the computation (default: float32). + kernel_init: initializer function for the weight matrix. + """ + rank: int = 4 + scale: float = 1.0 + + @nn.compact + def __call__(self, inputs: Array) -> Array: + """Applies a linear transformation to the inputs along multiple dimensions. + + Args: + inputs: The nd-array to be transformed. + + Returns: + The transformed input. + """ + features = t5_layers._canonicalize_tuple(self.features) + axis = t5_layers._canonicalize_tuple(self.axis) + + inputs = jnp.asarray(inputs, self.dtype) + axis = t5_layers._normalize_axes(axis, inputs.ndim) + + kernel_shape = tuple([inputs.shape[ax] for ax in axis]) + features + kernel_param_shape = ( + np.prod([inputs.shape[ax] for ax in axis]), + np.prod(features), + ) + kernel = param_with_axes( + 'kernel', + self.kernel_init, + kernel_param_shape, + jnp.float32, + axes=self.kernel_axes, + ) + kernel = jnp.asarray(kernel, self.dtype) + kernel = jnp.reshape(kernel, kernel_shape) + + # begin LoRA code + kernel_left_shape = tuple([inputs.shape[ax] for ax in axis] + [self.rank]) + kernel_left_param_shape = ( + np.prod([inputs.shape[ax] for ax in axis]), + self.rank, + ) + kernel_right_shape = tuple([self.rank] + list(features)) + kernel_right_param_shape = (self.rank, np.prod(features)) + kernel_left_axis_names = list( + self.kernel_axes[: len(kernel_left_param_shape) - 1] + ) + ['stack'] + kernel_right_axis_names = ['stack'] + list( + self.kernel_axes[-(len(kernel_right_param_shape) - 1) :] + ) + kernel_left = param_with_axes( + 'kernel_left_lora', + self.kernel_init, + kernel_left_param_shape, + jnp.float32, + axes=tuple(kernel_left_axis_names), + ) + kernel_right = param_with_axes( + 'kernel_right_lora', + nn.initializers.zeros_init(), + kernel_right_param_shape, + jnp.float32, + axes=tuple(kernel_right_axis_names), + ) + + kernel_left = jnp.asarray(kernel_left, self.dtype) + kernel_left = jnp.reshape(kernel_left, kernel_left_shape) + + kernel_right = jnp.asarray(kernel_right, self.dtype) + kernel_right = jnp.reshape(kernel_right, kernel_right_shape) + einsum_str = 'abcdefghijklmnopqrstuvwxy' + assert len(features) <= len(einsum_str) + feat_einsum = einsum_str[: len(features)] + kernel_delta = jnp.einsum(f'...z, z{feat_einsum}->...{feat_einsum}', + kernel_left, kernel_right) + kernel = kernel + self.scale * kernel_delta + # end LoRA code + + contract_ind = tuple(range(0, len(axis))) + return lax.dot_general(inputs, kernel, ((axis, contract_ind), ((), ()))) + + +class CustomMultiHeadDotProductAttention( + t5_layers.MultiHeadDotProductAttention +): + """MultiHeadDotProductAttention that supports LoRA. + """ + + lora_rank: int = 0 + lora_scale: float = 1.0 + lora_modules: str = 'q,v' + + @nn.compact + def __call__( + self, + inputs_q: Array, + inputs_kv: Array, + mask: Optional[Array] = None, + bias: Optional[Array] = None, + *, + decode: bool = False, + deterministic: bool = False, + ) -> Array: + """Applies multi-head dot product attention on the input data. + + Projects the inputs into multi-headed query, key, and value vectors, + applies dot-product attention and project the results to an output vector. + + There are two modes: decoding and non-decoding (e.g., training). The mode is + determined by `decode` argument. For decoding, this method is called twice, + first to initialize the cache and then for an actual decoding process. The + two calls are differentiated by the presence of 'cached_key' in the variable + dict. In the cache initialization stage, the cache variables are initialized + as zeros and will be filled in the subsequent decoding process. + + In the cache initialization call, `inputs_q` has a shape [batch, length, + q_features] and `inputs_kv`: [batch, length, kv_features]. During the + incremental decoding stage, query, key and value all have the shape [batch, + 1, qkv_features] corresponding to a single step. + + Args: + inputs_q: input queries of shape `[batch, q_length, q_features]`. + inputs_kv: key/values of shape `[batch, kv_length, kv_features]`. + mask: attention mask of shape `[batch, num_heads, q_length, kv_length]`. + bias: attention bias of shape `[batch, num_heads, q_length, kv_length]`. + decode: Whether to prepare and use an autoregressive cache. + deterministic: Disables dropout if set to True. + + Returns: + output of shape `[batch, length, q_features]`. + """ + if self.lora_rank > 0: + lora_projection = functools.partial( + LoRADenseGeneral, + rank=self.lora_rank, + scale=self.lora_scale, + axis=-1, + features=(self.num_heads, self.head_dim), + kernel_axes=('embed', 'joined_kv'), + dtype=self.dtype) + else: + lora_projection = None + projection = functools.partial( + t5_layers.DenseGeneral, + axis=-1, + features=(self.num_heads, self.head_dim), + kernel_axes=('embed', 'joined_kv'), + dtype=self.dtype) + projection_q = projection + projection_k = projection + projection_v = projection + if lora_projection is not None: + if 'q' in self.lora_modules: + projection_q = lora_projection + if 'k' in self.lora_modules: + projection_k = lora_projection + if 'v' in self.lora_modules: + projection_v = lora_projection + + # NOTE: T5 does not explicitly rescale the attention logits by + # 1/sqrt(depth_kq)! This is folded into the initializers of the + # linear transformations, which is equivalent under Adafactor. + depth_scaling = jnp.sqrt(self.head_dim).astype(self.dtype) + query_init = lambda *args: self.kernel_init(*args) / depth_scaling + + # Project inputs_q to multi-headed q/k/v + # dimensions are then [batch, length, num_heads, head_dim] + query = projection_q(kernel_init=query_init, name='query')(inputs_q) + key = projection_k(kernel_init=self.kernel_init, name='key')(inputs_kv) + value = projection_v(kernel_init=self.kernel_init, name='value')(inputs_kv) + + query = with_sharding_constraint(query, ('batch', 'length', 'heads', 'kv')) + key = with_sharding_constraint(key, ('batch', 'length', 'heads', 'kv')) + value = with_sharding_constraint(value, ('batch', 'length', 'heads', 'kv')) + + if decode: + # Detect if we're initializing by absence of existing cache data. + is_initialized = self.has_variable('cache', 'cached_key') + # The key and value have dimension [batch, length, num_heads, head_dim], + # but we cache them as [batch, num_heads, head_dim, length] as a TPU + # fusion optimization. This also enables the "scatter via one-hot + # broadcast" trick, which means we do a one-hot broadcast instead of a + # scatter/gather operations, resulting in a 3-4x speedup in practice. + swap_dims = lambda x: x[:-3] + tuple(x[i] for i in [-2, -1, -3]) + cached_key = self.variable('cache', 'cached_key', jnp.zeros, + swap_dims(key.shape), key.dtype) + cached_value = self.variable('cache', 'cached_value', jnp.zeros, + swap_dims(value.shape), value.dtype) + cache_index = self.variable('cache', 'cache_index', + lambda: jnp.array(0, dtype=jnp.int32)) + if is_initialized: + batch, num_heads, head_dim, length = (cached_key.value.shape) + # During fast autoregressive decoding, we feed one position at a time, + # and cache the keys and values step by step. + # Sanity shape check of cached key against input query. + expected_shape = (batch, 1, num_heads, head_dim) + if expected_shape != query.shape: + raise ValueError('Autoregressive cache shape error, ' + 'expected query shape %s instead got %s.' % + (expected_shape, query.shape)) + + # Create a OHE of the current index. NOTE: the index is increased below. + cur_index = cache_index.value + one_hot_indices = jax.nn.one_hot(cur_index, length, dtype=key.dtype) + # In order to update the key, value caches with the current key and + # value, we move the length axis to the back, similar to what we did for + # the cached ones above. + # Note these are currently the key and value of a single position, since + # we feed one position at a time. + one_token_key = jnp.moveaxis(key, -3, -1) + one_token_value = jnp.moveaxis(value, -3, -1) + # Update key, value caches with our new 1d spatial slices. + # We implement an efficient scatter into the cache via one-hot + # broadcast and addition. + key = cached_key.value + one_token_key * one_hot_indices + value = cached_value.value + one_token_value * one_hot_indices + cached_key.value = key + cached_value.value = value + cache_index.value = cache_index.value + 1 + # Move the keys and values back to their original shapes. + key = jnp.moveaxis(key, -1, -3) + value = jnp.moveaxis(value, -1, -3) + + # Causal mask for cached decoder self-attention: our single query + # position should only attend to those key positions that have already + # been generated and cached, not the remaining zero elements. + mask = t5_layers.combine_masks( + mask, + jnp.broadcast_to( + jnp.arange(length) <= cur_index, + # (1, 1, length) represent (head dim, query length, key length) + # query length is 1 because during decoding we deal with one + # index. + # The same mask is applied to all batch elements and heads. + (batch, 1, 1, length))) + + # Grab the correct relative attention bias during decoding. This is + # only required during single step decoding. + if bias is not None: + # The bias is a full attention matrix, but during decoding we only + # have to take a slice of it. + # This is equivalent to bias[..., cur_index:cur_index+1, :]. + bias = t5_layers.dynamic_vector_slice_in_dim( + jnp.squeeze(bias, axis=0), jnp.reshape(cur_index, (-1)), 1, -2) + + # Convert the boolean attention mask to an attention bias. + if mask is not None: + # attention mask in the form of attention bias + attention_bias = lax.select( + mask > 0, + jnp.full(mask.shape, 0.).astype(self.dtype), + jnp.full(mask.shape, -1e10).astype(self.dtype)) + else: + attention_bias = None + + # Add provided bias term (e.g. relative position embedding). + if bias is not None: + attention_bias = t5_layers.combine_biases(attention_bias, bias) + + dropout_rng = None + if not deterministic and self.dropout_rate > 0.: + dropout_rng = self.make_rng('dropout') + + # Apply attention. + x = t5_layers.dot_product_attention( + query, + key, + value, + bias=attention_bias, + dropout_rng=dropout_rng, + dropout_rate=self.dropout_rate, + deterministic=deterministic, + dtype=self.dtype, + float32_logits=self.float32_logits) + + # Back to the original inputs dimensions. + if self.lora_rank > 0 and 'o' in self.lora_modules: + out = LoRADenseGeneral( + features=inputs_q.shape[-1], # output dim is set to the input dim. + axis=(-2, -1), + kernel_init=self.kernel_init, + kernel_axes=('joined_kv', 'embed'), + dtype=self.dtype, + rank=self.lora_rank, + scale=self.lora_scale, + name='out')( + x) + else: + out = t5_layers.DenseGeneral( + features=inputs_q.shape[-1], # output dim is set to the input dim. + axis=(-2, -1), + kernel_init=self.kernel_init, + kernel_axes=('joined_kv', 'embed'), + dtype=self.dtype, + name='out')( + x) + return out + + +class CustomEncoderLayer(t5.EncoderLayer): + """Encoder layer that support LoRA.""" + + config: CustomT5Config + + @nn.compact + def __call__(self, inputs, encoder_mask=None, deterministic=False): + cfg = self.config + + # Relative position embedding as attention biases. + encoder_bias = self.relative_embedding(inputs.shape[-2], inputs.shape[-2], + True) + + # Attention block. + assert inputs.ndim == 3 + x = t5_layers.LayerNorm( + dtype=cfg.dtype, name='pre_attention_layer_norm')( + inputs) + # [batch, length, emb_dim] -> [batch, length, emb_dim] + x = CustomMultiHeadDotProductAttention( + num_heads=cfg.num_heads, + dtype=cfg.dtype, + head_dim=cfg.head_dim, + dropout_rate=cfg.dropout_rate, + float32_logits=cfg.float32_attention_logits, + lora_rank=cfg.encoder_lora_rank, + lora_scale=cfg.encoder_lora_scale, + lora_modules=cfg.encoder_lora_modules, + name='attention')( + x, x, encoder_mask, encoder_bias, deterministic=deterministic) + x = nn.Dropout( + rate=cfg.dropout_rate, broadcast_dims=(-2,))( + x, deterministic=deterministic) + x = x + inputs + + # MLP block. + y = t5_layers.LayerNorm(dtype=cfg.dtype, name='pre_mlp_layer_norm')(x) + # [batch, length, emb_dim] -> [batch, length, emb_dim] + y = t5_layers.MlpBlock( + intermediate_dim=cfg.mlp_dim, + activations=cfg.mlp_activations, + intermediate_dropout_rate=cfg.dropout_rate, + dtype=cfg.dtype, + name='mlp', + )(y, deterministic=deterministic) + y = nn.Dropout( + rate=cfg.dropout_rate, broadcast_dims=(-2,))( + y, deterministic=deterministic) + y = y + x + + return y + + +class CustomDecoderLayer(t5.DecoderLayer): + """Decoder layer that supports LoRA.""" + config: CustomT5Config + + @nn.compact + def __call__(self, + inputs, + encoded, + decoder_mask=None, + encoder_decoder_mask=None, + deterministic=False, + decode=False, + max_decode_length=None): + cfg = self.config + + # Relative position embedding as attention biases. + l = max_decode_length if decode and max_decode_length else inputs.shape[-2] + decoder_bias = self.relative_embedding(l, l, False) + + # inputs: embedded inputs to the decoder with shape [batch, length, emb_dim] + x = t5_layers.LayerNorm( + dtype=cfg.dtype, name='pre_self_attention_layer_norm')( + inputs) + + # Self-attention block + x = CustomMultiHeadDotProductAttention( + num_heads=cfg.num_heads, + dtype=cfg.dtype, + head_dim=cfg.head_dim, + dropout_rate=cfg.dropout_rate, + float32_logits=cfg.float32_attention_logits, + lora_rank=cfg.decoder_lora_rank, + lora_scale=cfg.decoder_lora_scale, + lora_modules=cfg.decoder_lora_modules, + name='self_attention')( + x, + x, + decoder_mask, + decoder_bias, + deterministic=deterministic, + decode=decode) + x = nn.Dropout( + rate=cfg.dropout_rate, broadcast_dims=(-2,))( + x, deterministic=deterministic) + x = x + inputs + + # Encoder-Decoder block. + y = t5_layers.LayerNorm( + dtype=cfg.dtype, name='pre_cross_attention_layer_norm')( + x) + y = CustomMultiHeadDotProductAttention( + num_heads=cfg.num_heads, + dtype=cfg.dtype, + head_dim=cfg.head_dim, + dropout_rate=cfg.dropout_rate, + float32_logits=cfg.float32_attention_logits, + lora_rank=cfg.decoder_lora_rank, + lora_scale=cfg.decoder_lora_scale, + lora_modules=cfg.decoder_lora_modules, + name='encoder_decoder_attention')( + y, encoded, encoder_decoder_mask, deterministic=deterministic) + y = nn.Dropout( + rate=cfg.dropout_rate, broadcast_dims=(-2,))( + y, deterministic=deterministic) + y = y + x + + # MLP block. + z = t5_layers.LayerNorm(dtype=cfg.dtype, name='pre_mlp_layer_norm')(y) + z = t5_layers.MlpBlock( + intermediate_dim=cfg.mlp_dim, + activations=cfg.mlp_activations, + intermediate_dropout_rate=cfg.dropout_rate, + dtype=cfg.dtype, + name='mlp', + )(z, deterministic=deterministic) + z = nn.Dropout( + rate=cfg.dropout_rate, broadcast_dims=(-2,))( + z, deterministic=deterministic) + z = z + y + + return z + + +class CustomEncoder(t5.Encoder): + """Encoder that accepts visual embeddings as input.""" + + config: CustomT5Config + + @nn.compact + def __call__(self, + encoder_input_embeddings, + encoder_input_tokens=None, + encoder_mask=None, + deterministic=False): # pytype: disable=signature-mismatch + """Run encoder. + + Args: + encoder_input_embeddings: (batch_size, num_vision_tokens, dim). The token + feature after the embedding layer or the features from other moduels + (e.g., from vision encoder). + encoder_input_tokens: (batch_size, num_context_tokens), int. The text + token IDs. We will concatenate the `encoder_input_tokens` at the end of + the existing `encoder_input_embeddings`. + encoder_mask: (batch_size, num_total_tokens), padding mask of + `encoder_input_tokens`. + deterministic: bool + Returns: + output: (batch_size, num_total_tokens, dim) + """ + cfg = self.config + rel_emb = t5_layers.RelativePositionBiases( + num_buckets=32, + max_distance=128, + num_heads=cfg.num_heads, + dtype=cfg.dtype, + embedding_init=nn.initializers.variance_scaling(1.0, 'fan_avg', + 'uniform'), + name='relpos_bias') + + if encoder_input_tokens is not None: + assert encoder_input_tokens.ndim == 2 # [batch, length] + # [batch, length] -> [batch, length, emb_dim] + x = self.shared_embedding(encoder_input_tokens.astype('int32')) + x = nn.Dropout( + rate=cfg.dropout_rate, broadcast_dims=(-2,))( + x, deterministic=deterministic) + x = x.astype(cfg.dtype) + x = jnp.concatenate([encoder_input_embeddings, x], axis=1) + else: + x = encoder_input_embeddings + + for lyr in range(cfg.num_encoder_layers): + # [batch, length, emb_dim] -> [batch, length, emb_dim] + x = CustomEncoderLayer( + config=cfg, relative_embedding=rel_emb, + name=f'layers_{lyr}')(x, encoder_mask, deterministic) + + x = t5_layers.LayerNorm(dtype=cfg.dtype, name='encoder_norm')(x) + return nn.Dropout(rate=cfg.dropout_rate)(x, deterministic=deterministic) + + +class CustomDecoder(t5.Decoder): + """Decoder that returns features before word logits.""" + + config: CustomT5Config + + @nn.compact + def __call__(self, + encoded, + decoder_input_tokens, + decoder_positions=None, + decoder_mask=None, + encoder_decoder_mask=None, + deterministic=False, + decode=False, + max_decode_length=None, + return_logit_and_feat=True): + cfg = self.config + assert decoder_input_tokens.ndim == 2 # [batch, len] + rel_emb = t5_layers.RelativePositionBiases( + num_buckets=32, + max_distance=128, + num_heads=cfg.num_heads, + dtype=cfg.dtype, + embedding_init=nn.initializers.variance_scaling(1.0, 'fan_avg', + 'uniform'), + name='relpos_bias') + + # [batch, length] -> [batch, length, emb_dim] + y = self.shared_embedding(decoder_input_tokens.astype('int32')) + y = nn.Dropout( + rate=cfg.dropout_rate, broadcast_dims=(-2,))( + y, deterministic=deterministic) + y = y.astype(cfg.dtype) + + for lyr in range(cfg.num_decoder_layers): + # [batch, length, emb_dim] -> [batch, length, emb_dim] + y = CustomDecoderLayer( + config=cfg, + relative_embedding=rel_emb, + name=f'layers_{lyr}')( + y, + encoded, + decoder_mask=decoder_mask, + encoder_decoder_mask=encoder_decoder_mask, + deterministic=deterministic, + decode=decode, + max_decode_length=max_decode_length) + + y = t5_layers.LayerNorm(dtype=cfg.dtype, name='decoder_norm')(y) + decode_feat = y + y = nn.Dropout( + rate=cfg.dropout_rate, broadcast_dims=(-2,))( + y, deterministic=deterministic) + + # [batch, length, emb_dim] -> [batch, length, vocab_size] + if cfg.logits_via_embedding: + # Use the transpose of embedding matrix for logit transform. + logits = self.shared_embedding.attend(y) + # Correctly normalize pre-softmax logits for this shared case. + logits = logits / jnp.sqrt(y.shape[-1]) + else: + logits = t5_layers.DenseGeneral( + cfg.vocab_size, + dtype=jnp.float32, # Use float32 for stabiliity. + kernel_axes=('embed', 'vocab'), + name='logits_dense')( + y) + if return_logit_and_feat: + return logits, decode_feat + return logits + + +class CustomTransformer(t5.Transformer): + """T5 Transformer that accepts visual embeddings as input.""" + + config: CustomT5Config + + def setup(self): + cfg = self.config + self.shared_embedding = t5_layers.Embed( + num_embeddings=cfg.vocab_size, + features=cfg.emb_dim, + dtype=cfg.dtype, + attend_dtype=jnp.float32, # for logit training stability + embedding_init=nn.initializers.normal(stddev=1.0), + one_hot=True, + name='token_embedder') + + self.encoder = CustomEncoder( + config=cfg, + shared_embedding=self.shared_embedding, + ) + self.decoder = CustomDecoder( + config=cfg, + shared_embedding=self.shared_embedding, + ) + + def encode(self, + encoder_input_embeddings, + encoder_input_tokens=None, + enable_dropout=True): # pytype: disable=signature-mismatch + """Applies Transformer encoder-branch on the inputs.""" + cfg = self.config + visual_mask = jnp.ones(encoder_input_embeddings.shape[:2], dtype=bool) + if encoder_input_tokens is not None: + assert encoder_input_tokens.ndim == 2, ( + f'Expected `encoder_input_tokens` to be of shape (batch, len). ' + f'Got {encoder_input_tokens.shape}') + # Make padding attention mask. + context_mask = encoder_input_tokens > 0 + valid_mask = jnp.concatenate([visual_mask, context_mask], axis=1) + encoder_mask = t5_layers.make_attention_mask( + valid_mask, valid_mask, dtype=cfg.dtype) + else: + encoder_mask = None + valid_mask = visual_mask + + return self.encoder( + encoder_input_embeddings, + encoder_input_tokens, + encoder_mask, + deterministic=not enable_dropout), valid_mask + + def decode( + self, + encoded, + encoder_input_tokens, # only needed for masks + decoder_input_tokens, + decoder_target_tokens, + encoder_segment_ids=None, + decoder_segment_ids=None, + decoder_positions=None, + enable_dropout=True, + decode=False, + max_decode_length=None, + return_logit_and_feat=False): + """Applies Transformer decoder-branch on encoded-input and target.""" + cfg = self.config + + # Make padding attention masks. + if decode: + # Do not mask decoder attention based on targets padding at + # decoding/inference time. + decoder_mask = None + encoder_decoder_mask = t5_layers.make_attention_mask( + jnp.ones_like(decoder_target_tokens), + encoder_input_tokens > 0, + dtype=cfg.dtype) + else: + decoder_mask = t5_layers.make_decoder_mask( + decoder_target_tokens=decoder_target_tokens, + dtype=cfg.dtype, + decoder_segment_ids=decoder_segment_ids) + encoder_decoder_mask = t5_layers.make_attention_mask( + decoder_target_tokens > 0, encoder_input_tokens > 0, dtype=cfg.dtype) + + # Add segmentation block-diagonal attention masks if using segmented data. + if encoder_segment_ids is not None: + if decode: + raise ValueError( + 'During decoding, packing should not be used but ' + '`encoder_segment_ids` was passed to `Transformer.decode`.') + + encoder_decoder_mask = t5_layers.combine_masks( + encoder_decoder_mask, + t5_layers.make_attention_mask( + decoder_segment_ids, + encoder_segment_ids, + jnp.equal, + dtype=cfg.dtype)) + + ret = self.decoder( + encoded, + decoder_input_tokens=decoder_input_tokens, + decoder_positions=decoder_positions, + decoder_mask=decoder_mask, + encoder_decoder_mask=encoder_decoder_mask, + deterministic=not enable_dropout, + decode=decode, + max_decode_length=max_decode_length, + return_logit_and_feat=return_logit_and_feat) + return ret + + @nn.compact + def __call__( + self, text_tokens, visual_features, + context_tokens=None, train=False, + return_feat=False, return_logit_and_feat=False): # pytype: disable=signature-mismatch + """Generate logits of a single word. + + Args: + text_tokens: (batch_size, caption_length). text_tokens[0] = BOS. + visual_features: (batch_size, feature_length, feat_size). + context_tokens: (batch_size, context_length). + train: bool. + return_feat: bool. If true, return the feature before vocabulary. + return_logit_and_feat: bool + + Returns: + output_logits: (batch_size, caption_length, vocab_size). + """ + encoded, encoder_valid_mask = self.encode( + encoder_input_embeddings=visual_features, + encoder_input_tokens=context_tokens, + enable_dropout=train, + ) + + # T5 decoder needs a "decoder_target" input to compute the attention mask. + # This is the target sentence without the BOS token. We pad it with 0 to + # retain the same length as the input tokens. + decoder_target = jnp.concatenate( + [text_tokens[:, 1:], + jnp.zeros((text_tokens.shape[0], 1), dtype=jnp.int32)], + axis=1) + output_logits, output_feat = self.decode( + encoded, + encoder_valid_mask, # only needed for masks + text_tokens, + decoder_target, + enable_dropout=train, + decode=False, + return_logit_and_feat=True, + ) + if return_feat: + return output_feat + if return_logit_and_feat: + return output_logits, output_feat + return output_logits + + +class T5TextualHead(nn.Module): + """Wrapper of T5 text decoder.""" + t5_model: str = 'flan_t5_small' + dtype: str = 'bfloat16' + dropout_rate: float = 0.0 + vocab_size: int = 32128 + encoder_lora_rank: int = 0 + decoder_lora_rank: int = 0 + encoder_lora_scale: float = 1.0 + decoder_lora_scale: float = 1.0 + encoder_lora_modules: str = 'q,v' + decoder_lora_modules: str = 'q,v' + + @nn.compact + def __call__( + self, text_tokens, visual_features, + context_tokens=None, train=False, return_feat=False, + return_logit_and_feat=False): + """Generate logits of a single word. + + Args: + text_tokens: (batch_size, caption_length). + visual_features: (batch_size, feature_length, feat_size). + context_tokens: (batch_size, context_length). + train: bool. + return_feat: bool. If true, return the feature before vocabulary. + return_logit_and_feat: bool + Returns: + output_logits: (batch_size, caption_length, vocab_size). + """ + config_dict = t5_pretrained.CONFIGS[self.t5_model] + config_dict['dtype'] = self.dtype + config_dict['dropout_rate'] = self.dropout_rate + config_dict['vocab_size'] = self.vocab_size + config_dict['encoder_lora_rank'] = self.encoder_lora_rank + config_dict['decoder_lora_rank'] = self.decoder_lora_rank + config_dict['encoder_lora_scale'] = self.encoder_lora_scale + config_dict['decoder_lora_scale'] = self.decoder_lora_scale + config_dict['encoder_lora_modules'] = self.encoder_lora_modules + config_dict['decoder_lora_modules'] = self.decoder_lora_modules + t5_config = CustomT5Config(**config_dict) + + return CustomTransformer( + t5_config, + name='t5_module', + )( + text_tokens, + visual_features, + context_tokens, + train, + return_feat, + return_logit_and_feat=return_logit_and_feat, + ) diff --git a/scenic/projects/pixel_llm/modeling/text_decoder.py b/scenic/projects/pixel_llm/modeling/text_decoder.py new file mode 100644 index 0000000000000000000000000000000000000000..1801b3fd7e04cccd6b7de7c821b8e8a3cce33027 --- /dev/null +++ b/scenic/projects/pixel_llm/modeling/text_decoder.py @@ -0,0 +1,443 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Auto-regressive text decoder in GIT paper. + +GIT: A Generative Image-to-text Transformer for Vision and Language. Wang et al. + +arXiv: https://arxiv.org/abs/2205.14100 + +reference torch implementation: +https://github.com/microsoft/GenerativeImage2Text/blob/main/ +generativeimage2text/layers/decoder.py + +""" + +from flax import linen as nn +import jax +import jax.numpy as jnp +from scenic.projects.pixel_llm.modeling import utils as pllm_utils + +NEG_INF = float('-inf') + + +class BertSelfAttention(nn.Module): + """Bert layer self attention.""" + + num_heads: int = 12 + hidden_size: int = 768 + attention_dropout: float = 0.1 + + @nn.compact + def __call__( + self, input_tensor, attention_mask, train=False): + # input_tensor: (batch_size, tot_len, hidden_size) + # attention_mask: (1, 1, tot_len, tot_len): NEG_INF to mask entry out. + q = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='query')(input_tensor) + k = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='key')(input_tensor) + v = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='value')(input_tensor) + # TODO(zhouxy): implement decoding cache here. + + head_dim = self.hidden_size // self.num_heads + transpose = lambda x: x.reshape( # pylint: disable=g-long-lambda + x.shape[0], x.shape[1], self.num_heads, head_dim).transpose(0, 2, 1, 3) + q = transpose(q) + k = transpose(k) + v = transpose(v) # (batch_size, num_heads, tot_len, head_dim) + attention_scores = (q * (head_dim ** -0.5)) @ k.transpose( + 0, 1, 3, 2) # (batch_size, num_heads, tot_len, tot_len) + attention_scores = attention_scores + attention_mask + attention_scores = jax.nn.softmax(attention_scores, axis=-1) + attention_scores = nn.Dropout(self.attention_dropout)( + attention_scores, deterministic=not train) + out = (attention_scores @ v).transpose(0, 2, 1, 3).reshape( + v.shape[0], v.shape[2], self.hidden_size) + return out + + +class BertSelfOutput(nn.Module): + """Bert layer self output.""" + + hidden_size: int = 768 + hidden_dropout: float = 0.1 + + @nn.compact + def __call__(self, hidden_states, input_tensor, train=False): + hidden_states = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='dense')(hidden_states) + hidden_states = nn.Dropout(self.hidden_dropout)( + hidden_states, deterministic=not train) + hidden_states = hidden_states + input_tensor + hidden_states = nn.LayerNorm( + epsilon=1e-5, name='LayerNorm')(hidden_states) + return hidden_states + + +class BertAttention(nn.Module): + """Bert layer attention.""" + hidden_size: int = 768 + num_heads: int = 12 + + @nn.compact + def __call__( + self, input_tensor, attention_mask, train=False): + self_outputs = BertSelfAttention( + num_heads=self.num_heads, hidden_size=self.hidden_size, name='self')( + input_tensor, attention_mask, train=train, + ) # (batch_size, tot_len, hidden_size) + attention_output = BertSelfOutput( + hidden_size=self.hidden_size, name='output')( + self_outputs, input_tensor, train=train, + ) # (batch_size, tot_len, hidden_size) + return attention_output + + +class BertIntermediate(nn.Module): + """Bert layer intermediate.""" + + intermediate_size: int = 768 * 4 + + @nn.compact + def __call__( + self, hidden_states, train=False): + hidden_states = nn.Dense( + self.intermediate_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='dense')(hidden_states) + hidden_states = nn.gelu(hidden_states, approximate=False) + return hidden_states + + +class BertOutput(nn.Module): + """Bert layer output.""" + + hidden_size: int = 768 + hidden_dropout: float = 0.1 + + @nn.compact + def __call__( + self, hidden_states, input_tensor, train=False): + hidden_states = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='dense')(hidden_states) + hidden_states = nn.Dropout(self.hidden_dropout)( + hidden_states, deterministic=not train) + hidden_states = hidden_states + input_tensor + hidden_states = nn.LayerNorm( + epsilon=1e-12, name='LayerNorm')( + hidden_states) # eps following official implementation. + return hidden_states + + +class BertLayer(nn.Module): + """GIT encoder Layer.""" + hidden_size: int = 768 + num_heads: int = 12 + + @nn.compact + def __call__( + self, hidden_states, attention_mask, train=False): + """Forward layer. + + Args: + hidden_states: (batch_size, tot_len, hidden_size). + attention_mask: (1, 1, tot_len, tot_len). + train: bool. + Returns: + hidden_states: (batch_size, tot_len, hidden_size). + """ + attention_outputs = BertAttention( + num_heads=self.num_heads, hidden_size=self.hidden_size, + name='attention')( + hidden_states, attention_mask, train=train, + ) # (batch_size, tot_len, hidden_size) + intermediate_output = BertIntermediate( + intermediate_size=self.hidden_size * 4, name='intermediate')( + attention_outputs, train=train, + ) # (batch_size, tot_len, intermediate_size) + layer_output = BertOutput(hidden_size=self.hidden_size, name='output')( + intermediate_output, attention_outputs, train=train, + ) # (batch_size, tot_len, hidden_size) + return layer_output + + +class BertEncoder(nn.Module): + """GIT Encoder.""" + num_hidden_layers: int = 6 + hidden_size: int = 768 + num_heads: int = 12 + + @nn.compact + def __call__( + self, hidden_states, attention_mask, train=False): + """forward encoder. + + Args: + hidden_states: (batch_size, tot_len, hidden_size). + attention_mask: (1, 1, tot_len, tot_len). + train: bool. + Returns: + hidden_states: (batch_size, tot_len, hidden_size). + """ + all_hidden_states = [hidden_states] + for i in range(self.num_hidden_layers): + hidden_states = BertLayer( + hidden_size=self.hidden_size, num_heads=self.num_heads, + name=f'layer.{i}')( + hidden_states, attention_mask, train=train) + all_hidden_states.append(hidden_states) + return hidden_states, all_hidden_states + + +class BertEncoderAsDecoder(nn.Module): + """GIT Decoder.""" + num_hidden_layers: int = 6 + hidden_size: int = 768 + num_heads: int = 12 + + @nn.compact + def __call__( + self, tgt, memory, tgt_mask=None, + memory_key_padding_mask=None, train=False, return_visual_feature=False): + """forward transformer. + + Args: + tgt: (batch_size, cap_len, hidden_size) + memory: (batch_size, feat_len, hidden_size) + tgt_mask: (cap_len, cap_len) + memory_key_padding_mask: (batch_size, feat_len). Padded is 1, valid is 0. + train: bool + return_visual_feature: bool + Returns: + result: (batch_size, cap_len, hidden_size) + """ + cap_len = tgt.shape[1] + feat_len = memory.shape[1] + hidden_states = jnp.concatenate( + [memory, tgt], axis=1 + ) # (batch_size, feat_len + cap_len, hidden_size) + top_left = jnp.zeros((feat_len, feat_len), dtype=jnp.float32) + top_right = jnp.full((feat_len, cap_len), NEG_INF, dtype=jnp.float32) + bottom_left = jnp.zeros((cap_len, feat_len), dtype=jnp.float32) + left = jnp.concatenate([top_left, bottom_left], axis=0) + right = jnp.concatenate([top_right, tgt_mask], axis=0) + + full_attention_mask = jnp.concatenate( + [left, right], + axis=1)[None] # (1, feat_len + cap_len, feat_len + cap_len) + if memory_key_padding_mask is None: + memory_key_padding_mask = jnp.full( + (1, memory.shape[1]), False, dtype=bool, + ) # (1, feat_len) + else: + full_attention_mask = jnp.broadcast_to( + full_attention_mask, + (memory_key_padding_mask.shape[0], + full_attention_mask.shape[1], full_attention_mask.shape[2])) + zero_negative_infinity = jnp.zeros_like( + memory_key_padding_mask, dtype=tgt.dtype) # (1, feat_len) + zero_negative_infinity = jnp.where( + memory_key_padding_mask, NEG_INF, zero_negative_infinity) + origin_left = full_attention_mask[:, :, :feat_len] + update = zero_negative_infinity[:, None, :] # (1, 1, feat_len) + full_attention_mask = jnp.concatenate( + [origin_left + update, full_attention_mask[:, :, feat_len:]], + axis=2) + full_attention_mask = full_attention_mask[ + :, None, :, :] # (1, 1, feat_len + cap_len, feat_len + cap_len) + + result, all_hidden_states = BertEncoder( + num_hidden_layers=self.num_hidden_layers, + hidden_size=self.hidden_size, + num_heads=self.num_heads, + name='encoder')( + hidden_states=hidden_states, + attention_mask=full_attention_mask, + train=train, + ) # (batch_size, feat_len + cap_len, hidden_size) + if not return_visual_feature: + result = result[:, feat_len:] # (batch_size, cap_len, hidden_size) + all_hidden_states = [ + hidden_states[:, feat_len:] for hidden_states in all_hidden_states] + return result, all_hidden_states + + +class WordAndPositionalEmbedding(nn.Module): + """GRiT embedding layer.""" + vocab_size: int = 30522 + hidden_size: int = 768 + max_caption_length: int = 1024 + dropout_prob: float = 0.1 + + @nn.compact + def __call__(self, x, train=False): + """forward embedding. + + Args: + x: (batch_size, caption_length). + train: bool. + Returns: + embeddings: (batch_size, max_caption_length, hidden_size). + """ + position_indices = jnp.arange( + self.max_caption_length)[None] # 1 x max_caption_length + word_embeddings = nn.Embed( + self.vocab_size, self.hidden_size, + embedding_init=nn.initializers.normal(stddev=0.02), + name='words')(x) + position_embeddings = nn.Embed( + self.max_caption_length, self.hidden_size, + embedding_init=nn.initializers.normal(stddev=0.02), + name='positions')(position_indices) + embeddings = nn.LayerNorm(epsilon=1e-8, name='layer_norm')( + word_embeddings + position_embeddings[:, :x.shape[1]] + ) # eps checked. + embeddings = nn.Dropout(self.dropout_prob, name='dropout')( + embeddings, deterministic=not train) + return embeddings + + +class TransformerDecoderTextualHead(nn.Module): + """TransformerDecoderTextualHead of GIT.""" + vocab_size: int = 30522 + hidden_size: int = 768 + num_heads: int = 12 + max_caption_length: int = 1024 + num_hidden_layers: int = 6 + out_feat_fuse_method: str = '' + + def setup(self): + self.embedding = WordAndPositionalEmbedding( + vocab_size=self.vocab_size, + hidden_size=self.hidden_size, + max_caption_length=self.max_caption_length, + name='embedding') + + def concate_context_tokens_to_visual( + self, visual_features, context_tokens, train=False): + """Concatenate context tokens (e.g., questions in QA) to visual tokens. + + Args: + visual_features: (batch_size, feature_length, object_feat_size). + context_tokens: (batch_size, context_length) + train: bool + Returns: + visual_features: (batch_size, feature_length+context_length, hidden_size) + feat_valid_mask: (batch_size, feature_length+context_length): bool array. + if the visual_features is padded (to handle different context_lengths). + """ + feat_valid_mask = jnp.ones( + (visual_features.shape[:2]), + dtype=bool) # (text_bs, num_tokens) + context_tokens = context_tokens.reshape( + -1, context_tokens.shape[-1]) # (text_bs, num_context_tokens) + context_features = self.embedding(context_tokens, train=train) + + # Note context_tokens do not have BOS or EOS. All padded tokens are 0. + context_valid_mask = context_tokens > 0 # (text_bs, num_context_tokens) + feat_valid_mask = jnp.concatenate( + [feat_valid_mask, context_valid_mask], + axis=1) # (text_bs, num_tot_tokens) + visual_features = jnp.concatenate( + [visual_features, context_features], + axis=1) # (text_bs, num_tot_tokens, dim) + return visual_features, feat_valid_mask + + @nn.compact + def __call__( + self, text_tokens, visual_features, + context_tokens=None, train=False, + return_feat=False, return_visual_feature=False, + return_logit_and_feat=False): + """Generate logits of a single word. + + Args: + text_tokens: (batch_size, caption_length). + visual_features: (batch_size, feature_length, feat_size). + context_tokens: (batch_size, context_length). + train: bool. + return_feat: bool. If true, return the feature before vocabulary. + return_visual_feature: bool. If true, in addition return the outputs from + visual features. + return_logit_and_feat: bool + Returns: + output_logits: (batch_size, caption_length, vocab_size). + trans_out: (batch_size, caption_length, hidden_size) or + (batch_size, feature_length + caption_length, hidden_size) when + return_visual_feature is True. + """ + x = nn.Dense( + self.hidden_size, name='visual_projection.0', + kernel_init=nn.initializers.normal(stddev=0.02))( + visual_features) # (batch_size, feature_length, hidden_size) + x = nn.LayerNorm(epsilon=1e-5, name='visual_projection.1')(x) + + memory_key_padding_mask = None + if context_tokens is not None: + x, hidden_valid_mask = self.concate_context_tokens_to_visual( + x, context_tokens, train=train) + memory_key_padding_mask = ~hidden_valid_mask + + text_embeddings = self.embedding( + text_tokens, train=train, + ) # (batch_size, max_caption_length, hidden_size) + + caption_length = text_tokens.shape[1] + uni_mask_zero_neg = self._generate_future_mask( + caption_length) # (caption_length, caption_length) + trans_out, all_hidden_states = BertEncoderAsDecoder( + num_hidden_layers=self.num_hidden_layers, + hidden_size=self.hidden_size, + num_heads=self.num_heads, + name='transformer')( + text_embeddings, x, + memory_key_padding_mask=memory_key_padding_mask, + tgt_mask=uni_mask_zero_neg, train=train, + return_visual_feature=return_visual_feature, + ) # (batch_size, caption_length, hidden_size) + if self.out_feat_fuse_method: + output_feature = pllm_utils.fuse_out_feat( + all_hidden_states, self.out_feat_fuse_method) + else: + output_feature = trans_out + if return_feat: + return output_feature + + output_logits = nn.Dense( + self.vocab_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='output')( + trans_out) # (batch_size, caption_length, vocab_size) + if return_logit_and_feat: + return output_logits, output_feature + # TODO(zhouxy): tie weight output and embedding.words + return output_logits + + def _generate_future_mask(self, size): + """Generate attention mask.""" + mask = jnp.triu(jnp.ones((size, size), jnp.float32), k=1) + mask = jnp.where(mask > 0, NEG_INF, 0) + return mask diff --git a/scenic/projects/pixel_llm/modeling/utils.py b/scenic/projects/pixel_llm/modeling/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..7becef204568e0d4fd1663a0640e8adf17c2f047 --- /dev/null +++ b/scenic/projects/pixel_llm/modeling/utils.py @@ -0,0 +1,403 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Util functions for PixelLLM models.""" + +import jax +import jax.numpy as jnp + + +def preprocess( + inputs, pixel_mean, pixel_std, padding_mask=None, image_size=None +): + """Proprocess images. Normalize pixels for non-padded pixels.""" + mean = jnp.asarray(pixel_mean, dtype=jnp.float32).reshape(1, 1, 1, 3) + std = jnp.asarray(pixel_std, dtype=jnp.float32).reshape(1, 1, 1, 3) + inputs = (inputs - mean) / std + if padding_mask is not None: + inputs = inputs * padding_mask[..., None] # Padded pixels remain 0 + if image_size is not None and inputs.shape[1:3] != image_size: + assert tuple(image_size) <= inputs.shape[1:3], ( + f'image_size={image_size} should be less than' + f' inputs.shape[1:3]={inputs.shape[1:3]}' + ) + inputs = jax.image.resize( + inputs, + (inputs.shape[0], image_size[0], image_size[1], inputs.shape[3]), + method='bilinear', + ) + return inputs + + +def build_solid_grid(points_per_side, with_offset=True): + """Generates a 2D grid of points evenly spaced in [0, 1] x [0, 1].""" + # return corner points instead + if points_per_side < 1: + points = jnp.stack( + [jnp.zeros((2,), dtype=jnp.float32), jnp.ones((2,), dtype=jnp.float32)], + axis=0, + ) + return points + if with_offset: + offset = 1.0 / (2 * points_per_side) + else: + offset = 0.0 + points_one_side = jnp.linspace(offset, 1 - offset, points_per_side) + points_x = jnp.tile(points_one_side[None, :], (points_per_side, 1)) + points_y = jnp.tile(points_one_side[:, None], (1, points_per_side)) + points = jnp.stack([points_x, points_y], axis=-1).reshape(-1, 2) + return points # (points_per_side ** 2, 2) + + +def build_donut_grid( + points_per_side: int, thickness: int = 1, with_offset: bool = True +): + """Create a dense grid of x,y points that form the border of a square. + + Points are spaced in [0, 1] x [0, 1] + + Args: + points_per_side (int): The size of the grid (N x N). + thickness (int): The width of the border. + with_offset (bool): with offset for solid grid + + Returns: + - x, y coordinates of the border. + """ + dense_grid = build_solid_grid(points_per_side, with_offset) + # TODO(jiaruixu): I found when this function output is incorrect inside pmap + # [[1, 0], [1, 0], [0, 0], [0, 0]] instead of [[0, 1], [1, 0], [1, 1], [0, 0]] + # not sure why. The workaround it to return early. + if points_per_side <= 2: + return dense_grid + + dense_grid = dense_grid.reshape(points_per_side, points_per_side, 2) + + top_grid = dense_grid[:thickness, :-thickness].reshape(-1, 2) + right_grid = dense_grid[:-thickness, -thickness:].reshape(-1, 2) + + bottom_grid = dense_grid[-thickness:, thickness:].reshape(-1, 2) + left_grid = dense_grid[thickness:, :thickness].reshape(-1, 2) + + dense_grid = jnp.concatenate( + [top_grid, right_grid, bottom_grid, left_grid], axis=0 + ) + + return dense_grid + + +def boxes_to_points(boxes, grids): + """Sample points from boxes.""" + x0, y0, x1, y1 = jnp.split(boxes, 4, axis=-1) + # [..., 4] + boxes_xywh = jnp.concatenate([x0, y0, x1-x0, y1-y0], axis=-1) + # [..., 1, 4] + boxes_xywh = jnp.expand_dims(boxes_xywh, axis=-2) + + # [..., num_points, 2] + points = boxes_xywh[...,:2] + grids * boxes_xywh[..., 2:] + + return points + + +def points_to_boxes(points, points_per_side=0, valid_mask=None): + """Convert (x,y) points to XYXY boxes.""" + x = points[..., 0] + y = points[..., 1] + if valid_mask is None: + x_min = jnp.min(x, axis=-1) + y_min = jnp.min(y, axis=-1) + x_max = jnp.max(x, axis=-1) + y_max = jnp.max(y, axis=-1) + else: + x_min = jnp.min( + jnp.where(valid_mask, x, x.max(axis=-1, keepdims=True) + 1), axis=-1 + ) + y_min = jnp.min( + jnp.where(valid_mask, y, y.max(axis=-1, keepdims=True) + 1), axis=-1 + ) + x_max = jnp.max( + jnp.where(valid_mask, x, x.min(axis=-1, keepdims=True) - 1), axis=-1 + ) + y_max = jnp.max( + jnp.where(valid_mask, y, y.min(axis=-1, keepdims=True) - 1), axis=-1 + ) + + if points_per_side > 1: + w = x_max - x_min + h = y_max - y_min + offset_w = w / (points_per_side - 1) / 2 + offset_h = h / (points_per_side - 1) / 2 + + x_min = x_min - offset_w + y_min = y_min - offset_h + x_max = x_max + offset_w + y_max = y_max + offset_h + + boxes = jnp.stack([x_min, y_min, x_max, y_max], axis=-1) + + return boxes + + +def points_to_absolute(points, image_shape): + """Convert (x,y) coords from [0, 1] relative coord to absolute coord. + + Args: + points: (batch_size, ..., 2), xy + image_shape: (batch_size, 2), hw + + Returns: + (batch_size, ..., 2) in absolute coords + """ + + batch_size = points.shape[0] + h, w = jnp.split(image_shape, 2, axis=-1) + scaler = jnp.concatenate([w, h], axis=-1) + scaler = jnp.reshape(scaler, (batch_size,) + (1,) * (points.ndim - 2) + (2,)) + + points = points * scaler + + return points + + +def points_to_relative(points, image_shape): + """Convert (x,y) coords from absolute coord to [0, 1] relative coord. + + Args: + points: (batch_size, ..., 2), xy + image_shape: (batch_size, 2), hw + + Returns: + (batch_size, ..., 2) in absolute coords + """ + + batch_size = points.shape[0] + h, w = jnp.split(image_shape, 2, axis=-1) + scaler = jnp.concatenate([w, h], axis=-1) + scaler = jnp.reshape(scaler, (batch_size,) + (1,) * (points.ndim - 2) + (2,)) + + points = points / scaler + + return points + + +def boxes_to_relative(boxes, image_shape): + """Convert x0y0x1y1 boxes from absolute coord to [0, 1] relative coord. + + Args: + boxes: (batch_size, ..., 4), x0xyx1y1 + image_shape: (batch_size, 2), hw + + Returns: + (batch_size, ..., 2) in absolute coords + """ + + batch_size = boxes.shape[0] + h, w = jnp.split(image_shape, 2, axis=-1) + scaler = jnp.concatenate([w, h, w, h], axis=-1) + scaler = jnp.reshape(scaler, (batch_size,) + (1,) * (boxes.ndim - 2) + (4,)) + + boxes = boxes / scaler + + return boxes + + +def get_image_shape(padding_mask, images): + """Get image shape from padding mask.""" + + if padding_mask is not None: + valid_h = padding_mask.max(axis=2).sum(axis=-1) + valid_w = padding_mask.max(axis=1).sum(axis=-1) + # [batch_size, 2] + image_shape = jnp.stack([valid_h, valid_w], axis=1) + else: + image_shape = jnp.concatenate( + [ + jnp.ones((images.shape[0], 1), jnp.float32) * images.shape[1], + jnp.ones((images.shape[0], 1), jnp.float32) * images.shape[2], + ], + axis=1, + ) # B x 2, in order (height, width) + + return image_shape + + +def get_token_valid_mask( + text_tokens, ignore_types, begin_token_id, end_token_id +): + """Get valid mask for text tokens.""" + # negation + if ignore_types.startswith('^'): + negation = True + ignore_types = ignore_types[1:] + else: + negation = False + if isinstance(ignore_types, str): + ignore_types = ignore_types.split(',') + valid_mask = jnp.ones_like(text_tokens) + if 'pad' in ignore_types: + valid_mask = valid_mask * (text_tokens > 0) + if 'begin' in ignore_types: + valid_mask = valid_mask * (text_tokens != begin_token_id) + if 'end' in ignore_types: + valid_mask = valid_mask * (text_tokens != end_token_id) + if 'end-1' in ignore_types: + # shift to right + shifted_text_tokens = jnp.pad( + text_tokens[..., 1:], + [(0, 0), (0, 0), (0, 1)], + constant_values=0, + ) + valid_mask = valid_mask * (shifted_text_tokens != end_token_id) + if 'text' in ignore_types: + valid_mask = valid_mask * ( + (text_tokens == begin_token_id) + + (text_tokens == end_token_id) + + (text_tokens == 0) + ) + if negation: + return valid_mask == 0 + else: + return valid_mask > 0 + + +def generate_point_label( + rng, + point_coords, + valid_mask=None, + prompt_drop_rate=0.0, + train=False, +): + """Sample point labels. + + Args: + rng: PRNG Keys + point_coords: (batch, num_prompts, num_points, 2) + valid_mask: (batch, num_prompts) + prompt_drop_rate: float + train: bool + + Returns: + point_labels: (...), 1 for positive, 0 for negative, -1 for ignored + """ + if valid_mask is None: + valid_mask = jnp.ones(point_coords.shape[:-2], dtype=jnp.uint8) + # [..., max_text_tokens, num_points_per_token] + valid_mask = jnp.broadcast_to( + valid_mask[..., None], point_coords.shape[:-1] + ) + + if train and rng is not None: + label_probs = jax.random.uniform( + rng, shape=point_coords.shape[:-1] + ) + point_labels = jnp.where(label_probs > prompt_drop_rate, 1, -1) + point_labels = jnp.where(valid_mask > 0, point_labels, -1) + + else: + point_labels = jnp.where(valid_mask > 0, 1, -1) + + # [batch_size, num_prompts, num_points] + return point_labels + + +def concat_visual_features(visual_features_dict, feature_keys): + """Resize and concat visual features.""" + seperator = ',' + resize_to_max_size = False + if '+' in feature_keys: + seperator = '+' + resize_to_max_size = True + feature_keys = feature_keys.split(seperator) + if resize_to_max_size: + image_embedding_size = max( + visual_features_dict[feature_key].shape[1:3] + for feature_key in feature_keys + ) + else: + image_embedding_size = visual_features_dict[feature_keys[0]].shape[1:3] + image_embeddings = [] + for k in feature_keys: + curr_embedding = visual_features_dict[k] + if curr_embedding.shape[1:3] != image_embedding_size: + curr_embedding = jax.image.resize( + curr_embedding, + ( + curr_embedding.shape[0], + image_embedding_size[0], + image_embedding_size[1], + curr_embedding.shape[-1], + ), + method='bicubic', + ) + image_embeddings.append(curr_embedding) + image_embeddings = jnp.concatenate(image_embeddings, axis=-1) + return image_embeddings + + +def get_image_size(visual_features_dict, feature_keys): + """Get image size from visual features.""" + seperator = ',' + resize_to_max_size = False + if '+' in feature_keys: + seperator = '+' + resize_to_max_size = True + feature_keys = feature_keys.split(seperator) + if resize_to_max_size: + image_size = max( + visual_features_dict[ + feature_key.replace('visual_features', 'image_size') + ] + for feature_key in feature_keys + ) + else: + image_size = visual_features_dict[ + feature_keys[0].replace('visual_features', 'image_size') + ] + return image_size + + +def get_first_possible_value(key, dic_list, default_value=None): + """Get first possible value from a list of dictionaries.""" + for dic in dic_list: + if key in dic: + return dic[key] + return default_value + + +def fuse_out_feat(all_hidden_states, fuse_method): + """Fuse out features. + + Support concat and sum, e.g. concat:3,4, sum:-1,-2. + + + Args: + all_hidden_states: (List[jnp.array]) + fuse_method: str + + Returns: + jnp.array + """ + hidden_state_indices = [ + int(i) for i in fuse_method.split(':')[-1].split(',') + ] + features = [all_hidden_states[i] for i in hidden_state_indices] + if fuse_method.startswith('concat:'): + out_feature = jnp.concatenate(features, axis=-1) + elif fuse_method.startswith('sum:'): + out_feature = jnp.stack(features, axis=0).sum(axis=0) + else: + raise ValueError(f'Unsupported fuse: {fuse_method}') + + return out_feature diff --git a/scenic/projects/pixel_llm/partition_utils.py b/scenic/projects/pixel_llm/partition_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..cafc27a5312d7f0125bae3bb7cb1b0c82c4f953f --- /dev/null +++ b/scenic/projects/pixel_llm/partition_utils.py @@ -0,0 +1,471 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for partitioned train states. + +This is useful when only training some variables in the model, and avoids +calculating gradients, and optimiser states, of frozen variables. +""" + +from collections import abc +import copy +import operator +import re +from typing import Any, Dict, Optional, Sequence, Tuple + +from absl import logging +import flax +from flax import struct +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +import optax +from scenic.projects.baselines.centernet import optimizer_utils +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils + + +PyTree = train_utils.PyTree + + +@struct.dataclass +class PartitionedTrainState: + """Dataclass to keep track of state of training. + + Parameters are separated into frozen and learned parameters. + + The state of training is structured as a struct.dataclass, which enables + instances of this class to be passed into jax transformations like tree_map + and pmap. + """ + + tx: Optional[optax.GradientTransformation] = struct.field( + default=None, pytree_node=False + ) + opt_state: Optional[optax.OptState] = None + params_frozen: Optional[Any] = struct.field(default_factory=dict) + params_learned: Optional[Any] = struct.field(default_factory=dict) + global_step: Optional[int] = 0 + model_state: Optional[Any] = struct.field(default_factory=dict) + rng: Optional[jnp.ndarray] = None + metadata: Optional[Dict[str, Any]] = None + + def __getitem__(self, item): + """Make TrainState a subscriptable object.""" + return getattr(self, item) + + def get(self, keyname: str, default: Optional[Any] = None) -> Any: + """Return the value for key if it exists otherwise the default.""" + try: + return self[keyname] + except KeyError: + return default + + +def _tree_merge(tree1, tree2): + for k, v in tree2.items(): + if isinstance(v, dict) and k in tree1 and isinstance(tree1[k], dict): + tree1[k] = _tree_merge(tree1[k], v) + else: + tree1[k] = v + return tree1 + + +def train_step_partitioned( + train_state: PartitionedTrainState, + batch: Any, + *, + model: Any, + loss_and_metrics_fn: Any, + learning_rate_fn: Any, + debug: bool = False) -> Tuple[PartitionedTrainState, float, Any, Any]: + """Training step which only computes gradients wrt. unfrozen parameters. + + Args: + train_state: Learnable parameters and optimizer states. + batch: A batch of data containing images ("inputs") and annotations. + model: The model definition. + loss_and_metrics_fn: Loss function. + learning_rate_fn: Learning rate scheduler which given the global_step + generates the learning rate. + debug: Enable debug mode or not. + + Returns: + new_train_state: Updated network parameters and optimizer states. + lr: The learning rate of the current step (for visualization). + predictions: The output of the network. + metrics: Losses and other metrics for visualization. + """ + def loss_fn(params_to_learn, params_to_freeze): + new_rng, rng = jax.random.split(train_state.rng, 2) + + model_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + params = flax.core.unfreeze(params_to_learn) + _tree_merge(params, flax.core.unfreeze(params_to_freeze)) + # Gradients do not get computed with the following: + # params = {**train_state.params_learned, **train_state.params_frozen} + variables = {'params': params, **train_state.model_state} + + predictions, new_model_state = model.train_forward_step( + model_rng, variables, batch, debug=debug + ) + loss, metrics = loss_and_metrics_fn(predictions, batch) + + # Adapt to normalization API in log_train_summary + metrics = {k: (v, 1.) for k, v in metrics.items()} + return loss, (new_model_state, new_rng, metrics, predictions) + + compute_gradient_fn = jax.value_and_grad(loss_fn, has_aux=True, argnums=0) + (_, aux), grad = compute_gradient_fn( + train_state.params_learned, train_state.params_frozen) + + new_model_state, new_rng, metrics, predictions = aux + step = train_state.global_step + lr = learning_rate_fn(step) + + grad = jax.lax.pmean(grad, axis_name='batch') + updates, new_opt_state = train_state.tx.update( # pytype: disable=attribute-error + grad, train_state.opt_state, train_state.params_learned) + new_params_learned = optax.apply_updates(train_state.params_learned, updates) + new_train_state = train_state.replace( + global_step=step + 1, + opt_state=new_opt_state, + params_learned=new_params_learned, + model_state=new_model_state, + rng=new_rng) + + # Let's log some gradient norms as well + def global_l2_norm(x: jnp.ndarray) -> jnp.ndarray: + return jnp.sqrt(sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(x)])) + + metrics['l2_grads'] = (global_l2_norm(grad), 1) + metrics['l2_params'] = (global_l2_norm(new_params_learned), 1) + metrics['l2_updates'] = (global_l2_norm(updates), 1) + + return new_train_state, lr, predictions, metrics + + +def train_step_partitioned_jit( + train_state: PartitionedTrainState, + batch: Any, + *, + tx: optax.GradientTransformation, + model: Any, + loss_and_metrics_fn: Any, + learning_rate_fn: Any, + debug: bool = False, +) -> Tuple[PartitionedTrainState, float, Any, Any]: + """Training step which only computes gradients wrt. unfrozen parameters. + + Args: + train_state: Learnable parameters and optimizer states. + batch: A batch of data containing images ("inputs") and annotations. + tx: The optax optimizer transform to use. + model: The model definition. + loss_and_metrics_fn: Loss function. + learning_rate_fn: Learning rate scheduler which given the global_step + generates the learning rate. + debug: Enable debug mode or not. + + Returns: + new_train_state: Updated network parameters and optimizer states. + lr: The learning rate of the current step (for visualization). + predictions: The output of the network. + metrics: Losses and other metrics for visualization. + """ + new_rng, rng = jax.random.split(train_state.rng, 2) + + def loss_fn(params_to_learn, params_to_freeze): + params = flax.core.unfreeze(params_to_learn) + _tree_merge(params, flax.core.unfreeze(params_to_freeze)) + # Gradients do not get computed with the following: + # params = {**train_state.params_learned, **train_state.params_frozen} + variables = {'params': params, **train_state.model_state} + + predictions, new_model_state = model.train_forward_step( + rng, variables, batch, debug=debug + ) + loss, metrics = loss_and_metrics_fn(predictions, batch) + + # Adapt to normalization API in log_train_summary + metrics = {k: (v, 1.0) for k, v in metrics.items()} + return loss, (new_model_state, metrics, predictions) + + compute_gradient_fn = jax.value_and_grad(loss_fn, has_aux=True, argnums=0) + (_, aux), grad = compute_gradient_fn( + train_state.params_learned, train_state.params_frozen + ) + + new_model_state, metrics, predictions = aux + step = train_state.global_step + lr = learning_rate_fn(step) + + updates, new_opt_state = tx.update( # pytype: disable=attribute-error + grad, train_state.opt_state, train_state.params_learned + ) + new_params_learned = optax.apply_updates(train_state.params_learned, updates) + new_train_state = train_state.replace( + global_step=step + 1, + opt_state=new_opt_state, + params_learned=new_params_learned, + model_state=new_model_state, + rng=new_rng, + ) + + # Let's log some gradient norms as well + def global_l2_norm(x: jnp.ndarray) -> jnp.ndarray: + return jnp.sqrt(sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(x)])) + + metrics['l2_grads'] = (global_l2_norm(grad), 1) + metrics['l2_params'] = (global_l2_norm(new_params_learned), 1) + metrics['l2_updates'] = (global_l2_norm(updates), 1) + + return new_train_state, lr, predictions, metrics + + +def _flatten_params(d, parent_key='', sep='/'): + """Flattens a dictionary, keeping empty leaves.""" + items = [] + for k, v in d.items(): + path = parent_key + sep + k if parent_key else k + if isinstance(v, abc.MutableMapping): + items.extend(_flatten_params(v, path, sep=sep).items()) + else: + items.append((path, v)) + # Keeps the empty dict if it was set explicitly. + if parent_key and not d: + items.append((parent_key, {})) + return dict(items) + + +def _partition_parameters(params: PyTree, frozen_mapping: Dict[str, bool]): + """Partitions parameters into frozen and learned parameter trees. + + Args: + params: Pytree of model parameters. + frozen_mapping: Dictionary mapping parameter name to a boolean indicating + whether the parameter is to be frozen or not. Assumed that all the keys + in `params` are within this dictionary. + + Returns: + (parames_to_learn, params_to_freeze). Both are FrozenDicts of PyTrees in the + original structure as `params`. + """ + + params_flat = _flatten_params(flax.core.unfreeze(params)) + params_to_learn = {} + params_to_freeze = {} + + for k, v in params_flat.items(): + if k not in frozen_mapping: + raise ValueError(f'{k} not in mapping.') + if frozen_mapping[k]: + params_to_freeze[k] = v + else: + params_to_learn[k] = v + + params_to_learn = flax.traverse_util.unflatten_dict( + params_to_learn, sep='/') + params_to_freeze = flax.traverse_util.unflatten_dict( + params_to_freeze, sep='/') + + return flax.core.freeze(params_to_learn), flax.core.freeze(params_to_freeze) + + +def create_partitioned_train_state( + params: PyTree, + frozen_mapping: Dict[str, bool], + config: ml_collections.ConfigDict, + global_step: int, + model_state: PyTree, + rng: jnp.ndarray, + lr_fn: Any) -> Tuple[PartitionedTrainState, int, int]: + """Creates a partitioned train state given a parameter tree.""" + + params_to_learn, params_to_freeze = _partition_parameters( + params, frozen_mapping) + if config.optimizer.get('layerwise_decay', -1.) >= 0.0: + tx = optimizer_utils.optimizer_with_layerwise_decay( + config, params=params_to_learn) + elif config.optimizer.get('backbone_multiplier', -1.) >= 0.0: + tx = optimizer_utils.optimizer_with_backbone_multiplier( + config, params=params_to_learn) + else: + # Avoid modifying original config and allow alteration. + optimizer_config = copy.deepcopy(config.optimizer).unlock() + # remove extra keys + for key in [ + 'layerwise_decay', + 'num_layers', + 'decay_layer_prefix', + 'decay_stem_layers', + ]: + if key in optimizer_config: + del optimizer_config[key] + tx = optimizers.get_optimizer( + optimizer_config, lr_fn, params=params_to_learn) + opt_state = tx.init(params_to_learn) + + def num_parameters_from_tree(tree): + if len(tree): # pylint: disable=g-explicit-length-test + return jax.tree_util.tree_reduce( + operator.add, jax.tree_util.tree_map(lambda x: x.size, tree)) + else: + return 0 + + num_learnable_params = num_parameters_from_tree(params_to_learn) + num_frozen_params = num_parameters_from_tree(params_to_freeze) + logging.info('Number of params to learn: %s', num_learnable_params) + logging.info('Number of params to freeze: %s', num_frozen_params) + logging.info('Number of params in optimiser state: %s', + num_parameters_from_tree(opt_state)) + + train_state = PartitionedTrainState( + tx=tx, + opt_state=opt_state, + params_frozen=params_to_freeze, + params_learned=params_to_learn, + global_step=global_step, + model_state=model_state, + rng=rng, + ) + + return train_state, num_learnable_params, num_frozen_params + + +def convert_to_train_state( + p_train_state: PartitionedTrainState) -> train_utils.TrainState: + """Converts a PartitionedTrainState to a normal TrainState. + + The optimizer state is not changed at all. The parameters are simply merged + together into a single dictionary. + + Args: + p_train_state: A partitioned train state. + + Returns: + Regular Scenic train_state object. + """ + + params_learned_flat = _flatten_params( + flax.core.unfreeze(p_train_state.params_learned) + ) + params_frozen = _flatten_params( + flax.core.unfreeze(p_train_state.params_frozen) + ) + + params = params_learned_flat + params.update(params_frozen) + params = flax.core.freeze( + flax.traverse_util.unflatten_dict(params, sep='/') + ) + + return train_utils.TrainState( + params=params, + tx=p_train_state.tx, + opt_state=p_train_state.opt_state, + global_step=p_train_state.global_step, + model_state=p_train_state.model_state, + rng=p_train_state.rng, + metadata=p_train_state.metadata, + ) + + +def convert_to_partitioned_train_state( + train_state: train_utils.TrainState, + frozen_mapping: Dict[str, bool]) -> PartitionedTrainState: + """Converts a normal TrainState to a PartitionedTrainState. + + The optimizer state is not changed at all. The parameters are simply split + into the learned and frozen components. + + Args: + train_state: Regular Scenic train-state. + frozen_mapping: Dictionary mapping parameter name to a boolean indicating + whether the parameter is to be frozen or not. Assumed that all the keys in + `params` are within this dictionary. + + Returns: + Partitioned train-state. + """ + + params_to_learn, params_to_freeze = _partition_parameters( + train_state.params, frozen_mapping) + + return PartitionedTrainState( + tx=train_state.tx, + opt_state=train_state.opt_state, + params_frozen=params_to_freeze, + params_learned=params_to_learn, + global_step=train_state.global_step, + model_state=train_state.model_state, + rng=train_state.rng, + metadata=train_state.metadata, + ) + + +def create_frozen_mask_from_regex( + param_tree: PyTree, + patterns_names: Optional[Sequence[Tuple[str, Optional[str]]]], + *, + allow_unmatched: bool = True, + log: bool = True, +) -> Dict[str, bool]: + """Returns a mapping of parameter names to if they are frozen or not. + + Adapted from: scenic.train_lib.optax._make_mask_trees + + Args: + param_tree: PyTree of parameters. + patterns_names: A sequence of tuples. The tuple consists of (regex, name), + where regex is the pattern used to match if the parameters are frozen or + not. And name is a description used for debugging purposes. + allow_unmatched: If true, allows some variables to be unmatched. This should + be the case when freezing only some variables in the model. + log: If True, log each match made. + + Returns: + A list of flattenned parameter names, and a boolean indicating if the + variable is to be frozen or not. + """ + + patterns, _ = zip(*patterns_names) if patterns_names is not None else ([], []) + compiled_patterns = list(map(re.compile, patterns)) + + def matchfirst(_, name): + matches = [bool(pattern.fullmatch(name)) for pattern in compiled_patterns] + + matched = sum(map(int, matches)) + matched_patterns = [patterns_names[i] for i, m in enumerate(matches) if m] + if matched > 1: + raise ValueError( + f'{name} matched by multiple patterns: {matched_patterns}') + + if matched == 0 and not allow_unmatched: + raise ValueError(f'{name} was *not* matched by a single pattern!') + + if log: + if any(matches): + logging.info('%s - matched by %s', name, + patterns_names[matches.index(True)]) + else: + logging.info('%s - not matched by any patterns', name) + return np.array(matches) + + multimask = optimizers.tree_map_with_names_values(matchfirst, param_tree) + frozen_mask_tree = jax.tree_util.tree_map(any, multimask) + return _flatten_params(flax.core.unfreeze(frozen_mask_tree)) diff --git a/scenic/projects/pixel_llm/requirements.txt b/scenic/projects/pixel_llm/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..a96669816839aaed09050d5e7a6dc621319bbc75 --- /dev/null +++ b/scenic/projects/pixel_llm/requirements.txt @@ -0,0 +1,2 @@ +pycocotools +pycocoevalcap diff --git a/scenic/projects/pixel_llm/tokenizers.py b/scenic/projects/pixel_llm/tokenizers.py new file mode 100644 index 0000000000000000000000000000000000000000..cbbe38cbfdb2f8f258a67f126b872357675463c1 --- /dev/null +++ b/scenic/projects/pixel_llm/tokenizers.py @@ -0,0 +1,46 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tokenizer Wrapper.""" + +from typing import Union + +from dmvr import tokenizers as dmvr_tokenizers +from scenic.projects.t5 import tokenizer as t5_tokenizer + +BERT_TOKENIZER_PATH = '/path/to/bert_tokenizer/' + + +class T5Tokenizer(t5_tokenizer.SentencePieceTokenizer): + + @property + def vocab_size(self) -> int: + # SP_VOCAB_SIZE + return self._vocab_size + 28 + +TOKENIZER = Union[ + dmvr_tokenizers.BertTokenizer, + # t5_tokenizer.SentencePieceTokenizer, + T5Tokenizer, +] + + +def get_tokenizer(tokenizer_weight_path) -> TOKENIZER: + if tokenizer_weight_path == 't5': + # tokenizer = t5_tokenizer.build_dmvr_sp_model() + tokenizer = T5Tokenizer(t5_tokenizer.SP_MODEL_PATH) + else: + tokenizer = dmvr_tokenizers.BertTokenizer(tokenizer_weight_path) + + return tokenizer diff --git a/scenic/projects/pixel_llm/tools/build_llava_tfrecord.py b/scenic/projects/pixel_llm/tools/build_llava_tfrecord.py new file mode 100644 index 0000000000000000000000000000000000000000..368933e275a74a2c1b4eb654f92ee2ca6ea829a8 --- /dev/null +++ b/scenic/projects/pixel_llm/tools/build_llava_tfrecord.py @@ -0,0 +1,156 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Build LLaVa data tfrecords from json files. + + +python scenic/projects/pixel_llm/tools/build_llava_tfrecord.py \ + --output_dir ~/Datasets/PixelLLM/llava/LLaVA-Instruct-150K \ + --input_json ~/Datasets/PixelLLM/LLaVA-Instruct-150K/llava_v1_5_mix665k.json \ + --image_root ~/Datasets/PixelLLM/llava_images + +""" + +import io +import json +import os + +from absl import app +from absl import flags +import numpy as np +from PIL import Image +import tensorflow as tf +from tensorflow.io import gfile +import tqdm + + +FLAGS = flags.FLAGS + +flags.DEFINE_string( + 'output_dir', + '', + 'Output path of TFRecord', +) +flags.DEFINE_string( + 'input_json', + '', + 'Input path of json file', +) +flags.DEFINE_string( + 'image_root', + '', + 'image root', +) +flags.DEFINE_boolean('to_jpg', False, 'convert image to jpg format') + + +def convert_image_to_jpg_bytestring(image_bytestring): + # Load the image from the bytestring + input_image_stream = io.BytesIO(image_bytestring) + image = Image.open(input_image_stream) + image = image.convert('RGB') + + # Convert the image to JPEG format + output_image_stream = io.BytesIO() + image.save(output_image_stream, format='JPEG') + jpg_bytestring = output_image_stream.getvalue() + + return jpg_bytestring + + +def str_to_bytes(string): + return string.encode('utf-8') + + +def _bytes_feature(value): + return tf.train.Feature(bytes_list=tf.train.BytesList(value=value)) + + +def _float_feature(value): + return tf.train.Feature(float_list=tf.train.FloatList(value=value)) + + +def _int64_feature(value): + return tf.train.Feature(int64_list=tf.train.Int64List(value=value)) + + +def process_record(data_dic): + """Creates a example from a dict.""" + img_path = os.path.join(FLAGS.image_root, data_dic['image']) + img_string = gfile.GFile(img_path, 'rb').read() + if FLAGS.to_jpg: + img_string = convert_image_to_jpg_bytestring(img_string) + img_id = str(data_dic['id']) + + conv_human = [] + conv_agent = [] + for conv in data_dic['conversations']: + if conv['from'] == 'human': + conv_human.append(conv['value']) + else: + conv_agent.append(conv['value']) + assert len(conv_human) == len(conv_agent) + + feature = { + 'image/encoded': _bytes_feature([img_string]), + 'image/id': _bytes_feature([str_to_bytes(img_id)]), + 'conversations/human': _bytes_feature( + [str_to_bytes(x) for x in conv_human] + ), + 'conversations/agent': _bytes_feature( + [str_to_bytes(x) for x in conv_agent] + ), + } + + example = tf.train.Example(features=tf.train.Features(feature=feature)) + example = example.SerializeToString() + return example + + +def main(unused_argv): + raw_data = json.load(gfile.GFile(FLAGS.input_json, 'r')) + data = [] + for dic in raw_data: + if 'image' in dic: + data.append(dic) + print('====', len(data), len(raw_data), '====') + num_shards = 2 ** (int(np.log2(len(data)) - 10)) + num_shards = max(num_shards, 64) + + output_path = os.path.join( + FLAGS.output_dir, + os.path.basename(FLAGS.input_json).replace('.json', '.tfrecord'), + ) + num_examples_per_shard = (len(data) - 1) // num_shards + 1 + output_path_pattern = output_path + '-{:05d}-of-{:05d}' + + shard_id = 0 + shard_output_path = output_path_pattern.format(shard_id, num_shards) + gfile.makedirs(os.path.dirname(shard_output_path)) + print('Writing to', shard_output_path) + writer = tf.io.TFRecordWriter(shard_output_path) + + for i, dic in tqdm.tqdm(enumerate(data), total=len(data)): + record = process_record(dic) + writer.write(record) + if ((i+1) % num_examples_per_shard == 0): + writer.close() + shard_id += 1 + shard_output_path = output_path_pattern.format(shard_id, num_shards) + print('Writing to', shard_output_path) + writer = tf.io.TFRecordWriter(shard_output_path) + writer.close() + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/pixel_llm/tools/build_ln_tfrecord.py b/scenic/projects/pixel_llm/tools/build_ln_tfrecord.py new file mode 100644 index 0000000000000000000000000000000000000000..e206d88147de5efc7521ebeafbcdf7f1f04a9144 --- /dev/null +++ b/scenic/projects/pixel_llm/tools/build_ln_tfrecord.py @@ -0,0 +1,370 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Build Localized Narrative dataset tfrecord from jsonl. + + +python scenic/projects/pixel_llm/tools/build_ln_tfrecord.py \ +--output_dir ~/Datasets/LN \ +--ln_anno_path ~/Datasets/LN/annotations \ +--coco_path ~/Datasets/coco + +""" +import collections +import json +import os +from typing import NamedTuple, List + +from absl import app +from absl import flags +import numpy as np +from scipy import interpolate +import tensorflow as tf +from tensorflow.io import gfile +import tqdm + + +FLAGS = flags.FLAGS + +flags.DEFINE_string( + 'output_dir', + '', + 'Output path of TFRecords', +) +flags.DEFINE_string( + 'ln_anno_path', + '', + 'Localized Narratives annotation path', +) +flags.DEFINE_string( + 'coco_path', + '', + 'COCO dataset path', +) +flags.DEFINE_string('folder_name', 'tfrecords_with_bbox', '') +flags.DEFINE_integer('num_samples_per_trace', 16, '') + + +class TimedPoint(NamedTuple): + x: float + y: float + t: float + + +class TimedUtterance(NamedTuple): + utterance: str + start_time: float + end_time: float + + +class LocalizedNarrative(NamedTuple): + """Represents a Localized Narrative annotation. + + Visit https://google.github.io/localized-narratives/index.html?file-formats=1 + for the documentation of each field. + """ + dataset_id: str + image_id: str + annotator_id: int + caption: str + timed_caption: List[TimedUtterance] + traces: List[List[TimedPoint]] + voice_recording: str + + def __repr__(self): + truncated_caption = self.caption[:60] + '...' if len( + self.caption) > 63 else self.caption + truncated_timed_caption = self.timed_caption[0].__str__() + truncated_traces = self.traces[0][0].__str__() + return (f'{{\n' + f' dataset_id: {self.dataset_id},\n' + f' image_id: {self.image_id},\n' + f' annotator_id: {self.annotator_id},\n' + f' caption: {truncated_caption},\n' + f' timed_caption: [{truncated_timed_caption}, ...],\n' + f' traces: [[{truncated_traces}, ...], ...],\n' + f' voice_recording: {self.voice_recording}\n' + f'}}') + + +def annotations_in_file(filename: str): + """Yields all `LocalizedNarrative` dic in a given file. + + Args: + filename: File to load the Localized Narratives from. + + Yields: + LN dic. + """ + with gfile.GFile(filename, 'rb') as file_handler: + for line in file_handler: + yield LocalizedNarrative(**json.loads(line)) + + +def decode_sharded_names(paths): + """Convert sharded file names into a list.""" + ret = [] + paths = paths.split(',') + for name in paths: + if '@' in name: + num_shards = int(name.split('@')[1].split('.')[0]) + suffix = name.split(f'@{num_shards}')[-1] + prefix = name.split('@')[0] + names = [ + f'{prefix}-{i:05d}-of-{num_shards:05d}{suffix}' + for i in range(num_shards) + ] + ret.extend(names) + else: + ret.append(name) + return ret + + +def trace2coord(traces, timed_caption): + """Computing the average location with intergral.""" + + t_arr = np.array([trace['t'] for trace in traces]) + x_arr = np.array([trace['x'] for trace in traces]) + y_arr = np.array([trace['y'] for trace in traces]) + + # get the indices that would sort t_arr + sort_indices = np.argsort(t_arr) + + # sort t_arr, x_arr, y_arr using the indices + t_arr = t_arr[sort_indices] + x_arr = x_arr[sort_indices] + y_arr = y_arr[sort_indices] + + num_points = FLAGS.num_samples_per_trace + for dic in timed_caption: + start_time = dic['start_time'] + end_time = dic['end_time'] + + x_interpolator = interpolate.interp1d( + t_arr, x_arr, fill_value='extrapolate' + ) + y_interpolator = interpolate.interp1d( + t_arr, y_arr, fill_value='extrapolate' + ) + + t_values = np.linspace(start_time, end_time, num=num_points) + x_values = x_interpolator(t_values) + y_values = y_interpolator(t_values) + + if t_values[-1] - t_values[0] < 1e-5: + integral_x = np.mean(x_values) + integral_y = np.mean(y_values) + else: + # calculate integral (average) x and y values + integral_x = np.trapezoid(x_values, t_values) / (t_values[-1] - t_values[0]) + integral_y = np.trapezoid(y_values, t_values) / (t_values[-1] - t_values[0]) + + dic['integral_x'] = integral_x + dic['integral_y'] = integral_y + dic['min_x'] = np.min(x_values) + dic['min_y'] = np.min(y_values) + dic['max_x'] = np.max(x_values) + dic['max_y'] = np.max(y_values) + dic['sampled_x'] = x_values.tolist() + dic['sampled_y'] = y_values.tolist() + + return timed_caption + + +def str_to_bytes(string): + return string.encode('utf-8') + + +def _bytes_feature(value): + return tf.train.Feature(bytes_list=tf.train.BytesList(value=value)) + + +def _float_feature(value): + return tf.train.Feature(float_list=tf.train.FloatList(value=value)) + + +def _int64_feature(value): + return tf.train.Feature(int64_list=tf.train.Int64List(value=value)) + + +def is_valid_img_infos(image_id, img_infos): + is_valid = False + for img_info in img_infos: + traces = [] + for trace in img_info.traces: + traces.extend(trace) + if len(traces) <= 1: + print(f'no traces {len(traces)} for {image_id}', '=' * 10) + continue + is_valid = True + return is_valid + + +def process_record(img_string, image_id, img_infos): + """Creates a sequence example from a list of dict.""" + # captions = [img_info.caption for img_info in img_infos] + + timed_captions = [] + for img_info in img_infos: + timed_caption = img_info.timed_caption + traces = [] + for trace in img_info.traces: + traces.extend(trace) + if len(traces) <= 1: + print(f'no traces {len(traces)} for {image_id}', '=' * 10) + continue + timed_caption = trace2coord(traces, timed_caption) + # [N, 2] + center_np = np.array( + [[dic['integral_x'], dic['integral_y']] for dic in timed_caption] + ) + # [N, 4] + bbox_np = np.array([ + [dic['min_x'], dic['min_y'], dic['max_x'], dic['max_y']] + for dic in timed_caption + ]) + + point_np = np.array([ + np.stack([dic['sampled_x'], dic['sampled_y']], axis=-1) + for dic in timed_caption + ]) + timed_captions.append({ + 'center': center_np.flatten(), + 'bbox': bbox_np.flatten(), + 'point': point_np.flatten(), + 'utterance': [dic['utterance'] for dic in timed_caption], + 'string': img_info.caption + }) + assert timed_captions, 'no timed captions' + + dataset_id = img_infos[0].dataset_id + feature = { + 'image/encoded': _bytes_feature([img_string]), + 'image/id': _bytes_feature([str_to_bytes(image_id)]), + 'meta/dataset_id': _bytes_feature([str_to_bytes(dataset_id)]), + 'caption/string': _bytes_feature( + [str_to_bytes(dic['string']) for dic in timed_captions] + ), + } + feature_list = { + 'caption/center': tf.train.FeatureList( + feature=[_float_feature(dic['center']) for dic in timed_captions] + ), + 'caption/bbox': tf.train.FeatureList( + feature=[_float_feature(dic['bbox']) for dic in timed_captions] + ), + 'caption/point': tf.train.FeatureList( + feature=[_float_feature(dic['point']) for dic in timed_captions] + ), + 'caption/utterance': tf.train.FeatureList( + feature=[ + _bytes_feature([str_to_bytes(u) for u in dic['utterance']]) + for dic in timed_captions + ] + ), + } + example = tf.train.SequenceExample( + context=tf.train.Features(feature=feature), + feature_lists=tf.train.FeatureLists(feature_list=feature_list), + ) + example = example.SerializeToString() + return example + + +def main(unused_argv): + + annotation_files = { + 'coco_train': [ + os.path.join( + FLAGS.ln_anno_path, + f'coco_train_localized_narratives-{i:05d}-of-00004.jsonl', + ) + for i in range(4) + ], + 'coco_val': [ + os.path.join( + FLAGS.ln_anno_path, 'coco_val_localized_narratives.jsonl' + ) + ], + } + + image_dirs = { + 'coco_val': os.path.join(FLAGS.coco_path, 'val2017/'), + 'coco_train': os.path.join(FLAGS.coco_path, 'train2017/'), + } + + for dataset_name, image_dir in image_dirs.items(): + shard_id = 0 + id2anno = collections.defaultdict(list) + loco_ds = annotation_files[dataset_name] + + for annotation_file in tqdm.tqdm( + loco_ds, desc=f'dataset: {dataset_name}', position=0 + ): + annotations = annotations_in_file(annotation_file) + for annotation in tqdm.tqdm( + annotations, desc=f'process file: {annotation_file}', position=1 + ): + image_id = annotation.image_id + # num_images += 1 + id2anno[image_id].append(annotation) + num_images = len(id2anno) + + num_shards = 2**(int(np.log2(num_images) - 10)) + num_shards = max(num_shards, 64) + num_examples_per_shard = (num_images - 1) // num_shards + 1 + + output_path = os.path.join( + FLAGS.output_dir, + dataset_name, + FLAGS.folder_name, + f'{dataset_name}.tfrecord-{shard_id:05d}-of-{num_shards:05d}', + ) + gfile.makedirs(os.path.dirname(output_path)) + + writer = tf.io.TFRecordWriter(output_path) + num_exampels = 0 + + pbar = tqdm.tqdm( + id2anno.items(), + desc=f'writing to {output_path}', + total=len(id2anno), + ) + for image_id, anno_list in pbar: + image_path = os.path.join(image_dir, f'{int(image_id):012d}.jpg') + img_string = gfile.GFile(image_path, 'rb').read() + if not is_valid_img_infos(image_id, anno_list): + continue + record = process_record(img_string, image_id, anno_list) + writer.write(record) + num_exampels += 1 + if num_exampels % num_examples_per_shard == 0: + shard_id += 1 + writer.close() + output_path = os.path.join( + FLAGS.output_dir, + dataset_name, + FLAGS.folder_name, + f'{dataset_name}.tfrecord-{shard_id:05d}-of-{num_shards:05d}', + ) + pbar.set_description(f'writing to {output_path}') + writer = tf.io.TFRecordWriter(output_path) + writer.close() + print(f'Wrote {dataset_name} with {num_exampels} examples') + if num_exampels != num_images: + print(f'num_example {num_exampels} != num_images {num_images}') + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/pixel_llm/tools/build_mdetr_ref_tfrecord.py b/scenic/projects/pixel_llm/tools/build_mdetr_ref_tfrecord.py new file mode 100644 index 0000000000000000000000000000000000000000..49ca932749be92f1c81b40e2a1fcf6521eccf3b5 --- /dev/null +++ b/scenic/projects/pixel_llm/tools/build_mdetr_ref_tfrecord.py @@ -0,0 +1,387 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Build RefCOCO tfrecord from MDETR json files. + + +python scenic/projects/pixel_llm/tools/build_mdetr_ref_tfrecord.py \ +--output_dir ~/Datasets/PixelLLM/mdetr_data +--ann_output_dir ~/Datasets/PixelLLM/mdetr_data/annotations +--coco_path ~/Projects/PixelLLM/coco/ +--ref_anno_path ~/Projects/PixelLLM/MDETR/mdetr_annotations_with_mask + +""" + +import collections +import io +import json +import os + +from absl import app +from absl import flags +import numpy as np +from PIL import Image +from pycocotools import mask as mask_api +from pycocotools.coco import COCO +import tensorflow as tf +from tensorflow.io import gfile +import tqdm + + +FLAGS = flags.FLAGS + +flags.DEFINE_string( + 'output_dir', + '', + 'Output path of TFRecords', +) +flags.DEFINE_string( + 'ann_output_dir', + '', + 'Output path of annotations', +) +flags.DEFINE_string( + 'ref_anno_path', + '', + 'Refcoco annotation path', +) +flags.DEFINE_string( + 'coco_path', + '', + 'COCO dataset path', +) +flags.DEFINE_boolean( + 'dryrun', False, 'print stats only' +) + + +def str_to_bytes(string): + return string.encode('utf-8') + + +def _bytes_feature(value): + return tf.train.Feature(bytes_list=tf.train.BytesList(value=value)) + + +def _float_feature(value): + return tf.train.Feature(float_list=tf.train.FloatList(value=value)) + + +def _int64_feature(value): + return tf.train.Feature(int64_list=tf.train.Int64List(value=value)) + + +def polygons_to_bitmask(polygons, height, width): + """Convert polygons to bitmask.""" + if len(polygons) <= 0: + # COCOAPI does not support empty polygons + return np.zeros((height, width)).astype(bool) + rles = mask_api.frPyObjects(polygons, height, width) + rle = mask_api.merge(rles) + return mask_api.decode(rle).astype(bool) + + +def numpy_to_encoded(image_nps): + image_bytes = [] + for image_np in image_nps: + image_pil = Image.fromarray(image_np) + buffer = io.BytesIO() + image_pil.save(buffer, format='PNG') + buffer.seek(0) + image_byte = buffer.getvalue() + image_bytes.append(image_byte) + return tf.train.Feature(bytes_list=tf.train.BytesList(value=image_bytes)) + + +def process_mask(annos, height, width): + """Process mask.""" + for x in annos: + if isinstance(x['segmentation'], list): + x['mask'] = polygons_to_bitmask(x['segmentation'], height, width) + elif isinstance(x['segmentation'], dict): + if isinstance(x['segmentation']['counts'], list): + rle = mask_api.frPyObjects([x['segmentation']], height, width) + else: + rle = [x['segmentation']] + x['mask'] = mask_api.decode(rle) + else: + assert 0, type(x['segmentation']) + if len(x['mask'].shape) == 3: + assert x['mask'].shape[2] == 1, x['mask'].shape + x['mask'] = x['mask'][:, :, 0] + mask = np.asarray([x['mask'] * 255 for x in annos], dtype=np.uint8) + for x in annos: + del x['mask'] + return numpy_to_encoded(mask) + + +def process_record(image_info, anns, image_path, clsid2contid): + """Creates a sequence example from a list of dict.""" + file_name = image_info['file_name'] + if 'COCO_val2014' in file_name: + image_path = os.path.join(image_path, 'val2014') + else: + image_path = os.path.join(image_path, 'train2014') + img_path = os.path.join(image_path, file_name) + img_string = gfile.GFile(img_path, 'rb').read() + width, height = image_info['width'], image_info['height'] + bbox = np.asarray( + [x['bbox'] for x in anns], dtype=np.float32).reshape(-1, 4) + + if 'segmentation' in anns[0]: + mask = process_mask(anns, height, width) + else: + mask = None + areas = bbox[:, 2] * bbox[:, 3] + bbox[:, 2:] = bbox[:, 2:] + bbox[:, :2] + bbox[:, [0, 2]] /= width + bbox[:, [1, 3]] /= height + # tfds builder use format [y0, x0, y1, x1] + bbox[:, [0, 1]], bbox[:, [2, 3]] = bbox[:, [1, 0]], bbox[:, [3, 2]] + + refexp_id = [] + refexp_raw = [] + refexp_sent = [] + refexp_sent_pos = [] + for ann in anns: + refexp_id.extend(ann['refexp_id']) + refexp_raw.extend(ann['refexp_raw']) + refexp_sent.extend(ann['refexp_sent']) + refexp_sent_pos.extend(ann['refexp_sent_pos']) + ragged_row_lengths = [len(x['refexp_id']) for x in anns] + assert ragged_row_lengths == [x['ragged_row_lengths_0'] for x in anns] + + feature = { + 'image': _bytes_feature([img_string]), + 'image/id': _int64_feature([image_info['id']]), + 'objects/id': _int64_feature( + np.asarray([x['id'] for x in anns], dtype=np.int64) + ), + 'objects/area': _int64_feature(np.asarray(areas, dtype=np.int64)), + 'objects/bbox': _float_feature(bbox.flatten()), + 'objects/label': _int64_feature( + np.asarray( + [clsid2contid[x['category_id']] for x in anns], dtype=np.int64 + ) + ), + 'objects/refexp/refexp_id/ragged_row_lengths_0': _int64_feature( + np.asarray(ragged_row_lengths, dtype=np.int64) + ), + 'objects/refexp/refexp_id/ragged_flat_values': _int64_feature( + np.asarray(refexp_id, dtype=np.int64) + ), + 'objects/refexp/raw/ragged_row_lengths_0': _int64_feature( + np.asarray(ragged_row_lengths, dtype=np.int64) + ), + 'objects/refexp/raw/ragged_flat_values': _bytes_feature( + [str_to_bytes(x) for x in refexp_raw] + ), + 'objects/refexp/sent/ragged_row_lengths_0': _int64_feature( + np.asarray(ragged_row_lengths, dtype=np.int64) + ), + 'objects/refexp/sent/ragged_flat_values': _bytes_feature( + [str_to_bytes(x) for x in refexp_sent] + ), + 'objects/refexp/sent_pos/ragged_row_lengths_0': _int64_feature( + np.asarray(ragged_row_lengths, dtype=np.int64) + ), + 'objects/refexp/sent_pos/ragged_flat_values': _bytes_feature( + [str_to_bytes(x) for x in refexp_sent_pos] + ), + } + + if mask is not None: + feature['objects/mask'] = mask + + example = tf.train.Example(features=tf.train.Features(feature=feature)) + example = example.SerializeToString() + return example + + +def convert_to_coco(data): + """Converts to COCO format.""" + coco = COCO(data) + images = [] + annotations = [] + ori_id2image_id = collections.defaultdict(list) + for img_id in coco.getImgIds(): + img = coco.loadImgs(img_id)[0] + if 'original_img_id' in img: + ori_id = int(img['original_img_id']) + else: + ori_id = int(img['original_id']) + ori_id2image_id[ori_id].append(img_id) + + for ori_id in ori_id2image_id: + image_ids = ori_id2image_id[ori_id] + ann_id2ann = dict() + ori_img = coco.loadImgs(ori_id2image_id[ori_id][0])[0] + for image_id in image_ids: + img = coco.loadImgs(image_id)[0] + anns = coco.loadAnns(coco.getAnnIds(image_id)) + + for ann in anns: + ori_ann_id = int(ann.get('original_id', ann['id'])) + if ori_ann_id not in ann_id2ann: + ann_dic = { + 'id': ori_ann_id, + 'image_id': ori_id, + 'bbox': ann['bbox'], + 'category_id': ann['category_id'], + 'refexp_id': [], + 'refexp_raw': [], + 'refexp_sent': [], + 'refexp_sent_pos': [], + 'ragged_row_lengths_0': 0, + } + if 'segmentation' in ann: + ann_dic['segmentation'] = ann['segmentation'] + ann_id2ann[ori_ann_id] = ann_dic + else: + ann_dic = ann_id2ann[ori_ann_id] + + ann_dic['refexp_id'].append(img.get('refexp_id', ann['id'])) + refexp_sent = img['caption'] + ann_dic['refexp_sent'].append(refexp_sent) + tokens_positive = np.asarray(ann['tokens_positive'], dtype=np.int32) + if tokens_positive.shape[0] > 0: + refexp_sent = refexp_sent[tokens_positive.min():tokens_positive.max()] + ann_dic['refexp_sent_pos'].append(refexp_sent) + ann_dic['refexp_raw'].append(img.get('raw', img['caption'])) + ann_dic['ragged_row_lengths_0'] += 1 + out_annos = list(ann_id2ann.values()) + out_annos.sort(key=lambda x: x['id']) + out_img = { + 'id': ori_id, + 'file_name': ori_img['file_name'], + 'width': int(ori_img['width']), + 'height': int(ori_img['height']), + } + images.append(out_img) + annotations.extend(out_annos) + + assert len(set(img['id'] for img in images)) == len(images) + assert len( + set(ann['image_id'] for ann in annotations).union( + set(img['id'] for img in images) + ) + ) == len(images) + assert len(set(ann['id'] for ann in annotations)) == len(annotations) + + out_data = coco.dataset.copy() + out_data['images'] = images + out_data['annotations'] = annotations + + return out_data + + +def main(unused_argv): + dataset_names = [ + 'merge_coco_img_safe_train', + 'refcoco_unc_train', + 'refcoco_unc_val', + 'refcoco_unc_testA', + 'refcoco_unc_testB', + 'refcocog_umd_train', + 'refcocog_umd_val', + 'refcocog_umd_test', + 'refcocoplus_unc_train', + 'refcocoplus_unc_val', + 'refcocoplus_unc_testA', + 'refcocoplus_unc_testB', + ] + + anno_files = { + ds: os.path.join(FLAGS.ref_anno_path, ds + '.json') + for ds in dataset_names + } + + for dataset_name, json_file in anno_files.items(): + + image_path = FLAGS.coco_path + + output_path = os.path.join( + FLAGS.output_dir, dataset_name, f'{dataset_name}.tfrecord' + ) + gfile.makedirs(os.path.dirname(output_path)) + + print(f'Loadding {dataset_name} from {json_file}') + data = json.load(gfile.GFile(json_file, 'r')) + print('Load finished') + data = convert_to_coco(data) + if not FLAGS.dryrun: + gfile.makedirs(FLAGS.ann_output_dir) + print(f'Writing {dataset_name} to {FLAGS.ann_output_dir}') + json.dump( + data, + gfile.GFile( + os.path.join(FLAGS.ann_output_dir, dataset_name + '.json'), 'w' + ), + ) + + coco = COCO(data) + print(f'Finish loadding {dataset_name} from {json_file}') + clsid2contid = {x: i for i, x in enumerate(sorted(coco.getCatIds()))} + + num_exampels = 0 + image_ids = coco.getImgIds() + + # filter out image ids without ann + nonempty_image_ids = [] + for image_id in image_ids: + if coco.getAnnIds(image_id): + nonempty_image_ids.append(image_id) + print( + f'{dataset_name}: {len(nonempty_image_ids)} nonempty images of out' + f' {len(image_ids)}' + ) + image_ids = nonempty_image_ids + + num_shards = 2 ** (int(np.log2(len(image_ids)) - 10)) + num_shards = max(num_shards, 8) + + if FLAGS.dryrun: + print('=' * 20) + print( + f'{dataset_name}: size: {len(image_ids)}, path:' + f' {output_path}@{num_shards}' + ) + print('=' * 20) + continue + + shard_id = 0 + output_path_pattern = output_path + '-{:05d}-of-{:05d}' + output_path = output_path_pattern.format(shard_id, num_shards) + num_examples_per_shard = (len(image_ids) - 1) // num_shards + 1 + + writer = tf.io.TFRecordWriter(output_path) + + for image_id in tqdm.tqdm(image_ids): + img = coco.loadImgs(image_id)[0] + ann_ids = coco.getAnnIds(image_id) + anns = coco.loadAnns(ann_ids) + assert anns, f'No anns found for image {image_id}' + record = process_record(img, anns, image_path, clsid2contid) + writer.write(record) + num_exampels += 1 + if (num_exampels % num_examples_per_shard == 0): + writer.close() + shard_id += 1 + output_path = output_path_pattern.format(shard_id, num_shards) + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + writer.close() + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/pixel_llm/tools/build_uninext_ref_tfrecord.py b/scenic/projects/pixel_llm/tools/build_uninext_ref_tfrecord.py new file mode 100644 index 0000000000000000000000000000000000000000..f579f36dc46ece13e2018799d450ff1b8bad0771 --- /dev/null +++ b/scenic/projects/pixel_llm/tools/build_uninext_ref_tfrecord.py @@ -0,0 +1,362 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Build RefCOCO tfrecord from UNINEXT json files. + +The UNINEXT preprocessed annotations are downloaded from here: +https://github.com/MasterBin-IIAU/UNINEXT/blob/master/assets/DATA.md#rec--res + + +python scenic/projects/pixel_llm/tools/build_uninext_ref_tfrecord.py \ +--output_dir ~/Datasets/PixelLLM/uninext_data \ +--ann_output_dir ~/Datasets/PixelLLM/uninext_data/annotations \ +--coco_path ~/Projects/PixelLLM/coco/ \ +--vg_path ~/Projects/PixelLLM/MDETR/GQA/images \ +--flickr_path ~/Projects/PixelLLM/MDETR/flickr30k/flickr30k-images +--ref_anno_path ~/Projects/PixelLLM/UNINEXT/annotations + +""" + +import io +import json +import os + +from absl import app +from absl import flags +import numpy as np +from PIL import Image +from pycocotools import mask as mask_api +from pycocotools.coco import COCO +import tensorflow as tf +from tensorflow.io import gfile +import tqdm + +FLAGS = flags.FLAGS + +flags.DEFINE_string( + 'output_dir', + '', + 'Output path of TFRecord', +) +flags.DEFINE_string( + 'ann_output_dir', + '', + 'Output path of annotations', +) +flags.DEFINE_string( + 'ref_anno_path', + '', + 'Refcoco annotation path', +) +flags.DEFINE_string( + 'vg_path', + '', + 'path to VG images', +) +flags.DEFINE_string( + 'coco_path', + '', + 'path to COCO dataset', +) +flags.DEFINE_string( + 'flickr_path', + '', + 'path to Flickr images', +) +flags.DEFINE_boolean( + 'dryrun', False, 'print stats only' +) + + +def str_to_bytes(string): + return string.encode('utf-8') + + +def _bytes_feature(value): + return tf.train.Feature(bytes_list=tf.train.BytesList(value=value)) + + +def _float_feature(value): + return tf.train.Feature(float_list=tf.train.FloatList(value=value)) + + +def _int64_feature(value): + return tf.train.Feature(int64_list=tf.train.Int64List(value=value)) + + +def polygons_to_bitmask(polygons, height, width): + """Convert polygons to bitmask.""" + if len(polygons) <= 0: + # COCOAPI does not support empty polygons + return np.zeros((height, width)).astype(bool) + rles = mask_api.frPyObjects(polygons, height, width) + rle = mask_api.merge(rles) + return mask_api.decode(rle).astype(bool) + + +def numpy_to_encoded(image_nps): + image_bytes = [] + for image_np in image_nps: + image_pil = Image.fromarray(image_np) + buffer = io.BytesIO() + image_pil.save(buffer, format='PNG') + buffer.seek(0) + image_byte = buffer.getvalue() + image_bytes.append(image_byte) + return tf.train.Feature(bytes_list=tf.train.BytesList(value=image_bytes)) + + +def process_mask(annos, height, width): + """Process mask.""" + for x in annos: + if isinstance(x['segmentation'], list): + x['mask'] = polygons_to_bitmask(x['segmentation'], height, width) + elif isinstance(x['segmentation'], dict): + if isinstance(x['segmentation']['counts'], list): + rle = mask_api.frPyObjects([x['segmentation']], height, width) + else: + rle = [x['segmentation']] + x['mask'] = mask_api.decode(rle) + else: + assert 0, type(x['segmentation']) + if len(x['mask'].shape) == 3: + assert x['mask'].shape[2] == 1, x['mask'].shape + x['mask'] = x['mask'][:, :, 0] + mask = np.asarray([x['mask'] * 255 for x in annos], dtype=np.uint8) + for x in annos: + del x['mask'] + return numpy_to_encoded(mask) + + +def process_record(image_info, anns, image_path, clsid2contid): + """Creates a sequence example from a list of dict.""" + file_name = image_info['file_name'] + img_path = os.path.join(image_path, file_name) + img_string = gfile.GFile(img_path, 'rb').read() + width, height = image_info['width'], image_info['height'] + bbox = np.asarray( + [x['bbox'] for x in anns], dtype=np.float32).reshape(-1, 4) + + if 'segmentation' in anns[0]: + mask = process_mask(anns, height, width) + else: + mask = None + areas = bbox[:, 2] * bbox[:, 3] + bbox[:, 2:] = bbox[:, 2:] + bbox[:, :2] + bbox[:, [0, 2]] /= width + bbox[:, [1, 3]] /= height + # tfds builder use format [y0, x0, y1, x1] + bbox[:, [0, 1]], bbox[:, [2, 3]] = bbox[:, [1, 0]], bbox[:, [3, 2]] + + refexp_id = [] + refexp_sent = [] + for ann in anns: + refexp_id.extend(ann['refexp_id']) + refexp_sent.extend(ann['refexp_sent']) + ragged_row_lengths = [len(x['refexp_id']) for x in anns] + + feature = { + 'image': _bytes_feature([img_string]), + 'image/id': _int64_feature([image_info['id']]), + 'objects/id': _int64_feature( + np.asarray([x['id'] for x in anns], dtype=np.int64) + ), + 'objects/area': _int64_feature(np.asarray(areas, dtype=np.int64)), + 'objects/bbox': _float_feature(bbox.flatten()), + 'objects/label': _int64_feature( + np.asarray( + [clsid2contid[x['category_id']] for x in anns], dtype=np.int64 + ) + ), + 'objects/refexp/refexp_id/ragged_row_lengths_0': _int64_feature( + np.asarray(ragged_row_lengths, dtype=np.int64) + ), + 'objects/refexp/refexp_id/ragged_flat_values': _int64_feature( + np.asarray(refexp_id, dtype=np.int64) + ), + 'objects/refexp/sent/ragged_row_lengths_0': _int64_feature( + np.asarray(ragged_row_lengths, dtype=np.int64) + ), + 'objects/refexp/sent/ragged_flat_values': _bytes_feature( + [str_to_bytes(x) for x in refexp_sent] + ), + } + + if mask is not None: + feature['objects/mask'] = mask + + example = tf.train.Example(features=tf.train.Features(feature=feature)) + example = example.SerializeToString() + return example + + +def convert_to_coco(data, data_source='coco'): + """Converts to COCO format.""" + categories = [{'supercategory': 'object', 'id': 1, 'name': 'object'}] + out_data = {'categories': categories, 'info': [], 'licenses': []} + images = [] + annotations = [] + image_id_set = set() + refexp_count = 0 + for dic in data: + image_id = dic['image_id'] + if 'data_source' in dic: + if dic['data_source'] != data_source: + continue + if image_id not in image_id_set: + if data_source == 'coco': + file_name = f'COCO_train2014_{image_id:012d}.jpg' + elif data_source == 'vg' or data_source == 'flickr': + file_name = f'{image_id}.jpg' + else: + raise ValueError('Unknown data source: %s' % data_source) + image_id_set.add(image_id) + img = { + 'file_name': file_name, + 'id': image_id, + 'width': dic['width'], + 'height': dic['height'], + } + images.append(img) + if 'category_id' not in dic: + category_id = 1 + else: + category_id = categories[dic['category_id']]['id'] + ann = { + 'id': len(annotations), + 'image_id': image_id, + 'bbox': dic['bbox'], + 'category_id': category_id, + } + refexp_sent = dic['expressions'] + refexp_id = (refexp_count + np.arange(len(refexp_sent))).tolist() + ann['refexp_id'] = refexp_id + ann['refexp_sent'] = refexp_sent + + if 'mask' in dic: + ann['segmentation'] = dic['mask'] + + refexp_count += len(refexp_sent) + + annotations.append(ann) + + assert len(set(img['id'] for img in images)) == len(images) + assert len(set(ann['image_id'] for ann in annotations)) == len(images) + assert len(set(ann['id'] for ann in annotations)) == len(annotations) + + out_data['images'] = images + out_data['annotations'] = annotations + + return out_data + + +def main(unused_argv): + + # pylint: disable=line-too-long + ann_files = { + 'mixed_coco_train': os.path.join(FLAGS.ref_anno_path, 'mixed/instances.json'), + 'mixed_vg_train': os.path.join(FLAGS.ref_anno_path, 'mixed/instances.json'), + 'flickr_train': os.path.join(FLAGS.ref_anno_path, 'flickr30k/instances.json'), + } + # pylint: enable=line-too-long + + for dataset_name, json_file in ann_files.items(): + + if 'flickr' in dataset_name: + image_path = FLAGS.flickr_path + data_source = 'flickr' + elif 'mixed' in dataset_name: + if 'coco' in dataset_name: + data_source = 'coco' + image_path = os.path.join(FLAGS.coco_path, 'train2014') + elif 'vg' in dataset_name: + data_source = 'vg' + image_path = FLAGS.vg_path + else: + raise ValueError(f'Unknown data source: {dataset_name}') + else: + raise ValueError(f'Unknown data source: {dataset_name}') + + if 'train' in dataset_name: + subset_name = 'train' + elif 'val' in dataset_name: + subset_name = 'val' + else: + raise ValueError(f'Unknown subset name: {dataset_name}') + + output_path = os.path.join( + FLAGS.output_dir, dataset_name, f'{dataset_name}.tfrecord' + ) + gfile.makedirs(os.path.dirname(output_path)) + + print(f'Loadding {dataset_name} from {json_file}') + data = json.load(gfile.GFile(json_file, 'r'))[subset_name] + print('Load finished') + data = convert_to_coco(data, data_source) + + coco = COCO(data) + print(f'Finish loadding {dataset_name} from {json_file}') + clsid2contid = {x: i for i, x in enumerate(sorted(coco.getCatIds()))} + + num_exampels = 0 + image_ids = coco.getImgIds() + + # filter out image ids without ann + nonempty_image_ids = [] + for image_id in image_ids: + if coco.getAnnIds(image_id): + nonempty_image_ids.append(image_id) + print( + f'{dataset_name}: {len(nonempty_image_ids)} nonempty images of out' + f' {len(image_ids)}' + ) + image_ids = nonempty_image_ids + + num_shards = 2 ** (int(np.log2(len(image_ids)) - 10)) + num_shards = max(num_shards, 8) + + if FLAGS.dryrun: + print('=' * 40) + print( + f'{dataset_name}: size: {len(image_ids)}, path:' + f' {output_path}@{num_shards}' + ) + print('=' * 40) + continue + + shard_id = 0 + output_path_pattern = output_path + '-{:05d}-of-{:05d}' + output_path = output_path_pattern.format(shard_id, num_shards) + num_examples_per_shard = (len(image_ids) - 1) // num_shards + 1 + + writer = tf.io.TFRecordWriter(output_path) + + for image_id in tqdm.tqdm(image_ids): + img = coco.loadImgs(image_id)[0] + ann_ids = coco.getAnnIds(image_id) + anns = coco.loadAnns(ann_ids) + assert anns, f'No anns found for image {image_id}' + record = process_record(img, anns, image_path, clsid2contid) + writer.write(record) + num_exampels += 1 + if (num_exampels % num_examples_per_shard == 0): + writer.close() + shard_id += 1 + output_path = output_path_pattern.format(shard_id, num_shards) + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + writer.close() + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/pixel_llm/tools/build_vg_tfrecord.py b/scenic/projects/pixel_llm/tools/build_vg_tfrecord.py new file mode 100644 index 0000000000000000000000000000000000000000..cd8baed609e7a4404c98b6b561e8df3f1fdd2a5c --- /dev/null +++ b/scenic/projects/pixel_llm/tools/build_vg_tfrecord.py @@ -0,0 +1,148 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Build Visual Genome tfrecord from GRiT preprocessed json and raw images. + + +The GRiT preprocessed annotations are downloaded from here: +https://github.com/JialianW/GRiT/blob/master/datasets/DATASETS.md#vg-dataset + + +python third_party/py/scenic/projects/pixel_llm/tools/build_vg_tfrecord.py \ +--input_json ~/Datasets/VisualGenome/annotations/test.json \ +--image_path ~/Datasets/VisualGenome/VG_100K/ \ +--output_path ~/Datasets/VisualGenome/tfrecords/test.tfrecord + +python third_party/py/scenic/projects/pixel_llm/tools/build_vg_tfrecord.py \ +--input_json ~/Datasets/VisualGenome/annotations/train.json \ +--image_path ~/Datasets/VisualGenome/VG_100K/ \ +--output_path ~/Datasets/VisualGenome/tfrecords/train.tfrecord \ +--num_shards 128 + +""" + +import json + +from absl import app +from absl import flags +from absl import logging +import numpy as np +import tensorflow as tf +from tensorflow.io import gfile + + +FLAGS = flags.FLAGS + +flags.DEFINE_string( + 'input_json', + '', + 'path to the json annotations.', +) +flags.DEFINE_string( + 'image_path', + '', + 'path to images, should have 108249 images.', +) +flags.DEFINE_string( + 'output_path', + '', + 'Output path of TFRecords of bounding boxes', +) +flags.DEFINE_integer('num_samples', -1, '') +flags.DEFINE_integer('num_shards', -1, '') + + +def str_to_bytes(string): + return string.encode('utf-8') + + +def _bytes_feature(value): + return tf.train.Feature(bytes_list=tf.train.BytesList(value=value)) + + +def _float_feature(value): + return tf.train.Feature(float_list=tf.train.FloatList(value=value)) + + +def _int64_feature(value): + return tf.train.Feature(int64_list=tf.train.Int64List(value=value)) + + +def process_record(image_info, anns, image_path): + """Creates a sequence example from a list of dict.""" + file_name = image_info['file_name'] + img_path = image_path + file_name + img_string = gfile.GFile(img_path, 'rb').read() + width, height = image_info['width'], image_info['height'] + bbox = np.asarray([x['bbox'] for x in anns], dtype=np.float32).reshape(-1, 4) + bbox[:, 2:] = bbox[:, 2:] + bbox[:, :2] # [x0, y0, w, h] -> [x0, y0, x1, y1] + bbox[:, [0, 2]] /= width + bbox[:, [1, 3]] /= height + # tfds builder use format [y0, x0, y1, x1] + bbox[:, [0, 1]], bbox[:, [2, 3]] = bbox[:, [1, 0]], bbox[:, [3, 2]] + + feature = { + 'image': _bytes_feature([img_string]), + 'img_id': _int64_feature([image_info['id']]), + 'regions/bbox': _float_feature(bbox.flatten()), + 'regions/id': _int64_feature( + np.asarray([x['id'] for x in anns], dtype=np.int64) + ), + 'regions/phrase': _bytes_feature( + [str_to_bytes(x['caption']) for x in anns] + ), + } + example = tf.train.Example(features=tf.train.Features(feature=feature)) + example = example.SerializeToString() + return example + + +def main(unused_argv): + logging.info('Loading %s', FLAGS.input_json) + data = json.load(gfile.GFile(FLAGS.input_json, 'r')) + images = data['images'] + annotations = {x['id']: [] for x in images} + for x in data['annotations']: + annotations[x['image_id']].append(x) + + if FLAGS.num_samples > 0: + images = images[: FLAGS.num_samples] + + output_path = FLAGS.output_path + if FLAGS.num_shards > 0: + shard_id = 0 + output_path_pattern = output_path + '-{:05d}-of-{:05d}' + output_path = output_path_pattern.format(shard_id, FLAGS.num_shards) + num_examples_per_shard = (len(images) - 1) // FLAGS.num_shards + 1 + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + num_exampels = 0 + for i, image_info in enumerate(images): + if i % 1000 == 0: + print(i) + anns = annotations[image_info['id']] + record = process_record(image_info, anns, FLAGS.image_path) + writer.write(record) + num_exampels += 1 + if FLAGS.num_shards > 0 and (num_exampels % num_examples_per_shard == 0): + writer.close() + shard_id += 1 + output_path = output_path_pattern.format(shard_id, FLAGS.num_shards) + print('Writing to', output_path) + writer = tf.io.TFRecordWriter(output_path) + writer.close() + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/pixel_llm/train_utils.py b/scenic/projects/pixel_llm/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..4255f14a055dfdf492bef92f870fd32822552048 --- /dev/null +++ b/scenic/projects/pixel_llm/train_utils.py @@ -0,0 +1,288 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utils for training. + +Forked from scenic/projects/vid2seq/train_utils.py + +""" + +from typing import Any, Optional, Tuple + +from absl import logging +import flax +from flax.core import frozen_dict +from flax.training import checkpoints +import jax +import ml_collections +import numpy as np + +from scenic.common_lib import debug_utils +from scenic.projects.t5 import model as t5_model +from scenic.train_lib import train_utils + +TrainState = train_utils.TrainState +FrozenDict = frozen_dict.FrozenDict + + +def pop_axes_names( + train_state: TrainState, + axes_name: str = 'param_axes') -> Tuple[TrainState, Optional[Any]]: + """Removes axes_names from model_state for a train state. + + Args: + train_state: Training state. + axes_name: the string specifying the name in the model_state + + Returns: + New train state without axes_names in model_state, axes_names metadata if it + was removed (so it can be re-added). + """ + model_state = train_state.model_state + if axes_name in train_state.model_state: + model_state, param_axes = frozen_dict.freeze(model_state).pop(axes_name) + return train_state.replace(model_state=model_state), param_axes + else: + return train_state, None + + +def re_add_axis_names(train_state: TrainState, + param_axes: Any, + axes_name: str = 'param_axes') -> TrainState: + """Adds axes_names to model_state for a train state. + + Args: + train_state: Training state. + param_axes: Model axes metadata to re-add. + axes_name: the string specifying the name in the model_state + + Returns: + New train state without axes_names in model_state, axes_names metadata if it + was removed (so it can be re-added). + """ + if param_axes: + model_state = frozen_dict.unfreeze(train_state.model_state) + model_state[axes_name] = param_axes + return train_state.replace(model_state=frozen_dict.freeze(model_state)) + else: + return train_state + + +def copy_matched_params( + expected_params, restored_params, load_prefix='', load_replace=(), + load_available_shape=(), + skip_wrong_shape=False, force_restore=False): + """Copy matched parameters from a restored one.""" + flattened_restored_params = flax.traverse_util.flatten_dict( + restored_params, sep='/') + if load_prefix: + flattened_restored_params = { + load_prefix + k: v for k, v in flattened_restored_params.items()} + if load_replace: + for x in load_replace: + flattened_restored_params = { + k.replace( + x[0], x[1]): v for k, v in flattened_restored_params.items()} + flattened_expected_params = flax.traverse_util.flatten_dict( + expected_params, sep='/') + extra_keys = flattened_restored_params.keys( + ) - flattened_expected_params.keys() + missing_keys = flattened_expected_params.keys( + ) - flattened_restored_params.keys() + logging.info('Inspect extra keys:%s', extra_keys) + logging.info('Inspect missing keys:%s', missing_keys) + for k, v in flattened_restored_params.items(): + if k not in flattened_expected_params: + if force_restore: + flattened_expected_params[k] = v + logging.info( + 'Force restored parameter %s which is not in target.', k) + else: + logging.info( + 'Skipping parameter %s in restored model, but not in target.', k) + continue + + if flattened_expected_params[k].shape != v.shape: + logging.info( + 'Key: %s. Expected shape: %s. Restored shape: %s', k, + flattened_expected_params[k].shape, v.shape) + if k in load_available_shape: + logging.info('Loading available shape for Key: %s.', k) + if len(v.shape) == 1: + flattened_expected_params[k] = flattened_expected_params[k].at[ + :v.shape[0]].set(v) + else: + flattened_expected_params[k] = flattened_expected_params[k].at[ + :v.shape[0], :v.shape[1]].set(v) + elif not skip_wrong_shape: + raise ValueError( + 'Shape mismatch between restored and target model' + 'Set config.skip_wrong_shape = True if this is expected.') + else: + flattened_expected_params[k] = v + new_params = flax.traverse_util.unflatten_dict( + flattened_expected_params, sep='/') + return new_params + + +def load_weights(train_state, config): + """Load pretrained weights or checkpoint. + + Args: + train_state: the parameters that need to be restored. + config: config dict that should contain "weights": the path of the + checkpoint. + Returns: + train_state: restored train_state. + start_step: step number of the checkpoint. + """ + start_step = 0 + weight_path = config.get('weights', '') + skip_wrong_shape = config.get('skip_wrong_shape', False) + load_available_shape = config.get('load_available_shape', ()) + load_prefix = config.get('load_prefix', '') + load_replace = config.get('load_replace', ()) + if weight_path: + logging.info('Loading weights from %s', weight_path) + weight_data = checkpoints.restore_checkpoint(weight_path, None) + if 'params' in weight_data: + restored_params = weight_data['params'] + else: + # Old Scenic train state format. + restored_params = weight_data['optimizer']['target'] + if 'params' in restored_params: # Backward compatibility. + restored_params = restored_params['params'] + + expected_params = train_state.params.unfreeze() + new_params = copy_matched_params( + expected_params, restored_params, + load_prefix=load_prefix, load_replace=load_replace, + skip_wrong_shape=skip_wrong_shape, + load_available_shape=load_available_shape) + train_state = train_state.replace(params=FrozenDict(new_params)) + debug_utils.log_param_shapes(train_state.params) + logging.info('Finish loading weights from %s', weight_path) + + if config.get('multi_weights_args', ml_collections.ConfigDict()): + train_state = load_multi_weights(train_state, config) + + if 't5' in config.model.get('text_decoder_name', '') and config.get( + 'load_pretrained_t5_weights', True): + t5_name = config.model['text_decoder_name'] + assert 't5' in t5_name + train_state = load_pretrained_t5_weights(train_state, t5_name) + return train_state, start_step + + +def load_pretrained_t5_weights( + train_state: TrainState, t5_name: str) -> TrainState: + """Load T5 text decoder from pretrained.""" + logging.info('Loading T5 weights %s', t5_name) + t5_params = t5_model.load_pretrained_weights(t5_name)['params'] + expected_params = train_state.params.unfreeze() + new_params = copy_matched_params( + expected_params, t5_params, load_prefix='textual/') + train_state = train_state.replace(params=FrozenDict(new_params)) + debug_utils.log_param_shapes(train_state.params) + logging.info('Finish loading T5 weights from %s', t5_name) + return train_state + + +def load_multi_weights(train_state, config, force_restore=False) -> TrainState: + """Load multiple weights.""" + logging.info('Loading multi weights') + multi_weights_args = config.get( + 'multi_weights_args', ml_collections.ConfigDict() + ) + weight_path_list = multi_weights_args.get('weights', ()) + num_weights = len(weight_path_list) + load_prefix_list = multi_weights_args.get( + 'load_prefix', ('',) * num_weights + ) + load_replace_list = multi_weights_args.get( + 'load_replace', ((),) * num_weights + ) + skip_wrong_shape_list = multi_weights_args.get( + 'skip_wrong_shape', (False,) * num_weights + ) + + for i in range(len(weight_path_list)): + weight_path = weight_path_list[i] + load_prefix = load_prefix_list[i] + load_replace = load_replace_list[i] + skip_wrong_shape = skip_wrong_shape_list[i] + logging.info('Loading weights %d-th weight from %s', i, weight_path) + weight_data = checkpoints.restore_checkpoint(weight_path, None) + if 'params' in weight_data: + restored_params = weight_data['params'] + else: + # Old Scenic train state format. + restored_params = weight_data['optimizer']['target'] + if 'params' in restored_params: # Backward compatibility. + restored_params = restored_params['params'] + + expected_params = train_state.params.unfreeze() + new_params = copy_matched_params( + expected_params, restored_params, + load_prefix=load_prefix, load_replace=load_replace, + skip_wrong_shape=skip_wrong_shape, + force_restore=force_restore) + train_state = train_state.replace(params=FrozenDict(new_params)) + debug_utils.log_param_shapes(train_state.params) + logging.info('Finish loading weights from %s', weight_path) + + return train_state + + +def process_and_fetch_to_host(pred_or_tgt, batch_mask): + """Used to collect predictions and targets of the whole valid/test set. + + Args: + pred_or_tgt: pytree; A pytree of jnp-arrays where leaves are of shape + `[num_devices, bs, X,...,Y]`. + batch_mask: A nd-array of shape `[num_devices, bs]`, where zero values + indicate padded examples. + + Returns: + A list of length num_devices * bs of items, where each item is a tree with + the same structure as `pred_or_tgt` and each leaf contains a single example. + """ + # Fetch to host in a single call. + pred_or_tgt, batch_mask = jax.device_get((pred_or_tgt, batch_mask)) + batch_mask = np.array(batch_mask).astype(bool) + + def _split_mini_batches(x): + # Filter out padded examples. + x = x[batch_mask] + # Split minibatch of examples into a list of examples. + x_list = np.split(x, x.shape[0], axis=0) + # Squeeze out the dummy dimension. + return jax.tree_util.tree_map(lambda x: np.squeeze(x, axis=0), x_list) + + leaves, treedef = jax.tree_util.tree_flatten(pred_or_tgt) + + batch_shape = batch_mask.shape + assert all([leaf.shape[:2] == batch_shape for leaf in leaves]), ( + 'Inconsistent batch shapes.') + + # Split batched leaves into lists of examples: + leaves = list(map(_split_mini_batches, leaves)) + + # Go from leaf-lists to list of trees: + out = [] + if leaves: + num_examples = np.sum(batch_mask, dtype=np.int32) + for example_ind in range(num_examples): + out.append(treedef.unflatten([leaf[example_ind] for leaf in leaves])) + return out diff --git a/scenic/projects/pixel_llm/trainer.py b/scenic/projects/pixel_llm/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..baf67d74539135d3d4aa86710b3629d624f40b77 --- /dev/null +++ b/scenic/projects/pixel_llm/trainer.py @@ -0,0 +1,258 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training script for PixelLLM models.""" + +import functools +import time +from typing import Any + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +from scenic.common_lib import debug_utils +from scenic.dataset_lib import dataset_utils +from scenic.projects.pixel_llm import evaluate +from scenic.projects.pixel_llm import partition_utils +from scenic.projects.pixel_llm import train_utils as pixel_llm_train_utils +from scenic.train_lib import lr_schedules +from scenic.train_lib import train_utils + + +def train_and_evaluate( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter): + """Main training loop lives in this function. + + Args: + rng: JAX PRNGKey. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + is_host = jax.process_index() == 0 + logging.info('Training with config: %s', config) + logging.info('Dataset metadata %s', dataset.meta_data) + + model = model_cls(config, dataset.meta_data) + rng, init_rng = jax.random.split(rng) + if hasattr(model, 'prepare_input_spec'): + input_spec = model.prepare_input_spec(dataset.meta_data) + else: + input_spec = [( + dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32), + )] + model_kwargs = {} + if 'force_init' in config: + model_kwargs['force_init'] = config.force_init + (params, model_state, num_trainable_params, gflops) = ( + train_utils.initialize_model( + model_def=model.flax_model, + input_spec=input_spec, + config=config, + rngs=init_rng, + **model_kwargs, + ) + ) + + # Obtain the mapping of parameter names to frozen or not + frozen_mapping = partition_utils.create_frozen_mask_from_regex( + params, config.get('frozen_params')) + + lr_fn = lr_schedules.get_learning_rate_fn(config) + + rng, train_rng = jax.random.split(rng) + train_state, num_learnable_params, num_frozen_params = ( + partition_utils.create_partitioned_train_state( + params, frozen_mapping, config, 0, model_state, train_rng, lr_fn)) + + # Convert partitioned train state to a normal one for loading from pretrained + # checkpoints, or from the saved one, without any changes. + train_state = partition_utils.convert_to_train_state(train_state) + + # T5 models have a 'params_axes' model_state which is somehow not saved in the + # checkpoint (being removed after a first train_step). Following Vid2Seq to + # remove it when loading the checkpoint. It won't affect if the model does + # have the 'params_axes' model_state. + train_state, params_axes = pixel_llm_train_utils.pop_axes_names( + train_state, 'params_axes') + train_state = checkpoints.restore_checkpoint(workdir, train_state) + train_state = pixel_llm_train_utils.re_add_axis_names( + train_state, params_axes, 'params_axes') + + start_step = int(train_state.global_step) + if start_step == 0: + train_state, start_step = pixel_llm_train_utils.load_weights( + train_state, config) + step0_log = {'num_params': num_trainable_params, + 'num_learnable_params': num_learnable_params, + 'num_frozen_params': num_frozen_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Now convert back to the partitioned train step. + train_state = partition_utils.convert_to_partitioned_train_state( + train_state, frozen_mapping) + + train_step_pmapped = jax.pmap( + functools.partial( + partition_utils.train_step_partitioned, + model=model, + loss_and_metrics_fn=model.loss_function, + learning_rate_fn=lr_fn, + debug=config.debug_train, + ), + axis_name='batch', donate_argnums=(0,), + ) + + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + log_eval_steps = config.get('log_eval_steps', steps_per_epoch) + log_summary_steps = config.get('log_summary_steps', 20) + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + eval_batch_size = config.get('eval_batch_size', config.batch_size) + chrono = train_utils.Chrono() + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + + def write_note(note): + if is_host: + platform.work_unit().set_notes(note) + logging.info(note) + + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + hooks = [] + if is_host: + hooks.append(report_progress) + if config.get('xprof', True) and is_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, lr, train_predictions, metrics = train_step_pmapped( + train_state, train_batch) + train_metrics.append(metrics) + extra_training_logs.append({'learning_rate': lr}) + for h in hooks: + h(step) + chrono.pause() + del train_predictions + + if ( + (step % log_summary_steps == 0) + or (step == total_steps) + or step == (start_step + 1) + ): + if is_host: + chrono.tick(step, writer, write_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, train_metrics + ), + extra_training_logs=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, extra_training_logs + ), + writer=writer, + ) + train_metrics, extra_training_logs = [], [] + + eval_first_step = config.get('eval_first_step', True) and ( + step == start_step + 1 + ) + do_eval = not config.get('not_eval', False) + if ( + (step % log_eval_steps == 0) or (step == total_steps) or eval_first_step + ) and do_eval: + logging.info('Starting evaluation ...') + # Convert back to normal train state for doing evaluation without any + # code changes. + train_state = partition_utils.convert_to_train_state(train_state) + start_time = time.time() + with report_progress.timed('eval'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summary = evaluate.inference_on_all_datasets( + model, + train_state, + dataset, + writer, + eval_batch_size=eval_batch_size, + is_host=is_host, + save_dir=workdir, + step=step, + config=config, + ) + duration = time.time() - start_time + logging.info('Done with evaluation: %.4f sec.', duration) + # Convert back to partitioned train state for training. + train_state = partition_utils.convert_to_partitioned_train_state( + train_state, frozen_mapping + ) + writer.flush() + + if (step % checkpoint_steps == 0 and step > 0) or (step == total_steps): + with report_progress.timed('checkpoint'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + if is_host: + unrep_train_state = jax_utils.unreplicate(train_state) + logging.info('Parameter summary after checkpoint:') + debug_utils.log_param_shapes( + unrep_train_state.params_learned, # pytype: disable=attribute-error + description='Learned params') + if len(unrep_train_state.params_frozen): # pylint: disable=g-explicit-length-test + debug_utils.log_param_shapes( + unrep_train_state.params_frozen, # pytype: disable=attribute-error + description='Frozen params') + # Convert to unpartitioned train state for saving and loading without + # needing any code changes. + unrep_train_state = partition_utils.convert_to_train_state( + unrep_train_state) + train_utils.save_checkpoint(workdir, unrep_train_state, max_to_keep=1) + del unrep_train_state + + chrono.resume() # Un-pause now. + + train_utils.barrier() + return train_state, train_summary, eval_summary diff --git a/scenic/projects/pointcloud/README.md b/scenic/projects/pointcloud/README.md new file mode 100644 index 0000000000000000000000000000000000000000..5999339f2d06772154fe3bbffc6c41b0f9a4614c --- /dev/null +++ b/scenic/projects/pointcloud/README.md @@ -0,0 +1,25 @@ +# Point Cloud Processing Using Transformers + +This repository contains the implementation of +[Point Cloud Transformers](https://arxiv.org/abs/2012.09688) which is a +Transformer-based framework for processing point clouds. + +## Architecture + +The PCT Encoder uses the following pipeline leveraging 4 self-attention layers. + +``` +X -> Dense(X) -> SA_1(X) -> SA_2(X) -> SA_3(X) -> SA_4(X) +``` + +where X is the input, SA_i's are different self-attention layers. The outputs +from the self-attention layers are concatenated and undergoes aggregation (e.g. +max- or mean-pooling) before being used for task-specific applications like +classification and Segmentation. + +## Contribution + +We have replicated the classification baseline on ModelNet40 using NaivePCT +architecture. This repository contains the implementation of the Naive and Offset +PCT models. + diff --git a/scenic/projects/pointcloud/__init__.py b/scenic/projects/pointcloud/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/pointcloud/configs/__init__.py b/scenic/projects/pointcloud/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/pointcloud/configs/pct_config.py b/scenic/projects/pointcloud/configs/pct_config.py new file mode 100644 index 0000000000000000000000000000000000000000..6767616ea84d2e9e6e8da018b1c750592723d209 --- /dev/null +++ b/scenic/projects/pointcloud/configs/pct_config.py @@ -0,0 +1,117 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Default configurations. + +""" + +import ml_collections + +_TRAIN_SIZE = 9843 +NUM_CLASSES = 40 + + +def get_config(runlocal=''): + """Get the default hyperparameter configuration.""" + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + + config.experiment_name = 'pct-modelnet40' + + # `name` argument of tensorflow_datasets.builder() + config.dataset = 'modelnet40_classification.1.0.0' + config.dataset_name = 'modelnet40' + config.data_dtype_str = 'float32' + + # Dataset config + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'modelnet40' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train' + config.dataset_configs.val_split = 'validation' + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.onehot_labels = True + + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 250_000 + + # Model details + config.in_dim = 3 + config.feature_dim = 128 + config.max_seq_len = 2048 + config.kernel_size = 1 + config.dropout_rate = 0.5 + config.cache = False + config.half_precision = False + + # Attention function configs + config.use_attention_masking = True + config.attention_masking_configs = ml_collections.ConfigDict() + config.attention_masking_configs.nearest_neighbour_count = 256 + config.attention_masking_configs.use_knn_mask = True + config.attention_masking_configs.mask_function = 'linear' + + config.attention_type = 'standard' + config.attention_fn_cls = 'softmax' + config.attention_fn_configs = ml_collections.ConfigDict() + # config.attention_fn_configs.nonnegative_features = 'favorplusplus' + config.attention_fn_configs.nb_features = 256 + config.attention_fn_configs.attention_kind = 'regular' + + # Training. + config.trainer_name = 'classification_trainer' + ## optimizer + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.01 + config.optimizer_configs.momentum = 0.9 # use for SGD + + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 10000 + config.log_eval_steps = 500 + config.batch_size = 8 if runlocal else 1024 + config.rng_seed = 42 + + # Learning rate. + steps_per_epoch = _TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 0.00001 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + config.m = None # Placeholder for randaug strength. + config.l = None # Placeholder for randaug layers. + + + return config + + diff --git a/scenic/projects/pointcloud/configs/pct_segmentation_s3dis.py b/scenic/projects/pointcloud/configs/pct_segmentation_s3dis.py new file mode 100644 index 0000000000000000000000000000000000000000..93b4c98828ef4f86ca8c0344c9b5ade9be8cae3e --- /dev/null +++ b/scenic/projects/pointcloud/configs/pct_segmentation_s3dis.py @@ -0,0 +1,118 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Default configurations. + + +""" + +import ml_collections + +_TRAIN_SIZE = 16733 +NUM_CLASSES = 13 + + +def get_config(runlocal=''): + """Get the default hyperparameter configuration.""" + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + + config.experiment_name = 'pct-s3dis' + config.log_summary_steps = 1 if runlocal else None + + # `name` argument of tensorflow_datasets.builder() + config.dataset = 's3dis.1.0.0' + config.dataset_name = 's3dis' + config.data_dtype_str = 'float32' + + # Dataset config + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 's3dis' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train' + config.dataset_configs.val_split = 'validation' + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.onehot_labels = False + + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 250_000 + + # Model details + config.in_dim = 9 + config.feature_dim = 128 + config.max_seq_len = 4096 + config.kernel_size = 1 + config.dropout_rate = 0.5 + config.cache = False + config.half_precision = False + + # Attention function configs + config.use_attention_masking = True + config.attention_masking_configs = ml_collections.ConfigDict() + config.attention_masking_configs.nearest_neighbour_count = 256 + config.attention_masking_configs.use_knn_mask = True + config.attention_masking_configs.mask_function = 'non_linear' + + config.attention_fn_cls = 'softmax' + config.attention_fn_configs = ml_collections.ConfigDict() + # config.attention_fn_configs.nonnegative_features = 'favorplusplus' + config.attention_fn_configs.nb_features = 256 + config.attention_fn_configs.attention_kind = 'regular' + + # Training. + config.trainer_name = 'segmentation_trainer' + ## optimizer + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.01 + config.optimizer_configs.momentum = 0.9 # use for SGD + + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 10000 + config.log_eval_steps = 1 if runlocal else 500 + config.batch_size = 1 if runlocal else 1024 + config.rng_seed = 42 + + # Learning rate. + steps_per_epoch = _TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 0.00001 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + config.m = None # Placeholder for randaug strength. + config.l = None # Placeholder for randaug layers. + + + return config + + diff --git a/scenic/projects/pointcloud/configs/pct_segmentation_shapenet.py b/scenic/projects/pointcloud/configs/pct_segmentation_shapenet.py new file mode 100644 index 0000000000000000000000000000000000000000..7df46c765857a0d8bdf5ce80746ce3197779ef8c --- /dev/null +++ b/scenic/projects/pointcloud/configs/pct_segmentation_shapenet.py @@ -0,0 +1,123 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Default configurations. + +""" + +import ml_collections + +_TRAIN_SIZE = 12137 +NUM_CLASSES = 50 + + +def get_config(runlocal=''): + """Get the default hyperparameter configuration.""" + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + + config.experiment_name = 'pct-shapenet' + config.log_summary_steps = 1 if runlocal else None + + # `name` argument of tensorflow_datasets.builder() + config.dataset = 'shapenet.1.0.0' + config.dataset_name = 'shapenet' + config.data_dtype_str = 'float32' + + # Dataset config + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.dataset = 'shapenet' + config.dataset_configs.num_classes = NUM_CLASSES + config.dataset_configs.train_split = 'train' + config.dataset_configs.val_split = 'validation' + config.dataset_configs.test_split = 'test' + config.dataset_configs.prefetch_to_device = 2 + config.dataset_configs.onehot_labels = False + + # class rebalancing + # config.class_rebalancing_factor = 1 + + # Shuffle_buffer_size is per host, so small-ish is ok. + config.dataset_configs.shuffle_buffer_size = 250_000 + + # Model details + config.in_dim = 3 + config.feature_dim = 128 + config.max_seq_len = 2048 + config.kernel_size = 1 + config.dropout_rate = 0.5 + config.cache = False + config.half_precision = False + + # Attention function configs + config.use_attention_masking = False + config.attention_masking_configs = ml_collections.ConfigDict() + config.attention_masking_configs.nearest_neighbour_count = 256 + config.attention_masking_configs.use_knn_mask = True + config.attention_masking_configs.mask_function = 'linear' + + config.attention_fn_cls = 'softmax' + config.attention_fn_configs = ml_collections.ConfigDict() + # config.attention_fn_configs.nonnegative_features = 'favorplusplus' + config.attention_fn_configs.nb_features = 256 + config.attention_fn_configs.attention_kind = 'regular' + + # Training. + config.trainer_name = 'segmentation_trainer' + ## optimizer + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.01 + config.optimizer_configs.momentum = 0.9 # use for SGD + + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 10000 + config.log_eval_steps = 1 if runlocal else 500 + config.batch_size = 2 if runlocal else 1024 + config.rng_seed = 42 + + # Learning rate. + steps_per_epoch = _TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 0.00001 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + config.m = None # Placeholder for randaug strength. + config.l = None # Placeholder for randaug layers. + + + return config + + + + diff --git a/scenic/projects/pointcloud/main.py b/scenic/projects/pointcloud/main.py new file mode 100644 index 0000000000000000000000000000000000000000..e9fe5f831773ce43387d147a5919e51863351052 --- /dev/null +++ b/scenic/projects/pointcloud/main.py @@ -0,0 +1,85 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Main file for PCT Scenic. + +""" + +from absl import flags +from absl import logging +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.pointcloud import models +from scenic.projects.pointcloud import pointcloud_dataset +from scenic.train_lib_deprecated import trainers + +FLAGS = flags.FLAGS + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for Scenic.""" + + model_cls = models.PointCloudTransformerClassificationModel + data_rng, rng = jax.random.split(rng) + + # Dataset loading + device_count = jax.device_count() + logging.info('device_count: %d', device_count) + logging.info('num_hosts : %d', jax.process_count()) + logging.info('host_id : %d', jax.process_index()) + + logging.info('rng: %s', rng) + batch_size = config.batch_size + if batch_size % device_count > 0: + raise ValueError(f'Batch size ({batch_size}) must be divisible by the ' + f'number of devices ({device_count})') + + eval_batch_size = config.get('eval_batch_size', batch_size) + if eval_batch_size % device_count > 0: + raise ValueError(f'Eval batch size ({eval_batch_size}) must be divisible ' + f'by the number of devices ({device_count})') + + local_batch_size = batch_size // jax.process_count() + eval_local_batch_size = eval_batch_size // jax.process_count() + device_batch_size = batch_size // device_count + logging.info('local_batch_size : %d', local_batch_size) + logging.info('device_batch_size : %d', device_batch_size) + + dataset = pointcloud_dataset.get_dataset( + batch_size=local_batch_size, + eval_batch_size=eval_local_batch_size, + num_shards=jax.local_device_count(), + dtype_str=config.data_dtype_str, + shuffle_seed=0, + rng=data_rng, + prefetch_buffer_size=2, + dataset_configs=config.get('dataset_configs', None), + dataset_service_address=FLAGS.dataset_service_address, + seq_length=config.max_seq_len) + + trainers.get_trainer(config.trainer_name)( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/pointcloud/main_s3dis.py b/scenic/projects/pointcloud/main_s3dis.py new file mode 100644 index 0000000000000000000000000000000000000000..1c4d29845f49daa3d608e140eac4ba5f6a616b9d --- /dev/null +++ b/scenic/projects/pointcloud/main_s3dis.py @@ -0,0 +1,85 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Main file for PCT Scenic. + +""" + +from absl import flags +from absl import logging +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.pointcloud import s3dis_dataset +from scenic.projects.pointcloud import segmentation_model +from scenic.projects.pointcloud import segmentation_trainer + +FLAGS = flags.FLAGS + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for Scenic.""" + + model_cls = segmentation_model.PointCloudTransformerSegmentationModel + data_rng, rng = jax.random.split(rng) + + # Dataset loading + device_count = jax.device_count() + logging.info('device_count: %d', device_count) + logging.info('num_hosts : %d', jax.process_count()) + logging.info('host_id : %d', jax.process_index()) + + logging.info('rng: %s', rng) + batch_size = config.batch_size + if batch_size % device_count > 0: + raise ValueError(f'Batch size ({batch_size}) must be divisible by the ' + f'number of devices ({device_count})') + + eval_batch_size = config.get('eval_batch_size', batch_size) + if eval_batch_size % device_count > 0: + raise ValueError(f'Eval batch size ({eval_batch_size}) must be divisible ' + f'by the number of devices ({device_count})') + + local_batch_size = batch_size // jax.process_count() + eval_local_batch_size = eval_batch_size // jax.process_count() + device_batch_size = batch_size // device_count + logging.info('local_batch_size : %d', local_batch_size) + logging.info('device_batch_size : %d', device_batch_size) + + dataset = s3dis_dataset.get_dataset( + batch_size=local_batch_size, + eval_batch_size=eval_local_batch_size, + num_shards=jax.local_device_count(), + dtype_str=config.data_dtype_str, + shuffle_seed=0, + rng=data_rng, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address=FLAGS.dataset_service_address, + seq_length=config.max_seq_len) + + segmentation_trainer.train( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/pointcloud/main_seg.py b/scenic/projects/pointcloud/main_seg.py new file mode 100644 index 0000000000000000000000000000000000000000..ae412827ef61bcd4da96a776409763593e213f20 --- /dev/null +++ b/scenic/projects/pointcloud/main_seg.py @@ -0,0 +1,85 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Main file for PCT Scenic. + +""" + +from absl import flags +from absl import logging +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.pointcloud import segmentation_model +from scenic.projects.pointcloud import segmentation_trainer +from scenic.projects.pointcloud import shapenet_dataset + +FLAGS = flags.FLAGS + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for Scenic.""" + + model_cls = segmentation_model.PointCloudTransformerSegmentationModel + data_rng, rng = jax.random.split(rng) + + # Dataset loading + device_count = jax.device_count() + logging.info('device_count: %d', device_count) + logging.info('num_hosts : %d', jax.process_count()) + logging.info('host_id : %d', jax.process_index()) + + logging.info('rng: %s', rng) + batch_size = config.batch_size + if batch_size % device_count > 0: + raise ValueError(f'Batch size ({batch_size}) must be divisible by the ' + f'number of devices ({device_count})') + + eval_batch_size = config.get('eval_batch_size', batch_size) + if eval_batch_size % device_count > 0: + raise ValueError(f'Eval batch size ({eval_batch_size}) must be divisible ' + f'by the number of devices ({device_count})') + + local_batch_size = batch_size // jax.process_count() + eval_local_batch_size = eval_batch_size // jax.process_count() + device_batch_size = batch_size // device_count + logging.info('local_batch_size : %d', local_batch_size) + logging.info('device_batch_size : %d', device_batch_size) + + dataset = shapenet_dataset.get_dataset( + batch_size=local_batch_size, + eval_batch_size=eval_local_batch_size, + num_shards=jax.local_device_count(), + dtype_str=config.data_dtype_str, + shuffle_seed=0, + rng=data_rng, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address=FLAGS.dataset_service_address, + seq_length=config.max_seq_len) + + segmentation_trainer.train( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/pointcloud/models.py b/scenic/projects/pointcloud/models.py new file mode 100644 index 0000000000000000000000000000000000000000..f4fcc5a7d2bd6fb63b81f962d599f53912a5411a --- /dev/null +++ b/scenic/projects/pointcloud/models.py @@ -0,0 +1,366 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of PCT model layers.""" + +from typing import Any + +import flax.linen as nn +from flax.linen.initializers import zeros +import jax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models.multilabel_classification_model import MultiLabelClassificationModel +from scenic.projects.performer import performer + +NUM_FT_PARAMS_PER_HEAD = 25 +NUM_POINT_DIMS = 3 + + +def _pairwise_distances(coordinates): + xx = jnp.sum(coordinates**2, axis=-1) + xy = jnp.einsum('...xy,...zy->...xz', coordinates, coordinates) + + x2 = jnp.expand_dims(xx, axis=1) + y2 = jnp.expand_dims(xx, axis=1) + sq_distances = x2 + y2 - 2 * xy + return sq_distances + + +def top_k_hot(distances, k): + """Returns the one-hot mask for k-nearest neighbours.""" + _, idx = jax.lax.top_k(-distances, k) + tops = jax.nn.one_hot(idx, distances.shape[-1], dtype=jnp.int32) + return tops.sum(axis=-2) + + +# The applied attention type is described in attention_fn_configs which +# has the following fields: +# +# : str; possible values: 'regular', 'performer' +# : Dict[Any, Any]; a dictionary of the following fields: +# +# : str; possible values: 'softmax', 'relu', 'quartet' +# : boolean +# : int +# : int +# : str +# : int +# : int +# : str; possible values: 'favorplus', 'favorplusplus', +# 'favorsharp' +# : str; possible values: 'nomask', 'fftmasked', 'sharpmasked' + + +class SelfAttentionLayer(nn.Module): + """Self Attention Layer.""" + in_channels: Any + out_channels: Any + key_channels: Any | None = None + kernel_size: int | None = 1 + mask_function: str | None = 'linear' + attention_type: str | None = 'naive' + attention_fn_configs: dict[Any, Any] | None = None + + @nn.compact + def __call__(self, + inputs, + coords=None, + mask=None, + numerical_stabilizer=1e-9, + train: bool = False): + """Applies self attention on the input data. + + Args: + inputs: Input tensor of shape [batch_size, num_points, feature_dim] + coords: Input tensor of point positions of the shape [batch_size, + num_points, 3] + mask: Binary array of shape broadcastable to `inputs` tensor, indicating + the positions for which self attention should be computed. + numerical_stabilizer: takes into account stability when inputs are zero. + train: Whether it is training or not. + + Returns: + output: Tensor of shape [batch_size, num_points, feature_dim] + """ + key_channels = self.key_channels or self.out_channels + if ((self.attention_fn_configs is not None) and + ('neighbor_attn' in self.attention_fn_configs) and + self.attention_fn_configs['neighbor_attn']): + input_q = coords + input_k = coords + input_v = inputs + else: + input_q = nn.Conv( + key_channels, kernel_size=(self.kernel_size,), use_bias=True + )(inputs) + input_k = nn.Conv( + key_channels, kernel_size=(self.kernel_size,), use_bias=True + )(inputs) + input_v = nn.Conv( + self.out_channels, kernel_size=(self.kernel_size,), use_bias=True + )(inputs) + + if ( + self.attention_fn_configs is None + or self.attention_fn_configs['attention_kind'] == 'regular' + ): + attention = jnp.einsum('...MC,...NC->...MN', input_q, input_k) + if mask is not None: + mask = nn.make_attention_mask(mask, mask) + mask = mask.squeeze(axis=-3) + big_neg = jnp.finfo(attention.dtype).min + attention = jnp.where(mask, attention, big_neg) + attention = nn.softmax(attention, axis=-1) + attention = attention / ( + numerical_stabilizer + jnp.sum(attention, axis=1, keepdims=True)) + output = jnp.einsum('...MN,...NC->...NC', attention, input_v) + else: + query = jnp.expand_dims(input_q, axis=-2) + key = jnp.expand_dims(input_k, axis=-2) + value = jnp.expand_dims(input_v, axis=-2) + # TODO(kchoro): Include point cloud masking in performer attention + if self.attention_fn_configs['performer']['masking_type'] == 'nomask': + output = performer.regular_performer_dot_product_attention( + query, + key, + value, + kernel_config=self.attention_fn_configs['performer'], + ) + elif ( + self.attention_fn_configs['performer']['masking_type'] == 'fftmasked' + ): + toeplitz_params = self.param( + 'toeplitz_params', zeros, (query.shape[-2], 2 * query.shape[-3] - 1) + ) + output = performer.masked_performer_dot_product_attention( + query, + key, + value, + toeplitz_params=toeplitz_params, + kernel_config=self.attention_fn_configs['performer'], + ) + elif ( + self.attention_fn_configs['performer']['masking_type'] + == 'sharpmasked' + ): + toeplitz_params = self.param( + 'toeplitz_params', + zeros, + (query.shape[-2], 5 * NUM_FT_PARAMS_PER_HEAD), + ) + output = performer.sharp_masked_performer_dot_product_attention( + query, + key, + value, + coords, + toeplitz_params=toeplitz_params, + kernel_config=self.attention_fn_configs['performer'], + ) + elif ( + self.attention_fn_configs['performer']['masking_type'] + == 'pseudolocal' + ): + sigma = self.attention_fn_configs['performer']['sigma'] + base_aniso_matrix = (1.0 / sigma) * jnp.identity(3) + output = performer.pseudolocal_subquadratic_attention( + query, + key, + value, + coords, + aniso_matrix=(base_aniso_matrix), + rf_type=self.attention_fn_configs['performer']['rf_type'], + nb_rfs=self.attention_fn_configs['performer']['num_features'], + ) + elif ( + self.attention_fn_configs['performer']['masking_type'] + == 'pseudolocal_learnable' + ): + inner_dim = 3 + sigma = self.attention_fn_configs['performer']['sigma'] + base_aniso_matrix = (1.0 / sigma) * jnp.identity(3) + aniso_matrix_delta_params = (1.0 / sigma) * self.param( + 'aniso_matrix_delta_params', zeros, (inner_dim, 3) + ) + output = performer.pseudolocal_subquadratic_attention( + query, + key, + value, + coords, + aniso_matrix=(base_aniso_matrix + aniso_matrix_delta_params), + rf_type=self.attention_fn_configs['performer']['rf_type'], + nb_rfs=self.attention_fn_configs['performer']['num_features'], + ) + else: + raise ValueError( + 'Unsupported masking type: %s' + % self.attention_fn_configs['performer']['masking_type'] + ) + output = jnp.squeeze(output, axis=-2) + + output = (inputs - output) if self.attention_type == 'offset' else output + output = nn.Conv( + self.out_channels, + kernel_size=(self.kernel_size,), + use_bias=True, + )(output) + output = nn.LayerNorm(reduction_axes=-2)(output) + output = nn.relu(output) + return output + inputs + + +class PointCloudTransformerEncoder(nn.Module): + """Point Cloud Transformer Encoder.""" + in_dim: int + feature_dim: int + kernel_size: int | None = 1 + encoder_feature_dim: int | None = 1024 + num_attention_layers: int | None = 4 + num_pre_conv_layers: int = 2 + num_heads: int | None = 1 + attention_fn_configs: dict[Any, Any] | None = None + use_attention_masking: bool | None = False + use_knn_mask: bool | None = False + nearest_neighbour_count: int | None = 256 + mask_function: str | None = 'linear' + out_dim: int | None = None + + @nn.compact + def __call__( + self, + inputs, + mask: jnp.ndarray | None = None, + train: bool = False, + debug: bool = False, + coords: jnp.ndarray | None = None, + ): + output = inputs + if mask is not None and (jnp.ndim(mask) < jnp.ndim(inputs)): + layer_norm_mask = jnp.expand_dims(mask, axis=-1) + else: + layer_norm_mask = mask + if coords is None: + coords = inputs + for _ in range(self.num_pre_conv_layers): + output = nn.Conv( + self.feature_dim, + kernel_size=(self.kernel_size,), + use_bias=True, + )(output) + output = nn.LayerNorm(reduction_axes=-2)(output, mask=layer_norm_mask) + + # Self-attention blocks, input_shape= [B, N, D] + attention_outputs = [] + for _ in range(self.num_attention_layers): + output = SelfAttentionLayer( + in_channels=self.feature_dim, + key_channels=self.feature_dim, + out_channels=self.feature_dim, + attention_fn_configs=self.attention_fn_configs)( + output, coords, mask=mask) + attention_outputs.append(output) + + output = jnp.concatenate(attention_outputs, axis=-1) + + output = nn.Conv( + self.encoder_feature_dim, + kernel_size=(self.kernel_size,), + use_bias=True)(output) + + if self.out_dim is not None: + output = nn.LayerNorm(reduction_axes=-2)(output, mask=layer_norm_mask) + output = nn.leaky_relu(output, negative_slope=0.2) + output = nn.Conv( + self.out_dim, + kernel_size=(self.kernel_size,), + use_bias=True)(output) + return output + + +class PointCloudTransformerClassifier(nn.Module): + """Point Cloud Transformer Classifier.""" + in_dim: int + feature_dim: int + kernel_size: int | None = 1 + num_classes: int | None = 40 + dropout_rate: float | None = 0.5 + attention_type: str | None = 'standard' + attention_fn_configs: dict[Any, Any] | None = None + use_attention_masking: bool | None = False + use_knn_mask: bool | None = False + nearest_neighbour_count: int | None = 256 + mask_function: str | None = 'linear' + + @nn.compact + def __call__(self, inputs, train: bool = False, debug: bool = False): + output = inputs + if self.attention_type == 'standard': + output = PointCloudTransformerEncoder( + in_dim=self.in_dim, + feature_dim=self.feature_dim, + kernel_size=self.kernel_size, + attention_fn_configs=self.attention_fn_configs, + use_attention_masking=self.use_attention_masking, + use_knn_mask=self.use_knn_mask, + nearest_neighbour_count=self.nearest_neighbour_count, + mask_function=self.mask_function)( + inputs, train=train, debug=debug) + + # Max Pooling + output = jnp.max(output, axis=1, keepdims=False) + # LBR Block 1 + output = nn.Dense(4 * self.feature_dim, use_bias=True)(output) + output = nn.LayerNorm(reduction_axes=-2)(output) + output = nn.leaky_relu(output, negative_slope=0.2) + output = nn.Dropout(rate=self.dropout_rate, deterministic=not train)(output) + # LBR Block 2 + output = nn.Dense(2 * self.feature_dim, use_bias=True)(output) + output = nn.LayerNorm(reduction_axes=-2)(output) + output = nn.leaky_relu(output, negative_slope=0.2) + output = nn.Dropout(rate=self.dropout_rate, deterministic=not train)(output) + # Classification head + output = nn.Dense(self.num_classes, use_bias=True)(output) + return output + + +class PointCloudTransformerClassificationModel(MultiLabelClassificationModel): + """Implements the PCT model for multi-label classification.""" + + def build_flax_model(self) -> nn.Module: + return PointCloudTransformerClassifier( + in_dim=self.config.in_dim, + feature_dim=self.config.feature_dim, + kernel_size=self.config.kernel_size, + num_classes=self.config.dataset_configs.num_classes, + dropout_rate=self.config.dropout_rate, + attention_type=self.config.attention_type, + attention_fn_configs=self.config.attention_fn_configs, + use_attention_masking=self.config.use_attention_masking, + use_knn_mask=self.config.attention_masking_configs.use_knn_mask, + nearest_neighbour_count=self.config.attention_masking_configs + .nearest_neighbour_count, + mask_function=self.config.attention_masking_configs.mask_function) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return _get_default_configs_for_testing() + + +def _get_default_configs_for_testing() -> ml_collections.ConfigDict: + return ml_collections.ConfigDict( + dict( + in_dim=3, + feature_dim=128, + kernel_size=1, + num_classes=40, + )) diff --git a/scenic/projects/pointcloud/models_test.py b/scenic/projects/pointcloud/models_test.py new file mode 100644 index 0000000000000000000000000000000000000000..8766d1604f1644fa9a52a1245e0b7e2bd8156457 --- /dev/null +++ b/scenic/projects/pointcloud/models_test.py @@ -0,0 +1,215 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from absl.testing import absltest +from absl.testing import parameterized +import jax +from scenic.projects.pointcloud import models + + +# pylint: disable=invalid-name + +IN_DIM = 3 +OUT_DIM = 1024 +DIM = 3 +FEATURE_DIM = 12 +BATCH = 10 +NB_POINTS = 1000 +SEED = 41 +SIGMA = 0.1 + + +class PerformerModelTest(parameterized.TestCase): + + def test_regular_transformer_encoder_result(self): + rng_key = jax.random.PRNGKey(SEED) + inputs = jax.random.normal(key=rng_key, shape=(BATCH, NB_POINTS, DIM)) + pct_encoder = models.PointCloudTransformerEncoder( + in_dim=IN_DIM, feature_dim=FEATURE_DIM, attention_fn_configs=None + ) + variables = pct_encoder.init(rng_key, inputs) + result = pct_encoder.apply(variables, inputs) + self.assertEqual(result.shape, (BATCH, NB_POINTS, OUT_DIM)) + + def test_regular_performer_softmax_encoder_result(self): + attention_fn_configs = dict() + attention_fn_configs['attention_kind'] = 'performer' + attention_fn_configs['performer'] = { + 'masking_type': 'nomask', + 'kernel_transformation': 'softmax', + 'num_features': 64, + 'rpe_method': None, + 'num_realizations': 10, + 'num_sines': 1, + 'use_random_projections': True, + 'sigma': SIGMA + } + rng_key = jax.random.PRNGKey(SEED) + inputs = jax.random.normal(key=rng_key, shape=(BATCH, NB_POINTS, DIM)) + pct_encoder = models.PointCloudTransformerEncoder( + in_dim=IN_DIM, + feature_dim=FEATURE_DIM, + attention_fn_configs=attention_fn_configs, + ) + variables = pct_encoder.init(rng_key, inputs) + result = pct_encoder.apply(variables, inputs) + self.assertEqual(result.shape, (BATCH, NB_POINTS, OUT_DIM)) + + def test_regular_performer_relu_encoder_result(self): + attention_fn_configs = dict() + attention_fn_configs['attention_kind'] = 'performer' + attention_fn_configs['performer'] = { + 'masking_type': 'nomask', + 'kernel_transformation': 'relu', + 'num_features': 0, + 'rpe_method': None, + 'num_realizations': 10, + 'num_sines': 1, + 'use_random_projections': False, + 'sigma': SIGMA + } + rng_key = jax.random.PRNGKey(SEED) + inputs = jax.random.normal(key=rng_key, shape=(BATCH, NB_POINTS, DIM)) + pct_encoder = models.PointCloudTransformerEncoder( + in_dim=IN_DIM, + feature_dim=FEATURE_DIM, + attention_fn_configs=attention_fn_configs, + ) + variables = pct_encoder.init(rng_key, inputs) + result = pct_encoder.apply(variables, inputs) + self.assertEqual(result.shape, (BATCH, NB_POINTS, OUT_DIM)) + + def test_performer_softmax_fftmasked_encoder_result(self): + attention_fn_configs = dict() + attention_fn_configs['attention_kind'] = 'performer' + attention_fn_configs['performer'] = { + 'masking_type': 'fftmasked', + 'kernel_transformation': 'softmax', + 'num_features': 64, + 'rpe_method': None, + 'num_realizations': 10, + 'num_sines': 1, + 'use_random_projections': True, + 'seed': 41, + 'sigma': SIGMA + } + rng_key = jax.random.PRNGKey(SEED) + inputs = jax.random.normal(key=rng_key, shape=(BATCH, NB_POINTS, DIM)) + pct_encoder = models.PointCloudTransformerEncoder( + in_dim=IN_DIM, + feature_dim=FEATURE_DIM, + attention_fn_configs=attention_fn_configs, + ) + variables = pct_encoder.init(rng_key, inputs) + result = pct_encoder.apply(variables, inputs) + self.assertEqual(result.shape, (BATCH, NB_POINTS, OUT_DIM)) + + def test_performer_relu_fftmasked_encoder_result(self): + attention_fn_configs = dict() + attention_fn_configs['attention_kind'] = 'performer' + attention_fn_configs['performer'] = { + 'masking_type': 'fftmasked', + 'kernel_transformation': 'relu', + 'num_features': 0, + 'rpe_method': None, + 'num_realizations': 10, + 'num_sines': 1, + 'use_random_projections': False, + 'seed': 41, + 'sigma': SIGMA + } + rng_key = jax.random.PRNGKey(SEED) + inputs = jax.random.normal(key=rng_key, shape=(BATCH, NB_POINTS, DIM)) + pct_encoder = models.PointCloudTransformerEncoder( + in_dim=IN_DIM, + feature_dim=FEATURE_DIM, + attention_fn_configs=attention_fn_configs, + ) + variables = pct_encoder.init(rng_key, inputs) + result = pct_encoder.apply(variables, inputs) + self.assertEqual(result.shape, (BATCH, NB_POINTS, OUT_DIM)) + + def test_performer_softmax_sharpmasked_encoder_result(self): + attention_fn_configs = dict() + attention_fn_configs['attention_kind'] = 'performer' + attention_fn_configs['performer'] = { + 'masking_type': 'sharpmasked', + 'kernel_transformation': 'softmax', + 'num_features': 64, + 'rpe_method': None, + 'num_realizations': 10, + 'num_sines': 1, + 'use_random_projections': True, + 'seed': 41, + 'sigma': SIGMA + } + rng_key = jax.random.PRNGKey(SEED) + inputs = jax.random.normal(key=rng_key, shape=(BATCH, NB_POINTS, DIM)) + pct_encoder = models.PointCloudTransformerEncoder( + in_dim=IN_DIM, + feature_dim=FEATURE_DIM, + attention_fn_configs=attention_fn_configs, + ) + variables = pct_encoder.init(rng_key, inputs) + result = pct_encoder.apply(variables, inputs) + self.assertEqual(result.shape, (BATCH, NB_POINTS, OUT_DIM)) + + def test_performer_relu_sharpmasked_encoder_result(self): + attention_fn_configs = dict() + attention_fn_configs['attention_kind'] = 'performer' + attention_fn_configs['performer'] = { + 'masking_type': 'sharpmasked', + 'kernel_transformation': 'relu', + 'num_features': 0, + 'rpe_method': None, + 'num_realizations': 10, + 'num_sines': 1, + 'use_random_projections': False, + 'seed': 41, + 'sigma': SIGMA + } + rng_key = jax.random.PRNGKey(SEED) + inputs = jax.random.normal(key=rng_key, shape=(BATCH, NB_POINTS, DIM)) + pct_encoder = models.PointCloudTransformerEncoder( + in_dim=IN_DIM, + feature_dim=FEATURE_DIM, + attention_fn_configs=attention_fn_configs, + ) + variables = pct_encoder.init(rng_key, inputs) + result = pct_encoder.apply(variables, inputs) + self.assertEqual(result.shape, (BATCH, NB_POINTS, OUT_DIM)) + + def test_performer_psuedolocal_masking_encoder_result(self): + attention_fn_configs = dict() + attention_fn_configs['attention_kind'] = 'performer' + attention_fn_configs['performer'] = { + 'masking_type': 'pseudolocal', + 'rf_type': 'regular', + 'num_features': 128, + 'sigma': SIGMA + } + rng_key = jax.random.PRNGKey(SEED) + inputs = jax.random.normal(key=rng_key, shape=(BATCH, NB_POINTS, DIM)) + pct_encoder = models.PointCloudTransformerEncoder( + in_dim=IN_DIM, + feature_dim=FEATURE_DIM, + attention_fn_configs=attention_fn_configs, + ) + variables = pct_encoder.init(rng_key, inputs) + result = pct_encoder.apply(variables, inputs) + self.assertEqual(result.shape, (BATCH, NB_POINTS, OUT_DIM)) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/pointcloud/pointcloud_dataset.py b/scenic/projects/pointcloud/pointcloud_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..bf9676261e1de04a46babf1490d977bc1dd04717 --- /dev/null +++ b/scenic/projects/pointcloud/pointcloud_dataset.py @@ -0,0 +1,241 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for ModelNet40 dataset. + +Input data format: +Point Cloud - a tensor of shape [seq_length, 3] containing (x, y, z) coordinates +Label - a class label for the point cloud object +""" + +import dataclasses +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf +import tensorflow_datasets as tfds + + +@dataclasses.dataclass +class ModelNet40DatasetConfig: + """Dataset config.""" + + dataset_path: str = '' + + num_train_pointclouds: int = 9843 + num_eval_pointclouds: int = 2468 + seq_length: int = 1024 + dataset_name: str = 'modelnet40_classification' + version: str = '1.0.0' + num_classes: int = 40 + + +def get_dataset_config(seq_length): + """Returns dataset config.""" + if seq_length == 1024: + return ModelNet40DatasetConfig( + seq_length=1024) + elif seq_length == 2048: + return ModelNet40DatasetConfig( + num_train_pointclouds=9840, + seq_length=2048, + dataset_name='modelnet40_h5') + elif seq_length == 4096: + return ModelNet40DatasetConfig( + seq_length=4096, + version='1.1.0') + elif seq_length == 8192: + return ModelNet40DatasetConfig( + seq_length=8192, + version='1.2.0') + return ModelNet40DatasetConfig() + + +def modelnet40_load_split(batch_size, + dataset_config, + train, + onehot_labels=True, + dtype=tf.float32, + prefetch_buffer_size=10, + shuffle_seed=None): + """Creates a split from the ModelNet40 dataset using TensorFlow Datasets. + + For the training set, we drop the last partial batch. This is fine to do + because we additionally shuffle the data randomly each epoch, thus the trainer + will see all data in expectation. For the validation set, we pad the final + batch to the desired batch size. + + Args: + batch_size: int; The batch size returned by the data pipeline. + dataset_config: dataset configuration. + train: bool; Whether to load the train or evaluation split. + onehot_labels: Whether to transform the labels to one hot. + dtype: TF data type; Data type of the image. + prefetch_buffer_size: int; Buffer size for the TFDS prefetch. + shuffle_seed: The seed to use when shuffling the train split. + + Returns: + A `tf.data.Dataset`. + """ + + def random_noise(pointcloud, std=0.02): + assert len(pointcloud.shape) == 2 + noise = tf.random.normal(tf.shape(pointcloud), mean=0, stddev=std/2) + noisy_pointcloud = pointcloud + tf.clip_by_value( + noise, clip_value_min=-std, clip_value_max=std) + return noisy_pointcloud + + def decode_example(example): + pointcloud = tf.cast(example['pc'], dtype=dtype) + if train: + pointcloud = random_noise(pointcloud) + pointcloud = tf.random.shuffle(pointcloud) + + label = example['label'] + label = tf.one_hot(label, + dataset_config.num_classes) if onehot_labels else label + return {'inputs': pointcloud, 'label': label} + + split = 'train' if train else 'test' + dataset_builder = dataset_utils.get_dataset_tfds( + dataset_config.dataset_name, + split=split, + data_dir=dataset_config.dataset_path, + skip_decode=('pc',)) + # Download dataset: + dataset_builder.download_and_prepare() + + ds = dataset_builder.as_dataset( + split=split, decoders={ + 'pc': tfds.decode.SkipDecoding(), + }) + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + ds = ds.with_options(options) + + ds = ds.cache() + + if train: + ds = ds.repeat() + ds = ds.shuffle(16 * batch_size, seed=shuffle_seed) + + # decode_example should be applied after caching as it also does augmentation + ds = ds.map(decode_example, num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.batch(batch_size, drop_remainder=train) + + ds = ds.prefetch(prefetch_buffer_size) + return ds + + +@datasets.add_dataset('modelnet40') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address: Optional[str] = None, + seq_length=1024): + """Returns generators for the ModelNet40 train, validation, and test sets. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + prefetch_buffer_size: int; Buffer size for the device prefetch. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + seq_length: maximum sequence length. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + modelnet40config = get_dataset_config(seq_length) + dataset_configs = dataset_configs or {} + del rng + data_augmentations = dataset_configs.get('data_augmentations', ['default']) + # TODO(dehghani): add mixup data augmentation. + for da in data_augmentations: + if da not in ['default']: + raise ValueError(f'Data augmentation {data_augmentations} is not ' + f'(yet) supported in the ModelNet40 dataset.') + dtype = getattr(tf, dtype_str) + onehot_labels = dataset_configs.get('onehot_labels', False) + + logging.info('Loading train split of the ModelNet40 dataset.') + train_ds = modelnet40_load_split( + batch_size, + modelnet40config, + train=True, + onehot_labels=onehot_labels, + dtype=dtype, + shuffle_seed=shuffle_seed) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + logging.info('Loading validation split of the ModelNet40 dataset.') + eval_ds = modelnet40_load_split( + eval_batch_size, + modelnet40config, train=False, onehot_labels=onehot_labels, dtype=dtype) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + train_iter = jax_utils.prefetch_to_device(train_iter, prefetch_buffer_size) + + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + eval_iter = map(shard_batches, eval_iter) + eval_iter = jax_utils.prefetch_to_device(eval_iter, prefetch_buffer_size) + + input_shape = (-1, seq_length, 3) + + meta_data = { + 'num_classes': modelnet40config.num_classes, + 'input_shape': input_shape, + 'num_train_examples': modelnet40config.num_train_pointclouds, + 'num_eval_examples': modelnet40config.num_eval_pointclouds, + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': onehot_labels, + } + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) + diff --git a/scenic/projects/pointcloud/s3dis_dataset.py b/scenic/projects/pointcloud/s3dis_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..a0b54e919b21b482839ef3b5e90404da1316a189 --- /dev/null +++ b/scenic/projects/pointcloud/s3dis_dataset.py @@ -0,0 +1,245 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for S3DIS dataset.""" + +import dataclasses +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf +import tensorflow_datasets as tfds + + +@dataclasses.dataclass +class S3disDatasetConfig: + """Dataset config.""" + dataset_path: str = '' + num_train_pointclouds: int = 16733 + num_validation_pointclouds: int = 6852 + seq_length: int = 4096 + dataset_name: str = 's3dis' + version: str = '1.0.0' + num_classes: int = 13 + + +def get_dataset_config(): + """Returns dataset config.""" + return S3disDatasetConfig() + + +def s3dis_load_split(batch_size, + dataset_config, + split='train', + dtype=tf.float32, + prefetch_buffer_size=10, + shuffle_seed=None): + """Creates a split from the S3dis dataset using TensorFlow Datasets. + + For the training set, we drop the last partial batch. This is fine to do + because we additionally shuffle the data randomly each epoch, thus the trainer + will see all data in expectation. For the validation set, we pad the final + batch to the desired batch size. + + Args: + batch_size: int; The batch size returned by the data pipeline. + dataset_config: dataset configuration. + split: str; Whether to load the train or evaluation split. + dtype: TF data type; Data type of the image. + prefetch_buffer_size: int; Buffer size for the TFDS prefetch. + shuffle_seed: The seed to use when shuffling the train split. + + Returns: + A `tf.data.Dataset`. + """ + + is_train = (split == 'train') + + if split == 'train': + split_size = dataset_config.num_train_pointclouds // jax.process_count() + start = jax.process_index() * split_size + split = 'train[{}:{}]'.format(start, start + split_size) + elif split == 'validation': + split_size = dataset_config.num_validation_pointclouds // jax.process_count( + ) + start = jax.process_index() * split_size + split = 'validation[{}:{}]'.format(start, start + split_size) + + def random_noise(pointcloud, std=0.02): + assert len(pointcloud.shape) == 2 + noise = tf.random.normal(tf.shape(pointcloud), mean=0, stddev=std/2) + noisy_pointcloud = pointcloud + tf.clip_by_value( + noise, clip_value_min=-std, clip_value_max=std) + return noisy_pointcloud + + def decode_example(example): + pointcloud = tf.cast(example['pc'], dtype=dtype) + label = tf.squeeze(example['label']) + + if is_train: + pointcloud = random_noise(pointcloud) + + # shuffle points + indices = tf.range(start=0, limit=tf.shape(pointcloud)[0], dtype=tf.int32) + shuffled_indices = tf.random.shuffle(indices) + pointcloud = tf.gather(pointcloud, shuffled_indices) + label = tf.gather(label, shuffled_indices) + + return { + 'inputs': pointcloud, + 'label': label, + } + + dataset_builder = tfds.builder( + dataset_config.dataset_name, + data_dir=dataset_config.dataset_path, + version=dataset_config.version) + # Download dataset: + dataset_builder.download_and_prepare() + + ds = dataset_builder.as_dataset( + split=split, decoders={ + 'pc': tfds.decode.SkipDecoding(), + }) + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + ds = ds.with_options(options) + + ds = ds.cache() + + if is_train: + ds = ds.repeat() + ds = ds.shuffle(16 * batch_size, seed=shuffle_seed) + + # decode_example should be applied after caching as it also does augmentation + ds = ds.map(decode_example, num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.batch(batch_size, drop_remainder=is_train) + + if not is_train: + ds = ds.repeat() + + ds = ds.prefetch(prefetch_buffer_size) + return ds + + +@datasets.add_dataset('s3dis') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address: Optional[str] = None, + seq_length=2048): + """Returns generators for the ShapeNet train, validation, and test sets. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + prefetch_buffer_size: int; Buffer size for the device prefetch. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + seq_length: maximum sequence length. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + shapenet_config = get_dataset_config() + dataset_configs = dataset_configs or {} + del rng + data_augmentations = dataset_configs.get('data_augmentations', ['default']) + # TODO(dehghani): add mixup data augmentation. + for da in data_augmentations: + if da not in ['default']: + raise ValueError(f'Data augmentation {data_augmentations} is not ' + f'(yet) supported in the S3dis dataset.') + dtype = getattr(tf, dtype_str) + onehot_labels = False # dataset_configs.get('onehot_labels', False) + + logging.info('Loading train split of the S3dis dataset.') + train_ds = s3dis_load_split( + batch_size, + shapenet_config, + split='train', + dtype=dtype, + shuffle_seed=shuffle_seed) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + logging.info('Loading validation split of the S3dis dataset.') + val_ds = s3dis_load_split( + eval_batch_size, + shapenet_config, + split='test', + dtype=dtype) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, + train=True, + batch_size=batch_size, + pixel_level=True) + maybe_pad_batches_val = functools.partial( + dataset_utils.maybe_pad_batch, + train=False, + batch_size=eval_batch_size, + pixel_level=True) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + train_iter = jax_utils.prefetch_to_device(train_iter, prefetch_buffer_size) + + val_iter = iter(val_ds) + val_iter = map(dataset_utils.tf_to_numpy, val_iter) + val_iter = map(maybe_pad_batches_val, val_iter) + val_iter = map(shard_batches, val_iter) + val_iter = jax_utils.prefetch_to_device(val_iter, prefetch_buffer_size) + + input_shape = (-1, seq_length, 9) + + meta_data = { + 'num_classes': shapenet_config.num_classes, + 'input_shape': input_shape, + 'num_train_examples': shapenet_config.num_train_pointclouds, + 'num_eval_examples': shapenet_config.num_validation_pointclouds, + 'input_dtype': getattr(jnp, dtype_str), + 'label_dtype': getattr(jnp, 'int64'), + 'target_is_onehot': onehot_labels, + } + return dataset_utils.Dataset(train_iter, val_iter, None, meta_data) + diff --git a/scenic/projects/pointcloud/segmentation_model.py b/scenic/projects/pointcloud/segmentation_model.py new file mode 100644 index 0000000000000000000000000000000000000000..a8a8302fe09b73558cbd11d595cfc7842e925adc --- /dev/null +++ b/scenic/projects/pointcloud/segmentation_model.py @@ -0,0 +1,239 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implementation of PCT segmentation model.""" + +import functools +from typing import Any, Dict, Optional, Tuple + +import flax.linen as nn +from flax.training import common_utils +from immutabledict import immutabledict +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils +from scenic.model_lib.base_models.segmentation_model import SegmentationModel +from scenic.projects.pointcloud.models import PointCloudTransformerEncoder + + +def point_count(logits: jnp.ndarray, + one_hot_targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None) -> float: + """Computes number of pixels in the target to be used for normalization. + + It needs to have the same API as other defined metrics. + + Args: + logits: Unused. + one_hot_targets: Targets, in form of one-hot vectors. + weights: Input weights (can be used for accounting the padding in the + input). + + Returns: + Number of (non-padded) pixels in the input. + """ + del logits + if weights is None: + return np.prod(one_hot_targets.shape[:3]) + assert weights.ndim == 2, ( + 'For segmentation task, the weights should be a point level mask.') + return weights.sum() # pytype: disable=bad-return-type # jax-ndarray + + +# Standard default metrics for the semantic segmentation models. +_POINTCLOUD_SEGMENTATION_METRICS = immutabledict({ + 'accuracy': (model_utils.weighted_correctly_classified, point_count), + + # The loss is already normalized, so we set num_pixels to 1.0: + 'loss': (model_utils.weighted_softmax_cross_entropy, lambda *a, **kw: 1.0) +}) + + +def semantic_segmentation_metrics_function( + logits: jnp.ndarray, + batch: base_model.Batch, + target_is_onehot: bool = False, + metrics: base_model + .MetricNormalizerFnDict = _POINTCLOUD_SEGMENTATION_METRICS, +) -> Dict[str, Tuple[jnp.ndarray, jnp.ndarray]]: + """Calculates metrics for the semantic segmentation task. + + Currently we assume each metric_fn has the API: + ```metric_fn(logits, targets, weights)``` + and returns an array of shape [batch_size]. We also assume that to compute + the aggregate metric, one should sum across all batches, then divide by the + total samples seen. In this way we currently only support metrics of the 1/N + sum f(inputs, targets). Note, the caller is responsible for dividing by + the normalizer when computing the mean of each metric. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + target_is_onehot: If the target is a one-hot vector. + metrics: The semantic segmentation metrics to evaluate. The key is the name + of the metric, and the value is the metrics function. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples of + (metric, normalizer). + """ + if target_is_onehot: + one_hot_targets = batch['label'] + else: + one_hot_targets = common_utils.onehot(batch['label'], logits.shape[-1]) + weights = batch.get('batch_mask') # batch_mask might not be defined + + # This psum is required to correctly evaluate with multihost. Only host 0 + # will report the metrics, so we must aggregate across all hosts. The psum + # will map an array of shape [n_global_devices, batch_size] -> [batch_size] + # by summing across the devices dimension. The outer sum then sums across the + # batch dim. The result is then we have summed across all samples in the + # sharded batch. + evaluated_metrics = {} + for key, val in metrics.items(): + evaluated_metrics[key] = model_utils.psum_metric_normalizer( # pytype: disable=wrong-arg-types # jax-ndarray + (val[0](logits, one_hot_targets, weights), # pytype: disable=wrong-arg-types # jax-types + val[1](logits, one_hot_targets, weights))) # pytype: disable=wrong-arg-types # jax-types + return evaluated_metrics + + +class PointCloudTransformerSegmentation(nn.Module): + """Point Cloud Transformer Segmentation Model.""" + in_dim: int + feature_dim: int + self_attention: str = 'standard' + kernel_size: Optional[int] = 1 + num_class: Optional[int] = 50 + dropout_rate: Optional[float] = 0.5 + attention_fn_configs: Optional[Dict[Any, Any]] = None + use_attention_masking: Optional[bool] = False + use_knn_mask: Optional[bool] = False + nearest_neighbour_count: Optional[int] = 256 + mask_function: Optional[str] = 'linear' + + @nn.compact + def __call__(self, + inputs, + cls_label=None, + train: bool = False, + debug: bool = False): + + _, num_points, _ = inputs.shape + + # [B, N, D] + if self.self_attention == 'standard': + pointwise_features = PointCloudTransformerEncoder( + in_dim=self.in_dim, + feature_dim=self.feature_dim, + kernel_size=self.kernel_size, + attention_fn_configs=self.attention_fn_configs, + use_attention_masking=self.use_attention_masking, + use_knn_mask=self.use_knn_mask, + nearest_neighbour_count=self.nearest_neighbour_count, + mask_function=self.mask_function)( + inputs, train=train, debug=debug) + + # Max Pooling + max_features = jnp.max(pointwise_features, axis=1, keepdims=True) + max_features = jnp.repeat(max_features, repeats=num_points, axis=1) + # Mean Pooling + mean_features = jnp.mean(pointwise_features, axis=1, keepdims=True) + mean_features = jnp.repeat(mean_features, repeats=num_points, axis=1) + + # concatenate along feature dim + global_features = jnp.concatenate( + [pointwise_features, max_features, mean_features], + axis=-1) + + if cls_label is not None: + # class label features + cls_label_feature = jnp.expand_dims(cls_label, axis=1) + cls_label_feature = nn.Conv( + self.feature_dim // 2, + kernel_size=(self.kernel_size, self.kernel_size), + use_bias=True)(cls_label_feature) + cls_label_feature = nn.BatchNorm(use_running_average=not train)( + cls_label_feature) + cls_label_feature = nn.leaky_relu(cls_label_feature, negative_slope=0.2) + cls_label_feature = jnp.repeat( + cls_label_feature, repeats=num_points, axis=1) + global_features = jnp.concatenate([global_features, cls_label_feature], + axis=-1) + + # LBR Block 1 + output = nn.Conv(4 * self.feature_dim, + kernel_size=(self.kernel_size, self.kernel_size), + use_bias=True)(global_features) + output = nn.BatchNorm(use_running_average=not train)(output) + output = nn.leaky_relu(output, negative_slope=0.2) + output = nn.Dropout( + rate=self.dropout_rate, deterministic=not train)(output) + # LBR Block 2 w/o dropout + output = nn.Conv(2 * self.feature_dim, + kernel_size=(self.kernel_size, self.kernel_size), + use_bias=True)(output) + output = nn.BatchNorm(use_running_average=not train)(output) + output = nn.leaky_relu(output, negative_slope=0.2) + # Classification head + output = nn.Dense(self.num_class, use_bias=True)(output) + return output + + +class PointCloudTransformerSegmentationModel(SegmentationModel): + """Implemets the PCT model for part segmentation.""" + + def build_flax_model(self) -> nn.Module: + return PointCloudTransformerSegmentation( + in_dim=self.config.in_dim, + feature_dim=self.config.feature_dim, + kernel_size=self.config.kernel_size, + num_class=self.config.dataset_configs.num_classes, + dropout_rate=self.config.dropout_rate, + attention_fn_configs=self.config.attention_fn_configs, + use_attention_masking=self.config.use_attention_masking, + use_knn_mask=self.config.attention_masking_configs.use_knn_mask, + nearest_neighbour_count=self.config.attention_masking_configs + .nearest_neighbour_count, + mask_function=self.config.attention_masking_configs.mask_function + ) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return _get_default_configs_for_testing() + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + batch)``` + """ + del split # For all splits, we return the same metric functions. + return functools.partial( + semantic_segmentation_metrics_function, + target_is_onehot=self.dataset_meta_data.get('target_is_onehot', False), + metrics=_POINTCLOUD_SEGMENTATION_METRICS) + + +def _get_default_configs_for_testing() -> ml_collections.ConfigDict: + return ml_collections.ConfigDict( + dict( + in_dim=3, + feature_dim=128, + kernel_size=1, + sequence_length=2048, + )) diff --git a/scenic/projects/pointcloud/segmentation_trainer.py b/scenic/projects/pointcloud/segmentation_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..771d04544dbec38227fa3885bb3cd35127c8115f --- /dev/null +++ b/scenic/projects/pointcloud/segmentation_trainer.py @@ -0,0 +1,523 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training script for semantic segmentation tasks.""" + +import functools +from typing import Any, Callable, Dict, Optional, Tuple, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils +from scenic.projects.vivit import evaluation_lib +from scenic.train_lib_deprecated import lr_schedules +from scenic.train_lib_deprecated import optimizers +from scenic.train_lib_deprecated import train_utils + + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + learning_rate_fn: Callable[[int], float], + loss_fn: LossFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], float, + jnp.ndarray]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, and optimizer. The buffer of this argument can be + donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + learning_rate_fn: learning rate scheduler which give the global_step + generates the learning rate. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, computed metrics, learning rate, and predictions + for logging. + """ + new_rng, rng = jax.random.split(train_state.rng) + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + class_label = batch.get('class_label', None) + variables = {'params': params, **train_state.model_state} + logits, new_model_state = flax_model.apply( + variables, + batch['inputs'], + class_label, + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params']) + return loss, (new_model_state, logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + step = train_state.global_step + lr = learning_rate_fn(step) + (train_cost, + (new_model_state, + logits)), grad = compute_gradient_fn(train_state.optimizer.target) + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm', None) is not None: + grad = clip_grads(grad, config.max_grad_norm) + + new_optimizer = train_state.optimizer.apply_gradient(grad, learning_rate=lr) + + # Explicit weight decay, if necessary. + if config.get('explicit_weight_decay', None) is not None: + new_optimizer = new_optimizer.replace( + target=optimizers.tree_map_with_names( + functools.partial( + optimizers.decay_weight_fn, + lr=lr, + decay=config.explicit_weight_decay), + new_optimizer.target, + match_name_fn=lambda name: 'kernel' in name)) + + metrics = metrics_fn(logits, batch) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=step + 1, + optimizer=new_optimizer, + model_state=new_model_state, + rng=new_rng) + return new_train_state, metrics, lr, jnp.argmax(logits, axis=-1) + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + debug: Optional[bool] = False +) -> Tuple[Batch, jnp.ndarray, Dict[str, Tuple[float, int]], jnp.ndarray]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Batch, predictions and calculated metrics. + """ + variables = { + 'params': train_state.optimizer.target, + **train_state.model_state + } + class_label = batch.get('class_label', None) + logits = flax_model.apply( + variables, + batch['inputs'], + class_label, + train=False, + mutable=False, + debug=debug) + metrics = metrics_fn(logits, batch) + + confusion_matrix = get_confusion_matrix( + labels=batch['label'], logits=logits, batch_mask=batch['batch_mask']) + + # Collect predictions and batches from all hosts. + predictions = jnp.argmax(logits, axis=-1) + predictions = jax.lax.all_gather(predictions, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + confusion_matrix = jax.lax.all_gather(confusion_matrix, 'batch') + + return batch, predictions, metrics, confusion_matrix + + +def get_confusion_matrix(*, labels, logits, batch_mask): + """Computes the confusion matrix that is necessary for global mIoU.""" + if labels.ndim == logits.ndim: # One-hot targets. + y_true = jnp.argmax(labels, axis=-1) + else: + y_true = labels + # Set excluded pixels (label -1) to zero, because the confusion matrix + # computation cannot deal with negative labels. They will be ignored due to + # the batch_mask anyway: + y_true = jnp.maximum(y_true, 0) + y_pred = jnp.argmax(logits, axis=-1) + + # Prepare sample weights for confusion matrix: + weights = batch_mask.astype(jnp.float32) + # Normalize weights by number of samples to avoid having very large numbers in + # the confusion matrix, which could lead to imprecise results (note that we + # should not normalize by sum(weights) because that might differ between + # devices/hosts): + weights = weights / weights.size + + confusion_matrix = model_utils.confusion_matrix( + y_true=y_true, + y_pred=y_pred, + num_classes=logits.shape[-1], + weights=weights) + confusion_matrix = confusion_matrix[jnp.newaxis, ...] # Dummy batch dim. + return confusion_matrix + + +def calculate_iou(predictions, labels, n_classes): + """Calculates mean IoU of the entire test set.""" + all_intersection = np.zeros(n_classes) + all_union = np.zeros(n_classes) + for sem_idx in range(labels.shape[0]): + for sem in range(n_classes): + intersection = np.sum( + np.logical_and(predictions[sem_idx] == sem, labels[sem_idx] == sem)) + union = jnp.sum( + np.logical_or(predictions[sem_idx] == sem, labels[sem_idx] == sem)) + all_intersection[sem] += intersection + all_union[sem] += union + return np.mean(all_intersection / all_union) + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_state that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + if dataset.meta_data.get('label_shape', None) is not None: + input_specs = [(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32)), + (dataset.meta_data['label_shape'], + dataset.meta_data.get('label_dtype', jnp.int64))] + else: + input_specs = [(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))] + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=input_specs, + config=config, + rngs=init_rng) + + # Create optimizer. + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + optimizer = jax.jit( + optimizers.get_optimizer(config).create, backend='cpu')( + params) + rng, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + optimizer=optimizer, + model_state=model_state, + rng=train_rng, + accum_train_time=0) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + # Get learning rate scheduler. + learning_rate_fn = lr_schedules.get_learning_rate_fn(config) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + learning_rate_fn=learning_rate_fn, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + + ############### EVALUATION CODE ################# + + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + def evaluate(train_state: train_utils.TrainState, + step: int) -> Dict[str, Any]: + eval_metrics = [] + eval_all_confusion_mats = [] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + + # n_classes = dataset.meta_data['num_classes'] + + def to_cpu(x): + return jax.device_get(dataset_utils.unshard(jax_utils.unreplicate(x))) + + for _ in range(steps_per_eval): + eval_batch = next(dataset.valid_iter) + _, _, e_metrics, confusion_matrix = eval_step_pmapped( + train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + # Evaluate global metrics on one of the hosts (lead_host), but given + # intermediate values collected from all hosts. + if lead_host and global_metrics_fn is not None: + # Collect data to be sent for computing global metrics. + eval_all_confusion_mats.append(to_cpu(confusion_matrix)) + + eval_global_metrics_summary = {} + if lead_host and global_metrics_fn is not None: + # eval_global_metrics_summary = global_metrics_fn(eval_all_confusion_mats, + # dataset.meta_data) + eval_global_metrics_summary = evaluation_lib.compute_confusion_matrix_metrics( + eval_all_confusion_mats, return_per_class_metrics=True) + + ############### LOG EVAL SUMMARY ############### + eval_summary = train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + extra_eval_summary=eval_global_metrics_summary, + writer=writer) + + test_summary = None + if dataset.meta_data.get('num_test_examples', None) is not None: + test_metrics = [] + test_all_confusion_mats = [] + + total_test_steps = int( + np.ceil(dataset.meta_data['num_test_examples'] / eval_batch_size)) + + for _ in range(total_test_steps): + test_batch = next(dataset.test_iter) + _, _, e_metrics, confusion_matrix = eval_step_pmapped( + train_state, test_batch) + test_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + # Evaluate global metrics on one of the hosts (lead_host), but given + # intermediate values collected from all hosts. + if lead_host and global_metrics_fn is not None: + # Collect data to be sent for computing global metrics. + test_all_confusion_mats.append(to_cpu(confusion_matrix)) + + test_global_metrics_summary = {} + if lead_host and global_metrics_fn is not None: + test_global_metrics_summary = evaluation_lib.compute_confusion_matrix_metrics( + test_all_confusion_mats, return_per_class_metrics=True) + + ############### LOG TEST SUMMARY ############### + test_summary = train_utils.log_eval_summary( + step=step, + eval_metrics=test_metrics, + extra_eval_summary=test_global_metrics_summary, + writer=writer, + prefix='test') + + writer.flush() + del test_summary + del eval_metrics + return eval_summary + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + global_metrics_fn = model.get_global_metrics_fn() # pytype: disable=attribute-error + + chrono = train_utils.Chrono( + first_step=start_step, + total_steps=total_steps, + steps_per_epoch=steps_per_epoch, + global_bs=config.batch_size, + accum_train_time=int(jax_utils.unreplicate(train_state.accum_train_time))) + + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', sfLtep_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, lr, _ = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + extra_training_logs.append({'learning_rate': lr}) + + for h in hooks: + h(step) + chrono.pause() # Below are once-in-a-while ops -> pause. + if step % log_summary_steps == 0 or (step == total_steps): + ############### LOG TRAIN SUMMARY ############### + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, extra_training_logs), + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + + if (step % log_eval_steps == 0) or (step == total_steps): + with report_progress.timed('eval'): + # Sync model state across replicas (in case of having model state, e.g. + # batch statistic when using batch norm). + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summary = evaluate(train_state, step) + + if ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)) and config.checkpoint: + ################### CHECK POINTING ########################## + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + train_state.replace( # pytype: disable=attribute-error + accum_train_time=chrono.accum_train_time) + train_utils.save_checkpoint(workdir, train_state) + + chrono.resume() # Un-pause now. + + # Wait until computations are done before exiting. + jax.random.normal(jax.random.PRNGKey(0), ()).block_until_ready() + # Return the train and eval summary after last step for regresesion testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/pointcloud/shapenet_dataset.py b/scenic/projects/pointcloud/shapenet_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..4a7aaeda4cce6b412cb381ecece631acbacceb1d --- /dev/null +++ b/scenic/projects/pointcloud/shapenet_dataset.py @@ -0,0 +1,279 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for ShapeNet dataset.""" + +import collections +import dataclasses +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax.numpy as jnp +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf + +# IOU Utilities +class_choices = [ + 'airplane', 'bag', 'cap', 'car', 'chair', 'earphone', 'guitar', 'knife', + 'lamp', 'laptop', 'motorbike', 'mug', 'pistol', 'rocket', 'skateboard', + 'table' +] +seg_num = [4, 2, 2, 4, 4, 3, 3, 2, 4, 2, 6, 2, 3, 3, 3, 3] +index_start = [0, 4, 6, 8, 12, 16, 19, 22, 24, 28, 30, 36, 38, 41, 44, 47] + + +@dataclasses.dataclass +class ShapeNetDatasetConfig: + """Dataset config.""" + dataset_path: str = '' + num_train_pointclouds: int = 12137 + num_validation_pointclouds: int = 1870 + num_test_pointclouds: int = 2874 + seq_length: int = 2048 + dataset_name: str = 'shapenet' + version: str = '1.0.0' + num_classes: int = 50 + num_category_classes: int = 16 + + +def get_dataset_config(): + """Returns dataset config.""" + return ShapeNetDatasetConfig() + + +def get_class_proportions(dataset, num_class): + """Computes class proportions in case of label imbalance.""" + labels = [] + for entry in iter(dataset): + labels.extend(tf.squeeze(entry['label']).numpy()) + freq = collections.Counter(labels) + proportions = [freq[i] for i in range(num_class)] + proportions = np.maximum(proportions / np.sum(proportions), 1e-8) + return proportions + + +def shapenet_load_split(batch_size, + dataset_config, + split='train', + dtype=tf.float32, + prefetch_buffer_size=10, + shuffle_seed=None): + """Creates a split from the ShapeNet dataset using TensorFlow Datasets. + + For the training set, we drop the last partial batch. This is fine to do + because we additionally shuffle the data randomly each epoch, thus the trainer + will see all data in expectation. For the validation set, we pad the final + batch to the desired batch size. + + Args: + batch_size: int; The batch size returned by the data pipeline. + dataset_config: dataset configuration. + split: str; Whether to load the train or evaluation split. + dtype: TF data type; Data type of the image. + prefetch_buffer_size: int; Buffer size for the TFDS prefetch. + shuffle_seed: The seed to use when shuffling the train split. + + Returns: + A `tf.data.Dataset`. + """ + + is_train = (split == 'train') + + def random_noise(pointcloud, std=0.02): + assert len(pointcloud.shape) == 2 + noise = tf.random.normal(tf.shape(pointcloud), mean=0, stddev=std/2) + noisy_pointcloud = pointcloud + tf.clip_by_value( + noise, clip_value_min=-std, clip_value_max=std) + return noisy_pointcloud + + def decode_example(example): + pointcloud = tf.cast(example['pc'], dtype=dtype) + label = tf.squeeze(example['label']) + + if is_train: + pointcloud = random_noise(pointcloud) + + # shuffle points + indices = tf.range(start=0, limit=tf.shape(pointcloud)[0], dtype=tf.int32) + shuffled_indices = tf.random.shuffle(indices) + pointcloud = tf.gather(pointcloud, shuffled_indices) + label = tf.gather(label, shuffled_indices) + + class_label = tf.one_hot(example['class_label'], + dataset_config.num_category_classes) + return { + 'inputs': pointcloud, + 'label': label, + 'class_label': class_label, + 'confusion_matrix_mask': example['confusion_matrix_mask'] + } + + ds = dataset_utils.get_dataset_tfds( + dataset_config.dataset_name, + split, + data_dir=dataset_config.dataset_path, + skip_decode=('pc',)) + + class_proportions = get_class_proportions(ds, dataset_config.num_classes) + + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + ds = ds.with_options(options) + + ds = ds.cache() + + if is_train: + ds = ds.repeat() + ds = ds.shuffle(16 * batch_size, seed=shuffle_seed) + + # decode_example should be applied after caching as it also does augmentation + ds = ds.map(decode_example, num_parallel_calls=tf.data.experimental.AUTOTUNE) + ds = ds.batch(batch_size, drop_remainder=is_train) + + if not is_train: + ds = ds.repeat() + + ds = ds.prefetch(prefetch_buffer_size) + return ds, class_proportions + + +@datasets.add_dataset('shapenet') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address: Optional[str] = None, + seq_length=2048): + """Returns generators for the ShapeNet train, validation, and test sets. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + prefetch_buffer_size: int; Buffer size for the device prefetch. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + seq_length: maximum sequence length. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + shapenet_config = get_dataset_config() + dataset_configs = dataset_configs or {} + del rng + data_augmentations = dataset_configs.get('data_augmentations', ['default']) + # TODO(dehghani): add mixup data augmentation. + for da in data_augmentations: + if da not in ['default']: + raise ValueError(f'Data augmentation {data_augmentations} is not ' + f'(yet) supported in the ShapeNet dataset.') + dtype = getattr(tf, dtype_str) + onehot_labels = False # dataset_configs.get('onehot_labels', False) + + logging.info('Loading train split of the ShapeNet dataset.') + train_ds, _ = shapenet_load_split( + batch_size, + shapenet_config, + split='train', + dtype=dtype, + shuffle_seed=shuffle_seed) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + logging.info('Loading validation split of the ShapeNet dataset.') + val_ds, _ = shapenet_load_split( + eval_batch_size, + shapenet_config, + split='validation', + dtype=dtype) + + logging.info('Loading test split of the ShapeNet dataset.') + test_ds, _ = shapenet_load_split( + eval_batch_size, + shapenet_config, + split='test', + dtype=dtype) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, + train=True, + batch_size=batch_size, + pixel_level=True) + maybe_pad_batches_val = functools.partial( + dataset_utils.maybe_pad_batch, + train=False, + batch_size=eval_batch_size, + pixel_level=True) + maybe_pad_batches_test = functools.partial( + dataset_utils.maybe_pad_batch, + train=False, + batch_size=eval_batch_size, + pixel_level=True) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + train_iter = jax_utils.prefetch_to_device(train_iter, prefetch_buffer_size) + + val_iter = iter(val_ds) + val_iter = map(dataset_utils.tf_to_numpy, val_iter) + val_iter = map(maybe_pad_batches_val, val_iter) + val_iter = map(shard_batches, val_iter) + val_iter = jax_utils.prefetch_to_device(val_iter, prefetch_buffer_size) + + test_iter = iter(test_ds) + test_iter = map(dataset_utils.tf_to_numpy, test_iter) + test_iter = map(maybe_pad_batches_test, test_iter) + test_iter = map(shard_batches, test_iter) + test_iter = jax_utils.prefetch_to_device(test_iter, prefetch_buffer_size) + + input_shape = (-1, seq_length, 3) + label_shape = (-1, shapenet_config.num_category_classes) + + meta_data = { + 'num_classes': shapenet_config.num_classes, + 'input_shape': input_shape, + 'label_shape': label_shape, + 'num_train_examples': shapenet_config.num_train_pointclouds, + 'num_eval_examples': shapenet_config.num_validation_pointclouds, + 'num_test_examples': shapenet_config.num_test_pointclouds, + 'input_dtype': getattr(jnp, dtype_str), + 'label_dtype': getattr(jnp, 'int64'), + 'target_is_onehot': onehot_labels, + } + return dataset_utils.Dataset(train_iter, val_iter, test_iter, meta_data) + diff --git a/scenic/projects/polyvit/README.md b/scenic/projects/polyvit/README.md new file mode 100644 index 0000000000000000000000000000000000000000..236acf100708e6dfcfee250c49ec3357ae7b4df4 --- /dev/null +++ b/scenic/projects/polyvit/README.md @@ -0,0 +1,55 @@ +PolyViT: Co-training Vision Transformers on Images, Videos and Audio +== +![PolyViT: Co-training Vision Transformers on Images, Videos and Audio](data/polyvit.png) + +PolyViT is a transformer model that has been trained on multiple tasks and +modalities, including images, audio, and video. This approach allows PolyViT +to achieve improved accuracy on five video and audio classification datasets, +while using fewer parameters than other models. In particular, when trained on +9 datasets across three modalities, PolyViT uses 8.3 times fewer parameters than +a state-of-the-art single-task model, while outperforming it on two datasets +and achieving competitive performance on the others. A key advantage of PolyViT +is its simplicity and the fact that it requires minimal hyperparameter tuning +, as the per-task hyperparameters can be easily reused. +Details can be found in the [paper](https://arxiv.org/abs/2111.12993). + +## Getting Started +The following command will install the required packages for ViViT: +```shell +$ pip install -r scenic/projects/polyvit/requirements.txt +``` + +PolyViT uses a pretrained ViT on images which can be downloaded or trained using +[Scenic](https://github.com/google-research/scenic/tree/main/scenic/projects/baselines) +or the [original implementation](https://github.com/google-research/vision_transformer). + +PolyViT uses the approaches from [MBT](https://github.com/google-research/scenic/tree/main/scenic/projects/mbt) +and [ViViT](https://github.com/google-research/scenic/tree/main/scenic/projects/vivit) +for processing and training on audio and video, so please take look at them for +more information on data pipeline. + +The following command trains a PolyViT-B/16: +```shell +$ python -m scenic.projects.polyvit.main \ + --config=scenic/projects/polyvit/configs/polyvit_all.py \ + --workdir=polyvit_all/ +``` + +## Checkpoints + +Will be released soon. + +## Reference + +If you use PolyViT, please use the following BibTeX entry. + +``` +@article{likhosherstov2022polyvit, + title={Polyvit: Co-training vision transformers on images, videos and audio}, + author={Likhosherstov, Valerii and Arnab, Anurag and Choromanski, + Krzysztof and Lucic, Mario and Tay, Yi and Weller, Adrian + and Dehghani, Mostafa}, + journal={Transactions on Machine Learning Research}, + year={2022} +} +``` diff --git a/scenic/projects/polyvit/__init__.py b/scenic/projects/polyvit/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/polyvit/configs/__init__.py b/scenic/projects/polyvit/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/polyvit/configs/polyvit_all.py b/scenic/projects/polyvit/configs/polyvit_all.py new file mode 100644 index 0000000000000000000000000000000000000000..9e68e56fe2d63f4a0ba8011a2900dab7786711d5 --- /dev/null +++ b/scenic/projects/polyvit/configs/polyvit_all.py @@ -0,0 +1,680 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for PolyVit. + +""" + +import ml_collections + +IMAGE_TASKS = ['imagenet', 'cifar10', 'cifar100', 'oxford_iiit_pet', 'resisc45'] +VIDEO_TASKS = ['kinetics400', 'moments_in_time'] +AUDIO_TASKS = ['vggsound', 'audioset'] + + +# The size of the these datasets changes as videos are removed from YouTube. +# Set this appropriately. +KINETICS_400_TRAIN_SIZE = 214834 +KINETICS_400_VAL_SIZE = 17637 +KINETICS_400_TEST_SIZE = 34579 +MIT_TRAIN_SIZE = 791297 +AUDIOSET_TRAIN_SIZE = 20361 +VGGSOUND_TRAIN_SIZE = 172427 + + +def imagenet(config, + hres, + lres, + lr, + crop='random_crop', + steps=20_000, + warmup=500, + mixup=None): + """Vision task with val and test splits.""" + del warmup + common = '|value_range(-1, 1)' + common += '|onehot(1000, key="{lbl}", key_result="labels")' + common += '|keep("image", "labels")' + if crop == 'random_crop': + pp_train = f'decode|resize({hres})|random_crop({lres})|flip_lr' + elif crop == 'inception_crop': + pp_train = f'decode_jpeg_and_inception_crop({lres})|flip_lr' + else: + raise ValueError(f'{crop} not in (random_crop, inception_crop).') + pp_train += common.format(lbl='label') + pp_val = f'decode|resize({lres})' + common.format(lbl='label') + pp_real = f'decode|resize({lres})' + common.format(lbl='real_label') + pp_val_resize_crop = f'decode|resize({hres})|central_crop({lres})' + common.format( + lbl='label') + pp_real_resize_crop = f'decode|resize({hres})|central_crop({lres})' + common.format( + lbl='real_label') + pp_val_resmall_crop = f'decode|resize_small({hres})|central_crop({lres})' + common.format( + lbl='label') + pp_real_resmall_crop = f'decode|resize_small({hres})|central_crop({lres})' + common.format( + lbl='real_label') + + config.datasets.bit_imagenet2012 = ml_collections.ConfigDict() + config.datasets.bit_imagenet2012.dataset = 'imagenet2012' + config.datasets.bit_imagenet2012.dataset_dir = None + config.datasets.bit_imagenet2012.task = 'multilabel' + config.datasets.bit_imagenet2012.data_dtype_str = 'float32' + config.datasets.bit_imagenet2012.train_split = 'train[:99%]' + config.datasets.bit_imagenet2012.val_split = [ + ('val', 'imagenet2012', 'train[99%:]', pp_val), + ('test', 'imagenet2012', 'validation', pp_val), + ('v2', 'imagenet_v2', 'test', pp_val), + ('real', 'imagenet2012_real', 'validation', pp_real), + ('y/val_resize', 'imagenet2012', 'train[99%:]', pp_val), + ('y/test_resize', 'imagenet2012', 'validation', pp_val), + ('y/v2_resize', 'imagenet_v2', 'test', pp_val), + ('y/real_resize', 'imagenet2012_real', 'validation', pp_real), + ('y/val_resize_crop', 'imagenet2012', 'train[99%:]', pp_val_resize_crop), + ('y/test_resize_crop', 'imagenet2012', 'validation', pp_val_resize_crop), + ('y/v2_resize_crop', 'imagenet_v2', 'test', pp_val_resize_crop), + ('y/real_resize_crop', 'imagenet2012_real', 'validation', + pp_real_resize_crop), + ('y/val_resmall_crop', 'imagenet2012', 'train[99%:]', + pp_val_resmall_crop), + ('y/test_resmall_crop', 'imagenet2012', 'validation', + pp_val_resmall_crop), + ('y/v2_resmall_crop', 'imagenet_v2', 'test', pp_val_resmall_crop), + ('y/real_resmall_crop', 'imagenet2012_real', 'validation', + pp_real_resmall_crop), + ] + config.datasets.bit_imagenet2012.num_classes = 1000 + config.datasets.bit_imagenet2012.pp_train = pp_train + config.datasets.bit_imagenet2012.pp_eval = '' + config.datasets.bit_imagenet2012.prefetch_to_device = 2 + config.datasets.bit_imagenet2012.shuffle_buffer_size = 50_000 + + config.model.heads.label.bit_imagenet2012 = ml_collections.ConfigDict() + config.model.heads.label.bit_imagenet2012.hid_sizes = () + config.model.heads.label.bit_imagenet2012.classifier = 'token' + + config.lr_coefs.bit_imagenet2012 = lr + config.batch_sampling_strategy_steps.bit_imagenet2012 = steps + + if mixup is not None: + config.mixup.p = mixup + + +def task(config, + dataset_id, + name, + train, + val, + lr, + n_cls, + hres, + lres, + crop, + steps, + warmup, + test='test', + base_pp=''): + """Vision task with val and test splits.""" + del warmup + common = '|value_range(-1, 1)' + common += f'|onehot({n_cls}, key="label", key_result="labels")' + common += '|keep("image", "labels")' + if crop == 'random_crop': + pp_train = f'decode|{base_pp}resize({hres})|random_crop({lres})|flip_lr' + elif crop == 'inception_crop': + pp_train = f'decode|{base_pp}inception_crop({lres})|flip_lr' + elif not crop: + pp_train = f'decode|{base_pp}resize({lres})|flip_lr' + else: + raise ValueError(f'{crop} not in ("random_crop", "inception_crop", "").') + pp_train += common + pp_eval = f'decode|{base_pp}resize({lres})' + common + pp_eval_resize_crop = f'decode|{base_pp}resize({hres})|central_crop({lres})' + common + pp_eval_resmall_crop = f'decode|{base_pp}resize_small({hres})|central_crop({lres})' + common + + config.datasets[dataset_id] = ml_collections.ConfigDict() + config.datasets[dataset_id].dataset = name + config.datasets[dataset_id].dataset_dir = None + config.datasets[dataset_id].task = 'multilabel' + config.datasets[dataset_id].data_dtype_str = 'float32' + config.datasets[dataset_id].train_split = train + config.datasets[dataset_id].val_split = [ + ('val', name, val, pp_eval), + ('y/val_resize', name, val, pp_eval), + ('y/val_resize_crop', name, val, pp_eval_resize_crop), + ('y/val_resmall_crop', name, val, pp_eval_resmall_crop), + ('test', name, test, pp_eval), + ('y/test_resize', name, test, pp_eval), + ('y/test_resize_crop', name, test, pp_eval_resize_crop), + ('y/test_resmall_crop', name, test, pp_eval_resmall_crop), + ] + config.datasets[dataset_id].num_classes = n_cls + config.datasets[dataset_id].pp_train = pp_train + config.datasets[dataset_id].pp_eval = '' + config.datasets[dataset_id].prefetch_to_device = 2 + config.datasets[dataset_id].shuffle_buffer_size = 50_000 + + config.model.heads.label[dataset_id] = ml_collections.ConfigDict() + config.model.heads.label[dataset_id].hid_sizes = () + config.model.heads.label[dataset_id].classifier = 'token' + + config.lr_coefs[dataset_id] = lr + config.batch_sampling_strategy_steps[dataset_id] = steps + + +def get_config(): + """Returns the ViT experiment configuration for JFT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'vtab-polyvit' + + config.datasets = ml_collections.ConfigDict() + config.model = ml_collections.ConfigDict() + config.model.heads = ml_collections.ConfigDict() + config.model.heads.label = ml_collections.ConfigDict() + config.lr_coefs = ml_collections.ConfigDict() + config.batch_sampling_strategy_steps = ml_collections.ConfigDict() + + if 'imagenet' in IMAGE_TASKS: + imagenet( + config, + hres=448, + lres=384, + lr=0.03, + crop='inception_crop', + steps=20_000, + warmup=500) + if 'cifar100' in IMAGE_TASKS: + task( + config, + 'bit_cifar100', + 'cifar100', + 'train[:98%]', + 'train[98%:]', + lr=0.03, + n_cls=100, + hres=448, + lres=384, + steps=10_000, + warmup=500, + crop='inception_crop') + if 'cifar10' in IMAGE_TASKS: + task( + config, + 'bit_cifar10', + 'cifar10', + 'train[:98%]', + 'train[98%:]', + lr=0.03, + n_cls=10, + hres=448, + lres=384, + steps=10_000, + warmup=500, + crop='inception_crop') + if 'oxford_iiit_pet' in IMAGE_TASKS: + task( + config, + 'bit_oxford_iiit_pet', + 'oxford_iiit_pet', + 'train[:90%]', + 'train[90%:]', + lr=0.03, + n_cls=37, + hres=448, + lres=384, + steps=500, + warmup=100, + crop='inception_crop') + if 'resisc45' in IMAGE_TASKS: + task( + config, + 'bit_resisc45', + 'resisc45', + 'train[:60%]', + 'train[60%:80%]', + lr=0.1, + n_cls=45, + hres=448, + lres=384, + steps=2500, + warmup=200, + crop='inception_crop', + test='train[80%:]', + ) + if 'kinetics400' in VIDEO_TASKS: + config.datasets.kinetics400 = ml_collections.ConfigDict() + config.datasets.kinetics400.task = 'label' + config.datasets.kinetics400.modality = 'video' + config.datasets.kinetics400.data_dtype_str = 'float32' + # This is going to sample 32 frames, sampled at a stride of 2 from video. + # kinetics400 videos has 250 frames. + # And then it will uniformly take n_sampled_frames from there. + # Maybe think more about this. + # 32 stride 2 is the default of SlowFast. + config.datasets.kinetics400.num_frames = 32 + config.datasets.kinetics400.stride = 2 + config.datasets.kinetics400.min_resize = 256 + config.datasets.kinetics400.crop_size = 224 + config.datasets.kinetics400.one_hot_labels = True + config.datasets.kinetics400.zero_centering = True + # Multicrop eval settings + config.datasets.kinetics400.do_multicrop_test = True # Do during training. + config.datasets.kinetics400.log_test_epochs = 5 + # The effective batch size per host when testing is num_test_clips * test_batch_size # pylint: disable=line-too-long + config.datasets.kinetics400.num_test_clips = 8 + config.datasets.kinetics400.test_batch_size = 8 # Needs to be num_local_devices + config.multicrop_clips_per_device = 2 + # Leaving this empty means that a full test is done each time. + # About 4200 / 4 = 1050 steps on a 4-host setting (ie 4x4 TPU) + # config.steps_per_test = 1000 # Number of test steps taken by each host. + config.datasets.kinetics400.augmentation_params = ml_collections.ConfigDict( + ) + config.datasets.kinetics400.augmentation_params.do_jitter_scale = True + config.datasets.kinetics400.augmentation_params.scale_min_factor = 0.9 + config.datasets.kinetics400.augmentation_params.scale_max_factor = 1.33 + config.datasets.kinetics400.augmentation_params.prob_scale_jitter = 1.0 + config.datasets.kinetics400.augmentation_params.do_color_augment = True + config.datasets.kinetics400.augmentation_params.prob_color_augment = 0.8 + config.datasets.kinetics400.augmentation_params.prob_color_drop = 0.1 + config.datasets.kinetics400.prefetch_to_device = 2 + config.datasets.kinetics400.base_dir = ( + '/path/to/dataset') + config.datasets.kinetics400.tables = { + 'train': 'train.tfrecord@1024', + 'validation': 'validation.tfrecord@1024', + 'test': 'test.tfrecord@1024' + } + config.datasets.kinetics400.examples_per_subset = { + 'train': KINETICS_400_TRAIN_SIZE, + 'validation': KINETICS_400_VAL_SIZE, + 'test': KINETICS_400_TEST_SIZE + } + config.datasets.kinetics400.num_classes = 400 + + if 'moments_in_time' in VIDEO_TASKS: + config.datasets.moments_in_time = ml_collections.ConfigDict() + config.datasets.moments_in_time.task = 'label' + config.datasets.moments_in_time.modality = 'video' + config.datasets.moments_in_time.data_dtype_str = 'float32' + # This is going to sample 32 frames, sampled at a stride of 1 from video. + # And then it will uniformly take n_sampled_frames from there. + config.datasets.moments_in_time.num_frames = 32 + config.datasets.moments_in_time.stride = 2 + config.datasets.moments_in_time.min_resize = 256 + config.datasets.moments_in_time.crop_size = 224 + config.datasets.moments_in_time.one_hot_labels = True + config.datasets.moments_in_time.zero_centering = True + # Multicrop eval settings + config.datasets.moments_in_time.do_multicrop_test = True + config.datasets.moments_in_time.log_test_epochs = 2 + # The effective batch size per host when testing is num_test_clips * test_batch_size # pylint: disable=line-too-long + config.datasets.moments_in_time.num_test_clips = 8 + config.datasets.moments_in_time.test_batch_size = 8 # Needs to be num_local_devices + # Leaving this empty means that a full test is done each time. + # config.steps_per_test = 1000 # Number of test steps taken by each host. + config.datasets.moments_in_time.augmentation_params = ml_collections.ConfigDict( + ) + config.datasets.moments_in_time.augmentation_params.do_jitter_scale = True + config.datasets.moments_in_time.augmentation_params.scale_min_factor = 0.9 + config.datasets.moments_in_time.augmentation_params.scale_max_factor = 1.33 + config.datasets.moments_in_time.augmentation_params.prob_scale_jitter = 1.0 + config.datasets.moments_in_time.augmentation_params.do_color_augment = True + config.datasets.moments_in_time.augmentation_params.prob_color_augment = 0.8 + config.datasets.moments_in_time.augmentation_params.prob_color_drop = 0.1 + config.datasets.moments_in_time.augmentation_params.do_mixup = False + config.datasets.moments_in_time.augmentation_params.mixup_alpha = 0.0 + config.datasets.moments_in_time.prefetch_to_device = 2 + config.datasets.moments_in_time.base_dir = ( + '/path/to/dataset') + config.datasets.moments_in_time.tables = { + 'train': 'train.tfrecord@1024', + 'validation': 'validation.tfrecord@1024', + 'test': 'test.tfrecord@1024' + } + config.datasets.moments_in_time.examples_per_subset = { + 'train': MIT_TRAIN_SIZE, + 'validation': 33900, + 'test': 33900 + } + config.datasets.moments_in_time.num_classes = 339 + + if 'audioset' in AUDIO_TASKS: + config.datasets.balanced_audioset = ml_collections.ConfigDict() + audioset_config = config.datasets.balanced_audioset + audioset_config.task = 'multilabel' + audioset_config.modality = 'audio' + audioset_config.data_dtype_str = 'float32' + # List of modalities to load, supports `rgb`, `spectrogram` and `waveform`. + # Note that it only specifies which modalities to load, not which to use, + # which is controlled by config.model.modality_fusion + audioset_config.modalities = ('spectrogram',) + audioset_config.return_as_dict = True + # This is going to sample 32 frames, sampled at a stride of 2 from video. + # AudioSet videos has 250 frames. + # 32 stride 2 is also the default of SlowFast. + audioset_config.num_frames = 32 + audioset_config.stride = 2 + audioset_config.num_spec_frames = 8 + audioset_config.spec_stride = 1 + audioset_config.min_resize = 256 + audioset_config.crop_size = 224 + audioset_config.spec_shape = (100, 128) + # 16000 samples per second. + audioset_config.num_waveform_samples = 32256 # 6 * 7 * 768 + audioset_config.waveform_stride = 1 + audioset_config.one_hot_labels = True + audioset_config.zero_centering = True + # Class prior settings. + audioset_config.class_weight_power = 0.3 + # Multicrop eval settings + audioset_config.do_multicrop_test = True # Do during training. + audioset_config.log_test_epochs = 4 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size + audioset_config.num_test_clips = 4 + audioset_config.test_batch_size = 8 # Needs to be num_local_devices + config.multicrop_clips_per_device = 2 + # Leaving this empty means that a full test is done each time. + # About 4200 / 4 = 1050 steps on a 4-host setting (ie 4x4 TPU) + # config.steps_per_test = 1000 # Number of test steps taken by each host. + audioset_config.augmentation_params = ml_collections.ConfigDict() + audioset_config.augmentation_params.do_jitter_scale = True + audioset_config.augmentation_params.scale_min_factor = 0.9 + audioset_config.augmentation_params.scale_max_factor = 1.33 + audioset_config.augmentation_params.prob_scale_jitter = 1.0 + audioset_config.augmentation_params.do_color_augment = True + audioset_config.augmentation_params.prob_color_augment = 0.8 + audioset_config.augmentation_params.prob_color_drop = 0.1 + audioset_config.prefetch_to_device = 2 + # SpecAugment hyperparameters + audioset_config.spec_augment = True + audioset_config.spec_augment_params = ml_collections.ConfigDict() + audioset_config.spec_augment_params.freq_mask_max_bins = 48 + audioset_config.spec_augment_params.freq_mask_count = 1 + audioset_config.spec_augment_params.time_mask_max_frames = 48 + audioset_config.spec_augment_params.time_mask_count = 4 + audioset_config.spec_augment_params.time_warp_max_frames = 1.0 + audioset_config.spec_augment_params.time_warp_max_ratio = 0 + audioset_config.spec_augment_params.time_mask_max_ratio = 0 + audioset_config.base_dir = ( + '/path/to/dataset') + audioset_config.tables = { + 'train': 'balanced_train.se.melspec.tfrecord.sst@1024', + 'validation': 'eval.se.melspec.tfrecord.sst@1024', + 'test': 'eval.se.melspec.tfrecord.sst@1024', + } + audioset_config.examples_per_subset = { + 'train': 20361, + 'validation': 18589, + 'test': 18589 + } + audioset_config.num_classes = 527 + + if 'vggsound' in AUDIO_TASKS: + config.datasets.vggsound = ml_collections.ConfigDict() + vggsound_config = config.datasets.vggsound + vggsound_config.task = 'label' + vggsound_config.modality = 'audio' + vggsound_config.data_dtype_str = 'float32' + # List of modalities to load, supports `rgb`, `spectrogram` and `waveform`. + # Note that it only specifies which modalities to load, not which to use, + # which is controlled by config.model.modality_fusion + vggsound_config.modalities = ('spectrogram',) + vggsound_config.return_as_dict = True + # This is going to sample 32 frames, sampled at a stride of 2 from video. + # AudioSet videos has 250 frames. + # 32 stride 2 is also the default of SlowFast. + vggsound_config.num_frames = 32 + vggsound_config.stride = 2 + vggsound_config.num_spec_frames = 8 + vggsound_config.spec_stride = 1 + vggsound_config.min_resize = 256 + vggsound_config.crop_size = 224 + vggsound_config.spec_shape = (100, 128) + # 16000 samples per second. + vggsound_config.num_waveform_samples = 32256 # 6 * 7 * 768 + vggsound_config.waveform_stride = 1 + vggsound_config.one_hot_labels = True + vggsound_config.zero_centering = True + # Multicrop eval settings + vggsound_config.do_multicrop_test = True # Do during training. + vggsound_config.log_test_epochs = 0.5 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size + vggsound_config.num_test_clips = 4 + vggsound_config.test_batch_size = 8 # Needs to be num_local_devices + config.multicrop_clips_per_device = 2 + # Leaving this empty means that a full test is done each time. + # About 4200 / 4 = 1050 steps on a 4-host setting (ie 4x4 TPU) + # config.steps_per_test = 1000 # Number of test steps taken by each host. + vggsound_config.augmentation_params = ml_collections.ConfigDict() + vggsound_config.augmentation_params.do_jitter_scale = True + vggsound_config.augmentation_params.scale_min_factor = 0.9 + vggsound_config.augmentation_params.scale_max_factor = 1.33 + vggsound_config.augmentation_params.prob_scale_jitter = 1.0 + vggsound_config.augmentation_params.do_color_augment = True + vggsound_config.augmentation_params.prob_color_augment = 0.8 + vggsound_config.augmentation_params.prob_color_drop = 0.1 + vggsound_config.prefetch_to_device = 2 + # SpecAugment hyperparameters + vggsound_config.spec_augment = True + vggsound_config.spec_augment_params = ml_collections.ConfigDict() + vggsound_config.spec_augment_params.freq_mask_max_bins = 48 + vggsound_config.spec_augment_params.freq_mask_count = 1 + vggsound_config.spec_augment_params.time_mask_max_frames = 48 + vggsound_config.spec_augment_params.time_mask_count = 4 + vggsound_config.spec_augment_params.time_warp_max_frames = 1.0 + vggsound_config.spec_augment_params.time_warp_max_ratio = 0 + vggsound_config.spec_augment_params.time_mask_max_ratio = 0 + vggsound_config.base_dir = ( + '/path/to/dataset') + vggsound_config.tables = { + 'train': 'train.rgb.25fps.wav.mel.spec.labels.sst@1024', + 'validation': 'test.rgb.25fps.wav.mel.spec.labels.sst@1024', + 'test.rgb.25fps.wav.mel.spec.labels.sst@1024', + } + vggsound_config.examples_per_subset = { + 'train': 172427, + 'validation': 14448, + 'test': 14448 + } + vggsound_config.num_classes = 309 + + # Model. + config.model_name = 'polyvit' + config.model.modalities = ml_collections.ConfigDict() + config.model.modalities.num_layers = 0 + config.model.modalities.hidden_size = 768 + config.model.modalities.image = ml_collections.ConfigDict() + config.model.modalities.image.patches = ml_collections.ConfigDict() + config.model.modalities.image.patches.size = [16, 16] + config.model.modalities.audio = ml_collections.ConfigDict() + config.model.modalities.audio.patches = ml_collections.ConfigDict() + config.model.modalities.audio.patches.size = [16, 16] + config.model.modalities.audio.spec_shape = (100, 128) + config.model.modalities.audio.num_spec_frames = 8 + config.model.modalities.video = ml_collections.ConfigDict() + config.model.modalities.video.patches = ml_collections.ConfigDict() + config.model.modalities.video.patches.size = [16, 16, 4] + config.model.modalities.video.kernel_init_method = 'central_frame_initializer' + + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.num_heads = 12 + config.model.encoder.mlp_dim = 3072 + config.model.encoder.num_layers = 12 + config.model.encoder.representation_size = None + config.model.encoder.attention_dropout_rate = 0. + config.model.encoder.dropout_rate = 0. + if 'kinetics400' in VIDEO_TASKS: + config.model.heads.label.kinetics400 = ml_collections.ConfigDict() + config.model.heads.label.kinetics400.hid_sizes = () + config.model.heads.label.kinetics400.output_proj_zero_init = True + config.model.heads.label.kinetics400.classifier = 'token' + if 'moments_in_time' in VIDEO_TASKS: + config.model.heads.label.moments_in_time = ml_collections.ConfigDict() + config.model.heads.label.moments_in_time.hid_sizes = () + config.model.heads.label.moments_in_time.output_proj_zero_init = True + config.model.heads.label.moments_in_time.classifier = 'token' + if 'vggsound' in AUDIO_TASKS: + config.model.heads.label.vggsound = ml_collections.ConfigDict() + config.model.heads.label.vggsound.hid_sizes = () + config.model.heads.label.vggsound.output_proj_zero_init = True + config.model.heads.label.vggsound.classifier = 'token' + if 'audioset' in AUDIO_TASKS: + config.model.heads.label.balanced_audioset = ml_collections.ConfigDict() + config.model.heads.label.balanced_audioset.hid_sizes = () + config.model.heads.label.balanced_audioset.output_proj_zero_init = True + config.model.heads.label.balanced_audioset.classifier = 'token' + config.model_dtype_str = 'float32' + + # Training. + optim = ml_collections.ConfigDict() + optim.optax_name = 'scenic.momentum_hp' + optim.weight_decay = 0.0 + config.optimizer = optim + config.l2_decay_factor = 0 + # We customize the gradient clipping depending on the dataset. + optim.max_grad_norm = None + config.max_grad_norm = 1.0 + + config.num_training_epochs = None + config.batch_sizes = ml_collections.ConfigDict() + if 'imagenet' in IMAGE_TASKS: + config.batch_sizes.bit_imagenet2012 = 512 + if 'cifar10' in IMAGE_TASKS: + config.batch_sizes.bit_cifar10 = 512 + if 'cifar100' in IMAGE_TASKS: + config.batch_sizes.bit_cifar100 = 512 + if 'oxford_iiit_pet' in IMAGE_TASKS: + config.batch_sizes.bit_oxford_iiit_pet = 512 + if 'resisc45' in IMAGE_TASKS: + config.batch_sizes.bit_resisc45 = 512 + if 'vggsound' in AUDIO_TASKS: + config.batch_sizes.vggsound = 64 + if 'audioset' in AUDIO_TASKS: + config.batch_sizes.balanced_audioset = 64 + if 'kinetics400' in VIDEO_TASKS: + config.batch_sizes.kinetics400 = 64 + if 'moments_in_time' in VIDEO_TASKS: + config.batch_sizes.moments_in_time = 64 + + config.num_training_steps = 0 + if 'imagenet' in IMAGE_TASKS: + config.num_training_steps += 20_000 + if 'cifar10' in IMAGE_TASKS: + config.num_training_steps += 10_000 + if 'cifar100' in IMAGE_TASKS: + config.num_training_steps += 10_000 + if 'oxford_iiit_pet' in IMAGE_TASKS: + config.num_training_steps += 500 + if 'resisc45' in IMAGE_TASKS: + config.num_training_steps += 2500 + if 'vggsound' in AUDIO_TASKS: + vggsound_steps_per_epoch = VGGSOUND_TRAIN_SIZE // config.batch_sizes.vggsound + vggsound_n_epochs = 50 + vggsound_steps = vggsound_steps_per_epoch * vggsound_n_epochs + config.num_training_steps += vggsound_steps + if 'audioset' in AUDIO_TASKS: + audioset_steps_per_epoch = AUDIOSET_TRAIN_SIZE // config.batch_sizes.balanced_audioset + audioset_n_epochs = 50 + audioset_steps = audioset_steps_per_epoch * audioset_n_epochs + config.num_training_steps += audioset_steps + if 'kinetics400' in VIDEO_TASKS: + kinetics_steps_per_epoch = KINETICS_400_TRAIN_SIZE // config.batch_sizes.kinetics400 + kinetics_n_epochs = 30 + kinetics_steps = kinetics_steps_per_epoch * kinetics_n_epochs + config.num_training_steps += kinetics_steps + if 'moments_in_time' in VIDEO_TASKS: + mit_steps_per_epoch = MIT_TRAIN_SIZE // config.batch_sizes.moments_in_time + mit_n_epochs = 10 + mit_steps = mit_steps_per_epoch * mit_n_epochs + config.num_training_steps += mit_steps + + config.log_eval_steps = 5000 + config.rng_seed = 42 + + config.stochastic_droplayer_rates = ml_collections.ConfigDict() + config.stochastic_droplayer_rates.vggsound = 0.3 + config.stochastic_droplayer_rates.balanced_audioset = 0.3 + config.mixups = ml_collections.ConfigDict() + if 'vggsound' in AUDIO_TASKS: + config.mixups.vggsound = ml_collections.ConfigDict() + config.mixups.vggsound.mixmod = True + config.mixups.vggsound.alpha = 0.3 + if 'audioset' in AUDIO_TASKS: + config.mixups.balanced_audioset = ml_collections.ConfigDict() + config.mixups.balanced_audioset.mixmod = True + config.mixups.balanced_audioset.alpha = 0.3 + + config.init_from = ml_collections.ConfigDict() + config.init_from.init_from_vit = True + config.init_from.model_config = None + # Download pretrained ImageNet checkpoints from here: + # https://github.com/google-research/scenic/tree/main/scenic/projects/baselines (checkpoint_format = 'scenic') pylint: disable=line-too-long + # https://github.com/google-research/vision_transformer (checkpoint_format = 'big_vision') pylint: disable=line-too-long + config.init_from.checkpoint_path = 'path_to_checkpoint_of_vit_b_16' + config.init_from.checkpoint_format = 'scenic' + config.init_from.restore_positional_embedding = True + config.init_from.restore_input_embedding = True + # Only used for video heads, "resize" for image heads. + config.init_from.positional_embed_size_change = 'tile' + + # Learning rate. + sched = ml_collections.ConfigDict() + sched.re = '(.*)' + sched.lr_configs = ml_collections.ConfigDict() + sched.lr_configs.learning_rate_schedule = 'compound' + sched.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + sched.lr_configs.total_steps = config.num_training_steps + sched.lr_configs.steps_per_cycle = sched.lr_configs.total_steps + sched.lr_configs.warmup_steps = 0.0 + sched.lr_configs.base_learning_rate = 1.0 + + if len(IMAGE_TASKS) > 1: + sched.lr_configs.warmup_steps += 500 + if 'vggsound' in AUDIO_TASKS: + sched.lr_configs.warmup_steps += vggsound_steps_per_epoch * 2.5 + config.lr_coefs.vggsound = 0.5 + if 'audioset' in AUDIO_TASKS: + sched.lr_configs.warmup_steps += audioset_steps_per_epoch * 2.5 + config.lr_coefs.balanced_audioset = 0.5 + if 'kinetics400' in VIDEO_TASKS: + sched.lr_configs.warmup_steps += kinetics_steps_per_epoch * 2.5 + config.lr_coefs.kinetics400 = 0.1 + if 'moments_in_time' in VIDEO_TASKS: + sched.lr_configs.warmup_steps += mit_steps_per_epoch * 2.5 + config.lr_coefs.moments_in_time = 0.25 + config.schedule = ml_collections.ConfigDict({'all': sched}) + + if 'vggsound' in AUDIO_TASKS: + config.batch_sampling_strategy_steps.vggsound = vggsound_steps + if 'audioset' in AUDIO_TASKS: + config.batch_sampling_strategy_steps.balanced_audioset = audioset_steps + if 'kinetics400' in VIDEO_TASKS: + config.batch_sampling_strategy_steps.kinetics400 = kinetics_steps + if 'moments_in_time' in VIDEO_TASKS: + config.batch_sampling_strategy_steps.moments_in_time = mit_steps + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.log_summary_steps = 100 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.trial = 0 + return config + + +# pylint: enable=line-too-long diff --git a/scenic/projects/polyvit/data/polyvit.png b/scenic/projects/polyvit/data/polyvit.png new file mode 100644 index 0000000000000000000000000000000000000000..2535d5e041b4b7b49f666de333370b63fcc4fc24 --- /dev/null +++ b/scenic/projects/polyvit/data/polyvit.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a379ba8c61615b4d0abf7429d91264534bba979021ab8e093168da55f14a5d6 +size 518528 diff --git a/scenic/projects/polyvit/layers.py b/scenic/projects/polyvit/layers.py new file mode 100644 index 0000000000000000000000000000000000000000..d456a11820a5c1396a02f67ec1002b985bb7b4d2 --- /dev/null +++ b/scenic/projects/polyvit/layers.py @@ -0,0 +1,740 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Layers used in PolyVit.""" + +import functools +from typing import Any, Callable, Optional, Sequence, Tuple, Union + +import flax.linen as nn +import jax +from jax.nn import initializers +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.layers import attention_layers +from scenic.model_lib.layers import nn_layers +from scenic.projects.baselines import vit +from scenic.projects.polyvit import polyvit_base_model +from scenic.projects.vivit import model as vivit_model + + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +def sinusoidal_init(max_len: int = 2048, + min_scale: float = 1.0, + max_scale: float = 10000.0) -> Initializer: + """1D Sinusoidal Position Embedding Initializer. + + Args: + max_len: maximum possible length for the input. + min_scale: float: minimum frequency-scale in sine grating. + max_scale: float: maximum frequency-scale in sine grating. + + Returns: + output: init function returning `(1, max_len, d_feature)` + """ + + def init(key, shape, dtype=np.float32) -> jnp.ndarray: + """Sinusoidal init.""" + del key, dtype + d_feature = shape[-1] + pe = np.zeros((max_len, d_feature), dtype=np.float32) + position = np.arange(0, max_len)[:, np.newaxis] + scale_factor = -np.log(max_scale / min_scale) / (d_feature // 2 - 1) + div_term = min_scale * np.exp(np.arange(0, d_feature // 2) * scale_factor) + pe[:, :d_feature // 2] = np.sin(position * div_term) + pe[:, d_feature // 2: 2 * (d_feature // 2)] = np.cos(position * div_term) + pe = pe[np.newaxis, :, :] # [1, max_len, d_feature] + return jnp.array(pe) + + return init + + +def get_bottleneck_representation(x, pooling_type): + """Bottleneck representation. + + Args: + x: input tensor. + pooling_type: type of the classifier layer. Options are 'gap', 'gmp', + 'gsp', 'token'. + + Returns: + bottleneck tensor. + """ + + if pooling_type in ('token', '0'): + x = x[:, 0] + elif pooling_type in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[pooling_type] + x = fn(x, axis=1) + + x = jnp.mean(x, axis=list(range(1, x.ndim - 1))) + else: + raise ValueError( + "Pooling type should be in ['gap', 'gmp', 'gsp', 'token'].") + + return nn_layers.IdentityLayer(name='bottleneck')(x) + + +def get_droplayer_p(layer, num_layers, stochastic_droplayer_rate): + """Stochastic drop-layer probability. + + Args: + layer: Layer index. + num_layers: Total number of layers. + stochastic_droplayer_rate: Probability of dropping a layer linearly grows + from 0 to the provided value. + Returns: + Probability. + """ + + if stochastic_droplayer_rate is None: + return None + + return (layer / max(num_layers - 1, 1)) * stochastic_droplayer_rate + + +class AddPositionEmbs(nn.Module): + """Adds (optionally learned) positional embeddings to the inputs. + + Attributes: + max_len: maximal length of the input sequence. + posemb_init: positional embedding initializer. + """ + + max_len: int = 2048 + posemb_init: Optional[Initializer] = None + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + inputs_positions: Any = None) -> jnp.ndarray: + """Applies AddPositionEmbs module. + + By default this layer uses a fixed sinusoidal embedding table. If a + learned position embedding is desired, pass an initializer to + posemb_init in the configuration. + + Args: + inputs: input data. + inputs_positions: input position indices for packed sequences. + + Returns: + output: `(bs, timesteps, in_dim)` + """ + # inputs.shape is (batch_size, seq_len, emb_dim) + assert inputs.ndim == 3, ('Number of dimensions should be 3,' + ' but it is: %d' % inputs.ndim) + length = inputs.shape[1] + pos_emb_shape = (1, self.max_len, inputs.shape[-1]) + if self.posemb_init is None: + # Use a fixed (non-learned) sinusoidal position embedding. + pos_embedding = sinusoidal_init(max_len=self.max_len)(None, pos_emb_shape, # pytype: disable=wrong-arg-types # jax-ndarray + None) + else: + pos_embedding = self.param('pos_embedding', + self.posemb_init, + pos_emb_shape) + pe = pos_embedding[:, :length, :] + + if inputs_positions is None: + # normal unpacked case: + return inputs + pe + else: + # for packed data we need to use known position indices: + return inputs + jnp.take(pe[0], inputs_positions, axis=0) + + +class MlpBlock(nn.Module): + """Transformer MLP / feed-forward block. + + Attributes: + dtype: floating point type used in the layer. + mlp_dim: hidden dimension of the multilayer perceptron. + dropout_rate: dropout rate used in the hidden layer. + kernel_init: weight matrix initializer. + bias_init: bias vector initializer. + """ + dtype: Any = jnp.float32 + mlp_dim: int = 2048 + dropout_rate: float = 0.1 + kernel_init: Initializer = nn.initializers.xavier_uniform() + bias_init: Initializer = nn.initializers.normal(stddev=1e-6) + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, train: bool) -> jnp.ndarray: + """Applies Transformer MlpBlock module.""" + out_dim = inputs.shape[-1] + x = nn.Dense(self.mlp_dim, + dtype=self.dtype, + kernel_init=self.kernel_init, + bias_init=self.bias_init)(inputs) + x = nn.gelu(x) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + output = nn.Dense(out_dim, + dtype=self.dtype, + kernel_init=self.kernel_init, + bias_init=self.bias_init)(x) + output = nn.Dropout(rate=self.dropout_rate)(output, deterministic=not train) + return output + + +class DynamicMultiHeadAttention(nn.Module): + """Customized dynamic multi-head attention for scenic. + + Attributes: + num_heads: Number of attention heads. Features (i.e. inputs_q.shape[-1]) + should be divisible by the number of heads. + qkv_features: Dimension of the key, query, and value. + out_features: Dimension of the last projection. + dropout_rate: Dropout rate. + broadcast_dropout: Use a broadcasted dropout along batch dims. + kernel_init: Initializer for the kernel of the Dense layers. + bias_init: Initializer for the bias of the Dense layers. + use_bias: Whether pointwise QKV dense transforms use bias. + precision: Numerical precision of the computation see `jax.lax.Precision` + for details. + dtype: the dtype of the computation (default: float32). + """ + num_heads: int + qkv_features: Optional[int] = None + out_features: Optional[int] = None + dropout_rate: float = 0. + broadcast_dropout: bool = False + kernel_init: Initializer = nn.linear.default_kernel_init + bias_init: Initializer = nn.initializers.zeros + use_bias: bool = True + precision: Optional[jax.lax.Precision] = None + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + inputs_q: jnp.ndarray, + inputs_kv: Optional[jnp.ndarray], + dataset: str, + *, + pos_emb_q: Optional[jnp.ndarray] = None, + pos_emb_k: Optional[jnp.ndarray] = None, + pos_emb_v: Optional[jnp.ndarray] = None, + attention_bias: Optional[jnp.ndarray] = None, + attention_bias_kv: Optional[jnp.ndarray] = None, + deterministic: bool = False) -> jnp.ndarray: + """Applies multi-head dot product attention on the input data. + + Projects the inputs into multi-headed query, key, and value vectors, + applies dot-product attention and project the results to an output vector. + + This can be used for encoder-decoder attention by specifying both `inputs_q` + and `inputs_kv` or for self-attention by only specifying `inputs_q` and + setting `inputs_kv` to None. + + Args: + inputs_q: Input queries of shape `[bs, ..., len_q, features]`. + inputs_kv: Key/values of shape `[bs, ..., len_k, features]` or None for + self-attention, inn which case key/values will be derived from inputs_q. + dataset: Current dataset. + pos_emb_q: Positional embedding to be added to the query. + pos_emb_k: Positional embedding to be added to the key. + pos_emb_v: Positional embedding to be added to the value. + attention_bias: Full attention bias. Should be broadcastable to: + inputs_q.shape[:-2] + (num_heads, len_q, len_k). + attention_bias_kv: Attention bias for keys independent of queries which + has shape (bs, ..., len_k). + deterministic: Run deterministically or with dropout. + + Returns: + Output of shape `[bs, ..., features]`. + """ + if inputs_kv is None: + inputs_kv = inputs_q + + features = self.out_features or inputs_q.shape[-1] + qkv_features = self.qkv_features or inputs_q.shape[-1] + + assert qkv_features % self.num_heads == 0, ( + 'Memory dimension must be divisible by number of heads.') + head_dim = qkv_features // self.num_heads + + def add_positional_emb(x, pos): + return x + pos if pos is not None else x + + query, key, value = (add_positional_emb(inputs_q, pos_emb_q), + add_positional_emb(inputs_kv, pos_emb_k), + add_positional_emb(inputs_kv, pos_emb_v)) + + dense = functools.partial( + nn.DenseGeneral, + axis=-1, + features=(self.num_heads, head_dim), + kernel_init=self.kernel_init, + bias_init=self.bias_init, + use_bias=self.use_bias, + precision=self.precision) + # Project inputs_q to multi-headed q/k/v. + # Dimensions are then [..., l, n_heads, n_features_per_head]. + query, key, value = (dense(name='query')(query), + dense(name='key')(key), + dense(name='value')(value)) + + # pylint: disable=too-many-function-args + attn_kwargs = {} + if attention_bias_kv is not None: + # Not necessarily supported by all underlying functions. + attn_kwargs['bias_kv'] = attention_bias_kv + if not deterministic and self.dropout_rate > 0: + attn_kwargs['dropout_rng'] = self.make_rng('dropout') + + attention_fn = attention_layers.dot_product_attention + x = attention_fn( + query, + key, + value, + bias=attention_bias, + dropout_rate=self.dropout_rate, + broadcast_dropout=self.broadcast_dropout, + deterministic=deterministic, + dtype=self.dtype, + precision=self.precision, + **attn_kwargs) + # pylint: enable=too-many-function-args + + # Back to the original inputs dimensions. + out = nn.DenseGeneral( + features=features, + axis=(-2, -1), + kernel_init=self.kernel_init, + bias_init=self.bias_init, + use_bias=True, + dtype=self.dtype, + precision=self.precision, + name='out')( + x) + + return out + + +class Encoder1DBlock(nn.Module): + """Transformer encoder layer. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: Number of self-attention heads. + dtype: The dtype of the computation (default: float32). + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + + Returns: + output after transformer encoder block. + """ + mlp_dim: int + num_heads: int + dtype: Any = jnp.float32 + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + + def get_droplayer_mask(self, x: jnp.ndarray, deterministic: bool, + droplayer_p: Optional[float]) -> jnp.ndarray: + """Generate the drop-layer mask. + + Args: + x: Input tensor. + deterministic: Weather we are in the deterministic mode (e.g inference + time) or not. + droplayer_p: Probability of dropping a layer. + + Returns: + Droplayer mask. + """ + if not deterministic and droplayer_p is not None: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + return jax.random.bernoulli(self.make_rng('dropout'), droplayer_p, shape) + else: + return 0.0 # pytype: disable=bad-return-type # jax-ndarray + + @nn.compact + def __call__(self, inputs: jnp.ndarray, deterministic: bool, + droplayer_p: Optional[float], dataset: str) -> jnp.ndarray: + """Applies Encoder1DBlock module. + + Args: + inputs: Input data. + deterministic: Deterministic or not (to apply dropout). + droplayer_p: Probability of dropping a layer. + dataset: Current dataset. + + Returns: + Output after transformer encoder block. + """ + # Attention block. + assert inputs.ndim == 3 + x = nn.LayerNorm(dtype=self.dtype)(inputs) + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + dtype=self.dtype, + kernel_init=nn.initializers.xavier_uniform(), + broadcast_dropout=False, + deterministic=deterministic, + dropout_rate=self.attention_dropout_rate)(x, x) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic) + x = x * (1.0 - + self.get_droplayer_mask(x, deterministic, droplayer_p)) + inputs + + # MLP block. + y = nn.LayerNorm(dtype=self.dtype)(x) + y = MlpBlock( + dtype=self.dtype, + mlp_dim=self.mlp_dim, + dropout_rate=self.dropout_rate, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6))( + y, train=not deterministic) + + return y * (1.0 - + self.get_droplayer_mask(x, deterministic, droplayer_p)) + x + + +class Tokenizer2D(nn.Module): + """Tokenizer for 2D inputs (e.g., images). + + Attributes: + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + add_cls_token: Whether to add CLS token or not. + dtype: JAX data type for activations. + """ + patches: ml_collections.ConfigDict + hidden_size: int + mlp_dim: int + num_layers: int + num_heads: int + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + add_cls_token: bool = False + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, dataset: str, + stochastic_droplayer_rate: Optional[float]) -> jnp.ndarray: + if x.ndim != 4: + raise ValueError( + f'Input shape should be `[bs, h, w, c]` but it is {x.shape}.') + fh, fw = self.patches.size + x = nn.Conv( + self.hidden_size, (fh, fw), + strides=(fh, fw), + padding='VALID', + name='embedding')( + x) + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + if self.add_cls_token: + cls = self.param('cls', nn.initializers.zeros, (1, 1, c), x.dtype) + cls = jnp.tile(cls, [n, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + x = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name='posembed_input')( + x) + + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + for lyr in range(self.num_layers): + droplayer_p = get_droplayer_p(lyr, self.num_layers, + stochastic_droplayer_rate) + x = Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name=f'encoderblock_{lyr}', + dtype=jax.dtypes.canonicalize_dtype(self.dtype))( + x, + deterministic=not train, + droplayer_p=droplayer_p, + dataset=dataset) + + return x + + +class Tokenizer3D(nn.Module): + """Tokenizer for 3D inputs (e.g., videos). + + Attributes: + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + kernel_init_method: Method for initializing the kernel. Options are + `central_frame_initializer` (which is the best performing one in ViViT), + `average_frame_initializer`, and None (using flax default_kernel_init). + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + add_cls_token: whether to add CLS token or not. + dtype: JAX data type for activations. + """ + patches: ml_collections.ConfigDict + hidden_size: int + kernel_init_method: Optional[str] + mlp_dim: int + num_layers: int + num_heads: int + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + add_cls_token: bool = False + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, dataset: str, + stochastic_droplayer_rate: Optional[float]) -> jnp.ndarray: + if x.ndim != 5: + raise ValueError( + f'Input shape should be `[bs, t, h, w, c]` but it is {x.shape}.') + x = vivit_model.embed_3d_patch( + x, + self.patches, + self.hidden_size, + kernel_init_method=self.kernel_init_method) + n, t, h, w, c = x.shape + x = jnp.reshape(x, [n, t * h * w, c]) + if self.add_cls_token: + cls = self.param('cls', nn.initializers.zeros, (1, 1, c), x.dtype) + cls = jnp.tile(cls, [n, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + x = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name='posembed_input')( + x) + + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + for lyr in range(self.num_layers): + droplayer_p = get_droplayer_p(lyr, self.num_layers, + stochastic_droplayer_rate) + x = Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name=f'encoderblock_{lyr}', + dtype=jax.dtypes.canonicalize_dtype(self.dtype))( + x, + deterministic=not train, + droplayer_p=droplayer_p, + dataset=dataset) + + return x + + +class Tokenizer(nn.Module): + """Unified Tokenizer class. + + Attributes: + config: Tokenizer config. + dtype: JAX data type for activations. + """ + + config: ml_collections.ConfigDict + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, dataset: str, + modality: Optional[str], + stochastic_droplayer_rate: Optional[float]) -> jnp.ndarray: + + if modality == polyvit_base_model.Modality.IMAGE: + return Tokenizer2D( + self.config.image.patches, + self.config.hidden_size, + self.config.mlp_dim, + self.config.num_layers, + self.config.num_heads, + dropout_rate=self.config.dropout_rate, + attention_dropout_rate=self.config.attention_dropout_rate, + add_cls_token=self.config.add_cls_token, + dtype=self.dtype, + name='tokenizer2d')( + x, + train=train, + stochastic_droplayer_rate=stochastic_droplayer_rate, + dataset=dataset) + elif modality == polyvit_base_model.Modality.VIDEO: + return Tokenizer3D( + self.config.video.patches, + self.config.hidden_size, + self.config.video.kernel_init_method, + self.config.mlp_dim, + self.config.num_layers, + self.config.num_heads, + dropout_rate=self.config.dropout_rate, + attention_dropout_rate=self.config.attention_dropout_rate, + add_cls_token=self.config.add_cls_token, + dtype=self.dtype, + name='tokenizer3d')( + x, + train=train, + stochastic_droplayer_rate=stochastic_droplayer_rate, + dataset=dataset) + elif modality == polyvit_base_model.Modality.AUDIO: + return Tokenizer2D( + self.config.audio.patches, + self.config.hidden_size, + self.config.mlp_dim, + self.config.num_layers, + self.config.num_heads, + dropout_rate=self.config.dropout_rate, + attention_dropout_rate=self.config.attention_dropout_rate, + add_cls_token=self.config.add_cls_token, + dtype=self.dtype, + name='tokenizer_spec')( + x, + train=train, + stochastic_droplayer_rate=stochastic_droplayer_rate, + dataset=dataset) + else: + raise NotImplementedError(f'Modality {modality} is not supported yet.') + + +class PolyViTEncoder(nn.Module): + """PolyViT encoder. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_tokenizer_layers: Number of tokenizer layers. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + dtype: JAX data type for activations. + """ + + mlp_dim: int + num_tokenizer_layers: int + num_layers: int + num_heads: int + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, dataset: str, + stochastic_droplayer_rate: Optional[float]): + + for lyr in range(self.num_tokenizer_layers, self.num_layers): + droplayer_p = get_droplayer_p(lyr, self.num_layers, + stochastic_droplayer_rate) + x = Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name=f'encoderblock_{lyr}', + dtype=jax.dtypes.canonicalize_dtype(self.dtype))( + x, + deterministic=not train, + droplayer_p=droplayer_p, + dataset=dataset) + + x = nn.LayerNorm(name='encoder_norm')(x) + + return x + + +class ClassificationHead(nn.Module): + """Defines a fully connected neural network. + + The model assumes the input data has shape + [batch_size_per_device, *input_shape] where input_shape may be of arbitrary + rank. The model flatten the input before applying a dense layer. + + Attributes: + num_outputs: Number of output classes. + hid_sizes: Size of hidden units in each layer. + kernel_init: Kernel initialization. + bias_init: Bias initialization. + output_proj_zero_init: Whether to initialize the output projection with + zeros. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + dtype: Model dtype. + """ + num_outputs: int + hid_sizes: Union[Tuple[int, ...], int] = () + kernel_init: Initializer = initializers.lecun_normal() + bias_init: Initializer = initializers.zeros + output_proj_zero_init: bool = False + classifier: str = 'gap' + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool) -> jnp.ndarray: + + del train + hid_sizes = self.hid_sizes + if isinstance(hid_sizes, int): + hid_sizes = [hid_sizes] + + x = get_bottleneck_representation(x, self.classifier) + + for num_hid in hid_sizes: + x = nn.Dense( + num_hid, kernel_init=self.kernel_init, bias_init=self.bias_init)( + x) + x = nn.relu(x) + + # Head. + x = nn_layers.IdentityLayer(name='pre_logits')(x) + + if self.output_proj_zero_init: + output_proj_kernel_init = nn.initializers.zeros + output_proj_bias_init = nn.initializers.zeros + else: + output_proj_kernel_init = self.kernel_init + output_proj_bias_init = self.bias_init + + x = nn.Dense( + self.num_outputs, + kernel_init=output_proj_kernel_init, + bias_init=output_proj_bias_init, + name='output_projection')( + x) + return x + + +class FewshotHead(nn.Module): + """Head used for fewshot metrics. + + There are no trainable parameters in this module. + + Attributes: + pooling_type: type of the bottleneck. Options are 'gap', 'gmp', 'gsp', + 'token'. + """ + pooling_type: str = 'gap' + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool) -> jnp.ndarray: + + del train + + x = get_bottleneck_representation(x, self.pooling_type) + + return x diff --git a/scenic/projects/polyvit/main.py b/scenic/projects/polyvit/main.py new file mode 100644 index 0000000000000000000000000000000000000000..36ae1b8ac8729020641eca6161fafb479544b86c --- /dev/null +++ b/scenic/projects/polyvit/main.py @@ -0,0 +1,48 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main script for PolyViT project.""" + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.polyvit import model as polyvit_model +from scenic.projects.polyvit import train_utils as polyvit_train_utils +from scenic.projects.polyvit import trainer as polyvit_trainer + +FLAGS = flags.FLAGS + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the PolyViT project.""" + # Build the loss_fn, metrics, and flax_model. + model_cls = polyvit_model.PolyVitModel + data_rng, rng = jax.random.split(rng) + dataset_dict = polyvit_train_utils.get_datasets( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + polyvit_trainer.train( + rng=rng, + config=config, + model_cls=model_cls, + dataset_dict=dataset_dict, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/polyvit/model.py b/scenic/projects/polyvit/model.py new file mode 100644 index 0000000000000000000000000000000000000000..7aa9942b6ec2774ad2a3000f120fa1481368d311 --- /dev/null +++ b/scenic/projects/polyvit/model.py @@ -0,0 +1,226 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""PolyVit.""" + +from typing import Any, Callable, Optional, Sequence + +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.projects.polyvit import layers +from scenic.projects.polyvit import model_utils +from scenic.projects.polyvit import polyvit_base_model + + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +class PolyVit(nn.Module): + """PolyVit.""" + + modalities_config: ml_collections.ConfigDict + encoder_config: ml_collections.ConfigDict + heads_config: ml_collections.ConfigDict + stochastic_droplayer_config: Optional[ml_collections.ConfigDict] + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, + x: jnp.ndarray, + targets: Optional[jnp.ndarray] = None, + *, + task: Optional[str] = None, + modality: Optional[str] = 'image', + dataset: Optional[str] = None, + train: bool, + debug: bool = False): + + if self.stochastic_droplayer_config is None: + stochastic_droplayer_rate = None + else: + stochastic_droplayer_rate = self.stochastic_droplayer_config.get(dataset) + + x = layers.Tokenizer( + config=self.modalities_config, dtype=self.dtype, name='tokenizer')( + x, + train=train, + modality=modality, + stochastic_droplayer_rate=stochastic_droplayer_rate, + dataset=dataset) + + x = layers.PolyViTEncoder( + mlp_dim=self.encoder_config.mlp_dim, + num_tokenizer_layers=self.encoder_config.num_tokenizer_layers, + num_layers=self.encoder_config.num_layers, + num_heads=self.encoder_config.num_heads, + dropout_rate=self.encoder_config.dropout_rate, + attention_dropout_rate=self.encoder_config.attention_dropout_rate, + dtype=self.dtype, + name='vit_encoder')( + x, + train=train, + stochastic_droplayer_rate=stochastic_droplayer_rate, + dataset=dataset) + + if self.encoder_config.get('freeze_body', False): + x = jax.lax.stop_gradient(x) + + elif task in [ + polyvit_base_model.Task.LABEL, polyvit_base_model.Task.MULTILABEL, + polyvit_base_model.Task.MULTIHEADLABEL + ]: + + head_config = self.heads_config.label.get(dataset) + + x = layers.ClassificationHead( + num_outputs=head_config.num_classes, + hid_sizes=head_config.hid_sizes, + output_proj_zero_init=head_config.get('output_proj_zero_init', False), + classifier=head_config.classifier, + dtype=self.dtype, + name='classification_head_' + dataset)( + x, train=train) + + return x + + elif task == polyvit_base_model.Task.BOW: + + head_config = self.heads_config.bow.get(dataset) + + x = layers.ClassificationHead( + num_outputs=head_config.vocab_size, + hid_sizes=head_config.hid_sizes, + output_proj_zero_init=head_config.get('output_proj_zero_init', False), + classifier=head_config.classifier, + dtype=self.dtype, + name='bag_of_words_head_' + dataset)( + x, train=train) + + return x + + elif task == polyvit_base_model.Task.FEWSHOT: + + x = layers.FewshotHead(self.heads_config.fewshot.pooling_type, + name='fewshot_head')(x, train=train) + + return x + + else: + raise NotImplementedError(f'Task {task} is not supported yet.') + + +class PolyVitModel(polyvit_base_model.PolyVitBaseModel): + """PolyVit model.""" + + def build_flax_model(self): + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + + add_cls_token, _ = model_utils.get_cls_token_and_video_frames(self.config) + + for dataset_name, meta_data in self.dataset_meta_data.items(): + if meta_data['task'] in [ + polyvit_base_model.Task.LABEL, polyvit_base_model.Task.MULTILABEL, + polyvit_base_model.Task.MULTIHEADLABEL + ]: + with self.config.unlocked(): + self.config.model.heads.label.get( + dataset_name).num_classes = meta_data['num_classes'] + if meta_data['task'] in [polyvit_base_model.Task.BOW]: + with self.config.unlocked(): + self.config.model.heads.bow.get( + dataset_name).vocab_size = meta_data['vocab_size'] + + with self.config.unlocked(): + modalities_cfg = self.config.model.modalities + encoder_cfg = self.config.model.encoder + modalities_cfg.mlp_dim = encoder_cfg.mlp_dim + if modalities_cfg.get('num_layers') is None: + modalities_cfg.num_layers = 0 + modalities_cfg.num_heads = encoder_cfg.num_heads + modalities_cfg.dropout_rate = encoder_cfg.dropout_rate + modalities_cfg.attention_dropout_rate = encoder_cfg.attention_dropout_rate + modalities_cfg.add_cls_token = add_cls_token + encoder_cfg.num_tokenizer_layers = modalities_cfg.num_layers + + stochastic_droplayer_config = self.config.get('stochastic_droplayer_rates') + + return PolyVit( + modalities_config=self.config.model.modalities, + encoder_config=self.config.model.encoder, + heads_config=self.config.model.heads, + stochastic_droplayer_config=stochastic_droplayer_config, + dtype=model_dtype, + ) + + def init_from_vit_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state (ViT).""" + + return model_utils.initialise_from_vit_train_state(self.config, train_state, + restored_train_state, + restored_model_cfg) + + def init_from_polyvit_train_state( + self, + train_state: Any, + restored_train_state: Any, + tokenizer_to_init_from: Optional[str] = None, + tokenizer_to_init: Optional[str] = None, + resolution_to_init: Optional[Any] = None, + initialize_heads: bool = False) -> Any: + """Updates the train_state with data from restored_train_state (PolyViT).""" + + return model_utils.initialize_from_polyvit_train_state( + train_state, + restored_train_state, + tokenizer_to_init_from=tokenizer_to_init_from, + tokenizer_to_init=tokenizer_to_init, + resolution_to_init=resolution_to_init, + initialize_heads=initialize_heads) + + def init_from_mbt_train_state( + self, + train_state: Any, + restored_train_state: Any, + tokenizer_to_init: str = 'tokenizer_spec', + resolution_to_init: Optional[Any] = None, + initialize_head: bool = False, + ) -> Any: + """Updates the train_state with data from restored_train_state (AViT).""" + + return model_utils.initialize_from_mbt_train_state( + train_state, + restored_train_state, + tokenizer_to_init=tokenizer_to_init, + resolution_to_init=resolution_to_init, + initialize_head=initialize_head, + ) + + def init_from_vivit_train_state(self, + train_state: Any, + restored_train_state: Any, + tokenizer_to_init: str = 'tokenizer3d', + resolution_to_init: Optional[Any] = None, + initialize_head: bool = False) -> Any: + """Updates the train_state with data from restored_train_state (ViViT).""" + + return model_utils.initialize_from_vivit_train_state( + train_state, + restored_train_state, + tokenizer_to_init=tokenizer_to_init, + resolution_to_init=resolution_to_init, + initialize_head=initialize_head) diff --git a/scenic/projects/polyvit/model_utils.py b/scenic/projects/polyvit/model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..ffe22a93e847faa4bdd929bd8f43af4466db4f50 --- /dev/null +++ b/scenic/projects/polyvit/model_utils.py @@ -0,0 +1,551 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Model utils for PolyViT.""" + +from typing import Any, Optional + +from absl import logging +import flax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.common_lib import debug_utils +import scenic.projects.mbt.model_utils as mbt_utils +import scenic.projects.vivit.model_utils as vivit_utils +import scipy + + +def initialize_from_polyvit_train_state( + train_state: Any, + restored_train_state: Any, + tokenizer_to_init_from: Optional[str] = None, + tokenizer_to_init: Optional[str] = None, + resolution_to_init: Optional[Any] = None, + initialize_heads: bool = False) -> Any: + """Initializes PolyViT with other PolyViT body.""" + + params = flax.core.unfreeze(train_state.params) + restored_params = restored_train_state.params + restored_params = flax.core.unfreeze(restored_params) + + for m_key, m_params in restored_params.items(): + if m_key == 'vit_encoder': + params[m_key] = m_params + elif m_key == 'tokenizer': + # Tokenizer(s) initialization. + if tokenizer_to_init_from is None: + # Only adding tokenizers which are also in `params`. + for tm_key, tm_params in m_params.items(): + if tm_key in params[m_key]: + params[m_key][tm_key] = tm_params + else: + # Initializing `tokenizer_to_init` from `tokenizer_to_init_from` and + # adapting all needed shapes. + params['tokenizer'][tokenizer_to_init]['cls'] = m_params[ + tokenizer_to_init_from]['cls'] + params['tokenizer'][tokenizer_to_init]['embedding']['bias'] = m_params[ + tokenizer_to_init_from]['embedding']['bias'] + # Below we assume that that patch h x w is the same for + # tokenizer_to_init_from and for tokenizer_to_init. + if tokenizer_to_init_from == 'tokenizer3d': + params['tokenizer'][tokenizer_to_init]['embedding'][ + 'kernel'] = m_params['tokenizer3d']['embedding']['kernel'].sum( + axis=0) + elif tokenizer_to_init == 'tokenizer3d': + # This is hardcoded since only this shape was used in linear eval of + # video tasks. + kernel3d = np.zeros([4, 16, 16, 3, 768]) + # Initializing the middle frame embedding as in ViViT. + kernel3d[ + 2, :, :] = m_params[tokenizer_to_init_from]['embedding']['kernel'] + params['tokenizer']['tokenizer3d']['embedding']['kernel'] = kernel3d + else: + params['tokenizer'][tokenizer_to_init]['embedding'][ + 'kernel'] = m_params[tokenizer_to_init_from]['embedding'][ + 'kernel'] + + # Positional embedding initialization. + pos_embedding = m_params[tokenizer_to_init_from]['posembed_input'][ + 'pos_embedding'] + # Excluding cls token embedding. + new_pos_embedding = pos_embedding[:, 1:] + if tokenizer_to_init_from == 'tokenizer3d': + # This is hardcoded, 8 = 32 / 4 (number of frames in the input / + # number of frames in the patch). + new_pos_embedding = new_pos_embedding.reshape(1, 8, -1, + pos_embedding.shape[2]) + # Averaging per-frame positional embeddings to obtain a 2d + # initialization. + new_pos_embedding = new_pos_embedding.mean(axis=1) + # 2d interpolation if needed. + if resolution_to_init is not None: + # This is hardcoded. We assume that image resolution is + # 384 x 384, video frame resolution is 224 x 224 and audio spectrogram + # resolution is 800 x 128. We assume that patch size is 16 x 16. + if tokenizer_to_init_from == 'tokenizer2d': + new_pos_embedding = new_pos_embedding.reshape(24, 24, -1) + zoom = (resolution_to_init[0] / 384, resolution_to_init[1] / 384, 1) + elif tokenizer_to_init_from == 'tokenizer_spec': + new_pos_embedding = new_pos_embedding.reshape(50, 8, -1) + zoom = (resolution_to_init[0] / 800, resolution_to_init[1] / 128, 1) + else: + new_pos_embedding = new_pos_embedding.reshape(14, 14, -1) + zoom = (resolution_to_init[0] / 224, resolution_to_init[1] / 224, 1) + new_pos_embedding = scipy.ndimage.zoom( + new_pos_embedding, zoom, order=1) + new_pos_embedding = new_pos_embedding.reshape( + 1, new_pos_embedding.shape[0] * new_pos_embedding.shape[1], + -1) + if tokenizer_to_init == 'tokenizer3d': + # This is hardcoded, 8 = 32 / 4 (number of frames in the input / + # number of frames in the patch). + new_pos_embedding = np.tile(new_pos_embedding, (1, 8, 1)) + # Concatenating with the cls embedding. + new_pos_embedding = np.concatenate( + [pos_embedding[:, :1], new_pos_embedding], axis=1) + params['tokenizer'][tokenizer_to_init][ + 'posembed_input']['pos_embedding'] = new_pos_embedding + elif initialize_heads and m_key in params: + # Initializing heads if needed. + params[m_key] = m_params + + return train_state.replace(params=flax.core.freeze(params)) + + +def initialize_from_mbt_train_state( + train_state: Any, + restored_train_state: Any, + tokenizer_to_init: str = 'tokenizer_spec', + resolution_to_init: Optional[Any] = None, + initialize_head: bool = False, +) -> Any: + """Initializes PolyViT with AViT body.""" + + params = flax.core.unfreeze(train_state.params) + restored_params = flax.core.unfreeze(restored_train_state.params) + + for m_key, m_params in restored_params.items(): + if m_key == 'Transformer': + for tm_key, tm_params in m_params.items(): + if tm_key == 'posembed_input_spec': + # Initializing positional embeddings. + if tokenizer_to_init == 'tokenizer_spec': + params['tokenizer']['tokenizer_spec']['posembed_input'] = tm_params + else: + # Adapting positional embedding shapes if needed. + pos_embedding = tm_params['pos_embedding'] + # Excluding cls token embedding. + new_pos_embedding = pos_embedding[:, 1:] + # 2d interpolation if needed. + if resolution_to_init is not None: + # Assuming that spectrogram is of shape 800 x 128 and patch size + # is 16 x 16. Reshaping to (800 / 16) x (128 / 16). + new_pos_embedding = new_pos_embedding.reshape(50, 8, -1) + zoom = (resolution_to_init[0] / 800, resolution_to_init[1] / 128, + 1) + new_pos_embedding = scipy.ndimage.zoom( + new_pos_embedding, zoom, order=1) + new_pos_embedding = new_pos_embedding.reshape( + 1, new_pos_embedding.shape[0] * new_pos_embedding.shape[1], + -1) + if tokenizer_to_init == 'tokenizer3d': + # This is hardcoded, 8 = 32 / 4 (number of frames in the input / + # number of frames in the patch). + new_pos_embedding = np.tile(new_pos_embedding, (1, 8, 1)) + # Concatenating with the cls embedding. + new_pos_embedding = np.concatenate( + [pos_embedding[:, :1], new_pos_embedding], axis=1) + params['tokenizer'][tokenizer_to_init][ + 'posembed_input']['pos_embedding'] = new_pos_embedding + elif tm_key.startswith('encoderblock'): + # Removing '_spectrogram' suffix. + params['vit_encoder'][tm_key[:-5]] = tm_params + elif tm_key in params['vit_encoder']: + params['vit_encoder'][tm_key] = tm_params + elif m_key == 'cls': + params['tokenizer'][tokenizer_to_init]['cls'] = m_params + elif m_key == 'embedding_spec': + # Initializing patch embedding. + if tokenizer_to_init in ['tokenizer2d', 'tokenizer_spec']: + params['tokenizer'][tokenizer_to_init]['embedding'] = m_params + else: + # This is hardcoded since only this shape was used in linear eval of + # video tasks. + kernel3d = np.zeros([4, 16, 16, 3, 768]) + # Initializing the middle frame embedding as in ViViT. + kernel3d[2, :, :] = m_params['kernel'] + params['tokenizer'][tokenizer_to_init]['embedding'][ + 'kernel'] = kernel3d + params['tokenizer'][tokenizer_to_init]['embedding']['bias'] = m_params[ + 'bias'] + elif m_key == 'output_projection' and initialize_head: + # Initializing head if needed. + head_name = [ + x for x in params.keys() if x not in ['tokenizer', 'vit_encoder'] + ][0] + params[head_name]['output_projection'] = m_params + + return train_state.replace(params=flax.core.freeze(params)) + + +def initialize_from_vivit_train_state( + train_state: Any, + restored_train_state: Any, + tokenizer_to_init: str = 'tokenizer3d', + resolution_to_init: Optional[Any] = None, + initialize_head: bool = False) -> Any: + """Initializes PolyViT with ViViT body.""" + + params = flax.core.unfreeze(train_state.params) + restored_params = flax.core.unfreeze(restored_train_state.params) + + for m_key, m_params in restored_params.items(): + # Not initializing heads. + if m_key == 'Transformer': + for tm_key, tm_params in m_params.items(): + if tm_key == 'posembed_input': + # Initializing positional embeddings. + if tokenizer_to_init == 'tokenizer3d': + params['tokenizer']['tokenizer3d']['posembed_input'] = tm_params + else: + # Adapting positional embedding shapes if needed. + pos_embedding = tm_params['pos_embedding'] + # Excluding cls token embedding and reshaping into per-frame + # embeddings. 8 = 32 / 4 (number of frames in the input / + # number of frames in the patch). + new_pos_embedding = pos_embedding[:, 1:].reshape( + 1, 8, -1, pos_embedding.shape[2]) + # Averaging per-frame positional embeddings to obtain a 2d + # initialization. + new_pos_embedding = new_pos_embedding.mean(axis=1) + # 2d interpolation if needed. + if resolution_to_init is not None: + # This is hardcoded. We assume that video frame resolution is + # 224 x 224 and patch size is 16 x 16. + new_pos_embedding = new_pos_embedding.reshape(14, 14, -1) + zoom = (resolution_to_init[0] / 224, resolution_to_init[1] / 224, + 1) + new_pos_embedding = scipy.ndimage.zoom( + new_pos_embedding, zoom, order=1) + new_pos_embedding = new_pos_embedding.reshape( + 1, new_pos_embedding.shape[0] * new_pos_embedding.shape[1], + -1) + # Concatenating with the cls embedding. + new_pos_embedding = np.concatenate( + [pos_embedding[:, :1], new_pos_embedding], axis=1) + params['tokenizer'][tokenizer_to_init][ + 'posembed_input']['pos_embedding'] = new_pos_embedding + elif tm_key in params['vit_encoder']: + params['vit_encoder'][tm_key] = tm_params + elif m_key == 'cls': + params['tokenizer'][tokenizer_to_init]['cls'] = m_params + elif m_key == 'embedding': + # Patch embedding initialization. + if tokenizer_to_init == 'tokenizer3d': + params['tokenizer']['tokenizer3d']['embedding'] = m_params + else: + params['tokenizer'][tokenizer_to_init]['embedding']['bias'] = m_params[ + 'bias'] + # 2d patch embedding is a sum along the frame dimension of the 3d video + # patch embedding. + params['tokenizer'][tokenizer_to_init]['embedding'][ + 'kernel'] = m_params['kernel'].sum(axis=0) + elif m_key == 'output_projection' and initialize_head: + # Initializing head if needed. + head_name = [ + x for x in params.keys() if x not in ['tokenizer', 'vit_encoder'] + ][0] + params[head_name]['output_projection'] = m_params + + return train_state.replace(params=flax.core.freeze(params)) + + +def initialise_from_vit_train_state( + config, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + log_initialised_param_shapes: bool = True) -> Any: + """Updates the train_state with data from restored_train_state (ViT model). + + This function is written to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + config: Configurations for the model being updated. + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of a + pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + log_initialised_param_shapes: If true, print tabular summary of all the + variables in the model once they have been initialised. + + Returns: + Updated train_state. + """ + # Inspect and compare the parameters of the model with the init-model. + params = flax.core.unfreeze(train_state.params) + restored_params = flax.core.unfreeze(restored_train_state.params) + + # Start moving parameters, one-by-one and apply changes if needed. + for m_key, m_params in restored_params.items(): + if m_key in ['Transformer', 'SpatialTransformer']: + for tm_key, tm_params in m_params.items(): + if tm_key == 'posembed_input': # Might need resolution change. + if 'tokenizer2d' in params['tokenizer']: + init_posemb(params['tokenizer']['tokenizer2d'], m_params, config, + restored_model_cfg, 'resize') + if 'tokenizer3d' in params['tokenizer']: + init_posemb(params['tokenizer']['tokenizer3d'], m_params, config, + restored_model_cfg, + config.init_from.positional_embed_size_change) + if 'tokenizer_spec' in params['tokenizer']: + init_spec_posemb(params['tokenizer']['tokenizer_spec'], m_params, + config, + restored_model_cfg) + elif 'encoderblock' in tm_key: + init_encoderblock(params, m_params, tm_key) + else: # Other parameters of the Transformer encoder. + params['vit_encoder'][tm_key] = tm_params + elif m_key == 'cls': + for tokenizer_name in ['tokenizer2d', 'tokenizer3d', 'tokenizer_spec']: + if tokenizer_name in params['tokenizer']: + params['tokenizer'][tokenizer_name]['cls'] = m_params + elif m_key == 'embedding': + for tokenizer_name in ['tokenizer2d', 'tokenizer_spec']: + if tokenizer_name in params['tokenizer']: + params['tokenizer'][tokenizer_name]['embedding'] = m_params + if 'tokenizer3d' in params['tokenizer']: + init_embedding(params['tokenizer']['tokenizer3d'], m_params, config) + else: + if m_key in train_state.params: + params[m_key] = m_params + else: + logging.info('Skipping %s. In restored model but not in target', m_key) + + if log_initialised_param_shapes: + logging.info('Parameter summary after initialising from train state') + debug_utils.log_param_shapes(params) + return train_state.replace(params=flax.core.freeze(params)) + + +def init_posemb(to_params, from_params, config, restored_model_cfg, + positional_embed_size_change): + """Initialize the positional embeddings.""" + with_cls_token, num_video_frames = get_cls_token_and_video_frames(config) + restored_with_cls_token, _ = get_cls_token_and_video_frames( + restored_model_cfg) + if config.init_from.restore_positional_embedding: + posemb = to_params['posembed_input']['pos_embedding'] + restored_posemb = from_params['posembed_input']['pos_embedding'] + if restored_posemb.shape != posemb.shape: + # Rescale the grid of pos, embeddings. + # Default parameter shape is (1, N, 768) + logging.info('Adapting positional embeddings from %s to %s', + restored_posemb.shape, posemb.shape) + ntok = posemb.shape[1] + if restored_with_cls_token: + # The first token is the CLS token. + cls_tok = restored_posemb[:, :1] + restored_posemb_grid = restored_posemb[0, 1:] + else: + cls_tok = restored_posemb[:, :0] + restored_posemb_grid = restored_posemb[0] + if with_cls_token: + ntok -= 1 + restored_gs = int(np.sqrt(len(restored_posemb_grid))) + gs = int(np.sqrt(ntok)) + if with_cls_token != restored_with_cls_token: + logging.warning('Only one of target and restored model uses' + 'classification token') + if restored_gs == gs: + # In case the following `if` is not going to run, lets add batch dim: + restored_posemb = restored_posemb_grid[None, ...] + + if restored_gs != gs: # We need resolution change. + if positional_embed_size_change == 'resize': + restored_posemb_grid = vivit_utils.interpolate_positional_embeddings( + restored_posemb_grid, ntok) + + elif positional_embed_size_change == 'tile': + restored_posemb_grid = vivit_utils.tile_positional_embeddings( + restored_posemb_grid, ntok) + + elif positional_embed_size_change == 'resize_tile': + n_frames = ( + num_video_frames // config.model.modalities.video.patches.size[2]) + tokens_per_frame = ntok // n_frames + restored_posemb_grid = vivit_utils.interpolate_positional_embeddings( + restored_posemb_grid, tokens_per_frame) + restored_posemb_grid = restored_posemb_grid[0] + restored_posemb_grid = vivit_utils.tile_positional_embeddings( + restored_posemb_grid, ntok) + + else: + raise AssertionError( + 'Unknown positional embedding size changing method') + # Attach the CLS token again. + if with_cls_token: + restored_posemb = jnp.array( + np.concatenate([cls_tok, restored_posemb_grid], axis=1)) + else: + restored_posemb = restored_posemb_grid + + to_params['posembed_input']['pos_embedding'] = restored_posemb + else: + logging.info('Not restoring positional encodings from pretrained model') + + +def init_spec_posemb(to_params, from_params, config, restored_model_cfg): + """Initialize the spectrogram positional embeddings.""" + with_cls_token, _ = get_cls_token_and_video_frames(config) + restored_with_cls_token, _ = get_cls_token_and_video_frames( + restored_model_cfg) + if config.init_from.restore_positional_embedding: + posemb = to_params['posembed_input']['pos_embedding'] + restored_posemb = from_params['posembed_input']['pos_embedding'] + # Rescale the grid of pos, embeddings. + # Default parameter shape is (1, N, 768) + logging.info('Adapting spectrogram positional embeddings from %s to %s', + restored_posemb.shape, posemb.shape) + ntok = posemb.shape[1] + if restored_with_cls_token: + # The first token is the CLS token. + cls_tok = restored_posemb[:, :1] + restored_posemb_grid = restored_posemb[0, 1:] + else: + cls_tok = restored_posemb[:, :0] + restored_posemb_grid = restored_posemb[0] + if with_cls_token: + ntok -= 1 + + gh = ((config.model.modalities.audio.spec_shape[0] * + config.model.modalities.audio.num_spec_frames) // + config.model.modalities.audio.patches.size[0]) + gw = (config.model.modalities.audio.spec_shape[1] // + config.model.modalities.audio.patches.size[1]) + tokens_per_frame = (gh, gw) + + restored_posemb_grid = mbt_utils.interpolate_positional_embeddings( + restored_posemb_grid, tokens_per_frame + ) + restored_posemb_grid = restored_posemb_grid[0] + restored_posemb_grid = mbt_utils.tile_positional_embeddings( + restored_posemb_grid, ntok + ) + + # Attach the CLS token again. + if with_cls_token: + restored_posemb = jnp.array( + np.concatenate([cls_tok, restored_posemb_grid], axis=1)) + else: + restored_posemb = restored_posemb_grid + + to_params['posembed_input']['pos_embedding'] = restored_posemb + else: + logging.info('Not restoring positional encodings from pretrained model') + + +def init_encoderblock(to_params, from_params, tm_key): + """Initialize encoder_block_parameters.""" + # Explicitly enumerate over the keys in the encoder-block. Don't just + # assign the dictionary. It is possible for the target model to + # contain keys that are not in the restored model. + for enc_key in from_params[tm_key].keys(): + if tm_key in to_params['vit_encoder']: + to_params['vit_encoder'][tm_key][enc_key] = from_params[tm_key][enc_key] + else: + for tokenizer_name in ['tokenizer2d', 'tokenizer3d', 'tokenizer_spec']: + if tokenizer_name in to_params['tokenizer']: + to_params['tokenizer'][tokenizer_name][tm_key][enc_key] = from_params[ + tm_key][enc_key] + + +def init_embedding(to_params, from_params, config): + """Initialize input embedding.""" + if config.init_from.get('restore_input_embedding', True): + input_kernel = to_params['embedding']['kernel'] + restored_kernel = from_params['kernel'] + restored_bias = from_params['bias'] + if input_kernel.shape != restored_kernel.shape: + kernel_init_method = config.model.modalities.video.kernel_init_method + if kernel_init_method == 'average_frame_initializer': + # This corresponds to "filter inflation" in + # J Carreira and A Zisserman. Quo vadis, action recognition? + # A new model and the kinetics dataset. CVPR 2017" + logging.info('Initializing input kernel with filter inflation.') + t = input_kernel.shape[0] + restored_kernel = np.expand_dims(restored_kernel, axis=0) + restored_kernel = np.tile(restored_kernel, [t, 1, 1, 1, 1]) / t + elif kernel_init_method == 'average_arp_frame_initializer': + # This corresponds to a combination of filter inflation and + # the approximate rank pooling described in + # H Bilen et al. Action Recognition with Dynamic Image Networks. + # PAMI 2017. + logging.info('Initialzing input kernel with ARP inflation') + t = input_kernel.shape[0] + restored_kernel = np.expand_dims(restored_kernel, axis=0) + restored_kernel = np.tile(restored_kernel, [t, 1, 1, 1, 1]) + + def average_arp(length): + # Implements Equation 3 of Bilen et al. PAMI 2017. + array = np.arange(1, length + 1) + + harmonic = np.zeros((length + 1)) + harmonic[1:] = np.cumsum(1.0 / array) + + array = 2 * (length - array + 1) - (length + 1) * ( + harmonic[-1] - harmonic[:-1]) + return array + + normalizer = average_arp(t) / t + normalizer = np.reshape(normalizer, [t, 1, 1, 1, 1]) + restored_kernel = restored_kernel * normalizer + elif kernel_init_method == 'central_frame_initializer': + logging.info('Initializing input kernel to select centre frame.') + central_time_index = input_kernel.shape[0] // 2 + temp = np.zeros(input_kernel.shape) + temp[central_time_index] = restored_kernel.copy() + restored_kernel = temp + else: + raise AssertionError( + 'Unknown input kernel initialization {}'.format(kernel_init_method)) + + to_params['embedding']['kernel'] = restored_kernel + to_params['embedding']['bias'] = restored_bias + else: + logging.info('Not restoring input embedding parameters') + + +def get_cls_token_and_video_frames(config): + """Returns whether there is CLS token and the number of video frames.""" + + has_cls_token = False + num_video_frames = None + + for ds_name, cfg in config.datasets.items(): + # TODO(vlikhosherstov): Add more datasets. + if ds_name in ['kinetics400', 'moments_in_time', 'epic_kitchens']: + num_video_frames = cfg.num_frames + + for head_type, head_cfg in config.model.heads.items(): + for cfg in head_cfg.values(): + if head_type in ['label', 'multilabel', 'bow' + ] and cfg.classifier in ['token', '0']: + has_cls_token = True + + return has_cls_token, num_video_frames diff --git a/scenic/projects/polyvit/polyvit_base_model.py b/scenic/projects/polyvit/polyvit_base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..05db22a90b3d45b1a7fb3018f809bdff0259e175 --- /dev/null +++ b/scenic/projects/polyvit/polyvit_base_model.py @@ -0,0 +1,420 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class for models working with polyvit.""" + +import functools +from typing import Any, Dict, Optional, Tuple, List + +from absl import logging +from flax.training import common_utils +from immutabledict import immutabledict +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils +from scenic.model_lib.base_models.classification_model import classification_metrics_function +from scenic.model_lib.base_models.encoder_decoder_model import encoder_decoder_metrics_function +from scenic.model_lib.base_models.multilabel_classification_model import multilabel_classification_metrics_function +from scenic.projects.vivit import model_utils as vivit_model_utils + + +class Task: + """Defines name of all possible tasks.""" + BOW = 'bow' + SEQ = 'seq' + LABEL = 'label' + MULTILABEL = 'multilabel' + MULTIHEADLABEL = 'multiheadlabel' + FEWSHOT = 'fewshot' # This is a special task for a fewshot bottleneck. + + +class Modality: + """Defines name of all possible modalities.""" + IMAGE = 'image' + VIDEO = 'video' + AUDIO = 'audio' # Represented as a spectrogram. + + +_BOW_CLASSIFICATION_METRICS = immutabledict({ + 'prec@1': (model_utils.weighted_top_one_correctly_classified, + model_utils.num_examples), + 'loss': (model_utils.weighted_unnormalized_sigmoid_cross_entropy, + model_utils.num_examples) +}) + +_MULTIHEADLABEL_METRICS = immutabledict({ + 'accuracy': (model_utils.weighted_correctly_classified, + model_utils.num_examples), + 'accuracy_top_5': (functools.partial( + model_utils.weighted_topk_correctly_classified, + k=5), model_utils.num_examples), + 'loss': (model_utils.weighted_unnormalized_softmax_cross_entropy, + model_utils.num_examples) +}) + + +def bow_classification_metrics_function( + logits: jnp.ndarray, + batch: base_model.Batch, + target_is_multihot: bool = False, + metrics: base_model.MetricNormalizerFnDict = _BOW_CLASSIFICATION_METRICS, +) -> Dict[str, Tuple[float, int]]: + """Calcualte metrics for the Bag of Words classification task. + + Currently we assume each metric_fn has the API: + ```metric_fn(logits, targets, weights)``` + and returns an array of shape [batch_size]. We also assume that to compute + the aggregate metric, one should sum across all batches, then divide by the + total samples seen. In this way we currently only support metrics of the 1/N + sum f(inputs, targets). Note, the caller is responsible for dividing by + the normalizer when computing the mean of each metric. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + target_is_multihot: If the target is a multi-hot vector. + metrics: The multi-label classification metrics to evaluate. The key is the + name of the metric, and the value is the metrics function. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples of + (metric, normalizer). + """ + if target_is_multihot: + multihot_target = batch['label'] + else: + # This is to support running a multi-label classification model on + # single-label classification tasks: + multihot_target = common_utils.onehot(batch['label'], logits.shape[-1]) + + # multihot_target is initially one-hot of shape (bs, len, vocab_size), + # while we actually need multi-hot of shape (bs, vocab_size). + multihot_target = multihot_target.max(axis=-2) + + weights = batch.get('batch_mask') # batch_mask might not be defined + + # This psum is required to correctly evaluate with multihost. Only host 0 + # will report the metrics, so we must aggregate across all hosts. The psum + # will map an array of shape [n_global_devices, batch_size] -> [batch_size] + # by summing across the devices dimension. The outer sum then sums across the + # batch dim. The result is then we have summed across all samples in the + # sharded batch. + evaluated_metrics = {} + for key, val in metrics.items(): + evaluated_metrics[key] = model_utils.psum_metric_normalizer( # pytype: disable=wrong-arg-types # jax-ndarray + (val[0](logits, multihot_target, weights), # pytype: disable=wrong-arg-types # jax-types + val[1](logits, multihot_target, weights))) # pytype: disable=wrong-arg-types # jax-types + return evaluated_metrics # pytype: disable=bad-return-type # jax-types + + +def multihead_classification_metrics_function( + logits, + batch, + metrics: base_model.MetricNormalizerFnDict = _MULTIHEADLABEL_METRICS, + class_splits: Optional[jnp.ndarray] = None, + split_names: Optional[List[str]] = None, +) -> Dict[str, Any]: + """Returns a callable metric function for the multihead classification task. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + metrics: The multi-label classification metrics to evaluate. The key is the + name of the metric, and the value is the metrics function. + class_splits: start indices of class splits. + split_names: names of class splits. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples of + (metric, normalizer). + """ + + one_hot_targets = batch['label'] + weights = batch.get('batch_mask') # batch_mask might not be defined + + logit_splits = jnp.split(logits, class_splits, axis=-1)[:-1] + one_hot_target_splits = jnp.split( + one_hot_targets, class_splits, axis=-1)[:-1] + + evaluated_metrics = {} + total_loss = [0.0, 0] + for logits_i, one_hot_targets_i, name in zip(logit_splits, + one_hot_target_splits, + split_names): + for key, val in metrics.items(): + evaluated_metrics[ + f'{name}_{key}'] = model_utils.psum_metric_normalizer( # pytype: disable=wrong-arg-types # jax-ndarray + (val[0](logits_i, one_hot_targets_i, + weights), val[1](logits_i, one_hot_targets_i, + weights))) + if key == 'loss': + total_loss[0] += evaluated_metrics[f'{name}_{key}'][0] + total_loss[1] += evaluated_metrics[f'{name}_{key}'][1] + evaluated_metrics['total_loss'] = tuple(total_loss) + + if len(class_splits) == 2: + pairwise_acc = model_utils.psum_metric_normalizer( + (vivit_model_utils.joint_accuracy(logits, one_hot_targets, class_splits, + weights), + model_utils.num_examples(logits, one_hot_targets, weights))) + pairwise_top_five = model_utils.psum_metric_normalizer( + (vivit_model_utils.joint_top_k( + logits, one_hot_targets, class_splits, k=5, weights=weights), + model_utils.num_examples(logits, one_hot_targets, weights))) + eval_name = f'{split_names[0]}-{split_names[1]}' + evaluated_metrics[f'{eval_name}_accuracy'] = pairwise_acc + evaluated_metrics[f'{eval_name}_accuracy_top_5'] = pairwise_top_five + + return evaluated_metrics + + +def classification_metrics_function_with_acc_top_5(*args, **kwargs): + """A wrapper over classification_metrics_function which has accuracy_top_5.""" + return classification_metrics_function( + *args, metrics=_MULTIHEADLABEL_METRICS, **kwargs) + + +_METRICS_FUNCTIONS = { + Task.BOW: + bow_classification_metrics_function, + Task.SEQ: + encoder_decoder_metrics_function, + Task.LABEL: classification_metrics_function_with_acc_top_5, + Task.MULTILABEL: + multilabel_classification_metrics_function, + Task.MULTIHEADLABEL: + multihead_classification_metrics_function +} + + +def polyvit_metrics_function( + logits: jnp.ndarray, + batch: base_model.Batch, + dataset_name: str, + dataset_meta_data: Dict[str, Any], + class_splits: Dict[str, Any], + split_names: Dict[str, Any] +) -> Dict[str, Tuple[float, int]]: + """Defines and computes metrics for the polyvit model. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + dataset_name: The name of the dataset used for the task. + dataset_meta_data: Metadata of the dataset we are using. + class_splits: start indices of class splits for multi-head classification + tasks. + split_names: names of class splits for multi-head classification tasks. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples of + (metric, normalizer). + """ + + current_dataset_meta_data = dataset_meta_data[dataset_name] + task = current_dataset_meta_data['task'] + + kwargs = {} + + if task in [Task.MULTILABEL, Task.BOW]: + kwargs = { + 'target_is_multihot': + current_dataset_meta_data.get('target_is_onehot', False) + } + elif task == Task.MULTIHEADLABEL: + kwargs = { + 'class_splits': class_splits[dataset_name], + 'split_names': split_names[dataset_name] + } + else: + kwargs = { + 'target_is_onehot': + current_dataset_meta_data.get('target_is_onehot', False) + } + + return _METRICS_FUNCTIONS[task](logits, batch, **kwargs) # pytype: disable=wrong-keyword-args + + +def compute_multihead_label_loss(logits: jnp.ndarray, + one_hot_targets: jnp.ndarray, + weights: Optional[jnp.ndarray], + class_splits: Optional[jnp.ndarray], + label_smoothing: Optional[float] = None): + """Computes loss for the multi-head label task. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + one_hot_targets: ground truth labels of the same shape as logits. + weights: None or array of shape [batch x ...] (rank of one_hot_targets -1). + class_splits: start indices of class splits. + label_smoothing: float scalar to use to smooth the one-hot labels. + + Returns: + Loss value. + """ + + if logits.shape[-1] != class_splits[-1]: + raise AssertionError('Logit dimension must be equal to number of classes') + + logit_splits = jnp.split(logits, class_splits, axis=-1)[:-1] + one_hot_target_splits = jnp.split( + one_hot_targets, class_splits, axis=-1)[:-1] + + sof_ce_losses = [ + model_utils.weighted_softmax_cross_entropy( + logits, one_hot_targets, weights, label_smoothing) + for logits, one_hot_targets in zip(logit_splits, one_hot_target_splits) + ] + sof_ce_loss = jnp.mean(jnp.array(sof_ce_losses)) + + return sof_ce_loss + + +_LOSS_FUNCTIONS = {Task.BOW: model_utils.weighted_sigmoid_cross_entropy, + Task.SEQ: model_utils.weighted_softmax_cross_entropy, + Task.LABEL: model_utils.weighted_softmax_cross_entropy, + Task.MULTILABEL: model_utils.weighted_sigmoid_cross_entropy, + Task.MULTIHEADLABEL: compute_multihead_label_loss} + + +class PolyVitBaseModel(base_model.BaseModel): + """PolyVit base model.""" + + def __init__(self, config: Optional[ml_collections.ConfigDict], + dataset_meta_data: Dict[str, Dict[str, Any]]) -> None: + if config is None: + logging.warning('You are creating the model with default config.') + config = self.default_flax_model_config() + self.config = config + self.dataset_meta_data = dataset_meta_data + self.flax_model = self.build_flax_model() + + def _get_splits(self): + """Returns class_splits and split_names.""" + + class_splits = {} + split_names = {} + + for ds_name, cfg in self.config.datasets.items(): + # The first condition is needed for disabling datasets in hyperparameter + # sweeps. + if ds_name in self.dataset_meta_data and self.dataset_meta_data[ds_name][ + 'task'] == Task.MULTIHEADLABEL: + assert cfg.get('class_splits'), ('class_splits must be specified') + class_splits[ds_name] = np.cumsum(cfg.class_splits) + if cfg.get('split_names'): + split_names[ds_name] = cfg.split_names + else: + split_names[ds_name] = [ + str(x + 1) for x in range(len(class_splits[ds_name])) + ] + + return class_splits, split_names + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + batch)``` + """ + del split # For all splits, we return the same metric functions. + class_splits, split_names = self._get_splits() + return functools.partial( + polyvit_metrics_function, dataset_meta_data=self.dataset_meta_data, + class_splits=class_splits, split_names=split_names) + + def loss_function(self, # pytype: disable=signature-mismatch # overriding-parameter-count-checks + logits: jnp.ndarray, + batch: base_model.Batch, + dataset_name: str, + model_params: Optional[jnp.ndarray] = None) -> float: + """Returns softmax cross entropy loss with an L2 penalty on the weights. + + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + dataset_name: The name of the dataset used for the task. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + weights = batch.get('batch_mask') + class_splits, _ = self._get_splits() + + current_dataset_meta_data = self.dataset_meta_data[dataset_name] + task = current_dataset_meta_data['task'] + + if current_dataset_meta_data.get( + 'target_is_onehot', False): + one_or_multi_hot_targets = batch['label'] + elif task == Task.MULTIHEADLABEL: + raise ValueError('Target labels should be one-hot.') + else: + one_or_multi_hot_targets = common_utils.onehot(batch['label'], + logits.shape[-1]) + + if self.config.get('label_smoothing_params') is not None: + label_smoothing = self.config.label_smoothing_params.get(dataset_name, + None) + else: + label_smoothing = self.config.get('label_smoothing') + + kwargs = {'label_smoothing': label_smoothing} + + if task == Task.MULTIHEADLABEL: + kwargs['class_splits'] = class_splits[dataset_name] + + if task == Task.BOW: + # one_or_multi_hot_targets is initially one-hot of shape (bs, len, + # vocab_size), while we actually need multi-hot of shape (bs, vocab_size). + one_or_multi_hot_targets = one_or_multi_hot_targets.max(axis=-2) + + loss = _LOSS_FUNCTIONS[task]( + logits, + one_or_multi_hot_targets, + weights, + **kwargs) + + config_loss_weight = self.config.get( + 'loss_weights', ml_collections.ConfigDict()) + loss_weight = config_loss_weight.get(dataset_name, 1.0) + + loss = loss * loss_weight + + if self.config.get('l2_decay_factor') is None: + total_loss = loss + else: + l2_loss = model_utils.l2_regularization(model_params) + total_loss = loss + 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss # pytype: disable=bad-return-type # jnp-type + + def build_flax_model(self): + raise NotImplementedError('Subclasses must implement build_flax_model().') + + def default_flax_model_config(self): + """Default config for the flax model that is built in `build_flax_model`. + + This function in particular serves the testing functions and supposed to + provide config tha are passed to the flax_model when it's build in + `build_flax_model` function, e.g., `model_dtype_str`. + """ + raise NotImplementedError( + 'Subclasses must implement default_flax_model_config().') diff --git a/scenic/projects/polyvit/requirements.txt b/scenic/projects/polyvit/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..a8b80d2eae33eb559e6dcbff243d5f4667c34756 --- /dev/null +++ b/scenic/projects/polyvit/requirements.txt @@ -0,0 +1,2 @@ +dmvr @ git+https://github.com/deepmind/dmvr.git +seaborn>=0.11.2 diff --git a/scenic/projects/polyvit/tests/__init__.py b/scenic/projects/polyvit/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/polyvit/tests/test_layers.py b/scenic/projects/polyvit/tests/test_layers.py new file mode 100644 index 0000000000000000000000000000000000000000..f7cd7df38cab9698dc77f412ded39f3c40b20830 --- /dev/null +++ b/scenic/projects/polyvit/tests/test_layers.py @@ -0,0 +1,113 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for PolyViT layers.""" + +import functools + +from absl.testing import absltest +from absl.testing import parameterized +from jax import random +import jax.numpy as jnp +import ml_collections +from scenic.projects.polyvit import layers + + +class PolyViTLayersTests(parameterized.TestCase): + """Tests for modules in polyvit layers.py.""" + + @parameterized.named_parameters([ + ('test_32x32', (4, 32, 32, 32), (4, 64, 128)), + ('test_64x64', (4, 64, 64, 32), (4, 256, 128)), + ('test_5d', (4, 32, 32, 32, 32), None), + ]) + def test_tokenizer2d_output_shape(self, input_shape, expected_output_shape): + """Tests Tokenizer2D.""" + rng = random.PRNGKey(0) + x = jnp.ones(input_shape) + patches = ml_collections.ConfigDict({'size': (4, 4)}) + hidden_size = 128 + tokenizer_2d_def = functools.partial( + layers.Tokenizer2D, + hidden_size=hidden_size, + patches=patches, + mlp_dim=512, + num_layers=0, + num_heads=2, + ) + + if expected_output_shape is not None: + y, _ = tokenizer_2d_def().init_with_output( + {'params': rng, 'dropout': rng}, + x, + train=True, + stochastic_droplayer_rate=None, + dataset='', + ) + # Test outputs shape. + self.assertEqual(y.shape, expected_output_shape) + else: + with self.assertRaises(ValueError): + tokenizer_2d_def().init_with_output( + {'params': rng, 'dropout': rng}, + x, + train=True, + stochastic_droplayer_rate=None, + dataset='', + ) + + @parameterized.named_parameters([ + ('test_16x32x32', (4, 16, 32, 32, 32), (4, 512, 128)), + ('test_16x64x64', (4, 16, 64, 64, 32), (4, 2048, 128)), + ('test_4d', (4, 32, 32, 32), None), + ]) + def test_tokenizer3d_output_shape(self, input_shape, expected_output_shape): + """Tests Tokenizer3D.""" + rng = random.PRNGKey(0) + x = jnp.ones(input_shape) + patches = ml_collections.ConfigDict({'size': (2, 4, 4)}) + hidden_size = 128 + tokenizer_3d_def = functools.partial( + layers.Tokenizer3D, + hidden_size=hidden_size, + patches=patches, + kernel_init_method=None, + mlp_dim=512, + num_layers=0, + num_heads=2, + ) + + if expected_output_shape is not None: + y, _ = tokenizer_3d_def().init_with_output( + {'params': rng, 'dropout': rng}, + x, + train=True, + stochastic_droplayer_rate=None, + dataset='', + ) + # Test outputs shape. + self.assertEqual(y.shape, expected_output_shape) + else: + with self.assertRaises(ValueError): + tokenizer_3d_def().init_with_output( + {'params': rng, 'dropout': rng}, + x, + train=True, + stochastic_droplayer_rate=None, + dataset='', + ) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/polyvit/train_utils.py b/scenic/projects/polyvit/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..ecc5c4da6243cfc1eb2796cb350f648c4aaf8945 --- /dev/null +++ b/scenic/projects/polyvit/train_utils.py @@ -0,0 +1,214 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for PolyVit trainer.""" + +from typing import Any, Dict, Optional, Tuple + +from absl import logging +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.dataset_lib import datasets +from scenic.train_lib import train_utils +from tensorflow.io import gfile + + +def get_num_training_steps( + config: ml_collections.ConfigDict, + datasets_metadata: Dict[str, Dict[str, Any]]) -> Tuple[int, Optional[int]]: + """Calculates the total number of training step and possibly steps_per_epoch. + + The main training loop is based on number of training steps. Thus, for + datasets + that we want to train based on number of epochs, we need to calculate the + total number of training steps. This function looks for `num_training_steps` + in config, if it exists it returns that as the total step and `None` as + `steps_per_epoch`. If num_training_steps doesn't exist, then it looks for + `num_training_epochs` and given the size of training data calculates the total + steps and steps_per_epoch. In this computation, we assume that + drop_remainder=True. + + Args: + config: Configuration of the experiment. + datasets_metadata: Meta-data that is generated by the dataset_builder. + + Returns: + total_steps: Total number of training steps. + steps_per_epoch: Number of steps in every epoch. + """ + num_total_train_examples = 0 + for ds_metadata in datasets_metadata.values(): + num_total_train_examples += ds_metadata.get('num_train_examples', 0) + + # We either use num_training_epochs or num_training_steps. + steps_per_epoch = num_total_train_examples // get_average_batch_size(config) + + if config.get('num_training_steps'): + assert not config.get('num_training_epochs') + return config.num_training_steps, steps_per_epoch or None + else: + assert config.num_training_epochs and not config.get('num_training_steps') + return (steps_per_epoch * config.num_training_epochs), steps_per_epoch + + +def get_average_batch_size(config: ml_collections.ConfigDict): + """Computes average batch size.""" + + if config.get('batch_size') is not None: + return config.batch_size + + batch_sizes_sum = 0 + n_datasets = 0 + + for bs in config.batch_sizes.values(): + batch_sizes_sum += bs + n_datasets += 1 + + average_batch_size = int(batch_sizes_sum // n_datasets) + + return average_batch_size + + +def get_datasets(config: ml_collections.ConfigDict, + data_rng: jnp.ndarray, + dataset_service_address: Optional[str] = None): + """Creates dataset from config.""" + + device_count = jax.device_count() + logging.info('device_count: %d', device_count) + logging.info('num_hosts : %d', jax.process_count()) + logging.info('host_id : %d', jax.process_index()) + + dataset_dict = {} + for ds_name, cfg in config.datasets.items(): + + # This key is needed for disabling datasets in hyperparameter sweeps. + if cfg.get('dont_use') is not None and cfg.get('dont_use'): + continue + + if config.get('batch_sizes') is not None: + batch_size = config.batch_sizes.get(ds_name) + else: + batch_size = config.batch_size + + if batch_size % device_count > 0: + raise ValueError( + f'Batch size ({batch_size}) of {ds_name} must be divisible ' + f'by the number of devices ({device_count})') + + if config.get('eval_batch_sizes') is not None: + eval_batch_size = config.eval_batch_sizes.get(ds_name) + else: + eval_batch_size = config.get('eval_batch_size', batch_size) + + if eval_batch_size % device_count > 0: + raise ValueError( + f'Eval batch size ({eval_batch_size}) of {ds_name} must be ' + f'divisible by the number of devices ({device_count})') + + local_batch_size = batch_size // jax.process_count() + eval_local_batch_size = eval_batch_size // jax.process_count() + device_batch_size = batch_size // device_count + logging.info('local_batch_size of %s : %d', ds_name, local_batch_size) + logging.info('device_batch_size of %s : %d', ds_name, device_batch_size) + + shuffle_seed = cfg.get('shuffle_seed', None) + if dataset_service_address and shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you want ' + 'to run with dataset service.') + + # 'bit' consists of many datasets, so we do this to have a unique dataset + # key if we train on multiple datasets from 'bit'. E.g. ds_name = + # 'bit_caltech'. + if ds_name.startswith('bit_'): + dataset_builder = datasets.get_dataset('bit') + elif ds_name in ['kinetics400', 'moments_in_time']: + dataset_builder = datasets.get_dataset('video_tfrecord_dataset') + elif ds_name in ['vggsound', 'audioset']: + dataset_builder = datasets.get_dataset('audiovisual_tfrecord_dataset') + else: + dataset_builder = datasets.get_dataset(ds_name) + + dataset_rng, data_rng = jax.random.split(data_rng) + ds = dataset_builder( + batch_size=local_batch_size, + eval_batch_size=eval_local_batch_size, + num_shards=jax.local_device_count(), + dtype_str=cfg.data_dtype_str, + rng=dataset_rng, + shuffle_seed=shuffle_seed, + dataset_configs=cfg, + dataset_service_address=dataset_service_address) + + # Add task information to the dataset meta_data: + ds.meta_data['task'] = cfg.task + ds.meta_data['modality'] = cfg.get('modality', 'image') + dataset_dict[ds_name] = ds + + return dataset_dict + + +def restore_pretrained_big_vision_checkpoint( + checkpoint_path: str, +) -> train_utils.TrainState: + """Loads and converts a big_vision checkpoint to a scenic train state. + + The model weights, global step and accumulated train time are extracted. + Optimizer state, such as the momentum, is not extracted. + + Args: + checkpoint_path: Path to big_vision checkpoint. + + Returns: + restored_train_state: Scenic train state with model weights, global step + and accumulated training time. + """ + + def unflatten_dict( + flattened: Dict[str, Any], separator: str = '/', leaf_idx: int = -1 + ) -> Dict[str, Any]: + unflattened = {} + for k, v in flattened.items(): + subtree = unflattened + if leaf_idx != 0: + path = k.split(separator)[:leaf_idx] + else: + path = k.split(separator) + for k2 in path[:-1]: + if k2 not in subtree: + subtree[k2] = {} + subtree = subtree[k2] + subtree[path[-1]] = v + return unflattened + + logging.info('Loading big_vision checkpoint from %s', checkpoint_path) + checkpoint_data = np.load(gfile.GFile(checkpoint_path, 'rb')) + tree = unflatten_dict(checkpoint_data, separator='/', leaf_idx=0) + + restored_params = tree['opt']['target'] + restored_params = checkpoints.convert_pre_linen(restored_params) + restored_params = dict(restored_params) + train_state = train_utils.TrainState() + # pytype: disable=wrong-arg-types + restored_train_state = train_state.replace( # pytype: disable=attribute-error + params=restored_params + ) + # pytype: enable=wrong-arg-types + + return restored_train_state diff --git a/scenic/projects/polyvit/trainer.py b/scenic/projects/polyvit/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..a3bde9f5ad631505dcd043e9c7a828d7151a04f1 --- /dev/null +++ b/scenic/projects/polyvit/trainer.py @@ -0,0 +1,789 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""PolyVit Training Script.""" + +import collections +import copy +import functools +from typing import Any, Callable, Dict, Optional, Tuple + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries import optimizers as jax_optimizers +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.projects.mbt import trainer as mbt_trainer +from scenic.projects.polyvit import polyvit_base_model +from scenic.projects.polyvit import train_utils as polyvit_train_utils +from scenic.projects.vivit import evaluation_lib +from scenic.train_lib import optax as scenic_optax +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils +from scenic.train_lib.transfer import fewshot_utils + + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray], str], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, str, Optional[jnp.ndarray]], float] +LrFns = Dict[str, Callable[[jnp.ndarray], jnp.ndarray]] + + +def train_step( + task: str, + dataset: str, + modality: str, + train_state: train_utils.TrainState, + batch: Batch, + flax_model: nn.Module, + loss_fn: LossFn, + lr_fns: LrFns, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False, +) -> Tuple[ + train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, Any] +]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + task: The task for which we are running the train_step. + dataset: The name of the dataset used for the task. + modality: The modality of the inputs in the batch. + train_state: The state of training including the current global_step, + model_state, rng, and optimizer. The buffer of this argument can be + donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + lr_fns: The learning rate fns used for the optimizer in train_state. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: bool; Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, computed metrics, and learning rate for logging. + """ + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + + mixup_config = config.get('mixups', ml_collections.ConfigDict()).get(dataset) + + if mixup_config is not None: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=mixup_config.get('bind_to', 'device'), + ) + if modality == polyvit_base_model.Modality.AUDIO: + batch = mbt_trainer.mixup_modalities( + batch, + mixup_config.alpha, + True, + mixmod=mixup_config.get('mixmod', False), + rng=mixup_rng, + ) + batch['label'] = batch['label']['all'] + elif modality == polyvit_base_model.Modality.VIDEO: + batch = dataset_utils.mixup( + batch, + mixup_config.alpha, + mixup_config.get('image_format', 'NTHWC'), + rng=mixup_rng, + ) + else: + raise ValueError(f'Mixup not supported for modality {modality}') + + if modality == polyvit_base_model.Modality.AUDIO: + batch['inputs'] = batch['inputs']['spectrogram'] + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device' + ) + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + logits, new_model_state = flax_model.apply( + variables, + x=batch['inputs'], + targets=batch['label'], + task=task, + dataset=dataset, + modality=modality, + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug, + ) + loss = loss_fn(logits, batch, dataset, variables['params']) + return loss, (new_model_state, logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (train_cost, (new_model_state, logits)), grad = compute_gradient_fn( + train_state.params + ) + del train_cost + + # We clip gradients before pmean in ViViT and AViT and after in ViT, + # following the original authors' code. + if config.get('max_grad_norm', None) is not None and modality in [ + polyvit_base_model.Modality.VIDEO, + polyvit_base_model.Modality.AUDIO, + ]: + grad = jax_optimizers.clip_grads(grad, config.max_grad_norm) + + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if ( + config.get('max_grad_norm', None) is not None + and modality == polyvit_base_model.Modality.IMAGE + ): + grad = jax_optimizers.clip_grads(grad, config.max_grad_norm) + + updates, new_opt_state = train_state.tx.update( + grad, train_state.opt_state, train_state.params + ) + new_params = optax.apply_updates(train_state.params, updates) + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)]) + ) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + for name, lr_fn in lr_fns.items(): + lr_name = 'learning_rate' if name == 'all' else f'learning_rate_{name}' + training_logs[lr_name] = lr_fn(train_state.global_step) + + metrics = metrics_fn(logits, batch, dataset) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng, + ) + + return new_train_state, metrics, training_logs + + +def eval_step( + task: str, + dataset: str, + modality: str, + train_state: train_utils.TrainState, + batch: Batch, + flax_model: nn.Module, + metrics_fn: MetricFn, + debug: Optional[bool] = False, +) -> Tuple[Dict[str, Tuple[float, int]], jnp.ndarray]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + task: Task for which we are running the eval_step. + dataset: The name of the dataset used for the task. + modality: The modality for the train step. + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and logits. + """ + + if modality == polyvit_base_model.Modality.AUDIO: + batch['inputs'] = batch['inputs']['spectrogram'] + + variables = {'params': train_state.params, **train_state.model_state} + logits = flax_model.apply( + variables, + x=batch['inputs'], + targets=batch['label'], + task=task, + dataset=dataset, + modality=modality, + train=False, + mutable=False, + debug=debug, + ) + metrics = metrics_fn(logits, batch, dataset) + + return metrics, logits + + +def representation_fn( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + representation_layer: str, + gather_to_host: bool = True, +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Feeds the inputs to the model and returns their representations. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data from the dataset. + flax_model: A Flax model. + representation_layer: The name of the layer to use as the representation. + gather_to_host: Whether to gather results from all devices to the host, + rather than leaving them distributed. + + Returns: + Representation learned by the model for the given inputs and the labels and + masks. If `gather_to_host` is True, these are collected from all hosts. + """ + modality = 'image' + task = polyvit_base_model.Task.FEWSHOT + + variables = {'params': train_state.params, **train_state.model_state} + + representation_layer_parts = representation_layer.split('/') + filter_rep = lambda mdl, _: mdl.name == representation_layer_parts[-1] + _, model_state = flax_model.apply( + variables, + x=batch['inputs'], + targets=batch['label'], + task=task, + modality=modality, + train=False, + capture_intermediates=filter_rep, + mutable=['intermediates'], + debug=False, + ) + if 'intermediates' not in model_state: + raise ValueError(f'Layer with name "{representation_layer}"' + ' does not exist in your model.') + + representation = model_state['intermediates'] + for rep_layer in representation_layer_parts: + if rep_layer: + representation = representation[rep_layer] + representation = representation['__call__'][0] + if gather_to_host: + representation = jax.lax.all_gather(representation, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return representation, batch['label'], batch['batch_mask'] + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset_dict: Dict[str, dataset_utils.Dataset], + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset_dict: A dict of datasets that each has train_iter, eval_iter, + meta_data, and optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current global_step, + model_state, rng, and the optimizer), train_summary and eval_summary which + are dict of metrics (from the last evaluation and train metric logging + respectively). These outputs are used for regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + datasets_metadata = {name: ds.meta_data for name, ds in dataset_dict.items()} + + # Build the loss_and_metrics_fn, metrics, and flax_model. + model = model_cls(config, datasets_metadata) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + input_spec = {} + for ds_name, meta_data in datasets_metadata.items(): + input_spec_key = (('dataset', ds_name), ('task', meta_data['task']), + ('modality', meta_data['modality'])) + + if meta_data['modality'] == polyvit_base_model.Modality.AUDIO: + input_shape = meta_data['input_shape']['spectrogram'] + else: + input_shape = meta_data['input_shape'] + + if meta_data['task'] in [ + polyvit_base_model.Task.LABEL, + polyvit_base_model.Task.MULTILABEL, + polyvit_base_model.Task.MULTIHEADLABEL, + ]: + input_spec[input_spec_key] = [(input_shape, + meta_data.get('input_dtype', jnp.float32))] + else: + raise ValueError( + f'Input specs for the task "{meta_data["task"]}" is not defined.' + ) + + (params, model_state, num_trainable_params, gflops) = ( + train_utils.initialize_multitask_model( + model_def=model.flax_model, + input_spec=input_spec, + config=config, + rngs=init_rng, + ) + ) + + # Multi-task training strategy of 'Weighted Task Sampling': + all_datasets = [] + all_datasets_num_train_examples = [] + for name, metadata in datasets_metadata.items(): + all_datasets.append(name) + all_datasets_num_train_examples.append( + metadata.get('num_train_examples', 0) + ) + ds_indices_per_step = [] + for index, ds_name in enumerate(all_datasets): + n_steps = config.batch_sampling_strategy_steps.get(ds_name) + ds_indices_per_step.append(jnp.full((n_steps,), index)) + ds_indices_per_step = jnp.concatenate(ds_indices_per_step) + ds_indices_per_step = jax.random.permutation( + jax.random.PRNGKey(0), ds_indices_per_step + ) + # Calculate the total number of training steps. + total_steps, steps_per_epoch = polyvit_train_utils.get_num_training_steps( + config, datasets_metadata + ) + + def get_dataset_at_step(step): + return all_datasets[ds_indices_per_step[step]] # pytype: disable=unsupported-operands # jax-types + + # Create LR schedules and optimizer. + schedule_fns = scenic_optax.make_schedule(config.get('schedule')) + + def update_schedule_fn(sfn): + (re, name, (fn, base_lr)) = sfn + updated_lr = [] + for step in range(1, total_steps + 1): + dataset = get_dataset_at_step(step) + updated_lr.append( + fn(step) * config.get('lr_coefs', {dataset: 1.0})[dataset] + ) + updated_lr = jnp.array(updated_lr) + return (re, name, (lambda step: updated_lr[step], base_lr)) + + schedule_fns = [update_schedule_fn(sfn) for sfn in schedule_fns] + + tx, _ = scenic_optax.make(config.optimizer, schedule_fns, params) + opt_state = tx.init(params) + + rng, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}, + ) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state + ) + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + if ( + start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None + ): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + if init_checkpoint_path is not None: + if config.init_from.get('init_from_vit', False): + checkpoint_format = config.init_from.get('checkpoint_format', 'scenic') + if checkpoint_format == 'scenic': + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, None, assert_exist=True + ) + elif checkpoint_format == 'big_vision': + restored_train_state = ( + polyvit_train_utils.restore_pretrained_big_vision_checkpoint( + init_checkpoint_path + ) + ) + # Config dict in big_vision is not the same format as scenic. + # Therefore, make sure config match the config of the loaded model! + restored_model_cfg = copy.deepcopy(config) + # The following is needed when the restored and target models used a + # different classifier. As big_vision uses a different config dict, we + # have to specify this manually. + + train_state = model.init_from_vit_train_state( + train_state, restored_train_state, restored_model_cfg + ) + elif config.init_from.get('init_from_polyvit', False): + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True + ) + # Load params from the init_model. + train_state = model.init_from_polyvit_train_state( # pytype: disable=attribute-error + train_state, + restored_train_state, + tokenizer_to_use=config.init_from.get('tokenizer_to_use'), + tokenizer_to_init=config.init_from.get('tokenizer_to_init'), + resolution=config.init_from.get('resolution'), + ) + elif config.init_from.get('init_from_mbt', False): + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, None, assert_exist=True + ) + # Load params from the init_model. + train_state = model.init_from_mbt_train_state( # pytype: disable=attribute-error + train_state, + restored_train_state, + tokenizer_to_init=config.init_from.get( + 'tokenizer_to_init', 'tokenizer_spec' + ), + resolution=config.init_from.get('resolution'), + ) + elif config.init_from.get('init_from_vivit', False): + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, None, assert_exist=True + ) + # Load params from the init_model. + train_state = model.init_from_vivit_train_state( # pytype: disable=attribute-error + train_state, + restored_train_state, + tokenizer_to_init=config.init_from.get( + 'tokenizer_to_init', 'tokenizer3d' + ), + resolution=config.init_from.get('resolution'), + ) + else: + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True + ) + # Load params from the init_model. + train_state = model.init_from_train_state( # pytype: disable=attribute-error + train_state, restored_train_state, restored_model_cfg + ) + del restored_train_state + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + lr_fns={name: lr_fn for _, name, (lr_fn, _) in schedule_fns}, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train, + ), + axis_name='batch', + static_broadcasted_argnums=(0, 1, 2), # Task, dataset and modality args. + # We can donate both buffers of train_state and train_batch. + donate_argnums=(3, 4), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + debug=config.debug_eval, + ), + axis_name='batch', + static_broadcasted_argnums=(0, 1, 2), # Task, dataset and modality args. + # We can donate the eval_batch's buffer. + donate_argnums=(4,), + ) + if 'fewshot' in config: + representation_fn_fewshot = functools.partial( + representation_fn, + flax_model=model.flax_model, + representation_layer=config.fewshot.representation_layer, + ) + fewshotter = fewshot_utils.FewShotEvaluator(representation_fn_fewshot, + config.fewshot) + + log_eval_steps = config.get('log_eval_steps') + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + def evaluate( + train_state: train_utils.TrainState, step: int, dataset: str + ) -> Dict[str, Any]: + ds = dataset_dict[dataset] + valid_iter = ds.valid_iter + task = ds.meta_data['task'] + modality = ds.meta_data['modality'] + num_valid_ex = ds.meta_data['num_eval_examples'] + eval_summary = {} + if not isinstance(valid_iter, dict): # Only on validation set. + valid_iter, num_valid_ex = {'valid': valid_iter}, {'valid': num_valid_ex} + + for val_name, val_iter in valid_iter.items(): + num_ex = num_valid_ex[val_name] + is_one_hot = ds.meta_data['target_is_onehot'] + # Ceil rounding such that we include the last incomplete batch. + if config.get('batch_sizes') is not None: + batch_size = config.batch_sizes.get(dataset) + else: + batch_size = config.batch_size + total_eval_steps = int(np.ceil(num_ex / batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + eval_metrics = [] + additional_summary = None + if modality == polyvit_base_model.Modality.AUDIO: + eval_logits = [] + eval_labels = [] + n_classes = ds.meta_data['num_classes'] + for _ in range(steps_per_eval): + eval_batch = next(val_iter) + if is_one_hot: # Which includes multi-hot. + # Ignore the entries with all zero label for evaluation. + eval_batch['batch_mask'] *= eval_batch['label'].max(axis=-1) + e_metrics, logits = eval_step_pmapped(task, dataset, modality, + train_state, eval_batch) + if modality == polyvit_base_model.Modality.AUDIO: + eval_logits.append( + jax.device_get( + logits.reshape( # pytype: disable=attribute-error + [-1, n_classes] + ) + ) + ) + eval_labels.append( + jax.device_get( + eval_batch['label'].reshape( # pytype: disable=attribute-error + [-1, n_classes] + ) + ) + ) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + if modality == polyvit_base_model.Modality.AUDIO: + # Note that this is the Mean AP computed from the examples processed + # by a single host. + additional_summary = evaluation_lib.compute_mean_average_precision( + np.concatenate(eval_logits, axis=0), + np.concatenate(eval_labels, axis=0), + return_per_class_ap=n_classes < 10, + ) + eval_summary.update( + train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + extra_eval_summary=additional_summary, + writer=writer, + prefix=f'{task}/{dataset}/{val_name}', + ) + ) + del eval_metrics + writer.flush() + return eval_summary + + train_metrics = collections.defaultdict(list) + extra_training_logs = collections.defaultdict(list) + train_summary, eval_summary = None, None + + chrono = train_utils.Chrono() + logging.info('Starting training loop at step %d.', start_step) + + chrono.inform( + start_step, + total_steps, + polyvit_train_utils.get_average_batch_size(config), + steps_per_epoch, + ) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer + ) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log.update(gflops) + writer.write_scalars(1, step0_log) + + def get_next_train_batch(step): + dataset = get_dataset_at_step(step) + ds = dataset_dict[dataset] + return ( + next(ds.train_iter), + ds.meta_data['task'], + dataset, + ds.meta_data['modality'], + ) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch, train_task, train_ds, train_modality = get_next_train_batch( + step + ) + train_state, t_metrics, t_logs = train_step_pmapped( + train_task, train_ds, train_modality, train_state, train_batch + ) + # This will accumulate metrics in accelerator memory up to the point that + # we log them. This is no problem for small metrics but may be a problem + # for large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # accelerator and host, which might slow down the training. + train_metrics[(train_task, train_ds)].append(t_metrics) + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + extra_training_logs[(train_task, train_ds)].append(t_logs) + + # Quick indication that training is happening. + logging.log_first_n(logging.INFO, 'Finished training step %d.', 5, step) + for h in hooks: + h(step) + ############### LOG TRAIN SUMMARY ############### + if ( + (step % log_summary_steps == 1) + or (step == total_steps) + or (lead_host and chrono.warmup) + ): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + train_summary = {} + for train_task, train_ds in train_metrics.keys(): + train_summary.update( + train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, + train_metrics[(train_task, train_ds)], + ), + extra_training_logs=jax.tree_util.tree_map( + jax.device_get, + extra_training_logs[(train_task, train_ds)], + ), + writer=writer, + prefix=f'{train_task}/{train_ds}/train', + ) + ) + # Reset metric accumulation for next evaluation cycle. + train_metrics = collections.defaultdict(list) + extra_training_logs = collections.defaultdict(list) + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summaries = [] + for ds_name in dataset_dict.keys(): + eval_summaries.append(evaluate(train_state, step, ds_name)) + chrono.resume() + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 1 and step > 1) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + train_utils.handle_checkpointing(train_state, chrono, workdir) + chrono.resume() + + ##################### FEWSHOT EVALUATION ############################ + if 'fewshot' in config: + # Compute few-shot on-the-fly evaluation. + if (step % config.fewshot.log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('fewshot'): + results = fewshotter.run_all(train_state, config.fewshot.datasets) + fewshotter.log_fewshot_summary( + writer=writer, step=step, results=results + ) + del results + writer.write_scalars(step, {'zz/epoch': step / steps_per_epoch}) + writer.flush() + chrono.resume() # Un-pause now. + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/robust_segvit/README.md b/scenic/projects/robust_segvit/README.md new file mode 100644 index 0000000000000000000000000000000000000000..3ead6e9029db08dd085db92cc01ecf292f4c4b54 --- /dev/null +++ b/scenic/projects/robust_segvit/README.md @@ -0,0 +1,24 @@ +# Robust segvit + +*Robust_segvit* is a pipeline to evaluate the robustness of semantic segmentation models. + +Robust_segvit is developed in [JAX](https://github.com/jax-ml/jax) and uses [Flax](https://github.com/google/flax). + + +## Code structure +This code includes several datasets such as:
+ +cityscapes_variants:
+ - fishyscapes.
+ - cityscapes_c (a corrupted version of cityscapes).
+ +segmentation_datasets:
+ - [ade20k](https://groups.csail.mit.edu/vision/datasets/ADE20K/).
+ - ade20k_ind, the ade20k dataset with 3 classes dropped.
+ - ade20k_ood, the ade20k with only 3 classes for OOD detection.
+ +segmentation_variants:
+ - ade20k_corrupted, the corrupted version of the ade20k dataset.
+ - ade20k_ind_c, the corrupted version of the ade20k_ind dataset.
+ +See [uncertainty_baselines/experimental/robust_segvit](https://github.com/google/uncertainty-baselines/experimental/robust_segvit) for examples on how to use these datasets. diff --git a/scenic/projects/robust_segvit/__init__.py b/scenic/projects/robust_segvit/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/robust_segvit/datasets/__init__.py b/scenic/projects/robust_segvit/datasets/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/robust_segvit/datasets/cityscapes_variants.py b/scenic/projects/robust_segvit/datasets/cityscapes_variants.py new file mode 100644 index 0000000000000000000000000000000000000000..4a0414a457bc064f21912c67a1b3ce3b31b86921 --- /dev/null +++ b/scenic/projects/robust_segvit/datasets/cityscapes_variants.py @@ -0,0 +1,341 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the Cityscapes dataset variants. + + +Supported datasets, set by dataset_configs.dataset_name in the config file: + +cityscapes_corrupted: https://arxiv.org/pdf/1907.07484.pdf +fishyscapes: https://link.springer.com/article/10.1007/s11263-021-01511-6 + +Implementation details: +cityscapes_c: https://github.com/ekellbuch/cityscapes-c +""" + +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax.numpy as jnp +from scenic.dataset_lib import cityscapes_dataset +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf +import tensorflow_datasets as tfds + + +CITYSCAPES_C_CORRUPTIONS = [ + 'gaussian_noise', +] + +FISHYSCAPES_CORRUPTIONS = [ + 'Static', +] + +CITYSCAPES_C_SEVERITIES = range(1, 6) + +DATASET_INFO = { + 'cityscapes': { + 'tfds_name': 'cityscapes', + 'split': 'validation', + 'num_of_examples': 500, + }, + 'cityscapes_corrupted': { + 'tfds_name': 'internal', + 'split': 'validation', + 'num_of_examples': 500, + }, + 'fishycapes': { + 'tfds_name': 'internal', + 'split': 'validation', + 'num_of_examples': 30, + }, +} + +# Adds cityscapes_c +for severity in CITYSCAPES_C_SEVERITIES: + for corruption in CITYSCAPES_C_CORRUPTIONS: + temp_dataset_name = f'cityscapes_corrupted/semantic_segmentation_{corruption}_{severity}' + DATASET_INFO[temp_dataset_name] = { + 'tfds_name': temp_dataset_name, + 'split': 'validation', + 'num_of_examples': 500, + } + +# Adds fishyscapes +for corruption in FISHYSCAPES_CORRUPTIONS: + temp_dataset_name = f'fishyscapes/{corruption}' + DATASET_INFO[temp_dataset_name] = { + 'tfds_name': temp_dataset_name, + 'split': 'validation', + 'num_of_examples': 30, + } + +cityscapes_meta_data = { + 'num_classes': + len([c.id for c in cityscapes_dataset.CLASSES if not c.ignore_in_eval]), + 'class_names': + cityscapes_dataset.get_class_names(), + 'class_colors': + cityscapes_dataset.get_class_colors(), + 'class_proportions': + cityscapes_dataset.get_class_proportions(), +} + +fishyscapes_meta_data = { + 'num_classes': 2, + 'class_names': ['ind', 'ood'], + 'class_colors': [(0, 0, 1), (1, 0, 0)], +} + + +def normalize(image, dtype=tf.float32): + """Normalizes the value of pixels in the given image. + + Args: + image: `Tensor` representing an image binary of arbitrary size. + dtype: Tensorflow data type, Data type of the image. + + Returns: + A normalized image `Tensor`. + """ + image = tf.cast(image, dtype=dtype) + if dtype not in [tf.int32, tf.int64, tf.uint32, tf.uint64]: + image /= tf.constant(255.0, shape=[1, 1, 1], dtype=dtype) + return image + + +def preprocess_example_fishyscapes(example, + train, + dtype=tf.float32, + resize=None, + include_mask=True): + """Preprocesses the given image. + + Args: + example: dict; Example coming from TFDS. + train: bool; Whether to apply training-specific preprocessing or not. + dtype: Tensorflow data type; Data type of the image. + resize: sequence; [H, W] to which image and labels should be resized. + include_mask: include batch_mask to ignore specific classes. + Returns: + An example dict as required by the model. + """ + image = normalize(example['image_left'], dtype) + mask = example['mask'] + + # Resize test images (train images are cropped/resized during augmentation): + if not train: + if resize is not None: + image = tf.image.resize(image, resize, 'bilinear') + mask = tf.image.resize(mask, resize, 'nearest') + + image = tf.cast(image, dtype) + mask = tf.cast(mask, dtype) + mask = tf.squeeze(mask, axis=2) + + outputs = {'inputs': image, 'label': mask} + if include_mask: + # Fishyscapes mask has values 0,1, 255, background pixels are set as 255. + # create batch_mask array and set background pixels to 0 and + # pixels that should be included during eval to 1 + batch_mask = tf.ones_like(mask, dtype) + batch_mask = tf.cast(batch_mask*(1-tf.cast(mask == 255, dtype)), dtype) + # update the mask array to be 0 or by setting cls 255 to cls 0. + mask = tf.cast(mask*(1-tf.cast(mask == 255, dtype)), dtype) + + outputs = {'inputs': image, 'label': mask, 'batch_mask': batch_mask} + + return outputs + + +preprocess_examples = { + 'cityscapes': cityscapes_dataset.preprocess_example, + 'fishyscapes': preprocess_example_fishyscapes, +} + + +def cityscapes_load_split( + dataset_name, + batch_size, + train=False, + dtype=tf.float32, + shuffle_buffer_size=10, + shuffle_seed=None, + data_augmentations=None, + preprocess_ex_eval=None, + cache=True, + data_dir: Optional[str] = None, +): + """Creates a split from the Cityscapes dataset using TensorFlow Datasets. + + For the training set, we drop the last partial batch. This is fine to do + because we additionally shuffle the data randomly each epoch, thus the trainer + will see all data in expectation. For the validation set, we pad the final + batch to the desired batch size. + + Args: + dataset_name: string; Dataset name defined in DATASET_INFO. + batch_size: int; The batch size returned by the data pipeline. + train: bool; Whether to load the train or evaluation split. + dtype: TF data type; Data type of the image. + shuffle_buffer_size: int; Buffer size for the TFDS prefetch. + shuffle_seed: The seed to use when shuffling the train split. + data_augmentations: list(str); Types of data augmentation applied on + preprocess_ex_eval: preprocessing function. Default None. + cache: bool; Whether to cache dataset in memory. + data_dir: directory with data. + + Returns: + A `tf.data.Dataset`. + """ + assert not train, 'Only evaluation is supported.' + assert dataset_name in DATASET_INFO + del data_augmentations + cityscapes_variant_info = DATASET_INFO.get(dataset_name, {}) + split = cityscapes_variant_info['split'] # only supports validation + + # Load the preprocessing function + if 'cityscapes' in cityscapes_variant_info.get('tfds_name'): + if dataset_name == 'cityscapes': + builder = tfds.builder(dataset_name, dtype=dtype) + elif 'cityscapes_corrupted' in dataset_name: + if data_dir is None: + # pylint: disable=line-too-long + data_dir = 'gs://ub-ekb/tensorflow_datasets/cityscapes_corrupted/tfrecords/v.0.0' # pylint: disable=line-too-long + # pylint: enable=line-too-long + builder = tfds.builder(dataset_name, data_dir=data_dir) + elif 'fishyscapes' in cityscapes_variant_info.get('tfds_name'): + if data_dir is None: + data_dir = 'gs://ub-ekb/tensorflow_datasets/fishyscapes/tfrecords/v.0.0' + builder = tfds.builder(dataset_name, data_dir=data_dir) + else: + raise NotImplementedError(f'{dataset_name} not available') + + ds, ds_info = dataset_utils.load_split_from_tfds_builder( + builder=builder, + batch_size=batch_size, + split=split, + preprocess_example=preprocess_ex_eval, + shuffle_buffer_size=shuffle_buffer_size, + shuffle_seed=shuffle_seed, + cache=cache) + return ds, ds_info + + +def _check_dataset_exists(dataset_configs): + assert 'dataset_name' in dataset_configs, ('Must specify dataset_name in ' + 'dataset_configs.') + dataset_name = dataset_configs['dataset_name'] + assert dataset_configs[ + 'dataset_name'] in DATASET_INFO, f'{dataset_name} is not supported.' + return dataset_name + + +@datasets.add_dataset('cityscapes_variants') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + prefetch_buffer_size=2, + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the Cityscapes validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + prefetch_buffer_size: int; Buffer size for the TFDS prefetch. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del batch_size + del shuffle_seed, rng + del dataset_service_address + + dtype = getattr(tf, dtype_str) + dataset_configs = dataset_configs or {} + dataset_name = _check_dataset_exists(dataset_configs) + cityscapes_variant_info = DATASET_INFO.get(dataset_name) + target_size = dataset_configs.get('target_size', None) + + if 'cityscapes' in dataset_name: + preprocess_example = preprocess_examples['cityscapes'] + elif 'fishyscapes' in dataset_name: + preprocess_example = preprocess_examples['fishyscapes'] + + preprocess_ex_eval = functools.partial( + preprocess_example, train=False, dtype=dtype, resize=target_size) + + logging.info('Loading validation split of the %s dataset.', dataset_name) + + eval_ds, _ = cityscapes_load_split( + dataset_name=dataset_name, + batch_size=eval_batch_size, + train=False, + dtype=dtype, + preprocess_ex_eval=preprocess_ex_eval) + + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, + train=False, + batch_size=eval_batch_size, + pixel_level=True) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + exclude_classes = functools.partial( + cityscapes_dataset.exclude_bad_classes, + new_labels=cityscapes_dataset.get_post_exclusion_labels()) + + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + + if 'cityscapes' in dataset_name: + eval_iter = map(exclude_classes, eval_iter) + eval_iter = map(shard_batches, eval_iter) + eval_iter = jax_utils.prefetch_to_device(eval_iter, prefetch_buffer_size) + + if target_size is None: + input_shape = (-1, 1024, 2048, 3) + else: + input_shape = (-1,) + tuple(target_size) + (3,) + + meta_data = { + 'input_shape': input_shape, + 'num_train_examples': 0, + 'num_eval_examples': cityscapes_variant_info['num_of_examples'], + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': False, + } + + if 'cityscapes' in dataset_name: + meta_data.update(cityscapes_meta_data) + elif 'fishyscapes' in dataset_name: + meta_data.update(fishyscapes_meta_data) + + return dataset_utils.Dataset(None, eval_iter, None, meta_data) diff --git a/scenic/projects/robust_segvit/datasets/datasets_info.py b/scenic/projects/robust_segvit/datasets/datasets_info.py new file mode 100644 index 0000000000000000000000000000000000000000..647d539c1cd2448abcbd96f624e556d3f6903249 --- /dev/null +++ b/scenic/projects/robust_segvit/datasets/datasets_info.py @@ -0,0 +1,392 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Class and splits information for the datasets. + +Datasets: + +ade20k_ind: Similar to ADE20K dataset without ADE20K_OOD_CLASSES +ade20k_ood_open: ADE20K dataset including only ADE20K_OOD_CLASSES +""" + +import collections +import dataclasses +from typing import Dict, Any, List, Optional + + +# ADEK OOD Classes to ignore +ADE20K_OOD_CLASSES = ['chair', 'armchair', 'swivel chair'] +# pylint: disable=line-too-long +ADE20K_CORRUPTED_DIR = 'gs://ub-ekb/tensorflow_datasets/ad_e20k_corrupted/tfrecords/v.0.0' + +ADE20K_TFDS_NAME = 'ade20k' +ADE20K_CORRUPTED_DIR = 'gs://ub-ekb/tensorflow_datasets/ade20k/tfrecords/v.0.0' +# pylint: enable=line-too-long + +# ADE20K-C +ADE20K_C_SEVERITIES = range(1, 6) +ADE20K_C_CORRUPTIONS = [ + 'gaussian_noise', +] + + +@dataclasses.dataclass(frozen=True) +class DatasetInfo: + tfds_name: str + image_key: str + label_key: str + classes: List[Any] + pixels_per_class: Optional[Dict[int, int]] = None + ood_classes: Optional[List[Any]] = None + data_dir: Optional[str] = None + +# Information for Cityscapes dataset. +# Based on https://github.com/mcordts/cityscapesScripts +CityscapesClass = collections.namedtuple( + 'CityscapesClass', + ['name', 'id', 'train_id', 'category', 'category_id', 'has_instances', + 'ignore_in_eval', 'color']) + +CITYSCAPES_CLASSES = [ + CityscapesClass( + 'unlabeled', 0, 255, 'void', 0, False, True, (0, 0, 0)), + CityscapesClass( + 'ego vehicle', 1, 255, 'void', 0, False, True, (0, 0, 0)), + CityscapesClass( + 'rectification border', 2, 255, 'void', 0, False, True, (0, 0, 0)), + CityscapesClass( + 'out of roi', 3, 255, 'void', 0, False, True, (0, 0, 0)), + CityscapesClass( + 'static', 4, 255, 'void', 0, False, True, (0, 0, 0)), + CityscapesClass( + 'dynamic', 5, 255, 'void', 0, False, True, (111, 74, 0)), + CityscapesClass( + 'ground', 6, 255, 'void', 0, False, True, (81, 0, 81)), + CityscapesClass( + 'road', 7, 0, 'flat', 1, False, False, (128, 64, 128)), + CityscapesClass( + 'sidewalk', 8, 1, 'flat', 1, False, False, (244, 35, 232)), + CityscapesClass( + 'parking', 9, 255, 'flat', 1, False, True, (250, 170, 160)), + CityscapesClass( + 'rail track', 10, 255, 'flat', 1, False, True, (230, 150, 140)), + CityscapesClass( + 'building', 11, 2, 'construction', 2, False, False, (70, 70, 70)), + CityscapesClass( + 'wall', 12, 3, 'construction', 2, False, False, (102, 102, 156)), + CityscapesClass( + 'fence', 13, 4, 'construction', 2, False, False, (190, 153, 153)), + CityscapesClass( + 'guard rail', 14, 255, 'construction', 2, False, True, (180, 165, 180)), + CityscapesClass( + 'bridge', 15, 255, 'construction', 2, False, True, (150, 100, 100)), + CityscapesClass( + 'tunnel', 16, 255, 'construction', 2, False, True, (150, 120, 90)), + CityscapesClass( + 'pole', 17, 5, 'object', 3, False, False, (153, 153, 153)), + CityscapesClass( + 'polegroup', 18, 255, 'object', 3, False, True, (153, 153, 153)), + CityscapesClass( + 'traffic light', 19, 6, 'object', 3, False, False, (250, 170, 30)), + CityscapesClass( + 'traffic sign', 20, 7, 'object', 3, False, False, (220, 220, 0)), + CityscapesClass( + 'vegetation', 21, 8, 'nature', 4, False, False, (107, 142, 35)), + CityscapesClass( + 'terrain', 22, 9, 'nature', 4, False, False, (152, 251, 152)), + CityscapesClass( + 'sky', 23, 10, 'sky', 5, False, False, (70, 130, 180)), + CityscapesClass( + 'person', 24, 11, 'human', 6, True, False, (220, 20, 60)), + CityscapesClass( + 'rider', 25, 12, 'human', 6, True, False, (255, 0, 0)), + CityscapesClass( + 'car', 26, 13, 'vehicle', 7, True, False, (0, 0, 142)), + CityscapesClass( + 'truck', 27, 14, 'vehicle', 7, True, False, (0, 0, 70)), + CityscapesClass( + 'bus', 28, 15, 'vehicle', 7, True, False, (0, 60, 100)), + CityscapesClass( + 'caravan', 29, 255, 'vehicle', 7, True, True, (0, 0, 90)), + CityscapesClass( + 'trailer', 30, 255, 'vehicle', 7, True, True, (0, 0, 110)), + CityscapesClass( + 'train', 31, 16, 'vehicle', 7, True, False, (0, 80, 100)), + CityscapesClass( + 'motorcycle', 32, 17, 'vehicle', 7, True, False, (0, 0, 230)), + CityscapesClass( + 'bicycle', 33, 18, 'vehicle', 7, True, False, (119, 11, 32)), + CityscapesClass( + 'license plate', -1, -1, 'vehicle', 7, False, True, (0, 0, 142)), +] + +# Number of pixels per Cityscapes class ID in the training set: +CITYSCAPES_PIXELS_PER_CID = { + 7: 3806423808, + 8: 629490880, + 11: 2354443008, + 12: 67089092, + 13: 91210616, + 17: 126753000, + 19: 21555918, + 20: 57031712, + 21: 1647446144, + 22: 119165328, + 23: 415038624, + 24: 126403824, + 25: 13856368, + 26: 725164864, + 27: 27588982, + 28: 24276994, + 31: 24195352, + 32: 10207740, + 33: 42616088 +} + +CITYSCAPES = DatasetInfo( + tfds_name='cityscapes/semantic_segmentation', + image_key='image_left', + label_key='segmentation_label', + classes=CITYSCAPES_CLASSES, + pixels_per_class=CITYSCAPES_PIXELS_PER_CID) + +# Information for ADE20k dataset +ADE20KClass = collections.namedtuple( + 'ADE20KClass', ['name', 'id', 'train_id', 'ignore_in_eval', 'color']) + +ADE20K_CLASS_NAMES = [ + 'background', 'wall', 'building', 'sky', 'floor', 'tree', 'ceiling', 'road', + 'bed', 'windowpane', 'grass', 'cabinet', 'sidewalk', 'person', 'earth', + 'door', 'table', 'mountain', 'plant', 'curtain', 'chair', 'car', 'water', + 'painting', 'sofa', 'shelf', 'house', 'sea', 'mirror', 'rug', 'field', + 'armchair', 'seat', 'fence', 'desk', 'rock', 'wardrobe', 'lamp', 'bathtub', + 'railing', 'cushion', 'base', 'box', 'column', 'signboard', + 'chest of drawers', 'counter', 'sand', 'sink', 'skyscraper', 'fireplace', + 'refrigerator', 'grandstand', 'path', 'stairs', 'runway', 'case', + 'pool table', 'pillow', 'screen door', 'stairway', 'river', 'bridge', + 'bookcase', 'blind', 'coffee table', 'toilet', 'flower', 'book', 'hill', + 'bench', 'countertop', 'stove', 'palm', 'kitchen island', 'computer', + 'swivel chair', 'boat', 'bar', 'arcade machine', 'hovel', 'bus', 'towel', + 'light', 'truck', 'tower', 'chandelier', 'awning', 'streetlight', 'booth', + 'television receiver', 'airplane', 'dirt track', 'apparel', 'pole', 'land', + 'bannister', 'escalator', 'ottoman', 'bottle', 'buffet', 'poster', 'stage', + 'van', 'ship', 'fountain', 'conveyer belt', 'canopy', 'washer', 'plaything', + 'swimming pool', 'stool', 'barrel', 'basket', 'waterfall', 'tent', 'bag', + 'minibike', 'cradle', 'oven', 'ball', 'food', 'step', 'tank', 'trade name', + 'microwave', 'pot', 'animal', 'bicycle', 'lake', 'dishwasher', 'screen', + 'blanket', 'sculpture', 'hood', 'sconce', 'vase', 'traffic light', 'tray', + 'ashcan', 'fan', 'pier', 'crt screen', 'plate', 'monitor', 'bulletin board', + 'shower', 'radiator', 'glass', 'clock', 'flag' +] + +ADE20K_CLASS_COLORS = [ + [0, 0, 0], [120, 120, 120], [180, 120, 120], [6, 230, 230], + [80, 50, 50], [4, 200, 3], [120, 120, 80], [140, 140, 140], + [204, 5, 255], [230, 230, 230], [4, 250, 7], [224, 5, 255], + [235, 255, 7], [150, 5, 61], [120, 120, 70], [8, 255, 51], + [255, 6, 82], [143, 255, 140], [204, 255, 4], [255, 51, 7], + [204, 70, 3], [0, 102, 200], [61, 230, 250], [255, 6, 51], + [11, 102, 255], [255, 7, 71], [255, 9, 224], [9, 7, 230], + [220, 220, 220], [255, 9, 92], [112, 9, 255], [8, 255, 214], + [7, 255, 224], [255, 184, 6], [10, 255, 71], [255, 41, 10], + [7, 255, 255], [224, 255, 8], [102, 8, 255], [255, 61, 6], + [255, 194, 7], [255, 122, 8], [0, 255, 20], [255, 8, 41], + [255, 5, 153], [6, 51, 255], [235, 12, 255], [160, 150, 20], + [0, 163, 255], [140, 140, 140], [250, 10, 15], [20, 255, 0], + [31, 255, 0], [255, 31, 0], [255, 224, 0], [153, 255, 0], + [0, 0, 255], [255, 71, 0], [0, 235, 255], [0, 173, 255], + [31, 0, 255], [11, 200, 200], [255, 82, 0], [0, 255, 245], + [0, 61, 255], [0, 255, 112], [0, 255, 133], [255, 0, 0], + [255, 163, 0], [255, 102, 0], [194, 255, 0], [0, 143, 255], + [51, 255, 0], [0, 82, 255], [0, 255, 41], [0, 255, 173], + [10, 0, 255], [173, 255, 0], [0, 255, 153], [255, 92, 0], + [255, 0, 255], [255, 0, 245], [255, 0, 102], [255, 173, 0], + [255, 0, 20], [255, 184, 184], [0, 31, 255], [0, 255, 61], + [0, 71, 255], [255, 0, 204], [0, 255, 194], [0, 255, 82], + [0, 10, 255], [0, 112, 255], [51, 0, 255], [0, 194, 255], + [0, 122, 255], [0, 255, 163], [255, 153, 0], [0, 255, 10], + [255, 112, 0], [143, 255, 0], [82, 0, 255], [163, 255, 0], + [255, 235, 0], [8, 184, 170], [133, 0, 255], [0, 255, 92], + [184, 0, 255], [255, 0, 31], [0, 184, 255], [0, 214, 255], + [255, 0, 112], [92, 255, 0], [0, 224, 255], [112, 224, 255], + [70, 184, 160], [163, 0, 255], [153, 0, 255], [71, 255, 0], + [255, 0, 163], [255, 204, 0], [255, 0, 143], [0, 255, 235], + [133, 255, 0], [255, 0, 235], [245, 0, 255], [255, 0, 122], + [255, 245, 0], [10, 190, 212], [214, 255, 0], [0, 204, 255], + [20, 0, 255], [255, 255, 0], [0, 153, 255], [0, 41, 255], + [0, 255, 204], [41, 0, 255], [41, 255, 0], [173, 0, 255], + [0, 245, 255], [71, 0, 255], [122, 0, 255], [0, 255, 184], + [0, 92, 255], [184, 255, 0], [0, 133, 255], [255, 214, 0], + [25, 194, 194], [102, 255, 0], [92, 0, 255]] + +# ------------------------- +# Construct ade20k dataset: +# ------------------------- +ADE20K_CLASSES = [] + +for i in range(151): + c = ADE20KClass(ADE20K_CLASS_NAMES[i], i, + 255 if ADE20K_CLASS_NAMES[i] == 'background' else i - 1, + True if ADE20K_CLASS_NAMES[i] == 'background' else False, + ADE20K_CLASS_COLORS[i]) + ADE20K_CLASSES.append(c) + +ADE20K = DatasetInfo( + tfds_name=ADE20K_TFDS_NAME, + image_key='image', + label_key='segmentation', + classes=ADE20K_CLASSES, + pixels_per_class=None, + data_dir=ADE20K_DIR) + +# ----------------------------- +# Construct ade20k_ind dataset: +# ----------------------------- +# Construct a subset ade20k dataset which assigns the classes in +# ADE20K_OOD_CLASSES as background. +# ignore the background and the OOD classes during eval +# TODO(kellybuchanan): put this as function. +train_class = 0 +ADE20KSUBSET_CLASSES = [] +for i in range(151): + name = ADE20K_CLASS_NAMES[i] + train_id = 255 if name == 'background' else train_class + ignore_in_eval = True if name == 'background' else False + if name in ADE20K_OOD_CLASSES: + train_id = 255 + ignore_in_eval = True + else: + train_class += 1 + c = ADE20KClass(name, i, train_id, ignore_in_eval, ADE20K_CLASS_COLORS[i]) + ADE20KSUBSET_CLASSES.append(c) + +ADE20KSUBSET = DatasetInfo( + tfds_name=ADE20K_TFDS_NAME, + image_key='image', + label_key='segmentation', + classes=ADE20KSUBSET_CLASSES, + pixels_per_class=None, + data_dir=ADE20K_DIR) + +# ---------------------------------- +# Construct ade20k_odd_open dataset: +# ---------------------------------- +# Generate openset dataset, where all classes except for ADE20K_OOD classes +# are considered background or class 0 and ADE20K_OOD_CLASSES are class 1. +# ignore the background during eval, other OOD classes are set to +ADE20KOPEN_CLASSES = [] +for i in range(151): + name = ADE20K_CLASS_NAMES[i] + if name in ADE20K_OOD_CLASSES: + train_id = 1 + ignore_in_eval = False + elif name == 'background': + train_id = 255 + ignore_in_eval = True + else: + train_id = 0 + ignore_in_eval = False + + c = ADE20KClass(name, i, train_id, ignore_in_eval, ADE20K_CLASS_COLORS[i]) + ADE20KOPEN_CLASSES.append(c) + +# Classes defined as Background/InD/OOD sets. +c255 = ADE20KClass('background', 0, 255, True, [0, 0, 0]) +c0 = ADE20KClass('ind', 1, 0, False, [0, 0, 1]) +c1 = ADE20KClass('ood', 2, 1, False, [1, 0, 0]) +ADE20KOPEN_3CLASSES = [c255, c0, c1] + +ADE20KOPEN = DatasetInfo( + tfds_name=ADE20K_TFDS_NAME, + image_key='image', + label_key='segmentation', + classes=ADE20KOPEN_3CLASSES, + ood_classes=ADE20KOPEN_CLASSES, + pixels_per_class=None, + data_dir=ADE20K_DIR) + + +def build_datasets(): + """Build datasets.""" + + local_dataset = { + 'cityscapes': CITYSCAPES, + 'ade20k': ADE20K, + 'ade20k_ind': ADE20KSUBSET, + 'ade20k_ood_open': ADE20KOPEN, + } + + # ----------------------------- + # Construct ade20k_c dataset: + # ----------------------------- + for severity in ADE20K_C_SEVERITIES: + for corruption in ADE20K_C_CORRUPTIONS: + tfds_dataset_name = f'ade20k_corrupted/ade20k_{corruption}_{severity}' + temp_dataset_name = f'ade20k_c_{corruption}_{severity}' + local_dataset[temp_dataset_name] = DatasetInfo( + tfds_name=tfds_dataset_name, + image_key='image', + label_key='annotations', + classes=ADE20K_CLASSES, + pixels_per_class=None, + data_dir=ADE20K_CORRUPTED_DIR, + ) + + # ------------------------------- + # Construct ade20k_ind_c dataset: + # ------------------------------- + for severity in ADE20K_C_SEVERITIES: + for corruption in ADE20K_C_CORRUPTIONS: + tfds_dataset_name = f'ade20k_corrupted/ade20k_{corruption}_{severity}' + temp_dataset_name = f'ade20k_ind_c_{corruption}_{severity}' + local_dataset[temp_dataset_name] = DatasetInfo( + tfds_name=tfds_dataset_name, + image_key='image', + label_key='annotations', + classes=ADE20KSUBSET_CLASSES, + pixels_per_class=None, + data_dir=ADE20K_CORRUPTED_DIR, + ) + + # ------------------------------------ + # Construct ade20k_ood_open_c dataset: + # ------------------------------------ + for severity in ADE20K_C_SEVERITIES: + for corruption in ADE20K_C_CORRUPTIONS: + tfds_dataset_name = f'ade20k_corrupted/ade20k_{corruption}_{severity}' + temp_dataset_name = f'ade20k_ood_open_c_{corruption}_{severity}' + local_dataset[temp_dataset_name] = DatasetInfo( + tfds_name=tfds_dataset_name, + image_key='image', + label_key='annotations', + classes=ADE20KOPEN_3CLASSES, + ood_classes=ADE20KOPEN_CLASSES, + pixels_per_class=None, + data_dir=ADE20K_CORRUPTED_DIR, + ) + + return local_dataset + +# ------------------ +# BUILD all datasets +# ------------------ +DATASETS = build_datasets() + + +def get_info(dataset: str) -> DatasetInfo: + """Returns dataset information for a dataset.""" + info = DATASETS.get(dataset) + if not info: + raise ValueError(f'{dataset} is not available') + return info diff --git a/scenic/projects/robust_segvit/datasets/denoise_utils.py b/scenic/projects/robust_segvit/datasets/denoise_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..8c832a0dbcd43a634b3ef7af3cf883818dc4670e --- /dev/null +++ b/scenic/projects/robust_segvit/datasets/denoise_utils.py @@ -0,0 +1,310 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implements operations for adding different types of noise to images.""" + +from typing import Tuple, Optional + +from absl import logging +import ml_collections +import tensorflow as tf + + +def get_mask(image: tf.Tensor, + denoise_configs: ml_collections.ConfigDict, + dtype: tf.DType = tf.float32) -> tf.Tensor: + """Generates random bounding box coordinates and turns them into a mask. + + Args: + image: The image for which the bounding boxes are being generated. + denoise_configs: Configurations for the denoising process. + dtype: Data type of the image. + + Returns: + The mask for the cut out regions. + """ + h, w, _ = image.shape + bboxes = [] + for _ in range(denoise_configs.n_bboxes): + bboxes.append(tf.image.sample_distorted_bounding_box( + image_size=image.shape, + bounding_boxes=tf.zeros((0, 0, 4)), + min_object_covered=0.0, + area_range=denoise_configs.area_range, + aspect_ratio_range=denoise_configs.aspect_ratio_range, + use_image_if_no_bounding_boxes=True)[2]) + bboxes = tf.stack(bboxes) + + x, y = tf.meshgrid(tf.range(w, dtype=tf.int32), + tf.range(h, dtype=tf.int32)) + y_min = tf.cast(bboxes[..., 0] * h, dtype=x.dtype) + x_min = tf.cast(bboxes[..., 1] * w, dtype=x.dtype) + y_max = tf.cast(bboxes[..., 2] * h, dtype=x.dtype) + x_max = tf.cast(bboxes[..., 3] * w, dtype=x.dtype) + + masks = ((x[None, ...] >= x_min) & + (x[None, ...] < x_max) & + (y[None, ...] >= y_min) & + (y[None, ...] < y_max)) + mask = tf.reduce_any(masks, axis=0) + + return tf.cast(mask[..., None], dtype=dtype) + + +def cutout_bbox(image: tf.Tensor, + rng: int, + denoise_configs: ml_collections.ConfigDict, + dtype: tf.DType = tf.float32) -> Tuple[tf.Tensor, tf.Tensor]: + """Cuts out portions of the given image by sampling random bounding boxes. + + Args: + image: A single image, must be in 0-1 range. + rng: Seed for sampling the noise. + denoise_configs: Configurations for the denoising process. + dtype: Data type of the image. + + Returns: + The corrupted image and the noise. + """ + del rng + + noise = get_mask(image, denoise_configs, dtype) + noised_image = image * (1 - noise) + 0.5 * noise + return noised_image, noise + + +def cutout_checkerboard( + image: tf.Tensor, + noise_magnitude: tf.Tensor, + rng: int, + denoise_configs: ml_collections.ConfigDict, + dtype: tf.DType = tf.float32) -> Tuple[tf.Tensor, tf.Tensor]: + """Randomly cuts out portions of the given image. + + Noise is sampled at `patch_size` times lower resolution and upsampled to + form a checkerboard pattern. + + Args: + image: A single image,must be in 0-1 range. + noise_magnitude: Used to generate the cutout mask. + rng: Seed for sampling the noise. + denoise_configs: Configurations for the denoising process. + dtype: Data type of the image. + + Returns: + The corrupted image and the noise. + """ + del rng + + p = 1 - noise_magnitude + h, w, _ = image.shape + fh, fw = denoise_configs.patch_size + gh, gw = h // fh, w // fw + + noise = tf.random.uniform((gh, gw), dtype=dtype, seed=None) + noise = tf.cast(noise > p, dtype=dtype) + noise = tf.image.resize(noise[..., None], [h, w], method='nearest') + + noised_image = image * noise + 0.5 * (1 - noise) + return noised_image, 1 - noise + + +def add_gaussian_noise( + image: tf.Tensor, + noise_magnitude: tf.Tensor, + use_additive_noise: bool, + rng: int, + denoise_configs: ml_collections.ConfigDict, + dtype: tf.DType = tf.float32) -> Tuple[tf.Tensor, tf.Tensor]: + """Add gaussian noise to the given image. + + Args: + image: A single image,must be in 0-1 range. + noise_magnitude: Amount of noise to be added to the image. + use_additive_noise: Whether to use a simple additive noise formulation. + rng: Seed for sampling the noise. + denoise_configs: Configurations for the denoising process. + dtype: Data type of the image. + + Returns: + The corrupted image and the noise. + """ + del rng + + h, w, c = image.shape + if denoise_configs.use_coarse_noise: + fh, fw = denoise_configs.patch_size + gh, gw = h // fh, w // fw + + noise = tf.random.normal( + (gh, gw, c), + mean=0.0, + stddev=1.0, + dtype=dtype, + seed=None, + name=None) + # upsample the noise to the original image resolution + noise = tf.image.resize(noise, [h, w], method='nearest') + else: + noise = tf.random.normal( + (h, w, c), + mean=0.0, + stddev=1.0, + dtype=dtype, + seed=None, + name=None) + + if use_additive_noise: + logging.info('Using simple additive noise formulation.') + noise = noise_magnitude * noise + noised_image = image + noise + if denoise_configs.clip_values: + logging.info('Clipping values to be between 0 and 1.') + noised_image = tf.clip_by_value(noised_image, 0., 1.) + noise = noised_image - image + else: + logging.info('Using ddpm noise and image scaling formulation') + scale_img = tf.sqrt(noise_magnitude) * image + scale_noise = ((tf.sqrt(1 - noise_magnitude) * noise) - + tf.sqrt(noise_magnitude) + 1.0) / 2 + noised_image = scale_img + scale_noise + if denoise_configs.clip_values: + logging.info('Clipping values to be between 0 and 1.') + noised_image = tf.clip_by_value(noised_image, 0., 1.) + + if noise_magnitude == 1.0: + noise = noise * 0. + return noised_image, noise + + +def patch_noise( + image: tf.Tensor, + gamma: tf.Tensor, + patch_gamma: tf.Tensor, + rng: int, + denoise_configs: ml_collections.ConfigDict, + dtype: tf.DType = tf.float32 +) -> Tuple[tf.Tensor, tf.Tensor, Tuple[tf.Tensor, tf.Tensor]]: + """Add non uniform gaussian noise to the given image. + + Args: + image: A single image,must be in 0-1 range. + gamma: Controls the amount of noise in the background + patch_gamma: Controls the amount of noise within the patches + rng: Seed for sampling the noise. + denoise_configs: Configurations for the denoising process. + dtype: Data type of the image. + + Returns: + The corrupted image and the noise. + """ + noised_image_background, noise_background = add_gaussian_noise( + image, gamma, False, rng, denoise_configs, dtype) + noised_image_patch, noise_patch = add_gaussian_noise(image, patch_gamma, + False, rng, + denoise_configs, dtype) + mask = get_mask(image, denoise_configs, dtype) + noised_image = (noised_image_patch * mask) + ( + noised_image_background * (1 - mask)) + noise = (noise_patch * mask) + (noise_background * (1 - mask)) + + return noised_image, noise, (mask, patch_gamma) + + +def add_noise( + image: tf.Tensor, + rng: int, + denoise_configs: ml_collections.ConfigDict, + dtype: tf.DType = tf.float32 +) -> Tuple[tf.Tensor, tf.Tensor, Optional[tf.Tensor], tf.Tensor, Tuple[ + Optional[tf.Tensor], Optional[tf.Tensor]]]: + """Add noise to the given image. + + Args: + image: A single image,must be in 0-1 range. + rng: Seed for sampling the noise. + denoise_configs: Configurations for the denoising process. + dtype: Data type of the image. + + Returns: + The corrupted image and either the noise or the image. + """ + tf.debugging.assert_non_negative(image, message='Image must be in 0-1 range') + + if denoise_configs.gamma != -1 and denoise_configs.sigma != -1: + raise ValueError( + 'When gamma is being used, sigma must be set to -1 and vice versa.') + + noise_magnitude = denoise_configs.sigma if denoise_configs.sigma != -1 else denoise_configs.gamma + noise_magnitude = tf.constant(noise_magnitude, dtype=dtype) + use_additive_noise = denoise_configs.sigma != -1 + + # use 0 for runs that won't use timestep embedding + timestep = tf.constant(0) + # fallback to simple random gamma sampling scheme + if (denoise_configs.random_noise_schedule and + denoise_configs.random_noise_schedule.type == 'simple'): + logging.info('Using a random noise schedule') + c = tf.random.uniform( + shape=[], + minval=denoise_configs.random_noise_schedule.minval, + maxval=denoise_configs.random_noise_schedule.maxval) + # to sample noiseless images maxval is set to a value slightly greater than + # 1, random values of gamma that are greater than 1 are taken to be 1 + noise_magnitude = tf.minimum(c, 1.0) + elif denoise_configs.random_noise_schedule: + logging.info('Using a random noise schedule with timestep embedding') + logging.info('Number of timesteps: %d', + denoise_configs.random_noise_schedule.n_timesteps) + noise_magnitudes = tf.linspace( + denoise_configs.random_noise_schedule.maxval, + denoise_configs.random_noise_schedule.minval, + denoise_configs.random_noise_schedule.n_timesteps) + + timestep = tf.random.uniform( + shape=[], + maxval=denoise_configs.random_noise_schedule.n_timesteps, + dtype=tf.int32) + if denoise_configs.random_noise_schedule.type == 'linear': + noise_magnitude = noise_magnitudes[timestep] + elif denoise_configs.random_noise_schedule.type == 'multiplicative': + # Multipy gammas from step 1 to `timestep` as is done in DDPM + noise_magnitude = tf.math.reduce_prod(noise_magnitudes[:timestep]) + + patch = (None, None) + if denoise_configs.type == 'gaussian': + logging.info('Adding gaussian noise to the image') + noised_image, noise = add_gaussian_noise(image, noise_magnitude, + use_additive_noise, rng, + denoise_configs, dtype) + elif denoise_configs.type == 'cutout_checkerboard': + logging.info('Apply cutout to random portions of the image') + noised_image, noise = cutout_checkerboard(image, noise_magnitude, rng, + denoise_configs, dtype) + elif denoise_configs.type == 'cutout_bbox': + logging.info('Apply cutout to random portions of the image') + noised_image, noise = cutout_bbox(image, rng, denoise_configs, dtype) + elif denoise_configs.type == 'patch_noise': + logging.info('Apply non uniform gaussian noise to the image') + noised_image, noise, patch = patch_noise( + image=image, + gamma=noise_magnitude, + patch_gamma=tf.constant(denoise_configs.patch_gamma, dtype=dtype), + rng=rng, + denoise_configs=denoise_configs, + dtype=dtype) + else: + raise ValueError(f'Noise type: {denoise_configs.type} is not defined') + + return noised_image, noise, timestep, noise_magnitude, patch diff --git a/scenic/projects/robust_segvit/datasets/segmentation_datasets.py b/scenic/projects/robust_segvit/datasets/segmentation_datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..e83a249bade29fcd69c4b2c96b6110d83e1af4d2 --- /dev/null +++ b/scenic/projects/robust_segvit/datasets/segmentation_datasets.py @@ -0,0 +1,355 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for ADE20k datasets.""" + +import functools +from typing import Dict, List, Optional, Tuple + +from absl import logging +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.projects.robust_segvit.datasets import datasets_info +from scenic.projects.robust_segvit.datasets import denoise_utils +import tensorflow as tf + + +def preprocess_example( + example: Dict[str, tf.Tensor], + train: bool, + dataset_configs: ml_collections.ConfigDict, + dataset_info: datasets_info.DatasetInfo, + dtype: tf.DType = tf.float32, + resize: Optional[List[int]] = None, + rng: int = 0): + """Preprocesses the given image. + + Args: + example: Example coming from TFDS. + train: Whether to apply training-specific preprocessing or not. + dataset_configs: Dataset configurations. + dataset_info: Dataset specific information. + dtype: Data type of the image. + resize: Height and width to which image and labels should be resized. + rng: Seed for sampling the noise for denoising. + + Returns: + An example dict as required by the model. + """ + image = dataset_utils.normalize(example[dataset_info.image_key], dtype) + mask = example[dataset_info.label_key] + + # Resize test images (train images are cropped/resized during augmentation): + if not train: + if resize is not None: + image = tf.image.resize(image, resize, 'bilinear') + mask = tf.image.resize(mask, resize, 'nearest') + + # adding noise for training images is applied during augmentation + image = tf.cast(image, dtype) + if dataset_configs.denoise and not train: + noised_image, noise, timestep, gamma, patch = denoise_utils.add_noise( + image, rng, dataset_configs.denoise, dtype) + example = { + 'inputs': noised_image, + 'label': noise, + 'image': image, + 'timestep': timestep, + 'gamma': gamma, + 'patch': patch + } + else: + mask = tf.cast(mask, dtype) + mask = tf.squeeze(mask, axis=2) + timestep = tf.constant(dataset_configs.use_timestep or 0) + example = {'inputs': image, 'label': mask, 'timestep': timestep} + + return example + + +def augment_example(example: Dict[str, tf.Tensor], + dataset_configs: ml_collections.ConfigDict, + dtype: tf.DType = tf.float32, + resize: Optional[List[int]] = None, + rng: int = 0, + **inception_crop_kws): + """Augments the given train image. + + Args: + example: Example coming from TFDS. + dataset_configs: Dataset configurations. + dtype: Data type of the image. + resize: Height and width to which image and labels should be resized. + rng: Seed for sampling the noise for denoising. + **inception_crop_kws: Keyword arguments passed on to + inception_crop_with_mask. + + Returns: + An example dict as required by the model. + """ + image = example['inputs'] + mask = example['label'][..., tf.newaxis] + + # Random crop and resize ("Inception crop"): + image, mask = dataset_utils.inception_crop_with_mask( + image, + mask, + resize_size=image.shape[-3:-1] if resize is None else resize, + **inception_crop_kws) + + # Random LR flip: + seed = tf.random.uniform(shape=[2], maxval=2**31 - 1, dtype=tf.int32) + image = tf.image.stateless_random_flip_left_right(image, seed) + mask = tf.image.stateless_random_flip_left_right(mask, seed) + + image = tf.cast(image, dtype) + if dataset_configs.denoise: + noised_image, noise, timestep, gamma, patch = denoise_utils.add_noise( + image, rng, dataset_configs.denoise, dtype) + example = { + 'inputs': noised_image, + 'label': noise, + 'image': image, + 'timestep': timestep, + 'gamma': gamma, + 'patch': patch + } + else: + mask = tf.cast(mask, dtype) + mask = tf.squeeze(mask, axis=2) + timestep = tf.constant(dataset_configs.use_timestep or 0) + example = {'inputs': image, 'label': mask, 'timestep': timestep} + return example + + +def get_post_exclusion_labels(classes): + """Determines new labels after excluding bad classes. + + Excluded classes get the new label -1. + + Args: + classes: List of tuples containing information about each class. + + Returns: + An array of length num_old_classes, containing new labels. + """ + old_to_new_labels = np.array( + [-1 if c.ignore_in_eval else c.train_id for c in classes]) + return old_to_new_labels + + +def get_class_colors(classes): + """Returns a [num_classes, 3] array of colors for the model output labels.""" + cm = np.stack([c.color for c in classes if not c.ignore_in_eval], axis=0) + return cm / 255.0 + + +def get_class_names(classes): + """Returns a list with the class names of the model output labels.""" + return [c.name for c in classes if not c.ignore_in_eval] + + +def get_class_proportions(classes, pixels_per_cid): + """Returns a [num_classes] array of pixel frequency proportions.""" + p = [pixels_per_cid[c.id] for c in classes if not c.ignore_in_eval] + return np.array(p) / np.sum(p) + + +def exclude_bad_classes(batch, new_labels): + """Adjusts masks and batch_masks to exclude void and rare classes. + + This must be applied after dataset_utils.maybe_pad_batch() because we also + update the batch_mask. Note that the data is already converted to Numpy by + then. + + Args: + batch: dict; Batch of data examples. + new_labels: nd-array; array of length num_old_classes, containing new + labels. + + Returns: + Updated batch dict. + """ + # Convert old labels to new labels: + batch['label'] = new_labels[batch['label'].astype(np.int32)] + + # Set batch_mask to 0 at pixels that have an excluded label: + mask_dtype = batch['batch_mask'].dtype + batch['batch_mask'] = ( + batch['batch_mask'].astype(np.bool_) & (batch['label'] != -1)) + batch['batch_mask'] = batch['batch_mask'].astype(mask_dtype) + + return batch + + +@datasets.add_dataset('robust_segvit_segmentation') +def get_dataset( + *, + batch_size: int, + eval_batch_size: int, + num_shards: int, + dtype_str: str = 'float32', + shuffle_seed: int = 0, + rng: Optional[Tuple[int, int]] = None, + dataset_configs: ml_collections.ConfigDict = ml_collections.ConfigDict(), + dataset_service_address: Optional[str] = None) -> dataset_utils.Dataset: + """Returns generators for train and validation splits of the specified dataset. + + Args: + batch_size: Determines the train batch size. + eval_batch_size: Determines the evaluation batch size. + num_shards: Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + dtype = getattr(tf, dtype_str) + + if dataset_configs.name is None: + raise ValueError('The name of the dataset must be specified') + if dataset_configs.train_target_size is None: + raise ValueError('Target size must be specified') + + denoise_configs = dataset_configs.get('denoise') + dataset_info = datasets_info.get_info(dataset_configs.name) + + logging.info('Loading train split of the %s dataset.', dataset_configs.name) + preprocess_ex_train = functools.partial( + preprocess_example, + train=True, + dtype=dtype, + resize=None, + dataset_configs=dataset_configs, + dataset_info=dataset_info, + rng=int(rng[0])) + augment_ex = functools.partial( + augment_example, + dtype=dtype, + resize=dataset_configs.train_target_size, + dataset_configs=dataset_configs, + rng=int(rng[0]), + area_min=30, + area_max=100) + + train_split = dataset_configs.get('train_split', 'train') + num_train_examples = fine_train_size = dataset_utils.get_num_examples( + dataset_info.tfds_name, split=train_split) + validation_split = dataset_configs.get('validation_split', 'validation') + num_eval_examples = dataset_utils.get_num_examples(dataset_info.tfds_name, + validation_split) + + logging.info('number of examples in %s: %d', train_split, fine_train_size) + + train_ds, _ = dataset_utils.load_split_from_tfds( + dataset_info.tfds_name, + batch_size, + split=train_split, + preprocess_example=preprocess_ex_train, + augment_train_example=augment_ex, + shuffle_seed=shuffle_seed, + data_dir=dataset_info.data_dir) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_ds = dataset_utils.distribute(train_ds, dataset_service_address) + + logging.info('Loading validation split of the %s dataset.', + dataset_configs.name) + preprocess_ex_eval = functools.partial( + preprocess_example, + train=False, + dtype=dtype, + resize=dataset_configs.get('eval_target_size', + dataset_configs.train_target_size), + dataset_configs=dataset_configs, + dataset_info=dataset_info, + rng=int(rng[0])) + eval_ds, _ = dataset_utils.load_split_from_tfds( + dataset_info.tfds_name, + eval_batch_size, + split=validation_split, + preprocess_example=preprocess_ex_eval, + data_dir=dataset_info.data_dir) + + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size, + pixel_level=True) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size, + pixel_level=True) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + # define classes to exclude + # if ood classes are present use those to remap the classes + class_to_exclude = dataset_info.ood_classes if dataset_info.ood_classes else dataset_info.classes + exclude_classes = functools.partial( + exclude_bad_classes, + new_labels=get_post_exclusion_labels(class_to_exclude)) + + train_iter = iter(train_ds) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + if not denoise_configs and dataset_configs.name != 'pascal_voc': + train_iter = map(exclude_classes, train_iter) + train_iter = map(shard_batches, train_iter) + + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + if not denoise_configs and dataset_configs.name != 'pascal_voc': + eval_iter = map(exclude_classes, eval_iter) + eval_iter = map(shard_batches, eval_iter) + + input_shape = (-1,) + tuple(dataset_configs.train_target_size) + (3,) + + class_proportions = get_class_proportions( + dataset_info.classes, + dataset_info.pixels_per_class) if dataset_info.pixels_per_class else None + + meta_data = { + 'num_classes': + 3 if denoise_configs else len( + [c.id for c in dataset_info.classes if not c.ignore_in_eval]), + 'input_shape': + input_shape, + 'num_train_examples': + num_train_examples, + 'num_eval_examples': + num_eval_examples, + 'input_dtype': + getattr(jnp, dtype_str), + 'target_is_onehot': + False, + 'class_names': + get_class_names(dataset_info.classes), + 'class_colors': + get_class_colors(dataset_info.classes), + 'class_proportions': + class_proportions, + } + return dataset_utils.Dataset(train_iter, eval_iter, None, meta_data) diff --git a/scenic/projects/robust_segvit/datasets/segmentation_variants.py b/scenic/projects/robust_segvit/datasets/segmentation_variants.py new file mode 100644 index 0000000000000000000000000000000000000000..598379770770f79ba5f27d963955396855e3c5d8 --- /dev/null +++ b/scenic/projects/robust_segvit/datasets/segmentation_variants.py @@ -0,0 +1,224 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for Segmentation variants dataset. + +The datasets include: +ADE20K_C +""" + +import functools +from typing import Dict, List, Optional, Tuple + +from absl import logging +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.projects.robust_segvit.datasets import datasets_info +from scenic.projects.robust_segvit.datasets import denoise_utils +from scenic.projects.robust_segvit.datasets.segmentation_datasets import exclude_bad_classes +from scenic.projects.robust_segvit.datasets.segmentation_datasets import get_class_colors +from scenic.projects.robust_segvit.datasets.segmentation_datasets import get_class_names +from scenic.projects.robust_segvit.datasets.segmentation_datasets import get_class_proportions +from scenic.projects.robust_segvit.datasets.segmentation_datasets import get_post_exclusion_labels +import tensorflow as tf + + +def unique_with_inverse(x): + x = tf.reshape(x, [-1]) + y, idx, _ = tf.unique_with_counts(x) + return tf.gather(y, idx) + + +def get_instance_mask(instance_segmentation): + """Obtain the instance mask from the blue channel of the segmentation file.""" + # Based on DevKit: + # https://github.com/CSAILVision/ADE20K/blob/main/utils/utils_ade20k.py + instance_segmentation_blue = instance_segmentation[:, :, 2] + instance_mask = unique_with_inverse(instance_segmentation_blue) + instance_mask = tf.expand_dims( + tf.reshape(instance_mask, tf.shape(instance_segmentation_blue)), -1) + return tf.cast(instance_mask, tf.uint16) + + +def preprocess_example( + example: Dict[str, tf.Tensor], + train: bool, + dataset_configs: ml_collections.ConfigDict, + dataset_info: datasets_info.DatasetInfo, + dtype: tf.DType = tf.float32, + resize: Optional[List[int]] = None, + rng: int = 0): + """Preprocesses the given image. + + Args: + example: Example coming from TFDS. + train: Whether to apply training-specific preprocessing or not. + dataset_configs: Dataset configurations. + dataset_info: Dataset specific information. + dtype: Data type of the image. + resize: Height and width to which image and labels should be resized. + rng: Seed for sampling the noise for denoising. + + Returns: + An example dict as required by the model. + """ + image = dataset_utils.normalize(example[dataset_info.image_key], dtype) + mask = example[dataset_info.label_key] + + # preprocess mask following: + # https://github.com/CSAILVision/ADE20K/blob/main/utils/utils_ade20k.py + + if mask.shape[-1] == 3: + mask = get_instance_mask(mask) + + # Resize test images (train images are cropped/resized during augmentation): + if not train: + if resize is not None: + image = tf.image.resize(image, resize, 'bilinear') + mask = tf.image.resize(mask, resize, 'nearest') + + # adding noise for training images is applied during augmentation + image = tf.cast(image, dtype) + if dataset_configs.denoise and not train: + noised_image, noise, timestep, gamma, patch = denoise_utils.add_noise( + image, rng, dataset_configs.denoise, dtype) + example = { + 'inputs': noised_image, + 'label': noise, + 'image': image, + 'timestep': timestep, + 'gamma': gamma, + 'patch': patch + } + else: + mask = tf.cast(mask, dtype) + mask = tf.squeeze(mask, axis=2) + timestep = tf.constant(dataset_configs.use_timestep or 0) + example = {'inputs': image, 'label': mask, 'timestep': timestep} + + return example + + +@datasets.add_dataset('robust_segvit_variants') +def get_dataset( + *, + batch_size: int, + eval_batch_size: int, + num_shards: int, + dtype_str: str = 'float32', + shuffle_seed: int = 0, + rng: Optional[Tuple[int, int]] = None, + dataset_configs: ml_collections.ConfigDict = ml_collections.ConfigDict(), + dataset_service_address: Optional[str] = None) -> dataset_utils.Dataset: + """Returns generators for train and validation splits of the specified dataset. + + Args: + batch_size: Determines the train batch size. + eval_batch_size: Determines the evaluation batch size. + num_shards: Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del batch_size, shuffle_seed, dataset_service_address + + dtype = getattr(tf, dtype_str) + + if dataset_configs.name is None: + raise ValueError('The name of the dataset must be specified') + if dataset_configs.train_target_size is None: + raise ValueError('Target size must be specified') + + denoise_configs = dataset_configs.get('denoise') + dataset_info = datasets_info.get_info(dataset_configs.name) + validation_split = dataset_configs.get('validation_split', 'validation') + num_eval_examples = dataset_utils.get_num_examples( + dataset=dataset_info.tfds_name, + split=validation_split, + data_dir=dataset_info.data_dir) + + logging.info('Loading validation split of the %s dataset.', + dataset_configs.name) + preprocess_ex_eval = functools.partial( + preprocess_example, + train=False, + dtype=dtype, + resize=dataset_configs.get('eval_target_size', + dataset_configs.train_target_size), + dataset_configs=dataset_configs, + dataset_info=dataset_info, + rng=int(rng[0])) + + # TODO(kellybuchanan): merge cityscapes_c and ade20k_c + eval_ds, _ = dataset_utils.load_split_from_tfds( + dataset_info.tfds_name, + eval_batch_size, + split=validation_split, + preprocess_example=preprocess_ex_eval, + data_dir=dataset_info.data_dir) + + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size, + pixel_level=True) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + # define classes to exclude + # if ood classes are present use those to remap the classes + class_to_exclude = dataset_info.ood_classes if dataset_info.ood_classes else dataset_info.classes + exclude_classes = functools.partial( + exclude_bad_classes, + new_labels=get_post_exclusion_labels(class_to_exclude)) + + eval_iter = iter(eval_ds) + eval_iter = map(dataset_utils.tf_to_numpy, eval_iter) + eval_iter = map(maybe_pad_batches_eval, eval_iter) + if not denoise_configs and dataset_configs.name != 'pascal_voc': + eval_iter = map(exclude_classes, eval_iter) + eval_iter = map(shard_batches, eval_iter) + + input_shape = (-1,) + tuple(dataset_configs.train_target_size) + (3,) + + class_proportions = get_class_proportions( + dataset_info.classes, + dataset_info.pixels_per_class) if dataset_info.pixels_per_class else None + meta_data = { + 'num_classes': + 3 if denoise_configs else len( + [c.id for c in dataset_info.classes if not c.ignore_in_eval]), + 'input_shape': + input_shape, + 'num_train_examples': + 0, + 'num_eval_examples': + num_eval_examples, + 'input_dtype': + getattr(jnp, dtype_str), + 'target_is_onehot': + False, + 'class_names': + get_class_names(dataset_info.classes), + 'class_colors': + get_class_colors(dataset_info.classes), + 'class_proportions': + class_proportions, + } + return dataset_utils.Dataset(None, eval_iter, None, meta_data) diff --git a/scenic/projects/robust_segvit/tests/__init__.py b/scenic/projects/robust_segvit/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/robust_segvit/tests/segmentation_datasets_test.py b/scenic/projects/robust_segvit/tests/segmentation_datasets_test.py new file mode 100644 index 0000000000000000000000000000000000000000..4f40ee2950469b7f655128cd443fa6f2c20b3e38 --- /dev/null +++ b/scenic/projects/robust_segvit/tests/segmentation_datasets_test.py @@ -0,0 +1,54 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for segmentation_datasets.""" + +from absl.testing import absltest +from absl.testing import parameterized +import jax +import ml_collections +from scenic.projects.robust_segvit.datasets import segmentation_datasets + +EXPECTED_DATASETS = [ + ('ade20k', 'ade20k', 'validation'), +] + + +class SegmentationVariantsTest(parameterized.TestCase): + + @parameterized.named_parameters(EXPECTED_DATASETS) + def test_available(self, name, val_split): + """Test we can load a corrupted dataset.""" + num_shards = jax.local_device_count() + config = ml_collections.ConfigDict() + config.batch_size = num_shards*2 + config.eval_batch_size = num_shards*2 + config.num_shards = num_shards + + config.rng = jax.random.PRNGKey(0) + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.train_target_size = (120, 120) + config.dataset_configs.name = name + config.dataset_configs.denoise = None + config.dataset_configs.use_timestep = 0 + config.dataset_configs.val_split = val_split + dataset = segmentation_datasets.get_dataset(**config) + batch = next(dataset.valid_iter) + self.assertEqual( + batch['inputs'].shape, + (num_shards, config.eval_batch_size // num_shards, 120, 120, 3)) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/robust_segvit/tests/segmentation_variants_test.py b/scenic/projects/robust_segvit/tests/segmentation_variants_test.py new file mode 100644 index 0000000000000000000000000000000000000000..ff87d999b38e15d5dafa2cdd6ecb583b0ec953d3 --- /dev/null +++ b/scenic/projects/robust_segvit/tests/segmentation_variants_test.py @@ -0,0 +1,58 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for segmentation_datasets.""" + +from absl.testing import absltest +from absl.testing import parameterized +import jax +import ml_collections +from scenic.projects.robust_segvit.datasets import segmentation_variants + +EXPECTED_DATASETS = [ + ('ade20k_ind_c', 'ade20k_ind_c', 'gaussian_noise', 1, 'validation'), +] + + +class SegmentationVariantsTest(parameterized.TestCase): + + @parameterized.named_parameters(EXPECTED_DATASETS) + def test_available(self, name, corruption_type, corruption_level, val_split): + """Test we can load a corrupted dataset.""" + num_shards = jax.local_device_count() + config = ml_collections.ConfigDict() + config.batch_size = num_shards*2 + config.eval_batch_size = num_shards*2 + config.num_shards = num_shards + + config.rng = jax.random.PRNGKey(0) + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.train_target_size = (120, 120) + if corruption_type: + config.dataset_configs.name = ( + f'{name}_{corruption_type}_{corruption_level}') + else: + config.dataset_configs.name = name + config.dataset_configs.denoise = None + config.dataset_configs.use_timestep = 0 + config.dataset_configs.val_split = val_split + dataset = segmentation_variants.get_dataset(**config) + batch = next(dataset.valid_iter) + self.assertEqual( + batch['inputs'].shape, + (num_shards, config.eval_batch_size // num_shards, 120, 120, 3)) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/streaming_dvc/README.md b/scenic/projects/streaming_dvc/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b102d411382d791f0e0bfcbfa757499635bb5b69 --- /dev/null +++ b/scenic/projects/streaming_dvc/README.md @@ -0,0 +1,111 @@ +# Streaming Dense Video Captioning + +> [**Streaming Dense Video Captioning**](http://arxiv.org/abs/2404.01297),\ +> Xingyi Zhou*, Anurag Arnab*, Shyamal Buch, Shen Yan, Austin Myers, Xuehan Xiong, Arsha Nagrani, Cordelia Schmid. \ +> *CVPR 2024* + +

+ +Dense Video Captioning is the task of localizing events with their starting and ending timestamps, and captioning them. +Conventional models are limited by the number of video frames which they can process, and have high latency as they produce outputs after processing the whole video. + +We present a *streaming* model which: + +- Streams inputs by processing frames one-at-a-time with a memory to bound computational costs irrespective of the video length. +- Streams outputs by making predictions before the entire video has been processed. + +Our models achieve state-of-the-art results on ActivityNet, YouCook2 and ViTT, for which we release checkpoints. + +## Getting started + +First install Scenic following the instructions +[here](https://github.com/google-research/scenic#quickstart). +Then install additional dependencies with: + +``` +pip install -r scenic/projects/streaming_dvc/requirements.txt +``` + +Next, set up datasets following the instructions in [Vid2Seq](https://github.com/google-research/scenic/blob/main/scenic/projects/vid2seq/README.md#training). +This creates [TFRecord](https://www.tensorflow.org/tutorials/load_data/tfrecord) files for each dataset. +Then follow the instructions in [tools/create_densecap_json_from_tfrecord.py](tools/create_densecap_json_from_tfrecord.py) +to create ground truth files from the TFrecords for easier evaluation. + +To run the [GIT](https://github.com/microsoft/GenerativeImage2Text/tree/main) backbones with the BERT tokenizer, please download the BERT vocabulary from [Huggingface](https://huggingface.co/google-bert/bert-base-uncased/blob/main/vocab.txt). + +Finally, update the TFRecord path, the ground truth path, and the tokenizer path in [configs/common.py](configs/common.py). + +Our GIT models are pretrained on the [WebLI dataset](https://arxiv.org/abs/2209.06794) for image captioning. +Before training a config, download the pretrained weights [here (coming soon)](), and update +`config.weights` in each config. + +To train a config, e.g., `git_anet_streaming_input_output`, run + +```shell +python -m scenic.projects.streaming_dvc.main \ +--config=scenic/projects/streaming_dvc/configs/git_anet_streaming_input_output.py \ +--workdir=./output/git_anet_streaming_input_output/ +``` + +To only evaluate a given checkpoint, add +`--config.eval_only=True --config.weights='/path/to/checkpoint'` +to the above command. + +## Model Zoo + +Dense video captioning on ActivityNet + +| | SODA | CIDEr | Checkpoint | +|------------------------|-----------|-----------------|-------------| +| GIT | 5.7 | 29.8 | - | +| [Streaming-GIT](configs/git_anet_streaming_input_output.py) | 6.6 | 41.2 | Coming soon | +| Vid2Seq | 5.9 | 30.2 | - | +| [Streaming-Vid2Seq](configs/vid2seq_anet_streaming_input_output.py)| 6.2 | 37.8 | Coming soon | + + +Paragraph captioning on ActivityNet + +| | CIDEr | Checkpoint | +|------------------------|-----------------|-------------| +| GIT | 32.5 | - | +| [Streaming-GIT](configs/git_anet_paragraph_streaming_input.py) | 33.4 | Coming soon | + + +Dense video captioning on YouCook2 + +| | SODA | CIDEr | Checkpoint | +|------------------------|-----------|-----------------|-------------| +| GIT | 3.1 | 12.1 | - | +| [Streaming-GIT](configs/git_youcook2_streaming_input_output.py) | 3.2 | 15.4 | Coming soon | +| Vid2Seq | 5.7 | 25.3 | - | +| [Streaming-Vid2Seq](configs/vid2seq_youcook2_streaming_input_output.py)| 6.0 | 32.9 | Coming soon | + +Paragraph captioning on YouCook2 + +| | CIDEr | Checkpoint | +|------------------------|-----------------|-------------| +| GIT | 28.4 | - | +| [Streaming-GIT](configs/git_youcook2_paragraph_streaming_input.py) | 33.9 | Coming soon | + +Dense video captioning on ViTT + +| | SODA | CIDEr | Checkpoint | +|------------------------|-----------|-----------------|-------------| +| GIT | 7.1 | 15.1 | - | +| [Streaming-GIT](configs/git_vitt_streaming_input_output.py) | 8.3 | 18.5 | Coming soon | +| Vid2Seq | 9.8 | 23.0 | - | +| [Streaming-Vid2Seq](configs/vid2seq_vitt_streaming_input_output.py)| 10.0 | 25.2 | Coming soon | + + +## Citation + +If you use our Streaming DVC project, please cite the following BibTeX entry: + +``` +@inproceedings{zhou2024streaming, + title={Streaming Dense Video Captioning}, + author={Zhou, Xingyi and Arnab, Anurag and Buch, Shyamal and Yan, Shen and Myers, Austin and Xiong, Xuehan and Nagrani, Arsha and Schmid, Cordelia}, + booktitle={CVPR}, + year={2024} +} +``` diff --git a/scenic/projects/streaming_dvc/__init__.py b/scenic/projects/streaming_dvc/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/streaming_dvc/caption_evaluator.py b/scenic/projects/streaming_dvc/caption_evaluator.py new file mode 100644 index 0000000000000000000000000000000000000000..afab1db883c824d8b504d2c8408e35010f759846 --- /dev/null +++ b/scenic/projects/streaming_dvc/caption_evaluator.py @@ -0,0 +1,168 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Caption evaluator.""" + +import json +import os +from typing import Any, Dict, Optional + +from absl import logging +from coco_caption import coco +import numpy as np +# pylint: disable=g-import-not-at-top +try: + from scenic.projects.streaming_dvc import cococap_eval +except ImportError: + cococap_eval = None +import tensorflow as tf +# pylint: enable=g-import-not-at-top + + +class CaptionEvaluator(object): + """Class that feeds model outputs to COCO caption evaluation api.""" + + def __init__(self, annotations_loc, eval_meteor_spice=False, + step: Optional[int] = None): + self.annotations_loc = annotations_loc + logging.info('Initializing evaluator.') + if self.annotations_loc: + self.coco = coco.COCO(self.annotations_loc) + self.annotations = { + 'images': [], 'annotations': [], 'type': 'captions', 'info': {}, + 'licenses': [], 'categories': [{'id': 1, 'name': 'object'}]} + self.predictions = [] + self.pred_image_set = set() + self.gt_image_set = set() + self._num_examples_added = 0 + self._num_captions_added = 0 + self.eval_meteor_spice = eval_meteor_spice + self.step = step + + def add_example(self, prediction: Any, target: Dict[str, np.ndarray]): + """Add a single example to the evaluator. + + Args: + prediction: Model prediction tuple of 3 arrays: boxes, scores, classes. + 'boxes' is in shape of `[num_objects, 4]` and 'pred_boxes', 'classes' + are botoh in shape of `[num_objects, num_classes]`. + Box coordinates are absolute values in the input image coordinates. + We need to scale them back to the original image coordinates using + information in target. + target: Target dictionary with keys and 'image/id'. + """ + self._num_examples_added += 1 + if self.annotations_loc: + # We will use image_id that matches the annotation file. + img_id = int(target['image/id']) + else: + # we will create image_id on the fly + if 'media_id' in target: + img_id = ''.join([chr(x) for x in target['media_id'] if x]) + else: + img_id = self._num_examples_added + if img_id not in self.gt_image_set: + # Avoid adding the same image twice due to repeated sampling. + has_annotation = False + for x in target['captions']: + if x: # remove empty captions from padding. + self._num_captions_added += 1 + self.annotations['annotations'].append({ + 'id': self._num_captions_added, + 'image_id': img_id, + 'caption': x}) + has_annotation = True + if has_annotation: + self.annotations['images'].append({'id': img_id}) + self.gt_image_set.add(img_id) + else: + logging.info('Skipping %s. No annotations found', img_id) + return + single_prediction = { + 'image_id': img_id, + 'caption': prediction, + } + + if img_id not in self.pred_image_set: + self.predictions.append(single_prediction) + else: + logging.info('Duplicate image %s not being added again', img_id) + self.pred_image_set.add(img_id) + + def compute_metrics( + self, + save_dir: str, + clear_annotations: Optional[bool] = True, + skip_evaluate=False): + """Computes the metrics for all added predictions.""" + json_file_path = self.write_pred_annotations_to_file(save_dir) + if skip_evaluate: + return {} + if not self.annotations_loc: + gt_file_path = self.write_pred_annotations_to_file( + save_dir, is_groundtruth=True) + self.coco = coco.COCO(gt_file_path) + coco_res = self.coco.loadRes(json_file_path) + coco_eval = cococap_eval.CustomCOCOEvalCap( # pytype: disable=attribute-error + self.coco, coco_res, eval_meteor_spice=self.eval_meteor_spice) + coco_eval.params['image_id'] = coco_res.getImgIds() + coco_eval.evaluate() + results = coco_eval.eval + if clear_annotations: + self.clear() + return results + + def clear(self): + self.predictions = [] + self._num_examples_added = 0 + self._num_captions_added = 0 + + def __len__(self): + return self._num_examples_added + + def write_pred_annotations_to_file(self, + path: str, + is_groundtruth: bool = False): + """Writes predictions to file in JSON format. + + Args: + path: Path to write the prediction annotation JSON file. + is_groundtruth: bool; if the file is ground truth or prediction. + Returns: + json_file_path: path to the saved json + """ + if not tf.io.gfile.exists(path): + tf.io.gfile.makedirs(path) + fname_app = 'predictions' if not is_groundtruth else 'annotations' + if self.step: + json_file_name = f'caption_{fname_app}_{self.step}.json' + else: + json_file_name = f'caption_{fname_app}.json' + json_file_path = os.path.join(path, json_file_name) + logging.info('Saving predictions to %s.', json_file_path) + def _convert_to_serializable(obj): + if isinstance(obj, np.ndarray): + return obj.tolist() + elif isinstance(obj, np.float32): + return float(obj) + else: + raise TypeError(f'Unserializable object {obj} of type {type(obj)}') + + with tf.io.gfile.GFile(json_file_path, 'w') as f: + f.write( + json.dumps( + self.predictions if not is_groundtruth else self.annotations, + default=_convert_to_serializable)) + logging.info('Predicted annotations are stored in %s.', json_file_path) + return json_file_path diff --git a/scenic/projects/streaming_dvc/cococap_eval.py b/scenic/projects/streaming_dvc/cococap_eval.py new file mode 100644 index 0000000000000000000000000000000000000000..2c9089b752da002f37b8642dcc9b2702c30e4ac7 --- /dev/null +++ b/scenic/projects/streaming_dvc/cococap_eval.py @@ -0,0 +1,129 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""COCO caption evaluator, matching official implementations.""" + +from coco_caption import meteor +from coco_caption import spice +from coco_caption import upp_tokenizer +from pycocoevalcap.bleu import bleu +from pycocoevalcap.cider import cider +from pycocoevalcap.rouge import rouge + +import numpy as np +import six +from six.moves import zip + + +class CustomMeteor(meteor.Meteor): + """Meteor evaluator, consistent with official COCO implementation.""" + + def compute_score(self, gts, res): + """Compute METEOR scores.""" + with self.lock: + assert sorted(gts.keys()) == sorted(res.keys()) + img_ids = sorted(gts.keys()) + + eval_line = 'EVAL ||| ' + stats = self._stat(img_ids, res, gts) + eval_line += ' ||| '.join(stats) + # pytype: disable=attribute-error + self.meteor_p.stdin.write(six.ensure_binary(eval_line + '\n')) + self.meteor_p.stdin.flush() + scores = [float(six.ensure_str(self.meteor_p.stdout.readline())) + for _ in img_ids] + # the aggregated value of the jar differs from the mean of other values + score = self.meteor_p.stdout.readline() + # pytype: enable=attribute-error + # do not close the file inside this function to keep it open for full eval + return float(score), np.asarray(scores) + + +class CustomCOCOEvalCap: + """COCO caption evaluator that matches the external implementation.""" + + def __init__(self, coco, coco_res, eval_meteor_spice=False): + self.eval_imgs = [] + self.eval = {} + self.img_to_eval = {} + self.coco = coco + self.coco_res = coco_res + self.params = {'image_id': coco.getImgIds()} + # meteor and spice evaluation needs additional data resources which can + # not run with the default xm launcher. We provide the option to disable it. + self.eval_meteor_spice = eval_meteor_spice + + def evaluate(self): + """Run evaluation.""" + img_ids = self.params['image_id'] + gts = {} + res = {} + for img_id in img_ids: + gts[img_id] = self.coco.imgToAnns[img_id] + res[img_id] = self.coco_res.imgToAnns[img_id] + + # ================================================= + # Set up scorers + # ================================================= + print('tokenization...') + gts = upp_tokenizer.tokenize(gts) + res = upp_tokenizer.tokenize(res) + + # ================================================= + # Set up scorers + # ================================================= + print('setting up scorers...') + scorers = [ + (rouge.Rouge(), 'ROUGE_L'), + (cider.Cider(), 'CIDEr'), + (bleu.Bleu(), 'BLEU-4'), + ] + if self.eval_meteor_spice: + scorers.extend([ + (CustomMeteor(), 'Meteor'), + (spice.Spice(), 'Spice'), + ]) + + # ================================================= + # Compute scores + # ================================================= + for scorer, method in scorers: + print('computing %s score...' % (scorer.method())) + score, scores = scorer.compute_score(gts, res) + if isinstance(method, list): + for sc, scs, m in zip(score, scores, method): + self.setEval(sc, m) + self.setImgToEvalImgs(scs, list(gts.keys()), m) + print('%s: %0.3f' % (m, sc)) + else: + if method == 'BLEU-4' and isinstance(score, list): + score = score[-1] + self.setEval(score, method) + self.setImgToEvalImgs(scores, list(gts.keys()), method) + print('%s: %0.3f' % (method, score)) + self.setEvalImgs() + + def setEval(self, score, method): # pylint: disable=invalid-name + self.eval[method] = score + + def setImgToEvalImgs( # pylint: disable=invalid-name + self, scores, img_ids, method): + for img_id, score in zip(img_ids, scores): + if img_id not in self.img_to_eval: + self.img_to_eval[img_id] = {} + self.img_to_eval[img_id]['image_id'] = img_id + self.img_to_eval[img_id][method] = score + + def setEvalImgs(self): # pylint: disable=invalid-name + self.eval_imgs = [eval for _, eval in self.img_to_eval.items()] diff --git a/scenic/projects/streaming_dvc/configs/__init__.py b/scenic/projects/streaming_dvc/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/streaming_dvc/configs/common.py b/scenic/projects/streaming_dvc/configs/common.py new file mode 100644 index 0000000000000000000000000000000000000000..61f583baf3ae711352906fb2b4b1f24f54d23470 --- /dev/null +++ b/scenic/projects/streaming_dvc/configs/common.py @@ -0,0 +1,122 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Common utilities for config files.""" + +import builtins +import ml_collections + +BERT_TOKENIZER_PATH = '/path/to/bert-base-uncased/vocab.txt' + +BERT_VOCAB_SIZE = 30522 +SP_VOCAB_SIZE = 32128 + +ANET_TRAIN_SIZE = 8649 +ANET_VAL_SIZE = 4267 +ANET_PARA_VAL_SIZE = 2136 +ANET_ANN_VID2SEQ_FORMAT_PATH = '/path/to/anet_val_vid2seq_format.json' +ANET_TRAIN_TFRECORD_PATH = '/path/to/anet_train.tfrecord@XX' +ANET_VAL_TFRECORD_PATH = '/path/to/anet_val.tfrecord@XX' +ANET_PARA_VAL_TFRECORD_PATH = '/path/to/anet_ae_val.tfrecord@XX' + +YOUCOOK2_TRAIN_SIZE = 1333 +YOUCOOK2_VAL_SIZE = 457 +YOUCOOK2_ANN_VID2SEQ_FORMAT_PATH = '/path/to/youcook2_val_vid2seq_format.json' +YOUCOOK2_TRAIN_TFRECORD_PATH = '/path/to/youcook2_train.tfrecord@XX' +YOUCOOK2_VAL_TFRECORD_PATH = '/path/to/youcook2_val.tfrecord@XX' + +VITT_TRAIN_SIZE = 4608 +VITT_TEST_SIZE = 2301 +VITT_ANN_VID2SEQ_FORMAT_PATH = '/path/to/vitt_val_vid2seq_format.json' +VITT_TRAIN_TFRECORD_PATH = '/path/to/vitt_train.tfrecord@XX' +VITT_TEST_TFRECORD_PATH = '/path/to/vitt_test.tfrecord@XX' + + +def control_flow(fn_flow, type=None, default=None): # pylint: disable=redefined-builtin + """Create a new field reference which is controlled by the fn_flow. + + Args: + fn_flow (fct): Function of signature (default) -> resolved_value which + compute the reference value + type (type): Type of the field. At least one of type and default has + to be defined. If not set, the type is deduced from the default value + default (obj): The default value of the control flow. Is forwarded to the + fn_flow. + + Returns: + FieldReference: The field reference which lazy-execute the control flow. + + Raises: + ValueError: If none of type and default are set. + """ + type_ = type + type = builtins.type + + if type_ is None and default is None: + raise ValueError('At least of type or default has to be set.') + + if type_ is None: + # If type is None, default won't be None + type_ = type(default) + + if default is None: + # Function op don't get applied if reference is None so initialize with + # default constructor + default = type_() + + if type_ is None: + type_ = type(default) + + control_flow_op = ml_collections.config_dict._Op(fn=fn_flow, args=()) # pylint: disable=protected-access + return ml_collections.FieldReference( + # Function op don't get applied if reference is None so initialize with + # default constructor + default, + field_type=type_, + op=control_flow_op, + ) + + +def evaluate_lazily(fn): + """Decorates fn with ref_util.control_flow to evaluate config fields lazily. + + Note that the decorated function must return a single output whose type does + not depend on its inputs. + + Args: + fn: Function of signature fn(*args, **kwargs) -> resolved_value, where args + and kwargs are FieldReferences and resolved_value is a config value whose + type and structure does not depend on the inputs to fn. + + Returns: + A wrapped version of fn that returns a lazy FieldReference instead of an + eagerly resolved value. + """ + + def lazy_fn(*args, **kwargs): + all_args = list(args) + list(kwargs.values()) + if not all(isinstance(a, ml_collections.FieldReference) for a in all_args): + raise ValueError( + f'Please only pass FieldReferences to {fn.__name__}. For example, ' + f'instead of {fn.__name__}(config.key), use ' + f'{fn.__name__}(config.get_ref("key")).') + + def eager_fn(_): + resolved_args = [a.get() for a in args] + resolved_kwargs = {k: v.get() for k, v in kwargs.items()} + return fn(*resolved_args, **resolved_kwargs) + + return control_flow(eager_fn, type=type(eager_fn(None))) + + return lazy_fn diff --git a/scenic/projects/streaming_dvc/configs/git_anet_paragraph_streaming_input.py b/scenic/projects/streaming_dvc/configs/git_anet_paragraph_streaming_input.py new file mode 100644 index 0000000000000000000000000000000000000000..ec274353e25ec864eff20c867fc5ba91a640eac2 --- /dev/null +++ b/scenic/projects/streaming_dvc/configs/git_anet_paragraph_streaming_input.py @@ -0,0 +1,195 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Config for ActivityNet Paragraph Captioning. + +""" + +import ml_collections +from scenic.projects.streaming_dvc.configs import common +evaluate_lazily = common.evaluate_lazily + + +def get_config(): + """Returns the configuration for GIT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'git_anet_paragraph_streaming_input' + + # Dataset. + config.dataset_name = 'flexio_tfrecord' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = ['scenic.projects.streaming_dvc.io.ops'] + tokenizer_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.tokenizer_weight_path = tokenizer_path + + # Pre-processing settings + context_features = { + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'video_id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'media_id': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + sequence_features = { + 'image/encoded': {'feature_type': 'FixedLenSequence', 'shape': [], 'dtype': 'string'}, + } + + context_features_para = context_features.copy() + context_features_para.update({ + 'split': {'feature_type': 'VarLen', 'dtype': 'int64'}, + }) + sequence_features_para = sequence_features.copy() + + crop_size = 224 + num_captions_per_sample_train = 1 # one paragraph annotation for training. + num_captions_per_sample_eval = 2 # two sets of paragraph annotations for eval. + max_text_tokens = 128 + + config.num_frames = 64 + concat_captions_train = 'concat_all' + concat_captions_eval = 'concat_twosplit' + + @evaluate_lazily + def get_preproc_spec_train(num_frames): + preproc_spec_train = ( + f"decode_and_subsample_video({num_frames}, True)" + f"|decode_activity_net_paragraph_caption_annotations('{tokenizer_path}', {num_captions_per_sample_train}, {max_text_tokens}, '{concat_captions_train}')" + f"|video_resize_central_crop({crop_size})" + f"|init_padding_mask" + ) + return preproc_spec_train + + @evaluate_lazily + def get_preproc_spec_eval(num_frames): + preproc_spec_eval = ( + f"decode_and_subsample_video({num_frames}, False, additional_keys=('split', 'media_id'), additional_keys_decode_bytes=(False, True))" + f"|decode_activity_net_paragraph_caption_annotations('{tokenizer_path}', {num_captions_per_sample_eval}, {max_text_tokens}, '{concat_captions_eval}', additional_keys=('media_id',))" + f"|video_resize_central_crop({crop_size})" + f"|init_padding_mask" + ) + return preproc_spec_eval + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.sources = [ + ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': common.ANET_TRAIN_TFRECORD_PATH, + 'size': common.ANET_TRAIN_SIZE, + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1024, + 'cache': False, + 'preproc_spec': get_preproc_spec_train(config.get_ref('num_frames')), + }) + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.sources = [ + ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': common.ANET_PARA_VAL_TFRECORD_PATH, + 'size': common.ANET_PARA_VAL_SIZE, + 'context_features': context_features_para, + 'sequence_features': sequence_features_para, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': get_preproc_spec_eval(config.get_ref('num_frames')), + }), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + @evaluate_lazily + def get_input_shape(num_frames): + return [-1, num_frames, crop_size, crop_size, 3] + # Dataset configs needed by the trainer. + config.dataset_configs.test_annotation_path = '' + config.dataset_configs.extra_meta_data = { + 'input_shape': get_input_shape(config.get_ref('num_frames')), + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'streaming_model' + config.model.pixel_mean = ( + 0.48145466 * 255, 0.4578275 * 255, 0.40821073 * 255) + config.model.pixel_std = ( + 0.26862954 * 255, 0.26130258 * 255, 0.27577711 * 255) + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.window_block_indexes = () + config.model.backbone_args.use_rel_pos = False + config.model.backbone_args.use_ln_pre = True + config.model.backbone_args.use_ln_post = True + config.model.backbone_args.pe_bias = False + config.model.backbone_args.use_class_embedding = True + config.model.backbone_args.embed_dim = 1024 + config.model.backbone_args.depth = 24 + config.model.backbone_args.num_heads = 16 + config.model.backbone_args.patch_size = 14 + config.model.decode_method = 'beam' + config.model.decode_brevity_penalty_alpha = 0.6 + config.model.decode_beam_size = 4 + config.model.num_frames = config.num_frames + config.model.max_caption_length = 128 + + config.model.streaming_method = 'kmeans' + config.model.streaming_buffer_size = (256 + 1) * 2 + config.model.kmeans_num_iters = 2 + + config.weights = '/path/to/git_pretrain' + + # Training. + config.batch_size = 32 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.frozen_params = ( + ('.*image_encoder.*', 'image_encoder'),) + + # learning rate and training schedule + config.num_training_steps = 5000 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = (4000,) + config.lr_configs.decay_factors = [0.1] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 2e-5 + config.log_eval_steps = 500 + config.eval_first_step = False + config.checkpoint_max_to_keep = 10 + + # Logging. + config.eval_meteor_spice = False ## + config.eval_only = False ## + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.eval_first_step = False + config.eval_step_multiplier = 1.3 + + return config + + diff --git a/scenic/projects/streaming_dvc/configs/git_anet_streaming_input_output.py b/scenic/projects/streaming_dvc/configs/git_anet_streaming_input_output.py new file mode 100644 index 0000000000000000000000000000000000000000..f481df3bb6b1e586b5239112ca761882c48b4764 --- /dev/null +++ b/scenic/projects/streaming_dvc/configs/git_anet_streaming_input_output.py @@ -0,0 +1,239 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Config for ActivityNet Dense Captioning. + +""" + +import ml_collections +from scenic.projects.streaming_dvc.configs import common +evaluate_lazily = common.evaluate_lazily + + +def get_config(): + """Returns the configuration for GIT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'git_anet_streaming_input_output' + + # Dataset. + config.dataset_name = 'flexio_tfrecord' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = [ + 'scenic.projects.streaming_dvc.io.ops', 'scenic.projects.streaming_dvc.io.densecap_ops'] + tokenizer_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.tokenizer_weight_path = tokenizer_path + config.dataset_configs.test_annotation_path = common.ANET_ANN_VID2SEQ_FORMAT_PATH + + # Pre-processing settings + context_features = { + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'media_id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'video/timestamps/start': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'video/timestamps/end': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'video/duration': {'feature_type': 'VarLen', 'dtype': 'int64'}, + } + sequence_features = { + 'image/encoded': {'feature_type': 'FixedLenSequence', 'shape': [], 'dtype': 'string'}, + 'image/timestamp': {'feature_type': 'FixedLenSequence', 'shape': [], 'dtype': 'int64'}, + } + + crop_size = 224 + max_text_tokens = 256 + + config.num_frames = 64 + config.num_bins = 64 + config.num_dense_outputs = 16 + config.early_segments_as_context = True + config.normalize_early_timestamps = True + config.context_mask_ratio = 0.5 + config.only_use_augmented_context = True + config.dynamic_location = False + continuous_random_mask = True + + @evaluate_lazily + def get_preproc_spec_train(num_frames, num_dense_outputs, early_segments_as_context, normalize_early_timestamps, num_bins, context_mask_ratio, only_use_augmented_context, dynamic_location): + preproc_spec_train = ( + f"decode_and_subsample_densecap_video({num_frames}, False, zero_pad_frames=False)" + f"|decode_activity_net_dense_caption_annotations_dense_outputs_aug_context" + f"(True, {num_dense_outputs}, '{tokenizer_path}', {max_text_tokens}, " + f"num_bins={num_bins}, early_segments_as_context={early_segments_as_context}, normalize_early_timestamps={normalize_early_timestamps}, " + f"context_mask_ratio={context_mask_ratio}, no_timestamp_in_context=True, dynamic_location={dynamic_location}, only_use_augmented_context={only_use_augmented_context}, " + f"continuous_random_mask={continuous_random_mask})" + f"|video_resize_central_crop({crop_size})" + f"|init_padding_mask" + ) + return preproc_spec_train + + @evaluate_lazily + def get_preproc_spec_eval(num_frames, num_dense_outputs, early_segments_as_context, normalize_early_timestamps, num_bins): + # We use num_bins to determine the output location in decode_activity_net_dense_caption_annotations_dense_outputs_aug_context. + # It has to be the same with num_frames. + assert num_frames == num_bins + preproc_spec_eval = ( + f"decode_and_subsample_densecap_video({num_frames}, False, zero_pad_frames=False)" + f"|decode_activity_net_dense_caption_annotations_dense_outputs_aug_context" + f"(False, {num_dense_outputs}, '{tokenizer_path}', {max_text_tokens}, " + f"num_bins={num_bins}, early_segments_as_context={early_segments_as_context}, normalize_early_timestamps={normalize_early_timestamps})" + f"|video_resize_central_crop({crop_size})" + f"|init_padding_mask" + ) + return preproc_spec_eval + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.sources = [ + ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': common.ANET_TRAIN_TFRECORD_PATH, + 'size': common.ANET_TRAIN_SIZE, + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1024, + 'cache': False, + 'preproc_spec': get_preproc_spec_train( + config.get_ref('num_frames'), + config.get_ref('num_dense_outputs'), + config.get_ref('early_segments_as_context'), + config.get_ref('normalize_early_timestamps'), + config.get_ref('num_bins'), + config.get_ref('context_mask_ratio'), + config.get_ref('only_use_augmented_context'), + config.get_ref('dynamic_location'), + ), + }) + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.sources = [ + ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': common.ANET_VAL_TFRECORD_PATH, + 'size': common.ANET_VAL_SIZE, + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': get_preproc_spec_eval( + config.get_ref('num_frames'), + config.get_ref('num_dense_outputs'), + config.get_ref('early_segments_as_context'), + config.get_ref('normalize_early_timestamps'), + config.get_ref('num_bins'), + ), + }), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + @evaluate_lazily + def get_input_shape(num_frames): + return [-1, num_frames, crop_size, crop_size, 3] + # Dataset configs needed by the trainer. + config.dataset_configs.extra_meta_data = { + 'input_shape': get_input_shape(config.get_ref('num_frames')), + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'streaming_dense_model' + config.model.pixel_mean = ( + 0.48145466 * 255, 0.4578275 * 255, 0.40821073 * 255) + config.model.pixel_std = ( + 0.26862954 * 255, 0.26130258 * 255, 0.27577711 * 255) + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.window_block_indexes = () + config.model.backbone_args.use_rel_pos = False + config.model.backbone_args.use_ln_pre = True + config.model.backbone_args.use_ln_post = True + config.model.backbone_args.pe_bias = False + config.model.backbone_args.use_class_embedding = True + config.model.backbone_args.embed_dim = 1024 + config.model.backbone_args.depth = 24 + config.model.backbone_args.num_heads = 16 + config.model.backbone_args.patch_size = 14 + config.model.decode_method = 'beam' + config.model.decode_brevity_penalty_alpha = 0.6 + config.model.decode_beam_size = 4 + config.model.num_frames = config.num_frames + config.model.max_caption_length = max_text_tokens + config.model.vocab_size = common.BERT_VOCAB_SIZE + config.get_ref('num_bins') + config.model.num_bins = config.get_ref('num_bins') + config.model.show_densecap_loss = True + config.model.loc_loss_weight = 0.5 + config.model.num_dense_outputs = config.get_ref('num_dense_outputs') + config.model.ignore_empty_data = True + config.model.early_segments_as_context = config.get_ref( + 'early_segments_as_context') + config.model.normalize_early_timestamps = config.get_ref( + 'normalize_early_timestamps') + config.model.with_temp_emb = False + config.model.num_dense_outputs_test = 2 + config.model.no_timestamp_in_context = True + + config.model.streaming_method = 'kmeans' + config.model.streaming_buffer_size = (256 + 1) * 2 + config.model.kmeans_num_iters = 2 + config.model.streaming_feature_implementation = 'given_checkpoints' + + config.weights = '/path/to/git_pretrain' + config.load_available_shape = ( + 'textual/output/bias', 'textual/output/kernel', + 'textual/embedding/words/embedding') + + # Training. + config.batch_size = 32 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.frozen_params = ( + ('.*image_encoder.*', 'image_encoder'),) + + # learning rate and training schedule + config.num_training_steps = 5000 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = (4000,) + config.lr_configs.decay_factors = [0.1] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 1e-5 + config.log_eval_steps = 500 + config.checkpoint_steps = 500 + config.eval_first_step = False + config.checkpoint_max_to_keep = 10 + + # Logging. + config.eval_meteor_spice = False ## + config.eval_only = False ## + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.evaluator = 'densecap' + config.eval_step_multiplier = 1.3 + + return config + + diff --git a/scenic/projects/streaming_dvc/configs/git_vitt_streaming_input_output.py b/scenic/projects/streaming_dvc/configs/git_vitt_streaming_input_output.py new file mode 100644 index 0000000000000000000000000000000000000000..af392f777877bb83e31bbb782f5e1ea36526f602 --- /dev/null +++ b/scenic/projects/streaming_dvc/configs/git_vitt_streaming_input_output.py @@ -0,0 +1,239 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Config for ViTT Dense Captioning. + +""" + +import ml_collections +from scenic.projects.streaming_dvc.configs import common +evaluate_lazily = common.evaluate_lazily + + +def get_config(): + """Returns the configuration for GIT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'git_vitt_streaming_input_output' + + # Dataset. + config.dataset_name = 'flexio_tfrecord' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = [ + 'scenic.projects.streaming_dvc.io.ops', 'scenic.projects.streaming_dvc.io.densecap_ops'] + tokenizer_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.tokenizer_weight_path = tokenizer_path + config.dataset_configs.test_annotation_path = common.VITT_ANN_VID2SEQ_FORMAT_PATH + + # Pre-processing settings + context_features = { + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'key': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'video/timestamps/start': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'video/timestamps/end': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'video/duration': {'feature_type': 'VarLen', 'dtype': 'int64'}, + } + sequence_features = { + 'image/encoded': {'feature_type': 'FixedLenSequence', 'shape': [], 'dtype': 'string'}, + 'image/timestamp': {'feature_type': 'FixedLenSequence', 'shape': [], 'dtype': 'int64'}, + } + + crop_size = 224 + max_text_tokens = 256 + + config.num_frames = 64 + config.num_bins = 64 + config.num_dense_outputs = 16 + config.early_segments_as_context = True + config.normalize_early_timestamps = True + config.context_mask_ratio = 0.5 + config.only_use_augmented_context = True + config.dynamic_location = False + continuous_random_mask = True + + @evaluate_lazily + def get_preproc_spec_train(num_frames, num_dense_outputs, early_segments_as_context, normalize_early_timestamps, num_bins, context_mask_ratio, only_use_augmented_context, dynamic_location): + preproc_spec_train = ( + f"decode_and_subsample_densecap_video({num_frames}, False, zero_pad_frames=False, media_id_key='key')" + f"|decode_activity_net_dense_caption_annotations_dense_outputs_aug_context" + f"(True, {num_dense_outputs}, '{tokenizer_path}', {max_text_tokens}, " + f"num_bins={num_bins}, early_segments_as_context={early_segments_as_context}, normalize_early_timestamps={normalize_early_timestamps}, " + f"context_mask_ratio={context_mask_ratio}, no_timestamp_in_context=True, dynamic_location={dynamic_location}, only_use_augmented_context={only_use_augmented_context}, " + f"continuous_random_mask={continuous_random_mask})" + f"|video_resize_central_crop({crop_size})" + f"|init_padding_mask" + ) + return preproc_spec_train + + @evaluate_lazily + def get_preproc_spec_eval(num_frames, num_dense_outputs, early_segments_as_context, normalize_early_timestamps, num_bins): + # We use num_bins to determine the output location in decode_activity_net_dense_caption_annotations_dense_outputs_aug_context. + # It has to be the same with num_frames. + assert num_frames == num_bins + preproc_spec_eval = ( + f"decode_and_subsample_densecap_video({num_frames}, False, zero_pad_frames=False, media_id_key='key')" + f"|decode_activity_net_dense_caption_annotations_dense_outputs_aug_context" + f"(False, {num_dense_outputs}, '{tokenizer_path}', {max_text_tokens}, " + f"num_bins={num_bins}, early_segments_as_context={early_segments_as_context}, normalize_early_timestamps={normalize_early_timestamps})" + f"|video_resize_central_crop({crop_size})" + f"|init_padding_mask" + ) + return preproc_spec_eval + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.sources = [ + ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': common.VITT_TRAIN_TFRECORD_PATH, + 'size': common.VITT_TRAIN_SIZE, + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1024, + 'cache': False, + 'preproc_spec': get_preproc_spec_train( + config.get_ref('num_frames'), + config.get_ref('num_dense_outputs'), + config.get_ref('early_segments_as_context'), + config.get_ref('normalize_early_timestamps'), + config.get_ref('num_bins'), + config.get_ref('context_mask_ratio'), + config.get_ref('only_use_augmented_context'), + config.get_ref('dynamic_location'), + ), + }) + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.sources = [ + ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': common.VITT_TEST_TFRECORD_PATH, + 'size': common.VITT_TEST_SIZE, + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': get_preproc_spec_eval( + config.get_ref('num_frames'), + config.get_ref('num_dense_outputs'), + config.get_ref('early_segments_as_context'), + config.get_ref('normalize_early_timestamps'), + config.get_ref('num_bins'), + ), + }), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + @evaluate_lazily + def get_input_shape(num_frames): + return [-1, num_frames, crop_size, crop_size, 3] + # Dataset configs needed by the trainer. + config.dataset_configs.extra_meta_data = { + 'input_shape': get_input_shape(config.get_ref('num_frames')), + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'streaming_dense_model' + config.model.pixel_mean = ( + 0.48145466 * 255, 0.4578275 * 255, 0.40821073 * 255) + config.model.pixel_std = ( + 0.26862954 * 255, 0.26130258 * 255, 0.27577711 * 255) + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.window_block_indexes = () + config.model.backbone_args.use_rel_pos = False + config.model.backbone_args.use_ln_pre = True + config.model.backbone_args.use_ln_post = True + config.model.backbone_args.pe_bias = False + config.model.backbone_args.use_class_embedding = True + config.model.backbone_args.embed_dim = 1024 + config.model.backbone_args.depth = 24 + config.model.backbone_args.num_heads = 16 + config.model.backbone_args.patch_size = 14 + config.model.decode_method = 'beam' + config.model.decode_brevity_penalty_alpha = 0.6 + config.model.decode_beam_size = 4 + config.model.num_frames = config.num_frames + config.model.max_caption_length = max_text_tokens + config.model.vocab_size = common.BERT_VOCAB_SIZE + config.get_ref('num_bins') + config.model.num_bins = config.get_ref('num_bins') + config.model.show_densecap_loss = True + config.model.loc_loss_weight = 0.5 + config.model.num_dense_outputs = config.get_ref('num_dense_outputs') + config.model.ignore_empty_data = True + config.model.early_segments_as_context = config.get_ref( + 'early_segments_as_context') + config.model.normalize_early_timestamps = config.get_ref( + 'normalize_early_timestamps') + config.model.with_temp_emb = False + config.model.num_dense_outputs_test = 2 + config.model.no_timestamp_in_context = True + + config.model.streaming_method = 'kmeans' + config.model.streaming_buffer_size = (256 + 1) * 2 + config.model.kmeans_num_iters = 2 + config.model.streaming_feature_implementation = 'given_checkpoints' + + config.weights = '/path/to/git_pretrain' + config.load_available_shape = ( + 'textual/output/bias', 'textual/output/kernel', + 'textual/embedding/words/embedding') + + # Training. + config.batch_size = 32 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.frozen_params = ( + ('.*image_encoder.*', 'image_encoder'),) + + # learning rate and training schedule + config.num_training_steps = 2000 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = (2000,) + config.lr_configs.decay_factors = [0.1] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 1e-5 + config.log_eval_steps = 500 + config.checkpoint_steps = 500 + config.eval_first_step = False + config.checkpoint_max_to_keep = 100 + + # Logging. + config.eval_meteor_spice = False ## + config.eval_only = False ## + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.evaluator = 'densecap' + config.eval_step_multiplier = 1.3 + + return config + + diff --git a/scenic/projects/streaming_dvc/configs/git_youcook2_paragraph_streaming_input.py b/scenic/projects/streaming_dvc/configs/git_youcook2_paragraph_streaming_input.py new file mode 100644 index 0000000000000000000000000000000000000000..41751fe1e27c7665afd1388fe6868b1da8454cc7 --- /dev/null +++ b/scenic/projects/streaming_dvc/configs/git_youcook2_paragraph_streaming_input.py @@ -0,0 +1,194 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Config for YouCook2 Paragraph Captioning. + +""" + +import ml_collections +from scenic.projects.streaming_dvc.configs import common +evaluate_lazily = common.evaluate_lazily + + +def get_config(): + """Returns the configuration for GIT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'git_youcook2_paragraph_streaming_input' + + # Dataset. + config.dataset_name = 'flexio_tfrecord' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = ['scenic.projects.streaming_dvc.io.ops'] + tokenizer_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.tokenizer_weight_path = tokenizer_path + + # Pre-processing settings + context_features = { + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'video_id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'media_id': {'feature_type': 'VarLen', 'dtype': 'string'}, + } + sequence_features = { + 'image/encoded': {'feature_type': 'FixedLenSequence', 'shape': [], 'dtype': 'string'}, + } + + context_features_para = context_features.copy() + context_features_para.update({ + 'split': {'feature_type': 'VarLen', 'dtype': 'int64'}, + }) + sequence_features_para = sequence_features.copy() + + crop_size = 224 + num_captions_per_sample_train = 1 # one paragraph annotation for training. + num_captions_per_sample_eval = 1 # two sets of paragraph annotations for eval. + max_text_tokens = 128 + + config.num_frames = 64 + concat_captions_train = 'concat_all' + concat_captions_eval = 'concat_all' + + @evaluate_lazily + def get_preproc_spec_train(num_frames): + preproc_spec_train = ( + f"decode_and_subsample_video({num_frames}, True)" + f"|decode_activity_net_paragraph_caption_annotations('{tokenizer_path}', {num_captions_per_sample_train}, {max_text_tokens}, '{concat_captions_train}')" + f"|video_resize_central_crop({crop_size})" + f"|init_padding_mask" + ) + return preproc_spec_train + + @evaluate_lazily + def get_preproc_spec_eval(num_frames): + preproc_spec_eval = ( + f"decode_and_subsample_video({num_frames}, False, additional_keys=('split', 'media_id'), additional_keys_decode_bytes=(False, True))" + f"|decode_activity_net_paragraph_caption_annotations('{tokenizer_path}', {num_captions_per_sample_eval}, {max_text_tokens}, '{concat_captions_eval}', additional_keys=('media_id',))" + f"|video_resize_central_crop({crop_size})" + f"|init_padding_mask" + ) + return preproc_spec_eval + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.sources = [ + ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': common.YOUCOOK2_TRAIN_TFRECORD_PATH, + 'size': common.YOUCOOK2_TRAIN_SIZE, + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1024, + 'cache': False, + 'preproc_spec': get_preproc_spec_train(config.get_ref('num_frames')), + }) + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.sources = [ + ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': common.YOUCOOK2_VAL_TFRECORD_PATH, + 'size': common.YOUCOOK2_VAL_SIZE, + 'context_features': context_features_para, + 'sequence_features': sequence_features_para, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': get_preproc_spec_eval(config.get_ref('num_frames')), + }), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + @evaluate_lazily + def get_input_shape(num_frames): + return [-1, num_frames, crop_size, crop_size, 3] + # Dataset configs needed by the trainer. + config.dataset_configs.test_annotation_path = '' + config.dataset_configs.extra_meta_data = { + 'input_shape': get_input_shape(config.get_ref('num_frames')), + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'streaming_model' + config.model.pixel_mean = ( + 0.48145466 * 255, 0.4578275 * 255, 0.40821073 * 255) + config.model.pixel_std = ( + 0.26862954 * 255, 0.26130258 * 255, 0.27577711 * 255) + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.window_block_indexes = () + config.model.backbone_args.use_rel_pos = False + config.model.backbone_args.use_ln_pre = True + config.model.backbone_args.use_ln_post = True + config.model.backbone_args.pe_bias = False + config.model.backbone_args.use_class_embedding = True + config.model.backbone_args.embed_dim = 1024 + config.model.backbone_args.depth = 24 + config.model.backbone_args.num_heads = 16 + config.model.backbone_args.patch_size = 14 + config.model.decode_method = 'beam' + config.model.decode_brevity_penalty_alpha = 0.6 + config.model.decode_beam_size = 4 + config.model.num_frames = config.num_frames + config.model.max_caption_length = 128 + + config.model.streaming_method = 'kmeans' + config.model.streaming_buffer_size = (256 + 1) * 2 + config.model.kmeans_num_iters = 2 + + config.weights = '/path/to/git_pretrain' + + # Training. + config.batch_size = 32 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.frozen_params = ( + ('.*image_encoder.*', 'image_encoder'),) + + # learning rate and training schedule + config.num_training_steps = 5000 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = (4000,) + config.lr_configs.decay_factors = [0.1] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 2e-5 + config.log_eval_steps = 1000 + config.eval_first_step = False + config.checkpoint_max_to_keep = 10 + + # Logging. + config.eval_meteor_spice = False ## + config.eval_only = False ## + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.eval_first_step = False + + return config + + diff --git a/scenic/projects/streaming_dvc/configs/git_youcook2_streaming_input_output.py b/scenic/projects/streaming_dvc/configs/git_youcook2_streaming_input_output.py new file mode 100644 index 0000000000000000000000000000000000000000..b380caeea355ac6278692324a57607790cade9d3 --- /dev/null +++ b/scenic/projects/streaming_dvc/configs/git_youcook2_streaming_input_output.py @@ -0,0 +1,239 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Config for Youcook2 Dense Captioning. + +""" + +import ml_collections +from scenic.projects.streaming_dvc.configs import common +evaluate_lazily = common.evaluate_lazily + + +def get_config(): + """Returns the configuration for GIT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'git_youcook2_streaming_input_output' + + # Dataset. + config.dataset_name = 'flexio' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = [ + 'scenic.projects.streaming_dvc.io.ops', 'scenic.projects.streaming_dvc.io.densecap_ops'] + tokenizer_path = common.BERT_TOKENIZER_PATH + config.dataset_configs.tokenizer_weight_path = tokenizer_path + config.dataset_configs.test_annotation_path = common.YOUCOOK2_ANN_VID2SEQ_FORMAT_PATH + + # Pre-processing settings + context_features = { + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'media_id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'video/timestamps/start': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'video/timestamps/end': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'video/duration': {'feature_type': 'VarLen', 'dtype': 'int64'}, + } + sequence_features = { + 'image/encoded': {'feature_type': 'FixedLenSequence', 'shape': [], 'dtype': 'string'}, + 'image/timestamp': {'feature_type': 'FixedLenSequence', 'shape': [], 'dtype': 'int64'}, + } + + crop_size = 224 + max_text_tokens = 256 + + config.num_frames = 64 + config.num_bins = 64 + config.num_dense_outputs = 16 + config.early_segments_as_context = True + config.normalize_early_timestamps = True + config.context_mask_ratio = 0.5 + config.only_use_augmented_context = True + config.dynamic_location = False + continuous_random_mask = True + + @evaluate_lazily + def get_preproc_spec_train(num_frames, num_dense_outputs, early_segments_as_context, normalize_early_timestamps, num_bins, context_mask_ratio, only_use_augmented_context, dynamic_location): + preproc_spec_train = ( + f"decode_and_subsample_densecap_video({num_frames}, False, zero_pad_frames=False)" + f"|decode_activity_net_dense_caption_annotations_dense_outputs_aug_context" + f"(True, {num_dense_outputs}, '{tokenizer_path}', {max_text_tokens}, " + f"num_bins={num_bins}, early_segments_as_context={early_segments_as_context}, normalize_early_timestamps={normalize_early_timestamps}, " + f"context_mask_ratio={context_mask_ratio}, no_timestamp_in_context=True, dynamic_location={dynamic_location}, only_use_augmented_context={only_use_augmented_context}, " + f"continuous_random_mask={continuous_random_mask})" + f"|video_resize_central_crop({crop_size})" + f"|init_padding_mask" + ) + return preproc_spec_train + + @evaluate_lazily + def get_preproc_spec_eval(num_frames, num_dense_outputs, early_segments_as_context, normalize_early_timestamps, num_bins): + # We use num_bins to determine the output location in decode_activity_net_dense_caption_annotations_dense_outputs_aug_context. + # It has to be the same with num_frames. + assert num_frames == num_bins + preproc_spec_eval = ( + f"decode_and_subsample_densecap_video({num_frames}, False, zero_pad_frames=False)" + f"|decode_activity_net_dense_caption_annotations_dense_outputs_aug_context" + f"(False, {num_dense_outputs}, '{tokenizer_path}', {max_text_tokens}, " + f"num_bins={num_bins}, early_segments_as_context={early_segments_as_context}, normalize_early_timestamps={normalize_early_timestamps})" + f"|video_resize_central_crop({crop_size})" + f"|init_padding_mask" + ) + return preproc_spec_eval + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.sources = [ + ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': common.YOUCOOK2_TRAIN_TFRECORD_PATH, + 'size': common.YOUCOOK2_TRAIN_SIZE, + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1024, + 'cache': False, + 'preproc_spec': get_preproc_spec_train( + config.get_ref('num_frames'), + config.get_ref('num_dense_outputs'), + config.get_ref('early_segments_as_context'), + config.get_ref('normalize_early_timestamps'), + config.get_ref('num_bins'), + config.get_ref('context_mask_ratio'), + config.get_ref('only_use_augmented_context'), + config.get_ref('dynamic_location'), + ), + }) + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.sources = [ + ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': common.YOUCOOK2_VAL_TFRECORD_PATH, + 'size': common.YOUCOOK2_VAL_SIZE, + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': get_preproc_spec_eval( + config.get_ref('num_frames'), + config.get_ref('num_dense_outputs'), + config.get_ref('early_segments_as_context'), + config.get_ref('normalize_early_timestamps'), + config.get_ref('num_bins'), + ), + }), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + @evaluate_lazily + def get_input_shape(num_frames): + return [-1, num_frames, crop_size, crop_size, 3] + # Dataset configs needed by the trainer. + config.dataset_configs.extra_meta_data = { + 'input_shape': get_input_shape(config.get_ref('num_frames')), + } + + config.rng_seed = 0 + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'streaming_dense_model' + config.model.pixel_mean = ( + 0.48145466 * 255, 0.4578275 * 255, 0.40821073 * 255) + config.model.pixel_std = ( + 0.26862954 * 255, 0.26130258 * 255, 0.27577711 * 255) + config.model.backbone_args = ml_collections.ConfigDict() + config.model.backbone_args.window_block_indexes = () + config.model.backbone_args.use_rel_pos = False + config.model.backbone_args.use_ln_pre = True + config.model.backbone_args.use_ln_post = True + config.model.backbone_args.pe_bias = False + config.model.backbone_args.use_class_embedding = True + config.model.backbone_args.embed_dim = 1024 + config.model.backbone_args.depth = 24 + config.model.backbone_args.num_heads = 16 + config.model.backbone_args.patch_size = 14 + config.model.decode_method = 'beam' + config.model.decode_brevity_penalty_alpha = 0.6 + config.model.decode_beam_size = 4 + config.model.num_frames = config.num_frames + config.model.max_caption_length = max_text_tokens + config.model.vocab_size = common.BERT_VOCAB_SIZE + config.get_ref('num_bins') + config.model.num_bins = config.get_ref('num_bins') + config.model.show_densecap_loss = True + config.model.loc_loss_weight = 0.5 + config.model.num_dense_outputs = config.get_ref('num_dense_outputs') + config.model.ignore_empty_data = True + config.model.early_segments_as_context = config.get_ref( + 'early_segments_as_context') + config.model.normalize_early_timestamps = config.get_ref( + 'normalize_early_timestamps') + config.model.with_temp_emb = False + config.model.num_dense_outputs_test = 2 + config.model.no_timestamp_in_context = True + + config.model.streaming_method = 'kmeans' + config.model.streaming_buffer_size = (256 + 1) * 2 + config.model.kmeans_num_iters = 2 + config.model.streaming_feature_implementation = 'given_checkpoints' + + config.weights = '/path/to/git_pretrain' + config.load_available_shape = ( + 'textual/output/bias', 'textual/output/kernel', + 'textual/embedding/words/embedding') + + # Training. + config.batch_size = 32 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.frozen_params = ( + ('.*image_encoder.*', 'image_encoder'),) + + # learning rate and training schedule + config.num_training_steps = 2000 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = (2000,) + config.lr_configs.decay_factors = [0.1] + config.lr_configs.warmup_steps = 250 + config.lr_configs.base_learning_rate = 2e-5 + config.log_eval_steps = 100 + config.checkpoint_steps = 100 + config.eval_first_step = False + config.checkpoint_max_to_keep = 20 + + # Logging. + config.eval_meteor_spice = False ## + config.eval_only = False ## + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.evaluator = 'densecap' + config.eval_step_multiplier = 1.3 + + return config + + diff --git a/scenic/projects/streaming_dvc/configs/vid2seq_anet_streaming_input_output.py b/scenic/projects/streaming_dvc/configs/vid2seq_anet_streaming_input_output.py new file mode 100644 index 0000000000000000000000000000000000000000..7e16dad7a8a61424c3171eeea2087712c6feefb9 --- /dev/null +++ b/scenic/projects/streaming_dvc/configs/vid2seq_anet_streaming_input_output.py @@ -0,0 +1,239 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Config for ActivityNet Dense Captioning. + +""" + +import ml_collections +from scenic.projects.streaming_dvc.configs import common +evaluate_lazily = common.evaluate_lazily + + +def get_config(): + """Returns the configuration for GIT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'vid2seq_anet_streaming_input_output' + + # Dataset. + config.dataset_name = 'flexio_tfrecord' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = [ + 'scenic.projects.streaming_dvc.io.ops', + 'scenic.projects.streaming_dvc.io.densecap_ops'] + config.dataset_configs.test_annotation_path = common.ANET_ANN_VID2SEQ_FORMAT_PATH + tokenizer_path = 't5' + config.dataset_configs.tokenizer_weight_path = tokenizer_path # Used in evaluation + + # Pre-processing settings + context_features = { + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'media_id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'video/timestamps/start': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'video/timestamps/end': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'video/duration': {'feature_type': 'VarLen', 'dtype': 'int64'}, + } + sequence_features = { + 'image/encoded': {'feature_type': 'FixedLenSequence', 'shape': [], 'dtype': 'string'}, + 'image/timestamp': {'feature_type': 'FixedLenSequence', 'shape': [], 'dtype': 'int64'}, + 'image/clip_embeddings': {'feature_type': 'FixedLenSequence', 'shape': [768], 'dtype': 'float32'}, + } + + crop_size = 224 + max_text_tokens = 256 + num_bins = 100 + + config.num_bins = num_bins + config.num_frames = 100 + config.num_dense_outputs = 8 + config.no_timestamp_in_context = True + config.context_mask_ratio = 0.5 + config.dynamic_location = False + continuous_random_mask = True + + @evaluate_lazily + def get_preproc_spec_train(num_frames, num_dense_outputs, no_timestamp_in_context, context_mask_ratio, dynamic_location): + preproc_spec_train = ( + # NOTE: it's important to turn off the random frame downsampling here. + # Otherwise the time tokens are not aligned. + f"decode_and_subsample_densecap_video({num_frames}, False, zero_pad_frames=False, with_clip_embeddings=True)" + f"|decode_activity_net_dense_caption_annotations_dense_outputs_aug_context" + f"(True, {num_dense_outputs}, '{tokenizer_path}', {max_text_tokens}, num_bins={num_bins}, with_clip_embeddings=True, " + f"early_segments_as_context=True, normalize_early_timestamps=True, " + f"context_mask_ratio={context_mask_ratio}, no_timestamp_in_context={no_timestamp_in_context}, dynamic_location={dynamic_location}, only_use_augmented_context=True, " + f"continuous_random_mask={continuous_random_mask})" + f"|video_resize_central_crop({crop_size})" + f"|init_padding_mask" + ) + return preproc_spec_train + + @evaluate_lazily + def get_preproc_spec_eval(num_frames, num_dense_outputs): + preproc_spec_eval = ( + f"decode_and_subsample_densecap_video({num_frames}, False, zero_pad_frames=False, with_clip_embeddings=True)" + f"|decode_activity_net_dense_caption_annotations_dense_outputs_aug_context" + f"(False, {num_dense_outputs}, '{tokenizer_path}',{max_text_tokens}, num_bins={num_bins}, with_clip_embeddings=True, " + f"early_segments_as_context=True, normalize_early_timestamps=True)" + f"|video_resize_central_crop({crop_size})" + f"|init_padding_mask" + ) + return preproc_spec_eval + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.sources = [ + ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': common.ANET_TRAIN_TFRECORD_PATH, + 'size': common.ANET_TRAIN_SIZE, + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1024, + 'cache': False, + 'preproc_spec': get_preproc_spec_train( + config.get_ref('num_frames'), + config.get_ref('num_dense_outputs'), + config.get_ref('no_timestamp_in_context'), + config.get_ref('context_mask_ratio'), + config.get_ref('dynamic_location'), + ), + }) + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.sources = [ + ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': common.ANET_VAL_TFRECORD_PATH, + 'size': common.ANET_VAL_SIZE, + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': get_preproc_spec_eval( + config.get_ref('num_frames'), + config.get_ref('num_dense_outputs'), + ), + }), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + @evaluate_lazily + def get_input_shape(num_frames): + return [-1, num_frames, crop_size, crop_size, 3] + # Dataset configs needed by the trainer. + config.dataset_configs.extra_meta_data = { + 'input_shape': get_input_shape(config.get_ref('num_frames')), + } + + config.rng_seed = 0 + + config.additional_input_spec = [ + ((-1, config.num_frames, 768), 'float32'), + ((-1, 2, 256), 'int32')] + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'streaming_vid2seq' + config.model.pixel_mean = ( + 0.48145466 * 255, 0.4578275 * 255, 0.40821073 * 255) + config.model.pixel_std = ( + 0.26862954 * 255, 0.26130258 * 255, 0.27577711 * 255) + config.model.decode_method = 'beam' + config.model.decode_brevity_penalty_alpha = 0.6 + config.model.decode_beam_size = 4 + config.model.max_caption_length = max_text_tokens + config.model.vocab_size = common.SP_VOCAB_SIZE + num_bins + config.model.num_bins = num_bins + + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.share_encoder = True + config.model.encoder.encoder_type = 'cat_encoder' + config.model.encoder.cat_encoder = ml_collections.ConfigDict() + config.model.encoder.cat_encoder.encoder_type = 'vit' + config.model.encoder.cat_encoder.dim = 2048 + config.model.encoder.cat_encoder.layers = 12 + config.model.encoder.cat_encoder.heads = 12 + config.model.encoder.cat_encoder.pos_embed = 'learned_1d' + config.model.encoder.cat_encoder.dropout_rate = 0. + config.model.encoder.cat_encoder.t5_dropout_rate = 0.1 + config.model.encoder.cat_encoder.stochastic_depth = 0. + config.model.encoder.cat_encoder.pretrained_config = 't5_1_1_base' + config.model.encoder.cat_encoder.proj_dim = 768 + + config.model.decoder_type = 't5_decoder' + config.model.decoder = ml_collections.ConfigDict() + config.model.decoder.t5_decoder = ml_collections.ConfigDict() + config.model.decoder.t5_decoder.type_vocab_size = 0 + config.model.decoder.t5_decoder.gate = False + config.model.decoder.t5_decoder.logits_via_embedding = False + config.model.decoder.t5_decoder.dropout_rate = 0.1 + config.model.decoder.t5_decoder.num_frames = config.get_ref('num_frames') + config.model.decoder.t5_decoder.pretrained_config = 't5_1_1_base' + + config.model.num_dense_outputs = config.get_ref('num_dense_outputs') + config.model.early_segments_as_context = True + config.model.normalize_early_timestamps = True + config.model.no_timestamp_in_context = config.get_ref('no_timestamp_in_context') + config.model.num_dense_outputs_test = 2 + + config.weights = '/path/to/vid2seq/yt-temporal-1b' + + # Training. + config.batch_size = 32 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.grad_clip = ml_collections.ConfigDict() + config.optimizer.grad_clip.clip_method = 'clip_by_global_norm' + config.optimizer.grad_clip.clip_value = 1.0 + + # learning rate and training schedule + num_epochs = 10 + iters_per_epoch = common.ANET_TRAIN_SIZE // config.batch_size + config.num_training_steps = num_epochs * iters_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = config.num_training_steps // 10 + config.lr_configs.base_learning_rate = 1e-4 + config.log_eval_steps = iters_per_epoch + config.checkpoint_steps = iters_per_epoch + config.eval_first_step = False + config.checkpoint_max_to_keep = 10 + + # Logging. + config.eval_meteor_spice = False ## + config.eval_only = False ## + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.evaluator = 'densecap' + config.eval_step_multiplier = 1.3 + + return config + + diff --git a/scenic/projects/streaming_dvc/configs/vid2seq_vitt_streaming_input_output.py b/scenic/projects/streaming_dvc/configs/vid2seq_vitt_streaming_input_output.py new file mode 100644 index 0000000000000000000000000000000000000000..a2bba53cc6224bbdf771a542110b469928809685 --- /dev/null +++ b/scenic/projects/streaming_dvc/configs/vid2seq_vitt_streaming_input_output.py @@ -0,0 +1,143 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Config for ViTT Dense Captioning. + +""" + +import ml_collections +from scenic.projects.streaming_dvc.configs import common +evaluate_lazily = common.evaluate_lazily + + +def get_config(): + """Returns the configuration for GIT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'vid2seq_vitt_streaming_input_output' + + # Dataset. + config.dataset_name = 'flexio_tfrecord' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = [ + 'scenic.projects.streaming_dvc.io.ops', + 'scenic.projects.streaming_dvc.io.densecap_ops'] + config.dataset_configs.test_annotation_path = common.VITT_ANN_VID2SEQ_FORMAT_PATH + tokenizer_path = 't5' + config.dataset_configs.tokenizer_weight_path = tokenizer_path # Used in evaluation + + # Pre-processing settings + context_features = { + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'key': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'video/timestamps/start': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'video/timestamps/end': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'video/duration': {'feature_type': 'VarLen', 'dtype': 'int64'}, + } + sequence_features = { + 'image/encoded': {'feature_type': 'FixedLenSequence', 'shape': [], 'dtype': 'string'}, + 'image/timestamp': {'feature_type': 'FixedLenSequence', 'shape': [], 'dtype': 'int64'}, + 'image/clip_embeddings': {'feature_type': 'FixedLenSequence', 'shape': [768], 'dtype': 'float32'}, + } + + crop_size = 224 + max_text_tokens = 256 + num_bins = 100 + + config.num_bins = num_bins + config.num_frames = 100 + config.num_dense_outputs = 8 + context_mask_ratio = 0.5 + config.no_timestamp_in_context = True + continuous_random_mask = True + dynamic_location = False + + @evaluate_lazily + def get_preproc_spec_train(num_frames, num_dense_outputs, no_timestamp_in_context): + preproc_spec_train = ( + # NOTE: it's important to turn off the random frame downsampling here. + # Otherwise the time tokens are not aligned. + f"decode_and_subsample_densecap_video({num_frames}, False, zero_pad_frames=False, with_clip_embeddings=True, media_id_key='key')" + f"|decode_activity_net_dense_caption_annotations_dense_outputs_aug_context" + f"(True, {num_dense_outputs}, '{tokenizer_path}', {max_text_tokens}, num_bins={num_bins}, with_clip_embeddings=True, " + f"early_segments_as_context=True, normalize_early_timestamps=True, " + f"context_mask_ratio={context_mask_ratio}, no_timestamp_in_context={no_timestamp_in_context}, dynamic_location={dynamic_location}, only_use_augmented_context=True, " + f"continuous_random_mask={continuous_random_mask})" + f"|video_resize_central_crop({crop_size})" + f"|init_padding_mask" + ) + return preproc_spec_train + + @evaluate_lazily + def get_preproc_spec_eval(num_frames, num_dense_outputs): + preproc_spec_eval = ( + f"decode_and_subsample_densecap_video({num_frames}, False, zero_pad_frames=False, with_clip_embeddings=True, media_id_key='key')" + f"|decode_activity_net_dense_caption_annotations_dense_outputs_aug_context" + f"(False, {num_dense_outputs}, '{tokenizer_path}',{max_text_tokens}, num_bins={num_bins}, with_clip_embeddings=True, " + f"early_segments_as_context=True, normalize_early_timestamps=True)" + f"|video_resize_central_crop({crop_size})" + f"|init_padding_mask" + ) + return preproc_spec_eval + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.sources = [ + ml_collections.ConfigDict({ + 'source': 'tfrecord', + config.weights = '/path/to/vid2seq/yt-temporal-1b' + + # Training. + config.batch_size = 32 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.grad_clip = ml_collections.ConfigDict() + config.optimizer.grad_clip.clip_method = 'clip_by_global_norm' + config.optimizer.grad_clip.clip_value = 1.0 + + # learning rate and training schedule + num_epochs = 20 + iters_per_epoch = common.VITT_TRAIN_SIZE // config.batch_size + config.num_training_steps = num_epochs * iters_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = config.num_training_steps // 10 + config.lr_configs.base_learning_rate = 2e-4 + config.log_eval_steps = iters_per_epoch + config.checkpoint_steps = iters_per_epoch + config.eval_first_step = False + config.checkpoint_max_to_keep = 10 + + # Logging. + config.eval_meteor_spice = False ## + config.eval_only = False ## + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.evaluator = 'densecap' + config.eval_step_multiplier = 1.3 + + return config + + diff --git a/scenic/projects/streaming_dvc/configs/vid2seq_youcook2_streaming_input_output.py b/scenic/projects/streaming_dvc/configs/vid2seq_youcook2_streaming_input_output.py new file mode 100644 index 0000000000000000000000000000000000000000..c58702aeaf945430a791cc66711cabaf12f84082 --- /dev/null +++ b/scenic/projects/streaming_dvc/configs/vid2seq_youcook2_streaming_input_output.py @@ -0,0 +1,233 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Config for Youcook2 Dense Captioning. + +""" + +import ml_collections +from scenic.projects.streaming_dvc.configs import common +evaluate_lazily = common.evaluate_lazily + + +def get_config(): + """Returns the configuration for GIT.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'vid2seq_youcook2_streaming_input_output' + + # Dataset. + config.dataset_name = 'flexio_tfrecord' + config.data_dtype_str = 'float32' + + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.pp_libs = [ + 'scenic.projects.streaming_dvc.io.ops', + 'scenic.projects.streaming_dvc.io.densecap_ops'] + config.dataset_configs.test_annotation_path = common.YOUCOOK2_ANN_VID2SEQ_FORMAT_PATH + tokenizer_path = 't5' + config.dataset_configs.tokenizer_weight_path = tokenizer_path # Used in evaluation + + # Pre-processing settings + context_features = { + 'caption/string': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'media_id': {'feature_type': 'VarLen', 'dtype': 'string'}, + 'video/timestamps/start': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'video/timestamps/end': {'feature_type': 'VarLen', 'dtype': 'int64'}, + 'video/duration': {'feature_type': 'VarLen', 'dtype': 'int64'}, + } + sequence_features = { + 'image/encoded': {'feature_type': 'FixedLenSequence', 'shape': [], 'dtype': 'string'}, + 'image/timestamp': {'feature_type': 'FixedLenSequence', 'shape': [], 'dtype': 'int64'}, + 'image/clip_embeddings': {'feature_type': 'FixedLenSequence', 'shape': [768], 'dtype': 'float32'}, + } + + crop_size = 224 + max_text_tokens = 256 + num_bins = 100 + + config.num_bins = num_bins + config.num_frames = 100 + config.num_dense_outputs = 8 + context_mask_ratio = 0.5 + config.no_timestamp_in_context = True + + @evaluate_lazily + def get_preproc_spec_train(num_frames, num_dense_outputs, no_timestamp_in_context): + preproc_spec_train = ( + # NOTE: it's important to turn off the random frame downsampling here. + # Otherwise the time tokens are not aligned. + f"decode_and_subsample_densecap_video({num_frames}, False, zero_pad_frames=False, with_clip_embeddings=True)" + f"|decode_activity_net_dense_caption_annotations_dense_outputs_aug_context" + f"(True, {num_dense_outputs}, '{tokenizer_path}', {max_text_tokens}, num_bins={num_bins}, with_clip_embeddings=True, " + f"early_segments_as_context=True, normalize_early_timestamps=True, " + f"context_mask_ratio={context_mask_ratio}, no_timestamp_in_context={no_timestamp_in_context}, dynamic_location=True, only_use_augmented_context=True)" + f"|video_resize_central_crop({crop_size})" + f"|init_padding_mask" + ) + return preproc_spec_train + + @evaluate_lazily + def get_preproc_spec_eval(num_frames, num_dense_outputs): + preproc_spec_eval = ( + f"decode_and_subsample_densecap_video({num_frames}, False, zero_pad_frames=False, with_clip_embeddings=True)" + f"|decode_activity_net_dense_caption_annotations_dense_outputs_aug_context" + f"(False, {num_dense_outputs}, '{tokenizer_path}',{max_text_tokens}, num_bins={num_bins}, with_clip_embeddings=True, " + f"early_segments_as_context=True, normalize_early_timestamps=True)" + f"|video_resize_central_crop({crop_size})" + f"|init_padding_mask" + ) + return preproc_spec_eval + + # Train dataset(s). + config.dataset_configs.train = ml_collections.ConfigDict() + config.dataset_configs.train.sources = [ + ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': common.YOUCOOK2_TRAIN_TFRECORD_PATH, + 'size': common.YOUCOOK2_TRAIN_SIZE, + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1024, + 'cache': False, + 'preproc_spec': get_preproc_spec_train( + config.get_ref('num_frames'), + config.get_ref('num_dense_outputs'), + config.get_ref('no_timestamp_in_context'), + ), + }) + ] + config.dataset_configs.train.postproc_spec = 'drop(["_seed"])' + + # Evaluation dataset(s). + config.dataset_configs.eval = ml_collections.ConfigDict() + config.dataset_configs.eval.sources = [ + ml_collections.ConfigDict({ + 'source': 'tfrecord', + 'tfrecords': common.YOUCOOK2_VAL_TFRECORD_PATH, + 'size': common.YOUCOOK2_VAL_SIZE, + 'context_features': context_features, + 'sequence_features': sequence_features, + 'shuffle_buffer_size': 1, + 'cache': False, + 'preproc_spec': get_preproc_spec_eval( + config.get_ref('num_frames'), + config.get_ref('num_dense_outputs'), + ), + }), + ] + config.dataset_configs.eval.postproc_spec = 'drop(["_seed"])' + + @evaluate_lazily + def get_input_shape(num_frames): + return [-1, num_frames, crop_size, crop_size, 3] + # Dataset configs needed by the trainer. + config.dataset_configs.extra_meta_data = { + 'input_shape': get_input_shape(config.get_ref('num_frames')), + } + + config.rng_seed = 0 + + config.additional_input_spec = [ + ((-1, config.num_frames, 768), 'float32'), + ((-1, 2, 256), 'int32')] + + # Model. + config.model = ml_collections.ConfigDict() + config.model.model_dtype_str = 'float32' + config.model.model_name = 'streaming_vid2seq' + config.model.pixel_mean = ( + 0.48145466 * 255, 0.4578275 * 255, 0.40821073 * 255) + config.model.pixel_std = ( + 0.26862954 * 255, 0.26130258 * 255, 0.27577711 * 255) + config.model.decode_method = 'beam' + config.model.decode_brevity_penalty_alpha = 0.6 + config.model.decode_beam_size = 4 + config.model.max_caption_length = max_text_tokens + config.model.vocab_size = common.SP_VOCAB_SIZE + num_bins + config.model.num_bins = num_bins + + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.share_encoder = True + config.model.encoder.encoder_type = 'cat_encoder' + config.model.encoder.cat_encoder = ml_collections.ConfigDict() + config.model.encoder.cat_encoder.encoder_type = 'vit' + config.model.encoder.cat_encoder.dim = 2048 + config.model.encoder.cat_encoder.layers = 12 + config.model.encoder.cat_encoder.heads = 12 + config.model.encoder.cat_encoder.pos_embed = 'learned_1d' + config.model.encoder.cat_encoder.dropout_rate = 0. + config.model.encoder.cat_encoder.t5_dropout_rate = 0.1 + config.model.encoder.cat_encoder.stochastic_depth = 0. + config.model.encoder.cat_encoder.pretrained_config = 't5_1_1_base' + + config.model.decoder_type = 't5_decoder' + config.model.decoder = ml_collections.ConfigDict() + config.model.decoder.t5_decoder = ml_collections.ConfigDict() + config.model.decoder.t5_decoder.type_vocab_size = 0 + config.model.decoder.t5_decoder.gate = False + config.model.decoder.t5_decoder.logits_via_embedding = False + config.model.decoder.t5_decoder.dropout_rate = 0.1 + config.model.decoder.t5_decoder.num_frames = config.get_ref('num_frames') + config.model.decoder.t5_decoder.pretrained_config = 't5_1_1_base' + + config.model.num_dense_outputs = config.get_ref('num_dense_outputs') + config.model.early_segments_as_context = True + config.model.normalize_early_timestamps = True + config.model.no_timestamp_in_context = config.get_ref('no_timestamp_in_context') + config.model.num_dense_outputs_test = 2 + + config.weights = '/path/to/vid2seq/yt-temporal-1b' + + # Training. + config.batch_size = 32 + # optimizer + config.optimizer = ml_collections.ConfigDict() + config.optimizer.optimizer = 'adamw' + config.optimizer.weight_decay = 0.0 + config.optimizer.skip_scale_and_bias_regularization = True + config.optimizer.grad_clip = ml_collections.ConfigDict() + config.optimizer.grad_clip.clip_method = 'clip_by_global_norm' + config.optimizer.grad_clip.clip_value = 1.0 + + # learning rate and training schedule + num_epochs = 120 + iters_per_epoch = common.YOUCOOK2_TRAIN_SIZE // config.batch_size + config.num_training_steps = num_epochs * iters_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.steps_per_cycle = config.num_training_steps + config.lr_configs.warmup_steps = config.num_training_steps // 10 + config.lr_configs.base_learning_rate = 1e-5 + config.log_eval_steps = iters_per_epoch + config.checkpoint_steps = iters_per_epoch + config.eval_first_step = False + config.checkpoint_max_to_keep = 10 + + # Logging. + config.eval_meteor_spice = False ## + config.eval_only = False ## + config.write_summary = True + config.xprof = True # Profile using xprof. + config.log_summary_steps = 50 # train summary steps + config.log_large_summary_steps = 1000 # Expensive summary operations freq + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.evaluator = 'densecap' + config.eval_step_multiplier = 1.3 + + return config + + diff --git a/scenic/projects/streaming_dvc/densecap_evaluator.py b/scenic/projects/streaming_dvc/densecap_evaluator.py new file mode 100644 index 0000000000000000000000000000000000000000..90fa8445f86019f4abc69acbe759c3f9b2f60a56 --- /dev/null +++ b/scenic/projects/streaming_dvc/densecap_evaluator.py @@ -0,0 +1,182 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Densecap evaluator wrapper of Vid2Seq.""" +import json +from typing import Any, Dict, Optional, Union + +from absl import logging +from dmvr import tokenizers +import numpy as np +from scenic.projects.streaming_dvc import caption_evaluator +from scenic.projects.t5 import tokenizer as t5_tokenizer +# pylint: disable=g-import-not-at-top +from scenic.projects.vid2seq import dvc_eval +from tensorflow.io import gfile +# pylint: enable=g-import-not-at-top + +BERT_VOCAB_SIZE = 30522 +SP_VOCAB_SIZE = 32128 + +TOKENIZER = Union[tokenizers.BertTokenizer, t5_tokenizer.SentencePieceTokenizer] + + +def remove_nonascii(text): + return ''.join([i if ord(i) < 128 else ' ' for i in text]) + + +def load_data(path): + """Load data from dumped json files.""" + if path.endswith('.json'): + files = [path] + else: + # NOTE: we need to make sure there is only one copy of prediction file. + files = [ + path + x for x in sorted(gfile.listdir(path)) if x.endswith('.json')] + ret = {} + for x in files: + data = json.load(gfile.GFile(x, 'r')) + ret.update(data) + logging.info('Number of examples in %s: %d', path, len(ret)) + return ret + + +class DenseCapEvaluator(caption_evaluator.CaptionEvaluator): + """Densecap evaluator following Vid2Seq.""" + + def __init__( + self, annotations_loc, tokenizer: TOKENIZER, num_bins, + step: Optional[int] = None, iou_thresholds=(0.3, 0.5, 0.7, 0.9), + **kwargs): + del kwargs + logging.info('Initializing evaluator.') + self.annotations_loc = annotations_loc + self.tokenizer = tokenizer + assert isinstance(tokenizer, TOKENIZER) + self.vocab_size = BERT_VOCAB_SIZE if isinstance( + tokenizer, tokenizers.BertTokenizer) else SP_VOCAB_SIZE + self.predictions = {} + self.annotations = {} + self.pred_image_set = set() + self.gt_image_set = set() + self._num_examples_added = 0 + self._num_captions_added = 0 + self.iou_thresholds = iou_thresholds + self.step = step + self.num_bins = num_bins + + def add_example(self, prediction: Any, target: Dict[str, np.ndarray]): + """Add a single example to the evaluator. + + Args: + prediction: string. + target: Target dictionary with keys and 'image/id'. + """ + media_id = ''.join([chr(x) for x in target['media_id'] if x]) + times, captions, abs_times = self._decode_time_and_caption( + prediction['text_tokens'][1:].tolist(), duration=target['duration'][0]) + pred = { + 'pred_captions': captions, + 'pred_timestamps': times, + 'pred_abs_timestamps': abs_times, + } + if media_id not in self.predictions: + self._num_examples_added += 1 + self.predictions[media_id] = pred + + def compute_metrics( + self, + save_dir: str, + clear_annotations: Optional[bool] = True, + skip_evaluate=False): + """Computes the metrics for all added predictions.""" + self.write_pred_annotations_to_file(save_dir) + gt_data = load_data(self.annotations_loc) + pred_data = self.predictions + keys = [k for k in gt_data.keys()] + gt_segments = [np.asarray(gt_data[k]['gt_timestamps']) for k in keys] + gt_captions = [gt_data[k]['gt_captions'] for k in keys] + splits = [ + np.asarray(gt_data[k]['splits']) if len(gt_data[k]['splits']) else + np.ones(len(gt_data[k]['gt_captions']), dtype=np.int32) for k in keys] + for k in keys: + if k not in pred_data: + logging.info('Example %s not in prediction', k) + predicted_segments = [ + np.asarray(pred_data[k]['pred_timestamps']) + if k in pred_data else np.zeros((0, 2)) for k in keys] + predicted_captions = [ + pred_data[k]['pred_captions'] if k in pred_data else [''] for k in keys] + eval_res = dvc_eval.evaluate_dense_captions( # pytype: disable=attribute-error + predicted_segments=predicted_segments, + gt_segments=gt_segments, + predicted_captions=predicted_captions, + gt_captions=gt_captions, + splits=splits, + keys=keys, + iou_thresholds=self.iou_thresholds, + max_workers=1, + soda=True, + tmponly=False, + ) + full_res = { + x: np.array(eval_res[x]) for x in eval_res.keys() if x != 'key' + } + + # compute averaged statistics + avg_res = {} + for x in full_res: + if x == 'SODA_c_old_1' or x == 'SODA_c_old_2': + avg_res[x] = float(np.mean(full_res[x][full_res[x] != -1])) + else: + avg_res[x] = float(np.mean(full_res[x])) + if 'SODA_c_old_1' in avg_res and 'SODA_c_old_2' in avg_res: + avg_res['SODA_c_old'] = ( + avg_res['SODA_c_old_2'] + avg_res['SODA_c_old_1']) / 2 + del avg_res['SODA_c_old_2'], avg_res['SODA_c_old_1'] + return avg_res + + def clear(self): + self.predictions = {} + self.annotations = {} + self._num_examples_added = 0 + self._num_captions_added = 0 + + def _decode_time_and_caption(self, seq, duration): + times = [] + captions = [] + abs_times = [] + j = 0 + while j < len(seq): + x = seq[j] + if x < self.vocab_size: + if len(captions) <= 0: + captions.append([]) + times.append([0, 0]) + abs_times.append([0, 0]) + captions[-1].append(x) + j += 1 + else: + # TODO(zhouxy): handle when the model does not predict end time. + st = seq[j] - self.vocab_size + ed = seq[j + 1] - self.vocab_size + times.append([ + int(st * duration / (self.num_bins - 1)), + int(ed * duration / (self.num_bins - 1))]) + abs_times.append([int(st), int(ed)]) + captions.append([]) + j += 2 + captions = [remove_nonascii( + self.tokenizer.indices_to_string(x)).strip() for x in captions] + return times, captions, abs_times diff --git a/scenic/projects/streaming_dvc/evaluate.py b/scenic/projects/streaming_dvc/evaluate.py new file mode 100644 index 0000000000000000000000000000000000000000..94d644467660308c0039a8a28813562ca1f73829 --- /dev/null +++ b/scenic/projects/streaming_dvc/evaluate.py @@ -0,0 +1,444 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Evaluation script for the COCO Caption.""" + +import functools +import time +from typing import Any, Optional + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from dmvr import tokenizers +import flax +from flax import jax_utils +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np + +from scenic.dataset_lib import dataset_utils +from scenic.projects.streaming_dvc import caption_evaluator +from scenic.projects.streaming_dvc import densecap_evaluator +from scenic.projects.streaming_dvc import post_processing_utils +from scenic.projects.streaming_dvc.modeling import auto_regressive_decode +from scenic.projects.t5 import tokenizer as t5_tokenizer +from scenic.train_lib import train_utils + +FrozenDict = flax.core.FrozenDict + + +def eval_step( + train_state, batch, *, + flax_model, debug=False): + """Runs a single step of inference. + + eval_step is used for evaluating the dataset metrics on the whole dataset. It + does not need the ground truth data and does not compute the losses. + + Args: + train_state: TrainState containing the model parameters. + batch: The validation data. + flax_model: model definition. + debug: bool. + Returns: + targets: ground truth. + predictions: model predictions. + metrics: dict. + """ + variables = { + 'params': train_state.params, + } + kwargs = {} + if 'context_tokens' in batch['label']: + # Prompts or questions in QA. + kwargs['context_tokens'] = batch['label']['context_tokens'] + if 'image_features' in batch: + kwargs['image_features'] = batch['image_features'] + predictions = flax_model.apply( + variables, + batch['inputs'], + preprocess=True, + train=False, + mutable=False, + debug=debug, + **kwargs) + predictions = auto_regressive_decode.autoregressive_predict( + flax_model, variables['params'], + predictions, + method=flax_model.decode_method, + beam_size=flax_model.decode_beam_size, + brevity_penalty_alpha=flax_model.decode_brevity_penalty_alpha, + feature_key=flax_model.decode_feature_key, + ) + metrics = {} + if 'batch_mask' in batch: + batch_mask = batch['batch_mask'] + else: + batch_mask = jnp.ones((predictions['text_tokens'].shape[0],)) + targets = {'label': batch['label'], 'batch_mask': batch_mask} + predictions = jax.lax.all_gather(predictions, 'batch') + targets = jax.lax.all_gather(targets, 'batch') + return targets, predictions, metrics + + +def streaming_dense_eval_step( + train_state, batch, *, + flax_model, debug=False): + """Runs a single step of inference with intermediate outputs. + + Compared to the regular eval_step, the main difference here is we forward the + language decoder num_dense_outputs times, each time with different visual + features and with context from previous steps. The visual_feature here after + the visual backbone should be in shape (batch_size, num_dense_outputs, + num_tokens, hidden_size), instead of (batch_size, num_tokens, hidden_size). + + Args: + train_state: TrainState containing the model parameters. + batch: The validation data. + flax_model: model definition. + debug: bool. + Returns: + targets: ground truth. + predictions: model predictions. + metrics: dict. + """ + variables = { + 'params': train_state.params, + } + kwargs = {} + if 'image_features' in batch: + kwargs['image_features'] = batch['image_features'] + predictions = flax_model.apply( + variables, + batch['inputs'], + preprocess=True, + train=False, + mutable=False, + debug=debug, + **kwargs) + num_dense_outputs = flax_model.num_dense_outputs_test if ( + flax_model.num_dense_outputs_test > 0) else flax_model.num_dense_outputs + batch_size, max_cap_len = predictions['begin_tokens'].shape + if flax_model.early_segments_as_context: + context = jnp.concatenate([ + jnp.broadcast_to(jnp.asarray( + [flax_model.begin_token_id, flax_model.end_token_id], + dtype=jnp.int32)[None], (batch_size, 2)), + jnp.zeros([batch_size, max_cap_len - 2], dtype=jnp.int32)], axis=1) + else: + context = None + context_without_timestamp = context + raw_streaming_feature = predictions['raw_streaming_feature'] if ( + 'raw_streaming_feature' in predictions) else None + all_visual_features = predictions['visual_features'] + # (batch_size, num_dense_outputs, num_tokens, hidden_size) + assert all_visual_features.shape[1] == num_dense_outputs + + misc_predictions = {} + for i in range(num_dense_outputs): + context_input = context if not flax_model.no_timestamp_in_context else ( + context_without_timestamp) + predictions = auto_regressive_decode.autoregressive_predict( + flax_model, variables['params'], + {'visual_features': all_visual_features[:, i], + 'begin_tokens': predictions['begin_tokens'], + 'context_tokens': context_input}, + method=flax_model.decode_method, + beam_size=flax_model.decode_beam_size, + brevity_penalty_alpha=flax_model.decode_brevity_penalty_alpha, + feature_key=flax_model.decode_feature_key, + ) + misc_predictions[f'text_tokens_{i}'] = predictions['text_tokens'] + misc_predictions[f'context_{i}'] = context # for debug + text_tokens = predictions['text_tokens'] # (batch_size, max_cap_len) + if flax_model.remove_segments_from_wrong_checkpoint: + checkpoint_size = (flax_model.num_bins - 1) // num_dense_outputs + 1 + text_tokens = post_processing_utils.remove_segments_from_wrong_checkpoint( + text_tokens, + max_end_time=checkpoint_size * (i + 1), + ori_vocab_size=flax_model.vocab_size - flax_model.num_bins, + bos_id=flax_model.begin_token_id, + eos_id=flax_model.end_token_id) + if flax_model.early_segments_as_context: + if flax_model.copy_context: + context = text_tokens + else: + context = ( + post_processing_utils.remove_padding_and_concate_and_pad_tokens( + [context, text_tokens], + flax_model.begin_token_id, flax_model.end_token_id, + flax_model.max_caption_length)) # (batch_size, max_cap_len) + if flax_model.normalize_early_timestamps and (i < num_dense_outputs - 1): + # We don't need to rescale the context for the last checkpoint, as this + # is directly our outputs. + ori_vocab_size = flax_model.vocab_size - flax_model.num_bins + is_time_token = context >= ori_vocab_size + context = jnp.where( + is_time_token, + (context - ori_vocab_size) * (i + 1) // (i + 2) + ori_vocab_size, + context, + ) + context_without_timestamp = post_processing_utils.remove_timestamps( + context, ori_vocab_size=flax_model.vocab_size - flax_model.num_bins) + + # context is now the concatenated outputs of all outputs. + if flax_model.early_segments_as_context: + predictions['text_tokens'] = context + if debug: + predictions.update(misc_predictions) + if raw_streaming_feature is not None: + predictions['raw_streaming_feature'] = raw_streaming_feature + metrics = {} + if 'batch_mask' in batch: + batch_mask = batch['batch_mask'] + else: + # FlexIO does not currently return a batch mask. + batch_mask = jnp.ones( + (predictions['text_tokens'].shape[0],)) # pytype: disable=attribute-error + targets = {'label': batch['label'], 'batch_mask': batch_mask} + predictions = jax.lax.all_gather(predictions, 'batch') + targets = jax.lax.all_gather(targets, 'batch') + return targets, predictions, metrics + + +def process_and_fetch_to_host(pred_or_tgt, batch_mask): + """Used to collect predictions and targets of the whole valid/test set. + + Forked from scenic/projects/baselines/detr/train_utils.py + + Args: + pred_or_tgt: pytree; A pytree of jnp-arrays where leaves are of shape + `[num_devices, bs, X,...,Y]`. + batch_mask: A nd-array of shape `[num_devices, bs]`, where zero values + indicate padded examples. + + Returns: + A list of length num_devices * bs of items, where each item is a tree with + the same structure as `pred_or_tgt` and each leaf contains a single example. + """ + # Fetch to host in a single call. + pred_or_tgt, batch_mask = jax.device_get((pred_or_tgt, batch_mask)) + batch_mask = np.array(batch_mask).astype(bool) + + def _split_mini_batches(x): + # Filter out padded examples. + x = x[batch_mask] + # Split minibatch of examples into a list of examples. + x_list = np.split(x, x.shape[0], axis=0) + # Squeeze out the dummy dimension. + return jax.tree_util.tree_map(lambda x: np.squeeze(x, axis=0), x_list) + + leaves, treedef = jax.tree_util.tree_flatten(pred_or_tgt) + + batch_shape = batch_mask.shape + assert all([leaf.shape[:2] == batch_shape for leaf in leaves]), ( + 'Inconsistent batch shapes.') + + # Split batched leaves into lists of examples: + leaves = list(map(_split_mini_batches, leaves)) + + # Go from leaf-lists to list of trees: + out = [] + if leaves: + num_examples = np.sum(batch_mask, dtype=np.int32) + for example_ind in range(num_examples): + out.append(treedef.unflatten([leaf[example_ind] for leaf in leaves])) + return out + + +def inference_on_dataset( + flax_model: Any, + train_state: train_utils.TrainState, + dataset: dataset_utils.Dataset, + eval_batch_size: int = 1, + is_host: bool = False, + save_dir: str = '', + step: Optional[int] = None, + config: ml_collections.ConfigDict = ml_collections.ConfigDict(), + ) -> Any: + """The main evaluation loop. Run evaluation on the whole validation set. + + Args: + flax_model: Flax model (an instance of nn.Module). + train_state: train_state that contains the model parameters. + dataset: The dataset that has valid_iter and meta_data. + eval_batch_size: integer. Batch size per-device in evaluation. + is_host: bool: whether its the host machine. During multi-machine training, + we only hold the evaluating data in one of the machines. The machine with + `jax.process_index() == 0` sets `is_host` to True and will gather data + from other machines and do the evaluation. Other machines set `is_host` + as False. + save_dir: string: where to save the json prediction + step: Optional integer of the training step. The step is appended to the + serialised results if provided. + config: config dict + Returns: + evaluation results. + """ + global_metrics_evaluator = None # Only run eval on the is_host node. + tokenizer = None + evaluator_name = config.get('evaluator', 'caption') + if is_host: + annotations_loc = config.get('dataset_configs', {}).get( + 'test_annotation_path', '') + tokenizer_weight_path = config.get('dataset_configs', {}).get( + 'tokenizer_weight_path') + logging.info('tokenizer_weight_path: %s', tokenizer_weight_path) + if tokenizer_weight_path == 't5': + tokenizer = t5_tokenizer.build_dmvr_sp_model() + else: + tokenizer = tokenizers.BertTokenizer(tokenizer_weight_path) + tokenizer.initialize() + + if evaluator_name == 'caption': + eval_meteor_spice = config.get('eval_meteor_spice', False) + global_metrics_evaluator = caption_evaluator.CaptionEvaluator( + annotations_loc, eval_meteor_spice=eval_meteor_spice, step=step) + elif evaluator_name == 'densecap': + global_metrics_evaluator = densecap_evaluator.DenseCapEvaluator( + annotations_loc=annotations_loc, tokenizer=tokenizer, + num_bins=config.model.num_bins, step=step) + else: + raise NotImplementedError(evaluator_name) + global_metrics_evaluator.clear() + + eval_step_fn = eval_step if config.model.model_name not in [ + 'streaming_dense_model', + 'streaming_vid2seq'] else streaming_dense_eval_step + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step_fn, + flax_model=flax_model, + debug=config.get('debug_eval', False), + ), + axis_name='batch', donate_argnums=(1,), + ) + + eval_metrics = [] + eval_step_multiplier = config.get('eval_step_multiplier', 1.) + total_eval_steps = int(np.ceil(eval_step_multiplier * dataset.meta_data[ + 'num_eval_examples'] / eval_batch_size)) + for eval_step_i in range(total_eval_steps): + if eval_step_i % 100 == 0: + logging.info('Running eval step %d', eval_step_i) + eval_batch = next(dataset.valid_iter) + eval_batch_all_hosts, predictions_all_hosts, metrics = eval_step_pmapped( + train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(metrics)) + + if is_host: + eval_batch_all_hosts = jax_utils.unreplicate(eval_batch_all_hosts) + predictions_all_hosts = jax_utils.unreplicate( + predictions_all_hosts) + # Collect preds and labels to be sent for computing global metrics. + labels = process_and_fetch_to_host( + eval_batch_all_hosts['label'], eval_batch_all_hosts['batch_mask']) + results = process_and_fetch_to_host( + predictions_all_hosts, eval_batch_all_hosts['batch_mask']) + + for pred, label in zip(results, labels): + if evaluator_name != 'densecap': + assert evaluator_name == 'caption' + pred = tokenizer.indices_to_string(pred['text_tokens'][1:].tolist()) # pytype: disable=attribute-error + label['captions'] = [ + tokenizer.indices_to_string(x[1:].tolist()) # pytype: disable=attribute-error + for x in label['text_tokens']] + global_metrics_evaluator.add_example( # pytype: disable=attribute-error + prediction=pred, target=label) + + results = None + if is_host: + logging.info('Number of eval examples: %d', len(global_metrics_evaluator)) + results = global_metrics_evaluator.compute_metrics( # pytype: disable=attribute-error + save_dir=save_dir, clear_annotations=False, + skip_evaluate=config.get('skip_evaluate', False)) + return results, eval_metrics + + +def evaluate( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +): + """Prepares the items needed to run the evaluation. + + Args: + rng: JAX PRNGKey. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + """ + is_host = jax.process_index() == 0 + + checkpoint_config = config + checkpoint_path = config.weights + model = model_cls(checkpoint_config, dataset.meta_data) + + checkpoint_data = checkpoints.restore_checkpoint(checkpoint_path, None) + if 'params' in checkpoint_data: + params = checkpoint_data['params'] + else: + # Old Scenic train state format. + params = checkpoint_data['optimizer']['target'] + train_state = train_utils.TrainState( + global_step=0, + params=FrozenDict(params), + rng=rng) + train_state = jax_utils.replicate(train_state) + del checkpoint_data, params + + eval_batch_size = config.get('eval_batch_size', config.batch_size) + report_progress = periodic_actions.ReportProgress( + num_train_steps=0, writer=writer) + + hooks = [] + if is_host: + hooks.append(report_progress) + if config.get('xprof', True) and is_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + start_time = time.time() + with report_progress.timed('eval'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_results, eval_metrics = inference_on_dataset( + model.flax_model, + train_state, + dataset, + eval_batch_size=eval_batch_size, + is_host=is_host, + save_dir=workdir, + config=config, + ) + train_utils.log_eval_summary( + step=0, + eval_metrics=eval_metrics, + extra_eval_summary=eval_results, + writer=writer, + ) + duration = time.time() - start_time + logging.info('Done with evaluation: %.4f sec.', duration) + writer.flush() + train_utils.barrier() diff --git a/scenic/projects/streaming_dvc/io/__init__.py b/scenic/projects/streaming_dvc/io/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/streaming_dvc/io/densecap_ops.py b/scenic/projects/streaming_dvc/io/densecap_ops.py new file mode 100644 index 0000000000000000000000000000000000000000..f66e6ddc13e1189a74e40d0696b34b8df2dab7ff --- /dev/null +++ b/scenic/projects/streaming_dvc/io/densecap_ops.py @@ -0,0 +1,552 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Preprocessing operations for dense video captioning.""" + +import dataclasses +from typing import Union + +from clu import preprocess_spec +from dmvr import tokenizers + +from scenic.projects.t5 import tokenizer as t5_tokenizer +from scenic.projects.vid2seq import data_utils as vid2seq_data_utils +import tensorflow as tf + +BERT_VOCAB_SIZE = 30522 +SP_VOCAB_SIZE = 32128 +TOKENIZER = Union[tokenizers.BertTokenizer, t5_tokenizer.SentencePieceTokenizer] + + +def remove_padding_and_concat_and_pad_tokens( + tokens, bos_id, eos_id, max_text_tokens, padding_id=0): + """Remove padding and concat and pad tokens. + + Removing padding tokens at the end of each caption, concat them into + a single paragraph caption, and add paddings to the paragraph captions. + + Example: bos=101, eos=102, padding_id=0, max_text_tokens=8, tokens being + [[101, 1, 2, 102, 0, 0, 0, 0], + [101, 3, 102, 0, 0, 0, 0, 0]] + The output should be: + [[101, 1, 2, 3, 102, 0, 0, 0]] + + Args: + tokens: (num_captions, max_single_text_tokens). The tokens should all have + bos, but no eos. + bos_id: int + eos_id: int + max_text_tokens: int + padding_id: int + Returns: + merged_token: (1, max_text_tokens) + """ + merged_token = tf.reshape( + tokens, [-1]) # (num_captions * max_single_text_tokens,) + merged_token = tf.boolean_mask( + merged_token, + tf.not_equal(merged_token, padding_id)) # (num_remaining_tokens,) + merged_token = tf.boolean_mask( + merged_token, tf.not_equal(merged_token, bos_id))[:max_text_tokens - 2] + # ( 0: + keep = tf.reduce_sum( + tf.cast(caption_token > 0, tf.int32), + axis=1) > min_caption_tokens + caption_token = tf.boolean_mask(caption_token, keep) + timestamp_token = tf.boolean_mask(timestamp_token, keep) + # Remove text with too small duration. + if min_segment_duration > 0: + segment_duration = timestamp_token[:, 1] - timestamp_token[:, 0] + keep = segment_duration >= min_segment_duration + caption_token = tf.boolean_mask(caption_token, keep) + timestamp_token = tf.boolean_mask(timestamp_token, keep) + return caption_token, timestamp_token + + +def crop_and_remove_segments( + segment_start, segment_end, captions, video_start, video_end): + """Crop segments and remove out-of-crop ones.""" + video_length = video_end - video_start + cropped_start = tf.maximum(segment_start - video_start, 0) + cropped_end = tf.minimum(segment_end - video_start, video_length) + valid = tf.logical_and( + tf.greater_equal(cropped_end, 0), + tf.less_equal(cropped_start, video_length)) + keep = tf.where(valid)[:, 0] + new_start = tf.gather(cropped_start, keep) + new_end = tf.gather(cropped_end, keep) + new_captions = tf.gather(captions, keep) + return new_start, new_end, new_captions + + +@dataclasses.dataclass(frozen=True) +class DecodeAndSubsampleDensecapVideo: + """Decodes and subsamples frames from video, returning in common format. + + This common format is A dictionary of features containing + {image, captions/text, image/id}. + + Attributes: + num_frames: The number of frames to decode. These are randomly sampled if + training. Otherwise, uniformly sampled through the video. If + num_frames < 0, all the frames are returned. + is_train: If training. + caption_field: Which field in the sstable is used to store the caption. + context_field: Field in the sstable for questions in QA tasks. Empty means + no such field. + localization_keys: dict of strings to their mapped names. + media_id_key: str + recompute_duration: bool; make duration align with sampled frames. + zero_pad_frames: bool; if True, pad 0 when the videos are shorter than + num_frames; if False, do linespace in between to fill num_frames. + min_crop_ratio: float; avoid very aggressive cropping. + only_crop_at_end: bool; + crop_prob: float; Probability to apply crop augmentation. + with_clip_embeddings: bool; If True, we load pre-computed image features. + """ + + num_frames: int + is_train: bool + caption_field: str = 'caption/string' + context_field: str = '' + localization_keys: dict[str, str] = dataclasses.field( + default_factory=lambda: { # pylint:disable=g-long-lambda + 'video/timestamps/start': 'video/timestamps/start', + 'video/timestamps/end': 'video/timestamps/end', + 'video/duration': 'video/duration'}) + media_id_key: str = 'media_id' + recompute_duration: bool = False + zero_pad_frames: bool = True + min_crop_ratio: float = 1.0 + only_crop_at_end: bool = False + crop_prob: float = 0.0 + with_clip_embeddings: bool = False + + def __call__( + self, features: preprocess_spec.Features) -> preprocess_spec.Features: + + frames = features['image/encoded'] + max_frames = tf.shape(frames)[0] + if self.is_train: + apply_crop = tf.cast( + tf.random.uniform([]) < self.crop_prob, tf.float32) + # crop_ratio == 1.0 means not crop. + crop_ratio = self.min_crop_ratio * apply_crop + 1. * (1. - apply_crop) + min_crop_frames = tf.maximum( + tf.cast(tf.cast(max_frames, tf.float32) * crop_ratio, + tf.int32), self.num_frames) + st = tf.random.uniform( + [], maxval=tf.maximum(max_frames - min_crop_frames, 1), + dtype=tf.int32) if not self.only_crop_at_end else 0 + ed = tf.random.uniform( + [], minval=tf.minimum(st + min_crop_frames, max_frames - 1), + maxval=max_frames, dtype=tf.int32) + if self.zero_pad_frames: + stride = tf.maximum((ed - st + 1) // self.num_frames, 1) + inds = tf.range(tf.minimum(self.num_frames, ed - st + 1)) * stride + st + else: + inds = tf.cast(tf.linspace(st, ed, self.num_frames), tf.int32) + else: + if self.zero_pad_frames: + stride = tf.maximum(max_frames // self.num_frames, 1) + inds = tf.range(tf.minimum(self.num_frames, max_frames)) * stride + else: + inds = tf.cast( + tf.linspace(0, max_frames - 1, self.num_frames), tf.int32) + frames = tf.gather(frames, inds) + frames = tf.map_fn( + lambda x: tf.image.decode_jpeg(x, channels=3), + frames, back_prop=False, dtype=tf.uint8) + + if self.zero_pad_frames: + frames = tf.pad( + frames, + [[0, self.num_frames - tf.shape(frames)[0]], [0, 0], [0, 0], [0, 0]]) + + features_new = { + 'image': frames, + 'captions': { + 'text': tf.sparse.to_dense(features[self.caption_field])}, + 'image/id': tf.zeros((), tf.int32), + } + features_new['media_id'] = tf.io.decode_raw( + tf.sparse.to_dense(features[self.media_id_key]), out_type=tf.uint8)[0] + + if self.context_field: + features_new['context'] = tf.sparse.to_dense(features[self.context_field]) + + for k, v in self.localization_keys.items(): + features_new[v] = tf.sparse.to_dense(features[k]) + + if 'video/duration' not in features_new: # This is only needed for YTT + features_new['video/duration'] = ( + features['image/timestamp'][-1] - features['image/timestamp'][0] + )[None] + features_new['video/original_duration'] = features_new['video/duration'] + + if self.recompute_duration or self.is_train: + # filter-out out-of-crop segments + image_timestamp = features['image/timestamp'] + sampled_timestamp = tf.gather(image_timestamp, inds) + video_start = sampled_timestamp[0] + video_end = sampled_timestamp[-1] + new_duration = video_end - video_start + segment_start_original = features_new['video/timestamps/start'] + segment_end_original = features_new['video/timestamps/end'] + valid = tf.logical_and( + tf.greater_equal(segment_end_original, video_start), + tf.less_equal(segment_start_original, video_end)) + keep = tf.where(valid)[:, 0] + segment_start = tf.maximum(segment_start_original - video_start, 0) + segment_end = tf.minimum( + segment_end_original - video_start, new_duration) + features_new['video/timestamps/start'] = tf.gather(segment_start, keep) + features_new['video/timestamps/end'] = tf.gather(segment_end, keep) + features_new['captions']['text'] = tf.gather( + features_new['captions']['text'], keep) + features_new['video/duration'] = new_duration[None] + + if self.with_clip_embeddings: + clip_feature_key = 'image/clip_embeddings' + clip_embeddings = features[clip_feature_key] + sampled_clip_embeddings = tf.gather(clip_embeddings, inds) + features_new[clip_feature_key] = sampled_clip_embeddings + + if preprocess_spec.SEED_KEY in features: + features_new[preprocess_spec.SEED_KEY] = features[ + preprocess_spec.SEED_KEY] + return features_new + + +@dataclasses.dataclass +class DecodeActivityNetDenseCaptionAnnotations: + """Decode ActivityNet-Dense caption annotations.""" + + tokenizer_weight_path: str + max_text_tokens: int = 1024 + max_single_text_tokens: int = 128 + num_bins: int = 100 + with_clip_embeddings: bool = False + min_caption_tokens: int = -1 + min_segment_duration: bool = False + _tokenizer: TOKENIZER = dataclasses.field(init=False) + _original_vocab_size: int = -1 + _bos_id: int = 0 + _eos_id: int = 1 + + def __post_init__(self): + if self.tokenizer_weight_path == 't5': + self._tokenizer = t5_tokenizer.build_dmvr_sp_model() + self._bos_id = 0 + self._eos_id = 1 + # NOTE: We can't use self._tokenizer.vocab_size here. + # self._tokenizer.vocab_size of the T5 tokenizer is 32100, instead of + # model weight shape 32128. + self._original_vocab_size = SP_VOCAB_SIZE + else: + self._tokenizer = tokenizers.BertTokenizer(self.tokenizer_weight_path) + self._bos_id = 101 + self._eos_id = 102 + self._original_vocab_size = BERT_VOCAB_SIZE + self._tokenizer.initialize() + + def __call__( + self, features: preprocess_spec.Features + ) -> preprocess_spec.Features: + image = tf.cast(features['image'], tf.float32) + text_features = features['captions']['text'] # (num_captions,) + + start = features['video/timestamps/start'] + end = features['video/timestamps/end'] + duration = features['video/duration'] + caption_token, timestamp_token = create_caption_and_time_tokens( + text_features, start, end, duration, self._tokenizer, + num_bins=self.num_bins, + original_vocab_size=self._original_vocab_size, + max_single_text_tokens=self.max_single_text_tokens, + min_caption_tokens=self.min_caption_tokens, + min_segment_duration=self.min_segment_duration) + merged_token = vid2seq_data_utils.merge_cap_time_tokens( + caption_token, timestamp_token, order='ld', + ) # (num_captions, max_single_text_tokens) + text_tokens = remove_padding_and_concat_and_pad_tokens( + merged_token, self._bos_id, self._eos_id, + self.max_text_tokens) # (1, self.max_text_tokens) + target = {'text_tokens': text_tokens} + + target['orig_size'] = tf.cast(tf.shape(image)[-3:-1], dtype=tf.int32) + target['size'] = tf.identity(target['orig_size']) + target['image/id'] = features['image/id'] + target['media_id'] = features['media_id'] + target['duration'] = duration # Used for recovering the original timestamp. + target['original_duration'] = features['video/original_duration'] + + output = { + 'inputs': image, + 'label': target, + } + + if self.with_clip_embeddings: + output['image_features'] = features['image/clip_embeddings'] + + if preprocess_spec.SEED_KEY in features: + output[preprocess_spec.SEED_KEY] = features[preprocess_spec.SEED_KEY] + return output + + +@dataclasses.dataclass +class DecodeActivityNetDenseCaptionAnnotationsDenseOutputsAugContext: + """Decode dense with intermediate supervision whose locations are given.""" + + is_train: bool + num_dense_outputs: int + tokenizer_weight_path: str + max_text_tokens: int = 1024 + max_single_text_tokens: int = 128 + num_bins: int = 100 + early_segments_as_context: bool = False + normalize_early_timestamps: bool = False + context_mask_ratio: float = 0.0 + no_timestamp_in_context: bool = False + dynamic_location: bool = False + only_use_augmented_context: bool = False + continuous_random_mask: bool = False + with_clip_embeddings: bool = False + _tokenizer: TOKENIZER = dataclasses.field(init=False) + _original_vocab_size: int = -1 + _bos_id: int = 0 + _eos_id: int = 1 + + def __post_init__(self): + if self.tokenizer_weight_path == 't5': + self._tokenizer = t5_tokenizer.build_dmvr_sp_model() + self._bos_id = 0 + self._eos_id = 1 + # NOTE: We can't use self._tokenizer.vocab_size here. + # self._tokenizer.vocab_size of the T5 tokenizer is 32100, instead of + # model weight shape 32128. + self._original_vocab_size = SP_VOCAB_SIZE + else: + self._tokenizer = tokenizers.BertTokenizer(self.tokenizer_weight_path) + self._bos_id = 101 + self._eos_id = 102 + self._original_vocab_size = BERT_VOCAB_SIZE + self._tokenizer.initialize() + + def __call__( + self, features: preprocess_spec.Features + ) -> preprocess_spec.Features: + image = tf.cast(features['image'], tf.float32) + text_features = features['captions']['text'] # (num_captions,) + + start = features['video/timestamps/start'] + end = features['video/timestamps/end'] + duration = features['video/duration'] + timestamp_token = vid2seq_data_utils.timestampify( + start=start, + end=end, + duration=duration, + abs_time_token=False, + num_bins=self.num_bins, + vocabulary_size=self._original_vocab_size, + time_format='se') + # (num_captions, 2). Value in [0, num_bins] with respect to the whole video. + + caption_token = self._tokenizer.string_tensor_to_indices( + text_features, + prepend_bos=True, + append_eos=False, + max_num_tokens=self.max_single_text_tokens, + )[:, :self.max_single_text_tokens] # (num_captions, max_single_text_tokens) + merged_token = vid2seq_data_utils.merge_cap_time_tokens( + caption_token, timestamp_token, order='ld', + ) # (num_captions, max_single_text_tokens), value might change below + + num_frames = tf.shape(image)[0] + tf.debugging.assert_equal( + num_frames, self.num_bins, + f'num frames {num_frames} should be {self.num_bins}.') + checkpoint_size = (self.num_bins - 1) // self.num_dense_outputs + 1 + dense_output_tokens = [] + context_tokens = [] + checkpoint_inds = [] + + # We still uniformly sample checkpoint locations, as they are supposed to + # be unknown at testing. Now this number of checkpoints can be different + # from testing though. + for i in range(self.num_dense_outputs): + end_idx = timestamp_token[:, 1] - self._original_vocab_size + if self.dynamic_location: + checkpoint_end_time = tf.random.uniform( + (), minval=1, maxval=num_frames + 1, dtype=tf.int32) + if i == self.num_dense_outputs - 1: + # We want at least one checkpoint to see all the segments, as many + # segments in the annotation ends at the last frame. + checkpoint_end_time = num_frames + checkpoint_start_time = 0 + else: + checkpoint_end_time = (i + 1) * checkpoint_size + checkpoint_start_time = i * checkpoint_size + + if self.normalize_early_timestamps: + normalized_timestamp_token = self._original_vocab_size + (( + timestamp_token - self._original_vocab_size) * ( + self.num_bins)) // checkpoint_end_time + normalized_timestamp_token = tf.minimum( + normalized_timestamp_token, + self._original_vocab_size + self.num_bins - 1) # Avoid nan + merged_token = vid2seq_data_utils.merge_cap_time_tokens( + caption_token, normalized_timestamp_token, order='ld', + ) # (num_captions, max_single_text_tokens) + + # Following shapes are (num_captions,) + finished_before_checkpoint_ends = end_idx < checkpoint_end_time + finished_within_checkpoint_range = tf.logical_and( + finished_before_checkpoint_ends, end_idx >= checkpoint_start_time) + finished_before_checkpoint_starts = end_idx < checkpoint_start_time + + context_source = merged_token if ( + not self.no_timestamp_in_context) else caption_token + + # The original context and their supervision. + full_context = tf.boolean_mask( + context_source, finished_before_checkpoint_starts) + full_context = remove_padding_and_concat_and_pad_tokens( + full_context, self._bos_id, self._eos_id, self.max_text_tokens) + + text_tokens_with_full_context = tf.boolean_mask( + merged_token, finished_within_checkpoint_range) + text_tokens_with_full_context = remove_padding_and_concat_and_pad_tokens( + text_tokens_with_full_context, + self._bos_id, self._eos_id, self.max_text_tokens) + + # Augmented context and their supervision, by masking out valid contexts. + if self.continuous_random_mask: + max_valid_segment_end_time = tf.reduce_max(tf.boolean_mask( + end_idx, finished_before_checkpoint_ends)) + maxval = max_valid_segment_end_time + maxval = tf.maximum(2, maxval) + checkpoint_start_time = tf.random.uniform( + (), minval=1, maxval=maxval, dtype=tf.int32) + random_mask = end_idx < checkpoint_start_time + else: + random_mask = tf.cast(tf.random.uniform( + (tf.shape(end_idx)[0],), minval=0, maxval=1, + dtype=tf.float32) < self.context_mask_ratio, tf.bool) + + if self.dynamic_location: + # When dynamic location is on, the "past range" is 0-0, and we don't + # have any context by default. So changing it to masking any valid + # "current" segments. + augmented_context_mask = tf.logical_and( + finished_before_checkpoint_ends, random_mask) + else: + augmented_context_mask = tf.logical_and( + finished_before_checkpoint_starts, random_mask) + augmented_context = tf.boolean_mask( + context_source, augmented_context_mask) + augmented_context = remove_padding_and_concat_and_pad_tokens( + augmented_context, self._bos_id, self._eos_id, self.max_text_tokens) + + augmented_text_token_mask = tf.logical_and( + finished_before_checkpoint_ends, + tf.logical_not(augmented_context_mask)) + text_tokens_with_augmented_context = tf.boolean_mask( + merged_token, augmented_text_token_mask) + text_tokens_with_augmented_context = ( + remove_padding_and_concat_and_pad_tokens( + text_tokens_with_augmented_context, + self._bos_id, self._eos_id, self.max_text_tokens)) + + # Get the actual frame index. This is in range [0, num_frames). + checkpoint_ind = tf.broadcast_to( + tf.minimum(checkpoint_end_time, num_frames) - 1, (1,)) + # We train on both the original contexts and the augmented ones. + if self.only_use_augmented_context: + all_context = augmented_context + all_text_tokens = text_tokens_with_augmented_context + else: + all_context = tf.concat([full_context, augmented_context], axis=0) + all_text_tokens = tf.concat( + [text_tokens_with_full_context, text_tokens_with_augmented_context], + axis=0) + # 2 means the location for both original and augmented target + checkpoint_ind = tf.broadcast_to(checkpoint_ind, (2,)) + + context_tokens.append(all_context) + dense_output_tokens.append(all_text_tokens) + checkpoint_inds.append(checkpoint_ind) + + dense_output_tokens = tf.concat( + dense_output_tokens, axis=0) # (num_dense_outputs * 2, max_text_tokens) + target = { + 'text_tokens': dense_output_tokens, + } + if self.is_train: + checkpoint_inds = tf.concat( + checkpoint_inds, axis=0) # (num_dense_outputs * 2,) + target['checkpoint_inds'] = checkpoint_inds + context_tokens = tf.concat( + context_tokens, axis=0) # (num_dense_outputs * 2, max_text_tokens) + target['context_tokens'] = context_tokens + + target['orig_size'] = tf.cast(tf.shape(image)[-3:-1], dtype=tf.int32) + target['size'] = tf.identity(target['orig_size']) + target['image/id'] = features['image/id'] + target['media_id'] = features['media_id'] + target['duration'] = duration # Used for recovering the original timestamp. + target['original_duration'] = features['video/original_duration'] + + output = { + 'inputs': image, + 'label': target, + } + if self.with_clip_embeddings: + output['image_features'] = features['image/clip_embeddings'] + + if preprocess_spec.SEED_KEY in features: + output[preprocess_spec.SEED_KEY] = features[preprocess_spec.SEED_KEY] + return output diff --git a/scenic/projects/streaming_dvc/io/flexio.py b/scenic/projects/streaming_dvc/io/flexio.py new file mode 100644 index 0000000000000000000000000000000000000000..643409564052494ec55f6f9d83ed28671886ab3f --- /dev/null +++ b/scenic/projects/streaming_dvc/io/flexio.py @@ -0,0 +1,502 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""FlexIO input pipeline for TFRecord sources.""" + +import functools +from typing import Any, Dict, Iterable, Mapping, Optional, Sequence, Tuple, Union + +from absl import logging +from clu import preprocess_spec +import jax +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib.flexio import flexio +import tensorflow as tf + +TfFeature = flexio.TfFeature + + +def _get_feature(feature_type: str, shape=(), dtype='string') -> TfFeature: + dtype = tf.dtypes.as_dtype(dtype) + if feature_type == 'FixedLen': + return tf.io.FixedLenFeature(shape=shape, dtype=dtype) + if feature_type == 'VarLen': + return tf.io.VarLenFeature(dtype=dtype) + elif feature_type == 'FixedLenSequence': + return tf.io.FixedLenSequenceFeature(shape=shape, dtype=dtype) + raise NotImplementedError(f'Feature type {feature_type} not available yet.') + + +def get_number_of_examples(config: ml_collections.ConfigDict) -> int: + """Obtain the number of examples in a TFRecord dataset.""" + if hasattr(config, 'num_examples'): + return config.num_examples + + if config.source == 'tfrecord': + size = config.get('size', None) + if size is None: + raise ValueError('size is required for tfrecord datasets') + return size + raise ValueError(f'Unknown data source: {config.source}') + + +def decode_sharded_names(path): + """Convert sharded file names into a list.""" + ret = [] + path = path.split(',') + for name in path: + if '@' in name: + num_shards = int(name.split('@')[1].split('.')[0]) + suffix = name.split(f'@{num_shards}')[-1] + prefix = name.split('@')[0] + names = [ + f'{prefix}-{i:05d}-of-{num_shards:05d}{suffix}' + for i in range(num_shards) + ] + ret.extend(names) + else: + ret.append(name) + return ret + + +def _get_single_tfrecord_dataset( + tfrecords: Union[str, Sequence[str]], + context_features: Mapping[str, TfFeature], + sequence_features: Mapping[str, TfFeature], + batch_size: Optional[int], + preprocess_fn: Optional[preprocess_spec.PreprocessFn] = None, + postprocess_fn: Optional[preprocess_spec.PreprocessFn] = None, + rng: Union[None, jnp.ndarray, tf.Tensor] = None, + global_rng: Union[None, jnp.ndarray, tf.Tensor] = None, + shuffle: bool = False, + shuffle_buffer_size: int = 1000, + cache: bool = False, + repeat_dataset: bool = True, +) -> tf.data.Dataset: + """Creates dataset using DMVR and applies preprocessing. + + Args: + tfrecords: Path to tfrecords. + context_features: Dictionary of context features to parse. + sequence_features: Dictionary of sequence features to parse. + batch_size: Batch size. + preprocess_fn: Preprocess function with pre-caching ops. + postprocess_fn: Postprocess function executed *after* batching. + rng: Random seed. + global_rng: Global random seed (same across hosts). + shuffle: Whether to shuffle. + shuffle_buffer_size: Shuffle buffer size. + cache: Whether to cache the dataset. + repeat_dataset: If True, the dataset is repeated indefinitely. + + Returns: + tf.data.Dataset with preprocessing applied. + """ + del global_rng + + if rng is None and shuffle: + raise ValueError("Please set 'rng' when shuffling.") + + ds = tf.data.TFRecordDataset(tfrecords) + # Split datasets into machines. Otherwise multi-machine evaluation takes the + # same images. + ds = ds.shard(jax.process_count(), jax.process_index()) + if sequence_features: + # pylint: disable=g-long-lambda + ds = ds.map( + lambda x: tf.io.parse_single_sequence_example( + x, context_features, sequence_features + ) + ) + # merge two into one + ds = ds.map(lambda x, y: {**x, **y}) + # pylint: enable=g-long-lambda + else: + ds = ds.map(lambda x: tf.io.parse_single_example(x, context_features)) + + if cache: + # Caching is done after pre-processing. This means that only deterministic + # pre-processing should be used here. This includes things like frame + # sampling, JPEG decoding, etc. + ds = ds.cache() + if repeat_dataset: + ds = ds.repeat() # Repeat indefinitly. + if shuffle: + ds = ds.shuffle(shuffle_buffer_size, seed=rng[0]) + if preprocess_fn is not None: + if rng is not None: + ds = flexio.apply_process_fn_with_populated_seed( + ds, preprocess_fn, rng=rng) + else: + ds = ds.map(preprocess_fn, num_parallel_calls=tf.data.AUTOTUNE) + if batch_size: + ds = ds.batch( + batch_size, + drop_remainder=True, + num_parallel_calls=tf.data.AUTOTUNE, + deterministic=True, + ) + if postprocess_fn is not None: + if rng is not None: + ds = flexio.apply_process_fn_with_populated_seed( + ds, postprocess_fn, rng=rng) + else: + ds = ds.map(postprocess_fn, num_parallel_calls=tf.data.AUTOTUNE) + return ds + + +def _build_pipeline( + split: str, + start_step: Optional[int], + dataset_configs: ml_collections.ConfigDict, + batch_size: Optional[int], + num_local_shards: int, + rng: Union[None, jnp.ndarray, tf.Tensor] = None, + global_rng: Union[None, jnp.ndarray, tf.Tensor] = None, + shuffle: bool = False +) -> Optional[Union[tf.data.Dataset, Dict[str, tf.data.Dataset]]]: + """Build a tf.data.Dataset pipeline using clu.deterministic_data. + + Different from the original flexio, this function only support TFRecord. + + Args: + split: The split to be used. + start_step: Start step for GRAIN-backed datasets. + dataset_configs: Dataset configurations. + batch_size: Total batch size (sum for all devices). + num_local_shards: Number of local shards (usually num local devices). + rng: Per-host random seed (JAX format). + global_rng: Global random seed (JAX format). + shuffle: Whether to shuffle. + + Returns: + tf.data.Dataset after preprocessing, merging, mosaicing, and batching. + """ + # Pre-processing libs: + pp_libs = dataset_configs.get('pp_libs', flexio.DEFAULT_PP_LIBS) + process_fn = functools.partial(flexio.get_process_fn, pp_libs=pp_libs) + + if split not in dataset_configs: + return None + + mode_config = dataset_configs.get(split) + config = ml_collections.ConfigDict({**dataset_configs, **mode_config}) + + if len(config.sources) > 1: + merge_sources = config.merge_sources + else: + merge_sources = True + + del start_step + + sources, weights = {}, {} + for src_id, src in enumerate(config.sources): + src_name = src.get('name', f'src_{src_id}') + if rng is not None: + rng, ds_rng = jax.random.split(rng) + else: + ds_rng = None + + if src.source == 'tfrecord': + context_features = dict(src.get('context_features', {})) + sequence_features = dict(src.get('sequence_features', {})) + context_features = { + k: _get_feature(**f) for k, f in context_features.items() + } + sequence_features = { + k: _get_feature(**f) for k, f in sequence_features.items() + } + tfrecord_path = decode_sharded_names(src.tfrecords) + ds = _get_single_tfrecord_dataset( + tfrecord_path, + context_features, + sequence_features, + batch_size=src.get('batch_size'), + preprocess_fn=process_fn(src.get('preproc_spec') or ''), + postprocess_fn=process_fn(src.get('postproc_spec') or ''), + rng=ds_rng, + global_rng=global_rng, + shuffle=shuffle, + shuffle_buffer_size=src.shuffle_buffer_size, + cache=src.get('cache', False), + repeat_dataset=src.get('repeat_dataset', True), + ) + else: + raise ValueError(f'Unknown dataset source: {src.source}') + sources[src_name] = ds + if merge_sources: + weights[src_name] = src.get('weight', 1.0) + else: + if src.get('weight'): + raise ValueError( + 'Per source `weight` should not be provided unless you are merging ' + 'datasets (i.e., merge_sources=True).') + + def _batch_and_prefetch(ds, batch_size): + if batch_size is None: + return ds + + # Batch to the desired output batch size: + if batch_size % num_local_shards != 0: + raise ValueError( + f'Local (host) batch size of {batch_size} is not divisible' + f'to num_local_shard={num_local_shards}.') + batch_dims = [num_local_shards, batch_size // num_local_shards] + for batch_size in reversed(batch_dims): + if dataset_configs.get('padded_batch'): + ds = ds.padded_batch(batch_size, drop_remainder=True) + else: + ds = ds.batch( + batch_size, + drop_remainder=True, + num_parallel_calls=tf.data.AUTOTUNE, + deterministic=True, + ) + + # Having prefetch as the last transformation will prevent automatic + # injection of prefetch(AUTOTUNE). + ds = ds.prefetch(2) + + # Configure parallelism. + # TODO(agritsenko, josipd): make these settings configurable as the defaults + # may leads to OOM. + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + options.threading.max_intra_op_parallelism = 1 + return ds.with_options(options) + + if merge_sources: + ds_sources = list(sources.values()) + if len(ds_sources) > 1: + ds_weights = list(weights.values()) + # Normalize sampling weights. + sum_weights = sum(ds_weights) + ds_weights = [w / sum_weights for w in ds_weights] + ds = tf.data.Dataset.sample_from_datasets( + ds_sources, ds_weights, seed=rng[0] if rng is not None else None) + else: + ds = ds_sources[0] + + # Map with shared pp spec, only possible if we are merging the sources: + def _apply_global_processing( + ds_pp: tf.data.Dataset, pp_str: str) -> tf.data.Dataset: + if rng is not None: + return flexio.apply_process_fn_with_populated_seed( + ds_pp, process_fn(pp_str), rng=rng) + else: + return ds_pp.map( + process_fn(pp_str), + num_parallel_calls=tf.data.AUTOTUNE) + + ds = _apply_global_processing(ds, config.get('preproc_spec') or '') + ds = _batch_and_prefetch(ds, batch_size) + return _apply_global_processing(ds, config.get('postproc_spec') or '') + + else: + for ds_name, ds in sources.items(): + # TODO(dehghani): Add support for have different batch_sizes for + # different sources. + sources[ds_name] = _batch_and_prefetch(ds, batch_size) + return sources + + +def get_iterator( + ds: Union[tf.data.Dataset, Dict[str, tf.data.Dataset]], + configs=ml_collections.ConfigDict, + *, + return_iterator: bool = False +) -> Tuple[Union[Iterable[Any] | None, Dict[str, Iterable[Any] | None]], Union[ + Tuple[Any, ...], Dict[str, Tuple[Any, ...]]], Union[int, Dict[str, int]]]: + """Given a (dict of) Dataset object(s), returns iterators and metadata. + + Different from the original flexio, this function uses a custom + get_number_of_examples funtion for TFRecord. + + Args: + ds: A tf.data.Dataset instance or a dictionary of TFDS instances. + configs: A Config dict. + return_iterator: If False, the function returns a None instead of an + iterator. + + Returns: + Iterators, input specification and num_examples. + """ + + def _get_input_spec(ds): + return jax.tree_util.tree_map( + # Remove host dimension from the shapes. + lambda x: (tuple(x.shape.as_list()[1:]), flexio.tf2jax_dtype(x.dtype)), + ds.element_spec) + + if ds is not None: + total_examples = {} + for src_id, src in enumerate(configs.sources): + total_examples[src.get('name', + f'src_{src_id}')] = get_number_of_examples(src) + if isinstance(ds, dict): + ds_iter, input_spec = {}, {} + for dataset_name, dataset in ds.items(): + if not return_iterator: + ds_iter[dataset_name] = None + else: + ds_it = iter(dataset) + ds_iter[dataset_name] = map(dataset_utils.tf_to_numpy, ds_it) + input_spec[dataset_name] = _get_input_spec(dataset) + # TODO(dehghani): Add support for having different input specs. + first_input_spec = list(input_spec.values())[0] + for in_spec in input_spec.values(): + assert in_spec == first_input_spec, ( + 'For now, input specs for all sources should be the same.') + input_spec = first_input_spec + else: + # Either a single dataset, or we merged them into a single dataset. + if not return_iterator: + ds_iter = None + else: + ds_it = iter(ds) + ds_iter = map(dataset_utils.tf_to_numpy, ds_it) + total_examples = sum(list(total_examples.values())) + input_spec = _get_input_spec(ds) + else: + ds_iter = None + input_spec = None + total_examples = -1 + + return ds_iter, input_spec, total_examples + + +@datasets.add_dataset('flexio_tfrecord') +def get_dataset( + *, + batch_size: Optional[int], + eval_batch_size: Optional[int], + num_shards: int, + rng: Union[None, jnp.ndarray, tf.Tensor], + dataset_configs: ml_collections.ConfigDict, + start_step: Optional[int] = None, + dtype_str: str = 'float32', + shuffle_seed: int = 0, + dataset_service_address: Optional[str] = None) -> dataset_utils.Dataset: + """Returns generators for video datasets. + + Args: + batch_size: Determines the train batch size. + eval_batch_size: Determines the evaluation batch size. + num_shards: Number of local shards (usually num local devices). + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + dataset_configs: Dataset configurations. + start_step: Current step, used for deterministic input pipeline backed by + GRAIN. + dtype_str: Data type of the image. Only 'float32' is currently supported. + shuffle_seed: Unsupported; use rng instead. + dataset_service_address: Unsupported; must be None. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + + if rng is None: + raise NotImplementedError('This dataset requires a JAX RNG.') + if shuffle_seed: + raise NotImplementedError( + 'This dataset requires a JAX RNG, do not use shuffle_seed.') + if dataset_service_address: + raise ValueError('FlexIO pipeline does not support data service.') + if dtype_str != 'float32': + raise ValueError(f'Unsupported dtype_str: {dtype_str}') + + # Delete unused arguments (see docstring): + del shuffle_seed + + # Ensure a different key on each worker: + global_rng = rng + rng = jax.random.fold_in(rng, jax.process_index()) + + # Training dataset: + rng, train_rng = jax.random.split(rng) + train_ds = _build_pipeline( + split='train', + start_step=start_step, + dataset_configs=dataset_configs, + batch_size=batch_size, + num_local_shards=num_shards, + rng=train_rng, + global_rng=global_rng, + shuffle=True) + + # Evaluation dataset: + rng, eval_rng = jax.random.split(rng) + eval_ds = _build_pipeline( + split='eval', + start_step=0, + dataset_configs=dataset_configs, + batch_size=eval_batch_size, + num_local_shards=num_shards, + global_rng=global_rng, + rng=eval_rng) + + return_iterators = dataset_configs.get('return_iterators', True) + train_iter, train_input_spec, total_train_examples = get_iterator( + train_ds, + dataset_configs.get('train'), + return_iterator=return_iterators) + eval_iter, eval_input_spec, total_eval_examples = get_iterator( + eval_ds, + dataset_configs.get('eval'), + return_iterator=return_iterators) + + # Testing dataset: + unused_rng, test_rng = jax.random.split(rng) + test_ds = _build_pipeline( + split='test', + start_step=0, + dataset_configs=dataset_configs, + batch_size=eval_batch_size, + num_local_shards=num_shards, + global_rng=global_rng, + rng=test_rng) + + test_iter, test_input_spec, total_test_examples = get_iterator( + test_ds, + dataset_configs.get('test'), + return_iterator=return_iterators) + + # Collect dataset metadata. + meta_data = { + 'num_train_examples': total_train_examples, + 'num_eval_examples': total_eval_examples, + 'num_test_examples': total_test_examples, + } + + if train_ds is not None: + meta_data['input_spec'] = train_input_spec + if eval_ds is not None: + meta_data['eval_input_spec'] = eval_input_spec + if test_ds is not None: + meta_data['test_input_spec'] = test_input_spec + + # Update metadata if any extra was provided via config. + meta_data.update(dataset_configs.get('extra_meta_data', {})) + dataset = {'train_iter': train_iter, 'valid_iter': eval_iter, + 'test_iter': test_iter, 'meta_data': meta_data} + return_datasets = dataset_configs.get('return_datasets', False) + if return_datasets: + dataset.update( + {'train_ds': train_ds, 'valid_ds': eval_ds, 'test_ds': test_ds}) + logging.info('Dataset metadata: %s', dataset['meta_data']) + return dataset_utils.Dataset(**dataset) diff --git a/scenic/projects/streaming_dvc/io/ops.py b/scenic/projects/streaming_dvc/io/ops.py new file mode 100644 index 0000000000000000000000000000000000000000..6e8f3f27de9ec3aa952f95409e37597d1ccc9087 --- /dev/null +++ b/scenic/projects/streaming_dvc/io/ops.py @@ -0,0 +1,484 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Preprocessing operations.""" + +import dataclasses +from typing import Optional, Sequence, Tuple, Union + +from clu import preprocess_spec +from dmvr import tokenizers + +from scenic.projects.baselines.centernet import transforms +from scenic.projects.t5 import tokenizer as t5_tokenizer +import tensorflow as tf + + +SP_MODEL_PATH = 'gs://t5-data/vocabs/cc_all.32000.100extra/sentencepiece.model' +SP_VOCAB_SIZE = 32128 +TOKENIZER = Union[ + tokenizers.BertTokenizer, + t5_tokenizer.SentencePieceTokenizer, + ] + + +def get_tokenizer(tokenizer_weight_path) -> TOKENIZER: + if tokenizer_weight_path == 't5': + tokenizer = t5_tokenizer.build_dmvr_sp_model() + else: + tokenizer = tokenizers.BertTokenizer(tokenizer_weight_path) + tokenizer.initialize() + return tokenizer + + +@dataclasses.dataclass(frozen=True) +class InitPaddingMask: + """Create a `padding_mask` of `ones` to match the current unpadded image.""" + + def __call__(self, features): + with tf.name_scope(type(self).__name__): + h, w = transforms.get_hw(features, dtype=tf.int32) + # padding_mask is initialized as ones. It will later be padded with zeros. + features_new = features.copy() + features_new['padding_mask'] = tf.ones((h, w), dtype=tf.float32) + return features_new + + +@dataclasses.dataclass(frozen=True) +class FixedSizeCrop: + """Crop a random sized region from the image as done in DETR. + + Assumes the features dictionary contains "inputs", "label" and "padding_mask". + """ + crop_size: int + + def __call__(self, features): + with tf.name_scope(type(self).__name__): + h, w = transforms.get_hw(features, dtype=tf.int32) + wcrop = tf.cast(tf.minimum(w, self.crop_size), tf.int32) + hcrop = tf.cast(tf.minimum(h, self.crop_size), tf.int32) + i = tf.random.uniform([], 0, h - hcrop + 1, dtype=tf.int32) + j = tf.random.uniform([], 0, w - wcrop + 1, dtype=tf.int32) + region = (i, j, hcrop, wcrop) + features_new = features.copy() + return transforms.crop(features_new, region) + + +@dataclasses.dataclass(frozen=True) +class CenterCrop: + """Crop the center region from the image as done in DETR.""" + + crop_size: int + + def __call__(self, features): + with tf.name_scope(type(self).__name__): + h, w = transforms.get_hw(features, dtype=tf.int32) + wcrop = tf.cast(tf.minimum(w, self.crop_size), tf.int32) + hcrop = tf.cast(tf.minimum(h, self.crop_size), tf.int32) + i = (h - hcrop) // 2 + j = (w - wcrop) // 2 + region = (i, j, hcrop, wcrop) + features_new = features.copy() + return transforms.crop(features_new, region) + + +@dataclasses.dataclass(frozen=True) +class RandomRatioResize: + """EfficientNet data augmentation. First resize than crop a fixed size.""" + + min_scale: float + max_scale: float + target_size: int + + def __call__(self, features): + with tf.name_scope(type(self).__name__): + ratio = tf.random.uniform( + [], self.min_scale, self.max_scale, dtype=tf.float32) + size = tf.cast(tf.cast(self.target_size, tf.float32) * ratio, tf.int32) + features_new = features.copy() + return transforms.resize(features_new, size, max_size=size) + + +@dataclasses.dataclass(frozen=True) +class ResizeShorter: + """Resize the shorter side to a fixed size.""" + + target_size: int + + def __call__(self, features): + with tf.name_scope(type(self).__name__): + features_new = features.copy() + return transforms.resize(features_new, self.target_size, max_size=None) + + +@dataclasses.dataclass +class DecodeActivityNetParagraphCaptionAnnotations: + """Decode ActivityNet-Paragraph caption annotations.""" + + tokenizer_weight_path: str + num_captions_per_sample: int = 2 + max_text_tokens: int = 1024 + # concat_captions is set to 'concat_all' for training, 'concat_twosplit' + # for evaluation when we have more than one annotated paragraph. + concat_captions: str = 'concat_twosplit' + # split field (in the input features) is used for evaluation, to determine + # which subsets of sentence captions should be concatenated together. + split_field: str = 'split' + additional_keys: Tuple[str, ...] = () + _tokenizer: TOKENIZER = dataclasses.field(init=False) + + def __post_init__(self): + self._tokenizer = get_tokenizer(self.tokenizer_weight_path) + + def __call__( + self, features: preprocess_spec.Features + ) -> preprocess_spec.Features: + image = tf.cast(features['image'], tf.float32) + text_features = features['captions']['text'] + if self.concat_captions == 'concat_all': # ActivityNet-Para train + text_features = tf.strings.reduce_join(text_features) + text_features = text_features[None] + elif self.concat_captions == 'concat_twosplit': # ActivityNet-Para eval + assert self.num_captions_per_sample == 2, 'eval setting has 2 paragraphs.' + split_features = features[self.split_field] + text_features_para1 = tf.strings.reduce_join( + text_features[split_features == 1])[None] + # handle cases where the second paragraph split is missing (~1% of videos) + text_features = tf.cond( + tf.reduce_any(split_features == 2), + lambda: tf.concat([ # pylint: disable=g-long-lambda + text_features_para1, + tf.strings.reduce_join( + text_features[split_features == 2])[None] + ], axis=0), + lambda: text_features_para1) + else: + raise ValueError( + f'Unrecognized concat_captions value: "{self.concat_captions}"') + text_tokens = self._tokenizer.string_tensor_to_indices( + text_features, + prepend_bos=True, + append_eos=True, + max_num_tokens=self.max_text_tokens, + )[:, : self.max_text_tokens] + target = { + 'text_tokens': text_tokens, + } + + if self.concat_captions == 'concat_twosplit': + # Needed for cases where only one paragraph is available during eval. + pad_n = self.num_captions_per_sample + target['text_tokens'] = tf.pad( + target['text_tokens'], + [[0, pad_n - tf.shape(text_tokens)[0]], [0, 0]]) + + # Miscellaneous metadata, kept from COCO captions decoder. + target['orig_size'] = tf.cast(tf.shape(image)[-3:-1], dtype=tf.int32) + target['size'] = tf.identity(target['orig_size']) + target['image/id'] = ( + features['image/id'] + if 'image/id' in features + else tf.constant(0, dtype=tf.int32) + ) + for key in self.additional_keys: + target[key] = features[key] + + output = { + 'inputs': image, + 'label': target, + } + + return output + + +@dataclasses.dataclass +class DecodeCocoCaptionAnnotations: + """Decode Coco-Caption annotations.""" + + tokenizer_weight_path: str + num_captions_per_sample: int = 5 + max_text_tokens: int = 40 + concat_captions: bool = False + max_context_tokens: int = -1 + append_context_eos: bool = False + add_string_keys: Tuple[str, ...] = () + context_prefix: str = '' + context_suffix: str = '' + pad_text_tokens: bool = False + _tokenizer: TOKENIZER = dataclasses.field(init=False) + + def __post_init__(self): + self._tokenizer = get_tokenizer(self.tokenizer_weight_path) + + def __call__( + self, features: preprocess_spec.Features + ) -> preprocess_spec.Features: + image = tf.cast(features['image'], tf.float32) + text_features = features['captions']['text'] + if self.concat_captions: + text_features = tf.strings.reduce_join(text_features) + text_features = text_features[None] + text_tokens = self._tokenizer.string_tensor_to_indices( + text_features, + prepend_bos=True, + append_eos=True, + max_num_tokens=self.max_text_tokens, + )[:, : self.max_text_tokens] + inds = None + if not self.concat_captions: + # Randomly select num_captions_per_sample + inds = tf.random.shuffle(tf.range(tf.shape(text_tokens)[0]))[ + : self.num_captions_per_sample + ] + text_tokens = tf.gather(text_tokens, inds) + target = { + 'text_tokens': text_tokens, + } + + if 'context' in features: + assert not self.concat_captions, 'paragraph QA is not supported!' + max_context_tokens = self.max_context_tokens if ( + self.max_context_tokens > 0) else self.max_text_tokens + context = features['context'] + if self.context_prefix: + context = tf.constant( + self.context_prefix, dtype=tf.string)[None] + context + if self.context_suffix: + context = context + tf.constant( + self.context_suffix, dtype=tf.string)[None] + context_tokens = self._tokenizer.string_tensor_to_indices( + context, + prepend_bos=False, + append_eos=self.append_context_eos, + max_num_tokens=max_context_tokens, + )[:, : max_context_tokens] + context_tokens = tf.gather(context_tokens, inds) + target['context_tokens'] = context_tokens + + if self.pad_text_tokens: + # This is needed for datasets with variable number of captions. E.g, + # NextQA test set with multiple GT answers. We don't need this for COCO + # Or MSRVTT as they all have the same number of caption annotations. + pad_n = self.num_captions_per_sample + target['text_tokens'] = tf.pad( + target['text_tokens'], + [[0, pad_n - tf.shape(text_tokens)[0]], [0, 0]]) + if 'context_tokens' in target: + target['context_tokens'] = tf.pad( + target['context_tokens'], + [[0, pad_n - tf.shape(target['context_tokens'])[0]], [0, 0]]) + + target['orig_size'] = tf.cast(tf.shape(image)[-3:-1], dtype=tf.int32) + target['size'] = tf.identity(target['orig_size']) + target['image/id'] = ( + features['image/id'] + if 'image/id' in features + else tf.constant(0, dtype=tf.int32) + ) + for key in self.add_string_keys: + target[key] = features[key] + + output = { + 'inputs': image, + 'label': target, + } + if preprocess_spec.SEED_KEY in features: + output[preprocess_spec.SEED_KEY] = features[preprocess_spec.SEED_KEY] + return output + + +@dataclasses.dataclass(frozen=True) +class ParseCustomExample: + """Converts custom example into the standard format.""" + image_key: str + caption_key: str + context_key: str = '' + + def __call__( + self, features: preprocess_spec.Features) -> preprocess_spec.Features: + with tf.name_scope(type(self).__name__): + features_new = { + 'captions': {'text': tf.sparse.to_dense(features[self.caption_key])}, + 'image': tf.image.decode_jpeg(features[self.image_key], channels=3), + } + if self.context_key: + features_new['context'] = tf.sparse.to_dense( + features[self.context_key]) + return features_new + + + + +@dataclasses.dataclass(frozen=True) +class PadImages: + """Pad images and "padding_mask" to a fixed size.""" + + pad_h: int + pad_w: Optional[int] = None + pad_c: int = 3 + + def __call__( + self, features: preprocess_spec.Features) -> preprocess_spec.Features: + + features_new = features.copy() + pad_w = self.pad_w or self.pad_h + + h = tf.shape(features['inputs'])[0] + w = tf.shape(features['inputs'])[1] + c = tf.shape(features['inputs'])[2] + + features_new['inputs'] = tf.pad( + features['inputs'], + [[0, self.pad_h - h], [0, pad_w - w], [0, self.pad_c - c]], + mode='CONSTANT', + constant_values=0) + if 'padding_mask' in features: + features_new['padding_mask'] = tf.pad( + features['padding_mask'], + [[0, self.pad_h - h], [0, pad_w - w]], + mode='CONSTANT', + constant_values=0) + return features_new + + +@dataclasses.dataclass(frozen=True) +class VideoResizeCentralCrop: + """Resizes video to the target size and takes a central crop of it.""" + + crop_size: int + + def __call__( + self, features: preprocess_spec.Features) -> preprocess_spec.Features: + + features_new = features.copy() + frames = features['inputs'] + original_size = tf.shape(frames)[1:3] + h, w = transforms.get_size_with_aspect_ratio( + original_size, self.crop_size) + rescaled_frames = tf.image.resize(frames, (h, w)) + wcrop = tf.cast(tf.minimum(w, self.crop_size), tf.int32) + hcrop = tf.cast(tf.minimum(h, self.crop_size), tf.int32) + i = (h - hcrop) // 2 + j = (w - wcrop) // 2 + cropped_frames = rescaled_frames[:, i: i + hcrop, j: j + wcrop] + + features_new['inputs'] = cropped_frames + features['label']['size'] = tf.stack((hcrop, wcrop)) + return features_new + + +@dataclasses.dataclass(frozen=True) +class DecodeAndSubsampleVideo: + """Decodes and subsamples frames from video, returning in common format. + + This common format is A dictionary of features containing + {image, captions/text, image/id}. + + Attributes: + num_frames: The number of frames to decode. These are randomly sampled if + training. Otherwise, uniformly sampled through the video. If + num_frames < 0, all the frames are returned. + is_train: If training. + caption_field: Which field in the sstable is used to store the caption. + context_field: Field in the sstable for questions in QA tasks. Empty means + no such field. + max_frames: this is used when we want to use all-frames in a video + (num_frames <=0), to limit the max number of frames in a batch. + add_media_id: bool; if true, add revertiable media_id and frame indexes. + additional_keys: tuple; string keys to decode + additional_keys_decode_bytes: tuple of bool; if true, decodes the key + strings added by add_string_keys into byte arrays. Only relevant when + add_string_keys is provided. + """ + + num_frames: int + is_train: bool + caption_field: str = 'caption/string' + context_field: str = '' + max_frames: int = -1 + additional_keys: Tuple[str, ...] = () + additional_keys_decode_bytes: Tuple[bool, ...] = () + + def __call__( + self, features: preprocess_spec.Features) -> preprocess_spec.Features: + + frames = features['image/encoded'] + if self.num_frames > 0: + max_frames = tf.shape(frames)[0] + if self.is_train: + inds = tf.sort(tf.random.shuffle(tf.range(max_frames))[ + :self.num_frames]) + else: + stride = tf.maximum(max_frames // self.num_frames, 1) + inds = tf.range(tf.minimum(self.num_frames, max_frames)) * stride + else: + inds = tf.range(tf.shape(frames)[0]) + + frames = tf.gather(frames, inds) + frames = tf.map_fn( + lambda x: tf.image.decode_jpeg(x, channels=3), + frames, back_prop=False, dtype=tf.uint8) + if self.num_frames > 0: + frames = tf.pad( + frames, + [[0, self.num_frames - tf.shape(frames)[0]], [0, 0], [0, 0], [0, 0]]) + if self.max_frames > 0: + frames = frames[:self.max_frames] + frames = tf.pad( + frames, + [[0, self.max_frames - tf.shape(frames)[0]], [0, 0], [0, 0], [0, 0]]) + video_id = tf.zeros((), tf.int32) + # Return features dictionary in the standard format. + features_new = { + 'image': frames, + 'captions': { + 'text': tf.sparse.to_dense(features[self.caption_field])}, + 'image/id': video_id, + } + if self.context_field: + features_new['context'] = tf.sparse.to_dense(features[self.context_field]) + for k, decode_bytes in zip( + self.additional_keys, self.additional_keys_decode_bytes): + k_str = tf.sparse.to_dense(features[k]) + if decode_bytes: + features_new[k] = tf.io.decode_raw(k_str, + out_type=tf.uint8, + fixed_length=32)[0] + else: + features_new[k] = k_str + + if preprocess_spec.SEED_KEY in features: + features_new[preprocess_spec.SEED_KEY] = features[ + preprocess_spec.SEED_KEY] + + return features_new + + +@dataclasses.dataclass(frozen=True) +class Drop(): + """Drops the given keys.""" + + keys: Sequence[str] + ignore_missing_features: bool = False + + def __call__( + self, features: preprocess_spec.Features) -> preprocess_spec.Features: + if not self.ignore_missing_features: + for k in self.keys: + if k not in features: + raise ValueError( + f"Could not drop features '{k}'. Available features:" + f" {list(features)}" + ) + return {k: v for k, v in features.items() if k not in self.keys} diff --git a/scenic/projects/streaming_dvc/main.py b/scenic/projects/streaming_dvc/main.py new file mode 100644 index 0000000000000000000000000000000000000000..1aa07761e8f947ca715dfaa83ecbe4f87d100004 --- /dev/null +++ b/scenic/projects/streaming_dvc/main.py @@ -0,0 +1,103 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for Streaming DVC.""" + +import os +from typing import Any, Optional + +from absl import flags +from clu import metric_writers +import flax +import jax +import jax.numpy as jnp +import ml_collections + +from scenic import app +from scenic.projects.streaming_dvc import evaluate +from scenic.projects.streaming_dvc import trainer +from scenic.projects.streaming_dvc.io import densecap_ops # pylint: disable=unused-import +from scenic.projects.streaming_dvc.io import flexio # pylint: disable=unused-import +from scenic.projects.streaming_dvc.io import ops # pylint: disable=unused-import +from scenic.projects.streaming_dvc.modeling import model +from scenic.projects.streaming_dvc.modeling import streaming_model +from scenic.projects.streaming_dvc.modeling import vid2seq_model +from scenic.train_lib import train_utils + +# replace with the path to your JAVA bin location +JRE_BIN_JAVA = path_to_jre_bin_java +FLAGS = flags.FLAGS + + +def get_model_cls(model_name: str) -> Any: + """Returns model class given its name.""" + if model_name == 'git': + return model.CaptioningModel + elif model_name == 'streaming_model': + return streaming_model.StreamingCaptioningModel + elif model_name == 'streaming_dense_model': + return streaming_model.DenseStreamingCaptioningModel + elif model_name in ['streaming_vid2seq', 'vid2seq']: + return vid2seq_model.Vid2SeqModel + else: + raise ValueError(f'Unrecognized model: {model_name}.') + + +def get_dataset(config: ml_collections.ConfigDict, data_rng: jnp.ndarray, + dataset_service_address: Optional[str] = None): + """Returns dataset given config.""" + return train_utils.get_dataset( + config, data_rng, dataset_service_address=dataset_service_address) + + +def get_trainer_fn(config: ml_collections.ConfigDict): + """Returns trainer function given config.""" + + trainer_name = config.get('trainer', '') + eval_only = config.get('eval_only', False) or trainer_name == 'evaluator' + + if eval_only: + trainer_fn = evaluate.evaluate + else: + trainer_fn = trainer.train_and_evaluate + + return trainer_fn + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the Elcap project.""" + # Temporary fixing flax checkpoint migration issue. + flax.config.update('flax_use_orbax_checkpointing', False) + jave_jre = JRE_BIN_JAVA + os.environ['JRE_BIN_JAVA'] = java_jre + + model_cls = get_model_cls(config.model.model_name) + data_rng, rng = jax.random.split(rng) + dataset = get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + + trainer_fn = get_trainer_fn(config) + + trainer_fn( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/streaming_dvc/modeling/__init__.py b/scenic/projects/streaming_dvc/modeling/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/streaming_dvc/modeling/auto_regressive_decode.py b/scenic/projects/streaming_dvc/modeling/auto_regressive_decode.py new file mode 100644 index 0000000000000000000000000000000000000000..b84c626ab8f2190046cbcce17cde8e26f99c5056 --- /dev/null +++ b/scenic/projects/streaming_dvc/modeling/auto_regressive_decode.py @@ -0,0 +1,463 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Auto-regressive generate caption. + +This is simplified from t5 decoding +https://github.com/google-research/t5x/blob/main/t5x/decoding.py + +We don't use model cache for now. +""" +import functools + +from typing import Any, Callable, Tuple +import flax +import jax +from jax import lax +import jax.numpy as jnp + +NEG_INF = -1.0e7 +PyTreeDef = Any +Array = jax.Array + + +@flax.struct.dataclass +class State: + """Holds beam search state data.""" + cur_index: int + predictions: Array # int array of (batch_size, max_steps) + sum_log_prob: Array # float array of (batch_size,) + + +def scatter_min(inp, index, src): + """Jax implementation of torch.scatter(inp, 1, index, src).""" + # from https://github.com/jax-ml/jax/issues/8487 + dnums = jax.lax.ScatterDimensionNumbers( + update_window_dims=(), inserted_window_dims=(0,), + scatter_dims_to_operand_dims=(0,)) + scatter = functools.partial(jax.lax.scatter_min, dimension_numbers=dnums) + scatter = jax.vmap(scatter, in_axes=(0, 0, 0), out_axes=0) + return scatter(inp, jnp.expand_dims(index, axis=-1), src) + + +def greedy_decode( + begin_token, tokens_to_logits, + max_steps=40, eos_index=102, vocab_size=30522, **kwargs): + """Autoregressively generate a single caption. + + Args: + begin_token: int array (batch_size, max_steps) + tokens_to_logits: a function that converts input + (batch_size, max_steps) to (batch_size, max_steps, vocab_size) + max_steps: int + eos_index: int + vocab_size: int + **kwargs: args for other decoder + + Returns: + predictions: (batch_size, max_steps) + log_prob: (batch_size,) + """ + del kwargs + batch_size = begin_token.shape[0] + logits_after_end = jnp.full( + (batch_size, vocab_size), float('-inf'), dtype=jnp.float32) + logits_after_end = logits_after_end.at[:, eos_index].set(0) + + def cond_fn(state: State) -> bool: + return state.cur_index < max_steps - 1 + + def body_fn(state: State) -> State: + logits = tokens_to_logits( + state.predictions)[:, state.cur_index - 1] # (batch_size, vocab_size) + # Avoid predicting repeating words following: + # https://github.com/JialianW/GRiT/blob/master/grit/modeling/text/ + # text_decoder.py#L450 + last_prediction = state.predictions[ + :, state.cur_index - 1] # (batch_size,) + logits = scatter_min( + logits, last_prediction, + jnp.full((logits.shape[0],), -10000., dtype=jnp.float32)) + logits = jnp.where( + jnp.broadcast_to( + last_prediction[:, None], (batch_size, vocab_size)) == eos_index, + logits_after_end, logits) # (batch_size, vocab_size) + log_prob = jax.nn.log_softmax(logits) # (batch_size, vocab_size) + inds = jnp.argmax(log_prob, axis=-1) # (batch_size,) + predictions = state.predictions.at[:, state.cur_index].set( + inds) # (batch_size, max_steps) + max_log_prob = jnp.max(log_prob, axis=-1) # (batch_size,) + new_log_prob = state.sum_log_prob + max_log_prob # (batch_size,) + return State( + cur_index=state.cur_index + 1, + predictions=predictions, + sum_log_prob=new_log_prob) + + init_state = State( + cur_index=1, + predictions=begin_token, + sum_log_prob=jnp.zeros((begin_token.shape[0],), dtype=jnp.float32)) + final_state = jax.lax.while_loop(cond_fn, body_fn, init_state) + predictions = final_state.predictions # (batch_size, max_steps) + sum_log_prob = final_state.sum_log_prob + num_valid = (predictions != eos_index).sum(axis=-1) - 1 # (batch_size,) + num_valid = jnp.maximum(num_valid, 1) + log_probs = sum_log_prob / num_valid + return predictions, log_probs + + +def brevity_penalty(alpha, length): + return jnp.power(((5.0 + length) / 6.0), alpha) + + +@flax.struct.dataclass +class BeamState: + """Holds beam search state data.""" + # The position of the decoding loop in the length dimension. + cur_index: Array # scalar int32: current decoded length index + # The active sequence log probabilities and finished sequence scores. + live_logprobs: Array # float32: [batch_size, beam_size] + finished_scores: Array # float32: [batch_size, beam_size] + # The current active-beam-searching and finished sequences. + live_seqs: Array # int32: [batch_size, beam_size, max_decode_len] + finished_seqs: Array # int32: [batch_size, beam_size, + # max_decode_len] + # Records which of the 'finished_seqs' is occupied and not a filler slot. + finished_flags: Array # bool: [batch_size, beam_size] + # The current state of the autoregressive decoding caches. + + +def flatten_beam_dim(x: jnp.ndarray, offset: int = 0) -> jnp.ndarray: + """Flattens the first two dimensions of a non-scalar array.""" + xshape = list(x.shape) + b_sz = xshape.pop(offset) + xshape[offset] *= b_sz + return x.reshape(xshape) + + +def unflatten_beam_dim(x: jnp.ndarray, + batch_size: int, + beam_size: int, + offset: int = 0) -> jnp.ndarray: + """Unflattens the first, flat batch*beam dimension of a non-scalar array.""" + assert batch_size * beam_size == x.shape[offset] + xshape = list(x.shape) + newshape = xshape[:offset] + [batch_size, beam_size] + xshape[offset + 1:] + return x.reshape(newshape) + + +def beam_init(batch_size: int, + beam_size: int, + max_decode_len: int, + inputs: jnp.ndarray) -> BeamState: + """Initializes the beam search state data structure.""" + cur_index0 = jnp.array(1) + live_logprobs0 = jnp.tile( + jnp.array([0.0] + [NEG_INF] * (beam_size - 1)), [batch_size, 1]) + finished_scores0 = jnp.ones((batch_size, beam_size)) * NEG_INF + live_seqs0 = jnp.broadcast_to( + inputs[:, None], (batch_size, beam_size, inputs.shape[-1])) + finished_seqs0 = jnp.zeros((batch_size, beam_size, max_decode_len), jnp.int32) + finished_flags0 = jnp.zeros((batch_size, beam_size), jnp.bool_) + # add beam dimension to attention cache pytree elements + return BeamState( + cur_index=cur_index0, + live_logprobs=live_logprobs0, + finished_scores=finished_scores0, + live_seqs=live_seqs0, + finished_seqs=finished_seqs0, + finished_flags=finished_flags0, + ) + + +def gather_beams(nested: PyTreeDef, + beam_indices: jnp.ndarray, + batch_size: int, + old_beam_size: int, + new_beam_size: int) -> jnp.ndarray: + """Gathers the beam slices indexed by beam_indices into new beam array. + + Args: + nested: pytree of arrays or scalars (the latter ignored). + beam_indices: array of beam_indices + batch_size: size of batch. + old_beam_size: size of _old_ beam dimension. + new_beam_size: size of _new_ beam dimension. + + Returns: + New pytree with new beam arrays. + [batch_size, old_beam_size, ...] --> [batch_size, new_beam_size, ...] + """ + del batch_size + del new_beam_size + # Gather via one-hot contraction, needed for SPMD partitioning. + oh_beam_indices = jax.nn.one_hot( + beam_indices, old_beam_size, dtype=jnp.int32) + + def gather_fn(x): + return jnp.einsum('beo,bo...->be...', oh_beam_indices, x).astype(x.dtype) + + return jax.tree_util.tree_map(gather_fn, nested) + + +def gather_topk_beams(nested: PyTreeDef, score_or_log_prob: jnp.ndarray, + batch_size: int, new_beam_size: int) -> jnp.ndarray: + """Gathers the top-k beam slices given by score_or_log_prob array. + + Args: + nested: pytree of arrays or scalars (the latter ignored). + score_or_log_prob: [batch_size, old_beam_size] array of values to sort by + for top-k selection of beam slices. + batch_size: int: size of batch. + new_beam_size: int: size of _new_ top-k selected beam dimension + + Returns: + New pytree with new beam arrays containing top k new_beam_size slices. + [batch_size, old_beam_size, ...] --> [batch_size, new_beam_size, ...] + """ + _, topk_indices = lax.top_k(score_or_log_prob, k=new_beam_size) + topk_indices = jnp.flip(topk_indices, axis=1) + return gather_beams(nested, topk_indices, batch_size, + score_or_log_prob.shape[1], new_beam_size) + + +def beam_search(inputs: jnp.ndarray, + tokens_to_logits: Callable[[jnp.ndarray], jnp.ndarray], + eos_index: int, + beam_size: int = 4, + alpha: float = 0.6, + max_steps: int = 40, + **kwargs) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Beam search for transformer machine translation. + + If `inputs` has non-zero entries, those values are not modified, i.e., + the sampled values for those positions are discarded. This simulates the + teacher forcing on the prefix positions. + + Args: + inputs: array: (batch_size, max_steps) + tokens_to_logits: a function that converts input + (batch_size, max_steps) to (batch_size, max_steps, vocab_size) + eos_index: int: id of end-of-sentence token for target vocabulary. + beam_size: number of decoded sequences to be returned. This is equivalent + to the number of beams used in the beam search. + alpha: float: scaling factor for brevity penalty. + max_steps: int: an optional maximum length of decoded sequence. If + None, it uses `inputs.shape[1]` as `max_decode_len`. + **kwargs: args for other decoder + + Returns: + Tuple of: + [batch_size, beam_size, max_decode_len] top-scoring sequences + [batch_size, beam_size] beam-search scores. + """ + del kwargs + batch_size = inputs.shape[0] + end_marker = jnp.array(eos_index) + + # initialize beam search state + beam_search_init_state = beam_init(batch_size, beam_size, max_steps, inputs) + + def beam_search_loop_cond_fn(state: BeamState): + """Beam search loop termination condition.""" + not_at_end = (state.cur_index < max_steps - 1) + # Is no further progress in the beam search possible? + # Get the best possible scores from alive sequences. + min_brevity_penalty = brevity_penalty(alpha, max_steps) + best_live_scores = state.live_logprobs[:, -1:] / min_brevity_penalty + # Get the worst scores from finished sequences. + worst_finished_scores = jnp.min( + state.finished_scores, axis=1, keepdims=True) + # Mask out scores from slots without any actual finished sequences. + worst_finished_scores = jnp.where(state.finished_flags, + worst_finished_scores, NEG_INF) + # If no best possible live score is better than current worst finished + # scores, the search cannot improve the finished set further. + search_terminated = jnp.all(worst_finished_scores > best_live_scores) + + # If we're not at the max decode length, and the search hasn't terminated, + # continue looping. + return not_at_end & (~search_terminated) + + def beam_search_loop_body_fn(state: BeamState) -> BeamState: + """Beam search loop state update function.""" + # Flatten beam dimension into batch to be compatible with model. + test_input = flatten_beam_dim(state.live_seqs) + flat_logits = tokens_to_logits(test_input)[:, state.cur_index - 1] + # [batch * beam, vocab] --> [batch, beam, vocab] + logits = unflatten_beam_dim(flat_logits, batch_size, beam_size) + candidate_log_probs = jax.nn.log_softmax(logits) # [batch, beam, vocab] + log_probs = ( + candidate_log_probs + jnp.expand_dims( + state.live_logprobs, axis=2)) # [batch, beam, vocab] + vocab_size = log_probs.shape[-1] + + beams_to_keep = 2 * beam_size + flat_log_probs = log_probs.reshape( + (batch_size, beam_size * vocab_size)) # [batch, beams * vocab] + topk_log_probs, topk_indices = lax.top_k( + flat_log_probs, k=beams_to_keep) # [batch, 2*beams] + + topk_ids = topk_indices % vocab_size + topk_ids = jnp.expand_dims(topk_ids, axis=2) + + # Recover the beam index by floor division. + topk_beam_indices = topk_indices // vocab_size + # Gather 2*k top beams. + # --> [batch, 2*beams, length] + topk_seq = gather_beams(state.live_seqs, topk_beam_indices, batch_size, + beam_size, beams_to_keep) + # Update sequences for the 2*K top-k new sequences. + # --> [batch, 2*beams, length] + topk_seq = lax.dynamic_update_slice( + topk_seq, topk_ids, (0, 0, state.cur_index)) + + # Update LIVE (in-progress) sequences: + # Did any of these sequences reach an end marker? + # --> [batch, 2*beams] + newly_finished = (topk_seq[:, :, state.cur_index] == end_marker) + # To prevent these newly finished sequences from being added to the LIVE + # set of active beam search sequences, set their log probs to a very large + # negative value. + new_log_probs = topk_log_probs + newly_finished * NEG_INF + # Determine the top k beam indices (from top 2*k beams) from log probs. + # --> [batch, beams] + _, new_topk_indices = lax.top_k(new_log_probs, k=beam_size) + new_topk_indices = jnp.flip(new_topk_indices, axis=1) + # Gather the top k beams (from top 2*k beams). + # --> [batch, beams, length], [batch, beams] + top_alive_seq, top_alive_log_probs = gather_beams([topk_seq, new_log_probs], + new_topk_indices, + batch_size, 2 * beam_size, + beam_size) + + # Update FINISHED (reached end of sentence) sequences: + # Calculate new seq scores from log probabilities. + new_scores = topk_log_probs / brevity_penalty(alpha, state.cur_index) + # Mask out the still unfinished sequences by adding large negative value. + # --> [batch, 2*beams] + new_scores += (~newly_finished) * NEG_INF + + # Combine sequences, scores, and flags along the beam dimension and compare + # new finished sequence scores to existing finished scores and select the + # best from the new set of beams. + finished_seqs = jnp.concatenate( # --> [batch, 3*beams, length] + [state.finished_seqs, topk_seq], + axis=1) + finished_scores = jnp.concatenate( # --> [batch, 3*beams] + [state.finished_scores, new_scores], axis=1) + finished_flags = jnp.concatenate( # --> [batch, 3*beams] + [state.finished_flags, newly_finished], axis=1) + # --> [batch, beams, length], [batch, beams], [batch, beams] + top_finished_seq, top_finished_scores, top_finished_flags = ( + gather_topk_beams([finished_seqs, finished_scores, finished_flags], + finished_scores, batch_size, beam_size)) + + return BeamState( + cur_index=state.cur_index + 1, + live_logprobs=top_alive_log_probs, + finished_scores=top_finished_scores, + live_seqs=top_alive_seq, + finished_seqs=top_finished_seq, + finished_flags=top_finished_flags, + ) + + # Run while loop and get final beam search state. + final_state = lax.while_loop(beam_search_loop_cond_fn, + beam_search_loop_body_fn, beam_search_init_state) + + # Account for the edge-case where there are no finished sequences for a + # particular batch item. If so, return live sequences for that batch item. + # --> [batch] + none_finished = jnp.any(final_state.finished_flags, axis=1) + # --> [batch, beams, length] + finished_seqs = jnp.where( + none_finished[:, None, None], + final_state.finished_seqs, final_state.live_seqs) + # --> [batch, beams] + finished_scores = jnp.where( + none_finished[:, None], + final_state.finished_scores, final_state.live_logprobs) + return finished_seqs, finished_scores + + +def autoregressive_predict( + flax_model, params, outputs, method='beam', beam_size=4, + brevity_penalty_alpha=0.6, + feature_key='visual_features'): + """Generate caption from object features in an auto-agressive way. + + Args: + flax_model: flax model. + params: pytree of network parameters. + outputs: dict with keys: + 'visual_features': (batch_size, num_tokens, hidden_size) + 'begin_tokens': (batch_size, max_caption_length) + 'context_tokens': (batch_size, num_tokens) or None + method: 'greedy' or 'beam' + beam_size: int + brevity_penalty_alpha: float + feature_key: str + Returns: + Updated outputs with updated keys: + 'text_tokens': int array (batch_size, max_caption_length), + whose values are in range vocab_size + """ + batch_size = outputs[feature_key].shape[0] + visual_features = outputs[feature_key] + begin_tokens = outputs['begin_tokens'] + context_tokens = outputs['context_tokens'] if ( + 'context_tokens' in outputs) else None + if method == 'beam' and beam_size > 1: + assert method == 'beam', 'Beam size must be 1 for greedy decoding' + visual_features = jnp.broadcast_to( + visual_features[:, None], + (batch_size, beam_size,) + visual_features.shape[1:]).reshape( + (batch_size * beam_size,) + visual_features.shape[1:] + ) + if context_tokens is not None: + context_tokens = jnp.broadcast_to( + context_tokens[:, None], + (batch_size, beam_size, context_tokens.shape[1])).reshape( + batch_size * beam_size, context_tokens.shape[1]) + tokens_to_logits_kwargs = {} + if context_tokens is not None: + tokens_to_logits_kwargs['context_tokens'] = context_tokens + # pylint: disable=g-long-lambda + # (text_batch_size, max_caption_length) -> + # (text_batch_size, max_caption_length, vocab_size) + tokens_to_logits = lambda x: flax_model.apply( + variables={'params': params}, + text_tokens=x, + visual_features=visual_features, + method=flax_model.decode_text, + **tokens_to_logits_kwargs, + ) + assert method in ['greedy', 'beam'] + decode_fn = greedy_decode if method == 'greedy' else beam_search + kwargs = {} + if method == 'beam': + kwargs['beam_size'] = beam_size + kwargs['alpha'] = brevity_penalty_alpha + text_tokens, _ = decode_fn( + begin_tokens, tokens_to_logits, + max_steps=flax_model.max_caption_length, + eos_index=flax_model.end_token_id, + vocab_size=flax_model.vocab_size, + **kwargs) + outputs['text_tokens'] = text_tokens.reshape( + batch_size, beam_size, flax_model.max_caption_length) + # output of beam search scores are in increasing order. + outputs['text_tokens'] = outputs['text_tokens'][:, -1] + return outputs diff --git a/scenic/projects/streaming_dvc/modeling/model.py b/scenic/projects/streaming_dvc/modeling/model.py new file mode 100644 index 0000000000000000000000000000000000000000..b26c729a643b8ebee379123a1a36924fadc100ce --- /dev/null +++ b/scenic/projects/streaming_dvc/modeling/model.py @@ -0,0 +1,477 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Image or video captioning model.""" + +import dataclasses +from typing import Any + +from flax import linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import optax +from scenic.model_lib.base_models import base_model +from scenic.projects.streaming_dvc.modeling import text_decoder as bert_text_decoder +from scenic.projects.streaming_dvc.modeling import vit as git_vit + +GIT_PIXEL_MEAN = (0.48145466 * 255, 0.4578275 * 255, 0.40821073 * 255) +GIT_PIXEL_STD = (0.26862954 * 255, 0.26130258 * 255, 0.27577711 * 255) + + +def get_image_encoder(encoder_type: str, + encoder_args: ml_collections.ConfigDict, + param_name: str = 'image_encoder') -> nn.Module: + """Returns an image encoder.""" + if encoder_type == 'git_vit': + return git_vit.ViT(**encoder_args, name=param_name) + else: + raise ValueError(f'Unknown encoder type {encoder_type}.') + + +class LinearProjectLayers(nn.Module): + """Linear projection layer.""" + emb_dim: int = 1024 + use_projection_ln: bool = True + + @nn.compact + def __call__(self, x, train=False): + # The name `visual_projection.x` is for a historical reason to load + # weights for other decoders. This is not meaningful here now. + x = nn.Dense( + self.emb_dim, name='visual_projection.0', + kernel_init=nn.initializers.normal(stddev=0.02))( + x) # (batch_size, feature_length, hidden_size) + if self.use_projection_ln: + x = nn.LayerNorm( + epsilon=1e-5, name='visual_projection.1')(x) + return x + + +class CaptioningFlaxModel(nn.Module): + """GIT captioning model.""" + max_caption_length: int = 40 + begin_token_id: int = 101 # tokenizer.cls_token_id == 101 + end_token_id: int = 102 # tokenizer.sep_token_id == 102 + vocab_size: int = 30522 # size of BertTokenizer + label_smooth: float = 0.1 + num_frames: int = 0 + with_temp_emb: bool = True + frame_fuse_fn: str = 'concat' + pixel_mean: Any = GIT_PIXEL_MEAN + pixel_std: Any = GIT_PIXEL_STD + backbone_name: str = 'git_vit' + backbone_args: ml_collections.ConfigDict = dataclasses.field( + default_factory=ml_collections.ConfigDict) + text_decoder_name: str = 'git' + text_decoder_args: ml_collections.ConfigDict = dataclasses.field( + default_factory=ml_collections.ConfigDict) + decode_method: str = 'greedy' + decode_beam_size: int = 1 + decode_brevity_penalty_alpha: float = 0.6 + freeze_image_encoder: bool = False + num_pooled_tokens: int = -1 + backbone_param_name: str = 'image_encoder' + decode_feature_key: str = 'visual_features' + project_layers_name: str = 'none' + project_layers_args: ml_collections.ConfigDict = dataclasses.field( + default_factory=ml_collections.ConfigDict) + project_param_name: str = 'project_layers' + per_frame_qformer: bool = False + num_bins: int = 100 + show_densecap_loss: bool = False + # loc_loss_weight is only used in densecap. Negative means do not apply the + # weight and normalize localization and captioning loss together. If positive, + # normalize the two losses separately and apply loss weighting. + loc_loss_weight: float = -1.0 + ignore_empty_data: bool = False + + def setup(self): + self.image_encoder = get_image_encoder( + self.backbone_name, self.backbone_args, self.backbone_param_name) + # pylint: disable=not-a-mapping + if self.text_decoder_name == 'git': + self.textual = bert_text_decoder.TransformerDecoderTextualHead( + vocab_size=self.vocab_size, + **self.text_decoder_args, name='textual') + else: + raise NotImplementedError(self.text_decoder_name) + + if self.project_layers_name == 'linear': + self.project_layers = LinearProjectLayers( + **self.project_layers_args, + name=self.project_param_name) + elif self.project_layers_name == 'bert': + self.bert_project_layers = ( + bert_text_decoder.TransformerDecoderTextualHead( + **self.project_layers_args, + name=self.project_param_name)) + elif self.project_layers_name != 'none': + raise NotImplementedError(self.project_layers_name) + # pylint: enable=not-a-mapping + + @nn.compact + def __call__( + self, images, + context_tokens=None, + gt_text_tokens=None, + preprocess=True, train=False, debug=False): + """forward caption model. + + Args: + images: (batch_size, height, width, 3) for images or + (batch_size, t, height, width, 3) for videos (when self.num_frames > 0). + context_tokens: (batch_size, num_caps_per_image, max_context_len). + Optional context tokens. E.g., the question in QA, + gt_text_tokens: (batch_size, num_caps_per_image, max_cap_len) + preprocess: bool + train: bool + debug: bool + Returns: + ret: dict of arrays. + if train == True, return + 'text_outputs': (text_batch_size, max_cap_len, vocab_size) + if train == False, return + 'visual_features': (text_batch_size, feature_len, feature_dim) + 'begin_tokens': (batch_size, num_caps_per_image, max_cap_len) + + """ + del debug + if self.num_frames > 0: # video + # flattern time to batch + assert images.ndim == 5 + images = images.reshape( + (images.shape[0] * images.shape[1],) + images.shape[2:]) + + if preprocess: + images = self.preprocess(images) + + visual_features = self.get_visual_features( + images, train=train) # (batch_size, num_tokens, dim) + + visual_features = self.maybe_project_visual_feature( + visual_features, train=train) # (batch_size, num_vis_tokens, proj_dim) + + text_tokens, visual_features, context_tokens = ( + self.get_text_tokens_and_pad_visual_features( + visual_features, gt_text_tokens, context_tokens)) + # text_tokens: (text_batch_size, max_cap_len) + # visual_features: (text_batch_size, num_vis_tokens, proj_dim) + # context_tokens: (text_batch_size, num_context_tokens) + + text_outputs = self.textual( + text_tokens, + visual_features, + context_tokens=context_tokens, + train=train, + ) # (text_batch_size, max_cap_len, vocab_size) + + if train: + ret = {'text_outputs': text_outputs} + else: + # del text_outputs + ret = { + 'visual_features': visual_features, + 'begin_tokens': text_tokens, + 'context_tokens': context_tokens, + 'text_outputs': text_outputs, + } + return ret + + def maybe_project_visual_feature(self, visual_features, train=False): + """Project visual features if self.project_layers_name != 'none'. + + Args: + visual_features: (batch_size, num_tokens, dim) + train: bool + Returns: + visual_features: (batch_size, new_num_tokens, new_dim) + """ + if self.project_layers_name == 'qformer': + batch_size = visual_features.shape[0] + if self.per_frame_qformer: + assert self.frame_fuse_fn == 'concat' + visual_features = visual_features.reshape( + batch_size * self.num_frames, -1, visual_features.shape[-1]) + query_tokens = jnp.broadcast_to( + self.query_tokens, + (visual_features.shape[0], + self.project_layers_args.num_query_tokens, + self.project_layers_args.qformer_dim)) + query_output = self.qformer( + query_tokens, visual_features, train=train) + visual_features = self.t5_proj( + query_output) # (batch_size, num_query_tokens, t5_dim) + if self.per_frame_qformer: + visual_features = visual_features.reshape( + batch_size, -1, visual_features.shape[-1]) + elif self.project_layers_name == 'bert': + visual_features = self.bert_project_layers( + jnp.zeros( + (visual_features.shape[0], 0), + dtype=jnp.int32), + visual_features, + train=train, return_feat=True, return_visual_feature=True) + elif self.project_layers_name == 'linear': + visual_features = self.project_layers(visual_features, train=train) + else: + assert self.project_layers_name == 'none' + return visual_features + + def get_visual_features(self, images, train=False): + """Forward image backbone and aggregate video features. + + Args: + images: (total_batch_size, height, width, 3). Note for videos, the + total_batch_size is batch_size * num_frames. + train: bool + Returns: + visual_features: (batch_size, num_tokens, dim). Here the batch_size is + the actual batch_size. + """ + visual_features = self.image_encoder(images, train=train) # (B, hw, D) + if self.freeze_image_encoder: + visual_features = jax.lax.stop_gradient(visual_features) + if self.num_frames > 0: # video model + num_tokens = visual_features.shape[1] + visual_features = visual_features.reshape( + (-1, self.num_frames) + visual_features.shape[1:] + ) # (B // t, t, hw, D) + if self.with_temp_emb: + visual_feat_dim = visual_features.shape[-1] + temp_emb = self.param( + 'temperal_embedding', + nn.initializers.zeros, + (self.num_frames, 1, 1, visual_feat_dim), + ) + visual_features = visual_features + temp_emb[ + None, :, 0] # (B // t, t, hw, D) + if self.frame_fuse_fn == 'concat': + visual_features = visual_features.reshape( + visual_features.shape[0], self.num_frames * num_tokens, + visual_features.shape[-1], + ) # (B // t, t * hw, D) + else: + visual_features = self.pool_video_feature(visual_features, train=train) + else: # image model + visual_features = visual_features.reshape( + visual_features.shape[0], -1, visual_features.shape[-1], + ) # (B, hw, D) + return visual_features + + def get_text_tokens_and_pad_visual_features( + self, visual_features, gt_text_tokens, context_tokens=None): + """Get inputs to the text decoder. + + In evaluation, we create the zero-padded text-token with the first token + being BOS. In training, we handle multiple caption annotations for a + video and repeat the visual_feature to align with that. + + Args: + visual_features: (batch_size, num_tokens, dim) + gt_text_tokens: (batch_size, num_caps_per_image, max_cap_len) or None. + context_tokens: (batch_size, num_caps_per_image, max_cap_len) or None. + Returns: + text_tokens: (text_batch_size, max_cap_len). text_batch_size = (batch_size + * num_caps_per_image) + visual_features: (text_batch_size, num_tokens, dim) + context_tokens: (text_batch_size, num_tokens) or None. + """ + if gt_text_tokens is None: # Evaluation, create BOS tokens. + text_tokens = jnp.full( + (visual_features.shape[0], self.max_caption_length), + self.end_token_id, dtype=jnp.int32) # (B, max_cap_len) + text_tokens = text_tokens.at[:, 0].set( + self.begin_token_id) # (batch_size, max_cap_len) + if context_tokens is not None: + context_tokens = context_tokens[:, 0] # (batch_size, max_cap_len) + else: # Training + batch_size, num_caps_per_image = gt_text_tokens.shape[:2] + text_tokens = gt_text_tokens.reshape( + batch_size * num_caps_per_image, + gt_text_tokens.shape[2], + ) # (batch_size, num_caps_per_image, max_cap_len) + visual_features = jnp.broadcast_to( + visual_features[:, None], + (batch_size, num_caps_per_image,) + visual_features.shape[1:], + ).reshape( + (batch_size * num_caps_per_image,) + visual_features.shape[1:]) + if context_tokens is not None: + context_tokens = context_tokens.reshape( + batch_size * num_caps_per_image, context_tokens.shape[2]) + return text_tokens, visual_features, context_tokens + + def pool_video_feature(self, visual_features, train=False): + """Pool video features before feeding them to the language decoder. + + Args: + visual_features: (video_batch_size, t, hw, D) + train: bool + Returns: + visual_features: (video_batch_size, num_new_tokens, D) + """ + video_batch_size, t, hw, dim = visual_features.shape + if self.frame_fuse_fn == 'temporal_mean_pool': + visual_features = visual_features.mean( + axis=1) # (video_batch_size, hw, D) + elif self.frame_fuse_fn == 'spatial_mean_pool': + visual_features = visual_features.mean(axis=2) # (video_batch_size, t, D) + elif self.frame_fuse_fn == 'uniform_token_sample': + assert self.num_pooled_tokens > 0 + visual_features = visual_features.reshape( + video_batch_size, t * hw, dim) + if train: + inds = jax.random.permutation( + self.make_rng('dropout'), + jnp.arange(t * hw, dtype=jnp.int32))[:self.num_pooled_tokens] + else: + inds = jnp.linspace( + 0, t * hw, self.num_pooled_tokens, endpoint=False, dtype=jnp.int32) + visual_features = jnp.take_along_axis( + visual_features, inds[None, :, None], axis=1) + else: + raise NotImplementedError(self.frame_fuse_fn) + return visual_features + + def decode_text( + self, text_tokens, visual_features, + context_tokens=None, return_feat=False): + """Generate logits of a single word. + + Args: + text_tokens: (batch_size, caption_length). + visual_features: (batch_size, feature_length, feat_size). + context_tokens: (batch_size, context_length) or None + return_feat: bool; if True, return shape will be ( + batch_size, caption_length, hidden_size). + Returns: + output_logits: (batch_size, caption_length, vocab_size). + """ + return self.textual( + text_tokens, visual_features, context_tokens=context_tokens, + return_feat=return_feat, train=False) + + def preprocess(self, inputs): + """Proprocess images. Normalize pixels for non-padded pixels.""" + mean = jnp.asarray(self.pixel_mean, dtype=jnp.float32).reshape(1, 1, 1, 3) + std = jnp.asarray(self.pixel_std, dtype=jnp.float32).reshape(1, 1, 1, 3) + inputs = (inputs - mean) / std + # inputs = inputs * padding_mask[..., None] # Padded pixels remain 0 + return inputs + + def loss_function(self, outputs, batch): + """Text loss with label smoothing. + + Args: + outputs: dict + 'text_outputs': + (batch_size * num_caps_per_image, max_cap_len, vocab_size) + batch: dict + 'text_tokens': (batch_size, num_caps_per_image, max_cap_len) + Returns: + loss: float + """ + text_outputs = outputs['text_outputs'] + gt_text = batch['label']['text_tokens'] + gt_text = gt_text.reshape( + gt_text.shape[0] * gt_text.shape[1], gt_text.shape[2], + ) # (batch_size * num_caps_per_image, max_cap_len) + text_outputs = text_outputs[:, :-1] # Move gt 1 word to the right. + gt_text = gt_text[:, 1:] # No need to predict BOS + # valid: (text_batch_size, max_cap_len - 1) + valid = (gt_text > 0).astype(jnp.float32) + if self.ignore_empty_data: + # Ignore samples with empty ground truth. + valid = (valid.astype(bool) & ( + gt_text[:, 0] != self.end_token_id)[:, None]).astype(jnp.float32) + # gt: (text_batch_size, max_cap_len - 1, vocab_size) + gt = jax.nn.one_hot(gt_text, self.vocab_size) + # customized label smoothing following GRiT + # https://github.com/JialianW/GRiT/blob/master/grit/modeling/text/ + # text_decoder.py#L668 + gt = gt * (1. - self.label_smooth) + ( + 1. - gt) * self.label_smooth / (self.vocab_size - 1) + # loss: (text_batch_size, max_cap_len - 1) + gt = jax.lax.stop_gradient(gt) + loss = optax.softmax_cross_entropy(text_outputs, gt) + loss_dict = {} + # TODO(zhouxy): Create a new DensecapModel class and move this code there. + if self.show_densecap_loss or self.loc_loss_weight >= 0.0: + thresh = self.vocab_size - self.num_bins + cap_idx = ((gt_text < thresh) & (valid > 0)).astype(jnp.float32) + loc_idx = ((gt_text >= thresh) & (valid > 0)).astype(jnp.float32) + loss_dict['cap_loss'] = (loss * cap_idx).sum() / (cap_idx.sum() + 1e-8) + loss_dict['loc_loss'] = (loss * loc_idx).sum() / (loc_idx.sum() + 1e-8) + loss_dict['num_cap_tokens'] = cap_idx.sum() / cap_idx.shape[0] + loss_dict['num_loc_tokens'] = loc_idx.sum() / loc_idx.shape[0] + loss = (loss * valid).sum() / (valid.sum() + 1e-8) + if self.loc_loss_weight >= 0.0: + loss = loss_dict['cap_loss'] + ( + loss_dict['loc_loss'] * self.loc_loss_weight) + loss_dict['total_loss'] = loss + return loss, loss_dict + + +class CaptioningModel(base_model.BaseModel): + """Scenic Model Wrapper.""" + + def get_dict_from_config(self): + return dict( + max_caption_length=self.config.model.get('max_caption_length', 40), + begin_token_id=self.config.model.get('begin_token_id', 101), + end_token_id=self.config.model.get('end_token_id', 102), + vocab_size=self.config.model.get('vocab_size', 30522), + label_smooth=self.config.model.get('label_smooth', 0.1), + num_frames=self.config.model.get('num_frames', 0), + with_temp_emb=self.config.model.get('with_temp_emb', True), + frame_fuse_fn=self.config.model.get('frame_fuse_fn', 'concat'), + pixel_mean=self.config.model.get('pixel_mean', GIT_PIXEL_MEAN), + pixel_std=self.config.model.get('pixel_std', GIT_PIXEL_STD), + backbone_name=self.config.model.get('backbone_name', 'git_vit'), + backbone_args=self.config.model.get( + 'backbone_args', ml_collections.ConfigDict()), + text_decoder_name=self.config.model.get('text_decoder_name', 'git'), + text_decoder_args=self.config.model.get( + 'text_decoder_args', ml_collections.ConfigDict()), + decode_method=self.config.model.get('decode_method', 'greedy'), + decode_beam_size=self.config.model.get('decode_beam_size', 1), + decode_brevity_penalty_alpha=self.config.model.get( + 'decode_brevity_penalty_alpha', 0.6), + freeze_image_encoder=self.config.model.get( + 'freeze_image_encoder', False), + num_pooled_tokens=self.config.model.get('num_pooled_tokens', -1), + backbone_param_name=self.config.model.get( + 'backbone_param_name', 'image_encoder'), + decode_feature_key=self.config.model.get( + 'decode_feature_key', 'visual_features'), + project_layers_name=self.config.model.get( + 'project_layers_name', 'none'), + project_layers_args=self.config.model.get( + 'project_layers_args', ml_collections.ConfigDict()), + project_param_name=self.config.model.get( + 'project_param_name', 'project_layers'), + per_frame_qformer=self.config.model.get( + 'per_frame_qformer', False), + num_bins=self.config.model.get('num_bins', 100), + show_densecap_loss=self.config.model.get( + 'show_densecap_loss', False), + loc_loss_weight=self.config.model.get('loc_loss_weight', -1.0), + ignore_empty_data=self.config.model.get('ignore_empty_data', False), + ) + + def build_flax_model(self): + return CaptioningFlaxModel(**self.get_dict_from_config()) + + def loss_function(self, outputs, batch): + return self.flax_model.loss_function(outputs, batch) diff --git a/scenic/projects/streaming_dvc/modeling/streaming_model.py b/scenic/projects/streaming_dvc/modeling/streaming_model.py new file mode 100644 index 0000000000000000000000000000000000000000..ddfe901a195fbb89769de435b79df32834106293 --- /dev/null +++ b/scenic/projects/streaming_dvc/modeling/streaming_model.py @@ -0,0 +1,617 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Streaming caption model.""" +import dataclasses +from typing import Any, Optional + +from absl import logging +from flax import linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import optax + +from scenic.projects.streaming_dvc.modeling import model as elcap_model +from scenic.projects.streaming_dvc.modeling import streaming_utils + + +class StreamingCaptioningFlaxModel(elcap_model.CaptioningFlaxModel): + """Streaming captioning model. + + Attributes: + streaming_buffer_size: int; constent memory size used in ToMe-based memory + modules. + streaming_method: str; + ema_decay: float; parameter if the streaming_method == 'ema' + """ + streaming_buffer_size: int = -1 + streaming_method: str = 'none' + ema_decay: float = 0.9 + kmeans_num_iters: int = -1 + + @nn.compact + def __call__( + self, images, + context_tokens=None, + gt_text_tokens=None, + preprocess=True, train=False, debug=False): + """forward model. See CaptioningFlaxModel for args.""" + del debug + assert self.num_frames > 0 + assert images.ndim == 5 + images = images.reshape( + (images.shape[0] * images.shape[1],) + images.shape[2:]) + + if preprocess: + images = self.preprocess(images) + + visual_features = self.get_visual_features( + images, train=train) # (video_batch_size, num_tokens, dim) + logging.info('Visual features: %s', visual_features.shape) + + visual_features = self.get_streaming_features( + visual_features, train=train, + ) # (video_batch_size, new_num_vis_tokens, proj_dim) + logging.info('Streaming features: %s', visual_features.shape) + + # maybe_project_visual_feature is only used for BLIP2 models. + visual_features = self.maybe_project_visual_feature( + visual_features, train=train, + ) # (video_batch_size, num_vis_tokens, proj_dim) + logging.info('Streaming features after proj.: %s', visual_features.shape) + + text_tokens, visual_features, context_tokens = ( + self.get_text_tokens_and_pad_visual_features( + visual_features, gt_text_tokens, context_tokens)) + # text_tokens: (text_batch_size, max_cap_len) + # visual_features: (text_batch_size, new_num_vis_tokens, proj_dim) + # context_tokens: (text_batch_size, num_context_tokens) + logging.info('Text tokens: %s \nVisual features: %s\n Context tokens: %s', + text_tokens.shape, visual_features.shape, + context_tokens.shape if context_tokens is not None else 'None') + + text_outputs = self.textual( + text_tokens, + visual_features, + context_tokens=context_tokens, + train=train, + ) # (text_batch_size, max_cap_len, vocab_size) + logging.info('Text outputs: %s', text_outputs.shape) + + if train: + ret = {'text_outputs': text_outputs} + else: + ret = { + 'visual_features': visual_features, + 'begin_tokens': text_tokens, + 'context_tokens': context_tokens, + 'text_outputs': text_outputs, + } + return ret + + def get_streaming_features(self, features, train): + """Get streaming features. + + Args: + features: (video_batch_size, num_tot_tokens, dim) + train: bool + Returns: + streaming_features: (video_batch_size, num_streaming_tokens, dim) + """ + # NOTE: We can also implement this under + # CaptioningFlaxModel.pool_video_feature. Put them here in a separate + # StreamingCaptioningFlaxModel to make it less entangled with existing code. + # The behaviours of temporal_mean_pool/ spatial_mean_pool are the same as + # setting "frame_fuse_fn" in CaptioningFlaxModel. + unused_video_batch_size, _, dim = features.shape + + del train + def streaming_feature_extractor(feature): + # Shape of feature is [n_total_tokens, dim] + if self.streaming_method == 'temporal_mean_pool': + streaming_feature = feature.reshape( + self.num_frames, -1, dim).mean(axis=0) # (hw, dim) + elif self.streaming_method == 'spatial_mean_pool': + streaming_feature = feature.reshape( + self.num_frames, -1, dim).mean(axis=1) # (t, dim) + elif self.streaming_method == 'ema': + streaming_feature = feature.reshape( + self.num_frames, -1, dim) # (t, hw, dim) + buffer = streaming_feature[0] + for t in range(1, self.num_frames): + buffer = buffer * self.ema_decay + streaming_feature[t] * ( + 1. - self.ema_decay) + streaming_feature = buffer + elif self.streaming_method == 'adjacent_tome': + assert self.streaming_buffer_size > 0 + buffer = feature[:self.streaming_buffer_size] + weights = jnp.ones((buffer.shape[0],), dtype=jnp.int32) + streaming_feature = streaming_utils.adjacent_merge( + buffer, feature[self.streaming_buffer_size:], weights=weights)[0] + elif self.streaming_method == 'kmeans': + assert self.kmeans_num_iters > 0 + centers = feature[:self.streaming_buffer_size] + weights = jnp.ones((feature.shape[0],), dtype=jnp.int32) + streaming_feature = streaming_utils.kmeans( + centers, feature, weights=weights, + num_iters=self.kmeans_num_iters)[0] + else: + assert self.streaming_method == 'none' + streaming_feature = feature + return streaming_feature + + streaming_features = jax.vmap( + streaming_feature_extractor, + in_axes=0, out_axes=0, axis_name='batch')(features) + return streaming_features + + +class StreamingCaptioningModel(elcap_model.CaptioningModel): + """Scenic Model Wrapper.""" + + def get_dict_from_config(self): + config_dict = super().get_dict_from_config() + config_dict.update(dict( + streaming_buffer_size=self.config.model.get( + 'streaming_buffer_size', -1), + streaming_method=self.config.model.get('streaming_method', 'none'), + ema_decay=self.config.model.get('ema_decay', 0.9), + kmeans_num_iters=self.config.model.get('kmeans_num_iters', -1), + )) + return config_dict + + def build_flax_model(self): + return StreamingCaptioningFlaxModel(**self.get_dict_from_config()) + + +class DenseStreamingCaptioningFlaxModel(elcap_model.CaptioningFlaxModel): + """Streaming captioning model with intermediate outputs. + + Attributes: + num_dense_outputs: int; the number of intermediate outputs. This changes + the output shape. + streaming_buffer_size: int; constent memory size used in ToMe-based memory + modules. + streaming_method: str; + ema_decay: float; parameter if the streaming_method == 'ema' + early_segments_as_context: bool; If True (which is the full case), we also + provide supervisions in earlier checkpoints as context. Here each + checkpoint is in charge of segments ending between last checkpoint to this + checkpoint. If it is False, every checkpoint is in charge of all captions + from 0 to the checkpoint step. Here we can study the effect of + intermediate supervision. + normalize_early_timestamps: if False, we just split the original dense + captioning segments into intermediate checkpoints as is; if True, we + normalize the timestamps in early checkpoits to between 0 to num_bins, + so that each intermediate checkpoint is a full densecaptioning task. + copy_context: only used when early_segments_as_context is True. When True, + always predict the context tokens in predictions. + dense_outputs_weight: List of floats, with length self.num_dense_outputs. + Setting different loss weights to different decoding points. + remove_segments_from_wrong_checkpoint: bool + streaming_feature_implementation: str; different implementations (legacy) + of streaming functions. + no_timestamp_in_context: bool; By default the time tokens are in the + prefix from earlier decoding point. Remove them if this is True. + num_dense_outputs_test: The number of intermediate outputs when testing. + This can be different to the number used during training. + kmeans_num_iters: int; parameter for k-means streaming method. + ttm_output: parameters for ttm streaming method. + ttm_config: configs for ttm streaming method. + no_momentum_in_memory: bool; if we want to use the momentum term in memory. + """ + num_dense_outputs: int = -1 + streaming_buffer_size: int = -1 + streaming_method: str = 'none' + ema_decay: float = 0.9 + early_segments_as_context: bool = False + normalize_early_timestamps: bool = False + copy_context: bool = False + dense_outputs_weight: Any = dataclasses.field(default_factory=tuple) + remove_segments_from_wrong_checkpoint: bool = False + streaming_feature_implementation: str = 'fixed_checkpoints' + no_timestamp_in_context: bool = False + num_dense_outputs_test: int = -1 + kmeans_num_iters: int = 2 + ttm_output: str = 'output' + ttm_config: Optional[ml_collections.ConfigDict] = None + no_momentum_in_memory: bool = False + + @nn.compact + def __call__( + self, images, + context_tokens=None, + gt_text_tokens=None, + checkpoint_inds=None, + preprocess=True, train=False, debug=False): + """Forward model. + + Args: + images: (batch_size, height, width, 3) for images or + (batch_size, t, height, width, 3) for videos (when self.num_frames > 0). + context_tokens: (batch_size, num_caps_per_image, max_context_len). + Optional context tokens. E.g., the question in QA, + gt_text_tokens: (batch_size, num_caps_per_image, max_cap_len) + checkpoint_inds: (batch_size, num_caps_per_image) or None + preprocess: bool + train: bool + debug: bool + Returns: + ret: dict of arrays. + if train == True, return + 'text_outputs': (text_batch_size, max_cap_len, vocab_size) + if train == False, return + 'visual_features': (text_batch_size, feature_len, feature_dim) + 'begin_tokens': (batch_size, num_caps_per_image, max_cap_len) + 'context_tokens': (batch_size, max_cap_len) + 'text_outputs': (batch_size, max_cap_len, vocab_size) + 'raw_streaming_feature': + (batch_size, num_frames, num_streaming_tokens, dim) + "batch_size" here are all the batch_size of videos. + """ + del debug + assert self.num_frames > 0 + assert images.ndim == 5 + assert self.project_layers_name == 'none' + images = images.reshape( + (images.shape[0] * images.shape[1],) + images.shape[2:]) + + if preprocess: + images = self.preprocess(images) + + visual_features = self.get_visual_features( + images, train=train) # (video_batch_size, num_tokens, dim) + + raw_streaming_feature, visual_features = self.get_dense_streaming_features( + visual_features, train=train, checkpoint_inds=checkpoint_inds, + ) # (video_batch_size, num_dense_outputs, new_num_vis_tokens, proj_dim) + + text_tokens, visual_features, context_tokens = ( + self.get_text_tokens_and_reshape_visual_features( + visual_features, gt_text_tokens, context_tokens)) + # text_batch_size == video_batch_size * num_dense_outputs + # text_tokens: (text_batch_size, max_cap_len) + # visual_features: (text_batch_size, new_num_vis_tokens, proj_dim) + # context_tokens: (text_batch_size, max_cap_len) + + if train: + text_outputs = self.textual( + text_tokens, + visual_features, + context_tokens=context_tokens, + train=train, + ) # (text_batch_size, max_cap_len, vocab_size) + ret = {'text_outputs': text_outputs} + else: + text_outputs = self.textual( + text_tokens, + visual_features[:, 0], + context_tokens=context_tokens, + train=train, + ) # (text_batch_size, max_cap_len, vocab_size) + ret = { + 'visual_features': visual_features, + 'begin_tokens': text_tokens, + 'context_tokens': context_tokens, + 'text_outputs': text_outputs, + 'raw_streaming_feature': raw_streaming_feature, + } + return ret + + def get_dense_streaming_features( + self, features, checkpoint_inds=None, train=False): + """A wrapper function of different streaming function implementation. + + This is the place where we convert per-frame features (the input "features") + to streaming feature at each intermediate decoding point. + + Args: + features: (batch_size, num_tot_tokens, dim), where num_tot_tokens is + num_frames * num_tokens_per_frame. + checkpoint_inds: only needed when streaming_feature_implementation is + 'given_checkpoints'. Shape: (batch_size, num_checkpoints) + train: bool + Returns: + streaming_features_per_frame: + (batch_size, num_frames, num_streaming_tokens, dim) + stteaming_features: + (batch_size, num_checkpoints, num_streaming_tokens, dim) + """ + num_dense_outputs = self.num_dense_outputs if train or ( + self.num_dense_outputs_test < 0) else self.num_dense_outputs_test + if self.streaming_feature_implementation == 'fixed_checkpoints': + return None, self.get_dense_streaming_features_fixed_checkpoints( + features, train=train) + elif self.streaming_feature_implementation == 'per_frame_and_gather': + streaming_features_per_frame = self.get_dense_streaming_features_perframe( + features, train=train) + checkpoint_stride = self.num_frames // num_dense_outputs + streaming_features = streaming_features_per_frame[ + :, (jnp.arange(num_dense_outputs) + 1) * checkpoint_stride - 1] + return streaming_features_per_frame, streaming_features + elif self.streaming_feature_implementation == 'given_checkpoints': + # Here the checkpoint locations are variable and given in batch data. + assert (checkpoint_inds is not None) or not train + # checkpoint_inds: (video_batch_size, num_checkpoints) + streaming_features_per_frame = self.get_dense_streaming_features_perframe( + features, train=train, + ) # (video_batch_size, num_frames, num_streaming_tokens, dim) + if train: + streaming_features = jnp.take_along_axis( + streaming_features_per_frame, checkpoint_inds[:, :, None, None], + axis=1, + ) # (video_batch_size, num_checkpoints, num_streaming_tokens, dim) + else: + # stride sampling + checkpoint_stride = self.num_frames // num_dense_outputs + streaming_features = streaming_features_per_frame[ + :, (jnp.arange(num_dense_outputs) + 1) * checkpoint_stride - 1] + return streaming_features_per_frame, streaming_features + else: + raise NotImplementedError + + def get_dense_streaming_features_fixed_checkpoints( + self, features, train=False): + """Get streaming features with intermadiate outputs. + + With N = self.num_dense_outputs, we currently forward the memory module N + times, each time with the features from 0 to k / N ratio of the video. + This is thus inefficient in runtime (duplicate computing early features) + and can be optimized when needed. + + Args: + features: (video_batch_size, num_tot_tokens, dim) + train: bool + Returns: + streaming_features: + (video_batch_size, num_dense_outputs, num_streaming_tokens, dim) + """ + num_dense_outputs = self.num_dense_outputs if train or ( + self.num_dense_outputs_test < 0) else self.num_dense_outputs_test + video_batch_size, num_tot_tokens, dim = features.shape + num_tokens_per_checkpoint = num_tot_tokens // num_dense_outputs + streaming_features = [] + # TODO(zhouxy): implement this using vmap. + for b in range(video_batch_size): + video_streaming_feature = [] + for k in range(num_dense_outputs): + # feature: (num_tokens_per_checkpoint * (k + 1), dim) + feature = features[b, :(k + 1) * num_tokens_per_checkpoint] + if self.streaming_method == 'temporal_mean_pool': + streaming_feature = feature.reshape( + k + 1, num_tokens_per_checkpoint, dim).mean(axis=0) # (hw, dim) + elif self.streaming_method == 'ema': + streaming_feature = feature.reshape( + self.num_frames, -1, dim) # (t, hw, dim) + buffer = streaming_feature[0] + for t in range(1, self.num_frames): + buffer = buffer * self.ema_decay + streaming_feature[t] * ( + 1. - self.ema_decay) + streaming_feature = buffer + elif self.streaming_method == 'adjacent_tome': + assert self.streaming_buffer_size > 0 + buffer = feature[:self.streaming_buffer_size] + weights = jnp.ones((buffer.shape[0],), dtype=jnp.int32) + streaming_feature = streaming_utils.adjacent_merge( + buffer, feature[self.streaming_buffer_size:], weights=weights)[0] + elif self.streaming_method == 'kmeans': + assert self.streaming_buffer_size > 0 + weights = jnp.ones((feature.shape[0],), dtype=jnp.int32) + init_centers = feature[:self.streaming_buffer_size] + streaming_feature, _ = streaming_utils.kmeans( + init_centers, feature, weights=weights, + num_iters=self.kmeans_num_iters) + else: + assert self.streaming_method == 'none' + streaming_feature = feature + video_streaming_feature.append(streaming_feature) + video_streaming_feature = jnp.stack( + video_streaming_feature, + axis=0) # (num_dense_outputs, num_streaming_tokens, dim) + streaming_features.append(video_streaming_feature) + streaming_features = jnp.stack(streaming_features, axis=0) + return streaming_features + + def get_dense_streaming_features_perframe(self, features, train=False): + """Get streaming features with intermadiate outputs for all frames. + + Args: + features: (video_batch_size, num_tot_tokens, dim) + train: bool + Returns: + streaming_features: + (video_batch_size, num_frames, num_streaming_tokens, dim) + """ + del train + _, num_tot_tokens, dim = features.shape + num_token_per_frame = num_tot_tokens // self.num_frames + assert self.streaming_buffer_size % num_token_per_frame == 0 + def process_video(video_features): + # video_features: (num_tot_tokens, dim) + video_features = video_features.reshape( + self.num_frames, num_token_per_frame, dim) + num_start_frames = self.streaming_buffer_size // num_token_per_frame + if self.streaming_method == 'temporal_mean_pool': + ret = jnp.cumsum(video_features, axis=0) / (jnp.arange( + self.num_frames)[:, None, None] + 1) + return ret + elif self.streaming_method == 'kmeans': + assert self.kmeans_num_iters > 0 + centers = video_features[:num_start_frames].reshape(-1, dim) + counts = jnp.ones((centers.shape[0],), dtype=jnp.int32) + ret = [centers for _ in range(num_start_frames)] + for t in range(num_start_frames, self.num_frames): + data = jnp.concatenate( + [centers, video_features[t]], axis=0) + weights = jnp.concatenate( + [counts, jnp.ones((num_token_per_frame,), dtype=jnp.int32)], + axis=0) + if self.no_momentum_in_memory: + weights = weights * 0 + 1 + centers, counts = streaming_utils.kmeans( + centers, data, weights=weights, num_iters=self.kmeans_num_iters) + ret.append(centers) + ret = jnp.stack(ret, axis=0) + return ret + else: + raise NotImplementedError(self.streaming_method) + streaming_features = jax.vmap(process_video)(features) + return streaming_features + + def get_text_tokens_and_reshape_visual_features( + self, visual_features, gt_text_tokens, context_tokens): + """Get inputs to the text decoder. + + In evaluation, we create the zero-padded text-token with the first token + being BOS. + In training, the visual_features and gt_text_tokens should have the same + shape[1], and we consider them as aligned features and captions. + + Note the output dimension in evaluation changed compare to regular caption + models, and thus we must use a separate eval step. + + Args: + visual_features: (batch_size, num_dense_outputs, num_tokens, dim) + gt_text_tokens: (batch_size, num_caps_per_image, max_cap_len) or None. + context_tokens: (batch_size, num_caps_per_image, max_cap_len) or None. + Returns: + in evaluation (gt_text_tokens is None): + text_tokens: (batch_size, max_cap_len). + visual_features: (batch_size, num_dense_outputs, num_tokens, dim) + context_tokens: None + in training (gt_text_tokens is not None): + text_tokens: (text_batch_size, max_cap_len). text_batch_size = + batch_size * num_caps_per_image. + visual_features: (text_batch_size, num_tokens, dim) + context_tokens: (text_batch_size, max_cap_len) + """ + if gt_text_tokens is None: # Evaluation, create BOS tokens. + text_tokens = jnp.full( + (visual_features.shape[0], + self.max_caption_length), + self.end_token_id, dtype=jnp.int32) # (B, max_cap_len) + text_tokens = text_tokens.at[:, 0].set( + self.begin_token_id) # (text_batch_size, max_cap_len) + context_tokens = None + else: # Training + batch_size, num_caps_per_image = gt_text_tokens.shape[:2] + assert (num_caps_per_image == self.num_dense_outputs) or ( + self.streaming_feature_implementation == 'given_checkpoints') + text_tokens = gt_text_tokens.reshape( + batch_size * num_caps_per_image, + gt_text_tokens.shape[2], + ) # (batch_size, num_caps_per_image, max_cap_len) + visual_features = visual_features.reshape( + (batch_size * num_caps_per_image,) + visual_features.shape[2:]) + if context_tokens is not None: + context_tokens = context_tokens.reshape(-1, context_tokens.shape[-1]) + return text_tokens, visual_features, context_tokens + + def loss_function(self, outputs, batch): + """Additionally support different weights for each intermediate output. + + We assume that all ground truth tokens are positive, and gt <= 0 is padding. + + Args: + outputs: dict + 'text_outputs': + (batch_size * num_caps_per_image, max_cap_len, vocab_size) + batch: dict + 'text_tokens': (batch_size, num_caps_per_image, max_cap_len) + Returns: + loss: float + """ + text_outputs = outputs['text_outputs'] + gt_text = batch['label']['text_tokens'] + batch_size = gt_text.shape[0] + gt_text = gt_text.reshape( + gt_text.shape[0] * gt_text.shape[1], gt_text.shape[2], + ) # (batch_size * num_caps_per_image, max_cap_len) + text_outputs = text_outputs[:, :-1] # Move gt 1 word to the right. + gt_text = gt_text[:, 1:] # No need to predict BOS + # valid: (text_batch_size, max_cap_len - 1) + valid = (gt_text > 0).astype(jnp.float32) + if self.ignore_empty_data: + # Ignore samples with empty ground truth. + valid = (valid.astype(bool) & ( + gt_text[:, 0] != self.end_token_id)[:, None]).astype(jnp.float32) + # gt: (text_batch_size, max_cap_len - 1, vocab_size) + gt = jax.nn.one_hot(gt_text, self.vocab_size) + # customized label smoothing following GRiT + # https://github.com/JialianW/GRiT/blob/master/grit/modeling/text/ + # text_decoder.py#L668 + gt = gt * (1. - self.label_smooth) + ( + 1. - gt) * self.label_smooth / (self.vocab_size - 1) + # loss: (text_batch_size, max_cap_len - 1) + gt = jax.lax.stop_gradient(gt) + loss = optax.softmax_cross_entropy(text_outputs, gt) + if self.dense_outputs_weight: + assert len(self.dense_outputs_weight) == self.num_dense_outputs + loss_weights = jnp.broadcast_to( + jnp.asarray(self.dense_outputs_weight, jnp.float32)[None, :], + (batch_size, self.num_dense_outputs)).reshape(-1) + # (text_batch_size,) + loss = loss * loss_weights[:, None] # (text_batch_size, max_cap_len - 1) + loss_dict = {} + # TODO(zhouxy): Create a new DensecapModel class and move this code there. + if self.show_densecap_loss or self.loc_loss_weight >= 0.0: + thresh = self.vocab_size - self.num_bins + cap_idx = ((gt_text < thresh) & (valid > 0)).astype(jnp.float32) + loc_idx = ((gt_text >= thresh) & (valid > 0)).astype(jnp.float32) + loss_dict['cap_loss'] = (loss * cap_idx).sum() / (cap_idx.sum() + 1e-8) + loss_dict['loc_loss'] = (loss * loc_idx).sum() / (loc_idx.sum() + 1e-8) + loss_dict['num_cap_tokens'] = cap_idx.sum() / cap_idx.shape[0] + loss_dict['num_loc_tokens'] = loc_idx.sum() / loc_idx.shape[0] + loss = (loss * valid).sum() / (valid.sum() + 1e-8) + if self.loc_loss_weight >= 0.0: + loss = loss_dict['cap_loss'] + ( + loss_dict['loc_loss'] * self.loc_loss_weight) + loss_dict['total_loss'] = loss + return loss, loss_dict + + +class DenseStreamingCaptioningModel(elcap_model.CaptioningModel): + """Scenic Model Wrapper.""" + + def get_dict_from_config(self): + config_dict = super().get_dict_from_config() + config_dict.update(dict( + num_dense_outputs=self.config.model.get('num_dense_outputs', -1), + streaming_buffer_size=self.config.model.get( + 'streaming_buffer_size', -1), + streaming_method=self.config.model.get('streaming_method', 'none'), + ema_decay=self.config.model.get('ema_decay', 0.9), + early_segments_as_context=self.config.model.get( + 'early_segments_as_context', True), + normalize_early_timestamps=self.config.model.get( + 'normalize_early_timestamps', False), + copy_context=self.config.model.get('copy_context', False), + dense_outputs_weight=self.config.model.get('dense_outputs_weight', ()), + remove_segments_from_wrong_checkpoint=self.config.model.get( + 'remove_segments_from_wrong_checkpoint', False), + streaming_feature_implementation=self.config.model.get( + 'streaming_feature_implementation', 'fixed_checkpoints'), + no_timestamp_in_context=self.config.model.get( + 'no_timestamp_in_context', False), + num_dense_outputs_test=self.config.model.get( + 'num_dense_outputs_test', -1), + kmeans_num_iters=self.config.model.get('kmeans_num_iters', -1), + ttm_output=self.config.model.get('ttm_output', 'output'), + ttm_config=self.config.model.get('ttm_config'), + )) + return config_dict + + def build_flax_model(self): + return DenseStreamingCaptioningFlaxModel(**self.get_dict_from_config()) diff --git a/scenic/projects/streaming_dvc/modeling/streaming_utils.py b/scenic/projects/streaming_dvc/modeling/streaming_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..79e35e2500e63d19a60259fb5becdb2791bc86b3 --- /dev/null +++ b/scenic/projects/streaming_dvc/modeling/streaming_utils.py @@ -0,0 +1,126 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utils for streaming model.""" + +import jax +import jax.numpy as jnp + + +def paired_cosine_distance(u, v): + """Compute pairwise cosine distance. + + Args: + u: (N, D) + v: (N, D) + Returns: + cosine_distance: (N,) + """ + u_norm = jnp.linalg.norm(u, axis=-1) # n + v_norm = jnp.linalg.norm(v, axis=-1) # n + dist = 1. - (u * v).sum(axis=-1) / (u_norm * v_norm + 1e-8) + return dist + + +def adjacent_merge(buffer, new_tokens, weights=None): + """Perform token merging. + + This is the original implementation in MovieChat only merges adjacent frames. + Reference: https://github.com/rese1f/MovieChat/blob/main/MovieChat/models/ + moviechat.py#L279 + + Args: + buffer: (N, D); The memory tokens. + new_tokens: (M, D); The incoming tokens. The tokens will be added to memory + one-by-one in order. + weights: (N, D) or None; if provided, compute the weighted average between + existing tokens and the new incoming token, so that exiting tokens which + are merged from many tokens have more weights. + Returns: + buffer: (N, D); The updated memory tokens. + """ + num_buffers = buffer.shape[0] + num_new_tokens = new_tokens.shape[0] + def body_fn(state): + current_buffer, current_weights, t = state + new_token = new_tokens[t] + all_tokens = jnp.concatenate((current_buffer, new_token[None]), axis=0) + dist = paired_cosine_distance(all_tokens[:-1], all_tokens[1:]) # (N,) + i = jnp.argmin(dist) # i < num_buffers + if current_weights is not None: + all_weights = jnp.concatenate( + (current_weights, jnp.ones((1,), dtype=jnp.int32)), axis=0) + merged_token = ( + all_tokens[i] * all_weights[i] + all_tokens[i + 1] * all_weights[ + i + 1]) / (all_weights[i] + all_weights[i + 1]) + all_tokens = all_tokens.at[i].set(merged_token) + all_tokens = all_tokens.at[i + 1].set(new_token) + all_weights = all_weights.at[i].set(all_weights[i] + all_weights[i + 1]) + all_weights = all_weights.at[i + 1].set(1) + return (all_tokens[:num_buffers], all_weights[:num_buffers], t + 1) + else: + merged_token = (all_tokens[i] + all_tokens[i + 1]) / 2 + all_tokens = all_tokens.at[i].set(merged_token) + all_tokens = all_tokens.at[i + 1].set(new_token) + return (all_tokens[:num_buffers], None, t + 1) + state = jax.lax.while_loop( + lambda s: s[2] < num_new_tokens, + body_fn, + (buffer, weights, 0), + ) + return jax.lax.stop_gradient(state[0]), jax.lax.stop_gradient(state[1]) + + +def kmeans(init_centers, data, weights, num_iters=1): + """Run kmeans on weighted data. + + + Args: + init_centers: array in shape (k, d); + data: array in shape (n, d); All data points. + weights: array in shape (n,); Weights of the data points. + num_iters: int; + Returns: + new_centers: (k, d) + counts: (k,), num_data assigned to each center + """ + k = init_centers.shape[0] + def step_fn(_, centers_counts): + centers, _ = centers_counts + # TODO(zhouxy): We might want to try other distance functions. + distances = jnp.linalg.norm( + data[:, None] - centers[None, :], axis=2) # (n, k) + assignments = jnp.argmin(distances, axis=1) # (n,) + weighted_data = data * weights[:, None] # (n, d) + one_hot_assignments = jax.nn.one_hot(assignments, k) # (n, k) + # NOTE: The following stop_gradient is optional, since both one_hot and + # argmin are not differentiable anyway. + # one_hot_assignments = jax.lax.stop_gradient(one_hot_assignments) + weighted_sums = jnp.dot( + one_hot_assignments.T, weighted_data) # (k, d) + counts = jnp.dot(one_hot_assignments.astype(jnp.int32).T, weights) # (k,) + # If the cluster is empty (which can happen from the second iteration), + # we just retain the original cluster center. + new_centers = weighted_sums / jnp.maximum(counts[:, None], 1) + new_centers = jnp.where( + jnp.broadcast_to(counts[:, None], new_centers.shape) == 0, + centers, new_centers) + + return new_centers, counts + new_centers, counts = jax.lax.fori_loop( + 0, num_iters, step_fn, + (init_centers, jnp.zeros((k,), dtype=jnp.int32))) + # new_centers = jax.lax.stop_gradient(new_centers) + # counts = jax.lax.stop_gradient(counts) + return new_centers, counts diff --git a/scenic/projects/streaming_dvc/modeling/text_decoder.py b/scenic/projects/streaming_dvc/modeling/text_decoder.py new file mode 100644 index 0000000000000000000000000000000000000000..daa9afe09ad2595485ee3e100edc38d7967427e9 --- /dev/null +++ b/scenic/projects/streaming_dvc/modeling/text_decoder.py @@ -0,0 +1,490 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Auto-regressive text decoder in GIT paper. + +GIT: A Generative Image-to-text Transformer for Vision and Language. Wang et al. + +arXiv: https://arxiv.org/abs/2205.14100 + +reference torch implementation: +https://github.com/microsoft/GenerativeImage2Text/blob/main/ +generativeimage2text/layers/decoder.py + +""" + +from flax import linen as nn +import jax +import jax.numpy as jnp + +from scenic.model_lib.layers import nn_layers + +NEG_INF = float('-inf') + + +class BertSelfAttention(nn.Module): + """Bert layer self attention.""" + + num_heads: int = 12 + hidden_size: int = 768 + attention_dropout: float = 0.1 + + @nn.compact + def __call__( + self, input_tensor, attention_mask, train=False): + # input_tensor: (batch_size, tot_len, hidden_size) + # attention_mask: (1, 1, tot_len, tot_len): NEG_INF to mask entry out. + q = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='query')(input_tensor) + k = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='key')(input_tensor) + v = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='value')(input_tensor) + + head_dim = self.hidden_size // self.num_heads + transpose = lambda x: x.reshape( # pylint: disable=g-long-lambda + x.shape[0], x.shape[1], self.num_heads, head_dim).transpose(0, 2, 1, 3) + q = transpose(q) + k = transpose(k) + v = transpose(v) # (batch_size, num_heads, tot_len, head_dim) + attention_scores = (q * (head_dim ** -0.5)) @ k.transpose( + 0, 1, 3, 2) # (batch_size, num_heads, tot_len, tot_len) + attention_scores = attention_scores + attention_mask + attention_scores = jax.nn.softmax(attention_scores, axis=-1) + attention_scores = nn.Dropout(self.attention_dropout)( + attention_scores, deterministic=not train) + out = (attention_scores @ v).transpose(0, 2, 1, 3).reshape( + v.shape[0], v.shape[2], self.hidden_size) + return out + + +class BertSelfOutput(nn.Module): + """Bert layer self output.""" + + hidden_size: int = 768 + hidden_dropout: float = 0.1 + stochastic_depth: float = 0.0 + + @nn.compact + def __call__(self, hidden_states, input_tensor, train=False): + hidden_states = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='dense')(hidden_states) + hidden_states = nn.Dropout(self.hidden_dropout)( + hidden_states, deterministic=not train) + hidden_states = nn_layers.StochasticDepth(self.stochastic_depth)( + hidden_states, deterministic=not train) + hidden_states = hidden_states + input_tensor + hidden_states = nn.LayerNorm( + epsilon=1e-5, name='LayerNorm')(hidden_states) + return hidden_states + + +class BertAttention(nn.Module): + """Bert layer attention.""" + hidden_size: int = 768 + num_heads: int = 12 + dropout: float = 0.1 + attention_dropout: float = 0.1 + stochastic_depth: float = 0.0 + + @nn.compact + def __call__( + self, input_tensor, attention_mask, train=False): + self_outputs = BertSelfAttention( + num_heads=self.num_heads, + hidden_size=self.hidden_size, + attention_dropout=self.attention_dropout, + name='self')( + input_tensor, attention_mask, train=train, + ) # (batch_size, tot_len, hidden_size) + attention_output = BertSelfOutput( + hidden_size=self.hidden_size, + hidden_dropout=self.dropout, + stochastic_depth=self.stochastic_depth, + name='output')( + self_outputs, input_tensor, train=train, + ) # (batch_size, tot_len, hidden_size) + return attention_output + + +class BertIntermediate(nn.Module): + """Bert layer intermediate.""" + + intermediate_size: int = 768 * 4 + approximate_gelu: bool = False + + @nn.compact + def __call__( + self, hidden_states, train=False): + hidden_states = nn.Dense( + self.intermediate_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='dense')(hidden_states) + hidden_states = nn.gelu(hidden_states, approximate=self.approximate_gelu) + return hidden_states + + +class BertOutput(nn.Module): + """Bert layer output.""" + + hidden_size: int = 768 + hidden_dropout: float = 0.1 + stochastic_depth: float = 0.0 + + @nn.compact + def __call__( + self, hidden_states, input_tensor, train=False): + hidden_states = nn.Dense( + self.hidden_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='dense')(hidden_states) + hidden_states = nn.Dropout(self.hidden_dropout)( + hidden_states, deterministic=not train) + hidden_states = nn_layers.StochasticDepth(self.stochastic_depth)( + hidden_states, deterministic=not train) + hidden_states = hidden_states + input_tensor + hidden_states = nn.LayerNorm( + epsilon=1e-12, name='LayerNorm')( + hidden_states) # eps following official implementation. + return hidden_states + + +class BertLayer(nn.Module): + """GIT encoder Layer.""" + hidden_size: int = 768 + num_heads: int = 12 + dropout: float = 0.1 + attention_dropout: float = 0.1 + stochastic_depth: float = 0.0 + approximate_gelu: bool = False + + @nn.compact + def __call__( + self, hidden_states, attention_mask, train=False): + """Forward layer. + + Args: + hidden_states: (batch_size, tot_len, hidden_size). + attention_mask: (1, 1, tot_len, tot_len). + train: bool. + Returns: + hidden_states: (batch_size, tot_len, hidden_size). + """ + attention_outputs = BertAttention( + num_heads=self.num_heads, + hidden_size=self.hidden_size, + dropout=self.dropout, + attention_dropout=self.attention_dropout, + stochastic_depth=self.stochastic_depth, + name='attention')( + hidden_states, attention_mask, train=train, + ) # (batch_size, tot_len, hidden_size) + intermediate_output = BertIntermediate( + intermediate_size=self.hidden_size * 4, + approximate_gelu=self.approximate_gelu, + name='intermediate')( + attention_outputs, train=train, + ) # (batch_size, tot_len, intermediate_size) + layer_output = BertOutput( + hidden_size=self.hidden_size, + hidden_dropout=self.dropout, + stochastic_depth=self.stochastic_depth, + name='output')( + intermediate_output, attention_outputs, train=train, + ) # (batch_size, tot_len, hidden_size) + return layer_output + + +class BertEncoder(nn.Module): + """GIT Encoder.""" + num_hidden_layers: int = 6 + hidden_size: int = 768 + num_heads: int = 12 + stochastic_depth: float = 0.0 + dropout: float = 0.1 + attention_dropout: float = 0.1 + approximate_gelu: bool = False + + @nn.compact + def __call__( + self, hidden_states, attention_mask, train=False): + """forward encoder. + + Args: + hidden_states: (batch_size, tot_len, hidden_size). + attention_mask: (1, 1, tot_len, tot_len). + train: bool. + Returns: + hidden_states: (batch_size, tot_len, hidden_size). + """ + assert self.stochastic_depth >= 0.0 and self.stochastic_depth < 1.0 + assert self.dropout >= 0.0 and self.dropout < 1.0 + assert self.attention_dropout >= 0.0 and self.attention_dropout < 1.0 + + for i in range(self.num_hidden_layers): + stochastic_depth_layer = ( + i / max(self.num_hidden_layers - 1, 1)) * self.stochastic_depth + hidden_states = BertLayer( + hidden_size=self.hidden_size, + num_heads=self.num_heads, + stochastic_depth=stochastic_depth_layer, + dropout=self.dropout, + attention_dropout=self.attention_dropout, + approximate_gelu=self.approximate_gelu, + name=f'layer.{i}', + )(hidden_states, attention_mask, train=train) + return hidden_states + + +class BertEncoderAsDecoder(nn.Module): + """GIT Decoder.""" + + num_hidden_layers: int = 6 + hidden_size: int = 768 + num_heads: int = 12 + stochastic_depth: float = 0.0 + dropout: float = 0.1 + attention_dropout: float = 0.1 + approximate_gelu: bool = False + + @nn.compact + def __call__( + self, tgt, memory, tgt_mask=None, + memory_key_padding_mask=None, train=False, return_visual_feature=False): + """forward transformer. + + Args: + tgt: (batch_size, cap_len, hidden_size) + memory: (batch_size, feat_len, hidden_size) + tgt_mask: (cap_len, cap_len) + memory_key_padding_mask: (batch_size, feat_len). Padded is 1, valid is 0. + train: bool + return_visual_feature: bool + Returns: + result: (batch_size, cap_len, hidden_size) + """ + cap_len = tgt.shape[1] + feat_len = memory.shape[1] + hidden_states = jnp.concatenate( + [memory, tgt], axis=1 + ) # (batch_size, feat_len + cap_len, hidden_size) + top_left = jnp.zeros((feat_len, feat_len), dtype=jnp.float32) + top_right = jnp.full((feat_len, cap_len), NEG_INF, dtype=jnp.float32) + bottom_left = jnp.zeros((cap_len, feat_len), dtype=jnp.float32) + left = jnp.concatenate([top_left, bottom_left], axis=0) + right = jnp.concatenate([top_right, tgt_mask], axis=0) + + full_attention_mask = jnp.concatenate( + [left, right], + axis=1)[None] # (1, feat_len + cap_len, feat_len + cap_len) + if memory_key_padding_mask is None: + memory_key_padding_mask = jnp.full( + (1, memory.shape[1]), False, dtype=bool, + ) # (1, feat_len) + else: + full_attention_mask = jnp.broadcast_to( + full_attention_mask, + (memory_key_padding_mask.shape[0], + full_attention_mask.shape[1], full_attention_mask.shape[2])) + zero_negative_infinity = jnp.zeros_like( + memory_key_padding_mask, dtype=tgt.dtype) # (1, feat_len) + zero_negative_infinity = jnp.where( + memory_key_padding_mask, NEG_INF, zero_negative_infinity) + origin_left = full_attention_mask[:, :, :feat_len] + update = zero_negative_infinity[:, None, :] # (1, 1, feat_len) + full_attention_mask = jnp.concatenate( + [origin_left + update, full_attention_mask[:, :, feat_len:]], + axis=2) + full_attention_mask = full_attention_mask[ + :, None, :, :] # (1, 1, feat_len + cap_len, feat_len + cap_len) + + result = BertEncoder( + num_hidden_layers=self.num_hidden_layers, + hidden_size=self.hidden_size, + num_heads=self.num_heads, + stochastic_depth=self.stochastic_depth, + dropout=self.dropout, + attention_dropout=self.attention_dropout, + approximate_gelu=self.approximate_gelu, + name='encoder')( + hidden_states=hidden_states, + attention_mask=full_attention_mask, + train=train, + ) # (batch_size, feat_len + cap_len, hidden_size) + if not return_visual_feature: + result = result[:, feat_len:] # (batch_size, cap_len, hidden_size) + return result + + +class WordAndPositionalEmbedding(nn.Module): + """GIT embedding layer.""" + vocab_size: int = 30522 + hidden_size: int = 768 + max_caption_length: int = 1024 + dropout_prob: float = 0.1 + + @nn.compact + def __call__(self, x, train=False): + """forward embedding. + + Args: + x: (batch_size, caption_length). + train: bool. + Returns: + embeddings: (batch_size, max_caption_length, hidden_size). + """ + position_indices = jnp.arange( + self.max_caption_length)[None] # 1 x max_caption_length + word_embeddings = nn.Embed( + self.vocab_size, self.hidden_size, + embedding_init=nn.initializers.normal(stddev=0.02), + name='words')(x) + position_embeddings = nn.Embed( + self.max_caption_length, self.hidden_size, + embedding_init=nn.initializers.normal(stddev=0.02), + name='positions')(position_indices) + embeddings = nn.LayerNorm(epsilon=1e-8, name='layer_norm')( + word_embeddings + position_embeddings[:, :x.shape[1]] + ) # eps checked. + embeddings = nn.Dropout(self.dropout_prob, name='dropout')( + embeddings, deterministic=not train) + return embeddings + + +class TransformerDecoderTextualHead(nn.Module): + """TransformerDecoderTextualHead of GIT.""" + vocab_size: int = 30522 + hidden_size: int = 768 + num_heads: int = 12 + max_caption_length: int = 1024 + num_hidden_layers: int = 6 + stochastic_depth: float = 0.0 + dropout: float = 0.1 + attention_dropout: float = 0.1 + approximate_gelu: bool = False + + def setup(self): + self.embedding = WordAndPositionalEmbedding( + vocab_size=self.vocab_size, + hidden_size=self.hidden_size, + max_caption_length=self.max_caption_length, + name='embedding') + + def concate_context_tokens_to_visual( + self, visual_features, context_tokens, train=False): + """Concatenate context tokens (e.g., questions in QA) to visual tokens. + + Args: + visual_features: (batch_size, feature_length, object_feat_size). + context_tokens: (batch_size, context_length) + train: bool + Returns: + visual_features: (batch_size, feature_length+context_length, hidden_size) + feat_valid_mask: (batch_size, feature_length+context_length): bool array. + if the visual_features is padded (to handle different context_lengths). + """ + feat_valid_mask = jnp.ones( + (visual_features.shape[:2]), + dtype=bool) # (text_bs, num_tokens) + context_tokens = context_tokens.reshape( + -1, context_tokens.shape[-1]) # (text_bs, num_context_tokens) + context_features = self.embedding(context_tokens, train=train) + + # Note context_tokens do not have BOS or EOS. All padded tokens are 0. + context_valid_mask = context_tokens > 0 # (text_bs, num_context_tokens) + feat_valid_mask = jnp.concatenate( + [feat_valid_mask, context_valid_mask], + axis=1) # (text_bs, num_tot_tokens) + visual_features = jnp.concatenate( + [visual_features, context_features], + axis=1) # (text_bs, num_tot_tokens, dim) + return visual_features, feat_valid_mask + + @nn.compact + def __call__( + self, text_tokens, visual_features, + context_tokens=None, train=False, + return_feat=False, return_visual_feature=False): + """Generate logits of a single word. + + Args: + text_tokens: (batch_size, caption_length). + visual_features: (batch_size, feature_length, feat_size). + context_tokens: (batch_size, context_length). + train: bool. + return_feat: bool. If true, return the feature before vocabulary. + return_visual_feature: bool. If true, in addition return the outputs from + visual features. + Returns: + output_logits: (batch_size, caption_length, vocab_size). + trans_out: (batch_size, caption_length, hidden_size) or + (batch_size, feature_length + caption_length, hidden_size) when + return_visual_feature is True. + """ + x = nn.Dense( + self.hidden_size, name='visual_projection.0', + kernel_init=nn.initializers.normal(stddev=0.02))( + visual_features) # (batch_size, feature_length, hidden_size) + x = nn.LayerNorm(epsilon=1e-5, name='visual_projection.1')(x) + + memory_key_padding_mask = None + if context_tokens is not None: + x, hidden_valid_mask = self.concate_context_tokens_to_visual( + x, context_tokens, train=train) + memory_key_padding_mask = ~hidden_valid_mask + + text_embeddings = self.embedding( + text_tokens, train=train, + ) # (batch_size, max_caption_length, hidden_size) + + caption_length = text_tokens.shape[1] + uni_mask_zero_neg = self._generate_future_mask( + caption_length) # (caption_length, caption_length) + trans_out = BertEncoderAsDecoder( + num_hidden_layers=self.num_hidden_layers, + hidden_size=self.hidden_size, + num_heads=self.num_heads, + stochastic_depth=self.stochastic_depth, + attention_dropout=self.attention_dropout, + dropout=self.dropout, + approximate_gelu=self.approximate_gelu, + name='transformer')( + text_embeddings, x, + memory_key_padding_mask=memory_key_padding_mask, + tgt_mask=uni_mask_zero_neg, train=train, + return_visual_feature=return_visual_feature, + ) # (batch_size, caption_length, hidden_size) + if return_feat: + return trans_out + + output_logits = nn.Dense( + self.vocab_size, + kernel_init=nn.initializers.normal(stddev=0.02), + name='output')( + trans_out) # (batch_size, caption_length, vocab_size) + return output_logits + + def _generate_future_mask(self, size): + """Generate attention mask.""" + mask = jnp.triu(jnp.ones((size, size), jnp.float32), k=1) + mask = jnp.where(mask > 0, NEG_INF, 0) + return mask diff --git a/scenic/projects/streaming_dvc/modeling/vid2seq_model.py b/scenic/projects/streaming_dvc/modeling/vid2seq_model.py new file mode 100644 index 0000000000000000000000000000000000000000..14bf68a7564c55a63c45cf587853288d32c071f5 --- /dev/null +++ b/scenic/projects/streaming_dvc/modeling/vid2seq_model.py @@ -0,0 +1,534 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Vid2Seq model. + +Forked from +https://github.com/google-research/scenic/blob/main/scenic/projects/ +vid2seq/models.py + +Add decoding-point mechanism. +""" +import dataclasses +from typing import Any, Dict, Optional + +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import optax +from scenic.model_lib.base_models import base_model +from scenic.projects.baselines import vit +from scenic.projects.t5 import layers as t5_model +from scenic.projects.t5 import model as t5_pretrained +from t5x import decoding + +beam_search = decoding.beam_search +temperature_sample = decoding.temperature_sample + +Batch = Dict[str, jnp.ndarray] +PyTree = Any +SP_VOCAB_SIZE = 32128 + + +class CatEncoder(nn.Module): + """Concat ViT temporal encodings with T5 text encodings.""" + enc_type: str + enc_config: ml_collections.ConfigDict + embedder: nn.Module + num_bins: int + num_dense_outputs: int = -1 + num_dense_outputs_test: int = -1 + + def setup(self): + self.visual_encoder = vit.Encoder( + mlp_dim=self.enc_config.get('dim', 2048), + num_layers=self.enc_config.get('layers', 12), + num_heads=self.enc_config.get('heads', 12), + positional_embedding=self.enc_config.get('pos_embed', 'learned_1d'), + dropout_rate=self.enc_config.get('dropout_rate', 0.), + attention_dropout_rate=self.enc_config.get('dropout_rate', 0.), + stochastic_depth=self.enc_config.get('stochastic_depth', 0.)) + enc_cfg = self.enc_config.get('pretrained_config', 't5_1_1_base') + assert enc_cfg == 't5_1_1_base', enc_cfg + t5_config = t5_pretrained.CONFIGS[enc_cfg] + t5_config['dropout_rate'] = self.enc_config.get('t5_dropout_rate', 0.) + t5_config['vocab_size'] = SP_VOCAB_SIZE + self.num_bins + self.t5_encoder = t5_model.T5Encoder( + **t5_config, + shared_embedding=self.embedder, + name='video_encoder') # Actually ASR encoder. + self.proj_dim = self.enc_config.get('proj_dim', 768) + + def __call__( + self, features, encoder_input_tokens=None, checkpoint_inds=None, + train=False): + """Forward model. + + Args: + features: (batch_size, num_tokens, dim) + encoder_input_tokens: (batch_size, max_cap_len) for ASR or + (batch_size, num_caps_per_image, max_cap_len) for prefix. + checkpoint_inds: (batch_size, num_caps_per_image) or None + train: bool + Returns: + if num_dense_outputs == -1: + encoded: (batch_size, num_tot_tokens, dim) + cat_mask: (batch_size, num_tot_tokens) + else: + encoded: (batch_size, num_dense_outputs, num_tot_tokens, dim) + cat_mask: (batch_size, num_dense_outputs, num_tot_tokens) + """ + visual_embeddings = self.encode_visual(features, checkpoint_inds, train) + visual_mask = jnp.ones(visual_embeddings.shape[:-1]) > 0 + if encoder_input_tokens is not None: # ASR or prefix + text_feature = self.encode_text(encoder_input_tokens, train) + cat_feature = jnp.concatenate([visual_embeddings, text_feature], axis=-2) + cat_mask = jnp.concatenate( + [visual_mask, encoder_input_tokens > 0], axis=-1) + else: + cat_feature = visual_embeddings + cat_mask = visual_mask + return {'encoded': cat_feature, 'mask': cat_mask} + + def encode_visual(self, features, checkpoint_inds, train=False): + """Encode visual features. + + Args: + features: (batch_size, num_tokens, dim) + checkpoint_inds: (batch_size, num_caps_per_image) or None + train: bool + Returns: + (batch_size, num_tot_tokens, dim) or + (batch_size, num_dense_outputs, num_tot_tokens, dim) + """ + if self.num_dense_outputs > 0: + batch_size, num_frames, dim = features.shape + num_tokens = num_frames + # NOTE: currently we duplicate features to fill the full num_tokens at + # each time stamp. For example, at time 2, we will fill the 100-tokens + # feature as [0] * 50 + [1] * 50. + # This is done as there is a subsequent transformer which expects a fixed + # number (num_frames) of tokens. + # TODO(zhouxy): a better option might be bilinear interpolation. + inds = (0.5 + jnp.linspace( + 0, jnp.arange(num_frames), + num_frames, endpoint=True, + dtype=jnp.float32)).astype(jnp.int32) # (num_frames, num_tokens) + features_expanded = jnp.broadcast_to( + features[:, None], + (batch_size, num_frames, num_tokens, dim)) + # features_expanded[:, t] is now the resized features until time t. + streaming_features_per_frame = jnp.take_along_axis( + features_expanded, + inds[None, :, :, None], + axis=2) # (batch_size, num_frames, num_tokens, dim) + if train: + num_dense_outputs = self.num_dense_outputs + features = jnp.take_along_axis( + streaming_features_per_frame, + checkpoint_inds[:, :, None, None], + axis=1) # (batch_size, num_caps_per_image, num_tokens, dim) + else: + num_dense_outputs = self.num_dense_outputs_test + checkpoint_stride = num_frames // num_dense_outputs + features = streaming_features_per_frame[ + :, (jnp.arange(num_dense_outputs) + 1) * checkpoint_stride - 1] + features = features.reshape( + batch_size * num_dense_outputs, num_tokens, dim) + + visual_embeddings = self.visual_encoder( + features, train=train, + ) # (batch_size * num_dense_outputs, num_tokens, dim) + + visual_embeddings = visual_embeddings.reshape( + batch_size, num_dense_outputs, num_tokens, dim) + else: + visual_embeddings = self.visual_encoder( + features, train=train, + ) # (batch_size, num_tokens, dim) or + return visual_embeddings + + def encode_text(self, encoder_input_tokens, train=False): + """Encode text. + + Args: + encoder_input_tokens: (batch_size, max_cap_len) for ASR or + (batch_size, num_caps_per_image, max_cap_len) for prefix. + train: bool + Returns: + x: (batch_size, max_cap_len, dim) for ASR or + (batch_size, num_caps_per_image, max_cap_len, dim) for prefix. + """ + is_prefix = len(encoder_input_tokens.shape) == 3 + if is_prefix: # prefix + batch_size, num_caps_per_image, max_cap_len = encoder_input_tokens.shape + # Reshape to match dimention for the text encoder + encoder_input_tokens_flatten = encoder_input_tokens.reshape( + batch_size * num_caps_per_image, max_cap_len) + x = self.t5_encoder( + encoder_input_tokens=encoder_input_tokens_flatten, + enable_dropout=train) + # Reshape back + x = x.reshape( + batch_size, num_caps_per_image, max_cap_len, self.proj_dim) + else: # ASR + x = self.t5_encoder( + encoder_input_tokens=encoder_input_tokens, + enable_dropout=train) + return x + + +class Vid2SeqDenseVideoCaptioningModule(nn.Module): + """Dense video captioning module that encodes a video and generate tokens.""" + max_caption_length: int = 40 + begin_token_id: int = 0 + end_token_id: int = 1 + vocab_size: int = SP_VOCAB_SIZE + label_smooth: float = 0.1 + label_smooth_bias: int = -1 + ignore_empty_data: bool = True + num_bins: int = 100 + decode_method: str = 'beam' + decode_beam_size: int = 4 + decode_brevity_penalty_alpha: float = 0.6 + decode_feature_key: str = 'visual_features' + num_dense_outputs: int = -1 + num_dense_outputs_test: int = -1 + no_timestamp_in_context: bool = True + normalize_early_timestamps: bool = True + early_segments_as_context: bool = False + remove_segments_from_wrong_checkpoint: bool = False + copy_context: bool = False + config: ml_collections.ConfigDict = dataclasses.field( + default_factory=ml_collections.ConfigDict) + + def _get_encoder(self, + enc_type: str, + enc_config: ml_collections.ConfigDict, + embedder: Optional[nn.Module] = None, + num_bins: int = 0): + assert enc_type == 'cat_encoder', enc_type + encoder = CatEncoder( + enc_type=enc_type, + enc_config=enc_config, + embedder=embedder, + num_bins=num_bins, + num_dense_outputs=self.num_dense_outputs, + num_dense_outputs_test=self.num_dense_outputs_test, + ) + return encoder + + def _get_decoder(self, + dec_type: str, + dec_config: ml_collections.ConfigDict, + num_bins: int): + assert dec_type == 't5_decoder', dec_type + t5_config = t5_pretrained.CONFIGS[dec_config.pretrained_config] + t5_config['dropout_rate'] = dec_config.dropout_rate + t5_config['logits_via_embedding'] = dec_config.logits_via_embedding + t5_config['vocab_size'] = SP_VOCAB_SIZE + num_bins + decoder_embedder = t5_model.t5_layers.Embed( + num_embeddings=t5_config['vocab_size'], + features=t5_config['emb_dim'], + dtype=t5_config['dtype'], + attend_dtype=jnp.float32, # For logit training stability. + embedding_init=nn.initializers.normal(stddev=1.0), + one_hot=True, + name='shared_decoder_token_embedder') + decoder = t5_model.T5Decoder( + **t5_config, + shared_embedding=decoder_embedder, + name='text_decoder') + return (decoder_embedder, decoder) + + def setup(self): + decoder_type = 't5_decoder' + decoder_config = self.config.decoder.get(decoder_type) + num_bins = self.num_bins # self.config.decoder.get('num_bins') + self.encoder_type = self.config.encoder.get('encoder_type') + encoder_type = 'cat_encoder' + encoder_config = self.config.encoder.get(encoder_type) + self.embedder, self.decoder = self._get_decoder( + decoder_type, + decoder_config, + num_bins) + + self.encoder = self._get_encoder( + self.encoder_type, + encoder_config, + self.embedder, + num_bins) + + def decode( + self, text_tokens, encoded, encoder_mask, train=False): + """Forward decoder. + + Args: + text_tokens: (batch_size, max_caption_length) + encoded: (batch_size, num_tot_tokens, dim) + encoder_mask: (batch_size, num_tot_tokens) + train: bool + Returns: + logits: (batch_size, num_tot_tokens, vocab_size). + """ + decoder_target = jnp.concatenate( + [text_tokens[:, 1:], + jnp.zeros((text_tokens.shape[0], 1), dtype=jnp.int32)], + axis=1) + logits = self.decoder( + encoded, + encoder_mask, + text_tokens, + decoder_target, + enable_dropout=train, + decode=False) + return logits + + def __call__( + self, + images=None, + image_features=None, + context_tokens=None, + gt_text_tokens=None, + checkpoint_inds=None, + preprocess=True, train=False, debug=False): + """Forward model. + + Args: + images: must be None. + image_features: (batch_size, num_frames, dim) + context_tokens: (batch_size, num_caps_per_image, max_context_len) or None. + The output text from previous decoding point. Note this can NOT be ASR. + gt_text_tokens: (batch_size, num_caps_per_image, max_cap_len) + checkpoint_inds: (batch_size, num_caps_per_image) or None + preprocess: bool; unused. + train: bool + debug: bool + Returns: + if train == True, return + 'text_outputs': (text_batch_size, max_cap_len, vocab_size) + if train == False, return + 'visual_features': (text_batch_size, feature_len, feature_dim) + 'begin_tokens': (batch_size, num_caps_per_image, max_cap_len) + 'context_tokens': (text_batch_size, max_cap_len) + 'text_outputs': (text_batch_size, max_cap_len, vocab_size) + """ + del images + assert image_features is not None + del preprocess + visual_features = self.encoder.encode_visual( + image_features, + checkpoint_inds=checkpoint_inds, + train=train) # (batch_size, num_tot_tokens, dim) + # Here num_tot_tokens = num_frames + max_context_len, + # when self.num_dense_outputs > 0, visual_features will be of shape + # (batch_size, num_dense_outputs, num_tot_tokens, dim) + + text_tokens, encoded, context_tokens = ( + self.get_text_tokens_and_pad_visual_features( + visual_features, gt_text_tokens, context_tokens)) + # text_tokens: (text_batch_size, max_cap_len) + # encoded: (text_batch_size, num_tot_tokens, proj_dim) + # context_tokens: (text_batch_size, max_context_len) + # text_batch_size = batch_size * num_caps_per_image + # when self.num_dense_outputs > 0, training shape is the same. For + # evaluation, encoded will be in shape + # (batch_size, num_dense_outputs, num_tot_tokens, dim) + encoder_mask = jnp.ones(encoded.shape[:-1]) > 0 + + if context_tokens is not None: + context_features = self.encoder.encode_text(context_tokens, train=train) + encoded = jnp.concatenate([encoded, context_features], axis=-2) + encoder_mask = jnp.concatenate( + [encoder_mask, context_tokens > 0], axis=-1) + + if train: + text_outputs = self.decode( + text_tokens, + encoded, + encoder_mask, + train=train, + ) # (text_batch_size, max_cap_len, vocab_size) + ret = {'text_outputs': text_outputs} + else: + text_outputs = self.decode( + text_tokens, + encoded if self.num_dense_outputs < 0 else encoded[:, 0], + encoder_mask if self.num_dense_outputs < 0 else encoder_mask[:, 0], + train=train, + ) # (text_batch_size, max_cap_len, vocab_size) + ret = { + 'visual_features': encoded, + 'begin_tokens': text_tokens, + 'context_tokens': context_tokens, + 'text_outputs': text_outputs, + } + return ret + + def decode_text( + self, text_tokens, visual_features, + context_tokens=None, return_feat=False): + """Forward one step in the auto-regressive decoding. + + Args: + text_tokens: (batch_size, caption_length). + visual_features: (batch_size, feature_length, feat_size). + context_tokens: (batch_size, context_length) or None + return_feat: bool; Unused, but kept to keep a consistent API with other + models. + Returns: + output_logits: (batch_size, caption_length, vocab_size). + """ + del return_feat + encoder_mask = jnp.ones(visual_features.shape[:-1]) > 0 + # TODO(zhouxy): the behaviour of context_tokens can be optimized in + # encoder-decoder architecture in all our codebase. Currently we rerun + # encoder at every decoding step (if no xla optimization). + # Also, we do not cache the decoder outputs either, which will slow down + # generation of long sequences. + if context_tokens is not None: + context_features = self.encoder.encode_text(context_tokens, train=False) + visual_features = jnp.concatenate( + [visual_features, context_features], axis=-2) + encoder_mask = jnp.concatenate( + [encoder_mask, context_tokens > 0], axis=-1) + return self.decode(text_tokens, visual_features, encoder_mask, train=False) + + def get_text_tokens_and_pad_visual_features( + self, visual_features, gt_text_tokens, context_tokens=None): + """Get inputs to the text decoder. + + In evaluation, we create the zero-padded text-token with the first token + being BOS. In training, we handle multiple caption annotations for a + video and repeat the visual_feature to align with that. + + This is mostly the same as the GIT model, except for the initialization + behaviour noted below. + + Args: + visual_features: (batch_size, num_tokens, dim) or + (batch_size, num_dense_outputs, num_tokens, dim) + gt_text_tokens: (batch_size, num_caps_per_image, max_cap_len) or None. + context_tokens: (batch_size, num_caps_per_image, max_cap_len) or None. + Returns: + text_tokens: (text_batch_size, max_cap_len). text_batch_size = (batch_size + * num_caps_per_image) + visual_features: (text_batch_size, num_tokens, dim) or + (batch_size, num_dense_outputs, num_tokens, dim) + context_tokens: (text_batch_size, num_tokens) or None. + """ + if gt_text_tokens is None: # Evaluation, create BOS tokens. + text_tokens = jnp.full( + (visual_features.shape[0], self.max_caption_length), + self.end_token_id, dtype=jnp.int32) # (B, max_cap_len) + text_tokens = text_tokens.at[:, 0].set( + self.begin_token_id) # (batch_size, max_cap_len) + # NOTE: We don't delete context_tokens here, as we need it to initialize + # the text encoder weights during initialization. + else: # Training + batch_size, num_caps_per_image = gt_text_tokens.shape[:2] + text_tokens = gt_text_tokens.reshape( + batch_size * num_caps_per_image, + gt_text_tokens.shape[2], + ) # (batch_size, num_caps_per_image, max_cap_len) + num_tokens, dim = visual_features.shape[-2:] + if len(visual_features.shape) == 3: # no dense_outputs + visual_features = jnp.broadcast_to( + visual_features[:, None], + (batch_size, num_caps_per_image, num_tokens, dim)) + visual_features = visual_features.reshape( + batch_size * num_caps_per_image, num_tokens, dim) + if context_tokens is not None: + context_tokens = context_tokens.reshape( + batch_size * num_caps_per_image, context_tokens.shape[2]) + return text_tokens, visual_features, context_tokens + + def loss_function(self, outputs, batch): + """Text loss with label smoothing. + + This is exactly the same as traditional captioning. + + Args: + outputs: dict + 'text_outputs': + (batch_size * num_caps_per_image, max_cap_len, vocab_size) + batch: dict + 'text_tokens': (batch_size, num_caps_per_image, max_cap_len) + Returns: + loss: float + """ + text_outputs = outputs['text_outputs'] + gt_text = batch['label']['text_tokens'] + gt_text = gt_text.reshape( + gt_text.shape[0] * gt_text.shape[1], gt_text.shape[2], + ) # (batch_size * num_caps_per_image, max_cap_len) + text_outputs = text_outputs[:, :-1] # Move gt 1 word to the right. + gt_text = gt_text[:, 1:] # No need to predict BOS + # valid: (text_batch_size, max_cap_len - 1) + valid = (gt_text > 0).astype(jnp.float32) + if self.ignore_empty_data: + # Ignore samples with empty ground truth. + valid = (valid.astype(bool) & ( + gt_text[:, 0] != self.end_token_id)[:, None]).astype(jnp.float32) + # gt: (text_batch_size, max_cap_len - 1, vocab_size) + gt = jax.nn.one_hot(gt_text, self.vocab_size) + gt = gt * (1. - self.label_smooth) + ( + 1. - gt) * self.label_smooth / ( + self.vocab_size + self.label_smooth_bias) + # loss: (text_batch_size, max_cap_len - 1) + gt = jax.lax.stop_gradient(gt) + loss = optax.softmax_cross_entropy(text_outputs, gt) + loss_dict = {} + loss = (loss * valid).sum() / (valid.sum() + 1e-8) + loss_dict['total_loss'] = loss + return loss, loss_dict + + +class Vid2SeqModel(base_model.BaseModel): + """Scenic Model Wrapper.""" + + def get_dict_from_config(self): + return dict( + max_caption_length=self.config.model.get('max_caption_length', 256), + begin_token_id=self.config.model.get('begin_token_id', 0), + end_token_id=self.config.model.get('end_token_id', 1), + vocab_size=self.config.model.get('vocab_size', SP_VOCAB_SIZE), + label_smooth=self.config.model.get('label_smooth', 0.1), + label_smooth_bias=self.config.model.get('label_smooth_bias', -1), + ignore_empty_data=self.config.model.get('ignore_empty_data', True), + num_bins=self.config.model.get('num_bins', 100), + decode_method=self.config.model.get('decode_method', 'beam'), + decode_beam_size=self.config.model.get('decode_beam_size', 4), + decode_brevity_penalty_alpha=self.config.model.get( + 'decode_brevity_penalty_alpha', 0.6), + decode_feature_key=self.config.model.get( + 'decode_feature_key', 'visual_features'), + num_dense_outputs=self.config.model.get('num_dense_outputs', -1), + num_dense_outputs_test=self.config.model.get( + 'num_dense_outputs_test', -1), + no_timestamp_in_context=self.config.model.get( + 'no_timestamp_in_context', True), + normalize_early_timestamps=self.config.model.get( + 'normalize_early_timestamps', True), + early_segments_as_context=self.config.model.get( + 'early_segments_as_context', False), + config=self.config.model, + ) + + def build_flax_model(self): + return Vid2SeqDenseVideoCaptioningModule(**self.get_dict_from_config()) + + def loss_function(self, outputs, batch): + return self.flax_model.loss_function(outputs, batch) diff --git a/scenic/projects/streaming_dvc/modeling/vit.py b/scenic/projects/streaming_dvc/modeling/vit.py new file mode 100644 index 0000000000000000000000000000000000000000..21d71898dea89ec62fe574096e6d3219ea4b6f02 --- /dev/null +++ b/scenic/projects/streaming_dvc/modeling/vit.py @@ -0,0 +1,367 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""ViT implementation. + +Pytorch reference: https://github.com/microsoft/GenerativeImage2Text/blob/\ +main/generativeimage2text/layers/CLIP/model.py + +Compare to a plain ViT, this implementation uses quick_gelu, supports +configurable normalizations before/ after the transformer blocks, +and support layer-scale. + +""" + +import functools +from typing import Any + +import flax.linen as nn +import jax +import jax.numpy as jnp + +KERNEL_INIT = { + 'normal': nn.initializers.normal(stddev=0.02), +} + + +class Attention(nn.Module): + """Multi-head Attention block with relative position embeddings. + + Attributes: + dim (int): Number of input channels. + num_heads (int): Number of attention heads. + qkv_bias (bool: If True, add a learnable bias to query, key, value. + beit_like_qkv_bias (bool): no bias for k. + """ + dim: int + num_heads: int = 8 + qkv_bias: bool = True + beit_like_qkv_bias: bool = False + kernel_init: str = 'normal' + with_grid_tokens: bool = False + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x): + """Forward a block. + + Args: + x: if self.with_grid_tokens == False (default), x should be in shape + (batch_size, num_tokens, dim); + if self.with_grid_tokens == True, x should be in shape + (batch_size, height, width, dim); + Returns: + x: the same shape as the input. + """ + + batch, num_tokens, _ = x.shape + head_dim = self.dim // self.num_heads + if self.beit_like_qkv_bias: + q_bias = self.param( + 'q_bias', nn.initializers.zeros, (self.dim,)) + v_bias = self.param( + 'v_bias', nn.initializers.zeros, (self.dim,)) + k_bias = jnp.zeros((self.dim,), dtype=jnp.float32) + qkv_bias = jnp.concatenate([q_bias, k_bias, v_bias], axis=0) + qkv = nn.Dense( + self.dim * 3, use_bias=False, dtype=self.dtype, + kernel_init=KERNEL_INIT[self.kernel_init], name='qkv')( + x) # batch x height x width x 3dim + qkv = qkv + qkv_bias[None, None, :] + else: + qkv = nn.Dense(self.dim * 3, use_bias=self.qkv_bias, name='qkv')( + x) # batch x num_tokens x 3dim + qkv = qkv.reshape(batch, num_tokens, 3, self.num_heads, -1).transpose( + 2, 0, 3, 1, 4) # 3 x batch x num_heads x num_tokens x D + + qkv = qkv.reshape(3, batch * self.num_heads, num_tokens, -1) + q, k, v = qkv[0], qkv[1], qkv[2] # [batch * num_heads, num_tokens, D] + attn = (q * (head_dim ** -0.5)) @ k.transpose( + 0, 2, 1) # [batch * num_heads, num_tokens, num_tokens] + + attn = jax.nn.softmax(attn) + x = (attn @ v).reshape( + batch, self.num_heads, num_tokens, -1).transpose( + 0, 2, 1, 3).reshape(batch, num_tokens, -1) + + x = nn.Dense(self.dim, name='proj')(x) + return x + + +def quick_gelu(x: jnp.ndarray) -> jnp.ndarray: + return x * jax.nn.sigmoid(1.702 * x) + + +class Mlp(nn.Module): + """Multilayer perceptron.""" + + hidden_features: int + out_features: int + kernel_init: str = 'normal' + dtype: jnp.dtype = jnp.float32 + activation: str = 'quick_gelu' + + @nn.compact + def __call__(self, x): + x = nn.Dense( + self.hidden_features, dtype=self.dtype, + kernel_init=KERNEL_INIT[self.kernel_init], name='fc1')(x) + if self.activation == 'quick_gelu': + x = quick_gelu(x) + elif self.activation == 'gelu': + x = nn.gelu(x, approximate=False) + else: + raise NotImplementedError(self.activation) + x = nn.Dense( + self.out_features, dtype=self.dtype, + kernel_init=KERNEL_INIT[self.kernel_init], name='fc2')(x) + return x + + +class Block(nn.Module): + """Transformer blocks with support of window attention and residual blocks. + + Attributes: + dim (int): Number of input channels. + num_heads (int): Number of attention heads in each ViT block. + mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. + qkv_bias (bool): If True, add a learnable bias to query, key, value. + beit_like_qkv_bias (bool): no bias for k. + drop_path (float): Stochastic depth rate. + """ + dim: int + num_heads: int + mlp_ratio: float = 4.0 + qkv_bias: bool = True + beit_like_qkv_bias: bool = False + mlp_activation: str = 'quick_gelu' + drop_path: float = 0.0 + layer_scale_init_value: float = -1.0 + kernel_init: str = 'normal' + with_grid_tokens: bool = False + dtype: jnp.dtype = jnp.float32 + + def get_keep_pattern(self, + x: jnp.ndarray, + deterministic: bool): + """DropPath Layer.""" + if not deterministic and self.drop_path: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + drop_pattern = jax.random.bernoulli( + self.make_rng('dropout'), self.drop_path, shape).astype(self.dtype) + keep_pattern = (1. - drop_pattern) + if self.drop_path < 1.: + keep_pattern = keep_pattern / (1. - self.drop_path) + return keep_pattern + else: + return 1.0 + + @nn.compact + def __call__(self, x, train: bool = False): + shortcut = x + ln = functools.partial(nn.LayerNorm, epsilon=1e-6) + x = ln(name='norm1')(x) + + x = Attention( + self.dim, + num_heads=self.num_heads, + qkv_bias=self.qkv_bias, + beit_like_qkv_bias=self.beit_like_qkv_bias, + with_grid_tokens=self.with_grid_tokens, + name='attn')(x) + + if self.layer_scale_init_value > 0: + gamma_1 = self.param( + 'gamma_1', + nn.initializers.constant(self.layer_scale_init_value), + (self.dim)) + x = x * gamma_1[..., :] + x = shortcut + self.get_keep_pattern(x, not train) * x + + y = ln(name='norm2')(x) + y = Mlp( + int(self.dim * self.mlp_ratio), + self.dim, + kernel_init=self.kernel_init, + activation=self.mlp_activation, + dtype=self.dtype, + name='mlp')(y) + if self.layer_scale_init_value > 0: + gamma_2 = self.param( + 'gamma_2', + nn.initializers.constant(self.layer_scale_init_value), + (self.dim)) + y = y * gamma_2[..., :] + x = x + self.get_keep_pattern(y, not train) * y + return x + + +class ViT(nn.Module): + """This module implements Vision Transformer (ViT) backbone. + + Attributes: + patch_size (int): Patch size. + in_chans (int): Number of input image channels. + embed_dim (int): Patch embedding dimension. + depth (int): Depth of ViT. + num_heads (int): Number of attention heads in each ViT block. + mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. + qkv_bias (bool): If True, add a learnable bias to query, key, value. + beit_like_qkv_bias (bool): no bias for k. + drop_path_rate (float): Stochastic depth rate. + use_abs_pos (bool): If True, use absolute positional embeddings. + pretrain_img_size (int): input image size for pretraining models. + pretrain_use_cls_token (bool): If True, pretrainig models use class token. + layer_scale_init_value (float): if add a scaling layer with the initialized + value. Negative means not add such layers. + kernel_init (str): functions to initialize layers. Currently only supports + 'normal'. + freeze_vit_layer: (int). Freeze early layers. + use_ln_pre (bool): if use a layer norm before transformer blocks. Used in + CLIP/ GIT. Not used in MAE/ ViTDet. + use_ln_post (bool): if use a layer norm after transformer blocks. Used in + CLIP/ GIT. Not used in MAE/ ViTDet. + pe_bias (bool): if the patch-embedding layer has bias. Not used in + CLIP/ GIT. Used in MAE/ ViTDet. + use_class_embedding (bool): if use the cls_token in the attention. If True, + the attention block takes flattened tokens as input. If False, the + attention block takes grid feature as input. + dtype: jnp.dtype. + window_block_indexes: Never used. Keep to make legacy configs runable. + use_rel_pos: Never used. Keep to make lagacy configs runable. + """ + patch_size: int = 16 + in_chans: int = 3 + embed_dim: int = 768 + depth: int = 12 + num_heads: int = 12 + mlp_ratio: float = 4.0 + qkv_bias: bool = True + beit_like_qkv_bias: bool = False + mlp_activation: str = 'quick_gelu' + drop_path_rate: float = 0.1 + use_abs_pos: bool = True + pretrain_img_size: int = 224 + pretrain_use_cls_token: bool = True + layer_scale_init_value: float = -1.0 + kernel_init: str = 'normal' + freeze_vit_layer: int = -1 + use_ln_pre: bool = False + use_ln_post: bool = False + pe_bias: bool = True + use_class_embedding: bool = True + dtype: jnp.dtype = jnp.float32 + window_block_indexes: Any = None + use_rel_pos: Any = None + + def _get_abs_pos(self, abs_pos, hw): + """Calculate absolute positional embeddings. + + If needed, resize embeddings and remove cls_token dimension for the original + embeddings. + Args: + abs_pos (array): absolute positional embeddings with (1, num_position, C). + hw (Tuple): size of input image tokens. + Returns: + Absolute positional embeddings after processing with shape (1, H, W, C) + """ + h, w = hw + if self.pretrain_use_cls_token: + abs_pos_no_cls = abs_pos[:, 1:] + else: + abs_pos_no_cls = abs_pos + xy_num = abs_pos_no_cls.shape[1] + size = int(xy_num ** 0.5) + assert size * size == xy_num + abs_pos_no_cls = abs_pos_no_cls.reshape( + abs_pos_no_cls.shape[0], size, size, -1) + if size != h or size != w: + abs_pos_no_cls = jax.image.resize( + abs_pos_no_cls, + (abs_pos_no_cls.shape[0], h, w, abs_pos_no_cls.shape[3]), + method='bicubic', + ) + if self.use_class_embedding: + abs_pos_no_cls = abs_pos_no_cls.reshape( + abs_pos_no_cls.shape[0], h * w, -1) + new_abs_pos = jnp.concatenate([abs_pos[:, :1], abs_pos_no_cls], axis=1) + else: + new_abs_pos = abs_pos_no_cls + else: + if self.use_class_embedding: + new_abs_pos = abs_pos + else: + new_abs_pos = abs_pos_no_cls + return new_abs_pos + + @nn.compact + def __call__(self, x: jnp.ndarray, train: bool = False): + """Forward ViT backbone. + + Args: + x: (batch_size, height, width, 3) the input image + train: bool; + Returns: + x: the features after the backbone. (batch_size, seq_length, embed_dim). + """ + x = nn.Conv( + self.embed_dim, (self.patch_size, self.patch_size), + strides=(self.patch_size, self.patch_size), + padding='VALID', + use_bias=self.pe_bias, + name='patch_embed.proj')(x) + + if self.use_class_embedding: + class_embedding = self.param( + 'class_embedding', nn.initializers.zeros, (1, 1, self.embed_dim)) + class_embedding = jnp.broadcast_to( + class_embedding, (x.shape[0], 1, self.embed_dim)) + x = x.reshape(x.shape[0], -1, x.shape[-1]) # (B, hw, C) + x = jnp.concatenate([class_embedding, x], axis=1) + + if self.use_abs_pos: + num_patches = (self.pretrain_img_size // self.patch_size) ** 2 + num_positions = ( + num_patches + 1) if self.pretrain_use_cls_token else num_patches + pos_embed = self.param( + 'pos_embed', nn.initializers.zeros, + (1, num_positions, self.embed_dim)) + if self.use_class_embedding: + input_size = int((x.shape[1] - 1) ** 0.5) + x = x + self._get_abs_pos(pos_embed, (input_size, input_size)) + else: + x = x + self._get_abs_pos(pos_embed, (x.shape[1], x.shape[2])) + + dp_rates = [ + self.drop_path_rate * i / (self.depth - 1) for i in range(self.depth)] + if self.use_ln_pre: + x = nn.LayerNorm(name='ln_pre')(x) + for i in range(self.depth): + x = Block( + dim=self.embed_dim, + num_heads=self.num_heads, + mlp_ratio=self.mlp_ratio, + qkv_bias=self.qkv_bias, + beit_like_qkv_bias=self.beit_like_qkv_bias, + mlp_activation=self.mlp_activation, + drop_path=dp_rates[i], + with_grid_tokens=not self.use_class_embedding, + layer_scale_init_value=self.layer_scale_init_value, + name=f'blocks.{i}', + )(x, train=train) + if i + 1 == self.freeze_vit_layer: + x = jax.lax.stop_gradient(x) + if self.use_ln_post: + x = nn.LayerNorm(name='ln_post')(x) + return x diff --git a/scenic/projects/streaming_dvc/optimizer_utils.py b/scenic/projects/streaming_dvc/optimizer_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..7357120a281d95d53fb03f28b800a1ede790c030 --- /dev/null +++ b/scenic/projects/streaming_dvc/optimizer_utils.py @@ -0,0 +1,181 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for optimizers.""" + +import copy +from typing import Any, Callable, Optional, Union + +from absl import logging +import flax +import ml_collections +import optax +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers as optimizer_lib + +ScalarOrSchedule = Union[float, optax.Schedule] +MaskOrFn = Optional[Union[Any, Callable[[optax.Params], Any]]] +PyTree = Any # JAX team is working on type annotation for pytree: + + +def optimizer_with_layerwise_decay( + config: ml_collections.ConfigDict, + params: PyTree, + use_frozen_params: bool = True): + """Returns an optimizer with layerwise decay. + + Implementation of layerwise decay follows BEIT and MAE. + Reference: https://github.com/facebookresearch/mae/blob/main/util/lr_decay.py + + This function can apply layerwise decay to any optimizer, although this is + typically done with Adam. + + Args: + config: The training config. + params: The parameters of the model being trained. + use_frozen_params: If True, the optimizer will always expect to receive + a FrozenDict of parameters and gradients. + + Returns: + An Optax optimizer. + """ + optimizer_config = config.optimizer + # Avoid modifying original config and allow alteration. + optimizer_config = copy.deepcopy(optimizer_config).unlock() + base_learning_rate = config.lr_configs.base_learning_rate + + decay_layer_prefix = optimizer_config.decay_layer_prefix + decay_stem_layers = optimizer_config.decay_stem_layers + num_transformer_layers = config.optimizer.num_layers + del optimizer_config.decay_layer_prefix + del optimizer_config.decay_stem_layers + del optimizer_config.num_layers + + if optimizer_config.get('layerwise_decay', 0) <= 0: + logging.info('Not performing any layerwise decay.') + if 'layerwise_decay' in optimizer_config: + del optimizer_config.layerwise_decay + lr_fn = lr_schedules.get_learning_rate_fn(config) + return optimizer_lib.get_optimizer(optimizer_config, lr_fn, params) + + num_layers = num_transformer_layers + 1 + layer_decay = optimizer_config.layerwise_decay + learning_rate_scales = [ + layer_decay**(num_layers - i) for i in range(num_layers + 1) + ] + logging.info('Learning rate scales: %s', learning_rate_scales) + + layer_configs = [copy.deepcopy(config) for _ in range(num_layers + 1)] + for index in range(len(layer_configs)): + learning_rate = base_learning_rate * learning_rate_scales[index] + layer_configs[index].lr_configs.base_learning_rate = learning_rate + + learning_rate_fns = [ + lr_schedules.get_learning_rate_fn(layer_config) + for layer_config in layer_configs + ] + + # Weight decay mask is applied within optimizer_lib.get_optimizer. + # Note that we need to delete the layerwise_decay attribute, as Optax + # optimizers do not accept this argument. + del optimizer_config.layerwise_decay + optimizers = { + i: optimizer_lib.get_optimizer( + optimizer_config, learning_rate_fns[i], params) + for i in range(num_layers + 1) + } + + def _get_layer_id(name: str, num_layers: int) -> int: + for k in decay_stem_layers: + if k in name: + return 0 + if name.startswith(decay_layer_prefix): + l = len(decay_layer_prefix) + substring = name[l: name[l:].find('/') + l] + layer_id = int(substring) + return layer_id + 1 + else: + return num_layers + + flat_params = flax.traverse_util.flatten_dict( + flax.core.unfreeze(params), keep_empty_nodes=True, sep='/') + flat_layer_map = {k: _get_layer_id(k, num_layers) for k in flat_params} + layer_map = flax.traverse_util.unflatten_dict(flat_layer_map, sep='/') + if use_frozen_params: + layer_map = flax.core.freeze(layer_map) + + logging.info( + 'Layer assignments:\n%s', + flax.traverse_util.flatten_dict(layer_map, sep='/')) + tx = optax.multi_transform(optimizers, layer_map) + return tx + + +def optimizer_with_backbone_multiplier( + config: ml_collections.ConfigDict, + params: PyTree, + use_frozen_params: bool = True): + """Returns an optimizer with backbone learning rate multiplier. + + + Args: + config: The training config. + params: The parameters of the model being trained. + use_frozen_params: If True, the optimizer will always expect to receive + a FrozenDict of parameters and gradients. + + Returns: + An Optax optimizer. + """ + optimizer_config = config.optimizer + # Avoid modifying original config and allow alteration. + optimizer_config = copy.deepcopy(optimizer_config).unlock() + base_learning_rate = config.lr_configs.base_learning_rate + + backbone_layer_prefix = optimizer_config.backbone_layer_prefix + backbone_multiplier = optimizer_config.backbone_multiplier + backbone_learning_rate = base_learning_rate * backbone_multiplier + del optimizer_config.backbone_layer_prefix + del optimizer_config.backbone_multiplier + logging.info('Learning rate scales: %s', backbone_learning_rate) + + backbone_config = copy.deepcopy(config) + backbone_config.lr_configs.base_learning_rate = backbone_learning_rate + + learning_rate_fns = lr_schedules.get_learning_rate_fn(config) + backbone_learning_rate_fns = lr_schedules.get_learning_rate_fn( + backbone_config) + + optimizers = { + False: optimizer_lib.get_optimizer( # not backbone + optimizer_config, learning_rate_fns, params), + True: optimizer_lib.get_optimizer( # is backbone + optimizer_config, backbone_learning_rate_fns, params), + } + + def is_backbone(name: str) -> bool: + return name.startswith(backbone_layer_prefix) + + flat_params = flax.traverse_util.flatten_dict( + flax.core.unfreeze(params), keep_empty_nodes=True, sep='/') + flat_layer_map = {k: is_backbone(k) for k in flat_params} + layer_map = flax.traverse_util.unflatten_dict(flat_layer_map, sep='/') + if use_frozen_params: + layer_map = flax.core.freeze(layer_map) + + logging.info( + 'Layer assignments:\n%s', + flax.traverse_util.flatten_dict(layer_map, sep='/')) + tx = optax.multi_transform(optimizers, layer_map) + return tx diff --git a/scenic/projects/streaming_dvc/partition_utils.py b/scenic/projects/streaming_dvc/partition_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..6c04a2670e48c3e37361dae88ed9ee461cdaca70 --- /dev/null +++ b/scenic/projects/streaming_dvc/partition_utils.py @@ -0,0 +1,396 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for partitioned train states. + +This is useful when only training some variables in the model, and avoids +calculating gradients, and optimiser states, of frozen variables. +""" + +from collections import abc +import operator +import re +from typing import Any, Dict, Optional, Sequence, Tuple + +from absl import logging +import flax +from flax import struct +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +import optax +from scenic.projects.streaming_dvc import optimizer_utils +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils + + +PyTree = train_utils.PyTree + + +@struct.dataclass +class PartitionedTrainState: + """Dataclass to keep track of state of training. + + Parameters are separated into frozen and learned parameters. + + The state of training is structured as a struct.dataclass, which enables + instances of this class to be passed into jax transformations like tree_map + and pmap. + """ + + tx: Optional[optax.GradientTransformation] = struct.field( + default=None, pytree_node=False + ) + opt_state: Optional[optax.OptState] = None + params_frozen: Optional[Any] = struct.field(default_factory=dict) + params_learned: Optional[Any] = struct.field(default_factory=dict) + global_step: Optional[int] = 0 + model_state: Optional[Any] = struct.field(default_factory=dict) + rng: Optional[jnp.ndarray] = None + metadata: Optional[Dict[str, Any]] = None + + def __getitem__(self, item): + """Make TrainState a subscriptable object.""" + return getattr(self, item) + + def get(self, keyname: str, default: Optional[Any] = None) -> Any: + """Return the value for key if it exists otherwise the default.""" + try: + return self[keyname] + except KeyError: + return default + + +def _tree_merge(tree1, tree2): + for k, v in tree2.items(): + if isinstance(v, dict) and k in tree1 and isinstance(tree1[k], dict): + tree1[k] = _tree_merge(tree1[k], v) + else: + tree1[k] = v + return tree1 + + +def train_step_partitioned( + train_state: PartitionedTrainState, + batch: Any, + *, + flax_model: nn.Module, + loss_and_metrics_fn: Any, + learning_rate_fn: Any, + debug: bool = False) -> Tuple[PartitionedTrainState, float, Any, Any]: + """Training step which only computes gradients wrt. unfrozen parameters. + + Args: + train_state: Learnable parameters and optimizer states. + batch: A batch of data containing images ("inputs") and annotations. + flax_model: The model definition. + loss_and_metrics_fn: Loss function. + learning_rate_fn: Learning rate scheduler which given the global_step + generates the learning rate. + debug: Enable debug mode or not. + + Returns: + new_train_state: Updated network parameters and optimizer states. + lr: The learning rate of the current step (for visualization). + predictions: The output of the network. + metrics: Losses and other metrics for visualization. + """ + def loss_fn(params_to_learn, params_to_freeze): + new_rng, rng = jax.random.split(train_state.rng, 2) + + model_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + params = flax.core.unfreeze(params_to_learn) + _tree_merge(params, flax.core.unfreeze(params_to_freeze)) + # Gradients do not get computed with the following: + # params = {**train_state.params_learned, **train_state.params_frozen} + variables = {'params': params, **train_state.model_state} + + kwargs = {} + if 'context_tokens' in batch['label']: + kwargs['context_tokens'] = batch['label']['context_tokens'] + if 'checkpoint_inds' in batch['label']: + kwargs['checkpoint_inds'] = batch['label']['checkpoint_inds'] + if 'image_features' in batch: + kwargs['image_features'] = batch['image_features'] + predictions, new_model_state = flax_model.apply( + variables, + batch['inputs'], + gt_text_tokens=batch['label']['text_tokens'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': model_rng}, + debug=debug, + **kwargs, + ) + loss, metrics = loss_and_metrics_fn(predictions, batch) + + # Adapt to normalization API in log_train_summary + metrics = {k: (v, 1.) for k, v in metrics.items()} + return loss, (new_model_state, new_rng, metrics, predictions) + + compute_gradient_fn = jax.value_and_grad(loss_fn, has_aux=True, argnums=0) + (_, aux), grad = compute_gradient_fn( + train_state.params_learned, train_state.params_frozen) + + new_model_state, new_rng, metrics, predictions = aux + step = train_state.global_step + lr = learning_rate_fn(step) + + grad = jax.lax.pmean(grad, axis_name='batch') + updates, new_opt_state = train_state.tx.update( # pytype: disable=attribute-error + grad, train_state.opt_state, train_state.params_learned) + new_params_learned = optax.apply_updates(train_state.params_learned, updates) + new_train_state = train_state.replace( + global_step=step + 1, + opt_state=new_opt_state, + params_learned=new_params_learned, + model_state=new_model_state, + rng=new_rng) + + # Let's log some gradient norms as well + def global_l2_norm(x: jnp.ndarray) -> jnp.ndarray: + return jnp.sqrt(sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(x)])) + + metrics['l2_grads'] = (global_l2_norm(grad), 1) + metrics['l2_params'] = (global_l2_norm(new_params_learned), 1) + metrics['l2_updates'] = (global_l2_norm(updates), 1) + + return new_train_state, lr, predictions, metrics + + +def _flatten_params(d, parent_key='', sep='/'): + """Flattens a dictionary, keeping empty leaves.""" + items = [] + for k, v in d.items(): + path = parent_key + sep + k if parent_key else k + if isinstance(v, abc.MutableMapping): + items.extend(_flatten_params(v, path, sep=sep).items()) + else: + items.append((path, v)) + # Keeps the empty dict if it was set explicitly. + if parent_key and not d: + items.append((parent_key, {})) + return dict(items) + + +def _partition_parameters(params: PyTree, frozen_mapping: Dict[str, bool]): + """Partitions parameters into frozen and learned parameter trees. + + Args: + params: Pytree of model parameters. + frozen_mapping: Dictionary mapping parameter name to a boolean indicating + whether the parameter is to be frozen or not. Assumed that all the keys + in `params` are within this dictionary. + + Returns: + (parames_to_learn, params_to_freeze). Both are FrozenDicts of PyTrees in the + original structure as `params`. + """ + + params_flat = _flatten_params(flax.core.unfreeze(params)) + params_to_learn = {} + params_to_freeze = {} + + for k, v in params_flat.items(): + if k not in frozen_mapping: + raise ValueError(f'{k} not in mapping.') + if frozen_mapping[k]: + params_to_freeze[k] = v + else: + params_to_learn[k] = v + + params_to_learn = flax.traverse_util.unflatten_dict( + params_to_learn, sep='/') + params_to_freeze = flax.traverse_util.unflatten_dict( + params_to_freeze, sep='/') + + return flax.core.freeze(params_to_learn), flax.core.freeze(params_to_freeze) + + +def create_partitioned_train_state( + params: PyTree, + frozen_mapping: Dict[str, bool], + config: ml_collections.ConfigDict, + global_step: int, + model_state: PyTree, + rng: jnp.ndarray, + lr_fn: Any) -> Tuple[PartitionedTrainState, int, int]: + """Creates a partitioned train state given a parameter tree.""" + + params_to_learn, params_to_freeze = _partition_parameters( + params, frozen_mapping) + if config.optimizer.get('layerwise_decay', -1.) >= 0.0: + tx = optimizer_utils.optimizer_with_layerwise_decay( + config, params=params_to_learn) + elif config.optimizer.get('backbone_multiplier', -1.) >= 0.0: + tx = optimizer_utils.optimizer_with_backbone_multiplier( + config, params=params_to_learn) + else: + tx = optimizers.get_optimizer( + config.optimizer, lr_fn, params=params_to_learn) + opt_state = tx.init(params_to_learn) + + def num_parameters_from_tree(tree): + if len(tree): # pylint: disable=g-explicit-length-test + return jax.tree_util.tree_reduce( + operator.add, jax.tree_util.tree_map(lambda x: x.size, tree)) + else: + return 0 + + num_learnable_params = num_parameters_from_tree(params_to_learn) + num_frozen_params = num_parameters_from_tree(params_to_freeze) + logging.info('Number of params to learn: %s', num_learnable_params) + logging.info('Number of params to freeze: %s', num_frozen_params) + logging.info('Number of params in optimiser state: %s', + num_parameters_from_tree(opt_state)) + + train_state = PartitionedTrainState( + tx=tx, + opt_state=opt_state, + params_frozen=params_to_freeze, + params_learned=params_to_learn, + global_step=global_step, + model_state=model_state, + rng=rng, + ) + + return train_state, num_learnable_params, num_frozen_params + + +def convert_to_train_state( + p_train_state: PartitionedTrainState) -> train_utils.TrainState: + """Converts a PartitionedTrainState to a normal TrainState. + + The optimizer state is not changed at all. The parameters are simply merged + together into a single dictionary. + + Args: + p_train_state: A partitioned train state. + + Returns: + Regular Scenic train_state object. + """ + + params_learned_flat = _flatten_params( + flax.core.unfreeze(p_train_state.params_learned) + ) + params_frozen = _flatten_params( + flax.core.unfreeze(p_train_state.params_frozen) + ) + + params = params_learned_flat + params.update(params_frozen) + params = flax.core.freeze( + flax.traverse_util.unflatten_dict(params, sep='/') + ) + + return train_utils.TrainState( + params=params, + tx=p_train_state.tx, + opt_state=p_train_state.opt_state, + global_step=p_train_state.global_step, + model_state=p_train_state.model_state, + rng=p_train_state.rng, + metadata=p_train_state.metadata, + ) + + +def convert_to_partitioned_train_state( + train_state: train_utils.TrainState, + frozen_mapping: Dict[str, bool]) -> PartitionedTrainState: + """Converts a normal TrainState to a PartitionedTrainState. + + The optimizer state is not changed at all. The parameters are simply split + into the learned and frozen components. + + Args: + train_state: Regular Scenic train-state. + frozen_mapping: Dictionary mapping parameter name to a boolean indicating + whether the parameter is to be frozen or not. Assumed that all the keys in + `params` are within this dictionary. + + Returns: + Partitioned train-state. + """ + + params_to_learn, params_to_freeze = _partition_parameters( + train_state.params, frozen_mapping) + + return PartitionedTrainState( + tx=train_state.tx, + opt_state=train_state.opt_state, + params_frozen=params_to_freeze, + params_learned=params_to_learn, + global_step=train_state.global_step, + model_state=train_state.model_state, + rng=train_state.rng, + metadata=train_state.metadata, + ) + + +def create_frozen_mask_from_regex( + param_tree: PyTree, + patterns_names: Optional[Sequence[Tuple[str, Optional[str]]]], + *, + allow_unmatched: bool = True, + log: bool = True, +) -> Dict[str, bool]: + """Returns a mapping of parameter names to if they are frozen or not. + + Adapted from: scenic.train_lib.optax._make_mask_trees + + Args: + param_tree: PyTree of parameters. + patterns_names: A sequence of tuples. The tuple consists of (regex, name), + where regex is the pattern used to match if the parameters are frozen or + not. And name is a description used for debugging purposes. + allow_unmatched: If true, allows some variables to be unmatched. This should + be the case when freezing only some variables in the model. + log: If True, log each match made. + + Returns: + A list of flattenned parameter names, and a boolean indicating if the + variable is to be frozen or not. + """ + + patterns, _ = zip(*patterns_names) if patterns_names is not None else ([], []) + compiled_patterns = list(map(re.compile, patterns)) + + def matchfirst(_, name): + matches = [bool(pattern.fullmatch(name)) for pattern in compiled_patterns] + + matched = sum(map(int, matches)) + matched_patterns = [patterns_names[i] for i, m in enumerate(matches) if m] + if matched > 1: + raise ValueError( + f'{name} matched by multiple patterns: {matched_patterns}') + + if matched == 0 and not allow_unmatched: + raise ValueError(f'{name} was *not* matched by a single pattern!') + + if log: + if any(matches): + logging.info('%s - matched by %s', name, + patterns_names[matches.index(True)]) + else: + logging.info('%s - not matched by any patterns', name) + return np.array(matches) + + multimask = optimizers.tree_map_with_names_values(matchfirst, param_tree) + frozen_mask_tree = jax.tree_util.tree_map(any, multimask) + return _flatten_params(flax.core.unfreeze(frozen_mask_tree)) diff --git a/scenic/projects/streaming_dvc/post_processing_utils.py b/scenic/projects/streaming_dvc/post_processing_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..d76030add37e4eb3ec343effe2a166badd0c8324 --- /dev/null +++ b/scenic/projects/streaming_dvc/post_processing_utils.py @@ -0,0 +1,131 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Util functions for Streaming DVC post-processing.""" + +import jax +import jax.numpy as jnp + + +def remove_padding_and_concate_and_pad_tokens( + tokens, bos_id, eos_id, max_text_tokens): + """Remove padding and concate and pad tokens. + + Removing padding tokens at the end of each caption, concat them into + a single paragraph caption, and add paddings to the paragraph captions. + Padding is always 0. + + Args: + tokens: List, each element in the list has shape (batch, max_text_tokens). + bos_id: int + eos_id: int + max_text_tokens: int + Returns: + merged_token: (batch, max_text_tokens) + """ + stack_tokens = jnp.concatenate( + [x[:, None] for x in tokens], + axis=1) # (batch, num_seqs, max_text_tokens) + def impl(single_batch_tokens): + single_batch_tokens = single_batch_tokens.reshape(-1) + inds = jnp.nonzero( + (single_batch_tokens != 0) & (single_batch_tokens != bos_id) & ( + single_batch_tokens != eos_id), + size=max_text_tokens - 1, fill_value=-1)[0] # (max_text_tokens - 1,) + concate_tokens = jnp.take_along_axis( + single_batch_tokens, inds, + axis=0) * (inds >= 0) # (max_text_tokens - 1,) + concate_tokens_with_bos = jnp.concatenate( + [jnp.zeros((1), jnp.int32) + bos_id, concate_tokens], + axis=0) # (max_text_tokens,) + eos_position = jnp.minimum((inds >= 0).sum() + 1, inds.shape[0]) + eos_position_onehot = jnp.arange(inds.shape[0] + 1) == eos_position + concate_tokens_with_bos_eos = concate_tokens_with_bos * ( + 1 - eos_position_onehot) + eos_position_onehot * eos_id + return concate_tokens_with_bos_eos + return jax.vmap(impl)(stack_tokens) + + +def remove_segments_from_wrong_checkpoint( + text_tokens, max_end_time, ori_vocab_size, bos_id, eos_id): + """Remove segments that is out-of-range of the current checkpoint. + + Example: text_token represents segments including: [0, 10] S1 [10, 60] S2; + max_end_time being 50. The returning text_token should be [0, 10] S1. + + We assume text_token to be always in the correct format, i.e., 2 time tokens + followed by the sentence. We also assume text_tokens starts with BOS. + + Args: + text_tokens: (batch_size, max_cap_len). + max_end_time: int, in range [0, num_bins] + ori_vocab_size: int + bos_id: int + eos_id: int + Returns: + valid_text_tokens: (batch_size, max_cap_len) + """ + max_cap_len = text_tokens.shape[1] + max_num_segments = max_cap_len // 2 + def impl(single_batch_tokens): + is_timetoken = single_batch_tokens >= ori_vocab_size # (max_cap_len,) + is_segment_start = is_timetoken & jnp.concatenate( + [is_timetoken[1:], jnp.zeros((1,), dtype=bool)], + axis=0) # (max_cap_len,) + # Index i is the start of a segment if token[i] and token[i+1] are both + # time tokens. + + segment_id = jnp.cumsum( + is_segment_start.astype(jnp.int32)) - 1 # (max_cap_len,) + time_token_inds = jnp.nonzero( + is_timetoken, size=max_num_segments * 2, + fill_value=-1)[0] + time_tokens = jnp.take_along_axis( + single_batch_tokens, time_token_inds, axis=0) + time_tokens = (time_tokens - ori_vocab_size) * (time_token_inds > 0) + ( + (max_end_time + 1) * (time_token_inds <= 0)) + time_tokens = time_tokens.reshape(max_num_segments, 2) + is_valid = (time_tokens[:, 1] < max_end_time) # (max_num_segments,) + is_valid_token = jnp.take_along_axis( + is_valid, segment_id, axis=0) # (max_cap_len,) + valid_tokens = single_batch_tokens * is_valid_token + return valid_tokens + valid_text_tokens = jax.vmap(impl)(text_tokens) + # We only need to "remove padding" here. + valid_text_tokens = remove_padding_and_concate_and_pad_tokens( + [valid_text_tokens], bos_id, eos_id, max_cap_len) + return valid_text_tokens + + +def remove_timestamps(tokens, ori_vocab_size): + """Remove times tokens. + + Args: + tokens: (batch_size, max_cap_len) + ori_vocab_size: int + Returns: + tokens_without_timestamp: (batch_size, max_cap_len). If a token=0, it is + assumed to be padding. + """ + max_cap_len = tokens.shape[1] + def impl(single_batch_tokens): + is_caption_token = single_batch_tokens < ori_vocab_size # (max_cap_len,) + caption_token_inds = jnp.nonzero( + is_caption_token, size=max_cap_len, fill_value=-1)[0] + caption_tokens = jnp.take_along_axis( + single_batch_tokens, caption_token_inds, axis=0) + caption_tokens = caption_tokens * (caption_token_inds >= 0) + return caption_tokens + tokens_without_timestamp = jax.vmap(impl)(tokens) + return tokens_without_timestamp diff --git a/scenic/projects/streaming_dvc/requirements.txt b/scenic/projects/streaming_dvc/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..16bdbbcbc2afb294681bdb52e8055f195b9d1203 --- /dev/null +++ b/scenic/projects/streaming_dvc/requirements.txt @@ -0,0 +1,5 @@ +dmvr @ git+https://github.com/deepmind/dmvr.git +pycocoevalcap +t5 +t5x +six diff --git a/scenic/projects/streaming_dvc/streaming_dvc_teaser.png b/scenic/projects/streaming_dvc/streaming_dvc_teaser.png new file mode 100644 index 0000000000000000000000000000000000000000..dcf01ab855a30dee7e57e2708ec96ff484f6c9a8 --- /dev/null +++ b/scenic/projects/streaming_dvc/streaming_dvc_teaser.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76053b5d4c942d3da52ba223dcd984f35d27c37ebf0f00d377ad15b510f565ea +size 329906 diff --git a/scenic/projects/streaming_dvc/tools/create_densecap_json_from_tfrecord.py b/scenic/projects/streaming_dvc/tools/create_densecap_json_from_tfrecord.py new file mode 100644 index 0000000000000000000000000000000000000000..f96039f2c68f93a840d998d12d209f2c624ffb4c --- /dev/null +++ b/scenic/projects/streaming_dvc/tools/create_densecap_json_from_tfrecord.py @@ -0,0 +1,142 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Create ground truth json file for evaluation. + +For each tfrecord of the validation set (e.g., anet_val), run: + +python scenic/projects/streaming_dvc/tools/create_densecap_json_from_tfrecord.py \ +--input /path/to/anet_val.tfrecord@64 \ +--output /path/to/output/anet_val_vid2seqformat.json +""" + +from collections.abc import Sequence +import json +from absl import app +from absl import flags +import tensorflow as tf +from tensorflow.io import gfile + +FLAGS = flags.FLAGS + +flags.DEFINE_string('input', '', 'Input path') +flags.DEFINE_string('output', '', 'Output path') + + +def decode_sharded_names(paths, end=''): + """Convert sharded file names into a list.""" + ret = [] + paths = paths.split(',') + for name in paths: + if '@' in name: + idx = name.find('@') + if end: + num_shards = int(name[idx + 1:-len(end)]) + else: + num_shards = int(name[idx + 1:]) + names = ['{}-{:05d}-of-{:05d}{}'.format( + name[:idx], i, num_shards, end) for i in range(num_shards)] + ret.extend(names) + else: + ret.append(name) + return ret + + +def nonempty(x): + return x and (x != ' ') and (x != '.') and (x != '\n') + +sequence_feature_description = { + 'image/timestamp': tf.io.FixedLenSequenceFeature([], tf.int64), +} + +context_feature_description = { + 'caption/string': tf.io.VarLenFeature(tf.string), + 'video/timestamps/start': tf.io.VarLenFeature(tf.int64), + 'video/timestamps/end': tf.io.VarLenFeature(tf.int64), + 'video/duration': tf.io.VarLenFeature(tf.int64), + 'split': tf.io.VarLenFeature(tf.int64), + 'media_id': tf.io.VarLenFeature(tf.string), +} + + +def decode_annotations(context_features, sequence_features, _): + """Convert custom tfrecord into tfds builder format.""" + caption = tf.sparse.to_dense(context_features['caption/string']) + start = tf.sparse.to_dense(context_features['video/timestamps/start']) + end = tf.sparse.to_dense(context_features['video/timestamps/end']) + duration = tf.sparse.to_dense(context_features['video/duration']) + timestamps = sequence_features['image/timestamp'] + split = tf.sparse.to_dense(context_features['split']) + # split = tf.ones((tf.shape(caption)[0]), dtype=tf.int64) + media_id = tf.sparse.to_dense(context_features['media_id'])[0] + return { + 'timestamps': timestamps, 'caption': caption, + 'start': start, 'end': end, 'duration': duration, + 'split': split, + 'media_id': media_id} + + +def main(argv: Sequence[str]) -> None: + if len(argv) > 1: + raise app.UsageError('Too many command-line arguments.') + dataset_files = decode_sharded_names(FLAGS.input) + ds = tf.data.TFRecordDataset(dataset_files) + ds = ds.map( + lambda x: tf.io.parse_sequence_example( + x, + context_features=context_feature_description, + sequence_features=sequence_feature_description)) + ds = ds.map(decode_annotations) + data_iter = iter(ds) + + annotations = {} + + i = 0 + while True: + try: + data = next(data_iter) + i += 1 + except: # pylint: disable=bare-except + break + media_id = data['media_id'].numpy().decode('utf-8') + gt_timestamps = [ + [int(st), int(ed)] + for st, ed in zip(data['start'].numpy(), data['end'].numpy())] + gt_captions = [x.decode('utf-8') for x in data['caption'].numpy()] + non_empty_inds = [i for i, x in enumerate(gt_captions) if nonempty(x)] + gt_timestamps = [gt_timestamps[x] for x in non_empty_inds] + gt_captions = [gt_captions[x] for x in non_empty_inds] + splits = [int(x) for x in data['split'].numpy().tolist()] + duration = int(data['duration'].numpy()[0]) + timestamps = [int(x) for x in data['timestamps'].numpy().tolist()] + ann = { + 'gt_timestamps': gt_timestamps, + 'gt_captions': gt_captions, + 'splits': splits, + 'duration': duration, + 'timestamps': timestamps, + } + if media_id in annotations: + print('Duplicate media_id', media_id) + print('Annotation 1:', annotations[media_id]) + print('Annotation 2:', ann) + if i % 100 == 0: + print(f'Processed {i} examples.') + annotations[media_id] = ann + + print(f'Processed {i} examples. {len(annotations)} valid annotations.') + json.dump(annotations, gfile.GFile(FLAGS.output, 'w')) + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/streaming_dvc/train_utils.py b/scenic/projects/streaming_dvc/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..d99d01680029c72c9928b09d9151d2802c5c5c4a --- /dev/null +++ b/scenic/projects/streaming_dvc/train_utils.py @@ -0,0 +1,168 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utils for training. + +'pop_axes_names' and 're_add_axis_names' are forked from +scenic/projects/vid2seq/train_utils.py + +""" + +from typing import Any, Optional, Tuple + +from absl import logging +import flax +from flax.core import frozen_dict +from flax.training import checkpoints +from scenic.common_lib import debug_utils +from scenic.train_lib import train_utils + +TrainState = train_utils.TrainState +FrozenDict = flax.core.FrozenDict + + +def pop_axes_names( + train_state: TrainState, + axes_name: str = 'param_axes') -> Tuple[TrainState, Optional[Any]]: + """Removes axes_names from model_state for a train state. + + Args: + train_state: Training state. + axes_name: the string specifying the name in the model_state + + Returns: + New train state without axes_names in model_state, axes_names metadata if it + was removed (so it can be re-added). + """ + model_state = train_state.model_state + if axes_name in train_state.model_state: + model_state, param_axes = frozen_dict.freeze(model_state).pop(axes_name) + return train_state.replace(model_state=model_state), param_axes + else: + return train_state, None + + +def re_add_axis_names(train_state: TrainState, + param_axes: Any, + axes_name: str = 'param_axes') -> TrainState: + """Adds axes_names to model_state for a train state. + + Args: + train_state: Training state. + param_axes: Model axes metadata to re-add. + axes_name: the string specifying the name in the model_state + + Returns: + New train state without axes_names in model_state, axes_names metadata if it + was removed (so it can be re-added). + """ + if param_axes: + model_state = frozen_dict.unfreeze(train_state.model_state) + model_state[axes_name] = param_axes + return train_state.replace(model_state=frozen_dict.freeze(model_state)) + else: + return train_state + + +def copy_matched_params( + expected_params, restored_params, load_prefix='', load_replace=(), + skip_wrong_shape=False, load_available_shape=()): + """Copy matched parameters from a restored one.""" + flattened_restored_params = flax.traverse_util.flatten_dict( + restored_params, sep='/') + if load_prefix: + flattened_restored_params = { + load_prefix + k: v for k, v in flattened_restored_params.items()} + if load_replace: + for x in load_replace: + flattened_restored_params = { + k.replace( + x[0], x[1]): v for k, v in flattened_restored_params.items()} + flattened_expected_params = flax.traverse_util.flatten_dict( + expected_params, sep='/') + extra_keys = flattened_restored_params.keys( + ) - flattened_expected_params.keys() + missing_keys = flattened_expected_params.keys( + ) - flattened_restored_params.keys() + logging.info('Inspect extra keys:%s', extra_keys) + logging.info('Inspect missing keys:%s', missing_keys) + for k, v in flattened_restored_params.items(): + if k not in flattened_expected_params: + logging.info( + 'Skipping parameter %s in restored model, but not in target.', k) + continue + if flattened_expected_params[k].shape != v.shape: + logging.info( + 'Key: %s. Expected shape: %s. Restored shape: %s', k, + flattened_expected_params[k].shape, v.shape) + if k in load_available_shape: + logging.info('Loading available shape for Key: %s.', k) + if len(v.shape) == 1: + flattened_expected_params[k] = flattened_expected_params[k].at[ + :v.shape[0]].set(v) + else: + flattened_expected_params[k] = flattened_expected_params[k].at[ + :v.shape[0], :v.shape[1]].set(v) + elif not skip_wrong_shape: + raise ValueError( + 'Shape mismatch between restored and target model' + 'Set config.skip_wrong_shape = True if this is expected.') + else: + flattened_expected_params[k] = v + new_params = flax.traverse_util.unflatten_dict( + flattened_expected_params, sep='/') + return new_params + + +def load_weights(train_state, config): + """Load pretrained weights or checkpoint. + + Args: + train_state: the parameters that need to be restored. + config: config dict that should contain "weights": the path of the + checkpoint. + Returns: + train_state: restored train_state. + start_step: step number of the checkpoint. + """ + start_step = 0 + + weight_path = config.get('weights', '') + skip_wrong_shape = config.get('skip_wrong_shape', False) + load_available_shape = config.get('load_available_shape', ()) + load_prefix = config.get('load_prefix', '') + load_replace = config.get('load_replace', ()) + if weight_path: + logging.info('Loading weights from %s', weight_path) + weight_data = checkpoints.restore_checkpoint(weight_path, None) + if 'params' in weight_data: + restored_params = weight_data['params'] + else: + # Old Scenic train state format. + restored_params = weight_data['optimizer']['target'] + if 'params' in restored_params: # Backward compatibility. + restored_params = restored_params['params'] + + expected_params = train_state.params.unfreeze() + new_params = copy_matched_params( + expected_params, restored_params, + load_prefix=load_prefix, load_replace=load_replace, + skip_wrong_shape=skip_wrong_shape, + load_available_shape=load_available_shape) + train_state = train_state.replace(params=FrozenDict(new_params)) + debug_utils.log_param_shapes(train_state.params) + logging.info('Finish loading weights from %s', weight_path) + + return train_state, start_step + diff --git a/scenic/projects/streaming_dvc/trainer.py b/scenic/projects/streaming_dvc/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..2e0370b86a31bf621e8c5e5f97c9962363e18d0e --- /dev/null +++ b/scenic/projects/streaming_dvc/trainer.py @@ -0,0 +1,244 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training script for Streaming DVC models.""" + +import functools +import time +from typing import Any + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +from scenic.common_lib import debug_utils +from scenic.dataset_lib import dataset_utils +from scenic.projects.streaming_dvc import evaluate +from scenic.projects.streaming_dvc import partition_utils +from scenic.projects.streaming_dvc import train_utils as streaming_dvc_train_utils +from scenic.train_lib import lr_schedules +from scenic.train_lib import train_utils + + +def train_and_evaluate( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter): + """Main training loop lives in this function. + + Args: + rng: JAX PRNGKey. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + is_host = jax.process_index() == 0 + logging.info('Training with config: %s', config) + logging.info('Dataset metadata %s', dataset.meta_data) + + model = model_cls(config, dataset.meta_data) + rng, init_rng = jax.random.split(rng) + input_spec = [ + (dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))] + if config.get('additional_input_spec', []): + input_spec.extend(config.additional_input_spec) + (params, model_state, num_trainable_params, gflops) = ( + train_utils.initialize_model( + model_def=model.flax_model, + input_spec=input_spec, + config=config, + rngs=init_rng, + ) + ) + + # Obtain the mapping of parameter names to frozen or not + frozen_mapping = partition_utils.create_frozen_mask_from_regex( + params, config.get('frozen_params') + ) + + lr_fn = lr_schedules.get_learning_rate_fn(config) + _, train_rng = jax.random.split(rng) + train_state, num_learnable_params, num_frozen_params = ( + partition_utils.create_partitioned_train_state( + params, frozen_mapping, config, 0, model_state, train_rng, lr_fn)) + + # Convert partitioned train state to a normal one for loading from pretrained + # checkpoints, or from the saved one, without any changes. + train_state = partition_utils.convert_to_train_state(train_state) + + # T5 models have a 'params_axes' model_state which is somehow not saved in the + # checkpoint (being removed after a first train_step). Following Vid2Seq to + # remove it when loading the checkpoint. It won't affect if the model does + # have the 'params_axes' model_state. + train_state, params_axes = streaming_dvc_train_utils.pop_axes_names( + train_state, 'params_axes') + train_state = checkpoints.restore_checkpoint(workdir, train_state) + train_state = streaming_dvc_train_utils.re_add_axis_names( + train_state, params_axes, 'params_axes') + + start_step = int(train_state.global_step) + if start_step == 0: + train_state, start_step = streaming_dvc_train_utils.load_weights( + train_state, config) + step0_log = {'num_params': num_trainable_params, + 'num_learnable_params': num_learnable_params, + 'num_frozen_params': num_frozen_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Now convert back to the partitioned train step. + train_state = partition_utils.convert_to_partitioned_train_state( + train_state, frozen_mapping) + + train_step_pmapped = jax.pmap( + functools.partial( + partition_utils.train_step_partitioned, + flax_model=model.flax_model, + loss_and_metrics_fn=model.loss_function, + learning_rate_fn=lr_fn, + debug=config.debug_train, + ), + axis_name='batch', donate_argnums=(0,), + ) + + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + log_eval_steps = config.get('log_eval_steps', steps_per_epoch) + log_summary_steps = config.get('log_summary_steps', 20) + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + eval_batch_size = config.get('eval_batch_size', config.batch_size) + chrono = train_utils.Chrono() + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + + def write_note(note): + if is_host: + platform.work_unit().set_notes(note) + logging.info(note) + + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + hooks = [] + if is_host: + hooks.append(report_progress) + if config.get('xprof', True) and is_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, lr, train_predictions, metrics = train_step_pmapped( + train_state, train_batch) + train_metrics.append(metrics) + extra_training_logs.append({'learning_rate': lr}) + for h in hooks: + h(step) + chrono.pause() + del train_predictions + + if (step % log_summary_steps == 0) or (step == total_steps - 1): + if is_host: + chrono.tick(step, writer, write_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, train_metrics), + extra_training_logs=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, extra_training_logs), + writer=writer) + train_metrics, extra_training_logs = [], [] + + eval_first_step = config.get('eval_first_step', True) and step == 1 + do_eval = not config.get('not_eval', False) + if ((step % log_eval_steps == 0) or (step == total_steps) or ( + eval_first_step)) and do_eval: + logging.info('Starting evaluation ...') + # Convert back to normal train state for doing evaluation without any + # code changes. + train_state = partition_utils.convert_to_train_state(train_state) + start_time = time.time() + with report_progress.timed('eval'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + last_eval_results, last_eval_metrics = evaluate.inference_on_dataset( + model.flax_model, + train_state, dataset, + eval_batch_size=eval_batch_size, + is_host=is_host, + save_dir=workdir, + step=step, + config=config) + last_eval_step = step + train_utils.log_eval_summary( + step=last_eval_step, eval_metrics=last_eval_metrics, + extra_eval_summary=last_eval_results, writer=writer) + duration = time.time() - start_time + logging.info('Done with evaluation: %.4f sec.', duration) + # Convert back to partitioned train state for training. + train_state = partition_utils.convert_to_partitioned_train_state( + train_state, frozen_mapping) + writer.flush() + + if ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)): + with report_progress.timed('checkpoint'): + train_state = train_utils.sync_model_state_across_replicas(train_state) + if is_host: + unrep_train_state = jax_utils.unreplicate(train_state) + logging.info('Parameter summary after checkpoint:') + debug_utils.log_param_shapes( + unrep_train_state.params_learned, # pytype: disable=attribute-error + description='Learned params') + if len(unrep_train_state.params_frozen): # pylint: disable=g-explicit-length-test + debug_utils.log_param_shapes( + unrep_train_state.params_frozen, # pytype: disable=attribute-error + description='Frozen params') + # Convert to unpartitioned train state for saving and loading without + # needing any code changes. + unrep_train_state = partition_utils.convert_to_train_state( + unrep_train_state) + train_utils.save_checkpoint( + workdir, unrep_train_state, + max_to_keep=config.get('checkpoint_max_to_keep', 1)) + del unrep_train_state + chrono.resume() # Un-pause now. + + train_utils.barrier() + return train_state, train_summary, eval_summary diff --git a/scenic/projects/svvit/README.md b/scenic/projects/svvit/README.md new file mode 100644 index 0000000000000000000000000000000000000000..287355dc50555d3f4b6f414f1c5c5bba92507b74 --- /dev/null +++ b/scenic/projects/svvit/README.md @@ -0,0 +1,3 @@ +# SVViT + +The Structural Variant Vision Transformer (SVViT) project aims to identify and genotype structural variants. diff --git a/scenic/projects/svvit/__init__.py b/scenic/projects/svvit/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/svvit/classification_trainer.py b/scenic/projects/svvit/classification_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..8af513480b8c4b1704b8d9fc3d57abaded8c6128 --- /dev/null +++ b/scenic/projects/svvit/classification_trainer.py @@ -0,0 +1,492 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""SVViT Training Script.""" + +import functools +from typing import Any, Callable, Dict, Tuple, Optional, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.svvit import metrics as sv_metrics +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] +LrFn = Callable[[jnp.ndarray], jnp.ndarray] + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + lr_fn: LrFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, + Any]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, params, and optimizer. The buffer of this argument can + be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + lr_fn: The learning rate fn used for the logging the learning rate. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training and computed metrics and some training logs. + """ + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + rng=mixup_rng) + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + logits, new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params']) + return loss, (new_model_state, logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (train_cost, (new_model_state, + logits)), grad = compute_gradient_fn(train_state.params) + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm') is not None: + grad = clip_grads(grad, config.max_grad_norm) + + updates, new_opt_state = train_state.tx.update(grad, train_state.opt_state, + train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)])) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + # TODO(dehghani): Can we get this from the optimizer instead? + training_logs['learning_rate'] = lr_fn(train_state.global_step) + + metrics = metrics_fn(logits, batch) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + + return new_train_state, metrics, training_logs + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + all_gather: bool = False, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], Optional[jnp.ndarray], + Optional[jnp.ndarray]]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + all_gather: If True, the function gather batch and output of model in from + all hosts, using `jax.lax.all_gather` and return it, e.g., for computing + global metrics on CPU. + debug: Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and optionally output, and batch after all_gather. + """ + variables = {'params': train_state.params, **train_state.model_state} + logits = flax_model.apply( + variables, batch['inputs'], train=False, mutable=False, debug=debug) + metrics = metrics_fn(logits, batch) + if all_gather: + targets = {'label': batch['label'], 'batch_mask': batch['batch_mask']} + logits = jax.lax.all_gather(logits, 'batch') + targets = jax.lax.all_gather(targets, 'batch') + return metrics, logits, targets + else: + return metrics, None, None + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_state that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params=params) + # We jit this, such that the arrays that are created on the same device as the + # input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + rng, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + # Replicate the optimizer, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + lr_fn=lr_fn, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + all_gather=config.get('global_metrics', False), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + if dataset.test_iter: + total_test_steps = int( + np.ceil(dataset.meta_data['num_test_examples'] / config.batch_size)) + steps_per_test = config.get('steps_per_test') or total_test_steps + + # If `global_metrics` are set in the config and we are the lead host + compute_global_metrics = False + if config.get('global_metrics', False) and lead_host: + compute_global_metrics = True + if compute_global_metrics: + global_metrics_evaluator = sv_metrics.TruvariGlobalEvaluator( + config.global_metrics) + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + extra_training_logs.append(t_logs) + for h in hooks: + h(step) + # Below are once-in-a-while ops -> pause. + ###################### LOG TRAIN SUMMARY ######################## + if ((step % log_summary_steps == 1) or (step == total_steps) or + (lead_host and chrono.warmup)): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + # train_metrics is list of a dictionaries of metrics, where the shape of + # the metrics[key] is [n_local_devices]. However, because metric functions + # have a psum, we have already summed across the whole sharded batch, and + # what's returned is n_local_devices copies of the same summed metric. + # So we do unreplicate and fetch them to host using `unreplicate_and_get`. + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_training_logs), + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + eval_metrics = [] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + for _ in range(steps_per_eval): + eval_batch = next(dataset.valid_iter) + e_metrics, e_output, e_batch = eval_step_pmapped( + train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + if compute_global_metrics: + # Unreplicate outputs of eval_step_pmapped that are coming from + # `lax.all_gather`, fetch to the host and add to the Evaluator: + e_batch_mask = train_utils.unreplicate_and_get( + e_batch['batch_mask']).astype(bool) + global_metrics_evaluator.add_batch_of_examples( + target=train_utils.unreplicate_and_get( + e_batch['label'])[e_batch_mask], + output=train_utils.unreplicate_and_get(e_output)[e_batch_mask]) + del e_batch, e_output, e_batch_mask + eval_global_metrics_summary = None + if compute_global_metrics: + eval_global_metrics_summary = ( + global_metrics_evaluator.compute_metrics(clear_annotations=True)) + eval_summary = train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + extra_eval_summary=eval_global_metrics_summary, + prefix=dataset.meta_data['eval_name'], + writer=writer) + writer.flush() + del eval_metrics, eval_global_metrics_summary + + # Evaluation on test set + if ((step % log_eval_steps == 1) or + (step == total_steps)) and dataset.test_iter: + with report_progress.timed('test'): + test_metrics = [] + for _ in range(steps_per_test): + test_batch = next(dataset.test_iter) + t_metrics, t_output, t_batch = eval_step_pmapped( + train_state=train_state, batch=test_batch) + test_metrics.append(train_utils.unreplicate_and_get(t_metrics)) + if compute_global_metrics: + # Unreplicate outputs of eval_step_pmapped that are coming from + # `lax.all_gather`, fetch to the host and add to the Evaluator: + t_batch_mask = train_utils.unreplicate_and_get( + t_batch['batch_mask']).astype(bool) + global_metrics_evaluator.add_batch_of_examples( + target=train_utils.unreplicate_and_get( + t_batch['label'])[t_batch_mask], + output=train_utils.unreplicate_and_get(t_output)[t_batch_mask]) + del t_batch, t_output, t_batch_mask + test_global_metrics_summary = None + if compute_global_metrics: + test_global_metrics_summary = ( + global_metrics_evaluator.compute_metrics(clear_annotations=True)) + eval_summary = train_utils.log_eval_summary( + step=step, + eval_metrics=test_metrics, + extra_eval_summary=test_global_metrics_summary, + prefix=dataset.meta_data['test_name'], + writer=writer) + writer.flush() + del test_metrics, test_global_metrics_summary + chrono.resume() + ##################### CHECKPOINTING ################### + if ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + train_utils.save_checkpoint(workdir, unrep_train_state) + del unrep_train_state + chrono.resume() # Un-pause now. + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/svvit/configs/__init__.py b/scenic/projects/svvit/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/svvit/configs/pileup_coverage_vit_config.py b/scenic/projects/svvit/configs/pileup_coverage_vit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..416168a0ce312df55f0b668836c2fa494fcec5e9 --- /dev/null +++ b/scenic/projects/svvit/configs/pileup_coverage_vit_config.py @@ -0,0 +1,127 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for ViT on structural variant classification using coverage pileups. + +""" + +import ml_collections + +_TRAIN_SIZE = 31_316 * 24 +VARIANT = 'Ti/4' + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for SV classification.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'sv-vit' + + # Dataset. + config.dataset_name = 'pileup_coverage' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'vit_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = { + 'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280 + }[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = { + 'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120 + }[version] + config.model.num_layers = { + 'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32 + }[version] + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 200 + config.log_eval_steps = 1000 + config.batch_size = 8 if runlocal else 512 + config.rng_seed = 42 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 3e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.end_learning_rate = 1e-6 + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Evaluation: + config.global_metrics = [ + 'truvari_recall_events', + 'truvari_precision_events', + 'truvari_recall', + 'truvari_precision', + 'gt_concordance', + 'nonref_concordance', + ] + + if runlocal: + config.count_flops = False + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/svvit/configs/pileup_coverage_xvit_config.py b/scenic/projects/svvit/configs/pileup_coverage_xvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..2ff1f573eaaf223604a014363e460fb41ae2857d --- /dev/null +++ b/scenic/projects/svvit/configs/pileup_coverage_xvit_config.py @@ -0,0 +1,106 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for X-ViT on structural variant classification using coverage pileups. + +""" + +import ml_collections + +_TRAIN_SIZE = 31_316 * 24 + + +def get_config(): + """Returns the X-ViT experiment configuration for SV classification.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'sv-xvit-jf' + + # Dataset. + config.dataset_name = 'pileup_coverage' + config.data_dtype_str = 'float32' + + # Model. + config.model_name = 'xvit_classification' + config.model_dtype_str = 'float32' + config.model = ml_collections.ConfigDict() + config.model.patches = ml_collections.ConfigDict() + config.model.hidden_size = 768 + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [4, 4] + config.model.mlp_dim = 3072 + config.model.num_layers = 12 + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model.transformer_encoder_configs = ml_collections.ConfigDict() + config.model.transformer_encoder_configs.type = 'global' + config.model.attention_fn = 'standard' + config.model.attention_configs = ml_collections.ConfigDict() + config.model.attention_configs.num_heads = 12 + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 200 + config.log_eval_steps = 1000 + config.batch_size = 128 # >=256 causes RESOURCE EXHAUSTED errors. + config.rng_seed = 42 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 3e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.end_learning_rate = 1e-5 + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Evaluation: + config.global_metrics = [ + 'truvari_recall_events', + 'truvari_precision_events', + 'truvari_recall', + 'truvari_precision', + 'gt_concordance', + 'nonref_concordance', + ] + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/svvit/configs/vit_config.py b/scenic/projects/svvit/configs/vit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..e22a81bac198d476297fcd4e633f0fd9c760d8af --- /dev/null +++ b/scenic/projects/svvit/configs/vit_config.py @@ -0,0 +1,114 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for ViT on structural variant classification using pileups. + +""" + +import ml_collections + + +_TRAIN_SIZE = 30_000 * 18 +VERSION = 'Ti' + +HIDDEN_SIZE = {'Ti': 192, 'S': 384, 'B': 768, 'L': 1024, 'H': 1280} +NUM_HEADS = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16} +MLP_DIM = {'Ti': 768, 'S': 1536, 'B': 3072, 'L': 4096, 'H': 5120} +NUM_LAYERS = {'Ti': 12, 'S': 12, 'B': 12, 'L': 24, 'H': 24} + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for SV classification.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'sv-vit' + + # Dataset. + config.dataset_name = 'pileup_window' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.train_path = '' + config.dataset_configs.eval_path = '' + config.dataset_configs.test_path = '' + + # Model. + config.model_name = 'vit_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = HIDDEN_SIZE[VERSION] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [1, 256] + config.model.num_heads = NUM_HEADS[VERSION] + config.model.mlp_dim = MLP_DIM[VERSION] + config.model.num_layers = NUM_LAYERS[VERSION] + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 20 + config.log_eval_steps = 100 + config.batch_size = 8 if runlocal else 512 + config.rng_seed = 42 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 3e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.end_learning_rate = 1e-6 + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Evaluation: + config.global_metrics = [ + 'truvari_recall_events', + 'truvari_precision_events', + 'truvari_recall', + 'truvari_precision', + 'gt_concordance', + 'nonref_concordance', + ] + + if runlocal: + config.count_flops = False + return config + + diff --git a/scenic/projects/svvit/configs/vit_finetuning_config.py b/scenic/projects/svvit/configs/vit_finetuning_config.py new file mode 100644 index 0000000000000000000000000000000000000000..64352dacb4259a60a118b5d7ed5466f5be695c27 --- /dev/null +++ b/scenic/projects/svvit/configs/vit_finetuning_config.py @@ -0,0 +1,129 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for ViT on structural variant classification using pileups. + +""" + +import ml_collections + +_TRAIN_SIZE = 30_000 * 19 +VERSION = 'S' # Version has to match with the pretraining job. + + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for SV classification.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'sv-vit' + + # Dataset. + config.dataset_name = 'pileup_window' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + + # Model. + config.model_name = 'vit_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = { + 'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280 + }[VERSION] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [1, 256] + config.model.num_heads = { + 'Ti': 3, + 'S': 6, + 'B': 12, + 'L': 16, + 'H': 16, + }[VERSION] + config.model.mlp_dim = { + 'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120 + }[VERSION] + config.model.num_layers = { + 'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32, + }[VERSION] + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model_dtype_str = 'float32' + + # Pretrained model info. + config.init_from = ml_collections.ConfigDict() + config.init_from.xm = None + config.init_from.checkpoint_path = None + + # Training. + config.trainer_name = 'transfer_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 200 + config.log_eval_steps = 1000 + config.batch_size = 8 if runlocal else 512 + config.rng_seed = 42 + config.init_head_bias = -10.0 + + # Learning rate. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant' + config.lr_configs.base_learning_rate = None + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Evaluation: + config.global_metrics = [ + 'truvari_recall_events', + 'truvari_precision_events', + 'truvari_recall', + 'truvari_precision', + 'gt_concordance', + 'nonref_concordance', + ] + + if runlocal: + config.count_flops = False + return config + + diff --git a/scenic/projects/svvit/configs/xvit_config.py b/scenic/projects/svvit/configs/xvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..76436156190d123041a22e430c2b64ffd03814a9 --- /dev/null +++ b/scenic/projects/svvit/configs/xvit_config.py @@ -0,0 +1,115 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for X-ViT on structural variant classification using pileups. + +""" + +import ml_collections + +_TRAIN_SIZE = 30_000 * 18 +VERSION = 'Ti' + +HIDDEN_SIZE = {'Ti': 192, 'S': 384, 'B': 768, 'L': 1024, 'H': 1280} +NUM_HEADS = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16} +MLP_DIM = {'Ti': 768, 'S': 1536, 'B': 3072, 'L': 4096, 'H': 5120} +NUM_LAYERS = {'Ti': 12, 'S': 12, 'B': 12, 'L': 24, 'H': 24} + + +def get_config(): + """Returns the X-ViT experiment configuration for SV classification.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'sv-xvit' + + # Dataset. + config.dataset_name = 'pileup_window' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.train_path = '' + config.dataset_configs.eval_path = '' + config.dataset_configs.test_path = '' + + # Model. + config.model_name = 'xvit_classification' + config.model_dtype_str = 'float32' + config.model = ml_collections.ConfigDict() + config.model.patches = ml_collections.ConfigDict() + config.model.hidden_size = HIDDEN_SIZE[VERSION] + config.model.patches.size = [1, 256] + config.model.mlp_dim = MLP_DIM[VERSION] + config.model.num_layers = NUM_LAYERS[VERSION] + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model.transformer_encoder_configs = ml_collections.ConfigDict() + config.model.transformer_encoder_configs.type = 'global' + config.model.attention_fn = 'performer' + config.model.attention_configs = ml_collections.ConfigDict() + config.model.attention_configs.attention_fn_cls = 'generalized' + config.model.attention_configs.attention_fn_configs = None + config.model.attention_configs.num_heads = NUM_HEADS[VERSION] + config.model.num_heads = NUM_HEADS[VERSION] + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 20 + config.log_eval_steps = 100 + config.batch_size = 512 + config.rng_seed = 42 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 3e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.end_learning_rate = 1e-6 + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Evaluation: + config.global_metrics = [ + 'truvari_recall_events', + 'truvari_precision_events', + 'truvari_recall', + 'truvari_precision', + 'gt_concordance', + 'nonref_concordance', + ] + + return config + + diff --git a/scenic/projects/svvit/configs/xvit_config_eval.py b/scenic/projects/svvit/configs/xvit_config_eval.py new file mode 100644 index 0000000000000000000000000000000000000000..1b276510ac78a5047f37d39458a6f0008ff161ee --- /dev/null +++ b/scenic/projects/svvit/configs/xvit_config_eval.py @@ -0,0 +1,49 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for ViT on structural variant classification using pileups. + +""" + +import ml_collections + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for SV classification.""" + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'sv-vit_offline_eval' + config.trainer_name = 'inference' + + # Dataset. + config.dataset_name = 'pileup_window' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.train_path = '' + config.dataset_configs.test_path = '' + config.dataset_configs.eval_path = '' + + # Model to be evaluated. + config.model_name = 'xvit_classification' + config.init_from = ml_collections.ConfigDict() + config.init_from.xm = (None, None) + config.batch_size = 8 if runlocal else 512 + config.rng_seed = 42 + config.save_predictions_on_cns = True + + return config + + diff --git a/scenic/projects/svvit/configs/xvit_finetuning_config.py b/scenic/projects/svvit/configs/xvit_finetuning_config.py new file mode 100644 index 0000000000000000000000000000000000000000..0136fa492bc5f01325934609419b9c409f5004d1 --- /dev/null +++ b/scenic/projects/svvit/configs/xvit_finetuning_config.py @@ -0,0 +1,149 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for ViT on structural variant classification using pileups. + +""" + +import ml_collections + +_TRAIN_SIZE = 30_000 * 19 +VERSION = 'S' # Version has to match with the pretraining job. + + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for SV classification.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'sv-xvit' + + # Dataset. + config.dataset_name = 'pileup_window' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + + # Model. + config.model_name = 'xvit_classification' + config.model_dtype_str = 'float32' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = { + 'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280 + }[VERSION] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [1, 256] + config.model.num_heads = { + 'Ti': 3, + 'S': 6, + 'B': 12, + 'L': 16, + 'H': 16, + }[VERSION] + config.model.mlp_dim = { + 'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120 + }[VERSION] + config.model.num_layers = { + 'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32, + }[VERSION] + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model_dtype_str = 'float32' + config.model.transformer_encoder_configs = ml_collections.ConfigDict() + config.model.transformer_encoder_configs.type = 'global' + config.model.attention_fn = 'performer' + config.model.attention_configs = ml_collections.ConfigDict() + config.model.attention_configs.attention_fn_cls = 'generalized' + config.model.attention_configs.attention_fn_configs = None + config.model.attention_configs.num_heads = { + 'Ti': 3, + 'S': 6, + 'B': 12, + 'L': 16, + 'H': 16, + }['Ti'] + + # Pretrained model info. + config.init_from = ml_collections.ConfigDict() + config.init_from.xm = None + config.init_from.checkpoint_path = '' + + # Training. + config.trainer_name = 'transfer_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 50 + config.log_eval_steps = 1000 + config.batch_size = 8 if runlocal else 512 + config.rng_seed = 42 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 3e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = int(0.95 * total_steps) + config.lr_configs.end_learning_rate = 1e-7 + config.lr_configs.warmup_steps = 20_000 + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Evaluation: + config.global_metrics = [ + 'truvari_recall_events', + 'truvari_precision_events', + 'truvari_recall', + 'truvari_precision', + 'gt_concordance', + 'nonref_concordance', + ] + + if runlocal: + config.count_flops = False + return config + + diff --git a/scenic/projects/svvit/datasets/__init__.py b/scenic/projects/svvit/datasets/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/svvit/datasets/pileup_coverage_dataset.py b/scenic/projects/svvit/datasets/pileup_coverage_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..6b8da2f409801e11c543ea03f56f238d068c0b51 --- /dev/null +++ b/scenic/projects/svvit/datasets/pileup_coverage_dataset.py @@ -0,0 +1,318 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the coverage pileup images.""" + +import functools +from typing import Optional, Tuple + +from absl import logging +from flax import jax_utils +import jax +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf + + + +def _extract_metadata_from_first_example(filename: str) -> Tuple[int]: + """Extracts the image shape from the first example.""" + raw_example = next( + iter( + tf.data.TFRecordDataset( + filenames=filename, + compression_type=_filename_to_compression(filename)))) + example = tf.train.Example.FromString(raw_example.numpy()) + + return tuple(example.features.feature['image/shape'].int64_list.value) + + +def _filename_to_compression(filename: str) -> Optional[str]: + return 'GZIP' if tf.strings.regex_full_match(filename, '.*.gz') else None + + +def create_coverage_based_dataset( + filenames: str, + with_label: bool = True, +) -> tf.data.Dataset: + """Creates a coverage based pileup dataset from a filepath. + + Args: + filenames: The data directory/pattern containing data files. + with_label: whether to load the labels or not. + + Returns: + tf.data.Dataset + """ + logging.info('Finding all data files matching the file pattern.') + dataset_files = tf.io.matching_files(filenames) + + # Extract image shape from the first example + shape = _extract_metadata_from_first_example(dataset_files[0]) + + proto_features = { + 'variant/encoded': tf.io.FixedLenFeature(shape=(), dtype=tf.string), + 'image/encoded': tf.io.FixedLenFeature(shape=(), dtype=tf.string), + 'image/shape': tf.io.FixedLenFeature(shape=(len(shape),), dtype=tf.int64), + } + if with_label: + proto_features['label'] = tf.io.FixedLenFeature(shape=1, dtype=tf.int64) + + def _process_input(proto_string): + """Helper function for input function that parses a serialized example.""" + + parsed_features = tf.io.parse_single_example( + serialized=proto_string, features=proto_features) + + features = { + 'image': tf.io.parse_tensor(parsed_features['image/encoded'], tf.uint8), + } + + features['image'].set_shape(shape) + + if with_label: + return features, parsed_features['label'] + else: + return features, None + + compression = _filename_to_compression(dataset_files[0]) + + logging.info('Loading TFRecords as bytes.') + dataset = tf.data.Dataset.from_tensor_slices(dataset_files) + + # pylint: disable=g-long-lambda + # interleave parallelizes the data loading step by interleaving the I/O + # operation to read the file. It speeds up the I/O step. + dataset = dataset.interleave( + lambda filename: tf.data.TFRecordDataset( + filename, + compression_type=compression, + ).map( + _process_input, + num_parallel_calls=tf.data.experimental.AUTOTUNE, + ), + cycle_length=len(dataset_files), + ) + + return dataset + + +def preprocess(features, label): + """Preprocessing code specific to ViT models.""" + label_tensor = tf.cast(tf.squeeze(label, [-1]), tf.int32) + return { + 'inputs': tf.image.resize( + features['image'], + [256, 256]), # Resize pileups to make side length divisible by 4. + 'label': tf.one_hot(label_tensor, 3) + } + + +def build_dataset(dataset_fn, + batch_size=None, + shuffle_buffer_size=256, + seed=None, + strategy=None, + **dataset_kwargs): + """Dataset builder that takes care of strategy, batching and shuffling. + + Args: + dataset_fn: function; A function that loads the dataset. + batch_size: int; Size of the batch. + shuffle_buffer_size: int; Size of the buffer for used for shuffling. + seed: int; Random seed used for shuffling. + strategy: TF strategy that handles the distribution policy. + **dataset_kwargs: dict; Arguments passed to TFDS. + + Returns: + Dataset. + """ + + def _dataset_fn(input_context=None): + """Dataset function.""" + replica_batch_size = batch_size + if input_context: + replica_batch_size = input_context.get_per_replica_batch_size(batch_size) + ds = dataset_fn(**dataset_kwargs) + split = dataset_kwargs.get('split') + if split == 'train': + # First repeat then shuffle, then batch. + ds = ds.repeat() + local_seed = seed # Seed for this machine. + if local_seed is not None and input_context: + local_seed += input_context.input_pipeline_id + ds = ds.shuffle(shuffle_buffer_size, seed=local_seed) + ds = ds.batch(replica_batch_size, drop_remainder=True) + else: # Test and validation. + # First batch then repeat. + ds = ds.batch(replica_batch_size, drop_remainder=False) + ds = ds.repeat() + options = tf.data.Options() + options.experimental_optimization.parallel_batch = True + ds = ds.with_options(options) + return ds.prefetch(tf.data.experimental.AUTOTUNE) + + if strategy: + ds = strategy.experimental_distribute_datasets_from_function(_dataset_fn) + else: + ds = _dataset_fn() + + return ds + + +@datasets.add_dataset('pileup_coverage') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the pileup window train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + prefetch_buffer_size: int; Buffer size for the prefetch. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + + def build_pileup_window_dataset(split): + """dataset_fn called by data.build_dataset(**kwargs).""" + + if split == 'train': + if dataset_configs.train_path: + path = dataset_configs.train_path + else: + # Add path to your training data here: + path = '' + elif split == 'valid': + if dataset_configs.eval_path: + path = dataset_configs.eval_path + else: + # Add path to your validation data here: + path = '' + elif split == 'test': + if dataset_configs.test_path: + path = dataset_configs.test_path + else: + # Add path to your test data here: + path = '' + else: + raise ValueError('Invalid split value.') + + if not path: + raise ValueError('No path provide. Please modify the path variable to ' + 'hardcode the %s path.' %split) + dataset = create_coverage_based_dataset(filenames=path) + + # Creating a Dataset that includes only 1/num_shards of data so the data is + # splitted between different hosts. + num_hosts, host_id = jax.process_count(), jax.process_index() + dataset = dataset.shard(num_shards=num_hosts, index=host_id) + + dataset = dataset.map( + preprocess, num_parallel_calls=tf.data.experimental.AUTOTUNE) + return dataset + + # Use different seed for each host. + if shuffle_seed is None: + local_seed = None + else: + data_seed = 0 + local_seed = data_seed + jax.process_index() + + train_dataset = build_dataset( + dataset_fn=build_pileup_window_dataset, + batch_size=batch_size, + seed=local_seed, + split='train', + strategy=None) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_dataset = dataset_utils.distribute(train_dataset, + dataset_service_address) + + eval_dataset = build_dataset( + dataset_fn=build_pileup_window_dataset, + split='valid', + batch_size=eval_batch_size, + strategy=None) + + test_dataset = build_dataset( + dataset_fn=build_pileup_window_dataset, + split='test', + batch_size=eval_batch_size, + strategy=None) + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + + train_iter = iter(train_dataset) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + train_iter = jax_utils.prefetch_to_device(train_iter, prefetch_buffer_size) + + valid_iter = iter(eval_dataset) + valid_iter = map(dataset_utils.tf_to_numpy, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + valid_iter = map(shard_batches, valid_iter) + valid_iter = jax_utils.prefetch_to_device(valid_iter, prefetch_buffer_size) + + test_iter = iter(test_dataset) + test_iter = map(dataset_utils.tf_to_numpy, test_iter) + test_iter = map(maybe_pad_batches_eval, test_iter) + test_iter = map(shard_batches, test_iter) + test_iter = jax_utils.prefetch_to_device(test_iter, prefetch_buffer_size) + + num_classes = 3 + image_size = 256 + input_shape = [-1, image_size, image_size, 7] + + meta_data = { + 'num_classes': num_classes, + 'input_shape': input_shape, + 'num_train_examples': 31000 * 24, + 'num_eval_examples': 31000 * 6, + 'num_test_examples': 31000, + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': True, + } + + return dataset_utils.Dataset(train_iter, valid_iter, test_iter, meta_data) diff --git a/scenic/projects/svvit/datasets/pileup_window_dataset.py b/scenic/projects/svvit/datasets/pileup_window_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..d3a685537c5b5ea89cf11c53a1a7ceb96c286cc1 --- /dev/null +++ b/scenic/projects/svvit/datasets/pileup_window_dataset.py @@ -0,0 +1,338 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the window pileup images.""" + +import functools +from typing import Optional, Dict, Tuple + +from absl import logging +from flax import jax_utils +import jax +import jax.numpy as jnp +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf + + +PILEUP_FLANK = 150 +PILEUP_HEIGHT = 299 +PILEUP_FLANK_PAIRED = 500 +PILEUP_HEIGHT_PAIRED = 149 +PILEUP_NUM_CHANNELS = 7 + + +def pileup_parser( + serialized: str, + mode: str, + pileup_height: int, + pileup_width: int, +) -> Tuple[Dict[str, tf.Tensor], Optional[tf.Tensor]]: + """Parses an EventFeatures serialized example into feature and label tensors.""" + example = tf.io.parse_single_example( + serialized, { + 'event_name': + tf.io.FixedLenFeature([1], dtype=tf.string), + 'pileup_1d': + tf.io.FixedLenFeature( + [pileup_height * pileup_width * PILEUP_NUM_CHANNELS], + dtype=tf.float32), + 'zygosity': + tf.io.FixedLenFeature([1], dtype=tf.int64), + 'event_len': + tf.io.FixedLenFeature([1], dtype=tf.int64), + }) + + features = { + 'pileup': + tf.reshape(example['pileup_1d'], [ + pileup_height, + pileup_width, + PILEUP_NUM_CHANNELS, + ]), + 'key': example['event_name'], + 'event_len': + tf.squeeze(example['event_len'], [-1]) + } + + # Define the label. + if mode == 'train': + label_tensor = tf.squeeze(example['zygosity'], [-1]) + labels = tf.one_hot(label_tensor, 3) + else: + labels = None + + return features, labels + + +def pileup_normalizer( + features: Dict[str, tf.Tensor], + labels: tf.Tensor, +) -> Tuple[Dict[str, tf.Tensor], tf.Tensor]: + """Normalization.""" + features['pileup'] = features['pileup'] / 255 + return features, labels + + +def get_padding(key_length, max_length=100): + pad = '' + for padding_size in range(1, max_length): + if tf.math.equal(padding_size, max_length - key_length): + pad = padding_size * '#' + return pad + + +def preprocess(features, label): + """Preprocessing code specific to ViT models.""" + padded_key = tf.strings.join( + [get_padding(tf.strings.length(features['key'])), features['key']]) + + return { + 'inputs': tf.image.resize( + features['pileup'], + [256, 256]), # Resize pileups to make side length divisible by 4. + 'label': label, + 'event_len': features['event_len'], + 'key': tf.strings.unicode_decode(padded_key, 'UTF-8').to_tensor(), + 'key_length': tf.strings.length(features['key']), + } + + +def get_dataset_name(dataset_path: Optional[str] = None): + """Extract dataset name for eval_iter in xmanager measurements. + + Parent directory of the dataset files is used as its name. + Args: + dataset_path: Path to the dataset files. + + Returns: + Dataset name. + """ + return 'test' if not dataset_path else dataset_path.split('/')[-2] + + +def build_dataset(dataset_fn, + batch_size=None, + shuffle_buffer_size=256, + seed=None, + strategy=None, + **dataset_kwargs): + """Dataset builder that takes care of strategy, batching and shuffling. + + Args: + dataset_fn: function; A function that loads the dataset. + batch_size: int; Size of the batch. + shuffle_buffer_size: int; Size of the buffer for used for shuffling. + seed: int; Random seed used for shuffling. + strategy: TF strategy that handles the distribution policy. + **dataset_kwargs: dict; Arguments passed to TFDS. + + Returns: + Dataset. + """ + + def _dataset_fn(input_context=None): + """Dataset function.""" + replica_batch_size = batch_size + if input_context: + replica_batch_size = input_context.get_per_replica_batch_size(batch_size) + ds = dataset_fn(**dataset_kwargs) + split = dataset_kwargs.get('split') + if split == 'train': + # First repeat then shuffle, then batch. + ds = ds.repeat() + local_seed = seed # Seed for this machine. + if local_seed is not None and input_context: + local_seed += input_context.input_pipeline_id + ds = ds.shuffle(shuffle_buffer_size, seed=local_seed) + ds = ds.batch(replica_batch_size, drop_remainder=True) + else: # Test and validation. + # First batch then repeat. + ds = ds.batch(replica_batch_size, drop_remainder=False) + ds = ds.repeat() + options = tf.data.Options() + options.experimental_optimization.parallel_batch = True + ds = ds.with_options(options) + return ds.prefetch(tf.data.experimental.AUTOTUNE) + + if strategy: + ds = strategy.experimental_distribute_datasets_from_function(_dataset_fn) + else: + ds = _dataset_fn() + + return ds + + +@datasets.add_dataset('pileup_window') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the pileup window train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + prefetch_buffer_size: int; Buffer size for the prefetch. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + + def build_pileup_window_dataset(split): + """dataset_fn called by data.build_dataset(**kwargs).""" + + if split == 'train': + if dataset_configs.train_path: + path = dataset_configs.train_path + else: + # Add path to your training data here: + path = '' + elif split == 'valid': + if dataset_configs.eval_path: + path = dataset_configs.eval_path + else: + # Add path to your test data here: + path = '' + elif split == 'test': + if dataset_configs.test_path: + path = dataset_configs.test_path + else: + # Add path to your test data here: + path = '' + if not path: + raise ValueError('No path provide. Please modify the path variable to ' + 'hardcode the %s path.' %split) + dataset_files = tf.io.matching_files(path) + + # Creating a Dataset that includes only 1/num_shards of data so the data is + # splitted between different hosts. + num_hosts, host_id = jax.process_count(), jax.process_index() + + if len(dataset_files) >= num_hosts: + # Sharding on data sources (e.g. filenames) if there are enough files. + dataset_files = np.array_split(dataset_files, num_hosts)[host_id] + dataset = tf.data.TFRecordDataset( + dataset_files, num_parallel_reads=tf.data.experimental.AUTOTUNE) + else: + # Sharding using tf.shard. + dataset = tf.data.TFRecordDataset( + dataset_files, num_parallel_reads=tf.data.experimental.AUTOTUNE) + dataset = dataset.shard(num_shards=num_hosts, index=host_id) + + # pylint: disable=g-long-lambda + dataset = dataset.map( + lambda x: pileup_parser( + x, mode='train', pileup_height=299, pileup_width=299), + num_parallel_calls=tf.data.experimental.AUTOTUNE) + dataset = dataset.map( + pileup_normalizer, num_parallel_calls=tf.data.experimental.AUTOTUNE) + + dataset = dataset.map( + preprocess, num_parallel_calls=tf.data.experimental.AUTOTUNE) + return dataset + + # Use different seed for each host. + if shuffle_seed is None: + local_seed = None + else: + data_seed = 0 + local_seed = data_seed + jax.process_index() + + train_dataset = build_dataset( + dataset_fn=build_pileup_window_dataset, + batch_size=batch_size, + seed=local_seed, + split='train', + strategy=None) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_dataset = dataset_utils.distribute(train_dataset, + dataset_service_address) + + eval_dataset = build_dataset( + dataset_fn=build_pileup_window_dataset, + split='valid', + batch_size=eval_batch_size, + strategy=None) + + test_dataset = build_dataset( + dataset_fn=build_pileup_window_dataset, + split='test', + batch_size=eval_batch_size, + strategy=None) + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + + train_iter = iter(train_dataset) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + train_iter = jax_utils.prefetch_to_device(train_iter, prefetch_buffer_size) + + valid_iter = iter(eval_dataset) + valid_iter = map(dataset_utils.tf_to_numpy, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + valid_iter = map(shard_batches, valid_iter) + valid_iter = jax_utils.prefetch_to_device(valid_iter, prefetch_buffer_size) + + test_iter = iter(test_dataset) + test_iter = map(dataset_utils.tf_to_numpy, test_iter) + test_iter = map(maybe_pad_batches_eval, test_iter) + test_iter = map(shard_batches, test_iter) + test_iter = jax_utils.prefetch_to_device(test_iter, prefetch_buffer_size) + + num_classes = 3 + image_size = 256 + input_shape = [-1, image_size, image_size, 7] + + meta_data = { + 'num_classes': num_classes, + 'input_shape': input_shape, + 'num_train_examples': 30_000 * 19, + 'num_eval_examples': 30_000 * 5, + 'num_test_examples': 30_000, + 'test_name': get_dataset_name(dataset_configs.test_path), + 'eval_name': get_dataset_name(dataset_configs.eval_path), + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': True, + } + + return dataset_utils.Dataset(train_iter, valid_iter, test_iter, meta_data) diff --git a/scenic/projects/svvit/inference.py b/scenic/projects/svvit/inference.py new file mode 100644 index 0000000000000000000000000000000000000000..7e6516ff25c49c5b276eaba772cc8eb8de97808e --- /dev/null +++ b/scenic/projects/svvit/inference.py @@ -0,0 +1,316 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""SVViT Inference Script.""" + +import datetime +import functools +import os +import pickle +from typing import Any, Callable, Optional, Type + +from absl import logging +from clu import metric_writers +from flax import jax_utils +import flax.linen as nn +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.common_lib import debug_utils +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.svvit import classification_trainer as trainer +from scenic.projects.svvit import metrics as sv_metric +from scenic.train_lib import optimizers +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils +import tensorflow as tf + + +# Aliases for custom types: +Batch = dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, dict[str, jnp.ndarray]], + dict[str, tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] + + +def restore_train_state( + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model: Any, + dataset: dataset_utils.Dataset, +): + """Initializes the model state.""" + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, _, _) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + # Create optimizer. + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, 0, params=params) + # We jit this, such that the arrays that are created on the same device as the + # input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + rng, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={}) + init_checkpoint_path = config.init_from.get('checkpoint_path') + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + current_step = restored_train_state.global_step + logging.info( + 'Parameter summary after initialising from restored train state ' + 'at step %d:', current_step) + debug_utils.log_param_shapes(restored_train_state.params) + return restored_train_state, current_step + + +def inference_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + debug: Optional[bool] = False +): + """Runs a single step of training.""" + variables = {'params': train_state.params, **train_state.model_state} + capture_intermediates = lambda mdl, _: mdl.name == 'pre_logits' + logits, intermediate = flax_model.apply( + variables, + batch['inputs'], + train=False, + mutable=False, + debug=debug, + capture_intermediates=capture_intermediates, + ) + return nn.softmax( + logits, + axis=-1), intermediate['intermediates']['pre_logits']['__call__'][0] + + +def compute_similarity_scores( + train_state: train_utils.TrainState, + iterator, + eval_step_fn, + eval_steps, + workdir, + lead_host, +): + """Computes similarity scores and dump them directly instead of metrics.""" + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + all_logits, all_keys, all_labels, all_batch_masks, all_intermediate = [], [], [], [], [] + # Do this to ensure we definitely cover the full test set + eval_steps = int(np.ceil(1.3 * eval_steps)) + logging.info('Number of eval steps is %s', eval_steps) + for step in range(eval_steps): + with jax.profiler.StepTraceAnnotation('eval', step_num=step): + eval_batch = next(iterator) + assert 'key' in eval_batch, 'Keys must be added to batch' + keys = eval_batch['key'] + labels = eval_batch['label'] + batch_masks = eval_batch['batch_mask'] + del eval_batch['key'] + del eval_batch['label'] + + logits, intermediate = eval_step_fn(train_state, eval_batch) + gathered_logits, gathered_keys, gathered_labels, gathered_batch_masks, gathered_intermediate = all_gather_and_unreplicate( + (logits, keys, labels, batch_masks, intermediate)) + all_logits.append(np.concatenate(gathered_logits, axis=0)) + all_intermediate.append(np.concatenate(gathered_intermediate, axis=0)) + all_labels.append(np.concatenate(gathered_labels, axis=0)) + all_keys.append( + tf.strings.unicode_encode( + np.concatenate(gathered_keys, axis=0), 'UTF-8')) + all_batch_masks.append(np.concatenate(gathered_batch_masks, axis=0)) + + logging.info('all_scores.shape: %s', str(len(all_keys))) + + timestamp = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S') + fname_logits = os.path.join(workdir, f'logits_offline_eval_{timestamp}') + fname_intermediate = os.path.join(workdir, + f'intermediate_offline_eval_{timestamp}') + fname_labels = os.path.join(workdir, f'labels_offline_eval_{timestamp}') + fname_keys = os.path.join(workdir, f'keys_offline_eval_{timestamp}') + fname_masks = os.path.join(workdir, f'masks_offline_eval_{timestamp}') + if lead_host: + logging.info('Logging results to %s', fname_logits) + log_to_cns( + predictions=np.concatenate(all_logits, axis=0), + filename_prefix=fname_logits) + log_to_cns( + predictions=np.concatenate(all_intermediate, axis=0), + filename_prefix=fname_intermediate) + log_to_cns( + predictions=np.concatenate(all_keys, axis=0), + filename_prefix=fname_keys) + log_to_cns( + predictions=np.concatenate(all_labels, axis=0), + filename_prefix=fname_labels) + log_to_cns( + predictions=np.concatenate(all_batch_masks, axis=0), + filename_prefix=fname_masks) + + +def log_to_cns(predictions, filename_prefix: str): + """Saves predictions to CNS. + + Args: + predictions: Serialised predictions. + filename_prefix: File prefix to save the results to. + """ + with open(filename_prefix + '.pkl', 'wb') as f: + # Protocol needs to be set to save large files. + pickle.dump(predictions, f, protocol=4) + + +def all_gather_and_unreplicate(inputs): + return jax_utils.unreplicate( + jax.pmap(lambda x: jax.lax.all_gather(x, 'batch'), 'batch')(inputs)) + + +def evaluate( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> dict[str, Any]: + """Evaluates the model. + + This function loads a pretrained model, optionally overrides some arguments + related to evaluation in its original config, and then evaluates the model + on the specified dataset. + + Args: + rng: Jax rng key. + config: Configurations for evaluation. Can be reused to override some + settings from the training config. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + eval_summary: Dictionary with the evaluation summary + """ + lead_host = jax.process_index() == 0 + + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + # Initialize model. + train_state, current_step = restore_train_state(rng, config, model, dataset) + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + eval_step_pmapped = jax.pmap( + functools.partial( + trainer.eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + all_gather=config.get('global_metrics', False), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + inference_step_pmapped = jax.pmap( + functools.partial( + inference_step, + flax_model=model.flax_model, + debug=config.debug_eval), + axis_name='batch', + donate_argnums=(1,), + ) + # If `global_metrics` are set in the config and we are the lead host + compute_global_metrics = False + if config.get('global_metrics', False) and lead_host: + compute_global_metrics = True + if compute_global_metrics: + global_metrics_evaluator = sv_metric.TruvariGlobalEvaluator( + config.global_metrics) + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summary = {} + # Ceil rounding such that we include the last incomplete batch. + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / config.batch_size)) + eval_metrics = [] + if not config.save_predictions_on_cns: + for s in range(total_eval_steps): + eval_batch = next(dataset.valid_iter) + e_metrics, e_output, e_batch = eval_step_pmapped(train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + logging.info('eval metircs at step %d', s) + if compute_global_metrics: + # Unreplicate outputs of eval_step_pmapped that are coming from + # `lax.all_gather`, fetch to the host and add to the Evaluator: + e_batch_mask = train_utils.unreplicate_and_get( + e_batch['batch_mask']).astype(bool) + global_metrics_evaluator.add_batch_of_examples( + target=train_utils.unreplicate_and_get( + e_batch['label'])[e_batch_mask], + output=train_utils.unreplicate_and_get(e_output)[e_batch_mask]) + del e_batch, e_output, e_batch_mask + eval_global_metrics_summary = None + if compute_global_metrics: + if dataset.meta_data['num_eval_examples'] != len( + global_metrics_evaluator): + logging.warning( + 'Number of eval (valid/test) examples in the dataset metadata is ' + '%d, however the global evaluator captured only %d of them', + dataset.meta_data['num_eval_examples'], + len(global_metrics_evaluator)) + eval_global_metrics_summary = ( + global_metrics_evaluator.compute_metrics(clear_annotations=True)) + + eval_summary.update( + train_utils.log_eval_summary( + step=current_step, + eval_metrics=eval_metrics, + extra_eval_summary=eval_global_metrics_summary, + writer=writer, + prefix='SV_test')) + del eval_metrics, eval_global_metrics_summary + else: + compute_similarity_scores( + train_state=train_state, + iterator=dataset.valid_iter, + eval_step_fn=inference_step_pmapped, + eval_steps=total_eval_steps, + workdir=workdir, + lead_host=lead_host) + writer.flush() + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return eval_summary diff --git a/scenic/projects/svvit/main.py b/scenic/projects/svvit/main.py new file mode 100644 index 0000000000000000000000000000000000000000..fb8869477ee3b8a293b705f37d10d42ae2084545 --- /dev/null +++ b/scenic/projects/svvit/main.py @@ -0,0 +1,80 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for FastViT.""" + +from typing import Any + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.svvit import classification_trainer +from scenic.projects.svvit import inference +from scenic.projects.svvit import transfer_trainer +from scenic.projects.svvit import vit +from scenic.projects.svvit import xvit +# pylint: disable=unused-import +from scenic.projects.svvit.datasets import pileup_coverage_dataset +from scenic.projects.svvit.datasets import pileup_window_dataset +# pylint: enable=unused-import +from scenic.train_lib import train_utils +from scenic.train_lib import trainers + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name: str) -> Any: + """Returns model class given its name.""" + if model_name == 'xvit_classification': + return xvit.XViTClassificationModel + elif model_name == 'vit_classification': + return vit.ViTClassificationModel + elif model_name == 'topological_vit_classification': + return vit.TopologicalViTClassificationModel + else: + raise ValueError(f'Unrecognized model: {model_name}.') + + +def get_trainer(trainer_name: str) -> Any: + """Gets the trainer matching the given name.""" + if trainer_name == 'classification_trainer': + return classification_trainer.train + elif trainer_name == 'transfer_trainer': + return transfer_trainer.train + elif trainer_name == 'inference': + return inference.evaluate + else: + return trainers.get_trainer(trainer_name) + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for SVViT.""" + model_cls = get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + get_trainer(config.trainer_name)( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/svvit/metrics.py b/scenic/projects/svvit/metrics.py new file mode 100644 index 0000000000000000000000000000000000000000..fbb1850049abb5a08fa6aa69ac2649d369838d64 --- /dev/null +++ b/scenic/projects/svvit/metrics.py @@ -0,0 +1,240 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Functions to compute Truvari metrics using jax.numpy. + +https://github.com/spiralgenetics/truvari/wiki/bench +""" + +from typing import Optional, List, Dict + +import numpy as np + +_EPSILON = 1e-5 + + +def truvari_precision( + logits: np.ndarray, + one_hot_targets: np.ndarray, +) -> Dict[str, float]: + """Computes genotype-level precision. + + Reference events are not considered. + + Args: + logits: float array; Output of model in shape [batch, ..., num_classes]. + one_hot_targets: Multi hot vector of shape [batch, ..., num_classes]. + + Returns: + The value of categorical precision. + """ + preds = np.argmax(logits, axis=-1) + targets = np.argmax(one_hot_targets, axis=-1) + correct = np.equal(preds, targets) + incorrect = np.not_equal(preds, targets) + + non_ref_targets = np.not_equal(targets, 0) + non_ref_preds = np.not_equal(preds, 0) + + tp = np.sum(non_ref_targets & correct) + fp = np.sum(non_ref_preds & incorrect) + + return {'truvari_precision': np.divide(tp, tp + fp + _EPSILON)} + + +def truvari_recall( + logits: np.ndarray, + one_hot_targets: np.ndarray, +) -> Dict[str, float]: + """Computes genotype-level recall. + + Reference events are not considered. + + Args: + logits: float array; Output of model in shape [batch, ..., num_classes]. + one_hot_targets: Multi hot vector of shape [batch, ..., num_classes]. + + Returns: + The value of categorical recall. + """ + preds = np.argmax(logits, axis=-1) + targets = np.argmax(one_hot_targets, axis=-1) + correct = np.equal(preds, targets) + incorrect = np.not_equal(preds, targets) + + non_ref_targets = np.not_equal(targets, 0) + + tp = np.sum(non_ref_targets & correct) + fn = np.sum(non_ref_targets & incorrect) + + return {'truvari_recall': np.divide(tp, tp + fn + _EPSILON)} + + +def truvari_precision_events( + logits: np.ndarray, + one_hot_targets: np.ndarray, +) -> Dict[str, float]: + """Computes event-level precision, regardless of the genotype match. + + Args: + logits: float array; Output of model in shape [batch, ..., num_classes]. + one_hot_targets: Multi hot vector of shape [batch, ..., num_classes]. + + Returns: + The value of precision events. + """ + preds = np.not_equal(np.argmax(logits, axis=-1), 0) + targets = np.not_equal(np.argmax(one_hot_targets, axis=-1), 0) + correct = np.equal(preds, targets) + incorrect = np.not_equal(preds, targets) + tp = np.sum(targets & correct) + fp = np.sum(preds & incorrect) + + return {'truvari_precision_events': np.divide(tp, tp + fp + _EPSILON)} + + +def truvari_recall_events( + logits: np.ndarray, + one_hot_targets: np.ndarray, +) -> Dict[str, float]: + """Computes event-level recall, regardless of the genotype match. + + Args: + logits: float array; Output of model in shape [batch, ..., num_classes]. + one_hot_targets: Multi hot vector of shape [batch, ..., num_classes]. + + Returns: + The value of recall events. + """ + + preds = np.not_equal(np.argmax(logits, axis=-1), 0) + targets = np.not_equal(np.argmax(one_hot_targets, axis=-1), 0) + correct = np.equal(preds, targets) + incorrect = np.not_equal(preds, targets) + + tp = np.sum(targets & correct) + fn = np.sum(targets & incorrect) + + return {'truvari_recall_events': np.divide(tp, tp + fn + _EPSILON)} + + +def gt_concordance( + logits: np.ndarray, + one_hot_targets: np.ndarray, +) -> Dict[str, float]: + """Computes the genotype concordance. + + Genotype concordance is the fraction of predicted genotypes that exactly + match the call set genotype. + + Args: + logits: float array; Output of model in shape [batch, ..., num_classes]. + one_hot_targets: Multi hot vector of shape [batch, ..., num_classes]. + + Returns: + The value of genotype concordance. + """ + preds = np.argmax(logits, axis=-1) + targets = np.argmax(one_hot_targets, axis=-1) + correct = np.equal(preds, targets) + + return {'gt_concordance': np.divide(np.sum(correct), len(preds))} + + +def nonref_concordance( + logits: np.ndarray, + one_hot_targets: np.ndarray, +) -> Dict[str, float]: + """Computes non-reference concordance. + + Non reference concordance treats heterozygous and homozygous alternate + genotypes as equivalent. + + Args: + logits: float array; Output of model in shape [batch, ..., num_classes]. + one_hot_targets: Multi hot vector of shape [batch, ..., num_classes]. + + Returns: + The value of non reference concordance. + """ + + preds = np.not_equal(np.argmax(logits, axis=-1), 0) + targets = np.not_equal(np.argmax(one_hot_targets, axis=-1), 0) + correct = np.equal(preds, targets) + + return {'nonref_concordance': np.divide(np.sum(correct), len(preds))} + + +class TruvariGlobalEvaluator(): + """Evaluator used for global metrics evaluation.""" + + def __init__(self, global_metrics: List[str]): + self.global_metrics = global_metrics + self.batches = None + self._num_examples_added = 0 + + def add_batch_of_examples(self, target: np.ndarray, output: np.ndarray): + """Add a batch of examples to the evaluator. + + Args: + target: Target to be predicted as a Numpy array. + output: Output from the model as a Numpy array. + """ + self._num_examples_added += output.shape[0] + if self.batches is None: + self.batches = (target, output) + else: # Append targets and outputs for the new examples. + self.batches = (np.append(self.batches[0], target, axis=0), + np.append(self.batches[1], output, axis=0)) + + def compute_metrics(self, + clear_annotations: Optional[bool] = True + ) -> Dict[str, float]: + """Computes the relevant metrics for all added pairs.""" + metrics = {} + if 'truvari_recall_events' in self.global_metrics: + metrics.update( + truvari_recall_events( + one_hot_targets=self.batches[0], logits=self.batches[1])) + if 'truvari_precision_events' in self.global_metrics: + metrics.update( + truvari_precision_events( + one_hot_targets=self.batches[0], logits=self.batches[1])) + if 'truvari_recall' in self.global_metrics: + metrics.update( + truvari_recall( + one_hot_targets=self.batches[0], logits=self.batches[1])) + if 'truvari_precision' in self.global_metrics: + metrics.update( + truvari_precision( + one_hot_targets=self.batches[0], logits=self.batches[1])) + if 'gt_concordance' in self.global_metrics: + metrics.update( + gt_concordance( + one_hot_targets=self.batches[0], logits=self.batches[1])) + if 'nonref_concordance' in self.global_metrics: + metrics.update( + nonref_concordance( + one_hot_targets=self.batches[0], logits=self.batches[1])) + + if clear_annotations: + self.clear() + return metrics + + def clear(self): + self.batches = None + self._num_examples_added = 0 + + def __len__(self): + return self._num_examples_added diff --git a/scenic/projects/svvit/tests/__init__.py b/scenic/projects/svvit/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/svvit/tests/metrics_test.py b/scenic/projects/svvit/tests/metrics_test.py new file mode 100644 index 0000000000000000000000000000000000000000..fd99dbef93d5b8346e7f4e1bfa441a555c842d7b --- /dev/null +++ b/scenic/projects/svvit/tests/metrics_test.py @@ -0,0 +1,50 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for functions in metrics.py.""" + +from absl.testing import absltest +from absl.testing import parameterized +import jax.numpy as jnp +from scenic.projects.svvit import metrics + + +class MetricsTest(parameterized.TestCase): + + def setUp(self): + self.one_hot_targets = jnp.array([[1, 0, 0], [0, 0, 1], [0, 1, 0], + [0, 1, 0]]) + self.logits = jnp.array([[0.41, 0.39, 0.2], [0.4, 0.6, 0], [0.5, 0.1, 0.4], + [0.3, 0.5, 0.2]]) + super().setUp() + + def test_truvari_presicion(self): + m = metrics.truvari_precision(self.logits, self.one_hot_targets) # pytype: disable=wrong-arg-types # jnp-type + self.assertAlmostEqual(m['truvari_precision'], 0.5, places=5) + + def test_truvari_recall(self): + m = metrics.truvari_recall(self.logits, self.one_hot_targets) # pytype: disable=wrong-arg-types # jnp-type + self.assertAlmostEqual(m['truvari_recall'], 1.0 / 3.0, places=5) + + def test_truvari_presicion_events(self): + m = metrics.truvari_precision_events(self.logits, self.one_hot_targets) # pytype: disable=wrong-arg-types # jnp-type + self.assertAlmostEqual(m['truvari_precision_events'], 1.0, places=5) + + def test_truvari_recall_events(self): + m = metrics.truvari_recall_events(self.logits, self.one_hot_targets) # pytype: disable=wrong-arg-types # jnp-type + self.assertAlmostEqual(m['truvari_recall_events'], 2.0 / 3.0, places=5) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/svvit/transfer_trainer.py b/scenic/projects/svvit/transfer_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..d185a164dc22b70e7a8bd70ce65a2af0f7dc7e45 --- /dev/null +++ b/scenic/projects/svvit/transfer_trainer.py @@ -0,0 +1,554 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script.""" + +import functools +from typing import Any, Callable, Dict, Iterator, Tuple, Optional, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.svvit import metrics as sv_metric +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] +LrFn = Callable[[jnp.ndarray], jnp.ndarray] + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + lr_fn: LrFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, + Any]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, params, and optimizer. The buffer of this argument can + be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + lr_fn: The learning rate fn used for the logging the learning rate. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training and computed metrics for logging. + """ + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + rng=mixup_rng) + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + logits, new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params']) + return loss, (new_model_state, logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (train_cost, (new_model_state, + logits)), grad = compute_gradient_fn(train_state.params) + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm') is not None: + grad = clip_grads(grad, config.max_grad_norm) + + updates, new_opt_state = train_state.tx.update(grad, train_state.opt_state, + train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)])) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + # TODO(dehghani): Can we get this from the optimizer instead? + training_logs['learning_rate'] = lr_fn(train_state.global_step) + + metrics = metrics_fn(logits, batch) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + + return new_train_state, metrics, training_logs + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + all_gather: bool = False, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], Optional[jnp.ndarray], + Optional[jnp.ndarray]]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, params and optimizer state. The buffer of + this argument can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + all_gather: If True, the function gather batch and output of model in from + all hosts, using `jax.lax.all_gather` and return it, e.g., for computing + global metrics on CPU. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and optionally output, and batch after all_gather. + """ + variables = {'params': train_state.params, **train_state.model_state} + logits = flax_model.apply( + variables, batch['inputs'], train=False, mutable=False, debug=debug) + metrics = metrics_fn(logits, batch) + if all_gather: + targets = {'label': batch['label'], 'batch_mask': batch['batch_mask']} + logits = jax.lax.all_gather(logits, 'batch') + targets = jax.lax.all_gather(targets, 'batch') + return metrics, logits, targets + else: + return metrics, None, None + + +def representation_fn( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + representation_layer: str, + gather_to_host: bool = True +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Feeds the inputs to the model and returns their representations. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data from the dataset. + flax_model: A Flax model. + representation_layer: The name of the layer to use as the representation. + gather_to_host: Whether to gather results from all devices to the host, + rather than leaving them distributed. + + Returns: + Representation learned by the model for the given inputs and the labels and + masks. If `gather_to_host` is True, these are collected from all hosts. + """ + variables = {'params': train_state.params, **train_state.model_state} + + representation_layer_parts = representation_layer.split('/') + filter_rep = lambda mdl, _: mdl.name == representation_layer_parts[-1] + _, model_state = flax_model.apply( + variables, + batch['inputs'], + train=False, + capture_intermediates=filter_rep, + mutable=['intermediates'], + debug=False) + if 'intermediates' not in model_state: + raise ValueError(f'Layer with name "{representation_layer}"' + ' does not exist in your model.') + + representation = model_state['intermediates'] + for rep_layer in representation_layer_parts: + if rep_layer: + representation = representation[rep_layer] + representation = representation['__call__'][0] + if gather_to_host: + representation = jax.lax.all_gather(representation, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return representation, batch['label'], batch['batch_mask'] + + +def init_state( + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model: Any, + dataset: dataset_utils.Dataset, + workdir: str, +): + """Initialize the model state.""" + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params=params) + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + rng, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + if init_checkpoint_path is not None: + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + # Load params from the init_model. + train_state = model.init_from_train_state( # pytype: disable=attribute-error + train_state, restored_train_state, restored_model_cfg) + del restored_train_state + elif start_step == 0: + logging.info('Training completely from scratch.' + 'Not restoring from any checkpoint.') + return train_state, chrono, lr_fn, start_step, num_trainable_params, gflops + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current global_step, + model_state, rng, and the optimizer), train_summary and eval_summary which + are dict of metrics (from the last evaluation and train metric logging + respectively). These outputs are used for regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + (train_state, chrono, lr_fn, start_step, num_trainable_params, + gflops) = init_state(rng, config, model, dataset, workdir) + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + lr_fn=lr_fn, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + all_gather=config.get('global_metrics', False), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + def evaluate( + train_state: train_utils.TrainState, + step: int, + valid_iter: Iterator[Batch], + num_ex: int, + val_name: str, + ) -> Dict[str, Any]: + eval_summary = {} + # Ceil rounding such that we include the last incomplete batch. + total_eval_steps = int(np.ceil(num_ex / config.batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + eval_metrics = [] + for _ in range(steps_per_eval): + eval_batch = next(valid_iter) + if dataset.meta_data['target_is_onehot']: # Which includes multi-hot. + # Ignore the entries with all zero label for evaluation. + eval_batch['batch_mask'] *= eval_batch['label'].max(axis=-1) + e_metrics, e_output, e_batch = eval_step_pmapped( + train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + if compute_global_metrics: + # Unreplicate outputs of eval_step_pmapped that are coming from + # `lax.all_gather`, fetch to the host and add to the Evaluator: + e_batch_mask = train_utils.unreplicate_and_get( + e_batch['batch_mask']).astype(bool) + # Classification: 'label', regression: 'target' + t_key = 'label' if 'label' in e_batch else 'targets' + global_metrics_evaluator.add_batch_of_examples( + target=train_utils.unreplicate_and_get( + e_batch[t_key])[e_batch_mask], + output=train_utils.unreplicate_and_get(e_output) + [e_batch_mask]) + del e_batch, e_output, e_batch_mask + eval_global_metrics_summary = None + if compute_global_metrics: + eval_global_metrics_summary = ( + global_metrics_evaluator.compute_metrics( + clear_annotations=True)) + eval_summary.update( + train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + extra_eval_summary=eval_global_metrics_summary, + writer=writer, + prefix=val_name)) + del eval_metrics, eval_global_metrics_summary + writer.flush() + return eval_summary + + # If `global_metrics` are set in the config and we are the lead host + compute_global_metrics = False + if config.get('global_metrics', False) and lead_host: + compute_global_metrics = True + if compute_global_metrics: + global_metrics_evaluator = sv_metric.TruvariGlobalEvaluator( + config.global_metrics) + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + extra_training_logs.append(t_logs) + + # Quick indication that training is happening. + logging.log_first_n(logging.INFO, 'Finished training step %d.', 5, step) + for h in hooks: + h(step) + + ############### LOG TRAIN SUMMARY ############### + if ((step % log_summary_steps == 1) or (step == total_steps) or + (lead_host and chrono.warmup)): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_training_logs), + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summary = evaluate(train_state, step, dataset.valid_iter, + dataset.meta_data['num_eval_examples'], + dataset.meta_data['eval_name']) + if dataset.test_iter: + with report_progress.timed('test'): + eval_summary = evaluate(train_state, step, dataset.test_iter, + dataset.meta_data['num_test_examples'], + dataset.meta_data['test_name']) + chrono.resume() + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 1 and step > 1) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + train_utils.save_checkpoint(workdir, unrep_train_state) + del unrep_train_state + chrono.resume() # Un-pause now. + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/svvit/vit.py b/scenic/projects/svvit/vit.py new file mode 100644 index 0000000000000000000000000000000000000000..010a331d049cc4b7f7ac7197ef1e1f6fb5432a01 --- /dev/null +++ b/scenic/projects/svvit/vit.py @@ -0,0 +1,62 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""ViT Classification model.""" + +from scenic.model_lib.base_models.classification_model import ClassificationModel + +from scenic.projects.baselines import vit + + +class ViTClassificationModel(ClassificationModel): + """ViT model for classification task.""" + + def build_flax_model(self): + return vit.ViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + representation_size=self.config.model.representation_size, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + dtype='float32', + ) + + def init_from_train_state( + self, train_state, restored_train_state, restored_model_cfg): + """Updates the train_state with data from restored_train_state. + + This function is written to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return vit.init_vit_from_train_state(train_state, restored_train_state, + self.config, restored_model_cfg) + + diff --git a/scenic/projects/svvit/xvit.py b/scenic/projects/svvit/xvit.py new file mode 100644 index 0000000000000000000000000000000000000000..7a2e99844e61dfef8394ccbdbff9b7dd7358080c --- /dev/null +++ b/scenic/projects/svvit/xvit.py @@ -0,0 +1,85 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""X-ViT Classification model.""" +from typing import Any +import ml_collections +from scenic.model_lib.base_models.classification_model import ClassificationModel +from scenic.projects.baselines import vit +from scenic.projects.fast_vit.xvit import XViT + + +class XViTClassificationModel(ClassificationModel): + """X-ViT model for classification task.""" + + def build_flax_model(self): + return XViT( + num_outputs=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + attention_configs=self.config.model.attention_configs, + attention_fn=self.config.model.attention_fn, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + transformer_encoder_configs=self.config.model + .transformer_encoder_configs, + representation_size=self.config.model.representation_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.), + ) + + def default_flax_model_config(self): + return ml_collections.ConfigDict( + dict( + model=dict( + attention_fn='standard', + attention_configs={'num_heads': 2}, + transformer_encoder_configs={'type': 'global'}, + num_layers=1, + representation_size=16, + mlp_dim=32, + dropout_rate=0., + attention_dropout_rate=0., + hidden_size=16, + patches={'size': (4, 4)}, + classifier='gap', + ), + data_dtype_str='float32')) + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is written to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return vit.init_vit_from_train_state( + train_state, + restored_train_state, + self.config, + restored_model_cfg, + ) diff --git a/scenic/projects/t5/README.md b/scenic/projects/t5/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d792c1d73fbd18af4e1812b82ce21fe731711d20 --- /dev/null +++ b/scenic/projects/t5/README.md @@ -0,0 +1,5 @@ +# T5 for Scenic + +This project implements wrapper classes for pretrained T5 models available in +[T5X](https://github.com/google-research/t5x). This project requires T5X to be +installed. diff --git a/scenic/projects/t5/__init__.py b/scenic/projects/t5/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/t5/inspect_model.py b/scenic/projects/t5/inspect_model.py new file mode 100644 index 0000000000000000000000000000000000000000..cbf9a8c61d4de53428b60178c64327c560924d74 --- /dev/null +++ b/scenic/projects/t5/inspect_model.py @@ -0,0 +1,48 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Logs T5 model parameter names and their shapes. + +""" + +from collections.abc import Sequence + +from absl import app +from absl import flags + +from scenic.common_lib import debug_utils +from scenic.projects.t5 import model +from t5x import checkpoints + +_CHECKPOINT_PATH = flags.DEFINE_string( + 'checkpoint_path', None, + 'Path to a T5 checkpoint. This flag overrides "model_name".') +_MODEL_NAME = flags.DEFINE_enum( + 'model_name', 't5_1_1_small', + ['t5_1_1_small', 't5_1_1_base', 't5_1_1_large', 't5_1_1_xl', 't5_1_1_xxl'], + 'The name of the T5 model to inspect.') + + +def main(argv: Sequence[str]) -> None: + if len(argv) > 1: + raise app.UsageError('Too many command-line arguments.') + + checkpoint_path = ( + _CHECKPOINT_PATH.value or model.CHECKPOINTS[_MODEL_NAME.value]) + params = checkpoints.load_t5x_checkpoint(checkpoint_path)['target'] + debug_utils.log_param_shapes(params) + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/t5/layers.py b/scenic/projects/t5/layers.py new file mode 100644 index 0000000000000000000000000000000000000000..19599affbdadf556f49541654d8a01b974441641 --- /dev/null +++ b/scenic/projects/t5/layers.py @@ -0,0 +1,570 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""A wrapper class for T5 model. +""" +import functools +from typing import Any, Dict, Mapping, Optional, Sequence, Tuple +import flax.linen as nn +import jax +import jax.numpy as jnp +from scenic.model_lib.base_models import base_model +from t5x import decoding +from t5x.examples.t5 import layers as t5_layers +from t5x.examples.t5 import network as t5 +from t5x.models import DecodeFnCallable + +beam_search = decoding.beam_search +temperature_sample = decoding.temperature_sample + +Batch = Dict[str, jnp.ndarray] +PyTree = Any + + +class T5(nn.Module): + """T5 model consisting of encoder and decoder transformers. + + This class simply wraps network.Transformer class in t5x.examples.t5. + + Attributes: + vocab_size: Size of the vocabulary. + emb_dim: Size of the embeddings. + num_heads: Number of attention heads. + num_encoder_layers: Number of encoder layers. + num_decoder_layers: Number of decoder layers. + head_dim: Size of the embeddings in each head. + mlp_dim: Size of the MLP output embeddings. + dropout_rate: Dropout rate. + dtype: Data type. + mlp_activations: Sequence of activations in MLP. + logits_via_embedding: Use the embedding weights for computing logits. + """ + vocab_size: int + emb_dim: int + num_heads: int + num_encoder_layers: int + num_decoder_layers: int + head_dim: int + mlp_dim: int + dropout_rate: float + dtype: str = 'bfloat16' + mlp_activations: Sequence[str] = ('gelu', 'linear') + logits_via_embedding: bool = False + float32_attention_logits: bool = False + + def setup(self): + self.t5_config = t5.T5Config( + vocab_size=self.vocab_size, + emb_dim=self.emb_dim, + num_heads=self.num_heads, + num_encoder_layers=self.num_encoder_layers, + num_decoder_layers=self.num_decoder_layers, + head_dim=self.head_dim, + mlp_dim=self.mlp_dim, + dropout_rate=self.dropout_rate, + dtype=self.dtype, + mlp_activations=self.mlp_activations, + logits_via_embedding=self.logits_via_embedding, + float32_attention_logits=self.float32_attention_logits) + self.t5_module = t5.Transformer(self.t5_config) + + def encode(self, + encoder_input_tokens: jnp.ndarray, + encoder_segment_ids: Optional[jnp.ndarray] = None, + enable_dropout: bool = True): + return self.t5_module.encode(encoder_input_tokens, + encoder_segment_ids, + enable_dropout) + + def decode( + self, + encoded: jnp.ndarray, + encoder_input_tokens: jnp.ndarray, # Only needed for masks. + decoder_input_tokens: jnp.ndarray, + decoder_target_tokens: jnp.ndarray, + encoder_segment_ids: Optional[jnp.ndarray] = None, + decoder_segment_ids: Optional[jnp.ndarray] = None, + decoder_positions: Optional[jnp.ndarray] = None, + enable_dropout: bool = True, + decode: bool = False, + max_decode_length: Optional[int] = None): + return self.t5_module.decode(encoded, + encoder_input_tokens, + decoder_input_tokens, + decoder_target_tokens, + encoder_segment_ids, + decoder_segment_ids, + decoder_positions, + enable_dropout, + decode, + max_decode_length) + + def __call__(self, + encoder_input_tokens: jnp.ndarray, + decoder_input_tokens: jnp.ndarray, + decoder_target_tokens: jnp.ndarray, + encoder_segment_ids: Optional[jnp.ndarray] = None, + decoder_segment_ids: Optional[jnp.ndarray] = None, + encoder_positions: Optional[jnp.ndarray] = None, + decoder_positions: Optional[jnp.ndarray] = None, + *, + enable_dropout: bool = True, + decode: bool = False): + """Applies T5 model on the inputs. + + This method requires both decoder_target_tokens and decoder_input_tokens, + which is a shifted version of the former. For a packed dataset, it usually + has additional processing applied. For example, the first element of each + sequence has id 0 instead of the shifted EOS id from the previous sequence. + + Args: + encoder_input_tokens: input data to the encoder. + decoder_input_tokens: input token to the decoder. + decoder_target_tokens: target token to the decoder. + encoder_segment_ids: encoder segmentation info for packed examples. + decoder_segment_ids: decoder segmentation info for packed examples. + encoder_positions: encoder subsequence positions for packed examples. + decoder_positions: decoder subsequence positions for packed examples. + enable_dropout: Ensables dropout if set to True. + decode: Whether to prepare and use an autoregressive cache. + + Returns: + logits array from full transformer. + """ + return self.t5_module(encoder_input_tokens, + decoder_input_tokens, + decoder_target_tokens, + encoder_segment_ids, + decoder_segment_ids, + encoder_positions, + decoder_positions, + enable_dropout=enable_dropout, + decode=decode) + + +class T5Encoder(nn.Module): + """T5 encoder as a separate model. + + This module contains the encoder part of a pretrained T5. It is useful when + adopting the pretrained T5 encoder as a part of a larger network. Note that + the embedding layer should be created outside the module and provided as a + parameter `shared_embedding` to share it in other parts of the network (e.g., + text encoder). If `shared_embedding` is not provided, the embedding layer is + created within the module. + + Attributes: + vocab_size: Size of the vocabulary. + emb_dim: Size of the embeddings. + num_heads: Number of attention heads. + num_encoder_layers: Number of encoder layers. + num_decoder_layers: Number of decoder layers. + head_dim: Size of the embeddings in each head. + mlp_dim: Size of the MLP output embeddings. + dropout_rate: Dropout rate. + dtype: Data type. + mlp_activations: Sequence of activations in MLP. + logits_via_embedding: Use the embedding weights for computing logits. + shared_embedding: Optional. Embedding layer that is shared outside this + module. If not given, a non-shared embedding layer will be created within + the module. + """ + vocab_size: int + emb_dim: int + num_heads: int + num_encoder_layers: int + num_decoder_layers: int + head_dim: int + mlp_dim: int + dropout_rate: float + dtype: str = 'bfloat16' + mlp_activations: Sequence[str] = ('gelu', 'linear') + logits_via_embedding: bool = False + shared_embedding: Optional[nn.Module] = None + float32_attention_logits: bool = False + + def setup(self): + self.t5_config = t5.T5Config( + vocab_size=self.vocab_size, + emb_dim=self.emb_dim, + num_heads=self.num_heads, + num_encoder_layers=self.num_encoder_layers, + num_decoder_layers=self.num_decoder_layers, + head_dim=self.head_dim, + mlp_dim=self.mlp_dim, + dropout_rate=self.dropout_rate, + dtype=self.dtype, + mlp_activations=self.mlp_activations, + logits_via_embedding=self.logits_via_embedding, + float32_attention_logits=self.float32_attention_logits) + if self.shared_embedding is None: + self.nonshared_embedding = t5_layers.Embed( + num_embeddings=self.vocab_size, + features=self.emb_dim, + dtype=self.dtype, + attend_dtype=jnp.float32, # For logit training stability. + embedding_init=nn.initializers.normal(stddev=1.0), + one_hot=True, + name='token_embedder') + embedding_layer = self.nonshared_embedding + else: + embedding_layer = self.shared_embedding + self.encoder_module = t5.Encoder(self.t5_config, embedding_layer) + + def __call__(self, + encoder_input_tokens, + encoder_segment_ids=None, + enable_dropout=True): + """Applies Transformer encoder-branch on the inputs.""" + cfg = self.t5_config + assert encoder_input_tokens.ndim == 2 # (batch, len) + + # Make padding attention mask. + encoder_mask = t5_layers.make_attention_mask( + encoder_input_tokens > 0, encoder_input_tokens > 0, dtype=cfg.dtype) + # Add segmentation block-diagonal attention mask if using segmented data. + if encoder_segment_ids is not None: + encoder_mask = t5_layers.combine_masks( + encoder_mask, + t5_layers.make_attention_mask( + encoder_segment_ids, + encoder_segment_ids, + jnp.equal, + dtype=cfg.dtype)) + + return self.encoder_module( + encoder_input_tokens, encoder_mask, deterministic=not enable_dropout) + + +class T5Decoder(nn.Module): + """T5 decoder as a separate model. + + This module contains the decoder part of a pretrained T5. It is useful when + adopting the pretrained T5 decoder as a part of a larger network. Note that + the embedding layer should be created outside the module and provided as a + parameter `shared_embedding` to share it in other parts of the network (e.g., + text encoder). If `shared_embedding` is not provided, the embedding layer is + created within the module. + + Attributes: + vocab_size: Size of the vocabulary. + emb_dim: Size of the embeddings. + num_heads: Number of attention heads. + num_encoder_layers: Number of encoder layers. + num_decoder_layers: Number of decoder layers. + head_dim: Size of the embeddings in each head. + mlp_dim: Size of the MLP output embeddings. + dropout_rate: Dropout rate. + dtype: Data type. + mlp_activations: Sequence of activations in MLP. + logits_via_embedding: Use the embedding weights for computing logits. + shared_embedding: Optional. Embedding layer that is shared outside this + module. If not given, a non-shared embedding layer will be created within + the module. + """ + vocab_size: int + emb_dim: int + num_heads: int + num_encoder_layers: int + num_decoder_layers: int + head_dim: int + mlp_dim: int + dropout_rate: float + dtype: str = 'bfloat16' + mlp_activations: Sequence[str] = ('gelu', 'linear') + logits_via_embedding: bool = False + shared_embedding: Optional[nn.Module] = None + float32_attention_logits: bool = False + + def setup(self): + self.t5_config = t5.T5Config( + vocab_size=self.vocab_size, + emb_dim=self.emb_dim, + num_heads=self.num_heads, + num_encoder_layers=self.num_encoder_layers, + num_decoder_layers=self.num_decoder_layers, + head_dim=self.head_dim, + mlp_dim=self.mlp_dim, + dropout_rate=self.dropout_rate, + dtype=self.dtype, + mlp_activations=self.mlp_activations, + logits_via_embedding=self.logits_via_embedding, + float32_attention_logits=self.float32_attention_logits) + if self.shared_embedding is None: + self.nonshared_embedding = t5_layers.Embed( + num_embeddings=self.vocab_size, + features=self.emb_dim, + dtype=self.dtype, + attend_dtype=jnp.float32, # For logit training stability. + embedding_init=nn.initializers.normal(stddev=1.0), + one_hot=True, + name='token_embedder') + embedding_layer = self.nonshared_embedding + else: + embedding_layer = self.shared_embedding + self.decoder_module = t5.Decoder(self.t5_config, embedding_layer) + + def __call__(self, + encoded, + encoder_input_tokens: jnp.ndarray, # Only needed for masks. + decoder_input_tokens: jnp.ndarray, + decoder_target_tokens: jnp.ndarray, + encoder_segment_ids: Optional[jnp.ndarray] = None, + decoder_segment_ids: Optional[jnp.ndarray] = None, + encoder_positions: Optional[jnp.ndarray] = None, + decoder_positions: Optional[jnp.ndarray] = None, + *, + enable_dropout: bool = True, + decode: bool = False, + max_decode_length: Optional[int] = None): + """Decode from the given encoded embedding using a T5 decoder. + + This method requires both decoder_target_tokens and decoder_input_tokens, + which is a shifted version of the former. For a packed dataset, it usually + has additional processing applied. For example, the first element of each + sequence has id 0 instead of the shifted EOS id from the previous sequence. + This function is a copy of the decode() method of t5.Transformer. + + Args: + encoded: input embeddings obtained from an encoder. + encoder_input_tokens: input data to the encoder. + decoder_input_tokens: input token to the decoder. + decoder_target_tokens: target token to the decoder. + encoder_segment_ids: encoder segmentation info for packed examples. + decoder_segment_ids: decoder segmentation info for packed examples. + encoder_positions: encoder subsequence positions for packed examples. + decoder_positions: decoder subsequence positions for packed examples. + enable_dropout: Ensables dropout if set to True. + decode: Whether to prepare and use an autoregressive cache. + max_decode_length: Maximum length for autoregressive decoding. + + Returns: + logits array from full transformer. + """ + + # Make padding attention masks. + if decode: + # Do not mask decoder attention based on targets padding at + # decoding/inference time. + decoder_mask = None + encoder_decoder_mask = t5_layers.make_attention_mask( + jnp.ones_like(decoder_target_tokens), + encoder_input_tokens > 0, + dtype=self.dtype) + else: + decoder_mask = t5_layers.make_decoder_mask( + decoder_target_tokens=decoder_target_tokens, + dtype=self.dtype, + decoder_segment_ids=decoder_segment_ids) + encoder_decoder_mask = t5_layers.make_attention_mask( + decoder_target_tokens > 0, encoder_input_tokens > 0, dtype=self.dtype) + + # Add segmentation block-diagonal attention masks if using segmented data. + if encoder_segment_ids is not None: + if decode: + raise ValueError( + 'During decoding, packing should not be used but ' + '`encoder_segment_ids` was passed to `Transformer.decode`.') + + encoder_decoder_mask = t5_layers.combine_masks( + encoder_decoder_mask, + t5_layers.make_attention_mask( + decoder_segment_ids, + encoder_segment_ids, + jnp.equal, + dtype=self.dtype)) + + logits = self.decoder_module( + encoded, + decoder_input_tokens=decoder_input_tokens, + decoder_positions=decoder_positions, + decoder_mask=decoder_mask, + encoder_decoder_mask=encoder_decoder_mask, + deterministic=not enable_dropout, + decode=decode, + max_decode_length=max_decode_length) + return logits.astype(self.dtype) + + +class T5Model(base_model.BaseModel): + """T5 model implementing autoregressive decoding.""" + + def _compute_logits_from_slice( + self, decoding_state: decoding.DecodingState, + all_variables: PyTree, encoded_inputs: jnp.ndarray, + input_masks: jnp.ndarray, + max_decode_length: int) -> Tuple[jnp.ndarray, Mapping[str, jnp.ndarray]]: + """Token slice to logits from decoder model.""" + flat_ids = decoding_state.cur_token + flat_cache = decoding_state.cache + flat_logits, new_vars = self.flax_model.apply( + { + 'cache': flat_cache, + **all_variables + }, + encoded_inputs, **{ + 'encoder_input_tokens': input_masks, + 'decoder_input_tokens': flat_ids, + 'decoder_target_tokens': flat_ids, + }, + enable_dropout=False, + decode=True, + max_decode_length=max_decode_length, + mutable=['cache'], + method=self.flax_model.decode) + # Remove sequence length dimension since it's always 1 during decoding. + flat_logits = jnp.squeeze(flat_logits, axis=1) + new_flat_cache = new_vars['cache'] + return flat_logits, new_flat_cache + + def predict_batch_with_aux( + self, + params: PyTree, + batch: PyTree, + decode_fn: DecodeFnCallable, + eos_id: int = 1, + decoder_params: Optional[Dict[str, Any]] = None, + return_all_decodes: bool = False, + num_decodes: int = 1, + ): + """Predict with fast decoding beam search on a batch. + + This is copied and modified from T5X EncoderDecoderTransformer model in + third_party/py/t5x/models.py. + + Here we refer to "parameters" for values that can be compiled into the + model dynamically, as opposed to static configuration settings that require + a recompile. For example, the model weights and the decoder brevity-penalty + are parameters and can be modified without requiring a recompile. The number + of layers, the batch size and the decoder beam size are configuration + options that require recompilation if changed. + + This method can be used with a customizable decoding function as long as it + follows the signature of `DecodeFnCallable`. In order to provide a unified + interface for the decoding functions, we use a generic names. For example a + beam size is a concept unique to beam search. Conceptually, it corresponds + to the number of sequences returned by the beam search. Therefore, the + generic argument `num_decodes` corresponds to the beam size if + `decode_fn` is a beam search. For temperature sampling, `num_decodes` + corresponds to the number of indepedent sequences to be sampled. Typically + `num_decodes = 1` is used for tempeature sampling. + + If `return_all_decodes = True`, the return tuple contains the predictions + with a shape [batch, num_decodes, max_decode_len] and the scores (i.e., log + probability of the generated sequence) with a shape [batch, num_decodes]. + + If `return_all_decodes = False`, the return tuple contains the predictions + with a shape [batch, max_decode_len] and the scores with a shape [batch]. + + `decoder_params` can be used to pass dynamic configurations to + `decode_fn`. An example usage is to pass different random seed (i.e., + `jax.random.PRNGKey(seed)` with different `seed` value). This can be done by + setting `decoder_params['decode_rng'] = jax.random.PRNGKey(seed)`. + + Args: + params: model parameters. + batch: a batch of inputs. It's a nested Pytree with two keys: + `encoder_inputs` and `decoder_inputs`, each of which contains the + default T5 encoder and decoder params. + decode_fn: function implementing the decode method. + eos_id: EOS token id in the vocabulary. + decoder_params: additional (model-independent) parameters for the decoder. + return_all_decodes: whether to return the entire beam or just the top-1. + num_decodes: the number of beams to use in beam search. + + Returns: + A tuple containing: + the batch of predictions, with the entire beam if requested + an auxiliary dictionary of decoder scores + """ + # Prepare zeroed-out autoregressive cache. + encoder_inputs = jax.tree_util.tree_map(jnp.ones_like, + batch['encoder_inputs']) + decoder_inputs = jax.tree_util.tree_map(jnp.ones_like, + batch['decoder_inputs']) + _, variables_with_cache = self.flax_model.apply( + params, + # encoder_input_tokens=encoder_inputs, + # decoder_input_tokens=decoder_inputs, + # decoder_target_tokens=decoder_inputs, + **encoder_inputs, + **decoder_inputs, + decode=True, + enable_dropout=False, + mutable=['cache']) + cache = variables_with_cache['cache'] + + # Prepare transformer fast-decoder call for beam search: for beam search, we + # need to set up our decoder model to handle a batch size equal to + # batch_size * num_decodes, where each batch item's data is expanded + # in-place rather than tiled. + # i.e. if we denote each batch element subtensor as el[n]: + # [el0, el1, el2] --> beamsize=2 --> [el0,el0,el1,el1,el2,el2] + # [batch * num_decodes, input_len, emb_dim] + beam_expand_fn = functools.partial( + decoding.flat_batch_beam_expand, beam_size=num_decodes) + non_expanded_encoded = self.flax_model.apply( + params, + **batch['encoder_inputs'], + enable_dropout=False, + method=self.flax_model.encode) + encoded_inputs = jax.tree_util.tree_map(beam_expand_fn, + non_expanded_encoded) + + # Set the all output embeddings to be valid inputs if encoder_input_tokens + # are not provided. Note that this tensor should be beam-extended too. + if 'encoder_input_tokens' not in decoder_inputs: + input_masks = jnp.ones(encoded_inputs.shape[:-1]) + else: + input_masks = jax.tree_util.tree_map( + beam_expand_fn, decoder_inputs['encoder_input_tokens']) + + tokens_ids_to_logits = functools.partial( + self._compute_logits_from_slice, + all_variables=params, + encoded_inputs=encoded_inputs, + input_masks=input_masks, + max_decode_length=decoder_inputs['decoder_input_tokens'].shape[1]) + + if decoder_params is None: + decoder_params = {} + + # For beam search, `decoder_prompt_inputs` is only used to obtain batch size + # and max decode length information. For temperature sampling, + # `decod_prompt_inputs` will be filled with the sampled ids. + decoder_prompt_inputs = jnp.zeros_like( + decoder_inputs['decoder_input_tokens']) + + # Using the above-defined single-step decoder function, run a + # beam search over possible sequences given input encoding. + # decodes: [batch, num_decodes, max_decode_len + 1] + # scores: [batch, num_decodes] + decodes, scores = decode_fn( + inputs=decoder_prompt_inputs, + cache=cache, + tokens_to_logits=tokens_ids_to_logits, + eos_id=eos_id, + num_decodes=num_decodes, + cache_offset=0, + **decoder_params) + + # Beam search returns [n_batch, n_beam, n_length] with beam dimension sorted + # in increasing order of log-probability. + # Return the highest scoring beam sequence. + if return_all_decodes: + return decodes, {'scores': scores} + else: + return decodes[:, -1, :], {'scores': scores[:, -1]} + + def build_flax_model(self) -> nn.Module: + return T5(**self.config) diff --git a/scenic/projects/t5/model.py b/scenic/projects/t5/model.py new file mode 100644 index 0000000000000000000000000000000000000000..69963ae73952b1e2676f29f34c9db646892ce9b7 --- /dev/null +++ b/scenic/projects/t5/model.py @@ -0,0 +1,364 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Provides builders and loaders of T5X checkpoints. + +Example usage: +``` +from scenic.projects.t5 import model as t5 +from scenic.projects.t5 import tokenizer as t5_tokenizer + +model_name='t5_1_1_small' + +scenic_model = t5.MODELS[model_name]() +scenic_loaded_state = t5.load_pretrained_weights(model_name) + +scenic_model_bound = scenic_model.bind(scenic_loaded_state) + +tokenizer = t5_tokenizer.build_dmvr_sp_model() + +en_toks = np.array([tokenizer.string_to_indices( + 'Hi, is John', max_num_tokens=6, append_eos=True)]) +de_toks = np.array([tokenizer.string_to_indices( + ' my name ', max_num_tokens=7, + prepend_bos=True, append_eos=True)]) +de_toks[0, 0] = 0 # replace the BOS token to be 0 instaed of -1 +inputs = (en_toks, de_toks[:, :-1], de_toks[:, 1:]) + +output = scenic_model_bound(*inputs) +tokenizer.indices_to_string([int(x) for x in np.argmax(output[0], -1)]) +``` +""" +from scenic.projects.t5 import layers +from t5x import checkpoints + +# TODO(phseo): Implement beam search for general encoder-decoder models. + +CHECKPOINTS = { + 't5_1_1_small': + 'gs://t5-data/pretrained_models/t5x/t5_1_1_small/checkpoint_1000000/', + 't5_1_1_base': + 'gs://t5-data/pretrained_models/t5x/t5_1_1_base/checkpoint_1000000/', + 't5_1_1_large': + 'gs://t5-data/pretrained_models/t5x/t5_1_1_large/checkpoint_1000000/', + 't5_1_1_xl': + 'gs://t5-data/pretrained_models/t5x/t5_1_1_xl/checkpoint_1000000/', + 't5_1_1_xxl': + 'gs://t5-data/pretrained_models/t5x/t5_1_1_xxl/checkpoint_1000000/', + 'mt5_small': + 'gs://t5-data/pretrained_models/t5x/mt5_small/checkpoint_1000000/', + 'mt5_base': + 'gs://t5-data/pretrained_models/t5x/mt5_base/checkpoint_1000000/', + 'mt5_large': + 'gs://t5-data/pretrained_models/t5x/mt5_large/checkpoint_1000000/', + 'mt5_xl': + 'gs://t5-data/pretrained_models/t5x/mt5_xl/checkpoint_1000000/', + 'mt5_xxl': + 'gs://t5-data/pretrained_models/t5x/mt5_xxl/checkpoint_1000000/', + 'flan_t5_small': + 'gs://t5-data/pretrained_models/t5x/flan_t5_small/checkpoint_1198000', + 'flan_t5_base': + 'gs://t5-data/pretrained_models/t5x/flan_t5_base/checkpoint_1184000', + 'flan_t5_large': + 'gs://t5-data/pretrained_models/t5x/flan_t5_large/checkpoint_1164000', + 'flan_t5_xl': + 'gs://t5-data/pretrained_models/t5x/flan_t5_xl/checkpoint_1138000', + 'flan_t5_xxl': + 'gs://t5-data/pretrained_models/t5x/flan_t5_xxl/checkpoint_1114000', +} + + +CONFIGS = { + 't5_1_1_small': + dict( + vocab_size=32128, + dtype='bfloat16', + emb_dim=512, + num_heads=6, + num_encoder_layers=8, + num_decoder_layers=8, + head_dim=64, + mlp_dim=1024, + mlp_activations=('gelu', 'linear'), + dropout_rate=0.0, + logits_via_embedding=False), + 't5_1_1_base': + dict( + vocab_size=32128, + dtype='bfloat16', + emb_dim=768, + num_heads=12, + num_encoder_layers=12, + num_decoder_layers=12, + head_dim=64, + mlp_dim=2048, + mlp_activations=('gelu', 'linear'), + dropout_rate=0.0, + logits_via_embedding=False), + 't5_1_1_large': + dict( + vocab_size=32128, + dtype='bfloat16', + emb_dim=1024, + num_heads=16, + num_encoder_layers=24, + num_decoder_layers=24, + head_dim=64, + mlp_dim=2816, + mlp_activations=('gelu', 'linear'), + dropout_rate=0.0, + logits_via_embedding=False), + 't5_1_1_xl': + dict( + vocab_size=32128, + dtype='bfloat16', + emb_dim=2048, + num_heads=32, + num_encoder_layers=24, + num_decoder_layers=24, + head_dim=64, + mlp_dim=5120, + mlp_activations=('gelu', 'linear'), + dropout_rate=0.0, + logits_via_embedding=False), + 't5_1_1_xxl': + dict( + vocab_size=32128, + dtype='bfloat16', + emb_dim=4096, + num_heads=64, + num_encoder_layers=24, + num_decoder_layers=24, + head_dim=64, + mlp_dim=10240, + mlp_activations=('gelu', 'linear'), + dropout_rate=0.0, + logits_via_embedding=False), + 'mt5_small': + dict( + vocab_size=250112, + dtype='bfloat16', + emb_dim=512, + num_heads=6, + num_encoder_layers=8, + num_decoder_layers=8, + head_dim=64, + mlp_dim=1024, + mlp_activations=('gelu', 'linear'), + dropout_rate=0.0, + logits_via_embedding=False), + 'mt5_base': + dict( + vocab_size=250112, + dtype='bfloat16', + emb_dim=768, + num_heads=12, + num_encoder_layers=12, + num_decoder_layers=12, + head_dim=64, + mlp_dim=2048, + mlp_activations=('gelu', 'linear'), + dropout_rate=0.0, + logits_via_embedding=False), + 'mt5_large': + dict( + vocab_size=250112, + dtype='bfloat16', + emb_dim=1024, + num_heads=16, + num_encoder_layers=24, + num_decoder_layers=24, + head_dim=64, + mlp_dim=2816, + mlp_activations=('gelu', 'linear'), + dropout_rate=0.0, + logits_via_embedding=False), + 'mt5_xl': + dict( + vocab_size=250112, + dtype='bfloat16', + emb_dim=2048, + num_heads=32, + num_encoder_layers=24, + num_decoder_layers=24, + head_dim=64, + mlp_dim=5120, + mlp_activations=('gelu', 'linear'), + dropout_rate=0.0, + logits_via_embedding=False), + 'mt5_xxl': + dict( + vocab_size=250112, + dtype='bfloat16', + emb_dim=4096, + num_heads=64, + num_encoder_layers=24, + num_decoder_layers=24, + head_dim=64, + mlp_dim=10240, + mlp_activations=('gelu', 'linear'), + dropout_rate=0.0, + logits_via_embedding=False), + 'flan_t5_small': + dict( + vocab_size=32128, + dtype='bfloat16', + emb_dim=512, + num_heads=6, + num_encoder_layers=8, + num_decoder_layers=8, + head_dim=64, + mlp_dim=1024, + mlp_activations=('gelu', 'linear'), + dropout_rate=0.0, + logits_via_embedding=False), + 'flan_t5_base': + dict( + vocab_size=32128, + dtype='bfloat16', + emb_dim=768, + num_heads=12, + num_encoder_layers=12, + num_decoder_layers=12, + head_dim=64, + mlp_dim=2048, + mlp_activations=('gelu', 'linear'), + dropout_rate=0.0, + logits_via_embedding=False), + 'flan_t5_large': + dict( + vocab_size=32128, + dtype='bfloat16', + emb_dim=1024, + num_heads=16, + num_encoder_layers=24, + num_decoder_layers=24, + head_dim=64, + mlp_dim=2816, + mlp_activations=('gelu', 'linear'), + dropout_rate=0.0, + logits_via_embedding=False), + 'flan_t5_xl': + dict( + vocab_size=32128, + dtype='bfloat16', + emb_dim=2048, + num_heads=32, + num_encoder_layers=24, + num_decoder_layers=24, + head_dim=64, + mlp_dim=5120, + mlp_activations=('gelu', 'linear'), + dropout_rate=0.0, + logits_via_embedding=False), + 'flan_t5_xxl': + dict( + vocab_size=32128, + dtype='bfloat16', + emb_dim=4096, + num_heads=64, + num_encoder_layers=24, + num_decoder_layers=24, + head_dim=64, + mlp_dim=10240, + mlp_activations=('gelu', 'linear'), + dropout_rate=0.0, + logits_via_embedding=False), +} + + +def t5_1_1_small(): + return layers.T5(**CONFIGS['t5_1_1_small']) + + +def t5_1_1_base(): + return layers.T5(**CONFIGS['t5_1_1_base']) + + +def t5_1_1_large(): + return layers.T5(**CONFIGS['t5_1_1_large']) + + +def t5_1_1_xl(): + return layers.T5(**CONFIGS['t5_1_1_xl']) + + +def t5_1_1_xxl(): + return layers.T5(**CONFIGS['t5_1_1_xxl']) + + +def mt5_small(): + return layers.T5(**CONFIGS['mt5_small']) + + +def mt5_base(): + return layers.T5(**CONFIGS['mt5_base']) + + +def mt5_large(): + return layers.T5(**CONFIGS['mt5_large']) + + +def mt5_xl(): + return layers.T5(**CONFIGS['mt5_xl']) + + +def mt5_xxl(): + return layers.T5(**CONFIGS['mt5_xxl']) + + +def flan_t5_small(): + return layers.T5(**CONFIGS['flan_t5_small']) + + +def flan_t5_base(): + return layers.T5(**CONFIGS['flan_t5_base']) + + +def flan_t5_large(): + return layers.T5(**CONFIGS['flan_t5_large']) + + +def flan_t5_xl(): + return layers.T5(**CONFIGS['flan_t5_xl']) + + +def flan_t5_xxl(): + return layers.T5(**CONFIGS['flan_t5_xxl']) + + +MODELS = { + 't5_1_1_small': t5_1_1_small, + 't5_1_1_base': t5_1_1_base, + 't5_1_1_large': t5_1_1_large, + 't5_1_1_xl': t5_1_1_xl, + 't5_1_1_xxl': t5_1_1_xxl, + 'mt5_small': mt5_small, + 'mt5_base': mt5_base, + 'mt5_large': mt5_large, + 'mt5_xl': mt5_xl, + 'mt5_xxl': mt5_xxl, + 'flan_t5_small': flan_t5_small, + 'flan_t5_base': flan_t5_base, + 'flan_t5_large': flan_t5_large, + 'flan_t5_xl': flan_t5_xl, + 'flan_t5_xxl': flan_t5_xxl +} + + +def load_pretrained_weights(model_name, checkpoint_path=None): + checkpoint_path = checkpoint_path or CHECKPOINTS.get(model_name) + loaded_state = checkpoints.load_t5x_checkpoint(checkpoint_path)['target'] + loaded_state = {'params': {'t5_module': loaded_state}} + return loaded_state diff --git a/scenic/projects/t5/tokenizer.py b/scenic/projects/t5/tokenizer.py new file mode 100644 index 0000000000000000000000000000000000000000..cbd33e3b445309beb6bc4edbc737166777d63e48 --- /dev/null +++ b/scenic/projects/t5/tokenizer.py @@ -0,0 +1,91 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Constructor functions for the pretrained SentencePiece tokenizer. + +This module provides constructor functions for creating the pretrained +SentencePiece tokenizer. + +The current DMVR SentencePiece tokenizer always sets `prepend_bos` when +initializing the tensorflow processor and returns a sliced tensor when called +with `prepend_bos=False`. This is problematic when the sentencepiece model is +not trained with the BOS token (predefined and hard-coded as ''), which is +the case for T5 tokenizer. This module contains a wrapper for the DMVR +SentencePiece tokenizer to initialize the tensorflow processor without +prepending BOS. Instead, it prepends a custom BOS token given as an argument. +""" + +from collections.abc import Sequence +from typing import Optional +from typing import Union + +from dmvr import tokenizers +import tensorflow as tf +import tensorflow_text + +# pylint: disable=line-too-long +SP_MODEL_PATH = 'gs://t5-data/vocabs/cc_all.32000.100extra/sentencepiece.model' +# pylint: enable=line-too-long + + +class SentencePieceTokenizer(tokenizers.SentencePieceTokenizer): + """Wrapper around `SentencePieceTokenizer` to keep backwards compatibility. + + The current DMVR SentencePiece tokenizer always sets `prepend_bos` when + initializing the tensorflow processor and returns a sliced tensor when called + with `prepend_bos=False`. This is problematic when the sentencepiece model is + not trained with the BOS token (predefined and hard-coded as ''), which is + the case for T5 tokenizer. This module contains a wrapper for the DMVR + SentencePiece tokenizer to initialize the tensorflow processor without + prepending BOS. Instead, it prepends a custom BOS token given as an argument. + """ + + def __init__(self, + model_path: str, + bos_id: int = 0): + self.bos_id = bos_id + super().__init__(model_path) + + def initialize(self): + with tf.io.gfile.GFile(self._model_path, 'rb') as f: + self._tf_sp_model = tensorflow_text.SentencepieceTokenizer( + model=f.read(), + out_type=tf.int32, + add_bos=False, + add_eos=True) + + def string_tensor_to_indices(self, + string_tensor: Union[tf.Tensor, Sequence[str]], + prepend_bos: bool = False, + append_eos: bool = False, + max_num_tokens: Optional[int] = 32) -> tf.Tensor: + if self._tf_sp_model is None: + raise RuntimeError('Model was not initialized. Call `initialize` method.') + + tokenized = self._tf_sp_model.tokenize(string_tensor) + tokenized = tokenized if append_eos else tokenized[..., :-1] + + # Pad to `max_num_tokens`. + shape = None if max_num_tokens is None else [None, max_num_tokens] + tokenized = tokenized.to_tensor(default_value=self._pad_token, shape=shape) + + if prepend_bos: + tokenized = tf.concat([ + tf.zeros_like(tokenized[..., 0:1]) + self.bos_id, tokenized[..., :-1] + ], -1) + return tokenized + + +def build_dmvr_sp_model(model_path: str = SP_MODEL_PATH): + return SentencePieceTokenizer(model_path) diff --git a/scenic/projects/tasseo/README.md b/scenic/projects/tasseo/README.md new file mode 100644 index 0000000000000000000000000000000000000000..04361ac794ed24b4be73df6649a6a776cbf2ee94 --- /dev/null +++ b/scenic/projects/tasseo/README.md @@ -0,0 +1,5 @@ +# Tasseo + +The tasseo project aims to identify clonal abberrations beyond the current +standard-of-care karyotype analysis. + diff --git a/scenic/projects/tasseo/classification_trainer.py b/scenic/projects/tasseo/classification_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..1ae9e5e6fc8bfb189c419f007c55f0073564a536 --- /dev/null +++ b/scenic/projects/tasseo/classification_trainer.py @@ -0,0 +1,452 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tasseo training Script.""" + +import functools +from typing import Any, Callable, Dict, Tuple, Optional, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.tasseo import train_utils as tasseo_train_utils +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils + + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] +LrFn = Callable[[jnp.ndarray], jnp.ndarray] + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + lr_fn: LrFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, + Any]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, params, and optimizer. The buffer of this argument can + be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + lr_fn: The learning rate fn used for the logging the learning rate. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training and computed metrics and some training logs. + """ + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + rng=mixup_rng) + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + logits, new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params']) + return loss, (new_model_state, logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (train_cost, (new_model_state, + logits)), grad = compute_gradient_fn(train_state.params) + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm') is not None: + grad = clip_grads(grad, config.max_grad_norm) + + updates, new_opt_state = train_state.tx.update(grad, train_state.opt_state, + train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)])) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + # TODO(dehghani): Can we get this from the optimizer instead? + training_logs['learning_rate'] = lr_fn(train_state.global_step) + + metrics = metrics_fn(logits, batch) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + + return new_train_state, metrics, training_logs + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + all_gather: bool = False, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], Optional[jnp.ndarray], + Optional[jnp.ndarray]]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + all_gather: If True, the function gather batch and output of model in from + all hosts, using `jax.lax.all_gather` and return it, e.g., for computing + global metrics on CPU. + debug: Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and optionally output, and batch after all_gather. + """ + variables = {'params': train_state.params, **train_state.model_state} + logits = flax_model.apply( + variables, batch['inputs'], train=False, mutable=False, debug=debug) + metrics = metrics_fn(logits, batch) + if all_gather: + targets = {'label': batch['label'], 'batch_mask': batch['batch_mask']} + logits = jax.lax.all_gather(logits, 'batch') + targets = jax.lax.all_gather(targets, 'batch') + return metrics, logits, targets + else: + return metrics, None, None + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_state that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params=params) + # We jit this, such that the arrays that are created on the same device as the + # input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + rng, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + # Replicate the optimizer, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + lr_fn=lr_fn, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + all_gather=config.get('global_metrics', False), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + max_checkpoint_keep = config.get('max_checkpoint_keep', 3) + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + # If `global_metrics` are set in the config and we are the lead host + compute_global_metrics = False + if config.get('global_metrics', False) and lead_host: + compute_global_metrics = True + if compute_global_metrics: + global_metrics_evaluator = tasseo_train_utils.TasseoGlobalEvaluator( + config.global_metrics) + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, + writer=writer, + every_secs=None, + every_steps=config.get('report_progress_step', log_summary_steps), + ) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + extra_training_logs.append(t_logs) + for h in hooks: + h(step) + # Below are once-in-a-while ops -> pause. + ###################### LOG TRAIN SUMMARY ######################## + if ((step % log_summary_steps == 1) or (step == total_steps) or + (lead_host and chrono.warmup)): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + # train_metrics is list of a dictionaries of metrics, where the shape of + # the metrics[key] is [n_local_devices]. However, because metric functions + # have a psum, we have already summed across the whole sharded batch, and + # what's returned is n_local_devices copies of the same summed metric. + # So we do unreplicate and fetch them to host using `unreplicate_and_get`. + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_training_logs), + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + eval_metrics = [] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + for _ in range(steps_per_eval): + eval_batch = next(dataset.valid_iter) + e_metrics, e_output, e_batch = eval_step_pmapped( + train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + if compute_global_metrics: + # Unreplicate outputs of eval_step_pmapped that are coming from + # `lax.all_gather`, fetch to the host and add to the Evaluator: + e_batch_mask = train_utils.unreplicate_and_get( + e_batch['batch_mask']).astype(bool) + global_metrics_evaluator.add_batch_of_examples( + target=train_utils.unreplicate_and_get( + e_batch['label'])[e_batch_mask], + output=train_utils.unreplicate_and_get(e_output)[e_batch_mask]) + del e_batch, e_output, e_batch_mask + eval_global_metrics_summary = None + if compute_global_metrics: + eval_global_metrics_summary = ( + global_metrics_evaluator.compute_metrics(clear_annotations=True)) + eval_summary = train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + extra_eval_summary=eval_global_metrics_summary, + writer=writer) + writer.flush() + del eval_metrics, eval_global_metrics_summary + chrono.resume() + ##################### CHECKPOINTING ################### + if ((step % checkpoint_steps == 1 and step > 1) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + train_utils.handle_checkpointing( + train_state, chrono, workdir, max_checkpoint_keep) + chrono.resume() + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/tasseo/configs/abnormality_topvit_config.py b/scenic/projects/tasseo/configs/abnormality_topvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..cf9574e368e579cc0783e444ec02b8ac38d3f886 --- /dev/null +++ b/scenic/projects/tasseo/configs/abnormality_topvit_config.py @@ -0,0 +1,214 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for TopVit on abnormality baselines. + +""" +# pylint: disable=line-too-long + +import ml_collections + +# TODO(shamsiz) Make a test dataset and replace abnormality, and job_type with +# dummy variables. + +# Constants +_TOTAL_STEPS = 2_000 +_NUM_TRAIN_NORMALS = { + 'del5_simple': 6089, + 'del5_net': 6089, + 't922_chrm22': 3721, + 't922_chrm9': 3670, +} +_NUM_TRAIN_ABNORMALS = { + 'del5_simple': 1056, + 'del5_net': 1386, + 't922_chrm22': 515, + 't922_chrm9': 387, +} +_TRAINER_NAME = { + 'start_from_scratch': 'classification_trainer', + 'finetune': 'transfer_trainer', + 'eval': 'inference', +} +_DEFAULT_JOB_TYPE = 'finetune' +_DEFAULT_ABNORMALITY = 'del5_simple' + + +def get_config(runlocal='', + job_type=_DEFAULT_JOB_TYPE, + abnormality=_DEFAULT_ABNORMALITY): + """Returns the TopViT config for abnormality baseline task.""" + runlocal = bool(runlocal) + if abnormality not in [ + 'del5_simple', 'del5_net', 't922_chrm22', 't922_chrm9' + ]: + raise ValueError('abnormality must be specified; got "%r"' % abnormality) + if job_type not in ['start_from_scratch', 'finetune', 'eval']: + raise ValueError('job_type must be specified; got "%r"' % job_type) + num_train_normals = _NUM_TRAIN_NORMALS[abnormality] + num_train_abnormals = _NUM_TRAIN_ABNORMALS[abnormality] + trainer_name = _TRAINER_NAME[job_type] + + config = ml_collections.ConfigDict() + config.experiment_name = '%s-topvit-%s' % (abnormality, job_type) + # Dataset. + config.dataset_name = 'abnormality_baseline' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.abnormality = abnormality + # For available cropped shapes, see abnormality_baseline_dataset:DATASET_PREFIXES. + config.dataset_configs.chrm_image_shape = (199, 99) + config.dataset_configs.replica = 0 + config.dataset_configs.num_abnormal = num_train_abnormals + config.dataset_configs.num_normal = num_train_normals + + # Model. + config.model_name = 'topological_vit_classification' + config.model = ml_collections.ConfigDict() + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0.0 + config.model_dtype_str = 'float32' + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [4, 4] + config.model.hidden_size = 768 + config.model.num_heads = 12 + config.model.mlp_dim = 768 + config.model.num_layers = 16 + if job_type != 'start_from_scratch': + # Pretrained model info. + config.init_from = ml_collections.ConfigDict() + config.init_from.xm = (36063788, 15) # ChrmID topvit model + config.init_from.checkpoint_path = None + + # Training. + config.trainer_name = trainer_name + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_steps = _TOTAL_STEPS + # Log eval summary (heavy due to global metrics.) + config.log_eval_steps = 10 + # Log training summary (rather light). + config.log_summary_steps = 10 + config.batch_size = 8 if runlocal else 512 + config.rng_seed = 42 + config.init_head_bias = -10.0 + config.class_balancing = False + config.save_predictions = True # Save predictions in eval mode. + + # Learning rate. + if job_type == 'start_from_scratch': + base_lr = 3e-3 + else: + base_lr = 3e-5 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = _TOTAL_STEPS + config.lr_configs.end_learning_rate = 1e-6 + config.lr_configs.warmup_steps = 1_000 + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Evaluation: + config.global_metrics = [ + 'chrom_recall', + 'chrom_precision', + 'chrom_f1', + 'chrom_roc_auc_score', + 'chrom_auc_pr_score', + 'chrom_specificity', + ] + + if runlocal: + config.count_flops = False + + return config + + +def get_hyper(hyper, + job_type=_DEFAULT_JOB_TYPE, + abnormality=_DEFAULT_ABNORMALITY): + """Defines the hyper-parameters sweeps for doing grid search.""" + if abnormality not in [ + 'del5_simple', 'del5_net', 't922_chrm22', 't922_chrm9' + ]: + raise ValueError('abnormality must be specified; got "%r"' % abnormality) + if job_type not in ['start_from_scratch', 'finetune', 'eval']: + raise ValueError('job_type must be specified; got "%r"' % job_type) + num_train_abnormals = _NUM_TRAIN_ABNORMALS[abnormality] + + if job_type == 'eval': + # Model inference will be run for each (xid, wid) in the list below. + if abnormality == 'del5_simple': + hparams = [ + hyper.sweep( + 'config.init_from.xm', + [ + (42902421, 25), # from-scratch + (42902394, 25), # fine-tuning + ]) + ] + elif abnormality == 'del5_net': + hparams = [hyper.sweep('config.init_from.xm', [])] # ChrmID model is default + elif abnormality == 't922_chrm22': + hparams = [ + hyper.sweep( + 'config.init_from.xm', + [ + (43256082, 25), # fine-tuning + (43275768, 25), # from-scratch + ]) + ] + elif abnormality == 't922_chrm9': + hparams = [ + hyper.sweep( + 'config.init_from.xm', + [ + (43275868, 25), # fine-tuning + (43252546, 25), # from-scratch + ]) + ] + else: + hparams = [ + hyper.chainit([ + hyper.product([ + hyper.sweep('config.dataset_configs.num_abnormal', + [3, 10, 30, 300]), + hyper.sweep('config.dataset_configs.replica', [0, 1, 2, 3, 4]), + ]), + hyper.product([ + hyper.sweep('config.dataset_configs.num_abnormal', + [num_train_abnormals]), + hyper.sweep('config.dataset_configs.replica', [0, 0, 0, 0, 0]), + ]), + ]) + ] + return hyper.chainit(hparams) diff --git a/scenic/projects/tasseo/configs/chrmID/chrmID_duplex_vit_big_context_config.py b/scenic/projects/tasseo/configs/chrmID/chrmID_duplex_vit_big_context_config.py new file mode 100644 index 0000000000000000000000000000000000000000..9dcce1c6938ec14c8bde335f838b9872409d2826 --- /dev/null +++ b/scenic/projects/tasseo/configs/chrmID/chrmID_duplex_vit_big_context_config.py @@ -0,0 +1,136 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for DuplexViT on chrmID. + +""" +# pylint: disable=line-too-long + +import ml_collections + +_TRAIN_SIZE = 409_007 + +# NOTE: Currently, VARIANT is used to configure input, context, and fused +# encoders, so if you want different configs, you should manually change +# them bellow. +VERSION = 'Ti' +CHRM_PATCH = 4 +CONTEXT_PATCH = 64 + +HIDDEN_SIZE = {'Ti': 192, 'S': 384, 'B': 768, 'L': 1024} +NUM_HEADS = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16} +MLP_DIM = {'Ti': 768, 'S': 1536, 'B': 3072, 'L': 4096} +NUM_LAYERS = {'Ti': 12, 'S': 12, 'B': 12, 'L': 24} + + +def get_config(runlocal=''): + """Gets ViT config for chrmID task with (chromosome+metaphase) input.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'chrmID-duplex-vit' + # Dataset. + config.dataset_name = 'chrmID_big_metaphase_context' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + + # Model. + config.model_name = 'duplex_vit_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = HIDDEN_SIZE[VERSION] + config.model.classifier = 'token' + config.model.dropout_rate = 0.0 + config.model.patches = ml_collections.ConfigDict() + config.model.encoder = ml_collections.ConfigDict() + config.model_dtype_str = 'float32' + + num_encoders = 3 # i.e., [input, context, fused]. + # Input encoder + config.model.patches.input_size = [CHRM_PATCH, CHRM_PATCH] + config.model.encoder.input = ml_collections.ConfigDict() + config.model.encoder.input.num_heads = NUM_HEADS[VERSION] + config.model.encoder.input.mlp_dim = MLP_DIM[VERSION] + config.model.encoder.input.num_layers = NUM_LAYERS[VERSION] // num_encoders + config.model.encoder.input.attention_dropout_rate = 0. + config.model.encoder.input.dropout_rate = 0. + config.model.encoder.input.stochastic_depth = 0. + # Context encoder + config.model.patches.context_size = [CONTEXT_PATCH, CONTEXT_PATCH] + config.model.encoder.context = ml_collections.ConfigDict() + config.model.encoder.context.num_heads = NUM_HEADS[VERSION] + config.model.encoder.context.mlp_dim = MLP_DIM[VERSION] + config.model.encoder.context.num_layers = NUM_LAYERS[VERSION] // num_encoders + config.model.encoder.context.attention_dropout_rate = 0. + config.model.encoder.context.dropout_rate = 0. + config.model.encoder.context.stochastic_depth = 0. + # # Fused encoder + config.model.encoder.fused = ml_collections.ConfigDict() + config.model.encoder.fused.num_heads = NUM_HEADS[VERSION] + config.model.encoder.fused.mlp_dim = MLP_DIM[VERSION] + config.model.encoder.fused.num_layers = NUM_LAYERS[VERSION] // num_encoders + config.model.encoder.fused.attention_dropout_rate = 0. + config.model.encoder.fused.dropout_rate = 0. + config.model.encoder.fused.stochastic_depth = 0. + + # Training. + config.trainer_name = 'duplex_vit_classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 500 + # Log eval summary (heavy due to global metrics.) + config.log_eval_steps = 1000 + # Log training summary (rather light). + config.log_summary_steps = 100 + config.batch_size = 8 if runlocal else 512 + config.rng_seed = 42 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 3e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.end_learning_rate = 1e-6 + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + if runlocal: + config.count_flops = False + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/tasseo/configs/chrmID/chrmID_duplex_vit_config.py b/scenic/projects/tasseo/configs/chrmID/chrmID_duplex_vit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..ca1f99c34eef622c60527330f6632a8d82c2864f --- /dev/null +++ b/scenic/projects/tasseo/configs/chrmID/chrmID_duplex_vit_config.py @@ -0,0 +1,134 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for DuplexViT on chrmID. + +""" +# pylint: disable=line-too-long + +import ml_collections + +_TRAIN_SIZE = 409_007 + +# NOTE: Currently, VARIANT is used to configure input, context, and fused +# encoders, so if you want different configs, you should manually change +# them bellow. +VARIANT = 'Ti/16' + + +HIDDEN_SIZE = {'Ti': 192, 'S': 384, 'B': 768, 'L': 1024} +NUM_HEADS = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16} +MLP_DIM = {'Ti': 768, 'S': 1536, 'B': 3072, 'L': 4096} +NUM_LAYERS = {'Ti': 12, 'S': 12, 'B': 12, 'L': 24} + + +def get_config(runlocal=''): + """Gets ViT config for chrmID task with (chromosome+metaphase) input.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'chrmID-vit' + # Dataset. + config.dataset_name = 'chrmID_metaphase_context' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + + # Model. + config.model_name = 'duplex_vit_classification' + config.model = ml_collections.ConfigDict() + version, patch = VARIANT.split('/') + config.model.hidden_size = HIDDEN_SIZE[version] + config.model.classifier = 'token' + config.model.dropout_rate = 0.0 + config.model.patches = ml_collections.ConfigDict() + config.model.encoder = ml_collections.ConfigDict() + config.model_dtype_str = 'float32' + # Input encoder + config.model.patches.input_size = [int(patch), int(patch)] + config.model.encoder.input = ml_collections.ConfigDict() + config.model.encoder.input.num_heads = NUM_HEADS[version] + config.model.encoder.input.mlp_dim = MLP_DIM[version] + config.model.encoder.input.num_layers = NUM_LAYERS[version] // 3 + config.model.encoder.input.attention_dropout_rate = 0. + config.model.encoder.input.dropout_rate = 0. + config.model.encoder.input.stochastic_depth = 0. + # Context encoder + config.model.patches.context_size = [int(patch), int(patch)] + config.model.encoder.context = ml_collections.ConfigDict() + config.model.encoder.context.num_heads = NUM_HEADS[version] + config.model.encoder.context.mlp_dim = MLP_DIM[version] + config.model.encoder.context.num_layers = NUM_LAYERS[version] // 3 + config.model.encoder.context.attention_dropout_rate = 0. + config.model.encoder.context.dropout_rate = 0. + config.model.encoder.context.stochastic_depth = 0. + # # Fused encoder + config.model.encoder.fused = ml_collections.ConfigDict() + config.model.encoder.fused.num_heads = NUM_HEADS[version] + config.model.encoder.fused.mlp_dim = MLP_DIM[version] + config.model.encoder.fused.num_layers = NUM_LAYERS[version] // 3 + config.model.encoder.fused.attention_dropout_rate = 0. + config.model.encoder.fused.dropout_rate = 0. + config.model.encoder.fused.stochastic_depth = 0. + + # Training. + config.trainer_name = 'duplex_vit_classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 500 + # Log eval summary (heavy due to global metrics.) + config.log_eval_steps = 1000 + # Log training summary (rather light). + config.log_summary_steps = 100 + config.batch_size = 8 if runlocal else 512 + config.rng_seed = 42 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 3e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.end_learning_rate = 1e-6 + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + if runlocal: + config.count_flops = False + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/tasseo/configs/chrmID/chrmID_topvit_config_eval.py b/scenic/projects/tasseo/configs/chrmID/chrmID_topvit_config_eval.py new file mode 100644 index 0000000000000000000000000000000000000000..caf916be38b6382d6d93e2fd0ab3bf0be9c02e16 --- /dev/null +++ b/scenic/projects/tasseo/configs/chrmID/chrmID_topvit_config_eval.py @@ -0,0 +1,105 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for ViT on chrmID with input examples cropped to 199x99. + +""" +# pylint: disable=line-too-long + +import ml_collections + +_TRAIN_SIZE = 368_106 + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for chrmID.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'chrmID-topvit-eval' + # Dataset. + config.dataset_name = 'chrmID_baseline' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + # For available cropped shapes, see chrmID_baseline_dataset:DATASET_BASE_DIRS. + config.dataset_configs.chrm_image_shape = (199, 99) + + # Model. + config.model_name = 'topological_vit_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = 768 + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [4, 4] + config.model.num_heads = 12 + config.model.mlp_dim = 768 + config.model.num_layers = 16 + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model_dtype_str = 'float32' + # Pretrained model info. + config.init_from = ml_collections.ConfigDict() + config.init_from.xm = (36063788, 15) # ChrmID topvit model + config.init_from.checkpoint_path = None + + # Training. + config.trainer_name = 'inference' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 500 + config.log_eval_steps = 1000 + config.batch_size = 8 if runlocal else 512 + config.rng_seed = 42 + config.init_head_bias = -10.0 + config.save_predictions = True # Save predictions in eval mode. + + # Learning rate. + steps_per_epoch = _TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 3e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.end_learning_rate = 1e-6 + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + if runlocal: + config.count_flops = False + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/tasseo/configs/chrmID/chrmID_topvit_cropped_config.py b/scenic/projects/tasseo/configs/chrmID/chrmID_topvit_cropped_config.py new file mode 100644 index 0000000000000000000000000000000000000000..8cbfd0ebab93fcf4024b3896f403ab031200e133 --- /dev/null +++ b/scenic/projects/tasseo/configs/chrmID/chrmID_topvit_cropped_config.py @@ -0,0 +1,120 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for ViT on chrmID with input examples cropped to 199x99. + +""" +# pylint: disable=line-too-long + +import ml_collections + +_TRAIN_SIZE = 368_106 +VARIANT = 'Ti/4' + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for chrmID.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'chrmID-vit' + # Dataset. + config.dataset_name = 'chrmID_baseline' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + # For available cropped shapes, see chrmID_baseline_dataset:DATASET_BASE_DIRS. + config.dataset_configs.chrm_image_shape = (199, 99) + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'topological_vit_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = { + 'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280 + }[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = { + 'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120 + }[version] + config.model.num_layers = { + 'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32 + }[version] + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 500 + config.log_eval_steps = 1000 + config.batch_size = 8 if runlocal else 512 + config.rng_seed = 42 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 3e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.end_learning_rate = 1e-6 + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + if runlocal: + config.count_flops = False + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/tasseo/configs/chrmID/chrmID_vit_config.py b/scenic/projects/tasseo/configs/chrmID/chrmID_vit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..8ac8d81d8af296a069f94d1ffd2bea6bc9892421 --- /dev/null +++ b/scenic/projects/tasseo/configs/chrmID/chrmID_vit_config.py @@ -0,0 +1,121 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for ViT on chrmID. + +""" +# pylint: disable=line-too-long + +import ml_collections + +_TRAIN_SIZE = 409_007 +VARIANT = 'Ti/4' + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for chrmID.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'chrmID-vit' + # Dataset. + config.dataset_name = 'chrmID' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'vit_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = { + 'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280 + }[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = { + 'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120 + }[version] + config.model.num_layers = { + 'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32 + }[version] + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 500 + # Log eval summary (heavy due to global metrics.) + config.log_eval_steps = 1000 + # Log training summary (rather light). + config.log_summary_steps = 100 + config.batch_size = 8 if runlocal else 512 + config.rng_seed = 42 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 3e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.end_learning_rate = 1e-6 + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + if runlocal: + config.count_flops = False + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/tasseo/configs/chrmID/chrmID_vit_cropped_config.py b/scenic/projects/tasseo/configs/chrmID/chrmID_vit_cropped_config.py new file mode 100644 index 0000000000000000000000000000000000000000..3897fa702247ce32933b712b53c10ad0ad9ab8a8 --- /dev/null +++ b/scenic/projects/tasseo/configs/chrmID/chrmID_vit_cropped_config.py @@ -0,0 +1,120 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for ViT on chrmID with input examples cropped to 199x99. + +""" +# pylint: disable=line-too-long + +import ml_collections + +_TRAIN_SIZE = 368_106 +VARIANT = 'Ti/4' + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for chrmID.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'chrmID-vit' + # Dataset. + config.dataset_name = 'chrmID_baseline' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + # For available cropped shapes, see chrmID_baseline_dataset:DATASET_BASE_DIRS. + config.dataset_configs.chrm_image_shape = (199, 99) + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'vit_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = { + 'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280 + }[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = { + 'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120 + }[version] + config.model.num_layers = { + 'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32 + }[version] + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 500 + config.log_eval_steps = 1000 + config.batch_size = 8 if runlocal else 512 + config.rng_seed = 42 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 3e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.end_learning_rate = 1e-6 + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + if runlocal: + config.count_flops = False + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/tasseo/configs/chrmID/chrmID_xvit_config.py b/scenic/projects/tasseo/configs/chrmID/chrmID_xvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..413d3c0e06c0056a6737710411677abd0db6e85e --- /dev/null +++ b/scenic/projects/tasseo/configs/chrmID/chrmID_xvit_config.py @@ -0,0 +1,123 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for X-ViT on chromosome identification task. + +""" +# pylint: enable=line-too-long + +import ml_collections + +_TRAIN_SIZE = 409_007 +VARIANT = 'B/4' + + +def get_config(): + """Returns the X-ViT experiment configuration for metaphase sexID.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'chrmID-xvit-jf' + + # Dataset. + config.dataset_name = 'chrmID' + config.data_dtype_str = 'float32' + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'xvit_classification' + config.model_dtype_str = 'float32' + config.model = ml_collections.ConfigDict() + config.model.patches = ml_collections.ConfigDict() + config.model.hidden_size = { + 'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280, + }[version] + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.mlp_dim = { + 'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120, + }[version] + config.model.num_layers = { + 'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32, + }[version] + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model.transformer_encoder_configs = ml_collections.ConfigDict() + config.model.transformer_encoder_configs.type = 'global' + config.model.attention_fn = 'standard' + config.model.attention_configs = ml_collections.ConfigDict() + config.model.attention_configs.num_heads = { + 'Ti': 3, + 'S': 6, + 'B': 12, + 'L': 16, + 'H': 16, + }[version] + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 500 + config.log_eval_steps = 1000 + config.batch_size = 512 # >=1024 causes RESOURCE EXHAUSTED errors. + config.rng_seed = 42 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 3e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.end_learning_rate = 1e-6 + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/tasseo/configs/chrmID/chrmID_xvit_linformer_config.py b/scenic/projects/tasseo/configs/chrmID/chrmID_xvit_linformer_config.py new file mode 100644 index 0000000000000000000000000000000000000000..f7cb9b5919e5b031692bde8e49deef27a04a69a3 --- /dev/null +++ b/scenic/projects/tasseo/configs/chrmID/chrmID_xvit_linformer_config.py @@ -0,0 +1,39 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Linformer configs for X-ViT on chromosome identification task. + +""" +# pylint: enable=line-too-long + +from scenic.projects.tasseo.configs.chrmID import chrmID_xvit_config + + +def get_config(): + """Returns the X-ViT experiment configuration for metaphase sexID.""" + config = chrmID_xvit_config.get_config() + config.experiment_name = 'chrmID-xvit-jf' + config.model_name = 'xvit_classification' + + # Model. + config.model.attention_fn = 'linformer' + config.model.attention_configs.low_rank_features = 16 + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/tasseo/configs/chrmID/chrmID_xvit_performer_config.py b/scenic/projects/tasseo/configs/chrmID/chrmID_xvit_performer_config.py new file mode 100644 index 0000000000000000000000000000000000000000..57fcdb5bd0c2ee7052c2686c24f209cbdeb997f6 --- /dev/null +++ b/scenic/projects/tasseo/configs/chrmID/chrmID_xvit_performer_config.py @@ -0,0 +1,40 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Performer configs for X-ViT on chromosome identification task. + +""" +# pylint: enable=line-too-long + +from scenic.projects.tasseo.configs.chrmID import chrmID_xvit_config + + +def get_config(): + """Returns the X-ViT experiment configuration for metaphase sexID.""" + config = chrmID_xvit_config.get_config() + config.experiment_name = 'chrmID-performer-xvit' + config.model_name = 'xvit_classification' + + # Model. + config.model.attention_fn = 'performer' + config.model.attention_configs.attention_fn_cls = 'generalized' + config.model.attention_configs.attention_fn_configs = None + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/tasseo/configs/chrmID/chrmID_xvit_performer_cropped_config.py b/scenic/projects/tasseo/configs/chrmID/chrmID_xvit_performer_cropped_config.py new file mode 100644 index 0000000000000000000000000000000000000000..0798619671c7e7b661475fb382e9b04b6390aa5b --- /dev/null +++ b/scenic/projects/tasseo/configs/chrmID/chrmID_xvit_performer_cropped_config.py @@ -0,0 +1,48 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Performer configs for X-ViT on chromosome identification task. + +""" +# pylint: enable=line-too-long + +import ml_collections +from scenic.projects.tasseo.configs.chrmID import chrmID_xvit_config + + +def get_config(): + """Returns the X-ViT experiment configuration for metaphase sexID.""" + config = chrmID_xvit_config.get_config() + config.experiment_name = 'chrmID-performer-xvit' + config.model_name = 'xvit_classification' + + # Dataset. + config.dataset_name = 'chrmID_baseline' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + # For available cropped shapes, see chrmID_baseline_dataset:DATASET_BASE_DIRS. + config.dataset_configs.chrm_image_shape = (199, 99) + + # Model. + config.model.attention_fn = 'performer' + config.model.attention_configs.attention_fn_cls = 'generalized' + config.model.attention_configs.attention_fn_configs = None + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/tasseo/configs/del5_net_finetune_topvit_config.py b/scenic/projects/tasseo/configs/del5_net_finetune_topvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..09ab7181b5a1b8e913175958d4ea3b2fbe7bbe6c --- /dev/null +++ b/scenic/projects/tasseo/configs/del5_net_finetune_topvit_config.py @@ -0,0 +1,35 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for TopVit on del5_net baselines. + +""" +# pylint: disable=line-too-long + +from scenic.projects.tasseo.configs import abnormality_topvit_config as config_module + + +_ABNORMALITY = 'del5_net' +_SPLIT = 'finetune' + + +def get_config(*args, **kwargs): + return config_module.get_config( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) + + +def get_hyper(*args, **kwargs): + return config_module.get_hyper( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) diff --git a/scenic/projects/tasseo/configs/del5_net_from_scratch_topvit_config.py b/scenic/projects/tasseo/configs/del5_net_from_scratch_topvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..eb81b062eb537c7e834ecabbc8a910a1dce6cda2 --- /dev/null +++ b/scenic/projects/tasseo/configs/del5_net_from_scratch_topvit_config.py @@ -0,0 +1,35 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for TopVit on del5_net baselines. + +""" +# pylint: disable=line-too-long + +from scenic.projects.tasseo.configs import abnormality_topvit_config as config_module + + +_ABNORMALITY = 'del5_net' +_SPLIT = 'start_from_scratch' + + +def get_config(*args, **kwargs): + return config_module.get_config( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) + + +def get_hyper(*args, **kwargs): + return config_module.get_hyper( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) diff --git a/scenic/projects/tasseo/configs/del5_simple_eval_topvit_config.py b/scenic/projects/tasseo/configs/del5_simple_eval_topvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..27ae14a4075ec1817a72fb74b27a1518d70189c7 --- /dev/null +++ b/scenic/projects/tasseo/configs/del5_simple_eval_topvit_config.py @@ -0,0 +1,35 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for TopVit on del5_simple fine tuned baselines. + +""" +# pylint: disable=line-too-long + +from scenic.projects.tasseo.configs import abnormality_topvit_config as config_module + + +_ABNORMALITY = 'del5_simple' +_SPLIT = 'eval' + + +def get_config(*args, **kwargs): + return config_module.get_config( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) + + +def get_hyper(*args, **kwargs): + return config_module.get_hyper( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) diff --git a/scenic/projects/tasseo/configs/del5_simple_finetune_topvit_config.py b/scenic/projects/tasseo/configs/del5_simple_finetune_topvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..d6cd0b2f26669aea94dcacdf0851b4df3a10c444 --- /dev/null +++ b/scenic/projects/tasseo/configs/del5_simple_finetune_topvit_config.py @@ -0,0 +1,35 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for TopVit on del5_simple fine tuned baselines. + +""" +# pylint: disable=line-too-long + +from scenic.projects.tasseo.configs import abnormality_topvit_config as config_module + + +_ABNORMALITY = 'del5_simple' +_SPLIT = 'finetune' + + +def get_config(*args, **kwargs): + return config_module.get_config( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) + + +def get_hyper(*args, **kwargs): + return config_module.get_hyper( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) diff --git a/scenic/projects/tasseo/configs/del5_simple_from_scratch_topvit_config.py b/scenic/projects/tasseo/configs/del5_simple_from_scratch_topvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..40e4d9d6be7712fba3f21ef8ded45b1a234eb10c --- /dev/null +++ b/scenic/projects/tasseo/configs/del5_simple_from_scratch_topvit_config.py @@ -0,0 +1,35 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for TopVit on del5_simple from scratch baselines. + +""" +# pylint: disable=line-too-long + +from scenic.projects.tasseo.configs import abnormality_topvit_config as config_module + + +_ABNORMALITY = 'del5_simple' +_SPLIT = 'start_from_scratch' + + +def get_config(*args, **kwargs): + return config_module.get_config( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) + + +def get_hyper(*args, **kwargs): + return config_module.get_hyper( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) diff --git a/scenic/projects/tasseo/configs/longtail_kfold_topvit_config.py b/scenic/projects/tasseo/configs/longtail_kfold_topvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..728405f18e096a2bfd4482514c9ac84171481078 --- /dev/null +++ b/scenic/projects/tasseo/configs/longtail_kfold_topvit_config.py @@ -0,0 +1,219 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""TopViT on long tail dataset with k-fold CV support. + +""" +# pylint: disable=line-too-long + +import itertools + +import ml_collections + + +_WARMUP_STEPS = 1000 +_TOTAL_STEPS = _WARMUP_STEPS + 5000 + +# NOTE: Currently, VARIANT is used to configure input, context, and fused +# encoders, so if you want different configs, you should manually change +# them bellow. +VARIANT = 'Ti/4' + +FOLD_BREAKDOWN_METADATA = { + 'inv_16': { + 'all_folds': {'num_abnormal': 19, 'num_normal': 3449}, + 0: {'num_abnormal': 1, 'num_normal': 362}, + 1: {'num_abnormal': 1, 'num_normal': 360}, + 2: {'num_abnormal': 1, 'num_normal': 335}, + 3: {'num_abnormal': 1, 'num_normal': 327}, + 4: {'num_abnormal': 1, 'num_normal': 342}, + 5: {'num_abnormal': 4, 'num_normal': 326}, + 6: {'num_abnormal': 1, 'num_normal': 340}, + 7: {'num_abnormal': 4, 'num_normal': 365}, + 8: {'num_abnormal': 4, 'num_normal': 366}, + 9: {'num_abnormal': 1, 'num_normal': 326}, + }, + 'inv_3_q21q2': { + 'all_folds': {'num_abnormal': 23, 'num_normal': 3469}, + 0: {'num_abnormal': 1, 'num_normal': 363}, + 1: {'num_abnormal': 3, 'num_normal': 343}, + 2: {'num_abnormal': 2, 'num_normal': 320}, + 3: {'num_abnormal': 1, 'num_normal': 333}, + 4: {'num_abnormal': 4, 'num_normal': 345}, + 5: {'num_abnormal': 5, 'num_normal': 315}, + 6: {'num_abnormal': 1, 'num_normal': 328}, + 7: {'num_abnormal': 2, 'num_normal': 387}, + 8: {'num_abnormal': 2, 'num_normal': 352}, + 9: {'num_abnormal': 2, 'num_normal': 383}, + }, + 't_11_19': { + 'all_folds': {'num_abnormal': 47, 'num_normal': 3497}, + 0: {'num_abnormal': 4, 'num_normal': 348}, + 1: {'num_abnormal': 11, 'num_normal': 364}, + 2: {'num_abnormal': 5, 'num_normal': 318}, + 3: {'num_abnormal': 2, 'num_normal': 378}, + 4: {'num_abnormal': 5, 'num_normal': 325}, + 5: {'num_abnormal': 3, 'num_normal': 325}, + 6: {'num_abnormal': 5, 'num_normal': 388}, + 7: {'num_abnormal': 3, 'num_normal': 321}, + 8: {'num_abnormal': 5, 'num_normal': 341}, + 9: {'num_abnormal': 4, 'num_normal': 389}, + }, + 't_9_11': { + 'all_folds': {'num_abnormal': 39, 'num_normal': 3513}, + 0: {'num_abnormal': 8, 'num_normal': 341}, + 1: {'num_abnormal': 3, 'num_normal': 341}, + 2: {'num_abnormal': 2, 'num_normal': 322}, + 3: {'num_abnormal': 4, 'num_normal': 352}, + 4: {'num_abnormal': 1, 'num_normal': 391}, + 5: {'num_abnormal': 1, 'num_normal': 352}, + 6: {'num_abnormal': 10, 'num_normal': 350}, + 7: {'num_abnormal': 1, 'num_normal': 360}, + 8: {'num_abnormal': 4, 'num_normal': 358}, + 9: {'num_abnormal': 5, 'num_normal': 346}, + }, +} + + +def get_train_num_abnormal( + pattern_pathname: str, + test_fold: int, +) -> int: + return FOLD_BREAKDOWN_METADATA[pattern_pathname]['all_folds'][ + 'num_abnormal'] - FOLD_BREAKDOWN_METADATA[pattern_pathname][test_fold][ + 'num_abnormal'] + + +def get_train_num_normal( + pattern_pathname: str, + test_fold: int, +) -> int: + return FOLD_BREAKDOWN_METADATA[pattern_pathname]['all_folds'][ + 'num_normal'] - FOLD_BREAKDOWN_METADATA[pattern_pathname][test_fold][ + 'num_normal'] + + +def get_config(runlocal=''): + """Gets config for training from scratch for all CV fold iterations.""" + _, patch = VARIANT.split('/') + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'longtail-topvit-kfold' + # Dataset. + config.dataset_name = 'longtail_baseline' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.chrm_image_shape = (199, 99) + config.dataset_configs.pattern_pathname = 'inv_16' + config.dataset_configs.test_fold_num = 0 + config.dataset_configs.num_abnormal = 18 + config.dataset_configs.num_normal = 3087 + + # Model. + config.model_name = 'topological_vit_classification' + config.model = ml_collections.ConfigDict() + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0.0 + config.model_dtype_str = 'float32' + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.hidden_size = 768 + config.model.num_heads = 12 + config.model.mlp_dim = 768 + config.model.num_layers = 16 + + # Training. + config.trainer_name = 'transfer_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_steps = _TOTAL_STEPS + # Log eval summary (heavy due to global metrics.) + config.log_eval_steps = 10 + # Log training summary (rather light). + config.log_summary_steps = 10 + config.batch_size = 8 if runlocal else 256 + config.rng_seed = 42 + config.init_head_bias = -10.0 + config.class_balancing = True + + # Learning rate. + base_lr = 3e-5 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = _TOTAL_STEPS + config.lr_configs.end_learning_rate = 1e-6 + config.lr_configs.warmup_steps = _WARMUP_STEPS + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Evaluation: + config.global_metrics = [ + 'chrom_recall', + 'chrom_precision', + 'chrom_f1', + 'chrom_roc_auc_score', + 'chrom_auc_pr_score', + 'chrom_specificity', + ] + + if runlocal: + config.count_flops = False + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + pattern_pathnames = ['inv_16', 'inv_3_q21q2', 't_11_19', 't_9_11'] + test_fold_nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + train_fold_num_abnormals = [ + get_train_num_abnormal(pattern_n, fold_n) + for (pattern_n, + fold_n) in itertools.product(pattern_pathnames, test_fold_nums) + ] + train_fold_num_normals = [ + get_train_num_normal(pattern_n, fold_n) + for (pattern_n, + fold_n) in itertools.product(pattern_pathnames, test_fold_nums) + ] + + domain1 = hyper.product([ + hyper.sweep('config.dataset_configs.pattern_pathname', pattern_pathnames), + hyper.sweep('config.dataset_configs.test_fold_num', test_fold_nums), + ]) + + domain2 = hyper.sweep('config.dataset_configs.num_abnormal', + train_fold_num_abnormals) + domain3 = hyper.sweep('config.dataset_configs.num_normal', + train_fold_num_normals) + return hyper.zipit([domain1, domain2, domain3]) diff --git a/scenic/projects/tasseo/configs/longtail_kfold_topvit_config_eval.py b/scenic/projects/tasseo/configs/longtail_kfold_topvit_config_eval.py new file mode 100644 index 0000000000000000000000000000000000000000..863366b419fe04548fcde08221a126572ba1d376 --- /dev/null +++ b/scenic/projects/tasseo/configs/longtail_kfold_topvit_config_eval.py @@ -0,0 +1,149 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""TopViT on long tail dataset with k-fold CV support. + +""" +# pylint: disable=line-too-long + +import ml_collections + + +_WARMUP_STEPS = 1000 +_TOTAL_STEPS = _WARMUP_STEPS + 5000 + +# NOTE: Currently, VARIANT is used to configure input, context, and fused +# encoders, so if you want different configs, you should manually change +# them bellow. +VARIANT = 'Ti/4' + +FOLD_BREAKDOWN_METADATA = { + 'inv_16': { + 'all_folds': {'num_abnormal': 19, 'num_normal': 3449}, + 0: {'num_abnormal': 1, 'num_normal': 362}, + 1: {'num_abnormal': 1, 'num_normal': 360}, + 2: {'num_abnormal': 1, 'num_normal': 335}, + 3: {'num_abnormal': 1, 'num_normal': 327}, + 4: {'num_abnormal': 1, 'num_normal': 342}, + 5: {'num_abnormal': 4, 'num_normal': 326}, + 6: {'num_abnormal': 1, 'num_normal': 340}, + 7: {'num_abnormal': 4, 'num_normal': 365}, + 8: {'num_abnormal': 4, 'num_normal': 366}, + 9: {'num_abnormal': 1, 'num_normal': 326}, + }, + 'inv_3_q21q2': { + 'all_folds': {'num_abnormal': 23, 'num_normal': 3469}, + 0: {'num_abnormal': 1, 'num_normal': 363}, + 1: {'num_abnormal': 3, 'num_normal': 343}, + 2: {'num_abnormal': 2, 'num_normal': 320}, + 3: {'num_abnormal': 1, 'num_normal': 333}, + 4: {'num_abnormal': 4, 'num_normal': 345}, + 5: {'num_abnormal': 5, 'num_normal': 315}, + 6: {'num_abnormal': 1, 'num_normal': 328}, + 7: {'num_abnormal': 2, 'num_normal': 387}, + 8: {'num_abnormal': 2, 'num_normal': 352}, + 9: {'num_abnormal': 2, 'num_normal': 383}, + }, + 't_11_19': { + 'all_folds': {'num_abnormal': 47, 'num_normal': 3497}, + 0: {'num_abnormal': 4, 'num_normal': 348}, + 1: {'num_abnormal': 11, 'num_normal': 364}, + 2: {'num_abnormal': 5, 'num_normal': 318}, + 3: {'num_abnormal': 2, 'num_normal': 378}, + 4: {'num_abnormal': 5, 'num_normal': 325}, + 5: {'num_abnormal': 3, 'num_normal': 325}, + 6: {'num_abnormal': 5, 'num_normal': 388}, + 7: {'num_abnormal': 3, 'num_normal': 321}, + 8: {'num_abnormal': 5, 'num_normal': 341}, + 9: {'num_abnormal': 4, 'num_normal': 389}, + }, + 't_9_11': { + 'all_folds': {'num_abnormal': 39, 'num_normal': 3513}, + 0: {'num_abnormal': 8, 'num_normal': 341}, + 1: {'num_abnormal': 3, 'num_normal': 341}, + 2: {'num_abnormal': 2, 'num_normal': 322}, + 3: {'num_abnormal': 4, 'num_normal': 352}, + 4: {'num_abnormal': 1, 'num_normal': 391}, + 5: {'num_abnormal': 1, 'num_normal': 352}, + 6: {'num_abnormal': 10, 'num_normal': 350}, + 7: {'num_abnormal': 1, 'num_normal': 360}, + 8: {'num_abnormal': 4, 'num_normal': 358}, + 9: {'num_abnormal': 5, 'num_normal': 346}, + }, +} + + +def get_train_num_abnormal( + pattern_pathname: str, + test_fold: int, +) -> int: + return FOLD_BREAKDOWN_METADATA[pattern_pathname]['all_folds'][ + 'num_abnormal'] - FOLD_BREAKDOWN_METADATA[pattern_pathname][test_fold][ + 'num_abnormal'] + + +def get_train_num_normal( + pattern_pathname: str, + test_fold: int, +) -> int: + return FOLD_BREAKDOWN_METADATA[pattern_pathname]['all_folds'][ + 'num_normal'] - FOLD_BREAKDOWN_METADATA[pattern_pathname][test_fold][ + 'num_normal'] + + +def get_config(runlocal=''): + """Gets config for training from scratch for all CV fold iterations.""" + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'longtail-topvit-kfold' + config.trainer_name = 'inference' + + # Dataset. + config.dataset_name = 'longtail_baseline' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.chrm_image_shape = (199, 99) + config.dataset_configs.pattern_pathname = 'inv_16' + config.dataset_configs.test_fold_num = 0 + config.dataset_configs.num_abnormal = 18 + config.dataset_configs.num_normal = 3087 + + # Model. + config.model_name = 'topological_vit_classification' + config.init_from = ml_collections.ConfigDict() + config.init_from.xm = (None, None) + config.batch_size = 8 if runlocal else 256 + config.rng_seed = 42 + config.save_predictions = True + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + pattern_pathnames = ['inv_16', 'inv_3_q21q2', 't_11_19', 't_9_11'] + test_fold_nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + + # wids corresponding to pattern/test_fold combination. + wids = [(43892109, i) for i in range(1, 41)] + test_set_domain = hyper.product([ + hyper.sweep('config.dataset_configs.pattern_pathname', pattern_pathnames), + hyper.sweep('config.dataset_configs.test_fold_num', test_fold_nums), + ]) + init_from_domain = hyper.product([ + hyper.sweep('config.init_from.xm', wids),]) + + return hyper.zipit([test_set_domain, init_from_domain]) diff --git a/scenic/projects/tasseo/configs/longtail_kfold_topvit_finetuning_config.py b/scenic/projects/tasseo/configs/longtail_kfold_topvit_finetuning_config.py new file mode 100644 index 0000000000000000000000000000000000000000..48b623f19a84c080b008a8d6da8c448e062a375e --- /dev/null +++ b/scenic/projects/tasseo/configs/longtail_kfold_topvit_finetuning_config.py @@ -0,0 +1,223 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""TopViT fine-tuning from chrm id on long tail dataset with k-fold CV support. + +""" +# pylint: disable=line-too-long + +import itertools + +import ml_collections + + +_WARMUP_STEPS = 1000 +_TOTAL_STEPS = _WARMUP_STEPS + 5000 + +# NOTE: Currently, VARIANT is used to configure input, context, and fused +# encoders, so if you want different configs, you should manually change +# them bellow. +VARIANT = 'Ti/4' + +FOLD_BREAKDOWN_METADATA = { + 'inv_16': { + 'all_folds': {'num_abnormal': 19, 'num_normal': 3449}, + 0: {'num_abnormal': 1, 'num_normal': 362}, + 1: {'num_abnormal': 1, 'num_normal': 360}, + 2: {'num_abnormal': 1, 'num_normal': 335}, + 3: {'num_abnormal': 1, 'num_normal': 327}, + 4: {'num_abnormal': 1, 'num_normal': 342}, + 5: {'num_abnormal': 4, 'num_normal': 326}, + 6: {'num_abnormal': 1, 'num_normal': 340}, + 7: {'num_abnormal': 4, 'num_normal': 365}, + 8: {'num_abnormal': 4, 'num_normal': 366}, + 9: {'num_abnormal': 1, 'num_normal': 326}, + }, + 'inv_3_q21q2': { + 'all_folds': {'num_abnormal': 23, 'num_normal': 3469}, + 0: {'num_abnormal': 1, 'num_normal': 363}, + 1: {'num_abnormal': 3, 'num_normal': 343}, + 2: {'num_abnormal': 2, 'num_normal': 320}, + 3: {'num_abnormal': 1, 'num_normal': 333}, + 4: {'num_abnormal': 4, 'num_normal': 345}, + 5: {'num_abnormal': 5, 'num_normal': 315}, + 6: {'num_abnormal': 1, 'num_normal': 328}, + 7: {'num_abnormal': 2, 'num_normal': 387}, + 8: {'num_abnormal': 2, 'num_normal': 352}, + 9: {'num_abnormal': 2, 'num_normal': 383}, + }, + 't_11_19': { + 'all_folds': {'num_abnormal': 47, 'num_normal': 3497}, + 0: {'num_abnormal': 4, 'num_normal': 348}, + 1: {'num_abnormal': 11, 'num_normal': 364}, + 2: {'num_abnormal': 5, 'num_normal': 318}, + 3: {'num_abnormal': 2, 'num_normal': 378}, + 4: {'num_abnormal': 5, 'num_normal': 325}, + 5: {'num_abnormal': 3, 'num_normal': 325}, + 6: {'num_abnormal': 5, 'num_normal': 388}, + 7: {'num_abnormal': 3, 'num_normal': 321}, + 8: {'num_abnormal': 5, 'num_normal': 341}, + 9: {'num_abnormal': 4, 'num_normal': 389}, + }, + 't_9_11': { + 'all_folds': {'num_abnormal': 39, 'num_normal': 3513}, + 0: {'num_abnormal': 8, 'num_normal': 341}, + 1: {'num_abnormal': 3, 'num_normal': 341}, + 2: {'num_abnormal': 2, 'num_normal': 322}, + 3: {'num_abnormal': 4, 'num_normal': 352}, + 4: {'num_abnormal': 1, 'num_normal': 391}, + 5: {'num_abnormal': 1, 'num_normal': 352}, + 6: {'num_abnormal': 10, 'num_normal': 350}, + 7: {'num_abnormal': 1, 'num_normal': 360}, + 8: {'num_abnormal': 4, 'num_normal': 358}, + 9: {'num_abnormal': 5, 'num_normal': 346}, + }, +} + + +def get_train_num_abnormal( + pattern_pathname: str, + test_fold: int, +) -> int: + return FOLD_BREAKDOWN_METADATA[pattern_pathname]['all_folds'][ + 'num_abnormal'] - FOLD_BREAKDOWN_METADATA[pattern_pathname][test_fold][ + 'num_abnormal'] + + +def get_train_num_normal( + pattern_pathname: str, + test_fold: int, +) -> int: + return FOLD_BREAKDOWN_METADATA[pattern_pathname]['all_folds'][ + 'num_normal'] - FOLD_BREAKDOWN_METADATA[pattern_pathname][test_fold][ + 'num_normal'] + + +def get_config(runlocal=''): + """Gets config for finetuning from chrm_id for all CV fold iterations.""" + _, patch = VARIANT.split('/') + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'longtail-topvit-finetuning-kfold' + # Dataset. + config.dataset_name = 'longtail_baseline' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.chrm_image_shape = (199, 99) + config.dataset_configs.pattern_pathname = 'inv_16' + config.dataset_configs.test_fold_num = 0 + config.dataset_configs.num_abnormal = 18 + config.dataset_configs.num_normal = 3087 + + # Model. + config.model_name = 'topological_vit_classification' + config.model = ml_collections.ConfigDict() + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0.0 + config.model_dtype_str = 'float32' + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.hidden_size = 768 + config.model.num_heads = 12 + config.model.mlp_dim = 768 + config.model.num_layers = 16 + # Pretrained model info. + config.init_from = ml_collections.ConfigDict() + config.init_from.xm = (36063788, 15) + config.init_from.checkpoint_path = None + + # Training. + config.trainer_name = 'transfer_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_steps = _TOTAL_STEPS + # Log eval summary (heavy due to global metrics.) + config.log_eval_steps = 10 + # Log training summary (rather light). + config.log_summary_steps = 10 + config.batch_size = 8 if runlocal else 256 + config.rng_seed = 42 + config.init_head_bias = -10.0 + config.class_balancing = True + + # Learning rate. + base_lr = 3e-5 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = _TOTAL_STEPS + config.lr_configs.end_learning_rate = 1e-6 + config.lr_configs.warmup_steps = _WARMUP_STEPS + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Evaluation: + config.global_metrics = [ + 'chrom_recall', + 'chrom_precision', + 'chrom_f1', + 'chrom_roc_auc_score', + 'chrom_auc_pr_score', + 'chrom_specificity', + ] + + if runlocal: + config.count_flops = False + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + pattern_pathnames = ['inv_16', 'inv_3_q21q2', 't_11_19', 't_9_11'] + test_fold_nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + train_fold_num_abnormals = [ + get_train_num_abnormal(pattern_n, fold_n) + for (pattern_n, + fold_n) in itertools.product(pattern_pathnames, test_fold_nums) + ] + train_fold_num_normals = [ + get_train_num_normal(pattern_n, fold_n) + for (pattern_n, + fold_n) in itertools.product(pattern_pathnames, test_fold_nums) + ] + + domain1 = hyper.product([ + hyper.sweep('config.dataset_configs.pattern_pathname', pattern_pathnames), + hyper.sweep('config.dataset_configs.test_fold_num', test_fold_nums), + ]) + + domain2 = hyper.sweep('config.dataset_configs.num_abnormal', + train_fold_num_abnormals) + domain3 = hyper.sweep('config.dataset_configs.num_normal', + train_fold_num_normals) + return hyper.zipit([domain1, domain2, domain3]) diff --git a/scenic/projects/tasseo/configs/longtail_rhs_kfold_topvit_config_eval.py b/scenic/projects/tasseo/configs/longtail_rhs_kfold_topvit_config_eval.py new file mode 100644 index 0000000000000000000000000000000000000000..a59975a230936e4ace1a50ac272e41e2f83ab75e --- /dev/null +++ b/scenic/projects/tasseo/configs/longtail_rhs_kfold_topvit_config_eval.py @@ -0,0 +1,123 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""TopViT on long tail dataset with k-fold CV support. + +""" +# pylint: disable=line-too-long + +import ml_collections + + +_WARMUP_STEPS = 1000 +_TOTAL_STEPS = _WARMUP_STEPS + 5000 + +# NOTE: Currently, VARIANT is used to configure input, context, and fused +# encoders, so if you want different configs, you should manually change +# them bellow. +VARIANT = 'Ti/4' + +FOLD_BREAKDOWN_METADATA = { + 't_11_19': { + 'all_folds': {'num_abnormal': 48, 'num_normal': 3508}, + 0: {'num_abnormal': 1, 'num_normal': 341}, + 1: {'num_abnormal': 6, 'num_normal': 361}, + 2: {'num_abnormal': 3, 'num_normal': 325}, + 3: {'num_abnormal': 4, 'num_normal': 382}, + 4: {'num_abnormal': 3, 'num_normal': 323}, + 5: {'num_abnormal': 11, 'num_normal': 339}, + 6: {'num_abnormal': 5, 'num_normal': 388}, + 7: {'num_abnormal': 4, 'num_normal': 326}, + 8: {'num_abnormal': 6, 'num_normal': 342}, + 9: {'num_abnormal': 5, 'num_normal': 381}, + }, + 't_9_11': { + 'all_folds': {'num_abnormal': 68, 'num_normal': 3559}, + 0: {'num_abnormal': 3, 'num_normal': 339}, + 1: {'num_abnormal': 2, 'num_normal': 341}, + 2: {'num_abnormal': 4, 'num_normal': 325}, + 3: {'num_abnormal': 2, 'num_normal': 362}, + 4: {'num_abnormal': 12, 'num_normal': 398}, + 5: {'num_abnormal': 13, 'num_normal': 349}, + 6: {'num_abnormal': 9, 'num_normal': 369}, + 7: {'num_abnormal': 1, 'num_normal': 346}, + 8: {'num_abnormal': 17, 'num_normal': 390}, + 9: {'num_abnormal': 5, 'num_normal': 340}, + }, +} + + +def get_train_num_abnormal( + pattern_pathname: str, + test_fold: int, +) -> int: + return FOLD_BREAKDOWN_METADATA[pattern_pathname]['all_folds'][ + 'num_abnormal'] - FOLD_BREAKDOWN_METADATA[pattern_pathname][test_fold][ + 'num_abnormal'] + + +def get_train_num_normal( + pattern_pathname: str, + test_fold: int, +) -> int: + return FOLD_BREAKDOWN_METADATA[pattern_pathname]['all_folds'][ + 'num_normal'] - FOLD_BREAKDOWN_METADATA[pattern_pathname][test_fold][ + 'num_normal'] + + +def get_config(runlocal=''): + """Gets config for training from scratch for all CV fold iterations.""" + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'longtail_rhs-topvit-kfold' + config.trainer_name = 'inference' + + # Dataset. + config.dataset_name = 'longtail_rhs_baseline' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.chrm_image_shape = (199, 99) + config.dataset_configs.pattern_pathname = 'inv_16' + config.dataset_configs.test_fold_num = 0 + config.dataset_configs.num_abnormal = 18 + config.dataset_configs.num_normal = 3087 + + # Model. + config.model_name = 'topological_vit_classification' + config.init_from = ml_collections.ConfigDict() + config.init_from.xm = (None, None) + config.batch_size = 8 if runlocal else 256 + config.rng_seed = 42 + config.save_predictions_on_cns = True + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + pattern_pathnames = ['t_11_19', 't_9_11'] + test_fold_nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + + # wids corresponding to pattern/test_fold combination. + wids = [(43932067, i) for i in range(1, 41)] + test_set_domain = hyper.product([ + hyper.sweep('config.dataset_configs.pattern_pathname', pattern_pathnames), + hyper.sweep('config.dataset_configs.test_fold_num', test_fold_nums), + ]) + init_from_domain = hyper.product([ + hyper.sweep('config.init_from.xm', wids),]) + + return hyper.zipit([test_set_domain, init_from_domain]) diff --git a/scenic/projects/tasseo/configs/longtail_rhs_kfold_topvit_finetuning_config.py b/scenic/projects/tasseo/configs/longtail_rhs_kfold_topvit_finetuning_config.py new file mode 100644 index 0000000000000000000000000000000000000000..04b561e44197482ae50b8a5fc0bf06baf8294a39 --- /dev/null +++ b/scenic/projects/tasseo/configs/longtail_rhs_kfold_topvit_finetuning_config.py @@ -0,0 +1,197 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""TopViT fine-tuning from chrm id on long tail rhs with k-fold CV support. + +""" +# pylint: disable=line-too-long + +import itertools + +import ml_collections + + +_WARMUP_STEPS = 1000 +_TOTAL_STEPS = _WARMUP_STEPS + 5000 + +# NOTE: Currently, VARIANT is used to configure input, context, and fused +# encoders, so if you want different configs, you should manually change +# them bellow. +VARIANT = 'Ti/4' + +FOLD_BREAKDOWN_METADATA = { + 't_11_19': { + 'all_folds': {'num_abnormal': 48, 'num_normal': 3503}, + 0: {'num_abnormal': 1, 'num_normal': 334}, + 1: {'num_abnormal': 6, 'num_normal': 341}, + 2: {'num_abnormal': 3, 'num_normal': 360}, + 3: {'num_abnormal': 4, 'num_normal': 327}, + 4: {'num_abnormal': 3, 'num_normal': 358}, + 5: {'num_abnormal': 11, 'num_normal': 379}, + 6: {'num_abnormal': 5, 'num_normal': 333}, + 7: {'num_abnormal': 4, 'num_normal': 341}, + 8: {'num_abnormal': 6, 'num_normal': 362}, + 9: {'num_abnormal': 5, 'num_normal': 368}, + }, + 't_9_11': { + 'all_folds': {'num_abnormal': 68, 'num_normal': 3559}, + 0: {'num_abnormal': 3, 'num_normal': 341}, + 1: {'num_abnormal': 2, 'num_normal': 354}, + 2: {'num_abnormal': 4, 'num_normal': 319}, + 3: {'num_abnormal': 2, 'num_normal': 386}, + 4: {'num_abnormal': 12, 'num_normal': 338}, + 5: {'num_abnormal': 13, 'num_normal': 332}, + 6: {'num_abnormal': 9, 'num_normal': 412}, + 7: {'num_abnormal': 1, 'num_normal': 330}, + 8: {'num_abnormal': 17, 'num_normal': 371}, + 9: {'num_abnormal': 5, 'num_normal': 376}, + } +} + + +def get_train_num_abnormal( + pattern_pathname: str, + test_fold: int, +) -> int: + return FOLD_BREAKDOWN_METADATA[pattern_pathname]['all_folds'][ + 'num_abnormal'] - FOLD_BREAKDOWN_METADATA[pattern_pathname][test_fold][ + 'num_abnormal'] + + +def get_train_num_normal( + pattern_pathname: str, + test_fold: int, +) -> int: + return FOLD_BREAKDOWN_METADATA[pattern_pathname]['all_folds'][ + 'num_normal'] - FOLD_BREAKDOWN_METADATA[pattern_pathname][test_fold][ + 'num_normal'] + + +def get_config(runlocal=''): + """Gets config for finetuning from chrm_id for all CV fold iterations.""" + _, patch = VARIANT.split('/') + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'longtail-topvit-finetuning-kfold' + # Dataset. + config.dataset_name = 'longtail_rhs_baseline' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.chrm_image_shape = (199, 99) + config.dataset_configs.pattern_pathname = 'inv_16' + config.dataset_configs.test_fold_num = 0 + config.dataset_configs.num_abnormal = 18 + config.dataset_configs.num_normal = 3087 + + # Model. + config.model_name = 'topological_vit_classification' + config.model = ml_collections.ConfigDict() + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0.0 + config.model_dtype_str = 'float32' + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [int(patch), int(patch)] + config.model.hidden_size = 768 + config.model.num_heads = 12 + config.model.mlp_dim = 768 + config.model.num_layers = 16 + # Pretrained model info. + config.init_from = ml_collections.ConfigDict() + config.init_from.xm = (36063788, 15) + config.init_from.checkpoint_path = None + + # Training. + config.trainer_name = 'transfer_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_steps = _TOTAL_STEPS + # Log eval summary (heavy due to global metrics.) + config.log_eval_steps = 10 + # Log training summary (rather light). + config.log_summary_steps = 10 + config.batch_size = 8 if runlocal else 256 + config.rng_seed = 42 + config.init_head_bias = -10.0 + config.class_balancing = True + + # Learning rate. + base_lr = 3e-5 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = _TOTAL_STEPS + config.lr_configs.end_learning_rate = 1e-6 + config.lr_configs.warmup_steps = _WARMUP_STEPS + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + # Evaluation: + config.global_metrics = [ + 'recall', + 'precision', + 'f1', + 'roc_auc_score', + 'auc_pr_score', + 'specificity', + ] + + if runlocal: + config.count_flops = False + + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + pattern_pathnames = ['t_11_19', 't_9_11'] + test_fold_nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + train_fold_num_abnormals = [ + get_train_num_abnormal(pattern_n, fold_n) + for (pattern_n, + fold_n) in itertools.product(pattern_pathnames, test_fold_nums) + ] + train_fold_num_normals = [ + get_train_num_normal(pattern_n, fold_n) + for (pattern_n, + fold_n) in itertools.product(pattern_pathnames, test_fold_nums) + ] + + domain1 = hyper.product([ + hyper.sweep('config.dataset_configs.pattern_pathname', pattern_pathnames), + hyper.sweep('config.dataset_configs.test_fold_num', test_fold_nums), + ]) + + domain2 = hyper.sweep('config.dataset_configs.num_abnormal', + train_fold_num_abnormals) + domain3 = hyper.sweep('config.dataset_configs.num_normal', + train_fold_num_normals) + return hyper.zipit([domain1, domain2, domain3]) diff --git a/scenic/projects/tasseo/configs/metaphase_sexid_xvit_config.py b/scenic/projects/tasseo/configs/metaphase_sexid_xvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..32ede841c5f050ede657a2e63b44a0996dcf6f96 --- /dev/null +++ b/scenic/projects/tasseo/configs/metaphase_sexid_xvit_config.py @@ -0,0 +1,96 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for X-ViT on metaphase sex ID. + +""" +# pylint: enable=line-too-long + +import ml_collections + +_TRAIN_SIZE = 80_000 + + +def get_config(): + """Returns the X-ViT experiment configuration for metaphase sexID.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'meta-sexid-xvit' + + # Dataset. + config.dataset_name = 'metaphase_sexid' + config.data_dtype_str = 'float32' + + # Model. + config.model_name = 'xvit_multilabel_classification' + config.model_dtype_str = 'float32' + config.model = ml_collections.ConfigDict() + config.model.patches = ml_collections.ConfigDict() + config.model.hidden_size = 768 + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [4, 4] + config.model.mlp_dim = 2048 + config.model.num_layers = 12 + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model.transformer_encoder_configs = ml_collections.ConfigDict() + config.model.transformer_encoder_configs.type = 'global' + config.model.attention_fn = 'standard' + config.model.attention_configs = ml_collections.ConfigDict() + config.model.attention_configs.num_heads = 12 + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.1 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = None + config.label_smoothing = None + config.num_training_epochs = 100 + config.log_eval_steps = 1000 + config.batch_size = 1024 + config.rng_seed = 42 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 8e-4 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.end_learning_rate = 1e-5 + config.lr_configs.warmup_steps = 1000 + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + +def get_hyper(hyper): + """Defines the hyper-parameters sweeps for doing grid search.""" + return hyper.product([]) diff --git a/scenic/projects/tasseo/configs/t922_chrm22_eval_topvit_config.py b/scenic/projects/tasseo/configs/t922_chrm22_eval_topvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..33d1a41d805bedbd154df6c0db6a1deb027aa762 --- /dev/null +++ b/scenic/projects/tasseo/configs/t922_chrm22_eval_topvit_config.py @@ -0,0 +1,35 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for TopVit on t922_chrm22 baselines. + +""" +# pylint: disable=line-too-long + +from scenic.projects.tasseo.configs import abnormality_topvit_config as config_module + + +_ABNORMALITY = 't922_chrm22' +_SPLIT = 'eval' + + +def get_config(*args, **kwargs): + return config_module.get_config( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) + + +def get_hyper(*args, **kwargs): + return config_module.get_hyper( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) diff --git a/scenic/projects/tasseo/configs/t922_chrm22_finetune_topvit_config.py b/scenic/projects/tasseo/configs/t922_chrm22_finetune_topvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..649bc3b02aac46ae322e02e932287657e79e8367 --- /dev/null +++ b/scenic/projects/tasseo/configs/t922_chrm22_finetune_topvit_config.py @@ -0,0 +1,35 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for TopVit on t922_chrm22 baselines. + +""" +# pylint: disable=line-too-long + +from scenic.projects.tasseo.configs import abnormality_topvit_config as config_module + + +_ABNORMALITY = 't922_chrm22' +_SPLIT = 'finetune' + + +def get_config(*args, **kwargs): + return config_module.get_config( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) + + +def get_hyper(*args, **kwargs): + return config_module.get_hyper( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) diff --git a/scenic/projects/tasseo/configs/t922_chrm22_from_scratch_topvit_config.py b/scenic/projects/tasseo/configs/t922_chrm22_from_scratch_topvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..9de2c02b1822b464efd8169cc7a2dddafac0ad22 --- /dev/null +++ b/scenic/projects/tasseo/configs/t922_chrm22_from_scratch_topvit_config.py @@ -0,0 +1,35 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for TopVit on t922_chrm22 baselines. + +""" +# pylint: disable=line-too-long + +from scenic.projects.tasseo.configs import abnormality_topvit_config as config_module + + +_ABNORMALITY = 't922_chrm22' +_SPLIT = 'start_from_scratch' + + +def get_config(*args, **kwargs): + return config_module.get_config( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) + + +def get_hyper(*args, **kwargs): + return config_module.get_hyper( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) diff --git a/scenic/projects/tasseo/configs/t922_chrm9_eval_topvit_config.py b/scenic/projects/tasseo/configs/t922_chrm9_eval_topvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..c31dd81c20ca8bb00e3244e41918f1da54a6db08 --- /dev/null +++ b/scenic/projects/tasseo/configs/t922_chrm9_eval_topvit_config.py @@ -0,0 +1,35 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for TopVit on t922_chrm9 baselines. + +""" +# pylint: disable=line-too-long + +from scenic.projects.tasseo.configs import abnormality_topvit_config as config_module + + +_ABNORMALITY = 't922_chrm9' +_SPLIT = 'eval' + + +def get_config(*args, **kwargs): + return config_module.get_config( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) + + +def get_hyper(*args, **kwargs): + return config_module.get_hyper( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) diff --git a/scenic/projects/tasseo/configs/t922_chrm9_finetune_topvit_config.py b/scenic/projects/tasseo/configs/t922_chrm9_finetune_topvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..b52a30b61ce31e49876fa1cb0b572ee1e4600148 --- /dev/null +++ b/scenic/projects/tasseo/configs/t922_chrm9_finetune_topvit_config.py @@ -0,0 +1,35 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for TopVit on t922_chrm9 baselines. + +""" +# pylint: disable=line-too-long + +from scenic.projects.tasseo.configs import abnormality_topvit_config as config_module + + +_ABNORMALITY = 't922_chrm9' +_SPLIT = 'finetune' + + +def get_config(*args, **kwargs): + return config_module.get_config( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) + + +def get_hyper(*args, **kwargs): + return config_module.get_hyper( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) diff --git a/scenic/projects/tasseo/configs/t922_chrm9_from_scratch_topvit_config.py b/scenic/projects/tasseo/configs/t922_chrm9_from_scratch_topvit_config.py new file mode 100644 index 0000000000000000000000000000000000000000..6529d49bc2a0cd9b73b14146e320f60f1616d9ba --- /dev/null +++ b/scenic/projects/tasseo/configs/t922_chrm9_from_scratch_topvit_config.py @@ -0,0 +1,35 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for TopVit on t922_chrm9 baselines. + +""" +# pylint: disable=line-too-long + +from scenic.projects.tasseo.configs import abnormality_topvit_config as config_module + + +_ABNORMALITY = 't922_chrm9' +_SPLIT = 'start_from_scratch' + + +def get_config(*args, **kwargs): + return config_module.get_config( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) + + +def get_hyper(*args, **kwargs): + return config_module.get_hyper( + *args, job_type=_SPLIT, abnormality=_ABNORMALITY, **kwargs) diff --git a/scenic/projects/tasseo/dataset_utils.py b/scenic/projects/tasseo/dataset_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..d027bbd88466357921fb17335dcfa4387ad876a6 --- /dev/null +++ b/scenic/projects/tasseo/dataset_utils.py @@ -0,0 +1,181 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for tasseo trainer.""" + +from absl import logging +import jax +import numpy as np +import tensorflow as tf + + +def parse_example(serialized_example): + """Parses feature dictionary from the `serialized_example` proto. + + Args: + serialized_example: The proto of the current example. + + Returns: + A parsed example as dict with several elements. + """ + feature_description = { + 'chrm_img': tf.io.FixedLenFeature([], tf.string, default_value=''), + 'meta_img': tf.io.FixedLenFeature([], tf.string, default_value=''), + 'label': tf.io.FixedLenFeature([], tf.string, default_value=''), + 'chrm_path': tf.io.FixedLenFeature([], tf.string, default_value=''), + } + + features = tf.io.parse_single_example(serialized_example, feature_description) + + return features + + +def load_data(prefix, is_train=False, parallel_reads=4): + """Loads the metaphase dataset. + + Args: + prefix: str; Dataset path prefix to tfrecords. + is_train: bool; is the dataset used for training? + parallel_reads: int; Number of parallel readers (set to 1 for determinism). + + Returns: + tf.data.Datasets for training, testing and validation. + """ + num_hosts = jax.process_count() + host_id = jax.process_index() + + # We shard the data between different hosts and create a Dataset that includes + # only 1/num_shards of full dataset. + filenames = tf.io.matching_files(prefix + '*') + filenames_host_split = np.array_split(filenames, num_hosts)[host_id] + logging.info('Host id=%d assigned %d out of %d dataset filenames (train=%r).', + host_id, len(filenames_host_split), len(filenames), is_train) + if not list(filenames_host_split): + raise ValueError( + 'Zero dataset filenames assigned to host %d for reading; %d available' + ' for all hosts' % (host_id, len(filenames))) + files = tf.data.Dataset.list_files(filenames_host_split) + + data = files.interleave( + tf.data.TFRecordDataset, + cycle_length=1 if not is_train else parallel_reads, + num_parallel_calls=tf.data.experimental.AUTOTUNE) + data = data.map( + parse_example, + num_parallel_calls=tf.data.experimental.AUTOTUNE) + return data + + +def build_dataset(dataset_fn, + batch_size=None, + shuffle_buffer_size=256, + seed=None, + strategy=None, + **dataset_kwargs): + """Dataset builder that takes care of strategy, batching and shuffling. + + Args: + dataset_fn: function; A function that loads the dataset. + batch_size: int; Size of the batch. + shuffle_buffer_size: int; Size of the buffer for used for shuffling. + seed: int; Random seed used for shuffling. + strategy: TF strategy that handles the distribution policy. + **dataset_kwargs: dict; Arguments passed to TFDS. + + Returns: + Dataset. + """ + + def _dataset_fn(input_context=None): + """Dataset function.""" + replica_batch_size = batch_size + if input_context: + replica_batch_size = input_context.get_per_replica_batch_size(batch_size) + ds = dataset_fn(**dataset_kwargs) + split = dataset_kwargs.get('split') + if split == 'train': + # first repeat then shuffle, then batch + ds = ds.repeat() + local_seed = seed # seed for this machine + if local_seed is not None and input_context: + local_seed += input_context.input_pipeline_id + ds = ds.shuffle(shuffle_buffer_size, seed=local_seed) + ds = ds.batch(replica_batch_size, drop_remainder=True) + else: # test and validation + # first batch then repeat + ds = ds.batch(replica_batch_size, drop_remainder=False) + ds = ds.repeat() + options = tf.data.Options() + options.experimental_optimization.parallel_batch = True + ds = ds.with_options(options) + return ds.prefetch(tf.data.experimental.AUTOTUNE) + + if strategy: + ds = strategy.experimental_distribute_datasets_from_function(_dataset_fn) + else: + ds = _dataset_fn() + + return ds + + +def pad( + key, + max_length=100, + pad_char='#', +): + """Pads a key string to a fixed length. + + We have to iteratively find an integer eqaul to key_length tensor to be able + to multiply it by pad_char and make a proper pad. + + Args: + key: The original key, usually a path-like string. + max_length: Length of the desired key. + pad_char: Character to be used for padding. + + Returns: + Padded key of the required length. + """ + padding = '' + # Transform the key into the basename of the file without the extension. + key = tf.strings.join([ + tf.strings.split(key, sep='/')[-2], '/', + tf.strings.split(key, sep='/')[-1] + ]) + key = tf.strings.regex_replace(key, '.png', '') + for padding_size in range(1, max_length): + if tf.math.equal(padding_size, max_length - tf.strings.length(key)): + padding = padding_size * pad_char + padded_key = tf.strings.join([padding, key]) + return padded_key + + +def preprocess(features, label_key, chrm_image_shape, class_names=None): + """Preprocessing code.""" + if isinstance(label_key, str): + labels = features[label_key] + else: + labels = tuple(features[k] for k in label_key) + + class_names = tf.convert_to_tensor(class_names) + chrm = tf.reshape( + tf.io.decode_raw(features['chrm_img'], tf.float32), + tuple(chrm_image_shape) + (1,)) + labels = labels == class_names # Creates one-hot label. + + return { + 'inputs': chrm, + 'label': labels, + 'key': tf.strings.unicode_decode(pad(features['chrm_path']), 'UTF-8'), + } diff --git a/scenic/projects/tasseo/datasets/abnormality_baseline_dataset.py b/scenic/projects/tasseo/datasets/abnormality_baseline_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..6708fbb959d8dd9392284dc13045bdea546a8fca --- /dev/null +++ b/scenic/projects/tasseo/datasets/abnormality_baseline_dataset.py @@ -0,0 +1,171 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset for abnormality tasks with baseline-formatted examples.""" + +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.projects.tasseo import dataset_utils as ts_dataset_utils + + +NUM_TRAIN_EXAMPLES = { + 'del5_simple': 7145, + 'del5_net': 7475, + 't922_chrm22': 4236, + 't922_chrm9': 4057, +} +NUM_VALIDATION_EXAMPLES = { + 'del5_simple': 887, + 'del5_net': 932, + 't922_chrm22': 484, + 't922_chrm9': 460, +} +NUM_TEST_EXAMPLES = { + 'del5_simple': 828, + 'del5_net': 854, + 't922_chrm22': 0, + 't922_chrm9': 0, +} +NUM_CLASSES = 2 +CLASS_NAMES = ('normal', 'abnormal') +NUM_CHANNELS = 1 + + +@datasets.add_dataset('abnormality_baseline') +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the chrmID train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + prefetch_buffer_size: int; Buffer size for the prefetch. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + + del rng + # Add path to your training data here: + path = '' + + def build_baseline_dataset(split='train', shuffle=True): + """dataset_fn called by data.build_dataset(**kwargs).""" + parallel_reads = 4 if shuffle else 1 + + if split == 'train': + dataset_prefix = dataset_prefixes['train'] % ( + dataset_configs.num_abnormal, dataset_configs.replica) + else: + dataset_prefix = dataset_prefixes[split] + ds = ts_dataset_utils.load_data( + dataset_prefix, + is_train=(split == 'train'), + parallel_reads=parallel_reads) + ds = ds.map( + lambda x: ts_dataset_utils.preprocess( # pylint:disable=g-long-lambda + x, 'label', dataset_configs.chrm_image_shape, + class_names=CLASS_NAMES)) + return ds + + # use different seed for each host + if shuffle_seed is None: + local_seed = None + else: + data_seed = 0 + local_seed = data_seed + jax.process_index() + + train_dataset = ts_dataset_utils.build_dataset( + dataset_fn=build_baseline_dataset, + batch_size=batch_size, + seed=local_seed, + split='train', + strategy=None) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_dataset = dataset_utils.distribute(train_dataset, + dataset_service_address) + + eval_dataset = ts_dataset_utils.build_dataset( + dataset_fn=build_baseline_dataset, + split='valid', + batch_size=eval_batch_size, + strategy=None) + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + + train_iter = iter(train_dataset) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + train_iter = jax_utils.prefetch_to_device(train_iter, prefetch_buffer_size) + + valid_iter = iter(eval_dataset) + valid_iter = map(dataset_utils.tf_to_numpy, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + valid_iter = map(shard_batches, valid_iter) + valid_iter = jax_utils.prefetch_to_device(valid_iter, prefetch_buffer_size) + + input_shape = [-1] + list(dataset_configs.chrm_image_shape) + [NUM_CHANNELS] + meta_data = { + 'num_classes': + NUM_CLASSES, + 'input_shape': + input_shape, + 'num_train_examples': + int(NUM_TRAIN_EXAMPLES[dataset_configs.abnormality]), + 'num_eval_examples': + NUM_VALIDATION_EXAMPLES[dataset_configs.abnormality], + 'input_dtype': + getattr(jnp, dtype_str), + 'target_is_onehot': + True, + } + + return dataset_utils.Dataset(train_iter, valid_iter, None, meta_data) + diff --git a/scenic/projects/tasseo/datasets/chrmID_baseline_dataset.py b/scenic/projects/tasseo/datasets/chrmID_baseline_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..67cc2cea12668ffcf4c016df18fb2219a55594f8 --- /dev/null +++ b/scenic/projects/tasseo/datasets/chrmID_baseline_dataset.py @@ -0,0 +1,302 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset for chromosome ID task with baseline-formatted examples.""" + +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax +import jax.numpy as jnp +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.projects.tasseo import dataset_utils as ts_dataset_utils +import tensorflow as tf + + +NUM_TRAIN_EXAMPLES = 368_106 +NUM_TEST_EXAMPLES = 40_620 +NUM_CLASSES = 24 +NUM_CHANNELS = 1 + +# TODO(shamsiz) Filter out abnormal karyograms in (99,49) and (149,69) datasets. +# path to data's base directory +DATASET_BASE_DIRS = { + (99, 49): '', + (149, 69): '', + (199, 99): '', +} + + +@datasets.add_dataset('chrmID_baseline') +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the chrmID train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + prefetch_buffer_size: int; Buffer size for the prefetch. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + + del rng + try: + dataset_base_dir = DATASET_BASE_DIRS[tuple( + dataset_configs.chrm_image_shape)] + except KeyError as key_error: + raise ValueError('No dataset found matching "%s"; options: %r' % + (dataset_configs.chrm_image_shape, + DATASET_BASE_DIRS.keys())) from key_error + + def build_baseline_dataset(split='train', shuffle=False): + """dataset_fn called by data.build_dataset(**kwargs).""" + parallel_reads = 4 if shuffle else 1 + + ds = load_data( + dataset_base_dir, + split, + parallel_reads=parallel_reads) + ds = ds.map( + lambda x: preprocess(x, 'label', dataset_configs.chrm_image_shape)) + return ds + + # use different seed for each host + if shuffle_seed is None: + local_seed = None + else: + data_seed = 0 + local_seed = data_seed + jax.process_index() + + train_dataset = build_dataset( + dataset_fn=build_baseline_dataset, + batch_size=batch_size, + seed=local_seed, + split='train', + strategy=None) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_dataset = dataset_utils.distribute(train_dataset, + dataset_service_address) + + eval_dataset = build_dataset( + dataset_fn=build_baseline_dataset, + split='valid', + batch_size=eval_batch_size, + strategy=None) + + test_dataset = build_dataset( + dataset_fn=build_baseline_dataset, + split='test', + batch_size=eval_batch_size, + strategy=None) + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + + train_iter = iter(train_dataset) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + train_iter = jax_utils.prefetch_to_device(train_iter, prefetch_buffer_size) + + valid_iter = iter(eval_dataset) + valid_iter = map(dataset_utils.tf_to_numpy, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + valid_iter = map(shard_batches, valid_iter) + valid_iter = jax_utils.prefetch_to_device(valid_iter, prefetch_buffer_size) + + test_iter = iter(test_dataset) + test_iter = map(dataset_utils.tf_to_numpy, test_iter) + test_iter = map(maybe_pad_batches_eval, test_iter) + test_iter = map(shard_batches, test_iter) + test_iter = jax_utils.prefetch_to_device(test_iter, prefetch_buffer_size) + + input_shape = [-1] + list(dataset_configs.chrm_image_shape) + [NUM_CHANNELS] + meta_data = { + 'num_classes': NUM_CLASSES, + 'input_shape': input_shape, + 'num_train_examples': NUM_TRAIN_EXAMPLES, + 'num_eval_examples': NUM_TEST_EXAMPLES, + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': True, + } + + return dataset_utils.Dataset(train_iter, valid_iter, test_iter, meta_data) + + +def parse_example(serialized_example): + """Parses feature dictionary from the `serialized_example` proto. + + Args: + serialized_example: The proto of the current example. + + Returns: + A parsed example as dict with several elements. + """ + feature_description = { + 'chrm_img': tf.io.FixedLenFeature([], tf.string, default_value=''), + 'meta_img': tf.io.FixedLenFeature([], tf.string, default_value=''), + 'label': tf.io.FixedLenFeature([], tf.string, default_value=''), + 'chrm_path': tf.io.FixedLenFeature([], tf.string, default_value=''), + } + + features = tf.io.parse_single_example(serialized_example, feature_description) + + return features + + +def load_data(base_dir, split, parallel_reads=4): + """Loads the metaphase dataset. + + Args: + base_dir: Base directory containing dataset as tfrecords. + split: str; One of 'train', 'eval' or 'test'. + parallel_reads: int; Number of parallel readers (set to 1 for determinism). + + Returns: + tf.data.Datasets for training, testing and validation. + """ + num_hosts = jax.process_count() + host_id = jax.process_index() + + if split == 'train': + path = base_dir + '[0-7]-00*' + elif split == 'validation': + path = base_dir + '8-00*' + else: + path = base_dir + '9-00*' + + # We shard the data between different hosts and create a Dataset that includes + # only 1/num_shards of full dataset. + filenames = tf.io.matching_files(path) + filenames_host_split = np.array_split(filenames, num_hosts)[host_id] + files = tf.data.Dataset.list_files(filenames_host_split) + + data = files.interleave( + tf.data.TFRecordDataset, + cycle_length=1 if split != 'train' else parallel_reads, + num_parallel_calls=tf.data.experimental.AUTOTUNE) + data = data.map( + parse_example, + num_parallel_calls=tf.data.experimental.AUTOTUNE) + return data + + +def build_dataset(dataset_fn, + batch_size=None, + shuffle_buffer_size=256, + seed=None, + strategy=None, + **dataset_kwargs): + """Dataset builder that takes care of strategy, batching and shuffling. + + Args: + dataset_fn: function; A function that loads the dataset. + batch_size: int; Size of the batch. + shuffle_buffer_size: int; Size of the buffer for used for shuffling. + seed: int; Random seed used for shuffling. + strategy: TF strategy that handles the distribution policy. + **dataset_kwargs: dict; Arguments passed to TFDS. + + Returns: + Dataset. + """ + + def _dataset_fn(input_context=None): + """Dataset function.""" + replica_batch_size = batch_size + if input_context: + replica_batch_size = input_context.get_per_replica_batch_size(batch_size) + ds = dataset_fn(**dataset_kwargs) + split = dataset_kwargs.get('split') + if split == 'train': + # first repeat then shuffle, then batch + ds = ds.repeat() + local_seed = seed # seed for this machine + if local_seed is not None and input_context: + local_seed += input_context.input_pipeline_id + ds = ds.shuffle(shuffle_buffer_size, seed=local_seed) + ds = ds.batch(replica_batch_size, drop_remainder=True) + else: # test and validation + # first batch then repeat + ds = ds.batch(replica_batch_size, drop_remainder=False) + ds = ds.repeat() + options = tf.data.Options() + options.experimental_optimization.parallel_batch = True + ds = ds.with_options(options) + return ds.prefetch(tf.data.experimental.AUTOTUNE) + + if strategy: + ds = strategy.experimental_distribute_datasets_from_function(_dataset_fn) + else: + ds = _dataset_fn() + + return ds + + +def preprocess(features, label_key, chrm_image_shape): + """Preprocessing code specific to metaphase images.""" + if isinstance(label_key, str): + labels = features[label_key] + else: + labels = tuple(features[k] for k in label_key) + + class_names = tf.convert_to_tensor([ + b'chrm_%d' % i for i in range(1, 23)] + [b'chrm_X', b'chrm_Y']) + chrm = tf.reshape( + tf.io.decode_raw(features['chrm_img'], tf.float32), + tuple(chrm_image_shape) + (1,)) + labels = labels == class_names # Creates one-hot label. + + return { + 'inputs': + chrm, + 'label': + labels, + 'key': + tf.strings.unicode_decode( + ts_dataset_utils.pad(features['chrm_path']), 'UTF-8'), + } diff --git a/scenic/projects/tasseo/datasets/chrmID_big_metaphase_context_dataset.py b/scenic/projects/tasseo/datasets/chrmID_big_metaphase_context_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..2a3678f864b3e7107a6a5d1c7d446af8bb84bc9e --- /dev/null +++ b/scenic/projects/tasseo/datasets/chrmID_big_metaphase_context_dataset.py @@ -0,0 +1,305 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset for chrmID task that contains (big metaphase) context examples.""" + +import functools +from typing import Optional +from absl import logging + +from flax import jax_utils +import jax +import jax.numpy as jnp +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf + + +NUM_TRAIN_EXAMPLES = 409_007 +NUM_TEST_EXAMPLES = 45_134 +NUM_CLASSES = 24 +NUM_CHANNELS = 1 +CHRM_IMAGE_SHAPE = (199, 99) +METAPHASE_IMAGE_SHAPE = (512, 512) +# path to data's base directory +_BASE_DIR = '' + + +def _parse_example(serialized_example): + """Parses feature dictionary from the `serialized_example` proto. + + Args: + serialized_example: The proto of the current example. + + Returns: + A parsed example as dict with several elements. + """ + feature_description = { + 'chrm_img': tf.io.FixedLenFeature([], tf.string, default_value=''), + 'meta_img': tf.io.FixedLenFeature([], tf.string, default_value=''), + 'label': tf.io.FixedLenFeature([], tf.string, default_value='') + } + + features = tf.io.parse_single_example(serialized_example, feature_description) + + return features + + +def _resize(image, image_size): + """Resizes the image. + + Args: + image: Tensor; Input image. + image_size: int; Image size. + + Returns: + Resized image. + """ + return tf.image.resize([image], [image_size, image_size], + method=tf.image.ResizeMethod.BICUBIC)[0] + + +def load_data(split, parallel_reads=4): + """Loads the metaphase dataset. + + Args: + split: str; One of 'train', 'eval' or 'test'. + parallel_reads: int; Number of parallel readers (set to 1 for determinism). + + Returns: + tf.data.Datasets for training, testing and validation. + """ + base_dir = _BASE_DIR + num_hosts = jax.process_count() + host_id = jax.process_index() + + if split == 'train': + path = base_dir + '[0-7]-00*' + elif split == 'validation': + path = base_dir + '8-00*' + else: + path = base_dir + '9-00*' + + # We shard the data between different hosts and create a Dataset that includes + # only 1/num_shards of full dataset. + filenames = tf.io.matching_files(path) + filenames_host_split = np.array_split(filenames, num_hosts)[host_id] + files = tf.data.Dataset.list_files(filenames_host_split) + + data = files.interleave( + tf.data.TFRecordDataset, + cycle_length=1 if split != 'train' else parallel_reads, + num_parallel_calls=tf.data.experimental.AUTOTUNE) + data = data.map( + _parse_example, num_parallel_calls=tf.data.experimental.AUTOTUNE) + return data + + +def build_dataset(dataset_fn, + batch_size=None, + shuffle_buffer_size=256, + seed=None, + strategy=None, + **dataset_kwargs): + """Dataset builder that takes care of strategy, batching and shuffling. + + Args: + dataset_fn: function; A function that loads the dataset. + batch_size: int; Size of the batch. + shuffle_buffer_size: int; Size of the buffer for used for shuffling. + seed: int; Random seed used for shuffling. + strategy: TF strategy that handles the distribution policy. + **dataset_kwargs: dict; Arguments passed to TFDS. + + Returns: + Dataset. + """ + + def _dataset_fn(input_context=None): + """Dataset function.""" + replica_batch_size = batch_size + if input_context: + replica_batch_size = input_context.get_per_replica_batch_size(batch_size) + ds = dataset_fn(**dataset_kwargs) + split = dataset_kwargs.get('split') + if split == 'train': + # first repeat then shuffle, then batch + ds = ds.repeat() + local_seed = seed # seed for this machine + if local_seed is not None and input_context: + local_seed += input_context.input_pipeline_id + ds = ds.shuffle(shuffle_buffer_size, seed=local_seed) + ds = ds.batch(replica_batch_size, drop_remainder=True) + else: # test and validation + # first batch then repeat + ds = ds.batch(replica_batch_size, drop_remainder=False) + ds = ds.repeat() + options = tf.data.Options() + options.experimental_optimization.parallel_batch = True + ds = ds.with_options(options) + return ds.prefetch(tf.data.experimental.AUTOTUNE) + + if strategy: + ds = strategy.experimental_distribute_datasets_from_function(_dataset_fn) + else: + ds = _dataset_fn() + + return ds + + +def preprocess(features, label_key): + """Preprocessing code specific to metaphase images.""" + if isinstance(label_key, str): + labels = features[label_key] + else: + labels = tuple(features[k] for k in label_key) + + class_names = tf.convert_to_tensor( + [b'chrm_%d' % i for i in range(1, 23)] + [b'chrm_X', b'chrm_Y']) + + # Parse the input `tf.train.Example` proto using the dictionary above. + chrm = tf.reshape( + tf.io.decode_raw(features['chrm_img'], tf.float32), + CHRM_IMAGE_SHAPE + (1,)) + meta = tf.reshape( + tf.io.decode_raw(features['meta_img'], tf.float32), + METAPHASE_IMAGE_SHAPE + (1,)) + labels = labels == class_names # Creates one-hot label. + + return { + 'inputs': ( + chrm, + meta, + ), + 'label': labels + } + + +@datasets.add_dataset('chrmID_big_metaphase_context') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the chrmID train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + prefetch_buffer_size: int; Buffer size for the prefetch. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + del dataset_configs + + def build_metaphase_dataset(split='train', shuffle=False): + """dataset_fn called by data.build_dataset(**kwargs).""" + par_reads = 4 if shuffle else 1 + + ds = load_data( + split, + parallel_reads=par_reads) + ds = ds.map(lambda x: preprocess(x, 'label')) + return ds + + # use different seed for each host + if shuffle_seed is None: + local_seed = None + else: + data_seed = 0 + local_seed = data_seed + jax.process_index() + + train_dataset = build_dataset( + dataset_fn=build_metaphase_dataset, + batch_size=batch_size, + seed=local_seed, + split='train', + strategy=None) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_dataset = dataset_utils.distribute(train_dataset, + dataset_service_address) + + eval_dataset = build_dataset( + dataset_fn=build_metaphase_dataset, + split='valid', + batch_size=eval_batch_size, + strategy=None) + + test_dataset = build_dataset( + dataset_fn=build_metaphase_dataset, + split='test', + batch_size=eval_batch_size, + strategy=None) + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, + train=True, batch_size=batch_size, inputs_key=None) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, + train=False, batch_size=eval_batch_size, inputs_key=None) + + train_iter = iter(train_dataset) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + train_iter = jax_utils.prefetch_to_device(train_iter, prefetch_buffer_size) + + valid_iter = iter(eval_dataset) + valid_iter = map(dataset_utils.tf_to_numpy, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + valid_iter = map(shard_batches, valid_iter) + valid_iter = jax_utils.prefetch_to_device(valid_iter, prefetch_buffer_size) + + test_iter = iter(test_dataset) + test_iter = map(dataset_utils.tf_to_numpy, test_iter) + test_iter = map(maybe_pad_batches_eval, test_iter) + test_iter = map(shard_batches, test_iter) + test_iter = jax_utils.prefetch_to_device(test_iter, prefetch_buffer_size) + + meta_data = { + 'num_classes': NUM_CLASSES, + 'chrm_input_shape': [-1] + list(CHRM_IMAGE_SHAPE) + [NUM_CHANNELS], + 'metaphase_input_shape': ( + [-1] + list(METAPHASE_IMAGE_SHAPE) + [NUM_CHANNELS]), + 'num_train_examples': NUM_TRAIN_EXAMPLES, + 'num_eval_examples': NUM_TEST_EXAMPLES, + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': True, + } + + return dataset_utils.Dataset(train_iter, valid_iter, test_iter, meta_data) diff --git a/scenic/projects/tasseo/datasets/chrmID_dataset.py b/scenic/projects/tasseo/datasets/chrmID_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..69286e19695a6205766ef436c88d62c29b81cbda --- /dev/null +++ b/scenic/projects/tasseo/datasets/chrmID_dataset.py @@ -0,0 +1,293 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the chromosome ID task.""" + +import functools +from typing import Optional +from absl import logging + +from flax import jax_utils +import jax +import jax.numpy as jnp +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf + +# path to data's base directory +_BASE_DIR = '' + + +def _parse_example(serialized_example): + """Parses feature dictionary from the `serialized_example` proto. + + Args: + serialized_example: The proto of the current example. + + Returns: + A parsed example as dict with several elements. + """ + feature_description = { + 'chrm_img': tf.io.FixedLenFeature([], tf.string, default_value=''), + 'meta_img': tf.io.FixedLenFeature([], tf.string, default_value=''), + 'label': tf.io.FixedLenFeature([], tf.string, default_value='') + } + + features = tf.io.parse_single_example(serialized_example, feature_description) + + return features + + +def _resize(image, image_size): + """Resizes the image. + + Args: + image: Tensor; Input image. + image_size: int; Image size. + + Returns: + Resized image. + """ + return tf.image.resize([image], [image_size, image_size], + method=tf.image.ResizeMethod.BICUBIC)[0] + + +def load_data(split, parallel_reads=4): + """Loads the metaphase dataset. + + Args: + split: str; One of 'train', 'eval' or 'test'. + parallel_reads: int; Number of parallel readers (set to 1 for determinism). + + Returns: + tf.data.Datasets for training, testing and validation. + """ + base_dir = _BASE_DIR + num_hosts = jax.process_count() + host_id = jax.process_index() + + if split == 'train': + path = base_dir + '[0-7]-00*' + elif split == 'validation': + path = base_dir + '8-00*' + else: + path = base_dir + '9-00*' + + # We shard the data between different hosts and create a Dataset that includes + # only 1/num_shards of full dataset. + filenames = tf.io.matching_files(path) + filenames_host_split = np.array_split(filenames, num_hosts)[host_id] + files = tf.data.Dataset.list_files(filenames_host_split) + + data = files.interleave( + tf.data.TFRecordDataset, + cycle_length=1 if split != 'train' else parallel_reads, + num_parallel_calls=tf.data.experimental.AUTOTUNE) + data = data.map( + _parse_example, num_parallel_calls=tf.data.experimental.AUTOTUNE) + return data + + +def build_dataset(dataset_fn, + batch_size=None, + shuffle_buffer_size=256, + seed=None, + strategy=None, + **dataset_kwargs): + """Dataset builder that takes care of strategy, batching and shuffling. + + Args: + dataset_fn: function; A function that loads the dataset. + batch_size: int; Size of the batch. + shuffle_buffer_size: int; Size of the buffer for used for shuffling. + seed: int; Random seed used for shuffling. + strategy: TF strategy that handles the distribution policy. + **dataset_kwargs: dict; Arguments passed to TFDS. + + Returns: + Dataset. + """ + + def _dataset_fn(input_context=None): + """Dataset function.""" + replica_batch_size = batch_size + if input_context: + replica_batch_size = input_context.get_per_replica_batch_size(batch_size) + ds = dataset_fn(**dataset_kwargs) + split = dataset_kwargs.get('split') + if split == 'train': + # first repeat then shuffle, then batch + ds = ds.repeat() + local_seed = seed # seed for this machine + if local_seed is not None and input_context: + local_seed += input_context.input_pipeline_id + ds = ds.shuffle(shuffle_buffer_size, seed=local_seed) + ds = ds.batch(replica_batch_size, drop_remainder=True) + else: # test and validation + # first batch then repeat + ds = ds.batch(replica_batch_size, drop_remainder=False) + ds = ds.repeat() + options = tf.data.Options() + options.experimental_optimization.parallel_batch = True + ds = ds.with_options(options) + return ds.prefetch(tf.data.experimental.AUTOTUNE) + + if strategy: + ds = strategy.experimental_distribute_datasets_from_function(_dataset_fn) + else: + ds = _dataset_fn() + + return ds + + +def preprocess(features, label_key): + """Preprocessing code specific to metaphase images.""" + if isinstance(label_key, str): + labels = features[label_key] + else: + labels = tuple(features[k] for k in label_key) + + class_names = tf.convert_to_tensor([b'chrm_%d' % i for i in range(1, 23)] + + [b'chrm_X', b'chrm_Y']) + + # Parse the input `tf.train.Example` proto using the dictionary above. + chrm = tf.reshape( + tf.io.decode_raw(features['chrm_img'], tf.float32), (299, 299, 1)) + labels = labels == class_names # Creates one-hot label. + + return { + 'inputs': chrm[ + 22:-21, 22:-21, : + ], # Clip image to 256x256 to make side length divisible by 4. + 'label': labels + } + + +@datasets.add_dataset('chrmID') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the chrmID train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + prefetch_buffer_size: int; Buffer size for the prefetch. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + del dataset_configs + + def build_metaphase_dataset(split='train', shuffle=False): + """dataset_fn called by data.build_dataset(**kwargs).""" + par_reads = 4 if shuffle else 1 + + ds = load_data( + split, + parallel_reads=par_reads) + ds = ds.map(lambda x: preprocess(x, 'label')) + return ds + + # use different seed for each host + if shuffle_seed is None: + local_seed = None + else: + data_seed = 0 + local_seed = data_seed + jax.process_index() + + train_dataset = build_dataset( + dataset_fn=build_metaphase_dataset, + batch_size=batch_size, + seed=local_seed, + split='train', + strategy=None) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_dataset = dataset_utils.distribute(train_dataset, + dataset_service_address) + + eval_dataset = build_dataset( + dataset_fn=build_metaphase_dataset, + split='valid', + batch_size=eval_batch_size, + strategy=None) + + test_dataset = build_dataset( + dataset_fn=build_metaphase_dataset, + split='test', + batch_size=eval_batch_size, + strategy=None) + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + + train_iter = iter(train_dataset) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + train_iter = jax_utils.prefetch_to_device(train_iter, prefetch_buffer_size) + + valid_iter = iter(eval_dataset) + valid_iter = map(dataset_utils.tf_to_numpy, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + valid_iter = map(shard_batches, valid_iter) + valid_iter = jax_utils.prefetch_to_device(valid_iter, prefetch_buffer_size) + + test_iter = iter(test_dataset) + test_iter = map(dataset_utils.tf_to_numpy, test_iter) + test_iter = map(maybe_pad_batches_eval, test_iter) + test_iter = map(shard_batches, test_iter) + test_iter = jax_utils.prefetch_to_device(test_iter, prefetch_buffer_size) + + num_classes = 24 + image_size = 256 + input_shape = [-1, image_size, image_size, 1] + + meta_data = { + 'num_classes': num_classes, + 'input_shape': input_shape, + 'num_train_examples': 409007, # Number of train examples across all hosts + 'num_eval_examples': 45134, # Number of test examples across all hosts + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': True, + } + + return dataset_utils.Dataset(train_iter, valid_iter, test_iter, meta_data) diff --git a/scenic/projects/tasseo/datasets/chrmID_metaphase_context_dataset.py b/scenic/projects/tasseo/datasets/chrmID_metaphase_context_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..b7798939db5f450ad770cffbc41b65d0219d09f9 --- /dev/null +++ b/scenic/projects/tasseo/datasets/chrmID_metaphase_context_dataset.py @@ -0,0 +1,300 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the chromosome ID task.""" + +import functools +from typing import Optional +from absl import logging + +from flax import jax_utils +import jax +import jax.numpy as jnp +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf + + +# path to data's base directory +_BASE_DIR = '' + + +def _parse_example(serialized_example): + """Parses feature dictionary from the `serialized_example` proto. + + Args: + serialized_example: The proto of the current example. + + Returns: + A parsed example as dict with several elements. + """ + feature_description = { + 'chrm_img': tf.io.FixedLenFeature([], tf.string, default_value=''), + 'meta_img': tf.io.FixedLenFeature([], tf.string, default_value=''), + 'label': tf.io.FixedLenFeature([], tf.string, default_value='') + } + + features = tf.io.parse_single_example(serialized_example, feature_description) + + return features + + +def _resize(image, image_size): + """Resizes the image. + + Args: + image: Tensor; Input image. + image_size: int; Image size. + + Returns: + Resized image. + """ + return tf.image.resize([image], [image_size, image_size], + method=tf.image.ResizeMethod.BICUBIC)[0] + + +def load_data(split, parallel_reads=4): + """Loads the metaphase dataset. + + Args: + split: str; One of 'train', 'eval' or 'test'. + parallel_reads: int; Number of parallel readers (set to 1 for determinism). + + Returns: + tf.data.Datasets for training, testing and validation. + """ + base_dir = _BASE_DIR + num_hosts = jax.process_count() + host_id = jax.process_index() + + if split == 'train': + path = base_dir + '[0-7]-00*' + elif split == 'validation': + path = base_dir + '8-00*' + else: + path = base_dir + '9-00*' + + # We shard the data between different hosts and create a Dataset that includes + # only 1/num_shards of full dataset. + filenames = tf.io.matching_files(path) + filenames_host_split = np.array_split(filenames, num_hosts)[host_id] + files = tf.data.Dataset.list_files(filenames_host_split) + + data = files.interleave( + tf.data.TFRecordDataset, + cycle_length=1 if split != 'train' else parallel_reads, + num_parallel_calls=tf.data.experimental.AUTOTUNE) + data = data.map( + _parse_example, num_parallel_calls=tf.data.experimental.AUTOTUNE) + return data + + +def build_dataset(dataset_fn, + batch_size=None, + shuffle_buffer_size=256, + seed=None, + strategy=None, + **dataset_kwargs): + """Dataset builder that takes care of strategy, batching and shuffling. + + Args: + dataset_fn: function; A function that loads the dataset. + batch_size: int; Size of the batch. + shuffle_buffer_size: int; Size of the buffer for used for shuffling. + seed: int; Random seed used for shuffling. + strategy: TF strategy that handles the distribution policy. + **dataset_kwargs: dict; Arguments passed to TFDS. + + Returns: + Dataset. + """ + + def _dataset_fn(input_context=None): + """Dataset function.""" + replica_batch_size = batch_size + if input_context: + replica_batch_size = input_context.get_per_replica_batch_size(batch_size) + ds = dataset_fn(**dataset_kwargs) + split = dataset_kwargs.get('split') + if split == 'train': + # first repeat then shuffle, then batch + ds = ds.repeat() + local_seed = seed # seed for this machine + if local_seed is not None and input_context: + local_seed += input_context.input_pipeline_id + ds = ds.shuffle(shuffle_buffer_size, seed=local_seed) + ds = ds.batch(replica_batch_size, drop_remainder=True) + else: # test and validation + # first batch then repeat + ds = ds.batch(replica_batch_size, drop_remainder=False) + ds = ds.repeat() + options = tf.data.Options() + options.experimental_optimization.parallel_batch = True + ds = ds.with_options(options) + return ds.prefetch(tf.data.experimental.AUTOTUNE) + + if strategy: + ds = strategy.experimental_distribute_datasets_from_function(_dataset_fn) + else: + ds = _dataset_fn() + + return ds + + +def preprocess(features, label_key): + """Preprocessing code specific to metaphase images.""" + if isinstance(label_key, str): + labels = features[label_key] + else: + labels = tuple(features[k] for k in label_key) + + class_names = tf.convert_to_tensor([b'chrm_%d' % i for i in range(1, 23)] + + [b'chrm_X', b'chrm_Y']) + + # Parse the input `tf.train.Example` proto using the dictionary above. + chrm = tf.reshape( + tf.io.decode_raw(features['chrm_img'], tf.float32), (299, 299, 1)) + meta = tf.reshape( + tf.io.decode_raw(features['meta_img'], tf.float32), (289, 289, 1)) + labels = labels == class_names # Creates one-hot label. + + return { + 'inputs': ( + chrm[22:-21, 22:-21], # Clip to 256x256 to make divisible by 4. + meta, + ), + 'label': labels + } + + +@datasets.add_dataset('chrmID_metaphase_context') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the chrmID train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + prefetch_buffer_size: int; Buffer size for the prefetch. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + del dataset_configs + + def build_metaphase_dataset(split='train', shuffle=False): + """dataset_fn called by data.build_dataset(**kwargs).""" + par_reads = 4 if shuffle else 1 + + ds = load_data( + split, + parallel_reads=par_reads) + ds = ds.map(lambda x: preprocess(x, 'label')) + return ds + + # use different seed for each host + if shuffle_seed is None: + local_seed = None + else: + data_seed = 0 + local_seed = data_seed + jax.process_index() + + train_dataset = build_dataset( + dataset_fn=build_metaphase_dataset, + batch_size=batch_size, + seed=local_seed, + split='train', + strategy=None) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_dataset = dataset_utils.distribute(train_dataset, + dataset_service_address) + + eval_dataset = build_dataset( + dataset_fn=build_metaphase_dataset, + split='valid', + batch_size=eval_batch_size, + strategy=None) + + test_dataset = build_dataset( + dataset_fn=build_metaphase_dataset, + split='test', + batch_size=eval_batch_size, + strategy=None) + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, + train=True, batch_size=batch_size, inputs_key=None) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, + train=False, batch_size=eval_batch_size, inputs_key=None) + + train_iter = iter(train_dataset) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + train_iter = jax_utils.prefetch_to_device(train_iter, prefetch_buffer_size) + + valid_iter = iter(eval_dataset) + valid_iter = map(dataset_utils.tf_to_numpy, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + valid_iter = map(shard_batches, valid_iter) + valid_iter = jax_utils.prefetch_to_device(valid_iter, prefetch_buffer_size) + + test_iter = iter(test_dataset) + test_iter = map(dataset_utils.tf_to_numpy, test_iter) + test_iter = map(maybe_pad_batches_eval, test_iter) + test_iter = map(shard_batches, test_iter) + test_iter = jax_utils.prefetch_to_device(test_iter, prefetch_buffer_size) + + num_classes = 24 + image_size = 256 + input_shape = [-1, image_size, image_size, 1] + + meta_data = { + 'num_classes': num_classes, + 'chrm_input_shape': input_shape, + 'metaphase_input_shape': [-1, 289, 289, 1], + 'num_train_examples': 409007, # Number of train examples across all hosts + 'num_eval_examples': 45134, # Number of test examples across all hosts + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': True, + } + + return dataset_utils.Dataset(train_iter, valid_iter, test_iter, meta_data) diff --git a/scenic/projects/tasseo/datasets/longtail_baseline_dataset.py b/scenic/projects/tasseo/datasets/longtail_baseline_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..33fbb2c9590eec5ec28b2e74e6cea72955ee0f88 --- /dev/null +++ b/scenic/projects/tasseo/datasets/longtail_baseline_dataset.py @@ -0,0 +1,263 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset for long tail aberrations with baseline-formatted examples.""" + +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.projects.tasseo import dataset_utils as ts_dataset_utils +import tensorflow as tf + + +NUM_CLASSES = 2 +CLASS_NAMES = ('normal', 'abnormal') +NUM_CHANNELS = 1 +NUM_FOLDS = 10 + +DATASET_KFOLD_PATTERN = ( + '/long_tail_datasets_plus_all_healthy/%(pattern_pathname)s' + '/%(pattern_pathname)s_kfold-%(fold_num)02d-of-%(num_folds)02d') + + +FOLD_METADATA = { + 'inv_16': { + 0: {'num_test': 363, 'num_train': 3105}, + 1: {'num_test': 361, 'num_train': 3107}, + 2: {'num_test': 336, 'num_train': 3132}, + 3: {'num_test': 328, 'num_train': 3140}, + 4: {'num_test': 343, 'num_train': 3125}, + 5: {'num_test': 330, 'num_train': 3138}, + 6: {'num_test': 341, 'num_train': 3127}, + 7: {'num_test': 369, 'num_train': 3099}, + 8: {'num_test': 370, 'num_train': 3098}, + 9: {'num_test': 327, 'num_train': 3141}, + }, + 'inv_3_q21q2': { + 0: {'num_test': 364, 'num_train': 3128}, + 1: {'num_test': 346, 'num_train': 3146}, + 2: {'num_test': 322, 'num_train': 3170}, + 3: {'num_test': 334, 'num_train': 3158}, + 4: {'num_test': 349, 'num_train': 3143}, + 5: {'num_test': 320, 'num_train': 3172}, + 6: {'num_test': 329, 'num_train': 3163}, + 7: {'num_test': 389, 'num_train': 3103}, + 8: {'num_test': 354, 'num_train': 3138}, + 9: {'num_test': 385, 'num_train': 3107}, + }, + 't_11_19': { + 0: {'num_test': 352, 'num_train': 3192}, + 1: {'num_test': 375, 'num_train': 3169}, + 2: {'num_test': 323, 'num_train': 3221}, + 3: {'num_test': 380, 'num_train': 3164}, + 4: {'num_test': 330, 'num_train': 3214}, + 5: {'num_test': 328, 'num_train': 3216}, + 6: {'num_test': 393, 'num_train': 3151}, + 7: {'num_test': 324, 'num_train': 3220}, + 8: {'num_test': 346, 'num_train': 3198}, + 9: {'num_test': 393, 'num_train': 3151}, + }, + 't_9_11': { + 0: {'num_test': 349, 'num_train': 3203}, + 1: {'num_test': 344, 'num_train': 3208}, + 2: {'num_test': 324, 'num_train': 3228}, + 3: {'num_test': 356, 'num_train': 3196}, + 4: {'num_test': 392, 'num_train': 3160}, + 5: {'num_test': 353, 'num_train': 3199}, + 6: {'num_test': 360, 'num_train': 3192}, + 7: {'num_test': 361, 'num_train': 3191}, + 8: {'num_test': 362, 'num_train': 3190}, + 9: {'num_test': 351, 'num_train': 3201}, + }, +} + + +@datasets.add_dataset('longtail_baseline') +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the chrmID train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + prefetch_buffer_size: int; Buffer size for the prefetch. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + + del rng + pattern_pathname = dataset_configs.pattern_pathname + def get_fold_filepath_pattern(fold_num): + return DATASET_KFOLD_PATTERN % { + 'pattern_pathname': pattern_pathname, + 'fold_num': fold_num, + 'num_folds': NUM_FOLDS, + } + + fold_filepath_patterns = [ + get_fold_filepath_pattern(i) for i in range(NUM_FOLDS) + ] + eval_fold_nums = [dataset_configs.test_fold_num] + train_fold_nums = [i for i in range(NUM_FOLDS) if i not in eval_fold_nums] + kfold_dataset_prefixes = { + 'train': [fold_filepath_patterns[i] for i in train_fold_nums], + 'eval': [fold_filepath_patterns[i] for i in eval_fold_nums], + } + + # For debugging and validation. + for fold_num, filepath_prefix in enumerate(fold_filepath_patterns): + fold_filepaths = tf.io.matching_files(filepath_prefix + '*') + logging.info('Found %d files matching "%s" for fold %d', + len(fold_filepaths), filepath_prefix, fold_num) + logging.info('train folds: %r', train_fold_nums) + logging.info('eval folds: %r', eval_fold_nums) + + def build_baseline_dataset_kfold(split='train', shuffle=True): + """dataset_fn called by data.build_dataset(**kwargs).""" + parallel_reads = 4 if shuffle else 1 + + dataset_prefixes = None + if split == 'train': + dataset_prefixes = kfold_dataset_prefixes['train'] + else: + dataset_prefixes = kfold_dataset_prefixes['eval'] + + ds = None + for dataset_prefix in dataset_prefixes: + fold_ds = ts_dataset_utils.load_data( + dataset_prefix, + is_train=(split == 'train'), + parallel_reads=parallel_reads) + if ds is None: + ds = fold_ds + else: + ds = ds.concatenate(fold_ds) + if ds is None: # Avoids type exception due too possible None.map. + raise ValueError('No folds found for %s dataset matching prefixes: %r' + % (split, dataset_prefixes)) + # pylint: disable=g-long-lambda + ds = ds.map( + lambda x: ts_dataset_utils.preprocess( + x, 'label', dataset_configs.chrm_image_shape, + class_names=CLASS_NAMES)) + # pylint: enable=g-long-lambda + return ds + + # use different seed for each host + if shuffle_seed is None: + local_seed = None + else: + data_seed = 0 + local_seed = data_seed + jax.process_index() + + train_dataset = ts_dataset_utils.build_dataset( + dataset_fn=build_baseline_dataset_kfold, + batch_size=batch_size, + seed=local_seed, + split='train', + strategy=None) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_dataset = dataset_utils.distribute(train_dataset, + dataset_service_address) + + eval_dataset = ts_dataset_utils.build_dataset( + dataset_fn=build_baseline_dataset_kfold, + split='valid', + batch_size=eval_batch_size, + strategy=None) + + test_dataset = ts_dataset_utils.build_dataset( + dataset_fn=build_baseline_dataset_kfold, + split='test', + batch_size=eval_batch_size, + strategy=None) + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + + train_iter = iter(train_dataset) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + train_iter = jax_utils.prefetch_to_device(train_iter, prefetch_buffer_size) + + valid_iter = iter(eval_dataset) + valid_iter = map(dataset_utils.tf_to_numpy, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + valid_iter = map(shard_batches, valid_iter) + valid_iter = jax_utils.prefetch_to_device(valid_iter, prefetch_buffer_size) + + test_iter = iter(test_dataset) + test_iter = map(dataset_utils.tf_to_numpy, test_iter) + test_iter = map(maybe_pad_batches_eval, test_iter) + test_iter = map(shard_batches, test_iter) + test_iter = jax_utils.prefetch_to_device(test_iter, prefetch_buffer_size) + + input_shape = [-1] + list(dataset_configs.chrm_image_shape) + [NUM_CHANNELS] + fold_metadata = ( + FOLD_METADATA[dataset_configs.pattern_pathname][ + dataset_configs.test_fold_num]) + num_train_examples = fold_metadata['num_train'] + num_test_examples = fold_metadata['num_test'] + meta_data = { + 'num_classes': + NUM_CLASSES, + 'input_shape': + input_shape, + 'num_train_examples': + num_train_examples, + 'num_eval_examples': + num_test_examples, + 'input_dtype': + getattr(jnp, dtype_str), + 'target_is_onehot': + True, + } + + return dataset_utils.Dataset(train_iter, valid_iter, test_iter, meta_data) + diff --git a/scenic/projects/tasseo/datasets/longtail_rhs_baseline_dataset.py b/scenic/projects/tasseo/datasets/longtail_rhs_baseline_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..4d93c52d2fad9c2a31b6348edba1d12a9476c695 --- /dev/null +++ b/scenic/projects/tasseo/datasets/longtail_rhs_baseline_dataset.py @@ -0,0 +1,236 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dataset for long tail rhs aberrations with baseline-formatted examples.""" + +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax +import jax.numpy as jnp +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.projects.tasseo import dataset_utils as ts_dataset_utils +import tensorflow as tf + +NUM_CLASSES = 2 +CLASS_NAMES = ('normal', 'abnormal') +NUM_CHANNELS = 1 +NUM_FOLDS = 10 + +DATASET_KFOLD_PATTERN = ( + '/long_tail_datasets_plus_all_healthy/%(pattern_pathname)s' + '/%(pattern_pathname)s_kfold-%(fold_num)02d-of-%(num_folds)02d') + +FOLD_METADATA = { + 't_11_19': { + 0: {'num_test': 335, 'num_train': 3216}, + 1: {'num_test': 347, 'num_train': 3204}, + 2: {'num_test': 363, 'num_train': 3188}, + 3: {'num_test': 331, 'num_train': 3220}, + 4: {'num_test': 361, 'num_train': 3190}, + 5: {'num_test': 390, 'num_train': 3161}, + 6: {'num_test': 338, 'num_train': 3213}, + 7: {'num_test': 345, 'num_train': 3206}, + 8: {'num_test': 368, 'num_train': 3183}, + 9: {'num_test': 373, 'num_train': 3178}}, + 't_9_11': { + 0: {'num_test': 344, 'num_train': 3283}, + 1: {'num_test': 356, 'num_train': 3271}, + 2: {'num_test': 323, 'num_train': 3304}, + 3: {'num_test': 388, 'num_train': 3239}, + 4: {'num_test': 350, 'num_train': 3277}, + 5: {'num_test': 345, 'num_train': 3282}, + 6: {'num_test': 421, 'num_train': 3206}, + 7: {'num_test': 331, 'num_train': 3296}, + 8: {'num_test': 388, 'num_train': 3239}, + 9: {'num_test': 381, 'num_train': 3246} + } +} + + +@datasets.add_dataset('longtail_rhs_baseline') +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the chrmID train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + prefetch_buffer_size: int; Buffer size for the prefetch. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + + del rng + pattern_pathname = dataset_configs.pattern_pathname + def get_fold_filepath_pattern(fold_num): + return DATASET_KFOLD_PATTERN % { + 'pattern_pathname': pattern_pathname, + 'fold_num': fold_num, + 'num_folds': NUM_FOLDS, + } + + fold_filepath_patterns = [ + get_fold_filepath_pattern(i) for i in range(NUM_FOLDS) + ] + eval_fold_nums = [dataset_configs.test_fold_num] + train_fold_nums = [i for i in range(NUM_FOLDS) if i not in eval_fold_nums] + kfold_dataset_prefixes = { + 'train': [fold_filepath_patterns[i] for i in train_fold_nums], + 'eval': [fold_filepath_patterns[i] for i in eval_fold_nums], + } + + # For debugging and validation. + for fold_num, filepath_prefix in enumerate(fold_filepath_patterns): + fold_filepaths = tf.io.matching_files(filepath_prefix + '*') + logging.info('Found %d files matching "%s" for fold %d', + len(fold_filepaths), filepath_prefix, fold_num) + logging.info('train folds: %r', train_fold_nums) + logging.info('eval folds: %r', eval_fold_nums) + + def build_baseline_dataset_kfold(split='train', shuffle=True): + """dataset_fn called by data.build_dataset(**kwargs).""" + parallel_reads = 4 if shuffle else 1 + + dataset_prefixes = None + if split == 'train': + dataset_prefixes = kfold_dataset_prefixes['train'] + else: + dataset_prefixes = kfold_dataset_prefixes['eval'] + + ds = None + for dataset_prefix in dataset_prefixes: + fold_ds = ts_dataset_utils.load_data( + dataset_prefix, + is_train=(split == 'train'), + parallel_reads=parallel_reads) + if ds is None: + ds = fold_ds + else: + ds = ds.concatenate(fold_ds) + if ds is None: # Avoids type exception due too possible None.map. + raise ValueError('No folds found for %s dataset matching prefixes: %r' + % (split, dataset_prefixes)) + # pylint: disable=g-long-lambda + ds = ds.map( + lambda x: ts_dataset_utils.preprocess( + x, 'label', dataset_configs.chrm_image_shape, + class_names=CLASS_NAMES)) + # pylint: enable=g-long-lambda + return ds + + # use different seed for each host + if shuffle_seed is None: + local_seed = None + else: + data_seed = 0 + local_seed = data_seed + jax.process_index() + + train_dataset = ts_dataset_utils.build_dataset( + dataset_fn=build_baseline_dataset_kfold, + batch_size=batch_size, + seed=local_seed, + split='train', + strategy=None) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_dataset = dataset_utils.distribute(train_dataset, + dataset_service_address) + + eval_dataset = ts_dataset_utils.build_dataset( + dataset_fn=build_baseline_dataset_kfold, + split='valid', + batch_size=eval_batch_size, + strategy=None) + + test_dataset = ts_dataset_utils.build_dataset( + dataset_fn=build_baseline_dataset_kfold, + split='test', + batch_size=eval_batch_size, + strategy=None) + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + + train_iter = iter(train_dataset) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + train_iter = jax_utils.prefetch_to_device(train_iter, prefetch_buffer_size) + + valid_iter = iter(eval_dataset) + valid_iter = map(dataset_utils.tf_to_numpy, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + valid_iter = map(shard_batches, valid_iter) + valid_iter = jax_utils.prefetch_to_device(valid_iter, prefetch_buffer_size) + + test_iter = iter(test_dataset) + test_iter = map(dataset_utils.tf_to_numpy, test_iter) + test_iter = map(maybe_pad_batches_eval, test_iter) + test_iter = map(shard_batches, test_iter) + test_iter = jax_utils.prefetch_to_device(test_iter, prefetch_buffer_size) + + input_shape = [-1] + list(dataset_configs.chrm_image_shape) + [NUM_CHANNELS] + fold_metadata = ( + FOLD_METADATA[dataset_configs.pattern_pathname][ + dataset_configs.test_fold_num]) + num_train_examples = fold_metadata['num_train'] + num_test_examples = fold_metadata['num_test'] + meta_data = { + 'num_classes': + NUM_CLASSES, + 'input_shape': + input_shape, + 'num_train_examples': + num_train_examples, + 'num_eval_examples': + num_test_examples, + 'input_dtype': + getattr(jnp, dtype_str), + 'target_is_onehot': + True, + } + + return dataset_utils.Dataset(train_iter, valid_iter, test_iter, meta_data) + diff --git a/scenic/projects/tasseo/datasets/metaphase_sexid_dataset.py b/scenic/projects/tasseo/datasets/metaphase_sexid_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..bd61265c1193a6ec7266133dd3d99addfa4e6ead --- /dev/null +++ b/scenic/projects/tasseo/datasets/metaphase_sexid_dataset.py @@ -0,0 +1,304 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data generators for the metaphase sex ID task.""" + +import functools +from typing import Optional + +from absl import logging +from flax import jax_utils +import jax +import jax.numpy as jnp +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +import tensorflow as tf + + +# path to data's base directory +_BASE_DIR = '' + + +def _parse_example(serialized_example): + """Parses feature dictionary from the `serialized_example` proto. + + Args: + serialized_example: The proto of the current example. + + Returns: + A parsed example as dict with several elements. + """ + feature_description = { + 'meta_img': tf.io.FixedLenFeature([], tf.string, default_value=''), + 'label': tf.io.FixedLenFeature([], tf.string, default_value='') + } + + features = tf.io.parse_single_example(serialized_example, feature_description) + + return features + + +def _resize(image, image_size): + """Resizes the image. + + Args: + image: Tensor; Input image. + image_size: int; Image size. + + Returns: + Resized image. + """ + return tf.image.resize([image], [image_size, image_size], + method=tf.image.ResizeMethod.BICUBIC)[0] + + +def load_data(split, parallel_reads=4): + """Loads a split of metaphase dataset to be processed on a given host. + + Each host runs this function in parallel and loads a sub-split of the data + based on its host_id. + + Args: + split: str; One of 'train', 'eval' or 'test'. + parallel_reads: int; Number of parallel readers (set to 1 for determinism). + + Returns: + tf.data.Datasets for training, testing and validation. if + n_validation_shards is 0, the validation dataset will be None. + """ + base_dir = _BASE_DIR + + if split == 'test': + path = base_dir + '/10262021_metaphase_sex_id_fold-0014*' + else: + path = base_dir + '/10262021_metaphase_sex_id_fold-00*' + + # Each host is responsible for a fixed subset of data. Here we create a + # Dataset that includes only 1/num_shards of data so the data is + # splitted between different hosts. + + num_hosts, host_id = jax.process_count(), jax.process_index() + filenames = tf.io.matching_files(path) + + if len(filenames) >= num_hosts: + # Sharding on data sources (e.g. filenames). Each hosts reads a different + # sub-split of the data based its host_id. + filenames = np.array_split(filenames, num_hosts)[host_id] + + files = tf.data.Dataset.list_files(filenames) + + # cycle_length is the cycle length of interleaving files, if it's None, it's + # up to tf.data to decide how much parallelism of files reading. If it's 1, + # will start reading new file only after the first read finishes. + data = files.interleave( + tf.data.TFRecordDataset, + cycle_length=1 if split != 'train' else parallel_reads, + num_parallel_calls=tf.data.experimental.AUTOTUNE) + + if len(filenames) < num_hosts: + # Sharding using tf.shard. + data = data.shard(num_shards=num_hosts, index=host_id) + + data = data.map( + _parse_example, num_parallel_calls=tf.data.experimental.AUTOTUNE) + return data + + +def build_dataset(dataset_fn, + batch_size=None, + shuffle_buffer_size=256, + seed=None, + strategy=None, + **dataset_kwargs): + """Dataset builder that takes care of strategy, batching and shuffling. + + Args: + dataset_fn: function; A function that loads the dataset. + batch_size: int; Size of the batch. + shuffle_buffer_size: int; Size of the buffer for used for shuffling. + seed: int; Random seed used for shuffling. + strategy: TF strategy that handles the distribution policy. + **dataset_kwargs: dict; Arguments passed to TFDS. + + Returns: + Dataset. + """ + + def _dataset_fn(input_context=None): + """Dataset function.""" + replica_batch_size = batch_size + if input_context: + replica_batch_size = input_context.get_per_replica_batch_size(batch_size) + ds = dataset_fn(**dataset_kwargs) + split = dataset_kwargs.get('split') + print('Getting data split: %s' % split) + if split == 'train': + # first repeat then shuffle, then batch + ds = ds.repeat() + local_seed = seed # seed for this machine + if local_seed is not None and input_context: + local_seed += input_context.input_pipeline_id + ds = ds.shuffle(shuffle_buffer_size, seed=local_seed) + ds = ds.batch(replica_batch_size, drop_remainder=True) + print('Dropped remainder: %s' % split) + else: # test and validation + # first batch then repeat + ds = ds.batch(replica_batch_size, drop_remainder=False) + ds = ds.repeat() + options = tf.data.Options() + options.experimental_optimization.parallel_batch = True + ds = ds.with_options(options) + return ds.prefetch(tf.data.experimental.AUTOTUNE) + + if strategy: + ds = strategy.experimental_distribute_datasets_from_function(_dataset_fn) + else: + ds = _dataset_fn() + + return ds + + +def preprocess(features, label_key): + """Preprocessing code specific to metaphase images.""" + if isinstance(label_key, str): + labels = features[label_key] + else: + labels = tuple(features[k] for k in label_key) + + image = tf.reshape( + tf.io.decode_raw(features['meta_img'], tf.float32), (512, 512, 3)) + image = _resize(image, 224) # resizing for resnet + + labels = 0 if labels == b'male' else 1 + + return { + 'inputs': image, + 'label': labels, + } + + +@datasets.add_dataset('metaphase_sexid') +def get_dataset(*, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, + rng=None, + prefetch_buffer_size=2, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns generators for the metaphase sexid train, validation, and test set. + + Args: + batch_size: int; Determines the train batch size. + eval_batch_size: int; Determines the evaluation batch size. + num_shards: int; Number of shards --> batch shape: [num_shards, bs, ...]. + dtype_str: Data type of the image (e.g. 'float32'). + shuffle_seed: int; Seed for shuffling the training data. + rng: JAX rng key, which can be used for augmentation, shuffling, etc. + prefetch_buffer_size: int; Buffer size for the prefetch. + dataset_configs: dict; Dataset specific configurations. + dataset_service_address: If set, will distribute the training dataset using + the given tf.data service at the given address. + + Returns: + A dataset_utils.Dataset() which includes a train_iter, a valid_iter, + a test_iter, and a dict of meta_data. + """ + del rng + del dataset_configs + + def build_metaphase_dataset(split='train', shuffle=False): + """dataset_fn called by data.build_dataset(**kwargs).""" + par_reads = 4 if shuffle else 1 + ds = load_data(split, parallel_reads=par_reads) + ds = ds.map(lambda x: preprocess(x, 'label')) + return ds + + # use different seed for each host + if shuffle_seed is None: + local_seed = None + else: + data_seed = 0 + local_seed = data_seed + jax.process_index() + + train_dataset = build_dataset( + dataset_fn=build_metaphase_dataset, + batch_size=batch_size, + seed=local_seed, + split='train', + strategy=None) + + if dataset_service_address: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + train_dataset = dataset_utils.distribute(train_dataset, + dataset_service_address) + + eval_dataset = build_dataset( + dataset_fn=build_metaphase_dataset, + split='valid', + batch_size=eval_batch_size, + strategy=None) + + test_dataset = build_dataset( + dataset_fn=build_metaphase_dataset, + split='test', + batch_size=eval_batch_size, + strategy=None) + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + maybe_pad_batches_train = functools.partial( + dataset_utils.maybe_pad_batch, train=True, batch_size=batch_size) + maybe_pad_batches_eval = functools.partial( + dataset_utils.maybe_pad_batch, train=False, batch_size=eval_batch_size) + + train_iter = iter(train_dataset) + train_iter = map(dataset_utils.tf_to_numpy, train_iter) + train_iter = map(maybe_pad_batches_train, train_iter) + train_iter = map(shard_batches, train_iter) + train_iter = jax_utils.prefetch_to_device(train_iter, prefetch_buffer_size) + + valid_iter = iter(eval_dataset) + valid_iter = map(dataset_utils.tf_to_numpy, valid_iter) + valid_iter = map(maybe_pad_batches_eval, valid_iter) + valid_iter = map(shard_batches, valid_iter) + valid_iter = jax_utils.prefetch_to_device(valid_iter, prefetch_buffer_size) + + test_iter = iter(test_dataset) + test_iter = map(dataset_utils.tf_to_numpy, test_iter) + test_iter = map(maybe_pad_batches_eval, test_iter) + test_iter = map(shard_batches, test_iter) + test_iter = jax_utils.prefetch_to_device(test_iter, prefetch_buffer_size) + + num_classes = 2 + image_size = 224 + input_shape = [-1, image_size, image_size, 3] + + meta_data = { + 'num_classes': num_classes, + 'input_shape': input_shape, + 'num_train_examples': 80000, + 'num_eval_examples': 10000, + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': False, + } + + return dataset_utils.Dataset(train_iter, valid_iter, test_iter, meta_data) diff --git a/scenic/projects/tasseo/duplex_vit.py b/scenic/projects/tasseo/duplex_vit.py new file mode 100644 index 0000000000000000000000000000000000000000..edd7811ed8287535f886e43b956d447c4a890507 --- /dev/null +++ b/scenic/projects/tasseo/duplex_vit.py @@ -0,0 +1,217 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Duplex-input Vision Transformer.""" + +from typing import Any + +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models.classification_model import ClassificationModel +from scenic.model_lib.layers import nn_layers +from scenic.projects.baselines import vit + + +class Encoder(nn.Module): + """Transformer Encoder. + + **This is same as vit.Encoder(), but without adding positional embedding.** + + Attributes: + num_layers: Number of layers. + mlp_dim: Dimension of the mlp on top of attention block. + inputs_positions: Input subsequence positions for packed examples. + dropout_rate: Dropout rate. + stochastic_depth: probability of dropping a layer linearly grows from 0 to + the provided value. Our implementation of stochastic depth follows timm + library, which does per-example layer dropping and uses independent + dropping patterns for each skip-connection. + dtype: Dtype of activations. + """ + num_layers: int + mlp_dim: int + num_heads: int + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool = False): + """Applies Transformer model on the inputs.""" + assert x.ndim == 3 # Shape is `[batch, len, emb]`. + dtype = jax.dtypes.canonicalize_dtype(self.dtype) + + # Input Encoder. + for lyr in range(self.num_layers): + x = vit.Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=(lyr / max(self.num_layers - 1, 1)) * + self.stochastic_depth, + name=f'encoderblock_{lyr}', + dtype=dtype)( + x, deterministic=not train) + encoded = nn.LayerNorm(name='encoder_norm')(x) + return encoded + + +class DuplexViT(nn.Module): + """Duplex input Vision Transformer model. + + Attributes: + num_classes: Number of output classes. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + encoder: Configuration of the encoders used in the model. + dropout_rate: Dropout rate. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + dtype: JAX data type for activations. + """ + + num_classes: int + patches: ml_collections.ConfigDict + hidden_size: int + encoder: ml_collections.ConfigDict + dropout_rate: float = 0.0 + classifier: str = 'gap' + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, context_x: jnp.ndarray, + *, train: bool, debug: bool = False): + + # Extracting patches and then embedding is in fact a single convolution. + fh, fw = self.patches.input_size + x = nn.Conv( + self.hidden_size, (fh, fw), + strides=(fh, fw), + padding='VALID', + name='embedding')( + x) + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + + # Repeat the extraction of patches for the context image. + context_fh, context_fw = self.patches.context_size + context_x = nn.Conv( + self.hidden_size, (context_fh, context_fw), + strides=(context_fh, context_fw), + padding='VALID', + name='context_embedding')( + context_x) + context_n, context_h, context_w, context_c = context_x.shape + context_x = jnp.reshape(context_x, + [context_n, context_h * context_w, context_c]) + + # If we want to add a class token, add it to only input (not context). + if self.classifier == 'token': + cls = self.param('cls', nn.initializers.zeros, (1, 1, c), x.dtype) + cls = jnp.tile(cls, [n, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + + # Add potitional embedding for both input and context + x = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), name='posembed_input')( + x) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + context_x = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), + name='posembed_context')( + context_x) + context_x = nn.Dropout(rate=self.dropout_rate)( + context_x, deterministic=not train) + + # Optional encoding for input. + if self.encoder.get('input'): + x = Encoder( + mlp_dim=self.encoder.input.mlp_dim, + num_layers=self.encoder.input.num_layers, + num_heads=self.encoder.input.num_heads, + dropout_rate=self.encoder.input.dropout_rate, + attention_dropout_rate=self.encoder.input.attention_dropout_rate, + stochastic_depth=self.encoder.input.stochastic_depth, + dtype=self.dtype, + name='Input_Transformer')( + x, train=train) + + # Optional encoding for context. + if self.encoder.get('context'): + context_x = Encoder( + mlp_dim=self.encoder.context.mlp_dim, + num_layers=self.encoder.context.num_layers, + num_heads=self.encoder.context.num_heads, + dropout_rate=self.encoder.context.dropout_rate, + attention_dropout_rate=self.encoder.context.attention_dropout_rate, + stochastic_depth=self.encoder.context.stochastic_depth, + dtype=self.dtype, + name='Context_Transformer')( + context_x, train=train) + + # Concat input and context for optionally extra processing on both. + x = jnp.concatenate([x, context_x], axis=1) + + # Optional encoding for input+context. + if self.encoder.get('fused'): + x = Encoder( + mlp_dim=self.encoder.fused.mlp_dim, + num_layers=self.encoder.fused.num_layers, + num_heads=self.encoder.fused.num_heads, + dropout_rate=self.encoder.fused.dropout_rate, + attention_dropout_rate=self.encoder.fused.attention_dropout_rate, + stochastic_depth=self.encoder.fused.stochastic_depth, + dtype=self.dtype, + name='Transformer')( + x, train=train) + + if self.classifier in ('token', '0'): + if (self.encoder.get('fused') is None) and (self.encoder.get('context') + is not None): + raise ValueError('You are encoding the context but' + 'not using it since the CLS token come from the input' + 'encoder. Either use gap/gmp/gsp or add a few layers' + 'of fused encoder.') + x = x[:, 0] + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=1) + + x = nn_layers.IdentityLayer(name='pre_logits')(x) + x = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x) + return x + + +class DuplexViTClassificationModel(ClassificationModel): + """Duplex (chromosome + metaphase) ViT model for classification task.""" + + def build_flax_model(self): + return DuplexViT( + num_classes=self.dataset_meta_data['num_classes'], + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + encoder=self.config.model.encoder, + dropout_rate=self.config.model.get('dropout_rate', 0.0), + classifier=self.config.model.classifier, + dtype='float32', + ) diff --git a/scenic/projects/tasseo/duplex_vit_classification_trainer.py b/scenic/projects/tasseo/duplex_vit_classification_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..6ee0c76e67e5ee145abceed9475bd35bd3399f87 --- /dev/null +++ b/scenic/projects/tasseo/duplex_vit_classification_trainer.py @@ -0,0 +1,453 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script.""" + +import functools +from typing import Any, Callable, Dict, Tuple, Optional, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.tasseo import train_utils as tasseo_train_utils +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils + + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] +LrFn = Callable[[jnp.ndarray], jnp.ndarray] + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + lr_fn: LrFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, + Any]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, params, and optimizer. The buffer of this argument can + be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + lr_fn: The learning rate fn used for the logging the learning rate. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training and computed metrics and some training logs. + """ + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + rng=mixup_rng) + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + logits, new_model_state = flax_model.apply( + variables, + *batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params']) + return loss, (new_model_state, logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (train_cost, (new_model_state, + logits)), grad = compute_gradient_fn(train_state.params) + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm') is not None: + grad = clip_grads(grad, config.max_grad_norm) + + updates, new_opt_state = train_state.tx.update(grad, train_state.opt_state, + train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)])) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + # TODO(dehghani): Can we get this from the optimizer instead? + training_logs['learning_rate'] = lr_fn(train_state.global_step) + + metrics = metrics_fn(logits, batch) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + + return new_train_state, metrics, training_logs + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + all_gather: bool = False, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], Optional[jnp.ndarray], + Optional[jnp.ndarray]]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + all_gather: If True, the function gather batch and output of model in from + all hosts, using `jax.lax.all_gather` and return it, e.g., for computing + global metrics on CPU. + debug: Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and optionally output, and batch after all_gather. + """ + variables = {'params': train_state.params, **train_state.model_state} + logits = flax_model.apply( + variables, *batch['inputs'], train=False, mutable=False, debug=debug) + metrics = metrics_fn(logits, batch) + if all_gather: + targets = {'label': batch['label'], 'batch_mask': batch['batch_mask']} + logits = jax.lax.all_gather(logits, 'batch') + targets = jax.lax.all_gather(targets, 'batch') + return metrics, logits, targets + else: + return metrics, None, None + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_state that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params=params) + # We jit this, such that the arrays that are created on the same device as the + # input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + rng, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + # Replicate the optimizer, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + lr_fn=lr_fn, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + all_gather=config.get('global_metrics', False), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + # If `global_metrics` are set in the config and we are the lead host + compute_global_metrics = False + if config.get('global_metrics', False) and lead_host: + compute_global_metrics = True + if compute_global_metrics: + global_metrics_evaluator = tasseo_train_utils.TasseoGlobalEvaluator( + config.global_metrics) + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + extra_training_logs.append(t_logs) + for h in hooks: + h(step) + # Below are once-in-a-while ops -> pause. + ###################### LOG TRAIN SUMMARY ######################## + if ((step % log_summary_steps == 1) or (step == total_steps) or + (lead_host and chrono.warmup)): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + # train_metrics is list of a dictionaries of metrics, where the shape of + # the metrics[key] is [n_local_devices]. However, because metric functions + # have a psum, we have already summed across the whole sharded batch, and + # what's returned is n_local_devices copies of the same summed metric. + # So we do unreplicate and fetch them to host using `unreplicate_and_get`. + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_training_logs), + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + eval_metrics = [] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + for _ in range(steps_per_eval): + eval_batch = next(dataset.valid_iter) + e_metrics, e_output, e_batch = eval_step_pmapped( + train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + if compute_global_metrics: + # Unreplicate outputs of eval_step_pmapped that are coming from + # `lax.all_gather`, fetch to the host and add to the Evaluator: + e_batch_mask = train_utils.unreplicate_and_get( + e_batch['batch_mask']).astype(bool) + global_metrics_evaluator.add_batch_of_examples( + target=train_utils.unreplicate_and_get( + e_batch['label'])[e_batch_mask], + output=train_utils.unreplicate_and_get(e_output)[e_batch_mask]) + del e_batch, e_output, e_batch_mask + eval_global_metrics_summary = None + if compute_global_metrics: + eval_global_metrics_summary = ( + global_metrics_evaluator.compute_metrics(clear_annotations=True)) + eval_summary = train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + extra_eval_summary=eval_global_metrics_summary, + writer=writer) + writer.flush() + del eval_metrics, eval_global_metrics_summary + ##################### CHECKPOINTING ################### + if ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + train_utils.save_checkpoint(workdir, unrep_train_state) + del unrep_train_state + chrono.resume() # Un-pause now. + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/tasseo/inference.py b/scenic/projects/tasseo/inference.py new file mode 100644 index 0000000000000000000000000000000000000000..88aeae1c68cd67ed4c4dd64a561e8f6aedf74f8a --- /dev/null +++ b/scenic/projects/tasseo/inference.py @@ -0,0 +1,313 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tasseo Inference Script.""" + +import datetime +import functools +import os +import pickle +from typing import Any, Callable, Optional, Type + +from absl import logging +from clu import metric_writers +from flax import jax_utils +import flax.linen as nn +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.common_lib import debug_utils +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.tasseo import classification_trainer as trainer +from scenic.projects.tasseo import train_utils as tasseo_train_utils +from scenic.train_lib import optimizers +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils +import tensorflow as tf + + +# Aliases for custom types: +Batch = dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, dict[str, jnp.ndarray]], + dict[str, tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] + + +def restore_train_state( + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model: Any, + dataset: dataset_utils.Dataset, +): + """Initializes the model state.""" + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, _, _) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + # Create optimizer. + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, 0, params=params) + # We jit this, such that the arrays that are created on the same device as the + # input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + rng, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={}) + init_checkpoint_path = config.init_from.get('checkpoint_path') + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + current_step = restored_train_state.global_step + logging.info( + 'Parameter summary after initialising from restored train state ' + 'at step %d:', current_step) + debug_utils.log_param_shapes(restored_train_state.params) + return restored_train_state, current_step + + +def inference_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + debug: Optional[bool] = False +): + """Runs a single step of training.""" + variables = {'params': train_state.params, **train_state.model_state} + capture_intermediates = lambda mdl, _: mdl.name == 'pre_logits' + logits, intermediate = flax_model.apply( + variables, + batch['inputs'], + train=False, + mutable=False, + debug=debug, + capture_intermediates=capture_intermediates, + ) + return nn.softmax( + logits, + axis=-1), intermediate['intermediates']['pre_logits']['__call__'][0] + + +def compute_similarity_scores(train_state: train_utils.TrainState, + iterator, + eval_step_fn, + eval_steps, + workdir, + lead_host,): + """Computes similarity scores and dump them directly instead of metrics.""" + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + all_logits, all_keys, all_labels, all_batch_masks, all_intermediate = [], [], [], [], [] + # Do this to ensure we definitely cover the full test set + eval_steps_multiplier = int(np.ceil(1.3 * eval_steps)) + logging.info('Number of eval steps is %s', eval_steps_multiplier) + for step in range(eval_steps_multiplier): + with jax.profiler.StepTraceAnnotation('eval', step_num=step): + eval_batch = next(iterator) + assert 'key' in eval_batch, 'Keys must be added to batch' + keys = eval_batch['key'] + labels = eval_batch['label'] + batch_masks = eval_batch['batch_mask'] + del eval_batch['key'] + del eval_batch['label'] + + logits, intermediate = eval_step_fn(train_state, eval_batch) + gathered_logits, gathered_keys, gathered_labels, gathered_batch_masks, gathered_intermediate = all_gather_and_unreplicate( + (logits, keys, labels, batch_masks, intermediate)) + all_logits.append(np.concatenate(gathered_logits, axis=0)) + all_intermediate.append(np.concatenate(gathered_intermediate, axis=0)) + all_labels.append(np.concatenate(gathered_labels, axis=0)) + all_keys.append( + tf.strings.unicode_encode( + np.concatenate(gathered_keys, axis=0), 'UTF-8')) + all_batch_masks.append(np.concatenate(gathered_batch_masks, axis=0)) + + logging.info('all_scores.shape: %s', str(len(all_keys))) + + timestamp = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S') + fname_logits = os.path.join(workdir, f'logits_offline_eval_{timestamp}') + fname_intermediate = os.path.join(workdir, + f'intermediate_offline_eval_{timestamp}') + fname_labels = os.path.join(workdir, f'labels_offline_eval_{timestamp}') + fname_keys = os.path.join(workdir, f'keys_offline_eval_{timestamp}') + fname_masks = os.path.join(workdir, f'masks_offline_eval_{timestamp}') + if lead_host: + logging.info('Logging results to %s', fname_logits) + store_predictions( + predictions=np.concatenate(all_logits, axis=0), + filename_prefix=fname_logits) + store_predictions( + predictions=np.concatenate(all_labels, axis=0), + filename_prefix=fname_labels) + store_predictions( + predictions=np.concatenate(all_keys, axis=0), + filename_prefix=fname_keys) + store_predictions( + predictions=np.concatenate(all_batch_masks, axis=0), + filename_prefix=fname_masks) + store_predictions( + predictions=np.concatenate(all_intermediate, axis=0), + filename_prefix=fname_intermediate) + + +def store_predictions(predictions, filename_prefix: str): + """Saves predictions. + + Args: + predictions: Serialised predictions. + filename_prefix: File prefix to save the results to. + """ + with open(filename_prefix + '.pkl', 'wb') as f: + # Protocol needs to be set to save large files. + pickle.dump(predictions, f, protocol=4) + + +def all_gather_and_unreplicate(inputs): + return jax_utils.unreplicate( + jax.pmap(lambda x: jax.lax.all_gather(x, 'batch'), 'batch')(inputs)) + + +def evaluate( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> dict[str, Any]: + """Evaluates the model. + + This function loads a pretrained model, optionally overrides some arguments + related to evaluation in its original config, and then evaluates the model + on the specified dataset. + + Args: + rng: Jax rng key. + config: Configurations for evaluation. Can be reused to override some + settings from the training config. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + eval_summary: Dictionary with the evaluation summary + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + train_state, current_step = restore_train_state(rng, config, model, dataset) + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + eval_step_pmapped = jax.pmap( + functools.partial( + trainer.eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + all_gather=config.get('global_metrics', False), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + inference_step_pmapped = jax.pmap( + functools.partial( + inference_step, + flax_model=model.flax_model, + debug=config.debug_eval), + axis_name='batch', + donate_argnums=(1,), + ) + # If `global_metrics` are set in the config and we are the lead host + compute_global_metrics = False + if config.get('global_metrics', False) and lead_host: + compute_global_metrics = True + if compute_global_metrics: + global_metrics_evaluator = tasseo_train_utils.TasseoGlobalEvaluator( + config.global_metrics) + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summary = {} + # Ceil rounding such that we include the last incomplete batch. + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / config.batch_size)) + eval_metrics = [] + if not config.save_predictions: + for s in range(total_eval_steps): + eval_batch = next(dataset.valid_iter) + e_metrics, e_output, e_batch = eval_step_pmapped(train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + logging.info('eval metircs at step %d', s) + if compute_global_metrics: + # Unreplicate outputs of eval_step_pmapped that are coming from + # `lax.all_gather`, fetch to the host and add to the Evaluator: + e_batch_mask = train_utils.unreplicate_and_get( + e_batch['batch_mask']).astype(bool) + global_metrics_evaluator.add_batch_of_examples( + target=train_utils.unreplicate_and_get( + e_batch['label'])[e_batch_mask], + output=train_utils.unreplicate_and_get(e_output)[e_batch_mask]) + del e_batch, e_output, e_batch_mask + eval_global_metrics_summary = None + if compute_global_metrics: + if dataset.meta_data['num_eval_examples'] != len( + global_metrics_evaluator): + logging.warning( + 'Number of eval (valid/test) examples in the dataset metadata is ' + '%d, however the global evaluator captured only %d of them', + dataset.meta_data['num_eval_examples'], + len(global_metrics_evaluator)) + eval_global_metrics_summary = ( + global_metrics_evaluator.compute_metrics(clear_annotations=True)) + + eval_summary.update( + train_utils.log_eval_summary( + step=current_step, + eval_metrics=eval_metrics, + extra_eval_summary=eval_global_metrics_summary, + writer=writer)) + del eval_metrics, eval_global_metrics_summary + else: + compute_similarity_scores( + train_state=train_state, + iterator=dataset.valid_iter, + eval_step_fn=inference_step_pmapped, + eval_steps=total_eval_steps, + workdir=workdir, + lead_host=lead_host) + writer.flush() + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return eval_summary diff --git a/scenic/projects/tasseo/main.py b/scenic/projects/tasseo/main.py new file mode 100644 index 0000000000000000000000000000000000000000..3de31a0b925c440e1e96ce116653b55b131eb3bb --- /dev/null +++ b/scenic/projects/tasseo/main.py @@ -0,0 +1,96 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for FastViT.""" + +from typing import Any + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.tasseo import classification_trainer as tasseo_classification_trainer +from scenic.projects.tasseo import duplex_vit +from scenic.projects.tasseo import duplex_vit_classification_trainer +from scenic.projects.tasseo import inference +from scenic.projects.tasseo import transfer_trainer +from scenic.projects.tasseo import vit +from scenic.projects.tasseo import xvit + +# pylint: disable=unused-import +from scenic.projects.tasseo.datasets import abnormality_baseline_dataset +from scenic.projects.tasseo.datasets import chrmID_baseline_dataset +from scenic.projects.tasseo.datasets import chrmID_big_metaphase_context_dataset +from scenic.projects.tasseo.datasets import chrmID_dataset +from scenic.projects.tasseo.datasets import chrmID_metaphase_context_dataset +from scenic.projects.tasseo.datasets import longtail_baseline_dataset +from scenic.projects.tasseo.datasets import longtail_rhs_baseline_dataset +from scenic.projects.tasseo.datasets import metaphase_sexid_dataset +# pylint: enable=unused-import +from scenic.train_lib import train_utils +from scenic.train_lib import trainers + + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name: str) -> Any: + """Returns model class given its name.""" + if model_name == 'xvit_classification': + return xvit.XViTClassificationModel + elif model_name == 'vit_classification': + return vit.ViTClassificationModel + elif model_name == 'topological_vit_classification': + return vit.TopologicalViTClassificationModel + elif model_name == 'duplex_vit_classification': + return duplex_vit.DuplexViTClassificationModel + else: + raise ValueError(f'Unrecognized model: {model_name}.') + + +def get_trainer(trainer_name: str) -> Any: + """Gets the trainer matching the given name.""" + if trainer_name == 'duplex_vit_classification_trainer': + return duplex_vit_classification_trainer.train + elif trainer_name == 'classification_trainer': + return tasseo_classification_trainer.train + elif trainer_name == 'transfer_trainer': + return transfer_trainer.train + elif trainer_name == 'inference': + return inference.evaluate + else: + return trainers.get_trainer(trainer_name) + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the Tasseo.""" + model_cls = get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + + get_trainer(config.trainer_name)( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/tasseo/train_utils.py b/scenic/projects/tasseo/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..987badb751db5a5f62a67cb24d219a1af17c1352 --- /dev/null +++ b/scenic/projects/tasseo/train_utils.py @@ -0,0 +1,229 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for tasseo trainer.""" + +from typing import Any, Dict, List, Optional + +from absl import logging +import numpy as np +import sklearn.metrics + + +def chrom_auc_pr_score( + target: np.ndarray, + prediction: np.ndarray, +) -> Dict[str, float]: + """Compute Area Under the PR Curve for abnormal. + + Args: + target: Numpy array of targets of shape (n_samples, n_classes). Since this + metric is only used for anomaly detection, we assume the n_classes is + equal to 2. + prediction: Numpy array of model predictions of shape (n_samples, + n_classes). Here also we assume the n_classes is equal to 2. + + Returns: + AUC PR score. + """ + target = np.argmax(target, axis=-1) + + # In the prediction array, label 0 is for normal and 1 for abnormal examples. + pr_curve_precisions, pr_curve_recalls, _ = sklearn.metrics.precision_recall_curve( + target, prediction[:, 1]) + return { + 'chrom_auc_pr_score': + sklearn.metrics.auc(pr_curve_recalls, pr_curve_precisions) + } + + +def chrom_roc_auc_score( + target: np.ndarray, + prediction: np.ndarray, +) -> Dict[str, float]: + """Compute Area Under the ROC Curve for abnormal. + + Args: + target: Numpy array of targets of shape (n_samples, n_classes). Since this + metric is only used for anomaly detection, we assume the n_classes is + equal to 2. + prediction: Numpy array of model predictions of shape (n_samples, + n_classes). Here also we assume the n_classes is equal to 2. + + Returns: + ROC AUC score. + """ + target = np.argmax(target, axis=-1) + + # In the prediction array, label 0 is for normal and 1 for abnormal examples. + return { + 'chrom_roc_auc_score': + sklearn.metrics.roc_auc_score(target, prediction[:, 1]) + } + + +def chrom_f1_score( + target: np.ndarray, + prediction: np.ndarray, +) -> Dict[str, float]: + """Compute F1 score. + + Args: + target: Numpy array of targets of shape (n_samples, n_classes). + prediction: Numpy array of model predictions of shape (n_samples, + n_classes). Here also we assume the n_classes is equal to 2. + + Returns: + F1 score. + """ + target = np.argmax(target, axis=-1) + prediction = np.argmax(prediction, axis=-1) + return {'chrom_f1': sklearn.metrics.f1_score(target, prediction)} + + +def chrom_recall( + target: np.ndarray, + prediction: np.ndarray, +) -> Dict[str, float]: + """Compute recall. + + Args: + target: Numpy array of targets of shape (n_samples, n_classes). + prediction: Numpy array of model predictions of shape (n_samples, + n_classes). Here also we assume the n_classes is equal to 2. + + Returns: + Recall score. + """ + target = np.argmax(target, axis=-1) + prediction = np.argmax(prediction, axis=-1) + return {'chrom_recall': sklearn.metrics.recall_score(target, prediction)} + + +def chrom_specificity( + target: np.ndarray, + prediction: np.ndarray, +) -> Dict[str, float]: + """Compute recall. + + Args: + target: Numpy array of targets of shape (n_samples, n_classes). + prediction: Numpy array of model predictions of shape (n_samples, + n_classes). Here also we assume the n_classes is equal to 2. + + Returns: + Specificity score. + """ + target = np.argmax(target, axis=-1) + prediction = np.argmax(prediction, axis=-1) + # In binary classification, recall of the negative class is specificity. + return { + 'chrom_specificity': + sklearn.metrics.recall_score(target, prediction, average=None)[0] + } + + +def chrom_precision( + target: np.ndarray, + prediction: np.ndarray, +) -> Dict[str, float]: + """Compute precision. + + Args: + target: Numpy array of targets of shape (n_samples, n_classes). + prediction: Numpy array of model predictions of shape (n_samples, + n_classes). Here also we assume the n_classes is equal to 2. + + Returns: + Precision score. + """ + target = np.argmax(target, axis=-1) + prediction = np.argmax(prediction, axis=-1) + return { + 'chrom_precision': sklearn.metrics.precision_score(target, prediction) + } + + +class TasseoGlobalEvaluator(): + """Evaluator used for tasseo global metrics evaluation.""" + + def __init__(self, global_metrics: List[str]): + self.global_metrics = global_metrics + self.batches = None + self._num_examples_added = 0 + + def add_batch_of_examples(self, target: np.ndarray, output: np.ndarray): + """Add a batch of examples to the evaluator. + + Args: + target: Target to be predicted as a Numpy array. + output: Output from the model as a Numpy array. + """ + self._num_examples_added += output.shape[0] + if self.batches is None: + self.batches = (target, output) + else: # Append targets and outputs for the new examples. + self.batches = (np.append(self.batches[0], target, axis=0), + np.append(self.batches[1], output, axis=0)) + + def compute_metrics(self, + clear_annotations: Optional[bool] = True + ) -> Dict[str, Any]: + """Computes the relevant metrics for all added pairs.""" + # To handle the case where the batch contains only a single class, fall back + # to an empty metric value for that point rather than raising an exception. + def try_with_default(func, default_retval=None): + try: + return func() + except ValueError as e: + logging.warn('Failed to compute metrics: %r', e) + return default_retval if default_retval is not None else {} + + metrics = {} + # pylint: disable=g-long-lambda + if 'chrom_f1' in self.global_metrics: + metrics.update( + try_with_default(lambda: chrom_f1_score( + target=self.batches[0], prediction=self.batches[1]))) + if 'chrom_recall' in self.global_metrics: + metrics.update( + try_with_default(lambda: chrom_recall( + target=self.batches[0], prediction=self.batches[1]))) + if 'chrom_precision' in self.global_metrics: + metrics.update( + try_with_default(lambda: chrom_precision( + target=self.batches[0], prediction=self.batches[1]))) + if 'chrom_roc_auc_score' in self.global_metrics: + metrics.update( + try_with_default(lambda: chrom_roc_auc_score( + target=self.batches[0], prediction=self.batches[1]))) + if 'chrom_specificity' in self.global_metrics: + metrics.update( + try_with_default(lambda: chrom_specificity( + target=self.batches[0], prediction=self.batches[1]))) + if 'chrom_auc_pr_score' in self.global_metrics: + metrics.update( + try_with_default(lambda: chrom_auc_pr_score( + target=self.batches[0], prediction=self.batches[1]))) + if clear_annotations: + self.clear() + # pylint: enable=g-long-lambda + return metrics + + def clear(self): + self.batches = None + self._num_examples_added = 0 + + def __len__(self): + return self._num_examples_added diff --git a/scenic/projects/tasseo/transfer_trainer.py b/scenic/projects/tasseo/transfer_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..e9f85be6b459be4a7b6158670e29f65a462e43ff --- /dev/null +++ b/scenic/projects/tasseo/transfer_trainer.py @@ -0,0 +1,535 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script.""" + +import functools +from typing import Any, Callable, Dict, Iterator, Tuple, Optional, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.tasseo import train_utils as tasseo_train_utils +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] +LrFn = Callable[[jnp.ndarray], jnp.ndarray] + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + lr_fn: LrFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, + Any]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, params, and optimizer. The buffer of this argument can + be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + lr_fn: The learning rate fn used for the logging the learning rate. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training and computed metrics for logging. + """ + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + rng=mixup_rng) + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + logits, new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params']) + return loss, (new_model_state, logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (train_cost, (new_model_state, + logits)), grad = compute_gradient_fn(train_state.params) + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm') is not None: + grad = clip_grads(grad, config.max_grad_norm) + + updates, new_opt_state = train_state.tx.update(grad, train_state.opt_state, + train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)])) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + # TODO(dehghani): Can we get this from the optimizer instead? + training_logs['learning_rate'] = lr_fn(train_state.global_step) + + metrics = metrics_fn(logits, batch) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + + return new_train_state, metrics, training_logs + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + all_gather: bool = False, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], Optional[jnp.ndarray], + Optional[jnp.ndarray]]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, params and optimizer state. The buffer of + this argument can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + all_gather: If True, the function gather batch and output of model in from + all hosts, using `jax.lax.all_gather` and return it, e.g., for computing + global metrics on CPU. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and optionally output, and batch after all_gather. + """ + variables = {'params': train_state.params, **train_state.model_state} + logits = flax_model.apply( + variables, batch['inputs'], train=False, mutable=False, debug=debug) + metrics = metrics_fn(logits, batch) + if all_gather: + targets = {'label': batch['label'], 'batch_mask': batch['batch_mask']} + logits = jax.lax.all_gather(logits, 'batch') + targets = jax.lax.all_gather(targets, 'batch') + return metrics, logits, targets + else: + return metrics, None, None + + +def representation_fn( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + representation_layer: str, + gather_to_host: bool = True +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Feeds the inputs to the model and returns their representations. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data from the dataset. + flax_model: A Flax model. + representation_layer: The name of the layer to use as the representation. + gather_to_host: Whether to gather results from all devices to the host, + rather than leaving them distributed. + + Returns: + Representation learned by the model for the given inputs and the labels and + masks. If `gather_to_host` is True, these are collected from all hosts. + """ + variables = {'params': train_state.params, **train_state.model_state} + + representation_layer_parts = representation_layer.split('/') + filter_rep = lambda mdl, _: mdl.name == representation_layer_parts[-1] + _, model_state = flax_model.apply( + variables, + batch['inputs'], + train=False, + capture_intermediates=filter_rep, + mutable=['intermediates'], + debug=False) + if 'intermediates' not in model_state: + raise ValueError(f'Layer with name "{representation_layer}"' + ' does not exist in your model.') + + representation = model_state['intermediates'] + for rep_layer in representation_layer_parts: + if rep_layer: + representation = representation[rep_layer] + representation = representation['__call__'][0] + if gather_to_host: + representation = jax.lax.all_gather(representation, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return representation, batch['label'], batch['batch_mask'] + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current global_step, + model_state, rng, and the optimizer), train_summary and eval_summary which + are dict of metrics (from the last evaluation and train metric logging + respectively). These outputs are used for regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params=params) + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + rng, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + if init_checkpoint_path is not None: + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + # Load params from the init_model. + train_state = model.init_from_train_state( # pytype: disable=attribute-error + train_state, restored_train_state, restored_model_cfg) + del restored_train_state + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + lr_fn=lr_fn, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + all_gather=config.get('global_metrics', False), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + def evaluate(train_state: train_utils.TrainState, step: int, + valid_iter: Iterator[Batch], + num_valid_ex: int) -> Dict[str, Any]: + eval_summary = {} + if not isinstance(valid_iter, dict): # Only on validation set. + valid_iter, num_valid_ex = {'valid': valid_iter}, {'valid': num_valid_ex} + + for val_name, val_iter in valid_iter.items(): + num_ex = num_valid_ex[val_name] + # Ceil rounding such that we include the last incomplete batch. + total_eval_steps = int(np.ceil(num_ex / config.batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + eval_metrics = [] + for _ in range(steps_per_eval): + eval_batch = next(val_iter) + if dataset.meta_data['target_is_onehot']: # Which includes multi-hot. + # Ignore the entries with all zero label for evaluation. + eval_batch['batch_mask'] *= eval_batch['label'].max(axis=-1) + e_metrics, e_output, e_batch = eval_step_pmapped( + train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + if compute_global_metrics: + # Unreplicate outputs of eval_step_pmapped that are coming from + # `lax.all_gather`, fetch to the host and add to the Evaluator: + e_batch_mask = train_utils.unreplicate_and_get( + e_batch['batch_mask']).astype(bool) + # Classification: 'label', regression: 'target' + t_key = 'label' if 'label' in e_batch else 'targets' + global_metrics_evaluator.add_batch_of_examples( + target=train_utils.unreplicate_and_get( + e_batch[t_key])[e_batch_mask], + output=train_utils.unreplicate_and_get(e_output) + [e_batch_mask]) + del e_batch, e_output, e_batch_mask + eval_global_metrics_summary = None + if compute_global_metrics: + eval_global_metrics_summary = ( + global_metrics_evaluator.compute_metrics( + clear_annotations=True)) + eval_summary.update( + train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + extra_eval_summary=eval_global_metrics_summary, + writer=writer, + prefix=val_name)) + del eval_metrics, eval_global_metrics_summary + writer.flush() + return eval_summary + + # If `global_metrics` are set in the config and we are the lead host + compute_global_metrics = False + if config.get('global_metrics', False) and lead_host: + compute_global_metrics = True + if compute_global_metrics: + global_metrics_evaluator = tasseo_train_utils.TasseoGlobalEvaluator( + config.global_metrics) + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + extra_training_logs.append(t_logs) + + # Quick indication that training is happening. + logging.log_first_n(logging.INFO, 'Finished training step %d.', 5, step) + for h in hooks: + h(step) + + ############### LOG TRAIN SUMMARY ############### + if ((step % log_summary_steps == 1) or (step == total_steps) or + (lead_host and chrono.warmup)): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_training_logs), + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summary = evaluate(train_state, step, dataset.valid_iter, + dataset.meta_data['num_eval_examples']) + chrono.resume() + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 1 and step > 1) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + train_utils.save_checkpoint(workdir, unrep_train_state) + del unrep_train_state + chrono.resume() # Un-pause now. + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/tasseo/vit.py b/scenic/projects/tasseo/vit.py new file mode 100644 index 0000000000000000000000000000000000000000..e82e8c0dd9e17b4d8aa6d123991a300265614dbf --- /dev/null +++ b/scenic/projects/tasseo/vit.py @@ -0,0 +1,174 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""ViT Classification model.""" +from typing import Optional + +from flax.training import common_utils +import jax.numpy as jnp +import numpy as np +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils +from scenic.model_lib.base_models.classification_model import ClassificationModel +from scenic.projects.baselines import vit + +from topological_transformer.images import topvit + + +class ViTClassificationModel(ClassificationModel): + """ViT model for classification task.""" + + def build_flax_model(self): + return vit.ViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + representation_size=self.config.model.representation_size, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + dtype='float32', + ) + + def init_from_train_state(self, train_state, restored_train_state, + restored_model_cfg): + """Updates the train_state with data from restored_train_state. + + This function is written to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return vit.init_vit_from_train_state(train_state, restored_train_state, + self.config, restored_model_cfg) + + +class TopologicalViTClassificationModel(ClassificationModel): + """TopologicalViT model for classification task.""" + + def build_flax_model(self): + return topvit.TopologicalViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + representation_size=self.config.model.representation_size, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + dtype='float32', + ) + + def init_from_train_state(self, train_state, restored_train_state, + restored_model_cfg): + """Updates the train_state with data from restored_train_state. + + This function is written to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return topvit.init_topvit_from_train_state(train_state, + restored_train_state, + self.config, restored_model_cfg) + + def loss_function(self, + logits: jnp.ndarray, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Returns softmax cross entropy loss with an L2 penalty on the weights. + + The function overwrites/modifies loss_function of ClassificationModel. + Args: + logits: Output of model in shape [batch, length, num_classes]. + batch: Batch of data that has 'label' and optionally 'batch_mask'. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + weights = batch.get('batch_mask') + + if self.dataset_meta_data.get('target_is_onehot', False): + one_hot_targets = batch['label'] + else: + one_hot_targets = common_utils.onehot(batch['label'], logits.shape[-1]) + if self.config.get('class_balancing'): + sof_ce_loss = model_utils.weighted_softmax_cross_entropy( + logits, + one_hot_targets, + weights, + label_weights=self.get_label_weights(), + label_smoothing=self.config.get('label_smoothing')) + else: + sof_ce_loss = model_utils.weighted_softmax_cross_entropy( + logits, + one_hot_targets, + weights, + label_smoothing=self.config.get('label_smoothing')) + if self.config.get('l2_decay_factor') is None: + total_loss = sof_ce_loss + else: + l2_loss = model_utils.l2_regularization(model_params) + total_loss = sof_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss # pytype: disable=bad-return-type # jax-ndarray + + def get_label_weights(self) -> jnp.ndarray: + """Returns labels' weights to be used for computing weighted loss. + + This can be used for weighting the loss terms based on the amount of + available data for each class, when we have unbalanced data. + """ + if not self.config.dataset_configs.get('num_normal'): + raise ValueError( + 'When `class_balancing` is True, `num_normal` must' + ' be provided.') + if not self.config.dataset_configs.get('num_normal'): + raise ValueError( + 'When `class_balancing` is True, `num_abnormal` must' + ' be provided.') + bincount = np.array([ + self.config.dataset_configs.get('num_normal'), + self.config.dataset_configs.get('num_abnormal') + ]) + n_samples = self.config.dataset_configs.get( + 'num_normal') + self.config.dataset_configs.get('num_abnormal') + n_classes = 2 # For binary classification. + return n_samples / (n_classes * bincount) diff --git a/scenic/projects/tasseo/xvit.py b/scenic/projects/tasseo/xvit.py new file mode 100644 index 0000000000000000000000000000000000000000..876155f93821bb89dc11bb44ce1081c5a59d4f4f --- /dev/null +++ b/scenic/projects/tasseo/xvit.py @@ -0,0 +1,85 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""X-ViT Classification model.""" + +from typing import Any + +import ml_collections +from scenic.model_lib.base_models.classification_model import ClassificationModel + +from scenic.projects.baselines import vit +from scenic.projects.fast_vit.xvit import XViT + + +class XViTClassificationModel(ClassificationModel): + """X-ViT model for classification task.""" + + def build_flax_model(self): + return XViT( + num_outputs=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + attention_configs=self.config.model.attention_configs, + attention_fn=self.config.model.attention_fn, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + transformer_encoder_configs=self.config.model + .transformer_encoder_configs, + representation_size=self.config.model.representation_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.), + ) + + def default_flax_model_config(self): + return ml_collections.ConfigDict( + dict( + model=dict( + attention_fn='standard', + attention_configs={'num_heads': 2}, + transformer_encoder_configs={'type': 'global'}, + num_layers=1, + representation_size=16, + mlp_dim=32, + dropout_rate=0., + attention_dropout_rate=0., + hidden_size=16, + patches={'size': (4, 4)}, + classifier='gap', + ), + data_dtype_str='float32')) + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is written to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return vit.init_vit_from_train_state(train_state, restored_train_state, + self.config, restored_model_cfg) diff --git a/scenic/projects/token_learner/README.md b/scenic/projects/token_learner/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c40a79c5d1c46f186f0e08a6a6c83add138acea8 --- /dev/null +++ b/scenic/projects/token_learner/README.md @@ -0,0 +1,55 @@ +TokenLearner +== +![TokenLearner](data/tokenlearner.gif) + +TokenLearner is a learnable module to be placed within Transformer architectures +for images and videos. Once placed, it significantly reduces the number of +tokens for all subsequent layers, thereby reducing the overall computation. +It simultaneously increases accuracy of the models by making the tokens dynamic +and adaptive to the input. It supports both image and video representation +models, such as [ViT](https://arxiv.org/pdf/2010.11929.pdf) and +[ViViT](https://arxiv.org/pdf/2103.15691.pdf). + +TokenLearner achieved state-of-the-art results on four public datasets, +including Kinetics-400, Kinetics-600, Charades, and AViD. Details can be found +in the [paper](https://arxiv.org/abs/2106.11297). + +## Getting Started + +TokenLearner models and training jobs are defined by [configuration files](configs). + +Alternatively, you can plug in the TokenLearnerModule (or TokenLearnerModuleV11) +from the [model file](model.py) into any of your Transformer architectures, and +benefit from it. Learning 8 or 16 tokens in the middle of the network is often +sufficient to maintain the accuracy while cutting the computation by half. +Placing the module before the last quarter of the network often improves the +accuracy while reducing the computation. + +An example command-line to train a base ViT model on ImageNet (following the +settings in the original [ViT paper](https://arxiv.org/pdf/2010.11929.pdf)) +using TokenLearner is: +``` +python scenic/projects/token_learner/main.py -- \ + --config=scenic/projects/token_learner/configs/im1k_token_learner_config.py \ + --workdir=token_learner/ +``` + +## Other Unofficial Implementations + +Feel free to share your implementation by contacting the authors or sending a +pull request. + +- [Keras](https://keras.io/examples/vision/token_learner/) by [Aritra Roy Gosthipaty](https://twitter.com/ariG23498) and [Sayak Paul](https://twitter.com/RisingSayak) (equal contribution) + +## Reference + +If you use TokenLearner, please use the following BibTeX entry. + +``` +@InProceedings{ryoo2021tokenlearner, + title={TokenLearner: Adaptive Space-Time Tokenization for Videos}, + author={Ryoo, Michael S. and Piergiovanni, AJ and Arnab, Anurag and Dehghani, Mostafa and Angelova, Anelia}, + booktitle={Advances in Neural Information Processing Systems (NeurIPS)}, + year={2021} +} +``` diff --git a/scenic/projects/token_learner/__init__.py b/scenic/projects/token_learner/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/token_learner/configs/__init__.py b/scenic/projects/token_learner/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/token_learner/configs/im1k_token_learner_config.py b/scenic/projects/token_learner/configs/im1k_token_learner_config.py new file mode 100644 index 0000000000000000000000000000000000000000..b4e42ecf947134247dbd86234487abdec6df4a30 --- /dev/null +++ b/scenic/projects/token_learner/configs/im1k_token_learner_config.py @@ -0,0 +1,117 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +r"""Default configs for ViT on ImageNet2012. + +``` + +""" +# pylint: disable=line-too-long + +import ml_collections + +_IMAGENET_TRAIN_SIZE = 1281167 +VARIANT = 'B/16' + + +def get_config(runlocal=''): + """Returns the ViT experiment configuration for ImageNet.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'imagenet-vit' + # Dataset. + config.dataset_name = 'imagenet' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + + # Model. + version, patch = VARIANT.split('/') + config.model_name = 'token_learner_multilabel_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = {'Ti': 192, + 'S': 384, + 'B': 768, + 'L': 1024, + 'H': 1280}[version] + config.model.tokenizer = ml_collections.ConfigDict() + config.model.tokenizer.type = 'dynamic' # Set this to 'dynamic' to use TokenLearner + config.model.tokenizer.patches = ml_collections.ConfigDict() + config.model.tokenizer.patches.size = [int(patch), int(patch)] + config.model.tokenizer.num_tokens = 16 # Number of tokens to learn. + config.model.tokenizer.tokenlearner_loc = 9 # The layer to insert TokenLearner at. Must be between [0, config.model.num_layers). Change this to control the accuracy/computation trade-off + config.model.tokenizer.use_tokenfuse = False # Whether to use TokenFuser as well. + config.model.tokenizer.use_v11 = True # Whether to use TokenLearner V1.1. If False, uses the original TokenLearner module. + + config.model.num_heads = {'Ti': 3, 'S': 6, 'B': 12, 'L': 16, 'H': 16}[version] + config.model.mlp_dim = {'Ti': 768, + 'S': 1536, + 'B': 3072, + 'L': 4096, + 'H': 5120}[version] + config.model.num_layers = {'Ti': 12, + 'S': 12, + 'B': 12, + 'L': 24, + 'H': 32}[version] + config.model.representation_size = None + config.model.classifier = 'gap' + config.model.attention_dropout_rate = 0.0 + config.model.dropout_rate = 0.0 + config.model.stochastic_depth = 0.1 + config.model_dtype_str = 'float32' + + # Training. + config.trainer_name = 'classification_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.beta1 = 0.9 + config.optimizer_configs.beta2 = 0.999 + config.optimizer_configs.weight_decay = 0.3 + config.explicit_weight_decay = None # No explicit weight decay + config.l2_decay_factor = None + config.max_grad_norm = 1.0 + config.label_smoothing = None + config.num_training_epochs = 90 + config.log_eval_steps = 1000 + config.batch_size = 8 if runlocal else 4096 + config.rng_seed = 42 + config.init_head_bias = -10.0 + + # Learning rate. + steps_per_epoch = _IMAGENET_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + base_lr = 5e-3 + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant*linear_warmup*linear_decay' + config.lr_configs.total_steps = total_steps + config.lr_configs.end_learning_rate = 1e-5 + config.lr_configs.warmup_steps = 10_000 + config.lr_configs.base_learning_rate = base_lr + + # Logging. + config.write_summary = True + config.xprof = True # Profile using xprof. + config.checkpoint = True # Do checkpointing. + config.checkpoint_steps = 5000 + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + + + return config + + diff --git a/scenic/projects/token_learner/data/__init__.py b/scenic/projects/token_learner/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/token_learner/data/tokenlearner.gif b/scenic/projects/token_learner/data/tokenlearner.gif new file mode 100644 index 0000000000000000000000000000000000000000..08f0982d9214a3db34db04c43d0a4062d972df8b --- /dev/null +++ b/scenic/projects/token_learner/data/tokenlearner.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2fa5cad6f1e58719497a33fcb1072ba56fbd92c1faff141c6ca9500b91a2d8c +size 2047344 diff --git a/scenic/projects/token_learner/main.py b/scenic/projects/token_learner/main.py new file mode 100644 index 0000000000000000000000000000000000000000..794f4e5c5b64ac7477af93ed319a62a607707c87 --- /dev/null +++ b/scenic/projects/token_learner/main.py @@ -0,0 +1,55 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for TokenLearner.""" + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.token_learner import model +from scenic.projects.vivit import trainer as vivit_trainer +from scenic.train_lib_deprecated import train_utils +from scenic.train_lib_deprecated import trainers + +FLAGS = flags.FLAGS + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the TokenLearner.""" + model_cls = model.get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + + if config.trainer_name == 'vivit_trainer': + # ViViT trainer is not in the central Scenic registry for trainers. + trainer = vivit_trainer.train + else: + trainer = trainers.get_trainer(config.trainer_name) + + trainer( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main) diff --git a/scenic/projects/token_learner/model.py b/scenic/projects/token_learner/model.py new file mode 100644 index 0000000000000000000000000000000000000000..d9a76ee53e74b69df4febc012a2b7a60e46dee49 --- /dev/null +++ b/scenic/projects/token_learner/model.py @@ -0,0 +1,887 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""TokenLearner model. + +Includes the implementation of the paper: https://arxiv.org/abs/2106.11297 +""" + +import copy +import functools +import math +from typing import Any, Optional, Type, Union + +from absl import logging +import flax +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import classification_model +from scenic.model_lib.base_models import multilabel_classification_model +from scenic.model_lib.layers import attention_layers +from scenic.model_lib.layers import nn_layers +from scenic.projects.baselines import vit +from scenic.projects.vivit import model as vivit_model +from scenic.projects.vivit import model_utils as vivit_model_utils + +# JAX team is working on type annotation for PyTree: +# https://github.com/google/jax/issues/1555 +Array = Union[jnp.ndarray, np.ndarray] +PyTree = Any + + +def get_model_cls(model_name: str) -> Type[base_model.BaseModel]: + """Returns model class given its name.""" + if model_name == 'token_learner_multilabel_classification': + return TokenLearnerMultilabelClassificationModel + elif model_name == 'token_learner_classification': + return TokenLearnerClassificationModel + else: + raise ValueError(f'Unrecognized model: {model_name}.') + + +class TokenLearnerModule(nn.Module): + """TokenLearner module. + + This is the module used for the experiments in the paper. + + Attributes: + num_tokens: Number of tokens. + """ + num_tokens: int + use_sum_pooling: bool = True + + @nn.compact + def __call__(self, inputs: jnp.ndarray) -> jnp.ndarray: + """Applies learnable tokenization to the 2D inputs. + + Args: + inputs: Inputs of shape `[bs, h, w, c]` or `[bs, hw, c]`. + + Returns: + Output of shape `[bs, n_token, c]`. + """ + if inputs.ndim == 3: + n, hw, c = inputs.shape + h = int(math.sqrt(hw)) + inputs = jnp.reshape(inputs, [n, h, h, c]) + + if h * h != hw: + raise ValueError('Only square inputs supported.') + + feature_shape = inputs.shape + + selected = inputs + selected = nn.LayerNorm()(selected) + + for _ in range(3): + selected = nn.Conv( + self.num_tokens, + kernel_size=(3, 3), + strides=(1, 1), + padding='SAME', + use_bias=False)(selected) # Shape: [bs, h, w, n_token]. + + selected = nn.gelu(selected) + + selected = nn.Conv( + self.num_tokens, + kernel_size=(3, 3), + strides=(1, 1), + padding='SAME', + use_bias=False)(selected) # Shape: [bs, h, w, n_token]. + + selected = jnp.reshape( + selected, [feature_shape[0], feature_shape[1] * feature_shape[2], -1 + ]) # Shape: [bs, h*w, n_token]. + selected = jnp.transpose(selected, [0, 2, 1]) # Shape: [bs, n_token, h*w]. + selected = nn.sigmoid(selected)[..., None] # Shape: [bs, n_token, h*w, 1]. + + feat = inputs + feat = jnp.reshape( + feat, [feature_shape[0], feature_shape[1] * feature_shape[2], -1 + ])[:, None, ...] # Shape: [bs, 1, h*w, c]. + + if self.use_sum_pooling: + inputs = jnp.sum(feat * selected, axis=2) + else: + inputs = jnp.mean(feat * selected, axis=2) + + return inputs + + +class TokenLearnerModuleV11(nn.Module): + """TokenLearner module Version 1.1, using slightly different conv. layers. + + Instead of using 4 conv. layers with small channels to implement spatial + attention, this version uses a MLP with gelu inbetween. It also uses softmax + instead of sigmoid. We confirmed that this version works better in general. + + Attributes: + num_tokens: Number of tokens. + bottleneck_dim: The size of hidden units in the MLP for spatial attention. + dropout_rate: Dropout rate. + """ + num_tokens: int + bottleneck_dim: int = 64 + dropout_rate: float = 0. + + @nn.compact + def __call__(self, inputs: jnp.ndarray, deterministic: bool) -> jnp.ndarray: + """Applies learnable tokenization to the 2D inputs. + + Args: + inputs: Inputs of shape `[bs, h, w, c]`. + deterministic: Weather we are in the deterministic mode (e.g inference + time) or not. + + Returns: + Output of shape `[bs, n_token, c]`. + """ + if inputs.ndim == 4: + n, h, w, c = inputs.shape + inputs = jnp.reshape(inputs, [n, h*w, c]) + + feature_shape = inputs.shape + + selected = inputs + + selected = nn.LayerNorm()(selected) + + selected = attention_layers.MlpBlock( + mlp_dim=self.bottleneck_dim, + out_dim=self.num_tokens, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + name='token_masking')( + selected, deterministic=deterministic) + + selected = jnp.reshape( + selected, + [feature_shape[0], -1, self.num_tokens]) # Shape: [bs, h*w, n_token]. + selected = jnp.transpose(selected, [0, 2, 1]) # Shape: [bs, n_token, h*w]. + selected = jax.nn.softmax(selected, axis=-1) + + feat = inputs + feat = jnp.reshape( + feat, [feature_shape[0], -1, feature_shape[-1]]) # Shape: [bs, h*w, c]. + + feat = jnp.einsum('...si,...id->...sd', selected, feat) + + return feat + + +class TokenFuser(nn.Module): + """Token fusion module. + + Attributes: + use_normalization: Whether to use LayerNorm layers. This is needed when + using sum pooling in the TokenLearner module. + bottleneck_dim: The size of hidden units in the MLP for spatial attention. + dropout_rate: Dropout rate. + """ + + use_normalization: bool = True + bottleneck_dim: int = 64 + dropout_rate: float = 0. + + @nn.compact + def __call__(self, inputs: jnp.ndarray, original: jnp.ndarray, + deterministic: bool) -> jnp.ndarray: + """Applies token fusion to the generate 2D ouputs. + + Args: + inputs: Inputs of shape `[bs, n_token, c]`. + original: Inputs of shape `[bs, hw, c]` or `[bs, h, w, c]`. + deterministic: Weather we are in the deterministic mode (e.g inference + time) or not. + + Returns: + Output tensor with the shape identical to `original'. + """ + feature_shape = inputs.shape + num_tokens = feature_shape[-2] + + if original.ndim == 4: + n, h, w, c = original.shape + original = jnp.reshape(original, [n, h*w, c]) + + if self.use_normalization: + inputs = nn.LayerNorm(name='fuser_mix_norm1')(inputs) + + inputs = jnp.transpose(inputs, axes=[0, 2, 1]) # Shape: [bs, c, n_token]. + inputs = nn.Dense( + num_tokens, + kernel_init=nn.initializers.zeros)(inputs) + inputs = jnp.transpose(inputs, axes=[0, 2, 1]) # Shape: [bs, n_token, c]. + + if self.use_normalization: + inputs = nn.LayerNorm(name='fuser_mix_norm2')(inputs) + + original = nn.LayerNorm()(original) + mix = attention_layers.MlpBlock( + mlp_dim=self.bottleneck_dim, + out_dim=num_tokens, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + name='token_masking')( + original, deterministic=deterministic) # Shape: [bs, h*w, n_token]. + mix = nn.sigmoid(mix) + + inputs = jnp.einsum('...sc,...hs->...hc', + inputs, mix) # Shape: [bs, h*w, c]. + + inputs = nn.Dropout(rate=self.dropout_rate)( + inputs, deterministic=deterministic) + + if original.ndim == 4: + inputs = jnp.reshape(inputs, [n, h, w, -1]) + + return inputs + + +class EncoderMod(nn.Module): + """Transformer Encoder modified, to use TokenLearner. + + Attributes: + num_layers: Number of layers. + mlp_dim: Dimension of the MLP on top of the attention block. + num_heads: The number of self-attention heads. + dropout_rate: Dropout rate in the transformer encoder. + attention_dropout_rate: Dropout rate for multi-head dot-product attention. + tokenizer_type: Which tokenizer to use. 'dynamic' or 'video' means using + TokenLearner. + temporal_dimensions: The number of temporal dimensions in the input. This + is necessary for video models. Default is 1 for image models. + num_tokens: Number of tokens to learn by TokenLearner. The total number of + tokens learned is thus num_tokens * temporal_dimensions. + tokenlearner_loc: The layer indices to add TokenLearner to. + use_v11: whether to use version 1.1. + dtype: Dtype of activations. + """ + num_layers: int + mlp_dim: int + num_heads: int + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + tokenizer_type: str = 'patch' + temporal_dimensions: int = 1 + num_tokens: int = 8 + tokenlearner_loc: int = 12 + use_v11: bool = True + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, train: bool = False): + """Applies Transformer model on the inputs.""" + + assert inputs.ndim == 3 # Shape is `[batch, len, emb]`. + dtype = jax.dtypes.canonicalize_dtype(self.dtype) + + x = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # From BERT. + name='posembed_input')( + inputs) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + tl_locs = [self.tokenlearner_loc] + tl_size = [self.num_tokens] + # Input Encoder. + for lyr in range(self.num_layers): + if self.tokenizer_type in {'dynamic', 'video'} and lyr in tl_locs: + tl_index = tl_locs.index(lyr) + + n, thw, c = x.shape + hw = thw // self.temporal_dimensions + x = jnp.reshape(x, [n * self.temporal_dimensions, hw, c]) + if self.use_v11: + x = TokenLearnerModuleV11( + tl_size[tl_index], dropout_rate=self.dropout_rate)( + x, deterministic=not train) # Shape [n*t, n_tokens, c]. + else: + x = TokenLearnerModule(tl_size[tl_index])(x) + _, n_tokens, c = x.shape + x = jnp.reshape(x, [n, self.temporal_dimensions * n_tokens, c]) + + x = vit.Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name=f'encoderblock_{lyr}', + dtype=dtype)( + x, deterministic=not train) + + else: + x = vit.Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name=f'encoderblock_{lyr}', + dtype=dtype)( + x, deterministic=not train) + encoded = nn.LayerNorm(name='encoder_norm')(x) + return encoded + + +class EncoderModFuser(nn.Module): + """Transformer Encoder modified, to use TokenLearner + TokenFuser. + + Attributes: + num_layers: Number of layers. + mlp_dim: Dimension of the MLP on top of the attention block. + num_heads: The number of self-attention heads. + dropout_rate: Dropout rate in the transformer encoder. + attention_dropout_rate: Dropout rate for multi-head dot-product attention. + tokenizer_type: Which tokenizer to use. 'dynamic' or 'video' means using + TokenLearner. + temporal_dimensions: The number of temporal dimensions in the input. This + is necessary for video models. Default is 1 for image models. + num_tokens: Number of tokens to learn by TokenLearner. The total number of + tokens learned is thus num_tokens * temporal_dimensions. + tokenlearner_loc: The layer indices to add TokenLearner to. + use_v11: whether to use version 1.1 of the TokenLearner + module. Works better when the module is applied early in the network. + dtype: Dtype of activations. + + """ + num_layers: int + mlp_dim: int + num_heads: int + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + tokenizer_type: str = 'patch' + temporal_dimensions: int = 1 + num_tokens: int = 8 + tokenlearner_loc: int = 12 + use_v11: bool = True + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, train: bool = False): + """Applies Transformer model on the inputs.""" + + assert inputs.ndim == 3 # Shape is `[batch, len, emb]`. + dtype = jax.dtypes.canonicalize_dtype(self.dtype) + + x = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # From BERT. + name='posembed_input')( + inputs) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + # Input Encoder. + for lyr in range(self.num_layers): + if (self.tokenizer_type in {'dynamic', 'video'} and + lyr >= self.tokenlearner_loc): + n, thw, c = x.shape + hw = thw // self.temporal_dimensions + x = jnp.reshape(x, [n * self.temporal_dimensions, hw, c]) + residual = x + if self.use_v11: + x = TokenLearnerModuleV11( + self.num_tokens, dropout_rate=self.dropout_rate)( + x, deterministic=not train) # Shape [n*t, n_tokens, c]. + else: + x = TokenLearnerModule(self.num_tokens)(x) + _, n_tokens, c = x.shape + x = jnp.reshape(x, [n, self.temporal_dimensions * n_tokens, c]) + + x = vit.Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name=f'encoderblock_{lyr}', + dtype=dtype)( + x, deterministic=not train) + + x = jnp.reshape(x, [n * self.temporal_dimensions, n_tokens, c]) + x = TokenFuser(dropout_rate=self.dropout_rate)( + x, residual, + deterministic=not train) # [n * t, n_tokens, c], [n * t, hw, c] + x = x + residual + x = jnp.reshape(x, [n, self.temporal_dimensions * hw, c]) + + else: + x = vit.Encoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + name=f'encoderblock_{lyr}', + dtype=dtype)( + x, deterministic=not train) + logging.info('Layer %d. Shape %s', lyr, x.shape) + encoded = nn.LayerNorm(name='encoder_norm')(x) + return encoded + + +class TokenLearnerViT(nn.Module): + """Vision Transformer model with TokenLearner. + + Attributes: + num_classes: Number of output classes. + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + representation_size: Size of the representation layer in the model's head. + if None, we skip the extra projection + tanh activation at the end. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + dtype: JAX data type for activations. + """ + + num_classes: int + mlp_dim: int + num_layers: int + num_heads: int + tokenizer: ml_collections.ConfigDict + hidden_size: int + representation_size: int + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + classifier: str = 'gap' + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, debug: bool = False): + + temporal_dimensions = 1 + if self.tokenizer.type == 'patch': + fh, fw = self.tokenizer.patches.size + x = nn.Conv( + self.hidden_size, (fh, fw), + strides=(fh, fw), + padding='VALID', + name='embedding')( + x) + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + elif self.tokenizer.type == 'dynamic': + fh, fw = self.tokenizer.patches.size + x = nn.Conv( + self.hidden_size, (fh, fw), + strides=(fh, fw), + padding='VALID', + name='embedding')( + x) + n, h, w, c = x.shape + x = jnp.reshape(x, [n, h * w, c]) + elif self.tokenizer.type == 'video': + x, temporal_dimensions = vivit_model.temporal_encode( + x, self.tokenizer.temporal_encoding_config, self.tokenizer.patches, + self.hidden_size) + else: + raise ValueError('Unknown tokenizer type') + + use_v11 = self.tokenizer.get('use_v11', True) + + if self.tokenizer.use_tokenfuse: + x = EncoderModFuser( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + tokenizer_type=self.tokenizer.type, + num_tokens=self.tokenizer.num_tokens, + tokenlearner_loc=self.tokenizer.tokenlearner_loc, + use_v11=use_v11, + temporal_dimensions=temporal_dimensions, + dtype=self.dtype, + name='Transformer')( + x, train=train) + else: + x = EncoderMod( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + tokenizer_type=self.tokenizer.type, + num_tokens=self.tokenizer.num_tokens, + tokenlearner_loc=self.tokenizer.tokenlearner_loc, + use_v11=use_v11, + temporal_dimensions=temporal_dimensions, + dtype=self.dtype, + name='Transformer')( + x, train=train) + + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=1) + + if self.representation_size is not None: + x = nn.Dense(self.representation_size, name='pre_logits')(x) + x = nn.tanh(x) + else: + x = nn_layers.IdentityLayer(name='pre_logits')(x) + + x = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')( + x) + return x + + +class TokenLearnerViTRepresentation(nn.Module): + """Token Learner + ViT without classification head. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of self-attention heads. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + representation_size: Size of the representation layer in the model's head. + if None, we skip the extra projection + tanh activation at the end. + use_concat_final: Whether to use the concatenation instead of mean pooling + at the end of the network. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + dtype: JAX data type for activations. + """ + + mlp_dim: int + num_layers: int + num_heads: int + tokenizer: ml_collections.ConfigDict + hidden_size: int + target_channel_dim: int + use_concat_final: bool = False + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + dtype: Any = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, debug: bool = False): + + fh, fw = self.tokenizer.patches.size + if len(x.shape) == 5: + n, t, h, w, _ = x.shape + x = jnp.reshape(x, [n * t, h, w, -1]) + else: + n = x.shape[0] + t = 1 + + x = nn.Conv( + self.hidden_size, (fh, fw), + strides=(fh, fw), + padding='VALID', + name='embedding')( + x) + x = jnp.reshape(x, [n, -1, self.hidden_size]) + + use_v11 = self.tokenizer.get('use_v11', True) + + if self.tokenizer.use_tokenfuse: + x = EncoderModFuser( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + tokenizer_type=self.tokenizer.type, + num_tokens=self.tokenizer.num_tokens, + tokenlearner_loc=self.tokenizer.tokenlearner_loc, + use_v11=use_v11, + temporal_dimensions=t, + dtype=self.dtype, + name='Transformer')( + x, train=train) + else: + x = EncoderMod( + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + tokenizer_type=self.tokenizer.type, + num_tokens=self.tokenizer.num_tokens, + tokenlearner_loc=self.tokenizer.tokenlearner_loc, + use_v11=use_v11, + temporal_dimensions=t, + dtype=self.dtype, + name='Transformer')( + x, train=train) + + return x + + +class TokenLearnerMultilabelClassificationModel( + multilabel_classification_model.MultiLabelClassificationModel): + """TokenLearner ViT model for multi-label image classification task.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return TokenLearnerViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + tokenizer=self.config.model.tokenizer, + hidden_size=self.config.model.hidden_size, + representation_size=self.config.model.representation_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + dtype=model_dtype, + ) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return ml_collections.ConfigDict({ + 'model': + dict( + num_heads=2, + num_layers=1, + mlp_dim=32, + dropout_rate=0., + attention_dropout_rate=0., + hidden_size=16, + classifier='gap', + data_dtype_str='float32', + tokenizer=None, + ) + }) + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is writen to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return init_token_learner_from_train_state(train_state, + restored_train_state, + self.config, restored_model_cfg) + + +class TokenLearnerClassificationModel(classification_model.ClassificationModel): + """TokenLearner ViT model for classification.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + return TokenLearnerViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + tokenizer=self.config.model.tokenizer, + hidden_size=self.config.model.hidden_size, + representation_size=self.config.model.representation_size, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get('attention_dropout_rate', + 0.1), + dtype=model_dtype, + ) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return ml_collections.ConfigDict({ + 'model': + dict( + num_heads=2, + num_layers=1, + mlp_dim=32, + dropout_rate=0., + attention_dropout_rate=0., + hidden_size=16, + classifier='gap', + data_dtype_str='float32', + tokenizer=None, + ) + }) + + def init_from_train_state( + self, train_state: Any, restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is writen to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of + a pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + return init_token_learner_from_train_state(train_state, + restored_train_state, + self.config, restored_model_cfg) + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one + of the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + label, weights)``` + """ + del split # For all splits, we return the same metric functions. + + return functools.partial( + classification_model.classification_metrics_function, + target_is_onehot=self.dataset_meta_data.get('target_is_onehot', False), + metrics=vivit_model.ViViT_CLASSIFICATION_METRICS) + + +def init_token_learner_from_train_state( + train_state: Any, restored_train_state: Any, + model_cfg: ml_collections.ConfigDict, + restored_model_cfg: ml_collections.ConfigDict) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is writen to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of a + pretrained model. + model_cfg: Configuration of the model. Usually used for some asserts. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + + Returns: + Updated train_state. + """ + params = flax.core.unfreeze(train_state.optimizer.target) + restored_params = flax.core.unfreeze(restored_train_state.optimizer.target) + + # Start moving parameters, one-by-one and apply changes if needed. + for m_key, m_params in restored_params.items(): + if m_key == 'output_projection': + # For the classifier head, we use a the randomly initialized params and + # ignore the the one from pretrained model. + pass + + elif m_key == 'pre_logits': + if model_cfg.model.representation_size is None: + # We don't have representation_size in the new model, so let's ignore + # it from the pretained model, in case it has it. + # Note, removing the key from the dictionary is necessary to prevent + # obscure errors from the Flax optimizer. + params.pop(m_key, None) + else: + assert restored_model_cfg.model.representation_size + params[m_key] = m_params + + elif m_key == 'Transformer': + for tm_key, tm_params in m_params.items(): + if tm_key == 'posembed_input': # Might need resolution change. + # TODO(aarnab): Adapt config as its different to ViVIT. Unify the two. + if model_cfg.model.tokenizer.get('temporal_encoding_config'): + with model_cfg.unlocked(): + model_cfg.model.temporal_encoding_config = copy.deepcopy( + model_cfg.model.tokenizer.temporal_encoding_config) + model_cfg.model.patches = copy.deepcopy( + model_cfg.model.tokenizer.patches) + vivit_model_utils.init_posemb(params[m_key], m_params, model_cfg, + restored_model_cfg, is_temporal=False) + else: # Other parameters of the Transformer encoder. + params[m_key][tm_key] = tm_params + + elif m_key == 'embedding': + init_embedding(params, m_params, model_cfg) + + else: + # Use the rest as they are in the pretrianed model. + params[m_key] = m_params + + return train_state.replace( + optimizer=train_state.optimizer.replace(target=flax.core.freeze(params))) + + +def init_embedding(to_params: PyTree, from_params: PyTree, + config: ml_collections.ConfigDict) -> None: + """Initialize input embedding. + + Args: + to_params: PyTree of model parameters that will be updated. This argument + is modified by the function. + from_params: PyTree of model parameters that are being restored from. + config: Config of the model being restored. + """ + if config.init_from.get('restore_input_embedding', True): + input_kernel = to_params['embedding']['kernel'] + restored_kernel = from_params['kernel'] + restored_bias = from_params['bias'] + + if input_kernel.shape != restored_kernel.shape: + # This branch should only be entered if we are initialising a video model + # from an image model. + # Kernel dimensions for video model are [t, h, w, c_in, c_out]. + temporal_encoding_config = config.model.tokenizer.temporal_encoding_config + if temporal_encoding_config.method != '3d_conv': + raise ValueError( + 'Input kernel dimensions should only differ if 3d_conv is the' + 'temporal encoding method.') + if input_kernel.shape[1:] != restored_kernel.shape: + raise ValueError( + 'All filter dimensions besides the temporal dimension should be' + f'equal. {input_kernel.shape} vs {restored_kernel.shape}') + + kernel_init_method = temporal_encoding_config.kernel_init_method + if kernel_init_method == 'average_frame_initializer': + # This corresponds to "filter inflation" in + # J Carreira and A Zisserman. Quo vadis, action recognition? + # A new model and the kinetics dataset. CVPR 2017". + logging.info('Initializing input kernel with filter inflation.') + t = input_kernel.shape[0] + restored_kernel = np.expand_dims(restored_kernel, axis=0) + restored_kernel = np.tile(restored_kernel, [t, 1, 1, 1, 1]) / t + elif kernel_init_method == 'central_frame_initializer': + logging.info('Initializing input kernel to select centre frame.') + central_time_index = input_kernel.shape[0] // 2 + temp = np.zeros(input_kernel.shape) + temp[central_time_index] = restored_kernel.copy() + restored_kernel = temp + else: + raise AssertionError( + 'Unknown input kernel initialization {}'.format(kernel_init_method)) + + to_params['embedding']['kernel'] = restored_kernel + to_params['embedding']['bias'] = restored_bias + else: + logging.info('Not restoring input embedding parameters') diff --git a/scenic/projects/token_learner/tests/__init__.py b/scenic/projects/token_learner/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/token_learner/tests/test_model.py b/scenic/projects/token_learner/tests/test_model.py new file mode 100644 index 0000000000000000000000000000000000000000..8a397e565aa99c69ed6ffe4373c6baa1d041fb4e --- /dev/null +++ b/scenic/projects/token_learner/tests/test_model.py @@ -0,0 +1,94 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for model.py.""" + +import functools +from absl.testing import absltest +from absl.testing import parameterized +from jax import random +import jax.numpy as jnp +from scenic.projects.token_learner import model + + +class TokenLearnerTest(parameterized.TestCase): + """Tests for modules in token-learner model.py.""" + + @parameterized.named_parameters( + ('32_tokens', 32), + ('111_tokens', 111), + ) + def test_dynamic_tokenizer(self, num_tokens): + """Tests TokenLearner module.""" + rng = random.PRNGKey(0) + x = jnp.ones((4, 224, 224, 64)) + tokenizer = functools.partial(model.TokenLearnerModule, + num_tokens=num_tokens) + tokenizer_vars = tokenizer().init(rng, x) + y = tokenizer().apply(tokenizer_vars, x) + # Test outputs shape. + self.assertEqual(y.shape, (x.shape[0], num_tokens, x.shape[-1])) + + @parameterized.named_parameters( + ('encoder_image', (2, 16, 192), 'dynamic', 1, 8, model.EncoderMod), + ('encoder_video_temporal_dims_1', + (2, 16, 192), 'video', 1, 8, model.EncoderMod), + ('encoder_video_temporal_dims_2', + (2, 32, 192), 'video', 2, 8, model.EncoderMod), + ('encoder_video_temporal_dims_4', + (2, 64, 192), 'video', 4, 8, model.EncoderMod), + ('encoder_fusion_image', + (2, 16, 192), 'dynamic', 1, 8, model.EncoderModFuser), + ('encoder_fusion_video_temporal_dims_1', + (2, 16, 192), 'video', 1, 8, model.EncoderModFuser), + ('encoder_fusion_video_temporal_dims_2', + (2, 32, 192), 'video', 2, 8, model.EncoderModFuser), + ('encoder_fusion_video_temporal_dims_4', + (2, 64, 192), 'video', 4, 8, model.EncoderModFuser), + ) + def test_encoder(self, input_shape, tokenizer_type, + temporal_dimensions, num_tokens, encoder_function): + """Tests shapes of TokenLearner Encoder (with and without TokenFuser).""" + rng = random.PRNGKey(0) + dummy_input = jnp.ones(input_shape) + encoder = functools.partial( + encoder_function, + num_layers=3, + mlp_dim=192, + num_heads=3, + tokenizer_type=tokenizer_type, + temporal_dimensions=temporal_dimensions, + num_tokens=num_tokens, + tokenlearner_loc=2) + encoder_vars = encoder().init(rng, dummy_input) + y = encoder().apply(encoder_vars, dummy_input) + + if encoder_function == model.EncoderMod: + if tokenizer_type == 'dynamic': + expected_shape = (input_shape[0], num_tokens, input_shape[2]) + elif tokenizer_type == 'video': + expected_shape = ( + input_shape[0], num_tokens * temporal_dimensions, input_shape[2]) + else: + raise ValueError('Unknown tokenizer type.') + elif encoder_function == model.EncoderModFuser: + expected_shape = input_shape + else: + raise ValueError('Unknown encoder function.') + + self.assertEqual(y.shape, expected_shape) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/token_turing/README.md b/scenic/projects/token_turing/README.md new file mode 100644 index 0000000000000000000000000000000000000000..14b804d095b0a9da6cc3c9ee97e02d840c075126 --- /dev/null +++ b/scenic/projects/token_turing/README.md @@ -0,0 +1,39 @@ +Token Turing Machines +== +![Token Turing Machines](data/ttm.png) + + +Token Turing Machines (TTM) are new sequential, autoregressive Transformer +models with *external memory*. Inspired by Neural Turing Machines, TTMs have +external memories consisting of a set of tokens summarizing previous history. It +is a fully differentiable model with Transformer-based processing units and +token learning-based memory interactions, having a bounded computational cost at +each step. + +It showed successful results both in computer vision (activity detection in +Charades and AVA) and robot learning (SayCan tasks). More details could be found +in the [paper](https://arxiv.org/abs/2211.09119). + +## Getting Started + +Currently, we are only providing the source code of the TTM module itself. Users +will need to combine this code with their own data/training pipelines. + +```TokenTuringMachineEncoder``` in the [model file](model.py) is the basic +encoder applying a TTM to a fixed sized input, which essentially repeats +```TokenTuringMachineUnit```. The encoder implementation also has multiple +memory modes and processing unit supports, which are specified in the code. + + +## Reference + +If you use TTM, please use the following BibTeX entry. + +``` +@InProceedings{ryoo2022ttm, + title={Token Turing Machines}, + author={Ryoo, Michael S and Gopalakrishnan, Keerthana and Kahatapitiya, Kumara and Xiao, Ted and Rao, Kanishka and Stone, Austin and Lu, Yao and Ibarz, Julian and Arnab, Anurag}, + booktitle={arXiv preprint arXiv:2211.09119}, + year={2022} +} +``` diff --git a/scenic/projects/token_turing/data/ttm.png b/scenic/projects/token_turing/data/ttm.png new file mode 100644 index 0000000000000000000000000000000000000000..a02f8c95d5b8637b87cfa04b6f17ed1026433420 --- /dev/null +++ b/scenic/projects/token_turing/data/ttm.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:198653c69ddbfff334af8569418c49e34cdfba1204547f45b59be4ad8300b427 +size 274174 diff --git a/scenic/projects/token_turing/model.py b/scenic/projects/token_turing/model.py new file mode 100644 index 0000000000000000000000000000000000000000..7d4abc9aed85743207ce542011fb9425983d372d --- /dev/null +++ b/scenic/projects/token_turing/model.py @@ -0,0 +1,403 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Token Turing Machines. + +https://arxiv.org/abs/2211.09119 +""" + +from typing import Tuple + +from absl import logging +import flax.linen as nn +import jax +import jax.numpy as jnp + +from scenic.model_lib.layers import attention_layers +from scenic.projects.baselines import mixer +from scenic.projects.baselines import vit +from scenic.projects.token_learner import model as token_learner_model + + +class TokenLearnerMHA(nn.Module): + """TokenLearner module using MHA. + + Attributes: + num_tokens: Number of tokens to generate. + num_heads: Number of heads to use for the dot product attention. + """ + num_tokens: int + num_heads: int = 8 + + @nn.compact + def __call__(self, inputs: jnp.ndarray) -> jnp.ndarray: + """Applies TokenLearner-mha to the inputs. + + Args: + inputs: Inputs of shape `[bs, hw, c]`. + + Returns: + Output of shape `[bs, num_tokens, c]`. + """ + bs, _, d = inputs.shape + + token_init = nn.initializers.normal(stddev=0.02) + tokens = self.param('tokens', token_init, (1, self.num_tokens, d)) + tokens = jnp.broadcast_to(tokens, (bs, self.num_tokens, d)) + return nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, deterministic=True, name='attn')( + inputs_q=tokens, inputs_kv=inputs) + + +class TokenAddEraseWrite(nn.Module): + """Token write operations motivated by the `write' in Neural Turing Machines. + + Instead of directly using the token summarization (with TokenLearner), it uses + a similar but different mechanism to (soft-)select memory elements to zero out + and write to them. This can be used as an alternative write operation in the + TTM, particularly when the memory size is huge. + """ + + num_tokens: int = 8 + bottleneck_dim: int = 64 + dropout_rate: float = 0. + + @nn.compact + def __call__(self, + memory: jnp.ndarray, + control_inputs: jnp.ndarray, + training: bool = False) -> jnp.ndarray: + + selected = nn.LayerNorm()(memory) + + selected = attention_layers.MlpBlock( + mlp_dim=self.bottleneck_dim, + out_dim=self.num_tokens, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu)( + selected, deterministic=not training) + + selected = jnp.transpose(selected, [0, 2, 1]) # Shape: [bs, n_token, hw]. + selected = jax.nn.softmax(selected, axis=-1) + + et = nn.LayerNorm()(control_inputs) + et = jnp.transpose(et, [0, 2, 1]) # Shape: [bs, c, hw]. + et = attention_layers.MlpBlock( + mlp_dim=self.bottleneck_dim, + out_dim=self.num_tokens, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu)( + et, deterministic=not training) # Shape: [bs, c, n_token]. + et = jnp.transpose(et, [0, 2, 1]) # Shape: [bs, n_token, c]. + + et = attention_layers.MlpBlock( + mlp_dim=self.bottleneck_dim, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu)( + et, deterministic=not training) + + wet = jnp.expand_dims(selected, -1) * jnp.expand_dims( + et, 2) # Shape: [bs, n_token, hw, c]. + wet = 1 - wet + wet = jnp.prod(wet, axis=1) # Shape: [bs, hw, c]. + + output = memory * wet + + at = nn.LayerNorm()(control_inputs) + at = jnp.transpose(at, [0, 2, 1]) # Shape: [bs, c, hw]. + at = attention_layers.MlpBlock( + mlp_dim=self.bottleneck_dim, + out_dim=self.num_tokens, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu)( + at, deterministic=not training) # Shape: [bs, c, n_token]. + at = jnp.transpose(at, [0, 2, 1]) # Shape: [bs, n_token, c]. + + at = attention_layers.MlpBlock( + mlp_dim=self.bottleneck_dim, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu)( + at, deterministic=not training) + + wat = jnp.expand_dims(selected, -1) * jnp.expand_dims( + at, 2) # Shape: [bs, n_token, hw, c]. + wat = 1 - wat + wat = jnp.mean(wat, axis=1) # Shape: [bs, hw, c]. + + output += wat + + return output # Shape: [bs, hw, c] + + +class TokenTuringMachineUnit(nn.Module): + """One Token Turing Machine unit. + + This implements the operations in a TTM (https://arxiv.org/abs/2211.09119) at + each step. + + Attributes: + process_size: Number of tokens for the processing unit to process. + memory_size: Number of memory tokens. + memory_mode: Specifies the token summarization method to use. Supports + 'TL', 'TL-MHA', or 'TL-AddErase'. + processing_unit: Specifies which processing unit module to use. Supports + 'transformer', 'mixer', or 'mlp'. + num_layers: Number of layers in the processing unit. + mlp_dim: MLP dim size in the processing unit. + num_heads: Number of heads in the processing unit. + use_positional_embedding: Whether to use positional embeddings for the + memory read/write. + dropout_rate: Dropout rate. + """ + process_size: int = 8 + memory_size: int = 64 + memory_mode: str = 'TL' + processing_unit: str = 'transformer' + num_layers: int = 1 + mlp_dim: int = 512 + num_heads: int = 12 + use_positional_embedding: bool = False + dropout_rate: float = 0. + + @nn.compact + def __call__(self, + memory_tokens: jnp.ndarray, + input_tokens: jnp.ndarray, + train: bool = False) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Applies Token Turing Machine unit. + + Args: + memory_tokens: Inputs of shape `[bs, memory_size, c]`. + input_tokens: Inputs of shape `[bs, n_token, c]`. + train: Weather we are in the training mode. + + Returns: + Tuple of shape `([bs, memory_size, c], [bs, process_size, c])`. + """ + all_tokens = jnp.concatenate([memory_tokens, input_tokens], axis=1) + + if self.use_positional_embedding: + all_tokens = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name='read_pos_embed')(all_tokens) + + if self.memory_mode == 'TL' or self.memory_mode == 'TL-AddErase': + all_tokens = token_learner_model.TokenLearnerModuleV11( + self.process_size, + dropout_rate=self.dropout_rate)(all_tokens, deterministic=not train) + elif self.memory_mode == 'TL-MHA': + all_tokens = TokenLearnerMHA(self.process_size)(all_tokens) + + if self.processing_unit == 'transformer': + output_tokens = vit.Encoder( + num_layers=self.num_layers, + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.dropout_rate, + )(all_tokens, train=train) + elif self.processing_unit == 'mixer': + output_tokens = all_tokens + for _ in range(self.num_layers): + output_tokens = mixer.MixerBlock( + channels_mlp_dim=self.mlp_dim, + sequence_mlp_dim=128, + dropout_rate=self.dropout_rate, + stochastic_depth=0., + layer_scale=None)( + output_tokens, deterministic=not train) + output_tokens = nn.LayerNorm()(output_tokens) + elif self.processing_unit == 'mlp': + output_tokens = all_tokens + for _ in range(self.num_layers): + output_tokens = nn.LayerNorm()(output_tokens) + output_tokens = attention_layers.MlpBlock( + mlp_dim=self.mlp_dim, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu)( + output_tokens, deterministic=not train) + output_tokens = nn.LayerNorm()(output_tokens) + else: + raise ValueError(f'Unknown processing unit {self.processing_unit}.') + mem_out_tokens = jnp.concatenate( + [memory_tokens, input_tokens, output_tokens], axis=1) + + if self.use_positional_embedding: + mem_out_tokens = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name='write_pos_embed')(mem_out_tokens) + + if self.memory_mode == 'TL': + mem_out_tokens = token_learner_model.TokenLearnerModuleV11( + self.memory_size, dropout_rate=self.dropout_rate)( + mem_out_tokens, deterministic=not train) + elif self.memory_mode == 'TL-MHA': + mem_out_tokens = TokenLearnerMHA(self.memory_size)(mem_out_tokens) + elif self.memory_mode == 'TL-AddErase': + mem_out_tokens = TokenAddEraseWrite()(memory_tokens, output_tokens, train) + + return (mem_out_tokens, output_tokens) + + +class TokenTuringMachineSimpleUnit(nn.Module): + """Token Turing Machine unit, simplified. + + Instead of implementing the memory read/write with TokenLearner, it directly + relies on a Transformer processing unit to maintain the memory. + + TokenLearner is still used to reduce the number of input tokens. + + Attributes: + process_size: Number of tokens for the Transformer to process + memory_size: The number of memory tokens to maintain. + processing_unit: Specifies which processing unit module to use. + num_layers: Number of layers in the processing unit. + mlp_dim: MLP dim size in the processing unit. + num_heads: Number of heads in the processing unit. + dropout_rate: Dropout rate. + """ + process_size: int = 16 + memory_size: int = 96 + processing_unit: str = 'transformer' + num_layers: int = 1 + mlp_dim: int = 512 + num_heads: int = 12 + dropout_rate: float = 0. + + @nn.compact + def __call__(self, + memory_tokens: jnp.ndarray, + input_tokens: jnp.ndarray, + train: bool = False) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Applies Token Turing Machine unit. + + Args: + memory_tokens: Inputs of shape `[bs, memory_size, c]`. + input_tokens: Inputs of shape `[bs, n_token, c]`. + train: Weather we are in the training mode. + + Returns: + Tuple of shape `([bs, memory_size, c], [bs, n_token, c])`. + """ + + input_tokens = token_learner_model.TokenLearnerModuleV11( + self.process_size, + dropout_rate=self.dropout_rate)(input_tokens, deterministic=not train) + + all_tokens = jnp.concatenate([memory_tokens, input_tokens], axis=1) + + if self.processing_unit == 'transformer': + output_tokens = vit.Encoder( + num_layers=self.num_layers, + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.dropout_rate, + )(all_tokens, train=train) + elif self.processing_unit == 'mixer': + output_tokens = all_tokens + for _ in range(self.num_layers): + output_tokens = mixer.MixerBlock( + channels_mlp_dim=self.mlp_dim, + sequence_mlp_dim=128, + dropout_rate=self.dropout_rate, + stochastic_depth=0., + layer_scale=None)( + output_tokens, deterministic=not train) + output_tokens = nn.LayerNorm()(output_tokens) + elif self.processing_unit == 'mlp': + output_tokens = all_tokens + for _ in range(self.num_layers): + output_tokens = nn.LayerNorm()(output_tokens) + output_tokens = attention_layers.MlpBlock( + mlp_dim=self.mlp_dim, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu)( + output_tokens, deterministic=not train) + output_tokens = nn.LayerNorm()(output_tokens) + + mem_out_tokens = output_tokens[:, self.process_size:, :] + output_tokens = output_tokens[:, :self.process_size, :] + + return (mem_out_tokens, output_tokens) + + +class TokenTuringMachineEncoder(nn.Module): + """Token Turing Machine main model encoder. + + It implements https://arxiv.org/abs/2211.09119. It essentially repeats + TokenTuringMachineUnit for the number of steps (of the input tensor). + + This version is for the training and inference with a fixed shaped, static + input tensor. One will need to modify/extend this module together with the + data pipeline for the streaming inference implementation. + + Attributes: + process_size: Number of tokens for the Transformer to process. + memory_size: The number of memory tokens in the TTM. + memory_mode: Specifies the token summarization method to use. Supports + 'TL', 'TL-MHA', or 'TL-AddErase'. + processing_unit: Specifies which processing unit module to use. Supports + 'transformer', 'mixer', or 'mlp'. + num_layers: Number of layers in the processing unit. + """ + process_size: int = 8 + memory_size: int = 64 + memory_mode: str = 'TL' + processing_unit: str = 'transformer' + num_layers: int = 4 + dropout_rate: float = 0. + + def setup(self): + self.unit_function = TokenTuringMachineUnit( + process_size=self.process_size, + memory_size=self.memory_size, + num_layers=self.num_layers, + memory_mode=self.memory_mode, + processing_unit=self.processing_unit, + dropout_rate=self.dropout_rate) + + def __call__(self, + input_tokens: jnp.ndarray, + train: bool = False) -> jnp.ndarray: + """Applies Token Turing Machine model. + + Args: + input_tokens: Inputs of shape `[bs, num_steps, n_tokens, c]`. + train: Weather we are in the training mode. + + Returns: + Tensor of shape `[bs, num_steps, process_size, c]`. + """ + bs, ns, _, c = input_tokens.shape + + output_tokens_list = [] + memory_tokens = jnp.zeros([bs, self.memory_size, c]) + + for i in range(ns): + step_tokens = input_tokens[:, i, :, :] + + logging.info('step tokens: %s', step_tokens.shape) + memory_tokens, output_tokens = self.unit_function( + memory_tokens, step_tokens, train=train) + + logging.info('output_tokens: %s', output_tokens.shape) + logging.info('memory_tokens: %s', memory_tokens.shape) + + output_tokens = jnp.expand_dims(output_tokens, axis=1) + output_tokens_list.append(output_tokens) + + output_tokens = jnp.concatenate(output_tokens_list, axis=1) + + return output_tokens diff --git a/scenic/projects/univrd/README.md b/scenic/projects/univrd/README.md new file mode 100644 index 0000000000000000000000000000000000000000..f06fd4849a6a94e01ce9d393e97bae5b5fc54eab --- /dev/null +++ b/scenic/projects/univrd/README.md @@ -0,0 +1,19 @@ +UniVRD: Unified Visual Relationship Detection with Vision and Language Models +== + +UniVRD is a bottom-up visual relationship detector built upon pre-trained vision and language models. It merges visual relationships spanning different datasets during training and thus can make predictions over the union of their label spaces. UniVRD reaches state-of-the-art performance on both human-object interaction and visual relationship detection tasks, e.g., 38.07 mAP on HICO-DET with a ViT-L/14 backbone. + +[[Paper]](https://arxiv.org/abs/2303.08998) + +## Reference + +If you use UniVRD, please cite the [paper](https://arxiv.org/abs/2303.08998): + +``` +@inproceedings{zhao2023unified, + title = {Unified Visual Relationship Detection with Vision and Language Models}, + author = {Zhao, Long and Yuan, Liangzhe and Gong, Boqing and Cui, Yin and Schroff, Florian and Yang, Ming-Hsuan and Adam, Hartwig and Liu, Ting}, + booktitle = {International Conference on Computer Vision (ICCV)}, + year = {2023}, +} +``` diff --git a/scenic/projects/unloc/README.md b/scenic/projects/unloc/README.md new file mode 100644 index 0000000000000000000000000000000000000000..665bc3b97b39d652c937f46cfebf5bda66c11514 --- /dev/null +++ b/scenic/projects/unloc/README.md @@ -0,0 +1,21 @@ +# UnLoc: A Unified Framework for Video Localization Tasks + + + +UnLoc proposes a unified architecture for video localization tasks, e.g., +Temporal Action Localization, Moment Retrieval, and Action Segmentation. More +details can be found in the [paper](https://openaccess.thecvf.com/content/ICCV2023/papers/Yan_UnLoc_A_Unified_Framework_for_Video_Localization_Tasks_ICCV_2023_paper.pdf). + + +## Reference + +If you use UnLoc, please use the following BibTeX entry. + +``` +@inproceedings{yan2023unloc, + title={Unloc: A unified framework for video localization tasks}, + author={Yan, Shen and Xiong, Xuehan and Nagrani, Arsha and Arnab, Anurag and Wang, Zhonghao and Ge, Weina and Ross, David and Schmid, Cordelia}, + booktitle={International Conference on Computer Vision (ICCV)}, + year={2023} +} +``` diff --git a/scenic/projects/unloc/action_segmentation_base_model.py b/scenic/projects/unloc/action_segmentation_base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..b3fbdf207dcd3f3e47203ff6c507267c856258f8 --- /dev/null +++ b/scenic/projects/unloc/action_segmentation_base_model.py @@ -0,0 +1,150 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class for action segmentation models.""" + +import functools +from typing import Any, Dict, Mapping, Optional, Tuple, Union + +import immutabledict +import jax.numpy as jnp +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils +from scenic.projects.unloc import temporal_localization_base_model + +Batch = Dict[str, Any] + + +_ACTION_SEGMENTATION_METRICS = immutabledict.immutabledict({ + 'frame_accuracy': ( + temporal_localization_base_model.weighted_top_one_correctly_classified, + model_utils.num_examples, + ), + 'sigmoid_classification_loss': ( + model_utils.weighted_unnormalized_sigmoid_cross_entropy, + model_utils.num_examples, + ), +}) + + +def action_segmentation_metrics_function( + logits: jnp.ndarray, + batch: Batch, + metrics: Mapping[str, Any] = _ACTION_SEGMENTATION_METRICS, + axis_name: Union[str, Tuple[str, ...]] = 'batch', +) -> Dict[str, Tuple[float, float]]: + """Calculates metrics for the action segmentation task. + + Args: + logits: Output of model in shape [batch, num_frames, num_classes]. + batch: Batch of data that has 'label', 'displacements', and optionally + 'batch_mask'. + metrics: Mapping from classification metric names to metric functions. + axis_name: List of axes on which we run the pmsum. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples of + (metric, normalizer). + """ + if batch.get('batch_mask') is None: + batch_mask = jnp.ones((logits.shape[0],), dtype=jnp.float32) + else: + batch_mask = batch.get('batch_mask') + frame_mask = batch['inputs']['input_mask'] + weights = batch_mask[:, None] * frame_mask + evaluated_metrics = {} + class_label = batch['label'] + if len(logits.shape) == 2: + assert class_label.shape[-1] == 1 + logits = logits.reshape(class_label.shape) + for key, val in metrics.items(): + evaluated_metrics[key] = model_utils.psum_metric_normalizer( + (val[0](logits, class_label, weights), val[1](logits, class_label, + weights)), + axis_name=axis_name) + + return evaluated_metrics # pytype: disable=bad-return-type # jax-ndarray + + +class ActionSegmentationModel(base_model.BaseModel): + """Defines metrics/loss among all action segmentation models. + + A model is class with three members: get_metrics_fn, loss_fn, & a flax_model. + + get_metrics_fn returns a callable function, metric_fn, that calculates the + metrics and returns a dictionary. The metric function computes f(logits_i, + batch_i) on a minibatch, it has API: + ```metric_fn(logits, batch).``` + + The trainer will then aggregate and compute the mean across all samples + evaluated. + + loss_fn is a function of API + loss = loss_fn(logits, batch, model_params=None). + """ + + def get_metrics_fn(self, split: Optional[str] = None): + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + batch)``` + """ + del split # For all splits, we return the same metric functions. + return functools.partial( + action_segmentation_metrics_function, + metrics=_ACTION_SEGMENTATION_METRICS) + + def loss_function(self, + logits: jnp.ndarray, + batch: Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Returns the sum of classification loss. + + Args: + logits: (batch_size, num_frames, num_classes). + batch: Batch of data. + model_params: Parameters of the model, not used. Regularization is + performed inside the optimizer. + + Returns: + Total loss. + """ + label = batch['label'] + batch_mask = batch['batch_mask'] + frame_mask = batch['inputs']['input_mask'] + weights = batch_mask[:, None] * frame_mask + if len(logits.shape) == 2: + assert label.shape[-1] == 1 + logits = logits.reshape(label.shape) + return model_utils.weighted_sigmoid_cross_entropy( # pytype: disable=bad-return-type # jax-ndarray + logits, + label, + weights, + label_smoothing=self.config.get('label_smoothing')) + + def build_flax_model(self): + raise NotImplementedError('Subclasses must implement build_flax_model().') + + def default_flax_model_config(self): + """Default config for the flax model that is built in `build_flax_model`. + + This function in particular serves the testing functions and supposed to + provide config tha are passed to the flax_model when it's build in + `build_flax_model` function, e.g., `model_dtype_str`. + """ + raise NotImplementedError( + 'Subclasses must implement default_flax_model_config().') diff --git a/scenic/projects/unloc/action_segmentation_base_model_test.py b/scenic/projects/unloc/action_segmentation_base_model_test.py new file mode 100644 index 0000000000000000000000000000000000000000..25987a24bc2a8fd8df554cbcd6ad46cd59efa266 --- /dev/null +++ b/scenic/projects/unloc/action_segmentation_base_model_test.py @@ -0,0 +1,154 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for action_segmentation_base_model.""" + +from absl.testing import absltest +from absl.testing import parameterized +from flax import jax_utils +import jax +import ml_collections +import numpy as np +from scenic.projects.unloc import action_segmentation_base_model + + +class MockActionSegmentationModel( + action_segmentation_base_model.ActionSegmentationModel): + """A mock action segmentation model for testing purposes.""" + + def __init__(self, config: ml_collections.ConfigDict): + dataset_meta_data = {} + super().__init__(config, dataset_meta_data) + + def build_flax_model(self): + pass + + def default_flax_model_config(self): + pass + + +class ActionSegmentationBaseModelTest(parameterized.TestCase): + + def setUp(self): + super().setUp() + self.logits = np.array([ + [ + [1.2, -0.9, 0.4], # class 0 + [-0.4, -0.8, -0.1], # background + [-1.0, -1.0, -1.0], # background + [-1.0, -1.0, -1.0], # background + ], + [ + [-1.0, -1.0, -1.0], # background + [-1.0, -1.0, -1.0], # background + [1.2, 0.9, 0.4], # class 0 + [0.4, 0.8, 0.1], # class 1 + ], + ]) # shape is (2, 4, 3). + self.batch = { + 'batch_mask': + np.ones((2,), dtype=np.int32), + 'inputs': { + 'input_mask': + np.array([[1, 1, 1, 1], [1, 1, 1, 0]], dtype=np.int32), + }, + 'label': + np.array( + [ + [ + [1, 0, 0], # class 0 + [0, 0, 0], # background + [0, 0, 0], # background + [0, 0, 0], # background + ], + [ + [0, 1, 0], # class 1 + [0, 0, 0], # background + [0, 1, 0], # class 1 + [0, 1, 0], # class 1 + ], + ], + dtype=np.int32), # shape is (2, 4, 3). + } + + def test_action_segmentation_model_multi_class_loss_function(self): + config = ml_collections.ConfigDict() + model = MockActionSegmentationModel(config) + loss = model.loss_function(self.logits, self.batch) + self.assertGreater(loss, 0.0) + + def test_action_segmentation_model_get_metrics_fn(self): + config = ml_collections.ConfigDict() + model = MockActionSegmentationModel(config) + metrics_fn = jax.pmap(model.get_metrics_fn(), axis_name='batch') + logits, batch = jax_utils.replicate((self.logits, self.batch)) + metrics = metrics_fn(logits, batch) + self.assertSetEqual( + set(metrics.keys()), {'frame_accuracy', 'sigmoid_classification_loss'}) + metrics = jax_utils.unreplicate(metrics) + self.assertAlmostEqual(metrics['frame_accuracy'][0], 5) + self.assertAlmostEqual(metrics['frame_accuracy'][1], 7) + self.assertGreaterEqual(metrics['sigmoid_classification_loss'][0], 0) + self.assertAlmostEqual(metrics['sigmoid_classification_loss'][1], 7) + + def test_action_segmentation_model_one_class_loss_function(self): + logits = np.array([ + [ + [1.2, + -0.8, + -1.0, + -1.0 + ], + ], + [ + [-1.0, + -1.0, + 1.2, + 0.8 + ], + ], + ]) # shape is (2, 4). + batch = { + 'batch_mask': + np.ones((2,), dtype=np.int32), + 'inputs': { + 'input_mask': + np.array([[1, 1, 1, 1], [1, 1, 1, 0]], dtype=np.int32), + }, + 'label': + np.array( + [ + [ + [1], # class 0 + [0], # background + [0], # background + [0], # background + ], + [ + [0], # background + [0], # background + [1], # class 0 + [0], # background + ], + ], + dtype=np.int32), # shape is (2, 4, 1). + } + config = ml_collections.ConfigDict() + model = MockActionSegmentationModel(config) + loss = model.loss_function(logits, batch) + self.assertGreater(loss, 0.0) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/unloc/activity_net_eval.py b/scenic/projects/unloc/activity_net_eval.py new file mode 100644 index 0000000000000000000000000000000000000000..4ab5c74c0d34070bbf8bac8bbcc8e0779e3336a5 --- /dev/null +++ b/scenic/projects/unloc/activity_net_eval.py @@ -0,0 +1,360 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Functions for evaluating action detection with ActivityNet metrics. + +For proposal metrics, see: +DAPs: Deep Action Proposals for Action Understanding. V. Escorcia , F. C. +Heilbron, J. C. Niebles, B. Ghanem. ECCV 2016. + +For detection metrics, see: +ActivityNet Challenge. http://activity-net.org/challenges/2017/. +""" + +import logging + +from activitynet.evaluation import eval_detection +import numpy as np +import pandas as pd + + +def compute_average_precision_detection_ng( + ground_truth: pd.DataFrame, + prediction: pd.DataFrame, + tiou_thresholds: np.ndarray = np.linspace(0.5, 0.95, 10) +) -> np.ndarray: + """Computes average precision (detection task). + + Notes: + The open source implementation is extremely slow, due to the way it iterates + through the prediction dataframe. A simple change of the dataframes to numpy + arrays will see orders of magnitude of speed-up. There are more ways to + improve, e.g., grouping and processing the ground truth and predictions by + videos, which will eliminate the double indexing in lock_gt. Vectorization, + though doable, is awkward given the greedy method quoted below: + + If multiple predictions occurs for the same + predicted segment, only the one with highest score is matches as + true positive. This code is greatly inspired by Pascal VOC devkit. + + I have kept as much of the original code, as long as it doesn't impact the + speed greatly. + + Args: + ground_truth: df Data frame containing the ground truth instances. Required + fields ['video-id', 't-start', 't-end'] + prediction: df Data frame containing the prediction instances. Required + fields ['video-id, 't-start', 't-end', 'score'] + tiou_thresholds: 1d array, Temporal intersection over union threshold. + + Returns: + ap: Average precision scores. + """ + npos = float(len(ground_truth)) + lock_gt = np.ones((len(tiou_thresholds), len(ground_truth))) * -1 + # Sort predictions by decreasing score order. + sort_idx = prediction['score'].values.argsort()[::-1] + prediction = prediction.loc[sort_idx].reset_index(drop=True) + + # Initialize true positive and false positive vectors. + tp = np.zeros((len(tiou_thresholds), len(prediction))) + fp = np.zeros((len(tiou_thresholds), len(prediction))) + + # Adaptation to query faster. + # Notes: + # Transform the dataframes to numpy arrays here. The indices are used + # to match the ground truth segments only once, in a "winners take all" + # manner. We have to do the two-step dance (gt_dict to gt_indices + # and gt_segments) because we need to keep "index" consistent + # between the two. + ground_truth_gbvn = ground_truth.groupby('video-id') + gt_dict = { + k: g.reset_index()[['index', 't-start', 't-end']].to_numpy() + for k, g in ground_truth_gbvn + } + gt_indices = {} + gt_segments = {} + for k, g in gt_dict.items(): + gt_indices[k] = gt_dict[k][:, 0].astype(int) + gt_segments[k] = gt_dict[k][:, 1:] + + pred_ids = prediction['video-id'] + pred_segments = prediction[['t-start', 't-end']].to_numpy() + npred = pred_ids.shape[0] + + # Assigning true positive to truly grount truth instances. + for idx in range(npred): + + try: + # Check if there is at least one ground truth in the video associated. + pred_id = pred_ids[idx] + gt_index = gt_indices[pred_id] + gt_segment = gt_segments[pred_id] + except Exception: # pylint: disable = broad-except + fp[:, idx] = 1 + continue + + tiou_arr = eval_detection.segment_iou(pred_segments[idx], gt_segment) + # We would like to retrieve the predictions with highest tiou score. + tiou_sorted_idx = tiou_arr.argsort()[::-1] + for tidx, tiou_thr in enumerate(tiou_thresholds): + for jdx in tiou_sorted_idx: + if tiou_arr[jdx] < tiou_thr: + fp[tidx, idx] = 1 + break + if lock_gt[tidx, gt_index[jdx]] >= 0: + continue + # Assign as true positive after the filters above. + tp[tidx, idx] = 1 + lock_gt[tidx, gt_index[jdx]] = idx + break + + if fp[tidx, idx] == 0 and tp[tidx, idx] == 0: + fp[tidx, idx] = 1 + + ap = np.zeros(len(tiou_thresholds)) + + for tidx in range(len(tiou_thresholds)): + # Computing prec-rec + this_tp = np.cumsum(tp[tidx, :]).astype(np.float32) + this_fp = np.cumsum(fp[tidx, :]).astype(np.float32) + rec = this_tp / npos + prec = this_tp / (this_tp + this_fp) + ap[tidx] = eval_detection.interpolated_prec_rec(prec, rec) + + return ap + + +def evaluate_detection_results_anet(result_lists, + num_classes, + label_id_offset=0, + excluded_classes=(), + class_weights=None, + ): + """Computes ActivityNet detection metrics given groundtruth and detections. + + This function computes official ActivityNet detection metrics using the third + party evaluation toolkit. This function by default takes detections and + groundtruth segments encoded in result_lists and writes evaluation results to + tf summaries which can be viewed on tensorboard. + + Args: + result_lists: A dictionary holding lists of groundtruth and detection data + corresponding to each sequence being evaluated. + The following keys are required: + 'video_id': A list of string ids + 'detection_segments': A list of float32 numpy arrays of shape [N, 2]. + 'detection_scores': A list of float32 numpy arrays of shape [N]. + 'detection_classes': A list of int32 numpy arrays of shape [N]. + 'groundtruth_segments': A list of float32 numpy arrays of shape [M, 2]. + 'groundtruth_classes': A list of int32 numpy arrays of shape [M]. + Note that it is okay to have additional fields in result_lists --- they + are simply ignored. + num_classes: (int scalar) Number of classes excluding background. + label_id_offset: An integer offset for the label space. + excluded_classes: A list of (int) class indices to be excluded, after adding + the label_id_offset. + class_weights: A 1-d numpy array containing weights for the classes. + + Returns: + A dictionary of metric names to scalar values. + 'eval_detection/mAP@0.5:0.05:0.95IOU': Mean Average Precision averaged + over IOU interval [0.5, 0.95]. + 'eval_detection/mAP@0.5:0.05:0.95IOU_present_classes': Mean Average + Precision averaged over IOU interval [0.5, 0.95] only including + classes that exist in the groundtruth. + 'eval_detection/mAP@IOU': Mean Average Precision versus IOU. + 'eval_detection_per_class/avgAP@': Per-class Average Precision averaged + over IOU interval [0.05, 0.95]. + + Raises: + ValueError: If the set of keys in result_lists is not a superset of the + expected list of keys. Unexpected keys are ignored. + ValueError: If the lists in result_lists have inconsistent sizes. + """ + # Check for expected keys in result_lists. + expected_keys = [ + 'detection_segments', 'detection_scores', 'detection_classes', 'video_id', + 'groundtruth_segments', 'groundtruth_classes' + ] + if not set(expected_keys).issubset(set(result_lists.keys())): + raise ValueError('result_lists does not have expected key set: ' + str( + set(expected_keys).difference(set(result_lists.keys())))) + num_results = len(result_lists[expected_keys[0]]) + for key in expected_keys: + if len(result_lists[key]) != num_results: + raise ValueError('Inconsistent list sizes in result_lists') + + # TODO(ywchao): input categories instead of num_classes. + + logging.info('Computing ActivityNet detection metrics on results.') + + ground_truth = _convert_ground_truth(result_lists, num_results) + detection = _convert_detection(result_lists, num_results) + + # Compute AP. + tiou_thresholds = np.linspace(0.05, 0.95, 19) + ap = np.zeros((len(tiou_thresholds), num_classes)) + for cidx in range(num_classes): + gt_idx = ground_truth['label'] == cidx + label_id_offset + pred_idx = detection['label'] == cidx + label_id_offset + ap[:, cidx] = compute_average_precision_detection_ng( + ground_truth.loc[gt_idx].reset_index(drop=True), + detection.loc[pred_idx].reset_index(drop=True), + tiou_thresholds=tiou_thresholds) + # Exclude unwanted classes. + keep = [i for i in range(num_classes) if i not in excluded_classes] + + # Gather APs for classes present in the groundtruth. + classes_with_gt_ap = [] + for cidx in range(num_classes): + gt_exists = np.sum(ground_truth['label'] == cidx) + if gt_exists and cidx not in excluded_classes: + classes_with_gt_ap.append(ap[:, cidx]) + classes_with_gt_ap = np.column_stack(classes_with_gt_ap) + + # Exclude NaN AP. + mean_ap = np.nanmean(ap[:, keep], axis=1) + + metrics = { + 'eval_detection/mAP@0.5:0.05:0.95IOU': + mean_ap[9:].mean(), + 'eval_detection/mAP@0.3:0.1:0.7IOU': mean_ap[5:14:2].mean(), + 'eval_detection_present_classes/mAP@0.5:0.05:0.95IOU': + np.nanmean(classes_with_gt_ap, axis=1)[9:].mean() + } + if class_weights is not None: + weighted_mean_ap = np.nansum(ap[:, keep] * class_weights[keep], axis=1) + metrics['eval_detection/wmAP@0.5:0.05:0.95IOU'] = weighted_mean_ap[9:].mean( + ) + for idx in range(ap.shape[0]): + display_name = 'eval_detection/wmAP@{:0.2f}IOU'.format( + tiou_thresholds[idx]) + metrics[display_name] = np.nansum(ap[idx, keep] * class_weights[keep]) + + for idx in range(ap.shape[0]): + display_name = 'eval_detection/mAP@{:0.2f}IOU'.format(tiou_thresholds[idx]) + metrics[display_name] = np.nanmean(ap[idx, keep]) + present_classes_display_name = ( + 'eval_detection_present_classes/mAP@{:0.2f}IOU'.format( + tiou_thresholds[idx])) + metrics[present_classes_display_name] = np.nanmean(classes_with_gt_ap[idx]) + + for idx in range(ap.shape[1]): + display_name = 'eval_detection_per_class/avgAP@{:02d}'.format(idx) + metrics[display_name] = np.nanmean(ap[:, idx]) + + return metrics + + +def compute_ious(segments1, segments2): + """Computes IOUs between two sets of segments. + + Args: + segments1: First set of segments of size [N, 2] + segments2: Second set of segments of size [M, 2] + + Returns: + ious: All pairs IOU array of shape [N, M] + """ + all_pairs_min_end = np.minimum(segments1[:, 1:], np.transpose(segments2[:, + 1:])) + all_pairs_max_start = np.maximum(segments1[:, 0:1], + np.transpose(segments2[:, 0:1])) + intersection = np.maximum(0.0, all_pairs_min_end - all_pairs_max_start) + union = (segments1[:, 1:] - segments1[:, 0:1] + ) + np.transpose(segments2[:, 1:] - segments2[:, 0:1]) - intersection + return intersection / (union + 1e-8) + + +def _convert_ground_truth(result_lists, num_results): + """Converts the format of groundtruth segments for evaluation. + + Args: + result_lists: A dictionary holding lists of groundtruth. + num_results: Length of the lists. + + Returns: + A pd.DataFrame containing the groundtruth instances. + """ + videos, t_starts, t_ends, labels = [], [], [], [] + for vidx in range(num_results): + for sidx in range(result_lists['groundtruth_segments'][vidx].shape[0]): + videos.append(result_lists['video_id'][vidx]) + t_starts.append(result_lists['groundtruth_segments'][vidx][sidx][0]) + t_ends.append(result_lists['groundtruth_segments'][vidx][sidx][1]) + labels.append(result_lists['groundtruth_classes'][vidx][sidx]) + + return pd.DataFrame({ + 'video-id': videos, + 't-start': t_starts, + 't-end': t_ends, + 'label': labels + }) + + +def _convert_proposal(result_lists, num_results): + """Converts the format of proposals for evaluation. + + Args: + result_lists: A dictionary holding lists of proposals. + num_results: Length of the lists. + + Returns: + A pd.DataFrame containing the proposal instances. + """ + videos, t_starts, t_ends = [], [], [] + score_lst = [] + for vidx in range(num_results): + for sidx in range(result_lists['proposal_segments'][vidx].shape[0]): + videos.append(result_lists['video_id'][vidx]) + t_starts.append(result_lists['proposal_segments'][vidx][sidx][0]) + t_ends.append(result_lists['proposal_segments'][vidx][sidx][1]) + score_lst.append(result_lists['proposal_scores'][vidx][sidx]) + + return pd.DataFrame({ + 'video-id': videos, + 't-start': t_starts, + 't-end': t_ends, + 'score': score_lst + }) + + +def _convert_detection(result_lists, num_results): + """Converts the format of detections for evaluation. + + Args: + result_lists: A dictionary holding lists of detections. + num_results: Length of the lists. + + Returns: + A pd.DataFrame containing the detection instances. + """ + videos, t_starts, t_ends = [], [], [] + labels, score_lst = [], [] + for vidx in range(num_results): + for sidx in range(result_lists['detection_segments'][vidx].shape[0]): + videos.append(result_lists['video_id'][vidx]) + t_starts.append(result_lists['detection_segments'][vidx][sidx][0]) + t_ends.append(result_lists['detection_segments'][vidx][sidx][1]) + labels.append(result_lists['detection_classes'][vidx][sidx]) + score_lst.append(result_lists['detection_scores'][vidx][sidx]) + + return pd.DataFrame({ + 'video-id': videos, + 't-start': t_starts, + 't-end': t_ends, + 'label': labels, + 'score': score_lst + }) diff --git a/scenic/projects/unloc/config_utils.py b/scenic/projects/unloc/config_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..eaeb4aa7ce4662e174e551a2ceea3c5723b33b0c --- /dev/null +++ b/scenic/projects/unloc/config_utils.py @@ -0,0 +1,176 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Contains config utils.""" + +import ml_collections + +CLIP_IMAGE_ENCODER_CONFIGS = { + 'B/16': + dict( + features=768, + num_layers=12, + num_heads=12, + stochastic_depth=0.0, + classifier='token', + ), + 'B/32': + dict( + features=768, + num_layers=12, + num_heads=12, + stochastic_depth=0.0, + classifier='token', + ), + 'L/14': + dict( + features=1024, + num_layers=24, + num_heads=16, + stochastic_depth=0.0, + classifier='token', + ), +} + +CLIP_TEXT_ENCODER_CONFIGS = { + 'B/16': + dict( + vocab_size=49408, + num_layers=12, + hidden_size=512, + num_heads=8, + classifier='eos', + ), + 'B/32': + dict( + vocab_size=49408, + num_layers=12, + hidden_size=512, + num_heads=8, + classifier='eos', + ), + 'L/14': + dict( + vocab_size=49408, + num_layers=12, + hidden_size=768, + num_heads=12, + classifier='eos', + ), +} + +T5_ENCODER_CONFIGS = { + 't5_1_1_small': dict( + vocab_size=32128, + emb_dim=512, + num_heads=6, + num_encoder_layers=8, + num_decoder_layers=8, + head_dim=64, + mlp_dim=1024, + dropout_rate=0.0, + classifier='gap', + ), + 't5_1_1_base': dict( + vocab_size=32128, + emb_dim=768, + num_heads=12, + num_encoder_layers=12, + num_decoder_layers=12, + head_dim=64, + mlp_dim=2048, + dropout_rate=0.0, + classifier='gap', + ), + 't5_1_1_large': dict( + vocab_size=32128, + emb_dim=1024, + num_heads=16, + num_encoder_layers=24, + num_decoder_layers=24, + head_dim=64, + mlp_dim=2816, + dropout_rate=0.0, + classifier='gap', + ), + 't5_1_1_xl': dict( + vocab_size=32128, + emb_dim=2048, + num_heads=32, + num_encoder_layers=24, + num_decoder_layers=24, + head_dim=64, + mlp_dim=5120, + dropout_rate=0.0, + classifier='gap', + ), + 't5_1_1_xxl': dict( + vocab_size=32128, + emb_dim=4096, + num_heads=64, + num_encoder_layers=24, + num_decoder_layers=24, + head_dim=64, + mlp_dim=10240, + dropout_rate=0.0, + classifier='gap', + ), +} + + +def parse_t5_encoder_config(variant: str) -> ml_collections.ConfigDict: + """Parses T5 parameters.""" + return ml_collections.ConfigDict(T5_ENCODER_CONFIGS[variant]) + + +def parse_image_encoder_config(variant: str) -> ml_collections.ConfigDict: + """Parse model configs from an encoded text. + + The model is encoded in the format of 'vit_version/patch_size'. For example, + 'B/16x2' is the Base model trained on tubelets of size 16x16x2. + + Args: + variant: a str encoding the model structure. + + Returns: + model configs. + """ + version, tublet_size = variant.split('/') + patch_size, num_frames = tublet_size.split('x') + version = '/'.join([version, patch_size]) + num_frames = int(num_frames) + patch_size = int(patch_size) + config = CLIP_IMAGE_ENCODER_CONFIGS[version] + config['patches'] = {'size': (patch_size, patch_size, num_frames)} + return ml_collections.ConfigDict(config) + + +def parse_text_encoder_config(variant: str) -> ml_collections.ConfigDict: + """Parse model configs from an encoded text. + + The model is encoded in the format of 'vit_version/patch_size'. For example, + 'B/16x2' is the Base model trained on tubelets of size 16x16x2. The temporal + dimension of the tubelet is ignored for text encoders. + + Args: + variant: a str encoding the model structure. + + Returns: + model configs. + """ + version, tublet_size = variant.split('/') + patch_size, _ = tublet_size.split('x') + version = '/'.join([version, patch_size]) + config = CLIP_TEXT_ENCODER_CONFIGS[version] + return ml_collections.ConfigDict(config) diff --git a/scenic/projects/unloc/configs/activitynet/activitynet_tal_linspace_unloc_base_fpn.py b/scenic/projects/unloc/configs/activitynet/activitynet_tal_linspace_unloc_base_fpn.py new file mode 100644 index 0000000000000000000000000000000000000000..8b7251ebbff8f462392f180d6b455972de90f6cf --- /dev/null +++ b/scenic/projects/unloc/configs/activitynet/activitynet_tal_linspace_unloc_base_fpn.py @@ -0,0 +1,245 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Configs for finetuning the UnLoc model on ActivityNet TAL. + +""" + +import ml_collections +from scenic.projects.unloc import config_utils as unloc_config_utils + +# Replace with the actual dataset size. +ACTIVITYNET_TAL_TRAIN_SIZE = 9941 +MODEL_VARIANT = 'B/16x1' +FEATURE_PYRAMID_LEVELS = [2, 3, 4, 5] +FEATURE_PYRAMID_DOWNSAMPLE_STRIDE = 2 +NUM_FEATURES_LEVEL0 = 128 + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = f'anet_unloc_clip_{MODEL_VARIANT}' + + # Dataset. + config.dataset_name = 'temporal_localization_dataset' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'temporal_localization' + config.dataset_configs.modality_configs = { + 'rgb': + ml_collections.ConfigDict({ + 'type': 'rgb', + 'min_resize': 256, + 'crop_size': 224, + 'zero_centering': False, + 'normalization_mean': [0.48145466, 0.4578275, 0.40821073], + 'normalization_std': [0.26862954, 0.26130258, 0.27577711], + }), + } + config.dataset_configs.modality_configs.rgb.augmentation_params = ( + ml_collections.ConfigDict()) + config.dataset_configs.modality_configs.rgb.augmentation_params.do_jitter_scale = True + config.dataset_configs.modality_configs.rgb.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.modality_configs.rgb.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.modality_configs.rgb.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.modality_configs.rgb.augmentation_params.do_color_augment = True + config.dataset_configs.modality_configs.rgb.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.modality_configs.rgb.augmentation_params.prob_color_drop = 0.1 + config.dataset_configs.modality_configs.rgb.augmentation_params.do_rand_augment = True + config.dataset_configs.modality_configs.rgb.augmentation_params.rand_augment_num_layers = 3 + config.dataset_configs.modality_configs.rgb.augmentation_params.rand_augment_magnitude = 10 + + config.dataset_configs.num_frames = NUM_FEATURES_LEVEL0 + config.dataset_configs.stride = 1 + config.dataset_configs.sampling_strategy = 'linspace' + config.dataset_configs.radius = 3.0 + # `duration`, `sampled_span`, or `none`. + config.dataset_configs.displacement_normalizer = 'none' + config.dataset_configs.max_num_segments = 24 + config.dataset_configs.feature_pyramid_config = ml_collections.ConfigDict() + config.dataset_configs.feature_pyramid_config.num_features_level0 = NUM_FEATURES_LEVEL0 # pylint:disable=line-too-long + config.dataset_configs.feature_pyramid_config.feature_pyramid_levels = FEATURE_PYRAMID_LEVELS # pylint:disable=line-too-long + config.dataset_configs.feature_pyramid_config.feature_pyramid_downsample_stride = FEATURE_PYRAMID_DOWNSAMPLE_STRIDE # pylint:disable=line-too-long + config.dataset_configs.feature_pyramid_config.normalize_displacements_by_downsample_stride = True # pylint:disable=line-too-long + config.dataset_configs.feature_pyramid_config.regression_ranges = [ + (0, 4), + (4, 8), + (8, 16), + (16, float('inf')), + ] + + config.dataset_configs.base_dir = '/path/to/base_dir' + config.dataset_configs.tables = { + 'train': '', + 'validation': '', + 'test': '', + } + config.dataset_configs.num_classes = 200 + config.dataset_configs.class_name_csv = '/path/to/labels.csv' + config.dataset_configs.prompt_csv = '/path/to/prompts.csv' + config.dataset_configs.num_prompts = 1 + config.dataset_configs.tokenizer_config = ml_collections.ConfigDict({ + 'max_num_tokens': 16, + 'vocabulary_path': None, + 'tokenizer_type': 'clip', + }) + config.dataset_configs.include_video_id = True + + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.test_batch_size = 8 + config.dataset_configs.secs_per_timestep = 0.1 # 10fps + config.dataset_configs.log_test_epochs = 10 + config.dataset_configs.total_eval_epochs = 1.1 + + # Model. + config.model_name = 'unloc_temporal_localization' + config.model = ml_collections.ConfigDict() + config.model.classifier = 'token' + config.model.video_tower_config = ml_collections.ConfigDict({ + 'encoder_name': 'clip_video_encoder', + 'encoder_config': ml_collections.ConfigDict({ + 'num_classes': -1, + 'image_encoder_config': unloc_config_utils.parse_image_encoder_config( + MODEL_VARIANT + ), + 'temporal_encoding_config': ml_collections.ConfigDict({ + 'method': '3d_conv', + 'kernel_init_method': 'central_frame_initializer', + 'use_bias': False, + }), + 'temporal_encoder_config': None, + 'final_endpoint': 'temporal_tokens', + 'classifier': 'token', + }), + 'projection_size': 512, + 'projection_use_bias': False, + 'freeze': False, + }) + config.model.video_tower_config.encoder_config.image_encoder_config.remat_block = ( + True + ) + config.model.text_tower_config = ml_collections.ConfigDict({ + 'encoder_name': 'clip_text_encoder', + 'encoder_config': unloc_config_utils.parse_text_encoder_config( + MODEL_VARIANT + ), + 'projection_size': 512, + 'projection_use_bias': False, + 'freeze': True, + }) + config.model.video_text_fusion_config = ml_collections.ConfigDict({ + 'type': 'video_text_self_attention', + 'config': ml_collections.ConfigDict({ + 'self_attention_encoder_config': ml_collections.ConfigDict({ + 'num_heads': 8, + 'mlp_dim': 2048, + 'num_layers': 6, + 'dropout_rate': 0.0, + 'attention_dropout_rate': 0.0, + 'stochastic_depth': 0.0, + 'positional_embedding': 'sinusoid', + 'downsample_strategy': 'max_pool', + 'feature_pyramid_config': ml_collections.ConfigDict({ + 'num_features_level0': NUM_FEATURES_LEVEL0, + 'feature_pyramid_levels': FEATURE_PYRAMID_LEVELS, + 'feature_pyramid_downsample_stride': ( + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE + ), + }), + }), + 'self_attention_encoder_name': 'simple_pyramid', + 'text_tower_classifier': 'eos', + 'use_all_text_tokens': False, + }), + }) + config.model.head_config = ml_collections.ConfigDict({ + 'temporal_localization': ml_collections.ConfigDict({ + 'type': 'query_dependent_localization_head', + 'config': ml_collections.ConfigDict({ + 'num_conv_layers': 4, + 'kernel_size': 3, + 'init_classification_head_bias': -5.0, + 'init_regression_head_bias': 2.0, + 'distance_normalizer': 'relu', + 'weight_sharing': True, + 'feature_pyramid_config': ml_collections.ConfigDict({ + 'num_features_level0': NUM_FEATURES_LEVEL0, + 'feature_pyramid_levels': FEATURE_PYRAMID_LEVELS, + 'feature_pyramid_downsample_stride': ( + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE + ), + }), + }), + }), + }) + + # Training. + config.trainer_name = 'single_task_trainer' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.optimizer = 'sgd' + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.skip_scale_and_bias_regularization = True + config.optimizer_configs.weight_decay = 0.0 + config.l2_decay_factor = 0 + config.max_grad_norm = 1.0 + config.label_smoothing = 0.0 + config.num_training_epochs = 20 + config.batch_size = 64 + config.rng_seed = 0 + config.count_flops = False + + config.init_from = ml_collections.ConfigDict() + config.init_from.checkpoint_path = '/path/to/checkpoint' + config.init_from.load_from_unloc_checkpoint = True + config.init_from.load_image_tower = False + config.init_from.load_text_tower = False + + # Learning rate. + steps_per_epoch = ACTIVITYNET_TAL_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = [18 * steps_per_epoch] + config.lr_configs.decay_factors = [0.1] + config.lr_configs.warmup_steps = 2.5 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.01 + config.layer_prefix_to_base_lrs = { + 'temporal_localization_head': 0.1, + 'video_text_fusion': 0.1, + } + + config.score_threshold = 0.001 + config.soft_nms_sigma = 0.3 + config.max_detections = 100 + # Setting it to True will improve results but slower. + config.multiclass_nms = False + + config.classification_loss_alpha = 10.0 + config.classification_loss_type = 'focal' + config.focal_loss_alpha = 0.25 + config.focal_loss_gamma = 2.0 + + config.box_loss_type = 'iou' + + # Logging. + config.checkpoint = True # do checkpointing + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + config.log_eval_steps = 400 + return config + + diff --git a/scenic/projects/unloc/configs/activitynet/activitynet_tal_linspace_unloc_large_fpn.py b/scenic/projects/unloc/configs/activitynet/activitynet_tal_linspace_unloc_large_fpn.py new file mode 100644 index 0000000000000000000000000000000000000000..533dfa109270668ef4d1665845eb2c05a1da09ac --- /dev/null +++ b/scenic/projects/unloc/configs/activitynet/activitynet_tal_linspace_unloc_large_fpn.py @@ -0,0 +1,238 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Configs for finetuning the UnLoc-L model on ActivityNet TAL. + +""" + +import ml_collections +from scenic.projects.unloc import config_utils as unloc_config_utils + +# Replace with the actual dataset size. +ACTIVITYNET_TAL_TRAIN_SIZE = 9941 +MODEL_VARIANT = 'L/14x1' +FEATURE_PYRAMID_LEVELS = [1, 2, 3, 4, 5] +FEATURE_PYRAMID_DOWNSAMPLE_STRIDE = 2 +NUM_FEATURES_LEVEL0 = 160 + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = f'anet_unloc_clip_{MODEL_VARIANT}' + + # Dataset. + config.dataset_name = 'temporal_localization_dataset' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'temporal_localization' + config.dataset_configs.modality_configs = { + 'rgb': + ml_collections.ConfigDict({ + 'type': 'rgb', + 'min_resize': 256, + 'crop_size': 224, + 'zero_centering': False, + 'normalization_mean': [0.48145466, 0.4578275, 0.40821073], + 'normalization_std': [0.26862954, 0.26130258, 0.27577711], + }), + } + config.dataset_configs.modality_configs.rgb.augmentation_params = ( + ml_collections.ConfigDict()) + config.dataset_configs.modality_configs.rgb.augmentation_params.do_jitter_scale = True + config.dataset_configs.modality_configs.rgb.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.modality_configs.rgb.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.modality_configs.rgb.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.modality_configs.rgb.augmentation_params.do_color_augment = True + config.dataset_configs.modality_configs.rgb.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.modality_configs.rgb.augmentation_params.prob_color_drop = 0.1 + config.dataset_configs.modality_configs.rgb.augmentation_params.do_rand_augment = True + config.dataset_configs.modality_configs.rgb.augmentation_params.rand_augment_num_layers = 3 + config.dataset_configs.modality_configs.rgb.augmentation_params.rand_augment_magnitude = 10 + + config.dataset_configs.num_frames = NUM_FEATURES_LEVEL0 + config.dataset_configs.stride = 1 + config.dataset_configs.sampling_strategy = 'linspace' + config.dataset_configs.radius = 3.0 + # `duration`, `sampled_span`, or `none`. + config.dataset_configs.displacement_normalizer = 'none' + config.dataset_configs.max_num_segments = 24 + config.dataset_configs.feature_pyramid_config = ml_collections.ConfigDict() + config.dataset_configs.feature_pyramid_config.num_features_level0 = ( + NUM_FEATURES_LEVEL0 + ) + config.dataset_configs.feature_pyramid_config.feature_pyramid_levels = ( + FEATURE_PYRAMID_LEVELS + ) + config.dataset_configs.feature_pyramid_config.feature_pyramid_downsample_stride = ( + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE + ) + config.dataset_configs.feature_pyramid_config.normalize_displacements_by_downsample_stride = ( + True + ) + config.dataset_configs.feature_pyramid_config.regression_ranges = [ + (0, 4), + (4, 8), + (8, 16), + (16, 32), + (32, float('inf')), + ] + + config.dataset_configs.base_dir = '/path/to/base_dir' + config.dataset_configs.tables = { + 'train': '', + 'validation': '', + 'test': '', + } + config.dataset_configs.num_classes = 200 + config.dataset_configs.num_prompts = 1 + config.dataset_configs.class_name_embedding_npy = '/path/to/embeddings' + config.dataset_configs.include_video_id = True + + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.test_batch_size = 4 + config.dataset_configs.secs_per_timestep = 0.1 # 10fps + config.dataset_configs.log_test_epochs = 10 + config.dataset_configs.total_eval_epochs = 1.1 + + # Model. + config.model_name = 'unloc_temporal_localization' + config.model = ml_collections.ConfigDict() + config.model.classifier = 'token' + config.model.video_tower_config = ml_collections.ConfigDict({ + 'encoder_name': 'clip_video_encoder', + 'encoder_config': ml_collections.ConfigDict({ + 'num_classes': -1, + 'image_encoder_config': unloc_config_utils.parse_image_encoder_config( + MODEL_VARIANT + ), + 'temporal_encoding_config': ml_collections.ConfigDict({ + 'method': '3d_conv', + 'kernel_init_method': 'central_frame_initializer', + 'use_bias': False, + }), + 'temporal_encoder_config': None, + 'final_endpoint': 'temporal_tokens', + 'classifier': 'token', + }), + 'projection_size': 768, + 'projection_use_bias': False, + 'freeze': False, + }) + config.model.video_tower_config.encoder_config.image_encoder_config.remat_block = ( + True + ) + config.model.video_tower_config.encoder_config.image_encoder_config.classifier = 'gap' # pylint:disable=line-too-long + config.model.text_tower_config = ml_collections.ConfigDict({ + 'encoder_name': 'pass_through_encoder', + 'encoder_config': {}, + 'input_type': 'text_emb', + }) + config.model.video_text_fusion_config = ml_collections.ConfigDict({ + 'type': 'video_text_emb_self_attention', + 'config': ml_collections.ConfigDict({ + 'self_attention_encoder_config': ml_collections.ConfigDict({ + 'num_heads': 12, + 'mlp_dim': 3072, + 'num_layers': 6, + 'dropout_rate': 0.0, + 'attention_dropout_rate': 0.0, + 'stochastic_depth': 0.0, + 'positional_embedding': 'sinusoid', + 'downsample_strategy': 'max_pool', + 'feature_pyramid_config': ml_collections.ConfigDict({ + 'num_features_level0': NUM_FEATURES_LEVEL0, + 'feature_pyramid_levels': FEATURE_PYRAMID_LEVELS, + 'feature_pyramid_downsample_stride': ( + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE + ), + }), + }), + 'self_attention_encoder_name': 'simple_pyramid', + }), + }) + config.model.head_config = ml_collections.ConfigDict({ + 'temporal_localization': ml_collections.ConfigDict({ + 'type': 'query_dependent_localization_head', + 'config': ml_collections.ConfigDict({ + 'num_conv_layers': 4, + 'kernel_size': 3, + 'init_classification_head_bias': -5.0, + 'init_regression_head_bias': 2.0, + # 'relu', 'sigmoid', or 'relu_clip' + 'distance_normalizer': 'relu', + 'weight_sharing': True, + 'feature_pyramid_config': ml_collections.ConfigDict({ + 'num_features_level0': NUM_FEATURES_LEVEL0, + 'feature_pyramid_levels': FEATURE_PYRAMID_LEVELS, + 'feature_pyramid_downsample_stride': ( + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE + ), + }), + }), + }), + }) + + # Training. + config.trainer_name = 'single_task_trainer' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.optimizer = 'sgd' + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.skip_scale_and_bias_regularization = True + config.optimizer_configs.weight_decay = 0.0 + config.l2_decay_factor = 0 + config.max_grad_norm = 1.0 + config.label_smoothing = 0.0 + config.num_training_epochs = 30 + config.batch_size = 64 + config.rng_seed = 0 + config.count_flops = False + + config.init_from = ml_collections.ConfigDict() + config.init_from.checkpoint_path = '/path/to/checkpoint' + config.init_from.load_from_unloc_checkpoint = True + config.init_from.load_image_tower = False + config.init_from.load_text_tower = False + + # Learning rate. + steps_per_epoch = ACTIVITYNET_TAL_TRAIN_SIZE // config.batch_size + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = [35 * steps_per_epoch] + config.lr_configs.decay_factors = [0.1] + config.lr_configs.warmup_steps = 5.0 * steps_per_epoch + config.lr_configs.base_learning_rate = 0.01 + + config.score_threshold = 0.001 + config.soft_nms_sigma = 0.3 + config.max_detections = 100 + # Setting it to True gives better results but slower. + config.multiclass_nms = False + + config.classification_loss_alpha = 10.0 + config.classification_loss_type = 'focal' + config.focal_loss_alpha = 0.25 + config.focal_loss_gamma = 2.0 + + config.box_loss_type = 'iou' + + # Logging. + config.checkpoint = True # do checkpointing + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + config.log_eval_steps = 400 + return config + + diff --git a/scenic/projects/unloc/configs/activitynet_captions/activitynet_cap_linspace_unloc_base_fpn.py b/scenic/projects/unloc/configs/activitynet_captions/activitynet_cap_linspace_unloc_base_fpn.py new file mode 100644 index 0000000000000000000000000000000000000000..96eaca394593baa09c360e587771791a69d9cc36 --- /dev/null +++ b/scenic/projects/unloc/configs/activitynet_captions/activitynet_cap_linspace_unloc_base_fpn.py @@ -0,0 +1,233 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Configs for finetuning UnLoc-B model on ActivityNet Captions. + +""" + +import ml_collections +from scenic.projects.unloc import config_utils as unloc_config_utils + +# Replace with the actual dataset size. +ACTIVITYNET_TAL_TRAIN_SIZE = 9941 +MODEL_VARIANT = 'B/16x1' +FEATURE_PYRAMID_LEVELS = [2, 3, 4, 5] +FEATURE_PYRAMID_DOWNSAMPLE_STRIDE = 2 +NUM_FEATURES_LEVEL0 = 128 + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = f'anet_unloc_clip_{MODEL_VARIANT}' + + # Dataset. + config.dataset_name = 'moment_retrieval_dataset' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'moment_retrieval' + config.dataset_configs.name = 'activitynet_cap' + config.dataset_configs.modality_configs = { + 'rgb': + ml_collections.ConfigDict({ + 'type': 'rgb', + 'min_resize': 256, + 'crop_size': 224, + 'zero_centering': False, + 'normalization_mean': [0.48145466, 0.4578275, 0.40821073], + 'normalization_std': [0.26862954, 0.26130258, 0.27577711], + }), + 'caption': + ml_collections.ConfigDict({ + 'type': 'text', + 'max_num_tokens': 32, + 'tokenizer_type': 'clip', + 'input_feature_name': 'segment/label/string', + }), + } + config.dataset_configs.train_max_num_captions = 1 + config.dataset_configs.eval_max_num_captions = 27 + + config.dataset_configs.num_frames = NUM_FEATURES_LEVEL0 + config.dataset_configs.stride = 1 + config.dataset_configs.sampling_strategy = 'linspace' + config.dataset_configs.radius = 3.0 + # `duration`, `sampled_span`, or `none`. + config.dataset_configs.displacement_normalizer = 'none' + config.dataset_configs.feature_pyramid_config = ml_collections.ConfigDict() + config.dataset_configs.feature_pyramid_config.num_features_level0 = NUM_FEATURES_LEVEL0 # pylint:disable=line-too-long + config.dataset_configs.feature_pyramid_config.feature_pyramid_levels = FEATURE_PYRAMID_LEVELS # pylint:disable=line-too-long + config.dataset_configs.feature_pyramid_config.feature_pyramid_downsample_stride = FEATURE_PYRAMID_DOWNSAMPLE_STRIDE # pylint:disable=line-too-long + config.dataset_configs.feature_pyramid_config.normalize_displacements_by_downsample_stride = True # pylint:disable=line-too-long + config.dataset_configs.feature_pyramid_config.regression_ranges = [ + (0, 4), + (4, 8), + (8, 16), + (16, float('inf')), + ] + + config.dataset_configs.base_dir = '/path/to/base_dir' + config.dataset_configs.tables = { + 'train': '', + 'validation': '', + 'test': '', + } + config.dataset_configs.num_classes = 1 + config.dataset_configs.include_video_id = True + + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.test_batch_size = 4 + config.dataset_configs.secs_per_timestep = 0.1 # 10fps + config.dataset_configs.log_test_epochs = 5 + config.dataset_configs.total_eval_epochs = 1.1 + + # Model. + config.model_name = 'unloc_moment_retrieval' + config.model = ml_collections.ConfigDict() + config.model.classifier = 'token' + config.model.video_tower_config = ml_collections.ConfigDict({ + 'encoder_name': 'clip_video_encoder', + 'encoder_config': ml_collections.ConfigDict({ + 'num_classes': -1, + 'image_encoder_config': unloc_config_utils.parse_image_encoder_config( + MODEL_VARIANT + ), + 'temporal_encoding_config': ml_collections.ConfigDict({ + 'method': '3d_conv', + 'kernel_init_method': 'central_frame_initializer', + 'use_bias': False, + }), + 'temporal_encoder_config': None, + 'final_endpoint': 'temporal_tokens', + 'classifier': 'token', + }), + 'projection_size': 512, + 'projection_use_bias': False, + 'freeze': True, + }) + # config.model.video_tower_config.encoder_config.image_encoder_config.classifier = 'gap' # pylint:disable=line-too-long + config.model.text_tower_config = ml_collections.ConfigDict({ + 'encoder_name': 'clip_text_encoder', + 'encoder_config': unloc_config_utils.parse_text_encoder_config( + MODEL_VARIANT + ), + 'projection_size': 512, + 'projection_use_bias': False, + 'freeze': False, + }) + config.model.video_text_fusion_config = ml_collections.ConfigDict({ + 'type': 'video_text_self_attention', + 'config': ml_collections.ConfigDict({ + 'self_attention_encoder_config': ml_collections.ConfigDict({ + 'num_heads': 8, + 'mlp_dim': 2048, + 'num_layers': 6, + 'dropout_rate': 0.0, + 'attention_dropout_rate': 0.0, + 'stochastic_depth': 0.0, + 'positional_embedding': 'sinusoid', + 'downsample_strategy': 'max_pool', + 'feature_pyramid_config': ml_collections.ConfigDict({ + 'num_features_level0': NUM_FEATURES_LEVEL0, + 'feature_pyramid_levels': FEATURE_PYRAMID_LEVELS, + 'feature_pyramid_downsample_stride': ( + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE + ), + }), + }), + 'self_attention_encoder_name': 'simple_pyramid', + 'text_tower_classifier': 'eos', + 'use_all_text_tokens': False, + }), + }) + config.model.head_config = ml_collections.ConfigDict( + { + 'moment_retrieval': ml_collections.ConfigDict({ + 'type': 'query_dependent_localization_head', + 'config': ml_collections.ConfigDict({ + 'num_conv_layers': 3, + 'kernel_size': 3, + 'init_classification_head_bias': 0.0, + 'init_regression_head_bias': 2.0, + 'distance_normalizer': 'relu', + 'weight_sharing': False, + 'feature_pyramid_config': ml_collections.ConfigDict({ + 'num_features_level0': NUM_FEATURES_LEVEL0, + 'feature_pyramid_levels': FEATURE_PYRAMID_LEVELS, + 'feature_pyramid_downsample_stride': ( + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE + ), + }), + }), + }), + } + ) + + # Training. + config.trainer_name = 'single_task_trainer' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.optimizer = 'sgd' + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.skip_scale_and_bias_regularization = True + config.optimizer_configs.weight_decay = 0.0 + config.l2_decay_factor = 0 + config.max_grad_norm = 1.0 + config.label_smoothing = 0.0 + config.num_training_epochs = 20 + config.batch_size = 64 + config.rng_seed = 0 + config.count_flops = False + config.all_gather_loss = True + + config.init_from = ml_collections.ConfigDict() + config.init_from.checkpoint_path = '/path/to/checkpoint' + config.init_from.load_from_unloc_checkpoint = True + config.init_from.load_image_tower = False + config.init_from.load_text_tower = False + + # Learning rate. + steps_per_epoch = ACTIVITYNET_TAL_TRAIN_SIZE // config.batch_size + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.warmup_steps = 2.5 * steps_per_epoch + config.lr_configs.decay_events = [25 * steps_per_epoch] + config.lr_configs.decay_factors = [0.1] + config.lr_configs.base_learning_rate = 0.01 + config.layer_prefix_to_base_lrs = { + 'moment_retrieval_head': 0.1, + 'video_text_fusion': 0.1 + } + + config.score_threshold = 0.001 + config.iou_threshold = 0.5 + config.soft_nms_sigma = 0.3 + config.max_detections = 100 + config.multiclass_nms = False + + config.classification_loss_alpha = 10.0 + config.classification_loss_type = 'focal' + config.focal_loss_alpha = 0.25 + config.focal_loss_gamma = 2.0 + + config.box_loss_type = 'iou' + + # Logging. + config.checkpoint = True # do checkpointing + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + config.log_eval_steps = 400 + return config + + diff --git a/scenic/projects/unloc/configs/activitynet_captions/activitynet_cap_linspace_unloc_large_fpn.py b/scenic/projects/unloc/configs/activitynet_captions/activitynet_cap_linspace_unloc_large_fpn.py new file mode 100644 index 0000000000000000000000000000000000000000..8d1ddcc20e595daf44600b46115c59d46b6dfa3f --- /dev/null +++ b/scenic/projects/unloc/configs/activitynet_captions/activitynet_cap_linspace_unloc_large_fpn.py @@ -0,0 +1,258 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Configs for finetuning unLoc-L model on ActivityNet Captions. + +""" + +import ml_collections +from scenic.projects.unloc import config_utils as unloc_config_utils + +# Replace with the actual dataset size. +ACTIVITYNET_TAL_TRAIN_SIZE = 9941 +MODEL_VARIANT = 'L/14x1' +FEATURE_PYRAMID_LEVELS = [2, 3, 4, 5] +FEATURE_PYRAMID_DOWNSAMPLE_STRIDE = 2 +NUM_FEATURES_LEVEL0 = 128 + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = f'anet_unloc_clip_{MODEL_VARIANT}' + + # Dataset. + config.dataset_name = 'moment_retrieval_dataset' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'moment_retrieval' + config.dataset_configs.name = 'activitynet_cap' + config.dataset_configs.modality_configs = { + 'rgb': + ml_collections.ConfigDict({ + 'type': 'rgb', + 'min_resize': 256, + 'crop_size': 224, + 'zero_centering': False, + 'normalization_mean': [0.48145466, 0.4578275, 0.40821073], + 'normalization_std': [0.26862954, 0.26130258, 0.27577711], + }), + 'caption': + ml_collections.ConfigDict({ + 'type': 'text', + 'max_num_tokens': 16, + 'tokenizer_type': 'clip', + 'input_feature_name': 'segment/label/string', + }), + } + config.dataset_configs.train_max_num_captions = 1 + config.dataset_configs.eval_max_num_captions = 27 + + config.dataset_configs.num_frames = NUM_FEATURES_LEVEL0 + config.dataset_configs.stride = 1 + config.dataset_configs.sampling_strategy = 'linspace' + config.dataset_configs.radius = 3.0 + # `duration`, `sampled_span`, or `none`. + config.dataset_configs.displacement_normalizer = 'none' + config.dataset_configs.feature_pyramid_config = ml_collections.ConfigDict() + config.dataset_configs.feature_pyramid_config.num_features_level0 = NUM_FEATURES_LEVEL0 # pylint:disable=line-too-long + config.dataset_configs.feature_pyramid_config.feature_pyramid_levels = FEATURE_PYRAMID_LEVELS # pylint:disable=line-too-long + config.dataset_configs.feature_pyramid_config.feature_pyramid_downsample_stride = FEATURE_PYRAMID_DOWNSAMPLE_STRIDE # pylint:disable=line-too-long + config.dataset_configs.feature_pyramid_config.normalize_displacements_by_downsample_stride = True # pylint:disable=line-too-long + config.dataset_configs.feature_pyramid_config.regression_ranges = [ + (0, 4), + (4, 8), + (8, 16), + (16, float('inf')), + ] + + config.dataset_configs.base_dir = '/path/to/base_dir' + config.dataset_configs.tables = { + 'train': '', + 'validation': '', + 'test': '', + } + config.dataset_configs.num_classes = 1 + config.dataset_configs.include_video_id = True + + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.test_batch_size = 4 + config.dataset_configs.secs_per_timestep = 0.1 # 10fps + config.dataset_configs.log_test_epochs = 10 + config.dataset_configs.total_eval_epochs = 1.1 + + # Model. + config.model_name = 'unloc_moment_retrieval' + config.model = ml_collections.ConfigDict() + config.model.classifier = 'token' + config.model.video_tower_config = ml_collections.ConfigDict({ + 'encoder_name': 'clip_video_encoder', + 'encoder_config': ml_collections.ConfigDict({ + 'num_classes': -1, + 'image_encoder_config': unloc_config_utils.parse_image_encoder_config( + MODEL_VARIANT + ), + 'temporal_encoding_config': ml_collections.ConfigDict({ + 'method': '3d_conv', + 'kernel_init_method': 'central_frame_initializer', + 'use_bias': False, + }), + 'temporal_encoder_config': None, + 'final_endpoint': 'temporal_tokens', + 'classifier': 'token', + }), + 'projection_size': 768, + 'projection_use_bias': False, + 'freeze': False, + }) + config.model.video_tower_config.encoder_config.image_encoder_config.classifier = 'gap' # pylint:disable=line-too-long + config.model.text_tower_config = ml_collections.ConfigDict({ + 'encoder_name': 'clip_text_encoder', + 'encoder_config': unloc_config_utils.parse_text_encoder_config( + MODEL_VARIANT + ), + 'projection_size': 768, + 'projection_use_bias': False, + 'freeze': True, + }) + config.model.video_text_fusion_config = ml_collections.ConfigDict({ + 'type': + 'video_text_self_attention', + 'config': + ml_collections.ConfigDict({ + 'self_attention_encoder_config': + ml_collections.ConfigDict({ + 'num_heads': + 12, + 'mlp_dim': + 3072, + 'num_layers': + 6, + 'dropout_rate': + 0.0, + 'attention_dropout_rate': + 0.0, + 'stochastic_depth': + 0.0, + 'positional_embedding': + 'sinusoid', + 'downsample_strategy': + 'max_pool', + 'feature_pyramid_config': + ml_collections.ConfigDict({ + 'num_features_level0': + NUM_FEATURES_LEVEL0, + 'feature_pyramid_levels': + FEATURE_PYRAMID_LEVELS, + 'feature_pyramid_downsample_stride': + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE, + }), + }), + 'self_attention_encoder_name': + 'fpn', + 'text_tower_classifier': + 'eos', + 'use_all_text_tokens': + False + }), + }) + config.model.head_config = ml_collections.ConfigDict({ + 'moment_retrieval': + ml_collections.ConfigDict({ + 'type': + 'query_dependent_localization_head', + 'config': + ml_collections.ConfigDict({ + 'num_conv_layers': + 4, + 'kernel_size': + 3, + 'init_classification_head_bias': + 0.0, + 'init_regression_head_bias': + 2.0, + 'distance_normalizer': + 'relu', + 'weight_sharing': + True, + 'feature_pyramid_config': + ml_collections.ConfigDict({ + 'num_features_level0': + NUM_FEATURES_LEVEL0, + 'feature_pyramid_levels': + FEATURE_PYRAMID_LEVELS, + 'feature_pyramid_downsample_stride': + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE, + }), + }), + }), + }) + + # Training. + config.trainer_name = 'single_task_trainer' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.optimizer = 'sgd' + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.skip_scale_and_bias_regularization = True + config.optimizer_configs.weight_decay = 0.0 + config.l2_decay_factor = 0 + config.max_grad_norm = 1.0 + config.label_smoothing = 0.0 + config.num_training_epochs = 40 + config.batch_size = 64 + config.rng_seed = 0 + config.count_flops = False + config.all_gather_loss = True + + config.init_from = ml_collections.ConfigDict() + config.init_from.checkpoint_path = '/path/to/checkpoint' + config.init_from.load_from_unloc_checkpoint = True + config.init_from.load_image_tower = False + config.init_from.load_text_tower = False + + # Learning rate. + steps_per_epoch = ACTIVITYNET_TAL_TRAIN_SIZE // config.batch_size + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.decay_events = [35 * steps_per_epoch] + config.lr_configs.decay_factors = [0.1] + config.lr_configs.warmup_steps = 5.0 * steps_per_epoch + config.lr_configs.base_learning_rate = 0.01 + config.layer_prefix_to_base_lrs = { + 'moment_retrieval_head': 0.1, + 'video_text_fusion': 0.1 + } + + config.score_threshold = 0.001 + config.soft_nms_sigma = 0.3 + config.iou_threshold = 0.5 + config.max_detections = 100 + config.multiclass_nms = False + + config.classification_loss_alpha = 10.0 + config.classification_loss_type = 'focal' + config.focal_loss_alpha = 0.25 + config.focal_loss_gamma = 2.0 + + config.box_loss_type = 'iou' + + # Logging. + config.checkpoint = True # do checkpointing + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + config.log_eval_steps = 200 + return config + + diff --git a/scenic/projects/unloc/configs/charades_sta/charades_sta_linspace_unloc_base_fpn.py b/scenic/projects/unloc/configs/charades_sta/charades_sta_linspace_unloc_base_fpn.py new file mode 100644 index 0000000000000000000000000000000000000000..bb147c4ca91dd2d2e66fbd920e70fc36d8805956 --- /dev/null +++ b/scenic/projects/unloc/configs/charades_sta/charades_sta_linspace_unloc_base_fpn.py @@ -0,0 +1,259 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Configs for finetuning UnLoc-B model on Charades-STA. + +""" + +import ml_collections +from scenic.projects.unloc import config_utils as unloc_config_utils + +# Replace with the actual dataset size. +CHARADES_STA_TRAIN_SIZE = 12408 +MODEL_VARIANT = 'B/16x1' +FEATURE_PYRAMID_LEVELS = [2, 3, 4, 5] +FEATURE_PYRAMID_DOWNSAMPLE_STRIDE = 2 +NUM_FEATURES_LEVEL0 = 128 + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = f'charades_sta_unloc_clip_{MODEL_VARIANT}' + + # Dataset. + config.dataset_name = 'moment_retrieval_dataset' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'moment_retrieval' + config.dataset_configs.name = 'charades_sta' + config.dataset_configs.modality_configs = { + 'rgb': + ml_collections.ConfigDict({ + 'type': 'rgb', + 'min_resize': 256, + 'crop_size': 224, + 'zero_centering': False, + 'normalization_mean': [0.48145466, 0.4578275, 0.40821073], + 'normalization_std': [0.26862954, 0.26130258, 0.27577711], + }), + 'caption': + ml_collections.ConfigDict({ + 'type': 'text', + 'max_num_tokens': 16, + 'tokenizer_type': 'clip', + 'input_feature_name': 'segment/label/string', + }), + } + config.dataset_configs.train_max_num_captions = 1 + config.dataset_configs.eval_max_num_captions = 1 + + config.dataset_configs.num_frames = NUM_FEATURES_LEVEL0 + config.dataset_configs.stride = 1 + config.dataset_configs.sampling_strategy = 'linspace' + config.dataset_configs.radius = 3.0 + # `duration`, `sampled_span`, or `none`. + config.dataset_configs.displacement_normalizer = 'none' + config.dataset_configs.feature_pyramid_config = ml_collections.ConfigDict() + config.dataset_configs.feature_pyramid_config.num_features_level0 = NUM_FEATURES_LEVEL0 # pylint:disable=line-too-long + config.dataset_configs.feature_pyramid_config.feature_pyramid_levels = FEATURE_PYRAMID_LEVELS # pylint:disable=line-too-long + config.dataset_configs.feature_pyramid_config.feature_pyramid_downsample_stride = FEATURE_PYRAMID_DOWNSAMPLE_STRIDE # pylint:disable=line-too-long + config.dataset_configs.feature_pyramid_config.normalize_displacements_by_downsample_stride = True # pylint:disable=line-too-long + config.dataset_configs.feature_pyramid_config.regression_ranges = [ + (0, 4), + (4, 8), + (8, 16), + (16, float('inf')), + ] + + config.dataset_configs.base_dir = '/path/to/base_dir' + config.dataset_configs.tables = { + 'train': '', + 'validation': '', + 'test': '', + } + config.dataset_configs.num_classes = 1 + config.dataset_configs.include_video_id = True + config.dataset_configs.is_video_id_int = True + config.dataset_configs.vid_input_feature_name = 'example_id' + + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.test_batch_size = 4 + config.dataset_configs.secs_per_timestep = 0.1 # 10fps + config.dataset_configs.log_test_epochs = 5 + config.dataset_configs.total_eval_epochs = 1.1 + + # Model. + config.model_name = 'unloc_moment_retrieval' + config.model = ml_collections.ConfigDict() + config.model.classifier = 'token' + config.model.video_tower_config = ml_collections.ConfigDict({ + 'encoder_name': 'clip_video_encoder', + 'encoder_config': ml_collections.ConfigDict({ + 'num_classes': -1, + 'image_encoder_config': unloc_config_utils.parse_image_encoder_config( + MODEL_VARIANT + ), + 'temporal_encoding_config': ml_collections.ConfigDict({ + 'method': '3d_conv', + 'kernel_init_method': 'central_frame_initializer', + 'use_bias': False, + }), + 'temporal_encoder_config': None, + 'final_endpoint': 'temporal_tokens', + 'classifier': 'token', + }), + 'projection_size': 512, + 'projection_use_bias': False, + 'freeze': False, + }) + # config.model.video_tower_config.encoder_config.image_encoder_config.classifier = 'gap' # pylint:disable=line-too-long + config.model.text_tower_config = ml_collections.ConfigDict({ + 'encoder_name': 'clip_text_encoder', + 'encoder_config': unloc_config_utils.parse_text_encoder_config( + MODEL_VARIANT + ), + 'projection_size': 512, + 'projection_use_bias': False, + 'freeze': True, + }) + config.model.video_text_fusion_config = ml_collections.ConfigDict({ + 'type': + 'video_text_self_attention', + 'config': + ml_collections.ConfigDict({ + 'self_attention_encoder_config': + ml_collections.ConfigDict({ + 'num_heads': + 8, + 'mlp_dim': + 2048, + 'num_layers': + 6, + 'dropout_rate': + 0.0, + 'attention_dropout_rate': + 0.0, + 'stochastic_depth': + 0.0, + 'positional_embedding': + 'sinusoid', + 'downsample_strategy': + 'max_pool', + 'feature_pyramid_config': + ml_collections.ConfigDict({ + 'num_features_level0': + NUM_FEATURES_LEVEL0, + 'feature_pyramid_levels': + FEATURE_PYRAMID_LEVELS, + 'feature_pyramid_downsample_stride': + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE, + }), + }), + 'self_attention_encoder_name': + 'fpn', + 'text_tower_classifier': + 'eos', + 'use_all_text_tokens': + False + }), + }) + config.model.head_config = ml_collections.ConfigDict({ + 'moment_retrieval': + ml_collections.ConfigDict({ + 'type': + 'query_dependent_localization_head', + 'config': + ml_collections.ConfigDict({ + 'num_conv_layers': + 3, + 'kernel_size': + 3, + 'init_classification_head_bias': + 0.0, + 'distance_normalizer': + 'relu', + 'weight_sharing': + False, + 'feature_pyramid_config': + ml_collections.ConfigDict({ + 'num_features_level0': + NUM_FEATURES_LEVEL0, + 'feature_pyramid_levels': + FEATURE_PYRAMID_LEVELS, + 'feature_pyramid_downsample_stride': + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE, + }), + }), + }), + }) + + # Training. + config.trainer_name = 'single_task_trainer' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.optimizer = 'sgd' + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.skip_scale_and_bias_regularization = True + config.optimizer_configs.weight_decay = 0.0 + config.l2_decay_factor = 0 + config.max_grad_norm = 1.0 + config.label_smoothing = 0.0 + config.num_training_epochs = 30 + config.batch_size = 64 + config.rng_seed = 0 + config.count_flops = False + config.all_gather_loss = True + + config.init_from = ml_collections.ConfigDict() + config.init_from.checkpoint_path = '/path/to/checkpoint' + config.init_from.load_from_unloc_checkpoint = True + config.init_from.load_image_tower = False + config.init_from.load_text_tower = False + + # Learning rate. + steps_per_epoch = CHARADES_STA_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + # config.lr_configs.factors = 'constant * piecewise_constant * linear_warmup' + config.lr_configs.factors = 'constant * linear_warmup' + config.lr_configs.warmup_steps = 5.0 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.01 + config.layer_prefix_to_base_lrs = { + 'moment_retrieval_head': 0.1, + 'video_text_fusion': 0.1 + } + + config.score_threshold = 0.001 + config.iou_threshold = 0.5 + config.soft_nms_sigma = 0.3 + config.max_detections = 100 + config.multiclass_nms = False + + config.classification_loss_alpha = 10.0 + config.classification_loss_type = 'focal' + config.focal_loss_alpha = 0.25 + config.focal_loss_gamma = 2.0 + + config.box_loss_type = 'iou' + + # Logging. + config.checkpoint = True # do checkpointing + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + config.log_eval_steps = 200 + return config + + diff --git a/scenic/projects/unloc/configs/coin/coin_action_seg_unloc_ft_image_clip_large.py b/scenic/projects/unloc/configs/coin/coin_action_seg_unloc_ft_image_clip_large.py new file mode 100644 index 0000000000000000000000000000000000000000..3df0863596d6bd25e2b681a62ab9d7a8ddc2a85b --- /dev/null +++ b/scenic/projects/unloc/configs/coin/coin_action_seg_unloc_ft_image_clip_large.py @@ -0,0 +1,204 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Configs for finetuning the UnLoc-L model on COIN. + +""" + +import ml_collections +from scenic.projects.unloc import config_utils as unloc_config_utils + +# Replace with the actual dataset size. +COIN_TRAIN_SIZE = 8461 +MODEL_VARIANT = 'L/14x1' + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = f'coin_action_seg_unloc_clip_{MODEL_VARIANT}' + + # Dataset. + config.dataset_name = 'action_segmentation_dataset' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'action_segmentation' + config.dataset_configs.modality_configs = { + 'rgb': ml_collections.ConfigDict({ + 'type': 'rgb', + 'min_resize': 256, + 'crop_size': 224, + 'zero_centering': False, + 'normalization_mean': [0.48145466, 0.4578275, 0.40821073], + 'normalization_std': [0.26862954, 0.26130258, 0.27577711], + }), + } + config.dataset_configs.modality_configs.rgb.augmentation_params = ( + ml_collections.ConfigDict() + ) + config.dataset_configs.modality_configs.rgb.augmentation_params.do_jitter_scale = ( + True + ) + config.dataset_configs.modality_configs.rgb.augmentation_params.scale_min_factor = ( + 0.9 + ) + config.dataset_configs.modality_configs.rgb.augmentation_params.scale_max_factor = ( + 1.33 + ) + config.dataset_configs.modality_configs.rgb.augmentation_params.prob_scale_jitter = ( + 1.0 + ) + config.dataset_configs.modality_configs.rgb.augmentation_params.do_color_augment = ( + True + ) + config.dataset_configs.modality_configs.rgb.augmentation_params.prob_color_augment = ( + 0.8 + ) + config.dataset_configs.modality_configs.rgb.augmentation_params.prob_color_drop = ( + 0.1 + ) + config.dataset_configs.modality_configs.rgb.augmentation_params.do_rand_augment = ( + True + ) + config.dataset_configs.modality_configs.rgb.augmentation_params.rand_augment_num_layers = ( + 3 + ) + config.dataset_configs.modality_configs.rgb.augmentation_params.rand_augment_magnitude = ( + 10 + ) + + config.dataset_configs.num_frames = 512 + config.dataset_configs.max_num_segments = 28 + + config.dataset_configs.base_dir = '/path/to/base_dir' + config.dataset_configs.tables = { + 'train': '', + 'validation': '', + 'test': '', + } + config.dataset_configs.num_classes = 778 + # This file contains text embeddings from class names augmented by prompts. + config.dataset_configs.class_name_embedding_npy = '/path/to/embeddings' + config.dataset_configs.include_video_id = True + + config.dataset_configs.do_multicrop_test = False # Do during training. + config.dataset_configs.test_batch_size = 8 + config.dataset_configs.secs_per_timestep = 0.1 # 10fps + config.dataset_configs.log_test_epochs = 10 + config.dataset_configs.total_eval_epochs = 1.1 + + # Model. + config.model_name = 'unloc_action_segmentation' + config.model = ml_collections.ConfigDict() + config.model.classifier = 'token' + config.model.video_tower_config = ml_collections.ConfigDict({ + 'encoder_name': 'clip_video_encoder', + 'encoder_config': ml_collections.ConfigDict({ + 'num_classes': -1, + 'image_encoder_config': unloc_config_utils.parse_image_encoder_config( + MODEL_VARIANT + ), + 'temporal_encoding_config': ml_collections.ConfigDict({ + 'method': '3d_conv', + 'kernel_init_method': 'central_frame_initializer', + 'use_bias': False, + }), + 'temporal_encoder_config': None, + 'final_endpoint': 'temporal_tokens', + 'classifier': 'token', + }), + 'projection_size': 768, + 'projection_use_bias': False, + 'freeze': False, + }) + config.model.video_tower_config.encoder_config.image_encoder_config.remat_block = ( + True + ) + config.model.video_tower_config.encoder_config.image_encoder_config.classifier = ( + 'gap' + ) + config.model.text_tower_config = ml_collections.ConfigDict({ + 'encoder_name': 'pass_through_encoder', + 'encoder_config': {}, + 'input_type': 'text_emb', + }) + config.model.video_text_fusion_config = ml_collections.ConfigDict({ + 'type': 'video_text_emb_self_attention', + 'config': ml_collections.ConfigDict({ + 'self_attention_encoder_config': ml_collections.ConfigDict({ + 'num_heads': 12, + 'mlp_dim': 768 * 4, + 'num_layers': 6, + 'dropout_rate': 0.0, + 'attention_dropout_rate': 0.0, + 'stochastic_depth': 0.0, + 'positional_embedding': 'sinusoid', + 'remat_block': True, + }), + 'self_attention_encoder_name': 'transformer', + }), + }) + config.model.head_config = ml_collections.ConfigDict({ + 'action_segmentation': ml_collections.ConfigDict({ + 'type': 'linear_head', + 'config': ml_collections.ConfigDict({ + 'init_head_bias': -6.6, + 'output_dim': 1, + }), + }), + }) + + # Training. + config.trainer_name = 'single_task_trainer' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.optimizer = 'sgd' + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.skip_scale_and_bias_regularization = True + config.optimizer_configs.weight_decay = 0.0 + config.l2_decay_factor = 0 + config.max_grad_norm = 1.0 + config.label_smoothing = 0.0 + config.num_training_epochs = 55 + config.batch_size = 64 + config.rng_seed = 0 + config.count_flops = False + + config.init_from = ml_collections.ConfigDict() + config.init_from.checkpoint_path = '/path/to/checkpoint' + config.init_from.load_from_unloc_checkpoint = True + config.init_from.load_image_tower = False + config.init_from.load_text_tower = False + + # Learning rate. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * exponential_decay * linear_warmup' + config.lr_configs.decay_steps = 6600 # 50th epoch + config.lr_configs.decay_rate = 0.1 + config.lr_configs.staircase = True + config.lr_configs.warmup_steps = 500 + config.lr_configs.base_learning_rate = 0.01 + config.layer_prefix_to_base_lrs = { + 'action_segmentation_head': 0.1, + 'video_text_fusion': 0.1, + } + + # Logging. + config.checkpoint = True # do checkpointing + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + config.log_eval_steps = 600 + return config + + diff --git a/scenic/projects/unloc/configs/qvhighlights/qvhighlights_linspace_unloc_base_fpn_hd.py b/scenic/projects/unloc/configs/qvhighlights/qvhighlights_linspace_unloc_base_fpn_hd.py new file mode 100644 index 0000000000000000000000000000000000000000..32bfa51f270bdf31d6e2c15af578548d0db7ba8f --- /dev/null +++ b/scenic/projects/unloc/configs/qvhighlights/qvhighlights_linspace_unloc_base_fpn_hd.py @@ -0,0 +1,242 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Configs for finetuning UnLoc-B model on QVHighlights (mAP). + +""" + +import ml_collections +from scenic.projects.unloc import config_utils as unloc_config_utils + +# Replace with the actual dataset size. +QVHIGHLIGHTS_TRAIN_SIZE = 5849 +MODEL_VARIANT = 'B/16x1' +FEATURE_PYRAMID_LEVELS = [2, 3, 4, 5] +FEATURE_PYRAMID_DOWNSAMPLE_STRIDE = 2 +NUM_FEATURES_LEVEL0 = 144 + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = f'qvhighlights_unloc_clip_{MODEL_VARIANT}' + + # Dataset. + config.dataset_name = 'highlight_detection_dataset' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'highlight_detection' + config.dataset_configs.name = 'qvhighlights' + config.dataset_configs.modality_configs = { + 'rgb': + ml_collections.ConfigDict({ + 'type': 'rgb', + 'min_resize': 256, + 'crop_size': 224, + 'zero_centering': False, + 'normalization_mean': [0.48145466, 0.4578275, 0.40821073], + 'normalization_std': [0.26862954, 0.26130258, 0.27577711], + }), + 'caption': + ml_collections.ConfigDict({ + 'type': 'text', + 'max_num_tokens': 32, + 'tokenizer_type': 'clip', + 'input_feature_name': 'segment/label/string', + }), + } + + config.dataset_configs.num_frames = NUM_FEATURES_LEVEL0 + config.dataset_configs.stride = 1 + config.dataset_configs.sampling_strategy = 'linspace' + config.dataset_configs.radius = 3.0 + # `duration`, `sampled_span`, or `none`. + config.dataset_configs.displacement_normalizer = 'none' + config.dataset_configs.max_num_segments = 12 + config.dataset_configs.feature_pyramid_config = ml_collections.ConfigDict() + config.dataset_configs.feature_pyramid_config.num_features_level0 = ( + NUM_FEATURES_LEVEL0 + ) + config.dataset_configs.feature_pyramid_config.feature_pyramid_levels = ( + FEATURE_PYRAMID_LEVELS + ) + config.dataset_configs.feature_pyramid_config.feature_pyramid_downsample_stride = ( + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE + ) + config.dataset_configs.feature_pyramid_config.normalize_displacements_by_downsample_stride = ( + True + ) + config.dataset_configs.feature_pyramid_config.regression_ranges = [ + (0, 6), + (6, 18), + (18, 32), + (32, float('inf')), + ] + + config.dataset_configs.base_dir = '/path/to/base_dir' + config.dataset_configs.tables = { + 'train': '', + 'validation': '', + 'test': '', + } + config.dataset_configs.num_classes = 1 + config.dataset_configs.include_video_id = True + + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.test_batch_size = 4 + config.dataset_configs.secs_per_timestep = 1.0 # 1fps + config.dataset_configs.log_test_epochs = 1 + config.dataset_configs.total_eval_epochs = 1.1 + + # Model. + config.model_name = 'unloc_highlight_detection' + config.model = ml_collections.ConfigDict() + config.model.classifier = 'token' + config.model.video_tower_config = ml_collections.ConfigDict({ + 'encoder_name': 'clip_video_encoder', + 'encoder_config': ml_collections.ConfigDict({ + 'num_classes': -1, + 'image_encoder_config': unloc_config_utils.parse_image_encoder_config( + MODEL_VARIANT + ), + 'temporal_encoding_config': ml_collections.ConfigDict({ + 'method': '3d_conv', + 'kernel_init_method': 'central_frame_initializer', + 'use_bias': False, + }), + 'temporal_encoder_config': None, + 'final_endpoint': 'temporal_tokens', + 'classifier': 'token', + }), + 'projection_size': 512, + 'projection_use_bias': False, + 'freeze': False, + }) + # config.model.video_tower_config.encoder_config.image_encoder_config.classifier = 'gap' # pylint:disable=line-too-long + config.model.text_tower_config = ml_collections.ConfigDict({ + 'input_key': 'caption', + 'encoder_name': 'clip_text_encoder', + 'encoder_config': unloc_config_utils.parse_text_encoder_config( + MODEL_VARIANT + ), + 'projection_size': 512, + 'projection_use_bias': False, + 'freeze': False, + }) + config.model.video_text_fusion_config = ml_collections.ConfigDict({ + 'type': 'video_text_self_attention', + 'config': ml_collections.ConfigDict({ + 'self_attention_encoder_config': ml_collections.ConfigDict({ + 'num_heads': 8, + 'mlp_dim': 2048, + 'num_layers': 6, + 'dropout_rate': 0.0, + 'attention_dropout_rate': 0.0, + 'stochastic_depth': 0.0, + 'window_size': 0, + 'positional_embedding': 'sinusoid', + 'downsample_strategy': 'max_pool', + 'feature_pyramid_config': ml_collections.ConfigDict({ + 'num_features_level0': NUM_FEATURES_LEVEL0, + 'feature_pyramid_levels': FEATURE_PYRAMID_LEVELS, + 'feature_pyramid_downsample_stride': ( + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE + ), + }), + }), + 'self_attention_encoder_name': 'simple_pyramid', + 'text_tower_classifier': 'eos', + 'use_all_text_tokens': False, + }), + }) + config.model.head_config = ml_collections.ConfigDict( + { + 'highlight_detection': ml_collections.ConfigDict({ + 'type': 'query_dependent_localization_head', + 'config': ml_collections.ConfigDict({ + 'num_conv_layers': 3, + 'kernel_size': 3, + 'init_classification_head_bias': 0.0, + 'init_regression_head_bias': 2.0, + 'distance_normalizer': 'relu', + 'weight_sharing': True, + 'feature_pyramid_config': ml_collections.ConfigDict({ + 'num_features_level0': NUM_FEATURES_LEVEL0, + 'feature_pyramid_levels': FEATURE_PYRAMID_LEVELS, + 'feature_pyramid_downsample_stride': ( + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE + ), + }), + }), + }), + } + ) + + # Training. + config.trainer_name = 'single_task_trainer' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.optimizer = 'sgd' + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.skip_scale_and_bias_regularization = True + config.optimizer_configs.weight_decay = 0.0 + config.l2_decay_factor = 0 + config.max_grad_norm = 1.0 + config.label_smoothing = 0.0 + config.num_training_epochs = 30 + config.batch_size = 64 + config.rng_seed = 0 + config.count_flops = False + + config.init_from = ml_collections.ConfigDict() + config.init_from.checkpoint_path = '/path/to/checkpoint' + config.init_from.load_from_unloc_checkpoint = True + config.init_from.load_image_tower = False + config.init_from.load_text_tower = False + + # Learning rate. + steps_per_epoch = QVHIGHLIGHTS_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 2.5 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.01 + config.layer_prefix_to_base_lrs = { + 'highlight_detection_head': 0.1, + 'video_text_fusion': 0.1 + } + + config.score_threshold = 0.001 + config.iou_threshold = 0.5 + config.soft_nms_sigma = 0.3 + config.max_detections = 100 + config.multiclass_nms = False + + config.classification_loss_alpha = 10.0 + config.classification_loss_type = 'focal' + config.focal_loss_alpha = 0.25 + config.focal_loss_gamma = 2.0 + + config.box_loss_type = 'iou' + + # Logging. + config.checkpoint = True # do checkpointing + config.flax_use_orbax_checkpointing = False + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + config.log_eval_steps = 400 + return config + + diff --git a/scenic/projects/unloc/configs/qvhighlights/qvhighlights_linspace_unloc_large_fpn_hd.py b/scenic/projects/unloc/configs/qvhighlights/qvhighlights_linspace_unloc_large_fpn_hd.py new file mode 100644 index 0000000000000000000000000000000000000000..6e33a6dfaec97ff3f9e445e647e8c7adb56ab4c6 --- /dev/null +++ b/scenic/projects/unloc/configs/qvhighlights/qvhighlights_linspace_unloc_large_fpn_hd.py @@ -0,0 +1,241 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Configs for finetuning UnLoc-B model on QVHighlights (mAP). + +""" + +import ml_collections +from scenic.projects.unloc import config_utils as unloc_config_utils + +# Replace with the actual dataset size. +QVHIGHLIGHTS_TRAIN_SIZE = 5849 +MODEL_VARIANT = 'L/14x1' +FEATURE_PYRAMID_LEVELS = [2, 3, 4, 5] +FEATURE_PYRAMID_DOWNSAMPLE_STRIDE = 2 +NUM_FEATURES_LEVEL0 = 144 + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = f'qvhighlights_unloc_clip_{MODEL_VARIANT}' + + # Dataset. + config.dataset_name = 'highlight_detection_dataset' + config.data_dtype_str = 'float32' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.task = 'highlight_detection' + config.dataset_configs.name = 'qvhighlights' + config.dataset_configs.modality_configs = { + 'rgb': + ml_collections.ConfigDict({ + 'type': 'rgb', + 'min_resize': 256, + 'crop_size': 224, + 'zero_centering': False, + 'normalization_mean': [0.48145466, 0.4578275, 0.40821073], + 'normalization_std': [0.26862954, 0.26130258, 0.27577711], + }), + 'caption': + ml_collections.ConfigDict({ + 'type': 'text', + 'max_num_tokens': 32, + 'tokenizer_type': 'clip', + 'input_feature_name': 'segment/label/string', + }), + } + + config.dataset_configs.num_frames = NUM_FEATURES_LEVEL0 + config.dataset_configs.stride = 1 + config.dataset_configs.sampling_strategy = 'linspace' + config.dataset_configs.radius = 3.0 + # `duration`, `sampled_span`, or `none`. + config.dataset_configs.displacement_normalizer = 'none' + config.dataset_configs.max_num_segments = 12 + config.dataset_configs.feature_pyramid_config = ml_collections.ConfigDict() + config.dataset_configs.feature_pyramid_config.num_features_level0 = ( + NUM_FEATURES_LEVEL0 + ) + config.dataset_configs.feature_pyramid_config.feature_pyramid_levels = ( + FEATURE_PYRAMID_LEVELS + ) + config.dataset_configs.feature_pyramid_config.feature_pyramid_downsample_stride = ( + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE + ) + config.dataset_configs.feature_pyramid_config.normalize_displacements_by_downsample_stride = ( + True + ) + config.dataset_configs.feature_pyramid_config.regression_ranges = [ + (0, 6), + (6, 12), + (12, 24), + (24, float('inf')), + ] + + config.dataset_configs.base_dir = '/path/to/base_dir' + config.dataset_configs.tables = { + 'train': '', + 'validation': '', + 'test': '', + } + config.dataset_configs.num_classes = 1 + config.dataset_configs.include_video_id = True + + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.test_batch_size = 4 + config.dataset_configs.secs_per_timestep = 1.0 # 1fps + config.dataset_configs.log_test_epochs = 1 + config.dataset_configs.total_eval_epochs = 1.1 + + # Model. + config.model_name = 'unloc_highlight_detection' + config.model = ml_collections.ConfigDict() + config.model.classifier = 'token' + config.model.video_tower_config = ml_collections.ConfigDict({ + 'encoder_name': 'clip_video_encoder', + 'encoder_config': ml_collections.ConfigDict({ + 'num_classes': -1, + 'image_encoder_config': unloc_config_utils.parse_image_encoder_config( + MODEL_VARIANT + ), + 'temporal_encoding_config': ml_collections.ConfigDict({ + 'method': '3d_conv', + 'kernel_init_method': 'central_frame_initializer', + 'use_bias': False, + }), + 'temporal_encoder_config': None, + 'final_endpoint': 'temporal_tokens', + 'classifier': 'token', + }), + 'projection_size': 768, + 'projection_use_bias': False, + 'freeze': True, + }) + # config.model.video_tower_config.encoder_config.image_encoder_config.classifier = 'gap' # pylint:disable=line-too-long + config.model.text_tower_config = ml_collections.ConfigDict({ + 'input_key': 'caption', + 'encoder_name': 'clip_text_encoder', + 'encoder_config': unloc_config_utils.parse_text_encoder_config( + MODEL_VARIANT + ), + 'projection_size': 768, + 'projection_use_bias': False, + 'freeze': False, + }) + config.model.video_text_fusion_config = ml_collections.ConfigDict({ + 'type': 'video_text_self_attention', + 'config': ml_collections.ConfigDict({ + 'self_attention_encoder_config': ml_collections.ConfigDict({ + 'num_heads': 12, + 'mlp_dim': 3072, + 'num_layers': 6, + 'dropout_rate': 0.0, + 'attention_dropout_rate': 0.0, + 'stochastic_depth': 0.0, + 'positional_embedding': 'sinusoid', + 'downsample_strategy': 'max_pool', + 'feature_pyramid_config': ml_collections.ConfigDict({ + 'num_features_level0': NUM_FEATURES_LEVEL0, + 'feature_pyramid_levels': FEATURE_PYRAMID_LEVELS, + 'feature_pyramid_downsample_stride': ( + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE + ), + }), + }), + 'self_attention_encoder_name': 'simple_pyramid', + 'text_tower_classifier': 'eos', + 'use_all_text_tokens': False, + }), + }) + config.model.head_config = ml_collections.ConfigDict( + { + 'highlight_detection': ml_collections.ConfigDict({ + 'type': 'query_dependent_localization_head', + 'config': ml_collections.ConfigDict({ + 'num_conv_layers': 3, + 'kernel_size': 3, + 'init_classification_head_bias': 0.0, + 'init_regression_head_bias': 2.0, + 'distance_normalizer': 'relu', + 'weight_sharing': True, + 'feature_pyramid_config': ml_collections.ConfigDict({ + 'num_features_level0': NUM_FEATURES_LEVEL0, + 'feature_pyramid_levels': FEATURE_PYRAMID_LEVELS, + 'feature_pyramid_downsample_stride': ( + FEATURE_PYRAMID_DOWNSAMPLE_STRIDE + ), + }), + }), + }), + } + ) + + # Training. + config.trainer_name = 'single_task_trainer' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.optimizer = 'sgd' + config.optimizer_configs.momentum = 0.9 + config.optimizer_configs.skip_scale_and_bias_regularization = True + config.optimizer_configs.weight_decay = 0.0 + config.l2_decay_factor = 0 + config.max_grad_norm = 1.0 + config.label_smoothing = 0.0 + config.num_training_epochs = 30 + config.batch_size = 64 + config.rng_seed = 0 + config.count_flops = False + + config.init_from = ml_collections.ConfigDict() + config.init_from.checkpoint_path = '/path/to/checkpoint' + config.init_from.load_from_unloc_checkpoint = True + config.init_from.load_image_tower = False + config.init_from.load_text_tower = False + + # Learning rate. + steps_per_epoch = QVHIGHLIGHTS_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 2.5 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.01 + config.layer_prefix_to_base_lrs = { + 'highlight_detection_head': 0.1, + 'video_text_fusion': 0.1 + } + + config.score_threshold = 0.001 + config.iou_threshold = 0.5 + config.soft_nms_sigma = 0.3 + config.max_detections = 100 + config.multiclass_nms = False + + config.classification_loss_alpha = 10.0 + config.classification_loss_type = 'focal' + config.focal_loss_alpha = 0.25 + config.focal_loss_gamma = 2.0 + + config.box_loss_type = 'iou' + + # Logging. + config.checkpoint = True # do checkpointing + config.flax_use_orbax_checkpointing = False + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + config.log_eval_steps = 400 + return config + + diff --git a/scenic/projects/unloc/datasets/action_segmentation_dataset.py b/scenic/projects/unloc/datasets/action_segmentation_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..5d01f64294828cfa41cc37163b9c614542c1c9bc --- /dev/null +++ b/scenic/projects/unloc/datasets/action_segmentation_dataset.py @@ -0,0 +1,183 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Registers action segmentation datasets.""" + +from typing import Any, Dict, Optional + +from absl import logging +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.projects.unloc.datasets import dataset_factory +from scenic.projects.unloc.datasets import dataset_utils as unloc_dataset_utils +from scenic.projects.unloc.datasets import temporal_localization_dataset + + +PRNGKey = jnp.ndarray + + +def map_keys(batch: Dict[str, Any], + config: ml_collections.ConfigDict) -> Dict[str, Any]: + """Changes key names for 'inputs'.""" + batch['inputs'] = {} + for modality in config.modality_configs.keys(): + batch['inputs'][modality] = batch.pop(modality) + batch['inputs']['input_mask'] = batch.pop('input_mask') + return batch + + +@datasets.add_dataset('action_segmentation_dataset') +def get_dataset(*, + batch_size: int, + eval_batch_size: int, + num_shards: int, + dtype_str: str = 'float32', + shuffle_seed: int = 0, + rng: Optional[PRNGKey] = None, + dataset_configs: Optional[ml_collections.ConfigDict] = None, + dataset_service_address: Optional[str] = None): + """Returns a generator for the action segmentation dataset.""" + del rng, shuffle_seed, dataset_service_address + if dataset_configs is None: + raise ValueError( + 'dataset_configs must be set for action segmentation dataset.') + if dataset_configs.get('base_dir') is None: + raise ValueError( + 'base_dir must be specified for action segmentation dataset') + if not dataset_configs.get('tables'): + raise ValueError( + 'tables mapping must be specified for action segmentation dataset') + + class_name_ids = None + tokenizer = None + class_name_embeddings = None + num_prompts = 1 + if dataset_configs.get('class_name_csv') is not None: + class_names = unloc_dataset_utils.read_strings_from_csv( + dataset_configs.class_name_csv) + if len(class_names) != dataset_configs.num_classes: + raise ValueError( + 'Number of class names does not match "dataset_configs.num_classes".') + tokenizer = unloc_dataset_utils.init_tokenizer( + dataset_configs.tokenizer_config) + if dataset_configs.get('prompt_csv') is not None: + prompts = unloc_dataset_utils.read_strings_from_csv( + dataset_configs.prompt_csv) + num_prompts = len(prompts) + augmented_class_names = [] + for name in class_names: + augmented_class_names.extend(prompt.format(name) for prompt in prompts) + else: + augmented_class_names = class_names + class_name_ids = unloc_dataset_utils.tokenize_class_names( + tokenizer, dataset_configs.tokenizer_config, augmented_class_names) + + if dataset_configs.get('class_name_embedding_npy') is not None: + class_name_embeddings = unloc_dataset_utils.read_string_embeddings( + dataset_configs.class_name_embedding_npy) + num_prompts = class_name_embeddings.shape[1] + assert class_name_embeddings.shape[0] == dataset_configs.num_classes + + (train_iter, num_train_examples) = ( + temporal_localization_dataset.create_dataset_iterator( + dataset_configs, + 'train', + batch_size, + num_shards, + dataset_factory.ActionSegmentationDatasetFactory, + map_key_fn=map_keys, + class_name_ids=class_name_ids, + tokenizer=tokenizer, + num_prompts=num_prompts, + class_name_embeddings=class_name_embeddings, + ) + ) + (eval_iter, num_eval_examples) = ( + temporal_localization_dataset.create_dataset_iterator( + dataset_configs, + 'validation', + eval_batch_size, + num_shards, + dataset_factory.ActionSegmentationDatasetFactory, + map_key_fn=map_keys, + class_name_ids=class_name_ids, + tokenizer=tokenizer, + num_prompts=num_prompts, + class_name_embeddings=class_name_embeddings, + ) + ) + test_batch_size = dataset_configs.get('test_batch_size', eval_batch_size) + (test_iter, num_test_examples) = ( + temporal_localization_dataset.create_dataset_iterator( + dataset_configs, + 'test', + test_batch_size, + num_shards, + dataset_factory.ActionSegmentationDatasetFactory, + map_key_fn=map_keys, + class_name_ids=class_name_ids, + tokenizer=tokenizer, + num_prompts=num_prompts, + class_name_embeddings=class_name_embeddings, + ) + ) + meta_data = { + 'num_classes': dataset_configs.num_classes, + 'num_train_examples': num_train_examples, + 'num_eval_examples': num_eval_examples, + 'num_test_examples': num_test_examples, + 'input_shape': { + 'input_mask': (-1, dataset_configs.num_frames) + }, + 'input_dtype': { + 'input_mask': jnp.int32 + }, + 'target_is_onehot': True, + } + for modality_name, modality_config in dataset_configs.modality_configs.items( + ): + if modality_config.type == 'rgb': + meta_data['input_shape']['rgb'] = (-1, dataset_configs.num_frames, + modality_config.crop_size, + modality_config.crop_size, 3) + meta_data['input_dtype']['rgb'] = getattr(jnp, dtype_str) + if modality_config.type == 'embedding': + meta_data['input_shape'][modality_name] = ( + -1, dataset_configs.num_frames, modality_config.feature_dimension) + meta_data['input_dtype'][modality_name] = getattr(jnp, dtype_str) + + if dataset_configs.get('class_name_csv') is not None: + meta_data['input_shape']['class_names'] = { + 'input_word_ids': (-1, dataset_configs.num_classes, + dataset_configs.tokenizer_config.max_num_tokens), + 'input_type_ids': (-1, dataset_configs.num_classes, + dataset_configs.tokenizer_config.max_num_tokens), + 'input_mask': (-1, dataset_configs.num_classes, + dataset_configs.tokenizer_config.max_num_tokens), + } + meta_data['input_dtype']['class_names'] = { + 'input_word_ids': jnp.int32, + 'input_type_ids': jnp.int32, + 'input_mask': jnp.int32, + } + if dataset_configs.get('class_name_embedding_npy') is not None: + meta_data['input_shape']['class_names'] = (-1, dataset_configs.num_classes, + class_name_embeddings.shape[-1]) # pytype: disable=attribute-error + meta_data['input_dtype']['class_names'] = getattr(jnp, dtype_str) + + logging.info('Dataset metadata:\n%s', meta_data) + + return dataset_utils.Dataset(train_iter, eval_iter, test_iter, meta_data) diff --git a/scenic/projects/unloc/datasets/dataset_factory.py b/scenic/projects/unloc/datasets/dataset_factory.py new file mode 100644 index 0000000000000000000000000000000000000000..c4c59a7b555c54862d56f116cadeab46efee59b2 --- /dev/null +++ b/scenic/projects/unloc/datasets/dataset_factory.py @@ -0,0 +1,1327 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Contains dataset factory module for temporal localization use case.""" + +import os +from typing import Dict, List, Mapping, Optional, Union + +from dmvr import modalities +from dmvr import tokenizers as dmvr_tokenizers +from dmvr import video_dataset +from mediapipe.util.sequence import media_sequence as ms +import ml_collections +from scenic.projects.unloc.datasets import dataset_utils as unloc_dataset_utils +from scenic.projects.vivit.data import video_tfrecord_dataset +import tensorflow as tf + + +class TemporalLocalizationDatasetFactory(video_dataset.BaseVideoDatasetFactory): + """Reader for temporal localization datasets. + + We assume the examples are in MediaSequence format, frames and embeddings are + already extracted. + """ + + def __init__( + self, + base_dir: str, + tables: Dict[str, Union[str, List[str]]], + examples_per_subset: Dict[str, int], + subset: str = 'train', + prop_data: float = 1.0, + prop_seed: Optional[int] = None, + num_groups: Optional[int] = None, + group_index: Optional[int] = None, + ): + """Initializes the instance of TemporalLocalizationDatasetFactory. + + Initializes a data-loader using DeepMind Video Reader (DMVR) pre-processing + (https://github.com/deepmind/dmvr). + TFRecords are assumed to consist of tf.SequenceExample protocol buffers in + the MediaSequence + (https://github.com/google/mediapipe/tree/master/mediapipe/util/sequence) + format. + + Args: + base_dir: The base directory of the TFRecordss. + tables: A dictionary mapping the subset name (train, val or test) to the + relative path of the TFRecords containing them. Follows DMVR convention. + The values of the dictionary can either be a string or a list. If it is + a string, it specifies all the shards in the TFRecords. Example - + "/path/to/tfrecord@10". If passing a list, each entry is a shard of the + TFRecords. Example - "[/path/to/tfrecord_shard_1_of_10, ..., + /path/to/sstabble_shard_10_of_10]." The latter scenario is useful for + debugging. + examples_per_subset: A dictionary mapping the subset name (train, val or + test) to the number of examples in the dataset for that subset. + subset: The subset of the dataset to load. Must be a key of "tables" + prop_data: The proportion of the data to load. If less than 1.0, this + proportion of the total TFRecords shards are read. + prop_seed: Whether to shuffle the shards (with the given seed) before + choosing the data used (given the proportion). + num_groups: If specified will reshard the data according to `num_groups`. + A `group_index` should be specified if using `num_groups`. + group_index: Index of the shard to return after resharding. `num_groups` + should be specified if using `group_index`. This is useful in + distributed setting where one wants to ensure that different data is + read by different workers. + """ + if (subset not in tables) or (subset not in examples_per_subset): + raise ValueError( + f'Invalid subset {subset!r}. ' + f'The available subsets are: {set(tables)!r}' + ) + self._base_dir = base_dir + self._subset = subset + self._num_examples = examples_per_subset[subset] + + data_relative_path = tables[subset] + if isinstance(data_relative_path, list): + shards = [os.path.join(self._base_dir, x) for x in data_relative_path] + else: + data_path = os.path.join(self._base_dir, data_relative_path) + shards = video_tfrecord_dataset.get_sharded_files( + data_path=data_path, + fraction_data=prop_data, + num_groups=num_groups, + group_index=group_index, + ) + super().__init__(shards=shards) + + def _build( + self, + config: ml_collections.ConfigDict, + is_training: bool = True, + ): + """Default build for this dataset. + + Args: + config: A dataset config. + is_training: Whether or not in training mode. + """ + modality_types = set() + for modality_name, modality_config in config.modality_configs.items(): + feature_type = modality_config.type + modality_types.add(feature_type) + if feature_type == 'embedding': + if ( + modality_config.get('interpolate_embeddings', False) + and config.get('sampling_strategy', 'linspace') == 'linspace' + ): + unloc_dataset_utils.add_embeddings( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + input_feature_lists_name=modality_config.input_feature_name, + output_feature_lists_name=f'{modality_name}_floor', + is_training=is_training, + num_frames=config.num_frames, + feature_dim=modality_config.feature_dimension, + sampling_strategy='linspace_floor', + stride=config.get('stride', 1), + sync_random_state=True, + ) + unloc_dataset_utils.add_embeddings( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + input_feature_lists_name=modality_config.input_feature_name, + output_feature_lists_name=f'{modality_name}_ceil', + is_training=is_training, + num_frames=config.num_frames, + feature_dim=modality_config.feature_dimension, + sampling_strategy='linspace_ceil', + stride=config.get('stride', 1), + sync_random_state=True, + ) + unloc_dataset_utils.interpolate_embeddings( + self.preprocessor_builder, + num_frames=config.num_frames, + output_feature_name=modality_name, + total_length_feature_name='total_frames', + ) + else: + unloc_dataset_utils.add_embeddings( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + input_feature_lists_name=modality_config.input_feature_name, + output_feature_lists_name=modality_name, + is_training=is_training, + num_frames=config.num_frames, + feature_dim=modality_config.feature_dimension, + sampling_strategy=config.get('sampling_strategy', 'linspace'), + stride=config.get('stride', 1), + sync_random_state=True, + ) + elif feature_type == 'video_embedding': + unloc_dataset_utils.add_embeddings( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + input_feature_lists_name=modality_config.input_feature_name, + output_feature_lists_name=modality_name, + is_training=False, + num_frames=1, + feature_dim=modality_config.feature_dimension, + sampling_strategy='random', + stride=1, + sync_random_state=False, + ) + elif feature_type == 'rgb': + if modality_config.get('resize_keep_aspect_ratio', True): + modalities.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_feature_name='image/encoded', + output_feature_name='rgb', + is_training=is_training, + random_flip=modality_config.get('random_flip', True), + num_frames=config.num_frames, + stride=config.get('stride', 1), + num_test_clips=1, + min_resize=modality_config.min_resize, + crop_size=modality_config.crop_size, + zero_centering_image=modality_config.get('zero_centering', True), + normalization_mean=modality_config.get('normalization_mean', 0.0), + normalization_std=modality_config.get('normalization_std', 1.0), + is_rgb=True, + ) + else: + unloc_dataset_utils.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_feature_name=modality_config.get( + 'input_feature_name', 'image/encoded' + ), + output_feature_name='rgb', + is_training=is_training, + random_flip=modality_config.get('random_flip', True), + num_frames=config.num_frames, + stride=config.get('stride', 1), + num_test_clips=1, + target_size=modality_config.crop_size, + zero_centering_image=modality_config.get('zero_centering', True), + normalization_mean=modality_config.get('normalization_mean', 0.0), + normalization_std=modality_config.get('normalization_std', 1.0), + is_rgb=True, + ) + elif feature_type == 'flow': + modalities.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_feature_name=modality_config.get( + 'input_feature_name', 'forward_flow/encoded' + ), + output_feature_name='flow', + is_training=is_training, + random_flip=modality_config.get('random_flip', True), + num_frames=config.num_frames, + stride=config.get('stride', 1), + num_test_clips=1, + min_resize=modality_config.min_resize, + crop_size=modality_config.crop_size, + zero_centering_image=True, + sync_random_state=False, + is_rgb=None, + is_flow=True, + ) + else: + raise NotImplementedError(f'{feature_type} is not supported.') + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=config.get( + 'segment_start_index_key', ms.SEGMENT_START_INDEX_KEY + ), + output_context_feature_name='segment_start_index', + pad_value=-config.get('max_frame_index', 1000), + dtype=tf.int64, + max_feature_length=config.max_num_segments, + ) + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=config.get( + 'segment_end_index_key', ms.SEGMENT_END_INDEX_KEY + ), + output_context_feature_name='segment_end_index', + pad_value=-config.get('max_frame_index', 1000), + dtype=tf.int64, + max_feature_length=config.max_num_segments, + ) + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=config.get( + 'segment_start_timestamp_key', ms.SEGMENT_START_TIMESTAMP_KEY + ), + output_context_feature_name='segment_start_timestamp', + pad_value=-1, + dtype=tf.int64, + max_feature_length=config.max_num_segments, + ) + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=config.get( + 'segment_end_timestamp_key', ms.SEGMENT_END_TIMESTAMP_KEY + ), + output_context_feature_name='segment_end_timestamp', + pad_value=-1, + dtype=tf.int64, + max_feature_length=config.max_num_segments, + ) + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=ms.SEGMENT_LABEL_INDEX_KEY, + output_context_feature_name='segment_label_index', + pad_value=-1, + dtype=tf.int64, + max_feature_length=config.max_num_segments, + ) + unloc_dataset_utils.add_fixed_len_context_feature( + self.parser_builder, + input_context_feature_name='clip/frames', + output_context_feature_name='total_frames', + feature_dim=0, + dtype=tf.int64, + ) + unloc_dataset_utils.add_frame_labels_and_displacements( + self.preprocessor_builder, + segment_start_index_name='segment_start_index', + segment_end_index_name='segment_end_index', + segment_label_index_name='segment_label_index', + total_length_name='total_frames', + output_label_name='label', + output_displacement_name='displacements', + max_num_segments=config.max_num_segments, + num_frames=config.num_frames, + stride=config.get('stride', 1), + num_classes=config.num_classes, + sampling_strategy=config.get('sampling_strategy', 'linspace'), + radius=config.get('radius', None), + feature_pyramid_levels=config.get( + 'feature_pyramid_config.feature_pyramid_levels', None + ), + feature_pyramid_downsample_stride=config.get( + 'feature_pyramid_config.feature_pyramid_downsample_stride', 2 + ), + regression_ranges=config.get( + 'feature_pyramid_config.regression_ranges', None + ), + normalize_displacements_by_downsample_stride=config.get( + 'feature_pyramid_config.normalize_displacements_by_downsample_stride', + False, + ), + min_displacements_across_class=config.get( + 'min_displacements_across_class', False + ), + box_jitter_ratio=config.get('box_jitter_ratio', 0.0), + is_training=is_training, + ) + unloc_dataset_utils.add_input_mask( + self.preprocessor_builder, + total_length_name='total_frames', + output_feature_name='input_mask', + num_frames=config.num_frames, + stride=config.get('stride', 1), + sampling_strategy=config.get('sampling_strategy', 'linspace'), + feature_pyramid_levels=config.get( + 'feature_pyramid_config.feature_pyramid_levels', None + ), + feature_pyramid_downsample_stride=config.get( + 'feature_pyramid_config.feature_pyramid_downsample_stride', 2 + ), + ) + + include_video_id = config.get('include_video_id', False) + is_video_id_int = config.get('is_video_id_int', False) + vid_input_feature_name = config.get('vid_input_feature_name', + 'clip/media_id') + if include_video_id and self._subset == 'test': + unloc_dataset_utils.add_fixed_len_context_feature( + self.parser_builder, + input_context_feature_name=vid_input_feature_name, + output_context_feature_name='vid', + feature_dim=0, + dtype=tf.int64 if is_video_id_int else tf.string, + ) + sampling_strategy = config.get('sampling_strategy', 'linspace') + if sampling_strategy == 'linspace': + # TODO(xxman): add random jittering to indices. + def linspace_sampling(x, state=None): + del state + indices = tf.cast( + tf.linspace(0, + tf.shape(x)[0] - 1, config.num_frames), tf.int32) + return tf.gather(x, indices) + + for modality_type in modality_types: + if modality_type in {'rgb', 'flow', 'spectrogram'}: + if is_training: + replace_sampling_fn_name = f'{modality_type}_random_sample' + else: + replace_sampling_fn_name = f'{modality_type}_middle_sample' + self.sampler_builder.replace_fn( + fn_name=replace_sampling_fn_name, fn=linspace_sampling + ) + + def get_num_examples(self) -> int: + """Returns the number of examples in the TFRecordss.""" + return self._num_examples + + +class MomentRetrievalDatasetFactory(video_dataset.BaseVideoDatasetFactory): + """Reader for moment retrieval datasets. + + In moment retrieval dataset, one query is associated with one segment while in + temporal localization dataset each video could have multiple segments + belonging to the same class. In training, we randomly select a segment within + a sequence example. In testing, we assume each sequence example only contain + one segment. + """ + + def __init__( + self, + base_dir: str, + tables: Dict[str, Union[str, List[str]]], + examples_per_subset: Dict[str, int], + subset: str = 'train', + prop_data: float = 1.0, + prop_seed: Optional[int] = None, + num_groups: Optional[int] = None, + group_index: Optional[int] = None, + ): + """Initializes the instance of MomentRetrievalDatasetFactory. + + Initializes a data-loader using DeepMind Video Reader (DMVR) pre-processing + (https://github.com/deepmind/dmvr). + TFRecords are assumed to consist of tf.SequenceExample protocol buffers in + the MediaSequence + (https://github.com/google/mediapipe/tree/master/mediapipe/util/sequence) + format. + + Args: + base_dir: The base directory of the TFRecordss. + tables: A dictionary mapping the subset name (train, val or test) to the + relative path of the TFRecords containing them. Follows DMVR convention. + The values of the dictionary can either be a string or a list. If it is + a string, it specifies all the shards in the TFRecords. Example - + "/path/to/tfrecord@10". If passing a list, each entry is a shard of the + TFRecords. Example - "[/path/to/tfrecord_shard_1_of_10, ..., + /path/to/sstabble_shard_10_of_10]." The latter scenario is useful for + debugging. + examples_per_subset: A dictionary mapping the subset name (train, val or + test) to the number of examples in the dataset for that subset. + subset: The subset of the dataset to load. Must be a key of "tables" + prop_data: The proportion of the data to load. If less than 1.0, this + proportion of the total TFRecords shards are read. + prop_seed: Whether to shuffle the shards (with the given seed) before + choosing the data used (given the proportion). + num_groups: If specified will reshard the data according to `num_groups`. + A `group_index` should be specified if using `num_groups`. + group_index: Index of the shard to return after resharding. `num_groups` + should be specified if using `group_index`. This is useful in + distributed setting where one wants to ensure that different data is + read by different workers. + """ + + if (subset not in tables) or (subset not in examples_per_subset): + raise ValueError( + f'Invalid subset {subset!r}. ' + f'The available subsets are: {set(tables)!r}' + ) + self._base_dir = base_dir + self._subset = subset + self._num_examples = examples_per_subset[subset] + + data_relative_path = tables[subset] + if isinstance(data_relative_path, list): + shards = [os.path.join(self._base_dir, x) for x in data_relative_path] + else: + data_path = os.path.join(self._base_dir, data_relative_path) + shards = video_tfrecord_dataset.get_sharded_files( + data_path=data_path, + fraction_data=prop_data, + num_groups=num_groups, + group_index=group_index, + ) + super().__init__(shards=shards) + + def _add_tokenized_text( + self, + tokenizers: Mapping[str, dmvr_tokenizers.TextTokenizer], + modality_name: str, + config: ml_collections.ConfigDict, + max_num_captions: int, + is_training: bool, + ): + """Adds tokenized text to the input pipeline.""" + + modalities.add_text( + parser_builder=self.parser_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + input_feature_name=config.input_feature_name, + output_feature_name=modality_name, + output_raw_string_name=f'{modality_name}_raw_string', + max_num_captions=max_num_captions, + max_num_tokens=config.max_num_tokens, + prepend_bos=config.get('prepend_bos', True), + append_eos=config.get('append_eos', True), + tokenizer=tokenizers[config.get('tokenizer_type', 'clip')], + keep_raw_string=config.get('keep_raw_string', False), + is_training=is_training, + sync_random_state=True, + ) + + def _build(self, + config: ml_collections.ConfigDict, + tokenizers: Mapping[str, dmvr_tokenizers.TextTokenizer], + is_training: bool = True): + """Default build for this dataset. + + In the training split, we assume that a sequence example could have multiple + segments but in the validation split a sequence example only has one + segment. In training, a random segment is selected in each iteration and the + same segment caption is selected by setting `sync_random_state = True`. + + Args: + config: A dataset config. + tokenizers: Mapping from tokenizer names to an instance of TextTokenizer. + is_training: Whether or not in training mode. + """ + + unloc_dataset_utils.add_fixed_len_context_feature( + self.parser_builder, + input_context_feature_name='clip/frames', + output_context_feature_name='total_frames', + feature_dim=0, + dtype=tf.int64, + ) + modality_types = set() + for modality_name, modality_config in config.modality_configs.items(): + feature_type = modality_config.type + modality_types.add(feature_type) + if feature_type == 'embedding': + if ( + modality_config.get('interpolate_embeddings', False) + and config.get('sampling_strategy', 'linspace') == 'linspace' + ): + unloc_dataset_utils.add_embeddings( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + input_feature_lists_name=modality_config.input_feature_name, + output_feature_lists_name=f'{modality_name}_floor', + is_training=is_training, + num_frames=config.num_frames, + feature_dim=modality_config.feature_dimension, + sampling_strategy='linspace_floor', + stride=config.get('stride', 1), + sync_random_state=True, + ) + unloc_dataset_utils.add_embeddings( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + input_feature_lists_name=modality_config.input_feature_name, + output_feature_lists_name=f'{modality_name}_ceil', + is_training=is_training, + num_frames=config.num_frames, + feature_dim=modality_config.feature_dimension, + sampling_strategy='linspace_ceil', + stride=config.get('stride', 1), + sync_random_state=True, + ) + unloc_dataset_utils.interpolate_embeddings( + self.preprocessor_builder, + num_frames=config.num_frames, + output_feature_name=modality_name, + total_length_feature_name='total_frames', + ) + else: + unloc_dataset_utils.add_embeddings( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + input_feature_lists_name=modality_config.input_feature_name, + output_feature_lists_name=modality_name, + is_training=is_training, + num_frames=config.num_frames, + feature_dim=modality_config.feature_dimension, + sampling_strategy=config.get('sampling_strategy', 'linspace'), + stride=config.get('stride', 1), + sync_random_state=True, + ) + elif feature_type == 'rgb': + if modality_config.get('resize_keep_aspect_ratio', True): + modalities.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_feature_name='image/encoded', + output_feature_name='rgb', + is_training=is_training, + random_flip=modality_config.get('random_flip', True), + num_frames=config.num_frames, + stride=config.get('stride', 1), + num_test_clips=1, + min_resize=modality_config.min_resize, + crop_size=modality_config.crop_size, + zero_centering_image=modality_config.get('zero_centering', True), + normalization_mean=modality_config.get('normalization_mean', 0.0), + normalization_std=modality_config.get('normalization_std', 1.0), + is_rgb=True, + ) + else: + unloc_dataset_utils.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_feature_name=modality_config.get( + 'input_feature_name', 'image/encoded' + ), + output_feature_name='rgb', + is_training=is_training, + random_flip=modality_config.get('random_flip', True), + num_frames=config.num_frames, + stride=config.get('stride', 1), + num_test_clips=1, + target_size=modality_config.crop_size, + zero_centering_image=modality_config.get('zero_centering', True), + normalization_mean=modality_config.get('normalization_mean', 0.0), + normalization_std=modality_config.get('normalization_std', 1.0), + is_rgb=True, + ) + elif feature_type == 'flow': + modalities.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_feature_name=modality_config.get( + 'input_feature_name', 'forward_flow/encoded' + ), + output_feature_name='flow', + is_training=is_training, + random_flip=modality_config.get('random_flip', True), + num_frames=config.num_frames, + stride=config.get('stride', 1), + num_test_clips=1, + min_resize=modality_config.min_resize, + crop_size=modality_config.crop_size, + zero_centering_image=True, + sync_random_state=False, + is_rgb=None, + is_flow=True, + ) + elif modality_config.type == 'text': + self._add_tokenized_text( + tokenizers, + modality_name, + modality_config, + config.get('train_max_num_captions', 1) + if self._subset == 'train' + else config.get('eval_max_num_captions', 1), + is_training, + ) + else: + raise NotImplementedError(f'{feature_type} is not supported.') + num_captions = ( + config.get('eval_max_num_captions', 1) + if self._subset != 'train' + else config.get('train_max_num_captions', 1) + ) + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=config.get( + 'segment_start_index_key', ms.SEGMENT_START_INDEX_KEY + ), + output_context_feature_name='segment_start_index', + pad_value=-config.get('max_frame_index', 1000), + dtype=tf.int64, + max_feature_length=num_captions, + is_training=is_training, + ) + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=config.get( + 'segment_end_index_key', ms.SEGMENT_END_INDEX_KEY + ), + output_context_feature_name='segment_end_index', + pad_value=-config.get('max_frame_index', 1000), + dtype=tf.int64, + max_feature_length=num_captions, + is_training=is_training, + ) + if self._subset == 'test': + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=config.get( + 'segment_start_timestamp_key', ms.SEGMENT_START_TIMESTAMP_KEY + ), + output_context_feature_name='segment_start_timestamp', + pad_value=-int(1e6), + dtype=tf.int64, + max_feature_length=num_captions, + is_training=False, + ) + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=config.get( + 'segment_end_timestamp_key', ms.SEGMENT_END_TIMESTAMP_KEY + ), + output_context_feature_name='segment_end_timestamp', + pad_value=-int(1e6), + dtype=tf.int64, + max_feature_length=num_captions, + is_training=False, + ) + unloc_dataset_utils.add_frame_labels_and_displacements( + self.preprocessor_builder, + segment_start_index_name='segment_start_index', + segment_end_index_name='segment_end_index', + segment_label_index_name=None, + total_length_name='total_frames', + output_label_name='label', + output_displacement_name='displacements', + max_num_segments=num_captions, + num_frames=config.num_frames, + stride=config.get('stride', 1), + num_classes=-1, + sampling_strategy=config.get('sampling_strategy', 'linspace'), + radius=config.get('radius', None), + feature_pyramid_levels=config.get( + 'feature_pyramid_config.feature_pyramid_levels', None + ), + feature_pyramid_downsample_stride=config.get( + 'feature_pyramid_config.feature_pyramid_downsample_stride', 2 + ), + regression_ranges=config.get( + 'feature_pyramid_config.regression_ranges', None + ), + normalize_displacements_by_downsample_stride=config.get( + 'feature_pyramid_config.normalize_displacements_by_downsample_stride', + False, + ), + box_jitter_ratio=config.get('box_jitter_ratio', 0.0), + is_training=is_training, + ) + unloc_dataset_utils.add_input_mask( + self.preprocessor_builder, + total_length_name='total_frames', + output_feature_name='input_mask', + num_frames=config.num_frames, + stride=config.get('stride', 1), + sampling_strategy=config.get('sampling_strategy', 'linspace'), + feature_pyramid_levels=config.get( + 'feature_pyramid_config.feature_pyramid_levels', None + ), + feature_pyramid_downsample_stride=config.get( + 'feature_pyramid_config.feature_pyramid_downsample_stride', 2 + ), + ) + unloc_dataset_utils.add_caption_mask( + self.preprocessor_builder, + input_feature_name='segment_start_index', + padding_value=-config.get('max_frame_index', 1000), + output_feature_name='caption_mask', + ) + include_video_id = config.get('include_video_id', False) + is_video_id_int = config.get('is_video_id_int', False) + vid_input_feature_name = config.get('vid_input_feature_name', + 'clip/media_id') + if include_video_id and self._subset == 'test': + unloc_dataset_utils.add_fixed_len_context_feature( + self.parser_builder, + input_context_feature_name=vid_input_feature_name, + output_context_feature_name='vid', + feature_dim=0, + dtype=tf.int64 if is_video_id_int else tf.string, + ) + sampling_strategy = config.get('sampling_strategy', 'linspace') + if sampling_strategy == 'linspace': + # TODO(xxman): add random jittering to indices. + def linspace_sampling(x, state=None): + del state + indices = tf.cast( + tf.linspace(0, tf.shape(x)[0] - 1, config.num_frames), tf.int32 + ) + return tf.gather(x, indices) + + for modality_type in modality_types: + if modality_type in {'rgb', 'flow', 'spectrogram'}: + if is_training: + replace_sampling_fn_name = f'{modality_type}_random_sample' + else: + replace_sampling_fn_name = f'{modality_type}_middle_sample' + self.sampler_builder.replace_fn( + fn_name=replace_sampling_fn_name, fn=linspace_sampling + ) + + def get_num_examples(self) -> int: + """Returns the number of examples in the TFRecordss.""" + return self._num_examples + + +class HighlightDetectionDatasetFactory(MomentRetrievalDatasetFactory): + """Reader for highlight detection datasets. + + Each video could have multiple highlight segments and those segments can + associate with a text field, such as `query` or `video_title`. + """ + + def _build( + self, + config: ml_collections.ConfigDict, + tokenizers: Mapping[str, dmvr_tokenizers.TextTokenizer], + is_training: bool = True, + ): + """Default build for this dataset. + + Args: + config: A dataset config. + tokenizers: Mapping from tokenizer names to an instance of TextTokenizer. + is_training: Whether or not in training mode. + """ + modality_types = set() + for modality_name, modality_config in config.modality_configs.items(): + feature_type = modality_config.type + modality_types.add(feature_type) + if feature_type == 'embedding': + if ( + modality_config.get('interpolate_embeddings', False) + and config.get('sampling_strategy', 'linspace') == 'linspace' + ): + unloc_dataset_utils.add_embeddings( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + input_feature_lists_name=modality_config.input_feature_name, + output_feature_lists_name=f'{modality_name}_floor', + is_training=is_training, + num_frames=config.num_frames, + feature_dim=modality_config.feature_dimension, + sampling_strategy='linspace_floor', + stride=config.get('stride', 1), + sync_random_state=True, + ) + unloc_dataset_utils.add_embeddings( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + input_feature_lists_name=modality_config.input_feature_name, + output_feature_lists_name=f'{modality_name}_ceil', + is_training=is_training, + num_frames=config.num_frames, + feature_dim=modality_config.feature_dimension, + sampling_strategy='linspace_ceil', + stride=config.get('stride', 1), + sync_random_state=True, + ) + unloc_dataset_utils.interpolate_embeddings( + self.preprocessor_builder, + num_frames=config.num_frames, + output_feature_name=modality_name, + total_length_feature_name='total_frames', + ) + else: + unloc_dataset_utils.add_embeddings( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + input_feature_lists_name=modality_config.input_feature_name, + output_feature_lists_name=modality_name, + is_training=is_training, + num_frames=config.num_frames, + feature_dim=modality_config.feature_dimension, + sampling_strategy=config.get('sampling_strategy', 'linspace'), + stride=config.get('stride', 1), + sync_random_state=True, + ) + elif feature_type == 'video_embedding': + unloc_dataset_utils.add_embeddings( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + input_feature_lists_name=modality_config.input_feature_name, + output_feature_lists_name=modality_name, + is_training=False, + num_frames=1, + feature_dim=modality_config.feature_dimension, + sampling_strategy='random', + stride=1, + sync_random_state=False, + ) + elif feature_type == 'rgb': + if modality_config.get('resize_keep_aspect_ratio', True): + modalities.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_feature_name='image/encoded', + output_feature_name='rgb', + is_training=is_training, + random_flip=modality_config.get('random_flip', True), + num_frames=config.num_frames, + stride=config.get('stride', 1), + num_test_clips=1, + min_resize=modality_config.min_resize, + crop_size=modality_config.crop_size, + zero_centering_image=modality_config.get('zero_centering', True), + normalization_mean=modality_config.get('normalization_mean', 0.0), + normalization_std=modality_config.get('normalization_std', 1.0), + is_rgb=True, + ) + else: + unloc_dataset_utils.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_feature_name=modality_config.get( + 'input_feature_name', 'image/encoded' + ), + output_feature_name='rgb', + is_training=is_training, + random_flip=modality_config.get('random_flip', True), + num_frames=config.num_frames, + stride=config.get('stride', 1), + num_test_clips=1, + target_size=modality_config.crop_size, + zero_centering_image=modality_config.get('zero_centering', True), + normalization_mean=modality_config.get('normalization_mean', 0.0), + normalization_std=modality_config.get('normalization_std', 1.0), + is_rgb=True, + ) + elif feature_type == 'flow': + modalities.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_feature_name=modality_config.get( + 'input_feature_name', 'forward_flow/encoded' + ), + output_feature_name='flow', + is_training=is_training, + random_flip=modality_config.get('random_flip', True), + num_frames=config.num_frames, + stride=config.get('stride', 1), + num_test_clips=1, + min_resize=modality_config.min_resize, + crop_size=modality_config.crop_size, + zero_centering_image=True, + sync_random_state=False, + is_rgb=None, + is_flow=True, + ) + elif feature_type == 'text': # E.g., video title + modalities.add_text( + parser_builder=self.parser_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + input_feature_name=modality_config.input_feature_name, + output_feature_name=modality_name, + output_raw_string_name=f'{modality_name}_raw_string', + max_num_captions=1, + max_num_tokens=modality_config.max_num_tokens, + prepend_bos=modality_config.get('prepend_bos', True), + append_eos=modality_config.get('append_eos', True), + tokenizer=tokenizers[modality_config.get('tokenizer_type', 'clip')], + keep_raw_string=modality_config.get('keep_raw_string', False), + is_training=is_training, + ) + # The feature has a shape of [batch, 1, max_num_words]. We squeeze it to + # [batch, max_num_words]. + unloc_dataset_utils.squeeze_features( + postprocessor_builder=self.postprocessor_builder, + input_feature_name=modality_name, + axis=1, + ) + else: + raise NotImplementedError(f'{feature_type} is not supported.') + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=config.get( + 'segment_start_index_key', ms.SEGMENT_START_INDEX_KEY + ), + output_context_feature_name='segment_start_index', + pad_value=-config.get('max_frame_index', 1000), + dtype=tf.int64, + max_feature_length=config.max_num_segments, + ) + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=config.get( + 'segment_end_index_key', ms.SEGMENT_END_INDEX_KEY + ), + output_context_feature_name='segment_end_index', + pad_value=-config.get('max_frame_index', 1000), + dtype=tf.int64, + max_feature_length=config.max_num_segments, + ) + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=config.get( + 'segment_start_timestamp_key', ms.SEGMENT_START_TIMESTAMP_KEY + ), + output_context_feature_name='segment_start_timestamp', + pad_value=-1, + dtype=tf.int64, + max_feature_length=config.max_num_segments, + ) + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=config.get( + 'segment_end_timestamp_key', ms.SEGMENT_END_TIMESTAMP_KEY + ), + output_context_feature_name='segment_end_timestamp', + pad_value=-1, + dtype=tf.int64, + max_feature_length=config.max_num_segments, + ) + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=ms.SEGMENT_LABEL_INDEX_KEY, + output_context_feature_name='segment_label_index', + pad_value=-1, + dtype=tf.int64, + max_feature_length=config.max_num_segments, + ) + unloc_dataset_utils.add_fixed_len_context_feature( + self.parser_builder, + input_context_feature_name='clip/frames', + output_context_feature_name='total_frames', + feature_dim=0, + dtype=tf.int64, + ) + unloc_dataset_utils.add_frame_labels_and_displacements( + self.preprocessor_builder, + segment_start_index_name='segment_start_index', + segment_end_index_name='segment_end_index', + segment_label_index_name='segment_label_index', + total_length_name='total_frames', + output_label_name='label', + output_displacement_name='displacements', + max_num_segments=config.max_num_segments, + num_frames=config.num_frames, + stride=config.get('stride', 1), + num_classes=1, + sampling_strategy=config.get('sampling_strategy', 'linspace'), + radius=config.get('radius', None), + feature_pyramid_levels=config.get( + 'feature_pyramid_config.feature_pyramid_levels', None + ), + feature_pyramid_downsample_stride=config.get( + 'feature_pyramid_config.feature_pyramid_downsample_stride', 2 + ), + regression_ranges=config.get( + 'feature_pyramid_config.regression_ranges', None + ), + normalize_displacements_by_downsample_stride=config.get( + 'feature_pyramid_config.normalize_displacements_by_downsample_stride', + False, + ), + min_displacements_across_class=config.get( + 'min_displacements_across_class', False + ), + box_jitter_ratio=config.get('box_jitter_ratio', 0.0), + is_training=is_training, + ) + if config.get('add_background', False): + unloc_dataset_utils.add_background_labels( + self.postprocessor_builder, input_feature_name='label' + ) + unloc_dataset_utils.add_input_mask( + self.preprocessor_builder, + total_length_name='total_frames', + output_feature_name='input_mask', + num_frames=config.num_frames, + stride=config.get('stride', 1), + sampling_strategy=config.get('sampling_strategy', 'linspace'), + feature_pyramid_levels=config.get( + 'feature_pyramid_config.feature_pyramid_levels', None + ), + feature_pyramid_downsample_stride=config.get( + 'feature_pyramid_config.feature_pyramid_downsample_stride', 2 + ), + ) + + include_video_id = config.get('include_video_id', False) + is_video_id_int = config.get('is_video_id_int', False) + vid_input_feature_name = config.get( + 'vid_input_feature_name', 'clip/media_id' + ) + if include_video_id and self._subset == 'test': + unloc_dataset_utils.add_fixed_len_context_feature( + self.parser_builder, + input_context_feature_name=vid_input_feature_name, + output_context_feature_name='vid', + feature_dim=0, + dtype=tf.int64 if is_video_id_int else tf.string, + ) + sampling_strategy = config.get('sampling_strategy', 'linspace') + if sampling_strategy == 'linspace': + # TODO(xxman): add random jittering to indices. + def linspace_sampling(x, state=None): + del state + indices = tf.cast( + tf.linspace(0, tf.shape(x)[0] - 1, config.num_frames), tf.int32 + ) + return tf.gather(x, indices) + + for modality_type in modality_types: + if modality_type in {'rgb', 'flow', 'spectrogram'}: + if is_training: + replace_sampling_fn_name = f'{modality_type}_random_sample' + else: + replace_sampling_fn_name = f'{modality_type}_middle_sample' + self.sampler_builder.replace_fn( + fn_name=replace_sampling_fn_name, fn=linspace_sampling + ) + + +class ActionSegmentationDatasetFactory(TemporalLocalizationDatasetFactory): + """Reader for action segmentation datasets. + + We assume the examples are in MediaSequence format, frames and embeddings are + already extracted. + """ + + def _build(self, config: ml_collections.ConfigDict, is_training: bool = True): + """Default build for this dataset. + + Args: + config: A dataset config. + is_training: Whether or not in training mode. + """ + + for modality_name, modality_config in config.modality_configs.items(): + feature_type = modality_config.type + if feature_type == 'embedding': + unloc_dataset_utils.add_embeddings( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + input_feature_lists_name=modality_config.input_feature_name, + output_feature_lists_name=modality_name, + is_training=is_training, + num_frames=config.num_frames, + feature_dim=modality_config.feature_dimension, + sampling_strategy='random', + stride=1, + sync_random_state=True, + ) + elif feature_type == 'rgb': + if modality_config.get('resize_keep_aspect_ratio', True): + modalities.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_feature_name='image/encoded', + output_feature_name='rgb', + is_training=is_training, + random_flip=modality_config.get('random_flip', True), + num_frames=config.num_frames, + stride=1, + num_test_clips=1, + min_resize=modality_config.min_resize, + crop_size=modality_config.crop_size, + zero_centering_image=modality_config.get('zero_centering', True), + normalization_mean=modality_config.get('normalization_mean', 0.0), + normalization_std=modality_config.get('normalization_std', 1.0), + is_rgb=True, + ) + else: + unloc_dataset_utils.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_feature_name='image/encoded', + output_feature_name='rgb', + is_training=is_training, + random_flip=modality_config.get('random_flip', True), + num_frames=config.num_frames, + stride=1, + num_test_clips=1, + target_size=modality_config.crop_size, + zero_centering_image=modality_config.get('zero_centering', True), + normalization_mean=modality_config.get('normalization_mean', 0.0), + normalization_std=modality_config.get('normalization_std', 1.0), + is_rgb=True) + elif feature_type == 'flow': + modalities.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + input_feature_name=modality_config.get( + 'input_feature_name', 'forward_flow/encoded' + ), + output_feature_name='flow', + is_training=is_training, + random_flip=modality_config.get('random_flip', True), + num_frames=config.num_frames, + stride=config.get('stride', 1), + num_test_clips=1, + min_resize=modality_config.min_resize, + crop_size=modality_config.crop_size, + zero_centering_image=modality_config.get('zero_centering', True), + normalization_mean=modality_config.get('normalization_mean', 0.0), + normalization_std=modality_config.get('normalization_std', 1.0), + sync_random_state=False, + is_rgb=False, + is_flow=True, + ) + else: + raise NotImplementedError(f'{feature_type} is not supported.') + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=config.get( + 'segment_start_index_key', ms.SEGMENT_START_INDEX_KEY + ), + output_context_feature_name='segment_start_index', + pad_value=-config.get('max_frame_index', 1000), + dtype=tf.int64, + max_feature_length=config.max_num_segments, + ) + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=config.get( + 'segment_end_index_key', ms.SEGMENT_END_INDEX_KEY + ), + output_context_feature_name='segment_end_index', + pad_value=-config.get('max_frame_index', 1000), + dtype=tf.int64, + max_feature_length=config.max_num_segments, + ) + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=config.get( + 'segment_start_timestamp_key', ms.SEGMENT_START_TIMESTAMP_KEY + ), + output_context_feature_name='segment_start_timestamp', + pad_value=-1, + dtype=tf.int64, + max_feature_length=config.max_num_segments, + ) + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=config.get( + 'segment_end_timestamp_key', ms.SEGMENT_END_TIMESTAMP_KEY + ), + output_context_feature_name='segment_end_timestamp', + pad_value=-1, + dtype=tf.int64, + max_feature_length=config.max_num_segments, + ) + unloc_dataset_utils.add_pad_context_feature( + self.parser_builder, + self.decoder_builder, + self.preprocessor_builder, + input_context_feature_name=ms.SEGMENT_LABEL_INDEX_KEY, + output_context_feature_name='segment_label_index', + pad_value=-1, + dtype=tf.int64, + max_feature_length=config.max_num_segments, + ) + unloc_dataset_utils.add_fixed_len_context_feature( + self.parser_builder, + input_context_feature_name='clip/frames', + output_context_feature_name='total_frames', + feature_dim=0, + dtype=tf.int64, + ) + unloc_dataset_utils.add_action_segmentation_labels( + self.preprocessor_builder, + segment_start_index_name='segment_start_index', + segment_end_index_name='segment_end_index', + segment_label_index_name='segment_label_index', + total_length_name='total_frames', + output_label_name='label', + max_num_segments=config.max_num_segments, + num_frames=config.num_frames, + num_classes=config.num_classes, + is_training=is_training, + ) + unloc_dataset_utils.add_input_mask( + self.preprocessor_builder, + total_length_name='total_frames', + output_feature_name='input_mask', + num_frames=config.num_frames, + stride=1, + sampling_strategy='random', + feature_pyramid_levels=None, + feature_pyramid_downsample_stride=2, + ) + + include_video_id = config.get('include_video_id', False) + is_video_id_int = config.get('is_video_id_int', False) + vid_input_feature_name = config.get('vid_input_feature_name', + 'clip/media_id') + if include_video_id and self._subset == 'test': + unloc_dataset_utils.add_fixed_len_context_feature( + self.parser_builder, + input_context_feature_name=vid_input_feature_name, + output_context_feature_name='vid', + feature_dim=0, + dtype=tf.int64 if is_video_id_int else tf.string, + ) diff --git a/scenic/projects/unloc/datasets/dataset_utils.py b/scenic/projects/unloc/datasets/dataset_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..27560fbf15960715346c0e3dd5aa0b759816748b --- /dev/null +++ b/scenic/projects/unloc/datasets/dataset_utils.py @@ -0,0 +1,1400 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Contains dataset utility functions.""" + +import csv +from typing import Any, Dict, List, Optional, Sequence, Tuple, Union + +from absl import logging +from dmvr import builders +from dmvr import processors +from dmvr import tokenizers as dmvr_tokenizers +import ml_collections +import numpy as np +from scenic.projects.t5 import tokenizer as t5_tokenizer +import tensorflow as tf + + +def sample_or_pad_sequence( + sequence: tf.Tensor, + max_num_steps: int, + pad_value: Any, + random: bool, + stride: int = 1, + seed: Optional[int] = None, + state: Optional[builders.ProcessorState] = None) -> tf.Tensor: + """Samples or pads (with `pad_value`) elements from the input sequence. + + This function is adapted from sample_sequence() from dmvr/processors.py. + + The input sequence can be multidimensional, but the sampling or pads will + only happen in the first dimension. processors.sample_sequence() performs + padding by repeating the input sequence, which may not be ideal some + applications, such as localization. This function pads the sequence by a + constant. + + Args: + sequence: Any tensor where the first dimension is timesteps. + max_num_steps: Maximum number of steps to be kept from the input. If the + input contains more, it's sampled, if less, it's padded. + pad_value: Value to be used when padding. Same type as `sequence`. + random: A boolean indicating whether to randomly sample from input. If + False, the central `max_num_steps` elements will be sampled. + stride: Temporal stride. + seed: A deterministic seed to use when sampling. + state: A mutable dictionary where keys are strings. The dictionary might + contain 'sample_sequence_random_offset' as key with metadata useful for + sampling. It will be modified with added metadata if needed. This can be + used to keep consistency between sampling of different sequences. Note + that a runtime error will be raised in case state is provided but the + sequences that one tries to sync are of different lengths. + + Returns: + A single tensor with first dimension `max_num_steps` with the sampled + elements. + + Raises: + tf.errors.InvalidArgumentError: if state is provided but the sequences that + one tries to sync are of different lengths. + """ + sequence_length = tf.shape(input=sequence)[0] + requested_length = (max_num_steps - 1) * stride + 1 + padding_pattern = [ + [0, tf.maximum(0, requested_length - sequence_length)], + ] + num_dim = len(tf.shape(input=sequence)) + if num_dim > 1: + padding_pattern.append([0, 0] * (num_dim - 1)) + padded_sequence = tf.pad( + tensor=sequence, paddings=padding_pattern, constant_values=pad_value) + + if random: + if state and 'sample_sequence_random_offset' in state: + # Read offset from state to ensure consistent offsets for different + # modalities. + offset = state['sample_sequence_random_offset'] + else: + offset_max = tf.maximum(1, sequence_length - (max_num_steps - 1) * stride) + offset = tf.random.uniform( + shape=(), minval=0, maxval=offset_max, dtype=tf.int32, seed=seed) + if state is not None: + state['sample_sequence_random_offset'] = offset + else: + offset = tf.maximum(0, sequence_length - (max_num_steps - 1) * stride) // 2 + return tf.gather(padded_sequence, + tf.range(offset, offset + requested_length, stride)) + + +def add_fixed_len_context_feature( + parser_builder: builders.BaseParserBuilder, + input_context_feature_name: str, + output_context_feature_name: str, + dtype: tf.dtypes.DType, + feature_dim: int = 0, +): + """Adds functions to process fixed length context features. + + The input proto is expected to be tf.SequenceExample and its structure + follows: + + context { + feature: { + key: input_context_feature_name + value: { + int64_list: { + value: 0 + } + } + } + } + or + context { + feature: { + key: input_context_feature_name + value: { + bytes_list: { + value: "" + } + } + } + } + or + context { + feature: { + key: input_context_feature_name + value: { + float_list: { + value: 0.0 + } + } + } + } + + Common fixed length context features are frame rate, media id, embeddings, + etc. + + Args: + parser_builder: An instance of a `builders.BaseParserBuilder`. + input_context_feature_name: Name of the context feature in the input + tf.train.SequenceExample`. + output_context_feature_name: Name of the context feature in the output + features dictionary. + dtype: Value type, tf.string, tf.float32, tf.int64 + feature_dim: Feature dimension. If it is a scalar, feature_dim = 0. + """ + if not isinstance(parser_builder, builders.SequenceExampleParserBuilder): + raise ValueError('add_context_feature only supports tf.SequenceExample.') + + parser_builder.parse_feature( + feature_name=input_context_feature_name, + feature_type=tf.io.FixedLenFeature( + shape=([] if feature_dim == 0 else feature_dim), dtype=dtype), + output_name=output_context_feature_name, + is_context=True) + + +def add_pad_context_feature(parser_builder: builders.BaseParserBuilder, + decoder_builder: builders.DecoderBuilder, + preprocessor_builder: builders.PreprocessorBuilder, + input_context_feature_name: str, + output_context_feature_name: str, + dtype: tf.dtypes.DType, + max_feature_length: int, + pad_value: Any, + is_training: bool = False, + sync_random_state: bool = True): + """Adds functions to add all context features. + + The input proto is expected to be tf.SequenceExample and its structure + follows: + + context { + feature: { + key: input_context_feature_name + value: { + int64_list: { + value: 0 + value: 0 + ... + } + } + } + } + or + context { + feature: { + key: input_context_feature_name + value: { + bytes_list: { + value: "" + value: "" + ... + } + } + } + } + or + context { + feature: { + key: input_context_feature_name + value: { + float_list: { + value: 0.0 + value: 0.0 + ... + } + } + } + } + + Common variable length context features are labels, start and end times, etc. + + Args: + parser_builder: An instance of a `builders.BaseParserBuilder`. + decoder_builder: An instance of a `builders.DecoderBuilder`. + preprocessor_builder: An instance of a `builders.PreprocessorBuilder`. + input_context_feature_name: Name of the context feature in the input + tf.train.SequenceExample`. + output_context_feature_name: Name of the context feature in the output + features dictionary. + dtype: Value type, tf.string, tf.float32, tf.int32 + max_feature_length: The number of returned features. If the actual feature + length is less than this number, padding will be used. + pad_value: Padding value. + is_training: Whether or not it is in training. + sync_random_state: Whether to use stateful option to keep random operations + in sync. + """ + if not isinstance(parser_builder, builders.SequenceExampleParserBuilder): + raise ValueError( + 'add_pad_context_feature only supports tf.SequenceExample.') + + parser_builder.parse_feature( + feature_name=input_context_feature_name, + feature_type=tf.io.VarLenFeature(dtype=dtype), + output_name=output_context_feature_name, + is_context=True) + + decoder_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name=output_context_feature_name, + fn_name=f'{output_context_feature_name}_sparse_to_dense') + + preprocessor_builder.add_fn( + # pylint: disable=g-long-lambda + # Matches the same sampling method used in DMVR add_text(). + lambda x, s=None: processors.sample_or_pad_non_sorted_sequence( + x, + max_num_steps=max_feature_length, + pad_value=pad_value, + random=is_training, + state=s), + # pylint: enable=g-long-lambda + feature_name=output_context_feature_name, + fn_name=f'{output_context_feature_name}_add_pad_context_feature', + stateful=sync_random_state) + + +def add_input_mask( + preprocessor_builder: builders.PreprocessorBuilder, + total_length_name: str, + output_feature_name: str, + num_frames: int, + stride: int, + sampling_strategy: str = 'random', + feature_pyramid_levels: Optional[Sequence[int]] = None, + feature_pyramid_downsample_stride: int = 2, +): + """Adds a function to create input mask. + + The paddings will be assigned zeros. This input mask will be used as attention + mask in transformers or used in loss/metric computation. + + Args: + preprocessor_builder: An instance of a `builders.PreprocessorBuilder`. + total_length_name: Name of the context feature that stores the total number + of frames. + output_feature_name: Name of the output feature in the output features + dictionary. + num_frames: Number of frames in the output feature. + stride: Temporal stride used to sample frames. + sampling_strategy: `random` or `linspace`. + feature_pyramid_levels: A list of layers from which we build feature + pyramid. + feature_pyramid_downsample_stride: The stride used to downsample the + features in the pyramid. + """ + + assert sampling_strategy in {'random', 'linspace'} + + def _create_mask_linspace_sampling( + feature_dict: builders.FeaturesDict) -> tf.Tensor: + del feature_dict + return tf.ones((num_frames,), dtype=tf.int32) + + def _create_fpn_mask_linspace_sampling( + feature_dict: builders.FeaturesDict) -> tf.Tensor: + del feature_dict + total_frames = 0 + for level in range(len(feature_pyramid_levels)): + cur_downsample_stride = feature_pyramid_downsample_stride**level + cur_num_frames = num_frames // cur_downsample_stride + total_frames += cur_num_frames + return tf.ones((total_frames,), dtype=tf.int32) + + def _create_mask_random_sampling( + feature_dict: builders.FeaturesDict) -> tf.Tensor: + total_length = tf.cast(feature_dict[total_length_name], tf.int32) + indices = tf.range(0, num_frames * stride, stride, dtype=tf.int32) + return tf.cast(indices < total_length, tf.int32) + + def _create_fpn_mask_random_sampling( + feature_dict: builders.FeaturesDict) -> tf.Tensor: + mask = [] + total_length = tf.cast(feature_dict[total_length_name], tf.int32) + + for level in range(len(feature_pyramid_levels)): + cur_downsample_stride = feature_pyramid_downsample_stride**level + cur_num_frames = num_frames // cur_downsample_stride + cur_stride = stride * cur_downsample_stride + indices = tf.range( + 0, cur_num_frames * cur_stride, cur_stride, dtype=tf.int32) + mask.append(tf.cast(indices < total_length, tf.int32)) + + return tf.concat(mask, axis=0) + + if sampling_strategy == 'random': + if feature_pyramid_levels is None: + create_mask_fn = _create_mask_random_sampling + else: + create_mask_fn = _create_fpn_mask_random_sampling + else: # 'linspace' + if feature_pyramid_levels is None: + create_mask_fn = _create_mask_linspace_sampling + else: + create_mask_fn = _create_fpn_mask_linspace_sampling + + def _add_mask(feature_dict: builders.FeaturesDict) -> builders.FeaturesDict: + feature_dict[output_feature_name] = create_mask_fn(feature_dict) + return feature_dict + + preprocessor_builder.add_fn(_add_mask) + + +def add_caption_mask( + preprocessor_builder: builders.PreprocessorBuilder, + input_feature_name: str, + padding_value: Union[int, float, str], + output_feature_name: str, +): + """Adds a function to create a mask for input captions. + + The paddings will be assigned zeros. This mask will be used in computing the + loss. + + Args: + preprocessor_builder: An instance of a `builders.PreprocessorBuilder`. + input_feature_name: Name of the context feature that has the same length as + captions. + padding_value: Padding value for the input feature. + output_feature_name: Name of the output feature in the output features + dictionary to store the mask. + """ + + def _add_mask(feature_dict: builders.FeaturesDict) -> builders.FeaturesDict: + feature_dict[output_feature_name] = tf.cast( + feature_dict[input_feature_name] != padding_value, tf.int32) + return feature_dict + + preprocessor_builder.add_fn(_add_mask) + + +def _get_random_offset(state: Dict[str, Any], total_length: tf.Tensor, + num_frames: int, stride: int, + is_training: bool) -> tf.Tensor: + """Generates a random offset for sampling the sequence.""" + + if not is_training: + return tf.maximum( + 0, tf.cast((total_length - num_frames * stride) // 2, tf.int32)) + if state and 'sample_offset_proportion' in state: + # 'sample_offset_proportion' is the same key used in add_images. + offset = state['sample_offset_proportion'] * total_length + offset = tf.cast(tf.math.round(offset), tf.int32) + else: + offset = processors._get_random_sampling_offset( # pylint:disable=protected-access + sequence=tf.ones((total_length,)), + num_steps=num_frames, + stride=stride) + if state is not None: + # Update state. + sample_offset_proportion = ( + tf.cast(offset, tf.float32) / tf.cast(total_length, tf.float32)) + state['sample_offset_proportion'] = sample_offset_proportion + return offset + + +def add_action_segmentation_labels( + preprocessor_builder: builders.PreprocessorBuilder, + segment_start_index_name: str, + segment_end_index_name: str, + segment_label_index_name: str, + total_length_name: str, + output_label_name: str, + max_num_segments: int, + num_frames: int, + num_classes: int, + is_training: bool = True, + sync_random_state: bool = True, +): + """Adds functions to action segmentation labels. + + The output labels are onehot or all-zero vectors of shape (num_frames, + num_classes). + + Args: + preprocessor_builder: An instance of a `builders.PreprocessorBuilder`. + segment_start_index_name: Name of the context feature that stores segment + start indices. + segment_end_index_name: Name of the context feature that stores segment + end indices. + segment_label_index_name: Name of the context feature that stores segment + label indices. + total_length_name: Name of the context feature that stores the total number + of frames. + output_label_name: Name of the feature that stores the frame labels in the + output feature dictionary. + max_num_segments: Max number of segments in the whole dataset. + num_frames: Number of frames in the output feature. + num_classes: Number of classes. Set it to a negative value when the task is + moment retrieval. + is_training: Whether or not it is in training. + sync_random_state: Whether to use stateful option to keep random operations + in sync. + """ + + def _add_labels(state: Dict[str, Any], + feature_dict: builders.FeaturesDict) -> builders.FeaturesDict: + segment_start_indices = tf.cast(feature_dict[segment_start_index_name], + tf.int32) + segment_end_indices = tf.cast(feature_dict[segment_end_index_name], + tf.int32) + segment_label_indices = tf.cast(feature_dict[segment_label_index_name], + tf.int32) + frame_label_indices = tf.fill([num_frames], -1) + total_length = feature_dict[total_length_name] + offset = _get_random_offset(state, total_length, num_frames, 1, is_training) + frame_indices = tf.range(0, num_frames, dtype=tf.int32) + offset + + for i in range(max_num_segments): + segment_start_index = segment_start_indices[i] + segment_end_index = segment_end_indices[i] + in_segment_mask = tf.logical_and( + tf.math.greater_equal(frame_indices, segment_start_index), + tf.math.less_equal(frame_indices, segment_end_index)) + frame_label_indices = tf.where( + in_segment_mask, x=segment_label_indices[i], y=frame_label_indices) + + multihot_target = tf.one_hot(frame_label_indices, depth=num_classes) + multihot_target = tf.cast(multihot_target, tf.int32) + feature_dict[output_label_name] = multihot_target + + return feature_dict + + preprocessor_builder.add_fn( + lambda x, s=None: _add_labels(s, x), stateful=sync_random_state) + + +def _add_labels_from_one_pyramid_level_moment_retrieval( + segment_start_indices: tf.Tensor, + segment_end_indices: tf.Tensor, + frame_indices: tf.Tensor, + max_num_segments: int, + box_jitter_ratio: float = 0.0, + radius: Optional[float] = None, + regression_range: Tuple[float, float] = (0.0, float('inf')), +) -> Tuple[tf.Tensor, tf.Tensor]: + """Adds frame labels and displacements for one pyramid level. + + Args: + segment_start_indices: A int tensor of shape (max_num_segments,) containing + the caption start indices in the normalized coordinate system. + segment_end_indices: A int tensor of shape (max_num_segments,) containing + the caption end indices in the normalized coordinate system. + frame_indices: Frame indices in the normalized coordinate system. + max_num_segments: Max number of captions in this dataset. We pad the + examples that have fewer captions. + box_jitter_ratio: The ratio of segment length used to jitter segment + start/end times. + radius: If set, a frame is marked as positive only if it is within `radius` + distance of the segment center. + regression_range: If set, a frame is marked as positive only if its distance + to the start/end indices are within this range. + + Returns: + frame_labels: A 3D binary tensor of shape (max_captions, num_frames, 1) + indicating the frame labels of each caption. + displacements: A 3D float tensor of shape (max_captions, num_frames, 2) + indicating the distances to the caption start/end time for each frame. + """ + + displacements = [] + frame_labels = [] + + for i in range(max_num_segments): + segment_start_index = segment_start_indices[i] + segment_end_index = segment_end_indices[i] + distortion = tf.random.uniform( + shape=[2], + minval=-box_jitter_ratio, + maxval=box_jitter_ratio, + dtype=tf.float32, + ) + segment_duration = segment_end_index - segment_start_index + segment_start_index += segment_duration * distortion[0] + segment_end_index += segment_duration * distortion[1] + displacements_to_start = frame_indices - segment_start_index + displacements_to_end = segment_end_index - frame_indices + displacements.append( + tf.stack([displacements_to_start, displacements_to_end], axis=1)) + if regression_range is not None: + distances = tf.stack([ + segment_end_index - frame_indices, frame_indices - segment_start_index + ], + axis=-1) + max_distances = tf.cast(tf.reduce_max(distances, axis=-1), tf.float32) + in_range_mask = tf.logical_and( + tf.math.greater_equal(max_distances, regression_range[0]), + tf.math.less(max_distances, regression_range[1])) + if radius is not None: + segment_center_index = (segment_start_index + segment_end_index) * 0.5 + segment_start_index = tf.maximum(segment_start_index, + segment_center_index - radius) + segment_end_index = tf.minimum(segment_end_index, + segment_center_index + radius) + in_segment_mask = tf.logical_and( + tf.math.greater_equal(frame_indices, segment_start_index), + tf.math.less_equal(frame_indices, segment_end_index)) + frame_labels.append( + tf.cast(tf.logical_and(in_segment_mask, in_range_mask), tf.int32)) + + displacements = tf.stack(displacements, axis=0) + frame_labels = tf.stack(frame_labels, axis=0)[..., None] + return frame_labels, displacements + + +def _add_labels_from_one_pyramid_level_tal( + segment_start_indices: tf.Tensor, + segment_end_indices: tf.Tensor, + segment_label_indices: tf.Tensor, + frame_indices: tf.Tensor, + total_length: tf.Tensor, + num_frames: int, + num_classes: int, + max_num_segments: int, + box_jitter_ratio: float = 0.0, + radius: Optional[float] = None, + regression_range: Tuple[float, float] = (0.0, float('inf')), +) -> Tuple[tf.Tensor, tf.Tensor]: + """Adds frame labels and displacements for one pyramid level.""" + + multihot_target = tf.zeros((num_frames, num_classes), dtype=tf.float32) + # The first row will NOT be used and serves as a placeholder when + # segment_label = -1. + displacements_to_start = tf.fill([num_classes + 1, num_frames], + total_length + 1.0) + # The first row will NOT be used and serves as a placeholder when + # segment_label = -1. + displacements_to_end = tf.fill([num_classes + 1, num_frames], + total_length + 1.0) + + for i in range(max_num_segments): + frame_label_indices = tf.fill([num_frames], -1) + segment_start_index = segment_start_indices[i] + segment_end_index = segment_end_indices[i] + distortion = tf.random.uniform( + shape=[2], + minval=-box_jitter_ratio, + maxval=box_jitter_ratio, + dtype=tf.float32, + ) + segment_duration = segment_end_index - segment_start_index + segment_start_index += segment_duration * distortion[0] + segment_end_index += segment_duration * distortion[1] + cur_segment_label_index = segment_label_indices[i] + 1 + # The distances to the start should only be considered for the frames + # after the start. + cur_displacements_to_start = tf.where( + frame_indices - segment_start_index < 0, total_length + 1, + frame_indices - segment_start_index) + displacements_to_start = tf.tensor_scatter_nd_min( + displacements_to_start, [[cur_segment_label_index]], + cur_displacements_to_start[None, :]) + # The distances to the end should only be considered for the frames + # before the end. + cur_displacements_to_end = tf.where(segment_end_index - frame_indices < 0, + total_length + 1, + segment_end_index - frame_indices) + displacements_to_end = tf.tensor_scatter_nd_min( + displacements_to_end, [[cur_segment_label_index]], + cur_displacements_to_end[None, :]) + if regression_range is not None: + distances = tf.stack([ + segment_end_index - frame_indices, frame_indices - segment_start_index + ], + axis=-1) + max_distances = tf.cast(tf.reduce_max(distances, axis=-1), tf.float32) + in_range_mask = tf.logical_and( + tf.math.greater_equal(max_distances, regression_range[0]), + tf.math.less(max_distances, regression_range[1])) + if radius is not None: + segment_center_index = (segment_start_index + segment_end_index) * 0.5 + segment_start_index = tf.maximum(segment_start_index, + segment_center_index - radius) + segment_end_index = tf.minimum(segment_end_index, + segment_center_index + radius) + in_segment_mask = tf.logical_and( + tf.math.greater_equal(frame_indices, segment_start_index), + tf.math.less_equal(frame_indices, segment_end_index)) + frame_label_indices = tf.where( + tf.logical_and(in_segment_mask, in_range_mask), + x=segment_label_indices[i], + y=frame_label_indices) + multihot_target += tf.one_hot(frame_label_indices, depth=num_classes) + + # in case of duplicate labels. + multihot_target = tf.clip_by_value(multihot_target, 0.0, 1.0) + multihot_target = tf.cast(multihot_target, tf.int32) + # Removes the first row. + displacements_to_start = tf.transpose(displacements_to_start[1:]) + # Removes the first row. + displacements_to_end = tf.transpose(displacements_to_end[1:]) + displacements = tf.stack([displacements_to_start, displacements_to_end], + axis=2) + return multihot_target, displacements + + +def add_frame_labels_and_displacements( + preprocessor_builder: builders.PreprocessorBuilder, + segment_start_index_name: str, + segment_end_index_name: str, + total_length_name: str, + output_label_name: str, + output_displacement_name: str, + max_num_segments: int, + num_frames: int, + stride: int, + num_classes: int, + sampling_strategy: str = 'random', + segment_label_index_name: Optional[str] = None, + radius: Optional[float] = None, + feature_pyramid_levels: Optional[Sequence[int]] = None, + feature_pyramid_downsample_stride: int = 2, + regression_ranges: Optional[Sequence[Tuple[float, float]]] = None, + normalize_displacements_by_downsample_stride: bool = False, + min_displacements_across_class: bool = False, + box_jitter_ratio: float = 0.0, + is_training: bool = True, + sync_random_state: bool = True, +): + """Adds functions to create per-frame labels and start/end time displacements. + + For every frame, we output a multihot vector indicating whether the current + frame is within predefined segments or not. If radius is defined, the frames + within the radius of the center of a segment are considered positive. For + every frame, we also output the distances between the current frame and the + closest segment's start and end times. + + For temporal localization (num_classes > 0), + the output labels are multihot vectors of shape (num_frames, num_classes) and + the output displacements are of shape (num_frames, num_classes, 2) if + min_displacements_across_class = False, otherwise (num_frames, 2). + + For moment retrieval (num_classes < 0), + the output labels are multihot vectors of shape (max_num_captions, num_frames, + 1) and the output displacements are of shape (max_num_captions, num_frames, + 2). + + Args: + preprocessor_builder: An instance of a `builders.PreprocessorBuilder`. + segment_start_index_name: Name of the context feature that stores segment + start indices. + segment_end_index_name: Name of the context feature that stores segment + start indices. + total_length_name: Name of the context feature that stores the total number + of frames. + output_label_name: Name of the feature that stores the frame labels in the + output feature dictionary. + output_displacement_name: Name of the feature that stores the displacements + to the start/end times in the output feature dictionary. + max_num_segments: Max number of segments in the whole dataset. + num_frames: Number of frames in the output feature. + stride: Temporal stride used to sample frames. + num_classes: Number of classes. Set it to a negative value when the task is + moment retrieval. + sampling_strategy: 'linspace' or 'random'. Under `random` strategy, a set of + consecutive frames is selected with a random start index when + is_training=True and the center clip is selected when is_training=False. + Under `linspace` strategy, tf.linspace() is used to generate a set of + frame indices in both training and test. + segment_label_index_name: Name of the context feature that stores segment + label indices. If None, we output binary labels. + radius: Radius used to determine whether a frame is within a positive + segment. If None, original segments are used. + feature_pyramid_levels: A list of layers from which we build feature + pyramid. + feature_pyramid_downsample_stride: The stride used to downsample the + features in the pyramid. + regression_ranges: The output regression ranges for each pyramid level. + normalize_displacements_by_downsample_stride: Whether or not to normalize + the displacements by downsample stride. + min_displacements_across_class: If True, we assume there is no overlapping + segments in the video and return the minimum displacements across all + classes. This flag is only applicable to temporal localization. + box_jitter_ratio: The ratio of segment length used to jitter segment + start/end times. + is_training: Whether or not it is in training. + sync_random_state: Whether to use stateful option to keep random operations + in sync. + """ + + if segment_label_index_name is None and num_classes >= 0: + raise ValueError( + 'num_classes must be negative if segment_label_index_name is not set.') + assert sampling_strategy in {'linspace', 'random'} + + if regression_ranges is None: + regression_ranges = [(0.0, float('inf'))] + + def _add_labels(state: Dict[str, Any], + feature_dict: builders.FeaturesDict) -> builders.FeaturesDict: + segment_start_indices = tf.cast(feature_dict[segment_start_index_name], + tf.float32) + segment_end_indices = tf.cast(feature_dict[segment_end_index_name], + tf.float32) + total_length = tf.cast(feature_dict[total_length_name], tf.float32) + if sampling_strategy == 'linspace': + segment_start_indices *= (num_frames - 1) / (total_length - 1) + segment_end_indices *= (num_frames - 1) / (total_length - 1) + segment_label_indices = ( + tf.fill([max_num_segments], 0) if segment_label_index_name is None else + tf.cast(feature_dict[segment_label_index_name], tf.int32)) + + multihot_target = [] + displacements = [] + if sampling_strategy == 'random': + offset = _get_random_offset(state, total_length, num_frames, stride, + is_training) + offset = tf.cast(offset, tf.float32) + else: # 'linspace' + offset = 0.0 + if feature_pyramid_levels is None: + levels = 1 + else: + levels = len(feature_pyramid_levels) + + linspace_frame_indices = tf.cast(tf.range(0, num_frames), tf.float32) + + for level_idx in range(levels): + cur_downsample_stride = feature_pyramid_downsample_stride**level_idx + cur_num_frames = num_frames // cur_downsample_stride + if sampling_strategy == 'random': + cur_stride = stride * cur_downsample_stride + frame_indices = tf.range( + 0, num_frames * stride, cur_stride, dtype=tf.float32) + else: # 'linspace' + frame_indices = tf.gather( + linspace_frame_indices, + tf.range(0, num_frames, delta=cur_downsample_stride)) + frame_indices += offset + cur_radius = None if radius is None else radius * cur_downsample_stride + if num_classes > 0: + cur_multihot_target, cur_displacements = ( + _add_labels_from_one_pyramid_level_tal( + segment_start_indices, + segment_end_indices, + segment_label_indices, + frame_indices, + total_length, + cur_num_frames, + num_classes, + max_num_segments, + box_jitter_ratio, + cur_radius, + regression_ranges[level_idx], + ) + ) + if min_displacements_across_class: + cur_displacements = tf.reduce_min(cur_displacements, axis=1) + else: + cur_multihot_target, cur_displacements = ( + _add_labels_from_one_pyramid_level_moment_retrieval( + segment_start_indices, + segment_end_indices, + frame_indices, + max_num_segments, + box_jitter_ratio, + cur_radius, + regression_ranges[level_idx], + ) + ) + multihot_target.append(cur_multihot_target) + if normalize_displacements_by_downsample_stride: + cur_displacements = cur_displacements / cur_downsample_stride + displacements.append(cur_displacements) + + concat_axis = 0 if num_classes > 0 else 1 + multihot_target = tf.concat(multihot_target, axis=concat_axis) + displacements = tf.concat(displacements, axis=concat_axis) + feature_dict[output_label_name] = multihot_target + feature_dict[output_displacement_name] = displacements + + return feature_dict + + preprocessor_builder.add_fn( + lambda x, s=None: _add_labels(s, x), stateful=sync_random_state) + + +def add_background_labels( + postprocessor_builder: builders.PostprocessorBuilder, + input_feature_name: str, +): + """Adds background labels.""" + + def _add_background( + feature_dict: builders.FeaturesDict, + ) -> builders.FeaturesDict: + multihot_labels = feature_dict[input_feature_name] + background_labels = 1 - ( + tf.cast( + tf.reduce_sum(multihot_labels, axis=-1, keepdims=True) > 0, tf.int32 + ) + ) + feature_dict[input_feature_name] = tf.concat( + [multihot_labels, background_labels], axis=-1 + ) + return feature_dict + + postprocessor_builder.add_fn(_add_background) + + +def squeeze_features( + postprocessor_builder: builders.PostprocessorBuilder, + input_feature_name: str, + axis: int, +): + """Adds a postprocessor to squeeze features.""" + + def _squeeze_feature( + feature_dict: builders.FeaturesDict) -> builders.FeaturesDict: + feature = feature_dict[input_feature_name] + feature_dict[input_feature_name] = tf.squeeze(feature, axis=axis) + return feature_dict + + postprocessor_builder.add_fn(_squeeze_feature) + + +def expand_features( + postprocessor_builder: builders.PostprocessorBuilder, + input_feature_name: str, + axis: int, +): + """Adds a postprocessor to expand features.""" + + def _expand_feature( + feature_dict: builders.FeaturesDict) -> builders.FeaturesDict: + feature = feature_dict[input_feature_name] + feature_dict[input_feature_name] = tf.expand_dims(feature, axis=axis) + return feature_dict + + postprocessor_builder.add_fn(_expand_feature) + + +def linspace_sampling(x: tf.Tensor, + num_frames: int, + floor: bool = True, + state=None) -> tf.Tensor: + """Applies linspace sampling.""" + + del state + if floor: + indices = tf.cast( + tf.math.floor(tf.linspace(0, + tf.shape(x)[0] - 1, num_frames)), tf.int32) + else: + indices = tf.cast( + tf.math.ceil(tf.linspace(0, + tf.shape(x)[0] - 1, num_frames)), tf.int32) + return tf.gather(x, indices) + + +def interpolate_embeddings( + preprocessor_builder: builders.PreprocessorBuilder, + num_frames: int, + output_feature_name: str, + total_length_feature_name: str, +): + """Adds a function to interpolate embeddings. + + Args: + preprocessor_builder: An instance of a `builders.PreprocessorBuilder`. + num_frames: Number of frames in the input sequence. + output_feature_name: Name of the output embedding feature. The corresponding + input feature names are, `output_feature_name`_floor and + `output_feature_name`_ceil. + total_length_feature_name: The feature name storing the total length of the + video. + """ + + def _interpolate( + feature_dict: builders.FeaturesDict) -> builders.FeaturesDict: + embeddings_floor = feature_dict[f'{output_feature_name}_floor'] + embeddings_ceil = feature_dict[f'{output_feature_name}_ceil'] + indices = tf.linspace( + 0.0, tf.cast(feature_dict[total_length_feature_name] - 1, tf.float32), + num_frames) + weights_ceil = tf.cast(indices - tf.math.floor(indices), tf.float32) + weights_floor = tf.cast(1.0 - weights_ceil, tf.float32) + feature_dict[output_feature_name] = ( + embeddings_floor * weights_floor[:, None] + + embeddings_ceil * weights_ceil[:, None]) + return feature_dict + + preprocessor_builder.add_fn(_interpolate) + + +def add_embeddings( + parser_builder: builders.BaseParserBuilder, + sampler_builder: builders.SamplerBuilder, + input_feature_lists_name: str, + output_feature_lists_name: str, + num_frames: int, + stride: int, + feature_dim: int, + sampling_strategy: str = 'linspace', + is_training: bool = True, + sync_random_state: bool = True, +): + """Adds functions to process float feature lists. + + The input proto is expected to be tf.SequenceExample and its structure + follows: + + feature_lists { + feature_list { + key: "input_feature_lists_name" + value: { + float_list: 0.0 + float_list: 0.0 + ... + } + } + } + + Args: + parser_builder: An instance of a `builders.BaseParserBuilder`. + sampler_builder: An instance of a `builders.SamplerBuilder`. + input_feature_lists_name: Name of the feature lists in the input + `tf.train.SequenceExample`. + output_feature_lists_name: Name of the feature lists in the output features + dictionary. + num_frames: Number of frames to sample. + stride: Sampling stride. + feature_dim: The dimension of the feature. + sampling_strategy: Sampling strategy. Currently, we support 'linspace', + 'linspace_floor', 'linspace_ceil' and 'random'. When using 'linspace', we + sample `num_frames` frames evenly from the input feature lists and when + using 'random' we randomly sample N(=num_frames) consecutive frames during + training and during testing the center of the sampled frames aligns with + the input feature lists. + is_training: Whether or not in training mode. This option only affects the + behavior of `random` strategy. + sync_random_state: Whether to use stateful option to keep random operations + in sync. + """ + if not isinstance(parser_builder, builders.SequenceExampleParserBuilder): + raise ValueError('add_embeddings only supports tf.SequenceExample.') + + parser_builder.parse_feature( + feature_name=input_feature_lists_name, + feature_type=tf.io.FixedLenSequenceFeature([feature_dim], + dtype=tf.float32), + output_name=output_feature_lists_name) + + if sampling_strategy.startswith('linspace'): + if sampling_strategy == 'linspace' or sampling_strategy == 'linspace_floor': + floor = True + else: + floor = False + sampler_builder.add_fn( + # pylint: disable=g-long-lambda + lambda x: linspace_sampling(x, num_frames=num_frames, floor=floor), + # pylint: enable=g-long-lambda + feature_name=output_feature_lists_name, + fn_name=f'{output_feature_lists_name}_sample_feature_lists') + elif sampling_strategy == 'random': + sampler_builder.add_fn( + # pylint: disable=g-long-lambda + # The same key `sample_offset_proportion` used in sample_sequence + # matches the one used in add_frame_labels_and_displacements(). + lambda x, s=None: processors.sample_sequence( + x, num_frames, random=is_training, stride=stride, state=s), + # pylint: enable=g-long-lambda + feature_name=output_feature_lists_name, + fn_name=f'{output_feature_lists_name}_sample_feature_lists', + stateful=sync_random_state) + else: + raise ValueError(f'Sampling strategy {sampling_strategy} not supported.') + + +def read_strings_from_csv(input_csv: str) -> List[str]: + """Reads strings from a CSV file.""" + strings = [] + with tf.io.gfile.GFile(input_csv, 'r') as fid: + reader = csv.reader(fid, delimiter=',') + for row in reader: + strings.append(row[0]) + return strings + + +def read_string_embeddings(input_file: str) -> np.ndarray: + """Reads string embeddings (query, class names) from a npy file.""" + with tf.io.gfile.GFile(input_file, 'rb') as f: + embeddings = np.load(f) + return embeddings + + +def init_tokenizer( + config: ml_collections.ConfigDict, +) -> dmvr_tokenizers.TextTokenizer: + """Initializes a text tokenizer.""" + if config.tokenizer_type == 't5': + logging.info('Initialize T5 tokenizer.') + tokenizer = t5_tokenizer.SentencePieceTokenizer( + config.get('vocabulary_path', t5_tokenizer.SP_MODEL_PATH), + bos_id=config.get('cls_token_id', 0), + ) + tokenizer.initialize() + elif config.tokenizer_type == 'clip': + logging.info('Initialize CLIP tokenizer.') + tokenizer = dmvr_tokenizers.ClipTokenizer(config.get('vocabulary_path')) + tokenizer.initialize() + else: + raise ValueError(f'Unknown tokenizer_type: {config.tokenizer_type}.') + return tokenizer + + +def tokenize_class_names( + tokenizer: dmvr_tokenizers.TextTokenizer, + config: ml_collections.ConfigDict, + class_names: Sequence[str], +) -> np.ndarray: + """Tokenizes class names.""" + class_name_ids = tokenizer.string_tensor_to_indices( + class_names, + prepend_bos=config.get('prepend_bos', True), + append_eos=config.get('append_eos', True), + max_num_tokens=config.max_num_tokens, + ) + return class_name_ids.numpy() + + +def add_class_names( + batch: Dict[str, np.ndarray], + class_name_ids: np.ndarray, + tokenizer: dmvr_tokenizers.TextTokenizer, + exec_mode: str = 'train', + num_prompts: int = 1, +) -> Dict[str, np.ndarray]: + """Adds class name ids to the batch. + + Args: + batch: A batch of input data. + class_name_ids: A 2D array of tokenized class name ids. It has a shape of + (num_prompts * num_classes, max_num_tokens). + tokenizer: A text tokenizer. + exec_mode: 'train', 'validation', or 'test'. + num_prompts: Number of prompts. + + Returns: + A new batch of input data with 'class_names'. batch['inputs']['class_names'] + has three fields, 'input_word_ids', 'input_type_ids', and 'input_mask' where + 'input_word_ids' is an int32 tensor of shape (batch_size, + num_classes * num_prompts, max_num_tokens), 'input_type_ids' is an int32 + tensor of shape (batch_size, num_classes * num_prompts), and 'input_mask' is + a binary tensor of shape (batch_size, num_classes * num_prompts). + """ + assert num_prompts >= 1 + assert class_name_ids.shape[0] % num_prompts == 0 + num_classes = class_name_ids.shape[0] // num_prompts + if exec_mode != 'test': + class_name_ids = class_name_ids.reshape( + (num_classes, num_prompts, class_name_ids.shape[-1]) + ) + if exec_mode == 'train': + prompt_index = np.random.randint(num_prompts, size=num_classes) + class_name_ids = class_name_ids[np.arange(num_classes), prompt_index] + elif exec_mode == 'validation': + prompt_index = num_prompts // 2 + class_name_ids = class_name_ids[:, prompt_index] + class_name_ids = np.tile( + np.expand_dims(class_name_ids, axis=0), [batch['label'].shape[0], 1, 1] + ) + batch['inputs']['class_names'] = { + 'input_word_ids': class_name_ids, + 'input_type_ids': np.zeros_like(class_name_ids, dtype=np.int32), + 'input_mask': class_name_ids != tokenizer.pad_token, + } + return batch + + +def add_class_name_embeddings( + batch: Dict[str, np.ndarray], + class_name_embeddings: np.ndarray, + exec_mode: str = 'train', +) -> Dict[str, np.ndarray]: + """Adds class name embeddings to the batch. + + During training, we randomly select a prompt template. During validation, we + always pick the middle prompt and in testing we use all prompts. + + Args: + batch: A batch of input data. + class_name_embeddings: A 3D array of class name embeddings. It has a shape + of (num_classes, num_prompts, embedding_size). + exec_mode: 'train', 'validation', or 'test'. + + Returns: + A new batch of input data with a new field 'class_names', which stores the + class name embeddings. The new field has a shape of (batch_size, + num_classes, hidden_size) when exec_mode = 'train' or 'validation' and a + shape of (batch_size, num_classes * num_prompts, hidden_size) when exec_mode + = 'test'. + """ + num_classes = class_name_embeddings.shape[0] + num_prompts = class_name_embeddings.shape[1] + if exec_mode == 'train': + prompt_index = np.random.randint(num_prompts, size=num_classes) + class_name_embeddings = class_name_embeddings[ + np.arange(num_classes), prompt_index + ] + elif exec_mode == 'validation': + prompt_index = num_prompts // 2 + class_name_embeddings = class_name_embeddings[:, prompt_index] + elif exec_mode == 'test': + class_name_embeddings = class_name_embeddings.reshape( + (num_classes * num_prompts, -1) + ) + else: + raise ValueError(f'Unknown exec_mode: {exec_mode}.') + class_name_embeddings = np.tile( + np.expand_dims(class_name_embeddings, axis=0), + [batch['label'].shape[0], 1, 1], + ) + batch['inputs']['class_names'] = np.asarray(class_name_embeddings) + return batch + + +def add_image( + parser_builder: builders.BaseParserBuilder, + sampler_builder: builders.SamplerBuilder, + decoder_builder: builders.DecoderBuilder, + preprocessor_builder: builders.PreprocessorBuilder, + postprocessor_builder: builders.PostprocessorBuilder, + input_feature_name: str = 'image/encoded', + output_feature_name: str = builders.IMAGE_FEATURE_NAME, + is_training: bool = True, + # Video related parameters. + num_frames: int = 32, + stride: int = 1, + num_test_clips: int = 1, + resize_method: str = tf.image.ResizeMethod.BILINEAR, + target_size: Union[int, tuple[int, int]] = 224, + zero_centering_image: bool = False, + sync_random_state: bool = True, + is_rgb: Optional[bool] = True, + is_flow: bool = False, + random_flip: bool = True, + normalization_mean: Union[tf.Tensor, float] = 0, + normalization_std: Union[tf.Tensor, float] = 1, +) -> None: + """Adds functions to process image feature to builders. + + This function is branched from dmvr/modalities.py. The + difference is the resizing method. In this method, we resize the image to a + target size without keeping the aspect ratio while in the original one, the + images are first resized based on the shorter side and then cropped to the + target size. The same resizing method is used during Polymath's training. + + Args: + parser_builder: An instance of a `builders.BaseParserBuilder`. + sampler_builder: An instance of a `builders.SamplerBuilder`. + decoder_builder: An instance of a `builders.DecoderBuilder`. + preprocessor_builder: An instance of a `builders.PreprocessorBuilder`. + postprocessor_builder: An instance of a `builders.PostprocessorBuilder`. + input_feature_name: Name of the feature in the input `tf.train.Example` or + `tf.train.SequenceExample`. Exposing this as an argument allows using this + function for different image features within a single dataset. + output_feature_name: Name of the feature in the output features dictionary. + Exposing this as an argument allows using this function for different + image features within a single dataset. + is_training: Whether in training mode. If `True`, random sample, crop and + left right flip is used. + num_frames: Number of frames per subclip. For single images, use 1. + stride: Temporal stride to sample frames. + num_test_clips: Number of test clips (1 by default). If more than 1, this + will sample multiple linearly spaced clips within each video at test time. + If 1, then a single clip in the middle of the video is sampled. The clips + are aggregated in the batch dimension. + resize_method: A resizing method. + target_size: The final output size of the image. + zero_centering_image: If `True`, frames are normalized to values in [-1, 1]. + If `False`, values in [0, 1]. + sync_random_state: Whether to use stateful option to keep random operations + in sync between different modalities. All modalities having this option + `True` will use the same outcome in random operations such as sampling and + cropping. + is_rgb: If `True`, the number of channels in the JPEG is 3, if False, 1. If + is_flow is `True`, `is_rgb` should be set to `None` (see below). + is_flow: If `True`, the image is assumed to contain flow and will be + processed as such. Note that the number of channels in the JPEG for flow + is 3, but only two channels will be output corresponding to the valid + horizontal and vertical displacement. + random_flip: If `True`, a random horizontal flip is applied to the input + image. This augmentation may not be used if the label set contains + direction related classes, such as `pointing left`, `pointing right`, etc. + normalization_mean: value to subtract from the input image to normalize it. + normalization_std: value to divide by from the input image to normalize it. + """ + + # Validate parameters. + if is_flow and is_rgb is not None: + raise ValueError('`is_rgb` should be `None` when requesting flow.') + + if is_flow and not zero_centering_image: + raise ValueError( + 'Flow contains displacement values that can be negative, ' + 'but `zero_centering_image` was set to `False`.' + ) + + if is_training and num_test_clips != 1: + logging.info( + '`num_test_clips` %d is ignored since `is_training` is true.', + num_test_clips, + ) + + # Parse frames or single image. + if isinstance(parser_builder, builders.SequenceExampleParserBuilder): + parser_builder.parse_feature( + feature_name=input_feature_name, + feature_type=tf.io.FixedLenSequenceFeature((), dtype=tf.string), + output_name=output_feature_name, + ) + elif isinstance(parser_builder, builders.ExampleParserBuilder): + parser_builder.parse_feature( + feature_name=input_feature_name, + feature_type=tf.io.FixedLenFeature((), dtype=tf.string), + output_name=output_feature_name, + ) + # Expand dimensions so single images have the same structure as videos. + sampler_builder.add_fn( + fn=lambda x: tf.expand_dims(x, axis=0), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_expand_dims', + ) + else: + raise ValueError('`parser_builder` has an unexpected type.') + + # Temporal sampler. + if is_training: + # Sample random clip. + sampler_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x, s=None: processors.sample_sequence( + x, num_frames, True, stride, state=s + ), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_random_sample', + # Use state to keep coherence between modalities if requested. + stateful=sync_random_state, + ) + else: + if num_test_clips > 1: + # Sample linspace clips. + sampler_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x: processors.sample_linspace_sequence( + x, num_test_clips, num_frames, stride + ), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_linspace_sample', + ) + else: + # Sample middle clip. + sampler_builder.add_fn( + fn=lambda x: processors.sample_sequence(x, num_frames, False, stride), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_middle_sample', + ) + + # Decode JPEG string to `tf.uint8`. + # Note that for flow, 3 channels are stored in the JPEG: the first two + # corresponds to horizontal and vertical displacement, respectively. + # The last channel contains zeros and is dropped later in the preprocessing. + # Hence, the output number of channels for flow is 2. + num_raw_channels = 3 if (is_rgb or is_flow) else 1 + decoder_builder.add_fn( + fn=lambda x: processors.decode_jpeg(x, channels=num_raw_channels), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_decode_jpeg', + ) + + if is_flow: + # Cast the flow to `tf.float32`, normalizing between [-1.0, 1.0]. + preprocessor_builder.add_fn( + fn=lambda x: processors.normalize_image(x, zero_centering_image=True), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_normalize', + ) + + # Resize images (resize happens only if necessary to save compute). + if isinstance(target_size, int): + target_size = (target_size, target_size) + preprocessor_builder.add_fn( + fn=lambda x: tf.image.resize(x, target_size, method=resize_method), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_resize', + ) + + if is_training and random_flip: + preprocessor_builder.add_fn( + # pylint: disable=g-long-lambda + fn=lambda x, s=None: processors.random_flip_left_right( + x, state=s, is_flow=is_flow + ), + # pylint: enable=g-long-lambda + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_random_flip', + # Use state to keep coherence between modalities if requested. + stateful=sync_random_state, + ) + + if is_flow: + # Keep only two channels for the flow: horizontal and vertical displacement. + preprocessor_builder.add_fn( + fn=lambda x: x[:, :, :, :2], + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_extract_flow_channels', + ) + + # Clip the flow to stay between [-1.0 and 1.0] + preprocessor_builder.add_fn( + fn=lambda x: tf.clip_by_value(x, -1.0, 1.0), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_clip_flow', + ) + else: + # Cast the frames to `tf.float32`, normalizing according to + # `zero_centering_image`. + preprocessor_builder.add_fn( + fn=lambda x: processors.normalize_image(x, zero_centering_image), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_normalize', + ) + + preprocessor_builder.add_fn( + fn=lambda x: x - normalization_mean, + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_subtract_given_mean', + ) + + preprocessor_builder.add_fn( + fn=lambda x: x / normalization_std, + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_divide_by_given_std', + ) + + if num_test_clips > 1 and not is_training: + # In this case, multiple clips are merged together in batch dimension which + # will be `B * num_test_clips`. + postprocessor_builder.add_fn( + fn=lambda x: tf.reshape( # pylint: disable=g-long-lambda + x, (-1, num_frames, x.shape[2], x.shape[3], x.shape[4]) + ), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_reshape', + ) diff --git a/scenic/projects/unloc/datasets/highlight_detection_dataset.py b/scenic/projects/unloc/datasets/highlight_detection_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..d8100ccad2f24686b3363389961f33a6a6d8c12e --- /dev/null +++ b/scenic/projects/unloc/datasets/highlight_detection_dataset.py @@ -0,0 +1,145 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Registers highlight detection datasets.""" + +from typing import Optional + +from absl import logging +import jax.numpy as jnp +import ml_collections +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.projects.unloc.datasets import dataset_factory +from scenic.projects.unloc.datasets import moment_retrieval_dataset + +PRNGKey = jnp.ndarray + + +@datasets.add_dataset('highlight_detection_dataset') +def get_dataset(*, + batch_size: int, + eval_batch_size: int, + num_shards: int, + dtype_str: str = 'float32', + shuffle_seed: int = 0, + rng: Optional[PRNGKey] = None, + dataset_configs: Optional[ml_collections.ConfigDict] = None, + dataset_service_address: Optional[str] = None): + """Returns a generator for the moment retrieval dataset.""" + del rng, shuffle_seed, dataset_service_address + if dataset_configs is None: + raise ValueError( + 'dataset_configs must be set for moment retrieval dataset.') + if dataset_configs.get('base_dir') is None: + raise ValueError('base_dir must be specified for moment retrieval dataset') + if not dataset_configs.get('tables'): + raise ValueError( + 'tables mapping must be specified for moment retrieval dataset') + + tokenizers = moment_retrieval_dataset.init_tokenizers( + dataset_configs.modality_configs + ) + + train_iter, num_train_examples = ( + moment_retrieval_dataset.create_dataset_iterator( + dataset_configs, + 'train', + batch_size, + num_shards, + dataset_cls=dataset_factory.HighlightDetectionDatasetFactory, + tokenizers=tokenizers, + ) + ) + eval_iter, num_eval_examples = ( + moment_retrieval_dataset.create_dataset_iterator( + dataset_configs, + 'validation', + eval_batch_size, + num_shards, + dataset_cls=dataset_factory.HighlightDetectionDatasetFactory, + tokenizers=tokenizers, + ) + ) + test_batch_size = dataset_configs.get('test_batch_size', eval_batch_size) + test_iter, num_test_examples = ( + moment_retrieval_dataset.create_dataset_iterator( + dataset_configs, + 'test', + test_batch_size, + num_shards, + dataset_cls=dataset_factory.HighlightDetectionDatasetFactory, + tokenizers=tokenizers, + ) + ) + feature_pyramid_levels = dataset_configs.get( + 'feature_pyramid_config.feature_pyramid_levels', None) + feature_pyramid_downsample_stride = dataset_configs.get( + 'feature_pyramid_config.feature_pyramid_downsample_stride', 2) + if feature_pyramid_levels is None: + total_frames = dataset_configs.num_frames + else: + total_frames = sum([ + dataset_configs.num_frames // (feature_pyramid_downsample_stride**idx) + for idx in range(len(feature_pyramid_levels)) + ]) + meta_data = { + 'num_classes': 1, + 'num_train_examples': num_train_examples, + 'num_eval_examples': num_eval_examples, + 'num_test_examples': num_test_examples, + 'input_shape': { + 'input_mask': (-1, total_frames), + }, + 'input_dtype': { + 'input_mask': jnp.int32, + 'caption_mask': jnp.int32 + }, + 'target_is_onehot': True, + } + for modality_name, modality_config in dataset_configs.modality_configs.items( + ): + if modality_config.type == 'rgb': + meta_data['input_shape']['rgb'] = (-1, dataset_configs.num_frames, + modality_config.crop_size, + modality_config.crop_size, 3) + meta_data['input_dtype']['rgb'] = getattr(jnp, dtype_str) + if modality_config.type == 'flow': + meta_data['input_shape']['flow'] = ( + -1, + dataset_configs.num_frames, + modality_config.crop_size, + modality_config.crop_size, + 2, + ) + meta_data['input_dtype']['flow'] = getattr(jnp, dtype_str) + elif modality_config.type == 'text': + meta_data['input_shape'][modality_name] = { + 'input_word_ids': (-1, modality_config.max_num_tokens), + 'input_type_ids': (-1, modality_config.max_num_tokens), + 'input_mask': (-1, modality_config.max_num_tokens), + } + meta_data['input_dtype'][modality_name] = { + 'input_word_ids': jnp.int32, + 'input_type_ids': jnp.int32, + 'input_mask': jnp.int32, + } + elif modality_config.type == 'embedding': + meta_data['input_shape'][modality_name] = ( + -1, dataset_configs.num_frames, modality_config.feature_dimension) + meta_data['input_dtype'][modality_name] = getattr(jnp, dtype_str) + + logging.info('Dataset metadata:\n%s', meta_data) + + return dataset_utils.Dataset(train_iter, eval_iter, test_iter, meta_data) diff --git a/scenic/projects/unloc/datasets/moment_retrieval_dataset.py b/scenic/projects/unloc/datasets/moment_retrieval_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..0264c0c6b0da9bb8dc15322d6bb1feb595316d96 --- /dev/null +++ b/scenic/projects/unloc/datasets/moment_retrieval_dataset.py @@ -0,0 +1,319 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Registers moment retrieval datasets.""" + +import functools +from typing import Any, Dict, Iterator, Mapping, Optional, Tuple, Type + +from absl import logging +from dmvr import tokenizers as dmvr_tokenizers +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib import video_ops +from scenic.projects.unloc.datasets import dataset_factory +from scenic.projects.unloc.datasets import dataset_utils as dataset_utils_unloc +import tensorflow as tf + +PRNGKey = jnp.ndarray + + +def load_split_from_dmvr( + dataset_cls: Type[dataset_factory.MomentRetrievalDatasetFactory], + batch_size: int, + dataset_config: ml_collections.ConfigDict, + tokenizers: Mapping[str, dmvr_tokenizers.TextTokenizer], + subset: str = 'train', + keep_key: bool = False, +) -> Tuple[tf.data.Dataset, int]: + """Creates a moment retrieval dataset from file paths. + + Args: + dataset_cls: Dataset class. + batch_size: Batch size. + dataset_config: A dataset config. + tokenizers: Mapping from tokenizer name to TextTokenizer instances. + subset: 'train', 'validation' or 'test'. + keep_key: If true, also return the key for each example. + + Returns: + ds: A `tf.data.Dataset` object. + int, Number of examples in the subset. + """ + + ds_factory = dataset_cls( + base_dir=dataset_config.base_dir, + tables=dataset_config.tables, + examples_per_subset=dataset_config.examples_per_subset, + subset=subset, + num_groups=jax.process_count(), + group_index=jax.process_index()) + ds_factory = ds_factory.configure( + dataset_config, tokenizers, is_training=(subset == 'train')) + + # Only applies to `rgb` modality. + if ( + subset == 'train' + and 'rgb' in dataset_config.modality_configs + and dataset_config.modality_configs['rgb'].get('augmentation_params') + ): + ds_factory = video_ops.additional_augmentations( + ds_factory, + dataset_config.modality_configs['rgb'].augmentation_params, + dataset_config.modality_configs['rgb'].crop_size, + dataset_config.num_frames, + dataset_config.modality_configs['rgb'].get('zero_centering', True), + rgb_feature_name='rgb') + + logging.info('Preprocessing graph: %s', + ds_factory.preprocessor_builder.get_summary()) + logging.info('Postprocessing graph: %s', + ds_factory.postprocessor_builder.get_summary()) + + ds = ds_factory.make_dataset( + batch_size=batch_size, + shuffle=(subset == 'train'), + drop_remainder=(subset == 'train'), + keep_key=(subset != 'train' and keep_key)) + + if subset != 'train': + ds = ds.repeat(None) + + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + ds = ds.with_options(options) + + return ds, ds_factory.get_num_examples() + + +def map_keys( + batch: Dict[str, Any], + tokenizers: Mapping[str, dmvr_tokenizers.TextTokenizer], + config: ml_collections.ConfigDict, +) -> Dict[str, Any]: + """Changes key names for 'inputs'.""" + batch['inputs'] = {} + for name, modality_config in config.modality_configs.items(): + if modality_config.type == 'text': + batch['inputs'][name] = {} + input_mask = batch[name] != tokenizers[ + modality_config.tokenizer_type].pad_token + batch['inputs'][name]['input_mask'] = input_mask.astype(np.int32) + batch['inputs'][name]['input_type_ids'] = np.zeros_like( + batch[name], dtype=np.int32) + batch['inputs'][name]['input_word_ids'] = batch.pop(name) + elif modality_config.type == 'rgb': + batch['inputs']['rgb'] = batch.pop(name) + elif modality_config.type == 'flow': + batch['inputs']['flow'] = batch.pop(name) + elif modality_config.type == 'embedding': + batch['inputs'][name] = batch.pop(name) + + batch['inputs']['input_mask'] = batch.pop('input_mask') + if 'caption_mask' in batch: + batch['inputs']['caption_mask'] = batch.pop('caption_mask') + displacement_normalizer = config.get('displacement_normalizer', 'duration') + if displacement_normalizer == 'duration': + batch['displacements'] = batch['displacements'] / batch[ + 'total_frames'][:, None, None, None] + elif displacement_normalizer == 'sampled_span': + batch['displacements'] = batch['displacements'] / ( + config.num_frames * config.get('stride', 1)) + elif displacement_normalizer == 'none': + batch['displacements'] = batch['displacements'].astype(np.float32) + return batch + + +def init_tokenizers( + modality_configs: ml_collections.ConfigDict, +) -> Dict[str, dmvr_tokenizers.TextTokenizer]: + """Initializes text tokenizers.""" + tokenizers = {} + for _, config in modality_configs.items(): + if config.type != 'text': + continue + tokenizer_type = config.get('tokenizer_type', 'clip') + if tokenizer_type not in tokenizers: + tokenizers[tokenizer_type] = dataset_utils_unloc.init_tokenizer(config) + return tokenizers + + +def create_dataset_iterator( + dataset_configs: ml_collections.ConfigDict, + subset: str, + batch_size: int, + num_shards: int, + dataset_cls: Type[dataset_factory.MomentRetrievalDatasetFactory], + tokenizers: Mapping[str, dmvr_tokenizers.TextTokenizer], + keep_key: bool = False, +) -> Tuple[Iterator[Dict[str, jnp.ndarray]], int]: + """Creates a moment retrieval dataset iterator.""" + + is_training = subset == 'train' + logging.info('Loading split %s', subset) + + dataset, num_examples = load_split_from_dmvr( + dataset_cls=dataset_cls, + batch_size=batch_size, + dataset_config=dataset_configs, + tokenizers=tokenizers, + subset=subset, + keep_key=keep_key, + ) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + current_iter = iter(dataset) + current_iter = map(dataset_utils.tf_to_numpy, current_iter) + current_iter = map( + functools.partial( + map_keys, tokenizers=tokenizers, config=dataset_configs), + current_iter) + current_iter = map( + functools.partial( + dataset_utils.maybe_pad_batch, + train=is_training, + batch_size=batch_size, + inputs_key=None), current_iter) + current_iter = map(shard_batches, current_iter) + + if is_training and dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + current_iter = jax_utils.prefetch_to_device( + current_iter, dataset_configs.get('prefetch_to_device')) + + return current_iter, num_examples + + +@datasets.add_dataset('moment_retrieval_dataset') +def get_dataset(*, + batch_size: int, + eval_batch_size: int, + num_shards: int, + dtype_str: str = 'float32', + shuffle_seed: int = 0, + rng: Optional[PRNGKey] = None, + dataset_configs: Optional[ml_collections.ConfigDict] = None, + dataset_service_address: Optional[str] = None): + """Returns a generator for the moment retrieval dataset.""" + del rng, shuffle_seed, dataset_service_address + if dataset_configs is None: + raise ValueError( + 'dataset_configs must be set for moment retrieval dataset.') + if dataset_configs.get('base_dir') is None: + raise ValueError('base_dir must be specified for moment retrieval dataset') + if not dataset_configs.get('tables'): + raise ValueError( + 'tables mapping must be specified for moment retrieval dataset') + + tokenizers = init_tokenizers(dataset_configs.modality_configs) + + train_iter, num_train_examples = create_dataset_iterator( + dataset_configs, + 'train', + batch_size, + num_shards, + dataset_cls=dataset_factory.MomentRetrievalDatasetFactory, + tokenizers=tokenizers, + ) + eval_iter, num_eval_examples = create_dataset_iterator( + dataset_configs, + 'validation', + eval_batch_size, + num_shards, + dataset_cls=dataset_factory.MomentRetrievalDatasetFactory, + tokenizers=tokenizers, + ) + test_batch_size = dataset_configs.get('test_batch_size', eval_batch_size) + test_iter, num_test_examples = create_dataset_iterator( + dataset_configs, + 'test', + test_batch_size, + num_shards, + dataset_cls=dataset_factory.MomentRetrievalDatasetFactory, + tokenizers=tokenizers, + ) + feature_pyramid_levels = dataset_configs.get( + 'feature_pyramid_config.feature_pyramid_levels', None) + feature_pyramid_downsample_stride = dataset_configs.get( + 'feature_pyramid_config.feature_pyramid_downsample_stride', 2) + if feature_pyramid_levels is None: + total_frames = dataset_configs.num_frames + else: + total_frames = sum([ + dataset_configs.num_frames // (feature_pyramid_downsample_stride**idx) + for idx in range(len(feature_pyramid_levels)) + ]) + meta_data = { + 'num_classes': 1, + 'num_train_examples': num_train_examples, + 'num_eval_examples': num_eval_examples, + 'num_test_examples': num_test_examples, + 'input_shape': { + 'input_mask': (-1, total_frames), + 'caption_mask': (-1, dataset_configs.train_max_num_captions), + }, + 'input_dtype': {'input_mask': jnp.int32, 'caption_mask': jnp.int32}, + 'target_is_onehot': True, + } + for modality_name, modality_config in dataset_configs.modality_configs.items( + ): + if modality_config.type == 'rgb': + meta_data['input_shape']['rgb'] = (-1, dataset_configs.num_frames, + modality_config.crop_size, + modality_config.crop_size, 3) + meta_data['input_dtype']['rgb'] = getattr(jnp, dtype_str) + if modality_config.type == 'flow': + meta_data['input_shape']['flow'] = ( + -1, + dataset_configs.num_frames, + modality_config.crop_size, + modality_config.crop_size, + 2, + ) + meta_data['input_dtype']['flow'] = getattr(jnp, dtype_str) + elif modality_config.type == 'text': + meta_data['input_shape'][modality_name] = { + 'input_word_ids': ( + -1, + dataset_configs.train_max_num_captions, + modality_config.max_num_tokens, + ), + 'input_type_ids': ( + -1, + dataset_configs.train_max_num_captions, + modality_config.max_num_tokens, + ), + 'input_mask': ( + -1, + dataset_configs.train_max_num_captions, + modality_config.max_num_tokens, + ), + } + meta_data['input_dtype'][modality_name] = { + 'input_word_ids': jnp.int32, + 'input_type_ids': jnp.int32, + 'input_mask': jnp.int32, + } + elif modality_config.type == 'embedding': + meta_data['input_shape'][modality_name] = ( + -1, dataset_configs.num_frames, modality_config.feature_dimension) + meta_data['input_dtype'][modality_name] = getattr(jnp, dtype_str) + + logging.info('Dataset metadata:\n%s', meta_data) + + return dataset_utils.Dataset(train_iter, eval_iter, test_iter, meta_data) diff --git a/scenic/projects/unloc/datasets/temporal_localization_dataset.py b/scenic/projects/unloc/datasets/temporal_localization_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..ed3cbcce2a8ac6337e6b2f6ab3d7bb53a62b4496 --- /dev/null +++ b/scenic/projects/unloc/datasets/temporal_localization_dataset.py @@ -0,0 +1,362 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Registers temporal localization datasets.""" + +import functools +from typing import Any, Callable, Dict, Iterator, Optional, Tuple, Type + +from absl import logging +from dmvr import tokenizers as dmvr_tokenizers +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib import video_ops +from scenic.projects.unloc.datasets import dataset_factory +from scenic.projects.unloc.datasets import dataset_utils as dataset_utils_unloc +import tensorflow as tf + +PRNGKey = jnp.ndarray + + +def load_split_from_dmvr( + dataset_cls: Type[dataset_factory.TemporalLocalizationDatasetFactory], + batch_size: int, + dataset_config: ml_collections.ConfigDict, + subset: str = 'train', + keep_key: bool = False, +) -> Tuple[tf.data.Dataset, int]: + """Creates a temporal localization dataset from file paths. + + Args: + dataset_cls: Dataset class. + batch_size: Batch size. + dataset_config: A dataset config. + subset: 'train', 'validation' or 'test'. + keep_key: If true, also return the key for each example. + + Returns: + ds: A `tf.data.Dataset` object. + int, Number of examples in the subset. + """ + + ds_factory = dataset_cls( + base_dir=dataset_config.base_dir, + tables=dataset_config.tables, + examples_per_subset=dataset_config.examples_per_subset, + subset=subset, + num_groups=jax.process_count(), + group_index=jax.process_index()) + ds_factory = ds_factory.configure( + dataset_config, is_training=(subset == 'train')) + + # Only applies to `rgb` modality. + if ( + subset == 'train' + and 'rgb' in dataset_config.modality_configs + and dataset_config.modality_configs['rgb'].get('augmentation_params') + ): + ds_factory = video_ops.additional_augmentations( + ds_factory, + dataset_config.modality_configs['rgb'].augmentation_params, + dataset_config.modality_configs['rgb'].crop_size, + dataset_config.num_frames, + dataset_config.modality_configs['rgb'].get('zero_centering', True), + rgb_feature_name='rgb') + + logging.info('Preprocessing graph: %s', + ds_factory.preprocessor_builder.get_summary()) + logging.info('Postprocessing graph: %s', + ds_factory.postprocessor_builder.get_summary()) + + ds = ds_factory.make_dataset( + batch_size=batch_size, + shuffle=(subset == 'train'), + drop_remainder=(subset == 'train'), + keep_key=(subset != 'train' and keep_key)) + + if subset != 'train': + ds = ds.repeat(None) + + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + ds = ds.with_options(options) + + return ds, ds_factory.get_num_examples() + + +def map_keys(batch: Dict[str, Any], + config: ml_collections.ConfigDict) -> Dict[str, Any]: + """Changes key names for 'inputs'.""" + batch['inputs'] = {} + for modality in config.modality_configs.keys(): + batch['inputs'][modality] = batch.pop(modality) + batch['inputs']['input_mask'] = batch.pop('input_mask') + displacement_normalizer = config.get('displacement_normalizer', 'duration') + if displacement_normalizer == 'duration': + batch['displacements'] = batch['displacements'] / batch[ + 'total_frames'][:, None, None, None] + elif displacement_normalizer == 'sampled_span': + batch['displacements'] = batch['displacements'] / ( + config.num_frames * config.get('stride', 1)) + elif displacement_normalizer == 'none': + batch['displacements'] = batch['displacements'].astype(np.float32) + return batch + + +def create_dataset_iterator( + dataset_configs: ml_collections.ConfigDict, + subset: str, + batch_size: int, + num_shards: int, + dataset_cls: Type[dataset_factory.TemporalLocalizationDatasetFactory], + map_key_fn: Callable[[Dict[str, Any], ml_collections.ConfigDict], + Dict[str, Any]], + keep_key: bool = False, + class_name_ids: Optional[jnp.ndarray] = None, + tokenizer: Optional[dmvr_tokenizers.TextTokenizer] = None, + num_prompts: int = 1, + class_name_embeddings: Optional[jnp.ndarray] = None, +) -> Tuple[Iterator[Dict[str, jnp.ndarray]], int]: + """Creates a temporal localization dataset iterator.""" + + is_training = subset == 'train' + logging.info('Loading split %s', subset) + + dataset, num_examples = load_split_from_dmvr( + dataset_cls=dataset_cls, + batch_size=batch_size, + dataset_config=dataset_configs, + subset=subset, + keep_key=keep_key, + ) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + current_iter = iter(dataset) + current_iter = map(dataset_utils.tf_to_numpy, current_iter) + current_iter = map( + functools.partial(map_key_fn, config=dataset_configs), current_iter) + current_iter = map( + functools.partial( + dataset_utils.maybe_pad_batch, + train=is_training, + batch_size=batch_size, + inputs_key=None), current_iter) + if dataset_configs.get('class_name_csv') is not None: + current_iter = map( + functools.partial( + dataset_utils_unloc.add_class_names, + class_name_ids=class_name_ids, + tokenizer=tokenizer, + exec_mode=subset, + num_prompts=num_prompts, + ), + current_iter, + ) + if dataset_configs.get('class_name_embedding_npy') is not None: + current_iter = map( + functools.partial( + dataset_utils_unloc.add_class_name_embeddings, + class_name_embeddings=class_name_embeddings, + exec_mode=subset, + ), + current_iter, + ) + current_iter = map(shard_batches, current_iter) + + if is_training and dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + current_iter = jax_utils.prefetch_to_device( + current_iter, dataset_configs.get('prefetch_to_device')) + + return current_iter, num_examples + + +@datasets.add_dataset('temporal_localization_dataset') +def get_dataset(*, + batch_size: int, + eval_batch_size: int, + num_shards: int, + dtype_str: str = 'float32', + shuffle_seed: int = 0, + rng: Optional[PRNGKey] = None, + dataset_configs: Optional[ml_collections.ConfigDict] = None, + dataset_service_address: Optional[str] = None): + """Returns a generator for the temporal localization dataset.""" + del rng, shuffle_seed, dataset_service_address + if dataset_configs is None: + raise ValueError( + 'dataset_configs must be set for temporal localization dataset.') + if dataset_configs.get('base_dir') is None: + raise ValueError( + 'base_dir must be specified for temporal localization dataset') + if not dataset_configs.get('tables'): + raise ValueError( + 'tables mapping must be specified for temporal localization dataset') + + class_name_ids = None + tokenizer = None + class_name_embeddings = None + num_prompts = 1 + if dataset_configs.get('class_name_csv') is not None: + class_names = dataset_utils_unloc.read_strings_from_csv( + dataset_configs.class_name_csv + ) + if len(class_names) != dataset_configs.num_classes: + raise ValueError( + 'Number of class names does not match "dataset_configs.num_classes".') + tokenizer = dataset_utils_unloc.init_tokenizer( + dataset_configs.tokenizer_config + ) + if dataset_configs.get('prompt_csv') is not None: + prompts = dataset_utils_unloc.read_strings_from_csv( + dataset_configs.prompt_csv + ) + num_prompts = len(prompts) + augmented_class_names = [] + for name in class_names: + augmented_class_names.extend(prompt.format(name) for prompt in prompts) + else: + augmented_class_names = class_names + class_name_ids = dataset_utils_unloc.tokenize_class_names( + tokenizer, dataset_configs.tokenizer_config, augmented_class_names + ) + + if dataset_configs.get('class_name_embedding_npy') is not None: + class_name_embeddings = dataset_utils_unloc.read_string_embeddings( + dataset_configs.class_name_embedding_npy + ) + num_prompts = class_name_embeddings.shape[1] + assert class_name_embeddings.shape[0] == dataset_configs.num_classes + + train_iter, num_train_examples = create_dataset_iterator( + dataset_configs, + 'train', + batch_size, + num_shards, + dataset_cls=dataset_factory.TemporalLocalizationDatasetFactory, + map_key_fn=map_keys, + class_name_ids=class_name_ids, + tokenizer=tokenizer, + num_prompts=num_prompts, + class_name_embeddings=class_name_embeddings) + eval_iter, num_eval_examples = create_dataset_iterator( + dataset_configs, + 'validation', + eval_batch_size, + num_shards, + dataset_cls=dataset_factory.TemporalLocalizationDatasetFactory, + map_key_fn=map_keys, + class_name_ids=class_name_ids, + tokenizer=tokenizer, + num_prompts=num_prompts, + class_name_embeddings=class_name_embeddings) + test_batch_size = dataset_configs.get('test_batch_size', eval_batch_size) + test_iter, num_test_examples = create_dataset_iterator( + dataset_configs, + 'test', + test_batch_size, + num_shards, + dataset_cls=dataset_factory.TemporalLocalizationDatasetFactory, + map_key_fn=map_keys, + class_name_ids=class_name_ids, + tokenizer=tokenizer, + num_prompts=num_prompts, + class_name_embeddings=class_name_embeddings) + feature_pyramid_levels = dataset_configs.get( + 'feature_pyramid_config.feature_pyramid_levels', None) + feature_pyramid_downsample_stride = dataset_configs.get( + 'feature_pyramid_config.feature_pyramid_downsample_stride', 2) + if feature_pyramid_levels is None: + total_frames = dataset_configs.num_frames + else: + total_frames = sum([ + dataset_configs.num_frames // (feature_pyramid_downsample_stride**idx) + for idx in range(len(feature_pyramid_levels)) + ]) + meta_data = { + 'num_classes': dataset_configs.num_classes, + 'num_train_examples': num_train_examples, + 'num_eval_examples': num_eval_examples, + 'num_test_examples': num_test_examples, + 'input_shape': { + 'input_mask': (-1, total_frames) + }, + 'input_dtype': { + 'input_mask': jnp.int32 + }, + 'target_is_onehot': True, + } + for modality_name, modality_config in dataset_configs.modality_configs.items( + ): + if modality_config.type == 'rgb': + meta_data['input_shape']['rgb'] = (-1, dataset_configs.num_frames, + modality_config.crop_size, + modality_config.crop_size, 3) + meta_data['input_dtype']['rgb'] = getattr(jnp, dtype_str) + if modality_config.type == 'flow': + meta_data['input_shape']['flow'] = ( + -1, + dataset_configs.num_frames, + modality_config.crop_size, + modality_config.crop_size, + 2, + ) + meta_data['input_dtype']['flow'] = getattr(jnp, dtype_str) + if modality_config.type == 'spectrogram': + meta_data['input_shape']['spectrogram'] = ( + -1, + dataset_configs.num_frames, + modality_config.spec_shape[0], + modality_config.spec_shape[1], + 3 if modality_config.inflate_spectrograms else 1, + ) + meta_data['input_dtype']['spectrogram'] = getattr(jnp, dtype_str) + if modality_config.type == 'embedding': + meta_data['input_shape'][modality_name] = ( + -1, dataset_configs.num_frames, modality_config.feature_dimension) + meta_data['input_dtype'][modality_name] = getattr(jnp, dtype_str) + if modality_config.type == 'video_embedding': + meta_data['input_shape'][modality_name] = ( + -1, + 1, + modality_config.feature_dimension, + ) + meta_data['input_dtype'][modality_name] = getattr(jnp, dtype_str) + + if dataset_configs.get('class_name_csv') is not None: + meta_data['input_shape']['class_names'] = { + 'input_word_ids': (-1, dataset_configs.num_classes, + dataset_configs.tokenizer_config.max_num_tokens), + 'input_type_ids': (-1, dataset_configs.num_classes, + dataset_configs.tokenizer_config.max_num_tokens), + 'input_mask': (-1, dataset_configs.num_classes, + dataset_configs.tokenizer_config.max_num_tokens), + } + meta_data['input_dtype']['class_names'] = { + 'input_word_ids': jnp.int32, + 'input_type_ids': jnp.int32, + 'input_mask': jnp.int32, + } + if dataset_configs.get('class_name_embedding_npy') is not None: + meta_data['input_shape']['class_names'] = (-1, dataset_configs.num_classes, + class_name_embeddings.shape[-1]) # pytype: disable=attribute-error + meta_data['input_dtype']['class_names'] = getattr(jnp, dtype_str) + + logging.info('Dataset metadata:\n%s', meta_data) + + return dataset_utils.Dataset(train_iter, eval_iter, test_iter, meta_data) diff --git a/scenic/projects/unloc/encoders.py b/scenic/projects/unloc/encoders.py new file mode 100644 index 0000000000000000000000000000000000000000..89e074e27d5b2f52bee621fe5db0c827b8705c26 --- /dev/null +++ b/scenic/projects/unloc/encoders.py @@ -0,0 +1,601 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Wraps video and text encoders to have the same API. + +All video encoders have the same __call__ function as follows: + +@nn.compact +def __call__(self, x: jnp.ndarray, *, train: bool, debug: bool = False): + # implementation goes here + +All text encoders have the same __call__ function as follows: + +@nn.compact +def __call__(self, x: Dict[str, jnp.ndarray],, *, train: bool, debug: bool = +False): + # implementation goes here +""" + +import functools +from typing import Callable, Dict, Optional, Sequence + +from absl import logging +import einops +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.layers import attention_layers +from scenic.model_lib.layers import nn_layers +from scenic.projects.baselines import vit +from scenic.projects.baselines.clip import layers as clip_layers + + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +class TransformerEncoder1DBlock(nn.Module): + """Transformer encoder layer. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: Number of self-attention heads. + dtype: The dtype of the computation (default: float32). + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_depth: probability of dropping a layer linearly grows from 0 to + the provided value. + + Returns: + output after transformer encoder block. + """ + + mlp_dim: int + num_heads: int + kernel_init: Initializer = nn.initializers.xavier_uniform() + dtype: jnp.dtype = jnp.float32 + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + + @nn.compact + def __call__( + self, + inputs: jnp.ndarray, + input_mask: Optional[jnp.ndarray] = None, + deterministic: bool = False, + ) -> jnp.ndarray: + """Applies Encoder1DBlock module. + + Args: + inputs: Input data of shape (batch, sequence_length, channels). + input_mask: Input mask of shape (batch, sequence_length). Only applicable + for text encoder. + deterministic: Deterministic or not (to apply dropout). + + Returns: + Output after transformer encoder block. + """ + # Attention block. + assert inputs.ndim == 3 + x = nn.LayerNorm(dtype=self.dtype)(inputs) + + if input_mask is not None: + attention_mask = input_mask[:, None, None, :] * jnp.ones( + [1, 1, x.shape[1], 1] + ) + else: + attention_mask = None + + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + dtype=self.dtype, + kernel_init=nn.initializers.xavier_uniform(), + broadcast_dropout=False, + dropout_rate=self.attention_dropout_rate, + name='MultiHeadAttention_0', + )(x, x, mask=attention_mask, deterministic=deterministic) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic) + x = nn_layers.StochasticDepth(rate=self.stochastic_depth)(x, deterministic) + x = x + inputs + # We don't want to overwrite x for residual connection. + y = nn.LayerNorm(dtype=self.dtype)(x) + y = attention_layers.MlpBlock( # pytype: disable=wrong-arg-types # jnp-type + mlp_dim=self.mlp_dim, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6), + )(y, deterministic=deterministic) + y = nn_layers.StochasticDepth(rate=self.stochastic_depth)(y, deterministic) + y = y + x + return y + + +class TransformerEncoder(nn.Module): + """Transformer encoder. + + Attributes: + num_layers: Number of layers. + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: Number of heads. + positional_embedding: 'learned', 'sinusoid', or 'none'. + dropout_rate: Dropout rate. + attention_dropout_rate: Attention dropout rate. + stochastic_depth: probability of dropping a layer linearly grows from 0 to + the provided value. Our implementation of stochastic depth follows the + timm library, which does per-example layer dropping and uses independent + dropping patterns for each skip-connection. + dtype: Dtype of activations. + """ + + num_layers: int + mlp_dim: int + num_heads: int + positional_embedding: str = 'learned' + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + dtype: jnp.dtype = jnp.float32 + + def _add_positional_embedding(self, inputs: jnp.ndarray) -> jnp.ndarray: + """Adds positional embedding.""" + posemb = jnp.zeros_like(inputs) + if self.positional_embedding == 'learned': + posemb = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name='posembed_input', + )(posemb) + elif self.positional_embedding == 'sinusoid': + posemb = attention_layers.Add1DPositionEmbedding(posemb_init=None)(posemb) + elif self.positional_embedding == 'none': + logging.info('No positional embedding is used.') + else: + raise ValueError( + f'Invalid positional_embedding: {self.positional_embedding}.' + ) + + inputs += posemb + return inputs + + @nn.compact + def __call__( + self, + inputs: jnp.ndarray, + input_mask: Optional[jnp.ndarray] = None, + train: bool = False, + ): + """Applies Transformer model on the inputs.""" + + assert inputs.ndim == 3 # Shape is `[batch, len, emb]`. + dtype = jax.dtypes.canonicalize_dtype(self.dtype) + x = self._add_positional_embedding(inputs) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + for lyr in range(self.num_layers): + x = TransformerEncoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=(lyr / max(self.num_layers - 1, 1)) + * self.stochastic_depth, + name=f'encoderblock_{lyr}', + dtype=dtype, + )(x, input_mask=input_mask, deterministic=not train) + x = nn.LayerNorm(name='encoder_norm')(x) + return x + + +class ResidualAttentionBlock(nn.Module): + """Self-attention block of Transformer. + + Branched from clip_layers with additional attribute `stochastic_depth` added. + + Attributes: + num_heads: Number of heads. + stochastic_depth: Probability of dropping a layer. + """ + num_heads: int + stochastic_depth: float = 0.0 + + @nn.compact + def __call__( + self, + x: jnp.ndarray, + attn_mask: Optional[jnp.ndarray], + deterministic: bool, + ) -> jnp.ndarray: + xn = clip_layers.LayerNorm(name='ln_1')(x) + xn = nn.SelfAttention( + self.num_heads, name='attn', deterministic=True)(xn, attn_mask) + xn = nn_layers.StochasticDepth(rate=self.stochastic_depth)(xn, + deterministic) + x = x + xn + + y = clip_layers.LayerNorm(name='ln_2')(x) + y = clip_layers.MLP(name='mlp')(y) + y = nn_layers.StochasticDepth(rate=self.stochastic_depth)(y, deterministic) + return x + y + + @functools.partial(nn.remat, static_argnums=(3,)) + def remat_call( + self, + x: jnp.ndarray, + attn_mask: Optional[jnp.ndarray], + deterministic: bool, + ) -> jnp.ndarray: + return self(x, attn_mask, deterministic) + + +class ClipTransformer(nn.Module): + """Clip Transformer module. + + Attributes: + features: Number of features. + num_layers: Number of layers for each block. + num_heads: Number of heads. + use_underscore_module_name: Optionally replace '.' with '_' in parameter + naming for PAX checkpoint loading. This follows `Transformer` defined in + third_party/py/scenic/projects/baselines/clip/layers.py. + stochastic_depth: Probability of dropping a layer linearly grows from 0 to + the provided value. + """ + + features: int + num_layers: int + num_heads: int + use_underscore_module_name: bool = False + stochastic_depth: float = 0.0 + remat_block: bool = False + + @nn.compact + def __call__(self, + x: jnp.ndarray, + attn_mask: Optional[jnp.ndarray] = None, + train: bool = False) -> jnp.ndarray: + + def _n(name): + """A helper function that optionally replace '.' with '_'.""" + if self.use_underscore_module_name: + return name.replace('.', '_') + else: + return name + + for i in range(self.num_layers): + sd = (i / max(self.num_layers - 1, 1)) * self.stochastic_depth + block = ResidualAttentionBlock( + num_heads=self.num_heads, + stochastic_depth=sd, + name=_n(f'resblocks.{i}'), + ) + if self.remat_block: + x = block.remat_call(x, attn_mask, not train) + else: + x = block(x, attn_mask, not train) + return x + + +class ClipVisionTransformer(nn.Module): + r"""Clip Vision Transformer. + + This class is branched from third_party/py/scenic/projects/baselines/clip/\ + layers.py. The difference is that in the __call__ function we pass in the + class_embedding because we want each frame to have a different class + embedding. + + Attributes: + patches: patches.size is a three element tuple representing the tubelet + sizes as (height, width, time). + features: Number of features. + num_layers: Number of transformer blocks (self-attn + MLP). + num_heads: Number of attention heads. + out_features: Number of output features. If None, return transformer output. + classifier: 'token' or 'gap'. + stochastic_depth: Probability of dropping a layer linearly grows from 0 to + the provided value. + """ + patches: ml_collections.ConfigDict + features: int + num_layers: int + num_heads: int + out_features: Optional[int] = None + classifier: str = 'token' + stochastic_depth: float = 0.0 + remat_block: bool = False + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, + x: jnp.ndarray, + class_embedding: Optional[jnp.ndarray] = None, + attn_mask: Optional[jnp.ndarray] = None, + is_train: bool = False) -> jnp.ndarray: + """Executes the transformer encoder. + + Args: + x: A 3D float tensor of shape (batch_size, sequence_length, features) + representing the tubelet tokens. + class_embedding: 1D float tensor of shape (features,) representing the + class embedding. This is only used when classifier = `token`. + attn_mask: Optional. Attention mask. + is_train: Whether or not the model is in training. + + Returns: + Encoded tokens. They have a shape of (batch_size, sequence_length, + features) if out_features is None and (batch_size, out_features) + otherwise. + """ + if self.classifier == 'token': + x = jnp.concatenate((jnp.tile(class_embedding[None, None, :], + (x.shape[0], 1, 1)), x), + axis=1) + scale = 1.0 / jnp.sqrt(self.features) + positional_embedding = self.param('positional_embedding', + jax.nn.initializers.normal(stddev=scale), + (x.shape[1], self.features), x.dtype) + x = x + positional_embedding[None] + + x = clip_layers.LayerNorm(dtype=self.dtype, name='ln_pre')(x) + x = ClipTransformer( + features=self.features, + num_layers=self.num_layers, + num_heads=self.num_heads, + stochastic_depth=self.stochastic_depth, + remat_block=self.remat_block, + name='transformer', + )(x, attn_mask=attn_mask, train=is_train) + + if self.out_features is not None: + x = clip_layers.LayerNorm(dtype=self.dtype, name='ln_post')(x[:, 0]) + x = nn.Dense( + self.out_features, use_bias=False, dtype=self.dtype, name='proj')( + x) + else: + x = clip_layers.LayerNorm(dtype=self.dtype, name='ln_post')(x) + + return x + + +class ClipVideoTower(nn.Module): + """Implements CLIP video tower. + + Attributes: + num_classes: Number of output classes. + image_encoder_config: Configuration of the frame encoder. + temporal_encoder_config: Configuration of the temporal encoder. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + representation_size: Size of the representation layer in the model's head. + if None, we skip the extra projection + tanh activation at the end. + final_endpoint: The name of the output endpoint, 'logits', + 'temporal_tokens', or 'pre_logits'. When final_endpoint is 'logits', the + output has a shape of (batch_size, num_classes). When final_endpoint is + 'temporal_tokens', the output shape is (batch_size, time, channels). When + final_endpoint is 'pre_logits', the output shape is (batch_size, time, + height, width, channels) when keep_spatiotemporal_features is True and + (batch_size, channels) when it is False. + dtype: JAX data type for activations. + """ + + num_classes: int + image_encoder_config: ml_collections.ConfigDict + temporal_encoding_config: ml_collections.ConfigDict + temporal_encoder_config: Optional[ml_collections.ConfigDict] = None + representation_size: Optional[int] = None + classifier: str = 'token' + final_endpoint: str = 'logits' + dtype: jnp.dtype = jnp.float32 + + def _add_cls_token(self, x: jnp.ndarray) -> jnp.ndarray: + """Prepends CLS token. + + Args: + x: A 3D float tensor of shape (batch, sequence_len, channels) representing + the tokens. + + Returns: + A 3D float tensor with prepended CLS token. Its new shape is (batch, + sequence_len+1, channels). + """ + if self.classifier == 'token': + bs, _, c = x.shape + cls = self.param('cls', nn.initializers.zeros, (1, 1, c), x.dtype) + cls = jnp.tile(cls, [bs, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + return x + + def _extract_encoder_output(self, + x: jnp.ndarray, + axis: int = 1) -> jnp.ndarray: + """Extracts encoder output.""" + if self.classifier in ['token', '0']: + x = x.take(indices=0, axis=axis) + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=list(range(axis, x.ndim - 1))) + else: + raise ValueError(f'Unknown classifier `{self.classifier}`.') + return x + + def _temporal_encode(self, x: jnp.ndarray, is_train: bool) -> jnp.ndarray: + """Encodes the tokens in the temporal dimension.""" + # CLIP uses CLS token as embeddings. + if self.image_encoder_config.get('classifier', 'token') == 'token': + x = x[:, :, 0] + else: + x = jnp.mean(x, axis=2) + if self.temporal_encoder_config is None: + return jnp.mean(x, axis=1) + temporal_encoder = TransformerEncoder( + dtype=self.dtype, + name='TemporalTransformer', + **self.temporal_encoder_config, # pylint: disable=not-a-mapping + ) # pylint:disable=not-a-mapping + self._add_cls_token(x) + x = temporal_encoder(x, train=is_train) + x = self._extract_encoder_output(x, axis=1) + return x + + def _image_to_patch(self, vid: jnp.ndarray, patch_size: int) -> jnp.ndarray: + """Converts an image to patches. + + Args: + vid: A 5D tensor of shape [B, T, H, W, C]. + patch_size: integer, dimension of a square patch. + + Returns: + Flattened patches of shape [B, T, (H * W / P^2), P^2 * C]. + """ + + _, height, width, channels = vid.shape[1:] + + if height % patch_size != 0 or width % patch_size != 0: + raise ValueError( + f'Image height ({height}) and width ({width}) should be multiples ' + f'of patch_size ({patch_size}).' + ) + + row_blocks = height // patch_size + column_blocks = width // patch_size + + return einops.rearrange( + vid, + '... (m p)(n q) c->...(m n)(p q c)', + m=row_blocks, + n=column_blocks, + p=patch_size, + q=patch_size, + c=channels, + ) + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, debug: bool = False): + """Executes the CLIP video tower. + + Args: + x: A 5D float tensor of shape (batch_size, num_frames, height, width, 3) + representing the input images. + train: Whether or not the model is under training. + debug: whether or not it is in debug mode. + + Returns: + tokens after the image encoder if final_endpoint = 'temporal_tokens', + pre_logits before the final projection layer if final_endpoint = + 'pre_logits', logits if final_endpoint = 'logits'. + """ + assert ( + self.image_encoder_config.patches.size[0] + == self.image_encoder_config.patches.size[1] + ) + x = self._image_to_patch(x, self.image_encoder_config.patches.size[0]) + x = nn.Dense( + self.image_encoder_config.features, use_bias=False, name='conv1' + )(x) + features = self.image_encoder_config.features + scale = 1.0 / jnp.sqrt(features) + per_frame_encoder = functools.partial( + ClipVisionTransformer( + name='VisionTransformer', **self.image_encoder_config + ), + is_train=train, + ) + image_encoder_classifier = self.image_encoder_config.get( + 'classifier', 'token') + if image_encoder_classifier == 'token': + num_frames = x.shape[1] + class_embedding = self.param('class_embedding', + jax.nn.initializers.normal(stddev=scale), + (num_frames, features), x.dtype) + x = jax.vmap( + per_frame_encoder, in_axes=[1, 0], out_axes=1)(x, class_embedding) + else: + x = jax.vmap(per_frame_encoder, in_axes=1, out_axes=1)(x) + if self.final_endpoint == 'temporal_tokens': + if image_encoder_classifier == 'token': + return x[:, :, 0] + else: + return jnp.mean(x, axis=2) + x = self._temporal_encode(x, train) + if self.representation_size is not None: + x = nn.Dense(self.representation_size, name='proj')(x) + x = nn.tanh(x) + if self.final_endpoint == 'pre_logits': + return x + x = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + dtype=self.dtype, + name='output_projection')( + x) + return x + + +class ClipTextEncoder(nn.Module): + """CLIP text encoder.""" + + vocab_size: int + num_layers: int + hidden_size: int + num_heads: int + dtype: jnp.dtype = jnp.float32 + classifier: str = 'eos' + remat_block: bool = False + + @nn.compact + def __call__(self, + inputs: Dict[str, jnp.ndarray], + *, + train: bool, + debug: bool = False): + assert self.classifier == 'eos' + text = inputs['input_word_ids'] + positional_embedding = self.param('positional_embedding', + jax.nn.initializers.zeros, + (text.shape[1], self.hidden_size), + self.dtype) + mask = nn.combine_masks( + nn.make_attention_mask(text > 0, text > 0), nn.make_causal_mask(text)) + x = nn.Embed( + self.vocab_size, + self.hidden_size, + dtype=self.dtype, + name='token_embedding')( + text) + x = x + positional_embedding[None] + x = ClipTransformer( + self.hidden_size, + self.num_layers, + self.num_heads, + remat_block=self.remat_block, + name='transformer', + )(x, attn_mask=mask, train=False) + return clip_layers.LayerNorm(dtype=self.dtype, name='ln_final')(x) + + +class PassThroughEncoder(nn.Module): + """An encoder that simply copies the input to the output.""" + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, train: bool, debug: bool = False): + del train, debug + return inputs + +ENCODERS = { + 'clip_text_encoder': ClipTextEncoder, + 'clip_video_encoder': ClipVideoTower, + # This one is mainly for precomputed embeddings. + 'pass_through_encoder': PassThroughEncoder, +} diff --git a/scenic/projects/unloc/encoders_test.py b/scenic/projects/unloc/encoders_test.py new file mode 100644 index 0000000000000000000000000000000000000000..eeb23fdca1e634a15ffb33b2db9f8db259ea1760 --- /dev/null +++ b/scenic/projects/unloc/encoders_test.py @@ -0,0 +1,84 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for encoders.""" + +from absl.testing import absltest +from absl.testing import parameterized +from jax import random +import ml_collections +import numpy as np +from scenic.projects.unloc import encoders + + +class EncodersTest(parameterized.TestCase): + + def setUp(self): + super().setUp() + self.temporal_encoding_config = ml_collections.ConfigDict({ + 'method': '3d_conv', + 'kernel_init_method': 'central_frame_initializer', + }) + self.image_encoder_config = ml_collections.ConfigDict({ + 'num_layers': 2, + 'features': 8, + 'patches': ml_collections.ConfigDict({ + 'size': (4, 4, 1), + }), + 'num_heads': 2, + 'classifier': 'token', + }) + + @parameterized.parameters( + ('token', 'logits', (2, 10)), + ('token', 'pre_logits', (2, 8)), + ('token', 'temporal_tokens', (2, 2, 8)), + ) + def test_clip_video_tower(self, image_encoder_classifier, final_endpoint, + expected_output_shape): + rng = random.PRNGKey(0) + inputs = np.ones((2, 2, 8, 8, 3)) + self.image_encoder_config.classifier = image_encoder_classifier + output, _ = encoders.ClipVideoTower( + image_encoder_config=self.image_encoder_config, + temporal_encoding_config=self.temporal_encoding_config, + temporal_encoder_config=None, + num_classes=10, + final_endpoint=final_endpoint, + ).init_with_output(rng, inputs, train=False, debug=False) + self.assertTupleEqual(output.shape, expected_output_shape) + + def test_clip_text_encoder(self): + rng = random.PRNGKey(0) + inputs = { + 'input_word_ids': np.ones((2, 10), np.int32), + 'input_type_ids': np.zeros((2, 10), np.int32), + 'input_mask': np.ones((2, 10), np.int32), + } + output, _ = encoders.ClipTextEncoder( + vocab_size=100, num_layers=2, hidden_size=8, num_heads=2 + ).init_with_output(rng, inputs, train=False, debug=False) + self.assertTupleEqual(output.shape, (2, 10, 8)) + + def test_pass_through_encoder(self): + rng = random.PRNGKey(0) + inputs = np.ones((2, 10), dtype=np.float32) + output, _ = encoders.PassThroughEncoder().init_with_output( + rng, inputs, train=False, debug=False + ) + self.assertTrue(np.array_equal(output, inputs)) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/unloc/eval_utils.py b/scenic/projects/unloc/eval_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..2d76f48358a31ddaecd9dd468bbe4e011077e58a --- /dev/null +++ b/scenic/projects/unloc/eval_utils.py @@ -0,0 +1,883 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Contains evaluation utilities.""" + +import collections +import pickle +from typing import Any, Callable, Dict, Optional, Tuple + +from absl import logging +from clu import metric_writers +from flax import jax_utils +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.projects.unloc import activity_net_eval +from scenic.projects.unloc import metrics as unloc_metrics +from scenic.projects.unloc import postprocessing_utils +from scenic.projects.vivit import evaluation_lib as vivit_evaluation_lib +from scenic.train_lib import train_utils +import sklearn.metrics +import tensorflow as tf + +Batch = Dict[str, Any] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +_MICROSECONDS_PER_SECOND = 1e6 + + +def all_gather_metrics_inputs(batch: Batch) -> Dict[str, Any]: + """Gathers inputs for moment retrieval metrics from all devices.""" + + label = batch['label'] + gt_displacements = batch['displacements'] + batch_mask = batch['batch_mask'] + caption_mask = batch['inputs']['caption_mask'] + frame_mask = batch['inputs']['input_mask'] + (label, gt_displacements, + batch_mask, caption_mask, frame_mask) = jax.tree_util.tree_map( + gather_flatten, + (label, gt_displacements, batch_mask, caption_mask, frame_mask)) + return { + 'label': label, + 'displacements': gt_displacements, + 'batch_mask': batch_mask, + 'inputs': { + 'input_mask': frame_mask, + 'caption_mask': caption_mask, + } + } + + +def run_model_all_gather_results(variables: Dict[str, Any], + batch: Batch, + task: str, + flax_model: nn.Module, + train: bool, + dropout_rng: Any, + debug: Optional[bool] = False) -> jnp.ndarray: + """Run models and gather results from all devices.""" + + video_tokens = flax_model.apply( + variables, + batch['inputs'], + train=train, + debug=debug, + rngs={'dropout': dropout_rng} if train else None, + method=flax_model.encode_video) + text_tokens = flax_model.apply( + variables, + batch['inputs'], + task=task, + train=train, + debug=debug, + rngs={'dropout': dropout_rng} if train else None, + method=flax_model.encode_text) + + text_key = 'caption' if task == 'moment_retrieval' else 'class_names' + input_word_ids = batch['inputs'][text_key]['input_word_ids'] + # Merge all captions into batch. + input_word_ids = input_word_ids.reshape((-1, input_word_ids.shape[-1])) + text_input_mask = batch['inputs'][text_key]['input_mask'] + text_input_mask = text_input_mask.reshape((-1, text_input_mask.shape[-1])) + text_tokens, input_word_ids, text_input_mask = jax.tree_util.tree_map( + gather_flatten, (text_tokens, input_word_ids, text_input_mask)) + logits = flax_model.apply( + variables, + video_tokens, + text_tokens, + task=task, + input_word_ids=input_word_ids, + text_input_mask=text_input_mask, + video_input_mask=batch['inputs'].get('input_mask'), + train=train, + rngs={'dropout': dropout_rng} if train else None, + method=flax_model.fuse_video_text) + logits = gather_flatten(logits) + + return logits # pytype: disable=bad-return-type # jax-ndarray + + +def _eval_step_all_gather( + variables: Dict[str, Any], + batch: Batch, + task: str, + dataset: str, + flax_model: nn.Module, + metrics_fn: MetricFn, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], jnp.ndarray]: + """Runs a single step of moment retrieval evaluation.""" + + del dataset + logits = run_model_all_gather_results( + variables, + batch, + task, + flax_model, + train=False, + dropout_rng=None, + debug=debug) + gathered_batch = all_gather_metrics_inputs(batch) + metrics = metrics_fn(logits, gathered_batch) + return metrics, logits + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + task: str, + dataset: str, + flax_model: nn.Module, + metrics_fn: MetricFn, + debug: Optional[bool] = False, + all_gather_loss: bool = False +) -> Tuple[Dict[str, Tuple[float, int]], jnp.ndarray]: + """Runs a single step of evaluation. + + This function is branched from scenic/train_lib/classification_trainer.py. + Here, the model function takes two additional args, `task` and `dataset`. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, params and optimizer state. The buffer of + this argument can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + task: The task name, 'action_segmentation', 'highlight_detection', + 'moment_retrieval', or 'temporal_localization'. + dataset: The dataset name. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + all_gather_loss: Wether or not to gather results from all devices before + computing metrics and loss. + + Returns: + Calculated metrics and logits. + """ + + variables = {'params': train_state.params, **train_state.model_state} + if all_gather_loss: + assert task == 'moment_retrieval' + metrics, logits = _eval_step_all_gather(variables, batch, task, dataset, + flax_model, metrics_fn, debug) + else: + logits = flax_model.apply( + variables, + batch['inputs'], + task=task, + dataset=dataset, + train=False, + mutable=False, + debug=debug) + metrics = metrics_fn(logits, batch) + return metrics, logits + + +def _get_input_batch_from_one_prompt( + batch: Dict[str, Any], + num_classes: int, + prompt_index: int, + crop_index: int, + n_clips: int, +) -> Dict[str, Any]: + """Prepares input data from one prompt. + + Args: + batch: A batch of input data. + num_classes: Number of classes. + prompt_index: The index of prompts to process. + crop_index: The starting index of the clip to process. + n_clips: The number of clips to process at a time by each device. Set due to + memory constraints. + + Returns: + A batch of input corresponding to one prompt. + """ + + def _get_words_from_one_prompt(x: np.ndarray) -> np.ndarray: + num_prompts = x.shape[1] // num_classes + y = x.reshape((x.shape[0], num_classes, num_prompts, -1)) + return y[:, :, prompt_index] + + temp_input = jax.tree_util.tree_map( + lambda x, idx=crop_index: x[idx:idx + n_clips], batch['inputs']) + if 'class_names' in temp_input: + temp_input['class_names'] = jax.tree_util.tree_map( + _get_words_from_one_prompt, temp_input['class_names']) + return temp_input + + +def _average_multicrop_multiprompts(train_state: train_utils.TrainState, + batch: Batch, + task: str, + dataset: str, + flax_model: nn.Module, + n_clips: int = 2, + num_prompts: int = 1, + prompt_index: Optional[int] = None, + softmax_logits: bool = False, + debug: bool = False): + """Averages prediction from different crops and prompts.""" + + num_classes = batch['label'].shape[-1] + all_logits = jnp.zeros(num_classes) + + assert len(batch['batch_mask'].shape) == 1, ( + 'Spatial padding is not supported in multi-crop evaluation.') + + num_crops = batch['label'].shape[0] + variables = {'params': train_state.params, **train_state.model_state} + if prompt_index is not None: + prompt_indices = [prompt_index] + else: + prompt_indices = range(num_prompts) + for idx in range(0, num_crops, n_clips): + for prompt_index in prompt_indices: + temp_input = _get_input_batch_from_one_prompt( + batch, + num_classes=num_classes, + prompt_index=prompt_index, + crop_index=idx, + n_clips=n_clips) + logits = flax_model.apply( + variables, + temp_input, + task=task, + dataset=dataset, + train=False, + mutable=False, + debug=debug) + if softmax_logits: + logits = nn.softmax(logits, axis=-1) + logits = jnp.sum(logits, axis=0) + all_logits = all_logits + logits + return all_logits / (num_crops * num_prompts) + + +def action_segmentation_test_step( + train_state: train_utils.TrainState, + batch: Batch, + dataset: str, + flax_model: nn.Module, + n_clips: int = 2, + num_prompts: int = 1, + prompt_index: Optional[int] = None, + softmax_logits: bool = False, + debug: bool = False +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray, jnp.ndarray, + Optional[jnp.ndarray]]: + r"""Runs a single test step of the action segmentation task. + + This function is branched from third_party/py/scenic/projects/vivit/google/\ + train_utils.py. The input batch is different from ViViT and supports + prompting. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, and optimizer, and other metadata. + batch: Dictionary with keys 'inputs', 'label', 'batch_mask'. We assume that + all the inputs correspond to the same original example in the test set. + The input shapes to this function are: batch['inputs']['rgb'] = [ + num_crops, t, h, w, c], batch['labels'] = [num_crops, t, num_classes], + batch['batch_mask'] = [num_crops], batch['inputs']['input_mask'] = [ + num_crops, t]. + dataset: The dataset name. + flax_model: A Flax model. + n_clips: The number of clips to process at a time by each device. Set due to + memory constraints. + num_prompts: Number of text prompts. + prompt_index: If set, this particular prompt will be used for testing. + Otherwise, all prompts are used and the final output is the average of + them. + softmax_logits: Whether to softmax-normalise the logits before averaging + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + all_logits: Predicted logits of shape (global_batch_size, t, num_classes) + gathered from all devices. + label: Ground truth labels of shape (global_batch_size, t, num_classes) + gathered from all devices. + batch_mask: Batch masks of shape (global_batch_size,) gathered from all + devices. + frame_mask: Frame masks of shape (global_batch_size, num_frames) gathered + from all devices. + vids: Video ids of shape (global_batch_size,) gathered from all devices. + """ + all_logits = _average_multicrop_multiprompts(train_state, batch, + 'action_segmentation', dataset, + flax_model, n_clips, num_prompts, + prompt_index, softmax_logits, + debug) + all_logits = jnp.expand_dims(all_logits, axis=0) + vids = jnp.expand_dims(batch['vid'][0], axis=0) if 'vid' in batch else None + label = jnp.expand_dims(batch['label'][0], axis=0) + batch_mask = jnp.expand_dims(batch['batch_mask'][0], axis=0) + frame_mask = jnp.expand_dims(batch['inputs']['input_mask'][0], axis=0) + + all_logits, label, batch_mask, frame_mask, vids = jax.tree_util.tree_map( + gather_flatten, (all_logits, label, batch_mask, frame_mask, vids)) + return all_logits, label, batch_mask, frame_mask, vids + + +def gather_flatten(x: Optional[jnp.ndarray], + axis_name: str = 'batch') -> Optional[jnp.ndarray]: + """Flatten leading two dims, e.g. to get global batch after all_gather.""" + if x is None: + return x + return jnp.concatenate(jax.lax.all_gather(x, axis_name), axis=0) + + +def run_classification_test_steps_and_save_eval_summary( + config: ml_collections.ConfigDict, cur_step: int, + dataset: dataset_utils.Dataset, test_step_pmapped: Any, + train_state: train_utils.TrainState, writer: metric_writers.MetricWriter): + """Runs test iterations and save evaluation summary.""" + + num_spatial_crops = (3 if config.dataset_configs.get('do_three_spatial_crops', + False) else 1) + num_crops = ( + config.dataset_configs.get('num_test_clips', 1) * num_spatial_crops) + num_eval_examples = dataset.meta_data['num_test_examples'] + # For one host, we can set total_eval_epochs to 1. For multihost, we may need + # to increase this number because the shards may not be balanced. + total_eval_epochs = config.dataset_configs.get('total_eval_epochs', 1.0) + total_eval_steps = int( + np.ceil(total_eval_epochs * num_eval_examples / + (config.dataset_configs.test_batch_size * num_crops * + jax.process_count()))) + + all_logits, all_labels, all_batch_masks, all_vids = [], [], [], [] + for step in range(total_eval_steps): + test_batch = next(dataset.test_iter) + logits, label, batch_mask, vids = test_step_pmapped(train_state, test_batch) + (logits, label, batch_mask, vids) = jax.tree_util.tree_map( + jax_utils.unreplicate, (logits, label, batch_mask, vids) + ) + all_logits.append(logits) + all_labels.append(label) + all_batch_masks.append(batch_mask) + all_vids.append(vids) + all_logits = jnp.concatenate(all_logits, axis=0) + all_labels = jnp.concatenate(all_labels, axis=0) + all_batch_masks = jnp.concatenate(all_batch_masks, axis=0) + if all_vids[0] is not None: + all_vids = jnp.concatenate(all_vids, axis=0) + (all_logits, all_labels, + all_batch_masks, all_vids) = jax.tree_util.tree_map( + jax.device_get, (all_logits, all_labels, all_batch_masks, all_vids)) + all_logits, all_labels, deduped_vids = postprocessing_utils.dedup_by_vid( + all_logits, all_labels, all_batch_masks, all_vids) + duplicates = len(all_vids) - len(deduped_vids) + logging.info( + '%d unique samples encountered during test and found %d duplicates.', + len(deduped_vids), duplicates) + if len(deduped_vids) < num_eval_examples: + logging.warning( + 'Total number of eval sample: %d but only seen %d samples. You may ' + 'increase the number of test steps.', num_eval_examples, + len(deduped_vids)) + top1 = sklearn.metrics.top_k_accuracy_score( + np.argmax(all_labels, axis=-1), all_logits, k=1) + top5 = sklearn.metrics.top_k_accuracy_score( + np.argmax(all_labels, axis=-1), all_logits, k=5) + test_summary = { + 'test/top_1_accuracy': top1, + 'test/top_5_accuracy': top5, + } + writer.write_scalars(cur_step, test_summary) + writer.flush() + return test_summary + + +def run_action_segmentation_test_steps_and_save_eval_summary( + config: ml_collections.ConfigDict, cur_step: int, + dataset: dataset_utils.Dataset, test_step_pmapped: Any, + train_state: train_utils.TrainState, writer: metric_writers.MetricWriter): + """Runs test iterations and save evaluation summary.""" + num_spatial_crops = (3 if config.dataset_configs.get('do_three_spatial_crops', + False) else 1) + num_crops = ( + config.dataset_configs.get('num_test_clips', 1) * num_spatial_crops) + num_eval_examples = dataset.meta_data['num_test_examples'] + # For one host, we can set total_eval_epochs to 1. For multihost, we may need + # to increase this number because the shards may not be balanced. + total_eval_epochs = config.dataset_configs.get('total_eval_epochs', 1.0) + total_eval_steps = int( + np.ceil( + total_eval_epochs + * num_eval_examples + / ( + config.dataset_configs.test_batch_size + * num_crops + * jax.process_count() + ) + ) + ) + + all_logits, all_labels, all_batch_masks, all_frame_masks, all_vids = ( + [], [], [], [], [], + ) + for step in range(total_eval_steps): + test_batch = next(dataset.test_iter) + logits, label, batch_mask, frame_mask, vids = test_step_pmapped( + train_state, test_batch) + (logits, label, batch_mask, frame_mask, vids) = jax.tree_util.tree_map( + train_utils.unreplicate_and_get, + (logits, label, batch_mask, frame_mask, vids), + ) + all_logits.append(logits) + all_labels.append(label) + all_batch_masks.append(batch_mask) + all_frame_masks.append(frame_mask) + all_vids.append(vids) + all_logits = np.concatenate(all_logits, axis=0) + all_labels = np.concatenate(all_labels, axis=0) + all_batch_masks = np.concatenate(all_batch_masks, axis=0) + all_frame_masks = np.concatenate(all_frame_masks, axis=0) + if all_vids[0] is not None: + all_vids = np.concatenate(all_vids, axis=0) + all_logits, all_labels, deduped_vids = postprocessing_utils.dedup_by_vid( + all_logits, all_labels, all_batch_masks, all_vids, all_frame_masks) + duplicates = len(all_vids) - len(deduped_vids) + logging.info( + '%d unique samples encountered during test and found %d duplicates.', + len(deduped_vids), duplicates) + if len(deduped_vids) < num_eval_examples: + logging.warning( + 'Total number of eval sample: %d but only seen %d samples. You may ' + 'increase the number of test steps.', num_eval_examples, + len(deduped_vids)) + + test_summary = { + 'test/frame_accuracy': unloc_metrics.frame_accuracy( + all_logits, + all_labels, + background_logit_threshold=config.get( + 'background_logit_threshold', 0.0 + ), + ), + } + test_summary.update( + vivit_evaluation_lib.compute_mean_average_precision( + all_logits, all_labels, suffix='test')) + writer.write_scalars(cur_step, test_summary) + writer.flush() + return test_summary + + +def temporal_localization_test_step( + train_state: train_utils.TrainState, + batch: Batch, + dataset: str, + task: str, + flax_model: nn.Module, + num_prompts: int = 1, + output_per_class_displacements: bool = True, + debug: Optional[bool] = False, +) -> Tuple[jnp.ndarray, ...]: + """Runs a single temporal localization testing step. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, params and optimizer state. + batch: A single batch of data. + dataset: The dataset name. + task: The task name, `temporal_localization` or `highlight_detection`. + flax_model: A Flax model. + num_prompts: Number of text prompts. + output_per_class_displacements: Whether or not the model predict start/end + time displacements for each class. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Class probabilities in shape (batch, num_frames, num_classes). + Start/end time displacements in shape (batch, num_frames, num_classes, 2). + Batch mask in shape (batch,). + Input mask in shape (batch, num_frames). + Ground truth segments (start/end timestamps) in shape (batch, max_segments, + 2). + Segment label indices in shape (batch, max_segments). + Total frames in shape (batch,). + Video Ids in shape (batch,). + """ + + bs, num_frames, num_classes = batch['label'].shape + if output_per_class_displacements: + logits = jnp.zeros((num_frames, num_classes * 3), dtype=jnp.float32) + else: + logits = jnp.zeros((num_frames, num_classes + 2), dtype=jnp.float32) + variables = {'params': train_state.params, **train_state.model_state} + for prompt_index in range(num_prompts): + temp_input = _get_input_batch_from_one_prompt( + batch, + num_classes=num_classes, + prompt_index=prompt_index, + crop_index=0, + n_clips=1) + temp_logits = flax_model.apply( + variables, + temp_input, + task=task, + dataset=dataset, + train=False, + mutable=False, + debug=debug, + ) + logits = logits + temp_logits + logits = logits[None, ...] / num_prompts + if output_per_class_displacements: + logits = logits.reshape((bs, num_frames, num_classes, 3)) + class_probs = nn.sigmoid(logits[..., 0]) + displacements = logits[..., 1:] + else: + logits = logits.reshape((bs, num_frames, num_classes + 2)) + class_probs = nn.sigmoid(logits[..., :num_classes]) + displacements = logits[..., num_classes:] + displacements = jnp.tile( + jnp.expand_dims(displacements, axis=2), + [1, 1, num_classes, 1], + ) + gt_segments = jnp.stack( + [batch['segment_start_timestamp'], batch['segment_end_timestamp']], + axis=-1) / _MICROSECONDS_PER_SECOND + return jax.tree_util.tree_map( + gather_flatten, + ( + class_probs, + displacements, + batch['batch_mask'], + batch['inputs']['input_mask'], + gt_segments, + batch['segment_label_index'], + batch['total_frames'], + batch['vid'], + ), + ) + + +def _run_temporal_localization_test_steps( + config: ml_collections.ConfigDict, dataset: dataset_utils.Dataset, + test_step_pmapped: Any, + train_state: train_utils.TrainState) -> Dict[str, Any]: + """Run temporal localization test steps and save results into a dict.""" + + num_eval_examples = dataset.meta_data['num_test_examples'] + # For one host, we can set total_eval_epochs to 1. For multihost, we may need + # to increase this number because the shards may not be balanced. + total_eval_epochs = config.dataset_configs.get('total_eval_epochs', 1.0) + total_eval_steps = int( + np.ceil(total_eval_epochs * num_eval_examples / + (config.dataset_configs.test_batch_size * jax.process_count()))) + all_pred_and_labels = {} + duplicates = 0 + nms_fn = ( + postprocessing_utils.non_max_suppression_multiclass if config.get( + 'multiclass_nms', False) else + postprocessing_utils.non_max_suppression) + for step in range(total_eval_steps): + test_batch = next(dataset.test_iter) + output = test_step_pmapped(train_state, test_batch) + output = jax.tree_util.tree_map(train_utils.unreplicate_and_get, output) + ( + pred_class_probs, + pred_displacements, + batch_mask, + input_mask, + gt_segments, + gt_segment_labels, + total_frames, + vids, + ) = output + batch_mask = batch_mask.astype(bool) + (pred_class_probs, pred_displacements, input_mask, gt_segments, + gt_segment_labels, total_frames, vids) = jax.tree_util.tree_map( + lambda x, mask=batch_mask: x[mask], + (pred_class_probs, pred_displacements, input_mask, gt_segments, + gt_segment_labels, total_frames, vids)) + for idx in range(pred_class_probs.shape[0]): + vid = vids[idx] + if vid in all_pred_and_labels: + duplicates += 1 + else: + cur_gt_segments = gt_segments[idx] + cur_gt_segment_labels = gt_segment_labels[idx] + # Labels are padded with -1s. + mask = cur_gt_segment_labels > -1 + cur_gt_segment_labels = cur_gt_segment_labels[mask] + cur_gt_segments = cur_gt_segments[mask] + + (cur_pred_class_indices, cur_pred_class_probs, cur_pred_segments) = ( + postprocessing_utils.get_segments_from_frame_predictions( + class_probs=pred_class_probs[idx], + displacements=pred_displacements[idx], + input_mask=input_mask[idx], + total_frames=total_frames[idx], + stride=config.dataset_configs.stride, + sampling_strategy=config.dataset_configs.get( + 'sampling_strategy', 'random' + ), + displacement_normalizer=config.dataset_configs.get( + 'displacement_normalizer' + ), + secs_per_timestep=config.dataset_configs.get( + 'secs_per_timestep' + ), + score_threshold=config.get('score_threshold', float('-inf')), + feature_pyramid_config=config.dataset_configs.get( + 'feature_pyramid_config' + ), + ) + ) + + cur_pred_class_indices, cur_pred_class_probs, cur_pred_segments = ( + nms_fn( + cur_pred_class_indices, + cur_pred_class_probs, + cur_pred_segments, + config, + ) + ) + + all_pred_and_labels[vid] = ( + cur_pred_class_indices, + cur_pred_class_probs, + cur_pred_segments, + cur_gt_segments, + cur_gt_segment_labels, + ) + logging.info( + '%d unique samples encountered during test and found %d duplicates.', + len(all_pred_and_labels), duplicates) + if len(all_pred_and_labels) < num_eval_examples: + logging.warning( + 'Total number of eval sample: %d but only seen %d samples. You may ' + 'increase the number of test steps.', num_eval_examples, + len(all_pred_and_labels)) + return all_pred_and_labels + + +def run_temporal_localization_test_steps_and_save_eval_summary( + config: ml_collections.ConfigDict, cur_step: int, + dataset: dataset_utils.Dataset, test_step_pmapped: Any, + train_state: train_utils.TrainState, + writer: metric_writers.MetricWriter) -> Dict[str, float]: + """Runs test iterations and save evaluation summary.""" + + all_pred_and_labels = _run_temporal_localization_test_steps( + config, dataset, test_step_pmapped, train_state) + results = collections.defaultdict(list) + # Convert results to ActivityNet evaluator format. + for vid, pred_and_labels in all_pred_and_labels.items(): + (pred_classes, pred_class_probs, pred_segments, gt_segments, + gt_segment_label) = pred_and_labels + results['video_id'].append(vid) + results['detection_segments'].append(pred_segments) + results['detection_scores'].append(pred_class_probs) + results['detection_classes'].append(pred_classes) + results['groundtruth_segments'].append(gt_segments) + results['groundtruth_classes'].append(gt_segment_label) + + if config.get('result_pickle'): + with tf.io.gfile.GFile(config.result_pickle, 'wb') as fp: + pickle.dump(results, fp) + test_summary = activity_net_eval.evaluate_detection_results_anet( + results, num_classes=config.dataset_configs.num_classes) + writer.write_scalars(cur_step, test_summary) + writer.flush() + return test_summary + + +def moment_retrieval_test_step( + train_state: train_utils.TrainState, + batch: Batch, + dataset: str, + flax_model: nn.Module, + debug: Optional[bool] = False) -> Tuple[jnp.ndarray, ...]: + """Runs a single moment retrieval testing step. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, params and optimizer state. + batch: A single batch of data. + dataset: The dataset name. + flax_model: A Flax model. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Class probabilities in shape (batch, max_num_captions, num_frames). + Start/end time displacements in shape (batch, max_num_captions, + num_frames, 2). + Batch mask in shape (batch,). + Input mask in shape (batch, num_frames). + Caption mask in shape (batch, max_num_captions). + Ground truth segments (start/end timestamps) in shape (batch, + max_num_captions, 2). + Total frames in shape (batch,). + Video Ids in shape (batch,). + """ + assert ( + batch['label'].shape[0] == 1 + ) # For multicrop to work the local batch size needs to be 1 + bs, num_captions, num_frames, _ = batch['label'].shape + variables = {'params': train_state.params, **train_state.model_state} + logits = flax_model.apply( + variables, + batch['inputs'], + task='moment_retrieval', + dataset=dataset, + train=False, + mutable=False, + debug=debug) + assert logits.shape[0] == 1 and logits.shape[1] == num_captions + logits = logits[None, ...] + logits = logits.reshape((bs, bs, num_captions, num_frames, 3)) + logits = logits[jnp.arange(bs), jnp.arange(bs)] + class_probs = nn.sigmoid(logits[..., 0]) + displacements = logits[..., 1:] + gt_segments = jnp.stack( + [batch['segment_start_timestamp'], batch['segment_end_timestamp']], + axis=-1) / _MICROSECONDS_PER_SECOND + return jax.tree_util.tree_map( + gather_flatten, + (class_probs, displacements, batch['batch_mask'], + batch['inputs']['input_mask'], batch['inputs']['caption_mask'], + gt_segments, batch['total_frames'], batch['vid'])) + + +def _run_moment_retrieval_test_steps( + config: ml_collections.ConfigDict, dataset: dataset_utils.Dataset, + test_step_pmapped: Any, + train_state: train_utils.TrainState) -> Dict[str, Any]: + """Run moment retrieval test steps and save results into a dict.""" + + num_eval_examples = dataset.meta_data['num_test_examples'] + # For one host, we can set total_eval_epochs to 1. For multihost, we may need + # to increase this number because the shards may not be balanced. + total_eval_epochs = config.dataset_configs.get('total_eval_epochs', 1.0) + total_eval_steps = int( + np.ceil(total_eval_epochs * num_eval_examples / + (config.dataset_configs.test_batch_size * jax.process_count()))) + all_pred_and_labels = {} + duplicates = 0 + nms_fn = postprocessing_utils.non_max_suppression_mr + for step in range(total_eval_steps): + test_batch = next(dataset.test_iter) + output = test_step_pmapped(train_state, test_batch) + output = jax.tree_util.tree_map(train_utils.unreplicate_and_get, output) + (pred_class_probs, pred_displacements, batch_mask, input_mask, caption_mask, + gt_segments, total_frames, vids) = output + + batch_mask = batch_mask.astype(bool) + (pred_class_probs, pred_displacements, input_mask, caption_mask, + gt_segments, total_frames, vids) = jax.tree_util.tree_map( + lambda x, mask=batch_mask: x[mask], + (pred_class_probs, pred_displacements, input_mask, caption_mask, + gt_segments, total_frames, vids)) + for idx in range(pred_class_probs.shape[0]): + vid = vids[idx] + if vid in all_pred_and_labels: + duplicates += 1 + else: + cur_gt_segments = gt_segments[idx] + cur_gt_segments = cur_gt_segments[caption_mask[idx].astype(bool)] + (cur_pred_scores, cur_pred_segments) = ( + postprocessing_utils.get_segments_from_frame_predictions_mr( + class_probs=pred_class_probs[idx], + displacements=pred_displacements[idx], + input_mask=input_mask[idx], + caption_mask=caption_mask[idx], + total_frames=total_frames[idx], + stride=config.dataset_configs.stride, + sampling_strategy=config.dataset_configs.get( + 'sampling_strategy', 'random' + ), + displacement_normalizer=config.dataset_configs.get( + 'displacement_normalizer' + ), + secs_per_timestep=config.dataset_configs.get( + 'secs_per_timestep' + ), + feature_pyramid_config=config.dataset_configs.get( + 'feature_pyramid_config' + ), + ) + ) + cur_pred_scores, cur_pred_segments = nms_fn( + cur_pred_scores, + cur_pred_segments, + config, + ) + + all_pred_and_labels[vid] = ( + cur_pred_scores, + cur_pred_segments, + cur_gt_segments, + ) + logging.info( + '%d unique samples encountered during test and found %d duplicates.', + len(all_pred_and_labels), duplicates) + if len(all_pred_and_labels) < num_eval_examples: + logging.warning( + 'Total number of eval sample: %d but only seen %d samples. You may ' + 'increase the number of test steps.', num_eval_examples, + len(all_pred_and_labels)) + return all_pred_and_labels + + +def run_moment_retrieval_test_steps_and_save_eval_summary( + config: ml_collections.ConfigDict, cur_step: int, + dataset: dataset_utils.Dataset, test_step_pmapped: Any, + train_state: train_utils.TrainState, + writer: metric_writers.MetricWriter) -> Dict[str, Any]: + """Runs test iterations and save evaluation summary.""" + + all_pred_and_labels = _run_moment_retrieval_test_steps( + config, dataset, test_step_pmapped, train_state) + video_id = [] + all_pred_scores = [] + all_pred_segments = [] + all_gt_segments = [] + for vid, pred_and_labels in all_pred_and_labels.items(): + pred_scores, pred_segments, gt_segments = pred_and_labels + video_id.append(vid) + for cap_id in range(gt_segments.shape[0]): + all_pred_scores.append(pred_scores[cap_id]) + all_pred_segments.append(pred_segments[cap_id]) + all_gt_segments.append(gt_segments[cap_id]) + + test_summary = unloc_metrics.compute_recall_at_k( + all_gt_segments, + all_pred_segments, + all_pred_scores, + ranks=[1, 5], + iou_thresholds=[0.5, 0.7], + ) + writer.write_scalars(cur_step, test_summary) + writer.flush() + return test_summary diff --git a/scenic/projects/unloc/eval_utils_test.py b/scenic/projects/unloc/eval_utils_test.py new file mode 100644 index 0000000000000000000000000000000000000000..f0d8cd23afc72e1fd90eae3b1d2ef3ec3e6bbfbf --- /dev/null +++ b/scenic/projects/unloc/eval_utils_test.py @@ -0,0 +1,138 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for eval_utils.""" + +import numpy as np +from scenic.projects.unloc import eval_utils +import tensorflow as tf + + +class ClassificationTrainUtilsTest(tf.test.TestCase): + + def setUp(self): + super().setUp() + self.batch = { + 'inputs': { + 'rgb': np.zeros((2, 4, 8, 8, 3)), + 'class_names': { + 'input_word_ids': np.ones((2, 10 * 3, 8), dtype=np.int32), + 'input_type_ids': np.zeros((2, 10 * 3, 8), dtype=np.int32), + 'input_mask': np.ones((2, 10 * 3, 8), dtype=np.int32), + } + }, + 'label': np.zeros((2, 10)), + 'batch_mask': np.ones((2)), + } + self.text_emb_batch = { + 'inputs': { + 'rgb': np.zeros((2, 4, 8, 8, 3), dtype=np.float32), + 'class_names': np.ones((2, 10 * 3, 8), dtype=np.float32), + }, + 'label': np.zeros((2, 10)), + 'batch_mask': np.ones((2)), + } + + def assertDictEqualRecursive(self, actual, expected): + self.assertEqual(type(actual), type(expected)) + if isinstance(actual, dict): + self.assertSameElements(actual.keys(), expected.keys()) + for key, _ in expected.items(): + self.assertDictEqualRecursive(actual[key], expected[key]) + elif isinstance(actual, np.ndarray): + np.testing.assert_allclose(actual, expected) + else: + self.assertEqual(actual, expected) + + def test_get_input_batch_from_one_prompt(self): + clip_input = eval_utils._get_input_batch_from_one_prompt( + self.batch, num_classes=10, prompt_index=0, crop_index=0, n_clips=2) + expected_output = { + 'rgb': np.zeros((2, 4, 8, 8, 3)), + 'class_names': { + 'input_word_ids': np.ones((2, 10, 8), dtype=np.int32), + 'input_type_ids': np.zeros((2, 10, 8), dtype=np.int32), + 'input_mask': np.ones((2, 10, 8), dtype=np.int32), + } + } + self.assertDictEqualRecursive(clip_input, expected_output) + + def test_get_input_text_emb_batch_from_one_prompt(self): + clip_input = eval_utils._get_input_batch_from_one_prompt( + self.text_emb_batch, + num_classes=10, + prompt_index=0, + crop_index=0, + n_clips=2) + expected_output = { + 'rgb': np.zeros((2, 4, 8, 8, 3), dtype=np.float32), + 'class_names': np.ones((2, 10, 8), dtype=np.float32), + } + self.assertDictEqualRecursive(clip_input, expected_output) + + +class MomentRetrievalTrainUtilsTest(tf.test.TestCase): + + def setUp(self): + super().setUp() + self.batch = { + 'num_classes': 1, + 'inputs': { + 'rgb': np.zeros((2, 4, 8, 8, 3)), + 'caption': { + 'input_word_ids': np.ones((2, 3, 10), dtype=np.int32), + 'input_type_ids': np.zeros((2, 3, 10), dtype=np.int32), + 'input_mask': np.ones((2, 3, 10), dtype=np.int32), + }, + 'input_mask': np.ones((2, 4)), + 'caption_mask': np.ones((2, 3)), + }, + 'batch_mask': np.ones((2)), + 'total_frames': np.ones((2), dtype=np.int32), + 'label': np.zeros((2, 3, 4, 1)), + 'displacements': np.zeros((2, 3, 4, 2)), + 'segment_start_index': np.zeros((2, 3), dtype=np.int32), + 'segment_end_index': np.ones((2, 3), dtype=np.int32), + 'segment_start_timestamp': np.zeros((2, 3), dtype=np.int32), + 'segment_end_timestamp': np.ones((2, 3), dtype=np.int32), + } + + def assertDictEqualRecursive(self, actual, expected): + self.assertEqual(type(actual), type(expected)) + if isinstance(actual, dict): + self.assertSameElements(actual.keys(), expected.keys()) + for key, _ in expected.items(): + self.assertDictEqualRecursive(actual[key], expected[key]) + elif isinstance(actual, np.ndarray): + np.testing.assert_allclose(actual, expected) + else: + self.assertEqual(actual, expected) + + def test_get_input_batch_from_one_prompt(self): + clip_input = eval_utils._get_input_batch_from_one_prompt( + self.batch, num_classes=1, prompt_index=0, crop_index=0, n_clips=1) + expected_output = { + 'rgb': np.zeros((1, 4, 8, 8, 3)), + 'caption': { + 'input_word_ids': np.ones((1, 3, 10), dtype=np.int32), + 'input_type_ids': np.zeros((1, 3, 10), dtype=np.int32), + 'input_mask': np.ones((1, 3, 10), dtype=np.int32), + }, + 'input_mask': np.ones((1, 4)), + 'caption_mask': np.ones((1, 3)), + } + self.assertDictEqualRecursive(clip_input, expected_output) + +if __name__ == '__main__': + tf.test.main() diff --git a/scenic/projects/unloc/evaluator.py b/scenic/projects/unloc/evaluator.py new file mode 100644 index 0000000000000000000000000000000000000000..b17ff04d6e6a53014456c5c762cceeb00d5ea505 --- /dev/null +++ b/scenic/projects/unloc/evaluator.py @@ -0,0 +1,181 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Evaluation binary for UnLoc models.""" + +import functools +from typing import Any, Dict, Tuple + +from clu import metric_writers +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.unloc import eval_utils as unloc_eval_utils +from scenic.projects.unloc import model as unloc_model +from scenic.projects.unloc import train_utils as unloc_train_utils +from scenic.train_lib import train_utils + + +def init_model( + config: ml_collections.ConfigDict, + train_state: train_utils.TrainState) -> Tuple[train_utils.TrainState, int]: + """Initializes the UnLoc model.""" + + checkpoint_dir = None + checkpoint_path = config.init_from.get('checkpoint_path') + if checkpoint_path is not None: + checkpoint_dir = checkpoint_path + train_state, step = train_utils.restore_checkpoint( + checkpoint_dir, train_state, step=config.get('checkpoint_step') + ) + return train_state, step + + +def evaluate(rng: jnp.ndarray, config: ml_collections.ConfigDict, + writer: metric_writers.MetricWriter) -> Dict[str, Any]: + """Evaluate an UnLoc model. + + This function runs a pretrained model on the test split of the specified + dataset, and then evaluates the model. + + Args: + rng: JAX prng key. + config: Configuration of the model under evaluation. + writer: CLU metrics writer instance. + + Returns: + eval_summary: Dictionary with the evaluation summary + """ + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset(config, data_rng) + + model = unloc_model.MODELS[config.model_name]( + config, dataset_meta_data=dataset.meta_data + ) + + rng, init_rng = jax.random.split(rng) + params, model_state, _, _ = unloc_train_utils.initialize_model_with_pytree( + model_def=model.flax_model, + input_spec={ + 'inputs': unloc_train_utils.create_input_spec( + dataset.meta_data['input_shape'], dataset.meta_data['input_dtype'] + ) + }, + config=config, + rngs=init_rng, + ) + + _, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + opt_state=None, + tx=None, + params=params, + model_state=model_state, + rng=train_rng, + metadata=None) + train_state, step = init_model(config, train_state) + train_state = jax_utils.replicate(train_state) + del params + + def action_segmentation_eval(): + test_step_pmapped = jax.pmap( + functools.partial( + unloc_eval_utils.action_segmentation_test_step, + dataset=config.dataset_configs.get('name', ''), + flax_model=model.flax_model, + n_clips=config.get('multicrop_clips_per_device', 2), + num_prompts=config.dataset_configs.get('num_prompts', 1), + prompt_index=config.dataset_configs.get('prompt_index', None), + debug=False, + ), + axis_name='batch', + ) + return unloc_eval_utils.run_action_segmentation_test_steps_and_save_eval_summary( + config, step, dataset, test_step_pmapped, train_state, writer + ) + + def tal_eval(): + test_step_pmapped = jax.pmap( + functools.partial( + unloc_eval_utils.temporal_localization_test_step, + dataset='', + task='temporal_localization', + flax_model=model.flax_model, + num_prompts=config.dataset_configs.get('num_prompts', 1), + output_per_class_displacements=config.get( + 'output_per_class_displacements', True + ), + debug=False, + ), + axis_name='batch', + ) + return unloc_eval_utils.run_temporal_localization_test_steps_and_save_eval_summary( + config, step, dataset, test_step_pmapped, train_state, writer + ) + + def highlight_detection_eval(): + test_step_pmapped = jax.pmap( + functools.partial( + unloc_eval_utils.temporal_localization_test_step, + dataset='', + task='highlight_detection', + flax_model=model.flax_model, + num_prompts=config.dataset_configs.get('num_prompts', 1), + output_per_class_displacements=config.get( + 'output_per_class_displacements', True + ), + debug=False, + ), + axis_name='batch', + ) + return unloc_eval_utils.run_temporal_localization_test_steps_and_save_eval_summary( + config, step, dataset, test_step_pmapped, train_state, writer + ) + + def moment_retrieval_eval(): + test_step_pmapped = jax.pmap( + functools.partial( + unloc_eval_utils.moment_retrieval_test_step, + dataset=config.dataset_configs.get('name', ''), + flax_model=model.flax_model, + debug=False, + ), + axis_name='batch', + ) + return ( + unloc_eval_utils.run_moment_retrieval_test_steps_and_save_eval_summary( + config, step, dataset, test_step_pmapped, train_state, writer + ) + ) + + return { + 'action_segmentation': action_segmentation_eval, + 'highlight_detection': highlight_detection_eval, + 'moment_retrieval': moment_retrieval_eval, + 'temporal_localization': tal_eval, + }[config.dataset_configs.task]() + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for offline evaluation.""" + del workdir + evaluate(rng=rng, config=config, writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/unloc/heads.py b/scenic/projects/unloc/heads.py new file mode 100644 index 0000000000000000000000000000000000000000..eb47aeb496d440fca158d7e7d40a55b563eebb79 --- /dev/null +++ b/scenic/projects/unloc/heads.py @@ -0,0 +1,410 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Contains head modules.""" + +from typing import List, Optional, Tuple +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.projects.unloc import model_utils + + +class LinearHead(nn.Module): + """Implements a linear head.""" + + init_head_bias: float = 0.0 + output_dim: int = 1 + + @nn.compact + def __call__( + self, + video_tokens: jnp.ndarray, + text_tokens: Optional[jnp.ndarray], + task: str, + train: bool, + ) -> jnp.ndarray: + """Builds a linear head. + + Args: + video_tokens: A ND float tensor of shape (batch_size, ..., channels) + representing the video tokens. + text_tokens: A ND float tensor of shape (batch_size, ..., channels) + representing the video tokens. Not used. + task: 'action_segmentation'. + train: Whether or not the model is under training. Not used. + + Returns: + logits: A (N-1)D float tensor of shape (batch_size, ...) if output_dim == + 1. Otherwise, A ND float tensor of shape (batch_size, ..., output_dim). + """ + output = nn.Dense( + self.output_dim, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=jax.nn.initializers.constant(self.init_head_bias), + name='output_projection', + )(video_tokens) + if self.output_dim == 1: + return jnp.squeeze(output, axis=-1) + return output + + +class ConvBlock(nn.Module): + """Implements a multi-layer conv block.""" + + output_dim: int + num_conv_layers: int + kernel_size: int = 3 + init_proj_bias: float = 0.0 + + @nn.compact + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + """Builds a multi-layer convolution head. + + Args: + x: Tokens in shape (batch_size, ..., num_frames, channels). + + Returns: + Tensor in shape (batch_size, ..., num_frames, output_dim). + """ + channels = x.shape[-1] + for idx in range(self.num_conv_layers): + x = nn.LayerNorm(name=f'ln{idx}')(x) + x = nn.Conv(channels, [self.kernel_size], name=f'conv{idx}')(x) + x = nn.relu(x) + output = nn.Dense( + self.output_dim, + kernel_init=nn.initializers.xavier_normal(), + bias_init=jax.nn.initializers.constant(self.init_proj_bias), + name='output_projection', + )(x) + return output + + +class LocalizationHead(nn.Module): + """Implements a localization head. + + We follow the head design in ActionFormer: https://arxiv.org/abs/2202.07925. + In this head, we apply convolutions to generate per-frame logits for labels + as well as the distance to the start/end times. + + Attributes: + num_conv_layers: Number of convolution layers. + kernel_size: Convolution kernel size. + num_classes: Number of classes. + init_classification_head_bias: Initial bias value for the classification + head. + init_regression_head_bias: Initial bias value for the regression head. + distance_normalizer: We normalize the predicted displacements to be [0, 1]. + Options are: `relu_clip`, `sigmoid`, or 'relu'. When using `relu_clip`, + the distances are first fed into relu() and then clipped to be [0, 1]. + When using `sigmoid`, the distances are normalized into [0, 1] using the + `sigmoid` function. When using `relu`, distances are fed into a relu() but + not normalized. + weight_sharing: Whether or not to share the weights among decoders from + different pyramid levels. If True, we will also learn a `scale` and a + `bias` term for each level. + feature_pyramid_config: Feature pyramid config. + output_per_class_displacements: Whether or not to predict start/end time + displacements for each class. + """ + + num_conv_layers: int + kernel_size: int + num_classes: int = 1 + init_classification_head_bias: float = 0.0 + init_regression_head_bias: float = 0.0 + distance_normalizer: str = 'relu' + weight_sharing: bool = False + feature_pyramid_config: Optional[ml_collections.ConfigDict] = None + output_per_class_displacements: bool = True + + def _normalize_distance(self, distances: jnp.ndarray) -> jnp.ndarray: + """Normalizes predicted distances to the start and end times.""" + if self.distance_normalizer == 'relu_clip': + distances = nn.relu(distances) + # We normalize the distances to be 0 and 1. + return jnp.clip(distances, max=1.0) + elif self.distance_normalizer == 'sigmoid': + return nn.sigmoid(distances) + elif self.distance_normalizer == 'relu': + return nn.relu(distances) + else: + raise ValueError( + f'Unknown distance_normalizer: {self.distance_normalizer}.' + ) + + def _build_with_weight_sharing( + self, + tokens: jnp.ndarray, + classification_output_dim: int, + regression_output_dim: int, + pyramid_feature_axis: int, + ) -> Tuple[List[jnp.ndarray], List[jnp.ndarray]]: + """Builds TAL head with shared decoders.""" + classification_head = ConvBlock( + num_conv_layers=self.num_conv_layers, + kernel_size=self.kernel_size, + output_dim=classification_output_dim, + init_proj_bias=self.init_classification_head_bias, + name='ClassificationHead', + ) + regression_head = ConvBlock( + num_conv_layers=self.num_conv_layers, + kernel_size=self.kernel_size, + output_dim=regression_output_dim, + init_proj_bias=self.init_regression_head_bias, + name='RegressionHead', + ) + if self.feature_pyramid_config is None: + tokens_per_level = [tokens] + else: + # pytype: disable=attribute-error + tokens_per_level = model_utils.split_pyramid_features( + tokens, + self.feature_pyramid_config.num_features_level0, + len(self.feature_pyramid_config.feature_pyramid_levels), + self.feature_pyramid_config.feature_pyramid_downsample_stride, + axis=pyramid_feature_axis, + ) + # pytype: enable=attribute-error + all_classification_logits = [] + all_distances = [] + for level, x in enumerate(tokens_per_level): + classification_logits = classification_head(x) + if tokens.ndim == 4 and not self.output_per_class_displacements: + x = jnp.mean(x, axis=1) + distances = regression_head(x) + scale = self.param( + f'scale_{level}', nn.initializers.ones, (1,), distances.dtype + ) + shift = self.param( + f'shift_{level}', nn.initializers.zeros, (1,), distances.dtype + ) + distances = self._normalize_distance(distances * scale + shift) + all_classification_logits.append(classification_logits) + all_distances.append(distances) + return all_classification_logits, all_distances + + def _build_without_weight_sharing( + self, + tokens: jnp.ndarray, + classification_output_dim: int, + regression_output_dim: int, + pyramid_feature_axis: int, + ) -> Tuple[List[jnp.ndarray], List[jnp.ndarray]]: + """Builds TAL head with separate decoders.""" + if self.feature_pyramid_config is None: + tokens_per_level = [tokens] + else: + # pytype: disable=attribute-error + tokens_per_level = model_utils.split_pyramid_features( + tokens, + self.feature_pyramid_config.num_features_level0, + len(self.feature_pyramid_config.feature_pyramid_levels), + self.feature_pyramid_config.feature_pyramid_downsample_stride, + axis=pyramid_feature_axis, + ) + # pytype: enable=attribute-error + all_classification_logits = [] + all_distances = [] + for level, x in enumerate(tokens_per_level): + classification_logits = ConvBlock( + num_conv_layers=self.num_conv_layers, + kernel_size=self.kernel_size, + output_dim=classification_output_dim, + init_proj_bias=self.init_classification_head_bias, + name=f'ClassificationHead_{level}', + )(x) + if tokens.ndim == 4 and not self.output_per_class_displacements: + x = jnp.mean(x, axis=1) + distances = ConvBlock( + num_conv_layers=self.num_conv_layers, + kernel_size=self.kernel_size, + output_dim=regression_output_dim, + init_proj_bias=self.init_regression_head_bias, + name=f'RegressionHead_{level}', + )(x) + distances = self._normalize_distance(distances) + all_classification_logits.append(classification_logits) + all_distances.append(distances) + return all_classification_logits, all_distances + + @nn.compact + def __call__( + self, + video_tokens: jnp.ndarray, + text_emb: jnp.ndarray, + task: str, + train: bool, + ) -> jnp.ndarray: + """Builds the temporal localization head. + + The head design is following ActionFormer, https://arxiv.org/abs/2202.07925. + + Args: + video_tokens: A 3D float tensor of shape (batch_size, num_frames, + channels) representing the fused video-text tokens. + text_emb: Not used. + task: Task name. Only supports 'temporal_localization' and + 'highlight_detection'. + train: Whether or not it is in training. + + Returns: + logits: A 3D float tensor in shape (batch_size, num_frames, + num_classes * 3) if output_per_class_displacements = True, otherwise in + shape (batch_size, num_frames, num_classes + 2) storing the logits of + frame labels and the predicted distances to the start/end times. + """ + del text_emb + assert task == 'temporal_localization' or task == 'highlight_detection' + assert video_tokens.ndim == 3 + bs, num_frames, _ = video_tokens.shape + inputs = video_tokens + if self.output_per_class_displacements: + regression_output_dim = 2 * self.num_classes + else: + regression_output_dim = 2 + if self.weight_sharing: + all_classification_logits, all_distances = ( + self._build_with_weight_sharing( + inputs, + classification_output_dim=self.num_classes, + regression_output_dim=regression_output_dim, + pyramid_feature_axis=1, + ) + ) + else: + all_classification_logits, all_distances = ( + self._build_without_weight_sharing( + inputs, + classification_output_dim=self.num_classes, + regression_output_dim=regression_output_dim, + pyramid_feature_axis=1, + ) + ) + + all_classification_logits = jnp.concatenate( + all_classification_logits, axis=1 + ) + all_distances = jnp.concatenate(all_distances, axis=1) + if self.output_per_class_displacements: + all_classification_logits = all_classification_logits[..., jnp.newaxis] + all_distances = all_distances.reshape( + (bs, num_frames, self.num_classes, 2) + ) + logits = jnp.concatenate( + [all_classification_logits, all_distances], axis=-1 + ) + return logits.reshape((bs, num_frames, -1)) + + +class QueryDependentLocalizationHead(LocalizationHead): + """Implements a query dependent temporal localization head. + + The boundary regression takes into account both video and query information. + """ + + @nn.compact + def __call__( + self, + video_tokens: jnp.ndarray, + text_emb: jnp.ndarray, + task: str, + train: bool, + ) -> jnp.ndarray: + """Builds a query dependent localization head. + + Different from LocalizationHead, we assume video_tokens contain information + from both the input video and text. + + Args: + video_tokens: A 4D float tensor of shape (batch_size, num_texts, + num_frames, channels) representing the fused video-text tokens. + text_emb: Not used. A 3D float tensor of shape (batch_size, num_texts, + channels) representing the text CLS token for each class. The second + dimension is batch_size * max_num_captions if task=`moment_retrieval`. + Otherwise, it is num_classes. + task: Task name. 'temporal_localization', 'highlight_detection' or + 'moment_retrieval'. + train: Whether or not it is in training. + + Returns: + logits: In the case of 'temporal_localization' or 'highlight_detection', + `logits` is a 3D float tensor in shape (batch_size, num_frames, + num_classes * 3) if self.output_per_class_displacements = True, + otherwise in shape (batch_size, num_frames, num_classes + 2). In the + case of 'moment_retrieval', `logits` is a 4D tensor in shape + (batch_size, num_texts, num_frames, 3) storing the logits of frame + labels and the predicted distances to the start/end times. + """ + assert video_tokens.ndim == 4 and text_emb.ndim == 3 + bs, _, num_frames, _ = video_tokens.shape + + if self.weight_sharing: + all_classification_logits, all_distances = ( + self._build_with_weight_sharing( + video_tokens, + classification_output_dim=1, + regression_output_dim=2, + pyramid_feature_axis=2, + ) + ) + else: + all_classification_logits, all_distances = ( + self._build_without_weight_sharing( + video_tokens, + classification_output_dim=1, + regression_output_dim=2, + pyramid_feature_axis=2, + ) + ) + + all_classification_logits = jnp.concatenate( + all_classification_logits, axis=2 + ) + if self.output_per_class_displacements: + all_distances = jnp.concatenate(all_distances, axis=2) + else: + all_distances = jnp.concatenate(all_distances, axis=1) + if task == 'moment_retrieval': + return jnp.concatenate( + [all_classification_logits, all_distances], axis=-1 + ) + elif task == 'temporal_localization' or task == 'highlight_detection': + if self.output_per_class_displacements: + logits = jnp.concatenate( + [all_classification_logits, all_distances], axis=-1 + ) + # Transpose logits into (batch_size, num_frames, num_classes, 3) + logits = jnp.transpose(logits, (0, 2, 1, 3)) + return logits.reshape((bs, num_frames, -1)) + else: + # Changes logits shape into (batch_size, num_frames, num_classes). + all_classification_logits = jnp.transpose( + jnp.squeeze(all_classification_logits, axis=-1), [0, 2, 1] + ) + return jnp.concatenate( + [all_classification_logits, all_distances], axis=-1 + ) + else: + raise ValueError(f'Unsupported task: {task}.') + + +HEADS = { + 'linear_head': LinearHead, + 'localization_head': LocalizationHead, + 'query_dependent_localization_head': QueryDependentLocalizationHead, +} diff --git a/scenic/projects/unloc/heads_test.py b/scenic/projects/unloc/heads_test.py new file mode 100644 index 0000000000000000000000000000000000000000..e157670bfddbf2b45d35f9b7cce5e6e7515581b4 --- /dev/null +++ b/scenic/projects/unloc/heads_test.py @@ -0,0 +1,330 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for heads.""" + +from absl.testing import parameterized +from jax import random +import ml_collections +import numpy as np +from scenic.projects.unloc import heads +import tensorflow as tf + + +class HeadsTest(tf.test.TestCase, parameterized.TestCase): + + @parameterized.parameters( + (np.ones((2, 10, 8), np.float32), (2, 10)), + (np.ones((2, 8, 10, 8), np.float32), (2, 8, 10)), + ) + def test_linear_head(self, inputs, expected_shape): + rng = random.PRNGKey(0) + output, _ = heads.LinearHead().init_with_output( + rng, inputs, None, '', train=False + ) + self.assertTupleEqual(output.shape, expected_shape) + + @parameterized.named_parameters( + ( + 'temporal_localization_weight_sharing', + np.ones((2, 10, 4, 8)), + np.ones((2, 10, 8)), + None, + True, + True, + (2, 4, 30), + {'ClassificationHead', 'RegressionHead', 'scale_0', 'shift_0'}, + ), + ( + 'temporal_localization_w_fpn_weight_sharing', + np.ones((2, 10, 6, 8)), + np.ones((2, 10, 8)), + ml_collections.ConfigDict({ + 'num_features_level0': 4, + 'feature_pyramid_levels': [0, 1], + 'feature_pyramid_downsample_stride': 2, + }), + True, + True, + (2, 6, 30), + { + 'ClassificationHead', + 'RegressionHead', + 'scale_0', + 'scale_1', + 'shift_0', + 'shift_1', + }, + ), + ( + 'temporal_localization_w_fpn_weight_sharing_class_agnostic_displacements', + np.ones((2, 10, 6, 8)), + np.ones((2, 10, 8)), + ml_collections.ConfigDict({ + 'num_features_level0': 4, + 'feature_pyramid_levels': [0, 1], + 'feature_pyramid_downsample_stride': 2, + }), + True, + False, + (2, 6, 12), + { + 'ClassificationHead', + 'RegressionHead', + 'scale_0', + 'scale_1', + 'shift_0', + 'shift_1', + }, + ), + ( + 'temporal_localization_w_fpn_separate_decoders', + np.ones((2, 10, 6, 8)), + np.ones((2, 10, 8)), + ml_collections.ConfigDict({ + 'num_features_level0': 4, + 'feature_pyramid_levels': [0, 1], + 'feature_pyramid_downsample_stride': 2, + }), + False, + True, + (2, 6, 30), + { + 'ClassificationHead_0', + 'ClassificationHead_1', + 'RegressionHead_0', + 'RegressionHead_1', + }, + ), + ( + 'temporal_localization_w_fpn_separate_decoders_class_agnostic_displacements', + np.ones((2, 10, 6, 8)), + np.ones((2, 10, 8)), + ml_collections.ConfigDict({ + 'num_features_level0': 4, + 'feature_pyramid_levels': [0, 1], + 'feature_pyramid_downsample_stride': 2, + }), + False, + False, + (2, 6, 12), + { + 'ClassificationHead_0', + 'ClassificationHead_1', + 'RegressionHead_0', + 'RegressionHead_1', + }, + ), + ) + def test_query_dependent_localization_head_tal( + self, + video_tokens, + txt_emb, + feature_pyramid_config, + weight_sharing, + output_per_class_displacements, + expected_output_shape, + expected_keys, + ): + rng = random.PRNGKey(0) + output, params = heads.QueryDependentLocalizationHead( + num_conv_layers=3, + kernel_size=3, + num_classes=-1, + feature_pyramid_config=feature_pyramid_config, + weight_sharing=weight_sharing, + output_per_class_displacements=output_per_class_displacements, + ).init_with_output( + rng, video_tokens, txt_emb, 'temporal_localization', train=False + ) + self.assertTupleEqual(output.shape, expected_output_shape) + self.assertSetEqual(set(params['params'].keys()), expected_keys) + + @parameterized.named_parameters( + ( + 'weight_sharing_per_class_displacement', + np.ones((2, 4, 8)), + None, + True, + True, + (2, 4, 30), + {'ClassificationHead', 'RegressionHead', 'scale_0', 'shift_0'}, + ), + ( + 'weight_sharing', + np.ones((2, 4, 8)), + None, + True, + False, + (2, 4, 12), + {'ClassificationHead', 'RegressionHead', 'scale_0', 'shift_0'}, + ), + ( + 'fpn_weight_sharing_per_class_displacement', + np.ones((2, 6, 8)), + ml_collections.ConfigDict({ + 'num_features_level0': 4, + 'feature_pyramid_levels': [0, 1], + 'feature_pyramid_downsample_stride': 2, + }), + True, + True, + (2, 6, 30), + { + 'ClassificationHead', + 'RegressionHead', + 'scale_0', + 'scale_1', + 'shift_0', + 'shift_1', + }, + ), + ( + 'fpn_separate_decoders_per_class_displacement', + np.ones((2, 6, 8)), + ml_collections.ConfigDict({ + 'num_features_level0': 4, + 'feature_pyramid_levels': [0, 1], + 'feature_pyramid_downsample_stride': 2, + }), + False, + True, + (2, 6, 30), + { + 'ClassificationHead_0', + 'ClassificationHead_1', + 'RegressionHead_0', + 'RegressionHead_1', + }, + ), + ( + 'fpn_separate_decoders', + np.ones((2, 6, 8)), + ml_collections.ConfigDict({ + 'num_features_level0': 4, + 'feature_pyramid_levels': [0, 1], + 'feature_pyramid_downsample_stride': 2, + }), + False, + False, + (2, 6, 12), + { + 'ClassificationHead_0', + 'ClassificationHead_1', + 'RegressionHead_0', + 'RegressionHead_1', + }, + ), + ) + def test_localization_head_tal( + self, + x, + feature_pyramid_config, + weight_sharing, + output_per_class_displacements, + expected_output_shape, + expected_keys, + ): + rng = random.PRNGKey(0) + output, params = heads.LocalizationHead( + num_conv_layers=3, + kernel_size=3, + num_classes=10, + feature_pyramid_config=feature_pyramid_config, + weight_sharing=weight_sharing, + output_per_class_displacements=output_per_class_displacements, + ).init_with_output( + rng, + x, + None, + 'temporal_localization', + train=False, + ) + self.assertTupleEqual(output.shape, expected_output_shape) + self.assertSetEqual(set(params['params'].keys()), expected_keys) + + @parameterized.named_parameters( + ( + 'moment_retrieval_weight_sharing', + np.ones((2, 2, 8, 16)), + np.ones((2, 2, 16)), + None, + True, + (2, 2, 8, 3), + {'ClassificationHead', 'RegressionHead', 'scale_0', 'shift_0'}, + ), + ( + 'moment_retrieval_w_fpn_weight_sharing', + np.ones((2, 2, 12, 16)), + np.ones((2, 2, 16)), + ml_collections.ConfigDict({ + 'num_features_level0': 8, + 'feature_pyramid_levels': [0, 1], + 'feature_pyramid_downsample_stride': 2, + }), + True, + (2, 2, 12, 3), + { + 'ClassificationHead', + 'RegressionHead', + 'scale_0', + 'scale_1', + 'shift_0', + 'shift_1', + }, + ), + ( + 'moment_retrieval_w_fpn_separate_decoders', + np.ones((2, 2, 12, 16)), + np.ones((2, 2, 16)), + ml_collections.ConfigDict({ + 'num_features_level0': 8, + 'feature_pyramid_levels': [0, 1], + 'feature_pyramid_downsample_stride': 2, + }), + False, + (2, 2, 12, 3), + { + 'ClassificationHead_0', + 'ClassificationHead_1', + 'RegressionHead_0', + 'RegressionHead_1', + }, + ), + ) + def test_query_dependent_localization_head_mr( + self, + video_tokens, + txt_emb, + feature_pyramid_config, + weight_sharing, + expected_output_shape, + expected_keys, + ): + rng = random.PRNGKey(0) + output, params = heads.QueryDependentLocalizationHead( + num_conv_layers=3, + kernel_size=3, + num_classes=-1, + feature_pyramid_config=feature_pyramid_config, + weight_sharing=weight_sharing, + ).init_with_output( + rng, video_tokens, txt_emb, 'moment_retrieval', train=False + ) + self.assertTupleEqual(output.shape, expected_output_shape) + self.assertSetEqual(set(params['params'].keys()), expected_keys) + + +if __name__ == '__main__': + tf.test.main() diff --git a/scenic/projects/unloc/main.py b/scenic/projects/unloc/main.py new file mode 100644 index 0000000000000000000000000000000000000000..fc02662e58547183010185587f6c9328e8cdedad --- /dev/null +++ b/scenic/projects/unloc/main.py @@ -0,0 +1,56 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for launching UnLoc training jobs.""" + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.unloc import model +from scenic.projects.unloc import single_task_trainer +from scenic.train_lib import train_utils + +FLAGS = flags.FLAGS + + +def get_trainer(trainer_name: str): + """Returns trainer given its name.""" + if trainer_name == 'single_task_trainer': + return single_task_trainer.train + raise ValueError(f'Unsupported trainer: {trainer_name}.') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the UnLoc project.""" + model_cls = model.MODELS[config.model_name] + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + trainer = get_trainer(config.trainer_name) + + trainer( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/unloc/metrics.py b/scenic/projects/unloc/metrics.py new file mode 100644 index 0000000000000000000000000000000000000000..1af482c5d4fcace8a36b1fd5ac3d32731556e7ae --- /dev/null +++ b/scenic/projects/unloc/metrics.py @@ -0,0 +1,202 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Implements metrics.""" + +from typing import Any, List, Union + +import jax.numpy as jnp +import numpy as np + +PyModule = Any +Array = Union[jnp.ndarray, np.ndarray] +Scalar = Union[int, float, np.number, np.ndarray, jnp.ndarray] + + +def frame_accuracy( + logits: np.ndarray, + label: np.ndarray, + background_logit_threshold: float = 0.0, +) -> float: + """Computes frame accuracy. + + We assume there are background samples where the labels are all zeros. + + Args: + logits: Class logits in shape (N, num_classes). + label: Multihot class labels in shape (N, num_classes). + background_logit_threshold: If the max logit of an example is less than this + value, this example is predicted as background. + + Returns: + Accuracy computed as number of correctly predicted frames over total number + of frames. + """ + top1_idx = np.argmax(logits, axis=-1) + background_label = np.sum(label, axis=-1) == 0 + pred_background = ( + np.max(logits, axis=-1) <= background_logit_threshold + ).astype(np.int32) + + # Extracts the label at the highest logit index for each input. + top1_correct = np.take_along_axis(label, top1_idx[..., None], axis=-1) + top1_correct = np.squeeze(top1_correct) + foreground_correct = ~pred_background.astype(bool) * top1_correct + + # Count correctly classified background samples. + background_correct = pred_background * background_label + correct = foreground_correct + background_correct + return np.sum(correct) / len(logits) + + +def temporal_iou(pred_displacements: Array, + gt_displacements: Array, + eps: float = 1e-6, + np_backend: PyModule = jnp) -> Array: + """Computes temporal IoUs. + + The displacements are assumed to be greater or equal to zero. + + Args: + pred_displacements: A ND array where the last dimension is 2 containing the + predicted displacements to the start/end times. + gt_displacements: A ND array where the last dimension is 2 containing the + ground truth displacements to the start/end times. + eps: A small value to avoid division by zero. + np_backend: Numpy backend. + + Returns: + A (N-1)D array containing the computed IoUs. + """ + intersection = np_backend.minimum( + pred_displacements[..., 0], + gt_displacements[..., 0]) + np_backend.minimum(pred_displacements[..., 1], + gt_displacements[..., 1]) + union = np_backend.maximum(pred_displacements[..., 0], + gt_displacements[..., 0]) + np_backend.maximum( + pred_displacements[..., 1], + gt_displacements[..., 1]) + return intersection / (union + eps) + + +def center_offset_squared(pred_displacements: Array, + gt_displacements: Array, + eps: float = 1e-6, + np_backend: PyModule = jnp) -> Array: + """Computes squared offset between centers of temporal segments. + + The displacements are assumed to be greater or equal to zero. + + Args: + pred_displacements: A ND array where the last dimension is 2 containing the + predicted displacements to the start/end times. + gt_displacements: A ND array where the last dimension is 2 containing the + ground truth displacements to the start/end times. + eps: A small value to avoid division by zero. + np_backend: Numpy backend. + + Returns: + A (N-1)D array of squared offsets between centers of temporal segments. + """ + union = np_backend.maximum(pred_displacements[..., 0], + gt_displacements[..., 0]) + np_backend.maximum( + pred_displacements[..., 1], + gt_displacements[..., 1]) + offset = 0.5 * ( + pred_displacements[..., 1] - pred_displacements[..., 0] - + (gt_displacements[..., 1] - gt_displacements[..., 0])) + return np_backend.square(offset / (union + eps)) + + +def normalized_l1( + pred_displacements: Array, + gt_displacements: Array, + eps: float = 1e-6, + np_backend: PyModule = jnp, +) -> Array: + """Computes the normalized L1 distance between two temporal segments.""" + union = np_backend.maximum( + pred_displacements[..., 0], gt_displacements[..., 0] + ) + np_backend.maximum(pred_displacements[..., 1], gt_displacements[..., 1]) + l1_norm = np_backend.abs( + gt_displacements[..., 0] - pred_displacements[..., 0] + ) + np_backend.abs(gt_displacements[..., 1] - pred_displacements[..., 1]) + return l1_norm / (union + eps) + + +def compute_iou(segment1: Array, segment2: Array) -> Any: + """Computes the IoU score between two temporal segments.""" + start = max(segment1[0], segment2[0]) + end = min(segment1[1], segment2[1]) + if start >= end: + return 0.0 + intersection = end - start + duration1 = segment1[1] - segment1[0] + duration2 = segment2[1] - segment2[0] + union = duration1 + duration2 - intersection + return intersection / union + + +def compute_recall_at_k( + ground_truth_segments: List[Array], + predicted_segments: List[Array], + predicted_scores: List[Array], + ranks: List[int], + iou_thresholds: List[float], +) -> dict[str, Scalar]: + """Compute recall at k given a iou threshold. + + Compute the recall@k for a set of ground-truth segments, predicted segments, + and predicted scores, given a list of specific IoU threshold. + + Args: + ground_truth_segments: Each element represents the ground-truth segment for + the corresponding caption, with the start and end frame indices. + predicted_segments: Each element represents the predicted segments for the + corresponding caption, with the start and end frame indices for each. + predicted_scores: Each element represents the predicted segments score + for the corresponding caption. + ranks: The number of top ranked segments to consider for each caption. + iou_thresholds: The IoU threshold. A predicted segment is considered + positive if its IoU with the ground-truth segment is at least this value. + + Returns: + The mean recall@k over all captions with the given IoU. + """ + + metrics = {} + num_captions = len(ground_truth_segments) + for r in ranks: + for iou_threshold in iou_thresholds: + recall = 0.0 + for i in range(num_captions): + ground_truth_segment = ground_truth_segments[i] + predicted_segment_scores = predicted_scores[i] + num_predictions = min(r, len(predicted_segment_scores)) + if num_predictions == 0: + continue + sorted_indices = np.argsort(predicted_segment_scores)[::-1] + predicted_segments_sorted = predicted_segments[i][sorted_indices] + for j in range(num_predictions): + predicted_segment = predicted_segments_sorted[j] + iou = compute_iou(ground_truth_segment, predicted_segment) + if iou >= iou_threshold: + recall += 1 + break + metrics.update( + { + 'R@{},IOU={}'.format(r, iou_threshold): recall / num_captions + } + ) + return metrics diff --git a/scenic/projects/unloc/metrics_test.py b/scenic/projects/unloc/metrics_test.py new file mode 100644 index 0000000000000000000000000000000000000000..fafbb9848ff89d315515f9a65df2047388e6f530 --- /dev/null +++ b/scenic/projects/unloc/metrics_test.py @@ -0,0 +1,171 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for metrics.""" + +from absl.testing import parameterized +import numpy as np +from scenic.projects.unloc import metrics +import tensorflow as tf + + +class MetricsTest(tf.test.TestCase, parameterized.TestCase): + + def test_frame_accuracy(self): + logits = np.array([ + [1.5, 0.0, -1.0], + [0.1, 0.7, 0.2], + [0.1, 0.7, 0.2], + [0.1, -0.7, 0.2], + [-0.1, -0.7, -0.2], + ], np.float32) + label = np.array([ + [1, 0, 0], + [0, 1, 0], + [0, 0, 1], + [0, 0, 0], + [0, 0, 0], + ], np.int32) + actual = metrics.frame_accuracy(logits, label) + self.assertAlmostEqual(actual, 0.6) + + def test_frame_accuracy_all_background(self): + logits = np.array( + [ + [1.5, 0.0, -1.0], + [0.1, 0.7, 0.2], + [0.1, 0.7, 0.2], + [0.1, -0.7, 0.2], + [-0.1, -0.7, -0.2], + ], + np.float32, + ) + label = np.array( + [ + [0, 0, 0], + [0, 0, 0], + [0, 0, 0], + [0, 0, 0], + [0, 0, 0], + ], + np.int32, + ) + actual = metrics.frame_accuracy(logits, label) + self.assertAlmostEqual(actual, 0.2) + + def test_frame_accuracy_all_foreground(self): + logits = np.array( + [ + [1.5, 0.0, -1.0], + [0.1, 0.7, 0.2], + [0.1, 0.7, 0.2], + [0.1, -0.7, -0.2], + [-0.1, -0.7, -0.2], + ], + np.float32, + ) + label = np.array( + [ + [1, 0, 0], + [0, 1, 0], + [0, 0, 1], + [0, 1, 0], + [1, 0, 0], + ], + np.int32, + ) + actual = metrics.frame_accuracy(logits, label) + self.assertAlmostEqual(actual, 0.4) + + @parameterized.named_parameters( + ('both_inside_gt', [[0.3, 0.2]], [0.5]), + ('both_inside_gt_two_items', [[0.3, 0.2], [0.4, 0.4]], [0.5, 0.8]), + ('both_outside_gt', [[0.6, 0.7]], [1. / 1.3]), + ('start_outside_end_inside_gt', [[0.6, 0.3]], [0.8 / 1.1]), + ('end_outside_start_inside_gt', [[0.3, 0.7]], [0.8 / 1.2]), + ('pred_equal_gt', [[0.5, 0.5]], [1.]), + ) + def test_temporal_iou(self, pred_displacements, expected_ious): + pred_displacements = np.array(pred_displacements, dtype=np.float32) + gt_displacements = np.array([[0.5, 0.5]], dtype=np.float32) + ious = metrics.temporal_iou(pred_displacements, gt_displacements) + self.assertAllClose(ious, expected_ious) + + @parameterized.named_parameters( + ('both_inside_gt', [[0.3, 0.2]], [0.0025]), + ('both_inside_gt_two_items', [[0.3, 0.2], [0.4, 0.4]], [0.0025, 0.0]), + ('both_outside_gt', [[0.6, 0.7]], [(0.05 / 1.3)**2]), + ('start_outside_end_inside_gt', [[0.6, 0.3]], [(0.15 / 1.1)**2]), + ('end_outside_start_inside_gt', [[0.3, 0.7]], [(0.2 / 1.2)**2]), + ('pred_equal_gt', [[0.5, 0.5]], [0.]), + ) + def test_center_offset_squared(self, pred_displacements, expected): + pred_displacements = np.array(pred_displacements, dtype=np.float32) + gt_displacements = np.array([[0.5, 0.5]], dtype=np.float32) + actual = metrics.center_offset_squared(pred_displacements, gt_displacements) + self.assertAllClose(actual, expected) + + @parameterized.named_parameters( + ('both_inside_gt', [[0.3, 0.2]], [0.5]), + ('both_inside_gt_two_items', [[0.3, 0.2], [0.4, 0.4]], [0.5, 0.2]), + ('both_outside_gt', [[0.6, 0.7]], [0.3 / 1.3]), + ('start_outside_end_inside_gt', [[0.6, 0.3]], [0.3 / 1.1]), + ('end_outside_start_inside_gt', [[0.3, 0.7]], [0.4 / 1.2]), + ('pred_equal_gt', [[0.5, 0.5]], [0.0]), + ) + def test_normalized_l1(self, pred_displacements, expected): + pred_displacements = np.array(pred_displacements, dtype=np.float32) + gt_displacements = np.array([[0.5, 0.5]], dtype=np.float32) + actual = metrics.normalized_l1(pred_displacements, gt_displacements) + self.assertAllClose(actual, expected) + + @parameterized.named_parameters( + ('r@1_iou_0.5', [1], [0.5], [0.5]), + ('r@2_iou_0.5', [2], [0.5], [0.75]), + ('r@1_iou_0.75', [1], [0.75], [0.5]), + ('r@1_5_iou_0.75_0.9', [1, 5], [0.75, 0.9], [0.5, 0.0, 0.75, 0.0]), + ) + def test_compute_recall_at_k(self, ranks, iou_thresholds, expected): + ground_truth_segments = [ + np.array([10, 20], dtype=np.float32), + np.array([30, 40], dtype=np.float32), + np.array([50, 60], dtype=np.float32), + np.array([70, 70.5], dtype=np.float32), + ] + predicted_segments = [ + np.array([[11, 19], [15, 25], [30, 35], [40, 45]], dtype=np.float32), + np.array([[31, 39], [32, 38], [35, 40], [20, 30]], dtype=np.float32), + np.array([[51, 59], [52, 58], [55, 60], [60, 65]], dtype=np.float32), + np.array([], dtype=np.float32), + ] + predicted_scores = [ + np.array([0.9, 0.8, 0.7, 0.6]), + np.array([0.6, 0.7, 0.8, 0.9]), + np.array([0.9, 0.8, 0.7, 0.6]), + np.array([], dtype=np.float32), # no detections under low resolution. + ] + actual = metrics.compute_recall_at_k( + ground_truth_segments, + predicted_segments, + predicted_scores, + ranks, + iou_thresholds, + ) + scores_out = [score for _, score in actual.items()] + self.assertAllClose( + scores_out, expected + ) + +if __name__ == '__main__': + tf.test.main() diff --git a/scenic/projects/unloc/model.py b/scenic/projects/unloc/model.py new file mode 100644 index 0000000000000000000000000000000000000000..f47bddbd1ba35690e0a44c25e0c675763f0d1aec --- /dev/null +++ b/scenic/projects/unloc/model.py @@ -0,0 +1,476 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Contains UnLoc models.""" + +from typing import Any, Dict, Optional + +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.projects.unloc import action_segmentation_base_model +from scenic.projects.unloc import encoders +from scenic.projects.unloc import heads +from scenic.projects.unloc import moment_retrieval_base_model +from scenic.projects.unloc import temporal_localization_base_model +from scenic.projects.unloc import video_text_fusion + +# Mainly for unit tests. +_DEFAULT_UNLOC_CONFIG = ml_collections.ConfigDict({ + 'model': ml_collections.ConfigDict({ + 'video_tower_config': ml_collections.ConfigDict( + { + 'modality_configs': { + 'rgb': ml_collections.ConfigDict({ + 'encoder_name': 'clip_video_encoder', + 'encoder_config': ml_collections.ConfigDict({ + 'num_classes': -1, + 'image_encoder_config': ml_collections.ConfigDict({ + 'features': 8, + 'num_layers': 2, + 'num_heads': 2, + 'classifier': 'token', + 'patches': ml_collections.ConfigDict({ + 'size': (4, 4, 1), + }), + }), + 'temporal_encoding_config': ml_collections.ConfigDict({ + 'method': '3d_conv', + 'kernel_init_method': ( + 'central_frame_initializer' + ), + }), + 'temporal_encoder_config': None, + 'final_endpoint': 'temporal_tokens', + 'classifier': 'gap', + }), + }), + } + } + ), + 'text_tower_config': ml_collections.ConfigDict({ + 'encoder_name': 'clip_text_encoder', + 'encoder_config': ml_collections.ConfigDict( + dict( + vocab_size=100, + num_layers=2, + hidden_size=8, + num_heads=2, + classifier='eos', + ) + ), + }), + 'video_text_fusion_config': ml_collections.ConfigDict({ + 'type': 'video_text_self_attention', + 'config': ml_collections.ConfigDict({ + 'text_tower_classifier': 'token', + 'self_attention_encoder_config': ml_collections.ConfigDict({ + 'num_heads': 2, + 'mlp_dim': 16, + 'num_layers': 1, + 'dropout_rate': 0.0, + 'attention_dropout_rate': 0.0, + 'stochastic_depth': 0.1, + }), + 'use_all_text_tokens': False, + 'self_attention_encoder_name': 'transformer', + }), + }), + 'head_config': ml_collections.ConfigDict({ + 'classification': ml_collections.ConfigDict({ + 'type': 'linear_head', + 'config': ml_collections.ConfigDict(), + }), + 'temporal_localization': ml_collections.ConfigDict({ + 'type': 'query_dependent_localization_head', + 'config': ml_collections.ConfigDict({ + 'num_conv_layers': 3, + 'kernel_size': 3, + 'num_classes': -1, + }), + }), + 'highlight_detection': ml_collections.ConfigDict({ + 'type': 'query_dependent_localization_head', + 'config': ml_collections.ConfigDict({ + 'num_conv_layers': 3, + 'kernel_size': 3, + 'num_classes': 1, + }), + }), + 'moment_retrieval': ml_collections.ConfigDict({ + 'type': 'query_dependent_localization_head', + 'config': ml_collections.ConfigDict({ + 'num_conv_layers': 3, + 'kernel_size': 3, + }), + }), + 'action_segmentation': ml_collections.ConfigDict({ + 'type': 'linear_head', + 'config': ml_collections.ConfigDict(), + }), + }), + 'classifier': 'token', + 'num_classes': 10, + }), +}) + + +class VideoTextSingleTower(nn.Module): + """Implements a video+text single-tower backbone. + + Attributes: + num_classes: Number of output classes. + video_tower_config: The config of the video tower. + text_tower_config: The config of the text tower. + video_text_fusion_config: The config of video+text fusion. + classifier: 'gap' or 'token' + """ + + num_classes: int + video_tower_config: ml_collections.ConfigDict + text_tower_config: ml_collections.ConfigDict + video_text_fusion_config: ml_collections.ConfigDict + head_config: ml_collections.ConfigDict + classifier: str = 'token' + + def setup(self): + if self.video_tower_config.get('modality_configs') is None: + # Ensure backward compatibility for single modality. + self.video_encoder = encoders.ENCODERS[ + self.video_tower_config.encoder_name + ](name='video_encoder', **self.video_tower_config.encoder_config) + if self.video_tower_config.get('projection_size'): + self.video_projection = nn.Dense( + self.video_tower_config.projection_size, + use_bias=self.video_tower_config.get('projection_use_bias', True), + name='video_projection', + ) + else: + self.video_encoders = { # pylint: disable=g-complex-comprehension + modality_name: encoders.ENCODERS[modality_config.encoder_name]( + name=f'{modality_name}_encoder', **modality_config.encoder_config + ) + for ( + modality_name, + modality_config, + ) in self.video_tower_config.modality_configs.items() + } + self.modality_ln = { # pylint: disable=g-complex-comprehension + modality_name: nn.LayerNorm(name=f'{modality_name}_ln') + for ( + modality_name, + _, + ) in self.video_tower_config.modality_configs.items() + } + self.modality_projections = { # pylint: disable=g-complex-comprehension + modality_name: nn.Dense( + modality_config.projection_size, + use_bias=modality_config.get('projection_use_bias', True), + name=f'{modality_name}_projection', + ) + for ( + modality_name, + modality_config, + ) in self.video_tower_config.modality_configs.items() + if modality_config.get('projection_size') + } + if self.video_tower_config.get('projection_size'): + self.video_projection = nn.Dense( + self.video_tower_config.projection_size, + name='concat_video_projection', + ) + if self.text_tower_config is not None: + self.text_encoder = encoders.ENCODERS[ + self.text_tower_config.encoder_name + ](name='text_encoder', **self.text_tower_config.encoder_config) + if self.text_tower_config.get('projection_size'): + self.text_projection = nn.Dense( + self.text_tower_config.projection_size, + use_bias=self.text_tower_config.get('projection_use_bias', True), + name='text_projection', + ) + self.fusion_model = video_text_fusion.FUSION_MODELS[ + self.video_text_fusion_config.type + ](name='video_text_fusion', **self.video_text_fusion_config.config) + self.head_models = { + head_name: heads.HEADS[head_config.type]( + name=f'{head_name}_head', **head_config.config + ) + for head_name, head_config in self.head_config.items() + } + + def fuse_video_text(self, + video_tokens: jnp.ndarray, + text_tokens: jnp.ndarray, + task: str, + input_word_ids: Optional[jnp.ndarray] = None, + text_input_mask: Optional[jnp.ndarray] = None, + video_input_mask: Optional[jnp.ndarray] = None, + train: bool = True, + debug: bool = False) -> jnp.ndarray: + """Fuses video and text tokens. + + Args: + video_tokens: A 3D float tensor of shape (batch_size, sequence_length, + channels) representing the image tokens. + text_tokens: A 3D float tensor of shape (num_classes, sequence_length, + channels) representing the text tokens. + task: 'action_segmentation', classification', 'temporal_localization', + 'moment_retrieval' or 'highlight_detection'. + input_word_ids: A 2D int tensor of shape (num_classes, sequence_length) + representing the input word indices. + text_input_mask: A 2D binary tensor of shape (batch_size, sequence_length) + representing the mask of the text inputs. + video_input_mask: A 2D binary tensor of shape (batch_size, + sequence_length) representing the mask of the video inputs. + train: Whether or not the model is under training. + debug: Whether or not it is in debug mode. + + Returns: + A 3D float tensor of shape (batch_size, num_classes, channels). + + Raises: + ValueError if video_text_fusion_config.type is not supported. + """ + video_tokens, text_tokens = self.fusion_model(video_tokens, text_tokens, + task, input_word_ids, + text_input_mask, + video_input_mask, train) + return self.head_models[task](video_tokens, text_tokens, task, train) + + # TODO(xxman): support other multimodal fusion types. + def encode_video(self, + inputs: Dict[str, Any], + train: bool = False, + debug: bool = False) -> jnp.ndarray: + """Encodes video. + + We use a separate encoder to encode each modality and the output is obtained + by concatenating encoded tokens in the channel dimension. We assume that + all modality share the same sequence length. + + Args: + inputs: Mappings from modality names to input data from each modality. + train: Whether or not it is in training. + debug: Whether or not it is in debug mode. + + Returns: + A 3D float tensor of shape (batch, seq_length, channels) representing the + concatenated encoded tokens. + """ + + if self.video_tower_config.get('modality_configs') is None: + # Ensure backward compatibility. + input_key = self.video_tower_config.get('input_key', 'rgb') + video_tokens = self.video_encoder( + inputs[input_key], train=train, debug=debug + ) + if self.video_tower_config.get('freeze', False): + video_tokens = jax.lax.stop_gradient(video_tokens) + if self.video_tower_config.get('projection_size') is not None: + video_tokens = self.video_projection(video_tokens) + return video_tokens + + video_tokens = [] + for ( + modality_name, + modality_config, + ) in self.video_tower_config.modality_configs.items(): + tokens = self.video_encoders[modality_name]( + inputs[modality_name], train=train, debug=debug + ) + if modality_config.get('freeze', False): + tokens = jax.lax.stop_gradient(tokens) + if modality_config.get('projection_size') is not None: + tokens = self.modality_projections[modality_name](tokens) + if modality_config.get('apply_post_encoder_layer_norm'): + tokens = self.modality_ln[modality_name](tokens) + video_tokens.append(tokens) + video_tokens = jnp.concatenate(video_tokens, axis=-1) + if self.video_tower_config.get('projection_size') is not None: + video_tokens = self.video_projection(video_tokens) + return video_tokens + + def encode_text( + self, + inputs: Dict[str, Any], + task: str, + train: bool = False, + debug: bool = False, + ) -> Optional[jnp.ndarray]: + """Encodes text.""" + + if self.text_tower_config is None: + return None + + if task == 'moment_retrieval': + # Merges all captions + text_inputs = jax.tree_util.tree_map( + lambda x: x.reshape((-1, x.shape[-1])), inputs['caption']) + elif task == 'highlight_detection': + input_key = self.text_tower_config.get('input_key', 'video_title') + text_inputs = inputs[input_key] + else: + # The class names are the same in all batches. + text_inputs = jax.tree_util.tree_map(lambda x: x[0], + inputs['class_names']) + text_tokens = self.text_encoder(text_inputs, train=train, debug=debug) + if self.text_tower_config.get('freeze', False): + text_tokens = jax.lax.stop_gradient(text_tokens) + if self.text_tower_config.get('projection_size') is not None: + text_tokens = self.text_projection(text_tokens) + return text_tokens + + def __call__(self, + inputs: Dict[str, Any], + task: str = 'classification', + dataset: str = '', + train: bool = False, + debug: bool = False): + """Runs model inference. + + In this model, the video encoder, text encoder, and video-text fusion + encoder are shared among all tasks. We build a different head for a + different task and/or a different dataset. The head will have a unique name + '{dataset}_{task}_head' if dataset is given. Otherwise, the head will have + a name '{task}_head'. + + Args: + inputs: Input dict containing the rgb frames or rgb embeddings and + tokenized texts or text embeddings. RGB frames has a shape (batch_size, + num_frames, height, width, channels) and RGB embeddings has a shape + (batch_size, num_frames, channels). inputs['class_names'] or + inputs['caption'] is dict of three elements whose keys are 'input_mask', + 'input_word_ids', and 'input_type_ids'. + task: 'action_segmentation', classification', 'temporal_localization', + 'moment_retrieval' or 'highlight_detection'. + dataset: The name of the dataset. The name will be used to create + different heads for different datasets. + train: Whether or not the model is under training. + debug: Whether or not it is in debug mode. + + Returns: + A 2D float tensor of shape (batch_size, num_classes) representing the + logits for each class. + """ + assert task in { + 'action_segmentation', + 'classification', + 'temporal_localization', + 'moment_retrieval', + 'highlight_detection', + } + + input_word_ids = None + text_input_mask = None + if self.text_tower_config is not None: + if task == 'moment_retrieval': + # Merges all captions + text_inputs = jax.tree_util.tree_map( + lambda x: x.reshape((-1, x.shape[-1])), inputs['caption'] + ) + elif task == 'highlight_detection': + input_key = self.text_tower_config.get('input_key', 'video_title') + text_inputs = inputs[input_key] + else: + # The class names are the same in all batches. + text_inputs = jax.tree_util.tree_map( + lambda x: x[0], inputs['class_names'] + ) + if ( + self.text_tower_config.get('input_type', 'tokenized_text') + == 'tokenized_text' + ): + if task in { + 'action_segmentation', + 'temporal_localization', + 'classification', + }: + assert text_inputs['input_word_ids'].shape[0] == self.num_classes + input_word_ids = text_inputs['input_word_ids'] + text_input_mask = text_inputs['input_mask'] + video_tokens = self.encode_video(inputs, train=train, debug=debug) + text_tokens = self.encode_text(inputs, task=task, train=train, debug=debug) + return self.fuse_video_text( + video_tokens, + text_tokens, + task, + input_word_ids, + text_input_mask, + video_input_mask=inputs.get('input_mask'), + train=train, + debug=debug) + + +class UnlocTemporalLocalizationModel( + temporal_localization_base_model.TemporalLocalizationModel +): + """Video-text single tower temporal localization model.""" + + def build_flax_model(self) -> nn.Module: + return VideoTextSingleTower( + num_classes=self.dataset_meta_data['num_classes'], + video_tower_config=self.config.model.video_tower_config, + text_tower_config=self.config.model.text_tower_config, + video_text_fusion_config=self.config.model.video_text_fusion_config, + head_config=self.config.model.head_config, + classifier=self.config.model.classifier) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return _DEFAULT_UNLOC_CONFIG + + +class UnlocMomentRetrievalModel( + moment_retrieval_base_model.MomentRetrievalModel +): + """Video-text single tower moment retrieval model.""" + + def build_flax_model(self) -> nn.Module: + return VideoTextSingleTower( + num_classes=self.dataset_meta_data['num_classes'], + video_tower_config=self.config.model.video_tower_config, + text_tower_config=self.config.model.text_tower_config, + video_text_fusion_config=self.config.model.video_text_fusion_config, + head_config=self.config.model.head_config, + classifier=self.config.model.classifier) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return _DEFAULT_UNLOC_CONFIG + + +class UnlocActionSegmentationModel( + action_segmentation_base_model.ActionSegmentationModel +): + """Video-text single tower action segmentation model.""" + + def build_flax_model(self) -> nn.Module: + return VideoTextSingleTower( + num_classes=self.dataset_meta_data['num_classes'], + video_tower_config=self.config.model.video_tower_config, + text_tower_config=self.config.model.text_tower_config, + video_text_fusion_config=self.config.model.video_text_fusion_config, + head_config=self.config.model.head_config, + classifier=self.config.model.classifier) + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return _DEFAULT_UNLOC_CONFIG + + +MODELS = { + 'unloc_action_segmentation': UnlocActionSegmentationModel, + 'unloc_highlight_detection': UnlocTemporalLocalizationModel, + 'unloc_moment_retrieval': UnlocMomentRetrievalModel, + 'unloc_temporal_localization': UnlocTemporalLocalizationModel, +} diff --git a/scenic/projects/unloc/model_test.py b/scenic/projects/unloc/model_test.py new file mode 100644 index 0000000000000000000000000000000000000000..4d6a2efbd1a95030c1f153142628e1838db339a2 --- /dev/null +++ b/scenic/projects/unloc/model_test.py @@ -0,0 +1,292 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for model.""" + +import copy +from absl.testing import parameterized +import flax +from jax import random +import jax.numpy as jnp +import ml_collections +from scenic.projects.unloc import model +import tensorflow as tf + + +class ModelTest(tf.test.TestCase, parameterized.TestCase): + + def setUp(self): + super().setUp() + self.images = jnp.ones((2, 4, 8, 8, 3)) + self.text_inputs = { + 'input_word_ids': jnp.ones((2, 10, 8), dtype=jnp.int32), + 'input_type_ids': jnp.zeros((2, 10, 8), dtype=jnp.int32), + 'input_mask': jnp.ones((2, 10, 8), dtype=jnp.int32), + } + self.caption = { + 'input_word_ids': jnp.ones((2, 2, 10), dtype=jnp.int32), + 'input_type_ids': jnp.zeros((2, 2, 10), dtype=jnp.int32), + 'input_mask': jnp.ones((2, 2, 10), dtype=jnp.int32), + } + self.video_title = { + 'input_word_ids': jnp.ones((2, 10), dtype=jnp.int32), + 'input_type_ids': jnp.zeros((2, 10), dtype=jnp.int32), + 'input_mask': jnp.ones((2, 10), dtype=jnp.int32), + } + self.text_emb_inputs = jnp.ones((2, 10, 8), dtype=jnp.float32) + self.caption_emb_inputs = jnp.ones((2, 1, 8), dtype=jnp.float32) + self.inputs = { + 'rgb': self.images, + 'class_names': self.text_inputs, + 'caption': self.caption, + 'video_title': self.video_title, + } + self.clip_video_tower_config = ml_collections.ConfigDict( + { + 'modality_configs': { + 'rgb': ml_collections.ConfigDict({ + 'encoder_name': 'clip_video_encoder', + 'encoder_config': ml_collections.ConfigDict({ + 'num_classes': -1, + 'image_encoder_config': ml_collections.ConfigDict( + dict( + patches=ml_collections.ConfigDict( + {'size': (4, 4, 1)} + ), + features=8, + num_layers=2, + num_heads=2, + ) + ), + 'temporal_encoding_config': ml_collections.ConfigDict({ + 'method': '3d_conv', + 'kernel_init_method': 'central_frame_initializer', + }), + 'temporal_encoder_config': None, + 'final_endpoint': 'temporal_tokens', + 'classifier': 'token', + }), + 'projection_size': 8, + 'projection_use_bias': False, + }) + } + } + ) + self.clip_text_tower_config = ml_collections.ConfigDict({ + 'encoder_name': + 'clip_text_encoder', + 'encoder_config': + ml_collections.ConfigDict( + dict( + vocab_size=100, + num_layers=2, + hidden_size=8, + num_heads=2, + classifier='eos')), + 'projection_size': + 8, + 'projection_use_bias': + False, + }) + self.pass_through_encoder_config = ml_collections.ConfigDict({ + 'encoder_name': 'pass_through_encoder', + 'encoder_config': {}, + 'input_type': 'text_emb', + }) + self.video_textemb_fusion_encoder_config = ml_collections.ConfigDict({ + 'self_attention_encoder_config': ml_collections.ConfigDict({ + 'num_heads': 2, + 'mlp_dim': 16, + 'num_layers': 1, + 'dropout_rate': 0.0, + 'attention_dropout_rate': 0.0, + 'stochastic_depth': 0.1, + }), + 'self_attention_encoder_name': 'transformer', + }) + + @parameterized.named_parameters( + ( + 'video_text_self_attention_moment_retrieval', + 'video_text_self_attention', + 'tokenized_text', + None, + 'query_dependent_localization_head', + 'moment_retrieval', + { + 'rgb_encoder', + 'text_encoder', + 'video_text_fusion', + 'moment_retrieval_head', + }, + ), + ( + 'video_text_self_attention_highlight_detection', + 'video_text_self_attention', + 'tokenized_text', + None, + 'query_dependent_localization_head', + 'highlight_detection', + { + 'rgb_encoder', + 'text_encoder', + 'video_text_fusion', + 'highlight_detection_head', + }, + ), + ( + 'video_text_emb_self_attention_temporal_localization', + 'video_text_emb_self_attention', + 'text_emb', + None, + 'query_dependent_localization_head', + 'temporal_localization', + {'rgb_encoder', 'video_text_fusion', 'temporal_localization_head'}, + ), + ( + 'video_text_emb_self_attention_action_segmentation', + 'video_text_emb_self_attention', + 'text_emb', + None, + 'linear_head', + 'action_segmentation', + {'rgb_encoder', 'video_text_fusion', 'action_segmentation_head'}, + ), + ) + def test_video_text_single_tower_clip_encoder(self, fusion_type, + text_input_type, + projection_size, head_type, + task, expected_keys): + rngs = {'params': random.PRNGKey(0), 'dropout': random.PRNGKey(1)} + config = copy.deepcopy(model._DEFAULT_UNLOC_CONFIG) + config.model.classifier = 'token' + config.model.num_classes = 1 if task == 'highlight_detection' else 10 + config.model.text_tower_config = self.clip_text_tower_config + config.model.text_tower_config.projection_size = projection_size + config.model.text_tower_config.input_type = text_input_type + config.model.video_tower_config = self.clip_video_tower_config + config.model.video_tower_config.modality_configs['rgb'].projection_size = ( + projection_size + ) + config.model.video_text_fusion_config.type = fusion_type + config.model.head_config.get(task).type = head_type + + if fusion_type == 'video_text_emb_self_attention': + self.inputs['class_names'] = self.text_emb_inputs + self.inputs['caption'] = self.caption_emb_inputs + config.model.text_tower_config = self.pass_through_encoder_config + config.model.video_text_fusion_config.config = ( + self.video_textemb_fusion_encoder_config + ) + elif fusion_type == 'video_identity_text_emb': + config.model.video_text_fusion_config.config = ml_collections.ConfigDict() + + output, params = model.VideoTextSingleTower( + num_classes=config.model.num_classes, + video_tower_config=config.model.video_tower_config, + text_tower_config=config.model.text_tower_config, + video_text_fusion_config=config.model.video_text_fusion_config, + head_config=config.model.head_config, + classifier=config.model.classifier, + ).init_with_output( + rngs, self.inputs, task=task, train=False, debug=False) + if task == 'moment_retrieval': + self.assertTupleEqual(output.shape, (2, 4, 4, 3)) + elif task == 'temporal_localization': + self.assertTupleEqual(output.shape, (2, 4, 30)) + elif task == 'action_segmentation': + self.assertTupleEqual(output.shape, (2, 4, 10)) + self.assertSetEqual(set(params['params'].keys()), expected_keys) + + @parameterized.parameters( + ( + model.UnlocTemporalLocalizationModel, + 'temporal_localization', + (2, 4, 30), + ), + (model.UnlocActionSegmentationModel, 'action_segmentation', (2, 4, 10)), + (model.UnlocMomentRetrievalModel, 'moment_retrieval', (2, 4, 4, 3)), + ) + def test_video_text_single_tower_model(self, model_cls, task, + expected_output_shape): + rng = random.PRNGKey(0) + unloc = model_cls(config=None, dataset_meta_data={'num_classes': 10}) + rng, init_rng = random.split(rng) + init_model_state, init_params = flax.core.pop(unloc.flax_model.init( + init_rng, self.inputs, task=task, train=False), 'params') + + _, dropout_rng = random.split(rng) + variables = {'params': init_params, **init_model_state} + logits = unloc.flax_model.apply( + variables, + self.inputs, + task=task, + train=False, + rngs={'dropout': dropout_rng}) + self.assertEqual(logits.shape, expected_output_shape) + + @parameterized.parameters( + ( + model.UnlocTemporalLocalizationModel, + 'temporal_localization', + (2, 4, 30), + ), + (model.UnlocActionSegmentationModel, 'action_segmentation', (2, 4, 10)), + (model.UnlocMomentRetrievalModel, 'moment_retrieval', (2, 4, 4, 3)), + ) + def test_video_text_single_tower_model_separate_steps(self, model_cls, task, + expected_output_shape): + rng = random.PRNGKey(0) + unloc = model_cls(config=None, dataset_meta_data={'num_classes': 10}) + rng, init_rng = random.split(rng) + init_model_state, init_params = flax.core.pop(unloc.flax_model.init( + init_rng, self.inputs, task=task, train=False), 'params') + + _, dropout_rng = random.split(rng) + variables = {'params': init_params, **init_model_state} + video_tokens = unloc.flax_model.apply( + variables, + self.inputs, + train=False, + rngs={'dropout': dropout_rng}, + method=unloc.flax_model.encode_video) + text_tokens = unloc.flax_model.apply( + variables, + self.inputs, + task=task, + train=False, + rngs={'dropout': dropout_rng}, + method=unloc.flax_model.encode_text) + if task == 'moment_retrieval': + input_word_ids = jnp.reshape(self.caption['input_word_ids'], (-1, 10)) + text_input_mask = jnp.reshape(self.caption['input_mask'], (-1, 10)) + else: + input_word_ids = self.text_inputs['input_word_ids'][0] + text_input_mask = self.text_inputs['input_mask'][0] + logits = unloc.flax_model.apply( + variables, + video_tokens, + text_tokens, + task=task, + input_word_ids=input_word_ids, + text_input_mask=text_input_mask, + video_input_mask=self.inputs.get('input_mask'), + train=False, + rngs={'dropout': dropout_rng}, + method=unloc.flax_model.fuse_video_text) + self.assertEqual(logits.shape, expected_output_shape) + + +if __name__ == '__main__': + tf.test.main() diff --git a/scenic/projects/unloc/model_utils.py b/scenic/projects/unloc/model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..b547a3f6462a7eca15d5d3123671f82b532b22c2 --- /dev/null +++ b/scenic/projects/unloc/model_utils.py @@ -0,0 +1,409 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Contains model utilities.""" + +from typing import Any, Dict, List, Mapping, Optional, Sequence, Union +from absl import logging +import flax +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.projects.vivit import model_utils as vivit_utils +from scenic.train_lib import train_utils + +PyModule = Any +Array = Union[jnp.ndarray, np.ndarray] + + +def extract_pyramid_video_tokens(tokens: jnp.ndarray, num_pyramid_levels: int, + feature_pyramid_downsample_stride: int, + num_video_tokens_level0: int, + num_text_tokens: int) -> jnp.ndarray: + """Extracts video tokens from a feature pyramid, removing text tokens. + + Args: + tokens: Concatenated tokens from each pyramid level in shape (batch, + seq_len_level0 + seq_len_level1 + ..., channels). This include the text + tokens. + num_pyramid_levels: Number of feature pyramid levels. + feature_pyramid_downsample_stride: Downsample stride used to create the + feature pyramid. + num_video_tokens_level0: Number of video tokens in the first level of + feature pyramid. + num_text_tokens: Number fo text tokens. + + Returns: + Concatenated video tokens from each pyramid level in shape (batch, + seq_len_level0 + seq_len_level1 + ..., channels). + """ + + num_video_tokens_per_level = [ + (num_video_tokens_level0 // (feature_pyramid_downsample_stride**idx)) + for idx in range(num_pyramid_levels) + ] + tokens_per_level = split_pyramid_features( + tokens, + num_video_tokens_level0, + num_pyramid_levels, + feature_pyramid_downsample_stride, + num_text_tokens, + np_backend=jnp) + video_tokens_per_level = [] + for n, t in zip(num_video_tokens_per_level, tokens_per_level): + video_tokens_per_level.append(t[:, :n]) + return jnp.concatenate(video_tokens_per_level, axis=1) + + +def create_pyramid_split_indices( + num_features_level0: int, + num_pyramid_levels: int, + feature_pyramid_downsample_stride: int, + num_extra_features_per_level: int = 0, +): + """Generates split indices for each pyramid level.""" + num_features_per_level = [ + (num_features_level0 // + (feature_pyramid_downsample_stride**idx)) + num_extra_features_per_level + for idx in range(num_pyramid_levels) + ] + return np.cumsum(num_features_per_level)[:-1] + + +def split_pyramid_features( + tokens: Array, + num_features_level0: int, + num_pyramid_levels: int, + feature_pyramid_downsample_stride: int, + num_extra_features_per_level: int = 0, + axis: int = 1, + np_backend: PyModule = jnp, +): + """Split tokens into a list based on pyramid levels.""" + indices = create_pyramid_split_indices(num_features_level0, + num_pyramid_levels, + feature_pyramid_downsample_stride, + num_extra_features_per_level) + return np_backend.split(tokens, indices, axis=axis) + + +def create_pyramid_input_masks(input_mask: jnp.ndarray, + num_features_level0: int, + num_pyramid_levels: int, + feature_pyramid_downsample_stride: int, + num_text_tokens: int) -> List[jnp.ndarray]: + """Splits input mask into a list of them based on pyramid levels.""" + split_indices = create_pyramid_split_indices( + num_features_level0, + num_pyramid_levels, + feature_pyramid_downsample_stride, + num_extra_features_per_level=num_text_tokens) + return np.split(input_mask, split_indices, axis=1) + + +def merge_pyramid_input_masks( + input_masks: Sequence[jnp.ndarray], + input_text_mask: Optional[jnp.ndarray] = None) -> jnp.ndarray: + """Merges input masks from different pyramid levels into one.""" + if input_text_mask is None: + return jnp.concatenate(input_masks, axis=1) + all_masks = [] + for mask in input_masks: + all_masks.append(jnp.concatenate([mask, input_text_mask], axis=1)) + return jnp.concatenate(all_masks, axis=1) + + +def extract_emb(x: jnp.ndarray, + classifier: str, + keepdims: bool = False, + input_mask: Optional[jnp.ndarray] = None, + input_word_ids: Optional[jnp.ndarray] = None) -> jnp.ndarray: + """Extracts an embedding from a sequence of tokens. + + Args: + x: A 3D float tensor of shape (batch_size, sequence_length, channels) + representing the tokens where we extract the embedding. If x is 2D, we + return as it is. + classifier: 'token', 'eos', or 'gap'. + keepdims: Whether or not to make the output embedding as the same dimension + as the input tokens. + input_mask: Optional. A 2D binary tensor of shape (batch_size, + sequence_length) representing the input mask. This arg is only used when + classifier = 'gap'. + input_word_ids: Optional. A 2D binary tensor of shape (batch_size, + sequence_length) representing the input word ids. This arg is only used + when classifier = 'eos'. 'eos' tokens are assumed to have the largest ids. + + Returns: + A 3D float tensor of shape (batch_size, 1, channels) if + keepdims=True or a 2D float tensor of shape (batch_size, channels) if + keepdims=False. + """ + if x.ndim == 2: + logging.info('Input is 2D and return as it is.') + return x + if classifier == 'token': + return x[:, :1] if keepdims else x[:, 0] + elif classifier == 'eos' and input_word_ids is not None: + x = x[jnp.arange(x.shape[0]), input_word_ids.argmax(-1)] + if keepdims: + x = jnp.expand_dims(x, axis=1) + return x + else: + if input_mask is not None: + return jnp.sum( + jnp.multiply(x, jnp.expand_dims(input_mask, axis=-1)), + axis=1, + keepdims=keepdims) / jnp.expand_dims( + input_mask.sum(axis=-1, keepdims=keepdims), axis=-1) + return jnp.mean(x, axis=1, keepdims=keepdims) + + +def l2_normalize(x: jnp.ndarray, eps: float = 1e-9) -> jnp.ndarray: + """Normalizes along dimension `axis` using an L2 norm.""" + return x * jax.lax.rsqrt((x * x).sum(axis=-1, keepdims=True) + eps) + + +def init_text_posemb( + to_posemb: jnp.ndarray, + from_posemb: jnp.ndarray, +) -> jnp.ndarray: + """Clips or pads positional embeddings. + + This function is used to adjust positional embeddings for text encoders when + the current model has a different sequence length from the pretrained model. + When the current model uses a shorter sequence length, we clip the restored + positional embeddings to match the new length. When the current model uses a + longer sequence, we copy the first N values from the restored embeddings where + N is the length of restored positional embeddings. + + Note that interpolation is another possibility here. + + Args: + to_posemb: The current positional embedding. + from_posemb: The positional embedding from the pretrained model. + + Returns: + The adjusted positional embedding. + """ + to_seq_len = to_posemb.shape[0] + from_seq_len = from_posemb.shape[0] + if to_seq_len < from_seq_len: + logging.info('Clip positional embedding to be a length of %s', to_seq_len) + return from_posemb[:to_seq_len, :] + elif to_seq_len > from_seq_len: + logging.warning( + 'The current sequence length is longer than the restored model. Only ' + 'the first %s elements are initialized.', from_seq_len) + return jnp.concatenate([from_posemb, to_posemb[from_seq_len:, :]], axis=0) + else: + return from_posemb + + +def initialize_text_encoder_from_clip_params( + params: Dict[str, Any], + restored_params: Mapping[str, Any], + load_projection: bool = False, + model_prefix_path: Optional[List[str]] = None, +): + """Initialize text encoder from a CLIP model.""" + if model_prefix_path: + to_params = params[model_prefix_path[0]] + for prefix in model_prefix_path[1:]: + to_params = to_params[prefix] + else: + to_params = params + for m_key, m_params in restored_params.items(): + if m_key == 'positional_embedding': + to_params[m_key] = init_text_posemb(to_params[m_key], m_params) + elif m_key == 'text_projection': + if load_projection: + to_params[m_key] = m_params + else: + logging.info('Loading `%s` from checkpoint.', m_key) + to_params[m_key] = m_params + + +def init_class_embedding(to_params: Dict[str, Any], + class_embedding: jnp.ndarray): + """Initialize class embedding. + + The class embedding of the current model has a shape of (num_frames, + channels). + + Args: + to_params: Params of the current model. + class_embedding: A 1D float tensor of shape (channels,) representing the + class embedding from the pretrained model. + """ + num_frames = to_params['class_embedding'].shape[0] + to_params['class_embedding'] = jnp.tile( + jnp.expand_dims(class_embedding, axis=0), [num_frames, 1]) + + +def init_posembed(restored_posemb: jnp.ndarray, posemb: jnp.ndarray, + restored_classifier: str, classifier: str): + """Initialize positional embedding.""" + if restored_posemb.shape != posemb.shape: + logging.info('Adapting positional embeddings from %s to %s', + restored_posemb.shape, posemb.shape) + ntok = posemb.shape[0] + if restored_classifier == 'token': + # The first token is the CLS token. + restored_posemb_grid = restored_posemb[1:, :] + if classifier == 'token': + # CLS token in restored model and in target. + cls_tok = restored_posemb[:1] + ntok -= 1 + else: + # CLS token in restored model, but not target. + cls_tok = restored_posemb[:0] + else: + restored_posemb_grid = restored_posemb + if classifier == 'token': + # CLS token in target, but not restored model. + cls_tok = posemb[:1] + ntok -= 1 + else: + # CLS token not in target or restored model. + cls_tok = restored_posemb[:0] + restored_posemb_grid = vivit_utils.interpolate_positional_embeddings( + restored_posemb_grid, ntok)[0] # Squeeze first dimension. + # Attach the CLS token again. + if classifier == 'token': + restored_posemb = jnp.array( + np.concatenate([cls_tok, restored_posemb_grid], axis=0)) + else: + restored_posemb = restored_posemb_grid + + return restored_posemb + + +def init_conv1(from_conv1: Dict[str, Any], to_conv1: Dict[str, Any]): + """Initialize the first 3D conv parameters. + + Initializes the first 3D conv layer from an image model. + + Args: + from_conv1: The 2D conv weights from a pretrained model. + from_conv1['kernel'] has a shape of (h, w, in_channels, out_channels). + to_conv1: The linear projection weights from the current model. + to_conv1['kernel'] has a shape of (h*w*in_channels, out_channels). + """ + input_kernel = to_conv1['kernel'] + restored_kernel = from_conv1['kernel'] + if input_kernel.shape[0] != np.prod(restored_kernel.shape[:-1]): + raise ValueError( + 'conv1 kernel shapes mismatch during initialization. from_conv1: %s and' + 'to_conv1: %s' % (restored_kernel.shape, input_kernel.shape) + ) + to_conv1['kernel'] = jnp.reshape(restored_kernel, input_kernel.shape) + + +def initialize_video_encoder_from_clip_params( + config: ml_collections.ConfigDict, + params: Dict[str, Any], + restored_params: Mapping[str, Any], + load_projection: bool = False, + video_modality_name: str = 'video', + model_prefix_path: Optional[List[str]] = None, +): + """Initialize video encoder from a CLIP model.""" + if model_prefix_path: + to_params = params[model_prefix_path[0]] + for prefix in model_prefix_path[1:]: + to_params = to_params[prefix] + else: + to_params = params + if config.model.video_tower_config.get('modality_configs'): + classifier = config.model.video_tower_config.modality_configs[ + video_modality_name + ].encoder_config.image_encoder_config.classifier + else: # backward compatibility for single + classifier = ( + config.model.video_tower_config.encoder_config.image_encoder_config.classifier + ) + for m_key, m_params in restored_params.items(): + if m_key == 'class_embedding': + if 'class_embedding' in to_params: + init_class_embedding(to_params, m_params) + elif m_key == 'conv1': + init_conv1(m_params, to_params['conv1']) + elif m_key == 'positional_embedding': + to_params['VisionTransformer'][m_key] = init_posembed( + m_params, + to_params['VisionTransformer'][m_key], + restored_classifier='token', + classifier=classifier, + ) + elif m_key == 'proj': + if load_projection: + to_params['proj'] = m_params + else: + to_params['VisionTransformer'][m_key] = m_params + + +def initialize_from_clip_model( + config: ml_collections.ConfigDict, + train_state: train_utils.TrainState, + restored_params: Dict[str, Any], + load_image_tower: bool = True, + load_text_tower: bool = True, + video_modality_name: str = 'video', + text_encoder_name: str = 'text_encoder', +) -> train_utils.TrainState: + """Initializes a video-text model from an pretrained image-text model.""" + params = flax.core.unfreeze(train_state.params) + if load_image_tower: + if config.init_from.get('video_encoder'): + load_image_tower_projection = config.init_from.video_encoder.get( + 'load_projection' + ) and config.model.video_tower_config.get('projection_size') + else: + load_image_tower_projection = config.init_from.video_encoders[ + video_modality_name + ].get( + 'load_projection' + ) and config.model.video_tower_config.modality_configs[ + video_modality_name + ].get( + 'projection_size' + ) + initialize_video_encoder_from_clip_params( + config, + params, + restored_params['params']['visual'], + load_projection=False, + video_modality_name=video_modality_name, + model_prefix_path=[f'{video_modality_name}_encoder'], + ) + if load_image_tower_projection: + params[f'{video_modality_name}_projection'] = restored_params['params'][ + 'visual' + ]['proj'] + if load_text_tower: + load_text_tower_projection = ( + config.init_from.text_encoder.get('load_projection') and + config.model.text_tower_config.get('projection_size')) + initialize_text_encoder_from_clip_params( + params, + restored_params['params']['text'], + load_projection=False, + model_prefix_path=[text_encoder_name], + ) + if load_text_tower_projection: + params['text_projection'] = restored_params['params']['text'][ + 'text_projection'] + return train_state.replace(params=flax.core.freeze(params)) diff --git a/scenic/projects/unloc/model_utils_test.py b/scenic/projects/unloc/model_utils_test.py new file mode 100644 index 0000000000000000000000000000000000000000..aedd94b3b8e3b815c42b7b21af9ef00c91323895 --- /dev/null +++ b/scenic/projects/unloc/model_utils_test.py @@ -0,0 +1,281 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for model_utils.""" + +from absl.testing import absltest +from absl.testing import parameterized +import flax +from flax import struct +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.projects.unloc import model_utils +from scenic.train_lib import train_utils + + +class ModelUtilsTest(parameterized.TestCase): + + def assertDictEqualRecursive(self, actual, expected): + self.assertEqual(type(actual), type(expected)) + if isinstance(actual, dict): + self.assertSameElements(actual.keys(), expected.keys()) + for key, _ in expected.items(): + self.assertDictEqualRecursive(actual[key], expected[key]) + elif isinstance(actual, jnp.ndarray): + self.assertTrue(jnp.array_equal(actual, expected)) + elif isinstance(actual, np.ndarray): + np.testing.assert_allclose(actual, expected) + else: + self.assertEqual(actual, expected) + + @parameterized.named_parameters( + ( + 'one_level_fpn', + 1, + np.ones((4, 8 + 1, 16), dtype=np.float32), + np.ones((4, 8, 16), dtype=np.float32), + ), + ( + 'three_level_fpn', + 3, + np.ones((4, 8 + 1 + 4 + 1 + 2 + 1, 16), dtype=np.float32), + np.ones((4, 8 + 4 + 2, 16), dtype=np.float32), + ), + ) + def test_extract_pyramid_video_tokens(self, num_pyramid_levels, input_tokens, + expected_output): + actual = model_utils.extract_pyramid_video_tokens( + input_tokens, + num_pyramid_levels=num_pyramid_levels, + feature_pyramid_downsample_stride=2, + num_video_tokens_level0=8, + num_text_tokens=1) + np.testing.assert_equal(actual, expected_output) + + @parameterized.parameters( + (1, 1, 0, np.array((), dtype=np.int32)), + (3, 2, 0, np.array((128, 192), dtype=np.int32)), + (4, 2, 1, np.array((129, 194, 227), dtype=np.int32)), + ) + def test_create_pyramid_split_indices(self, num_pyramid_levels, + feature_pyramid_downsample_stride, + num_extra_features_per_level, + expected_indices): + actual = model_utils.create_pyramid_split_indices( + num_features_level0=128, + num_pyramid_levels=num_pyramid_levels, + feature_pyramid_downsample_stride=feature_pyramid_downsample_stride, + num_extra_features_per_level=num_extra_features_per_level) + np.testing.assert_equal(actual, expected_indices) + + def test_create_pyramid_input_masks(self): + actual = model_utils.create_pyramid_input_masks( + input_mask=np.ones((2, 128 + 64 + 32), dtype=np.int32), + num_features_level0=128, + num_pyramid_levels=3, + feature_pyramid_downsample_stride=2, + num_text_tokens=0) + self.assertLen(actual, 3) + np.testing.assert_equal(actual[0], np.ones((2, 128), dtype=np.int32)) + np.testing.assert_equal(actual[1], np.ones((2, 64), dtype=np.int32)) + np.testing.assert_equal(actual[2], np.ones((2, 32), dtype=np.int32)) + + def test_merge_pyramid_input_masks(self): + actual = model_utils.merge_pyramid_input_masks( + [np.ones((2, 128), dtype=np.int32), + np.ones((2, 64), dtype=np.int32)]) + np.testing.assert_equal(actual, np.ones((2, 128 + 64), dtype=np.int32)) + + def test_merge_pyramid_input_masks_with_text_mask(self): + actual = model_utils.merge_pyramid_input_masks( + [np.ones((2, 128), dtype=np.int32), + np.ones((2, 64), dtype=np.int32)], + input_text_mask=np.ones((2, 8), dtype=np.int32)) + np.testing.assert_equal(actual, + np.ones((2, 128 + 8 + 64 + 8), dtype=np.int32)) + + @parameterized.parameters( + ( + ml_collections.ConfigDict({ + 'init_from': ml_collections.ConfigDict({ + 'video_encoders': { + 'rgb': ml_collections.ConfigDict( + {'load_projection': True} + ), + }, + 'text_encoder': ml_collections.ConfigDict( + {'load_projection': True} + ), + }), + 'model': ml_collections.ConfigDict({ + 'temporal_encoding_config': ml_collections.ConfigDict({ + 'kernel_init_method': 'central_frame_initializer', + 'method': '3d_conv', + }), + 'video_tower_config': ml_collections.ConfigDict( + { + 'modality_configs': { + 'rgb': ml_collections.ConfigDict({ + 'projection_size': 16, + 'encoder_config': ml_collections.ConfigDict({ + 'classifier': 'token', + 'image_encoder_config': ( + ml_collections.ConfigDict( + { + 'classifier': 'token', + } + ) + ), + }), + }), + } + } + ), + 'text_tower_config': ml_collections.ConfigDict( + {'projection_size': 16} + ), + }), + }), + 'rgb', + ), + ( + ml_collections.ConfigDict({ + 'init_from': ml_collections.ConfigDict({ + 'video_encoder': ml_collections.ConfigDict( + {'load_projection': True} + ), + 'text_encoder': ml_collections.ConfigDict( + {'load_projection': True} + ), + }), + 'model': ml_collections.ConfigDict({ + 'temporal_encoding_config': ml_collections.ConfigDict({ + 'kernel_init_method': 'central_frame_initializer', + 'method': '3d_conv', + }), + 'video_tower_config': ml_collections.ConfigDict({ + 'projection_size': 16, + 'encoder_config': ml_collections.ConfigDict({ + 'classifier': 'token', + 'image_encoder_config': ml_collections.ConfigDict( + { + 'classifier': 'token', + } + ), + }), + }), + 'text_tower_config': ml_collections.ConfigDict( + {'projection_size': 16} + ), + }), + }), + 'video', + ), + ) + def test_initialize_from_clip_model(self, config, modality_name): + params = { + f'{modality_name}_encoder': { + 'conv1': { + 'kernel': np.zeros((4 * 4 * 3, 8)), + }, + 'class_embedding': np.zeros((8, 10)), + 'VisionTransformer': { + 'transformer': np.zeros((10,)), + 'ln_pre': np.zeros((10,)), + 'ln_post': np.zeros((10,)), + 'positional_embedding': np.zeros((17, 10)), + }, + }, + 'text_encoder': { + 'positional_embedding': np.zeros((15, 10)), + 'token_embedding': np.zeros((100, 10)), + 'transformer': np.zeros((10,)), + 'ln_final': np.zeros((10,)), + }, + 'text_projection': { + 'kernel': np.zeros((16, 16)), + }, + f'{modality_name}_projection': { + 'kernel': np.zeros((16, 16)), + }, + } + clip_params = { + 'params': { + 'text': { + 'positional_embedding': np.ones((31, 10)), + 'transformer': np.ones((10,)), + 'ln_final': np.ones((10,)), + 'token_embedding': np.ones((100, 10)), + 'text_projection': { + 'kernel': np.ones((16, 16)), + }, + }, + 'visual': { + 'conv1': { + 'kernel': np.ones((4, 4, 3, 8)), + }, + 'class_embedding': np.ones((10,)), + 'ln_post': np.ones((10,)), + 'ln_pre': np.ones((10,)), + 'positional_embedding': np.ones((10, 10)), + 'proj': { + 'kernel': np.ones((16, 16)), + }, + 'transformer': np.ones((10,)), + }, + } + } + train_state = train_utils.TrainState( + tx=struct.field(pytree_node=False), params=flax.core.freeze(params)) + expected_params = { + f'{modality_name}_encoder': { + 'conv1': { + 'kernel': np.ones((4 * 4 * 3, 8)), + }, + 'class_embedding': jnp.ones((8, 10)), + 'VisionTransformer': { + 'transformer': np.ones((10,)), + 'ln_pre': np.ones((10,)), + 'ln_post': np.ones((10,)), + 'positional_embedding': jnp.ones((17, 10)), + }, + }, + 'text_encoder': { + 'positional_embedding': np.ones((15, 10)), + 'token_embedding': np.ones((100, 10)), + 'transformer': np.ones((10,)), + 'ln_final': np.ones((10,)), + }, + 'text_projection': { + 'kernel': np.ones((16, 16)), + }, + f'{modality_name}_projection': { + 'kernel': np.ones((16, 16)), + }, + } + train_state = model_utils.initialize_from_clip_model( + config, + train_state, + clip_params, + load_image_tower=True, + load_text_tower=True, + video_modality_name=modality_name, + ) + params = flax.core.unfreeze(train_state.params) + self.assertDictEqualRecursive(params, expected_params) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/unloc/moment_retrieval_base_model.py b/scenic/projects/unloc/moment_retrieval_base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..ed9ec0f7cacfeba0e91d3b475a2f93c3b4977731 --- /dev/null +++ b/scenic/projects/unloc/moment_retrieval_base_model.py @@ -0,0 +1,403 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class for moment retrieval models.""" + +import functools +from typing import Any, Dict, Mapping, Optional, Tuple, Union + +import immutabledict +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils +from scenic.projects.unloc import temporal_localization_base_model + +Batch = Dict[str, Any] + + +def _adjust_classification_inputs( + logits: jnp.ndarray, targets: jnp.ndarray, all_gather_loss: bool +) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Adjusts logits and label to have the same shape. + + Args: + logits: Output of model in shape [batch, batch * max_num_captions, + num_frames, 1]. + targets: Binary array of shape [batch, max_num_captions, num_frames, 1]. + all_gather_loss: Wether or not to gather results from all devices before + computing metrics and loss. + + Returns: + Reshaped logits and targets in shape (batch, batch, max_num_captions, + num_frames, 1) when all_gather_loss = True. Otherwise, it is + (batch, max_num_captions, num_frames, 1). + """ + bs, num_cap, num_frames, _ = targets.shape + reshaped_logits = logits.reshape((bs, bs, num_cap, num_frames, 1)) + if all_gather_loss: + expanded_targets = jnp.zeros((bs,) + targets.shape, dtype=targets.dtype) + expanded_targets = expanded_targets.at[jnp.arange(bs), jnp.arange(bs)].set( + targets + ) + return reshaped_logits, expanded_targets + reshaped_logits = reshaped_logits[jnp.arange(bs), jnp.arange(bs)] + return reshaped_logits, targets + + +def _adjust_regression_inputs(displacements: jnp.ndarray) -> jnp.ndarray: + """Adjusts prediction to have the same shape with ground truth. + + Regression loss is only computed at positive frames. + + Args: + displacements: Predicted displacements in shape [batch, batch * + max_num_captions, num_frames, 2]. + + Returns: + Reshaped prediction in shape (batch, max_num_captions, num_frames, 2) + """ + bs, num_caps, num_frames, _ = displacements.shape + num_caps_per_vid = num_caps // bs + reshaped_displacements = displacements.reshape( + (bs, bs, num_caps_per_vid, num_frames, 2)) + return reshaped_displacements[jnp.arange(bs), jnp.arange(bs)] + + +def _cls_loss_weights( + batch_mask: jnp.ndarray, + caption_mask: jnp.ndarray, + frame_mask: jnp.ndarray, + all_gather_loss: bool, +) -> jnp.ndarray: + """This function is to compute the weights for classification.""" + if all_gather_loss: + return (batch_mask[:, jnp.newaxis, jnp.newaxis, jnp.newaxis] * + batch_mask[jnp.newaxis, :, jnp.newaxis, jnp.newaxis] * + caption_mask[jnp.newaxis, :, :, jnp.newaxis] * + frame_mask[jnp.newaxis, :, jnp.newaxis, :].astype(jnp.float32)) + return (batch_mask[:, jnp.newaxis, jnp.newaxis] * + caption_mask[..., jnp.newaxis] * + frame_mask[:, jnp.newaxis, :].astype(jnp.float32)) + + +def _box_loss_weights( + batch_mask: jnp.ndarray, caption_mask: jnp.ndarray, frame_mask: jnp.ndarray +) -> jnp.ndarray: + """This function is to compute the weights for box loss.""" + return (batch_mask[:, jnp.newaxis, jnp.newaxis] * + caption_mask[..., jnp.newaxis] * + frame_mask[:, jnp.newaxis, :].astype(jnp.float32)) + + +def weighted_correctly_classified( + logits: jnp.ndarray, + targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None) -> jnp.ndarray: + """Computes weighted number of correctly classified over the given batch. + + Args: + logits: Output of model in shape [batch, ..., 1]. + targets: Binary array of shape [batch, ..., 1]. + weights: None or array of shape [batch, ...] (rank of targets -1). + + Returns: + The number of correctly classified examples in the given batch. + """ + if logits.ndim != targets.ndim: + raise ValueError( + 'Incorrect shapes. Got shape %s logits and %s one_hot_targets' % + (str(logits.shape), str(targets.shape))) + preds = logits >= 0.0 + correct = jnp.equal(preds, targets) + + if weights is not None: + correct = model_utils.apply_weights(correct, weights) + + return correct.astype(jnp.int32) + + +_MOMENT_RETRIEVAL_SIGMOID_LOSS_CLASSIFICATION_METRICS = ( + immutabledict.immutabledict({ + 'accuracy': (weighted_correctly_classified, model_utils.num_examples), + 'sigmoid_classification_loss': ( + model_utils.weighted_unnormalized_sigmoid_cross_entropy, + model_utils.num_examples, + ), + }) +) +_MOMENT_RETRIEVAL_FOCAL_LOSS_CLASSIFICATION_METRICS = ( + immutabledict.immutabledict({ + 'accuracy': (weighted_correctly_classified, model_utils.num_examples), + 'focal_classification_loss': ( + model_utils.focal_sigmoid_cross_entropy, + model_utils.num_examples, + ), + }) +) +_MOMENT_RETRIEVAL_BOX_REGRESSION_METRICS = immutabledict.immutabledict({ + 'mean_iou': ( + temporal_localization_base_model.weighted_unnormalized_iou, + temporal_localization_base_model.num_positive_frames, + ), +}) + + +def moment_retrieval_metrics_function( + logits: jnp.ndarray, + batch: Batch, + config: ml_collections.ConfigDict, + classification_metrics: Mapping[ + str, Any + ] = _MOMENT_RETRIEVAL_FOCAL_LOSS_CLASSIFICATION_METRICS, + box_regression_metrics: Mapping[ + str, Any + ] = _MOMENT_RETRIEVAL_BOX_REGRESSION_METRICS, + axis_name: Union[str, Tuple[str, ...]] = 'batch', +) -> Dict[str, Tuple[float, float]]: + """Calculates metrics for the moment retrieval task. + + Args: + logits: Output of model in shape [batch, batch * max_num_captions, + num_frames, 3]. + batch: Batch of data that has 'label', 'displacements', 'inputs' and + optionally 'batch_mask'. + config: Loss config. + classification_metrics: Mapping from classification metric names to metric + functions. + box_regression_metrics: Mapping from box metric names to metric functions. + axis_name: List of axes on which we run the pmsum. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples of + (metric, normalizer). + """ + if batch.get('batch_mask') is None: + batch_mask = jnp.ones((logits.shape[0],), dtype=jnp.float32) + else: + batch_mask = batch.get('batch_mask') + caption_mask = batch['inputs']['caption_mask'] + frame_mask = batch['inputs']['input_mask'] + + # This psum is required to correctly evaluate with multihost. Only host 0 + # will report the metrics, so we must aggregate across all hosts. The psum + # will map an array of shape [n_global_devices, batch_size] -> [batch_size] + # by summing across the devices dimension. The outer sum then sums across the + # batch dim. The result is then we have summed across all samples in the + # sharded batch. + cls_weights = _cls_loss_weights( + batch_mask, + caption_mask, + frame_mask, + all_gather_loss=config.get('all_gather_loss', True), + ) + evaluated_metrics = {} + class_logits = logits[..., :1] + class_label = batch['label'] + class_logits, class_label = _adjust_classification_inputs( + class_logits, + class_label, + all_gather_loss=config.get('all_gather_loss', True), + ) + for key, val in classification_metrics.items(): + if key == 'focal_classification_loss': + evaluated_metrics[key] = model_utils.psum_metric_normalizer( + (val[0]( + class_logits, + class_label, + cls_weights, + alpha=config.get('focal_loss_alpha', 0.5), + gamma=config.get('focal_loss_gamma', 2.0)), val[1]( + class_logits, class_label, cls_weights)), + axis_name=axis_name) + else: + evaluated_metrics[key] = model_utils.psum_metric_normalizer( + (val[0](class_logits, class_label, cls_weights), val[1]( + class_logits, class_label, cls_weights)), + axis_name=axis_name) + + pred_displacements = logits[..., 1:] + gt_displacements = batch['displacements'] + pred_displacements = _adjust_regression_inputs(pred_displacements) + iou_weights = _box_loss_weights(batch_mask, caption_mask, frame_mask) + for key, val in box_regression_metrics.items(): + evaluated_metrics[key] = model_utils.psum_metric_normalizer( + (val[0](pred_displacements, gt_displacements, batch['label'][..., 0], + iou_weights), val[1](batch['label'], iou_weights)), + axis_name=axis_name) + return evaluated_metrics # pytype: disable=bad-return-type # jax-ndarray + + +class MomentRetrievalModel(base_model.BaseModel): + """Defines metrics/loss among all moment retrieval models. + + A model is class with three members: get_metrics_fn, loss_fn, & a flax_model. + + get_metrics_fn returns a callable function, metric_fn, that calculates the + metrics and returns a dictionary. The metric function computes f(logits_i, + batch_i) on a minibatch, it has API: + ```metric_fn(logits, batch).``` + + The trainer will then aggregate and compute the mean across all samples + evaluated. + + loss_fn is a function of API + loss = loss_fn(logits, batch, model_params=None). + + This model class defines two losses, sigmoid cross entropy for classification + and IoU for boundary regression. + """ + + def get_metrics_fn(self, split: Optional[str] = None): + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + batch)``` + """ + del split # For all splits, we return the same metric functions. + cls_loss_type = self.config.get('classification_loss_type', 'sigmoid') + box_loss_type = self.config.get('box_loss_type', 'l1+iou') + box_loss_types = box_loss_type.split('+') + cls_metrics = ( + _MOMENT_RETRIEVAL_FOCAL_LOSS_CLASSIFICATION_METRICS if cls_loss_type + == 'focal' else _MOMENT_RETRIEVAL_SIGMOID_LOSS_CLASSIFICATION_METRICS) + box_regression_metrics = dict(_MOMENT_RETRIEVAL_BOX_REGRESSION_METRICS) + for weight_and_type in box_loss_types: + loss_type = weight_and_type.split('*')[-1] + box_regression_metrics[f'{loss_type}_loss'] = ( + functools.partial( + temporal_localization_base_model.weighted_unnormalized_box_regression_loss, + loss_type=loss_type, + ), + temporal_localization_base_model.num_positive_frames, + ) + return functools.partial( + moment_retrieval_metrics_function, + config=self.config, + classification_metrics=cls_metrics, + box_regression_metrics=box_regression_metrics, + ) + + def _box_loss( + self, + batch_mask: jnp.ndarray, + caption_mask: jnp.ndarray, + frame_mask: jnp.ndarray, + pred_displacements: jnp.ndarray, + gt_displacements: jnp.ndarray, + label: jnp.ndarray, + ) -> jnp.ndarray: + """Computes box regression loss.""" + weights = _box_loss_weights(batch_mask, caption_mask, frame_mask) + pred_displacements = _adjust_regression_inputs(pred_displacements) + box_loss_type = self.config.get('box_loss_type', 'l1+iou') + box_loss = temporal_localization_base_model.weighted_box_regression_loss( + pred_displacements, + gt_displacements, + label[..., 0], + weights=weights, + loss_type=box_loss_type, + ) + return box_loss + + def _cls_loss(self, batch_mask: jnp.ndarray, caption_mask: jnp.ndarray, + frame_mask: jnp.ndarray, class_logits: jnp.ndarray, + label: jnp.ndarray) -> jnp.ndarray: + """Computes classification loss.""" + classification_loss_type = self.config.get( + 'classification_loss_type', 'sigmoid' + ) + cls_loss_weights = _cls_loss_weights( + batch_mask, + caption_mask, + frame_mask, + all_gather_loss=self.config.get('all_gather_loss', True), + ) + class_logits, label = _adjust_classification_inputs( + class_logits, + label, + all_gather_loss=self.config.get('all_gather_loss', True), + ) + if classification_loss_type == 'focal': + classification_loss = ( + temporal_localization_base_model.weighted_focal_sigmoid_cross_entropy( + class_logits, + label, + weights=cls_loss_weights, + label_smoothing=self.config.get('label_smoothing'), + alpha=self.config.get('focal_loss_alpha', 0.5), + gamma=self.config.get('focal_loss_gamma', 2.0), + ) + ) + elif classification_loss_type == 'sigmoid': + classification_loss = model_utils.weighted_sigmoid_cross_entropy( + class_logits, + label, + weights=cls_loss_weights, + label_smoothing=self.config.get('label_smoothing')) + else: + raise ValueError(f'Unknown loss type: {classification_loss_type}.') + return classification_loss + + def loss_function(self, + logits: jnp.ndarray, + batch: Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Returns the sum of classification and box regression losses. + + Args: + logits: (batch_size, batch_size * num_max_captions, num_frames, 3). + batch: Batch of data. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + label = batch['label'] + gt_displacements = batch['displacements'] + class_logits = logits[..., :1] + pred_displacements = logits[..., 1:] + batch_mask = batch['batch_mask'] + caption_mask = batch['inputs']['caption_mask'] + frame_mask = batch['inputs']['input_mask'] + box_loss = self._box_loss( + batch_mask, + caption_mask, + frame_mask, + pred_displacements, + gt_displacements, + label, + ) + cls_loss = self._cls_loss(batch_mask, caption_mask, frame_mask, + class_logits, label) + return ( + self.config.get('classification_loss_alpha', 1.0) * cls_loss + box_loss + ) + + def build_flax_model(self): + raise NotImplementedError('Subclasses must implement build_flax_model().') + + def default_flax_model_config(self): + """Default config for the flax model that is built in `build_flax_model`. + + This function in particular serves the testing functions and supposed to + provide config tha are passed to the flax_model when it's build in + `build_flax_model` function, e.g., `model_dtype_str`. + """ + raise NotImplementedError( + 'Subclasses must implement default_flax_model_config().') diff --git a/scenic/projects/unloc/moment_retrieval_base_model_test.py b/scenic/projects/unloc/moment_retrieval_base_model_test.py new file mode 100644 index 0000000000000000000000000000000000000000..82807a2e4afee83b1d24947d6e816b3425219892 --- /dev/null +++ b/scenic/projects/unloc/moment_retrieval_base_model_test.py @@ -0,0 +1,193 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for moment_retrieval_base_model.""" + +from absl.testing import absltest +from absl.testing import parameterized +from flax import jax_utils +import jax +import ml_collections +import numpy as np +from scenic.projects.unloc import moment_retrieval_base_model + + +class MockMomentRetrievalModel(moment_retrieval_base_model.MomentRetrievalModel + ): + """A mock moment retrieval model for testing purposes.""" + + def __init__(self, config: ml_collections.ConfigDict): + dataset_meta_data = {} + super().__init__(config, dataset_meta_data) + + def build_flax_model(self): + pass + + def default_flax_model_config(self): + pass + + +class MomentRetrievalBaseModelTest(parameterized.TestCase): + + def setUp(self): + super().setUp() + self.class_logits = np.array([ + [ + [[1.2], [0.4], [-0.9]], + [[-0.4], [0.8], [0.1]], + [[-1.0], [-1.0], [-1.0]], + [[-1.0], [-1.0], [-1.0]], + ], + [ + [[-1.0], [-1.0], [-1.0]], + [[-1.0], [-1.0], [-1.0]], + [[1.2], [0.9], [0.4]], + [[0.1], [0.1], [0.1]], + ], + ]) # shape is (2, 2*2, 3, 1). + pred_displacements = np.array([ + [ + [[0.4, 0.4], [0.0, 0.1], [0.2, 0.0]], + [[0.1, 0.2], [0.3, 0.4], [0.5, 0.6]], + [[0.0, 0.0], [0.0, 0.0], [0.0, 0.0]], + [[0.0, 0.0], [0.0, 0.0], [0.0, 0.0]], + ], + [ + [[0.0, 0.0], [0.0, 0.0], [0.0, 0.0]], + [[0.0, 0.0], [0.0, 0.0], [0.0, 0.0]], + [[1.2, 0.9], [0.4, 0.4], [0.4, 0.2]], + [[0.4, 0.8], [0.1, 0.3], [0.3, 0.3]], + ], + ]) # shape is (2, 2*2, 3, 2). + self.logits = np.concatenate([self.class_logits, pred_displacements], + axis=-1) + self.batch = { + 'batch_mask': + np.ones((2,), dtype=np.int32), + 'inputs': { + 'input_mask': np.array([[1, 1, 1], [1, 1, 0]], dtype=np.int32), + 'caption_mask': np.array([[1, 1], [1, 0]], dtype=np.int32), + }, + 'label': + np.array([ + [[[1], [1], [0]], [[0], [1], [1]]], + [[[1], [1], [0]], [[0], [0], [0]]], + ], + dtype=np.int32), # shape is (2, 2, 3, 1). + 'displacements': + np.array([ + [ + [[0.5, 0.4], [0.3, 0.2], [0, 0]], + [[0, 0], [0.4, 0.3], [0.5, 0.6]], + ], + [ + [[0.2, 0.1], [0.3, 0.3], [0, 0]], + [[0, 0], [0, 0], [0, 0]], + ], + ], + dtype=np.float32), # shape is (2, 2, 3, 2). + } + + @parameterized.parameters( + ('sigmoid', 'iou', True), + ('focal', 'iou+center_offset_squared', True), + ('sigmoid', 'iou', False), + ('focal', 'iou+center_offset_squared', False), + ) + def test_moment_retrieval_model_loss_function( + self, cls_loss_type, box_loss_type, all_gather_loss + ): + config = ml_collections.ConfigDict({ + 'classification_loss_type': cls_loss_type, + 'box_loss_type': box_loss_type, + 'all_gather_loss': all_gather_loss, + }) + model = MockMomentRetrievalModel(config) + loss = model.loss_function(self.logits, self.batch) + self.assertGreater(loss, 0.0) + + @parameterized.parameters( + ('sigmoid', 'iou', True, {'iou_loss': 2.268258}, 3.731742), + ( + 'focal', + 'iou+center_offset_squared', + True, + { + 'iou_loss': 2.268258, + 'center_offset_squared_loss': 0.060979, + }, + 3.731742, + ), + ('sigmoid', 'iou', False, {'iou_loss': 2.268258}, 3.731742), + ( + 'focal', + 'iou+center_offset_squared', + False, + { + 'iou_loss': 2.268258, + 'center_offset_squared_loss': 0.060979, + }, + 3.731742, + ), + ) + def test_moment_retrieval_model_get_metrics_fn( + self, cls_loss_type, box_loss_type, all_gather_loss, + expected_box_loss, expected_mean_iou + ): + config = ml_collections.ConfigDict({ + 'classification_loss_type': cls_loss_type, + 'box_loss_type': box_loss_type, + 'all_gather_loss': all_gather_loss, + }) + model = MockMomentRetrievalModel(config) + metrics_fn = jax.pmap(model.get_metrics_fn(), axis_name='batch') + logits, batch = jax_utils.replicate((self.logits, self.batch)) + metrics = metrics_fn(logits, batch) + expected_cls_loss_key = ('sigmoid_classification_loss' if cls_loss_type + == 'sigmoid' else 'focal_classification_loss') + expected_box_loss_keys = set(expected_box_loss.keys()) + self.assertSetEqual( + set(metrics.keys()), + {'accuracy', expected_cls_loss_key, 'mean_iou'} + | expected_box_loss_keys, + ) + metrics = jax_utils.unreplicate(metrics) + self.assertAlmostEqual( + metrics['mean_iou'][0], expected_mean_iou, delta=1e-4) + self.assertAlmostEqual(metrics['mean_iou'][1], 6) + for key in expected_box_loss_keys: + self.assertAlmostEqual( + metrics[key][0], expected_box_loss[key], delta=1e-4 + ) + self.assertAlmostEqual(metrics[key][1], 6) + if all_gather_loss: + self.assertAlmostEqual(metrics['accuracy'][0], 16) + else: + self.assertAlmostEqual(metrics['accuracy'][0], 8) + + if all_gather_loss: + self.assertAlmostEqual(metrics['accuracy'][1], 16) + else: + self.assertAlmostEqual(metrics['accuracy'][1], 8) + + self.assertGreaterEqual(metrics[expected_cls_loss_key][0], 0) + + if all_gather_loss: + self.assertGreaterEqual(metrics[expected_cls_loss_key][1], 16) + else: + self.assertGreaterEqual(metrics[expected_cls_loss_key][1], 8) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/unloc/optimizer_utils.py b/scenic/projects/unloc/optimizer_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..2a277e4cedfb8d63a90fac2c58d4f267a0815cd7 --- /dev/null +++ b/scenic/projects/unloc/optimizer_utils.py @@ -0,0 +1,88 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Contains optimizer utils.""" + +import copy +from typing import Any + +from absl import logging +import flax +import ml_collections +import optax +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers as optimizer_lib + +PyTree = Any + + +def optimizer_with_multi_lrs(config: ml_collections.ConfigDict, + params: PyTree) -> optax.GradientTransformation: + """Builds a optimizer with different learning rates on different layers. + + Users can specify different base learning rates for different params with + prefixes defined in the config. For example, users can specify different LRs + for temporal encoder and spatial encoder using the following config: + + config.layer_prefix_to_base_lrs = { + 'video_encoder/VisionTransformer': 0.005, + 'video_encoder/TemporalTransformer': 0.05, + } + + Args: + config: Model Configuration. + params: A nested dict containing model parameters. + + Returns: + An optax.GradientTransformation object. + """ + + optimizer_config = optimizer_lib.get_optax_optimizer_config(config) + # Avoid modifying original config and allow alteration. + optimizer_config = copy.deepcopy(optimizer_config).unlock() + + layer_prefix_to_base_lrs = copy.deepcopy( + config.layer_prefix_to_base_lrs).unlock() + # If parameters do not start with defined prefixes, they use + # `base_learning_rate` defined in config. + layer_prefix_to_base_lrs.update( + {'none_of_above': config.lr_configs.base_learning_rate}) + optimizers = {} + for prefix, base_lr in layer_prefix_to_base_lrs.items(): + layer_config = copy.deepcopy(config) + layer_config.lr_configs.base_learning_rate = base_lr + lr_fn = lr_schedules.get_learning_rate_fn(layer_config) + optimizers[prefix] = optimizer_lib.get_optimizer(optimizer_config, lr_fn, + params) + + flat_params = flax.traverse_util.flatten_dict( + flax.core.unfreeze(params), keep_empty_nodes=True, sep='/') + flat_layer_map = {} + for key in flat_params: + assigned = False + for prefix in layer_prefix_to_base_lrs: + if key.startswith(prefix): + flat_layer_map[key] = prefix + assigned = True + break + if not assigned: + flat_layer_map[key] = 'none_of_above' + + layer_map = flax.traverse_util.unflatten_dict(flat_layer_map, sep='/') + layer_map = flax.core.freeze(layer_map) + + logging.info('Layer assignments:\n%s', + flax.traverse_util.flatten_dict(layer_map, sep='/')) + tx = optax.multi_transform(optimizers, layer_map) + return tx diff --git a/scenic/projects/unloc/optimizer_utils_test.py b/scenic/projects/unloc/optimizer_utils_test.py new file mode 100644 index 0000000000000000000000000000000000000000..05991d2926d3766c93248d4704bb0327b98c445b --- /dev/null +++ b/scenic/projects/unloc/optimizer_utils_test.py @@ -0,0 +1,95 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for optimizer_utils.""" + +from absl.testing import absltest +import chex +import flax +import jax +import ml_collections +import numpy as np +import optax +from scenic.projects.unloc import optimizer_utils + + +class OptimizerUtilsTest(absltest.TestCase): + + def setUp(self): + super().setUp() + self.params = { + 'video_encoder': { + 'pos_embedding': np.zeros((8)), + 'block0': { + 'kernel': np.ones((10)), + 'bias': np.zeros((10)), + }, + }, + 'text_encoder': { + 'pos_embedding': np.zeros((8)), + 'block0': { + 'kernel': np.ones((10)), + 'bias': np.zeros((10)), + }, + }, + 'video_text_fusion': { + 'block0': { + 'kernel': np.ones((10)), + 'bias': np.zeros((10)), + }, + }, + } + self.params = flax.core.freeze(self.params) + + def test_optimizer_with_multi_lrs(self): + config = ml_collections.ConfigDict({ + 'optimizer': 'sgd', + 'optimizer_configs': dict(momentum=0.9), + 'lr_configs': dict(base_learning_rate=0.1), + 'layer_prefix_to_base_lrs': { + 'video_text_fusion': 1.0, + }, + }) + expected_params = { + 'video_encoder': { + 'pos_embedding': np.zeros((8)) - 0.1, + 'block0': { + 'kernel': np.ones((10)) - 0.1, + 'bias': np.zeros((10)) - 0.1, + }, + }, + 'text_encoder': { + 'pos_embedding': np.zeros((8)) - 0.1, + 'block0': { + 'kernel': np.ones((10)) - 0.1, + 'bias': np.zeros((10)) - 0.1, + }, + }, + 'video_text_fusion': { + 'block0': { + 'kernel': np.ones((10)) - 1.0, + 'bias': np.zeros((10)) - 1.0, + }, + }, + } + tx = optimizer_utils.optimizer_with_multi_lrs(config, self.params) + state = tx.init(self.params) + gradients = jax.tree_util.tree_map(np.ones_like, self.params) + updates, _ = tx.update(gradients, state, self.params) + new_params = optax.apply_updates(self.params, updates) + chex.assert_trees_all_close(flax.core.unfreeze(new_params), expected_params) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/unloc/postprocessing_utils.py b/scenic/projects/unloc/postprocessing_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..24737de9e14215dc324475acc1aa9136ce483654 --- /dev/null +++ b/scenic/projects/unloc/postprocessing_utils.py @@ -0,0 +1,596 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Contains postprocessing utility functions.""" + +from typing import Any, List, Optional, Tuple, Union + +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.projects.unloc import model_utils +import tensorflow as tf + +PyModule = Any +Array = Union[jnp.ndarray, np.ndarray] + + +def dedup_by_vid( + logits: np.ndarray, + labels: np.ndarray, + batch_masks: np.ndarray, + vids: np.ndarray, + frame_masks: Optional[np.ndarray] = None +) -> Tuple[np.ndarray, np.ndarray, np.ndarray]: + """Dedups by video ids. + + Args: + logits: Predicted class logits in shape (num_videos, num_classes) if + frame_masks is None or in shape (num_videos, num_frames, num_classes) + otherwise. + labels: Multihot vectors representing the ground truth labels in shape + (num_videos, num_classes) if frame_masks is None or in shape (num_videos, + num_frames, num_classes) otherwise. + batch_masks: Batch masks in shape (num_videos,). + vids: Video ids in shape (num_videos,). + frame_masks: Frame masks in shape (num_videos, num_frames). + + Returns: + deduped logits in shape (N, num_classes). + deduped labels in shape (N, num_classes). + deduped video ids in shape (N,). + """ + + batch_masks = batch_masks.astype(bool) + vids = vids[batch_masks] + logits = logits[batch_masks] + labels = labels[batch_masks] + if frame_masks is not None: + frame_masks = frame_masks.astype(bool) + frame_masks = frame_masks[batch_masks] + vid_set = set() + deduped_logits, deduped_labels, deduped_vids = [], [], [] + for idx, vid in enumerate(vids): + if vid in vid_set: + continue + if frame_masks is None: + deduped_logits.append(logits[idx][np.newaxis, :]) + deduped_labels.append(labels[idx][np.newaxis, :]) + else: + frame_mask = frame_masks[idx] + deduped_logits.append(logits[idx][frame_mask]) + deduped_labels.append(labels[idx][frame_mask]) + vid_set.add(vid) + deduped_vids.append(vid) + return (np.concatenate(deduped_logits, axis=0), + np.concatenate(deduped_labels, axis=0), np.array(deduped_vids)) + + +def make_2d_boxes(segments: Array, np_backend: PyModule = np) -> Array: + """Make 2D boxes out of 1D segments. + + We reuse tf.image.non_max_suppression_with_scores() for non-maximal + suppression, which takes 2D boxes. + + Args: + segments: Temporal segments in shape (N, 2). + np_backend: Numpy backend. + + Returns: + 2D boxes in shape (N, 4). + """ + n = segments.shape[0] + return np_backend.stack([ + np_backend.zeros((n,), dtype=np_backend.float32), + segments[:, 0], + np_backend.ones((n,), dtype=np_backend.float32), + segments[:, 1], + ], + axis=1) + + +def non_max_suppression( + class_indices: np.ndarray, scores: np.ndarray, segments: np.ndarray, + config: ml_collections.ConfigDict +) -> Tuple[np.ndarray, np.ndarray, np.ndarray]: + """Performs class-agnostic non-maximal suppression. + + Args: + class_indices: Predicted class indices in shape (N,). + scores: Predicted class scores in shape (N,). + segments: Predicted temporal segments in shape (N, 2). + config: NMS configs. + + Returns: + class indices, scores, and segments after NMS. + """ + + out_class_indices = [] + out_scores = [] + out_segments = [] + + if class_indices.size: + selected_indices, selected_scores = ( + tf.image.non_max_suppression_with_scores( + make_2d_boxes(segments), + scores, + max_output_size=config.get('max_detections', 100), + iou_threshold=config.get('iou_threshold', 0.5), + score_threshold=config.get('score_threshold', 0.001), + soft_nms_sigma=config.get('soft_nms_sigma', 0.3), + ) + ) + selected_indices = selected_indices.numpy() + selected_scores = selected_scores.numpy() + out_class_indices.append(class_indices[selected_indices]) + out_scores.append(selected_scores) + out_segments.append(segments[selected_indices]) + + out_class_indices = ( + np.concatenate(out_class_indices, axis=0) + if out_class_indices else np.array([], dtype=np.int32)) + out_scores = ( + np.concatenate(out_scores, axis=0) + if out_scores else np.array([], dtype=np.float32)) + out_segments = ( + np.concatenate(out_segments, axis=0) + if out_segments else np.array([], dtype=np.float32)) + return out_class_indices, out_scores, out_segments + + +def non_max_suppression_multiclass( + class_indices: np.ndarray, scores: np.ndarray, segments: np.ndarray, + config: ml_collections.ConfigDict +) -> Tuple[np.ndarray, np.ndarray, np.ndarray]: + """Performs multiclass non-maximal suppression. + + Args: + class_indices: Predicted class indices in shape (N,). + scores: Predicted class scores in shape (N,). + segments: Predicted temporal segments in shape (N, 2). + config: NMS configs. + + Returns: + class indices, scores, and segments after NMS. + """ + + out_class_indices = [] + out_scores = [] + out_segments = [] + + for cls_idx in range(config.dataset_configs.num_classes): + mask = class_indices == cls_idx + cur_class_indices = class_indices[mask] + if cur_class_indices.size: + cur_segments = segments[mask] + cur_scores = scores[mask] + selected_indices, selected_scores = ( + tf.image.non_max_suppression_with_scores( + make_2d_boxes(cur_segments), + cur_scores, + max_output_size=config.get('max_detections', 100), + iou_threshold=config.get('iou_threshold', 0.5), + score_threshold=config.get('score_threshold', 0.001), + soft_nms_sigma=config.get('soft_nms_sigma', 0.3), + ) + ) + selected_indices = selected_indices.numpy() + selected_scores = selected_scores.numpy() + out_class_indices.append(cur_class_indices[selected_indices]) + out_scores.append(selected_scores) + out_segments.append(cur_segments[selected_indices]) + out_class_indices = ( + np.concatenate(out_class_indices, axis=0) + if out_class_indices else np.array([], dtype=np.int32)) + out_scores = ( + np.concatenate(out_scores, axis=0) + if out_scores else np.array([], dtype=np.float32)) + out_segments = ( + np.concatenate(out_segments, axis=0) + if out_segments else np.array([], dtype=np.float32)) + return out_class_indices, out_scores, out_segments + + +def non_max_suppression_mr( + scores: np.ndarray, segments: np.ndarray, + config: ml_collections.ConfigDict + ) -> Tuple[List[Array], List[Array]]: + """Performs class-agnostic non-maximal suppression for each caption. + + Args: + scores: Predicted class scores in shape (num_captions, N). + segments: Predicted segments in shape (num_captions, N, 2). + config: NMS configs. + + Returns: + A List of scores in shape (M, ) and segments in shape (M, 2) after NMS, + where 0 <= M <= `max_detections`. + """ + + out_scores = [] + out_segments = [] + num_captions = scores.shape[0] + for i in range(num_captions): + selected_indices, selected_scores = ( + tf.image.non_max_suppression_with_scores( + make_2d_boxes(segments[i]), + scores[i], + max_output_size=config.get('max_detections', 100), + iou_threshold=config.get('iou_threshold', 0.5), + score_threshold=config.get('score_threshold', 0.001), + soft_nms_sigma=config.get('soft_nms_sigma', 0.3), + ) + ) + out_scores.append(selected_scores.numpy()) + out_segments.append(segments[i][selected_indices]) + + return out_scores, out_segments + + +def get_segments_from_frame_predictions( + class_probs: np.ndarray, + displacements: np.ndarray, + input_mask: np.ndarray, + total_frames: int, + stride: int, + sampling_strategy: str = 'random', + displacement_normalizer: str = 'duration', + secs_per_timestep: float = 1.0, + score_threshold: float = float('-inf'), + feature_pyramid_config: Optional[ml_collections.ConfigDict] = None, +) -> Tuple[np.ndarray, np.ndarray, np.ndarray]: + """Computes predicted segments based on frame predictions. + + We assume that all frame predictions are from one video. + + Args: + class_probs: A float array representing the class probabilities in shape + (num_frames, num_classes). + displacements: A float array representing the start/end time displacements + in shape (num_frames, num_classes, 2). All values are greater or equal to + zero. + input_mask: A int array representing the input mask in shape (num_frames,). + total_frames: The total number of frames in this video. + stride: Temporal stride used in sampling the frames + sampling_strategy: 'random' or 'linspace'. + displacement_normalizer: 'none', 'duration', or 'sampled_span'. + secs_per_timestep: Separation in seconds between two consecutive timesteps. + score_threshold: Score threshold to filter the detections. + feature_pyramid_config: Feature pyramid configs. + + Returns: + Class indices in shape (N,). + Class probabilities in shape (N,). + Predicted segment start and end times in shape (N, 2). + """ + assert sampling_strategy in {'random', 'linspace'} + + if feature_pyramid_config is None: + num_frames = class_probs.shape[0] + else: + num_frames = feature_pyramid_config.num_features_level0 + num_classes = class_probs.shape[-1] + if sampling_strategy == 'random': + # The default setting is to sample the center clip at test time. + start_frame_offset = np.maximum(0, (total_frames - num_frames * stride) // + 2).astype(np.float32) + else: # 'linspace' + start_frame_offset = 0.0 + if displacement_normalizer == 'duration': + displacement_multiplier = total_frames + elif displacement_normalizer == 'sampled_span': + displacement_multiplier = num_frames * stride + else: + displacement_multiplier = 1 + displacements[..., 0] *= -1.0 + + if feature_pyramid_config is not None: + feature_pyramid_downsample_stride = ( + feature_pyramid_config.feature_pyramid_downsample_stride + ) + displacements_per_level = model_utils.split_pyramid_features( + displacements, + feature_pyramid_config.num_features_level0, + len(feature_pyramid_config.feature_pyramid_levels), + feature_pyramid_downsample_stride, + axis=0, + np_backend=np) + normalize_displacements_by_downsample_stride = feature_pyramid_config.get( + 'normalize_displacements_by_downsample_stride', False) + else: + displacements_per_level = [displacements] + feature_pyramid_downsample_stride = 1 + normalize_displacements_by_downsample_stride = False + + segments = [] + linspace_frame_indices = np.arange(0, num_frames, dtype=np.float32) + for level, cur_displacements in enumerate(displacements_per_level): + cur_downsample_stride = feature_pyramid_downsample_stride**level + if normalize_displacements_by_downsample_stride: + cur_displacements *= cur_downsample_stride + cur_stride = stride * cur_downsample_stride + if sampling_strategy == 'random': + frame_indices = np.arange( + 0, num_frames * stride, cur_stride, dtype=np.float32 + )[:, None, None] + cur_segments = ( + frame_indices + + cur_displacements * displacement_multiplier + + start_frame_offset + ) + else: # 'linspace' + frame_indices = linspace_frame_indices[ + range(0, num_frames, cur_downsample_stride) + ][:, None, None] + cur_segments = ( + (frame_indices + cur_displacements) + * (total_frames - 1) + / (num_frames - 1) + ) + segments.append(cur_segments) + segments = np.concatenate(segments, axis=0) + input_mask = input_mask.astype(bool) + total_frames = np.full((segments.shape[0], num_classes), total_frames)[ + input_mask + ] + segments = segments[input_mask] + segments[..., 0] = np.maximum(segments[..., 0], 0) + segments[..., 1] = np.minimum(segments[..., 1], total_frames) + segments = segments * secs_per_timestep + class_probs = class_probs[input_mask] + mask = class_probs >= score_threshold + class_indices = mask.nonzero()[1] + + return class_indices, class_probs[mask], segments[mask] + + +# TODO(shenyan): remove code duplication for different tasks. +def get_segments_from_frame_predictions_mr( + class_probs: np.ndarray, + displacements: np.ndarray, + input_mask: np.ndarray, + caption_mask: np.ndarray, + total_frames: int, + stride: int, + sampling_strategy: str = 'random', + displacement_normalizer: str = 'duration', + secs_per_timestep: float = 1.0, + feature_pyramid_config: Optional[ml_collections.ConfigDict] = None, +) -> Tuple[Array, Array]: + """Computes predicted segments based on frame predictions. + + We assume that all frame predictions are from one video. + + Args: + class_probs: A float array representing the class probabilities in shape + (max_num_captions, num_frames). + displacements: A float array representing the start/end time displacements + in shape (max_num_captions, num_frames, 2). All values are greater or + equal to zero. + input_mask: A int array representing the input mask in shape (num_frames,). + caption_mask: A int array representing the caption mask in shape + (max_num_captions,). + total_frames: The total number of frames in this video. + stride: Temporal stride used in sampling the frames + sampling_strategy: 'random' or 'linspace'. + displacement_normalizer: 'none', 'duration', or 'sampled_span'. + secs_per_timestep: Separation in seconds between two consecutive timesteps. + feature_pyramid_config: Feature pyramid configs. + + Returns: + Class probabilities in shape (num_captions, N) after masking. + Predicted segment start and end frame indices in shape + (num_captions, N, 2) after masking. + """ + assert sampling_strategy in {'random', 'linspace'} + + if feature_pyramid_config is None: + num_frames = class_probs.shape[1] + else: + num_frames = feature_pyramid_config.num_features_level0 + if sampling_strategy == 'random': + # The default setting is to sample the center clip at test time. + start_frame_offset = np.maximum(0, (total_frames - num_frames * stride) // + 2).astype(np.float32) + else: # 'linspace' + start_frame_offset = 0.0 + if displacement_normalizer == 'duration': + displacement_multiplier = total_frames + elif displacement_normalizer == 'sampled_span': + displacement_multiplier = num_frames * stride + else: + displacement_multiplier = 1 + displacements[..., 0] *= -1.0 + + if feature_pyramid_config is not None: + feature_pyramid_downsample_stride = ( + feature_pyramid_config.feature_pyramid_downsample_stride + ) + displacements_per_level = model_utils.split_pyramid_features( + displacements, + feature_pyramid_config.num_features_level0, + len(feature_pyramid_config.feature_pyramid_levels), + feature_pyramid_downsample_stride, + axis=1, + np_backend=np) + normalize_displacements_by_downsample_stride = feature_pyramid_config.get( + 'normalize_displacements_by_downsample_stride', False) + else: + displacements_per_level = [displacements] + feature_pyramid_downsample_stride = 1 + normalize_displacements_by_downsample_stride = False + + segments = [] + linspace_frame_indices = np.arange(0, num_frames, dtype=np.float32) + for level, cur_displacements in enumerate(displacements_per_level): + cur_downsample_stride = feature_pyramid_downsample_stride**level + if normalize_displacements_by_downsample_stride: + cur_displacements *= cur_downsample_stride + cur_stride = stride * cur_downsample_stride + if sampling_strategy == 'random': + frame_indices = ( + np.arange(0, num_frames * stride, cur_stride, + dtype=np.float32)[None, :, None]) + cur_segments = ( + frame_indices + cur_displacements * displacement_multiplier + + start_frame_offset) + else: # 'linspace' + frame_indices = ( + linspace_frame_indices[range(0, num_frames, + cur_downsample_stride)][None, :, None]) + cur_segments = ((frame_indices + cur_displacements) * (total_frames - 1) / + (num_frames - 1)) + segments.append(cur_segments) + segments = np.concatenate(segments, axis=1) + caption_mask = caption_mask.astype(bool) + input_mask = input_mask.astype(bool) + segments = segments[caption_mask] + segments = segments[:, input_mask] + segments[..., 0] = np.maximum(segments[..., 0], 0) + segments[..., 1] = np.minimum(segments[..., 1], total_frames) + segments = segments * secs_per_timestep + class_probs = class_probs[caption_mask] + class_probs = class_probs[:, input_mask] + + return class_probs, segments + + +def get_segments_from_frame_predictions_jax( + class_probs: jnp.ndarray, + displacements: jnp.ndarray, + input_mask: jnp.ndarray, + total_frames: int, + stride: int, + sampling_strategy: str = 'random', + displacement_normalizer: str = 'duration', + secs_per_timestep: float = 1.0, + score_threshold: float = float('-inf'), + feature_pyramid_config: Optional[ml_collections.ConfigDict] = None, +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Computes predicted segments based on frame predictions in jnp format. + + We assume that all frame predictions are from one video. + + Args: + class_probs: A float array representing the class probabilities in shape + (num_frames, num_classes). + displacements: A float array representing the start/end time displacements + in shape (num_frames, num_classes, 2). All values are greater or equal to + zero. + input_mask: A int array representing the input mask in shape (num_frames,). + total_frames: The total number of frames in this video. + stride: Temporal stride used in sampling the frames + sampling_strategy: 'random' or 'linspace'. + displacement_normalizer: 'none', 'duration', or 'sampled_span'. + secs_per_timestep: Separation in seconds between two consecutive timesteps. + score_threshold: Score threshold to filter the detections. + feature_pyramid_config: Feature pyramid configs. + + Returns: + Class indices in shape (num_frames,), padded ones are filled with -1. + Class probabilities in shape (num_frames,), padded ones are filled with -1. + Predicted segment start and end times in shape (num_frames, 2), padded ones + are filled with -1. + """ + assert sampling_strategy in {'random', 'linspace'} + + if feature_pyramid_config is None: + num_frames = class_probs.shape[0] + else: + num_frames = feature_pyramid_config.num_features_level0 + num_classes = class_probs.shape[-1] + if sampling_strategy == 'random': + # The default setting is to sample the center clip at test time. + start_frame_offset = jnp.maximum( + 0, (total_frames - num_frames * stride) // 2 + ).astype(jnp.float32) + else: # 'linspace' + start_frame_offset = 0.0 + if displacement_normalizer == 'duration': + displacement_multiplier = total_frames + elif displacement_normalizer == 'sampled_span': + displacement_multiplier = num_frames * stride + else: + displacement_multiplier = 1 + displacements = displacements.at[..., 0].multiply(-1.0) + + if feature_pyramid_config is not None: + feature_pyramid_downsample_stride = ( + feature_pyramid_config.feature_pyramid_downsample_stride + ) + displacements_per_level = model_utils.split_pyramid_features( + displacements, + feature_pyramid_config.num_features_level0, + len(feature_pyramid_config.feature_pyramid_levels), + feature_pyramid_downsample_stride, + axis=0, + np_backend=jnp, + ) + normalize_displacements_by_downsample_stride = feature_pyramid_config.get( + 'normalize_displacements_by_downsample_stride', False + ) + else: + displacements_per_level = [displacements] + feature_pyramid_downsample_stride = 1 + normalize_displacements_by_downsample_stride = False + + segments = [] + linspace_frame_indices = jnp.arange(0, num_frames, dtype=jnp.float32) + for level, cur_displacements in enumerate(displacements_per_level): + cur_downsample_stride = feature_pyramid_downsample_stride**level + if normalize_displacements_by_downsample_stride: + cur_displacements *= cur_downsample_stride + cur_stride = stride * cur_downsample_stride + if sampling_strategy == 'random': + frame_indices = jnp.arange( + 0, num_frames * stride, cur_stride, dtype=jnp.float32 + )[:, None, None] + cur_segments = ( + frame_indices + + cur_displacements * displacement_multiplier + + start_frame_offset + ) + else: # 'linspace' + frame_indices = linspace_frame_indices[ + jnp.arange(0, num_frames, cur_downsample_stride) + ][:, None, None] + cur_segments = ( + (frame_indices + cur_displacements) + * (total_frames - 1) + / (num_frames - 1) + ) + segments.append(cur_segments) + segments = jnp.concatenate(segments, axis=0) + input_mask = jnp.array(input_mask, dtype=bool) + total_frames = jnp.array( + jnp.full((segments.shape[0], num_classes), total_frames) + ) + segments = segments.at[..., 0].set(jnp.maximum(segments[..., 0], 0)) + segments = segments.at[..., 1].set( + jnp.minimum(segments[..., 1], total_frames) + ) + segments = segments * secs_per_timestep + class_probs = jnp.where(input_mask[:, None], class_probs, -1) + mask = class_probs >= score_threshold + inds, class_indices = mask.nonzero(size=mask.shape[0], fill_value=-1) + class_probs = jnp.where( + inds >= 0, jnp.take_along_axis(class_probs[:, 0], inds, axis=0), -1 + ) + segments = jnp.where( + inds[:, None] >= 0, + jnp.take_along_axis(segments[:, 0], inds[:, None], axis=0), + -1, + ) + + return class_indices, class_probs, segments diff --git a/scenic/projects/unloc/postprocessing_utils_test.py b/scenic/projects/unloc/postprocessing_utils_test.py new file mode 100644 index 0000000000000000000000000000000000000000..073366c47cad8eeda797ffbebe6e3297e1adb08d --- /dev/null +++ b/scenic/projects/unloc/postprocessing_utils_test.py @@ -0,0 +1,633 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for postprocessing_utils.""" + +from absl.testing import parameterized +import ml_collections +import numpy as np +from scenic.projects.unloc import metrics +from scenic.projects.unloc import postprocessing_utils +import tensorflow as tf + + +class PostprocessingUtilsTest(tf.test.TestCase, parameterized.TestCase): + + def test_dedup_by_vid_no_frame_mask(self): + logits = np.array([ + [1.0, -2.0, 3.0], + [3.0, -2.0, 1.0], + [3.0, -2.0, 1.0], + ], np.float32) + labels = np.array([ + [1, 0, 0], + [0, 1, 0], + [0, 1, 0], + ], np.int32) + batch_mask = np.array([1, 1, 1], np.int32) + vids = np.array([0, 1, 1], np.int32) + deduped_logits, deduped_labels, deduped_vids = ( + postprocessing_utils.dedup_by_vid( + logits, labels, batch_mask, vids + ) + ) + self.assertAllClose(deduped_logits, [ + [1.0, -2.0, 3.0], + [3.0, -2.0, 1.0], + ]) + self.assertAllEqual(deduped_labels, [ + [1, 0, 0], + [0, 1, 0], + ]) + self.assertAllEqual(deduped_vids, [0, 1]) + + def test_dedup_by_vid_w_frame_mask(self): + logits = np.array([ + [[1.0, -2.0, 3.0], [1.0, -2.0, 3.0]], + [[3.0, -2.0, 1.0], [3.0, -2.0, 1.0]], + [[3.0, -2.0, 1.0], [3.0, -2.0, 1.0]], + ], np.float32) + labels = np.array([ + [[1, 0, 0], [1, 0, 0]], + [[0, 1, 0], [0, 1, 0]], + [[0, 1, 0], [0, 1, 0]], + ], np.int32) + batch_mask = np.array([1, 1, 1], np.int32) + frame_mask = np.array([[1, 1], [1, 0], [1, 0]], np.int32) + vids = np.array([0, 1, 1], np.int32) + deduped_logits, deduped_labels, deduped_vids = ( + postprocessing_utils.dedup_by_vid( + logits, labels, batch_mask, vids, frame_mask + ) + ) + self.assertAllClose(deduped_logits, [ + [1.0, -2.0, 3.0], + [1.0, -2.0, 3.0], + [3.0, -2.0, 1.0], + ]) + self.assertAllEqual(deduped_labels, [ + [1, 0, 0], + [1, 0, 0], + [0, 1, 0], + ]) + self.assertAllEqual(deduped_vids, [0, 1]) + + @parameterized.parameters( + (float('-inf'), np.array([0, 1, 2, 0, 1, 2, 0, 1, 2], dtype=np.int32), + np.array([0.9, 0.1, 0.2, 0.1, 0.1, 0.2, 0.6, 0.3, 0.2], + dtype=np.float32), + np.array([ + [4., 8.], + [5.6, 6.4], + [5.2, 6.8], + [6.6, 7.8], + [6.6, 7.8], + [6.2, 8.2], + [6., 10.], + [7.6, 8.4], + [7.2, 8.8], + ])), + (0.5, np.array([0, 0], dtype=np.int32), + np.array([0.9, 0.6], dtype=np.float32), np.array([[4., 8.], [6., 10.]])), + (1.0, np.array([], dtype=np.int32), np.array( + [], dtype=np.float32), np.zeros((0, 2), dtype=np.float32)), + ) + def test_get_segments_from_frame_predictions(self, score_threshold, + expected_class_indices, + expected_class_probs, + expected_segments): + class_probs = np.array([[0.9, 0.1, 0.2], [0.1, 0.1, 0.2], [0.6, 0.3, 0.2], + [0.1, 0.8, 0.2]]) + displacements = np.array([ + [[0.5, 0.5], [0.1, 0.1], [0.2, 0.2]], + [[0.1, 0.2], [0.1, 0.2], [0.2, 0.3]], + [[0.5, 0.5], [0.1, 0.1], [0.2, 0.2]], + [[0.1, 0.2], [0.1, 0.2], [0.2, 0.3]], + ]) + input_mask = np.array([1, 1, 1, 0], dtype=np.int32) + total_frames = 16 + (actual_class_indices, actual_class_probs, actual_segments + ) = postprocessing_utils.get_segments_from_frame_predictions( + class_probs, + displacements, + input_mask=input_mask, + total_frames=total_frames, + stride=1, + displacement_normalizer='sampled_span', + secs_per_timestep=1.0, + score_threshold=score_threshold) + self.assertAllEqual(actual_class_indices, expected_class_indices) + self.assertAllClose(actual_class_probs, expected_class_probs) + self.assertAllClose(actual_segments, expected_segments) + + def test_get_segments_from_frame_predictions_with_fpn(self): + class_probs = np.array([ + # FPN level 0 + [0.9, 0.1, 0.2], + [0.1, 0.1, 0.2], + [0.6, 0.3, 0.2], + [0.1, 0.8, 0.2], + [0.9, 0.1, 0.2], + [0.1, 0.1, 0.2], + [0.6, 0.3, 0.2], # mask out + [0.1, 0.8, 0.2], # mask out + # FPN level 1 + [0.9, 0.1, 0.2], + [0.1, 0.1, 0.2], + [0.6, 0.3, 0.2], + [0.1, 0.8, 0.2], # mask out + ]) + displacements = np.array([ + # FPN level 0 + [[0.5, 0.5], [0.1, 0.1], [0.2, 0.2]], + [[0.1, 0.2], [0.1, 0.2], [0.2, 0.3]], + [[0.5, 0.5], [0.1, 0.1], [0.2, 0.2]], + [[0.1, 0.2], [0.1, 0.2], [0.2, 0.3]], + [[0.5, 0.5], [0.1, 0.1], [0.2, 0.2]], + [[0.1, 0.2], [0.1, 0.2], [0.2, 0.3]], + [[0.5, 0.5], [0.1, 0.1], [0.2, 0.2]], # mask out + [[0.1, 0.2], [0.1, 0.2], [0.2, 0.3]], # mask out + # FPN level 1 + [[0.5, 0.5], [0.1, 0.1], [0.2, 0.2]], + [[0.1, 0.2], [0.1, 0.2], [0.2, 0.3]], + [[0.5, 0.5], [0.1, 0.1], [0.2, 0.2]], + [[0.1, 0.2], [0.1, 0.2], [0.2, 0.3]], # mask out + ]) + input_mask = np.array([1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0], dtype=np.int32) + total_frames = 16 + actual_class_indices, actual_class_probs, actual_segments = ( + postprocessing_utils.get_segments_from_frame_predictions( + class_probs, + displacements, + input_mask=input_mask, + total_frames=total_frames, + stride=1, + secs_per_timestep=1.0, + score_threshold=float('-inf'), + feature_pyramid_config=ml_collections.ConfigDict({ + 'num_features_level0': 8, + 'feature_pyramid_downsample_stride': 2, + 'feature_pyramid_levels': [0, 1], + }), + ) + ) + self.assertAllEqual(actual_class_indices, [0, 1, 2] * np.sum(input_mask)) + self.assertAllClose( + actual_class_probs, class_probs[input_mask.astype(bool)].flatten() + ) + expected_segments = [ + [0.0, 12.0], + [2.4, 5.6], + [0.8, 7.2], + [3.4, 8.2], + [3.4, 8.2], + [1.8, 9.8], + [0.0, 14.0], + [4.4, 7.6], + [2.8, 9.2], + [5.4, 10.2], + [5.4, 10.2], + [3.8, 11.8], + [0.0, 16.0], + [6.4, 9.6], + [4.8, 11.2], + [7.4, 12.2], + [7.4, 12.2], + [5.8, 13.8], + [0.0, 12.0], + [2.4, 5.6], + [0.8, 7.2], + [4.4, 9.2], + [4.4, 9.2], + [2.8, 10.8], + [0.0, 16.0], + [6.4, 9.6], + [4.8, 11.2], + ] + self.assertAllClose(actual_segments, expected_segments) + + def test_get_segments_from_frame_predictions_mr(self): + class_probs = np.array([ + [0, 1, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 1, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 1], + [0, 0, 0, 0, 0, 0, 0, 0], + ]) + displacements = np.array([ + [ + [-5.00000000e-01, 1.00000000e00], + [5.00000000e-01, 0.00000000e00], + [1.50000000e00, -1.00000000e00], + [2.50000000e00, -2.00000000e00], + [3.50000000e00, -3.00000000e00], + [4.50000000e00, -4.00000000e00], + [5.50000000e00, -5.00000000e00], + [6.50000000e00, -6.00000000e00], + ], + [ + [-1.50000000e00, 2.50000000e00], + [-5.00000000e-01, 1.50000000e00], + [5.00000000e-01, 5.00000000e-01], + [1.50000000e00, -5.00000000e-01], + [2.50000000e00, -1.50000000e00], + [3.50000000e00, -2.50000000e00], + [4.50000000e00, -3.50000000e00], + [5.50000000e00, -4.50000000e00], + ], + [ + [-4.00000000e00, 5.00000000e00], + [-3.00000000e00, 4.00000000e00], + [-2.00000000e00, 3.00000000e00], + [-1.00000000e00, 2.00000000e00], + [0.00000000e00, 1.00000000e00], + [1.00000000e00, 0.00000000e00], + [2.00000000e00, -1.00000000e00], + [3.00000000e00, -2.00000000e00], + ], + [ + [-6.50000000e00, 7.00000000e00], + [-5.50000000e00, 6.00000000e00], + [-4.50000000e00, 5.00000000e00], + [-3.50000000e00, 4.00000000e00], + [-2.50000000e00, 3.00000000e00], + [-1.50000000e00, 2.00000000e00], + [-5.00000000e-01, 1.00000000e00], + [5.00000000e-01, 0.00000000e00], + ], + [ + [5.00000000e02, -5.00000000e02], + [5.01000000e02, -5.01000000e02], + [5.02000000e02, -5.02000000e02], + [5.03000000e02, -5.03000000e02], + [5.04000000e02, -5.04000000e02], + [5.05000000e02, -5.05000000e02], + [5.06000000e02, -5.06000000e02], + [5.07000000e02, -5.07000000e02], + ], # mask out + ]) + + input_mask = np.array( + [1, 1, 1, 1, 1, 1, 1, 1], + dtype=np.int32, + ) + caption_mask = np.array( + [1, 1, 1, 1, 0], + dtype=np.int32, + ) + total_frames = np.array([15], dtype=np.int32) + actual_class_probs, actual_segments = ( + postprocessing_utils.get_segments_from_frame_predictions_mr( + class_probs, + displacements, + input_mask=input_mask, + caption_mask=caption_mask, + total_frames=total_frames, + stride=1, + sampling_strategy='linspace', + displacement_normalizer='none', + secs_per_timestep=1.0, + feature_pyramid_config=ml_collections.ConfigDict({ + 'num_features_level0': 8, + 'feature_pyramid_downsample_stride': 2, + 'feature_pyramid_levels': [2], + }), + ) + ) + cls_probs = class_probs[caption_mask.astype(bool)] + cls_probs = cls_probs[:, input_mask.astype(bool)] + self.assertAllClose(actual_class_probs, cls_probs) + expected_segments = np.array([ + [ + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + ], + [ + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + ], + [ + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + ], + [ + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + ], + ]) + self.assertAllClose(actual_segments, expected_segments) + + def test_non_max_suppression_mr(self): + scores = np.array([ + [0, 1, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 1, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 1], + ]) + segments = np.array([ + [ + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + ], + [ + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + ], + [ + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + ], + [ + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + ], + ]) + out_scores, out_segments = ( + postprocessing_utils.non_max_suppression_mr( + scores, + segments, + config=ml_collections.ConfigDict({ + 'max_detection': 100, + 'iou_threshold': 0.9, + 'score_threshold': 0.001, + 'soft_nms_sigma': 0.75 + }), + ) + ) + expected_out_scores = [ + np.array([1.0]), + np.array([1.0]), + np.array([1.0, 0.5134171]), + np.array([1.0]), + ] + expected_out_segments = [ + np.array([[1, 2]]), + np.array([[3, 5]]), + np.array([[8, 10], [8, 10]]), + np.array([[13, 14]]), + ] + self.assertAllClose(out_scores, expected_out_scores) + self.assertAllClose(out_segments, expected_out_segments) + + caption_mask = np.array( + [1, 1, 1, 1, 0], + dtype=np.int32, + ) + gt_segments = np.array([[1, 2], [3, 5], [8, 10], [13, 14], [-1000, -1000]]) + gt_segments = gt_segments[caption_mask.astype(bool)] + result = metrics.compute_recall_at_k(gt_segments, out_segments, out_scores, + [1, 5], [0.5, 0.7]) + scores_out = [score for _, score in result.items()] + self.assertAllClose(scores_out, [1.0, 1.0, 1.0, 1.0]) + + def test_get_segments_from_frame_predictions_mr_with_fpn(self): + class_probs = np.array([ + [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1], + [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + ], dtype=np.int32) + displacements = np.array([ + [ + [-5.00000000e-01, 1.00000000e00], + [5.00000000e-01, 0.00000000e00], + [1.50000000e00, -1.00000000e00], + [2.50000000e00, -2.00000000e00], + [3.50000000e00, -3.00000000e00], + [4.50000000e00, -4.00000000e00], + [5.50000000e00, -5.00000000e00], + [6.50000000e00, -6.00000000e00], + [-5.00000000e-01, 1.00000000e00], + [1.50000000e00, -1.00000000e00], + [3.50000000e00, -3.00000000e00], + [5.50000000e00, -5.00000000e00], + [-5.00000000e-01, 1.00000000e00], + [3.50000000e00, -3.00000000e00], + ], + [ + [-1.50000000e00, 2.50000000e00], + [-5.00000000e-01, 1.50000000e00], + [5.00000000e-01, 5.00000000e-01], + [1.50000000e00, -5.00000000e-01], + [2.50000000e00, -1.50000000e00], + [3.50000000e00, -2.50000000e00], + [4.50000000e00, -3.50000000e00], + [5.50000000e00, -4.50000000e00], + [-1.50000000e00, 2.50000000e00], + [5.00000000e-01, 5.00000000e-01], + [2.50000000e00, -1.50000000e00], + [4.50000000e00, -3.50000000e00], + [-1.50000000e00, 2.50000000e00], + [2.50000000e00, -1.50000000e00], + ], + [ + [-4.00000000e00, 5.00000000e00], + [-3.00000000e00, 4.00000000e00], + [-2.00000000e00, 3.00000000e00], + [-1.00000000e00, 2.00000000e00], + [0.00000000e00, 1.00000000e00], + [1.00000000e00, 0.00000000e00], + [2.00000000e00, -1.00000000e00], + [3.00000000e00, -2.00000000e00], + [-4.00000000e00, 5.00000000e00], + [-2.00000000e00, 3.00000000e00], + [0.00000000e00, 1.00000000e00], + [2.00000000e00, -1.00000000e00], + [-4.00000000e00, 5.00000000e00], + [0.00000000e00, 1.00000000e00], + ], + [ + [-6.50000000e00, 7.00000000e00], + [-5.50000000e00, 6.00000000e00], + [-4.50000000e00, 5.00000000e00], + [-3.50000000e00, 4.00000000e00], + [-2.50000000e00, 3.00000000e00], + [-1.50000000e00, 2.00000000e00], + [-5.00000000e-01, 1.00000000e00], + [5.00000000e-01, 0.00000000e00], + [-6.50000000e00, 7.00000000e00], + [-4.50000000e00, 5.00000000e00], + [-2.50000000e00, 3.00000000e00], + [-5.00000000e-01, 1.00000000e00], + [-6.50000000e00, 7.00000000e00], + [-2.50000000e00, 3.00000000e00], + ], + [ + [5.00000000e02, -5.00000000e02], + [5.01000000e02, -5.01000000e02], + [5.02000000e02, -5.02000000e02], + [5.03000000e02, -5.03000000e02], + [5.04000000e02, -5.04000000e02], + [5.05000000e02, -5.05000000e02], + [5.06000000e02, -5.06000000e02], + [5.07000000e02, -5.07000000e02], + [5.00000000e+02, -5.00000000e+02], + [5.02000000e+02, -5.02000000e+02], + [5.04000000e+02, -5.04000000e+02], + [5.06000000e+02, -5.06000000e+02], + [5.00000000e+02, -5.00000000e+02], + [5.04000000e+02, -5.04000000e+02], + ], # mask out + ], dtype=np.float32) + + input_mask = np.array( + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + dtype=np.int32, + ) + caption_mask = np.array( + [1, 1, 1, 1, 0], + dtype=np.int32, + ) + total_frames = np.array([15], dtype=np.int32) + actual_class_probs, actual_segments = ( + postprocessing_utils.get_segments_from_frame_predictions_mr( + class_probs, + displacements, + input_mask=input_mask, + caption_mask=caption_mask, + total_frames=total_frames, + stride=1, + sampling_strategy='linspace', + displacement_normalizer='none', + secs_per_timestep=1.0, + feature_pyramid_config=ml_collections.ConfigDict({ + 'num_features_level0': 8, + 'feature_pyramid_downsample_stride': 2, + 'feature_pyramid_levels': [0, 1, 2], + }), + ) + ) + cls_probs = class_probs[caption_mask.astype(bool)] + cls_probs = cls_probs[:, input_mask.astype(bool)] + self.assertAllClose(actual_class_probs, cls_probs) + expected_segments = np.array([ + [ + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + ], + [ + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + [3, 5], + ], + [ + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + [8, 10], + ], + [ + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + [13, 14], + ], + ]) + self.assertAllClose(actual_segments, expected_segments) + + +if __name__ == '__main__': + tf.test.main() diff --git a/scenic/projects/unloc/single_task_trainer.py b/scenic/projects/unloc/single_task_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..06b1dd2fa2413431e84feabbc9b9ad539c07bad8 --- /dev/null +++ b/scenic/projects/unloc/single_task_trainer.py @@ -0,0 +1,382 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script.""" + +import functools +from typing import Any, Callable, Dict, Optional, Tuple, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +import flax +from flax import jax_utils +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.unloc import eval_utils as unloc_eval_utils +from scenic.projects.unloc import optimizer_utils +from scenic.projects.unloc import train_utils as unloc_train_utils +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] +LrFn = Callable[[jnp.ndarray], jnp.ndarray] + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[ + train_utils.TrainState, Optional[Dict[str, Any]], Optional[Dict[str, Any]] +]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_state that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, gflops) = ( + unloc_train_utils.initialize_model_with_pytree( + model_def=model.flax_model, + input_spec={ + 'inputs': unloc_train_utils.create_input_spec( + dataset.meta_data['input_shape'], + dataset.meta_data['input_dtype'], + ) + }, + config=config, + rngs=init_rng, + ) + ) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + if config.get('layer_prefix_to_base_lrs') is not None: + tx = optimizer_utils.optimizer_with_multi_lrs(config, params) + else: + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params=params) + # We jit this, such that the arrays that are created on the same device as the + # input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + _, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + if (start_step == 0 and config.get('init_from') is not None): + if config.init_from.get('load_from_unloc_checkpoint', False): + train_state = unloc_train_utils.init_from_unloc_checkpoint( + config, train_state + ) + + if config.init_from.get('load_image_tower', True): + if config.init_from.get('video_encoder'): + train_state = unloc_train_utils.VIDEO_ENCODER_INIT_FN[ + config.init_from.video_encoder.model_type + ](config, train_state) + else: + for modality_name, init_config in config.init_from.get( + 'video_encoders', {} + ).items(): + train_state = unloc_train_utils.VIDEO_ENCODER_INIT_FN[ + init_config.model_type + ](config, train_state, modality_name) + if config.init_from.get('load_text_tower', True): + train_state = unloc_train_utils.TEXT_ENCODER_INIT_FN[ + config.init_from.text_encoder.model_type + ](config, train_state) + elif start_step == 0: + logging.info('Training completely from scratch.' + 'Not restoring from any checkpoint.') + # Replicate the optimizer, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + unloc_train_utils.train_step, + task=config.dataset_configs.get('task', 'classification'), + dataset=config.dataset_configs.get('name', ''), + flax_model=model.flax_model, + loss_fn=model.loss_function, + lr_fn=lr_fn, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train, + ), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + unloc_eval_utils.eval_step, + task=config.dataset_configs.get('task', 'classification'), + dataset=config.dataset_configs.get('name', ''), + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + debug=config.debug_eval, + all_gather_loss=config.get('all_gather_loss', False), + ), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + if config.dataset_configs.get('do_multicrop_test'): + log_test_steps = ( + int(steps_per_epoch * config.dataset_configs.log_test_epochs) or + steps_per_epoch) + task = config.dataset_configs.get('task', 'classification') + if task == 'temporal_localization' or task == 'highlight_detection': + test_step_pmapped = jax.pmap( + functools.partial( + unloc_eval_utils.temporal_localization_test_step, + dataset=config.dataset_configs.get('name', ''), + task=task, + flax_model=model.flax_model, + num_prompts=config.dataset_configs.get('num_prompts', 1), + output_per_class_displacements=config.get( + 'output_per_class_displacements', True + ), + debug=False, + ), + axis_name='batch', + ) + elif task == 'moment_retrieval': + test_step_pmapped = jax.pmap( + functools.partial( + unloc_eval_utils.moment_retrieval_test_step, + dataset=config.dataset_configs.get('name', ''), + flax_model=model.flax_model, + debug=False, + ), + axis_name='batch', + ) + elif task == 'action_segmentation': + test_step_pmapped = jax.pmap( + functools.partial( + unloc_eval_utils.action_segmentation_test_step, + dataset=config.dataset_configs.get('name', ''), + flax_model=model.flax_model, + n_clips=config.get('multicrop_clips_per_device', 2), + num_prompts=config.dataset_configs.get('num_prompts', 1), + prompt_index=config.dataset_configs.get('prompt_index', None), + debug=False, + ), + axis_name='batch', + ) + else: + raise ValueError(f'test_step not supported for task: {task}.') + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + test_step_fn = { + 'classification': ( + unloc_eval_utils.run_classification_test_steps_and_save_eval_summary + ), + 'temporal_localization': ( + unloc_eval_utils.run_temporal_localization_test_steps_and_save_eval_summary + ), + 'highlight_detection': ( + unloc_eval_utils.run_temporal_localization_test_steps_and_save_eval_summary + ), + 'moment_retrieval': ( + unloc_eval_utils.run_moment_retrieval_test_steps_and_save_eval_summary + ), + 'action_segmentation': ( + unloc_eval_utils.run_action_segmentation_test_steps_and_save_eval_summary + ), + } + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + extra_training_logs.append(t_logs) + for h in hooks: + h(step) + # Below are once-in-a-while ops -> pause. + ###################### LOG TRAIN SUMMARY ######################## + if ((step % log_summary_steps == 1) or (step == total_steps) or + (lead_host and chrono.warmup)): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + # train_metrics is list of a dictionaries of metrics, where the shape of + # the metrics[key] is [n_local_devices]. However, because metric functions + # have a psum, we have already summed across the whole sharded batch, and + # what's returned is n_local_devices copies of the same summed metric. + # So we do unreplicate and fetch them to host using `unreplicate_and_get`. + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_training_logs), + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + eval_metrics = [] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + for _ in range(steps_per_eval): + eval_batch = next(dataset.valid_iter) + e_metrics, _ = eval_step_pmapped(train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + eval_summary = train_utils.log_eval_summary( + step=step, eval_metrics=eval_metrics, writer=writer) + writer.flush() + del eval_metrics + chrono.resume() + ################### TESTING ####################### + if (config.dataset_configs.get('do_multicrop_test') and + (step % log_test_steps == 1 and step > 1 or step == total_steps)): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('test'): + test_step_fn[config.dataset_configs.get('task', 'classification')]( + config, step, dataset, test_step_pmapped, train_state, writer) + chrono.resume() + ##################### CHECKPOINTING ################### + if ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + flax.config.update('flax_use_orbax_checkpointing', + config.get('flax_use_orbax_checkpointing', False)) + train_utils.save_checkpoint( + workdir, + unrep_train_state, + max_to_keep=config.get('max_checkpoints_to_keep', 3), + ) + del unrep_train_state + chrono.resume() # Un-pause now. + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/projects/unloc/temporal_localization_base_model.py b/scenic/projects/unloc/temporal_localization_base_model.py new file mode 100644 index 0000000000000000000000000000000000000000..de0e25cf930a1b24ef08cb6197f5a12a7313b033 --- /dev/null +++ b/scenic/projects/unloc/temporal_localization_base_model.py @@ -0,0 +1,500 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class for temporal localization models.""" + +import functools +from typing import Any, Callable, Dict, Mapping, Optional, Tuple, Union + +import immutabledict +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils +from scenic.projects.unloc import metrics as unloc_metrics + +Batch = Dict[str, Any] +MetricFn = Callable[[jnp.ndarray, Dict[str, Any]], Dict[str, Tuple[float, + float]]] + + +_BOX_REGRESSION_LOSS_FNS = { + 'iou': lambda x, y: 1.0 - unloc_metrics.temporal_iou(x, y), + 'l1': unloc_metrics.normalized_l1, + 'center_offset_squared': unloc_metrics.center_offset_squared, +} + + +def weighted_top_one_correctly_classified( + logits: jnp.ndarray, + multihot_targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + background_logit_threshold: float = 0.0, +) -> jnp.ndarray: + """Computes weighted number of correctly classified. + + We assume there are background samples where the labels are all zeros. + + Args: + logits: Class logits in shape (batch_size, num_frames, num_classes). + multihot_targets: Multihot class labels in shape (batch_size, num_frames, + num_classes). + weights: None or weights in shape (batch_size, num_frames). + background_logit_threshold: If the max logit is lower than this score, we + predict this example as background. + + Returns: + Weighted numbers of correctly classified samples. + """ + if logits.shape[-1] == 1: + preds = logits >= 0.0 + correct = jnp.equal(preds, multihot_targets) + else: + top1_idx = jnp.argmax(logits, axis=-1) + background_label = jnp.sum(multihot_targets, axis=-1) == 0 + background_pred = ( + jnp.max(logits, axis=-1) <= background_logit_threshold + ).astype(np.int32) + + # Extracts the label at the highest logit index for each input. + top1_correct = jnp.take_along_axis( + multihot_targets, top1_idx[..., None], axis=-1) + top1_correct = jnp.squeeze(top1_correct) + foreground_correct = ~background_pred.astype(bool) * top1_correct + + # Count correctly classified background samples. + background_correct = background_pred * background_label + correct = foreground_correct + background_correct + + if weights is not None: + return model_utils.apply_weights(correct, weights) + return correct + + +def weighted_unnormalized_box_regression_loss( + displacements: jnp.ndarray, + gt_displacements: jnp.ndarray, + label: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + loss_type: str = 'l1+iou', +) -> jnp.ndarray: + """Computes weighted box regression losses. + + Box regression losses are only computed at frames within a positive segment. + + Args: + displacements: Predicted start/end time displacements in shape (batch_size, + num_frames, num_classes, 2) for TAL or (batch_size, num_captions, + num_frames, 2) for MR. + gt_displacements: Ground truth start/end time displacements in shape + (batch_size, num_frames, num_classes, 2) for TAL or (batch_size, + num_captions, num_frames, 2) for MR. + label: Multihot vector of shape (batch_size, num_frames, num_classes) for + TAL or (batch_size, num_captions, num_frames) for MR. + weights: None or weights array of shape (batch_size, num_frames) for TAL or + (batch_size, num_captions, num_frames) for MR. + loss_type: Box regression loss type. Multiple losses can be used + simultaneously connected by a `+` and one can also specify the weight for + each loss, e.g., `0.5*l1+1.0*iou`. + + Returns: + The weighted DIoU losses in shape (batch_size, num_frames, num_classes) for + TAL or (batch_size, num_captions, num_frames) for MR. + """ + + box_regression_loss = 0.0 + loss_types = loss_type.split('+') + for weight_and_type in loss_types: + wt = weight_and_type.split('*') + (w, t) = (1.0, wt[0]) if len(wt) == 1 else (float(wt[0]), wt[1]) + box_regression_loss += w * _BOX_REGRESSION_LOSS_FNS[t]( + displacements, gt_displacements + ) + # Only compute the losses on the positive segments. + box_regression_loss = box_regression_loss * label + if weights is None: + return box_regression_loss + return model_utils.apply_weights(box_regression_loss, weights) + + +def weighted_unnormalized_iou( + displacements: jnp.ndarray, + gt_displacements: jnp.ndarray, + label: jnp.ndarray, + weights: Optional[jnp.ndarray] = None) -> jnp.ndarray: + """Computes weighted IoUs. + + IoUs are only computed at frames within a positive segment. + + Args: + displacements: Predicted start/end time displacements in shape (batch_size, + num_frames, num_classes, 2) for TAL or (batch_size, num_captions, + num_frames, 2) for MR. + gt_displacements: Ground truth start/end time displacements in shape + (batch_size, num_frames, num_classes, 2) for TAL or (batch_size, + num_captions, num_frames, 2) for MR. + label: Multihot vector of shape (batch_size, num_frames, num_classes) for + TAL or (batch_size, num_captions, num_frames) for MR. + weights: None or weights array of shape (batch_size, num_frames) for TAL or + (batch_size, num_captions, num_frames) for MR. + + Returns: + The weighted IoUs in a batch. + """ + + iou = unloc_metrics.temporal_iou(displacements, gt_displacements) + # Only compute the losses on the positive segments. + iou = iou * label + return model_utils.apply_weights(iou, weights) + + +def num_positive_frames( + label: jnp.ndarray, + weights: Optional[jnp.ndarray] = None) -> Union[jnp.ndarray, float]: + """Returns number of frames within positive segments.""" + normalizer = jnp.sum(label, axis=-1).astype(bool).astype(np.float32) + if weights is None: + return normalizer.sum() + return (normalizer * weights).sum() + + +_TEMPORAL_LOCALIZATION_SIGMOID_LOSS_CLASSIFICATION_METRICS = ( + immutabledict.immutabledict({ + 'precision@1': ( + weighted_top_one_correctly_classified, + model_utils.num_examples, + ), + 'sigmoid_classification_loss': ( + model_utils.weighted_unnormalized_sigmoid_cross_entropy, + model_utils.num_examples, + ), + }) +) +_TEMPORAL_LOCALIZATION_FOCAL_LOSS_CLASSIFICATION_METRICS = ( + immutabledict.immutabledict({ + 'precision@1': ( + weighted_top_one_correctly_classified, + model_utils.num_examples, + ), + 'focal_classification_loss': ( + model_utils.focal_sigmoid_cross_entropy, + model_utils.num_examples, + ), + }) +) +_TEMPORAL_LOCALIZATION_BOX_REGRESSION_METRICS = immutabledict.immutabledict({ + 'mean_iou': (weighted_unnormalized_iou, num_positive_frames), +}) + + +def weighted_box_regression_loss( + displacements: jnp.ndarray, + gt_displacements: jnp.ndarray, + label: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + loss_type: str = 'l1+iou', +) -> jnp.ndarray: + """Computes weighted box regression loss. + + Args: + displacements: Predicted start/end time displacements in shape (batch_size, + num_frames, num_classes, 2) for TAL or (batch_size, num_captions, + num_frames, 2) for MR. + gt_displacements: Ground truth start/end time displacements in shape + (batch_size, num_frames, num_classes, 2) for TAL or (batch_size, + num_captions, num_frames, 2) for MR. + label: Multihot vector of shape (batch_size, num_frames, num_classes) for + TAL or (batch_size, num_captions, num_frames) for MR. + weights: None or weights array of shape (batch_size, num_frames) for TAL or + (batch_size, num_captions, num_frames) for MR. + loss_type: Box regression loss type. Multiple losses can be used + simultaneously connected by a `+` and one can also specify the weight for + each loss, e.g., `0.5*l1+1.0*iou`. + + Returns: + The mean box regression loss of the examples in a batch as a scalar. + """ + + if weights is not None: + normalization = model_utils.apply_weights(label, weights).sum() + else: + normalization = np.prod(label.shape[:-1]) + box_loss = weighted_unnormalized_box_regression_loss( + displacements, gt_displacements, label, weights, loss_type + ) + return jnp.sum(box_loss) / (normalization + 1e-8) + + +def weighted_focal_sigmoid_cross_entropy( + logits: jnp.ndarray, + multi_hot_targets: jnp.ndarray, + weights: Optional[jnp.ndarray] = None, + label_weights: Optional[jnp.ndarray] = None, + label_smoothing: Optional[float] = None, + alpha: Optional[float] = 0.5, + gamma: Optional[float] = 2.0) -> jnp.ndarray: + """Computes weighted focal sigmoid cross entropy given logits and targets. + + Args: + logits: Output of model in shape [batch, ..., num_classes]. + multi_hot_targets: Multi-hot vector of shape [batch, ..., num_classes]. + weights: None or array of shape [batch, ...] (rank of one_hot_targets -1). + label_weights: None or array of shape broadcastable to the shape of logits. + Typically this would be [num_classes] and is the weight to apply to each + label. + label_smoothing: Scalar to use to smooth the one-hot labels. + alpha: Focal loss parameter alpha. + gamma: Focal loss parameter gamma. + + Returns: + The mean focal loss of the examples in the given batch as a scalar. + """ + if weights is not None: + normalization = weights.sum() + else: + normalization = np.prod(multi_hot_targets.shape[:-1]) + + unnormalized_sigmoid_ce = model_utils.focal_sigmoid_cross_entropy( + logits, + multi_hot_targets, + weights=weights, + label_weights=label_weights, + label_smoothing=label_smoothing, + alpha=alpha, + gamma=gamma) + return jnp.sum(unnormalized_sigmoid_ce) / (normalization + 1e-8) + + +def temporal_localization_metrics_function( + logits: jnp.ndarray, + batch: Batch, + config: ml_collections.ConfigDict, + classification_metrics: Mapping[ + str, Any + ] = _TEMPORAL_LOCALIZATION_SIGMOID_LOSS_CLASSIFICATION_METRICS, + box_regression_metrics: Mapping[ + str, Any + ] = _TEMPORAL_LOCALIZATION_BOX_REGRESSION_METRICS, + axis_name: Union[str, Tuple[str, ...]] = 'batch', +) -> Dict[str, Tuple[float, float]]: + """Calculates metrics for the temporal localization task. + + Args: + logits: Output of model in shape [batch, num_frames, num_classes * 3] if + config.output_per_class_displacements = True, otherwise in shape (batch, + num_frames, num_classes + 2). + batch: Batch of data that has 'label', 'displacements', and optionally + 'batch_mask'. + config: Loss config. + classification_metrics: Mapping from classification metric names to metric + functions. + box_regression_metrics: Mapping from box regression metric names to metric + functions. + axis_name: List of axes on which we run the pmsum. + + Returns: + A dict of metrics, in which keys are metrics name and values are tuples of + (metric, normalizer). + """ + if batch.get('batch_mask') is None: + batch_mask = jnp.ones((logits.shape[0],), dtype=jnp.float32) + else: + batch_mask = batch.get('batch_mask') + weights = batch_mask[:, None] * batch['inputs']['input_mask'].astype( + jnp.float32) + + # This psum is required to correctly evaluate with multihost. Only host 0 + # will report the metrics, so we must aggregate across all hosts. The psum + # will map an array of shape [n_global_devices, batch_size] -> [batch_size] + # by summing across the devices dimension. The outer sum then sums across the + # batch dim. The result is then we have summed across all samples in the + # sharded batch. + evaluated_metrics = {} + bs, num_frames, _ = logits.shape + if config.get('output_per_class_displacements', True): + num_classes = logits.shape[-1] // 3 + reshaped_logits = logits.reshape((bs, num_frames, num_classes, 3)) + class_logits = reshaped_logits[..., 0] + pred_displacements = reshaped_logits[..., 1:] + gt_displacements = batch['displacements'] + else: + num_classes = logits.shape[-1] - 2 + class_logits = logits[..., :num_classes] + pred_displacements = jnp.expand_dims(logits[..., num_classes:], axis=2) + gt_displacements = jnp.expand_dims(batch['displacements'], axis=2) + + class_label = batch['label'] + for key, val in classification_metrics.items(): + if key == 'focal_classification_loss': + evaluated_metrics[key] = model_utils.psum_metric_normalizer( + (val[0]( + class_logits, + class_label, + weights, + alpha=config.get('focal_loss_alpha', 0.5), + gamma=config.get('focal_loss_gamma', 2.0)), val[1]( + class_logits, class_label, weights)), + axis_name=axis_name) + else: + evaluated_metrics[key] = model_utils.psum_metric_normalizer( + (val[0](class_logits, class_label, weights), val[1]( + class_logits, class_label, weights)), + axis_name=axis_name) + + for key, val in box_regression_metrics.items(): + evaluated_metrics[key] = model_utils.psum_metric_normalizer( + ( + val[0]( + pred_displacements, + gt_displacements, + class_label, + weights, + ), + val[1](class_label, weights), + ), + axis_name=axis_name, + ) + return evaluated_metrics # pytype: disable=bad-return-type # jax-ndarray + + +class TemporalLocalizationModel(base_model.BaseModel): + """Defines metrics/loss among all temporal localization models. + + A model is class with three members: get_metrics_fn, loss_fn, & a flax_model. + + get_metrics_fn returns a callable function, metric_fn, that calculates the + metrics and returns a dictionary. The metric function computes f(logits_i, + batch_i) on a minibatch, it has API: + ```metric_fn(logits, batch).``` + + The trainer will then aggregate and compute the mean across all samples + evaluated. + + loss_fn is a function of API + loss = loss_fn(logits, batch, model_params=None). + + This model class defines two losses, sigmoid cross entropy for classification + and IoU for boundary regression. + """ + + def get_metrics_fn(self, split: Optional[str] = None): + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + batch)``` + """ + del split # For all splits, we return the same metric functions. + cls_loss_type = self.config.get('classification_loss_type', 'sigmoid') + box_loss_type = self.config.get('box_loss_type', 'l1+iou') + box_loss_types = box_loss_type.split('+') + box_regression_metrics = dict(_TEMPORAL_LOCALIZATION_BOX_REGRESSION_METRICS) + for weight_and_type in box_loss_types: + loss_type = weight_and_type.split('*')[-1] + box_regression_metrics[f'{loss_type}_loss'] = ( + functools.partial( + weighted_unnormalized_box_regression_loss, loss_type=loss_type + ), + num_positive_frames, + ) + cls_metrics = ( + _TEMPORAL_LOCALIZATION_FOCAL_LOSS_CLASSIFICATION_METRICS + if cls_loss_type == 'focal' else + _TEMPORAL_LOCALIZATION_SIGMOID_LOSS_CLASSIFICATION_METRICS) + return functools.partial( + temporal_localization_metrics_function, + config=self.config, + classification_metrics=cls_metrics, + box_regression_metrics=box_regression_metrics, + ) + + def loss_function(self, + logits: jnp.ndarray, + batch: Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Returns the sum of classification and IoU loss. + + Args: + logits: class logits and predicted start/end time displacements in shape + (batch_size, num_frames, num_classes * 3) if + output_per_class_displacements = True, otherwise in shape (batch_size, + num_frames, num_classes + 2). + batch: Batch of data. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + bs, num_frames, _ = logits.shape + if self.config.get('output_per_class_displacements', True): + num_classes = logits.shape[-1] // 3 + reshaped_logits = logits.reshape((bs, num_frames, num_classes, 3)) + class_logits = reshaped_logits[..., 0] + displacements = reshaped_logits[..., 1:] + gt_displacements = batch['displacements'] + else: + num_classes = logits.shape[-1] - 2 + class_logits = logits[..., :num_classes] + displacements = jnp.expand_dims(logits[..., num_classes:], axis=2) + gt_displacements = jnp.expand_dims(batch['displacements'], axis=2) + batch_mask = batch['batch_mask'] + weights = batch_mask[:, None] * batch['inputs']['input_mask'].astype( + jnp.float32) + box_loss_type = self.config.get('box_loss_type', 'l1+iou') + box_loss = weighted_box_regression_loss( + displacements, + gt_displacements, + batch['label'], + weights=weights, + loss_type=box_loss_type, + ) + classification_loss_type = self.config.get('classification_loss_type', + 'sigmoid') + if classification_loss_type == 'focal': + classification_loss = weighted_focal_sigmoid_cross_entropy( + class_logits, + batch['label'], + weights=weights, + label_smoothing=self.config.get('label_smoothing'), + alpha=self.config.get('focal_loss_alpha', 0.5), + gamma=self.config.get('focal_loss_gamma', 2.0)) + elif classification_loss_type == 'sigmoid': + classification_loss = model_utils.weighted_sigmoid_cross_entropy( + class_logits, + batch['label'], + weights=weights, + label_smoothing=self.config.get('label_smoothing')) + else: + raise ValueError(f'Unknown loss type: {classification_loss_type}.') + return ( + self.config.get('classification_loss_alpha', 1.0) * classification_loss + + box_loss + ) + + def build_flax_model(self): + raise NotImplementedError('Subclasses must implement build_flax_model().') + + def default_flax_model_config(self): + """Default config for the flax model that is built in `build_flax_model`. + + This function in particular serves the testing functions and supposed to + provide config tha are passed to the flax_model when it's build in + `build_flax_model` function, e.g., `model_dtype_str`. + """ + raise NotImplementedError( + 'Subclasses must implement default_flax_model_config().') diff --git a/scenic/projects/unloc/temporal_localization_base_model_test.py b/scenic/projects/unloc/temporal_localization_base_model_test.py new file mode 100644 index 0000000000000000000000000000000000000000..70f060ae23f562f7b1d14a63a6ea2aa6b68a54e8 --- /dev/null +++ b/scenic/projects/unloc/temporal_localization_base_model_test.py @@ -0,0 +1,354 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for temporal_localization_base_model.""" + +from absl.testing import absltest +from absl.testing import parameterized +from flax import jax_utils +import jax +import ml_collections +import numpy as np +from scenic.projects.unloc import temporal_localization_base_model + + +class MockTemporalLocalizationModel( + temporal_localization_base_model.TemporalLocalizationModel): + """A mock temporal localization model for testing purposes.""" + + def __init__(self, config: ml_collections.ConfigDict): + dataset_meta_data = {} + super().__init__(config, dataset_meta_data) + + def build_flax_model(self): + pass + + def default_flax_model_config(self): + pass + + +class TemporalLocalizationBaseModelTest(parameterized.TestCase): + + @parameterized.parameters( + (None, np.array([ + [1, 0, 1], + [0, 0, 1], + ], dtype=np.int32)), + (np.array([1, 0], dtype=np.int32), + np.array([ + [1, 0, 1], + [0, 0, 0], + ], dtype=np.int32)), + ) + def test_weighted_top_one_correctly_classified(self, weights, + expected_correct): + logits = np.array([ + [[1.2, -0.2, 0.1], [0.2, -0.4, -0.4], [-1.0, -1.0, -1.0]], + [[-0.4, 0.5, -1.0], [2.0, 1.0, 3.0], [-1.0, -1.0, -1.0]], + ], + dtype=np.float32) + multihot_targets = np.array([ + [[1, 0, 0], [0, 0, 0], [0, 0, 0]], + [[0, 0, 0], [0, 1, 0], [0, 0, 0]], + ], + dtype=np.int32) + correct = temporal_localization_base_model.weighted_top_one_correctly_classified( # pylint: disable=line-too-long + logits, multihot_targets, weights=weights) + np.testing.assert_equal(correct, expected_correct) + + def test_weighted_top_one_correctly_classified_all_background(self): + logits = np.array( + [ + [[1.2, -0.2, 0.1], [0.2, -0.4, -0.4], [-1.0, -1.0, -1.0]], + [[-0.4, 0.5, -1.0], [2.0, 1.0, 3.0], [-1.0, -1.0, -1.0]], + ], + dtype=np.float32, + ) + multihot_targets = np.array( + [ + [[0, 0, 0], [0, 0, 0], [0, 0, 0]], + [[0, 0, 0], [0, 0, 0], [0, 0, 0]], + ], + dtype=np.int32, + ) + correct = ( + temporal_localization_base_model.weighted_top_one_correctly_classified( + logits, multihot_targets, weights=None + ) + ) + expected_correct = np.array([[0, 0, 1], [0, 0, 1]], dtype=np.int32) + np.testing.assert_equal(correct, expected_correct) + + def test_weighted_top_one_correctly_classified_all_foreground(self): + logits = np.array( + [ + [[1.2, -0.2, 0.1], [0.2, -0.4, -0.4], [-1.0, -1.0, -1.0]], + [[-0.4, 0.5, -1.0], [2.0, 1.0, 3.0], [-1.0, -1.0, -1.0]], + ], + dtype=np.float32, + ) + multihot_targets = np.array( + [ + [[1, 0, 0], [0, 0, 1], [0, 1, 0]], + [[0, 0, 0], [0, 0, 1], [0, 1, 0]], + ], + dtype=np.int32, + ) + correct = ( + temporal_localization_base_model.weighted_top_one_correctly_classified( + logits, multihot_targets, weights=None + ) + ) + expected_correct = np.array([[1, 0, 0], [0, 1, 0]], dtype=np.int32) + np.testing.assert_equal(correct, expected_correct) + + @parameterized.parameters( + (None, 'iou'), + (None, 'l1'), + (None, 'center_offset_squared+iou'), + (None, 'l1+iou'), + (None, '0.5*l1+1.0*iou'), + (np.ones((2, 8)), 'iou'), + (np.ones((2, 8)), 'iou+center_offset_squared'), + (np.ones((2, 8)), 'iou+l1'), + ) + def test_weighted_unnormalized_iou_loss(self, weights, loss_type): + batch_size, num_frames, num_classes = 2, 8, 10 + displacements = np.ones((batch_size, num_frames, num_classes, 2), + dtype=np.float32) + gt_displacements = np.ones((batch_size, num_frames, num_classes, 2), + dtype=np.float32) + label = np.zeros((batch_size, num_frames, num_classes), dtype=np.int32) + label[..., 0] = 1 + box_loss = temporal_localization_base_model.weighted_unnormalized_box_regression_loss( + displacements, gt_displacements, label, weights, loss_type + ) + self.assertTupleEqual(box_loss.shape, (batch_size, num_frames, num_classes)) + + @parameterized.parameters( + (None, 2), + (np.array([1, 0], dtype=np.int32), 1), + ) + def test_num_positive_frames(self, weights, expected_output): + label = np.array([ + [[1, 0, 0], [0, 0, 0]], + [[0, 0, 0], [0, 1, 0]], + ], + dtype=np.int32) + actual = temporal_localization_base_model.num_positive_frames( + label, weights) + self.assertEqual(actual, expected_output) + + @parameterized.parameters( + ('sigmoid', 'iou', True), + ('focal', 'iou+l1', True), + ('focal', 'iou+l1', False), + ('focal', '0.8*iou+l1', True), + ('focal', 'iou+0.5*center_offset_squared', True), + ) + def test_temporal_localization_model_loss_function( + self, cls_loss_type, box_loss_type, output_per_class_displacements + ): + config = ml_collections.ConfigDict({ + 'classification_loss_type': cls_loss_type, + 'box_loss_type': box_loss_type, + 'output_per_class_displacements': output_per_class_displacements, + }) + model = MockTemporalLocalizationModel(config) + batch_size, num_frames, num_classes = 2, 8, 10 + if output_per_class_displacements: + logits = np.ones( + (batch_size, num_frames, num_classes * 3), dtype=np.float32 + ) + else: + logits = np.ones( + (batch_size, num_frames, num_classes + 2), dtype=np.float32 + ) + batch = { + 'batch_mask': + np.ones((batch_size), dtype=np.int32), + 'inputs': { + 'input_mask': np.ones((batch_size, num_frames), dtype=np.int32), + }, + 'label': + np.zeros((batch_size, num_frames, num_classes), dtype=np.int32), + 'displacements': + np.zeros((batch_size, num_frames, num_classes, 2), + dtype=np.float32), + } + if output_per_class_displacements: + batch['displacements'] = np.zeros( + (batch_size, num_frames, num_classes, 2), dtype=np.float32 + ) + else: + batch['displacements'] = np.zeros( + (batch_size, num_frames, 2), dtype=np.float32 + ) + batch['label'][..., 0] = 1 + loss = model.loss_function(logits, batch) + self.assertGreater(loss, 0.0) + + @parameterized.parameters( + ( + 'sigmoid', + 'iou', + True, + {'iou_loss': 2.0 - 8 / 9 - 6 / 8}, + 8 / 9 + 6 / 8, + ), + ( + 'focal', + 'iou+center_offset_squared', + True, + { + 'iou_loss': 2.0 - 8 / 9 - 6 / 8, + 'center_offset_squared_loss': (0.05 / 0.9) ** 2, + }, + 8 / 9 + 6 / 8, + ), + ( + 'focal', + 'iou+l1', + True, + { + 'iou_loss': 2.0 - 8 / 9 - 6 / 8, + 'l1_loss': 1 / 9 + 2 / 8, + }, + 8 / 9 + 6 / 8, + ), + ( + 'focal', + 'iou+l1', + False, + { + 'iou_loss': 2.0 - 8 / 9 - 6 / 8, + 'l1_loss': 1 / 9 + 2 / 8, + }, + 8 / 9 + 6 / 8, + ), + ) + def test_temporal_localization_model_get_metrics_fn( + self, + cls_loss_type, + box_loss_type, + output_per_class_displacements, + expected_box_loss, + expected_mean_iou, + ): + config = ml_collections.ConfigDict({ + 'classification_loss_type': cls_loss_type, + 'box_loss_type': box_loss_type, + 'output_per_class_displacements': output_per_class_displacements, + }) + model = MockTemporalLocalizationModel(config) + metrics_fn = jax.pmap(model.get_metrics_fn(), axis_name='batch') + class_logits = np.array([ + [[[1.2], [-0.9], [0.4]], [[-0.4], [-0.8], [-0.1]]], + [[[1.2], [0.9], [0.4]], [[0.4], [0.8], [0.1]]], + ]) # shape is (2, 2, 3, 1). + if output_per_class_displacements: + pred_displacements = np.array([ + [ + [[0.4, 0.4], [0.0, 0.1], [0.2, 0.0]], + [[0.1, 0.2], [0.3, 0.4], [0.5, 0.6]], + ], + [ + [[1.2, 0.9], [0.4, 0.4], [0.4, 0.2]], + [[0.4, 0.8], [0.1, 0.3], [0.3, 0.3]], + ], + ]) # shape is (2, 2, 3, 2). + logits = np.concatenate([class_logits, pred_displacements], axis=-1) + logits = logits.reshape((2, 2, 9)) + else: + pred_displacements = np.array([ + [[0.4, 0.4], [0.1, 0.2]], + [[0.4, 0.4], [0.4, 0.8]], + ]) # shape is (2, 2, 2). + logits = np.concatenate( + [np.squeeze(class_logits, axis=-1), pred_displacements], axis=-1 + ) + batch = { + 'batch_mask': + np.ones((2,), dtype=np.int32), + 'inputs': { + 'input_mask': np.ones((2, 2), dtype=np.int32), + }, + 'label': + np.array([ + [[1, 0, 0], [0, 0, 0]], + [[0, 1, 0], [0, 0, 0]], + ], + dtype=np.int32), + 'displacements': + np.array([ + [ + [[0.5, 0.4], [0, 0], [0, 0]], + [[0, 0], [0, 0], [0, 0]], + ], + [ + [[0, 0], [0.3, 0.3], [0, 0]], + [[0, 0], [0, 0], [0, 0]], + ], + ], + dtype=np.float32), + } + if output_per_class_displacements: + batch['displacements'] = np.array( + [ + [ + [[0.5, 0.4], [0, 0], [0, 0]], + [[0, 0], [0, 0], [0, 0]], + ], + [ + [[0, 0], [0.3, 0.3], [0, 0]], + [[0, 0], [0, 0], [0, 0]], + ], + ], + dtype=np.float32, + ) + else: + batch['displacements'] = np.array( + [ + [[0.5, 0.4], [0, 0]], + [[0.3, 0.3], [0, 0]], + ], + dtype=np.float32, + ) # shape (2, 2, 2) + logits, batch = jax_utils.replicate((logits, batch)) + metrics = metrics_fn(logits, batch) + expected_cls_loss_key = ('sigmoid_classification_loss' if cls_loss_type + == 'sigmoid' else 'focal_classification_loss') + expected_box_loss_keys = set(expected_box_loss.keys()) + self.assertSetEqual( + set(metrics.keys()), + {'precision@1', expected_cls_loss_key, 'mean_iou'} + | expected_box_loss_keys, + ) + metrics = jax_utils.unreplicate(metrics) + self.assertAlmostEqual( + metrics['mean_iou'][0], expected_mean_iou, delta=1e-4) + self.assertAlmostEqual(metrics['mean_iou'][1], 2) + for key in expected_box_loss_keys: + self.assertAlmostEqual( + metrics[key][0], expected_box_loss[key], delta=1e-4 + ) + self.assertAlmostEqual(metrics[key][1], 2) + self.assertAlmostEqual(metrics['precision@1'][0], 2.0) + self.assertAlmostEqual(metrics['precision@1'][1], 4) + self.assertGreaterEqual(metrics[expected_cls_loss_key][0], 0) + self.assertAlmostEqual(metrics[expected_cls_loss_key][1], 4) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/unloc/train_utils.py b/scenic/projects/unloc/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..aed8d8353c2bedbea1b0ec6db50f7869c18a7876 --- /dev/null +++ b/scenic/projects/unloc/train_utils.py @@ -0,0 +1,540 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Contains UnLoc training utils.""" + +import collections.abc as collections +import functools +import re +from typing import Any, Callable, Dict, Mapping, Optional, Sequence, Tuple, Union +from absl import logging +import flax +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import ml_collections +import optax +from scenic.common_lib import debug_utils +from scenic.dataset_lib import dataset_utils +from scenic.projects.baselines.clip import model as clip_model +from scenic.projects.unloc import eval_utils as unloc_eval_utils +from scenic.projects.unloc import model_utils as unloc_model_utils +from scenic.projects.vivit import model_utils as vivit_model_utils +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils +import scipy.ndimage + +# JAX team is working on type annotation for pytree: +# https://github.com/jax-ml/jax/issues/1555 +PyTree = Any +Batch = Dict[str, Any] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] +LrFn = Callable[[int], jnp.ndarray] + + +def create_input_spec(input_shapes: Union[Mapping[str, Any], Tuple[int, ...]], + input_dtypes: Union[Mapping[str, Any], jnp.dtype]): + if isinstance(input_shapes, tuple): + return (input_shapes, input_dtypes) + return { + name: create_input_spec(input_shapes[name], input_dtypes[name]) + for name in input_shapes.keys() + } + + +def interpolate_class_embedding( + class_embedding: jnp.ndarray, + restored_class_embedding: jnp.ndarray) -> jnp.ndarray: + """Interpolates class embeddings. + + This function is used to initialize class embeddings for UnLoc models when + the current model has a different number of class embeddings than the + pretrained ones. + + Args: + class_embedding: A 2D float tensor of shape (new_time, channels) + representing the class embeddings to be updated. + restored_class_embedding: A 2D float tensor of shape (old_time, channels) + representing the class embeddings from which we load the weights. + + Returns: + A 2D float tensor of shape (new_time, channels) representing the resized + class embeddings. + """ + logging.info('Resizing class embeddings from %s to %s.', + restored_class_embedding.shape, class_embedding.shape) + zoom = (class_embedding.shape[0] / restored_class_embedding.shape[0], 1) + return scipy.ndimage.zoom(restored_class_embedding, zoom, order=1) + + +def initialize_from_unloc_parameters( + params: Dict[str, Any], + restored_params: Dict[str, Any], + skip_regex: Optional[str] = None, +) -> Dict[str, Any]: + """Initialize model parameters from an UnLoc model. + + Args: + params: The parameters of the model. + restored_params: Restored parameters from the given pretrained checkpoint. + skip_regex: Regular expression of parameters to skip loading. + + Returns: + Initialized parameters of the current model. + """ + + restored_flat = flax.traverse_util.flatten_dict( + dict(restored_params), keep_empty_nodes=True, sep='/') + model_flat = flax.traverse_util.flatten_dict( + dict(params), keep_empty_nodes=True, sep='/') + logging.info('model_flat keys: %s', list(model_flat.keys())) + + for m_key, m_params in restored_flat.items(): + if m_key not in model_flat: + logging.warning('%s in checkpoint doesn\'t exist in model. Skip.', m_key) + continue + if skip_regex and re.findall(skip_regex, m_key): + logging.info('Skip loading parameter %s.', m_key) + continue + if 'encoder/class_embedding' in m_key: + if m_params.shape != model_flat[m_key].shape: + model_flat[m_key] = interpolate_class_embedding(model_flat[m_key], + m_params) + else: + model_flat[m_key] = m_params + elif 'encoder/VisionTransformer/positional_embedding' in m_key: + if m_params.shape != model_flat[m_key].shape: + model_flat[m_key] = vivit_model_utils.interpolate_positional_embeddings( + m_params, model_flat[m_key].shape[0])[0] + else: + model_flat[m_key] = m_params + elif m_key == 'text_encoder/positional_embedding': + if m_params.shape != model_flat[m_key].shape: + cur_len = model_flat[m_key].shape[0] + pretrain_len = m_params.shape[0] + if pretrain_len > cur_len: + model_flat[m_key] = m_params[:cur_len] + else: + model_flat[m_key] = jnp.concatenate( + [m_params, model_flat[m_key][pretrain_len:]], axis=0 + ) + logging.info( + 'Changing shape of %s from %s to %s.', + m_key, + m_params.shape, + model_flat[m_key].shape, + ) + else: + model_flat[m_key] = m_params + elif 'conv1' in m_key: + # backward compatible to 3D conv implementation. + if m_params.shape != model_flat[m_key].shape: + assert len(m_params.shape) == 5 and len(model_flat[m_key].shape) == 2 + model_flat[m_key] = jnp.reshape(m_params, model_flat[m_key].shape) + logging.info( + 'Changing shape of %s from %s to %s.', + m_key, + m_params.shape, + model_flat[m_key].shape, + ) + else: + model_flat[m_key] = m_params + else: + logging.info('Loading %s from checkpoint into model', m_key) + if m_params.shape != model_flat[m_key].shape: + raise ValueError( + 'Inconsistent shapes between the current model (%s) and the ' + 'pretrained model\'s (%s).' % + (model_flat[m_key].shape, m_params.shape)) + model_flat[m_key] = m_params + return flax.traverse_util.unflatten_dict(model_flat, sep='/') + + +def initialize_from_unloc_train_state( + train_state: train_utils.TrainState, + restored_train_state: train_utils.TrainState, + skip_regex: Optional[str] = None, +) -> train_utils.TrainState: + """Updates UnLoc's train_state with a pretrained UnLoc model weights. + + Args: + train_state: A raw TrainState for the current model. + restored_train_state: TrainState of the pretrained model. + skip_regex: Regular expression of parameters to skip loading. + + Returns: + Updated train_state. + """ + + params = flax.core.unfreeze(train_state.params) + restored_params = flax.core.unfreeze(restored_train_state.params) + params = initialize_from_unloc_parameters(params, restored_params, skip_regex) + return train_state.replace(params=flax.core.freeze(params)) + + +def init_from_unloc_checkpoint( + config: ml_collections.ConfigDict, + train_state: train_utils.TrainState, +) -> train_utils.TrainState: + """Initialize train state from an UnLoc checkpoint. + + The checkpoint can be specified either by an xid: + config.init_from.xm = (55208837, 1) + or a file path: + config.init_from.checkpoint_path = '/is-d/home/foo/55208837/1' + + Args: + config: Config points to checkpoint location. + train_state: TrainState of currement model. + + Returns: + Updated train_state. + Raises: + RuntimeError: if checkpoint is not provided by the config. + """ + init_checkpoint_path = None + checkpoint_path = config.init_from.get('checkpoint_path') + if checkpoint_path is not None: + init_checkpoint_path = checkpoint_path + if init_checkpoint_path is None: + raise RuntimeError('Set either "xm" or a file path to UnLoc checkpoint.') + + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + return initialize_from_unloc_train_state( + train_state, + restored_train_state, + skip_regex=config.init_from.get('skip_regex'), + ) + + +def init_video_encoder_from_clip_checkpoint( + config: ml_collections.ConfigDict, + train_state: train_utils.TrainState, + modality_name: str = 'video', +) -> train_utils.TrainState: + """Initializes the video encoder with a CLIP model.""" + if config.init_from.get('video_encoder'): + checkpoint_path = config.init_from.video_encoder.checkpoint_path + else: + checkpoint_path = config.init_from.video_encoders.get( + modality_name + ).checkpoint_path + clip_params = clip_model.load_model_vars('', checkpoint_path) + clip_params = jax.tree_util.tree_map(jnp.float32, clip_params) + return unloc_model_utils.initialize_from_clip_model( + config, + train_state, + clip_params, + load_image_tower=True, + load_text_tower=False, + video_modality_name=modality_name, + ) + + +def init_text_encoder_from_clip_checkpoint( + config: ml_collections.ConfigDict, + train_state: train_utils.TrainState) -> train_utils.TrainState: + """Initializes the text encoder with a CLIP model.""" + checkpoint_path = config.init_from.text_encoder.checkpoint_path + clip_params = clip_model.load_model_vars('', checkpoint_path) + clip_params = jax.tree_util.tree_map(jnp.float32, clip_params) + return unloc_model_utils.initialize_from_clip_model( + config, + train_state, + clip_params, + load_image_tower=False, + load_text_tower=True, + ) + + +def init_video_text_encoders_from_clip_checkpoint( + config: ml_collections.ConfigDict, + train_state: train_utils.TrainState, + load_image_tower: bool = True, + load_text_tower: bool = True) -> train_utils.TrainState: + """Initializes video+text encoders with a CLIP model.""" + checkpoint_path = config.init_from.checkpoint_path + clip_params = clip_model.load_model_vars('', checkpoint_path) + return unloc_model_utils.initialize_from_clip_model( + config, + train_state, + clip_params, + load_image_tower=load_image_tower, + load_text_tower=load_text_tower, + ) + + +VIDEO_ENCODER_INIT_FN = { + 'clip': init_video_encoder_from_clip_checkpoint, +} +TEXT_ENCODER_INIT_FN = { + 'clip': init_text_encoder_from_clip_checkpoint, +} + + +def initialize_model_with_pytree( + *, + model_def: nn.Module, + input_spec: PyTree, + config: ml_collections.ConfigDict, + rngs: Union[jnp.ndarray, Mapping[str, jnp.ndarray]], +) -> Tuple[PyTree, PyTree, int, Optional[float]]: + """Initializes parameters and model state with a pytree input_spec. + + This function is branched from scenic/train_lib/train_utils.py. Here, the + model function takes two additional args, `task` and `dataset`. + + Args: + model_def: Definition of a model. + input_spec: A PyTree whose leaves are (shape, dtype) pairs specifying the + shape and dtype of the inputs. If unspecified the dtype is float32. + config: Configurations of the initialization. + rngs: Jax rng keys. + + Returns: + Initial params, Init model_state, and number of trainable_params. + """ + batch_size = (config.batch_size // + jax.device_count()) if config.get('batch_size') else None + + def check_leaf_spec(spec: Sequence[PyTree]) -> bool: + return ((len(spec) == 2 and isinstance(spec[0], collections.Sequence) and + all(isinstance(i, int) for i in spec[0]) and + isinstance(spec[1], jnp.dtype)) or + (all(isinstance(i, int) for i in spec[0]))) + + def create_dummy_input(spec: PyTree) -> PyTree: + if isinstance(spec, dict): + return {k: create_dummy_input(v) for k, v in spec.items()} + elif isinstance(spec, collections.Sequence): + if check_leaf_spec(spec): + in_st = debug_utils.input_spec_to_jax_shape_dtype_struct( + spec, batch_size=batch_size) + return jnp.zeros(in_st.shape, in_st.dtype) + else: + return tuple(create_dummy_input(child) for child in spec) + elif spec is None: + return None + else: + raise NotImplementedError('Unsupported spec type.', type(spec)) + + dummy_input = create_dummy_input(input_spec) + + # We want all parameters to be created in host RAM, not on any device, they'll + # be sent there later as needed, otherwise we already encountered two + # situations where we allocate them twice. + @functools.partial(jax.jit, backend='cpu') + def _initialize_model(rngs): + """Initialization function to be jitted.""" + # If dummy_input is a dict, we feed inputs as keyword arguments, otherwise + # feed as position arguments. + if isinstance(dummy_input, dict): + init_model_state, init_params = flax.core.pop( + flax.core.freeze( + model_def.init( + rngs, + **dummy_input, + task=config.dataset_configs.task, + dataset=config.dataset_configs.get('name', ''), + train=False, + debug=False, + ) + ), + 'params', + ) + else: + init_model_state, init_params = flax.core.pop( + flax.core.freeze( + model_def.init( + rngs, + *dummy_input, + task=config.dataset_configs.task, + dataset=config.dataset_configs.get('name', ''), + train=False, + debug=False, + ) + ), + 'params', + ) + return init_params, init_model_state + + if not isinstance(rngs, dict): + rngs = {'params': rngs} + init_params, init_model_state = _initialize_model(rngs) + # Pop out params rng: + rngs.pop('params') + + # Count number of trainable parameters: + num_trainable_params = debug_utils.log_param_shapes(init_params) + + # Count gflops: + count_flops = config.get('count_flops', + ml_collections.ConfigDict({'count_flops': True})) + if count_flops: + variables = {'params': init_params, **init_model_state} + flops = debug_utils.compute_flops_with_pytree( + flax_model_apply_fn=functools.partial( + model_def.apply, + variables, + task=config.dataset_configs.task, + dataset=config.dataset_configs.get('name', ''), + train=False, + debug=False, + rngs=rngs), + input_spec=count_flops.get('input_spec', input_spec), + fuse_multiply_add=count_flops.get('fuse_multiply_add', True)) + gflops = flops / (10**9) + else: + gflops = None + + return init_params, init_model_state, num_trainable_params, gflops + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + task: str, + dataset: str, + flax_model: nn.Module, + loss_fn: LossFn, + lr_fn: LrFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, + Any]]: + """Runs a single step of training. + + This function is branched from scenic/train_lib/classification_trainer.py. + Here, the model function takes two additional args, `task` and `dataset`. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, params, and optimizer. The buffer of this argument can + be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + task: The task name, 'temporal_localization', 'moment_retrieval', + 'highlight_detection' or 'action_segmentation'. + dataset: The dataset name. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + lr_fn: The learning rate fn used for the logging the learning rate. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training and computed metrics and some training logs. + """ + + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch['rgb'] = batch['inputs']['rgb'] + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + input_key='rgb', + rng=mixup_rng) + batch['inputs']['rgb'] = batch.pop('rgb') + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + all_gather_loss = config.get('all_gather_loss', False) + gathered_batch = ( + unloc_eval_utils.all_gather_metrics_inputs(batch) + if all_gather_loss + else None + ) + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + logits = flax_model.apply( + variables, + batch['inputs'], + task=task, + dataset=dataset, + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params']) + return loss, logits + + def training_loss_fn_all_gather(params): + variables = {'params': params, **train_state.model_state} + logits = unloc_eval_utils.run_model_all_gather_results( + variables, + batch, + task, + flax_model, + train=True, + dropout_rng=dropout_rng, + debug=debug, + ) + loss = loss_fn(logits, gathered_batch, params) + return loss, logits + + compute_gradient_fn = jax.value_and_grad( + training_loss_fn_all_gather if all_gather_loss else training_loss_fn, + has_aux=True) + (train_cost, logits), grad = compute_gradient_fn(train_state.params) + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm') is not None: + grad = clip_grads(grad, config.max_grad_norm) + + assert train_state.tx is not None + updates, new_opt_state = train_state.tx.update(grad, train_state.opt_state, + train_state.params) + new_params = optax.apply_updates(train_state.params, updates) + + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)])) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + # TODO(dehghani): Can we get this from the optimizer instead? + training_logs['learning_rate'] = lr_fn(train_state.global_step) + + metrics = metrics_fn(logits, gathered_batch if all_gather_loss else batch) + + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + rng=new_rng) + + return new_train_state, metrics, training_logs diff --git a/scenic/projects/unloc/unloc.png b/scenic/projects/unloc/unloc.png new file mode 100644 index 0000000000000000000000000000000000000000..ff40e0040b2a73741a35ad60dc200ce2a310a893 --- /dev/null +++ b/scenic/projects/unloc/unloc.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce36ac43f6092235f90d9d886a58be91f54960343b90a2e6c9c0ffd9bba8e00a +size 717842 diff --git a/scenic/projects/unloc/video_text_fusion.py b/scenic/projects/unloc/video_text_fusion.py new file mode 100644 index 0000000000000000000000000000000000000000..84529d16b12e7aa7059f76d50462a88e8804028c --- /dev/null +++ b/scenic/projects/unloc/video_text_fusion.py @@ -0,0 +1,819 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Contains video-text fusion modules.""" + +import functools +from typing import Callable, List, Optional, Sequence, Tuple +from absl import logging +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.model_lib.layers import attention_layers +from scenic.projects.baselines import vit +from scenic.projects.unloc import encoders +from scenic.projects.unloc import model_utils + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +def prepend_cls(x: jnp.ndarray, cls: jnp.ndarray) -> jnp.ndarray: + """Prepend a CLS token.""" + assert x.ndim == 3 and cls.ndim == 3 + n, _, _ = x.shape + cls = jnp.tile(cls, [n, 1, 1]) + return jnp.concatenate([cls, x], axis=1) + + +def append_one(input_mask: jnp.ndarray) -> jnp.ndarray: + """Appends ones to the input mask. + + Args: + input_mask: Mask assumed to be of shape [batch, tokens, ...]. + + Returns: + Input mask appended with one in shape [batch, tokens+1, ...]. + """ + return jnp.concatenate( + [input_mask, + jnp.ones((input_mask.shape[0], 1), dtype=input_mask.dtype)], + axis=1) + + +def prepend_one(input_mask: jnp.ndarray) -> jnp.ndarray: + """Prepends ones to the input mask. + + Args: + input_mask: Mask assumed to be of shape [batch, tokens, ...]. + + Returns: + Input mask prepended with one in shape [batch, 1+tokens, ...]. + """ + return jnp.concatenate( + [jnp.ones((input_mask.shape[0], 1), dtype=input_mask.dtype), input_mask], + axis=1) + + +class FeaturePyramidEncoder(nn.Module): + """Transformer feature pyramid encoder. + + Attributes: + num_layers: Number of layers. + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: Number of attention heads. + feature_pyramid_config: Feature pyramid config. + downsample_strategy: Strategy to downsample video tokens. Options are: + 'subsample', 'avg_pool', or 'max_pool'. + positional_embedding: 'learned', 'sinusoid', or 'none'. + positional_embedding_max_length: If set, the positional embeddings/encodings + are applied to the first N elements in the input sequence. If not set, the + positional embeddings/encodings are added to the entire input sequence. + dropout_rate: Dropout rate. + stochastic_depth: probability of dropping a layer linearly grows from 0 to + the provided value. Our implementation of stochastic depth follows the + timm library, which does per-example layer dropping and uses independent + dropping patterns for each skip-connection. + window_size: Window size for window attention blocks. + window_block_indexes: Tuple. Indexes for blocks using window attention. + dtype: Dtype of activations. + """ + num_layers: int + mlp_dim: int + num_heads: int + feature_pyramid_config: ml_collections.ConfigDict + downsample_strategy: str = 'max_pool' + positional_embedding: str = 'learned' + positional_embedding_max_length: Optional[int] = None + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_depth: float = 0.0 + window_size: int = 0 + window_block_indexes: Sequence[int] = (0, 1, 3, 4) + dtype: jnp.dtype = jnp.float32 + + def _add_positional_embedding(self, inputs: jnp.ndarray) -> jnp.ndarray: + """Adds positional embedding.""" + posemb = jnp.zeros_like(inputs) + if self.positional_embedding == 'learned': + posemb = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name='posembed_input')( + posemb) + elif self.positional_embedding == 'sinusoid': + posemb = attention_layers.Add1DPositionEmbedding(posemb_init=None)(posemb) + elif self.positional_embedding == 'none': + logging.info('No positional embedding is used.') + else: + raise ValueError( + f'Invalid positional_embedding: {self.positional_embedding}.') + + if self.positional_embedding_max_length is not None: + max_len = min(inputs.shape[1], self.positional_embedding_max_length) + inputs = inputs.at[:, :max_len].add(posemb[:, :max_len]) + else: + inputs += posemb + return inputs + + def _subsample(self, x: jnp.ndarray, + sampled_indices: np.ndarray) -> jnp.ndarray: + return x[:, sampled_indices] + + def _max_pool(self, x: jnp.ndarray) -> jnp.ndarray: + stride = self.feature_pyramid_config.feature_pyramid_downsample_stride + return nn.max_pool(x, window_shape=(stride,), strides=(stride,)) + + def _avg_pool(self, x: jnp.ndarray) -> jnp.ndarray: + stride = self.feature_pyramid_config.feature_pyramid_downsample_stride + return nn.avg_pool(x, window_shape=(stride,), strides=(stride,)) + + def _strided_depthwise_conv(self, x: jnp.ndarray) -> jnp.ndarray: + stride = self.feature_pyramid_config.feature_pyramid_downsample_stride + return nn.Conv( + features=x.shape[-1], + kernel_size=(3,), + strides=(stride,), + feature_group_count=x.shape[-1], + )(x) + + def _strided_conv(self, x: jnp.ndarray) -> jnp.ndarray: + stride = self.feature_pyramid_config.feature_pyramid_downsample_stride + return nn.Conv(features=x.shape[-1], kernel_size=(3,), strides=(stride,))(x) + + def _downsample_video_tokens(self, x: jnp.ndarray, num_text_tokens: int, + sampled_indices: np.ndarray) -> jnp.ndarray: + """Subsamples video tokens.""" + + downsample_fns = { + 'max_pool': self._max_pool, + 'avg_pool': self._avg_pool, + 'strided_depthwise_conv': self._strided_depthwise_conv, + 'strided_conv': self._strided_conv, + 'subsample': functools.partial( + self._subsample, sampled_indices=sampled_indices + ), + } + if num_text_tokens > 0: + text_tokens = x[:, -num_text_tokens:] + y = downsample_fns[self.downsample_strategy](x[:, :-num_text_tokens]) + x = jnp.concatenate([y, text_tokens], axis=1) + else: + x = downsample_fns[self.downsample_strategy](x) + return x + + def _build_top_down_path(self, xs: List[jnp.ndarray]) -> List[jnp.ndarray]: + """Pass information from top level to bottom in a feature pyramid.""" + + for idx in range(len(xs) - 1, 0, -1): + x = jax.image.resize( + xs[idx], xs[idx - 1].shape, method='nearest', antialias=False) + xs[idx - 1] += x + return xs + + def _apply_output_conv(self, xs: List[jnp.ndarray]) -> List[jnp.ndarray]: + """Apply depthwise convolutions and layer norm.""" + for idx, x in enumerate(xs): + # Depthwise convolution. + y = nn.Conv( + features=x.shape[-1], + kernel_size=(3,), + feature_group_count=x.shape[-1], + name=f'output_conv_{idx}')( + x) + xs[idx] = nn.LayerNorm(name=f'output_ln_{idx}')(y) + return xs + + @nn.compact + def __call__(self, + inputs: jnp.ndarray, + input_mask: Optional[jnp.ndarray] = None, + train: bool = False): + """Applies Transformer model on the inputs.""" + + num_pyramid_levels = len(self.feature_pyramid_config.feature_pyramid_levels) + assert self.num_layers >= num_pyramid_levels + assert inputs.ndim == 3 # Shape is `[batch, len, emb]`. + dtype = jax.dtypes.canonicalize_dtype(self.dtype) + x = self._add_positional_embedding(inputs) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + num_text_tokens = ( + inputs.shape[1] - self.feature_pyramid_config.num_features_level0) + if input_mask is not None: + input_mask_per_level = model_utils.create_pyramid_input_masks( + input_mask, + num_features_level0=self.feature_pyramid_config.num_features_level0, + num_pyramid_levels=num_pyramid_levels, + feature_pyramid_downsample_stride=self.feature_pyramid_config + .feature_pyramid_downsample_stride, + num_text_tokens=num_text_tokens) + else: + input_mask_per_level = [None] * num_pyramid_levels + + cur_pyramid_level = 0 + xs = [] + for lyr in range(self.num_layers): + x = encoders.TransformerEncoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=(lyr / max(self.num_layers - 1, 1)) + * self.stochastic_depth, + name=f'encoderblock_{lyr}', + dtype=dtype, + )( + x, + input_mask=input_mask_per_level[cur_pyramid_level], + deterministic=not train, + ) + if lyr in self.feature_pyramid_config.feature_pyramid_levels: + # Convolution only applies to video tokens. + if num_text_tokens: + xs.append(x[:, :-num_text_tokens]) + else: + xs.append(x) + cur_pyramid_level += 1 + if (self.feature_pyramid_config.feature_pyramid_downsample_stride > 1 + and lyr < self.num_layers - 1): + sampled_indices = np.arange( + 0, + self.feature_pyramid_config.num_features_level0, + self.feature_pyramid_config.feature_pyramid_downsample_stride** + cur_pyramid_level, + dtype=np.int32) + x = self._downsample_video_tokens( + x, num_text_tokens, sampled_indices=sampled_indices) + if num_text_tokens: + text_tokens = x[:, -num_text_tokens:] + else: + # No text tokens. + text_tokens = x[:, :0] + xs = self._build_top_down_path(xs) + xs = self._apply_output_conv(xs) + xs.append(text_tokens) + return jnp.concatenate(xs, axis=1) + + +class SimplePyramidEncoder(FeaturePyramidEncoder): + """A simple pyramid transformer encoder. + + This structure is inspired by ViTDet (https://arxiv.org/abs/2203.16527). The + feature pyramid is built using the output from the last layer in the encoder + and downsampling is performed via strided depthwise convolution. This simple + design allows us to share the same architecture as the one used in + classification task. + """ + + @nn.compact + def __call__( + self, + inputs: jnp.ndarray, + input_mask: Optional[jnp.ndarray] = None, + train: bool = False, + ): + """Applies Transformer model on the inputs.""" + + num_pyramid_levels = len(self.feature_pyramid_config.feature_pyramid_levels) + assert self.num_layers >= num_pyramid_levels + assert inputs.ndim == 3 # Shape is `[batch, len, emb]`. + dtype = jax.dtypes.canonicalize_dtype(self.dtype) + x = self._add_positional_embedding(inputs) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + num_text_tokens = ( + inputs.shape[1] - self.feature_pyramid_config.num_features_level0 + ) + if input_mask is not None: + input_mask_per_level = model_utils.create_pyramid_input_masks( + input_mask, + num_features_level0=self.feature_pyramid_config.num_features_level0, + num_pyramid_levels=num_pyramid_levels, + feature_pyramid_downsample_stride=( + self.feature_pyramid_config.feature_pyramid_downsample_stride + ), + num_text_tokens=num_text_tokens, + ) + # No downsampling is done in the encoder. + input_mask = input_mask_per_level[0] + + for lyr in range(self.num_layers): + x = encoders.TransformerEncoder1DBlock( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_depth=(lyr / max(self.num_layers - 1, 1)) + * self.stochastic_depth, + name=f'encoderblock_{lyr}', + dtype=dtype, + )( + x, + input_mask=input_mask, + deterministic=not train, + ) + if num_text_tokens: + text_tokens = x[:, -num_text_tokens:] + else: + # No text tokens. + text_tokens = x[:, :0] + # Convolution only applies to video tokens. + x = x[:, : self.feature_pyramid_config.num_features_level0] + xs = [] + for lyr in range(num_pyramid_levels): + stride = ( + 1 + if lyr == 0 + else self.feature_pyramid_config.feature_pyramid_downsample_stride + ) + x = nn.Conv( + features=x.shape[-1], + kernel_size=(3,), + strides=(stride,), + feature_group_count=x.shape[-1], # Depthwise convolution + name=f'output_conv_{lyr}', + )(x) + x = nn.LayerNorm(name=f'output_ln_{lyr}')(x) + xs.append(x) + xs.append(text_tokens) + return jnp.concatenate(xs, axis=1) + + +_VIDEO_TEXT_ENCODER = { + 'transformer': encoders.TransformerEncoder, + 'fpn': FeaturePyramidEncoder, + 'simple_pyramid': SimplePyramidEncoder, +} + + +class VideoTextEmbSelfAttentionFusion(nn.Module): + """Implements video-text fusion by self attention. + + We append the text CLS token to the video tokens and then feed the + concatenated sequence into a Transformer. + + Attributes: + self_attention_encoder_config: The config of the self attention encoder. + self_attention_encoder_name: The type of self attention encoder. + """ + + self_attention_encoder_config: ml_collections.ConfigDict + self_attention_encoder_name: str = 'transformer' # or 'fpn' + + def _self_attention_encode_per_text_emb( + self, video_tokens: jnp.ndarray, video_input_mask: jnp.ndarray, + text_emb: jnp.ndarray, encoder: nn.Module, task: str, + train: bool) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Fuses video and one text embedding via self attention. + + Args: + video_tokens: A 3D float tensor of shape (batch_size, sequence_length, + channels) representing the video tokens. + video_input_mask: A 2D binary tensor of shape (batch_size, + sequence_length). + text_emb: A 1D float tensor of shape (channels,) representing the text + embedding. + encoder: The Transformer encoder. + task: 'action_segmentation', 'temporal_localization', or + 'moment_retrieval'. + train: Whether or not the model is under training. + + Returns: + Video tokens in shape (batch size, sequence_length, channels) and text + token in shape (batch_size, channels). + """ + assert task in { + 'action_segmentation', + 'moment_retrieval', + 'temporal_localization', + } + tiled_text_emb = jnp.tile(text_emb[None, None, :], + [video_tokens.shape[0], 1, 1]) + tokens = jnp.concatenate([ + video_tokens, + tiled_text_emb, + ], axis=1) + feature_pyramid_config = self.self_attention_encoder_config.get( + 'feature_pyramid_config') + if feature_pyramid_config is None: + video_input_masks = [video_input_mask] + else: + video_input_masks = model_utils.create_pyramid_input_masks( + video_input_mask, + num_features_level0=feature_pyramid_config.num_features_level0, + num_pyramid_levels=len(feature_pyramid_config.feature_pyramid_levels), + feature_pyramid_downsample_stride=feature_pyramid_config + .feature_pyramid_downsample_stride, + num_text_tokens=0) + input_mask = model_utils.merge_pyramid_input_masks( + video_input_masks, + input_text_mask=jnp.ones((video_tokens.shape[0], 1), dtype=jnp.int32)) + tokens = encoder(tokens, input_mask=input_mask, train=train) + return tokens[:, :-1], tokens[:, -1] + + @nn.compact + def __call__(self, + video_tokens: jnp.ndarray, + text_embs: jnp.ndarray, + task: str, + input_word_ids: Optional[jnp.ndarray] = None, + text_input_mask: Optional[jnp.ndarray] = None, + video_input_mask: Optional[jnp.ndarray] = None, + train: bool = False) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Fuses video text by self attention. + + Args: + video_tokens: A 3D float tensor of shape (batch_size, sequence_length, + channels) representing the video tokens. + text_embs: A 2D float tensor of shape (num_classes or batch_size * + max_num_captions, channels) representing the text CLS token for each + class. The first dimension is batch_size * max_num_captions if task = + `moment_retrieval`. Otherwise, it is num_classes. + task: 'action_segmentation', 'temporal_localization', + 'highlight_detection', or 'moment_retrieval'. + input_word_ids: None. + text_input_mask: None. + video_input_mask: None or a 2D binary tensor of shape (batch_size, + sequence_length). + train: Whether or not it is in training. + + Returns: + A 4D float tensor of shape (batch_size, batch_size * max_num_captions, + sequence_length, channels) representing the pre_logits for each class if + task = `moment_retrieval`. + + A 4D float tensor of shape (batch_size, num_classes, sequence_length, + channels) representing the pre_logits for each class if task is + `temporal_localization`. + + Video tokens in shape (batch_size, sequence_length, num_classes, + channels) and text tokens in shape (batch_size, num_classes, channels) if + task is `action_segmentation`. + """ + encoder = _VIDEO_TEXT_ENCODER[self.self_attention_encoder_name]( + name='video_text_encoder', **self.self_attention_encoder_config) + if video_input_mask is None: + feature_pyramid_config = self.self_attention_encoder_config.get( + 'feature_pyramid_config') + if feature_pyramid_config is None: + video_input_mask = jnp.ones(video_tokens.shape[:2], dtype=jnp.int32) + else: + feature_pyramid_levels = feature_pyramid_config.feature_pyramid_levels + num_features_level0 = feature_pyramid_config.num_features_level0 + feature_pyramid_downsample_stride = ( + feature_pyramid_config.feature_pyramid_downsample_stride + ) + fpn_video_token_len = sum([ + num_features_level0 // (feature_pyramid_downsample_stride**idx) + for idx in range(len(feature_pyramid_levels)) + ]) + video_input_mask = jnp.ones( + (video_tokens.shape[0], fpn_video_token_len), dtype=jnp.int32) + video_tokens, text_embs = jax.vmap( + functools.partial( + self._self_attention_encode_per_text_emb, + encoder=encoder, + task=task, + train=train, + ), + in_axes=[None, None, 0], + )(video_tokens, video_input_mask, text_embs) + if task == 'temporal_localization': + # Converts video_tokens from (num_classes, batch_size, num_frames, + # channels) to (batch_size, num_classes, num_frames, channels). + return ( + jnp.transpose(video_tokens, [1, 0, 2, 3]), + jnp.transpose(text_embs, [1, 0, 2]), + ) + elif task == 'action_segmentation': + # Converts video_tokens from (num_classes, batch_size, num_frames, + # channels) to (batch_size, num_frames, num_classes, channels). + return ( + jnp.transpose(video_tokens, [1, 2, 0, 3]), + jnp.transpose(text_embs, [1, 0, 2]), + ) + elif task == 'moment_retrieval': + # Converts video_toekns from (batch_size * max_num_captions, batch_size, + # num_frames, channels) to (batch_size, batch_size * max_num_captions, + # num_frames, channels). + return ( + jnp.transpose(video_tokens, [1, 0, 2, 3]), + jnp.transpose(text_embs, [1, 0, 2]), + ) + else: + raise ValueError(f'Unexpected task `{task}`.') + + +class VideoTextSelfAttentionFusion(nn.Module): + """Implements video-text fusion by self attention. + + We concatenate all text tokens (or only the CLS token) with video tokens and + then feed the concatenated sequence into a Transformer. + + Attributes: + text_tower_classifier: 'token' (take the first token), 'eos' (take the last + token). + self_attention_encoder_config: The config of the self attention encoder. + use_all_text_tokens: Whether or not to fuse with all text tokens. If False, + we only fuse with the text CLS token. + """ + + text_tower_classifier: str + self_attention_encoder_config: ml_collections.ConfigDict + use_all_text_tokens: bool + self_attention_encoder_name: str = 'transformer' # or 'fpn' + + def _self_attention_encode_all_video_text_pairs( + self, + video_tokens: jnp.ndarray, + video_input_mask: jnp.ndarray, + text_tokens: jnp.ndarray, + input_word_ids: jnp.ndarray, + text_input_mask: jnp.ndarray, + encoder: nn.Module, + train: bool, + ) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Fuses all video-text pairs via self attention. + + Args: + video_tokens: A 3D float tensor of shape (batch_size, sequence_length, + channels) representing the video tokens. + video_input_mask: A 2D binary tensor of shape (batch_size, + sequence_length). + text_tokens: A 3D float tensor of shape (batch_size, sequence_length, + channels) representing the text tokens. + input_word_ids: A 2D int tensor of shape (batch_size, sequence_length) + representing the input word indices. + text_input_mask: A 2D binary tensor of shape (batch_size, sequence_length) + representing the mask of the text inputs. + encoder: The Transformer encoder. + train: Whether or not the model is under training. + + Returns: + video_tokens: A 4D float tensor of shape (batch size, 1, sequence_length, + channels) representing the fused frame embedding. + text_emb: a 3D float tensor of shape (batch_size, 1, channels) + representing the text CLS token. + """ + + feature_pyramid_config = self.self_attention_encoder_config.get( + 'feature_pyramid_config' + ) + if feature_pyramid_config is None: + video_input_masks = [video_input_mask] + else: + video_input_masks = model_utils.create_pyramid_input_masks( + video_input_mask, + num_features_level0=feature_pyramid_config.num_features_level0, + num_pyramid_levels=len(feature_pyramid_config.feature_pyramid_levels), + feature_pyramid_downsample_stride=feature_pyramid_config.feature_pyramid_downsample_stride, + num_text_tokens=0, + ) + if self.use_all_text_tokens: + tokens = jnp.concatenate([video_tokens, text_tokens], axis=1) + input_mask = model_utils.merge_pyramid_input_masks( + video_input_masks, input_text_mask=text_input_mask + ) + num_text_tokens = text_tokens.shape[1] + else: + tokens = jnp.concatenate( + [ + video_tokens, + model_utils.extract_emb( + text_tokens, + self.text_tower_classifier, + keepdims=True, + input_mask=text_input_mask, + input_word_ids=input_word_ids, + ), + ], + axis=1, + ) + input_mask = model_utils.merge_pyramid_input_masks( + video_input_masks, + input_text_mask=jnp.ones((video_tokens.shape[0], 1), dtype=jnp.int32), + ) + num_text_tokens = 1 + + tokens = encoder(tokens, input_mask=input_mask, train=train) + if self.use_all_text_tokens: + text_emb = model_utils.extract_emb( + tokens[:, -num_text_tokens:], + self.text_tower_classifier, + keepdims=False, + input_mask=text_input_mask, + input_word_ids=input_word_ids, + ) + else: + text_emb = tokens[:, -1] + video_tokens = tokens[:, :-num_text_tokens] + return ( + jnp.expand_dims(video_tokens, axis=1), + jnp.expand_dims(text_emb, axis=1), + ) + + def _self_attention_encode_per_text( + self, video_tokens: jnp.ndarray, video_input_mask: jnp.ndarray, + text_tokens: jnp.ndarray, input_word_ids: jnp.ndarray, + text_input_mask: jnp.ndarray, encoder: nn.Module, task: str, + train: bool) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Fuses video and text tokens per class via self attention. + + Args: + video_tokens: A 3D float tensor of shape (batch_size, sequence_length, + channels) representing the video tokens. + video_input_mask: A 2D binary tensor of shape (batch_size, + sequence_length). + text_tokens: A 2D float tensor of shape (sequence_length, channels) + representing the text tokens. + input_word_ids: A 1D int tensor of shape (sequence_length) representing + the input word indices. + text_input_mask: A 1D binary tensor of shape (sequence_length) + representing the mask of the text inputs. + encoder: The Transformer encoder. + task: 'action_segmentation', 'moment_retrieval', 'highlight_detection', or + 'temporal_localization'. + train: Whether or not the model is under training. + + Returns: + video_tokens: A 3D float tensor of shape (batch size, sequence_length, + channels) representing the fused frame embedding. + text_emb: A 2D float tensor of shape (batch_size, channels) representing + the text CLS token. + """ + tiled_text_tokens = jnp.tile( + jnp.expand_dims(text_tokens, axis=0), [video_tokens.shape[0], 1, 1]) + tiled_text_mask = jnp.tile( + jnp.expand_dims(text_input_mask, axis=0), [video_tokens.shape[0], 1]) + tiled_input_word_ids = jnp.tile( + jnp.expand_dims(input_word_ids, axis=0), [video_tokens.shape[0], 1]) + feature_pyramid_config = self.self_attention_encoder_config.get( + 'feature_pyramid_config') + if feature_pyramid_config is None: + video_input_masks = [video_input_mask] + else: + video_input_masks = model_utils.create_pyramid_input_masks( + video_input_mask, + num_features_level0=feature_pyramid_config.num_features_level0, + num_pyramid_levels=len(feature_pyramid_config.feature_pyramid_levels), + feature_pyramid_downsample_stride=feature_pyramid_config + .feature_pyramid_downsample_stride, + num_text_tokens=0) + if self.use_all_text_tokens: + tokens = jnp.concatenate([video_tokens, tiled_text_tokens], axis=1) + input_mask = model_utils.merge_pyramid_input_masks( + video_input_masks, + input_text_mask=tiled_text_mask) + num_text_tokens = text_tokens.shape[0] + else: + tokens = jnp.concatenate([ + video_tokens, + model_utils.extract_emb( + tiled_text_tokens, + self.text_tower_classifier, + keepdims=True, + input_mask=tiled_text_mask, + input_word_ids=tiled_input_word_ids) + ], + axis=1) + input_mask = model_utils.merge_pyramid_input_masks( + video_input_masks, + input_text_mask=jnp.ones((video_tokens.shape[0], 1), dtype=jnp.int32)) + num_text_tokens = 1 + + tokens = encoder(tokens, input_mask=input_mask, train=train) + if self.use_all_text_tokens: + text_emb = model_utils.extract_emb( + tokens[:, -num_text_tokens:], + self.text_tower_classifier, + keepdims=False, + input_mask=tiled_text_mask, + input_word_ids=tiled_input_word_ids) + else: + text_emb = tokens[:, -1] + if task in { + 'action_segmentation', + 'temporal_localization', + 'moment_retrieval', + }: + return tokens[:, :-num_text_tokens], text_emb + else: + raise ValueError(f'Unexpected task `{task}`.') + + @nn.compact + def __call__(self, + video_tokens: jnp.ndarray, + text_tokens: jnp.ndarray, + task: str, + input_word_ids: Optional[jnp.ndarray] = None, + text_input_mask: Optional[jnp.ndarray] = None, + video_input_mask: Optional[jnp.ndarray] = None, + train: bool = False) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Executes video-text fusion by self attention. + + Args: + video_tokens: A 3D float tensor of shape (batch_size, sequence_length, + channels) representing the video tokens. + text_tokens: A 3D float tensor of shape (num_texts, sequence_length, + channels) representing the text tokens. The first dimension is + batch_size * max_num_captions if task = `moment_retrieval`. Otherwise, + it is num_classes. + task: 'action_segmentation', 'temporal_localization', 'moment_retrieval' + or 'highlight_detection. + input_word_ids: A 2D int tensor of shape (num_texts, sequence_length) + representing the input word indices. This arg is used to find EOS id. + text_input_mask: A 2D binary tensor of shape (num_texts, sequence_length) + representing the mask of the text inputs. + video_input_mask: A 2D binary tensor of shape (batch_size, + sequence_length) representing the mask of the video inputs. + train: Whether or not it is in training. + + Returns: + video_tokens: + A 4D float tensor of shape (batch_size, num_classes, sequence_length, + channels) representing the fused tokens for each class if task is + 'temporal_localization'. + + A 4D float tensor of shape (batch_size, 1, sequence_length, channels) + representing the fused frame tokens if task is 'highlight_detection'. + + A 3D float tensor of shape (batch_size, sequence_length, num_classes) + representing the fused tokens for each class if task is + 'action_segmentation'. + + A 4D float tensor of shape (batch_size, batch_size * max_num_captions, + sequence_length, channels) representing the fused tokens for each class + if task = 'moment_retrieval'. + text_tokens: + Not used. A 3D float tensor of shape (batch_size, num_texts, channels) + representing the text CLS token for each class. The second dimension is + batch_size * max_num_captions if task = `moment_retrieval`. Otherwise, + it is num_classes. + """ + + encoder = _VIDEO_TEXT_ENCODER[self.self_attention_encoder_name]( + name='video_text_encoder', **self.self_attention_encoder_config) + if video_input_mask is None: + video_input_mask = jnp.ones(video_tokens.shape[:2], dtype=jnp.int32) + if task == 'highlight_detection': + return self._self_attention_encode_all_video_text_pairs( + video_tokens, + video_input_mask, + text_tokens, + input_word_ids, + text_input_mask, + encoder, + train, + ) + + video_tokens, text_tokens = jax.vmap( + functools.partial( + self._self_attention_encode_per_text, + encoder=encoder, + task=task, + train=train, + ), + in_axes=[None, None, 0, 0, 0], + )( + video_tokens, + video_input_mask, + text_tokens, + input_word_ids, + text_input_mask, + ) + if task == 'temporal_localization': + # Convert video_tokens from (num_classes, batch_size, num_frames, + # channels) to (batch_size, num_classes, num_frames, channels). + return (jnp.transpose(video_tokens, [1, 0, 2, 3]), + jnp.transpose(text_tokens, [1, 0, 2])) + elif task == 'action_segmentation': + # Convert video_tokens from (num_classes, batch_size, num_frames, + # channels) to (batch_size, num_frames, num_classes, channels). + return (jnp.transpose(video_tokens, [1, 2, 0, 3]), + jnp.transpose(text_tokens, [1, 0, 2])) + elif task == 'moment_retrieval': + # Convert video_tokens from (batch_size * max_num_captions, batch_size, + # num_frames, channels) to (batch_size, batch_size * max_num_captions, + # num_frames, channels). + return (jnp.transpose(video_tokens, [1, 0, 2, 3]), + jnp.transpose(text_tokens, [1, 0, 2])) + else: + raise ValueError(f'Unexpected task `{task}`.') + + +FUSION_MODELS = { + 'video_text_emb_self_attention': VideoTextEmbSelfAttentionFusion, + 'video_text_self_attention': VideoTextSelfAttentionFusion, +} diff --git a/scenic/projects/unloc/video_text_fusion_test.py b/scenic/projects/unloc/video_text_fusion_test.py new file mode 100644 index 0000000000000000000000000000000000000000..ce7a1b2c512469104b53e3743f4ecee92e52e418 --- /dev/null +++ b/scenic/projects/unloc/video_text_fusion_test.py @@ -0,0 +1,340 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for video_text_fusion.""" + +from absl.testing import parameterized +from jax import random +import ml_collections +import numpy as np +from scenic.projects.unloc import video_text_fusion +import tensorflow as tf + + +class LayersTest(tf.test.TestCase, parameterized.TestCase): + + @parameterized.parameters( + ('moment_retrieval', None, (2, 2, 8, 16), (2, 2, 16)), + ('temporal_localization', None, (2, 4, 8, 16), (2, 4, 16)), + ( + 'temporal_localization', + np.ones((2, 8), dtype=np.int32), + (2, 4, 8, 16), + (2, 4, 16), + ), + ( + 'action_segmentation', + np.ones((2, 8), dtype=np.int32), + (2, 8, 4, 16), + (2, 4, 16), + ), + ) + def test_video_text_emb_self_attention_fusion( + self, task, video_input_mask, expected_video_shape, expected_text_shape + ): + video_tokens = np.ones((2, 8, 16), dtype=np.float32) + text_embs = ( + np.ones((2, 16), np.float32) if task == 'moment_retrieval' else np.ones( + (4, 16), np.float32)) + config = ml_collections.ConfigDict({ + 'num_heads': 2, + 'mlp_dim': 32, + 'num_layers': 2, + 'dropout_rate': 0.0, + 'attention_dropout_rate': 0.0, + 'stochastic_depth': 0.0, + }) + rng = random.PRNGKey(0) + ( + actual_video_tokens, + actual_text_tokens, + ), _ = video_text_fusion.VideoTextEmbSelfAttentionFusion( + self_attention_encoder_config=config + ).init_with_output( + rng, + video_tokens, + text_embs, + video_input_mask=video_input_mask, + task=task, + ) + self.assertTupleEqual(actual_video_tokens.shape, expected_video_shape) + self.assertTupleEqual(actual_text_tokens.shape, expected_text_shape) + + @parameterized.parameters( + ('temporal_localization', (2, 4, 12, 16), (2, 4, 16)), + ('moment_retrieval', (2, 2, 12, 16), (2, 2, 16)), + ) + def test_video_text_emb_self_attention_fusion_fpn(self, task, + expected_video_shape, + expected_text_shape): + batch_size = 2 + num_classes = 4 + video_seq = 8 + video_tokens = np.ones((batch_size, video_seq, 16), dtype=np.float32) + if task == 'moment_retrieval': + text_tokens = np.ones((batch_size, 16), np.float32) + else: + text_tokens = np.ones((num_classes, 16), np.float32) + video_input_mask = np.ones((batch_size, video_seq + video_seq // 2), + np.int32) + config = ml_collections.ConfigDict({ + 'num_heads': + 2, + 'mlp_dim': + 32, + 'num_layers': + 3, + 'dropout_rate': + 0.0, + 'attention_dropout_rate': + 0.0, + 'stochastic_depth': + 0.0, + 'feature_pyramid_config': + ml_collections.ConfigDict({ + 'num_features_level0': 8, + 'feature_pyramid_levels': [1, 2], + 'feature_pyramid_downsample_stride': 2, + }) + }) + rng = random.PRNGKey(0) + (actual_video_tokens, actual_text_tokens), _ = ( + video_text_fusion.VideoTextEmbSelfAttentionFusion( + self_attention_encoder_name='fpn', + self_attention_encoder_config=config, + ).init_with_output( + rng, video_tokens, text_tokens, task, video_input_mask + ) + ) + self.assertTupleEqual(actual_video_tokens.shape, expected_video_shape) + self.assertTupleEqual(actual_text_tokens.shape, expected_text_shape) + + @parameterized.parameters( + (False, 'moment_retrieval', (2, 2, 8, 16), (2, 2, 16)), + (False, 'highlight_detection', (2, 1, 8, 16), (2, 1, 16)), + (True, 'highlight_detection', (2, 1, 8, 16), (2, 1, 16)), + (False, 'temporal_localization', (2, 4, 8, 16), (2, 4, 16)), + (False, 'action_segmentation', (2, 8, 4, 16), (2, 4, 16)), + ) + def test_video_text_self_attention_fusion( + self, + use_all_text_tokens, + task, + expected_video_shape, + expected_text_shape, + ): + video_tokens = np.ones((2, 8, 16), dtype=np.float32) + if task == 'moment_retrieval': + text_tokens = np.ones((2, 8, 16), np.float32) + input_word_ids = np.ones((2, 8), np.int32) + input_mask = np.ones((2, 8), np.int32) + elif task == 'highlight_detection': + text_tokens = np.ones((2, 16, 16), np.float32) + input_word_ids = np.ones((2, 16), np.int32) + input_mask = np.ones((2, 16), np.int32) + else: + text_tokens = np.ones((4, 8, 16), np.float32) + input_word_ids = np.ones((4, 8), np.int32) + input_mask = np.ones((4, 8), np.int32) + config = ml_collections.ConfigDict({ + 'num_heads': 2, + 'mlp_dim': 32, + 'num_layers': 2, + 'dropout_rate': 0.0, + 'attention_dropout_rate': 0.0, + 'stochastic_depth': 0.0, + }) + rng = random.PRNGKey(0) + ( + actual_video_tokens, + actual_text_tokens, + ), _ = video_text_fusion.VideoTextSelfAttentionFusion( + text_tower_classifier='eos', + self_attention_encoder_name='transformer', + self_attention_encoder_config=config, + use_all_text_tokens=use_all_text_tokens, + ).init_with_output( + rng, video_tokens, text_tokens, task, input_word_ids, input_mask + ) + self.assertTupleEqual(actual_video_tokens.shape, expected_video_shape) + self.assertTupleEqual(actual_text_tokens.shape, expected_text_shape) + + @parameterized.parameters( + ('temporal_localization', (2, 4, 12, 16), (2, 4, 16)), + ('moment_retrieval', (2, 2, 12, 16), (2, 2, 16)), + ('highlight_detection', (2, 1, 12, 16), (2, 1, 16)), + ) + def test_video_text_self_attention_fusion_fpn(self, task, + expected_video_shape, + expected_text_shape): + batch_size = 2 + num_classes = 4 + video_seq = 8 + text_seq = 10 + video_tokens = np.ones((batch_size, video_seq, 16), dtype=np.float32) + if task == 'moment_retrieval' or task == 'highlight_detection': + text_tokens = np.ones((batch_size, text_seq, 16), np.float32) + input_word_ids = np.ones((batch_size, text_seq), np.int32) + text_input_mask = np.ones((batch_size, text_seq), np.int32) + else: + text_tokens = np.ones((num_classes, text_seq, 16), np.float32) + input_word_ids = np.ones((num_classes, text_seq), np.int32) + text_input_mask = np.ones((num_classes, text_seq), np.int32) + video_input_mask = np.ones((batch_size, video_seq + video_seq // 2), + np.int32) + config = ml_collections.ConfigDict({ + 'num_heads': + 2, + 'mlp_dim': + 32, + 'num_layers': + 3, + 'dropout_rate': + 0.0, + 'attention_dropout_rate': + 0.0, + 'stochastic_depth': + 0.0, + 'feature_pyramid_config': + ml_collections.ConfigDict({ + 'num_features_level0': 8, + 'feature_pyramid_levels': [1, 2], + 'feature_pyramid_downsample_stride': 2, + }) + }) + rng = random.PRNGKey(0) + ( + actual_video_tokens, + actual_text_tokens, + ), _ = video_text_fusion.VideoTextSelfAttentionFusion( + text_tower_classifier='eos', + self_attention_encoder_name='fpn', + self_attention_encoder_config=config, + use_all_text_tokens=False, + ).init_with_output( + rng, + video_tokens, + text_tokens, + task, + input_word_ids, + text_input_mask, + video_input_mask, + ) + self.assertTupleEqual(actual_video_tokens.shape, expected_video_shape) + self.assertTupleEqual(actual_text_tokens.shape, expected_text_shape) + + @parameterized.parameters( + (None, 0, (0, 1, 2, 3)), + (None, 3, (0, 1, 2)), + (np.ones((2, 8 + 4), np.float32), 0, (0, 1, 2),), + (np.ones((2, 8 + 4), np.float32), 3, (0, 1, 2),), + ) + def test_feature_pyramid_encoder_no_text_token( + self, input_mask, window_size, window_block_indexes + ): + rng = random.PRNGKey(0) + x = np.ones((2, 8, 8), dtype=np.float32) + output, params = video_text_fusion.FeaturePyramidEncoder( + num_layers=4, + mlp_dim=16, + num_heads=2, + window_size=window_size, + window_block_indexes=window_block_indexes, + feature_pyramid_config=ml_collections.ConfigDict({ + 'num_features_level0': 8, + 'feature_pyramid_levels': [2, 3], + 'feature_pyramid_downsample_stride': 2, + }), + ).init_with_output(rng, x, input_mask, train=False) + self.assertTupleEqual(output.shape, (2, 12, 8)) + self.assertSetEqual( + set(params['params'].keys()), { + 'posembed_input', 'encoderblock_0', 'encoderblock_1', + 'encoderblock_2', 'encoderblock_3', 'output_conv_0', + 'output_conv_1', 'output_ln_0', 'output_ln_1' + }) + + @parameterized.parameters( + (None, 3, (0, 1, 2)), + (np.ones((2, 8 + 1 + 4 + 1 + 2 + 1), np.float32), 0, (0, 1, 2),), + (np.ones((2, 8 + 1 + 4 + 1 + 2 + 1), np.float32), 3, (0, 1, 2),), + ) + def test_feature_pyramid_encoder_w_text_token( + self, input_mask, window_size, window_block_indexes + ): + rng = random.PRNGKey(0) + x = np.ones((2, 8 + 1, 8), dtype=np.float32) + output, params = video_text_fusion.FeaturePyramidEncoder( + num_layers=4, + mlp_dim=16, + num_heads=2, + window_size=window_size, + window_block_indexes=window_block_indexes, + feature_pyramid_config=ml_collections.ConfigDict({ + 'num_features_level0': 8, + 'feature_pyramid_levels': [1, 2, 3], + 'feature_pyramid_downsample_stride': 2, + }), + ).init_with_output(rng, x, input_mask, train=False) + self.assertTupleEqual(output.shape, (2, 14 + 1, 8)) + self.assertSetEqual( + set(params['params'].keys()), { + 'posembed_input', 'encoderblock_0', 'encoderblock_1', + 'encoderblock_2', 'encoderblock_3', 'output_conv_0', + 'output_conv_1', 'output_conv_2', 'output_ln_0', 'output_ln_1', + 'output_ln_2' + }) + + @parameterized.parameters( + (None, 3, (0, 1, 2)), + (np.ones((2, 8 + 1 + 4 + 1 + 2 + 1), np.float32), 0, (0, 1, 2),), + (np.ones((2, 8 + 1 + 4 + 1 + 2 + 1), np.float32), 3, (0, 1, 2),), + ) + def test_simple_pyramid_encoder_w_text_token( + self, input_mask, window_size, window_block_indexes + ): + rng = random.PRNGKey(0) + x = np.ones((2, 8 + 1, 8), dtype=np.float32) + output, params = video_text_fusion.SimplePyramidEncoder( + num_layers=4, + mlp_dim=16, + num_heads=2, + window_size=window_size, + window_block_indexes=window_block_indexes, + feature_pyramid_config=ml_collections.ConfigDict({ + 'num_features_level0': 8, + 'feature_pyramid_levels': [1, 2, 3], + 'feature_pyramid_downsample_stride': 2, + }), + ).init_with_output(rng, x, input_mask, train=False) + self.assertTupleEqual(output.shape, (2, 14 + 1, 8)) + self.assertSetEqual( + set(params['params'].keys()), + { + 'posembed_input', + 'encoderblock_0', + 'encoderblock_1', + 'encoderblock_2', + 'encoderblock_3', + 'output_conv_0', + 'output_conv_1', + 'output_conv_2', + 'output_ln_0', + 'output_ln_1', + 'output_ln_2', + }, + ) + +if __name__ == '__main__': + tf.test.main() diff --git a/scenic/projects/verbs_in_action/README.md b/scenic/projects/verbs_in_action/README.md new file mode 100644 index 0000000000000000000000000000000000000000..cfc2a1154d9ba716a27f6befa79b6fec9a21be88 --- /dev/null +++ b/scenic/projects/verbs_in_action/README.md @@ -0,0 +1,74 @@ +# Verbs in Action: Improving verb understanding in video-language models + +JAX implementation for Verb-Focused Contrastive (VFC) learning of video-text models. +For details, see [`arXiv`](https://arxiv.org/abs/2304.06708). + + + + +## Training +Like other projects in Scenic, all model parameters, training sets and datasets are specified using [configuration files](configs). + +An example command-line to train our Verb-Focused Contrastive (VFC) pre-training on the Spoken Moments in Time dataset using this [config file](configs/vfc.py) is: + +```shell +$ python -m scenic.projects.verbs_in_action.main \ + --config=scenic/projects/verbs_in_action/configs/vfc.py \ + --workdir=verb_focused_contrastive/ +``` + +Likewise, you can train a baseline model on the Spoken Moments in Time dataset. Oue baseline is a standard contrastive video-text model and corresponds to the run coined as `Baseline` for example in tables 2, 3 or 6 of our paper. +We follow this [config file](configs/baseline.py) and run: + +```shell +$ python -m scenic.projects.verbs_in_action.main \ + --config=scenic/projects/verbs_in_action/configs/baseline.py \ + --workdir=baseline_contrastive/ +``` + + +## Model Zoo + + + + + + + + + + + + + + + + + + + + + + + +
NameVerb Human MC (acc)Kinetics-400 (top1)downloadconfig
VFC80.558.8checkpointconfig
Baseline69.955.6checkpointconfig
+ +Note that we are not planning to open-source the PaLM generated captions of the Spoken Moments in Time dataset. +However, all the details to reproduce the process to generate the hard negative captions with Large Language Models are included in our [paper](https://arxiv.org/abs/2304.06708). + +## Kinetics-verb +We introduce the Kinetics-verb split which consists in isolating classes from the Kinetics-400 dataset that share a common noun with another class, but have a different verb. +We use this rule to create a [subset of 97 classes](kinetics-400-verb-classes.txt) from the Kinetics-400 test set. + +## Citation + +If you use the `verbs in action` project, please cite the following BibTeX entry: + +``` +@inproceedings{momeni2023verbs, + title={Verbs in Action: Improving verb understanding in video-language models}, + author={Momeni, Liliane and Caron, Mathilde and Nagrani, Arsha and Zisserman, Andrew and Schmid, Cordelia}, + booktitle={International Conference on Computer Vision (ICCV)}, + year={2023} +} +``` diff --git a/scenic/projects/verbs_in_action/__init__.py b/scenic/projects/verbs_in_action/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/verbs_in_action/clip4clip_model.py b/scenic/projects/verbs_in_action/clip4clip_model.py new file mode 100644 index 0000000000000000000000000000000000000000..cb61cc3c7a3340578604f62a55795a483da0ac0c --- /dev/null +++ b/scenic/projects/verbs_in_action/clip4clip_model.py @@ -0,0 +1,191 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Clip4clip model for video and text contrastive learning.""" +from typing import Any, Optional + +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models import base_model +from scenic.projects.baselines.clip import layers as clip_layers +from scenic.projects.baselines.clip import model as clip +from scenic.projects.verbs_in_action import losses +from scenic.projects.verbs_in_action import utils + + +class TextEncoder(nn.Module): + """Encoder model for text. + + Attributes: + config: The CLIP text tower config. + """ + config: ml_collections.ConfigDict + + @nn.compact + def __call__(self, tokens, *, train: bool, debug: bool = False): + if tokens is None: + return tokens + tokens = tokens.reshape((-1,) + tokens.shape[2:]) + text_code = clip_layers.TextEncoder(name='TextTower', + **self.config)(tokens) + text_code = jnp.expand_dims(text_code, 1) + return text_code + + +class VideoEncoder(nn.Module): + """Encoder model for video. + + Attributes: + config: The config to create the image model from. + temporal_agg: How to agregate embeddings of the different frames. + """ + config: ml_collections.ConfigDict + temporal_agg: str + + @nn.compact + def __call__(self, x_rgb, *, train: bool, debug: bool = False): + if x_rgb is None: + return x_rgb + video_embedding = Image2VideoEncoder(self.config, self.temporal_agg)( + x=x_rgb, train=train, debug=debug) + return video_embedding + + +class Image2VideoEncoder(nn.Module): + """Use a clip image encoder to encode video frames as in CLIP4CLIP. + + Attributes: + config: The config to create the image model from. + temporal_agg: How to agregate embeddings of the different frames. + """ + + config: ml_collections.ConfigDict + temporal_agg: str + transformer_aggregation_num_layer: int = 4 + + @nn.compact + def __call__(self, x, *, train: bool, debug: bool = False): + # Reshape and normalise video frames + all_frames = x.reshape((-1,) + x.shape[-3:]) + all_frames = clip.normalize_image(all_frames) + image_encoder = clip_layers.VisionTransformer(name='ImageTower', + **self.config) + video_embeddings, _ = image_encoder(x=all_frames) + video_embeddings = video_embeddings.reshape(x.shape[:-3] + (-1,)) + + # Mean pooling across frame features. + if self.temporal_agg == 'meanpool': + video_embeddings = jnp.mean(video_embeddings, axis=1) + + # Temporal aggregation with a transformer across frame features. + elif self.temporal_agg == 'transformer': + feature_dim = video_embeddings.shape[-1] + positional_embedding = self.param( + 'seqTrans_positional_embedding', jax.nn.initializers.zeros, + (video_embeddings.shape[1], feature_dim)) + frame_embs = video_embeddings + positional_embedding[None] + frame_embs = clip.layers.Transformer( + feature_dim, self.transformer_aggregation_num_layer, + feature_dim // 64, name='seqTrans_transformer')(frame_embs) + video_embeddings += frame_embs # residual + # seqTrans Clip4clip l2-normalizes *before* and after mean pooling. + video_embeddings /= jnp.linalg.norm( + video_embeddings, axis=-1, keepdims=True) + 1e-8 + video_embeddings = jnp.mean(video_embeddings, axis=1) + return video_embeddings + + +class VideoAndTextModule(nn.Module): + """Dual encoder model for text and video. + + Attributes: + clip_vision_config: The config to create the video tower from. + clip_text_config: The config to create the text tower from. + temporal_agg: How to agregate embeddings of the different frames. + """ + clip_vision_config: ml_collections.ConfigDict + clip_text_config: ml_collections.ConfigDict + temporal_agg: str + + @nn.compact + def __call__(self, x_rgb, text_tokens, *, train: bool = True, + debug: bool = False): + # Video encoding. + video_encoder = VideoEncoder( + self.clip_vision_config, self.temporal_agg, name='video_encoder') + video_emb = None + if x_rgb is not None: + video_emb = video_encoder(x_rgb=x_rgb, train=train, debug=debug) + video_emb /= jnp.linalg.norm(video_emb, axis=-1, keepdims=True) + 1e-8 + + # Text encoding. + text_encoder = TextEncoder(self.clip_text_config, name='text_encoder') + text_emb = None + if text_tokens is not None: + text_emb = text_encoder(text_tokens, train=train, debug=debug) + text_emb /= jnp.linalg.norm(text_emb, axis=-1, keepdims=True) + 1e-8 + return video_emb, text_emb + + def loss_function(self, encoded_video: jnp.ndarray, + encoded_text: jnp.ndarray, + batch: Any, + config: ml_collections.ConfigDict, + encoded_verbs: Optional[jnp.ndarray] = None) -> float: + """Returns the loss for VFC training.""" + + verb_hard_negatives = config.get('verb_hard_negatives', False) + # Training with hard negatives ... + if verb_hard_negatives: + batch_mask_text = jax.lax.all_gather(batch['text_mask'], 'batch') + batch_mask_text = batch_mask_text.reshape( + (-1,) + batch_mask_text.shape[2:]) + loss = losses.verb_hard_neg_nce( + encoded_video, encoded_text, batch_mask_text, config.temperature, + config.get('v2t_weight', 1.0), config.get('t2v_weight', 1.0), + config.get('beta_hnnce', 0.)) + # ... or not. In this case, this is the baseline. + else: + loss = losses.baseline_nce( + encoded_video, encoded_text, config.temperature, + config.get('v2t_weight', 1.0), config.get('t2v_weight', 1.0), + config.get('beta_hnnce', 0.)) + + # Second, we (optionally) compute the verb-phrase loss. + if encoded_verbs is not None: + batch_mask_verb = jax.lax.all_gather(batch['verb_mask'], 'batch') + batch_mask_verb = batch_mask_verb.reshape( + (-1,) + batch_mask_verb.shape[2:]) + verb_phrase_loss = losses.verb_phrase_nce( + encoded_video, encoded_verbs, batch_mask_verb, config.temperature) + loss += config.get('verb_phrase_loss_weight') * verb_phrase_loss + return jnp.mean(loss) + + +class VideoAndTextModel(base_model.BaseModel): + """Video Text Dual Transformer model as defined in CLIP4CLIP.""" + + def build_flax_model(self) -> nn.Module: + clip_vision_config = utils.get_vit_clip_config( + self.config.model.clip_version) + clip_text_config = utils.get_text_clip_config( + self.config.model.clip_version) + return VideoAndTextModule( + clip_vision_config=clip_vision_config, + clip_text_config=clip_text_config, + temporal_agg=self.config.model.temporal_agg) + + def get_metrics_fn(self, split: Optional[str] = None): + pass diff --git a/scenic/projects/verbs_in_action/configs/__init__.py b/scenic/projects/verbs_in_action/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/verbs_in_action/configs/baseline.py b/scenic/projects/verbs_in_action/configs/baseline.py new file mode 100644 index 0000000000000000000000000000000000000000..a62443b36ebfed0e32187f8138b241454f8d354e --- /dev/null +++ b/scenic/projects/verbs_in_action/configs/baseline.py @@ -0,0 +1,118 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +"""Default config for baseline training on SMiT dataset.""" + +import ml_collections + + +DATA_TRAIN_SIZE = 481094 + + +def get_config(runlocal=''): + """Returns the base experiment configuration.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'baseline' + + # Dataset. + config.dataset_name = 'verbs_in_action_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + The tables here should be without hard negatives since this is the baseline training. + config.dataset_configs.base_dir = 'your_base_directory' + config.dataset_configs.tables = { + 'train': 'training_path', + 'validation': 'validation_path', + 'test': 'test_path', + } + config.dataset_configs.examples_per_subset = { + 'train': DATA_TRAIN_SIZE, + 'validation': 8096, + } + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 14 + config.dataset_configs.test_stride = 14 + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.zero_centering = False + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = False + config.dataset_configs.prefetch_to_device = 2 + # Text params + config.dataset_configs.max_num_words = 77 + config.dataset_configs.max_num_captions = 1 + config.dataset_configs.caption_string = 'caption/string' + config.dataset_configs.caption_string_train = 'caption/string' + config.dataset_configs.include_verb = False + config.dataset_configs.keep_test_key = True + + # Model. + config.model = ml_collections.ConfigDict() + config.model.clip_version = 'vit_b32' + config.model.temporal_agg = 'transformer' # or 'meanpool' + + # Initalisation configs + config.init_from = ml_collections.ConfigDict() + config.init_from.checkpoint_path = '' + config.train_from_scratch = False + + # Training. + config.max_grad_norm = 1 + config.batch_size = 256 if not runlocal else 8 + config.rng_seed = 0 + config.temperature = 0.005 # Temperature for the NCE loss + config.optimizer = 'adamw' + config.multi_optim = False + config.weight_decay = 0.01 + config.freeze_video_encoder = False + config.freeze_text_encoder = False + steps_per_epoch = DATA_TRAIN_SIZE // config.batch_size + config.num_training_epochs = 100 + total_steps = config.num_training_epochs * steps_per_epoch + # Learning schedules. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.factors = 'constant * cosine_decay' + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 1e-7 + + config.verb_phrase_loss_weight = 0. + # When beta is equal to zero this is the normal Info-NCE loss. + # When beta is not equal to zero this is the HN-NCE loss as proposed in + # this paper: https://arxiv.org/abs/2301.02280 + config.beta_hnnce = 0. + + + # Logging. + config.write_summary = True + config.checkpoint = True + config.debug_train = False + config.debug_eval = False + # Checkpoint more frequently than a val epoch for this model. + config.log_eval_steps = 1000 + config.checkpoint_steps = 5000 + config.log_summary_steps = 100 + if runlocal: + config.count_flops = False + + return config + + diff --git a/scenic/projects/verbs_in_action/configs/vfc.py b/scenic/projects/verbs_in_action/configs/vfc.py new file mode 100644 index 0000000000000000000000000000000000000000..e37e246cd3885f11d956810644719ed7e990bbb1 --- /dev/null +++ b/scenic/projects/verbs_in_action/configs/vfc.py @@ -0,0 +1,126 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# pylint: disable=line-too-long +"""Default config for baseline training on SMiT dataset.""" + +import ml_collections + + +DATA_TRAIN_SIZE = 481094 + + +def get_config(runlocal=''): + """Returns the base experiment configuration.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.experiment_name = 'verb_focused_contrastive_training' + + # Dataset. + config.dataset_name = 'verbs_in_action_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + The `train` split should contain hard negative captions in the + `caption/string_neg` field and positive caption in the `caption/strin_pos` + field of the tfrecord. + config.dataset_configs.base_dir = 'your_base_directory' + config.dataset_configs.tables = { + 'train': 'training_path', + 'validation': 'validation_path', + 'test': 'test_path', + } + config.dataset_configs.examples_per_subset = { + 'train': DATA_TRAIN_SIZE, + 'validation': 8096, + } + config.dataset_configs.caption_string_train = 'caption/string_pos;caption/string_neg' + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 14 + config.dataset_configs.test_stride = 14 + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.zero_centering = False + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = False + config.dataset_configs.prefetch_to_device = 2 + # Text params + config.dataset_configs.max_num_words = 77 + config.dataset_configs.caption_string = 'caption/string' + config.dataset_configs.num_train_captions = 6 # 1 positive and 5 hard negatives + config.dataset_configs.rmv_full_stop = True + config.dataset_configs.include_verb = True + config.dataset_configs.keep_test_key = True + + # Model. + config.model = ml_collections.ConfigDict() + config.model.clip_version = 'vit_b32' + config.model.temporal_agg = 'transformer' # or 'meanpool' + + # Initalisation configs + config.init_from = ml_collections.ConfigDict() + config.init_from.checkpoint_path = '' + config.train_from_scratch = False + + # Training. + config.max_grad_norm = 1 + config.batch_size = 256 if not runlocal else 8 + config.rng_seed = 0 + config.temperature = 0.005 # Temperature for the NCE loss + config.optimizer = 'adamw' + config.multi_optim = False + config.weight_decay = 0.01 + config.freeze_video_encoder = False + config.freeze_text_encoder = False + steps_per_epoch = DATA_TRAIN_SIZE // config.batch_size + config.num_training_epochs = 100 + total_steps = config.num_training_epochs * steps_per_epoch + # Learning schedules. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.factors = 'constant * cosine_decay' + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 1e-7 + + config.verb_hard_negatives = True # We train with hard negative captions. + # With this weighting of the loss there is the same amount of contribution + # from "text-to-vision" matching and "vision-to-text" matching. + config.verb_phrase_loss_weight = 0.5 # We also include a verb-phrase loss. + config.v2t_weight = 0.5 + config.t2v_weight = 1. + # When beta is equal to zero this is the normal Info-NCE loss. + # When beta is not equal to zero this is the HN-NCE loss as proposed in + # this paper: https://arxiv.org/abs/2301.02280 + config.beta_hnnce = 0. + + + # Logging. + config.write_summary = True + config.checkpoint = True + config.debug_train = False + config.debug_eval = False + # Checkpoint more frequently than a val epoch for this model. + config.log_eval_steps = 1000 + config.checkpoint_steps = 5000 + config.log_summary_steps = 100 + if runlocal: + config.count_flops = False + + return config + + diff --git a/scenic/projects/verbs_in_action/kinetics-400-verb-classes.txt b/scenic/projects/verbs_in_action/kinetics-400-verb-classes.txt new file mode 100644 index 0000000000000000000000000000000000000000..dbf9f5ec9eda9189ce032f8d1fa31d09750e9308 --- /dev/null +++ b/scenic/projects/verbs_in_action/kinetics-400-verb-classes.txt @@ -0,0 +1,97 @@ +braiding hair +brushing hair +curling hair +dying hair +fixing hair +getting a haircut +washing hair +doing nails +cutting nails +waxing legs +massaging legs +shaving legs +stretching leg +swinging legs +washing hands +shaking hands +stretching arm +exercising arm +arm wrestling +cutting watermelon +eating watermelon +mopping floor +cleaning floor +sanding floor +sweeping floor +baby waking up +carrying baby +crawling baby +waxing back +bending back +massaging back +massaging feet +washing feet +walking the dog +grooming dog +training dog +eating cake +making a cake +strumming guitar +playing guitar +tapping guitar +shuffling cards +playing cards +wrapping present +opening present +cooking egg +egg hunting +scrambling eggs +shining shoes +cleaning shoes +cleaning pool +jumping into pool +biking through snow +shoveling snow +skipping rope +climbing a rope +catching fish +feeding fish +filling eyebrows +waxing eyebrows +using computer +assembling computer +climbing tree +planting trees +trimming trees +driving car +pushing car +golf chipping +golf driving +golf putting +drinking beer +tasting beer +grooming horse +riding or walking with horse +folding paper +ripping paper +shredding paper +extinguishing fire +juggling fire +shaking head +shaving head +surfing water +water skiing +water sliding +ice climbing +ice fishing +ice skating +dunking basketball +dribbling basketball +playing basketball +shooting basketball +drumming fingers +finger snapping +catching or throwing baseball +hitting baseball +juggling soccer ball +kicking soccer ball diff --git a/scenic/projects/verbs_in_action/losses.py b/scenic/projects/verbs_in_action/losses.py new file mode 100644 index 0000000000000000000000000000000000000000..3d178e842d4acc71b034d8e20ebdd223c5c00cde --- /dev/null +++ b/scenic/projects/verbs_in_action/losses.py @@ -0,0 +1,221 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Losses used in Verf-Focused Contrastive learning.""" +from typing import Tuple + +import flax.linen as nn +import jax.numpy as jnp +import numpy as np +from scenic.projects.verbs_in_action import utils + + +def baseline_nce(encoded_video: jnp.ndarray, + encoded_text: jnp.ndarray, + temperature: float = 0.05, + v2t_weight: float = 1.0, + t2v_weight: float = 1.0, + beta: float = 0.) -> float: + """Returns HN-NCE loss when *not* considering verb hard negatives.""" + # Logits are [VIDEO x TEXT] + logits = utils.compute_inners(encoded_video, encoded_text) / temperature + + # Video to text loss + loss_v2t = hn_nce_loss_without_hardnegs(logits, beta=beta) + loss_v2t = jnp.mean(loss_v2t) + + # Text to video loss + logits_t = jnp.transpose(logits) # [TEXT x VIDEO] + n = logits_t.shape[-1] - 1 + loss_t2v = hn_nce_loss_without_hardnegs(logits_t, beta=beta, n=n) + loss_t2v = jnp.mean(loss_t2v) + + loss_final = v2t_weight * loss_v2t + t2v_weight * loss_t2v + return loss_final + + +def verb_hard_neg_nce(encoded_video: jnp.ndarray, + encoded_text: jnp.ndarray, + mask_text: jnp.ndarray, + temperature: float = 0.05, + v2t_weight: float = 1.0, + t2v_weight: float = 1.0, + beta: float = 0.) -> float: + """Returns HN-NCE loss when including verb hard negatives. + + Args: + encoded_video: The encoded videos. + encoded_text: The encoded text. + mask_text: 0 where caption (pos or neg), 1 where padding, + shape [total_num_texts, 1] + temperature: Temperature for scaling softmax distribution. + v2t_weight: weight on vid2text loss. + t2v_weight: weight on text2vid loss + beta: beta parameter used for HN-NCE: see https://arxiv.org/abs/2301.02280 + """ + logits = utils.compute_inners(encoded_video, encoded_text) + labels, masking, inverse_mask_hn_other_vid = get_contrastive_labels( + logits, mask_text) + logits = logits / temperature + + inverse_mask_hn_other_vid = jnp.sum(inverse_mask_hn_other_vid, axis=-1, + keepdims=True) + # Step 1): Video-to-text loss + v2t_loss = hn_nce_loss_with_hardnegs( + logits, labels, inverse_mask_hn_other_vid, beta=beta, masking=masking) + # Actually it's logits_masked.shape[0] + num neg cap per video. + v2t_loss = v2t_loss / jnp.log(inverse_mask_hn_other_vid) + v2t_loss = jnp.mean(v2t_loss) + + # Step 2): Text-to-video loss + logits_t = jnp.transpose(logits) + labels_t = jnp.transpose(labels) + t2v_loss = jnp.sum(hn_nce_loss_with_hardnegs(logits_t, labels_t, beta=beta)) + # divide by the number of pos_texts, i.e. num_vids + t2v_loss = t2v_loss / logits.shape[0] + # divide by log(K) where K=num_vids + t2v_loss = t2v_loss / jnp.log(logits.shape[0]) + + # Step 3): Add both loss terms. + loss_final = v2t_weight * v2t_loss + t2v_weight * t2v_loss + return loss_final + + +def hn_nce_loss_without_hardnegs(logits, alpha=1, beta=0, n=None): + """Returns HN-NCE loss when *not* considering verb hard negatives.""" + # The weights will compare how similar is each text compared to the average + ws = jnp.exp(beta * logits - jnp.max(beta * logits, axis=-1, keepdims=True)) + # Zeroing the diagonal. + ws = (1 != jnp.eye(logits.shape[0], logits.shape[1])) * ws + # Substracting the mean of each row. + if n is None: + n = ws.shape[-1] - 1 + ws = n * ws / jnp.sum(ws, axis=-1, keepdims=True) + exp_logits = jnp.exp(logits - jnp.max(logits, axis=-1, keepdims=True)) + pos = jnp.diag(exp_logits) + ws = ws * exp_logits + loss = - jnp.log(pos / (alpha * pos + jnp.sum(ws, axis=-1))) + return loss + + +def hn_nce_loss_with_hardnegs(logits, labels, n=None, beta=0, masking=None): + """Returns HN-NCE loss when considering verb hard negatives.""" + # The weights will compare how similar is each text compared to the average + ws = jnp.exp(beta * logits - jnp.max(beta * logits, axis=-1, keepdims=True)) + # Zeroing the positive elements + ws = (1 != labels) * ws + # and the masked elements... + if masking is not None: + ws = (-1000000 != masking) * ws + # Substracting the mean of each row. + if n is None: + n = ws.shape[-1] + ws = (n - 1) * ws / jnp.sum(ws, axis=-1, keepdims=True) + + # Setting to 1 the positive elements so that they participate in the sum in + # the denominator. + ws = ws + labels + + exp_logits = jnp.exp(logits - jnp.max(logits, axis=-1, keepdims=True)) + ws = ws * exp_logits + loss = - jnp.sum(labels * jnp.log(exp_logits / jnp.sum( + ws, axis=-1, keepdims=True)), axis=-1) + return loss + + +def get_contrastive_labels(inners: jnp.ndarray, + text_mask: jnp.ndarray, + loss_exclude_hn_other_vid: bool = True, + ) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Labels the inner products compute from `compute_inners`. + + Given an output from `_compute_inners` and text_mask, returns: + -labels: indicates where is positive by 1. + -masking: indicates where is masking by large neg number. + + Args: + inners: The inner products returned from `compute_inners`. + text_mask: This is 1 where we need to mask it out (padding), of + shape D x 1 where D = batch_size x max_num_captions + loss_exclude_hn_other_vid: Hard negative for element i of the batch is + ignored (ie. used neither as negative not positive) for batch elements j. + + Returns: + -labels: 0 where negative or padding, 1 where positive + -masking: 0 where positive or negative caption, -100000 where padding + """ + # labels 1 for positive, 0 for negative + labels = jnp.zeros(inners.shape, dtype=inners.dtype) + bs = inners.shape[0] + max_num_captions = int(text_mask.shape[0]/bs) + mask_hn_other_vid = jnp.ones(max_num_captions, dtype=inners.dtype) + if loss_exclude_hn_other_vid: + mask_hn_other_vid = mask_hn_other_vid.at[0].set(0) + mask_hn_other_vid = jnp.transpose(jnp.tile(jnp.expand_dims( + jnp.tile(mask_hn_other_vid, bs), 1), bs)) + inverse_mask_hn_other_vid = jnp.ones(inners.shape, dtype=inners.dtype) + # 0 for those we want in logsoftmax, -1000000 for those we want to ignore + large_neg_number = -1000000 + for idx in range(bs): + labels = labels.at[idx, idx*max_num_captions].set(1) + if loss_exclude_hn_other_vid: + start = idx * max_num_captions + end = idx * max_num_captions + max_num_captions + mask_hn_other_vid = mask_hn_other_vid.at[ + idx, start:end].set(jnp.squeeze(text_mask[start:end])) + masking = jnp.transpose(jnp.tile(text_mask, bs)) * large_neg_number + if loss_exclude_hn_other_vid: + inverse_mask_hn_other_vid = inverse_mask_hn_other_vid - mask_hn_other_vid + masking = mask_hn_other_vid * large_neg_number + return labels, masking, inverse_mask_hn_other_vid + + +def verb_phrase_nce(encoded_video: jnp.ndarray, + encoded_text: jnp.ndarray, + batch_mask_verb: jnp.ndarray, + temperature: float = 0.05,) -> float: + """Returns NCE loss for video to verb loss.""" + logits = utils.compute_inners(encoded_video, encoded_text) + labels, masking = get_labels_verbs(logits, batch_mask_verb) + logits = logits + masking + logits = logits / temperature + loss = -jnp.sum(labels * nn.log_softmax(logits, axis=-1), axis=-1) + loss = jnp.sum(loss * jnp.squeeze(batch_mask_verb)) / jnp.sum(batch_mask_verb) + loss_final = loss / jnp.log(jnp.sum(batch_mask_verb)) + return loss_final + + +def get_labels_verbs( + inners: jnp.ndarray, batch_mask_verb: jnp.ndarray + ) -> Tuple[np.ndarray, np.ndarray]: + """Labels the inner products computed from `compute_inners` for verb loss.""" + bs = inners.shape[0] + labels = jnp.zeros(inners.reshape((bs, bs, -1)).shape, dtype=inners.dtype) + for i in range(inners.shape[0]): + labels = labels.at[i, i, 0].set(jnp.squeeze(batch_mask_verb[i])) + masking = jnp.ones(batch_mask_verb.shape, dtype=batch_mask_verb.dtype) + masking = masking - batch_mask_verb + masking = jnp.transpose(jnp.tile(masking, bs))*-1000000 + return labels.reshape(inners.shape), masking + + +def get_labels(inners: jnp.ndarray) -> Tuple[np.ndarray, np.ndarray]: + """Labels the inner products compute dfrom `compute_inners`.""" + bs = inners.shape[0] + labels = np.zeros(inners.reshape((bs, bs, -1)).shape, dtype=inners.dtype) + labels_all = np.zeros_like(labels) + for i in range(inners.shape[0]): + labels[i, i, 0] = 1 + labels_all[i, i, :] = 1 + return labels.reshape(inners.shape), labels_all.reshape(inners.shape) diff --git a/scenic/projects/verbs_in_action/main.py b/scenic/projects/verbs_in_action/main.py new file mode 100644 index 0000000000000000000000000000000000000000..38d0da5e7582ac8493fbe3b42f38c793c2ccd486 --- /dev/null +++ b/scenic/projects/verbs_in_action/main.py @@ -0,0 +1,48 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for launching trainings.""" + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.verbs_in_action import clip4clip_model +from scenic.projects.verbs_in_action import tfrecord_dataset # pylint: disable=unused-import +from scenic.projects.verbs_in_action import trainer +from scenic.train_lib import train_utils + + +FLAGS = flags.FLAGS + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """The main entry point, sets and runs the training loop.""" + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + trainer.train_and_eval( + rng=rng, + config=config, + model_cls=clip4clip_model.VideoAndTextModel, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/verbs_in_action/tfrecord_dataset.py b/scenic/projects/verbs_in_action/tfrecord_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..a55caf940f48537c4938e74c39b02c3803dcb65b --- /dev/null +++ b/scenic/projects/verbs_in_action/tfrecord_dataset.py @@ -0,0 +1,625 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""TFRecords data-loader to read video-text datasets.""" +import functools +from typing import Dict, Iterator, List, Optional, Text, Tuple, Union + +from absl import logging +from dmvr import modalities as load_modalities +from flax import jax_utils +import jax +import jax.numpy as jnp +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib import video_ops +from scenic.projects.baselines.clip import tokenizer as clip_tokenizer +from scenic.projects.vivit.data import video_tfrecord_dataset +import tensorflow as tf +from dmvr import tokenizers + +Batch = Dict[str, jnp.ndarray] + + +def maybe_pad_batch(batch, train, batch_size, num_clips, num_captions): + """Zero pad the batch on the right to the batch_size.""" + assert 'batch_mask' not in batch + if 'rgb' in batch['inputs']: + unpadded_mask_shape = batch['inputs']['rgb'].shape[0] + batch_pad = batch_size - unpadded_mask_shape + else: + raise ValueError('invalid input batch') + if train and batch_pad != 0: + raise ValueError('In this codebase, we assumed that we always drop the ' + 'last partial batch of the train set. Please use ' + '` drop_remainder=True` for the training set.') + + # Most batches will not need padding so we quickly return to avoid slowdown. + if train or batch_pad == 0: + if 'batch_mask' not in batch: + batch['batch_mask'] = np.ones(unpadded_mask_shape, dtype=np.float32) + return batch + + def zero_pad(array, batch_pad=batch_pad): + pad_with = [(0, batch_pad)] + [(0, 0)] * (array.ndim - 1) + return np.pad(array, pad_with, mode='constant') + + # For the test set, we only keep one text input and one key for each video + text_indices = text_mask = keys = labels = verbs = verb_indices = None + pad_text_mask = False + pad_keys = False + pad_labels = False + pad_verbs = False + pad_verb_indices = False + if not train and batch_pad != 0: + text_indices = batch['text_indices'] + batch_pad_text = (batch_pad * num_captions) // num_clips + logging.info('Batch pad text in the test loop is %s', batch_pad_text) + text_indices = zero_pad(text_indices, batch_pad_text) + del batch['text_indices'] + if 'text_mask' in batch: + text_mask = batch.pop('text_mask') + text_mask = zero_pad(text_mask, batch_pad_text) + pad_text_mask = True + if 'key' in batch: + keys = batch['key'] + pad_keys = True + del batch['key'] + batch_pad_key = batch_pad // num_clips + keys = zero_pad(keys, batch_pad_key) + if 'label' in batch: + labels = batch['label'] + pad_labels = True + del batch['label'] + batch_pad_key = batch_pad // num_clips + labels = zero_pad(labels, batch_pad_key) + if 'verb' in batch: + verbs = batch['verb'] + pad_verbs = True + del batch['verb'] + batch_pad_verb = batch_pad // num_clips + verbs = zero_pad(verbs, batch_pad_verb) + if 'verb_indices' in batch: + verb_indices = batch['verb_indices'] + pad_verb_indices = True + del batch['verb_indices'] + batch_pad_verb_indices = batch_pad // num_clips + verb_indices = zero_pad(verb_indices, batch_pad_verb_indices) + + # Note here, batch_pad is repeated num_clips times if there are multiple clips + # sampled per video + padded_batch = jax.tree_util.tree_map(zero_pad, batch) + padded_batch_mask = zero_pad( + np.ones(unpadded_mask_shape, dtype=np.float32), batch_pad) + padded_batch['batch_mask'] = padded_batch_mask + if not train and batch_pad != 0: + padded_batch['text_indices'] = text_indices + if pad_text_mask: + padded_batch['text_mask'] = text_mask + if pad_keys: + padded_batch['key'] = keys + if pad_labels: + padded_batch['label'] = labels + if pad_verbs: + padded_batch['verb'] = verbs + if pad_verb_indices: + padded_batch['verb_indices'] = verb_indices + return padded_batch + + +class AVTFRecordDatasetFactory(video_tfrecord_dataset.TFRecordDatasetFactory): + """Reader for TFRecords using the MediaSequence format.""" + + def __init__(self, + base_dir: str, + tables: Dict[str, Union[str, List[str]]], + examples_per_subset: Dict[str, int], + subset: str = 'train', + prop_data: float = 1.0, + num_groups: Optional[int] = None, + group_index: Optional[int] = None): + """Initializes the instance of TFRecordDatasetFactory. + + Initializes a data-loader using DeepMind Video Reader (DMVR) pre-processing + (https://github.com/deepmind/dmvr). + TFRecords are assumed to consist of tf.SequenceExample protocol buffers in + the MediaSequence + (https://github.com/google/mediapipe/tree/master/mediapipe/util/sequence) + + Args: + base_dir: The base directory of the TFRecords. + tables: A dictionary mapping the subset name (train, val or test) to the + relative path of the SSTable containing them. Follows DMVR convention. + The values of the dictionary can either be a string or a list. If it is + a string, it specifies all the shards in the SSTable. Example - + "/path/to/sstable@10". If passing a list, each entry is a shard of the + SSTable. Example - "[/path/to/sstable_shard_1_of_10, ..., + /path/to/sstabble_shard_10_of_10]." The latter scenario is useful for + debugging. + examples_per_subset: A dictionary mapping the subset name (train, val or + test) to the number of examples in the dataset for that subset. + subset: The subset of the dataset to load. Must be a key of "tables" + prop_data: The proportion of the data to load. If less than 1.0, this + proportion of the total TFRecord shards are read. + num_groups: If specified will reshard the data according to `num_groups`. + A `group_index` should be specified if using `num_groups`. + group_index: Index of the shard to return after resharding. `num_groups` + should be specified if using `group_index`. This is useful in + distributed setting where one wants to ensure that different data is + read by different workers. + """ + + self._modalities = ('rgb',) + super().__init__( + base_dir=base_dir, + tables=tables, + num_classes=0, # non applicable + examples_per_subset=examples_per_subset, + subset=subset, + fraction_data=prop_data, + num_groups=num_groups, + group_index=group_index) + + def _build(self, + is_training: bool = True, + # Video related parameters. + num_frames: int = 32, + stride: int = 1, + num_test_clips: int = 1, + min_resize: int = 256, + crop_size: int = 224, + zero_centering_image: bool = False, + # Text related parameters. + max_num_words: int = 16, + max_num_captions: int = 1, + caption_string: str = 'caption/string', + num_labels: int = 0, + include_verb: bool = False,): + """Adds DMVR pre-processors to the dataset. + + Args: + is_training: whether or not in training mode. + num_frames: number of frames per subclip. + stride: temporal stride to sample frames. + num_test_clips: number of test clip (1 by default). If more than one, this + will sample multiple linearly spaced clips within each video at test + time. If 1, then a single clip in the middle of the video is sampled. + min_resize: frames are resized so that min width/height is min_resize. + crop_size: final size of the frame after cropping the resized frames. + zero_centering_image: whether to have images between [-1, 1] or [0, 1]. + max_num_words: Maximum number of tokens to keep from the text for each + caption. If there are more tokens, sequence is cropped, if less, the + caption is padded using the tokenizer pad id. + max_num_captions: Maximum number of captions to keep. If there are more + captions in the proto, only the first `max_num_captions` will be + returned is `is_training` is set to `False`. If `is_training` is `True`, + then `max_num_captions` will be randomly sampled. Finally if the proto + contains less than `max_num_captions`, we pad with empty srings to make + sure there are `max_num_captions` in total. + caption_string: Input feature name in sstable for caption. + num_labels: Number of labels (classification). + include_verb: Including an additional contrastive video-verb phrase loss + (where the verb is extracted from the caption using PaLM). + """ + if 'rgb' in self._modalities: + load_modalities.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + is_training=is_training, + num_frames=num_frames, + stride=stride, + num_test_clips=num_test_clips, + min_resize=min_resize, + crop_size=crop_size, + zero_centering_image=zero_centering_image, + sync_random_state=True) + tokenizer = tokenizers.ClipTokenizer() # dummy tokenizer + tokenizer.initialize() + # Note, output feature name is 'text_indices' + if ';' in caption_string: + # this is when we have both positives & hard negatives + pos_neg_max_captions = [1, max_num_captions-1] + pos_neg_output_raw_string_name = ['string_pos', 'string_neg'] + pos_neg_output_feature_name = ['text_indices_pos', 'text_indices_neg'] + for idx, caption_to_add in enumerate(caption_string.split(';')): + load_modalities.add_text( + parser_builder=self.parser_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + input_feature_name=caption_to_add, + max_num_captions=pos_neg_max_captions[idx], + max_num_tokens=max_num_words, + keep_raw_string=True, + tokenizer=tokenizer, # We do not use this tokenizer. + is_training=is_training, + output_raw_string_name=pos_neg_output_raw_string_name[idx], + output_feature_name=pos_neg_output_feature_name[idx], + ) + else: + load_modalities.add_text( + parser_builder=self.parser_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + input_feature_name=caption_string, + max_num_captions=max_num_captions, + max_num_tokens=max_num_words, + keep_raw_string=True, + tokenizer=tokenizer, # We do not use this tokenizer. + is_training=is_training) + if include_verb: + load_modalities.add_text( + parser_builder=self.parser_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + input_feature_name='verb', + max_num_captions=1, + max_num_tokens=max_num_words, + keep_raw_string=True, + tokenizer=tokenizer, # We do not use this tokenizer. + is_training=is_training, + output_raw_string_name='verb', + output_feature_name='verb_indices',) + + +def load_split_from_dmvr(ds_factory, + batch_size, + subset='train', + num_frames=32, + stride=2, + num_test_clips=1, + min_resize=256, + crop_size=224, + zero_centering=True, + augmentation_params=None, + keep_key=False, + max_num_words: int = 16, + max_num_captions: int = 1, + caption_string='caption/string', + num_labels=0, + include_verb: bool = False,): + """Loads dataset using DMVR for pre-processing. + + DMVR dataset loader already does basic augmentation (random crop and flip in + train mode. It also already shuffles and batches the data. + + Args: + ds_factory: A DMVR factory to instantiate with the subset. + batch_size: The batch_size to use. + subset: train, validation or test. + num_frames: Number of RGB frames per subclip. + stride: Temporal stride to sample RGB frames. + num_test_clips: Number of test clips (1 by default). If more than 1, this + will sample multiple linearly spaced clips within each video at test time. + If 1, then a single clip in the middle of the video is sampled. The clips + are aggreagated in the batch dimension. + min_resize: Frames are resized so that min(height, width) is min_resize. + crop_size: Final size of the frame after cropping the resized frames. Both + height and width are the same. + zero_centering: If True, frames are normalized to values in [-1, 1]. If + False, values in [0, 1]. + augmentation_params: dict; augmentation configurations in train mode. + keep_key: bool; If true, also return the key for each example. + max_num_words: Maximum number of tokens to keep from the text for each + caption. If there are more tokens, sequence is cropped, if less, the + caption is padded using the tokenizer pad id. + max_num_captions: Maximum number of captions to keep. If there are more + captions in the proto, only the first `max_num_captions` will be returned + is `is_training` is set to `False`. If `is_training` is `True`, then + `max_num_captions` will be randomly sampled. Finally if the proto contains + less than `max_num_captions`, we pad with empty srings to make sure there + are `max_num_captions` in total. + caption_string: Input feature name in sstable for caption. + num_labels: Number of labels (classification). + include_verb: verb phrase loss. + + Returns: + A pair `(ds, num_examples)` with + ds: A `tf.data.Dataset` object + num_examples: Number of examples in the dataset. + """ + is_training = (subset == 'train') + ds_factory = ds_factory(subset=subset).configure( + is_training=is_training, + num_frames=num_frames, + stride=stride, + num_test_clips=num_test_clips, + min_resize=min_resize, + crop_size=crop_size, + zero_centering_image=zero_centering, + max_num_words=max_num_words, + max_num_captions=max_num_captions, + caption_string=caption_string, + num_labels=num_labels, + include_verb=include_verb, + ) + + if is_training and augmentation_params: + # additional augmentation for the RGB features. + ds_factory = video_ops.additional_augmentations(ds_factory, + augmentation_params, + crop_size, num_frames, + zero_centering) + + logging.info('Preprocessing graph: %s', + ds_factory.preprocessor_builder.get_summary()) + logging.info('Postprocessing graph: %s', + ds_factory.postprocessor_builder.get_summary()) + num_examples = ds_factory.num_examples + ds = ds_factory.make_dataset(batch_size=batch_size, + shuffle=is_training, + num_epochs=None if is_training else 1, + drop_remainder=is_training, + keep_key=(not is_training and keep_key)) + if not is_training: + ds = ds.repeat(None) + options = tf.data.Options() + options.experimental_threading.private_threadpool_size = 48 + ds = ds.with_options(options) + return ds, num_examples + + +def map_keys(batch, modalities=('rgb')): + """DMVR dataset returns 'image' and 'label'. We want 'inputs' and 'label'.""" + batch['inputs'] = {} + if 'rgb' in modalities: + batch['inputs']['rgb'] = batch['image'] + return batch + + +def clip_tokenize(batch, rmv_full_stop, + vqa_options_for_ce=False, + num_responses=5, include_verb=False): + """Tokenize the raw string using CLIP tokenizers. + + Args: + batch: batch + rmv_full_stop: remove full stop (they occur in hard negs) + vqa_options_for_ce: having cross entropy loss + num_responses: default 5 as one correct, 4 wrong in MSR-VTT MC. + include_verb: whether the verb phrase should be included. + + Returns: + batch: batch + """ + + if 'text' not in batch: + pos_strings = batch['string_pos'].reshape( + (-1,) + batch['string_pos'].shape[2:]) + neg_strings = batch['string_neg'].reshape( + (-1,) + batch['string_neg'].shape[2:]) + num_hard_neg = batch['string_neg'].shape[1] + raw_text = [] + for idx in range(len(pos_strings)): + raw_text.append(pos_strings[idx]) + raw_text += list(neg_strings[ + idx*num_hard_neg:(idx*num_hard_neg)+num_hard_neg]) + del batch['text_indices_pos'] + del batch['text_indices_neg'] + del batch['string_neg'] + del batch['string_pos'] + else: + raw_text = batch['text'] + raw_text = raw_text.reshape((-1,) + raw_text.shape[2:]) + del batch['text'] + raw_text = [sentence.decode('utf-8') for sentence in raw_text] + verbs, raw_verbs = False, False + if include_verb and 'verb' in batch: + verbs = True + raw_verbs = batch['verb'] + raw_verbs = raw_verbs.reshape((-1,) + raw_verbs.shape[2:]) + del batch['verb'] + raw_verbs = [verb.decode('utf-8') for verb in raw_verbs] + if rmv_full_stop: + raw_text = [sent.replace('.', '') for sent in raw_text] + if vqa_options_for_ce: + clean_raw_text = [] + for i in raw_text: + if i: + options = i.split(';')[:num_responses] + # a few examples have only four answers + if len(options) == 4: + options += [''] + clean_raw_text.append(options) + raw_text = np.concatenate(np.asarray(clean_raw_text)) + tokenizer = clip_tokenizer.build_tokenizer(truncate=True) + text_tokens = tokenizer(raw_text) + text_tokens = jnp.asarray(text_tokens) + text_tokens = jnp.expand_dims(text_tokens, 1) + text_masking = [int(not i) for i in raw_text] + text_masking = jnp.asarray(text_masking) + text_masking = jnp.expand_dims(text_masking, 1) + batch['text_mask'] = text_masking + batch['text_indices'] = text_tokens + if include_verb and verbs: + verb_tokens = tokenizer(raw_verbs) + verb_tokens = jnp.asarray(verb_tokens) + verb_tokens = jnp.expand_dims(verb_tokens, 1) + verb_masking = [int(bool(i)) for i in raw_verbs] + verb_masking = jnp.asarray(verb_masking) + verb_masking = jnp.expand_dims(verb_masking, 1) + batch['verb_mask'] = verb_masking + batch['verb_indices'] = verb_tokens + return batch + + +@datasets.add_dataset('verbs_in_action_tfrecord_dataset') +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, # pylint:disable=unused-argument + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns a generator for the video-text dataset.""" + del rng + dataset_configs = dataset_configs or {} + # RGB related configs. + num_frames = dataset_configs.get('num_frames', 32) + stride = dataset_configs.get('stride', 2) + test_stride = dataset_configs.get('test_stride', 2) + min_resize = dataset_configs.get('min_resize', 256) + crop_size = dataset_configs.get('crop_size', 224) + # General configs. + num_test_clips = dataset_configs.get('num_test_clips', 1) + num_test_captions = dataset_configs.get('num_test_captions', 1) + num_train_val_clips = dataset_configs.get('num_train_val_clips', 1) + num_train_val_captions = dataset_configs.get('num_train_val_captions', 0) + if num_train_val_captions: + num_train_captions = num_val_captions = num_train_val_captions + else: + num_train_captions = dataset_configs.get('num_train_captions', 1) + num_val_captions = dataset_configs.get('num_val_captions', 1) + zero_centering = dataset_configs.get('zero_centering', True) + augmentation_params = dataset_configs.get('augmentation_params', None) + # Whether to load the key for each test sample from the data sstables. + keep_test_key = dataset_configs.get('keep_test_key', False) + test_split = dataset_configs.get('test_split') + # For the test set, the actual batch size is test_batch_size * num_test_clips + test_batch_size = dataset_configs.get('test_batch_size', eval_batch_size) + # Text related configs. + max_num_words = dataset_configs.get('max_num_words', 16) + max_num_captions = dataset_configs.get('max_num_captions', 0) + if max_num_captions > 0: + num_train_captions = num_val_captions = num_test_captions = max_num_captions + caption_string = dataset_configs.get('caption_string', 'caption/string') + num_labels = dataset_configs.get('num_labels', 0) + caption_string_train = dataset_configs.get('caption_string_train', + 'clip/label/string') + rmv_full_stop = dataset_configs.get('rmv_full_stop', False) + vqa_options_for_ce = dataset_configs.get('vqa_options_for_ce', False) + include_verb = dataset_configs.get('include_verb', False) + + def validate_config(field): + if dataset_configs.get(field) is None: + raise ValueError(f'{field} must be specified for TFRecord dataset.') + validate_config('base_dir') + validate_config('tables') + validate_config('examples_per_subset') + + ds_factory = functools.partial( + AVTFRecordDatasetFactory, + base_dir=dataset_configs.get('base_dir', ''), + tables=dataset_configs.get('tables', {}), + examples_per_subset=dataset_configs.get('examples_per_subset'), + num_groups=jax.process_count(), + group_index=jax.process_index()) + + def create_dataset_iterator( + subset: Text, + batch_size_local: int, + num_clips: int, + num_captions: int, + caption_string: str, + stride: int, + rmv_full_stop: bool, + num_labels: int, + include_verb: bool, + keep_key_local: bool = False,) -> Tuple[Iterator[Batch], int]: + + is_training = subset == 'train' + is_test = subset == 'test' + logging.info('Loading split %s', subset) + + dataset, num_examples = load_split_from_dmvr( + ds_factory, + batch_size=batch_size_local, + subset=subset, + num_frames=num_frames, + stride=stride, + num_test_clips=num_clips, + min_resize=min_resize, + crop_size=crop_size, + zero_centering=zero_centering, + augmentation_params=augmentation_params, + keep_key=keep_key_local, + max_num_words=max_num_words, + max_num_captions=num_captions, + caption_string=caption_string, + num_labels=num_labels, + include_verb=include_verb) + + if dataset_service_address and is_training: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + dataset = dataset_utils.distribute(dataset, dataset_service_address) + + current_iter = iter(dataset) + current_iter = map(dataset_utils.tf_to_numpy, current_iter) + current_iter = map(map_keys, current_iter) + current_iter = map(functools.partial( + clip_tokenize, rmv_full_stop=rmv_full_stop, + vqa_options_for_ce=vqa_options_for_ce, + include_verb=include_verb), current_iter) + + pad_batch_size = batch_size_local + if is_test: + pad_batch_size = batch_size_local * num_clips + maybe_pad_batches = functools.partial( + maybe_pad_batch, + train=is_training, + batch_size=pad_batch_size, + num_clips=num_clips, + num_captions=num_captions) + current_iter = map(maybe_pad_batches, current_iter) + + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + current_iter = map(shard_batches, current_iter) + + if is_training and dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + current_iter = jax_utils.prefetch_to_device( + current_iter, dataset_configs.get('prefetch_to_device')) + + return current_iter, num_examples + + train_iter, n_train_examples = create_dataset_iterator( + 'train', batch_size, num_train_val_clips, num_train_captions, + caption_string_train, stride, + rmv_full_stop, num_labels, include_verb) + eval_iter, n_eval_examples = create_dataset_iterator( + 'validation', eval_batch_size, num_train_val_clips, num_val_captions, + caption_string, test_stride, rmv_full_stop, + num_labels, False, keep_test_key) + n_test_examples, test_iter = 0, None + if test_split: + test_iter, n_test_examples = create_dataset_iterator( + test_split, test_batch_size, num_test_clips, num_test_captions, + caption_string, test_stride, + rmv_full_stop, num_labels, False, keep_test_key) + + meta_data = { + 'num_train_examples': (n_train_examples * num_train_val_clips), + 'num_eval_examples': (n_eval_examples * num_train_val_clips), + 'num_test_examples': (n_test_examples * num_test_clips), + 'input_dtype': getattr(jnp, dtype_str) + } + meta_data['text_shape'] = [-1, max_num_captions, max_num_words] + meta_data['text_dtype'] = jnp.int32 + meta_data['input_shape'] = { + 'rgb': (-1, num_frames, crop_size, crop_size, 3), + } + logging.info('Dataset metadata:\n%s', meta_data) + + return dataset_utils.Dataset(train_iter, eval_iter, test_iter, meta_data) diff --git a/scenic/projects/verbs_in_action/trainer.py b/scenic/projects/verbs_in_action/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..f1216b8388cf9fde616d064107d09b2cebea8867 --- /dev/null +++ b/scenic/projects/verbs_in_action/trainer.py @@ -0,0 +1,342 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Video-Text training.""" + +import functools +from typing import Any, Dict, Optional, Tuple +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +from flax import jax_utils +import flax.linen as nn +import jax +import jax.example_libraries.optimizers as jax_optimizers +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.projects.verbs_in_action import utils +from scenic.train_lib import train_utils + + +def train_and_eval( + rng: np.ndarray, + config: ml_collections.ConfigDict, + *, + workdir: str, + writer: Any, + model_cls, + dataset) -> Tuple[utils.OptaxTrainState, Any, Dict[str, Any]]: + """Train (and occasionally evaluate) the model. + + Args: + rng: JAX prng key. + config: The configuration of the experiment. + workdir: Where to checkpoint and write the summaries. + writer: Summary writer object. + model_cls: The model class used to instantiate the model. + dataset: The dataset for training and evaluation. + + Returns: + A tuple with: + * the state that has the state of training (including current + global_step, model_state, rng, and the optimizer) + * a dictionary with the train_summary + * a dictionary with the evaluation summary + """ + lead_host = jax.host_id() == 0 + + model = model_cls(config, dataset.meta_data) + train_step_pmapped, eval_step_pmapped = pmapped_steps(model, config) + train_state, start_step, chrono = utils.init_state(model, dataset, config, # pytype: disable=wrong-arg-types # jax-ndarray + workdir, rng) + chrono.load(train_state.metadata['chrono']) + train_state = jax_utils.replicate(train_state) + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + log_eval_steps = config.get('log_eval_steps', steps_per_epoch) + checkpoint_steps = config.get('checkpoint_steps', log_eval_steps) + log_summary_steps = config.get('log_summary_steps', log_eval_steps) + + # And the number of evaluation steps. + num_eval_examples = dataset.meta_data['num_eval_examples'] + logging.info('Number of processes is %s', jax.process_count()) + total_eval_steps = int(np.ceil(num_eval_examples /(config.get('batch_size')))) + steps_per_eval = config.get('steps_per_eval', total_eval_steps) + train_metrics = [] + train_summary = None + + + eval_summary = {} + logging.info('Start training from step %d', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and jax.process_index() == 0: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics = train_step_pmapped(train_state, train_batch) + train_metrics.append(t_metrics) + for hook in hooks: + hook(step) + # Log the train summary every `log_summary_steps`. + if (step % log_summary_steps == 1) or (step == total_steps): + chrono.pause() + if lead_host: + chrono.tick(step, writer, write_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, train_metrics), + writer=writer) + train_metrics = [] + chrono.resume() + + # Evaluate every `log_eval_steps`. + do_eval = (step % log_eval_steps == 1) or (step == total_steps) + if do_eval: + eval_summary = eval_and_log_summary( + train_state=train_state, + iterator=dataset.valid_iter, + eval_step_fn=eval_step_pmapped, + eval_steps=steps_per_eval, + writer=writer, + train_iteration=step, + num_eval_examples=num_eval_examples, + compute_recall_metrics=True) + writer.flush() + + # Checkpointing. + if not config.checkpoint: + continue + elif do_eval or (step % checkpoint_steps == 0 and step > 0): + chrono.pause(wait_for=(train_state.weights, train_state.opt_state)) + if lead_host: + # Take the first replica. + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state.replace(metadata=metadata) # pytype: disable=attribute-error + utils.save_checkpoint(workdir, unrep_train_state) + del unrep_train_state + chrono.resume() # Un-pause now. + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary + + +def train_step( + train_state: utils.OptaxTrainState, + batch: Any, + *, + flax_model: nn.Module, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[utils.OptaxTrainState, Dict[str, Tuple[float, int]]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + config: Configuration of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, computed metrics, and learning rate for logging. + """ + new_rng, rng = jax.random.split(train_state.rng) + + # Bind the rng to the host/device we are on for dropout. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + encoded_video, encoded_text = flax_model.apply( + variables, + batch['inputs'].get('rgb'), + batch['text_indices'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + encoded_verbs = None + if config.get('verb_phrase_loss_weight'): + # We pass None for video inputs so video encoder doesn't duplicate calc. + _, encoded_verbs = flax_model.apply( + variables, + None, + batch['verb_indices'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + return flax_model.loss_function( + encoded_video, encoded_text, batch, config, encoded_verbs=encoded_verbs) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=False) + step = train_state.global_step + train_loss, grad = compute_gradient_fn(train_state.weights) + new_train_state = train_state + metrics = {'loss': (train_loss, 1)} + grad = jax.lax.pmean(grad, axis_name='batch') + if config.get('max_grad_norm', None): + grad = jax_optimizers.clip_grads(grad, config.max_grad_norm) + if train_state.tx is not None: + updates, new_opt_state = train_state.tx.update( + grad, train_state.opt_state, train_state.weights) + new_weights = optax.apply_updates(train_state.weights, updates) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=step + 1, + opt_state=new_opt_state, + weights=new_weights, + rng=new_rng) + return new_train_state, metrics + + +def eval_step(train_state: utils.OptaxTrainState, + batch: Any, + *, + flax_model: nn.Module, + debug: Optional[bool] = False,) -> Any: + """Runs a single step of evaluation.""" + variables = {'params': train_state.weights, **train_state.model_state} + (encoded_video, encoded_text) = flax_model.apply( + variables, + batch['inputs'].get('rgb'), + batch['text_indices'], + train=False, + mutable=False, + debug=debug) + # This function uses all_gather to fetch embeddings from all devices. + _, encoded_video, encoded_text = utils.compute_inners( + encoded_video, encoded_text, 'batch', return_embeddings=True) + return encoded_video, encoded_text + + +def pmapped_steps(model, config): + """Returns the pmapped train and eval steps.""" + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + return train_step_pmapped, eval_step_pmapped + + +def eval_and_log_summary( + *, + train_state: utils.OptaxTrainState, + writer: metric_writers.MetricWriter, + iterator, + eval_step_fn, + eval_steps, + train_iteration, + num_eval_examples, + compute_recall_metrics=True, + text_to_video_retrieval=True,): + """Eval the model and write the summary.""" + output_dicts = {} + logging.info('Total number of eval steps is %s', eval_steps) + logging.info('Total number of eval examples is %s', num_eval_examples) + # Do this to ensure we definitely cover the full test set + eval_steps = int(np.ceil(1.3 * eval_steps)) + logging.info('The modified total number of eval steps is %s', eval_steps) + for step in range(eval_steps): + logging.info('Step %s/%s', step + 1, eval_steps) + with jax.profiler.StepTraceAnnotation('eval', step_num=step): + eval_batch = next(iterator) + assert compute_recall_metrics + assert 'key' in eval_batch, 'Keys must be added to batch' + keys = utils.convert_strings_to_uint8_arrays(eval_batch['key'], 30) + keys = utils.all_gather_and_unreplicate(keys) + del eval_batch['key'] + batch_masks = utils.all_gather_and_unreplicate( + eval_batch['batch_mask']) + + video_embeddings, text_embeddings = eval_step_fn( + train_state, eval_batch) + # Unreplicate the output of eval_step_pmapped (used `lax.all_gather`). + video_embeddings = jax_utils.unreplicate(video_embeddings) + text_embeddings = jax_utils.unreplicate(text_embeddings) + batch_size = batch_masks.shape[0] * batch_masks.shape[1] + text_embeddings = text_embeddings.reshape( + batch_size, -1, text_embeddings.shape[-1]) + batch_masks = batch_masks.reshape( + (batch_size,)).astype(bool) + keys = keys.reshape((batch_size, -1)) + for i, mask in enumerate(batch_masks): + if mask: + key = utils.convert_uint8_array_to_string(keys[i]) + output_dicts[key] = { + 'text_emb': text_embeddings[i], + 'video_emb': video_embeddings[i] + } + logging.info('The number of the unique eval examples is %d', + len(output_dicts)) + text_embeddings_array = np.stack( + [v['text_emb'] for v in output_dicts.values()], axis=0) + video_embeddings_array = np.stack( + [v['video_emb'] for v in output_dicts.values()], axis=0) + + logging.info('Shape of text embedding array in val set is %s', + text_embeddings_array.shape) + additional_summary = utils.compute_recall_at_k( + video_embeddings=video_embeddings_array, + text_embeddings=text_embeddings_array, + k_values={1, 5, 10}, + text_to_video_retrieval=text_to_video_retrieval) + return train_utils.log_eval_summary( + step=train_iteration, + eval_metrics=[], + extra_eval_summary=additional_summary, + writer=writer, + key_separator='/') diff --git a/scenic/projects/verbs_in_action/utils.py b/scenic/projects/verbs_in_action/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..b0dbfd549b19c5035dbfcb54a772ea7a739d8ac2 --- /dev/null +++ b/scenic/projects/verbs_in_action/utils.py @@ -0,0 +1,552 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities.""" +import os +import re +from typing import Any, Callable, Dict, List, Mapping, Optional, Tuple, Union + +from absl import logging +import flax +from flax import struct +from flax.core import frozen_dict +import flax.linen as nn +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.baselines.clip import model as clip +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils +from tensorflow.io import gfile + +PyTree = Union[Mapping[str, Mapping], Any] + + +def get_vit_clip_config(model_name: str) -> ml_collections.ConfigDict: + configs = clip.CONFIGS[model_name] + return ml_collections.ConfigDict({ + 'patch_size': configs['vision_patch_size'], + 'features': configs['vision_features'], + 'num_layers': configs['vision_num_layers'], + 'num_heads': configs['vision_features'] // 64, + 'out_features': configs['embed_dim'], + }) + + +def get_text_clip_config(model_name: str) -> ml_collections.ConfigDict: + configs = clip.CONFIGS[model_name] + return ml_collections.ConfigDict({ + 'out_features': configs['embed_dim'], + 'vocab_size': configs['vocab_size'], + 'features': configs['text_features'], + 'num_layers': configs['text_num_layers'], + 'num_heads': configs['text_num_heads'], + }) + + +def init_state(model: base_model.BaseModel, dataset: dataset_utils.Dataset, + config: ml_collections.ConfigDict, workdir: str, + rng: jnp.ndarray): + """Initialize the model state.""" + input_shapes = dataset.meta_data['input_shape'] + input_dtype = dataset.meta_data.get('input_dtype', jnp.float32) + final_spec_list = [ + (input_shapes['rgb'], input_dtype), + (dataset.meta_data['text_shape'], dataset.meta_data['text_dtype'])] + # Initialize model. + rng, init_rng = jax.random.split(rng) + params, model_state, num_params, gflops = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=final_spec_list, + config=config, + rngs=init_rng) + logging.info('The model has %d params', num_params) + if gflops is not None: + logging.info('The model uses %d gflops', gflops) + + chrono = train_utils.Chrono() + # Create optimizer. + tx, opt_state = build_optimizer(config, params) + # Create train state. + train_state = OptaxTrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + model_state=model_state, + weights=params, + rng=rng, + metadata={'chrono': chrono.save()},) + + start_step = train_state.global_step + if config.checkpoint: + train_state, param_axes = pop_axes_names( + train_state, axes_name='params_axes') + train_state, start_step = restore_checkpoint(workdir, train_state) + train_state = re_add_axis_names( + train_state, param_axes=param_axes, axes_name='params_axes') + new_params = None + if start_step == 0 and not config.get('train_from_scratch'): + if config.init_from.get('checkpoint_path', None): + checkpoint_path = config.init_from.checkpoint_path + logging.info('Loading weights from %s', checkpoint_path) + new_params = checkpoints.restore_checkpoint(checkpoint_path, None) + if 'weights' in new_params: new_params = new_params['weights'] + else: + new_params = load_clip_params( + train_state.weights, config.model.clip_version, + config.model.temporal_agg) + if new_params is not None: + tx, opt_state = build_optimizer(config, new_params) + train_state = train_state.replace(tx=tx, opt_state=opt_state, + weights=new_params) + logging.info('Weights succesfully loaded.') + elif start_step == 0: + logging.info('Training completely from scratch. ' + 'Not restoring from any checkpoint.') + return train_state, start_step, chrono + + +def load_clip_params(random_params, model_name, temporal_agg): + """Load CLIP parameters.""" + logging.info('Loading CLIP weights...') + clip_vars = clip.load_model_vars(model_name) + clip_params = clip_vars['params'] + params = { + 'text_encoder': dict(TextTower=clip_params['text']), + 'video_encoder': + dict(Image2VideoEncoder_0=dict(ImageTower=clip_params['visual'])), + } + # seqTrans Clip4Clip initializes the transformer temporal aggregation + # module with weights from CLIP Text tower. + if temporal_agg == 'transformer': + clip_text = clip_params['text']['transformer'] + num_layer_transformer = len(random_params['video_encoder']['Image2VideoEncoder_0']['seqTrans_transformer']) # pylint: disable=line-too-long + params['video_encoder']['Image2VideoEncoder_0']['seqTrans_transformer'] = { + 'resblocks.' + str(n): clip_text['resblocks.' + str(n)] for n in range(num_layer_transformer) if n < len(clip_text) # pylint: disable=line-too-long + } + number_of_frame = random_params['video_encoder']['Image2VideoEncoder_0']['seqTrans_positional_embedding'].shape[0] # pylint: disable=line-too-long + params['video_encoder']['Image2VideoEncoder_0']['seqTrans_positional_embedding'] = clip_params['text']['positional_embedding'][:number_of_frame] # pylint: disable=line-too-long + params = jax.tree_util.tree_map(lambda x: jnp.array(x, dtype=jnp.float32), + params) + return replace_dict(random_params, params, name_mapping={}) + + +def replace_dict(model: PyTree, + restored: PyTree, + ckpt_prefix_path: Optional[List[str]] = None, + model_prefix_path: Optional[List[str]] = None, + name_mapping: Optional[Mapping[str, str]] = None, + skip_regex: Optional[str] = None) -> PyTree: + """Replaces values in model dictionary with restored ones from checkpoint.""" + model = flax.core.unfreeze(model) # pytype: disable=wrong-arg-types + restored = flax.core.unfreeze(restored) # pytype: disable=wrong-arg-types + + if ckpt_prefix_path: + for p in ckpt_prefix_path: + restored = restored[p] + + if model_prefix_path: + for p in reversed(model_prefix_path): + restored = {p: restored} + + # Flatten nested parameters to a dict of str -> tensor. Keys are tuples + # from the path in the nested dictionary to the specific tensor. E.g., + # {'a1': {'b1': t1, 'b2': t2}, 'a2': t3} + # -> {('a1', 'b1'): t1, ('a1', 'b2'): t2, ('a2',): t3}. + restored_flat = flax.traverse_util.flatten_dict( + dict(restored), keep_empty_nodes=True) + model_flat = flax.traverse_util.flatten_dict( + dict(model), keep_empty_nodes=True) + + for m_key, m_params in restored_flat.items(): + # pytype: disable=attribute-error + for name, to_replace in name_mapping.items(): + m_key = tuple(to_replace if k == name else k for k in m_key) + # pytype: enable=attribute-error + m_key_str = '/'.join(m_key) + if m_key not in model_flat: + logging.warning('%s in checkpoint doesn\'t exist in model. Skip.', + m_key_str) + continue + if skip_regex and re.findall(skip_regex, m_key_str): + logging.info('Skip loading parameter %s.', m_key_str) + continue + logging.info('Loading %s from checkpoint into model', m_key_str) + model_flat[m_key] = m_params + + return flax.core.freeze(flax.traverse_util.unflatten_dict(model_flat)) + + +@struct.dataclass +class OptaxTrainState: + """Dataclass to keep track of state of training. + + The state of training is structured as a flax.struct.dataclass, which enables + instances of this class to be passed into jax transformations like tree_map + and pmap. + """ + + tx: Optional[optax.GradientTransformation] = struct.field(pytree_node=False) + opt_state: Optional[optax.OptState] = None + weights: Optional[Any] = None + model_state: Optional[Any] = None + global_step: Optional[int] = 0 + rng: Optional[jnp.ndarray] = None + metadata: Optional[Dict[str, Any]] = None + + def __getitem__(self, item): + """Make TrainState a subscriptable object.""" + return getattr(self, item) + + def get(self, keyname: str, default: Optional[Any] = None) -> Any: + """Return the value for key if it exists otherwise the default.""" + try: + return self[keyname] + except KeyError: + return default + + +def get_optim(optimizer_name: str, learning_rate_fn: Callable[[int], float], + wd: float): + """Returns list of operation for optax optimizer.""" + optim_ops = [] + if optimizer_name in ['sgd', 'momentum']: + if wd: + optim_ops.append(optax.add_decayed_weights(wd)) + if optimizer_name == 'sgd': + optim_ops.append(optax.sgd(learning_rate=learning_rate_fn, momentum=0)) # pytype: disable=wrong-arg-types # numpy-scalars + else: + optim_ops.append(optax.sgd(learning_rate=learning_rate_fn, momentum=0.9)) # pytype: disable=wrong-arg-types # numpy-scalars + elif optimizer_name == 'adamw': + optim_ops.append(optax.adamw(learning_rate=learning_rate_fn, # pytype: disable=wrong-arg-types # numpy-scalars + weight_decay=wd)) + elif optimizer_name == 'adafactor': + optim_ops.append(optax.adafactor(learning_rate=learning_rate_fn, # pytype: disable=wrong-arg-types # numpy-scalars + multiply_by_parameter_scale=False, + momentum=0.9, + decay_rate=0.999, + weight_decay_rate=wd)) + else: + logging.info('Unknown optimizer "%s"', optimizer_name) + return optim_ops + + +def build_optimizer(config: ml_collections.ConfigDict, params: PyTree): + """Builds optimizer.""" + # Defaults + wd = config.get('weight_decay', 0) + optimizer_name = config.get('optimizer', 'sgd') + lr_config = config.get('lr_configs', + ml_collections.ConfigDict({'factors': ''})) + optim_ops = get_optim( + optimizer_name, lr_schedules.compound_lr_scheduler(lr_config), wd) + + if config.get('multi_optim', False): + # Define the multiple optimizers. + transforms = {'default': optax.chain(*optim_ops)} + for sub_optim_name in config.multi_optim_configs.strings: + sub_optim_ops = get_optim( + config.get('optimizer_' + sub_optim_name, optimizer_name), + lr_schedules.compound_lr_scheduler(config.get('lr_' + sub_optim_name, + lr_config)), + config.get('weight_decay_' + sub_optim_name, wd), + ) + transforms[sub_optim_name] = optax.chain(*sub_optim_ops) + + # Combine optimizers. + def label_param(name): + for sub_optim_name in config.multi_optim_configs.strings: + if sub_optim_name in name: + return sub_optim_name + return 'default' + optim_ops = [optax.multi_transform( + transforms, optimizers.tree_map_with_names_values( + lambda _, name: label_param(name), params))] + + # Explicit freezing of some parts of the model. Note that freezing can also + # be done by setting learning rate to 0 with config.multi_optim set to True. + if config.get('freeze_video_encoder', False): + # Zero out updates for video encoder parameters. + mask = optimizers.tree_map_with_names_values( + lambda _, n: True if 'video_encoder' in n else False, params) + optim_ops.append(optax.masked(optax.set_to_zero(), mask)) + + if config.get('freeze_text_encoder', False): + # Zero out updates for text encoder parameters. + mask = optimizers.tree_map_with_names_values( + lambda _, n: True if 'text_encoder' in n else False, params) + optim_ops.append(optax.masked(optax.set_to_zero(), mask)) + + tx = optax.chain(*optim_ops) + opt_state = jax.jit(tx.init, backend='cpu')(params) + return tx, opt_state + + +def save_checkpoint(workdir: str, + train_state: OptaxTrainState, + max_to_keep: int = 3, + overwrite: bool = False, + keep_every_n_steps: int = 50000): + """Saves a checkpoint. + + First syncs the model state across replicas, then it unreplicates it by taking + the train state of the first replica and saves it as a checkpoint. + + Args: + workdir: Experiment directory for saving the checkpoint. + train_state: An instance of TrainState that holds the state of training. + max_to_keep: The number of checkpoints to keep. + overwrite: Overwrite existing checkpoint if a checkpoint + at the current or a later step already exits (default: False). + keep_every_n_steps: Keep every checkpoints every n steps. + """ + if jax.process_index() == 0: + # Get train state from the first replica. + checkpoint_state = jax.device_get(train_state) + checkpoints.save_checkpoint( + workdir, + checkpoint_state, + int(checkpoint_state.global_step), + overwrite=overwrite, + keep=max_to_keep, + keep_every_n_steps=keep_every_n_steps) + + +def restore_checkpoint(checkpoint_path: str, + train_state: Optional[OptaxTrainState] = None, + assert_exist: bool = False, + step: Optional[int] = None) -> Tuple[ + OptaxTrainState, int]: + """Restores the last checkpoint. + + First restores the checkpoint, which is an instance of TrainState that holds + the state of training. + + Args: + checkpoint_path: Directory to restore the checkpoint. + train_state: An instance of OptaxTrainState that holds the state of + training. + assert_exist: Assert that there is at least one checkpoint exists in + the given path. + step: Step number to load or None to load latest. If specified, + checkpoint_path must be a directory. + + Returns: + training state and an int which is the current step. + """ + if assert_exist: + glob_path = os.path.join(checkpoint_path, 'checkpoint_*') + if not gfile.glob(glob_path): + raise ValueError('No checkpoint for the pretrained model is found in: ' + f'{checkpoint_path}') + if train_state is None: + raise ValueError('Please use `restore_pretrained_checkpoint` for loading' + 'a checkpoint without providing a Scenic TrainState.') + train_state = checkpoints.restore_checkpoint(checkpoint_path, train_state, + step) + return train_state, int(train_state.global_step) + + +def pop_axes_names( + train_state: OptaxTrainState, + axes_name: str = 'param_axes') -> Tuple[OptaxTrainState, Optional[Any]]: + """Removes axes_names from model_state for a train state. + + Args: + train_state: Training state. + axes_name: the string specifying the name in the model_state + + Returns: + New train state without axes_names in model_state, axes_names metadata if it + was removed (so it can be re-added). + """ + model_state = train_state.model_state + if axes_name in train_state.model_state: + model_state, param_axes = frozen_dict.freeze(model_state).pop(axes_name) + return train_state.replace(model_state=model_state), param_axes + else: + return train_state, None + + +def re_add_axis_names(train_state: OptaxTrainState, + param_axes: Any, + axes_name: str = 'param_axes') -> OptaxTrainState: + """Adds axes_names to model_state for a train state. + + Args: + train_state: Training state. + param_axes: Model axes metadata to re-add. + axes_name: the string specifying the name in the model_state + + Returns: + New train state without axes_names in model_state, axes_names metadata if it + was removed (so it can be re-added). + """ + if param_axes: + model_state = frozen_dict.unfreeze(train_state.model_state) + model_state[axes_name] = param_axes + return train_state.replace(model_state=frozen_dict.freeze(model_state)) + else: + return train_state + + +def convert_strings_to_uint8_arrays(str_tensor, max_str_len=None): + """Convert string numpy array into uint8 arrays to transfer to TPUs. + + Given the input string array, outputs a uint8 tensor with an additional + dimension at the end with the size of max_str_len. + + Args: + str_tensor: The input string array. + max_str_len: The maximum number of characters to keep in the converted uint8 + array. If None, it is set to the longest string length in the input array. + + Returns: + Converted uint8 numpy array with an additional dim of size max_str_len. + """ + # Make sure that the input str_tensor is an np.ndarray of bytes not of object. + # An object array stores pointers only whereas a bytes array stores actual + # string bytes + str_tensor = np.array(str_tensor, dtype=bytes) + uint8_tensor = np.frombuffer(str_tensor, + np.uint8).reshape(str_tensor.shape + (-1,)) + if max_str_len: + to_pad = max(0, max_str_len - uint8_tensor.shape[-1]) + uint8_tensor = np.pad(uint8_tensor[..., :max_str_len], + [[0, 0]] * str_tensor.ndim + [[0, to_pad]]) + + return uint8_tensor + + +def compute_recall_at_k(video_embeddings, + text_embeddings, + k_values, + suffix='', + suffix_separator='_', + text_to_video_retrieval=True,): + """Compute text -> video retrieval recall at K. + + Args: + video_embeddings: shape [batch_size, d], or list of such shapes + text_embeddings: shape [batch_size, d] + k_values: Recall@K computed for different K ranks. + suffix: Suffix to add to the summary + suffix_separator: Separator before adding the suffix + text_to_video_retrieval: Text to video retrieval vs video to text retrieval + + Returns: + summary: Dictionary containing the recall@K for different K values. + """ + logits = compute_inner_product(video_embeddings, text_embeddings) + # Transpose logits from text - video retrieval + if text_to_video_retrieval: + logits = np.transpose(logits) + summary = {} + if suffix: + suffix = suffix_separator + suffix + # K x Batch_size + matches = np.zeros((len(k_values), logits.shape[0])) + + for i in range(logits.shape[0]): + logits_text_i = logits[i, :] + logits_argsorted = np.argsort(logits_text_i, axis=-1) + inners_indicator = (logits_argsorted == i) + for j, k in enumerate(k_values): # Over all captions for video i. + matches[j, i] = np.mean(np.any(inners_indicator[-k:], axis=-1)) + for matches_for_k, k in zip(matches, k_values): + summary[f'recall@{k}{suffix}'] = np.mean(matches_for_k) + + return summary + + +def compute_inners(encoded_video: jnp.ndarray, + encoded_text: jnp.ndarray, + axis_name: str = 'batch', + return_embeddings: bool = False): + """Computes the inner products between the videos and the text prompts. + + The videos and texts are first gathered across all devices over the given + axis name (should agree with the one given to the enclosing pmap). + We then normalize the tensors along the channel dimension. + + Args: + encoded_video: The encoded videos, shape [batch_size, t, d]. + encoded_text: The encoded text, shape [batch_size, t, n, d]. batch_size is + the num of samples in the batch, t is the number of test clips, n is the + number of captions per vid, can include context sentences. + axis_name: The axis over which the (all-)gather should be done. + return_embeddings: Whether to return the embeddings or not + + Returns: + A matrix with shape [global_batch_size, global_batch_size * n], s.t. + position [i, j] holds the inner product of the i'th video with the j%n-th + prompt of the j//n-th video. + """ + encoded_video = jax.lax.all_gather(encoded_video, axis_name) + encoded_text = jax.lax.all_gather(encoded_text, axis_name) + + # Merge batch_size and t into a single dimension + encoded_video = encoded_video.reshape((-1,) + encoded_video.shape[2:]) + encoded_text = encoded_text.reshape((-1,) + encoded_text.shape[2:]) + if return_embeddings: + return compute_inner_product( + encoded_video, encoded_text), encoded_video, encoded_text + else: + return compute_inner_product(encoded_video, encoded_text) + + +def compute_inner_product(encoded_video, encoded_text): + """Compute inner product between videos and text embeddings.""" + assert len(encoded_video.shape) == 2 # [batch_size, d] + logging.info('Shape of encoded text is %s', encoded_text.shape) + assert len(encoded_text.shape) == 3 or len(encoded_text.shape) == 2 + + # Shape is [batch_size, batch_size, n] + if len(encoded_text.shape) == 3: + inners = jnp.einsum('nd,mfd -> nmf', encoded_video, encoded_text) + # Reshaping to [batch_size, batch_size x n] + return inners.reshape((inners.shape[0], -1)) + return jnp.einsum('nd,md -> nm', encoded_video, encoded_text) + + +def get_representation( + train_state: OptaxTrainState, + video_inputs, text_indices, + flax_model: nn.Module) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Feeds the inputs to the model and returns their representations.""" + variables = {'params': train_state['weights'], **train_state['model_state']} + (encoded_video, encoded_text) = flax_model.apply( + variables, + video_inputs[0], + text_indices, + mutable=False, + train=False, + debug=False) + return encoded_video, encoded_text + + +def all_gather_and_unreplicate(tensor): + return flax.jax_utils.unreplicate( + jax.pmap(lambda x: jax.lax.all_gather(x, 'batch'), 'batch')(tensor)) + + +def convert_uint8_array_to_string(uint8_array): + return uint8_array.tobytes().rstrip(b'\x00').decode('utf-8') diff --git a/scenic/projects/verbs_in_action/vfc.png b/scenic/projects/verbs_in_action/vfc.png new file mode 100644 index 0000000000000000000000000000000000000000..629f1ce1e4d202b987f65e8c8da74268dece2fd0 --- /dev/null +++ b/scenic/projects/verbs_in_action/vfc.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdfa509441d9f145fc926f7eb2cc0e12fc29164b35098114385fdd1ecc79b504 +size 602234 diff --git a/scenic/projects/vid2seq/README.md b/scenic/projects/vid2seq/README.md new file mode 100644 index 0000000000000000000000000000000000000000..eb4bd21c45fa1ea930282244d3691c03a8ce741a --- /dev/null +++ b/scenic/projects/vid2seq/README.md @@ -0,0 +1,89 @@ +# Repository for Vid2Seq: Large-Scale Pretraining of a Visual Language Model for Dense Video Captioning + +### [Project Page](https://antoyang.github.io/vid2seq.html) | [arXiv](https://arxiv.org/abs/2302.14115) + + + +## What is Vid2Seq? + +Vid2Seq is a single-stage dense video captioning model, pre-trained on narrated videos introduced in ["Vid2Seq: Large-Scale Pretraining of a Visual Language Model for Dense Video Captioning"](https://antoyang.github.io/vid2seq.html). +The model takes frames and transcribed speech from an untrimmed minutes-long video as input, and outputs dense event captions together with their temporal localization in the video by predicting a single sequence of tokens. +Pre-training is done with a generative and a denoising objective exploiting transcribed speech as pseudo dense event captioning supervision, using millions of narrated videos from YT-Temporal-1B. +More details can be found in the [paper](https://arxiv.org/abs/2302.14115) published at CVPR 2023. + +## Datasets + +Vid2Seq achieves state-of-the-art on standard dense event captioning benchmarks, including ActivityNet-Captions, YouCook2 and ViTT. +Vid2Seq also generalizes well to video paragraph captioning (ActivityNet-Captions, YouCook2) and the standard task of video clip captioning (MSR-VTT, MSVD). +We release the code for pretraining on YT-Temporal-1B and downstream adaptation to ActivityNet-Captions and YouCook2. +We also plan to release the corresponding pretrained model checkpoints soon. + +## Training + +The following command will install the required packages for Vid2Seq: +```shell +$ pip install -r scenic/projects/vid2seq/requirements.txt +``` + +Note that because this project relies on Scenic `train_lib_deprecated`, you need to downgrade your version of [Flax](https://github.com/google/flax) to 0.5 for compatibility. + +For evaluation, you need to download captioning metrics files from [this repository](https://github.com/antoyang/captioning-metrics) and put them in the `metrics` folder. Note you will also need to download JAVA and specify the location to your Jre java bin in the [main](main.py) file. + +Like other projects in Scenic, all model parameters, training sets and datasets are specified using [configuration files](configs). + +To train a model, please download a pretrained T5.1.1 Base model from [T5X](https://github.com/google-research/t5x) and specify its path in [Scenic T5](https://github.com/google-research/scenic/tree/main/scenic/projects/t5). + +Additionally, preprocess the dataset in the similar way as done by the ViViT project [here](https://github.com/google-research/scenic/tree/main/scenic/projects/vivit/data/data.md). +You may use the provided `generate_from_file.py` preprocessing script that handles dense captioning annotations. +There is no need to specify the number of classes in the config. +The column names of the csv file should look like the following: + +| Column name | Description | Optional | +| ---------------------- | -------------------------------------------------- | -------- | +| video_id | the video id | No | +| duration | the duration of the video (in microseconds) | No | +| caption | the list of event captions | No | +| start | the list of event start times (in microseconds) | No | +| end | the list of event end times (in microseconds) | No | +| asr_string | the list of ASR sentences | No | +| asr_start | the list of ASR start times (in microseconds) | No | +| asr_end | the list of ASR end times (in microseconds) | No | +| features | CLIP ViT-L/14 @ 224px at 1FPS features | No | + +We obtained ASR sentences and corresponding temporal boundaries directly from [the Google Cloud API](https://cloud.google.com/speech-to-text/docs/automatic-punctuation), but they can also be obtained by applying an off-the-shelf punctuation model to the downloaded raw ASR data (as done in [this project](https://github.com/antoyang/just-ask) for instance). +Also note that spatially-pooled CLIP ViT-L/14 @ 224px features must be extracted at 1FPS (as done in [this project](https://github.com/antoyang/FrozenBiLM)) and added to the column name `image/clip_embeddings`. +Finally, for pretraining on YT-Temporal-1B, there is no need to prepare the columns related to the dense event captioning annotations, and features can be stored in individual files instead of directly in the csv file given the size of the dataset (see `generate_from_file.py`). + +An example command-line to train Vid2Seq on YouCook2 with [config file](configs/youcook2.py) is + +```shell +$ python -m scenic.projects.vid2seq.main \ + --config=scenic/projects/vid2seq/configs/youcook2.py \ + --workdir=vid2seq_base/ +``` + + +## Model Zoo + +We release select pretrained Vid2Seq models trained under different settings. Checkpoints are provided as Scenic checkpoints compatible with [Flax](https://github.com/google/flax). +Note that numbers are likely to fluctuate slightly as the test sets vary when videos are taken down. + + +| Model | Dataset | SODA | Checkpoint | +|:------------:|:-----------:|:---:|:----------------------------------------------------------------------------------------------------------------:| +| Vid2Seq | YT-Temporal-1B | --- | [Checkpoint](https://storage.googleapis.com/scenic-bucket/vid2seq/yt-temporal-1b) | +| Vid2Seq | YT-Temporal-1B + ActivityNet-Captions | 5.8 | [Checkpoint](https://storage.googleapis.com/scenic-bucket/vid2seq/anet-captions) | +| Vid2Seq | YT-Temporal-1B + YouCook2 | 7.7 | [Checkpoint](https://storage.googleapis.com/scenic-bucket/vid2seq/youcook-2) | + +## Citation + +If you use Vid2Seq, please use the following BibTeX entry. + +``` +@inproceedings{yang2023vid2seq, + title={Vid2Seq: Large-Scale Pretraining of a Visual Language Model for Dense Video Captioning}, + author={Yang, Antoine and Nagrani, Arsha and Seo, Paul Hongsuck and Miech, Antoine and Pont-Tuset, Jordi and Laptev, Ivan and Sivic, Josef and Schmid, Cordelia}, + booktitle={CVPR}, + year={2023} +} +``` diff --git a/scenic/projects/vid2seq/__init__.py b/scenic/projects/vid2seq/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/vid2seq/configs/__init__.py b/scenic/projects/vid2seq/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/vid2seq/configs/activitynet-captions.py b/scenic/projects/vid2seq/configs/activitynet-captions.py new file mode 100644 index 0000000000000000000000000000000000000000..212b46e7a527fbdacc937b0acb11e3e6f430b21e --- /dev/null +++ b/scenic/projects/vid2seq/configs/activitynet-captions.py @@ -0,0 +1,197 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import ml_collections + +ACTIVITYNET_TRAIN_SIZE = 8649 # Number of videos + + +def get_config(runlocal=''): + """Returns the base experiment configuration.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.token_loss_coef = 1. + config.runlocal = runlocal + config.experiment_name = 'activitynet' + + config.count_flops = False # if runlocal else ml_collections.ConfigDict({'count_flops': True}) + + # dataset + config.dataset_name = 'dense_video_captioning' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.corrupt = 0. + config.dataset_configs.span_len = 3. + config.dataset_configs.preserve = True + config.dataset_configs.corrupt_coef = 0. + config.dataset_configs.proba_corrupt = 0. + notime = ml_collections.config_dict.FieldReference(False) + config.dataset_configs.notime = notime + config.dataset_configs.abs_time_token = False + config.dataset_configs.random_temporal_crop_proba = 0. + config.dataset_configs.time_format = 'se' + tmp_only = ml_collections.config_dict.FieldReference(False) + config.dataset_configs.tmp_only = tmp_only + config.dataset_configs.split = not runlocal + order = ml_collections.config_dict.FieldReference('ld') + config.dataset_configs.order = order + config.dataset_configs.from_xm = None + + config.data_dtype_str = 'float32' + + config.dataset_configs.base_dir = '/path/to/activitynet' + config.dataset_configs.tables = { + 'train': 'train.tfrecord.sst@64', + 'validation': 'val.tfrecord.sst@64', + } + config.dataset_configs.examples_per_subset = { + 'train': 8649, + 'validation': 4267, + } + + # List of modalities to load, supports `features` only for now. + # Note that it only specifies which modalities to load, not which to use, + # which is controlled by config.model.modality_fusion + config.dataset_configs.modalities = ('features', 'text') + config.dataset_configs.features_dim = 768 + config.dataset_configs.return_as_dict = True + num_frames = ml_collections.config_dict.FieldReference(100) + config.dataset_configs.num_frames = num_frames + num_bins = ml_collections.config_dict.FieldReference(100) + config.dataset_configs.num_bins = num_bins + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + config.dataset_configs.val_on_test = False + config.dataset_configs.num_eval_clips = 1 + config.dataset_configs.prefetch_to_device = 2 + + # Text params + config.dataset_configs.max_num_output_words = 256 + config.dataset_configs.max_num_input_words = 1000 + config.dataset_configs.tokenizer = ml_collections.ConfigDict() + config.dataset_configs.tokenizer.tokenizer_type = 'sentence_piece' + config.dataset_configs.caption_string = 'caption/string' + config.dataset_configs.train_caption_string = 'caption/string' + config.dataset_configs.input_timestamp_name = 'video/timestamps' + config.dataset_configs.input_duration_name = 'video/duration' + config.dataset_configs.output_raw_timestamp_name = 'timestamp' + config.dataset_configs.output_raw_duration_name = 'duration' + config.dataset_configs.input_feature_name = 'image/clip_embeddings' + config.dataset_configs.output_raw_feature_name = 'features' + config.dataset_configs.vocabulary_size = 32128 + config.dataset_configs.max_events = 15 if runlocal else 30 + config.dataset_configs.asr_notime = False + config.datasets = {'activitynet': config.dataset_configs} + + # Decoding + config.decoding = ml_collections.ConfigDict() + config.decoding.decoding_method = 'beamsearch' + config.decoding.num_decodes = 4 + config.decoding.alpha = 0.6 + config.decoding.temperature = 1. + + # Model + config.model_name = 'vid2seq' + config.model = ml_collections.ConfigDict() + config.model.from_xm = None + + # Encoder configs + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.share_encoder = True + config.model.encoder.encoder_type = 'cat_encoder' + config.model.encoder.cat_encoder = ml_collections.ConfigDict() + config.model.encoder.cat_encoder.dim = 2048 + config.model.encoder.cat_encoder.layers = 12 + config.model.encoder.cat_encoder.heads = 12 + config.model.encoder.cat_encoder.pos_embed = 'learned_1d' + config.model.encoder.cat_encoder.dropout_rate = 0. + config.model.encoder.cat_encoder.t5_dropout_rate = 0. + config.model.encoder.cat_encoder.stochastic_depth = 0. + config.model.encoder.cat_encoder.pretrained_config = 't5_1_1_base' + config.model.encoder.from_xm = None + + # Decoder configs + config.model.decoder_type = 't5_decoder' + config.model.decoder = ml_collections.ConfigDict() + config.model.decoder.order = order + config.model.decoder.t5_decoder = ml_collections.ConfigDict() + config.model.decoder.t5_decoder.logits_via_embedding = False + config.model.decoder.t5_decoder.dropout_rate = 0.1 + config.model.decoder.t5_decoder.num_frames = num_frames + config.model.decoder.notime = notime + config.model.decoder.num_bins = num_bins + config.model.decoder.tmp_only = tmp_only + config.model.decoder.t5_decoder.pretrained_config = 't5_1_1_base' + + # Initalisation configs + config.init_from = ml_collections.ConfigDict() + # Replace with your checkpoint pretrained on YT-temporal-1bn, assuming it has + # been trained for 200K iterations + config.init_from.checkpoint_path = 'path_to_checkpoint_pretrained_on_yt_temporal_1bn' + config.init_from.model_config = 'path_to_yt_temporal_1bn_config' + config.init_from.step = 200000 + + config.init_from.encoder = ml_collections.ConfigDict() + config.init_from.encoder.checkpoint_path = None + config.init_from.encoder.init_from_vit = False + config.init_from.encoder = ml_collections.ConfigDict() + config.init_from.encoder.load_pretrained_weights = True + + config.init_from.decoder = ml_collections.ConfigDict() + config.init_from.decoder.load_pretrained_weights = True + + config.init_from.t5 = ml_collections.ConfigDict() + config.init_from.t5.load_pretrained_weights = True + + # Training + config.trainer_name = 'densevidcap_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.weight_decay = 0. + config.l2_decay_factor = 0. + config.max_grad_norm = 1. + config.label_smoothing = 0.1 + epochs = ml_collections.config_dict.FieldReference(20) + config.num_training_epochs = epochs + batch_size = ml_collections.config_dict.FieldReference(32) + config.batch_size = 1 if runlocal else batch_size # 128 # Minimum is num_devices = 32 + config.eval_batch_size = 1 if runlocal else 32 # Needs to be num_local_devices + config.rng_seed = 0 + + # Learning schedule. + steps_per_epoch = 3 if runlocal else ACTIVITYNET_TRAIN_SIZE // batch_size + total_steps = epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = total_steps // 10 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.total_steps = total_steps + config.lr_configs.base_learning_rate = 3e-4 + + config.eval_metrics = ['cider', 'meteor', 'soda'] + + # Logging + config.log_eval_steps = steps_per_epoch # write TB and/or XM summary + config.log_summary_steps = steps_per_epoch # write TB and/or XM summary + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.xprof = True # Profile using xprof + config.checkpoint = True # do checkpointing + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + return config + diff --git a/scenic/projects/vid2seq/configs/youcook2.py b/scenic/projects/vid2seq/configs/youcook2.py new file mode 100644 index 0000000000000000000000000000000000000000..728567547e90455bb8ad113c922a126b82b9e8eb --- /dev/null +++ b/scenic/projects/vid2seq/configs/youcook2.py @@ -0,0 +1,196 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import ml_collections + +YOUCOOK_TRAIN_SIZE = 1333 # Number of videos + + +def get_config(runlocal=''): + """Returns the base experiment configuration.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.token_loss_coef = 1. + config.runlocal = runlocal + config.experiment_name = 'youcook' + + config.count_flops = False # if runlocal else ml_collections.ConfigDict({'count_flops': True}) + + # dataset + config.dataset_name = 'dense_video_captioning' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.corrupt = 0. + config.dataset_configs.span_len = 3. + config.dataset_configs.preserve = True + config.dataset_configs.corrupt_coef = 0. + config.dataset_configs.proba_corrupt = 0. + notime = ml_collections.config_dict.FieldReference(False) + config.dataset_configs.notime = notime + config.dataset_configs.abs_time_token = False + config.dataset_configs.random_temporal_crop_proba = 0.5 + config.dataset_configs.time_format = 'se' + tmp_only = ml_collections.config_dict.FieldReference(False) + config.dataset_configs.tmp_only = tmp_only + config.dataset_configs.split = False + order = ml_collections.config_dict.FieldReference('ld') + config.dataset_configs.order = order + config.dataset_configs.from_xm = None + + config.data_dtype_str = 'float32' + + config.dataset_configs.base_dir = '/path/to/youcook' + config.dataset_configs.tables = { + 'train': 'train.tfrecord.sst@64', + 'validation': 'val.tfrecord.sst@64', + } + config.dataset_configs.examples_per_subset = { + 'train': 1333, + 'validation': 457, + } + + # List of modalities to load, supports `features` only for now. + # Note that it only specifies which modalities to load, not which to use, + # which is controlled by config.model.modality_fusion + config.dataset_configs.modalities = ('features', 'text') + config.dataset_configs.features_dim = 768 + config.dataset_configs.return_as_dict = True + num_frames = ml_collections.config_dict.FieldReference(100) + config.dataset_configs.num_frames = num_frames + num_bins = ml_collections.config_dict.FieldReference(100) + config.dataset_configs.num_bins = num_bins + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + config.dataset_configs.val_on_test = False + config.dataset_configs.num_eval_clips = 1 + config.dataset_configs.prefetch_to_device = 2 + + # Text params + config.dataset_configs.max_num_output_words = 256 + config.dataset_configs.max_num_input_words = 1000 + config.dataset_configs.tokenizer = ml_collections.ConfigDict() + config.dataset_configs.tokenizer.tokenizer_type = 'sentence_piece' + config.dataset_configs.caption_string = 'caption/string' + config.dataset_configs.train_caption_string = 'caption/string' + config.dataset_configs.input_timestamp_name = 'video/timestamps' + config.dataset_configs.input_duration_name = 'video/duration' + config.dataset_configs.output_raw_timestamp_name = 'timestamp' + config.dataset_configs.output_raw_duration_name = 'duration' + config.dataset_configs.input_feature_name = 'image/clip_embeddings' + config.dataset_configs.output_raw_feature_name = 'features' + config.dataset_configs.vocabulary_size = 32128 + config.dataset_configs.max_events = 20 + config.dataset_configs.asr_notime = False + config.datasets = {'youcook': config.dataset_configs} + + # Decoding + config.decoding = ml_collections.ConfigDict() + config.decoding.decoding_method = 'beamsearch' + config.decoding.num_decodes = 4 + config.decoding.alpha = 0.6 + config.decoding.temperature = 1. + + # Model + config.model_name = 'vid2seq' + config.model = ml_collections.ConfigDict() + config.model.from_xm = None + + # Encoder configs + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.share_encoder = True + config.model.encoder.encoder_type = 'cat_encoder' + config.model.encoder.cat_encoder = ml_collections.ConfigDict() + config.model.encoder.cat_encoder.dim = 2048 + config.model.encoder.cat_encoder.layers = 12 + config.model.encoder.cat_encoder.heads = 12 + config.model.encoder.cat_encoder.pos_embed = 'learned_1d' + config.model.encoder.cat_encoder.dropout_rate = 0. + config.model.encoder.cat_encoder.t5_dropout_rate = 0.1 + config.model.encoder.cat_encoder.stochastic_depth = 0. + config.model.encoder.cat_encoder.pretrained_config = 't5_1_1_base' + config.model.encoder.from_xm = None + + # Decoder configs + config.model.decoder_type = 't5_decoder' + config.model.decoder = ml_collections.ConfigDict() + config.model.decoder.order = order + config.model.decoder.t5_decoder = ml_collections.ConfigDict() + config.model.decoder.t5_decoder.logits_via_embedding = False + config.model.decoder.t5_decoder.dropout_rate = 0.1 + config.model.decoder.t5_decoder.num_frames = num_frames + config.model.decoder.notime = notime + config.model.decoder.num_bins = num_bins + config.model.decoder.tmp_only = tmp_only + config.model.decoder.t5_decoder.pretrained_config = 't5_1_1_base' + + # Initalisation configs + config.init_from = ml_collections.ConfigDict() + # Replace with your checkpoint pretrained on YT-temporal-1bn, assuming it has + # been trained for 200K iterations + config.init_from.checkpoint_path = 'path_to_checkpoint_pretrained_on_yt_temporal_1bn' + config.init_from.model_config = 'path_to_yt_temporal_1bn_config' + config.init_from.step = 200000 + + config.init_from.encoder = ml_collections.ConfigDict() + config.init_from.encoder.checkpoint_path = None + config.init_from.encoder.init_from_vit = False + config.init_from.encoder = ml_collections.ConfigDict() + config.init_from.encoder.load_pretrained_weights = True + + config.init_from.decoder = ml_collections.ConfigDict() + config.init_from.decoder.load_pretrained_weights = True + + config.init_from.t5 = ml_collections.ConfigDict() + config.init_from.t5.load_pretrained_weights = True + + # Training + config.trainer_name = 'densevidcap_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.weight_decay = 0. + config.l2_decay_factor = 0. + config.max_grad_norm = 1. + config.label_smoothing = 0.1 + epochs = ml_collections.config_dict.FieldReference(40) + config.num_training_epochs = epochs + batch_size = ml_collections.config_dict.FieldReference(32) + config.batch_size = 8 if runlocal else batch_size # 128 # Minimum is num_devices = 32 + config.eval_batch_size = 8 if runlocal else 32 # Needs to be num_local_devices + config.rng_seed = 0 + + # Learning schedule. + steps_per_epoch = 3 if runlocal else YOUCOOK_TRAIN_SIZE // batch_size + total_steps = epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = total_steps // 10 + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.total_steps = total_steps + config.lr_configs.base_learning_rate = 3e-4 + + config.eval_metrics = ['cider', 'meteor', 'soda'] + + # Logging + config.log_eval_steps = steps_per_epoch # write TB and/or XM summary + config.log_summary_steps = steps_per_epoch # write TB and/or XM summary + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.xprof = True # Profile using xprof + config.checkpoint = True # do checkpointing + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + return config diff --git a/scenic/projects/vid2seq/configs/yttemporal.py b/scenic/projects/vid2seq/configs/yttemporal.py new file mode 100644 index 0000000000000000000000000000000000000000..ae5773f912228166623d2711c3b43fee618dc38c --- /dev/null +++ b/scenic/projects/vid2seq/configs/yttemporal.py @@ -0,0 +1,198 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import ml_collections + + +def get_config(runlocal=''): + """Returns the base experiment configuration.""" + + runlocal = bool(runlocal) + + config = ml_collections.ConfigDict() + config.token_loss_coef = 1. + config.runlocal = runlocal + config.experiment_name = 'ytt' + + config.count_flops = False if runlocal else ml_collections.ConfigDict( + {'count_flops': True}) + + # dataset + config.dataset_name = 'dense_video_captioning' + config.dataset_configs = ml_collections.ConfigDict() + config.dataset_configs.corrupt = 0.25 + config.dataset_configs.span_len = 5. + config.dataset_configs.proba_corrupt = 1. + config.dataset_configs.corrupt_coef = 1. + config.dataset_configs.preserve = False + notime = ml_collections.config_dict.FieldReference(False) + config.dataset_configs.notime = notime + config.dataset_configs.abs_time_token = False + config.dataset_configs.random_temporal_crop_proba = 1. + config.dataset_configs.time_format = 'se' + tmp_only = ml_collections.config_dict.FieldReference(False) + config.dataset_configs.tmp_only = tmp_only + config.dataset_configs.split = not runlocal + order = ml_collections.config_dict.FieldReference('ld') + config.dataset_configs.order = order + config.dataset_configs.from_xm = None + + config.data_dtype_str = 'float32' + + config.dataset_configs.base_dir = '/' + config.dataset_configs.base_dir = '/path/to/yttemporal' + config.dataset_configs.tables = { + 'train': 'train.tfrecord.sst@1024', + } + config.dataset_configs.examples_per_subset = { + 'train': 14780275, + } + + # List of modalities to load, supports `features` only for now. + # Note that it only specifies which modalities to load, not which to use, + # which is controlled by config.model.modality_fusion + config.dataset_configs.modalities = ('features', 'text') + config.dataset_configs.features_dim = 768 + config.dataset_configs.return_as_dict = True + num_frames = ml_collections.config_dict.FieldReference(100) + config.dataset_configs.num_frames = num_frames + num_bins = ml_collections.config_dict.FieldReference(100) + config.dataset_configs.num_bins = num_bins + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + config.dataset_configs.val_on_test = False + config.dataset_configs.num_eval_clips = 1 + config.dataset_configs.prefetch_to_device = 2 + + # Text params + config.dataset_configs.max_num_output_words = 1000 + config.dataset_configs.max_num_input_words = 1000 + config.dataset_configs.tokenizer = ml_collections.ConfigDict() + config.dataset_configs.tokenizer.tokenizer_type = 'sentence_piece' + config.dataset_configs.caption_string = 'ASR/segment/label/string' + config.dataset_configs.train_caption_string = 'ASR/segment/label/string' + config.dataset_configs.input_timestamp_start_name = 'ASR/segment/start/timestamp' + config.dataset_configs.input_timestamp_end_name = 'ASR/segment/end/timestamp' + config.dataset_configs.input_duration_name = 'video/duration' + config.dataset_configs.output_raw_timestamp_name = 'timestamp' + config.dataset_configs.output_raw_duration_name = 'duration' + config.dataset_configs.input_feature_name = 'image/clip_embeddings' + config.dataset_configs.output_raw_feature_name = 'features' + config.dataset_configs.vocabulary_size = 32128 + config.dataset_configs.max_events = 1100 + config.dataset_configs.max_segments = 0 + config.datasets = {'ytt': config.dataset_configs} + + # Decoding + config.decoding = ml_collections.ConfigDict() + config.decoding.decoding_method = 'beamsearch' + config.decoding.num_decodes = 4 + config.decoding.alpha = 0.6 + config.decoding.temperature = 1. + + # Model + config.model_name = 'vid2seq' + config.model = ml_collections.ConfigDict() + config.model.from_xm = None + + # Encoder configs + config.model.encoder = ml_collections.ConfigDict() + config.model.encoder.share_encoder = True + config.model.encoder.encoder_type = 'cat_encoder' + config.model.encoder.cat_encoder = ml_collections.ConfigDict() + config.model.encoder.cat_encoder.dim = 2048 + config.model.encoder.cat_encoder.layers = 12 + config.model.encoder.cat_encoder.heads = 12 + config.model.encoder.cat_encoder.pos_embed = 'learned_1d' + config.model.encoder.cat_encoder.dropout_rate = 0.1 + config.model.encoder.cat_encoder.t5_dropout_rate = 0.1 + config.model.encoder.cat_encoder.stochastic_depth = 0. + config.model.encoder.cat_encoder.pretrained_config = 't5_1_1_base' + config.model.encoder.from_xm = None + + # Decoder configs + config.model.decoder_type = 't5_decoder' + config.model.decoder = ml_collections.ConfigDict() + config.model.decoder.order = order + config.model.decoder.t5_decoder = ml_collections.ConfigDict() + config.model.decoder.t5_decoder.logits_via_embedding = False + config.model.decoder.t5_decoder.dropout_rate = 0.1 + config.model.decoder.t5_decoder.num_frames = num_frames + config.model.decoder.notime = notime + config.model.decoder.num_bins = num_bins + config.model.decoder.tmp_only = tmp_only + # Obtained from scenic/projects/t5/model.py. + config.model.decoder.t5_decoder.pretrained_config = 't5_1_1_base' + + config.model.tmp_decoder_type = 't5_decoder' + config.model.tmp_decoder = ml_collections.ConfigDict() + config.model.tmp_decoder.t5_decoder = ml_collections.ConfigDict() + config.model.tmp_decoder.t5_decoder.logits_via_embedding = False + config.model.tmp_decoder.t5_decoder.dropout_rate = 0. + config.model.tmp_decoder.t5_decoder.pretrained_config = 't5_1_1_base' + config.model.decoder.t5_decoder.local = 5 + + # Initalisation configs + config.init_from = ml_collections.ConfigDict() + config.init_from.step = None + config.init_from.xm = None + + config.init_from.encoder = ml_collections.ConfigDict() + config.init_from.encoder.checkpoint_path = None + config.init_from.encoder.init_from_vit = False + config.init_from.encoder = ml_collections.ConfigDict() + config.init_from.encoder.load_pretrained_weights = True + + config.init_from.decoder = ml_collections.ConfigDict() + config.init_from.decoder.load_pretrained_weights = True + + config.init_from.t5 = ml_collections.ConfigDict() + config.init_from.t5.load_pretrained_weights = True + + # Training + config.trainer_name = 'densevidcap_trainer' + config.optimizer = 'adam' + config.optimizer_configs = ml_collections.ConfigDict() + config.optimizer_configs.weight_decay = 0. + config.l2_decay_factor = 0. + config.max_grad_norm = 0.1 + config.label_smoothing = 0.1 + epochs = ml_collections.config_dict.FieldReference(10) + config.num_training_epochs = epochs + batch_size = ml_collections.config_dict.FieldReference(512) + config.batch_size = 1 if runlocal else batch_size # 128 # Minimum is num_devices = 32 + config.eval_batch_size = 1 if runlocal else 128 # Needs to be num_local_devices + config.rng_seed = 0 + + # Learning schedule. + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * linear_warmup' + config.lr_configs.warmup_steps = 1000 + config.lr_configs.base_learning_rate = 1e-4 + + config.eval_metrics = ['cider', 'meteor', 'soda'] + + # Logging + config.log_summary_steps = 500 # write TB and/or XM summary + config.checkpoint_steps = 5000 + config.log_eval_steps = 5000 + config.write_summary = True # write TB and/or XM summary + config.write_xm_measurements = True # write XM measurements + config.xprof = True # Profile using xprof + config.checkpoint = True # do checkpointing + config.debug_train = False # debug mode during training + config.debug_eval = False # debug mode during eval + return config diff --git a/scenic/projects/vid2seq/data_utils.py b/scenic/projects/vid2seq/data_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..d9b515fed4008c0fcd2ad37f79aadda5120d6ad0 --- /dev/null +++ b/scenic/projects/vid2seq/data_utils.py @@ -0,0 +1,715 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utils for dense video captioning data loading.""" + +import functools +from typing import Any, Mapping, Optional, Union + +from dmvr import builders +from dmvr import processors +from dmvr import tokenizers +import gin +from t5.data.preprocessors import DenoiseInputsFn +from t5.data.preprocessors import DenoiseNoiseMaskFn +from t5.data.preprocessors import DenoiseTargetsFn +from t5.data.preprocessors import random_spans_noise_mask +import tensorflow as tf + + +PyTree = Union[Mapping[str, Mapping], Any] +FeatureType = Mapping[str, tf.Tensor] + + +def timestampify(start: tf.Tensor, + end: tf.Tensor, + duration: tf.Tensor, + abs_time_token: bool, + num_bins: int, + vocabulary_size: int, + time_format: str, + t: int = 1000000): + """Tokenizes timestamps. + + Args: + start: Start times of the events. + end: End times of the events. + duration: Duration of the video. + abs_time_token: Whether to use absolute (vs relative) time tokens. + num_bins: Number of quantization bins for time tokens. + vocabulary_size: Number of text tokens. + time_format: st for start-end or cd for center-duration. + t: FPS * 1000000 + + Returns: + Tensor of start+end time tokens for each event. + """ + + if time_format == 'cd': + timestamp = tf.stack([(start + end) // 2, end - start], axis=1) + else: + timestamp = tf.stack([start, end], axis=1) + timestamp = tf.minimum(timestamp, duration) + + if not abs_time_token: # relative time token + max_offset = tf.cast(num_bins - 1, tf.float64) + rel_timestamp = tf.math.divide(timestamp, duration) + timestamp_token = tf.math.add(tf.math.multiply(rel_timestamp, max_offset), + vocabulary_size) + timestamp_token = tf.cast(timestamp_token, tf.int32) + + else: # absolute time token + timestamp_token = tf.math.add( + tf.cast(timestamp / t, tf.int32), vocabulary_size) + + return timestamp_token + + +def merge_cap_time_tokens(caption_tokens, timestamp_token, order): + """Merge tensors of time and text tokens into a single tensor. + + Args: + caption_tokens: Tensor of text tokens for each event. + timestamp_token: Tensor of time tokens for each event. + order: ld for time tokens first, dl for text tokens first. + + Returns: + Tensor of text and time tokens for each event. + """ + + if order == 'ld': + seq = tf.concat( + [ + caption_tokens[:, :1], # BOS + timestamp_token, # timestamp + caption_tokens[:, 1:-2] + ], # caption + axis=1) + else: + seq = tf.concat( + [ + caption_tokens[:, :-2], # caption + timestamp_token + ], # timestamp + axis=1) + return seq + + +@gin.configurable() +def sentinel_id(vocabulary_size, return_value=None): + """T5-style preprocessing.""" + if return_value is not None: + return return_value + return vocabulary_size - 1 + + +@gin.configurable() +def noise_span_to_unique_sentinel(tokens, noise_mask, vocabulary_size, seeds): + """T5-style preprocessing.""" + del seeds + + prev_token_is_noise = tf.pad(noise_mask[:-1], [[1, 0]]) + + first_noise_tokens = tf.logical_and( + noise_mask, tf.logical_not(prev_token_is_noise)) + subsequent_noise_tokens = tf.logical_and(noise_mask, prev_token_is_noise) + + sentinel = sentinel_id(vocabulary_size) + 1 - tf.cumsum( + tf.cast(first_noise_tokens, tokens.dtype)) + + tokens = tf.where(first_noise_tokens, sentinel, tokens) + return tf.boolean_mask(tokens, tf.logical_not(subsequent_noise_tokens)) + + +@gin.configurable() +def nonnoise_span_to_unique_sentinel(tokens, noise_mask, vocabulary_size, + seeds): + """T5-style preprocessing.""" + return noise_span_to_unique_sentinel(tokens, tf.logical_not(noise_mask), + vocabulary_size, seeds) + + +def single_example_denoise(tokens: tf.Tensor, vocabulary_size: int, + noise_density: float, + noise_mask_fn: DenoiseNoiseMaskFn, + inputs_fn: DenoiseInputsFn, + targets_fn: DenoiseTargetsFn) -> FeatureType: + """T5-style preprocessing.""" + seed = tf.random.uniform([2], minval=0, maxval=2**16, dtype=tf.dtypes.int32, + seed=None, name=None) + seeds = tf.unstack(tf.random.experimental.stateless_split(seed, 6)) + noise_mask = noise_mask_fn(tf.size(tokens), noise_density, seeds=seeds[:2]) + inputs = inputs_fn(tokens, noise_mask, vocabulary_size, seeds=seeds[2:4]) + targets = targets_fn(tokens, noise_mask, vocabulary_size, seeds=seeds[4:6]) + return { + 'inputs': inputs, + 'outputs': targets, + } + + +def add_text_with_timestamps( + parser_builder: builders.BaseParserBuilder, + preprocessor_builder: builders.PreprocessorBuilder, + tokenizer: tokenizers.TextTokenizer, + input_feature_name: str = 'caption/string', + input_timestamp_start_name: str = 'caption/timestamp/start', + input_timestamp_end_name: str = 'caption/timestamp/end', + input_duration_name: str = 'video/duration', + output_raw_timestamp_name: str = 'timestamp', + output_raw_duration_name: str = 'duration', + max_events: int = 50, + vocabulary_size: int = 32128, + num_bins: int = 100, + output_raw_string_name: str = builders.TEXT_FEATURE_NAME, + output_feature_name: str = builders.TEXT_INDICES_FEATURE_NAME, + prepend_bos: bool = True, + append_eos: bool = True, + keep_raw_string: bool = False, + max_num_tokens: Optional[int] = 128, + abs_time_token: bool = False, + time_format: str = 'se', + order: str = 'ld', + notime: bool = False, + asr_input: bool = True, + max_num_input_words: int = 512, + asr_raw_string_name: str = 'ASR/string', + asr_timestamp_name: str = 'ASR/timestamps', + corrupt: float = 0., + span_len: float = 3.0, + tmp_only: bool = False, + asr_notime: bool = False, + t: int = 1000000): + """Prepares data for Vid2Seq model. + + Args: + parser_builder: DMVR Parser builder. + preprocessor_builder: DMVR Preprocessor builder. + tokenizer: Text tokenizer. + input_feature_name: Field name for the captions. + input_timestamp_start_name: Field name for the start timestamps. + input_timestamp_end_name: Field name for the end timestamps. + input_duration_name: Field name for video duration. + output_raw_timestamp_name: Output key for the timestamps. + output_raw_duration_name: Output key for the duration. + max_events: Maximum number of events to consider. + vocabulary_size: Number of tokens of the text tokenizer. + num_bins: Number of quantization bins for time tokens. + output_raw_string_name: Output key for the captions. + output_feature_name: Output key for the caption tokens. + prepend_bos: Whether to put BOS at the start of the sequences. + append_eos: Whether to add EOS at the end of the sequences. + keep_raw_string: Whether to keep raw string in batch. + max_num_tokens: Maximum number of tokens for sequences. + abs_time_token: Whether to use absolute (vs relative) time tokens. + time_format: st for start-end or cd for center-duration. + order: ld for time tokens first, dl for text tokens first. + notime: Whether to use time tokens. + asr_input: Whether to use ASR as input. + max_num_input_words: Maximum number of tokens in ASR input. + asr_raw_string_name: Field name for input ASR text. + asr_timestamp_name: Field name for input ASR timestamps. + corrupt: Ratio of corruption for T5-style corrupted sequence. + span_len: Average length of corrupted spans for T5-style corrupted sequence. + tmp_only: Localization only mode. + asr_notime: Whether to use time tokens for ASR input. + t: FPS * 1000000 + + Returns: + Nothing, modifies DMVR builder inplace. + """ + + # Parse text indices. + if isinstance(parser_builder, builders.SequenceExampleParserBuilder): + parser_builder.parse_feature( + feature_name=input_feature_name, + feature_type=tf.io.VarLenFeature(dtype=tf.string), + output_name=output_raw_string_name, + is_context=True) + elif isinstance(parser_builder, builders.ExampleParserBuilder): + parser_builder.parse_feature( + feature_name=input_feature_name, + feature_type=tf.io.VarLenFeature(dtype=tf.string), + output_name=output_raw_string_name) + + # Parser builder for timestamps and video duration. + parser_builder.parse_feature( + feature_name=input_timestamp_start_name, + feature_type=tf.io.VarLenFeature(dtype=tf.int64), + output_name=output_raw_timestamp_name + '_start', + is_context=True) + parser_builder.parse_feature( + feature_name=input_timestamp_end_name, + feature_type=tf.io.VarLenFeature(dtype=tf.int64), + output_name=output_raw_timestamp_name + '_end', + is_context=True) + parser_builder.parse_feature( + feature_name=input_duration_name, + feature_type=tf.io.VarLenFeature(dtype=tf.int64), + output_name=output_raw_duration_name, + is_context=True) + + # Tokenize the text captions individually. + preprocessor_builder.add_fn( + fn=lambda x: processors.tokenize( # pylint: disable=g-long-lambda + x, tokenizer, output_raw_string_name, output_feature_name, + prepend_bos, append_eos, max_num_tokens, keep_raw_string), + fn_name=f'{output_feature_name}_tokenization') + + if asr_input: + # Parse ASR text indices. + if isinstance(parser_builder, builders.SequenceExampleParserBuilder): + parser_builder.parse_feature( + feature_name=asr_raw_string_name, + feature_type=tf.io.VarLenFeature(dtype=tf.string), + output_name='asr_string', + is_context=True) + elif isinstance(parser_builder, builders.ExampleParserBuilder): + parser_builder.parse_feature( + feature_name=asr_raw_string_name, + feature_type=tf.io.VarLenFeature(dtype=tf.string), + output_name='asr_string') + + # Parser builder for ASR timestamps. + parser_builder.parse_feature( + feature_name=asr_timestamp_name + '/start', + feature_type=tf.io.VarLenFeature(dtype=tf.int64), + output_name='asr_start', + is_context=True) + parser_builder.parse_feature( + feature_name=asr_timestamp_name + '/end', + feature_type=tf.io.VarLenFeature(dtype=tf.int64), + output_name='asr_end', + is_context=True) + + # Tokenize the ASR sentences individually. + preprocessor_builder.add_fn( + fn=lambda x: processors.tokenize( # pylint: disable=g-long-lambda + x, tokenizer, 'asr_string', 'asr_indices', + prepend_bos, append_eos, max_num_input_words, False), + fn_name='asr_indices_tokenization') + + def add_timestamp(batch): + # Tokenize timestamp and add these tokens to each caption. + + # Load batch. + duration = batch[output_raw_duration_name] + start = batch[output_raw_timestamp_name + '_start'] + end = batch[output_raw_timestamp_name + '_end'] + caption_tokens = batch[output_feature_name] + + # Truncate events. + start = start[:max_events] + end = end[:max_events] + caption_tokens = caption_tokens[:max_events] + + # Tokenize timestamps. + timestamp_token = timestampify( + start=start, + end=end, + duration=duration, + abs_time_token=abs_time_token, + num_bins=num_bins, + vocabulary_size=vocabulary_size, + time_format=time_format, + t=t) + + # Merge caption and time tokens. + if (not notime) and (not tmp_only): + seq = merge_cap_time_tokens(caption_tokens, timestamp_token, order) + elif notime: # only consider caption tokens + seq = caption_tokens + elif tmp_only: # only consider time tokens + seq = timestamp_token + seq -= 32126 + + # Prepare timestamp for ASR. + if asr_input: + asr_start = batch['asr_start'] + asr_end = batch['asr_end'] + asr_tokens = batch['asr_indices'] + asr_stamp_token = timestampify(start=asr_start, + end=asr_end, + duration=duration, + abs_time_token=abs_time_token, + num_bins=num_bins, + vocabulary_size=vocabulary_size, + time_format=time_format) + if asr_notime: + batch['asr_indices'] = asr_tokens + else: + batch['asr_indices'] = merge_cap_time_tokens(asr_tokens, + asr_stamp_token, order) + + del batch['asr_start'] + del batch['asr_end'] + + batch[output_feature_name] = seq # [n_events, max_num_words] + + # Pad caption, start, end, split to max_events for data collation. + if keep_raw_string: # eval + n_events = tf.shape(input=start)[0] + padding_pattern = [ + [0, tf.maximum(0, max_events - n_events)], + ] + if 'split' in batch: + batch['split'] = tf.pad( + tensor=batch['split'], paddings=padding_pattern, constant_values=-1) + batch[output_raw_string_name] = tf.pad( + tensor=batch[output_raw_string_name], + paddings=padding_pattern, + constant_values='') + batch[output_raw_timestamp_name + '_start'] = tf.pad( + tensor=start, paddings=padding_pattern, constant_values=-1) + batch[output_raw_timestamp_name + '_end'] = tf.pad( + tensor=end, paddings=padding_pattern, constant_values=-1) + else: + del batch[output_raw_timestamp_name + '_start'] + del batch[output_raw_timestamp_name + '_end'] + + return batch + + # Add timestamp tokens. + preprocessor_builder.add_fn( + fn=add_timestamp, + fn_name=f'{output_feature_name}_timify') + + # Reshape to concatenate all the dense captions. + preprocessor_builder.add_fn( + fn=lambda x: tf.reshape(x, [-1]), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_reshape') + + # Get the boolean mask and remove padded tokens for each caption. + preprocessor_builder.add_fn( + fn=lambda x: tf.boolean_mask(x, tf.not_equal(x, 0)), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_unpad') + + # Get the boolean mask and remove EOS tokens for each caption. + preprocessor_builder.add_fn( + fn=lambda x: tf.boolean_mask(x, tf.not_equal(x, 1)), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_uneos') + + def corruption(batch): + tokens = batch[output_feature_name] + x = single_example_denoise( + tokens=tokens, + vocabulary_size=vocabulary_size, + noise_density=corrupt, + noise_mask_fn=functools.partial( + random_spans_noise_mask, + mean_noise_span_length=span_len), + inputs_fn=noise_span_to_unique_sentinel, + targets_fn=nonnoise_span_to_unique_sentinel) + # no BOS in encoder and no EOS anywhere here + batch[output_feature_name + + '_corrupt_outputs'] = processors.sample_or_pad_non_sorted_sequence( + tf.concat([[0], x['outputs'][:max_num_tokens - 1]], 0), + max_num_tokens, + pad_value=0, + random=False) # max_num_tokens + batch[output_feature_name + + '_corrupt_inputs'] = processors.sample_or_pad_non_sorted_sequence( + x['inputs'][:max_num_tokens - 1], max_num_tokens - 1, pad_value=0, + random=False) # max_num_tokens - 1 + return batch + + preprocessor_builder.add_fn( + fn=corruption, fn_name=f'{output_feature_name}_corrupt') + + # Readd BOS=PAD and EOS token, truncate+pad for the full sequence. + preprocessor_builder.add_fn( + fn=lambda x: processors.sample_or_pad_non_sorted_sequence( # pylint: disable=g-long-lambda + tf.concat([[0], x, [1]], 0), + max_num_tokens, + pad_value=0, + random=False), + feature_name=output_feature_name, + fn_name=f'{output_feature_name}_repad') + + if asr_input: + # Reshape to concatenate all the dense captions + preprocessor_builder.add_fn( + fn=lambda x: tf.reshape(x, [-1]), + feature_name='asr_indices', + fn_name='asr_indices_reshape') + + # Get the boolean mask and remove padded tokens for each caption + preprocessor_builder.add_fn( + fn=lambda x: tf.boolean_mask(x, tf.not_equal(x, 0)), + feature_name='asr_indices', + fn_name='asr_indices_unpad') + + # Get the boolean mask and remove EOS tokens for each caption + preprocessor_builder.add_fn( + fn=lambda x: tf.boolean_mask(x, tf.not_equal(x, 1)), + feature_name='asr_indices', + fn_name='asr_indices_uneos') + + # Readd BOS=PAD and EOS token, truncate+pad for the full sequence + preprocessor_builder.add_fn( + fn=lambda x: processors.sample_or_pad_non_sorted_sequence( # pylint: disable=g-long-lambda + tf.concat([x, [1]], 0), + max_num_input_words, + pad_value=0, + random=False), + feature_name='asr_indices', + fn_name='asr_indices_repad') + + +def random_apply(func, gunc, p, x): + """Randomly apply function func to x with probability p otherwise function gunc.""" + return tf.cond( + tf.less( + tf.random.uniform([], minval=0, maxval=1, dtype=tf.float32), + tf.cast(p, tf.float32)), lambda: func(x), lambda: gunc(x)) + + +def sample_equal_sequence( + batch, + num_steps: int, + is_training: bool, + output_feature_lists_name: str, + output_raw_timestamp_name: str, + output_raw_duration_name: str, + output_raw_string_name: str, + p: float, + t: int, + preserve: bool, + asr_input: bool, + max_segments: int) -> tf.Tensor: + """Samples at equal distance num_steps features + pad + random temporal crop.""" + + if is_training and p > 0: + # Random temporal cropping with proba p, preservering or not events. + def random_crop(batch, preserve=True): + + # Load batch. + sequence = batch[output_feature_lists_name] + duration = batch[output_raw_duration_name] + captions = batch[output_raw_string_name] + start = batch[output_raw_timestamp_name + '_start'] + end = batch[output_raw_timestamp_name + '_end'] + + # Sample start offset. + sequence_length = tf.shape(input=sequence)[0] + if preserve: + max_offset = tf.cast(tf.math.reduce_min(end / t), dtype=tf.int32) - 1 + else: + max_offset = sequence_length + max_offset = tf.minimum(max_offset, sequence_length) + max_offset = tf.maximum(max_offset, 1) + offset_start = tf.random.uniform((), + maxval=max_offset, + dtype=tf.int32) + + # Modify captions/start/end given the sampled start. + start = tf.cast(start, tf.int32) - offset_start * t + end = tf.cast(end, tf.int32) - offset_start * t + idx_to_keep = tf.where(end > 0)[:, 0] + captions = tf.gather(captions, idx_to_keep, axis=0) + start = tf.gather(start, idx_to_keep, axis=0) + start = tf.maximum(start, 0) + end = tf.gather(end, idx_to_keep, axis=0) + + # Sample end offset. + if preserve: + min_offset = tf.cast(tf.math.reduce_max(start / t), dtype=tf.int32) + 1 + else: + min_offset = offset_start + maxval = sequence_length + if max_segments: # only consider a given maximum number of segments + maxval = tf.math.reduce_max(end[:max_segments] // t) + maxval = tf.minimum(maxval, sequence_length) + maxval = tf.maximum(maxval, min_offset + 1) + min_offset = tf.minimum(min_offset, maxval - 1) + offset_end = tf.random.uniform((), + minval=min_offset, + maxval=maxval, + dtype=tf.int32) + + # Modify captions/start/end given the sampled end. + idx_to_keep = tf.where(start < offset_end * t)[:, 0] + captions = tf.gather(captions, idx_to_keep, axis=0) + start = tf.gather(start, idx_to_keep, axis=0) + end = tf.gather(end, idx_to_keep, axis=0) + end = tf.minimum(end, offset_end * t) + + # Modify sequence and duration given the sampled offsets. + sequence = sequence[offset_start: offset_end + 1] + duration = (offset_end - offset_start + 1) * t + + # Correct dimensions and types. + duration = tf.cast(duration, tf.int64)[None] + start = tf.cast(start, tf.int64) + end = tf.cast(end, tf.int64) + + if asr_input: + # Modify ASR given the sampled start. + asr = batch['asr_string'] + asr_st = batch['asr_start'] + asr_ed = batch['asr_end'] + asr_st = tf.cast(asr_st, tf.int32) - offset_start * t + asr_ed = tf.cast(asr_ed, tf.int32) - offset_start * t + asr_idx = tf.where(asr_ed > 0)[:, 0] + asr = tf.gather(asr, asr_idx, axis=0) + asr_st = tf.gather(asr_st, asr_idx, axis=0) + asr_ed = tf.gather(asr_ed, asr_idx, axis=0) + # Modify ASR given the sampled end. + asr_idx = tf.where(asr_st < offset_end * t)[:, 0] + asr = tf.gather(asr, asr_idx, axis=0) + asr_st = tf.gather(asr_st, asr_idx, axis=0) + asr_ed = tf.gather(asr_ed, asr_idx, axis=0) + asr_st = tf.cast(asr_st, tf.int64) + asr_ed = tf.cast(asr_ed, tf.int64) + return sequence, duration, captions, start, end, asr, asr_st, asr_ed + + return sequence, duration, captions, start, end + + def no_crop(batch): + if asr_input: + return batch[output_feature_lists_name], batch[ + output_raw_duration_name], batch[output_raw_string_name], batch[ + output_raw_timestamp_name + + '_start'], batch[output_raw_timestamp_name + '_end'], batch[ + 'asr_string'], batch['asr_start'], batch['asr_end'] + return batch[output_feature_lists_name], batch[ + output_raw_duration_name], batch[output_raw_string_name], batch[ + output_raw_timestamp_name + + '_start'], batch[output_raw_timestamp_name + '_end'] + + output = random_apply( + func=functools.partial(random_crop, preserve=preserve), + gunc=no_crop, + p=p, + x=batch) + + # Update batch + batch[output_feature_lists_name] = output[0] + batch[output_raw_duration_name] = output[1] + batch[output_raw_string_name] = output[2] + batch[output_raw_timestamp_name + '_start'] = output[3] + batch[output_raw_timestamp_name + '_end'] = output[4] + + if asr_input: + batch['asr_string'] = output[5] + batch['asr_start'] = output[6] + batch['asr_end'] = output[7] + + sequence = batch[output_feature_lists_name] + sequence_length = tf.shape(input=sequence)[0] + + # Pad or sample + output = tf.cond( + sequence_length < num_steps, + lambda: processors.sample_or_pad_non_sorted_sequence( # pylint: disable=g-long-lambda + sequence, num_steps, 0, False), + lambda: processors.sample_linspace_sequence(sequence, num_steps, 1, 1) + ) + + batch[output_feature_lists_name] = output + return batch + + +def add_embeddings( + parser_builder: builders.BaseParserBuilder, + sampler_builder: builders.SamplerBuilder, + input_feature_lists_name: str, + output_feature_lists_name: str, + num_frames: int, + features_dim: int, + sync_random_state: bool, + output_raw_timestamp_name: str, + output_raw_duration_name: str, + is_training: bool, + output_raw_string_name: str, + p: float, + output_feature_name: str = builders.TEXT_INDICES_FEATURE_NAME, + t: int = 1000000, # 1FPS + preserve: bool = True, + asr_input: bool = False, + max_segments: int = 0): + """Add visual features [num_frames, 768].""" + + if not isinstance(parser_builder, builders.SequenceExampleParserBuilder): + raise ValueError('add_embeddings only supports tf.SequenceExample.') + + parser_builder.parse_feature( + feature_name=input_feature_lists_name, + feature_type=tf.io.FixedLenSequenceFeature([features_dim], + dtype=tf.float32), + output_name=output_feature_lists_name) + + # Moved from the decoder builder as these are used for temporal cropping. + sampler_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name=output_raw_string_name, + fn_name=f'{output_feature_name}_sparse_to_dense') + if output_raw_timestamp_name: + sampler_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name=output_raw_timestamp_name + '_start', + fn_name=f'{output_raw_timestamp_name}_start_sparse_to_dense') + sampler_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name=output_raw_timestamp_name + '_end', + fn_name=f'{output_raw_timestamp_name}_end_sparse_to_dense') + sampler_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name=output_raw_duration_name, + fn_name=f'{output_raw_duration_name}_sparse_to_dense') + + if asr_input: + sampler_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name='asr_string', + fn_name='asr_string_sparse_to_dense') + if output_raw_timestamp_name: + sampler_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name='asr_start', + fn_name='asr_start_sparse_to_dense') + sampler_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name='asr_end', + fn_name='asr_end_sparse_to_dense') + + if output_raw_timestamp_name: + sampler_builder.add_fn( + fn=lambda x, s=None: sample_equal_sequence( # pylint: disable=g-long-lambda + x, + num_frames, + is_training=is_training, + output_feature_lists_name=output_feature_lists_name, + output_raw_timestamp_name=output_raw_timestamp_name, + output_raw_duration_name=output_raw_duration_name, + output_raw_string_name=output_raw_string_name, + p=p, + t=t, + preserve=preserve, + asr_input=asr_input, + max_segments=max_segments), + fn_name=f'{output_feature_lists_name}_sample', + # Use state to keep coherence between modalities if requested. + stateful=sync_random_state) + else: + sampler_builder.add_fn( + fn=functools.partial( + processors.sample_or_pad_non_sorted_sequence, # pylint: disable=g-long-lambda + max_num_steps=num_frames, pad_value=0, random=False), + feature_name=output_feature_lists_name, + fn_name='pad_features' + ) + diff --git a/scenic/projects/vid2seq/datasets/__init__.py b/scenic/projects/vid2seq/datasets/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/vid2seq/datasets/dense_video_captioning_tfrecord_dataset.py b/scenic/projects/vid2seq/datasets/dense_video_captioning_tfrecord_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..1a02f7b0c069d45c038903fb97da2bc17518787e --- /dev/null +++ b/scenic/projects/vid2seq/datasets/dense_video_captioning_tfrecord_dataset.py @@ -0,0 +1,625 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""TFRecords data-loader for dense video captioning datasets.""" + +import functools +from typing import Dict, Iterator, List, Optional, Text, Tuple, Union + +from absl import logging +from dmvr import tokenizers +from flax import jax_utils +import jax +import jax.numpy as jnp +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.projects.t5 import tokenizer as t5_tokenizer +from scenic.projects.vid2seq import data_utils as vid2seq_data_utils +from scenic.projects.vivit.data import video_tfrecord_dataset +import tensorflow as tf + + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] + + +class VTTFRecordDatasetFactory(video_tfrecord_dataset.TFRecordDatasetFactory): + """Reader for TFRecords using the MediaSequence format. + + The TFRecords already contain features, ASR and captions. + + Attributes: + base_dir: str. The base directory from which the SSTables are read. + subset: str. The subset of the dataset. The subsets are are determined by + the tables dictionary.. + """ + + _MODALITIES = ('features', 'text') + + def __init__(self, + base_dir: str, + tables: Dict[str, Union[str, List[str]]], + examples_per_subset: Dict[str, int], + subset: str = 'train', + modalities: Tuple[str] = ('rgb',), + prop_data: float = 1.0, + num_groups: Optional[int] = None, + group_index: Optional[int] = None): + """Initializes the instance of TFRecordDatasetFactory. + + Initializes a data-loader using DeepMind Video Reader (DMVR) pre-processing. + TFRecords are assumed to consist of tf.SequenceExample protocol buffers in + the MediaSequence + (https://github.com/google/mediapipe/tree/master/mediapipe/util/sequence) + format. + + Args: + base_dir: The base directory of the TFRecords. + tables: A dictionary mapping the subset name (train, val or test) to the + relative path of the SSTable containing them. Follows DMVR convention. + The values of the dictionary can either be a string or a list. If it is + a string, it specifies all the shards in the SSTable. Example - + "/path/to/sstable@10". If passing a list, each entry is a shard of the + SSTable. Example - "[/path/to/sstable_shard_1_of_10, ..., + /path/to/sstabble_shard_10_of_10]." The latter scenario is useful for + debugging. + examples_per_subset: A dictionary mapping the subset name (train, val or + test) to the number of examples in the dataset for that subset. + subset: The subset of the dataset to load. Must be a key of "tables" + modalities: Which modality to load. Currently supports 'rgb' and + 'spectrogram' + prop_data: The proportion of the data to load. If less than 1.0, this + proportion of the total TFRecord shards are read. + num_groups: If specified will reshard the data according to `num_groups`. + A `group_index` should be specified if using `num_groups`. + group_index: Index of the shard to return after resharding. `num_groups` + should be specified if using `group_index`. This is useful in + distributed setting where one wants to ensure that different data is + read by different workers. + """ + + for modality in modalities: + if modality not in VTTFRecordDatasetFactory._MODALITIES: + raise ValueError('Invalid modality %s.' % modality) + self._modalities = modalities + + super().__init__( + base_dir=base_dir, + tables=tables, + examples_per_subset=examples_per_subset, + num_classes=1, # no class for captioning + subset=subset, + fraction_data=prop_data, + num_groups=num_groups, + group_index=group_index) + + def _build( + self, + dataset_configs, # pytype: disable=signature-mismatch + is_training: bool = True, + # Video related parameters. + num_frames: int = 100, + stride: int = 1, + num_test_clips: int = 1, + max_num_captions: int = 1, + tokenizer: Optional[tokenizers.TextTokenizer] = None, + append_eos: bool = True, + caption_string: str = 'caption/string', + ): + """Default build for this dataset. + + Args: + dataset_configs: dataset configuration. + is_training: whether or not in training mode. + num_frames: number of frames per subclip. + stride: temporal stride to sample frames. + num_test_clips: number of test clip (1 by default). If more than one, this + will sample multiple linearly spaced clips within each video at test + time. If 1, then a single clip in the middle of the video is sampled. + max_num_captions: Maximum number of captions to keep. If there are more + captions in the proto, only the first `max_num_captions` will be + returned is `is_training` is set to `False`. If `is_training` is `True`, + then `max_num_captions` will be randomly sampled. Finally if the proto + contains less than `max_num_captions`, we pad with empty srings to make + sure there are `max_num_captions` in total. + tokenizer: An instance of a tokenizer. + append_eos: Whether to append EOS token. + caption_string: Input feature name in sstable for caption. + """ + + modalities = dataset_configs.get('modalities', ('features',)) + num_frames = dataset_configs.get('num_frames', 100) + num_bins = dataset_configs.get('num_bins', 100) + stride = dataset_configs.get('stride', 2) + max_num_output_words = dataset_configs.get('max_num_output_words', 128) + max_num_captions = dataset_configs.get('max_num_captions', 1) + caption_string = dataset_configs.get('caption_string', 'caption/string') + input_timestamp_name = dataset_configs.get('input_timestamp_name', + 'caption/timestamp') + if 'input_timestamp_start_name' in dataset_configs: + input_timestamp_start_name = dataset_configs.get( + 'input_timestamp_start_name') + input_timestamp_end_name = dataset_configs.get('input_timestamp_end_name') + else: + input_timestamp_start_name = input_timestamp_name + '/start' + input_timestamp_end_name = input_timestamp_name + '/end' + input_duration_name = dataset_configs.get('input_duration_name', + 'video/duration') + output_raw_timestamp_name = dataset_configs.get('output_raw_timestamp_name', + 'timestamp') + output_raw_duration_name = dataset_configs.get('output_raw_duration_name', + 'duration') + vocabulary_size = dataset_configs.get('vocabulary_size', 32128) + input_feature_name = dataset_configs.get('input_feature_name', + 'image/clip_embeddings') + output_raw_feature_name = dataset_configs.get('output_raw_feature_name', + 'features') + features_dim = dataset_configs.get('features_dim', 768) + max_events = dataset_configs.get('max_events', 50) + abs_time_token = dataset_configs.get('abs_time_token', False) + p = dataset_configs.get('random_temporal_crop_proba', 0.5) + tmp_only = dataset_configs.get('tmp_only', False) + split = dataset_configs.get('split', False) and not is_training + time_format = dataset_configs.get('time_format', 'se') + order = dataset_configs.get('order', 'ld') + notime = dataset_configs.get('notime', False) + preserve = dataset_configs.get('preserve', True) + asr_input = 'text' in modalities + corrupt = dataset_configs.get('corrupt', 0.) + span_len = dataset_configs.get('span_len', 3.) + max_num_input_words = dataset_configs.get('max_num_input_words', 512) + asr_notime = dataset_configs.get('asr_notime', False) + max_segments = dataset_configs.get('max_segments', 0) + output_raw_string_name = 'caption_strings' + asr_raw_string_name = 'ASR/string' + keep_raw_string = not is_training + + # Init the TF models of the tokenizer. + tokenizer.initialize() # pytype: disable=attribute-error + + # Visual features + vid2seq_data_utils.add_embeddings( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + input_feature_lists_name=input_feature_name, + output_feature_lists_name=output_raw_feature_name, + num_frames=num_frames, + features_dim=features_dim, + sync_random_state=True, + output_raw_timestamp_name=output_raw_timestamp_name, + output_raw_duration_name=output_raw_duration_name, + is_training=is_training, + output_raw_string_name=output_raw_string_name, + p=p, + t=1000000, # 1FPS + preserve=preserve, + asr_input=asr_input, + max_segments=max_segments) + + # Prep caption, ASR etc... + vid2seq_data_utils.add_text_with_timestamps( + parser_builder=self.parser_builder, + preprocessor_builder=self.preprocessor_builder, + tokenizer=tokenizer, + input_feature_name=caption_string, + input_timestamp_start_name=input_timestamp_start_name, + input_timestamp_end_name=input_timestamp_end_name, + input_duration_name=input_duration_name, + output_raw_timestamp_name=output_raw_timestamp_name, + output_raw_duration_name=output_raw_duration_name, + max_events=max_events, + vocabulary_size=vocabulary_size, + num_bins=num_bins, + output_raw_string_name=output_raw_string_name, + # Always prepend the BOS token to init the generation, and +1 tokens + # are loaded, which are then splitted into input and target tokens. + prepend_bos=True, + append_eos=append_eos, + keep_raw_string=keep_raw_string, + max_num_tokens=max_num_output_words + 1, + abs_time_token=abs_time_token, + time_format=time_format, + order=order, + notime=notime, + asr_input=asr_input, + max_num_input_words=max_num_input_words, + asr_raw_string_name=asr_raw_string_name, + corrupt=corrupt, + span_len=span_len, + tmp_only=tmp_only, + asr_notime=asr_notime, + t=1000000) # 1 FPS + + if split: + self.parser_builder.parse_feature( + feature_name='split', + feature_type=tf.io.VarLenFeature(dtype=tf.int64), + output_name='split', + is_context=True) + self.decoder_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name='split', + fn_name='split_sparse_to_dense') + + if not is_training: + self.parser_builder.parse_feature( + feature_name='videoid', + feature_type=tf.io.VarLenFeature(dtype=tf.string), + output_name='videoid', + is_context=True) + self.decoder_builder.add_fn( + fn=tf.sparse.to_dense, + feature_name='videoid', + fn_name='videoid_sparse_to_dense') + + +def load_split_from_dmvr( + ds_factory, + dataset_configs, + batch_size, + subset='train', + stride=2, + num_test_clips=1, + keep_key=False, + max_num_captions: int = 1, + caption_string='caption/string'): + """Loads dataset using DMVR for pre-processing. + + DMVR dataset loader already does basic augmentation (random crop and flip in + train mode. It also already shuffles and batches the data. + + Args: + ds_factory: A DMVR factory to instantiate with the subset. + dataset_configs: Dataset configurations. + batch_size: The batch_size to use. + subset: train, validation or test. + stride: Temporal stride to sample RGB frames. + num_test_clips: Number of test clips (1 by default). If more than 1, this + will sample multiple linearly spaced clips within each video at test time. + If 1, then a single clip in the middle of the video is sampled. The clips + are aggreagated in the batch dimension. + keep_key: bool; If true, also return the key for each example. + max_num_captions: Maximum number of captions to keep. If there are more + captions in the proto, only the first `max_num_captions` will be returned + is `is_training` is set to `False`. If `is_training` is `True`, then + `max_num_captions` will be randomly sampled. Finally if the proto contains + less than `max_num_captions`, we pad with empty srings to make sure there + are `max_num_captions` in total. + caption_string: Input feature name in sstable for caption. + + Returns: + A pair `(ds, num_examples)` with + ds: A `tf.data.Dataset` object + num_examples: Number of examples in the dataset. + """ + # Should hold two fields: tokenizer_type and tokenizer_vocab. + is_training = subset == 'train' + tokenizer_config = dataset_configs.get('tokenizer', {}) + tokenizer_type = tokenizer_config.get('tokenizer_type', 'sentence_piece') + tokenizer_model = tokenizer_config.get('tokenizer_model', None) + modalities = dataset_configs.get('modalities', ['features']) + num_frames = dataset_configs.get('num_frames', 100) + + if tokenizer_type == 'sentence_piece': + if tokenizer_model is not None: + tokenizer = t5_tokenizer.build_dmvr_sp_model(tokenizer_model) + else: + tokenizer = t5_tokenizer.build_dmvr_sp_model() + else: + raise NotImplementedError + + ds_factory = ds_factory( + subset=subset, modalities=modalities).configure( + dataset_configs=dataset_configs, + is_training=is_training, + num_frames=num_frames, + stride=stride, + num_test_clips=num_test_clips, + max_num_captions=max_num_captions, + tokenizer=tokenizer, + append_eos=True, + caption_string=caption_string, + ) + + logging.info('Preprocessing graph: %s', + ds_factory.preprocessor_builder.get_summary()) + logging.info('Postprocessing graph: %s', + ds_factory.postprocessor_builder.get_summary()) + + num_examples = ds_factory.num_examples + + ds = ds_factory.make_dataset( + batch_size=batch_size, + shuffle=is_training, + num_epochs=None if is_training else 1, + drop_remainder=is_training, + keep_key=(not is_training and keep_key)) + + if not is_training: + ds = ds.repeat(None) + + options = tf.data.Options() + options.experimental_threading.private_threadpool_size = 48 + ds = ds.with_options(options) + + return ds, num_examples + + +def map_input_keys(batch, + modalities=('features',), + return_as_dict=False): + """DMVR dataset returns 'image' and 'label'. We want 'inputs' and 'label'.""" + if not return_as_dict: + if len(modalities) == 1 and modalities[0] == 'features': + batch['encoder_inputs'] = batch['features'] + elif len(modalities) == 1 and 'text' == modalities[0]: + batch['encoder_inputs'] = batch['asr_indices'] + else: + raise NotImplementedError('modality not supported by map_keys.') + else: + batch['encoder_inputs'] = {} + if 'text' in modalities: + if 'asr_indices' in batch: + batch['encoder_inputs']['text'] = batch['asr_indices'] + if 'features' in modalities: + batch['encoder_inputs']['features'] = batch['features'] + return batch + + +def tile_label_key(batch, return_as_dict=False): + """Tile labels and keys to match input videos when num_test_clips > 1. + + When multiple test crops are used (ie num_test_clips > 1), the batch dimension + of batch['inputs'] = test_batch_size * num_test_clips. + However, labels and keys remain of size [test_batch_size]. + This function repeats label and key to match the inputs. + + Args: + batch: Batch from iterator + return_as_dict: Whether to return multimodal inputs as a dictionary. + + Returns: + batch: Batch with 'label' and 'key' tiled to match 'inputs'. + """ + if not return_as_dict: + n_repeats = batch['inputs'].shape[0] // batch['label'].shape[0] + if 'key' in batch: + batch['key'] = np.repeat(batch['key'], n_repeats, axis=0) + return batch + + +def get_dataset( + *, + batch_size, + eval_batch_size, + num_shards, + dtype_str='float32', + shuffle_seed=0, # pylint:disable=unused-argument + rng=None, + dataset_configs=None, + dataset_service_address: Optional[str] = None): + """Returns a generator for the audiovisual dataset.""" + del rng + dataset_configs = dataset_configs or {} + modalities = dataset_configs.get('modalities', ['features']) + return_as_dict = dataset_configs.get('return_as_dict', False) + num_frames = dataset_configs.get('num_frames', 100) + stride = dataset_configs.get('stride', 2) + eval_stride = dataset_configs.get('eval_stride', 2) + augmentation_params = dataset_configs.get('augmentation_params', None) + num_train_clips = dataset_configs.get('num_train_clips', 1) + num_eval_clips = dataset_configs.get('num_eval_clips', 1) + max_num_output_words = dataset_configs.get('max_num_output_words', 128) + max_num_captions = dataset_configs.get('max_num_captions', 1) + caption_string = dataset_configs.get('caption_string', 'caption/string') + train_caption_string = dataset_configs.get('train_caption_string', + 'caption/string') + num_train_captions_per_clip = dataset_configs.get( + 'num_train_captions_per_clip', 1) + features_dim = dataset_configs.get('features_dim', 768) + + max_num_input_words = dataset_configs.get('max_num_input_words', 512) + + def validate_config(field): + if dataset_configs.get(field) is None: + raise ValueError(f'{field} must be specified for TFRecord dataset.') + validate_config('base_dir') + validate_config('tables') + validate_config('examples_per_subset') + + ds_factory = functools.partial( + VTTFRecordDatasetFactory, + base_dir=dataset_configs.get('base_dir'), # pytype: disable=attribute-error + tables=dict(dataset_configs.get('tables')), # pytype: disable=attribute-error + examples_per_subset=dataset_configs.get('examples_per_subset'), # pytype: disable=attribute-error + num_groups=jax.process_count(), + group_index=jax.process_index()) + + def create_dataset_iterator( + subset: Text, + batch_size_local: int, + num_clips: int, + caption_string: str, + stride: int, + keep_key_local: bool = False, + max_num_captions_local: int = 1) -> Tuple[Iterator[Batch], int]: + + is_training = subset == 'train' + logging.info('Loading split %s', subset) + + dataset, num_examples = load_split_from_dmvr( + ds_factory, + dataset_configs=dataset_configs, + batch_size=batch_size_local, + subset=subset, + stride=stride, + num_test_clips=num_clips, + keep_key=keep_key_local, + max_num_captions=max_num_captions_local, + caption_string=caption_string) + + if dataset_service_address and is_training: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + dataset = dataset_utils.distribute(dataset, dataset_service_address) + + maybe_pad_batches = functools.partial( + dataset_utils.maybe_pad_batch, + train=is_training, + batch_size=batch_size_local, + inputs_key=None) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + current_iter = iter(dataset) + current_iter = map(dataset_utils.tf_to_numpy, current_iter) + current_iter = map( + functools.partial( + map_input_keys, + modalities=modalities, + return_as_dict=return_as_dict), current_iter) + current_iter = map(maybe_pad_batches, current_iter) + + if augmentation_params and augmentation_params.get('do_mixup', False): + raise ValueError('mixup should be done in the trainer.') + + current_iter = map(shard_batches, current_iter) + + if is_training and dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + current_iter = jax_utils.prefetch_to_device( + current_iter, dataset_configs.get('prefetch_to_device')) + + return current_iter, num_examples + + train_iter, n_train_examples = create_dataset_iterator( + 'train', batch_size, num_train_clips, train_caption_string, stride) + + eval_iters = {} + num_eval_examples = {} + for k in dataset_configs.tables.keys(): # pytype: disable=attribute-error + if k == 'train': + continue + eval_iter, n_eval_examples = create_dataset_iterator( + k, eval_batch_size, num_eval_clips, caption_string, eval_stride, True, + max_num_captions) + eval_iters[k] = eval_iter + num_eval_examples[k] = n_eval_examples * num_eval_clips + + meta_data = { + # The training loop iterates each caption sample individually. Therefore, + # the number of captions per clip is muliplied for computing the number of + # training examples. In contrast, for the eval sets, all GT captions are + # used together for evaluating a single clip. + 'num_train_examples': + (n_train_examples * num_train_clips * num_train_captions_per_clip), + 'num_eval_examples': num_eval_examples, + 'encoder_input_dtype': getattr(jnp, dtype_str), + 'encoder_input_text_dtype': jnp.int32, + # The sahpes below is for the train model where the number of captions is + # set to 1 and the dimension 1 corresponding to the number of captions is + # squeezed. + 'decoder_input_shape': { + 'decoder_input_tokens': (-1, max_num_output_words), + 'decoder_target_tokens': (-1, max_num_output_words), + }, + 'decoder_input_dtype': jnp.int32 + } + + if return_as_dict: + input_shape_dict = { + 'text': (-1, max_num_input_words), + 'features': (-1, num_frames, features_dim) + } + + meta_data['encoder_input_shape'] = { + m: input_shape_dict[m] for m in modalities} + elif len(modalities) == 1 and modalities[0] == 'features': + meta_data['encoder_input_shape'] = (-1, num_frames, features_dim) + elif len(modalities) == 1 and modalities[0] == 'text': + meta_data['encoder_input_shape'] = (-1, max_num_input_words) + else: + raise NotImplementedError('modality not supported') + logging.info('Dataset metadata:\n%s', meta_data) + + return dataset_utils.Dataset(train_iter, eval_iters, None, meta_data) + + +def get_datasets(config, + data_rng: jnp.ndarray, + dataset_service_address: Optional[str] = None): + """Creates dataset from config.""" + + device_count = jax.device_count() + logging.info('device_count: %d', device_count) + logging.info('num_hosts : %d', jax.process_count()) + logging.info('host_id : %d', jax.process_index()) + + dataset_dict = {} + for ds_name, cfg in config.datasets.items(): + + if config.get('batch_sizes') is not None: + batch_size = config.batch_sizes.get(ds_name) + else: + batch_size = config.batch_size + + if batch_size % device_count > 0: + raise ValueError( + f'Batch size ({batch_size}) of {ds_name} must be divisible ' + f'by the number of devices ({device_count})') + + if config.get('eval_batch_sizes') is not None: + eval_batch_size = config.eval_batch_sizes.get(ds_name) + else: + eval_batch_size = config.get('eval_batch_size', batch_size) + + if eval_batch_size % device_count > 0: + raise ValueError( + f'Eval batch size ({eval_batch_size}) of {ds_name} must be ' + f'divisible by the number of devices ({device_count})') + + local_batch_size = batch_size // jax.process_count() + eval_local_batch_size = eval_batch_size // jax.process_count() + device_batch_size = batch_size // device_count + logging.info('local_batch_size of %s : %d', ds_name, local_batch_size) + logging.info('device_batch_size of %s : %d', ds_name, device_batch_size) + + shuffle_seed = cfg.get('shuffle_seed', None) + if dataset_service_address and shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you want ' + 'to run with dataset service.') + + # 'bit' consists of many datasets, so we do this to have a unique dataset + # key if we train on multiple datasets from 'bit'. E.g. ds_name = + # 'bit_caltech'. + + dataset_rng, data_rng = jax.random.split(data_rng) + ds = get_dataset( + batch_size=local_batch_size, + eval_batch_size=eval_local_batch_size, + num_shards=jax.local_device_count(), + dtype_str='float32', + rng=dataset_rng, + shuffle_seed=shuffle_seed, + dataset_configs=cfg, + dataset_service_address=dataset_service_address) + + # Add task information to the dataset meta_data: + dataset_dict[ds_name] = ds + + return dataset_dict diff --git a/scenic/projects/vid2seq/dvc_eval.py b/scenic/projects/vid2seq/dvc_eval.py new file mode 100644 index 0000000000000000000000000000000000000000..ec4724e05cef67a294284bec7af2864d42563d2c --- /dev/null +++ b/scenic/projects/vid2seq/dvc_eval.py @@ -0,0 +1,631 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for evaluating dense captions. + +Reimplements evaluation metrics that agree with open-sourced methods at +https://github.com/ranjaykrishna/densevid_eval/blob/master/evaluate.py +""" + +import collections +import logging +import random +import re +import string + +import numpy as np +from scenic.projects.vid2seq.metrics.cider import Cider +from scenic.projects.vid2seq.metrics.meteor import Meteor +from scenic.projects.vid2seq.metrics.ptbtokenizer import PTBTokenizer + + +def convert_uint8_array_to_string(uint8_array): + return uint8_array.tobytes().rstrip(b'\x00').decode('utf-8') + + +def convert_strings_to_uint8_arrays(str_tensor, max_str_len=None): + """Convert string numpy array into uint8 arrays to transfer to TPUs. + + Given the input string array, outputs a uint8 tensor with an additional + dimension at the end with the size of max_str_len. + + Args: + str_tensor: The input string array. + max_str_len: The maximum number of characters to keep in the converted uint8 + array. If None, it is set to the longest string length in the input array. + + Returns: + Converted uint8 numpy array with an additional dim of size max_str_len. + """ + # Make sure that the input str_tensor is an np.ndarray of bytes not of object. + # An object array stores pointers only whereas a bytes array stores actual + # string bytes + str_tensor = np.array(str_tensor, dtype=bytes) + uint8_tensor = np.frombuffer(str_tensor, + np.uint8).reshape(str_tensor.shape + (-1,)) + if max_str_len: + to_pad = max(0, max_str_len - uint8_tensor.shape[-1]) + uint8_tensor = np.pad(uint8_tensor[..., :max_str_len], + [[0, 0]] * str_tensor.ndim + [[0, to_pad]]) + + return uint8_tensor + + +def random_string(string_length): + """Random string generator for unmatched captions.""" + letters = string.ascii_lowercase + return ''.join(random.choice(letters) for i in range(string_length)) + + +def chased_dp_assignment(scores): + """Run dp matching as https://github.com/fujiso/SODA/blob/master/soda.py.""" + + m, n = scores.shape + dp = - np.ones((m, n)) + path = np.zeros((m, n)) + + def transition(i, j): + if dp[i, j] >= 0: + return dp[i, j] + elif i == 0 and j == 0: + state = [-1, -1, scores[i, j]] + elif i == 0: + state = [-1, transition(i, j-1), scores[i, j]] + elif j == 0: + state = [transition(i-1, j), -1, scores[i, j]] + else: + state = [ + transition(i - 1, j), + transition(i, j - 1), + transition(i - 1, j - 1) + scores[i, j] + ] + dp[i, j] = np.max(state) + path[i, j] = np.argmax(state) + return dp[i, j] + + def get_pairs(i, j): + p = np.where(path[i][:j+1] == 2)[0] + # pylint: disable=g-explicit-length-test + if i != 0 and not len(p): + return get_pairs(i-1, j) + elif i == 0 or p[-1] == 0: + return [(i, p[-1])] + else: + return get_pairs(i-1, p[-1]-1) + [(i, p[-1])] + n, m = scores.shape + max_score = transition(n-1, m-1) + pairs = get_pairs(n-1, m-1) + return max_score, pairs + + +def iou(interval_1, interval_2): + """Compute the IOU between two intervals. + + Args: + interval_1: A tuple (start, end) containing the first interval. + interval_2: A tuple (start, end) containing the second interval. + + Returns: + The IOU of the two intervals. + """ + start_1, end_1 = min(*interval_1), max(*interval_1) + start_2, end_2 = min(*interval_2), max(*interval_2) + + intersection = max(0, min(end_1, end_2) - max(start_1, start_2)) + union = min( + max(end_1, end_2) - min(start_1, start_2), + end_1 - start_1 + end_2 - start_2) + result = float(intersection) / (union + 1e-8) + return result + + +def evaluate_detections(predicted_segments, + gt_segments, + splits, + iou_thresholds=(0.3, 0.5, 0.7, 0.9)): + """Compute the mean P/R between the predicted and ground truth segments. + + Args: + predicted_segments: A numpy array of shape [K x 2] containing the predicted + segments. + gt_segments: A numpy array of shape [S x 2] containing the ground truth + segments. + splits: A numpy array of shape [S] indicating the annotation set. + iou_thresholds: The IOU thresholds to use for Precision/Recall calculations. + + Returns: + precision: The mean precision of the predictions over the IOU thresholds. + recall: The mean recall of the predictions over the IOU thresholds. + best_miou: The mIoU. + iou_matrices: dictionary mapping each split to the corresponding iou matrix. + """ + # Recall is the percentage of ground truth that is covered by the predictions. + # Precision is the percentage of predictions that are valid. + + best_recall = [] + best_precision = [] + iou_matrices = {} + + predicted_shape = predicted_segments.shape[0] + + for split in set(splits): + metrics = {} + for threshold in iou_thresholds: + metrics[str(threshold)] = { + 'gt_covered': set(), + 'pred_covered': set(), + } + split_idx = np.where(splits == split)[0] + split_gt_segments = np.array([gt_segments[idx] for idx in split_idx]) + + gt_shape = split_gt_segments.shape[0] + + # Compute the IOUs for the segments. + iou_matrix = np.zeros((gt_shape, max(predicted_shape, 1))) + for idx_g, gt_segment in enumerate(split_gt_segments): + cur_max_iou = 0 + for idx_p, segment in enumerate(predicted_segments): + sample_iou = iou(segment, gt_segment) + iou_matrix[idx_g, idx_p] = sample_iou + cur_max_iou = max(cur_max_iou, sample_iou) + for threshold in iou_thresholds: + if sample_iou > threshold: + metrics[str(threshold)]['pred_covered'].add(idx_p) + metrics[str(threshold)]['gt_covered'].add(idx_g) + + # Compute the precisions and recalls for each IOU threshold. + for threshold, m in metrics.items(): + pred_covered = m['pred_covered'] + gt_covered = m['gt_covered'] + + # Avoid dividing by 0 for precision + m['precision'] = float(len(pred_covered)) / max( + float(predicted_shape), 1.0) + m['recall'] = float(len(gt_covered)) / float(gt_shape) + + precision = [m['precision'] for m in metrics.values()] + recall = [m['recall'] for m in metrics.values()] + if best_precision: + best_precision = [ + max(precision[i], best_precision[i]) for i in range(len(precision)) + ] + best_recall = [max(recall[i], best_recall[i]) for i in range(len(recall))] + else: + best_precision, best_recall = precision, recall + iou_matrices[int(split)] = iou_matrix + + return best_precision, best_recall, iou_matrices + + +def match_captions(predicted_segments, + gt_segments, + predicted_captions, + gt_captions, + iou_thresholds=(0.3, 0.5, 0.7, 0.9)): + """Matches the predicted captions to ground truth using the IOU thresholds. + + Args: + predicted_segments: A numpy array of shape [K x 2] containing the predicted + segment intervals. + gt_segments: A numpy array of shape [S x 2] containing the ground truth + segment intervals. + predicted_captions: A list of string of shape [K] containing the + corresponding K predicted captions. + gt_captions: A list of strings of shape [S] containing the corresponding S + ground truth captions. + iou_thresholds: A list of thresholds for IOU to average over. + + Returns: + ground_truths_filtered: Filtered list of ground truth captions for all + threshold. + predictions_filtered: Matching list of predicted captions for all + threshold. + isxes: For each threshold, contains lists of isx of matches. + """ + + # Setup a set of dictionaries to hold the results. + ground_truths_filtered = {str(threshold): {} for threshold in iou_thresholds} + predictions_filtered = {str(threshold): {} for threshold in iou_thresholds} + + # Create GT lists for each of the IOU thresholds. + isx = 0 + isxes = {str(threshold): [] for threshold in iou_thresholds} + for idx_p, segment in enumerate(predicted_segments): + pc_idxp = predicted_captions[idx_p] + added = {str(threshold): False for threshold in iou_thresholds} + for idx_g, gt_segment in enumerate(gt_segments): + gt_idxg = gt_captions[idx_g] + sample_iou = iou(segment, gt_segment) + for threshold in iou_thresholds: + if sample_iou >= threshold: + key = str(isx) + isxes[str(threshold)].append(isx) + isx += 1 + ground_truths_filtered[str(threshold)][key] = [{'caption': gt_idxg}] + predictions_filtered[str(threshold)][key] = [{'caption': pc_idxp}] + added[str(threshold)] = True + for threshold in iou_thresholds: + if not added[str(threshold)]: + key = str(isx) + isxes[str(threshold)].append(isx) + isx += 1 + # Set this to a random string with no match to the predictions to + # get a zero score + ground_truths_filtered[str(threshold)][key] = [ + {'caption': random_string(random.randint(10, 20))} + ] + predictions_filtered[str(threshold)][key] = [{'caption': pc_idxp}] + + return ground_truths_filtered, predictions_filtered, isxes + + +def evaluate_caption_scores(ground_truths_filtered, + predictions_filtered, + iou_thresholds=(0.3, 0.5, 0.7, 0.9), + scorers=None): + """Compute the mean NLP metrics over the given IOU thresholds. + + Args: + ground_truths_filtered: Filtered list of ground truth captions for each + threshold. + predictions_filtered: Matching list of predicted captions for each threshold. + iou_thresholds: A list of thresholds for IOU to average over. + scorers: A dictionary of scorers. + + Returns: + metrics: dictionary with mean captioning score across the threshold set. + """ + + if scorers is None: + scorers = {} + + # Compute the caption metrics. + metrics = collections.defaultdict(list) + for scorer_name, scorer in scorers.items(): + for threshold in iou_thresholds: + # Handle the case where we have no overlapping truths + if not ground_truths_filtered[str(threshold)]: + metrics[scorer_name].append(0.0) + elif not predictions_filtered[str(threshold)]: + metrics[scorer_name].append(0.0) + else: + score = scorer.compute_score(ground_truths_filtered[str(threshold)], + predictions_filtered[str(threshold)]) + score = np.nan_to_num(score[0]) + metrics[scorer_name].append(score) + + # Aggregate the caption metrics. + for key, value in metrics.items(): + metrics[key] = np.mean(value) + + return metrics + + +def sodac(iou_matrices, + scorer, + predicted_captions, + gt_captions, + splits, + iou_thresholds=(0.,)): + """SODA_c from https://github.com/fujiso/SODA/.""" + if not predicted_captions: + return {int(split): 0 for split in splits} + + res = { + str(index): [p] + for index, p in enumerate(predicted_captions) + } + unique_splits = set(splits) + fs = {int(split): [0] * len(iou_thresholds) for split in unique_splits} + for split in unique_splits: + split_idx = np.where(splits == split)[0] + split_gt_captions = [gt_captions[idx] for idx in split_idx] + gts = [{index: [x] + for index in res} + for x in split_gt_captions] + iou_matrix = iou_matrices[int(split)] + score_matrix = np.array( + [np.nan_to_num(scorer.compute_score(res, gt)[1]) for gt in gts]) + for i, threshold in enumerate(iou_thresholds): + iou_cur = np.copy(iou_matrix) + iou_cur[iou_cur < threshold] = 0.0 + max_score, _ = chased_dp_assignment(iou_cur * score_matrix) + (n_g, n_p) = iou_cur.shape + p = max_score / n_p + r = max_score / n_g + fs[int(split)][i] = 2 * p * r / (p + r) if p+r > 0 else 0 + for split in unique_splits: + fs[int(split)] = np.mean(fs[int(split)]) + return fs + + +def evaluate_dense_captions(predicted_segments, + gt_segments, + predicted_captions, + gt_captions, + splits, + keys, + iou_thresholds=(0.3, 0.5, 0.7, 0.9), + soda=False, + tmponly=False): + """Compute both the P/R and NLP metrics for the given predictions. + + This is the same as calling the above functions, however it aggregates the + metrics generated by evaluate_detections and evaluate_caption_scores across + a list of inputs. + + Args: + predicted_segments: A list of numpy arrays, of shape [K x 2] + containing the predicted segment intervals. + gt_segments: A list of numpy arrays, of shape [S x 2] + containing the ground truth segment intervals. + predicted_captions: A list of lists, of string of shape [K] + containing the corresponding K predicted captions. + gt_captions: A list of lists, of strings of shape [S] containing the + corresponding S ground truth captions. + splits: A list of numpy arrays, of shape [S] indicating + the annotation set (1/2 for ActivityNet). + keys: A list of strings + iou_thresholds: A list of thresholds for IOU to average over. + soda: Whether to compute SODA or not. + tmponly: In this case do not compute captioning metrics. + + Returns: + (precision, recall): The precision and recall of the detections averaged + over the IOU thresholds. + metrics: The NLP metrics of the predictions averaged over the IOU + thresholds. + """ + + # Handle if these are lists, or single samples. + assert all([isinstance(p, list) for p in [predicted_segments, gt_segments]]) + # Only construct the scorers once, so that we don't have any issues with + # overhead when running multiple evaluations. + scorers = { + 'CIDER': Cider(), + 'METEOR': Meteor(), + } + tokenizer = PTBTokenizer() + metric_tiou = collections.defaultdict(list) + gts = {str(threshold): {} for threshold in iou_thresholds} + preds = {str(threshold): {} for threshold in iou_thresholds} + vid2isx = {str(threshold): {} for threshold in iou_thresholds} + + assert len(predicted_segments) == len(gt_segments) == len( + predicted_captions) == len(gt_captions) == len(splits) + + # Compute matches + for pred_seg, gt_seg, pred_cap, gt_cap, key in zip( + predicted_segments, + gt_segments, + predicted_captions, + gt_captions, + keys, + ): + gt, pred, isxes = match_captions( + pred_seg, gt_seg, pred_cap, gt_cap, iou_thresholds + ) + # Flatten for tokenization + for threshold in iou_thresholds: + for k, v in gt[str(threshold)].items(): + gts[str(threshold)][key + '_' + str(k)] = v + for k, v in pred[str(threshold)].items(): + preds[str(threshold)][key + '_' + str(k)] = v + vid2isx[str(threshold)][key] = isxes[str(threshold)] + + # Call tokenization once + for threshold in iou_thresholds: + gts[str(threshold)] = tokenizer.tokenize(gts[str(threshold)]) + preds[str(threshold)] = tokenizer.tokenize(preds[str(threshold)]) + + # Tokenize also the original lists for SODA computation + predicted_captions_dict = { # pylint: disable=g-complex-comprehension + keys[i] + '_' + str(j): [{'caption': p}] + for i, ps in enumerate(predicted_captions) + for j, p in enumerate(ps) + } + gt_captions_dict = { # pylint: disable=g-complex-comprehension + keys[i] + '_' + str(j): [{'caption': g}] + for i, gs in enumerate(gt_captions) + for j, g in enumerate(gs) + } + predicted_captions_tok = tokenizer.tokenize(predicted_captions_dict) + gt_captions_tok = tokenizer.tokenize(gt_captions_dict) + predicted_captions_res = [] + gt_captions_res = [] + for i, ps in enumerate(predicted_captions): + res = [ + predicted_captions_tok[keys[i] + '_' + str(j)][0] + for j, _ in enumerate(ps) + ] + predicted_captions_res.append(res) + for i, gs in enumerate(gt_captions): + res = [gt_captions_tok[keys[i] + '_' + str(j)][0] for j, _ in enumerate(gs)] + gt_captions_res.append(res) + + # Reshape + final_gts = {str(threshold): {} for threshold in iou_thresholds} + final_preds = {str(threshold): {} for threshold in iou_thresholds} + for threshold in iou_thresholds: + for key in keys: + final_gts[str(threshold)][key] = { + str(k): gts[str(threshold)][key + '_' + str(k)] + for k in vid2isx[str(threshold)][key] + } + final_preds[str(threshold)][key] = { + str(k): preds[str(threshold)][key + '_' + str(k)] + for k in vid2isx[str(threshold)][key] + } + + # Compute dense video captioning metrics at the video level + for i, key in enumerate(keys): + pred_filt_i = {str(t): final_preds[str(t)][key] for t in iou_thresholds} + gt_filt_i = {str(t): final_gts[str(t)][key] for t in iou_thresholds} + res = evaluate_single_dense_captions( + predicted_segments[i], + gt_segments[i], + pred_filt_i, + gt_filt_i, + predicted_captions_res[i], + gt_captions_res[i], + splits[i], + key, + iou_thresholds, + soda, + tmponly, + scorers, + ) + for met in res: + metric_tiou[met].append(res[met]) + if soda: + if 'SODA_c_1' not in res: + metric_tiou['SODA_c_1'].append(-1) + if 'SODA_c_2' not in res: + metric_tiou['SODA_c_2'].append(-1) + + logging.info('Closing Meteor') + with scorers['METEOR'].lock: + scorers['METEOR'].meteor_p.stdin.close() + scorers['METEOR'].meteor_p.stdout.close() + scorers['METEOR'].meteor_p.kill() + scorers['METEOR'].meteor_p.wait() + del scorers + + return metric_tiou + + +def evaluate_single_dense_captions(predicted_segments, + gt_segments, + predictions_filtered, + ground_truths_filtered, + predicted_captions, + gt_captions, + splits, + keys, + iou_thresholds=(0.3, 0.5, 0.7, 0.9), + soda=False, + tmponly=False, + scorers=None): + """Compute both the P/R and NLP metrics for the given predictions. + + Args: + predicted_segments: A numpy arrays, of shape [K x 2] + containing the predicted segment intervals. + gt_segments: A numpy arrays, of shape [S x 2] + containing the ground truth segment intervals. + predictions_filtered: Matching list of predicted captions for each threshold. + ground_truths_filtered: Filtered list of ground truth captions for each + threshold. + predicted_captions: A list, of string of shape [K] + containing the corresponding K predicted captions. + gt_captions: A list, of strings of shape [S] containing the + corresponding S ground truth captions. + splits: A numpy array, of shape [S] indicating + the annotation set (1/2 for ActivityNet). + keys: A string + iou_thresholds: A list of thresholds for IOU to average over. + soda: Whether to compute SODA or not. + tmponly: In this case do not compute captioning metrics. + scorers: dictionary mapping strings to scorers. + + Returns: + (precision, recall): The precision and recall of the detections averaged + over the IOU thresholds. + metrics: The NLP metrics of the predictions averaged over the IOU + thresholds. + """ + if scorers is None: + scorers = {} + + # Localization + detection_precision, detection_recall, iou_matrices = ( + evaluate_detections( + predicted_segments, gt_segments, splits, iou_thresholds + ) + ) + + # Captions + n_preds = len(predicted_captions) + if not tmponly: + metric_tiou = evaluate_caption_scores( + ground_truths_filtered, predictions_filtered, + iou_thresholds, scorers) + if soda: + fs = sodac(iou_matrices, scorers['METEOR'], + predicted_captions, gt_captions, splits, (0.,)) + else: + metric_tiou = {} + + mean_precision = sum(detection_precision) / len(detection_precision) + mean_recall = sum(detection_recall) / len(detection_recall) + for j, threshold in enumerate(iou_thresholds): + metric_tiou[f'Precision@{threshold}'] = float(detection_precision[j]) + metric_tiou[f'Recall@{threshold}'] = float(detection_recall[j]) + metric_tiou['Precision_Mean'] = float(mean_precision) + metric_tiou['Recall_Mean'] = float(mean_recall) + metric_tiou['F1_Score'] = 2 * float(mean_recall) * float(mean_precision) / ( + float(mean_recall) + float(mean_precision) + ) if float(mean_recall) + float(mean_precision) > 0 else 0 + if soda and not tmponly: + for split in fs: + metric_tiou[f'SODA_c_{split}'] = float(fs[split]) + metric_tiou['n_preds'] = n_preds + metric_tiou['key'] = keys + + return metric_tiou + + +def parse_sent(sent): + """Sentence preprocessor.""" + res = re.sub('[^a-zA-Z]', ' ', sent) + res = res.strip().lower().split() + return res + + +def evaluate_para(predicted_captions, + gt_captions): + """Paragraph-level evaluation. + + Args: + predicted_captions: A list of strings (paragraphs). + gt_captions: A list of lists (multi-ref) of strings (paragraphs). + + Returns: + metrics: The NLP metrics of the predictions computed at the corpus level. + """ + scorers = { + 'CIDER': Cider(), + 'METEOR': Meteor(), + } + all_gts = {} + all_preds = {} + for i, (preds, gts) in enumerate(zip(predicted_captions, gt_captions)): + all_preds[str(i)] = [' '.join(parse_sent(preds))] + all_gts[str(i)] = [' '.join(parse_sent(gt)) for gt in gts] + + metrics = collections.defaultdict(list) + for scorer_name, scorer in scorers.items(): + score = scorer.compute_score(all_gts, all_preds) + score = np.nan_to_num(score[0]) + metrics['Para_' + scorer_name] = float(score) + + logging.info('Closing Meteor') + with scorers['METEOR'].lock: + scorers['METEOR'].meteor_p.stdin.close() + scorers['METEOR'].meteor_p.stdout.close() + scorers['METEOR'].meteor_p.kill() + scorers['METEOR'].meteor_p.wait() + del scorers + + return metrics diff --git a/scenic/projects/vid2seq/generate_from_file.py b/scenic/projects/vid2seq/generate_from_file.py new file mode 100644 index 0000000000000000000000000000000000000000..03105e4eba5ca0061394f2149b66cfbed1775003 --- /dev/null +++ b/scenic/projects/vid2seq/generate_from_file.py @@ -0,0 +1,232 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Copyright 2021 DeepMind Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Python script to generate TFRecords of SequenceExample from csv.""" + +import contextlib +import math +import os +from typing import Optional, Sequence + +from absl import app +from absl import flags +import numpy as np +import pandas as pd +import tensorflow as tf +from tqdm import tqdm + +flags.DEFINE_string("csv_path", None, "Input csv") +flags.DEFINE_string("output_path", None, "Tfrecords output path.") +flags.DEFINE_string( + "features_path", + None, + "In case features are stored in individual files and not in the csv.", +) +flags.DEFINE_integer( + "num_shards", + -1, + ( + "Number of shards to output, -1 means" + "it will automatically adapt to the sqrt(num_examples)." + ), +) +flags.DEFINE_bool("shuffle_csv", False, "Whether or not to shuffle the csv.") +FLAGS = flags.FLAGS + + +@contextlib.contextmanager +def _close_on_exit(writers): + """Call close on all writers on exit.""" + try: + yield writers + finally: + for writer in writers: + writer.close() + + +def add_float_list(key: str, values: Sequence[float], + sequence: tf.train.SequenceExample): + sequence.feature_lists.feature_list[key].feature.add( + ).float_list.value[:] = values + + +def add_bytes_list(key: str, values: Sequence[bytes], + sequence: tf.train.SequenceExample): + sequence.feature_lists.feature_list[key].feature.add( + ).bytes_list.value[:] = values + + +def add_int_list(key: str, values: Sequence[int], + sequence: tf.train.SequenceExample): + sequence.feature_lists.feature_list[key].feature.add( + ).int64_list.value[:] = values + + +def set_context_int_list(key: str, value: Sequence[int], + sequence: tf.train.SequenceExample): + sequence.context.feature[key].int64_list.value[:] = value + + +def set_context_bytes(key: str, value: bytes, + sequence: tf.train.SequenceExample): + sequence.context.feature[key].bytes_list.value[:] = (value,) + + +def set_context_float(key: str, value: float, + sequence: tf.train.SequenceExample): + sequence.context.feature[key].float_list.value[:] = (value,) + + +def set_context_int(key: str, value: int, sequence: tf.train.SequenceExample): + sequence.context.feature[key].int64_list.value[:] = (value,) + + +def generate_sequence_example(video_id: str, + start: Optional[Sequence[float]], + end: Optional[Sequence[float]], + caption: Optional[Sequence[str]], + asr_start: Sequence[float], + asr_end: Sequence[float], + asr_string: Sequence[str], + features: Sequence[Sequence[float]], + duration: int, + split: Sequence[int] = None): + """Generate a sequence example.""" + + # Initiate the sequence example. + seq_example = tf.train.SequenceExample() + + # Add dense captioning annotations if these exist. + if caption is not None: + for s, e, c in zip(start, end, caption): + seq_example.context.feature[ + "video/timestamps/start" + ].int64_list.value.append(s) + seq_example.context.feature[ + "video/timestamps/end" + ].int64_list.value.append(e) + seq_example.context.feature["caption/string"].bytes_list.value.append( + c.encode() + ) + + # Add ASR. + if asr_start: + for s, e, c in zip(asr_start, asr_end, asr_string): + seq_example.context.feature[ + "ASR/timestamps/start" + ].int64_list.value.append(s) + seq_example.context.feature["ASR/timestamps/end"].int64_list.value.append( + e + ) + seq_example.context.feature["ASR/string"].bytes_list.value.append( + c.encode() + ) + + # Add visual features. + for f in features: + add_float_list("image/clip_embeddings", f, seq_example) + + if split is not None: + for s in split: + seq_example.context.feature["split"].int64_list.value.append(s) + + # Add other metadata. + set_context_bytes("videoid", video_id.encode(), seq_example) + set_context_int("video/duration", duration, seq_example) + return seq_example + + +def main(): + # reads the input csv. + input_csv = pd.read_csv(FLAGS.csv_path) + if FLAGS.num_shards == -1: + num_shards = int(math.sqrt(len(input_csv))) + else: + num_shards = FLAGS.num_shards + # Set up the TFRecordWriters. + basename = os.path.splitext(os.path.basename(FLAGS.csv_path))[0] + shard_names = [ + os.path.join(FLAGS.output_path, f"{basename}-{i:05d}-of-{num_shards:05d}") + for i in range(num_shards) + ] + writers = [tf.io.TFRecordWriter(shard_name) for shard_name in shard_names] + + if FLAGS.shuffle_csv: + input_csv = input_csv.sample(frac=1) + with _close_on_exit(writers) as writers: + for i in tqdm(range(len(input_csv))): + print( + "Processing example %d of %d (%d%%) \r" % + (i, len(input_csv), i * 100 / len(input_csv)), + end="") + if "caption" in input_csv: + start = eval(input_csv["start"].values[i]) # pylint:disable=eval-used + end = eval(input_csv["end"].values[i]) # pylint:disable=eval-used + caption = eval(input_csv["caption"].values[i]) # pylint:disable=eval-used + else: + start = None + end = None + caption = None + asr_start = input_csv["asr_start"].values[i] + if isinstance(asr_start, str): + asr_start = eval(asr_start) # pylint:disable=eval-used + asr_end = input_csv["asr_end"].values[i] + if isinstance(asr_end, str): + asr_end = eval(asr_end) # pylint:disable=eval-used + asr_string = input_csv["asr_string"].values[i] + if isinstance(asr_string, str): + asr_string = eval(asr_string) # pylint:disable=eval-used + video_id = input_csv["video_id"].values[i] + split = None + if "split" in input_csv: + split = input_csv["split"].values[i] + if isinstance(split, str): + split = eval(split) # pylint:disable=eval-used + if "features" not in input_csv: # load on the fly + assert FLAGS.features_path + features = list( + np.load(os.path.join(FLAGS.features_path, video_id + ".npy")) + ) + else: + features = eval(input_csv["features"].values[i]) # pylint:disable=eval-used + duration = int(input_csv["duration"].values[i]) + seq_ex = generate_sequence_example( + video_id, + start, + end, + caption, + asr_start, + asr_end, + asr_string, + features, + duration, + split) + writers[i % len(writers)].write(seq_ex.SerializeToString()) + + +if __name__ == "__main__": + app.run(main) diff --git a/scenic/projects/vid2seq/load_utils.py b/scenic/projects/vid2seq/load_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..175e946566aca281065c1473294ab6177f6a3dc6 --- /dev/null +++ b/scenic/projects/vid2seq/load_utils.py @@ -0,0 +1,403 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utils for loading weights for Vid2Seq.""" + +import copy +import os +import re +from typing import List, Mapping, Optional, Union, Any + +from absl import logging +import flax + +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import ml_collections +from scenic.common_lib import debug_utils +from scenic.train_lib_deprecated.pretrain_utils import get_params_and_model_state_dict +from scenic.train_lib_deprecated.pretrain_utils import inspect_params +from scenic.train_lib_deprecated.train_utils import TrainState +from tensorflow.io import gfile + +PyTree = Union[Mapping[str, Mapping], Any] + + +def init_from_pretrain_weights( + train_state: TrainState, + restored_params: PyTree, + ckpt_prefix_path: Optional[List[str]] = None, + model_prefix_path: Optional[List[str]] = None, + name_mapping: Optional[Mapping[str, str]] = None, + skip_regex: Optional[str] = None) -> TrainState: + """Updates the train_state with pretrained weights. + + Args: + train_state: A raw TrainState for the model. + restored_params: Loaded parameters. + ckpt_prefix_path: Prefix to restored model parameters. + model_prefix_path: Prefix to the parameters to replace in the subtree model. + name_mapping: Mapping from parameter names of checkpoint to this model. + skip_regex: If there is a parameter whose parent keys match the regex, the + parameter will not be replaced from pretrain_state. + + Returns: + Updated train_state. + """ + name_mapping = name_mapping or {} + model_params = train_state.optimizer.target + logging.info( + 'model_params: %s', + jax.tree_util.tree_map( + lambda x: x.shape, flax.core.unfreeze(model_params) + ), + ) + logging.info( + 'restored_params: %s', + jax.tree_util.tree_map(lambda x: x.shape, restored_params), + ) + model_params = replace_dict(model_params, restored_params, ckpt_prefix_path, + model_prefix_path, name_mapping, skip_regex, True) + new_optimizer = train_state.optimizer.replace(target=model_params) + train_state = train_state.replace( # pytype: disable=attribute-error + optimizer=new_optimizer) + return train_state + + +def replace_dict(model: PyTree, + restored: PyTree, + ckpt_prefix_path: Optional[List[str]] = None, + model_prefix_path: Optional[List[str]] = None, + name_mapping: Optional[Mapping[str, str]] = None, + skip_regex: Optional[str] = None, + compat: bool = False) -> PyTree: + """Restores checkpoint in model dictionary, compatible with additional timestamp tokens.""" + + model = flax.core.unfreeze(model) # pytype: disable=wrong-arg-types + restored = flax.core.unfreeze(restored) # pytype: disable=wrong-arg-types + + if ckpt_prefix_path: + for p in ckpt_prefix_path: + restored = restored[p] + + if model_prefix_path: + for p in reversed(model_prefix_path): + restored = {p: restored} + + # Flatten nested parameters to a dict of str -> tensor. Keys are tuples + # from the path in the nested dictionary to the specific tensor. E.g., + # {'a1': {'b1': t1, 'b2': t2}, 'a2': t3} + # -> {('a1', 'b1'): t1, ('a1', 'b2'): t2, ('a2',): t3}. + restored_flat = flax.traverse_util.flatten_dict( + dict(restored), keep_empty_nodes=True) + model_flat = flax.traverse_util.flatten_dict( + dict(model), keep_empty_nodes=True) + + for m_key, m_params in restored_flat.items(): + # pytype: disable=attribute-error + for name, to_replace in name_mapping.items(): + m_key = tuple(to_replace if k == name else k for k in m_key) + # pytype: enable=attribute-error + m_key_str = '/'.join(m_key) + if m_key not in model_flat: + if ('tmp_' + m_key[0], *m_key[1:]) in model_flat: + m_key = ('tmp_' + m_key[0], *m_key[1:]) + else: + logging.warning('%s in checkpoint doesn\'t exist in model. Skip.', + m_key_str) + continue + if skip_regex and re.findall(skip_regex, m_key_str): + logging.info('Skip loading parameter %s.', m_key_str) + continue + logging.info('Loading %s from checkpoint into model', m_key_str) + # shared_decoder_token_embedder/embedding 32128 768 + if compat and m_params.shape[0] < model_flat[m_key].shape[0]: + logging.info( + 'Loading everything but the last axis 0 %d values', + (model_flat[m_key].shape[0] - m_params.shape[0]) + ) + model_flat[m_key] = jnp.concatenate([ + m_params, + model_flat[m_key][-(model_flat[m_key].shape[0] - m_params.shape[0]):] + ], + axis=0) + # text_decoder/decoder_module/logits_dense/kernel 768 32128 + elif compat and m_params.shape[0] > model_flat[m_key].shape[0]: # tmp only + continue + elif compat and len( + m_params.shape) == 2 and m_params.shape[1] < model_flat[m_key].shape[1]: + logging.info( + 'Loading everything but the last axis 1 %d values', + (model_flat[m_key].shape[1] - m_params.shape[1]) + ) + model_flat[m_key] = jnp.concatenate([ + m_params, + model_flat[m_key][:, + -(model_flat[m_key].shape[1] - m_params.shape[1]):] + ], + axis=1) + elif compat and len( + m_params.shape) == 2 and m_params.shape[1] > model_flat[m_key].shape[1]: + continue # tmp only + else: + model_flat[m_key] = m_params + + return flax.core.freeze(flax.traverse_util.unflatten_dict(model_flat)) + + +def restore_pretrained_checkpoint( + checkpoint_path: str, + train_state: Optional[TrainState] = None, + assert_exist: bool = False, + step: Optional[int] = None) -> TrainState: + """Restores the last checkpoint. + + First restores the checkpoint, which is an instance of TrainState that holds + the state of training. This function also take care converting pre-Linen + checkpoints. + + Args: + checkpoint_path: Directory for saving the checkpoint. + train_state: An instance of TrainState that holds the state of training. + assert_exist: Assert that there is at least one checkpoint exists in the + given path. + step: Step number to load or None to load latest. If specified, + checkpoint_path must be a directory. + + Returns: + Training state and an int which is the current step. + """ + if assert_exist: + glob_path = os.path.join(checkpoint_path, 'checkpoint_*') + if not gfile.glob(glob_path): + raise ValueError('No checkpoint for the pretrained model is found in: ' + f'{checkpoint_path}') + restored_train_state = checkpoints.restore_checkpoint(checkpoint_path, None, + step) + + # no bins at PT case + if train_state.optimizer.target['text_decoder']['decoder_module'][ # pytype: disable=attribute-error + 'logits_dense']['kernel'].shape > restored_train_state['optimizer'][ + 'target']['text_decoder']['decoder_module']['logits_dense'][ + 'kernel'].shape: + x = restored_train_state['optimizer']['target']['text_decoder'][ + 'decoder_module']['logits_dense']['kernel'] + x2 = train_state.optimizer.target['text_decoder']['decoder_module'][ # pytype: disable=attribute-error + 'logits_dense']['kernel'] + restored_train_state['optimizer']['target']['text_decoder'][ + 'decoder_module']['logits_dense']['kernel'] = jnp.concatenate( + [x, x2[:, x.shape[1]:]], 1) + y = restored_train_state['optimizer']['state']['param_states'][ + 'text_decoder']['decoder_module']['logits_dense']['kernel'] + y2 = train_state.optimizer.state.param_states['text_decoder'][ # pytype: disable=attribute-error + 'decoder_module']['logits_dense']['kernel'] + restored_train_state['optimizer']['state']['param_states']['text_decoder'][ + 'decoder_module']['logits_dense']['kernel'][ + 'grad_ema'] = jnp.concatenate( + [y['grad_ema'], y2.grad_ema[:, y['grad_ema'].shape[1]:]], 1) + restored_train_state['optimizer']['state']['param_states']['text_decoder'][ + 'decoder_module']['logits_dense']['kernel'][ + 'grad_sq_ema'] = jnp.concatenate([ + y['grad_sq_ema'], y2.grad_sq_ema[:, y['grad_sq_ema'].shape[1]:] + ], 1) + # no bins at FT case + elif train_state.optimizer.target['text_decoder']['decoder_module'][ # pytype: disable=attribute-error + 'logits_dense']['kernel'].shape < restored_train_state['optimizer'][ + 'target']['text_decoder']['decoder_module']['logits_dense'][ + 'kernel'].shape: + x = restored_train_state['optimizer']['target']['text_decoder'][ + 'decoder_module']['logits_dense']['kernel'] + x2 = train_state.optimizer.target['text_decoder']['decoder_module'][ # pytype: disable=attribute-error + 'logits_dense']['kernel'] + restored_train_state['optimizer']['target']['text_decoder'][ + 'decoder_module']['logits_dense']['kernel'] = x[:, :x2.shape[1]] + y = restored_train_state['optimizer']['state']['param_states'][ + 'text_decoder']['decoder_module']['logits_dense']['kernel'] + y2 = train_state.optimizer.state.param_states['text_decoder'][ # pytype: disable=attribute-error + 'decoder_module']['logits_dense']['kernel'] + restored_train_state['optimizer']['state']['param_states']['text_decoder'][ + 'decoder_module']['logits_dense']['kernel'][ + 'grad_ema'] = y['grad_ema'][:, :y2.grad_ema.shape[1]] + restored_train_state['optimizer']['state']['param_states']['text_decoder'][ + 'decoder_module']['logits_dense']['kernel'][ + 'grad_sq_ema'] = y['grad_sq_ema'][:, :y2.grad_sq_ema.shape[1]] + + # no bins at PT case + if restored_train_state['optimizer']['target'][ + 'shared_decoder_token_embedder'][ + 'embedding'].shape < train_state.optimizer.target[ # pytype: disable=attribute-error + 'shared_decoder_token_embedder']['embedding'].shape: + x = copy.deepcopy( + restored_train_state['optimizer']['state']['param_states'] + ['shared_decoder_token_embedder']['embedding']) + x2 = copy.deepcopy( + train_state.optimizer.state # pytype: disable=attribute-error + .param_states['shared_decoder_token_embedder']['embedding']) + restored_train_state['optimizer']['state']['param_states'][ + 'shared_decoder_token_embedder'] = { + 'embedding': { + 'grad_ema': + jnp.concatenate([ + x['grad_ema'], x2.grad_ema[x['grad_ema'].shape[0]:] + ], 0), + 'grad_sq_ema': + jnp.concatenate([ + x['grad_sq_ema'], + x2.grad_sq_ema[x['grad_sq_ema'].shape[0]:] + ], 0) + } + } + y = copy.deepcopy(restored_train_state['optimizer']['target'] + ['shared_decoder_token_embedder']['embedding']) + y2 = copy.deepcopy(train_state.optimizer.target # pytype: disable=attribute-error + ['shared_decoder_token_embedder']['embedding']) + restored_train_state['optimizer']['target'][ + 'shared_decoder_token_embedder'] = { + 'embedding': jnp.concatenate([y, y2[y.shape[0]:]], 0) + } + # no bins at FT case + elif restored_train_state['optimizer']['target'][ + 'shared_decoder_token_embedder'][ + 'embedding'].shape > train_state.optimizer.target[ # pytype: disable=attribute-error + 'shared_decoder_token_embedder']['embedding'].shape: + x = copy.deepcopy( + restored_train_state['optimizer']['state']['param_states'] + ['shared_decoder_token_embedder']['embedding']) + x2 = copy.deepcopy( + train_state.optimizer.state # pytype: disable=attribute-error + .param_states['shared_decoder_token_embedder']['embedding']) + restored_train_state['optimizer']['state']['param_states'][ + 'shared_decoder_token_embedder'] = { + 'embedding': { + 'grad_ema': x['grad_ema'][:x2.grad_ema.shape[0]], + 'grad_sq_ema': x['grad_sq_ema'][:x2.grad_sq_ema.shape[0]], + } + } + y = copy.deepcopy(restored_train_state['optimizer']['target'] + ['shared_decoder_token_embedder']['embedding']) + y2 = copy.deepcopy(train_state.optimizer.target # pytype: disable=attribute-error + ['shared_decoder_token_embedder']['embedding']) + restored_train_state['optimizer']['target'][ + 'shared_decoder_token_embedder'] = { + 'embedding': y[:y2.shape[0]] + } + + if restored_train_state is None: + raise ValueError('No checkpoint for the pretrained model is found in: ' + f'{checkpoint_path}') + (restored_params, + restored_model_state) = get_params_and_model_state_dict(restored_train_state) + restored_params = flax.core.freeze(restored_params) + restored_model_state = flax.core.freeze(restored_model_state) + if train_state: + new_train_state = train_state + new_optimizer = train_state.optimizer.replace( + # Inspect and compare the parameters of the model with the init-model. + target=inspect_params( + expected_params=train_state.optimizer.target, + restored_params=restored_params, + fail_if_extra=False, + fail_if_missing=False, + fail_if_shapes_mismatch=False)) + else: + new_train_state = TrainState() + new_optimizer = {'target': restored_params} + + new_train_state = new_train_state.replace( # pytype: disable=attribute-error + optimizer=new_optimizer, + model_state=restored_model_state, + global_step=int(restored_train_state['global_step']), + rng=restored_train_state['rng'], + accum_train_time=restored_train_state.get('accum_train_time', 0)) + + return new_train_state + + +def initialise_from_train_state( + config, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_proj: bool, + log_initialised_param_shapes: bool = True, + one_config: bool = True) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is written to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + config: Configurations for the model being updated, or tuple of configs. + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of a + pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + restore_output_proj: If true, load the final output projection. Set + to False if finetuning to a new dataset. + log_initialised_param_shapes: If true, print tabular summary of all the + variables in the model once they have been initialised. + one_config: If true, we have only a single config. If false, we get a tuple + of configs in the order [init_config, model_config, dataset_config]. This + is useful for works that build upon MBT and have different models in their + config. + + Returns: + Updated train_state. + """ + # Split up configs + if one_config: + init_config = config.init_from + model_config = config.model + else: + init_config, model_config = config + + # Inspect and compare the parameters of the model with the init-model + params = flax.core.unfreeze(train_state.optimizer.target) + + if init_config.get('checkpoint_format', 'scenic') == 'bigvision': + restored_params = restored_train_state.optimizer['target'] + else: + restored_params = restored_train_state.optimizer.target + restored_params = flax.core.unfreeze(restored_params) + for m_key, m_params in restored_params.items(): + if m_key == 'output_projection': + if restore_output_proj: + params[m_key] = m_params + else: + pass + elif m_key == 'pre_logits': + if model_config.representation_size is None: + # We don't have representation_size in the new model, so let's ignore + # if from the pretained model, in case it has it. + # Note, removing the key from the dictionary is necessary to prevent + # obscure errors from the Flax optimizer. + params.pop(m_key, None) + else: + assert restored_model_cfg.representation_size + params[m_key] = m_params + else: + if m_key in train_state.optimizer.target: + params[m_key] = m_params + else: + logging.info('Skipping %s. In restored model but not in target', + m_key) + + if log_initialised_param_shapes: + logging.info('Parameter summary after initialising from train state') + debug_utils.log_param_shapes(params) + return train_state.replace( + optimizer=train_state.optimizer.replace(target=flax.core.freeze(params))) diff --git a/scenic/projects/vid2seq/main.py b/scenic/projects/vid2seq/main.py new file mode 100644 index 0000000000000000000000000000000000000000..c6937f6cb1c2a7acaff2a05b4d8116e378eaef70 --- /dev/null +++ b/scenic/projects/vid2seq/main.py @@ -0,0 +1,82 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Main script for training Dense Video Captioning models.""" + +import os +from typing import Any, Callable + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.vid2seq import models +from scenic.projects.vid2seq import trainer +from scenic.projects.vid2seq.datasets.dense_video_captioning_tfrecord_dataset import get_datasets + +# replace with the path to your JAVA bin location +JRE_BIN_JAVA = path_to_jre_bin_java + +flags.DEFINE_string('jre_path', '', + 'Path to JRE.') + +FLAGS = flags.FLAGS + + +def get_model_cls(model_name: str) -> Callable[..., Any]: + """Returns model class given its name.""" + if model_name == 'vid2seq': + return models.DenseVideoCaptioningModel + raise ValueError(f'Unrecognized model: {model_name}.') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the Vid2Seq project.""" + jave_jre = JRE_BIN_JAVA + os.environ['JRE_BIN_JAVA'] = java_jre + + # ensure arguments match + config.model.decoder.num_bins = config.dataset_configs.num_bins + config.model.decoder.tmp_only = config.dataset_configs.tmp_only + config.model.decoder.order = config.dataset_configs.order + + model_cls = get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset_dict = get_datasets( + config, + data_rng=data_rng) + + if config.num_training_epochs: + trainer.train_and_eval( + rng=rng, + config=config, + model_cls=model_cls, + dataset_dict=dataset_dict, + workdir=workdir, + writer=writer) + else: + trainer.eval_only( + rng=rng, + config=config, + model_cls=model_cls, + dataset_dict=dataset_dict, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/vid2seq/models.py b/scenic/projects/vid2seq/models.py new file mode 100644 index 0000000000000000000000000000000000000000..9696cf52bb31621fb41d7fce06524d1114c5c4c0 --- /dev/null +++ b/scenic/projects/vid2seq/models.py @@ -0,0 +1,580 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dual encoder w/ temporal transformer + T5 encoder and decoder w/ time tokens. +""" + +import functools +from typing import Any, Dict, Mapping, Optional, Tuple + +from absl import logging +import flax.linen as nn +from flax.training import common_utils +import jax +import jax.numpy as jnp +import ml_collections +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import model_utils as base_model_utils +from scenic.projects.baselines import vit +from scenic.projects.t5 import layers as t5_model +from scenic.projects.t5 import model as t5_pretrained +from t5x import decoding +from t5x.models import DecodeFnCallable + + +beam_search = decoding.beam_search +temperature_sample = decoding.temperature_sample + +Batch = Dict[str, jnp.ndarray] +PyTree = Any + + +class CatEncoder(nn.Module): + """Concat ViT temporal encodings with T5 text encodings.""" + enc_type: str + enc_config: ml_collections.ConfigDict + embedder: nn.Module + num_bins: int + + def setup(self): + self.visual_encoder = vit.Encoder( + mlp_dim=self.enc_config.get('dim', 2048), + num_layers=self.enc_config.get('layers', 12), + num_heads=self.enc_config.get('heads', 12), + positional_embedding=self.enc_config.get('pos_embed', 'learned_1d'), + dropout_rate=self.enc_config.get('dropout_rate', 0.), + attention_dropout_rate=self.enc_config.get('dropout_rate', 0.), + stochastic_depth=self.enc_config.get('stochastic_depth', 0.)) + enc_cfg = self.enc_config.get('pretrained_config', 't5_1_1_base') + t5_config = t5_pretrained.CONFIGS[enc_cfg] + t5_config['dropout_rate'] = self.enc_config.get('t5_dropout_rate', 0.) + if self.num_bins: # add time tokens to the vocabulary + t5_config['vocab_size'] = 32128 + self.num_bins + self.t5_encoder = t5_model.T5Encoder( + **t5_config, + shared_embedding=self.embedder, + name='video_encoder') + self.proj_dim = 768 + if enc_cfg == 't5_1_1_large': + self.proj_dim = 1024 + self.proj = nn.Dense( + self.proj_dim, dtype=self.t5_encoder.dtype, name='vis_to_text') + elif enc_cfg == 't5_1_1_small': + self.proj_dim = 512 + self.proj = nn.Dense( + self.proj_dim, dtype=self.t5_encoder.dtype, name='vis_to_text') + + def __call__(self, + features=None, + encoder_input_tokens=None, + encoder_segment_ids=None, + enable_dropout=True): + if features is not None: + visual_embeddings = self.visual_encoder( + features, train=enable_dropout) + if self.proj_dim != 768: + visual_embeddings = self.proj(visual_embeddings) + if encoder_input_tokens is not None: + x = self.t5_encoder( + encoder_input_tokens=encoder_input_tokens, + encoder_segment_ids=None, + enable_dropout=enable_dropout) + x = {'encoded': x, 'mask': encoder_input_tokens > 0} + cat = jnp.concatenate([visual_embeddings, x['encoded']], axis=1) + cat_mask = jnp.concatenate([ + jnp.ones(visual_embeddings.shape[:2]) > 0, + x['mask'] + ], + axis=1) + else: + cat = visual_embeddings + cat_mask = jnp.ones( + visual_embeddings.shape[:2]) > 0 + elif encoder_input_tokens is not None: + x = self.t5_encoder( + encoder_input_tokens=encoder_input_tokens, + encoder_segment_ids=None, + enable_dropout=enable_dropout) + cat = x + cat_mask = encoder_input_tokens > 0 + else: + raise NotImplementedError + return {'encoded': cat, 'mask': cat_mask} + + +class EncoderDecoderModule(nn.Module): + """Encoder-Decoder module.""" + + config: ml_collections.ConfigDict + + def encode(self, *args, **kwargs): + raise NotImplementedError('Subclasses must implement encode.') + + def decode(self, *args, **kwargs): + raise NotImplementedError('Subclasses must implement decode.') + + +class DenseVideoCaptioningModule(EncoderDecoderModule): + """Dense video captioning module that encodes a video and generate tokens.""" + + def _get_encoder(self, + enc_type: str, + enc_config: ml_collections.ConfigDict, + embedder: Optional[nn.Module] = None, + num_bins: int = 0): + if enc_type == 'tmp': + encoder = vit.Encoder( + mlp_dim=enc_config.get('dim'), + num_layers=enc_config.get('layers'), + num_heads=enc_config.get('heads'), + positional_embedding=enc_config.get('pos_embed'), + dropout_rate=enc_config.get('dropout_rate'), + attention_dropout_rate=enc_config.get('dropout_rate'), + stochastic_depth=enc_config.get('stochastic_depth')) + elif enc_type == 't5_encoder': + t5_config = t5_pretrained.CONFIGS[enc_config.pretrained_config] + t5_config['dropout_rate'] = enc_config.get('dropout_rate') + if num_bins: # add timestamp tokens to the vocabulary + t5_config['vocab_size'] = 32128 + num_bins + encoder = t5_model.T5Encoder( + **t5_config, + shared_embedding=embedder, + name='video_encoder') + elif enc_type == 'cat_encoder': + encoder = CatEncoder(enc_type=enc_type, + enc_config=enc_config, + embedder=embedder, + num_bins=num_bins) + else: + raise ValueError(f'Unrecognized encoder type: {enc_type}.') + + return encoder + + def _get_decoder(self, + dec_type: str, + dec_config: ml_collections.ConfigDict, + num_bins: int, + tmp_only: bool = False): + if dec_type == 't5_decoder': # add timestamp tokens to the vocabulary + t5_config = t5_pretrained.CONFIGS[dec_config.pretrained_config] + t5_config['dropout_rate'] = dec_config.dropout_rate + t5_config['logits_via_embedding'] = dec_config.logits_via_embedding + if tmp_only: + t5_config['vocab_size'] = num_bins + 2 + else: + t5_config['vocab_size'] = 32128 + num_bins + decoder_embedder = t5_model.t5_layers.Embed( + num_embeddings=t5_config['vocab_size'], + features=t5_config['emb_dim'], + dtype=t5_config['dtype'], + attend_dtype=jnp.float32, # For logit training stability. + embedding_init=nn.initializers.normal(stddev=1.0), + one_hot=True, + name='shared_decoder_token_embedder') + decoder = t5_model.T5Decoder( + **t5_config, + shared_embedding=decoder_embedder, + name='text_decoder') + else: + raise ValueError(f'Unrecognized decoder type: {dec_type}.') + + return (decoder_embedder, decoder) + + def setup(self): + self.decoder_type = self.config.get('decoder_type', 't5_decoder') + decoder_config = self.config.decoder.get(self.decoder_type) + num_bins = self.config.decoder.get('num_bins') + self.encoder_type = self.config.encoder.get('encoder_type') + encoder_config = self.config.encoder.get(self.encoder_type) + self.embedder, self.decoder = self._get_decoder( + self.decoder_type, + decoder_config, + num_bins) + + self.encoder = self._get_encoder( + self.encoder_type, + encoder_config, + self.embedder, + num_bins) + + def encode(self, encoder_inputs, *, train=True): + # load modalities + if 'features' in encoder_inputs: + features = encoder_inputs['features'] + else: + features = None + + if 'text' in encoder_inputs: + encoder_input_tokens = encoder_inputs['text'] + else: + encoder_input_tokens = None + + if self.config.encoder.encoder_type in [ + 't5_encoder', 'cat_encoder' + ]: # give correct arguments + return self.encoder( + features=features, + encoder_input_tokens=encoder_input_tokens, + encoder_segment_ids=None, + enable_dropout=train) # pytype: disable=wrong-keyword-args + return self.encoder(features, train=train) # pytype: disable=wrong-keyword-args + + def decode(self, + encoded, + decoder_inputs, + *, + train=True, + decode=False, + max_decode_length=None): + + return self.decoder( + encoded, + **decoder_inputs, + enable_dropout=train, + decode=decode, + max_decode_length=max_decode_length) + + def __call__(self, + encoder_inputs, + decoder_inputs, + *, + train=True, + decode=False, + max_decode_length=None, + debug: bool = False): + if debug: + logging.info('encoder_inputs: %s', encoder_inputs) + logging.info('decoder_inputs: %s', decoder_inputs) + encoded = self.encode(encoder_inputs, train=train) + # Fill in encoder_input_tokens if not provided. + # This sets the all output embeddings to be valid inputs. + if self.config.encoder.encoder_type in [ + 't5_encoder', 'cat_encoder' + ]: + decoder_inputs['encoder_input_tokens'] = encoded['mask'] + encoded = encoded['encoded'] + else: + if 'encoder_input_tokens' not in decoder_inputs: + decoder_inputs['encoder_input_tokens'] = jnp.ones(encoded.shape[:-1]) # pytype: disable=attribute-error + + # joint time and text + return {'logits': self.decode( + encoded, + decoder_inputs, + train=train, + decode=decode, + max_decode_length=max_decode_length), + 'encoded': encoded} + + +class EncoderWithT5DecoderModel(base_model.BaseModel): + """Encoder-decoder model with T5 decoder implementing beam-search.""" + + def _compute_logits_from_slice( + self, decoding_state: decoding.DecodingState, all_variables: PyTree, + encoded_inputs: jnp.ndarray, input_masks: jnp.ndarray, + max_decode_length: int, + ) -> Tuple[jnp.ndarray, Mapping[str, jnp.ndarray]]: + """Token slice to logits from decoder model.""" + flat_ids = decoding_state.cur_token + flat_cache = decoding_state.cache + # flat_ids: [batch * beam, seq_len=1] + # cache is expanded inside beam_search to become flat_cache + # flat_cache: [batch * beam, num_heads, depth_per_head, max_decode_len] + # flat_logits: [batch * beam, seq_len=1, vocab] + flat_logits, new_vars = self.flax_model.apply( + { + 'cache': flat_cache, + **all_variables + }, + encoded_inputs, { + 'encoder_input_tokens': input_masks, + 'decoder_input_tokens': flat_ids, + 'decoder_target_tokens': flat_ids, + }, + train=False, + decode=True, + max_decode_length=max_decode_length, + mutable=['cache'], + method=self.flax_model.decode) + # Remove sequence length dimension since it's always 1 during decoding. + flat_logits = jnp.squeeze(flat_logits, axis=1) + new_flat_cache = new_vars['cache'] + return flat_logits, new_flat_cache + + def predict_batch_with_aux( + self, + params: PyTree, + batch: PyTree, + decode_fn: DecodeFnCallable, + eos_id: int = 1, + decoder_params: Optional[Dict[str, Any]] = None, + return_all_decodes: bool = False, + num_decodes: int = 1, + alpha: float = 0.6, + decoding_method: str = 'beamsearch', + temperature: float = 1.0, + vocabulary_size: int = 32128, + ): + """Predict with fast decoding beam search on a batch. + + This is copied and modified from T5X EncoderDecoderTransformer model in + third_party/py/t5x/models.py. + + Here we refer to "parameters" for values that can be compiled into the + model dynamically, as opposed to static configuration settings that require + a recompile. For example, the model weights and the decoder brevity-penalty + are parameters and can be modified without requiring a recompile. The number + of layers, the batch size and the decoder beam size are configuration + options that require recompilation if changed. + + This method can be used with a customizable decoding function as long as it + follows the signature of `DecodeFnCallable`. In order to provide a unified + interface for the decoding functions, we use a generic names. For example a + beam size is a concept unique to beam search. Conceptually, it corresponds + to the number of sequences returned by the beam search. Therefore, the + generic argument `num_decodes` corresponds to the beam size if + `decode_fn` is a beam search. For temperature sampling, `num_decodes` + corresponds to the number of indepedent sequences to be sampled. Typically + `num_decodes = 1` is used for tempeature sampling. + + If `return_all_decodes = True`, the return tuple contains the predictions + with a shape [batch, num_decodes, max_decode_len] and the scores (i.e., log + probability of the generated sequence) with a shape [batch, num_decodes]. + + If `return_all_decodes = False`, the return tuple contains the predictions + with a shape [batch, max_decode_len] and the scores with a shape [batch]. + + `decoder_params` can be used to pass dynamic configurations to + `decode_fn`. An example usage is to pass different random seed (i.e., + `jax.random.PRNGKey(seed)` with different `seed` value). This can be done by + setting `decoder_params['decode_rng'] = jax.random.PRNGKey(seed)`. + + Args: + params: model parameters. + batch: a batch of inputs. + decode_fn: function implementing the decode method. + eos_id: EOS token id in the vocabulary. + decoder_params: additional (model-independent) parameters for the decoder. + return_all_decodes: whether to return the entire beam or just the top-1. + num_decodes: the number of beams to use in beam search. + alpha: length penalty factor for beam search. + decoding_method: decoding method. + temperature: temperature for nucleus sampling. + vocabulary_size: size of the vocabulary for the textual tokens. + + Returns: + A tuple containing: + the batch of predictions, with the entire beam if requested + an auxiliary dictionary of decoder scores + """ + # Prepare zeroed-out autoregressive cache. + encoder_inputs = jax.tree_util.tree_map( + jnp.ones_like, batch['encoder_inputs'] + ) + decoder_inputs = jax.tree_util.tree_map( + jnp.ones_like, batch['decoder_inputs'] + ) + _, variables_with_cache = self.flax_model.apply( + params, + encoder_inputs, + decoder_inputs, + decode=True, + train=False, + mutable=['cache']) + cache = variables_with_cache['cache'] + + # Prepare transformer fast-decoder call for beam search: for beam search, we + # need to set up our decoder model to handle a batch size equal to + # batch_size * num_decodes, where each batch item's data is expanded + # in-place rather than tiled. + # i.e. if we denote each batch element subtensor as el[n]: + # [el0, el1, el2] --> beamsize=2 --> [el0,el0,el1,el1,el2,el2] + # [batch * num_decodes, input_len, emb_dim] + beam_expand_fn = functools.partial( + decoding.flat_batch_beam_expand, beam_size=num_decodes) + non_expanded_encoded = self.flax_model.apply( + params, + batch['encoder_inputs'], + train=False, + method=self.flax_model.encode) + encoded_inputs = jax.tree_util.tree_map( + beam_expand_fn, non_expanded_encoded + ) + if isinstance(encoded_inputs, dict): # set decoder mask + batch['decoder_inputs']['encoder_input_tokens'] = encoded_inputs['mask'] + encoded_inputs = encoded_inputs['encoded'] + + # Set the all output embeddings to be valid inputs if encoder_input_tokens + # are not provided. Note that this tensor should be beam-extended too. + decoder_inputs = batch['decoder_inputs'] + if 'encoder_input_tokens' not in decoder_inputs: + input_masks = jnp.ones(encoded_inputs.shape[:-1]) + else: + input_masks = decoder_inputs['encoder_input_tokens'] + + tokens_ids_to_logits = functools.partial( + self._compute_logits_from_slice, + all_variables=params, + encoded_inputs=encoded_inputs, + input_masks=input_masks, + max_decode_length=decoder_inputs['decoder_input_tokens'].shape[1]) + + if decoder_params is None: + decoder_params = {} + + # `decoder_prompt_inputs` is only used to obtain batch size + # and max decode length information here. + decoder_prompt_inputs = jnp.zeros_like( + decoder_inputs['decoder_input_tokens']) + + # Using the above-defined single-step decoder function, run a + # beam search over possible sequences given input encoding. + # decodes: [batch, num_decodes, max_decode_len + 1] + # scores: [batch, num_decodes] + if decoding_method == 'temperature_sample': + decodes, scores = decode_fn( + inputs=decoder_prompt_inputs, + cache=cache, + tokens_to_logits=tokens_ids_to_logits, + eos_id=eos_id, + topp=alpha, + topk=0, + temperature=temperature, + num_decodes=num_decodes, + cache_offset=0, + **decoder_params) + else: # beam search + decodes, scores = decode_fn( + inputs=decoder_prompt_inputs, + cache=cache, + tokens_to_logits=tokens_ids_to_logits, + eos_id=eos_id, + alpha=alpha, + num_decodes=num_decodes, + cache_offset=0, + **decoder_params) + + # Beam search returns [n_batch, n_beam, n_length] with beam dimension sorted + # in increasing order of log-probability. + # Return the highest scoring beam sequence. + if return_all_decodes: + return decodes, {'scores': scores} + else: + return decodes[:, -1, :], {'scores': scores[:, -1]} + + +def l2_normalize(x, axis=None, eps=1e-12): + """Normalizes along dimension `axis` using an L2 norm. + + This specialized function exists for numerical stability reasons. + Args: + x: An input ndarray. + axis: Dimension along which to normalize, e.g. `1` to separately normalize + vectors in a batch. Passing `None` views `t` as a flattened vector when + calculating the norm (equivalent to Frobenius norm). + eps: Epsilon to avoid dividing by zero. + Returns: + An array of the same shape as 'x' L2-normalized along 'axis'. + """ + return x * jax.lax.rsqrt((x * x).sum(axis=axis, keepdims=True) + eps) + + +class DenseVideoCaptioningModel(EncoderWithT5DecoderModel): + """Dense video captioning model with a video encoder and a text decoder.""" + + def build_flax_model(self) -> nn.Module: + return DenseVideoCaptioningModule(self.config.model) + + def loss_function( # pytype: disable=signature-mismatch # jax-ndarray + self, + logits: jnp.ndarray, + batch: Batch, + model_params: Optional[Dict[str, jnp.ndarray]] = None) -> float: + """Returns negative loglikelihood (NLL) of the target sentence with an L2 penalty on the weights. + + Args: + logits: Output of model in shape [batch, length, num_voca]. + batch: Batch of data that has 'decoder_target_tokens'. + model_params: Parameters of the model, for optionally applying + regularization. + + Returns: + Total loss. + """ + targets = batch['decoder_inputs']['decoder_target_tokens'] + + if logits.ndim != targets.ndim + 1: + raise ValueError( + 'Incorrect shapes. Got shape %s logits and %s targets' % + (str(logits.shape), str(targets.shape))) + + target_masks = targets > 0 + vocab_size = logits.shape[-1] + onehot_targets = common_utils.onehot(targets, vocab_size) + + sent_nll_loss = base_model_utils.weighted_softmax_cross_entropy( + logits, + onehot_targets, + target_masks, + label_smoothing=self.config.get('label_smoothing')) + + if self.config.get('l2_decay_factor') is None: + total_loss = sent_nll_loss + else: + l2_loss = base_model_utils.l2_regularization(model_params) + total_loss = sent_nll_loss + self.config.l2_decay_factor * l2_loss + + return total_loss # pytype: disable=bad-return-type # jax-ndarray + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one of + the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(preds, + label, weights)``` + """ + + def token_accuracy(logits, + batch: Batch) -> Dict[str, Tuple[float, int]]: + # This metric is computed only during teacher forcing training mode. + if split != 'train': + return {} + + targets = batch['decoder_inputs']['decoder_target_tokens'] + + batch_mask = batch['batch_mask'] + + # logits: [batch_size, seq_len, vocab_size] + # targets: [batch_size, seq_len] + # batch_mask: [batch_size] + one_hot_targets = common_utils.onehot(targets, logits.shape[-1]) + masks = jnp.greater(targets, 0).astype(jnp.int32) * batch_mask[:, None] + + n_corrects = base_model_utils.weighted_correctly_classified( + logits, one_hot_targets, masks) + n_valids = base_model_utils.num_examples(logits, one_hot_targets, masks) + + key = 'token_accuracy' + return { # pytype: disable=bad-return-type # jax-ndarray + key: + base_model_utils.psum_metric_normalizer((n_corrects, n_valids)) + } + + return token_accuracy + + def default_flax_model_config(self) -> ml_collections.ConfigDict: + return ml_collections.ConfigDict({}) diff --git a/scenic/projects/vid2seq/requirements.txt b/scenic/projects/vid2seq/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..b40a3714b98db3df767f28e0bfa029971e00cc05 --- /dev/null +++ b/scenic/projects/vid2seq/requirements.txt @@ -0,0 +1,6 @@ +dmvr @ git+https://github.com/deepmind/dmvr.git +gin-config +t5 +t5x +six +flax==0.5 diff --git a/scenic/projects/vid2seq/train_utils.py b/scenic/projects/vid2seq/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..9a963998ba7c2962a78eda763471be139875d8e4 --- /dev/null +++ b/scenic/projects/vid2seq/train_utils.py @@ -0,0 +1,120 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utils for training.""" + +from typing import Any, Dict, Optional, Tuple + +from flax.core import frozen_dict +import ml_collections +from scenic.train_lib_deprecated.train_utils import TrainState + + +def get_average_batch_size(config: ml_collections.ConfigDict): + """Computes average batch size.""" + + if config.get('batch_size') is not None: + return config.batch_size + + batch_sizes_sum = 0 + n_datasets = 0 + + for bs in config.batch_sizes.values(): + batch_sizes_sum += bs + n_datasets += 1 + + average_batch_size = int(batch_sizes_sum // n_datasets) + + return average_batch_size + + +def get_num_training_steps_multi( + config: ml_collections.ConfigDict, + datasets_metadata: Dict[str, Dict[str, Any]]) -> Tuple[int, Optional[int]]: + """Calculates the total number of training step and possibly steps_per_epoch. + + The main training loop is based on number of training steps. Thus, for + datasets + that we want to train based on number of epochs, we need to calculate the + total number of training steps. This function looks for `num_training_steps` + in config, if it exists it returns that as the total step and `None` as + `steps_per_epoch`. If num_training_steps doesn't exist, then it looks for + `num_training_epochs` and given the size of training data calculates the total + steps and steps_per_epoch. In this computation, we assume that + drop_remainder=True. + + Args: + config: Configuration of the experiment. + datasets_metadata: Meta-data that is generated by the dataset_builder. + + Returns: + total_steps: Total number of training steps. + steps_per_epoch: Number of steps in every epoch. + """ + num_total_train_examples = 0 + for ds_metadata in datasets_metadata.values(): + num_total_train_examples += ds_metadata.get('num_train_examples', 0) + + # We either use num_training_epochs or num_training_steps. + steps_per_epoch = num_total_train_examples // get_average_batch_size(config) + + if config.get('num_training_steps'): + assert not config.get('num_training_epochs') + return config.num_training_steps, steps_per_epoch or None + else: + assert config.num_training_epochs and not config.get('num_training_steps') + return (steps_per_epoch * config.num_training_epochs), steps_per_epoch + + +def pop_axes_names( + train_state: TrainState, + axes_name: str = 'param_axes') -> Tuple[TrainState, Optional[Any]]: + """Removes axes_names from model_state for a train state. + + Args: + train_state: Training state. + axes_name: the string specifying the name in the model_state + + Returns: + New train state without axes_names in model_state, axes_names metadata if it + was removed (so it can be re-added). + """ + model_state = train_state.model_state + if axes_name in train_state.model_state: + model_state, param_axes = frozen_dict.freeze(model_state).pop(axes_name) + return train_state.replace(model_state=model_state), param_axes + else: + return train_state, None + + +def re_add_axis_names(train_state: TrainState, + param_axes: Any, + axes_name: str = 'param_axes') -> TrainState: + """Adds axes_names to model_state for a train state. + + Args: + train_state: Training state. + param_axes: Model axes metadata to re-add. + axes_name: the string specifying the name in the model_state + + Returns: + New train state without axes_names in model_state, axes_names metadata if it + was removed (so it can be re-added). + """ + if param_axes: + model_state = frozen_dict.unfreeze(train_state.model_state) + model_state[axes_name] = param_axes + return train_state.replace(model_state=frozen_dict.freeze(model_state)) + else: + return train_state diff --git a/scenic/projects/vid2seq/trainer.py b/scenic/projects/vid2seq/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..0f80d7d313339c6d72866fc335a8f959b3320f7f --- /dev/null +++ b/scenic/projects/vid2seq/trainer.py @@ -0,0 +1,1178 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Dense Video Captioning training.""" + +import copy +import dataclasses +import functools +import json +import os +import random +from typing import Any, Callable, Dict, List, Optional, Tuple + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from dmvr import tokenizers +from flax import jax_utils +from flax.core import unfreeze +import flax.linen as nn +import jax +import jax.example_libraries.optimizers as jax_optimizers +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.projects.t5 import model as t5_model +from scenic.projects.t5 import tokenizer as t5_tokenizer +from scenic.projects.vid2seq import load_utils +from scenic.projects.vid2seq import models +from scenic.projects.vid2seq import train_utils as vid2seq_train_utils +from scenic.projects.vid2seq import dvc_eval +from scenic.train_lib_deprecated import lr_schedules +from scenic.train_lib_deprecated import optimizers +from scenic.train_lib_deprecated import pretrain_utils +from scenic.train_lib_deprecated import train_utils + +# Note this list must be in the exact order of the inputs required by the model. +MAX_CAPTION_STR_LEN = 200 +MAX_KEY_STR_LEN = 400 + +# Aliases for custom types: +PyTree = Any +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Batch], Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch], float] + + +def remove_nonascii(text): + return ''.join([i if ord(i) < 128 else ' ' for i in text]) + + +def decode_tokens(seq, tokenizer, vocabulary_size): + seq = [x for x in seq if x < vocabulary_size] + text = tokenizer.indices_to_string(seq) + text = remove_nonascii(text).strip() + return text + + +def decode_time(time, duration, fmt): + if fmt == 'cd': + time = [ + time[0] - time[1] // 2, + time[0] + time[1] // 2 + ] + time[0] = max(time[0], 0) + time[1] = min(time[1], duration) + return time + + +def train_step( + dataset: str, # pylint: disable=unused-argument + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + learning_rate_fn: Callable[[int], float], + loss_fn: LossFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False # pylint: disable=unused-argument +) -> Tuple[train_utils.TrainState, float, Dict[str, Tuple[float, int]], float]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + dataset: dataset name + train_state: The state of training including the current global_step, + model_state, rng, and optimizer. The buffer of this argument can be + donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + learning_rate_fn: learning rate scheduler which give the global_step + generates the learning rate. + loss_fn: A loss function that given logits and batch of data, calculates the + training loss. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configuration of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, loss, computed metrics, and learning rate for + logging. + """ + new_rng, rng = jax.random.split(train_state.rng) + + # Bind the rng to the host/device we are on for dropout. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + token_loss_coef = config.get('token_loss_coef') + corrupt_coef = config.dataset_configs.get( + 'corrupt_coef') if config.dataset_configs.corrupt else 0. + return_as_dict = config.dataset_configs.return_as_dict + modalities = config.dataset_configs.modalities + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + assert return_as_dict + encoder_inputs = batch['encoder_inputs'] + + # encode video + if 'features' in modalities: + enc_video, _ = flax_model.apply( + variables, {'features': encoder_inputs['features']}, + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + method=flax_model.encode) + # encode speech + if 'text' in modalities and 'text' in encoder_inputs: + enc_text, _ = flax_model.apply( + variables, {'text': encoder_inputs['text']}, + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + method=flax_model.encode) + + # concat video and text encodings + if 'features' in modalities and 'text' in modalities and ( + 'text' + in encoder_inputs): + encoded = jnp.concatenate([enc_video['encoded'], enc_text['encoded']], -2) + mask = jnp.concatenate([enc_video['mask'], enc_text['mask']], -1) + encoded = {'encoded': encoded, 'mask': mask} + elif 'features' in modalities: + encoded = enc_video + elif 'text' in modalities and 'text' in encoder_inputs: + encoded = enc_text + + loss = 0. + aux = {} + + if token_loss_coef: + token_encoded = encoded + token_decoder_inputs = { + 'encoder_input_tokens': token_encoded['mask'], + 'decoder_input_tokens': batch['text_indices'][..., :-1], + 'decoder_target_tokens': batch['text_indices'][..., 1:] + } + token_logits, new_model_state = flax_model.apply( + variables, + token_encoded['encoded'], + token_decoder_inputs, + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + method=flax_model.decode) + + loss_token = loss_fn(token_logits, # pytype: disable=wrong-arg-types # jax-ndarray + {'decoder_inputs': token_decoder_inputs}) + aux['token_logits'] = token_logits + aux['token_loss'] = loss_token + loss += loss_token * token_loss_coef + + if corrupt_coef: + corrupt_encoder_inputs = {'text': batch['text_indices_corrupt_inputs']} + + # encode text + out_text, _ = flax_model.apply( + variables, + corrupt_encoder_inputs, + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + method=flax_model.encode) + if 'features' in modalities: + corrupt_encoded = jnp.concatenate([ + encoded['encoded'][..., :batch['features'].shape[1], :], + out_text['encoded'] + ], 1) + corrupt_mask = jnp.concatenate([ + encoded['mask'][..., :batch['features'].shape[1]], out_text['mask'] + ], 1) + corrupt_encoded = {'encoded': corrupt_encoded, 'mask': corrupt_mask} + else: + corrupt_encoded = out_text + + corrupt_decoder_inputs = { + 'encoder_input_tokens': + corrupt_encoded['mask'], + 'decoder_input_tokens': + batch['text_indices_corrupt_outputs'][..., :-1], + 'decoder_target_tokens': + batch['text_indices_corrupt_outputs'][..., 1:] + } + + # decode + corrupt_logits, new_model_state = flax_model.apply( + variables, + corrupt_encoded['encoded'], + corrupt_decoder_inputs, + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + method=flax_model.decode) + loss_corrupt = loss_fn(corrupt_logits, # pytype: disable=wrong-arg-types # jax-ndarray + {'decoder_inputs': corrupt_decoder_inputs}) + aux['corrupt_logits'] = corrupt_logits + aux['corrupt_loss'] = loss_corrupt + loss += corrupt_coef * loss_corrupt + + aux['state'] = new_model_state + + return loss, aux + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + step = train_state.global_step + lr = learning_rate_fn(step) + (train_loss, aux), grad = compute_gradient_fn(train_state.optimizer.target) + new_model_state = aux['state'] + + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm', None): + grad = jax_optimizers.clip_grads(grad, config.max_grad_norm) + + new_optimizer = train_state.optimizer.apply_gradient(grad, learning_rate=lr) + + metrics = {} + if token_loss_coef: + token_logits = aux['token_logits'] + x = metrics_fn( + token_logits, { + 'decoder_inputs': { + 'decoder_input_tokens': batch['text_indices'][..., :-1], + 'decoder_target_tokens': batch['text_indices'][..., 1:] + }, + 'batch_mask': batch['batch_mask'] + }) + metrics.update({'token_accuracy': x['token_accuracy']}) + if corrupt_coef: + corrupt_logits = aux['corrupt_logits'] + x = metrics_fn( + corrupt_logits, { + 'decoder_inputs': { + 'decoder_input_tokens': + batch['text_indices_corrupt_outputs'][..., :-1], + 'decoder_target_tokens': + batch['text_indices_corrupt_outputs'][..., 1:] + }, + 'batch_mask': batch['batch_mask'] + }) + metrics.update({'corrupt_token_accuracy': x['token_accuracy']}) + + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=step + 1, + optimizer=new_optimizer, + model_state=new_model_state, + rng=new_rng) + return new_train_state, train_loss, metrics, lr + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + model: models.EncoderWithT5DecoderModel, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False, +) -> Any: + """Runs a single step of evaluation. + + Note: The buffer of the provided batch is donated to the computation. + + Args: + train_state: TrainState, the state of training including the current + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + model: An EncoderWithT5DecoderModel. global_step, model_state, rng, and + optimizer. The buffer of this argument can be donated to the computation. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configuration of the experiment. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and predicted tokens. + """ + variables = { + 'params': train_state.optimizer.target, + **train_state.model_state + } + if config.dataset_configs.return_as_dict: + encoder_inputs = batch['encoder_inputs'] + else: + raise NotImplementedError + + decoding_method = config.decoding.get('decoding_method', 'beamsearch') + if decoding_method == 'beamsearch': + decode_fn = models.beam_search + elif decoding_method == 'temperature_sample': + decode_fn = models.temperature_sample + else: + raise ValueError('Unrecognized decoding method.') + batch['decoder_inputs'] = { # pytype: disable=container-type-mismatch # jax-ndarray + 'decoder_input_tokens': batch['text_indices'][..., :-1], + 'decoder_target_tokens': batch['text_indices'][..., 1:] + } + + decoded, _ = model.predict_batch_with_aux( + variables, { + 'encoder_inputs': encoder_inputs, + 'decoder_inputs': batch['decoder_inputs'] + }, + decode_fn, + num_decodes=config.decoding.get('num_decodes'), + alpha=config.decoding.get('alpha'), + decoding_method=decoding_method, + temperature=config.decoding.get('temperature'), + eos_id=1, + vocabulary_size=32128) + + if debug: + logging.info('Shape of decoded in eval step is: %s', decoded.shape) + + return metrics_fn(decoded, batch), decoded + + +def pmapped_steps(model, config): + """Returns the pmapped train and eval steps.""" + # Learning rate scheduler. + learning_rate_fn = lr_schedules.get_learning_rate_fn(config) + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + learning_rate_fn=learning_rate_fn, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(1, 2), + static_broadcasted_argnums=(0,), # dataset arg. + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + model=model, + metrics_fn=model.get_metrics_fn('validation'), + config=config, + debug=config.debug_eval), + axis_name='batch', + ) + return train_step_pmapped, eval_step_pmapped + + +def load_decoder_params(train_state: train_utils.TrainState, + config: ml_collections.ConfigDict): + """Load T5 decoder params from a checkpoint.""" + init_config = config.init_from + t5_params = {} + load = False + if init_config.get('decoder') and init_config.decoder.get( + 'load_pretrained_weights', True): + model_name = config.model.decoder.t5_decoder.pretrained_config + t5_params = t5_model.load_pretrained_weights(model_name) + load = True + logging.info('T5 params are:') + logging.info(jax.tree_util.tree_map(lambda x: x.shape, t5_params)) + if not load: + return train_state + train_state = load_utils.init_from_pretrain_weights( + train_state, + restored_params=t5_params, + ckpt_prefix_path=['params', 't5_module', 'token_embedder'], + model_prefix_path=['shared_decoder_token_embedder'], + ) + return load_utils.init_from_pretrain_weights( + train_state, + restored_params=t5_params, + ckpt_prefix_path=['params', 't5_module', 'decoder'], + model_prefix_path=[ + 'text_decoder', 'decoder_module' + ], + ) + + +def load_encoder_params(train_state: train_utils.TrainState, + config: ml_collections.ConfigDict): + """Load encoder parameters.""" + + if config.init_from.encoder.get('load_pretrained_weights', True): + model_name = config.model.encoder.cat_encoder.pretrained_config + t5_params = t5_model.load_pretrained_weights(model_name) + model_prefix_path = [ + 'video_encoder', 'encoder_module' + ] + if config.init_from.encoder.load_pretrained_weights: + model_prefix_path = ['encoder'] + model_prefix_path + train_state = load_utils.init_from_pretrain_weights( + train_state, + restored_params=t5_params, + ckpt_prefix_path=['params', 't5_module', 'encoder'], + model_prefix_path=model_prefix_path, + ) + + return train_state + + +def init_state(model: base_model.BaseModel, dataset: dataset_utils.Dataset, + config: ml_collections.ConfigDict, workdir: str, + rng: jnp.ndarray): + """Initialize the train state.""" + + encoder_input_shape = dataset.meta_data['encoder_input_shape'] + encoder_input_dtype = dataset.meta_data.get('encoder_input_dtype', + jnp.float32) + encoder_input_text_dtype = dataset.meta_data.get('encoder_input_text_dtype', + jnp.int32) + decoder_input_shape = dataset.meta_data['decoder_input_shape'] + decoder_input_dtype = dataset.meta_data.get('decoder_input_dtype', jnp.int32) + + encoder_input_spec = {} + if isinstance(encoder_input_shape, dict): + for mod in config.dataset_configs.modalities: + mod_spec = None + if mod in encoder_input_shape: + logging.info('Modality %s is present for this dataset', mod) + local_encoder_input_dtype = encoder_input_dtype + if mod == 'text': + local_encoder_input_dtype = encoder_input_text_dtype + mod_spec = (encoder_input_shape[mod], local_encoder_input_dtype) + encoder_input_spec[mod] = mod_spec + else: + encoder_input_spec = (encoder_input_shape, encoder_input_dtype) + + decoder_input_spec = { + k: (v, decoder_input_dtype) for k, v in decoder_input_shape.items() + } + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_params, + gflops) = train_utils.initialize_model_with_pytree( + model_def=model.flax_model, + input_spec=(encoder_input_spec, decoder_input_spec), + config=config, + rngs=init_rng) + logging.info('The model has %d params, uses %d gflops', num_params, gflops or + -1) + + # Create the optimizer. + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + optimizer = jax.jit( + optimizers.get_optimizer(config).create, backend='cpu')( + params) + del params # Do not keep a copy of the initial params. + + rng, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + optimizer=optimizer, + model_state=model_state, + rng=train_rng, + accum_train_time=0) + start_step = train_state.global_step + if config.checkpoint: + logging.info('Continuing training from the checkpoint') + train_state, params_axes = vid2seq_train_utils.pop_axes_names( + train_state, 'params_axes') + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state + ) + train_state = vid2seq_train_utils.re_add_axis_names( + train_state, params_axes, 'params_axes' + ) + + if start_step == 0 and config.get('init_from'): + if config.init_from.get('checkpoint_path'): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + step = config.init_from.get('step') + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True, step=step) + + # init T5 encoder if in model but not in ckpt + if config.model.encoder.encoder_type in [ + 't5_encoder', 'cat_encoder' + ] and 'text' in config.dataset_configs.modalities: + if 'video_encoder' not in restored_train_state.optimizer.target[ + 'encoder'] and 'video_encoder' in train_state.optimizer.target[ + 'encoder']: + train_state = load_encoder_params(train_state, config) + x = unfreeze(restored_train_state.optimizer.target) + x['encoder'] = copy.deepcopy(train_state.optimizer.target['encoder']) + optimizer = restored_train_state.optimizer.replace(target=x) + restored_train_state = restored_train_state.replace( + optimizer=optimizer) + + y = unfreeze(restored_train_state.optimizer.state.param_states) + y['encoder']['video_encoder'] = copy.deepcopy( + train_state.optimizer.state.param_states['encoder'] + ['video_encoder']) + state = restored_train_state.optimizer.state.replace(param_states=y) + optimizer = restored_train_state.optimizer.replace(state=state) + restored_train_state = restored_train_state.replace( + optimizer=optimizer) + + # throw away T5 encoder if in checkpoint but not in model + if config.model.encoder.encoder_type in [ + 't5_encoder', 'cat_encoder' + ] and 'text' not in config.dataset_configs.modalities: + if 'video_encoder' in restored_train_state.optimizer.target[ + 'encoder'] and 'video_encoder' not in train_state.optimizer.target[ + 'encoder']: + x = unfreeze(restored_train_state.optimizer.target) + if 'encoder' in x and 'video_encoder' in x['encoder']: + del x['encoder']['video_encoder'] + optimizer = restored_train_state.optimizer.replace(target=x) + restored_train_state = restored_train_state.replace( + optimizer=optimizer) + + y = unfreeze(restored_train_state.optimizer.state.param_states) + if 'encoder' in y and 'video_encoder' in y['encoder']: + del y['encoder']['video_encoder'] + state = restored_train_state.optimizer.state.replace(param_states=y) + optimizer = restored_train_state.optimizer.replace(state=state) + restored_train_state = restored_train_state.replace( + optimizer=optimizer) + + train_state = load_utils.initialise_from_train_state( + config, + train_state, + restored_train_state, + restored_model_cfg, + restore_output_proj=False) + else: + # Seperately intiialize encoders and decoders + if config.model.encoder.encoder_type in [ + 't5_encoder', 'cat_encoder' + ]: + train_state = load_encoder_params(train_state, config) + train_state = load_decoder_params(train_state, config) + + elif start_step == 0: + logging.info('Training completely from scratch. ' + 'Not restoring from any checkpoint.') + return train_state, start_step + + +@dataclasses.dataclass +class SummaryBuilder: + """A helper class to build the summary over the training iterations.""" + metrics: List[Dict[str, Tuple[float, int]]] + extra_logs: List[Dict[str, Any]] + + def update(self, metrics_update, extra_logs_update): + """Update with the given per-step metrics.""" + self.metrics.append(metrics_update) + self.extra_logs.append(extra_logs_update) + + def write(self, writer: metric_writers.MetricWriter, step: int): + """Write to the given writer and training step. + + After writing, the state gets reset. + + Args: + writer: The summary will be written with this writer. + step: The current training step. + + Returns: + The summary since the last write. + """ + summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + self.metrics), + extra_training_logs=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, self.extra_logs), + writer=writer, + key_separator='/') + self.metrics = [] + self.extra_logs = [] + return summary + + +def eval_and_log_summary( + *, + train_state: train_utils.TrainState, + writer: metric_writers.MetricWriter, + iterator, + eval_step_fn, + eval_steps, + train_iteration, + tokenizer, + dataset_name, + num_bins, + vocabulary_size, + abs_time_token, + time_format, + tmp_only, + runlocal, # pylint: disable=unused-argument + order, + workdir, + soda, + eval_batch_size, # pylint: disable=unused-argument + max_events, + para, + t, + is_split + ): + """Eval the model and write the summary.""" + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_packs = {} + logging.info('Total number of eval steps is %s', eval_steps) + # This ensures that all eval batchs are covered. + eval_steps = int(eval_steps * 1.3) + keys = [] + for step in range(eval_steps): + with jax.profiler.StepTraceAnnotation('eval', step_num=step): + eval_batch = next(iterator) + + # Put the string inputs to a separate lists and delete them before passing + # to the pmapped function. + eval_pack = { + 'gts': + dvc_eval.convert_strings_to_uint8_arrays( + eval_batch['caption_strings'], MAX_CAPTION_STR_LEN), + 'key': + dvc_eval.convert_strings_to_uint8_arrays( + eval_batch['videoid'], MAX_KEY_STR_LEN), + 'batch_mask': + eval_batch['batch_mask'], + 'duration': + eval_batch['duration'], + 'gts_start': + eval_batch['timestamp_start'], + 'gts_end': + eval_batch['timestamp_end'], + 'split': + eval_batch['split'] if 'split' in eval_batch else + np.ones_like(eval_batch['timestamp_start']), + } + to_del = ['caption_strings', 'key', 'videoid', 'timestamp_start', + 'timestamp_end', 'split'] # 'duration', + for x in to_del: + if x in eval_batch: + del eval_batch[x] + + eval_metrics, preds = eval_step_fn(train_state, eval_batch) + + # Do not gather at this stage to run dvc_eval before gathering + eval_pack['pred'] = preds + eval_pack = jax.tree_util.tree_map( + lambda x: x.reshape((np.prod(x.shape[:2]),) + x.shape[2:]), eval_pack + ) + logging.info( + 'eval_pack %d shapes: %s', + step, + jax.tree_util.tree_map(lambda x: x.shape, eval_pack), + ) + + gts_timestamps = [[ + [s, e] for s, e in zip(ls, le) + ] for ls, le in zip(eval_pack['gts_start'], eval_pack['gts_end'])] + gts_timestamps = [[x for x in y if x[0] != -1] for y in gts_timestamps + ] # unpad GT + + gts = [[remove_nonascii(dvc_eval.convert_uint8_array_to_string(x)) + for x in y] + for y in eval_pack['gts']] + gts = [[x for x in y if x] for y in gts] # unpad GT + + splits = [[k for m, k in enumerate(eval_pack['split'][i]) + if m < len(gts[i])] for i in range(len(gts))] + + for i, valid in enumerate(eval_pack['batch_mask']): + if valid: + key = dvc_eval.convert_uint8_array_to_string(eval_pack['key'][i]) + if key in eval_packs: # redundant video + continue + keys.append(key) + + pred, pred_timestamps = [], [] + # get indexes in the predicted seq that delimit the pred segments + indexes = [ + j for j in range(len(eval_pack['pred'][i]) - 1) + if eval_pack['pred'][i][j] >= vocabulary_size and + eval_pack['pred'][i][j + 1] >= vocabulary_size + ] # pylint: disable=g-complex-comprehension + + last_processed = -2 + + # iterate over predicted segments and decode them + for j in range(len(indexes)): + if indexes[j] == last_processed + 1: # 3 timestamps != 2 events + continue + + # get predicted tokens and transform to string + if order == 'ld': + start_idx = indexes[j] + 2 + end_idx = indexes[j + 1] if j < len(indexes) - 1 else len( + eval_pack['pred'][i]) + else: + start_idx = indexes[j - 1] + 2 if j > 0 else 0 + end_idx = indexes[j] + pred_seq = [int(eval_pack['pred'][i][k]) + for k in range(start_idx, end_idx)] + pred_text = decode_tokens(pred_seq, tokenizer, vocabulary_size) + if (not pred_text) and (not tmp_only): # remove empty string + continue + + # get start and end + if not abs_time_token: + max_offset = num_bins - 1 + pred_time = [ + (int(eval_pack['pred'][i][indexes[j]]) + - vocabulary_size) * + eval_pack['duration'][i] / max_offset, + (int(eval_pack['pred'][i][indexes[j] + 1]) - + vocabulary_size) * + eval_pack['duration'][i] / max_offset + ] + else: + pred_time = [ + (int(eval_pack['pred'][i][indexes[j]]) + - vocabulary_size) * t, + (int(eval_pack['pred'][i][indexes[j] + 1]) - + vocabulary_size) * t + ] + pred_time = decode_time(pred_time, eval_pack['duration'][i], + time_format) + if pred_time[1] <= pred_time[0]: # remove end < start + continue + last_processed = indexes[j] + + pred.append(pred_text) + pred_timestamps.append(pred_time) + + eval_packs[key] = { + 'pred': pred, + 'gts': gts[i], + 'pred_timestamps': pred_timestamps, + 'gts_timestamps': gts_timestamps[i], # unpad GT timestamp + 'split': splits[i], + } + + to_del = [ + 'batch_mask', 'gts', 'pred', 'duration', 'gts_start', 'gts_end', + 'key', 'split' + ] + for x in to_del: + del eval_pack[x] + logging.info('Finished %d decoding', step) + + predicted_captions = [eval_packs[x]['pred'] for x in keys] + predicted_segments = [ + np.array(eval_packs[x]['pred_timestamps']) for x in keys + ] + gt_captions = [eval_packs[x]['gts'] for x in keys] + gt_segments = [np.array(eval_packs[x]['gts_timestamps']) for x in keys] + splits = [eval_packs[x]['split'] for x in keys] + + if para: + logging.info('Gathering predictions') + # Fill fixed shape arrays + pad_len = eval_steps * (eval_batch_size // jax.process_count()) + res = { + 'pred': + np.zeros([pad_len, + MAX_CAPTION_STR_LEN * max_events]).astype(np.uint8), + 'gt': + np.zeros([pad_len, 2, + MAX_CAPTION_STR_LEN * max_events]).astype(np.uint8), + 'mask': + np.zeros([pad_len]) + } + res['mask'][:len(splits)] = 1 + for i in range(len(splits)): + if predicted_captions[i]: + pred = ' '.join(predicted_captions[i]) + pred = dvc_eval.convert_strings_to_uint8_arrays( + np.array([pred]), MAX_CAPTION_STR_LEN * max_events) + res['pred'][i] = pred[0] + split = splits[i] + unique_splits = set(split) + for j, s in enumerate(unique_splits): + indexes = np.where(split == s)[0] + gt = ' '.join([gt_captions[i][idx] for idx in indexes]) + gt = dvc_eval.convert_strings_to_uint8_arrays( + np.array([gt]), MAX_CAPTION_STR_LEN * max_events) + res['gt'][i][j] = gt[0] + ndevh = jax.device_count() // jax.process_count() + for x in res: + res[x] = res[x].reshape((ndevh, res[x].shape[0] // ndevh) + + res[x].shape[1:]) + + # Gather and filter by mask + res = train_utils.unreplicate_and_get( + jax.pmap(lambda x: jax.lax.all_gather(x, 'batch'), 'batch')(res)) + res = jax.tree_util.tree_map( + lambda x: x.reshape((np.prod(x.shape[:2]),) + x.shape[2:]), res + ) + mask = res['mask'].astype(bool) + pred = res['pred'][mask] + pred = [dvc_eval.convert_uint8_array_to_string(x) for x in pred] + gt = res['gt'][mask] + gt = [[dvc_eval.convert_uint8_array_to_string(y) for y in x] for x in gt] + gt = [[y for y in x if y] for x in gt] # unpad splits + + logging.info('Computing paragraph metrics...') + logging.info(pred[0]) + logging.info(gt[0]) + para_res = dvc_eval.evaluate_para(pred, gt) + logging.info('Done') + + return train_utils.log_eval_summary( + step=train_iteration, + eval_metrics=[train_utils.unreplicate_and_get(eval_metrics)], + extra_eval_summary=para_res, + writer=writer, + key_separator='/', + prefix=dataset_name) + logging.info('The size of eval_packs for %s: %d', dataset_name, + len(eval_packs)) + eval_res = dvc_eval.evaluate_dense_captions( + predicted_segments=predicted_segments, + gt_segments=gt_segments, + predicted_captions=predicted_captions, + gt_captions=gt_captions, + splits=splits, + iou_thresholds=(0.3, 0.5, 0.7, 0.9), + soda=soda, + keys=keys, + tmponly=tmp_only) + logging.info('Finished per-host evaluation') + + # fill a fixed shape array + full_res = { + x: np.zeros([eval_steps * (eval_batch_size // jax.process_count())]) + for x in eval_res.keys() if x != 'key' + } + full_res['mask'] = np.zeros( + [eval_steps * (eval_batch_size // jax.process_count())]) + for x in eval_res: + if x != 'key': + full_res[x][:len(eval_res[x])] = np.array(eval_res[x]) + full_res['mask'][:len(eval_res[x])] = 1 + + # gather results on all hosts + for x in full_res: + # number of devices per host + ndevh = jax.device_count() // jax.process_count() + full_res[x] = full_res[x].reshape((ndevh, full_res[x].shape[0] // ndevh)) + full_res = train_utils.unreplicate_and_get( + jax.pmap(lambda x: jax.lax.all_gather(x, 'batch'), 'batch')(full_res)) + full_res = jax.tree_util.tree_map( + lambda x: x.reshape((np.prod(x.shape[:2]),) + x.shape[2:]), full_res + ) + logging.info(full_res[list(full_res)[0]].shape) + + # compute averaged statistics + avg_res = {} + mask = full_res['mask'].astype(bool) + for x in full_res: + if x == 'SODA_c_1' or x == 'SODA_c_2': + mask2 = jnp.logical_and(mask, full_res[x] != -1) + avg_res[x] = float(np.mean(full_res[x][mask2])) + elif x != 'mask': + avg_res[x] = float(np.mean(full_res[x][mask])) + if is_split: + avg_res['SODA_c'] = (avg_res['SODA_c_2'] + + avg_res['SODA_c_1']) / 2 + else: + avg_res['SODA_c'] = avg_res['SODA_c_1'] + del avg_res['SODA_c_2'], avg_res['SODA_c_1'] + logging.info('Finished gathering eval metrics for %d samples', sum(mask)) + + return train_utils.log_eval_summary( + step=train_iteration, + eval_metrics=[train_utils.unreplicate_and_get(eval_metrics)], + extra_eval_summary=avg_res, + writer=writer, + key_separator='/', + prefix=dataset_name) + + +def get_tokenizer( + config: ml_collections.ConfigDict) -> tokenizers.TextTokenizer: + """Get tokenizer to decode strings for eval.""" + tokenizer_config = config.dataset_configs.get('tokenizer', + ml_collections.ConfigDict()) + tokenizer_type = tokenizer_config.get('tokenizer_type', None) + tokenizer_model = tokenizer_config.get('tokenizer_model', None) + + if tokenizer_type == 'sentence_piece': + if tokenizer_model is not None: + tokenizer = t5_tokenizer.build_dmvr_sp_model(tokenizer_model) + else: + tokenizer = t5_tokenizer.build_dmvr_sp_model() + else: + raise ValueError('Unsupported tokenizer.') + + return tokenizer + + +def train_and_eval( + rng: np.ndarray, config: ml_collections.ConfigDict, *, workdir: str, + writer: Any, model_cls, dataset_dict +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Train (and occasionally evaluate) the model. + + Args: + rng: JAX prng key. + config: The configuration of the experiment. + workdir: Where to checkpoint and write the summaries. + writer: Summary writer object. + model_cls: The model class used to instantiate the model. + dataset_dict: The dataset for training and evaluation. + + Returns: + A tuple with: + * the state that has the state of training (including current + global_step, model_state, rng, and the optimizer) + * a dictionary with the train_summary + * a dictionary with the evaluation summary + """ + + lead_host = jax.host_id() == 0 + + datasets_metadata = {name: ds.meta_data for name, ds in dataset_dict.items()} + all_datasets = [] + all_datasets_num_train_examples = [] + for name, metadata in datasets_metadata.items(): + all_datasets.append(name) + all_datasets_num_train_examples.append( + metadata.get('num_train_examples', 0)) + model = model_cls(config, datasets_metadata) + train_step_pmapped, eval_step_pmapped = pmapped_steps(model, config) + + train_state, start_step = init_state(model, dataset_dict[all_datasets[0]], # pytype: disable=wrong-arg-types # jax-ndarray + config, workdir, rng) + train_state = jax_utils.replicate(train_state) + logging.info('Number of processes is %s', jax.process_count()) + + del rng # So that we don't mistakenly re-use it. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = ( + vid2seq_train_utils.get_num_training_steps_multi( + config, datasets_metadata + ) + ) + log_eval_steps = config.get('log_eval_steps', steps_per_epoch) + checkpoint_steps = config.get('checkpoint_steps', log_eval_steps) + log_summary_steps = config.get('log_summary_steps', log_eval_steps) + + # Build a tokenizer for the evaluation + tokenizer = get_tokenizer(config) + + chrono = train_utils.Chrono( + first_step=start_step, + total_steps=total_steps, + steps_per_epoch=steps_per_epoch, + global_bs=config.batch_size, + accum_train_time=int(jax_utils.unreplicate(train_state.accum_train_time))) + + logging.info('Start training from step %d', start_step + 1) + hooks = [] + if config.get('xprof', True) and jax.process_index() == 0: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + summary_builder = {x: SummaryBuilder([], []) for x in all_datasets} + train_summary, eval_summary = None, None + + def get_next_train_batch(all_datasets, step): + dataset = random.Random(step).choices( + all_datasets, + config.get('probs', [1. / len(all_datasets)] * len(all_datasets)))[0] + ds = dataset_dict[dataset] + + return next(ds.train_iter), dataset + + for step in range(start_step + 1, total_steps + 1): + chrono.resume() + train_batch, train_ds = get_next_train_batch(all_datasets, step) + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_state, train_loss, t_metrics, lr = train_step_pmapped( + train_ds, train_state, train_batch) + for hook in hooks: + hook(step) + summary_builder[train_ds].update(t_metrics, { + 'lr': lr, + 'train/loss': train_loss + }) + chrono.pause() + + # Log the train summary every `log_summary_steps`. + if (step % log_summary_steps == 1) or (step == total_steps): + if lead_host: + chrono.tick(step, writer) + train_summary = {x: {} for x in all_datasets} + for x in all_datasets: + if len(summary_builder[x].metrics): # pylint: disable=g-explicit-length-test + train_summary[x].update(summary_builder[x].write(writer, step)) + + # Evaluate every `log_eval_steps`. + should_eval = (step % log_eval_steps == 1) or (step == total_steps) + if should_eval: + for ds_name in dataset_dict[all_datasets[0]].valid_iter: + # Compute the number of evaluation steps per dataset. + num_eval_examples = dataset_dict[ + all_datasets[0]].meta_data['num_eval_examples'][ds_name] + total_eval_steps = int( + np.ceil(num_eval_examples / (config.get('eval_batch_size')))) + steps_per_eval = config.get('steps_per_eval', total_eval_steps) + + eval_summary = eval_and_log_summary( + train_state=train_state, + iterator=dataset_dict[all_datasets[0]].valid_iter[ds_name], + eval_step_fn=eval_step_pmapped, + eval_steps=steps_per_eval, + writer=writer, + train_iteration=step, + tokenizer=tokenizer, + dataset_name=ds_name, + num_bins=config.dataset_configs.num_bins, + vocabulary_size=config.dataset_configs.vocabulary_size, + abs_time_token=config.dataset_configs.abs_time_token, + time_format=config.dataset_configs.time_format, + tmp_only=config.dataset_configs.tmp_only, + runlocal=config.runlocal, + order=config.dataset_configs.order, + workdir=workdir, + soda='soda' in config.eval_metrics, + eval_batch_size=config.eval_batch_size, + max_events=config.dataset_configs.max_events, + para='para' in ds_name, + t=1000000., # 1 FPS + is_split=config.dataset_configs.split) + + # Checkpoint. + if not config.checkpoint: + continue + elif step % checkpoint_steps == 0 and step > 0: + logging.info('checkpointing starts (training step: %d)', step) + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + logging.info('checkpointing (training step: %d)', step) + train_state.replace( # pytype: disable=attribute-error + accum_train_time=chrono.accum_train_time) + train_utils.save_checkpoint(workdir, train_state, max_to_keep=100) + + # Return the train and eval summary after last step. + return train_state, train_summary, eval_summary + + +def eval_only( + rng: np.ndarray, config: ml_collections.ConfigDict, *, workdir: str, + writer: Any, model_cls, dataset_dict +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Evaluate the model. + + Args: + rng: JAX prng key. + config: The configuration of the experiment. + workdir: Where to checkpoint and write the summaries. + writer: Summary writer object. + model_cls: The model class used to instantiate the model. + dataset_dict: The dataset for training and evaluation. + + Returns: + A tuple with: + * the state that has the state of training (including current + global_step, model_state, rng, and the optimizer) + * a dictionary with the train_summary + * a dictionary with the evaluation summary + """ + + datasets_metadata = {name: ds.meta_data for name, ds in dataset_dict.items()} + all_datasets = [] + all_datasets_num_train_examples = [] + for name, metadata in datasets_metadata.items(): + all_datasets.append(name) + all_datasets_num_train_examples.append( + metadata.get('num_train_examples', 0)) + dataset = dataset_dict[all_datasets[0]] + + model = model_cls(config, dataset.meta_data) + _, eval_step_pmapped = pmapped_steps(model, config) + + train_state, start_step = init_state(model, dataset, config, workdir, rng) # pytype: disable=wrong-arg-types # jax-ndarray + assert start_step == 0 + train_state = jax_utils.replicate(train_state) + logging.info('Number of processes is %s', jax.process_count()) + + del rng # So that we don't mistakenly re-use it. + + # Build a tokenizer for the evaluation + tokenizer = get_tokenizer(config) + + hooks = [] + if config.get('xprof', True) and jax.process_index() == 0: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + # Evaluate every `log_eval_steps`. + for ds_name in dataset.valid_iter: + # Compute the number of evaluation steps per dataset. + num_eval_examples = dataset.meta_data['num_eval_examples'][ds_name] + total_eval_steps = int( + np.ceil(num_eval_examples / (config.get('eval_batch_size')))) + steps_per_eval = config.get('steps_per_eval', total_eval_steps) + + eval_summary = eval_and_log_summary( + train_state=train_state, + iterator=dataset.valid_iter[ds_name], + eval_step_fn=eval_step_pmapped, + eval_steps=steps_per_eval, + writer=writer, + train_iteration=0, + tokenizer=tokenizer, + dataset_name=ds_name, + num_bins=config.dataset_configs.num_bins, + vocabulary_size=config.dataset_configs.vocabulary_size, + abs_time_token=config.dataset_configs.abs_time_token, + time_format=config.dataset_configs.time_format, + tmp_only=config.dataset_configs.tmp_only, + runlocal=config.runlocal, + order=config.dataset_configs.order, + workdir=workdir, + soda='soda' in config.eval_metrics, + eval_batch_size=config.eval_batch_size, + max_events=config.dataset_configs.max_events, + para='para' in ds_name, + t=1000000., # 1 FPS + is_split=config.dataset_configs.split) + + # Return the train and eval summary after last step. + return train_state, {}, eval_summary diff --git a/scenic/projects/vid2seq/vid2seq.png b/scenic/projects/vid2seq/vid2seq.png new file mode 100644 index 0000000000000000000000000000000000000000..04e98eb0dd5515f25762822db1c245f4d168b758 --- /dev/null +++ b/scenic/projects/vid2seq/vid2seq.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f50bcce9eaee6b92d49358275245f5146f9044400443b0a64131342e2afb0fd4 +size 684968 diff --git a/scenic/projects/vivit/README.md b/scenic/projects/vivit/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e3a1e6927213fdbca193bf10fbeb8cb842da6d00 --- /dev/null +++ b/scenic/projects/vivit/README.md @@ -0,0 +1,73 @@ +ViViT: A Video Vision Transformer +== +![ViViT: A Video Vision Transformer](data/vivit.png) + +ViViT is a family of pure-transformer based models for video classification. +ViViT achieved state-of-the-art results on 5 different public datasets. +Details can be found in the [paper](https://arxiv.org/abs/2103.15691). + +## Getting Started +The following command will install the required packages for ViViT: +```shell +$ pip install -r scenic/projects/vivit/requirements.txt +``` + +ViViT models and training jobs are defined by [configuration files](configs). + +To train a model, please download a pretrained ViT image model trained using +[Scenic](https://github.com/google-research/scenic/tree/main/scenic/projects/baselines) +or the [original implementation](https://github.com/google-research/vision_transformer). + +Additionally, pre-process the training dataset according to [here](data/data.md). + +An example command-line to train ViViT-B/16x2 Factorised Encoder on Kinetics +using this [config file](configs/kinetics400/vivit_base_factorised_encoder.py) +is + +```shell +$ python -m scenic.projects.vivit.main \ + --config=scenic/projects/vivit/configs/kinetics400/vivit_base_factorised_encoder.py \ + --workdir=vivit_base_factorised_encoder/ +``` + + +## Model Zoo + +The following table contains pretrained ViViT models trained on various datasets. +Checkpoints are provided as Scenic checkpoints compatible with +[Flax](https://github.com/google/flax), and also as +[Tensorflow SavedModels](https://www.tensorflow.org/guide/saved_model) +for inference. + +"FE" refers to ViViT Factorised Encoder models, as described in the [paper](https://arxiv.org/abs/2103.15691). +Accuracy is reported from "multi-view evaluation", as common in the literature. +In the table below, `x * y` denotes `x` temporal views, and `y` spatial views. +All the models below take in 32 frames as input. + +| Model | Dataset | Top 1 Accuracy | Views | Config | Checkpoint | +|:------------:|:-----------:|:------------:|:---:|:----------------------------------------------------------------------------------------------------------------:|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| ViViT-B/16x2 | Kinetics 400 | 79.9 | 4x3 | [configs/kinetics400/vivit_base_k400.py](configs/kinetics400/vivit_base_k400.py) | [Checkpoint](https://storage.googleapis.com/scenic-bucket/vivit/kinetics_400/vivit_base_16x2_unfactorized/checkpoint) [SavedModel](https://storage.cloud.google.com/scenic-bucket/vivit/kinetics_400/vivit_base_16x2_unfactorized/saved_model.zip) | +| ViViT-B/16x2 FE | Kinetics 400 | 78.4 | 4x3 | [configs/kinetics400/vivit_base_factorised_encoder.py](configs/kinetics400/vivit_base_factorised_encoder.py) | [Checkpoint](https://storage.googleapis.com/scenic-bucket/vivit/kinetics_400/vivit_base_16x2_fe/checkpoint) [SavedModel](https://storage.googleapis.com/scenic-bucket/vivit/kinetics_400/vivit_base_16x2_fe/saved_model.zip) | +| ViViT-L/16x2 FE | Kinetics 400 | 80.3 | 4x3 | [configs/kinetics400/vivit_large_factorised_encoder.py](configs/kinetics400/vivit_large_factorised_encoder.py) | [Checkpoint](https://storage.googleapis.com/scenic-bucket/vivit/kinetics_400/vivit_large_16x2_fe/checkpoint) [SavedModel](https://storage.googleapis.com/scenic-bucket/vivit/kinetics_400/vivit_large_16x2_fe/saved_model.zip) | +| ViViT-L/16x2 FE | Kinetics 600 | 81.6 | 4x3 | [configs/kinetics600/vivit_large_factorised_encoder.py](configs/kinetics600/vivit_large_factorised_encoder.py) | [Checkpoint](https://storage.googleapis.com/scenic-bucket/vivit/kinetics_600/vivit_large_16x2_fe/checkpoint) [SavedModel](https://storage.googleapis.com/scenic-bucket/vivit/kinetics_600/vivit_large_16x2_fe/saved_model.zip) | +| ViViT-L/16x2 FE | Epic Kitchens | 43.6 | 4x1 | [configs/epic_kitchens/vivit_large_factorised_encoder.py](configs/epic_kitchens/vivit_large_factorised_encoder.py) | [Checkpoint](https://storage.googleapis.com/scenic-bucket/vivit/epic_kitchens/vivit_large_16x2_fe/checkpoint) [SavedModel](https://storage.googleapis.com/scenic-bucket/vivit/epic_kitchens/vivit_large_16x2_fe/saved_model.zip) + +## Other Unofficial Implementations + +Feel free to share your implementation by contacting the authors or sending a +pull request. + +- [Keras](https://keras.io/examples/vision/vivit/) by [Aritra Roy Gosthipaty](https://twitter.com/ariG23498) and [Ayush Thakur](https://twitter.com/ayushthakur0) + +## Reference + +If you use ViViT, please use the following BibTeX entry. + +``` +@InProceedings{arnab2021vivit, + title={ViViT: A Video Vision Transformer}, + author={Arnab, Anurag and Dehghani, Mostafa and Heigold, Georg and Sun, Chen and Lu{\v{c}}i{\'c}, Mario and Schmid, Cordelia}, + booktitle={International Conference on Computer Vision (ICCV)}, + year={2021} +} +``` diff --git a/scenic/projects/vivit/__init__.py b/scenic/projects/vivit/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/vivit/configs/__init__.py b/scenic/projects/vivit/configs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/vivit/configs/epic_kitchens/__init__.py b/scenic/projects/vivit/configs/epic_kitchens/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/vivit/configs/epic_kitchens/vivit_large_factorised_encoder.py b/scenic/projects/vivit/configs/epic_kitchens/vivit_large_factorised_encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..e7bbb1fecbfb560084b94ce29d74297f3c062398 --- /dev/null +++ b/scenic/projects/vivit/configs/epic_kitchens/vivit_large_factorised_encoder.py @@ -0,0 +1,172 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""ViViT Factorised Encoder model for Epic Kitchens. + +""" + + +from absl import logging +import ml_collections + +EPIC_TRAIN_SIZE = 67217 +EPIC_VALID_SIZE = 9668 + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'vivit_large_factorised_encoder_ek' + + # Dataset. + config.dataset_name = 'video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + config.datset_configs = ml_collections.ConfigDict() + config.dataset_configs.base_dir = ( + '/path/to/dataset') + config.dataset_configs.tables = { + 'train': 'train.tfrecord@1024', + 'validation': 'validation.tfrecord@1024', + 'test': 'test.tfrecord@1024' + } + config.dataset_configs.examples_per_subset = { + 'train': EPIC_TRAIN_SIZE, + 'validation': EPIC_VALID_SIZE, + 'test': EPIC_VALID_SIZE + } + + ## EpicKitchens-specific flags. + # We want to train a "multi-head" classification model where we are predicting + # both "nouns" and "verbs" + # Setting this as None / leaving it empty, means we concatenate the two labels + config.dataset_configs.class_splits = [300, 97] + config.dataset_configs.split_names = ['noun', 'verb'] + + # This is going to sample 32 frames, sampled at a stride of 1 from the video. + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 1 + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + # Multicrop evaluation settings: + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.log_test_epochs = 5 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size. + config.dataset_configs.num_test_clips = 4 + config.dataset_configs.test_batch_size = 8 # Must equal num_local_devices. + # To take three spatial crops when testing. + config.dataset_configs.do_three_spatial_crops = True + config.multicrop_clips_per_device = 2 + + # Data augmentation + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = False + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + + # This does Mixup in the train loop. This is fast. But make sure that device + # batch size is more than 1. + config.mixup = ml_collections.ConfigDict() + config.mixup.alpha = 0.1 + + config.dataset_configs.augmentation_params.do_rand_augment = True + config.dataset_configs.augmentation_params.rand_augment_num_layers = 2 + config.dataset_configs.augmentation_params.rand_augment_magnitude = 15 + + config.dataset_configs.prefetch_to_device = 2 + + # Model. + config.model_name = 'vivit_multihead_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = 1024 + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [16, 16] + + config.model.attention_config = ml_collections.ConfigDict() + config.model.attention_config.type = 'factorized_encoder' + + config.model.spatial_transformer = ml_collections.ConfigDict() + config.model.spatial_transformer.num_heads = 16 + config.model.spatial_transformer.mlp_dim = 4096 + config.model.spatial_transformer.num_layers = 24 + + config.model.temporal_transformer = ml_collections.ConfigDict() + config.model.temporal_transformer.num_heads = 16 + config.model.temporal_transformer.mlp_dim = 4096 + config.model.temporal_transformer.num_layers = 4 + + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model.stochastic_droplayer_rate = 0.2 + config.model_dtype_str = 'float32' + + config.model.temporal_encoding_config = ml_collections.ConfigDict() + config.model.temporal_encoding_config.method = '3d_conv' + config.model.patches.size = [16, 16, 2] + config.model.temporal_encoding_config.kernel_init_method = 'central_frame_initializer' + + # Training. + config.trainer_name = 'vivit_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.label_smoothing = 0.2 + config.num_training_epochs = 50 + config.batch_size = 64 + config.rng_seed = 0 + + # Initialisation. + config.init_from = ml_collections.ConfigDict() + Use a pretrained Kinetics checkpoint, or ImageNet checkpoint + config.init_from.checkpoint_path = 'path_to_checkpoint' + config.init_from.checkpoint_format = 'scenic' + config.init_from.model_config = ml_collections.ConfigDict() + config.init_from.model_config.model = ml_collections.ConfigDict() + config.init_from.model_config.model.classifier = 'token' # Specify if this is 'token' or 'gap'. pylint: disable=line-too-long + config.init_from.checkpoint_path = None + config.init_from.restore_positional_embedding = True + config.init_from.restore_input_embedding = True + config.init_from.positional_embed_size_change = 'tile' + + # Learning rate. + steps_per_epoch = EPIC_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = int(2.5 * steps_per_epoch) + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.5 + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.checkpoint_steps = 500 # Checkpoint more frequently than a val epoch. + config.log_summary_steps = 100 + return config + + diff --git a/scenic/projects/vivit/configs/kinetics400/__init__.py b/scenic/projects/vivit/configs/kinetics400/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/vivit/configs/kinetics400/vivit_base_factorised_encoder.py b/scenic/projects/vivit/configs/kinetics400/vivit_base_factorised_encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..128f30695cba961c4082fa70c1f3fed7a8a61b8a --- /dev/null +++ b/scenic/projects/vivit/configs/kinetics400/vivit_base_factorised_encoder.py @@ -0,0 +1,158 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""ViViT Base Factorised Encoder model. + +""" + +import ml_collections + +# The size of the Kinetics dataset changes as videos are removed from YouTube. +# Set this appropriately. +KINETICS_400_TRAIN_SIZE = 214834 +KINETICS_400_VAL_SIZE = 17637 +KINETICS_400_TEST_SIZE = 34579 + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'vivit_kinetics400_classification' + + # Dataset. + config.dataset_name = 'video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + config.datset_configs = ml_collections.ConfigDict() + config.dataset_configs.base_dir = ( + '/path/to/dataset') + config.dataset_configs.tables = { + 'train': 'train.tfrecord@1024', + 'validation': 'validation.tfrecord@1024', + 'test': 'test.tfrecord@1024' + } + config.dataset_configs.examples_per_subset = { + 'train': KINETICS_400_TRAIN_SIZE, + 'validation': KINETICS_400_VAL_SIZE, + 'test': KINETICS_400_TEST_SIZE + } + config.dataset_configs.num_classes = 400 + config.data_dtype_str = 'float32' + + # This is going to sample 32 frames, sampled at a stride of 2 from the video. + # Kinetics videos has 250 frames. + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 2 + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + # Multicrop evaluation settings: + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.log_test_epochs = 5 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size. + config.dataset_configs.num_test_clips = 4 + config.dataset_configs.test_batch_size = 8 # Must equal num_local_devices. + # To take three spatial crops when testing. + config.dataset_configs.do_three_spatial_crops = True + config.multicrop_clips_per_device = 2 + + # Data augmentation. + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = True + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + config.dataset_configs.prefetch_to_device = 2 + + # Model. + config.model_name = 'vivit_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = 768 + + config.model.attention_config = ml_collections.ConfigDict() + config.model.attention_config.type = 'factorized_encoder' + + config.model.patches = ml_collections.ConfigDict() + config.model.spatial_transformer = ml_collections.ConfigDict() + config.model.spatial_transformer.num_heads = 12 + config.model.spatial_transformer.mlp_dim = 3072 + config.model.spatial_transformer.num_layers = 12 + config.model.temporal_transformer = ml_collections.ConfigDict() + config.model.temporal_transformer.num_heads = 12 + config.model.temporal_transformer.mlp_dim = 3072 + config.model.temporal_transformer.num_layers = 4 + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model_dtype_str = 'float32' + config.model.temporal_encoding_config = ml_collections.ConfigDict() + config.model.temporal_encoding_config.method = '3d_conv' + config.model.patches.size = (16, 16, 2) + + config.model.temporal_encoding_config.kernel_init_method = 'central_frame_initializer' + # Applies when temporal_encoding_config.method='temporal_sampling' + config.model.temporal_encoding_config.n_sampled_frames = 16 # Unused here. + + # Training. + config.trainer_name = 'vivit_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.label_smoothing = None + config.num_training_epochs = 30 + config.batch_size = 64 + config.rng_seed = 0 + + # Use ImageNet-21k-initialized model. + config.init_from = ml_collections.ConfigDict() + config.init_from.model_config = None + # Download pretrained ImageNet checkpoints from here: + # https://github.com/google-research/scenic/tree/main/scenic/projects/baselines (checkpoint_format = 'scenic') pylint: disable=line-too-long + # https://github.com/google-research/vision_transformer (checkpoint_format = 'big_vision') pylint: disable=line-too-long + config.init_from.checkpoint_path = 'path_to_checkpoint_of_vit_b_16' + config.init_from.checkpoint_format = 'scenic' + config.init_from.model_config = ml_collections.ConfigDict() + config.init_from.model_config.model = ml_collections.ConfigDict() + config.init_from.model_config.model.classifier = 'token' # Specify if this is 'token' or 'gap'. pylint: disable=line-too-long + config.init_from.restore_positional_embedding = True + config.init_from.restore_input_embedding = True + config.init_from.positional_embed_size_change = 'tile' + + # Learning rate. + steps_per_epoch = KINETICS_400_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = int(2.5 * steps_per_epoch) + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 5e-2 + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.checkpoint_steps = 1000 # Checkpoint more frequently than a val epoch. + return config + + diff --git a/scenic/projects/vivit/configs/kinetics400/vivit_base_k400.py b/scenic/projects/vivit/configs/kinetics400/vivit_base_k400.py new file mode 100644 index 0000000000000000000000000000000000000000..c21fc9e4bf7517a135c156051c11fdf1b6036134 --- /dev/null +++ b/scenic/projects/vivit/configs/kinetics400/vivit_base_k400.py @@ -0,0 +1,152 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""ViViT-Base Unfactorised. + +""" + + +from absl import logging +import ml_collections + +# The size of the Kinetics dataset changes as videos are removed from YouTube. +# Set this appropriately. +KINETICS_400_TRAIN_SIZE = 214834 +KINETICS_400_VAL_SIZE = 17637 +KINETICS_400_TEST_SIZE = 34579 + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'vivit_base_kinetics400_im21k' + + # Dataset. + config.dataset_name = 'video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + config.datset_configs = ml_collections.ConfigDict() + config.dataset_configs.base_dir = ( + '/path/to/dataset') + config.dataset_configs.tables = { + 'train': 'train.tfrecord@1024', + 'validation': 'validation.tfrecord@1024', + 'test': 'test.tfrecord@1024' + } + config.dataset_configs.examples_per_subset = { + 'train': KINETICS_400_TRAIN_SIZE, + 'validation': KINETICS_400_VAL_SIZE, + 'test': KINETICS_400_TEST_SIZE + } + config.dataset_configs.num_classes = 400 + config.data_dtype_str = 'float32' + + # This is going to sample 32 frames, sampled at a stride of 2 from the video. + # Kinetics videos has 250 frames. + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 2 + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + # Multicrop evaluation settings: + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.log_test_epochs = 5 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size. + config.dataset_configs.num_test_clips = 4 + config.dataset_configs.test_batch_size = 8 # Must equal num_local_devices. + # To take three spatial crops when testing. + config.dataset_configs.do_three_spatial_crops = True + config.multicrop_clips_per_device = 2 + + # Data augmentation. + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = True + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + + config.dataset_configs.prefetch_to_device = 2 + + # Model: ViViT-B + config.model_name = 'vivit_classification' + config.model = ml_collections.ConfigDict() + config.model.attention_config = ml_collections.ConfigDict() + config.model.attention_config.type = 'spacetime' + + config.model.hidden_size = 768 + config.model.patches = ml_collections.ConfigDict() + config.model.num_heads = 12 + config.model.mlp_dim = 3072 + config.model.num_layers = 12 + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model_dtype_str = 'float32' + + config.model.temporal_encoding_config = ml_collections.ConfigDict() + config.model.temporal_encoding_config.method = '3d_conv' + config.model.patches.size = (16, 16, 2) + config.model.temporal_encoding_config.kernel_init_method = 'central_frame_initializer' + + # Training. + config.trainer_name = 'vivit_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.label_smoothing = None + config.num_training_epochs = 30 + config.batch_size = 64 + config.rng_seed = 0 + + # Use ImageNet-21k-initialized model. + config.init_from = ml_collections.ConfigDict() + config.init_from.model_config = None + # Download pretrained ImageNet checkpoints from here: + # https://github.com/google-research/scenic/tree/main/scenic/projects/baselines (checkpoint_format = 'scenic') pylint: disable=line-too-long + # https://github.com/google-research/vision_transformer (checkpoint_format = 'big_vision') pylint: disable=line-too-long + config.init_from.checkpoint_path = 'path_to_checkpoint_of_vit_b_16' + config.init_from.checkpoint_format = 'scenic' + config.init_from.model_config = ml_collections.ConfigDict() + config.init_from.model_config.model = ml_collections.ConfigDict() + config.init_from.model_config.model.classifier = 'token' # Specify if this is 'token' or 'gap'. pylint: disable=line-too-long + config.init_from.restore_positional_embedding = True + config.init_from.restore_input_embedding = True + config.init_from.positional_embed_size_change = 'tile' + + # Learning rate. + steps_per_epoch = KINETICS_400_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = int(2.5 * steps_per_epoch) + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 1e-1 + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + return config + + diff --git a/scenic/projects/vivit/configs/kinetics400/vivit_large_factorised_encoder.py b/scenic/projects/vivit/configs/kinetics400/vivit_large_factorised_encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..efcd9de2a4943bee18231a363f0e56b7b93e0291 --- /dev/null +++ b/scenic/projects/vivit/configs/kinetics400/vivit_large_factorised_encoder.py @@ -0,0 +1,157 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""ViVIT Large Factorised Encoder. + +""" + +import ml_collections + +# The size of the Kinetics dataset changes as videos are removed from YouTube. +# Set this appropriately. +KINETICS_400_TRAIN_SIZE = 214834 +KINETICS_400_VAL_SIZE = 17637 +KINETICS_400_TEST_SIZE = 34579 + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'vivit_large_factorised_encoder_num_frames_im21k' + + # Dataset. + config.dataset_name = 'video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + config.datset_configs = ml_collections.ConfigDict() + config.dataset_configs.base_dir = ( + '/path/to/dataset') + config.dataset_configs.tables = { + 'train': 'train.tfrecord@1024', + 'validation': 'validation.tfrecord@1024', + 'test': 'test.tfrecord@1024' + } + config.dataset_configs.examples_per_subset = { + 'train': KINETICS_400_TRAIN_SIZE, + 'validation': KINETICS_400_VAL_SIZE, + 'test': KINETICS_400_TEST_SIZE + } + config.dataset_configs.num_classes = 400 + config.data_dtype_str = 'float32' + + # This is going to sample 32 frames, sampled at a stride of 2 from the video. + # Kinetics videos has 250 frames. + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 2 + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + # Multicrop evaluation settings: + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.log_test_epochs = 5 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size. + config.dataset_configs.num_test_clips = 4 + config.dataset_configs.test_batch_size = 8 # Must equal num_local_devices. + # To take three spatial crops when testing. + config.dataset_configs.do_three_spatial_crops = True + config.multicrop_clips_per_device = 2 + + # Data augmentation. + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = True + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + config.dataset_configs.prefetch_to_device = 2 + + # Model. + config.model_name = 'vivit_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = 1024 + + config.model.attention_config = ml_collections.ConfigDict() + config.model.attention_config.type = 'factorized_encoder' + config.model.spatial_transformer = ml_collections.ConfigDict() + config.model.spatial_transformer.num_heads = 16 + config.model.spatial_transformer.mlp_dim = 4096 + config.model.spatial_transformer.num_layers = 24 + config.model.temporal_transformer = ml_collections.ConfigDict() + config.model.temporal_transformer.num_heads = 16 + config.model.temporal_transformer.mlp_dim = 4096 + config.model.temporal_transformer.num_layers = 24 + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model_dtype_str = 'float32' + + config.model.temporal_encoding_config = ml_collections.ConfigDict() + config.model.temporal_encoding_config.method = '3d_conv' + + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = (16, 16, 2) + + config.model.temporal_encoding_config.kernel_init_method = 'central_frame_initializer' + + # Training. + config.trainer_name = 'vivit_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.label_smoothing = None + config.num_training_epochs = 30 + config.batch_size = 64 + config.rng_seed = 0 + + # Use ImageNet-21k-initialized model. + config.init_from = ml_collections.ConfigDict() + config.init_from.model_config = None + # Download pretrained ImageNet checkpoints from here: + # https://github.com/google-research/scenic/tree/main/scenic/projects/baselines (checkpoint_format = 'scenic') pylint: disable=line-too-long + # https://github.com/google-research/vision_transformer (checkpoint_format = 'big_vision') pylint: disable=line-too-long + config.init_from.checkpoint_path = 'path_to_checkpoint_of_vit_b_16' + config.init_from.checkpoint_format = 'scenic' + config.init_from.model_config = ml_collections.ConfigDict() + config.init_from.model_config.model = ml_collections.ConfigDict() + config.init_from.model_config.model.classifier = 'token' # Specify if this is 'token' or 'gap'. pylint: disable=line-too-long + config.init_from.restore_positional_embedding = True + config.init_from.restore_input_embedding = True + config.init_from.positional_embed_size_change = 'tile' + + # Learning rate. + steps_per_epoch = KINETICS_400_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = int(2.5 * steps_per_epoch) + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 1e-1 + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.checkpoint_steps = 500 # Checkpoint more frequently than a val epoch. + return config + + diff --git a/scenic/projects/vivit/configs/kinetics600/__init__.py b/scenic/projects/vivit/configs/kinetics600/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/vivit/configs/kinetics600/vivit_large_factorised_encoder.py b/scenic/projects/vivit/configs/kinetics600/vivit_large_factorised_encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..af73448bbbe412ebfb05e8d77ecef65944c6b28f --- /dev/null +++ b/scenic/projects/vivit/configs/kinetics600/vivit_large_factorised_encoder.py @@ -0,0 +1,158 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""ViViT Factorised Encoder model. + +""" + +import ml_collections + +# The size of the Kinetics dataset changes as videos are removed from YouTube. +# Set this appropriately. +KINETICS_600_TRAIN_SIZE = 363213 +KINETICS_600_VAL_SIZE = 27676 +KINETICS_600_TEST_SIZE = 55377 + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'vivit_large_factorised_encoder' + + # Dataset. + config.dataset_name = 'video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + config.datset_configs = ml_collections.ConfigDict() + config.dataset_configs.base_dir = ( + '/path/to/dataset') + config.dataset_configs.tables = { + 'train': 'train.tfrecord@1024', + 'validation': 'validation.tfrecord@1024', + 'test': 'test.tfrecord@1024' + } + config.dataset_configs.examples_per_subset = { + 'train': KINETICS_600_TRAIN_SIZE, + 'validation': KINETICS_600_VAL_SIZE, + 'test': KINETICS_600_TEST_SIZE + } + config.dataset_configs.num_classes = 600 + config.data_dtype_str = 'float32' + + # This is going to sample 32 frames, sampled at a stride of 2 from the video. + # Kinetics videos has 250 frames. + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 2 + config.dataset_configs.min_resize = 256 + config.dataset_configs.crop_size = 224 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + # Multicrop evaluation settings: + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.log_test_epochs = 5 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size. + config.dataset_configs.num_test_clips = 4 + config.dataset_configs.test_batch_size = 8 # Must equal num_local_devices. + # To take three spatial crops when testing. + config.dataset_configs.do_three_spatial_crops = True + config.multicrop_clips_per_device = 2 + + # Data augmentation. + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = True + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + config.dataset_configs.prefetch_to_device = 2 + + # Model. + config.model_name = 'vivit_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = 1024 + + config.model.attention_config = ml_collections.ConfigDict() + config.model.attention_config.type = 'factorized_encoder' + config.model.spatial_transformer = ml_collections.ConfigDict() + config.model.spatial_transformer.num_heads = 16 + config.model.spatial_transformer.mlp_dim = 4096 + config.model.spatial_transformer.num_layers = 24 + config.model.temporal_transformer = ml_collections.ConfigDict() + config.model.temporal_transformer.num_heads = 16 + config.model.temporal_transformer.mlp_dim = 4096 + config.model.temporal_transformer.num_layers = 24 + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model_dtype_str = 'float32' + + config.model.temporal_encoding_config = ml_collections.ConfigDict() + config.model.temporal_encoding_config.method = '3d_conv' + + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [16, 16, 2] + + config.model.temporal_encoding_config.kernel_init_method = 'central_frame_initializer' + + # Training. + config.trainer_name = 'vivit_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.label_smoothing = None + config.num_training_epochs = 30 + config.batch_size = 64 + config.rng_seed = 0 + + # Use ImageNet-21k-initialized model. + config.init_from = ml_collections.ConfigDict() + config.init_from.model_config = None + # Download pretrained ImageNet checkpoints from here: + # https://github.com/google-research/scenic/tree/main/scenic/projects/baselines (checkpoint_format = 'scenic') pylint: disable=line-too-long + # https://github.com/google-research/vision_transformer (checkpoint_format = 'big_vision') pylint: disable=line-too-long + config.init_from.checkpoint_path = 'path_to_checkpoint_of_vit_b_16' + config.init_from.checkpoint_format = 'scenic' + config.init_from.model_config = ml_collections.ConfigDict() + config.init_from.model_config.model = ml_collections.ConfigDict() + config.init_from.model_config.model.classifier = 'token' # Specify if this is 'token' or 'gap'. pylint: disable=line-too-long + config.init_from.restore_positional_embedding = True + config.init_from.restore_input_embedding = True + config.init_from.positional_embed_size_change = 'tile' + + # Learning rate. + steps_per_epoch = KINETICS_600_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = 2.5 * steps_per_epoch + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 5e-2 + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.checkpoint_steps = 500 # Checkpoint more frequently than a val epoch. + config.log_summary_steps = 100 + return config + + diff --git a/scenic/projects/vivit/configs/something_something_v2/__init__.py b/scenic/projects/vivit/configs/something_something_v2/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/vivit/configs/something_something_v2/vivit_large_factorised_encoder.py b/scenic/projects/vivit/configs/something_something_v2/vivit_large_factorised_encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..db10359e9f534226840746449f96adbb369c96b6 --- /dev/null +++ b/scenic/projects/vivit/configs/something_something_v2/vivit_large_factorised_encoder.py @@ -0,0 +1,168 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""ViViT-Large Factorised Encoder Something-Something v2. + +""" + + +from absl import logging +import ml_collections + +SSV2_TRAIN_SIZE = 168913 +SSV2_VAL_SIZE = 24777 + + +def get_config(): + """Returns the base experiment configuration.""" + config = ml_collections.ConfigDict() + config.experiment_name = 'vivit_large_fe_ssv2' + + # Dataset. + config.dataset_name = 'video_tfrecord_dataset' + config.dataset_configs = ml_collections.ConfigDict() + config.data_dtype_str = 'float32' + + config.datset_configs = ml_collections.ConfigDict() + # Dataset. + config.dataset_configs.base_dir = 'path/to/dataset/root' + config.dataset_configs.tables = { + 'train': 'something-something-v2-train.rgb.tfrecord@128', + 'validation': 'something-something-v2-validation.rgb.tfrecord@128', + 'test': 'something-something-v2-validation.rgb.tfrecord@128' + } + config.dataset_configs.examples_per_subset = { + 'train': SSV2_TRAIN_SIZE, + 'validation': SSV2_VAL_SIZE, + 'test': SSV2_VAL_SIZE + } + config.dataset_configs.num_classes = 174 + + # This is going to sample 32 frames, sampled at a stride of 1 from the video. + # And then it will uniformly take n_sampled_frames from there. + config.dataset_configs.num_frames = 32 + config.dataset_configs.stride = 1 + config.dataset_configs.min_resize = 288 + config.dataset_configs.crop_size = 256 + config.dataset_configs.one_hot_labels = True + config.dataset_configs.zero_centering = True + + # Multicrop evaluation settings: + config.dataset_configs.do_multicrop_test = True # Do during training. + config.dataset_configs.log_test_epochs = 5 + # The effective batch size per host when testing is + # num_test_clips * test_batch_size. + config.dataset_configs.num_test_clips = 4 + config.dataset_configs.test_batch_size = 8 # Must equal num_local_devices. + # To take three spatial crops when testing. + config.dataset_configs.do_three_spatial_crops = True + config.multicrop_clips_per_device = 2 + + # Data augmentation + config.dataset_configs.augmentation_params = ml_collections.ConfigDict() + config.dataset_configs.augmentation_params.do_jitter_scale = True + config.dataset_configs.augmentation_params.scale_min_factor = 0.9 + config.dataset_configs.augmentation_params.scale_max_factor = 1.33 + config.dataset_configs.augmentation_params.prob_scale_jitter = 1.0 + config.dataset_configs.augmentation_params.do_color_augment = False + config.dataset_configs.augmentation_params.prob_color_augment = 0.8 + config.dataset_configs.augmentation_params.prob_color_drop = 0.1 + + # This does Mixup in the train loop. This is fast. But make sure that device + # batch size is more than 1. + config.mixup = ml_collections.ConfigDict() + config.mixup.alpha = 0.3 + + config.dataset_configs.augmentation_params.do_rand_augment = True + config.dataset_configs.augmentation_params.rand_augment_num_layers = 2 + config.dataset_configs.augmentation_params.rand_augment_magnitude = 20 + + config.dataset_configs.prefetch_to_device = 2 + + # Model: ViViT-Large Factorized Encoder. + config.model_name = 'vivit_classification' + config.model = ml_collections.ConfigDict() + config.model.hidden_size = 1024 + config.model.patches = ml_collections.ConfigDict() + config.model.patches.size = [16, 16] + + config.model.attention_config = ml_collections.ConfigDict() + config.model.attention_config.type = 'factorized_encoder' + + config.model.spatial_transformer = ml_collections.ConfigDict() + config.model.spatial_transformer.num_heads = 16 + config.model.spatial_transformer.mlp_dim = 4096 + config.model.spatial_transformer.num_layers = 24 + config.model.temporal_transformer = ml_collections.ConfigDict() + config.model.temporal_transformer.num_heads = 16 + config.model.temporal_transformer.mlp_dim = 4096 + config.model.temporal_transformer.num_layers = 4 + + config.model.representation_size = None + config.model.classifier = 'token' + config.model.attention_dropout_rate = 0. + config.model.dropout_rate = 0. + config.model.stochastic_droplayer_rate = 0.3 + config.model_dtype_str = 'float32' + + config.model.temporal_encoding_config = ml_collections.ConfigDict() + config.model.temporal_encoding_config.method = '3d_conv' + config.model.patches.size = [16, 16, 2] + config.model.temporal_encoding_config.kernel_init_method = 'central_frame_initializer' + + # Training. + config.trainer_name = 'vivit_trainer' + config.optimizer = 'momentum' + config.optimizer_configs = ml_collections.ConfigDict() + config.l2_decay_factor = 0 + config.max_grad_norm = 1 + config.label_smoothing = 0.3 + config.num_training_epochs = 35 + config.batch_size = 64 + config.rng_seed = 0 + + # Initialisation. + config.init_from = ml_collections.ConfigDict() + # Use a pretrained Kinetics checkpoint, or ImageNet checkpoint + config.init_from.checkpoint_path = 'path_to_checkpoint' + config.init_from.checkpoint_format = 'scenic' + config.init_from.model_config = ml_collections.ConfigDict() + config.init_from.model_config.model = ml_collections.ConfigDict() + config.init_from.model_config.model.classifier = 'token' # Specify if this is 'token' or 'gap'. pylint: disable=line-too-long + config.init_from.checkpoint_path = None + config.init_from.restore_positional_embedding = True + config.init_from.restore_input_embedding = True + config.init_from.positional_embed_size_change = 'resize' + + # Learning rate. + steps_per_epoch = SSV2_TRAIN_SIZE // config.batch_size + total_steps = config.num_training_epochs * steps_per_epoch + config.lr_configs = ml_collections.ConfigDict() + config.lr_configs.learning_rate_schedule = 'compound' + config.lr_configs.factors = 'constant * cosine_decay * linear_warmup' + config.lr_configs.warmup_steps = int(2.5 * steps_per_epoch) + config.lr_configs.steps_per_cycle = total_steps + config.lr_configs.base_learning_rate = 0.4 + + # Logging. + config.write_summary = True + config.checkpoint = True # Do checkpointing. + config.debug_train = False # Debug mode during training. + config.debug_eval = False # Debug mode during eval. + config.checkpoint_steps = 500 # Checkpoint more frequently than a val epoch + config.log_summary_steps = 100 + + return config + + diff --git a/scenic/projects/vivit/data/__init__.py b/scenic/projects/vivit/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/vivit/data/data.md b/scenic/projects/vivit/data/data.md new file mode 100644 index 0000000000000000000000000000000000000000..27e3afe24ae4ce7e0ad4b33e15e5fac329965fa0 --- /dev/null +++ b/scenic/projects/vivit/data/data.md @@ -0,0 +1,29 @@ +Datasets +== + +The training pipeline uses the [DeepMind Video Reader (DMVR)](https://github.com/deepmind/dmvr) +library for pre-processing and data-augmentation. +Futhermore, we assume that datasets are stored in in [TFRecord](https://www.tensorflow.org/tutorials/load_data/tfrecord) files. + +To pre-process a dataset into the required format, please follow the +instructions from DMVR [here](https://github.com/deepmind/dmvr/tree/master/examples). + +Once a dataset has been pre-processed, it can easily be used for training by +adding the following snippet to the configuration file: + +```python +dataset_configs = ml_collections.ConfigDict() + +dataset_configs.base_dir = '/path/to/dataset_root/' +dataset_configs.tables = { + 'train': 'relative_path_to_train_set', + 'validation': 'relative_path_to_validation_set', + 'test': 'relative_path_to_test_set' +} +dataset_configs.examples_per_subset = { + 'train': NUM_TRAIN_EXAMPLES, + 'validation': NUM_VAL_EXAMPLES, + 'test': NUM_TEST_EXAMPLES +} +dataset_configs.num_classes = NUM_CLASSES +``` diff --git a/scenic/projects/vivit/data/file_utils.py b/scenic/projects/vivit/data/file_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..5481b51def3833d09d4f1ff433a521d8e8fe0742 --- /dev/null +++ b/scenic/projects/vivit/data/file_utils.py @@ -0,0 +1,92 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utility functions for working with sharded files. + +A sharded file is a single conceptual file that is broken into a collection +of files to make parallelization easier. A sharded file spec is like a +filename for a sharded file; the file spec "/some/path/prefix@200.txt" +says that the sharded file consists of 200 actual files that have names like +"/some/path/prefix-00000-of-00200.txt", "/some/path/prefix-00001-of-00200.txt", +etc. This module contains functions for parsing, generating and detecting +sharded file specs. +""" + +import math +import re +from typing import Iterator, Tuple + +SHARD_SPEC_PATTERN = re.compile(R'((.*)\@(\d*[1-9]\d*)(?:\.(.+))?)') + + +class ShardError(Exception): + """An I/O error.""" + + +def parse_sharded_file_spec(spec: str) -> Tuple[str, int, str]: + """Parse a sharded file specification. + + Args: + spec: The sharded file specification. A sharded file spec is one like + 'gs://some/file@200.txt'. Here, '@200' specifies the number of shards. + + Returns: + basename: The basename for the files. + num_shards: The number of shards. + suffix: The suffix if there is one, or '' if not. + Raises: + ShardError: If the spec is not a valid sharded specification. + """ + m = SHARD_SPEC_PATTERN.match(spec) + if not m: + raise ShardError(('The file specification {0} is not a sharded file ' + 'specification because it did not match the regex ' + '{1}').format(spec, SHARD_SPEC_PATTERN.pattern)) + + # If there's a non-empty suffix, we need to prepend '.' so we get files like + # foo@20.ext instead of foo@ext + suffix = '.' + m.group(4) if m.group(4) else '' + + return m.group(2), int(m.group(3)), suffix + + +def _shard_width(num_shards: int) -> int: + """Return the width of the shard matcher based on the number of shards.""" + return max(5, int(math.floor(math.log10(num_shards)) + 1)) + + +def generate_sharded_filenames(spec: str) -> Iterator[str]: + """Generator for the list of filenames corresponding to the sharding path. + + Args: + spec: Represents a filename with a sharding specification. + e.g., 'gs://some/file@200.txt' represents a file sharded 200 ways. + + Yields: + Each filename in the sharding path. + + Raises: + ShardError: If spec is not a valid sharded file specification. + """ + basename, num_shards, suffix = parse_sharded_file_spec(spec) + width = _shard_width(num_shards) + format_str = '{{0}}-{{1:0{0}}}-of-{{2:0{0}}}{{3}}'.format(width) + for i in range(num_shards): + yield format_str.format(basename, i, num_shards, suffix) + + +def is_sharded_file_spec(spec: str) -> bool: + """Returns True if spec is a sharded file specification.""" + m = SHARD_SPEC_PATTERN.match(spec) + return m is not None diff --git a/scenic/projects/vivit/data/tests/__init__.py b/scenic/projects/vivit/data/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/vivit/data/tests/test_video_tfrecord_dataset.py b/scenic/projects/vivit/data/tests/test_video_tfrecord_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..8601cfe79c55cad396fcc79453c4409405d98f00 --- /dev/null +++ b/scenic/projects/vivit/data/tests/test_video_tfrecord_dataset.py @@ -0,0 +1,103 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for datasets.""" + +from absl.testing import absltest +from absl.testing import parameterized +import jax +import jax.numpy as jnp +import ml_collections +from scenic.projects.vivit.data import video_tfrecord_dataset + + +class VideoTFRecordDatsetTest(parameterized.TestCase): + """Unit tests for video_tfrecord_dataset.py.""" + + @parameterized.named_parameters( + ('1 test clip', 1, False, 0), + ('1x3 test clips', 1, True, 0), + ('4 test clips, prefetch', 4, False, 1), + ('4x3 test clips, prefetch', 4, True, 1)) + def test_dataset_builder(self, num_test_clips, do_three_spatial_crops, + prefetch_to_device): + """Tests dataset builder.""" + num_shards = jax.local_device_count() + batch_size = num_shards * 3 + eval_batch_size = num_shards * 2 + + dataset_configs = ml_collections.ConfigDict() + dataset_configs.prefetch_to_device = prefetch_to_device + dataset_configs.num_frames = 8 + dataset_configs.num_test_clips = num_test_clips + dataset_configs.do_three_spatial_crops = do_three_spatial_crops + + dataset_configs.base_dir = '/path/to/dataset_root/' + dataset_configs.tables = { + 'train': 'something-something-v2-train.rgb.tfrecord@128', + 'validation': 'something-something-v2-validation.rgb.tfrecord@128', + 'test': 'something-something-v2-validation.rgb.tfrecord@128' + } + dataset_configs.examples_per_subset = { + 'train': 168913, + 'validation': 24777, + 'test': 24777 + } + dataset_configs.num_classes = 174 + + print('Please set the correct dataset base directory and run' + 'this test again.') + return + + dataset = video_tfrecord_dataset.get_dataset( + batch_size=batch_size, + eval_batch_size=eval_batch_size, + num_shards=num_shards, + dataset_configs=dataset_configs) + + self.assertIsNotNone(dataset.train_iter) + self.assertIsNotNone(dataset.valid_iter) + self.assertIsNotNone(dataset.test_iter) + + train_batch = next(dataset.train_iter) + eval_batch = next(dataset.valid_iter) + test_batch = next(dataset.test_iter) + + # Check shapes. + num_spatial_crops = 3 if do_three_spatial_crops else 1 + expected_shape = jnp.array((num_shards, batch_size // num_shards) + + dataset.meta_data['input_shape'][1:]) + expected_shape_eval = jnp.array( + (num_shards, eval_batch_size // num_shards) + + dataset.meta_data['input_shape'][1:]) + expected_shape_test = jnp.array( + (num_shards, + eval_batch_size * num_test_clips * num_spatial_crops // num_shards) + + dataset.meta_data['input_shape'][1:]) + self.assertTrue( + jnp.array_equal(train_batch['inputs'].shape, expected_shape)) + self.assertTrue( + jnp.array_equal(eval_batch['inputs'].shape, expected_shape_eval)) + self.assertTrue( + jnp.array_equal(test_batch['inputs'].shape, expected_shape_test)) + + # Check number of examples. + self.assertEqual(dataset.meta_data['num_train_examples'], 168913) + self.assertEqual(dataset.meta_data['num_eval_examples'], 24777) + self.assertEqual(dataset.meta_data['num_test_examples'], + 24777 * num_test_clips * num_spatial_crops) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/vivit/data/video_tfrecord_dataset.py b/scenic/projects/vivit/data/video_tfrecord_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..6c11524796514dd79d5d68abbbaa034ffcb058f2 --- /dev/null +++ b/scenic/projects/vivit/data/video_tfrecord_dataset.py @@ -0,0 +1,501 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Data-loader to read from SSTables using the MediaSequence format.""" + +import functools +import os +from typing import Dict, Iterator, List, Optional, Text, Tuple, Union + +from absl import logging +from dmvr import builders +from dmvr import modalities +from dmvr import video_dataset +from flax import jax_utils +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.dataset_lib import video_ops +from scenic.projects.vivit.data import file_utils +import tensorflow as tf + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +Rng = Union[jnp.ndarray, Dict[str, jnp.ndarray]] + + +def get_sharded_files( + data_path: str, + fraction_data: float = 1.0, + num_groups: Optional[int] = None, + group_index: Optional[int] = None) -> List[str]: + """Returns a list of shards, which may be postprocessed. + + Args: + data_path: Path to the data, either sharded or a single file. + fraction_data: Fraction of the data to be consumed. Only that fraction of + the shards is returned. + num_groups: Number of groups to split the data. All the shards will be split + in `num_groups` groups (of approximately same number of files) and the + given `group_index` group only will be returned. This is useful when + distributing the data over multiple hosts, which will make sure that the + same shard is not processed in two different hosts. If `num_groups` is + provided `group_index` must be provided as well. + group_index: Index of the group of data being returned. See `num_groups`. + + Returns: + A list of shard filenames. + + Raises: + ValueError: If `fraction_data` is not between 0 and 1. + ValueError: If `num_groups` requested is not consistent with the number of + shards available. + ValueError: If `group_index` >= `num_groups` + ValueError: If only one of `num_groups` and `group_index` is given. + """ + if fraction_data <= 0 or fraction_data > 1: + raise ValueError( + f'The fraction of data must be in (0, 1] but is {fraction_data}.') + + if file_utils.is_sharded_file_spec(data_path): + shards = list(file_utils.generate_sharded_filenames(data_path)) + else: + shards = [data_path] + + num_used_shards = int(np.ceil(fraction_data * len(shards))) + shards = shards[:num_used_shards] + + if num_groups is None and group_index is None: + return shards + if num_groups is None or group_index is None: + raise ValueError('Both `num_groups` and `group_index` should be specified.') + if group_index >= num_groups: + raise ValueError( + f'Cannot request index {group_index} of {num_groups} groups') + if num_groups > num_used_shards: + raise ValueError( + f'After applying `fraction_data={fraction_data}` we have ' + f'{num_used_shards} data shards, which cannot be split into ' + f'{num_groups} groups.') + + split_shard_ids = np.array_split(np.arange(num_used_shards), num_groups) + begin_loc = split_shard_ids[group_index][0] + end_loc = split_shard_ids[group_index][-1] + 1 + shards = shards[begin_loc:end_loc] + return shards + + +class TFRecordDatasetFactory(video_dataset.BaseVideoDatasetFactory): + """Reader for TFRecords using the MediaSequence format. + + Attributes: + num_classes: int. The number of classes in the dataset. + base_dir: str. The base directory from which the TFRecords are read. + subset: str. The subset of the dataset. In Scenic, the subsets are + "train", "validation" and "test". + """ + + def __init__( + self, + base_dir: str, + tables: Dict[str, Union[str, List[str]]], + examples_per_subset: Dict[str, int], + num_classes: int, + subset: str = 'train', + fraction_data: float = 1.0, + num_groups: Optional[int] = None, + group_index: Optional[int] = None): + """Initializes the instance of TFRecordDatasetFactory. + + Initializes a data-loader using DeepMind Video Reader (DMVR) pre-processing + (https://github.com/deepmind/dmvr). + TFRecords are assumed to consist of tf.SequenceExample protocol buffers in + the MediaSequence + (https://github.com/google/mediapipe/tree/master/mediapipe/util/sequence) + format. + + Args: + base_dir: The base directory of the TFRecords. + tables: A dictionary mapping the subset name (train, val or test) to the + relative path of the TFRecord containing them. Follows DMVR convention. + The values of the dictionary can either be a string or a list. If it is + a string, it specifies all the shards in the TFRecord. + Example - "/path/to/tfrecord@10". + If passing a list, each entry is a shard of the TFRecord. + Example - "[/path/to/tfrecord_shard_1_of_10, ..., + /path/to/tfrecord_shard_10_of_10]." + The latter scenario is useful for debugging. + examples_per_subset: A dictionary mapping the subset name (train, val or + test) to the number of examples in the dataset for that subset. + num_classes: The number of classes in the dataset. + subset: The subset of the dataset to load. Must be a key of "tables" + fraction_data: The fraction of the data to load. If less than 1.0, this + fraction of the total TFRecord shards are read. + num_groups: If specified will reshard the data according to `num_groups`. + A `group_index` should be specified if using `num_groups`. + group_index: Index of the shard to return after resharding. `num_groups` + should be specified if using `group_index`. This is useful in + distributed setting where one wants to ensure that different data is + read by different workers. + + Raises: + ValueError: If subset is not a key of tables or examples_per_subset + """ + if (subset not in tables) or (subset not in examples_per_subset): + raise ValueError(f'Invalid subset {subset!r}. ' + f'The available subsets are: {set(tables)!r}') + + self.num_classes = num_classes + self.base_dir = base_dir + self.subset = subset + self.num_examples = examples_per_subset[subset] + + data_relative_path = tables[subset] + if isinstance(data_relative_path, list): + shards = [os.path.join(self.base_dir, x) for x in data_relative_path] + else: + data_path = os.path.join(self.base_dir, data_relative_path) + shards = get_sharded_files(data_path=data_path, + fraction_data=fraction_data, + num_groups=num_groups, + group_index=group_index) + + super().__init__(shards=shards) + + def _build(self, + is_training: bool = True, + # Video related parameters. + num_frames: int = 32, + stride: int = 1, + num_test_clips: int = 1, + min_resize: int = 256, + crop_size: int = 224, + zero_centering_image: bool = False, + train_frame_sampling_mode: str = 'random', + # Label related parameters. + one_hot_label: bool = True, + get_label_str: bool = False, + label_offset: int = 0): + """Adds DMVR pre-processors to the dataset. + + Args: + is_training: whether or not in training mode. + num_frames: number of frames per subclip. + stride: temporal stride to sample frames. + num_test_clips: number of test clip (1 by default). If more than one, + this will sample multiple linearly spaced clips within each video at + test time. If 1, then a single clip in the middle of the video is + sampled. + min_resize: frames are resized so that min width/height is min_resize. + crop_size: final size of the frame after cropping the resized frames. + zero_centering_image: whether to have image values in the interval [-1, 1] + or [0, 1]. + train_frame_sampling_mode: Method of sampling frames during training. + Options are one of {random, random_sample_with_centre, centre} + one_hot_label: whether or not to return one hot version of labels. + get_label_str: whether or not to return label as text. + label_offset: If non-zero, this value is subtracted from the parsed label. + Useful when dataset is 1-indexed. + """ + modalities.add_image( + parser_builder=self.parser_builder, + sampler_builder=self.sampler_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + postprocessor_builder=self.postprocessor_builder, + is_training=is_training, + num_frames=num_frames, stride=stride, + num_test_clips=num_test_clips, + min_resize=min_resize, crop_size=crop_size, + zero_centering_image=zero_centering_image) + + modalities.add_label( + parser_builder=self.parser_builder, + decoder_builder=self.decoder_builder, + preprocessor_builder=self.preprocessor_builder, + one_hot_label=one_hot_label, + num_classes=self.num_classes, + add_label_name=get_label_str) + + if label_offset: + self.preprocessor_builder.add_fn( + fn=lambda x: x - label_offset, + feature_name=builders.LABEL_INDEX_FEATURE_NAME, + fn_name=f'label_offset_{label_offset}', + add_before_fn_name=( + f'{builders.LABEL_INDEX_FEATURE_NAME}_one_hot')) + + +def load_split( + ds_factory, + batch_size: int, + subset: Text = 'train', + num_frames: int = 32, + stride: int = 2, + num_test_clips: int = 1, + min_resize: int = 256, + crop_size: int = 224, + one_hot_label: bool = True, + zero_centering: bool = True, + get_label_str: bool = False, + augmentation_params: Optional[ml_collections.ConfigDict] = None, + keep_key: bool = False, + do_three_spatial_crops: bool = False, + label_offset: int = 0) -> Tuple[tf.data.Dataset, int]: + """Loads dataset using DMVR for pre-processing. + + DMVR dataset loader already does basic augmentation (random crop and flip in + train mode. It also already shuffles and batches the data. + + Args: + ds_factory: A DMVR factory to instantiate with the subset. + batch_size: The batch_size to use. + subset: train, validation or test + num_frames: Number of frames per subclip. + stride: Temporal stride to sample frames. + num_test_clips: Number of test clips (1 by default). If more than 1, this + will sample multiple linearly spaced clips within each video at test time. + If 1, then a single clip in the middle of the video is sampled. The clips + are aggreagated in the batch dimension. + min_resize: Frames are resized so that min(height, width) is min_resize. + crop_size: Final size of the frame after cropping the resized frames. Both + height and width are the same. + one_hot_label: If True, return one-hot version of the labels (ie [N, C]) + array. Otherwise, return [N]-array of labels. + zero_centering: If True, frames are normalized to values in the interval + [-1, 1]. If False, values are in the interval [0, 1]. + get_label_str: whether or not to return label as text. + Note that strings cannot be used in pmapped functions in Jax! + augmentation_params: Augmentation configurations in train mode. + keep_key: bool; If true, also return the key for each example. + do_three_spatial_crops: If true, take three spatial crops of each clip + during testing. + label_offset: If non-zero, this value is subtracted from the parsed label. + Useful when dataset is 1-indexed. + + Returns: + A pair `(ds, num_examples)` with + ds: A `tf.data.Dataset` object + num_examples: Number of examples in the dataset. + """ + dataset = ds_factory(subset=subset).configure( + is_training=(subset == 'train'), + num_frames=num_frames, + stride=stride, + num_test_clips=num_test_clips, + min_resize=min_resize, + crop_size=crop_size, + zero_centering_image=zero_centering, + one_hot_label=one_hot_label, + get_label_str=get_label_str, + label_offset=label_offset) + + if subset == 'train' and augmentation_params: + dataset = video_ops.additional_augmentations(dataset, augmentation_params, + crop_size, num_frames, + zero_centering) + + if subset != 'train' and do_three_spatial_crops: + rgb_feature_name = builders.IMAGE_FEATURE_NAME + + dataset.preprocessor_builder.replace_fn( + f'{rgb_feature_name}_central_crop', + functools.partial(video_ops.three_spatial_crops, crop_size=crop_size)) + + if num_test_clips == 1: + # This means that reshaping is not part of the post-processing graph + output_shape = (-1, num_frames, crop_size, crop_size, 3) + dataset.postprocessor_builder.add_fn( + fn=lambda x: tf.reshape(x, output_shape), + feature_name=rgb_feature_name, + fn_name=f'{rgb_feature_name}_reshape') + + logging.info('Preprocessing graph: %s', + dataset.preprocessor_builder.get_summary()) + logging.info('Postprocessing graph: %s', + dataset.postprocessor_builder.get_summary()) + num_examples = dataset.num_examples + + ds = dataset.make_dataset(batch_size=batch_size, + shuffle=(subset == 'train'), + drop_remainder=(subset == 'train'), + keep_key=(subset != 'train' and keep_key)) + + options = tf.data.Options() + options.threading.private_threadpool_size = 48 + ds = ds.with_options(options) + + return ds, num_examples + + +def map_keys(batch: Batch) -> Batch: + """DMVR dataset returns 'image' and 'label'. We want 'inputs' and 'label'.""" + + batch['inputs'] = batch['image'] + return batch + + +def tile_label_key(batch: Batch) -> Batch: + """Tile labels and keys to match input videos when num_test_clips > 1. + + When multiple test crops are used (ie num_test_clips > 1), the batch dimension + of batch['inputs'] = test_batch_size * num_test_clips. + However, labels and keys remain of size [test_batch_size]. + This function repeats label and key to match the inputs. + + Args: + batch: Batch from iterator + + Returns: + Batch with 'label' and 'key' tiled to match 'inputs'. The input batch is + mutated by the function. + """ + n_repeats = batch['inputs'].shape[0] // batch['label'].shape[0] + batch['label'] = np.repeat(batch['label'], n_repeats, axis=0) + if 'key' in batch: + batch['key'] = np.repeat(batch['key'], n_repeats, axis=0) + return batch + + +@datasets.add_dataset('video_tfrecord_dataset') +def get_dataset( + *, + batch_size: int, + eval_batch_size: int, + num_shards: int, + dtype_str: Text = 'float32', + shuffle_seed: Optional[int] = 0, + rng: Optional[Rng] = None, + dataset_configs: ml_collections.ConfigDict, + dataset_service_address: Optional[str] = None) -> dataset_utils.Dataset: + """Returns a generator for the dataset.""" + del rng # Parameter was required by caller API, but is unused. + + def validate_config(field): + if dataset_configs.get(field) is None: + raise ValueError(f'{field} must be specified for TFRecord dataset.') + validate_config('base_dir') + validate_config('tables') + validate_config('examples_per_subset') + validate_config('num_classes') + + num_frames = dataset_configs.get('num_frames', 32) + num_test_clips = dataset_configs.get('num_test_clips', 1) + stride = dataset_configs.get('stride', 2) + min_resize = dataset_configs.get('min_resize', 256) + crop_size = dataset_configs.get('crop_size', 224) + one_hot_label = dataset_configs.get('one_hot_label', True) + zero_centre_data = dataset_configs.get('zero_centering', True) + augmentation_params = dataset_configs.get('augmentation_params', None) + num_train_val_clips = dataset_configs.get('num_train_val_clips', 1) + keep_test_key = dataset_configs.get('keep_test_key', False) + # For the test set, the actual batch size is + # test_batch_size * num_test_clips. + test_batch_size = dataset_configs.get('test_batch_size', eval_batch_size) + do_three_spatial_crops = dataset_configs.get('do_three_spatial_crops', False) + num_spatial_crops = 3 if do_three_spatial_crops else 1 + test_split = dataset_configs.get('test_split', 'test') + label_offset = dataset_configs.get('label_offset', 0) + + ds_factory = functools.partial( + TFRecordDatasetFactory, + base_dir=dataset_configs.base_dir, + tables=dataset_configs.tables, + examples_per_subset=dataset_configs.examples_per_subset, + num_classes=dataset_configs.num_classes, + num_groups=jax.process_count(), + group_index=jax.process_index()) + + def create_dataset_iterator( + subset: Text, + batch_size_local: int, + num_clips: int, + keep_key_local: bool = False) -> Tuple[Iterator[Batch], int]: + is_training = subset == 'train' + is_test = subset == 'test' + logging.info('Loading split %s', subset) + + dataset, num_examples = load_split( + ds_factory, + batch_size=batch_size_local, + subset=subset, + num_frames=num_frames, + stride=stride, + num_test_clips=num_clips, + min_resize=min_resize, + crop_size=crop_size, + one_hot_label=one_hot_label, + zero_centering=zero_centre_data, + augmentation_params=augmentation_params, + keep_key=keep_key_local, + do_three_spatial_crops=do_three_spatial_crops and is_test, + label_offset=label_offset) + + if dataset_service_address and is_training: + if shuffle_seed is not None: + raise ValueError('Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you ' + 'want to run with dataset service.') + logging.info('Using the tf.data service at %s', dataset_service_address) + dataset = dataset_utils.distribute(dataset, dataset_service_address) + + pad_batch_size = batch_size_local + if is_test: + pad_batch_size = batch_size_local * num_clips * num_spatial_crops + maybe_pad_batches = functools.partial( + dataset_utils.maybe_pad_batch, + train=is_training, + batch_size=pad_batch_size) + shard_batches = functools.partial(dataset_utils.shard, n_devices=num_shards) + + current_ds_iterator = ( + map_keys(dataset_utils.tf_to_numpy(data)) for data in iter(dataset) + ) + + if is_test and num_clips * num_spatial_crops > 1: + current_ds_iterator = map(tile_label_key, current_ds_iterator) + + current_ds_iterator = map(maybe_pad_batches, current_ds_iterator) + current_ds_iterator = map(shard_batches, current_ds_iterator) + if is_training and dataset_configs.get('prefetch_to_device'): + # Async bind batch to device which speeds up training. + current_ds_iterator = jax_utils.prefetch_to_device( + current_ds_iterator, dataset_configs.get('prefetch_to_device')) + + return current_ds_iterator, num_examples + + train_iter, n_train_examples = create_dataset_iterator( + 'train', batch_size, num_train_val_clips) + eval_iter, n_eval_examples = create_dataset_iterator( + 'validation', eval_batch_size, num_train_val_clips) + test_iter, n_test_examples = create_dataset_iterator( + test_split, test_batch_size, num_test_clips, keep_test_key) + + meta_data = { + 'num_classes': dataset_configs.num_classes, + 'input_shape': (-1, num_frames, crop_size, crop_size, 3), + 'num_train_examples': (n_train_examples * num_train_val_clips), + 'num_eval_examples': (n_eval_examples * num_train_val_clips), + 'num_test_examples': + (n_test_examples * num_test_clips * num_spatial_crops), + 'input_dtype': getattr(jnp, dtype_str), + 'target_is_onehot': True, + } + logging.info('Dataset metadata:\n%s', meta_data) + + return dataset_utils.Dataset(train_iter, eval_iter, test_iter, meta_data) diff --git a/scenic/projects/vivit/data/vivit.png b/scenic/projects/vivit/data/vivit.png new file mode 100644 index 0000000000000000000000000000000000000000..9465b012849a91aa1c49cc1ebde37079a4e7b97b --- /dev/null +++ b/scenic/projects/vivit/data/vivit.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed018896fe88e29f1a80281fb40f2d34d7a814f0b45398a1e627569d277b8326 +size 214494 diff --git a/scenic/projects/vivit/evaluation_lib.py b/scenic/projects/vivit/evaluation_lib.py new file mode 100644 index 0000000000000000000000000000000000000000..40ba44768c92961b5e32ddaacb67ddfdb19b2d7d --- /dev/null +++ b/scenic/projects/vivit/evaluation_lib.py @@ -0,0 +1,261 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Functions for evaluation.""" + +import os +from typing import Any, Callable, Dict, Optional, Sequence, Tuple, Union + +from absl import logging +import flax +from flax.metrics import tensorboard +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import numpy as np +from scenic.train_lib_deprecated import pretrain_utils +from scenic.train_lib_deprecated import train_utils +from sklearn.metrics import average_precision_score +from tensorflow.io import gfile + + +# Aliases for custom types: +Array = Union[jnp.ndarray, np.ndarray] + + +def restore_checkpoint(checkpoint_path: str, + train_state: Optional[train_utils.TrainState] = None, + assert_exist: bool = False, + step: int = None) -> Tuple[train_utils.TrainState, int]: + """Restores the last checkpoint. + + Supports checkpoints saved either with old Scenic (flax.deprecated.nn) or + current Scenic (flax.Linen). Therefore, this function can be used for + evaluation of old or current models. + + First restores the checkpoint, which is an instance of TrainState that holds + the state of training, and then replicates it. + + Args: + checkpoint_path: Directory for saving the checkpoint. + train_state: An instance of TrainState that holds the state of training. + assert_exist: bool; Assert that there is at least one checkpoint exists in + the given path. + step: Step number to load or None to load latest. If specified, + checkpoint_path must be a directory. + + Returns: + Training state and an int which is the current step. + """ + if assert_exist: + glob_path = os.path.join(checkpoint_path, 'checkpoint_*') + if not gfile.glob(glob_path): + raise ValueError('No checkpoint for the pretrained model is found in: ' + f'{checkpoint_path}') + restored_train_state = checkpoints.restore_checkpoint(checkpoint_path, None, + step) + + if restored_train_state: + (restored_params, restored_model_state + ) = pretrain_utils.get_params_and_model_state_dict(restored_train_state) + restored_params = flax.core.freeze(restored_params) + restored_model_state = flax.core.freeze(restored_model_state) + train_state = train_state or train_utils.TrainState() + if train_state.optimizer: + new_optimizer = train_state.optimizer.replace(target=restored_params) + else: + new_optimizer = {'target': restored_params} + train_state = train_state.replace( # pytype: disable=attribute-error + optimizer=new_optimizer, + model_state=restored_model_state, + global_step=int(restored_train_state['global_step']), + rng=restored_train_state['rng'], + accum_train_time=restored_train_state.get('accum_train_time', 0)) + else: + train_state = train_state or train_utils.TrainState() + + return train_state, int(train_state.global_step) + + +def compute_mean_average_precision(logits, labels, suffix='', + suffix_separator='_', + return_per_class_ap=False): + """Computes mean average precision for multi-label classification. + + Args: + logits: Numpy array of shape [num_examples, num_classes] + labels: Numpy array of shape [num_examples, num_classes] + suffix: Suffix to add to the summary + suffix_separator: Separator before adding the suffix + return_per_class_ap: If True, return results for each class in the summary. + + Returns: + summary: Dictionary containing the mean average precision, and also the + average precision per class. + """ + + assert logits.shape == labels.shape, 'Logits and labels have different shapes' + n_classes = logits.shape[1] + average_precisions = [] + if suffix: + suffix = suffix_separator + suffix + summary = {} + + for i in range(n_classes): + ave_precision = average_precision_score(labels[:, i], logits[:, i]) + if np.isnan(ave_precision): + logging.warning('AP for class %d is NaN', i) + + if return_per_class_ap: + summary_key = f'per_class_average_precision_{i}{suffix}' + summary[summary_key] = ave_precision + average_precisions.append(ave_precision) + + mean_ap = np.nanmean(average_precisions) + summary[f'mean_average_precision{suffix}'] = mean_ap + logging.info('Mean AP is %0.3f', mean_ap) + + return summary + + +def compute_confusion_matrix_metrics( + confusion_matrices: Sequence[Array], + return_per_class_metrics: bool) -> Dict[str, float]: + """Computes classification metrics from a confusion matrix. + + Computes the recall, precision and jaccard index (IoU) from the input + confusion matrices. The confusion matrices are assumed to be of the form + [ground_truth, predictions]. In other words, ground truth classes along the + rows, and predicted classes along the columns. + + Args: + confusion_matrices: Sequence of [n_batch, n_class, n_class] confusion + matrices. The first two dimensions will be summed over to get an + [n_class, n_class] matrix for further metrics. + return_per_class_metrics: If true, return per-class metrics. + + Returns: + A dictionary of metrics (recall, precision and jaccard index). + """ + + conf_matrix = np.sum(confusion_matrices, axis=0) # Sum over eval batches. + if conf_matrix.ndim != 3: + raise ValueError( + 'Expecting confusion matrix to have shape ' + f'[batch_size, num_classes, num_classes], got {conf_matrix.shape}.') + conf_matrix = np.sum(conf_matrix, axis=0) # Sum over batch dimension. + n_classes = conf_matrix.shape[0] + metrics_dict = {} + + # We assume that the confusion matrix is [ground_truth x predictions]. + true_positives = np.diag(conf_matrix) + sum_rows = np.sum(conf_matrix, axis=0) + sum_cols = np.sum(conf_matrix, axis=1) + + recall_per_class = true_positives / sum_cols + precision_per_class = true_positives / sum_rows + jaccard_index_per_class = ( + true_positives / (sum_rows + sum_cols - true_positives)) + + metrics_dict['recall/mean'] = np.nanmean(recall_per_class) + metrics_dict['precision/mean'] = np.nanmean(precision_per_class) + metrics_dict['jaccard/mean'] = np.nanmean(jaccard_index_per_class) + + def add_per_class_results(metric: Array, name: str) -> None: + for i in range(n_classes): + # We set NaN values (from dividing by 0) to 0, to not cause problems with + # logging. + metrics_dict[f'{name}/{i}'] = np.nan_to_num(metric[i]) + + if return_per_class_metrics: + add_per_class_results(recall_per_class, 'recall') + add_per_class_results(precision_per_class, 'precision') + add_per_class_results(jaccard_index_per_class, 'jaccard') + + return metrics_dict + + +def prune_summary(summary, prefixes_to_remove): + """Removes keys starting with provided prefixes from the dict.""" + ret = {} + for key in summary.keys(): + report_key = True + for prefix in prefixes_to_remove: + if key.startswith(prefix): + report_key = False + break + if report_key: + ret[key] = summary[key] + return ret + + + + +def log_eval_summary(step: int, + eval_metrics: Sequence[Dict[str, Tuple[float, int]]], + extra_eval_summary: Optional[Dict[str, Any]] = None, + summary_writer: Optional[Any] = None, + metrics_normalizer_fn: Optional[ + Callable[[Dict[str, Tuple[float, int]], str], + Dict[str, float]]] = None, + prefix: str = 'valid', + key_separator: str = '_') -> Dict[str, float]: + """Computes and logs eval metrics. + + Args: + step: Current step. + eval_metrics: Sequence of dictionaries of calculated metrics. + extra_eval_summary: A dict containing summaries that are already ready to be + logged, e.g. global metrics from eval set, like precision/recall. + summary_writer: Summary writer object. + metrics_normalizer_fn: Used for normalizing metrics. The api for + this function is: `new_metrics_dict = metrics_normalizer_fn( metrics_dict, + split)`. If set to None, we use the normalize_metrics_summary which uses + the normalizer paired with each metric to normalize it. + prefix: str; Prefix added to the name of the summaries writen by this + function. + key_separator: Separator added between the prefix and key. + + Returns: + eval summary: A dictionary of metrics. + """ + eval_metrics = train_utils.stack_forest(eval_metrics) + + # Compute the sum over all examples in all batches. + eval_metrics_summary = jax.tree_util.tree_map(lambda x: x.sum(), eval_metrics) + # Normalize metrics by the total number of exampels. + metrics_normalizer_fn = ( + metrics_normalizer_fn or train_utils.normalize_metrics_summary) + eval_metrics_summary = metrics_normalizer_fn(eval_metrics_summary, 'eval') + # If None, set to an empty dictionary. + extra_eval_summary = extra_eval_summary or {} + + if jax.process_index() == 0: + message = '' + for key, val in eval_metrics_summary.items(): + message += f'{key}: {val} | ' + for key, val in extra_eval_summary.items(): + message += f'{key}: {val} | ' + logging.info('step: %d -- %s -- {%s}', step, prefix, message) + + if summary_writer is not None: + for key, val in eval_metrics_summary.items(): + summary_writer.scalar(f'{prefix}{key_separator}{key}', val, step) + for key, val in extra_eval_summary.items(): + summary_writer.scalar(f'{prefix}{key_separator}{key}', val, step) + summary_writer.flush() + + # Add extra_eval_summary to the returned eval_summary. + eval_metrics_summary.update(extra_eval_summary) + return eval_metrics_summary diff --git a/scenic/projects/vivit/main.py b/scenic/projects/vivit/main.py new file mode 100644 index 0000000000000000000000000000000000000000..fc23085afd1a1af7c0fe983e585e485ebdedbdcf --- /dev/null +++ b/scenic/projects/vivit/main.py @@ -0,0 +1,58 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main file for ViViT.""" + +from typing import Any, Callable + +from absl import flags +from clu import metric_writers +import jax +import jax.numpy as jnp +import ml_collections +from scenic import app +from scenic.projects.vivit import model as vivit_model +from scenic.projects.vivit import trainer as vivit_trainer +from scenic.train_lib_deprecated import train_utils + +FLAGS = flags.FLAGS + + +def get_trainer(trainer_name: str) -> Callable[..., Any]: + """Returns trainer given its name.""" + if trainer_name == 'vivit_trainer': + return vivit_trainer.train + raise ValueError(f'Unsupported trainer: {trainer_name}.') + + +def main(rng: jnp.ndarray, config: ml_collections.ConfigDict, workdir: str, + writer: metric_writers.MetricWriter): + """Main function for the ViViT project.""" + model_cls = vivit_model.get_model_cls(config.model_name) + data_rng, rng = jax.random.split(rng) + dataset = train_utils.get_dataset( + config, data_rng, dataset_service_address=FLAGS.dataset_service_address) + trainer = get_trainer(config.trainer_name) + + trainer( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=workdir, + writer=writer) + + +if __name__ == '__main__': + app.run(main=main) diff --git a/scenic/projects/vivit/model.py b/scenic/projects/vivit/model.py new file mode 100644 index 0000000000000000000000000000000000000000..a4bfe3bb5dce2f96097ed9c1de9856efff5aff15 --- /dev/null +++ b/scenic/projects/vivit/model.py @@ -0,0 +1,970 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""ViViT: Vision Transformer for Video.""" + +import functools +from typing import Any, Optional, Callable, Sequence + +from absl import logging +import flax.linen as nn +from flax.linen.linear import default_kernel_init +from immutabledict import immutabledict +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.common_lib import video_utils +from scenic.model_lib.base_models import base_model +from scenic.model_lib.base_models import classification_model +from scenic.model_lib.base_models import model_utils as base_model_utils +from scenic.model_lib.base_models.classification_model import ClassificationModel +from scenic.model_lib.layers import attention_layers +from scenic.model_lib.layers import nn_layers +from scenic.projects.baselines import vit +from scenic.projects.vivit import model_utils + +Initializer = Callable[[jnp.ndarray, Sequence[int], jnp.dtype], jnp.ndarray] + + +def get_model_cls(model_name): + """"Selects Vivit model type.""" + if model_name == 'vivit_multilabel_classification': + return ViViTMultilabelClassificationModel + elif model_name == 'vivit_classification': + return ViViTClassificationModel + elif model_name == 'vivit_multihead_classification': + return ViViTMultiHeadClassificationModel + else: + raise ValueError('Unrecognized model: {}'.format(model_name)) + + +_AXIS_TO_NAME = immutabledict({ + 1: 'time', + 2: 'space', +}) + +KERNEL_INITIALIZERS = immutabledict({ + 'zero': nn.initializers.zeros, + 'xavier': nn.initializers.xavier_uniform(), +}) + +ViViT_CLASSIFICATION_METRICS_BASIC = immutabledict({ + 'accuracy': (base_model_utils.weighted_correctly_classified, + base_model_utils.num_examples), + 'loss': (base_model_utils.weighted_unnormalized_softmax_cross_entropy, + base_model_utils.num_examples) +}) + +ViViT_CLASSIFICATION_METRICS = immutabledict({ + **ViViT_CLASSIFICATION_METRICS_BASIC, + 'accuracy_top_5': (functools.partial( + base_model_utils.weighted_topk_correctly_classified, + k=5), base_model_utils.num_examples), +}) + + +def _reshape_to_time_space(x, temporal_dims): + if x.ndim == 3: + b, thw, d = x.shape + assert thw % temporal_dims == 0 + hw = thw // temporal_dims + x = jnp.reshape(x, [b, temporal_dims, hw, d]) + assert x.ndim == 4 + return x + + +def embed_2d_patch(x, patches, embedding_dim): + """Standard ViT method of embedding input patches.""" + + n, h, w, c = x.shape + + assert patches.get('size') is not None, ('patches.size is now the only way' + 'to define the patches') + + fh, fw = patches.size + gh, gw = h // fh, w // fw + + if embedding_dim: + x = nn.Conv( + embedding_dim, (fh, fw), + strides=(fh, fw), + padding='VALID', + name='embedding')(x) + else: + # This path often results in excessive padding: b/165788633 + x = jnp.reshape(x, [n, gh, fh, gw, fw, c]) + x = jnp.transpose(x, [0, 1, 3, 2, 4, 5]) + x = jnp.reshape(x, [n, gh, gw, -1]) + + return x + + +def embed_3d_patch(x, + patches, + embedding_dim, + kernel_init_method, + name='embedding'): + """Embed 3D input patches into tokens.""" + + assert patches.get('size') is not None, 'patches.size must be defined' + assert len(patches.size) == 3, 'patches.size must have 3 elements' + assert embedding_dim, 'embedding_dim must be specified' + + fh, fw, ft = patches.size + + if kernel_init_method == 'central_frame_initializer': + kernel_initializer = model_utils.central_frame_initializer() + logging.info('Using central frame initializer for input embedding') + elif kernel_init_method == 'average_frame_initializer': + kernel_initializer = model_utils.average_frame_initializer() + logging.info('Using average frame initializer for input embedding') + else: + kernel_initializer = default_kernel_init + logging.info('Using default initializer for input embedding') + + x = nn.Conv( + embedding_dim, (ft, fh, fw), + strides=(ft, fh, fw), + padding='VALID', + name=name, + kernel_init=kernel_initializer)( + x) + + return x + + +def temporal_encode(x, + temporal_encoding_config, + patches, + hidden_size, + return_1d=True, + name='embedding'): + """Encode video for feeding into ViT.""" + + n, _, in_h, in_w, c = x.shape + + if temporal_encoding_config.method == 'temporal_sampling': + n_sampled_frames = temporal_encoding_config.n_sampled_frames + x = video_utils.sample_frames_uniformly(x, n_sampled_frames) + t_s = x.shape[1] + x = jnp.reshape(x, [n, t_s * in_h, in_w, c]) + + x = embed_2d_patch(x, patches, hidden_size) + temporal_dims = t_s + if return_1d: + n, th, w, c = x.shape + x = jnp.reshape(x, [n, th * w, c]) + else: + n, th, w, c = x.shape + x = jnp.reshape(x, [n, t_s, -1, w, c]) + + elif temporal_encoding_config.method == '3d_conv': + kernel_init_method = temporal_encoding_config.get('kernel_init_method', + None) + x = embed_3d_patch(x, patches, hidden_size, kernel_init_method, name) + temporal_dims = x.shape[1] + if return_1d: + n, t, h, w, c = x.shape + x = jnp.reshape(x, [n, t * h * w, c]) + + else: + raise AssertionError('Unknown temporal encoding method.') + + assert x.size > 0, ('Found zero tokens after temporal encoding. ' + 'Perhaps one of the patch sizes is such that ' + 'floor(dim_size / patch_size) = 0?') + + return x, temporal_dims + + +class EncoderBlock(nn.Module): + """Transformer encoder block. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: Number of heads. + attention_axis: Axis over which we run attention. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + droplayer_p: Probability of dropping a layer. + attention_kernel_initializer: Initializer to use for attention + layers. + deterministic: Deterministic or not (to apply dropout). + attention_fn: dot_product_attention or compatible function. Accepts query, + key, value, and returns output of shape `[bs, dim1, dim2, ..., dimN,, + num_heads, value_channels]`` + dtype: The dtype of the computation (default: float32). + + Returns: + Output after transformer encoder block. + """ + mlp_dim: int + num_heads: int + dtype: jnp.dtype = jnp.float32 + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + attention_kernel_initializer: Initializer = nn.initializers.xavier_uniform() + attention_fn: Any = nn.dot_product_attention + droplayer_p: float = 0.0 + + def get_drop_pattern(self, x, deterministic): + if not deterministic and self.droplayer_p: + shape = (x.shape[0],) + (1,) * (x.ndim - 1) + return jax.random.bernoulli( + self.make_rng('dropout'), self.droplayer_p, shape).astype('float32') + else: + return 0.0 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, deterministic: bool) -> jnp.ndarray: + """Applies Encoder1DBlock module.""" + + # Attention block. + x = nn.LayerNorm(dtype=self.dtype)(inputs) + x = nn.MultiHeadDotProductAttention( + num_heads=self.num_heads, + kernel_init=self.attention_kernel_initializer, + broadcast_dropout=False, + dropout_rate=self.attention_dropout_rate, + attention_fn=self.attention_fn, + dtype=self.dtype)( + x, x, deterministic=deterministic) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic) + + drop_pattern = self.get_drop_pattern(x, deterministic) + x = x * (1.0 - drop_pattern) + inputs + + # MLP block. + y = nn.LayerNorm(dtype=self.dtype)(x) + y = attention_layers.MlpBlock( + mlp_dim=self.mlp_dim, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6))( + y, deterministic=deterministic) + + drop_pattern = self.get_drop_pattern(x, deterministic) + return y * (1.0 - drop_pattern) + x + + +class EncoderFactorizedSelfAttentionBlock(nn.Module): + """Encoder with facctorized self attention block. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_heads: Number of heads. + temporal_dims: Number of temporal dimensions in the flattened input + attention_kernel_initializer: Initializer to use for attention layers. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + droplayer_p: Probability of dropping a layer. + attention_order: The order to do the attention. Choice of {time_space, + space_time}. + dtype: the dtype of the computation (default: float32). + """ + mlp_dim: int + num_heads: int + temporal_dims: int + attention_kernel_initializer: Initializer + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + droplayer_p: Optional[float] = None + attention_order: str = 'time_space' + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, deterministic: bool): + """Applies Encoder1DBlock module.""" + b, thw, d = inputs.shape + inputs = _reshape_to_time_space(inputs, self.temporal_dims) + self_attention = functools.partial( + nn.SelfAttention, + num_heads=self.num_heads, + kernel_init=self.attention_kernel_initializer, + broadcast_dropout=False, + dropout_rate=self.attention_dropout_rate, + dtype=self.dtype) + + if self.attention_order == 'time_space': + attention_axes = (1, 2) + elif self.attention_order == 'space_time': + attention_axes = (2, 1) + else: + raise ValueError(f'Invalid attention order {self.attention_order}.') + + def _run_attention_on_axis(inputs, axis, two_d_shape): + """Reshapes the input and run attention on the given axis.""" + inputs = model_utils.reshape_to_1d_factorized(inputs, axis=axis) + x = nn.LayerNorm( + dtype=self.dtype, name='LayerNorm_{}'.format(_AXIS_TO_NAME[axis]))( + inputs) + x = self_attention( + name='MultiHeadDotProductAttention_{}'.format(_AXIS_TO_NAME[axis]))( + x, deterministic=deterministic) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic) + x = x + inputs + return model_utils.reshape_to_2d_factorized( + x, axis=axis, two_d_shape=two_d_shape) + + x = inputs + two_d_shape = inputs.shape + for axis in attention_axes: + x = _run_attention_on_axis(x, axis, two_d_shape) + + # MLP block. + x = jnp.reshape(x, [b, thw, d]) + y = nn.LayerNorm(dtype=self.dtype, name='LayerNorm_mlp')(x) + y = attention_layers.MlpBlock( + mlp_dim=self.mlp_dim, + dtype=self.dtype, + dropout_rate=self.dropout_rate, + activation_fn=nn.gelu, + kernel_init=nn.initializers.xavier_uniform(), + bias_init=nn.initializers.normal(stddev=1e-6), + name='MlpBlock')( + y, deterministic=deterministic) + return x + y + + +class Encoder(nn.Module): + """Transformer Encoder. + + Attributes: + inputs: nd-array, Input data + temporal_dims: Number of temporal dimensions in the input. + mlp_dim: Dimension of the mlp on top of attention block. + num_layers: Number of layers. + num_heads: Number of attention heads. + attention_config: Has parameters for the type of attention. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_droplayer_rate: Probability of dropping a layer linearly + grows from 0 to the provided value. Our implementation of stochastic + depth follows timm library, which does per-example layer dropping and + uses independent dropping patterns for each skip-connection. + positional_embedding: The type of positional embedding to use. Supported + values are {learned_1d, sinusoidal_1d, sinusoidal_3d, none}. + normalise_output: If True, perform layernorm on the output. + """ + + temporal_dims: Optional[int] + mlp_dim: int + num_layers: int + num_heads: int + attention_config: ml_collections.ConfigDict = None + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_droplayer_rate: float = 0.0 + dtype: jnp.dtype = jnp.float32 + positional_embedding: str = 'learned_1d' + normalise_output: bool = True + + @nn.compact + def __call__(self, inputs: jnp.ndarray, *, train: bool): + """Applies Transformer model on the inputs.""" + assert inputs.ndim == 3 # (batch, len, emb) + dtype = jax.dtypes.canonicalize_dtype(self.dtype) + + if self.positional_embedding == 'learned_1d': + x = vit.AddPositionEmbs( + posemb_init=nn.initializers.normal(stddev=0.02), # from BERT. + name='posembed_input')(inputs) + elif self.positional_embedding == 'sinusoidal_1d': + x = attention_layers.Add1DPositionEmbedding( + posemb_init=None)(inputs) + elif self.positional_embedding == 'sinusoidal_3d': + batch, num_tokens, hidden_dim = inputs.shape + height = width = int(np.sqrt(num_tokens // self.temporal_dims)) + if height * width * self.temporal_dims != num_tokens: + raise ValueError('Input is assumed to be square for sinusoidal init.') + inputs_reshape = inputs.reshape([batch, self.temporal_dims, height, width, + hidden_dim]) + x = attention_layers.AddFixedSinCosPositionEmbedding()(inputs_reshape) + x = x.reshape([batch, num_tokens, hidden_dim]) + elif self.positional_embedding == 'none': + x = inputs + else: + raise ValueError( + f'Unknown positional embedding {self.positional_embedding}') + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not train) + + if self.attention_config is None or self.attention_config.type in [ + 'spacetime', 'factorized_encoder' + ]: + encoder_block = EncoderBlock + elif self.attention_config.type == 'factorized_self_attention_block': + encoder_block = functools.partial( + EncoderFactorizedSelfAttentionBlock, + attention_order=self.attention_config.attention_order, + attention_kernel_initializer=KERNEL_INITIALIZERS[ + self.attention_config.get('attention_kernel_init_method', + 'xavier')], + temporal_dims=self.temporal_dims) + elif self.attention_config.type == 'factorized_dot_product_attention': + b, thw, d = x.shape + x = _reshape_to_time_space(x, self.temporal_dims) # [b, t, hw, d] + encoder_block = functools.partial( + EncoderBlock, + attention_fn=functools.partial( + model_utils.factorized_dot_product_attention)) + else: + raise ValueError(f'Unknown attention type {self.attention_config.type}') + + # Input Encoder + for lyr in range(self.num_layers): + droplayer_p = ( + lyr / max(self.num_layers - 1, 1)) * self.stochastic_droplayer_rate + x = encoder_block( + mlp_dim=self.mlp_dim, + num_heads=self.num_heads, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + droplayer_p=droplayer_p, + name=f'encoderblock_{lyr}', + dtype=dtype)( + x, deterministic=not train) + + if self.attention_config.type == 'factorized_dot_product_attention': + # Reshape back to 3D: + x = jnp.reshape(x, [b, thw, d]) + + if self.normalise_output: + encoded = nn.LayerNorm(name='encoder_norm')(x) + else: + encoded = x + + return encoded + + +class ViViT(nn.Module): + """Vision Transformer model for Video. + + Attributes: + mlp_dim: Dimension of the mlp on top of attention block. + num_classes: Number of output classes. + num_heads: Number of self-attention heads. + num_layers: Number of layers. + patches: Configuration of the patches extracted in the stem of the model. + hidden_size: Size of the hidden state of the output of model's stem. + representation_size: Size of the representation layer in the model's head. + if None, we skip the extra projection + tanh activation at the end. + temporal_encoding_config: ConfigDict which defines the type of input + encoding when tokenising the video. + attention_config: ConfigDict which defines the type of spatio-temporal + attention applied in the model. + dropout_rate: Dropout rate. + attention_dropout_rate: Dropout for attention heads. + stochastic_droplayer_rate: Probability of dropping a layer. Linearly + increases from 0 to the provided value.. + classifier: type of the classifier layer. Options are 'gap', 'gmp', 'gsp', + 'token'. + return_prelogits: If true, return the final representation of the network + before the classification head. Useful when using features for a + downstream task. + return_preclassifier: If true, return the representation after the + transformer encoder. Useful if using this as the backbone stem as part + of a bigger architecture. + dtype: JAX data type for activations. + """ + + mlp_dim: int + num_layers: int + num_heads: int + num_classes: int + patches: ml_collections.ConfigDict + hidden_size: int + temporal_encoding_config: ml_collections.ConfigDict + attention_config: ml_collections.ConfigDict + representation_size: Optional[int] = None + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_droplayer_rate: float = 0. + classifier: str = 'gap' + return_prelogits: bool = False + return_preclassifier: bool = False + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, debug: bool = False): + + assert self.classifier in ['token', '0', 'gap', 'gmp', 'gsp'] + attention_type = self.attention_config.get('type', 'spacetime') + if attention_type in [ + 'factorized_transformer_block', 'factorized_self_attention_block', + 'factorized_dot_product_attention' + ]: + assert self.classifier not in ['token', '0'], ( + 'For factorized_transformer_block, factorized_self_attention_block' + 'and factorized_dot_product_attention, the token classifier is not' + 'implemented.') + + x, temporal_dims = temporal_encode( + x, self.temporal_encoding_config, self.patches, self.hidden_size) + + # If we want to add a class token, add it here. + if self.classifier in ['token']: + n, _, c = x.shape + cls = self.param('cls', nn.initializers.zeros, (1, 1, c), x.dtype) + cls = jnp.tile(cls, [n, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + + x = Encoder( + temporal_dims=temporal_dims, + mlp_dim=self.mlp_dim, + num_layers=self.num_layers, + num_heads=self.num_heads, + attention_config=self.attention_config, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_droplayer_rate=self.stochastic_droplayer_rate, + dtype=self.dtype, + name='Transformer')( + x, train=train) + + if self.return_preclassifier: + return x + + if self.classifier in ['token', '0']: + x = x[:, 0] + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=list(range(1, x.ndim - 1))) + + if self.representation_size is not None: + x = nn.Dense(self.representation_size, name='pre_logits')(x) + x = nn.tanh(x) + else: + x = nn_layers.IdentityLayer(name='pre_logits')(x) + + if self.return_prelogits: + return x + else: + x = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')(x) + return x + + +class SpaceTimeViViT(nn.Module): + """ViT model for Video with factorized space-time attention.""" + + spatial_mlp_dim: int + spatial_num_layers: int + spatial_num_heads: int + temporal_mlp_dim: int + temporal_num_layers: int + temporal_num_heads: int + num_classes: int + patches: ml_collections.ConfigDict + hidden_size: int + temporal_encoding_config: ml_collections.ConfigDict + attention_config: ml_collections.ConfigDict + representation_size: Optional[int] = None + dropout_rate: float = 0.1 + attention_dropout_rate: float = 0.1 + stochastic_droplayer_rate: float = 0. + classifier: str = 'gap' + return_prelogits: bool = False + dtype: jnp.dtype = jnp.float32 + + @nn.compact + def __call__(self, x: jnp.ndarray, *, train: bool, debug: bool = False): + + del debug + x, _ = temporal_encode( + x, self.temporal_encoding_config, self.patches, self.hidden_size, + return_1d=False) + bs, t, h, w, c = x.shape + x = x.reshape(bs, t, h * w, c) + + def vit_body(x, mlp_dim, num_layers, num_heads, encoder_name='Transformer'): + # If we want to add a class token, add it here. + if self.classifier in ['token']: + n, _, c = x.shape + cls = self.param(f'cls_{encoder_name}', nn.initializers.zeros, + (1, 1, c), x.dtype) + cls = jnp.tile(cls, [n, 1, 1]) + x = jnp.concatenate([cls, x], axis=1) + + x = Encoder( + temporal_dims=None, # This is unused for Factorised-Encoder + mlp_dim=mlp_dim, + num_layers=num_layers, + num_heads=num_heads, + attention_config=self.attention_config, + dropout_rate=self.dropout_rate, + attention_dropout_rate=self.attention_dropout_rate, + stochastic_droplayer_rate=self.stochastic_droplayer_rate, + dtype=self.dtype, + name=encoder_name)(x, train=train) + + if self.classifier in ['token', '0']: + x = x[:, 0] + elif self.classifier in ('gap', 'gmp', 'gsp'): + fn = {'gap': jnp.mean, 'gmp': jnp.max, 'gsp': jnp.sum}[self.classifier] + x = fn(x, axis=list(range(1, x.ndim - 1))) + return x + + # run attention across spacec, per frame + x = jax.vmap( + functools.partial( + vit_body, + mlp_dim=self.spatial_mlp_dim, + num_layers=self.spatial_num_layers, + num_heads=self.spatial_num_heads, + encoder_name='SpatialTransformer'), + in_axes=1, + out_axes=1, + axis_name='time')( + x) + assert x.ndim == 3 and x.shape[:2] == (bs, t) + + # run attention across time, over all frames + if not self.attention_config.get('spatial_only_baseline', False): + x = vit_body( + x, + mlp_dim=self.temporal_mlp_dim, + num_layers=self.temporal_num_layers, + num_heads=self.temporal_num_heads, + encoder_name='TemporalTransformer') + else: + # Do global average pooling instead, as method of combining temporal info. + x = jnp.mean(x, axis=list(range(1, x.ndim - 1))) + + if self.representation_size is not None: + x = nn.Dense(self.representation_size, name='pre_logits')(x) + x = nn.tanh(x) + else: + x = nn_layers.IdentityLayer(name='pre_logits')(x) + + if self.return_prelogits: + return x + else: + x = nn.Dense( + self.num_classes, + kernel_init=nn.initializers.zeros, + name='output_projection')(x) + return x + + +class ViViTClassificationModel(ClassificationModel): + """Video Transformer model for n-way classification.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + attention_type = self.config.model.attention_config.get( + 'type', 'spacetime') + if attention_type in [ + 'spacetime', 'factorized_transformer_block', + 'factorized_self_attention_block', 'factorized_dot_product_attention' + ]: + return ViViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + representation_size=self.config.model.representation_size, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + temporal_encoding_config=self.config.model.temporal_encoding_config, + attention_config=self.config.model.attention_config, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get( + 'attention_dropout_rate', 0.1), + stochastic_droplayer_rate=self.config.model.get( + 'stochastic_droplayer_rate', 0), + return_prelogits=self.config.model.get('return_prelogits', False), + return_preclassifier=self.config.model.get( + 'return_preclassifier', False), + dtype=model_dtype, + ) + elif attention_type == 'factorized_encoder': + # TODO(dehghani): Rewrite this as a type of attention in ViViT Encoder. + return SpaceTimeViViT( + num_classes=self.dataset_meta_data['num_classes'], + spatial_mlp_dim=self.config.model.spatial_transformer.mlp_dim, + spatial_num_layers=self.config.model.spatial_transformer.num_layers, + spatial_num_heads=self.config.model.spatial_transformer.num_heads, + temporal_mlp_dim=self.config.model.temporal_transformer.mlp_dim, + temporal_num_layers=self.config.model.temporal_transformer + .num_layers, + temporal_num_heads=self.config.model.temporal_transformer.num_heads, + representation_size=self.config.model.representation_size, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + temporal_encoding_config=self.config.model.temporal_encoding_config, + attention_config=self.config.model.attention_config, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get( + 'attention_dropout_rate', 0.1), + stochastic_droplayer_rate=self.config.model.get( + 'stochastic_droplayer_rate', 0), + return_prelogits=self.config.model.get('return_prelogits', False), + dtype=model_dtype, + ) + else: + raise ValueError(f'Attention type {attention_type} does not exist.') + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one + of the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + label, weights)``` + """ + del split # for all splits, we return the same metric functions + + metrics = ViViT_CLASSIFICATION_METRICS + if self.dataset_meta_data.get('num_classes', -1) <= 5: + metrics = ViViT_CLASSIFICATION_METRICS_BASIC + return functools.partial( + classification_model.classification_metrics_function, + target_is_onehot=self.dataset_meta_data.get('target_is_onehot', False), + metrics=metrics) + + def init_from_train_state(self, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_proj: bool = False) -> Any: + """Updates the train_state with data from restored_train_state.""" + attention_type = self.config.model.attention_config.get( + 'type', 'spacetime') + if attention_type in [ + 'spacetime', 'factorized_transformer_block', + 'factorized_self_attention_block', 'factorized_dot_product_attention' + ]: + vivit_transformer_key = 'Transformer' + elif attention_type == 'factorized_encoder': + vivit_transformer_key = 'SpatialTransformer' + else: + raise ValueError(f'Attention type {attention_type} does not exist.') + return model_utils.initialise_from_train_state( + self.config, + train_state, + restored_train_state, + restored_model_cfg, + restore_output_proj, + vivit_transformer_key=vivit_transformer_key) + + +class ViViTMultilabelClassificationModel(vit.ViTMultiLabelClassificationModel): + """Video Transformer model for multi-class classification.""" + + def build_flax_model(self) -> nn.Module: + model_dtype = getattr(jnp, self.config.get('model_dtype_str', 'float32')) + attention_type = self.config.model.attention_config.get( + 'type', 'spacetime') + if attention_type in [ + 'spacetime', 'factorized_transformer_block', + 'factorized_self_attention_block', 'factorized_dot_product_attention' + ]: + return ViViT( + num_classes=self.dataset_meta_data['num_classes'], + mlp_dim=self.config.model.mlp_dim, + num_layers=self.config.model.num_layers, + num_heads=self.config.model.num_heads, + representation_size=self.config.model.representation_size, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + temporal_encoding_config=self.config.model.temporal_encoding_config, + attention_config=self.config.model.attention_config, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get( + 'attention_dropout_rate', 0.1), + stochastic_droplayer_rate=self.config.model.get( + 'stochastic_droplayer_rate', 0), + return_prelogits=self.config.model.get('return_prelogits', False), + return_preclassifier=self.config.model.get( + 'return_preclassifier', False), + dtype=model_dtype, + ) + elif attention_type == 'factorized_encoder': + # TODO(dehghani): Rewrite this as a type of attention in ViViT Encoder. + return SpaceTimeViViT( + num_classes=self.dataset_meta_data['num_classes'], + spatial_mlp_dim=self.config.model.spatial_transformer.mlp_dim, + spatial_num_layers=self.config.model.spatial_transformer.num_layers, + spatial_num_heads=self.config.model.spatial_transformer.num_heads, + temporal_mlp_dim=self.config.model.temporal_transformer.mlp_dim, + temporal_num_layers=self.config.model.temporal_transformer + .num_layers, + temporal_num_heads=self.config.model.temporal_transformer.num_heads, + representation_size=self.config.model.representation_size, + patches=self.config.model.patches, + hidden_size=self.config.model.hidden_size, + temporal_encoding_config=self.config.model.temporal_encoding_config, + attention_config=self.config.model.attention_config, + classifier=self.config.model.classifier, + dropout_rate=self.config.model.get('dropout_rate', 0.1), + attention_dropout_rate=self.config.model.get( + 'attention_dropout_rate', 0.1), + stochastic_droplayer_rate=self.config.model.get( + 'stochastic_droplayer_rate', 0), + return_prelogits=self.config.model.get('return_prelogits', False), + dtype=model_dtype, + ) + else: + raise ValueError(f'Attention type {attention_type} does not exist.') + + def init_from_train_state(self, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_proj: bool = False) -> Any: + """Updates the train_state with data from restored_train_state.""" + attention_type = self.config.model.attention_config.get( + 'type', 'spacetime') + if attention_type in [ + 'spacetime', 'factorized_transformer_block', + 'factorized_self_attention_block', 'factorized_dot_product_attention' + ]: + vivit_transformer_key = 'Transformer' + elif attention_type == 'factorized_encoder': + vivit_transformer_key = 'SpatialTransformer' + else: + raise ValueError(f'Attention type {attention_type} does not exist.') + return model_utils.initialise_from_train_state( + self.config, + train_state, + restored_train_state, + restored_model_cfg, + restore_output_proj, + vivit_transformer_key=vivit_transformer_key) + + +class ViViTMultiHeadClassificationModel(ViViTClassificationModel): + """Video Transformer model for multiple n-way classification.""" + + def __init__(self, config, dataset_meta_data): + super().__init__(config, dataset_meta_data) + + assert self.config.dataset_configs.get('class_splits'), ( + 'dataset_configs.class_splits must be specified') + self.class_splits = np.cumsum(self.config.dataset_configs.class_splits) + if self.config.dataset_configs.get('split_names'): + self.split_names = self.config.dataset_configs.split_names + else: + self.split_names = [str(x + 1) for x in range(len(self.class_splits))] + + assert not config.get('multicrop_softmax_logits', False), ( + 'Returning softmaxed logits during multicrop evaluation is not ' + 'supported for this model.') + + def loss_function(self, + logits: jnp.ndarray, + batch: base_model.Batch, + model_params: Optional[jnp.ndarray] = None) -> float: + """Return softmax cross entropy loss with an L2 penalty on the weights.""" + weights = batch.get('batch_mask') + + if self.dataset_meta_data.get('target_is_onehot', False): + one_hot_targets = batch['label'] + else: + raise ValueError('Target labels should be one-hot.') + + if logits.shape[-1] != self.class_splits[-1]: + raise AssertionError('Logit dimension must be equal to number of classes') + + logit_splits = jnp.split(logits, self.class_splits, axis=-1)[:-1] + one_hot_target_splits = jnp.split( + one_hot_targets, self.class_splits, axis=-1)[:-1] + label_smoothing = self.config.get('label_smoothing') + + sof_ce_losses = [ + base_model_utils.weighted_softmax_cross_entropy( + logits, one_hot_targets, weights, label_smoothing) + for logits, one_hot_targets in zip(logit_splits, one_hot_target_splits) + ] + sof_ce_loss = jnp.mean(jnp.array(sof_ce_losses)) + + if self.config.get('l2_decay_factor') is None: + total_loss = sof_ce_loss + else: + l2_loss = base_model_utils.l2_regularization(model_params) + total_loss = sof_ce_loss + 0.5 * self.config.l2_decay_factor * l2_loss + return total_loss + + def get_metrics_fn(self, split: Optional[str] = None) -> base_model.MetricFn: + """Returns a callable metric function for the model. + + Args: + split: The split for which we calculate the metrics. It should be one + of the ['train', 'validation', 'test']. + Returns: A metric function with the following API: ```metrics_fn(logits, + label, weights)``` + """ + del split # for all splits, we return the same metric functions + + num_classes_in_each_head = ( + self.dataset_meta_data.get('class_splits', [-1])) + minimal_num_classes = min(num_classes_in_each_head) + def classification_metrics_function(logits, batch, metrics, class_splits, + split_names): + + one_hot_targets = batch['label'] + weights = batch.get('batch_mask') # batch_mask might not be defined + + logit_splits = jnp.split(logits, class_splits, axis=-1)[:-1] + one_hot_target_splits = jnp.split( + one_hot_targets, class_splits, axis=-1)[:-1] + + evaluated_metrics = {} + total_loss = [0.0, 0.0] + for logits_i, one_hot_targets_i, name in zip(logit_splits, + one_hot_target_splits, + split_names): + for key, val in metrics.items(): + evaluated_metrics[ + f'{name}_{key}'] = base_model_utils.psum_metric_normalizer( + (val[0](logits_i, one_hot_targets_i, + weights), val[1](logits_i, one_hot_targets_i, + weights))) + if key == 'loss': + total_loss[0] += evaluated_metrics[f'{name}_{key}'][0] + total_loss[1] += evaluated_metrics[f'{name}_{key}'][1] + evaluated_metrics['total_loss'] = total_loss + + if len(class_splits) == 2: + pairwise_acc = base_model_utils.psum_metric_normalizer( + (model_utils.joint_accuracy(logits, one_hot_targets, class_splits, + weights), + base_model_utils.num_examples(logits, one_hot_targets, weights))) + eval_name = f'{split_names[0]}-{split_names[1]}' + evaluated_metrics[f'{eval_name}_accuracy'] = pairwise_acc + if minimal_num_classes > 5: + pairwise_top_five = base_model_utils.psum_metric_normalizer( + (model_utils.joint_top_k( + logits, one_hot_targets, class_splits, k=5, weights=weights), + base_model_utils.num_examples(logits, one_hot_targets, weights))) + evaluated_metrics[f'{eval_name}_accuracy_top_5'] = pairwise_top_five + + return evaluated_metrics + metrics = ViViT_CLASSIFICATION_METRICS + if minimal_num_classes <= 5: + metrics = ViViT_CLASSIFICATION_METRICS_BASIC + return functools.partial( + classification_metrics_function, + metrics=metrics, + class_splits=self.class_splits, + split_names=self.split_names) diff --git a/scenic/projects/vivit/model_utils.py b/scenic/projects/vivit/model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..c39e41e1f484c1609011e5bd0912a3491724baa7 --- /dev/null +++ b/scenic/projects/vivit/model_utils.py @@ -0,0 +1,694 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Model utils for ViViT.""" + +from typing import Any, Optional, Tuple + +from absl import logging +import flax +from flax.linen import linear +from flax.training import common_utils +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +from scenic.common_lib import debug_utils +from scenic.model_lib.base_models import model_utils as base_model_utils +import scipy + + +def reshape_to_1d_factorized(x: jnp.ndarray, axis: int): + """Converts 2d inputs to 1d for axial attention.""" + + assert x.ndim == 4, ('The input dimention should be ' + '[batch_size, height, width, channel]') + batch_size, height, width, channel = x.shape + if axis == 1: + return x.transpose((0, 2, 1, 3)).reshape(batch_size * width, height, + channel) + elif axis == 2: + return x.reshape(batch_size * height, width, channel) + + +def reshape_to_2d_factorized(x: jnp.ndarray, axis: int, + two_d_shape: Tuple[int, int, int, int]): + """Converts 1d inputs back to 2d after axial attention.""" + assert x.ndim == 3, ('The input dimention should be ' + '[batch_size, height*width, channel]') + batch_size, height, width, channel = two_d_shape + if axis == 1: + assert x.shape[0] == batch_size * width + return x.reshape((batch_size, width, height, channel)).transpose( + (0, 2, 1, 3)) + elif axis == 2: + assert x.shape[0] == batch_size * height + return x.reshape(two_d_shape) + + +def factorized_dot_product_attention( + query: jnp.ndarray, + key: jnp.ndarray, + value: jnp.ndarray, + bias: Optional[jnp.ndarray] = None, + broadcast_dropout: bool = True, + dropout_rng: Optional[Any] = None, + dropout_rate: float = 0.1, + deterministic: bool = False, + dtype: jnp.dtype = jnp.float32, + precision: Optional[jax.lax.Precision] = None, +) -> jnp.ndarray: + """Applies head-factorized qkv dot-product attention. + + This factorizes the dot-product attention by assigning different + heads to run attention on different axes. + + + Args: + query: Queries for calculating attention with shape of `[batch..., + num_heads, qk_depth_per_head]`. + key: Keys for calculating attention with shape of `[batch..., num_heads, + qk_depth_per_head]`. + value: Values to be used in attention with shape of `[batch..., num_heads, + v_depth_per_head]`. + bias: Bias for the attention weights. This should be + broadcastable to the shape: `[batch...]`. This can be used for + incorporating causal masks, padding masks, proximity bias, etc. Default + is None, which means no bias is applied on attention matrix. + broadcast_dropout: Use a broadcasted dropout along batch dims. + dropout_rng: JAX PRNGKey to be used for dropout. + dropout_rate: Dropout rate. + deterministic: Deterministic or not (to apply dropout). + dtype: The dtype of the computation (default: float32). + precision: Numerical precision of the computation see `jax.lax.Precision` + for details. + + Returns: + Output of shape `[bs, ..., num_heads, features]`. + """ + if query.shape != key.shape: + raise ValueError('Axial dot product attention only supports ' + 'query and key with the same shape.') + + if bias is not None: + raise ValueError('Bias is not supported in ' + 'factorized_dot_product_attention.') + + # Normalize the query with the square of its depth. + query = query / jnp.sqrt(query.shape[-1]).astype(dtype) + # Shape of query, key, and value: [bs, t, hw, h, c]. + + prefix_str = 'abcdefghijk' + # Split heads for each axial attention dimension. + num_attn_dimensions = query.ndim - 3 # all dims but bs, heads, and channel. + if query.shape[-2] % num_attn_dimensions != 0: + raise ValueError(f'In head-axial dot-product attention, number of ' + f'heads ({query.shape[-2]}) should be divisible by number ' + f'of attention dimensions ({num_attn_dimensions})!') + + queries = jnp.split(query, num_attn_dimensions, axis=-2) + keys = jnp.split(key, num_attn_dimensions, axis=-2) + values = jnp.split(value, num_attn_dimensions, axis=-2) + # queries, keys, and values are each a list with two arrays (sinec + # we have two dims, t and hw) that are made by spliting heads: + # [(bs, t, hw, h//2, c), (bs, t, hw, h//2, c)]. + + outputs = [] + for i, (query, key, value) in enumerate(zip(queries, keys, values)): + # Shape of query, key, and value: [bs, t, hw, h//2, c]. + axis = i + 1 # to account for the batch dim + batch_dims = prefix_str[:axis] + einsum_str = f'{batch_dims}x...z,{batch_dims}y...z->{batch_dims}x...y' + # For axis=1 einsum_str (q,k->a): ax...z,ay...z->ax...y + # For axis=2 einsum_str (q,k->a): abx...z,aby...z->abx...y + attn_logits = jnp.einsum(einsum_str, query, key, precision=precision) + # For axis=1 (attention over t): attn_logits.shape: [bs, t, hw, h//2, t] + # For axis=2 (attention over hw): attn_logits.shape: [bs, t, hw, h//2, hw] + attn_weights = jax.nn.softmax(attn_logits, axis=-1) + + # Apply dropout. + if not deterministic and dropout_rate > 0.: + if dropout_rng is None: + raise ValueError('Did not provide `rng` to dot_product_attention().') + keep_prob = 1.0 - dropout_rate + if broadcast_dropout: + # Dropout is broadcast across the batch+head+non-attention dimension. + dropout_shape = list(attn_weights.shape) + dropout_shape[0] = 1 # Broadcast batch. + dropout_shape[-2] = 1 # Broadcast heads. + keep = jax.random.bernoulli(dropout_rng, keep_prob, dropout_shape) + else: + keep = jax.random.bernoulli(dropout_rng, keep_prob, attn_weights.shape) + multiplier = ( + keep.astype(attn_weights.dtype) / + jnp.asarray(keep_prob, dtype=attn_weights.dtype)) + attn_weights *= multiplier + + einsum_str = f'{batch_dims}x...y,{batch_dims}y...z->{batch_dims}x...z' + # For axis=1 einsum_str (a,v->o): ax...y,ay...z->ax...z + # For axis=2 einsum_str (a,v->o): abx...y,aby...z->abx...z + outputs.append( + jnp.einsum(einsum_str, attn_weights, value, precision=precision)) + + # Output is list with two arrays [(bs, t, hw, h//2, c), (bs, t, hw, h//2, c)] + # concatinate the heads. + return jnp.concatenate(outputs, axis=-2) + + +def central_frame_initializer(): + """Initialisation function for 3D convolutional kernels. + + The filter is initialised such that it only depends on the input at the + central (w.r.t the time dimension) frame. + + Returns: + init: Initialisation function for Flax + """ + + def init(key, shape, dtype=jnp.float32): + assert len(shape) == 5, ('Should be initialising 5-d kernels' + '(t, h, w, c_in, c_out') + init_kernel = linear.default_kernel_init(key, shape, dtype) + central_time_index = shape[0] // 2 + init_kernel = init_kernel.at[:, :, :central_time_index, :, :].set(0.0) + init_kernel = init_kernel.at[:, :, central_time_index + 1:, :, :].set(0.0) + + return init_kernel + + return init + + +def average_frame_initializer(): + """Initialisation function for 3D convolutional kernels. + + The filter is initialised such that it applies the same weights on each + frame of the input. + This is similar to "filter inflation" in + "Joao Carreira, and Andrew Zisserman. + Quo vadis, action recognition? a new model and the kinetics dataset". + However, "filter inflation" uses the filter weights from a pretrained 2D CNN, + and replicates them over all time dimensions. + + Returns: + init: Initialisation function for Flax + """ + + def init(key, shape, dtype=jnp.float32): + logging.info('Initialising shape %s', shape) + assert len(shape) == 5, ('Should be initialising 5-d kernels' + '(t, h, w, c_in, c_out') + assert shape[0] > 1, 'Temporal dimension should be > 1' + + # Tiling the temporal dimension of a larger kernel ensures that the + # normalisation is handled by default_kernel_init(). + init_kernel = linear.default_kernel_init(key, shape, dtype) + init_kernel = jnp.tile(init_kernel[0:1, :, :, :, :], + [init_kernel.shape[0], 1, 1, 1, 1]) + + return init_kernel + + return init + + +def interpolate_positional_embeddings(restored_posemb_grid, n_tokens): + """Interpolate positional embeddings from one size to another. + + Args: + restored_posemb_grid: Positional embeddings from restored model. Shape is + [n_restored_tokens, d]. It is assumed that the restored model used square + image patches. + n_tokens: Number of tokens in the target model. It is assumed that the input + patches and image of the target model are square. + + Returns: + positional embedding resized to match n_tokens. Shape is [1, n_tokens, d] + """ + + restored_gs = int(np.sqrt(len(restored_posemb_grid))) + gs = int(np.sqrt(n_tokens)) + logging.info('Resizing grid-size from %s to %s.', restored_gs, gs) + restored_posemb_grid = restored_posemb_grid.reshape(restored_gs, restored_gs, + -1) + zoom = (gs / restored_gs, gs / restored_gs, 1) + restored_posemb_grid = scipy.ndimage.zoom(restored_posemb_grid, zoom, order=1) + restored_posemb_grid = restored_posemb_grid.reshape(1, gs * gs, -1) + return restored_posemb_grid + + +def tile_positional_embeddings(restored_posemb_grid, n_tokens): + """Tile positional embeddings. + + Args: + restored_posemb_grid: Positional embeddings from restored model. Shape is + [n_restored_tokens, d] + n_tokens: Number of tokens in the target model. + + Returns: + positional embedding tiled to match n_tokens. Shape is [1, n_tokens, d] + """ + + num_repeats = int(n_tokens / len(restored_posemb_grid)) + logging.info('Tiling loaded positional embeddings (%d), %d times', + len(restored_posemb_grid), num_repeats) + restored_posemb_grid = np.concatenate( + [restored_posemb_grid] * num_repeats, axis=0) + restored_posemb_grid = np.expand_dims(restored_posemb_grid, axis=0) + + return restored_posemb_grid + + +def interpolate_1d_positional_embeddings(restored_posemb, n_tokens): + """Interpolate one-dimensional positional embeddings. + + Used when the number of tokens at the input of the encoder is different + between the pretrained and target models. This function is used for the + temporal encoder in the Factorised Encoder model which has 1d positional + embeddings. + + Args: + restored_posemb: Positional embeddings from restored model. Shape is + [n_restored_tokens, d]. + n_tokens: Number of tokens in the target model. + + Returns: + positional embedding tiled to match n_tokens. Shape is [1, n_tokens, d]. + """ + + zoom = (n_tokens / restored_posemb.shape[0], 1) + logging.info('Interpolating embeddings by a factor of %s', zoom) + restored_posemb = scipy.ndimage.zoom(restored_posemb, zoom, order=1) + restored_posemb = np.expand_dims(restored_posemb, axis=0) + + return restored_posemb + + +def initialise_from_train_state( + config, + train_state: Any, + restored_train_state: Any, + restored_model_cfg: ml_collections.ConfigDict, + restore_output_proj: bool, + vivit_transformer_key: str = 'Transformer', + log_initialised_param_shapes: bool = True) -> Any: + """Updates the train_state with data from restored_train_state. + + This function is written to be used for 'fine-tuning' experiments. Here, we + do some surgery to support larger resolutions (longer sequence length) in + the transformer block, with respect to the learned pos-embeddings. + + Args: + config: Configurations for the model being updated. + train_state: A raw TrainState for the model. + restored_train_state: A TrainState that is loaded with parameters/state of a + pretrained model. + restored_model_cfg: Configuration of the model from which the + restored_train_state come from. Usually used for some asserts. + restore_output_proj: If true, load the final output projection. Set + to False if finetuning to a new dataset. + vivit_transformer_key: The key used for storing the subtree in the + parameters that keeps Transformer weights, that are supposed to be + initialized from the given pre-trained model. + log_initialised_param_shapes: If true, print tabular summary of all the + variables in the model once they have been initialised. + + Returns: + Updated train_state. + """ + if hasattr(train_state, 'optimizer'): + # Inspect and compare the parameters of the model with the init-model. + params = flax.core.unfreeze(train_state.optimizer.target) + train_state_keys = train_state.optimizer.target.keys() + else: + params = flax.core.unfreeze(train_state.params) + train_state_keys = train_state.params.keys() + if hasattr(restored_train_state, 'optimizer'): + if config.init_from.get('checkpoint_format', 'scenic') == 'big_vision': + restored_params = restored_train_state.optimizer['target'] + else: + restored_params = restored_train_state.optimizer.target + restored_params = flax.core.unfreeze(restored_params) + else: + restored_params = flax.core.unfreeze(restored_train_state.params) + + # Start moving parameters, one-by-one and apply changes if needed. + for m_key, m_params in restored_params.items(): + if m_key == 'output_projection': + if restore_output_proj: + params[m_key] = m_params + else: + pass + + elif m_key == 'pre_logits': + if config.model.representation_size is None: + # We don't have representation_size in the new model, so let's ignore + # if from the pretained model, in case it has it. + # Note, removing the key from the dictionary is necessary to prevent + # obscure errors from the Flax optimizer. + params.pop(m_key, None) + else: + assert restored_model_cfg.model.representation_size + params[m_key] = m_params + + elif m_key in {'Transformer', 'SpatialTransformer', 'TemporalTransformer'}: + key_to_load = vivit_transformer_key + is_temporal = False + if m_key == 'TemporalTransformer': + key_to_load = m_key + is_temporal = True + for tm_key, tm_params in m_params.items(): + if tm_key == 'posembed_input': # Might need resolution change. + init_posemb(params[key_to_load], m_params, config, restored_model_cfg, + is_temporal=is_temporal) + elif 'encoderblock' in tm_key: + init_encoderblock(params[key_to_load], m_params, tm_key, + config) + else: # Other parameters of the Transformer encoder. + params[key_to_load][tm_key] = tm_params + + elif m_key == 'embedding': + init_embedding(params, m_params, config) + else: + if m_key in train_state_keys: + params[m_key] = m_params + else: + logging.info('Skipping %s. In restored model but not in target', m_key) + + if log_initialised_param_shapes: + logging.info('Parameter summary after initialising from train state') + debug_utils.log_param_shapes(params) + if hasattr(train_state, 'optimizer'): + return train_state.replace( + optimizer=train_state.optimizer.replace( + target=flax.core.freeze(params))) + else: + return train_state.replace(params=flax.core.freeze(params)) + + +def init_posemb(to_params, + from_params, + config, + restored_model_cfg, + is_temporal, + posemb_name='posembed_input', + restored_posemb_name='posembed_input'): + """Initialize the positional embeddings.""" + if config.init_from.get('restore_positional_embedding', True): + posemb = to_params[posemb_name]['pos_embedding'] + restored_posemb = from_params[restored_posemb_name]['pos_embedding'] + if restored_posemb.shape != posemb.shape: + # Rescale the grid of pos, embeddings. + # Default parameter shape is (1, N, 768) + logging.info('Adapting positional embeddings from %s to %s', + restored_posemb.shape, posemb.shape) + ntok = posemb.shape[1] + if restored_model_cfg.model.classifier == 'token': + # The first token is the CLS token. + restored_posemb_grid = restored_posemb[0, 1:] + if config.model.classifier == 'token': + # CLS token in restored model and in target. + cls_tok = restored_posemb[:, :1] + ntok -= 1 + else: + # CLS token in restored model, but not target. + cls_tok = restored_posemb[:, :0] + else: + restored_posemb_grid = restored_posemb[0] + if config.model.classifier == 'token': + # CLS token in target, but not restored model. + cls_tok = posemb[:, :1] + ntok -= 1 + else: + # CLS token not in target or restored model. + cls_tok = restored_posemb[:, :0] + if ((config.model.classifier == 'token') != + (restored_model_cfg.model.classifier == 'token')): + logging.warning('Only one of target and restored model uses a ' + 'classification token.') + + if len(restored_posemb_grid) != ntok: # We need a resolution change. + if is_temporal: + restored_posemb_grid = interpolate_1d_positional_embeddings( + restored_posemb_grid, ntok) + + elif config.init_from.positional_embed_size_change == 'resize': + restored_posemb_grid = interpolate_positional_embeddings( + restored_posemb_grid, ntok) + + elif config.init_from.positional_embed_size_change == 'tile': + restored_posemb_grid = tile_positional_embeddings( + restored_posemb_grid, ntok) + + elif config.init_from.positional_embed_size_change == 'resize_tile': + temp_encoding = config.model.temporal_encoding_config + if temp_encoding.method == 'temporal_sampling': + tokens_per_frame = int(ntok / temp_encoding.n_sampled_frames) + elif temp_encoding.method == '3d_conv': + n_frames = ( + config.dataset_configs.num_frames // + config.model.patches.size[2]) + tokens_per_frame = ntok // n_frames + else: + raise AssertionError( + f'Unknown temporal encoding {temp_encoding.method}') + restored_posemb_grid = interpolate_positional_embeddings( + restored_posemb_grid, tokens_per_frame) + restored_posemb_grid = restored_posemb_grid[0] + restored_posemb_grid = tile_positional_embeddings( + restored_posemb_grid, ntok) + + else: + raise AssertionError( + 'Unknown positional embedding size changing method') + else: # Sequence lengths are the same. + # Adds batch dimension. + restored_posemb_grid = restored_posemb_grid[None, ...] + + # Attach the CLS token again. + if config.model.classifier == 'token': + restored_posemb = jnp.array( + np.concatenate([cls_tok, restored_posemb_grid], axis=1)) + else: + restored_posemb = restored_posemb_grid + + to_params[posemb_name]['pos_embedding'] = restored_posemb + else: + logging.info('Not restoring positional encodings from pretrained model') + + +def init_encoderblock(to_params, from_params, tm_key, config): + """Initialize encoder_block_parameters.""" + # Explicitly enumerate over the keys in the encoder-block. Don't just + # assign the dictionary. It is possible for the target model to + # contain keys that are not in the restored model. + attention_type = config.model.attention_config.type + for enc_key in from_params[tm_key].keys(): + if attention_type in [ + 'spacetime', 'factorized_encoder', 'factorized_dot_product_attention' + ]: + assert enc_key in to_params[tm_key], '%s not in to_params[%s]' % (enc_key, + tm_key) + to_params[tm_key][enc_key] = from_params[tm_key][enc_key] + + elif attention_type == 'factorized_transformer_block': + if config.init_from.get('init_spatial_transformer', True): + to_params[tm_key]['encoderblock_space'] = from_params + if config.init_from.get('init_temporal_transformer', True): + to_params[tm_key]['encoderblock_time'] = from_params + + elif attention_type == 'factorized_self_attention_block': + if enc_key in to_params[tm_key]: + # We have an exact match. This would happen when loading weights from + # another factorised encoder model. + to_params[tm_key][enc_key] = from_params[tm_key][enc_key] + logging.info('%s: Initialising %s directly from restored model', tm_key, + enc_key) + elif enc_key == 'MultiHeadDotProductAttention_0': + if config.init_from.get('init_spatial_transformer', True): + logging.info( + '%s: Initialising spatial transformer from ' + 'pretrained weights', tm_key) + to_params[tm_key]['MultiHeadDotProductAttention_space'] = from_params[ + tm_key][enc_key].copy() + if config.init_from.get('init_temporal_transformer', True): + logging.info( + '%s: Initialising temporal transformer from ' + 'pretrained weights', tm_key) + to_params[tm_key]['MultiHeadDotProductAttention_time'] = from_params[ + tm_key][enc_key].copy() + elif enc_key == 'LayerNorm_0': + to_params[tm_key]['LayerNorm_space'] = from_params[tm_key][enc_key] + if config.init_from.get('init_temporal_layer_norm', False): + logging.info( + '%s: %s Initialising temporal layer norm from ' + 'restored model', tm_key, enc_key) + # The following part could be made more generic. + elif enc_key == 'LayerNorm_1': + to_params[tm_key]['LayerNorm_mlp'] = from_params[tm_key][enc_key] + elif enc_key == 'MlpBlock_0': + to_params[tm_key]['MlpBlock'] = from_params[tm_key][enc_key] + else: + logging.info( + 'Key "%s" in restored model\'s encoder block not in ' + 'target model', enc_key) + else: + raise ValueError(f'Unknown attention type {attention_type}') + + +def init_embedding(to_params, from_params, config): + """Initialize input embedding.""" + if config.init_from.get('restore_input_embedding', True): + input_kernel = to_params['embedding']['kernel'] + restored_kernel = from_params['kernel'] + restored_bias = from_params['bias'] + + if input_kernel.shape != restored_kernel.shape: + # Kernel dimensions are [t, h, w, c_in, c_out]. + assert config.model.temporal_encoding_config.method == '3d_conv', ( + 'Input kernel dimensions should only differ if 3d_conv is the' + 'temporal encoding method') + assert input_kernel.shape[1:] == restored_kernel.shape, ( + 'All filter dimensions besides the temporal dimension should be' + 'equal. {} vs {}'.format(input_kernel.shape, restored_kernel.shape)) + + kernel_init_method = ( + config.model.temporal_encoding_config.kernel_init_method + ) + if kernel_init_method == 'average_frame_initializer': + # This corresponds to "filter inflation" in + # J Carreira and A Zisserman. Quo vadis, action recognition? + # A new model and the kinetics dataset. CVPR 2017". + logging.info('Initializing input kernel with filter inflation.') + t = input_kernel.shape[0] + restored_kernel = np.expand_dims(restored_kernel, axis=0) + restored_kernel = np.tile(restored_kernel, [t, 1, 1, 1, 1]) / t + elif kernel_init_method == 'average_arp_frame_initializer': + # This corresponds to a combination of filter inflation and + # the approximate rank pooling described in + # H Bilen et al. Action Recognition with Dynamic Image Networks. + # PAMI 2017. + logging.info('Initialzing input kernel with ARP inflation') + t = input_kernel.shape[0] + restored_kernel = np.expand_dims(restored_kernel, axis=0) + restored_kernel = np.tile(restored_kernel, [t, 1, 1, 1, 1]) + + def average_arp(length): + # Implements Equation 3 of Bilen et al. PAMI 2017. + array = np.arange(1, length + 1) + + harmonic = np.zeros((length + 1)) + harmonic[1:] = np.cumsum(1.0 / array) + + array = 2 * (length - array + 1) - (length + 1) * ( + harmonic[-1] - harmonic[:-1]) + return array + + normalizer = average_arp(t) / t + normalizer = np.reshape(normalizer, [t, 1, 1, 1, 1]) + restored_kernel = restored_kernel * normalizer + elif kernel_init_method == 'central_frame_initializer': + logging.info('Initializing input kernel to select centre frame.') + central_time_index = input_kernel.shape[0] // 2 + temp = np.zeros(input_kernel.shape) + temp[central_time_index] = restored_kernel.copy() + restored_kernel = temp + else: + raise AssertionError( + 'Unknown input kernel initialization {}'.format(kernel_init_method)) + + to_params['embedding']['kernel'] = restored_kernel + to_params['embedding']['bias'] = restored_bias + else: + logging.info('Not restoring input embedding parameters') + + +def get_joint_logits_labels(logits, one_hot_targets, class_splits): + """Returns joint pairs of logits and labels. + + Args: + logits: Tensor of shape [n, c] + one_hot_targets: Tensor of shape [n, c] + class_splits: List of length 2. The two elements, c1 and c. Used in + jnp.split. Size of the two splits is therefore c1 and (c - c1) + + Returns: + pairwise_logits: Tensor of shape [n, c1 * c2] + pairwise_labels: One-hot tensor of shape [n, c1 * c2] + """ + + assert len(class_splits) == 2, 'Class_splits should have length 2' + assert logits.ndim == 2, 'Logits should have dimension of 2' + assert one_hot_targets.ndim == 2, 'One hot target should have dimension of 2' + + n = logits.shape[0] + + logits_a, logits_b = jnp.split(logits, class_splits, axis=-1)[:-1] + one_hot_a, one_hot_b = jnp.split(one_hot_targets, class_splits, axis=-1)[:-1] + n_class_a, n_class_b = logits_a.shape[1], logits_b.shape[1] + + logits_a = jax.nn.softmax(logits_a, axis=-1) + logits_b = jax.nn.softmax(logits_b, axis=-1) + + pairwise_logits = logits_a[:, :, jnp.newaxis] * logits_b[:, jnp.newaxis, :] + pairwise_logits = jnp.reshape(pairwise_logits, [n, n_class_a * n_class_b]) + labels_a = jnp.argmax(one_hot_a, axis=-1) + labels_b = jnp.argmax(one_hot_b, axis=-1) + + pairwise_labels = labels_a * n_class_b + labels_b + pairwise_labels = common_utils.onehot(pairwise_labels, n_class_a * n_class_b) + + return pairwise_logits, pairwise_labels + + +def joint_accuracy(logits, one_hot_target, class_splits, weights=None): + """Compute accuracy where both targets must be predicted correctly.""" + + pairwise_logits, pairwise_labels = get_joint_logits_labels( + logits, one_hot_target, class_splits) + return base_model_utils.weighted_correctly_classified(pairwise_logits, + pairwise_labels, + weights) + + +def joint_top_k(logits, one_hot_target, class_splits, k=5, weights=None): + """Compute top-k where both targets must be predicted correctly.""" + + pairwise_logits, pairwise_labels = get_joint_logits_labels( + logits, one_hot_target, class_splits) + return base_model_utils.weighted_topk_correctly_classified( + pairwise_logits, pairwise_labels, weights, k) + + +def adapt_old_configs( + hparams: ml_collections.ConfigDict) -> ml_collections.ConfigDict: + """Updates old configs with new namings.""" + with hparams.unlocked(): + # Make sure attention_config exists. + attention_config = hparams.model.get('attention_config', None) + if attention_config is None: + hparams.model.attention_config = ml_collections.ConfigDict() + att_type = hparams.model.attention_config.get('type', None) + + # Default ViViT. + if att_type is None: + hparams.model.attention_config.type = 'spacetime' + + # Handle V3. + elif att_type == 'factorised_space_time': + hparams.model.attention_config.type = 'factorized_self_attention_block' + + # Handle V1. + if hparams.get('model_variant', 'vivit') == 'space_time_vivit': + hparams.model.attention_config.type = 'factorized_encoder' + + return hparams diff --git a/scenic/projects/vivit/requirements.txt b/scenic/projects/vivit/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..a8b80d2eae33eb559e6dcbff243d5f4667c34756 --- /dev/null +++ b/scenic/projects/vivit/requirements.txt @@ -0,0 +1,2 @@ +dmvr @ git+https://github.com/deepmind/dmvr.git +seaborn>=0.11.2 diff --git a/scenic/projects/vivit/tests/__init__.py b/scenic/projects/vivit/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/projects/vivit/tests/test_vivit_metrics.py b/scenic/projects/vivit/tests/test_vivit_metrics.py new file mode 100644 index 0000000000000000000000000000000000000000..59ab93fc43df2de97193aaa366fef111ace83cd6 --- /dev/null +++ b/scenic/projects/vivit/tests/test_vivit_metrics.py @@ -0,0 +1,101 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for metrics specific to ViViT (ie pairwise accuracy).""" + +from absl.testing import absltest +import jax.numpy as jnp +import numpy as np +from scenic.projects.vivit import evaluation_lib +from scenic.projects.vivit import model_utils + + +class EvaluationMetricsTester(absltest.TestCase): + """Tests evaluation metrics specific to ViViT model.""" + + def test_joint_accuracy(self): + """Test pairwise accuracy calculation.""" + + c_1 = 3 + c_2 = 2 + class_splits = jnp.array([c_1, c_1 + c_2]) + logits = jnp.array([ + [1, 2, 3, 4, 5], + [1, 2, 3, 4, 5], + [1, 2, 3, 4, 5], + [1, 2, 3, 4, 5], + ]) + one_hot_labels = jnp.array([[0, 1, 0, 1, 0], [0, 0, 1, 1, 0], + [0, 1, 0, 0, 1], [0, 0, 1, 0, 1]]) + + accuracy = model_utils.joint_accuracy(logits, one_hot_labels, class_splits) + expected_accuracy = jnp.array([0, 0, 0, 1]).astype(jnp.int32) + + np.testing.assert_almost_equal( + np.array(expected_accuracy), np.array(accuracy)) + + +class ConfusionMatrixTester(absltest.TestCase): + """Tests confusion matrix metrics.""" + + def test_confusion_matrix_metrics(self): + """Test calculation of metrics given a confusion matrix.""" + + confusion_matrices = [ + np.array([[[2, 0, 1], [1, 3, 0], [1, 2, 4]]]), + np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]), + ] + metrics = evaluation_lib.compute_confusion_matrix_metrics( + confusion_matrices, return_per_class_metrics=True) + + expected_keys = {'recall/mean', 'precision/mean', 'jaccard/mean', + 'recall/0', 'recall/1', 'recall/2', + 'precision/0', 'precision/1', 'precision/2', + 'jaccard/0', 'jaccard/1', 'jaccard/2'} + self.assertSameElements(expected_keys, metrics.keys()) + self.assertAlmostEqual(metrics['recall/mean'], np.mean([3/9, 8/19, 13/31])) + self.assertAlmostEqual(metrics['recall/0'], 3 / 9) + self.assertAlmostEqual(metrics['recall/1'], 8 / 19) + self.assertAlmostEqual(metrics['recall/2'], 13 / 31) + self.assertAlmostEqual(metrics['precision/mean'], + np.mean([3 / 16, 8 / 20, 13 / 23])) + self.assertAlmostEqual(metrics['precision/0'], 3 / 16) + self.assertAlmostEqual(metrics['precision/1'], 8 / 20) + self.assertAlmostEqual(metrics['precision/2'], 13 / 23) + self.assertAlmostEqual(metrics['jaccard/mean'], + np.mean([3 / 22, 8 / 31, 13 / 41])) + self.assertAlmostEqual(metrics['jaccard/0'], 3 / 22) + self.assertAlmostEqual(metrics['jaccard/1'], 8 / 31) + self.assertAlmostEqual(metrics['jaccard/2'], 13 / 41) + + def test_with_nans(self): + """Test metric calculation where one of the metrics is NaN.""" + + confusion_matrices = [np.array([[[0, 1], [0, 2]]])] + metrics = evaluation_lib.compute_confusion_matrix_metrics( + confusion_matrices, return_per_class_metrics=True) + + self.assertAlmostEqual(metrics['recall/mean'], np.mean([0, 1])) + self.assertAlmostEqual(metrics['recall/0'], 0) + self.assertAlmostEqual(metrics['recall/1'], 1) + self.assertAlmostEqual(metrics['precision/mean'], + 2 / 3) # Should not not average over NaN metrics + self.assertAlmostEqual(metrics['precision/0'], 0) # Actually it's NaN + self.assertAlmostEqual(metrics['precision/1'], 2 / 3) + self.assertAlmostEqual(metrics['jaccard/mean'], np.mean([0, 2 / 3])) + self.assertAlmostEqual(metrics['jaccard/0'], 0) + self.assertAlmostEqual(metrics['jaccard/1'], 2 / 3) + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/vivit/tests/test_vivit_trainer.py b/scenic/projects/vivit/tests/test_vivit_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..0dcf67ba4a5af33b15091d8c1584ad25457aacda --- /dev/null +++ b/scenic/projects/vivit/tests/test_vivit_trainer.py @@ -0,0 +1,264 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for the ViViT classification train script.""" + +import functools +import shutil +import os + +from absl.testing import absltest +from absl.testing import parameterized +import flax +from flax import jax_utils +import flax.linen as nn +import jax.numpy as jnp +import jax.random +import ml_collections +import numpy as np +from scenic.model_lib.base_models import classification_model +from scenic.model_lib.base_models import multilabel_classification_model +from scenic.projects.vivit import evaluation_lib +from scenic.projects.vivit import train_utils as vivit_train_utils +from scenic.train_lib_deprecated import optimizers +from scenic.train_lib_deprecated import train_utils +import tensorflow as tf + + +class ViViTClassificationTrainerTest(parameterized.TestCase): + """Tests the default trainer on single device setup.""" + + def setUp(self): + super(ViViTClassificationTrainerTest, self).setUp() + self.test_dir = '/tmp/scenic_test' + os.mkdir(self.test_dir) + + # Make sure Tensorflow does not allocate gpu memory. + tf.config.experimental.set_visible_devices([], 'GPU') + + def tearDown(self): + shutil.rmtree(self.test_dir) + super(ViViTClassificationTrainerTest, self).tearDown() + + def get_train_state(self, rng, fake_batch_logits): + """Generates the initial training state.""" + config = ml_collections.ConfigDict({ + 'lr_configs': { + 'base_learning_rate': 0.1, + }, + 'optimizer': 'sgd', + }) + + # Define a fake model that always outputs the same "fake_batch_logits". + class FakeFlaxModel(nn.Module): + """A fake flax model.""" + + @nn.compact + def __call__(self, x, train=False, debug=False): + del x + del train + del debug + # FakeFlaxModule always predicts class 2. + return fake_batch_logits + + dummy_input = jnp.zeros((10, 10), jnp.float32) + initial_params = FakeFlaxModel().init(rng, dummy_input).get( + 'params', flax.core.frozen_dict.FrozenDict({})) + init_model_state = flax.core.frozen_dict.FrozenDict({}) + optimizer = optimizers.get_optimizer(config).create(initial_params) + init_train_state = jax_utils.replicate( + train_utils.TrainState( + global_step=0, + optimizer=optimizer, + model_state=init_model_state, + rng=jax.random.PRNGKey(0))) + return FakeFlaxModel(), init_train_state + + def train_and_evaluation(self, model, train_state, fake_batches, metrics_fn, + return_confusion_matrix=False): + """Given the train_state, trains the model on fake batches.""" + eval_metrics = [] + fake_batches_replicated = jax_utils.replicate(fake_batches) + if return_confusion_matrix: + confusion_matrices = [] + + eval_step_pmapped = jax.pmap( + functools.partial( + vivit_train_utils.eval_step, + flax_model=model, + metrics_fn=metrics_fn, + return_logits_and_labels=False, + return_confusion_matrix=return_confusion_matrix, + debug=False), + axis_name='batch', + donate_argnums=(1,), + ) + for fake_batch in fake_batches_replicated: + metric_data = eval_step_pmapped(train_state=train_state, batch=fake_batch) + if return_confusion_matrix: + metrics, confusion_matrix = metric_data + confusion_matrices.append(vivit_train_utils.to_cpu(confusion_matrix)) + else: + metrics = metric_data + metrics = train_utils.unreplicate_and_get(metrics) + eval_metrics.append(metrics) + eval_metrics = train_utils.stack_forest(eval_metrics) + eval_summary = jax.tree_util.tree_map(lambda x: x.sum(), eval_metrics) + for key, val in eval_summary.items(): + eval_summary[key] = val[0] / val[1] + + if return_confusion_matrix: + confusion_matrix_summary = ( + evaluation_lib.compute_confusion_matrix_metrics( + confusion_matrices, return_per_class_metrics=True)) + return eval_summary, confusion_matrix_summary + else: + return eval_summary + + @parameterized.named_parameters( + ('without confusion matrix summary', False), + ('with confusion matrix summary', True), + ) + def test_classifaction_model_evaluate(self, get_confusion_matrix): + """Test trainer evaluate end to end with classification model metrics.""" + # Define a fixed output for the fake flax model. + fake_batch_logits = np.tile([.5, .2, .7, 0.0], (4, 1)) + # 4 evaluation batches of size 4. + fake_batches = [ + { + 'inputs': None, + 'label': np.array([3, 2, 1, 0]), + 'batch_mask': np.array([1, 1, 1, 1]) + }, + { + 'inputs': None, + 'label': np.array([0, 3, 2, 0]), + 'batch_mask': np.array([1, 1, 1, 1]) + }, + { + 'inputs': None, + 'label': np.array([0, 0, 0, 0]), + 'batch_mask': np.array([1, 1, 1, 1]) + }, + { + 'inputs': None, + 'label': np.array([1, 1, 1, 1]), + 'batch_mask': np.array([1, 1, 1, 1]) + }, + ] + + rng = jax.random.PRNGKey(0) + model, train_state = self.get_train_state(rng, fake_batch_logits) + eval_summary = self.train_and_evaluation( + model, train_state, fake_batches, + functools.partial( + classification_model.classification_metrics_function, + target_is_onehot=False), + get_confusion_matrix) + if get_confusion_matrix: + eval_summary, confusion_matrix_summary = eval_summary + + def batch_loss(logits, targets): + # Softmax cross-entropy loss. + one_hot_targets = np.eye(4)[targets] + loss = -np.sum(one_hot_targets * nn.log_softmax(logits), axis=-1) + return loss + + expected_accuracy = 2.0 / 16.0 # FakeFlaxModule always predicts class 2. + expected_loss = np.mean( + [batch_loss(fake_batch_logits, b['label']) for b in fake_batches]) + + self.assertEqual(expected_accuracy, eval_summary['accuracy']) + np.testing.assert_allclose(expected_loss, eval_summary['loss'], atol=1e-6) + + if get_confusion_matrix: + # As FakeFlaxModule always predicts class 2, this class has a recall of 1, + # and the denominator for the precision is the total number of examples. + self.assertAlmostEqual(confusion_matrix_summary['precision/0'], 0.0) + self.assertAlmostEqual(confusion_matrix_summary['precision/1'], 0.0) + self.assertAlmostEqual(confusion_matrix_summary['precision/2'], 2. / 16.) + self.assertAlmostEqual(confusion_matrix_summary['precision/3'], 0.0) + self.assertAlmostEqual(confusion_matrix_summary['recall/0'], 0.0) + self.assertAlmostEqual(confusion_matrix_summary['recall/1'], 0.0) + self.assertAlmostEqual(confusion_matrix_summary['recall/2'], 1.0) + self.assertAlmostEqual(confusion_matrix_summary['recall/3'], 0.0) + self.assertAlmostEqual(confusion_matrix_summary['jaccard/0'], 0.0) + self.assertAlmostEqual(confusion_matrix_summary['jaccard/1'], 0.0) + self.assertAlmostEqual(confusion_matrix_summary['jaccard/2'], 2. / 16.) + self.assertAlmostEqual(confusion_matrix_summary['jaccard/3'], 0.0) + + def test_multi_label_classifaction_model_evaluate(self): + """Test trainer evaluate with multi-label classification model metrics.""" + # Define a fixed output for the fake flax model. + fake_batch_logits = np.tile([.5, .2, .7, 0.0], (4, 1)) + # 4 evaluation batches of size 4, with multihot labels. + fake_batches = [ + { + 'inputs': + None, + 'label': + np.array([[1, 0, 0, 1], [0, 0, 1, 0], [0, 1, 0, 0], + [1, 0, 0, 1]]) + }, + { + 'inputs': + None, + 'label': + np.array([[1, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 1], + [1, 0, 0, 1]]) + }, + { + 'inputs': + None, + 'label': + np.array([[1, 0, 0, 1], [1, 0, 0, 0], [1, 1, 0, 0], + [1, 0, 0, 0]]) + }, + { + 'inputs': + None, + 'label': + np.array([[0, 1, 0, 1], [0, 1, 0, 0], [1, 1, 0, 0], + [0, 1, 0, 0]]) + }, + ] + + rng = jax.random.PRNGKey(0) + model, train_state = self.get_train_state(rng, fake_batch_logits) + eval_summary = self.train_and_evaluation( + model, train_state, fake_batches, + functools.partial( + multilabel_classification_model + .multilabel_classification_metrics_function, + target_is_multihot=True)) + + def batch_loss(logits, multi_hot_targets): + # Sigmoid cross-entropy loss. + log_p = jax.nn.log_sigmoid(logits) + log_not_p = jax.nn.log_sigmoid(-logits) + loss = -np.sum( + multi_hot_targets * log_p + (1. - multi_hot_targets) * log_not_p, + axis=-1) + return loss + + expected_prec_at_one = 2.0 / 16.0 # FakeFlaxModule always predicts class 2. + expected_loss = np.mean( + [batch_loss(fake_batch_logits, b['label']) for b in fake_batches]) + + self.assertEqual(expected_prec_at_one, eval_summary['prec@1']) + np.testing.assert_allclose(expected_loss, eval_summary['loss'], atol=1e-6) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/projects/vivit/train_utils.py b/scenic/projects/vivit/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..e7fd5e9059f03602955e11dc1f4902e3e3e4add1 --- /dev/null +++ b/scenic/projects/vivit/train_utils.py @@ -0,0 +1,428 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Utilities for ViViT.""" + +import functools +from typing import Callable, Dict, List, Optional, Tuple, Union + +from absl import logging +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import matplotlib.pyplot as plt +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import model_utils +from scenic.train_lib_deprecated import optimizers +from scenic.train_lib_deprecated import train_utils +import seaborn as sns + +# Aliases for custom types: +Array = Union[jnp.ndarray, np.ndarray] +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] + + +def to_cpu(array: jnp.ndarray): + """Transfers array (replicated on multiple hosts) to a single host. + + Args: + array: Replicated array of shape + [num_hosts, num_devices, local_batch_size, ...] + + Returns: + array of shape [global_batch_size, ...] where + global_batch_size = num_devices * local_batch_size + """ + return jax.device_get(dataset_utils.unshard(jax_utils.unreplicate(array))) + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + learning_rate_fn: Callable[[int], float], + loss_fn: LossFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], float]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + learning_rate_fn: learning rate scheduler which give the global_step + generates the learning rate. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configuration of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training, computed metrics, and learning rate for logging. + """ + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NTHWC'), + rng=mixup_rng) + + # Bind the rng to the host/device we are on for dropout. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + logits, new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params']) + return loss, (new_model_state, logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + step = train_state.global_step + lr = learning_rate_fn(step) + if config.get('sam_rho', None) is None: + # Normal training + (train_cost, + (new_model_state, + logits)), grad = compute_gradient_fn(train_state.optimizer.target) + else: + # SAM training, taken from cl/373487774 + def dual_vector(y: jnp.ndarray) -> jnp.ndarray: + """Returns the solution of max_x y^T x s.t. ||x||_2 <= 1.""" + gradient_norm = jnp.sqrt(sum( + [jnp.sum(jnp.square(e)) for e in jax.tree_util.tree_leaves(y)])) + normalized_gradient = jax.tree_util.tree_map( + lambda x: x / (gradient_norm + 1e-7), y) + return normalized_gradient + + g_sam, _ = jax.grad(training_loss_fn, has_aux=True)( + train_state.optimizer.target) + g_sam = dual_vector(g_sam) + target_sam = jax.tree_util.tree_map( + lambda a, b: a + config.get('sam_rho') * b, + train_state.optimizer.target, g_sam) + (train_cost, + (new_model_state, + logits)), grad = compute_gradient_fn(target_sam) + + # TODO(dehghani,aarnab): Check how to move this after the pmeam. + if config.get('max_grad_norm', None) is not None: + grad = clip_grads(grad, config.max_grad_norm) + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + new_optimizer = train_state.optimizer.apply_gradient(grad, learning_rate=lr) + + # Explicit weight decay, if necessary. + if config.get('explicit_weight_decay', None) is not None: + new_optimizer = new_optimizer.replace( + target=optimizers.tree_map_with_names( + functools.partial( + optimizers.decay_weight_fn, + lr=lr, + decay=config.explicit_weight_decay), + new_optimizer.target, + match_name_fn=lambda name: 'kernel' in name)) + + metrics = metrics_fn(logits, batch) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=step + 1, + optimizer=new_optimizer, + model_state=new_model_state, + rng=new_rng) + return new_train_state, metrics, lr + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + return_logits_and_labels: bool = False, + return_confusion_matrix: bool = False, + debug: Optional[bool] = False, +) -> Union[ + Tuple[Dict[str, Tuple[float, int]], jnp.ndarray, jnp.ndarray], + Tuple[Dict[str, Tuple[float, int]], jnp.ndarray], + Dict[str, Tuple[float, int]], +]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + return_logits_and_labels: If true, returns logits and labels. Can be used + for calculating the Mean Average Precision for multi-label problems. + Only one of "return_logits_and_labels" and "return_confusion_matrix" + should be true, with the latter taking precedence if both are set as true. + return_confusion_matrix: If true, returns confusion matrix. Can be used + to calculate additional metrics for k-way classification problems. + debug: Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics [and optionally logits or confusion matrix]. + """ + variables = { + 'params': train_state.optimizer.target, + **train_state.model_state + } + logits = flax_model.apply( + variables, batch['inputs'], train=False, mutable=False, debug=debug) + metrics = metrics_fn(logits, batch) + + if return_confusion_matrix: + confusion_matrix = get_confusion_matrix( + labels=batch['label'], logits=logits, batch_mask=batch['batch_mask']) + confusion_matrix = jax.lax.all_gather(confusion_matrix, 'batch') + return metrics, confusion_matrix + + if return_logits_and_labels: + logits = jax.lax.all_gather(logits, 'batch') + labels = jax.lax.all_gather(batch['label'], 'batch') + return metrics, logits, labels + + return metrics + + +def test_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + n_clips: int = 2, + return_logits_and_labels: bool = False, + softmax_logits: bool = False, + debug: bool = False, +) -> Union[ + Dict[str, Tuple[float, int]], + Tuple[Dict[str, Tuple[float, int]], jnp.ndarray, jnp.ndarray], +]: + """Runs a single step of testing. + + For multi-crop testing, we assume that num_crops consecutive entries in the + batch are from the same example. And we average the logits over these examples + + We assume that the batch contains different crops of the same original + example. Therefore, we can average all the logits of it. + This assumption is true when local_batch_size = num_local_devices + + Args: + train_state: The state of training including the current + global_step, model_state, rng, and optimizer, and other metadata. + batch: Dictionary with keys 'inputs', 'labels', 'batch_mask'. We assume that + all the inputs correspond to the same original example in the test set. + The input shapes to this function are batch['inputs'] = [num_crops, t, h, + w, c] batch['labels'] = [num_crops, num_classes] However, for + classification, the labels for all the crops are the same. + batch['batch_mask'] = [num_crops] + flax_model: A Flax model. + metrics_fn: Metrics function for the model. + n_clips: The number of clips to process at a time by each device. Set + due to memory constraints. + return_logits_and_labels: Whether return logits of the model or not. + softmax_logits: Whether to softmax-normalise the logits before + averaging + debug: Whether the debug mode is enabled during evaluation. + `debug=True` enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics [and optionally averaged logits that are of + shape `[1, num_classes]`]. + """ + + all_logits = jnp.zeros(batch['label'].shape[1]) + assert len(batch['batch_mask'].shape) == 1, ( + 'Spatial padding is not supported in multi-crop evaluation.') + + num_crops = batch['inputs'].shape[0] + + variables = { + 'params': train_state.optimizer.target, + **train_state.model_state + } + for idx in range(0, num_crops, n_clips): + temp_input = batch['inputs'][idx:idx + n_clips] + logits = flax_model.apply( + variables, temp_input, train=False, mutable=False, debug=debug) + if softmax_logits: + logits = nn.softmax(logits, axis=-1) + logits = jnp.sum(logits, axis=0) + all_logits = all_logits + logits + + all_logits = all_logits / num_crops + all_logits = jnp.expand_dims(all_logits, axis=0) + batch['label'] = jnp.expand_dims(batch['label'][0], axis=0) + batch['batch_mask'] = jnp.expand_dims(batch['batch_mask'][0], axis=0) + metrics = metrics_fn(all_logits, batch) + if return_logits_and_labels: + return metrics, all_logits, batch['label'] + return metrics + + +def get_confusion_matrix(labels: Array, logits: Array, + batch_mask: Array) -> Array: + """Computes confusion matrix from predictions. + + Args: + labels: [n_batch] or [n_batch, n_classes] array. In the latter case, labels + are assumed to be one-hot, since the confusion matrix is only defined when + each example has one label. + logits: [n_batch, n_classes] array, which are the predictions of the model. + batch_mask: [n_batch] array. Entries should be 1 or 0, and indicate if the + example is valid or not. + + Returns: + confusion_matrix of shape [1, n_classes, n_classes] + """ + if labels.ndim == logits.ndim: # one-hot targets + y_true = jnp.argmax(labels, axis=-1) + else: + y_true = labels + y_pred = jnp.argmax(logits, axis=-1) + + # Prepare sample weights for confusion matrix: + weights = batch_mask.astype(jnp.float32) + + confusion_matrix = model_utils.confusion_matrix( + y_true=y_true, + y_pred=y_pred, + num_classes=logits.shape[-1], + weights=weights) + confusion_matrix = confusion_matrix[jnp.newaxis, ...] # Dummy batch dim. + return confusion_matrix + + +def render_confusion_matrices(confusion_matrices: List[Array], + normalization_method: str = 'cols', + figsize: Tuple[int, int] = (12, 12), + dpi: int = 100, + font_scale: int = 3) -> Array: + """Render confusion matrix so that it can be logged to Tensorboard. + + Args: + confusion_matrices: List of [n_batch, n_class, n_class] confusion matrices. + The first two dimensions will be summed over to get an [n_class, n_class] + matrix for rendering. + normalization_method: Method of normalizing the confusion matrix before + plotting. Supported values are one of "cols", "rows" and "none". + If any other value, no normalization is performed. + figsize: The figure size used by matplotlib and seaborn. + dpi: The dpi used by matplotlib and seaborn. + font_scale: The font scale used by seaborn. + + Returns: + image: Rendered image of the confusion matrix for plotting. Data type is + uint8 and values are in range [0, 255]. Shape is + [1, figsize * dpi, figsize * dpi, 3] + """ + conf_matrix = np.sum(confusion_matrices, axis=0) # Sum over eval batches. + if conf_matrix.ndim != 3: + raise AssertionError( + 'Expecting confusion matrix to have shape ' + f'[batch_size, num_classes, num_classes], got {conf_matrix.shape}.') + conf_matrix = np.sum(conf_matrix, axis=0) # Sum over batch dimension. + + if normalization_method not in {'rows', 'cols', 'none'}: + logging.warning('Normalizer must be one of {rows, cols, none}.' + 'Defaulting to none.') + + sns.set(font_scale=font_scale) + fig = plt.figure(figsize=figsize, dpi=dpi) + + # Normalize entries of the confusion matrix. + if normalization_method == 'rows': + normalizer = conf_matrix.sum(axis=1)[:, np.newaxis] + elif normalization_method == 'cols': + normalizer = conf_matrix.sum(axis=0)[np.newaxis, :] + else: + normalizer = 1 + normalized_matrix = np.nan_to_num(conf_matrix / normalizer) + + if np.sum(normalized_matrix) > 0: + sns.heatmap( + normalized_matrix, + annot=True, + linewidths=0.5, + square=True, + cbar=False, + cmap='jet', + annot_kws={'size': 18}) + fig.tight_layout(pad=0.0) + + fig.canvas.draw() + ncols, nrows = fig.canvas.get_width_height() + image = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8) + image = image.reshape(nrows, ncols, 3) + return np.expand_dims(image, axis=0) diff --git a/scenic/projects/vivit/trainer.py b/scenic/projects/vivit/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..43d0a613455d4ae7342624da9130b452de25b4f9 --- /dev/null +++ b/scenic/projects/vivit/trainer.py @@ -0,0 +1,378 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script for ViViT.""" + +import copy +import functools +from typing import Any, Dict, Tuple + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +import flax +from flax import jax_utils +import jax +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.projects.vivit import evaluation_lib +from scenic.projects.vivit import train_utils as vivit_train_utils +from scenic.train_lib_deprecated import lr_schedules +from scenic.train_lib_deprecated import optimizers +from scenic.train_lib_deprecated import pretrain_utils +from scenic.train_lib_deprecated import train_utils + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Any, + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_state that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + flax.config.update('flax_return_frozendict', True) + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + is_multilabel_model = (config.model_name == 'vivit_multilabel_classification') + get_confusion_matrix = (config.get('confusion_matrix_metrics', False) + and not is_multilabel_model) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create optimizer. + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + optimizer = jax.jit( + optimizers.get_optimizer(config).create, backend='cpu')( + params) + rng, train_rng = jax.random.split(rng) + train_state = train_utils.TrainState( + global_step=0, + optimizer=optimizer, + model_state=model_state, + rng=train_rng, + accum_train_time=0) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + checkpoint_format = config.init_from.get('checkpoint_format', 'scenic') + if checkpoint_format == 'scenic': + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + elif checkpoint_format == 'big_vision': + restored_train_state = ( + pretrain_utils.convert_big_vision_to_scenic_checkpoint( + init_checkpoint_path, train_state)) + # Config dict in big_vision is not the same format as scenic. + # Therefore, make sure config match the config of the loaded model! + restored_model_cfg = copy.deepcopy(config) + # The following is needed when the restored and target models used a + # different classifier. As big_vision uses a different config dict, we + # have to specify this manually. + restored_model_cfg.model.classifier = config.init_from.get( + 'classifier_type', 'token') + + train_state = model.init_from_train_state(train_state, restored_train_state, + restored_model_cfg) + # Free unnecessary memory. + del restored_train_state + elif start_step == 0: + logging.info('Training completely from scratch.' + 'Not restoring from any checkpoint.') + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + # Get learning rate scheduler. + learning_rate_fn = lr_schedules.get_learning_rate_fn(config) + + train_step_pmapped = jax.pmap( + functools.partial( + vivit_train_utils.train_step, + flax_model=model.flax_model, + learning_rate_fn=learning_rate_fn, + loss_fn=model.loss_function, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + vivit_train_utils.eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + return_logits_and_labels=is_multilabel_model, + return_confusion_matrix=get_confusion_matrix, + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + log_test_steps = 0 + if config.dataset_configs.get('do_multicrop_test'): + log_test_steps = int(steps_per_epoch * + config.dataset_configs.log_test_epochs) + + test_step_pmapped = jax.pmap( + functools.partial( + vivit_train_utils.test_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('test'), + n_clips=config.get('multicrop_clips_per_device', 2), + debug=config.debug_eval), + axis_name='batch', + # We can donate the test_batch's buffer. + donate_argnums=(1,), + ) + + assert config.dataset_configs.test_batch_size == jax.local_device_count(), ( + 'The per-host batch size must be equal to the number of local devices.' + 'This ensures that each TPU device is processing different views of' + 'the same original video.') + + total_test_steps = int( + np.ceil(dataset.meta_data['num_test_examples'] / + (config.get('dataset_configs.test_batch_size') * + config.get('dataset_configs.num_test_clips') * + jax.process_count()))) + steps_per_test = config.get('steps_per_test') or total_test_steps + + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono = train_utils.Chrono( + first_step=start_step, + total_steps=total_steps, + steps_per_epoch=steps_per_epoch, + global_bs=config.batch_size, + accum_train_time=int(jax_utils.unreplicate(train_state.accum_train_time))) + + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, writer=writer) + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, lr = train_step_pmapped(train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + extra_training_logs.append({'learning_rate': lr}) + + for h in hooks: + # Catch exception in case XProf fails. + try: + h(step) + except ValueError as error: + logging.exception('Hook failed: %r', error) + + chrono.pause() # Below are once-in-a-while ops -> pause. + ###################### LOG TRAIN SUMMARY ######################## + if (step % log_summary_steps == 1) or (step == total_steps): + if lead_host: + chrono.tick(step, writer=writer) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, extra_training_logs), + writer=writer, + key_separator='/') + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + + ################### EVALUATION ################################ + if (step % log_eval_steps == 1) or (step == total_steps): + with report_progress.timed('eval'): + eval_metrics = [] + additional_summary = None + if is_multilabel_model: + eval_logits = [] + eval_labels = [] + n_classes = dataset.meta_data['num_classes'] + if get_confusion_matrix: + confusion_matrices = [] + n_classes = dataset.meta_data['num_classes'] + + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + for _ in range(steps_per_eval): + eval_batch = next(dataset.valid_iter) + e_metrics = eval_step_pmapped(train_state, eval_batch) + if is_multilabel_model: + e_metrics, logits_batch, labels_batch = e_metrics + # TODO(dehghani, lucic): Fetching from the device in each step might + # be an unnecessary penalty. Consider updating to async fetching + # as in CL/378384754. + eval_logits.append(vivit_train_utils.to_cpu(logits_batch)) + eval_labels.append(vivit_train_utils.to_cpu(labels_batch)) + if get_confusion_matrix: + e_metrics, conf_matrix = e_metrics + confusion_matrices.append(vivit_train_utils.to_cpu(conf_matrix)) + # Fetch e_metrics to host and store. + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + + # Compute global metrics if applicable from all the batches. + if is_multilabel_model: + additional_summary = evaluation_lib.compute_mean_average_precision( + np.concatenate(eval_logits, axis=0), + np.concatenate(eval_labels, axis=0), + return_per_class_ap=n_classes < 10) + if get_confusion_matrix: + additional_summary = evaluation_lib.compute_confusion_matrix_metrics( + confusion_matrices, return_per_class_metrics=n_classes < 10) + if lead_host: + conf_matrix_image = vivit_train_utils.render_confusion_matrices( + confusion_matrices, normalization_method='rows') + conf_matrix_unnorm = vivit_train_utils.render_confusion_matrices( + confusion_matrices, normalization_method='none') + + writer.write_images( + step, {'valid/conf_matrix': conf_matrix_image, + 'valid/conf_matrix_unnormalized': conf_matrix_unnorm}) + + # Log eval summary. + eval_summary = train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + extra_eval_summary=additional_summary, + writer=writer, + key_separator='/') + writer.flush() + del eval_metrics + + ##################### CHECKPOINTING ########################### + if ((step % checkpoint_steps == 0 and step > 0) or + (step == total_steps)) and config.checkpoint: + with report_progress.timed('checkpoint'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + if lead_host: + train_state.replace( # pytype: disable=attribute-error + accum_train_time=chrono.accum_train_time) + train_utils.save_checkpoint(workdir, train_state) + + ############# MULTICROP TESTING ############################ + if (config.dataset_configs.get('do_multicrop_test') and + ((step % log_test_steps == 1 and step > 1) or step == total_steps)): + with report_progress.timed('test'): + test_metrics = [] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + + # At the end of training, evaluate on the whole test set. + if step == total_steps: + steps_per_test = total_test_steps + + logging.info('Starting multicrop test') + for _ in range(steps_per_test): + test_batch = next(dataset.test_iter) + t_metrics = test_step_pmapped(train_state, test_batch) + # Fetch t_metrics to host and store. + test_metrics.append(train_utils.unreplicate_and_get(t_metrics)) + # Log eval summary. + train_utils.log_eval_summary( + step=step, + eval_metrics=test_metrics, + writer=writer, + prefix='test', + key_separator='/') + logging.info('Completed multicrop test') + writer.flush() + # Free up some space. + del test_metrics + + chrono.resume() # un-pause now + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + return train_state, train_summary, eval_summary diff --git a/scenic/train_lib/__init__.py b/scenic/train_lib/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/train_lib/__pycache__/__init__.cpython-310.pyc b/scenic/train_lib/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2850374f570467bd06e5cebfb1bfc1a374e37076 Binary files /dev/null and b/scenic/train_lib/__pycache__/__init__.cpython-310.pyc differ diff --git a/scenic/train_lib/__pycache__/__init__.cpython-311.pyc b/scenic/train_lib/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..394270ade066c786bb0baa9d3e70cab9cb3c32aa Binary files /dev/null and b/scenic/train_lib/__pycache__/__init__.cpython-311.pyc differ diff --git a/scenic/train_lib/__pycache__/__init__.cpython-312.pyc b/scenic/train_lib/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c47fe8c02a00cc0d3032a49905650be537f448af Binary files /dev/null and b/scenic/train_lib/__pycache__/__init__.cpython-312.pyc differ diff --git a/scenic/train_lib/__pycache__/optimizers.cpython-310.pyc b/scenic/train_lib/__pycache__/optimizers.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eeabcd15c1d9a72a23b0085ae4b9ebe51b14d549 Binary files /dev/null and b/scenic/train_lib/__pycache__/optimizers.cpython-310.pyc differ diff --git a/scenic/train_lib/__pycache__/optimizers.cpython-311.pyc b/scenic/train_lib/__pycache__/optimizers.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8b7603d16d78aa55f4914b373101323179f1d70 Binary files /dev/null and b/scenic/train_lib/__pycache__/optimizers.cpython-311.pyc differ diff --git a/scenic/train_lib/__pycache__/optimizers.cpython-312.pyc b/scenic/train_lib/__pycache__/optimizers.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..088a27f167dae69396f9ea57a4924ef385289d01 Binary files /dev/null and b/scenic/train_lib/__pycache__/optimizers.cpython-312.pyc differ diff --git a/scenic/train_lib/__pycache__/train_utils.cpython-310.pyc b/scenic/train_lib/__pycache__/train_utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1043def0cf1a51e38ffe78888e33428dc0f045da Binary files /dev/null and b/scenic/train_lib/__pycache__/train_utils.cpython-310.pyc differ diff --git a/scenic/train_lib/__pycache__/train_utils.cpython-311.pyc b/scenic/train_lib/__pycache__/train_utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..05ecdd5de0d7b531b67bef1bc3ed6db98162b9a2 Binary files /dev/null and b/scenic/train_lib/__pycache__/train_utils.cpython-311.pyc differ diff --git a/scenic/train_lib/__pycache__/train_utils.cpython-312.pyc b/scenic/train_lib/__pycache__/train_utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d1df90577f7f33b3543a80381fb0ceccdbf64d8 Binary files /dev/null and b/scenic/train_lib/__pycache__/train_utils.cpython-312.pyc differ diff --git a/scenic/train_lib/classification_trainer.py b/scenic/train_lib/classification_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..235879b4d90668c83feb34aaabe496ec71eb7f4d --- /dev/null +++ b/scenic/train_lib/classification_trainer.py @@ -0,0 +1,423 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training Script.""" + +import functools +from typing import Any, Callable, Dict, Tuple, Optional, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +import flax +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] +LrFn = Callable[[jnp.ndarray], jnp.ndarray] + +flax.config.update('flax_use_orbax_checkpointing', False) + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + lr_fn: LrFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, + Any]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, params, and optimizer. The buffer of this argument can + be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + lr_fn: The learning rate fn used for the logging the learning rate. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training and computed metrics and some training logs. + """ + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + rng=mixup_rng) + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + logits, new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params']) + return loss, (new_model_state, logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (train_cost, (new_model_state, + logits)), grad = compute_gradient_fn(train_state.params) + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm') is not None: + grad = clip_grads(grad, config.max_grad_norm) + + tx = train_state.tx + if tx is None: + raise ValueError('train_state.tx, the Gradient Transformation, is None') + updates, new_opt_state = tx.update( + grad, train_state.opt_state, train_state.params + ) + new_params = optax.apply_updates(train_state.params, updates) + + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)]) + ) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + # TODO(dehghani): Can we get this from the optimizer instead? + training_logs['learning_rate'] = lr_fn(jnp.asarray([train_state.global_step])) + + metrics = metrics_fn(logits, batch) + + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + + return new_train_state, metrics, training_logs + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], jnp.ndarray]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, params and optimizer state. The buffer of + this argument can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and logits. + """ + variables = {'params': train_state.params, **train_state.model_state} + logits = flax_model.apply( + variables, batch['inputs'], train=False, mutable=False, debug=debug) + metrics = metrics_fn(logits, batch) + return metrics, logits + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_state that has the state of training (including current + global_step, model_state, rng, and the optimizer), train_summary + and eval_summary which are dict of metrics. These outputs are used for + regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params=params) + # We jit this, such that the arrays that are created on the same device as the + # input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + rng, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + # Replicate the optimizer, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + lr_fn=lr_fn, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + max_checkpoint_keep = config.get('max_checkpoint_keep', 3) + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, + writer=writer, + every_secs=None, + every_steps=config.get('report_progress_step', log_summary_steps), + ) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + extra_training_logs.append(t_logs) + for h in hooks: + h(step) + # Below are once-in-a-while ops -> pause. + ###################### LOG TRAIN SUMMARY ######################## + if ((step % log_summary_steps == 1) or (step == total_steps) or + (lead_host and chrono.warmup)): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + # train_metrics is list of a dictionaries of metrics, where the shape of + # the metrics[key] is [n_local_devices]. However, because metric functions + # have a psum, we have already summed across the whole sharded batch, and + # what's returned is n_local_devices copies of the same summed metric. + # So we do unreplicate and fetch them to host using `unreplicate_and_get`. + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_training_logs), + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + eval_metrics = [] + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + for _ in range(steps_per_eval): + eval_batch = next(dataset.valid_iter) + e_metrics, _ = eval_step_pmapped(train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + eval_summary = train_utils.log_eval_summary( + step=step, eval_metrics=eval_metrics, writer=writer) + writer.flush() + del eval_metrics + chrono.resume() + ##################### CHECKPOINTING ################### + if ((step % checkpoint_steps == 1 and step > 1) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + train_utils.handle_checkpointing( + train_state, chrono, workdir, max_checkpoint_keep) + chrono.resume() + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + assert train_summary is not None + assert eval_summary is not None + return train_state, train_summary, eval_summary diff --git a/scenic/train_lib/lr_schedules.py b/scenic/train_lib/lr_schedules.py new file mode 100644 index 0000000000000000000000000000000000000000..fc01e822ab367cd36d315a81a69c331e7145cd98 --- /dev/null +++ b/scenic/train_lib/lr_schedules.py @@ -0,0 +1,329 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Defines different learning_rate schedules.""" + +import jax.numpy as jnp +import ml_collections + + +def polynomial_lr_scheduler(step, decay_steps, end_factor, power): + """Same behavior as tf.train.polynomial_decay. + + This is the original formula for this learning rate scheduler: + ``` + end_learning_rate = config['base_learning_rate'] * config['end_factor'] + step = min(config['decay_steps'], step) + decayed_learning_rate = (config['base_learning_rate'] - + end_learning_rate) * ( + 1 - step / config['decay_steps'])**( + config['power']) + end_learning_rate + ``` + We rewrite this as a multiplicative factor for the initial learning rate. + Args: + step: int; Current step. + decay_steps: int; Parameter of the decay function. + end_factor: float; Final lr is: initial lr x end_factor. + power: int; Parameter of the decay function. + + Returns: + Scaling factor applied to the learning rate on the given step. + """ + + decay = step <= decay_steps + decayed_learning_rate = (1 - end_factor) * ( + decay * (1 - step / decay_steps))**(power) + end_factor + return decayed_learning_rate + + +def piecewise_constant_scheduler(step, decay_events, decay_factors): + """Gives a scaling factor based on Piecewise Constant scheduling. + + Args: + step: int; Current step. + decay_events: list(int); List of steps in which a decay is applied. + decay_factors: list(int); List containing the absolute ratio of the decay + applied on the decay events. Note that each element of decay_factors is + absolute (not relative). For example, to decay the learning rate to 0.5 of + its initial value after 100 steps, followed by 0.1 of its *initial value* + after 200 steps, with a plateau of 0.1 of its initial value thereafter, + use decay_events = [100, 200] and decay_factors = [0.5, 0.1]. + + Returns: + Scaling factor applied to the learning rate on the given step. + """ + boundaries = jnp.array(decay_events) + factors = jnp.array([1.0] + decay_factors) + index = jnp.sum(boundaries < step) + ratio = jnp.take(factors, index) + return ratio + + +def piecewise_linear_scheduler(step, decay_events, decay_factors): + """Gives a scaling factor based on Piecewise Linear scheduling. + + Args: + step: int; Current step. + decay_events: list(int); List of steps in which a decay is applied. + decay_factors: list(int); List containing the absolute ratio of the decay + applied on the decay events. Note that each element of decay_factors is + absolute (not relative). For example, to decay the learning rate to 0.5 of + its initial value after 100 steps, followed by 0.1 of its *initial value* + after 200 steps, with a plateau of 0.1 of its initial value thereafter, + use decay_events = [100, 200] and decay_factors = [0.5, 0.1]. + + Returns: + Scaling factor applied to the learning rate on the given step. + """ + boundaries = jnp.array([0] + decay_events + [step]) + factors = jnp.array([1.0] + decay_factors + [decay_factors[-1]]) + index = jnp.sum(boundaries[1:] < step) + m = jnp.take(factors, index + 1) - jnp.take(factors, index) + n = jnp.take(boundaries, index + 1) - jnp.take(boundaries, index) + a = m / jnp.clip(n, 1) + interpolated_factor = ( + a * (step - jnp.take(boundaries, index)) + jnp.take(factors, index)) + return interpolated_factor + + +def linear_warmup_scheduler(step, warmup_steps, alpha=0.): + """Gives a scaling factor based on scheduling with a Linear Warmup. + + Args: + step: int; Current step. + warmup_steps: int; How many steps to warm up for in the warmup schedule. + alpha: float: The minimum value as a fraction of the initial value. + + Returns: + Scaling factor applied to the learning rate on the given step. + """ + if warmup_steps > 0: + return jnp.minimum(1.0, alpha + step * (1.0 - alpha) / warmup_steps) + else: + return 1.0 + + +def decay_every_scheduler(step, steps_per_decay, decay_factor): + """Gives a scaling factor based on scheduling with a decay every n-steps. + + Args: + step: int; Current step. + steps_per_decay: int; How often to decay. + decay_factor: float; The amount to decay. + + Returns: + Scaling factor applied to the learning rate on the given step. + """ + return decay_factor**(step // steps_per_decay) + + +def exponential_decay_scheduler(step, decay_steps, decay_rate, staircase=False): + """Gives a scaling factor based on scheduling with an exponential decay. + + Args: + step: int; Current step. + decay_steps: int; Number of steps to decay over. + decay_rate: float; Rate of exponential decay. + staircase: bool; If True, use integer division in scale-computation. + + Returns: + Scaling factor applied to the learning rate on the given step. + """ + progress = step / float(decay_steps) + if staircase: + progress = jnp.floor(progress) + return jnp.power(decay_rate, progress) + + +def cosine_decay_scheduler(step, steps_per_cycle, t_mul=1, m_mul=1., alpha=0.): + """Gives a scaling factor based on scheduling with a cosine decay. + + Args: + step: int; Current step. + steps_per_cycle: int; Number of steps to reset the decay cycle. + t_mul: int; Used to derive the number of iterations in the i-th period. + m_mul: float; Used to derive the initial learning rate of the i-th period. + alpha: float; The minimum value as a fraction of the initial value. + + Returns: + Scaling factor applied to the learning rate on the given step. + """ + if steps_per_cycle <= 0: + raise ValueError(f'steps_per_cycle must be > 0. Got {steps_per_cycle}.') + progress = step / float(steps_per_cycle) + if t_mul == 1.0: + i_restart = jnp.floor(progress) + progress -= i_restart + else: + i_restart = jnp.floor( + jnp.log(1.0 - progress * (1.0 - t_mul)) / jnp.log(t_mul)) + sum_r = (1.0 - t_mul**i_restart) / (1.0 - t_mul) + progress = (progress - sum_r) / t_mul**i_restart + m_fac = m_mul**i_restart + cosine_decay = jnp.maximum( + 0.0, 0.5 * m_fac * (1.0 + jnp.cos(jnp.pi * (progress % 1.0)))) + return (1 - alpha) * cosine_decay + alpha + + +def compound_lr_scheduler(config): + """Creates a learning rate scheduler by combining multiple factors. + + Interprets factors in the factors string which can consist of: + * constant: interpreted as the constant value, + * linear_warmup: interpreted as linear warmup until warmup_steps, + * rsqrt_decay: divide by square root of max(step, warmup_steps) + * decay_every: Every k steps decay the learning rate by decay_factor. + * cosine_decay: Cyclic cosine decay. + + For instance, `config['factors'] = 'constant*linear_warmup'` combines the + constant learning rate schedule with a linear warmup. This requires one to + have the following configuration entries: + config['warmup_steps'] and config['base_learning_rate']. + + Args: + config: Relevant config based on the chosen factors. + + Returns: + lr_fn: A function mapping global_step to lr. + """ + + ratio_factors = [n.strip() for n in config['factors'].split('*')] + + def lr_fn(step): + """Step to learning rate function.""" + ratio = 1.0 + for name in ratio_factors: + if name == 'constant': + ratio *= config['base_learning_rate'] + elif name == 'polynomial': + decay_steps = config['decay_steps'] + end_factor = config['end_factor'] + power = config['power'] + ratio *= polynomial_lr_scheduler(step, decay_steps, end_factor, power) + elif name == 'piecewise_constant': + decay_events = config['decay_events'] + decay_factors = config['decay_factors'] + ratio *= piecewise_constant_scheduler(step, decay_events, decay_factors) + + elif name == 'piecewise_linear': + decay_events = config['decay_events'] + decay_factors = config['decay_factors'] + ratio *= piecewise_linear_scheduler(step, decay_events, decay_factors) + + elif name == 'linear_warmup': + warmup_steps = config['warmup_steps'] + warmup_alpha = config.get('warmup_alpha', 0) + ratio *= linear_warmup_scheduler(step, warmup_steps, warmup_alpha) + + elif name == 'rsqrt_decay': + warmup_steps = config.get('warmup_steps', 0.) + timescale = config.get('timescale', 10_000) + shift = timescale - warmup_steps + ratio *= jnp.where(warmup_steps < step, + jnp.sqrt(timescale) / jnp.sqrt(step + shift), 1.) + + elif name == 'decay_every': + steps_per_decay = config['steps_per_decay'] + decay_factor = config['decay_factor'] + ratio *= decay_every_scheduler(step, steps_per_decay, decay_factor) + + elif name == 'exponential_decay': + decay_steps = config['decay_steps'] + decay_rate = config['decay_rate'] + staircase = config.get('staircase', False) + ratio *= exponential_decay_scheduler( + step, decay_steps, decay_rate, staircase=staircase) + + elif name == 'cosine_decay': + steps_per_cycle = config['steps_per_cycle'] + t_mul = config.get('t_mul', 1.) + m_mul = config.get('m_mul', 1.) + alpha = config.get('alpha', 0.0) + warmup_steps = config.get('warmup_steps', 0.) + adjusted_step = jnp.maximum( + 0.0, (step - (warmup_steps + config.get('start_decay_step', 0.)))) + total_steps = config.get('total_steps', steps_per_cycle) + + # We make the cos equal and subtract warmup steps for each cycle. If + # there are fewer steps than warmup steps, cosine can be skipped. + steps_per_cycle = steps_per_cycle - int( + warmup_steps / (total_steps / steps_per_cycle)) + if steps_per_cycle > 0: + ratio *= cosine_decay_scheduler( + adjusted_step, + steps_per_cycle, + t_mul=t_mul, + m_mul=m_mul, + alpha=alpha) + elif name == 'linear_decay': + warmup_steps = config.get('warmup_steps', 0.) + total_steps = config.get('total_steps') + assert total_steps > warmup_steps, ( + 'With linear decay, total_steps should be higher than warmup_steps.' + ) + progress = jnp.maximum(0.0, (step - warmup_steps) / + float(total_steps - warmup_steps)) + ratio -= config.get('end_learning_rate', 0.) + ratio *= jnp.maximum(1.0 - progress, 0.0) + ratio += config.get('end_learning_rate', 0.) + + elif name == 'linear_cooldown': + adjusted_step = jnp.maximum(step, config.get('warmup_steps', 0.)) + ratio *= jnp.minimum(1., (config.total_steps - adjusted_step) / + config.cooldown_steps) + + else: + raise ValueError('Unknown factor %s.' % name) + + return jnp.asarray(ratio, dtype=jnp.float32) + + return lr_fn + + +lr_fn_dict = { + 'compound': compound_lr_scheduler, +} + + +def get_learning_rate_fn(config: ml_collections.ConfigDict): + """Looks up for the learning rate scheduler and return lr_fn. + + Args: + config: ConfigDict that has configuration ofthe learning rate function. + + Returns: + An learning rate or a function learning_rate(step): float -> + {'learning_rate': float}, the step-dependent lr. + + """ + if 'base_learning_rate' not in config.lr_configs: + raise ValueError( + '`base_learning_rate` has to be defined in the lr_config.') + if not config.lr_configs.base_learning_rate: + # raise ValueError( # raised for {0, False, None, [], (), {}} + # f'`base_learning_rate = {config.lr_configs.base_learning_rate}` is not ' + # 'allowed for training parameters. If your intention was to freeze ' + # 'parameters, use Scenic optax and `config.lr_configs = None` instead.') + pass + # Circumvent failing of config.lr_configs.base_learning_rate in {0, False, + # None, [], (), {}} here as a short-term solution. This case is for now + # handled in optax.make to handle edge cases. + if 'learning_rate_schedule' in config.lr_configs: + # A function that given the current step, returns the LR. + return lr_fn_dict[config.lr_configs['learning_rate_schedule']]( + config.lr_configs) + else: + # LR as a scalar value. + lr = jnp.asarray(config.lr_configs.base_learning_rate, dtype=jnp.float32) + return lambda step: lr diff --git a/scenic/train_lib/optax.py b/scenic/train_lib/optax.py new file mode 100644 index 0000000000000000000000000000000000000000..e6f8b344518f9065a0ece77f7b8a3ccde29b64a2 --- /dev/null +++ b/scenic/train_lib/optax.py @@ -0,0 +1,370 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Optax utils for Scenic. + +This is a fork of +https://github.com/google-research/big_vision/blob/main/big_vision/optax.py. +""" + +import itertools +import numbers +import operator +import re +from typing import Any, Optional, Sequence, Tuple, Union, Callable, List + +from absl import logging +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +import optax +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers + + +def find_states(opt_state, cls): + leaves = jax.tree_util.tree_leaves( + opt_state, is_leaf=lambda node: isinstance(node, cls)) + return [leaf for leaf in leaves if isinstance(leaf, cls)] + + +def get_step(opt_state): + """Returns `ScaleByScheduleState.count` from `opt_state` as an integer.""" + counts = { + int(state.count) + for state in find_states(opt_state, optax.ScaleByScheduleState) + } + assert len(counts) == 1, f'Expected exactly 1 ScaleByScheduleState: {counts}' + return next(iter(counts)) + + +def _make_mask_trees( + params, + patterns_names_values: Union[Sequence[Tuple[str, str, Any]], + Sequence[Tuple[str, Any]]], + *, + allow_unmatched: bool = False, + log: Optional[str] = None): + """Wrapper around `make_mask_trees` that supports different input types.""" + if patterns_names_values: + if len(patterns_names_values[0]) == 3: + patterns, names, values = zip(*patterns_names_values) + else: + patterns, values = zip(*patterns_names_values) + names = [None] * len(values) + else: + patterns, names, values = [], [], [] + + masks = make_mask_trees( + params, + list(zip(patterns, names, values)), + allow_unmatched=allow_unmatched, + log=log, + ) + return masks, list(zip(names, values)) + + +def _split_frozen(masks, scheds): + """Computes `frozen_mask` and updates `masks` and `scheds`.""" + + def _is_none(sched): + """Helper to check if sched itself or (fn, base_lr) of sched are None.""" + if isinstance(sched, (tuple, list)): + _, fn_base_lr = sched # Check only the tuple of fn and base_lr. + return not any(fn_base_lr) # Only false if fn_base_lr = (None, None) + else: + return sched is None + + # Specifying `None` as a scheduler freezes params. + all_false = jax.tree_util.tree_map(lambda *bools: not any(bools), *masks) + frozen_masks = [ + mask for mask, sched in zip(masks, scheds) if _is_none(sched)] + frozen_mask = jax.tree_util.tree_map( + lambda *bools: any(bools), *frozen_masks, + all_false) # `all_false` is required when `frozen_masks==[]`. + masks, scheds = zip(*( + (mask, sched) for mask, sched in zip(masks, + scheds) if not _is_none(sched))) + return frozen_mask, masks, scheds + + +def make_mask_trees( + tree, + patterns_names: Sequence[Tuple[str, Optional[str], float]], + *, + allow_unmatched: bool = False, + log: Optional[str] = None, +): + """Returns a boolean mask tree for every pattern (only first match).""" + + patterns, _, _ = zip(*patterns_names) + compiled_patterns = list(map(re.compile, patterns)) + + def matchfirst(_, name): + matches = [bool(pattern.fullmatch(name)) for pattern in compiled_patterns] + + matched = sum(map(int, matches)) + matched_patterns = [patterns_names[i] for i, m in enumerate(matches) if m] + if matched > 1: + raise ValueError( + f'{name} matched by multiple patterns: {matched_patterns}') + + if matched == 0 and not allow_unmatched: + raise ValueError(f'{name} was *not* matched by a single pattern!') + + if log is not None: + if any(matches): + logging.info('%s: %s - matched by %s', log, name, + patterns_names[matches.index(True)]) + else: + logging.info('%s: %s - not matched by any patterns', log, name) + return np.array(matches) + + multimask = optimizers.tree_map_with_names_values(matchfirst, tree) + return [ + jax.tree_util.tree_map(lambda matches, i=idx: matches[i], multimask) + for idx in range(len(patterns)) + ] + + +def replace_frozen(schedule, pytree, replacement, log: Optional[str] = None): + """Replaces values matching frozen params in `pytree` with `replacement`.""" + if schedule is None: + return pytree + schedule = [(cfg.re, cfg.lr_configs) for name, cfg in schedule.items()] + + masks, scheds = _make_mask_trees(pytree, schedule, log=log) + frozen_mask, _, _ = _split_frozen(masks, [value for _, value in scheds]) + return jax.tree_util.tree_map( + lambda v, f: replacement if f else v, pytree, frozen_mask) + + +def make_schedule( + schedule: Optional[ml_collections.ConfigDict] = None, + get_learning_rate_fn: Callable[ + [ml_collections.ConfigDict], + optax.ScalarOrSchedule] = lr_schedules.get_learning_rate_fn, +) -> List[Tuple[str, str, Tuple[optax.ScalarOrSchedule, float]]]: + """Creates a schedule dictionary compatible with the `make` function.""" + # Global schedule. No schedule means frozen. + if schedule is None: + schedule = ml_collections.ConfigDict( + {'all': ml_collections.ConfigDict({'re': '(.*)', 'lr_configs': None})}) + schedule = [(cfg.re, name, cfg.lr_configs) for name, cfg in schedule.items()] + + # Create actual schedules funtions. + def create_schedule(lr_configs): + if lr_configs is None: + return None, None # Parameters are frozen + fn = get_learning_rate_fn( + ml_collections.ConfigDict({'lr_configs': lr_configs})) + # Base LR is used for decoupling WD from LR schedules. + base_lr = lr_configs.get('base_learning_rate', 1.0) + return fn, base_lr + + schedule = [(re, name, create_schedule(lr_configs)) + for re, name, lr_configs in schedule] + return schedule # pytype: disable=bad-return-type + + +def make(config: ml_collections.ConfigDict, + schedule: Sequence[ + Tuple[str, str, Tuple[optax.ScalarOrSchedule, float]]], + params): + """Returns gradient transform and learning rate functions. + + Args: + config: Optimizer config. + schedule: Learning rate schedules as tuple of regexp, name, learning rate + schedule function and base learning rate (for WD decoupling). + params: Model parameters. + """ + if not config.get('per_example_clipping'): + # Collect all base_lrs and transform to bool. Each element of schedule fol- + # lows the structure (re, name, (fn, base_lr)) [see above]. + base_lrs = [fn_base_lr[1] for _, _, fn_base_lr in schedule] + if any([base_lr == 0 for base_lr in base_lrs]): + raise ValueError( # raised if base_lr = 0 + f'`base_learning_rate` contains unsupported values {base_lrs}. If ' + 'your intention was to freeze parameters, use Scenic optax and ' + '`config.lr_configs = None` instead.') + masks, scheds = _make_mask_trees(params, schedule, log='schedule') + frozen_mask, masks, scheds = _split_frozen(masks, scheds) + not_frozen_mask = jax.tree_util.tree_map(operator.not_, frozen_mask) + schedule_fns, schedule_base_lr = zip( + *[fn_base for _, fn_base in (scheds or [])]) + schedule_txs = [ + optax.masked(optax.scale_by_schedule(schedule_fn), mask) + for schedule_fn, mask in zip(schedule_fns, masks) + ] + [ + # Removes weight decay updates. Note that weight decay already has an + # independent mask (which cannot be combined easily with a second mask), + # so instead we multiply updates for frozen params with zero. + optax.masked(optax.set_to_zero(), frozen_mask) + ] + + # Gradient clipping. + grad_clip_norm_tx = [] + if config.get('max_grad_norm'): + if not config.get('per_example_clipping'): + grad_clip_norm_tx = [ + optax.masked( + optax.clip_by_global_norm(config.max_grad_norm), + not_frozen_mask)] + elif 'optax_grad_pmean' in config: + if not config.optax_grad_pmean: + raise ValueError('Per-example gradient aggregateion outside of Optax ' + 'is not supported.') + + # Assume default pmean axis. + axis_name = 'batch' + if isinstance(config.optax_grad_pmean, str): + axis_name = config.optax_grad_pmean + + # Per-example clipping is implemented as differentially private gradients + # with *zero* noise. + grad_clip_norm_tx = [ + optax.masked( + optax.contrib.differentially_private_aggregate( + config.max_grad_norm, 0.0, 0), + not_frozen_mask), + aggregate_gradients_pmean(axis_name=axis_name)] + elif 'optax_grad_mean' in config: + if not config.optax_grad_mean: + raise ValueError('Per-example gradient aggregation outside of Optax ' + 'is not supported.') + grad_clip_norm_tx = [ + optax.masked( + optax.differentially_private_aggregate( + config.max_grad_norm, 0.0, 0), + not_frozen_mask),] + else: + raise ValueError( + 'When using per-example clipping, ' + 'optimizer.optax_grad_pmean or optimizer.optax_grad_mean must be set.' + ) + else: + grad_clip_norm_tx = [] + + # Optimizer updates. + tx_func = operator.attrgetter(config.optax_name)(optax) + opt_txs = [optax.masked( + tx_func(**config.get('optax_configs', {})), not_frozen_mask)] + + # Weight decay. Defaults to 0.0. + # Weight decay is not gradient-based but instead uses "params side-input". + # Hence, weight decay is additive and independent of previous gradient-based + # updates. + assert config.get('weight_decay_decouple', True), ( + 'Coupled weight decay not supported anymore.') + decay_rules = config.get('weight_decay', []) or [] + if isinstance(decay_rules, numbers.Number): + decay_rules = [('.*kernel.*', decay_rules)] + + if decay_rules: + decay_masks, mults = _make_mask_trees( + params, decay_rules, + allow_unmatched=True, log='config.optimizer.weight_decay') + mults = [mult for _, mult in mults] # Remove dummy "name" from the tuples. + + weight_decay_txs = [] + # Create decoupled WD masks by enumerating all schedule x decay mask + # combinations. + for (mult, decay_mask), (mask, base_lr) in itertools.product( + zip(mults, decay_masks), zip(masks, schedule_base_lr)): + weight_decay_txs.append( + optax.add_decayed_weights( + mult / base_lr if base_lr else 0.0, # Decouple WD from LR. + jax.tree_util.tree_map(lambda a, b: a and b, decay_mask, mask))) + else: + weight_decay_txs = [] + + # Combine gradient updates and learning rate schedules. + opt = optax.chain( + *grad_clip_norm_tx, + *opt_txs, + *weight_decay_txs, + *schedule_txs, + optax.scale(-1.0)) + return opt, schedule_fns + + +def aggregate_gradients_pmean( + axis_name: str = 'batch', +) -> optax.GradientTransformation: + """Aggregates gradients using JAX's pmean. + + Args: + axis_name: Name of the axis for pmean aggregation. + + Returns: + A `GradientTransformation`. + """ + + def init_fn(params): + del params + return None + + def update_fn(updates, state, params=None): + del params, state + return jax.lax.pmean(updates, axis_name=axis_name), None + + return optax.GradientTransformation(init_fn, update_fn) + +################# Scenic optimizers ############################## +# This is following the BV codebase pattern for defining a custom optimizer. +# A dummy object to allow for foo.bar access syntax, see +# https://stackoverflow.com/a/19476841/2366315 +optax.scenic = type('', (), {})() + + +def scale_by_adafactor(min_dim_size_to_factor=32, + decay_rate=0.8, decay_offset=0, + beta2_cap=0.999, + clipping_threshold=None, + momentum=0.9, dtype_momentum=jnp.bfloat16, + eps=1e-30): + """The BigVision variant of Adafactor optimizer.""" + + def _decay_rate_pow(i, exponent): + """Second-order moment decay schedule.""" + t = jnp.array(i, jnp.float32) + 1.0 + return jnp.minimum(beta2_cap, 1.0 - t**(-exponent)) + + scale_by_rms = optax.scale_by_factored_rms( + factored=True, + decay_rate=decay_rate, + step_offset=decay_offset, + min_dim_size_to_factor=min_dim_size_to_factor, + epsilon=eps, + decay_rate_fn=_decay_rate_pow) + + clip = (optax.clip_by_block_rms(clipping_threshold) if clipping_threshold + else optax.identity()) + + mom = (optax.ema(momentum, debias=False, accumulator_dtype=dtype_momentum) + if momentum else optax.identity()) + + return optax.chain(scale_by_rms, clip, mom) + +optax.scenic.scale_by_adafactor = scale_by_adafactor # pytype: disable=module-attr + + +def momentum_hp(momentum=0.9, dtype=jnp.bfloat16, nesterov=False): + """SGD-Momentum with half-precision accumulator.""" + return optax.trace(decay=momentum, accumulator_dtype=dtype, nesterov=nesterov) + + +optax.scenic.momentum_hp = momentum_hp # pytype: disable=module-attr diff --git a/scenic/train_lib/optimizers.py b/scenic/train_lib/optimizers.py new file mode 100644 index 0000000000000000000000000000000000000000..ff2c804b38bafcf36b95c82f4adce842cb0bc0a6 --- /dev/null +++ b/scenic/train_lib/optimizers.py @@ -0,0 +1,345 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Defines different optimizers with optax. + +Based on +https://github.com/google-research/big_vision/blob/main/big_vision/optax.py +and +https://github.com/google-research/big_vision/blob/main/big_vision/utils.py +""" +import copy +import dataclasses +import operator +import re +from typing import Any, Callable, Generator, List, Optional, Tuple, Union + +from absl import logging +import flax +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +import optax + + +# JAX team is working type checking for pytrees: +# https://github.com/jax-ml/jax/issues/3340 +PyTree = Any +ScalarOrSchedule = Union[float, optax.Schedule] + + +def get_optimizer( + optimizer_config: ml_collections.ConfigDict, + learning_rate_fn: ScalarOrSchedule, + params: Optional[PyTree] = None, +) -> optax.GradientTransformation: + """Constructs the optimizer from the given configuration. + + The function is constructed in such a way that it will throw errors if + fields in the optimizer_config are misspelled. + + Args: + optimizer_config: Configuration specific to the optimizer. The config + can contain the following fields: + - optimizer: name of the optax optimizer. + - **kwargs: fields specific to the optax optimizer. + - weight_decay: value of the weight decay. + - skip_scale_and_bias_regularization: if True, do not apply weight + decay to scale and biases. + - grad_clip: configdict with settings of gradient clipping. + - freeze_params_reg_exp: regular expression to define which weights + will be frozen during training. This uses re.search, so 'conv' would + match any parameter which has 'conv' somewhere in its name such as + 'cnn/first_conv_layer/bias'. Note that only parameters will be frozen, + which means batch_norm remains unaffected. + learning_rate_fn: Learning rate schedule. + params: Parameters pytree, used when we want to skip weight decay on bias + and scale parameters. Also used for freezing weights. + + Returns: + An optax GradientTransformation, this consists of a pair of pure functions + implementing a gradient transformation. + """ + # Avoid modifying original config and allow alteration. + config = copy.deepcopy(optimizer_config).unlock() + + # Skip weight decay for BatchNorm scale or for the bias parameters. + weight_decay_mask = None + if config.get('skip_scale_and_bias_regularization') is not None: + if (config.skip_scale_and_bias_regularization and + config.get('weight_decay', 0)): + if params is None: + raise ValueError('params must be given to obtain weight_decay_mask.') + weight_decay_mask = jax.tree_util.tree_map(lambda x: x.ndim != 1, params) + if 'skip_scale_and_bias_regularization' in config: + del config.skip_scale_and_bias_regularization + + optim_ops = [] + # Add weight decay for sgd (possibly with momentum and nesterov). + if config.optimizer == 'sgd' and 'weight_decay' in config: + if config.weight_decay: + optim_ops.append( + optax.add_decayed_weights(config.weight_decay, weight_decay_mask)) + del config.weight_decay + + if weight_decay_mask and config.optimizer in {'adamw', 'lamb', 'adamaxw'}: + config.mask = weight_decay_mask + elif weight_decay_mask and config.optimizer in {'adafactor', 'lars'}: + config.weight_decay_mask = weight_decay_mask + + # Add gradient clipping before optimizer operations. + if config.get('grad_clip') is not None: + grad_clip_config = config.grad_clip + clip_method = grad_clip_config.get('clip_method', None) + clip_value = grad_clip_config.get('clip_value', None) + if clip_method is not None and clip_value is not None: + if clip_method == 'clip_by_global_norm': + optim_ops.append(optax.clip_by_global_norm(clip_value)) + elif clip_method == 'adaptive_grad_clip': + optim_ops.append(optax.adaptive_grad_clip(clip_value)) + elif clip_method == 'clip': + optim_ops.append(optax.clip(clip_value)) + elif clip_method == 'clip_by_block_rms': + optim_ops.append(optax.clip_by_block_rms(clip_value)) + else: + logging.info('%s is not supported', clip_method) + if 'grad_clip' in config: + del config.grad_clip + + # Remove freeze_params_reg_exp here. This should be the last operation to + # ensure parameters are truly frozen. But this field needs to be removed + # because all remaining fields in the config are given to the optimizer. + freeze_mask = None + unfreeze_mask = None + if config.get('freeze_params_reg_exp') is not None: + if params is None: + raise ValueError('params must be given to obtain frozen parameters.') + freeze_mask = tree_mask(params, config.freeze_params_reg_exp) + unfreeze_mask = jax.tree_util.tree_map(lambda x: not x, freeze_mask) + del config.freeze_params_reg_exp + + num_params_unfrozen = jax.tree_util.tree_reduce(operator.add, unfreeze_mask) + if not num_params_unfrozen: + raise ValueError('freeze_params_reg_exp matched all parameters in ' + 'the model, which prevents any training from happening.') + if 'freeze_params_reg_exp' in config: + del config.freeze_params_reg_exp + + # Call the optax optimizer with exact arguments as in the config. + # This throws an error when the config has (spelling) mistakes. + optimizer_fn = getattr(optax, config.optimizer) + del config.optimizer + optax_optimizer = optimizer_fn(learning_rate=learning_rate_fn, **config) + # Apply to unfrozen weights to prevent change in optimizer state. + # In turn, this prevents unnecessary gradient calculations. + if unfreeze_mask: + optax_optimizer = optax.masked(optax_optimizer, unfreeze_mask) + optim_ops.append(optax_optimizer) + + # Freezing params should be the final operation in the optax chain to ensure + # that freezing overrides everything including weight decay. + if freeze_mask: + optim_ops.append(optax.masked(optax.set_to_zero(), freeze_mask)) + + # Log variables which will change during training. + freeze_mask_flat = flax.traverse_util.flatten_dict(freeze_mask, sep='/') + logging.info('Freeze mask set. Training only on the following params:') + for param_name, value in freeze_mask_flat.items(): + if not value: + logging.info('--> %s', param_name) + + return optax.chain(*optim_ops) + + +def tree_mask(params: PyTree, reg_exp: str): + """Returns a tree mask based on regular expression for use with optax.masked. + + Args: + params: PyTree with parameters. + reg_exp: Regular expression. Will be compiled and used together with + re.search. + """ + pattern = re.compile(reg_exp) + + def match_var_name(_, name): + if pattern.search(name): + return True + return False + + return tree_map_with_names_values(match_var_name, params) + + +def get_optax_optimizer_config( + config: ml_collections.ConfigDict) -> ml_collections.ConfigDict: + """Obtain optimizer from main config.""" + optimizer_config = config.get('optimizer_configs', + ml_collections.ConfigDict()) + + # New-style config: all optimizer-related fields are in optimizer_configs. + if 'optimizer' in optimizer_config: + if 'optimizer' in config: + raise ValueError( + 'Both config.optimizer and config.optimizer_configs.optimizer are ' + 'defined. Define it only once to avoid possible contradictions. ' + 'The preferred location is in config.optimizer_configs.optimizer') + return optimizer_config + + # Backwards compatibility: copy optimizer field into the optimizer config. + optimizer_config = copy.deepcopy(optimizer_config).unlock() + if 'optimizer' in config: + optimizer_config.optimizer = config.optimizer + + # The old optimizers have adam with weight decay. However, in optax this is + # done using the adamw optimizer. + if config.optimizer == 'adam' and 'weight_decay' in optimizer_config: + optimizer_config.optimizer = 'adamw' + + if config.optimizer == 'momentum': + optimizer_config.optimizer = 'sgd' + if 'momentum' not in optimizer_config: + # flax.optim had a default momentum value of 0.9. + # optax.sgd has a default momentum of 0. + logging.warning( + 'flax.optim had a default momentum value of 0.9. optax has a ' + 'default value of 0. As a momentum value was not specified, ' + 'adding momentum=0.9 to optimizer config.') + optimizer_config.momentum = 0.9 + + if config.optimizer == 'nesterov': + optimizer_config.optimizer = 'sgd' + optimizer_config.nesterov = True + + if 'skip_scale_and_bias_regularization' in config: + optimizer_config.skip_scale_and_bias_regularization = ( + config.skip_scale_and_bias_regularization) + + optimizer_config = _scenic_optimizer_args_to_optax_args(optimizer_config) + + if 'grad_clip_configs' in config: + optimizer_config.grad_clip = config.grad_clip_configs + + optimizer_config.lock() + logging.info('Optimizer config after backwards compatibility operations:\n%s', + optimizer_config) + return optimizer_config + + +def _scenic_optimizer_args_to_optax_args( + config: ml_collections.ConfigDict) -> ml_collections.ConfigDict: + """Transform original scenic arguments to optax arguments.""" + if 'beta1' in config: + config.b1 = config.beta1 + del config.beta1 + if 'beta2' in config: + config.b2 = config.beta2 + del config.beta2 + if 'epsilon' in config: + config.eps = config.epsilon + del config.epsilon + return config + + +def _traverse_with_names( + tree: PyTree) -> Generator[Tuple[str, PyTree], None, None]: + """Traverses nested dicts/dataclasses and emits (leaf_name, leaf_val).""" + if dataclasses.is_dataclass(tree): + tree = flax.serialization.to_state_dict(tree) + if isinstance(tree, (dict, flax.core.frozen_dict.FrozenDict)): + keys = sorted(tree.keys()) + for key in keys: + for path, v in _traverse_with_names(tree[key]): + yield (key + '/' + path).rstrip('/'), v + else: + yield '', tree + + +def tree_flatten_with_names( + tree: PyTree) -> Tuple[List[Tuple[str, jnp.ndarray]], PyTree]: + """Populates tree_flatten with leaf names. + + This function populates output of tree_flatten with leaf names, using a + custom traversal that produces names is provided. The custom traversal does + NOT have to traverse tree in the same order as jax, as we take care of + automatically aligning jax' and custom traversals. + + Args: + tree: python tree. + + Returns: + A list of values with names: [(name, value), ...] + """ + vals, tree_def = jax.tree_util.tree_flatten(tree) + + # "Fake" token tree that is use to track jax internal tree traversal and + # adjust our custom tree traversal to be compatible with it. + tokens = range(len(vals)) + token_tree = tree_def.unflatten(tokens) + val_names, perm = zip(*_traverse_with_names(token_tree)) + inv_perm = np.argsort(perm) + + # Custom traverasal should visit the same number of leaves. + assert len(val_names) == len(vals) + + return [(val_names[i], v) for i, v in zip(inv_perm, vals)], tree_def + + +def tree_map_with_names( + f: Callable[[jnp.ndarray], jnp.ndarray], + param_tree: PyTree, + match_name_fn: Callable[[str], bool] = lambda name: True) -> PyTree: + """Like jax.tree_util.tree_map but with a filter on the leaf path name. + + Args: + f: The function to be applied to each parameter in `param_tree`. Takes value + as argument. + param_tree: The tree of parameters `f` should be applied to. + match_name_fn: This function is called with each tree leaf's path name, + which has a path-like format ("a/b/c"), and decides whether `f` should be + applied to that leaf or the leaf should be kept as-is. + + Returns: + A tree identical in structure to `param_tree` but with the leaves the + result of calling `f` on them in the cases where `match_name_fn` returns + True for that leaf's path name. + """ + names_and_vals, tree_def = tree_flatten_with_names(param_tree) + vals = [f(v) if match_name_fn(name) else v for name, v in names_and_vals] + return tree_def.unflatten(vals) + + +def tree_map_with_names_values( + f: Callable[[jnp.ndarray, str], jnp.ndarray], + param_tree: PyTree, + match_name_fn: Callable[[str], bool] = lambda name: True) -> PyTree: + """Like tree_map_with_names but with `f` having access to values *and* names. + + Args: + f: The function to be applied to each parameter in `param_tree`. Takes value + and name as arguments. + param_tree: The tree of parameters `f` should be applied to. + match_name_fn: This function is called with each tree leaf's path name, + which has a path-like format ("a/b/c"), and decides whether `f` should be + applied to that leaf or the leaf should be kept as-is. + + Returns: + A tree identical in structure to `param_tree` but with the leaves the + result of calling `f` on them in the cases where `match_name_fn` returns + True for that leaf's path name. + """ + names_and_vals, tree_def = tree_flatten_with_names(param_tree) + vals = [ + f(v, name) if match_name_fn(name) else v for name, v in names_and_vals + ] + return tree_def.unflatten(vals) diff --git a/scenic/train_lib/pretrain_utils.py b/scenic/train_lib/pretrain_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..6a8c8078337d084765d7f7460104a7027b88be78 --- /dev/null +++ b/scenic/train_lib/pretrain_utils.py @@ -0,0 +1,353 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utility functions for using pretrained models.""" + +from collections import abc +import os +import re +from typing import Any, Dict, Mapping, List, Optional, Union + +from absl import logging +from big_vision import utils +import flax +from flax.training import checkpoints +import numpy as np + +from scenic.train_lib import train_utils +from tensorflow.io import gfile + +# JAX team is working on type annotation for pytree: +# https://github.com/jax-ml/jax/issues/1555 +PyTree = Union[Mapping[str, Mapping], Any] + + +def _replace_dict(model: PyTree, + restored: PyTree, + ckpt_prefix_path: Optional[List[str]] = None, + model_prefix_path: Optional[List[str]] = None, + name_mapping: Optional[Mapping[str, str]] = None, + skip_regex: Optional[str] = None) -> PyTree: + """Replaces values in model dictionary with restored ones from checkpoint.""" + name_mapping = name_mapping or {} + + model = flax.core.unfreeze(model) # pytype: disable=wrong-arg-types + restored = flax.core.unfreeze(restored) # pytype: disable=wrong-arg-types + + if ckpt_prefix_path: + for p in ckpt_prefix_path: + restored = restored[p] + + if model_prefix_path: + for p in reversed(model_prefix_path): + restored = {p: restored} + + # Flatten nested parameters to a dict of str -> tensor. Keys are tuples + # from the path in the nested dictionary to the specific tensor. E.g., + # {'a1': {'b1': t1, 'b2': t2}, 'a2': t3} + # -> {('a1', 'b1'): t1, ('a1', 'b2'): t2, ('a2',): t3}. + restored_flat = flax.traverse_util.flatten_dict( + dict(restored), keep_empty_nodes=True) + model_flat = flax.traverse_util.flatten_dict( + dict(model), keep_empty_nodes=True) + + for m_key, m_params in restored_flat.items(): + # pytype: disable=attribute-error + for name, to_replace in name_mapping.items(): + m_key = tuple(to_replace if k == name else k for k in m_key) + # pytype: enable=attribute-error + m_key_str = '/'.join(m_key) + if m_key not in model_flat: + logging.warning('%s in checkpoint doesn\'t exist in model. Skip.', + m_key_str) + continue + if skip_regex and re.findall(skip_regex, m_key_str): + logging.info('Skip loading parameter %s.', m_key_str) + continue + logging.info('Loading %s from checkpoint into model', m_key_str) + model_flat[m_key] = m_params + + return flax.core.freeze(flax.traverse_util.unflatten_dict(model_flat)) + + +def init_from_pretrain_state( + train_state: train_utils.TrainState, + pretrain_state: Union[PyTree, train_utils.TrainState], + ckpt_prefix_path: Optional[List[str]] = None, + model_prefix_path: Optional[List[str]] = None, + name_mapping: Optional[Mapping[str, str]] = None, + skip_regex: Optional[str] = None) -> train_utils.TrainState: + """Updates the train_state with data from pretrain_state. + + Args: + train_state: A raw TrainState for the model. + pretrain_state: A TrainState that is loaded with parameters/state of + a pretrained model. + ckpt_prefix_path: Prefix to restored model parameters. + model_prefix_path: Prefix to the parameters to replace in the subtree model. + name_mapping: Mapping from parameter names of checkpoint to this model. + skip_regex: If there is a parameter whose parent keys match the regex, + the parameter will not be replaced from pretrain_state. + + Returns: + Updated train_state. + """ + name_mapping = name_mapping or {} + restored_params = pretrain_state['params'] + restored_model_state = pretrain_state['model_state'] + model_params = _replace_dict(train_state.params, restored_params, + ckpt_prefix_path, model_prefix_path, + name_mapping, skip_regex) + train_state = train_state.replace(params=model_params) + # TODO(scenic): Add support for optionally restoring optimizer state. + if (restored_model_state is not None and + train_state.model_state is not None and train_state.model_state): + if model_prefix_path: + # Insert model prefix after 'batch_stats'. + model_prefix_path = ['batch_stats'] + model_prefix_path + if 'batch_stats' in restored_model_state: + ckpt_prefix_path = ckpt_prefix_path or [] + ckpt_prefix_path = ['batch_stats'] + ckpt_prefix_path + elif 'batch_stats' not in restored_model_state: # Backward compatibility. + model_prefix_path = ['batch_stats'] + if ckpt_prefix_path and ckpt_prefix_path[0] != 'batch_stats': + ckpt_prefix_path = ['batch_stats'] + ckpt_prefix_path + model_state = _replace_dict(train_state.model_state, + restored_model_state, + ckpt_prefix_path, + model_prefix_path, + name_mapping, + skip_regex) + train_state = train_state.replace( # pytype: disable=attribute-error + model_state=model_state) + return train_state + + +def restore_pretrained_checkpoint( + checkpoint_path: str, + train_state: Optional[train_utils.TrainState] = None, + assert_exist: bool = False, + step: Optional[int] = None) -> train_utils.TrainState: + """Restores the last checkpoint. + + First restores the checkpoint, which is an instance of TrainState that holds + the state of training. This function also take care converting pre-Linen + checkpoints. + + Args: + checkpoint_path: Directory for saving the checkpoint. + train_state: An instance of TrainState that holds the state of training. + assert_exist: Assert that there is at least one checkpoint exists in the + given path. + step: Step number to load or None to load latest. If specified, + checkpoint_path must be a directory. + + Returns: + Training state and an int which is the current step. + """ + if assert_exist: + glob_path = os.path.join(checkpoint_path, 'checkpoint_*') + if not gfile.glob(glob_path): + raise ValueError('No checkpoint for the pretrained model is found in: ' + f'{checkpoint_path}') + restored_train_state = checkpoints.restore_checkpoint(checkpoint_path, None, + step) + if restored_train_state is None: + raise ValueError('No checkpoint for the pretrained model is found in: ' + f'{checkpoint_path}') + if 'params' in restored_train_state: + # restored_train_state was trained using optax + restored_params = flax.core.freeze(restored_train_state['params']) + else: + # restored_train_state was trained using flax.optim. Note that this does + # not convert the naming of pre-Linen checkpoints. + restored_params = restored_train_state['optimizer']['target'] + if 'params' in restored_params: # Backward compatibility. + restored_params = restored_params['params'] + restored_params = dict(checkpoints.convert_pre_linen(restored_params)) + restored_params = flax.core.freeze(restored_params) + + restored_model_state = ( + None if restored_train_state['model_state'] is None else + flax.core.freeze(restored_train_state['model_state']) + ) + + if not train_state: + train_state = train_utils.TrainState() + params = restored_params + else: + # Inspect and compare the parameters of the model with the init-model. + params = inspect_params( + expected_params=train_state.params, + restored_params=restored_params, + fail_if_extra=False, + fail_if_missing=False, + fail_if_shapes_mismatch=False) + train_state = train_state.replace( + # Inspect and compare the parameters of the model with the init-model. + params=params, + model_state=restored_model_state, + global_step=int(restored_train_state['global_step']), + rng=restored_train_state['rng'], + metadata=restored_train_state.get('metadata', None)) + return train_state + + +# pylint: disable=g-doc-args,g-doc-return-or-yield +def inspect_params(*, + expected_params: PyTree, + restored_params: PyTree, + fail_if_extra: bool = True, + fail_if_missing: bool = True, + fail_if_shapes_mismatch: bool = False) -> PyTree: + """Inspects whether the params are consistent with the expected keys. + + Based on + https://github.com/google-research/big_vision/blob/main/big_vision/model/common.py. + """ + + def _flatten_params(d, parent_key='', sep='/'): + """Flattens a dictionary, keeping empty leaves.""" + items = [] + for k, v in d.items(): + path = parent_key + sep + k if parent_key else k + if isinstance(v, abc.MutableMapping): + items.extend(_flatten_params(v, path, sep=sep).items()) + else: + items.append((path, v)) + # Keeps the empty dict if it was set explicitly. + if parent_key and not d: + items.append((parent_key, {})) + return dict(items) + + expected_flat = _flatten_params(flax.core.unfreeze(expected_params)) + restored_flat = _flatten_params(flax.core.unfreeze(restored_params)) + missing_keys = expected_flat.keys() - restored_flat.keys() + extra_keys = restored_flat.keys() - expected_flat.keys() + + is_shape_mismatch = False + for key in restored_flat: + if key in expected_flat: + restored_shape = None + expected_shape = None + # Handle empty nodes (without trainable params) + if not isinstance(restored_flat[key], dict): + restored_shape = restored_flat[key].shape + if not isinstance(expected_flat[key], dict): + expected_shape = expected_flat[key].shape + + if restored_shape != expected_shape: + is_shape_mismatch = True + logging.warning('Key: %s. Expected shape: %s. Restored shape: %s', key, + expected_flat[key].shape, restored_flat[key].shape) + + # Adds back empty dict explicitly, to support layers without weights. + # Context: FLAX ignores empty dict during serialization. + empty_keys = set() + for k in missing_keys: + if isinstance(expected_flat[k], dict) and not expected_flat[k]: + restored_params[k] = {} # pytype: disable=unsupported-operands + empty_keys.add(k) + missing_keys -= empty_keys + + if empty_keys: + logging.warning('Inspect recovered empty keys:\n%s', empty_keys) + + logging.info('Inspect missing keys:\n%s', missing_keys) + logging.info('Inspect extra keys:\n%s', extra_keys) + + if fail_if_shapes_mismatch and is_shape_mismatch: + raise ValueError('Shape mismatch between restored and target model') + + if (missing_keys and fail_if_missing) or (extra_keys and fail_if_extra): + raise ValueError( + f'Missing params from checkpoint: {missing_keys}.\n' + f'Extra params in checkpoint: {extra_keys}.\n' + f'Restored params from checkpoint: {restored_flat.keys()}.\n' + f'Expected params from code: {expected_flat.keys()}.') + return restored_params +# pylint: enable=g-doc-args,g-doc-return-or-yield + + +def convert_big_vision_to_scenic_checkpoint( + checkpoint_path: str, + train_state: Optional[train_utils.TrainState] = None, + convert_to_linen: bool = True) -> train_utils.TrainState: + """Converts a big_vision checkpoint to a scenic train state. + + The model weights, global step and accumulated train time are extracted. + Optimizer state, such as the momentum, is not extracted. + + Args: + checkpoint_path: Path to big_vision checkpoint. + train_state: A Scenic TrainState object. + convert_to_linen: Whether to convert to Linen format. + + Returns: + restored_train_state: Scenic train state with model weights, global step + and accumulated training time. + """ + + def unflatten_dict(flattened: Dict[str, Any], + separator: str = '/', + leaf_idx: int = -1) -> Dict[str, Any]: + unflattened = {} + for k, v in flattened.items(): + subtree = unflattened + if leaf_idx != 0: + path = k.split(separator)[:leaf_idx] + else: + path = k.split(separator) + for k2 in path[:-1]: + if k2 not in subtree: + subtree[k2] = {} + subtree = subtree[k2] + subtree[path[-1]] = v + return unflattened + + logging.info('Loading big_vision checkpoint from %s', checkpoint_path) + if '.bv' in checkpoint_path: + checkpoint_data = utils.load_checkpoint_ts(checkpoint_path) + else: + checkpoint_data = np.load(gfile.GFile(checkpoint_path, 'rb')) + tree = unflatten_dict(checkpoint_data, separator='/', leaf_idx=0) + + restored_params = ( + tree['opt']['target'] + if 'target' in tree.get('opt', {}) + else tree['params'] + ) + if convert_to_linen: + restored_params = checkpoints.convert_pre_linen(restored_params) + restored_params = dict(restored_params) + if train_state: + restored_params = inspect_params( + expected_params=train_state.params, + restored_params=restored_params, + fail_if_extra=False, + fail_if_missing=False, + fail_if_shapes_mismatch=False) + else: + train_state = train_utils.TrainState() + + # pytype: disable=wrong-arg-types + restored_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=int( + tree['opt']['state']['step'] if 'state' in tree.get('opt', {}) else 0 + ), + params=restored_params, + ) + # pytype: enable=wrong-arg-types + + return restored_train_state diff --git a/scenic/train_lib/tests/__init__.py b/scenic/train_lib/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/train_lib/tests/test_classification_trainer.py b/scenic/train_lib/tests/test_classification_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..c5c5036bdbf28a9cfa4b2075d782b8034807239c --- /dev/null +++ b/scenic/train_lib/tests/test_classification_trainer.py @@ -0,0 +1,284 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for the classification train script.""" + +import functools +import shutil +import tempfile + +from absl.testing import absltest +from clu import metric_writers +import flax +from flax import jax_utils +import flax.linen as nn +import jax.numpy as jnp +import jax.random +import ml_collections +import numpy as np +from scenic.dataset_lib import datasets +from scenic.model_lib import models +from scenic.model_lib.base_models import classification_model +from scenic.model_lib.base_models import multilabel_classification_model +from scenic.train_lib import classification_trainer +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils +import tensorflow as tf +import tensorflow_datasets as tfds + + +class ClassificationTrainerTest(absltest.TestCase): + """Tests the default trainer on single device setup.""" + + def setUp(self): + super(ClassificationTrainerTest, self).setUp() + self.test_dir = tempfile.mkdtemp() + # make sure tf does not allocate gpu memory + tf.config.experimental.set_visible_devices([], 'GPU') + + def tearDown(self): + shutil.rmtree(self.test_dir) + super(ClassificationTrainerTest, self).tearDown() + + def get_train_state(self, rng, fake_batch_logits): + """Generates the initial training state.""" + config = ml_collections.ConfigDict({ + 'lr_configs': { + 'base_learning_rate': 0.1, + }, + 'optimizer': 'sgd', + }) + + # define a fake model that always outputs the same logits: fake_batch_logits + class FakeFlaxModel(nn.Module): + """A fake flax model.""" + + @nn.compact + def __call__(self, x, train=False, debug=False): + del x + del train + del debug + # FakeFlaxModule always predicts class 2. + return fake_batch_logits + + dummy_input = jnp.zeros((10, 10), jnp.float32) + initial_params = FakeFlaxModel().init(rng, dummy_input).get( + 'params', flax.core.frozen_dict.FrozenDict({})) + init_model_state = flax.core.frozen_dict.FrozenDict({}) + lr_fn = lr_schedules.get_learning_rate_fn(config) + optimizer_config = optimizers.get_optax_optimizer_config(config) + tx = optimizers.get_optimizer(optimizer_config, lr_fn) + opt_state = jax.jit(tx.init, backend='cpu')(initial_params) + init_train_state = jax_utils.replicate( + train_utils.TrainState( + global_step=0, + params=initial_params, + tx=tx, opt_state=opt_state, + model_state=init_model_state, + rng=jax.random.PRNGKey(0))) + return FakeFlaxModel(), init_train_state + + def train_and_evaluation(self, model, train_state, fake_batches, metrics_fn): + """Given the train_state, trains the model on fake batches.""" + eval_metrics = [] + fake_batches_replicated = jax_utils.replicate(fake_batches) + + eval_step_pmapped = jax.pmap( + functools.partial( + classification_trainer.eval_step, + flax_model=model, + metrics_fn=metrics_fn, + debug=False), + axis_name='batch', + donate_argnums=(1,), + ) + for fake_batch in fake_batches_replicated: + metrics, _ = eval_step_pmapped(train_state, fake_batch) + metrics = train_utils.unreplicate_and_get(metrics) + eval_metrics.append(metrics) + eval_metrics = train_utils.stack_forest(eval_metrics) + eval_summary = jax.tree_util.tree_map(lambda x: x.sum(), eval_metrics) + for key, val in eval_summary.items(): + eval_summary[key] = val[0] / val[1] + return eval_summary + + def test_classifaction_model_evaluate(self): + """Test trainer evaluate end to end with classification model metrics.""" + # define a fix output for the fake flax model + fake_batch_logits = np.tile([.5, .2, .7, 0.0], (4, 1)) + # 4 evaluation batches of size 4. + fake_batches = [ + { + 'inputs': None, + 'label': np.array([3, 2, 1, 0]) + }, + { + 'inputs': None, + 'label': np.array([0, 3, 2, 0]) + }, + { + 'inputs': None, + 'label': np.array([0, 0, 0, 0]) + }, + { + 'inputs': None, + 'label': np.array([1, 1, 1, 1]) + }, + ] + + rng = jax.random.PRNGKey(0) + model, train_state = self.get_train_state(rng, fake_batch_logits) + eval_summary = self.train_and_evaluation( + model, train_state, fake_batches, + functools.partial( + classification_model.classification_metrics_function, + target_is_onehot=False)) + + def batch_loss(logits, targets): + # softmax cross-entropy loss + one_hot_targets = np.eye(4)[targets] + loss = -np.sum(one_hot_targets * nn.log_softmax(logits), axis=-1) + return loss + + expected_accuracy = 2.0 / 16.0 # FakeFlaxModule always predicts class 2. + expected_loss = np.mean( + [batch_loss(fake_batch_logits, b['label']) for b in fake_batches]) + + self.assertEqual(expected_accuracy, eval_summary['accuracy']) + np.testing.assert_allclose(expected_loss, eval_summary['loss'], atol=1e-6) + + def test_multi_label_classifaction_model_evaluate(self): + """Test trainer evaluate with multi-label classification model metrics.""" + # define a fix output for the fake flax model + fake_batch_logits = np.tile([.5, .2, .7, 0.0], (4, 1)) + # 4 evaluation batches of size 4, with multihot labels. + fake_batches = [ + { + 'inputs': + None, + 'label': + np.array([[1, 0, 0, 1], [0, 0, 1, 0], [0, 1, 0, 0], + [1, 0, 0, 1]]) + }, + { + 'inputs': + None, + 'label': + np.array([[1, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 1], + [1, 0, 0, 1]]) + }, + { + 'inputs': + None, + 'label': + np.array([[1, 0, 0, 1], [1, 0, 0, 0], [1, 1, 0, 0], + [1, 0, 0, 0]]) + }, + { + 'inputs': + None, + 'label': + np.array([[0, 1, 0, 1], [0, 1, 0, 0], [1, 1, 0, 0], + [0, 1, 0, 0]]) + }, + ] + + rng = jax.random.PRNGKey(0) + model, train_state = self.get_train_state(rng, fake_batch_logits) + eval_summary = self.train_and_evaluation( + model, train_state, fake_batches, + functools.partial( + multilabel_classification_model + .multilabel_classification_metrics_function, + target_is_multihot=True)) + + def batch_loss(logits, multi_hot_targets): + # sigmoid cross-entropy loss + log_p = jax.nn.log_sigmoid(logits) + log_not_p = jax.nn.log_sigmoid(-logits) + loss = -np.sum( + multi_hot_targets * log_p + (1. - multi_hot_targets) * log_not_p, + axis=-1) + return loss + + expected_prec_at_one = 2.0 / 16.0 # FakeFlaxModule always predicts class 2. + expected_loss = np.mean( + [batch_loss(fake_batch_logits, b['label']) for b in fake_batches]) + + self.assertEqual(expected_prec_at_one, eval_summary['prec@1']) + np.testing.assert_allclose(expected_loss, eval_summary['loss'], atol=1e-6) + + def test_trainer(self): + """Test training for two epochs on MNIST with a small model.""" + + rng = jax.random.PRNGKey(0) + np.random.seed(0) + config = ml_collections.ConfigDict({ + 'dataset_name': 'mnist', + 'data_dtype_str': 'float32', + 'rng_seed': 0, + 'lr_configs': { + 'learning_rate_schedule': 'compound', + 'factors': 'constant * cosine_decay', + 'steps_per_cycle': 100, + 'base_learning_rate': 0.1, + }, + 'hid_sizes': [20, 10], + 'model_dtype_str': 'float32', + 'optimizer': 'momentum', + 'optimizer_configs': { + 'momentum': 0.9 + }, + 'batch_size': 128, + 'eval_batch_size': 64, + 'l2_decay_factor': .0005, + 'max_grad_norm': None, + 'label_smoothing': None, + 'write_summary': None, # no summary writing + 'checkpoint': False, # no checkpointing + 'debug_eval': False, + 'debug_train': False, + 'xprof': False, + }) + + with tfds.testing.mock_data(num_examples=1024): + model_cls = models.get_model_cls('fully_connected_classification') + dataset_builder = datasets.get_dataset('mnist') + + dataset = dataset_builder( + batch_size=config.batch_size, + eval_batch_size=config.eval_batch_size, + num_shards=jax.local_device_count(), + dtype_str=config.data_dtype_str) + + config.num_training_steps = 100 + config.log_eval_steps = 50 + config.num_training_epochs = None + _, train_summary, eval_summary = classification_trainer.train( + rng=rng, + config=config, + model_cls=model_cls, + dataset=dataset, + workdir=self.test_dir, + writer=metric_writers.LoggingWriter()) + + self.assertGreaterEqual(train_summary['accuracy'], 0.0) + self.assertLess(train_summary['loss'], 5.0) + self.assertGreaterEqual(eval_summary['accuracy'], 0.0) + self.assertLess(eval_summary['loss'], 5.0) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/train_lib/tests/test_lr_schedules.py b/scenic/train_lib/tests/test_lr_schedules.py new file mode 100644 index 0000000000000000000000000000000000000000..c4076c179348c56586997f988efd8ddfb0df0766 --- /dev/null +++ b/scenic/train_lib/tests/test_lr_schedules.py @@ -0,0 +1,144 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for lr_schedules.py.""" + +from absl.testing import absltest +import ml_collections +from scenic.train_lib import lr_schedules +import tensorflow as tf + + +class LearningRateScchedulesTest(absltest.TestCase): + """Tests different learning rate schedules .""" + + def test_constant(self): + """Test constant schedule works correctly.""" + config = ml_collections.ConfigDict( + dict( + lr_configs={ + 'learning_rate_schedule': 'compound', + 'factors': 'constant', + 'base_learning_rate': .1, + })) + lr_fn = lr_schedules.get_learning_rate_fn(config) + config = config.lr_configs + for step in range(400): + expected_learning_rate = config.base_learning_rate + self.assertAlmostEqual(lr_fn(step), expected_learning_rate) + + def test_constant_linear_warmup(self): + """Test that linear warmup schedule works correctly.""" + warmup_steps = 100 + warmup_alpha = 0.1 + config = ml_collections.ConfigDict( + dict( + lr_configs={ + 'learning_rate_schedule': 'compound', + 'factors': 'constant*linear_warmup', + 'base_learning_rate': 1.0, + 'warmup_steps': warmup_steps, + 'warmup_alpha': warmup_alpha + })) + lr_fn = lr_schedules.get_learning_rate_fn(config) + for step in range(400): + if step == 0: + self.assertEqual(lr_fn(step), warmup_alpha) + if step > 0 and step < warmup_steps: + self.assertGreater(lr_fn(step), lr_fn(step - 1)) + if step >= warmup_steps: + self.assertEqual(lr_fn(step), 1.0) + + def test_polynomial_decay(self): + """Test polynomial schedule works correctly.""" + config = ml_collections.ConfigDict( + dict( + lr_configs={ + 'learning_rate_schedule': 'compound', + 'factors': 'constant*polynomial', + 'decay_steps': 200, + 'power': 2.0, + 'base_learning_rate': .1, + 'end_factor': .01 + })) + lr_fn = lr_schedules.get_learning_rate_fn(config) + config = config.lr_configs + tf_polynomial_decay = tf.keras.optimizers.schedules.PolynomialDecay( + initial_learning_rate=config['base_learning_rate'], + decay_steps=config['decay_steps'], + end_learning_rate=config['end_factor'] * config['base_learning_rate'], + power=config['power']) + for step in range(400): + expected_learning_rate = tf_polynomial_decay(step=step).numpy() + self.assertAlmostEqual(lr_fn(step), expected_learning_rate) + + def test_exponential_decay(self): + """Test exponential schedule works correctly.""" + for test_params in [ + {'decay_steps': 200, 'decay_rate': 0.99, 'staircase': True}, + {'decay_steps': 200, 'decay_rate': 0.99, 'staircase': False}, + ]: + config = ml_collections.ConfigDict( + dict( + lr_configs={ + 'learning_rate_schedule': 'compound', + 'factors': 'constant*exponential_decay', + 'base_learning_rate': 0.1, + 'decay_steps': test_params['decay_steps'], + 'decay_rate': test_params['decay_rate'], + 'staircase': test_params['staircase'], + } + ) + ) + lr_fn = lr_schedules.get_learning_rate_fn(config) + config = config.lr_configs + tf_exponential_decay = tf.keras.optimizers.schedules.ExponentialDecay( + initial_learning_rate=config['base_learning_rate'], + decay_steps=config['decay_steps'], + decay_rate=config['decay_rate'], + staircase=config['staircase'], + ) + for step in range(400): + expected_learning_rate = tf_exponential_decay(step=step).numpy() + self.assertAlmostEqual(lr_fn(step), expected_learning_rate) + + def test_cosine_decay(self): + """Test cosine schedule works correctly.""" + config = ml_collections.ConfigDict( + dict( + lr_configs={ + 'learning_rate_schedule': 'compound', + 'factors': 'cosine_decay', + 'steps_per_cycle': 100, + 't_mul': 2., + 'm_mul': .5, + 'alpha': 0.3, + 'base_learning_rate': 1., + })) + lr_fn = lr_schedules.get_learning_rate_fn(config) + config = config.lr_configs + tf_cosine_decay = tf.keras.experimental.CosineDecayRestarts( + initial_learning_rate=config['base_learning_rate'], + first_decay_steps=config['steps_per_cycle'], + t_mul=config['t_mul'], + m_mul=config['m_mul'], + alpha=config['alpha'], + ) + for step in range(400): + expected_learning_rate = tf_cosine_decay(step=step).numpy() + self.assertAlmostEqual(lr_fn(step), expected_learning_rate) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/train_lib/tests/test_optax.py b/scenic/train_lib/tests/test_optax.py new file mode 100644 index 0000000000000000000000000000000000000000..76cdd3f165544fe5b4d5a13a3575c493e61265fa --- /dev/null +++ b/scenic/train_lib/tests/test_optax.py @@ -0,0 +1,199 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for Scenic optax utils.""" + +from typing import Optional +from absl.testing import absltest +from absl.testing import parameterized +import ml_collections +from scenic.train_lib import optax +import tensorflow as tf + + +class OptaxTest(tf.test.TestCase, parameterized.TestCase): + """Tests for Scenic Optax utils.""" + + @parameterized.parameters(True, False) + def test_make_mask_trees(self, allow_unmatched): + """Tests `make_mask_trees`.""" + tree = {'a': {'b': 1}, 'c': 2} + patterns = [('a/.*', 'A', 0.1), ('b/.*', 'B', 0.3), ('c', 'C', 0.3)] + masks = optax.make_mask_trees( + tree, patterns, allow_unmatched=allow_unmatched) + target_masks = [ + {'a': {'b': True}, 'c': False}, + {'a': {'b': False}, 'c': False}, + {'a': {'b': False}, 'c': True}, + ] + self.assertAllEqual(masks, target_masks) + + def test_make_mask_trees_unmatched(self): + """Tests `make_mask_trees` with allow_unmatched=False raises.""" + tree = {'a': {'b': 1}, 'c': 2, 'd': 3} + patterns = [('a/.*', 'A'), ('b/.*', 'B'), ('c', 'C')] + with self.assertRaises(ValueError): + optax.make_mask_trees(tree, patterns, allow_unmatched=False) + + @parameterized.parameters(True, False) + def test__make_mask_trees(self, allow_unmatched): + """Tests `_make_mask_trees` with names and values.""" + tree = {'a': {'b': 1}, 'c': 2} + patterns_names_values = [ + ('a/.*', 'A', 1), ('b/.*', 'B', 2), ('c', 'C', 3)] + # pylint: disable=protected-access + masks, names_values = optax._make_mask_trees( + tree, patterns_names_values, allow_unmatched=allow_unmatched) + # pylint: enable=protected-access + target_masks = [ + {'a': {'b': True}, 'c': False}, + {'a': {'b': False}, 'c': False}, + {'a': {'b': False}, 'c': True}, + ] + target_names_values = [('A', 1), ('B', 2), ('C', 3)] + self.assertAllEqual(masks, target_masks) + self.assertAllEqual(names_values, target_names_values) + + @parameterized.parameters(True, False) + def test__make_mask_trees_with_values_only(self, allow_unmatched): + """Tests `_make_mask_trees` with values only.""" + tree = {'a': {'b': 1}, 'c': 2} + patterns_names_values = [ + ('a/.*', 1), ('b/.*', 2), ('c', 3)] + # pylint: disable=protected-access + masks, names_values = optax._make_mask_trees( + tree, patterns_names_values, allow_unmatched=allow_unmatched) + # pylint: enable=protected-access + target_masks = [ + {'a': {'b': True}, 'c': False}, + {'a': {'b': False}, 'c': False}, + {'a': {'b': False}, 'c': True}, + ] + target_names_values = [(None, 1), (None, 2), (None, 3)] + self.assertAllEqual(masks, target_masks) + self.assertAllEqual(names_values, target_names_values) + + def test__split_frozen_without_frozen(self): + """Tests `_split_frozen` without a frozen schedule.""" + masks = [ + {'a': {'b': True, 'd': False}, 'c': False}, + {'a': {'b': False, 'd': True}, 'c': False}, + ] + scheds = [1, 2] + # pylint: disable=protected-access + frozen_mask, masks, scheds = optax._split_frozen(masks, scheds) + # pylint: enable=protected-access + + target_frozen_mask = {'a': {'b': False, 'd': False}, 'c': True} + target_masks = [ + {'a': {'b': True, 'd': False}, 'c': False}, + {'a': {'b': False, 'd': True}, 'c': False}, + ] + target_scheds = [1, 2] + self.assertAllEqual(frozen_mask, target_frozen_mask) + self.assertAllEqual(masks, target_masks) + self.assertAllEqual(scheds, target_scheds) + + def test__split_frozen_with_frozen(self): + """Tests `_split_frozen` with a frozen schedule.""" + masks = [ + {'a': {'b': True, 'd': False}, 'c': False}, + {'a': {'b': False, 'd': True}, 'c': False}, + {'a': {'b': False, 'd': False}, 'c': True}, + ] + scheds = [1, 2, None] + # pylint: disable=protected-access + frozen_mask, masks, scheds = optax._split_frozen(masks, scheds) + # pylint: enable=protected-access + + target_frozen_mask = {'a': {'b': False, 'd': False}, 'c': True} + target_masks = [ + {'a': {'b': True, 'd': False}, 'c': False}, + {'a': {'b': False, 'd': True}, 'c': False}, + ] + target_scheds = [1, 2] + self.assertAllEqual(frozen_mask, target_frozen_mask) + self.assertAllEqual(masks, target_masks) + self.assertAllEqual(scheds, target_scheds) + + def test_replace_frozen_with_no_schedule(self): + """Tests `replace_frozen` without a schedule.""" + tree = {'a': {'b': 1, 'd': 2}, 'c': 3} + new_tree = optax.replace_frozen(None, tree, 0) + self.assertAllEqual(tree, new_tree) + + def test_replace_frozen(self): + """Tests `replace_frozen`.""" + tree = {'a': {'b': 1, 'd': 2}, 'c': 3} + schedule = { + 'name': ml_collections.ConfigDict({'re': 'a/.*', 'lr_configs': None}), + 'rest': ml_collections.ConfigDict({'re': 'c', 'lr_configs': {}}), + } + new_tree = optax.replace_frozen(schedule, tree, 0) + target_tree = {'a': {'b': 0, 'd': 0}, 'c': 3} + self.assertAllEqual(target_tree, new_tree) + + def test_make_schedule(self): + """Tests `make_schedule`.""" + def lr_fn(cfg: ml_collections.ConfigDict) -> float: + """Dummy LR schedule creation function.""" + return float(cfg.lr_configs.lr) + + schedule = ml_collections.ConfigDict({ + 'main': ml_collections.ConfigDict( + {'re': 'a/.*', + 'lr_configs': ml_collections.ConfigDict({'lr': '1.0'})} + ), + 'rest': ml_collections.ConfigDict( + {'re': 'c', + 'lr_configs': ml_collections.ConfigDict( + {'lr': '2.0', 'base_learning_rate': 10.0})} + ), + }) + new_schedule = optax.make_schedule(schedule, lr_fn) + target_schedule = [('a/.*', 'main', (1.0, 1.0)), ('c', 'rest', (2.0, 10.0))] + self.assertAllEqual(target_schedule, new_schedule) + + def test_make_schedule_with_none(self): + """Tests `make_schedule` with None schedule.""" + def lr_fn(cfg: ml_collections.ConfigDict) -> Optional[float]: + """Dummy LR schedule creation function.""" + if cfg.lr_configs is None: + return None + return float(cfg.lr_configs.lr) + + new_schedule = optax.make_schedule(None, lr_fn) + target_schedule = [('(.*)', 'all', (None, None))] + self.assertAllEqual(target_schedule, new_schedule) + + def test_make(self): + """Test that `make` runs.""" + cfg = ml_collections.ConfigDict({ + 'max_grad_norm': 1.0, + 'per_example_clipping': True, + 'weight_decay_decouple': True, + 'decay_rules': [('.*c.*', 1.0)], + 'optax_name': 'scale_by_adam', + 'optax_grad_pmean': True, + 'optax_configs': ml_collections.ConfigDict({ + 'b1': 0.9, + 'b2': 0.999 + }) + }) + params = {'a': {'b': 1, 'd': 3}, 'c': 2} + _, _ = optax.make(cfg, [('.*', 'all', (None, 1.0))], params) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/train_lib/tests/test_optimizers.py b/scenic/train_lib/tests/test_optimizers.py new file mode 100644 index 0000000000000000000000000000000000000000..631e1a2e7fd68dcec9f21a1c62ab0e0b9a9b79fa --- /dev/null +++ b/scenic/train_lib/tests/test_optimizers.py @@ -0,0 +1,270 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for scenic optimizers.""" +from absl.testing import absltest +from absl.testing import parameterized +import flax +import flax.linen as nn +import jax +import jax.numpy as jnp +import ml_collections +import optax +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils +import tensorflow as tf + + +# Convenience constants for names of the parameters for the MLP used. +DENSE_0_BIAS = 'Dense_0/bias' +DENSE_0_KERNEL = 'Dense_0/kernel' +DENSE_1_BIAS = 'Dense_1/bias' +DENSE_1_KERNEL = 'Dense_1/kernel' + + +class MLP(nn.Module): + """A simple MLP model. initialized with ones for testing weight decay.""" + + @nn.compact + def __call__(self, x, train=None, debug=None): + x = nn.Dense(features=3, bias_init=nn.initializers.ones, + kernel_init=nn.initializers.ones)(x) + x = nn.relu(x) + x = nn.Dense(features=1, bias_init=nn.initializers.ones, + kernel_init=nn.initializers.ones)(x) + return x + + +class OptimizersTest(tf.test.TestCase, parameterized.TestCase): + """Class for testing optimizers.py.""" + + def setUp(self): + """Creates parameters and gradient function.""" + super().setUp() + rng = jax.random.PRNGKey(0) + model = MLP() + config = ml_collections.ConfigDict() + + self.params, _, _, _ = train_utils.initialize_model( + model_def=model, + input_spec=[((1, 2), jnp.float32)], + config=config, + rngs=rng) + + def training_loss_fn(params, label): + prediction = model.apply( + variables={'params': params}, + x=jnp.array([[1., 1.]])) + return jnp.mean(jnp.square(prediction - label)) + + self.compute_gradient_fn = jax.value_and_grad(training_loss_fn) + self.label_causing_no_loss = jnp.array([10.]) + self.label_causing_loss = jnp.array([9.]) + + self.lr = 0.1 + self.expected_sgd_updates = { # For LR = 0.1 + DENSE_0_BIAS: jnp.array([-0.2, -0.2, -0.2]), + DENSE_0_KERNEL: jnp.array([[-0.2, -0.2, -0.2], [-0.2, -0.2, -0.2]]), + DENSE_1_BIAS: jnp.array([-0.2]), + DENSE_1_KERNEL: jnp.array([[-0.6], [-0.6], [-0.6]]), + } + + def test_sgd(self): + """Test obtaining basic sgd optimizer.""" + optimizer_config = ml_collections.ConfigDict() + optimizer_config.optimizer = 'sgd' + optimizer = optimizers.get_optimizer(optimizer_config, self.lr, self.params) + optimizer_state = optimizer.init(self.params) + + _, grad = self.compute_gradient_fn(self.params, self.label_causing_loss) + updates, _ = optimizer.update(grad, optimizer_state, self.params) + updates = flax.traverse_util.flatten_dict(updates, sep='/') + + for param_name in self.expected_sgd_updates: + self.assertAllClose( + updates[param_name], + self.expected_sgd_updates[param_name]) + + @parameterized.parameters(0.01, 0.1) + def test_sgd_with_weight_decay(self, weight_decay): + """Test SGD with weight decay.""" + optimizer_config = ml_collections.ConfigDict() + optimizer_config.optimizer = 'sgd' + optimizer_config.weight_decay = weight_decay + optimizer = optimizers.get_optimizer(optimizer_config, self.lr, self.params) + optimizer_state = optimizer.init(self.params) + + _, grad = self.compute_gradient_fn(self.params, self.label_causing_loss) + updates, _ = optimizer.update(grad, optimizer_state, self.params) + updates = flax.traverse_util.flatten_dict(updates, sep='/') + + for param_name in self.expected_sgd_updates: + self.assertAllClose( + updates[param_name], + self.expected_sgd_updates[param_name] - weight_decay * self.lr) + + @parameterized.parameters(0.01, 0.1) + def test_sgd_with_weight_decay_skip_bias(self, weight_decay): + """Test weight decay which skips bias parameters.""" + optimizer_config = ml_collections.ConfigDict() + optimizer_config.optimizer = 'sgd' + optimizer_config.weight_decay = weight_decay + optimizer_config.skip_scale_and_bias_regularization = True + optimizer = optimizers.get_optimizer(optimizer_config, self.lr, self.params) + optimizer_state = optimizer.init(self.params) + + _, grad = self.compute_gradient_fn(self.params, self.label_causing_loss) + updates, _ = optimizer.update(grad, optimizer_state, self.params) + updates = flax.traverse_util.flatten_dict(updates, sep='/') + + # Biases are unaffected by weight decay. + self.assertAllClose( + updates[DENSE_0_BIAS], + self.expected_sgd_updates[DENSE_0_BIAS]) + self.assertAllClose( + updates[DENSE_1_BIAS], + self.expected_sgd_updates[DENSE_1_BIAS]) + + # Kernels are affected by weight decay. + self.assertAllClose( + updates[DENSE_0_KERNEL], + self.expected_sgd_updates[DENSE_0_KERNEL] - weight_decay * self.lr) + self.assertAllClose( + updates[DENSE_1_KERNEL], + self.expected_sgd_updates[DENSE_1_KERNEL] - weight_decay * self.lr) + + @parameterized.named_parameters( + { + 'testcase_name': 'bias', + 'freeze_params_reg_exp': 'bias', + 'frozen_params': [DENSE_0_BIAS, DENSE_1_BIAS] + }, + { + 'testcase_name': 'kernel', + 'freeze_params_reg_exp': 'kernel', + 'frozen_params': [DENSE_0_KERNEL, DENSE_1_KERNEL] + }, + { + 'testcase_name': 'bias_1', + 'freeze_params_reg_exp': '_1/bias', + 'frozen_params': [DENSE_1_BIAS] + }, + ) + def test_sgd_freeze_params(self, freeze_params_reg_exp, frozen_params): + """Test freezing of parameters.""" + optimizer_config = ml_collections.ConfigDict() + optimizer_config.optimizer = 'sgd' + optimizer_config.freeze_params_reg_exp = freeze_params_reg_exp + optimizer = optimizers.get_optimizer(optimizer_config, self.lr, self.params) + optimizer_state = optimizer.init(self.params) + + _, grad = self.compute_gradient_fn(self.params, self.label_causing_loss) + updates, _ = optimizer.update(grad, optimizer_state, self.params) + updates = flax.traverse_util.flatten_dict(updates, sep='/') + + for param_name in self.expected_sgd_updates: + if param_name in frozen_params: + self.assertAllClose( + updates[param_name], + jnp.zeros_like(self.expected_sgd_updates[param_name])) + else: + self.assertAllClose( + updates[param_name], + self.expected_sgd_updates[param_name]) + + @parameterized.named_parameters( + { + 'testcase_name': 'bias', + 'freeze_params_reg_exp': 'bias', + 'frozen_params': [DENSE_0_BIAS, DENSE_1_BIAS] + }, + { + 'testcase_name': 'kernel', + 'freeze_params_reg_exp': 'kernel', + 'frozen_params': [DENSE_0_KERNEL, DENSE_1_KERNEL] + }, + { + 'testcase_name': 'bias_1', + 'freeze_params_reg_exp': '_1/bias', + 'frozen_params': [DENSE_1_BIAS] + }, + ) + def test_freeze_params_optimizer_state_frozen(self, freeze_params_reg_exp, + frozen_params): + """Optimizer state (sgd with momentum) is not updated for frozen params.""" + optimizer_config = ml_collections.ConfigDict() + optimizer_config.optimizer = 'sgd' + optimizer_config.momentum = 0.9 + optimizer_config.freeze_params_reg_exp = freeze_params_reg_exp + optimizer = optimizers.get_optimizer(optimizer_config, self.lr, self.params) + optimizer_state = optimizer.init(self.params) + + optimizer_dict_state = flax.traverse_util.flatten_dict( + optimizer_state[0].inner_state[0].trace, sep='/') + + for param_name in self.expected_sgd_updates: + if param_name in frozen_params: + self.assertIsInstance(optimizer_dict_state[param_name], + optax.MaskedNode) + else: + self.assertAllEqual( + optimizer_dict_state[param_name], + jnp.zeros_like(self.expected_sgd_updates[param_name])) + + def test_sgd_freeze_params_with_weight_decay(self): + """Frozen parameters should be unaffected by weight decay.""" + freeze_params_reg_exp = 'bias' + frozen_params = [DENSE_0_BIAS, DENSE_1_BIAS] + weight_decay = 0.1 + optimizer_config = ml_collections.ConfigDict() + optimizer_config.optimizer = 'sgd' + optimizer_config.weight_decay = weight_decay + optimizer_config.freeze_params_reg_exp = freeze_params_reg_exp + optimizer = optimizers.get_optimizer(optimizer_config, self.lr, self.params) + optimizer_state = optimizer.init(self.params) + + _, grad = self.compute_gradient_fn(self.params, self.label_causing_loss) + updates, _ = optimizer.update(grad, optimizer_state, self.params) + updates = flax.traverse_util.flatten_dict(updates, sep='/') + + for param_name in self.expected_sgd_updates: + if param_name in frozen_params: + self.assertAllEqual( + updates[param_name], + jnp.zeros_like(self.expected_sgd_updates[param_name])) + else: + self.assertAllClose( + updates[param_name], + self.expected_sgd_updates[param_name] - weight_decay * self.lr) + + def test_freeze_params_reg_exp_matches_all_params_raises_value_error(self): + """Freeze parameter reg_exp is not allowed to freeze the complete model.""" + optimizer_config = ml_collections.ConfigDict() + optimizer_config.optimizer = 'sgd' + optimizer_config.freeze_params_reg_exp = '.*' + + with self.assertRaises(ValueError): + optimizers.get_optimizer(optimizer_config, self.lr, self.params) + + def test_invalid_config_raises_type_error(self): + """Invalid configuration should raise error instead of failing silently.""" + optimizer_config = ml_collections.ConfigDict() + optimizer_config.optimizer = 'sgd' + optimizer_config.invalid_field = 'invalid' + with self.assertRaises(TypeError): + optimizers.get_optimizer(optimizer_config, self.lr, self.params) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/train_lib/tests/test_train_utils.py b/scenic/train_lib/tests/test_train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..ae7a8a13d8747df9ad81fbe9e0619f4cb981513d --- /dev/null +++ b/scenic/train_lib/tests/test_train_utils.py @@ -0,0 +1,76 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for training utility functions in train_lib.train_utils. + +This file covers tests for the Chrono context manager. +""" + +from unittest import mock + +from absl.testing import absltest +from scenic.train_lib import train_utils + + +class ChronoPausedTest(absltest.TestCase): + """Tests the Chrono.paused context manager for correct behavior.""" + + @mock.patch("jax.block_until_ready", autospec=True) + @mock.patch("time.monotonic") + def test_paused_context_manager_waits_executes_the_code_block_and_resumes( + self, mock_monotonic, mock_block_until_ready + ): + """Tests the Chrono.paused context manager in a normal flow.""" + chrono = train_utils.Chrono() + before_pause, after_pause, after_resume = 100.0, 101.1, 105.5 + mock_monotonic.side_effect = [before_pause, after_pause, after_resume] + wait_for_ops = [mock.MagicMock()] # Dummy operations to await. + + with chrono.paused(wait_for=wait_for_ops): + mock_block_until_ready.assert_called_once_with(wait_for_ops) + self.assertEqual(chrono.pause_start, before_pause) + + self.assertIsNone(chrono.pause_start) # Should be reset by resume + self.assertEqual(chrono.paused_time, after_pause - before_pause) + self.assertEqual(mock_monotonic.call_count, 3) # init, pause, and resume + + @mock.patch("jax.block_until_ready", autospec=True) + @mock.patch("time.monotonic") + def test_paused_context_manager_with_exception_calls_resume( + self, mock_monotonic, mock_block_until_ready + ): + """Tests that Chrono.resume is called even if an exception occurs.""" + chrono = train_utils.Chrono() + before_pause, after_pause, after_resume = 100.0, 101.1, 105.5 + mock_monotonic.side_effect = [before_pause, after_pause, after_resume] + wait_for_ops = ("dummy_op",) + custom_exception = ValueError("Test exception inside context") + + # Disable linting since the assertion against the exception must be done + # within the context manager. The assertions below the context blocks are + # not affected by the exception, despite the highlighting (or dimming). + with self.assertRaises(ValueError) as context: # pylint: disable=g-error-prone-assert-raises + with chrono.paused(wait_for=wait_for_ops): + mock_block_until_ready.assert_called_once_with(wait_for_ops) + self.assertEqual(chrono.pause_start, before_pause) + raise custom_exception + self.assertEqual(context.exception, custom_exception) + + self.assertIsNone(chrono.pause_start) # Should be reset by resume + self.assertEqual(chrono.paused_time, after_pause - before_pause) + self.assertEqual(mock_monotonic.call_count, 3) # init, pause, and resume + + +if __name__ == "__main__": + absltest.main() diff --git a/scenic/train_lib/train_utils.py b/scenic/train_lib/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..97de9cab919c90d6ec330bc9bd00590c04fea092 --- /dev/null +++ b/scenic/train_lib/train_utils.py @@ -0,0 +1,1322 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utility functions for Training.""" + +import collections.abc as collections +import contextlib +import copy +import functools +import os +import re +import time +from typing import Any, Callable, Dict, Iterable, Mapping, Optional, Sequence, Tuple, Union + +from absl import logging +from clu import metric_writers +import flax +from flax import jax_utils +from flax import struct +import flax.linen as nn +from flax.training import checkpoints +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np +import optax +from scenic.common_lib import debug_utils +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib import datasets +from scenic.train_lib import optimizers +from tensorflow.io import gfile + +# JAX team is working on type annotation for pytree: +# https://github.com/jax-ml/jax/issues/1555 +PyTree = Any +PRNGKey = jnp.ndarray + + +@struct.dataclass +class TrainState: + """Dataclass to keep track of state of training. + + The state of training is structured as a struct.dataclass, which enables + instances of this class to be passed into jax transformations like tree_map + and pmap. + """ + + tx: Optional[optax.GradientTransformation] = struct.field( + default=None, pytree_node=False + ) + opt_state: Optional[optax.OptState] = None + params: Optional[Any] = struct.field(default_factory=dict) + global_step: Optional[int] = 0 + model_state: Optional[Any] = struct.field(default_factory=dict) + rng: Optional[jnp.ndarray] = None + metadata: Optional[Dict[str, Any]] = None + # NOTE: When using the raw TrainState as the target for checkpoint restoration + # in Flax, you should provide the pytree structure, otherwise it might just + # silenty ignore restoring the checkpoint subtree if you use with an empty + # dict when setting `allow_partial_mpa_restoration=True` and if you set it + # to None (e.g., for `metadata`` above), Flax replaces it with a state dict. + + def __getitem__(self, item): + """Make TrainState a subscriptable object.""" + return getattr(self, item) + + def get(self, keyname: str, default: Optional[Any] = None) -> Any: + """Return the value for key if it exists otherwise the default.""" + try: + return self[keyname] + except KeyError: + return default + + +def expand_dims_for_specs(xs, specs): + return jax.tree.map( + lambda s, x: jax.tree.map( + functools.partial(jnp.expand_dims, axis=tuple(range(len(s)))), + x, + ), + specs, + xs, + ) + + +def squeeze_for_specs(xs, specs): + return jax.tree.map( + lambda s, x: jax.tree.map( + functools.partial(jnp.squeeze, axis=tuple(range(len(s)))), + x, + ), + specs, + xs, + ) + + +def initialize_model( + *, + model_def: nn.Module, + input_spec: Sequence[ + Union[Tuple[Tuple[int, ...], jnp.dtype], Tuple[int, ...], None] + ], + config: ml_collections.ConfigDict, + rngs: Union[jnp.ndarray, Mapping[str, jnp.ndarray]], + train: Optional[bool] = False, + **model_kwargs, +) -> Tuple[PyTree, PyTree, int, Optional[float]]: + """Initializes parameters and model state. + + Args: + model_def: Definition of a model. + input_spec: An iterable of (shape, dtype) pairs specifying the shape and + dtype of the inputs. If unspecified the dtype is float32. + config: Configurations of the initialization. + rngs: Jax rng keys. + train: If the scenic model should be initialized in the train mode. + **model_kwargs: Kwargs passed to flax model initialization. + + Returns: + Initial params, Init model_state, number of trainable_params, and gflops. + """ + batch_size = ( + (config.batch_size // jax.device_count()) + if config.get('batch_size') + else None + ) + dummy_input = [] + for spec in input_spec: + if spec is not None: + in_st = debug_utils.input_spec_to_jax_shape_dtype_struct( + spec, batch_size=batch_size + ) + dummy_input.append(jnp.zeros(in_st.shape, in_st.dtype)) + else: + dummy_input.append(None) + + def _initialize_model(rngs): + """Initialization function to be jitted.""" + # We want all parameters to be created in host RAM, not on any device, + # they'll be sent there later as needed, otherwise we already encountered + # two situations where we allocate them twice. + with jax.default_device(jax.local_devices(backend='cpu')[0]): + init_model_state, init_params = flax.core.pop( + flax.core.freeze( + model_def.init( + rngs, *dummy_input, train=train, debug=False, **model_kwargs + ) + ), + 'params', + ) + # Set bias in the head to low value, such that loss is small initially. + if config.get('init_head_bias', None) is not None: + init_params = flax.core.unfreeze(init_params) + init_params['output_projection'] = optimizers.tree_map_with_names( + lambda p: jnp.full_like(p, config.init_head_bias), + init_params['output_projection'], + match_name_fn=lambda name: 'bias' in name, + ) + init_params = flax.core.freeze(init_params) + return init_params, init_model_state + + if not isinstance(rngs, dict): + rngs = {'params': rngs} + init_params, init_model_state = _initialize_model(rngs) + # Pop out params rng: + rngs.pop('params') + + # Count number of trainable parameters: + num_trainable_params = debug_utils.log_param_shapes(init_params) + + # Count gflops: + count_flops = config.get( + 'count_flops', ml_collections.ConfigDict({'count_flops': True}) + ) + if count_flops: + variables = {'params': init_params, **init_model_state} + flops = debug_utils.compute_flops( + flax_model_apply_fn=functools.partial( + model_def.apply, + variables, + train=False, + debug=False, + rngs=rngs, + **model_kwargs, + ), + input_spec=count_flops.get('input_spec', input_spec), + fuse_multiply_add=count_flops.get('fuse_multiply_add', True), + ) + gflops = flops / (10**9) + else: + gflops = None + + return init_params, init_model_state, num_trainable_params, gflops + + +def initialize_model_with_pytree( + *, + model_def: nn.Module, + input_spec: PyTree, + config: ml_collections.ConfigDict, + rngs: Union[jnp.ndarray, Mapping[str, jnp.ndarray]], + unpack_input: bool = True, + **model_kwargs, +) -> Tuple[PyTree, PyTree, int, Optional[float]]: + """Initializes parameters and model state with a pytree input_spec. + + This is an extension of the above initialize_model function where we can put + pytree `input_spec`. We keep the original function for backward compatibility. + If the root type of `input_spec` is `Sequence`, each element is fed to the + model as position arguments whereas they are fed as keyword arguments if the + root type is `dict`. + + Args: + model_def: Definition of a model. + input_spec: A PyTree whose leaves are (shape, dtype) pairs specifying the + shape and dtype of the inputs. If unspecified the dtype is float32. + config: Configurations of the initialization. + rngs: Jax rng keys. + unpack_input: Unpack the pytree when feeding it to the model. + **model_kwargs: Kwargs passed to flax model initialization. + + Returns: + Initial params, Init model_state, number of trainable_params, and gflops. + """ + batch_size = ( + (config.batch_size // jax.device_count()) + if config.get('batch_size') + else None + ) + + def check_leaf_spec(spec: Sequence[PyTree]) -> bool: + return ( + len(spec) == 2 + and isinstance(spec[0], collections.Sequence) + and all(isinstance(i, int) for i in spec[0]) + and isinstance(spec[1], jnp.dtype) + ) or (all(isinstance(i, int) for i in spec[0])) + + def create_dummy_input(spec: PyTree) -> PyTree: + if isinstance(spec, dict): + return {k: create_dummy_input(v) for k, v in spec.items()} + elif isinstance(spec, collections.Sequence): + if check_leaf_spec(spec): + in_st = debug_utils.input_spec_to_jax_shape_dtype_struct( + spec, batch_size=batch_size + ) + return jnp.zeros(in_st.shape, in_st.dtype) + else: + return tuple(create_dummy_input(child) for child in spec) + elif spec is None: + return None + else: + raise NotImplementedError('Unsupported spec type.', type(spec)) + + dummy_input = create_dummy_input(input_spec) + + def _initialize_model(rngs): + """Initialization function to be jitted.""" + # We want all parameters to be created in host RAM, not on any device, + # they'll be sent there later as needed, otherwise we already encountered + # two situations where we allocate them twice. + with jax.default_device(jax.local_devices(backend='cpu')[0]): + # If dummy_input is a dict, we feed inputs as keyword arguments, otherwise + # feed as position arguments. + if isinstance(dummy_input, dict) and unpack_input: + init_model_state, init_params = flax.core.pop( + flax.core.freeze( + model_def.init( + rngs, + **dummy_input, + train=False, + debug=False, + **model_kwargs, + ) + ), + 'params', + ) + elif isinstance(dummy_input, collections.Sequence) and unpack_input: + init_model_state, init_params = flax.core.pop( + flax.core.freeze( + model_def.init( + rngs, *dummy_input, train=False, debug=False, **model_kwargs + ) + ), + 'params', + ) + else: + init_model_state, init_params = flax.core.pop( + flax.core.freeze( + model_def.init( + rngs, dummy_input, train=False, debug=False, **model_kwargs + ) + ), + 'params', + ) + # Set bias in the head to low value, such that loss is small initially. + if config.get('init_head_bias', None) is not None: + init_params = flax.core.unfreeze(init_params) + init_params['output_projection'] = optimizers.tree_map_with_names( + lambda p: jnp.full_like(p, config.init_head_bias), + init_params['output_projection'], + match_name_fn=lambda name: 'bias' in name, + ) + init_params = flax.core.freeze(init_params) + return init_params, init_model_state + + if not isinstance(rngs, dict): + rngs = {'params': rngs} + init_params, init_model_state = _initialize_model(rngs) + # Pop out params rng: + rngs.pop('params') + + # Count number of trainable parameters: + num_trainable_params = debug_utils.log_param_shapes(init_params) + + # Count gflops: + count_flops = config.get( + 'count_flops', ml_collections.ConfigDict({'count_flops': True}) + ) + if count_flops: + variables = {'params': init_params, **init_model_state} + flops = debug_utils.compute_flops_with_pytree( + flax_model_apply_fn=functools.partial( + model_def.apply, + variables, + train=False, + debug=False, + rngs=rngs, + **model_kwargs, + ), + input_spec=count_flops.get('input_spec', input_spec), + unpack_input=unpack_input, + fuse_multiply_add=count_flops.get('fuse_multiply_add', True), + ) + gflops = flops / (10**9) + else: + gflops = None + + return init_params, init_model_state, num_trainable_params, gflops + + +def get_dataset( + config: ml_collections.ConfigDict, + data_rng: PRNGKey, + *, + num_local_shards: Optional[int] = None, + dataset_service_address: Optional[str] = None, + dataset_name: Optional[str] = None, + dataset_configs: Optional[ml_collections.ConfigDict] = None, + **kwargs: Any, +) -> dataset_utils.Dataset: + """Creates dataset. + + By default, the values in the config file are used. + However, if the optional `dataset_name` and `dataset_configs` are passed, + those are used instead. + + Args: + config: The configuration of the experiment. + data_rng: Random number generator key to use for the dataset. + num_local_shards: Number of shards for each batch. So (bs, ...) becomes + (num_local_shards, bs//num_local_shards, ...). If not specified, it will + be number of local devices. + dataset_service_address: Used when using the tf.data.experimental.service + dataset_name: Name of dataset to load, if not reading from the config. + dataset_configs: Configuration of the dataset, if not reading directly from + the config. + **kwargs: Keyword arguments passed to the dataset builders. + + Returns: + A dataset_utils.Dataset object. + """ + device_count = jax.device_count() + logging.info('device_count: %d', device_count) + logging.info('num_hosts : %d', jax.process_count()) + logging.info('host_id : %d', jax.process_index()) + + dataset_name = dataset_name or config.dataset_name + dataset_builder = datasets.get_dataset(dataset_name) + + batch_size = config.batch_size + if batch_size % device_count > 0: + raise ValueError( + f'Batch size ({batch_size}) must be divisible by the ' + f'number of devices ({device_count})' + ) + + eval_batch_size = config.get('eval_batch_size', batch_size) + if eval_batch_size % device_count > 0: + raise ValueError( + f'Eval batch size ({eval_batch_size}) must be divisible ' + f'by the number of devices ({device_count})' + ) + + local_batch_size = batch_size // jax.process_count() + eval_local_batch_size = eval_batch_size // jax.process_count() + device_batch_size = batch_size // device_count + logging.info('local_batch_size : %d', local_batch_size) + logging.info('device_batch_size : %d', device_batch_size) + + shuffle_seed = config.get('shuffle_seed', None) + if dataset_service_address and shuffle_seed is not None: + raise ValueError( + 'Using dataset service with a random seed causes each ' + 'worker to produce exactly the same data. Add ' + 'config.shuffle_seed = None to your config if you want ' + 'to run with dataset service.' + ) + + dataset_configs = dataset_configs or config.get('dataset_configs', {}) + num_local_shards = num_local_shards or jax.local_device_count() + dataset = dataset_builder( + batch_size=local_batch_size, + eval_batch_size=eval_local_batch_size, + num_shards=num_local_shards, + dtype_str=config.data_dtype_str, + rng=data_rng, + shuffle_seed=shuffle_seed, + dataset_configs=dataset_configs, + dataset_service_address=dataset_service_address, + **kwargs, + ) + + return dataset + + +def initialize_multitask_model( + *, + model_def: nn.Module, + input_spec: Dict[ + Tuple[Tuple[str, Any], ...], + Sequence[Union[Tuple[Tuple[int, ...], jnp.dtype], Tuple[int, ...]]], + ], + config: ml_collections.ConfigDict, + rngs: Union[jnp.ndarray, Mapping[str, jnp.ndarray]], +) -> Tuple[PyTree, PyTree, int, Optional[Dict[str, float]]]: + """Initializes parameters and model state. + + Args: + model_def: Definition of a model. + input_spec: A dictionary from a dict of keyword arguments to an iterable of + (shape, dtype) pairs specifying the shape and dtype of the inputs. If + unspecified the dtype is float32. + config: Configurations of the initialization. + rngs: Jax rng keys. + + Returns: + Initial params, Init model_state, and number of trainable_params. + """ + + def init_fn(model_def): + for kwargs, in_spec in input_spec.items(): + if config.get('batch_sizes') is not None: + batch_size = config.batch_sizes.get(dict(kwargs)['dataset']) + else: + batch_size = config.batch_size + + batch_size = (batch_size // jax.device_count()) if batch_size else None + + input_shapetype = [ + debug_utils.input_spec_to_jax_shape_dtype_struct( + spec, batch_size=batch_size + ) + for spec in in_spec + ] + dummy_input = [] + for in_st in input_shapetype: + dummy_input.append(jnp.zeros(in_st.shape, in_st.dtype)) + model_def(*dummy_input, train=False, debug=False, **dict(kwargs)) + + def _initialize_model(rngs): + """Initialization function to be jitted.""" + # We want all parameters to be created in host RAM, not on any device, + # they'll be sent there later as needed, otherwise we already encountered + # two situations where we allocate them twice. + with jax.default_device(jax.local_devices(backend='cpu')[0]): + init_model_state, init_params = flax.core.pop( + flax.core.freeze(nn.init(fn=init_fn, module=model_def)(rngs)), + 'params', + ) + # Set bias in the head to low value, such that loss is small initially. + if ( + config.get('init_head_bias', None) is not None + and 'output_projection' in init_params + ): + init_params = flax.core.unfreeze(init_params) + init_params['output_projection'] = optimizers.tree_map_with_names( + lambda p: jnp.full_like(p, config.init_head_bias), + init_params['output_projection'], + match_name_fn=lambda name: 'bias' in name, + ) + init_params = flax.core.freeze(init_params) + return init_params, init_model_state + + if not isinstance(rngs, dict): + rngs = {'params': rngs} + init_params, init_model_state = _initialize_model(rngs) + # Pop out params rng: + rngs.pop('params') + + # Count number of trainable parameters: + num_trainable_params = debug_utils.log_param_shapes(init_params) + + # Count gflops: + count_flops = config.get('count_flops', ml_collections.ConfigDict()) + if count_flops: + variables = {'params': init_params, **init_model_state} + gflops_dict = {} + gflops_all = 0 + for kwargs, in_spec in input_spec.items(): + flops = debug_utils.compute_flops( + flax_model_apply_fn=functools.partial( + model_def.apply, + variables, + train=False, + debug=False, + rngs=rngs, + **dict(kwargs), + ), + input_spec=count_flops.get('input_spec', in_spec), + fuse_multiply_add=count_flops.get('fuse_multiply_add', True), + ) + gflops = flops / (10**9) + gflops_key = 'gflops/' + '/'.join(f'{x}={y}' for x, y in kwargs) + gflops_dict[gflops_key] = gflops + gflops_all += gflops + gflops_dict['gflops'] = gflops_all + else: + gflops_dict = None + + return init_params, init_model_state, num_trainable_params, gflops_dict + + +def get_num_training_steps( + config: ml_collections.ConfigDict, dataset_metadata: Dict[str, Any] +) -> Tuple[int, Optional[int]]: + """Calculates the total number of training step and possibly steps_per_epoch. + + The main raining loop is based on number of training steps. Thus, for datasets + that we want to train based on number of epochs, we need to calculate the + total number of training steps. This function looks for `num_training_steps` + in config, if it exists it returns that as the total step and `None` as + `steps_per_epoch`. If num_training_steps doesn't exist, then it looks for + `num_training_epochs` and given the size of training data calculates the total + steps and steps_per_epoch. In this computation, we assume that + drop_remainder=True. + + Args: + config: Configuration of the experiment. + dataset_metadata: Meta-data that is generated by the dataset_builder. + + Returns: + total_steps: Total number of training steps. + steps_per_epoch: Number of steps in every epoch. + """ + # We either use num_training_epochs or num_training_steps. + steps_per_epoch = ( + dataset_metadata.get('num_train_examples', 0) // config.batch_size + ) + + if config.get('num_training_steps') is not None: + assert not config.get('num_training_epochs') + return config.num_training_steps, steps_per_epoch or None + else: + assert config.num_training_epochs and not config.get('num_training_steps') + assert steps_per_epoch > 0, 'num_train_examples should be defined.' + return int(steps_per_epoch * config.num_training_epochs), steps_per_epoch + + +@functools.partial(jax.pmap, axis_name='x') +def pmap_mean(x: PyTree) -> PyTree: + # An axis_name is passed to pmap which can then be used by pmean. + # In this case each device has its own version of the batch statistics and + # we average them. + return jax.lax.pmean(x, 'x') + + +def sync_model_state_across_replicas(train_state: TrainState) -> TrainState: + """Sync the model_state (like batch statistics) across replicas. + + Args: + train_state: TrainState; Current state of training. + + Returns: + Updated state of training in which model_state is synced across replicas. + """ + # TODO(dehghani): We simply do "mean" here and this doesn't work with + # statistics like variance. (check the discussion in Flax for fixing this). + if jax.tree_util.tree_leaves(train_state.model_state): + # If the model_state is not empty. + new_model_state = flax.core.copy( + train_state.model_state, + {'batch_stats': pmap_mean(train_state.model_state['batch_stats'])}, + ) + return train_state.replace( # pytype: disable=attribute-error + model_state=new_model_state + ) + else: + return train_state + + +def save_checkpoint( + workdir: str, + train_state: TrainState, + max_to_keep: int = 3, + overwrite: bool = False, + **kwargs, +): + """Saves a checkpoint. + + Args: + workdir: Experiment directory for saving the checkpoint. + train_state: An instance of TrainState that holds the state of training. + max_to_keep: The number of checkpoints to keep. + overwrite: Overwrite existing checkpoint if a checkpoint at the current or + a later step already exits (default: False). + **kwargs: Passed on to flax.training.checkpoints.save_checkpoint. + """ + if jax.process_index() == 0: + # Get train state from the first replica. + checkpoint_state = jax.device_get(train_state) + checkpoints.save_checkpoint( + workdir, + checkpoint_state, + int(checkpoint_state.global_step), + overwrite=overwrite, + keep=max_to_keep, + **kwargs, + ) + + +SIGNED_FLOAT_RE = re.compile(r'([-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?)') + + +def checkpoint_path_step(path: str) -> Optional[float]: + """Returns the step number of a checkpoint path. + + Copied from flax/training/checkpoints.PyTree + + Args: + path: The path to the checkpoint. + + Returns: + The global step corresponding to that checkpoint, or None if it can't be + determined. + """ + for s in SIGNED_FLOAT_RE.split(path)[::-1]: + if SIGNED_FLOAT_RE.match(s): + return float(s) + return None + + +def restore_checkpoint( + checkpoint_path: str, + train_state: Optional[TrainState] = None, + assert_exist: bool = False, + step: Optional[int] = None, +) -> Tuple[TrainState, int]: + """Restores the last checkpoint. + + First restores the checkpoint, which is an instance of TrainState that holds + the state of training. + + Args: + checkpoint_path: Directory or filename to restore the checkpoint from. + train_state: An instance of TrainState that holds the state of training. + assert_exist: Assert that there is at least one checkpoint in the given + path. + step: Step number to load or None to load latest. If specified, + checkpoint_path must be a directory. + + Returns: + training state and an int which is the current step. + """ + if assert_exist: + if 'checkpoint_' in checkpoint_path.split('/')[-1]: + glob_path = checkpoint_path + else: + glob_path = os.path.join(checkpoint_path, 'checkpoint_*') + if not gfile.glob(glob_path): + raise ValueError( + 'No checkpoint for the pretrained model is found in: ' + f'{checkpoint_path}' + ) + if train_state is None: + raise ValueError( + 'Please use `restore_pretrained_checkpoint` for loading' + 'a checkpoint without providing a Scenic TrainState.' + ) + train_state = checkpoints.restore_checkpoint( + checkpoint_path, train_state, step + ) + return train_state, int(train_state.global_step) + + +def bind_rng_to_host_device( + rng: jnp.ndarray, + axis_name: Union[str, Tuple[str, ...]], + bind_to: Optional[str] = None, +) -> jnp.ndarray: + """Binds a rng to the host/device we are on. + + Must be called from within a pmapped function. Note that when binding to + "device", we also bind the rng to hosts, as we fold_in the rng with axis_index + which is unique for devices across all hosts. + + Args: + rng: A jax.random.PRNGKey. + axis_name: The axis of the devices we are binding rng across. + bind_to: Must be one of the 'host' or 'device'. None means no binding. + + Returns: + jax.random.PRNGKey specialized to host/device. + """ + if bind_to is None: + return rng + if bind_to == 'host': + return jax.random.fold_in(rng, jax.process_index()) + elif bind_to == 'device': + return jax.random.fold_in(rng, jax.lax.axis_index(axis_name)) + else: + raise ValueError( + "`bind_to` should be one of the `[None, 'host', 'device']`" + ) + + +class TrainingDivergedError(Exception): + pass + + +def normalize_metrics_summary( + metrics_summary: Dict[str, Tuple[float, int]], split: str +) -> Dict[str, float]: + """Normalize the metrics in summary by its normalizer. + + Args: + metrics_summary: A dictionary mapping metric name to (value, normalizer). + split: Split for which we normalize the metrics. Used for logging. + + Returns: + Normalized metrics summary. + + Raises: + TrainingDivergedError: Due to observing a NaN in the metrics. + """ + # TODO(dehghani): Currently we only support metrics of the form 1/N sum + # f(x_i). We may need a more general framework for metrics like + # precision and recall. Note in particular that while we're normalizing by + # the "metric normalization value" that is val[1], this value is previously + # summed up and is defined to be an integer. + normalized_metrics_summary = {} + for key, val in metrics_summary.items(): + normalized_metrics_summary[key] = val[0] / (val[1] + 1e-9) + if np.isnan(normalized_metrics_summary[key]): + msg = f'NaN detected in {split}_{key} (Unnormalized values: {val})' + if split == 'train': + raise TrainingDivergedError(msg) + else: + logging.error('WARNING: Split %s %s', split, msg) + + return normalized_metrics_summary + + +def stack_forest(forest: PyTree) -> PyTree: + """Transposes a list of dicts to dict of lists. + + For example, + given + [{'a':1,'b':2}, {'a':3,'b':4}], + the output is: + {'a': ([1, 3]), 'b': ([2, 4])} + + Args: + forest: a list of dicts + + Returns: + a dict of lists. + """ + if not forest: + return {} + + stack_args = lambda *args: np.stack(args) + return jax.tree_util.tree_map(stack_args, *forest) + + +def unreplicate_and_get(x: PyTree) -> PyTree: + return jax.device_get(jax_utils.unreplicate(x)) + + +def process_and_fetch_to_host( + pred_or_tgt: Union[jnp.ndarray, Dict[str, jnp.ndarray]], + batch_mask: jnp.ndarray, +) -> Union[Sequence[jnp.ndarray], Dict[str, jnp.ndarray]]: + """Used to collect predictions and targets of the whole valid/test set. + + Args: + pred_or_tgt: A jnp-array or dict of arrays, each of shape `[n_dev, bs, + X,...,Y]. + batch_mask: A nd-array of shape `[nun_devices, bs]`, where zero values + indicate padded examples. + + Returns: + A list of length n_dev*bs of items, where each item is a dictionary with + same keys as `pred_or_tgt` & values are normal np-arrays of shape [X,...,Y]. + """ + + def _split_mini_batches(x): + # Fetch to host and filter out padded examples. + x = jax.device_get(x)[np.array(batch_mask).astype(bool)] + # Split minibatch of examples into a list of examples. + x_list = jnp.split(x, x.shape[0], axis=0) + # Squeeze out the dummy dimension. + return jax.tree_util.tree_map(lambda x: jnp.squeeze(x, axis=0), x_list) + + pred_or_tgt = jax.tree_util.tree_map(_split_mini_batches, pred_or_tgt) + + if isinstance(pred_or_tgt, list): + # Pred_or_tgt was a single array, so just return the list: + return pred_or_tgt + else: + # Pred_or_tgt was dict of arrays, so convert dict of lists to list of dicts: + keys, values = zip(*pred_or_tgt.items()) + return [dict(zip(keys, v)) for v in zip(*values)] # pytype: disable=bad-return-type # jax-ndarray + + +@functools.partial(jax.pmap, axis_name='i') +def _barrier(x): + return jax.lax.psum(x, axis_name='i') + + +def barrier(): + """MPI-like barrier.""" + jax.device_get(_barrier(jnp.ones((jax.local_device_count(),)))) + + +def log_eval_summary( + step: int, + *, + writer: metric_writers.MetricWriter, + eval_metrics: Sequence[Dict[str, Tuple[float, int]]], + extra_eval_summary: Optional[Mapping[str, float]] = None, + metrics_normalizer_fn: Optional[ + Callable[[Dict[str, Tuple[float, int]], str], Dict[str, float]] + ] = None, + prefix: str = 'valid', + key_separator: str = '_', + flush_writer: bool = True, +) -> Dict[str, float]: + """Computes and logs eval metrics. + + Args: + step: Current step. + writer: Metric writer object. + eval_metrics: List of dictionaries of calculated metrics. Usually the + sequence is the concatenation of the per-eval-step metrics, and every + dictionary maps a metric name to an array of (value, normalizer) - where + the array index is usually the batch index. + extra_eval_summary: A dict containing summaries that are already ready to be + logged, e.g. global metrics from eval set, like precision/recall. + metrics_normalizer_fn: Used for normalizing metrics. The API for this + function is: `new_metrics_dict = metrics_normalizer_fn(metrics_dict, + split)`. If set to None, we use the `normalize_metrics_summary` which uses + the normalizer paired with each metric to normalize it (after summing both + metric and normalizer values). + prefix: str; Prefix added to the name of the summaries writen by this + function. + key_separator: Separator added between the prefix and key. + flush_writer: If True, flush the writer after logging. + + Returns: + A dictionary of metrics, mapping both `eval_metrics` and + `extra_eval_summary` from metric name (incl. `prefix`) to float value. + """ + eval_metrics = stack_forest(eval_metrics) + + # Compute the sum over all examples in all batches. + eval_metrics_summary = jax.tree_util.tree_map(lambda x: x.sum(), eval_metrics) + # Normalize metrics by the total number of examples. + metrics_normalizer_fn = metrics_normalizer_fn or normalize_metrics_summary + eval_metrics_summary = metrics_normalizer_fn(eval_metrics_summary, 'eval') + # If None, set to an empty dictionary. + extra_eval_summary = extra_eval_summary or {} + + # Adds extra_eval_summary to the returned eval_summary. + eval_metrics_summary.update(extra_eval_summary) + + writer.write_scalars( + step, + { + key_separator.join((prefix, key)): val + for key, val in eval_metrics_summary.items() + }, + ) + + if flush_writer: + writer.flush() + return eval_metrics_summary + + +def log_train_summary( + step: int, + *, + writer: metric_writers.MetricWriter, + train_metrics: Sequence[Dict[str, Tuple[float, int]]], + extra_training_logs: Optional[Sequence[Dict[str, Any]]] = None, + metrics_normalizer_fn: Optional[ + Callable[[Dict[str, Tuple[float, int]], str], Dict[str, float]] + ] = None, + prefix: str = 'train', + key_separator: str = '_', + flush_writer: bool = True, +) -> Dict[str, float]: + """Computes and logs train metrics. + + Args: + step: Current step. + writer: Summary writer. + train_metrics: List of dictionaries of calculated metrics. Usually the + sequence is the concatenation of the per-eval-step metrics, and every + dictionary maps a metric name to an array of (value, normalizer) - where + the array index is usually the batch index. + extra_training_logs: List of dictionaries, containing additional training + logs, from every train step, e.g. learning rate, Time, num parameters, + etc. Their mean will be logged. + metrics_normalizer_fn: Used for normalizing metrics. The API for this + function is: `new_metrics_dict = metrics_normalizer_fn(metrics_dict, + split)`. If set to None, we use the normalize_metrics_summary which uses + the normalizer paired with each metric to normalize it. + prefix: str; Prefix added to the name of the summaries writen by this + function. + key_separator: Separator added between the prefix and key. + flush_writer: If True, flush the writer after logging. + + Returns: + A dictionary of metrics, mapping `train_metrics from metric name (incl. + `prefix`) to float value. + """ + ##### Prepare metrics: + # Get metrics from devices: + train_metrics = stack_forest(train_metrics) + # Compute the sum over all examples in all batches: + train_metrics_summary = jax.tree_util.tree_map( + lambda x: x.sum(), train_metrics + ) + # Normalize metrics by the total number of examples: + metrics_normalizer_fn = metrics_normalizer_fn or normalize_metrics_summary + train_metrics_summary = metrics_normalizer_fn(train_metrics_summary, 'train') + + ##### Prepare additional training logs: + # If None, set to an empty dictionary. + extra_training_logs = extra_training_logs or [{}] + train_logs = stack_forest(extra_training_logs) + + # Metrics: + writer.write_scalars( + step, + { + key_separator.join((prefix, key)): val + for key, val in train_metrics_summary.items() + }, + ) + # Additional logs: + writer.write_scalars( + step, {key: val.mean() for key, val in train_logs.items()} + ) + + if flush_writer: + writer.flush() + return train_metrics_summary + + +def accumulate_gradients( + compute_gradient_fn: Callable[ + [TrainState, Dict[str, jnp.ndarray], jnp.ndarray], + Tuple[Any, jnp.ndarray], + ], + metrics_fn: Callable[ + [jnp.ndarray, Dict[str, jnp.ndarray]], Dict[str, Tuple[float, int]] + ], + train_state: TrainState, + batch: Dict[str, jnp.ndarray], + dropout_rng: jnp.ndarray, + accum_steps: Optional[int], +) -> Tuple[ + Optional[jnp.ndarray], + jnp.ndarray, + jnp.ndarray, + Dict[str, Tuple[float, int]], +]: + """Accumulate gradients over multiple steps. + + This enables training with larger effective batch sizes. + Note that currently, gradient accumulation is not supported when the + `model_state` is used, e.g., for models that have batch normalization and + store batch statistics in the `model_state`. + + Note that if `accum_steps` <= 1 or is None, then the gradient of a single step + is simply returned. + + Args: + compute_gradient_fn: Gradient function, e.g., `jax.value_and_grad( + training_loss_fn, ...). + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics. + train_state: An instance of TrainState that has the parameters of the model, + state of the model, etc. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + dropout_rng: JAX rng key used for dropout. + accum_steps: Number of accumulating steps (number of micro batches). When + set to None or =<1, no accumulation is done. + + Returns: + A tuple of model_state (e.g., batch statistics), + computed gradients, training loss, and calculated metrics. + """ + params = train_state.params + if accum_steps and accum_steps > 1: + batch_size = next(iter(batch.values())).shape[0] + microbatch_size = batch_size // accum_steps + if batch_size % accum_steps != 0: + raise ValueError( + f'Bad accum_steps {accum_steps} for batch size {batch_size}' + ) + logging.info( + 'Using microbatches: %d microbatches, %d size', + accum_steps, + microbatch_size, + ) + + def get_microbatch( + batch: Dict[str, jnp.ndarray], idx: int + ) -> Dict[str, jnp.ndarray]: + """Fetch microbatch slice from the given batch.""" + return jax.tree_util.tree_map( + lambda x: x.reshape((-1, microbatch_size) + x.shape[1:])[idx], batch + ) + + def per_microbatch_compute_gradient_fn( + loop_cnt: int, + loop_state: Tuple[ + jnp.ndarray, jnp.ndarray, jnp.ndarray, Dict[str, Tuple[float, int]] + ], + ) -> Tuple[ + jnp.ndarray, jnp.ndarray, Dict[str, Tuple[float, int]], jnp.ndarray + ]: + dropout_rng, grad_accum, train_loss_acc, metrics_acc = loop_state + dropout_rng, sub_dropout_rng = jax.random.split(dropout_rng) + mbatch = get_microbatch(batch, loop_cnt) + (train_loss, (_, mlogits)), grad = compute_gradient_fn( + params, mbatch, sub_dropout_rng + ) + metrics = metrics_fn(mlogits, mbatch) + # Accumulate gradients and metrics. + grad = jax.tree_util.tree_map(jnp.add, grad_accum, grad) + metrics = jax.tree_util.tree_map(jnp.add, metrics, metrics_acc) + train_loss = jax.tree_util.tree_map(jnp.add, train_loss, train_loss_acc) + return dropout_rng, grad, train_loss, metrics + + # Initialize gradient accumulation loop state. + dropout_rng, sub_dropout_rng = jax.random.split(dropout_rng) + init_mbatch = get_microbatch(batch, 0) + (init_train_loss, (model_state, init_logits)), grad_init = ( + compute_gradient_fn(params, init_mbatch, sub_dropout_rng) + ) + if jax.tree_util.tree_leaves(model_state): + # If the model_state is not empty. + raise ValueError( + 'Gradient accumulation is not supported when the ' + 'model_state is in used (e.g. models w/ batch norm).' + ) + + metrics_init = metrics_fn(init_logits, init_mbatch) + del init_logits, init_mbatch + + # Run gradient accumulation loop. + loop_init = (dropout_rng, grad_init, init_train_loss, metrics_init) + _, grad_acc, train_loss, metrics_acc = jax.lax.fori_loop( + 1, accum_steps, per_microbatch_compute_gradient_fn, loop_init + ) + grad_acc = jax.tree_util.tree_map(lambda x: x / accum_steps, grad_acc) + train_loss = jax.tree_util.tree_map(lambda x: x / accum_steps, train_loss) + return model_state, grad_acc, train_loss, metrics_acc + else: + (train_loss, (model_state, logits)), grad = compute_gradient_fn( + params, batch, dropout_rng + ) + metrics = metrics_fn(logits, batch) + return model_state, grad, train_loss, metrics + + +class Chrono: + """Measures time and reports progress. + + This is a modified fork of Chrono class from big_vision codebase: + https://github.com/google-research/big_vision/blob/main/big_vision/utils.py + + Some concepts: + 1. This differentiates between three "types" of time: + - training time: the time spent on actual training (fprop/bprop/update) + - program time: overall time the program runs, including all overheads + - pause time: the chronometer can be paused (eg during evals). + 2. This handles a "warmup": the first step is skipped for training time + purposes, as it includes significant compilation overheads, which distort + estimates. + 3. `accumulates` (i.e. integrates) timings, and saves/loads them across + restarts. + """ + + def __init__(self, example_type: str = 'img', warmup: int = 2): + self.program_start_time = time.monotonic() + self.train_start_time = None + self.train_start_step = None # When we started timing (after warmup) + + self.prev_time = None + self.prev_step = None + + self.pause_start = None + self.paused_time = 0 + + self.warmup = warmup # How many calls to `tick` to skip. + self.load() # Inits accum integrators. + self.note = 'Chrono n/a' + self.example_type = example_type + + def inform( + self, + first_step: int, + total_steps: int, + global_bs: int, + steps_per_epoch: int, + ): + """Provide some extra info that's only known later in the program.""" + self.prev_step = copy.deepcopy(first_step) + self.first_step = copy.deepcopy(first_step) + self.total_steps = total_steps + self.steps_per_epoch = steps_per_epoch + self.global_bs = global_bs + if total_steps: + self.note = ( + f'Steps:{first_step}/{total_steps} [{first_step/total_steps:.1%}]' + ) + + def tick( + self, + step: int, + writer: metric_writers.MetricWriter, + write_note: Callable[[str], None], + ): + """A chronometer tick.""" + summary = {} + + def hms(s): + """Format time in hours/minutes/seconds.""" + if s < 60: + return f'{s:.0f}s' + m, s = divmod(s, 60) + if m < 60: + return f'{m:.0f}m{s:.0f}s' + h, m = divmod(m, 60) + return f'{h:.0f}h{m:.0f}m' # Seconds intentionally omitted. + + now = time.monotonic() + summary.update({'uptime': now - self.program_start_time}) + # We always count examples, regardless of the timing-related warmup that + # happens a few lines below. + ds = step - self.prev_step # Steps between ticks + self.prev_step = step + self.accum_examples_seen += ds * self.global_bs + summary.update({'examples_seen': self.accum_examples_seen}) + if self.steps_per_epoch: + summary.update({'epoch': step / self.steps_per_epoch}) + + # We take the start as the second time `tick` is called, so we avoid + # measuring the overhead of compilation and don't include it in time + # estimates. + if self.warmup > 1: + self.warmup -= 1 + write_note(self.note) # This can help debugging. + return + if self.warmup == 1: + self.train_start_time = self.prev_time = now + self.train_start_step = step + self.accum_program_time += now - self.program_start_time + self.paused_time = 0 # Drop pauses that happened before timing starts. + self.warmup = 0 + write_note(self.note) # This can help debugging. + return + + # Measurement with micro-timings of current training steps speed. + # Time between ticks (ignoring pause) + if self.prev_time is None: + raise ValueError('prev_time is None, possible warmup was skipped') + dt = now - self.prev_time - self.paused_time + ncores = jax.device_count() # Global device count + summary.update({ + f'{self.example_type}/sec/core': self.global_bs * ds / dt / ncores, + f'{self.example_type}/sec': self.global_bs * ds / dt, + }) + + # Accumulate (integrate) times, good for plots. + self.accum_train_time += dt + self.accum_pause_time += self.paused_time + self.accum_program_time += dt + self.paused_time + + # Convert to, and log as, core hours. + core_hours = self.accum_train_time * ncores / 60 / 60 + devtype = jax.devices()[0].device_kind + summary.update({ + f'core_hours_{devtype}': core_hours, + 'core_hours': core_hours, # For convenience as x-axis in sweeps. + }) + + # Progress note with "global" full-program average timings + # (eg in program-time minus warmup) + dt = now - self.train_start_time # Time elapsed since end of warmup. + steps_timed = step - self.train_start_step + steps_todo = self.total_steps - step + self.note = f'Steps:{step}/{self.total_steps} [{step/self.total_steps:.1%}]' + self.note += f'\nWalltime:{hms(self.accum_program_time)}' + self.note += f' ({hms(self.accum_pause_time)} Not-train)' + self.note += f'\nETA:{hms(dt / steps_timed * steps_todo)}' + self.note += ( + f'\nTotal train time:{hms(dt / steps_timed * self.total_steps)}' + ) + write_note(self.note) + writer.write_scalars(step, summary) + self.prev_time = now + self.paused_time = 0 + + def pause(self, wait_for=()): + assert self.pause_start is None, "Don't pause twice." + jax.block_until_ready(wait_for) + self.pause_start = time.monotonic() + + def resume(self): + assert self.pause_start is not None, 'Cannot resume without pausing first.' + self.paused_time += time.monotonic() - self.pause_start + self.pause_start = None + + def save(self): + return dict( + accum_program_time=self.accum_program_time, + accum_train_time=self.accum_train_time, + accum_pause_time=self.accum_pause_time, + accum_examples_seen=self.accum_examples_seen, + ) + + def load(self, ckpt={}): # pylint: disable=dangerous-default-value + self.accum_program_time = ckpt.get('accum_program_time', 0.0) + self.accum_train_time = ckpt.get('accum_train_time', 0.0) + self.accum_pause_time = ckpt.get('accum_pause_time', 0.0) + self.accum_examples_seen = ckpt.get('accum_examples_seen', 0) + + @contextlib.contextmanager + def paused(self, wait_for: Iterable[Any] = ()): + """A context manager for temporarily pausing to await arguments. + + Example: + with chrono.paused(wait_for=some_jax_operations): + # Operations to perform while chrono is paused + ... + + Args: + wait_for: An iterable of JAX operations to wait for before pausing. + + Yields: + The Chrono object. + """ + self.pause(wait_for=wait_for) + try: + yield self + finally: + self.resume() + + +def barrier_across_hosts(): + """Ensure all hosts stay up until the end, otherwise the program may hang.""" + if jax.process_count() > 1: + x = jnp.ones([jax.local_device_count()]) + x = jax.device_get(jax.pmap(lambda x: jax.lax.psum(x, 'i'), 'i')(x)) + assert x[0] == jax.device_count() + + +def handle_checkpointing( + train_state: TrainState, + chrono: Chrono, + workdir: str, + max_checkpoints_to_keep=3, +): + """Handles all the bookkeeping around checkpointing. + + Syncs the training state and unreplicates it, stops & restarts Chrono + (and handles its metadata) and writes the actual checkpoint. + + Args: + train_state: A replicated TrainState. + chrono: The Chrono object. + workdir: the workdir of the process. + max_checkpoints_to_keep: how many checkpoints to keep. + """ + train_state = sync_model_state_across_replicas(train_state) + if jax.process_index() == 0: + unrep_train_state = jax_utils.unreplicate(train_state) + metadata = unrep_train_state.metadata + metadata['chrono'] = chrono.save() + unrep_train_state = unrep_train_state.replace(metadata=metadata) + save_checkpoint( + workdir, unrep_train_state, max_to_keep=max_checkpoints_to_keep + ) + del unrep_train_state diff --git a/scenic/train_lib/trainers.py b/scenic/train_lib/trainers.py new file mode 100644 index 0000000000000000000000000000000000000000..9622575d2735d29f21c58625e83a865464732216 --- /dev/null +++ b/scenic/train_lib/trainers.py @@ -0,0 +1,48 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Registry for the available trainers.""" + +from scenic.train_lib import classification_trainer +from scenic.train_lib.transfer import transfer_trainer + +ALL_TRAINERS = { + 'classification_trainer': classification_trainer.train, + 'transfer_trainer': transfer_trainer.train, +} + + +def get_trainer(train_fn_name): + """Get the corresponding trainer function. + + The returned train function has the following API: + ``` + train_state, train_summary, eval_summary = train_fn( + rng, model_cls, dataset, config, workdir, summary_writer) + ``` + Where the train_state is a checkpointable state of training and train_summary, + and eval_summary are python dictionary that contains metrics. + + Args: + train_fn_name: str; Name of the train_fn_name, e.g. + 'classification_trainer'. + + Returns: + The train function. + Raises: + ValueError if train_fn_name is unrecognized. + """ + if train_fn_name not in ALL_TRAINERS.keys(): + raise ValueError('Unrecognized trainer: {}'.format(train_fn_name)) + return ALL_TRAINERS[train_fn_name] diff --git a/scenic/train_lib/transfer/__init__.py b/scenic/train_lib/transfer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/train_lib/transfer/fewshot_utils.py b/scenic/train_lib/transfer/fewshot_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..35f83ad6b2adec2fe363201db892899f2268dc57 --- /dev/null +++ b/scenic/train_lib/transfer/fewshot_utils.py @@ -0,0 +1,545 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utils for few-shot evaluation. + +Adapted from: +https://github.com/google-research/big_vision/blob/main/big_vision/evaluators/fewshot_lsr.py +""" + +import functools +from typing import Any, Optional, Tuple + +from absl import logging +from clu import metric_writers +from flax import jax_utils +import jax +import jax.numpy as jnp +import numpy as np +from scenic.dataset_lib import dataset_utils +from scenic.dataset_lib.big_transfer import builder as pp_builder +from scenic.train_lib import train_utils +import tensorflow_datasets as tfds + +_BIAS_CONSTANT = 100.0 +PyTree = Any + + +def prepare_data(xs, pad=None, num_devices=None): + """Makes sure data fits local devices. + + Args: + xs: the data to be reshaped (tree-map'able). + pad: if not None, zero-pad arrays such that their first dimension has this + size. Also introduces a "mask" key in `xs` that contains ones where the + un-padded data resides and zeros where the padding is. + num_devices: Number of devices to distribute the data across. If None, + ``local_device_count`` will be used instead. + + Returns: + `xs` but re-shaped to (local_devices, -1, ...) and optionally padded. + """ + # Create a mask which will be 1 for real entries and 0 for padded ones. + if pad is not None: + xs['mask'] = np.full(len(xs['image']), 1.0) + local_device_count = num_devices or jax.local_device_count() + + def _prepare(x): + # Transforms x into read-only numpy array without copy if possible, see: + # https://github.com/tensorflow/tensorflow/issues/33254#issuecomment-542379165 + x = np.asarray(memoryview(x)) + + if pad is not None and len(x) != pad: + # Append `pad - len(x)` rows of zeros. + x = np.r_[x, np.zeros((pad - len(x),) + x.shape[1:], x.dtype)] + + return x.reshape((local_device_count, -1) + x.shape[1:]) + + xs = jax.tree_util.tree_map(_prepare, xs) + return {'inputs': xs['image'], 'label': xs['label'], 'batch_mask': xs['mask']} + + +def prepare_data_jit(xs, pad: Optional[int], global_devices: np.ndarray): + """Prepare data-pipeline for jit-based backend.""" + + if pad is not None: + xs['mask'] = np.full(len(xs['image']), 1.0) + + def _pad(x): + if pad is not None and len(x) != pad: + x = np.asarray(memoryview(x)) + # Append `pad - len(x)` rows of zeros. + x = np.r_[x, np.zeros((pad - len(x),) + x.shape[1:], x.dtype)] + + return x + + xs = jax.tree_util.tree_map(_pad, xs) + xs = dataset_utils.shard_jit(xs, global_devices) + return {'inputs': xs['image'], 'label': xs['label'], 'batch_mask': xs['mask']} + + +def start_input_pipeline(data, pad=None, num_devices=None, backend='pmap', + devices: Optional[np.ndarray] = None): + train_iter = iter(data) + if backend == 'pmap': + train_iter = map( + lambda x: prepare_data(x, pad, num_devices=num_devices), train_iter) + elif backend == 'jit': + train_iter = map( + lambda x: prepare_data_jit(x, pad, global_devices=devices), train_iter) + return train_iter + + +# Setup function for few-shot regression on CPU to avoid 'polluting' the TPU. +# It's fast enough when done in jax instead of numpy. +@functools.partial(jax.jit, backend='cpu', static_argnums=(5, 6)) +def _fewshot_acc_fn(x: jnp.ndarray, + y: jnp.ndarray, + x_test: jnp.ndarray, + y_test: jnp.ndarray, + l2_reg: float, + num_classes: int, + target_is_one_hot: bool = False, + stddev_constant: float = 1e-5) -> float: + """Computes (x,y) linear regression accuracy on (x_test, y_test). + + Args: + x: An [n_examples, n_classes] matrix of feature representations. This will + be whitened before computing linear regression. + y: Array of labels. Shape is either [n_examples] or [n_examples, n_classes]. + In the latter case, target_is_one_hot must be True. + x_test: An [n_test_examples, n_classes] matrix of feature representations. + Will be whitened before computing linear regression. + y_test: Array of labels. Shape is either [n_examples] or [n_examples, + n_classes]. In the latter case, target_is_one_hot must be True. + l2_reg: L2 regularisation co-efficient to apply when computing linear + regression (also known as "ridge regression"). + num_classes: The number of classes in the dataset. Used to convert y to a + one-hot representation if not already. + target_is_one_hot: If the labels, y, are already one-hot or not. + stddev_constant: Small constant to add when computing the standard deviation + to avoid it being 0. + + Returns: + The accuracy or precision@1 (for one-hot labels), after computing linear + regression. + """ + + def preprocess_features(data: jnp.ndarray, mean: jnp.ndarray, + std: jnp.ndarray) -> jnp.ndarray: + """Whitens features and adds a bias term.""" + data_whitened = (data - mean) / std + # Add a constant feature for the bias, large so it's almost unregularized. + data_whitened_bias = jnp.pad( + data_whitened, ((0, 0), (0, 1)), constant_values=_BIAS_CONSTANT) + return data_whitened_bias + + mean = jnp.mean(x, axis=0, keepdims=True) + std = jnp.std(x, axis=0, keepdims=True) + stddev_constant + + x_whitened = preprocess_features(x, mean, std) + x_test_whitened = preprocess_features(x_test, mean, std) + + # Solve linear regression problem. + if not target_is_one_hot: + y_one_hot = jax.nn.one_hot(y, num_classes) + else: + y_one_hot = y + y_rescaled = 2.0 * y_one_hot - 1.0 + w = jnp.linalg.solve( + x_whitened.T @ x_whitened + jnp.eye(x_whitened.shape[1]) * l2_reg, + x_whitened.T @ y_rescaled) + + if target_is_one_hot: + # Compute the precision@1 for multilabel datasets. This is the same as + # accuracy if there is one active label. + preds = x_test_whitened @ w + top1_idx = jnp.argmax(preds, axis=-1) + top1_correct = jnp.take_along_axis(y_test, top1_idx[..., None], axis=-1) + top1_correct = jnp.squeeze(top1_correct) + return jnp.mean(top1_correct) # pytype: disable=bad-return-type # jnp-type + else: + # Predict test-set values and measure their accuracy. + preds = jnp.argmax(x_test_whitened @ w, axis=1) + return jnp.mean(preds == y_test) # pytype: disable=bad-return-type # jnp-type + + +class FewShotEvaluator: + """Class for few-shot evaluation.""" + + def __init__(self, representation_fn, fewshot_config, + backend: str = 'pmap', devices: Optional[jnp.ndarray] = None, + out_shardings: Optional[PyTree] = None): + self.shots = fewshot_config.shots + self.l2_regs = fewshot_config.l2_regs + self.local_batch_size = fewshot_config.batch_size // jax.process_count() + self.pp_tr = fewshot_config.pp_train + self.pp_te = fewshot_config.pp_eval + self.walk_first = fewshot_config.walk_first + self._datasets = {} # This will be our cache for lazy loading. + + self.backend = backend + assert self.backend in { + 'pmap', + 'jit', + }, f'Unsupported backend: {self.backend}. Must be one of [pmap, jit].' + if self.backend == 'jit': + assert devices is not None, 'Devices must be provided when using jit.' + self.devices = devices + + if self.backend == 'pmap': + self.repr_fn = jax.pmap( + representation_fn, donate_argnums=(1,), axis_name='batch' + ) + elif self.backend == 'jit': + self.repr_fn = jax.jit( + representation_fn, donate_argnums=(1,), out_shardings=out_shardings + ) + + # Setup input pipeline. + def _get_dataset(self, dataset, train_split, test_split): + """Lazy-loads given dataset.""" + key = (dataset, train_split, test_split) + try: + return self._datasets[key] + except KeyError: + train_ds = dataset_utils.get_data( + dataset=dataset, + split=train_split, + batch_size=self.local_batch_size, + preprocess_fn=pp_builder.get_preprocess_fn(self.pp_tr), + repeats=1, + cache='loaded', + drop_remainder=False) + test_ds = dataset_utils.get_data( + dataset=dataset, + split=test_split, + batch_size=self.local_batch_size, + preprocess_fn=pp_builder.get_preprocess_fn(self.pp_te), + repeats=1, + cache='loaded', + drop_remainder=False) + num_classes = tfds.builder(dataset).info.features['label'].num_classes + return self._datasets.setdefault(key, (train_ds, test_ds, num_classes)) + + def _get_repr(self, train_state, data): + """Compute representation for the whole dataset.""" + pre_logits_list = [] + labels_list = [] + for batch in start_input_pipeline(data, + pad=self.local_batch_size, + backend=self.backend, + devices=self.devices): + pre_logits, labels, mask = self.repr_fn(train_state, batch) + # We need to unreplicate the output of `lax.all_gather`. + # Shapes at this point are: + # pre_logits: `[hosts, devices, global_batch, features]`. + # labels: `[hosts, devices, global_batch]`. + # mask: `[hosts, devices, global_batch]`. + if self.backend == 'pmap': + pre_logits = jax_utils.unreplicate(pre_logits) + + if pre_logits.ndim != 3: + raise ValueError('Shape of the representations sent to the linear ' + 'fewshot should be `[num_devices, bs, features]`.') + + mask = np.array(jax_utils.unreplicate(mask)).astype(bool) + pre_logits_list.append(np.array(pre_logits)[mask]) + labels_list.append(np.array(jax_utils.unreplicate(labels))[mask]) + else: + pre_logits = jax.device_get(pre_logits) + + if pre_logits.ndim != 2: + raise ValueError('Shape of the representations sent to the linear ' + 'fewshot should be `[bs, features]`.') + + mask = np.array(jax.device_get(mask)).astype(bool) + pre_logits_list.append(np.array(pre_logits)[mask]) + labels_list.append(np.array(jax.device_get(labels))[mask]) + + if pre_logits.shape[-1] > 2048: + logging.warning( + 'The feature size for the representations is too large' + '(feature size = %d). This might cause severe slowdown ' + 'of solving the linear equation.', pre_logits.shape[-1]) + + pre_logits = np.concatenate(pre_logits_list, axis=0) + labels = np.concatenate(labels_list, axis=0) + return pre_logits, labels + + def compute_fewshot_metrics(self, train_state, dataset, train_split, + test_split): + """Compute few-shot metrics on one dataset.""" + train_ds, test_ds, num_classes = self._get_dataset(dataset, train_split, + test_split) + logging.info('[fewshot][%s]: Precomputing train (%s)', dataset, train_split) + repr_train, labels_train = self._get_repr(train_state, train_ds) + logging.info('[fewshot][%s]: Precomputing test (%s)', dataset, test_split) + repr_test, labels_test = self._get_repr(train_state, test_ds) + + logging.info('[fewshot][%s]: solving systems', dataset) + + # Collect where we have samples of which classes. + class_indices = [ + np.where(labels_train == cls_i)[0] for cls_i in range(num_classes) + ] + + results = {} + for shots in self.shots: + all_idx = [indices[:shots] for indices in class_indices] + all_idx = np.concatenate(all_idx, axis=0) + x = repr_train[all_idx] + y = labels_train[all_idx] + + for l2_reg in self.l2_regs: + acc = _fewshot_acc_fn(x, y, repr_test, labels_test, l2_reg, num_classes) + results[shots, l2_reg] = np.array(acc) + return results + + def run_all(self, train_state, datasets): + """Compute summary over all `datasets` that comes from config.""" + results = {} + for name, dataset_args in datasets.items(): + results[name] = self.compute_fewshot_metrics(train_state, *dataset_args) + + # Now also figure out the regularization parameter that works best across + # all datasets, per-shot. Similar to ATARI benchmark requiring one single + # hyper-param across tasks, or BiT-HyperRule defining one clear thing. + # Avoids over-fitting to a single task by selecting on test there, while + # also avoiding the need to do cross-validation runs for each task. + best_l2 = {} + for shots in self.shots: + reg_ranks = [] + for name, res in results.items(): + reg_accus = [res[shots, l2] for l2 in self.l2_regs] + reg_ranks.append(np.argsort(np.argsort(reg_accus))) + best_l2[shots] = self.l2_regs[np.argmax(np.mean(reg_ranks, axis=0))] + + return results, best_l2 + + def log_fewshot_summary(self, writer: metric_writers.MetricWriter, step, + results): + """Call `writer` with a descriptive string and the results.""" + results, best_l2 = results + scalars = {} + + # First, go through each individual result: + for dataset_name, result in results.items(): + for (shots, l2), acc in result.items(): + scalars[f'zz/{dataset_name}_{shots}shot_l2={l2}'] = acc + + # Second, report each dataset/shot with the single 'globally' best l2. + for shots, l2 in best_l2.items(): + scalars[f'z/best_l2_for_{shots}shot_image_eval'] = l2 + + for dataset_name, result in results.items(): + scalars[f'z/{dataset_name}_{shots}shot'] = result[shots, l2] + + # And a highlight, if desired: + if self.walk_first: + dataset_name, shots = self.walk_first + l2 = best_l2[shots] + highlight_value = results[dataset_name][shots, l2] + scalars[f'a/{dataset_name}_{shots}shot'] = highlight_value + + writer.write_scalars(step, scalars) + + +def min_without_none(a: Optional[int], b: Optional[int]): + """Returns the minimum of two integers, ignoring None values.""" + if a is None and b is None: + raise ValueError('At least one argument should not be None') + if a is None: + return b + if b is None: + return a + return min(a, b) + + +class FewShotEvaluatorVideo: + """Class for few-shot evaluation.""" + + def __init__(self, representation_fn, fewshot_config): + self.config = fewshot_config + self.shots = fewshot_config.shots + self.l2_regs = fewshot_config.l2_regs + self.local_batch_size = fewshot_config.batch_size // jax.process_count() + self.repr_fn = jax.pmap( + representation_fn, donate_argnums=(1,), axis_name='batch') + self.walk_first = fewshot_config.get('walk_first') + self._datasets = {} # This will be our cache for lazy loading. + + def _get_dataset(self, + dataset_name: str, + train_split: str, + test_split: str, + num_train_examples: Optional[int] = None, + num_test_examples: Optional[int] = None): + """Lazy-loads given dataset.""" + assert train_split == 'train', ('train_split should be set to train for ' + 'few-shot-video evaluator') + assert (test_split == 'validation' or test_split == 'test'), ( + 'test_split should be set to validation or test for few-shot-video ' + 'evaluator') + if dataset_name in self._datasets: + return self._datasets[dataset_name] + else: + rng = jax.random.PRNGKey(self.config.rng_seed) + data_rng, rng = jax.random.split(rng) + with self.config.unlocked(): + self.config.dataset_name = dataset_name + dataset = train_utils.get_dataset(self.config, data_rng) + train_ds = dataset.train_iter + num_train_samples = min_without_none( + num_train_examples, dataset.meta_data['num_train_examples']) + if test_split == 'validation': + test_ds = dataset.valid_iter + num_test_samples = min_without_none( + num_test_examples, dataset.meta_data['num_eval_examples']) + elif test_split == 'test': + test_ds = dataset.test_iter + num_test_samples = min_without_none( + num_test_examples, dataset.meta_data['num_test_examples']) + num_classes = dataset.meta_data['num_classes'] + is_one_hot = dataset.meta_data['target_is_onehot'] + return self._datasets.setdefault( + dataset_name, (train_ds, test_ds, num_train_samples, num_test_samples, + num_classes, is_one_hot)) + + def _get_repr(self, train_state, data, num_samples): + """Compute representation for the whole dataset.""" + pre_logits_list = [] + labels_list = [] + total_steps = int(np.ceil(num_samples / self.config.batch_size)) + for _ in range(1, total_steps + 1): + batch = next(data) + pre_logits, labels, mask = self.repr_fn(train_state, batch) + # We need to unreplicate the output of `lax.all_gather`. + # Shapes at this point are: + # pre_logits: `[hosts, devices, global_batch, features]`. + # labels: `[hosts, devices, global_batch]`. + # mask: `[hosts, devices, global_batch]`. + pre_logits = jax_utils.unreplicate(pre_logits) + if pre_logits.ndim != 3: + raise ValueError('Shape of the representations sent to the linear ' + 'fewshot should be `[num_devices, bs, features]`.') + if pre_logits.shape[-1] > 2048: + logging.warning( + 'The feature size for the representations is too large' + '(feature size = %d). This might cause severe slowdown ' + 'of solving the linear equation.', pre_logits.shape[-1]) + mask = np.array(jax_utils.unreplicate(mask)).astype(bool) + pre_logits_list.append(np.array(pre_logits)[mask]) + labels_list.append(np.array(jax_utils.unreplicate(labels))[mask]) + pre_logits = np.concatenate(pre_logits_list, axis=0) + labels = np.concatenate(labels_list, axis=0) + return pre_logits, labels + + def compute_fewshot_metrics(self, train_state, dataset, train_split, + test_split): + """Compute few-shot metrics on one dataset.""" + + (train_ds, test_ds, num_train_samples, num_test_samples, num_classes, + is_one_hot) = self._get_dataset(dataset, train_split, test_split, + self.config.get('num_train_examples'), + self.config.get('num_test_examples')) + logging.info('[fewshot][%s]: Precomputing train (%s)', dataset, train_split) + repr_train, labels_train = self._get_repr(train_state, train_ds, + num_train_samples) + labels_train = jnp.squeeze(labels_train) + logging.info('[fewshot][%s]: Precomputing test (%s)', dataset, test_split) + repr_test, labels_test = self._get_repr(train_state, test_ds, + num_test_samples) + labels_test = jnp.squeeze(labels_test) + logging.info('[fewshot][%s]: Solving linear system', dataset) + # Collect where we have samples of which classes. + if is_one_hot: + class_indices = [ + np.where(labels_train[:, cls_i] == 1)[0] + for cls_i in range(num_classes) + ] + else: + class_indices = [ + np.where(labels_train == cls_i)[0] for cls_i in range(num_classes) + ] + + results = {} + for shots in self.shots: + all_idx = [indices[:shots] for indices in class_indices] + all_idx = np.concatenate(all_idx, axis=0) + x = repr_train[all_idx] + y = labels_train[all_idx] + for l2_reg in self.l2_regs: + acc = _fewshot_acc_fn(x, y, repr_test, labels_test, l2_reg, num_classes, + is_one_hot) + results[shots, l2_reg] = np.array(acc) + return results + + def run_all(self, train_state, datasets): + """Compute summary over all `datasets` that comes from config.""" + results = {} + for name, dataset_args in datasets.items(): + results[name] = self.compute_fewshot_metrics(train_state, *dataset_args) + + # Now also figure out the regularization parameter that works best across + # all datasets, per-shot. Similar to ATARI benchmark requiring one single + # hyper-param across tasks, or BiT-HyperRule defining one clear thing. + # Avoids over-fitting to a single task by selecting on test there, while + # also avoiding the need to do cross-validation runs for each task. + best_l2 = {} + for shots in self.shots: + reg_ranks = [] + for name, res in results.items(): + reg_accuracies = [res[shots, l2] for l2 in self.l2_regs] + reg_ranks.append(np.argsort(np.argsort(reg_accuracies))) + best_l2[shots] = self.l2_regs[np.argmax(np.mean(reg_ranks, axis=0))] + + return results, best_l2 + + def log_fewshot_summary(self, + writer: metric_writers.MetricWriter, + step: int, + results: Tuple[train_utils.PyTree, + train_utils.PyTree], + prefix_detailed: str = 'zz_fewshot_detailed', + prefix_best_l2: str = 'fewshot', + prefix_highlight: str = 'fewshot_main', + flush_writer: bool = True): + """Call `writer` with a descriptive string and the results.""" + results, best_l2 = results + scalars = {} + + # First, go through each individual result: + for dataset_name, result in results.items(): + for (shots, l2), acc in result.items(): + scalars[f'{prefix_detailed}/{dataset_name}_{shots}shot_l2={l2}'] = acc + + # Second, report each dataset/shot with the single 'globally' best l2. + for shots, l2 in best_l2.items(): + scalars[f'{prefix_detailed}/best_l2_for_{shots}shot_video_eval'] = l2 + + for dataset_name, result in results.items(): + value = result[shots, l2] + scalars[f'{prefix_best_l2}/{dataset_name}_{shots}shot'] = value + + # And a highlight, if desired: + if self.walk_first: + dataset_name, shots = self.walk_first + l2 = best_l2[shots] + value = results[dataset_name][shots, l2] + scalars[f'{prefix_highlight}/{dataset_name}_{shots}shot'] = value + + writer.write_scalars(step, scalars) + if flush_writer: + writer.flush() diff --git a/scenic/train_lib/transfer/linear_probe_utils.py b/scenic/train_lib/transfer/linear_probe_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..fa02c63153d3d5cf939be974ac405984671c58e3 --- /dev/null +++ b/scenic/train_lib/transfer/linear_probe_utils.py @@ -0,0 +1,420 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utils for linear probe evaluation.""" + +import functools +import logging +from typing import Any, Callable, Dict, List, Mapping, Optional, Text, Tuple, Type, Union + +from absl import logging +from clu import metric_writers +import flax +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import classification_model +from scenic.model_lib.base_models import model_utils as scenic_model_utils +from scenic.train_lib import classification_trainer +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import train_utils + + +PyTree = Union[Mapping[str, Mapping], Any] +Batch = Dict[str, jnp.ndarray] +Metric = Dict[str, Tuple[float, int]] + + +class LinearProbe(nn.Module): + """A linear probe.""" + num_classes: int + + @nn.compact + def __call__(self, x, train: bool = False, debug: bool = False): + del train, debug + x = jax.lax.stop_gradient(x) + x = nn.Dense(features=self.num_classes)(x) + return x + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + representation_fn: Callable[[Batch], jnp.ndarray], + linear_probe: nn.Module, + label_smoothing: Optional[float] = None, + max_grad_norm: Optional[float] = None, +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]]]: + """The training step. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. + batch: A single batch of data. Must contain the following keys: + 'representations': A [batch_size, representation_size] ndarray of the + outputs of the base network, which will be fed into the linear probe. + 'label': A [batch_size] ndarray of integer class labels. 'batch_mask': A + [batch_size] ndarray where 1.0 indicates a valid sample and 0.0 indicates + an invalid sample. + representation_fn: A function that given a batch, returns representations + that are passed to the linear_probe_fn as input. + linear_probe: The linear probe module. + label_smoothing: The label smoothing coefficient. + max_grad_norm: Maximum gradient norm used for gradient clliping. + + Returns: + The updated train state. + """ + + def loss_fn(params): + variables = {'params': params, **train_state.model_state} + logits, new_model_state = linear_probe.apply( + variables, representation_fn(batch), mutable=['batch_stats'], train=True + ) + loss = scenic_model_utils.weighted_softmax_cross_entropy( + logits, + batch['label'], + batch['batch_mask'], + label_smoothing=label_smoothing) + return loss, (new_model_state, logits) + + grad_fn = jax.value_and_grad(loss_fn, has_aux=True) + (train_cost, (new_model_state, logits)), grad = grad_fn(train_state.params) + del train_cost + + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if max_grad_norm is not None: + grad = clip_grads(grad, max_grad_norm) + + tx = train_state.tx + if tx is None: + raise ValueError('train_state.tx, the Gradient Transformation, is None') + + updates, new_opt_state = tx.update( + grad, train_state.opt_state, train_state.params + ) + new_params = optax.apply_updates(train_state.params, updates) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + ) + metrics = classification_model.classification_metrics_function( + logits, batch, target_is_onehot=True + ) + return new_train_state, metrics + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + representation_fn: Callable[[Batch], jnp.ndarray], + linear_probe: nn.Module, + metrics_fn: classification_trainer.MetricFn, +) -> Metric: + """Runs a single step of training. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data. + representation_fn: A function that given a batch, returns representations + that are passed to the linear_probe_fn as input. + linear_probe: The linear probe module. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + + Returns: + Calculated metrics. + """ + variables = {'params': train_state.params, **train_state.model_state} + logits = linear_probe.apply(variables, representation_fn(batch)) + metrics = metrics_fn(logits, batch) + return metrics + + +class LinearEvaluator: + """Class for linear evaluation. + + Attributes: + representation_fn: A function that is passed a TrainState and a Batch, and + returns a tuple of (representation, label, and mask) for that batch. label + and mask are ignored. + rng: A PRNG that will be used to preprocess the data and to initialize the + linear probe. + config: A ConfigDict. + linear_probe_cls: A Flax Module that is used as the linear probe. It must + have a constructor argument called `num_classes`. Other constructor + arguments are passed through via `linear_probe_init_kwargs`. + linear_probe_init_kwargs: Keyword arguments passed to the constructor of + `linear_probe_cls`. + """ + + def __init__(self, + representation_fn: Callable[[train_utils.TrainState, Batch], + Tuple[jnp.ndarray, Any, Any]], + rng: jnp.ndarray, + linear_eval_config: ml_collections.ConfigDict, + linear_probe_cls: Type[nn.Module] = LinearProbe, + linear_probe_init_kwargs: Optional[Dict[str, Any]] = None): + self.representation_fn = representation_fn + self.rng = rng + self.config = linear_eval_config # Shared configs among all datasets. + self.linear_probe_cls = linear_probe_cls + self.linear_probe_init_kwargs = linear_probe_init_kwargs or {} + self._datasets = {} # This will be our cache for lazy loading. + + def _get_dataset(self, ds_name: str, config: ml_collections.ConfigDict, + rng: jnp.ndarray) -> dataset_utils.Dataset: + """Lazy-loads given dataset.""" + try: + return self._datasets[ds_name] + except KeyError: + dataset = train_utils.get_dataset(config, rng) + return self._datasets.setdefault(ds_name, dataset) + + def _train(self, + representation_fn: Callable[[Batch], jnp.ndarray], + linear_probe: nn.Module, + dataset: dataset_utils.Dataset, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + ds_name: str, + writer: Optional[metric_writers.MetricWriter] = None, + repr_step: int = 0) -> train_utils.TrainState: + """The main training loop. + + Args: + representation_fn: A function that given a batch, returns representations + that are passed to the linear_probe_fn as input. + linear_probe: The linear probe module instance. + dataset: The dataset that has train_iter, valid_iter, meta_data, and + optionally, test_iter. + rng: JAX rng key. + config: Configurations of the optimizer and learning rate scheduler. + ds_name: The name of the training dataset. + writer: A metric writer. Only needed if train summaries are to be written. + repr_step: The training step of the representation model being evaluated. + + Returns: + The train state of the trained linear probe. + """ + # Initialize model. + input_shape = [1] + list(dataset.meta_data['input_shape'][1:]) + dummy_reprs = representation_fn({ + 'inputs': jnp.zeros(input_shape), + 'label': None, + 'batch_mask': None + }) + model_state, params = flax.core.pop( + linear_probe.init({'params': rng}, dummy_reprs), 'params' + ) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, lr_fn) + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + ) + train_state = jax_utils.replicate(train_state) + p_train_step = jax.pmap( + functools.partial( + train_step, + representation_fn=representation_fn, + linear_probe=linear_probe, + label_smoothing=config.get('label_smoothing'), + max_grad_norm=config.get('max_grad_norm'), + ), + donate_argnums=(0, 1), + axis_name='batch', + ) + # Calculate the total number of training steps. + total_steps, _ = train_utils.get_num_training_steps(config, + dataset.meta_data) + train_metrics = [] + extra_train_logs = [] + prefix = f'linear_eval_train/{ds_name}/step_{repr_step}' + for step in range(total_steps): + batch = next(dataset.train_iter) + train_state, metrics = p_train_step(train_state, batch) + train_metrics.append(metrics) + # TODO(scenic-dev): Figure out how to get the lr from the optimizer. + extra_train_logs.append({f'{prefix}/learning_rate': lr_fn(step)}) + if (step % 1000 == 0) or (step == total_steps - 1): + logging.info('Linear probe trained for %d steps.', step) + if (writer and self.config.get('log_train_summary_steps', 0) > 0 and + step % self.config.log_train_summary_steps == 0): + train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map( + train_utils.unreplicate_and_get, train_metrics), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_train_logs), + writer=writer, + prefix=prefix, + key_separator='/') + train_metrics = [] + extra_train_logs = [] + logging.info('Linear probe training complete for dataset %s.', ds_name) + return train_state + + def _eval(self, representation_fn: Callable[[Batch], jnp.ndarray], + linear_probe: nn.Module, dataset: dataset_utils.Dataset, + train_state: train_utils.TrainState, + config: ml_collections.ConfigDict, ds_name: str, + writer: metric_writers.MetricWriter, + repr_step: int) -> List[Metric]: + """Evaluates a trained linear probe. + + Args: + representation_fn: A function that given a batch, returns representations + that are passed to the linear_probe_fn as input. + linear_probe: The linear probe module instance. + dataset: The dataset that has train_iter, valid_iter, meta_data, and + optionally, test_iter. + train_state: The train state of the trained LinearProbe. + config: Configurations of evaluation, e.g., batch size. + ds_name: The name of the training dataset. + writer: A metric writer. + repr_step: The training step of the representation model being evaluated. + + Returns: + A list of metrics computed over each batch of test data. + """ + p_eval_step = jax.pmap( + functools.partial( + eval_step, + representation_fn=representation_fn, + linear_probe=linear_probe, + metrics_fn=functools.partial( + classification_model.classification_metrics_function, + target_is_onehot=dataset.meta_data['target_is_onehot'])), + donate_argnums=(1,), + axis_name='batch') + eval_metrics = [] + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int( + np.ceil(dataset.meta_data['num_eval_examples'] / eval_batch_size)) + for _ in range(total_eval_steps): + batch = next(dataset.valid_iter) + metrics = p_eval_step(train_state, batch) + eval_metrics.append(train_utils.unreplicate_and_get(metrics)) + + train_utils.log_eval_summary( + step=repr_step, + eval_metrics=eval_metrics, + writer=writer, + prefix=f'linear_eval/{ds_name}') + + return eval_metrics + + def run_one_dataset(self, ds_name: str, config: ml_collections.ConfigDict, + representation_fn: Callable[[Batch], jnp.ndarray], + rng: jnp.ndarray, writer: metric_writers.MetricWriter, + repr_step: int) -> List[Metric]: + """Computes linear evaluation metrics on one dataset. + + Args: + ds_name: Name of the dataset, used for loading the data from cache dict. + config: Configuration of the dataset, train and evaluation on. + representation_fn: A function that given a batch, returns representations + that are passed to the linear_probe_fn as input. + rng: The JAX rng key. + writer: A metric writer. Only needed if train summaries are to be written. + repr_step: The training step of the representation model being evaluated. + + Returns: + A list of metrics computed over each batch of test data. + """ + data_rng, train_rng = jax.random.split(rng) + dataset = self._get_dataset(ds_name, config, data_rng) + linear_probe_head = self.linear_probe_cls( + num_classes=dataset.meta_data['num_classes'], + **self.linear_probe_init_kwargs) + logging.info('[linear_eval]: Training linear probe for dataset %s', ds_name) + train_state = self._train(representation_fn, linear_probe_head, dataset, + train_rng, config, ds_name, writer, repr_step) + logging.info('[linear_eval]: Evaluating linear probe for dataset %s', + ds_name) + eval_metrics = self._eval(representation_fn, linear_probe_head, dataset, + train_state, config, ds_name, writer, repr_step) + return eval_metrics + + def run_all(self, repr_train_state: Any, + datasets: Dict[Text, ml_collections.ConfigDict], + writer: metric_writers.MetricWriter, + repr_step: int) -> Dict[Text, List[Metric]]: + """Computes linear evaluation metrics over multiple datasets. + + Args: + repr_train_state: The train state that should be passed in as the first + argument to `representation_fn`. + datasets: A dictionary of datasets to evaluate on. The keys are names of + the dataset that are used as the keys of the output dictionary. The + values are configurations for the linear probe. + writer: A metric writer. + repr_step: The training step of the representation model being evaluated. + + Returns: + A dictionary where the keys are the same as `datasets` and the values are + lists of metrics computed over each test batch of that dataset. + """ + + # Prepare the representation function given the current state of training. + def representation_fn(batch: Batch) -> jnp.ndarray: + return self.representation_fn( + train_state=jax_utils.unreplicate(repr_train_state), batch=batch)[0] # pytype: disable=wrong-keyword-args + + results = {} + for ds_name, ds_cfg in datasets.items(): + logging.info('[linear_eval][%s]', ds_name) + self.rng, ds_rng = jax.random.split(self.rng) + results[ds_name] = self.run_one_dataset(ds_name, ds_cfg, + representation_fn, ds_rng, writer, + repr_step) + + return results diff --git a/scenic/train_lib/transfer/tests/__init__.py b/scenic/train_lib/transfer/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scenic/train_lib/transfer/tests/test_fewshot_utils.py b/scenic/train_lib/transfer/tests/test_fewshot_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..1791be50c442c7a443197532ee7ab9ab868c3db3 --- /dev/null +++ b/scenic/train_lib/transfer/tests/test_fewshot_utils.py @@ -0,0 +1,87 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for few-shot utils.""" + +from absl.testing import absltest +from big_vision.evaluators import fewshot as bv_fewshot +import jax +from jax import random +from scenic.train_lib.transfer import fewshot_utils + +jax.config.update('jax_threefry_partitionable', False) + + +def big_vision_linear_regression(x, y, x_test, y_test, l2_reg, num_classes): + """Computes fewshot regression with eigenvalue solver in big_vision.""" + # pylint: disable=protected-access (testing a private function) + cache = bv_fewshot._precompute_cache(x, y, num_classes) + accuracy = bv_fewshot._eig_fewshot_acc_fn(cache, x_test, y_test, l2_reg) + # pylint: enable=protected-access + return accuracy + + +class LinearRegressionTest(absltest.TestCase): + """Tests linear regression used in few-shot evaluation.""" + + def test_linear_regression(self): + """Test linear regression.""" + # Generate random data. + num_points = 512 + dim = 16 + num_classes = 5 + l2_regs = [1.0, 2.0, 8.0, 0.0] + rng = random.PRNGKey(0) + + x = random.normal(rng, shape=(num_points, dim)) + x_test = random.normal(rng, shape=(num_points, dim)) + y = random.randint(rng, shape=(num_points,), minval=0, maxval=num_classes) + y_test = random.randint( + rng, shape=(num_points,), minval=0, maxval=num_classes) + + for l2_reg in l2_regs: + # Compute predictions. + accuracy = fewshot_utils._fewshot_acc_fn( # pylint: disable=protected-access (testing a private function) + x, + y, + x_test, + y_test, + l2_reg, + num_classes, + target_is_one_hot=False) + + # Compare with big_vision. + expected_accuracy = big_vision_linear_regression(x, y, x_test, y_test, + l2_reg, num_classes) + self.assertGreater(accuracy, 0) + self.assertLess(accuracy, 1) + self.assertAlmostEqual(accuracy, expected_accuracy, delta=1e-6) + + # Check they are identical when labels are one-hot. + y_one_hot = jax.nn.one_hot(y, num_classes) + y_test_one_hot = jax.nn.one_hot(y_test, num_classes) + + accuracy_one_hot = fewshot_utils._fewshot_acc_fn( # pylint: disable=protected-access (testing a private function) + x, + y_one_hot, + x_test, + y_test_one_hot, + l2_reg, + num_classes, + target_is_one_hot=True) + self.assertEqual(accuracy, accuracy_one_hot) + + +if __name__ == '__main__': + absltest.main() diff --git a/scenic/train_lib/transfer/transfer_trainer.py b/scenic/train_lib/transfer/transfer_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..4a3c59635c53cd14c2e655375f45dd7cd5ed06ef --- /dev/null +++ b/scenic/train_lib/transfer/transfer_trainer.py @@ -0,0 +1,551 @@ +# Copyright 2025 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Training script with transfer learning utilities.""" + +import functools +from typing import Any, Callable, Dict, Iterator, Tuple, Optional, Type + +from absl import logging +from clu import metric_writers +from clu import periodic_actions +from clu import platform +import flax +from flax import jax_utils +import flax.linen as nn +import jax +from jax.example_libraries.optimizers import clip_grads +import jax.numpy as jnp +import jax.profiler +import ml_collections +import numpy as np +import optax +from scenic.dataset_lib import dataset_utils +from scenic.model_lib.base_models import base_model +from scenic.train_lib import lr_schedules +from scenic.train_lib import optimizers +from scenic.train_lib import pretrain_utils +from scenic.train_lib import train_utils +from scenic.train_lib.transfer import fewshot_utils +from scenic.train_lib.transfer import linear_probe_utils + +# Aliases for custom types: +Batch = Dict[str, jnp.ndarray] +MetricFn = Callable[[jnp.ndarray, Dict[str, jnp.ndarray]], + Dict[str, Tuple[float, int]]] +LossFn = Callable[[jnp.ndarray, Batch, Optional[jnp.ndarray]], float] +LrFn = Callable[[jnp.ndarray], jnp.ndarray] + +flax.config.update('flax_use_orbax_checkpointing', False) + + +def train_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + loss_fn: LossFn, + lr_fn: LrFn, + metrics_fn: MetricFn, + config: ml_collections.ConfigDict, + debug: Optional[bool] = False +) -> Tuple[train_utils.TrainState, Dict[str, Tuple[float, int]], Dict[str, + Any]]: + """Runs a single step of training. + + Given the state of the training and a batch of data, computes + the loss and updates the parameters of the model. + + Note that in this code, the buffers of the first (train_state) and second + (batch) arguments are donated to the computation. + + Args: + train_state: The state of training including the current global_step, + model_state, rng, params, and optimizer. The buffer of this argument can + be donated to the computation. + batch: A single batch of data. The buffer of this argument can be donated to + the computation. + flax_model: A Flax model. + loss_fn: A loss function that given logits, a batch, and parameters of the + model calculates the loss. + lr_fn: The learning rate fn used for the logging the learning rate. + metrics_fn: A metrics function that given logits and batch of data, + calculates the metrics as well as the loss. + config: Configurations of the experiment. + debug: Whether the debug mode is enabled during training. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Updated state of training and computed metrics for logging. + """ + training_logs = {} + new_rng, rng = jax.random.split(train_state.rng) + + if config.get('mixup') and config.mixup.alpha: + mixup_rng, rng = jax.random.split(rng, 2) + mixup_rng = train_utils.bind_rng_to_host_device( + mixup_rng, + axis_name='batch', + bind_to=config.mixup.get('bind_to', 'device')) + batch = dataset_utils.mixup( + batch, + config.mixup.alpha, + config.mixup.get('image_format', 'NHWC'), + rng=mixup_rng) + + # Bind the rng to the host/device we are on. + dropout_rng = train_utils.bind_rng_to_host_device( + rng, axis_name='batch', bind_to='device') + + def training_loss_fn(params): + variables = {'params': params, **train_state.model_state} + logits, new_model_state = flax_model.apply( + variables, + batch['inputs'], + mutable=['batch_stats'], + train=True, + rngs={'dropout': dropout_rng}, + debug=debug) + loss = loss_fn(logits, batch, variables['params']) + return loss, (new_model_state, logits) + + compute_gradient_fn = jax.value_and_grad(training_loss_fn, has_aux=True) + (train_cost, (new_model_state, + logits)), grad = compute_gradient_fn(train_state.params) + + del train_cost + # Re-use same axis_name as in the call to `pmap(...train_step...)` below. + grad = jax.lax.pmean(grad, axis_name='batch') + + if config.get('max_grad_norm') is not None: + grad = clip_grads(grad, config.max_grad_norm) + tx = train_state.tx + if tx is None: + raise ValueError('train_state.tx, the Gradient Transformation, is None') + updates, new_opt_state = tx.update( + grad, train_state.opt_state, train_state.params + ) + new_params = optax.apply_updates(train_state.params, updates) + + training_logs['l2_grads'] = jnp.sqrt( + sum([jnp.vdot(g, g) for g in jax.tree_util.tree_leaves(grad)]) + ) + ps = jax.tree_util.tree_leaves(new_params) + training_logs['l2_params'] = jnp.sqrt(sum([jnp.vdot(p, p) for p in ps])) + us = jax.tree_util.tree_leaves(updates) + training_logs['l2_updates'] = jnp.sqrt(sum([jnp.vdot(u, u) for u in us])) + # TODO(dehghani): Can we get this from the optimizer instead? + training_logs['learning_rate'] = lr_fn(jnp.asarray([train_state.global_step])) + + metrics = metrics_fn(logits, batch) + new_train_state = train_state.replace( # pytype: disable=attribute-error + global_step=train_state.global_step + 1, + opt_state=new_opt_state, + params=new_params, + model_state=new_model_state, + rng=new_rng) + + return new_train_state, metrics, training_logs + + +def eval_step( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + metrics_fn: MetricFn, + debug: Optional[bool] = False +) -> Tuple[Dict[str, Tuple[float, int]], jnp.ndarray]: + """Runs a single step of training. + + Note that in this code, the buffer of the second argument (batch) is donated + to the computation. + + Assumed API of metrics_fn is: + ```metrics = metrics_fn(logits, batch) + where batch is yielded by the batch iterator, and metrics is a dictionary + mapping metric name to a vector of per example measurements. eval_step will + aggregate (by summing) all per example measurements and divide by the + aggregated normalizers. For each given metric we compute: + 1/N sum_{b in batch_iter} metric(b), where N is the sum of normalizer + over all batches. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, params and optimizer state. The buffer of + this argument can be donated to the computation. + batch: A single batch of data. a metrics function, that given logits and + batch of data, calculates the metrics as well as the loss. + flax_model: A Flax model. + metrics_fn: A metrics function, that given logits and batch of data, + calculates the metrics as well as the loss. + debug: Whether the debug mode is enabled during evaluation. `debug=True` + enables model specific logging/storing some values using + jax.host_callback. + + Returns: + Calculated metrics and logits. + """ + variables = {'params': train_state.params, **train_state.model_state} + logits = flax_model.apply( + variables, batch['inputs'], train=False, mutable=False, debug=debug) + metrics = metrics_fn(logits, batch) + return metrics, logits + + +def representation_fn( + train_state: train_utils.TrainState, + batch: Batch, + *, + flax_model: nn.Module, + representation_layer: str, + gather_to_host: bool = True +) -> Tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]: + """Feeds the inputs to the model and returns their representations. + + Args: + train_state: TrainState, the state of training including the current + global_step, model_state, rng, and optimizer. The buffer of this argument + can be donated to the computation. + batch: A single batch of data from the dataset. + flax_model: A Flax model. + representation_layer: The name of the layer to use as the representation. + gather_to_host: Whether to gather results from all devices to the host, + rather than leaving them distributed. + + Returns: + Representation learned by the model for the given inputs and the labels and + masks. If `gather_to_host` is True, these are collected from all hosts. + """ + variables = {'params': train_state.params, **train_state.model_state} + + representation_layer_parts = representation_layer.split('/') + filter_rep = lambda mdl, _: mdl.name == representation_layer_parts[-1] + _, model_state = flax_model.apply( + variables, + batch['inputs'], + train=False, + capture_intermediates=filter_rep, + mutable=['intermediates'], + debug=False) + if 'intermediates' not in model_state: + raise ValueError(f'Layer with name "{representation_layer}"' + ' does not exist in your model.') + + representation = model_state['intermediates'] + for rep_layer in representation_layer_parts: + if rep_layer: + representation = representation[rep_layer] + representation = representation['__call__'][0] + if gather_to_host: + representation = jax.lax.all_gather(representation, 'batch') + batch = jax.lax.all_gather(batch, 'batch') + return representation, batch['label'], batch['batch_mask'] + + +def train( + *, + rng: jnp.ndarray, + config: ml_collections.ConfigDict, + model_cls: Type[base_model.BaseModel], + dataset: dataset_utils.Dataset, + workdir: str, + writer: metric_writers.MetricWriter, +) -> Tuple[train_utils.TrainState, Dict[str, Any], Dict[str, Any]]: + """Main training loop lives in this function. + + Given the model class and dataset, it prepares the items needed to run the + training, including the TrainState. + + Args: + rng: Jax rng key. + config: Configurations of the experiment. + model_cls: Model class; A model has a flax_module, a loss_fn, and a + metrics_fn associated with it. + dataset: The dataset that has train_iter, eval_iter, meta_data, and + optionally, test_iter. + workdir: Directory for checkpointing. + writer: CLU metrics writer instance. + + Returns: + train_sate that has the state of training (including current global_step, + model_state, rng, and the optimizer), train_summary and eval_summary which + are dict of metrics (from the last evaluation and train metric logging + respectively). These outputs are used for regression testing. + """ + lead_host = jax.process_index() == 0 + # Build the loss_fn, metrics, and flax_model. + model = model_cls(config, dataset.meta_data) + + # Initialize model. + rng, init_rng = jax.random.split(rng) + (params, model_state, num_trainable_params, + gflops) = train_utils.initialize_model( + model_def=model.flax_model, + input_spec=[(dataset.meta_data['input_shape'], + dataset.meta_data.get('input_dtype', jnp.float32))], + config=config, + rngs=init_rng) + + # Create optimizer. + lr_fn = lr_schedules.get_learning_rate_fn(config) + optimizer_config = optimizers.get_optax_optimizer_config(config) + # If the config is already an optax-compatible config, better call directly: + # optimizers.get_optimizer(config.optimizer_configs, lr_fn) + tx = optimizers.get_optimizer(optimizer_config, lr_fn, params=params) + # We jit this, such that the arrays that are created are created on the same + # device as the input is, in this case the CPU. Else they'd be on device[0]. + opt_state = jax.jit(tx.init, backend='cpu')(params) + + rng, train_rng = jax.random.split(rng) + + # Create chrono class to track and store training statistics and metadata: + chrono = train_utils.Chrono() + + train_state = train_utils.TrainState( + global_step=0, + opt_state=opt_state, + tx=tx, + params=params, + model_state=model_state, + rng=train_rng, + metadata={'chrono': chrono.save()}) + start_step = train_state.global_step + if config.checkpoint: + train_state, start_step = train_utils.restore_checkpoint( + workdir, train_state) + chrono.load(train_state.metadata['chrono']) + train_state = train_state.replace(metadata={}) + if (start_step == 0 # Which means "no" checkpoint is restored! + and config.get('init_from') is not None): + restored_model_cfg = config.init_from.get('model_config') + init_checkpoint_path = config.init_from.get('checkpoint_path') + if init_checkpoint_path is not None: + restored_train_state = pretrain_utils.restore_pretrained_checkpoint( + init_checkpoint_path, train_state, assert_exist=True) + # Load params from the init_model. + train_state = model.init_from_train_state( # pytype: disable=attribute-error + train_state, restored_train_state, restored_model_cfg) + del restored_train_state + + # Replicate the optimzier, state, and rng. + train_state = jax_utils.replicate(train_state) + del params # Do not keep a copy of the initial params. + + # Calculate the total number of training steps. + total_steps, steps_per_epoch = train_utils.get_num_training_steps( + config, dataset.meta_data) + + train_step_pmapped = jax.pmap( + functools.partial( + train_step, + flax_model=model.flax_model, + loss_fn=model.loss_function, + lr_fn=lr_fn, + metrics_fn=model.get_metrics_fn('train'), + config=config, + debug=config.debug_train), + axis_name='batch', + # We can donate both buffers of train_state and train_batch. + donate_argnums=(0, 1), + ) + eval_step_pmapped = jax.pmap( + functools.partial( + eval_step, + flax_model=model.flax_model, + metrics_fn=model.get_metrics_fn('validation'), + debug=config.debug_eval), + axis_name='batch', + # We can donate the eval_batch's buffer. + donate_argnums=(1,), + ) + if 'fewshot' in config: + representation_fn_fewshot = functools.partial( + representation_fn, + flax_model=model.flax_model, + representation_layer=config.fewshot.representation_layer) + fewshotter = fewshot_utils.FewShotEvaluator(representation_fn_fewshot, + config.fewshot) + + if 'linear_probe' in config: + representation_fn_linear_probe = functools.partial( + representation_fn, + flax_model=model.flax_model, + representation_layer=config.linear_probe.representation_layer, + gather_to_host=False) + rng, linear_probe_rng = jax.random.split(rng) + linear_probe = linear_probe_utils.LinearEvaluator( + representation_fn=representation_fn_linear_probe, + rng=linear_probe_rng, + linear_eval_config=config.linear_probe) + + log_eval_steps = config.get('log_eval_steps') or steps_per_epoch + if not log_eval_steps: + raise ValueError("'log_eval_steps' should be specified in the config.") + checkpoint_steps = config.get('checkpoint_steps') or log_eval_steps + max_checkpoint_keep = config.get('max_checkpoint_keep', 3) + log_summary_steps = config.get('log_summary_steps') or log_eval_steps + + def evaluate(train_state: train_utils.TrainState, step: int, + valid_iter: Iterator[Batch], + num_valid_ex: int) -> Dict[str, Any]: + eval_summary = {} + if not isinstance(valid_iter, dict): # Only on validation set. + valid_iter, num_valid_ex = {'valid': valid_iter}, {'valid': num_valid_ex} + + for val_name, val_iter in valid_iter.items(): + num_ex = num_valid_ex[val_name] + # Ceil rounding such that we include the last incomplete batch. + eval_batch_size = config.get('eval_batch_size', config.batch_size) + total_eval_steps = int(np.ceil(num_ex / eval_batch_size)) + steps_per_eval = config.get('steps_per_eval') or total_eval_steps + eval_metrics = [] + for _ in range(steps_per_eval): + eval_batch = next(val_iter) + if dataset.meta_data['target_is_onehot']: # Which includes multi-hot. + # Ignore the entries with all zero label for evaluation. + eval_batch['batch_mask'] *= eval_batch['label'].max(axis=-1) + e_metrics, _ = eval_step_pmapped(train_state, eval_batch) + eval_metrics.append(train_utils.unreplicate_and_get(e_metrics)) + eval_summary.update( + train_utils.log_eval_summary( + step=step, + eval_metrics=eval_metrics, + writer=writer, + prefix=val_name)) + del eval_metrics + writer.flush() + return eval_summary + + train_metrics, extra_training_logs = [], [] + train_summary, eval_summary = None, None + + chrono.inform(start_step, total_steps, config.batch_size, steps_per_epoch) + logging.info('Starting training loop at step %d.', start_step + 1) + report_progress = periodic_actions.ReportProgress( + num_train_steps=total_steps, + writer=writer, + every_secs=None, + every_steps=config.get('report_progress_step', log_summary_steps), + ) + + def write_note(note): + if lead_host: + platform.work_unit().set_notes(note) + + hooks = [] + if lead_host: + hooks.append(report_progress) + if config.get('xprof', True) and lead_host: + hooks.append(periodic_actions.Profile(num_profile_steps=5, logdir=workdir)) + + if start_step == 0: + step0_log = {'num_trainable_params': num_trainable_params} + if gflops: + step0_log['gflops'] = gflops + writer.write_scalars(1, step0_log) + + write_note(f'First step compilations...\n{chrono.note}') + for step in range(start_step + 1, total_steps + 1): + with jax.profiler.StepTraceAnnotation('train', step_num=step): + train_batch = next(dataset.train_iter) + train_state, t_metrics, t_logs = train_step_pmapped( + train_state, train_batch) + # This will accumulate metrics in TPU memory up to the point that we log + # them. This is no problem for small metrics but may be a problem for + # large (e.g. segmentation) metrics. An alternative is to set + # `log_summary_steps` to a small number, or to use + # `train_utils.unreplicate_and_get` here instead of right before writing + # summaries, but that means in each step, we have data transfer between + # tpu and host, which might slow down the training. + train_metrics.append(t_metrics) + # Additional training logs: learning rate: + t_logs = jax.tree_util.tree_map(jax_utils.unreplicate, t_logs) + extra_training_logs.append(t_logs) + + # Quick indication that training is happening. + logging.log_first_n(logging.INFO, 'Finished training step %d.', 5, step) + for h in hooks: + h(step) + + ############### LOG TRAIN SUMMARY ############### + if ((step % log_summary_steps == 1) or (step == total_steps) or + (lead_host and chrono.warmup)): + chrono.pause(wait_for=(train_metrics)) + if lead_host: + chrono.tick(step, writer, write_note) + train_summary = train_utils.log_train_summary( + step=step, + train_metrics=jax.tree_util.tree_map(train_utils.unreplicate_and_get, + train_metrics), + extra_training_logs=jax.tree_util.tree_map(jax.device_get, + extra_training_logs), + writer=writer) + # Reset metric accumulation for next evaluation cycle. + train_metrics, extra_training_logs = [], [] + chrono.resume() + ################### EVALUATION ####################### + if (step % log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('eval'): + # Sync model state across replicas. + train_state = train_utils.sync_model_state_across_replicas(train_state) + eval_summary = evaluate(train_state, step, dataset.valid_iter, + dataset.meta_data['num_eval_examples']) + chrono.resume() + ##################### CHECKPOINTING ############################ + if ((step % checkpoint_steps == 1 and step > 1) or + (step == total_steps)) and config.checkpoint: + chrono.pause(wait_for=(train_state.params, train_state.opt_state)) + with report_progress.timed('checkpoint'): + train_utils.handle_checkpointing( + train_state, chrono, workdir, max_checkpoint_keep) + chrono.resume() + + ##################### FEWSHOT EVALUATION ############################ + if 'fewshot' in config: + # Compute few-shot on-the-fly evaluation. + if (step % config.fewshot.log_eval_steps == 1) or (step == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('fewshot'): + results = fewshotter.run_all(train_state, config.fewshot.datasets) + fewshotter.log_fewshot_summary( + writer=writer, step=step, results=results) + del results + writer.write_scalars(step, {'zz/epoch': step / steps_per_epoch}) + writer.flush() + chrono.resume() # Un-pause now. + + ##################### LINEAR-PROBE EVALUATION ########################## + if 'linear_probe' in config: + if (config.linear_probe.log_eval_steps > 0 and + step % config.linear_probe.log_eval_steps == 1) or (step + == total_steps): + chrono.pause(wait_for=(train_state.params)) + with report_progress.timed('linear_probe'): + linear_probe.run_all( + train_state, + config.linear_probe.datasets, + writer=writer, + repr_step=step) + writer.flush() + chrono.resume() # Un-pause now. + + # Wait until computations are done before exiting. + train_utils.barrier_across_hosts() + # Return the train and eval summary after last step for regression testing. + assert train_summary is not None + assert eval_summary is not None + return train_state, train_summary, eval_summary diff --git a/setup.py b/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..4ba8d4aeac0efeaa5fee8fcaa00dcec449ff6568 --- /dev/null +++ b/setup.py @@ -0,0 +1,120 @@ +# Copyright 2024 The Scenic Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""setup.py for Scenic. + +Install for development: + + pip intall -e . .[testing] +""" + +import os +import urllib.request + +from setuptools import Command +from setuptools import find_packages +from setuptools import setup +from setuptools.command import install + +SIMCLR_DIR = "simclr/tf2" +DATA_UTILS_URL = "https://raw.githubusercontent.com/google-research/simclr/master/tf2/data_util.py" + + +class DownloadSimCLRAugmentationCommand(Command): + """Downloads SimCLR data_utils.py as it's not built into an egg.""" + description = __doc__ + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + build_cmd = self.get_finalized_command("build") + dist_root = os.path.realpath(build_cmd.build_lib) + output_dir = os.path.join(dist_root, SIMCLR_DIR) + if not os.path.exists(output_dir): + os.makedirs(output_dir) + output_path = os.path.join(output_dir, "data_util.py") + downloader = urllib.request.URLopener() + downloader.retrieve(DATA_UTILS_URL, output_path) + + +class InstallCommand(install.install): + + def run(self): + self.run_command("simclr_download") + install.install.run(self) + + +install_requires_projects = [ + "ott-jax>=0.2.0", + "sklearn", + "lingvo==0.12.6", + "seaborn>=0.11.2", + "dmvr @ git+https://ghfast.top/https://github.com/google-deepmind/dmvr.git", +] + +install_requires_core = [ + "absl-py>=1.0.0", + "numpy>=1.12", + "jax>=0.4.3", + "jaxlib>=0.4.3", + "flax>=0.4.0", + "ml-collections>=0.1.1", + "tensorflow>=2.7", + "immutabledict>=2.2.1", + "clu>=0.0.6", + "tensorflow-datasets", + "optax @ git+https://ghfast.top/https://github.com/google-deepmind/optax.git@main", +] + +tests_require = [ + "pytest", + "shapely", +] + install_requires_projects + +setup( + name="scenic", + version="0.0.1", + description=("A Jax Library for Computer Vision Research and Beyond."), + author="Scenic Authors", + author_email="no-reply@google.com", + long_description=open("README.md").read(), + long_description_content_type="text/markdown", + url="http://github.com/google-research/scenic", + license="Apache 2.0", + packages=find_packages(), + include_package_data=True, + install_requires=install_requires_core, + cmdclass={ + "simclr_download": DownloadSimCLRAugmentationCommand, + "install": InstallCommand, + }, + tests_require=tests_require, + extras_require={ + "testing": tests_require, + }, + classifiers=[ + "Development Status :: 1 - Beta", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + ], + keywords="Scenic", +)